xscreensaver-5.36/README000644 000767 000024 00000211670 12762500162 015026 0ustar00jwzstaff000000 000000 XScreenSaver a collection of free screen savers for X11 and MacOS By Jamie Zawinski and many others https://www.jwz.org/xscreensaver/ =============================================================================== This is the XScreenSaver source code distribution. It is strongly recommended that you install a binary release rather than trying to compile it yourself. Binaries are available for almost all platforms, including MacOS X. See the XScreenSaver web site for details. To compile for a Unix system with X11: ./configure make make install If you are on an "apt"-based system, "apt-get build-dep xscreensaver" might install most of the compilation dependencies. To compile for MacOS X or iOS: Use the included XCode project. Requires XCode 6 and MacOS X 10.8 or newer. To compile for Android: See android/README. Interested in writing a new screen saver? See the README.hacking file. =============================================================================== XScreenSaver has an extensive manual -- please read it! =============================================================================== 5.36 * New hacks, `discoball', `cubetwist', `cubestack', `splodesic' and `hexstrut'. * OSX: loading image files works in `dymaxionmap', `glplanet', `lavalite', `pulsar', `gleidescope' and `extrusion'. * Several new programs in `m6502'. * `rotzoomer -mode circle'. * Better titles in `photopile'. 5.35 * New hacks, `dymaxionmap', `unicrud', `energystream', `raverhoop' and `hydrostat'. * Added Windows 10 to `bsod'. * X11: ignore WM_USER_TIME property changes with days-old timestamps. Thanks, KDE. * MacOS, iOS: Better fonts in `BSOD' and `memscroller'. * MacOS 10.8 or later and iOS 6.0 or later are now required, since Xcode 6 can no longer build executables that work on older OSes. * Many, many Android improvements. * iOS: Fixed rotation to work with the new iOS 8+ API. * X11: `pong' is now playable. 5.34 * Fixed a crash when hot-swapping monitors while locked. * Fixed some incorrect output from `xscreensaver-command -watch'. * Various OSX and iOS performance improvements. 5.33 * New hacks, `splitflap' and `romanboy'. * Better detection of user activity on modern GNOME systems. * Sonar now does asynchronous host name resolution. * Improved Unicode support. * Updated `webcollage' for recent changes. * Various minor fixes. 5.32 * Fixed some X11 compilation problems. * Fixed display size and shake gestures on iOS. * OSX/iOS Performance improvements. 5.31 * New hacks, `geodesicgears', `binaryring' and `cityflow'. * UTF-8 text support (instead of only Latin1) and antialiased text on X11 with Xft (instead of only on OSX/iOS) in `fontglide', `noseguy', `fliptext', `starwars', and `winduprobot'. The other text-displaying hacks (`apple2', `phosphor', `xmatrix', and `gltext') also now accept UTF-8 input, though they convert it to Latin1 or ASCII. * `glplanet' now has both day and night maps, and a sharp terminator. * Fixed `webcollage' on OSX. * Fixed a transparency glitch in `winduprobot'. * `lockward' works on iOS. * Text and image loading work on OSX 10.10. * Rotation works properly on iOS 8. * Added a search field on iOS. * Preliminary, unfinished support for Android. 5.30 * New hack, `winduprobot'. * Many improvements to `lament', including Leviathan. * Fixed the normals in `flyingtoasters': shading is correct now. * Implemented TEXTURE_GEN in GLES: flying toast is now toasted on iOS. * Make cel-shading sort-of work in `skytentacles' on iOS. * Fixed dragging-to-rotate on rotated iOS devices, I think. * Dragging has inertia now. * Most hacks respond to mouse-clicks, double-taps and swipes as meaning "do something different now". * Reworked OpenGL fonts. * The OSX auto-update installer wasn't working. This time for sure? * Various minor fixes. 5.29 * Downgraded to Xcode 5.0.2 to make it possible to build savers that will still run on 10.6 and 10.7. Sigh. * Updated `webcollage' for recent changes. 5.28 * Fixed some compilation problems and intermittent crashes. * Turned off the OSX 10.6 enable_gc hack. It didn't work. 5.27 * New hacks, `tessellimage' and `projectiveplane'. * Added support for pthreads, because Dave Odell is a madman. * Updated `webcollage' for recent changes. * Minor iOS tweaks to the `analogtv' hacks. * X11: Don't assume Suspend = 0 implies "No DPMS". * Minor updates to `boxed' and `klein'. * Fixed possible crash in `apple2', `noseguy', `xmatrix', `shadebobs'. * Fixed possible crash in OSX preferences. * OSX Performance improvements. * Plugged some leaks. 5.26 * More auto-updater tweaks. 5.25 * Try harder to bypass Quarrantine and Gatekeeper in OSX installer. * Some files were missing from the tarball. 5.24 * Added "Automatically check for updates" option on OSX. * Updated feed-loading for recent Flickr changes. * Updated `webcollage' for recent Google changes. * Added Instagram and Bing as `webcollage' image sources. * Updated to latest autoconf. * Bug fixes. 5.23 * New hack, `geodesic'. * iOS and OSX: huge XCopyArea performance improvements. * More heuristics for using RSS feeds as image sources. * Improved Wikipedia parser. * Updated `webcollage' for recent Flickr changes. * Added Android to `bsod'. * OSX: Added a real installer. * iOS and OSX: fixed a font-metrics bug. * iOS: Fixed aspect ratio bug in non-rotating apps when launched in landscape mode. * Made `quasicrystal' work on weak graphics cards. * iOS: fixed `ifs'. * Better compression on icons, plists and XML files: smaller distribution and installation footprint. * Reverted that DEACTIVATE change. Bad idea. * `Phosphor' now supports amber as well as green. 5.22 * New hacks, `kaleidocycle', `quasicrystal', `unknownpleasures' and `hexadrop'. * Performance improvements for `interference'. * Fixed possible crashes in `apple2', `maze', `pacman', `polyominoes', `fireworkx', `engine'. * Fix for `bumps' in 64 bit. * Fixed preferences crash on old iOS 5 devices. * Fixed "Shake to Randomize"; display name of saver. * Fixed weirdness with "Frame Rate" sliders on iOS. * Fixed rotation problems with `pacman', `decayscreen'. * Better dragging in `fluidballs'. * Ignore rotation in hacks that don't benefit from it. * Ignore DEACTIVATE messages when locked, instead of popping up the password dialog box. 5.21 * Changed default text source from Twitter to Wikipedia, since Twitter now requires a login to get any feeds. * New version of `fireworkx'. * Minor fixes to `distort', `fontglide', `xmatrix'. * New MacOS crash in `bsod'. * New mode in `lcdscrub'. 5.20 * Support for iPhone 5 screen size. * Fixed modifier key handing in Apple2.app and Phosphor.app on MacOS. * Various minor bug fixes. 5.19 * MacOS 10.8.0 compatibility. * iOS performance improvements. 5.18 * 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. 5.17 * More iOS tweaks. * Fixed some compilation problems. * Enlarged the texture image for `lament'. 5.16 * Ported to iPhone and iPad. * XInput devices now also ignore small mouse motions. * Loading images via RSS feeds is much improved. * Various minor fixes. 5.15 * New hacks, `hilbert', `companioncube' and `tronbit'. * Image-manipulating hacks can now load from RSS or Atom feeds: `imageDirectory' may contain a URL. * Updated `webcollage' for recent search engine changes. * `phosphor' and `apple2' can now be run as standalone terminal emulator applications on MacOS. * `photopile' sped up. * New molecule in `molecule'. * "Upgraded" to XCode 4.0, which means that MacOS 10.4 PPC builds are impossible, and Intel is now required. * Turned on LC_CTYPE on Linux; maybe Japanese password entry works now? 5.14 * Fixed crash in Blank Only Mode when DPMS disabled. * Added "Quick Power-off in Blank Only Mode" option. * BSOD GLaDOS. 5.13 * Optionally enabled full-scene OpenGL antialiasing. Set the resource `*multiSample' to true if doing so doesn't kill performance with your video hardware. * New version of `glhanoi'. * Image-loading hacks that display the file name now also display the sub-directory (xscreensaver-getimage now returns relative paths under imageDirectory). * Passwords that contain UTF-8 non-Latin1 chars are now typeable. * Numerous minor stability fixes. 5.12 * Big speed improvement on OSX for heavy XCopyArea users (`xmatrix', `moire2', `phosphor', etc.) * Plugged a bad OSX-only Pixmap leak. * Kludged around the OSX pty bug that caused text to be truncated in phosphor, starwars, apple2, etc. * New molecule in `molecule'. * `glhanoi' now supports an arbitrary number of poles. * Turned on "New Login" button by default. * Added support for XInput-style alternate input devices. 5.11 * New versions of `photopile', `strange'. * Worked around MacOS 10.6 garbage collector bug that caused the screen saver process to become enormous. * Fixed flicker in `pipes', `cubestorm', and `noof'. * Fixed EXIF rotation on MacOS 10.6. * Fixed desktop-grabbing when screen locked on MacOS. * Minor fixes to `circuit', `polyhedra', `tangram', `gears', `pinion', `substrate', `xanalogtv'. * Fixed some leaks in `xanalogtv' and `apple2'. * Better seeding of the RNG. 5.10 * Fixed some crashes and color problems on MacOS 10.6. * Retired `hypercube' and `hyperball', which are redundant with `polytopes'. 5.09 * Ported to MacOS 10.6, including various 64-bit fixes. * New hack, `rubikblocks'. * Fixed another potential RANDR crash. * Use correct proxy server on MacOS. * `molecule' now correctly displays PDB 3.2 files. * Updates to `mirrorblob', `glhanoi', and `sonar'. * Rewritten version of `klein' hack. * New hack, `surfaces', incorporating objects from old `klein' hack, plus new ones. * Merged `juggle' and `juggler3d' hacks. * Fixed compilation under gcc 4.4.0 (strict aliasing). * Fixed intermittent failure in `xscreensaver-command'. 5.08 * New hack, `photopile'. * Rewrote `sonar' and `jigsaw' as OpenGL programs. * Minor tweaks to `maze', `m6502', `hypnowheel', and `timetunnel'. * Savers that load images now obey EXIF rotation tags. * Arrgh, more RANDR noise! Fixes this time for rotated screens, and for systems where RANDR lies and says the screen size is 0x0. * When the password dialog has timed out or been cancelled, don't pop it right back up a second time. * Password timeouts/cancels don't count as "failed logins". * Retired some of the older, less interesting savers: say goodbye to `bubbles', `critical', `flag', `forest', `glforestfire', `lmorph', `laser', `lightning', `lisa', `lissie', `rotor', `sphere', `spiral', `t3d', `vines', `whirlygig', and `worm'. * Merged `munch' and `mismunch'. * Updated `webcollage' to use twitpic.com as well. 5.07 * Xinerama/RANDR tweaks for old-style multi-screen. * Added bumpy skin and cel shading to `skytentacles'. * `flipflop' can load images onto the tiles. * Fixed the bouncing ball in `stairs'. * Added the missing Utah Teapotahedron to `polyhedra'. * `blitspin' works with color images on MacOS now. * Added transparency to `stonerview'. * Improved layout of the preferences dialogs: they should all now be usable even on ridiculously tiny laptop screens. * MacOS preferences text fields now prevent you from entering numbers that are out of range. * Added "Reset to Defaults" button on X11. * Added relevant Wikipedia links to many of the screen saver descriptions. * All hacks support the `-fps' option, not just GL ones. * The `-fps' option now shows CPU load. 5.06 * Xinerama/RANDR fixes: this time for sure. It should now work to add/remove monitors or resize screens at any time. * New hack, `skytentacles'. * New version of `gleidescope'. * Added the `-log' option to the xscreensaver daemon, since a truly shocking number of Linux users seem to have no idea how to redirect output to a file. * Added `-duration' arg to most image-loading hacks, so that they pick a new image every few minutes. * Added an ATM crash to `bsod'. 5.05 * New hacks, `cubicgrid', `hypnowheel', and `lcdscrub' (which isn't really a screen saver). * Updates to `m6502' and `gears'. * Fixed double-buffering problems in `cubestorm' and `noof'. * Better handling of horizontal scroll wheels. * Attempt to work around latest Xinerama braindamage: if the server reports overlapping screens, use the largest non-overlapping rectangles available. * Don't warning about receipt of bogus ClientMessages, since Gnome's just never going to stop sending those. * Worked around MacOS 10.5 perl bug that caused the text-displaying hacks to fail on some systems. * Hopefully fixed font-related System Preferences crashes in MacOS savers. * The recent PAM changes broke the "Caps Lock" warning in the password dialog, the failed login warnings, and syslogging. Fixed all that. 5.04 * Fixed a possible crash in the unlock dialog (more fallout from the recent PAM changes...) * New hacks, `moebiusgears', `abstractile', and `lockward'. * Rewrote `gears' to use better (involute) gear models, and to be more random. * Minor updates to `cwaves', `voronoi', `deco', `glcells', `rd-bomb', `fireworkx' and `webcollage'. * `pong' can now display the current time as the score. * `xmatrix -mode pipe' works better. * Minor tweaks for compilation on MacOS 10.5.0. 5.03 * New hacks, `cwaves', `glcells', `m6502', and `voronoi'. * Minor fixes to `bsod'. * Fixed possible crash with PAM USB-dongle auth. * Updated `webcollage' to track recent Google Images and Flickr changes. 5.02 * Reworked PAM code to support fingerprint readers, etc. * Ported `webcollage' to MacOS. * Added MacOS 10.2 and 10.3 kernel panics to `bsod'. * Fixed a Xinerama crash when changing the screen count. * New blobbier `mirrorblob'. * Minor updates to `lisa', `bsod', `ifs', `hypertorus', `polytopes', `circuit', `endgame', `crackberg', `flipflop', `flipscreen3d', `fliptext', and `carousel'. * Enabled multi-threaded OpenGL on MacOS. 5.01 * Backed out recent locale-related changes, since they broke far more things than they fixed. * Fail gracefully with ridiculously small window sizes. * `xflame' and `flag' ignore bitmap option on MacOS. * `speedmine' prefs work on MacOS. * Better explosions in `boxed'. * More dynamic motion in `sproingies'. * More options in `flipflop'. * Minor updates to `topblock'. * Various other minor fixes. 5.00 * Ported to MacOS X! (10.4.0 or newer) * API change: instead of providing a single screenhack() function that does not return, screen savers using the screenhack.h framework must now provide "init" and "draw one frame" functions instead. All bundled savers have been updated; third-party patches will need work. * All image-loading happens asynchronously. * xscreensaver-getimage-file caches the contents of the image directory for a few hours, so consecutive runs won't have to re-list the whole directory tree. * New hacks, `topblock' and `glschool'. * Removed `xteevee' (superceded by `xanalogtv'). * Added variable-sized puzzle pieces to `jigsaw'. * Changes to the defaults and command-line options of many hacks to make the .xml files more consistent. * Reap zombies in `glslideshow' and `carousel'. * `sonar' works without setuid on MacOS (dgram icmp). * `xmatrix -mode pipe' displays the text of a subprocess. * `endgame' has higher resolution chess-piece models. * `webcollage' takes a -directory option to get images from a local directory. * The RPM spec file no longer auto-restarts xscreensaver when a new version is installed. Restart it manually. 4.24 * New versions of `cube21', `glsnake', `celtic'. * Backed out a DPMS-related patch that cause desktop flickering with some X servers. * Fixed startup crash in getgroups() when running setuid. * Default to not displaying stderr on the saver window. * Fixed bad free() in "Documentation" button. * Don't try to run hacks that aren't installed. * Minor fixes to various XML config files and man pages. 4.23 * New hacks, `glhanoi', `cube21', `timetunnel', `juggler3d', and `celtic'. * New versions of `tangram', `webcollage', `hypertorus', `polytopes', and `ripples'. * `sonar' is now quiet about unresolvable hosts. * Minor corrections to BASIC code in `apple2'. * xscreensaver-demo now provides an RPM clue when none of the hacks seem to be installed. * Don't install `ant' by default, since there is some Java tool of that name, which was causing confusion. And also it's boring. * Made screen grabbing work again on MacOS 10.4.2. * No longer prints bogus warnings about ClientMessages intended for the window manager. * Ignore unprintable characters in passwd entry field. * Fixed yet another cross-host-display image-loading endian problem. * `xscreensaver-command -watch' and `-time' now work on 64-bit machines. 4.22 * Fixed a bug in the new mouse-motion code that caused the screen to never blank on multi-head non-Xinerama systems. Oops. * New hacks, `interaggregate', `antmaze', `tangram', and `crackberg'. * Minor tweaks to `fiberlamp', `ifs', `slidescreen', `zoom', `sonar', `fireworkx', `whirlwindwarp', `bubble3d', and `rd-bomb'. * Added motion blur to `blinkbox'. * `bsod' now includes Longhorn's "RSOD", and OS/2. * Fixed `-wireframe' usage in most hacks and man pages. 4.21 * New hack: `fliptext'. * Changed default configure installation directories: /usr/bin/ for xscreensaver, etc.; /usr/libexec/xscreensaver/ for hacks; /usr/share/xscreensaver/config/ for xml files. * All the text-manipulating screen savers can have their text source configured via `xscreensaver-demo' now. * xscreensaver.spec now builds three RPMs: base (no hacks); extras (2d hacks); and gl-extras. * Added `-program' and `-front' option to `gltext'. * Added `-shells' to `molecule'. * Fixed text-alpha glitch in `carousel'. * New `pacman': the ghosts can be killed now. * Fixed a bug in screen-grabbing GL hacks where images would be tiled instead of scaled on machines that can't do large textures. * `webcollage' can hit Flickr now. * New (rewritten) implementation of `ifs'. * The unlock dialog can be made to have a "New Login" button that will run `gdmflexiserver'. Experimental! * Fixed non-ASCII display bug in `starwars'. * Configure finds a default for imageDirectory. * "xscreensaver-command -lock" now works even if in "screensaver disabled" mode. * If a bad password is typed while CapsLock is on, the unlock dialog says "CapsLock?" instead of "Sorry". * Mouse motion only counts as activity if the mouse moved more than 10 pixels (so the screen won't unblank every time you bump your desk.) * New mode option "random-same": if you have multiple monitors, this will run the *same* randomly chosen hack on each screen, instead of different ones on each. 4.20 * New hacks, `fiberlamp', `boing', `boxfit', and `carousel'. * Rewrote `glslideshow' again: should be faster now. * Sped up loading of images in GL programs. * `starwars' uses texture-mapped fonts now. * New `bsod' modes: tru64, hppa, and nvidia. * Updates to `webcollage', `juggle', `pinion', `fireworkx', `sonar', `extrusion', `substrate', and `pong'. 4.19 * New hacks, `substrate', `intermomentary', `fireworkx', and `pinion'. * New version of `flow'. * Made /proc/interrupts work again on Linux 2.6. * Made `analogtv' not hog the CPU. * Made analogtv-based hacks work properly on PPC/ARM. * Fixed a bad memory leak in `piecewise'. * Minor updates to `sonar', `molecule', `glmatrix', `galaxy', and `webcollage'. * Removed support for GTK 1.x (everyone uses 2.x now.) 4.18 * Oops, pay no attention to the man behind the curtain. 4.17 * New hacks, `anemotaxis' and `memscroller'. * Fixed a bad bug that caused `vidwhacker' to never die. * Fixed normals and lighting in `polyhedra'. * Don't reuse the window when changing hacks (to work around bugs in some GL implementations.) * Made `xscreensaver-getimage-file' skip thumbnail-sized images. * Fixed endian problem in `barcode' on non-x86. * Updates to `webcollage', `apple2', `fuzzyflakes', `atunnel', and `pacman'. * Timing tweaks to `bubble3d', `bouncingcow', `engine', `gltext', `lavalite', `molecule', `spotlight', `sballs', `boxed', `blinkbox', and `circuit'. * Configure updates for Fedora core 2 / xorg 6.7.0. * Compile without warnings under gcc 3.3.3. * I give up: don't blank or lock the screen if we can't get a keyboard grab. In that case, both choices are bad. 4.16 * New hacks, `polyhedra', `fuzzyflakes', `antinspect', and `providence'. * Minor updates to `webcollage', `bsod', `endgame', `antspotlight', `xmatrix', and `glmatrix'. * Added support for the RANDR (Resize and Rotate) extension to detect when the size of the desktop has been changed while xscreensaver is already running. * Possibly-futile attempt to work around "rdesktop" focus/grab idiocy. * Made `xscreensaver-getimage -file' still work even if imageDirectory is unset. * Convert Latin1 to ASCII in `starwars' and `phosphor' (since the GLUT font only has ASCII glyphs.) * Fixed randomization in `noof'. * Added "GetViewPortIsFullOfLies" preference to work around longstanding XFree86 bug #421. * Made `sonar' subnet pinging work properly on bigendian machines (e.g., PPC.) 4.15 * New hacks, `wormhole', `mismunch', `noof', and `pacman'. * `phosphor' and `apple2' include vt100 emulators now: this means you can do "phosphor -program top", or can use either program as an xterm replacement: "apple2 -text -fast -program 'xemacs -nw'". * `analogtv' (and related) fill the screen better. * The '-gradient' option works in `atlantis' now. * Minor updates to `blinkbox', `queens', `endgame', `glmatrix', `mirrorblob', `blocktube', and `molecule'. * Integrated SuSE's "external passwd helper" support. * Marginally better /tmp handling in various programs. * Updated config defaults for xplanet 1.0.3. * Portability fixes. 4.14 * New hacks, `fontglide', `apple2', `xanalogtv', `pong', `gleidescope', `mirrorblob', and `blinkbox'. * New version of `glsnake' (with many more models.) * Another Windows crash in `bsod'; also HVX/GCOS6/TPS6. * New version of `endgame'. * Screen grabbing works on MacOS X. * Various minor fixes. 4.13 * On Xinerama systems, xscreensaver now runs one hack on each monitor (just like in "real" multi-head mode) instead of running one hack stretching across all the screens. Note that for this to work with any 3rd party screensavers, they must update their "vroot.h" file. * `webcollage' and `vidwhacker' display images using `xscreensaver-getimage' now. * Added `ljlatest' script for use with `starwars' and `phosphor'. 4.12 * New GL hacks, `flipflop', `antspotlight', and `polytopes'. * Added VMS to `bsod'. * Compile without warnings in "gcc -pedantic". * Updates to `webcollage' and `queens'. * Fixed a bug that could cause PAM to hang. 4.11 * New hacks, `hypertorus', `cubestorm', `glknots', `blocktube', and `glmatrix'. * Updates to `cloudlife', `engine', `xmatrix', and `sonar'. * Rewrote `glslideshow': it should work on somewhat wimpier video cards now. * Various portability tweaks. 4.10 * New hacks, `cloudlife' and `klein'. * Added Apple ][+, HPUX, and OS/390 sessions to `bsod'. * Added some Matrix Reloaded text to `xmatrix'. * Updates to `webcollage', `eruption', `jigglypuff', `metaballs', and `endgame'. * Completely ignore the `memoryLimit' setting now, since it was still causing people GL grief. * Various minor fixes. 4.09 * New hacks, `flyingtoasters', `bouncingcow', `jigglypuff', and `glslideshow'. * More models in `engine'. * Rewrote `xscreensaver-getimage' to remove reliance on external image loaders (xv, chbg, xloadimage, etc.) and to reduce flicker when loading files. * Made `gflux' and `flipscreen3d' be mouse-spinnable. 4.08 * New hacks, `atunnels' and `piecewise'. * Physics improvement in `fluidballs'. * Various fixes for XDarwin systems (X11 on MacOS X.) * Added -clock option to `barcode'. * Minor fixes to `endgame', `flurry', `flipscreen3d', and `gflux'. 4.07 * New hacks, `flurry', `metaballs', `eruption', `popsquares', and `barcode'. * Minor updates to `maze' for high density mazes. * Added double buffering to `fluidballs' and `whirlygig'. * Bug fixes for running xscreensaver to a remote XFree86 display (which nobody would ever do...) * Updated `webcollage' (faster Alta Vista searching.) * Updated `glplanet' so the sun sets in the west. * Updated `sproingies' with smooth, unsegmented surfaces. * Fixed Perl version-sensitivity in `xscreensaver-getimage-file'. * Fixed GTK2 scrolling bug in `xscreensaver-demo'. 4.06 * New hack, `glblur' (disabled by default, since it requires fast OpenGL texture support.) * New hack, `halftone'. * Updates to `endgame', `queens', `bumps', `glplanet', `engine', and `circuit'. * New version of `menger' that uses far fewer polygons. * Fixed minor bug in `critical' that could cause some bogus X servers to crash. * Better labels in `molecule': the labels now appear to be attached to the atoms, instead of floating in front of the whole scene. * Fixed bug that could rarely cause GL hacks to fail to double-buffer (causing intermittent flickering.) * Fixed a relative-URL-parsing bug in `webcollage'. * Fixed a bug that (sometimes) caused the window manager close box to kill `xscreensaver-demo' with a crash instead of a graceful exit. * Updated xscreensaver.pam to the Red Hat 7.3 way. * More Gnome2-related configure crap. * Updated to latest `config.guess' and `config.sub'. * Fixed occasional core dump in `distort'. * Added a Linux fsck failure and kernel panic to `bsod'. * Added MacOS X kernel panic to `bsod'. * Fixed a bug in `bsod' (all bsod bugs are ironic.) * Fixed a bug that caused `xscreensaver-gl-helper' to print a nonsense visual ID with some versions of `printf': this could cause GL programs to display incorrectly (e.g., flickery.) 4.05 * More `configure' tweaks to try and get things working on systems that both Gtk 1.x and 2.x installed. * New hack, `endgame'. * Minor updates to `gltext'. 4.04 * Support for GTK 2.x / GNOME 2.x. * The `configure' script will now use `pkg-config' if you have it, in preference to `gtk-config', etc. * New hacks, `lavalite', `queens', and `anemone'. * Minor updates to `spheremonics', `gltext', `xmatrix'. * You can use the mouse to manually spin most of the GL hacks now (when they are displaying in a window.) * Fixed a bug in `webcollage' (due to recent Alta Vista url changes) that was causing it to try and load incorrect image URLs. * Made `xscreensaver-getimage' use gdk_pixbuf if it is available: this means that those hacks that load images will no longer rely on "xv", "xloadimage", etc. This will close a race condition that could sometimes cause your desktop background to be changed; and also makes it possible for those programs to operate on image files when running in windowed mode. * `webcollage' can now be used in conjunction with `driftnet' to display images snooped from your local ethernet instead of obtained from search engines. * Added man pages for all the hacks that didn't have them. 4.03 * New hack, `spheremonics'. * Minor updates to `webcollage', `cage', `moebius', `morph3d', `boxed', `circuit', and `helix'. * `pulsar' and `extrusion' can now load texture JPEGs. * `rubik' now does non-square cubes. * `fluidballs' now does various sizes of balls. * `menger' and `sierpinski3d' now also show polygon counts in -fps mode. * `molecule' displays real subscripts in the formulae. * GTK internationalization/localization support. * Better detection of the various versions of libxml. * Upgraded to autoconf 2.53 (from 2.13.) 4.02 * Plugged a few minor leaks in `xscreensaver' and `xscreensaver-demo'. * New hacks, `cubenetic' and `fluidballs'. * Sped up `pipes'. * Fixed sphere projection error in `glplanet'; installed a better image of earth. * Added Win2K and MacOS 1 crashes to `bsod'. * Put back previous (better) version of `forest' that was accidentially downgraded in the last release. * New version of `bumps'. * Made FPS computation in GL hacks more efficient: it will influence the results less, thus resulting in higher (but more accurate) reported frame rates. 4.01 * New hacks: `twang', `glsnake', `boxed', `sballs', and `glforestfire'. * New hacks `apollonian', `euler2d', `juggle', `polyominoes' and `thornbird', from xlockmore. * Merged recent xlockmore changes into `ant', `braid', `demon', `discrete', `drift', `fadeplot', `forest', `grav', `hopalong', `ifs', `laser', `lightning', `lisa', `lissie', `loop', `mountain', `penrose', `rotor', `sierpinski', `slip', `sphere', `spiral', `strange', and `vines'. * Fixed the `gltext' bug that sometimes caused horizontal lines to vanish again. This time for sure. * Sped up `webcollage' by adding a C helper program to replace the PPM pipeline. It also pastes images semi-transparently now. * Added support for the gdk_pixbuf library: if this lib is available, then `blitspin', `xflame', and `flag' can load GIF, JPEG, and PNG images in addition to XPM and XBM. * Fixed a rare race condition where the desktop-grabbing hacks could sometimes leave the screen wedged, if the user moved the mouse exactly when they were grabbing the screen image (it would un-wedge the next time the saver timed out or was activated.) * Fixed incorrect colors in the screen-grabbing GL hacks (`gflux' and `flipscreen3d'.) * Made SIGHUP restart the daemon process (though using `xscreensaver-command -restart' is still the preferred way.) * Tweaks to `xspirograph'. * Minor configure and portability tweaks. 4.00 * Redesigned `xscreensaver-demo' GUI: it now includes small-preview and per-hack configuration dialogs. * Added three new modes of operation: `One Screen Saver', `Blank Screen', and `Don't Blank' (in addition to the historical `Random Screen Saver'). * Configure now defaults to installing the hacks in /lib/xscreensaver/ instead of /bin/. (Most distros already did it this way.) * New GL hacks, `menger', `engine', `flipscreen3d'. * Made `sierpinski3d' be more colorful. * New versions of `xmatrix' and `nerverot'. * Fixed a bug in `starwars' that made the font be drawn with thin lines in -root mode. * Fixed a bad colormap bug in `crystal' that could make *subsequent* hacks malfunction! * Made `gflux' able to grab screen images (`-mode grab'). * Updated `webcollage' for recent search engine changes. * Removed most command-line options to `xscreensaver': just edit the ~/.xscreensaver file instead. * Improved behavior on multi-screen and Xinerama systems: the mouse now stays on the screen where the user left it, and the password and splash dialogs always appear on the screen that has the mouse. * Made the splash dialog use more Gtk-like colors; made it have only two buttons, "Settings" and "Help". * Made `sonar' understand `.ssh/known_hosts2' format files, and be better about stripping out illegal addresses. 3.34 * Turned `memoryLimit' off by default, sigh. Apparently some versions of the GL libraries (appear to) allocate hundreds of megs for every GL program, so `memoryLimit' was causing GL programs to malfunction or crash on those systems. * Improved fading on TrueColor XFree86 4.1.x systems. * New GL hack, `circuit'. * Added `fuzz' mode to `decayscreen'. * New version of `whirlygig'. * Added links to `xplanet' and `sphereEversion'. * Fixed rare race condition that could make `sonar' hang. * Fixed potential crash in `speedmine'. * Made `xscreensaver-demo' not crash when imageDirectory was set to a non-existent directory. * Made `xscreensaver-getimage-video' invoke XawTV's `streamer' program better. * Made `phosphor' and `starwars' deal with CR, LF, or CRLF line endings. * Changes for Cygwin compilation environments. * Made `sonar' compile on systems that can't ping. * Configure changes for HPUX 10.20. * Made PAM code work on Red Had 4.2 systems. * Made `xscreensaver-command -deactivate' work when the saver is not active: what that does is reset the idle timer, as if keyboard input had been detected. This was added for the benefit of people writing DVD-playing software: they can now prevent the screensaver from kicking in by sending a -deactivate message once a minute while the movie is playing and not paused. * Various minor portability tweaks. 3.33 * New hacks, `speedmine' and `whirlygig'. * Sped up `pyro', made the explosions look a bit better. * Added better stars to `glplanet' and `starwars'. * Many internal changes to `webcollage'. * Some new options to `attraction'. * Minor fix to `noseguy' to avoid un-erased pixels. * Rewrote the screen-eraser effects so that they complete in the same amount of time regardless of how slow your X server is (some of them were glacial on servers with slow blitting.) * Fixed a potential free memory reference that could sometimes cause a crash at startup. * Possibly fixed a problem that could cause the daemon to crash with an X error. I was never able to reproduce this problem, but I think I might have figured out what caused it. * Worked around a problem that caused PAM authentication to fail on some Red Hat 7.x systems. * Added a `memoryLimit' parameter that controls the amount of memory a graphics hack may allocate: if they try to allocate more than this, malloc() will fail (and they will exit or (safely) crash, rather than hogging memory.) Default is 50M. * Made `gnome-help-browser' be the default way to display man pages in `xscreensaver-demo', if running on a GNOME system. 3.32 * The image-manipulating hacks (`slidescreen', etc.) can now operate on randomly chosen image files from disk, or on frames captured from the system's video input, instead of (or in addition to) manipulating images of the desktop. * Rewrote `vidwhacker' to use the new image-grabbing mechanism. * Made fading work on TrueColor XFree86 4.x systems. * Fixed a subtle rendering bug in `atlantis' (the fish were inside out!) * Made `atlantis' have a texture simulating light reflections from the surface of the ocean. * Fixed up label placement in `molecule'. * Better color bars in `xteevee'. * Made `install-strip' not try to strip scripts. 3.31 * Put in more sensible defaults for DPMS, and updated the documentation to reflect the fact that all your DPMS settings are now belong to xscreensaver. * Fixed the `xscreensaver.spec' file so that `--force' is no longer needed. * New versions of `rotzoomer' and `nerverot'. * Fixed an OSF/1 compilation problem in `molecule'. 3.30 * New hacks, `molecule', `dangerball', and `rotzoomer'. * New version of `gflux'. * Made `gltext' able to display the current time. * Fixed a floating-point-precision problem in `gltext' that sometimes caused horizontal lines to vanish. * Removed the `-window-id' option from the hacks: it never worked right, and was unnecessary. * Made the `starwars' hack use thicker lines, antialias the text, and fade out at the far edge instead of just dropping off. * Fixed an SHM segment leak in `moire'. 3.29 * Better rendering of the new logo. * New hack, `gltext'. * Added `-planetary' option to `gears', to draw a different kind of gear system. * Made motion and rotation be smoother in `gears', `glplanet', `moebius', `rubik', and `sierpinski3d'. * Improved coloration in `sierpinski3d'. * Made the GL hacks react to window size changes. * Made most of the GL hacks take a -fps option (like `pulsar' did), so you can use them to benchmark your 3D hardware. * Fixed the previous fix to `sonar'. * Minor fix to `nerverot'. Made sonar able to ping hosts on DEC OSF1. * Eliminated a bogus "didn't get enough colors" warning in some of the hacks. 3.28 * New logo for xscreensaver! * New hacks, `starwars' and `stonerview'. * Made the motion of the bouncing ball in `stairs' be a little less jerky. * Made newly-added screenhacks be added to .xscreensaver automatically: if there are hacks in the app-defaults file that are not also in ~/.xscreensaver, they will be added to the end of the list. * Redid the `Screensaver Options' part of the control panel; xscreensaver now lets you configure your DPMS settings. * Fixed some Makefile problems with non-GL builds. * Fixed detection of MesaGL for version 3.3. * Better workaround to Red Hat 7.0's broken gcc. * Added Sparc Solaris kernel panic to `bsod'. 3.27 * New hacks: `zoom' and `whirlwindwarp'. * Fixed a free-memory-reference bug in `sonar'. * Better error handling when there are no suitable GL visuals. * Added diagnostic dialog when xscreensaver-demo is unable to launch xscreensaver (e.g., when running as root.) * Fixed a bug that caused screenhack argument changes to be ignored when xscreensaver-demo was running as root (if "root" and "nobody" have different home directories.) * Made the programs default to ":0" if $DISPLAY is unset. * Made the `-verbose' output include information about which server extensions were supported at compile time. * Worked around Red Hat 7.0's broken gcc 2.96. * Updated default delays on the GL hacks to look better on machines with super-fast 3D hardware. * Install `screensaver-properties-capplet' to work around the usual egregious GNOME lossage. 3.26 * Added "enabled" checkboxes in the list of hacks in xscreensaver-demo (Gtk version only.) * New hacks `hyperball', `xrayswarm', and `gflux'. * New versions of `nerverot', `galaxy', and `hypercube'. * Small fixes to `phosphor', `shadebobs', `xflame', and `sonar'. * Added external helper program `xscreensaver-gl-helper' to figure out which X visual to use for OpenGL programs. * Configure updates for XFree86 4.0, and for BSD. * Made it be more tolerant of bogus /etc/group files. * When installing the PAM config file, first try to just copy an existing "xdm" or "login" config file, so that xscreensaver does authentication in the same way as the rest of the system. 3.25 * New hack, `nerverot'. * Added BSD kernel panic to `bsod'. * New version of `shadebobs'. * New version of `petri'. * Updated `webcollage' to handle recent Altavista URL format changes; made it search the AP photo gallery. * Revamped command-line options of `sonar' and made it properly handle subnets. * The `bubbles' hack can now trickle up or down the screen. * The `xsublim' hack can now read its text from programs. * Support for GLE version 3 in `extrusion'. * Fixed compilation problems in `maze'. * Fixed a rare crash in `flow'. * Fixes for minor installation problems. 3.24 * Added `-ignorant' option to `maze' hack. * Updates to `critical', `bsod', `xflame', and `flow'. * Added support for Kerberos 5 (via its Kerberos 4 compatibility layer.) * Fixed a bad leak in `xteevee'. * Updated `webcollage' to handle recent Altavista URL format changes. * Removed xscreensaver-demo's `Ok' and `Cancel' buttons, since they were confusing people: all changes are now instantanious. * Made xscreensaver-demo install itself into the Gnome Control Center. 3.23 * Fixed some misplaced text fields in the Motif version of xscreensaver-demo; fixed a crash in the Gtk version that would happen if the programs list was empty. * Fixed a recently-introduced bug in `pulsar'. * Made `sierpinski3d' use solid tetrahedrons instead of points. * Added `-trace' option to `xmatrix'. * Added new hacks `xteevee' and `xspirograph'. 3.22 * Fixed some bugs in xscreensaver-demo. * Rewrote the Motif version of xscreensaver-demo to match the new Gtk version. * The Athena toolkit is no longer supported. 3.21 * Tweaked the xscreensaver-demo UI (Gtk only.) * Fixed a few visual selection bugs. I think the proper GL visual should be used with nVidia systems now. * Made the Makefiles obey $install_prefix. * Made the `xscreensaver.spec' file able to generate both GL and non-GL packages simultaneously. 3.20 * Added new hacks `ripples' and `sierpinski3d'. * Made `xscreensaver-command -exit' be silent when no screen saver was running (instead of complaining.) * Made `webcollage' and `vidwhacker' use `xloadimage' when available (in addition to `xli' and `xv'.) * Improved memory usage in `petri' and gave it a hard cap on how much memory it can allocate. * Added `-watch' option to `xscreensaver-command'. * Made `xscreensaver-demo' come up with the most-recently-run hack selected by default. * Rewrote the Gtk version of `xscreensaver-demo'. It's a lot easier to use now. * Extended the format of the programs list in the .xscreensaver file, for the benefit of the new capabilities of `xscreensaver-demo'. NOTE: you might want to delete your ~/.xscreensaver file and allow it to be re-created! The old one should still work, but xscreensaver-demo won't be as pretty. 3.19 * Fixed gcc dependencies in `bumps' and `ccurve'. * New hack, `extrusion'. * Some of the web sites that `webcollage' was using as its sources changed formats; tweaked it to understand the current layouts. * Added typeahead in the password dialog: if the screen is locked, and you unlock it by typing a character, that key will be automatically inserted in the password dialog (unless it is Return, Enter, Space, or a non-printing key like Shift.) * Made `xmatrix' take a `-small' option, since some folks with tiny screens prefer a smaller font. 3.18 * New versions of `shadebobs', `lmorph', and `distort'. * Added `ccurve', `blaster', and `bumps' hacks. * Replaced `forest' hack with a rewritten version. * Worked around a Xinerama server bug. * Fixed a bug I introduced in 3.10 that caused some hacks to print out superfluous warnings about not having gotten enough colors. * Made `sproingies' obey the `-delay' option. * Fixed a portability bug in `shadebobs'. * Made `webcollage' and `vidwhacker' use `xli' in preference to `xv', if it is available. * Added a new source of images to `webcollage'. * If running under KDE, xscreensaver will add itself to KDE's list of screensavers (via xscreensaver.kss.) * Improved detection of GL libraries. * Made the password dialog include the date and time. 3.17 * New version of `webcollage' -- deals better with corrupted images, and can use an http proxy. * New hack, `xsublim' (run it in the background, rather than adding it to the programs list.) * The xscreensaver daemon was leaking a file descriptor each time you edited your .xscreensaver file. Fixed. 3.16 * New version of `shadebobs'. * Improved image selection in `webcollage', and sped it up slightly. * Made configure find the right version of perl. * Rewrote the CGI part of `webcollage'. * `make clean' was deleting some things it shouldn't. * Fixed a typo in the default programs list. 3.15 * Added `webcollage' and `shadebobs' hacks. * Added a `-stdout' arg to `vidwhacker' so that it can be used in a pipeline. * Made `petri' use less memory. 3.14 * Various improvements to the Gtk port. * Turned off PAM by default on Solaris, since PAM seems generally to be misconfigured out-of-the-box. * Made the `--without-gtk' configure option work. * Made configure check the Gtk version number, since it requires 1.2. * Fixed a bug in the code that attempted to prevent changes of screen resolution while the screen is locked. * Fixed a race condition in `xscreensaver-demo' that could cause an X error at startup. * Added `-transparent' option to `deluxe'. * Added `petri' hack. 3.13 * Ported `xscreensaver-demo' to Gtk. * Made it possible to build Motif, Gtk, and Athena versions of `xscreensaver-demo' in the same directory without reconfiguring. * Made `xscreensaver-demo' chase symlinks before writing the .xscreensaver file, so that if .xscreensaver is itself a symlink, the underlying file will be replaced instead. * Some Makefile and configure tweaks for Solaris and FreeBSD. * Made it possible to set the fire color in `xflame'. * Made transparency work in TrueColor (for `goop' and `qix'.) * Fixed a multi-head bug introduced by the virtual viewports stuff. 3.12 * Made it so that you can't scroll the screen while the lock dialog is up (with XFree86 virtual viewports.) * Fixed a bug in `flag' that caused bob's chin to get cut off after a few iterations. 3.11 * Made `xjack' be black-on-white-ish, so that it looks less like a computer screen and more like the typewritten paper it's supposed to be. * New version of `pulsar'. * Fixed Solaris compilation problem in `phosphor'. * Made xscreensaver notice XFree86's virtual root window hack, so that if the X server's root window is larger than the monitor's displayable resolution, the screen saver will limit itself to the area that actually appears on the screen. * Made the xscreensaver daemon do a better job of picking the visual class that should be used for GL programs. Less user intervention should be needed now: you can use the logical visual name `GL' instead of having to figure out by hand which one to use. * Oops, the visual was defaulting to "best" instead of "default", because the .xscreensaver file was not being loaded quite early enough. * Made configure figure out how to build icmp ping support into the `sonar' hack automatically. * Made warnings about not being able to read shadow passwords not be printed if compiled with PAM support. * Improved PAM startup diagnostics. * Worked around the Solaris PAM bug that was causing crashes there, so now PAM is turned on by default. * Made configure detect the number of arguments that pam_strerror() takes, since on Linux, this apparently changed between 2.0 and 2.2, sigh. * Made the /proc/interrupts kludge look for "PS/2 Mouse" as well as "keyboard". * Made xscreensaver notice when there has been a sudden large jump in wall-clock time, and if so, lock right away, instead of waiting for "lockTimeout" to expire first. (Laptops need this for safer recovery from ``hibernation.'') * Added `-throttle' option to `xscreensaver-command'. 3.10 * Added `phosphor', `xmatrix', and `pulsar' hacks. * Fixed a bug in the color allocator that sometimes caused `starfish' to fall back to monochrome. * Reduced the amount of code that runs before root privileges are disavowed: "normal" and "shadow" passwords now do some initialization as root, but the PAM and Kerberos authorization schemes will be initialized while running as "nobody". Supposedly this closes a potential security hole when using Kerberos. * Added some more sanity checking to configure. 3.09 * Added `compass', `squiral', `xflame', `wander', `spotlight', and `critical' hacks. * Added some new modes to `decayscreen'. * Made `deluxe' work in monochrome. * Generalized usage of the Double-Buffer server extension in several hacks (`compass', `deluxe', `interference', `kumppa', and `moire2'.) * Fixed another visual-depth problem in `rd-bomb'. * The screen saver will now defer blanking if neither the keyboard nor the mouse could be grabbed. Instead, it will just try again in a few minutes. This fixes a bad interaction between xscreensaver and programs like VMware that hold the mouse and keyboard grabbed for a long time. * Added a new erase mode (expanding spiral.) 3.08 * Fixed some bugs in my port of `t3d'. * Added `penetrate' and `deluxe' hacks. * When linking against Motif 2.x, also link against XPM. * Added support for using /proc/interrupts for idle detection on Linux. Now xscreensaver shouldn't kick in when the user is active on a non-X virtual console. * Upgraded to autoconf 2.13. 3.07 * Configure tweaks (sometimes -lXmu wasn't getting linked in properly; check for _Xsetlocale in -lXintl.) * Portability fixes for sonar.c. * Fixed a compilation problem when you have GL but don't have XPM. * Made configure notice when MesaGL requires -lpthread. * Made `flame' ignore SIGFPE (not sure if this is the right fix; it seems only to be needed on FreeBSD.) * Kludged `rd-bomb' work on visuals that are of depth 24 but that *do not* support pixmaps of depth 32. * Fixed `halo' to work properly in TrueColor. * Changed `xscreensaver.spec' to install the hacks in /usr/X11R6/lib/xscreensaver/ by default, since that's where recent Red Hat distributions put them. * Added `t3d' hack. * Updated versions of `crystal', `hopalong', and `flow' from xlockmore. * Imported `demon' and `loop' modes from xlockmore. 3.06 * Oops, the "default-n" visual descriptor was broken; it was always installing a colormap if the `installColormap' preference was set, meaning that `xearth', `xv' and friends were using the wrong colors on 8-bit systems. * Turned off HAVE_PING in `sonar', since it compiles on some Linux systems, but not others of similar vintage... 3.05 * Fixed an off-by-1 in `distort'. * Added `sonar' hack. * New version of `glplanet' (with stars.) * Made all hacks exit when you type `q' or `ESC' at them, and made them obey the WM_DELETE_WINDOW ClientMessage. * Fixed a nonfatal buffer overrun in lament (note: lament still doesn't work with MesaGL 3.0: it dies in lambda_textured_triangle1(), which is Mesa's bug, not mine.) 3.04 * Added an `xscreensaver.spec' file, to make it easier for other folks to generate RPMs. * Made the password code work on HPUX in the situation where: ``enhanced security'' is available; but not used; but the user typed a password more than 8 characters long anyway. FTSOHPUX. 3.03 * Made locking work when passwd aging is enabled. * Added support for PAM (Pluggable Authentication Modules.) It is still turned off by default, though, since it doesn't seem to work on Solaris 2.6, and has been behaving erratically on Red Hat 5.1. * Made each possible authentication method be tried in turn until one succeeds; this means that Kerberos is being used, we will first check Kerberos, and if that fails, will then consult the local password file. Likewise with PAM. * Save and restore the bits under the passwd dialog, to avoid leaving a black rectangle behind when unlocking is cancelled. 3.02 * Not everyone has sys/select.h, sigh... 3.01 * Some fixes to `reflect'. * Configure tweaks. * Made it log unsuccessful attempts to unlock the screen to syslog. * Fixed a bug where `xscreensaver-demo' could be seeing a different programs list than `xscreensaver' did. 3.00 * The xscreensaver daemon no longer links against Motif or Athena: demo-mode and the preferences panel are no longer built in to the daemon, but are now handled by an external program, `xscreensaver-demo'. (I decided that this, along with the recent addition of the `.xscreensaver' config file, justified bumping the version number to 3.00, since this is a fairly major architectural change.) * Lines in the `*programs' resource may now begin with the character "-", meaning "don't run this hack." In this way, it's possible to disable a hack without throwing away the information about it (making it easier to change your mind later.) Eventually the preferences/demo mode GUI should represent this as a checkbox or something. * Fixed a short race condition where it was possible for xscreensaver to die with a BadWindow error if it was blanking the screen just as another window was being deleted. * Made it possible to disable specific modes in `bsod'. 2.34 * Fixed a bug that was making `pipes' generate way too many valves. Made the viewpoint in `pipes' be selected randomly instead of always being -10 degrees. * Fixed a bug in the XSHM code, in the case where the server supports the XSHM extension but is not the same machine as the client. * Made `rd-bomb' default to taking up the whole screen. * Made it not try to do fading/unfading if no PseudoColor visuals exist. * Initial attempt at supporting VT-locking (doesn't work yet.) * Eliminated the `captureStdout' resource; now `captureStderr' controls both streams. * Added `-capture-stderr' and `-no-capture-stderr' command-line arguments. * Added `glplanet' hack. * When a hack is selected with `xscreensaver-command -select', that hack will be used until further notice (until the saver turns off, or another activation command is issued.) 2.33 * Made `xscreensaver-command' print error messages: the xscreensaver daemon now responds to ClientMessage events by writing a response message on a window property, instead of just writing to its stderr. * Made the ~/.xscreensaver file be automatically reloaded when the file date changes. * The password dialog and splash screen no longer depend on Motif or Athena. This should clear up a number of focus problems, and is the first step on the path toward moving all of the Motif/Athena/whatever code out of the xscreensaver daemon, and into external processes. * Don't complain about LessTif 0.86 any more, since the new password dialog makes that problem go away. * Configure tweaks for Irix 6.5, SunOS 5.something. * New `-reflect' option to `distort'. 2.32 * Added reading and writing of a ~/.xscreensaver file, so that the Preferences panel can save its settings. * New version of `rubik'. * Added `-select N' argument to `xscreensaver-command'. * Oops, left out some of the `bubbles3d' files... 2.31 * The cursor was invisible in the password dialog. Fixed. * Made configure warn against MesaGL 2.6. * Fixed X error at startup when using non-default visual. * New version of `crystal', `ant', and `atlantis' from xlockmore. * New hack, `bubble3d'. * Added some new modes to `bsod'. 2.30 * Changed the order in which -lSM and -lICE are linked to be after Motif instead of before (Lesstif on Irix needs this.) 2.29 * Work around a bash bug in configure. * Tweaked HPUX paths again. FTSOHPUX. * Made configure recommend against LessTif 0.86, due to a bug in that version that causes a security hole in the screen locking code. LessTif 0.87 will fix it. * Made all of the `--with' options to `configure' accept a directory option as well (so that --with-motif=/FOO will add -I/FOO/include -L/FOO/lib). I believe this is the Configure Party Line of how do to such things. * Fixed a bug where the mouse was left un-grabbed after the first time the graphics hack was changed (simplified all of the mouse-grabbing logic.) * Maybe possibly perhaps made `vidwhacker' really not leave stray xv windows around. This time for sure. * Added a new erase mode (random dots fizzling out.) * Added `-prefs' argument to `xscreensaver-command', that brings up the Preferences dialog directly (it seems that nobody ever noticed the `Preferences' button on the Demo Mode dialog, maybe this will help.) * Added a splash screen. Turn it off with *splash:false. 2.28 * Better macsbug text in `bsod'. * New version of `distort' with many new modes. * Plugged a leak in `coral'. * Tweaked configure for HPUX. * Removed some compiler warnings. * More consistent usage of stderr versus stdout. * More diagnostics should an X error occur. * Fixed a possible crash in SGI-specific unfading code. 2.27 * Improved version of `distort'. * Made `lament' compile against OpenGL 1.0 (though it still requires 1.1 to work properly.) * Updated my email address and home page. 2.25 * Improved motion in `rd-bomb'. * Added XSHM (shared memory extension) support to the `distort', `interference', `moire', `rd-bomb', and `swirl' hacks, which speeds them up a bit. * Added `lament' hack. 2.24 * Tweaked the order of the -L options again. * Cleaned up configure's `--help' message. * Added `kumppa' hack. * Smarter maze-solving algorithm in `maze'. * Took `xlyap' out of the default list of hacks, since it's just incredibly buggy (and slow.) Maybe someday someone will fix it... * Added `distort' hack, but didn't add it to the default list (yet) because it's still too slow. * Made the Athena demo dialog look more like the Motif version; it has a text-entry field now, too. * Made the Athena password dialog echo asterisks, like Motif does, instead of using a flyspeck font. * Some random configure tweaks. * Added a `timestamp' resource that makes the `-verbose' messages include the time at which they were printed. 2.23 * The fix for SGI's ``scheme'' nonsense broke things, and let the user's "*background" resource show through. Fixed it in a different way. 2.22 * Added support for the DPMS server extension (Display Power Management System.) * Made configure advertize the `--enable-subdir' option a little more, since that seemed to cause some people stress. Also, made that directory be built into the xscreensaver executable, as a hardcoded prefix to $PATH. (Might help, shouldn't hurt.) * Made configure prefer the two-arg gettimeofday to the one-arg version, since AIX doesn't have any prototypes. * Made it work with Xaw3d (the 3D Athena library.) * Made `make install' create directories as necessary. * New version of lmorph from Sverre. * Added `crystal' and `discreet' hacks from xlockmore. * Added a new mode to `bsod'. 2.21 * Made `xscreensaver-command -time' use different words. (It now describes the two states as "screen blanked since..." and "screen non-blanked since..." instead of "active since..." and "inactive since..." which a lot of people interpreted as meaning the opposite of what was intended.) * Improved some error messages, in the hopes of making the distinction between the xscreensaver and xscreensaver-command programs more obvious. * Rewrote (and reorganized) parts of the xscreensaver and xscreensaver-command manual pages. * Renamed xscreensaver's `-lock' command-line option to be `-lock-mode', to avoid confusion with the `-lock' option to xscreensaver-command, which does a totally different thing. * Removed xscreensaver's `-demo' command-line option for a similar reason; use `xscreensaver-command -demo' instead. * Disabled SGI's ``scheme'' nonsense in a better way than fully-qualifying the background colors in every single hack. * Fixed some other minor cosmetic problems when *sgiMode is turned on. * Fixed an X error in `bsod -root' (how ironic...) 2.20 * Fixed a bug that caused the mouse to sometimes not be grabbed properly (meaning the window manager menu could pop up over the demo-mode display.) * Fixed a bug that made the stderr output sometimes get printed twice. * Fixed a bug that made the demo-mode scrollbar move too fast. * Protected against a possible buffer overflow. * Made `vidwhacker' not leave stray xv windows around. * New version of `ant' so that Bagley doesn't calve. * Make configure on AIX get XShm from the right library. 2.19 * One file was missing from the tar file. 2.18 * Oops, atlantis wasn't being built by default. * Added `epicycle' hack. * Added `interference' hack. * Added `truchet' hack. * Added `bsod' hack. * Added some new modes to `vidwhacker'. 2.17 * Added a -window-id argument to most hacks, so that they can draw on arbitrary externally-provided windows. * Synched with xlockmore 4.11a01. * Added `flow' hack. * Added `atlantis' GL hack. * Renamed `puzzle' hack to `jigsaw', since xlock already had a different mode called `puzzle'. * Made it self-configure properly when Motif 2.1.0 is being used (requires -lXp now, sigh...) 2.16 * Made `flag' able to do XPM images. * New look for the xscreensaver logo (`xroger'). * Fixed compilation error on Suns with adjunct passwords. * Got multi-architecture builds working again. * Some configure tweaks for building on HPUX and Solaris. * Fixed bug in decayscreen. * Fixed typo in passwd.c. * Made `cynosure' not die when colormap is full. 2.15 * Added `cynosure' hack. * Added `moire2' hack. * Tweaked `erase.c' some more. * Made unfading a bit smoother. * Added `vidwhacker' hack (not installed by default.) * Added `stairs' hack. * Split `escher' into `cage' and `moebius', as per xlockmore. * Changed subprocess handling to use sigaction() instead of signal() if it's available (this is necessary for SCO but should work fine on other systems too.) * Various other tweaks. 2.14 * Better fix for the Motif drag-and-die lossage. * Put in some kludges to work around a LessTif bug. * XScreenSaver is known to work with LessTif 0.82 now. * Made fading work on high-end SGI video hardware. * Fixed another SGI-specific bug in screen grabbing; will the madness never cease? * Fixed another crash in `xlyap'. 2.13 * Made `decayscreen' do directions other than down. * Improved `puzzle'. * Fixed a crash in `xlyap'. * Added CDE info to the man page, removed `cde.txt'. * Configure tweaks for Zippy. * Turned off the signal handling in `bubbles' because it was sometimes failing to die. * Added `hacks/xscreensaver-sgigl.c' to make it possible to run SGI's ElectroPaint hack (/usr/demos/bin/ep) with xscreensaver. Finally! * Fixed a buffer overrun in the locking code that some wily, malicious cracker must have slipped in. * Disabled Motif drag-and-drool in the dialog box buttons, since it's broken in some old versions of Motif. 2.12 * Added `README.debugging'. * Added `puzzle' hack. * Added `xlyap' hack. * Added `default-n' as a visual name, so that one can have -install on by default, but turn it off for certain poorly-behaved hacks (like xv.) * Added support for grabbing frames of external video (on SGI) to the screen-grabbing hacks (decayscreen, slidescreen, slip, blitspin, and puzzle.) * Improved look of tiles in `slidescreen'; fixed its color allocation problem. 2.11 * Tweaked `blitspin', added it to the default list. * Added `lissie', `mountain', `triangle', `worm', `rotor', and `ant' from xlockmore. * Updated `sierpinski', `galaxy', and `lisa'. * Thickened the lines in `braid' and `lmorph'. * Updated VMS makefiles. * Renamed `fract' to `vines'. * Added `xjack' hack. * Made a few more hacks use erase.c, and added a few more wipe styles. * Fixed compilation problem with Sun's version of OpenGL. * Added ability to use sigaction() instead of signal() to work around a SCO kernel bug. 2.10 * Fixed colormap bugs in `rd-bomb'; sped up `coral'. * Configure tweaks for *BSD. 2.08 * New hacks `rd-bomb' and `coral'. * New version of `maze' with some new algorithms. * New colorized version of `rocks'. * Fixed a bug in qix on 64-bit machines. * Fixed a bug in the -time option. * Fixed a bug in configure related to LessTif. 2.07 * Minor header tweaks in windows.c and flag.c. * Made multi-architecture ($VPATH) builds work properly. * Merged new GL stuff from xlockmore (rubik, morph3d.) * Fixed intermittent crashes in `imsmap' and `munch'. * Added `fadeplot' hack from xlockmore. 2.06 * Merged in VMS support from Patrick Moreau. 2.05 * Fixed a MIT-SCREEN-SAVER-related crash, and tweaked configure to detect the extra-random -Xss library. 2.04 * HP configure tweaks. Detect and warn about LessTif. * Fixed low-color behavior of `goop', `pyro', `starfish', `greynetic', `flame', `halo', and `moire'. 2.03 * Fixed flicker in `pipes'. Fixed 3d in `bouboule'. * Added `munch' hack. * Added basic dependencies to the Makefile.in files. 2.02 * Fixes for compiling with the MIT saver extension. * Made the yow/fortune program be a configure option. * Various configure tweaks. 2.01 * Added `goop' and `starfish' hacks. * Added colomap cycling to `halo'. * Made `attraction' use the new colormap allocator. * Added better $PATH diagnostics. * There was a bug in frand! Color selection should be much improved now. 2.00 * Converted to use `configure' instead of `imake'. * ANSI C is now required. * Added Kerberos locking support, from Nat Lanza. * Made the stderr text use overlay planes, if possible. * Reworked the xlockmore compatibility stuff again. * Added `gears', `superquadrics', `escher', `pipes', and `sproingies' hacks (depend on OpenGL.) 1.34 * Fixed some bugs, made fading be a little smoother. 1.33 * Made it work with multi-headed displays. * Generalized sub-process management (Unix sucks!) * Added interactive mouse frobbing to Julia. * Added (untested) support for HPUX shadow passwords. * Made normal non-shadow passwords be checked if the shadow passwords aren't accessible for some reason. 1.32 * Removed *colorPrograms and *monoPrograms resources: made it possible to specify the desired visual on a per-hack basis. * Cleaned up / restructured the driver: no more globals. * Made the Motif and Athena dialogs share more code. * Probably fixed some Athena colormap-installation bugs. * Fixed screen grabbing (cmap) on SGI 12-bit PseudoColor. * Fixed divide-by-zero in bright random colormaps. * Added an improved version of xlock's `flag' hack. * Made unfading work better, and not flicker on SGIs. * Added `sphere', `forest', `lisa' hacks from xlockmore. * Added (untested) support for SunOS Adjunct passwords. 1.31 * Improved colors and colormap cycling of many hacks. * Cleaned up xlockmore compatibility layer. * Made `blitspin' able to grab an image off the screen. * Ported `swirl' and `bouboule' hacks from xlockmore. * Made the driver more careful about not leaving bits on the screen, or allowing other windows to raise themselves: it now re-blanks the screen every so often. * Added `-time' option to `xscreensaver-command'. * Improved SGI screen-grabbing some more: now it can grab TrueColor screens into PseudoColor windows and have the colors still come out semi-reasonably. 1.30 * Made `slidescreen' and `decayscreen' work better on SGIs when windows of different visuals are present, by using the XReadDisplay() extension to get a true 24-bit image out of the frame buffer. * Made `noseguy' be in color, if compiled with XPM. * Ported `braid', `drift', `fract', `galaxy', `grav', `ifs', `julia', `laser', `lightning', `penrose', `sierpinski', `slip', `spiral', and `strange' hacks from xlockmore. * Merged `hopalong' hack with a more recent version. * Added `cde.txt'. 1.28 * Added `deco', `moire', and `kaleidescope' hacks. * Merged in support for non-Motif locking and demo mode. * Made `blitspin' and `bubbles' work in TrueColor. * Fixed a stupid bug I introduced in `imsmap'. * Added `poly' and `gravity' options to `qix'. 1.27 * Added support for SGI SCREEN_SAVER extension. * Made `fade' and `unfade' work on 8-bit SGIs. * Made the dialog boxes more Motify. * Added `bubbles' hack. 1.26 * Added `lmorph' hack. * Added viscosity and mouse-control to attraction. * Fixed possible bad color choices in qix and attraction. * Added ramp-mode to halo. * Added a new RNG, which is faster and more portable than using the RNG in libc. * Made locking work on SCO. * Various other minor tweaks that I don't remember. 1.25 * Made it capture the stdout/stderr of its subprocesses and present them on the screensaver window itself. * Made demo mode work correctly with non-default visuals and color maps, instead of always using the defaults. * Added -visual argument to all included screenhacks. * Support for the R6 MIT-SCREEN-SAVER server extension. * Made the demo mode list scroll properly. * Added `pedal' hack. 1.24 * Fixed some private-colormap oddities in slidescreen, decayscreen, and xroger. Fixed apparent conservation- of-mass problem in pyro; made the shrapnel round. 1.23 * Minor tweaks for IRIX5; fixed locking race condition. 1.22 * Minor tweaks for X11R6. * Fixes for non-default visuals. 1.21 * Fixed bug in color blitspin; added default image. * Added diagnostics to noseguy. Fixed off-by-one error in flame. * Added some missing casts. 1.19 * Added `flame' hack. * Fixed a minor Motif dialog text field bug. * Fixed yet another XPointer-not-defined-in-R4 bug. 1.18 * Added support for shadow password files. * Fixed some Motif-related locking bugs. * Added diagnostics when locking is disabled. * Made blitspin able to use the XPM library. * Added `decayscreen' hack. 1.17 * Added `halo' hack. 1.16 * Portability fixes. 1.15 * Broke the driver up into more source files. * Moved the hacks into their own directory. * Made all `time' parameters accept the 00:00:00 syntax, so that even the parameters which are normally read as minutes can be specified in seconds. * Added colormap cycling to `imsmap'. * Made hyper work with K&R compilers. 1.14 * Added `orbit' option to `attraction' hack. * Added `lock-timeout' option. * Cleaned up options of `maze' hack. 1.09 * Added demo mode, and locking. * Added `maze' hack. * Added `norotate' option to `rocks' hack. 1.05 * Works when run from XDM before anyone logs in. * Sped up `imsmap'. * Can use `xv' as a slideshow without using up colormap entries while the screen is not blanked. * Fixed a BadDrawable error in non-XIdle mode. * Added `blitspin' and `imsmap'. 1.01 * Current list of included hacks is now: qix, helix, rorschach, attraction, greynetic, rocks, pyro, hopalong, and noseguy. xscreensaver-5.36/README.hacking000644 000767 000024 00000020052 12721523221 016415 0ustar00jwzstaff000000 000000 ========================================================================== Writing new XScreenSaver modules ========================================================================== Any program that can be made to render on an X window created by another process can be used as a screen saver. Just get the window ID out of $XSCREENSAVER_WINDOW, draw on that, and you're done. In theory, you can write a screen saver in any language you like. In practice, however, languages other than C or C++ tend not to allow you to draw to windows that they did not create themselves. Unfortunately, this means that if you want to write a screen saver, you must write it in C. Given that you're going to be writing in C, you might as well take advantage of the various utility functions that I have written to make that easier. Writing a new screen saver in C using the frameworks included with xscreensaver simplifies things enormously. Generally, the best way to learn how to do something is to find a similar program, and play around with it until you understand it. Another approach is to not worry about understanding it, but to just hack it out. Either way, your best bet is probably to start with one of the existing xscreensaver demos, included in the "hacks/" directory, rename the file, and edit it until it does what you want. The "Greynetic" and "Deluxe" hacks are probably good ones to start with, since they are so very simple. For OpenGL programs, "DangerBall" is a good example. ========================================================================== Requirements for inclusion with the XScreenSaver collection ========================================================================== If you come up with anything, send it to me! If it's good, I'd love to include it in the xscreensaver distribution. However, there are a few requirements for me to distribute it: - Write in portable ANSI C. No C++. No nonstandard libraries. - Write a .man page describing all command-line options. - Write an .xml file describing the graphical configuration dialog box. - Include a BSD-like copyright/license notice at the top of each source file (preferably, just use the one from "screenhack.h", and include your name and the current year). The GNU GPL is not compatible with the rest of XScreenSaver. ========================================================================== The XScreenSaver API ========================================================================== - Start with #include "screenhack.h" - Define 2 global variables: yoursavername_defaults -- Default values for the resources you use. yoursavername_options -- The command-line options you accept. - Define 5 functions: yoursavername_init -- Return an object holding your global state. yoursavername_draw -- Draw a single frame, quickly. yoursavername_free -- Free everything you've allocated. yoursavername_reshape -- Called when the window is resized. yoursavername_event -- Called when a keyboard or mouse event happens. The "event" function will only be called when running in a window (not as a screen saver). The "reshape" event will be called when the window size changes, or (as a screen saver) when the display size changes as a result of a RANDR event (e.g., plugging in a new monitor). It's ok for both the "event" and "resize" functions to do nothing. - All other functions should be static. - The last line of the file should be XSCREENSAVER_MODULE ("YourSaverName", yoursavername) - Finally, edit the Makefile to add a rule for your program. Just cut-and-paste one of the existing rules. Your "draw" must not run for more than a fraction of a second without returning. This means "don't call usleep()". Everything has to be a state machine. You may not store global state in global variables, or in function-local static variables. All of your runtime state must be encapsulted in the "state" object created by your "init" function. If you use global or static variables, your screen saver will not work properly on MacOS. Do not call XSync() or XFlush(). If you think you need to do that, it probably means that you are you are relying on the speed of the graphics card for timing, which probably means that your "draw" function is taking too long. ========================================================================== The XLockMore API ========================================================================== Some of the display modes that come with xscreensaver were ported from XLock, and so, for historical reasons, they follow a slightly different programming convention. For newly-written Xlib programs, you'd be better off following the pattern used in hacks like "Deluxe" than in hacks like "Flag". The XLockMore ones are the ones that begin with "#ifdef STANDALONE" and #include "xlockmore.h". But, all OpenGL screen savers have to follow the XLockMore API. The XLockMore API is similar to the XScreenSaver API, in that you define (roughly) the same set of functions, but the naming conventions are slightly different. Instead of "hackname_init", it's "init_hackname", and it should be preceeded with the pseudo-declaration ENTRYPOINT. One annoying mis-feature of the XLockMore API is that it *requires* you to make use of global variables for two things: first, for each of your command line options; and second, for an array that holds your global state objects. These are the only exceptions to the "never use global variables" rule. ========================================================================== Programming Tips ========================================================================== - Your screen saver should look reasonable at 20-30 frames per second. That is, do not assume that your "draw" function will be called more than 20 times a second. Even if you return a smaller requested delay than that, you might not get it. Likewise, if your "draw" function takes longer than 1/20th of a second to run, your screen saver may be consuming too much CPU. - Don't make assumptions about the depth of the display, or whether it is colormapped. You must allocate all your colors explicitly: do not assume you can construct an RGB value and use that as a pixel value directly. In particular, you can't make assumptions about whether pixels are RGB, RGBA, ARGB, ABGR, or even whether they are 32, 24, 16 or 8 bits. Use the utility routines provided by "utils/colors.h" to simplify color allocation. - It is better to eliminate flicker by double-buffering to a Pixmap than by erasing and re-drawing objects. Do not use drawing tricks involving XOR. - If you use double-buffering, have a resource to turn it off. (MacOS, iOS and Android have double-buffering built in, so you'd end up triple-buffering.) - Understand the differences between Pixmaps and XImages, and keep in mind which operations are happening in client memory and which are in server memory, and which cause latency due to server round-trips. Sometimes using the Shared Memory extension can be helpful, but probably not as often as you might think. - On modern machines, OpenGL will always run faster than Xlib. It's also more portable. Consider writing in OpenGL whenever possible. ========================================================================== MacOS, iOS and Android ========================================================================== Though XScreenSaver started its life as an X11 program, it also now runs on MacOS, iOS and Android, due to a maniacal collection of compatibility shims. If you do your development on an X11 system, and follow the usual XScreenSaver APIs, you shouldn't need to do anything special for it to also work on MacOS and on phones. See the READMEs in the OSX/ and android/ directories for instructions on compiling for those platforms. ========================================================================== xscreensaver-5.36/README.VMS000644 000767 000024 00000004434 06434235263 015476 0ustar00jwzstaff000000 000000 OpenVMS port of Xscreensavser version 2.10 October 1997 ========================================== Xscreensaver distribution can be found in 3 subdirectories: [.DRIVER] The Xscreensaver and Xscreensaver-command programs. [.HACKS] Graphic demos ,can be run either through the xscreensaver program or standalone. [.UTILS] A small libraries of various utilities. This port has been tested with VAX VMS 6.1 (compiled with DEC 5 5.0 and Motif 1.2) and AXP VMS 6.2 (compiled with DEC C 5.0 and Motif 1.2-4). To rebuild, you need to rebuild [.UTILS] directory first and create the object library (look at the end of COMPILE*.COM procedure). You can now build the [.HACKS] directory and the [.DRIVER] directory. A one-step build is now available via the MAKEVMS.COM script. WARNING : before building [.HACKS], you may need to correct some of the DECwindows bitmap files. Some files are bogus !! (they have a long line of null chars at the end). These files are under SYS$COMMON:[DECW$INCLUDE.BITMAPS] directory: STIPPLE.XBM HLINES2.XBM LIGHT_GRAY.XBM ROOT_WEAVES.XBM VLINES2.XBM These files are all used by Greynetic demo. Nota: link procedure automagically select appropriate X and Motif Libraries (X11R4/Motif 1.1 - X11R5/Motif 1.2). The SETUP.COM procedure gives you a definition of all DCL foreign command symbols needed to run Xscreensaver and all the graphic hacks. You need to modify this procedure if you install these programs in another directory tree. You can easily add new graphic demos without recompiling Xscreensaver. You just need to add them in resource file XSCREENSAVER.DAT. This file (originally present in [.DRIVER] directory ) can be installed under your SYS$LOGIN directory for a per-user customization basis. You can also install it under the system-wide user resource directory SYS$COMMON:[DECW$DEFAULT.USER] (with (W:RE) protections). The new graphics hack must be run in root-window mode to be accepted by Xscreensaver. The graphic demos are spawn into subprocess created by the system() call (in the Unix version the execvp() call is used). The VMS passord checking programs were picked up in the Xlock distribution. Enjoy, Patrick MOREAU - CENA/Athis-Mons - FRANCE (pmoreau@cena.dgac.fr) (moreau_p@decus.decus.fr) xscreensaver-5.36/INSTALL000644 000767 000024 00000017230 06346511377 015206 0ustar00jwzstaff000000 000000 Basic Installation ================== These are generic installation instructions. The `configure' shell script attempts to guess correct values for various system-dependent variables used during compilation. It uses those values to create a `Makefile' in each directory of the package. It may also create one or more `.h' files containing system-dependent definitions. Finally, it creates a shell script `config.status' that you can run in the future to recreate the current configuration, a file `config.cache' that saves the results of its tests to speed up reconfiguring, and a file `config.log' containing compiler output (useful mainly for debugging `configure'). If you need to do unusual things to compile the package, please try to figure out how `configure' could check whether to do them, and mail diffs or instructions to the address given in the `README' so they can be considered for the next release. If at some point `config.cache' contains results you don't want to keep, you may remove or edit it. The file `configure.in' is used to create `configure' by a program called `autoconf'. You only need `configure.in' if you want to change it or regenerate `configure' using a newer version of `autoconf'. The simplest way to compile this package is: 1. `cd' to the directory containing the package's source code and type `./configure' to configure the package for your system. If you're using `csh' on an old version of System V, you might need to type `sh ./configure' instead to prevent `csh' from trying to execute `configure' itself. Running `configure' takes awhile. While running, it prints some messages telling which features it is checking for. 2. Type `make' to compile the package. 3. Optionally, type `make check' to run any self-tests that come with the package. 4. Type `make install' to install the programs and any data files and documentation. 5. You can remove the program binaries and object files from the source code directory by typing `make clean'. To also remove the files that `configure' created (so you can compile the package for a different kind of computer), type `make distclean'. There is also a `make maintainer-clean' target, but that is intended mainly for the package's developers. If you use it, you may have to get all sorts of other programs in order to regenerate files that came with the distribution. Compilers and Options ===================== Some systems require unusual options for compilation or linking that the `configure' script does not know about. You can give `configure' initial values for variables by setting them in the environment. Using a Bourne-compatible shell, you can do that on the command line like this: CC=c89 CFLAGS=-O2 LIBS=-lposix ./configure Or on systems that have the `env' program, you can do it like this: env CPPFLAGS=-I/usr/local/include LDFLAGS=-s ./configure Compiling For Multiple Architectures ==================================== You can compile the package for more than one kind of computer at the same time, by placing the object files for each architecture in their own directory. To do this, you must use a version of `make' that supports the `VPATH' variable, such as GNU `make'. `cd' to the directory where you want the object files and executables to go and run the `configure' script. `configure' automatically checks for the source code in the directory that `configure' is in and in `..'. If you have to use a `make' that does not supports the `VPATH' variable, you have to compile the package for one architecture at a time in the source code directory. After you have installed the package for one architecture, use `make distclean' before reconfiguring for another architecture. Installation Names ================== By default, `make install' will install the package's files in `/usr/local/bin', `/usr/local/man', etc. You can specify an installation prefix other than `/usr/local' by giving `configure' the option `--prefix=PATH'. You can specify separate installation prefixes for architecture-specific files and architecture-independent files. If you give `configure' the option `--exec-prefix=PATH', the package will use PATH as the prefix for installing programs and libraries. Documentation and other data files will still use the regular prefix. In addition, if you use an unusual directory layout you can give options like `--bindir=PATH' to specify different values for particular kinds of files. Run `configure --help' for a list of the directories you can set and what kinds of files go in them. If the package supports it, you can cause programs to be installed with an extra prefix or suffix on their names by giving `configure' the option `--program-prefix=PREFIX' or `--program-suffix=SUFFIX'. Optional Features ================= Some packages pay attention to `--enable-FEATURE' options to `configure', where FEATURE indicates an optional part of the package. They may also pay attention to `--with-PACKAGE' options, where PACKAGE is something like `gnu-as' or `x' (for the X Window System). The `README' should mention any `--enable-' and `--with-' options that the package recognizes. For packages that use the X Window System, `configure' can usually find the X include and library files automatically, but if it doesn't, you can use the `configure' options `--x-includes=DIR' and `--x-libraries=DIR' to specify their locations. Specifying the System Type ========================== There may be some features `configure' can not figure out automatically, but needs to determine by the type of host the package will run on. Usually `configure' can figure that out, but if it prints a message saying it can not guess the host type, give it the `--host=TYPE' option. TYPE can either be a short name for the system type, such as `sun4', or a canonical name with three fields: CPU-COMPANY-SYSTEM See the file `config.sub' for the possible values of each field. If `config.sub' isn't included in this package, then this package doesn't need to know the host type. If you are building compiler tools for cross-compiling, you can also use the `--target=TYPE' option to select the type of system they will produce code for and the `--build=TYPE' option to select the type of system on which you are compiling the package. Sharing Defaults ================ If you want to set default values for `configure' scripts to share, you can create a site shell script called `config.site' that gives default values for variables like `CC', `cache_file', and `prefix'. `configure' looks for `PREFIX/share/config.site' if it exists, then `PREFIX/etc/config.site' if it exists. Or, you can set the `CONFIG_SITE' environment variable to the location of the site script. A warning: not all `configure' scripts look for a site script. Operation Controls ================== `configure' recognizes the following options to control how it operates. `--cache-file=FILE' Use and save the results of the tests in FILE instead of `./config.cache'. Set FILE to `/dev/null' to disable caching, for debugging `configure'. `--help' Print a summary of the options to `configure', and exit. `--quiet' `--silent' `-q' Do not print messages saying which checks are being made. To suppress all normal output, redirect it to `/dev/null' (any error messages will still be shown). `--srcdir=DIR' Look for the package's source code in directory DIR. Usually `configure' can determine that directory automatically. `--version' Print the version of Autoconf used to generate the `configure' script, and exit. `configure' also accepts some other, not widely useful, options. xscreensaver-5.36/configure000775 000767 000024 00001764123 12777052473 016103 0ustar00jwzstaff000000 000000 #! /bin/sh # Guess values for system-dependent variables and create Makefiles. # Generated by GNU Autoconf 2.69. # # # Copyright (C) 1992-1996, 1998-2012 Free Software Foundation, Inc. # # # This configure script is free software; the Free Software Foundation # gives unlimited permission to copy, distribute and modify it. ## -------------------- ## ## M4sh Initialization. ## ## -------------------- ## # Be more Bourne compatible DUALCASE=1; export DUALCASE # for MKS sh if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST else case `(set -o) 2>/dev/null` in #( *posix*) : set -o posix ;; #( *) : ;; esac fi as_nl=' ' export as_nl # Printing a long string crashes Solaris 7 /usr/bin/printf. as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo # Prefer a ksh shell builtin over an external printf program on Solaris, # but without wasting forks for bash or zsh. if test -z "$BASH_VERSION$ZSH_VERSION" \ && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then as_echo='print -r --' as_echo_n='print -rn --' elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then as_echo='printf %s\n' as_echo_n='printf %s' else if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' as_echo_n='/usr/ucb/echo -n' else as_echo_body='eval expr "X$1" : "X\\(.*\\)"' as_echo_n_body='eval arg=$1; case $arg in #( *"$as_nl"*) expr "X$arg" : "X\\(.*\\)$as_nl"; arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; esac; expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" ' export as_echo_n_body as_echo_n='sh -c $as_echo_n_body as_echo' fi export as_echo_body as_echo='sh -c $as_echo_body as_echo' fi # The user is always right. if test "${PATH_SEPARATOR+set}" != set; then PATH_SEPARATOR=: (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || PATH_SEPARATOR=';' } fi # IFS # We need space, tab and new line, in precisely that order. Quoting is # there to prevent editors from complaining about space-tab. # (If _AS_PATH_WALK were called with IFS unset, it would disable word # splitting by setting IFS to empty value.) IFS=" "" $as_nl" # Find who we are. Look in the path if we contain no directory separator. as_myself= case $0 in #(( *[\\/]* ) as_myself=$0 ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break done IFS=$as_save_IFS ;; esac # We did not find ourselves, most probably we were run as `sh COMMAND' # in which case we are not to be found in the path. if test "x$as_myself" = x; then as_myself=$0 fi if test ! -f "$as_myself"; then $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 exit 1 fi # Unset variables that we do not need and which cause bugs (e.g. in # pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" # suppresses any "Segmentation fault" message there. '((' could # trigger a bug in pdksh 5.2.14. for as_var in BASH_ENV ENV MAIL MAILPATH do eval test x\${$as_var+set} = xset \ && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : done PS1='$ ' PS2='> ' PS4='+ ' # NLS nuisances. LC_ALL=C export LC_ALL LANGUAGE=C export LANGUAGE # CDPATH. (unset CDPATH) >/dev/null 2>&1 && unset CDPATH # Use a proper internal environment variable to ensure we don't fall # into an infinite loop, continuously re-executing ourselves. if test x"${_as_can_reexec}" != xno && test "x$CONFIG_SHELL" != x; then _as_can_reexec=no; export _as_can_reexec; # We cannot yet assume a decent shell, so we have to provide a # neutralization value for shells without unset; and this also # works around shells that cannot unset nonexistent variables. # Preserve -v and -x to the replacement shell. BASH_ENV=/dev/null ENV=/dev/null (unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV case $- in # (((( *v*x* | *x*v* ) as_opts=-vx ;; *v* ) as_opts=-v ;; *x* ) as_opts=-x ;; * ) as_opts= ;; esac exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"} # Admittedly, this is quite paranoid, since all the known shells bail # out after a failed `exec'. $as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2 as_fn_exit 255 fi # We don't want this to propagate to other subprocesses. { _as_can_reexec=; unset _as_can_reexec;} if test "x$CONFIG_SHELL" = x; then as_bourne_compatible="if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on \${1+\"\$@\"}, which # is contrary to our usage. Disable this feature. alias -g '\${1+\"\$@\"}'='\"\$@\"' setopt NO_GLOB_SUBST else case \`(set -o) 2>/dev/null\` in #( *posix*) : set -o posix ;; #( *) : ;; esac fi " as_required="as_fn_return () { (exit \$1); } as_fn_success () { as_fn_return 0; } as_fn_failure () { as_fn_return 1; } as_fn_ret_success () { return 0; } as_fn_ret_failure () { return 1; } exitcode=0 as_fn_success || { exitcode=1; echo as_fn_success failed.; } as_fn_failure && { exitcode=1; echo as_fn_failure succeeded.; } as_fn_ret_success || { exitcode=1; echo as_fn_ret_success failed.; } as_fn_ret_failure && { exitcode=1; echo as_fn_ret_failure succeeded.; } if ( set x; as_fn_ret_success y && test x = \"\$1\" ); then : else exitcode=1; echo positional parameters were not saved. fi test x\$exitcode = x0 || exit 1 test -x / || exit 1" as_suggested=" as_lineno_1=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_1a=\$LINENO as_lineno_2=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_2a=\$LINENO eval 'test \"x\$as_lineno_1'\$as_run'\" != \"x\$as_lineno_2'\$as_run'\" && test \"x\`expr \$as_lineno_1'\$as_run' + 1\`\" = \"x\$as_lineno_2'\$as_run'\"' || exit 1 test \$(( 1 + 1 )) = 2 || exit 1" if (eval "$as_required") 2>/dev/null; then : as_have_required=yes else as_have_required=no fi if test x$as_have_required = xyes && (eval "$as_suggested") 2>/dev/null; then : else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR as_found=false for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. as_found=: case $as_dir in #( /*) for as_base in sh bash ksh sh5; do # Try only shells that exist, to save several forks. as_shell=$as_dir/$as_base if { test -f "$as_shell" || test -f "$as_shell.exe"; } && { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$as_shell"; } 2>/dev/null; then : CONFIG_SHELL=$as_shell as_have_required=yes if { $as_echo "$as_bourne_compatible""$as_suggested" | as_run=a "$as_shell"; } 2>/dev/null; then : break 2 fi fi done;; esac as_found=false done $as_found || { if { test -f "$SHELL" || test -f "$SHELL.exe"; } && { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$SHELL"; } 2>/dev/null; then : CONFIG_SHELL=$SHELL as_have_required=yes fi; } IFS=$as_save_IFS if test "x$CONFIG_SHELL" != x; then : export CONFIG_SHELL # We cannot yet assume a decent shell, so we have to provide a # neutralization value for shells without unset; and this also # works around shells that cannot unset nonexistent variables. # Preserve -v and -x to the replacement shell. BASH_ENV=/dev/null ENV=/dev/null (unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV case $- in # (((( *v*x* | *x*v* ) as_opts=-vx ;; *v* ) as_opts=-v ;; *x* ) as_opts=-x ;; * ) as_opts= ;; esac exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"} # Admittedly, this is quite paranoid, since all the known shells bail # out after a failed `exec'. $as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2 exit 255 fi if test x$as_have_required = xno; then : $as_echo "$0: This script requires a shell more modern than all" $as_echo "$0: the shells that I found on your system." if test x${ZSH_VERSION+set} = xset ; then $as_echo "$0: In particular, zsh $ZSH_VERSION has bugs and should" $as_echo "$0: be upgraded to zsh 4.3.4 or later." else $as_echo "$0: Please tell bug-autoconf@gnu.org about your system, $0: including any error possibly output before this $0: message. Then install a modern shell, or manually run $0: the script under such a shell if you do have one." fi exit 1 fi fi fi SHELL=${CONFIG_SHELL-/bin/sh} export SHELL # Unset more variables known to interfere with behavior of common tools. CLICOLOR_FORCE= GREP_OPTIONS= unset CLICOLOR_FORCE GREP_OPTIONS ## --------------------- ## ## M4sh Shell Functions. ## ## --------------------- ## # as_fn_unset VAR # --------------- # Portably unset VAR. as_fn_unset () { { eval $1=; unset $1;} } as_unset=as_fn_unset # as_fn_set_status STATUS # ----------------------- # Set $? to STATUS, without forking. as_fn_set_status () { return $1 } # as_fn_set_status # as_fn_exit STATUS # ----------------- # Exit the shell with STATUS, even in a "trap 0" or "set -e" context. as_fn_exit () { set +e as_fn_set_status $1 exit $1 } # as_fn_exit # as_fn_mkdir_p # ------------- # Create "$as_dir" as a directory, including parents if necessary. as_fn_mkdir_p () { case $as_dir in #( -*) as_dir=./$as_dir;; esac test -d "$as_dir" || eval $as_mkdir_p || { as_dirs= while :; do case $as_dir in #( *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( *) as_qdir=$as_dir;; esac as_dirs="'$as_qdir' $as_dirs" as_dir=`$as_dirname -- "$as_dir" || $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_dir" : 'X\(//\)[^/]' \| \ X"$as_dir" : 'X\(//\)$' \| \ X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$as_dir" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` test -d "$as_dir" && break done test -z "$as_dirs" || eval "mkdir $as_dirs" } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir" } # as_fn_mkdir_p # as_fn_executable_p FILE # ----------------------- # Test if FILE is an executable regular file. as_fn_executable_p () { test -f "$1" && test -x "$1" } # as_fn_executable_p # as_fn_append VAR VALUE # ---------------------- # Append the text in VALUE to the end of the definition contained in VAR. Take # advantage of any shell optimizations that allow amortized linear growth over # repeated appends, instead of the typical quadratic growth present in naive # implementations. if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then : eval 'as_fn_append () { eval $1+=\$2 }' else as_fn_append () { eval $1=\$$1\$2 } fi # as_fn_append # as_fn_arith ARG... # ------------------ # Perform arithmetic evaluation on the ARGs, and store the result in the # global $as_val. Take advantage of shells that can avoid forks. The arguments # must be portable across $(()) and expr. if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then : eval 'as_fn_arith () { as_val=$(( $* )) }' else as_fn_arith () { as_val=`expr "$@" || test $? -eq 1` } fi # as_fn_arith # as_fn_error STATUS ERROR [LINENO LOG_FD] # ---------------------------------------- # Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are # provided, also output the error to LOG_FD, referencing LINENO. Then exit the # script with STATUS, using 1 if that was 0. as_fn_error () { as_status=$1; test $as_status -eq 0 && as_status=1 if test "$4"; then as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 fi $as_echo "$as_me: error: $2" >&2 as_fn_exit $as_status } # as_fn_error if expr a : '\(a\)' >/dev/null 2>&1 && test "X`expr 00001 : '.*\(...\)'`" = X001; then as_expr=expr else as_expr=false fi if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then as_basename=basename else as_basename=false fi if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then as_dirname=dirname else as_dirname=false fi as_me=`$as_basename -- "$0" || $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ X"$0" : 'X\(//\)$' \| \ X"$0" : 'X\(/\)' \| . 2>/dev/null || $as_echo X/"$0" | sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/ q } /^X\/\(\/\/\)$/{ s//\1/ q } /^X\/\(\/\).*/{ s//\1/ q } s/.*/./; q'` # Avoid depending upon Character Ranges. as_cr_letters='abcdefghijklmnopqrstuvwxyz' as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' as_cr_Letters=$as_cr_letters$as_cr_LETTERS as_cr_digits='0123456789' as_cr_alnum=$as_cr_Letters$as_cr_digits as_lineno_1=$LINENO as_lineno_1a=$LINENO as_lineno_2=$LINENO as_lineno_2a=$LINENO eval 'test "x$as_lineno_1'$as_run'" != "x$as_lineno_2'$as_run'" && test "x`expr $as_lineno_1'$as_run' + 1`" = "x$as_lineno_2'$as_run'"' || { # Blame Lee E. McMahon (1931-1989) for sed's syntax. :-) sed -n ' p /[$]LINENO/= ' <$as_myself | sed ' s/[$]LINENO.*/&-/ t lineno b :lineno N :loop s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/ t loop s/-\n.*// ' >$as_me.lineno && chmod +x "$as_me.lineno" || { $as_echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2; as_fn_exit 1; } # If we had to re-execute with $CONFIG_SHELL, we're ensured to have # already done that, so ensure we don't try to do so again and fall # in an infinite loop. This has already happened in practice. _as_can_reexec=no; export _as_can_reexec # Don't try to exec as it changes $[0], causing all sort of problems # (the dirname of $[0] is not the place where we might find the # original and so on. Autoconf is especially sensitive to this). . "./$as_me.lineno" # Exit status is that of the last command. exit } ECHO_C= ECHO_N= ECHO_T= case `echo -n x` in #((((( -n*) case `echo 'xy\c'` in *c*) ECHO_T=' ';; # ECHO_T is single tab character. xy) ECHO_C='\c';; *) echo `echo ksh88 bug on AIX 6.1` > /dev/null ECHO_T=' ';; esac;; *) ECHO_N='-n';; esac rm -f conf$$ conf$$.exe conf$$.file if test -d conf$$.dir; then rm -f conf$$.dir/conf$$.file else rm -f conf$$.dir mkdir conf$$.dir 2>/dev/null fi if (echo >conf$$.file) 2>/dev/null; then if ln -s conf$$.file conf$$ 2>/dev/null; then as_ln_s='ln -s' # ... but there are two gotchas: # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. # In both cases, we have to default to `cp -pR'. ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || as_ln_s='cp -pR' elif ln conf$$.file conf$$ 2>/dev/null; then as_ln_s=ln else as_ln_s='cp -pR' fi else as_ln_s='cp -pR' fi rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file rmdir conf$$.dir 2>/dev/null if mkdir -p . 2>/dev/null; then as_mkdir_p='mkdir -p "$as_dir"' else test -d ./-p && rmdir ./-p as_mkdir_p=false fi as_test_x='test -x' as_executable_p=as_fn_executable_p # Sed expression to map a string onto a valid CPP name. as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" # Sed expression to map a string onto a valid variable name. as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" test -n "$DJDIR" || exec 7<&0 &1 # Name of the host. # hostname on some systems (SVR3.2, old GNU/Linux) returns a bogus exit status, # so uname gets run too. ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q` # # Initializations. # ac_default_prefix=/usr/local ac_clean_files= ac_config_libobj_dir=. LIBOBJS= cross_compiling=no subdirs= MFLAGS= MAKEFLAGS= # Identity of this package. PACKAGE_NAME= PACKAGE_TARNAME= PACKAGE_VERSION= PACKAGE_STRING= PACKAGE_BUGREPORT= PACKAGE_URL= ac_unique_file="driver/subprocs.c" # Factoring default headers for most tests. ac_includes_default="\ #include #ifdef HAVE_SYS_TYPES_H # include #endif #ifdef HAVE_SYS_STAT_H # include #endif #ifdef STDC_HEADERS # include # include #else # ifdef HAVE_STDLIB_H # include # endif #endif #ifdef HAVE_STRING_H # if !defined STDC_HEADERS && defined HAVE_MEMORY_H # include # endif # include #endif #ifdef HAVE_STRINGS_H # include #endif #ifdef HAVE_INTTYPES_H # include #endif #ifdef HAVE_STDINT_H # include #endif #ifdef HAVE_UNISTD_H # include #endif" ac_subst_vars='LTLIBOBJS LIBOBJS DEPEND_DEFINES DEPEND_FLAGS DEPEND APPDEFAULTS ANIM_LIBS ANIM_OBJS GTK_EXTRA_OBJS HACK_CONF_DIR PO_DATADIR GTK_DATADIR HACKDIR_FULL HACKDIR NOGNOME GNOME22 GNOME24 JWZGLES_OBJS GLE_KLUDGE GLE_EXES GL_KLUDGE GL_MEN GL_UTIL_EXES SUID_EXES RETIRED_GL_EXES GL_EXES JPEG_EXES LOCK_OBJS LOCK_SRCS SAVER_GL_LIBS SAVER_GL_OBJS SAVER_GL_SRCS XFT_LIBS XFT_OBJS XFT_SRCS XMU_LIBS XMU_OBJS XMU_SRCS PASSWD_OBJS PASSWD_SRCS MEN_OSX SCRIPTS_OSX EXES_OSX OBJCC COMMENT_DEMO_GLADE2_GTK_2_22_TAIL COMMENT_DEMO_GLADE2_GTK_2_22_HEAD WITH_BROWSER DEFAULT_TEXT_FILE DEFAULT_IMAGE_DIRECTORY DEFAULT_IMAGES_P NEW_LOGIN_COMMAND_P NEW_LOGIN_COMMAND COMMENT_PAM_CHECK_ACCOUNT HAVE_PAM_FAIL_DELAY INSTALL_PAM NEED_SETUID INSTALL_DIRS SETUID_HACKS INSTALL_SETUID PASSWD_LIBS XINERAMA_LIBS XDPMS_LIBS GLE_LIBS GL_LIBS PTY_LIBS XPM_LIBS HACK_LIBS JPEG_LIBS XML_LIBS GTK_LIBS MOTIF_LIBS SAVER_LIBS ALL_DEMO_PROGRAMS PREFERRED_DEMO_PROGRAM INCLUDES gnome_url_show_program gnome_open_program pkg_config login_manager_tmp MKINSTALLDIRS POSUB POFILES PO_IN_DATADIR_FALSE PO_IN_DATADIR_TRUE INTLLIBS INSTOBJEXT GMOFILES DATADIRNAME CATOBJEXT CATALOGS MSGFMT_OPTS GETTEXT_PACKAGE ALL_LINGUAS GMSGFMT MSGFMT MSGMERGE XGETTEXT INTLTOOL_POLICY_RULE INTLTOOL_SERVICE_RULE INTLTOOL_THEME_RULE INTLTOOL_SCHEMAS_RULE INTLTOOL_CAVES_RULE INTLTOOL_XML_NOMERGE_RULE INTLTOOL_XML_RULE INTLTOOL_KBD_RULE INTLTOOL_XAM_RULE INTLTOOL_UI_RULE INTLTOOL_SOUNDLIST_RULE INTLTOOL_SHEET_RULE INTLTOOL_SERVER_RULE INTLTOOL_PONG_RULE INTLTOOL_OAF_RULE INTLTOOL_PROP_RULE INTLTOOL_KEYS_RULE INTLTOOL_DIRECTORY_RULE INTLTOOL_DESKTOP_RULE intltool__v_merge_options_0 intltool__v_merge_options_ INTLTOOL_V_MERGE_OPTIONS INTLTOOL__v_MERGE_0 INTLTOOL__v_MERGE_ INTLTOOL_V_MERGE AM_DEFAULT_VERBOSITY INTLTOOL_EXTRACT INTLTOOL_MERGE INTLTOOL_UPDATE USE_NLS X_EXTRA_LIBS X_LIBS X_PRE_LIBS X_CFLAGS XMKMF PERL EGREP GREP SET_MAKE INSTALL_DATA INSTALL_SCRIPT INSTALL_PROGRAM CPP PTHREAD_CFLAGS PTHREAD_LIBS PTHREAD_CC ax_pthread_config OBJEXT EXEEXT ac_ct_CC CPPFLAGS LDFLAGS CFLAGS CC host_os host_vendor host_cpu host build_os build_vendor build_cpu build target_alias host_alias build_alias LIBS ECHO_T ECHO_N ECHO_C DEFS mandir localedir libdir psdir pdfdir dvidir htmldir infodir docdir oldincludedir includedir localstatedir sharedstatedir sysconfdir datadir datarootdir libexecdir sbindir bindir program_transform_name prefix exec_prefix PACKAGE_URL PACKAGE_BUGREPORT PACKAGE_STRING PACKAGE_VERSION PACKAGE_TARNAME PACKAGE_NAME PATH_SEPARATOR SHELL' ac_subst_files='' ac_user_opts=' enable_option_checking with_x_app_defaults with_pthread enable_largefile with_x enable_nls with_hackdir enable_subdir with_configdir with_dpms_ext with_xinerama_ext with_xinput_ext with_xf86vmode_ext with_xf86gamma_ext with_randr_ext with_proc_interrupts enable_locking enable_root_passwd with_pam with_pam_service_name enable_pam_check_account_type with_kerberos with_shadow with_passwd_helper with_login_manager with_gtk with_motif with_gl with_gle with_gles with_pixbuf with_xpm with_jpeg with_xft with_xshm_ext with_xdbe_ext with_readdisplay with_image_directory with_text_file with_browser with_setuid_hacks with_record_animation ' ac_precious_vars='build_alias host_alias target_alias CC CFLAGS LDFLAGS LIBS CPPFLAGS CPP XMKMF' # Initialize some variables set by options. ac_init_help= ac_init_version=false ac_unrecognized_opts= ac_unrecognized_sep= # The variables have the same names as the options, with # dashes changed to underlines. cache_file=/dev/null exec_prefix=NONE no_create= no_recursion= prefix=NONE program_prefix=NONE program_suffix=NONE program_transform_name=s,x,x, silent= site= srcdir= verbose= x_includes=NONE x_libraries=NONE # Installation directory options. # These are left unexpanded so users can "make install exec_prefix=/foo" # and all the variables that are supposed to be based on exec_prefix # by default will actually change. # Use braces instead of parens because sh, perl, etc. also accept them. # (The list follows the same order as the GNU Coding Standards.) bindir='${exec_prefix}/bin' sbindir='${exec_prefix}/sbin' libexecdir='${exec_prefix}/libexec' datarootdir='${prefix}/share' datadir='${datarootdir}' sysconfdir='${prefix}/etc' sharedstatedir='${prefix}/com' localstatedir='${prefix}/var' includedir='${prefix}/include' oldincludedir='/usr/include' docdir='${datarootdir}/doc/${PACKAGE}' infodir='${datarootdir}/info' htmldir='${docdir}' dvidir='${docdir}' pdfdir='${docdir}' psdir='${docdir}' libdir='${exec_prefix}/lib' localedir='${datarootdir}/locale' mandir='${datarootdir}/man' ac_prev= ac_dashdash= for ac_option do # If the previous option needs an argument, assign it. if test -n "$ac_prev"; then eval $ac_prev=\$ac_option ac_prev= continue fi case $ac_option in *=?*) ac_optarg=`expr "X$ac_option" : '[^=]*=\(.*\)'` ;; *=) ac_optarg= ;; *) ac_optarg=yes ;; esac # Accept the important Cygnus configure options, so we can diagnose typos. case $ac_dashdash$ac_option in --) ac_dashdash=yes ;; -bindir | --bindir | --bindi | --bind | --bin | --bi) ac_prev=bindir ;; -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*) bindir=$ac_optarg ;; -build | --build | --buil | --bui | --bu) ac_prev=build_alias ;; -build=* | --build=* | --buil=* | --bui=* | --bu=*) build_alias=$ac_optarg ;; -cache-file | --cache-file | --cache-fil | --cache-fi \ | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c) ac_prev=cache_file ;; -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \ | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*) cache_file=$ac_optarg ;; --config-cache | -C) cache_file=config.cache ;; -datadir | --datadir | --datadi | --datad) ac_prev=datadir ;; -datadir=* | --datadir=* | --datadi=* | --datad=*) datadir=$ac_optarg ;; -datarootdir | --datarootdir | --datarootdi | --datarootd | --dataroot \ | --dataroo | --dataro | --datar) ac_prev=datarootdir ;; -datarootdir=* | --datarootdir=* | --datarootdi=* | --datarootd=* \ | --dataroot=* | --dataroo=* | --dataro=* | --datar=*) datarootdir=$ac_optarg ;; -disable-* | --disable-*) ac_useropt=`expr "x$ac_option" : 'x-*disable-\(.*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid feature name: $ac_useropt" ac_useropt_orig=$ac_useropt ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "enable_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--disable-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval enable_$ac_useropt=no ;; -docdir | --docdir | --docdi | --doc | --do) ac_prev=docdir ;; -docdir=* | --docdir=* | --docdi=* | --doc=* | --do=*) docdir=$ac_optarg ;; -dvidir | --dvidir | --dvidi | --dvid | --dvi | --dv) ac_prev=dvidir ;; -dvidir=* | --dvidir=* | --dvidi=* | --dvid=* | --dvi=* | --dv=*) dvidir=$ac_optarg ;; -enable-* | --enable-*) ac_useropt=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid feature name: $ac_useropt" ac_useropt_orig=$ac_useropt ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "enable_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--enable-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval enable_$ac_useropt=\$ac_optarg ;; -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \ | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \ | --exec | --exe | --ex) ac_prev=exec_prefix ;; -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \ | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \ | --exec=* | --exe=* | --ex=*) exec_prefix=$ac_optarg ;; -gas | --gas | --ga | --g) # Obsolete; use --with-gas. with_gas=yes ;; -help | --help | --hel | --he | -h) ac_init_help=long ;; -help=r* | --help=r* | --hel=r* | --he=r* | -hr*) ac_init_help=recursive ;; -help=s* | --help=s* | --hel=s* | --he=s* | -hs*) ac_init_help=short ;; -host | --host | --hos | --ho) ac_prev=host_alias ;; -host=* | --host=* | --hos=* | --ho=*) host_alias=$ac_optarg ;; -htmldir | --htmldir | --htmldi | --htmld | --html | --htm | --ht) ac_prev=htmldir ;; -htmldir=* | --htmldir=* | --htmldi=* | --htmld=* | --html=* | --htm=* \ | --ht=*) htmldir=$ac_optarg ;; -includedir | --includedir | --includedi | --included | --include \ | --includ | --inclu | --incl | --inc) ac_prev=includedir ;; -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \ | --includ=* | --inclu=* | --incl=* | --inc=*) includedir=$ac_optarg ;; -infodir | --infodir | --infodi | --infod | --info | --inf) ac_prev=infodir ;; -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*) infodir=$ac_optarg ;; -libdir | --libdir | --libdi | --libd) ac_prev=libdir ;; -libdir=* | --libdir=* | --libdi=* | --libd=*) libdir=$ac_optarg ;; -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \ | --libexe | --libex | --libe) ac_prev=libexecdir ;; -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \ | --libexe=* | --libex=* | --libe=*) libexecdir=$ac_optarg ;; -localedir | --localedir | --localedi | --localed | --locale) ac_prev=localedir ;; -localedir=* | --localedir=* | --localedi=* | --localed=* | --locale=*) localedir=$ac_optarg ;; -localstatedir | --localstatedir | --localstatedi | --localstated \ | --localstate | --localstat | --localsta | --localst | --locals) ac_prev=localstatedir ;; -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \ | --localstate=* | --localstat=* | --localsta=* | --localst=* | --locals=*) localstatedir=$ac_optarg ;; -mandir | --mandir | --mandi | --mand | --man | --ma | --m) ac_prev=mandir ;; -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*) mandir=$ac_optarg ;; -nfp | --nfp | --nf) # Obsolete; use --without-fp. with_fp=no ;; -no-create | --no-create | --no-creat | --no-crea | --no-cre \ | --no-cr | --no-c | -n) no_create=yes ;; -no-recursion | --no-recursion | --no-recursio | --no-recursi \ | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) no_recursion=yes ;; -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \ | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \ | --oldin | --oldi | --old | --ol | --o) ac_prev=oldincludedir ;; -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \ | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \ | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*) oldincludedir=$ac_optarg ;; -prefix | --prefix | --prefi | --pref | --pre | --pr | --p) ac_prev=prefix ;; -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*) prefix=$ac_optarg ;; -program-prefix | --program-prefix | --program-prefi | --program-pref \ | --program-pre | --program-pr | --program-p) ac_prev=program_prefix ;; -program-prefix=* | --program-prefix=* | --program-prefi=* \ | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*) program_prefix=$ac_optarg ;; -program-suffix | --program-suffix | --program-suffi | --program-suff \ | --program-suf | --program-su | --program-s) ac_prev=program_suffix ;; -program-suffix=* | --program-suffix=* | --program-suffi=* \ | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*) program_suffix=$ac_optarg ;; -program-transform-name | --program-transform-name \ | --program-transform-nam | --program-transform-na \ | --program-transform-n | --program-transform- \ | --program-transform | --program-transfor \ | --program-transfo | --program-transf \ | --program-trans | --program-tran \ | --progr-tra | --program-tr | --program-t) ac_prev=program_transform_name ;; -program-transform-name=* | --program-transform-name=* \ | --program-transform-nam=* | --program-transform-na=* \ | --program-transform-n=* | --program-transform-=* \ | --program-transform=* | --program-transfor=* \ | --program-transfo=* | --program-transf=* \ | --program-trans=* | --program-tran=* \ | --progr-tra=* | --program-tr=* | --program-t=*) program_transform_name=$ac_optarg ;; -pdfdir | --pdfdir | --pdfdi | --pdfd | --pdf | --pd) ac_prev=pdfdir ;; -pdfdir=* | --pdfdir=* | --pdfdi=* | --pdfd=* | --pdf=* | --pd=*) pdfdir=$ac_optarg ;; -psdir | --psdir | --psdi | --psd | --ps) ac_prev=psdir ;; -psdir=* | --psdir=* | --psdi=* | --psd=* | --ps=*) psdir=$ac_optarg ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil) silent=yes ;; -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb) ac_prev=sbindir ;; -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \ | --sbi=* | --sb=*) sbindir=$ac_optarg ;; -sharedstatedir | --sharedstatedir | --sharedstatedi \ | --sharedstated | --sharedstate | --sharedstat | --sharedsta \ | --sharedst | --shareds | --shared | --share | --shar \ | --sha | --sh) ac_prev=sharedstatedir ;; -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \ | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \ | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \ | --sha=* | --sh=*) sharedstatedir=$ac_optarg ;; -site | --site | --sit) ac_prev=site ;; -site=* | --site=* | --sit=*) site=$ac_optarg ;; -srcdir | --srcdir | --srcdi | --srcd | --src | --sr) ac_prev=srcdir ;; -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*) srcdir=$ac_optarg ;; -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \ | --syscon | --sysco | --sysc | --sys | --sy) ac_prev=sysconfdir ;; -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \ | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*) sysconfdir=$ac_optarg ;; -target | --target | --targe | --targ | --tar | --ta | --t) ac_prev=target_alias ;; -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*) target_alias=$ac_optarg ;; -v | -verbose | --verbose | --verbos | --verbo | --verb) verbose=yes ;; -version | --version | --versio | --versi | --vers | -V) ac_init_version=: ;; -with-* | --with-*) ac_useropt=`expr "x$ac_option" : 'x-*with-\([^=]*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid package name: $ac_useropt" ac_useropt_orig=$ac_useropt ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "with_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--with-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval with_$ac_useropt=\$ac_optarg ;; -without-* | --without-*) ac_useropt=`expr "x$ac_option" : 'x-*without-\(.*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid package name: $ac_useropt" ac_useropt_orig=$ac_useropt ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "with_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--without-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval with_$ac_useropt=no ;; --x) # Obsolete; use --with-x. with_x=yes ;; -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \ | --x-incl | --x-inc | --x-in | --x-i) ac_prev=x_includes ;; -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \ | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*) x_includes=$ac_optarg ;; -x-libraries | --x-libraries | --x-librarie | --x-librari \ | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l) ac_prev=x_libraries ;; -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \ | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*) x_libraries=$ac_optarg ;; -*) as_fn_error $? "unrecognized option: \`$ac_option' Try \`$0 --help' for more information" ;; *=*) ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='` # Reject names that are not valid shell variable names. case $ac_envvar in #( '' | [0-9]* | *[!_$as_cr_alnum]* ) as_fn_error $? "invalid variable name: \`$ac_envvar'" ;; esac eval $ac_envvar=\$ac_optarg export $ac_envvar ;; *) # FIXME: should be removed in autoconf 3.0. $as_echo "$as_me: WARNING: you should use --build, --host, --target" >&2 expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null && $as_echo "$as_me: WARNING: invalid host type: $ac_option" >&2 : "${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option}" ;; esac done if test -n "$ac_prev"; then ac_option=--`echo $ac_prev | sed 's/_/-/g'` as_fn_error $? "missing argument to $ac_option" fi if test -n "$ac_unrecognized_opts"; then case $enable_option_checking in no) ;; fatal) as_fn_error $? "unrecognized options: $ac_unrecognized_opts" ;; *) $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2 ;; esac fi # Check all directory arguments for consistency. for ac_var in exec_prefix prefix bindir sbindir libexecdir datarootdir \ datadir sysconfdir sharedstatedir localstatedir includedir \ oldincludedir docdir infodir htmldir dvidir pdfdir psdir \ libdir localedir mandir do eval ac_val=\$$ac_var # Remove trailing slashes. case $ac_val in */ ) ac_val=`expr "X$ac_val" : 'X\(.*[^/]\)' \| "X$ac_val" : 'X\(.*\)'` eval $ac_var=\$ac_val;; esac # Be sure to have absolute directory names. case $ac_val in [\\/$]* | ?:[\\/]* ) continue;; NONE | '' ) case $ac_var in *prefix ) continue;; esac;; esac as_fn_error $? "expected an absolute directory name for --$ac_var: $ac_val" done # There might be people who depend on the old broken behavior: `$host' # used to hold the argument of --host etc. # FIXME: To remove some day. build=$build_alias host=$host_alias target=$target_alias # FIXME: To remove some day. if test "x$host_alias" != x; then if test "x$build_alias" = x; then cross_compiling=maybe elif test "x$build_alias" != "x$host_alias"; then cross_compiling=yes fi fi ac_tool_prefix= test -n "$host_alias" && ac_tool_prefix=$host_alias- test "$silent" = yes && exec 6>/dev/null ac_pwd=`pwd` && test -n "$ac_pwd" && ac_ls_di=`ls -di .` && ac_pwd_ls_di=`cd "$ac_pwd" && ls -di .` || as_fn_error $? "working directory cannot be determined" test "X$ac_ls_di" = "X$ac_pwd_ls_di" || as_fn_error $? "pwd does not report name of working directory" # Find the source files, if location was not specified. if test -z "$srcdir"; then ac_srcdir_defaulted=yes # Try the directory containing this script, then the parent directory. ac_confdir=`$as_dirname -- "$as_myself" || $as_expr X"$as_myself" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_myself" : 'X\(//\)[^/]' \| \ X"$as_myself" : 'X\(//\)$' \| \ X"$as_myself" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$as_myself" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` srcdir=$ac_confdir if test ! -r "$srcdir/$ac_unique_file"; then srcdir=.. fi else ac_srcdir_defaulted=no fi if test ! -r "$srcdir/$ac_unique_file"; then test "$ac_srcdir_defaulted" = yes && srcdir="$ac_confdir or .." as_fn_error $? "cannot find sources ($ac_unique_file) in $srcdir" fi ac_msg="sources are in $srcdir, but \`cd $srcdir' does not work" ac_abs_confdir=`( cd "$srcdir" && test -r "./$ac_unique_file" || as_fn_error $? "$ac_msg" pwd)` # When building in place, set srcdir=. if test "$ac_abs_confdir" = "$ac_pwd"; then srcdir=. fi # Remove unnecessary trailing slashes from srcdir. # Double slashes in file names in object file debugging info # mess up M-x gdb in Emacs. case $srcdir in */) srcdir=`expr "X$srcdir" : 'X\(.*[^/]\)' \| "X$srcdir" : 'X\(.*\)'`;; esac for ac_var in $ac_precious_vars; do eval ac_env_${ac_var}_set=\${${ac_var}+set} eval ac_env_${ac_var}_value=\$${ac_var} eval ac_cv_env_${ac_var}_set=\${${ac_var}+set} eval ac_cv_env_${ac_var}_value=\$${ac_var} done # # Report the --help message. # if test "$ac_init_help" = "long"; then # Omit some internal or obsolete options to make the list less imposing. # This message is too long to be a string in the A/UX 3.1 sh. cat <<_ACEOF \`configure' configures this package to adapt to many kinds of systems. Usage: $0 [OPTION]... [VAR=VALUE]... To assign environment variables (e.g., CC, CFLAGS...), specify them as VAR=VALUE. See below for descriptions of some of the useful variables. Defaults for the options are specified in brackets. Configuration: -h, --help display this help and exit --help=short display options specific to this package --help=recursive display the short help of all the included packages -V, --version display version information and exit -q, --quiet, --silent do not print \`checking ...' messages --cache-file=FILE cache test results in FILE [disabled] -C, --config-cache alias for \`--cache-file=config.cache' -n, --no-create do not create output files --srcdir=DIR find the sources in DIR [configure dir or \`..'] Installation directories: --prefix=PREFIX install architecture-independent files in PREFIX [$ac_default_prefix] --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX [PREFIX] By default, \`make install' will install all the files in \`$ac_default_prefix/bin', \`$ac_default_prefix/lib' etc. You can specify an installation prefix other than \`$ac_default_prefix' using \`--prefix', for instance \`--prefix=\$HOME'. For better control, use the options below. Fine tuning of the installation directories: --bindir=DIR user executables [EPREFIX/bin] --libexecdir=DIR program executables [EPREFIX/libexec] --libdir=DIR object code libraries [EPREFIX/lib] --includedir=DIR C header files [PREFIX/include] --x-includes=DIR X include files are in DIR --x-libraries=DIR X library files are in DIR --datarootdir=DIR read-only arch.-independent data root [PREFIX/share] --datadir=DIR read-only architecture-independent data [DATAROOTDIR] --localedir=DIR locale-dependent data [DATAROOTDIR/locale] --mandir=DIR man documentation [DATAROOTDIR/man] --docdir=DIR documentation root [DATAROOTDIR/doc/PACKAGE] --htmldir=DIR html documentation [DOCDIR] --dvidir=DIR dvi documentation [DOCDIR] --pdfdir=DIR pdf documentation [DOCDIR] --psdir=DIR ps documentation [DOCDIR] _ACEOF cat <<\_ACEOF X features: --x-includes=DIR X include files are in DIR --x-libraries=DIR X library files are in DIR System types: --build=BUILD configure for building on BUILD [guessed] --host=HOST cross-compile to build programs to run on HOST [BUILD] _ACEOF fi if test -n "$ac_init_help"; then cat <<\_ACEOF Optional Features: --disable-option-checking ignore unrecognized --enable/--with options --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no) --enable-FEATURE[=ARG] include FEATURE [ARG=yes] --disable-largefile omit support for large files --disable-nls do not use Native Language Support Screen locking options: --enable-locking Compile in support for locking the display. --disable-locking Do not allow locking at all. --enable-root-passwd Allow root passwd to unlock screen. --disable-root-passwd Do not allow that. --enable-pam-check-account-type Whether PAM should check the result of account modules when authenticating. Only do this if you have account configured properly on your system. Optional Packages: --with-PACKAGE[=ARG] use PACKAGE [ARG=yes] --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no) --with-pthread Enables POSIX threads, for SMP support. Installation options: --with-hackdir=DIR Where to install the hundreds of demo executables. Default: `PREFIX/libexec/xscreensaver/' --with-configdir=DIR Where to install the data files that describe each of the display modes to the GUI. Default: `PREFIX/share/xscreensaver/config/' --with-x-app-defaults=DIR Where to install xscreensaver configuration file. --with-dpms-ext Include support for the DPMS extension. --with-xinerama-ext Include support for the XINERAMA extension. --with-xinput-ext Include support for the XInput extension. --with-xf86vmode-ext Include support for XFree86 virtual screens. --with-xf86gamma-ext Include support for XFree86 gamma fading. --with-randr-ext Include support for the X Resize+Rotate extension. --with-proc-interrupts Include support for consulting the /proc/interrupts file to notice keyboard activity. --with-pam Include support for PAM (Pluggable Auth Modules.) --with-pam-service-name NAME arg is the name of the PAM service that xscreensaver will authenticate as. --with-kerberos Include support for Kerberos authentication. --with-shadow Include support for shadow password authentication. --with-passwd-helper Include support for an external password verification helper program. --with-login-manager Put a "New Login" button on the unlock dialog that runs a login manager like gdmflexiserver or kdmctl. User interface options: --with-gtk Use the Gtk toolkit for the user interface. --with-motif Use the Motif toolkit for the user interface (no longer supported.) Graphics options: --with-gl Build those demos which depend on OpenGL. --with-gle Build those demos which depend on GLE (the OpenGL "extrusion" library.) --with-gles Target OpenGL ES 1.x API instead of OpenGL 1.3. --with-pixbuf Include support for the GDK-Pixbuf library in some demos, which will make it possible for them to read GIF, JPEG, and PNG files as well. --with-xpm Include support for XPM files in some demos. (Not needed if Pixbuf is used.) --with-jpeg Include support for the JPEG library. --with-xft Include support for the X Freetype library. --with-xshm-ext Include support for the Shared Memory extension. --with-xdbe-ext Include support for the DOUBLE-BUFFER extension. --with-readdisplay Include support for the XReadDisplay extension. --with-image-directory Arg is the default directory from which some demos will choose random images to display. --with-text-file=FILE By default, some demos may display this file. --with-browser=BROWSER Specify the web browser used to show the help URL. --with-setuid-hacks Allow some demos to be installed `setuid root' (which is needed in order to ping other hosts.) --with-record-animation Include code for generating MP4 videos. Some influential environment variables: CC C compiler command CFLAGS C compiler flags LDFLAGS linker flags, e.g. -L if you have libraries in a nonstandard directory LIBS libraries to pass to the linker, e.g. -l CPPFLAGS (Objective) C/C++ preprocessor flags, e.g. -I if you have headers in a nonstandard directory CPP C preprocessor XMKMF Path to xmkmf, Makefile generator for X Window System Use these variables to override the choices made by `configure' or to help it to find libraries and programs with nonstandard names/locations. Report bugs to the package provider. _ACEOF ac_status=$? fi if test "$ac_init_help" = "recursive"; then # If there are subdirs, report their specific --help. for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue test -d "$ac_dir" || { cd "$srcdir" && ac_pwd=`pwd` && srcdir=. && test -d "$ac_dir"; } || continue ac_builddir=. case "$ac_dir" in .) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` # A ".." for each directory in $ac_dir_suffix. ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` case $ac_top_builddir_sub in "") ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; esac ;; esac ac_abs_top_builddir=$ac_pwd ac_abs_builddir=$ac_pwd$ac_dir_suffix # for backward compatibility: ac_top_builddir=$ac_top_build_prefix case $srcdir in .) # We are building in place. ac_srcdir=. ac_top_srcdir=$ac_top_builddir_sub ac_abs_top_srcdir=$ac_pwd ;; [\\/]* | ?:[\\/]* ) # Absolute name. ac_srcdir=$srcdir$ac_dir_suffix; ac_top_srcdir=$srcdir ac_abs_top_srcdir=$srcdir ;; *) # Relative name. ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix ac_top_srcdir=$ac_top_build_prefix$srcdir ac_abs_top_srcdir=$ac_pwd/$srcdir ;; esac ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix cd "$ac_dir" || { ac_status=$?; continue; } # Check for guested configure. if test -f "$ac_srcdir/configure.gnu"; then echo && $SHELL "$ac_srcdir/configure.gnu" --help=recursive elif test -f "$ac_srcdir/configure"; then echo && $SHELL "$ac_srcdir/configure" --help=recursive else $as_echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2 fi || ac_status=$? cd "$ac_pwd" || { ac_status=$?; break; } done fi test -n "$ac_init_help" && exit $ac_status if $ac_init_version; then cat <<\_ACEOF configure generated by GNU Autoconf 2.69 Copyright (C) 2012 Free Software Foundation, Inc. This configure script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it. _ACEOF exit fi ## ------------------------ ## ## Autoconf initialization. ## ## ------------------------ ## # ac_fn_c_try_compile LINENO # -------------------------- # Try to compile conftest.$ac_ext, and return whether this succeeded. ac_fn_c_try_compile () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack 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:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_compile") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then : ac_retval=0 else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 fi eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_c_try_compile # ac_fn_c_try_link LINENO # ----------------------- # Try to link conftest.$ac_ext, and return whether this succeeded. ac_fn_c_try_link () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack rm -rf conftest.$ac_objext conftest$ac_exeext if { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && { test "$cross_compiling" = yes || test -x conftest$ac_exeext }; then : ac_retval=0 else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 fi # Delete the IPA/IPO (Inter Procedural Analysis/Optimization) information # created by the PGI compiler (conftest_ipa8_conftest.oo), as it would # interfere with the next link command; also delete a directory that is # left behind by Apple's compiler. We do this before executing the actions. rm -rf conftest.dSYM conftest_ipa8_conftest.oo eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_c_try_link # ac_fn_c_try_run LINENO # ---------------------- # Try to link conftest.$ac_ext, and return whether this succeeded. Assumes # that executables *can* be run. ac_fn_c_try_run () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack if { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { ac_try='./conftest$ac_exeext' { { case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_try") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; }; then : ac_retval=0 else $as_echo "$as_me: program exited with status $ac_status" >&5 $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=$ac_status fi rm -rf conftest.dSYM conftest_ipa8_conftest.oo eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_c_try_run # ac_fn_c_try_cpp LINENO # ---------------------- # Try to preprocess conftest.$ac_ext, and return whether this succeeded. ac_fn_c_try_cpp () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack if { { ac_try="$ac_cpp conftest.$ac_ext" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_cpp conftest.$ac_ext") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } > conftest.i && { test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || test ! -s conftest.err }; then : ac_retval=0 else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 fi eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_c_try_cpp # ac_fn_c_check_header_mongrel LINENO HEADER VAR INCLUDES # ------------------------------------------------------- # Tests whether HEADER exists, giving a warning if it cannot be compiled using # the include files in INCLUDES and setting the cache variable VAR # accordingly. ac_fn_c_check_header_mongrel () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack if eval \${$3+:} false; then : { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 $as_echo_n "checking for $2... " >&6; } if eval \${$3+:} false; then : $as_echo_n "(cached) " >&6 fi eval ac_res=\$$3 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } else # Is the header compilable? { $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 usability" >&5 $as_echo_n "checking $2 usability... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 #include <$2> _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_header_compiler=yes else ac_header_compiler=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_compiler" >&5 $as_echo "$ac_header_compiler" >&6; } # Is the header present? { $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 presence" >&5 $as_echo_n "checking $2 presence... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <$2> _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : ac_header_preproc=yes else ac_header_preproc=no fi rm -rf conftest.err conftest.i conftest.$ac_ext { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_preproc" >&5 $as_echo "$ac_header_preproc" >&6; } # So? What about this header? case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in #(( yes:no: ) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&5 $as_echo "$as_me: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5 $as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;} ;; no:yes:* ) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: present but cannot be compiled" >&5 $as_echo "$as_me: WARNING: $2: present but cannot be compiled" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: check for missing prerequisite headers?" >&5 $as_echo "$as_me: WARNING: $2: check for missing prerequisite headers?" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: see the Autoconf documentation" >&5 $as_echo "$as_me: WARNING: $2: see the Autoconf documentation" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&5 $as_echo "$as_me: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5 $as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;} ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 $as_echo_n "checking for $2... " >&6; } if eval \${$3+:} false; then : $as_echo_n "(cached) " >&6 else eval "$3=\$ac_header_compiler" fi eval ac_res=\$$3 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } fi eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_c_check_header_mongrel # ac_fn_c_check_header_compile LINENO HEADER VAR INCLUDES # ------------------------------------------------------- # Tests whether HEADER exists and can be compiled using the include files in # INCLUDES, setting the cache variable VAR accordingly. ac_fn_c_check_header_compile () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 $as_echo_n "checking for $2... " >&6; } if eval \${$3+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 #include <$2> _ACEOF if ac_fn_c_try_compile "$LINENO"; then : eval "$3=yes" else eval "$3=no" fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi eval ac_res=\$$3 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_c_check_header_compile # ac_fn_c_check_type LINENO TYPE VAR INCLUDES # ------------------------------------------- # Tests whether TYPE exists after having included INCLUDES, setting cache # variable VAR accordingly. ac_fn_c_check_type () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 $as_echo_n "checking for $2... " >&6; } if eval \${$3+:} false; then : $as_echo_n "(cached) " >&6 else eval "$3=no" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 int main () { if (sizeof ($2)) return 0; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 int main () { if (sizeof (($2))) return 0; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : else eval "$3=yes" fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi eval ac_res=\$$3 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_c_check_type # ac_fn_c_check_func LINENO FUNC VAR # ---------------------------------- # Tests whether FUNC exists, setting the cache variable VAR accordingly ac_fn_c_check_func () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 $as_echo_n "checking for $2... " >&6; } if eval \${$3+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Define $2 to an innocuous variant, in case declares $2. For example, HP-UX 11i declares gettimeofday. */ #define $2 innocuous_$2 /* System header to define __stub macros and hopefully few prototypes, which can conflict with char $2 (); below. Prefer to if __STDC__ is defined, since exists even on freestanding compilers. */ #ifdef __STDC__ # include #else # include #endif #undef $2 /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char $2 (); /* The GNU C library defines this for functions which it implements to always fail with ENOSYS. Some functions are actually named something starting with __ and the normal name is an alias. */ #if defined __stub_$2 || defined __stub___$2 choke me #endif int main () { return $2 (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : eval "$3=yes" else eval "$3=no" fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi eval ac_res=\$$3 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_c_check_func # ac_fn_c_check_member LINENO AGGR MEMBER VAR INCLUDES # ---------------------------------------------------- # Tries to find if the field MEMBER exists in type AGGR, after including # INCLUDES, setting cache variable VAR accordingly. ac_fn_c_check_member () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2.$3" >&5 $as_echo_n "checking for $2.$3... " >&6; } if eval \${$4+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $5 int main () { static $2 ac_aggr; if (ac_aggr.$3) return 0; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : eval "$4=yes" else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $5 int main () { static $2 ac_aggr; if (sizeof ac_aggr.$3) return 0; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : eval "$4=yes" else eval "$4=no" fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi eval ac_res=\$$4 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_c_check_member cat >config.log <<_ACEOF This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. It was created by $as_me, which was generated by GNU Autoconf 2.69. Invocation command line was $ $0 $@ _ACEOF exec 5>>config.log { cat <<_ASUNAME ## --------- ## ## Platform. ## ## --------- ## hostname = `(hostname || uname -n) 2>/dev/null | sed 1q` uname -m = `(uname -m) 2>/dev/null || echo unknown` uname -r = `(uname -r) 2>/dev/null || echo unknown` uname -s = `(uname -s) 2>/dev/null || echo unknown` uname -v = `(uname -v) 2>/dev/null || echo unknown` /usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null || echo unknown` /bin/uname -X = `(/bin/uname -X) 2>/dev/null || echo unknown` /bin/arch = `(/bin/arch) 2>/dev/null || echo unknown` /usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null || echo unknown` /usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown` /usr/bin/hostinfo = `(/usr/bin/hostinfo) 2>/dev/null || echo unknown` /bin/machine = `(/bin/machine) 2>/dev/null || echo unknown` /usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null || echo unknown` /bin/universe = `(/bin/universe) 2>/dev/null || echo unknown` _ASUNAME as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. $as_echo "PATH: $as_dir" done IFS=$as_save_IFS } >&5 cat >&5 <<_ACEOF ## ----------- ## ## Core tests. ## ## ----------- ## _ACEOF # Keep a trace of the command line. # Strip out --no-create and --no-recursion so they do not pile up. # Strip out --silent because we don't want to record it for future runs. # Also quote any args containing shell meta-characters. # Make two passes to allow for proper duplicate-argument suppression. ac_configure_args= ac_configure_args0= ac_configure_args1= ac_must_keep_next=false for ac_pass in 1 2 do for ac_arg do case $ac_arg in -no-create | --no-c* | -n | -no-recursion | --no-r*) continue ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil) continue ;; *\'*) ac_arg=`$as_echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; esac case $ac_pass in 1) as_fn_append ac_configure_args0 " '$ac_arg'" ;; 2) as_fn_append ac_configure_args1 " '$ac_arg'" if test $ac_must_keep_next = true; then ac_must_keep_next=false # Got value, back to normal. else case $ac_arg in *=* | --config-cache | -C | -disable-* | --disable-* \ | -enable-* | --enable-* | -gas | --g* | -nfp | --nf* \ | -q | -quiet | --q* | -silent | --sil* | -v | -verb* \ | -with-* | --with-* | -without-* | --without-* | --x) case "$ac_configure_args0 " in "$ac_configure_args1"*" '$ac_arg' "* ) continue ;; esac ;; -* ) ac_must_keep_next=true ;; esac fi as_fn_append ac_configure_args " '$ac_arg'" ;; esac done done { ac_configure_args0=; unset ac_configure_args0;} { ac_configure_args1=; unset ac_configure_args1;} # When interrupted or exit'd, cleanup temporary files, and complete # config.log. We remove comments because anyway the quotes in there # would cause problems or look ugly. # WARNING: Use '\'' to represent an apostrophe within the trap. # WARNING: Do not start the trap code with a newline, due to a FreeBSD 4.0 bug. trap 'exit_status=$? # Save into config.log some information that might help in debugging. { echo $as_echo "## ---------------- ## ## Cache variables. ## ## ---------------- ##" echo # The following way of writing the cache mishandles newlines in values, ( for ac_var in `(set) 2>&1 | sed -n '\''s/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'\''`; do eval ac_val=\$$ac_var case $ac_val in #( *${as_nl}*) case $ac_var in #( *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 $as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; esac case $ac_var in #( _ | IFS | as_nl) ;; #( BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( *) { eval $ac_var=; unset $ac_var;} ;; esac ;; esac done (set) 2>&1 | case $as_nl`(ac_space='\'' '\''; set) 2>&1` in #( *${as_nl}ac_space=\ *) sed -n \ "s/'\''/'\''\\\\'\'''\''/g; s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\''\\2'\''/p" ;; #( *) sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" ;; esac | sort ) echo $as_echo "## ----------------- ## ## Output variables. ## ## ----------------- ##" echo for ac_var in $ac_subst_vars do eval ac_val=\$$ac_var case $ac_val in *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; esac $as_echo "$ac_var='\''$ac_val'\''" done | sort echo if test -n "$ac_subst_files"; then $as_echo "## ------------------- ## ## File substitutions. ## ## ------------------- ##" echo for ac_var in $ac_subst_files do eval ac_val=\$$ac_var case $ac_val in *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; esac $as_echo "$ac_var='\''$ac_val'\''" done | sort echo fi if test -s confdefs.h; then $as_echo "## ----------- ## ## confdefs.h. ## ## ----------- ##" echo cat confdefs.h echo fi test "$ac_signal" != 0 && $as_echo "$as_me: caught signal $ac_signal" $as_echo "$as_me: exit $exit_status" } >&5 rm -f core *.core core.conftest.* && rm -f -r conftest* confdefs* conf$$* $ac_clean_files && exit $exit_status ' 0 for ac_signal in 1 2 13 15; do trap 'ac_signal='$ac_signal'; as_fn_exit 1' $ac_signal done ac_signal=0 # confdefs.h avoids OS command line length limits that DEFS can exceed. rm -f -r conftest* confdefs.h $as_echo "/* confdefs.h */" > confdefs.h # Predefined preprocessor variables. cat >>confdefs.h <<_ACEOF #define PACKAGE_NAME "$PACKAGE_NAME" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_TARNAME "$PACKAGE_TARNAME" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_VERSION "$PACKAGE_VERSION" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_STRING "$PACKAGE_STRING" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_BUGREPORT "$PACKAGE_BUGREPORT" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_URL "$PACKAGE_URL" _ACEOF # Let the site file select an alternate cache file if it wants to. # Prefer an explicitly selected file to automatically selected ones. ac_site_file1=NONE ac_site_file2=NONE if test -n "$CONFIG_SITE"; then # We do not want a PATH search for config.site. case $CONFIG_SITE in #(( -*) ac_site_file1=./$CONFIG_SITE;; */*) ac_site_file1=$CONFIG_SITE;; *) ac_site_file1=./$CONFIG_SITE;; esac elif test "x$prefix" != xNONE; then ac_site_file1=$prefix/share/config.site ac_site_file2=$prefix/etc/config.site else ac_site_file1=$ac_default_prefix/share/config.site ac_site_file2=$ac_default_prefix/etc/config.site fi for ac_site_file in "$ac_site_file1" "$ac_site_file2" do test "x$ac_site_file" = xNONE && continue if test /dev/null != "$ac_site_file" && test -r "$ac_site_file"; then { $as_echo "$as_me:${as_lineno-$LINENO}: loading site script $ac_site_file" >&5 $as_echo "$as_me: loading site script $ac_site_file" >&6;} sed 's/^/| /' "$ac_site_file" >&5 . "$ac_site_file" \ || { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "failed to load site script $ac_site_file See \`config.log' for more details" "$LINENO" 5; } fi done if test -r "$cache_file"; then # Some versions of bash will fail to source /dev/null (special files # actually), so we avoid doing that. DJGPP emulates it as a regular file. if test /dev/null != "$cache_file" && test -f "$cache_file"; then { $as_echo "$as_me:${as_lineno-$LINENO}: loading cache $cache_file" >&5 $as_echo "$as_me: loading cache $cache_file" >&6;} case $cache_file in [\\/]* | ?:[\\/]* ) . "$cache_file";; *) . "./$cache_file";; esac fi else { $as_echo "$as_me:${as_lineno-$LINENO}: creating cache $cache_file" >&5 $as_echo "$as_me: creating cache $cache_file" >&6;} >$cache_file fi # Check that the precious variables saved in the cache have kept the same # value. ac_cache_corrupted=false for ac_var in $ac_precious_vars; do eval ac_old_set=\$ac_cv_env_${ac_var}_set eval ac_new_set=\$ac_env_${ac_var}_set eval ac_old_val=\$ac_cv_env_${ac_var}_value eval ac_new_val=\$ac_env_${ac_var}_value case $ac_old_set,$ac_new_set in set,) { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5 $as_echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;} ac_cache_corrupted=: ;; ,set) { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was not set in the previous run" >&5 $as_echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;} ac_cache_corrupted=: ;; ,);; *) if test "x$ac_old_val" != "x$ac_new_val"; then # differences in whitespace do not lead to failure. ac_old_val_w=`echo x $ac_old_val` ac_new_val_w=`echo x $ac_new_val` if test "$ac_old_val_w" != "$ac_new_val_w"; then { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' has changed since the previous run:" >&5 $as_echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;} ac_cache_corrupted=: else { $as_echo "$as_me:${as_lineno-$LINENO}: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&5 $as_echo "$as_me: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&2;} eval $ac_var=\$ac_old_val fi { $as_echo "$as_me:${as_lineno-$LINENO}: former value: \`$ac_old_val'" >&5 $as_echo "$as_me: former value: \`$ac_old_val'" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: current value: \`$ac_new_val'" >&5 $as_echo "$as_me: current value: \`$ac_new_val'" >&2;} fi;; esac # Pass precious variables to config.status. if test "$ac_new_set" = set; then case $ac_new_val in *\'*) ac_arg=$ac_var=`$as_echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;; *) ac_arg=$ac_var=$ac_new_val ;; esac case " $ac_configure_args " in *" '$ac_arg' "*) ;; # Avoid dups. Use of quotes ensures accuracy. *) as_fn_append ac_configure_args " '$ac_arg'" ;; esac fi done if $ac_cache_corrupted; then { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: error: changes in the environment can compromise the build" >&5 $as_echo "$as_me: error: changes in the environment can compromise the build" >&2;} as_fn_error $? "run \`make distclean' and/or \`rm $cache_file' and start over" "$LINENO" 5 fi ## -------------------- ## ## Main body of script. ## ## -------------------- ## ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu ac_config_headers="$ac_config_headers config.h" echo "current directory: `pwd`" echo "command line was: $0 $@" ############################################################################### # # Autoheader stuff # ############################################################################### # This only ever existed in X11R4 and X11R5. #AH_TEMPLATE([HAVE_XIDLE_EXTENSION], # [Define this if you have the XIDLE extension installed. If you # have the XIDLE extension, this is recommended. (You have this # extension if the file /usr/include/X11/extensions/xidle.h # exists.) Turning on this flag lets XScreenSaver work better with # servers which support this extension; but it will still work # with servers which do not suport it, so it's a good idea to # compile in support for it if you can.]) # Using this extension will crash your X server and make fading not work. #AH_TEMPLATE([HAVE_MIT_SAVER_EXTENSION], # [Define this if you have the MIT-SCREEN-SAVER extension # installed. See the caveats about this extension, above. # (It's available if /usr/include/X11/extensions/scrnsaver.h # exists.)]) # This only ever existed on SGI hardware. #AH_TEMPLATE([HAVE_SGI_SAVER_EXTENSION], # [Define this if you have the SGI SCREEN_SAVER extension. This is # standard on Irix systems, and not available elsewhere.]) # This only ever existed on SGI hardware. #AH_TEMPLATE([HAVE_SGI_VC_EXTENSION], # [Define this if you have the SGI-VIDEO-CONTROL extension. This # is standard on Irix systems, and not available elsewhere.]) # After checking to see that --srcdir is correct (which AC_INIT does) # check for some random other files that come later in the tar file, # to make sure everything is here. # for d in utils jwxyz hacks hacks/glx driver ; do f=$srcdir/$d/Makefile.in if test \! -r $f ; then echo "" echo "ERROR: The package is incomplete: $f does not exist." echo " This probably means that your download was truncated." echo "" exit 1 fi done ############################################################################### # # Query AX_PTHREAD, and figure out which compiler gets used. # ############################################################################### ############################################################################### # # Function to figure out how to run the compiler. # ############################################################################### ############################################################################### # # Check for availability of various gcc command-line options. # ############################################################################### # Need to disable Objective C extensions in ANSI C on MacOS X to work # around an Apple-specific gcc bug. # ############################################################################### # # Function to figure out how to disable // comments in ANSI C code. # # (With recent gcc, this is done with "-std=c89". With older gcc, this # is done by passing "-lang-c89" to cpp, by passing "-Wp,-lang-c89" to # gcc. Old gcc doesn't support -std, and new gcc doesn't support -lang. # so much for compatibility!) # # UPDATE: apparently there is NO WAY to tell gcc 3.2.2 to require that # declarations preceed statements, without resorting to "-pedantic". # This means that there is no way to get gcc3 to issue warnings that # ensure that your code complies with the ANSI/ISO C89 standard, without # also drowning in totally useless warnings. Thank you master may I # have another. # # So, I give up, let's just use -pedantic. # ############################################################################### ############################################################################### # # Function to figure out how to create directory trees. # ############################################################################### ############################################################################### # # Function to check whether gettimeofday() exists, and how to call it. # This may define HAVE_GETTIMEOFDAY and GETTIMEOFDAY_TWO_ARGS. # ############################################################################### ############################################################################### # # Function to find perl5 (defines PERL and PERL_VERSION.) # ############################################################################### # M4 sucks!! perl sucks too!! perl_version_cmd='print $]' ############################################################################### # # Function to demand "bc". Losers. # ############################################################################### ############################################################################### # # Functions to check how to do ICMP PING requests. # ############################################################################### ############################################################################### # # Functions to check for various X11 crap. # ############################################################################### # Try and find the app-defaults directory. # It sucks that autoconf doesn't do this already... # ############################################################################### # # Handle the --with-x-app-defaults option HERE # ############################################################################### # Check whether --with-x-app-defaults was given. if test "${with_x_app_defaults+set}" = set; then : withval=$with_x_app_defaults; ac_cv_x_app_defaults="$withval" else eval ac_x_app_defaults="$withval" fi # Random special-cases for X on certain pathological OSes. # You know who you are. # ############################################################################### # # Some utility functions to make checking for X things easier. # ############################################################################### # Like AC_CHECK_HEADER, but it uses the already-computed -I directories. # # Like AC_EGREP_HEADER, but it uses the already-computed -I directories. # # Like AC_TRY_COMPILE, but it uses the already-computed -I directories. # # Like AC_CHECK_LIB, but it uses the already-computed -I and -L directories. # Use this sparingly; it probably doesn't work very well on X programs. # # Like AC_TRY_RUN, but it uses the already-computed -I directories. # (But not the -L directories!) # # Usage: HANDLE_X_PATH_ARG([variable_name], # [--command-line-option], # [descriptive string]) # # All of the --with options take three forms: # # --with-foo (or --with-foo=yes) # --without-foo (or --with-foo=no) # --with-foo=/DIR # # This function, HANDLE_X_PATH_ARG, deals with the /DIR case. When it sees # a directory (string beginning with a slash) it checks to see whether # /DIR/include and /DIR/lib exist, and adds them to $X_CFLAGS and $X_LIBS # as appropriate. # ############################################################################### ############################################################################### # # End of function definitions. Now start actually executing stuff. # ############################################################################### ############################################################################### # WTF! autoconf emits this *way* too late. Do it earlier. test "x$prefix" = xNONE && prefix=$ac_default_prefix test "x$exec_prefix" = xNONE && exec_prefix='${prefix}' # random compiler setup ac_aux_dir= for ac_dir in "$srcdir" "$srcdir/.." "$srcdir/../.."; do if test -f "$ac_dir/install-sh"; then ac_aux_dir=$ac_dir ac_install_sh="$ac_aux_dir/install-sh -c" break elif test -f "$ac_dir/install.sh"; then ac_aux_dir=$ac_dir ac_install_sh="$ac_aux_dir/install.sh -c" break elif test -f "$ac_dir/shtool"; then ac_aux_dir=$ac_dir ac_install_sh="$ac_aux_dir/shtool install -c" break fi done if test -z "$ac_aux_dir"; then as_fn_error $? "cannot find install-sh, install.sh, or shtool in \"$srcdir\" \"$srcdir/..\" \"$srcdir/../..\"" "$LINENO" 5 fi # These three variables are undocumented and unsupported, # and are intended to be withdrawn in a future Autoconf release. # They can cause serious problems if a builder's source tree is in a directory # whose full name contains unusual characters. ac_config_guess="$SHELL $ac_aux_dir/config.guess" # Please don't use this var. ac_config_sub="$SHELL $ac_aux_dir/config.sub" # Please don't use this var. ac_configure="$SHELL $ac_aux_dir/configure" # Please don't use this var. # Make sure we can run config.sub. $SHELL "$ac_aux_dir/config.sub" sun4 >/dev/null 2>&1 || as_fn_error $? "cannot run $SHELL $ac_aux_dir/config.sub" "$LINENO" 5 { $as_echo "$as_me:${as_lineno-$LINENO}: checking build system type" >&5 $as_echo_n "checking build system type... " >&6; } if ${ac_cv_build+:} false; then : $as_echo_n "(cached) " >&6 else ac_build_alias=$build_alias test "x$ac_build_alias" = x && ac_build_alias=`$SHELL "$ac_aux_dir/config.guess"` test "x$ac_build_alias" = x && as_fn_error $? "cannot guess build type; you must specify one" "$LINENO" 5 ac_cv_build=`$SHELL "$ac_aux_dir/config.sub" $ac_build_alias` || as_fn_error $? "$SHELL $ac_aux_dir/config.sub $ac_build_alias failed" "$LINENO" 5 fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_build" >&5 $as_echo "$ac_cv_build" >&6; } case $ac_cv_build in *-*-*) ;; *) as_fn_error $? "invalid value of canonical build" "$LINENO" 5;; esac build=$ac_cv_build ac_save_IFS=$IFS; IFS='-' set x $ac_cv_build shift build_cpu=$1 build_vendor=$2 shift; shift # Remember, the first character of IFS is used to create $*, # except with old shells: build_os=$* IFS=$ac_save_IFS case $build_os in *\ *) build_os=`echo "$build_os" | sed 's/ /-/g'`;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking host system type" >&5 $as_echo_n "checking host system type... " >&6; } if ${ac_cv_host+:} false; then : $as_echo_n "(cached) " >&6 else if test "x$host_alias" = x; then ac_cv_host=$ac_cv_build else ac_cv_host=`$SHELL "$ac_aux_dir/config.sub" $host_alias` || as_fn_error $? "$SHELL $ac_aux_dir/config.sub $host_alias failed" "$LINENO" 5 fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_host" >&5 $as_echo "$ac_cv_host" >&6; } case $ac_cv_host in *-*-*) ;; *) as_fn_error $? "invalid value of canonical host" "$LINENO" 5;; esac host=$ac_cv_host ac_save_IFS=$IFS; IFS='-' set x $ac_cv_host shift host_cpu=$1 host_vendor=$2 shift; shift # Remember, the first character of IFS is used to create $*, # except with old shells: host_os=$* IFS=$ac_save_IFS case $host_os in *\ *) host_os=`echo "$host_os" | sed 's/ /-/g'`;; esac ac_original_cc=$CC ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args. set dummy ${ac_tool_prefix}gcc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_CC="${ac_tool_prefix}gcc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_CC"; then ac_ct_CC=$CC # Extract the first word of "gcc", so it can be a program name with args. set dummy gcc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CC="gcc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 $as_echo "$ac_ct_CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_CC" = x; then CC="" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CC=$ac_ct_CC fi else CC="$ac_cv_prog_CC" fi if test -z "$CC"; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args. set dummy ${ac_tool_prefix}cc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_CC="${ac_tool_prefix}cc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi fi if test -z "$CC"; then # Extract the first word of "cc", so it can be a program name with args. set dummy cc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else ac_prog_rejected=no as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then ac_prog_rejected=yes continue fi ac_cv_prog_CC="cc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS if test $ac_prog_rejected = yes; then # We found a bogon in the path, so make sure we never use it. set dummy $ac_cv_prog_CC shift if test $# != 0; then # We chose a different compiler from the bogus one. # However, it has the same basename, so the bogon will be chosen # first if we set CC to just the basename; use the full file name. shift ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@" fi fi fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$CC"; then if test -n "$ac_tool_prefix"; then for ac_prog in cl.exe do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_CC="$ac_tool_prefix$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$CC" && break done fi if test -z "$CC"; then ac_ct_CC=$CC for ac_prog in cl.exe do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CC="$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 $as_echo "$ac_ct_CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$ac_ct_CC" && break done if test "x$ac_ct_CC" = x; then CC="" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CC=$ac_ct_CC fi fi fi test -z "$CC" && { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "no acceptable C compiler found in \$PATH See \`config.log' for more details" "$LINENO" 5; } # Provide some information about the compiler. $as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5 set X $ac_compile ac_compiler=$2 for ac_option in --version -v -V -qversion; do { { ac_try="$ac_compiler $ac_option >&5" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_compiler $ac_option >&5") 2>conftest.err ac_status=$? if test -s conftest.err; then sed '10a\ ... rest of stderr output deleted ... 10q' conftest.err >conftest.er1 cat conftest.er1 >&5 fi rm -rf conftest.er1 conftest.err $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } done cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF ac_clean_files_save=$ac_clean_files ac_clean_files="$ac_clean_files a.out a.out.dSYM a.exe b.out" # Try to create an executable without -o first, disregard a.out. # It will help us diagnose broken compilers, and finding out an intuition # of exeext. { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C compiler works" >&5 $as_echo_n "checking whether the C compiler works... " >&6; } ac_link_default=`$as_echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'` # The possible output files: ac_files="a.out conftest.exe conftest a.exe a_out.exe b.out conftest.*" ac_rmfiles= for ac_file in $ac_files do case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; * ) ac_rmfiles="$ac_rmfiles $ac_file";; esac done rm -f $ac_rmfiles if { { ac_try="$ac_link_default" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link_default") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then : # Autoconf-2.13 could set the ac_cv_exeext variable to `no'. # So ignore a value of `no', otherwise this would lead to `EXEEXT = no' # in a Makefile. We should not override ac_cv_exeext if it was cached, # so that the user can short-circuit this test for compilers unknown to # Autoconf. for ac_file in $ac_files '' do test -f "$ac_file" || continue case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; [ab].out ) # We found the default executable, but exeext='' is most # certainly right. break;; *.* ) if test "${ac_cv_exeext+set}" = set && test "$ac_cv_exeext" != no; then :; else ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` fi # We set ac_cv_exeext here because the later test for it is not # safe: cross compilers may not add the suffix if given an `-o' # argument, so we may need to know it at that point already. # Even if this section looks crufty: it has the advantage of # actually working. break;; * ) break;; esac done test "$ac_cv_exeext" = no && ac_cv_exeext= else ac_file='' fi if test -z "$ac_file"; then : { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error 77 "C compiler cannot create executables See \`config.log' for more details" "$LINENO" 5; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler default output file name" >&5 $as_echo_n "checking for C compiler default output file name... " >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_file" >&5 $as_echo "$ac_file" >&6; } ac_exeext=$ac_cv_exeext rm -f -r a.out a.out.dSYM a.exe conftest$ac_cv_exeext b.out ac_clean_files=$ac_clean_files_save { $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of executables" >&5 $as_echo_n "checking for suffix of executables... " >&6; } if { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then : # If both `conftest.exe' and `conftest' are `present' (well, observable) # catch `conftest.exe'. For instance with Cygwin, `ls conftest' will # work properly (i.e., refer to `conftest.exe'), while it won't with # `rm'. for ac_file in conftest.exe conftest conftest.*; do test -f "$ac_file" || continue case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` break;; * ) break;; esac done else { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "cannot compute suffix of executables: cannot compile and link See \`config.log' for more details" "$LINENO" 5; } fi rm -rf conftest conftest$ac_cv_exeext { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_exeext" >&5 $as_echo "$ac_cv_exeext" >&6; } rm -rf conftest.$ac_ext EXEEXT=$ac_cv_exeext ac_exeext=$EXEEXT cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { FILE *f = fopen ("conftest.out", "w"); return ferror (f) || fclose (f) != 0; ; return 0; } _ACEOF ac_clean_files="$ac_clean_files conftest.out" # Check that the compiler produces executables we can run. If not, either # the compiler is broken, or we cross compile. { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are cross compiling" >&5 $as_echo_n "checking whether we are cross compiling... " >&6; } if test "$cross_compiling" != yes; then { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } if { ac_try='./conftest$ac_cv_exeext' { { case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_try") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; }; then cross_compiling=no else if test "$cross_compiling" = maybe; then cross_compiling=yes else { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "cannot run C compiled programs. If you meant to cross compile, use \`--host'. See \`config.log' for more details" "$LINENO" 5; } fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $cross_compiling" >&5 $as_echo "$cross_compiling" >&6; } rm -rf conftest.$ac_ext conftest$ac_cv_exeext conftest.out ac_clean_files=$ac_clean_files_save { $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of object files" >&5 $as_echo_n "checking for suffix of object files... " >&6; } if ${ac_cv_objext+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF rm -rf conftest.o conftest.obj 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:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_compile") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then : for ac_file in conftest.o conftest.obj conftest.*; do test -f "$ac_file" || continue; case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM ) ;; *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'` break;; esac done else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "cannot compute suffix of object files: cannot compile See \`config.log' for more details" "$LINENO" 5; } fi rm -rf conftest.$ac_cv_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_objext" >&5 $as_echo "$ac_cv_objext" >&6; } OBJEXT=$ac_cv_objext ac_objext=$OBJEXT { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C compiler" >&5 $as_echo_n "checking whether we are using the GNU C compiler... " >&6; } if ${ac_cv_c_compiler_gnu+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { #ifndef __GNUC__ choke me #endif ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_compiler_gnu=yes else ac_compiler_gnu=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_cv_c_compiler_gnu=$ac_compiler_gnu fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5 $as_echo "$ac_cv_c_compiler_gnu" >&6; } if test $ac_compiler_gnu = yes; then GCC=yes else GCC= fi ac_test_CFLAGS=${CFLAGS+set} ac_save_CFLAGS=$CFLAGS { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5 $as_echo_n "checking whether $CC accepts -g... " >&6; } if ${ac_cv_prog_cc_g+:} false; then : $as_echo_n "(cached) " >&6 else ac_save_c_werror_flag=$ac_c_werror_flag ac_c_werror_flag=yes ac_cv_prog_cc_g=no CFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_prog_cc_g=yes else CFLAGS="" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : else ac_c_werror_flag=$ac_save_c_werror_flag CFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_prog_cc_g=yes fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_c_werror_flag=$ac_save_c_werror_flag fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5 $as_echo "$ac_cv_prog_cc_g" >&6; } if test "$ac_test_CFLAGS" = set; then CFLAGS=$ac_save_CFLAGS elif test $ac_cv_prog_cc_g = yes; then if test "$GCC" = yes; then CFLAGS="-g -O2" else CFLAGS="-g" fi else if test "$GCC" = yes; then CFLAGS="-O2" else CFLAGS= fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C89" >&5 $as_echo_n "checking for $CC option to accept ISO C89... " >&6; } if ${ac_cv_prog_cc_c89+:} false; then : $as_echo_n "(cached) " >&6 else ac_cv_prog_cc_c89=no ac_save_CC=$CC cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include struct stat; /* Most of the following tests are stolen from RCS 5.7's src/conf.sh. */ struct buf { int x; }; FILE * (*rcsopen) (struct buf *, struct stat *, int); static char *e (p, i) char **p; int i; { return p[i]; } static char *f (char * (*g) (char **, int), char **p, ...) { char *s; va_list v; va_start (v,p); s = g (p, va_arg (v,int)); va_end (v); return s; } /* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has function prototypes and stuff, but not '\xHH' hex character constants. These don't provoke an error unfortunately, instead are silently treated as 'x'. The following induces an error, until -std is added to get proper ANSI mode. Curiously '\x00'!='x' always comes out true, for an array size at least. It's necessary to write '\x00'==0 to get something that's true only with -std. */ int osf4_cc_array ['\x00' == 0 ? 1 : -1]; /* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters inside strings and character constants. */ #define FOO(x) 'x' int xlc6_cc_array[FOO(a) == 'x' ? 1 : -1]; int test (int i, double x); struct s1 {int (*f) (int a);}; struct s2 {int (*f) (double a);}; int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int); int argc; char **argv; int main () { return f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1]; ; return 0; } _ACEOF for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std \ -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" do CC="$ac_save_CC $ac_arg" if ac_fn_c_try_compile "$LINENO"; then : ac_cv_prog_cc_c89=$ac_arg fi rm -f core conftest.err conftest.$ac_objext test "x$ac_cv_prog_cc_c89" != "xno" && break done rm -rf conftest.$ac_ext CC=$ac_save_CC fi # AC_CACHE_VAL case "x$ac_cv_prog_cc_c89" in x) { $as_echo "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 $as_echo "none needed" >&6; } ;; xno) { $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 $as_echo "unsupported" >&6; } ;; *) CC="$CC $ac_cv_prog_cc_c89" { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5 $as_echo "$ac_cv_prog_cc_c89" >&6; } ;; esac if test "x$ac_cv_prog_cc_c89" != xno; then : fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu have_pthread=no with_pthread_req=unspecified # AX_PTHREAD is from the GNU Autoconf Archive. # https://savannah.gnu.org/projects/autoconf-archive/ # =========================================================================== # http://www.gnu.org/software/autoconf-archive/ax_pthread.html # =========================================================================== # # SYNOPSIS # # AX_PTHREAD([ACTION-IF-FOUND[, ACTION-IF-NOT-FOUND]]) # # DESCRIPTION # # This macro figures out how to build C programs using POSIX threads. It # sets the PTHREAD_LIBS output variable to the threads library and linker # flags, and the PTHREAD_CFLAGS output variable to any special C compiler # flags that are needed. (The user can also force certain compiler # flags/libs to be tested by setting these environment variables.) # # Also sets PTHREAD_CC to any special C compiler that is needed for # multi-threaded programs (defaults to the value of CC otherwise). (This # is necessary on AIX to use the special cc_r compiler alias.) # # NOTE: You are assumed to not only compile your program with these flags, # but also link it with them as well. e.g. you should link with # $PTHREAD_CC $CFLAGS $PTHREAD_CFLAGS $LDFLAGS ... $PTHREAD_LIBS $LIBS # # If you are only building threads programs, you may wish to use these # variables in your default LIBS, CFLAGS, and CC: # # LIBS="$PTHREAD_LIBS $LIBS" # CFLAGS="$CFLAGS $PTHREAD_CFLAGS" # CC="$PTHREAD_CC" # # In addition, if the PTHREAD_CREATE_JOINABLE thread-attribute constant # has a nonstandard name, defines PTHREAD_CREATE_JOINABLE to that name # (e.g. PTHREAD_CREATE_UNDETACHED on AIX). # # Also HAVE_PTHREAD_PRIO_INHERIT is defined if pthread is found and the # PTHREAD_PRIO_INHERIT symbol is defined when compiling with # PTHREAD_CFLAGS. # # ACTION-IF-FOUND is a list of shell commands to run if a threads library # is found, and ACTION-IF-NOT-FOUND is a list of commands to run it if it # is not found. If ACTION-IF-FOUND is not specified, the default action # will define HAVE_PTHREAD. # # Please let the authors know if this macro fails on any platform, or if # you have any other suggestions or comments. This macro was based on work # by SGJ on autoconf scripts for FFTW (http://www.fftw.org/) (with help # from M. Frigo), as well as ac_pthread and hb_pthread macros posted by # Alejandro Forero Cuervo to the autoconf macro repository. We are also # grateful for the helpful feedback of numerous users. # # Updated for Autoconf 2.68 by Daniel Richard G. # # LICENSE # # Copyright (c) 2008 Steven G. Johnson # Copyright (c) 2011 Daniel Richard G. # # This program is free software: you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by the # Free Software Foundation, either version 3 of the License, or (at your # option) any later version. # # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General # Public License for more details. # # You should have received a copy of the GNU General Public License along # with this program. If not, see . # # As a special exception, the respective Autoconf Macro's copyright owner # gives unlimited permission to copy, distribute and modify the configure # scripts that are the output of Autoconf when processing the Macro. You # need not follow the terms of the GNU General Public License when using # or distributing such scripts, even though portions of the text of the # Macro appear in them. The GNU General Public License (GPL) does govern # all other use of the material that constitutes the Autoconf Macro. # # This special exception to the GPL applies to versions of the Autoconf # Macro released by the Autoconf Archive. When you make and distribute a # modified version of the Autoconf Macro, you may extend this special # exception to the GPL to apply to your modified version as well. #serial 21 # This is what autoupdate's m4 run will expand. It fires # the warning (with _au_warn_XXX), outputs it into the # updated configure.ac (with AC_DIAGNOSE), and then outputs # the replacement expansion. # This is an auxiliary macro that is also run when # autoupdate runs m4. It simply calls m4_warning, but # we need a wrapper so that each warning is emitted only # once. We break the quoting in m4_warning's argument in # order to expand this macro's arguments, not AU_DEFUN's. # Finally, this is the expansion that is picked up by # autoconf. It tells the user to run autoupdate, and # then outputs the replacement expansion. We do not care # about autoupdate's warning because that contains # information on what to do *after* running autoupdate. # This affects CC, LIBS, and CFLAGS, instead of defining new variables. # Check whether --with-pthread was given. if test "${with_pthread+set}" = set; then : withval=$with_pthread; with_pthread="$withval"; with_pthread_req="$withval" else with_pthread=yes fi if test "$with_pthread" = yes; then # AX_PTHREAD might want a different compiler. ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu ax_pthread_ok=no # We used to check for pthread.h first, but this fails if pthread.h # requires special compiler flags (e.g. on True64 or Sequent). # It gets checked for in the link test anyway. # First of all, check if the user has set any of the PTHREAD_LIBS, # etcetera environment variables, and if threads linking works using # them: if test x"$PTHREAD_LIBS$PTHREAD_CFLAGS" != x; then save_CFLAGS="$CFLAGS" CFLAGS="$CFLAGS $PTHREAD_CFLAGS" save_LIBS="$LIBS" LIBS="$PTHREAD_LIBS $LIBS" { $as_echo "$as_me:${as_lineno-$LINENO}: checking for pthread_join in LIBS=$PTHREAD_LIBS with CFLAGS=$PTHREAD_CFLAGS" >&5 $as_echo_n "checking for pthread_join in LIBS=$PTHREAD_LIBS with CFLAGS=$PTHREAD_CFLAGS... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char pthread_join (); int main () { return pthread_join (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ax_pthread_ok=yes fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_pthread_ok" >&5 $as_echo "$ax_pthread_ok" >&6; } if test x"$ax_pthread_ok" = xno; then PTHREAD_LIBS="" PTHREAD_CFLAGS="" fi LIBS="$save_LIBS" CFLAGS="$save_CFLAGS" fi # We must check for the threads library under a number of different # names; the ordering is very important because some systems # (e.g. DEC) have both -lpthread and -lpthreads, where one of the # libraries is broken (non-POSIX). # Create a list of thread flags to try. Items starting with a "-" are # C compiler flags, and other items are library names, except for "none" # which indicates that we try without any flags at all, and "pthread-config" # which is a program returning the flags for the Pth emulation library. ax_pthread_flags="pthreads none -Kthread -kthread lthread -pthread -pthreads -mthreads pthread --thread-safe -mt pthread-config" # The ordering *is* (sometimes) important. Some notes on the # individual items follow: # pthreads: AIX (must check this before -lpthread) # none: in case threads are in libc; should be tried before -Kthread and # other compiler flags to prevent continual compiler warnings # -Kthread: Sequent (threads in libc, but -Kthread needed for pthread.h) # -kthread: FreeBSD kernel threads (preferred to -pthread since SMP-able) # lthread: LinuxThreads port on FreeBSD (also preferred to -pthread) # -pthread: Linux/gcc (kernel threads), BSD/gcc (userland threads) # -pthreads: Solaris/gcc # -mthreads: Mingw32/gcc, Lynx/gcc # -mt: Sun Workshop C (may only link SunOS threads [-lthread], but it # doesn't hurt to check since this sometimes defines pthreads too; # also defines -D_REENTRANT) # ... -mt is also the pthreads flag for HP/aCC # pthread: Linux, etcetera # --thread-safe: KAI C++ # pthread-config: use pthread-config program (for GNU Pth library) case ${host_os} in solaris*) # On Solaris (at least, for some versions), libc contains stubbed # (non-functional) versions of the pthreads routines, so link-based # tests will erroneously succeed. (We need to link with -pthreads/-mt/ # -lpthread.) (The stubs are missing pthread_cleanup_push, or rather # a function called by this macro, so we could check for that, but # who knows whether they'll stub that too in a future libc.) So, # we'll just look for -pthreads and -lpthread first: ax_pthread_flags="-pthreads pthread -mt -pthread $ax_pthread_flags" ;; darwin*) ax_pthread_flags="-pthread $ax_pthread_flags" ;; esac # Clang doesn't consider unrecognized options an error unless we specify # -Werror. We throw in some extra Clang-specific options to ensure that # this doesn't happen for GCC, which also accepts -Werror. { $as_echo "$as_me:${as_lineno-$LINENO}: checking if compiler needs -Werror to reject unknown flags" >&5 $as_echo_n "checking if compiler needs -Werror to reject unknown flags... " >&6; } save_CFLAGS="$CFLAGS" ax_pthread_extra_flags="-Werror" CFLAGS="$CFLAGS $ax_pthread_extra_flags -Wunknown-warning-option -Wsizeof-array-argument" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int foo(void); int main () { foo() ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } else ax_pthread_extra_flags= { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext CFLAGS="$save_CFLAGS" if test x"$ax_pthread_ok" = xno; then for flag in $ax_pthread_flags; do case $flag in none) { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether pthreads work without any flags" >&5 $as_echo_n "checking whether pthreads work without any flags... " >&6; } ;; -*) { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether pthreads work with $flag" >&5 $as_echo_n "checking whether pthreads work with $flag... " >&6; } PTHREAD_CFLAGS="$flag" ;; pthread-config) # Extract the first word of "pthread-config", so it can be a program name with args. set dummy pthread-config; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ax_pthread_config+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ax_pthread_config"; then ac_cv_prog_ax_pthread_config="$ax_pthread_config" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ax_pthread_config="yes" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS test -z "$ac_cv_prog_ax_pthread_config" && ac_cv_prog_ax_pthread_config="no" fi fi ax_pthread_config=$ac_cv_prog_ax_pthread_config if test -n "$ax_pthread_config"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_pthread_config" >&5 $as_echo "$ax_pthread_config" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test x"$ax_pthread_config" = xno; then continue; fi PTHREAD_CFLAGS="`pthread-config --cflags`" PTHREAD_LIBS="`pthread-config --ldflags` `pthread-config --libs`" ;; *) { $as_echo "$as_me:${as_lineno-$LINENO}: checking for the pthreads library -l$flag" >&5 $as_echo_n "checking for the pthreads library -l$flag... " >&6; } PTHREAD_LIBS="-l$flag" ;; esac save_LIBS="$LIBS" save_CFLAGS="$CFLAGS" LIBS="$PTHREAD_LIBS $LIBS" CFLAGS="$CFLAGS $PTHREAD_CFLAGS $ax_pthread_extra_flags" # Check for various functions. We must include pthread.h, # since some functions may be macros. (On the Sequent, we # need a special flag -Kthread to make this header compile.) # We check for pthread_join because it is in -lpthread on IRIX # while pthread_create is in libc. We check for pthread_attr_init # due to DEC craziness with -lpthreads. We check for # pthread_cleanup_push because it is one of the few pthread # functions on Solaris that doesn't have a non-functional libc stub. # We try pthread_create on general principles. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include static void routine(void *a) { a = 0; } static void *start_routine(void *a) { return a; } int main () { pthread_t th; pthread_attr_t attr; pthread_create(&th, 0, start_routine, 0); pthread_join(th, 0); pthread_attr_init(&attr); pthread_cleanup_push(routine, 0); pthread_cleanup_pop(0) /* ; */ ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ax_pthread_ok=yes fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS="$save_LIBS" CFLAGS="$save_CFLAGS" { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_pthread_ok" >&5 $as_echo "$ax_pthread_ok" >&6; } if test "x$ax_pthread_ok" = xyes; then break; fi PTHREAD_LIBS="" PTHREAD_CFLAGS="" done fi # Various other checks: if test "x$ax_pthread_ok" = xyes; then save_LIBS="$LIBS" LIBS="$PTHREAD_LIBS $LIBS" save_CFLAGS="$CFLAGS" CFLAGS="$CFLAGS $PTHREAD_CFLAGS" # Detect AIX lossage: JOINABLE attribute is called UNDETACHED. { $as_echo "$as_me:${as_lineno-$LINENO}: checking for joinable pthread attribute" >&5 $as_echo_n "checking for joinable pthread attribute... " >&6; } attr_name=unknown for attr in PTHREAD_CREATE_JOINABLE PTHREAD_CREATE_UNDETACHED; do cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { int attr = $attr; return attr /* ; */ ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : attr_name=$attr; break fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext done { $as_echo "$as_me:${as_lineno-$LINENO}: result: $attr_name" >&5 $as_echo "$attr_name" >&6; } if test "$attr_name" != PTHREAD_CREATE_JOINABLE; then cat >>confdefs.h <<_ACEOF #define PTHREAD_CREATE_JOINABLE $attr_name _ACEOF fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking if more special flags are required for pthreads" >&5 $as_echo_n "checking if more special flags are required for pthreads... " >&6; } flag=no case ${host_os} in aix* | freebsd* | darwin*) flag="-D_THREAD_SAFE";; osf* | hpux*) flag="-D_REENTRANT";; solaris*) if test "$GCC" = "yes"; then flag="-D_REENTRANT" else # TODO: What about Clang on Solaris? flag="-mt -D_REENTRANT" fi ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: result: $flag" >&5 $as_echo "$flag" >&6; } if test "x$flag" != xno; then PTHREAD_CFLAGS="$flag $PTHREAD_CFLAGS" fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for PTHREAD_PRIO_INHERIT" >&5 $as_echo_n "checking for PTHREAD_PRIO_INHERIT... " >&6; } if ${ax_cv_PTHREAD_PRIO_INHERIT+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { int i = PTHREAD_PRIO_INHERIT; ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ax_cv_PTHREAD_PRIO_INHERIT=yes else ax_cv_PTHREAD_PRIO_INHERIT=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_cv_PTHREAD_PRIO_INHERIT" >&5 $as_echo "$ax_cv_PTHREAD_PRIO_INHERIT" >&6; } if test "x$ax_cv_PTHREAD_PRIO_INHERIT" = "xyes"; then : $as_echo "#define HAVE_PTHREAD_PRIO_INHERIT 1" >>confdefs.h fi LIBS="$save_LIBS" CFLAGS="$save_CFLAGS" # More AIX lossage: compile with *_r variant if test "x$GCC" != xyes; then case $host_os in aix*) case "x/$CC" in #( x*/c89|x*/c89_128|x*/c99|x*/c99_128|x*/cc|x*/cc128|x*/xlc|x*/xlc_v6|x*/xlc128|x*/xlc128_v6) : #handle absolute path differently from PATH based program lookup case "x$CC" in #( x/*) : if as_fn_executable_p ${CC}_r; then : PTHREAD_CC="${CC}_r" fi ;; #( *) : for ac_prog in ${CC}_r do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_PTHREAD_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$PTHREAD_CC"; then ac_cv_prog_PTHREAD_CC="$PTHREAD_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_PTHREAD_CC="$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi PTHREAD_CC=$ac_cv_prog_PTHREAD_CC if test -n "$PTHREAD_CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PTHREAD_CC" >&5 $as_echo "$PTHREAD_CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$PTHREAD_CC" && break done test -n "$PTHREAD_CC" || PTHREAD_CC="$CC" ;; esac ;; #( *) : ;; esac ;; esac fi fi test -n "$PTHREAD_CC" || PTHREAD_CC="$CC" # Finally, execute ACTION-IF-FOUND/ACTION-IF-NOT-FOUND: if test x"$ax_pthread_ok" = xyes; then if test "$CC" = "$PTHREAD_CC" -o -z "$ac_original_cc"; then have_pthread=yes else ac_prog_cc_no_pthread=yes fi : else ax_pthread_ok=no fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu if test "$have_pthread" = yes; then $as_echo "#define HAVE_PTHREAD 1" >>confdefs.h CC=$PTHREAD_CC fi fi # Needs ac_original_cc. if test -z "$GCC"; then # not using GCC { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to request ANSI compilation" >&5 $as_echo_n "checking how to request ANSI compilation... " >&6; } case "$host" in *-hpux* ) { $as_echo "$as_me:${as_lineno-$LINENO}: result: HPUX: adding -Ae" >&5 $as_echo "HPUX: adding -Ae" >&6; } CC="$CC -Ae" ;; *-aix* ) { $as_echo "$as_me:${as_lineno-$LINENO}: result: AIX: adding -qlanglvl=ansi -qhalt=e" >&5 $as_echo "AIX: adding -qlanglvl=ansi -qhalt=e" >&6; } CC="$CC -qlanglvl=ansi -qhalt=e" ;; *-dec-* ) { $as_echo "$as_me:${as_lineno-$LINENO}: result: DEC: adding -std1 -ieee" >&5 $as_echo "DEC: adding -std1 -ieee" >&6; } CC="$CC -std1" ;; *) { $as_echo "$as_me:${as_lineno-$LINENO}: result: no idea" >&5 $as_echo "no idea" >&6; } ;; esac else # using GCC case "$host" in *-solaris*) { $as_echo "$as_me:${as_lineno-$LINENO}: result: Solaris: adding -D__EXTENSIONS__" >&5 $as_echo "Solaris: adding -D__EXTENSIONS__" >&6; } CC="$CC -D__EXTENSIONS__" ;; esac fi OBJCC="$CC" { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the compiler works on ANSI C" >&5 $as_echo_n "checking whether the compiler works on ANSI C... " >&6; } if test "$cross_compiling" = yes; then : as_fn_error $? "Couldn't build even a trivial ANSI C program: check CC." "$LINENO" 5 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ main(int ac, char **av) { return 0; } _ACEOF if ac_fn_c_try_run "$LINENO"; then : { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } as_fn_error $? "Couldn't build even a trivial ANSI C program: check CC." "$LINENO" 5 fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi if test -n "$GCC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: Turning on gcc compiler warnings." >&5 $as_echo "Turning on gcc compiler warnings." >&6; } CC="$CC -pedantic -Wall -Wstrict-prototypes -Wnested-externs -Wmissing-prototypes" OBJCC="$OBJCC -Wall" # As of gcc 3.4, we have "-Wdeclaration-after-statement" # and so perhaps now we can do without -pedantic? else case "$host" in *-irix5* |*-irix6.0-3* ) { $as_echo "$as_me:${as_lineno-$LINENO}: result: Turning on SGI compiler warnings." >&5 $as_echo "Turning on SGI compiler warnings." >&6; } CC="$CC -fullwarn -use_readonly_const -rdata_shared -g3" ;; # *-dec-osf* ) # if test -z "$GCC"; then # AC_MSG_RESULT(Turning on DEC C compiler warnings.) # CC="$CC -migrate -w0 -verbose -warnprotos" # fi # ;; esac fi if test -n "$GCC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether gcc accepts -Wno-overlength-strings" >&5 $as_echo_n "checking whether gcc accepts -Wno-overlength-strings... " >&6; } if ${ac_cv_gcc_accepts_no_overlength+:} false; then : $as_echo_n "(cached) " >&6 else rm -rf conftest.$ac_ext touch conftest.$ac_ext if ( ( gcc -c -Wno-overlength-strings conftest.$ac_ext -o/dev/null >/dev/null ) 2>&1 | \ grep unrecognized >/dev/null ); then ac_cv_gcc_accepts_no_overlength=no else ac_cv_gcc_accepts_no_overlength=yes CC="$CC -Wno-overlength-strings" fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_gcc_accepts_no_overlength" >&5 $as_echo "$ac_cv_gcc_accepts_no_overlength" >&6; } ac_gcc_accepts_no_overlength="$ac_cv_gcc_accepts_no_overlength" fi if test -n "$GCC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether gcc accepts -Wdeclaration-after-statement" >&5 $as_echo_n "checking whether gcc accepts -Wdeclaration-after-statement... " >&6; } if ${ac_cv_gcc_accepts_no_decl_after+:} false; then : $as_echo_n "(cached) " >&6 else rm -rf conftest.$ac_ext touch conftest.$ac_ext if ( ( gcc -c -Wdeclaration-after-statement conftest.$ac_ext -o/dev/null >/dev/null ) 2>&1 | \ grep unrecognized >/dev/null ); then ac_cv_gcc_accepts_no_decl_after=no else ac_cv_gcc_accepts_no_decl_after=yes CC="$CC -Wdeclaration-after-statement" fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_gcc_accepts_no_decl_after" >&5 $as_echo "$ac_cv_gcc_accepts_no_decl_after" >&6; } ac_gcc_accepts_no_decl_after="$ac_cv_gcc_accepts_no_decl_after" fi if test -n "$GCC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether gcc accepts -no-cpp-precomp" >&5 $as_echo_n "checking whether gcc accepts -no-cpp-precomp... " >&6; } if ${ac_cv_gcc_accepts_no_cpp_precomp+:} false; then : $as_echo_n "(cached) " >&6 else rm -rf conftest.$ac_ext touch conftest.$ac_ext if ( ( gcc -c -no-cpp-precomp conftest.$ac_ext -o/dev/null >/dev/null ) 2>&1 | \ grep unrecognized >/dev/null ); then ac_cv_gcc_accepts_no_cpp_precomp=no else ac_cv_gcc_accepts_no_cpp_precomp=yes CC="$CC -no-cpp-precomp" fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_gcc_accepts_no_cpp_precomp" >&5 $as_echo "$ac_cv_gcc_accepts_no_cpp_precomp" >&6; } ac_gcc_accepts_no_cpp_precomp="$ac_cv_gcc_accepts_no_cpp_precomp" fi if test -n "$GCC"; then case "$host" in *-darwin* ) # Fucking Apple let // comments sneak into OpenGL headers, so # we *must* allow // comments when compiling on Mac OS 10.6! FUCK! ;; *) if test -n "$GCC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether gcc accepts -std=c89" >&5 $as_echo_n "checking whether gcc accepts -std=c89... " >&6; } if ${ac_cv_gcc_accepts_std+:} false; then : $as_echo_n "(cached) " >&6 else rm -rf conftest.$ac_ext touch conftest.$ac_ext if ( ( gcc -c -std=c89 conftest.$ac_ext -o/dev/null >/dev/null ) 2>&1 | \ grep unrecognized >/dev/null ); then ac_cv_gcc_accepts_std=no else ac_cv_gcc_accepts_std=yes CC="$CC -std=c89" fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_gcc_accepts_std" >&5 $as_echo "$ac_cv_gcc_accepts_std" >&6; } ac_gcc_accepts_std="$ac_cv_gcc_accepts_std" fi ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: result: Disabling C++ comments in ANSI C code." >&5 $as_echo "Disabling C++ comments in ANSI C code." >&6; } # # The reason that // comments are banned from xscreensaver is that gcc is # basically the only compiler in the world that supports them in C code. # All other vendors support them only in their C++ compilers, not in their # ANSI C compilers. This means that it's a portability problem: every time # these comments have snuck into the xscreensaver source code, I've gotten # complaints about it the next day. So we turn off support for them in gcc # as well to prevent them from accidentially slipping in. # if test "$ac_gcc_accepts_std" = yes ; then # # -std=c89 defines __STRICT_ANSI__, which we don't want. # (That appears to be the only additional preprocessor symbol # it defines, in addition to the syntax changes it makes.) # # -std=gnu89 is no good, because // comments were a GNU extension # before they were in the ANSI C 99 spec... (gcc 2.96 permits // # with -std=gnu89 but not with -std=c89.) # # $CC already contains "-std=c89" via AC_GCC_ACCEPTS_STD CC="$CC -U__STRICT_ANSI__" # else # # The old way: # CC="$CC -Wp,-lang-c89" fi fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to run the C preprocessor" >&5 $as_echo_n "checking how to run the C preprocessor... " >&6; } # On Suns, sometimes $CPP names a directory. if test -n "$CPP" && test -d "$CPP"; then CPP= fi if test -z "$CPP"; then if ${ac_cv_prog_CPP+:} false; then : $as_echo_n "(cached) " >&6 else # Double quotes because CPP needs to be expanded for CPP in "$CC -E" "$CC -E -traditional-cpp" "/lib/cpp" do ac_preproc_ok=false for ac_c_preproc_warn_flag in '' yes do # Use a header file that comes with gcc, so configuring glibc # with a fresh cross-compiler works. # Prefer to if __STDC__ is defined, since # exists even on freestanding compilers. # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. "Syntax error" is here to catch this case. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef __STDC__ # include #else # include #endif Syntax error _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : else # Broken: fails on valid input. continue fi rm -rf conftest.err conftest.i conftest.$ac_ext # OK, works on sane cases. Now check whether nonexistent headers # can be detected and how. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : # Broken: success on invalid input. continue else # Passes both tests. ac_preproc_ok=: break fi rm -rf conftest.err conftest.i conftest.$ac_ext done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. rm -rf conftest.i conftest.err conftest.$ac_ext if $ac_preproc_ok; then : break fi done ac_cv_prog_CPP=$CPP fi CPP=$ac_cv_prog_CPP else ac_cv_prog_CPP=$CPP fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CPP" >&5 $as_echo "$CPP" >&6; } ac_preproc_ok=false for ac_c_preproc_warn_flag in '' yes do # Use a header file that comes with gcc, so configuring glibc # with a fresh cross-compiler works. # Prefer to if __STDC__ is defined, since # exists even on freestanding compilers. # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. "Syntax error" is here to catch this case. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef __STDC__ # include #else # include #endif Syntax error _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : else # Broken: fails on valid input. continue fi rm -rf conftest.err conftest.i conftest.$ac_ext # OK, works on sane cases. Now check whether nonexistent headers # can be detected and how. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : # Broken: success on invalid input. continue else # Passes both tests. ac_preproc_ok=: break fi rm -rf conftest.err conftest.i conftest.$ac_ext done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. rm -rf conftest.i conftest.err conftest.$ac_ext if $ac_preproc_ok; then : else { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "C preprocessor \"$CPP\" fails sanity check See \`config.log' for more details" "$LINENO" 5; } fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu { $as_echo "$as_me:${as_lineno-$LINENO}: checking for an ANSI C-conforming const" >&5 $as_echo_n "checking for an ANSI C-conforming const... " >&6; } if ${ac_cv_c_const+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { #ifndef __cplusplus /* Ultrix mips cc rejects this sort of thing. */ typedef int charset[2]; const charset cs = { 0, 0 }; /* SunOS 4.1.1 cc rejects this. */ char const *const *pcpcc; char **ppc; /* NEC SVR4.0.2 mips cc rejects this. */ struct point {int x, y;}; static struct point const zero = {0,0}; /* AIX XL C 1.02.0.0 rejects this. It does not let you subtract one const X* pointer from another in an arm of an if-expression whose if-part is not a constant expression */ const char *g = "string"; pcpcc = &g + (g ? g-g : 0); /* HPUX 7.0 cc rejects these. */ ++pcpcc; ppc = (char**) pcpcc; pcpcc = (char const *const *) ppc; { /* SCO 3.2v4 cc rejects this sort of thing. */ char tx; char *t = &tx; char const *s = 0 ? (char *) 0 : (char const *) 0; *t++ = 0; if (s) return 0; } { /* Someone thinks the Sun supposedly-ANSI compiler will reject this. */ int x[] = {25, 17}; const int *foo = &x[0]; ++foo; } { /* Sun SC1.0 ANSI compiler rejects this -- but not the above. */ typedef const int *iptr; iptr p = 0; ++p; } { /* AIX XL C 1.02.0.0 rejects this sort of thing, saying "k.c", line 2.27: 1506-025 (S) Operand must be a modifiable lvalue. */ struct s { int j; const int *ap[3]; } bx; struct s *b = &bx; b->j = 5; } { /* ULTRIX-32 V3.1 (Rev 9) vcc rejects this */ const int foo = 10; if (!foo) return 0; } return !cs[0] && !zero.x; #endif ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_c_const=yes else ac_cv_c_const=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_const" >&5 $as_echo "$ac_cv_c_const" >&6; } if test $ac_cv_c_const = no; then $as_echo "#define const /**/" >>confdefs.h fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for inline" >&5 $as_echo_n "checking for inline... " >&6; } if ${ac_cv_c_inline+:} false; then : $as_echo_n "(cached) " >&6 else ac_cv_c_inline=no for ac_kw in inline __inline__ __inline; do cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifndef __cplusplus typedef int foo_t; static $ac_kw foo_t static_foo () {return 0; } $ac_kw foo_t foo () {return 0; } #endif _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_c_inline=$ac_kw fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext test "$ac_cv_c_inline" != no && break done fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_inline" >&5 $as_echo "$ac_cv_c_inline" >&6; } case $ac_cv_c_inline in inline | yes) ;; *) case $ac_cv_c_inline in no) ac_val=;; *) ac_val=$ac_cv_c_inline;; esac cat >>confdefs.h <<_ACEOF #ifndef __cplusplus #define inline $ac_val #endif _ACEOF ;; esac ac_bc_result=`echo 6+9 | bc 2>/dev/null` { $as_echo "$as_me:${as_lineno-$LINENO}: checking for bc" >&5 $as_echo_n "checking for bc... " >&6; } if test "$ac_bc_result" = "15" ; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } echo '' as_fn_error $? "Your system doesn't have \"bc\", which has been a standard part of Unix since the 1970s. Come back when your vendor has grown a clue." "$LINENO" 5 fi # stuff for Makefiles # Find a good install program. We prefer a C program (faster), # so one script is as good as another. But avoid the broken or # incompatible versions: # SysV /etc/install, /usr/sbin/install # SunOS /usr/etc/install # IRIX /sbin/install # AIX /bin/install # AmigaOS /C/install, which installs bootblocks on floppy discs # AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag # AFS /usr/afsws/bin/install, which mishandles nonexistent args # SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff" # OS/2's system install, which has a completely different semantic # ./install, which can be erroneously created by make from ./install.sh. # Reject install programs that cannot install multiple files. { $as_echo "$as_me:${as_lineno-$LINENO}: checking for a BSD-compatible install" >&5 $as_echo_n "checking for a BSD-compatible install... " >&6; } if test -z "$INSTALL"; then if ${ac_cv_path_install+:} false; then : $as_echo_n "(cached) " >&6 else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. # Account for people who put trailing slashes in PATH elements. case $as_dir/ in #(( ./ | .// | /[cC]/* | \ /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \ ?:[\\/]os2[\\/]install[\\/]* | ?:[\\/]OS2[\\/]INSTALL[\\/]* | \ /usr/ucb/* ) ;; *) # OSF1 and SCO ODT 3.0 have their own names for install. # Don't use installbsd from OSF since it installs stuff as root # by default. for ac_prog in ginstall scoinst install; do for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_prog$ac_exec_ext"; then if test $ac_prog = install && grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then # AIX install. It has an incompatible calling convention. : elif test $ac_prog = install && grep pwplus "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then # program-specific install script used by HP pwplus--don't use. : else rm -rf conftest.one conftest.two conftest.dir echo one > conftest.one echo two > conftest.two mkdir conftest.dir if "$as_dir/$ac_prog$ac_exec_ext" -c conftest.one conftest.two "`pwd`/conftest.dir" && test -s conftest.one && test -s conftest.two && test -s conftest.dir/conftest.one && test -s conftest.dir/conftest.two then ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c" break 3 fi fi fi done done ;; esac done IFS=$as_save_IFS rm -rf conftest.one conftest.two conftest.dir fi if test "${ac_cv_path_install+set}" = set; then INSTALL=$ac_cv_path_install else # As a last resort, use the slow shell script. Don't cache a # value for INSTALL within a source directory, because that will # break other packages using the cache if that directory is # removed, or if the value is a relative name. INSTALL=$ac_install_sh fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $INSTALL" >&5 $as_echo "$INSTALL" >&6; } # Use test -z because SunOS4 sh mishandles braces in ${var-val}. # It thinks the first close brace ends the variable substitution. test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}' test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}' test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644' { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether \"\${INSTALL} -d\" creates intermediate directories" >&5 $as_echo_n "checking whether \"\${INSTALL} -d\" creates intermediate directories... " >&6; } if ${ac_cv_install_d_creates_dirs+:} false; then : $as_echo_n "(cached) " >&6 else ac_cv_install_d_creates_dirs=no rm -rf conftestdir if mkdir conftestdir; then cd conftestdir 2>/dev/null ${INSTALL} -d `pwd`/dir1/dir2 >/dev/null 2>&1 if test -d dir1/dir2/. ; then ac_cv_install_d_creates_dirs=yes fi cd .. 2>/dev/null rm -rf conftestdir fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_install_d_creates_dirs" >&5 $as_echo "$ac_cv_install_d_creates_dirs" >&6; } if test "$ac_cv_install_d_creates_dirs" = no ; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether \"mkdir -p\" creates intermediate directories" >&5 $as_echo_n "checking whether \"mkdir -p\" creates intermediate directories... " >&6; } if ${ac_cv_mkdir_p_creates_dirs+:} false; then : $as_echo_n "(cached) " >&6 else ac_cv_mkdir_p_creates_dirs=no rm -rf conftestdir if mkdir conftestdir; then cd conftestdir 2>/dev/null mkdir -p dir1/dir2 >/dev/null 2>&1 if test -d dir1/dir2/. ; then ac_cv_mkdir_p_creates_dirs=yes fi cd .. 2>/dev/null rm -rf conftestdir fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_mkdir_p_creates_dirs" >&5 $as_echo "$ac_cv_mkdir_p_creates_dirs" >&6; } fi if test "$ac_cv_install_d_creates_dirs" = yes ; then INSTALL_DIRS='${INSTALL} -d' elif test "$ac_cv_mkdir_p_creates_dirs" = yes ; then INSTALL_DIRS='mkdir -p' else # any other ideas? INSTALL_DIRS='${INSTALL} -d' fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ${MAKE-make} sets \$(MAKE)" >&5 $as_echo_n "checking whether ${MAKE-make} sets \$(MAKE)... " >&6; } set x ${MAKE-make} ac_make=`$as_echo "$2" | sed 's/+/p/g; s/[^a-zA-Z0-9_]/_/g'` if eval \${ac_cv_prog_make_${ac_make}_set+:} false; then : $as_echo_n "(cached) " >&6 else cat >conftest.make <<\_ACEOF SHELL = /bin/sh all: @echo '@@@%%%=$(MAKE)=@@@%%%' _ACEOF # GNU make sometimes prints "make[1]: Entering ...", which would confuse us. case `${MAKE-make} -f conftest.make 2>/dev/null` in *@@@%%%=?*=@@@%%%*) eval ac_cv_prog_make_${ac_make}_set=yes;; *) eval ac_cv_prog_make_${ac_make}_set=no;; esac rm -rf conftest.make fi if eval test \$ac_cv_prog_make_${ac_make}_set = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } SET_MAKE= else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } SET_MAKE="MAKE=${MAKE-make}" fi # By default, autoconf sets INSTALL_SCRIPT to '${INSTALL_PROGRAM}'. # That's wrong: it should be set to '${INSTALL}', so that one can # implement the "install-strip" target properly (strip executables, # but do not try to strip scripts.) # INSTALL_SCRIPT='${INSTALL}' # random libc stuff { $as_echo "$as_me:${as_lineno-$LINENO}: checking for grep that handles long lines and -e" >&5 $as_echo_n "checking for grep that handles long lines and -e... " >&6; } if ${ac_cv_path_GREP+:} false; then : $as_echo_n "(cached) " >&6 else if test -z "$GREP"; then ac_path_GREP_found=false # Loop through the user's path and test for each of PROGNAME-LIST as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_prog in grep ggrep; do for ac_exec_ext in '' $ac_executable_extensions; do ac_path_GREP="$as_dir/$ac_prog$ac_exec_ext" as_fn_executable_p "$ac_path_GREP" || continue # Check for GNU ac_path_GREP and select it if it is found. # Check for GNU $ac_path_GREP case `"$ac_path_GREP" --version 2>&1` in *GNU*) ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_found=:;; *) ac_count=0 $as_echo_n 0123456789 >"conftest.in" while : do cat "conftest.in" "conftest.in" >"conftest.tmp" mv "conftest.tmp" "conftest.in" cp "conftest.in" "conftest.nl" $as_echo 'GREP' >> "conftest.nl" "$ac_path_GREP" -e 'GREP$' -e '-(cannot match)-' < "conftest.nl" >"conftest.out" 2>/dev/null || break diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break as_fn_arith $ac_count + 1 && ac_count=$as_val if test $ac_count -gt ${ac_path_GREP_max-0}; then # Best one so far, save it but keep looking for a better one ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_max=$ac_count fi # 10*(2^10) chars as input seems more than enough test $ac_count -gt 10 && break done rm -rf conftest.in conftest.tmp conftest.nl conftest.out;; esac $ac_path_GREP_found && break 3 done done done IFS=$as_save_IFS if test -z "$ac_cv_path_GREP"; then as_fn_error $? "no acceptable grep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 fi else ac_cv_path_GREP=$GREP fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_GREP" >&5 $as_echo "$ac_cv_path_GREP" >&6; } GREP="$ac_cv_path_GREP" { $as_echo "$as_me:${as_lineno-$LINENO}: checking for egrep" >&5 $as_echo_n "checking for egrep... " >&6; } if ${ac_cv_path_EGREP+:} false; then : $as_echo_n "(cached) " >&6 else if echo a | $GREP -E '(a|b)' >/dev/null 2>&1 then ac_cv_path_EGREP="$GREP -E" else if test -z "$EGREP"; then ac_path_EGREP_found=false # Loop through the user's path and test for each of PROGNAME-LIST as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_prog in egrep; do for ac_exec_ext in '' $ac_executable_extensions; do ac_path_EGREP="$as_dir/$ac_prog$ac_exec_ext" as_fn_executable_p "$ac_path_EGREP" || continue # Check for GNU ac_path_EGREP and select it if it is found. # Check for GNU $ac_path_EGREP case `"$ac_path_EGREP" --version 2>&1` in *GNU*) ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_found=:;; *) ac_count=0 $as_echo_n 0123456789 >"conftest.in" while : do cat "conftest.in" "conftest.in" >"conftest.tmp" mv "conftest.tmp" "conftest.in" cp "conftest.in" "conftest.nl" $as_echo 'EGREP' >> "conftest.nl" "$ac_path_EGREP" 'EGREP$' < "conftest.nl" >"conftest.out" 2>/dev/null || break diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break as_fn_arith $ac_count + 1 && ac_count=$as_val if test $ac_count -gt ${ac_path_EGREP_max-0}; then # Best one so far, save it but keep looking for a better one ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_max=$ac_count fi # 10*(2^10) chars as input seems more than enough test $ac_count -gt 10 && break done rm -rf conftest.in conftest.tmp conftest.nl conftest.out;; esac $ac_path_EGREP_found && break 3 done done done IFS=$as_save_IFS if test -z "$ac_cv_path_EGREP"; then as_fn_error $? "no acceptable egrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 fi else ac_cv_path_EGREP=$EGREP fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_EGREP" >&5 $as_echo "$ac_cv_path_EGREP" >&6; } EGREP="$ac_cv_path_EGREP" { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ANSI C header files" >&5 $as_echo_n "checking for ANSI C header files... " >&6; } if ${ac_cv_header_stdc+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #include #include int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_header_stdc=yes else ac_cv_header_stdc=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext if test $ac_cv_header_stdc = yes; then # SunOS 4.x string.h does not declare mem*, contrary to ANSI. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "memchr" >/dev/null 2>&1; then : else ac_cv_header_stdc=no fi rm -rf conftest* fi if test $ac_cv_header_stdc = yes; then # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "free" >/dev/null 2>&1; then : else ac_cv_header_stdc=no fi rm -rf conftest* fi if test $ac_cv_header_stdc = yes; then # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi. if test "$cross_compiling" = yes; then : : else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #if ((' ' & 0x0FF) == 0x020) # define ISLOWER(c) ('a' <= (c) && (c) <= 'z') # define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c)) #else # define ISLOWER(c) \ (('a' <= (c) && (c) <= 'i') \ || ('j' <= (c) && (c) <= 'r') \ || ('s' <= (c) && (c) <= 'z')) # define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c)) #endif #define XOR(e, f) (((e) && !(f)) || (!(e) && (f))) int main () { int i; for (i = 0; i < 256; i++) if (XOR (islower (i), ISLOWER (i)) || toupper (i) != TOUPPER (i)) return 2; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO"; then : else ac_cv_header_stdc=no fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stdc" >&5 $as_echo "$ac_cv_header_stdc" >&6; } if test $ac_cv_header_stdc = yes; then $as_echo "#define STDC_HEADERS 1" >>confdefs.h fi # On IRIX 5.3, sys/types and inttypes.h are conflicting. for ac_header in sys/types.h sys/stat.h stdlib.h string.h memory.h strings.h \ inttypes.h stdint.h unistd.h do : as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` ac_fn_c_check_header_compile "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default " if eval test \"x\$"$as_ac_Header"\" = x"yes"; then : cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF fi done for ac_header in unistd.h inttypes.h do : as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default" if eval test \"x\$"$as_ac_Header"\" = x"yes"; then : cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF fi done ac_fn_c_check_type "$LINENO" "mode_t" "ac_cv_type_mode_t" "$ac_includes_default" if test "x$ac_cv_type_mode_t" = xyes; then : else cat >>confdefs.h <<_ACEOF #define mode_t int _ACEOF fi ac_fn_c_check_type "$LINENO" "pid_t" "ac_cv_type_pid_t" "$ac_includes_default" if test "x$ac_cv_type_pid_t" = xyes; then : else cat >>confdefs.h <<_ACEOF #define pid_t int _ACEOF fi ac_fn_c_check_type "$LINENO" "size_t" "ac_cv_type_size_t" "$ac_includes_default" if test "x$ac_cv_type_size_t" = xyes; then : else cat >>confdefs.h <<_ACEOF #define size_t unsigned int _ACEOF fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking return type of signal handlers" >&5 $as_echo_n "checking return type of signal handlers... " >&6; } if ${ac_cv_type_signal+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include int main () { return *(signal (0, 0)) (0) == 1; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_type_signal=int else ac_cv_type_signal=void fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_type_signal" >&5 $as_echo "$ac_cv_type_signal" >&6; } cat >>confdefs.h <<_ACEOF #define RETSIGTYPE $ac_cv_type_signal _ACEOF { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether time.h and sys/time.h may both be included" >&5 $as_echo_n "checking whether time.h and sys/time.h may both be included... " >&6; } if ${ac_cv_header_time+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #include int main () { if ((struct tm *) 0) return 0; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_header_time=yes else ac_cv_header_time=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_time" >&5 $as_echo "$ac_cv_header_time" >&6; } if test $ac_cv_header_time = yes; then $as_echo "#define TIME_WITH_SYS_TIME 1" >>confdefs.h fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for sys/wait.h that is POSIX.1 compatible" >&5 $as_echo_n "checking for sys/wait.h that is POSIX.1 compatible... " >&6; } if ${ac_cv_header_sys_wait_h+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #ifndef WEXITSTATUS # define WEXITSTATUS(stat_val) ((unsigned int) (stat_val) >> 8) #endif #ifndef WIFEXITED # define WIFEXITED(stat_val) (((stat_val) & 255) == 0) #endif int main () { int s; wait (&s); s = WIFEXITED (s) ? WEXITSTATUS (s) : 1; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_header_sys_wait_h=yes else ac_cv_header_sys_wait_h=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_sys_wait_h" >&5 $as_echo "$ac_cv_header_sys_wait_h" >&6; } if test $ac_cv_header_sys_wait_h = yes; then $as_echo "#define HAVE_SYS_WAIT_H 1" >>confdefs.h fi ac_header_dirent=no for ac_hdr in dirent.h sys/ndir.h sys/dir.h ndir.h; do as_ac_Header=`$as_echo "ac_cv_header_dirent_$ac_hdr" | $as_tr_sh` { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_hdr that defines DIR" >&5 $as_echo_n "checking for $ac_hdr that defines DIR... " >&6; } if eval \${$as_ac_Header+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include <$ac_hdr> int main () { if ((DIR *) 0) return 0; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : eval "$as_ac_Header=yes" else eval "$as_ac_Header=no" fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi eval ac_res=\$$as_ac_Header { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } if eval test \"x\$"$as_ac_Header"\" = x"yes"; then : cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_$ac_hdr" | $as_tr_cpp` 1 _ACEOF ac_header_dirent=$ac_hdr; break fi done # Two versions of opendir et al. are in -ldir and -lx on SCO Xenix. if test $ac_header_dirent = dirent.h; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing opendir" >&5 $as_echo_n "checking for library containing opendir... " >&6; } if ${ac_cv_search_opendir+:} false; then : $as_echo_n "(cached) " >&6 else ac_func_search_save_LIBS=$LIBS cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char opendir (); int main () { return opendir (); ; return 0; } _ACEOF for ac_lib in '' dir; do if test -z "$ac_lib"; then ac_res="none required" else ac_res=-l$ac_lib LIBS="-l$ac_lib $ac_func_search_save_LIBS" fi if ac_fn_c_try_link "$LINENO"; then : ac_cv_search_opendir=$ac_res fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext if ${ac_cv_search_opendir+:} false; then : break fi done if ${ac_cv_search_opendir+:} false; then : else ac_cv_search_opendir=no fi rm conftest.$ac_ext LIBS=$ac_func_search_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_opendir" >&5 $as_echo "$ac_cv_search_opendir" >&6; } ac_res=$ac_cv_search_opendir if test "$ac_res" != no; then : test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" fi else { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing opendir" >&5 $as_echo_n "checking for library containing opendir... " >&6; } if ${ac_cv_search_opendir+:} false; then : $as_echo_n "(cached) " >&6 else ac_func_search_save_LIBS=$LIBS cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char opendir (); int main () { return opendir (); ; return 0; } _ACEOF for ac_lib in '' x; do if test -z "$ac_lib"; then ac_res="none required" else ac_res=-l$ac_lib LIBS="-l$ac_lib $ac_func_search_save_LIBS" fi if ac_fn_c_try_link "$LINENO"; then : ac_cv_search_opendir=$ac_res fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext if ${ac_cv_search_opendir+:} false; then : break fi done if ${ac_cv_search_opendir+:} false; then : else ac_cv_search_opendir=no fi rm conftest.$ac_ext LIBS=$ac_func_search_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_opendir" >&5 $as_echo "$ac_cv_search_opendir" >&6; } ac_res=$ac_cv_search_opendir if test "$ac_res" != no; then : test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to call gettimeofday" >&5 $as_echo_n "checking how to call gettimeofday... " >&6; } if ${ac_cv_gettimeofday_args+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include int main () { struct timeval tv; struct timezone tzp; gettimeofday(&tv, &tzp); ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_gettimeofday_args=2 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include int main () { struct timeval tv; gettimeofday(&tv); ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_gettimeofday_args=1 else ac_gettimeofday_args=0 fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_cv_gettimeofday_args=$ac_gettimeofday_args fi ac_gettimeofday_args=$ac_cv_gettimeofday_args if test "$ac_gettimeofday_args" = 1 ; then $as_echo "#define HAVE_GETTIMEOFDAY 1" >>confdefs.h { $as_echo "$as_me:${as_lineno-$LINENO}: result: one argument" >&5 $as_echo "one argument" >&6; } elif test "$ac_gettimeofday_args" = 2 ; then $as_echo "#define HAVE_GETTIMEOFDAY 1" >>confdefs.h $as_echo "#define GETTIMEOFDAY_TWO_ARGS 1" >>confdefs.h { $as_echo "$as_me:${as_lineno-$LINENO}: result: two arguments" >&5 $as_echo "two arguments" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: unknown" >&5 $as_echo "unknown" >&6; } fi # Check whether --enable-largefile was given. if test "${enable_largefile+set}" = set; then : enableval=$enable_largefile; fi if test "$enable_largefile" != no; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for special C compiler options needed for large files" >&5 $as_echo_n "checking for special C compiler options needed for large files... " >&6; } if ${ac_cv_sys_largefile_CC+:} false; then : $as_echo_n "(cached) " >&6 else ac_cv_sys_largefile_CC=no if test "$GCC" != yes; then ac_save_CC=$CC while :; do # IRIX 6.2 and later do not support large files by default, # so use the C compiler's -n32 option if that helps. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include /* Check that off_t can represent 2**63 - 1 correctly. We can't simply define LARGE_OFF_T to be 9223372036854775807, since some C++ compilers masquerading as C compilers incorrectly reject 9223372036854775807. */ #define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62)) int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721 && LARGE_OFF_T % 2147483647 == 1) ? 1 : -1]; int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : break fi rm -f core conftest.err conftest.$ac_objext CC="$CC -n32" if ac_fn_c_try_compile "$LINENO"; then : ac_cv_sys_largefile_CC=' -n32'; break fi rm -f core conftest.err conftest.$ac_objext break done CC=$ac_save_CC rm -rf conftest.$ac_ext fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sys_largefile_CC" >&5 $as_echo "$ac_cv_sys_largefile_CC" >&6; } if test "$ac_cv_sys_largefile_CC" != no; then CC=$CC$ac_cv_sys_largefile_CC fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for _FILE_OFFSET_BITS value needed for large files" >&5 $as_echo_n "checking for _FILE_OFFSET_BITS value needed for large files... " >&6; } if ${ac_cv_sys_file_offset_bits+:} false; then : $as_echo_n "(cached) " >&6 else while :; do cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include /* Check that off_t can represent 2**63 - 1 correctly. We can't simply define LARGE_OFF_T to be 9223372036854775807, since some C++ compilers masquerading as C compilers incorrectly reject 9223372036854775807. */ #define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62)) int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721 && LARGE_OFF_T % 2147483647 == 1) ? 1 : -1]; int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_sys_file_offset_bits=no; break fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #define _FILE_OFFSET_BITS 64 #include /* Check that off_t can represent 2**63 - 1 correctly. We can't simply define LARGE_OFF_T to be 9223372036854775807, since some C++ compilers masquerading as C compilers incorrectly reject 9223372036854775807. */ #define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62)) int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721 && LARGE_OFF_T % 2147483647 == 1) ? 1 : -1]; int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_sys_file_offset_bits=64; break fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_cv_sys_file_offset_bits=unknown break done fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sys_file_offset_bits" >&5 $as_echo "$ac_cv_sys_file_offset_bits" >&6; } case $ac_cv_sys_file_offset_bits in #( no | unknown) ;; *) cat >>confdefs.h <<_ACEOF #define _FILE_OFFSET_BITS $ac_cv_sys_file_offset_bits _ACEOF ;; esac rm -rf conftest* if test $ac_cv_sys_file_offset_bits = unknown; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for _LARGE_FILES value needed for large files" >&5 $as_echo_n "checking for _LARGE_FILES value needed for large files... " >&6; } if ${ac_cv_sys_large_files+:} false; then : $as_echo_n "(cached) " >&6 else while :; do cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include /* Check that off_t can represent 2**63 - 1 correctly. We can't simply define LARGE_OFF_T to be 9223372036854775807, since some C++ compilers masquerading as C compilers incorrectly reject 9223372036854775807. */ #define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62)) int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721 && LARGE_OFF_T % 2147483647 == 1) ? 1 : -1]; int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_sys_large_files=no; break fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #define _LARGE_FILES 1 #include /* Check that off_t can represent 2**63 - 1 correctly. We can't simply define LARGE_OFF_T to be 9223372036854775807, since some C++ compilers masquerading as C compilers incorrectly reject 9223372036854775807. */ #define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62)) int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721 && LARGE_OFF_T % 2147483647 == 1) ? 1 : -1]; int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_sys_large_files=1; break fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_cv_sys_large_files=unknown break done fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sys_large_files" >&5 $as_echo "$ac_cv_sys_large_files" >&6; } case $ac_cv_sys_large_files in #( no | unknown) ;; *) cat >>confdefs.h <<_ACEOF #define _LARGE_FILES $ac_cv_sys_large_files _ACEOF ;; esac rm -rf conftest* fi fi for ac_func in select fcntl uname nice setpriority getcwd getwd putenv sbrk do : as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh` ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var" if eval test \"x\$"$as_ac_var"\" = x"yes"; then : cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1 _ACEOF fi done for ac_func in sigaction syslog realpath setrlimit do : as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh` ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var" if eval test \"x\$"$as_ac_var"\" = x"yes"; then : cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1 _ACEOF fi done for ac_func in setlocale do : ac_fn_c_check_func "$LINENO" "setlocale" "ac_cv_func_setlocale" if test "x$ac_cv_func_setlocale" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_SETLOCALE 1 _ACEOF fi done for ac_func in getaddrinfo do : ac_fn_c_check_func "$LINENO" "getaddrinfo" "ac_cv_func_getaddrinfo" if test "x$ac_cv_func_getaddrinfo" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_GETADDRINFO 1 _ACEOF fi done ac_fn_c_check_member "$LINENO" "struct sockaddr" "sa_len" "ac_cv_member_struct_sockaddr_sa_len" "#include " if test "x$ac_cv_member_struct_sockaddr_sa_len" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_STRUCT_SOCKADDR_SA_LEN 1 _ACEOF fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for struct icmp" >&5 $as_echo_n "checking for struct icmp... " >&6; } if ${ac_cv_have_icmp+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include int main () { struct icmp i; struct sockaddr s; struct sockaddr_in si; struct ip ip; i.icmp_type = ICMP_ECHO; i.icmp_code = 0; i.icmp_cksum = 0; i.icmp_id = 0; i.icmp_seq = 0; si.sin_family = AF_INET; #if defined(__DECC) || defined(_IP_VHL) ip.ip_vhl = 0; #else ip.ip_hl = 0; #endif ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_have_icmp=yes else ac_cv_have_icmp=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_have_icmp" >&5 $as_echo "$ac_cv_have_icmp" >&6; } if test "$ac_cv_have_icmp" = yes ; then $as_echo "#define HAVE_ICMP 1" >>confdefs.h fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for struct icmphdr" >&5 $as_echo_n "checking for struct icmphdr... " >&6; } if ${ac_cv_have_icmphdr+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include int main () { struct icmphdr i; struct sockaddr s; struct sockaddr_in si; struct ip ip; i.type = ICMP_ECHO; i.code = 0; i.checksum = 0; i.un.echo.id = 0; i.un.echo.sequence = 0; si.sin_family = AF_INET; ip.ip_hl = 0; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_have_icmphdr=yes else ac_cv_have_icmphdr=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_have_icmphdr" >&5 $as_echo "$ac_cv_have_icmphdr" >&6; } if test "$ac_cv_have_icmphdr" = yes ; then $as_echo "#define HAVE_ICMPHDR 1" >>confdefs.h fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for getifaddrs" >&5 $as_echo_n "checking for getifaddrs... " >&6; } if ${ac_cv_have_getifaddrs+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* 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 if ac_fn_c_try_compile "$LINENO"; then : ac_cv_have_getifaddrs=yes else ac_cv_have_getifaddrs=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_have_getifaddrs" >&5 $as_echo "$ac_cv_have_getifaddrs" >&6; } if test "$ac_cv_have_getifaddrs" = yes ; then $as_echo "#define HAVE_GETIFADDRS 1" >>confdefs.h fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for socklen_t" >&5 $as_echo_n "checking for socklen_t... " >&6; } if ${ac_cv_type_socklen_t+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include int main () { socklen_t socklen; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_type_socklen_t=yes else ac_cv_type_socklen_t=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_type_socklen_t" >&5 $as_echo "$ac_cv_type_socklen_t" >&6; } if test "$ac_cv_type_socklen_t" != yes; then $as_echo "#define socklen_t int" >>confdefs.h fi for ac_header in crypt.h sys/select.h do : as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default" if eval test \"x\$"$as_ac_Header"\" = x"yes"; then : cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF fi done for ac_prog in perl5 perl do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_PERL+:} false; then : $as_echo_n "(cached) " >&6 else case $PERL in [\\/]* | ?:[\\/]*) ac_cv_path_PERL="$PERL" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_PERL="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi PERL=$ac_cv_path_PERL if test -n "$PERL"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PERL" >&5 $as_echo "$PERL" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$PERL" && break done if test -z "$PERL" ; then PERL_VERSION=0 else { $as_echo "$as_me:${as_lineno-$LINENO}: checking perl version" >&5 $as_echo_n "checking perl version... " >&6; } if ${ac_cv_perl_version+:} false; then : $as_echo_n "(cached) " >&6 else ac_cv_perl_version=`$PERL -e "$perl_version_cmd"` fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_perl_version" >&5 $as_echo "$ac_cv_perl_version" >&6; } PERL_VERSION=$ac_cv_perl_version fi if test -z "$PERL" ; then # don't let it be blank... PERL=/usr/bin/perl fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for X" >&5 $as_echo_n "checking for X... " >&6; } # Check whether --with-x was given. if test "${with_x+set}" = set; then : withval=$with_x; fi # $have_x is `yes', `no', `disabled', or empty when we do not yet know. if test "x$with_x" = xno; then # The user explicitly disabled X. have_x=disabled else case $x_includes,$x_libraries in #( *\'*) as_fn_error $? "cannot use X directory names containing '" "$LINENO" 5;; #( *,NONE | NONE,*) if ${ac_cv_have_x+:} false; then : $as_echo_n "(cached) " >&6 else # One or both of the vars are not set, and there is no cached value. ac_x_includes=no ac_x_libraries=no rm -f -r conftest.dir if mkdir conftest.dir; then cd conftest.dir cat >Imakefile <<'_ACEOF' incroot: @echo incroot='${INCROOT}' usrlibdir: @echo usrlibdir='${USRLIBDIR}' libdir: @echo libdir='${LIBDIR}' _ACEOF if (export CC; ${XMKMF-xmkmf}) >/dev/null 2>/dev/null && test -f Makefile; then # GNU make sometimes prints "make[1]: Entering ...", which would confuse us. for ac_var in incroot usrlibdir libdir; do eval "ac_im_$ac_var=\`\${MAKE-make} $ac_var 2>/dev/null | sed -n 's/^$ac_var=//p'\`" done # Open Windows xmkmf reportedly sets LIBDIR instead of USRLIBDIR. for ac_extension in a so sl dylib la dll; do if test ! -f "$ac_im_usrlibdir/libX11.$ac_extension" && test -f "$ac_im_libdir/libX11.$ac_extension"; then ac_im_usrlibdir=$ac_im_libdir; break fi done # Screen out bogus values from the imake configuration. They are # bogus both because they are the default anyway, and because # using them would break gcc on systems where it needs fixed includes. case $ac_im_incroot in /usr/include) ac_x_includes= ;; *) test -f "$ac_im_incroot/X11/Xos.h" && ac_x_includes=$ac_im_incroot;; esac case $ac_im_usrlibdir in /usr/lib | /usr/lib64 | /lib | /lib64) ;; *) test -d "$ac_im_usrlibdir" && ac_x_libraries=$ac_im_usrlibdir ;; esac fi cd .. rm -f -r conftest.dir fi # Standard set of common directories for X headers. # Check X11 before X11Rn because it is often a symlink to the current release. ac_x_header_dirs=' /usr/X11/include /usr/X11R7/include /usr/X11R6/include /usr/X11R5/include /usr/X11R4/include /usr/include/X11 /usr/include/X11R7 /usr/include/X11R6 /usr/include/X11R5 /usr/include/X11R4 /usr/local/X11/include /usr/local/X11R7/include /usr/local/X11R6/include /usr/local/X11R5/include /usr/local/X11R4/include /usr/local/include/X11 /usr/local/include/X11R7 /usr/local/include/X11R6 /usr/local/include/X11R5 /usr/local/include/X11R4 /usr/X386/include /usr/x386/include /usr/XFree86/include/X11 /usr/include /usr/local/include /usr/unsupported/include /usr/athena/include /usr/local/x11r5/include /usr/lpp/Xamples/include /usr/openwin/include /usr/openwin/share/include' if test "$ac_x_includes" = no; then # Guess where to find include files, by looking for Xlib.h. # First, try using that file with no special directory specified. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : # We can compile using X headers with no special include directory. ac_x_includes= else for ac_dir in $ac_x_header_dirs; do if test -r "$ac_dir/X11/Xlib.h"; then ac_x_includes=$ac_dir break fi done fi rm -rf conftest.err conftest.i conftest.$ac_ext fi # $ac_x_includes = no if test "$ac_x_libraries" = no; then # Check for the libraries. # See if we find them without any special options. # Don't add to $LIBS permanently. ac_save_LIBS=$LIBS LIBS="-lX11 $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { XrmInitialize () ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : LIBS=$ac_save_LIBS # We can link X programs with no special library path. ac_x_libraries= else LIBS=$ac_save_LIBS for ac_dir in `$as_echo "$ac_x_includes $ac_x_header_dirs" | sed s/include/lib/g` do # Don't even attempt the hair of trying to link an X program! for ac_extension in a so sl dylib la dll; do if test -r "$ac_dir/libX11.$ac_extension"; then ac_x_libraries=$ac_dir break 2 fi done done fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi # $ac_x_libraries = no case $ac_x_includes,$ac_x_libraries in #( no,* | *,no | *\'*) # Didn't find X, or a directory has "'" in its name. ac_cv_have_x="have_x=no";; #( *) # Record where we found X for the cache. ac_cv_have_x="have_x=yes\ ac_x_includes='$ac_x_includes'\ ac_x_libraries='$ac_x_libraries'" esac fi ;; #( *) have_x=yes;; esac eval "$ac_cv_have_x" fi # $with_x != no if test "$have_x" != yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $have_x" >&5 $as_echo "$have_x" >&6; } no_x=yes else # If each of the values was on the command line, it overrides each guess. test "x$x_includes" = xNONE && x_includes=$ac_x_includes test "x$x_libraries" = xNONE && x_libraries=$ac_x_libraries # Update the cache value to reflect the command line values. ac_cv_have_x="have_x=yes\ ac_x_includes='$x_includes'\ ac_x_libraries='$x_libraries'" { $as_echo "$as_me:${as_lineno-$LINENO}: result: libraries $x_libraries, headers $x_includes" >&5 $as_echo "libraries $x_libraries, headers $x_includes" >&6; } fi if test "$no_x" = yes; then # Not all programs may use this symbol, but it does not hurt to define it. $as_echo "#define X_DISPLAY_MISSING 1" >>confdefs.h X_CFLAGS= X_PRE_LIBS= X_LIBS= X_EXTRA_LIBS= else if test -n "$x_includes"; then X_CFLAGS="$X_CFLAGS -I$x_includes" fi # It would also be nice to do this for all -L options, not just this one. if test -n "$x_libraries"; then X_LIBS="$X_LIBS -L$x_libraries" # For Solaris; some versions of Sun CC require a space after -R and # others require no space. Words are not sufficient . . . . { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether -R must be followed by a space" >&5 $as_echo_n "checking whether -R must be followed by a space... " >&6; } ac_xsave_LIBS=$LIBS; LIBS="$LIBS -R$x_libraries" ac_xsave_c_werror_flag=$ac_c_werror_flag ac_c_werror_flag=yes cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } X_LIBS="$X_LIBS -R$x_libraries" else LIBS="$ac_xsave_LIBS -R $x_libraries" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } X_LIBS="$X_LIBS -R $x_libraries" else { $as_echo "$as_me:${as_lineno-$LINENO}: result: neither works" >&5 $as_echo "neither works" >&6; } fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext ac_c_werror_flag=$ac_xsave_c_werror_flag LIBS=$ac_xsave_LIBS fi # Check for system-dependent libraries X programs must link with. # Do this before checking for the system-independent R6 libraries # (-lICE), since we may need -lsocket or whatever for X linking. if test "$ISC" = yes; then X_EXTRA_LIBS="$X_EXTRA_LIBS -lnsl_s -linet" else # Martyn Johnson says this is needed for Ultrix, if the X # libraries were built with DECnet support. And Karl Berry says # the Alpha needs dnet_stub (dnet does not exist). ac_xsave_LIBS="$LIBS"; LIBS="$LIBS $X_LIBS -lX11" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char XOpenDisplay (); int main () { return XOpenDisplay (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : else { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dnet_ntoa in -ldnet" >&5 $as_echo_n "checking for dnet_ntoa in -ldnet... " >&6; } if ${ac_cv_lib_dnet_dnet_ntoa+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-ldnet $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char dnet_ntoa (); int main () { return dnet_ntoa (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_dnet_dnet_ntoa=yes else ac_cv_lib_dnet_dnet_ntoa=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dnet_dnet_ntoa" >&5 $as_echo "$ac_cv_lib_dnet_dnet_ntoa" >&6; } if test "x$ac_cv_lib_dnet_dnet_ntoa" = xyes; then : X_EXTRA_LIBS="$X_EXTRA_LIBS -ldnet" fi if test $ac_cv_lib_dnet_dnet_ntoa = no; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dnet_ntoa in -ldnet_stub" >&5 $as_echo_n "checking for dnet_ntoa in -ldnet_stub... " >&6; } if ${ac_cv_lib_dnet_stub_dnet_ntoa+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-ldnet_stub $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char dnet_ntoa (); int main () { return dnet_ntoa (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_dnet_stub_dnet_ntoa=yes else ac_cv_lib_dnet_stub_dnet_ntoa=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dnet_stub_dnet_ntoa" >&5 $as_echo "$ac_cv_lib_dnet_stub_dnet_ntoa" >&6; } if test "x$ac_cv_lib_dnet_stub_dnet_ntoa" = xyes; then : X_EXTRA_LIBS="$X_EXTRA_LIBS -ldnet_stub" fi fi fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS="$ac_xsave_LIBS" # msh@cis.ufl.edu says -lnsl (and -lsocket) are needed for his 386/AT, # to get the SysV transport functions. # Chad R. Larson says the Pyramis MIS-ES running DC/OSx (SVR4) # needs -lnsl. # The nsl library prevents programs from opening the X display # on Irix 5.2, according to T.E. Dickey. # The functions gethostbyname, getservbyname, and inet_addr are # in -lbsd on LynxOS 3.0.1/i386, according to Lars Hecking. ac_fn_c_check_func "$LINENO" "gethostbyname" "ac_cv_func_gethostbyname" if test "x$ac_cv_func_gethostbyname" = xyes; then : fi if test $ac_cv_func_gethostbyname = no; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for gethostbyname in -lnsl" >&5 $as_echo_n "checking for gethostbyname in -lnsl... " >&6; } if ${ac_cv_lib_nsl_gethostbyname+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lnsl $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char gethostbyname (); int main () { return gethostbyname (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_nsl_gethostbyname=yes else ac_cv_lib_nsl_gethostbyname=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_nsl_gethostbyname" >&5 $as_echo "$ac_cv_lib_nsl_gethostbyname" >&6; } if test "x$ac_cv_lib_nsl_gethostbyname" = xyes; then : X_EXTRA_LIBS="$X_EXTRA_LIBS -lnsl" fi if test $ac_cv_lib_nsl_gethostbyname = no; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for gethostbyname in -lbsd" >&5 $as_echo_n "checking for gethostbyname in -lbsd... " >&6; } if ${ac_cv_lib_bsd_gethostbyname+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lbsd $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char gethostbyname (); int main () { return gethostbyname (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_bsd_gethostbyname=yes else ac_cv_lib_bsd_gethostbyname=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_bsd_gethostbyname" >&5 $as_echo "$ac_cv_lib_bsd_gethostbyname" >&6; } if test "x$ac_cv_lib_bsd_gethostbyname" = xyes; then : X_EXTRA_LIBS="$X_EXTRA_LIBS -lbsd" fi fi fi # lieder@skyler.mavd.honeywell.com says without -lsocket, # socket/setsockopt and other routines are undefined under SCO ODT # 2.0. But -lsocket is broken on IRIX 5.2 (and is not necessary # on later versions), says Simon Leinen: it contains gethostby* # variants that don't use the name server (or something). -lsocket # must be given before -lnsl if both are needed. We assume that # if connect needs -lnsl, so does gethostbyname. ac_fn_c_check_func "$LINENO" "connect" "ac_cv_func_connect" if test "x$ac_cv_func_connect" = xyes; then : fi if test $ac_cv_func_connect = no; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for connect in -lsocket" >&5 $as_echo_n "checking for connect in -lsocket... " >&6; } if ${ac_cv_lib_socket_connect+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lsocket $X_EXTRA_LIBS $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char connect (); int main () { return connect (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_socket_connect=yes else ac_cv_lib_socket_connect=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_socket_connect" >&5 $as_echo "$ac_cv_lib_socket_connect" >&6; } if test "x$ac_cv_lib_socket_connect" = xyes; then : X_EXTRA_LIBS="-lsocket $X_EXTRA_LIBS" fi fi # Guillermo Gomez says -lposix is necessary on A/UX. ac_fn_c_check_func "$LINENO" "remove" "ac_cv_func_remove" if test "x$ac_cv_func_remove" = xyes; then : fi if test $ac_cv_func_remove = no; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for remove in -lposix" >&5 $as_echo_n "checking for remove in -lposix... " >&6; } if ${ac_cv_lib_posix_remove+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lposix $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char remove (); int main () { return remove (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_posix_remove=yes else ac_cv_lib_posix_remove=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_posix_remove" >&5 $as_echo "$ac_cv_lib_posix_remove" >&6; } if test "x$ac_cv_lib_posix_remove" = xyes; then : X_EXTRA_LIBS="$X_EXTRA_LIBS -lposix" fi fi # BSDI BSD/OS 2.1 needs -lipc for XOpenDisplay. ac_fn_c_check_func "$LINENO" "shmat" "ac_cv_func_shmat" if test "x$ac_cv_func_shmat" = xyes; then : fi if test $ac_cv_func_shmat = no; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for shmat in -lipc" >&5 $as_echo_n "checking for shmat in -lipc... " >&6; } if ${ac_cv_lib_ipc_shmat+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lipc $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char shmat (); int main () { return shmat (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_ipc_shmat=yes else ac_cv_lib_ipc_shmat=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_ipc_shmat" >&5 $as_echo "$ac_cv_lib_ipc_shmat" >&6; } if test "x$ac_cv_lib_ipc_shmat" = xyes; then : X_EXTRA_LIBS="$X_EXTRA_LIBS -lipc" fi fi fi # Check for libraries that X11R6 Xt/Xaw programs need. ac_save_LDFLAGS=$LDFLAGS test -n "$x_libraries" && LDFLAGS="$LDFLAGS -L$x_libraries" # SM needs ICE to (dynamically) link under SunOS 4.x (so we have to # check for ICE first), but we must link in the order -lSM -lICE or # we get undefined symbols. So assume we have SM if we have ICE. # These have to be linked with before -lX11, unlike the other # libraries we check for below, so use a different variable. # John Interrante, Karl Berry { $as_echo "$as_me:${as_lineno-$LINENO}: checking for IceConnectionNumber in -lICE" >&5 $as_echo_n "checking for IceConnectionNumber in -lICE... " >&6; } if ${ac_cv_lib_ICE_IceConnectionNumber+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lICE $X_EXTRA_LIBS $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char IceConnectionNumber (); int main () { return IceConnectionNumber (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_ICE_IceConnectionNumber=yes else ac_cv_lib_ICE_IceConnectionNumber=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_ICE_IceConnectionNumber" >&5 $as_echo "$ac_cv_lib_ICE_IceConnectionNumber" >&6; } if test "x$ac_cv_lib_ICE_IceConnectionNumber" = xyes; then : X_PRE_LIBS="$X_PRE_LIBS -lSM -lICE" fi LDFLAGS=$ac_save_LDFLAGS fi if test "$have_x" != yes; then as_fn_error $? "Couldn't find X11 headers/libs. Try \`$0 --help'." "$LINENO" 5 fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for X app-defaults directory" >&5 $as_echo_n "checking for X app-defaults directory... " >&6; } if ${ac_cv_x_app_defaults+:} false; then : $as_echo_n "(cached) " >&6 else # skip this, it's always wrong these days. # AC_PATH_X_APP_DEFAULTS_XMKMF if test x"$ac_x_app_defaults" = x; then true # Look for the directory under a standard set of common directories. # Check X11 before X11Rn because it's often a symlink to the current release. for ac_dir in \ \ /usr/share/X11/app-defaults \ \ /usr/X11/lib/app-defaults \ /usr/X11R6/lib/app-defaults \ /usr/X11R6/lib/X11/app-defaults \ /usr/X11R5/lib/app-defaults \ /usr/X11R5/lib/X11/app-defaults \ /usr/X11R4/lib/app-defaults \ /usr/X11R4/lib/X11/app-defaults \ \ /usr/lib/X11/app-defaults \ /usr/lib/X11R6/app-defaults \ /usr/lib/X11R5/app-defaults \ /usr/lib/X11R4/app-defaults \ \ /etc/X11/app-defaults \ \ /usr/local/X11/lib/app-defaults \ /usr/local/X11R6/lib/app-defaults \ /usr/local/X11R5/lib/app-defaults \ /usr/local/X11R4/lib/app-defaults \ \ /usr/local/lib/X11/app-defaults \ /usr/local/lib/X11R6/app-defaults \ /usr/local/lib/X11R6/X11/app-defaults \ /usr/local/lib/X11R5/app-defaults \ /usr/local/lib/X11R5/X11/app-defaults \ /usr/local/lib/X11R4/app-defaults \ /usr/local/lib/X11R4/X11/app-defaults \ \ /usr/X386/lib/X11/app-defaults \ /usr/x386/lib/X11/app-defaults \ /usr/XFree86/lib/X11/app-defaults \ \ /usr/lib/X11/app-defaults \ /usr/local/lib/X11/app-defaults \ /usr/unsupported/lib/X11/app-defaults \ /usr/athena/lib/X11/app-defaults \ /usr/local/x11r5/lib/X11/app-defaults \ /usr/lpp/Xamples/lib/X11/app-defaults \ /lib/usr/lib/X11/app-defaults \ \ /usr/openwin/lib/app-defaults \ /usr/openwin/lib/X11/app-defaults \ /usr/openwin/share/lib/app-defaults \ /usr/openwin/share/lib/X11/app-defaults \ \ /X11R6/lib/app-defaults \ /X11R5/lib/app-defaults \ /X11R4/lib/app-defaults \ ; \ do if test -d "$ac_dir"; then ac_x_app_defaults=$ac_dir break fi done fi if test x"$ac_x_app_defaults" = x; then /bin/echo -n 'fallback: ' ac_cv_x_app_defaults="/usr/lib/X11/app-defaults" else # Record where we found app-defaults for the cache. ac_cv_x_app_defaults="$ac_x_app_defaults" fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_x_app_defaults" >&5 $as_echo "$ac_cv_x_app_defaults" >&6; } eval ac_x_app_defaults="$ac_cv_x_app_defaults" case "$host" in *-hpux*) # The following arcana was gleaned from conversations with # Eric Schwartz : # # On HPUX 10.x, the parts of X that HP considers "standard" live in # /usr/{include,lib}/X11R6/. The parts that HP doesn't consider # "standard", notably, Xaw and Xmu, live in /usr/contrib/X11R6/. # Yet /usr/contrib/X11R6/ comes preinstalled on all HPUX systems. # Also, there are symlinks from /usr/include/ and /usr/lib/ into # /usr/{include,lib}/X11R6/, so that (if you don't use Xmu at all) # you don't need any -I or -L arguments. # # On HPUX 9.x, /usr/{include,lib}/X11R5/ and /usr/contrib/X11R5/ # are the same division as 10.x. However, there are no symlinks to # the X stuff from /usr/include/ and /usr/lib/, so -I and -L # arguments are always necessary. # # However, X11R6 was available on HPUX 9.x as a patch: if that # patch was installed, then all of X11R6 went in to # /usr/contrib/X11R6/ (there was no /usr/{include,lib}/X11R6/.) # # HPUX 8.x was the same as 9.x, but was X11R4 instead (I don't know # whether R5 was available as a patch; R6 undoubtedly was not.) # # So. We try and use the highest numbered pair of # /usr/{include,lib}/X11R?/ and /usr/contrib/X11R?/{include,lib}/ # that are available. We do not mix and match different versions # of X. # # Question I still don't know the answer to: (do you?) # # * On HPUX 9.x, where /usr/include/X11R5/ was standard, and # /usr/contrib/X11R6/ could be installed as a patch, what was in # that contrib directory? Did it contain so-called "standard" # X11R6, or did it include Xaw and Xmu as well? If the former, # where did one find Xaw and Xmu on 9.x R6 systems? Would this # be a situation where one had to reach into the R5 headers and # libs to find Xmu? That is, must both R6 and R5 directories # be on the -I and -L lists in that case? # for version in X11R6 X11R5 X11R4 ; do # if either pair of directories exists... if test -d /usr/include/$version || test -d /usr/contrib/$version/include then # if contrib exists, use it... if test -d /usr/contrib/$version/include ; then X_CFLAGS="$X_CFLAGS -I/usr/contrib/$version/include" X_LIBS="$X_LIBS -L/usr/contrib/$version/lib" fi # if the "standard" one exists, use it. if test -d /usr/include/$version ; then X_CFLAGS="$X_CFLAGS -I/usr/include/$version" X_LIBS="$X_LIBS -L/usr/lib/$version" fi # since at least one of the pair exists, go no farther. break fi done # Now find Motif. Thanks for not making xmkmf find this by # default, you losers. # if test -d /usr/include/Motif2.1 ; then X_CFLAGS="$X_CFLAGS -I/usr/include/Motif2.1" X_LIBS="$X_LIBS -L/usr/lib/Motif2.1" elif test -d /usr/include/Motif1.2 ; then X_CFLAGS="$X_CFLAGS -I/usr/include/Motif1.2" X_LIBS="$X_LIBS -L/usr/lib/Motif1.2" elif test -d /usr/include/Motif1.1 ; then X_CFLAGS="$X_CFLAGS -I/usr/include/Motif1.1" X_LIBS="$X_LIBS -L/usr/lib/Motif1.1" fi # Now let's check for the pseudo-standard locations for OpenGL and XPM. # if test -d /opt/graphics/OpenGL/include ; then # HP-UX 10.20 puts it here X_CFLAGS="-I/opt/graphics/OpenGL/include $X_CFLAGS" X_LIBS="-L/opt/graphics/OpenGL/lib $X_LIBS" elif test -d /opt/Mesa/lib ; then X_CFLAGS="-I/opt/Mesa/include $X_CFLAGS" X_LIBS="-L/opt/Mesa/lib $X_LIBS" fi if test -d /opt/xpm/lib/X11 ; then X_CFLAGS="-I/opt/xpm/include $X_CFLAGS" X_LIBS="-L/opt/xpm/lib/X11 $X_LIBS" fi # On HPUX, default to installing in /opt/xscreensaver/ instead of # in /usr/local/, unless there is already an xscreensaver in # /usr/local/bin/. This can be overridden with the --prefix arg # to configure. I'm not sure this is the right thing to do, but # Richard Lloyd says so... # if test \! -x /usr/local/bin/xscreensaver ; then ac_default_prefix=/opt/xscreensaver fi ;; *-solaris*) # Thanks for not making xmkmf find this by default, pinheads. # And thanks for moving things around again, too. Is this # really the standard location now? What happened to the # joke that this kind of thing went in /opt? # cthomp says "answer: CDE (Common Disorganized Environment)" # if test -f /usr/dt/include/Xm/Xm.h ; then X_CFLAGS="$X_CFLAGS -I/usr/dt/include" MOTIF_LIBS="$MOTIF_LIBS -L/usr/dt/lib -R/usr/dt/lib" # Some versions of Slowlaris Motif require -lgen. But not all. Why? { $as_echo "$as_me:${as_lineno-$LINENO}: checking for regcmp in -lgen" >&5 $as_echo_n "checking for regcmp in -lgen... " >&6; } if ${ac_cv_lib_gen_regcmp+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lgen $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char regcmp (); int main () { return regcmp (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_gen_regcmp=yes else ac_cv_lib_gen_regcmp=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_gen_regcmp" >&5 $as_echo "$ac_cv_lib_gen_regcmp" >&6; } if test "x$ac_cv_lib_gen_regcmp" = xyes; then : MOTIF_LIBS="$MOTIF_LIBS -lgen" fi fi ;; *-darwin*) # On MacOS X (10.x with "fink"), many things are under /sw/. # if test -d /sw/include ; then X_CFLAGS="-I/sw/include $X_CFLAGS" X_LIBS="-L/sw/lib $X_LIBS" fi ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking for XPointer" >&5 $as_echo_n "checking for XPointer... " >&6; } if ${ac_cv_xpointer+:} false; then : $as_echo_n "(cached) " >&6 else ac_save_CPPFLAGS="$CPPFLAGS" if test \! -z "$includedir" ; then CPPFLAGS="$CPPFLAGS -I$includedir" fi CPPFLAGS="$CPPFLAGS $X_CFLAGS" CPPFLAGS=`eval eval eval eval eval eval eval eval eval echo $CPPFLAGS` cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { XPointer foo = (XPointer) 0; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_xpointer=yes else ac_cv_xpointer=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext CPPFLAGS="$ac_save_CPPFLAGS" fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_xpointer" >&5 $as_echo "$ac_cv_xpointer" >&6; } if test "$ac_cv_xpointer" != yes; then $as_echo "#define XPointer char*" >>confdefs.h fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether this is MacOS X" >&5 $as_echo_n "checking whether this is MacOS X... " >&6; } ac_macosx=no case "$host" in *-apple-darwin* ) ac_macosx=yes ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_macosx" >&5 $as_echo "$ac_macosx" >&6; } ############################################################################### # # Gettext support # ############################################################################### { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether NLS is requested" >&5 $as_echo_n "checking whether NLS is requested... " >&6; } # Check whether --enable-nls was given. if test "${enable_nls+set}" = set; then : enableval=$enable_nls; USE_NLS=$enableval else USE_NLS=yes fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $USE_NLS" >&5 $as_echo "$USE_NLS" >&6; } case "$am__api_version" in 1.01234) as_fn_error $? "Automake 1.5 or newer is required to use intltool" "$LINENO" 5 ;; *) ;; esac INTLTOOL_REQUIRED_VERSION_AS_INT=`echo | awk -F. '{ print $ 1 * 1000 + $ 2 * 100 + $ 3; }'` INTLTOOL_APPLIED_VERSION=`intltool-update --version | head -1 | cut -d" " -f3` INTLTOOL_APPLIED_VERSION_AS_INT=`echo $INTLTOOL_APPLIED_VERSION | awk -F. '{ print $ 1 * 1000 + $ 2 * 100 + $ 3; }'` if test -n ""; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for intltool >= " >&5 $as_echo_n "checking for intltool >= ... " >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: result: $INTLTOOL_APPLIED_VERSION found" >&5 $as_echo "$INTLTOOL_APPLIED_VERSION found" >&6; } test "$INTLTOOL_APPLIED_VERSION_AS_INT" -ge "$INTLTOOL_REQUIRED_VERSION_AS_INT" || as_fn_error $? "Your intltool is too old. You need intltool or later." "$LINENO" 5 fi # Extract the first word of "intltool-update", so it can be a program name with args. set dummy intltool-update; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_INTLTOOL_UPDATE+:} false; then : $as_echo_n "(cached) " >&6 else case $INTLTOOL_UPDATE in [\\/]* | ?:[\\/]*) ac_cv_path_INTLTOOL_UPDATE="$INTLTOOL_UPDATE" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_INTLTOOL_UPDATE="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi INTLTOOL_UPDATE=$ac_cv_path_INTLTOOL_UPDATE if test -n "$INTLTOOL_UPDATE"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $INTLTOOL_UPDATE" >&5 $as_echo "$INTLTOOL_UPDATE" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi # Extract the first word of "intltool-merge", so it can be a program name with args. set dummy intltool-merge; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_INTLTOOL_MERGE+:} false; then : $as_echo_n "(cached) " >&6 else case $INTLTOOL_MERGE in [\\/]* | ?:[\\/]*) ac_cv_path_INTLTOOL_MERGE="$INTLTOOL_MERGE" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_INTLTOOL_MERGE="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi INTLTOOL_MERGE=$ac_cv_path_INTLTOOL_MERGE if test -n "$INTLTOOL_MERGE"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $INTLTOOL_MERGE" >&5 $as_echo "$INTLTOOL_MERGE" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi # Extract the first word of "intltool-extract", so it can be a program name with args. set dummy intltool-extract; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_INTLTOOL_EXTRACT+:} false; then : $as_echo_n "(cached) " >&6 else case $INTLTOOL_EXTRACT in [\\/]* | ?:[\\/]*) ac_cv_path_INTLTOOL_EXTRACT="$INTLTOOL_EXTRACT" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_INTLTOOL_EXTRACT="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi INTLTOOL_EXTRACT=$ac_cv_path_INTLTOOL_EXTRACT if test -n "$INTLTOOL_EXTRACT"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $INTLTOOL_EXTRACT" >&5 $as_echo "$INTLTOOL_EXTRACT" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test -z "$INTLTOOL_UPDATE" -o -z "$INTLTOOL_MERGE" -o -z "$INTLTOOL_EXTRACT"; then as_fn_error $? "The intltool scripts were not found. Please install intltool." "$LINENO" 5 fi if test -z "$AM_DEFAULT_VERBOSITY"; then AM_DEFAULT_VERBOSITY=1 fi INTLTOOL_V_MERGE='$(INTLTOOL__v_MERGE_$(V))' INTLTOOL__v_MERGE_='$(INTLTOOL__v_MERGE_$(AM_DEFAULT_VERBOSITY))' INTLTOOL__v_MERGE_0='@echo " ITMRG " $@;' INTLTOOL_V_MERGE_OPTIONS='$(intltool__v_merge_options_$(V))' intltool__v_merge_options_='$(intltool__v_merge_options_$(AM_DEFAULT_VERBOSITY))' intltool__v_merge_options_0='-q' INTLTOOL_DESKTOP_RULE='%.desktop: %.desktop.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; $(INTLTOOL_V_MERGE)LC_ALL=C $(INTLTOOL_MERGE) $(INTLTOOL_V_MERGE_OPTIONS) -d -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< $@' INTLTOOL_DIRECTORY_RULE='%.directory: %.directory.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; $(INTLTOOL_V_MERGE)LC_ALL=C $(INTLTOOL_MERGE) $(INTLTOOL_V_MERGE_OPTIONS) -d -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< $@' INTLTOOL_KEYS_RULE='%.keys: %.keys.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; $(INTLTOOL_V_MERGE)LC_ALL=C $(INTLTOOL_MERGE) $(INTLTOOL_V_MERGE_OPTIONS) -k -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< $@' INTLTOOL_PROP_RULE='%.prop: %.prop.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; $(INTLTOOL_V_MERGE)LC_ALL=C $(INTLTOOL_MERGE) $(INTLTOOL_V_MERGE_OPTIONS) -d -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< $@' INTLTOOL_OAF_RULE='%.oaf: %.oaf.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; $(INTLTOOL_V_MERGE)LC_ALL=C $(INTLTOOL_MERGE) $(INTLTOOL_V_MERGE_OPTIONS) -o -p $(top_srcdir)/po $< $@' INTLTOOL_PONG_RULE='%.pong: %.pong.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; $(INTLTOOL_V_MERGE)LC_ALL=C $(INTLTOOL_MERGE) $(INTLTOOL_V_MERGE_OPTIONS) -x -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< $@' INTLTOOL_SERVER_RULE='%.server: %.server.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; $(INTLTOOL_V_MERGE)LC_ALL=C $(INTLTOOL_MERGE) $(INTLTOOL_V_MERGE_OPTIONS) -o -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< $@' INTLTOOL_SHEET_RULE='%.sheet: %.sheet.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; $(INTLTOOL_V_MERGE)LC_ALL=C $(INTLTOOL_MERGE) $(INTLTOOL_V_MERGE_OPTIONS) -x -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< $@' INTLTOOL_SOUNDLIST_RULE='%.soundlist: %.soundlist.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; $(INTLTOOL_V_MERGE)LC_ALL=C $(INTLTOOL_MERGE) $(INTLTOOL_V_MERGE_OPTIONS) -d -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< $@' INTLTOOL_UI_RULE='%.ui: %.ui.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; $(INTLTOOL_V_MERGE)LC_ALL=C $(INTLTOOL_MERGE) $(INTLTOOL_V_MERGE_OPTIONS) -x -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< $@' INTLTOOL_XML_RULE='%.xml: %.xml.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; $(INTLTOOL_V_MERGE)LC_ALL=C $(INTLTOOL_MERGE) $(INTLTOOL_V_MERGE_OPTIONS) -x -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< $@' if test "$INTLTOOL_APPLIED_VERSION_AS_INT" -ge 5000; then INTLTOOL_XML_NOMERGE_RULE='%.xml: %.xml.in $(INTLTOOL_MERGE) ; $(INTLTOOL_V_MERGE)LC_ALL=C $(INTLTOOL_MERGE) $(INTLTOOL_V_MERGE_OPTIONS) -x -u --no-translations $< $@' else INTLTOOL_XML_NOMERGE_RULE='%.xml: %.xml.in $(INTLTOOL_MERGE) ; $(INTLTOOL_V_MERGE)_it_tmp_dir=tmp.intltool.$$RANDOM && mkdir $$_it_tmp_dir && LC_ALL=C $(INTLTOOL_MERGE) $(INTLTOOL_V_MERGE_OPTIONS) -x -u $$_it_tmp_dir $< $@ && rmdir $$_it_tmp_dir' fi INTLTOOL_XAM_RULE='%.xam: %.xml.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; $(INTLTOOL_V_MERGE)LC_ALL=C $(INTLTOOL_MERGE) $(INTLTOOL_V_MERGE_OPTIONS) -x -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< $@' INTLTOOL_KBD_RULE='%.kbd: %.kbd.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; $(INTLTOOL_V_MERGE)LC_ALL=C $(INTLTOOL_MERGE) $(INTLTOOL_V_MERGE_OPTIONS) -x -u -m -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< $@' INTLTOOL_CAVES_RULE='%.caves: %.caves.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; $(INTLTOOL_V_MERGE)LC_ALL=C $(INTLTOOL_MERGE) $(INTLTOOL_V_MERGE_OPTIONS) -d -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< $@' INTLTOOL_SCHEMAS_RULE='%.schemas: %.schemas.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; $(INTLTOOL_V_MERGE)LC_ALL=C $(INTLTOOL_MERGE) $(INTLTOOL_V_MERGE_OPTIONS) -s -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< $@' INTLTOOL_THEME_RULE='%.theme: %.theme.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; $(INTLTOOL_V_MERGE)LC_ALL=C $(INTLTOOL_MERGE) $(INTLTOOL_V_MERGE_OPTIONS) -d -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< $@' INTLTOOL_SERVICE_RULE='%.service: %.service.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; $(INTLTOOL_V_MERGE)LC_ALL=C $(INTLTOOL_MERGE) $(INTLTOOL_V_MERGE_OPTIONS) -d -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< $@' INTLTOOL_POLICY_RULE='%.policy: %.policy.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; $(INTLTOOL_V_MERGE)LC_ALL=C $(INTLTOOL_MERGE) $(INTLTOOL_V_MERGE_OPTIONS) -x -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< $@' # Check the gettext tools to make sure they are GNU # Extract the first word of "xgettext", so it can be a program name with args. set dummy xgettext; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_XGETTEXT+:} false; then : $as_echo_n "(cached) " >&6 else case $XGETTEXT in [\\/]* | ?:[\\/]*) ac_cv_path_XGETTEXT="$XGETTEXT" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_XGETTEXT="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi XGETTEXT=$ac_cv_path_XGETTEXT if test -n "$XGETTEXT"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $XGETTEXT" >&5 $as_echo "$XGETTEXT" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi # Extract the first word of "msgmerge", so it can be a program name with args. set dummy msgmerge; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_MSGMERGE+:} false; then : $as_echo_n "(cached) " >&6 else case $MSGMERGE in [\\/]* | ?:[\\/]*) ac_cv_path_MSGMERGE="$MSGMERGE" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_MSGMERGE="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi MSGMERGE=$ac_cv_path_MSGMERGE if test -n "$MSGMERGE"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MSGMERGE" >&5 $as_echo "$MSGMERGE" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi # Extract the first word of "msgfmt", so it can be a program name with args. set dummy msgfmt; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_MSGFMT+:} false; then : $as_echo_n "(cached) " >&6 else case $MSGFMT in [\\/]* | ?:[\\/]*) ac_cv_path_MSGFMT="$MSGFMT" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_MSGFMT="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi MSGFMT=$ac_cv_path_MSGFMT if test -n "$MSGFMT"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MSGFMT" >&5 $as_echo "$MSGFMT" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi # Extract the first word of "gmsgfmt", so it can be a program name with args. set dummy gmsgfmt; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_GMSGFMT+:} false; then : $as_echo_n "(cached) " >&6 else case $GMSGFMT in [\\/]* | ?:[\\/]*) ac_cv_path_GMSGFMT="$GMSGFMT" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_GMSGFMT="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS test -z "$ac_cv_path_GMSGFMT" && ac_cv_path_GMSGFMT="$MSGFMT" ;; esac fi GMSGFMT=$ac_cv_path_GMSGFMT if test -n "$GMSGFMT"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $GMSGFMT" >&5 $as_echo "$GMSGFMT" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test -z "$XGETTEXT" -o -z "$MSGMERGE" -o -z "$MSGFMT"; then as_fn_error $? "GNU gettext tools not found; required for intltool" "$LINENO" 5 fi xgversion="`$XGETTEXT --version|grep '(GNU ' 2> /dev/null`" mmversion="`$MSGMERGE --version|grep '(GNU ' 2> /dev/null`" mfversion="`$MSGFMT --version|grep '(GNU ' 2> /dev/null`" if test -z "$xgversion" -o -z "$mmversion" -o -z "$mfversion"; then as_fn_error $? "GNU gettext tools not found; required for intltool" "$LINENO" 5 fi # Substitute ALL_LINGUAS so we can use it in po/Makefile GETTEXT_PACKAGE=xscreensaver cat >>confdefs.h <<_ACEOF #define GETTEXT_PACKAGE "$GETTEXT_PACKAGE" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE "$GETTEXT_PACKAGE" _ACEOF ALL_LINGUAS="ca da de es et fi fr hu it ja ko nb nl pl pt pt_BR ru sk sv vi wa zh_CN zh_TW" for ac_header in locale.h do : ac_fn_c_check_header_mongrel "$LINENO" "locale.h" "ac_cv_header_locale_h" "$ac_includes_default" if test "x$ac_cv_header_locale_h" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_LOCALE_H 1 _ACEOF fi done if test $ac_cv_header_locale_h = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for LC_MESSAGES" >&5 $as_echo_n "checking for LC_MESSAGES... " >&6; } if ${am_cv_val_LC_MESSAGES+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { return LC_MESSAGES ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : am_cv_val_LC_MESSAGES=yes else am_cv_val_LC_MESSAGES=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_val_LC_MESSAGES" >&5 $as_echo "$am_cv_val_LC_MESSAGES" >&6; } if test $am_cv_val_LC_MESSAGES = yes; then $as_echo "#define HAVE_LC_MESSAGES 1" >>confdefs.h fi fi USE_NLS=yes gt_cv_have_gettext=no CATOBJEXT=NONE XGETTEXT=: INTLLIBS= ac_fn_c_check_header_mongrel "$LINENO" "libintl.h" "ac_cv_header_libintl_h" "$ac_includes_default" if test "x$ac_cv_header_libintl_h" = xyes; then : gt_cv_func_dgettext_libintl="no" libintl_extra_libs="" # # First check in libc # { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ngettext in libc" >&5 $as_echo_n "checking for ngettext in libc... " >&6; } if ${gt_cv_func_ngettext_libc+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { return !ngettext ("","", 1) ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : gt_cv_func_ngettext_libc=yes else gt_cv_func_ngettext_libc=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gt_cv_func_ngettext_libc" >&5 $as_echo "$gt_cv_func_ngettext_libc" >&6; } if test "$gt_cv_func_ngettext_libc" = "yes" ; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dgettext in libc" >&5 $as_echo_n "checking for dgettext in libc... " >&6; } if ${gt_cv_func_dgettext_libc+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { return !dgettext ("","") ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : gt_cv_func_dgettext_libc=yes else gt_cv_func_dgettext_libc=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gt_cv_func_dgettext_libc" >&5 $as_echo "$gt_cv_func_dgettext_libc" >&6; } fi if test "$gt_cv_func_ngettext_libc" = "yes" ; then for ac_func in bind_textdomain_codeset do : ac_fn_c_check_func "$LINENO" "bind_textdomain_codeset" "ac_cv_func_bind_textdomain_codeset" if test "x$ac_cv_func_bind_textdomain_codeset" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_BIND_TEXTDOMAIN_CODESET 1 _ACEOF fi done fi # # If we don't have everything we want, check in libintl # if test "$gt_cv_func_dgettext_libc" != "yes" \ || test "$gt_cv_func_ngettext_libc" != "yes" \ || test "$ac_cv_func_bind_textdomain_codeset" != "yes" ; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for bindtextdomain in -lintl" >&5 $as_echo_n "checking for bindtextdomain in -lintl... " >&6; } if ${ac_cv_lib_intl_bindtextdomain+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lintl $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char bindtextdomain (); int main () { return bindtextdomain (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_intl_bindtextdomain=yes else ac_cv_lib_intl_bindtextdomain=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_intl_bindtextdomain" >&5 $as_echo "$ac_cv_lib_intl_bindtextdomain" >&6; } if test "x$ac_cv_lib_intl_bindtextdomain" = xyes; then : { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ngettext in -lintl" >&5 $as_echo_n "checking for ngettext in -lintl... " >&6; } if ${ac_cv_lib_intl_ngettext+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lintl $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char ngettext (); int main () { return ngettext (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_intl_ngettext=yes else ac_cv_lib_intl_ngettext=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_intl_ngettext" >&5 $as_echo "$ac_cv_lib_intl_ngettext" >&6; } if test "x$ac_cv_lib_intl_ngettext" = xyes; then : { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dgettext in -lintl" >&5 $as_echo_n "checking for dgettext in -lintl... " >&6; } if ${ac_cv_lib_intl_dgettext+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lintl $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char dgettext (); int main () { return dgettext (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_intl_dgettext=yes else ac_cv_lib_intl_dgettext=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_intl_dgettext" >&5 $as_echo "$ac_cv_lib_intl_dgettext" >&6; } if test "x$ac_cv_lib_intl_dgettext" = xyes; then : gt_cv_func_dgettext_libintl=yes fi fi fi if test "$gt_cv_func_dgettext_libintl" != "yes" ; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking if -liconv is needed to use gettext" >&5 $as_echo_n "checking if -liconv is needed to use gettext... " >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: result: " >&5 $as_echo "" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ngettext in -lintl" >&5 $as_echo_n "checking for ngettext in -lintl... " >&6; } if ${ac_cv_lib_intl_ngettext+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lintl -liconv $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char ngettext (); int main () { return ngettext (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_intl_ngettext=yes else ac_cv_lib_intl_ngettext=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_intl_ngettext" >&5 $as_echo "$ac_cv_lib_intl_ngettext" >&6; } if test "x$ac_cv_lib_intl_ngettext" = xyes; then : { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dcgettext in -lintl" >&5 $as_echo_n "checking for dcgettext in -lintl... " >&6; } if ${ac_cv_lib_intl_dcgettext+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lintl -liconv $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char dcgettext (); int main () { return dcgettext (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_intl_dcgettext=yes else ac_cv_lib_intl_dcgettext=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_intl_dcgettext" >&5 $as_echo "$ac_cv_lib_intl_dcgettext" >&6; } if test "x$ac_cv_lib_intl_dcgettext" = xyes; then : gt_cv_func_dgettext_libintl=yes libintl_extra_libs=-liconv else : fi else : fi fi # # If we found libintl, then check in it for bind_textdomain_codeset(); # we'll prefer libc if neither have bind_textdomain_codeset(), # and both have dgettext and ngettext # if test "$gt_cv_func_dgettext_libintl" = "yes" ; then glib_save_LIBS="$LIBS" LIBS="$LIBS -lintl $libintl_extra_libs" unset ac_cv_func_bind_textdomain_codeset for ac_func in bind_textdomain_codeset do : ac_fn_c_check_func "$LINENO" "bind_textdomain_codeset" "ac_cv_func_bind_textdomain_codeset" if test "x$ac_cv_func_bind_textdomain_codeset" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_BIND_TEXTDOMAIN_CODESET 1 _ACEOF fi done LIBS="$glib_save_LIBS" if test "$ac_cv_func_bind_textdomain_codeset" = "yes" ; then gt_cv_func_dgettext_libc=no else if test "$gt_cv_func_dgettext_libc" = "yes" \ && test "$gt_cv_func_ngettext_libc" = "yes"; then gt_cv_func_dgettext_libintl=no fi fi fi fi if test "$gt_cv_func_dgettext_libc" = "yes" \ || test "$gt_cv_func_dgettext_libintl" = "yes"; then gt_cv_have_gettext=yes fi if test "$gt_cv_func_dgettext_libintl" = "yes"; then INTLLIBS="-lintl $libintl_extra_libs" fi if test "$gt_cv_have_gettext" = "yes"; then $as_echo "#define HAVE_GETTEXT 1" >>confdefs.h # Extract the first word of "msgfmt", so it can be a program name with args. set dummy msgfmt; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_MSGFMT+:} false; then : $as_echo_n "(cached) " >&6 else case "$MSGFMT" in /*) ac_cv_path_MSGFMT="$MSGFMT" # Let the user override the test with a path. ;; *) IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:" for ac_dir in $PATH; do test -z "$ac_dir" && ac_dir=. if test -f $ac_dir/$ac_word; then if test -z "`$ac_dir/$ac_word -h 2>&1 | grep 'dv '`"; then ac_cv_path_MSGFMT="$ac_dir/$ac_word" break fi fi done IFS="$ac_save_ifs" test -z "$ac_cv_path_MSGFMT" && ac_cv_path_MSGFMT="no" ;; esac fi MSGFMT="$ac_cv_path_MSGFMT" if test "$MSGFMT" != "no"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MSGFMT" >&5 $as_echo "$MSGFMT" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "$MSGFMT" != "no"; then glib_save_LIBS="$LIBS" LIBS="$LIBS $INTLLIBS" for ac_func in dcgettext do : ac_fn_c_check_func "$LINENO" "dcgettext" "ac_cv_func_dcgettext" if test "x$ac_cv_func_dcgettext" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_DCGETTEXT 1 _ACEOF fi done MSGFMT_OPTS= { $as_echo "$as_me:${as_lineno-$LINENO}: checking if msgfmt accepts -c" >&5 $as_echo_n "checking if msgfmt accepts -c... " >&6; } cat >conftest.foo <<_ACEOF msgid "" msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Project-Id-Version: test 1.0\n" "PO-Revision-Date: 2007-02-15 12:01+0100\n" "Last-Translator: test \n" "Language-Team: C \n" "MIME-Version: 1.0\n" "Content-Transfer-Encoding: 8bit\n" _ACEOF if { { $as_echo "$as_me:${as_lineno-$LINENO}: \$MSGFMT -c -o /dev/null conftest.foo"; } >&5 ($MSGFMT -c -o /dev/null conftest.foo) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then MSGFMT_OPTS=-c; { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } echo "$as_me: failed input was:" >&5 sed 's/^/| /' conftest.foo >&5 fi # Extract the first word of "gmsgfmt", so it can be a program name with args. set dummy gmsgfmt; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_GMSGFMT+:} false; then : $as_echo_n "(cached) " >&6 else case $GMSGFMT in [\\/]* | ?:[\\/]*) ac_cv_path_GMSGFMT="$GMSGFMT" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_GMSGFMT="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS test -z "$ac_cv_path_GMSGFMT" && ac_cv_path_GMSGFMT="$MSGFMT" ;; esac fi GMSGFMT=$ac_cv_path_GMSGFMT if test -n "$GMSGFMT"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $GMSGFMT" >&5 $as_echo "$GMSGFMT" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi # Extract the first word of "xgettext", so it can be a program name with args. set dummy xgettext; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_XGETTEXT+:} false; then : $as_echo_n "(cached) " >&6 else case "$XGETTEXT" in /*) ac_cv_path_XGETTEXT="$XGETTEXT" # Let the user override the test with a path. ;; *) IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:" for ac_dir in $PATH; do test -z "$ac_dir" && ac_dir=. if test -f $ac_dir/$ac_word; then if test -z "`$ac_dir/$ac_word -h 2>&1 | grep '(HELP)'`"; then ac_cv_path_XGETTEXT="$ac_dir/$ac_word" break fi fi done IFS="$ac_save_ifs" test -z "$ac_cv_path_XGETTEXT" && ac_cv_path_XGETTEXT=":" ;; esac fi XGETTEXT="$ac_cv_path_XGETTEXT" if test "$XGETTEXT" != ":"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $XGETTEXT" >&5 $as_echo "$XGETTEXT" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { extern int _nl_msg_cat_cntr; return _nl_msg_cat_cntr ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : CATOBJEXT=.gmo DATADIRNAME=share else case $host in *-*-solaris*) ac_fn_c_check_func "$LINENO" "bind_textdomain_codeset" "ac_cv_func_bind_textdomain_codeset" if test "x$ac_cv_func_bind_textdomain_codeset" = xyes; then : CATOBJEXT=.gmo DATADIRNAME=share else CATOBJEXT=.mo DATADIRNAME=lib fi ;; *-*-openbsd*) CATOBJEXT=.mo DATADIRNAME=share ;; *) CATOBJEXT=.mo DATADIRNAME=lib ;; esac fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS="$glib_save_LIBS" INSTOBJEXT=.mo else gt_cv_have_gettext=no fi fi fi if test "$gt_cv_have_gettext" = "yes" ; then $as_echo "#define ENABLE_NLS 1" >>confdefs.h fi if test "$XGETTEXT" != ":"; then if $XGETTEXT --omit-header /dev/null 2> /dev/null; then : ; else { $as_echo "$as_me:${as_lineno-$LINENO}: result: found xgettext program is not GNU xgettext; ignore it" >&5 $as_echo "found xgettext program is not GNU xgettext; ignore it" >&6; } XGETTEXT=":" fi fi # We need to process the po/ directory. POSUB=po ac_config_commands="$ac_config_commands default-1" for lang in $ALL_LINGUAS; do GMOFILES="$GMOFILES $lang.gmo" POFILES="$POFILES $lang.po" done if test "$gt_cv_have_gettext" = "yes"; then if test "x$ALL_LINGUAS" = "x"; then LINGUAS= else { $as_echo "$as_me:${as_lineno-$LINENO}: checking for catalogs to be installed" >&5 $as_echo_n "checking for catalogs to be installed... " >&6; } NEW_LINGUAS= for presentlang in $ALL_LINGUAS; do useit=no if test "%UNSET%" != "${LINGUAS-%UNSET%}"; then desiredlanguages="$LINGUAS" else desiredlanguages="$ALL_LINGUAS" fi for desiredlang in $desiredlanguages; do # Use the presentlang catalog if desiredlang is # a. equal to presentlang, or # b. a variant of presentlang (because in this case, # presentlang can be used as a fallback for messages # which are not translated in the desiredlang catalog). case "$desiredlang" in "$presentlang"*) useit=yes;; esac done if test $useit = yes; then NEW_LINGUAS="$NEW_LINGUAS $presentlang" fi done LINGUAS=$NEW_LINGUAS { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LINGUAS" >&5 $as_echo "$LINGUAS" >&6; } fi if test -n "$LINGUAS"; then for lang in $LINGUAS; do CATALOGS="$CATALOGS $lang$CATOBJEXT"; done fi fi MKINSTALLDIRS= if test -n "$ac_aux_dir"; then MKINSTALLDIRS="$ac_aux_dir/mkinstalldirs" fi if test -z "$MKINSTALLDIRS"; then MKINSTALLDIRS="\$(top_srcdir)/mkinstalldirs" fi test -d po || mkdir po if test "x$srcdir" != "x."; then if test "x`echo $srcdir | sed 's@/.*@@'`" = "x"; then posrcprefix="$srcdir/" else posrcprefix="../$srcdir/" fi else posrcprefix="../" fi rm -f po/POTFILES sed -e "/^#/d" -e "/^\$/d" -e "s,.*, $posrcprefix& \\\\," -e "\$s/\(.*\) \\\\/\1/" \ < $srcdir/po/POTFILES.in > po/POTFILES MKINSTALLDIRS="$INSTALL_DIRS" ############################################################################### # # Check for -lXmu (some fucked up vendors don't ship it...) # ############################################################################### have_xmu=no ac_save_CPPFLAGS="$CPPFLAGS" if test \! -z "$includedir" ; then CPPFLAGS="$CPPFLAGS -I$includedir" fi CPPFLAGS="$CPPFLAGS $X_CFLAGS" CPPFLAGS=`eval eval eval eval eval eval eval eval eval echo $CPPFLAGS` ac_fn_c_check_header_compile "$LINENO" "X11/Xmu/Error.h" "ac_cv_header_X11_Xmu_Error_h" "#include #include #include " if test "x$ac_cv_header_X11_Xmu_Error_h" = xyes; then : have_xmu=yes fi CPPFLAGS="$ac_save_CPPFLAGS" if test "$have_xmu" = no ; then XMU_SRCS='$(UTILS_SRC)/xmu.c' XMU_OBJS='$(UTILS_BIN)/xmu.o' XMU_LIBS='' else XMU_SRCS='' XMU_OBJS='' XMU_LIBS='-lXmu' $as_echo "#define HAVE_XMU 1" >>confdefs.h fi ############################################################################### # # Check for the SunOS 4.1.x _get_wmShellWidgetClass bug. # See comp.windows.x FAQ question 124. The right fix is to # get OpenWindows 3.0 patches 100512-02 and 100573-03. # ############################################################################### if test "$have_xmu" = yes ; then case "$host" in *-sunos4*) { $as_echo "$as_me:${as_lineno-$LINENO}: checking for the SunOS 4.1.x _get_wmShellWidgetClass bug" >&5 $as_echo_n "checking for the SunOS 4.1.x _get_wmShellWidgetClass bug... " >&6; } if ${ac_cv_sunos_xmu_bug+:} false; then : $as_echo_n "(cached) " >&6 else ac_save_LDFLAGS="$LDFLAGS" if test \! -z "$x_libraries" ; then LDFLAGS="$LDFLAGS -L$x_libraries" fi # Note: this trick never works! (Generally.) # We're only getting away with using AC_TRY_LINK # with X libraries because we know it's SunOS. LDFLAGS="$LDFLAGS -lXmu -lXt -lX11 -lXext -lm" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_sunos_xmu_bug=no else ac_cv_sunos_xmu_bug=yes fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LDFLAGS="$ac_save_LDFLAGS" fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sunos_xmu_bug" >&5 $as_echo "$ac_cv_sunos_xmu_bug" >&6; } if test "$ac_cv_sunos_xmu_bug" = yes ; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the compiler understands -static" >&5 $as_echo_n "checking whether the compiler understands -static... " >&6; } if ${ac_cv_ld_static+:} false; then : $as_echo_n "(cached) " >&6 else ac_save_LDFLAGS="$LDFLAGS" LDFLAGS="$LDFLAGS -static" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_ld_static=yes else ac_cv_ld_static=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LDFLAGS="$ac_save_LDFLAGS" fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_ld_static" >&5 $as_echo "$ac_cv_ld_static" >&6; } if test "$ac_cv_ld_static" = yes ; then LDFLAGS="$LDFLAGS -static" else LDFLAGS="$LDFLAGS -Bstatic" fi fi ;; esac fi ############################################################################### # # Handle the --with-hackdir option # ############################################################################### have_hackdir=yes with_hackdir_req=unspecified # Check whether --with-hackdir was given. if test "${with_hackdir+set}" = set; then : withval=$with_hackdir; with_hackdir="$withval"; with_hackdir_req="$withval" else with_hackdir=yes fi if test x"$with_hackdir" = xyes; then HACKDIR='${libexecdir}/xscreensaver' elif test x"$with_hackdir" = xno; then HACKDIR='${bindir}' else HACKDIR=$with_hackdir fi # canonicalize slashes. HACKDIR=`echo "${HACKDIR}" | sed 's@/$@@;s@//*@/@g'` # Expand HACKDIR as HACKDIR_FULL HACKDIR_FULL=`eval eval eval eval eval eval eval eval eval echo $HACKDIR` # This option used to be called --enable-subdir; make sure that is no longer # used, since configure brain-damagedly ignores unknown --enable options. obsolete_enable= # Check whether --enable-subdir was given. if test "${enable_subdir+set}" = set; then : enableval=$enable_subdir; obsolete_enable=yes fi if test -n "$obsolete_enable"; then echo "error: the --enable-subdir option has been replaced with" echo " the new --with-hackdir option; see \`configure --help'" echo " for more information." exit 1 fi ############################################################################### # # Handle the --with-configdir option # Help for --with-x-app-defaults option added. # ############################################################################### have_configdir=yes with_configdir_req=unspecified # Check whether --with-configdir was given. if test "${with_configdir+set}" = set; then : withval=$with_configdir; with_configdir="$withval"; with_configdir_req="$withval" else with_configdir=yes fi if test x"$with_configdir" = xyes; then HACK_CONF_DIR='${datadir}/xscreensaver/config' elif test x"$with_configdir" = xno; then echo "error: must be yes, or a pathname: --with-configdir=$with_configdir" exit 1 else # there must be a better way than this... if test -z "`echo $with_configdir | sed 's@^/.*@@'`" ; then # absolute path HACK_CONF_DIR=$with_configdir else # relative path HACK_CONF_DIR="\${exec_prefix}$with_configdir" fi fi ############################################################################### # # Check for the SGI SCREEN_SAVER server extension. # ############################################################################### #have_sgi=no #with_sgi_req=unspecified #AC_ARG_WITH(sgi-ext, #[Except where noted, all of the --with options below can also take a #directory argument: for example, `--with-motif=/opt/Motif'. That would #cause /opt/Motif/include/ to be added to the -I list, and /opt/Motif/lib/ #to be added to the -L list, assuming those directories exist. # #By default, support for each of these options will be built in, if the #relevant library routines exist. At run time, they will then be used #only if the X server being used supports them. Each --with option has #a corresponding --without option, to override building support for them #at all. # #Screen blanking and idle-detection options: # # --with-sgi-ext Include support for the SGI SCREEN_SAVER extension.], # [with_sgi="$withval"; with_sgi_req="$withval"],[with_sgi=yes]) # #HANDLE_X_PATH_ARG(with_sgi, --with-sgi-ext, SGI SCREEN_SAVER) # #if test "$with_sgi" = yes; then # AC_CHECK_X_HEADER(X11/extensions/XScreenSaver.h, # [have_sgi=yes # AC_DEFINE(HAVE_SGI_SAVER_EXTENSION)],, # [#include ]) # #elif test "$with_sgi" != no; then # echo "error: must be yes or no: --with-sgi-ext=$with_sgi" # exit 1 #fi ############################################################################### # # Check for the XIDLE server extension. # ############################################################################### #have_xidle=no #with_xidle_req=unspecified #AC_ARG_WITH(xidle-ext, #[ --with-xidle-ext Include support for the XIDLE extension.], # [with_xidle="$withval"; with_xidle_req="$withval"],[with_xidle=yes]) # #HANDLE_X_PATH_ARG(with_xidle, --with-xidle-ext, XIDLE) # #if test "$with_xidle" = yes; then # AC_CHECK_X_HEADER(X11/extensions/xidle.h, # [have_xidle=yes # AC_DEFINE(HAVE_XIDLE_EXTENSION)],, # [#include ]) #elif test "$with_xidle" != no; then # echo "error: must be yes or no: --with-xidle-ext=$with_xidle" # exit 1 #fi ############################################################################### # # Check for the SGI-VIDEO-CONTROL server extension. # ############################################################################### #have_sgivc=no #with_sgivc_req=unspecified #AC_ARG_WITH(sgivc-ext, #[ --with-sgivc-ext Include support for the SGI-VIDEO-CONTROL extension.], # [with_sgivc="$withval"; with_sgivc_req="$withval"],[with_sgivc=yes]) # #HANDLE_X_PATH_ARG(with_sgivc, --with-sgivc-ext, SGI-VIDEO-CONTROL) # #if test "$with_sgivc" = yes; then # # # first check for XSGIvc.h # AC_CHECK_X_HEADER(X11/extensions/XSGIvc.h, [have_sgivc=yes],, # [#include ]) # # # if that succeeded, then check for the -lXsgivc # if test "$have_sgivc" = yes; then # have_sgivc=no # AC_CHECK_X_LIB(Xsgivc, XSGIvcQueryGammaMap, # [have_sgivc=yes; SAVER_LIBS="$SAVER_LIBS -lXsgivc"], [true], # -lXext -lX11) # fi # # # if that succeeded, then we've really got it. # if test "$have_sgivc" = yes; then # AC_DEFINE(HAVE_SGI_VC_EXTENSION) # fi # #elif test "$with_sgivc" != no; then # echo "error: must be yes or no: --with-sgivc-ext=$with_sgivc" # exit 1 #fi ############################################################################### # # Check for the DPMS server extension. # ############################################################################### have_dpms=no with_dpms_req=unspecified # Check whether --with-dpms-ext was given. if test "${with_dpms_ext+set}" = set; then : withval=$with_dpms_ext; with_dpms="$withval"; with_dpms_req="$withval" else with_dpms=yes fi case "$with_dpms" in yes) ;; no) ;; /*) { $as_echo "$as_me:${as_lineno-$LINENO}: checking for DPMS headers" >&5 $as_echo_n "checking for DPMS headers... " >&6; } d=$with_dpms/include if test -d $d; then X_CFLAGS="-I$d $X_CFLAGS" { $as_echo "$as_me:${as_lineno-$LINENO}: result: $d" >&5 $as_echo "$d" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: not found ($d: no such directory)" >&5 $as_echo "not found ($d: no such directory)" >&6; } fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for DPMS libs" >&5 $as_echo_n "checking for DPMS libs... " >&6; } d=$with_dpms/lib if test -d $d; then X_LIBS="-L$d $X_LIBS" { $as_echo "$as_me:${as_lineno-$LINENO}: result: $d" >&5 $as_echo "$d" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: not found ($d: no such directory)" >&5 $as_echo "not found ($d: no such directory)" >&6; } fi # replace the directory string with "yes". with_dpms_req="yes" with_dpms=$with_dpms_req ;; *) echo "" echo "error: argument to --with-dpms-ext must be \"yes\", \"no\", or a directory." echo " If it is a directory, then \`DIR/include' will be added to" echo " the -I list, and \`DIR/lib' will be added to the -L list." exit 1 ;; esac if test "$with_dpms" = yes; then # first check for dpms.h ac_save_CPPFLAGS="$CPPFLAGS" if test \! -z "$includedir" ; then CPPFLAGS="$CPPFLAGS -I$includedir" fi CPPFLAGS="$CPPFLAGS $X_CFLAGS" CPPFLAGS=`eval eval eval eval eval eval eval eval eval echo $CPPFLAGS` ac_fn_c_check_header_compile "$LINENO" "X11/extensions/dpms.h" "ac_cv_header_X11_extensions_dpms_h" "#include #include " if test "x$ac_cv_header_X11_extensions_dpms_h" = xyes; then : have_dpms=yes fi CPPFLAGS="$ac_save_CPPFLAGS" # if that succeeded, then check for the DPMS code in the libraries if test "$have_dpms" = yes; then # first look in -lXext (this is where it is with XFree86 4.0) have_dpms=no ac_save_CPPFLAGS="$CPPFLAGS" ac_save_LDFLAGS="$LDFLAGS" # ac_save_LIBS="$LIBS" if test \! -z "$includedir" ; then CPPFLAGS="$CPPFLAGS -I$includedir" fi # note: $X_CFLAGS includes $x_includes CPPFLAGS="$CPPFLAGS $X_CFLAGS" if test \! -z "$libdir" ; then LDFLAGS="$LDFLAGS -L$libdir" fi # note: $X_LIBS includes $x_libraries LDFLAGS="$LDFLAGS $X_LIBS $X_EXTRA_LIBS" CPPFLAGS=`eval eval eval eval eval eval eval eval eval echo $CPPFLAGS` LDFLAGS=`eval eval eval eval eval eval eval eval eval echo $LDFLAGS` { $as_echo "$as_me:${as_lineno-$LINENO}: checking for DPMSInfo in -lXext" >&5 $as_echo_n "checking for DPMSInfo in -lXext... " >&6; } if ${ac_cv_lib_Xext_DPMSInfo+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lXext -lXext -lX11 $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char DPMSInfo (); int main () { return DPMSInfo (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_Xext_DPMSInfo=yes else ac_cv_lib_Xext_DPMSInfo=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_Xext_DPMSInfo" >&5 $as_echo "$ac_cv_lib_Xext_DPMSInfo" >&6; } if test "x$ac_cv_lib_Xext_DPMSInfo" = xyes; then : have_dpms=yes else true fi CPPFLAGS="$ac_save_CPPFLAGS" LDFLAGS="$ac_save_LDFLAGS" # LIBS="$ac_save_LIBS" # if that failed, look in -lXdpms (this is where it was in XFree86 3.x) if test "$have_dpms" = no; then ac_save_CPPFLAGS="$CPPFLAGS" ac_save_LDFLAGS="$LDFLAGS" # ac_save_LIBS="$LIBS" if test \! -z "$includedir" ; then CPPFLAGS="$CPPFLAGS -I$includedir" fi # note: $X_CFLAGS includes $x_includes CPPFLAGS="$CPPFLAGS $X_CFLAGS" if test \! -z "$libdir" ; then LDFLAGS="$LDFLAGS -L$libdir" fi # note: $X_LIBS includes $x_libraries LDFLAGS="$LDFLAGS $X_LIBS $X_EXTRA_LIBS" CPPFLAGS=`eval eval eval eval eval eval eval eval eval echo $CPPFLAGS` LDFLAGS=`eval eval eval eval eval eval eval eval eval echo $LDFLAGS` { $as_echo "$as_me:${as_lineno-$LINENO}: checking for DPMSInfo in -lXdpms" >&5 $as_echo_n "checking for DPMSInfo in -lXdpms... " >&6; } if ${ac_cv_lib_Xdpms_DPMSInfo+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lXdpms -lXext -lX11 $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char DPMSInfo (); int main () { return DPMSInfo (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_Xdpms_DPMSInfo=yes else ac_cv_lib_Xdpms_DPMSInfo=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_Xdpms_DPMSInfo" >&5 $as_echo "$ac_cv_lib_Xdpms_DPMSInfo" >&6; } if test "x$ac_cv_lib_Xdpms_DPMSInfo" = xyes; then : have_dpms=yes; XDPMS_LIBS="-lXdpms" else true fi CPPFLAGS="$ac_save_CPPFLAGS" LDFLAGS="$ac_save_LDFLAGS" # LIBS="$ac_save_LIBS" fi fi # if that succeeded, then we've really got it. if test "$have_dpms" = yes; then $as_echo "#define HAVE_DPMS_EXTENSION 1" >>confdefs.h fi elif test "$with_dpms" != no; then echo "error: must be yes or no: --with-dpms-ext=$with_dpms" exit 1 fi ############################################################################### # # Check for the XINERAMA server extension. # ############################################################################### have_xinerama=no with_xinerama_req=unspecified # Check whether --with-xinerama-ext was given. if test "${with_xinerama_ext+set}" = set; then : withval=$with_xinerama_ext; with_xinerama="$withval"; with_xinerama_req="$withval" else with_xinerama=yes fi case "$with_xinerama" in yes) ;; no) ;; /*) { $as_echo "$as_me:${as_lineno-$LINENO}: checking for XINERAMA headers" >&5 $as_echo_n "checking for XINERAMA headers... " >&6; } d=$with_xinerama/include if test -d $d; then X_CFLAGS="-I$d $X_CFLAGS" { $as_echo "$as_me:${as_lineno-$LINENO}: result: $d" >&5 $as_echo "$d" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: not found ($d: no such directory)" >&5 $as_echo "not found ($d: no such directory)" >&6; } fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for XINERAMA libs" >&5 $as_echo_n "checking for XINERAMA libs... " >&6; } d=$with_xinerama/lib if test -d $d; then X_LIBS="-L$d $X_LIBS" { $as_echo "$as_me:${as_lineno-$LINENO}: result: $d" >&5 $as_echo "$d" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: not found ($d: no such directory)" >&5 $as_echo "not found ($d: no such directory)" >&6; } fi # replace the directory string with "yes". with_xinerama_req="yes" with_xinerama=$with_xinerama_req ;; *) echo "" echo "error: argument to --with-xinerama-ext must be \"yes\", \"no\", or a directory." echo " If it is a directory, then \`DIR/include' will be added to" echo " the -I list, and \`DIR/lib' will be added to the -L list." exit 1 ;; esac if test "$with_xinerama" = yes; then # first check for Xinerama.h ac_save_CPPFLAGS="$CPPFLAGS" if test \! -z "$includedir" ; then CPPFLAGS="$CPPFLAGS -I$includedir" fi CPPFLAGS="$CPPFLAGS $X_CFLAGS" CPPFLAGS=`eval eval eval eval eval eval eval eval eval echo $CPPFLAGS` ac_fn_c_check_header_compile "$LINENO" "X11/extensions/Xinerama.h" "ac_cv_header_X11_extensions_Xinerama_h" "#include " if test "x$ac_cv_header_X11_extensions_Xinerama_h" = xyes; then : have_xinerama=yes fi CPPFLAGS="$ac_save_CPPFLAGS" # if that succeeded, then check for the XINERAMA code in the libraries if test "$have_xinerama" = yes; then # first look in -lXext have_xinerama=no ac_save_CPPFLAGS="$CPPFLAGS" ac_save_LDFLAGS="$LDFLAGS" # ac_save_LIBS="$LIBS" if test \! -z "$includedir" ; then CPPFLAGS="$CPPFLAGS -I$includedir" fi # note: $X_CFLAGS includes $x_includes CPPFLAGS="$CPPFLAGS $X_CFLAGS" if test \! -z "$libdir" ; then LDFLAGS="$LDFLAGS -L$libdir" fi # note: $X_LIBS includes $x_libraries LDFLAGS="$LDFLAGS $X_LIBS $X_EXTRA_LIBS" CPPFLAGS=`eval eval eval eval eval eval eval eval eval echo $CPPFLAGS` LDFLAGS=`eval eval eval eval eval eval eval eval eval echo $LDFLAGS` { $as_echo "$as_me:${as_lineno-$LINENO}: checking for XineramaQueryScreens in -lXext" >&5 $as_echo_n "checking for XineramaQueryScreens in -lXext... " >&6; } if ${ac_cv_lib_Xext_XineramaQueryScreens+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lXext -lXext -lX11 $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char XineramaQueryScreens (); int main () { return XineramaQueryScreens (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_Xext_XineramaQueryScreens=yes else ac_cv_lib_Xext_XineramaQueryScreens=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_Xext_XineramaQueryScreens" >&5 $as_echo "$ac_cv_lib_Xext_XineramaQueryScreens" >&6; } if test "x$ac_cv_lib_Xext_XineramaQueryScreens" = xyes; then : have_xinerama=yes else true fi CPPFLAGS="$ac_save_CPPFLAGS" LDFLAGS="$ac_save_LDFLAGS" # LIBS="$ac_save_LIBS" # if that failed, look in -lXinerama (this is where it is in XFree86 4.1.) if test "$have_xinerama" = no; then ac_save_CPPFLAGS="$CPPFLAGS" ac_save_LDFLAGS="$LDFLAGS" # ac_save_LIBS="$LIBS" if test \! -z "$includedir" ; then CPPFLAGS="$CPPFLAGS -I$includedir" fi # note: $X_CFLAGS includes $x_includes CPPFLAGS="$CPPFLAGS $X_CFLAGS" if test \! -z "$libdir" ; then LDFLAGS="$LDFLAGS -L$libdir" fi # note: $X_LIBS includes $x_libraries LDFLAGS="$LDFLAGS $X_LIBS $X_EXTRA_LIBS" CPPFLAGS=`eval eval eval eval eval eval eval eval eval echo $CPPFLAGS` LDFLAGS=`eval eval eval eval eval eval eval eval eval echo $LDFLAGS` { $as_echo "$as_me:${as_lineno-$LINENO}: checking for XineramaQueryScreens in -lXinerama" >&5 $as_echo_n "checking for XineramaQueryScreens in -lXinerama... " >&6; } if ${ac_cv_lib_Xinerama_XineramaQueryScreens+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lXinerama -lXext -lX11 $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char XineramaQueryScreens (); int main () { return XineramaQueryScreens (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_Xinerama_XineramaQueryScreens=yes else ac_cv_lib_Xinerama_XineramaQueryScreens=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_Xinerama_XineramaQueryScreens" >&5 $as_echo "$ac_cv_lib_Xinerama_XineramaQueryScreens" >&6; } if test "x$ac_cv_lib_Xinerama_XineramaQueryScreens" = xyes; then : have_xinerama=yes; XINERAMA_LIBS="-lXinerama" else true fi CPPFLAGS="$ac_save_CPPFLAGS" LDFLAGS="$ac_save_LDFLAGS" # LIBS="$ac_save_LIBS" fi fi # if that succeeded, then we've really got it. if test "$have_xinerama" = yes; then $as_echo "#define HAVE_XINERAMA 1" >>confdefs.h fi elif test "$with_xinerama" != no; then echo "error: must be yes or no: --with-xinerama-ext=$with_xinerama" exit 1 fi ############################################################################### # # Check for the XINPUT server extension. # ############################################################################### have_xinput=no with_xinput_req=unspecified # Check whether --with-xinput-ext was given. if test "${with_xinput_ext+set}" = set; then : withval=$with_xinput_ext; with_xinput="$withval"; with_xinput_req="$withval" else with_xinput=yes fi case "$with_xinput" in yes) ;; no) ;; /*) { $as_echo "$as_me:${as_lineno-$LINENO}: checking for XINPUT headers" >&5 $as_echo_n "checking for XINPUT headers... " >&6; } d=$with_xinput/include if test -d $d; then X_CFLAGS="-I$d $X_CFLAGS" { $as_echo "$as_me:${as_lineno-$LINENO}: result: $d" >&5 $as_echo "$d" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: not found ($d: no such directory)" >&5 $as_echo "not found ($d: no such directory)" >&6; } fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for XINPUT libs" >&5 $as_echo_n "checking for XINPUT libs... " >&6; } d=$with_xinput/lib if test -d $d; then X_LIBS="-L$d $X_LIBS" { $as_echo "$as_me:${as_lineno-$LINENO}: result: $d" >&5 $as_echo "$d" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: not found ($d: no such directory)" >&5 $as_echo "not found ($d: no such directory)" >&6; } fi # replace the directory string with "yes". with_xinput_req="yes" with_xinput=$with_xinput_req ;; *) echo "" echo "error: argument to --with-xinput-ext must be \"yes\", \"no\", or a directory." echo " If it is a directory, then \`DIR/include' will be added to" echo " the -I list, and \`DIR/lib' will be added to the -L list." exit 1 ;; esac if test "$with_xinput" = yes; then # first check for Xinput.h ac_save_CPPFLAGS="$CPPFLAGS" if test \! -z "$includedir" ; then CPPFLAGS="$CPPFLAGS -I$includedir" fi CPPFLAGS="$CPPFLAGS $X_CFLAGS" CPPFLAGS=`eval eval eval eval eval eval eval eval eval echo $CPPFLAGS` ac_fn_c_check_header_compile "$LINENO" "X11/extensions/XInput.h" "ac_cv_header_X11_extensions_XInput_h" "#include " if test "x$ac_cv_header_X11_extensions_XInput_h" = xyes; then : have_xinput=yes fi CPPFLAGS="$ac_save_CPPFLAGS" # if that succeeded, then check for libXi if test "$have_xinput" = yes; then have_xinput=no ac_save_CPPFLAGS="$CPPFLAGS" ac_save_LDFLAGS="$LDFLAGS" # ac_save_LIBS="$LIBS" if test \! -z "$includedir" ; then CPPFLAGS="$CPPFLAGS -I$includedir" fi # note: $X_CFLAGS includes $x_includes CPPFLAGS="$CPPFLAGS $X_CFLAGS" if test \! -z "$libdir" ; then LDFLAGS="$LDFLAGS -L$libdir" fi # note: $X_LIBS includes $x_libraries LDFLAGS="$LDFLAGS $X_LIBS $X_EXTRA_LIBS" CPPFLAGS=`eval eval eval eval eval eval eval eval eval echo $CPPFLAGS` LDFLAGS=`eval eval eval eval eval eval eval eval eval echo $LDFLAGS` { $as_echo "$as_me:${as_lineno-$LINENO}: checking for XListInputDevices in -lXi" >&5 $as_echo_n "checking for XListInputDevices in -lXi... " >&6; } if ${ac_cv_lib_Xi_XListInputDevices+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lXi -lXext -lX11 $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char XListInputDevices (); int main () { return XListInputDevices (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_Xi_XListInputDevices=yes else ac_cv_lib_Xi_XListInputDevices=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_Xi_XListInputDevices" >&5 $as_echo "$ac_cv_lib_Xi_XListInputDevices" >&6; } if test "x$ac_cv_lib_Xi_XListInputDevices" = xyes; then : have_xinput=yes; SAVER_LIBS="$SAVER_LIBS -lXi" else true fi CPPFLAGS="$ac_save_CPPFLAGS" LDFLAGS="$ac_save_LDFLAGS" # LIBS="$ac_save_LIBS" fi # if that succeeded, then we've really got it. if test "$have_xinput" = yes; then $as_echo "#define HAVE_XINPUT 1" >>confdefs.h fi elif test "$with_xinput" != no; then echo "error: must be yes or no: --with-xinput-ext=$with_xinput" exit 1 fi ############################################################################### # # Check for the XF86VMODE server extension (for virtual screens.) # ############################################################################### have_xf86vmode=no with_xf86vmode_req=unspecified # Check whether --with-xf86vmode-ext was given. if test "${with_xf86vmode_ext+set}" = set; then : withval=$with_xf86vmode_ext; with_xf86vmode="$withval"; with_xf86vmode_req="$withval" else with_xf86vmode=yes fi case "$with_xf86vmode" in yes) ;; no) ;; /*) { $as_echo "$as_me:${as_lineno-$LINENO}: checking for xf86vmode headers" >&5 $as_echo_n "checking for xf86vmode headers... " >&6; } d=$with_xf86vmode/include if test -d $d; then X_CFLAGS="-I$d $X_CFLAGS" { $as_echo "$as_me:${as_lineno-$LINENO}: result: $d" >&5 $as_echo "$d" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: not found ($d: no such directory)" >&5 $as_echo "not found ($d: no such directory)" >&6; } fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for xf86vmode libs" >&5 $as_echo_n "checking for xf86vmode libs... " >&6; } d=$with_xf86vmode/lib if test -d $d; then X_LIBS="-L$d $X_LIBS" { $as_echo "$as_me:${as_lineno-$LINENO}: result: $d" >&5 $as_echo "$d" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: not found ($d: no such directory)" >&5 $as_echo "not found ($d: no such directory)" >&6; } fi # replace the directory string with "yes". with_xf86vmode_req="yes" with_xf86vmode=$with_xf86vmode_req ;; *) echo "" echo "error: argument to --with-xf86vmode-ext must be \"yes\", \"no\", or a directory." echo " If it is a directory, then \`DIR/include' will be added to" echo " the -I list, and \`DIR/lib' will be added to the -L list." exit 1 ;; esac VIDMODE_LIBS="" if test "$with_xf86vmode" = yes; then # first check for xf86vmode.h ac_save_CPPFLAGS="$CPPFLAGS" if test \! -z "$includedir" ; then CPPFLAGS="$CPPFLAGS -I$includedir" fi CPPFLAGS="$CPPFLAGS $X_CFLAGS" CPPFLAGS=`eval eval eval eval eval eval eval eval eval echo $CPPFLAGS` ac_fn_c_check_header_compile "$LINENO" "X11/extensions/xf86vmode.h" "ac_cv_header_X11_extensions_xf86vmode_h" "#include " if test "x$ac_cv_header_X11_extensions_xf86vmode_h" = xyes; then : have_xf86vmode=yes fi CPPFLAGS="$ac_save_CPPFLAGS" # if that succeeded, then check for the -lXxf86vm if test "$have_xf86vmode" = yes; then have_xf86vmode=no ac_save_CPPFLAGS="$CPPFLAGS" ac_save_LDFLAGS="$LDFLAGS" # ac_save_LIBS="$LIBS" if test \! -z "$includedir" ; then CPPFLAGS="$CPPFLAGS -I$includedir" fi # note: $X_CFLAGS includes $x_includes CPPFLAGS="$CPPFLAGS $X_CFLAGS" if test \! -z "$libdir" ; then LDFLAGS="$LDFLAGS -L$libdir" fi # note: $X_LIBS includes $x_libraries LDFLAGS="$LDFLAGS $X_LIBS $X_EXTRA_LIBS" CPPFLAGS=`eval eval eval eval eval eval eval eval eval echo $CPPFLAGS` LDFLAGS=`eval eval eval eval eval eval eval eval eval echo $LDFLAGS` { $as_echo "$as_me:${as_lineno-$LINENO}: checking for XF86VidModeGetViewPort in -lXxf86vm" >&5 $as_echo_n "checking for XF86VidModeGetViewPort in -lXxf86vm... " >&6; } if ${ac_cv_lib_Xxf86vm_XF86VidModeGetViewPort+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lXxf86vm -lXext -lX11 $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char XF86VidModeGetViewPort (); int main () { return XF86VidModeGetViewPort (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_Xxf86vm_XF86VidModeGetViewPort=yes else ac_cv_lib_Xxf86vm_XF86VidModeGetViewPort=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_Xxf86vm_XF86VidModeGetViewPort" >&5 $as_echo "$ac_cv_lib_Xxf86vm_XF86VidModeGetViewPort" >&6; } if test "x$ac_cv_lib_Xxf86vm_XF86VidModeGetViewPort" = xyes; then : have_xf86vmode=yes; VIDMODE_LIBS="-lXxf86vm"; SAVER_LIBS="$SAVER_LIBS $VIDMODE_LIBS" else true fi CPPFLAGS="$ac_save_CPPFLAGS" LDFLAGS="$ac_save_LDFLAGS" # LIBS="$ac_save_LIBS" fi # if that succeeded, then we've really got it. if test "$have_xf86vmode" = yes; then $as_echo "#define HAVE_XF86VMODE 1" >>confdefs.h fi elif test "$with_xf86vmode" != no; then echo "error: must be yes or no: --with-xf86vmode-ext=$with_xf86vmode" exit 1 fi ############################################################################### # # Check for the XF86VMODE server extension (for gamma fading.) # ############################################################################### have_xf86gamma=no have_xf86gamma_ramp=no with_xf86gamma_req=unspecified # Check whether --with-xf86gamma-ext was given. if test "${with_xf86gamma_ext+set}" = set; then : withval=$with_xf86gamma_ext; with_xf86gamma="$withval"; with_xf86gamma_req="$withval" else with_xf86gamma=yes fi case "$with_xf86gamma" in yes) ;; no) ;; /*) { $as_echo "$as_me:${as_lineno-$LINENO}: checking for xf86gamma headers" >&5 $as_echo_n "checking for xf86gamma headers... " >&6; } d=$with_xf86gamma/include if test -d $d; then X_CFLAGS="-I$d $X_CFLAGS" { $as_echo "$as_me:${as_lineno-$LINENO}: result: $d" >&5 $as_echo "$d" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: not found ($d: no such directory)" >&5 $as_echo "not found ($d: no such directory)" >&6; } fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for xf86gamma libs" >&5 $as_echo_n "checking for xf86gamma libs... " >&6; } d=$with_xf86gamma/lib if test -d $d; then X_LIBS="-L$d $X_LIBS" { $as_echo "$as_me:${as_lineno-$LINENO}: result: $d" >&5 $as_echo "$d" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: not found ($d: no such directory)" >&5 $as_echo "not found ($d: no such directory)" >&6; } fi # replace the directory string with "yes". with_xf86gamma_req="yes" with_xf86gamma=$with_xf86gamma_req ;; *) echo "" echo "error: argument to --with-xf86gamma-ext must be \"yes\", \"no\", or a directory." echo " If it is a directory, then \`DIR/include' will be added to" echo " the -I list, and \`DIR/lib' will be added to the -L list." exit 1 ;; esac if test "$with_xf86gamma" = yes; then # first check for xf86vmode.h, if we haven't already if test "$have_xf86vmode" = yes; then have_xf86gamma=yes else ac_save_CPPFLAGS="$CPPFLAGS" if test \! -z "$includedir" ; then CPPFLAGS="$CPPFLAGS -I$includedir" fi CPPFLAGS="$CPPFLAGS $X_CFLAGS" CPPFLAGS=`eval eval eval eval eval eval eval eval eval echo $CPPFLAGS` ac_fn_c_check_header_compile "$LINENO" "X11/extensions/xf86vmode.h" "ac_cv_header_X11_extensions_xf86vmode_h" "#include " if test "x$ac_cv_header_X11_extensions_xf86vmode_h" = xyes; then : have_xf86gamma=yes fi CPPFLAGS="$ac_save_CPPFLAGS" fi # if that succeeded, then check for the -lXxf86vm if test "$have_xf86gamma" = yes; then have_xf86gamma=no ac_save_CPPFLAGS="$CPPFLAGS" ac_save_LDFLAGS="$LDFLAGS" # ac_save_LIBS="$LIBS" if test \! -z "$includedir" ; then CPPFLAGS="$CPPFLAGS -I$includedir" fi # note: $X_CFLAGS includes $x_includes CPPFLAGS="$CPPFLAGS $X_CFLAGS" if test \! -z "$libdir" ; then LDFLAGS="$LDFLAGS -L$libdir" fi # note: $X_LIBS includes $x_libraries LDFLAGS="$LDFLAGS $X_LIBS $X_EXTRA_LIBS" CPPFLAGS=`eval eval eval eval eval eval eval eval eval echo $CPPFLAGS` LDFLAGS=`eval eval eval eval eval eval eval eval eval echo $LDFLAGS` { $as_echo "$as_me:${as_lineno-$LINENO}: checking for XF86VidModeSetGamma in -lXxf86vm" >&5 $as_echo_n "checking for XF86VidModeSetGamma in -lXxf86vm... " >&6; } if ${ac_cv_lib_Xxf86vm_XF86VidModeSetGamma+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lXxf86vm -lXext -lX11 $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char XF86VidModeSetGamma (); int main () { return XF86VidModeSetGamma (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_Xxf86vm_XF86VidModeSetGamma=yes else ac_cv_lib_Xxf86vm_XF86VidModeSetGamma=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_Xxf86vm_XF86VidModeSetGamma" >&5 $as_echo "$ac_cv_lib_Xxf86vm_XF86VidModeSetGamma" >&6; } if test "x$ac_cv_lib_Xxf86vm_XF86VidModeSetGamma" = xyes; then : have_xf86gamma=yes else true fi CPPFLAGS="$ac_save_CPPFLAGS" LDFLAGS="$ac_save_LDFLAGS" # LIBS="$ac_save_LIBS" fi # check for the Ramp versions of the functions too. if test "$have_xf86gamma" = yes; then have_xf86gamma_ramp=no ac_save_CPPFLAGS="$CPPFLAGS" ac_save_LDFLAGS="$LDFLAGS" # ac_save_LIBS="$LIBS" if test \! -z "$includedir" ; then CPPFLAGS="$CPPFLAGS -I$includedir" fi # note: $X_CFLAGS includes $x_includes CPPFLAGS="$CPPFLAGS $X_CFLAGS" if test \! -z "$libdir" ; then LDFLAGS="$LDFLAGS -L$libdir" fi # note: $X_LIBS includes $x_libraries LDFLAGS="$LDFLAGS $X_LIBS $X_EXTRA_LIBS" CPPFLAGS=`eval eval eval eval eval eval eval eval eval echo $CPPFLAGS` LDFLAGS=`eval eval eval eval eval eval eval eval eval echo $LDFLAGS` { $as_echo "$as_me:${as_lineno-$LINENO}: checking for XF86VidModeSetGammaRamp in -lXxf86vm" >&5 $as_echo_n "checking for XF86VidModeSetGammaRamp in -lXxf86vm... " >&6; } if ${ac_cv_lib_Xxf86vm_XF86VidModeSetGammaRamp+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lXxf86vm -lXext -lX11 $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char XF86VidModeSetGammaRamp (); int main () { return XF86VidModeSetGammaRamp (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_Xxf86vm_XF86VidModeSetGammaRamp=yes else ac_cv_lib_Xxf86vm_XF86VidModeSetGammaRamp=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_Xxf86vm_XF86VidModeSetGammaRamp" >&5 $as_echo "$ac_cv_lib_Xxf86vm_XF86VidModeSetGammaRamp" >&6; } if test "x$ac_cv_lib_Xxf86vm_XF86VidModeSetGammaRamp" = xyes; then : have_xf86gamma_ramp=yes else true fi CPPFLAGS="$ac_save_CPPFLAGS" LDFLAGS="$ac_save_LDFLAGS" # LIBS="$ac_save_LIBS" fi # if those tests succeeded, then we've really got the functions. if test "$have_xf86gamma" = yes; then $as_echo "#define HAVE_XF86VMODE_GAMMA 1" >>confdefs.h fi if test "$have_xf86gamma_ramp" = yes; then $as_echo "#define HAVE_XF86VMODE_GAMMA_RAMP 1" >>confdefs.h fi # pull in the lib, if we haven't already if test "$have_xf86gamma" = yes -a "$have_xf86vmode" = no; then SAVER_LIBS="$SAVER_LIBS -lXxf86vm" fi elif test "$with_xf86gamma" != no; then echo "error: must be yes or no: --with-xf86gamma-ext=$with_xf86vmode" exit 1 fi ############################################################################### # # Check for the RANDR (Resize and Rotate) server extension. # # We need this to detect when the resolution of the desktop # has changed out from under us (this is a newer, different # mechanism than the XF86VMODE virtual viewports.) # ############################################################################### have_randr=no with_randr_req=unspecified # Check whether --with-randr-ext was given. if test "${with_randr_ext+set}" = set; then : withval=$with_randr_ext; with_randr="$withval"; with_randr_req="$withval" else with_randr=yes fi case "$with_randr" in yes) ;; no) ;; /*) { $as_echo "$as_me:${as_lineno-$LINENO}: checking for RANDR headers" >&5 $as_echo_n "checking for RANDR headers... " >&6; } d=$with_randr/include if test -d $d; then X_CFLAGS="-I$d $X_CFLAGS" { $as_echo "$as_me:${as_lineno-$LINENO}: result: $d" >&5 $as_echo "$d" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: not found ($d: no such directory)" >&5 $as_echo "not found ($d: no such directory)" >&6; } fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for RANDR libs" >&5 $as_echo_n "checking for RANDR libs... " >&6; } d=$with_randr/lib if test -d $d; then X_LIBS="-L$d $X_LIBS" { $as_echo "$as_me:${as_lineno-$LINENO}: result: $d" >&5 $as_echo "$d" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: not found ($d: no such directory)" >&5 $as_echo "not found ($d: no such directory)" >&6; } fi # replace the directory string with "yes". with_randr_req="yes" with_randr=$with_randr_req ;; *) echo "" echo "error: argument to --with-randr-ext must be \"yes\", \"no\", or a directory." echo " If it is a directory, then \`DIR/include' will be added to" echo " the -I list, and \`DIR/lib' will be added to the -L list." exit 1 ;; esac if test "$with_randr" = yes; then # first check for Xrandr.h ac_save_CPPFLAGS="$CPPFLAGS" if test \! -z "$includedir" ; then CPPFLAGS="$CPPFLAGS -I$includedir" fi CPPFLAGS="$CPPFLAGS $X_CFLAGS" CPPFLAGS=`eval eval eval eval eval eval eval eval eval echo $CPPFLAGS` ac_fn_c_check_header_compile "$LINENO" "X11/extensions/Xrandr.h" "ac_cv_header_X11_extensions_Xrandr_h" "#include " if test "x$ac_cv_header_X11_extensions_Xrandr_h" = xyes; then : have_randr=yes fi CPPFLAGS="$ac_save_CPPFLAGS" # if that succeeded, then check for the XRR code in the libraries if test "$have_randr" = yes; then # RANDR probably needs -lXrender xrender_libs= ac_save_CPPFLAGS="$CPPFLAGS" ac_save_LDFLAGS="$LDFLAGS" # ac_save_LIBS="$LIBS" if test \! -z "$includedir" ; then CPPFLAGS="$CPPFLAGS -I$includedir" fi # note: $X_CFLAGS includes $x_includes CPPFLAGS="$CPPFLAGS $X_CFLAGS" if test \! -z "$libdir" ; then LDFLAGS="$LDFLAGS -L$libdir" fi # note: $X_LIBS includes $x_libraries LDFLAGS="$LDFLAGS $X_LIBS $X_EXTRA_LIBS" CPPFLAGS=`eval eval eval eval eval eval eval eval eval echo $CPPFLAGS` LDFLAGS=`eval eval eval eval eval eval eval eval eval echo $LDFLAGS` { $as_echo "$as_me:${as_lineno-$LINENO}: checking for XRenderSetSubpixelOrder in -lXrender" >&5 $as_echo_n "checking for XRenderSetSubpixelOrder in -lXrender... " >&6; } if ${ac_cv_lib_Xrender_XRenderSetSubpixelOrder+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lXrender -lXext -lX11 $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char XRenderSetSubpixelOrder (); int main () { return XRenderSetSubpixelOrder (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_Xrender_XRenderSetSubpixelOrder=yes else ac_cv_lib_Xrender_XRenderSetSubpixelOrder=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_Xrender_XRenderSetSubpixelOrder" >&5 $as_echo "$ac_cv_lib_Xrender_XRenderSetSubpixelOrder" >&6; } if test "x$ac_cv_lib_Xrender_XRenderSetSubpixelOrder" = xyes; then : xrender_libs="-lXrender" else true fi CPPFLAGS="$ac_save_CPPFLAGS" LDFLAGS="$ac_save_LDFLAGS" # LIBS="$ac_save_LIBS" # first look for RANDR in -lXext have_randr=no ac_save_CPPFLAGS="$CPPFLAGS" ac_save_LDFLAGS="$LDFLAGS" # ac_save_LIBS="$LIBS" if test \! -z "$includedir" ; then CPPFLAGS="$CPPFLAGS -I$includedir" fi # note: $X_CFLAGS includes $x_includes CPPFLAGS="$CPPFLAGS $X_CFLAGS" if test \! -z "$libdir" ; then LDFLAGS="$LDFLAGS -L$libdir" fi # note: $X_LIBS includes $x_libraries LDFLAGS="$LDFLAGS $X_LIBS $X_EXTRA_LIBS" CPPFLAGS=`eval eval eval eval eval eval eval eval eval echo $CPPFLAGS` LDFLAGS=`eval eval eval eval eval eval eval eval eval echo $LDFLAGS` { $as_echo "$as_me:${as_lineno-$LINENO}: checking for XRRGetScreenInfo in -lXext" >&5 $as_echo_n "checking for XRRGetScreenInfo in -lXext... " >&6; } if ${ac_cv_lib_Xext_XRRGetScreenInfo+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lXext $xrender_libs -lXext -lX11 $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char XRRGetScreenInfo (); int main () { return XRRGetScreenInfo (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_Xext_XRRGetScreenInfo=yes else ac_cv_lib_Xext_XRRGetScreenInfo=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_Xext_XRRGetScreenInfo" >&5 $as_echo "$ac_cv_lib_Xext_XRRGetScreenInfo" >&6; } if test "x$ac_cv_lib_Xext_XRRGetScreenInfo" = xyes; then : have_randr=yes; SAVER_LIBS="$SAVER_LIBS $xrender_libs" else true fi CPPFLAGS="$ac_save_CPPFLAGS" LDFLAGS="$ac_save_LDFLAGS" # LIBS="$ac_save_LIBS" # if that failed, look in -lXrandr if test "$have_randr" = no; then ac_save_CPPFLAGS="$CPPFLAGS" ac_save_LDFLAGS="$LDFLAGS" # ac_save_LIBS="$LIBS" if test \! -z "$includedir" ; then CPPFLAGS="$CPPFLAGS -I$includedir" fi # note: $X_CFLAGS includes $x_includes CPPFLAGS="$CPPFLAGS $X_CFLAGS" if test \! -z "$libdir" ; then LDFLAGS="$LDFLAGS -L$libdir" fi # note: $X_LIBS includes $x_libraries LDFLAGS="$LDFLAGS $X_LIBS $X_EXTRA_LIBS" CPPFLAGS=`eval eval eval eval eval eval eval eval eval echo $CPPFLAGS` LDFLAGS=`eval eval eval eval eval eval eval eval eval echo $LDFLAGS` { $as_echo "$as_me:${as_lineno-$LINENO}: checking for XRRGetScreenInfo in -lXrandr" >&5 $as_echo_n "checking for XRRGetScreenInfo in -lXrandr... " >&6; } if ${ac_cv_lib_Xrandr_XRRGetScreenInfo+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lXrandr $xrender_libs -lXext -lX11 $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char XRRGetScreenInfo (); int main () { return XRRGetScreenInfo (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_Xrandr_XRRGetScreenInfo=yes else ac_cv_lib_Xrandr_XRRGetScreenInfo=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_Xrandr_XRRGetScreenInfo" >&5 $as_echo "$ac_cv_lib_Xrandr_XRRGetScreenInfo" >&6; } if test "x$ac_cv_lib_Xrandr_XRRGetScreenInfo" = xyes; then : have_randr=yes; SAVER_LIBS="$SAVER_LIBS -lXrandr $xrender_libs" else true fi CPPFLAGS="$ac_save_CPPFLAGS" LDFLAGS="$ac_save_LDFLAGS" # LIBS="$ac_save_LIBS" fi fi # if that succeeded, then we've really got it. if test "$have_randr" = yes; then $as_echo "#define HAVE_RANDR 1" >>confdefs.h # Now check for version 1.2 in the same libs. # Try to compile, since on MacOS 10.5.7, headers are older than libs! { $as_echo "$as_me:${as_lineno-$LINENO}: checking for XRRGetScreenResources" >&5 $as_echo_n "checking for XRRGetScreenResources... " >&6; } if ${ac_cv_randr_12+:} false; then : $as_echo_n "(cached) " >&6 else ac_cv_randr_12=no ac_save_CPPFLAGS="$CPPFLAGS" if test \! -z "$includedir" ; then CPPFLAGS="$CPPFLAGS -I$includedir" fi CPPFLAGS="$CPPFLAGS $X_CFLAGS" CPPFLAGS=`eval eval eval eval eval eval eval eval eval echo $CPPFLAGS` cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #include int main () { XRRScreenResources *res = XRRGetScreenResources (0, 0); ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_randr_12=yes else ac_cv_randr_12=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext CPPFLAGS="$ac_save_CPPFLAGS" fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_randr_12" >&5 $as_echo "$ac_cv_randr_12" >&6; } if test "$ac_cv_randr_12" = yes ; then $as_echo "#define HAVE_RANDR_12 1" >>confdefs.h fi # AC_CHECK_X_LIB(c, XRRGetOutputInfo, [AC_DEFINE(HAVE_RANDR_12)], # [true], $SAVER_LIBS) fi elif test "$with_randr" != no; then echo "error: must be yes or no: --with-randr-ext=$with_randr" exit 1 fi ############################################################################### # # Check for XF86MiscSetGrabKeysState (but only bother if we are already # using other XF86 stuff.) # ############################################################################### have_xf86miscsetgrabkeysstate=no if test "$have_xf86gamma" = yes -o "$have_xf86vmode" = yes; then ac_save_CPPFLAGS="$CPPFLAGS" ac_save_LDFLAGS="$LDFLAGS" # ac_save_LIBS="$LIBS" if test \! -z "$includedir" ; then CPPFLAGS="$CPPFLAGS -I$includedir" fi # note: $X_CFLAGS includes $x_includes CPPFLAGS="$CPPFLAGS $X_CFLAGS" if test \! -z "$libdir" ; then LDFLAGS="$LDFLAGS -L$libdir" fi # note: $X_LIBS includes $x_libraries LDFLAGS="$LDFLAGS $X_LIBS $X_EXTRA_LIBS" CPPFLAGS=`eval eval eval eval eval eval eval eval eval echo $CPPFLAGS` LDFLAGS=`eval eval eval eval eval eval eval eval eval echo $LDFLAGS` { $as_echo "$as_me:${as_lineno-$LINENO}: checking for XF86MiscSetGrabKeysState in -lXxf86misc" >&5 $as_echo_n "checking for XF86MiscSetGrabKeysState in -lXxf86misc... " >&6; } if ${ac_cv_lib_Xxf86misc_XF86MiscSetGrabKeysState+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lXxf86misc -lXext -lX11 $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char XF86MiscSetGrabKeysState (); int main () { return XF86MiscSetGrabKeysState (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_Xxf86misc_XF86MiscSetGrabKeysState=yes else ac_cv_lib_Xxf86misc_XF86MiscSetGrabKeysState=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_Xxf86misc_XF86MiscSetGrabKeysState" >&5 $as_echo "$ac_cv_lib_Xxf86misc_XF86MiscSetGrabKeysState" >&6; } if test "x$ac_cv_lib_Xxf86misc_XF86MiscSetGrabKeysState" = xyes; then : have_xf86miscsetgrabkeysstate=yes else true fi CPPFLAGS="$ac_save_CPPFLAGS" LDFLAGS="$ac_save_LDFLAGS" # LIBS="$ac_save_LIBS" if test "$have_xf86miscsetgrabkeysstate" = yes ; then SAVER_LIBS="$SAVER_LIBS -lXxf86misc" $as_echo "#define HAVE_XF86MISCSETGRABKEYSSTATE 1" >>confdefs.h fi fi ############################################################################### # # Check for HP XHPDisableReset and XHPEnableReset. # ############################################################################### { $as_echo "$as_me:${as_lineno-$LINENO}: checking for XHPDisableReset in X11/XHPlib.h" >&5 $as_echo_n "checking for XHPDisableReset in X11/XHPlib.h... " >&6; } ac_save_CPPFLAGS="$CPPFLAGS" if test \! -z "$includedir" ; then CPPFLAGS="$CPPFLAGS -I$includedir" fi CPPFLAGS="$CPPFLAGS $X_CFLAGS" CPPFLAGS=`eval eval eval eval eval eval eval eval eval echo $CPPFLAGS` cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "XHPDisableReset" >/dev/null 2>&1; then : $as_echo "#define HAVE_XHPDISABLERESET 1" >>confdefs.h SAVER_LIBS="-lXhp11 $SAVER_LIBS" { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi rm -rf conftest* CPPFLAGS="$ac_save_CPPFLAGS" ############################################################################### # # Check for /proc/interrupts. # ############################################################################### have_proc_interrupts=no with_proc_interrupts_req=unspecified # Check whether --with-proc-interrupts was given. if test "${with_proc_interrupts+set}" = set; then : withval=$with_proc_interrupts; with_proc_interrupts="$withval"; with_proc_interrupts_req="$withval" else with_proc_interrupts=yes fi if test "$with_proc_interrupts" = yes; then # Note that we may be building in an environment (e.g. Debian buildd chroot) # without a proper /proc filesystem. If /proc/interrupts exists, then we'll # check that it has the bits we need, but otherwise we'll just go on faith. # have_proc_interrupts=yes if test -f /proc/interrupts; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether /proc/interrupts contains keyboard data" >&5 $as_echo_n "checking whether /proc/interrupts contains keyboard data... " >&6; } if ${ac_cv_have_proc_interrupts+:} false; then : $as_echo_n "(cached) " >&6 else ac_cv_have_proc_interrupts=no if grep 'keyboard\|i8042' /proc/interrupts >/dev/null 2>&1 ; then ac_cv_have_proc_interrupts=yes fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_have_proc_interrupts" >&5 $as_echo "$ac_cv_have_proc_interrupts" >&6; } have_proc_interrupts=$ac_cv_have_proc_interrupts fi if test "$have_proc_interrupts" = yes; then $as_echo "#define HAVE_PROC_INTERRUPTS 1" >>confdefs.h fi elif test "$with_proc_interrupts" != no; then echo "error: must be yes or no: --with-proc-interrupts=$with_proc_interrupts" exit 1 fi ############################################################################### # # The --enable-locking option # ############################################################################### # Check whether --enable-locking was given. if test "${enable_locking+set}" = set; then : enableval=$enable_locking; enable_locking="$enableval" else if test "$ac_macosx" = yes; then # We can't lock on MacOS X, so default to not compiling in support for it. # But allow --enable-locking to override that, so I can debug Linux locking # under MacOS X11. enable_locking=no else enable_locking=yes fi fi if test "$enable_locking" = yes; then true elif test "$enable_locking" = no; then $as_echo "#define NO_LOCKING 1" >>confdefs.h else echo "error: must be yes or no: --enable-locking=$enable_locking" exit 1 fi ############################################################################### # # Whether to allow root password to unblank. # ############################################################################### # Check whether --enable-root-passwd was given. if test "${enable_root_passwd+set}" = set; then : enableval=$enable_root_passwd; enable_root_passwd="$enableval" else enable_root_passwd=yes fi if test "$enable_root_passwd" = yes; then $as_echo "#define ALLOW_ROOT_PASSWD 1" >>confdefs.h true elif test "$enable_root_passwd" != no; then echo "error: must be yes or no: --enable-root-passwd=$enable_root_passwd" exit 1 fi ############################################################################### # # Check for PAM. # ############################################################################### case "$host" in *-solaris*) # Solaris systems tend to come with PAM misconfigured. # Don't build it by default, even if the headers exist. with_pam_default=no ;; *) # Default to building PAM support on all other systems, if it exists. with_pam_default=yes ;; esac have_pam=no with_pam_req=unspecified # Check whether --with-pam was given. if test "${with_pam+set}" = set; then : withval=$with_pam; with_pam="$withval"; with_pam_req="$withval" else with_pam=$with_pam_default fi # Check whether --with-pam_service_name was given. if test "${with_pam_service_name+set}" = set; then : withval=$with_pam_service_name; pam_service_name="$withval" else pam_service_name="xscreensaver" fi # Check whether --enable-pam-check-account-type was given. if test "${enable_pam_check_account_type+set}" = set; then : enableval=$enable_pam_check_account_type; enable_pam_check_account_type="$enableval" else enable_pam_check_account_type=no fi if test "$enable_pam_check_account_type" = yes ; then $as_echo "#define PAM_CHECK_ACCOUNT_TYPE 1" >>confdefs.h true elif test "$enable_pam_check_account_type" != no ; then echo "error: must be yes or no: --enable-pam-check-account-type=$enable_pam_check_account_type" exit 1 fi case "$with_pam" in yes) ;; no) ;; /*) { $as_echo "$as_me:${as_lineno-$LINENO}: checking for PAM headers" >&5 $as_echo_n "checking for PAM headers... " >&6; } d=$with_pam/include if test -d $d; then X_CFLAGS="-I$d $X_CFLAGS" { $as_echo "$as_me:${as_lineno-$LINENO}: result: $d" >&5 $as_echo "$d" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: not found ($d: no such directory)" >&5 $as_echo "not found ($d: no such directory)" >&6; } fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for PAM libs" >&5 $as_echo_n "checking for PAM libs... " >&6; } d=$with_pam/lib if test -d $d; then X_LIBS="-L$d $X_LIBS" { $as_echo "$as_me:${as_lineno-$LINENO}: result: $d" >&5 $as_echo "$d" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: not found ($d: no such directory)" >&5 $as_echo "not found ($d: no such directory)" >&6; } fi # replace the directory string with "yes". with_pam_req="yes" with_pam=$with_pam_req ;; *) echo "" echo "error: argument to --with-pam must be \"yes\", \"no\", or a directory." echo " If it is a directory, then \`DIR/include' will be added to" echo " the -I list, and \`DIR/lib' will be added to the -L list." exit 1 ;; esac if test "$enable_locking" = yes -a "$with_pam" = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for PAM" >&5 $as_echo_n "checking for PAM... " >&6; } if ${ac_cv_pam+:} false; then : $as_echo_n "(cached) " >&6 else ac_save_CPPFLAGS="$CPPFLAGS" if test \! -z "$includedir" ; then CPPFLAGS="$CPPFLAGS -I$includedir" fi CPPFLAGS="$CPPFLAGS $X_CFLAGS" CPPFLAGS=`eval eval eval eval eval eval eval eval eval echo $CPPFLAGS` cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_pam=yes else ac_cv_pam=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext CPPFLAGS="$ac_save_CPPFLAGS" fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_pam" >&5 $as_echo "$ac_cv_pam" >&6; } if test "$ac_cv_pam" = yes ; then have_pam=yes $as_echo "#define HAVE_PAM 1" >>confdefs.h cat >>confdefs.h <<_ACEOF #define PAM_SERVICE_NAME "$pam_service_name" _ACEOF PASSWD_LIBS="${PASSWD_LIBS} -lpam" # libpam typically requires dlopen and dlsym. On FreeBSD, # those are in libc. On Linux and Solaris, they're in libdl. { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -ldl" >&5 $as_echo_n "checking for dlopen in -ldl... " >&6; } if ${ac_cv_lib_dl_dlopen+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-ldl $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char dlopen (); int main () { return dlopen (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_dl_dlopen=yes else ac_cv_lib_dl_dlopen=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dl_dlopen" >&5 $as_echo "$ac_cv_lib_dl_dlopen" >&6; } if test "x$ac_cv_lib_dl_dlopen" = xyes; then : PASSWD_LIBS="${PASSWD_LIBS} -ldl" fi # On Linux, sigtimedwait() is in libc; on Solaris, it's in librt. have_timedwait=no { $as_echo "$as_me:${as_lineno-$LINENO}: checking for sigtimedwait in -lc" >&5 $as_echo_n "checking for sigtimedwait in -lc... " >&6; } if ${ac_cv_lib_c_sigtimedwait+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lc $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char sigtimedwait (); int main () { return sigtimedwait (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_c_sigtimedwait=yes else ac_cv_lib_c_sigtimedwait=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_c_sigtimedwait" >&5 $as_echo "$ac_cv_lib_c_sigtimedwait" >&6; } if test "x$ac_cv_lib_c_sigtimedwait" = xyes; then : have_timedwait=yes $as_echo "#define HAVE_SIGTIMEDWAIT 1" >>confdefs.h fi if test "$have_timedwait" = no ; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for sigtimedwait in -lrt" >&5 $as_echo_n "checking for sigtimedwait in -lrt... " >&6; } if ${ac_cv_lib_rt_sigtimedwait+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lrt $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char sigtimedwait (); int main () { return sigtimedwait (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_rt_sigtimedwait=yes else ac_cv_lib_rt_sigtimedwait=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_rt_sigtimedwait" >&5 $as_echo "$ac_cv_lib_rt_sigtimedwait" >&6; } if test "x$ac_cv_lib_rt_sigtimedwait" = xyes; then : have_timedwait=yes $as_echo "#define HAVE_SIGTIMEDWAIT 1" >>confdefs.h PASSWD_LIBS="${PASSWD_LIBS} -lrt" fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to call pam_strerror" >&5 $as_echo_n "checking how to call pam_strerror... " >&6; } if ${ac_cv_pam_strerror_args+:} false; then : $as_echo_n "(cached) " >&6 else ac_save_CPPFLAGS="$CPPFLAGS" if test \! -z "$includedir" ; then CPPFLAGS="$CPPFLAGS -I$includedir" fi CPPFLAGS="$CPPFLAGS $X_CFLAGS" CPPFLAGS=`eval eval eval eval eval eval eval eval eval echo $CPPFLAGS` cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #include int main () { pam_handle_t *pamh = 0; char *s = pam_strerror(pamh, PAM_SUCCESS); ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_pam_strerror_args=2 else ac_save_CPPFLAGS="$CPPFLAGS" if test \! -z "$includedir" ; then CPPFLAGS="$CPPFLAGS -I$includedir" fi CPPFLAGS="$CPPFLAGS $X_CFLAGS" CPPFLAGS=`eval eval eval eval eval eval eval eval eval echo $CPPFLAGS` cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #include int main () { char *s = pam_strerror(PAM_SUCCESS); ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_pam_strerror_args=1 else ac_pam_strerror_args=0 fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext CPPFLAGS="$ac_save_CPPFLAGS" fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext CPPFLAGS="$ac_save_CPPFLAGS" ac_cv_pam_strerror_args=$ac_pam_strerror_args fi ac_pam_strerror_args=$ac_cv_pam_strerror_args if test "$ac_pam_strerror_args" = 1 ; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: one argument" >&5 $as_echo "one argument" >&6; } elif test "$ac_pam_strerror_args" = 2 ; then $as_echo "#define PAM_STRERROR_TWO_ARGS 1" >>confdefs.h { $as_echo "$as_me:${as_lineno-$LINENO}: result: two arguments" >&5 $as_echo "two arguments" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: unknown" >&5 $as_echo "unknown" >&6; } fi # Check pam_fail_delay { $as_echo "$as_me:${as_lineno-$LINENO}: checking pam_fail_delay in -lpam" >&5 $as_echo_n "checking pam_fail_delay in -lpam... " >&6; } if ${ac_cv_pam_fail_delay+:} false; then : $as_echo_n "(cached) " >&6 else ac_save_LDFLAGS="$LDFLAGS" LDFLAGS="-lpam" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { pam_handle_t *pamh = 0; unsigned int usec = 1; int status = pam_fail_delay (pamh, usec); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_pam_fail_delay=yes else ac_pam_fail_delay=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext ac_cv_pam_fail_delay=$ac_pam_fail_delay, LDFLAGS=$ac_save_LDFLAGS fi if test "$ac_pam_fail_delay" = yes ; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } $as_echo "#define HAVE_PAM_FAIL_DELAY 1" >>confdefs.h else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi fi ############################################################################### # # Check for Kerberos. # ############################################################################### have_kerberos=no have_kerberos5=no with_kerberos_req=unspecified # Check whether --with-kerberos was given. if test "${with_kerberos+set}" = set; then : withval=$with_kerberos; with_kerberos="$withval"; with_kerberos_req="$withval" else with_kerberos=yes fi case "$with_kerberos" in yes) ;; no) ;; /*) { $as_echo "$as_me:${as_lineno-$LINENO}: checking for Kerberos headers" >&5 $as_echo_n "checking for Kerberos headers... " >&6; } d=$with_kerberos/include if test -d $d; then X_CFLAGS="-I$d $X_CFLAGS" { $as_echo "$as_me:${as_lineno-$LINENO}: result: $d" >&5 $as_echo "$d" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: not found ($d: no such directory)" >&5 $as_echo "not found ($d: no such directory)" >&6; } fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for Kerberos libs" >&5 $as_echo_n "checking for Kerberos libs... " >&6; } d=$with_kerberos/lib if test -d $d; then X_LIBS="-L$d $X_LIBS" { $as_echo "$as_me:${as_lineno-$LINENO}: result: $d" >&5 $as_echo "$d" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: not found ($d: no such directory)" >&5 $as_echo "not found ($d: no such directory)" >&6; } fi # replace the directory string with "yes". with_kerberos_req="yes" with_kerberos=$with_kerberos_req ;; *) echo "" echo "error: argument to --with-kerberos must be \"yes\", \"no\", or a directory." echo " If it is a directory, then \`DIR/include' will be added to" echo " the -I list, and \`DIR/lib' will be added to the -L list." exit 1 ;; esac if test "$enable_locking" = yes -a "$with_kerberos" = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for Kerberos 4" >&5 $as_echo_n "checking for Kerberos 4... " >&6; } if ${ac_cv_kerberos+:} false; then : $as_echo_n "(cached) " >&6 else ac_save_CPPFLAGS="$CPPFLAGS" if test \! -z "$includedir" ; then CPPFLAGS="$CPPFLAGS -I$includedir" fi CPPFLAGS="$CPPFLAGS $X_CFLAGS" CPPFLAGS=`eval eval eval eval eval eval eval eval eval echo $CPPFLAGS` cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_kerberos=yes else ac_cv_kerberos=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext CPPFLAGS="$ac_save_CPPFLAGS" fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_kerberos" >&5 $as_echo "$ac_cv_kerberos" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking for Kerberos 5" >&5 $as_echo_n "checking for Kerberos 5... " >&6; } if ${ac_cv_kerberos5+:} false; then : $as_echo_n "(cached) " >&6 else ac_save_CPPFLAGS="$CPPFLAGS" if test \! -z "$includedir" ; then CPPFLAGS="$CPPFLAGS -I$includedir" fi CPPFLAGS="$CPPFLAGS $X_CFLAGS" CPPFLAGS=`eval eval eval eval eval eval eval eval eval echo $CPPFLAGS` cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_kerberos5=yes else ac_cv_kerberos5=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext CPPFLAGS="$ac_save_CPPFLAGS" fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_kerberos5" >&5 $as_echo "$ac_cv_kerberos5" >&6; } if test "$ac_cv_kerberos" = yes ; then have_kerberos=yes $as_echo "#define HAVE_KERBEROS 1" >>confdefs.h fi if test "$ac_cv_kerberos5" = yes ; then # Andrew Snare wrote: # # You were assuming that if kerberosV (krb5) was found, then kerberosIV # (krb4) was also available. This turns out not to be the case with # mit-krb-1.2.7; apparently backwards-compatibility with KerberosIV # is optional. # # So, disable kerberosV support if libkrb4 can't be found. # This is not the best solution, but it makes the compile not fail. # ac_save_CPPFLAGS="$CPPFLAGS" ac_save_LDFLAGS="$LDFLAGS" # ac_save_LIBS="$LIBS" if test \! -z "$includedir" ; then CPPFLAGS="$CPPFLAGS -I$includedir" fi # note: $X_CFLAGS includes $x_includes CPPFLAGS="$CPPFLAGS $X_CFLAGS" if test \! -z "$libdir" ; then LDFLAGS="$LDFLAGS -L$libdir" fi # note: $X_LIBS includes $x_libraries LDFLAGS="$LDFLAGS $X_LIBS $X_EXTRA_LIBS" CPPFLAGS=`eval eval eval eval eval eval eval eval eval echo $CPPFLAGS` LDFLAGS=`eval eval eval eval eval eval eval eval eval echo $LDFLAGS` { $as_echo "$as_me:${as_lineno-$LINENO}: checking for krb_get_tf_realm in -lkrb4" >&5 $as_echo_n "checking for krb_get_tf_realm in -lkrb4... " >&6; } if ${ac_cv_lib_krb4_krb_get_tf_realm+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lkrb4 $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char krb_get_tf_realm (); int main () { return krb_get_tf_realm (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_krb4_krb_get_tf_realm=yes else ac_cv_lib_krb4_krb_get_tf_realm=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_krb4_krb_get_tf_realm" >&5 $as_echo "$ac_cv_lib_krb4_krb_get_tf_realm" >&6; } if test "x$ac_cv_lib_krb4_krb_get_tf_realm" = xyes; then : have_kerberos=yes else have_kerberos=no fi CPPFLAGS="$ac_save_CPPFLAGS" LDFLAGS="$ac_save_LDFLAGS" # LIBS="$ac_save_LIBS" if test "$have_kerberos" = yes ; then have_kerberos5=yes $as_echo "#define HAVE_KERBEROS 1" >>confdefs.h $as_echo "#define HAVE_KERBEROS5 1" >>confdefs.h else have_kerberos5=no { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Cannot find compat lib (libkrb4) needed to use Kerberos 5" >&5 $as_echo "$as_me: WARNING: Cannot find compat lib (libkrb4) needed to use Kerberos 5" >&2;} fi fi if test "$have_kerberos5" = yes ; then # from Matt Knopp # (who got it from amu@mit.edu) PASSWD_LIBS="$PASSWD_LIBS -lkrb4 -ldes425 -lkrb5 -lk5crypto -lcom_err" # jwz: MacOS X uses -lkrb5, but not -lcrypt ac_save_CPPFLAGS="$CPPFLAGS" ac_save_LDFLAGS="$LDFLAGS" # ac_save_LIBS="$LIBS" if test \! -z "$includedir" ; then CPPFLAGS="$CPPFLAGS -I$includedir" fi # note: $X_CFLAGS includes $x_includes CPPFLAGS="$CPPFLAGS $X_CFLAGS" if test \! -z "$libdir" ; then LDFLAGS="$LDFLAGS -L$libdir" fi # note: $X_LIBS includes $x_libraries LDFLAGS="$LDFLAGS $X_LIBS $X_EXTRA_LIBS" CPPFLAGS=`eval eval eval eval eval eval eval eval eval echo $CPPFLAGS` LDFLAGS=`eval eval eval eval eval eval eval eval eval echo $LDFLAGS` { $as_echo "$as_me:${as_lineno-$LINENO}: checking for crypt in -lcrypt" >&5 $as_echo_n "checking for crypt in -lcrypt... " >&6; } if ${ac_cv_lib_crypt_crypt+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lcrypt $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char crypt (); int main () { return crypt (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_crypt_crypt=yes else ac_cv_lib_crypt_crypt=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_crypt_crypt" >&5 $as_echo "$ac_cv_lib_crypt_crypt" >&6; } if test "x$ac_cv_lib_crypt_crypt" = xyes; then : PASSWD_LIBS="$PASSWD_LIBS -lcrypt" fi CPPFLAGS="$ac_save_CPPFLAGS" LDFLAGS="$ac_save_LDFLAGS" # LIBS="$ac_save_LIBS" elif test "$have_kerberos" = yes ; then # from Tim Showalter for FreeBSD 4.2 PASSWD_LIBS="$PASSWD_LIBS -lkrb -ldes -lcom_err" fi if test "$have_kerberos" = yes ; then ac_fn_c_check_func "$LINENO" "res_search" "ac_cv_func_res_search" if test "x$ac_cv_func_res_search" = xyes; then : else { $as_echo "$as_me:${as_lineno-$LINENO}: checking for res_search in -lresolv" >&5 $as_echo_n "checking for res_search in -lresolv... " >&6; } if ${ac_cv_lib_resolv_res_search+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lresolv $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char res_search (); int main () { return res_search (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_resolv_res_search=yes else ac_cv_lib_resolv_res_search=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_resolv_res_search" >&5 $as_echo "$ac_cv_lib_resolv_res_search" >&6; } if test "x$ac_cv_lib_resolv_res_search" = xyes; then : PASSWD_LIBS="${PASSWD_LIBS} -lresolv" else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Can't find DNS resolver libraries needed for Kerberos" >&5 $as_echo "$as_me: WARNING: Can't find DNS resolver libraries needed for Kerberos" >&2;} fi fi fi fi ############################################################################### # # Check for the nine billion variants of shadow passwords... # ############################################################################### need_setuid=no have_shadow=no with_shadow_req=unspecified # Check whether --with-shadow was given. if test "${with_shadow+set}" = set; then : withval=$with_shadow; with_shadow="$withval"; with_shadow_req="$withval" else with_shadow=yes fi case "$with_shadow" in yes) ;; no) ;; /*) { $as_echo "$as_me:${as_lineno-$LINENO}: checking for shadow password headers" >&5 $as_echo_n "checking for shadow password headers... " >&6; } d=$with_shadow/include if test -d $d; then X_CFLAGS="-I$d $X_CFLAGS" { $as_echo "$as_me:${as_lineno-$LINENO}: result: $d" >&5 $as_echo "$d" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: not found ($d: no such directory)" >&5 $as_echo "not found ($d: no such directory)" >&6; } fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for shadow password libs" >&5 $as_echo_n "checking for shadow password libs... " >&6; } d=$with_shadow/lib if test -d $d; then X_LIBS="-L$d $X_LIBS" { $as_echo "$as_me:${as_lineno-$LINENO}: result: $d" >&5 $as_echo "$d" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: not found ($d: no such directory)" >&5 $as_echo "not found ($d: no such directory)" >&6; } fi # replace the directory string with "yes". with_shadow_req="yes" with_shadow=$with_shadow_req ;; *) echo "" echo "error: argument to --with-shadow must be \"yes\", \"no\", or a directory." echo " If it is a directory, then \`DIR/include' will be added to" echo " the -I list, and \`DIR/lib' will be added to the -L list." exit 1 ;; esac if test "$enable_locking" = no ; then with_shadow_req=no with_shadow=no fi ############################################################################### # # Check for Sun "adjunct" passwords. # ############################################################################### if test "$with_shadow" = yes ; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for Sun-style shadow passwords" >&5 $as_echo_n "checking for Sun-style shadow passwords... " >&6; } if ${ac_cv_sun_adjunct+:} false; then : $as_echo_n "(cached) " >&6 else ac_save_CPPFLAGS="$CPPFLAGS" if test \! -z "$includedir" ; then CPPFLAGS="$CPPFLAGS -I$includedir" fi CPPFLAGS="$CPPFLAGS $X_CFLAGS" CPPFLAGS=`eval eval eval eval eval eval eval eval eval echo $CPPFLAGS` cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #include #include #include #include int main () { struct passwd_adjunct *p = getpwanam("nobody"); const char *pw = p->pwa_passwd; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_sun_adjunct=yes else ac_cv_sun_adjunct=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext CPPFLAGS="$ac_save_CPPFLAGS" fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sun_adjunct" >&5 $as_echo "$ac_cv_sun_adjunct" >&6; } if test "$ac_cv_sun_adjunct" = yes; then have_shadow_adjunct=yes have_shadow=yes need_setuid=yes fi fi ############################################################################### # # Check for DEC and SCO so-called "enhanced" security. # ############################################################################### if test "$with_shadow" = yes ; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for DEC-style shadow passwords" >&5 $as_echo_n "checking for DEC-style shadow passwords... " >&6; } if ${ac_cv_enhanced_passwd+:} false; then : $as_echo_n "(cached) " >&6 else ac_save_CPPFLAGS="$CPPFLAGS" if test \! -z "$includedir" ; then CPPFLAGS="$CPPFLAGS -I$includedir" fi CPPFLAGS="$CPPFLAGS $X_CFLAGS" CPPFLAGS=`eval eval eval eval eval eval eval eval eval echo $CPPFLAGS` cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #include #include #include #include int main () { struct pr_passwd *p; const char *pw; set_auth_parameters(0, 0); check_auth_parameters(); p = getprpwnam("nobody"); pw = p->ufld.fd_encrypt; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_enhanced_passwd=yes else ac_cv_enhanced_passwd=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext CPPFLAGS="$ac_save_CPPFLAGS" fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_enhanced_passwd" >&5 $as_echo "$ac_cv_enhanced_passwd" >&6; } if test $ac_cv_enhanced_passwd = yes; then have_shadow_enhanced=yes have_shadow=yes need_setuid=yes # On SCO, getprpwnam() is in -lprot (which uses nap() from -lx) # (I'm told it needs -lcurses too, but I don't understand why.) # But on DEC, it's in -lsecurity. # { $as_echo "$as_me:${as_lineno-$LINENO}: checking for getprpwnam in -lprot" >&5 $as_echo_n "checking for getprpwnam in -lprot... " >&6; } if ${ac_cv_lib_prot_getprpwnam+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lprot -lx $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char getprpwnam (); int main () { return getprpwnam (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_prot_getprpwnam=yes else ac_cv_lib_prot_getprpwnam=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_prot_getprpwnam" >&5 $as_echo "$ac_cv_lib_prot_getprpwnam" >&6; } if test "x$ac_cv_lib_prot_getprpwnam" = xyes; then : PASSWD_LIBS="$PASSWD_LIBS -lprot -lcurses -lx" else { $as_echo "$as_me:${as_lineno-$LINENO}: checking for getprpwnam in -lsecurity" >&5 $as_echo_n "checking for getprpwnam in -lsecurity... " >&6; } if ${ac_cv_lib_security_getprpwnam+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lsecurity $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char getprpwnam (); int main () { return getprpwnam (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_security_getprpwnam=yes else ac_cv_lib_security_getprpwnam=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_security_getprpwnam" >&5 $as_echo "$ac_cv_lib_security_getprpwnam" >&6; } if test "x$ac_cv_lib_security_getprpwnam" = xyes; then : PASSWD_LIBS="$PASSWD_LIBS -lsecurity" fi fi fi fi ############################################################################### # # Check for HP's entry in the "Not Invented Here" Sweepstakes. # ############################################################################### if test "$with_shadow" = yes ; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for HP-style shadow passwords" >&5 $as_echo_n "checking for HP-style shadow passwords... " >&6; } if ${ac_cv_hpux_passwd+:} false; then : $as_echo_n "(cached) " >&6 else ac_save_CPPFLAGS="$CPPFLAGS" if test \! -z "$includedir" ; then CPPFLAGS="$CPPFLAGS -I$includedir" fi CPPFLAGS="$CPPFLAGS $X_CFLAGS" CPPFLAGS=`eval eval eval eval eval eval eval eval eval echo $CPPFLAGS` cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #include #include #include #include int main () { struct s_passwd *p = getspwnam("nobody"); const char *pw = p->pw_passwd; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_hpux_passwd=yes else ac_cv_hpux_passwd=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext CPPFLAGS="$ac_save_CPPFLAGS" fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_hpux_passwd" >&5 $as_echo "$ac_cv_hpux_passwd" >&6; } if test "$ac_cv_hpux_passwd" = yes; then have_shadow_hpux=yes have_shadow=yes need_setuid=yes # on HPUX, bigcrypt is in -lsec { $as_echo "$as_me:${as_lineno-$LINENO}: checking for bigcrypt in -lsec" >&5 $as_echo_n "checking for bigcrypt in -lsec... " >&6; } if ${ac_cv_lib_sec_bigcrypt+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lsec $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char bigcrypt (); int main () { return bigcrypt (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_sec_bigcrypt=yes else ac_cv_lib_sec_bigcrypt=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_sec_bigcrypt" >&5 $as_echo "$ac_cv_lib_sec_bigcrypt" >&6; } if test "x$ac_cv_lib_sec_bigcrypt" = xyes; then : PASSWD_LIBS="$PASSWD_LIBS -lsec" fi fi fi ############################################################################### # # Check for FreeBSD-style shadow passwords. # # On FreeBSD, getpwnam() and friends work just like on non-shadow- # password systems -- except you only get stuff in the pw_passwd field # if the running program is setuid. So, guess that we've got this # lossage to contend with if /etc/master.passwd exists, and default to # a setuid installation. # ############################################################################### if test "$with_shadow" = yes ; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for FreeBSD-style shadow passwords" >&5 $as_echo_n "checking for FreeBSD-style shadow passwords... " >&6; } if ${ac_cv_master_passwd+:} false; then : $as_echo_n "(cached) " >&6 else if test -f /etc/master.passwd ; then ac_cv_master_passwd=yes else ac_cv_master_passwd=no fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_master_passwd" >&5 $as_echo "$ac_cv_master_passwd" >&6; } if test "$ac_cv_master_passwd" = yes; then need_setuid=yes fi fi ############################################################################### # # Check for traditional (ha!) shadow passwords. # ############################################################################### if test "$with_shadow" = yes ; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for generic shadow passwords" >&5 $as_echo_n "checking for generic shadow passwords... " >&6; } if ${ac_cv_shadow+:} false; then : $as_echo_n "(cached) " >&6 else ac_save_CPPFLAGS="$CPPFLAGS" if test \! -z "$includedir" ; then CPPFLAGS="$CPPFLAGS -I$includedir" fi CPPFLAGS="$CPPFLAGS $X_CFLAGS" CPPFLAGS=`eval eval eval eval eval eval eval eval eval echo $CPPFLAGS` cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #include #include #include int main () { struct spwd *p = getspnam("nobody"); const char *pw = p->sp_pwdp; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_shadow=yes else ac_cv_shadow=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext CPPFLAGS="$ac_save_CPPFLAGS" fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_shadow" >&5 $as_echo "$ac_cv_shadow" >&6; } if test "$ac_cv_shadow" = yes; then have_shadow=yes need_setuid=yes # On some systems (UnixWare 2.1), getspnam() is in -lgen instead of -lc. have_getspnam=no { $as_echo "$as_me:${as_lineno-$LINENO}: checking for getspnam in -lc" >&5 $as_echo_n "checking for getspnam in -lc... " >&6; } if ${ac_cv_lib_c_getspnam+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lc $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char getspnam (); int main () { return getspnam (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_c_getspnam=yes else ac_cv_lib_c_getspnam=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_c_getspnam" >&5 $as_echo "$ac_cv_lib_c_getspnam" >&6; } if test "x$ac_cv_lib_c_getspnam" = xyes; then : have_getspnam=yes fi if test "$have_getspnam" = no ; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for getspnam in -lgen" >&5 $as_echo_n "checking for getspnam in -lgen... " >&6; } if ${ac_cv_lib_gen_getspnam+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lgen $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char getspnam (); int main () { return getspnam (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_gen_getspnam=yes else ac_cv_lib_gen_getspnam=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_gen_getspnam" >&5 $as_echo "$ac_cv_lib_gen_getspnam" >&6; } if test "x$ac_cv_lib_gen_getspnam" = xyes; then : have_getspnam=yes; PASSWD_LIBS="$PASSWD_LIBS -lgen" fi fi fi fi ############################################################################### # # Check for other libraries needed for non-shadow passwords. # ############################################################################### if test "$enable_locking" = yes ; then # On some systems (UnixWare 2.1), crypt() is in -lcrypt instead of -lc. have_crypt=no { $as_echo "$as_me:${as_lineno-$LINENO}: checking for crypt in -lc" >&5 $as_echo_n "checking for crypt in -lc... " >&6; } if ${ac_cv_lib_c_crypt+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lc $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char crypt (); int main () { return crypt (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_c_crypt=yes else ac_cv_lib_c_crypt=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_c_crypt" >&5 $as_echo "$ac_cv_lib_c_crypt" >&6; } if test "x$ac_cv_lib_c_crypt" = xyes; then : have_crypt=yes fi if test "$have_crypt" = no ; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for crypt in -lcrypt" >&5 $as_echo_n "checking for crypt in -lcrypt... " >&6; } if ${ac_cv_lib_crypt_crypt+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lcrypt $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char crypt (); int main () { return crypt (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_crypt_crypt=yes else ac_cv_lib_crypt_crypt=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_crypt_crypt" >&5 $as_echo "$ac_cv_lib_crypt_crypt" >&6; } if test "x$ac_cv_lib_crypt_crypt" = xyes; then : have_crypt=yes; PASSWD_LIBS="$PASSWD_LIBS -lcrypt" fi fi fi # Most of the above shadow mechanisms will have set need_setuid to yes, # if they were found. But, on some systems, we need setuid even when # using plain old vanilla passwords. # if test "$enable_locking" = yes ; then case "$host" in *-hpux* | *-aix* | *-netbsd* | *-freebsd* | *-openbsd* ) need_setuid=yes ;; esac fi if test "$have_shadow_adjunct" = yes ; then $as_echo "#define HAVE_ADJUNCT_PASSWD 1" >>confdefs.h elif test "$have_shadow_enhanced" = yes ; then $as_echo "#define HAVE_ENHANCED_PASSWD 1" >>confdefs.h elif test "$have_shadow_hpux" = yes ; then $as_echo "#define HAVE_HPUX_PASSWD 1" >>confdefs.h elif test "$have_shadow" = yes ; then $as_echo "#define HAVE_SHADOW_PASSWD 1" >>confdefs.h fi ############################################################################### # # Check for external password helper # On SuSE, instead of having xscreensaver be a setuid program, they # fork an external program that takes the password on stdin, and # returns true if that password is a valid one. Then only that # smaller program needs to be setuid. # # (Note that this external program is not a GUI: the GUI is still # all in xscreensaver itself; the external program just does auth.) # ############################################################################### have_passwd_helper=no with_passwd_helper_req=unspecified # Check whether --with-passwd-helper was given. if test "${with_passwd_helper+set}" = set; then : withval=$with_passwd_helper; with_passwd_helper="$withval"; with_passwd_helper_req="$withval" else with_passwd_helper=no fi # no HANDLE_X_PATH_ARG for this one if test "$enable_locking" = no ; then with_passwd_helper_req=no with_passwd_helper=no fi case "$with_passwd_helper" in ""|no) : ;; /*) cat >>confdefs.h <<_ACEOF #define PASSWD_HELPER_PROGRAM "$with_passwd_helper" _ACEOF have_passwd_helper=yes;; *) echo "error: --with-passwd-helper needs full pathname of helper (not '$with_passwd_helper')." >&2 exit 1 esac ############################################################################### # # Check for a login manager for a "New Login" button on the lock dialog. # Usually this will be "/usr/bin/gdmflexiserver". # ############################################################################### with_login_manager_req=unspecified default_login_manager_1='gdmflexiserver -ls' default_login_manager_2='kdmctl reserve' default_login_manager_3='lxdm -c USER_SWITCH' default_login_manager_4='dm-tool switch-to-greeter' # Check whether --with-login-manager was given. if test "${with_login_manager+set}" = set; then : withval=$with_login_manager; with_login_manager="$withval"; with_login_manager_req="$withval" else with_login_manager=yes fi # no HANDLE_X_PATH_ARG for this one if test "$enable_locking" = no ; then with_login_manager_req=no with_login_manager=no fi case "$with_login_manager_req" in no) with_login_manager="" ;; yes|unspecified) # Try various defaults, use the first one that exists. with_login_manager="" if test -z "$with_login_manager" ; then set dummy $default_login_manager_1 ; login_manager_tmp=$2 unset ac_cv_path_login_manager_tmp # don't cache # Extract the first word of "$login_manager_tmp", so it can be a program name with args. set dummy $login_manager_tmp; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_login_manager_tmp+:} false; then : $as_echo_n "(cached) " >&6 else case $login_manager_tmp in [\\/]* | ?:[\\/]*) ac_cv_path_login_manager_tmp="$login_manager_tmp" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_login_manager_tmp="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi login_manager_tmp=$ac_cv_path_login_manager_tmp if test -n "$login_manager_tmp"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $login_manager_tmp" >&5 $as_echo "$login_manager_tmp" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test ! -z "$login_manager_tmp" ; then with_login_manager="$default_login_manager_1" fi fi if test -z "$with_login_manager" ; then set dummy $default_login_manager_2 ; login_manager_tmp=$2 unset ac_cv_path_login_manager_tmp # don't cache # Extract the first word of "$login_manager_tmp", so it can be a program name with args. set dummy $login_manager_tmp; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_login_manager_tmp+:} false; then : $as_echo_n "(cached) " >&6 else case $login_manager_tmp in [\\/]* | ?:[\\/]*) ac_cv_path_login_manager_tmp="$login_manager_tmp" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_login_manager_tmp="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi login_manager_tmp=$ac_cv_path_login_manager_tmp if test -n "$login_manager_tmp"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $login_manager_tmp" >&5 $as_echo "$login_manager_tmp" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test ! -z "$login_manager_tmp" ; then with_login_manager="$default_login_manager_2" fi fi if test -z "$with_login_manager" ; then set dummy $default_login_manager_3 ; login_manager_tmp=$2 unset ac_cv_path_login_manager_tmp # don't cache # Extract the first word of "$login_manager_tmp", so it can be a program name with args. set dummy $login_manager_tmp; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_login_manager_tmp+:} false; then : $as_echo_n "(cached) " >&6 else case $login_manager_tmp in [\\/]* | ?:[\\/]*) ac_cv_path_login_manager_tmp="$login_manager_tmp" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_login_manager_tmp="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi login_manager_tmp=$ac_cv_path_login_manager_tmp if test -n "$login_manager_tmp"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $login_manager_tmp" >&5 $as_echo "$login_manager_tmp" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test ! -z "$login_manager_tmp" ; then with_login_manager="$default_login_manager_3" fi fi if test -z "$with_login_manager" ; then set dummy $default_login_manager_4 ; login_manager_tmp=$2 unset ac_cv_path_login_manager_tmp # don't cache # Extract the first word of "$login_manager_tmp", so it can be a program name with args. set dummy $login_manager_tmp; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_login_manager_tmp+:} false; then : $as_echo_n "(cached) " >&6 else case $login_manager_tmp in [\\/]* | ?:[\\/]*) ac_cv_path_login_manager_tmp="$login_manager_tmp" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_login_manager_tmp="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi login_manager_tmp=$ac_cv_path_login_manager_tmp if test -n "$login_manager_tmp"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $login_manager_tmp" >&5 $as_echo "$login_manager_tmp" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test ! -z "$login_manager_tmp" ; then with_login_manager="$default_login_manager_4" fi fi ;; /*) # absolute path specified on cmd line set dummy $with_login_manager_req ; login_manager_tmp=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $login_manager_tmp" >&5 $as_echo_n "checking for $login_manager_tmp... " >&6; } if test -x "$login_manager_tmp" ; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } with_login_manager="" fi ;; *) # relative path specified on cmd line set dummy $with_login_manager_req ; login_manager_tmp=$2 unset ac_cv_path_login_manager_tmp # don't cache # Extract the first word of "$login_manager_tmp", so it can be a program name with args. set dummy $login_manager_tmp; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_login_manager_tmp+:} false; then : $as_echo_n "(cached) " >&6 else case $login_manager_tmp in [\\/]* | ?:[\\/]*) ac_cv_path_login_manager_tmp="$login_manager_tmp" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_login_manager_tmp="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi login_manager_tmp=$ac_cv_path_login_manager_tmp if test -n "$login_manager_tmp"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $login_manager_tmp" >&5 $as_echo "$login_manager_tmp" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test -z "$login_manager_tmp" ; then with_login_manager="" else with_login_manager="$login_manager_tmp" fi ;; esac ac_cv_login_manager_program="$with_login_manager" NEW_LOGIN_COMMAND_P='' NEW_LOGIN_COMMAND="$ac_cv_login_manager_program" { $as_echo "$as_me:${as_lineno-$LINENO}: checking for login manager" >&5 $as_echo_n "checking for login manager... " >&6; } if test -z "$NEW_LOGIN_COMMAND" ; then NEW_LOGIN_COMMAND="$default_login_manager_1" NEW_LOGIN_COMMAND_P='! ' { $as_echo "$as_me:${as_lineno-$LINENO}: result: $NEW_LOGIN_COMMAND (disabled)" >&5 $as_echo "$NEW_LOGIN_COMMAND (disabled)" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: $NEW_LOGIN_COMMAND" >&5 $as_echo "$NEW_LOGIN_COMMAND" >&6; } fi ############################################################################### # # Check for -lgtk (and Gnome stuff) # ############################################################################### have_gtk=no with_gtk_req=unspecified # Check whether --with-gtk was given. if test "${with_gtk+set}" = set; then : withval=$with_gtk; with_gtk="$withval"; with_gtk_req="$withval" else with_gtk=yes fi # if --with-gtk=/directory/ was specified, remember that directory so that # we can also look for the `gtk-config' program in that directory. case "$with_gtk" in /*) gtk_dir="$with_gtk" ;; *) gtk_dir="" ;; esac case "$with_gtk" in yes) ;; no) ;; /*) { $as_echo "$as_me:${as_lineno-$LINENO}: checking for Gtk headers" >&5 $as_echo_n "checking for Gtk headers... " >&6; } d=$with_gtk/include if test -d $d; then X_CFLAGS="-I$d $X_CFLAGS" { $as_echo "$as_me:${as_lineno-$LINENO}: result: $d" >&5 $as_echo "$d" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: not found ($d: no such directory)" >&5 $as_echo "not found ($d: no such directory)" >&6; } fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for Gtk libs" >&5 $as_echo_n "checking for Gtk libs... " >&6; } d=$with_gtk/lib if test -d $d; then X_LIBS="-L$d $X_LIBS" { $as_echo "$as_me:${as_lineno-$LINENO}: result: $d" >&5 $as_echo "$d" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: not found ($d: no such directory)" >&5 $as_echo "not found ($d: no such directory)" >&6; } fi # replace the directory string with "yes". with_gtk_req="yes" with_gtk=$with_gtk_req ;; *) echo "" echo "error: argument to --with-gtk must be \"yes\", \"no\", or a directory." echo " If it is a directory, then \`DIR/include' will be added to" echo " the -I list, and \`DIR/lib' will be added to the -L list." exit 1 ;; esac if test "$with_gtk" != yes -a "$with_gtk" != no ; then echo "error: must be yes or no: --with-gtk=$with_gtk" exit 1 fi parse_gtk_version_string() { # M4 sucks!! maj=`echo $ac_gtk_version_string | sed -n 's/\..*//p'` min=`echo $ac_gtk_version_string | sed -n 's/[^.]*\.\([^.]*\).*/\1/p'` ac_gtk_version=`echo "$maj * 1000 + $min" | bc` if test -z "$ac_gtk_version"; then ac_gtk_version=unknown ac_gtk_version_string=unknown fi } # Find pkg-config... (need this for both gtk and gdk_pixbuf.) # if the user specified --with-gtk=/foo/ then look there. # gtk_path="$PATH" if test ! -z "$gtk_dir"; then # canonicalize slashes. foo=`echo "${gtk_dir}/bin" | sed 's@//*@/@g'` gtk_path="$foo:$gtk_path" fi for ac_prog in pkg-config do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_pkg_config+:} false; then : $as_echo_n "(cached) " >&6 else case $pkg_config in [\\/]* | ?:[\\/]*) ac_cv_path_pkg_config="$pkg_config" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $gtk_path do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_pkg_config="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi pkg_config=$ac_cv_path_pkg_config if test -n "$pkg_config"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $pkg_config" >&5 $as_echo "$pkg_config" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$pkg_config" && break done if test -z "$pkg_config" ; then { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: pkg-config not found!" >&5 $as_echo "$as_me: WARNING: pkg-config not found!" >&2;} pkg_config="false" fi # Utility function for running pkg-config-based tests... # pkgs='' pkg_check_version() { if test "$ok" = yes ; then req="$1" min="$2" { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $req" >&5 $as_echo_n "checking for $req... " >&6; } if $pkg_config --exists "$req" ; then vers=`$pkg_config --modversion "$req"` if $pkg_config --exists "$req >= $min" ; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $vers" >&5 $as_echo "$vers" >&6; } pkgs="$pkgs $req" return 1 else { $as_echo "$as_me:${as_lineno-$LINENO}: result: $vers (wanted >= $min)" >&5 $as_echo "$vers (wanted >= $min)" >&6; } ok=no return 0 fi else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } ok=no return 0 fi fi } jurassic_gtk=no gtk_halfassed=no have_gtk_2_22_or_higher=no COMMENT_DEMO_GLADE2_GTK_2_22_HEAD="" COMMENT_DEMO_GLADE2_GTK_2_22_TAIL="" if test "$with_gtk" = yes; then have_gtk=no ok="yes" pkg_check_version gtk+-2.0 2.0.1 ; ac_gtk_version_string="$vers" pkg_check_version gmodule-2.0 2.0.0 pkg_check_version libxml-2.0 2.4.6 pkg_check_version libglade-2.0 1.99.0 pkg_check_version gdk-pixbuf-2.0 2.0.0 pkg_check_version gdk-pixbuf-xlib-2.0 2.0.0 have_gtk="$ok" if test "$have_gtk" = no; then if test -n "$ac_gtk_version_string" ; then gtk_halfassed="$ac_gtk_version_string" gtk_halfassed_lib="$req" fi fi if test "$have_gtk" = yes; then parse_gtk_version_string jurassic_gtk=no fi if test "$have_gtk" = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for Gtk includes" >&5 $as_echo_n "checking for Gtk includes... " >&6; } if ${ac_cv_gtk_config_cflags+:} false; then : $as_echo_n "(cached) " >&6 else ac_cv_gtk_config_cflags=`$pkg_config --cflags $pkgs` fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_gtk_config_cflags" >&5 $as_echo "$ac_cv_gtk_config_cflags" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking for Gtk libs" >&5 $as_echo_n "checking for Gtk libs... " >&6; } if ${ac_cv_gtk_config_libs+:} false; then : $as_echo_n "(cached) " >&6 else ac_cv_gtk_config_libs=`$pkg_config --libs $pkgs` fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_gtk_config_libs" >&5 $as_echo "$ac_cv_gtk_config_libs" >&6; } fi ac_gtk_config_cflags=$ac_cv_gtk_config_cflags ac_gtk_config_libs=$ac_cv_gtk_config_libs GTK_EXTRA_OBJS="" GTK_DATADIR="" if test "$have_gtk" = yes; then GTK_DATADIR=`$pkg_config --variable=prefix gtk+-2.0` GTK_DATADIR="$GTK_DATADIR/share" fi if test "$have_gtk" = yes; then INCLUDES="$INCLUDES $ac_gtk_config_cflags" GTK_LIBS="$GTK_LIBS $ac_gtk_config_libs" $as_echo "#define HAVE_GTK 1" >>confdefs.h $as_echo "#define HAVE_GTK2 1" >>confdefs.h $as_echo "#define HAVE_XML 1" >>confdefs.h fi if test "$have_gtk" = yes; then ok="yes" pkg_check_version gtk+-2.0 2.22 have_gtk_2_22_or_higher="$ok" if test "$have_gtk_2_22_or_higher" = yes; then COMMENT_DEMO_GLADE2_GTK_2_22_HEAD="" fi fi fi # Check for the various Gnome help and URL loading programs. # WITH_BROWSER=gnome-open if test "$have_gtk" = yes; then for ac_prog in gnome-open do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_gnome_open_program+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$gnome_open_program"; then ac_cv_prog_gnome_open_program="$gnome_open_program" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_gnome_open_program="$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi gnome_open_program=$ac_cv_prog_gnome_open_program if test -n "$gnome_open_program"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gnome_open_program" >&5 $as_echo "$gnome_open_program" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$gnome_open_program" && break done for ac_prog in gnome-url-show do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_gnome_url_show_program+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$gnome_url_show_program"; then ac_cv_prog_gnome_url_show_program="$gnome_url_show_program" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_gnome_url_show_program="$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi gnome_url_show_program=$ac_cv_prog_gnome_url_show_program if test -n "$gnome_url_show_program"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gnome_url_show_program" >&5 $as_echo "$gnome_url_show_program" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$gnome_url_show_program" && break done fi ############################################################################### # # Check for -lXm. # ############################################################################### have_motif=no with_motif_req=unspecified # Check whether --with-motif was given. if test "${with_motif+set}" = set; then : withval=$with_motif; with_motif="$withval"; with_motif_req="$withval" else with_motif=no fi case "$with_motif" in yes) ;; no) ;; /*) { $as_echo "$as_me:${as_lineno-$LINENO}: checking for Motif headers" >&5 $as_echo_n "checking for Motif headers... " >&6; } d=$with_motif/include if test -d $d; then X_CFLAGS="-I$d $X_CFLAGS" { $as_echo "$as_me:${as_lineno-$LINENO}: result: $d" >&5 $as_echo "$d" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: not found ($d: no such directory)" >&5 $as_echo "not found ($d: no such directory)" >&6; } fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for Motif libs" >&5 $as_echo_n "checking for Motif libs... " >&6; } d=$with_motif/lib if test -d $d; then X_LIBS="-L$d $X_LIBS" { $as_echo "$as_me:${as_lineno-$LINENO}: result: $d" >&5 $as_echo "$d" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: not found ($d: no such directory)" >&5 $as_echo "not found ($d: no such directory)" >&6; } fi # replace the directory string with "yes". with_motif_req="yes" with_motif=$with_motif_req ;; *) echo "" echo "error: argument to --with-motif must be \"yes\", \"no\", or a directory." echo " If it is a directory, then \`DIR/include' will be added to" echo " the -I list, and \`DIR/lib' will be added to the -L list." exit 1 ;; esac if test "$with_motif" != yes -a "$with_motif" != no ; then echo "error: must be yes or no: --with-motif=$with_motif" exit 1 fi if test "$with_motif" = yes; then have_motif=no ac_save_CPPFLAGS="$CPPFLAGS" if test \! -z "$includedir" ; then CPPFLAGS="$CPPFLAGS -I$includedir" fi CPPFLAGS="$CPPFLAGS $X_CFLAGS" CPPFLAGS=`eval eval eval eval eval eval eval eval eval echo $CPPFLAGS` ac_fn_c_check_header_compile "$LINENO" "Xm/Xm.h" "ac_cv_header_Xm_Xm_h" "#include #include #include " if test "x$ac_cv_header_Xm_Xm_h" = xyes; then : have_motif=yes $as_echo "#define HAVE_MOTIF 1" >>confdefs.h MOTIF_LIBS="$MOTIF_LIBS -lXm" fi CPPFLAGS="$ac_save_CPPFLAGS" fi if test "$have_motif" = yes; then ac_save_CPPFLAGS="$CPPFLAGS" if test \! -z "$includedir" ; then CPPFLAGS="$CPPFLAGS -I$includedir" fi CPPFLAGS="$CPPFLAGS $X_CFLAGS" CPPFLAGS=`eval eval eval eval eval eval eval eval eval echo $CPPFLAGS` ac_fn_c_check_header_compile "$LINENO" "Xm/ComboBox.h" "ac_cv_header_Xm_ComboBox_h" "#include #include #include " if test "x$ac_cv_header_Xm_ComboBox_h" = xyes; then : $as_echo "#define HAVE_XMCOMBOBOX 1" >>confdefs.h fi CPPFLAGS="$ac_save_CPPFLAGS" fi ############################################################################### # # Checking whether Motif is really Lesstif. # ############################################################################### have_lesstif=no if test "$have_motif" = yes ; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether Motif is really LessTif" >&5 $as_echo_n "checking whether Motif is really LessTif... " >&6; } if ${ac_cv_have_lesstif+:} false; then : $as_echo_n "(cached) " >&6 else ac_save_CPPFLAGS="$CPPFLAGS" if test \! -z "$includedir" ; then CPPFLAGS="$CPPFLAGS -I$includedir" fi CPPFLAGS="$CPPFLAGS $X_CFLAGS" CPPFLAGS=`eval eval eval eval eval eval eval eval eval echo $CPPFLAGS` cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { long vers = LesstifVersion; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_have_lesstif=yes else ac_cv_have_lesstif=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext CPPFLAGS="$ac_save_CPPFLAGS" fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_have_lesstif" >&5 $as_echo "$ac_cv_have_lesstif" >&6; } have_lesstif=$ac_cv_have_lesstif fi lesstif_version=unknown lesstif_version_string=unknown if test "$have_lesstif" = yes ; then ltv=unknown echo unknown > conftest-lt { $as_echo "$as_me:${as_lineno-$LINENO}: checking LessTif version number" >&5 $as_echo_n "checking LessTif version number... " >&6; } if ${ac_cv_lesstif_version_string+:} false; then : $as_echo_n "(cached) " >&6 else ac_save_CPPFLAGS="$CPPFLAGS" if test \! -z "$includedir" ; then CPPFLAGS="$CPPFLAGS -I$includedir" fi CPPFLAGS="$CPPFLAGS $X_CFLAGS" CPPFLAGS=`eval eval eval eval eval eval eval eval eval echo $CPPFLAGS` if test "$cross_compiling" = yes; then : ac_cv_lesstif_version=unknown ac_cv_lesstif_version_string=unknown else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include int main() { FILE *f = fopen("conftest-lt", "w"); if (!f) exit(1); fprintf(f, "%d %d.%d\n", LesstifVersion, LESSTIF_VERSION, LESSTIF_REVISION); fclose(f); exit(0); } _ACEOF if ac_fn_c_try_run "$LINENO"; then : ltv=`cat conftest-lt` ac_cv_lesstif_version=`echo $ltv | sed 's/ .*//'` ac_cv_lesstif_version_string=`echo $ltv | sed 's/.* //'` else ac_cv_lesstif_version=unknown ac_cv_lesstif_version_string=unknown fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi CPPFLAGS="$ac_save_CPPFLAGS" fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lesstif_version_string" >&5 $as_echo "$ac_cv_lesstif_version_string" >&6; } rm -rf conftest-lt lesstif_version=$ac_cv_lesstif_version lesstif_version_string=$ac_cv_lesstif_version_string fi if test "$have_motif" = yes ; then mtv=unknown echo unknown > conftest-mt { $as_echo "$as_me:${as_lineno-$LINENO}: checking Motif version number" >&5 $as_echo_n "checking Motif version number... " >&6; } if ${ac_cv_motif_version_string+:} false; then : $as_echo_n "(cached) " >&6 else ac_save_CPPFLAGS="$CPPFLAGS" if test \! -z "$includedir" ; then CPPFLAGS="$CPPFLAGS -I$includedir" fi CPPFLAGS="$CPPFLAGS $X_CFLAGS" CPPFLAGS=`eval eval eval eval eval eval eval eval eval echo $CPPFLAGS` if test "$cross_compiling" = yes; then : ac_cv_motif_version=unknown ac_cv_motif_version_string=unknown else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include int main() { FILE *f = fopen("conftest-mt", "w"); if (!f) exit(1); fprintf(f, "%d %d.%d\n", XmVersion, XmVERSION, XmREVISION); fclose(f); exit(0); } _ACEOF if ac_fn_c_try_run "$LINENO"; then : mtv=`cat conftest-mt` ac_cv_motif_version=`echo $mtv | sed 's/ .*//'` ac_cv_motif_version_string=`echo $mtv | sed 's/.* //'` else ac_cv_motif_version=unknown ac_cv_motif_version_string=unknown fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi CPPFLAGS="$ac_save_CPPFLAGS" fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_motif_version_string" >&5 $as_echo "$ac_cv_motif_version_string" >&6; } rm -rf conftest-mt motif_version=$ac_cv_motif_version motif_version_string=$ac_cv_motif_version_string fi ############################################################################### # # Checking whether Motif requires -lXpm. # # If this is Motif 2.x, and we have XPM, then link against XPM as well. # The deal is, Motif 2.x requires XPM -- but it's a compilation option # of the library whether to build the XPM code into libXm, or whether # to rely on an external libXm. So the only way to tell whether XPM is # a link-time requirement is to examine libXm.a, which is very # difficult to do in an autoconf script. So... if it's Motif 2.x, we # always link against XPM if the XPM lib exists (and this will be a # no-op if libXm happens to already have the XPM code in it.) # ############################################################################### motif_requires_xpm=no if test "$have_motif" = yes ; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether Motif requires XPM" >&5 $as_echo_n "checking whether Motif requires XPM... " >&6; } if test "$motif_version" = "unknown" || test "$motif_version" -ge 2000 then motif_requires_xpm=yes { $as_echo "$as_me:${as_lineno-$LINENO}: result: maybe" >&5 $as_echo "maybe" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi ############################################################################### # # Checking whether Motif requires -lXp. # # Some versions of Motif (2.1.0, at least) require -lXp, the "X Printing # Extension". Why this extension isn't in -lXext with all the others, # I have no idea. # ############################################################################### have_xp_ext=no if test "$have_motif" = yes ; then have_xp_ext=no ac_save_CPPFLAGS="$CPPFLAGS" ac_save_LDFLAGS="$LDFLAGS" # ac_save_LIBS="$LIBS" if test \! -z "$includedir" ; then CPPFLAGS="$CPPFLAGS -I$includedir" fi # note: $X_CFLAGS includes $x_includes CPPFLAGS="$CPPFLAGS $X_CFLAGS" if test \! -z "$libdir" ; then LDFLAGS="$LDFLAGS -L$libdir" fi # note: $X_LIBS includes $x_libraries LDFLAGS="$LDFLAGS $X_LIBS $X_EXTRA_LIBS" CPPFLAGS=`eval eval eval eval eval eval eval eval eval echo $CPPFLAGS` LDFLAGS=`eval eval eval eval eval eval eval eval eval echo $LDFLAGS` { $as_echo "$as_me:${as_lineno-$LINENO}: checking for XpQueryExtension in -lXp" >&5 $as_echo_n "checking for XpQueryExtension in -lXp... " >&6; } if ${ac_cv_lib_Xp_XpQueryExtension+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lXp -lX11 -lXext -lm $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char XpQueryExtension (); int main () { return XpQueryExtension (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_Xp_XpQueryExtension=yes else ac_cv_lib_Xp_XpQueryExtension=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_Xp_XpQueryExtension" >&5 $as_echo "$ac_cv_lib_Xp_XpQueryExtension" >&6; } if test "x$ac_cv_lib_Xp_XpQueryExtension" = xyes; then : have_xp_ext=yes; MOTIF_LIBS="$MOTIF_LIBS -lXp" else true fi CPPFLAGS="$ac_save_CPPFLAGS" LDFLAGS="$ac_save_LDFLAGS" # LIBS="$ac_save_LIBS" fi ############################################################################### # # Checking whether Motif requires -lXintl (for _Xsetlocale.) # ############################################################################### have_xintl=no if test "$have_motif" = yes ; then ac_save_CPPFLAGS="$CPPFLAGS" ac_save_LDFLAGS="$LDFLAGS" # ac_save_LIBS="$LIBS" if test \! -z "$includedir" ; then CPPFLAGS="$CPPFLAGS -I$includedir" fi # note: $X_CFLAGS includes $x_includes CPPFLAGS="$CPPFLAGS $X_CFLAGS" if test \! -z "$libdir" ; then LDFLAGS="$LDFLAGS -L$libdir" fi # note: $X_LIBS includes $x_libraries LDFLAGS="$LDFLAGS $X_LIBS $X_EXTRA_LIBS" CPPFLAGS=`eval eval eval eval eval eval eval eval eval echo $CPPFLAGS` LDFLAGS=`eval eval eval eval eval eval eval eval eval echo $LDFLAGS` { $as_echo "$as_me:${as_lineno-$LINENO}: checking for _Xsetlocale in -lXintl" >&5 $as_echo_n "checking for _Xsetlocale in -lXintl... " >&6; } if ${ac_cv_lib_Xintl__Xsetlocale+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lXintl -lX11 -lXext -lm $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char _Xsetlocale (); int main () { return _Xsetlocale (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_Xintl__Xsetlocale=yes else ac_cv_lib_Xintl__Xsetlocale=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_Xintl__Xsetlocale" >&5 $as_echo "$ac_cv_lib_Xintl__Xsetlocale" >&6; } if test "x$ac_cv_lib_Xintl__Xsetlocale" = xyes; then : have_xintl=yes else have_xintl=no fi CPPFLAGS="$ac_save_CPPFLAGS" LDFLAGS="$ac_save_LDFLAGS" # LIBS="$ac_save_LIBS" if test "$have_xintl" = yes; then MOTIF_LIBS="$MOTIF_LIBS -lXintl" fi fi ############################################################################### # # Check for -lGL or -lMesaGL. # ############################################################################### have_gl=no ac_have_mesa_gl=no with_gl_req=unspecified gl_halfassed=no # Check whether --with-gl was given. if test "${with_gl+set}" = set; then : withval=$with_gl; with_gl="$withval"; with_gl_req="$withval" else with_gl=yes fi case "$with_gl" in yes) ;; no) ;; /*) { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GL headers" >&5 $as_echo_n "checking for GL headers... " >&6; } d=$with_gl/include if test -d $d; then X_CFLAGS="-I$d $X_CFLAGS" { $as_echo "$as_me:${as_lineno-$LINENO}: result: $d" >&5 $as_echo "$d" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: not found ($d: no such directory)" >&5 $as_echo "not found ($d: no such directory)" >&6; } fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GL libs" >&5 $as_echo_n "checking for GL libs... " >&6; } d=$with_gl/lib if test -d $d; then X_LIBS="-L$d $X_LIBS" { $as_echo "$as_me:${as_lineno-$LINENO}: result: $d" >&5 $as_echo "$d" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: not found ($d: no such directory)" >&5 $as_echo "not found ($d: no such directory)" >&6; } fi # replace the directory string with "yes". with_gl_req="yes" with_gl=$with_gl_req ;; *) echo "" echo "error: argument to --with-gl must be \"yes\", \"no\", or a directory." echo " If it is a directory, then \`DIR/include' will be added to" echo " the -I list, and \`DIR/lib' will be added to the -L list." exit 1 ;; esac ac_mesagl_version=unknown ac_mesagl_version_string=unknown if test "$with_gl" = yes; then ac_save_CPPFLAGS="$CPPFLAGS" if test \! -z "$includedir" ; then CPPFLAGS="$CPPFLAGS -I$includedir" fi CPPFLAGS="$CPPFLAGS $X_CFLAGS" CPPFLAGS=`eval eval eval eval eval eval eval eval eval echo $CPPFLAGS` ac_fn_c_check_header_mongrel "$LINENO" "GL/gl.h" "ac_cv_header_GL_gl_h" "$ac_includes_default" if test "x$ac_cv_header_GL_gl_h" = xyes; then : have_gl=yes else have_gl=no fi CPPFLAGS="$ac_save_CPPFLAGS" if test "$have_gl" = yes ; then ac_save_CPPFLAGS="$CPPFLAGS" if test \! -z "$includedir" ; then CPPFLAGS="$CPPFLAGS -I$includedir" fi CPPFLAGS="$CPPFLAGS $X_CFLAGS" CPPFLAGS=`eval eval eval eval eval eval eval eval eval echo $CPPFLAGS` ac_fn_c_check_header_compile "$LINENO" "GL/glx.h" "ac_cv_header_GL_glx_h" "#include " if test "x$ac_cv_header_GL_glx_h" = xyes; then : have_gl=yes else have_gl=no fi CPPFLAGS="$ac_save_CPPFLAGS" fi # If we have the headers, try and figure out which vendor it's from. # if test "$have_gl" = yes ; then # We need to know whether it's MesaGL so that we know which libraries # to link against. # { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether GL is really MesaGL" >&5 $as_echo_n "checking whether GL is really MesaGL... " >&6; } if ${ac_cv_have_mesa_gl+:} false; then : $as_echo_n "(cached) " >&6 else ac_cv_have_mesa_gl=no if test "$ac_macosx" = no; then # WTF! MacOS 10.5.0 ships the Mesa GL headers! # It's not really Mesa, is it? ac_save_CPPFLAGS="$CPPFLAGS" if test \! -z "$includedir" ; then CPPFLAGS="$CPPFLAGS -I$includedir" fi CPPFLAGS="$CPPFLAGS $X_CFLAGS" CPPFLAGS=`eval eval eval eval eval eval eval eval eval echo $CPPFLAGS` cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "Mesa|MESA" >/dev/null 2>&1; then : ac_cv_have_mesa_gl=yes fi rm -rf conftest* CPPFLAGS="$ac_save_CPPFLAGS" fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_have_mesa_gl" >&5 $as_echo "$ac_cv_have_mesa_gl" >&6; } ac_have_mesa_gl=$ac_cv_have_mesa_gl gl_lib_1="" GL_LIBS="" if test "$ac_macosx" = yes; then # Without these, every link against libGL gets a bunch of useless # warnings. # osx_crud="-bind_at_load -multiply_defined suppress" { $as_echo "$as_me:${as_lineno-$LINENO}: result: adding \"$osx_crud\" to GL_LIBS" >&5 $as_echo "adding \"$osx_crud\" to GL_LIBS" >&6; } GL_LIBS="$GL_LIBS $osx_crud" unset osx_crud # New lossage in 10.5.0: without this, we get: # ld: cycle in dylib re-exports with /usr/X11/lib/libGL.dylib # osx_crud="/System/Library/Frameworks/OpenGL.framework/Versions/A/Libraries/libGL.dylib" osx_crud="-Wl,-dylib_file,${osx_crud}:${osx_crud}" { $as_echo "$as_me:${as_lineno-$LINENO}: result: adding \"$osx_crud\" to GL_LIBS" >&5 $as_echo "adding \"$osx_crud\" to GL_LIBS" >&6; } GL_LIBS="$GL_LIBS $osx_crud" unset osx_crud # New lossage in 10.6.8: we can't allow -L/opt/local/lib to be in the # link line, or at runtime XQueryExtension gets a segv due to some kind # of library version skew. Libs must come from /usr/X11/lib even if # $prefix and/or $exec_prefix are set to /opt/local/. # { $as_echo "$as_me:${as_lineno-$LINENO}: result: omitting \"$libdir\" from LDFLAGS" >&5 $as_echo "omitting \"$libdir\" from LDFLAGS" >&6; } libdir='' fi # Some versions of MesaGL are compiled to require -lpthread. # So if the Mesa headers exist, and -lpthread exists, then always # link -lpthread after the Mesa libs (be they named -lGL or -lMesaGL.) # # Oftentimes, AX_PTHREAD will bring in -lpthread as well; but that ends # up before -l(Mesa)GL, instead of after where it would belong. # if test "$ac_have_mesa_gl" = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for pthread_create in -lpthread" >&5 $as_echo_n "checking for pthread_create in -lpthread... " >&6; } if ${ac_cv_lib_pthread_pthread_create+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lpthread $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char pthread_create (); int main () { return pthread_create (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_pthread_pthread_create=yes else ac_cv_lib_pthread_pthread_create=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_pthread_pthread_create" >&5 $as_echo "$ac_cv_lib_pthread_pthread_create" >&6; } if test "x$ac_cv_lib_pthread_pthread_create" = xyes; then : GL_LIBS="-lpthread" fi fi # If we have Mesa headers, check to see if we can link against -lMesaGL. # If we don't have Mesa headers, or we don't have -lMesaGL, try -lGL. # Else, warn that GL is busted. (We have the headers, but no libs.) # if test "$ac_have_mesa_gl" = yes ; then ac_save_CPPFLAGS="$CPPFLAGS" ac_save_LDFLAGS="$LDFLAGS" # ac_save_LIBS="$LIBS" if test \! -z "$includedir" ; then CPPFLAGS="$CPPFLAGS -I$includedir" fi # note: $X_CFLAGS includes $x_includes CPPFLAGS="$CPPFLAGS $X_CFLAGS" if test \! -z "$libdir" ; then LDFLAGS="$LDFLAGS -L$libdir" fi # note: $X_LIBS includes $x_libraries LDFLAGS="$LDFLAGS $X_LIBS $X_EXTRA_LIBS" CPPFLAGS=`eval eval eval eval eval eval eval eval eval echo $CPPFLAGS` LDFLAGS=`eval eval eval eval eval eval eval eval eval echo $LDFLAGS` { $as_echo "$as_me:${as_lineno-$LINENO}: checking for glXCreateContext in -lMesaGL" >&5 $as_echo_n "checking for glXCreateContext in -lMesaGL... " >&6; } if ${ac_cv_lib_MesaGL_glXCreateContext+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lMesaGL -lMesaGLU $GL_LIBS -lX11 -lXext $VIDMODE_LIBS -lm $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char glXCreateContext (); int main () { return glXCreateContext (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_MesaGL_glXCreateContext=yes else ac_cv_lib_MesaGL_glXCreateContext=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_MesaGL_glXCreateContext" >&5 $as_echo "$ac_cv_lib_MesaGL_glXCreateContext" >&6; } if test "x$ac_cv_lib_MesaGL_glXCreateContext" = xyes; then : gl_lib_1="MesaGL" GL_LIBS="-lMesaGL -lMesaGLU $VIDMODE_LIBS $GL_LIBS" fi CPPFLAGS="$ac_save_CPPFLAGS" LDFLAGS="$ac_save_LDFLAGS" # LIBS="$ac_save_LIBS" fi if test "$gl_lib_1" = "" ; then ac_save_CPPFLAGS="$CPPFLAGS" ac_save_LDFLAGS="$LDFLAGS" # ac_save_LIBS="$LIBS" if test \! -z "$includedir" ; then CPPFLAGS="$CPPFLAGS -I$includedir" fi # note: $X_CFLAGS includes $x_includes CPPFLAGS="$CPPFLAGS $X_CFLAGS" if test \! -z "$libdir" ; then LDFLAGS="$LDFLAGS -L$libdir" fi # note: $X_LIBS includes $x_libraries LDFLAGS="$LDFLAGS $X_LIBS $X_EXTRA_LIBS" CPPFLAGS=`eval eval eval eval eval eval eval eval eval echo $CPPFLAGS` LDFLAGS=`eval eval eval eval eval eval eval eval eval echo $LDFLAGS` { $as_echo "$as_me:${as_lineno-$LINENO}: checking for glXCreateContext in -lGL" >&5 $as_echo_n "checking for glXCreateContext in -lGL... " >&6; } if ${ac_cv_lib_GL_glXCreateContext+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lGL -lGLU $GL_LIBS -lX11 -lXext $VIDMODE_LIBS -lm $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char glXCreateContext (); int main () { return glXCreateContext (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_GL_glXCreateContext=yes else ac_cv_lib_GL_glXCreateContext=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_GL_glXCreateContext" >&5 $as_echo "$ac_cv_lib_GL_glXCreateContext" >&6; } if test "x$ac_cv_lib_GL_glXCreateContext" = xyes; then : gl_lib_1="GL" GL_LIBS="-lGL -lGLU $VIDMODE_LIBS $GL_LIBS" fi CPPFLAGS="$ac_save_CPPFLAGS" LDFLAGS="$ac_save_LDFLAGS" # LIBS="$ac_save_LIBS" fi if test "$gl_lib_1" = "" ; then # we have headers, but no libs -- bail. have_gl=no ac_have_mesa_gl=no gl_halfassed=yes else # linking works -- we can build the GL hacks. $as_echo "#define HAVE_GL 1" >>confdefs.h if test "$ac_have_mesa_gl" = yes ; then $as_echo "#define HAVE_MESA_GL 1" >>confdefs.h fi fi fi # Now that we know we have GL headers and libs, do some more GL testing. # if test "$have_gl" = yes ; then # If it's MesaGL, we'd like to issue a warning if the version number # is less than or equal to 2.6, because that version had a security bug. # if test "$ac_have_mesa_gl" = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking MesaGL version number" >&5 $as_echo_n "checking MesaGL version number... " >&6; } if ${ac_cv_mesagl_version_string+:} false; then : $as_echo_n "(cached) " >&6 else cat > conftest.$ac_ext < #ifndef MESA_MAJOR_VERSION # include # ifdef XMESA_MAJOR_VERSION /* Around Mesa 3.2, they took out the Mesa version number, so instead, we have to check the XMesa version number (the number of the X protocol support, which seems to be the same as the Mesa version number.) */ # define MESA_MAJOR_VERSION XMESA_MAJOR_VERSION # define MESA_MINOR_VERSION XMESA_MINOR_VERSION # else /* Oh great. Some time after 3.4, they took out the xmesa.h header file, so we have no way of telling what version of Mesa this is at all. So, we'll guess that the osmesa version (the "offscreen protocol") is less than or equal to the real mesa version number. Except that if OSmesa is 3.3, assume at least Mesa 3.4, since OSmesa was 3.3 in Mesa 3.4. And Mesa 3.3 had xmesa.h. What a complete load of shit! */ # include # define MESA_MAJOR_VERSION OSMESA_MAJOR_VERSION # define MESA_MINOR_VERSION OSMESA_MINOR_VERSION or newer, probably? # if OSMESA_MAJOR_VERSION == 3 && OSMESA_MINOR_VERSION == 3 # undef MESA_MINOR_VERSION # define MESA_MINOR_VERSION 4 or newer, probably? # endif # endif #endif configure: MESA_MAJOR_VERSION MESA_MINOR_VERSION EOF ac_save_CPPFLAGS="$CPPFLAGS" if test \! -z "$includedir" ; then CPPFLAGS="$CPPFLAGS -I$includedir" fi CPPFLAGS="$CPPFLAGS $X_CFLAGS" mglv=`(eval "$ac_cpp conftest.$ac_ext") 2>&5 | grep configure:` # M4 sucks!! mglv=`echo "$mglv" | sed -n \ 's/^configure: *\([0-9][0-9]*\) *\([0-9].*\)$/\1.\2/p'` rm -rf conftest.$ac_ext CPPFLAGS="$ac_save_CPPFLAGS" if test "$mglv" = ""; then ac_mesagl_version=unknown ac_mesagl_version_string=unknown else ac_mesagl_version_string="$mglv" # M4 sucks!! maj=`echo "$mglv" | sed -n 's/^\([0-9][0-9]*\)\..*$/\1/p'` min=`echo "$mglv" | sed -n 's/^.*\.\([0-9][0-9]*\).*$/\1/p'` ac_mesagl_version=`echo "$maj * 1000 + $min" | bc` if test -z "$ac_mesagl_version"; then ac_mesagl_version=unknown ac_mesagl_version_string=unknown fi fi ac_cv_mesagl_version=$ac_mesagl_version ac_cv_mesagl_version_string=$ac_mesagl_version_string fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_mesagl_version_string" >&5 $as_echo "$ac_cv_mesagl_version_string" >&6; } ac_mesagl_version=$ac_cv_mesagl_version ac_mesagl_version_string=$ac_cv_mesagl_version_string fi # Check for OpenGL 1.1 features. # ac_save_CPPFLAGS="$CPPFLAGS" ac_save_LDFLAGS="$LDFLAGS" # ac_save_LIBS="$LIBS" if test \! -z "$includedir" ; then CPPFLAGS="$CPPFLAGS -I$includedir" fi # note: $X_CFLAGS includes $x_includes CPPFLAGS="$CPPFLAGS $X_CFLAGS" if test \! -z "$libdir" ; then LDFLAGS="$LDFLAGS -L$libdir" fi # note: $X_LIBS includes $x_libraries LDFLAGS="$LDFLAGS $X_LIBS $X_EXTRA_LIBS" CPPFLAGS=`eval eval eval eval eval eval eval eval eval echo $CPPFLAGS` LDFLAGS=`eval eval eval eval eval eval eval eval eval echo $LDFLAGS` as_ac_Lib=`$as_echo "ac_cv_lib_$gl_lib_1''_glBindTexture" | $as_tr_sh` { $as_echo "$as_me:${as_lineno-$LINENO}: checking for glBindTexture in -l$gl_lib_1" >&5 $as_echo_n "checking for glBindTexture in -l$gl_lib_1... " >&6; } if eval \${$as_ac_Lib+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-l$gl_lib_1 $GL_LIBS -lX11 -lXext -lm $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char glBindTexture (); int main () { return glBindTexture (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : eval "$as_ac_Lib=yes" else eval "$as_ac_Lib=no" fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi eval ac_res=\$$as_ac_Lib { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } if eval test \"x\$"$as_ac_Lib"\" = x"yes"; then : $as_echo "#define HAVE_GLBINDTEXTURE 1" >>confdefs.h else true fi CPPFLAGS="$ac_save_CPPFLAGS" LDFLAGS="$ac_save_LDFLAGS" # LIBS="$ac_save_LIBS" fi elif test "$with_gl" != no; then echo "error: must be yes or no: --with-gl=$with_gl" exit 1 fi ############################################################################### # # Check for -lgle. # ############################################################################### have_gle=no with_gle_req=unspecified gle_halfassed=no # Check whether --with-gle was given. if test "${with_gle+set}" = set; then : withval=$with_gle; with_gle="$withval"; with_gle_req="$withval" else with_gle=yes fi case "$with_gle" in yes) ;; no) ;; /*) { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GLE headers" >&5 $as_echo_n "checking for GLE headers... " >&6; } d=$with_gle/include if test -d $d; then X_CFLAGS="-I$d $X_CFLAGS" { $as_echo "$as_me:${as_lineno-$LINENO}: result: $d" >&5 $as_echo "$d" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: not found ($d: no such directory)" >&5 $as_echo "not found ($d: no such directory)" >&6; } fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GLE libs" >&5 $as_echo_n "checking for GLE libs... " >&6; } d=$with_gle/lib if test -d $d; then X_LIBS="-L$d $X_LIBS" { $as_echo "$as_me:${as_lineno-$LINENO}: result: $d" >&5 $as_echo "$d" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: not found ($d: no such directory)" >&5 $as_echo "not found ($d: no such directory)" >&6; } fi # replace the directory string with "yes". with_gle_req="yes" with_gle=$with_gle_req ;; *) echo "" echo "error: argument to --with-gle must be \"yes\", \"no\", or a directory." echo " If it is a directory, then \`DIR/include' will be added to" echo " the -I list, and \`DIR/lib' will be added to the -L list." exit 1 ;; esac GLE_LIBS="" if test "$have_gl" = no ; then true elif test "$with_gle" = yes; then ac_save_CPPFLAGS="$CPPFLAGS" if test \! -z "$includedir" ; then CPPFLAGS="$CPPFLAGS -I$includedir" fi CPPFLAGS="$CPPFLAGS $X_CFLAGS" CPPFLAGS=`eval eval eval eval eval eval eval eval eval echo $CPPFLAGS` ac_fn_c_check_header_compile "$LINENO" "GL/gle.h" "ac_cv_header_GL_gle_h" "#include " if test "x$ac_cv_header_GL_gle_h" = xyes; then : have_gle3=yes else have_gle3=no fi CPPFLAGS="$ac_save_CPPFLAGS" if test "$have_gle3" = yes ; then have_gle=yes; else ac_save_CPPFLAGS="$CPPFLAGS" if test \! -z "$includedir" ; then CPPFLAGS="$CPPFLAGS -I$includedir" fi CPPFLAGS="$CPPFLAGS $X_CFLAGS" CPPFLAGS=`eval eval eval eval eval eval eval eval eval echo $CPPFLAGS` ac_fn_c_check_header_compile "$LINENO" "GL/gutil.h" "ac_cv_header_GL_gutil_h" "#include " if test "x$ac_cv_header_GL_gutil_h" = xyes; then : have_gle=yes else have_gle=no fi CPPFLAGS="$ac_save_CPPFLAGS" if test "$have_gle" = yes ; then ac_save_CPPFLAGS="$CPPFLAGS" if test \! -z "$includedir" ; then CPPFLAGS="$CPPFLAGS -I$includedir" fi CPPFLAGS="$CPPFLAGS $X_CFLAGS" CPPFLAGS=`eval eval eval eval eval eval eval eval eval echo $CPPFLAGS` ac_fn_c_check_header_compile "$LINENO" "GL/tube.h" "ac_cv_header_GL_tube_h" "#include " if test "x$ac_cv_header_GL_tube_h" = xyes; then : have_gle=yes else have_gle=no fi CPPFLAGS="$ac_save_CPPFLAGS" fi fi if test "$have_gle" = yes ; then have_gle=no gle_halfassed=yes ac_save_CPPFLAGS="$CPPFLAGS" ac_save_LDFLAGS="$LDFLAGS" # ac_save_LIBS="$LIBS" if test \! -z "$includedir" ; then CPPFLAGS="$CPPFLAGS -I$includedir" fi # note: $X_CFLAGS includes $x_includes CPPFLAGS="$CPPFLAGS $X_CFLAGS" if test \! -z "$libdir" ; then LDFLAGS="$LDFLAGS -L$libdir" fi # note: $X_LIBS includes $x_libraries LDFLAGS="$LDFLAGS $X_LIBS $X_EXTRA_LIBS" CPPFLAGS=`eval eval eval eval eval eval eval eval eval echo $CPPFLAGS` LDFLAGS=`eval eval eval eval eval eval eval eval eval echo $LDFLAGS` { $as_echo "$as_me:${as_lineno-$LINENO}: checking for gleCreateGC in -lgle" >&5 $as_echo_n "checking for gleCreateGC in -lgle... " >&6; } if ${ac_cv_lib_gle_gleCreateGC+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lgle $GL_LIBS -lX11 -lXext -lm $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char gleCreateGC (); int main () { return gleCreateGC (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_gle_gleCreateGC=yes else ac_cv_lib_gle_gleCreateGC=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_gle_gleCreateGC" >&5 $as_echo "$ac_cv_lib_gle_gleCreateGC" >&6; } if test "x$ac_cv_lib_gle_gleCreateGC" = xyes; then : have_gle=yes; gle_halfassed=no; GLE_LIBS="-lgle" fi CPPFLAGS="$ac_save_CPPFLAGS" LDFLAGS="$ac_save_LDFLAGS" # LIBS="$ac_save_LIBS" fi if test "$have_gle" = yes ; then have_gle=no gle_halfassed=yes # sometimes the libmatrix stuff is included in libgle. look there first. # # I don't get it. For some reason, this test passes on SGI, as if # uview_direction_d() was in libgle -- but it's not, it's in libmatrix. # Yet the link is succeeding. Why??? # # AC_CHECK_X_LIB(gle, uview_direction_d, # [have_gle=yes; gle_halfassed=no], # [], $GL_LIBS -lX11 -lXext -lm) # As of GLE 3 this is in libgle, and has changed name to uview_direction! # *sigh* if test "$have_gle3" = yes ; then ac_save_CPPFLAGS="$CPPFLAGS" ac_save_LDFLAGS="$LDFLAGS" # ac_save_LIBS="$LIBS" if test \! -z "$includedir" ; then CPPFLAGS="$CPPFLAGS -I$includedir" fi # note: $X_CFLAGS includes $x_includes CPPFLAGS="$CPPFLAGS $X_CFLAGS" if test \! -z "$libdir" ; then LDFLAGS="$LDFLAGS -L$libdir" fi # note: $X_LIBS includes $x_libraries LDFLAGS="$LDFLAGS $X_LIBS $X_EXTRA_LIBS" CPPFLAGS=`eval eval eval eval eval eval eval eval eval echo $CPPFLAGS` LDFLAGS=`eval eval eval eval eval eval eval eval eval echo $LDFLAGS` { $as_echo "$as_me:${as_lineno-$LINENO}: checking for uview_direction in -lgle" >&5 $as_echo_n "checking for uview_direction in -lgle... " >&6; } if ${ac_cv_lib_gle_uview_direction+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lgle $GL_LIBS -lX11 -lXext -lm $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char uview_direction (); int main () { return uview_direction (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_gle_uview_direction=yes else ac_cv_lib_gle_uview_direction=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_gle_uview_direction" >&5 $as_echo "$ac_cv_lib_gle_uview_direction" >&6; } if test "x$ac_cv_lib_gle_uview_direction" = xyes; then : have_gle=yes; gle_halfassed=no fi CPPFLAGS="$ac_save_CPPFLAGS" LDFLAGS="$ac_save_LDFLAGS" # LIBS="$ac_save_LIBS" fi # if it wasn't in libgle, then look in libmatrix. if test "$have_gle" = no ; then ac_save_CPPFLAGS="$CPPFLAGS" ac_save_LDFLAGS="$LDFLAGS" # ac_save_LIBS="$LIBS" if test \! -z "$includedir" ; then CPPFLAGS="$CPPFLAGS -I$includedir" fi # note: $X_CFLAGS includes $x_includes CPPFLAGS="$CPPFLAGS $X_CFLAGS" if test \! -z "$libdir" ; then LDFLAGS="$LDFLAGS -L$libdir" fi # note: $X_LIBS includes $x_libraries LDFLAGS="$LDFLAGS $X_LIBS $X_EXTRA_LIBS" CPPFLAGS=`eval eval eval eval eval eval eval eval eval echo $CPPFLAGS` LDFLAGS=`eval eval eval eval eval eval eval eval eval echo $LDFLAGS` { $as_echo "$as_me:${as_lineno-$LINENO}: checking for uview_direction_d in -lmatrix" >&5 $as_echo_n "checking for uview_direction_d in -lmatrix... " >&6; } if ${ac_cv_lib_matrix_uview_direction_d+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lmatrix $GL_LIBS -lX11 -lXext -lm $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char uview_direction_d (); int main () { return uview_direction_d (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_matrix_uview_direction_d=yes else ac_cv_lib_matrix_uview_direction_d=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_matrix_uview_direction_d" >&5 $as_echo "$ac_cv_lib_matrix_uview_direction_d" >&6; } if test "x$ac_cv_lib_matrix_uview_direction_d" = xyes; then : have_gle=yes; gle_halfassed=no; GLE_LIBS="$GLE_LIBS -lmatrix" fi CPPFLAGS="$ac_save_CPPFLAGS" LDFLAGS="$ac_save_LDFLAGS" # LIBS="$ac_save_LIBS" fi fi if test "$have_gle" = yes ; then $as_echo "#define HAVE_GLE 1" >>confdefs.h if test "$have_gle3" = yes ; then $as_echo "#define HAVE_GLE3 1" >>confdefs.h fi fi elif test "$with_gle" != no; then echo "error: must be yes or no: --with-gle=$with_gle" exit 1 fi ############################################################################### # # Handle --with-gles # ############################################################################### with_gles_req=unspecified # Check whether --with-gles was given. if test "${with_gles+set}" = set; then : withval=$with_gles; with_gles="$withval"; with_gles_req="$withval" else with_gles=no fi case "$with_gles" in yes) ;; no) ;; /*) { $as_echo "$as_me:${as_lineno-$LINENO}: checking for JWZGLES headers" >&5 $as_echo_n "checking for JWZGLES headers... " >&6; } d=$with_gles/include if test -d $d; then X_CFLAGS="-I$d $X_CFLAGS" { $as_echo "$as_me:${as_lineno-$LINENO}: result: $d" >&5 $as_echo "$d" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: not found ($d: no such directory)" >&5 $as_echo "not found ($d: no such directory)" >&6; } fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for JWZGLES libs" >&5 $as_echo_n "checking for JWZGLES libs... " >&6; } d=$with_gles/lib if test -d $d; then X_LIBS="-L$d $X_LIBS" { $as_echo "$as_me:${as_lineno-$LINENO}: result: $d" >&5 $as_echo "$d" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: not found ($d: no such directory)" >&5 $as_echo "not found ($d: no such directory)" >&6; } fi # replace the directory string with "yes". with_gles_req="yes" with_gles=$with_gles_req ;; *) echo "" echo "error: argument to --with-gles must be \"yes\", \"no\", or a directory." echo " If it is a directory, then \`DIR/include' will be added to" echo " the -I list, and \`DIR/lib' will be added to the -L list." exit 1 ;; esac if test "$with_gles" = yes; then have_gles=yes $as_echo "#define HAVE_JWZGLES 1" >>confdefs.h JWZGLES_OBJS='$(JWXYZ_BIN)/jwzgles.o' { $as_echo "$as_me:${as_lineno-$LINENO}: result: using OpenGL ES compatiblity shim" >&5 $as_echo "using OpenGL ES compatiblity shim" >&6; } elif test "$with_gles" != no; then echo "error: must be yes or no: --with-gles=$with_xpm" exit 1 fi ############################################################################### # # Check for -lgdk_pixbuf. # These tests are for gdk_pixbuf usage of the hacks, # not xscreensaver-demo (thus we have to test again to get # the libraries right: don't want to pull in all of GTK # for the hacks.) # ############################################################################### have_gdk_pixbuf=no with_gdk_pixbuf_req=unspecified # Check whether --with-pixbuf was given. if test "${with_pixbuf+set}" = set; then : withval=$with_pixbuf; with_gdk_pixbuf="$withval"; with_gdk_pixbuf_req="$withval" else with_gdk_pixbuf=yes fi # if --with-pixbuf=/directory/ was specified, remember that directory so that # we can also look for the `gdk-pixbuf-config' program in that directory. case "$with_gdk_pixbuf" in /*) gdk_pixbuf_dir="$with_gdk_pixbuf" ;; *) gdk_pixbuf_dir="" ;; esac case "$with_gdk_pixbuf" in yes) ;; no) ;; /*) { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GDK_PIXBUF headers" >&5 $as_echo_n "checking for GDK_PIXBUF headers... " >&6; } d=$with_gdk_pixbuf/include if test -d $d; then X_CFLAGS="-I$d $X_CFLAGS" { $as_echo "$as_me:${as_lineno-$LINENO}: result: $d" >&5 $as_echo "$d" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: not found ($d: no such directory)" >&5 $as_echo "not found ($d: no such directory)" >&6; } fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GDK_PIXBUF libs" >&5 $as_echo_n "checking for GDK_PIXBUF libs... " >&6; } d=$with_gdk_pixbuf/lib if test -d $d; then X_LIBS="-L$d $X_LIBS" { $as_echo "$as_me:${as_lineno-$LINENO}: result: $d" >&5 $as_echo "$d" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: not found ($d: no such directory)" >&5 $as_echo "not found ($d: no such directory)" >&6; } fi # replace the directory string with "yes". with_gdk_pixbuf_req="yes" with_gdk_pixbuf=$with_gdk_pixbuf_req ;; *) echo "" echo "error: argument to --with-pixbuf must be \"yes\", \"no\", or a directory." echo " If it is a directory, then \`DIR/include' will be added to" echo " the -I list, and \`DIR/lib' will be added to the -L list." exit 1 ;; esac if test "$with_gdk_pixbuf" != yes -a "$with_gdk_pixbuf" != no ; then echo "error: must be yes or no: --with-pixbuf=$with_gdk_pixbuf" exit 1 fi if test "$with_gdk_pixbuf" = yes; then have_gdk_pixbuf=no pkgs='' ok="yes" pkg_check_version gdk-pixbuf-2.0 2.0.0 pkg_check_version gdk-pixbuf-xlib-2.0 2.0.0 have_gdk_pixbuf="$ok" if test "$have_gdk_pixbuf" = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for gdk-pixbuf includes" >&5 $as_echo_n "checking for gdk-pixbuf includes... " >&6; } if ${ac_cv_gdk_pixbuf_config_cflags+:} false; then : $as_echo_n "(cached) " >&6 else ac_cv_gdk_pixbuf_config_cflags=`$pkg_config --cflags $pkgs` fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_gdk_pixbuf_config_cflags" >&5 $as_echo "$ac_cv_gdk_pixbuf_config_cflags" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking for gdk-pixbuf libs" >&5 $as_echo_n "checking for gdk-pixbuf libs... " >&6; } if ${ac_cv_gdk_pixbuf_config_libs+:} false; then : $as_echo_n "(cached) " >&6 else ac_cv_gdk_pixbuf_config_libs=`$pkg_config --libs $pkgs` fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_gdk_pixbuf_config_libs" >&5 $as_echo "$ac_cv_gdk_pixbuf_config_libs" >&6; } fi ac_gdk_pixbuf_config_cflags=$ac_cv_gdk_pixbuf_config_cflags ac_gdk_pixbuf_config_libs=$ac_cv_gdk_pixbuf_config_libs if test "$have_gdk_pixbuf" = yes; then # # we appear to have pixbuf; check for headers/libs to be sure. # ac_save_gdk_pixbuf_CPPFLAGS="$CPPFLAGS" CPPFLAGS="$CPPFLAGS $ac_gdk_pixbuf_config_cflags" have_gdk_pixbuf=no # check for header A... ac_save_CPPFLAGS="$CPPFLAGS" if test \! -z "$includedir" ; then CPPFLAGS="$CPPFLAGS -I$includedir" fi CPPFLAGS="$CPPFLAGS $X_CFLAGS" CPPFLAGS=`eval eval eval eval eval eval eval eval eval echo $CPPFLAGS` ac_fn_c_check_header_mongrel "$LINENO" "gdk-pixbuf/gdk-pixbuf.h" "ac_cv_header_gdk_pixbuf_gdk_pixbuf_h" "$ac_includes_default" if test "x$ac_cv_header_gdk_pixbuf_gdk_pixbuf_h" = xyes; then : have_gdk_pixbuf=yes fi CPPFLAGS="$ac_save_CPPFLAGS" # if that worked, check for header B... if test "$have_gdk_pixbuf" = yes; then have_gdk_pixbuf=no gdk_pixbuf_halfassed=yes ac_save_CPPFLAGS="$CPPFLAGS" if test \! -z "$includedir" ; then CPPFLAGS="$CPPFLAGS -I$includedir" fi CPPFLAGS="$CPPFLAGS $X_CFLAGS" CPPFLAGS=`eval eval eval eval eval eval eval eval eval echo $CPPFLAGS` ac_fn_c_check_header_mongrel "$LINENO" "gdk-pixbuf/gdk-pixbuf-xlib.h" "ac_cv_header_gdk_pixbuf_gdk_pixbuf_xlib_h" "$ac_includes_default" if test "x$ac_cv_header_gdk_pixbuf_gdk_pixbuf_xlib_h" = xyes; then : have_gdk_pixbuf=yes gdk_pixbuf_halfassed=no fi CPPFLAGS="$ac_save_CPPFLAGS" # yay, it has a new name in Gtk 2.x... if test "$have_gdk_pixbuf" = no; then have_gdk_pixbuf=no gdk_pixbuf_halfassed=yes ac_save_CPPFLAGS="$CPPFLAGS" if test \! -z "$includedir" ; then CPPFLAGS="$CPPFLAGS -I$includedir" fi CPPFLAGS="$CPPFLAGS $X_CFLAGS" CPPFLAGS=`eval eval eval eval eval eval eval eval eval echo $CPPFLAGS` ac_fn_c_check_header_mongrel "$LINENO" "gdk-pixbuf-xlib/gdk-pixbuf-xlib.h" "ac_cv_header_gdk_pixbuf_xlib_gdk_pixbuf_xlib_h" "$ac_includes_default" if test "x$ac_cv_header_gdk_pixbuf_xlib_gdk_pixbuf_xlib_h" = xyes; then : have_gdk_pixbuf=yes gdk_pixbuf_halfassed=no fi CPPFLAGS="$ac_save_CPPFLAGS" fi fi CPPFLAGS="$ac_save_gdk_pixbuf_CPPFLAGS" fi if test "$have_gdk_pixbuf" = yes; then # we have the headers, now check for the libraries have_gdk_pixbuf=no gdk_pixbuf_halfassed=yes { $as_echo "$as_me:${as_lineno-$LINENO}: result: checking for gdk_pixbuf usability..." >&5 $as_echo "checking for gdk_pixbuf usability..." >&6; } # library A... ac_save_CPPFLAGS="$CPPFLAGS" ac_save_LDFLAGS="$LDFLAGS" # ac_save_LIBS="$LIBS" if test \! -z "$includedir" ; then CPPFLAGS="$CPPFLAGS -I$includedir" fi # note: $X_CFLAGS includes $x_includes CPPFLAGS="$CPPFLAGS $X_CFLAGS" if test \! -z "$libdir" ; then LDFLAGS="$LDFLAGS -L$libdir" fi # note: $X_LIBS includes $x_libraries LDFLAGS="$LDFLAGS $X_LIBS $X_EXTRA_LIBS" CPPFLAGS=`eval eval eval eval eval eval eval eval eval echo $CPPFLAGS` LDFLAGS=`eval eval eval eval eval eval eval eval eval echo $LDFLAGS` { $as_echo "$as_me:${as_lineno-$LINENO}: checking for gdk_pixbuf_new_from_file in -lc" >&5 $as_echo_n "checking for gdk_pixbuf_new_from_file in -lc... " >&6; } if ${ac_cv_lib_c_gdk_pixbuf_new_from_file+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lc $ac_gdk_pixbuf_config_libs -lX11 -lXext -lm $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char gdk_pixbuf_new_from_file (); int main () { return gdk_pixbuf_new_from_file (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_c_gdk_pixbuf_new_from_file=yes else ac_cv_lib_c_gdk_pixbuf_new_from_file=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_c_gdk_pixbuf_new_from_file" >&5 $as_echo "$ac_cv_lib_c_gdk_pixbuf_new_from_file" >&6; } if test "x$ac_cv_lib_c_gdk_pixbuf_new_from_file" = xyes; then : have_gdk_pixbuf=yes fi CPPFLAGS="$ac_save_CPPFLAGS" LDFLAGS="$ac_save_LDFLAGS" # LIBS="$ac_save_LIBS" # library B... if test "$have_gdk_pixbuf" = yes; then have_gdk_pixbuf=no ac_save_CPPFLAGS="$CPPFLAGS" ac_save_LDFLAGS="$LDFLAGS" # ac_save_LIBS="$LIBS" if test \! -z "$includedir" ; then CPPFLAGS="$CPPFLAGS -I$includedir" fi # note: $X_CFLAGS includes $x_includes CPPFLAGS="$CPPFLAGS $X_CFLAGS" if test \! -z "$libdir" ; then LDFLAGS="$LDFLAGS -L$libdir" fi # note: $X_LIBS includes $x_libraries LDFLAGS="$LDFLAGS $X_LIBS $X_EXTRA_LIBS" CPPFLAGS=`eval eval eval eval eval eval eval eval eval echo $CPPFLAGS` LDFLAGS=`eval eval eval eval eval eval eval eval eval echo $LDFLAGS` { $as_echo "$as_me:${as_lineno-$LINENO}: checking for gdk_pixbuf_xlib_init in -lc" >&5 $as_echo_n "checking for gdk_pixbuf_xlib_init in -lc... " >&6; } if ${ac_cv_lib_c_gdk_pixbuf_xlib_init+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lc $ac_gdk_pixbuf_config_libs -lX11 -lXext -lm $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char gdk_pixbuf_xlib_init (); int main () { return gdk_pixbuf_xlib_init (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_c_gdk_pixbuf_xlib_init=yes else ac_cv_lib_c_gdk_pixbuf_xlib_init=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_c_gdk_pixbuf_xlib_init" >&5 $as_echo "$ac_cv_lib_c_gdk_pixbuf_xlib_init" >&6; } if test "x$ac_cv_lib_c_gdk_pixbuf_xlib_init" = xyes; then : have_gdk_pixbuf=yes gdk_pixbuf_halfassed=no fi CPPFLAGS="$ac_save_CPPFLAGS" LDFLAGS="$ac_save_LDFLAGS" # LIBS="$ac_save_LIBS" fi fi if test "$have_gdk_pixbuf" = yes; then INCLUDES="$INCLUDES $ac_gdk_pixbuf_config_cflags" XPM_LIBS="$ac_gdk_pixbuf_config_libs" $as_echo "#define HAVE_GDK_PIXBUF 1" >>confdefs.h else { $as_echo "$as_me:${as_lineno-$LINENO}: result: checking for gdk_pixbuf usability... no" >&5 $as_echo "checking for gdk_pixbuf usability... no" >&6; } fi if test "$have_gdk_pixbuf" = yes; then ac_save_CPPFLAGS="$CPPFLAGS" ac_save_LDFLAGS="$LDFLAGS" # ac_save_LIBS="$LIBS" if test \! -z "$includedir" ; then CPPFLAGS="$CPPFLAGS -I$includedir" fi # note: $X_CFLAGS includes $x_includes CPPFLAGS="$CPPFLAGS $X_CFLAGS" if test \! -z "$libdir" ; then LDFLAGS="$LDFLAGS -L$libdir" fi # note: $X_LIBS includes $x_libraries LDFLAGS="$LDFLAGS $X_LIBS $X_EXTRA_LIBS" CPPFLAGS=`eval eval eval eval eval eval eval eval eval echo $CPPFLAGS` LDFLAGS=`eval eval eval eval eval eval eval eval eval echo $LDFLAGS` { $as_echo "$as_me:${as_lineno-$LINENO}: checking for gdk_pixbuf_apply_embedded_orientation in -lc" >&5 $as_echo_n "checking for gdk_pixbuf_apply_embedded_orientation in -lc... " >&6; } if ${ac_cv_lib_c_gdk_pixbuf_apply_embedded_orientation+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lc $ac_gdk_pixbuf_config_libs -lX11 -lXext -lm $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char gdk_pixbuf_apply_embedded_orientation (); int main () { return gdk_pixbuf_apply_embedded_orientation (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_c_gdk_pixbuf_apply_embedded_orientation=yes else ac_cv_lib_c_gdk_pixbuf_apply_embedded_orientation=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_c_gdk_pixbuf_apply_embedded_orientation" >&5 $as_echo "$ac_cv_lib_c_gdk_pixbuf_apply_embedded_orientation" >&6; } if test "x$ac_cv_lib_c_gdk_pixbuf_apply_embedded_orientation" = xyes; then : $as_echo "#define HAVE_GDK_PIXBUF_APPLY_EMBEDDED_ORIENTATION 1" >>confdefs.h fi CPPFLAGS="$ac_save_CPPFLAGS" LDFLAGS="$ac_save_LDFLAGS" # LIBS="$ac_save_LIBS" fi fi ############################################################################### # # Check for -lXpm. # ############################################################################### have_xpm=no with_xpm_req=unspecified # Check whether --with-xpm was given. if test "${with_xpm+set}" = set; then : withval=$with_xpm; with_xpm="$withval"; with_xpm_req="$withval" else with_xpm=yes fi case "$with_xpm" in yes) ;; no) ;; /*) { $as_echo "$as_me:${as_lineno-$LINENO}: checking for XPM headers" >&5 $as_echo_n "checking for XPM headers... " >&6; } d=$with_xpm/include if test -d $d; then X_CFLAGS="-I$d $X_CFLAGS" { $as_echo "$as_me:${as_lineno-$LINENO}: result: $d" >&5 $as_echo "$d" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: not found ($d: no such directory)" >&5 $as_echo "not found ($d: no such directory)" >&6; } fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for XPM libs" >&5 $as_echo_n "checking for XPM libs... " >&6; } d=$with_xpm/lib if test -d $d; then X_LIBS="-L$d $X_LIBS" { $as_echo "$as_me:${as_lineno-$LINENO}: result: $d" >&5 $as_echo "$d" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: not found ($d: no such directory)" >&5 $as_echo "not found ($d: no such directory)" >&6; } fi # replace the directory string with "yes". with_xpm_req="yes" with_xpm=$with_xpm_req ;; *) echo "" echo "error: argument to --with-xpm must be \"yes\", \"no\", or a directory." echo " If it is a directory, then \`DIR/include' will be added to" echo " the -I list, and \`DIR/lib' will be added to the -L list." exit 1 ;; esac if test "$with_xpm" = yes; then ac_save_CPPFLAGS="$CPPFLAGS" if test \! -z "$includedir" ; then CPPFLAGS="$CPPFLAGS -I$includedir" fi CPPFLAGS="$CPPFLAGS $X_CFLAGS" CPPFLAGS=`eval eval eval eval eval eval eval eval eval echo $CPPFLAGS` ac_fn_c_check_header_compile "$LINENO" "X11/xpm.h" "ac_cv_header_X11_xpm_h" "#include " if test "x$ac_cv_header_X11_xpm_h" = xyes; then : have_xpm=yes $as_echo "#define HAVE_XPM 1" >>confdefs.h XPM_LIBS="-lXpm $XPM_LIBS" fi CPPFLAGS="$ac_save_CPPFLAGS" elif test "$with_xpm" != no; then echo "error: must be yes or no: --with-xpm=$with_xpm" exit 1 fi # See comment near $motif_requires_xpm, above. # Need to do this here, after both Motif and XPM have been checked for. # if test "$have_motif" = yes -a "$have_xpm" = yes ; then if test "$motif_requires_xpm" = yes ; then MOTIF_LIBS="$MOTIF_LIBS $XPM_LIBS" fi fi if test "$XPM_LIBS" = "" ; then XPM_LIBS=$(MINIXPM) fi ############################################################################### # # Check for -ljpeg # ############################################################################### have_jpeg=no with_jpeg_req=unspecified jpeg_halfassed=no # Check whether --with-jpeg was given. if test "${with_jpeg+set}" = set; then : withval=$with_jpeg; with_jpeg="$withval"; with_jpeg_req="$withval" else with_jpeg=yes fi case "$with_jpeg" in yes) ;; no) ;; /*) { $as_echo "$as_me:${as_lineno-$LINENO}: checking for JPEG headers" >&5 $as_echo_n "checking for JPEG headers... " >&6; } d=$with_jpeg/include if test -d $d; then X_CFLAGS="-I$d $X_CFLAGS" { $as_echo "$as_me:${as_lineno-$LINENO}: result: $d" >&5 $as_echo "$d" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: not found ($d: no such directory)" >&5 $as_echo "not found ($d: no such directory)" >&6; } fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for JPEG libs" >&5 $as_echo_n "checking for JPEG libs... " >&6; } d=$with_jpeg/lib if test -d $d; then X_LIBS="-L$d $X_LIBS" { $as_echo "$as_me:${as_lineno-$LINENO}: result: $d" >&5 $as_echo "$d" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: not found ($d: no such directory)" >&5 $as_echo "not found ($d: no such directory)" >&6; } fi # replace the directory string with "yes". with_jpeg_req="yes" with_jpeg=$with_jpeg_req ;; *) echo "" echo "error: argument to --with-jpeg must be \"yes\", \"no\", or a directory." echo " If it is a directory, then \`DIR/include' will be added to" echo " the -I list, and \`DIR/lib' will be added to the -L list." exit 1 ;; esac if test "$with_jpeg" != yes -a "$with_jpeg" != no ; then echo "error: must be yes or no: --with-jpeg=$with_jpeg" exit 1 fi if test "$with_jpeg" = yes; then have_jpeg=no ac_save_CPPFLAGS="$CPPFLAGS" if test \! -z "$includedir" ; then CPPFLAGS="$CPPFLAGS -I$includedir" fi CPPFLAGS="$CPPFLAGS $X_CFLAGS" CPPFLAGS=`eval eval eval eval eval eval eval eval eval echo $CPPFLAGS` ac_fn_c_check_header_mongrel "$LINENO" "jpeglib.h" "ac_cv_header_jpeglib_h" "$ac_includes_default" if test "x$ac_cv_header_jpeglib_h" = xyes; then : have_jpeg=yes fi CPPFLAGS="$ac_save_CPPFLAGS" if test "$have_jpeg" = yes; then # we have the header, now check for the library have_jpeg=no jpeg_halfassed=yes ac_save_CPPFLAGS="$CPPFLAGS" ac_save_LDFLAGS="$LDFLAGS" # ac_save_LIBS="$LIBS" if test \! -z "$includedir" ; then CPPFLAGS="$CPPFLAGS -I$includedir" fi # note: $X_CFLAGS includes $x_includes CPPFLAGS="$CPPFLAGS $X_CFLAGS" if test \! -z "$libdir" ; then LDFLAGS="$LDFLAGS -L$libdir" fi # note: $X_LIBS includes $x_libraries LDFLAGS="$LDFLAGS $X_LIBS $X_EXTRA_LIBS" CPPFLAGS=`eval eval eval eval eval eval eval eval eval echo $CPPFLAGS` LDFLAGS=`eval eval eval eval eval eval eval eval eval echo $LDFLAGS` { $as_echo "$as_me:${as_lineno-$LINENO}: checking for jpeg_start_compress in -ljpeg" >&5 $as_echo_n "checking for jpeg_start_compress in -ljpeg... " >&6; } if ${ac_cv_lib_jpeg_jpeg_start_compress+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-ljpeg $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char jpeg_start_compress (); int main () { return jpeg_start_compress (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_jpeg_jpeg_start_compress=yes else ac_cv_lib_jpeg_jpeg_start_compress=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_jpeg_jpeg_start_compress" >&5 $as_echo "$ac_cv_lib_jpeg_jpeg_start_compress" >&6; } if test "x$ac_cv_lib_jpeg_jpeg_start_compress" = xyes; then : have_jpeg=yes jpeg_halfassed=no JPEG_LIBS="-ljpeg" $as_echo "#define HAVE_JPEGLIB 1" >>confdefs.h fi CPPFLAGS="$ac_save_CPPFLAGS" LDFLAGS="$ac_save_LDFLAGS" # LIBS="$ac_save_LIBS" fi fi ############################################################################### # # Check for -lXft # ############################################################################### have_xutf8drawstring=no ac_save_CPPFLAGS="$CPPFLAGS" ac_save_LDFLAGS="$LDFLAGS" # ac_save_LIBS="$LIBS" if test \! -z "$includedir" ; then CPPFLAGS="$CPPFLAGS -I$includedir" fi # note: $X_CFLAGS includes $x_includes CPPFLAGS="$CPPFLAGS $X_CFLAGS" if test \! -z "$libdir" ; then LDFLAGS="$LDFLAGS -L$libdir" fi # note: $X_LIBS includes $x_libraries LDFLAGS="$LDFLAGS $X_LIBS $X_EXTRA_LIBS" CPPFLAGS=`eval eval eval eval eval eval eval eval eval echo $CPPFLAGS` LDFLAGS=`eval eval eval eval eval eval eval eval eval echo $LDFLAGS` { $as_echo "$as_me:${as_lineno-$LINENO}: checking for Xutf8DrawString in -lX11" >&5 $as_echo_n "checking for Xutf8DrawString in -lX11... " >&6; } if ${ac_cv_lib_X11_Xutf8DrawString+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lX11 -lX11 -lXext -lm $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char Xutf8DrawString (); int main () { return Xutf8DrawString (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_X11_Xutf8DrawString=yes else ac_cv_lib_X11_Xutf8DrawString=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_X11_Xutf8DrawString" >&5 $as_echo "$ac_cv_lib_X11_Xutf8DrawString" >&6; } if test "x$ac_cv_lib_X11_Xutf8DrawString" = xyes; then : have_xutf8drawstring=yes else true fi CPPFLAGS="$ac_save_CPPFLAGS" LDFLAGS="$ac_save_LDFLAGS" # LIBS="$ac_save_LIBS" if test "$have_xutf8drawstring" = yes ; then $as_echo "#define HAVE_XUTF8DRAWSTRING 1" >>confdefs.h fi have_xft=no with_xft_req=unspecified xft_halfassed=no # Check whether --with-xft was given. if test "${with_xft+set}" = set; then : withval=$with_xft; with_xft="$withval"; with_xft_req="$withval" else with_xft=yes fi case "$with_xft" in yes) ;; no) ;; /*) { $as_echo "$as_me:${as_lineno-$LINENO}: checking for Xft headers" >&5 $as_echo_n "checking for Xft headers... " >&6; } d=$with_xft/include if test -d $d; then X_CFLAGS="-I$d $X_CFLAGS" { $as_echo "$as_me:${as_lineno-$LINENO}: result: $d" >&5 $as_echo "$d" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: not found ($d: no such directory)" >&5 $as_echo "not found ($d: no such directory)" >&6; } fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for Xft libs" >&5 $as_echo_n "checking for Xft libs... " >&6; } d=$with_xft/lib if test -d $d; then X_LIBS="-L$d $X_LIBS" { $as_echo "$as_me:${as_lineno-$LINENO}: result: $d" >&5 $as_echo "$d" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: not found ($d: no such directory)" >&5 $as_echo "not found ($d: no such directory)" >&6; } fi # replace the directory string with "yes". with_xft_req="yes" with_xft=$with_xft_req ;; *) echo "" echo "error: argument to --with-xft must be \"yes\", \"no\", or a directory." echo " If it is a directory, then \`DIR/include' will be added to" echo " the -I list, and \`DIR/lib' will be added to the -L list." exit 1 ;; esac if test "$with_xft" != yes -a "$with_xft" != no ; then echo "error: must be yes or no: --with-xft=$with_xft" exit 1 fi if test "$with_xft" = yes; then pkgs='' ok="yes" pkg_check_version xft 2.1.0 have_xft="$ok" if test "$have_xft" = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for Xft includes" >&5 $as_echo_n "checking for Xft includes... " >&6; } if ${ac_cv_xft_config_cflags+:} false; then : $as_echo_n "(cached) " >&6 else ac_cv_xft_config_cflags=`$pkg_config --cflags $pkgs` fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_xft_config_cflags" >&5 $as_echo "$ac_cv_xft_config_cflags" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking for Xft libs" >&5 $as_echo_n "checking for Xft libs... " >&6; } if ${ac_cv_xft_config_libs+:} false; then : $as_echo_n "(cached) " >&6 else ac_cv_xft_config_libs=`$pkg_config --libs $pkgs` fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_xft_config_libs" >&5 $as_echo "$ac_cv_xft_config_libs" >&6; } fi ac_xft_config_cflags=$ac_cv_xft_config_cflags ac_xft_config_libs=$ac_cv_xft_config_libs if test "$have_xft" = yes; then # # we appear to have Xft; check for headers/libs to be sure. # ac_save_xft_CPPFLAGS="$CPPFLAGS" CPPFLAGS="$CPPFLAGS $ac_xft_config_cflags" have_xft=no ac_save_CPPFLAGS="$CPPFLAGS" if test \! -z "$includedir" ; then CPPFLAGS="$CPPFLAGS -I$includedir" fi CPPFLAGS="$CPPFLAGS $X_CFLAGS" CPPFLAGS=`eval eval eval eval eval eval eval eval eval echo $CPPFLAGS` ac_fn_c_check_header_mongrel "$LINENO" "X11/Xft/Xft.h" "ac_cv_header_X11_Xft_Xft_h" "$ac_includes_default" if test "x$ac_cv_header_X11_Xft_Xft_h" = xyes; then : have_xft=yes fi CPPFLAGS="$ac_save_CPPFLAGS" CPPFLAGS="$ac_save_xft_CPPFLAGS" fi if test "$have_xft" = yes; then # we have the headers, now check for the libraries have_xft=no xft_halfassed=yes { $as_echo "$as_me:${as_lineno-$LINENO}: result: checking for Xft usability..." >&5 $as_echo "checking for Xft usability..." >&6; } ac_save_CPPFLAGS="$CPPFLAGS" ac_save_LDFLAGS="$LDFLAGS" # ac_save_LIBS="$LIBS" if test \! -z "$includedir" ; then CPPFLAGS="$CPPFLAGS -I$includedir" fi # note: $X_CFLAGS includes $x_includes CPPFLAGS="$CPPFLAGS $X_CFLAGS" if test \! -z "$libdir" ; then LDFLAGS="$LDFLAGS -L$libdir" fi # note: $X_LIBS includes $x_libraries LDFLAGS="$LDFLAGS $X_LIBS $X_EXTRA_LIBS" CPPFLAGS=`eval eval eval eval eval eval eval eval eval echo $CPPFLAGS` LDFLAGS=`eval eval eval eval eval eval eval eval eval echo $LDFLAGS` { $as_echo "$as_me:${as_lineno-$LINENO}: checking for XftDrawStringUtf8 in -lc" >&5 $as_echo_n "checking for XftDrawStringUtf8 in -lc... " >&6; } if ${ac_cv_lib_c_XftDrawStringUtf8+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lc $ac_xft_config_libs -lX11 -lXext -lm $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char XftDrawStringUtf8 (); int main () { return XftDrawStringUtf8 (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_c_XftDrawStringUtf8=yes else ac_cv_lib_c_XftDrawStringUtf8=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_c_XftDrawStringUtf8" >&5 $as_echo "$ac_cv_lib_c_XftDrawStringUtf8" >&6; } if test "x$ac_cv_lib_c_XftDrawStringUtf8" = xyes; then : have_xft=yes fi CPPFLAGS="$ac_save_CPPFLAGS" LDFLAGS="$ac_save_LDFLAGS" # LIBS="$ac_save_LIBS" fi if test "$have_xft" = no; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: checking for Xft usability... no" >&5 $as_echo "checking for Xft usability... no" >&6; } fi fi if test "$have_xft" = yes; then INCLUDES="$INCLUDES $ac_xft_config_cflags" XFT_LIBS="$ac_xft_config_libs" XFT_SRCS='' XFT_OBJS='' $as_echo "#define HAVE_XFT 1" >>confdefs.h else XFT_LIBS='' XFT_SRCS='$(UTILS_SRC)/xft.c' XFT_OBJS='$(UTILS_BIN)/xft.o' fi ############################################################################### # # Check for pty support: this allows 'phosphor' and 'apple2' # to run curses-based programs, or be used as terminal windows. # ############################################################################### PTY_LIBS= for ac_header in pty.h util.h sys/termios.h do : as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default" if eval test \"x\$"$as_ac_Header"\" = x"yes"; then : cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF fi done ac_save_CPPFLAGS="$CPPFLAGS" ac_save_LDFLAGS="$LDFLAGS" # ac_save_LIBS="$LIBS" if test \! -z "$includedir" ; then CPPFLAGS="$CPPFLAGS -I$includedir" fi # note: $X_CFLAGS includes $x_includes CPPFLAGS="$CPPFLAGS $X_CFLAGS" if test \! -z "$libdir" ; then LDFLAGS="$LDFLAGS -L$libdir" fi # note: $X_LIBS includes $x_libraries LDFLAGS="$LDFLAGS $X_LIBS $X_EXTRA_LIBS" CPPFLAGS=`eval eval eval eval eval eval eval eval eval echo $CPPFLAGS` LDFLAGS=`eval eval eval eval eval eval eval eval eval echo $LDFLAGS` { $as_echo "$as_me:${as_lineno-$LINENO}: checking for forkpty in -lutil" >&5 $as_echo_n "checking for forkpty in -lutil... " >&6; } if ${ac_cv_lib_util_forkpty+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lutil $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char forkpty (); int main () { return forkpty (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_util_forkpty=yes else ac_cv_lib_util_forkpty=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_util_forkpty" >&5 $as_echo "$ac_cv_lib_util_forkpty" >&6; } if test "x$ac_cv_lib_util_forkpty" = xyes; then : PTY_LIBS="-lutil" ac_have_forkpty=yes $as_echo "#define HAVE_FORKPTY 1" >>confdefs.h fi CPPFLAGS="$ac_save_CPPFLAGS" LDFLAGS="$ac_save_LDFLAGS" # LIBS="$ac_save_LIBS" if test "$ac_have_forkpty" != yes ; then # we don't need (or have) -lutil on MacOS 10.4.2... ac_save_CPPFLAGS="$CPPFLAGS" ac_save_LDFLAGS="$LDFLAGS" # ac_save_LIBS="$LIBS" if test \! -z "$includedir" ; then CPPFLAGS="$CPPFLAGS -I$includedir" fi # note: $X_CFLAGS includes $x_includes CPPFLAGS="$CPPFLAGS $X_CFLAGS" if test \! -z "$libdir" ; then LDFLAGS="$LDFLAGS -L$libdir" fi # note: $X_LIBS includes $x_libraries LDFLAGS="$LDFLAGS $X_LIBS $X_EXTRA_LIBS" CPPFLAGS=`eval eval eval eval eval eval eval eval eval echo $CPPFLAGS` LDFLAGS=`eval eval eval eval eval eval eval eval eval echo $LDFLAGS` { $as_echo "$as_me:${as_lineno-$LINENO}: checking for forkpty in -lc" >&5 $as_echo_n "checking for forkpty in -lc... " >&6; } if ${ac_cv_lib_c_forkpty+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lc $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char forkpty (); int main () { return forkpty (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_c_forkpty=yes else ac_cv_lib_c_forkpty=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_c_forkpty" >&5 $as_echo "$ac_cv_lib_c_forkpty" >&6; } if test "x$ac_cv_lib_c_forkpty" = xyes; then : PTY_LIBS="" $as_echo "#define HAVE_FORKPTY 1" >>confdefs.h fi CPPFLAGS="$ac_save_CPPFLAGS" LDFLAGS="$ac_save_LDFLAGS" # LIBS="$ac_save_LIBS" fi ############################################################################### # # Check for the XSHM server extension. # ############################################################################### have_xshm=no with_xshm_req=unspecified # Check whether --with-xshm-ext was given. if test "${with_xshm_ext+set}" = set; then : withval=$with_xshm_ext; with_xshm="$withval"; with_xshm_req="$withval" else with_xshm=yes fi case "$with_xshm" in yes) ;; no) ;; /*) { $as_echo "$as_me:${as_lineno-$LINENO}: checking for XSHM headers" >&5 $as_echo_n "checking for XSHM headers... " >&6; } d=$with_xshm/include if test -d $d; then X_CFLAGS="-I$d $X_CFLAGS" { $as_echo "$as_me:${as_lineno-$LINENO}: result: $d" >&5 $as_echo "$d" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: not found ($d: no such directory)" >&5 $as_echo "not found ($d: no such directory)" >&6; } fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for XSHM libs" >&5 $as_echo_n "checking for XSHM libs... " >&6; } d=$with_xshm/lib if test -d $d; then X_LIBS="-L$d $X_LIBS" { $as_echo "$as_me:${as_lineno-$LINENO}: result: $d" >&5 $as_echo "$d" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: not found ($d: no such directory)" >&5 $as_echo "not found ($d: no such directory)" >&6; } fi # replace the directory string with "yes". with_xshm_req="yes" with_xshm=$with_xshm_req ;; *) echo "" echo "error: argument to --with-xshm-ext must be \"yes\", \"no\", or a directory." echo " If it is a directory, then \`DIR/include' will be added to" echo " the -I list, and \`DIR/lib' will be added to the -L list." exit 1 ;; esac if test "$with_xshm" = yes; then # first check for Xshm.h. ac_save_CPPFLAGS="$CPPFLAGS" if test \! -z "$includedir" ; then CPPFLAGS="$CPPFLAGS -I$includedir" fi CPPFLAGS="$CPPFLAGS $X_CFLAGS" CPPFLAGS=`eval eval eval eval eval eval eval eval eval echo $CPPFLAGS` ac_fn_c_check_header_compile "$LINENO" "X11/extensions/XShm.h" "ac_cv_header_X11_extensions_XShm_h" "#include " if test "x$ac_cv_header_X11_extensions_XShm_h" = xyes; then : have_xshm=yes fi CPPFLAGS="$ac_save_CPPFLAGS" # if that succeeded, then check for sys/ipc.h. if test "$have_xshm" = yes; then have_xshm=no ac_save_CPPFLAGS="$CPPFLAGS" if test \! -z "$includedir" ; then CPPFLAGS="$CPPFLAGS -I$includedir" fi CPPFLAGS="$CPPFLAGS $X_CFLAGS" CPPFLAGS=`eval eval eval eval eval eval eval eval eval echo $CPPFLAGS` ac_fn_c_check_header_mongrel "$LINENO" "sys/ipc.h" "ac_cv_header_sys_ipc_h" "$ac_includes_default" if test "x$ac_cv_header_sys_ipc_h" = xyes; then : have_xshm=yes fi CPPFLAGS="$ac_save_CPPFLAGS" fi # if that succeeded, then check for sys/shm.h. if test "$have_xshm" = yes; then have_xshm=no ac_save_CPPFLAGS="$CPPFLAGS" if test \! -z "$includedir" ; then CPPFLAGS="$CPPFLAGS -I$includedir" fi CPPFLAGS="$CPPFLAGS $X_CFLAGS" CPPFLAGS=`eval eval eval eval eval eval eval eval eval echo $CPPFLAGS` ac_fn_c_check_header_mongrel "$LINENO" "sys/shm.h" "ac_cv_header_sys_shm_h" "$ac_includes_default" if test "x$ac_cv_header_sys_shm_h" = xyes; then : have_xshm=yes fi CPPFLAGS="$ac_save_CPPFLAGS" fi # AIX is pathological, as usual: apparently it's normal for the Xshm headers # to exist, but the library code to not exist. And even better, the library # code is in its own library: libXextSam.a. So, if we're on AIX, and that # lib doesn't exist, give up. (This lib gets added to X_EXTRA_LIBS, and # that's not quite right, but close enough.) # case "$host" in *-aix*) if `uname -v` -eq 3 ; then have_xshm=no ac_save_CPPFLAGS="$CPPFLAGS" ac_save_LDFLAGS="$LDFLAGS" # ac_save_LIBS="$LIBS" if test \! -z "$includedir" ; then CPPFLAGS="$CPPFLAGS -I$includedir" fi # note: $X_CFLAGS includes $x_includes CPPFLAGS="$CPPFLAGS $X_CFLAGS" if test \! -z "$libdir" ; then LDFLAGS="$LDFLAGS -L$libdir" fi # note: $X_LIBS includes $x_libraries LDFLAGS="$LDFLAGS $X_LIBS $X_EXTRA_LIBS" CPPFLAGS=`eval eval eval eval eval eval eval eval eval echo $CPPFLAGS` LDFLAGS=`eval eval eval eval eval eval eval eval eval echo $LDFLAGS` { $as_echo "$as_me:${as_lineno-$LINENO}: checking for XShmQueryExtension in -lXextSam" >&5 $as_echo_n "checking for XShmQueryExtension in -lXextSam... " >&6; } if ${ac_cv_lib_XextSam_XShmQueryExtension+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lXextSam -lX11 -lXext -lm $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char XShmQueryExtension (); int main () { return XShmQueryExtension (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_XextSam_XShmQueryExtension=yes else ac_cv_lib_XextSam_XShmQueryExtension=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_XextSam_XShmQueryExtension" >&5 $as_echo "$ac_cv_lib_XextSam_XShmQueryExtension" >&6; } if test "x$ac_cv_lib_XextSam_XShmQueryExtension" = xyes; then : have_xshm=yes; X_EXTRA_LIBS="$X_EXTRA_LIBS -lXextSam" else true fi CPPFLAGS="$ac_save_CPPFLAGS" LDFLAGS="$ac_save_LDFLAGS" # LIBS="$ac_save_LIBS" fi ;; esac # if that succeeded, then we've really got it. if test "$have_xshm" = yes; then $as_echo "#define HAVE_XSHM_EXTENSION 1" >>confdefs.h fi elif test "$with_xshm" != no; then echo "error: must be yes or no: --with-xshm-ext=$with_xshm" exit 1 fi ############################################################################### # # Check for the DOUBLE-BUFFER server extension. # ############################################################################### have_xdbe=no with_xdbe_req=unspecified # Check whether --with-xdbe-ext was given. if test "${with_xdbe_ext+set}" = set; then : withval=$with_xdbe_ext; with_xdbe="$withval"; with_xdbe_req="$withval" else with_xdbe=yes fi case "$with_xdbe" in yes) ;; no) ;; /*) { $as_echo "$as_me:${as_lineno-$LINENO}: checking for DOUBLE-BUFFER headers" >&5 $as_echo_n "checking for DOUBLE-BUFFER headers... " >&6; } d=$with_xdbe/include if test -d $d; then X_CFLAGS="-I$d $X_CFLAGS" { $as_echo "$as_me:${as_lineno-$LINENO}: result: $d" >&5 $as_echo "$d" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: not found ($d: no such directory)" >&5 $as_echo "not found ($d: no such directory)" >&6; } fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for DOUBLE-BUFFER libs" >&5 $as_echo_n "checking for DOUBLE-BUFFER libs... " >&6; } d=$with_xdbe/lib if test -d $d; then X_LIBS="-L$d $X_LIBS" { $as_echo "$as_me:${as_lineno-$LINENO}: result: $d" >&5 $as_echo "$d" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: not found ($d: no such directory)" >&5 $as_echo "not found ($d: no such directory)" >&6; } fi # replace the directory string with "yes". with_xdbe_req="yes" with_xdbe=$with_xdbe_req ;; *) echo "" echo "error: argument to --with-xdbe-ext must be \"yes\", \"no\", or a directory." echo " If it is a directory, then \`DIR/include' will be added to" echo " the -I list, and \`DIR/lib' will be added to the -L list." exit 1 ;; esac if test "$with_xdbe" = yes; then ac_save_CPPFLAGS="$CPPFLAGS" if test \! -z "$includedir" ; then CPPFLAGS="$CPPFLAGS -I$includedir" fi CPPFLAGS="$CPPFLAGS $X_CFLAGS" CPPFLAGS=`eval eval eval eval eval eval eval eval eval echo $CPPFLAGS` ac_fn_c_check_header_compile "$LINENO" "X11/extensions/Xdbe.h" "ac_cv_header_X11_extensions_Xdbe_h" "#include " if test "x$ac_cv_header_X11_extensions_Xdbe_h" = xyes; then : have_xdbe=yes fi CPPFLAGS="$ac_save_CPPFLAGS" if test "$have_xdbe" = yes; then $as_echo "#define HAVE_DOUBLE_BUFFER_EXTENSION 1" >>confdefs.h fi elif test "$with_xdbe" != no; then echo "error: must be yes or no: --with-xdbe-ext=$with_xshm" exit 1 fi ############################################################################### # # Check for the SGI XReadDisplay server extension. # # Note: this has to be down here, rather than up with the other server # extension tests, so that the output of `configure --help' is in the # right order. Arrgh! # ############################################################################### have_readdisplay=no with_readdisplay_req=unspecified # Check whether --with-readdisplay was given. if test "${with_readdisplay+set}" = set; then : withval=$with_readdisplay; with_readdisplay="$withval"; with_readdisplay_req="$withval" else with_readdisplay=yes fi case "$with_readdisplay" in yes) ;; no) ;; /*) { $as_echo "$as_me:${as_lineno-$LINENO}: checking for XReadDisplay headers" >&5 $as_echo_n "checking for XReadDisplay headers... " >&6; } d=$with_readdisplay/include if test -d $d; then X_CFLAGS="-I$d $X_CFLAGS" { $as_echo "$as_me:${as_lineno-$LINENO}: result: $d" >&5 $as_echo "$d" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: not found ($d: no such directory)" >&5 $as_echo "not found ($d: no such directory)" >&6; } fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for XReadDisplay libs" >&5 $as_echo_n "checking for XReadDisplay libs... " >&6; } d=$with_readdisplay/lib if test -d $d; then X_LIBS="-L$d $X_LIBS" { $as_echo "$as_me:${as_lineno-$LINENO}: result: $d" >&5 $as_echo "$d" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: not found ($d: no such directory)" >&5 $as_echo "not found ($d: no such directory)" >&6; } fi # replace the directory string with "yes". with_readdisplay_req="yes" with_readdisplay=$with_readdisplay_req ;; *) echo "" echo "error: argument to --with-readdisplay must be \"yes\", \"no\", or a directory." echo " If it is a directory, then \`DIR/include' will be added to" echo " the -I list, and \`DIR/lib' will be added to the -L list." exit 1 ;; esac if test "$with_readdisplay" = yes; then ac_save_CPPFLAGS="$CPPFLAGS" if test \! -z "$includedir" ; then CPPFLAGS="$CPPFLAGS -I$includedir" fi CPPFLAGS="$CPPFLAGS $X_CFLAGS" CPPFLAGS=`eval eval eval eval eval eval eval eval eval echo $CPPFLAGS` ac_fn_c_check_header_compile "$LINENO" "X11/extensions/readdisplay.h" "ac_cv_header_X11_extensions_readdisplay_h" "#include " if test "x$ac_cv_header_X11_extensions_readdisplay_h" = xyes; then : $as_echo "#define HAVE_READ_DISPLAY_EXTENSION 1" >>confdefs.h fi CPPFLAGS="$ac_save_CPPFLAGS" elif test "$with_readdisplay" != no; then echo "error: must be yes or no: --with-readdisplay=$with_readdisplay" exit 1 fi ############################################################################### # # Check for a directory full of images to use as the default value # of the "imageDirectory" preference. # ############################################################################### have_imagedir=no with_imagedir_req=unspecified # Check whether --with-image-directory was given. if test "${with_image_directory+set}" = set; then : withval=$with_image_directory; with_imagedir="$withval"; with_imagedir_req="$withval" else with_imagedir=yes fi # no HANDLE_X_PATH_ARG for this one case "$with_imagedir" in /*) # absolute path { $as_echo "$as_me:${as_lineno-$LINENO}: checking for image directory $with_imagedir" >&5 $as_echo_n "checking for image directory $with_imagedir... " >&6; } if test -d "$with_imagedir" ; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } with_imagedir="" fi ;; yes) with_imagedir="" #### Could use some more defaults here... for dd in \ "/usr/share/backgrounds/images/" \ "/usr/share/wallpapers/" \ "/Library/Desktop Pictures/" \ ; do if test -z "$with_imagedir"; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for image directory $dd" >&5 $as_echo_n "checking for image directory $dd... " >&6; } if test -d "$dd" ; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } with_imagedir="$dd" else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi done ;; no) with_imagedir="" ;; *) echo "error: must be an absolute path: --with-image-directory=$with_imagedir_req" exit 1 ;; esac ac_cv_imagedir="$with_imagedir" DEFAULT_IMAGES_P='True' DEFAULT_IMAGE_DIRECTORY="$ac_cv_imagedir" if test -z "$DEFAULT_IMAGE_DIRECTORY" ; then DEFAULT_IMAGES_P='False' fi ############################################################################### # # Pick a text file to use as the default of the "textFile" preference. # Any old file will do, but preferably one that will make interesting # shapes when displayed by "starwars" and "fontglide". # ############################################################################### have_textfile=no with_textfile_req=unspecified # Check whether --with-text-file was given. if test "${with_text_file+set}" = set; then : withval=$with_text_file; with_textfile="$withval"; with_textfile_req="$withval" else with_textfile=yes fi # no HANDLE_X_PATH_ARG for this one case "$with_textfile" in /*) # absolute path { $as_echo "$as_me:${as_lineno-$LINENO}: checking for text file $with_textfile" >&5 $as_echo_n "checking for text file $with_textfile... " >&6; } if test -f "$with_textfile" ; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } with_textfile="" fi ;; yes) with_textfile="" #### Could use some more defaults here... for f in \ "/usr/X11R6/lib/X11/doc/README" \ "/usr/share/doc/xserver-common/copyright" \ "/usr/share/doc/xserver-xorg-core/copyright" \ "/usr/X11R6/README" \ "/usr/share/doc/libX11*/COPYING" \ "/usr/X11/share/X11/doc/README*" \ "/usr/share/doc/debian/debian-manifesto" \ ; do if test -z "$with_textfile"; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for text file $f" >&5 $as_echo_n "checking for text file $f... " >&6; } f=`/bin/ls $f 2>&- | head -1` if test -f "$f" ; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } with_textfile="$f" else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi done ;; no) with_textfile="" ;; *) echo "error: must be an absolute path: --with-text-file=$with_textfile_req" exit 1 ;; esac ac_cv_textfile="$with_textfile" DEFAULT_TEXT_FILE="$ac_cv_textfile" ############################################################################### # # Check the browser to see help URL # ############################################################################### have_browser=no with_browser_req=unspecified # Check whether --with-browser was given. if test "${with_browser+set}" = set; then : withval=$with_browser; with_browser="$withval"; with_browser_req="$withval" else with_browser=no fi # no HANDLE_X_PATH_ARG for this one case "$with_browser" in no ) ;; * ) WITH_BROWSER=$with_browser gnome_open_program=$with_browser { $as_echo "$as_me:${as_lineno-$LINENO}: checking for browser $with_browser" >&5 $as_echo_n "checking for browser $with_browser... " >&6; } with_browser_fullpath=`which $with_browser 2>/dev/null` case $with_browser_fullpath in /* ) { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } have_browser=yes ;; * ) { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } # Only warning: we don't want to install all packages for the # dependency of the browser in building stage... echo "WARNING: browser not found: --with-browser=$with_browser" ;; esac ;; esac ac_cv_browser="$with_browser" ############################################################################### # # Check whether it's ok to install some hacks as setuid (e.g., "sonar") # This should be safe, but let's give people the option. # ############################################################################### setuid_hacks_default=no setuid_hacks="$setuid_hacks_default" # Check whether --with-setuid-hacks was given. if test "${with_setuid_hacks+set}" = set; then : withval=$with_setuid_hacks; setuid_hacks="$withval" else setuid_hacks="$setuid_hacks_default" fi case "$setuid_hacks" in yes) ;; no) ;; /*) { $as_echo "$as_me:${as_lineno-$LINENO}: checking for setuid hacks headers" >&5 $as_echo_n "checking for setuid hacks headers... " >&6; } d=$setuid_hacks/include if test -d $d; then X_CFLAGS="-I$d $X_CFLAGS" { $as_echo "$as_me:${as_lineno-$LINENO}: result: $d" >&5 $as_echo "$d" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: not found ($d: no such directory)" >&5 $as_echo "not found ($d: no such directory)" >&6; } fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for setuid hacks libs" >&5 $as_echo_n "checking for setuid hacks libs... " >&6; } d=$setuid_hacks/lib if test -d $d; then X_LIBS="-L$d $X_LIBS" { $as_echo "$as_me:${as_lineno-$LINENO}: result: $d" >&5 $as_echo "$d" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: not found ($d: no such directory)" >&5 $as_echo "not found ($d: no such directory)" >&6; } fi # replace the directory string with "yes". setuid_hacks_req="yes" setuid_hacks=$setuid_hacks_req ;; *) echo "" echo "error: argument to --with-setuid-hacks must be \"yes\", \"no\", or a directory." echo " If it is a directory, then \`DIR/include' will be added to" echo " the -I list, and \`DIR/lib' will be added to the -L list." exit 1 ;; esac if test "$setuid_hacks" = yes; then true elif test "$setuid_hacks" != no; then echo "error: must be yes or no: --with-setuid-hacks=$setuid_hacks" exit 1 fi ############################################################################### # # Check for --with-record-animation # ############################################################################### record_anim_default=no record_anim="$record_anim_default" # Check whether --with-record-animation was given. if test "${with_record_animation+set}" = set; then : withval=$with_record_animation; record_anim="$withval" else record_anim="$record_anim_default" fi case "$record_anim" in yes) ;; no) ;; /*) { $as_echo "$as_me:${as_lineno-$LINENO}: checking for record animation headers" >&5 $as_echo_n "checking for record animation headers... " >&6; } d=$record_anim/include if test -d $d; then X_CFLAGS="-I$d $X_CFLAGS" { $as_echo "$as_me:${as_lineno-$LINENO}: result: $d" >&5 $as_echo "$d" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: not found ($d: no such directory)" >&5 $as_echo "not found ($d: no such directory)" >&6; } fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for record animation libs" >&5 $as_echo_n "checking for record animation libs... " >&6; } d=$record_anim/lib if test -d $d; then X_LIBS="-L$d $X_LIBS" { $as_echo "$as_me:${as_lineno-$LINENO}: result: $d" >&5 $as_echo "$d" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: not found ($d: no such directory)" >&5 $as_echo "not found ($d: no such directory)" >&6; } fi # replace the directory string with "yes". record_anim_req="yes" record_anim=$record_anim_req ;; *) echo "" echo "error: argument to --with-record-animation must be \"yes\", \"no\", or a directory." echo " If it is a directory, then \`DIR/include' will be added to" echo " the -I list, and \`DIR/lib' will be added to the -L list." exit 1 ;; esac if test "$record_anim" = yes; then true elif test "$record_anim" != no; then echo "error: must be yes or no: --with-record-animation=$record_anim" exit 1 fi if test "$record_anim" = yes; then if test "$have_gdk_pixbuf" != yes; then as_fn_error $? "--with-record-animation requires GDK-Pixbuf" "$LINENO" 5 else { $as_echo "$as_me:${as_lineno-$LINENO}: result: enabling --with-record-animation" >&5 $as_echo "enabling --with-record-animation" >&6; } $as_echo "#define HAVE_RECORD_ANIM 1" >>confdefs.h ANIM_OBJS='$(ANIM_OBJS)' ANIM_LIBS='$(ANIM_LIBS)' fi fi ############################################################################### # # Done testing. Now, set up the various -I and -L variables, # and decide which GUI program to build by default. # ############################################################################### DEPEND=makedepend DEPEND_FLAGS= DEPEND_DEFINES= if test \! -z "$includedir" ; then INCLUDES="$INCLUDES -I$includedir" fi if test \! -z "$libdir" ; then LDFLAGS="$LDFLAGS -L$libdir" fi PREFERRED_DEMO_PROGRAM='' ALL_DEMO_PROGRAMS= if test "$have_motif" = yes; then PREFERRED_DEMO_PROGRAM=xscreensaver-demo-Xm ALL_DEMO_PROGRAMS="$PREFERRED_DEMO_PROGRAM $ALL_DEMO_PROGRAMS" fi if test "$have_gtk" = yes; then PREFERRED_DEMO_PROGRAM=xscreensaver-demo-Gtk ALL_DEMO_PROGRAMS="$PREFERRED_DEMO_PROGRAM $ALL_DEMO_PROGRAMS" fi if test "$have_kerberos" = yes; then PASSWD_SRCS="$PASSWD_SRCS \$(KERBEROS_SRCS)" PASSWD_OBJS="$PASSWD_OBJS \$(KERBEROS_OBJS)" fi if test "$have_pam" = yes; then PASSWD_SRCS="$PASSWD_SRCS \$(PAM_SRCS)" PASSWD_OBJS="$PASSWD_OBJS \$(PAM_OBJS)" INSTALL_PAM="install-pam" fi if test "$enable_pam_check_account_type" = yes; then COMMENT_PAM_CHECK_ACCOUNT="" else COMMENT_PAM_CHECK_ACCOUNT="#" fi if test "$have_passwd_helper" = yes; then PASSWD_SRCS="$PASSWD_SRCS \$(PWHELPER_SRCS)" PASSWD_OBJS="$PASSWD_OBJS \$(PWHELPER_OBJS)" fi PASSWD_SRCS="$PASSWD_SRCS \$(PWENT_SRCS)" PASSWD_OBJS="$PASSWD_OBJS \$(PWENT_OBJS)" if test "$enable_locking" = yes; then LOCK_SRCS='$(LOCK_SRCS_1) $(PASSWD_SRCS)' LOCK_OBJS='$(LOCK_OBJS_1) $(PASSWD_OBJS)' else LOCK_SRCS='$(NOLOCK_SRCS_1)' LOCK_OBJS='$(NOLOCK_OBJS_1)' fi if test "$ac_macosx" = yes; then EXES_OSX='$(EXES_OSX)' SCRIPTS_OSX='$(SCRIPTS_OSX)' MEN_OSX='$(MEN_OSX)' else EXES_OSX= SCRIPTS_OSX= MEN_OSX= fi INSTALL_SETUID='$(INSTALL_PROGRAM) $(SUID_FLAGS)' if test "$need_setuid" = yes; then NEED_SETUID=yes else NEED_SETUID=no fi if test "$setuid_hacks" = yes; then SETUID_HACKS=yes else SETUID_HACKS=no fi tab=' ' if test "$have_gl" = yes; then GL_EXES='$(GL_EXES)' SUID_EXES='$(SUID_EXES)' RETIRED_GL_EXES='$(RETIRED_GL_EXES)' GL_UTIL_EXES='$(GL_UTIL_EXES)' GL_MEN='$(GL_MEN)' GL_KLUDGE=" " else GL_KLUDGE="-" fi if test "$have_gle" = yes; then GLE_EXES='$(GLE_EXES)' GLE_KLUDGE=" " else GLE_KLUDGE="-" fi if test "$have_jpeg" = yes -a "$have_gdk_pixbuf" = yes; then JPEG_EXES='$(JPEG_EXES)' fi # Another substitution in the XScreenSaver.ad.in file: # if test "$gnome_open_program" != ''; then GNOME24='' GNOME22='! ' NOGNOME='! ' elif test "$gnome_url_show_program" != ''; then GNOME24='! ' GNOME22='' NOGNOME='! ' else GNOME24='! ' GNOME22='! ' NOGNOME='' fi # Set PO_DATADIR to something sensible. # { $as_echo "$as_me:${as_lineno-$LINENO}: checking for locale directory" >&5 $as_echo_n "checking for locale directory... " >&6; } if test -n "$GTK_DATADIR" ; then PO_DATADIR="$GTK_DATADIR" elif test "$have_gtk" = yes; then PO_DATADIR=`$pkg_config --variable=prefix gtk+-2.0` PO_DATADIR="$PO_DATADIR/share" fi if test -z "$PO_DATADIR" ; then # # #### Total fucking kludge -- # Map /build/prefix/usr/X11R6/share/ to /build/prefix/usr/share/ # but of course we need to expand all the nested variables to do that... # dd=`eval eval eval eval eval eval eval eval eval eval eval echo $datadir` PO_DATADIR=`echo $dd | sed 's@/X11R6/@/@'` fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PO_DATADIR/locale" >&5 $as_echo "$PO_DATADIR/locale" >&6; } # canonicalize slashes. HACK_CONF_DIR=`echo "${HACK_CONF_DIR}" | sed 's@/$@@;s@//*@/@g'` # gcc 3.0 likes to issue this warning for every file: # # cc1: warning: changing search order for system directory "/usr/local/include" # cc1: warning: as it has already been specified as a non-system directory # # Yay. We can only avoid that by deleting "-I${prefix}/include" from the list. # Which *should* be totally redundant, and thus an ok thing to delete? # INCLUDES=`echo "$INCLUDES" | sed 's@ -I${prefix}/include@@g;'` ############################################################################### # # Perform substitutions and write Makefiles. # ############################################################################### APPDEFAULTS=$ac_x_app_defaults ac_config_files="$ac_config_files Makefile utils/Makefile jwxyz/Makefile hacks/Makefile hacks/glx/Makefile po/Makefile.in driver/Makefile driver/xscreensaver.pam driver/xscreensaver-demo.glade2 driver/XScreenSaver.ad" cat >confcache <<\_ACEOF # This file is a shell script that caches the results of configure # tests run on this system so they can be shared between configure # scripts and configure runs, see configure's option --config-cache. # It is not useful on other systems. If it contains results you don't # want to keep, you may remove or edit it. # # config.status only pays attention to the cache file if you give it # the --recheck option to rerun configure. # # `ac_cv_env_foo' variables (set or unset) will be overridden when # loading this file, other *unset* `ac_cv_foo' will be assigned the # following values. _ACEOF # The following way of writing the cache mishandles newlines in values, # but we know of no workaround that is simple, portable, and efficient. # So, we kill variables containing newlines. # Ultrix sh set writes to stderr and can't be redirected directly, # and sets the high bit in the cache file unless we assign to the vars. ( for ac_var in `(set) 2>&1 | sed -n 's/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'`; do eval ac_val=\$$ac_var case $ac_val in #( *${as_nl}*) case $ac_var in #( *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 $as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; esac case $ac_var in #( _ | IFS | as_nl) ;; #( BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( *) { eval $ac_var=; unset $ac_var;} ;; esac ;; esac done (set) 2>&1 | case $as_nl`(ac_space=' '; set) 2>&1` in #( *${as_nl}ac_space=\ *) # `set' does not quote correctly, so add quotes: double-quote # substitution turns \\\\ into \\, and sed turns \\ into \. sed -n \ "s/'/'\\\\''/g; s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p" ;; #( *) # `set' quotes correctly as required by POSIX, so do not add quotes. sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" ;; esac | sort ) | sed ' /^ac_cv_env_/b end t clear :clear s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/ t end s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/ :end' >>confcache if diff "$cache_file" confcache >/dev/null 2>&1; then :; else if test -w "$cache_file"; then if test "x$cache_file" != "x/dev/null"; then { $as_echo "$as_me:${as_lineno-$LINENO}: updating cache $cache_file" >&5 $as_echo "$as_me: updating cache $cache_file" >&6;} if test ! -f "$cache_file" || test -h "$cache_file"; then cat confcache >"$cache_file" else case $cache_file in #( */* | ?:*) mv -f confcache "$cache_file"$$ && mv -f "$cache_file"$$ "$cache_file" ;; #( *) mv -f confcache "$cache_file" ;; esac fi fi else { $as_echo "$as_me:${as_lineno-$LINENO}: not updating unwritable cache $cache_file" >&5 $as_echo "$as_me: not updating unwritable cache $cache_file" >&6;} fi fi rm -f confcache test "x$prefix" = xNONE && prefix=$ac_default_prefix # Let make expand exec_prefix. test "x$exec_prefix" = xNONE && exec_prefix='${prefix}' DEFS=-DHAVE_CONFIG_H ac_libobjs= ac_ltlibobjs= U= for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue # 1. Remove the extension, and $U if already installed. ac_script='s/\$U\././;s/\.o$//;s/\.obj$//' ac_i=`$as_echo "$ac_i" | sed "$ac_script"` # 2. Prepend LIBOBJDIR. When used with automake>=1.10 LIBOBJDIR # will be set to the directory where LIBOBJS objects are built. as_fn_append ac_libobjs " \${LIBOBJDIR}$ac_i\$U.$ac_objext" as_fn_append ac_ltlibobjs " \${LIBOBJDIR}$ac_i"'$U.lo' done LIBOBJS=$ac_libobjs LTLIBOBJS=$ac_ltlibobjs ac_config_commands="$ac_config_commands po/stamp-it" : "${CONFIG_STATUS=./config.status}" ac_write_fail=0 ac_clean_files_save=$ac_clean_files ac_clean_files="$ac_clean_files $CONFIG_STATUS" { $as_echo "$as_me:${as_lineno-$LINENO}: creating $CONFIG_STATUS" >&5 $as_echo "$as_me: creating $CONFIG_STATUS" >&6;} as_write_fail=0 cat >$CONFIG_STATUS <<_ASEOF || as_write_fail=1 #! $SHELL # Generated by $as_me. # Run this file to recreate the current configuration. # Compiler output produced by configure, useful for debugging # configure, is in config.log if it exists. debug=false ac_cs_recheck=false ac_cs_silent=false SHELL=\${CONFIG_SHELL-$SHELL} export SHELL _ASEOF cat >>$CONFIG_STATUS <<\_ASEOF || as_write_fail=1 ## -------------------- ## ## M4sh Initialization. ## ## -------------------- ## # Be more Bourne compatible DUALCASE=1; export DUALCASE # for MKS sh if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST else case `(set -o) 2>/dev/null` in #( *posix*) : set -o posix ;; #( *) : ;; esac fi as_nl=' ' export as_nl # Printing a long string crashes Solaris 7 /usr/bin/printf. as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo # Prefer a ksh shell builtin over an external printf program on Solaris, # but without wasting forks for bash or zsh. if test -z "$BASH_VERSION$ZSH_VERSION" \ && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then as_echo='print -r --' as_echo_n='print -rn --' elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then as_echo='printf %s\n' as_echo_n='printf %s' else if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' as_echo_n='/usr/ucb/echo -n' else as_echo_body='eval expr "X$1" : "X\\(.*\\)"' as_echo_n_body='eval arg=$1; case $arg in #( *"$as_nl"*) expr "X$arg" : "X\\(.*\\)$as_nl"; arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; esac; expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" ' export as_echo_n_body as_echo_n='sh -c $as_echo_n_body as_echo' fi export as_echo_body as_echo='sh -c $as_echo_body as_echo' fi # The user is always right. if test "${PATH_SEPARATOR+set}" != set; then PATH_SEPARATOR=: (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || PATH_SEPARATOR=';' } fi # IFS # We need space, tab and new line, in precisely that order. Quoting is # there to prevent editors from complaining about space-tab. # (If _AS_PATH_WALK were called with IFS unset, it would disable word # splitting by setting IFS to empty value.) IFS=" "" $as_nl" # Find who we are. Look in the path if we contain no directory separator. as_myself= case $0 in #(( *[\\/]* ) as_myself=$0 ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break done IFS=$as_save_IFS ;; esac # We did not find ourselves, most probably we were run as `sh COMMAND' # in which case we are not to be found in the path. if test "x$as_myself" = x; then as_myself=$0 fi if test ! -f "$as_myself"; then $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 exit 1 fi # Unset variables that we do not need and which cause bugs (e.g. in # pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" # suppresses any "Segmentation fault" message there. '((' could # trigger a bug in pdksh 5.2.14. for as_var in BASH_ENV ENV MAIL MAILPATH do eval test x\${$as_var+set} = xset \ && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : done PS1='$ ' PS2='> ' PS4='+ ' # NLS nuisances. LC_ALL=C export LC_ALL LANGUAGE=C export LANGUAGE # CDPATH. (unset CDPATH) >/dev/null 2>&1 && unset CDPATH # as_fn_error STATUS ERROR [LINENO LOG_FD] # ---------------------------------------- # Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are # provided, also output the error to LOG_FD, referencing LINENO. Then exit the # script with STATUS, using 1 if that was 0. as_fn_error () { as_status=$1; test $as_status -eq 0 && as_status=1 if test "$4"; then as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 fi $as_echo "$as_me: error: $2" >&2 as_fn_exit $as_status } # as_fn_error # as_fn_set_status STATUS # ----------------------- # Set $? to STATUS, without forking. as_fn_set_status () { return $1 } # as_fn_set_status # as_fn_exit STATUS # ----------------- # Exit the shell with STATUS, even in a "trap 0" or "set -e" context. as_fn_exit () { set +e as_fn_set_status $1 exit $1 } # as_fn_exit # as_fn_unset VAR # --------------- # Portably unset VAR. as_fn_unset () { { eval $1=; unset $1;} } as_unset=as_fn_unset # as_fn_append VAR VALUE # ---------------------- # Append the text in VALUE to the end of the definition contained in VAR. Take # advantage of any shell optimizations that allow amortized linear growth over # repeated appends, instead of the typical quadratic growth present in naive # implementations. if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then : eval 'as_fn_append () { eval $1+=\$2 }' else as_fn_append () { eval $1=\$$1\$2 } fi # as_fn_append # as_fn_arith ARG... # ------------------ # Perform arithmetic evaluation on the ARGs, and store the result in the # global $as_val. Take advantage of shells that can avoid forks. The arguments # must be portable across $(()) and expr. if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then : eval 'as_fn_arith () { as_val=$(( $* )) }' else as_fn_arith () { as_val=`expr "$@" || test $? -eq 1` } fi # as_fn_arith if expr a : '\(a\)' >/dev/null 2>&1 && test "X`expr 00001 : '.*\(...\)'`" = X001; then as_expr=expr else as_expr=false fi if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then as_basename=basename else as_basename=false fi if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then as_dirname=dirname else as_dirname=false fi as_me=`$as_basename -- "$0" || $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ X"$0" : 'X\(//\)$' \| \ X"$0" : 'X\(/\)' \| . 2>/dev/null || $as_echo X/"$0" | sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/ q } /^X\/\(\/\/\)$/{ s//\1/ q } /^X\/\(\/\).*/{ s//\1/ q } s/.*/./; q'` # Avoid depending upon Character Ranges. as_cr_letters='abcdefghijklmnopqrstuvwxyz' as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' as_cr_Letters=$as_cr_letters$as_cr_LETTERS as_cr_digits='0123456789' as_cr_alnum=$as_cr_Letters$as_cr_digits ECHO_C= ECHO_N= ECHO_T= case `echo -n x` in #((((( -n*) case `echo 'xy\c'` in *c*) ECHO_T=' ';; # ECHO_T is single tab character. xy) ECHO_C='\c';; *) echo `echo ksh88 bug on AIX 6.1` > /dev/null ECHO_T=' ';; esac;; *) ECHO_N='-n';; esac rm -f conf$$ conf$$.exe conf$$.file if test -d conf$$.dir; then rm -f conf$$.dir/conf$$.file else rm -f conf$$.dir mkdir conf$$.dir 2>/dev/null fi if (echo >conf$$.file) 2>/dev/null; then if ln -s conf$$.file conf$$ 2>/dev/null; then as_ln_s='ln -s' # ... but there are two gotchas: # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. # In both cases, we have to default to `cp -pR'. ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || as_ln_s='cp -pR' elif ln conf$$.file conf$$ 2>/dev/null; then as_ln_s=ln else as_ln_s='cp -pR' fi else as_ln_s='cp -pR' fi rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file rmdir conf$$.dir 2>/dev/null # as_fn_mkdir_p # ------------- # Create "$as_dir" as a directory, including parents if necessary. as_fn_mkdir_p () { case $as_dir in #( -*) as_dir=./$as_dir;; esac test -d "$as_dir" || eval $as_mkdir_p || { as_dirs= while :; do case $as_dir in #( *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( *) as_qdir=$as_dir;; esac as_dirs="'$as_qdir' $as_dirs" as_dir=`$as_dirname -- "$as_dir" || $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_dir" : 'X\(//\)[^/]' \| \ X"$as_dir" : 'X\(//\)$' \| \ X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$as_dir" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` test -d "$as_dir" && break done test -z "$as_dirs" || eval "mkdir $as_dirs" } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir" } # as_fn_mkdir_p if mkdir -p . 2>/dev/null; then as_mkdir_p='mkdir -p "$as_dir"' else test -d ./-p && rmdir ./-p as_mkdir_p=false fi # as_fn_executable_p FILE # ----------------------- # Test if FILE is an executable regular file. as_fn_executable_p () { test -f "$1" && test -x "$1" } # as_fn_executable_p as_test_x='test -x' as_executable_p=as_fn_executable_p # Sed expression to map a string onto a valid CPP name. as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" # Sed expression to map a string onto a valid variable name. as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" exec 6>&1 ## ----------------------------------- ## ## Main body of $CONFIG_STATUS script. ## ## ----------------------------------- ## _ASEOF test $as_write_fail = 0 && chmod +x $CONFIG_STATUS || ac_write_fail=1 cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # Save the log message, to keep $0 and so on meaningful, and to # report actual input values of CONFIG_FILES etc. instead of their # values after options handling. ac_log=" This file was extended by $as_me, which was generated by GNU Autoconf 2.69. Invocation command line was CONFIG_FILES = $CONFIG_FILES CONFIG_HEADERS = $CONFIG_HEADERS CONFIG_LINKS = $CONFIG_LINKS CONFIG_COMMANDS = $CONFIG_COMMANDS $ $0 $@ on `(hostname || uname -n) 2>/dev/null | sed 1q` " _ACEOF case $ac_config_files in *" "*) set x $ac_config_files; shift; ac_config_files=$*;; esac case $ac_config_headers in *" "*) set x $ac_config_headers; shift; ac_config_headers=$*;; esac cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 # Files that config.status was made for. config_files="$ac_config_files" config_headers="$ac_config_headers" config_commands="$ac_config_commands" _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 ac_cs_usage="\ \`$as_me' instantiates files and other configuration actions from templates according to the current configuration. Unless the files and actions are specified as TAGs, all are instantiated by default. Usage: $0 [OPTION]... [TAG]... -h, --help print this help, then exit -V, --version print version number and configuration settings, then exit --config print configuration, then exit -q, --quiet, --silent do not print progress messages -d, --debug don't remove temporary files --recheck update $as_me by reconfiguring in the same conditions --file=FILE[:TEMPLATE] instantiate the configuration file FILE --header=FILE[:TEMPLATE] instantiate the configuration header FILE Configuration files: $config_files Configuration headers: $config_headers Configuration commands: $config_commands Report bugs to the package provider." _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`" ac_cs_version="\\ config.status configured by $0, generated by GNU Autoconf 2.69, with options \\"\$ac_cs_config\\" Copyright (C) 2012 Free Software Foundation, Inc. This config.status script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it." ac_pwd='$ac_pwd' srcdir='$srcdir' INSTALL='$INSTALL' test -n "\$AWK" || AWK=awk _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # The default lists apply if the user does not specify any file. ac_need_defaults=: while test $# != 0 do case $1 in --*=?*) ac_option=`expr "X$1" : 'X\([^=]*\)='` ac_optarg=`expr "X$1" : 'X[^=]*=\(.*\)'` ac_shift=: ;; --*=) ac_option=`expr "X$1" : 'X\([^=]*\)='` ac_optarg= ac_shift=: ;; *) ac_option=$1 ac_optarg=$2 ac_shift=shift ;; esac case $ac_option in # Handling of the options. -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r) ac_cs_recheck=: ;; --version | --versio | --versi | --vers | --ver | --ve | --v | -V ) $as_echo "$ac_cs_version"; exit ;; --config | --confi | --conf | --con | --co | --c ) $as_echo "$ac_cs_config"; exit ;; --debug | --debu | --deb | --de | --d | -d ) debug=: ;; --file | --fil | --fi | --f ) $ac_shift case $ac_optarg in *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; '') as_fn_error $? "missing file argument" ;; esac as_fn_append CONFIG_FILES " '$ac_optarg'" ac_need_defaults=false;; --header | --heade | --head | --hea ) $ac_shift case $ac_optarg in *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; esac as_fn_append CONFIG_HEADERS " '$ac_optarg'" ac_need_defaults=false;; --he | --h) # Conflict between --help and --header as_fn_error $? "ambiguous option: \`$1' Try \`$0 --help' for more information.";; --help | --hel | -h ) $as_echo "$ac_cs_usage"; exit ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil | --si | --s) ac_cs_silent=: ;; # This is an error. -*) as_fn_error $? "unrecognized option: \`$1' Try \`$0 --help' for more information." ;; *) as_fn_append ac_config_targets " $1" ac_need_defaults=false ;; esac shift done ac_configure_extra_args= if $ac_cs_silent; then exec 6>/dev/null ac_configure_extra_args="$ac_configure_extra_args --silent" fi _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 if \$ac_cs_recheck; then set X $SHELL '$0' $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion shift \$as_echo "running CONFIG_SHELL=$SHELL \$*" >&6 CONFIG_SHELL='$SHELL' export CONFIG_SHELL exec "\$@" fi _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 exec 5>>config.log { echo sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX ## Running $as_me. ## _ASBOX $as_echo "$ac_log" } >&5 _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 # # INIT-COMMANDS # _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # Handling of arguments. for ac_config_target in $ac_config_targets do case $ac_config_target in "config.h") CONFIG_HEADERS="$CONFIG_HEADERS config.h" ;; "default-1") CONFIG_COMMANDS="$CONFIG_COMMANDS default-1" ;; "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;; "utils/Makefile") CONFIG_FILES="$CONFIG_FILES utils/Makefile" ;; "jwxyz/Makefile") CONFIG_FILES="$CONFIG_FILES jwxyz/Makefile" ;; "hacks/Makefile") CONFIG_FILES="$CONFIG_FILES hacks/Makefile" ;; "hacks/glx/Makefile") CONFIG_FILES="$CONFIG_FILES hacks/glx/Makefile" ;; "po/Makefile.in") CONFIG_FILES="$CONFIG_FILES po/Makefile.in" ;; "driver/Makefile") CONFIG_FILES="$CONFIG_FILES driver/Makefile" ;; "driver/xscreensaver.pam") CONFIG_FILES="$CONFIG_FILES driver/xscreensaver.pam" ;; "driver/xscreensaver-demo.glade2") CONFIG_FILES="$CONFIG_FILES driver/xscreensaver-demo.glade2" ;; "driver/XScreenSaver.ad") CONFIG_FILES="$CONFIG_FILES driver/XScreenSaver.ad" ;; "po/stamp-it") CONFIG_COMMANDS="$CONFIG_COMMANDS po/stamp-it" ;; *) as_fn_error $? "invalid argument: \`$ac_config_target'" "$LINENO" 5;; esac done # If the user did not use the arguments to specify the items to instantiate, # then the envvar interface is used. Set only those that are not. # We use the long form for the default assignment because of an extremely # bizarre bug on SunOS 4.1.3. if $ac_need_defaults; then test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files test "${CONFIG_HEADERS+set}" = set || CONFIG_HEADERS=$config_headers test "${CONFIG_COMMANDS+set}" = set || CONFIG_COMMANDS=$config_commands fi # Have a temporary directory for convenience. Make it in the build tree # simply because there is no reason against having it here, and in addition, # creating and moving files from /tmp can sometimes cause problems. # Hook for its removal unless debugging. # Note that there is a small window in which the directory will not be cleaned: # after its creation but before its name has been assigned to `$tmp'. $debug || { tmp= ac_tmp= trap 'exit_status=$? : "${ac_tmp:=$tmp}" { test ! -d "$ac_tmp" || rm -fr "$ac_tmp"; } && exit $exit_status ' 0 trap 'as_fn_exit 1' 1 2 13 15 } # Create a (secure) tmp directory for tmp files. { tmp=`(umask 077 && mktemp -d "./confXXXXXX") 2>/dev/null` && test -d "$tmp" } || { tmp=./conf$$-$RANDOM (umask 077 && mkdir "$tmp") } || as_fn_error $? "cannot create a temporary directory in ." "$LINENO" 5 ac_tmp=$tmp # Set up the scripts for CONFIG_FILES section. # No need to generate them if there are no CONFIG_FILES. # This happens for instance with `./config.status config.h'. if test -n "$CONFIG_FILES"; then ac_cr=`echo X | tr X '\015'` # On cygwin, bash can eat \r inside `` if the user requested igncr. # But we know of no other shell where ac_cr would be empty at this # point, so we can use a bashism as a fallback. if test "x$ac_cr" = x; then eval ac_cr=\$\'\\r\' fi ac_cs_awk_cr=`$AWK 'BEGIN { print "a\rb" }' /dev/null` if test "$ac_cs_awk_cr" = "a${ac_cr}b"; then ac_cs_awk_cr='\\r' else ac_cs_awk_cr=$ac_cr fi echo 'BEGIN {' >"$ac_tmp/subs1.awk" && _ACEOF { echo "cat >conf$$subs.awk <<_ACEOF" && echo "$ac_subst_vars" | sed 's/.*/&!$&$ac_delim/' && echo "_ACEOF" } >conf$$subs.sh || as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 ac_delim_num=`echo "$ac_subst_vars" | grep -c '^'` ac_delim='%!_!# ' for ac_last_try in false false false false false :; do . ./conf$$subs.sh || as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 ac_delim_n=`sed -n "s/.*$ac_delim\$/X/p" conf$$subs.awk | grep -c X` if test $ac_delim_n = $ac_delim_num; then break elif $ac_last_try; then as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 else ac_delim="$ac_delim!$ac_delim _$ac_delim!! " fi done rm -f conf$$subs.sh cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 cat >>"\$ac_tmp/subs1.awk" <<\\_ACAWK && _ACEOF sed -n ' h s/^/S["/; s/!.*/"]=/ p g s/^[^!]*!// :repl t repl s/'"$ac_delim"'$// t delim :nl h s/\(.\{148\}\)..*/\1/ t more1 s/["\\]/\\&/g; s/^/"/; s/$/\\n"\\/ p n b repl :more1 s/["\\]/\\&/g; s/^/"/; s/$/"\\/ p g s/.\{148\}// t nl :delim h s/\(.\{148\}\)..*/\1/ t more2 s/["\\]/\\&/g; s/^/"/; s/$/"/ p b :more2 s/["\\]/\\&/g; s/^/"/; s/$/"\\/ p g s/.\{148\}// t delim ' >$CONFIG_STATUS || ac_write_fail=1 rm -f conf$$subs.awk cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 _ACAWK cat >>"\$ac_tmp/subs1.awk" <<_ACAWK && for (key in S) S_is_set[key] = 1 FS = "" } { line = $ 0 nfields = split(line, field, "@") substed = 0 len = length(field[1]) for (i = 2; i < nfields; i++) { key = field[i] keylen = length(key) if (S_is_set[key]) { value = S[key] line = substr(line, 1, len) "" value "" substr(line, len + keylen + 3) len += length(value) + length(field[++i]) substed = 1 } else len += 1 + keylen } print line } _ACAWK _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 if sed "s/$ac_cr//" < /dev/null > /dev/null 2>&1; then sed "s/$ac_cr\$//; s/$ac_cr/$ac_cs_awk_cr/g" else cat fi < "$ac_tmp/subs1.awk" > "$ac_tmp/subs.awk" \ || as_fn_error $? "could not setup config files machinery" "$LINENO" 5 _ACEOF # VPATH may cause trouble with some makes, so we remove sole $(srcdir), # ${srcdir} and @srcdir@ entries from VPATH if srcdir is ".", strip leading and # trailing colons and then remove the whole line if VPATH becomes empty # (actually we leave an empty line to preserve line numbers). if test "x$srcdir" = x.; then ac_vpsub='/^[ ]*VPATH[ ]*=[ ]*/{ h s/// s/^/:/ s/[ ]*$/:/ s/:\$(srcdir):/:/g s/:\${srcdir}:/:/g s/:@srcdir@:/:/g s/^:*// s/:*$// x s/\(=[ ]*\).*/\1/ G s/\n// s/^[^=]*=[ ]*$// }' fi cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 fi # test -n "$CONFIG_FILES" # Set up the scripts for CONFIG_HEADERS section. # No need to generate them if there are no CONFIG_HEADERS. # This happens for instance with `./config.status Makefile'. if test -n "$CONFIG_HEADERS"; then cat >"$ac_tmp/defines.awk" <<\_ACAWK || BEGIN { _ACEOF # Transform confdefs.h into an awk script `defines.awk', embedded as # here-document in config.status, that substitutes the proper values into # config.h.in to produce config.h. # Create a delimiter string that does not exist in confdefs.h, to ease # handling of long lines. ac_delim='%!_!# ' for ac_last_try in false false :; do ac_tt=`sed -n "/$ac_delim/p" confdefs.h` if test -z "$ac_tt"; then break elif $ac_last_try; then as_fn_error $? "could not make $CONFIG_HEADERS" "$LINENO" 5 else ac_delim="$ac_delim!$ac_delim _$ac_delim!! " fi done # For the awk script, D is an array of macro values keyed by name, # likewise P contains macro parameters if any. Preserve backslash # newline sequences. ac_word_re=[_$as_cr_Letters][_$as_cr_alnum]* sed -n ' s/.\{148\}/&'"$ac_delim"'/g t rset :rset s/^[ ]*#[ ]*define[ ][ ]*/ / t def d :def s/\\$// t bsnl s/["\\]/\\&/g s/^ \('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/P["\1"]="\2"\ D["\1"]=" \3"/p s/^ \('"$ac_word_re"'\)[ ]*\(.*\)/D["\1"]=" \2"/p d :bsnl s/["\\]/\\&/g s/^ \('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/P["\1"]="\2"\ D["\1"]=" \3\\\\\\n"\\/p t cont s/^ \('"$ac_word_re"'\)[ ]*\(.*\)/D["\1"]=" \2\\\\\\n"\\/p t cont d :cont n s/.\{148\}/&'"$ac_delim"'/g t clear :clear s/\\$// t bsnlc s/["\\]/\\&/g; s/^/"/; s/$/"/p d :bsnlc s/["\\]/\\&/g; s/^/"/; s/$/\\\\\\n"\\/p b cont ' >$CONFIG_STATUS || ac_write_fail=1 cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 for (key in D) D_is_set[key] = 1 FS = "" } /^[\t ]*#[\t ]*(define|undef)[\t ]+$ac_word_re([\t (]|\$)/ { line = \$ 0 split(line, arg, " ") if (arg[1] == "#") { defundef = arg[2] mac1 = arg[3] } else { defundef = substr(arg[1], 2) mac1 = arg[2] } split(mac1, mac2, "(") #) macro = mac2[1] prefix = substr(line, 1, index(line, defundef) - 1) if (D_is_set[macro]) { # Preserve the white space surrounding the "#". print prefix "define", macro P[macro] D[macro] next } else { # Replace #undef with comments. This is necessary, for example, # in the case of _POSIX_SOURCE, which is predefined and required # on some systems where configure will not decide to define it. if (defundef == "undef") { print "/*", prefix defundef, macro, "*/" next } } } { print } _ACAWK _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 as_fn_error $? "could not setup config headers machinery" "$LINENO" 5 fi # test -n "$CONFIG_HEADERS" eval set X " :F $CONFIG_FILES :H $CONFIG_HEADERS :C $CONFIG_COMMANDS" shift for ac_tag do case $ac_tag in :[FHLC]) ac_mode=$ac_tag; continue;; esac case $ac_mode$ac_tag in :[FHL]*:*);; :L* | :C*:*) as_fn_error $? "invalid tag \`$ac_tag'" "$LINENO" 5;; :[FH]-) ac_tag=-:-;; :[FH]*) ac_tag=$ac_tag:$ac_tag.in;; esac ac_save_IFS=$IFS IFS=: set x $ac_tag IFS=$ac_save_IFS shift ac_file=$1 shift case $ac_mode in :L) ac_source=$1;; :[FH]) ac_file_inputs= for ac_f do case $ac_f in -) ac_f="$ac_tmp/stdin";; *) # Look for the file first in the build tree, then in the source tree # (if the path is not absolute). The absolute path cannot be DOS-style, # because $ac_f cannot contain `:'. test -f "$ac_f" || case $ac_f in [\\/$]*) false;; *) test -f "$srcdir/$ac_f" && ac_f="$srcdir/$ac_f";; esac || as_fn_error 1 "cannot find input file: \`$ac_f'" "$LINENO" 5;; esac case $ac_f in *\'*) ac_f=`$as_echo "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;; esac as_fn_append ac_file_inputs " '$ac_f'" done # Let's still pretend it is `configure' which instantiates (i.e., don't # use $as_me), people would be surprised to read: # /* config.h. Generated by config.status. */ configure_input='Generated from '` $as_echo "$*" | sed 's|^[^:]*/||;s|:[^:]*/|, |g' `' by configure.' if test x"$ac_file" != x-; then configure_input="$ac_file. $configure_input" { $as_echo "$as_me:${as_lineno-$LINENO}: creating $ac_file" >&5 $as_echo "$as_me: creating $ac_file" >&6;} fi # Neutralize special characters interpreted by sed in replacement strings. case $configure_input in #( *\&* | *\|* | *\\* ) ac_sed_conf_input=`$as_echo "$configure_input" | sed 's/[\\\\&|]/\\\\&/g'`;; #( *) ac_sed_conf_input=$configure_input;; esac case $ac_tag in *:-:* | *:-) cat >"$ac_tmp/stdin" \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 ;; esac ;; esac ac_dir=`$as_dirname -- "$ac_file" || $as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$ac_file" : 'X\(//\)[^/]' \| \ X"$ac_file" : 'X\(//\)$' \| \ X"$ac_file" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$ac_file" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` as_dir="$ac_dir"; as_fn_mkdir_p ac_builddir=. case "$ac_dir" in .) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` # A ".." for each directory in $ac_dir_suffix. ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` case $ac_top_builddir_sub in "") ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; esac ;; esac ac_abs_top_builddir=$ac_pwd ac_abs_builddir=$ac_pwd$ac_dir_suffix # for backward compatibility: ac_top_builddir=$ac_top_build_prefix case $srcdir in .) # We are building in place. ac_srcdir=. ac_top_srcdir=$ac_top_builddir_sub ac_abs_top_srcdir=$ac_pwd ;; [\\/]* | ?:[\\/]* ) # Absolute name. ac_srcdir=$srcdir$ac_dir_suffix; ac_top_srcdir=$srcdir ac_abs_top_srcdir=$srcdir ;; *) # Relative name. ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix ac_top_srcdir=$ac_top_build_prefix$srcdir ac_abs_top_srcdir=$ac_pwd/$srcdir ;; esac ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix case $ac_mode in :F) # # CONFIG_FILE # case $INSTALL in [\\/$]* | ?:[\\/]* ) ac_INSTALL=$INSTALL ;; *) ac_INSTALL=$ac_top_build_prefix$INSTALL ;; esac _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # If the template does not know about datarootdir, expand it. # FIXME: This hack should be removed a few years after 2.60. ac_datarootdir_hack=; ac_datarootdir_seen= ac_sed_dataroot=' /datarootdir/ { p q } /@datadir@/p /@docdir@/p /@infodir@/p /@localedir@/p /@mandir@/p' case `eval "sed -n \"\$ac_sed_dataroot\" $ac_file_inputs"` in *datarootdir*) ac_datarootdir_seen=yes;; *@datadir@*|*@docdir@*|*@infodir@*|*@localedir@*|*@mandir@*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5 $as_echo "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;} _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_datarootdir_hack=' s&@datadir@&$datadir&g s&@docdir@&$docdir&g s&@infodir@&$infodir&g s&@localedir@&$localedir&g s&@mandir@&$mandir&g s&\\\${datarootdir}&$datarootdir&g' ;; esac _ACEOF # Neutralize VPATH when `$srcdir' = `.'. # Shell code in configure.ac might set extrasub. # FIXME: do we really want to maintain this feature? cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_sed_extra="$ac_vpsub $extrasub _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 :t /@[a-zA-Z_][a-zA-Z_0-9]*@/!b s|@configure_input@|$ac_sed_conf_input|;t t s&@top_builddir@&$ac_top_builddir_sub&;t t s&@top_build_prefix@&$ac_top_build_prefix&;t t s&@srcdir@&$ac_srcdir&;t t s&@abs_srcdir@&$ac_abs_srcdir&;t t s&@top_srcdir@&$ac_top_srcdir&;t t s&@abs_top_srcdir@&$ac_abs_top_srcdir&;t t s&@builddir@&$ac_builddir&;t t s&@abs_builddir@&$ac_abs_builddir&;t t s&@abs_top_builddir@&$ac_abs_top_builddir&;t t s&@INSTALL@&$ac_INSTALL&;t t $ac_datarootdir_hack " eval sed \"\$ac_sed_extra\" "$ac_file_inputs" | $AWK -f "$ac_tmp/subs.awk" \ >$ac_tmp/out || as_fn_error $? "could not create $ac_file" "$LINENO" 5 test -z "$ac_datarootdir_hack$ac_datarootdir_seen" && { ac_out=`sed -n '/\${datarootdir}/p' "$ac_tmp/out"`; test -n "$ac_out"; } && { ac_out=`sed -n '/^[ ]*datarootdir[ ]*:*=/p' \ "$ac_tmp/out"`; test -z "$ac_out"; } && { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file contains a reference to the variable \`datarootdir' which seems to be undefined. Please make sure it is defined" >&5 $as_echo "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir' which seems to be undefined. Please make sure it is defined" >&2;} rm -f "$ac_tmp/stdin" case $ac_file in -) cat "$ac_tmp/out" && rm -f "$ac_tmp/out";; *) rm -f "$ac_file" && mv "$ac_tmp/out" "$ac_file";; esac \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 ;; :H) # # CONFIG_HEADER # if test x"$ac_file" != x-; then { $as_echo "/* $configure_input */" \ && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs" } >"$ac_tmp/config.h" \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 if diff "$ac_file" "$ac_tmp/config.h" >/dev/null 2>&1; then { $as_echo "$as_me:${as_lineno-$LINENO}: $ac_file is unchanged" >&5 $as_echo "$as_me: $ac_file is unchanged" >&6;} else rm -f "$ac_file" mv "$ac_tmp/config.h" "$ac_file" \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 fi else $as_echo "/* $configure_input */" \ && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs" \ || as_fn_error $? "could not create -" "$LINENO" 5 fi ;; :C) { $as_echo "$as_me:${as_lineno-$LINENO}: executing $ac_file commands" >&5 $as_echo "$as_me: executing $ac_file commands" >&6;} ;; esac case $ac_file$ac_mode in "default-1":C) case "$CONFIG_FILES" in *po/Makefile.in*) sed -e "/POTFILES =/r po/POTFILES" po/Makefile.in > po/Makefile esac ;; "po/stamp-it":C) if ! grep "^# INTLTOOL_MAKEFILE$" "po/Makefile.in" > /dev/null ; then as_fn_error $? "po/Makefile.in.in was not created by intltoolize." "$LINENO" 5 fi rm -f "po/stamp-it" "po/stamp-it.tmp" "po/POTFILES" "po/Makefile.tmp" >"po/stamp-it.tmp" sed '/^#/d s/^[[].*] *// /^[ ]*$/d '"s|^| $ac_top_srcdir/|" \ "$srcdir/po/POTFILES.in" | sed '$!s/$/ \\/' >"po/POTFILES" sed '/^POTFILES =/,/[^\\]$/ { /^POTFILES =/!d r po/POTFILES } ' "po/Makefile.in" >"po/Makefile" rm -f "po/Makefile.tmp" mv "po/stamp-it.tmp" "po/stamp-it" ;; esac done # for ac_tag as_fn_exit 0 _ACEOF ac_clean_files=$ac_clean_files_save test $ac_write_fail = 0 || as_fn_error $? "write failure creating $CONFIG_STATUS" "$LINENO" 5 # configure is writing to config.log, and then calls config.status. # config.status does its own redirection, appending to config.log. # Unfortunately, on DOS this fails, as config.log is still kept open # by configure, so config.status won't be able to write to it; its # output is simply discarded. So we exec the FD to /dev/null, # effectively closing config.log, so it can be properly (re)opened and # appended to by config.status. When coming back to configure, we # need to make the FD available again. if test "$no_create" != yes; then ac_cs_success=: ac_config_status_args= test "$silent" = yes && ac_config_status_args="$ac_config_status_args --quiet" exec 5>/dev/null $SHELL $CONFIG_STATUS $ac_config_status_args || ac_cs_success=false exec 5>>config.log # Use ||, not &&, to avoid exiting from the if with $? = 1, which # would make configure fail if this is the last instruction. $ac_cs_success || as_fn_exit 1 fi if test -n "$ac_unrecognized_opts" && test "$enable_option_checking" != no; then { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: unrecognized options: $ac_unrecognized_opts" >&5 $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2;} fi ############################################################################### # # Print some warnings at the end. # ############################################################################### warn_prefix_1=" Warning:" warn_prefix_2=" Note:" warn_prefix="$warn_prefix_1" warning=no warnsep=' #################################################################' warnpre() { if test "$warning" = no ; then echo '' ; echo "$warnsep" ; echo '' warning=yes fi } warn() { warnpre if test "$warning" = long ; then echo '' ; fi warning=yes rest="$@" echo "$warn_prefix $rest" } warnL() { was=$warning warnpre warning=yes if test "$was" != no ; then echo '' ; fi rest="$@" echo "$warn_prefix $rest" } warn2() { rest="$@" echo " $rest" warning=long } note() { warn_prefix="$warn_prefix_2" warn $@ warn_prefix="$warn_prefix_1" } noteL() { warn_prefix="$warn_prefix_2" warnL $@ warn_prefix="$warn_prefix_1" } # ac_prog_cc_no_pthread normally only happens on AIX, because according # to AX_PTHREAD, AIX needs CC=xlc_r or CC=cc_r to do threads. # If CC is specified, it takes precedence over --with-pthread. if test "$ac_prog_cc_no_pthread" ; then warnL "You requested $ac_original_cc for the C compiler, but it doesn't" warn2 "support POSIX threads." echo "" warn2 "If you have multiple CPU cores, try CC=$PTHREAD_CC." elif test "$with_pthread_req" = yes -a "$have_pthread" = no ; then warn 'POSIX threads were requested, but were not found.' fi if test "$with_sgi_req" = yes -a "$have_sgi" = no ; then warn 'The SGI saver extension was requested, but was not found.' fi if test "$with_xidle_req" = yes -a "$have_xidle" = no ; then warn 'The XIdle extension was requested, but was not found.' fi if test "$with_xshm_req" = yes -a "$have_xshm" = no ; then warn 'The XSHM extension was requested, but was not found.' fi if test "$with_xdbe_req" = yes -a "$have_xdbe" = no ; then warn 'The DOUBLE-BUFFER extension was requested, but was not found.' fi if test "$with_sgivc_req" = yes -a "$have_sgivc" = no ; then warn 'The SGI-VIDEO-CONTROL extension was requested, but was not found.' fi if test "$with_dpms_req" = yes -a "$have_dpms" = no ; then warn 'The DPMS extension was requested, but was not found.' fi if test "$with_xinerama_req" = yes -a "$have_xinerama" = no ; then warn 'The Xinerama extension was requested, but was not found.' fi if test "$with_xf86vmode_req" = yes -a "$have_xf86vmode" = no ; then warn 'The XF86VMODE extension was requested, but was not found.' fi if test "$with_randr_req" = yes -a "$have_randr" = no ; then warn 'The RANDR extension was requested, but was not found.' fi if test "$with_proc_interrupts_req" = yes -a "$have_proc_interrupts" = no; then warn "Checking of /proc/interrupts was requested, but it's bogus." fi if test "$pkg_config" = false ; then warnL 'The "pkg-config" program was not found. Without that,' warn2 "detection of the various GTK libraries won't work." else pkgerr=`$pkg_config --list-all 2>&1 >/dev/null` if test "x$pkgerr" != "x" ; then warnL 'The "pkg-config" program produces errors. This often causes' warn2 "detection of the various GTK libraries to malfunction." warn2 "The errors are:" echo '' echo "$pkgerr" | sed 's/^/ > /g' fi fi if test "$gtk_halfassed" != no ; then warnL "GTK version $gtk_halfassed was found, but at least one supporting" warn2 "library ($gtk_halfassed_lib) was not, so GTK can't be used." warn2 "Perhaps some of the development packages are not installed?" if test "$have_gtk" = yes ; then v="$ac_gtk_version_string" warn2 "GTK $v is also installed, so it will be used instead." warn2 "Please read the above output and the \`config.log' file" warn2 "for more details." fi fi motif_warn2() { warn2 'Though the Motif front-end to xscreensaver is still' warn2 'maintained, it is no longer being updated with new' warn2 'features: all new development on the xscreensaver-demo' warn2 'program is happening in the GTK version, and not in the' warn2 'Motif version. It is recommended that you build against' warn2 'GTK instead of Motif. See .' } if test "$have_motif" = no -a "$have_gtk" = no; then if test "$with_motif" = yes; then warnL "Neither the GTK nor Motif libraries were found; the" warn2 "\`xscreensaver-demo' program requires one of these." echo '' motif_warn2 else warnL "The GTK libraries do not seem to be available; the" warn2 "\`xscreensaver-demo' program requires them." # echo '' # warn2 'You can use Motif or Lesstif instead of GTK (use the' # warn2 "\`--with-motif' option) but that is NOT recommended." # motif_warn2 fi elif test "$with_motif_req" = yes -a "$have_motif" = no ; then warnL "Use of Motif was requested, but it wasn't found;" warn2 "Gtk will be used instead." elif test "$jurassic_gtk" = yes ; then pref_gtk=2.0 v="$ac_gtk_version_string" if test "$with_gtk_req" = yes -a "$ac_gtk_version" = "unknown" ; then warnL "Use of Gtk was requested, but its version number is unknown;" elif test "$with_gtk_req" = yes ; then warnL "Use of Gtk was requested, but it is version $v;" else warnL "Gtk was found on this system, but it is version $v;" fi warn2 "Gtk $pref_gtk or newer is required." elif test "$with_gtk_req" = yes -a "$have_gtk" = no ; then warnL "Use of Gtk was requested, but it wasn't found." fi if test "$have_gtk" = yes -a "$have_gdk_pixbuf" = no ; then warn "GTK is being used, but the GDK-Pixbuf library and/or" warn2 "headers were not found. That can't be good. Please" warn2 "install the GDK-Pixbuf development kit and re-configure." fi if test "$have_motif" = yes -a "$have_lesstif" = yes ; then preferred_lesstif=0.92 if test "$lesstif_version" = unknown; then warnL "Unable to determine the LessTif version number!" warn2 "Make sure you are using version $preferred_lesstif or newer." warn2 "See ." elif test \! $lesstif_version -gt 82; then warnL "LessTif version $lesstif_version_string is being used." warn2 "LessTif versions 0.82 and earlier are too buggy to" warn2 "use with XScreenSaver; it is strongly recommended" warn2 "that you upgrade to at least version $preferred_lesstif!" warn2 "See ." fi fi if test "$have_motif" = yes -a "$have_gtk" = no ; then warn 'Motif is being used, and GTK is not.' echo '' motif_warn2 fi if test "$with_xpm_req" = yes -a "$have_xpm" = no; then warnL 'Use of XPM was requested, but it was not found.' fi if test "$with_gdk_pixbuf_req" = yes -a "$have_gdk_pixbuf" = no; then warnL 'Use of GDK-Pixbuf was requested, but it was not found.' fi if test "$have_gdk_pixbuf" = no -o "$gdk_pixbuf_halfassed" = yes || \ test "$have_gdk_pixbuf" = no -a "$have_xpm" = no ; then if test "$with_gdk_pixbuf_req" = yes ; then true elif test "$with_gdk_pixbuf_req" = no ; then warnL 'The GDK-Pixbuf library is not being used.' else warnL 'The GDK-Pixbuf library was not found.' fi if test "$with_xpm_req" = yes -o "$have_xpm" = yes ; then true elif test "$with_xpm_req" = no ; then warnL 'The XPM library is not being used.' else warnL 'The XPM library was not found.' fi if test "$have_gdk_pixbuf" = no -a "$have_xpm" = yes ; then warn2 'The XPM library is being used instead.' fi if test "$gdk_pixbuf_halfassed" = yes ; then echo '' warn2 'More specifically, we found the headers, but not the' warn2 'libraries; so either GDK-Pixbuf is half-installed on this' warn2 "system, or something else went wrong. The \`config.log'" warn2 'file might contain some clues.' fi echo '' warn2 'Some of the demos will not use images as much as they could.' warn2 'You should consider installing GDK-Pixbuf and re-running' warn2 'configure. (GDK-Pixbuf is recommended over XPM, as it' warn2 'provides support for more image formats.)' fi if test "$have_jpeg" = no ; then if test "$with_jpeg_req" = yes ; then warnL 'Use of libjpeg was requested, but it was not found.' elif test "$with_jpeg_req" = no ; then noteL 'The JPEG library is not being used.' else noteL 'The JPEG library was not found.' fi if test "$jpeg_halfassed" = yes ; then echo '' warn2 'More specifically, we found the headers, but not the' warn2 'library; so either JPEG is half-installed on this' warn2 "system, or something else went wrong. The \`config.log'" warn2 'file might contain some clues.' echo '' fi if test "$have_gdk_pixbuf" = no ; then warn2 "This means that it won't be possible for the image-manipulating" warn2 "display modes to load files from disk; and it also means that" warn2 "the \`webcollage' program will be much slower." else warn2 "This means the \`webcollage' program will be much slower." fi fi if test "$have_xft" = no ; then if test "$with_xft_req" = yes ; then warnL "Use of libXft was requested, but it was not found." elif test "$with_xft_req" = no ; then noteL 'The Xft library is not being used.' else noteL "The Xft library was not found." fi if test "$xft_halfassed" = yes ; then echo '' warn2 'More specifically, we found the headers, but not the' warn2 'libraries; so either Xft is half-installed on this' warn2 "system, or something else went wrong. The \`config.log'" warn2 'file might contain some clues.' echo '' fi warn2 "This means that fonts won't be anti-aliased." fi if test "$have_gl" = yes -a "$ac_have_mesa_gl" = yes ; then preferred_mesagl=3.4 mgv="$ac_mesagl_version_string" pgl="$preferred_mesagl" if test "$ac_mesagl_version" = unknown; then true # warnL "Unable to determine the MesaGL version number!" # warn2 "Make sure you are using version $preferred_mesagl or newer." elif test \! "$ac_mesagl_version" -gt 2006; then warnL "MesaGL version number is $mgv --" warn2 "MesaGL 2.6 and earlier have a security bug. It is strongly" warn2 "recommended that you upgrade to at least version $preferred_mesagl." elif test \! "$ac_mesagl_version" -gt 3003; then warnL "MesaGL version number is $mgv --" warn2 "MesaGL 3.3 and earlier have some bugs; it is recommended" warn2 "that you upgrade to $pgl or newer." fi fi if test "$have_gl" = no ; then if test "$with_gl_req" = yes ; then warnL 'Use of GL was requested, but it was not found.' elif test "$with_gl_req" = no ; then noteL 'The OpenGL 3D library is not being used.' else noteL 'The OpenGL 3D library was not found.' fi if test "$gl_halfassed" = yes ; then echo '' warn2 'More specifically, we found the headers, but not the' warn2 'libraries; so either GL is half-installed on this' warn2 "system, or something else went wrong. The \`config.log'" warn2 'file might contain some clues.' fi echo '' warn2 'Those demos which use 3D will not be built or installed.' warn2 'You might want to consider installing OpenGL and' warn2 're-running configure.' fi if test "$have_gl" = yes -a "$have_gle" = no ; then # nobody cares about this; don't print the warning unless it was # requested and not found, or halfway-found. if test "$with_gle_req" = yes -o "$gle_halfassed" = yes ; then if test "$with_gle_req" = yes ; then noteL 'Use of the GLE (GL Extrusion) library was requested, but' warn2 'it was not found (though the OpenGL library was found, and' warn2 'is being used.)' elif test "$with_gle_req" = no ; then noteL 'The OpenGL Library is being used, but the GLE (GL Extrusion)' warn2 'library is not.' else noteL 'The OpenGL Library was found, but the GLE (GL Extrusion)' warn2 'library was not.' fi if test "$gle_halfassed" = yes ; then echo '' warn2 'More specifically, we found the headers, but not the' warn2 'libraries; so either GLE is half-installed on this' warn2 "system, or something else went wrong. The \`config.log'" warn2 'file might contain some clues.' fi echo '' warn2 'Some of the OpenGL (3D) demos (those that depend on GLE)' warn2 'will not be built or installed. You might want to consider' warn2 'installing GLE and re-running configure. You can find the' warn2 'GLE library at ' fi fi if test "$with_readdisplay_req" = yes -a "$have_readdisplay" = no ; then warn 'Use of XReadDisplay was requested, but it was not found.' fi if test "$with_kerberos_req" = yes -a "$have_kerberos" = no ; then warn 'Use of Kerberos was requested, but it was not found.' fi if test "$with_pam_req" = yes -a "$have_pam" = no ; then warn 'Use of PAM was requested, but it was not found.' fi if test "$with_shadow_req" = yes -a "$have_shadow" = no ; then warn 'Use of shadow passwords was requested, but they were not found.' fi if test "$ac_macosx" = yes ; then if test "$enable_locking" = yes ; then warn "You have specified --enable-locking on MacOS X." warn2 "THIS DOES NOT WORK! Don't do this!" fi fi # You are in a twisty maze of namespaces and syntaxes, all alike. # Fuck the skull of Unix. # bindir=`eval eval eval eval eval eval eval echo $bindir` HACKDIR=`eval eval eval eval eval eval eval echo $HACKDIR` HACK_CONF_DIR=`eval eval eval eval eval eval eval echo $HACK_CONF_DIR` # canonicalize slashes. bindir=`echo "${bindir}" | sed 's@/$@@;s@//*@/@g'` HACKDIR=`echo "${HACKDIR}" | sed 's@/$@@;s@//*@/@g'` HACK_CONF_DIR=`echo "${HACK_CONF_DIR}" | sed 's@/$@@;s@//*@/@g'` # Sanity check the hackdir for bad_choice in xscreensaver xscreensaver-demo xscreensaver-command ; do if test "${HACKDIR}" = "${bindir}/${bad_choice}" ; then echo "" as_fn_error $? "\"--with-hackdir=${bindir}/${bad_choice}\" won't work. There will be an executable installed with that name, so that can't be the name of a directory as well. Please re-configure with a different directory name." "$LINENO" 5 fi done do_dir_warning=no # Now let's warn if there's a previous RPM version already installed. # But don't bother with this test if we are currently *building* an RPM. if test -z "$RPM_PACKAGE_VERSION" ; then rpmnames="xscreensaver xscreensaver-base xscreensaver-extras" # M4 sucks!! rpmv=`(rpm -qv $rpmnames) 2>/dev/null | \ sed -n 's/^[-a-z]*-\([0-9][0-9]*[.][0-9][0-9a-z]*\)-.*$/\1/p' | \ head -1` if test \! -z "$rpmv" ; then rpmbdir=`rpm -ql $rpmnames | sed -n 's@^\(.*\)/xscreensaver-demo$@\1@p'` rpmhdir=`rpm -ql $rpmnames | sed -n 's@^\(.*\)/popsquares$@\1@p'` warning=no warnL "There is already an installed RPM of xscreensaver $rpmv" warn2 'on this system. You might want to remove it ("rpm -ve")' warn2 'before running "make install" in this directory.' echo "" warn2 "Alternately, you could build this version of xscreensaver" warn2 'as an RPM, and then install that. An "xscreensaver.spec"' warn2 'file is included. Try "rpmbuild -v -ba xscreensaver.spec".' warn2 "See the RPM documentation for more info." echo "" if test "$rpmbdir" = "$rpmhdir" ; then warn2 "The RPM version was installed in $rpmbdir/." do_dir_warning=yes else warn2 "The RPM version was installed in $rpmbdir/," warn2 "with demos in $rpmhdir/." fi fi fi # Also warn if there's a Debian package installed. # debnames="xscreensaver xscreensaver-data xscreensaver-data-extra" debv='' for dpkg in $debnames ; do if test -z "$debv"; then debv=`dpkg -s $dpkg 2>/dev/null | sed -n 's/^Version: \(.*\)$/\1/p'` fi done if test \! -z "$debv" ; then debbdir=`dpkg -L $debnames 2>/dev/null | \ sed -n 's@^\(.*/bin/\)xscreensaver$@\1@p'` debhdir=`dpkg -L $debnames 2>/dev/null | \ sed -n 's@^\(.*/\)popsquares$@\1@p'` if test -z "$debbdir" ; then debbdir='???'; fi if test -z "$debhdir" ; then debhdir='???'; fi warning=no warnL "There is already an installed dpkg of xscreensaver" warn2 "version \"$debv\" on this system." echo "" warn2 "The dpkg was installed in $debbdir," warn2 "with demos in $debhdir." fi if test "${bindir}" = "${HACKDIR}" ; then do_dir_warning=yes fi if test "$do_dir_warning" = yes; then echo "" echo "$warnsep" echo "" echo ' When you run "make install", the "xscreensaver",' echo ' "xscreensaver-demo", and "xscreensaver-command" executables' echo " will be installed in ${bindir}/." echo "" echo " The various graphics demos (200+ different executables) will" echo " be installed in ${HACKDIR}/." echo "" echo " If you would prefer the demos to be installed elsewhere," echo " you should re-run configure with the --with-hackdir=DIR" echo " option. For more information, run \`./configure --help'." warning=yes fi if test "$warning" != no; then echo '' ; echo "$warnsep" ; echo '' fi if test "$do_dir_warning" = no; then if test "$warning" = no; then echo '' fi echo "User programs will be installed in ${bindir}/" echo "Screen savers will be installed in ${HACKDIR}/" echo "Configuration dialogs will be installed in ${HACK_CONF_DIR}/" echo "System-wide default settings will be installed in ${APPDEFAULTS}/" echo '' fi xscreensaver-5.36/configure.in000644 000767 000024 00000452236 12721402241 016456 0ustar00jwzstaff000000 000000 # configure.in --- xscreensaver, Copyright (c) 1997-2014 Jamie Zawinski. # AC_PREREQ(2.52) AC_INIT(driver/subprocs.c) AC_CONFIG_HEADERS([config.h]) echo "current directory: `pwd`" echo "command line was: $0 $@" ############################################################################### # # Autoheader stuff # ############################################################################### AH_TOP([ /* config.h.in --- xscreensaver, Copyright (c) 1991-2014 Jamie Zawinski. * * The best way to set these parameters is by running the included `configure' * script. That examines your system, and generates `config.h' from * `config.h.in'. * * If something goes very wrong, you can edit `config.h' directly, but beware * that your changes will be lost if you ever run `configure' again. */ ]) AH_TEMPLATE([HAVE_READ_DISPLAY_EXTENSION], [Define this if you have the XReadDisplay extension (I think this is an SGI-only thing; it's in .) A few of the screenhacks will take advantage of this if it's available.]) AH_TEMPLATE([HAVE_XHPDISABLERESET], [Define this if you have the XHPDisableReset function (an HP only thing which allows the Ctrl-Sh-Reset key sequence to be temporarily disabled.)]) # This only ever existed in X11R4 and X11R5. #AH_TEMPLATE([HAVE_XIDLE_EXTENSION], # [Define this if you have the XIDLE extension installed. If you # have the XIDLE extension, this is recommended. (You have this # extension if the file /usr/include/X11/extensions/xidle.h # exists.) Turning on this flag lets XScreenSaver work better with # servers which support this extension; but it will still work # with servers which do not suport it, so it's a good idea to # compile in support for it if you can.]) # Using this extension will crash your X server and make fading not work. #AH_TEMPLATE([HAVE_MIT_SAVER_EXTENSION], # [Define this if you have the MIT-SCREEN-SAVER extension # installed. See the caveats about this extension, above. # (It's available if /usr/include/X11/extensions/scrnsaver.h # exists.)]) # This only ever existed on SGI hardware. #AH_TEMPLATE([HAVE_SGI_SAVER_EXTENSION], # [Define this if you have the SGI SCREEN_SAVER extension. This is # standard on Irix systems, and not available elsewhere.]) # This only ever existed on SGI hardware. #AH_TEMPLATE([HAVE_SGI_VC_EXTENSION], # [Define this if you have the SGI-VIDEO-CONTROL extension. This # is standard on Irix systems, and not available elsewhere.]) AH_TEMPLATE([HAVE_DPMS_EXTENSION], [Define this if you have the XDPMS extension. This is standard on sufficiently-recent XFree86 systems, and possibly elsewhere. (It's available if the file /usr/include/X11/extensions/dpms.h exists.)]) AH_TEMPLATE([HAVE_XF86VMODE], [Define this if you have the functions XF86VidModeGetModeLine() and XF86VidModeGetViewPort(), in support of virtual desktops where the X server's root window is bigger than the actual screen. This is an XFree86 thing, and probably doesn't exist elsewhere. (It's available if the file /usr/include/X11/extensions/xf86vmode.h exists.)]) AH_TEMPLATE([HAVE_XF86VMODE_GAMMA], [Define this if you have the functions XF86VidModeGetGamma() and XF86VidModeSetGamma(), which allow clients to change the gamma response of the monitor. This is an XFree86 4.0.x thing, and probably doesn't exist elsewhere. (It's available if the file /usr/include/X11/extensions/xf86vmode.h exists and has stuff about gamma in it.)]) AH_TEMPLATE([HAVE_XF86VMODE_GAMMA_RAMP], [Define this if you have the functions XF86VidModeGetGammaRamp() and XF86VidModeSetGammaRamp(), which provide finer-grained control than XF86VidMode[GS]etGamma(). These appeared in XFree86 4.1.0.]) AH_TEMPLATE([HAVE_XINERAMA], [Define this if you have the Xinerama extension. This is standard on sufficiently-recent XFree86 systems, and possibly elsewhere. (It's available if the file /usr/include/X11/extensions/Xinerama.h exists.)]) AH_TEMPLATE([HAVE_XINPUT], [Define this if you have the Xinput extension. This is standard since X11R5, and is thus almost everywhere. (It's available if the file /usr/include/X11/extensions/XInput.h exists.)]) AH_TEMPLATE([HAVE_XF86MISCSETGRABKEYSSTATE], [Define this if you have the XF86MiscSetGrabKeysState function (which allows the Ctrl-Alt-KP_star and Ctrl-Alt-KP_slash key sequences to be temporarily disabled. Sadly, it doesn't affect Ctrl-Alt-BS or Ctrl-Alt-F1.)]) AH_TEMPLATE([HAVE_RANDR], [Define this if you have the Resize and Rotate extension. This is standard on sufficiently-recent XFree86 systems, and possibly elsewhere. (It's available if the file /usr/include/X11/extensions/Xrandr.h exists.)]) AH_TEMPLATE([HAVE_RANDR_12], [Define this if the RANDR library is version 1.2 or newer.]) AH_TEMPLATE([HAVE_PROC_INTERRUPTS], [Define this if you have a Linux-like /proc/interrupts file which can be examined to determine when keyboard activity has occurred.]) AH_TEMPLATE([HAVE_MOTIF],[Define this if you have Motif.]) AH_TEMPLATE([HAVE_XMCOMBOBOX], [Define this if you have the XmComboBox Motif widget (Motif 2.0.)]) AH_TEMPLATE([HAVE_GTK],[Define this if you have Gtk (any version.)]) AH_TEMPLATE([HAVE_GTK2],[Define this if you have Gtk 2.x.]) AH_TEMPLATE([HAVE_CRAPPLET], [Define this if you have Gnome and want to build support for the xscreensaver control panel in the Gnome Control Center (gnomecc). (This is needed only with Gtk 1.x.)]) AH_TEMPLATE([HAVE_CRAPPLET_IMMEDIATE], [Define this if HAVE_CRAPPLET is defined, and the function capplet_widget_changes_are_immediate() is available.]) AH_TEMPLATE([HAVE_XML],[Define this if you have the XML library.]) AH_TEMPLATE([HAVE_OLD_XML_HEADERS], [Define this if you have the XML library headers in their old, non-namespaced location (you lack the gnome-xml/libxml symlink)]) AH_TEMPLATE([HAVE_XPM], [Define this if you have the XPM library installed. Some of the demos can make use of this if it is available.]) AH_TEMPLATE([HAVE_GDK_PIXBUF], [Define this if you have the GDK_Pixbuf library installed. Some of the demos can make use of this if it is available.]) AH_TEMPLATE([HAVE_GDK_PIXBUF_APPLY_EMBEDDED_ORIENTATION], [Define this if you have the gdk_pixbuf_apply_embedded_orientation function (gdk-pixbuf 2.12).]) AH_TEMPLATE([HAVE_JPEGLIB], [Define this if you have the Independent JPEG Group's JPEG library installed. Some of the demos can make use of this if it is available.]) AH_TEMPLATE([HAVE_XMU], [Define this if you have the Xmu library. This is standard part of X, and if your vendor doesn't ship it, you should report that as a bug.]) AH_TEMPLATE([HAVE_XUTF8DRAWSTRING], [Define this if you have the function Xutf8DrawString().]) AH_TEMPLATE([HAVE_XFT], [Define this if you have libXft2.]) AH_TEMPLATE([HAVE_GL], [Define this if you have OpenGL. Some of the demos require it, so if you don't have it, then those particular demos won't be built. (This won't affect the screen saver as a whole.)]) AH_TEMPLATE([HAVE_MESA_GL], [Define this if you have OpenGL, but it's the MesaGL variant. (The libraries have different names.) (HAVE_GL should be defined too.)]) AH_TEMPLATE([HAVE_GLBINDTEXTURE], [Define this if your version of OpenGL has the glBindTexture() routine. This is the case for OpenGL 1.1, but not for OpenGL 1.0.]) AH_TEMPLATE([HAVE_GLE], [Define this if you have the -lgle and -lmatrix libraries (GL extrusion.)]) AH_TEMPLATE([HAVE_GLE3],[Define this if you have the -lgle from GLE version 3]) AH_TEMPLATE([HAVE_JWZGLES],[Define this to target the OpenGL ES 1.x API instead of OpenGL 1.3.]) AH_TEMPLATE([HAVE_XSHM_EXTENSION], [Define this if you have the X Shared Memory Extension.]) AH_TEMPLATE([HAVE_DOUBLE_BUFFER_EXTENSION], [Define this if you have the X Double Buffer Extension.]) AH_TEMPLATE([FORTUNE_PROGRAM], [Some screenhacks like to run an external program to generate random pieces of text; set this to the one you like. Note that this is just the default; X resources can be used to override it.]) AH_TEMPLATE([PASSWD_HELPER_PROGRAM], [Set the name of the password helper program, if any]) AH_TEMPLATE([NO_LOCKING], [Define this to remove the option of locking the screen at all.]) AH_TEMPLATE([ALLOW_ROOT_PASSWD], [Define this to allow the root password to unlock the screen.]) AH_TEMPLATE([HAVE_KERBEROS], [Define this if you want to use Kerberos authentication to lock/unlock the screen instead of your local password. This currently uses Kerberos V4, but a V5 server with V4 compatibility will work. WARNING: DO NOT USE AFS string-to-key passwords with this option. This option currently *only* works with standard Kerberos des_string_to_key. If your password is an AFS password and not a kerberos password, it will not authenticate properly. See the comments in driver/kpasswd.c for more information if you need it.]) AH_TEMPLATE([HAVE_KERBEROS5], [Define this if you have Kerberos 5, meaning we need to use the Kerberos 4 compatibility layer.]) AH_TEMPLATE([HAVE_PAM], [Define this if you want to use PAM (Pluggable Authentication Modules) to lock/unlock the screen, instead of standard /etc/passwd authentication.]) AH_TEMPLATE([PAM_SERVICE_NAME], [If PAM is being used, this is the name of the PAM service that xscreensaver will authenticate as. The default is "xscreensaver", which means that the PAM library will look for an "xscreensaver" line in /etc/pam.conf, or (on recent Linux systems) will look for a file called /etc/pam.d/xscreensaver. Some systems might already have a PAM installation that is configured for xlock, so setting this to "xlock" would also work in that case.]) AH_TEMPLATE([HAVE_PAM_FAIL_DELAY], [Define this if you have pam_fail_delay function. see driver/passwd-pam.c.]) AH_TEMPLATE([PAM_CHECK_ACCOUNT_TYPE], [Whether PAM should check the result of account modules when authenticating. Only do this if you have account configured properly on your system.]) AH_TEMPLATE([PAM_STRERROR_TWO_ARGS], [Define if you have PAM and pam_strerror() requires two arguments.]) AH_TEMPLATE([HAVE_SIGTIMEDWAIT], [Define to 1 if you have the `sigtimedwait' function.]) AH_TEMPLATE([HAVE_SHADOW_PASSWD], [Define this if your system uses 'shadow' passwords, that is, the passwords live in /etc/shadow instead of /etc/passwd, and one reads them with getspnam() instead of getpwnam(). (Note that SCO systems do some random other thing; others might as well. See the ifdefs in driver/passwd-pwent.c if you're having trouble related to reading passwords.)]) AH_TEMPLATE([HAVE_ENHANCED_PASSWD], [Define this if your system is Digital or SCO Unix with so-called ``Enhanced Security'', that is, the passwords live in /tcb/files/auth// instead of in /etc/passwd, and one reads them with getprpwnam() instead of getpwnam().]) AH_TEMPLATE([HAVE_ADJUNCT_PASSWD], [Define this if your system is Solaris with ``adjunct'' passwords (this is the version where one gets at the passwords with getpwanam() instead of getpwnam().) I haven't tested this one, let me know if it works.]) AH_TEMPLATE([HAVE_HPUX_PASSWD], [Define this if you are running HPUX with so-called ``Secure Passwords'' (if you have /usr/include/hpsecurity.h, you probably have this.) I haven't tested this one, let me know if it works.]) AH_TEMPLATE([HAVE_SYSLOG], [Define this if you the openlog(), syslog(), and closelog() functions. This is used for logging failed login attempts.]) AH_TEMPLATE([HAVE_ICMP], [Define this if you do pings with a `struct icmp' and an `icmp_id' slot.]) 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 programs, or be used as terminal windows.]) AH_TEMPLATE([HAVE_GETTIMEOFDAY], [Define this if you have the gettimeofday function.]) AH_TEMPLATE([GETTIMEOFDAY_TWO_ARGS], [Define this if gettimeofday() takes two arguments.]) AH_TEMPLATE([XPointer], [Define this to void* if you're using X11R4 or earlier.]) AH_TEMPLATE([HAVE_PTHREAD], [Define this if your system supports POSIX threads.]) AH_TEMPLATE([HAVE_RECORD_ANIM], [Define this to enable recording of videos.]) # After checking to see that --srcdir is correct (which AC_INIT does) # check for some random other files that come later in the tar file, # to make sure everything is here. # for d in utils jwxyz hacks hacks/glx driver ; do f=$srcdir/$d/Makefile.in if test \! -r $f ; then echo "" echo "ERROR: The package is incomplete: $f does not exist." echo " This probably means that your download was truncated." echo "" exit 1 fi done ############################################################################### # # Query AX_PTHREAD, and figure out which compiler gets used. # ############################################################################### AC_DEFUN([AC_PROG_CC_PTHREAD], [have_pthread=no with_pthread_req=unspecified # AX_PTHREAD is from the GNU Autoconf Archive. # https://savannah.gnu.org/projects/autoconf-archive/ m4_include(ax_pthread.m4) # This affects CC, LIBS, and CFLAGS, instead of defining new variables. AC_ARG_WITH([pthread], [ --with-pthread Enables POSIX threads, for SMP support.], [with_pthread="$withval"; with_pthread_req="$withval"], [with_pthread=yes]) if test "$with_pthread" = yes; then # AX_PTHREAD might want a different compiler. AX_PTHREAD( [if test "$CC" = "$PTHREAD_CC" -o -z "$ac_original_cc"; then have_pthread=yes else ac_prog_cc_no_pthread=yes fi ]) if test "$have_pthread" = yes; then AC_DEFINE([HAVE_PTHREAD]) CC=$PTHREAD_CC fi fi ]) ############################################################################### # # Function to figure out how to run the compiler. # ############################################################################### AC_DEFUN([AC_PROG_CC_ANSI], [AC_REQUIRE([AC_PROG_CC]) if test -z "$GCC"; then # not using GCC AC_MSG_CHECKING(how to request ANSI compilation) case "$host" in *-hpux* ) AC_MSG_RESULT(HPUX: adding -Ae) CC="$CC -Ae" ;; *-aix* ) AC_MSG_RESULT(AIX: adding -qlanglvl=ansi -qhalt=e) CC="$CC -qlanglvl=ansi -qhalt=e" ;; *-dec-* ) AC_MSG_RESULT(DEC: adding -std1 -ieee) CC="$CC -std1" ;; *) AC_MSG_RESULT(no idea) ;; esac else # using GCC case "$host" in *-solaris*) AC_MSG_RESULT(Solaris: adding -D__EXTENSIONS__) CC="$CC -D__EXTENSIONS__" ;; esac fi OBJCC="$CC" AC_MSG_CHECKING([whether the compiler works on ANSI C]) AC_TRY_RUN([ main(int ac, char **av) { return 0; } ], AC_MSG_RESULT(yes), AC_MSG_RESULT(no) AC_MSG_ERROR(Couldn't build even a trivial ANSI C program: check CC.), AC_MSG_ERROR(Couldn't build even a trivial ANSI C program: check CC.)) if test -n "$GCC"; then AC_MSG_RESULT(Turning on gcc compiler warnings.) CC="$CC -pedantic -Wall -Wstrict-prototypes -Wnested-externs -Wmissing-prototypes" OBJCC="$OBJCC -Wall" # As of gcc 3.4, we have "-Wdeclaration-after-statement" # and so perhaps now we can do without -pedantic? else case "$host" in *-irix5* |*-irix6.[0-3]* ) AC_MSG_RESULT(Turning on SGI compiler warnings.) CC="$CC -fullwarn -use_readonly_const -rdata_shared -g3" ;; # *-dec-osf* ) # if test -z "$GCC"; then # AC_MSG_RESULT(Turning on DEC C compiler warnings.) # CC="$CC -migrate -w0 -verbose -warnprotos" # fi # ;; esac fi ]) ############################################################################### # # Check for availability of various gcc command-line options. # ############################################################################### AC_DEFUN([AC_CHECK_GCC_ARG], [if test -n "$GCC"; then AC_CACHE_CHECK([whether gcc accepts [$2]], ac_cv_gcc_accepts_[$1], [rm -rf conftest.$ac_ext touch conftest.$ac_ext if ( ( gcc -c [$2] conftest.$ac_ext -o/dev/null >/dev/null ) 2>&1 | \ grep unrecognized >/dev/null ); then ac_cv_gcc_accepts_[$1]=no else ac_cv_gcc_accepts_[$1]=yes CC="$CC [$2]" fi]) ac_gcc_accepts_[$1]="$ac_cv_gcc_accepts_[$1]" fi ]) AC_DEFUN([AC_NO_LONG_STRING_WARNINGS], [AC_CHECK_GCC_ARG(no_overlength, -Wno-overlength-strings)]) AC_DEFUN([AC_NO_MISPLACED_DECLARATIONS], [AC_CHECK_GCC_ARG(no_decl_after, -Wdeclaration-after-statement)]) # Need to disable Objective C extensions in ANSI C on MacOS X to work # around an Apple-specific gcc bug. # AC_DEFUN([AC_NO_OBJECTIVE_C], [AC_CHECK_GCC_ARG(no_cpp_precomp, -no-cpp-precomp)]) ############################################################################### # # Function to figure out how to disable // comments in ANSI C code. # # (With recent gcc, this is done with "-std=c89". With older gcc, this # is done by passing "-lang-c89" to cpp, by passing "-Wp,-lang-c89" to # gcc. Old gcc doesn't support -std, and new gcc doesn't support -lang. # so much for compatibility!) # # UPDATE: apparently there is NO WAY to tell gcc 3.2.2 to require that # declarations preceed statements, without resorting to "-pedantic". # This means that there is no way to get gcc3 to issue warnings that # ensure that your code complies with the ANSI/ISO C89 standard, without # also drowning in totally useless warnings. Thank you master may I # have another. # # So, I give up, let's just use -pedantic. # ############################################################################### AC_DEFUN([AC_GCC_ACCEPTS_STD], [ case "$host" in *-darwin* ) # Fucking Apple let // comments sneak into OpenGL headers, so # we *must* allow // comments when compiling on Mac OS 10.6! FUCK! ;; *) AC_CHECK_GCC_ARG(std, -std=c89) ;; esac ]) AC_DEFUN([AC_NO_CPLUSPLUS_COMMENTS_IN_C_CODE], [if test -n "$GCC"; then AC_GCC_ACCEPTS_STD AC_MSG_RESULT(Disabling C++ comments in ANSI C code.) # # The reason that // comments are banned from xscreensaver is that gcc is # basically the only compiler in the world that supports them in C code. # All other vendors support them only in their C++ compilers, not in their # ANSI C compilers. This means that it's a portability problem: every time # these comments have snuck into the xscreensaver source code, I've gotten # complaints about it the next day. So we turn off support for them in gcc # as well to prevent them from accidentially slipping in. # if test "$ac_gcc_accepts_std" = yes ; then # # -std=c89 defines __STRICT_ANSI__, which we don't want. # (That appears to be the only additional preprocessor symbol # it defines, in addition to the syntax changes it makes.) # # -std=gnu89 is no good, because // comments were a GNU extension # before they were in the ANSI C 99 spec... (gcc 2.96 permits // # with -std=gnu89 but not with -std=c89.) # # $CC already contains "-std=c89" via AC_GCC_ACCEPTS_STD CC="$CC -U__STRICT_ANSI__" # else # # The old way: # CC="$CC -Wp,-lang-c89" fi fi ]) ############################################################################### # # Function to figure out how to create directory trees. # ############################################################################### AC_DEFUN([AC_PROG_INSTALL_DIRS], [AC_CACHE_CHECK([whether "\${INSTALL} -d" creates intermediate directories], ac_cv_install_d_creates_dirs, [ac_cv_install_d_creates_dirs=no rm -rf conftestdir if mkdir conftestdir; then cd conftestdir 2>/dev/null ${INSTALL} -d `pwd`/dir1/dir2 >/dev/null 2>&1 if test -d dir1/dir2/. ; then ac_cv_install_d_creates_dirs=yes fi cd .. 2>/dev/null rm -rf conftestdir fi ]) if test "$ac_cv_install_d_creates_dirs" = no ; then AC_CACHE_CHECK([whether "mkdir -p" creates intermediate directories], ac_cv_mkdir_p_creates_dirs, [ac_cv_mkdir_p_creates_dirs=no rm -rf conftestdir if mkdir conftestdir; then cd conftestdir 2>/dev/null mkdir -p dir1/dir2 >/dev/null 2>&1 if test -d dir1/dir2/. ; then ac_cv_mkdir_p_creates_dirs=yes fi cd .. 2>/dev/null rm -rf conftestdir fi ]) fi if test "$ac_cv_install_d_creates_dirs" = yes ; then INSTALL_DIRS='${INSTALL} -d' elif test "$ac_cv_mkdir_p_creates_dirs" = yes ; then INSTALL_DIRS='mkdir -p' else # any other ideas? INSTALL_DIRS='${INSTALL} -d' fi ]) ############################################################################### # # Function to check whether gettimeofday() exists, and how to call it. # This may define HAVE_GETTIMEOFDAY and GETTIMEOFDAY_TWO_ARGS. # ############################################################################### AC_DEFUN([AC_GETTIMEOFDAY_ARGS], [AC_MSG_CHECKING(how to call gettimeofday) AC_CACHE_VAL(ac_cv_gettimeofday_args, [AC_TRY_COMPILE([#include #include ], [struct timeval tv; struct timezone tzp; gettimeofday(&tv, &tzp);], [ac_gettimeofday_args=2], [AC_TRY_COMPILE([#include #include ], [struct timeval tv; gettimeofday(&tv);], [ac_gettimeofday_args=1], [ac_gettimeofday_args=0])]) ac_cv_gettimeofday_args=$ac_gettimeofday_args]) ac_gettimeofday_args=$ac_cv_gettimeofday_args if test "$ac_gettimeofday_args" = 1 ; then AC_DEFINE(HAVE_GETTIMEOFDAY) AC_MSG_RESULT(one argument) elif test "$ac_gettimeofday_args" = 2 ; then AC_DEFINE(HAVE_GETTIMEOFDAY) AC_DEFINE(GETTIMEOFDAY_TWO_ARGS) AC_MSG_RESULT(two arguments) else AC_MSG_RESULT(unknown) fi ]) ############################################################################### # # Function to find perl5 (defines PERL and PERL_VERSION.) # ############################################################################### # M4 sucks!! perl sucks too!! changequote(X,Y) perl_version_cmd='print $]' changequote([,]) AC_DEFUN([AC_PROG_PERL], [AC_PATH_PROGS(PERL, [perl5 perl],,) if test -z "$PERL" ; then PERL_VERSION=0 else AC_CACHE_CHECK([perl version], ac_cv_perl_version, [ac_cv_perl_version=`$PERL -e "$perl_version_cmd"`]) PERL_VERSION=$ac_cv_perl_version fi ]) ############################################################################### # # Function to demand "bc". Losers. # ############################################################################### AC_DEFUN([AC_DEMAND_BC], [ac_bc_result=`echo 6+9 | bc 2>/dev/null` AC_MSG_CHECKING([for bc]) if test "$ac_bc_result" = "15" ; then AC_MSG_RESULT(yes) else AC_MSG_RESULT(no) echo '' AC_MSG_ERROR([Your system doesn't have \"bc\", which has been a standard part of Unix since the 1970s. Come back when your vendor has grown a clue.]) fi ]) ############################################################################### # # Functions to check how to do ICMP PING requests. # ############################################################################### AC_DEFUN([AC_CHECK_ICMP], [AC_CACHE_CHECK([for struct icmp], ac_cv_have_icmp, [AC_TRY_COMPILE([#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include ], [struct icmp i; struct sockaddr s; struct sockaddr_in si; struct ip ip; i.icmp_type = ICMP_ECHO; i.icmp_code = 0; i.icmp_cksum = 0; i.icmp_id = 0; i.icmp_seq = 0; si.sin_family = AF_INET; #if defined(__DECC) || defined(_IP_VHL) ip.ip_vhl = 0; #else ip.ip_hl = 0; #endif ], [ac_cv_have_icmp=yes], [ac_cv_have_icmp=no])]) if test "$ac_cv_have_icmp" = yes ; then AC_DEFINE(HAVE_ICMP) fi]) AC_DEFUN([AC_CHECK_ICMPHDR], [AC_CACHE_CHECK([for struct icmphdr], ac_cv_have_icmphdr, [AC_TRY_COMPILE([#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include ], [struct icmphdr i; struct sockaddr s; struct sockaddr_in si; struct ip ip; i.type = ICMP_ECHO; i.code = 0; i.checksum = 0; i.un.echo.id = 0; i.un.echo.sequence = 0; si.sin_family = AF_INET; ip.ip_hl = 0;], [ac_cv_have_icmphdr=yes], [ac_cv_have_icmphdr=no])]) if test "$ac_cv_have_icmphdr" = yes ; then AC_DEFINE(HAVE_ICMPHDR) fi]) ############################################################################### # # Functions to check for various X11 crap. # ############################################################################### # Try and find the app-defaults directory. # It sucks that autoconf doesn't do this already... # AC_DEFUN([AC_PATH_X_APP_DEFAULTS_XMKMF],[ rm -fr conftestdir if mkdir conftestdir; then cd conftestdir 2>/dev/null # Make sure to not put "make" in the Imakefile rules, since we grep it out. cat > Imakefile <<'EOF' acfindx: @echo 'ac_x_app_defaults="${XAPPLOADDIR}"' EOF if (xmkmf) >/dev/null 2>&1 && test -f Makefile; then # GNU make sometimes prints "make[1]: Entering...", which'd confuse us. eval `${MAKE-make} acfindx 2>/dev/null | grep -v make` fi cd .. 2>/dev/null rm -fr conftestdir fi]) ############################################################################### # # Handle the --with-x-app-defaults option HERE # ############################################################################### AC_ARG_WITH(x-app-defaults,[], [ac_cv_x_app_defaults="$withval"], [eval ac_x_app_defaults="$withval"]) AC_DEFUN([AC_PATH_X_APP_DEFAULTS_DIRECT],[ # Look for the directory under a standard set of common directories. # Check X11 before X11Rn because it's often a symlink to the current release. for ac_dir in \ \ /usr/share/X11/app-defaults \ \ /usr/X11/lib/app-defaults \ /usr/X11R6/lib/app-defaults \ /usr/X11R6/lib/X11/app-defaults \ /usr/X11R5/lib/app-defaults \ /usr/X11R5/lib/X11/app-defaults \ /usr/X11R4/lib/app-defaults \ /usr/X11R4/lib/X11/app-defaults \ \ /usr/lib/X11/app-defaults \ /usr/lib/X11R6/app-defaults \ /usr/lib/X11R5/app-defaults \ /usr/lib/X11R4/app-defaults \ \ /etc/X11/app-defaults \ \ /usr/local/X11/lib/app-defaults \ /usr/local/X11R6/lib/app-defaults \ /usr/local/X11R5/lib/app-defaults \ /usr/local/X11R4/lib/app-defaults \ \ /usr/local/lib/X11/app-defaults \ /usr/local/lib/X11R6/app-defaults \ /usr/local/lib/X11R6/X11/app-defaults \ /usr/local/lib/X11R5/app-defaults \ /usr/local/lib/X11R5/X11/app-defaults \ /usr/local/lib/X11R4/app-defaults \ /usr/local/lib/X11R4/X11/app-defaults \ \ /usr/X386/lib/X11/app-defaults \ /usr/x386/lib/X11/app-defaults \ /usr/XFree86/lib/X11/app-defaults \ \ /usr/lib/X11/app-defaults \ /usr/local/lib/X11/app-defaults \ /usr/unsupported/lib/X11/app-defaults \ /usr/athena/lib/X11/app-defaults \ /usr/local/x11r5/lib/X11/app-defaults \ /usr/lpp/Xamples/lib/X11/app-defaults \ /lib/usr/lib/X11/app-defaults \ \ /usr/openwin/lib/app-defaults \ /usr/openwin/lib/X11/app-defaults \ /usr/openwin/share/lib/app-defaults \ /usr/openwin/share/lib/X11/app-defaults \ \ /X11R6/lib/app-defaults \ /X11R5/lib/app-defaults \ /X11R4/lib/app-defaults \ ; \ do if test -d "$ac_dir"; then ac_x_app_defaults=$ac_dir break fi done ]) AC_DEFUN([AC_PATH_X_APP_DEFAULTS], [AC_REQUIRE_CPP() AC_CACHE_CHECK([for X app-defaults directory], ac_cv_x_app_defaults, [# skip this, it's always wrong these days. # AC_PATH_X_APP_DEFAULTS_XMKMF if test x"$ac_x_app_defaults" = x; then true AC_PATH_X_APP_DEFAULTS_DIRECT fi if test x"$ac_x_app_defaults" = x; then /bin/echo -n 'fallback: ' ac_cv_x_app_defaults="/usr/lib/X11/app-defaults" else # Record where we found app-defaults for the cache. ac_cv_x_app_defaults="$ac_x_app_defaults" fi]) eval ac_x_app_defaults="$ac_cv_x_app_defaults"]) AC_DEFUN([AC_XPOINTER], [AC_CACHE_CHECK([for XPointer], ac_cv_xpointer, [AC_TRY_X_COMPILE([#include ], [XPointer foo = (XPointer) 0;], [ac_cv_xpointer=yes], [ac_cv_xpointer=no])]) if test "$ac_cv_xpointer" != yes; then AC_DEFINE(XPointer,[char*]) fi]) # Random special-cases for X on certain pathological OSes. # You know who you are. # AC_DEFUN([AC_X_RANDOM_PATHS], [case "$host" in *-hpux*) # The following arcana was gleaned from conversations with # Eric Schwartz : # # On HPUX 10.x, the parts of X that HP considers "standard" live in # /usr/{include,lib}/X11R6/. The parts that HP doesn't consider # "standard", notably, Xaw and Xmu, live in /usr/contrib/X11R6/. # Yet /usr/contrib/X11R6/ comes preinstalled on all HPUX systems. # Also, there are symlinks from /usr/include/ and /usr/lib/ into # /usr/{include,lib}/X11R6/, so that (if you don't use Xmu at all) # you don't need any -I or -L arguments. # # On HPUX 9.x, /usr/{include,lib}/X11R5/ and /usr/contrib/X11R5/ # are the same division as 10.x. However, there are no symlinks to # the X stuff from /usr/include/ and /usr/lib/, so -I and -L # arguments are always necessary. # # However, X11R6 was available on HPUX 9.x as a patch: if that # patch was installed, then all of X11R6 went in to # /usr/contrib/X11R6/ (there was no /usr/{include,lib}/X11R6/.) # # HPUX 8.x was the same as 9.x, but was X11R4 instead (I don't know # whether R5 was available as a patch; R6 undoubtedly was not.) # # So. We try and use the highest numbered pair of # /usr/{include,lib}/X11R?/ and /usr/contrib/X11R?/{include,lib}/ # that are available. We do not mix and match different versions # of X. # # Question I still don't know the answer to: (do you?) # # * On HPUX 9.x, where /usr/include/X11R5/ was standard, and # /usr/contrib/X11R6/ could be installed as a patch, what was in # that contrib directory? Did it contain so-called "standard" # X11R6, or did it include Xaw and Xmu as well? If the former, # where did one find Xaw and Xmu on 9.x R6 systems? Would this # be a situation where one had to reach into the R5 headers and # libs to find Xmu? That is, must both R6 and R5 directories # be on the -I and -L lists in that case? # for version in X11R6 X11R5 X11R4 ; do # if either pair of directories exists... if test -d /usr/include/$version || test -d /usr/contrib/$version/include then # if contrib exists, use it... if test -d /usr/contrib/$version/include ; then X_CFLAGS="$X_CFLAGS -I/usr/contrib/$version/include" X_LIBS="$X_LIBS -L/usr/contrib/$version/lib" fi # if the "standard" one exists, use it. if test -d /usr/include/$version ; then X_CFLAGS="$X_CFLAGS -I/usr/include/$version" X_LIBS="$X_LIBS -L/usr/lib/$version" fi # since at least one of the pair exists, go no farther. break fi done # Now find Motif. Thanks for not making xmkmf find this by # default, you losers. # if test -d /usr/include/Motif2.1 ; then X_CFLAGS="$X_CFLAGS -I/usr/include/Motif2.1" X_LIBS="$X_LIBS -L/usr/lib/Motif2.1" elif test -d /usr/include/Motif1.2 ; then X_CFLAGS="$X_CFLAGS -I/usr/include/Motif1.2" X_LIBS="$X_LIBS -L/usr/lib/Motif1.2" elif test -d /usr/include/Motif1.1 ; then X_CFLAGS="$X_CFLAGS -I/usr/include/Motif1.1" X_LIBS="$X_LIBS -L/usr/lib/Motif1.1" fi # Now let's check for the pseudo-standard locations for OpenGL and XPM. # if test -d /opt/graphics/OpenGL/include ; then # HP-UX 10.20 puts it here X_CFLAGS="-I/opt/graphics/OpenGL/include $X_CFLAGS" X_LIBS="-L/opt/graphics/OpenGL/lib $X_LIBS" elif test -d /opt/Mesa/lib ; then X_CFLAGS="-I/opt/Mesa/include $X_CFLAGS" X_LIBS="-L/opt/Mesa/lib $X_LIBS" fi if test -d /opt/xpm/lib/X11 ; then X_CFLAGS="-I/opt/xpm/include $X_CFLAGS" X_LIBS="-L/opt/xpm/lib/X11 $X_LIBS" fi # On HPUX, default to installing in /opt/xscreensaver/ instead of # in /usr/local/, unless there is already an xscreensaver in # /usr/local/bin/. This can be overridden with the --prefix arg # to configure. I'm not sure this is the right thing to do, but # Richard Lloyd says so... # if test \! -x /usr/local/bin/xscreensaver ; then ac_default_prefix=/opt/xscreensaver fi ;; *-solaris*) # Thanks for not making xmkmf find this by default, pinheads. # And thanks for moving things around again, too. Is this # really the standard location now? What happened to the # joke that this kind of thing went in /opt? # cthomp says "answer: CDE (Common Disorganized Environment)" # if test -f /usr/dt/include/Xm/Xm.h ; then X_CFLAGS="$X_CFLAGS -I/usr/dt/include" MOTIF_LIBS="$MOTIF_LIBS -L/usr/dt/lib -R/usr/dt/lib" # Some versions of Slowlaris Motif require -lgen. But not all. Why? AC_CHECK_LIB(gen, regcmp, [MOTIF_LIBS="$MOTIF_LIBS -lgen"]) fi ;; *-darwin*) # On MacOS X (10.x with "fink"), many things are under /sw/. # if test -d /sw/include ; then X_CFLAGS="-I/sw/include $X_CFLAGS" X_LIBS="-L/sw/lib $X_LIBS" fi ;; 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]) AC_DEFUN([AC_TYPE_SOCKLEN_T], [AC_CACHE_CHECK([for socklen_t], ac_cv_type_socklen_t, [AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[ #include #include ]], [[ socklen_t socklen; ]])],[ac_cv_type_socklen_t=yes],[ac_cv_type_socklen_t=no])]) if test "$ac_cv_type_socklen_t" != yes; then AC_DEFINE(socklen_t, int, [Define to `int' if or does not define.]) fi]) ############################################################################### # # Some utility functions to make checking for X things easier. # ############################################################################### # Like AC_CHECK_HEADER, but it uses the already-computed -I directories. # AC_DEFUN([AC_CHECK_X_HEADER], [ ac_save_CPPFLAGS="$CPPFLAGS" if test \! -z "$includedir" ; then CPPFLAGS="$CPPFLAGS -I$includedir" fi CPPFLAGS="$CPPFLAGS $X_CFLAGS" CPPFLAGS=`eval eval eval eval eval eval eval eval eval echo $CPPFLAGS` AC_CHECK_HEADER([$1],[$2],[$3],[$4]) CPPFLAGS="$ac_save_CPPFLAGS"]) # Like AC_EGREP_HEADER, but it uses the already-computed -I directories. # AC_DEFUN([AC_EGREP_X_HEADER], [ ac_save_CPPFLAGS="$CPPFLAGS" if test \! -z "$includedir" ; then CPPFLAGS="$CPPFLAGS -I$includedir" fi CPPFLAGS="$CPPFLAGS $X_CFLAGS" CPPFLAGS=`eval eval eval eval eval eval eval eval eval echo $CPPFLAGS` AC_EGREP_HEADER([$1], [$2], [$3], [$4]) CPPFLAGS="$ac_save_CPPFLAGS"]) # Like AC_TRY_COMPILE, but it uses the already-computed -I directories. # AC_DEFUN([AC_TRY_X_COMPILE], [ ac_save_CPPFLAGS="$CPPFLAGS" if test \! -z "$includedir" ; then CPPFLAGS="$CPPFLAGS -I$includedir" fi CPPFLAGS="$CPPFLAGS $X_CFLAGS" CPPFLAGS=`eval eval eval eval eval eval eval eval eval echo $CPPFLAGS` AC_TRY_COMPILE([$1], [$2], [$3], [$4]) CPPFLAGS="$ac_save_CPPFLAGS"]) # Like AC_CHECK_LIB, but it uses the already-computed -I and -L directories. # Use this sparingly; it probably doesn't work very well on X programs. # AC_DEFUN([AC_CHECK_X_LIB], [ ac_save_CPPFLAGS="$CPPFLAGS" ac_save_LDFLAGS="$LDFLAGS" # ac_save_LIBS="$LIBS" if test \! -z "$includedir" ; then CPPFLAGS="$CPPFLAGS -I$includedir" fi # note: $X_CFLAGS includes $x_includes CPPFLAGS="$CPPFLAGS $X_CFLAGS" if test \! -z "$libdir" ; then LDFLAGS="$LDFLAGS -L$libdir" fi # note: $X_LIBS includes $x_libraries LDFLAGS="$LDFLAGS $X_LIBS $X_EXTRA_LIBS" CPPFLAGS=`eval eval eval eval eval eval eval eval eval echo $CPPFLAGS` LDFLAGS=`eval eval eval eval eval eval eval eval eval echo $LDFLAGS` AC_CHECK_LIB([$1], [$2], [$3], [$4], [$5]) CPPFLAGS="$ac_save_CPPFLAGS" LDFLAGS="$ac_save_LDFLAGS" # LIBS="$ac_save_LIBS" ]) # Like AC_TRY_RUN, but it uses the already-computed -I directories. # (But not the -L directories!) # AC_DEFUN([AC_TRY_X_RUN], [ ac_save_CPPFLAGS="$CPPFLAGS" if test \! -z "$includedir" ; then CPPFLAGS="$CPPFLAGS -I$includedir" fi CPPFLAGS="$CPPFLAGS $X_CFLAGS" CPPFLAGS=`eval eval eval eval eval eval eval eval eval echo $CPPFLAGS` AC_TRY_RUN([$1], [$2], [$3], [$4]) CPPFLAGS="$ac_save_CPPFLAGS"]) # Usage: HANDLE_X_PATH_ARG([variable_name], # [--command-line-option], # [descriptive string]) # # All of the --with options take three forms: # # --with-foo (or --with-foo=yes) # --without-foo (or --with-foo=no) # --with-foo=/DIR # # This function, HANDLE_X_PATH_ARG, deals with the /DIR case. When it sees # a directory (string beginning with a slash) it checks to see whether # /DIR/include and /DIR/lib exist, and adds them to $X_CFLAGS and $X_LIBS # as appropriate. # AC_DEFUN([HANDLE_X_PATH_ARG], [ case "$[$1]" in yes) ;; no) ;; /*) AC_MSG_CHECKING([for [$3] headers]) d=$[$1]/include if test -d $d; then X_CFLAGS="-I$d $X_CFLAGS" AC_MSG_RESULT($d) else AC_MSG_RESULT(not found ($d: no such directory)) fi AC_MSG_CHECKING([for [$3] libs]) d=$[$1]/lib if test -d $d; then X_LIBS="-L$d $X_LIBS" AC_MSG_RESULT($d) else AC_MSG_RESULT(not found ($d: no such directory)) fi # replace the directory string with "yes". [$1]_req="yes" [$1]=$[$1]_req ;; *) echo "" echo "error: argument to [$2] must be \"yes\", \"no\", or a directory." echo " If it is a directory, then \`DIR/include' will be added to" echo " the -I list, and \`DIR/lib' will be added to the -L list." exit 1 ;; esac ]) ############################################################################### ############################################################################### # # End of function definitions. Now start actually executing stuff. # ############################################################################### ############################################################################### # WTF! autoconf emits this *way* too late. Do it earlier. test "x$prefix" = xNONE && prefix=$ac_default_prefix test "x$exec_prefix" = xNONE && exec_prefix='${prefix}' # random compiler setup AC_CANONICAL_HOST ac_original_cc=$CC AC_PROG_CC AC_PROG_CC_PTHREAD # Needs ac_original_cc. AC_PROG_CC_ANSI AC_NO_LONG_STRING_WARNINGS AC_NO_MISPLACED_DECLARATIONS AC_NO_OBJECTIVE_C AC_NO_CPLUSPLUS_COMMENTS_IN_C_CODE AC_PROG_CPP AC_C_CONST AC_C_INLINE AC_EXEEXT AC_DEMAND_BC # stuff for Makefiles AC_PROG_INSTALL AC_PROG_INSTALL_DIRS AC_PROG_MAKE_SET # By default, autoconf sets INSTALL_SCRIPT to '${INSTALL_PROGRAM}'. # That's wrong: it should be set to '${INSTALL}', so that one can # implement the "install-strip" target properly (strip executables, # but do not try to strip scripts.) # INSTALL_SCRIPT='${INSTALL}' # random libc stuff AC_HEADER_STDC AC_CHECK_HEADERS(unistd.h inttypes.h) AC_TYPE_MODE_T AC_TYPE_PID_T AC_TYPE_SIZE_T AC_TYPE_SIGNAL AC_HEADER_TIME AC_HEADER_SYS_WAIT AC_HEADER_DIRENT AC_GETTIMEOFDAY_ARGS AC_SYS_LARGEFILE AC_CHECK_FUNCS(select fcntl uname nice setpriority getcwd getwd putenv sbrk) AC_CHECK_FUNCS(sigaction syslog realpath setrlimit) AC_CHECK_FUNCS(setlocale) AC_CHECK_FUNCS(getaddrinfo) AC_CHECK_MEMBERS([struct sockaddr.sa_len],,, [[#include ]]) AC_CHECK_ICMP AC_CHECK_ICMPHDR AC_CHECK_GETIFADDRS AC_TYPE_SOCKLEN_T AC_CHECK_HEADERS(crypt.h sys/select.h) AC_PROG_PERL if test -z "$PERL" ; then # don't let it be blank... PERL=/usr/bin/perl fi AC_PATH_XTRA if test "$have_x" != yes; then AC_MSG_ERROR(Couldn't find X11 headers/libs. Try `$0 --help'.) fi AC_PATH_X_APP_DEFAULTS AC_X_RANDOM_PATHS AC_XPOINTER AC_MSG_CHECKING(whether this is MacOS X) ac_macosx=no case "$host" in *-apple-darwin* ) ac_macosx=yes ;; esac AC_MSG_RESULT($ac_macosx) ############################################################################### # # Gettext support # ############################################################################### IT_PROG_INTLTOOL GETTEXT_PACKAGE=xscreensaver AC_DEFINE_UNQUOTED(GETTEXT_PACKAGE, "$GETTEXT_PACKAGE", [This is the name of the gettext package to use.]) AC_DEFINE_UNQUOTED(PACKAGE, "$GETTEXT_PACKAGE", [This is the same as GETTEXT_PACKAGE, but for the glade generated code.]) AC_SUBST(GETTEXT_PACKAGE) ALL_LINGUAS="ca da de es et fi fr hu it ja ko nb nl pl pt pt_BR ru sk sv vi wa zh_CN zh_TW" AM_GLIB_GNU_GETTEXT MKINSTALLDIRS="$INSTALL_DIRS" ############################################################################### # # Check for -lXmu (some fucked up vendors don't ship it...) # ############################################################################### have_xmu=no AC_CHECK_X_HEADER(X11/Xmu/Error.h, [have_xmu=yes],, [#include #include #include ]) if test "$have_xmu" = no ; then XMU_SRCS='$(UTILS_SRC)/xmu.c' XMU_OBJS='$(UTILS_BIN)/xmu.o' XMU_LIBS='' else XMU_SRCS='' XMU_OBJS='' XMU_LIBS='-lXmu' AC_DEFINE(HAVE_XMU) fi ############################################################################### # # Check for the SunOS 4.1.x _get_wmShellWidgetClass bug. # See comp.windows.x FAQ question 124. The right fix is to # get OpenWindows 3.0 patches 100512-02 and 100573-03. # ############################################################################### if test "$have_xmu" = yes ; then case "$host" in *-sunos4*) AC_CACHE_CHECK([for the SunOS 4.1.x _get_wmShellWidgetClass bug], ac_cv_sunos_xmu_bug, [ac_save_LDFLAGS="$LDFLAGS" if test \! -z "$x_libraries" ; then LDFLAGS="$LDFLAGS -L$x_libraries" fi # Note: this trick never works! (Generally.) # We're only getting away with using AC_TRY_LINK # with X libraries because we know it's SunOS. LDFLAGS="$LDFLAGS -lXmu -lXt -lX11 -lXext -lm" AC_TRY_LINK(,, [ac_cv_sunos_xmu_bug=no], [ac_cv_sunos_xmu_bug=yes]) LDFLAGS="$ac_save_LDFLAGS"]) if test "$ac_cv_sunos_xmu_bug" = yes ; then AC_CACHE_CHECK([whether the compiler understands -static], ac_cv_ld_static, [ac_save_LDFLAGS="$LDFLAGS" LDFLAGS="$LDFLAGS -static" AC_TRY_LINK(,,[ac_cv_ld_static=yes],[ac_cv_ld_static=no]) LDFLAGS="$ac_save_LDFLAGS"]) if test "$ac_cv_ld_static" = yes ; then LDFLAGS="$LDFLAGS -static" else LDFLAGS="$LDFLAGS -Bstatic" fi fi ;; esac fi ############################################################################### # # Handle the --with-hackdir option # ############################################################################### have_hackdir=yes with_hackdir_req=unspecified AC_ARG_WITH(hackdir,[ Installation options: --with-hackdir=DIR Where to install the hundreds of demo executables. Default: `PREFIX/libexec/xscreensaver/'], [with_hackdir="$withval"; with_hackdir_req="$withval"],[with_hackdir=yes]) if test x"$with_hackdir" = xyes; then HACKDIR='${libexecdir}/xscreensaver' elif test x"$with_hackdir" = xno; then HACKDIR='${bindir}' else HACKDIR=$with_hackdir fi # canonicalize slashes. HACKDIR=`echo "${HACKDIR}" | sed 's@/$@@;s@//*@/@g'` # Expand HACKDIR as HACKDIR_FULL HACKDIR_FULL=`eval eval eval eval eval eval eval eval eval echo $HACKDIR` # This option used to be called --enable-subdir; make sure that is no longer # used, since configure brain-damagedly ignores unknown --enable options. obsolete_enable= AC_ARG_ENABLE(subdir,,[obsolete_enable=yes]) if test -n "$obsolete_enable"; then echo "error: the --enable-subdir option has been replaced with" echo " the new --with-hackdir option; see \`configure --help'" echo " for more information." exit 1 fi ############################################################################### # # Handle the --with-configdir option # Help for --with-x-app-defaults option added. # ############################################################################### have_configdir=yes with_configdir_req=unspecified AC_ARG_WITH(configdir, [ --with-configdir=DIR Where to install the data files that describe each of the display modes to the GUI. Default: `PREFIX/share/xscreensaver/config/' --with-x-app-defaults=DIR Where to install xscreensaver configuration file. ], [with_configdir="$withval"; with_configdir_req="$withval"], [with_configdir=yes]) if test x"$with_configdir" = xyes; then HACK_CONF_DIR='${datadir}/xscreensaver/config' elif test x"$with_configdir" = xno; then echo "error: must be yes, or a pathname: --with-configdir=$with_configdir" exit 1 else # there must be a better way than this... if test -z "`echo $with_configdir | sed 's@^/.*@@'`" ; then # absolute path HACK_CONF_DIR=$with_configdir else # relative path HACK_CONF_DIR="\${exec_prefix}$with_configdir" fi fi ############################################################################### # # Check for the SGI SCREEN_SAVER server extension. # ############################################################################### #have_sgi=no #with_sgi_req=unspecified #AC_ARG_WITH(sgi-ext, #[Except where noted, all of the --with options below can also take a #directory argument: for example, `--with-motif=/opt/Motif'. That would #cause /opt/Motif/include/ to be added to the -I list, and /opt/Motif/lib/ #to be added to the -L list, assuming those directories exist. # #By default, support for each of these options will be built in, if the #relevant library routines exist. At run time, they will then be used #only if the X server being used supports them. Each --with option has #a corresponding --without option, to override building support for them #at all. # #Screen blanking and idle-detection options: # # --with-sgi-ext Include support for the SGI SCREEN_SAVER extension.], # [with_sgi="$withval"; with_sgi_req="$withval"],[with_sgi=yes]) # #HANDLE_X_PATH_ARG(with_sgi, --with-sgi-ext, SGI SCREEN_SAVER) # #if test "$with_sgi" = yes; then # AC_CHECK_X_HEADER(X11/extensions/XScreenSaver.h, # [have_sgi=yes # AC_DEFINE(HAVE_SGI_SAVER_EXTENSION)],, # [#include ]) # #elif test "$with_sgi" != no; then # echo "error: must be yes or no: --with-sgi-ext=$with_sgi" # exit 1 #fi ############################################################################### # # Check for the XIDLE server extension. # ############################################################################### #have_xidle=no #with_xidle_req=unspecified #AC_ARG_WITH(xidle-ext, #[ --with-xidle-ext Include support for the XIDLE extension.], # [with_xidle="$withval"; with_xidle_req="$withval"],[with_xidle=yes]) # #HANDLE_X_PATH_ARG(with_xidle, --with-xidle-ext, XIDLE) # #if test "$with_xidle" = yes; then # AC_CHECK_X_HEADER(X11/extensions/xidle.h, # [have_xidle=yes # AC_DEFINE(HAVE_XIDLE_EXTENSION)],, # [#include ]) #elif test "$with_xidle" != no; then # echo "error: must be yes or no: --with-xidle-ext=$with_xidle" # exit 1 #fi ############################################################################### # # Check for the SGI-VIDEO-CONTROL server extension. # ############################################################################### #have_sgivc=no #with_sgivc_req=unspecified #AC_ARG_WITH(sgivc-ext, #[ --with-sgivc-ext Include support for the SGI-VIDEO-CONTROL extension.], # [with_sgivc="$withval"; with_sgivc_req="$withval"],[with_sgivc=yes]) # #HANDLE_X_PATH_ARG(with_sgivc, --with-sgivc-ext, SGI-VIDEO-CONTROL) # #if test "$with_sgivc" = yes; then # # # first check for XSGIvc.h # AC_CHECK_X_HEADER(X11/extensions/XSGIvc.h, [have_sgivc=yes],, # [#include ]) # # # if that succeeded, then check for the -lXsgivc # if test "$have_sgivc" = yes; then # have_sgivc=no # AC_CHECK_X_LIB(Xsgivc, XSGIvcQueryGammaMap, # [have_sgivc=yes; SAVER_LIBS="$SAVER_LIBS -lXsgivc"], [true], # -lXext -lX11) # fi # # # if that succeeded, then we've really got it. # if test "$have_sgivc" = yes; then # AC_DEFINE(HAVE_SGI_VC_EXTENSION) # fi # #elif test "$with_sgivc" != no; then # echo "error: must be yes or no: --with-sgivc-ext=$with_sgivc" # exit 1 #fi ############################################################################### # # Check for the DPMS server extension. # ############################################################################### have_dpms=no with_dpms_req=unspecified AC_ARG_WITH(dpms-ext, [ --with-dpms-ext Include support for the DPMS extension.], [with_dpms="$withval"; with_dpms_req="$withval"],[with_dpms=yes]) HANDLE_X_PATH_ARG(with_dpms, --with-dpms-ext, DPMS) if test "$with_dpms" = yes; then # first check for dpms.h AC_CHECK_X_HEADER(X11/extensions/dpms.h, [have_dpms=yes],, [#include #include ]) # if that succeeded, then check for the DPMS code in the libraries if test "$have_dpms" = yes; then # first look in -lXext (this is where it is with XFree86 4.0) have_dpms=no AC_CHECK_X_LIB(Xext, DPMSInfo, [have_dpms=yes], [true], -lXext -lX11) # if that failed, look in -lXdpms (this is where it was in XFree86 3.x) if test "$have_dpms" = no; then AC_CHECK_X_LIB(Xdpms, DPMSInfo, [have_dpms=yes; XDPMS_LIBS="-lXdpms"], [true], -lXext -lX11) fi fi # if that succeeded, then we've really got it. if test "$have_dpms" = yes; then AC_DEFINE(HAVE_DPMS_EXTENSION) fi elif test "$with_dpms" != no; then echo "error: must be yes or no: --with-dpms-ext=$with_dpms" exit 1 fi ############################################################################### # # Check for the XINERAMA server extension. # ############################################################################### have_xinerama=no with_xinerama_req=unspecified AC_ARG_WITH(xinerama-ext, [ --with-xinerama-ext Include support for the XINERAMA extension.], [with_xinerama="$withval"; with_xinerama_req="$withval"],[with_xinerama=yes]) HANDLE_X_PATH_ARG(with_xinerama, --with-xinerama-ext, XINERAMA) if test "$with_xinerama" = yes; then # first check for Xinerama.h AC_CHECK_X_HEADER(X11/extensions/Xinerama.h, [have_xinerama=yes],, [#include ]) # if that succeeded, then check for the XINERAMA code in the libraries if test "$have_xinerama" = yes; then # first look in -lXext have_xinerama=no AC_CHECK_X_LIB(Xext, XineramaQueryScreens, [have_xinerama=yes], [true], -lXext -lX11) # if that failed, look in -lXinerama (this is where it is in XFree86 4.1.) if test "$have_xinerama" = no; then AC_CHECK_X_LIB(Xinerama, XineramaQueryScreens, [have_xinerama=yes; XINERAMA_LIBS="-lXinerama"], [true], -lXext -lX11) fi fi # if that succeeded, then we've really got it. if test "$have_xinerama" = yes; then AC_DEFINE(HAVE_XINERAMA) fi elif test "$with_xinerama" != no; then echo "error: must be yes or no: --with-xinerama-ext=$with_xinerama" exit 1 fi ############################################################################### # # Check for the XINPUT server extension. # ############################################################################### have_xinput=no with_xinput_req=unspecified AC_ARG_WITH(xinput-ext, [ --with-xinput-ext Include support for the XInput extension.], [with_xinput="$withval"; with_xinput_req="$withval"], [with_xinput=yes]) HANDLE_X_PATH_ARG(with_xinput, --with-xinput-ext, XINPUT) if test "$with_xinput" = yes; then # first check for Xinput.h AC_CHECK_X_HEADER(X11/extensions/XInput.h, [have_xinput=yes],, [#include ]) # if that succeeded, then check for libXi if test "$have_xinput" = yes; then have_xinput=no AC_CHECK_X_LIB(Xi, XListInputDevices, [have_xinput=yes; SAVER_LIBS="$SAVER_LIBS -lXi"], [true], -lXext -lX11) fi # if that succeeded, then we've really got it. if test "$have_xinput" = yes; then AC_DEFINE(HAVE_XINPUT) fi elif test "$with_xinput" != no; then echo "error: must be yes or no: --with-xinput-ext=$with_xinput" exit 1 fi ############################################################################### # # Check for the XF86VMODE server extension (for virtual screens.) # ############################################################################### have_xf86vmode=no with_xf86vmode_req=unspecified AC_ARG_WITH(xf86vmode-ext, [ --with-xf86vmode-ext Include support for XFree86 virtual screens.], [with_xf86vmode="$withval"; with_xf86vmode_req="$withval"], [with_xf86vmode=yes]) HANDLE_X_PATH_ARG(with_xf86vmode, --with-xf86vmode-ext, xf86vmode) VIDMODE_LIBS="" if test "$with_xf86vmode" = yes; then # first check for xf86vmode.h AC_CHECK_X_HEADER(X11/extensions/xf86vmode.h, [have_xf86vmode=yes],, [#include ]) # if that succeeded, then check for the -lXxf86vm if test "$have_xf86vmode" = yes; then have_xf86vmode=no AC_CHECK_X_LIB(Xxf86vm, XF86VidModeGetViewPort, [have_xf86vmode=yes; VIDMODE_LIBS="-lXxf86vm"; SAVER_LIBS="$SAVER_LIBS $VIDMODE_LIBS"], [true], -lXext -lX11) fi # if that succeeded, then we've really got it. if test "$have_xf86vmode" = yes; then AC_DEFINE(HAVE_XF86VMODE) fi elif test "$with_xf86vmode" != no; then echo "error: must be yes or no: --with-xf86vmode-ext=$with_xf86vmode" exit 1 fi ############################################################################### # # Check for the XF86VMODE server extension (for gamma fading.) # ############################################################################### have_xf86gamma=no have_xf86gamma_ramp=no with_xf86gamma_req=unspecified AC_ARG_WITH(xf86gamma-ext, [ --with-xf86gamma-ext Include support for XFree86 gamma fading.], [with_xf86gamma="$withval"; with_xf86gamma_req="$withval"], [with_xf86gamma=yes]) HANDLE_X_PATH_ARG(with_xf86gamma, --with-xf86gamma-ext, xf86gamma) if test "$with_xf86gamma" = yes; then # first check for xf86vmode.h, if we haven't already if test "$have_xf86vmode" = yes; then have_xf86gamma=yes else AC_CHECK_X_HEADER(X11/extensions/xf86vmode.h, [have_xf86gamma=yes],, [#include ]) fi # if that succeeded, then check for the -lXxf86vm if test "$have_xf86gamma" = yes; then have_xf86gamma=no AC_CHECK_X_LIB(Xxf86vm, XF86VidModeSetGamma, [have_xf86gamma=yes], [true], -lXext -lX11) fi # check for the Ramp versions of the functions too. if test "$have_xf86gamma" = yes; then have_xf86gamma_ramp=no AC_CHECK_X_LIB(Xxf86vm, XF86VidModeSetGammaRamp, [have_xf86gamma_ramp=yes], [true], -lXext -lX11) fi # if those tests succeeded, then we've really got the functions. if test "$have_xf86gamma" = yes; then AC_DEFINE(HAVE_XF86VMODE_GAMMA) fi if test "$have_xf86gamma_ramp" = yes; then AC_DEFINE(HAVE_XF86VMODE_GAMMA_RAMP) fi # pull in the lib, if we haven't already if test "$have_xf86gamma" = yes -a "$have_xf86vmode" = no; then SAVER_LIBS="$SAVER_LIBS -lXxf86vm" fi elif test "$with_xf86gamma" != no; then echo "error: must be yes or no: --with-xf86gamma-ext=$with_xf86vmode" exit 1 fi ############################################################################### # # Check for the RANDR (Resize and Rotate) server extension. # # We need this to detect when the resolution of the desktop # has changed out from under us (this is a newer, different # mechanism than the XF86VMODE virtual viewports.) # ############################################################################### have_randr=no with_randr_req=unspecified AC_ARG_WITH(randr-ext, [ --with-randr-ext Include support for the X Resize+Rotate extension.], [with_randr="$withval"; with_randr_req="$withval"],[with_randr=yes]) HANDLE_X_PATH_ARG(with_randr, --with-randr-ext, RANDR) if test "$with_randr" = yes; then # first check for Xrandr.h AC_CHECK_X_HEADER(X11/extensions/Xrandr.h, [have_randr=yes],, [#include ]) # if that succeeded, then check for the XRR code in the libraries if test "$have_randr" = yes; then # RANDR probably needs -lXrender xrender_libs= AC_CHECK_X_LIB(Xrender, XRenderSetSubpixelOrder, [xrender_libs="-lXrender"], [true], -lXext -lX11) # first look for RANDR in -lXext have_randr=no AC_CHECK_X_LIB(Xext, XRRGetScreenInfo, [have_randr=yes; SAVER_LIBS="$SAVER_LIBS $xrender_libs"], [true], $xrender_libs -lXext -lX11) # if that failed, look in -lXrandr if test "$have_randr" = no; then AC_CHECK_X_LIB(Xrandr, XRRGetScreenInfo, [have_randr=yes; SAVER_LIBS="$SAVER_LIBS -lXrandr $xrender_libs"], [true], $xrender_libs -lXext -lX11) fi fi # if that succeeded, then we've really got it. if test "$have_randr" = yes; then AC_DEFINE(HAVE_RANDR) # Now check for version 1.2 in the same libs. # Try to compile, since on MacOS 10.5.7, headers are older than libs! AC_CACHE_CHECK([for XRRGetScreenResources], ac_cv_randr_12, [ac_cv_randr_12=no AC_TRY_X_COMPILE([#include #include #include ], [XRRScreenResources *res = XRRGetScreenResources (0, 0);], [ac_cv_randr_12=yes], [ac_cv_randr_12=no])]) if test "$ac_cv_randr_12" = yes ; then AC_DEFINE(HAVE_RANDR_12) fi # AC_CHECK_X_LIB(c, XRRGetOutputInfo, [AC_DEFINE(HAVE_RANDR_12)], # [true], $SAVER_LIBS) fi elif test "$with_randr" != no; then echo "error: must be yes or no: --with-randr-ext=$with_randr" exit 1 fi ############################################################################### # # Check for XF86MiscSetGrabKeysState (but only bother if we are already # using other XF86 stuff.) # ############################################################################### have_xf86miscsetgrabkeysstate=no if test "$have_xf86gamma" = yes -o "$have_xf86vmode" = yes; then AC_CHECK_X_LIB(Xxf86misc, XF86MiscSetGrabKeysState, [have_xf86miscsetgrabkeysstate=yes], [true], -lXext -lX11) if test "$have_xf86miscsetgrabkeysstate" = yes ; then SAVER_LIBS="$SAVER_LIBS -lXxf86misc" AC_DEFINE(HAVE_XF86MISCSETGRABKEYSSTATE) fi fi ############################################################################### # # Check for HP XHPDisableReset and XHPEnableReset. # ############################################################################### AC_MSG_CHECKING([for XHPDisableReset in X11/XHPlib.h]) AC_EGREP_X_HEADER(XHPDisableReset, X11/XHPlib.h, [AC_DEFINE(HAVE_XHPDISABLERESET) SAVER_LIBS="-lXhp11 $SAVER_LIBS" AC_MSG_RESULT(yes)], [AC_MSG_RESULT(no)]) ############################################################################### # # Check for /proc/interrupts. # ############################################################################### have_proc_interrupts=no with_proc_interrupts_req=unspecified AC_ARG_WITH(proc-interrupts, [ --with-proc-interrupts Include support for consulting the /proc/interrupts file to notice keyboard activity.], [with_proc_interrupts="$withval"; with_proc_interrupts_req="$withval"], [with_proc_interrupts=yes]) if test "$with_proc_interrupts" = yes; then # Note that we may be building in an environment (e.g. Debian buildd chroot) # without a proper /proc filesystem. If /proc/interrupts exists, then we'll # check that it has the bits we need, but otherwise we'll just go on faith. # have_proc_interrupts=yes if test -f /proc/interrupts; then AC_CACHE_CHECK([whether /proc/interrupts contains keyboard data], ac_cv_have_proc_interrupts, [ac_cv_have_proc_interrupts=no if grep 'keyboard\|i8042' /proc/interrupts >/dev/null 2>&1 ; then ac_cv_have_proc_interrupts=yes fi ]) have_proc_interrupts=$ac_cv_have_proc_interrupts fi if test "$have_proc_interrupts" = yes; then AC_DEFINE(HAVE_PROC_INTERRUPTS) fi elif test "$with_proc_interrupts" != no; then echo "error: must be yes or no: --with-proc-interrupts=$with_proc_interrupts" exit 1 fi ############################################################################### # # The --enable-locking option # ############################################################################### AC_ARG_ENABLE(locking,[Screen locking options: --enable-locking Compile in support for locking the display. --disable-locking Do not allow locking at all.], [enable_locking="$enableval"], [if test "$ac_macosx" = yes; then # We can't lock on MacOS X, so default to not compiling in support for it. # But allow --enable-locking to override that, so I can debug Linux locking # under MacOS X11. enable_locking=no else enable_locking=yes fi]) if test "$enable_locking" = yes; then true elif test "$enable_locking" = no; then AC_DEFINE(NO_LOCKING) else echo "error: must be yes or no: --enable-locking=$enable_locking" exit 1 fi ############################################################################### # # Whether to allow root password to unblank. # ############################################################################### AC_ARG_ENABLE(root-passwd, [ --enable-root-passwd Allow root passwd to unlock screen. --disable-root-passwd Do not allow that.], [enable_root_passwd="$enableval"],[enable_root_passwd=yes]) if test "$enable_root_passwd" = yes; then AC_DEFINE(ALLOW_ROOT_PASSWD) true elif test "$enable_root_passwd" != no; then echo "error: must be yes or no: --enable-root-passwd=$enable_root_passwd" exit 1 fi ############################################################################### # # Check for PAM. # ############################################################################### case "$host" in *-solaris*) # Solaris systems tend to come with PAM misconfigured. # Don't build it by default, even if the headers exist. with_pam_default=no ;; *) # Default to building PAM support on all other systems, if it exists. with_pam_default=yes ;; esac have_pam=no with_pam_req=unspecified AC_ARG_WITH(pam, [ --with-pam Include support for PAM (Pluggable Auth Modules.)], [with_pam="$withval"; with_pam_req="$withval"],[with_pam=$with_pam_default]) AC_ARG_WITH([pam_service_name], AC_HELP_STRING([--with-pam-service-name], [NAME arg is the name of the PAM service that xscreensaver will authenticate as.]), [pam_service_name="$withval"],[pam_service_name="xscreensaver"]) AC_ARG_ENABLE(pam-check-account-type, [AC_HELP_STRING([--enable-pam-check-account-type], [Whether PAM should check the result of account modules when authenticating. Only do this if you have account configured properly on your system.])], [enable_pam_check_account_type="$enableval"],[enable_pam_check_account_type=no]) if test "$enable_pam_check_account_type" = yes ; then AC_DEFINE(PAM_CHECK_ACCOUNT_TYPE) true elif test "$enable_pam_check_account_type" != no ; then echo "error: must be yes or no: --enable-pam-check-account-type=$enable_pam_check_account_type" exit 1 fi HANDLE_X_PATH_ARG(with_pam, --with-pam, PAM) if test "$enable_locking" = yes -a "$with_pam" = yes; then AC_CACHE_CHECK([for PAM], ac_cv_pam, [AC_TRY_X_COMPILE([#include ],, [ac_cv_pam=yes], [ac_cv_pam=no])]) if test "$ac_cv_pam" = yes ; then have_pam=yes AC_DEFINE(HAVE_PAM) AC_DEFINE_UNQUOTED(PAM_SERVICE_NAME,"$pam_service_name") PASSWD_LIBS="${PASSWD_LIBS} -lpam" # libpam typically requires dlopen and dlsym. On FreeBSD, # those are in libc. On Linux and Solaris, they're in libdl. AC_CHECK_LIB(dl, dlopen, [PASSWD_LIBS="${PASSWD_LIBS} -ldl"]) # On Linux, sigtimedwait() is in libc; on Solaris, it's in librt. have_timedwait=no AC_CHECK_LIB(c, sigtimedwait, [have_timedwait=yes AC_DEFINE(HAVE_SIGTIMEDWAIT)]) if test "$have_timedwait" = no ; then AC_CHECK_LIB(rt, sigtimedwait, [have_timedwait=yes AC_DEFINE(HAVE_SIGTIMEDWAIT) PASSWD_LIBS="${PASSWD_LIBS} -lrt"]) fi AC_MSG_CHECKING(how to call pam_strerror) AC_CACHE_VAL(ac_cv_pam_strerror_args, [AC_TRY_X_COMPILE([#include #include #include ], [pam_handle_t *pamh = 0; char *s = pam_strerror(pamh, PAM_SUCCESS);], [ac_pam_strerror_args=2], [AC_TRY_X_COMPILE([#include #include #include ], [char *s = pam_strerror(PAM_SUCCESS);], [ac_pam_strerror_args=1], [ac_pam_strerror_args=0])]) ac_cv_pam_strerror_args=$ac_pam_strerror_args]) ac_pam_strerror_args=$ac_cv_pam_strerror_args if test "$ac_pam_strerror_args" = 1 ; then AC_MSG_RESULT(one argument) elif test "$ac_pam_strerror_args" = 2 ; then AC_DEFINE(PAM_STRERROR_TWO_ARGS) AC_MSG_RESULT(two arguments) else AC_MSG_RESULT(unknown) fi # Check pam_fail_delay AC_MSG_CHECKING(pam_fail_delay in -lpam) AC_CACHE_VAL(ac_cv_pam_fail_delay, [ac_save_LDFLAGS="$LDFLAGS" LDFLAGS="-lpam" AC_TRY_LINK([#include ], [pam_handle_t *pamh = 0; unsigned int usec = 1; int status = pam_fail_delay (pamh, usec);], [ac_pam_fail_delay=yes], [ac_pam_fail_delay=no]) ac_cv_pam_fail_delay=$ac_pam_fail_delay, LDFLAGS=$ac_save_LDFLAGS]) if test "$ac_pam_fail_delay" = yes ; then AC_MSG_RESULT(yes) AC_DEFINE(HAVE_PAM_FAIL_DELAY) else AC_MSG_RESULT(no) fi fi fi ############################################################################### # # Check for Kerberos. # ############################################################################### have_kerberos=no have_kerberos5=no with_kerberos_req=unspecified AC_ARG_WITH(kerberos, [ --with-kerberos Include support for Kerberos authentication.], [with_kerberos="$withval"; with_kerberos_req="$withval"],[with_kerberos=yes]) HANDLE_X_PATH_ARG(with_kerberos, --with-kerberos, Kerberos) if test "$enable_locking" = yes -a "$with_kerberos" = yes; then AC_CACHE_CHECK([for Kerberos 4], ac_cv_kerberos, [AC_TRY_X_COMPILE([#include ],, [ac_cv_kerberos=yes], [ac_cv_kerberos=no])]) AC_CACHE_CHECK([for Kerberos 5], ac_cv_kerberos5, [AC_TRY_X_COMPILE([#include ],, [ac_cv_kerberos5=yes], [ac_cv_kerberos5=no])]) if test "$ac_cv_kerberos" = yes ; then have_kerberos=yes AC_DEFINE(HAVE_KERBEROS) fi if test "$ac_cv_kerberos5" = yes ; then # Andrew Snare wrote: # # You were assuming that if kerberosV (krb5) was found, then kerberosIV # (krb4) was also available. This turns out not to be the case with # mit-krb-1.2.7; apparently backwards-compatibility with KerberosIV # is optional. # # So, disable kerberosV support if libkrb4 can't be found. # This is not the best solution, but it makes the compile not fail. # AC_CHECK_X_LIB(krb4, krb_get_tf_realm, [have_kerberos=yes], [have_kerberos=no]) if test "$have_kerberos" = yes ; then have_kerberos5=yes AC_DEFINE(HAVE_KERBEROS) AC_DEFINE(HAVE_KERBEROS5) else have_kerberos5=no AC_MSG_WARN([Cannot find compat lib (libkrb4) needed to use Kerberos 5]) fi fi if test "$have_kerberos5" = yes ; then # from Matt Knopp # (who got it from amu@mit.edu) PASSWD_LIBS="$PASSWD_LIBS -lkrb4 -ldes425 -lkrb5 -lk5crypto -lcom_err" # jwz: MacOS X uses -lkrb5, but not -lcrypt AC_CHECK_X_LIB(crypt, crypt, [PASSWD_LIBS="$PASSWD_LIBS -lcrypt"]) elif test "$have_kerberos" = yes ; then # from Tim Showalter for FreeBSD 4.2 PASSWD_LIBS="$PASSWD_LIBS -lkrb -ldes -lcom_err" fi if test "$have_kerberos" = yes ; then AC_CHECK_FUNC(res_search,, AC_CHECK_LIB(resolv,res_search,PASSWD_LIBS="${PASSWD_LIBS} -lresolv", AC_MSG_WARN([Can't find DNS resolver libraries needed for Kerberos]) )) fi fi ############################################################################### # # Check for the nine billion variants of shadow passwords... # ############################################################################### need_setuid=no have_shadow=no with_shadow_req=unspecified AC_ARG_WITH(shadow, [ --with-shadow Include support for shadow password authentication.], [with_shadow="$withval"; with_shadow_req="$withval"],[with_shadow=yes]) HANDLE_X_PATH_ARG(with_shadow, --with-shadow, shadow password) if test "$enable_locking" = no ; then with_shadow_req=no with_shadow=no fi ############################################################################### # # Check for Sun "adjunct" passwords. # ############################################################################### if test "$with_shadow" = yes ; then AC_CACHE_CHECK([for Sun-style shadow passwords], ac_cv_sun_adjunct, [AC_TRY_X_COMPILE([#include #include #include #include #include #include ], [struct passwd_adjunct *p = getpwanam("nobody"); const char *pw = p->pwa_passwd;], [ac_cv_sun_adjunct=yes], [ac_cv_sun_adjunct=no])]) if test "$ac_cv_sun_adjunct" = yes; then have_shadow_adjunct=yes have_shadow=yes need_setuid=yes fi fi ############################################################################### # # Check for DEC and SCO so-called "enhanced" security. # ############################################################################### if test "$with_shadow" = yes ; then AC_CACHE_CHECK([for DEC-style shadow passwords], ac_cv_enhanced_passwd, [AC_TRY_X_COMPILE([#include #include #include #include #include #include ], [struct pr_passwd *p; const char *pw; set_auth_parameters(0, 0); check_auth_parameters(); p = getprpwnam("nobody"); pw = p->ufld.fd_encrypt;], [ac_cv_enhanced_passwd=yes], [ac_cv_enhanced_passwd=no])]) if test $ac_cv_enhanced_passwd = yes; then have_shadow_enhanced=yes have_shadow=yes need_setuid=yes # On SCO, getprpwnam() is in -lprot (which uses nap() from -lx) # (I'm told it needs -lcurses too, but I don't understand why.) # But on DEC, it's in -lsecurity. # AC_CHECK_LIB(prot, getprpwnam, [PASSWD_LIBS="$PASSWD_LIBS -lprot -lcurses -lx"], [AC_CHECK_LIB(security, getprpwnam, [PASSWD_LIBS="$PASSWD_LIBS -lsecurity"])], [-lx]) fi fi ############################################################################### # # Check for HP's entry in the "Not Invented Here" Sweepstakes. # ############################################################################### if test "$with_shadow" = yes ; then AC_CACHE_CHECK([for HP-style shadow passwords], ac_cv_hpux_passwd, [AC_TRY_X_COMPILE([#include #include #include #include #include #include ], [struct s_passwd *p = getspwnam("nobody"); const char *pw = p->pw_passwd;], [ac_cv_hpux_passwd=yes], [ac_cv_hpux_passwd=no])]) if test "$ac_cv_hpux_passwd" = yes; then have_shadow_hpux=yes have_shadow=yes need_setuid=yes # on HPUX, bigcrypt is in -lsec AC_CHECK_LIB(sec, bigcrypt, [PASSWD_LIBS="$PASSWD_LIBS -lsec"]) fi fi ############################################################################### # # Check for FreeBSD-style shadow passwords. # # On FreeBSD, getpwnam() and friends work just like on non-shadow- # password systems -- except you only get stuff in the pw_passwd field # if the running program is setuid. So, guess that we've got this # lossage to contend with if /etc/master.passwd exists, and default to # a setuid installation. # ############################################################################### if test "$with_shadow" = yes ; then AC_CACHE_CHECK([for FreeBSD-style shadow passwords], ac_cv_master_passwd, [if test -f /etc/master.passwd ; then ac_cv_master_passwd=yes else ac_cv_master_passwd=no fi]) if test "$ac_cv_master_passwd" = yes; then need_setuid=yes fi fi ############################################################################### # # Check for traditional (ha!) shadow passwords. # ############################################################################### if test "$with_shadow" = yes ; then AC_CACHE_CHECK([for generic shadow passwords], ac_cv_shadow, [AC_TRY_X_COMPILE([#include #include #include #include #include ], [struct spwd *p = getspnam("nobody"); const char *pw = p->sp_pwdp;], [ac_cv_shadow=yes], [ac_cv_shadow=no])]) if test "$ac_cv_shadow" = yes; then have_shadow=yes need_setuid=yes # On some systems (UnixWare 2.1), getspnam() is in -lgen instead of -lc. have_getspnam=no AC_CHECK_LIB(c, getspnam, [have_getspnam=yes]) if test "$have_getspnam" = no ; then AC_CHECK_LIB(gen, getspnam, [have_getspnam=yes; PASSWD_LIBS="$PASSWD_LIBS -lgen"]) fi fi fi ############################################################################### # # Check for other libraries needed for non-shadow passwords. # ############################################################################### if test "$enable_locking" = yes ; then # On some systems (UnixWare 2.1), crypt() is in -lcrypt instead of -lc. have_crypt=no AC_CHECK_LIB(c, crypt, [have_crypt=yes]) if test "$have_crypt" = no ; then AC_CHECK_LIB(crypt, crypt, [have_crypt=yes; PASSWD_LIBS="$PASSWD_LIBS -lcrypt"]) fi fi # Most of the above shadow mechanisms will have set need_setuid to yes, # if they were found. But, on some systems, we need setuid even when # using plain old vanilla passwords. # if test "$enable_locking" = yes ; then case "$host" in *-hpux* | *-aix* | *-netbsd* | *-freebsd* | *-openbsd* ) need_setuid=yes ;; esac fi if test "$have_shadow_adjunct" = yes ; then AC_DEFINE(HAVE_ADJUNCT_PASSWD) elif test "$have_shadow_enhanced" = yes ; then AC_DEFINE(HAVE_ENHANCED_PASSWD) elif test "$have_shadow_hpux" = yes ; then AC_DEFINE(HAVE_HPUX_PASSWD) elif test "$have_shadow" = yes ; then AC_DEFINE(HAVE_SHADOW_PASSWD) fi ############################################################################### # # Check for external password helper # On SuSE, instead of having xscreensaver be a setuid program, they # fork an external program that takes the password on stdin, and # returns true if that password is a valid one. Then only that # smaller program needs to be setuid. # # (Note that this external program is not a GUI: the GUI is still # all in xscreensaver itself; the external program just does auth.) # ############################################################################### have_passwd_helper=no with_passwd_helper_req=unspecified AC_ARG_WITH(passwd-helper, [ --with-passwd-helper Include support for an external password verification helper program.], [with_passwd_helper="$withval"; with_passwd_helper_req="$withval"],[with_passwd_helper=no]) # no HANDLE_X_PATH_ARG for this one if test "$enable_locking" = no ; then with_passwd_helper_req=no with_passwd_helper=no fi case "$with_passwd_helper" in ""|no) : ;; /*) AC_DEFINE_UNQUOTED(PASSWD_HELPER_PROGRAM, "$with_passwd_helper") have_passwd_helper=yes;; *) echo "error: --with-passwd-helper needs full pathname of helper (not '$with_passwd_helper')." >&2 exit 1 esac ############################################################################### # # Check for a login manager for a "New Login" button on the lock dialog. # Usually this will be "/usr/bin/gdmflexiserver". # ############################################################################### with_login_manager_req=unspecified default_login_manager_1='gdmflexiserver -ls' default_login_manager_2='kdmctl reserve' default_login_manager_3='lxdm -c USER_SWITCH' default_login_manager_4='dm-tool switch-to-greeter' AC_ARG_WITH(login-manager, [ --with-login-manager Put a "New Login" button on the unlock dialog that runs a login manager like gdmflexiserver or kdmctl.], [with_login_manager="$withval"; with_login_manager_req="$withval"], [with_login_manager=yes]) # no HANDLE_X_PATH_ARG for this one if test "$enable_locking" = no ; then with_login_manager_req=no with_login_manager=no fi case "$with_login_manager_req" in no) with_login_manager="" ;; yes|unspecified) # Try various defaults, use the first one that exists. with_login_manager="" if test -z "$with_login_manager" ; then set dummy $default_login_manager_1 ; login_manager_tmp=$2 unset ac_cv_path_login_manager_tmp # don't cache AC_PATH_PROG(login_manager_tmp, $login_manager_tmp, []) if test ! -z "$login_manager_tmp" ; then with_login_manager="$default_login_manager_1" fi fi if test -z "$with_login_manager" ; then set dummy $default_login_manager_2 ; login_manager_tmp=$2 unset ac_cv_path_login_manager_tmp # don't cache AC_PATH_PROG(login_manager_tmp, $login_manager_tmp, []) if test ! -z "$login_manager_tmp" ; then with_login_manager="$default_login_manager_2" fi fi if test -z "$with_login_manager" ; then set dummy $default_login_manager_3 ; login_manager_tmp=$2 unset ac_cv_path_login_manager_tmp # don't cache AC_PATH_PROG(login_manager_tmp, $login_manager_tmp, []) if test ! -z "$login_manager_tmp" ; then with_login_manager="$default_login_manager_3" fi fi if test -z "$with_login_manager" ; then set dummy $default_login_manager_4 ; login_manager_tmp=$2 unset ac_cv_path_login_manager_tmp # don't cache AC_PATH_PROG(login_manager_tmp, $login_manager_tmp, []) if test ! -z "$login_manager_tmp" ; then with_login_manager="$default_login_manager_4" fi fi ;; /*) # absolute path specified on cmd line set dummy $with_login_manager_req ; login_manager_tmp=$2 AC_MSG_CHECKING([for $login_manager_tmp]) if test -x "$login_manager_tmp" ; then AC_MSG_RESULT(yes) else AC_MSG_RESULT(no) with_login_manager="" fi ;; *) # relative path specified on cmd line set dummy $with_login_manager_req ; login_manager_tmp=$2 unset ac_cv_path_login_manager_tmp # don't cache AC_PATH_PROG(login_manager_tmp, $login_manager_tmp, []) if test -z "$login_manager_tmp" ; then with_login_manager="" else with_login_manager="$login_manager_tmp" fi ;; esac ac_cv_login_manager_program="$with_login_manager" NEW_LOGIN_COMMAND_P='' NEW_LOGIN_COMMAND="$ac_cv_login_manager_program" AC_MSG_CHECKING(for login manager) if test -z "$NEW_LOGIN_COMMAND" ; then NEW_LOGIN_COMMAND="$default_login_manager_1" NEW_LOGIN_COMMAND_P='! ' AC_MSG_RESULT($NEW_LOGIN_COMMAND (disabled)) else AC_MSG_RESULT($NEW_LOGIN_COMMAND) fi ############################################################################### # # Check for -lgtk (and Gnome stuff) # ############################################################################### have_gtk=no with_gtk_req=unspecified AC_ARG_WITH(gtk,[ User interface options: --with-gtk Use the Gtk toolkit for the user interface.], [with_gtk="$withval"; with_gtk_req="$withval"],[with_gtk=yes]) # if --with-gtk=/directory/ was specified, remember that directory so that # we can also look for the `gtk-config' program in that directory. case "$with_gtk" in /*) gtk_dir="$with_gtk" ;; *) gtk_dir="" ;; esac HANDLE_X_PATH_ARG(with_gtk, --with-gtk, Gtk) if test "$with_gtk" != yes -a "$with_gtk" != no ; then echo "error: must be yes or no: --with-gtk=$with_gtk" exit 1 fi parse_gtk_version_string() { # M4 sucks!! changequote(X,Y) maj=`echo $ac_gtk_version_string | sed -n 's/\..*//p'` min=`echo $ac_gtk_version_string | sed -n 's/[^.]*\.\([^.]*\).*/\1/p'` changequote([,]) ac_gtk_version=`echo "$maj * 1000 + $min" | bc` if test -z "$ac_gtk_version"; then ac_gtk_version=unknown ac_gtk_version_string=unknown fi } # Find pkg-config... (need this for both gtk and gdk_pixbuf.) # if the user specified --with-gtk=/foo/ then look there. # gtk_path="$PATH" if test ! -z "$gtk_dir"; then # canonicalize slashes. foo=`echo "${gtk_dir}/bin" | sed 's@//*@/@g'` gtk_path="$foo:$gtk_path" fi AC_PATH_PROGS(pkg_config, pkg-config,, $gtk_path) if test -z "$pkg_config" ; then AC_MSG_WARN([pkg-config not found!]) pkg_config="false" fi # Utility function for running pkg-config-based tests... # pkgs='' pkg_check_version() { if test "$ok" = yes ; then req="$1" min="$2" AC_MSG_CHECKING(for $req) if $pkg_config --exists "$req" ; then vers=`$pkg_config --modversion "$req"` if $pkg_config --exists "$req >= $min" ; then AC_MSG_RESULT($vers) pkgs="$pkgs $req" return 1 else AC_MSG_RESULT($vers (wanted >= $min)) ok=no return 0 fi else AC_MSG_RESULT(no) ok=no return 0 fi fi } jurassic_gtk=no gtk_halfassed=no have_gtk_2_22_or_higher=no COMMENT_DEMO_GLADE2_GTK_2_22_HEAD="" COMMENT_DEMO_GLADE2_GTK_2_22_TAIL="" if test "$with_gtk" = yes; then have_gtk=no ok="yes" pkg_check_version gtk+-2.0 2.0.1 ; ac_gtk_version_string="$vers" pkg_check_version gmodule-2.0 2.0.0 pkg_check_version libxml-2.0 2.4.6 pkg_check_version libglade-2.0 1.99.0 pkg_check_version gdk-pixbuf-2.0 2.0.0 pkg_check_version gdk-pixbuf-xlib-2.0 2.0.0 have_gtk="$ok" if test "$have_gtk" = no; then if test -n "$ac_gtk_version_string" ; then gtk_halfassed="$ac_gtk_version_string" gtk_halfassed_lib="$req" fi fi if test "$have_gtk" = yes; then parse_gtk_version_string jurassic_gtk=no fi if test "$have_gtk" = yes; then AC_CACHE_CHECK([for Gtk includes], ac_cv_gtk_config_cflags, [ac_cv_gtk_config_cflags=`$pkg_config --cflags $pkgs`]) AC_CACHE_CHECK([for Gtk libs], ac_cv_gtk_config_libs, [ac_cv_gtk_config_libs=`$pkg_config --libs $pkgs`]) fi ac_gtk_config_cflags=$ac_cv_gtk_config_cflags ac_gtk_config_libs=$ac_cv_gtk_config_libs GTK_EXTRA_OBJS="" GTK_DATADIR="" if test "$have_gtk" = yes; then GTK_DATADIR=`$pkg_config --variable=prefix gtk+-2.0` GTK_DATADIR="$GTK_DATADIR/share" fi if test "$have_gtk" = yes; then INCLUDES="$INCLUDES $ac_gtk_config_cflags" GTK_LIBS="$GTK_LIBS $ac_gtk_config_libs" AC_DEFINE(HAVE_GTK) AC_DEFINE(HAVE_GTK2) AC_DEFINE(HAVE_XML) fi if test "$have_gtk" = yes; then ok="yes" pkg_check_version gtk+-2.0 2.22 have_gtk_2_22_or_higher="$ok" if test "$have_gtk_2_22_or_higher" = yes; then COMMENT_DEMO_GLADE2_GTK_2_22_HEAD="" fi fi fi # Check for the various Gnome help and URL loading programs. # WITH_BROWSER=gnome-open if test "$have_gtk" = yes; then AC_CHECK_PROGS(gnome_open_program, gnome-open) AC_CHECK_PROGS(gnome_url_show_program, gnome-url-show) fi ############################################################################### # # Check for -lXm. # ############################################################################### have_motif=no with_motif_req=unspecified AC_ARG_WITH(motif,[ --with-motif Use the Motif toolkit for the user interface (no longer supported.)], [with_motif="$withval"; with_motif_req="$withval"],[with_motif=no]) HANDLE_X_PATH_ARG(with_motif, --with-motif, Motif) if test "$with_motif" != yes -a "$with_motif" != no ; then echo "error: must be yes or no: --with-motif=$with_motif" exit 1 fi if test "$with_motif" = yes; then have_motif=no AC_CHECK_X_HEADER(Xm/Xm.h, [have_motif=yes AC_DEFINE(HAVE_MOTIF) MOTIF_LIBS="$MOTIF_LIBS -lXm"],, [#include #include #include ]) fi if test "$have_motif" = yes; then AC_CHECK_X_HEADER(Xm/ComboBox.h, [AC_DEFINE(HAVE_XMCOMBOBOX)],, [#include #include #include ]) fi ############################################################################### # # Checking whether Motif is really Lesstif. # ############################################################################### have_lesstif=no if test "$have_motif" = yes ; then AC_CACHE_CHECK([whether Motif is really LessTif], ac_cv_have_lesstif, [AC_TRY_X_COMPILE([#include ], [long vers = LesstifVersion;], [ac_cv_have_lesstif=yes], [ac_cv_have_lesstif=no])]) have_lesstif=$ac_cv_have_lesstif fi lesstif_version=unknown lesstif_version_string=unknown if test "$have_lesstif" = yes ; then ltv=unknown echo unknown > conftest-lt AC_CACHE_CHECK([LessTif version number], ac_cv_lesstif_version_string, [AC_TRY_X_RUN([#include #include int main() { FILE *f = fopen("conftest-lt", "w"); if (!f) exit(1); fprintf(f, "%d %d.%d\n", LesstifVersion, LESSTIF_VERSION, LESSTIF_REVISION); fclose(f); exit(0); }], [ltv=`cat conftest-lt` ac_cv_lesstif_version=`echo $ltv | sed 's/ .*//'` ac_cv_lesstif_version_string=`echo $ltv | sed 's/.* //'`], [ac_cv_lesstif_version=unknown ac_cv_lesstif_version_string=unknown], [ac_cv_lesstif_version=unknown ac_cv_lesstif_version_string=unknown])]) rm -f conftest-lt lesstif_version=$ac_cv_lesstif_version lesstif_version_string=$ac_cv_lesstif_version_string fi if test "$have_motif" = yes ; then mtv=unknown echo unknown > conftest-mt AC_CACHE_CHECK([Motif version number], ac_cv_motif_version_string, [AC_TRY_X_RUN([#include #include int main() { FILE *f = fopen("conftest-mt", "w"); if (!f) exit(1); fprintf(f, "%d %d.%d\n", XmVersion, XmVERSION, XmREVISION); fclose(f); exit(0); }], [mtv=`cat conftest-mt` ac_cv_motif_version=`echo $mtv | sed 's/ .*//'` ac_cv_motif_version_string=`echo $mtv | sed 's/.* //'`], [ac_cv_motif_version=unknown ac_cv_motif_version_string=unknown], [ac_cv_motif_version=unknown ac_cv_motif_version_string=unknown])]) rm -f conftest-mt motif_version=$ac_cv_motif_version motif_version_string=$ac_cv_motif_version_string fi ############################################################################### # # Checking whether Motif requires -lXpm. # # If this is Motif 2.x, and we have XPM, then link against XPM as well. # The deal is, Motif 2.x requires XPM -- but it's a compilation option # of the library whether to build the XPM code into libXm, or whether # to rely on an external libXm. So the only way to tell whether XPM is # a link-time requirement is to examine libXm.a, which is very # difficult to do in an autoconf script. So... if it's Motif 2.x, we # always link against XPM if the XPM lib exists (and this will be a # no-op if libXm happens to already have the XPM code in it.) # ############################################################################### motif_requires_xpm=no if test "$have_motif" = yes ; then AC_MSG_CHECKING(whether Motif requires XPM) if test "$motif_version" = "unknown" || test "$motif_version" -ge 2000 then motif_requires_xpm=yes AC_MSG_RESULT(maybe) else AC_MSG_RESULT(no) fi fi ############################################################################### # # Checking whether Motif requires -lXp. # # Some versions of Motif (2.1.0, at least) require -lXp, the "X Printing # Extension". Why this extension isn't in -lXext with all the others, # I have no idea. # ############################################################################### have_xp_ext=no if test "$have_motif" = yes ; then have_xp_ext=no AC_CHECK_X_LIB(Xp, XpQueryExtension, [have_xp_ext=yes; MOTIF_LIBS="$MOTIF_LIBS -lXp"], [true], -lX11 -lXext -lm) fi ############################################################################### # # Checking whether Motif requires -lXintl (for _Xsetlocale.) # ############################################################################### have_xintl=no if test "$have_motif" = yes ; then AC_CHECK_X_LIB(Xintl, _Xsetlocale, [have_xintl=yes], [have_xintl=no], -lX11 -lXext -lm) if test "$have_xintl" = yes; then MOTIF_LIBS="$MOTIF_LIBS -lXintl" fi fi ############################################################################### # # Check for -lGL or -lMesaGL. # ############################################################################### have_gl=no ac_have_mesa_gl=no with_gl_req=unspecified gl_halfassed=no AC_ARG_WITH(gl,[ Graphics options: --with-gl Build those demos which depend on OpenGL.], [with_gl="$withval"; with_gl_req="$withval"],[with_gl=yes]) HANDLE_X_PATH_ARG(with_gl, --with-gl, GL) ac_mesagl_version=unknown ac_mesagl_version_string=unknown if test "$with_gl" = yes; then AC_CHECK_X_HEADER(GL/gl.h, have_gl=yes, have_gl=no) if test "$have_gl" = yes ; then AC_CHECK_X_HEADER(GL/glx.h, have_gl=yes, have_gl=no, [#include ]) fi # If we have the headers, try and figure out which vendor it's from. # if test "$have_gl" = yes ; then # We need to know whether it's MesaGL so that we know which libraries # to link against. # AC_CACHE_CHECK([whether GL is really MesaGL], ac_cv_have_mesa_gl, [ac_cv_have_mesa_gl=no if test "$ac_macosx" = no; then # WTF! MacOS 10.5.0 ships the Mesa GL headers! # It's not really Mesa, is it? AC_EGREP_X_HEADER(Mesa|MESA, GL/glx.h, [ac_cv_have_mesa_gl=yes]) fi]) ac_have_mesa_gl=$ac_cv_have_mesa_gl gl_lib_1="" GL_LIBS="" if test "$ac_macosx" = yes; then # Without these, every link against libGL gets a bunch of useless # warnings. # osx_crud="-bind_at_load -multiply_defined suppress" AC_MSG_RESULT(adding "$osx_crud" to GL_LIBS) GL_LIBS="$GL_LIBS $osx_crud" unset osx_crud # New lossage in 10.5.0: without this, we get: # ld: cycle in dylib re-exports with /usr/X11/lib/libGL.dylib # osx_crud="/System/Library/Frameworks/OpenGL.framework/Versions/A/Libraries/libGL.dylib" osx_crud="-Wl,-dylib_file,${osx_crud}:${osx_crud}" AC_MSG_RESULT(adding "$osx_crud" to GL_LIBS) GL_LIBS="$GL_LIBS $osx_crud" unset osx_crud # New lossage in 10.6.8: we can't allow -L/opt/local/lib to be in the # link line, or at runtime XQueryExtension gets a segv due to some kind # of library version skew. Libs must come from /usr/X11/lib even if # $prefix and/or $exec_prefix are set to /opt/local/. # AC_MSG_RESULT(omitting "$libdir" from LDFLAGS) libdir='' fi # Some versions of MesaGL are compiled to require -lpthread. # So if the Mesa headers exist, and -lpthread exists, then always # link -lpthread after the Mesa libs (be they named -lGL or -lMesaGL.) # # Oftentimes, AX_PTHREAD will bring in -lpthread as well; but that ends # up before -l(Mesa)GL, instead of after where it would belong. # if test "$ac_have_mesa_gl" = yes; then AC_CHECK_LIB(pthread, pthread_create, [GL_LIBS="-lpthread"], [],) fi # If we have Mesa headers, check to see if we can link against -lMesaGL. # If we don't have Mesa headers, or we don't have -lMesaGL, try -lGL. # Else, warn that GL is busted. (We have the headers, but no libs.) # if test "$ac_have_mesa_gl" = yes ; then AC_CHECK_X_LIB(MesaGL, glXCreateContext, [gl_lib_1="MesaGL" GL_LIBS="-lMesaGL -lMesaGLU $VIDMODE_LIBS $GL_LIBS"], [], -lMesaGLU $GL_LIBS -lX11 -lXext $VIDMODE_LIBS -lm) fi if test "$gl_lib_1" = "" ; then AC_CHECK_X_LIB(GL, glXCreateContext, [gl_lib_1="GL" GL_LIBS="-lGL -lGLU $VIDMODE_LIBS $GL_LIBS"], [], -lGLU $GL_LIBS -lX11 -lXext $VIDMODE_LIBS -lm) fi if test "$gl_lib_1" = "" ; then # we have headers, but no libs -- bail. have_gl=no ac_have_mesa_gl=no gl_halfassed=yes else # linking works -- we can build the GL hacks. AC_DEFINE(HAVE_GL) if test "$ac_have_mesa_gl" = yes ; then AC_DEFINE(HAVE_MESA_GL) fi fi fi # Now that we know we have GL headers and libs, do some more GL testing. # if test "$have_gl" = yes ; then # If it's MesaGL, we'd like to issue a warning if the version number # is less than or equal to 2.6, because that version had a security bug. # if test "$ac_have_mesa_gl" = yes; then AC_CACHE_CHECK([MesaGL version number], ac_cv_mesagl_version_string, [cat > conftest.$ac_ext < #ifndef MESA_MAJOR_VERSION # include # ifdef XMESA_MAJOR_VERSION /* Around Mesa 3.2, they took out the Mesa version number, so instead, we have to check the XMesa version number (the number of the X protocol support, which seems to be the same as the Mesa version number.) */ # define MESA_MAJOR_VERSION XMESA_MAJOR_VERSION # define MESA_MINOR_VERSION XMESA_MINOR_VERSION # else /* Oh great. Some time after 3.4, they took out the xmesa.h header file, so we have no way of telling what version of Mesa this is at all. So, we'll guess that the osmesa version (the "offscreen protocol") is less than or equal to the real mesa version number. Except that if OSmesa is 3.3, assume at least Mesa 3.4, since OSmesa was 3.3 in Mesa 3.4. And Mesa 3.3 had xmesa.h. What a complete load of shit! */ # include # define MESA_MAJOR_VERSION OSMESA_MAJOR_VERSION # define MESA_MINOR_VERSION OSMESA_MINOR_VERSION or newer, probably? # if OSMESA_MAJOR_VERSION == 3 && OSMESA_MINOR_VERSION == 3 # undef MESA_MINOR_VERSION # define MESA_MINOR_VERSION 4 or newer, probably? # endif # endif #endif configure: MESA_MAJOR_VERSION MESA_MINOR_VERSION EOF ac_save_CPPFLAGS="$CPPFLAGS" if test \! -z "$includedir" ; then CPPFLAGS="$CPPFLAGS -I$includedir" fi CPPFLAGS="$CPPFLAGS $X_CFLAGS" mglv=`(eval "$ac_cpp conftest.$ac_ext") 2>&AC_FD_CC | grep configure:` # M4 sucks!! changequote(X,Y) mglv=`echo "$mglv" | sed -n \ 's/^configure: *\([0-9][0-9]*\) *\([0-9].*\)$/\1.\2/p'` changequote([,]) rm -f conftest.$ac_ext CPPFLAGS="$ac_save_CPPFLAGS" if test "$mglv" = ""; then ac_mesagl_version=unknown ac_mesagl_version_string=unknown else ac_mesagl_version_string="$mglv" # M4 sucks!! changequote(X,Y) maj=`echo "$mglv" | sed -n 's/^\([0-9][0-9]*\)\..*$/\1/p'` min=`echo "$mglv" | sed -n 's/^.*\.\([0-9][0-9]*\).*$/\1/p'` changequote([,]) ac_mesagl_version=`echo "$maj * 1000 + $min" | bc` if test -z "$ac_mesagl_version"; then ac_mesagl_version=unknown ac_mesagl_version_string=unknown fi fi ac_cv_mesagl_version=$ac_mesagl_version ac_cv_mesagl_version_string=$ac_mesagl_version_string ]) ac_mesagl_version=$ac_cv_mesagl_version ac_mesagl_version_string=$ac_cv_mesagl_version_string fi # Check for OpenGL 1.1 features. # AC_CHECK_X_LIB($gl_lib_1, glBindTexture, [AC_DEFINE(HAVE_GLBINDTEXTURE)], [true], $GL_LIBS -lX11 -lXext -lm) fi elif test "$with_gl" != no; then echo "error: must be yes or no: --with-gl=$with_gl" exit 1 fi ############################################################################### # # Check for -lgle. # ############################################################################### have_gle=no with_gle_req=unspecified gle_halfassed=no AC_ARG_WITH(gle, [ --with-gle Build those demos which depend on GLE (the OpenGL "extrusion" library.)], [with_gle="$withval"; with_gle_req="$withval"],[with_gle=yes]) HANDLE_X_PATH_ARG(with_gle, --with-gle, GLE) GLE_LIBS="" if test "$have_gl" = no ; then true elif test "$with_gle" = yes; then AC_CHECK_X_HEADER(GL/gle.h, have_gle3=yes, have_gle3=no, [#include ]) if test "$have_gle3" = yes ; then have_gle=yes; else AC_CHECK_X_HEADER(GL/gutil.h, have_gle=yes, have_gle=no, [#include ]) if test "$have_gle" = yes ; then AC_CHECK_X_HEADER(GL/tube.h, have_gle=yes, have_gle=no, [#include ]) fi fi if test "$have_gle" = yes ; then have_gle=no gle_halfassed=yes AC_CHECK_X_LIB(gle, gleCreateGC, [have_gle=yes; gle_halfassed=no; GLE_LIBS="-lgle"], [], $GL_LIBS -lX11 -lXext -lm) fi if test "$have_gle" = yes ; then have_gle=no gle_halfassed=yes # sometimes the libmatrix stuff is included in libgle. look there first. # # I don't get it. For some reason, this test passes on SGI, as if # uview_direction_d() was in libgle -- but it's not, it's in libmatrix. # Yet the link is succeeding. Why??? # # AC_CHECK_X_LIB(gle, uview_direction_d, # [have_gle=yes; gle_halfassed=no], # [], $GL_LIBS -lX11 -lXext -lm) # As of GLE 3 this is in libgle, and has changed name to uview_direction! # *sigh* if test "$have_gle3" = yes ; then AC_CHECK_X_LIB(gle, uview_direction, [have_gle=yes; gle_halfassed=no], [], $GL_LIBS -lX11 -lXext -lm) fi # if it wasn't in libgle, then look in libmatrix. if test "$have_gle" = no ; then AC_CHECK_X_LIB(matrix, uview_direction_d, [have_gle=yes; gle_halfassed=no; GLE_LIBS="$GLE_LIBS -lmatrix"], [], $GL_LIBS -lX11 -lXext -lm) fi fi if test "$have_gle" = yes ; then AC_DEFINE(HAVE_GLE) if test "$have_gle3" = yes ; then AC_DEFINE(HAVE_GLE3) fi fi elif test "$with_gle" != no; then echo "error: must be yes or no: --with-gle=$with_gle" exit 1 fi ############################################################################### # # Handle --with-gles # ############################################################################### with_gles_req=unspecified AC_ARG_WITH(gles, [ --with-gles Target OpenGL ES 1.x API instead of OpenGL 1.3.], [with_gles="$withval"; with_gles_req="$withval"],[with_gles=no]) HANDLE_X_PATH_ARG(with_gles, --with-gles, JWZGLES) if test "$with_gles" = yes; then have_gles=yes AC_DEFINE(HAVE_JWZGLES) JWZGLES_OBJS='$(JWXYZ_BIN)/jwzgles.o' AC_MSG_RESULT(using OpenGL ES compatiblity shim) elif test "$with_gles" != no; then echo "error: must be yes or no: --with-gles=$with_xpm" exit 1 fi ############################################################################### # # Check for -lgdk_pixbuf. # These tests are for gdk_pixbuf usage of the hacks, # not xscreensaver-demo (thus we have to test again to get # the libraries right: don't want to pull in all of GTK # for the hacks.) # ############################################################################### have_gdk_pixbuf=no with_gdk_pixbuf_req=unspecified AC_ARG_WITH(pixbuf, [ --with-pixbuf Include support for the GDK-Pixbuf library in some demos, which will make it possible for them to read GIF, JPEG, and PNG files as well.], [with_gdk_pixbuf="$withval"; with_gdk_pixbuf_req="$withval"], [with_gdk_pixbuf=yes]) # if --with-pixbuf=/directory/ was specified, remember that directory so that # we can also look for the `gdk-pixbuf-config' program in that directory. case "$with_gdk_pixbuf" in /*) gdk_pixbuf_dir="$with_gdk_pixbuf" ;; *) gdk_pixbuf_dir="" ;; esac HANDLE_X_PATH_ARG(with_gdk_pixbuf, --with-pixbuf, GDK_PIXBUF) if test "$with_gdk_pixbuf" != yes -a "$with_gdk_pixbuf" != no ; then echo "error: must be yes or no: --with-pixbuf=$with_gdk_pixbuf" exit 1 fi if test "$with_gdk_pixbuf" = yes; then have_gdk_pixbuf=no pkgs='' ok="yes" pkg_check_version gdk-pixbuf-2.0 2.0.0 pkg_check_version gdk-pixbuf-xlib-2.0 2.0.0 have_gdk_pixbuf="$ok" if test "$have_gdk_pixbuf" = yes; then AC_CACHE_CHECK([for gdk-pixbuf includes], ac_cv_gdk_pixbuf_config_cflags, [ac_cv_gdk_pixbuf_config_cflags=`$pkg_config --cflags $pkgs`]) AC_CACHE_CHECK([for gdk-pixbuf libs], ac_cv_gdk_pixbuf_config_libs, [ac_cv_gdk_pixbuf_config_libs=`$pkg_config --libs $pkgs`]) fi ac_gdk_pixbuf_config_cflags=$ac_cv_gdk_pixbuf_config_cflags ac_gdk_pixbuf_config_libs=$ac_cv_gdk_pixbuf_config_libs if test "$have_gdk_pixbuf" = yes; then # # we appear to have pixbuf; check for headers/libs to be sure. # ac_save_gdk_pixbuf_CPPFLAGS="$CPPFLAGS" CPPFLAGS="$CPPFLAGS $ac_gdk_pixbuf_config_cflags" have_gdk_pixbuf=no # check for header A... AC_CHECK_X_HEADER(gdk-pixbuf/gdk-pixbuf.h, [have_gdk_pixbuf=yes]) # if that worked, check for header B... if test "$have_gdk_pixbuf" = yes; then have_gdk_pixbuf=no gdk_pixbuf_halfassed=yes AC_CHECK_X_HEADER(gdk-pixbuf/gdk-pixbuf-xlib.h, [have_gdk_pixbuf=yes gdk_pixbuf_halfassed=no]) # yay, it has a new name in Gtk 2.x... if test "$have_gdk_pixbuf" = no; then have_gdk_pixbuf=no gdk_pixbuf_halfassed=yes AC_CHECK_X_HEADER(gdk-pixbuf-xlib/gdk-pixbuf-xlib.h, [have_gdk_pixbuf=yes gdk_pixbuf_halfassed=no]) fi fi CPPFLAGS="$ac_save_gdk_pixbuf_CPPFLAGS" fi if test "$have_gdk_pixbuf" = yes; then # we have the headers, now check for the libraries have_gdk_pixbuf=no gdk_pixbuf_halfassed=yes AC_MSG_RESULT(checking for gdk_pixbuf usability...) # library A... AC_CHECK_X_LIB(c, gdk_pixbuf_new_from_file, [have_gdk_pixbuf=yes],, $ac_gdk_pixbuf_config_libs -lX11 -lXext -lm) # library B... if test "$have_gdk_pixbuf" = yes; then have_gdk_pixbuf=no AC_CHECK_X_LIB(c, gdk_pixbuf_xlib_init, [have_gdk_pixbuf=yes gdk_pixbuf_halfassed=no],, $ac_gdk_pixbuf_config_libs -lX11 -lXext -lm) fi fi if test "$have_gdk_pixbuf" = yes; then INCLUDES="$INCLUDES $ac_gdk_pixbuf_config_cflags" XPM_LIBS="$ac_gdk_pixbuf_config_libs" AC_DEFINE(HAVE_GDK_PIXBUF) else AC_MSG_RESULT(checking for gdk_pixbuf usability... no) fi if test "$have_gdk_pixbuf" = yes; then AC_CHECK_X_LIB(c, gdk_pixbuf_apply_embedded_orientation, [AC_DEFINE(HAVE_GDK_PIXBUF_APPLY_EMBEDDED_ORIENTATION)],, $ac_gdk_pixbuf_config_libs -lX11 -lXext -lm) fi fi ############################################################################### # # Check for -lXpm. # ############################################################################### have_xpm=no with_xpm_req=unspecified AC_ARG_WITH(xpm, [ --with-xpm Include support for XPM files in some demos. (Not needed if Pixbuf is used.)], [with_xpm="$withval"; with_xpm_req="$withval"],[with_xpm=yes]) HANDLE_X_PATH_ARG(with_xpm, --with-xpm, XPM) if test "$with_xpm" = yes; then AC_CHECK_X_HEADER(X11/xpm.h, [have_xpm=yes AC_DEFINE(HAVE_XPM) XPM_LIBS="-lXpm $XPM_LIBS"],, [#include ]) elif test "$with_xpm" != no; then echo "error: must be yes or no: --with-xpm=$with_xpm" exit 1 fi # See comment near $motif_requires_xpm, above. # Need to do this here, after both Motif and XPM have been checked for. # if test "$have_motif" = yes -a "$have_xpm" = yes ; then if test "$motif_requires_xpm" = yes ; then MOTIF_LIBS="$MOTIF_LIBS $XPM_LIBS" fi fi if test "$XPM_LIBS" = "" ; then XPM_LIBS=$(MINIXPM) fi ############################################################################### # # Check for -ljpeg # ############################################################################### have_jpeg=no with_jpeg_req=unspecified jpeg_halfassed=no AC_ARG_WITH(jpeg, [ --with-jpeg Include support for the JPEG library.], [with_jpeg="$withval"; with_jpeg_req="$withval"], [with_jpeg=yes]) HANDLE_X_PATH_ARG(with_jpeg, --with-jpeg, JPEG) if test "$with_jpeg" != yes -a "$with_jpeg" != no ; then echo "error: must be yes or no: --with-jpeg=$with_jpeg" exit 1 fi if test "$with_jpeg" = yes; then have_jpeg=no AC_CHECK_X_HEADER(jpeglib.h, [have_jpeg=yes]) if test "$have_jpeg" = yes; then # we have the header, now check for the library have_jpeg=no jpeg_halfassed=yes AC_CHECK_X_LIB(jpeg, jpeg_start_compress, [have_jpeg=yes jpeg_halfassed=no JPEG_LIBS="-ljpeg" AC_DEFINE(HAVE_JPEGLIB)]) fi fi ############################################################################### # # Check for -lXft # ############################################################################### have_xutf8drawstring=no AC_CHECK_X_LIB(X11, Xutf8DrawString, [have_xutf8drawstring=yes], [true], -lX11 -lXext -lm) if test "$have_xutf8drawstring" = yes ; then AC_DEFINE(HAVE_XUTF8DRAWSTRING) fi have_xft=no with_xft_req=unspecified xft_halfassed=no AC_ARG_WITH(xft, [ --with-xft Include support for the X Freetype library.], [with_xft="$withval"; with_xft_req="$withval"], [with_xft=yes]) HANDLE_X_PATH_ARG(with_xft, --with-xft, Xft) if test "$with_xft" != yes -a "$with_xft" != no ; then echo "error: must be yes or no: --with-xft=$with_xft" exit 1 fi if test "$with_xft" = yes; then pkgs='' ok="yes" pkg_check_version xft 2.1.0 have_xft="$ok" if test "$have_xft" = yes; then AC_CACHE_CHECK([for Xft includes], ac_cv_xft_config_cflags, [ac_cv_xft_config_cflags=`$pkg_config --cflags $pkgs`]) AC_CACHE_CHECK([for Xft libs], ac_cv_xft_config_libs, [ac_cv_xft_config_libs=`$pkg_config --libs $pkgs`]) fi ac_xft_config_cflags=$ac_cv_xft_config_cflags ac_xft_config_libs=$ac_cv_xft_config_libs if test "$have_xft" = yes; then # # we appear to have Xft; check for headers/libs to be sure. # ac_save_xft_CPPFLAGS="$CPPFLAGS" CPPFLAGS="$CPPFLAGS $ac_xft_config_cflags" have_xft=no AC_CHECK_X_HEADER(X11/Xft/Xft.h, [have_xft=yes]) CPPFLAGS="$ac_save_xft_CPPFLAGS" fi if test "$have_xft" = yes; then # we have the headers, now check for the libraries have_xft=no xft_halfassed=yes AC_MSG_RESULT(checking for Xft usability...) AC_CHECK_X_LIB(c, XftDrawStringUtf8, [have_xft=yes],, $ac_xft_config_libs -lX11 -lXext -lm) fi if test "$have_xft" = no; then AC_MSG_RESULT(checking for Xft usability... no) fi fi if test "$have_xft" = yes; then INCLUDES="$INCLUDES $ac_xft_config_cflags" XFT_LIBS="$ac_xft_config_libs" XFT_SRCS='' XFT_OBJS='' AC_DEFINE(HAVE_XFT) else XFT_LIBS='' XFT_SRCS='$(UTILS_SRC)/xft.c' XFT_OBJS='$(UTILS_BIN)/xft.o' fi ############################################################################### # # Check for pty support: this allows 'phosphor' and 'apple2' # to run curses-based programs, or be used as terminal windows. # ############################################################################### PTY_LIBS= AC_CHECK_HEADERS(pty.h util.h sys/termios.h) AC_CHECK_X_LIB(util, forkpty, [PTY_LIBS="-lutil" ac_have_forkpty=yes AC_DEFINE(HAVE_FORKPTY)]) if test "$ac_have_forkpty" != yes ; then # we don't need (or have) -lutil on MacOS 10.4.2... AC_CHECK_X_LIB(c, forkpty, [PTY_LIBS="" AC_DEFINE(HAVE_FORKPTY)]) fi ############################################################################### # # Check for the XSHM server extension. # ############################################################################### have_xshm=no with_xshm_req=unspecified AC_ARG_WITH(xshm-ext, [ --with-xshm-ext Include support for the Shared Memory extension.], [with_xshm="$withval"; with_xshm_req="$withval"],[with_xshm=yes]) HANDLE_X_PATH_ARG(with_xshm, --with-xshm-ext, XSHM) if test "$with_xshm" = yes; then # first check for Xshm.h. AC_CHECK_X_HEADER(X11/extensions/XShm.h, [have_xshm=yes],, [#include ]) # if that succeeded, then check for sys/ipc.h. if test "$have_xshm" = yes; then have_xshm=no AC_CHECK_X_HEADER(sys/ipc.h, [have_xshm=yes]) fi # if that succeeded, then check for sys/shm.h. if test "$have_xshm" = yes; then have_xshm=no AC_CHECK_X_HEADER(sys/shm.h, [have_xshm=yes]) fi # AIX is pathological, as usual: apparently it's normal for the Xshm headers # to exist, but the library code to not exist. And even better, the library # code is in its own library: libXextSam.a. So, if we're on AIX, and that # lib doesn't exist, give up. (This lib gets added to X_EXTRA_LIBS, and # that's not quite right, but close enough.) # case "$host" in *-aix*) if [ `uname -v` -eq 3 ]; then have_xshm=no AC_CHECK_X_LIB(XextSam, XShmQueryExtension, [have_xshm=yes; X_EXTRA_LIBS="$X_EXTRA_LIBS -lXextSam"], [true], -lX11 -lXext -lm) fi ;; esac # if that succeeded, then we've really got it. if test "$have_xshm" = yes; then AC_DEFINE(HAVE_XSHM_EXTENSION) fi elif test "$with_xshm" != no; then echo "error: must be yes or no: --with-xshm-ext=$with_xshm" exit 1 fi ############################################################################### # # Check for the DOUBLE-BUFFER server extension. # ############################################################################### have_xdbe=no with_xdbe_req=unspecified AC_ARG_WITH(xdbe-ext, [ --with-xdbe-ext Include support for the DOUBLE-BUFFER extension.], [with_xdbe="$withval"; with_xdbe_req="$withval"],[with_xdbe=yes]) HANDLE_X_PATH_ARG(with_xdbe, --with-xdbe-ext, DOUBLE-BUFFER) if test "$with_xdbe" = yes; then AC_CHECK_X_HEADER(X11/extensions/Xdbe.h, [have_xdbe=yes],, [#include ]) if test "$have_xdbe" = yes; then AC_DEFINE(HAVE_DOUBLE_BUFFER_EXTENSION) fi elif test "$with_xdbe" != no; then echo "error: must be yes or no: --with-xdbe-ext=$with_xshm" exit 1 fi ############################################################################### # # Check for the SGI XReadDisplay server extension. # # Note: this has to be down here, rather than up with the other server # extension tests, so that the output of `configure --help' is in the # right order. Arrgh! # ############################################################################### have_readdisplay=no with_readdisplay_req=unspecified AC_ARG_WITH(readdisplay, [ --with-readdisplay Include support for the XReadDisplay extension.], [with_readdisplay="$withval"; with_readdisplay_req="$withval"], [with_readdisplay=yes]) HANDLE_X_PATH_ARG(with_readdisplay, --with-readdisplay, XReadDisplay) if test "$with_readdisplay" = yes; then AC_CHECK_X_HEADER(X11/extensions/readdisplay.h, AC_DEFINE(HAVE_READ_DISPLAY_EXTENSION),, [#include ]) elif test "$with_readdisplay" != no; then echo "error: must be yes or no: --with-readdisplay=$with_readdisplay" exit 1 fi ############################################################################### # # Check for a directory full of images to use as the default value # of the "imageDirectory" preference. # ############################################################################### have_imagedir=no with_imagedir_req=unspecified AC_ARG_WITH(image-directory, [ --with-image-directory Arg is the default directory from which some demos will choose random images to display.], [with_imagedir="$withval"; with_imagedir_req="$withval"], [with_imagedir=yes]) # no HANDLE_X_PATH_ARG for this one case "$with_imagedir" in /*) # absolute path AC_MSG_CHECKING([for image directory $with_imagedir]) if test -d "$with_imagedir" ; then AC_MSG_RESULT(yes) else AC_MSG_RESULT(no) with_imagedir="" fi ;; yes) with_imagedir="" #### Could use some more defaults here... for dd in \ "/usr/share/backgrounds/images/" \ "/usr/share/wallpapers/" \ "/Library/Desktop Pictures/" \ ; do if test -z "$with_imagedir"; then AC_MSG_CHECKING([for image directory $dd]) if test -d "$dd" ; then AC_MSG_RESULT(yes) with_imagedir="$dd" else AC_MSG_RESULT(no) fi fi done ;; no) with_imagedir="" ;; *) echo "error: must be an absolute path: --with-image-directory=$with_imagedir_req" exit 1 ;; esac ac_cv_imagedir="$with_imagedir" DEFAULT_IMAGES_P='True' DEFAULT_IMAGE_DIRECTORY="$ac_cv_imagedir" if test -z "$DEFAULT_IMAGE_DIRECTORY" ; then DEFAULT_IMAGES_P='False' fi ############################################################################### # # Pick a text file to use as the default of the "textFile" preference. # Any old file will do, but preferably one that will make interesting # shapes when displayed by "starwars" and "fontglide". # ############################################################################### have_textfile=no with_textfile_req=unspecified AC_ARG_WITH(text-file, [ --with-text-file=FILE By default, some demos may display this file.], [with_textfile="$withval"; with_textfile_req="$withval"], [with_textfile=yes]) # no HANDLE_X_PATH_ARG for this one case "$with_textfile" in /*) # absolute path AC_MSG_CHECKING([for text file $with_textfile]) if test -f "$with_textfile" ; then AC_MSG_RESULT(yes) else AC_MSG_RESULT(no) with_textfile="" fi ;; yes) with_textfile="" #### Could use some more defaults here... for f in \ "/usr/X11R6/lib/X11/doc/README" \ "/usr/share/doc/xserver-common/copyright" \ "/usr/share/doc/xserver-xorg-core/copyright" \ "/usr/X11R6/README" \ "/usr/share/doc/libX11*/COPYING" \ "/usr/X11/share/X11/doc/README*" \ "/usr/share/doc/debian/debian-manifesto" \ ; do if test -z "$with_textfile"; then AC_MSG_CHECKING([for text file $f]) f=`/bin/ls $f 2>&- | head -1` if test -f "$f" ; then AC_MSG_RESULT(yes) with_textfile="$f" else AC_MSG_RESULT(no) fi fi done ;; no) with_textfile="" ;; *) echo "error: must be an absolute path: --with-text-file=$with_textfile_req" exit 1 ;; esac ac_cv_textfile="$with_textfile" DEFAULT_TEXT_FILE="$ac_cv_textfile" ############################################################################### # # Check the browser to see help URL # ############################################################################### have_browser=no with_browser_req=unspecified AC_ARG_WITH(browser, [ --with-browser=BROWSER Specify the web browser used to show the help URL.], [with_browser="$withval"; with_browser_req="$withval"], [with_browser=no ]) # no HANDLE_X_PATH_ARG for this one case "$with_browser" in no ) ;; * ) WITH_BROWSER=$with_browser gnome_open_program=$with_browser AC_MSG_CHECKING([for browser $with_browser]) with_browser_fullpath=`which $with_browser 2>/dev/null` case $with_browser_fullpath in /* ) AC_MSG_RESULT(yes) have_browser=yes ;; * ) AC_MSG_RESULT(no) # Only warning: we don't want to install all packages for the # dependency of the browser in building stage... echo "WARNING: browser not found: --with-browser=$with_browser" ;; esac ;; esac ac_cv_browser="$with_browser" ############################################################################### # # Check whether it's ok to install some hacks as setuid (e.g., "sonar") # This should be safe, but let's give people the option. # ############################################################################### setuid_hacks_default=no setuid_hacks="$setuid_hacks_default" AC_ARG_WITH(setuid-hacks, [ --with-setuid-hacks Allow some demos to be installed `setuid root' (which is needed in order to ping other hosts.) ], [setuid_hacks="$withval"], [setuid_hacks="$setuid_hacks_default"]) HANDLE_X_PATH_ARG(setuid_hacks, --with-setuid-hacks, setuid hacks) if test "$setuid_hacks" = yes; then true elif test "$setuid_hacks" != no; then echo "error: must be yes or no: --with-setuid-hacks=$setuid_hacks" exit 1 fi ############################################################################### # # Check for --with-record-animation # ############################################################################### record_anim_default=no record_anim="$record_anim_default" AC_ARG_WITH(record-animation, [ --with-record-animation Include code for generating MP4 videos. ], [record_anim="$withval"], [record_anim="$record_anim_default"]) HANDLE_X_PATH_ARG(record_anim, --with-record-animation, record animation) if test "$record_anim" = yes; then true elif test "$record_anim" != no; then echo "error: must be yes or no: --with-record-animation=$record_anim" exit 1 fi if test "$record_anim" = yes; then if test "$have_gdk_pixbuf" != yes; then AC_MSG_ERROR(--with-record-animation requires GDK-Pixbuf) else AC_MSG_RESULT(enabling --with-record-animation) AC_DEFINE(HAVE_RECORD_ANIM) ANIM_OBJS='$(ANIM_OBJS)' ANIM_LIBS='$(ANIM_LIBS)' fi fi ############################################################################### # # Done testing. Now, set up the various -I and -L variables, # and decide which GUI program to build by default. # ############################################################################### DEPEND=makedepend DEPEND_FLAGS= DEPEND_DEFINES= if test \! -z "$includedir" ; then INCLUDES="$INCLUDES -I$includedir" fi if test \! -z "$libdir" ; then LDFLAGS="$LDFLAGS -L$libdir" fi PREFERRED_DEMO_PROGRAM='' ALL_DEMO_PROGRAMS= if test "$have_motif" = yes; then PREFERRED_DEMO_PROGRAM=xscreensaver-demo-Xm ALL_DEMO_PROGRAMS="$PREFERRED_DEMO_PROGRAM $ALL_DEMO_PROGRAMS" fi if test "$have_gtk" = yes; then PREFERRED_DEMO_PROGRAM=xscreensaver-demo-Gtk ALL_DEMO_PROGRAMS="$PREFERRED_DEMO_PROGRAM $ALL_DEMO_PROGRAMS" fi if test "$have_kerberos" = yes; then PASSWD_SRCS="$PASSWD_SRCS \$(KERBEROS_SRCS)" PASSWD_OBJS="$PASSWD_OBJS \$(KERBEROS_OBJS)" fi if test "$have_pam" = yes; then PASSWD_SRCS="$PASSWD_SRCS \$(PAM_SRCS)" PASSWD_OBJS="$PASSWD_OBJS \$(PAM_OBJS)" INSTALL_PAM="install-pam" fi if test "$enable_pam_check_account_type" = yes; then COMMENT_PAM_CHECK_ACCOUNT="" else COMMENT_PAM_CHECK_ACCOUNT="#" fi if test "$have_passwd_helper" = yes; then PASSWD_SRCS="$PASSWD_SRCS \$(PWHELPER_SRCS)" PASSWD_OBJS="$PASSWD_OBJS \$(PWHELPER_OBJS)" fi PASSWD_SRCS="$PASSWD_SRCS \$(PWENT_SRCS)" PASSWD_OBJS="$PASSWD_OBJS \$(PWENT_OBJS)" if test "$enable_locking" = yes; then LOCK_SRCS='$(LOCK_SRCS_1) $(PASSWD_SRCS)' LOCK_OBJS='$(LOCK_OBJS_1) $(PASSWD_OBJS)' else LOCK_SRCS='$(NOLOCK_SRCS_1)' LOCK_OBJS='$(NOLOCK_OBJS_1)' fi if test "$ac_macosx" = yes; then EXES_OSX='$(EXES_OSX)' SCRIPTS_OSX='$(SCRIPTS_OSX)' MEN_OSX='$(MEN_OSX)' else EXES_OSX= SCRIPTS_OSX= MEN_OSX= fi INSTALL_SETUID='$(INSTALL_PROGRAM) $(SUID_FLAGS)' if test "$need_setuid" = yes; then NEED_SETUID=yes else NEED_SETUID=no fi if test "$setuid_hacks" = yes; then SETUID_HACKS=yes else SETUID_HACKS=no fi tab=' ' if test "$have_gl" = yes; then GL_EXES='$(GL_EXES)' SUID_EXES='$(SUID_EXES)' RETIRED_GL_EXES='$(RETIRED_GL_EXES)' GL_UTIL_EXES='$(GL_UTIL_EXES)' GL_MEN='$(GL_MEN)' GL_KLUDGE=" " else GL_KLUDGE="-" fi if test "$have_gle" = yes; then GLE_EXES='$(GLE_EXES)' GLE_KLUDGE=" " else GLE_KLUDGE="-" fi if test "$have_jpeg" = yes -a "$have_gdk_pixbuf" = yes; then JPEG_EXES='$(JPEG_EXES)' fi # Another substitution in the XScreenSaver.ad.in file: # if test "$gnome_open_program" != ''; then GNOME24='' GNOME22='! ' NOGNOME='! ' elif test "$gnome_url_show_program" != ''; then GNOME24='! ' GNOME22='' NOGNOME='! ' else GNOME24='! ' GNOME22='! ' NOGNOME='' fi # Set PO_DATADIR to something sensible. # AC_MSG_CHECKING([for locale directory]) if test -n "$GTK_DATADIR" ; then PO_DATADIR="$GTK_DATADIR" elif test "$have_gtk" = yes; then PO_DATADIR=`$pkg_config --variable=prefix gtk+-2.0` PO_DATADIR="$PO_DATADIR/share" fi if test -z "$PO_DATADIR" ; then # # #### Total fucking kludge -- # Map /build/prefix/usr/X11R6/share/ to /build/prefix/usr/share/ # but of course we need to expand all the nested variables to do that... # dd=`eval eval eval eval eval eval eval eval eval eval eval echo $datadir` PO_DATADIR=`echo $dd | sed 's@/X11R6/@/@'` fi AC_MSG_RESULT($PO_DATADIR/locale) # canonicalize slashes. HACK_CONF_DIR=`echo "${HACK_CONF_DIR}" | sed 's@/$@@;s@//*@/@g'` # gcc 3.0 likes to issue this warning for every file: # # cc1: warning: changing search order for system directory "/usr/local/include" # cc1: warning: as it has already been specified as a non-system directory # # Yay. We can only avoid that by deleting "-I${prefix}/include" from the list. # Which *should* be totally redundant, and thus an ok thing to delete? # INCLUDES=`echo "$INCLUDES" | sed 's@ -I${prefix}/include@@g;'` ############################################################################### # # Perform substitutions and write Makefiles. # ############################################################################### AC_SUBST(INCLUDES) AC_SUBST(PREFERRED_DEMO_PROGRAM) AC_SUBST(ALL_DEMO_PROGRAMS) AC_SUBST(SAVER_LIBS) AC_SUBST(MOTIF_LIBS) AC_SUBST(GTK_LIBS) AC_SUBST(XML_LIBS) AC_SUBST(JPEG_LIBS) AC_SUBST(HACK_LIBS) AC_SUBST(XPM_LIBS) AC_SUBST(PTY_LIBS) AC_SUBST(GL_LIBS) AC_SUBST(GLE_LIBS) AC_SUBST(XDPMS_LIBS) AC_SUBST(XINERAMA_LIBS) AC_SUBST(PASSWD_LIBS) AC_SUBST(INSTALL_SETUID) AC_SUBST(SETUID_HACKS) AC_SUBST(INSTALL_DIRS) AC_SUBST(NEED_SETUID) AC_SUBST(INSTALL_PAM) AC_SUBST(HAVE_PAM_FAIL_DELAY) AC_SUBST(COMMENT_PAM_CHECK_ACCOUNT) AC_SUBST(NEW_LOGIN_COMMAND) AC_SUBST(NEW_LOGIN_COMMAND_P) AC_SUBST(DEFAULT_IMAGES_P) AC_SUBST(DEFAULT_IMAGE_DIRECTORY) AC_SUBST(DEFAULT_TEXT_FILE) AC_SUBST(WITH_BROWSER) AC_SUBST(COMMENT_DEMO_GLADE2_GTK_2_22_HEAD) AC_SUBST(COMMENT_DEMO_GLADE2_GTK_2_22_TAIL) AC_SUBST(OBJCC) AC_SUBST(EXES_OSX) AC_SUBST(SCRIPTS_OSX) AC_SUBST(MEN_OSX) AC_SUBST(PASSWD_SRCS) AC_SUBST(PASSWD_OBJS) AC_SUBST(XMU_SRCS) AC_SUBST(XMU_OBJS) AC_SUBST(XMU_LIBS) AC_SUBST(XFT_SRCS) AC_SUBST(XFT_OBJS) AC_SUBST(XFT_LIBS) AC_SUBST(SAVER_GL_SRCS) AC_SUBST(SAVER_GL_OBJS) AC_SUBST(SAVER_GL_LIBS) AC_SUBST(LOCK_SRCS) AC_SUBST(LOCK_OBJS) AC_SUBST(JPEG_EXES) AC_SUBST(GL_EXES) AC_SUBST(RETIRED_GL_EXES) AC_SUBST(SUID_EXES) AC_SUBST(GL_UTIL_EXES) AC_SUBST(GL_MEN) AC_SUBST(GL_KLUDGE) AC_SUBST(GLE_EXES) AC_SUBST(GLE_KLUDGE) AC_SUBST(JWZGLES_OBJS) AC_SUBST(GNOME24) AC_SUBST(GNOME22) AC_SUBST(NOGNOME) AC_SUBST(HACKDIR) AC_SUBST(HACKDIR_FULL) AC_SUBST(GTK_DATADIR) AC_SUBST(PO_DATADIR) AC_SUBST(HACK_CONF_DIR) AC_SUBST(GTK_EXTRA_OBJS) AC_SUBST(ANIM_OBJS) AC_SUBST(ANIM_LIBS) APPDEFAULTS=$ac_x_app_defaults AC_SUBST(APPDEFAULTS) AC_SUBST(DEPEND) AC_SUBST(DEPEND_FLAGS) AC_SUBST(DEPEND_DEFINES) AC_SUBST(PERL) AC_OUTPUT(Makefile utils/Makefile jwxyz/Makefile hacks/Makefile hacks/glx/Makefile po/Makefile.in driver/Makefile driver/xscreensaver.pam driver/xscreensaver-demo.glade2 driver/XScreenSaver.ad) ############################################################################### # # Print some warnings at the end. # ############################################################################### warn_prefix_1=" Warning:" warn_prefix_2=" Note:" warn_prefix="$warn_prefix_1" warning=no warnsep=' #################################################################' warnpre() { if test "$warning" = no ; then echo '' ; echo "$warnsep" ; echo '' warning=yes fi } warn() { warnpre if test "$warning" = long ; then echo '' ; fi warning=yes rest="$@" echo "$warn_prefix $rest" } warnL() { was=$warning warnpre warning=yes if test "$was" != no ; then echo '' ; fi rest="$@" echo "$warn_prefix $rest" } warn2() { rest="$@" echo " $rest" warning=long } note() { warn_prefix="$warn_prefix_2" warn $@ warn_prefix="$warn_prefix_1" } noteL() { warn_prefix="$warn_prefix_2" warnL $@ warn_prefix="$warn_prefix_1" } # ac_prog_cc_no_pthread normally only happens on AIX, because according # to AX_PTHREAD, AIX needs CC=xlc_r or CC=cc_r to do threads. # If CC is specified, it takes precedence over --with-pthread. if test "$ac_prog_cc_no_pthread" ; then warnL "You requested $ac_original_cc for the C compiler, but it doesn't" warn2 "support POSIX threads." echo "" warn2 "If you have multiple CPU cores, try CC=$PTHREAD_CC." elif test "$with_pthread_req" = yes -a "$have_pthread" = no ; then warn 'POSIX threads were requested, but were not found.' fi if test "$with_sgi_req" = yes -a "$have_sgi" = no ; then warn 'The SGI saver extension was requested, but was not found.' fi if test "$with_xidle_req" = yes -a "$have_xidle" = no ; then warn 'The XIdle extension was requested, but was not found.' fi if test "$with_xshm_req" = yes -a "$have_xshm" = no ; then warn 'The XSHM extension was requested, but was not found.' fi if test "$with_xdbe_req" = yes -a "$have_xdbe" = no ; then warn 'The DOUBLE-BUFFER extension was requested, but was not found.' fi if test "$with_sgivc_req" = yes -a "$have_sgivc" = no ; then warn 'The SGI-VIDEO-CONTROL extension was requested, but was not found.' fi if test "$with_dpms_req" = yes -a "$have_dpms" = no ; then warn 'The DPMS extension was requested, but was not found.' fi if test "$with_xinerama_req" = yes -a "$have_xinerama" = no ; then warn 'The Xinerama extension was requested, but was not found.' fi if test "$with_xf86vmode_req" = yes -a "$have_xf86vmode" = no ; then warn 'The XF86VMODE extension was requested, but was not found.' fi if test "$with_randr_req" = yes -a "$have_randr" = no ; then warn 'The RANDR extension was requested, but was not found.' fi if test "$with_proc_interrupts_req" = yes -a "$have_proc_interrupts" = no; then warn "Checking of /proc/interrupts was requested, but it's bogus." fi if test "$pkg_config" = false ; then warnL 'The "pkg-config" program was not found. Without that,' warn2 "detection of the various GTK libraries won't work." else pkgerr=`$pkg_config --list-all 2>&1 >/dev/null` if test "x$pkgerr" != "x" ; then warnL 'The "pkg-config" program produces errors. This often causes' warn2 "detection of the various GTK libraries to malfunction." warn2 "The errors are:" echo '' echo "$pkgerr" | sed 's/^/ > /g' fi fi if test "$gtk_halfassed" != no ; then warnL "GTK version $gtk_halfassed was found, but at least one supporting" warn2 "library ($gtk_halfassed_lib) was not, so GTK can't be used." warn2 "Perhaps some of the development packages are not installed?" if test "$have_gtk" = yes ; then v="$ac_gtk_version_string" warn2 "GTK $v is also installed, so it will be used instead." warn2 "Please read the above output and the \`config.log' file" warn2 "for more details." fi fi motif_warn2() { warn2 'Though the Motif front-end to xscreensaver is still' warn2 'maintained, it is no longer being updated with new' warn2 'features: all new development on the xscreensaver-demo' warn2 'program is happening in the GTK version, and not in the' warn2 'Motif version. It is recommended that you build against' warn2 'GTK instead of Motif. See .' } if test "$have_motif" = no -a "$have_gtk" = no; then if test "$with_motif" = yes; then warnL "Neither the GTK nor Motif libraries were found; the" warn2 "\`xscreensaver-demo' program requires one of these." echo '' motif_warn2 else warnL "The GTK libraries do not seem to be available; the" warn2 "\`xscreensaver-demo' program requires them." # echo '' # warn2 'You can use Motif or Lesstif instead of GTK (use the' # warn2 "\`--with-motif' option) but that is NOT recommended." # motif_warn2 fi elif test "$with_motif_req" = yes -a "$have_motif" = no ; then warnL "Use of Motif was requested, but it wasn't found;" warn2 "Gtk will be used instead." elif test "$jurassic_gtk" = yes ; then pref_gtk=2.0 v="$ac_gtk_version_string" if test "$with_gtk_req" = yes -a "$ac_gtk_version" = "unknown" ; then warnL "Use of Gtk was requested, but its version number is unknown;" elif test "$with_gtk_req" = yes ; then warnL "Use of Gtk was requested, but it is version $v;" else warnL "Gtk was found on this system, but it is version $v;" fi warn2 "Gtk $pref_gtk or newer is required." elif test "$with_gtk_req" = yes -a "$have_gtk" = no ; then warnL "Use of Gtk was requested, but it wasn't found." fi if test "$have_gtk" = yes -a "$have_gdk_pixbuf" = no ; then warn "GTK is being used, but the GDK-Pixbuf library and/or" warn2 "headers were not found. That can't be good. Please" warn2 "install the GDK-Pixbuf development kit and re-configure." fi if test "$have_motif" = yes -a "$have_lesstif" = yes ; then preferred_lesstif=0.92 if test "$lesstif_version" = unknown; then warnL "Unable to determine the LessTif version number!" warn2 "Make sure you are using version $preferred_lesstif or newer." warn2 "See ." elif test \! $lesstif_version -gt 82; then warnL "LessTif version $lesstif_version_string is being used." warn2 "LessTif versions 0.82 and earlier are too buggy to" warn2 "use with XScreenSaver; it is strongly recommended" warn2 "that you upgrade to at least version $preferred_lesstif!" warn2 "See ." fi fi if test "$have_motif" = yes -a "$have_gtk" = no ; then warn 'Motif is being used, and GTK is not.' echo '' motif_warn2 fi if test "$with_xpm_req" = yes -a "$have_xpm" = no; then warnL 'Use of XPM was requested, but it was not found.' fi if test "$with_gdk_pixbuf_req" = yes -a "$have_gdk_pixbuf" = no; then warnL 'Use of GDK-Pixbuf was requested, but it was not found.' fi if test "$have_gdk_pixbuf" = no -o "$gdk_pixbuf_halfassed" = yes || \ test "$have_gdk_pixbuf" = no -a "$have_xpm" = no ; then if test "$with_gdk_pixbuf_req" = yes ; then true elif test "$with_gdk_pixbuf_req" = no ; then warnL 'The GDK-Pixbuf library is not being used.' else warnL 'The GDK-Pixbuf library was not found.' fi if test "$with_xpm_req" = yes -o "$have_xpm" = yes ; then true elif test "$with_xpm_req" = no ; then warnL 'The XPM library is not being used.' else warnL 'The XPM library was not found.' fi if test "$have_gdk_pixbuf" = no -a "$have_xpm" = yes ; then warn2 'The XPM library is being used instead.' fi if test "$gdk_pixbuf_halfassed" = yes ; then echo '' warn2 'More specifically, we found the headers, but not the' warn2 'libraries; so either GDK-Pixbuf is half-installed on this' warn2 "system, or something else went wrong. The \`config.log'" warn2 'file might contain some clues.' fi echo '' warn2 'Some of the demos will not use images as much as they could.' warn2 'You should consider installing GDK-Pixbuf and re-running' warn2 'configure. (GDK-Pixbuf is recommended over XPM, as it' warn2 'provides support for more image formats.)' fi if test "$have_jpeg" = no ; then if test "$with_jpeg_req" = yes ; then warnL 'Use of libjpeg was requested, but it was not found.' elif test "$with_jpeg_req" = no ; then noteL 'The JPEG library is not being used.' else noteL 'The JPEG library was not found.' fi if test "$jpeg_halfassed" = yes ; then echo '' warn2 'More specifically, we found the headers, but not the' warn2 'library; so either JPEG is half-installed on this' warn2 "system, or something else went wrong. The \`config.log'" warn2 'file might contain some clues.' echo '' fi if test "$have_gdk_pixbuf" = no ; then warn2 "This means that it won't be possible for the image-manipulating" warn2 "display modes to load files from disk; and it also means that" warn2 "the \`webcollage' program will be much slower." else warn2 "This means the \`webcollage' program will be much slower." fi fi if test "$have_xft" = no ; then if test "$with_xft_req" = yes ; then warnL "Use of libXft was requested, but it was not found." elif test "$with_xft_req" = no ; then noteL 'The Xft library is not being used.' else noteL "The Xft library was not found." fi if test "$xft_halfassed" = yes ; then echo '' warn2 'More specifically, we found the headers, but not the' warn2 'libraries; so either Xft is half-installed on this' warn2 "system, or something else went wrong. The \`config.log'" warn2 'file might contain some clues.' echo '' fi warn2 "This means that fonts won't be anti-aliased." fi if test "$have_gl" = yes -a "$ac_have_mesa_gl" = yes ; then preferred_mesagl=3.4 mgv="$ac_mesagl_version_string" pgl="$preferred_mesagl" if test "$ac_mesagl_version" = unknown; then true # warnL "Unable to determine the MesaGL version number!" # warn2 "Make sure you are using version $preferred_mesagl or newer." elif test \! "$ac_mesagl_version" -gt 2006; then warnL "MesaGL version number is $mgv --" warn2 "MesaGL 2.6 and earlier have a security bug. It is strongly" warn2 "recommended that you upgrade to at least version $preferred_mesagl." elif test \! "$ac_mesagl_version" -gt 3003; then warnL "MesaGL version number is $mgv --" warn2 "MesaGL 3.3 and earlier have some bugs; it is recommended" warn2 "that you upgrade to $pgl or newer." fi fi if test "$have_gl" = no ; then if test "$with_gl_req" = yes ; then warnL 'Use of GL was requested, but it was not found.' elif test "$with_gl_req" = no ; then noteL 'The OpenGL 3D library is not being used.' else noteL 'The OpenGL 3D library was not found.' fi if test "$gl_halfassed" = yes ; then echo '' warn2 'More specifically, we found the headers, but not the' warn2 'libraries; so either GL is half-installed on this' warn2 "system, or something else went wrong. The \`config.log'" warn2 'file might contain some clues.' fi echo '' warn2 'Those demos which use 3D will not be built or installed.' warn2 'You might want to consider installing OpenGL and' warn2 're-running configure.' fi if test "$have_gl" = yes -a "$have_gle" = no ; then # nobody cares about this; don't print the warning unless it was # requested and not found, or halfway-found. if test "$with_gle_req" = yes -o "$gle_halfassed" = yes ; then if test "$with_gle_req" = yes ; then noteL 'Use of the GLE (GL Extrusion) library was requested, but' warn2 'it was not found (though the OpenGL library was found, and' warn2 'is being used.)' elif test "$with_gle_req" = no ; then noteL 'The OpenGL Library is being used, but the GLE (GL Extrusion)' warn2 'library is not.' else noteL 'The OpenGL Library was found, but the GLE (GL Extrusion)' warn2 'library was not.' fi if test "$gle_halfassed" = yes ; then echo '' warn2 'More specifically, we found the headers, but not the' warn2 'libraries; so either GLE is half-installed on this' warn2 "system, or something else went wrong. The \`config.log'" warn2 'file might contain some clues.' fi echo '' warn2 'Some of the OpenGL (3D) demos (those that depend on GLE)' warn2 'will not be built or installed. You might want to consider' warn2 'installing GLE and re-running configure. You can find the' warn2 'GLE library at ' fi fi if test "$with_readdisplay_req" = yes -a "$have_readdisplay" = no ; then warn 'Use of XReadDisplay was requested, but it was not found.' fi if test "$with_kerberos_req" = yes -a "$have_kerberos" = no ; then warn 'Use of Kerberos was requested, but it was not found.' fi if test "$with_pam_req" = yes -a "$have_pam" = no ; then warn 'Use of PAM was requested, but it was not found.' fi if test "$with_shadow_req" = yes -a "$have_shadow" = no ; then warn 'Use of shadow passwords was requested, but they were not found.' fi if test "$ac_macosx" = yes ; then if test "$enable_locking" = yes ; then warn "You have specified --enable-locking on MacOS X." warn2 "THIS DOES NOT WORK! Don't do this!" fi fi # You are in a twisty maze of namespaces and syntaxes, all alike. # Fuck the skull of Unix. # bindir=`eval eval eval eval eval eval eval echo $bindir` HACKDIR=`eval eval eval eval eval eval eval echo $HACKDIR` HACK_CONF_DIR=`eval eval eval eval eval eval eval echo $HACK_CONF_DIR` # canonicalize slashes. bindir=`echo "${bindir}" | sed 's@/$@@;s@//*@/@g'` HACKDIR=`echo "${HACKDIR}" | sed 's@/$@@;s@//*@/@g'` HACK_CONF_DIR=`echo "${HACK_CONF_DIR}" | sed 's@/$@@;s@//*@/@g'` # Sanity check the hackdir for bad_choice in xscreensaver xscreensaver-demo xscreensaver-command ; do if test "${HACKDIR}" = "${bindir}/${bad_choice}" ; then echo "" AC_MSG_ERROR([\"--with-hackdir=${bindir}/${bad_choice}\" won't work. There will be an executable installed with that name, so that can't be the name of a directory as well. Please re-configure with a different directory name.]) fi done do_dir_warning=no # Now let's warn if there's a previous RPM version already installed. # But don't bother with this test if we are currently *building* an RPM. if test -z "$RPM_PACKAGE_VERSION" ; then rpmnames="xscreensaver xscreensaver-base xscreensaver-extras" # M4 sucks!! changequote(X,Y) rpmv=`(rpm -qv $rpmnames) 2>/dev/null | \ sed -n 's/^[-a-z]*-\([0-9][0-9]*[.][0-9][0-9a-z]*\)-.*$/\1/p' | \ head -1` changequote([,]) if test \! -z "$rpmv" ; then rpmbdir=`rpm -ql $rpmnames | sed -n 's@^\(.*\)/xscreensaver-demo$@\1@p'` rpmhdir=`rpm -ql $rpmnames | sed -n 's@^\(.*\)/popsquares$@\1@p'` warning=no warnL "There is already an installed RPM of xscreensaver $rpmv" warn2 'on this system. You might want to remove it ("rpm -ve")' warn2 'before running "make install" in this directory.' echo "" warn2 "Alternately, you could build this version of xscreensaver" warn2 'as an RPM, and then install that. An "xscreensaver.spec"' warn2 'file is included. Try "rpmbuild -v -ba xscreensaver.spec".' warn2 "See the RPM documentation for more info." echo "" if test "$rpmbdir" = "$rpmhdir" ; then warn2 "The RPM version was installed in $rpmbdir/." do_dir_warning=yes else warn2 "The RPM version was installed in $rpmbdir/," warn2 "with demos in $rpmhdir/." fi fi fi # Also warn if there's a Debian package installed. # debnames="xscreensaver xscreensaver-data xscreensaver-data-extra" debv='' for dpkg in $debnames ; do if test -z "$debv"; then debv=`dpkg -s $dpkg 2>/dev/null | sed -n 's/^Version: \(.*\)$/\1/p'` fi done if test \! -z "$debv" ; then debbdir=`dpkg -L $debnames 2>/dev/null | \ sed -n 's@^\(.*/bin/\)xscreensaver$@\1@p'` debhdir=`dpkg -L $debnames 2>/dev/null | \ sed -n 's@^\(.*/\)popsquares$@\1@p'` if test -z "$debbdir" ; then debbdir='???'; fi if test -z "$debhdir" ; then debhdir='???'; fi warning=no warnL "There is already an installed dpkg of xscreensaver" warn2 "version \"$debv\" on this system." echo "" warn2 "The dpkg was installed in $debbdir," warn2 "with demos in $debhdir." fi if test "${bindir}" = "${HACKDIR}" ; then do_dir_warning=yes fi if test "$do_dir_warning" = yes; then echo "" echo "$warnsep" echo "" echo ' When you run "make install", the "xscreensaver",' echo ' "xscreensaver-demo", and "xscreensaver-command" executables' echo " will be installed in ${bindir}/." echo "" echo " The various graphics demos (200+ different executables) will" echo " be installed in ${HACKDIR}/." echo "" echo " If you would prefer the demos to be installed elsewhere," echo " you should re-run configure with the --with-hackdir=DIR" echo " option. For more information, run \`./configure --help'." warning=yes fi if test "$warning" != no; then echo '' ; echo "$warnsep" ; echo '' fi if test "$do_dir_warning" = no; then if test "$warning" = no; then echo '' fi echo "User programs will be installed in ${bindir}/" echo "Screen savers will be installed in ${HACKDIR}/" echo "Configuration dialogs will be installed in ${HACK_CONF_DIR}/" echo "System-wide default settings will be installed in ${APPDEFAULTS}/" echo '' fi xscreensaver-5.36/Makefile.in000644 000767 000024 00000032623 12721113342 016205 0ustar00jwzstaff000000 000000 # Makefile.in --- xscreensaver, Copyright (c) 1999-2014 Jamie Zawinski. # the `../configure' script generates `Makefile' from this file. @SET_MAKE@ srcdir = @srcdir@ VPATH = @srcdir@ SHELL = /bin/sh SUBDIRS = utils jwxyz hacks hacks/glx driver po SUBDIRS2 = $(SUBDIRS) OSX android TARFILES = README README.hacking README.VMS INSTALL \ configure configure.in Makefile.in config.h.in \ config.h-vms install-sh setup.com config.guess aclocal.m4 \ ax_pthread.m4 config.sub makevms.com \ intltool-merge.in intltool-extract.in intltool-update.in \ xscreensaver.spec \ OSX/xscreensaver.xcodeproj/project.pbxproj TAR = tar MAKE_SUBDIR = for dir in $(SUBDIRS); do $(MAKE) -C $$dir $@ || exit 5; done MAKE_SUBDIR2 = for dir in $(SUBDIRS2); do $(MAKE) -C $$dir $@ || exit 5; done default:: @$(MAKE_SUBDIR) all:: @$(MAKE_SUBDIR) install:: @$(MAKE_SUBDIR) install-program:: @$(MAKE_SUBDIR) install-man:: @$(MAKE_SUBDIR) install-strip:: @$(MAKE_SUBDIR) uninstall:: @$(MAKE_SUBDIR) uninstall-program:: @$(MAKE_SUBDIR) uninstall-man:: @$(MAKE_SUBDIR) depend:: @$(MAKE_SUBDIR) distdepend:: @$(MAKE) update_spec_version @$(MAKE_SUBDIR2) @$(MAKE) -C po update-po TAGS:: tags tags:: @$(MAKE_SUBDIR) clean:: @$(MAKE_SUBDIR2) distclean:: clean -rm -f config.h Makefile config.status config.cache config.log TAGS *~ "#"* intltool-extract intltool-merge intltool-update @$(MAKE_SUBDIR2) dist:: tar # This really makes me sick... tar:: @ \ sh config.status ; \ rm -f configure ; \ $(MAKE) configure ; \ $(MAKE) version-date distdepend ; \ VERS=`sed -n 's/[^0-9]*\([0-9]\.[0-9][^. ]*\).*/\1/p' utils/version.h` ; \ NAME="xscreensaver-$$VERS" ; \ rm -rf $$NAME ; ln -s . $$NAME ; \ FILES= ; \ ADIR=archive/ ; \ for subdir in $(SUBDIRS2) ; do \ d=`pwd` ; \ cd $$subdir ; \ FILES="$$FILES `$(MAKE) echo_tarfiles \ | grep -v '^.*make\[' \ | sed \"s|^|$$subdir/|g;s| | $$subdir/|g\" \ ` "; \ cd $$d ; done ; \ echo creating tar file $$ADIR$$NAME.tar.gz... ; \ export COPYFILE_DISABLE=true ; \ GZIP="-9v" $(TAR) -vczf $$ADIR$$NAME.tar.gz \ `echo $(TARFILES) $$FILES | sed "s|^|$$NAME/|g; s| | $$NAME/|g" ` ; \ rm $$NAME # This also makes me sick... # autoconf generates a configure script that begins with a very hard to read, # nearly impossible to customize --help blurb. This horrid set of regexps # go through and clean up the help text, by inserting whitespace and ripping # out options we don't use. Odds are good that this will fail with any version # of autoconf other than the ones I've tried (2.12 and 2.13.) # configure:: aclocal autoconf autoheader @TMP=configure.$$$$ ; \ echo "munging configure's --help message..." ; \ ( perl -e ' \ my $$file=""; \ while (<>) { $$file .= $$_; } \ $$_ = $$file; \ \ s/^(Configuration:)$$/\n$$1\n/m; \ s/^(Directory and file names:)$$/\n$$1\n/m; \ s/^ --sbindir=.*\n//m; \ s/^ --sysconfdir.*\n//m; \ s/^ --sharedstatedir.*\n.*\n//m; \ s/^ --localstatedir.*\n//m; \ s/^ --infodir.*\n//m; \ s/^(Host type:)$$/\n$$1\n/m; \ s/\nFeatures and packages:\n.*library files are in DIR\n/\n/s;\ s/--enable and --with options recognized://m; \ s/\n --with-x .*?(["\n])/$$1/s; \ s/\n(Installation options:\n)/$$1/s; \ \ s/^ --oldincludedir=.*$$/ \ --x-includes=DIR X include files are in DIR\n \ --x-libraries=DIR X library files are in DIR/m; \ \ s@mandir=.\$${prefix}/man.@mandir=\\\$${datadir}/man@; \ \ s@rm -f conftest@rm -rf conftest@g; \ \ print;' \ < configure \ > $$TMP && \ cat $$TMP > configure ) ; \ rm -f $$TMP bump-version:: @ \ SRC=utils/version.h ; \ VERS=`sed -n 's/[^0-9]*\([0-9]\)\.\([0-9][^. ]*\).*/\1 \2/p' $$SRC` ; \ set - $$VERS ; \ MAJOR="$$1"; MINOR="$$2"; \ NEW=`echo $$MINOR + 1 | bc` ; \ NEW=`echo $$NEW | sed 's/^\([0-9]\)$$/0\1/'` ; \ D=`date '+%d-%b-%Y'`; \ ADIR=archive/ ; \ if [ ! -f $${ADIR}xscreensaver-$$MAJOR.$$MINOR.tar.gz ]; then \ echo "WARNING: $${ADIR}xscreensaver-$$MAJOR.$$MINOR.tar.gz does not exist.";\ fi ; \ if [ -f $${ADIR}xscreensaver-$$MAJOR.$$NEW.tar.gz ]; then \ echo "WARNING: $${ADIR}xscreensaver-$$MAJOR.$$NEW.tar.gz already exists.";\ fi ; \ /bin/echo -n "Bumping $$MAJOR.$$MINOR to $$MAJOR.$$NEW ($$D), ok? "; \ read line; \ if [ "x$$line" != "xyes" -a "x$$line" != "xy" ]; then \ exit 1 ; \ fi ; \ TMP=/tmp/bv.$$ ; \ sed -e "s/\([0-9]\.[0-9][0-9]*\)/$$MAJOR.$$NEW/" \ -e "s/\(([0-9][0-9]*-[A-Za-z][a-z][a-z]-[0-9][0-9][0-9]*\))/($$D)/" \ $$SRC > $$TMP ; \ /bin/echo -n "New version and date are "; \ sed -n "s/[^0-9]*\([0-9]\.[0-9][0-9]*\) (\([-A-Za-z0-9]*\)).*/\1, \2./p" \ $$TMP; \ cat $$TMP > $$SRC ; \ rm -f $$TMP; \ echo "overwrote $$SRC"; \ ls -lFd $$SRC bump_version:: bump-version tick-version:: bump-version tick_version:: bump-version version-date:: @ \ SRC=utils/version.h ; \ D=`date '+%d-%b-%Y'`; \ TMP=/tmp/bv.$$ ; \ sed -e "s/([0-9][^()]*)/($$D)/" < $$SRC > $$TMP ; \ /bin/echo -n "Updating date in $$SRC to \"$$D\"... " ; \ if cmp -s $$SRC $$TMP ; then \ echo "unchanged." ; \ else \ cat $$TMP > $$SRC ; \ echo "done." ; \ fi ; \ rm -f $$TMP update_spec_version:: @S=$(srcdir)/xscreensaver.spec ; \ U=$(srcdir)/utils/version.h ; \ VERS=`sed -n 's/[^0-9]*\([0-9]\.[0-9][^. ]*\).*/\1/p' < $$U` ; \ /bin/echo -n "Updating $$S to \"$$VERS\"... " ; \ T=/tmp/xs.$$$$ ; \ sed "s/^\(%define.version[^0-9]*\)\(.*\)/\1$$VERS/" \ < $$S > $$T ; \ if cmp -s $$S $$T ; then \ echo "unchanged." ; \ else \ cat $$T > $$S ; \ echo "done." ; \ fi ; \ rm $$T rpm:: @ \ VERS=`sed -n 's/[^0-9]*\([0-9]\.[0-9][^. ]*\).*/\1/p' utils/version.h` ; \ DIR=`pwd`/rpm_build ; \ ARCH=`rpm --showrc | sed -n 's/^build arch *: //p'` ; \ ADIR=archive/ ; \ TGZ=xscreensaver-$$VERS.tar.gz ; \ if [ ! -f $${ADIR}$$TGZ ]; then \ echo "$${ADIR}$$TGZ does not exist! Did you forget to \`make tar'?" ; \ exit 1 ; \ fi ; \ rm -rf /var/tmp/xscreensaver-$$VERS-root ; \ rm -rf $$DIR ; \ mkdir $$DIR ; \ ( cd $$DIR; mkdir BUILD RPMS RPMS/$$ARCH SOURCES SPECS SRPMS ) ; \ cp -p $${ADIR}$$TGZ $$DIR/SOURCES/ ; \ rpmbuild --define "_topdir $$DIR" \ --define "USE_GL yes" \ -v -ba xscreensaver.spec ; \ echo '' ; \ echo 'RPM build complete' ; \ echo '' ; \ rm -f $$DIR/$$TGZ ; \ rm -rf $$DIR/BUILD/xscreensaver-$$VERS ; \ mv $$DIR/SRPMS/xscreensaver*-$$VERS-*.rpm . ; \ mv $$DIR/RPMS/$$ARCH/xscreensaver*-$$VERS-*.rpm . ; \ rm -rf $$DIR ; \ echo '' ; \ ls -lFG xscreensaver*-$$VERS-*.rpm test-tar:: @ \ VERS=`sed -n 's/[^0-9]*\([0-9]\.[0-9][^. ]*\).*/\1/p' utils/version.h` ; \ D=xscreensaver-$$VERS ; \ ADIR=archive/ ; \ NAME="$${ADIR}$$D.tar.gz" ; \ if [ ! -f $$NAME ]; then \ echo "$$NAME does not exist! Did you forget to \`make tar'?" ; \ exit 1 ; \ fi ; \ \ set -e ; \ set -x ; \ \ if [ -d $$D ]; then \ chmod -R u+w $$D ; \ fi ; \ rm -rf $$D ; \ zcat $${ADIR}$$D.tar.gz | tar -xf - ; \ cd $$D ; \ chmod -R a-w . ; \ chmod u+w . ; \ mkdir BIN ; \ mkdir BIN/motif ; \ mkdir BIN/lesstif ; \ chmod a-w . ; \ \ ( cd BIN/motif ; \ CC=cc ; \ export CC ; \ ../../configure --without-xpm --without-xdbe --without-xshm \ --with-motif=/usr/local/motif ; \ echo --------------------------------------------------------------- ; \ gmake all ; \ ( cd driver; gmake tests ) ; \ echo --------------------------------------------------------------- ); \ \ ( cd BIN/lesstif ; \ CC=cc ; \ export CC ; \ ../../configure --with-motif=/usr/local/lesstif --without-gnome ; \ echo --------------------------------------------------------------- ; \ ( cd utils; gmake all ) ; \ ( cd jwxyz; gmake all ) ; \ ( cd driver; gmake all ) ; \ echo --------------------------------------------------------------- ); \ \ chmod -R u+w . dmg:: $(MAKE) -C OSX release dmg apk:: $(MAKE) -C android apk www:: @ \ DEST=$$HOME/www/xscreensaver ; \ VERS=`sed -n 's/[^0-9]*\([0-9]\.[0-9][^. ]*\).*/\1/p' utils/version.h` ; \ HEAD="xscreensaver-$$VERS" ; \ ADIR=archive/ ; \ BNAME="$$HEAD.tar.gz" ; \ NAME="$$ADIR$$BNAME" ; \ DNAME="$$DEST/$$HEAD.tar.gz" ; \ BNAME2="$$HEAD.dmg" ; \ NAME2="$$ADIR$$BNAME2" ; \ DNAME2="$$DEST/$$HEAD.dmg" ; \ BNAME3="$$HEAD.apk" ; \ NAME3="$$ADIR$$BNAME3" ; \ DNAME3="$$DEST/$$HEAD.apk" ; \ \ if ! git diff --quiet ; then \ echo "uncommitted changes exist!" ; \ exit 1 ; \ fi ; \ \ $(MAKE) -C OSX updates.xml ; \ \ if [ ! -f $$NAME ]; then \ echo "$$NAME does not exist! Did you forget to \`make tar'?" ; \ exit 1 ; \ fi ; \ if [ ! -f $$NAME2 ]; then \ echo "$$NAME2 does not exist! Did you forget to \`make dmg'?" ; \ exit 1 ; \ fi ; \ if [ ! -f $$NAME3 ]; then \ echo "$$NAME3 does not exist! Did you forget to \`make apk'?" ; \ exit 1 ; \ fi ; \ chmod a-w $$NAME ; \ if [ -f $$DNAME ]; then \ /bin/echo -n "WARNING: $$DNAME already exists! Overwrite? "; \ read line; \ if [ "x$$line" != "xyes" -a "x$$line" != "xy" ]; then \ exit 1 ; \ fi ; \ fi ; \ if [ -f $$DNAME2 ]; then \ /bin/echo -n "WARNING: $$DNAME2 already exists! Overwrite? "; \ read line; \ if [ "x$$line" != "xyes" -a "x$$line" != "xy" ]; then \ exit 1 ; \ fi ; \ fi ; \ if [ -f $$DNAME3 ]; then \ /bin/echo -n "WARNING: $$DNAME3 already exists! Overwrite? "; \ read line; \ if [ "x$$line" != "xyes" -a "x$$line" != "xy" ]; then \ exit 1 ; \ fi ; \ fi ; \ \ git tag -a "v$$VERS" -m "$$VERS" ; \ git commit -m "$$VERS" . ; \ \ ( cd $$DEST ; git pull ) ; \ \ cp -p $$NAME $$DNAME ; \ cp -p $$NAME2 $$DNAME2 ; \ cp -p $$NAME3 $$DNAME3 ; \ chmod u+w $$DNAME $$DNAME2 $$DNAME3 ; \ cp -p OSX/updates.xml $$DEST ; \ cd $$DEST ; \ \ TMP=/tmp/xd.$$$$ ; \ sed "s/xscreensaver-5\.[0-9][0-9ab]*/$$HEAD/g" download.html > $$TMP ; \ echo '' ; \ diff -U0 download.html $$TMP ; \ echo '' ; \ \ for EXT in tar.gz dmg ; do \ OLDEST=`ls xscreensaver*.$$EXT | \ fgrep -v 5.14 | \ head -n 1` ; \ /bin/echo -n "Delete $$DEST/$$OLDEST? "; \ read line; \ if [ "x$$line" = "xyes" -o "x$$line" = "xy" ]; then \ set -x ; \ rm $$OLDEST ; \ git rm $$OLDEST ; \ set +x ; \ fi ; \ done ; \ set -x ; \ cat $$TMP > download.html ; \ rm -f $$TMP ; \ \ git add $$BNAME $$BNAME2 $$BNAME3 ; \ \ $(MAKE) -C ../ xscreensaver/changelog.html xscreensaver/screenshots/index.html; \ git diff changelog.html ; \ set +x ; \ \ /bin/echo -n "Ok? "; \ read line; \ if [ "x$$line" != "xyes" -a "x$$line" != "xy" ]; then \ exit 1 ; \ fi ; \ \ git tag -a "v$$VERS" -m "$$VERS" ; \ git commit -m "$$VERS" . ; \ git push ; \ count:: @ \ /bin/echo -n "Current hack count: " ; \ ( ( cd hacks; make -s INSTALL=true install-program install-scripts ) ; \ ( cd hacks/glx; make -s INSTALL=true install-program ) ) | \ grep true | \ grep -v helper | \ grep -v ljlatest | \ wc -l xscreensaver-5.36/config.h.in000664 000767 000024 00000037046 12721402214 016170 0ustar00jwzstaff000000 000000 /* config.h.in. Generated from configure.in by autoheader. */ /* config.h.in --- xscreensaver, Copyright (c) 1991-2014 Jamie Zawinski. * * The best way to set these parameters is by running the included `configure' * script. That examines your system, and generates `config.h' from * `config.h.in'. * * If something goes very wrong, you can edit `config.h' directly, but beware * that your changes will be lost if you ever run `configure' again. */ /* Define this to allow the root password to unlock the screen. */ #undef ALLOW_ROOT_PASSWD /* always defined to indicate that i18n is enabled */ #undef ENABLE_NLS /* Some screenhacks like to run an external program to generate random pieces of text; set this to the one you like. Note that this is just the default; X resources can be used to override it. */ #undef FORTUNE_PROGRAM /* This is the name of the gettext package to use. */ #undef GETTEXT_PACKAGE /* Define this if gettimeofday() takes two arguments. */ #undef GETTIMEOFDAY_TWO_ARGS /* Define this if your system is Solaris with ``adjunct'' passwords (this is the version where one gets at the passwords with getpwanam() instead of getpwnam().) I haven't tested this one, let me know if it works. */ #undef HAVE_ADJUNCT_PASSWD /* Define to 1 if you have the `bind_textdomain_codeset' function. */ #undef HAVE_BIND_TEXTDOMAIN_CODESET /* Define this if you have Gnome and want to build support for the xscreensaver control panel in the Gnome Control Center (gnomecc). (This is needed only with Gtk 1.x.) */ #undef HAVE_CRAPPLET /* Define this if HAVE_CRAPPLET is defined, and the function capplet_widget_changes_are_immediate() is available. */ #undef HAVE_CRAPPLET_IMMEDIATE /* Define to 1 if you have the header file. */ #undef HAVE_CRYPT_H /* Define to 1 if you have the `dcgettext' function. */ #undef HAVE_DCGETTEXT /* Define to 1 if you have the header file, and it defines `DIR'. */ #undef HAVE_DIRENT_H /* Define this if you have the X Double Buffer Extension. */ #undef HAVE_DOUBLE_BUFFER_EXTENSION /* Define this if you have the XDPMS extension. This is standard on sufficiently-recent XFree86 systems, and possibly elsewhere. (It's available if the file /usr/include/X11/extensions/dpms.h exists.) */ #undef HAVE_DPMS_EXTENSION /* Define this if your system is Digital or SCO Unix with so-called ``Enhanced Security'', that is, the passwords live in /tcb/files/auth// instead of in /etc/passwd, and one reads them with getprpwnam() instead of getpwnam(). */ #undef HAVE_ENHANCED_PASSWD /* Define to 1 if you have the `fcntl' function. */ #undef HAVE_FCNTL /* Define this if you have the 'forkpty' function: This allows 'phosphor' and 'apple2' to run curses-based programs, or be used as terminal windows. */ #undef HAVE_FORKPTY /* Define this if you have the GDK_Pixbuf library installed. Some of the demos can make use of this if it is available. */ #undef HAVE_GDK_PIXBUF /* Define this if you have the gdk_pixbuf_apply_embedded_orientation function (gdk-pixbuf 2.12). */ #undef HAVE_GDK_PIXBUF_APPLY_EMBEDDED_ORIENTATION /* Define to 1 if you have the `getaddrinfo' function. */ #undef HAVE_GETADDRINFO /* Define to 1 if you have the `getcwd' function. */ #undef HAVE_GETCWD /* Define this if you have the getifaddrs() function. */ #undef HAVE_GETIFADDRS /* Define if the GNU gettext() function is already present or preinstalled. */ #undef HAVE_GETTEXT /* Define this if you have the gettimeofday function. */ #undef HAVE_GETTIMEOFDAY /* Define to 1 if you have the `getwd' function. */ #undef HAVE_GETWD /* Define this if you have OpenGL. Some of the demos require it, so if you don't have it, then those particular demos won't be built. (This won't affect the screen saver as a whole.) */ #undef HAVE_GL /* Define this if your version of OpenGL has the glBindTexture() routine. This is the case for OpenGL 1.1, but not for OpenGL 1.0. */ #undef HAVE_GLBINDTEXTURE /* Define this if you have the -lgle and -lmatrix libraries (GL extrusion.) */ #undef HAVE_GLE /* Define this if you have the -lgle from GLE version 3 */ #undef HAVE_GLE3 /* Define this if you have Gtk (any version.) */ #undef HAVE_GTK /* Define this if you have Gtk 2.x. */ #undef HAVE_GTK2 /* Define this if you are running HPUX with so-called ``Secure Passwords'' (if you have /usr/include/hpsecurity.h, you probably have this.) I haven't tested this one, let me know if it works. */ #undef HAVE_HPUX_PASSWD /* Define this if you do pings with a `struct icmp' and an `icmp_id' slot. */ #undef HAVE_ICMP /* Define this if you do pings with a `struct icmphdr' and an `un.echo.id' slot. */ #undef HAVE_ICMPHDR /* Define to 1 if you have the header file. */ #undef HAVE_INTTYPES_H /* Define this if you have the Independent JPEG Group's JPEG library installed. Some of the demos can make use of this if it is available. */ #undef HAVE_JPEGLIB /* Define this to target the OpenGL ES 1.x API instead of OpenGL 1.3. */ #undef HAVE_JWZGLES /* Define this if you want to use Kerberos authentication to lock/unlock the screen instead of your local password. This currently uses Kerberos V4, but a V5 server with V4 compatibility will work. WARNING: DO NOT USE AFS string-to-key passwords with this option. This option currently *only* works with standard Kerberos des_string_to_key. If your password is an AFS password and not a kerberos password, it will not authenticate properly. See the comments in driver/kpasswd.c for more information if you need it. */ #undef HAVE_KERBEROS /* Define this if you have Kerberos 5, meaning we need to use the Kerberos 4 compatibility layer. */ #undef HAVE_KERBEROS5 /* Define if your file defines LC_MESSAGES. */ #undef HAVE_LC_MESSAGES /* Define to 1 if you have the header file. */ #undef HAVE_LOCALE_H /* Define to 1 if you have the header file. */ #undef HAVE_MEMORY_H /* Define this if you have OpenGL, but it's the MesaGL variant. (The libraries have different names.) (HAVE_GL should be defined too.) */ #undef HAVE_MESA_GL /* Define this if you have Motif. */ #undef HAVE_MOTIF /* Define to 1 if you have the header file, and it defines `DIR'. */ #undef HAVE_NDIR_H /* Define to 1 if you have the `nice' function. */ #undef HAVE_NICE /* Define this if you have the XML library headers in their old, non-namespaced location (you lack the gnome-xml/libxml symlink) */ #undef HAVE_OLD_XML_HEADERS /* Define this if you want to use PAM (Pluggable Authentication Modules) to lock/unlock the screen, instead of standard /etc/passwd authentication. */ #undef HAVE_PAM /* Define this if you have pam_fail_delay function. see driver/passwd-pam.c. */ #undef HAVE_PAM_FAIL_DELAY /* Define this if you have a Linux-like /proc/interrupts file which can be examined to determine when keyboard activity has occurred. */ #undef HAVE_PROC_INTERRUPTS /* Define this if your system supports POSIX threads. */ #undef HAVE_PTHREAD /* Have PTHREAD_PRIO_INHERIT. */ #undef HAVE_PTHREAD_PRIO_INHERIT /* Define to 1 if you have the header file. */ #undef HAVE_PTY_H /* Define to 1 if you have the `putenv' function. */ #undef HAVE_PUTENV /* Define this if you have the Resize and Rotate extension. This is standard on sufficiently-recent XFree86 systems, and possibly elsewhere. (It's available if the file /usr/include/X11/extensions/Xrandr.h exists.) */ #undef HAVE_RANDR /* Define this if the RANDR library is version 1.2 or newer. */ #undef HAVE_RANDR_12 /* Define this if you have the XReadDisplay extension (I think this is an SGI-only thing; it's in .) A few of the screenhacks will take advantage of this if it's available. */ #undef HAVE_READ_DISPLAY_EXTENSION /* Define to 1 if you have the `realpath' function. */ #undef HAVE_REALPATH /* Define this to enable recording of videos. */ #undef HAVE_RECORD_ANIM /* Define to 1 if you have the `sbrk' function. */ #undef HAVE_SBRK /* Define to 1 if you have the `select' function. */ #undef HAVE_SELECT /* Define to 1 if you have the `setlocale' function. */ #undef HAVE_SETLOCALE /* Define to 1 if you have the `setpriority' function. */ #undef HAVE_SETPRIORITY /* Define to 1 if you have the `setrlimit' function. */ #undef HAVE_SETRLIMIT /* Define this if your system uses 'shadow' passwords, that is, the passwords live in /etc/shadow instead of /etc/passwd, and one reads them with getspnam() instead of getpwnam(). (Note that SCO systems do some random other thing; others might as well. See the ifdefs in driver/passwd-pwent.c if you're having trouble related to reading passwords.) */ #undef HAVE_SHADOW_PASSWD /* Define to 1 if you have the `sigaction' function. */ #undef HAVE_SIGACTION /* Define to 1 if you have the `sigtimedwait' function. */ #undef HAVE_SIGTIMEDWAIT /* Define to 1 if you have the header file. */ #undef HAVE_STDINT_H /* Define to 1 if you have the header file. */ #undef HAVE_STDLIB_H /* Define to 1 if you have the header file. */ #undef HAVE_STRINGS_H /* Define to 1 if you have the header file. */ #undef HAVE_STRING_H /* Define to 1 if `sa_len' is a member of `struct sockaddr'. */ #undef HAVE_STRUCT_SOCKADDR_SA_LEN /* Define to 1 if you have the `syslog' function. */ #undef HAVE_SYSLOG /* Define to 1 if you have the header file, and it defines `DIR'. */ #undef HAVE_SYS_DIR_H /* Define to 1 if you have the header file, and it defines `DIR'. */ #undef HAVE_SYS_NDIR_H /* Define to 1 if you have the header file. */ #undef HAVE_SYS_SELECT_H /* Define to 1 if you have the header file. */ #undef HAVE_SYS_STAT_H /* Define to 1 if you have the header file. */ #undef HAVE_SYS_TERMIOS_H /* Define to 1 if you have the header file. */ #undef HAVE_SYS_TYPES_H /* Define to 1 if you have that is POSIX.1 compatible. */ #undef HAVE_SYS_WAIT_H /* Define to 1 if you have the `uname' function. */ #undef HAVE_UNAME /* Define to 1 if you have the header file. */ #undef HAVE_UNISTD_H /* Define to 1 if you have the header file. */ #undef HAVE_UTIL_H /* Define this if you have the XF86MiscSetGrabKeysState function (which allows the Ctrl-Alt-KP_star and Ctrl-Alt-KP_slash key sequences to be temporarily disabled. Sadly, it doesn't affect Ctrl-Alt-BS or Ctrl-Alt-F1.) */ #undef HAVE_XF86MISCSETGRABKEYSSTATE /* Define this if you have the functions XF86VidModeGetModeLine() and XF86VidModeGetViewPort(), in support of virtual desktops where the X server's root window is bigger than the actual screen. This is an XFree86 thing, and probably doesn't exist elsewhere. (It's available if the file /usr/include/X11/extensions/xf86vmode.h exists.) */ #undef HAVE_XF86VMODE /* Define this if you have the functions XF86VidModeGetGamma() and XF86VidModeSetGamma(), which allow clients to change the gamma response of the monitor. This is an XFree86 4.0.x thing, and probably doesn't exist elsewhere. (It's available if the file /usr/include/X11/extensions/xf86vmode.h exists and has stuff about gamma in it.) */ #undef HAVE_XF86VMODE_GAMMA /* Define this if you have the functions XF86VidModeGetGammaRamp() and XF86VidModeSetGammaRamp(), which provide finer-grained control than XF86VidMode[GS]etGamma(). These appeared in XFree86 4.1.0. */ #undef HAVE_XF86VMODE_GAMMA_RAMP /* Define this if you have libXft2. */ #undef HAVE_XFT /* Define this if you have the XHPDisableReset function (an HP only thing which allows the Ctrl-Sh-Reset key sequence to be temporarily disabled.) */ #undef HAVE_XHPDISABLERESET /* Define this if you have the Xinerama extension. This is standard on sufficiently-recent XFree86 systems, and possibly elsewhere. (It's available if the file /usr/include/X11/extensions/Xinerama.h exists.) */ #undef HAVE_XINERAMA /* Define this if you have the Xinput extension. This is standard since X11R5, and is thus almost everywhere. (It's available if the file /usr/include/X11/extensions/XInput.h exists.) */ #undef HAVE_XINPUT /* Define this if you have the XmComboBox Motif widget (Motif 2.0.) */ #undef HAVE_XMCOMBOBOX /* Define this if you have the XML library. */ #undef HAVE_XML /* Define this if you have the Xmu library. This is standard part of X, and if your vendor doesn't ship it, you should report that as a bug. */ #undef HAVE_XMU /* Define this if you have the XPM library installed. Some of the demos can make use of this if it is available. */ #undef HAVE_XPM /* Define this if you have the X Shared Memory Extension. */ #undef HAVE_XSHM_EXTENSION /* Define this if you have the function Xutf8DrawString(). */ #undef HAVE_XUTF8DRAWSTRING /* Define this to remove the option of locking the screen at all. */ #undef NO_LOCKING /* This is the same as GETTEXT_PACKAGE, but for the glade generated code. */ #undef PACKAGE /* Define to the address where bug reports for this package should be sent. */ #undef PACKAGE_BUGREPORT /* Define to the full name of this package. */ #undef PACKAGE_NAME /* Define to the full name and version of this package. */ #undef PACKAGE_STRING /* Define to the one symbol short name of this package. */ #undef PACKAGE_TARNAME /* Define to the home page for this package. */ #undef PACKAGE_URL /* Define to the version of this package. */ #undef PACKAGE_VERSION /* Whether PAM should check the result of account modules when authenticating. Only do this if you have account configured properly on your system. */ #undef PAM_CHECK_ACCOUNT_TYPE /* If PAM is being used, this is the name of the PAM service that xscreensaver will authenticate as. The default is "xscreensaver", which means that the PAM library will look for an "xscreensaver" line in /etc/pam.conf, or (on recent Linux systems) will look for a file called /etc/pam.d/xscreensaver. Some systems might already have a PAM installation that is configured for xlock, so setting this to "xlock" would also work in that case. */ #undef PAM_SERVICE_NAME /* Define if you have PAM and pam_strerror() requires two arguments. */ #undef PAM_STRERROR_TWO_ARGS /* Set the name of the password helper program, if any */ #undef PASSWD_HELPER_PROGRAM /* Define to necessary symbol if this constant uses a non-standard name on your system. */ #undef PTHREAD_CREATE_JOINABLE /* Define as the return type of signal handlers (`int' or `void'). */ #undef RETSIGTYPE /* Define to 1 if you have the ANSI C header files. */ #undef STDC_HEADERS /* Define to 1 if you can safely include both and . */ #undef TIME_WITH_SYS_TIME /* Define this to void* if you're using X11R4 or earlier. */ #undef XPointer /* Define to 1 if the X Window System is missing or not being used. */ #undef X_DISPLAY_MISSING /* Enable large inode numbers on Mac OS X 10.5. */ #ifndef _DARWIN_USE_64_BIT_INODE # define _DARWIN_USE_64_BIT_INODE 1 #endif /* Number of bits in a file offset, on hosts where this is settable. */ #undef _FILE_OFFSET_BITS /* Define for large files, on AIX-style hosts. */ #undef _LARGE_FILES /* Define to empty if `const' does not conform to ANSI C. */ #undef const /* Define to `__inline__' or `__inline' if that's what the C compiler calls it, or to nothing if 'inline' is not supported under any name. */ #ifndef __cplusplus #undef inline #endif /* Define to `int' if does not define. */ #undef mode_t /* Define to `int' if does not define. */ #undef pid_t /* Define to `unsigned int' if does not define. */ #undef size_t /* Define to `int' if or does not define. */ #undef socklen_t xscreensaver-5.36/config.h-vms000644 000767 000024 00000024614 10217402477 016372 0ustar00jwzstaff000000 000000 /* This is a config.h file that has been pregenerated (from config.h.in) * with settings that are correct for VMS. */ /* config.h.in --- xscreensaver, Copyright (c) 1998 Jamie Zawinski. * * The best way to set these parameters is by running the included `configure' * script. That examines your system, and generates `config.h' from * `config.h.in'. * * If something goes very wrong, you can edit `config.h' directly, but beware * that your changes will be lost if you ever run `configure' again. */ /* ************************************************************************* CONFIGURING SERVER EXTENSIONS ************************************************************************* */ /* Define this if you have the XReadDisplay extension (I think this is an SGI-only thing; it's in .) A few of the screenhacks will take advantage of this if it's available. */ #undef HAVE_READ_DISPLAY_EXTENSION /* Define this if you have the Iris Video Library (dmedia/vl.h on SGI.) A few of the screenhacks will take advantage of this if it's available. */ #undef HAVE_SGI_VIDEO /* Define this if you have the XHPDisableReset function (an HP only thing.) */ #undef HAVE_XHPDISABLERESET /* First, some background: there are three distinct server extensions which * are useful to a screen saver program: they are XIDLE, MIT-SCREEN-SAVER, * and SCREEN_SAVER. * * The XIDLE extension resides in .../contrib/extensions/xidle/ on the X11R5 * contrib tape. This extension lets the client get accurate idle-time * information from the X server in a potentially more reliable way than by * simply watching for keyboard and mouse activity. However, the XIDLE * extension has apparently not been ported to X11R6. * * The SCREEN_SAVER extension is found (as far as I know) only in the SGI * X server, and it exists in all releases since (at least) Irix 5. The * relevant header file is /usr/include/X11/extensions/XScreenSaver.h. * * The similarly-named MIT-SCREEN-SAVER extension came into existence long * after the SGI SCREEN_SAVER extension was already in use, and resides in * .../contrib/extensions/screensaver/ on the X11R6 contrib tape. It is * also found in certain recent X servers built in to NCD X terminals. * * The MIT extension does basically the same thing that the XIDLE extension * does, but there are two things wrong with it: first, because of the way * the extension was designed, the `fade' option to XScreenSaver will be * uglier: just before the screen fades out, there will be an unattractive * flicker to black, because this extension blanks the screen *before* * telling us that it is time to do so. Second, this extension is known to * be buggy; on the systems I use, it works, but some people have reported * X server crashes as a result of using it. XScreenSaver uses this * extension rather conservatively, because when I tried to use any of its * more complicated features, I could get it to crash the server at the * drop of a hat. * * In short, the MIT-SCREEN-SAVER extension is a piece of junk. The older * SGI SCREEN_SAVER extension works great, as does XIDLE. It would be nice * If those two existed on more systems, that is, would be adopted by the * X Consortium in favor of their inferior "not-invented-here" entry. */ /* Define this if you have the XIDLE extension installed. If you have the * XIDLE extension, this is recommended. (You have this extension if the * file /usr/include/X11/extensions/xidle.h exists.) Turning on this flag * lets XScreenSaver work better with servers which support this extension; * but it will still work with servers which do not suport it, so it's a good * idea to compile in support for it if you can. */ #undef HAVE_XIDLE_EXTENSION /* Define this if you have the MIT-SCREEN-SAVER extension installed. See the * caveats about this extension, above. (It's available if the file * /usr/include/X11/extensions/scrnsaver.h exists.) */ #undef HAVE_MIT_SAVER_EXTENSION /* Define this if you have the SGI SCREEN_SAVER extension. This is standard * on Irix systems, and not available elsewhere. */ #undef HAVE_SGI_SAVER_EXTENSION /* Define this if you have the SGI-VIDEO-CONTROL extension. This is standard * on Irix systems, and not available elsewhere. */ #undef HAVE_SGI_VC_EXTENSION /* Define this if you have the XDPMS extension. This is standard on * sufficiently-recent XFree86 systems, and possibly elsewhere. (It's * available if the file /usr/include/X11/extensions/dpms.h exists.) */ #define HAVE_DPMS_EXTENSION 1 /* ************************************************************************* CONFIGURING GRAPHICS TOOLKITS ************************************************************************* */ /* Define this if you have Motif. */ #define HAVE_MOTIF 1 /* Define this if you have the XmComboBox Motif widget (Motif 2.0.) */ #undef HAVE_XMCOMBOBOX /* Define this if you have the XPM library installed. Some of the demos can * make use of this if it is available. */ #define HAVE_XPM 1 /* Define this if you have the Xmu library. This is standard part of X, and * if your vendor doesn't ship it, you should report that as a bug. */ #define HAVE_XMU 1 /* Define this if you have OpenGL. Some of the demos require it, so if you * don't have it, then those particular demos won't be built. (This won't * affect the screen saver as a whole.) */ #undef HAVE_GL /* Define this if you have OpenGL, but it's the MesaGL variant. (The libraries have different names.) (HAVE_GL should be defined too.) */ #undef HAVE_MESA_GL /* Define this if your version of OpenGL has the glBindTexture() routine. This is the case for OpenGL 1.1, but not for OpenGL 1.0. */ #undef HAVE_GLBINDTEXTURE /* Define this if you have the X Shared Memory Extension. */ #undef HAVE_XSHM_EXTENSION /* ************************************************************************* CONFIGURING PASSWORD AUTHENTICATION ************************************************************************* */ /* Define this to remove the option of locking the screen at all. */ #undef NO_LOCKING /* Define this if you want to use Kerberos authentication to lock/unlock the * screen instead of your local password. This currently uses Kerberos V4, * but a V5 server with V4 compatibility will work. WARNING: DO NOT USE AFS * string-to-key passwords with this option. This option currently *only* * works with standard Kerberos des_string_to_key. If your password is an * AFS password and not a kerberos password, it will not authenticate * properly. See the comments in driver/kpasswd.c for more information if you * need it. */ #undef HAVE_KERBEROS /* Define this if your system uses `shadow' passwords, that is, the passwords * live in /etc/shadow instead of /etc/passwd, and one reads them with * getspnam() instead of getpwnam(). (Note that SCO systems do some random * other thing; others might as well. See the ifdefs in driver/passwd.c if * you're having trouble related to reading passwords.) */ #undef HAVE_SHADOW_PASSWD /* Define this if your system is Digital or SCO Unix with so-called ``Enhanced Security'', that is, the passwords live in /tcb/files/auth// instead of in /etc/passwd, and one reads them with getprpwnam() instead of getpwnam(). */ #undef HAVE_ENHANCED_PASSWD /* Define this if your system is Solaris with ``adjunct'' passwords (this is the version where one gets at the passwords with getpwanam() instead of getpwnam().) I haven't tested this one, let me know if it works. */ #undef HAVE_ADJUNCT_PASSWD /* Define this if you are running HPUX with so-called ``Secure Passwords'' (if you have /usr/include/hpsecurity.h, you probably have this.) I haven't tested this one, let me know if it works. */ #undef HAVE_HPUX_PASSWD /* Define this if you are on a system that supports the VT_LOCKSWITCH and VT_UNLOCKSWITCH ioctls. If this is defined, then when the screen is locked, switching to another virtual terminal will also be prevented. That is, the whole console will be locked, rather than just the VT on which X is running. */ #define HAVE_VT_LOCKSWITCH 1 /* ************************************************************************* OTHER C ENVIRONMENT JUNK ************************************************************************* */ /* Define this to void* if you're using X11R4 or earlier. */ #undef XPointer /* Define if you have the nice function. */ #undef HAVE_NICE /* Define if you have the setpriority function. */ #undef HAVE_SETPRIORITY /* Define to empty if the keyword does not work. */ #undef const /* Define if you have that is POSIX.1 compatible. */ #undef HAVE_SYS_WAIT_H /* Define as __inline if that's what the C compiler calls it. */ #undef inline /* Define to `int' if doesn't define. */ #undef mode_t /* Define to `int' if doesn't define. */ #undef pid_t /* Define as the return type of signal handlers (int or void). */ #define RETSIGTYPE void /* Define to `unsigned' if doesn't define. */ #undef size_t /* Define if you have the ANSI C header files. */ #define STDC_HEADERS 1 /* Define if you can safely include both and . */ #undef TIME_WITH_SYS_TIME /* Define if you have the gettimeofday function. */ #undef HAVE_GETTIMEOFDAY /* Define if gettimeofday requires two arguments. */ #undef GETTIMEOFDAY_TWO_ARGS /* Define if you have the putenv function. */ #undef HAVE_PUTENV /* Define if you have the select function. */ #undef HAVE_SELECT /* Define if you have the getcwd function. */ #undef HAVE_GETCWD /* Define if you have the getcwd function. */ #undef HAVE_GETWD /* Define if you have the uname function. */ #undef HAVE_UNAME #if (__VMS_VER >= 70000000) # define HAVE_UNAME 1 #endif /* Define if you have the fcntl function. */ #undef HAVE_FCNTL /* Define if you have the sigaction function. */ #undef HAVE_SIGACTION /* Define if you have the header file. */ #undef HAVE_UNISTD_H /* Define if you have the header file. */ #undef HAVE_CRYPT_H /* Define to use sigaction() instead of signal() for SIGCHLD-related activity. This is necessary at least on SCO OpenServer 5, due to a Unix kernel bug. */ #undef USE_SIGACTION xscreensaver-5.36/install-sh000644 000767 000024 00000012721 06346511402 016143 0ustar00jwzstaff000000 000000 #! /bin/sh # # install - install a program, script, or datafile # This comes from X11R5 (mit/util/scripts/install.sh). # # Copyright 1991 by the Massachusetts Institute of Technology # # 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, and that the name of M.I.T. not be used in advertising or # publicity pertaining to distribution of the software without specific, # written prior permission. M.I.T. makes no representations about the # suitability of this software for any purpose. It is provided "as is" # without express or implied warranty. # # Calling this script install-sh is preferred over install.sh, to prevent # `make' implicit rules from creating a file called install from it # when there is no Makefile. # # This script is compatible with the BSD install script, but was written # from scratch. It can only install one file at a time, a restriction # shared with many OS's install programs. # set DOITPROG to echo to test this script # Don't use :- since 4.3BSD and earlier shells don't like it. doit="${DOITPROG-}" # put in absolute paths if you don't have them in your path; or use env. vars. mvprog="${MVPROG-mv}" cpprog="${CPPROG-cp}" chmodprog="${CHMODPROG-chmod}" chownprog="${CHOWNPROG-chown}" chgrpprog="${CHGRPPROG-chgrp}" stripprog="${STRIPPROG-strip}" rmprog="${RMPROG-rm}" mkdirprog="${MKDIRPROG-mkdir}" transformbasename="" transform_arg="" instcmd="$mvprog" chmodcmd="$chmodprog 0755" chowncmd="" chgrpcmd="" stripcmd="" rmcmd="$rmprog -f" mvcmd="$mvprog" src="" dst="" dir_arg="" while [ x"$1" != x ]; do case $1 in -c) instcmd="$cpprog" shift continue;; -d) dir_arg=true shift continue;; -m) chmodcmd="$chmodprog $2" shift shift continue;; -o) chowncmd="$chownprog $2" shift shift continue;; -g) chgrpcmd="$chgrpprog $2" shift shift continue;; -s) stripcmd="$stripprog" shift continue;; -t=*) transformarg=`echo $1 | sed 's/-t=//'` shift continue;; -b=*) transformbasename=`echo $1 | sed 's/-b=//'` shift continue;; *) if [ x"$src" = x ] then src=$1 else # this colon is to work around a 386BSD /bin/sh bug : dst=$1 fi shift continue;; esac done if [ x"$src" = x ] then echo "install: no input file specified" exit 1 else true fi if [ x"$dir_arg" != x ]; then dst=$src src="" if [ -d $dst ]; then instcmd=: else instcmd=mkdir fi else # Waiting for this to be detected by the "$instcmd $src $dsttmp" command # might cause directories to be created, which would be especially bad # if $src (and thus $dsttmp) contains '*'. if [ -f $src -o -d $src ] then true else echo "install: $src does not exist" exit 1 fi if [ x"$dst" = x ] then echo "install: no destination specified" exit 1 else true fi # If destination is a directory, append the input filename; if your system # does not like double slashes in filenames, you may need to add some logic if [ -d $dst ] then dst="$dst"/`basename $src` else true fi fi ## this sed command emulates the dirname command dstdir=`echo $dst | sed -e 's,[^/]*$,,;s,/$,,;s,^$,.,'` # Make sure that the destination directory exists. # this part is taken from Noah Friedman's mkinstalldirs script # Skip lots of stat calls in the usual case. if [ ! -d "$dstdir" ]; then defaultIFS=' ' IFS="${IFS-${defaultIFS}}" oIFS="${IFS}" # Some sh's can't handle IFS=/ for some reason. IFS='%' set - `echo ${dstdir} | sed -e 's@/@%@g' -e 's@^%@/@'` IFS="${oIFS}" pathcomp='' while [ $# -ne 0 ] ; do pathcomp="${pathcomp}${1}" shift if [ ! -d "${pathcomp}" ] ; then $mkdirprog "${pathcomp}" else true fi pathcomp="${pathcomp}/" done fi if [ x"$dir_arg" != x ] then $doit $instcmd $dst && if [ x"$chowncmd" != x ]; then $doit $chowncmd $dst; else true ; fi && if [ x"$chgrpcmd" != x ]; then $doit $chgrpcmd $dst; else true ; fi && if [ x"$stripcmd" != x ]; then $doit $stripcmd $dst; else true ; fi && if [ x"$chmodcmd" != x ]; then $doit $chmodcmd $dst; else true ; fi else # If we're going to rename the final executable, determine the name now. if [ x"$transformarg" = x ] then dstfile=`basename $dst` else dstfile=`basename $dst $transformbasename | sed $transformarg`$transformbasename fi # don't allow the sed command to completely eliminate the filename if [ x"$dstfile" = x ] then dstfile=`basename $dst` else true fi # Make a temp file name in the proper directory. dsttmp=$dstdir/#inst.$$# # Move or copy the file name to the temp name $doit $instcmd $src $dsttmp && trap "rm -f ${dsttmp}" 0 && # and set any options; do chmod last to preserve setuid bits # If any of these fail, we abort the whole thing. If we want to # ignore errors from any of these, just make sure not to ignore # errors from the above "$doit $instcmd $src $dsttmp" command. if [ x"$chowncmd" != x ]; then $doit $chowncmd $dsttmp; else true;fi && if [ x"$chgrpcmd" != x ]; then $doit $chgrpcmd $dsttmp; else true;fi && if [ x"$stripcmd" != x ]; then $doit $stripcmd $dsttmp; else true;fi && if [ x"$chmodcmd" != x ]; then $doit $chmodcmd $dsttmp; else true;fi && # Now rename the file to the real destination. $doit $rmcmd -f $dstdir/$dstfile && $doit $mvcmd $dsttmp $dstdir/$dstfile fi && exit 0 xscreensaver-5.36/setup.com000664 000767 000024 00000007537 12777052475 016034 0ustar00jwzstaff000000 000000 $! Xscreensaver - definition of various DCL symbols $ set NOON $ set def [.HACKS] $ mydisk = f$trnlmn("SYS$DISK") $ mydir = mydisk+f$directory() $ abstractile :== $'mydir'abstractile $ anemone :== $'mydir'anemone $ anemotaxis :== $'mydir'anemotaxis $ apollonian :== $'mydir'apollonian $ apple2 :== $'mydir'apple2 $ attraction :== $'mydir'attraction $ barcode :== $'mydir'barcode $ binaryring :== $'mydir'binaryring $ blaster :== $'mydir'blaster $ blitspin :== $'mydir'blitspin $ bouboule :== $'mydir'bouboule $ boxfit :== $'mydir'boxfit $ braid :== $'mydir'braid $ bsod :== $'mydir'bsod $ bumps :== $'mydir'bumps $ ccurve :== $'mydir'ccurve $ celtic :== $'mydir'celtic $ cloudlife :== $'mydir'cloudlife $ compass :== $'mydir'compass $ coral :== $'mydir'coral $ crystal :== $'mydir'crystal $ cwaves :== $'mydir'cwaves $ cynosure :== $'mydir'cynosure $ decayscreen :== $'mydir'decayscreen $ deco :== $'mydir'deco $ deluxe :== $'mydir'deluxe $ demon :== $'mydir'demon $ discrete :== $'mydir'discrete $ distort :== $'mydir'distort $ drift :== $'mydir'drift $ epicycle :== $'mydir'epicycle $ eruption :== $'mydir'eruption $ euler2d :== $'mydir'euler2d $ fadeplot :== $'mydir'fadeplot $ fiberlamp :== $'mydir'fiberlamp $ fireworkx :== $'mydir'fireworkx $ flame :== $'mydir'flame $ flow :== $'mydir'flow $ fluidballs :== $'mydir'fluidballs $ fontglide :== $'mydir'fontglide $ fuzzyflakes :== $'mydir'fuzzyflakes $ galaxy :== $'mydir'galaxy $ goop :== $'mydir'goop $ grav :== $'mydir'grav $ greynetic :== $'mydir'greynetic $ halftone :== $'mydir'halftone $ halo :== $'mydir'halo $ helix :== $'mydir'helix $ hexadrop :== $'mydir'hexadrop $ hopalong :== $'mydir'hopalong $ ifs :== $'mydir'ifs $ imsmap :== $'mydir'imsmap $ interaggregate :== $'mydir'interaggregate $ interference :== $'mydir'interference $ intermomentary :== $'mydir'intermomentary $ julia :== $'mydir'julia $ kaleidescope :== $'mydir'kaleidescope $ kumppa :== $'mydir'kumppa $ lcdscrub :== $'mydir'lcdscrub $ loop :== $'mydir'loop $ m6502 :== $'mydir'm6502 $ maze :== $'mydir'maze $ memscroller :== $'mydir'memscroller $ metaballs :== $'mydir'metaballs $ moire :== $'mydir'moire $ moire2 :== $'mydir'moire2 $ mountain :== $'mydir'mountain $ munch :== $'mydir'munch $ nerverot :== $'mydir'nerverot $ noseguy :== $'mydir'noseguy $ pacman :== $'mydir'pacman $ pedal :== $'mydir'pedal $ penetrate :== $'mydir'penetrate $ penrose :== $'mydir'penrose $ petri :== $'mydir'petri $ phosphor :== $'mydir'phosphor $ piecewise :== $'mydir'piecewise $ polyominoes :== $'mydir'polyominoes $ pong :== $'mydir'pong $ popsquares :== $'mydir'popsquares $ pyro :== $'mydir'pyro $ qix :== $'mydir'qix $ rd-bomb :== $'mydir'rd-bomb $ ripples :== $'mydir'ripples $ rocks :== $'mydir'rocks $ rorschach :== $'mydir'rorschach $ rotzoomer :== $'mydir'rotzoomer $ shadebobs :== $'mydir'shadebobs $ sierpinski :== $'mydir'sierpinski $ slidescreen :== $'mydir'slidescreen $ slip :== $'mydir'slip $ speedmine :== $'mydir'speedmine $ spotlight :== $'mydir'spotlight $ squiral :== $'mydir'squiral $ starfish :== $'mydir'starfish $ strange :== $'mydir'strange $ substrate :== $'mydir'substrate $ swirl :== $'mydir'swirl $ tessellimage :== $'mydir'tessellimage $ thornbird :== $'mydir'thornbird $ triangle :== $'mydir'triangle $ truchet :== $'mydir'truchet $ twang :== $'mydir'twang $ vermiculate :== $'mydir'vermiculate $ wander :== $'mydir'wander $ webcollage-helper :== $'mydir'webcollage-helper $ whirlwindwarp :== $'mydir'whirlwindwarp $ wormhole :== $'mydir'wormhole $ xanalogtv :== $'mydir'xanalogtv $ xflame :== $'mydir'xflame $ xjack :== $'mydir'xjack $ xlyap :== $'mydir'xlyap $ xmatrix :== $'mydir'xmatrix $ xrayswarm :== $'mydir'xrayswarm $ xspirograph :== $'mydir'xspirograph $ zoom :== $'mydir'zoom $ set def [-.DRIVER] $ mydir = mydisk+f$directory() $ xscreensaver :== $'mydir'xscreensaver $ xscreen*command :== $'mydir'xscreensaver-command $ set def [-] $ exit xscreensaver-5.36/config.guess000664 000767 000024 00000131355 12250746671 016477 0ustar00jwzstaff000000 000000 #! /bin/sh # Attempt to guess a canonical system name. # Copyright 1992-2013 Free Software Foundation, Inc. timestamp='2013-11-29' # This file is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, see . # # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that # program. This Exception is an additional permission under section 7 # of the GNU General Public License, version 3 ("GPLv3"). # # Originally written by Per Bothner. # # You can get the latest version of this script from: # http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess;hb=HEAD # # Please send patches with a ChangeLog entry to config-patches@gnu.org. me=`echo "$0" | sed -e 's,.*/,,'` usage="\ Usage: $0 [OPTION] Output the configuration name of the system \`$me' is run on. Operation modes: -h, --help print this help, then exit -t, --time-stamp print date of last modification, then exit -v, --version print version number, then exit Report bugs and patches to ." version="\ GNU config.guess ($timestamp) Originally written by Per Bothner. Copyright 1992-2013 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." help=" Try \`$me --help' for more information." # Parse command line while test $# -gt 0 ; do case $1 in --time-stamp | --time* | -t ) echo "$timestamp" ; exit ;; --version | -v ) echo "$version" ; exit ;; --help | --h* | -h ) echo "$usage"; exit ;; -- ) # Stop option processing shift; break ;; - ) # Use stdin as input. break ;; -* ) echo "$me: invalid option $1$help" >&2 exit 1 ;; * ) break ;; esac done if test $# != 0; then echo "$me: too many arguments$help" >&2 exit 1 fi trap 'exit 1' 1 2 15 # CC_FOR_BUILD -- compiler used by this script. Note that the use of a # compiler to aid in system detection is discouraged as it requires # temporary files to be created and, as you can see below, it is a # headache to deal with in a portable fashion. # Historically, `CC_FOR_BUILD' used to be named `HOST_CC'. We still # use `HOST_CC' if defined, but it is deprecated. # Portable tmp directory creation inspired by the Autoconf team. set_cc_for_build=' trap "exitcode=\$?; (rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null) && exit \$exitcode" 0 ; trap "rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null; exit 1" 1 2 13 15 ; : ${TMPDIR=/tmp} ; { tmp=`(umask 077 && mktemp -d "$TMPDIR/cgXXXXXX") 2>/dev/null` && test -n "$tmp" && test -d "$tmp" ; } || { test -n "$RANDOM" && tmp=$TMPDIR/cg$$-$RANDOM && (umask 077 && mkdir $tmp) ; } || { tmp=$TMPDIR/cg-$$ && (umask 077 && mkdir $tmp) && echo "Warning: creating insecure temp directory" >&2 ; } || { echo "$me: cannot create a temporary directory in $TMPDIR" >&2 ; exit 1 ; } ; dummy=$tmp/dummy ; tmpfiles="$dummy.c $dummy.o $dummy.rel $dummy" ; case $CC_FOR_BUILD,$HOST_CC,$CC in ,,) echo "int x;" > $dummy.c ; for c in cc gcc c89 c99 ; do if ($c -c -o $dummy.o $dummy.c) >/dev/null 2>&1 ; then CC_FOR_BUILD="$c"; break ; fi ; done ; if test x"$CC_FOR_BUILD" = x ; then CC_FOR_BUILD=no_compiler_found ; fi ;; ,,*) CC_FOR_BUILD=$CC ;; ,*,*) CC_FOR_BUILD=$HOST_CC ;; esac ; set_cc_for_build= ;' # This is needed to find uname on a Pyramid OSx when run in the BSD universe. # (ghazi@noc.rutgers.edu 1994-08-24) if (test -f /.attbin/uname) >/dev/null 2>&1 ; then PATH=$PATH:/.attbin ; export PATH fi UNAME_MACHINE=`(uname -m) 2>/dev/null` || UNAME_MACHINE=unknown UNAME_RELEASE=`(uname -r) 2>/dev/null` || UNAME_RELEASE=unknown UNAME_SYSTEM=`(uname -s) 2>/dev/null` || UNAME_SYSTEM=unknown UNAME_VERSION=`(uname -v) 2>/dev/null` || UNAME_VERSION=unknown case "${UNAME_SYSTEM}" in Linux|GNU|GNU/*) # If the system lacks a compiler, then just pick glibc. # We could probably try harder. LIBC=gnu eval $set_cc_for_build cat <<-EOF > $dummy.c #include #if defined(__UCLIBC__) LIBC=uclibc #elif defined(__dietlibc__) LIBC=dietlibc #else LIBC=gnu #endif EOF eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep '^LIBC'` ;; esac # Note: order is significant - the case branches are not exclusive. case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in *:NetBSD:*:*) # NetBSD (nbsd) targets should (where applicable) match one or # more of the tuples: *-*-netbsdelf*, *-*-netbsdaout*, # *-*-netbsdecoff* and *-*-netbsd*. For targets that recently # switched to ELF, *-*-netbsd* would select the old # object file format. This provides both forward # compatibility and a consistent mechanism for selecting the # object file format. # # Note: NetBSD doesn't particularly care about the vendor # portion of the name. We always set it to "unknown". sysctl="sysctl -n hw.machine_arch" UNAME_MACHINE_ARCH=`(/sbin/$sysctl 2>/dev/null || \ /usr/sbin/$sysctl 2>/dev/null || echo unknown)` case "${UNAME_MACHINE_ARCH}" in armeb) machine=armeb-unknown ;; arm*) machine=arm-unknown ;; sh3el) machine=shl-unknown ;; sh3eb) machine=sh-unknown ;; sh5el) machine=sh5le-unknown ;; *) machine=${UNAME_MACHINE_ARCH}-unknown ;; esac # The Operating System including object format, if it has switched # to ELF recently, or will in the future. case "${UNAME_MACHINE_ARCH}" in arm*|i386|m68k|ns32k|sh3*|sparc|vax) eval $set_cc_for_build if echo __ELF__ | $CC_FOR_BUILD -E - 2>/dev/null \ | grep -q __ELF__ then # Once all utilities can be ECOFF (netbsdecoff) or a.out (netbsdaout). # Return netbsd for either. FIX? os=netbsd else os=netbsdelf fi ;; *) os=netbsd ;; esac # The OS release # Debian GNU/NetBSD machines have a different userland, and # thus, need a distinct triplet. However, they do not need # kernel version information, so it can be replaced with a # suitable tag, in the style of linux-gnu. case "${UNAME_VERSION}" in Debian*) release='-gnu' ;; *) release=`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'` ;; esac # Since CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM: # contains redundant information, the shorter form: # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM is used. echo "${machine}-${os}${release}" exit ;; *:Bitrig:*:*) UNAME_MACHINE_ARCH=`arch | sed 's/Bitrig.//'` echo ${UNAME_MACHINE_ARCH}-unknown-bitrig${UNAME_RELEASE} exit ;; *:OpenBSD:*:*) UNAME_MACHINE_ARCH=`arch | sed 's/OpenBSD.//'` echo ${UNAME_MACHINE_ARCH}-unknown-openbsd${UNAME_RELEASE} exit ;; *:ekkoBSD:*:*) echo ${UNAME_MACHINE}-unknown-ekkobsd${UNAME_RELEASE} exit ;; *:SolidBSD:*:*) echo ${UNAME_MACHINE}-unknown-solidbsd${UNAME_RELEASE} exit ;; macppc:MirBSD:*:*) echo powerpc-unknown-mirbsd${UNAME_RELEASE} exit ;; *:MirBSD:*:*) echo ${UNAME_MACHINE}-unknown-mirbsd${UNAME_RELEASE} exit ;; alpha:OSF1:*:*) case $UNAME_RELEASE in *4.0) UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $3}'` ;; *5.*) UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $4}'` ;; esac # According to Compaq, /usr/sbin/psrinfo has been available on # OSF/1 and Tru64 systems produced since 1995. I hope that # covers most systems running today. This code pipes the CPU # types through head -n 1, so we only detect the type of CPU 0. ALPHA_CPU_TYPE=`/usr/sbin/psrinfo -v | sed -n -e 's/^ The alpha \(.*\) processor.*$/\1/p' | head -n 1` case "$ALPHA_CPU_TYPE" in "EV4 (21064)") UNAME_MACHINE="alpha" ;; "EV4.5 (21064)") UNAME_MACHINE="alpha" ;; "LCA4 (21066/21068)") UNAME_MACHINE="alpha" ;; "EV5 (21164)") UNAME_MACHINE="alphaev5" ;; "EV5.6 (21164A)") UNAME_MACHINE="alphaev56" ;; "EV5.6 (21164PC)") UNAME_MACHINE="alphapca56" ;; "EV5.7 (21164PC)") UNAME_MACHINE="alphapca57" ;; "EV6 (21264)") UNAME_MACHINE="alphaev6" ;; "EV6.7 (21264A)") UNAME_MACHINE="alphaev67" ;; "EV6.8CB (21264C)") UNAME_MACHINE="alphaev68" ;; "EV6.8AL (21264B)") UNAME_MACHINE="alphaev68" ;; "EV6.8CX (21264D)") UNAME_MACHINE="alphaev68" ;; "EV6.9A (21264/EV69A)") UNAME_MACHINE="alphaev69" ;; "EV7 (21364)") UNAME_MACHINE="alphaev7" ;; "EV7.9 (21364A)") UNAME_MACHINE="alphaev79" ;; esac # A Pn.n version is a patched version. # A Vn.n version is a released version. # A Tn.n version is a released field test version. # A Xn.n version is an unreleased experimental baselevel. # 1.2 uses "1.2" for uname -r. echo ${UNAME_MACHINE}-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^[PVTX]//' | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` # Reset EXIT trap before exiting to avoid spurious non-zero exit code. exitcode=$? trap '' 0 exit $exitcode ;; Alpha\ *:Windows_NT*:*) # How do we know it's Interix rather than the generic POSIX subsystem? # Should we change UNAME_MACHINE based on the output of uname instead # of the specific Alpha model? echo alpha-pc-interix exit ;; 21064:Windows_NT:50:3) echo alpha-dec-winnt3.5 exit ;; Amiga*:UNIX_System_V:4.0:*) echo m68k-unknown-sysv4 exit ;; *:[Aa]miga[Oo][Ss]:*:*) echo ${UNAME_MACHINE}-unknown-amigaos exit ;; *:[Mm]orph[Oo][Ss]:*:*) echo ${UNAME_MACHINE}-unknown-morphos exit ;; *:OS/390:*:*) echo i370-ibm-openedition exit ;; *:z/VM:*:*) echo s390-ibm-zvmoe exit ;; *:OS400:*:*) echo powerpc-ibm-os400 exit ;; arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*) echo arm-acorn-riscix${UNAME_RELEASE} exit ;; arm*:riscos:*:*|arm*:RISCOS:*:*) echo arm-unknown-riscos exit ;; SR2?01:HI-UX/MPP:*:* | SR8000:HI-UX/MPP:*:*) echo hppa1.1-hitachi-hiuxmpp exit ;; Pyramid*:OSx*:*:* | MIS*:OSx*:*:* | MIS*:SMP_DC-OSx*:*:*) # akee@wpdis03.wpafb.af.mil (Earle F. Ake) contributed MIS and NILE. if test "`(/bin/universe) 2>/dev/null`" = att ; then echo pyramid-pyramid-sysv3 else echo pyramid-pyramid-bsd fi exit ;; NILE*:*:*:dcosx) echo pyramid-pyramid-svr4 exit ;; DRS?6000:unix:4.0:6*) echo sparc-icl-nx6 exit ;; DRS?6000:UNIX_SV:4.2*:7* | DRS?6000:isis:4.2*:7*) case `/usr/bin/uname -p` in sparc) echo sparc-icl-nx7; exit ;; esac ;; s390x:SunOS:*:*) echo ${UNAME_MACHINE}-ibm-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; sun4H:SunOS:5.*:*) echo sparc-hal-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; sun4*:SunOS:5.*:* | tadpole*:SunOS:5.*:*) echo sparc-sun-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; i86pc:AuroraUX:5.*:* | i86xen:AuroraUX:5.*:*) echo i386-pc-auroraux${UNAME_RELEASE} exit ;; i86pc:SunOS:5.*:* | i86xen:SunOS:5.*:*) eval $set_cc_for_build SUN_ARCH="i386" # If there is a compiler, see if it is configured for 64-bit objects. # Note that the Sun cc does not turn __LP64__ into 1 like gcc does. # This test works for both compilers. if [ "$CC_FOR_BUILD" != 'no_compiler_found' ]; then if (echo '#ifdef __amd64'; echo IS_64BIT_ARCH; echo '#endif') | \ (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | \ grep IS_64BIT_ARCH >/dev/null then SUN_ARCH="x86_64" fi fi echo ${SUN_ARCH}-pc-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; sun4*:SunOS:6*:*) # According to config.sub, this is the proper way to canonicalize # SunOS6. Hard to guess exactly what SunOS6 will be like, but # it's likely to be more like Solaris than SunOS4. echo sparc-sun-solaris3`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; sun4*:SunOS:*:*) case "`/usr/bin/arch -k`" in Series*|S4*) UNAME_RELEASE=`uname -v` ;; esac # Japanese Language versions have a version number like `4.1.3-JL'. echo sparc-sun-sunos`echo ${UNAME_RELEASE}|sed -e 's/-/_/'` exit ;; sun3*:SunOS:*:*) echo m68k-sun-sunos${UNAME_RELEASE} exit ;; sun*:*:4.2BSD:*) UNAME_RELEASE=`(sed 1q /etc/motd | awk '{print substr($5,1,3)}') 2>/dev/null` test "x${UNAME_RELEASE}" = "x" && UNAME_RELEASE=3 case "`/bin/arch`" in sun3) echo m68k-sun-sunos${UNAME_RELEASE} ;; sun4) echo sparc-sun-sunos${UNAME_RELEASE} ;; esac exit ;; aushp:SunOS:*:*) echo sparc-auspex-sunos${UNAME_RELEASE} exit ;; # The situation for MiNT is a little confusing. The machine name # can be virtually everything (everything which is not # "atarist" or "atariste" at least should have a processor # > m68000). The system name ranges from "MiNT" over "FreeMiNT" # to the lowercase version "mint" (or "freemint"). Finally # the system name "TOS" denotes a system which is actually not # MiNT. But MiNT is downward compatible to TOS, so this should # be no problem. atarist[e]:*MiNT:*:* | atarist[e]:*mint:*:* | atarist[e]:*TOS:*:*) echo m68k-atari-mint${UNAME_RELEASE} exit ;; atari*:*MiNT:*:* | atari*:*mint:*:* | atarist[e]:*TOS:*:*) echo m68k-atari-mint${UNAME_RELEASE} exit ;; *falcon*:*MiNT:*:* | *falcon*:*mint:*:* | *falcon*:*TOS:*:*) echo m68k-atari-mint${UNAME_RELEASE} exit ;; milan*:*MiNT:*:* | milan*:*mint:*:* | *milan*:*TOS:*:*) echo m68k-milan-mint${UNAME_RELEASE} exit ;; hades*:*MiNT:*:* | hades*:*mint:*:* | *hades*:*TOS:*:*) echo m68k-hades-mint${UNAME_RELEASE} exit ;; *:*MiNT:*:* | *:*mint:*:* | *:*TOS:*:*) echo m68k-unknown-mint${UNAME_RELEASE} exit ;; m68k:machten:*:*) echo m68k-apple-machten${UNAME_RELEASE} exit ;; powerpc:machten:*:*) echo powerpc-apple-machten${UNAME_RELEASE} exit ;; RISC*:Mach:*:*) echo mips-dec-mach_bsd4.3 exit ;; RISC*:ULTRIX:*:*) echo mips-dec-ultrix${UNAME_RELEASE} exit ;; VAX*:ULTRIX*:*:*) echo vax-dec-ultrix${UNAME_RELEASE} exit ;; 2020:CLIX:*:* | 2430:CLIX:*:*) echo clipper-intergraph-clix${UNAME_RELEASE} exit ;; mips:*:*:UMIPS | mips:*:*:RISCos) eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #ifdef __cplusplus #include /* for printf() prototype */ int main (int argc, char *argv[]) { #else int main (argc, argv) int argc; char *argv[]; { #endif #if defined (host_mips) && defined (MIPSEB) #if defined (SYSTYPE_SYSV) printf ("mips-mips-riscos%ssysv\n", argv[1]); exit (0); #endif #if defined (SYSTYPE_SVR4) printf ("mips-mips-riscos%ssvr4\n", argv[1]); exit (0); #endif #if defined (SYSTYPE_BSD43) || defined(SYSTYPE_BSD) printf ("mips-mips-riscos%sbsd\n", argv[1]); exit (0); #endif #endif exit (-1); } EOF $CC_FOR_BUILD -o $dummy $dummy.c && dummyarg=`echo "${UNAME_RELEASE}" | sed -n 's/\([0-9]*\).*/\1/p'` && SYSTEM_NAME=`$dummy $dummyarg` && { echo "$SYSTEM_NAME"; exit; } echo mips-mips-riscos${UNAME_RELEASE} exit ;; Motorola:PowerMAX_OS:*:*) echo powerpc-motorola-powermax exit ;; Motorola:*:4.3:PL8-*) echo powerpc-harris-powermax exit ;; Night_Hawk:*:*:PowerMAX_OS | Synergy:PowerMAX_OS:*:*) echo powerpc-harris-powermax exit ;; Night_Hawk:Power_UNIX:*:*) echo powerpc-harris-powerunix exit ;; m88k:CX/UX:7*:*) echo m88k-harris-cxux7 exit ;; m88k:*:4*:R4*) echo m88k-motorola-sysv4 exit ;; m88k:*:3*:R3*) echo m88k-motorola-sysv3 exit ;; AViiON:dgux:*:*) # DG/UX returns AViiON for all architectures UNAME_PROCESSOR=`/usr/bin/uname -p` if [ $UNAME_PROCESSOR = mc88100 ] || [ $UNAME_PROCESSOR = mc88110 ] then if [ ${TARGET_BINARY_INTERFACE}x = m88kdguxelfx ] || \ [ ${TARGET_BINARY_INTERFACE}x = x ] then echo m88k-dg-dgux${UNAME_RELEASE} else echo m88k-dg-dguxbcs${UNAME_RELEASE} fi else echo i586-dg-dgux${UNAME_RELEASE} fi exit ;; M88*:DolphinOS:*:*) # DolphinOS (SVR3) echo m88k-dolphin-sysv3 exit ;; M88*:*:R3*:*) # Delta 88k system running SVR3 echo m88k-motorola-sysv3 exit ;; XD88*:*:*:*) # Tektronix XD88 system running UTekV (SVR3) echo m88k-tektronix-sysv3 exit ;; Tek43[0-9][0-9]:UTek:*:*) # Tektronix 4300 system running UTek (BSD) echo m68k-tektronix-bsd exit ;; *:IRIX*:*:*) echo mips-sgi-irix`echo ${UNAME_RELEASE}|sed -e 's/-/_/g'` exit ;; ????????:AIX?:[12].1:2) # AIX 2.2.1 or AIX 2.1.1 is RT/PC AIX. echo romp-ibm-aix # uname -m gives an 8 hex-code CPU id exit ;; # Note that: echo "'`uname -s`'" gives 'AIX ' i*86:AIX:*:*) echo i386-ibm-aix exit ;; ia64:AIX:*:*) if [ -x /usr/bin/oslevel ] ; then IBM_REV=`/usr/bin/oslevel` else IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE} fi echo ${UNAME_MACHINE}-ibm-aix${IBM_REV} exit ;; *:AIX:2:3) if grep bos325 /usr/include/stdio.h >/dev/null 2>&1; then eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #include main() { if (!__power_pc()) exit(1); puts("powerpc-ibm-aix3.2.5"); exit(0); } EOF if $CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy` then echo "$SYSTEM_NAME" else echo rs6000-ibm-aix3.2.5 fi elif grep bos324 /usr/include/stdio.h >/dev/null 2>&1; then echo rs6000-ibm-aix3.2.4 else echo rs6000-ibm-aix3.2 fi exit ;; *:AIX:*:[4567]) IBM_CPU_ID=`/usr/sbin/lsdev -C -c processor -S available | sed 1q | awk '{ print $1 }'` if /usr/sbin/lsattr -El ${IBM_CPU_ID} | grep ' POWER' >/dev/null 2>&1; then IBM_ARCH=rs6000 else IBM_ARCH=powerpc fi if [ -x /usr/bin/oslevel ] ; then IBM_REV=`/usr/bin/oslevel` else IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE} fi echo ${IBM_ARCH}-ibm-aix${IBM_REV} exit ;; *:AIX:*:*) echo rs6000-ibm-aix exit ;; ibmrt:4.4BSD:*|romp-ibm:BSD:*) echo romp-ibm-bsd4.4 exit ;; ibmrt:*BSD:*|romp-ibm:BSD:*) # covers RT/PC BSD and echo romp-ibm-bsd${UNAME_RELEASE} # 4.3 with uname added to exit ;; # report: romp-ibm BSD 4.3 *:BOSX:*:*) echo rs6000-bull-bosx exit ;; DPX/2?00:B.O.S.:*:*) echo m68k-bull-sysv3 exit ;; 9000/[34]??:4.3bsd:1.*:*) echo m68k-hp-bsd exit ;; hp300:4.4BSD:*:* | 9000/[34]??:4.3bsd:2.*:*) echo m68k-hp-bsd4.4 exit ;; 9000/[34678]??:HP-UX:*:*) HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'` case "${UNAME_MACHINE}" in 9000/31? ) HP_ARCH=m68000 ;; 9000/[34]?? ) HP_ARCH=m68k ;; 9000/[678][0-9][0-9]) if [ -x /usr/bin/getconf ]; then sc_cpu_version=`/usr/bin/getconf SC_CPU_VERSION 2>/dev/null` sc_kernel_bits=`/usr/bin/getconf SC_KERNEL_BITS 2>/dev/null` case "${sc_cpu_version}" in 523) HP_ARCH="hppa1.0" ;; # CPU_PA_RISC1_0 528) HP_ARCH="hppa1.1" ;; # CPU_PA_RISC1_1 532) # CPU_PA_RISC2_0 case "${sc_kernel_bits}" in 32) HP_ARCH="hppa2.0n" ;; 64) HP_ARCH="hppa2.0w" ;; '') HP_ARCH="hppa2.0" ;; # HP-UX 10.20 esac ;; esac fi if [ "${HP_ARCH}" = "" ]; then eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #define _HPUX_SOURCE #include #include int main () { #if defined(_SC_KERNEL_BITS) long bits = sysconf(_SC_KERNEL_BITS); #endif long cpu = sysconf (_SC_CPU_VERSION); switch (cpu) { case CPU_PA_RISC1_0: puts ("hppa1.0"); break; case CPU_PA_RISC1_1: puts ("hppa1.1"); break; case CPU_PA_RISC2_0: #if defined(_SC_KERNEL_BITS) switch (bits) { case 64: puts ("hppa2.0w"); break; case 32: puts ("hppa2.0n"); break; default: puts ("hppa2.0"); break; } break; #else /* !defined(_SC_KERNEL_BITS) */ puts ("hppa2.0"); break; #endif default: puts ("hppa1.0"); break; } exit (0); } EOF (CCOPTS= $CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null) && HP_ARCH=`$dummy` test -z "$HP_ARCH" && HP_ARCH=hppa fi ;; esac if [ ${HP_ARCH} = "hppa2.0w" ] then eval $set_cc_for_build # hppa2.0w-hp-hpux* has a 64-bit kernel and a compiler generating # 32-bit code. hppa64-hp-hpux* has the same kernel and a compiler # generating 64-bit code. GNU and HP use different nomenclature: # # $ CC_FOR_BUILD=cc ./config.guess # => hppa2.0w-hp-hpux11.23 # $ CC_FOR_BUILD="cc +DA2.0w" ./config.guess # => hppa64-hp-hpux11.23 if echo __LP64__ | (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | grep -q __LP64__ then HP_ARCH="hppa2.0w" else HP_ARCH="hppa64" fi fi echo ${HP_ARCH}-hp-hpux${HPUX_REV} exit ;; ia64:HP-UX:*:*) HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'` echo ia64-hp-hpux${HPUX_REV} exit ;; 3050*:HI-UX:*:*) eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #include int main () { long cpu = sysconf (_SC_CPU_VERSION); /* The order matters, because CPU_IS_HP_MC68K erroneously returns true for CPU_PA_RISC1_0. CPU_IS_PA_RISC returns correct results, however. */ if (CPU_IS_PA_RISC (cpu)) { switch (cpu) { case CPU_PA_RISC1_0: puts ("hppa1.0-hitachi-hiuxwe2"); break; case CPU_PA_RISC1_1: puts ("hppa1.1-hitachi-hiuxwe2"); break; case CPU_PA_RISC2_0: puts ("hppa2.0-hitachi-hiuxwe2"); break; default: puts ("hppa-hitachi-hiuxwe2"); break; } } else if (CPU_IS_HP_MC68K (cpu)) puts ("m68k-hitachi-hiuxwe2"); else puts ("unknown-hitachi-hiuxwe2"); exit (0); } EOF $CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy` && { echo "$SYSTEM_NAME"; exit; } echo unknown-hitachi-hiuxwe2 exit ;; 9000/7??:4.3bsd:*:* | 9000/8?[79]:4.3bsd:*:* ) echo hppa1.1-hp-bsd exit ;; 9000/8??:4.3bsd:*:*) echo hppa1.0-hp-bsd exit ;; *9??*:MPE/iX:*:* | *3000*:MPE/iX:*:*) echo hppa1.0-hp-mpeix exit ;; hp7??:OSF1:*:* | hp8?[79]:OSF1:*:* ) echo hppa1.1-hp-osf exit ;; hp8??:OSF1:*:*) echo hppa1.0-hp-osf exit ;; i*86:OSF1:*:*) if [ -x /usr/sbin/sysversion ] ; then echo ${UNAME_MACHINE}-unknown-osf1mk else echo ${UNAME_MACHINE}-unknown-osf1 fi exit ;; parisc*:Lites*:*:*) echo hppa1.1-hp-lites exit ;; C1*:ConvexOS:*:* | convex:ConvexOS:C1*:*) echo c1-convex-bsd exit ;; C2*:ConvexOS:*:* | convex:ConvexOS:C2*:*) if getsysinfo -f scalar_acc then echo c32-convex-bsd else echo c2-convex-bsd fi exit ;; C34*:ConvexOS:*:* | convex:ConvexOS:C34*:*) echo c34-convex-bsd exit ;; C38*:ConvexOS:*:* | convex:ConvexOS:C38*:*) echo c38-convex-bsd exit ;; C4*:ConvexOS:*:* | convex:ConvexOS:C4*:*) echo c4-convex-bsd exit ;; CRAY*Y-MP:*:*:*) echo ymp-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit ;; CRAY*[A-Z]90:*:*:*) echo ${UNAME_MACHINE}-cray-unicos${UNAME_RELEASE} \ | sed -e 's/CRAY.*\([A-Z]90\)/\1/' \ -e y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/ \ -e 's/\.[^.]*$/.X/' exit ;; CRAY*TS:*:*:*) echo t90-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit ;; CRAY*T3E:*:*:*) echo alphaev5-cray-unicosmk${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit ;; CRAY*SV1:*:*:*) echo sv1-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit ;; *:UNICOS/mp:*:*) echo craynv-cray-unicosmp${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit ;; F30[01]:UNIX_System_V:*:* | F700:UNIX_System_V:*:*) FUJITSU_PROC=`uname -m | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'` FUJITSU_REL=`echo ${UNAME_RELEASE} | sed -e 's/ /_/'` echo "${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" exit ;; 5000:UNIX_System_V:4.*:*) FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'` FUJITSU_REL=`echo ${UNAME_RELEASE} | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/ /_/'` echo "sparc-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" exit ;; i*86:BSD/386:*:* | i*86:BSD/OS:*:* | *:Ascend\ Embedded/OS:*:*) echo ${UNAME_MACHINE}-pc-bsdi${UNAME_RELEASE} exit ;; sparc*:BSD/OS:*:*) echo sparc-unknown-bsdi${UNAME_RELEASE} exit ;; *:BSD/OS:*:*) echo ${UNAME_MACHINE}-unknown-bsdi${UNAME_RELEASE} exit ;; *:FreeBSD:*:*) UNAME_PROCESSOR=`/usr/bin/uname -p` case ${UNAME_PROCESSOR} in amd64) echo x86_64-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; *) echo ${UNAME_PROCESSOR}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; esac exit ;; i*:CYGWIN*:*) echo ${UNAME_MACHINE}-pc-cygwin exit ;; *:MINGW64*:*) echo ${UNAME_MACHINE}-pc-mingw64 exit ;; *:MINGW*:*) echo ${UNAME_MACHINE}-pc-mingw32 exit ;; i*:MSYS*:*) echo ${UNAME_MACHINE}-pc-msys exit ;; i*:windows32*:*) # uname -m includes "-pc" on this system. echo ${UNAME_MACHINE}-mingw32 exit ;; i*:PW*:*) echo ${UNAME_MACHINE}-pc-pw32 exit ;; *:Interix*:*) case ${UNAME_MACHINE} in x86) echo i586-pc-interix${UNAME_RELEASE} exit ;; authenticamd | genuineintel | EM64T) echo x86_64-unknown-interix${UNAME_RELEASE} exit ;; IA64) echo ia64-unknown-interix${UNAME_RELEASE} exit ;; esac ;; [345]86:Windows_95:* | [345]86:Windows_98:* | [345]86:Windows_NT:*) echo i${UNAME_MACHINE}-pc-mks exit ;; 8664:Windows_NT:*) echo x86_64-pc-mks exit ;; i*:Windows_NT*:* | Pentium*:Windows_NT*:*) # How do we know it's Interix rather than the generic POSIX subsystem? # It also conflicts with pre-2.0 versions of AT&T UWIN. Should we # UNAME_MACHINE based on the output of uname instead of i386? echo i586-pc-interix exit ;; i*:UWIN*:*) echo ${UNAME_MACHINE}-pc-uwin exit ;; amd64:CYGWIN*:*:* | x86_64:CYGWIN*:*:*) echo x86_64-unknown-cygwin exit ;; p*:CYGWIN*:*) echo powerpcle-unknown-cygwin exit ;; prep*:SunOS:5.*:*) echo powerpcle-unknown-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; *:GNU:*:*) # the GNU system echo `echo ${UNAME_MACHINE}|sed -e 's,[-/].*$,,'`-unknown-${LIBC}`echo ${UNAME_RELEASE}|sed -e 's,/.*$,,'` exit ;; *:GNU/*:*:*) # other systems with GNU libc and userland echo ${UNAME_MACHINE}-unknown-`echo ${UNAME_SYSTEM} | sed 's,^[^/]*/,,' | tr '[A-Z]' '[a-z]'``echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`-${LIBC} exit ;; i*86:Minix:*:*) echo ${UNAME_MACHINE}-pc-minix exit ;; aarch64:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; aarch64_be:Linux:*:*) UNAME_MACHINE=aarch64_be echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; alpha:Linux:*:*) case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' < /proc/cpuinfo` in EV5) UNAME_MACHINE=alphaev5 ;; EV56) UNAME_MACHINE=alphaev56 ;; PCA56) UNAME_MACHINE=alphapca56 ;; PCA57) UNAME_MACHINE=alphapca56 ;; EV6) UNAME_MACHINE=alphaev6 ;; EV67) UNAME_MACHINE=alphaev67 ;; EV68*) UNAME_MACHINE=alphaev68 ;; esac objdump --private-headers /bin/sh | grep -q ld.so.1 if test "$?" = 0 ; then LIBC="gnulibc1" ; fi echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; arc:Linux:*:* | arceb:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; arm*:Linux:*:*) eval $set_cc_for_build if echo __ARM_EABI__ | $CC_FOR_BUILD -E - 2>/dev/null \ | grep -q __ARM_EABI__ then echo ${UNAME_MACHINE}-unknown-linux-${LIBC} else if echo __ARM_PCS_VFP | $CC_FOR_BUILD -E - 2>/dev/null \ | grep -q __ARM_PCS_VFP then echo ${UNAME_MACHINE}-unknown-linux-${LIBC}eabi else echo ${UNAME_MACHINE}-unknown-linux-${LIBC}eabihf fi fi exit ;; avr32*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; cris:Linux:*:*) echo ${UNAME_MACHINE}-axis-linux-${LIBC} exit ;; crisv32:Linux:*:*) echo ${UNAME_MACHINE}-axis-linux-${LIBC} exit ;; frv:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; hexagon:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; i*86:Linux:*:*) echo ${UNAME_MACHINE}-pc-linux-${LIBC} exit ;; ia64:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; m32r*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; m68*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; mips:Linux:*:* | mips64:Linux:*:*) eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #undef CPU #undef ${UNAME_MACHINE} #undef ${UNAME_MACHINE}el #if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL) CPU=${UNAME_MACHINE}el #else #if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB) CPU=${UNAME_MACHINE} #else CPU= #endif #endif EOF eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep '^CPU'` test x"${CPU}" != x && { echo "${CPU}-unknown-linux-${LIBC}"; exit; } ;; or1k:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; or32:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; padre:Linux:*:*) echo sparc-unknown-linux-${LIBC} exit ;; parisc64:Linux:*:* | hppa64:Linux:*:*) echo hppa64-unknown-linux-${LIBC} exit ;; parisc:Linux:*:* | hppa:Linux:*:*) # Look for CPU level case `grep '^cpu[^a-z]*:' /proc/cpuinfo 2>/dev/null | cut -d' ' -f2` in PA7*) echo hppa1.1-unknown-linux-${LIBC} ;; PA8*) echo hppa2.0-unknown-linux-${LIBC} ;; *) echo hppa-unknown-linux-${LIBC} ;; esac exit ;; ppc64:Linux:*:*) echo powerpc64-unknown-linux-${LIBC} exit ;; ppc:Linux:*:*) echo powerpc-unknown-linux-${LIBC} exit ;; ppc64le:Linux:*:*) echo powerpc64le-unknown-linux-${LIBC} exit ;; ppcle:Linux:*:*) echo powerpcle-unknown-linux-${LIBC} exit ;; s390:Linux:*:* | s390x:Linux:*:*) echo ${UNAME_MACHINE}-ibm-linux-${LIBC} exit ;; sh64*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; sh*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; sparc:Linux:*:* | sparc64:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; tile*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; vax:Linux:*:*) echo ${UNAME_MACHINE}-dec-linux-${LIBC} exit ;; x86_64:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; xtensa*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; i*86:DYNIX/ptx:4*:*) # ptx 4.0 does uname -s correctly, with DYNIX/ptx in there. # earlier versions are messed up and put the nodename in both # sysname and nodename. echo i386-sequent-sysv4 exit ;; i*86:UNIX_SV:4.2MP:2.*) # Unixware is an offshoot of SVR4, but it has its own version # number series starting with 2... # I am not positive that other SVR4 systems won't match this, # I just have to hope. -- rms. # Use sysv4.2uw... so that sysv4* matches it. echo ${UNAME_MACHINE}-pc-sysv4.2uw${UNAME_VERSION} exit ;; i*86:OS/2:*:*) # If we were able to find `uname', then EMX Unix compatibility # is probably installed. echo ${UNAME_MACHINE}-pc-os2-emx exit ;; i*86:XTS-300:*:STOP) echo ${UNAME_MACHINE}-unknown-stop exit ;; i*86:atheos:*:*) echo ${UNAME_MACHINE}-unknown-atheos exit ;; i*86:syllable:*:*) echo ${UNAME_MACHINE}-pc-syllable exit ;; i*86:LynxOS:2.*:* | i*86:LynxOS:3.[01]*:* | i*86:LynxOS:4.[02]*:*) echo i386-unknown-lynxos${UNAME_RELEASE} exit ;; i*86:*DOS:*:*) echo ${UNAME_MACHINE}-pc-msdosdjgpp exit ;; i*86:*:4.*:* | i*86:SYSTEM_V:4.*:*) UNAME_REL=`echo ${UNAME_RELEASE} | sed 's/\/MP$//'` if grep Novell /usr/include/link.h >/dev/null 2>/dev/null; then echo ${UNAME_MACHINE}-univel-sysv${UNAME_REL} else echo ${UNAME_MACHINE}-pc-sysv${UNAME_REL} fi exit ;; i*86:*:5:[678]*) # UnixWare 7.x, OpenUNIX and OpenServer 6. case `/bin/uname -X | grep "^Machine"` in *486*) UNAME_MACHINE=i486 ;; *Pentium) UNAME_MACHINE=i586 ;; *Pent*|*Celeron) UNAME_MACHINE=i686 ;; esac echo ${UNAME_MACHINE}-unknown-sysv${UNAME_RELEASE}${UNAME_SYSTEM}${UNAME_VERSION} exit ;; i*86:*:3.2:*) if test -f /usr/options/cb.name; then UNAME_REL=`sed -n 's/.*Version //p' /dev/null >/dev/null ; then UNAME_REL=`(/bin/uname -X|grep Release|sed -e 's/.*= //')` (/bin/uname -X|grep i80486 >/dev/null) && UNAME_MACHINE=i486 (/bin/uname -X|grep '^Machine.*Pentium' >/dev/null) \ && UNAME_MACHINE=i586 (/bin/uname -X|grep '^Machine.*Pent *II' >/dev/null) \ && UNAME_MACHINE=i686 (/bin/uname -X|grep '^Machine.*Pentium Pro' >/dev/null) \ && UNAME_MACHINE=i686 echo ${UNAME_MACHINE}-pc-sco$UNAME_REL else echo ${UNAME_MACHINE}-pc-sysv32 fi exit ;; pc:*:*:*) # Left here for compatibility: # uname -m prints for DJGPP always 'pc', but it prints nothing about # the processor, so we play safe by assuming i586. # Note: whatever this is, it MUST be the same as what config.sub # prints for the "djgpp" host, or else GDB configury will decide that # this is a cross-build. echo i586-pc-msdosdjgpp exit ;; Intel:Mach:3*:*) echo i386-pc-mach3 exit ;; paragon:*:*:*) echo i860-intel-osf1 exit ;; i860:*:4.*:*) # i860-SVR4 if grep Stardent /usr/include/sys/uadmin.h >/dev/null 2>&1 ; then echo i860-stardent-sysv${UNAME_RELEASE} # Stardent Vistra i860-SVR4 else # Add other i860-SVR4 vendors below as they are discovered. echo i860-unknown-sysv${UNAME_RELEASE} # Unknown i860-SVR4 fi exit ;; mini*:CTIX:SYS*5:*) # "miniframe" echo m68010-convergent-sysv exit ;; mc68k:UNIX:SYSTEM5:3.51m) echo m68k-convergent-sysv exit ;; M680?0:D-NIX:5.3:*) echo m68k-diab-dnix exit ;; M68*:*:R3V[5678]*:*) test -r /sysV68 && { echo 'm68k-motorola-sysv'; exit; } ;; 3[345]??:*:4.0:3.0 | 3[34]??A:*:4.0:3.0 | 3[34]??,*:*:4.0:3.0 | 3[34]??/*:*:4.0:3.0 | 4400:*:4.0:3.0 | 4850:*:4.0:3.0 | SKA40:*:4.0:3.0 | SDS2:*:4.0:3.0 | SHG2:*:4.0:3.0 | S7501*:*:4.0:3.0) OS_REL='' test -r /etc/.relid \ && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid` /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ && { echo i486-ncr-sysv4.3${OS_REL}; exit; } /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \ && { echo i586-ncr-sysv4.3${OS_REL}; exit; } ;; 3[34]??:*:4.0:* | 3[34]??,*:*:4.0:*) /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ && { echo i486-ncr-sysv4; exit; } ;; NCR*:*:4.2:* | MPRAS*:*:4.2:*) OS_REL='.3' test -r /etc/.relid \ && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid` /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ && { echo i486-ncr-sysv4.3${OS_REL}; exit; } /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \ && { echo i586-ncr-sysv4.3${OS_REL}; exit; } /bin/uname -p 2>/dev/null | /bin/grep pteron >/dev/null \ && { echo i586-ncr-sysv4.3${OS_REL}; exit; } ;; m68*:LynxOS:2.*:* | m68*:LynxOS:3.0*:*) echo m68k-unknown-lynxos${UNAME_RELEASE} exit ;; mc68030:UNIX_System_V:4.*:*) echo m68k-atari-sysv4 exit ;; TSUNAMI:LynxOS:2.*:*) echo sparc-unknown-lynxos${UNAME_RELEASE} exit ;; rs6000:LynxOS:2.*:*) echo rs6000-unknown-lynxos${UNAME_RELEASE} exit ;; PowerPC:LynxOS:2.*:* | PowerPC:LynxOS:3.[01]*:* | PowerPC:LynxOS:4.[02]*:*) echo powerpc-unknown-lynxos${UNAME_RELEASE} exit ;; SM[BE]S:UNIX_SV:*:*) echo mips-dde-sysv${UNAME_RELEASE} exit ;; RM*:ReliantUNIX-*:*:*) echo mips-sni-sysv4 exit ;; RM*:SINIX-*:*:*) echo mips-sni-sysv4 exit ;; *:SINIX-*:*:*) if uname -p 2>/dev/null >/dev/null ; then UNAME_MACHINE=`(uname -p) 2>/dev/null` echo ${UNAME_MACHINE}-sni-sysv4 else echo ns32k-sni-sysv fi exit ;; PENTIUM:*:4.0*:*) # Unisys `ClearPath HMP IX 4000' SVR4/MP effort # says echo i586-unisys-sysv4 exit ;; *:UNIX_System_V:4*:FTX*) # From Gerald Hewes . # How about differentiating between stratus architectures? -djm echo hppa1.1-stratus-sysv4 exit ;; *:*:*:FTX*) # From seanf@swdc.stratus.com. echo i860-stratus-sysv4 exit ;; i*86:VOS:*:*) # From Paul.Green@stratus.com. echo ${UNAME_MACHINE}-stratus-vos exit ;; *:VOS:*:*) # From Paul.Green@stratus.com. echo hppa1.1-stratus-vos exit ;; mc68*:A/UX:*:*) echo m68k-apple-aux${UNAME_RELEASE} exit ;; news*:NEWS-OS:6*:*) echo mips-sony-newsos6 exit ;; R[34]000:*System_V*:*:* | R4000:UNIX_SYSV:*:* | R*000:UNIX_SV:*:*) if [ -d /usr/nec ]; then echo mips-nec-sysv${UNAME_RELEASE} else echo mips-unknown-sysv${UNAME_RELEASE} fi exit ;; BeBox:BeOS:*:*) # BeOS running on hardware made by Be, PPC only. echo powerpc-be-beos exit ;; BeMac:BeOS:*:*) # BeOS running on Mac or Mac clone, PPC only. echo powerpc-apple-beos exit ;; BePC:BeOS:*:*) # BeOS running on Intel PC compatible. echo i586-pc-beos exit ;; BePC:Haiku:*:*) # Haiku running on Intel PC compatible. echo i586-pc-haiku exit ;; x86_64:Haiku:*:*) echo x86_64-unknown-haiku exit ;; SX-4:SUPER-UX:*:*) echo sx4-nec-superux${UNAME_RELEASE} exit ;; SX-5:SUPER-UX:*:*) echo sx5-nec-superux${UNAME_RELEASE} exit ;; SX-6:SUPER-UX:*:*) echo sx6-nec-superux${UNAME_RELEASE} exit ;; SX-7:SUPER-UX:*:*) echo sx7-nec-superux${UNAME_RELEASE} exit ;; SX-8:SUPER-UX:*:*) echo sx8-nec-superux${UNAME_RELEASE} exit ;; SX-8R:SUPER-UX:*:*) echo sx8r-nec-superux${UNAME_RELEASE} exit ;; Power*:Rhapsody:*:*) echo powerpc-apple-rhapsody${UNAME_RELEASE} exit ;; *:Rhapsody:*:*) echo ${UNAME_MACHINE}-apple-rhapsody${UNAME_RELEASE} exit ;; *:Darwin:*:*) UNAME_PROCESSOR=`uname -p` || UNAME_PROCESSOR=unknown eval $set_cc_for_build if test "$UNAME_PROCESSOR" = unknown ; then UNAME_PROCESSOR=powerpc fi if test `echo "$UNAME_RELEASE" | sed -e 's/\..*//'` -le 10 ; then if [ "$CC_FOR_BUILD" != 'no_compiler_found' ]; then if (echo '#ifdef __LP64__'; echo IS_64BIT_ARCH; echo '#endif') | \ (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | \ grep IS_64BIT_ARCH >/dev/null then case $UNAME_PROCESSOR in i386) UNAME_PROCESSOR=x86_64 ;; powerpc) UNAME_PROCESSOR=powerpc64 ;; esac fi fi elif test "$UNAME_PROCESSOR" = i386 ; then # Avoid executing cc on OS X 10.9, as it ships with a stub # that puts up a graphical alert prompting to install # developer tools. Any system running Mac OS X 10.7 or # later (Darwin 11 and later) is required to have a 64-bit # processor. This is not true of the ARM version of Darwin # that Apple uses in portable devices. UNAME_PROCESSOR=x86_64 fi echo ${UNAME_PROCESSOR}-apple-darwin${UNAME_RELEASE} exit ;; *:procnto*:*:* | *:QNX:[0123456789]*:*) UNAME_PROCESSOR=`uname -p` if test "$UNAME_PROCESSOR" = "x86"; then UNAME_PROCESSOR=i386 UNAME_MACHINE=pc fi echo ${UNAME_PROCESSOR}-${UNAME_MACHINE}-nto-qnx${UNAME_RELEASE} exit ;; *:QNX:*:4*) echo i386-pc-qnx exit ;; NEO-?:NONSTOP_KERNEL:*:*) echo neo-tandem-nsk${UNAME_RELEASE} exit ;; NSE-*:NONSTOP_KERNEL:*:*) echo nse-tandem-nsk${UNAME_RELEASE} exit ;; NSR-?:NONSTOP_KERNEL:*:*) echo nsr-tandem-nsk${UNAME_RELEASE} exit ;; *:NonStop-UX:*:*) echo mips-compaq-nonstopux exit ;; BS2000:POSIX*:*:*) echo bs2000-siemens-sysv exit ;; DS/*:UNIX_System_V:*:*) echo ${UNAME_MACHINE}-${UNAME_SYSTEM}-${UNAME_RELEASE} exit ;; *:Plan9:*:*) # "uname -m" is not consistent, so use $cputype instead. 386 # is converted to i386 for consistency with other x86 # operating systems. if test "$cputype" = "386"; then UNAME_MACHINE=i386 else UNAME_MACHINE="$cputype" fi echo ${UNAME_MACHINE}-unknown-plan9 exit ;; *:TOPS-10:*:*) echo pdp10-unknown-tops10 exit ;; *:TENEX:*:*) echo pdp10-unknown-tenex exit ;; KS10:TOPS-20:*:* | KL10:TOPS-20:*:* | TYPE4:TOPS-20:*:*) echo pdp10-dec-tops20 exit ;; XKL-1:TOPS-20:*:* | TYPE5:TOPS-20:*:*) echo pdp10-xkl-tops20 exit ;; *:TOPS-20:*:*) echo pdp10-unknown-tops20 exit ;; *:ITS:*:*) echo pdp10-unknown-its exit ;; SEI:*:*:SEIUX) echo mips-sei-seiux${UNAME_RELEASE} exit ;; *:DragonFly:*:*) echo ${UNAME_MACHINE}-unknown-dragonfly`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` exit ;; *:*VMS:*:*) UNAME_MACHINE=`(uname -p) 2>/dev/null` case "${UNAME_MACHINE}" in A*) echo alpha-dec-vms ; exit ;; I*) echo ia64-dec-vms ; exit ;; V*) echo vax-dec-vms ; exit ;; esac ;; *:XENIX:*:SysV) echo i386-pc-xenix exit ;; i*86:skyos:*:*) echo ${UNAME_MACHINE}-pc-skyos`echo ${UNAME_RELEASE}` | sed -e 's/ .*$//' exit ;; i*86:rdos:*:*) echo ${UNAME_MACHINE}-pc-rdos exit ;; i*86:AROS:*:*) echo ${UNAME_MACHINE}-pc-aros exit ;; x86_64:VMkernel:*:*) echo ${UNAME_MACHINE}-unknown-esx exit ;; esac eval $set_cc_for_build cat >$dummy.c < # include #endif main () { #if defined (sony) #if defined (MIPSEB) /* BFD wants "bsd" instead of "newsos". Perhaps BFD should be changed, I don't know.... */ printf ("mips-sony-bsd\n"); exit (0); #else #include printf ("m68k-sony-newsos%s\n", #ifdef NEWSOS4 "4" #else "" #endif ); exit (0); #endif #endif #if defined (__arm) && defined (__acorn) && defined (__unix) printf ("arm-acorn-riscix\n"); exit (0); #endif #if defined (hp300) && !defined (hpux) printf ("m68k-hp-bsd\n"); exit (0); #endif #if defined (NeXT) #if !defined (__ARCHITECTURE__) #define __ARCHITECTURE__ "m68k" #endif int version; version=`(hostinfo | sed -n 's/.*NeXT Mach \([0-9]*\).*/\1/p') 2>/dev/null`; if (version < 4) printf ("%s-next-nextstep%d\n", __ARCHITECTURE__, version); else printf ("%s-next-openstep%d\n", __ARCHITECTURE__, version); exit (0); #endif #if defined (MULTIMAX) || defined (n16) #if defined (UMAXV) printf ("ns32k-encore-sysv\n"); exit (0); #else #if defined (CMU) printf ("ns32k-encore-mach\n"); exit (0); #else printf ("ns32k-encore-bsd\n"); exit (0); #endif #endif #endif #if defined (__386BSD__) printf ("i386-pc-bsd\n"); exit (0); #endif #if defined (sequent) #if defined (i386) printf ("i386-sequent-dynix\n"); exit (0); #endif #if defined (ns32000) printf ("ns32k-sequent-dynix\n"); exit (0); #endif #endif #if defined (_SEQUENT_) struct utsname un; uname(&un); if (strncmp(un.version, "V2", 2) == 0) { printf ("i386-sequent-ptx2\n"); exit (0); } if (strncmp(un.version, "V1", 2) == 0) { /* XXX is V1 correct? */ printf ("i386-sequent-ptx1\n"); exit (0); } printf ("i386-sequent-ptx\n"); exit (0); #endif #if defined (vax) # if !defined (ultrix) # include # if defined (BSD) # if BSD == 43 printf ("vax-dec-bsd4.3\n"); exit (0); # else # if BSD == 199006 printf ("vax-dec-bsd4.3reno\n"); exit (0); # else printf ("vax-dec-bsd\n"); exit (0); # endif # endif # else printf ("vax-dec-bsd\n"); exit (0); # endif # else printf ("vax-dec-ultrix\n"); exit (0); # endif #endif #if defined (alliant) && defined (i860) printf ("i860-alliant-bsd\n"); exit (0); #endif exit (1); } EOF $CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null && SYSTEM_NAME=`$dummy` && { echo "$SYSTEM_NAME"; exit; } # Apollos put the system type in the environment. test -d /usr/apollo && { echo ${ISP}-apollo-${SYSTYPE}; exit; } # Convex versions that predate uname can use getsysinfo(1) if [ -x /usr/convex/getsysinfo ] then case `getsysinfo -f cpu_type` in c1*) echo c1-convex-bsd exit ;; c2*) if getsysinfo -f scalar_acc then echo c32-convex-bsd else echo c2-convex-bsd fi exit ;; c34*) echo c34-convex-bsd exit ;; c38*) echo c38-convex-bsd exit ;; c4*) echo c4-convex-bsd exit ;; esac fi cat >&2 < in order to provide the needed information to handle your system. config.guess timestamp = $timestamp uname -m = `(uname -m) 2>/dev/null || echo unknown` uname -r = `(uname -r) 2>/dev/null || echo unknown` uname -s = `(uname -s) 2>/dev/null || echo unknown` uname -v = `(uname -v) 2>/dev/null || echo unknown` /usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null` /bin/uname -X = `(/bin/uname -X) 2>/dev/null` hostinfo = `(hostinfo) 2>/dev/null` /bin/universe = `(/bin/universe) 2>/dev/null` /usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null` /bin/arch = `(/bin/arch) 2>/dev/null` /usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null` /usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null` UNAME_MACHINE = ${UNAME_MACHINE} UNAME_RELEASE = ${UNAME_RELEASE} UNAME_SYSTEM = ${UNAME_SYSTEM} UNAME_VERSION = ${UNAME_VERSION} EOF exit 1 # Local variables: # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "timestamp='" # time-stamp-format: "%:y-%02m-%02d" # time-stamp-end: "'" # End: xscreensaver-5.36/aclocal.m4000664 000767 000024 00000062524 12777044601 016021 0ustar00jwzstaff000000 000000 # generated automatically by aclocal 1.15 -*- Autoconf -*- # Copyright (C) 1996-2014 Free Software Foundation, Inc. # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. m4_ifndef([AC_CONFIG_MACRO_DIRS], [m4_defun([_AM_CONFIG_MACRO_DIRS], [])m4_defun([AC_CONFIG_MACRO_DIRS], [_AM_CONFIG_MACRO_DIRS($@)])]) # Copyright (C) 1995-2002 Free Software Foundation, Inc. # Copyright (C) 2001-2003,2004 Red Hat, Inc. # # This file is free software, distributed under the terms of the GNU # General Public License. As a special exception to the GNU General # Public License, this file may be distributed as part of a program # that contains a configuration script generated by Autoconf, under # the same distribution terms as the rest of that program. # # This file can be copied and used freely without restrictions. It can # be used in projects which are not available under the GNU Public License # but which still want to provide support for the GNU gettext functionality. # # Macro to add for using GNU gettext. # Ulrich Drepper , 1995, 1996 # # Modified to never use included libintl. # Owen Taylor , 12/15/1998 # # Major rework to remove unused code # Owen Taylor , 12/11/2002 # # Added better handling of ALL_LINGUAS from GNU gettext version # written by Bruno Haible, Owen Taylor 5/30/3002 # # Modified to require ngettext # Matthias Clasen 08/06/2004 # # We need this here as well, since someone might use autoconf-2.5x # to configure GLib then an older version to configure a package # using AM_GLIB_GNU_GETTEXT AC_PREREQ(2.53) dnl dnl We go to great lengths to make sure that aclocal won't dnl try to pull in the installed version of these macros dnl when running aclocal in the glib directory. dnl m4_copy([AC_DEFUN],[glib_DEFUN]) m4_copy([AC_REQUIRE],[glib_REQUIRE]) dnl dnl At the end, if we're not within glib, we'll define the public dnl definitions in terms of our private definitions. dnl # GLIB_LC_MESSAGES #-------------------- glib_DEFUN([GLIB_LC_MESSAGES], [AC_CHECK_HEADERS([locale.h]) if test $ac_cv_header_locale_h = yes; then AC_CACHE_CHECK([for LC_MESSAGES], am_cv_val_LC_MESSAGES, [AC_TRY_LINK([#include ], [return LC_MESSAGES], am_cv_val_LC_MESSAGES=yes, am_cv_val_LC_MESSAGES=no)]) if test $am_cv_val_LC_MESSAGES = yes; then AC_DEFINE(HAVE_LC_MESSAGES, 1, [Define if your file defines LC_MESSAGES.]) fi fi]) # GLIB_PATH_PROG_WITH_TEST #---------------------------- dnl GLIB_PATH_PROG_WITH_TEST(VARIABLE, PROG-TO-CHECK-FOR, dnl TEST-PERFORMED-ON-FOUND_PROGRAM [, VALUE-IF-NOT-FOUND [, PATH]]) glib_DEFUN([GLIB_PATH_PROG_WITH_TEST], [# Extract the first word of "$2", so it can be a program name with args. set dummy $2; ac_word=[$]2 AC_MSG_CHECKING([for $ac_word]) AC_CACHE_VAL(ac_cv_path_$1, [case "[$]$1" in /*) ac_cv_path_$1="[$]$1" # Let the user override the test with a path. ;; *) IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:" for ac_dir in ifelse([$5], , $PATH, [$5]); do test -z "$ac_dir" && ac_dir=. if test -f $ac_dir/$ac_word; then if [$3]; then ac_cv_path_$1="$ac_dir/$ac_word" break fi fi done IFS="$ac_save_ifs" dnl If no 4th arg is given, leave the cache variable unset, dnl so AC_PATH_PROGS will keep looking. ifelse([$4], , , [ test -z "[$]ac_cv_path_$1" && ac_cv_path_$1="$4" ])dnl ;; esac])dnl $1="$ac_cv_path_$1" if test ifelse([$4], , [-n "[$]$1"], ["[$]$1" != "$4"]); then AC_MSG_RESULT([$]$1) else AC_MSG_RESULT(no) fi AC_SUBST($1)dnl ]) # GLIB_WITH_NLS #----------------- glib_DEFUN([GLIB_WITH_NLS], dnl NLS is obligatory [USE_NLS=yes AC_SUBST(USE_NLS) gt_cv_have_gettext=no CATOBJEXT=NONE XGETTEXT=: INTLLIBS= AC_CHECK_HEADER(libintl.h, [gt_cv_func_dgettext_libintl="no" libintl_extra_libs="" # # First check in libc # AC_CACHE_CHECK([for ngettext in libc], gt_cv_func_ngettext_libc, [AC_TRY_LINK([ #include ], [return !ngettext ("","", 1)], gt_cv_func_ngettext_libc=yes, gt_cv_func_ngettext_libc=no) ]) if test "$gt_cv_func_ngettext_libc" = "yes" ; then AC_CACHE_CHECK([for dgettext in libc], gt_cv_func_dgettext_libc, [AC_TRY_LINK([ #include ], [return !dgettext ("","")], gt_cv_func_dgettext_libc=yes, gt_cv_func_dgettext_libc=no) ]) fi if test "$gt_cv_func_ngettext_libc" = "yes" ; then AC_CHECK_FUNCS(bind_textdomain_codeset) fi # # If we don't have everything we want, check in libintl # if test "$gt_cv_func_dgettext_libc" != "yes" \ || test "$gt_cv_func_ngettext_libc" != "yes" \ || test "$ac_cv_func_bind_textdomain_codeset" != "yes" ; then AC_CHECK_LIB(intl, bindtextdomain, [AC_CHECK_LIB(intl, ngettext, [AC_CHECK_LIB(intl, dgettext, gt_cv_func_dgettext_libintl=yes)])]) if test "$gt_cv_func_dgettext_libintl" != "yes" ; then AC_MSG_CHECKING([if -liconv is needed to use gettext]) AC_MSG_RESULT([]) AC_CHECK_LIB(intl, ngettext, [AC_CHECK_LIB(intl, dcgettext, [gt_cv_func_dgettext_libintl=yes libintl_extra_libs=-liconv], :,-liconv)], :,-liconv) fi # # If we found libintl, then check in it for bind_textdomain_codeset(); # we'll prefer libc if neither have bind_textdomain_codeset(), # and both have dgettext and ngettext # if test "$gt_cv_func_dgettext_libintl" = "yes" ; then glib_save_LIBS="$LIBS" LIBS="$LIBS -lintl $libintl_extra_libs" unset ac_cv_func_bind_textdomain_codeset AC_CHECK_FUNCS(bind_textdomain_codeset) LIBS="$glib_save_LIBS" if test "$ac_cv_func_bind_textdomain_codeset" = "yes" ; then gt_cv_func_dgettext_libc=no else if test "$gt_cv_func_dgettext_libc" = "yes" \ && test "$gt_cv_func_ngettext_libc" = "yes"; then gt_cv_func_dgettext_libintl=no fi fi fi fi if test "$gt_cv_func_dgettext_libc" = "yes" \ || test "$gt_cv_func_dgettext_libintl" = "yes"; then gt_cv_have_gettext=yes fi if test "$gt_cv_func_dgettext_libintl" = "yes"; then INTLLIBS="-lintl $libintl_extra_libs" fi if test "$gt_cv_have_gettext" = "yes"; then AC_DEFINE(HAVE_GETTEXT,1, [Define if the GNU gettext() function is already present or preinstalled.]) GLIB_PATH_PROG_WITH_TEST(MSGFMT, msgfmt, [test -z "`$ac_dir/$ac_word -h 2>&1 | grep 'dv '`"], no)dnl if test "$MSGFMT" != "no"; then glib_save_LIBS="$LIBS" LIBS="$LIBS $INTLLIBS" AC_CHECK_FUNCS(dcgettext) MSGFMT_OPTS= AC_MSG_CHECKING([if msgfmt accepts -c]) GLIB_RUN_PROG([$MSGFMT -c -o /dev/null],[ msgid "" msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Project-Id-Version: test 1.0\n" "PO-Revision-Date: 2007-02-15 12:01+0100\n" "Last-Translator: test \n" "Language-Team: C \n" "MIME-Version: 1.0\n" "Content-Transfer-Encoding: 8bit\n" ], [MSGFMT_OPTS=-c; AC_MSG_RESULT([yes])], [AC_MSG_RESULT([no])]) AC_SUBST(MSGFMT_OPTS) AC_PATH_PROG(GMSGFMT, gmsgfmt, $MSGFMT) GLIB_PATH_PROG_WITH_TEST(XGETTEXT, xgettext, [test -z "`$ac_dir/$ac_word -h 2>&1 | grep '(HELP)'`"], :) AC_TRY_LINK(, [extern int _nl_msg_cat_cntr; return _nl_msg_cat_cntr], [CATOBJEXT=.gmo DATADIRNAME=share], [case $host in *-*-solaris*) dnl On Solaris, if bind_textdomain_codeset is in libc, dnl GNU format message catalog is always supported, dnl since both are added to the libc all together. dnl Hence, we'd like to go with DATADIRNAME=share and dnl and CATOBJEXT=.gmo in this case. AC_CHECK_FUNC(bind_textdomain_codeset, [CATOBJEXT=.gmo DATADIRNAME=share], [CATOBJEXT=.mo DATADIRNAME=lib]) ;; *-*-openbsd*) CATOBJEXT=.mo DATADIRNAME=share ;; *) CATOBJEXT=.mo DATADIRNAME=lib ;; esac]) LIBS="$glib_save_LIBS" INSTOBJEXT=.mo else gt_cv_have_gettext=no fi fi ]) if test "$gt_cv_have_gettext" = "yes" ; then AC_DEFINE(ENABLE_NLS, 1, [always defined to indicate that i18n is enabled]) fi dnl Test whether we really found GNU xgettext. if test "$XGETTEXT" != ":"; then dnl If it is not GNU xgettext we define it as : so that the dnl Makefiles still can work. if $XGETTEXT --omit-header /dev/null 2> /dev/null; then : ; else AC_MSG_RESULT( [found xgettext program is not GNU xgettext; ignore it]) XGETTEXT=":" fi fi # We need to process the po/ directory. POSUB=po AC_OUTPUT_COMMANDS( [case "$CONFIG_FILES" in *po/Makefile.in*) sed -e "/POTFILES =/r po/POTFILES" po/Makefile.in > po/Makefile esac]) dnl These rules are solely for the distribution goal. While doing this dnl we only have to keep exactly one list of the available catalogs dnl in configure.ac. for lang in $ALL_LINGUAS; do GMOFILES="$GMOFILES $lang.gmo" POFILES="$POFILES $lang.po" done dnl Make all variables we use known to autoconf. AC_SUBST(CATALOGS) AC_SUBST(CATOBJEXT) AC_SUBST(DATADIRNAME) AC_SUBST(GMOFILES) AC_SUBST(INSTOBJEXT) AC_SUBST(INTLLIBS) AC_SUBST(PO_IN_DATADIR_TRUE) AC_SUBST(PO_IN_DATADIR_FALSE) AC_SUBST(POFILES) AC_SUBST(POSUB) ]) # AM_GLIB_GNU_GETTEXT # ------------------- # Do checks necessary for use of gettext. If a suitable implementation # of gettext is found in either in libintl or in the C library, # it will set INTLLIBS to the libraries needed for use of gettext # and AC_DEFINE() HAVE_GETTEXT and ENABLE_NLS. (The shell variable # gt_cv_have_gettext will be set to "yes".) It will also call AC_SUBST() # on various variables needed by the Makefile.in.in installed by # glib-gettextize. dnl AU_DEFUN([GLIB_GNU_GETTEXT], [AC_REQUIRE([AC_PROG_CC])dnl GLIB_LC_MESSAGES GLIB_WITH_NLS if test "$gt_cv_have_gettext" = "yes"; then if test "x$ALL_LINGUAS" = "x"; then LINGUAS= else AC_MSG_CHECKING(for catalogs to be installed) NEW_LINGUAS= for presentlang in $ALL_LINGUAS; do useit=no if test "%UNSET%" != "${LINGUAS-%UNSET%}"; then desiredlanguages="$LINGUAS" else desiredlanguages="$ALL_LINGUAS" fi for desiredlang in $desiredlanguages; do # Use the presentlang catalog if desiredlang is # a. equal to presentlang, or # b. a variant of presentlang (because in this case, # presentlang can be used as a fallback for messages # which are not translated in the desiredlang catalog). case "$desiredlang" in "$presentlang"*) useit=yes;; esac done if test $useit = yes; then NEW_LINGUAS="$NEW_LINGUAS $presentlang" fi done LINGUAS=$NEW_LINGUAS AC_MSG_RESULT($LINGUAS) fi dnl Construct list of names of catalog files to be constructed. if test -n "$LINGUAS"; then for lang in $LINGUAS; do CATALOGS="$CATALOGS $lang$CATOBJEXT"; done fi fi dnl If the AC_CONFIG_AUX_DIR macro for autoconf is used we possibly dnl find the mkinstalldirs script in another subdir but ($top_srcdir). dnl Try to locate is. MKINSTALLDIRS= if test -n "$ac_aux_dir"; then MKINSTALLDIRS="$ac_aux_dir/mkinstalldirs" fi if test -z "$MKINSTALLDIRS"; then MKINSTALLDIRS="\$(top_srcdir)/mkinstalldirs" fi AC_SUBST(MKINSTALLDIRS) dnl Generate list of files to be processed by xgettext which will dnl be included in po/Makefile. test -d po || mkdir po if test "x$srcdir" != "x."; then if test "x`echo $srcdir | sed 's@/.*@@'`" = "x"; then posrcprefix="$srcdir/" else posrcprefix="../$srcdir/" fi else posrcprefix="../" fi rm -f po/POTFILES sed -e "/^#/d" -e "/^\$/d" -e "s,.*, $posrcprefix& \\\\," -e "\$s/\(.*\) \\\\/\1/" \ < $srcdir/po/POTFILES.in > po/POTFILES ], [[$0: This macro is deprecated. You should use upstream gettext instead.]]) # AM_GLIB_DEFINE_LOCALEDIR(VARIABLE) # ------------------------------- # Define VARIABLE to the location where catalog files will # be installed by po/Makefile. glib_DEFUN([GLIB_DEFINE_LOCALEDIR], [glib_REQUIRE([GLIB_GNU_GETTEXT])dnl glib_save_prefix="$prefix" glib_save_exec_prefix="$exec_prefix" glib_save_datarootdir="$datarootdir" test "x$prefix" = xNONE && prefix=$ac_default_prefix test "x$exec_prefix" = xNONE && exec_prefix=$prefix datarootdir=`eval echo "${datarootdir}"` if test "x$CATOBJEXT" = "x.mo" ; then localedir=`eval echo "${libdir}/locale"` else localedir=`eval echo "${datadir}/locale"` fi prefix="$glib_save_prefix" exec_prefix="$glib_save_exec_prefix" datarootdir="$glib_save_datarootdir" AC_DEFINE_UNQUOTED($1, "$localedir", [Define the location where the catalogs will be installed]) ]) dnl dnl Now the definitions that aclocal will find dnl ifdef(glib_configure_ac,[],[ AC_DEFUN([AM_GLIB_GNU_GETTEXT],[GLIB_GNU_GETTEXT($@)]) AC_DEFUN([AM_GLIB_DEFINE_LOCALEDIR],[GLIB_DEFINE_LOCALEDIR($@)]) ])dnl # GLIB_RUN_PROG(PROGRAM, TEST-FILE, [ACTION-IF-PASS], [ACTION-IF-FAIL]) # # Create a temporary file with TEST-FILE as its contents and pass the # file name to PROGRAM. Perform ACTION-IF-PASS if PROGRAM exits with # 0 and perform ACTION-IF-FAIL for any other exit status. AC_DEFUN([GLIB_RUN_PROG], [cat >conftest.foo <<_ACEOF $2 _ACEOF if AC_RUN_LOG([$1 conftest.foo]); then m4_ifval([$3], [$3], [:]) m4_ifvaln([$4], [else $4])dnl echo "$as_me: failed input was:" >&AS_MESSAGE_LOG_FD sed 's/^/| /' conftest.foo >&AS_MESSAGE_LOG_FD fi]) dnl IT_PROG_INTLTOOL([MINIMUM-VERSION], [no-xml]) # serial 42 IT_PROG_INTLTOOL AC_DEFUN([IT_PROG_INTLTOOL], [ AC_PREREQ([2.50])dnl AC_REQUIRE([AM_NLS])dnl case "$am__api_version" in 1.[01234]) AC_MSG_ERROR([Automake 1.5 or newer is required to use intltool]) ;; *) ;; esac INTLTOOL_REQUIRED_VERSION_AS_INT=`echo $1 | awk -F. '{ print $ 1 * 1000 + $ 2 * 100 + $ 3; }'` INTLTOOL_APPLIED_VERSION=`intltool-update --version | head -1 | cut -d" " -f3` INTLTOOL_APPLIED_VERSION_AS_INT=`echo $INTLTOOL_APPLIED_VERSION | awk -F. '{ print $ 1 * 1000 + $ 2 * 100 + $ 3; }'` if test -n "$1"; then AC_MSG_CHECKING([for intltool >= $1]) AC_MSG_RESULT([$INTLTOOL_APPLIED_VERSION found]) test "$INTLTOOL_APPLIED_VERSION_AS_INT" -ge "$INTLTOOL_REQUIRED_VERSION_AS_INT" || AC_MSG_ERROR([Your intltool is too old. You need intltool $1 or later.]) fi AC_PATH_PROG(INTLTOOL_UPDATE, [intltool-update]) AC_PATH_PROG(INTLTOOL_MERGE, [intltool-merge]) AC_PATH_PROG(INTLTOOL_EXTRACT, [intltool-extract]) if test -z "$INTLTOOL_UPDATE" -o -z "$INTLTOOL_MERGE" -o -z "$INTLTOOL_EXTRACT"; then AC_MSG_ERROR([The intltool scripts were not found. Please install intltool.]) fi if test -z "$AM_DEFAULT_VERBOSITY"; then AM_DEFAULT_VERBOSITY=1 fi AC_SUBST([AM_DEFAULT_VERBOSITY]) INTLTOOL_V_MERGE='$(INTLTOOL__v_MERGE_$(V))' INTLTOOL__v_MERGE_='$(INTLTOOL__v_MERGE_$(AM_DEFAULT_VERBOSITY))' INTLTOOL__v_MERGE_0='@echo " ITMRG " [$]@;' AC_SUBST(INTLTOOL_V_MERGE) AC_SUBST(INTLTOOL__v_MERGE_) AC_SUBST(INTLTOOL__v_MERGE_0) INTLTOOL_V_MERGE_OPTIONS='$(intltool__v_merge_options_$(V))' intltool__v_merge_options_='$(intltool__v_merge_options_$(AM_DEFAULT_VERBOSITY))' intltool__v_merge_options_0='-q' AC_SUBST(INTLTOOL_V_MERGE_OPTIONS) AC_SUBST(intltool__v_merge_options_) AC_SUBST(intltool__v_merge_options_0) INTLTOOL_DESKTOP_RULE='%.desktop: %.desktop.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; $(INTLTOOL_V_MERGE)LC_ALL=C $(INTLTOOL_MERGE) $(INTLTOOL_V_MERGE_OPTIONS) -d -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< [$]@' INTLTOOL_DIRECTORY_RULE='%.directory: %.directory.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; $(INTLTOOL_V_MERGE)LC_ALL=C $(INTLTOOL_MERGE) $(INTLTOOL_V_MERGE_OPTIONS) -d -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< [$]@' INTLTOOL_KEYS_RULE='%.keys: %.keys.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; $(INTLTOOL_V_MERGE)LC_ALL=C $(INTLTOOL_MERGE) $(INTLTOOL_V_MERGE_OPTIONS) -k -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< [$]@' INTLTOOL_PROP_RULE='%.prop: %.prop.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; $(INTLTOOL_V_MERGE)LC_ALL=C $(INTLTOOL_MERGE) $(INTLTOOL_V_MERGE_OPTIONS) -d -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< [$]@' INTLTOOL_OAF_RULE='%.oaf: %.oaf.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; $(INTLTOOL_V_MERGE)LC_ALL=C $(INTLTOOL_MERGE) $(INTLTOOL_V_MERGE_OPTIONS) -o -p $(top_srcdir)/po $< [$]@' INTLTOOL_PONG_RULE='%.pong: %.pong.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; $(INTLTOOL_V_MERGE)LC_ALL=C $(INTLTOOL_MERGE) $(INTLTOOL_V_MERGE_OPTIONS) -x -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< [$]@' INTLTOOL_SERVER_RULE='%.server: %.server.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; $(INTLTOOL_V_MERGE)LC_ALL=C $(INTLTOOL_MERGE) $(INTLTOOL_V_MERGE_OPTIONS) -o -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< [$]@' INTLTOOL_SHEET_RULE='%.sheet: %.sheet.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; $(INTLTOOL_V_MERGE)LC_ALL=C $(INTLTOOL_MERGE) $(INTLTOOL_V_MERGE_OPTIONS) -x -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< [$]@' INTLTOOL_SOUNDLIST_RULE='%.soundlist: %.soundlist.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; $(INTLTOOL_V_MERGE)LC_ALL=C $(INTLTOOL_MERGE) $(INTLTOOL_V_MERGE_OPTIONS) -d -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< [$]@' INTLTOOL_UI_RULE='%.ui: %.ui.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; $(INTLTOOL_V_MERGE)LC_ALL=C $(INTLTOOL_MERGE) $(INTLTOOL_V_MERGE_OPTIONS) -x -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< [$]@' INTLTOOL_XML_RULE='%.xml: %.xml.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; $(INTLTOOL_V_MERGE)LC_ALL=C $(INTLTOOL_MERGE) $(INTLTOOL_V_MERGE_OPTIONS) -x -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< [$]@' if test "$INTLTOOL_APPLIED_VERSION_AS_INT" -ge 5000; then INTLTOOL_XML_NOMERGE_RULE='%.xml: %.xml.in $(INTLTOOL_MERGE) ; $(INTLTOOL_V_MERGE)LC_ALL=C $(INTLTOOL_MERGE) $(INTLTOOL_V_MERGE_OPTIONS) -x -u --no-translations $< [$]@' else INTLTOOL_XML_NOMERGE_RULE='%.xml: %.xml.in $(INTLTOOL_MERGE) ; $(INTLTOOL_V_MERGE)_it_tmp_dir=tmp.intltool.[$][$]RANDOM && mkdir [$][$]_it_tmp_dir && LC_ALL=C $(INTLTOOL_MERGE) $(INTLTOOL_V_MERGE_OPTIONS) -x -u [$][$]_it_tmp_dir $< [$]@ && rmdir [$][$]_it_tmp_dir' fi INTLTOOL_XAM_RULE='%.xam: %.xml.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; $(INTLTOOL_V_MERGE)LC_ALL=C $(INTLTOOL_MERGE) $(INTLTOOL_V_MERGE_OPTIONS) -x -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< [$]@' INTLTOOL_KBD_RULE='%.kbd: %.kbd.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; $(INTLTOOL_V_MERGE)LC_ALL=C $(INTLTOOL_MERGE) $(INTLTOOL_V_MERGE_OPTIONS) -x -u -m -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< [$]@' INTLTOOL_CAVES_RULE='%.caves: %.caves.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; $(INTLTOOL_V_MERGE)LC_ALL=C $(INTLTOOL_MERGE) $(INTLTOOL_V_MERGE_OPTIONS) -d -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< [$]@' INTLTOOL_SCHEMAS_RULE='%.schemas: %.schemas.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; $(INTLTOOL_V_MERGE)LC_ALL=C $(INTLTOOL_MERGE) $(INTLTOOL_V_MERGE_OPTIONS) -s -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< [$]@' INTLTOOL_THEME_RULE='%.theme: %.theme.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; $(INTLTOOL_V_MERGE)LC_ALL=C $(INTLTOOL_MERGE) $(INTLTOOL_V_MERGE_OPTIONS) -d -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< [$]@' INTLTOOL_SERVICE_RULE='%.service: %.service.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; $(INTLTOOL_V_MERGE)LC_ALL=C $(INTLTOOL_MERGE) $(INTLTOOL_V_MERGE_OPTIONS) -d -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< [$]@' INTLTOOL_POLICY_RULE='%.policy: %.policy.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; $(INTLTOOL_V_MERGE)LC_ALL=C $(INTLTOOL_MERGE) $(INTLTOOL_V_MERGE_OPTIONS) -x -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< [$]@' _IT_SUBST(INTLTOOL_DESKTOP_RULE) _IT_SUBST(INTLTOOL_DIRECTORY_RULE) _IT_SUBST(INTLTOOL_KEYS_RULE) _IT_SUBST(INTLTOOL_PROP_RULE) _IT_SUBST(INTLTOOL_OAF_RULE) _IT_SUBST(INTLTOOL_PONG_RULE) _IT_SUBST(INTLTOOL_SERVER_RULE) _IT_SUBST(INTLTOOL_SHEET_RULE) _IT_SUBST(INTLTOOL_SOUNDLIST_RULE) _IT_SUBST(INTLTOOL_UI_RULE) _IT_SUBST(INTLTOOL_XAM_RULE) _IT_SUBST(INTLTOOL_KBD_RULE) _IT_SUBST(INTLTOOL_XML_RULE) _IT_SUBST(INTLTOOL_XML_NOMERGE_RULE) _IT_SUBST(INTLTOOL_CAVES_RULE) _IT_SUBST(INTLTOOL_SCHEMAS_RULE) _IT_SUBST(INTLTOOL_THEME_RULE) _IT_SUBST(INTLTOOL_SERVICE_RULE) _IT_SUBST(INTLTOOL_POLICY_RULE) # Check the gettext tools to make sure they are GNU AC_PATH_PROG(XGETTEXT, xgettext) AC_PATH_PROG(MSGMERGE, msgmerge) AC_PATH_PROG(MSGFMT, msgfmt) AC_PATH_PROG(GMSGFMT, gmsgfmt, $MSGFMT) if test -z "$XGETTEXT" -o -z "$MSGMERGE" -o -z "$MSGFMT"; then AC_MSG_ERROR([GNU gettext tools not found; required for intltool]) fi xgversion="`$XGETTEXT --version|grep '(GNU ' 2> /dev/null`" mmversion="`$MSGMERGE --version|grep '(GNU ' 2> /dev/null`" mfversion="`$MSGFMT --version|grep '(GNU ' 2> /dev/null`" if test -z "$xgversion" -o -z "$mmversion" -o -z "$mfversion"; then AC_MSG_ERROR([GNU gettext tools not found; required for intltool]) fi # Substitute ALL_LINGUAS so we can use it in po/Makefile AC_SUBST(ALL_LINGUAS) IT_PO_SUBDIR([po]) ]) # IT_PO_SUBDIR(DIRNAME) # --------------------- # All po subdirs have to be declared with this macro; the subdir "po" is # declared by IT_PROG_INTLTOOL. # AC_DEFUN([IT_PO_SUBDIR], [AC_PREREQ([2.53])dnl We use ac_top_srcdir inside AC_CONFIG_COMMANDS. dnl dnl The following CONFIG_COMMANDS should be executed at the very end dnl of config.status. AC_CONFIG_COMMANDS_PRE([ AC_CONFIG_COMMANDS([$1/stamp-it], [ if [ ! grep "^# INTLTOOL_MAKEFILE$" "$1/Makefile.in" > /dev/null ]; then AC_MSG_ERROR([$1/Makefile.in.in was not created by intltoolize.]) fi rm -f "$1/stamp-it" "$1/stamp-it.tmp" "$1/POTFILES" "$1/Makefile.tmp" >"$1/stamp-it.tmp" [sed '/^#/d s/^[[].*] *// /^[ ]*$/d '"s|^| $ac_top_srcdir/|" \ "$srcdir/$1/POTFILES.in" | sed '$!s/$/ \\/' >"$1/POTFILES" ] [sed '/^POTFILES =/,/[^\\]$/ { /^POTFILES =/!d r $1/POTFILES } ' "$1/Makefile.in" >"$1/Makefile"] rm -f "$1/Makefile.tmp" mv "$1/stamp-it.tmp" "$1/stamp-it" ]) ])dnl ]) # _IT_SUBST(VARIABLE) # ------------------- # Abstract macro to do either _AM_SUBST_NOTMAKE or AC_SUBST # AC_DEFUN([_IT_SUBST], [ AC_SUBST([$1]) m4_ifdef([_AM_SUBST_NOTMAKE], [_AM_SUBST_NOTMAKE([$1])]) ] ) # deprecated macros AU_ALIAS([AC_PROG_INTLTOOL], [IT_PROG_INTLTOOL]) # A hint is needed for aclocal from Automake <= 1.9.4: # AC_DEFUN([AC_PROG_INTLTOOL], ...) # nls.m4 serial 5 (gettext-0.18) dnl Copyright (C) 1995-2003, 2005-2006, 2008-2014, 2016 Free Software dnl Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl dnl This file can be used in projects which are not available under dnl the GNU General Public License or the GNU Library General Public dnl License but which still want to provide support for the GNU gettext dnl functionality. dnl Please note that the actual code of the GNU gettext library is covered dnl by the GNU Library General Public License, and the rest of the GNU dnl gettext package is covered by the GNU General Public License. dnl They are *not* in the public domain. dnl Authors: dnl Ulrich Drepper , 1995-2000. dnl Bruno Haible , 2000-2003. AC_PREREQ([2.50]) AC_DEFUN([AM_NLS], [ AC_MSG_CHECKING([whether NLS is requested]) dnl Default is enabled NLS AC_ARG_ENABLE([nls], [ --disable-nls do not use Native Language Support], USE_NLS=$enableval, USE_NLS=yes) AC_MSG_RESULT([$USE_NLS]) AC_SUBST([USE_NLS]) ]) # Copyright (C) 2006-2014 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # _AM_SUBST_NOTMAKE(VARIABLE) # --------------------------- # Prevent Automake from outputting VARIABLE = @VARIABLE@ in Makefile.in. # This macro is traced by Automake. AC_DEFUN([_AM_SUBST_NOTMAKE]) # AM_SUBST_NOTMAKE(VARIABLE) # -------------------------- # Public sister of _AM_SUBST_NOTMAKE. AC_DEFUN([AM_SUBST_NOTMAKE], [_AM_SUBST_NOTMAKE($@)]) xscreensaver-5.36/ax_pthread.m4000644 000767 000024 00000032676 12341006130 016523 0ustar00jwzstaff000000 000000 # =========================================================================== # http://www.gnu.org/software/autoconf-archive/ax_pthread.html # =========================================================================== # # SYNOPSIS # # AX_PTHREAD([ACTION-IF-FOUND[, ACTION-IF-NOT-FOUND]]) # # DESCRIPTION # # This macro figures out how to build C programs using POSIX threads. It # sets the PTHREAD_LIBS output variable to the threads library and linker # flags, and the PTHREAD_CFLAGS output variable to any special C compiler # flags that are needed. (The user can also force certain compiler # flags/libs to be tested by setting these environment variables.) # # Also sets PTHREAD_CC to any special C compiler that is needed for # multi-threaded programs (defaults to the value of CC otherwise). (This # is necessary on AIX to use the special cc_r compiler alias.) # # NOTE: You are assumed to not only compile your program with these flags, # but also link it with them as well. e.g. you should link with # $PTHREAD_CC $CFLAGS $PTHREAD_CFLAGS $LDFLAGS ... $PTHREAD_LIBS $LIBS # # If you are only building threads programs, you may wish to use these # variables in your default LIBS, CFLAGS, and CC: # # LIBS="$PTHREAD_LIBS $LIBS" # CFLAGS="$CFLAGS $PTHREAD_CFLAGS" # CC="$PTHREAD_CC" # # In addition, if the PTHREAD_CREATE_JOINABLE thread-attribute constant # has a nonstandard name, defines PTHREAD_CREATE_JOINABLE to that name # (e.g. PTHREAD_CREATE_UNDETACHED on AIX). # # Also HAVE_PTHREAD_PRIO_INHERIT is defined if pthread is found and the # PTHREAD_PRIO_INHERIT symbol is defined when compiling with # PTHREAD_CFLAGS. # # ACTION-IF-FOUND is a list of shell commands to run if a threads library # is found, and ACTION-IF-NOT-FOUND is a list of commands to run it if it # is not found. If ACTION-IF-FOUND is not specified, the default action # will define HAVE_PTHREAD. # # Please let the authors know if this macro fails on any platform, or if # you have any other suggestions or comments. This macro was based on work # by SGJ on autoconf scripts for FFTW (http://www.fftw.org/) (with help # from M. Frigo), as well as ac_pthread and hb_pthread macros posted by # Alejandro Forero Cuervo to the autoconf macro repository. We are also # grateful for the helpful feedback of numerous users. # # Updated for Autoconf 2.68 by Daniel Richard G. # # LICENSE # # Copyright (c) 2008 Steven G. Johnson # Copyright (c) 2011 Daniel Richard G. # # This program is free software: you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by the # Free Software Foundation, either version 3 of the License, or (at your # option) any later version. # # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General # Public License for more details. # # You should have received a copy of the GNU General Public License along # with this program. If not, see . # # As a special exception, the respective Autoconf Macro's copyright owner # gives unlimited permission to copy, distribute and modify the configure # scripts that are the output of Autoconf when processing the Macro. You # need not follow the terms of the GNU General Public License when using # or distributing such scripts, even though portions of the text of the # Macro appear in them. The GNU General Public License (GPL) does govern # all other use of the material that constitutes the Autoconf Macro. # # This special exception to the GPL applies to versions of the Autoconf # Macro released by the Autoconf Archive. When you make and distribute a # modified version of the Autoconf Macro, you may extend this special # exception to the GPL to apply to your modified version as well. #serial 21 AU_ALIAS([ACX_PTHREAD], [AX_PTHREAD]) AC_DEFUN([AX_PTHREAD], [ AC_REQUIRE([AC_CANONICAL_HOST]) AC_LANG_PUSH([C]) ax_pthread_ok=no # We used to check for pthread.h first, but this fails if pthread.h # requires special compiler flags (e.g. on True64 or Sequent). # It gets checked for in the link test anyway. # First of all, check if the user has set any of the PTHREAD_LIBS, # etcetera environment variables, and if threads linking works using # them: if test x"$PTHREAD_LIBS$PTHREAD_CFLAGS" != x; then save_CFLAGS="$CFLAGS" CFLAGS="$CFLAGS $PTHREAD_CFLAGS" save_LIBS="$LIBS" LIBS="$PTHREAD_LIBS $LIBS" AC_MSG_CHECKING([for pthread_join in LIBS=$PTHREAD_LIBS with CFLAGS=$PTHREAD_CFLAGS]) AC_TRY_LINK_FUNC([pthread_join], [ax_pthread_ok=yes]) AC_MSG_RESULT([$ax_pthread_ok]) if test x"$ax_pthread_ok" = xno; then PTHREAD_LIBS="" PTHREAD_CFLAGS="" fi LIBS="$save_LIBS" CFLAGS="$save_CFLAGS" fi # We must check for the threads library under a number of different # names; the ordering is very important because some systems # (e.g. DEC) have both -lpthread and -lpthreads, where one of the # libraries is broken (non-POSIX). # Create a list of thread flags to try. Items starting with a "-" are # C compiler flags, and other items are library names, except for "none" # which indicates that we try without any flags at all, and "pthread-config" # which is a program returning the flags for the Pth emulation library. ax_pthread_flags="pthreads none -Kthread -kthread lthread -pthread -pthreads -mthreads pthread --thread-safe -mt pthread-config" # The ordering *is* (sometimes) important. Some notes on the # individual items follow: # pthreads: AIX (must check this before -lpthread) # none: in case threads are in libc; should be tried before -Kthread and # other compiler flags to prevent continual compiler warnings # -Kthread: Sequent (threads in libc, but -Kthread needed for pthread.h) # -kthread: FreeBSD kernel threads (preferred to -pthread since SMP-able) # lthread: LinuxThreads port on FreeBSD (also preferred to -pthread) # -pthread: Linux/gcc (kernel threads), BSD/gcc (userland threads) # -pthreads: Solaris/gcc # -mthreads: Mingw32/gcc, Lynx/gcc # -mt: Sun Workshop C (may only link SunOS threads [-lthread], but it # doesn't hurt to check since this sometimes defines pthreads too; # also defines -D_REENTRANT) # ... -mt is also the pthreads flag for HP/aCC # pthread: Linux, etcetera # --thread-safe: KAI C++ # pthread-config: use pthread-config program (for GNU Pth library) case ${host_os} in solaris*) # On Solaris (at least, for some versions), libc contains stubbed # (non-functional) versions of the pthreads routines, so link-based # tests will erroneously succeed. (We need to link with -pthreads/-mt/ # -lpthread.) (The stubs are missing pthread_cleanup_push, or rather # a function called by this macro, so we could check for that, but # who knows whether they'll stub that too in a future libc.) So, # we'll just look for -pthreads and -lpthread first: ax_pthread_flags="-pthreads pthread -mt -pthread $ax_pthread_flags" ;; darwin*) ax_pthread_flags="-pthread $ax_pthread_flags" ;; esac # Clang doesn't consider unrecognized options an error unless we specify # -Werror. We throw in some extra Clang-specific options to ensure that # this doesn't happen for GCC, which also accepts -Werror. AC_MSG_CHECKING([if compiler needs -Werror to reject unknown flags]) save_CFLAGS="$CFLAGS" ax_pthread_extra_flags="-Werror" CFLAGS="$CFLAGS $ax_pthread_extra_flags -Wunknown-warning-option -Wsizeof-array-argument" AC_COMPILE_IFELSE([AC_LANG_PROGRAM([int foo(void);],[foo()])], [AC_MSG_RESULT([yes])], [ax_pthread_extra_flags= AC_MSG_RESULT([no])]) CFLAGS="$save_CFLAGS" if test x"$ax_pthread_ok" = xno; then for flag in $ax_pthread_flags; do case $flag in none) AC_MSG_CHECKING([whether pthreads work without any flags]) ;; -*) AC_MSG_CHECKING([whether pthreads work with $flag]) PTHREAD_CFLAGS="$flag" ;; pthread-config) AC_CHECK_PROG([ax_pthread_config], [pthread-config], [yes], [no]) if test x"$ax_pthread_config" = xno; then continue; fi PTHREAD_CFLAGS="`pthread-config --cflags`" PTHREAD_LIBS="`pthread-config --ldflags` `pthread-config --libs`" ;; *) AC_MSG_CHECKING([for the pthreads library -l$flag]) PTHREAD_LIBS="-l$flag" ;; esac save_LIBS="$LIBS" save_CFLAGS="$CFLAGS" LIBS="$PTHREAD_LIBS $LIBS" CFLAGS="$CFLAGS $PTHREAD_CFLAGS $ax_pthread_extra_flags" # Check for various functions. We must include pthread.h, # since some functions may be macros. (On the Sequent, we # need a special flag -Kthread to make this header compile.) # We check for pthread_join because it is in -lpthread on IRIX # while pthread_create is in libc. We check for pthread_attr_init # due to DEC craziness with -lpthreads. We check for # pthread_cleanup_push because it is one of the few pthread # functions on Solaris that doesn't have a non-functional libc stub. # We try pthread_create on general principles. AC_LINK_IFELSE([AC_LANG_PROGRAM([#include static void routine(void *a) { a = 0; } static void *start_routine(void *a) { return a; }], [pthread_t th; pthread_attr_t attr; pthread_create(&th, 0, start_routine, 0); pthread_join(th, 0); pthread_attr_init(&attr); pthread_cleanup_push(routine, 0); pthread_cleanup_pop(0) /* ; */])], [ax_pthread_ok=yes], []) LIBS="$save_LIBS" CFLAGS="$save_CFLAGS" AC_MSG_RESULT([$ax_pthread_ok]) if test "x$ax_pthread_ok" = xyes; then break; fi PTHREAD_LIBS="" PTHREAD_CFLAGS="" done fi # Various other checks: if test "x$ax_pthread_ok" = xyes; then save_LIBS="$LIBS" LIBS="$PTHREAD_LIBS $LIBS" save_CFLAGS="$CFLAGS" CFLAGS="$CFLAGS $PTHREAD_CFLAGS" # Detect AIX lossage: JOINABLE attribute is called UNDETACHED. AC_MSG_CHECKING([for joinable pthread attribute]) attr_name=unknown for attr in PTHREAD_CREATE_JOINABLE PTHREAD_CREATE_UNDETACHED; do AC_LINK_IFELSE([AC_LANG_PROGRAM([#include ], [int attr = $attr; return attr /* ; */])], [attr_name=$attr; break], []) done AC_MSG_RESULT([$attr_name]) if test "$attr_name" != PTHREAD_CREATE_JOINABLE; then AC_DEFINE_UNQUOTED([PTHREAD_CREATE_JOINABLE], [$attr_name], [Define to necessary symbol if this constant uses a non-standard name on your system.]) fi AC_MSG_CHECKING([if more special flags are required for pthreads]) flag=no case ${host_os} in aix* | freebsd* | darwin*) flag="-D_THREAD_SAFE";; osf* | hpux*) flag="-D_REENTRANT";; solaris*) if test "$GCC" = "yes"; then flag="-D_REENTRANT" else # TODO: What about Clang on Solaris? flag="-mt -D_REENTRANT" fi ;; esac AC_MSG_RESULT([$flag]) if test "x$flag" != xno; then PTHREAD_CFLAGS="$flag $PTHREAD_CFLAGS" fi AC_CACHE_CHECK([for PTHREAD_PRIO_INHERIT], [ax_cv_PTHREAD_PRIO_INHERIT], [ AC_LINK_IFELSE([AC_LANG_PROGRAM([[#include ]], [[int i = PTHREAD_PRIO_INHERIT;]])], [ax_cv_PTHREAD_PRIO_INHERIT=yes], [ax_cv_PTHREAD_PRIO_INHERIT=no]) ]) AS_IF([test "x$ax_cv_PTHREAD_PRIO_INHERIT" = "xyes"], [AC_DEFINE([HAVE_PTHREAD_PRIO_INHERIT], [1], [Have PTHREAD_PRIO_INHERIT.])]) LIBS="$save_LIBS" CFLAGS="$save_CFLAGS" # More AIX lossage: compile with *_r variant if test "x$GCC" != xyes; then case $host_os in aix*) AS_CASE(["x/$CC"], [x*/c89|x*/c89_128|x*/c99|x*/c99_128|x*/cc|x*/cc128|x*/xlc|x*/xlc_v6|x*/xlc128|x*/xlc128_v6], [#handle absolute path differently from PATH based program lookup AS_CASE(["x$CC"], [x/*], [AS_IF([AS_EXECUTABLE_P([${CC}_r])],[PTHREAD_CC="${CC}_r"])], [AC_CHECK_PROGS([PTHREAD_CC],[${CC}_r],[$CC])])]) ;; esac fi fi test -n "$PTHREAD_CC" || PTHREAD_CC="$CC" AC_SUBST([PTHREAD_LIBS]) AC_SUBST([PTHREAD_CFLAGS]) AC_SUBST([PTHREAD_CC]) # Finally, execute ACTION-IF-FOUND/ACTION-IF-NOT-FOUND: if test x"$ax_pthread_ok" = xyes; then ifelse([$1],,[AC_DEFINE([HAVE_PTHREAD],[1],[Define if you have POSIX threads libraries and header files.])],[$1]) : else ax_pthread_ok=no $2 fi AC_LANG_POP ])dnl AX_PTHREAD xscreensaver-5.36/config.sub000664 000767 000024 00000105412 12250746731 016132 0ustar00jwzstaff000000 000000 #! /bin/sh # Configuration validation subroutine script. # Copyright 1992-2013 Free Software Foundation, Inc. timestamp='2013-10-01' # This file is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, see . # # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that # program. This Exception is an additional permission under section 7 # of the GNU General Public License, version 3 ("GPLv3"). # Please send patches with a ChangeLog entry to config-patches@gnu.org. # # Configuration subroutine to validate and canonicalize a configuration type. # Supply the specified configuration type as an argument. # If it is invalid, we print an error message on stderr and exit with code 1. # Otherwise, we print the canonical config type on stdout and succeed. # You can get the latest version of this script from: # http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.sub;hb=HEAD # This file is supposed to be the same for all GNU packages # and recognize all the CPU types, system types and aliases # that are meaningful with *any* GNU software. # Each package is responsible for reporting which valid configurations # it does not support. The user should be able to distinguish # a failure to support a valid configuration from a meaningless # configuration. # The goal of this file is to map all the various variations of a given # machine specification into a single specification in the form: # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM # or in some cases, the newer four-part form: # CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM # It is wrong to echo any other type of specification. me=`echo "$0" | sed -e 's,.*/,,'` usage="\ Usage: $0 [OPTION] CPU-MFR-OPSYS $0 [OPTION] ALIAS Canonicalize a configuration name. Operation modes: -h, --help print this help, then exit -t, --time-stamp print date of last modification, then exit -v, --version print version number, then exit Report bugs and patches to ." version="\ GNU config.sub ($timestamp) Copyright 1992-2013 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." help=" Try \`$me --help' for more information." # Parse command line while test $# -gt 0 ; do case $1 in --time-stamp | --time* | -t ) echo "$timestamp" ; exit ;; --version | -v ) echo "$version" ; exit ;; --help | --h* | -h ) echo "$usage"; exit ;; -- ) # Stop option processing shift; break ;; - ) # Use stdin as input. break ;; -* ) echo "$me: invalid option $1$help" exit 1 ;; *local*) # First pass through any local machine types. echo $1 exit ;; * ) break ;; esac done case $# in 0) echo "$me: missing argument$help" >&2 exit 1;; 1) ;; *) echo "$me: too many arguments$help" >&2 exit 1;; esac # Separate what the user gave into CPU-COMPANY and OS or KERNEL-OS (if any). # Here we must recognize all the valid KERNEL-OS combinations. maybe_os=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'` case $maybe_os in nto-qnx* | linux-gnu* | linux-android* | linux-dietlibc | linux-newlib* | \ linux-musl* | linux-uclibc* | uclinux-uclibc* | uclinux-gnu* | kfreebsd*-gnu* | \ knetbsd*-gnu* | netbsd*-gnu* | \ kopensolaris*-gnu* | \ storm-chaos* | os2-emx* | rtmk-nova*) os=-$maybe_os basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'` ;; android-linux) os=-linux-android basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'`-unknown ;; *) basic_machine=`echo $1 | sed 's/-[^-]*$//'` if [ $basic_machine != $1 ] then os=`echo $1 | sed 's/.*-/-/'` else os=; fi ;; esac ### Let's recognize common machines as not being operating systems so ### that things like config.sub decstation-3100 work. We also ### recognize some manufacturers as not being operating systems, so we ### can provide default operating systems below. case $os in -sun*os*) # Prevent following clause from handling this invalid input. ;; -dec* | -mips* | -sequent* | -encore* | -pc532* | -sgi* | -sony* | \ -att* | -7300* | -3300* | -delta* | -motorola* | -sun[234]* | \ -unicom* | -ibm* | -next | -hp | -isi* | -apollo | -altos* | \ -convergent* | -ncr* | -news | -32* | -3600* | -3100* | -hitachi* |\ -c[123]* | -convex* | -sun | -crds | -omron* | -dg | -ultra | -tti* | \ -harris | -dolphin | -highlevel | -gould | -cbm | -ns | -masscomp | \ -apple | -axis | -knuth | -cray | -microblaze*) os= basic_machine=$1 ;; -bluegene*) os=-cnk ;; -sim | -cisco | -oki | -wec | -winbond) os= basic_machine=$1 ;; -scout) ;; -wrs) os=-vxworks basic_machine=$1 ;; -chorusos*) os=-chorusos basic_machine=$1 ;; -chorusrdb) os=-chorusrdb basic_machine=$1 ;; -hiux*) os=-hiuxwe2 ;; -sco6) os=-sco5v6 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco5) os=-sco3.2v5 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco4) os=-sco3.2v4 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco3.2.[4-9]*) os=`echo $os | sed -e 's/sco3.2./sco3.2v/'` basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco3.2v[4-9]*) # Don't forget version if it is 3.2v4 or newer. basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco5v6*) # Don't forget version if it is 3.2v4 or newer. basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco*) os=-sco3.2v2 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -udk*) basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -isc) os=-isc2.2 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -clix*) basic_machine=clipper-intergraph ;; -isc*) basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -lynx*178) os=-lynxos178 ;; -lynx*5) os=-lynxos5 ;; -lynx*) os=-lynxos ;; -ptx*) basic_machine=`echo $1 | sed -e 's/86-.*/86-sequent/'` ;; -windowsnt*) os=`echo $os | sed -e 's/windowsnt/winnt/'` ;; -psos*) os=-psos ;; -mint | -mint[0-9]*) basic_machine=m68k-atari os=-mint ;; esac # Decode aliases for certain CPU-COMPANY combinations. case $basic_machine in # Recognize the basic CPU types without company name. # Some are omitted here because they have special meanings below. 1750a | 580 \ | a29k \ | aarch64 | aarch64_be \ | alpha | alphaev[4-8] | alphaev56 | alphaev6[78] | alphapca5[67] \ | alpha64 | alpha64ev[4-8] | alpha64ev56 | alpha64ev6[78] | alpha64pca5[67] \ | am33_2.0 \ | arc | arceb \ | arm | arm[bl]e | arme[lb] | armv[2-8] | armv[3-8][lb] | armv7[arm] \ | avr | avr32 \ | be32 | be64 \ | bfin \ | c4x | c8051 | clipper \ | d10v | d30v | dlx | dsp16xx \ | epiphany \ | fido | fr30 | frv \ | h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \ | hexagon \ | i370 | i860 | i960 | ia64 \ | ip2k | iq2000 \ | k1om \ | le32 | le64 \ | lm32 \ | m32c | m32r | m32rle | m68000 | m68k | m88k \ | maxq | mb | microblaze | microblazeel | mcore | mep | metag \ | mips | mipsbe | mipseb | mipsel | mipsle \ | mips16 \ | mips64 | mips64el \ | mips64octeon | mips64octeonel \ | mips64orion | mips64orionel \ | mips64r5900 | mips64r5900el \ | mips64vr | mips64vrel \ | mips64vr4100 | mips64vr4100el \ | mips64vr4300 | mips64vr4300el \ | mips64vr5000 | mips64vr5000el \ | mips64vr5900 | mips64vr5900el \ | mipsisa32 | mipsisa32el \ | mipsisa32r2 | mipsisa32r2el \ | mipsisa64 | mipsisa64el \ | mipsisa64r2 | mipsisa64r2el \ | mipsisa64sb1 | mipsisa64sb1el \ | mipsisa64sr71k | mipsisa64sr71kel \ | mipsr5900 | mipsr5900el \ | mipstx39 | mipstx39el \ | mn10200 | mn10300 \ | moxie \ | mt \ | msp430 \ | nds32 | nds32le | nds32be \ | nios | nios2 | nios2eb | nios2el \ | ns16k | ns32k \ | open8 \ | or1k | or32 \ | pdp10 | pdp11 | pj | pjl \ | powerpc | powerpc64 | powerpc64le | powerpcle \ | pyramid \ | rl78 | rx \ | score \ | sh | sh[1234] | sh[24]a | sh[24]aeb | sh[23]e | sh[34]eb | sheb | shbe | shle | sh[1234]le | sh3ele \ | sh64 | sh64le \ | sparc | sparc64 | sparc64b | sparc64v | sparc86x | sparclet | sparclite \ | sparcv8 | sparcv9 | sparcv9b | sparcv9v \ | spu \ | tahoe | tic4x | tic54x | tic55x | tic6x | tic80 | tron \ | ubicom32 \ | v850 | v850e | v850e1 | v850e2 | v850es | v850e2v3 \ | we32k \ | x86 | xc16x | xstormy16 | xtensa \ | z8k | z80) basic_machine=$basic_machine-unknown ;; c54x) basic_machine=tic54x-unknown ;; c55x) basic_machine=tic55x-unknown ;; c6x) basic_machine=tic6x-unknown ;; m6811 | m68hc11 | m6812 | m68hc12 | m68hcs12x | nvptx | picochip) basic_machine=$basic_machine-unknown os=-none ;; m88110 | m680[12346]0 | m683?2 | m68360 | m5200 | v70 | w65 | z8k) ;; ms1) basic_machine=mt-unknown ;; strongarm | thumb | xscale) basic_machine=arm-unknown ;; xgate) basic_machine=$basic_machine-unknown os=-none ;; xscaleeb) basic_machine=armeb-unknown ;; xscaleel) basic_machine=armel-unknown ;; # We use `pc' rather than `unknown' # because (1) that's what they normally are, and # (2) the word "unknown" tends to confuse beginning users. i*86 | x86_64) basic_machine=$basic_machine-pc ;; # Object if more than one company name word. *-*-*) echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2 exit 1 ;; # Recognize the basic CPU types with company name. 580-* \ | a29k-* \ | aarch64-* | aarch64_be-* \ | alpha-* | alphaev[4-8]-* | alphaev56-* | alphaev6[78]-* \ | alpha64-* | alpha64ev[4-8]-* | alpha64ev56-* | alpha64ev6[78]-* \ | alphapca5[67]-* | alpha64pca5[67]-* | arc-* | arceb-* \ | arm-* | armbe-* | armle-* | armeb-* | armv*-* \ | avr-* | avr32-* \ | be32-* | be64-* \ | bfin-* | bs2000-* \ | c[123]* | c30-* | [cjt]90-* | c4x-* \ | c8051-* | clipper-* | craynv-* | cydra-* \ | d10v-* | d30v-* | dlx-* \ | elxsi-* \ | f30[01]-* | f700-* | fido-* | fr30-* | frv-* | fx80-* \ | h8300-* | h8500-* \ | hppa-* | hppa1.[01]-* | hppa2.0-* | hppa2.0[nw]-* | hppa64-* \ | hexagon-* \ | i*86-* | i860-* | i960-* | ia64-* \ | ip2k-* | iq2000-* \ | k1om-* \ | le32-* | le64-* \ | lm32-* \ | m32c-* | m32r-* | m32rle-* \ | m68000-* | m680[012346]0-* | m68360-* | m683?2-* | m68k-* \ | m88110-* | m88k-* | maxq-* | mcore-* | metag-* \ | microblaze-* | microblazeel-* \ | mips-* | mipsbe-* | mipseb-* | mipsel-* | mipsle-* \ | mips16-* \ | mips64-* | mips64el-* \ | mips64octeon-* | mips64octeonel-* \ | mips64orion-* | mips64orionel-* \ | mips64r5900-* | mips64r5900el-* \ | mips64vr-* | mips64vrel-* \ | mips64vr4100-* | mips64vr4100el-* \ | mips64vr4300-* | mips64vr4300el-* \ | mips64vr5000-* | mips64vr5000el-* \ | mips64vr5900-* | mips64vr5900el-* \ | mipsisa32-* | mipsisa32el-* \ | mipsisa32r2-* | mipsisa32r2el-* \ | mipsisa64-* | mipsisa64el-* \ | mipsisa64r2-* | mipsisa64r2el-* \ | mipsisa64sb1-* | mipsisa64sb1el-* \ | mipsisa64sr71k-* | mipsisa64sr71kel-* \ | mipsr5900-* | mipsr5900el-* \ | mipstx39-* | mipstx39el-* \ | mmix-* \ | mt-* \ | msp430-* \ | nds32-* | nds32le-* | nds32be-* \ | nios-* | nios2-* | nios2eb-* | nios2el-* \ | none-* | np1-* | ns16k-* | ns32k-* \ | open8-* \ | orion-* \ | pdp10-* | pdp11-* | pj-* | pjl-* | pn-* | power-* \ | powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* \ | pyramid-* \ | rl78-* | romp-* | rs6000-* | rx-* \ | sh-* | sh[1234]-* | sh[24]a-* | sh[24]aeb-* | sh[23]e-* | sh[34]eb-* | sheb-* | shbe-* \ | shle-* | sh[1234]le-* | sh3ele-* | sh64-* | sh64le-* \ | sparc-* | sparc64-* | sparc64b-* | sparc64v-* | sparc86x-* | sparclet-* \ | sparclite-* \ | sparcv8-* | sparcv9-* | sparcv9b-* | sparcv9v-* | sv1-* | sx?-* \ | tahoe-* \ | tic30-* | tic4x-* | tic54x-* | tic55x-* | tic6x-* | tic80-* \ | tile*-* \ | tron-* \ | ubicom32-* \ | v850-* | v850e-* | v850e1-* | v850es-* | v850e2-* | v850e2v3-* \ | vax-* \ | we32k-* \ | x86-* | x86_64-* | xc16x-* | xps100-* \ | xstormy16-* | xtensa*-* \ | ymp-* \ | z8k-* | z80-*) ;; # Recognize the basic CPU types without company name, with glob match. xtensa*) basic_machine=$basic_machine-unknown ;; # Recognize the various machine names and aliases which stand # for a CPU type and a company and sometimes even an OS. 386bsd) basic_machine=i386-unknown os=-bsd ;; 3b1 | 7300 | 7300-att | att-7300 | pc7300 | safari | unixpc) basic_machine=m68000-att ;; 3b*) basic_machine=we32k-att ;; a29khif) basic_machine=a29k-amd os=-udi ;; abacus) basic_machine=abacus-unknown ;; adobe68k) basic_machine=m68010-adobe os=-scout ;; alliant | fx80) basic_machine=fx80-alliant ;; altos | altos3068) basic_machine=m68k-altos ;; am29k) basic_machine=a29k-none os=-bsd ;; amd64) basic_machine=x86_64-pc ;; amd64-*) basic_machine=x86_64-`echo $basic_machine | sed 's/^[^-]*-//'` ;; amdahl) basic_machine=580-amdahl os=-sysv ;; amiga | amiga-*) basic_machine=m68k-unknown ;; amigaos | amigados) basic_machine=m68k-unknown os=-amigaos ;; amigaunix | amix) basic_machine=m68k-unknown os=-sysv4 ;; apollo68) basic_machine=m68k-apollo os=-sysv ;; apollo68bsd) basic_machine=m68k-apollo os=-bsd ;; aros) basic_machine=i386-pc os=-aros ;; aux) basic_machine=m68k-apple os=-aux ;; balance) basic_machine=ns32k-sequent os=-dynix ;; blackfin) basic_machine=bfin-unknown os=-linux ;; blackfin-*) basic_machine=bfin-`echo $basic_machine | sed 's/^[^-]*-//'` os=-linux ;; bluegene*) basic_machine=powerpc-ibm os=-cnk ;; c54x-*) basic_machine=tic54x-`echo $basic_machine | sed 's/^[^-]*-//'` ;; c55x-*) basic_machine=tic55x-`echo $basic_machine | sed 's/^[^-]*-//'` ;; c6x-*) basic_machine=tic6x-`echo $basic_machine | sed 's/^[^-]*-//'` ;; c90) basic_machine=c90-cray os=-unicos ;; cegcc) basic_machine=arm-unknown os=-cegcc ;; convex-c1) basic_machine=c1-convex os=-bsd ;; convex-c2) basic_machine=c2-convex os=-bsd ;; convex-c32) basic_machine=c32-convex os=-bsd ;; convex-c34) basic_machine=c34-convex os=-bsd ;; convex-c38) basic_machine=c38-convex os=-bsd ;; cray | j90) basic_machine=j90-cray os=-unicos ;; craynv) basic_machine=craynv-cray os=-unicosmp ;; cr16 | cr16-*) basic_machine=cr16-unknown os=-elf ;; crds | unos) basic_machine=m68k-crds ;; crisv32 | crisv32-* | etraxfs*) basic_machine=crisv32-axis ;; cris | cris-* | etrax*) basic_machine=cris-axis ;; crx) basic_machine=crx-unknown os=-elf ;; da30 | da30-*) basic_machine=m68k-da30 ;; decstation | decstation-3100 | pmax | pmax-* | pmin | dec3100 | decstatn) basic_machine=mips-dec ;; decsystem10* | dec10*) basic_machine=pdp10-dec os=-tops10 ;; decsystem20* | dec20*) basic_machine=pdp10-dec os=-tops20 ;; delta | 3300 | motorola-3300 | motorola-delta \ | 3300-motorola | delta-motorola) basic_machine=m68k-motorola ;; delta88) basic_machine=m88k-motorola os=-sysv3 ;; dicos) basic_machine=i686-pc os=-dicos ;; djgpp) basic_machine=i586-pc os=-msdosdjgpp ;; dpx20 | dpx20-*) basic_machine=rs6000-bull os=-bosx ;; dpx2* | dpx2*-bull) basic_machine=m68k-bull os=-sysv3 ;; ebmon29k) basic_machine=a29k-amd os=-ebmon ;; elxsi) basic_machine=elxsi-elxsi os=-bsd ;; encore | umax | mmax) basic_machine=ns32k-encore ;; es1800 | OSE68k | ose68k | ose | OSE) basic_machine=m68k-ericsson os=-ose ;; fx2800) basic_machine=i860-alliant ;; genix) basic_machine=ns32k-ns ;; gmicro) basic_machine=tron-gmicro os=-sysv ;; go32) basic_machine=i386-pc os=-go32 ;; h3050r* | hiux*) basic_machine=hppa1.1-hitachi os=-hiuxwe2 ;; h8300hms) basic_machine=h8300-hitachi os=-hms ;; h8300xray) basic_machine=h8300-hitachi os=-xray ;; h8500hms) basic_machine=h8500-hitachi os=-hms ;; harris) basic_machine=m88k-harris os=-sysv3 ;; hp300-*) basic_machine=m68k-hp ;; hp300bsd) basic_machine=m68k-hp os=-bsd ;; hp300hpux) basic_machine=m68k-hp os=-hpux ;; hp3k9[0-9][0-9] | hp9[0-9][0-9]) basic_machine=hppa1.0-hp ;; hp9k2[0-9][0-9] | hp9k31[0-9]) basic_machine=m68000-hp ;; hp9k3[2-9][0-9]) basic_machine=m68k-hp ;; hp9k6[0-9][0-9] | hp6[0-9][0-9]) basic_machine=hppa1.0-hp ;; hp9k7[0-79][0-9] | hp7[0-79][0-9]) basic_machine=hppa1.1-hp ;; hp9k78[0-9] | hp78[0-9]) # FIXME: really hppa2.0-hp basic_machine=hppa1.1-hp ;; hp9k8[67]1 | hp8[67]1 | hp9k80[24] | hp80[24] | hp9k8[78]9 | hp8[78]9 | hp9k893 | hp893) # FIXME: really hppa2.0-hp basic_machine=hppa1.1-hp ;; hp9k8[0-9][13679] | hp8[0-9][13679]) basic_machine=hppa1.1-hp ;; hp9k8[0-9][0-9] | hp8[0-9][0-9]) basic_machine=hppa1.0-hp ;; hppa-next) os=-nextstep3 ;; hppaosf) basic_machine=hppa1.1-hp os=-osf ;; hppro) basic_machine=hppa1.1-hp os=-proelf ;; i370-ibm* | ibm*) basic_machine=i370-ibm ;; i*86v32) basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` os=-sysv32 ;; i*86v4*) basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` os=-sysv4 ;; i*86v) basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` os=-sysv ;; i*86sol2) basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` os=-solaris2 ;; i386mach) basic_machine=i386-mach os=-mach ;; i386-vsta | vsta) basic_machine=i386-unknown os=-vsta ;; iris | iris4d) basic_machine=mips-sgi case $os in -irix*) ;; *) os=-irix4 ;; esac ;; isi68 | isi) basic_machine=m68k-isi os=-sysv ;; m68knommu) basic_machine=m68k-unknown os=-linux ;; m68knommu-*) basic_machine=m68k-`echo $basic_machine | sed 's/^[^-]*-//'` os=-linux ;; m88k-omron*) basic_machine=m88k-omron ;; magnum | m3230) basic_machine=mips-mips os=-sysv ;; merlin) basic_machine=ns32k-utek os=-sysv ;; microblaze*) basic_machine=microblaze-xilinx ;; mingw64) basic_machine=x86_64-pc os=-mingw64 ;; mingw32) basic_machine=i686-pc os=-mingw32 ;; mingw32ce) basic_machine=arm-unknown os=-mingw32ce ;; miniframe) basic_machine=m68000-convergent ;; *mint | -mint[0-9]* | *MiNT | *MiNT[0-9]*) basic_machine=m68k-atari os=-mint ;; mips3*-*) basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'` ;; mips3*) basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`-unknown ;; monitor) basic_machine=m68k-rom68k os=-coff ;; morphos) basic_machine=powerpc-unknown os=-morphos ;; msdos) basic_machine=i386-pc os=-msdos ;; ms1-*) basic_machine=`echo $basic_machine | sed -e 's/ms1-/mt-/'` ;; msys) basic_machine=i686-pc os=-msys ;; mvs) basic_machine=i370-ibm os=-mvs ;; nacl) basic_machine=le32-unknown os=-nacl ;; ncr3000) basic_machine=i486-ncr os=-sysv4 ;; netbsd386) basic_machine=i386-unknown os=-netbsd ;; netwinder) basic_machine=armv4l-rebel os=-linux ;; news | news700 | news800 | news900) basic_machine=m68k-sony os=-newsos ;; news1000) basic_machine=m68030-sony os=-newsos ;; news-3600 | risc-news) basic_machine=mips-sony os=-newsos ;; necv70) basic_machine=v70-nec os=-sysv ;; next | m*-next ) basic_machine=m68k-next case $os in -nextstep* ) ;; -ns2*) os=-nextstep2 ;; *) os=-nextstep3 ;; esac ;; nh3000) basic_machine=m68k-harris os=-cxux ;; nh[45]000) basic_machine=m88k-harris os=-cxux ;; nindy960) basic_machine=i960-intel os=-nindy ;; mon960) basic_machine=i960-intel os=-mon960 ;; nonstopux) basic_machine=mips-compaq os=-nonstopux ;; np1) basic_machine=np1-gould ;; neo-tandem) basic_machine=neo-tandem ;; nse-tandem) basic_machine=nse-tandem ;; nsr-tandem) basic_machine=nsr-tandem ;; op50n-* | op60c-*) basic_machine=hppa1.1-oki os=-proelf ;; openrisc | openrisc-*) basic_machine=or32-unknown ;; os400) basic_machine=powerpc-ibm os=-os400 ;; OSE68000 | ose68000) basic_machine=m68000-ericsson os=-ose ;; os68k) basic_machine=m68k-none os=-os68k ;; pa-hitachi) basic_machine=hppa1.1-hitachi os=-hiuxwe2 ;; paragon) basic_machine=i860-intel os=-osf ;; parisc) basic_machine=hppa-unknown os=-linux ;; parisc-*) basic_machine=hppa-`echo $basic_machine | sed 's/^[^-]*-//'` os=-linux ;; pbd) basic_machine=sparc-tti ;; pbb) basic_machine=m68k-tti ;; pc532 | pc532-*) basic_machine=ns32k-pc532 ;; pc98) basic_machine=i386-pc ;; pc98-*) basic_machine=i386-`echo $basic_machine | sed 's/^[^-]*-//'` ;; pentium | p5 | k5 | k6 | nexgen | viac3) basic_machine=i586-pc ;; pentiumpro | p6 | 6x86 | athlon | athlon_*) basic_machine=i686-pc ;; pentiumii | pentium2 | pentiumiii | pentium3) basic_machine=i686-pc ;; pentium4) basic_machine=i786-pc ;; pentium-* | p5-* | k5-* | k6-* | nexgen-* | viac3-*) basic_machine=i586-`echo $basic_machine | sed 's/^[^-]*-//'` ;; pentiumpro-* | p6-* | 6x86-* | athlon-*) basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'` ;; pentiumii-* | pentium2-* | pentiumiii-* | pentium3-*) basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'` ;; pentium4-*) basic_machine=i786-`echo $basic_machine | sed 's/^[^-]*-//'` ;; pn) basic_machine=pn-gould ;; power) basic_machine=power-ibm ;; ppc | ppcbe) basic_machine=powerpc-unknown ;; ppc-* | ppcbe-*) basic_machine=powerpc-`echo $basic_machine | sed 's/^[^-]*-//'` ;; ppcle | powerpclittle | ppc-le | powerpc-little) basic_machine=powerpcle-unknown ;; ppcle-* | powerpclittle-*) basic_machine=powerpcle-`echo $basic_machine | sed 's/^[^-]*-//'` ;; ppc64) basic_machine=powerpc64-unknown ;; ppc64-*) basic_machine=powerpc64-`echo $basic_machine | sed 's/^[^-]*-//'` ;; ppc64le | powerpc64little | ppc64-le | powerpc64-little) basic_machine=powerpc64le-unknown ;; ppc64le-* | powerpc64little-*) basic_machine=powerpc64le-`echo $basic_machine | sed 's/^[^-]*-//'` ;; ps2) basic_machine=i386-ibm ;; pw32) basic_machine=i586-unknown os=-pw32 ;; rdos | rdos64) basic_machine=x86_64-pc os=-rdos ;; rdos32) basic_machine=i386-pc os=-rdos ;; rom68k) basic_machine=m68k-rom68k os=-coff ;; rm[46]00) basic_machine=mips-siemens ;; rtpc | rtpc-*) basic_machine=romp-ibm ;; s390 | s390-*) basic_machine=s390-ibm ;; s390x | s390x-*) basic_machine=s390x-ibm ;; sa29200) basic_machine=a29k-amd os=-udi ;; sb1) basic_machine=mipsisa64sb1-unknown ;; sb1el) basic_machine=mipsisa64sb1el-unknown ;; sde) basic_machine=mipsisa32-sde os=-elf ;; sei) basic_machine=mips-sei os=-seiux ;; sequent) basic_machine=i386-sequent ;; sh) basic_machine=sh-hitachi os=-hms ;; sh5el) basic_machine=sh5le-unknown ;; sh64) basic_machine=sh64-unknown ;; sparclite-wrs | simso-wrs) basic_machine=sparclite-wrs os=-vxworks ;; sps7) basic_machine=m68k-bull os=-sysv2 ;; spur) basic_machine=spur-unknown ;; st2000) basic_machine=m68k-tandem ;; stratus) basic_machine=i860-stratus os=-sysv4 ;; strongarm-* | thumb-*) basic_machine=arm-`echo $basic_machine | sed 's/^[^-]*-//'` ;; sun2) basic_machine=m68000-sun ;; sun2os3) basic_machine=m68000-sun os=-sunos3 ;; sun2os4) basic_machine=m68000-sun os=-sunos4 ;; sun3os3) basic_machine=m68k-sun os=-sunos3 ;; sun3os4) basic_machine=m68k-sun os=-sunos4 ;; sun4os3) basic_machine=sparc-sun os=-sunos3 ;; sun4os4) basic_machine=sparc-sun os=-sunos4 ;; sun4sol2) basic_machine=sparc-sun os=-solaris2 ;; sun3 | sun3-*) basic_machine=m68k-sun ;; sun4) basic_machine=sparc-sun ;; sun386 | sun386i | roadrunner) basic_machine=i386-sun ;; sv1) basic_machine=sv1-cray os=-unicos ;; symmetry) basic_machine=i386-sequent os=-dynix ;; t3e) basic_machine=alphaev5-cray os=-unicos ;; t90) basic_machine=t90-cray os=-unicos ;; tile*) basic_machine=$basic_machine-unknown os=-linux-gnu ;; tx39) basic_machine=mipstx39-unknown ;; tx39el) basic_machine=mipstx39el-unknown ;; toad1) basic_machine=pdp10-xkl os=-tops20 ;; tower | tower-32) basic_machine=m68k-ncr ;; tpf) basic_machine=s390x-ibm os=-tpf ;; udi29k) basic_machine=a29k-amd os=-udi ;; ultra3) basic_machine=a29k-nyu os=-sym1 ;; v810 | necv810) basic_machine=v810-nec os=-none ;; vaxv) basic_machine=vax-dec os=-sysv ;; vms) basic_machine=vax-dec os=-vms ;; vpp*|vx|vx-*) basic_machine=f301-fujitsu ;; vxworks960) basic_machine=i960-wrs os=-vxworks ;; vxworks68) basic_machine=m68k-wrs os=-vxworks ;; vxworks29k) basic_machine=a29k-wrs os=-vxworks ;; w65*) basic_machine=w65-wdc os=-none ;; w89k-*) basic_machine=hppa1.1-winbond os=-proelf ;; xbox) basic_machine=i686-pc os=-mingw32 ;; xps | xps100) basic_machine=xps100-honeywell ;; xscale-* | xscalee[bl]-*) basic_machine=`echo $basic_machine | sed 's/^xscale/arm/'` ;; ymp) basic_machine=ymp-cray os=-unicos ;; z8k-*-coff) basic_machine=z8k-unknown os=-sim ;; z80-*-coff) basic_machine=z80-unknown os=-sim ;; none) basic_machine=none-none os=-none ;; # Here we handle the default manufacturer of certain CPU types. It is in # some cases the only manufacturer, in others, it is the most popular. w89k) basic_machine=hppa1.1-winbond ;; op50n) basic_machine=hppa1.1-oki ;; op60c) basic_machine=hppa1.1-oki ;; romp) basic_machine=romp-ibm ;; mmix) basic_machine=mmix-knuth ;; rs6000) basic_machine=rs6000-ibm ;; vax) basic_machine=vax-dec ;; pdp10) # there are many clones, so DEC is not a safe bet basic_machine=pdp10-unknown ;; pdp11) basic_machine=pdp11-dec ;; we32k) basic_machine=we32k-att ;; sh[1234] | sh[24]a | sh[24]aeb | sh[34]eb | sh[1234]le | sh[23]ele) basic_machine=sh-unknown ;; sparc | sparcv8 | sparcv9 | sparcv9b | sparcv9v) basic_machine=sparc-sun ;; cydra) basic_machine=cydra-cydrome ;; orion) basic_machine=orion-highlevel ;; orion105) basic_machine=clipper-highlevel ;; mac | mpw | mac-mpw) basic_machine=m68k-apple ;; pmac | pmac-mpw) basic_machine=powerpc-apple ;; *-unknown) # Make sure to match an already-canonicalized machine name. ;; *) echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2 exit 1 ;; esac # Here we canonicalize certain aliases for manufacturers. case $basic_machine in *-digital*) basic_machine=`echo $basic_machine | sed 's/digital.*/dec/'` ;; *-commodore*) basic_machine=`echo $basic_machine | sed 's/commodore.*/cbm/'` ;; *) ;; esac # Decode manufacturer-specific aliases for certain operating systems. if [ x"$os" != x"" ] then case $os in # First match some system type aliases # that might get confused with valid system types. # -solaris* is a basic system type, with this one exception. -auroraux) os=-auroraux ;; -solaris1 | -solaris1.*) os=`echo $os | sed -e 's|solaris1|sunos4|'` ;; -solaris) os=-solaris2 ;; -svr4*) os=-sysv4 ;; -unixware*) os=-sysv4.2uw ;; -gnu/linux*) os=`echo $os | sed -e 's|gnu/linux|linux-gnu|'` ;; # First accept the basic system types. # The portable systems comes first. # Each alternative MUST END IN A *, to match a version number. # -sysv* is not here because it comes later, after sysvr4. -gnu* | -bsd* | -mach* | -minix* | -genix* | -ultrix* | -irix* \ | -*vms* | -sco* | -esix* | -isc* | -aix* | -cnk* | -sunos | -sunos[34]*\ | -hpux* | -unos* | -osf* | -luna* | -dgux* | -auroraux* | -solaris* \ | -sym* | -kopensolaris* | -plan9* \ | -amigaos* | -amigados* | -msdos* | -newsos* | -unicos* | -aof* \ | -aos* | -aros* \ | -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \ | -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \ | -hiux* | -386bsd* | -knetbsd* | -mirbsd* | -netbsd* \ | -bitrig* | -openbsd* | -solidbsd* \ | -ekkobsd* | -kfreebsd* | -freebsd* | -riscix* | -lynxos* \ | -bosx* | -nextstep* | -cxux* | -aout* | -elf* | -oabi* \ | -ptx* | -coff* | -ecoff* | -winnt* | -domain* | -vsta* \ | -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \ | -chorusos* | -chorusrdb* | -cegcc* \ | -cygwin* | -msys* | -pe* | -psos* | -moss* | -proelf* | -rtems* \ | -mingw32* | -mingw64* | -linux-gnu* | -linux-android* \ | -linux-newlib* | -linux-musl* | -linux-uclibc* \ | -uxpv* | -beos* | -mpeix* | -udk* \ | -interix* | -uwin* | -mks* | -rhapsody* | -darwin* | -opened* \ | -openstep* | -oskit* | -conix* | -pw32* | -nonstopux* \ | -storm-chaos* | -tops10* | -tenex* | -tops20* | -its* \ | -os2* | -vos* | -palmos* | -uclinux* | -nucleus* \ | -morphos* | -superux* | -rtmk* | -rtmk-nova* | -windiss* \ | -powermax* | -dnix* | -nx6 | -nx7 | -sei* | -dragonfly* \ | -skyos* | -haiku* | -rdos* | -toppers* | -drops* | -es*) # Remember, each alternative MUST END IN *, to match a version number. ;; -qnx*) case $basic_machine in x86-* | i*86-*) ;; *) os=-nto$os ;; esac ;; -nto-qnx*) ;; -nto*) os=`echo $os | sed -e 's|nto|nto-qnx|'` ;; -sim | -es1800* | -hms* | -xray | -os68k* | -none* | -v88r* \ | -windows* | -osx | -abug | -netware* | -os9* | -beos* | -haiku* \ | -macos* | -mpw* | -magic* | -mmixware* | -mon960* | -lnews*) ;; -mac*) os=`echo $os | sed -e 's|mac|macos|'` ;; -linux-dietlibc) os=-linux-dietlibc ;; -linux*) os=`echo $os | sed -e 's|linux|linux-gnu|'` ;; -sunos5*) os=`echo $os | sed -e 's|sunos5|solaris2|'` ;; -sunos6*) os=`echo $os | sed -e 's|sunos6|solaris3|'` ;; -opened*) os=-openedition ;; -os400*) os=-os400 ;; -wince*) os=-wince ;; -osfrose*) os=-osfrose ;; -osf*) os=-osf ;; -utek*) os=-bsd ;; -dynix*) os=-bsd ;; -acis*) os=-aos ;; -atheos*) os=-atheos ;; -syllable*) os=-syllable ;; -386bsd) os=-bsd ;; -ctix* | -uts*) os=-sysv ;; -nova*) os=-rtmk-nova ;; -ns2 ) os=-nextstep2 ;; -nsk*) os=-nsk ;; # Preserve the version number of sinix5. -sinix5.*) os=`echo $os | sed -e 's|sinix|sysv|'` ;; -sinix*) os=-sysv4 ;; -tpf*) os=-tpf ;; -triton*) os=-sysv3 ;; -oss*) os=-sysv3 ;; -svr4) os=-sysv4 ;; -svr3) os=-sysv3 ;; -sysvr4) os=-sysv4 ;; # This must come after -sysvr4. -sysv*) ;; -ose*) os=-ose ;; -es1800*) os=-ose ;; -xenix) os=-xenix ;; -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*) os=-mint ;; -aros*) os=-aros ;; -zvmoe) os=-zvmoe ;; -dicos*) os=-dicos ;; -nacl*) ;; -none) ;; *) # Get rid of the `-' at the beginning of $os. os=`echo $os | sed 's/[^-]*-//'` echo Invalid configuration \`$1\': system \`$os\' not recognized 1>&2 exit 1 ;; esac else # Here we handle the default operating systems that come with various machines. # The value should be what the vendor currently ships out the door with their # machine or put another way, the most popular os provided with the machine. # Note that if you're going to try to match "-MANUFACTURER" here (say, # "-sun"), then you have to tell the case statement up towards the top # that MANUFACTURER isn't an operating system. Otherwise, code above # will signal an error saying that MANUFACTURER isn't an operating # system, and we'll never get to this point. case $basic_machine in score-*) os=-elf ;; spu-*) os=-elf ;; *-acorn) os=-riscix1.2 ;; arm*-rebel) os=-linux ;; arm*-semi) os=-aout ;; c4x-* | tic4x-*) os=-coff ;; c8051-*) os=-elf ;; hexagon-*) os=-elf ;; tic54x-*) os=-coff ;; tic55x-*) os=-coff ;; tic6x-*) os=-coff ;; # This must come before the *-dec entry. pdp10-*) os=-tops20 ;; pdp11-*) os=-none ;; *-dec | vax-*) os=-ultrix4.2 ;; m68*-apollo) os=-domain ;; i386-sun) os=-sunos4.0.2 ;; m68000-sun) os=-sunos3 ;; m68*-cisco) os=-aout ;; mep-*) os=-elf ;; mips*-cisco) os=-elf ;; mips*-*) os=-elf ;; or1k-*) os=-elf ;; or32-*) os=-coff ;; *-tti) # must be before sparc entry or we get the wrong os. os=-sysv3 ;; sparc-* | *-sun) os=-sunos4.1.1 ;; *-be) os=-beos ;; *-haiku) os=-haiku ;; *-ibm) os=-aix ;; *-knuth) os=-mmixware ;; *-wec) os=-proelf ;; *-winbond) os=-proelf ;; *-oki) os=-proelf ;; *-hp) os=-hpux ;; *-hitachi) os=-hiux ;; i860-* | *-att | *-ncr | *-altos | *-motorola | *-convergent) os=-sysv ;; *-cbm) os=-amigaos ;; *-dg) os=-dgux ;; *-dolphin) os=-sysv3 ;; m68k-ccur) os=-rtu ;; m88k-omron*) os=-luna ;; *-next ) os=-nextstep ;; *-sequent) os=-ptx ;; *-crds) os=-unos ;; *-ns) os=-genix ;; i370-*) os=-mvs ;; *-next) os=-nextstep3 ;; *-gould) os=-sysv ;; *-highlevel) os=-bsd ;; *-encore) os=-bsd ;; *-sgi) os=-irix ;; *-siemens) os=-sysv4 ;; *-masscomp) os=-rtu ;; f30[01]-fujitsu | f700-fujitsu) os=-uxpv ;; *-rom68k) os=-coff ;; *-*bug) os=-coff ;; *-apple) os=-macos ;; *-atari*) os=-mint ;; *) os=-none ;; esac fi # Here we handle the case where we know the os, and the CPU type, but not the # manufacturer. We pick the logical manufacturer. vendor=unknown case $basic_machine in *-unknown) case $os in -riscix*) vendor=acorn ;; -sunos*) vendor=sun ;; -cnk*|-aix*) vendor=ibm ;; -beos*) vendor=be ;; -hpux*) vendor=hp ;; -mpeix*) vendor=hp ;; -hiux*) vendor=hitachi ;; -unos*) vendor=crds ;; -dgux*) vendor=dg ;; -luna*) vendor=omron ;; -genix*) vendor=ns ;; -mvs* | -opened*) vendor=ibm ;; -os400*) vendor=ibm ;; -ptx*) vendor=sequent ;; -tpf*) vendor=ibm ;; -vxsim* | -vxworks* | -windiss*) vendor=wrs ;; -aux*) vendor=apple ;; -hms*) vendor=hitachi ;; -mpw* | -macos*) vendor=apple ;; -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*) vendor=atari ;; -vos*) vendor=stratus ;; esac basic_machine=`echo $basic_machine | sed "s/unknown/$vendor/"` ;; esac echo $basic_machine$os exit # Local variables: # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "timestamp='" # time-stamp-format: "%:y-%02m-%02d" # time-stamp-end: "'" # End: xscreensaver-5.36/makevms.com000644 000767 000024 00000001620 06366446355 016321 0ustar00jwzstaff000000 000000 $! Build Xscreensaver under OpenVMS V 6.x system with DEC C 5.x compiler $! $ copy /log CONFIG.H-VMS CONFIG.H $! $! Architecture type test (VAX < 1024 <= Alpha AXP) $! $ if f$getsyi("HW_MODEL").ge.1024 $ then $! $! Alpha AXP $! build Utils library $! $ set def [.UTILS] $ @COMPILE_AXP $ set def [-] $! $! build graphics hacks $! $ set def [.HACKS] $ @COMPILE_AXP $ @LINK_AXP $ set def [-] $! $! Build Xscreensaver & Xscreensaver-command $! $ set def [.DRIVER] $ @COMPILE_AXP $ @LINK_AXP $ set def [-] $ else $! $! Good old VAX $! build Utils library $! $ set def [.UTILS] $ @COMPILE_DECC $ set def [-] $! $! build graphics hacks $! $ set def [.HACKS] $ @COMPILE_DECC $ @LINK_DECC $ set def [-] $! $! Build Xscreensaver & Xscreensaver-command $! $ set def [.DRIVER] $ @COMPILE_DECC $ @LINK_DECC $ set def [-] $ endif $! $! DCL symbols definition $! $ @SETUP $ exit xscreensaver-5.36/intltool-merge.in000644 000767 000024 00000032532 07463506750 017450 0ustar00jwzstaff000000 000000 #!@INTLTOOL_PERL@ -w # # The Intltool Message Merger # # Copyright (C) 2000, 2002 Free Software Foundation. # Copyright (C) 2000, 2001 Eazel, Inc # # Intltool is free software; you can redistribute it and/or # modify it under the terms of the GNU General Public License # version 2 published by the Free Software Foundation. # # Intltool is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. # # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. # # Authors: Maciej Stachowiak # Kenneth Christiansen # Darin Adler # # Proper XML UTF-8'ification written by Cyrille Chepelov # ## Release information my $PROGRAM = "intltool-merge"; my $PACKAGE = "intltool"; my $VERSION = "0.18"; ## Loaded modules use strict; use Getopt::Long; ## Scalars used by the option stuff my $HELP_ARG = 0; my $VERSION_ARG = 0; my $BA_STYLE_ARG = 0; my $XML_STYLE_ARG = 0; my $KEYS_STYLE_ARG = 0; my $DESKTOP_STYLE_ARG = 0; my $QUIET_ARG = 0; my $PASS_THROUGH_ARG = 0; my $UTF8_ARG = 0; my $cache_file; ## Handle options GetOptions ( "help" => \$HELP_ARG, "version" => \$VERSION_ARG, "quiet|q" => \$QUIET_ARG, "oaf-style|o" => \$BA_STYLE_ARG, ## for compatibility "ba-style|b" => \$BA_STYLE_ARG, "xml-style|x" => \$XML_STYLE_ARG, "keys-style|k" => \$KEYS_STYLE_ARG, "desktop-style|d" => \$DESKTOP_STYLE_ARG, "pass-through|p" => \$PASS_THROUGH_ARG, "utf8|u" => \$UTF8_ARG, "cache|c=s" => \$cache_file ) or &error; my $PO_DIR; my $FILE; my $OUTFILE; my %po_files_by_lang = (); my %translations = (); # Use this instead of \w for XML files to handle more possible characters. my $w = "[-A-Za-z0-9._:]"; # XML quoted string contents my $q = "[^\\\"]*"; ## Check for options. if ($VERSION_ARG) { &print_version; } elsif ($HELP_ARG) { &print_help; } elsif ($BA_STYLE_ARG && @ARGV > 2) { &preparation; &print_message; &ba_merge_translations; &finalize; } elsif ($XML_STYLE_ARG && @ARGV > 2) { &utf8_sanity_check; &preparation; &print_message; &xml_merge_translations; &finalize; } elsif ($KEYS_STYLE_ARG && @ARGV > 2) { &utf8_sanity_check; &preparation; &print_message; &keys_merge_translations; &finalize; } elsif ($DESKTOP_STYLE_ARG && @ARGV > 2) { &preparation; &print_message; &desktop_merge_translations; &finalize; } else { &print_help; } exit; ## Sub for printing release information sub print_version { print "${PROGRAM} (${PACKAGE}) ${VERSION}\n"; print "Written by Maciej Stachowiak, Darin Adler and Kenneth Christiansen.\n\n"; print "Copyright (C) 2000-2002 Free Software Foundation, Inc.\n"; print "Copyright (C) 2000-2001 Eazel, Inc.\n"; print "This is free software; see the source for copying conditions. There is NO\n"; print "warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n"; exit; } ## Sub for printing usage information sub print_help { print "Usage: ${PROGRAM} [OPTIONS] PO_DIRECTORY FILENAME OUTPUT_FILE\n"; print "Generates an output file that includes translated versions of some attributes,\n"; print "from an untranslated source and a po directory that includes translations.\n\n"; print " -b, --ba-style includes translations in the bonobo-activation style\n"; print " -d, --desktop-style includes translations in the desktop style\n"; print " -k, --keys-style includes translations in the keys style\n"; print " -x, --xml-style includes translations in the standard xml style\n"; print " -u, --utf8 convert all strings to UTF-8 before merging\n"; print " -p, --pass-through use strings as found in .po files, without\n"; print " conversion (STRONGLY unrecommended with -x)\n"; print " -q, --quiet suppress most messages\n"; print " --help display this help and exit\n"; print " --version output version information and exit\n"; print "\nReport bugs to bugzilla.gnome.org, module intltool, or contact us through \n"; print ".\n"; exit; } ## Sub for printing error messages sub print_error { print "Try `${PROGRAM} --help' for more information.\n"; exit; } sub print_message { print "Merging translations into $OUTFILE.\n" unless $QUIET_ARG; } sub preparation { $PO_DIR = $ARGV[0]; $FILE = $ARGV[1]; $OUTFILE = $ARGV[2]; &gather_po_files; &get_translation_database; } # General-purpose code for looking up translations in .po files sub po_file2lang { my ($tmp) = @_; $tmp =~ s/^.*\/(.*)\.po$/$1/; return $tmp; } sub gather_po_files { for my $po_file (glob "$PO_DIR/*.po") { $po_files_by_lang{po_file2lang($po_file)} = $po_file; } } sub get_po_encoding { my ($in_po_file) = @_; my $encoding = ""; open IN_PO_FILE, $in_po_file or die; while () { ## example: "Content-Type: text/plain; charset=ISO-8859-1\n" if (/Content-Type\:.*charset=([-a-zA-Z0-9]+)\\n/) { $encoding = $1; last; } } close IN_PO_FILE; if (!$encoding) { print "Warning: no encoding found in $in_po_file. Assuming ISO-8859-1\n"; $encoding = "ISO-8859-1"; } return $encoding } sub utf8_sanity_check { if (!$UTF8_ARG) { if (!$PASS_THROUGH_ARG) { $PASS_THROUGH_ARG="1"; } } } sub get_translation_database { if ($cache_file) { &get_cached_translation_database; } else { &create_translation_database; } } sub get_newest_po_age { my $newest_age; foreach my $file (values %po_files_by_lang) { my $file_age = -M $file; $newest_age = $file_age if !$newest_age || $file_age < $newest_age; } return $newest_age; } sub create_cache { print "Generating and caching the translation database\n" unless $QUIET_ARG; &create_translation_database; open CACHE, ">$cache_file" || die; print CACHE join "\x01", %translations; close CACHE; } sub load_cache { print "Found cached translation database\n" unless $QUIET_ARG; my $contents; open CACHE, "<$cache_file" || die; { local $/; $contents = ; } close CACHE; %translations = split "\x01", $contents; } sub get_cached_translation_database { my $cache_file_age = -M $cache_file; if (defined $cache_file_age) { if ($cache_file_age <= &get_newest_po_age) { &load_cache; return; } print "Found too-old cached translation database\n" unless $QUIET_ARG; } &create_cache; } sub create_translation_database { for my $lang (keys %po_files_by_lang) { my $po_file = $po_files_by_lang{$lang}; if ($UTF8_ARG) { my $encoding = get_po_encoding ($po_file); if (lc $encoding eq "utf-8") { open PO_FILE, "<$po_file"; } else { my $iconv = $ENV{"INTLTOOL_ICONV"} || "iconv"; open PO_FILE, "$iconv -f $encoding -t UTF-8 $po_file|"; } } else { open PO_FILE, "<$po_file"; } my $nextfuzzy = 0; my $inmsgid = 0; my $inmsgstr = 0; my $msgid = ""; my $msgstr = ""; while () { $nextfuzzy = 1 if /^#, fuzzy/; if (/^msgid "((\\.|[^\\])*)"/ ) { $translations{$lang, $msgid} = $msgstr if $inmsgstr && $msgid && $msgstr; $msgid = ""; $msgstr = ""; if ($nextfuzzy) { $inmsgid = 0; } else { $msgid = unescape_po_string($1); $inmsgid = 1; } $inmsgstr = 0; $nextfuzzy = 0; } if (/^msgstr "((\\.|[^\\])*)"/) { $msgstr = unescape_po_string($1); $inmsgstr = 1; $inmsgid = 0; } if (/^"((\\.|[^\\])*)"/) { $msgid .= unescape_po_string($1) if $inmsgid; $msgstr .= unescape_po_string($1) if $inmsgstr; } } $translations{$lang, $msgid} = $msgstr if $inmsgstr && $msgid && $msgstr; } } sub finalize { } sub unescape_one_sequence { my ($sequence) = @_; return "\\" if $sequence eq "\\\\"; return "\"" if $sequence eq "\\\""; # gettext also handles \n, \t, \b, \r, \f, \v, \a, \xxx (octal), # \xXX (hex) and has a comment saying they want to handle \u and \U. return $sequence; } sub unescape_po_string { my ($string) = @_; $string =~ s/(\\.)/unescape_one_sequence($1)/eg; return $string; } sub entity_decode { local ($_) = @_; s/'/'/g; # ' s/"/"/g; # " s/&/&/g; return $_; } sub entity_encode { my ($pre_encoded) = @_; my @list_of_chars = unpack ('C*', $pre_encoded); if ($PASS_THROUGH_ARG) { return join ('', map (&entity_encode_int_even_high_bit, @list_of_chars)); } else { return join ('', map (&entity_encode_int_minimalist, @list_of_chars)); } } sub entity_encode_int_minimalist { return """ if $_ == 34; return "&" if $_ == 38; return "'" if $_ == 39; return chr $_; } sub entity_encode_int_even_high_bit { if ($_ > 127 || $_ == 34 || $_ == 38 || $_ == 39) { # the ($_ > 127) should probably be removed return "&#" . $_ . ";"; } else { return chr $_; } } sub entity_encoded_translation { my ($lang, $string) = @_; my $translation = $translations{$lang, $string}; return $string if !$translation; return entity_encode ($translation); } ## XML (bonobo-activation specific) merge code sub ba_merge_translations { my $source; { local $/; # slurp mode open INPUT, "<$FILE" or die "can't open $FILE: $!"; $source = ; close INPUT; } open OUTPUT, ">$OUTFILE" or die "can't open $OUTFILE: $!"; while ($source =~ s|^(.*?)([ \t]*<\s*$w+\s+($w+\s*=\s*"$q"\s*)+/?>)([ \t]*\n)?||s) { print OUTPUT $1; my $node = $2 . "\n"; my @strings = (); $_ = $node; while (s/(\s)_($w+\s*=\s*"($q)")/$1$2/s) { push @strings, entity_decode($3); } print OUTPUT; my %langs; for my $string (@strings) { for my $lang (keys %po_files_by_lang) { $langs{$lang} = 1 if $translations{$lang, $string}; } } for my $lang (sort keys %langs) { $_ = $node; s/(\sname\s*=\s*)"($q)"/$1"$2-$lang"/s; s/(\s)_($w+\s*=\s*")($q)"/$1 . $2 . entity_encoded_translation($lang, $3) . '"'/seg; print OUTPUT; } } print OUTPUT $source; close OUTPUT; } ## XML (non-bonobo-activation) merge code sub xml_merge_translations { my $source; { local $/; # slurp mode open INPUT, "<$FILE" or die "can't open $FILE: $!"; $source = ; close INPUT; } open OUTPUT, ">$OUTFILE" or die; # FIXME: support attribute translations # Empty nodes never need translation, so unmark all of them. # For example, <_foo/> is just replaced by . $source =~ s|<\s*_($w+)\s*/>|<$1/>|g; # Support for <_foo>blah style translations. while ($source =~ s|^(.*?)([ \t]*)<\s*_($w+)\s*>(.*?)<\s*/_\3\s*>([ \t]*\n)?||s) { print OUTPUT $1; my $spaces = $2; my $tag = $3; my $string = $4; print OUTPUT "$spaces<$tag>$string\n"; $string =~ s/\s+/ /g; $string =~ s/^ //; $string =~ s/ $//; $string = entity_decode($string); for my $lang (sort keys %po_files_by_lang) { my $translation = $translations{$lang, $string}; next if !$translation; $translation = entity_encode($translation); print OUTPUT "$spaces<$tag xml:lang=\"$lang\">$translation\n"; } } print OUTPUT $source; close OUTPUT; } sub keys_merge_translations { open INPUT, "<${FILE}" or die; open OUTPUT, ">${OUTFILE}" or die; while () { if (s/^(\s*)_(\w+=(.*))/$1$2/) { my $string = $3; print OUTPUT; my $non_translated_line = $_; for my $lang (sort keys %po_files_by_lang) { my $translation = $translations{$lang, $string}; next if !$translation; $_ = $non_translated_line; s/(\w+)=.*/[$lang]$1=$translation/; print OUTPUT; } } else { print OUTPUT; } } close OUTPUT; close INPUT; } sub desktop_merge_translations { open INPUT, "<${FILE}" or die; open OUTPUT, ">${OUTFILE}" or die; while () { if (s/^(\s*)_(\w+=(.*))/$1$2/) { my $string = $3; print OUTPUT; my $non_translated_line = $_; for my $lang (sort keys %po_files_by_lang) { my $translation = $translations{$lang, $string}; next if !$translation; $_ = $non_translated_line; s/(\w+)=.*/${1}[$lang]=$translation/; print OUTPUT; } } else { print OUTPUT; } } close OUTPUT; close INPUT; } xscreensaver-5.36/intltool-extract.in000644 000767 000024 00000016145 07463506750 020025 0ustar00jwzstaff000000 000000 #!@INTLTOOL_PERL@ -w # -*- Mode: perl; indent-tabs-mode: nil; c-basic-offset: 4 -*- # # The Intltool Message Extractor # # Copyright (C) 2000-2001 Free Software Foundation. # # Intltool is free software; you can redistribute it and/or # modify it under the terms of the GNU General Public License as # published by the Free Software Foundation; either version 2 of the # License, or (at your option) any later version. # # Intltool is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. # # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. # # Authors: Kenneth Christiansen # Darin Adler # ## Release information my $PROGRAM = "intltool-extract"; my $PACKAGE = "intltool"; my $VERSION = "0.18"; ## Loaded modules use strict; use File::Basename; use Getopt::Long; ## Scalars used by the option stuff my $TYPE_ARG = "0"; my $LOCAL_ARG = "0"; my $HELP_ARG = "0"; my $VERSION_ARG = "0"; my $UPDATE_ARG = "0"; my $QUIET_ARG = "0"; my $FILE; my $OUTFILE; my $gettext_type = ""; my $input; my %messages = (); ## Use this instead of \w for XML files to handle more possible characters. my $w = "[-A-Za-z0-9._:]"; ## Always print first $| = 1; ## Handle options GetOptions ( "type=s" => \$TYPE_ARG, "local|l" => \$LOCAL_ARG, "help|h" => \$HELP_ARG, "version|v" => \$VERSION_ARG, "update" => \$UPDATE_ARG, "quiet|q" => \$QUIET_ARG, ) or &error; &split_on_argument; ## Check for options. ## This section will check for the different options. sub split_on_argument { if ($VERSION_ARG) { &version; } elsif ($HELP_ARG) { &help; } elsif ($LOCAL_ARG) { &place_local; &extract; } elsif ($UPDATE_ARG) { &place_normal; &extract; } elsif (@ARGV > 0) { &place_normal; &message; &extract; } else { &help; } } sub place_normal { $FILE = $ARGV[0]; $OUTFILE = "$FILE.h"; } sub place_local { $OUTFILE = fileparse($FILE, ()); if (!-e "tmp/") { system("mkdir tmp/"); } $OUTFILE = "./tmp/$OUTFILE.h" } sub determine_type { if ($TYPE_ARG =~ /^gettext\/(.*)/) { $gettext_type=$1 } } ## Sub for printing release information sub version{ print "${PROGRAM} (${PACKAGE}) $VERSION\n"; print "Copyright (C) 2000 Free Software Foundation, Inc.\n"; print "Written by Kenneth Christiansen, 2000.\n\n"; print "This is free software; see the source for copying conditions. There is NO\n"; print "warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n"; exit; } ## Sub for printing usage information sub help{ print "Usage: ${PROGRAM} [FILENAME] [OPTIONS] ...\n"; print "Generates a header file from an xml source file.\n\nGrabs all strings "; print "between <_translatable_node> and it's end tag,\nwhere tag are all allowed "; print "xml tags. Read the docs for more info.\n\n"; print " -v, --version shows the version\n"; print " -h, --help shows this help page\n"; print " -q, --quiet quiet mode\n"; print "\nReport bugs to .\n"; exit; } ## Sub for printing error messages sub error{ print "Try `${PROGRAM} --help' for more information.\n"; exit; } sub message { print "Generating C format header file for translation.\n"; } sub extract { &determine_type; &convert ($FILE); open OUT, ">$OUTFILE"; &msg_write; close OUT; print "Wrote $OUTFILE\n" unless $QUIET_ARG; } sub convert($) { ## Reading the file { local (*IN); local $/; #slurp mode open (IN, "<$FILE") || die "can't open $FILE: $!"; $input = ; } &type_ini if $gettext_type eq "ini"; &type_keys if $gettext_type eq "keys"; &type_xml if $gettext_type eq "xml"; &type_glade if $gettext_type eq "glade"; &type_scheme if $gettext_type eq "scheme"; } sub entity_decode_minimal { local ($_) = @_; s/'/'/g; # ' s/"/"/g; # " s/&/&/g; return $_; } sub entity_decode { local ($_) = @_; s/'/'/g; # ' s/"/"/g; # " s/&/&/g; s/<//g; return $_; } sub escape_char { return '\"' if $_ eq '"'; return '\n' if $_ eq "\n"; return '\\' if $_ eq '\\'; return $_; } sub escape { my ($string) = @_; return join "", map &escape_char, split //, $string; } sub type_ini { ### For generic translatable desktop files ### while ($input =~ /^_.*=(.*)$/mg) { $messages{$1} = []; } } sub type_keys { ### For generic translatable mime/keys files ### while ($input =~ /^\s*_\w+=(.*)$/mg) { $messages{$1} = []; } } sub type_xml { ### For generic translatable XML files ### while ($input =~ /\s_$w+=\"([^"]+)\"/sg) { # " $messages{entity_decode_minimal($1)} = []; } while ($input =~ /<_($w+)>(.+?)<\/_\1>/sg) { $_ = $2; s/\s+/ /g; s/^ //; s/ $//; $messages{entity_decode_minimal($_)} = []; } } sub type_glade { ### For translatable Glade XML files ### my $tags = "label|title|text|format|copyright|comments|preview_text|tooltip|message"; while ($input =~ /<($tags)>([^<]+)<\/($tags)>/sg) { # Glade sometimes uses tags that normally mark translatable things for # little bits of non-translatable content. We work around this by not # translating strings that only includes something like label4 or window1. $messages{entity_decode($2)} = [] unless $2 =~ /^(window|label)[0-9]+$/; } while ($input =~ /(..[^<]*)<\/items>/sg) { for my $item (split (/\n/, $1)) { $messages{entity_decode($item)} = []; } } ## handle new glade files while ($input =~ /<(property|atkproperty)\s+[^>]*translatable\s*=\s*"yes"[^>]*>([^<]+)<\/\1>/sg) { $messages{entity_decode($2)} = [] unless $2 =~ /^(window|label)[0-9]+$/; } } sub type_scheme { while ($input =~ /_\(?"((?:[^"\\]+|\\.)*)"\)?/sg) { $messages{$1} = []; } } sub msg_write { for my $message (sort keys %messages) { print OUT "/* xgettext:no-c-format */\n" if $message =~ /%/; my @lines = split (/\n/, $message); for (my $n = 0; $n < @lines; $n++) { if ($n == 0) { print OUT "char *s = N_(\""; } else { print OUT " \""; } print OUT escape($lines[$n]); if ($n < @lines - 1) { print OUT "\\n\"\n"; } else { print OUT "\");\n"; } } } } xscreensaver-5.36/intltool-update.in000644 000767 000024 00000036423 10503603572 017623 0ustar00jwzstaff000000 000000 #!@INTLTOOL_PERL@ -w # # The Intltool Message Updater # # Copyright (C) 2000-2002 Free Software Foundation. # # Intltool is free software; you can redistribute it and/or # modify it under the terms of the GNU General Public License # version 2 published by the Free Software Foundation. # # Intltool is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. # # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. # # Authors: Kenneth Christiansen # Maciej Stachowiak # Darin Adler ## Release information my $PROGRAM = "intltool-update"; my $VERSION = "0.18"; my $PACKAGE = "intltool"; ## Loaded modules use strict; use Getopt::Long; use Cwd; use File::Copy; use File::Find; ## Scalars used by the option stuff my $HELP_ARG = 0; my $VERSION_ARG = 0; my $DIST_ARG = 0; my $POT_ARG = 0; my $HEADERS_ARG = 0; my $MAINTAIN_ARG = 0; my $REPORT_ARG = 0; my $VERBOSE = 0; my $GETTEXT_PACKAGE = ""; my @languages; my %po_files_by_lang = (); # Regular expressions to categorize file types. # FIXME: Please check if the following is correct my $xml_extension = "xml(\.in)*|". # .in is not required "ui|". "glade2?(\.in)*|". # .in is not required "scm(\.in)*|". # .in is not required "oaf(\.in)+|". "etspec|". "sheet(\.in)+|". "pong(\.in)+"; my $ini_extension = "desktop(\.in)+|". "caves(\.in)+|". "directory(\.in)+|". "soundlist(\.in)+|". "keys(\.in)+|". "server(\.in)+"; ## Always print as the first thing $| = 1; ## Handle options GetOptions ( "help" => \$HELP_ARG, "version" => \$VERSION_ARG, "dist|d" => \$DIST_ARG, "pot|p" => \$POT_ARG, "headers|s" => \$HEADERS_ARG, "maintain|m" => \$MAINTAIN_ARG, "report|r" => \$REPORT_ARG, "verbose|x" => \$VERBOSE, "gettext-package|g=s" => \$GETTEXT_PACKAGE, ) or &print_error_invalid_option; &print_help if $HELP_ARG; &print_version if $VERSION_ARG; my $arg_count = ($DIST_ARG > 0) + ($POT_ARG > 0) + ($HEADERS_ARG > 0) + ($MAINTAIN_ARG > 0) + ($REPORT_ARG > 0); &print_help if $arg_count > 1; # --version and --help don't require a module name my $MODULE = $GETTEXT_PACKAGE || &find_package_name; if ($DIST_ARG) { if ($ARGV[0] =~ /^[a-z]/){ &update_po_file ($ARGV[0]); &print_status ($ARGV[0]); } else { &print_help; } } elsif ($POT_ARG) { &generate_headers; &generate_po_template; } elsif ($HEADERS_ARG) { &generate_headers; } elsif ($MAINTAIN_ARG) { &find_leftout_files; } elsif ($REPORT_ARG) { &print_report; } else { if ($ARGV[0] =~ /^[a-z]/) { &main ($ARGV[0]); } else { &print_help; } } exit; ######### sub print_version { ## Print version information print "${PROGRAM} (${PACKAGE}) $VERSION\n"; print "Written by Kenneth Christiansen, Maciej Stachowiak, and Darin Adler.\n\n"; print "Copyright (C) 2000-2002 Free Software Foundation, Inc.\n"; print "This is free software; see the source for copying conditions. There is NO\n"; print "warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n"; exit; } sub print_help { ## Print usage information print "Usage: ${PROGRAM} [OPTIONS] ...LANGCODE\n"; print "Updates PO template files and merge them with the translations.\n\n"; print " -p, --pot generate the PO template only\n"; print " -s, --headers generate the header files in POTFILES.in\n"; print " -m, --maintain search for left out files from POTFILES.in\n"; print " -r, --report display a status report for the module.\n"; print " -x, --verbose display lots of feedback\n"; print " --help display this help and exit\n"; print " --version output version information and exit\n"; print "\nExamples of use:\n"; print "${PROGRAM} --pot just creates a new PO template from the source\n"; print "${PROGRAM} da created new PO template and updated the da.po file\n\n"; print "Report bugs to bugzilla.gnome.org, module 'intltool'.\n"; exit; } sub main { my ($lang) = @_; ## Report error if the language file supplied ## to the command line is non-existent &print_error_not_existing("$lang.po") if ! -s "$lang.po"; print "Working, please wait..." unless $VERBOSE; &generate_headers; &generate_po_template; &update_po_file ($lang); &print_status ($lang); } sub determine_type ($) { my $type = $_; my $gettext_type; # FIXME: Use $xml_extentions, and maybe do all this even nicer my $xml_regex = "(?:xml(\.in)*|ui|oaf(?:\.in)+|server(?:\.in)+|sheet(?:\.in)+|". "pong(?:\.in)+|etspec)"; my $ini_regex = "(?:desktop(?:\.in)+|caves(?:\.in)+|directory(?:\.in)+|". "soundlist(?:\.in)+)"; if ($type =~ /\[type: gettext\/([^\]].*)]/) { $gettext_type=$1; } elsif ($type =~ /$xml_regex$/) { $gettext_type="xml"; } elsif ($type =~ /glade2?(\.in)*$/) { $gettext_type="glade"; } elsif ($type =~ /$ini_regex$/) { $gettext_type="ini"; } elsif ($type =~ /scm(\.in)*$/) { $gettext_type="scheme"; } elsif ($type =~ /keys(\.in)+$/) { $gettext_type="keys"; } else { $gettext_type=""; } return "gettext\/$gettext_type"; } sub find_leftout_files { my (@buf_i18n_plain, @buf_i18n_xml, @buf_i18n_ini, @buf_potfiles, @buf_potfiles_ignore, @buf_allfiles, @buf_allfiles_sorted, @buf_potfiles_sorted ); ## Search and find all translatable files find sub { push @buf_i18n_plain, "$File::Find::name" if /\.(c|y|cc|cpp|c\+\+|h|gob)$/ }, ".."; find sub { push @buf_i18n_xml, "$File::Find::name" if /\.($xml_extension)$/ }, ".."; find sub { push @buf_i18n_ini, "$File::Find::name" if /\.($ini_extension)$/ }, ".."; open POTFILES, "POTFILES.in" || die "$PROGRAM: there's no POTFILES.in!\n"; @buf_potfiles = grep /^[^#]/, ; print "Searching for missing translatable files...\n" if $VERBOSE; ## Check if we should ignore some found files, when ## comparing with POTFILES.in foreach my $ignore ("POTFILES.skip", "POTFILES.ignore") { if (-s $ignore) { open FILE, $ignore; while () { if (/^[^#]/){ push @buf_potfiles_ignore, $_; } } print "Found $ignore: Ignoring files...\n" if $VERBOSE; @buf_potfiles = (@buf_potfiles_ignore, @buf_potfiles); } } foreach my $file (@buf_i18n_plain) { my $in_comment = 0; my $in_macro = 0; open FILE, "<$file"; while () { # Handle continued multi-line comment. if ($in_comment) { next unless s-.*\*/--; $in_comment = 0; } # Handle continued macro. if ($in_macro) { $in_macro = 0 unless /\\$/; next; } # Handle start of macro (or any preprocessor directive). if (/^\s*\#/) { $in_macro = 1 if /^([^\\]|\\.)*\\$/; next; } # Handle comments and quoted text. while (m-(/\*|//|\'|\")-) # \' and \" keep emacs perl mode happy { my $match = $1; if ($match eq "/*") { if (!s-/\*.*?\*/--) { s-/\*.*--; $in_comment = 1; } } elsif ($match eq "//") { s-//.*--; } else # ' or " { if (!s-$match([^\\]|\\.)*?$match-QUOTEDTEXT-) { warn "mismatched quotes at line $. in $file\n"; s-$match.*--; } } } if (/_\(QUOTEDTEXT/) { ## Remove the first 3 chars and add newline push @buf_allfiles, unpack("x3 A*", $file) . "\n"; last; } } close FILE; } foreach my $file (@buf_i18n_xml) { open FILE, "<$file"; while () { if (/\s_(.*)=\"/){ push @buf_allfiles, unpack("x3 A*", $file) . "\n"; last; } } } foreach my $file (@buf_i18n_ini){ open FILE, "<$file"; while () { if (/_(.*)=/){ push @buf_allfiles, unpack("x3 A*", $file) . "\n"; last; } } } @buf_allfiles_sorted = sort (@buf_allfiles); @buf_potfiles_sorted = sort (@buf_potfiles); my %in2; foreach (@buf_potfiles_sorted) { $in2{$_} = 1; } my @result; foreach (@buf_allfiles_sorted){ if (!exists($in2{$_})){ push @result, $_ } } ## Save file with information about the files missing ## if any, and give information about this procedure. if (@result) { print "\n" if $VERBOSE; open OUT, ">missing"; print OUT @result; print "The following files contain translations and are currently not in use. Please\n"; print "consider adding these to the POTFILES.in file, located in the po/ directory.\n\n"; print @result, "\n"; print "If some of these files are left out on purpose then please add them to\n"; print "POTFILES.skip instead of POTFILES.in. A file 'missing' containing this list\n"; print "of left out files has been written in the current directory.\n"; } ## If there is nothing to complain about, notify the user else { print "\nAll files containing translations are present in POTFILES.in.\n"; } } sub print_error_invalid_option { ## Handle invalid arguments print "Try `${PROGRAM} --help' for more information.\n"; exit 1; } sub generate_headers { my $EXTRACT = `which intltool-extract 2>/dev/null`; chomp $EXTRACT; $EXTRACT = $ENV{"INTLTOOL_EXTRACT"} if $ENV{"INTLTOOL_EXTRACT"}; ## Generate the .h header files, so we can allow glade and ## xml translation support if (! -s $EXTRACT) { print "\n *** The intltool-extract script wasn't found!" ."\n *** Without it, intltool-update can not generate files.\n"; exit; } else { open FILE, ") { chomp; ## Find xml files in POTFILES.in and generate the ## files with help from the extract script my $gettext_type= &determine_type ($1); if (/\.($xml_extension|$ini_extension)$/ || /^\[/){ $_ =~ s/^\[[^\[].*]\s*//; my $filename = "../$_"; my $srcdir = $ENV{'top_srcdir'}; if ($srcdir){ $filename="$srcdir/$_" ; }; if ($VERBOSE){ system($EXTRACT, "--update", "--type=$gettext_type", $filename); } else { system($EXTRACT, "--update", "--type=$gettext_type", "--quiet", $filename); } } } close FILE; } } sub generate_po_template { ## Generate the potfiles from the POTFILES.in file print "Building the $MODULE.pot...\n" if $VERBOSE; move ("POTFILES.in", "POTFILES.in.old"); my $srcdir = $ENV{'top_srcdir'}; my $adddirectory = "--directory=." ; if ($srcdir){ $adddirectory = "--directory=$srcdir"; } open INFILE, "POTFILES.in"; while () { s/\.($xml_extension|$ini_extension)$/$&.h/; s/^\[.*]\s*(.*)/$1.h/; print OUTFILE $_; } close OUTFILE; close INFILE; system ("xgettext", "--default-domain\=$MODULE", "--directory\=\.\.", "$adddirectory" , "--add-comments", "--keyword\=\_", "--keyword\=N\_", "--keyword\=U\_", "--files-from\=\.\/POTFILES\.in"); if (!-e "$MODULE.po") { print "WARNING: It seems that none of the files in POTFILES.in ". "contain marked strings\n"; exit (1); } system ("rm", "-f", "$MODULE.pot"); move ("$MODULE.po", "$MODULE.pot") || die "$PROGRAM: couldn't move $MODULE.po to $MODULE.pot.\n"; print "Wrote $MODULE.pot\n" if $VERBOSE; move ("POTFILES.in.old", "POTFILES.in"); print "Removing generated header (.h) files..." if $VERBOSE; open FILE, ") { chomp; unlink "../$_.h" if /\.($xml_extension|$ini_extension)$/; } close FILE; print "done\n" if $VERBOSE; } sub update_po_file { my ($lang) = @_; print "Merging $lang.po with $MODULE.pot..." if $VERBOSE; copy ("$lang.po", "$lang.po.old") || die "copy failed: $!"; # Perform merge, remove backup file and the "messages" trash file # generated by gettext system ("msgmerge", "$lang.po.old", "$MODULE.pot", "-o", "$lang.po"); unlink "$lang.po.old"; unlink "messages"; } sub print_error_not_existing { my ($file) = @_; ## Report error if supplied language file is non-existing print "$PROGRAM: $file does not exist!\n"; print "Try '$PROGRAM --help' for more information.\n"; exit; } sub gather_po_files { my @po_files = glob ("./*.po"); @languages = map (&po_file2lang, @po_files); foreach my $lang (@languages) { $po_files_by_lang{$lang} = shift (@po_files); } } sub po_file2lang ($) { my $tmp = $_; $tmp =~ s/^.*\/(.*)\.po$/$1/; return $tmp; } sub print_status { my ($lang) = @_; system ("msgfmt", "--statistics", "$lang.po"); print "\n"; } sub print_report { &generate_headers; &generate_po_template; &gather_po_files; foreach my $lang (@languages) { print "$lang: "; &update_po_file ($lang); } print "\n\n * Current translation support in $MODULE \n\n"; foreach my $lang (@languages){ print "$lang: "; system ("msgfmt", "--statistics", "$lang.po"); } } sub find_package_name { my $base_dirname = getcwd(); $base_dirname =~ s@.*/@@; my ($conf_in, $src_dir); if ($base_dirname =~ /^po(-.+)?$/) { if (-f "../configure.in") { $conf_in = "../configure.in"; } else { my $makefile_source; local (*IN); open IN, ") { if (/^top_srcdir[ \t]*=/) { $src_dir = $_; # print "${src_dir}\n"; $src_dir =~ s/^top_srcdir[ \t]*=[ \t]*([^ \t\n\r]*)/$1/; # print "${src_dir}\n"; chomp $src_dir; $conf_in = "$src_dir" . "/configure.in" . "\n"; last; } } $conf_in || die "Cannot find top_srcdir in Makefile." } my $conf_source; { local (*IN); local $/; # slurp mode open (IN, "<$conf_in") || die "can't open $conf_in: $!"; $conf_source = ; } my $name = ""; $name = $1 if $conf_source =~ /^AM_INIT_AUTOMAKE\(([^,\)]+)/m; $name = $1 if $conf_source =~ /^GETTEXT_PACKAGE=(\S+)/m; if ($name =~ /^[\$](\S+)/) { return $1 if $conf_source =~ /^\s*$1=(\S*)/m; } return $name if $name; } print "$PROGRAM: Unable to determine package name.\n" . "Make sure to run this script inside the po directory.\n"; exit; } xscreensaver-5.36/xscreensaver.spec000644 000767 000024 00000013735 12774556775 017564 0ustar00jwzstaff000000 000000 %define name xscreensaver %define version 5.36 Summary: X screen saver and locker Name: %{name} Version: %{version} Release: 1 Epoch: 1 License: BSD Group: Amusements/Graphics URL: https://www.jwz.org/xscreensaver/ Source0: https://www.jwz.org/xscreensaver/xscreensaver-%{version}.tar.gz Vendor: Jamie Zawinski Buildroot: %{_tmppath}/%{name}-root %package base Summary: A minimal installation of xscreensaver. Summary(fr): Une installation minimale de xscreensaver. Group: Amusements/Graphics BuildRequires: bc BuildRequires: gettext BuildRequires: pam-devel BuildRequires: gtk2-devel BuildRequires: desktop-file-utils # Red Hat (pre-FC5): #BuildRequires: xorg-x11-devel #BuildRequires: libglade2-devel # Red Hat 5, CentOS5, FC5, and up: BuildRequires: xorg-x11-proto-devel BuildRequires: libglade2-devel # Mandrake: #BuildRequires: libxorg-x11-devel #BuildRequires: libglade2.0_0-devel Requires: SysVinit Requires: /etc/pam.d/system-auth Requires: htmlview Requires: desktop-backgrounds-basic Provides: xscreensaver Provides: xscreensaver-base Obsoletes: xscreensaver %package extras Summary: An enhanced set of screensavers. Summary(fr): Un jeu étendu d'économiseurs d'écran. Group: Amusements/Graphics Requires: xscreensaver-base %package gl-extras Summary: An enhanced set of screensavers that require OpenGL. Summary(fr): Un jeu étendu d'économiseurs d'écran qui nécessitent OpenGL. Group: Amusements/Graphics Requires: xscreensaver-base Obsoletes: xscreensaver-gl %description A modular screen saver and locker for the X Window System. More than 200 display modes are included in this package. %description -l fr Un économiseur d'écran modulaire pour le système X Window. Plus de 200 modes d'affichages sont inclus dans ce paquet. %description base A modular screen saver and locker for the X Window System. This package contains the bare minimum needed to blank and lock your screen. The graphical display modes are the "xscreensaver-extras" and "xscreensaver-gl-extras" packages. %description -l fr base Un économiseur d'écran modulaire pour le système X Window. Ce paquet contient le minimum vital pour éteindre et verouiller votre écran. Les modes d'affichages graphiques sont inclus dans les paquets "xscreensaver-extras" et "xscreensaver-gl-extras". %description extras A modular screen saver and locker for the X Window System. This package contains a variety of graphical screen savers for your mind-numbing, ambition-eroding, time-wasting, hypnotized viewing pleasure. %description -l fr extras Un économiseur d'écran modulaire pour le système X Window. Ce paquet contient une pléthore d'économiseurs d'écran graphiques pour votre plaisir des yeux. %description gl-extras A modular screen saver and locker for the X Window System. This package contains a variety of OpenGL-based (3D) screen savers for your mind-numbing, ambition-eroding, time-wasting, hypnotized viewing pleasure. %description -l fr gl-extras Un économiseur d'écran modulaire pour le système X Window. Ce paquet contient une pléthore d'économiseurs d'écran basés sur OpenGL (3D) pour votre plaisir des yeux. %prep %setup -q if [ -x %{_datadir}/libtool/config.guess ]; then # use system-wide copy cp -p %{_datadir}/libtool/config.{sub,guess} . fi %build archdir=`./config.guess` mkdir $archdir cd $archdir export CFLAGS="${CFLAGS:-${RPM_OPT_FLAGS}}" CONFIG_OPTS="--prefix=/usr --with-pam --without-shadow --without-kerberos" # Red Hat doesn't like this: CONFIG_OPTS="$CONFIG_OPTS --with-setuid-hacks" # This is flaky: # CONFIG_OPTS="$CONFIG_OPTS --with-login-manager" ln -s ../configure . %configure $CONFIG_OPTS rm -f configure make %install archdir=`./config.guess` cd $archdir rm -rf ${RPM_BUILD_ROOT} # We have to make sure these directories exist, # or nothing will be installed into them. # mkdir -p $RPM_BUILD_ROOT%{_bindir} \ $RPM_BUILD_ROOT%{_datadir}/xscreensaver \ $RPM_BUILD_ROOT%{_libexecdir}/xscreensaver \ $RPM_BUILD_ROOT%{_mandir}/man1/xscreensaver \ $RPM_BUILD_ROOT/etc/pam.d make install_prefix=$RPM_BUILD_ROOT install desktop-file-install --vendor gnome --delete-original \ --dir $RPM_BUILD_ROOT%{_datadir}/applications \ $RPM_BUILD_ROOT%{_datadir}/applications/*.desktop # This function prints a list of things that get installed. # It does this by parsing the output of a dummy run of "make install". # list_files() { make -s install_prefix=${RPM_BUILD_ROOT} INSTALL=true "$@" \ | sed -n -e 's@.* \(/[^ ]*\)$@\1@p' \ | sed -e "s@^${RPM_BUILD_ROOT}@@" \ -e "s@/[a-z][a-z]*/\.\./@/@" \ | sed -e 's@\(.*/man/.*\)@\1\*@' \ | sed -e 's@\(.*/app-defaults/\)@%config \1@' \ -e 's@\(.*/pam\.d/\)@%config(missingok) \1@' \ | sort } # Generate three lists of files for the three packages. # dd=%{_builddir}/%{name}-%{version} ( cd hacks ; list_files install ) > $dd/extras.files ( cd hacks/glx ; list_files install ) > $dd/gl-extras.files ( cd driver ; list_files install ) > $dd/base.files #( cd po ; list_files install ) >> $dd/base.files %find_lang %{name} cat %{name}.lang >> $dd/base.files # Make sure all files are readable by all, and writable only by owner. # chmod -R a+r,u+w,og-w ${RPM_BUILD_ROOT} %clean rm -rf ${RPM_BUILD_ROOT} %post base # This part runs on the end user's system, when the RPM is installed. # This will cause the screen to unlock, which annoys people. So, nevermind: # people will just have to remember to re-launch it themselves, like they # have to do with any other daemon they've upgraded. # #pids=`/sbin/pidof xscreensaver` #if [ -n "$pids" ]; then # echo "sending SIGHUP to running xscreensaver ($pids)..." >&2 # kill -HUP $pids #fi %files -f base.files base %defattr(-,root,root) %files -f extras.files extras %defattr(-,root,root) %files -f gl-extras.files gl-extras %defattr(-,root,root) %changelog * Fri Nov 4 2005 Eric Lassauge - Updated french translations xscreensaver-5.36/OSX/xscreensaver.xcodeproj/project.pbxproj000664 000767 000024 00007203012 12777051007 024404 0ustar00jwzstaff000000 000000 // !$*UTF8*$! { archiveVersion = 1; classes = { }; objectVersion = 46; objects = { /* Begin PBXAggregateTarget section */ AF137D410F075C9B004DE3B2 /* Obsolete */ = { isa = PBXAggregateTarget; buildConfigurationList = AF137D450F075CA4004DE3B2 /* Build configuration list for PBXAggregateTarget "Obsolete" */; buildPhases = ( ); dependencies = ( AF714E51105613580046AB1D /* PBXTargetDependency */, AF137D690F075E5C004DE3B2 /* PBXTargetDependency */, AF137D670F075E5C004DE3B2 /* PBXTargetDependency */, AF137D650F075E5C004DE3B2 /* PBXTargetDependency */, AF137D630F075E5C004DE3B2 /* PBXTargetDependency */, AF137D610F075E5C004DE3B2 /* PBXTargetDependency */, AFA160941052FF87009B93AA /* PBXTargetDependency */, AFA160921052FF87009B93AA /* PBXTargetDependency */, AFB581B0102F363300342B11 /* PBXTargetDependency */, AF137D5D0F075E5C004DE3B2 /* PBXTargetDependency */, AF137D5B0F075E5C004DE3B2 /* PBXTargetDependency */, AF137D590F075E5C004DE3B2 /* PBXTargetDependency */, AF137D570F075E5C004DE3B2 /* PBXTargetDependency */, AF714E4F105613410046AB1D /* PBXTargetDependency */, AF137D550F075E5C004DE3B2 /* PBXTargetDependency */, AF137D530F075E5C004DE3B2 /* PBXTargetDependency */, AF137D510F075E5C004DE3B2 /* PBXTargetDependency */, AF137D4F0F075E5C004DE3B2 /* PBXTargetDependency */, AF137D4D0F075E5C004DE3B2 /* PBXTargetDependency */, AF137D4B0F075E5C004DE3B2 /* PBXTargetDependency */, AF137D490F075E5C004DE3B2 /* PBXTargetDependency */, ); name = Obsolete; productName = Obsolete; }; AF480AAF098C669800FB32B8 /* All Savers (XScreenSaver) */ = { isa = PBXAggregateTarget; buildConfigurationList = AF480ABA098C66E300FB32B8 /* Build configuration list for PBXAggregateTarget "All Savers (XScreenSaver)" */; buildPhases = ( ); dependencies = ( AFE6A4300CDD7FEE002805BF /* PBXTargetDependency */, AF77798F09B6604C00EA3033 /* PBXTargetDependency */, AF77798D09B6604C00EA3033 /* PBXTargetDependency */, AF77798B09B6604C00EA3033 /* PBXTargetDependency */, AFBFE785178648E600432B21 /* PBXTargetDependency */, AF77798909B6604C00EA3033 /* PBXTargetDependency */, AF77798709B6604B00EA3033 /* PBXTargetDependency */, AF77798509B6604B00EA3033 /* PBXTargetDependency */, AF73FF3F1A0988F000E485E9 /* PBXTargetDependency */, AF77798309B6604B00EA3033 /* PBXTargetDependency */, AF77798109B6604B00EA3033 /* PBXTargetDependency */, AF77797F09B6604B00EA3033 /* PBXTargetDependency */, AF77797B09B6604B00EA3033 /* PBXTargetDependency */, AF77797909B6604B00EA3033 /* PBXTargetDependency */, AF77797709B6604B00EA3033 /* PBXTargetDependency */, AF77797509B6604B00EA3033 /* PBXTargetDependency */, AF77797309B6604B00EA3033 /* PBXTargetDependency */, AF77797109B6604B00EA3033 /* PBXTargetDependency */, AFF463530C44062500EE6509 /* PBXTargetDependency */, AF77796D09B6604A00EA3033 /* PBXTargetDependency */, AF77796B09B6604A00EA3033 /* PBXTargetDependency */, AF77796909B6604A00EA3033 /* PBXTargetDependency */, AF77796709B6604A00EA3033 /* PBXTargetDependency */, AF77796509B6604A00EA3033 /* PBXTargetDependency */, AF77796309B6604A00EA3033 /* PBXTargetDependency */, AF77796109B6604A00EA3033 /* PBXTargetDependency */, AF77795F09B6604A00EA3033 /* PBXTargetDependency */, AF77795D09B6604A00EA3033 /* PBXTargetDependency */, AF77795B09B6604A00EA3033 /* PBXTargetDependency */, AF77795909B6604A00EA3033 /* PBXTargetDependency */, AF77795709B6604A00EA3033 /* PBXTargetDependency */, AF77795509B6604A00EA3033 /* PBXTargetDependency */, AF77795309B6604900EA3033 /* PBXTargetDependency */, AF77795109B6604900EA3033 /* PBXTargetDependency */, AF77794F09B6604900EA3033 /* PBXTargetDependency */, AF77794D09B6604900EA3033 /* PBXTargetDependency */, AFB591C3178B821E00EA4005 /* PBXTargetDependency */, AF77794709B6604900EA3033 /* PBXTargetDependency */, AF77794509B6604900EA3033 /* PBXTargetDependency */, AF77794309B6604900EA3033 /* PBXTargetDependency */, AF77794109B6604900EA3033 /* PBXTargetDependency */, AF77793F09B6604900EA3033 /* PBXTargetDependency */, AF77793B09B6604900EA3033 /* PBXTargetDependency */, AF77793909B6604800EA3033 /* PBXTargetDependency */, AF1A17840D6D6FA7008AF328 /* PBXTargetDependency */, AF0DCA310C4C744D00D76972 /* PBXTargetDependency */, AF77793509B6604800EA3033 /* PBXTargetDependency */, AF77793309B6604800EA3033 /* PBXTargetDependency */, AF77793109B6604800EA3033 /* PBXTargetDependency */, AF77792D09B6604800EA3033 /* PBXTargetDependency */, AF77792B09B6604800EA3033 /* PBXTargetDependency */, AF77792909B6604800EA3033 /* PBXTargetDependency */, AF77792709B6604800EA3033 /* PBXTargetDependency */, AF77792509B6604800EA3033 /* PBXTargetDependency */, AF77792309B6604800EA3033 /* PBXTargetDependency */, AF77792109B6604800EA3033 /* PBXTargetDependency */, AF77791F09B6604800EA3033 /* PBXTargetDependency */, AF77791D09B6604800EA3033 /* PBXTargetDependency */, AFBFE787178648F500432B21 /* PBXTargetDependency */, AF77791B09B6604700EA3033 /* PBXTargetDependency */, AF77791909B6604700EA3033 /* PBXTargetDependency */, AF77791709B6604700EA3033 /* PBXTargetDependency */, AF77791509B6604700EA3033 /* PBXTargetDependency */, AF77791309B6604700EA3033 /* PBXTargetDependency */, AF77791109B6604700EA3033 /* PBXTargetDependency */, AF77790F09B6604700EA3033 /* PBXTargetDependency */, AF77790D09B6604700EA3033 /* PBXTargetDependency */, AF77790B09B6604700EA3033 /* PBXTargetDependency */, AF77790909B6604700EA3033 /* PBXTargetDependency */, AF77790709B6604700EA3033 /* PBXTargetDependency */, AF77790509B6604700EA3033 /* PBXTargetDependency */, AF77790309B6604700EA3033 /* PBXTargetDependency */, AF7778FF09B6604700EA3033 /* PBXTargetDependency */, AF7778FD09B6604600EA3033 /* PBXTargetDependency */, AF7778FB09B6604600EA3033 /* PBXTargetDependency */, AF7778F909B6604600EA3033 /* PBXTargetDependency */, AF7778F709B6604600EA3033 /* PBXTargetDependency */, AF68A49E19196EA000D41CD1 /* PBXTargetDependency */, CE04E8CB1B9B61D00085910B /* PBXTargetDependency */, AF7778F309B6604600EA3033 /* PBXTargetDependency */, AF7778F109B6604600EA3033 /* PBXTargetDependency */, AF7778EF09B6604600EA3033 /* PBXTargetDependency */, AF7778ED09B6604600EA3033 /* PBXTargetDependency */, AFA33B8F0B0585A4002B0E7D /* PBXTargetDependency */, AFA33BCF0B0587B2002B0E7D /* PBXTargetDependency */, AF7778EB09B6604600EA3033 /* PBXTargetDependency */, AF7778E709B6604600EA3033 /* PBXTargetDependency */, AF7778E509B6604600EA3033 /* PBXTargetDependency */, AF7778E309B6604600EA3033 /* PBXTargetDependency */, AF7778E109B6604600EA3033 /* PBXTargetDependency */, AF7778DF09B6604600EA3033 /* PBXTargetDependency */, AF7778DD09B6604600EA3033 /* PBXTargetDependency */, AF7778DB09B6604500EA3033 /* PBXTargetDependency */, AF7778D909B6604500EA3033 /* PBXTargetDependency */, AF7778D709B6604500EA3033 /* PBXTargetDependency */, ); name = "All Savers (XScreenSaver)"; productName = "All Savers (XScreenSaver)"; }; AF480D58098EED3D00FB32B8 /* All Savers (XLockmore) */ = { isa = PBXAggregateTarget; buildConfigurationList = AF480D64098EED6E00FB32B8 /* Build configuration list for PBXAggregateTarget "All Savers (XLockmore)" */; buildPhases = ( ); dependencies = ( AF7779D909B6608200EA3033 /* PBXTargetDependency */, AF7779D709B6608200EA3033 /* PBXTargetDependency */, AF7779D509B6608200EA3033 /* PBXTargetDependency */, AF7779D309B6608200EA3033 /* PBXTargetDependency */, AF7779D109B6608200EA3033 /* PBXTargetDependency */, AF7779CF09B6608200EA3033 /* PBXTargetDependency */, AF7779CD09B6608200EA3033 /* PBXTargetDependency */, AF7779CB09B6608200EA3033 /* PBXTargetDependency */, AF7779C909B6608200EA3033 /* PBXTargetDependency */, AF7779C709B6608200EA3033 /* PBXTargetDependency */, AF7779C309B6608100EA3033 /* PBXTargetDependency */, AF7779BF09B6608100EA3033 /* PBXTargetDependency */, AF7779BD09B6608100EA3033 /* PBXTargetDependency */, AF7779BB09B6608100EA3033 /* PBXTargetDependency */, AF7779B709B6608100EA3033 /* PBXTargetDependency */, AF7779AD09B6608100EA3033 /* PBXTargetDependency */, AF7779AB09B6608100EA3033 /* PBXTargetDependency */, AF7779A909B6608100EA3033 /* PBXTargetDependency */, AF7779A709B6608100EA3033 /* PBXTargetDependency */, AF7779A509B6608100EA3033 /* PBXTargetDependency */, AF7779A109B6608100EA3033 /* PBXTargetDependency */, AF77799B09B6608100EA3033 /* PBXTargetDependency */, AF77799909B6608100EA3033 /* PBXTargetDependency */, AF77799709B6608100EA3033 /* PBXTargetDependency */, AF77799509B6608000EA3033 /* PBXTargetDependency */, ); name = "All Savers (XLockmore)"; productName = "All Savers (XLockmore)"; }; AF480D59098EED5100FB32B8 /* All Savers (OpenGL) */ = { isa = PBXAggregateTarget; buildConfigurationList = AF480D67098EED6E00FB32B8 /* Build configuration list for PBXAggregateTarget "All Savers (OpenGL)" */; buildPhases = ( ); dependencies = ( AF777A6509B660B700EA3033 /* PBXTargetDependency */, AF777A6309B660B700EA3033 /* PBXTargetDependency */, AF777A6109B660B700EA3033 /* PBXTargetDependency */, AF777A5F09B660B600EA3033 /* PBXTargetDependency */, AF777A5D09B660B600EA3033 /* PBXTargetDependency */, AF777A5B09B660B600EA3033 /* PBXTargetDependency */, AF777A5909B660B600EA3033 /* PBXTargetDependency */, AF777A5709B660B600EA3033 /* PBXTargetDependency */, AF777A5509B660B600EA3033 /* PBXTargetDependency */, AF777A5309B660B600EA3033 /* PBXTargetDependency */, AF777A5109B660B600EA3033 /* PBXTargetDependency */, AF777A4F09B660B600EA3033 /* PBXTargetDependency */, AF777A4D09B660B600EA3033 /* PBXTargetDependency */, AF777A4B09B660B600EA3033 /* PBXTargetDependency */, AF5C9B161A0CCF8000B0147A /* PBXTargetDependency */, AF4F10EE143450C300E34F3F /* PBXTargetDependency */, AF777A4909B660B500EA3033 /* PBXTargetDependency */, AF777A4709B660B500EA3033 /* PBXTargetDependency */, AF777A4509B660B500EA3033 /* PBXTargetDependency */, AFEE108A1D15EBF900AAC8F7 /* PBXTargetDependency */, AF777A4309B660B500EA3033 /* PBXTargetDependency */, AFEE106B1D13424C00AAC8F7 /* PBXTargetDependency */, AF4FF4D70D52CD0D00666F98 /* PBXTargetDependency */, AF777A4109B660B500EA3033 /* PBXTargetDependency */, AF3938381D0FBF5300205406 /* PBXTargetDependency */, AF777A3F09B660B500EA3033 /* PBXTargetDependency */, AFEC23EB1CB6ED0800DE138F /* PBXTargetDependency */, AF777A3D09B660B500EA3033 /* PBXTargetDependency */, AFACE8911CC8365F008B24CD /* PBXTargetDependency */, AF777A3B09B660B500EA3033 /* PBXTargetDependency */, AF777A3909B660B400EA3033 /* PBXTargetDependency */, AF777A3709B660B400EA3033 /* PBXTargetDependency */, AF777A3509B660B400EA3033 /* PBXTargetDependency */, AF777A3309B660B400EA3033 /* PBXTargetDependency */, AF777A3109B660B400EA3033 /* PBXTargetDependency */, AF777A2F09B660B400EA3033 /* PBXTargetDependency */, AFF3CA0117CCAE210028F240 /* PBXTargetDependency */, AF7ACFDC19FF0BDB00BD752B /* PBXTargetDependency */, AF777A2D09B660B400EA3033 /* PBXTargetDependency */, AF777A2B09B660B400EA3033 /* PBXTargetDependency */, AF777A2909B660B400EA3033 /* PBXTargetDependency */, AFF4636F0C440B3B00EE6509 /* PBXTargetDependency */, AF777A2509B660B400EA3033 /* PBXTargetDependency */, AF777A2309B660B400EA3033 /* PBXTargetDependency */, AF777A2109B660B300EA3033 /* PBXTargetDependency */, AF777A1F09B660B300EA3033 /* PBXTargetDependency */, AF48DF060A0C261100F94CF9 /* PBXTargetDependency */, AF777A1D09B660B300EA3033 /* PBXTargetDependency */, AF777A1B09B660B300EA3033 /* PBXTargetDependency */, AF777A1909B660B300EA3033 /* PBXTargetDependency */, AF1B0FC51D7AB5740011DBE4 /* PBXTargetDependency */, AF4F10F0143450C300E34F3F /* PBXTargetDependency */, AFC0E8C91CDC6125008CAFAC /* PBXTargetDependency */, AF777A1709B660B300EA3033 /* PBXTargetDependency */, AF42C5160D624E9200B27FF6 /* PBXTargetDependency */, AF777A1509B660B300EA3033 /* PBXTargetDependency */, AF35E8A30E63825600691F2F /* PBXTargetDependency */, AF777A1309B660B300EA3033 /* PBXTargetDependency */, AFBFE7421786407000432B21 /* PBXTargetDependency */, AF777A1109B660B300EA3033 /* PBXTargetDependency */, AF777A0F09B660B200EA3033 /* PBXTargetDependency */, AF777A0D09B660B200EA3033 /* PBXTargetDependency */, AF4FD6FF0CE7A4F9005EE58E /* PBXTargetDependency */, AF777A0B09B660B200EA3033 /* PBXTargetDependency */, AF777A0909B660B200EA3033 /* PBXTargetDependency */, AF777A0709B660B200EA3033 /* PBXTargetDependency */, AFE6A19C0CDD7B7F002805BF /* PBXTargetDependency */, AF777A0509B660B200EA3033 /* PBXTargetDependency */, AF777A0309B660B200EA3033 /* PBXTargetDependency */, AF777A0109B660B200EA3033 /* PBXTargetDependency */, AFD51B350F063B7800471C02 /* PBXTargetDependency */, AF7779FF09B660B200EA3033 /* PBXTargetDependency */, AF7779FD09B660B100EA3033 /* PBXTargetDependency */, AF7779FB09B660B100EA3033 /* PBXTargetDependency */, AF7779F909B660B100EA3033 /* PBXTargetDependency */, AFFAB33519158F1E0020F021 /* PBXTargetDependency */, AF7779F709B660B100EA3033 /* PBXTargetDependency */, AF7779F509B660B100EA3033 /* PBXTargetDependency */, AFBFE7401786405E00432B21 /* PBXTargetDependency */, AF7779F309B660B000EA3033 /* PBXTargetDependency */, AFA211AA1CD5A08000C0D2A1 /* PBXTargetDependency */, AF63A80F1AB4EFD300593C75 /* PBXTargetDependency */, AF7779F109B660B000EA3033 /* PBXTargetDependency */, AF32D9F90F3AD0D90080F535 /* PBXTargetDependency */, AF4540D20E52BE8800AE87B5 /* PBXTargetDependency */, AF7779EF09B660B000EA3033 /* PBXTargetDependency */, AF7779ED09B660B000EA3033 /* PBXTargetDependency */, AFE2A46F0E2E908E00ADB298 /* PBXTargetDependency */, AF7779EB09B660B000EA3033 /* PBXTargetDependency */, AFCF835C1AF5B683008BB7E1 /* PBXTargetDependency */, AFEE10A91D17E32100AAC8F7 /* PBXTargetDependency */, AF7779E909B660B000EA3033 /* PBXTargetDependency */, AF7779E709B660B000EA3033 /* PBXTargetDependency */, AF7779E509B660B000EA3033 /* PBXTargetDependency */, AF7779E309B660B000EA3033 /* PBXTargetDependency */, AF7779E109B660AF00EA3033 /* PBXTargetDependency */, AF4A3460102A59A400A81B2A /* PBXTargetDependency */, AF7779DF09B660AF00EA3033 /* PBXTargetDependency */, AF7779DD09B660AF00EA3033 /* PBXTargetDependency */, AF998EF70A083E1D0051049D /* PBXTargetDependency */, AF4F10F2143450C300E34F3F /* PBXTargetDependency */, AF46E9ED1CBBA49A00240FBC /* PBXTargetDependency */, AFDA65AA178A54690070D24B /* PBXTargetDependency */, AF0DCA5C0C4CBB4300D76972 /* PBXTargetDependency */, AF39E2BA198A16920064A58D /* PBXTargetDependency */, ); name = "All Savers (OpenGL)"; productName = "All Savers (OpenGL)"; }; AF480D5A098EED5E00FB32B8 /* All Savers */ = { isa = PBXAggregateTarget; buildConfigurationList = AF480D6A098EED6E00FB32B8 /* Build configuration list for PBXAggregateTarget "All Savers" */; buildPhases = ( ); dependencies = ( AFCAD5F90992DFE00009617A /* PBXTargetDependency */, AF36340118540D050086A439 /* PBXTargetDependency */, AF480D60098EED6900FB32B8 /* PBXTargetDependency */, AF480D5E098EED6900FB32B8 /* PBXTargetDependency */, AF480D5C098EED6900FB32B8 /* PBXTargetDependency */, AF137D470F075CC8004DE3B2 /* PBXTargetDependency */, ); name = "All Savers"; productName = "All Savers"; }; AFA33C020B058E17002B0E7D /* webcollage-perl */ = { isa = PBXAggregateTarget; buildConfigurationList = AFA33C070B058E67002B0E7D /* Build configuration list for PBXAggregateTarget "webcollage-perl" */; buildPhases = ( ); dependencies = ( ); name = "webcollage-perl"; productName = webcollage; }; /* End PBXAggregateTarget section */ /* Begin PBXBuildFile section */ 550FB6001AD64424001A4FA5 /* Media-iOS.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 550FB5FD1AD64424001A4FA5 /* Media-iOS.xcassets */; }; 55EDCB3D1AD498A800251909 /* LaunchScreen.xib in Resources */ = {isa = PBXBuildFile; fileRef = 55EDCB3C1AD498A800251909 /* LaunchScreen.xib */; }; AF012918157C1E4C00C396E1 /* chessmodels.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA55E2309935F2B00F3E977 /* chessmodels.c */; }; AF0839A609930BAC00277BE9 /* atlantis.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258700988A468000655EE /* atlantis.xml */; }; AF0839B009930C4900277BE9 /* atlantis.c in Sources */ = {isa = PBXBuildFile; fileRef = AF0839A909930C4900277BE9 /* atlantis.c */; }; AF0839B109930C4900277BE9 /* dolphin.c in Sources */ = {isa = PBXBuildFile; fileRef = AF0839AA09930C4900277BE9 /* dolphin.c */; }; AF0839B209930C4900277BE9 /* shark.c in Sources */ = {isa = PBXBuildFile; fileRef = AF0839AB09930C4900277BE9 /* shark.c */; }; AF0839B309930C4900277BE9 /* swim.c in Sources */ = {isa = PBXBuildFile; fileRef = AF0839AC09930C4900277BE9 /* swim.c */; }; AF0839B409930C4900277BE9 /* whale.c in Sources */ = {isa = PBXBuildFile; fileRef = AF0839AD09930C4900277BE9 /* whale.c */; }; AF083A1C099310B300277BE9 /* xpm-ximage.c in Sources */ = {isa = PBXBuildFile; fileRef = AF0839AE09930C4900277BE9 /* xpm-ximage.c */; }; AF083A21099310CF00277BE9 /* xlockmore.c in Sources */ = {isa = PBXBuildFile; fileRef = AF480CBB098E37D600FB32B8 /* xlockmore.c */; }; AF083A4A099311FF00277BE9 /* atunnel.c in Sources */ = {isa = PBXBuildFile; fileRef = AF083A31099311CE00277BE9 /* atunnel.c */; }; AF083A4B0993120900277BE9 /* atunnel.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258720988A468000655EE /* atunnel.xml */; }; AF083A59099312B000277BE9 /* tunnel_draw.c in Sources */ = {isa = PBXBuildFile; fileRef = AF083A58099312B000277BE9 /* tunnel_draw.c */; }; AF0D117D0E41566300BB14A4 /* xscreensaver-getimage-file in Resources */ = {isa = PBXBuildFile; fileRef = AF0FAF1209CA712600EE1051 /* xscreensaver-getimage-file */; }; AF0DC7B10C4C73F600D76972 /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF0DC7B20C4C73F600D76972 /* analogtv.c in Sources */ = {isa = PBXBuildFile; fileRef = AF9D4CFA09B5AC94006E59CF /* analogtv.c */; }; AF0DCA350C4C74A200D76972 /* asm6502.c in Sources */ = {isa = PBXBuildFile; fileRef = AF0DCA320C4C74A200D76972 /* asm6502.c */; }; AF0DCA360C4C74A200D76972 /* m6502.c in Sources */ = {isa = PBXBuildFile; fileRef = AF0DCA340C4C74A200D76972 /* m6502.c */; }; AF0DCA380C4C74B700D76972 /* m6502.xml in Resources */ = {isa = PBXBuildFile; fileRef = AF0DCA370C4C74B700D76972 /* m6502.xml */; }; AF0DCA480C4CBB0D00D76972 /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF0DCA600C4CBB7300D76972 /* voronoi.c in Sources */ = {isa = PBXBuildFile; fileRef = AF0DCA5F0C4CBB7300D76972 /* voronoi.c */; }; AF0DCA620C4CBB8E00D76972 /* voronoi.xml in Resources */ = {isa = PBXBuildFile; fileRef = AF0DCA610C4CBB8E00D76972 /* voronoi.xml */; }; AF0FAF0C09CA6FF900EE1051 /* xscreensaver-text in Resources */ = {isa = PBXBuildFile; fileRef = AF0FAF0B09CA6FF900EE1051 /* xscreensaver-text */; }; AF0FAF0D09CA6FF900EE1051 /* xscreensaver-text in Resources */ = {isa = PBXBuildFile; fileRef = AF0FAF0B09CA6FF900EE1051 /* xscreensaver-text */; }; AF0FAF0E09CA6FF900EE1051 /* xscreensaver-text in Resources */ = {isa = PBXBuildFile; fileRef = AF0FAF0B09CA6FF900EE1051 /* xscreensaver-text */; }; AF0FAF0F09CA6FF900EE1051 /* xscreensaver-text in Resources */ = {isa = PBXBuildFile; fileRef = AF0FAF0B09CA6FF900EE1051 /* xscreensaver-text */; }; AF0FAF1009CA6FF900EE1051 /* xscreensaver-text in Resources */ = {isa = PBXBuildFile; fileRef = AF0FAF0B09CA6FF900EE1051 /* xscreensaver-text */; }; AF0FAF1109CA6FF900EE1051 /* xscreensaver-text in Resources */ = {isa = PBXBuildFile; fileRef = AF0FAF0B09CA6FF900EE1051 /* xscreensaver-text */; }; AF0FAF1309CA712600EE1051 /* xscreensaver-getimage-file in Resources */ = {isa = PBXBuildFile; fileRef = AF0FAF1209CA712600EE1051 /* xscreensaver-getimage-file */; }; AF0FAF1409CA712600EE1051 /* xscreensaver-getimage-file in Resources */ = {isa = PBXBuildFile; fileRef = AF0FAF1209CA712600EE1051 /* xscreensaver-getimage-file */; }; AF0FAF1509CA712600EE1051 /* xscreensaver-getimage-file in Resources */ = {isa = PBXBuildFile; fileRef = AF0FAF1209CA712600EE1051 /* xscreensaver-getimage-file */; }; AF0FAF1609CA712600EE1051 /* xscreensaver-getimage-file in Resources */ = {isa = PBXBuildFile; fileRef = AF0FAF1209CA712600EE1051 /* xscreensaver-getimage-file */; }; AF0FAF1709CA712600EE1051 /* xscreensaver-getimage-file in Resources */ = {isa = PBXBuildFile; fileRef = AF0FAF1209CA712600EE1051 /* xscreensaver-getimage-file */; }; AF0FAF1809CA712600EE1051 /* xscreensaver-getimage-file in Resources */ = {isa = PBXBuildFile; fileRef = AF0FAF1209CA712600EE1051 /* xscreensaver-getimage-file */; }; AF0FAF1909CA712600EE1051 /* xscreensaver-getimage-file in Resources */ = {isa = PBXBuildFile; fileRef = AF0FAF1209CA712600EE1051 /* xscreensaver-getimage-file */; }; AF0FAF1A09CA712600EE1051 /* xscreensaver-getimage-file in Resources */ = {isa = PBXBuildFile; fileRef = AF0FAF1209CA712600EE1051 /* xscreensaver-getimage-file */; }; AF0FAF1B09CA712600EE1051 /* xscreensaver-getimage-file in Resources */ = {isa = PBXBuildFile; fileRef = AF0FAF1209CA712600EE1051 /* xscreensaver-getimage-file */; }; AF0FAF1C09CA712600EE1051 /* xscreensaver-getimage-file in Resources */ = {isa = PBXBuildFile; fileRef = AF0FAF1209CA712600EE1051 /* xscreensaver-getimage-file */; }; AF0FAF1D09CA712600EE1051 /* xscreensaver-getimage-file in Resources */ = {isa = PBXBuildFile; fileRef = AF0FAF1209CA712600EE1051 /* xscreensaver-getimage-file */; }; AF0FAF1E09CA712600EE1051 /* xscreensaver-getimage-file in Resources */ = {isa = PBXBuildFile; fileRef = AF0FAF1209CA712600EE1051 /* xscreensaver-getimage-file */; }; AF0FAF1F09CA712600EE1051 /* xscreensaver-getimage-file in Resources */ = {isa = PBXBuildFile; fileRef = AF0FAF1209CA712600EE1051 /* xscreensaver-getimage-file */; }; AF0FAF2109CA712600EE1051 /* xscreensaver-getimage-file in Resources */ = {isa = PBXBuildFile; fileRef = AF0FAF1209CA712600EE1051 /* xscreensaver-getimage-file */; }; AF0FAF2209CA712600EE1051 /* xscreensaver-getimage-file in Resources */ = {isa = PBXBuildFile; fileRef = AF0FAF1209CA712600EE1051 /* xscreensaver-getimage-file */; }; AF0FAF2309CA712600EE1051 /* xscreensaver-getimage-file in Resources */ = {isa = PBXBuildFile; fileRef = AF0FAF1209CA712600EE1051 /* xscreensaver-getimage-file */; }; AF0FAF2409CA712600EE1051 /* xscreensaver-getimage-file in Resources */ = {isa = PBXBuildFile; fileRef = AF0FAF1209CA712600EE1051 /* xscreensaver-getimage-file */; }; AF0FAF2509CA712600EE1051 /* xscreensaver-getimage-file in Resources */ = {isa = PBXBuildFile; fileRef = AF0FAF1209CA712600EE1051 /* xscreensaver-getimage-file */; }; AF0FAF2609CA712600EE1051 /* xscreensaver-getimage-file in Resources */ = {isa = PBXBuildFile; fileRef = AF0FAF1209CA712600EE1051 /* xscreensaver-getimage-file */; }; 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 */; }; AF1A17680D6D6EE3008AF328 /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF1A177F0D6D6F3E008AF328 /* lcdscrub.c in Sources */ = {isa = PBXBuildFile; fileRef = AF1A177E0D6D6F3E008AF328 /* lcdscrub.c */; }; AF1A17810D6D6F62008AF328 /* lcdscrub.xml in Resources */ = {isa = PBXBuildFile; fileRef = AF1A17800D6D6F62008AF328 /* lcdscrub.xml */; }; AF1AD9E318500F9F00932759 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1ADA141850132600932759 /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 29B97316FDCFA39411CA2CEA /* main.m */; }; AF1ADA161850157400932759 /* Updater.xib in Resources */ = {isa = PBXBuildFile; fileRef = AF1ADA151850157400932759 /* Updater.xib */; }; AF1ADA181850180E00932759 /* Sparkle.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF1ADA171850180E00932759 /* Sparkle.framework */; }; AF1ADA1A1850186B00932759 /* Sparkle.framework in CopyFiles */ = {isa = PBXBuildFile; fileRef = AF1ADA171850180E00932759 /* Sparkle.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, ); }; }; AF1ADA1B18501B3D00932759 /* SaverRunner.icns in Resources */ = {isa = PBXBuildFile; fileRef = AF2D522513E954A0002AA818 /* SaverRunner.icns */; }; AF1ADA1F18504A4F00932759 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1B0FAE1D7AB4740011DBE4 /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF1B0FB01D7AB4740011DBE4 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1B0FB11D7AB4740011DBE4 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1B0FB21D7AB4740011DBE4 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF1B0FB31D7AB4740011DBE4 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1B0FB41D7AB4740011DBE4 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1B0FB51D7AB4740011DBE4 /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; AF1B0FB61D7AB4740011DBE4 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF1B0FC01D7AB5330011DBE4 /* hexstrut.xml in Resources */ = {isa = PBXBuildFile; fileRef = AF1B0FBF1D7AB5210011DBE4 /* hexstrut.xml */; }; AF1B0FC11D7AB53A0011DBE4 /* hexstrut.xml in Resources */ = {isa = PBXBuildFile; fileRef = AF1B0FBF1D7AB5210011DBE4 /* hexstrut.xml */; }; AF1B0FC21D7AB54D0011DBE4 /* hexstrut.c in Sources */ = {isa = PBXBuildFile; fileRef = AF1B0FBE1D7AB5210011DBE4 /* hexstrut.c */; }; AF1B0FC31D7AB5500011DBE4 /* hexstrut.c in Sources */ = {isa = PBXBuildFile; fileRef = AF1B0FBE1D7AB5210011DBE4 /* hexstrut.c */; settings = {COMPILER_FLAGS = "-DUSE_GL"; }; }; AF1FD713158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD714158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD715158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD716158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD717158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD718158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD719158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD71A158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD71B158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD71C158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD71D158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD71E158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD71F158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD720158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD721158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD722158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD727158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD728158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD729158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD72A158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD72B158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD72C158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD72D158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD72E158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD72F158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD730158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD731158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD732158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD733158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD734158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD735158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD736158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD737158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD738158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD739158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD73A158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD73B158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD73C158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD73D158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD73E158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD73F158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD740158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD741158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD742158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD743158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD744158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD745158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD746158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD747158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD748158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD749158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD74A158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD74B158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD74C158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD74D158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD74E158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD74F158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD750158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD751158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD752158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD753158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD754158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD755158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD756158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD757158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD758158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD759158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD75A158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD75B158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD75C158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD75D158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD75E158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD75F158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD760158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD761158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD762158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD763158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD764158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD765158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD766158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD767158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD768158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD769158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD76A158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD76B158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD76C158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD76D158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD76E158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD76F158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD770158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD771158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD772158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD773158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD774158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD775158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD776158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD777158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD778158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD779158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD77A158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD77B158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD77C158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD77D158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD77E158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD77F158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD780158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD781158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD782158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD783158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD784158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD785158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD786158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD787158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD788158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD789158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD78A158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD78B158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD78C158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD78D158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD78E158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD78F158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD790158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD791158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD792158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD793158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD794158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD795158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD796158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD797158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD798158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD799158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD79A158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD79B158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD79C158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD79D158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD79E158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD79F158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD7A0158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD7A1158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD7A2158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD7A3158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD7A4158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD7A5158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD7A6158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD7A7158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD7A8158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD7A9158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD7AA158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD7AB158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD7AC158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD7AD158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD7AE158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD7AF158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD7B0158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD7B1158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD7B2158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD7B3158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD7B4158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD7B5158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD7B6158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD7B7158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD7B8158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD7B9158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD7BA158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD7BB158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD7BC158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD7BD158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD7BE158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD7BF158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD7C0158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD7C1158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD7C2158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD7C3158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD7C4158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD7C5158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD7C6158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD7C7158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD7C8158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD7C9158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD7CA158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD7CB158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD7CC158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD7CD158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD7CE158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD7CF158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD7D0158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD7D1158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD7D2158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD7D3158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD7D4158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD7D5158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD7D6158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD7D7158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD7D8158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD7D9158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD7DA158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD7DB158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD7DC158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD7DD158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD7DE158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD7DF158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD7E0158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD7E1158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD7E2158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD7E3158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD7E4158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD7E5158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD7E6158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD7E7158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD7E8158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD7E9158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD7EA158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD7EB158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD7EC158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD7ED158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD7EE158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD7EF158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD7F0158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD7F1158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD7F2158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD7F7158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD7F8158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD7F9158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD7FA158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD7FB158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD7FC158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD7FD158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD7FE158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD7FF158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD800158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD801158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD802158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD803158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD804158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD805158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD806158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD807158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD808158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD809158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD80A158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD80B158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD80C158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD80D158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD80E158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD80F158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD810158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD811158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD812158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD813158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD814158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD815158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD816158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD817158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD818158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD819158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD81A158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD81B158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD81C158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD81D158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD81E158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD81F158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD820158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD821158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD822158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD823158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD824158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD825158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD826158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD827158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD828158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD829158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD82A158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD82B158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD82C158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD82D158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD82E158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD82F158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD830158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD831158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD832158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD833158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD834158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD835158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD836158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD837158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD838158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD839158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD83A158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD83B158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD83C158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD83D158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD83E158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD83F158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD840158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD841158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD842158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD843158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD844158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD845158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD846158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD847158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD848158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD849158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD84A158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD84B158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD84C158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD84D158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD84E158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD84F158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD850158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD851158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD852158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD853158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD854158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD855158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD856158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD857158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD858158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD859158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD85A158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD85B158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD85C158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD85D158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD85E158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD85F158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD860158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD861158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD862158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD863158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD864158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD865158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD866158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD867158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD868158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD869158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD86A158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD86B158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD86C158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD86D158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD86E158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD86F158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD870158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD871158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD872158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD873158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD874158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD875158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD876158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD877158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD878158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD879158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD87A158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD87B158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD87C158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD87D158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD87E158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD87F158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD880158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD881158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD882158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD883158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD884158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD885158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD886158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD887158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD888158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD889158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD88A158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD88B158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD88C158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD88D158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD88E158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD88F158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD890158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD891158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD892158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD893158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD894158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD895158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD896158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD897158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD898158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD899158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD89A158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD89B158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD89C158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD89D158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD89E158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD89F158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD8A0158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD8A1158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD8A2158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD8A3158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD8A4158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD8A5158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD8A6158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD8A7158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD8A8158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD8A9158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD8AA158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD8AB158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD8AC158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD8AD158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD8AE158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD8AF158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD8B0158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD8B1158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD8B2158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD8B3158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD8B4158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD8B5158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD8B6158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD8B7158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD8B8158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD8B9158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD8BA158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD8BB158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD8BC158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD8BD158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD8BE158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD8BF158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD8C0158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD8C1158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD8C2158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD8C3158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD8C4158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD8C5158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD8C6158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD8C7158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD8C8158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD8C9158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD8CA158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD8CB158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD8CC158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD8CD158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD8CE158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD8CF158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD8D0158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD8D1158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD8D2158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD8D3158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD8D4158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD8D5158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD8D6158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD8D7158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD8D8158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD8D9158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD8DA158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD8DB158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD8DC158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD8DD158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD8DE158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD8DF158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD8E0158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD8E1158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD8E2158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD8E3158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD8E4158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD8E5158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD8E6158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD8E7158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD8E8158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD8E9158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD8EA158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD8EB158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD8EC158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD8ED158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD8EE158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD8EF158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD8F0158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD8F1158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD8F2158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD8F3158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD8F4158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD8F5158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD8F6158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD8F7158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD8F8158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD8F9158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD8FA158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD8FB158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD8FC158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD8FD158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD8FE158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD8FF158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD900158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD901158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD902158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD903158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD904158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD905158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD906158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD907158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD908158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD909158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD90A158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD90B158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD90C158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD90D158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD90E158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD90F158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD910158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD911158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD912158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD913158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD914158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD915158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD916158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD917158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD918158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD919158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD91A158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD91B158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD91C158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD91D158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD91E158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD91F158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD920158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD921158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD922158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD923158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD924158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD925158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD926158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD927158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD928158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD929158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD92A158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD92B158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD92C158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD92D158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD92E158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD92F158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD930158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD931158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD932158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD933158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD934158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD935158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD936158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD937158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD938158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD939158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD93A158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD93B158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD93C158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD93D158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD93E158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD93F158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD940158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD941158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD942158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD943158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD944158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD945158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD946158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD947158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD948158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD949158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD94A158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD94B158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD94C158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD94D158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD94E158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD94F158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD950158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD951158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD952158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD953158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD954158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD955158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD956158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD957158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD958158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD959158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD95A158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD95B158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD95C158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD95D158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD95E158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD95F158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD960158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD961158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD962158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD963158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD964158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD965158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD966158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD967158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD968158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD969158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD96A158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD96B158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD96C158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD96D158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD96E158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD96F158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD970158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD971158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD972158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD973158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD974158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD975158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD976158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD977158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD978158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD979158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD97A158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD97B158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD97C158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD97D158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD97E158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD97F158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD980158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD981158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD982158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD983158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD984158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD985158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD986158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD987158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD988158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD989158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD98A158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD98B158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD98C158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD98D158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD98E158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD98F158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD990158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD991158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD992158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD993158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD994158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD995158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD996158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD997158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD998158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD999158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD99A158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD99B158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD99C158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD99D158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD99E158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD99F158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD9A0158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD9A1158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD9A2158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD9A3158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD9A4158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD9A5158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD9A6158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD9A7158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD9A8158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD9A9158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD9AA158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD9AB158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD9AC158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD9AD158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD9AE158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD9AF158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD9B0158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD9B1158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD9B2158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD9B3158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD9B4158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD9B5158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD9B6158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD9B7158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD9B8158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD9B9158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD9BA158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD9BB158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD9BC158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD9BD158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD9BE158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD9BF158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD9C0158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD9C1158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD9C2158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD9C3158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD9C4158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD9C5158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD9C6158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD9C7158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD9C8158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD9C9158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD9CA158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD9CB158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD9CC158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD9CD158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD9CE158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD9CF158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD9D0158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD9D1158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD9D2158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD9D3158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD9D4158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD9D5158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD9D6158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD9D7158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD9D8158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD9D9158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD9DA158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD9DB158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD9DC158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD9DD158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD9DE158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD9DF158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD9E0158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD9E1158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD9E2158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD9E3158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD9E4158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD9E5158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD9E6158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD9E7158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD9E8158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD9E9158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD9EA158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD9EB158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD9EC158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD9ED158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD9EE158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD9EF158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD9F0158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD9F1158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD9F2158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD9F3158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD9F4158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD9F5158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD9F6158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD9F7158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD9F8158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD9F9158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD9FA158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD9FB158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD9FC158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD9FD158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD9FE158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD9FF158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FDA00158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FDA01158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FDA02158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FDA03158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FDA04158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FDA05158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FDA06158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FDA07158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FDA08158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FDA09158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FDA0A158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FDA0B158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FDA0C158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FDA0D158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FDA0E158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FDA0F158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FDA10158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FDA11158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FDA12158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FDA13158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FDA14158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FDA15158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FDA16158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FDA17158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FDA18158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FDA19158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FDA1A158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FDA1B158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FDA1C158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FDA1D158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FDA1E158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FDA1F158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FDA20158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FDA21158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FDA22158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FDA23158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FDA24158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FDA25158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FDA26158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FDA27158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FDA28158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FDA29158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FDA2A158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FDA2B158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FDA2C158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FDA2D158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FDA2E158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FDA2F158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FDA30158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FDA31158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FDA32158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FDA33158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FDA34158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FDA35158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FDA36158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FDA37158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FDA38158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FDA39158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FDA3A158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FDA3B158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FDA3C158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FDA3D158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FDA3E158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FDA3F158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FDA40158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FDA41158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FDA42158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FDA43158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FDA44158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FDA45158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FDA46158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FDA47158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FDA48158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FDA49158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FDA4A158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FDA4B158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FDA4C158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FDA4D158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FDA4E158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FDA4F158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FDA50158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FDA51158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FDA52158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FDA53158FF96600C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FDA54158FF96600C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FDA55158FF96600C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FDA56158FF96600C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FDA57158FF96600C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FDA58158FF96600C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FDA59158FF96600C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FDA5A158FF96600C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FDA5B158FF96600C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FDA5C158FF96600C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FDA5D158FF96600C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FDA5E158FF96600C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FDA5F158FF96600C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FDA60158FF96600C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FDA61158FF96600C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FDA62158FF96600C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FDA63158FF96600C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FDA64158FF96600C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FDA65158FF96600C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FDA66158FF96600C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FDA67158FF96600C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FDA68158FF96600C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FDA69158FF96600C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FDA6A158FF96600C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FDA6B158FF96600C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FDA6C158FF96600C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FDA6D158FF96600C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FDA6E158FF96600C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FDA6F158FF96600C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FDA70158FF96600C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FDA71158FF96600C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FDA72158FF96600C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FDA73158FF96600C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FDA74158FF96600C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FDA75158FF96600C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FDA76158FF96600C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FDA77158FF96600C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FDA78158FF96600C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FDA79158FF96600C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FDA7A158FF96600C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FDA7B158FF96600C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FDA7C158FF96600C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FDA7D158FF96600C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FDA7E158FF96600C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FDA7F158FF96600C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FDA80158FF96600C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FDA81158FF96600C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FDA82158FF96600C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FDA83158FF96600C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FDA84158FF96600C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FDA85158FF96600C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FDA86158FF96600C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FDA87158FF96600C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FDA88158FF96600C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FDA89158FF96600C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FDA8A158FF96600C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF241F83107C38DF00046A84 /* dropshadow.c in Sources */ = {isa = PBXBuildFile; fileRef = AF241F81107C38DF00046A84 /* dropshadow.c */; }; AF2C31E615C0F7FE007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C31EA15C0FC9C007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C31EB15C0FC9C007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C31EC15C0FC9C007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C31ED15C0FC9C007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C31EF15C0FC9C007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C31F015C0FC9C007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C31F115C0FC9C007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C31F215C0FC9C007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C31F315C0FC9C007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C31F415C0FC9C007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C31F515C0FC9C007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C31F615C0FC9C007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C31F715C0FC9C007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C31F815C0FC9C007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C31F915C0FC9C007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C31FA15C0FC9C007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C31FB15C0FC9C007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C31FC15C0FC9C007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C31FD15C0FC9C007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C31FE15C0FC9C007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C31FF15C0FC9C007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C320015C0FC9C007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C320115C0FC9C007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C320215C0FC9C007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C320315C0FC9C007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C320415C0FC9C007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C320515C0FC9C007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C320615C0FC9C007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C320715C0FC9C007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C320815C0FC9C007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C320915C0FC9C007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C320A15C0FC9C007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C320B15C0FC9C007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C320C15C0FC9C007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C320D15C0FC9C007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C320E15C0FC9C007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C320F15C0FC9C007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C321015C0FC9C007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C321115C0FC9C007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C321215C0FC9C007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C321315C0FC9C007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C321415C0FC9C007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C321515C0FC9C007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C321615C0FC9C007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C321715C0FC9C007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C321815C0FC9C007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C321915C0FC9C007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C321A15C0FC9C007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C321B15C0FC9C007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C321C15C0FC9C007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C321D15C0FC9C007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C321E15C0FC9C007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C321F15C0FC9C007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C322015C0FC9C007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C322115C0FC9C007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C322315C0FC9C007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C322415C0FC9C007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C322515C0FC9C007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C322615C0FC9C007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C322715C0FC9C007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C322815C0FC9C007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C322915C0FC9C007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C322A15C0FC9C007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C322B15C0FC9C007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C322C15C0FC9C007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C322D15C0FC9C007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C322E15C0FC9C007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C322F15C0FC9C007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C323015C0FC9C007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C323115C0FC9C007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C323215C0FC9C007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C323315C0FC9C007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C323415C0FC9C007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C323515C0FC9C007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C323615C0FC9C007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C323715C0FC9C007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C323815C0FC9C007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C323915C0FC9C007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C323A15C0FC9C007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C323B15C0FC9C007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C323C15C0FC9C007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C323D15C0FC9C007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C323E15C0FC9C007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C323F15C0FC9C007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C324015C0FC9C007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C324115C0FC9C007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C324215C0FC9C007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C324315C0FC9C007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C324415C0FC9C007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C324515C0FC9C007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C324615C0FC9C007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C324715C0FC9C007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C324815C0FC9C007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C324915C0FC9C007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C324A15C0FC9C007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C324B15C0FC9C007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C324C15C0FC9C007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C324D15C0FC9C007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C324E15C0FC9C007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C324F15C0FC9C007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C325015C0FC9C007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C325115C0FC9C007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C325215C0FC9C007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C325315C0FC9C007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C325515C0FC9C007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C325615C0FC9C007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C325715C0FC9C007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C325815C0FC9C007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C325915C0FC9C007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C325A15C0FC9C007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C325B15C0FC9C007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C325C15C0FC9C007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C325D15C0FC9C007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C325E15C0FC9C007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C325F15C0FC9C007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C326015C0FC9C007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C326115C0FC9C007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C326215C0FC9C007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C326315C0FC9C007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C326415C0FC9C007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C326515C0FC9C007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C326615C0FC9C007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C326715C0FC9C007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C326815C0FC9C007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C326915C0FC9C007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C326A15C0FC9C007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C326B15C0FC9C007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C326C15C0FC9C007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C326D15C0FC9C007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C326E15C0FC9C007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C326F15C0FC9C007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C327015C0FC9C007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C327115C0FC9C007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C327215C0FC9C007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C327315C0FC9C007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C327415C0FC9D007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C327515C0FC9D007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C327615C0FC9D007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C327715C0FC9D007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C327815C0FC9D007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C327915C0FC9D007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C327A15C0FC9D007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C327B15C0FC9D007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C327C15C0FC9D007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C327D15C0FC9D007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C327E15C0FC9D007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C327F15C0FC9D007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C328015C0FC9D007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C328115C0FC9D007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C328215C0FC9D007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C328315C0FC9D007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C328415C0FC9D007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C328515C0FC9D007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C328615C0FC9D007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C328715C0FC9D007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C328815C0FC9D007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C328915C0FC9D007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C328A15C0FC9D007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C328B15C0FC9D007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C328C15C0FC9D007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C328D15C0FC9D007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C328E15C0FC9D007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C328F15C0FC9D007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C329015C0FC9D007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C329115C0FC9D007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C329215C0FC9D007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C329315C0FC9D007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C329415C0FC9D007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C329515C0FC9D007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C329615C0FC9D007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C329715C0FC9D007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C329815C0FC9D007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C329915C0FC9D007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C329A15C0FC9D007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C329B15C0FC9D007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C329C15C0FC9D007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C329D15C0FC9D007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C329E15C0FC9D007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C329F15C0FC9D007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C32A015C0FC9D007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C32A115C0FC9D007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C32A215C0FC9D007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C32A315C0FC9D007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C32A415C0FC9D007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C32A515C0FC9D007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C32A615C0FC9D007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C32A715C0FC9D007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C32A815C0FC9D007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C32A915C0FC9D007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C32AA15C0FC9D007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C32AB15C0FC9D007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C32AC15C0FC9D007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C32AD15C0FC9D007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C32AE15C0FC9D007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C32AF15C0FC9D007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C32B015C0FC9D007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C32B115C0FC9D007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C32B215C0FC9D007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C32B315C0FC9D007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C32B415C0FC9D007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C32B515C0FC9D007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C32B615C0FC9D007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C32B715C0FC9D007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C32B815C0FC9D007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C32B915C0FC9D007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C32BA15C0FC9D007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C32BB15C0FC9D007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C32BC15C0FC9D007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C32BD15C0FC9D007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C32BE15C0FC9D007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C32BF15C0FC9D007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C32C015C0FC9D007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C32C115C0FC9D007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C32C215C0FC9D007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C32C315C0FC9D007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C32C415C0FC9D007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C32C515C0FC9D007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C32C615C0FC9D007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C32C715C0FC9D007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C32C815C0FC9D007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2D8F321CEBA10300198014 /* jwxyz-timers.c in Sources */ = {isa = PBXBuildFile; fileRef = AF2D8F301CEBA10300198014 /* jwxyz-timers.c */; }; AF2D8F331CEBA10300198014 /* jwxyz-timers.h in Headers */ = {isa = PBXBuildFile; fileRef = AF2D8F311CEBA10300198014 /* jwxyz-timers.h */; }; AF32D9E70F3AD0B40080F535 /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF32D9FB0F3AD1200080F535 /* rubikblocks.c in Sources */ = {isa = PBXBuildFile; fileRef = AF32D9FA0F3AD1200080F535 /* rubikblocks.c */; }; AF32D9FD0F3AD1330080F535 /* rubikblocks.xml in Resources */ = {isa = PBXBuildFile; fileRef = AF32D9FC0F3AD1330080F535 /* rubikblocks.xml */; }; AF3581C31431D47B00E09C51 /* voronoi.xml in Resources */ = {isa = PBXBuildFile; fileRef = AF0DCA610C4CBB8E00D76972 /* voronoi.xml */; }; AF3581C61431D47B00E09C51 /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF3581DC1431D5FC00E09C51 /* companion_disc.c in Sources */ = {isa = PBXBuildFile; fileRef = AF3581D61431D5FC00E09C51 /* companion_disc.c */; }; AF3581DF1431D5FC00E09C51 /* companion_heart.c in Sources */ = {isa = PBXBuildFile; fileRef = AF3581D71431D5FC00E09C51 /* companion_heart.c */; }; AF3581E21431D5FC00E09C51 /* companion_quad.c in Sources */ = {isa = PBXBuildFile; fileRef = AF3581D81431D5FC00E09C51 /* companion_quad.c */; }; AF3581E51431D5FC00E09C51 /* companion.c in Sources */ = {isa = PBXBuildFile; fileRef = AF3581D91431D5FC00E09C51 /* companion.c */; }; AF3581E81431D61D00E09C51 /* companioncube.xml in Resources */ = {isa = PBXBuildFile; fileRef = AF3581E61431D61D00E09C51 /* companioncube.xml */; }; AF3581FF143330F900E09C51 /* voronoi.xml in Resources */ = {isa = PBXBuildFile; fileRef = AF0DCA610C4CBB8E00D76972 /* voronoi.xml */; }; AF358203143330F900E09C51 /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF35821C1433314C00E09C51 /* tronbit_idle1.c in Sources */ = {isa = PBXBuildFile; fileRef = AF3582171433314C00E09C51 /* tronbit_idle1.c */; }; AF35821D1433314C00E09C51 /* tronbit_idle2.c in Sources */ = {isa = PBXBuildFile; fileRef = AF3582181433314C00E09C51 /* tronbit_idle2.c */; }; AF35821E1433314C00E09C51 /* tronbit_no.c in Sources */ = {isa = PBXBuildFile; fileRef = AF3582191433314C00E09C51 /* tronbit_no.c */; }; AF35821F1433314C00E09C51 /* tronbit_yes.c in Sources */ = {isa = PBXBuildFile; fileRef = AF35821A1433314C00E09C51 /* tronbit_yes.c */; }; AF3582201433314C00E09C51 /* tronbit.c in Sources */ = {isa = PBXBuildFile; fileRef = AF35821B1433314C00E09C51 /* tronbit.c */; }; AF3582221433318500E09C51 /* tronbit.xml in Resources */ = {isa = PBXBuildFile; fileRef = AF3582211433318500E09C51 /* tronbit.xml */; }; 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 */; }; AF3633FC18530DD90086A439 /* sparkle_dsa_pub.pem in Resources */ = {isa = PBXBuildFile; fileRef = AF3633F918530DD90086A439 /* sparkle_dsa_pub.pem */; }; AF3633FD18530DD90086A439 /* Updater.m in Sources */ = {isa = PBXBuildFile; fileRef = AF3633FB18530DD90086A439 /* Updater.m */; }; AF3938211D0FBD6A00205406 /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF3938231D0FBD6A00205406 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF3938241D0FBD6A00205406 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF3938251D0FBD6A00205406 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF3938261D0FBD6A00205406 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF3938271D0FBD6A00205406 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF3938281D0FBD6A00205406 /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; AF3938291D0FBD6A00205406 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF3938331D0FBF0100205406 /* discoball.xml in Resources */ = {isa = PBXBuildFile; fileRef = AF3938321D0FBEC800205406 /* discoball.xml */; }; AF3938341D0FBF1900205406 /* discoball.c in Sources */ = {isa = PBXBuildFile; fileRef = AF3938311D0FBEC800205406 /* discoball.c */; }; AF3938351D0FBF1D00205406 /* discoball.c in Sources */ = {isa = PBXBuildFile; fileRef = AF3938311D0FBEC800205406 /* discoball.c */; settings = {COMPILER_FLAGS = "-DUSE_GL"; }; }; AF3938361D0FBF2700205406 /* discoball.xml in Resources */ = {isa = PBXBuildFile; fileRef = AF3938321D0FBEC800205406 /* discoball.xml */; }; 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 */; }; AF39E289198A11F60064A58D /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF39E28B198A11F60064A58D /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF39E28C198A11F60064A58D /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF39E28D198A11F60064A58D /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF39E28E198A11F60064A58D /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF39E28F198A11F60064A58D /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF39E290198A11F60064A58D /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF39E2AA198A13F50064A58D /* robot-wireframe.c in Sources */ = {isa = PBXBuildFile; fileRef = AF39E2A0198A13F50064A58D /* robot-wireframe.c */; }; AF39E2AB198A13F50064A58D /* winduprobot.c in Sources */ = {isa = PBXBuildFile; fileRef = AF39E2A1198A13F50064A58D /* winduprobot.c */; }; AF39E2AD198A15820064A58D /* winduprobot.xml in Resources */ = {isa = PBXBuildFile; fileRef = AF39E2AC198A15820064A58D /* winduprobot.xml */; }; AF39E2AE198A15820064A58D /* winduprobot.xml in Resources */ = {isa = PBXBuildFile; fileRef = AF39E2AC198A15820064A58D /* winduprobot.xml */; }; AF39E2B7198A15EE0064A58D /* robot-wireframe.c in Sources */ = {isa = PBXBuildFile; fileRef = AF39E2A0198A13F50064A58D /* robot-wireframe.c */; settings = {COMPILER_FLAGS = "-DUSE_GL"; }; }; AF39E2B8198A15EE0064A58D /* winduprobot.c in Sources */ = {isa = PBXBuildFile; fileRef = AF39E2A1198A13F50064A58D /* winduprobot.c */; settings = {COMPILER_FLAGS = "-DUSE_GL"; }; }; 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 */; }; AF46E9D61CBBA2B300240FBC /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF46E9D81CBBA2B300240FBC /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF46E9D91CBBA2B300240FBC /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF46E9DA1CBBA2B300240FBC /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF46E9DB1CBBA2B300240FBC /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF46E9DC1CBBA2B300240FBC /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF46E9DD1CBBA2B300240FBC /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; AF46E9DE1CBBA2B300240FBC /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF46E9E81CBBA41600240FBC /* unicrud.xml in Resources */ = {isa = PBXBuildFile; fileRef = AF46E9E61CBBA3F900240FBC /* unicrud.xml */; }; AF46E9E91CBBA41B00240FBC /* unicrud.c in Sources */ = {isa = PBXBuildFile; fileRef = AF46E9E71CBBA3F900240FBC /* unicrud.c */; }; AF46E9EA1CBBA42F00240FBC /* unicrud.xml in Resources */ = {isa = PBXBuildFile; fileRef = AF46E9E61CBBA3F900240FBC /* unicrud.xml */; }; AF46E9EB1CBBA43B00240FBC /* unicrud.c in Sources */ = {isa = PBXBuildFile; fileRef = AF46E9E71CBBA3F900240FBC /* unicrud.c */; settings = {COMPILER_FLAGS = "-DUSE_GL"; }; }; AF476FBC099D154F001F091E /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF476FCF099D1587001F091E /* interference.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258CC0988A468000655EE /* interference.xml */; }; AF476FD1099D15AA001F091E /* interference.c in Sources */ = {isa = PBXBuildFile; fileRef = AF476FD0099D15AA001F091E /* interference.c */; }; AF476FE1099D1686001F091E /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF476FEF099D16E4001F091E /* truchet.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC259260988A469000655EE /* truchet.xml */; }; AF476FF1099D1713001F091E /* truchet.c in Sources */ = {isa = PBXBuildFile; fileRef = AF476FF0099D1713001F091E /* truchet.c */; }; AF477052099D4385001F091E /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF47705E099D43B7001F091E /* deluxe.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258950988A468000655EE /* deluxe.xml */; }; AF477146099D43E2001F091E /* deluxe.c in Sources */ = {isa = PBXBuildFile; fileRef = AF477145099D43E2001F091E /* deluxe.c */; }; AF47716F099D4786001F091E /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF47717B099D47B7001F091E /* compass.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258880988A468000655EE /* compass.xml */; }; AF47717D099D47D3001F091E /* compass.c in Sources */ = {isa = PBXBuildFile; fileRef = AF47717C099D47D3001F091E /* compass.c */; }; AF477185099D4803001F091E /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF477191099D4846001F091E /* wander.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC2592B0988A469000655EE /* wander.xml */; }; AF477193099D4864001F091E /* wander.c in Sources */ = {isa = PBXBuildFile; fileRef = AF477192099D4864001F091E /* wander.c */; }; AF4771AD099D4949001F091E /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF4771B9099D4981001F091E /* t3d.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC259210988A469000655EE /* t3d.xml */; }; AF4771BB099D4997001F091E /* t3d.c in Sources */ = {isa = PBXBuildFile; fileRef = AF4771BA099D4997001F091E /* t3d.c */; }; AF4771E1099D4D9A001F091E /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF4771EE099D4DE5001F091E /* ccurve.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258840988A468000655EE /* ccurve.xml */; }; AF4771F0099D4DFE001F091E /* ccurve.c in Sources */ = {isa = PBXBuildFile; fileRef = AF4771EF099D4DFE001F091E /* ccurve.c */; }; AF4771F8099D4E63001F091E /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF477204099D4EA2001F091E /* nerverot.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258EB0988A469000655EE /* nerverot.xml */; }; AF477206099D4EB6001F091E /* nerverot.c in Sources */ = {isa = PBXBuildFile; fileRef = AF477205099D4EB6001F091E /* nerverot.c */; }; AF47720E099D4EE8001F091E /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF47721A099D4F27001F091E /* whirlygig.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC2592F0988A469000655EE /* whirlygig.xml */; }; AF47721C099D4F47001F091E /* whirlygig.c in Sources */ = {isa = PBXBuildFile; fileRef = AF47721B099D4F47001F091E /* whirlygig.c */; }; AF477224099D4F67001F091E /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF477230099D4FBD001F091E /* anemone.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258680988A468000655EE /* anemone.xml */; }; AF477232099D4FD5001F091E /* anemone.c in Sources */ = {isa = PBXBuildFile; fileRef = AF477231099D4FD5001F091E /* anemone.c */; }; AF477259099D5717001F091E /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF477265099D5752001F091E /* halftone.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258C20988A468000655EE /* halftone.xml */; }; AF477267099D5768001F091E /* halftone.c in Sources */ = {isa = PBXBuildFile; fileRef = AF477266099D5768001F091E /* halftone.c */; }; AF477271099D57B9001F091E /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF47727D099D57F5001F091E /* popsquares.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258FB0988A469000655EE /* popsquares.xml */; }; AF47727F099D5808001F091E /* popsquares.c in Sources */ = {isa = PBXBuildFile; fileRef = AF47727E099D5808001F091E /* popsquares.c */; }; AF477289099D5926001F091E /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF477296099D596A001F091E /* piecewise.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258F40988A469000655EE /* piecewise.xml */; }; AF477298099D5980001F091E /* piecewise.c in Sources */ = {isa = PBXBuildFile; fileRef = AF477297099D5980001F091E /* piecewise.c */; }; AF477388099D65A1001F091E /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF477394099D65EB001F091E /* wormhole.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC259310988A469000655EE /* wormhole.xml */; }; AF477396099D65FE001F091E /* wormhole.c in Sources */ = {isa = PBXBuildFile; fileRef = AF477395099D65FE001F091E /* wormhole.c */; }; AF4773A0099D6648001F091E /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF4773AC099D6762001F091E /* fuzzyflakes.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258B00988A468000655EE /* fuzzyflakes.xml */; }; AF4773B5099D6778001F091E /* fuzzyflakes.c in Sources */ = {isa = PBXBuildFile; fileRef = AF4773B4099D6778001F091E /* fuzzyflakes.c */; }; AF4773C7099D67B9001F091E /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF4773D3099D6804001F091E /* anemotaxis.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258690988A468000655EE /* anemotaxis.xml */; }; AF4773D5099D6817001F091E /* anemotaxis.c in Sources */ = {isa = PBXBuildFile; fileRef = AF4773D4099D6817001F091E /* anemotaxis.c */; }; AF477408099D69E7001F091E /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF47741B099D6A58001F091E /* intermomentary.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258CD0988A468000655EE /* intermomentary.xml */; }; AF47741D099D6A6D001F091E /* intermomentary.c in Sources */ = {isa = PBXBuildFile; fileRef = AF47741C099D6A6C001F091E /* intermomentary.c */; }; AF47742D099D7C70001F091E /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF477439099D7CD0001F091E /* ifs.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258C90988A468000655EE /* ifs.xml */; }; AF47743B099D7CEA001F091E /* ifs.c in Sources */ = {isa = PBXBuildFile; fileRef = AF47743A099D7CEA001F091E /* ifs.c */; }; AF477448099D7D33001F091E /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF477454099D7D75001F091E /* xmatrix.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC2593A0988A469000655EE /* xmatrix.xml */; }; AF477456099D7D8A001F091E /* xmatrix.c in Sources */ = {isa = PBXBuildFile; fileRef = AF477455099D7D8A001F091E /* xmatrix.c */; }; AF477489099D89E4001F091E /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF477495099D8A3A001F091E /* flame.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258A60988A468000655EE /* flame.xml */; }; AF477497099D8A53001F091E /* flame.c in Sources */ = {isa = PBXBuildFile; fileRef = AF477496099D8A53001F091E /* flame.c */; }; AF47749F099D8A74001F091E /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF4774AB099D8AF3001F091E /* kaleidescope.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258D30988A468000655EE /* kaleidescope.xml */; }; AF4774AD099D8B08001F091E /* kaleidescope.c in Sources */ = {isa = PBXBuildFile; fileRef = AF4774AC099D8B08001F091E /* kaleidescope.c */; }; AF4774BA099D8B5F001F091E /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF4774CA099D8BAE001F091E /* lmorph.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258DC0988A468000655EE /* lmorph.xml */; }; AF4774CC099D8BC2001F091E /* lmorph.c in Sources */ = {isa = PBXBuildFile; fileRef = AF4774CB099D8BC2001F091E /* lmorph.c */; }; AF4774D4099D8BFF001F091E /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF4774E0099D8C74001F091E /* maze.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258DE0988A468000655EE /* maze.xml */; }; AF4774E2099D8C8B001F091E /* maze.c in Sources */ = {isa = PBXBuildFile; fileRef = AF4774E1099D8C8B001F091E /* maze.c */; }; AF4774E8099D8D8C001F091E /* logo.c in Sources */ = {isa = PBXBuildFile; fileRef = AF4774E7099D8D8C001F091E /* logo.c */; }; AF477563099D9A1A001F091E /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF47756F099D9A70001F091E /* pedal.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258EF0988A469000655EE /* pedal.xml */; }; AF477571099D9A8A001F091E /* pedal.c in Sources */ = {isa = PBXBuildFile; fileRef = AF477570099D9A8A001F091E /* pedal.c */; }; AF477589099D9C28001F091E /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF47759B099D9C8D001F091E /* pyro.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258FE0988A469000655EE /* pyro.xml */; }; AF47759D099D9CA3001F091E /* pyro.c in Sources */ = {isa = PBXBuildFile; fileRef = AF47759C099D9CA3001F091E /* pyro.c */; }; AF4775A5099D9CF7001F091E /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF4775B1099D9D51001F091E /* starfish.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC2591A0988A469000655EE /* starfish.xml */; }; AF4775B4099D9D67001F091E /* starfish.c in Sources */ = {isa = PBXBuildFile; fileRef = AF4775B3099D9D67001F091E /* starfish.c */; }; AF4775C0099D9E79001F091E /* resources.c in Sources */ = {isa = PBXBuildFile; fileRef = AF4775BE099D9E79001F091E /* resources.c */; }; AF4775C1099D9E79001F091E /* resources.h in Headers */ = {isa = PBXBuildFile; fileRef = AF4775BF099D9E79001F091E /* resources.h */; }; AF4775DE099D9F69001F091E /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF4775EC099D9FDB001F091E /* coral.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258890988A468000655EE /* coral.xml */; }; AF4775F0099D9FFF001F091E /* coral.c in Sources */ = {isa = PBXBuildFile; fileRef = AF4775EF099D9FFF001F091E /* coral.c */; }; AF4775F8099DA030001F091E /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF477604099DA083001F091E /* epicycle.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC2589D0988A468000655EE /* epicycle.xml */; }; AF477606099DA097001F091E /* epicycle.c in Sources */ = {isa = PBXBuildFile; fileRef = AF477605099DA097001F091E /* epicycle.c */; }; AF477619099DA26C001F091E /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF477629099DA2D2001F091E /* kumppa.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258D50988A468000655EE /* kumppa.xml */; }; AF47762B099DA2E9001F091E /* kumppa.c in Sources */ = {isa = PBXBuildFile; fileRef = AF47762A099DA2E9001F091E /* kumppa.c */; }; AF47764A099DA6D0001F091E /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF477656099DA738001F091E /* squiral.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC259170988A469000655EE /* squiral.xml */; }; AF477658099DA75D001F091E /* squiral.c in Sources */ = {isa = PBXBuildFile; fileRef = AF477657099DA75D001F091E /* squiral.c */; }; AF477660099DA78E001F091E /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF47766C099DA7F3001F091E /* critical.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC2588C0988A468000655EE /* critical.xml */; }; AF47766E099DA80D001F091E /* critical.c in Sources */ = {isa = PBXBuildFile; fileRef = AF47766D099DA80D001F091E /* critical.c */; }; AF477676099DA849001F091E /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF477682099DA8AC001F091E /* petri.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258F20988A469000655EE /* petri.xml */; }; AF477684099DA8C7001F091E /* petri.c in Sources */ = {isa = PBXBuildFile; fileRef = AF477683099DA8C7001F091E /* petri.c */; }; AF477695099DAA6F001F091E /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF4776A1099DAAC9001F091E /* blaster.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258740988A468000655EE /* blaster.xml */; }; AF4776A3099DAADE001F091E /* blaster.c in Sources */ = {isa = PBXBuildFile; fileRef = AF4776A2099DAADE001F091E /* blaster.c */; }; AF4776B0099DABDD001F091E /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF4776BC099DAC29001F091E /* xspirograph.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC2593F0988A469000655EE /* xspirograph.xml */; }; AF4776BE099DAC46001F091E /* xspirograph.c in Sources */ = {isa = PBXBuildFile; fileRef = AF4776BD099DAC46001F091E /* xspirograph.c */; }; AF4776C6099DAC8A001F091E /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF4776D2099DACD6001F091E /* xrayswarm.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC2593D0988A469000655EE /* xrayswarm.xml */; }; AF4776D4099DACEB001F091E /* xrayswarm.c in Sources */ = {isa = PBXBuildFile; fileRef = AF4776D3099DACEB001F091E /* xrayswarm.c */; }; AF4776E1099DADDF001F091E /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF4776ED099DAE38001F091E /* whirlwindwarp.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC2592D0988A469000655EE /* whirlwindwarp.xml */; }; AF4776EF099DAE58001F091E /* whirlwindwarp.c in Sources */ = {isa = PBXBuildFile; fileRef = AF4776EE099DAE58001F091E /* whirlwindwarp.c */; }; AF4776F7099DAE7A001F091E /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF477703099DAF24001F091E /* vermiculate.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC259280988A469000655EE /* vermiculate.xml */; }; AF477705099DAF3F001F091E /* vermiculate.c in Sources */ = {isa = PBXBuildFile; fileRef = AF477704099DAF3F001F091E /* vermiculate.c */; }; AF477713099DAF9F001F091E /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF47771F099DB000001F091E /* cloudlife.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258870988A468000655EE /* cloudlife.xml */; }; AF477721099DB01C001F091E /* cloudlife.c in Sources */ = {isa = PBXBuildFile; fileRef = AF477720099DB01C001F091E /* cloudlife.c */; }; AF477729099DB044001F091E /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF477735099DB0ED001F091E /* substrate.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC2591E0988A469000655EE /* substrate.xml */; }; AF477737099DB104001F091E /* substrate.c in Sources */ = {isa = PBXBuildFile; fileRef = AF477736099DB104001F091E /* substrate.c */; }; AF477758099DB61E001F091E /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF477768099DB6FD001F091E /* interaggregate.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258CB0988A468000655EE /* interaggregate.xml */; }; AF47776A099DB710001F091E /* interaggregate.c in Sources */ = {isa = PBXBuildFile; fileRef = AF477769099DB710001F091E /* interaggregate.c */; }; AF47777A099DB965001F091E /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF477786099DBA11001F091E /* celtic.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258850988A468000655EE /* celtic.xml */; }; AF477788099DBA29001F091E /* celtic.c in Sources */ = {isa = PBXBuildFile; fileRef = AF477787099DBA29001F091E /* celtic.c */; }; AF477796099DBA90001F091E /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF4777A3099DBAF8001F091E /* fluidballs.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258AB0988A468000655EE /* fluidballs.xml */; }; AF4777A5099DBB12001F091E /* fluidballs.c in Sources */ = {isa = PBXBuildFile; fileRef = AF4777A4099DBB11001F091E /* fluidballs.c */; }; AF4777D7099DC183001F091E /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF4778A2099DDA76001F091E /* boxfit.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC2587C0988A468000655EE /* boxfit.xml */; }; AF4778A4099DDA91001F091E /* boxfit.c in Sources */ = {isa = PBXBuildFile; fileRef = AF4778A3099DDA91001F091E /* boxfit.c */; }; AF4778B1099DDB79001F091E /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF4778BD099DDC1B001F091E /* penetrate.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258F00988A469000655EE /* penetrate.xml */; }; AF4778BF099DDC33001F091E /* penetrate.c in Sources */ = {isa = PBXBuildFile; fileRef = AF4778BE099DDC32001F091E /* penetrate.c */; }; AF4778CD099DDCAE001F091E /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF4778D9099DDD14001F091E /* xjack.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC259380988A469000655EE /* xjack.xml */; }; AF4778DB099DDD2B001F091E /* xjack.c in Sources */ = {isa = PBXBuildFile; fileRef = AF4778DA099DDD2B001F091E /* xjack.c */; }; AF4778EE099DDDC8001F091E /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF4778FA099DDE5F001F091E /* cynosure.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258910988A468000655EE /* cynosure.xml */; }; AF4778FC099DDE79001F091E /* cynosure.c in Sources */ = {isa = PBXBuildFile; fileRef = AF4778FB099DDE79001F091E /* cynosure.c */; }; AF47790F099DE379001F091E /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF47791B099DE3D9001F091E /* flag.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258A50988A468000655EE /* flag.xml */; }; AF47791D099DE3F1001F091E /* flag.c in Sources */ = {isa = PBXBuildFile; fileRef = AF47791C099DE3F1001F091E /* flag.c */; }; AF477930099DE4C7001F091E /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF47793C099DE535001F091E /* slip.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC2590E0988A469000655EE /* slip.xml */; }; AF47793E099DE56A001F091E /* slip.c in Sources */ = {isa = PBXBuildFile; fileRef = AF47793D099DE56A001F091E /* slip.c */; }; AF4808C5098C3BDC00FB32B8 /* colors.c in Sources */ = {isa = PBXBuildFile; fileRef = AFC25B990988BC08000655EE /* colors.c */; }; AF4808C6098C3BDF00FB32B8 /* erase.c in Sources */ = {isa = PBXBuildFile; fileRef = AFE1FD530981E3CB00F7970E /* erase.c */; }; AF4808C7098C3BE600FB32B8 /* hsv.c in Sources */ = {isa = PBXBuildFile; fileRef = AFE1FD550981E3CB00F7970E /* hsv.c */; }; AF4808C8098C3BE800FB32B8 /* InvertedSlider.m in Sources */ = {isa = PBXBuildFile; fileRef = AFE1FD420981E32E00F7970E /* InvertedSlider.m */; }; AF4808C9098C3BEC00FB32B8 /* jwxyz.m in Sources */ = {isa = PBXBuildFile; fileRef = AFE1FD440981E32E00F7970E /* jwxyz.m */; }; AF4808CA098C3BEE00FB32B8 /* PrefsReader.m in Sources */ = {isa = PBXBuildFile; fileRef = AFE1FD480981E32E00F7970E /* PrefsReader.m */; }; AF4808CC098C3BF200FB32B8 /* spline.c in Sources */ = {isa = PBXBuildFile; fileRef = AFE1FD570981E3CB00F7970E /* spline.c */; }; AF4808CD098C3BF400FB32B8 /* usleep.c in Sources */ = {isa = PBXBuildFile; fileRef = AFB5A0ED0981FF8B00871B16 /* usleep.c */; }; AF4808CE098C3BF800FB32B8 /* XScreenSaverConfigSheet.m in Sources */ = {isa = PBXBuildFile; fileRef = AFC2578009888F5A000655EE /* XScreenSaverConfigSheet.m */; }; AF4808CF098C3BFB00FB32B8 /* XScreenSaverView.m in Sources */ = {isa = PBXBuildFile; fileRef = AFC254C509882C97000655EE /* XScreenSaverView.m */; }; AF4808D0098C3BFD00FB32B8 /* yarandom.c in Sources */ = {isa = PBXBuildFile; fileRef = AFE1FD5B0981E3CB00F7970E /* yarandom.c */; }; AF480C5C098E305900FB32B8 /* helix.c in Sources */ = {isa = PBXBuildFile; fileRef = AF480C2F098E2A6700FB32B8 /* helix.c */; }; AF480C69098E309E00FB32B8 /* helix.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258C40988A468000655EE /* helix.xml */; }; AF480D85098EEE3100FB32B8 /* drift.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258990988A468000655EE /* drift.xml */; }; AF480D88098EEE5B00FB32B8 /* drift.c in Sources */ = {isa = PBXBuildFile; fileRef = AF480C82098E336D00FB32B8 /* drift.c */; }; AF480FCC09901DF900FB32B8 /* gltrackball.c in Sources */ = {isa = PBXBuildFile; fileRef = AF480EB0098F63D600FB32B8 /* gltrackball.c */; }; AF480FCD09901E0000FB32B8 /* rotator.c in Sources */ = {isa = PBXBuildFile; fileRef = AF480EB7098F646400FB32B8 /* rotator.c */; }; AF480FCE09901E0400FB32B8 /* sphere.c in Sources */ = {isa = PBXBuildFile; fileRef = AF480EBB098F649600FB32B8 /* sphere.c */; }; AF480FCF09901E0700FB32B8 /* trackball.c in Sources */ = {isa = PBXBuildFile; fileRef = AF480EAD098F63BE00FB32B8 /* trackball.c */; }; AF480FD009901E0A00FB32B8 /* tube.c in Sources */ = {isa = PBXBuildFile; fileRef = AF480ED2098F652A00FB32B8 /* tube.c */; }; AF4811030990A02700FB32B8 /* dangerball.c in Sources */ = {isa = PBXBuildFile; fileRef = AF480DD1098F4F6200FB32B8 /* dangerball.c */; }; AF4811440990A35B00FB32B8 /* dangerball.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258920988A468000655EE /* dangerball.xml */; }; AF4812580990CE2700FB32B8 /* gears.c in Sources */ = {isa = PBXBuildFile; fileRef = AF4812250990CB8C00FB32B8 /* gears.c */; }; AF48126D0990CE8600FB32B8 /* gears.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258B20988A468000655EE /* gears.xml */; }; AF4812C80990D41700FB32B8 /* pipes.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258F60988A469000655EE /* pipes.xml */; }; AF4812C90990D41E00FB32B8 /* buildlwo.c in Sources */ = {isa = PBXBuildFile; fileRef = AF4812760990CF5D00FB32B8 /* buildlwo.c */; }; AF4812CA0990D42000FB32B8 /* pipeobjs.c in Sources */ = {isa = PBXBuildFile; fileRef = AF4812780990CF5D00FB32B8 /* pipeobjs.c */; }; AF4812CB0990D42100FB32B8 /* pipes.c in Sources */ = {isa = PBXBuildFile; fileRef = AF4812790990CF5D00FB32B8 /* pipes.c */; }; AF4812FA0990D9AE00FB32B8 /* XScreenSaverGLView.m in Sources */ = {isa = PBXBuildFile; fileRef = AF4812F80990D9AE00FB32B8 /* XScreenSaverGLView.m */; }; AF48DEF60A0C25E000F94CF9 /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF48E1680A0C268500F94CF9 /* glschool_alg.c in Sources */ = {isa = PBXBuildFile; fileRef = AF48E1620A0C268400F94CF9 /* glschool_alg.c */; }; AF48E1690A0C268500F94CF9 /* glschool_gl.c in Sources */ = {isa = PBXBuildFile; fileRef = AF48E1640A0C268500F94CF9 /* glschool_gl.c */; }; AF48E16A0A0C268500F94CF9 /* glschool.c in Sources */ = {isa = PBXBuildFile; fileRef = AF48E1660A0C268500F94CF9 /* glschool.c */; }; AF48E16C0A0C26A400F94CF9 /* glschool.xml in Resources */ = {isa = PBXBuildFile; fileRef = AF48E16B0A0C26A400F94CF9 /* glschool.xml */; }; AF4A3450102A593600A81B2A /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF4A3462102A59EB00A81B2A /* surfaces.xml in Resources */ = {isa = PBXBuildFile; fileRef = AF4A3461102A59EB00A81B2A /* surfaces.xml */; }; AF4A3464102A5A0E00A81B2A /* surfaces.c in Sources */ = {isa = PBXBuildFile; fileRef = AF4A3463102A5A0E00A81B2A /* surfaces.c */; }; AF4A6692191F7CAE00C74753 /* xscreensaver-getimage-file in Resources */ = {isa = PBXBuildFile; fileRef = AF0FAF1209CA712600EE1051 /* xscreensaver-getimage-file */; }; AF4A8CA010B609B50074B062 /* xscreensaver-getimage-file in Resources */ = {isa = PBXBuildFile; fileRef = AF0FAF1209CA712600EE1051 /* xscreensaver-getimage-file */; }; AF4FD6EC0CE7A486005EE58E /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF4FD7010CE7A577005EE58E /* lockward.c in Sources */ = {isa = PBXBuildFile; fileRef = AF4FD7000CE7A577005EE58E /* lockward.c */; }; AF4FD7030CE7A5BC005EE58E /* lockward.xml in Resources */ = {isa = PBXBuildFile; fileRef = AF4FD7020CE7A5BC005EE58E /* lockward.xml */; }; AF4FF4C10D52CBDE00666F98 /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF4FF4D10D52CC8400666F98 /* cubicgrid.c in Sources */ = {isa = PBXBuildFile; fileRef = AF4FF4D00D52CC8400666F98 /* cubicgrid.c */; }; AF4FF4D40D52CCAA00666F98 /* cubicgrid.xml in Resources */ = {isa = PBXBuildFile; fileRef = AF4FF4D30D52CCAA00666F98 /* cubicgrid.xml */; }; AF51FD3915845FCB00E5741F /* SaverRunner.icns in Resources */ = {isa = PBXBuildFile; fileRef = AF2D522513E954A0002AA818 /* SaverRunner.icns */; }; AF561DF615969BC3007CA5ED /* grabclient-ios.m in Sources */ = {isa = PBXBuildFile; fileRef = AF561DF515969BC3007CA5ED /* grabclient-ios.m */; }; AF561DF815969C5B007CA5ED /* AssetsLibrary.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF561DF715969C5B007CA5ED /* AssetsLibrary.framework */; }; AF5BEEFD1D2AFE21002E6D51 /* OCRAStd.otf in Resources */ = {isa = PBXBuildFile; fileRef = AFEC68361BD6CA85004C1B64 /* OCRAStd.otf */; }; AF5C9AFD1A0CCE6E00B0147A /* dangerball.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258920988A468000655EE /* dangerball.xml */; }; AF5C9B001A0CCE6E00B0147A /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF5C9B021A0CCE6E00B0147A /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF5C9B031A0CCE6E00B0147A /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF5C9B041A0CCE6E00B0147A /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF5C9B051A0CCE6E00B0147A /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF5C9B061A0CCE6E00B0147A /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF5C9B071A0CCE6E00B0147A /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF5C9B111A0CCF4E00B0147A /* cityflow.xml in Resources */ = {isa = PBXBuildFile; fileRef = AF5C9B0F1A0CCF4E00B0147A /* cityflow.xml */; }; AF5C9B121A0CCF4E00B0147A /* cityflow.xml in Resources */ = {isa = PBXBuildFile; fileRef = AF5C9B0F1A0CCF4E00B0147A /* cityflow.xml */; }; AF5C9B131A0CCF4E00B0147A /* cityflow.c in Sources */ = {isa = PBXBuildFile; fileRef = AF5C9B101A0CCF4E00B0147A /* cityflow.c */; }; AF5C9B141A0CCF4E00B0147A /* cityflow.c in Sources */ = {isa = PBXBuildFile; fileRef = AF5C9B101A0CCF4E00B0147A /* cityflow.c */; settings = {COMPILER_FLAGS = "-DUSE_GL"; }; }; 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 */; }; AF63A7F81AB4EDDB00593C75 /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF63A7FA1AB4EDDB00593C75 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF63A7FB1AB4EDDB00593C75 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF63A7FC1AB4EDDB00593C75 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF63A7FD1AB4EDDB00593C75 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF63A7FE1AB4EDDB00593C75 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF63A7FF1AB4EDDB00593C75 /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; AF63A8001AB4EDDB00593C75 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF63A80A1AB4EF5D00593C75 /* romanboy.xml in Resources */ = {isa = PBXBuildFile; fileRef = AF63A8081AB4EF5D00593C75 /* romanboy.xml */; }; AF63A80B1AB4EF5D00593C75 /* romanboy.xml in Resources */ = {isa = PBXBuildFile; fileRef = AF63A8081AB4EF5D00593C75 /* romanboy.xml */; }; AF63A80C1AB4EF5D00593C75 /* romanboy.c in Sources */ = {isa = PBXBuildFile; fileRef = AF63A8091AB4EF5D00593C75 /* romanboy.c */; }; AF63A80D1AB4EF5D00593C75 /* romanboy.c in Sources */ = {isa = PBXBuildFile; fileRef = AF63A8091AB4EF5D00593C75 /* romanboy.c */; settings = {COMPILER_FLAGS = "-DUSE_GL"; }; }; AF63F2511C3465BE0033E133 /* iSaverRunner.xib in Resources */ = {isa = PBXBuildFile; fileRef = AF56019B157DAA3D00DB2055 /* iSaverRunner.xib */; }; AF63F2521C3465BE0033E133 /* LaunchScreen.xib in Resources */ = {isa = PBXBuildFile; fileRef = 55EDCB3C1AD498A800251909 /* LaunchScreen.xib */; }; AF63F2531C3465BE0033E133 /* iSaverRunner57t.png in Resources */ = {isa = PBXBuildFile; fileRef = AF73FF201A08AB9400E485E9 /* iSaverRunner57t.png */; }; AF63F25D1C3465BE0033E133 /* apple2.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC2586F0988A468000655EE /* apple2.xml */; }; AF63F2B71C3465BE0033E133 /* Media-iOS.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 550FB5FD1AD64424001A4FA5 /* Media-iOS.xcassets */; }; AF63F3281C3465BE0033E133 /* SaverRunner.m in Sources */ = {isa = PBXBuildFile; fileRef = AFE1FD400981E32E00F7970E /* SaverRunner.m */; }; AF63F3291C3465BE0033E133 /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 29B97316FDCFA39411CA2CEA /* main.m */; }; AF63F32A1C3465BE0033E133 /* SaverListController.m in Sources */ = {isa = PBXBuildFile; fileRef = AF84AF1E15829AF000607E4C /* SaverListController.m */; }; AF63F32D1C3465BE0033E133 /* analogtv.c in Sources */ = {isa = PBXBuildFile; fileRef = AF9D4CFA09B5AC94006E59CF /* analogtv.c */; }; AF63F32F1C3465BE0033E133 /* apple2-main.c in Sources */ = {isa = PBXBuildFile; fileRef = AF9D4E0509B5BC9D006E59CF /* apple2-main.c */; }; AF63F3301C3465BE0033E133 /* apple2.c in Sources */ = {isa = PBXBuildFile; fileRef = AF9D4DD309B5B990006E59CF /* apple2.c */; }; AF63F43F1C3465BE0033E133 /* ios-function-table.m in Sources */ = {isa = PBXBuildFile; fileRef = AFAA6B441773F07700DE720C /* ios-function-table.m */; }; AF63F4411C3465BE0033E133 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF63F4421C3465BE0033E133 /* OpenGLES.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AFEB9C3A1590054B003974F3 /* OpenGLES.framework */; }; AF63F4431C3465BE0033E133 /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AFEB9C3815900514003974F3 /* UIKit.framework */; }; AF63F4441C3465BE0033E133 /* AssetsLibrary.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF561DF715969C5B007CA5ED /* AssetsLibrary.framework */; }; AF63F4451C3465BE0033E133 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AFEB9C3C15900558003974F3 /* Foundation.framework */; }; AF63F4461C3465BE0033E133 /* CoreGraphics.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AFEB9C3E1590056A003974F3 /* CoreGraphics.framework */; }; AF63F4471C3465BE0033E133 /* CoreText.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF0FAF3B159BAC7B00BCE2F7 /* CoreText.framework */; }; AF63F4481C3465BE0033E133 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AFEB9C3F1590056A003974F3 /* QuartzCore.framework */; }; AF63F4491C3465BE0033E133 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78377C17DBA85D003B9FC0 /* libz.dylib */; }; AF63F4591C34682A0033E133 /* iSaverRunner.xib in Resources */ = {isa = PBXBuildFile; fileRef = AF56019B157DAA3D00DB2055 /* iSaverRunner.xib */; }; AF63F45A1C34682A0033E133 /* LaunchScreen.xib in Resources */ = {isa = PBXBuildFile; fileRef = 55EDCB3C1AD498A800251909 /* LaunchScreen.xib */; }; AF63F45B1C34682A0033E133 /* iSaverRunner57t.png in Resources */ = {isa = PBXBuildFile; fileRef = AF73FF201A08AB9400E485E9 /* iSaverRunner57t.png */; }; AF63F45D1C34682A0033E133 /* Media-iOS.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 550FB5FD1AD64424001A4FA5 /* Media-iOS.xcassets */; }; AF63F45F1C34682A0033E133 /* SaverRunner.m in Sources */ = {isa = PBXBuildFile; fileRef = AFE1FD400981E32E00F7970E /* SaverRunner.m */; }; AF63F4601C34682A0033E133 /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 29B97316FDCFA39411CA2CEA /* main.m */; }; AF63F4611C34682A0033E133 /* SaverListController.m in Sources */ = {isa = PBXBuildFile; fileRef = AF84AF1E15829AF000607E4C /* SaverListController.m */; }; AF63F4651C34682A0033E133 /* ios-function-table.m in Sources */ = {isa = PBXBuildFile; fileRef = AFAA6B441773F07700DE720C /* ios-function-table.m */; }; AF63F4671C34682A0033E133 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF63F4681C34682A0033E133 /* OpenGLES.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AFEB9C3A1590054B003974F3 /* OpenGLES.framework */; }; AF63F4691C34682A0033E133 /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AFEB9C3815900514003974F3 /* UIKit.framework */; }; AF63F46A1C34682A0033E133 /* AssetsLibrary.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF561DF715969C5B007CA5ED /* AssetsLibrary.framework */; }; AF63F46B1C34682A0033E133 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AFEB9C3C15900558003974F3 /* Foundation.framework */; }; AF63F46C1C34682A0033E133 /* CoreGraphics.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AFEB9C3E1590056A003974F3 /* CoreGraphics.framework */; }; AF63F46D1C34682A0033E133 /* CoreText.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF0FAF3B159BAC7B00BCE2F7 /* CoreText.framework */; }; AF63F46E1C34682A0033E133 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AFEB9C3F1590056A003974F3 /* QuartzCore.framework */; }; AF63F46F1C34682A0033E133 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78377C17DBA85D003B9FC0 /* libz.dylib */; }; AF63F4761C3469410033E133 /* phosphor.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258F30988A469000655EE /* phosphor.xml */; }; AF63F4771C3469570033E133 /* phosphor.c in Sources */ = {isa = PBXBuildFile; fileRef = AF77770309B63B5F00EA3033 /* phosphor.c */; }; AF63F4811C3469FC0033E133 /* iSaverRunner.xib in Resources */ = {isa = PBXBuildFile; fileRef = AF56019B157DAA3D00DB2055 /* iSaverRunner.xib */; }; AF63F4821C3469FC0033E133 /* LaunchScreen.xib in Resources */ = {isa = PBXBuildFile; fileRef = 55EDCB3C1AD498A800251909 /* LaunchScreen.xib */; }; AF63F4831C3469FC0033E133 /* iSaverRunner57t.png in Resources */ = {isa = PBXBuildFile; fileRef = AF73FF201A08AB9400E485E9 /* iSaverRunner57t.png */; }; AF63F4851C3469FC0033E133 /* Media-iOS.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 550FB5FD1AD64424001A4FA5 /* Media-iOS.xcassets */; }; AF63F4871C3469FC0033E133 /* SaverRunner.m in Sources */ = {isa = PBXBuildFile; fileRef = AFE1FD400981E32E00F7970E /* SaverRunner.m */; }; AF63F4881C3469FC0033E133 /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 29B97316FDCFA39411CA2CEA /* main.m */; }; AF63F4891C3469FC0033E133 /* SaverListController.m in Sources */ = {isa = PBXBuildFile; fileRef = AF84AF1E15829AF000607E4C /* SaverListController.m */; }; AF63F48B1C3469FC0033E133 /* ios-function-table.m in Sources */ = {isa = PBXBuildFile; fileRef = AFAA6B441773F07700DE720C /* ios-function-table.m */; }; AF63F48D1C3469FC0033E133 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF63F48E1C3469FC0033E133 /* OpenGLES.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AFEB9C3A1590054B003974F3 /* OpenGLES.framework */; }; AF63F48F1C3469FC0033E133 /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AFEB9C3815900514003974F3 /* UIKit.framework */; }; AF63F4901C3469FC0033E133 /* AssetsLibrary.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF561DF715969C5B007CA5ED /* AssetsLibrary.framework */; }; AF63F4911C3469FC0033E133 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AFEB9C3C15900558003974F3 /* Foundation.framework */; }; AF63F4921C3469FC0033E133 /* CoreGraphics.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AFEB9C3E1590056A003974F3 /* CoreGraphics.framework */; }; AF63F4931C3469FC0033E133 /* CoreText.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF0FAF3B159BAC7B00BCE2F7 /* CoreText.framework */; }; AF63F4941C3469FC0033E133 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AFEB9C3F1590056A003974F3 /* QuartzCore.framework */; }; AF63F4951C3469FC0033E133 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78377C17DBA85D003B9FC0 /* libz.dylib */; }; AF63F49C1C346B0A0033E133 /* testx11.xml in Resources */ = {isa = PBXBuildFile; fileRef = CE3D01681B76F83E00993C75 /* testx11.xml */; }; AF63F49D1C346B1A0033E133 /* testx11.c in Sources */ = {isa = PBXBuildFile; fileRef = CE3D016A1B76F8E200993C75 /* testx11.c */; }; AF64232F099F45C3000F4CD4 /* braid.c in Sources */ = {isa = PBXBuildFile; fileRef = AFD56EC10996A76F00BA26F7 /* braid.c */; }; AF642330099F45CA000F4CD4 /* braid.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC2587D0988A468000655EE /* braid.xml */; }; AF6423F9099FF9C2000F4CD4 /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF642408099FFAB0000F4CD4 /* extrusion.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258A00988A468000655EE /* extrusion.xml */; }; AF642412099FFAF1000F4CD4 /* extrusion-helix2.c in Sources */ = {isa = PBXBuildFile; fileRef = AF642409099FFAF0000F4CD4 /* extrusion-helix2.c */; }; AF642413099FFAF1000F4CD4 /* extrusion-helix3.c in Sources */ = {isa = PBXBuildFile; fileRef = AF64240A099FFAF0000F4CD4 /* extrusion-helix3.c */; }; AF642414099FFAF1000F4CD4 /* extrusion-helix4.c in Sources */ = {isa = PBXBuildFile; fileRef = AF64240B099FFAF0000F4CD4 /* extrusion-helix4.c */; }; AF642415099FFAF1000F4CD4 /* extrusion-joinoffset.c in Sources */ = {isa = PBXBuildFile; fileRef = AF64240C099FFAF0000F4CD4 /* extrusion-joinoffset.c */; }; AF642416099FFAF1000F4CD4 /* extrusion-screw.c in Sources */ = {isa = PBXBuildFile; fileRef = AF64240D099FFAF0000F4CD4 /* extrusion-screw.c */; }; AF642417099FFAF1000F4CD4 /* extrusion-taper.c in Sources */ = {isa = PBXBuildFile; fileRef = AF64240E099FFAF0000F4CD4 /* extrusion-taper.c */; }; AF642418099FFAF1000F4CD4 /* extrusion-twistoid.c in Sources */ = {isa = PBXBuildFile; fileRef = AF64240F099FFAF1000F4CD4 /* extrusion-twistoid.c */; }; AF642419099FFAF1000F4CD4 /* extrusion.c in Sources */ = {isa = PBXBuildFile; fileRef = AF642410099FFAF1000F4CD4 /* extrusion.c */; }; AF6425D209A18855000F4CD4 /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF6425DE09A188D7000F4CD4 /* hypercube.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258C70988A468000655EE /* hypercube.xml */; }; AF6425E009A188FB000F4CD4 /* hypercube.c in Sources */ = {isa = PBXBuildFile; fileRef = AF6425DF09A188FB000F4CD4 /* hypercube.c */; }; AF6425F209A189EC000F4CD4 /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF6425FE09A18A77000F4CD4 /* qix.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258FF0988A469000655EE /* qix.xml */; }; AF64260009A18A94000F4CD4 /* qix.c in Sources */ = {isa = PBXBuildFile; fileRef = AF6425FF09A18A94000F4CD4 /* qix.c */; }; AF64261509A18D6C000F4CD4 /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF64262109A18DFF000F4CD4 /* hyperball.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258C60988A468000655EE /* hyperball.xml */; }; AF64262309A18E1E000F4CD4 /* hyperball.c in Sources */ = {isa = PBXBuildFile; fileRef = AF64262209A18E1E000F4CD4 /* hyperball.c */; }; AF64263209A18F54000F4CD4 /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF64263E09A18FCE000F4CD4 /* moire2.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258E60988A469000655EE /* moire2.xml */; }; AF64264009A18FEB000F4CD4 /* moire2.c in Sources */ = {isa = PBXBuildFile; fileRef = AF64263F09A18FEB000F4CD4 /* moire2.c */; }; AF64265509A19229000F4CD4 /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF64266109A1929A000F4CD4 /* munch.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258EA0988A469000655EE /* munch.xml */; }; AF64266309A192C5000F4CD4 /* munch.c in Sources */ = {isa = PBXBuildFile; fileRef = AF64266209A192C5000F4CD4 /* munch.c */; }; AF64268109A194B0000F4CD4 /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF64268D09A19525000F4CD4 /* goop.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258BF0988A468000655EE /* goop.xml */; }; AF64268F09A19542000F4CD4 /* goop.c in Sources */ = {isa = PBXBuildFile; fileRef = AF64268E09A19542000F4CD4 /* goop.c */; }; AF64277709A1D37A000F4CD4 /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF64278309A1D418000F4CD4 /* speedmine.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC259100988A469000655EE /* speedmine.xml */; }; AF64278809A1D433000F4CD4 /* speedmine.c in Sources */ = {isa = PBXBuildFile; fileRef = AF64278709A1D433000F4CD4 /* speedmine.c */; }; AF6427AE09A2DE36000F4CD4 /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF6427BA09A2DF09000F4CD4 /* bubbles.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258800988A468000655EE /* bubbles.xml */; }; AF6427BE09A2DF47000F4CD4 /* bubbles-default.c in Sources */ = {isa = PBXBuildFile; fileRef = AF6427BB09A2DF47000F4CD4 /* bubbles-default.c */; }; AF6427BF09A2DF47000F4CD4 /* bubbles.c in Sources */ = {isa = PBXBuildFile; fileRef = AF6427BC09A2DF47000F4CD4 /* bubbles.c */; }; AF68A48519196CF800D41CD1 /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF68A48719196CF800D41CD1 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF68A48819196CF800D41CD1 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF68A48919196CF800D41CD1 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF68A48A19196CF800D41CD1 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF68A48B19196CF800D41CD1 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF68A48C19196CF800D41CD1 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF68A49719196E3E00D41CD1 /* tessellimage.xml in Resources */ = {isa = PBXBuildFile; fileRef = AF68A49419196E3E00D41CD1 /* tessellimage.xml */; }; AF68A49819196E3E00D41CD1 /* tessellimage.xml in Resources */ = {isa = PBXBuildFile; fileRef = AF68A49419196E3E00D41CD1 /* tessellimage.xml */; }; AF68A49919196E3E00D41CD1 /* tessellimage.c in Sources */ = {isa = PBXBuildFile; fileRef = AF68A49519196E3E00D41CD1 /* tessellimage.c */; }; AF68A49A19196E3E00D41CD1 /* tessellimage.c in Sources */ = {isa = PBXBuildFile; fileRef = AF68A49519196E3E00D41CD1 /* tessellimage.c */; }; AF68A49B19196E3E00D41CD1 /* delaunay.c in Sources */ = {isa = PBXBuildFile; fileRef = AF68A49619196E3E00D41CD1 /* delaunay.c */; }; AF68A49C19196E3E00D41CD1 /* delaunay.c in Sources */ = {isa = PBXBuildFile; fileRef = AF68A49619196E3E00D41CD1 /* delaunay.c */; }; AF69640B0E4FE3470085DBCE /* teapot.c in Sources */ = {isa = PBXBuildFile; fileRef = AFC211930E4E30C800D87B6E /* teapot.c */; }; AF73FF211A08AB9400E485E9 /* iSaverRunner57t.png in Resources */ = {isa = PBXBuildFile; fileRef = AF73FF201A08AB9400E485E9 /* iSaverRunner57t.png */; }; AF73FF291A09877F00E485E9 /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF73FF2B1A09877F00E485E9 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF73FF2C1A09877F00E485E9 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF73FF2D1A09877F00E485E9 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF73FF2E1A09877F00E485E9 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF73FF2F1A09877F00E485E9 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF73FF301A09877F00E485E9 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF73FF391A09889700E485E9 /* binaryring.c in Sources */ = {isa = PBXBuildFile; fileRef = AF73FF381A09889700E485E9 /* binaryring.c */; }; AF73FF3A1A09889700E485E9 /* binaryring.c in Sources */ = {isa = PBXBuildFile; fileRef = AF73FF381A09889700E485E9 /* binaryring.c */; }; AF73FF3C1A0988C500E485E9 /* binaryring.xml in Resources */ = {isa = PBXBuildFile; fileRef = AF73FF3B1A0988C500E485E9 /* binaryring.xml */; }; AF73FF3D1A0988C500E485E9 /* binaryring.xml in Resources */ = {isa = PBXBuildFile; fileRef = AF73FF3B1A0988C500E485E9 /* binaryring.xml */; }; AF7511051782B5B900380EA1 /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF7511081782B5B900380EA1 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF7511091782B5B900380EA1 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF75110A1782B5B900380EA1 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF75110B1782B5B900380EA1 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF75110C1782B5B900380EA1 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF7511151782B64300380EA1 /* kaleidocycle.c in Sources */ = {isa = PBXBuildFile; fileRef = AF7511141782B64300380EA1 /* kaleidocycle.c */; }; AF7776EA09B63ABF00EA3033 /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF77770209B63B3900EA3033 /* phosphor.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258F30988A469000655EE /* phosphor.xml */; }; AF77770409B63B5F00EA3033 /* phosphor.c in Sources */ = {isa = PBXBuildFile; fileRef = AF77770309B63B5F00EA3033 /* phosphor.c */; }; AF77772009B6416100EA3033 /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF77772C09B641C800EA3033 /* pacman.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258EE0988A469000655EE /* pacman.xml */; }; AF77772D09B641D300EA3033 /* pacman.c in Sources */ = {isa = PBXBuildFile; fileRef = AF795015099751940059A8B0 /* pacman.c */; }; AF77772E09B641D400EA3033 /* pacman_ai.c in Sources */ = {isa = PBXBuildFile; fileRef = AF795011099751940059A8B0 /* pacman_ai.c */; }; AF77772F09B641D600EA3033 /* pacman_level.c in Sources */ = {isa = PBXBuildFile; fileRef = AF795013099751940059A8B0 /* pacman_level.c */; }; AF77774509B6446500EA3033 /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF77775309B644E300EA3033 /* flipscreen3d.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258A80988A468000655EE /* flipscreen3d.xml */; }; AF77775509B644FF00EA3033 /* flipscreen3d.c in Sources */ = {isa = PBXBuildFile; fileRef = AF77775409B644FF00EA3033 /* flipscreen3d.c */; }; AF77777A09B6497800EA3033 /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF77778A09B64A0D00EA3033 /* gleidescope.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258B50988A468000655EE /* gleidescope.xml */; }; AF77778C09B64A2A00EA3033 /* gleidescope.c in Sources */ = {isa = PBXBuildFile; fileRef = AF77778B09B64A2A00EA3033 /* gleidescope.c */; }; AF77779409B64A5200EA3033 /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF7777A409B64AE200EA3033 /* mirrorblob.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258E20988A469000655EE /* mirrorblob.xml */; }; AF7777A609B64AFC00EA3033 /* mirrorblob.c in Sources */ = {isa = PBXBuildFile; fileRef = AF7777A509B64AFC00EA3033 /* mirrorblob.c */; }; AF7777AE09B64B2600EA3033 /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF7777BE09B64BAC00EA3033 /* stonerview.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC2591C0988A469000655EE /* stonerview.xml */; }; AF7777C609B64BD400EA3033 /* stonerview-move.c in Sources */ = {isa = PBXBuildFile; fileRef = AF7777BF09B64BD400EA3033 /* stonerview-move.c */; }; AF7777C709B64BD400EA3033 /* stonerview-osc.c in Sources */ = {isa = PBXBuildFile; fileRef = AF7777C109B64BD400EA3033 /* stonerview-osc.c */; }; AF7777C809B64BD400EA3033 /* stonerview-view.c in Sources */ = {isa = PBXBuildFile; fileRef = AF7777C309B64BD400EA3033 /* stonerview-view.c */; }; AF7777C909B64BD400EA3033 /* stonerview.c in Sources */ = {isa = PBXBuildFile; fileRef = AF7777C409B64BD400EA3033 /* stonerview.c */; }; AF7777D609B64C6B00EA3033 /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF7777E609B64CD800EA3033 /* glslideshow.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258BB0988A468000655EE /* glslideshow.xml */; }; AF7777E809B64CF700EA3033 /* glslideshow.c in Sources */ = {isa = PBXBuildFile; fileRef = AF7777E709B64CF700EA3033 /* glslideshow.c */; }; AF7777F009B64E3100EA3033 /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF77780009B64EA800EA3033 /* fliptext.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258A90988A468000655EE /* fliptext.xml */; }; AF77780209B64EC000EA3033 /* fliptext.c in Sources */ = {isa = PBXBuildFile; fileRef = AF77780109B64EC000EA3033 /* fliptext.c */; }; AF77781609B6504400EA3033 /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF77782709B650D200EA3033 /* starwars.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC2591B0988A469000655EE /* starwars.xml */; }; AF77782A09B650FF00EA3033 /* starwars.c in Sources */ = {isa = PBXBuildFile; fileRef = AF77782809B650FF00EA3033 /* starwars.c */; }; AF77783409B6516900EA3033 /* grab-ximage.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA5607909936FDD00F3E977 /* grab-ximage.c */; }; AF77783709B6518400EA3033 /* texfont.c in Sources */ = {isa = PBXBuildFile; fileRef = AF77780809B64F4900EA3033 /* texfont.c */; }; AF77783A09B651AF00EA3033 /* glut_stroke.c in Sources */ = {isa = PBXBuildFile; fileRef = AFD56E0B0996A0ED00BA26F7 /* glut_stroke.c */; }; AF77783D09B651C700EA3033 /* glut_swidth.c in Sources */ = {isa = PBXBuildFile; fileRef = AFD56E0C0996A0ED00BA26F7 /* glut_swidth.c */; }; AF77784B09B6528100EA3033 /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF77786709B6536000EA3033 /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF77787709B653DC00EA3033 /* dnalogo.c in Sources */ = {isa = PBXBuildFile; fileRef = AF77787609B653DC00EA3033 /* dnalogo.c */; }; AF77787A09B6545E00EA3033 /* dnalogo.xml in Resources */ = {isa = PBXBuildFile; fileRef = AF77787909B6545E00EA3033 /* dnalogo.xml */; }; AF77787C09B654F800EA3033 /* carousel.c in Sources */ = {isa = PBXBuildFile; fileRef = AF77785E09B6530E00EA3033 /* carousel.c */; }; AF77787D09B654FE00EA3033 /* carousel.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258830988A468000655EE /* carousel.xml */; }; AF77788509B6563500EA3033 /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF77789109B656A900EA3033 /* fontglide.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258AE0988A468000655EE /* fontglide.xml */; }; AF77789309B656C300EA3033 /* fontglide.c in Sources */ = {isa = PBXBuildFile; fileRef = AF77789209B656C300EA3033 /* fontglide.c */; }; AF7778AB09B659C800EA3033 /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF7778B909B65A6E00EA3033 /* blitspin.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258760988A468000655EE /* blitspin.xml */; }; AF7778BB09B65A8A00EA3033 /* blitspin.c in Sources */ = {isa = PBXBuildFile; fileRef = AF7778BA09B65A8A00EA3033 /* blitspin.c */; }; AF78369717DB9F25003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF78369817DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF78369917DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF78369A17DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF78369B17DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF78369C17DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF78369D17DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF78369E17DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF78369F17DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF7836A017DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF7836A117DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF7836A217DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF7836A317DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF7836A417DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF7836A517DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF7836A617DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF7836A717DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF7836A817DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF7836A917DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF7836AA17DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF7836AB17DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF7836AC17DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF7836AD17DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF7836AE17DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF7836AF17DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF7836B017DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF7836B117DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF7836B217DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF7836B317DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF7836B417DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF7836B517DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF7836B617DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF7836B717DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF7836B817DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF7836B917DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF7836BA17DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF7836BB17DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF7836BC17DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF7836BD17DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF7836BE17DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF7836BF17DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF7836C017DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF7836C117DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF7836C217DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF7836C317DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF7836C417DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF7836C517DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF7836C617DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF7836C717DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF7836C817DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF7836C917DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF7836CA17DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF7836CB17DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF7836CC17DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF7836CD17DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF7836CE17DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF7836CF17DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF7836D117DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF7836D217DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF7836D317DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF7836D417DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF7836D517DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF7836D617DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF7836D717DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF7836D817DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF7836D917DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF7836DA17DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF7836DB17DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF7836DC17DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF7836DD17DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF7836DE17DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF7836DF17DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF7836E017DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF7836E117DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF7836E217DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF7836E317DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF7836E417DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF7836E517DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF7836E617DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF7836E717DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF7836E817DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF7836E917DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF7836EA17DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF7836EB17DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF7836EC17DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF7836ED17DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF7836EE17DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF7836EF17DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF7836F017DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF7836F117DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF7836F217DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF7836F317DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF7836F417DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF7836F517DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF7836F617DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF7836F717DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF7836F817DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF7836F917DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF7836FA17DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF7836FB17DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF7836FC17DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF7836FD17DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF7836FE17DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF7836FF17DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF78370017DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF78370117DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF78370217DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF78370317DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF78370417DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF78370517DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF78370617DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF78370717DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF78370817DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF78370917DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF78370A17DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF78370B17DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF78370C17DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF78370D17DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF78370E17DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF78370F17DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF78371017DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF78371117DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF78371217DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF78371317DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF78371417DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF78371517DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF78371617DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF78371717DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF78371817DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF78371917DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF78371A17DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF78371B17DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF78371C17DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF78371D17DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF78371E17DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF78371F17DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF78372017DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF78372117DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF78372217DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF78372317DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF78372417DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF78372517DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF78372617DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF78372717DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF78372817DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF78372917DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF78372A17DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF78372B17DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF78372C17DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF78372D17DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF78372E17DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF78372F17DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF78373017DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF78373117DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF78373217DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF78373317DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF78373417DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF78373517DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF78373617DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF78373717DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF78373817DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF78373917DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF78373A17DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF78373B17DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF78373C17DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF78373D17DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF78373E17DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF78373F17DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF78374017DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF78374117DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF78374217DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF78374317DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF78374417DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF78374517DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF78374617DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF78374717DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF78374817DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF78374917DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF78374A17DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF78374B17DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF78374C17DBA581003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF78374D17DBA581003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF78374E17DBA581003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF78374F17DBA581003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF78375017DBA581003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF78375117DBA581003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF78375217DBA581003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF78375317DBA581003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF78375417DBA581003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF78375517DBA581003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF78375617DBA581003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF78375717DBA581003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF78375817DBA581003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF78375917DBA581003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF78375A17DBA581003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF78375B17DBA581003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF78375C17DBA581003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF78375D17DBA581003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF78375E17DBA581003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF78375F17DBA581003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF78376017DBA581003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF78376117DBA581003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF78376217DBA581003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF78376317DBA581003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF78376417DBA581003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF78376517DBA581003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF78376617DBA581003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF78376717DBA581003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF78376817DBA581003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF78376917DBA581003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF78376A17DBA581003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF78376B17DBA581003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF78376C17DBA581003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF78376D17DBA581003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF78376E17DBA581003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF78376F17DBA581003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF78377017DBA581003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF78377117DBA581003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF78377217DBA581003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF78377317DBA581003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF78377417DBA581003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF78377517DBA581003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF78377617DBA581003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF78377717DBA581003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF78377817DBA581003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF78377917DBA581003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF78377A17DBA581003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF78377B17DBA581003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF78D179142DD8F3002AAF77 /* voronoi.xml in Resources */ = {isa = PBXBuildFile; fileRef = AF0DCA610C4CBB8E00D76972 /* voronoi.xml */; }; AF78D17B142DD8F3002AAF77 /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF78D18D142DD96E002AAF77 /* hilbert.c in Sources */ = {isa = PBXBuildFile; fileRef = AF78D18A142DD96E002AAF77 /* hilbert.c */; }; AF78D191142DD99B002AAF77 /* hilbert.xml in Resources */ = {isa = PBXBuildFile; fileRef = AF78D18E142DD99A002AAF77 /* hilbert.xml */; }; AF794F6A099748450059A8B0 /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF794F7D0997486C0059A8B0 /* demon.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258960988A468000655EE /* demon.xml */; }; AF794F7F099748860059A8B0 /* demon.c in Sources */ = {isa = PBXBuildFile; fileRef = AF794F7E099748860059A8B0 /* demon.c */; }; AF794F9409974A320059A8B0 /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF794FA809974AC60059A8B0 /* fiberlamp.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258A20988A468000655EE /* fiberlamp.xml */; }; AF794FAA09974AE30059A8B0 /* fiberlamp.c in Sources */ = {isa = PBXBuildFile; fileRef = AF794FA909974AE30059A8B0 /* fiberlamp.c */; }; AF794FD309974FA60059A8B0 /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF794FDF09974FD10059A8B0 /* loop.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258DD0988A468000655EE /* loop.xml */; }; AF794FE109974FEC0059A8B0 /* loop.c in Sources */ = {isa = PBXBuildFile; fileRef = AF794FE009974FEC0059A8B0 /* loop.c */; }; AF7ACFC719FF0A9200BD752B /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF7ACFC919FF0A9200BD752B /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF7ACFCA19FF0A9200BD752B /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF7ACFCB19FF0A9200BD752B /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF7ACFCC19FF0A9200BD752B /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF7ACFCD19FF0A9200BD752B /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF7ACFCE19FF0A9200BD752B /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF7ACFD719FF0B7A00BD752B /* geodesicgears.c in Sources */ = {isa = PBXBuildFile; fileRef = AF7ACFD619FF0B7A00BD752B /* geodesicgears.c */; }; AF7ACFD919FF0BA600BD752B /* geodesicgears.xml in Resources */ = {isa = PBXBuildFile; fileRef = AF7ACFD819FF0BA600BD752B /* geodesicgears.xml */; }; AF7ACFDA19FF0BA600BD752B /* geodesicgears.xml in Resources */ = {isa = PBXBuildFile; fileRef = AF7ACFD819FF0BA600BD752B /* geodesicgears.xml */; }; AF7F54A417DC249500CE1158 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78377C17DBA85D003B9FC0 /* libz.dylib */; }; AF84AF2015829AF000607E4C /* SaverListController.m in Sources */ = {isa = PBXBuildFile; fileRef = AF84AF1E15829AF000607E4C /* SaverListController.m */; }; AF84FD4209B1209E00F3AB06 /* GLUT.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF84FD4109B1209E00F3AB06 /* GLUT.framework */; }; AF918983158FC00A002B5D1E /* iSaverRunner.xib in Resources */ = {isa = PBXBuildFile; fileRef = AF56019B157DAA3D00DB2055 /* iSaverRunner.xib */; }; AF918986158FC00A002B5D1E /* SaverRunner.m in Sources */ = {isa = PBXBuildFile; fileRef = AFE1FD400981E32E00F7970E /* SaverRunner.m */; }; AF918987158FC00A002B5D1E /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 29B97316FDCFA39411CA2CEA /* main.m */; }; AF918988158FC00A002B5D1E /* SaverListController.m in Sources */ = {isa = PBXBuildFile; fileRef = AF84AF1E15829AF000607E4C /* SaverListController.m */; }; AF918993158FC2BE002B5D1E /* abstractile.c in Sources */ = {isa = PBXBuildFile; fileRef = AFE6A4340CDD800F002805BF /* abstractile.c */; }; AF918994158FC2BE002B5D1E /* anemone.c in Sources */ = {isa = PBXBuildFile; fileRef = AF477231099D4FD5001F091E /* anemone.c */; }; AF918995158FC2E0002B5D1E /* analogtv.c in Sources */ = {isa = PBXBuildFile; fileRef = AF9D4CFA09B5AC94006E59CF /* analogtv.c */; }; AF918996158FC310002B5D1E /* anemotaxis.c in Sources */ = {isa = PBXBuildFile; fileRef = AF4773D4099D6817001F091E /* anemotaxis.c */; }; AF918997158FC310002B5D1E /* apple2-main.c in Sources */ = {isa = PBXBuildFile; fileRef = AF9D4E0509B5BC9D006E59CF /* apple2-main.c */; }; AF918998158FC310002B5D1E /* apple2.c in Sources */ = {isa = PBXBuildFile; fileRef = AF9D4DD309B5B990006E59CF /* apple2.c */; }; AF918999158FC310002B5D1E /* asm6502.c in Sources */ = {isa = PBXBuildFile; fileRef = AF0DCA320C4C74A200D76972 /* asm6502.c */; }; AF91899A158FC310002B5D1E /* attraction.c in Sources */ = {isa = PBXBuildFile; fileRef = AF976DFA09896BEB001F8B92 /* attraction.c */; }; AF91899B158FC310002B5D1E /* barcode.c in Sources */ = {isa = PBXBuildFile; fileRef = AF975A99099C6C3500B05160 /* barcode.c */; }; AF91899C158FC310002B5D1E /* blaster.c in Sources */ = {isa = PBXBuildFile; fileRef = AF4776A2099DAADE001F091E /* blaster.c */; }; AF91899D158FC310002B5D1E /* blitspin.c in Sources */ = {isa = PBXBuildFile; fileRef = AF7778BA09B65A8A00EA3033 /* blitspin.c */; }; AF91899E158FC310002B5D1E /* boxfit.c in Sources */ = {isa = PBXBuildFile; fileRef = AF4778A3099DDA91001F091E /* boxfit.c */; }; AF91899F158FC310002B5D1E /* bsod.c in Sources */ = {isa = PBXBuildFile; fileRef = AF9D4DC309B5B87D006E59CF /* bsod.c */; }; AF9189A0158FC310002B5D1E /* bubbles-default.c in Sources */ = {isa = PBXBuildFile; fileRef = AF6427BB09A2DF47000F4CD4 /* bubbles-default.c */; }; AF9189A2158FC310002B5D1E /* bumps.c in Sources */ = {isa = PBXBuildFile; fileRef = AF9D48EE09B533AE006E59CF /* bumps.c */; }; AF9189A3158FC310002B5D1E /* ccurve.c in Sources */ = {isa = PBXBuildFile; fileRef = AF4771EF099D4DFE001F091E /* ccurve.c */; }; AF9189A4158FC310002B5D1E /* celtic.c in Sources */ = {isa = PBXBuildFile; fileRef = AF477787099DBA29001F091E /* celtic.c */; }; AF9189A5158FC310002B5D1E /* cloudlife.c in Sources */ = {isa = PBXBuildFile; fileRef = AF477720099DB01C001F091E /* cloudlife.c */; }; AF9189A6158FC310002B5D1E /* companion.c in Sources */ = {isa = PBXBuildFile; fileRef = AF3581D91431D5FC00E09C51 /* companion.c */; settings = {COMPILER_FLAGS = "-DUSE_GL"; }; }; AF9189A7158FC311002B5D1E /* companion_disc.c in Sources */ = {isa = PBXBuildFile; fileRef = AF3581D61431D5FC00E09C51 /* companion_disc.c */; settings = {COMPILER_FLAGS = "-DUSE_GL"; }; }; AF9189A8158FC311002B5D1E /* companion_heart.c in Sources */ = {isa = PBXBuildFile; fileRef = AF3581D71431D5FC00E09C51 /* companion_heart.c */; settings = {COMPILER_FLAGS = "-DUSE_GL"; }; }; AF9189A9158FC311002B5D1E /* companion_quad.c in Sources */ = {isa = PBXBuildFile; fileRef = AF3581D81431D5FC00E09C51 /* companion_quad.c */; settings = {COMPILER_FLAGS = "-DUSE_GL"; }; }; AF9189AA158FC311002B5D1E /* compass.c in Sources */ = {isa = PBXBuildFile; fileRef = AF47717C099D47D3001F091E /* compass.c */; }; AF9189AB158FC311002B5D1E /* coral.c in Sources */ = {isa = PBXBuildFile; fileRef = AF4775EF099D9FFF001F091E /* coral.c */; }; AF9189AD158FC311002B5D1E /* cwaves.c in Sources */ = {isa = PBXBuildFile; fileRef = AFF463490C44044E00EE6509 /* cwaves.c */; }; AF9189AE158FC311002B5D1E /* cynosure.c in Sources */ = {isa = PBXBuildFile; fileRef = AF4778FB099DDE79001F091E /* cynosure.c */; }; AF9189AF158FC311002B5D1E /* decayscreen.c in Sources */ = {isa = PBXBuildFile; fileRef = AF9D467809B5110B006E59CF /* decayscreen.c */; }; AF9189B0158FC311002B5D1E /* deco.c in Sources */ = {isa = PBXBuildFile; fileRef = AFC25B5E0988BA63000655EE /* deco.c */; }; AF9189B1158FC311002B5D1E /* deluxe.c in Sources */ = {isa = PBXBuildFile; fileRef = AF477145099D43E2001F091E /* deluxe.c */; }; AF9189B2158FC311002B5D1E /* distort.c in Sources */ = {isa = PBXBuildFile; fileRef = AF9D490709B536F7006E59CF /* distort.c */; }; AF9189B3158FC311002B5D1E /* epicycle.c in Sources */ = {isa = PBXBuildFile; fileRef = AF477605099DA097001F091E /* epicycle.c */; }; AF9189B4158FC311002B5D1E /* eruption.c in Sources */ = {isa = PBXBuildFile; fileRef = AF975A83099C6B4900B05160 /* eruption.c */; }; AF9189B5158FC311002B5D1E /* fireworkx.c in Sources */ = {isa = PBXBuildFile; fileRef = AF975AEE099C6F1700B05160 /* fireworkx.c */; }; AF9189B6158FC334002B5D1E /* flame.c in Sources */ = {isa = PBXBuildFile; fileRef = AF477496099D8A53001F091E /* flame.c */; }; AF9189B7158FC334002B5D1E /* fluidballs.c in Sources */ = {isa = PBXBuildFile; fileRef = AF4777A4099DBB11001F091E /* fluidballs.c */; }; AF9189B8158FC334002B5D1E /* fontglide.c in Sources */ = {isa = PBXBuildFile; fileRef = AF77789209B656C300EA3033 /* fontglide.c */; }; AF9189B9158FC334002B5D1E /* fps.c in Sources */ = {isa = PBXBuildFile; fileRef = AFBF893C0E41D930006A2D66 /* fps.c */; }; AF9189BA158FC334002B5D1E /* fuzzyflakes.c in Sources */ = {isa = PBXBuildFile; fileRef = AF4773B4099D6778001F091E /* fuzzyflakes.c */; }; AF9189BB158FC334002B5D1E /* goop.c in Sources */ = {isa = PBXBuildFile; fileRef = AF64268E09A19542000F4CD4 /* goop.c */; }; AF9189BC158FC334002B5D1E /* greynetic.c in Sources */ = {isa = PBXBuildFile; fileRef = AF480C21098E28EF00FB32B8 /* greynetic.c */; }; AF9189BD158FC334002B5D1E /* halftone.c in Sources */ = {isa = PBXBuildFile; fileRef = AF477266099D5768001F091E /* halftone.c */; }; AF9189BE158FC334002B5D1E /* halo.c in Sources */ = {isa = PBXBuildFile; fileRef = AF480C29098E295D00FB32B8 /* halo.c */; }; AF9189BF158FC334002B5D1E /* helix.c in Sources */ = {isa = PBXBuildFile; fileRef = AF480C2F098E2A6700FB32B8 /* helix.c */; }; AF9189C2158FC334002B5D1E /* ifs.c in Sources */ = {isa = PBXBuildFile; fileRef = AF47743A099D7CEA001F091E /* ifs.c */; }; AF9189C3158FC334002B5D1E /* imsmap.c in Sources */ = {isa = PBXBuildFile; fileRef = AF975740099C31DD00B05160 /* imsmap.c */; }; AF9189C4158FC334002B5D1E /* interaggregate.c in Sources */ = {isa = PBXBuildFile; fileRef = AF477769099DB710001F091E /* interaggregate.c */; }; AF9189C5158FC334002B5D1E /* interference.c in Sources */ = {isa = PBXBuildFile; fileRef = AF476FD0099D15AA001F091E /* interference.c */; }; AF9189C6158FC334002B5D1E /* intermomentary.c in Sources */ = {isa = PBXBuildFile; fileRef = AF47741C099D6A6C001F091E /* intermomentary.c */; }; AF9189C7158FC334002B5D1E /* kaleidescope.c in Sources */ = {isa = PBXBuildFile; fileRef = AF4774AC099D8B08001F091E /* kaleidescope.c */; }; AF9189C8158FC334002B5D1E /* kumppa.c in Sources */ = {isa = PBXBuildFile; fileRef = AF47762A099DA2E9001F091E /* kumppa.c */; }; AF9189CB158FC334002B5D1E /* m6502.c in Sources */ = {isa = PBXBuildFile; fileRef = AF0DCA340C4C74A200D76972 /* m6502.c */; }; AF9189CC158FC334002B5D1E /* maze.c in Sources */ = {isa = PBXBuildFile; fileRef = AF4774E1099D8C8B001F091E /* maze.c */; }; AF9189CD158FC334002B5D1E /* memscroller.c in Sources */ = {isa = PBXBuildFile; fileRef = AF975B14099C709E00B05160 /* memscroller.c */; }; AF9189CE158FC334002B5D1E /* metaballs.c in Sources */ = {isa = PBXBuildFile; fileRef = AF975A49099C689F00B05160 /* metaballs.c */; }; AF9189CF158FC334002B5D1E /* moire.c in Sources */ = {isa = PBXBuildFile; fileRef = AF975789099C37A500B05160 /* moire.c */; }; AF9189D0158FC334002B5D1E /* moire2.c in Sources */ = {isa = PBXBuildFile; fileRef = AF64263F09A18FEB000F4CD4 /* moire2.c */; }; AF9189D1158FC334002B5D1E /* munch.c in Sources */ = {isa = PBXBuildFile; fileRef = AF64266209A192C5000F4CD4 /* munch.c */; }; AF9189D2158FC334002B5D1E /* nerverot.c in Sources */ = {isa = PBXBuildFile; fileRef = AF477205099D4EB6001F091E /* nerverot.c */; }; AF9189D3158FC334002B5D1E /* noseguy.c in Sources */ = {isa = PBXBuildFile; fileRef = AF975C76099C8FC700B05160 /* noseguy.c */; }; AF9189D4158FC334002B5D1E /* pedal.c in Sources */ = {isa = PBXBuildFile; fileRef = AF477570099D9A8A001F091E /* pedal.c */; }; AF9189D5158FC334002B5D1E /* penetrate.c in Sources */ = {isa = PBXBuildFile; fileRef = AF4778BE099DDC32001F091E /* penetrate.c */; }; AF9189D6158FC334002B5D1E /* petri.c in Sources */ = {isa = PBXBuildFile; fileRef = AF477683099DA8C7001F091E /* petri.c */; }; AF9189D7158FC334002B5D1E /* phosphor.c in Sources */ = {isa = PBXBuildFile; fileRef = AF77770309B63B5F00EA3033 /* phosphor.c */; }; AF9189D8158FC334002B5D1E /* piecewise.c in Sources */ = {isa = PBXBuildFile; fileRef = AF477297099D5980001F091E /* piecewise.c */; }; AF9189D9158FC334002B5D1E /* pong.c in Sources */ = {isa = PBXBuildFile; fileRef = AF9D4CFC09B5AC94006E59CF /* pong.c */; }; AF9189DA158FC334002B5D1E /* popsquares.c in Sources */ = {isa = PBXBuildFile; fileRef = AF47727E099D5808001F091E /* popsquares.c */; }; AF9189DB158FC334002B5D1E /* pyro.c in Sources */ = {isa = PBXBuildFile; fileRef = AF47759C099D9CA3001F091E /* pyro.c */; }; AF9189DC158FC334002B5D1E /* qix.c in Sources */ = {isa = PBXBuildFile; fileRef = AF6425FF09A18A94000F4CD4 /* qix.c */; }; AF9189DD158FC334002B5D1E /* rd-bomb.c in Sources */ = {isa = PBXBuildFile; fileRef = AF9757D5099C3EB800B05160 /* rd-bomb.c */; }; AF9189DE158FC334002B5D1E /* ripples.c in Sources */ = {isa = PBXBuildFile; fileRef = AF9D493E09B53D55006E59CF /* ripples.c */; }; AF9189DF158FC35D002B5D1E /* rocks.c in Sources */ = {isa = PBXBuildFile; fileRef = AF975D66099CA16A00B05160 /* rocks.c */; }; AF9189E0158FC35D002B5D1E /* rorschach.c in Sources */ = {isa = PBXBuildFile; fileRef = AFE1FD620981E40800F7970E /* rorschach.c */; }; AF9189E1158FC35D002B5D1E /* rotzoomer.c in Sources */ = {isa = PBXBuildFile; fileRef = AF9D496709B540A4006E59CF /* rotzoomer.c */; }; AF9189E2158FC35D002B5D1E /* shadebobs.c in Sources */ = {isa = PBXBuildFile; fileRef = AF97587A099C492000B05160 /* shadebobs.c */; }; AF9189E3158FC35D002B5D1E /* slidescreen.c in Sources */ = {isa = PBXBuildFile; fileRef = AF9D475809B53091006E59CF /* slidescreen.c */; }; AF9189E4158FC35D002B5D1E /* speedmine.c in Sources */ = {isa = PBXBuildFile; fileRef = AF64278709A1D433000F4CD4 /* speedmine.c */; }; AF9189E5158FC35D002B5D1E /* spotlight.c in Sources */ = {isa = PBXBuildFile; fileRef = AF9D49AA09B54596006E59CF /* spotlight.c */; }; AF9189E6158FC35D002B5D1E /* squiral.c in Sources */ = {isa = PBXBuildFile; fileRef = AF477657099DA75D001F091E /* squiral.c */; }; AF9189E7158FC35D002B5D1E /* starfish.c in Sources */ = {isa = PBXBuildFile; fileRef = AF4775B3099D9D67001F091E /* starfish.c */; }; AF9189E8158FC35D002B5D1E /* substrate.c in Sources */ = {isa = PBXBuildFile; fileRef = AF477736099DB104001F091E /* substrate.c */; }; AF9189EA158FC35D002B5D1E /* tronbit.c in Sources */ = {isa = PBXBuildFile; fileRef = AF35821B1433314C00E09C51 /* tronbit.c */; settings = {COMPILER_FLAGS = "-DUSE_GL"; }; }; AF9189EB158FC35D002B5D1E /* tronbit_idle1.c in Sources */ = {isa = PBXBuildFile; fileRef = AF3582171433314C00E09C51 /* tronbit_idle1.c */; settings = {COMPILER_FLAGS = "-DUSE_GL"; }; }; AF9189EC158FC35D002B5D1E /* tronbit_idle2.c in Sources */ = {isa = PBXBuildFile; fileRef = AF3582181433314C00E09C51 /* tronbit_idle2.c */; settings = {COMPILER_FLAGS = "-DUSE_GL"; }; }; AF9189ED158FC35D002B5D1E /* tronbit_no.c in Sources */ = {isa = PBXBuildFile; fileRef = AF3582191433314C00E09C51 /* tronbit_no.c */; settings = {COMPILER_FLAGS = "-DUSE_GL"; }; }; AF9189EE158FC35D002B5D1E /* tronbit_yes.c in Sources */ = {isa = PBXBuildFile; fileRef = AF35821A1433314C00E09C51 /* tronbit_yes.c */; settings = {COMPILER_FLAGS = "-DUSE_GL"; }; }; AF9189EF158FC35D002B5D1E /* truchet.c in Sources */ = {isa = PBXBuildFile; fileRef = AF476FF0099D1713001F091E /* truchet.c */; }; AF9189F0158FC35D002B5D1E /* twang.c in Sources */ = {isa = PBXBuildFile; fileRef = AF9D497F09B541E5006E59CF /* twang.c */; }; AF9189F1158FC35D002B5D1E /* vermiculate.c in Sources */ = {isa = PBXBuildFile; fileRef = AF477704099DAF3F001F091E /* vermiculate.c */; }; AF9189F2158FC35D002B5D1E /* wander.c in Sources */ = {isa = PBXBuildFile; fileRef = AF477192099D4864001F091E /* wander.c */; }; AF9189F3158FC35E002B5D1E /* whirlwindwarp.c in Sources */ = {isa = PBXBuildFile; fileRef = AF4776EE099DAE58001F091E /* whirlwindwarp.c */; }; AF9189F5158FC35E002B5D1E /* wormhole.c in Sources */ = {isa = PBXBuildFile; fileRef = AF477395099D65FE001F091E /* wormhole.c */; }; AF9189F6158FC35E002B5D1E /* xanalogtv.c in Sources */ = {isa = PBXBuildFile; fileRef = AF9D4D9209B5B444006E59CF /* xanalogtv.c */; }; AF9189F7158FC35E002B5D1E /* xflame.c in Sources */ = {isa = PBXBuildFile; fileRef = AF97582F099C427500B05160 /* xflame.c */; }; AF9189F8158FC35E002B5D1E /* xjack.c in Sources */ = {isa = PBXBuildFile; fileRef = AF4778DA099DDD2B001F091E /* xjack.c */; }; AF9189F9158FC35E002B5D1E /* xlyap.c in Sources */ = {isa = PBXBuildFile; fileRef = AF9D4C7C09B5A044006E59CF /* xlyap.c */; }; AF9189FA158FC35E002B5D1E /* xmatrix.c in Sources */ = {isa = PBXBuildFile; fileRef = AF477455099D7D8A001F091E /* xmatrix.c */; }; AF9189FB158FC35E002B5D1E /* xrayswarm.c in Sources */ = {isa = PBXBuildFile; fileRef = AF4776D3099DACEB001F091E /* xrayswarm.c */; }; AF9189FC158FC35E002B5D1E /* xspirograph.c in Sources */ = {isa = PBXBuildFile; fileRef = AF4776BD099DAC46001F091E /* xspirograph.c */; }; AF9189FD158FC35E002B5D1E /* zoom.c in Sources */ = {isa = PBXBuildFile; fileRef = AF9D48D409B53229006E59CF /* zoom.c */; }; AF9189FF158FC38A002B5D1E /* apollonian.c in Sources */ = {isa = PBXBuildFile; fileRef = AFD5713F0996BFBE00BA26F7 /* apollonian.c */; }; AF918A00158FC38A002B5D1E /* bouboule.c in Sources */ = {isa = PBXBuildFile; fileRef = AFD572B90996FB3D00BA26F7 /* bouboule.c */; }; AF918A01158FC38A002B5D1E /* braid.c in Sources */ = {isa = PBXBuildFile; fileRef = AFD56EC10996A76F00BA26F7 /* braid.c */; }; AF918A02158FC38A002B5D1E /* crystal.c in Sources */ = {isa = PBXBuildFile; fileRef = AFD572ED0997006E00BA26F7 /* crystal.c */; }; AF918A03158FC38A002B5D1E /* demon.c in Sources */ = {isa = PBXBuildFile; fileRef = AF794F7E099748860059A8B0 /* demon.c */; }; AF918A04158FC38A002B5D1E /* discrete.c in Sources */ = {isa = PBXBuildFile; fileRef = AFD571280996BEF700BA26F7 /* discrete.c */; }; AF918A05158FC38A002B5D1E /* drift.c in Sources */ = {isa = PBXBuildFile; fileRef = AF480C82098E336D00FB32B8 /* drift.c */; }; AF918A06158FC38A002B5D1E /* euler2d.c in Sources */ = {isa = PBXBuildFile; fileRef = AFD571560996C07F00BA26F7 /* euler2d.c */; }; AF918A07158FC38A002B5D1E /* fadeplot.c in Sources */ = {isa = PBXBuildFile; fileRef = AFD5706C0996B70000BA26F7 /* fadeplot.c */; }; AF918A08158FC38A002B5D1E /* fiberlamp.c in Sources */ = {isa = PBXBuildFile; fileRef = AF794FA909974AE30059A8B0 /* fiberlamp.c */; }; AF918A0A158FC38A002B5D1E /* flow.c in Sources */ = {isa = PBXBuildFile; fileRef = AFD571010996BC3800BA26F7 /* flow.c */; }; AF918A0C158FC38A002B5D1E /* galaxy.c in Sources */ = {isa = PBXBuildFile; fileRef = AFD56F360996ABD200BA26F7 /* galaxy.c */; }; AF918A0D158FC38A002B5D1E /* grav.c in Sources */ = {isa = PBXBuildFile; fileRef = AFD56F620996AF2D00BA26F7 /* grav.c */; }; AF918A0E158FC38A002B5D1E /* hopalong.c in Sources */ = {isa = PBXBuildFile; fileRef = AFD56F880996B06600BA26F7 /* hopalong.c */; }; AF918A11158FC38A002B5D1E /* julia.c in Sources */ = {isa = PBXBuildFile; fileRef = AFD5730C099702C800BA26F7 /* julia.c */; }; AF918A16158FC38A002B5D1E /* loop.c in Sources */ = {isa = PBXBuildFile; fileRef = AF794FE009974FEC0059A8B0 /* loop.c */; }; AF918A17158FC38A002B5D1E /* mountain.c in Sources */ = {isa = PBXBuildFile; fileRef = AFD570820996B79300BA26F7 /* mountain.c */; }; AF918A18158FC38A002B5D1E /* pacman.c in Sources */ = {isa = PBXBuildFile; fileRef = AF795015099751940059A8B0 /* pacman.c */; }; AF918A19158FC38A002B5D1E /* pacman_ai.c in Sources */ = {isa = PBXBuildFile; fileRef = AF795011099751940059A8B0 /* pacman_ai.c */; }; AF918A1A158FC38A002B5D1E /* pacman_level.c in Sources */ = {isa = PBXBuildFile; fileRef = AF795013099751940059A8B0 /* pacman_level.c */; }; AF918A1B158FC38A002B5D1E /* penrose.c in Sources */ = {isa = PBXBuildFile; fileRef = AFD5700C0996B49D00BA26F7 /* penrose.c */; }; AF918A1C158FC38A002B5D1E /* polyominoes.c in Sources */ = {isa = PBXBuildFile; fileRef = AFD572800996EF2B00BA26F7 /* polyominoes.c */; }; AF918A1E158FC38A002B5D1E /* sierpinski.c in Sources */ = {isa = PBXBuildFile; fileRef = AFD570220996B52700BA26F7 /* sierpinski.c */; }; AF918A1F158FC38A002B5D1E /* slip.c in Sources */ = {isa = PBXBuildFile; fileRef = AF47793D099DE56A001F091E /* slip.c */; }; AF918A22158FC38A002B5D1E /* strange.c in Sources */ = {isa = PBXBuildFile; fileRef = AFD57371099741A200BA26F7 /* strange.c */; }; AF918A23158FC38A002B5D1E /* swirl.c in Sources */ = {isa = PBXBuildFile; fileRef = AFD572350996E53E00BA26F7 /* swirl.c */; }; AF918A24158FC38A002B5D1E /* thornbird.c in Sources */ = {isa = PBXBuildFile; fileRef = AFD5716B0996C16700BA26F7 /* thornbird.c */; }; AF918A25158FC38A002B5D1E /* triangle.c in Sources */ = {isa = PBXBuildFile; fileRef = AFD570980996B86200BA26F7 /* triangle.c */; }; AF918A28158FC3BB002B5D1E /* antinspect.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA5605F09936E9C00F3E977 /* antinspect.c */; settings = {COMPILER_FLAGS = "-DUSE_GL"; }; }; AF918A29158FC3BB002B5D1E /* antmaze.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA562EF0993941600F3E977 /* antmaze.c */; settings = {COMPILER_FLAGS = "-DUSE_GL"; }; }; AF918A2A158FC3BB002B5D1E /* antspotlight.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA5607809936FDD00F3E977 /* antspotlight.c */; settings = {COMPILER_FLAGS = "-DUSE_GL"; }; }; AF918A2B158FC3BB002B5D1E /* atlantis.c in Sources */ = {isa = PBXBuildFile; fileRef = AF0839A909930C4900277BE9 /* atlantis.c */; settings = {COMPILER_FLAGS = "-DUSE_GL"; }; }; AF918A2C158FC3BB002B5D1E /* atunnel.c in Sources */ = {isa = PBXBuildFile; fileRef = AF083A31099311CE00277BE9 /* atunnel.c */; settings = {COMPILER_FLAGS = "-DUSE_GL"; }; }; AF918A2D158FC3BB002B5D1E /* b_draw.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA55AF409933DBF00F3E977 /* b_draw.c */; settings = {COMPILER_FLAGS = "-DUSE_GL"; }; }; AF918A2E158FC3BB002B5D1E /* b_lockglue.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA55AF509933DBF00F3E977 /* b_lockglue.c */; settings = {COMPILER_FLAGS = "-DUSE_GL"; }; }; AF918A2F158FC3BB002B5D1E /* b_sphere.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA55AF609933DBF00F3E977 /* b_sphere.c */; settings = {COMPILER_FLAGS = "-DUSE_GL"; }; }; AF918A30158FC3BB002B5D1E /* blinkbox.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA5616D09937C9A00F3E977 /* blinkbox.c */; settings = {COMPILER_FLAGS = "-DUSE_GL"; }; }; AF918A31158FC3BB002B5D1E /* blocktube.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA5602909936D0700F3E977 /* blocktube.c */; settings = {COMPILER_FLAGS = "-DUSE_GL"; }; }; AF918A32158FC3BB002B5D1E /* boing.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA562D40993930C00F3E977 /* boing.c */; settings = {COMPILER_FLAGS = "-DUSE_GL"; }; }; AF918A33158FC3BB002B5D1E /* bouncingcow.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA55EE70993613E00F3E977 /* bouncingcow.c */; settings = {COMPILER_FLAGS = "-DUSE_GL"; }; }; AF918A34158FC3BB002B5D1E /* boxed.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA55CBE09934C0900F3E977 /* boxed.c */; settings = {COMPILER_FLAGS = "-DUSE_GL"; }; }; AF918A35158FC3BB002B5D1E /* bubble3d.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA55AE409933D3800F3E977 /* bubble3d.c */; settings = {COMPILER_FLAGS = "-DUSE_GL"; }; }; AF918A36158FC3BB002B5D1E /* buildlwo.c in Sources */ = {isa = PBXBuildFile; fileRef = AF4812760990CF5D00FB32B8 /* buildlwo.c */; settings = {COMPILER_FLAGS = "-DUSE_GL"; }; }; AF918A37158FC3BB002B5D1E /* cage.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA5595D0993310500F3E977 /* cage.c */; settings = {COMPILER_FLAGS = "-DUSE_GL"; }; }; AF918A38158FC3BB002B5D1E /* carousel.c in Sources */ = {isa = PBXBuildFile; fileRef = AF77785E09B6530E00EA3033 /* carousel.c */; settings = {COMPILER_FLAGS = "-DUSE_GL"; }; }; AF918A39158FC3BB002B5D1E /* chessmodels.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA55E2309935F2B00F3E977 /* chessmodels.c */; settings = {COMPILER_FLAGS = "-DUSE_GL"; }; }; AF918A3A158FC3BB002B5D1E /* circuit.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA55BC00993416E00F3E977 /* circuit.c */; settings = {COMPILER_FLAGS = "-DUSE_GL"; }; }; AF918A3B158FC3BB002B5D1E /* cow_face.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA55EE80993613E00F3E977 /* cow_face.c */; settings = {COMPILER_FLAGS = "-DUSE_GL"; }; }; AF918A3C158FC3BB002B5D1E /* cow_hide.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA55EE90993613E00F3E977 /* cow_hide.c */; settings = {COMPILER_FLAGS = "-DUSE_GL"; }; }; AF918A3D158FC3BB002B5D1E /* cow_hoofs.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA55EEA0993613E00F3E977 /* cow_hoofs.c */; settings = {COMPILER_FLAGS = "-DUSE_GL"; }; }; AF918A3E158FC3BB002B5D1E /* cow_horns.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA55EEB0993613E00F3E977 /* cow_horns.c */; settings = {COMPILER_FLAGS = "-DUSE_GL"; }; }; AF918A3F158FC3BB002B5D1E /* cow_tail.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA55EEC0993613E00F3E977 /* cow_tail.c */; settings = {COMPILER_FLAGS = "-DUSE_GL"; }; }; AF918A40158FC3BB002B5D1E /* cow_udder.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA55EED0993613E00F3E977 /* cow_udder.c */; settings = {COMPILER_FLAGS = "-DUSE_GL"; }; }; AF918A41158FC3BB002B5D1E /* crackberg.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA563290993957100F3E977 /* crackberg.c */; settings = {COMPILER_FLAGS = "-DUSE_GL"; }; }; AF918A42158FC3BB002B5D1E /* cube21.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA563660993970F00F3E977 /* cube21.c */; settings = {COMPILER_FLAGS = "-DUSE_GL"; }; }; AF918A43158FC3BB002B5D1E /* cubenetic.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA55D770993589300F3E977 /* cubenetic.c */; settings = {COMPILER_FLAGS = "-DUSE_GL"; }; }; AF918A44158FC3BB002B5D1E /* cubestorm.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA55FF309936C4500F3E977 /* cubestorm.c */; settings = {COMPILER_FLAGS = "-DUSE_GL"; }; }; AF918A45158FC3BB002B5D1E /* cubicgrid.c in Sources */ = {isa = PBXBuildFile; fileRef = AF4FF4D00D52CC8400666F98 /* cubicgrid.c */; settings = {COMPILER_FLAGS = "-DUSE_GL"; }; }; AF918A46158FC3BB002B5D1E /* dangerball.c in Sources */ = {isa = PBXBuildFile; fileRef = AF480DD1098F4F6200FB32B8 /* dangerball.c */; settings = {COMPILER_FLAGS = "-DUSE_GL"; }; }; AF918A48158FC3BB002B5D1E /* dolphin.c in Sources */ = {isa = PBXBuildFile; fileRef = AF0839AA09930C4900277BE9 /* dolphin.c */; settings = {COMPILER_FLAGS = "-DUSE_GL"; }; }; AF918A49158FC3BB002B5D1E /* dropshadow.c in Sources */ = {isa = PBXBuildFile; fileRef = AF241F81107C38DF00046A84 /* dropshadow.c */; settings = {COMPILER_FLAGS = "-DUSE_GL"; }; }; AF918A4A158FC3E5002B5D1E /* endgame.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA55E2509935F2B00F3E977 /* endgame.c */; settings = {COMPILER_FLAGS = "-DUSE_GL"; }; }; AF918A4B158FC3E5002B5D1E /* engine.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA55C230993435300F3E977 /* engine.c */; settings = {COMPILER_FLAGS = "-DUSE_GL"; }; }; AF918A54158FC3E5002B5D1E /* flipflop.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA5604709936DCC00F3E977 /* flipflop.c */; settings = {COMPILER_FLAGS = "-DUSE_GL"; }; }; AF918A55158FC3E5002B5D1E /* flipscreen3d.c in Sources */ = {isa = PBXBuildFile; fileRef = AF77775409B644FF00EA3033 /* flipscreen3d.c */; settings = {COMPILER_FLAGS = "-DUSE_GL"; }; }; AF918A56158FC3E5002B5D1E /* fliptext.c in Sources */ = {isa = PBXBuildFile; fileRef = AF77780109B64EC000EA3033 /* fliptext.c */; settings = {COMPILER_FLAGS = "-DUSE_GL"; }; }; AF918A57158FC3E5002B5D1E /* flyingtoasters.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA55E980993608800F3E977 /* flyingtoasters.c */; settings = {COMPILER_FLAGS = "-DUSE_GL"; }; }; AF918A59158FC3E5002B5D1E /* fps-gl.c in Sources */ = {isa = PBXBuildFile; fileRef = AFBF89AE0E423FC3006A2D66 /* fps-gl.c */; settings = {COMPILER_FLAGS = "-DUSE_GL"; }; }; AF918A5A158FC3E5002B5D1E /* gears.c in Sources */ = {isa = PBXBuildFile; fileRef = AF4812250990CB8C00FB32B8 /* gears.c */; settings = {COMPILER_FLAGS = "-DUSE_GL"; }; }; AF918A5B158FC3E5002B5D1E /* gflux.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA55BA60993401A00F3E977 /* gflux.c */; settings = {COMPILER_FLAGS = "-DUSE_GL"; }; }; AF918A5C158FC3E5002B5D1E /* glblur.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA55E4509935FD300F3E977 /* glblur.c */; settings = {COMPILER_FLAGS = "-DUSE_GL"; }; }; AF918A5D158FC3E5002B5D1E /* glcells.c in Sources */ = {isa = PBXBuildFile; fileRef = AFF463710C440B9200EE6509 /* glcells.c */; settings = {COMPILER_FLAGS = "-DUSE_GL"; }; }; AF918A5E158FC3E5002B5D1E /* gleidescope.c in Sources */ = {isa = PBXBuildFile; fileRef = AF77778B09B64A2A00EA3033 /* gleidescope.c */; settings = {COMPILER_FLAGS = "-DUSE_GL"; }; }; AF918A60158FC3E5002B5D1E /* glhanoi.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA563460993963400F3E977 /* glhanoi.c */; settings = {COMPILER_FLAGS = "-DUSE_GL"; }; }; AF918A61158FC3E5002B5D1E /* glknots.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA5600E09936CB300F3E977 /* glknots.c */; settings = {COMPILER_FLAGS = "-DUSE_GL"; }; }; AF918A62158FC3E5002B5D1E /* glmatrix.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA55F870993648500F3E977 /* glmatrix.c */; settings = {COMPILER_FLAGS = "-DUSE_GL"; }; }; AF918A63158FC3E5002B5D1E /* glplanet.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA55B2109933E4A00F3E977 /* glplanet.c */; settings = {COMPILER_FLAGS = "-DUSE_GL"; }; }; AF918A64158FC3E5002B5D1E /* glschool.c in Sources */ = {isa = PBXBuildFile; fileRef = AF48E1660A0C268500F94CF9 /* glschool.c */; settings = {COMPILER_FLAGS = "-DUSE_GL"; }; }; AF918A65158FC3E5002B5D1E /* glschool_alg.c in Sources */ = {isa = PBXBuildFile; fileRef = AF48E1620A0C268400F94CF9 /* glschool_alg.c */; settings = {COMPILER_FLAGS = "-DUSE_GL"; }; }; AF918A66158FC3E5002B5D1E /* glschool_gl.c in Sources */ = {isa = PBXBuildFile; fileRef = AF48E1640A0C268500F94CF9 /* glschool_gl.c */; settings = {COMPILER_FLAGS = "-DUSE_GL"; }; }; AF918A67158FC3E5002B5D1E /* glslideshow.c in Sources */ = {isa = PBXBuildFile; fileRef = AF7777E709B64CF700EA3033 /* glslideshow.c */; settings = {COMPILER_FLAGS = "-DUSE_GL"; }; }; AF918A68158FC3E5002B5D1E /* glsnake.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA55C8C099349EE00F3E977 /* glsnake.c */; settings = {COMPILER_FLAGS = "-DUSE_GL"; }; }; AF918A69158FC3E5002B5D1E /* gltext.c in Sources */ = {isa = PBXBuildFile; fileRef = AFD56E080996A07A00BA26F7 /* gltext.c */; settings = {COMPILER_FLAGS = "-DUSE_GL"; }; }; AF918A6A158FC3E5002B5D1E /* hilbert.c in Sources */ = {isa = PBXBuildFile; fileRef = AF78D18A142DD96E002AAF77 /* hilbert.c */; settings = {COMPILER_FLAGS = "-DUSE_GL"; }; }; AF918A6B158FC3E5002B5D1E /* hypertorus.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA55F59099362DF00F3E977 /* hypertorus.c */; settings = {COMPILER_FLAGS = "-DUSE_GL"; }; }; AF918A6C158FC3E5002B5D1E /* hypnowheel.c in Sources */ = {isa = PBXBuildFile; fileRef = AF3C715D0D624C600030CC0D /* hypnowheel.c */; settings = {COMPILER_FLAGS = "-DUSE_GL"; }; }; AF918A6D158FC3E5002B5D1E /* involute.c in Sources */ = {isa = PBXBuildFile; fileRef = AFE6A16A0CDD78EA002805BF /* involute.c */; settings = {COMPILER_FLAGS = "-DUSE_GL"; }; }; AF918A6E158FC417002B5D1E /* jigglypuff.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA55F210993620200F3E977 /* jigglypuff.c */; settings = {COMPILER_FLAGS = "-DUSE_GL"; }; }; AF918A6F158FC417002B5D1E /* juggler3d.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA563B90993991300F3E977 /* juggler3d.c */; settings = {COMPILER_FLAGS = "-DUSE_GL"; }; }; AF918A70158FC417002B5D1E /* klein.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA55F3F0993626E00F3E977 /* klein.c */; settings = {COMPILER_FLAGS = "-DUSE_GL"; }; }; AF918A71158FC417002B5D1E /* lament.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA55A8E0993369100F3E977 /* lament.c */; settings = {COMPILER_FLAGS = "-DUSE_GL"; }; }; AF918A72158FC417002B5D1E /* lavalite.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA55DDD09935DB600F3E977 /* lavalite.c */; settings = {COMPILER_FLAGS = "-DUSE_GL"; }; }; AF918A74158FC417002B5D1E /* marching.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA55DE109935DFB00F3E977 /* marching.c */; settings = {COMPILER_FLAGS = "-DUSE_GL"; }; }; AF918A75158FC417002B5D1E /* menger.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA55BF9099342D500F3E977 /* menger.c */; settings = {COMPILER_FLAGS = "-DUSE_GL"; }; }; AF918A76158FC417002B5D1E /* mirrorblob.c in Sources */ = {isa = PBXBuildFile; fileRef = AF7777A509B64AFC00EA3033 /* mirrorblob.c */; settings = {COMPILER_FLAGS = "-DUSE_GL"; }; }; AF918A77158FC417002B5D1E /* moebius.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA55982099331C300F3E977 /* moebius.c */; settings = {COMPILER_FLAGS = "-DUSE_GL"; }; }; AF918A78158FC417002B5D1E /* moebiusgears.c in Sources */ = {isa = PBXBuildFile; fileRef = AFE6A40B0CDD7BC3002805BF /* moebiusgears.c */; settings = {COMPILER_FLAGS = "-DUSE_GL"; }; }; AF918A79158FC417002B5D1E /* molecule.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA561120993786800F3E977 /* molecule.c */; settings = {COMPILER_FLAGS = "-DUSE_GL"; }; }; AF918A7A158FC417002B5D1E /* morph3d.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA559CC099332E800F3E977 /* morph3d.c */; settings = {COMPILER_FLAGS = "-DUSE_GL"; }; }; AF918A7B158FC417002B5D1E /* noof.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA5619009937D3600F3E977 /* noof.c */; settings = {COMPILER_FLAGS = "-DUSE_GL"; }; }; AF918A7C158FC417002B5D1E /* photopile.c in Sources */ = {isa = PBXBuildFile; fileRef = AFD51DB60F063BCE00471C02 /* photopile.c */; settings = {COMPILER_FLAGS = "-DUSE_GL"; }; }; AF918A7D158FC417002B5D1E /* pinion.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA562340993856A00F3E977 /* pinion.c */; settings = {COMPILER_FLAGS = "-DUSE_GL"; }; }; AF918A7E158FC417002B5D1E /* pipeobjs.c in Sources */ = {isa = PBXBuildFile; fileRef = AF4812780990CF5D00FB32B8 /* pipeobjs.c */; settings = {COMPILER_FLAGS = "-DUSE_GL"; }; }; AF918A7F158FC417002B5D1E /* pipes.c in Sources */ = {isa = PBXBuildFile; fileRef = AF4812790990CF5D00FB32B8 /* pipes.c */; settings = {COMPILER_FLAGS = "-DUSE_GL"; }; }; AF918A82158FC417002B5D1E /* polytopes.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA560C3099371D500F3E977 /* polytopes.c */; settings = {COMPILER_FLAGS = "-DUSE_GL"; }; }; AF918A83158FC417002B5D1E /* providence.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA5621C099384F600F3E977 /* providence.c */; settings = {COMPILER_FLAGS = "-DUSE_GL"; }; }; AF918A84158FC417002B5D1E /* pulsar.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA55B3F09933EC600F3E977 /* pulsar.c */; settings = {COMPILER_FLAGS = "-DUSE_GL"; }; }; AF918A85158FC417002B5D1E /* queens.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA55E0609935EB800F3E977 /* queens.c */; settings = {COMPILER_FLAGS = "-DUSE_GL"; }; }; AF918A86158FC417002B5D1E /* rubik.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA559EA0993335C00F3E977 /* rubik.c */; settings = {COMPILER_FLAGS = "-DUSE_GL"; }; }; AF918A87158FC417002B5D1E /* rubikblocks.c in Sources */ = {isa = PBXBuildFile; fileRef = AF32D9FA0F3AD1200080F535 /* rubikblocks.c */; settings = {COMPILER_FLAGS = "-DUSE_GL"; }; }; AF918A88158FC417002B5D1E /* s1_1.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA55A400993351F00F3E977 /* s1_1.c */; settings = {COMPILER_FLAGS = "-DUSE_GL"; }; }; AF918A89158FC417002B5D1E /* s1_2.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA55A410993351F00F3E977 /* s1_2.c */; settings = {COMPILER_FLAGS = "-DUSE_GL"; }; }; AF918A8A158FC417002B5D1E /* s1_3.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA55A420993351F00F3E977 /* s1_3.c */; settings = {COMPILER_FLAGS = "-DUSE_GL"; }; }; AF918A8B158FC417002B5D1E /* s1_4.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA55A430993351F00F3E977 /* s1_4.c */; settings = {COMPILER_FLAGS = "-DUSE_GL"; }; }; AF918A8C158FC417002B5D1E /* s1_5.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA55A440993351F00F3E977 /* s1_5.c */; settings = {COMPILER_FLAGS = "-DUSE_GL"; }; }; AF918A8D158FC417002B5D1E /* s1_6.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA55A450993351F00F3E977 /* s1_6.c */; settings = {COMPILER_FLAGS = "-DUSE_GL"; }; }; AF918A8E158FC417002B5D1E /* s1_b.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA55A460993351F00F3E977 /* s1_b.c */; settings = {COMPILER_FLAGS = "-DUSE_GL"; }; }; AF918A8F158FC417002B5D1E /* sballs.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA55D510993569C00F3E977 /* sballs.c */; settings = {COMPILER_FLAGS = "-DUSE_GL"; }; }; AF918A90158FC417002B5D1E /* shark.c in Sources */ = {isa = PBXBuildFile; fileRef = AF0839AB09930C4900277BE9 /* shark.c */; settings = {COMPILER_FLAGS = "-DUSE_GL"; }; }; AF918A91158FC417002B5D1E /* sierpinski3d.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA55B8E09933FBF00F3E977 /* sierpinski3d.c */; settings = {COMPILER_FLAGS = "-DUSE_GL"; }; }; AF918A92158FC417002B5D1E /* skytentacles.c in Sources */ = {isa = PBXBuildFile; fileRef = AFE2A4720E2E90E300ADB298 /* skytentacles.c */; settings = {COMPILER_FLAGS = "-DUSE_GL"; }; }; AF918A93158FC417002B5D1E /* sonar-icmp.c in Sources */ = {isa = PBXBuildFile; fileRef = AFE30BFF0E52B1DC00CCF4A5 /* sonar-icmp.c */; settings = {COMPILER_FLAGS = "-DUSE_GL"; }; }; AF918A94158FC417002B5D1E /* sonar-sim.c in Sources */ = {isa = PBXBuildFile; fileRef = AFE30C000E52B1DC00CCF4A5 /* sonar-sim.c */; settings = {COMPILER_FLAGS = "-DUSE_GL"; }; }; AF918A95158FC417002B5D1E /* sonar.c in Sources */ = {isa = PBXBuildFile; fileRef = AFE30C010E52B1DC00CCF4A5 /* sonar.c */; settings = {COMPILER_FLAGS = "-DUSE_GL"; }; }; AF918A96158FC417002B5D1E /* spheremonics.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA55D940993590F00F3E977 /* spheremonics.c */; settings = {COMPILER_FLAGS = "-DUSE_GL"; }; }; AF918A97158FC473002B5D1E /* sproingies.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA55A470993351F00F3E977 /* sproingies.c */; settings = {COMPILER_FLAGS = "-DUSE_GL"; }; }; AF918A98158FC473002B5D1E /* sproingiewrap.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA55A480993351F00F3E977 /* sproingiewrap.c */; settings = {COMPILER_FLAGS = "-DUSE_GL"; }; }; AF918A99158FC473002B5D1E /* stairs.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA55A1A0993345900F3E977 /* stairs.c */; settings = {COMPILER_FLAGS = "-DUSE_GL"; }; }; AF918A9A158FC473002B5D1E /* starwars.c in Sources */ = {isa = PBXBuildFile; fileRef = AF77782809B650FF00EA3033 /* starwars.c */; settings = {COMPILER_FLAGS = "-DUSE_GL"; }; }; AF918A9B158FC473002B5D1E /* stonerview-move.c in Sources */ = {isa = PBXBuildFile; fileRef = AF7777BF09B64BD400EA3033 /* stonerview-move.c */; settings = {COMPILER_FLAGS = "-DUSE_GL"; }; }; AF918A9C158FC473002B5D1E /* stonerview-osc.c in Sources */ = {isa = PBXBuildFile; fileRef = AF7777C109B64BD400EA3033 /* stonerview-osc.c */; settings = {COMPILER_FLAGS = "-DUSE_GL"; }; }; AF918A9D158FC473002B5D1E /* stonerview-view.c in Sources */ = {isa = PBXBuildFile; fileRef = AF7777C309B64BD400EA3033 /* stonerview-view.c */; settings = {COMPILER_FLAGS = "-DUSE_GL"; }; }; AF918A9E158FC473002B5D1E /* stonerview.c in Sources */ = {isa = PBXBuildFile; fileRef = AF7777C409B64BD400EA3033 /* stonerview.c */; settings = {COMPILER_FLAGS = "-DUSE_GL"; }; }; AF918A9F158FC473002B5D1E /* superquadrics.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA559A80993326300F3E977 /* superquadrics.c */; settings = {COMPILER_FLAGS = "-DUSE_GL"; }; }; AF918AA0158FC473002B5D1E /* surfaces.c in Sources */ = {isa = PBXBuildFile; fileRef = AF4A3463102A5A0E00A81B2A /* surfaces.c */; settings = {COMPILER_FLAGS = "-DUSE_GL"; }; }; AF918AA1158FC473002B5D1E /* swim.c in Sources */ = {isa = PBXBuildFile; fileRef = AF0839AC09930C4900277BE9 /* swim.c */; settings = {COMPILER_FLAGS = "-DUSE_GL"; }; }; AF918AA2158FC473002B5D1E /* tangram.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA563090993948F00F3E977 /* tangram.c */; settings = {COMPILER_FLAGS = "-DUSE_GL"; }; }; AF918AA3158FC473002B5D1E /* tangram_shapes.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA563070993948F00F3E977 /* tangram_shapes.c */; settings = {COMPILER_FLAGS = "-DUSE_GL"; }; }; AF918AA4158FC473002B5D1E /* teapot.c in Sources */ = {isa = PBXBuildFile; fileRef = AFC211930E4E30C800D87B6E /* teapot.c */; settings = {COMPILER_FLAGS = "-DUSE_GL"; }; }; AF918AA5158FC473002B5D1E /* timetunnel.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA5638E0993980D00F3E977 /* timetunnel.c */; settings = {COMPILER_FLAGS = "-DUSE_GL"; }; }; AF918AA6158FC473002B5D1E /* toast.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA55E990993608800F3E977 /* toast.c */; settings = {COMPILER_FLAGS = "-DUSE_GL"; }; }; AF918AA7158FC473002B5D1E /* toast2.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA55E9B0993608800F3E977 /* toast2.c */; settings = {COMPILER_FLAGS = "-DUSE_GL"; }; }; AF918AA8158FC473002B5D1E /* toaster.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA55EAB0993608800F3E977 /* toaster.c */; settings = {COMPILER_FLAGS = "-DUSE_GL"; }; }; AF918AA9158FC473002B5D1E /* toaster_base.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA55E9D0993608800F3E977 /* toaster_base.c */; settings = {COMPILER_FLAGS = "-DUSE_GL"; }; }; AF918AAA158FC473002B5D1E /* toaster_handle.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA55E9F0993608800F3E977 /* toaster_handle.c */; settings = {COMPILER_FLAGS = "-DUSE_GL"; }; }; AF918AAB158FC473002B5D1E /* toaster_handle2.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA55EA10993608800F3E977 /* toaster_handle2.c */; settings = {COMPILER_FLAGS = "-DUSE_GL"; }; }; AF918AAC158FC473002B5D1E /* toaster_jet.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA55EA30993608800F3E977 /* toaster_jet.c */; settings = {COMPILER_FLAGS = "-DUSE_GL"; }; }; AF918AAD158FC473002B5D1E /* toaster_knob.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA55EA50993608800F3E977 /* toaster_knob.c */; settings = {COMPILER_FLAGS = "-DUSE_GL"; }; }; AF918AAE158FC473002B5D1E /* toaster_slots.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA55EA70993608800F3E977 /* toaster_slots.c */; settings = {COMPILER_FLAGS = "-DUSE_GL"; }; }; AF918AAF158FC473002B5D1E /* toaster_wing.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA55EA90993608800F3E977 /* toaster_wing.c */; settings = {COMPILER_FLAGS = "-DUSE_GL"; }; }; AF918AB0158FC473002B5D1E /* topblock.c in Sources */ = {isa = PBXBuildFile; fileRef = AF998EF80A083E750051049D /* topblock.c */; settings = {COMPILER_FLAGS = "-DUSE_GL"; }; }; AF918AB1158FC47B002B5D1E /* tunnel_draw.c in Sources */ = {isa = PBXBuildFile; fileRef = AF083A58099312B000277BE9 /* tunnel_draw.c */; settings = {COMPILER_FLAGS = "-DUSE_GL"; }; }; AF918AB2158FC47B002B5D1E /* voronoi.c in Sources */ = {isa = PBXBuildFile; fileRef = AF0DCA5F0C4CBB7300D76972 /* voronoi.c */; settings = {COMPILER_FLAGS = "-DUSE_GL"; }; }; AF918AB3158FC47B002B5D1E /* whale.c in Sources */ = {isa = PBXBuildFile; fileRef = AF0839AD09930C4900277BE9 /* whale.c */; settings = {COMPILER_FLAGS = "-DUSE_GL"; }; }; AF918AB4158FC53D002B5D1E /* abstractile.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFE6A4360CDD8026002805BF /* abstractile.xml */; }; AF918AB5158FC53D002B5D1E /* anemone.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258680988A468000655EE /* anemone.xml */; }; AF918AB6158FC53D002B5D1E /* anemotaxis.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258690988A468000655EE /* anemotaxis.xml */; }; AF918AB8158FC53D002B5D1E /* antinspect.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC2586B0988A468000655EE /* antinspect.xml */; }; AF918AB9158FC53D002B5D1E /* antmaze.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC2586C0988A468000655EE /* antmaze.xml */; }; AF918ABA158FC53D002B5D1E /* antspotlight.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC2586D0988A468000655EE /* antspotlight.xml */; }; AF918ABB158FC53D002B5D1E /* apollonian.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC2586E0988A468000655EE /* apollonian.xml */; }; AF918ABC158FC53D002B5D1E /* apple2.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC2586F0988A468000655EE /* apple2.xml */; }; AF918ABD158FC53D002B5D1E /* atlantis.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258700988A468000655EE /* atlantis.xml */; }; AF918ABE158FC53D002B5D1E /* attraction.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258710988A468000655EE /* attraction.xml */; }; AF918ABF158FC53D002B5D1E /* atunnel.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258720988A468000655EE /* atunnel.xml */; }; AF918AC0158FC53D002B5D1E /* barcode.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258730988A468000655EE /* barcode.xml */; }; AF918AC1158FC53D002B5D1E /* blaster.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258740988A468000655EE /* blaster.xml */; }; AF918AC2158FC53D002B5D1E /* blinkbox.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258750988A468000655EE /* blinkbox.xml */; }; AF918AC3158FC53D002B5D1E /* blitspin.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258760988A468000655EE /* blitspin.xml */; }; AF918AC4158FC53D002B5D1E /* blocktube.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258770988A468000655EE /* blocktube.xml */; }; AF918AC5158FC53D002B5D1E /* boing.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258780988A468000655EE /* boing.xml */; }; AF918AC6158FC53D002B5D1E /* bouboule.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258790988A468000655EE /* bouboule.xml */; }; AF918AC7158FC53D002B5D1E /* bouncingcow.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC2587A0988A468000655EE /* bouncingcow.xml */; }; AF918AC8158FC53D002B5D1E /* boxed.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC2587B0988A468000655EE /* boxed.xml */; }; AF918AC9158FC53D002B5D1E /* boxfit.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC2587C0988A468000655EE /* boxfit.xml */; }; AF918ACA158FC53D002B5D1E /* braid.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC2587D0988A468000655EE /* braid.xml */; }; AF918ACB158FC53D002B5D1E /* bsod.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC2587E0988A468000655EE /* bsod.xml */; }; AF918ACC158FC53D002B5D1E /* bubble3d.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC2587F0988A468000655EE /* bubble3d.xml */; }; AF918ACE158FC53D002B5D1E /* bumps.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258810988A468000655EE /* bumps.xml */; }; AF918ACF158FC53D002B5D1E /* cage.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258820988A468000655EE /* cage.xml */; }; AF918AD0158FC53D002B5D1E /* carousel.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258830988A468000655EE /* carousel.xml */; }; AF918AD1158FC53D002B5D1E /* ccurve.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258840988A468000655EE /* ccurve.xml */; }; AF918AD2158FC53D002B5D1E /* celtic.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258850988A468000655EE /* celtic.xml */; }; AF918AD3158FC53D002B5D1E /* circuit.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258860988A468000655EE /* circuit.xml */; }; AF918AD4158FC53D002B5D1E /* cloudlife.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258870988A468000655EE /* cloudlife.xml */; }; AF918AD5158FC53D002B5D1E /* companioncube.xml in Resources */ = {isa = PBXBuildFile; fileRef = AF3581E61431D61D00E09C51 /* companioncube.xml */; }; AF918AD6158FC53D002B5D1E /* compass.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258880988A468000655EE /* compass.xml */; }; AF918AD7158FC53D002B5D1E /* coral.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258890988A468000655EE /* coral.xml */; }; AF918AD8158FC53D002B5D1E /* crackberg.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC2588B0988A468000655EE /* crackberg.xml */; }; AF918ADA158FC53D002B5D1E /* crystal.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC2588D0988A468000655EE /* crystal.xml */; }; AF918ADB158FC53D002B5D1E /* cube21.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC2588E0988A468000655EE /* cube21.xml */; }; AF918ADC158FC53D002B5D1E /* cubenetic.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC2588F0988A468000655EE /* cubenetic.xml */; }; AF918ADD158FC53D002B5D1E /* cubestorm.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258900988A468000655EE /* cubestorm.xml */; }; AF918ADE158FC53D002B5D1E /* cubicgrid.xml in Resources */ = {isa = PBXBuildFile; fileRef = AF4FF4D30D52CCAA00666F98 /* cubicgrid.xml */; }; AF918ADF158FC53D002B5D1E /* cwaves.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFF4634B0C44046500EE6509 /* cwaves.xml */; }; AF918AE0158FC53D002B5D1E /* cynosure.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258910988A468000655EE /* cynosure.xml */; }; AF918AE1158FC53D002B5D1E /* dangerball.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258920988A468000655EE /* dangerball.xml */; }; AF918AE2158FC53D002B5D1E /* decayscreen.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258930988A468000655EE /* decayscreen.xml */; }; AF918AE3158FC53D002B5D1E /* deco.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258940988A468000655EE /* deco.xml */; }; AF918AE4158FC53D002B5D1E /* deluxe.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258950988A468000655EE /* deluxe.xml */; }; AF918AE5158FC53D002B5D1E /* demon.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258960988A468000655EE /* demon.xml */; }; AF918AE6158FC53D002B5D1E /* discrete.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258970988A468000655EE /* discrete.xml */; }; AF918AE7158FC53D002B5D1E /* distort.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258980988A468000655EE /* distort.xml */; }; AF918AE9158FC53D002B5D1E /* drift.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258990988A468000655EE /* drift.xml */; }; AF918AEA158FC53D002B5D1E /* endgame.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC2589B0988A468000655EE /* endgame.xml */; }; AF918AEB158FC53D002B5D1E /* engine.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC2589C0988A468000655EE /* engine.xml */; }; AF918AEC158FC53D002B5D1E /* epicycle.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC2589D0988A468000655EE /* epicycle.xml */; }; AF918AED158FC53D002B5D1E /* eruption.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC2589E0988A468000655EE /* eruption.xml */; }; AF918AEE158FC53D002B5D1E /* euler2d.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC2589F0988A468000655EE /* euler2d.xml */; }; AF918AF0158FC53D002B5D1E /* fadeplot.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258A10988A468000655EE /* fadeplot.xml */; }; AF918AF1158FC53D002B5D1E /* fiberlamp.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258A20988A468000655EE /* fiberlamp.xml */; }; AF918AF2158FC53D002B5D1E /* fireworkx.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258A40988A468000655EE /* fireworkx.xml */; }; AF918AF4158FC53D002B5D1E /* flame.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258A60988A468000655EE /* flame.xml */; }; AF918AF5158FC53D002B5D1E /* flipflop.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258A70988A468000655EE /* flipflop.xml */; }; AF918AF6158FC53D002B5D1E /* flipscreen3d.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258A80988A468000655EE /* flipscreen3d.xml */; }; AF918AF7158FC53D002B5D1E /* fliptext.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258A90988A468000655EE /* fliptext.xml */; }; AF918AF8158FC53D002B5D1E /* flow.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258AA0988A468000655EE /* flow.xml */; }; AF918AF9158FC53D002B5D1E /* fluidballs.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258AB0988A468000655EE /* fluidballs.xml */; }; AF918AFB158FC53D002B5D1E /* flyingtoasters.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258AD0988A468000655EE /* flyingtoasters.xml */; }; AF918AFC158FC53D002B5D1E /* fontglide.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258AE0988A468000655EE /* fontglide.xml */; }; AF918AFE158FC53D002B5D1E /* fuzzyflakes.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258B00988A468000655EE /* fuzzyflakes.xml */; }; AF918AFF158FC53D002B5D1E /* galaxy.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258B10988A468000655EE /* galaxy.xml */; }; AF918B00158FC53D002B5D1E /* gears.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258B20988A468000655EE /* gears.xml */; }; AF918B01158FC53D002B5D1E /* gflux.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258B30988A468000655EE /* gflux.xml */; }; AF918B02158FC53D002B5D1E /* glblur.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258B40988A468000655EE /* glblur.xml */; }; AF918B03158FC53D002B5D1E /* glcells.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFF463730C440BAC00EE6509 /* glcells.xml */; }; AF918B04158FC53D002B5D1E /* gleidescope.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258B50988A468000655EE /* gleidescope.xml */; }; AF918B06158FC53D002B5D1E /* glhanoi.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258B70988A468000655EE /* glhanoi.xml */; }; AF918B07158FC53D002B5D1E /* glknots.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258B80988A468000655EE /* glknots.xml */; }; AF918B08158FC53D002B5D1E /* glmatrix.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258B90988A468000655EE /* glmatrix.xml */; }; AF918B09158FC53D002B5D1E /* glplanet.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258BA0988A468000655EE /* glplanet.xml */; }; AF918B0A158FC53D002B5D1E /* glschool.xml in Resources */ = {isa = PBXBuildFile; fileRef = AF48E16B0A0C26A400F94CF9 /* glschool.xml */; }; AF918B0B158FC53D002B5D1E /* glslideshow.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258BB0988A468000655EE /* glslideshow.xml */; }; AF918B0C158FC53D002B5D1E /* glsnake.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258BC0988A468000655EE /* glsnake.xml */; }; AF918B0D158FC53D002B5D1E /* gltext.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258BD0988A468000655EE /* gltext.xml */; }; AF918B0E158FC53D002B5D1E /* goop.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258BF0988A468000655EE /* goop.xml */; }; AF918B0F158FC53D002B5D1E /* grav.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258C00988A468000655EE /* grav.xml */; }; AF918B10158FC53D002B5D1E /* greynetic.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258C10988A468000655EE /* greynetic.xml */; }; AF918B11158FC53D002B5D1E /* halftone.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258C20988A468000655EE /* halftone.xml */; }; AF918B12158FC53D002B5D1E /* halo.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258C30988A468000655EE /* halo.xml */; }; AF918B13158FC53D002B5D1E /* helix.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258C40988A468000655EE /* helix.xml */; }; AF918B14158FC53D002B5D1E /* hilbert.xml in Resources */ = {isa = PBXBuildFile; fileRef = AF78D18E142DD99A002AAF77 /* hilbert.xml */; }; AF918B15158FC53D002B5D1E /* hopalong.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258C50988A468000655EE /* hopalong.xml */; }; AF918B18158FC53D002B5D1E /* hypertorus.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258C80988A468000655EE /* hypertorus.xml */; }; AF918B19158FC53D002B5D1E /* hypnowheel.xml in Resources */ = {isa = PBXBuildFile; fileRef = AF3C715F0D624C7C0030CC0D /* hypnowheel.xml */; }; AF918B1A158FC53D002B5D1E /* ifs.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258C90988A468000655EE /* ifs.xml */; }; AF918B1B158FC53D002B5D1E /* imsmap.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258CA0988A468000655EE /* imsmap.xml */; }; AF918B1C158FC53D002B5D1E /* interaggregate.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258CB0988A468000655EE /* interaggregate.xml */; }; AF918B1D158FC53D002B5D1E /* interference.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258CC0988A468000655EE /* interference.xml */; }; AF918B1E158FC53D002B5D1E /* intermomentary.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258CD0988A468000655EE /* intermomentary.xml */; }; AF918B1F158FC53D002B5D1E /* jigglypuff.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258CE0988A468000655EE /* jigglypuff.xml */; }; AF918B22158FC53D002B5D1E /* juggler3d.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258D10988A468000655EE /* juggler3d.xml */; }; AF918B23158FC53D002B5D1E /* julia.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258D20988A468000655EE /* julia.xml */; }; AF918B24158FC53D002B5D1E /* kaleidescope.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258D30988A468000655EE /* kaleidescope.xml */; }; AF918B25158FC53D002B5D1E /* klein.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258D40988A468000655EE /* klein.xml */; }; AF918B26158FC53D002B5D1E /* kumppa.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258D50988A468000655EE /* kumppa.xml */; }; AF918B27158FC53D002B5D1E /* lament.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258D60988A468000655EE /* lament.xml */; }; AF918B29158FC53D002B5D1E /* lavalite.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258D80988A468000655EE /* lavalite.xml */; }; AF918B30158FC53D002B5D1E /* loop.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258DD0988A468000655EE /* loop.xml */; }; AF918B31158FC53D002B5D1E /* m6502.xml in Resources */ = {isa = PBXBuildFile; fileRef = AF0DCA370C4C74B700D76972 /* m6502.xml */; }; AF918B32158FC53D002B5D1E /* maze.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258DE0988A468000655EE /* maze.xml */; }; AF918B33158FC53D002B5D1E /* memscroller.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258DF0988A469000655EE /* memscroller.xml */; }; AF918B34158FC53D002B5D1E /* menger.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258E00988A469000655EE /* menger.xml */; }; AF918B35158FC53D002B5D1E /* metaballs.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258E10988A469000655EE /* metaballs.xml */; }; AF918B36158FC53D002B5D1E /* mirrorblob.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258E20988A469000655EE /* mirrorblob.xml */; }; AF918B38158FC53D002B5D1E /* moebius.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258E40988A469000655EE /* moebius.xml */; }; AF918B39158FC53D002B5D1E /* moebiusgears.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFE6A40D0CDD7BDC002805BF /* moebiusgears.xml */; }; AF918B3A158FC53D002B5D1E /* moire.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258E50988A469000655EE /* moire.xml */; }; AF918B3B158FC53D002B5D1E /* moire2.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258E60988A469000655EE /* moire2.xml */; }; AF918B3C158FC53D002B5D1E /* molecule.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258E70988A469000655EE /* molecule.xml */; }; AF918B3D158FC53D002B5D1E /* morph3d.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258E80988A469000655EE /* morph3d.xml */; }; AF918B3E158FC53D002B5D1E /* mountain.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258E90988A469000655EE /* mountain.xml */; }; AF918B3F158FC53D002B5D1E /* munch.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258EA0988A469000655EE /* munch.xml */; }; AF918B40158FC53D002B5D1E /* nerverot.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258EB0988A469000655EE /* nerverot.xml */; }; AF918B41158FC53D002B5D1E /* noof.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258EC0988A469000655EE /* noof.xml */; }; AF918B42158FC53D002B5D1E /* noseguy.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258ED0988A469000655EE /* noseguy.xml */; }; AF918B43158FC53D002B5D1E /* pacman.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258EE0988A469000655EE /* pacman.xml */; }; AF918B44158FC53D002B5D1E /* pedal.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258EF0988A469000655EE /* pedal.xml */; }; AF918B45158FC53D002B5D1E /* penetrate.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258F00988A469000655EE /* penetrate.xml */; }; AF918B46158FC53D002B5D1E /* penrose.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258F10988A469000655EE /* penrose.xml */; }; AF918B47158FC53D002B5D1E /* petri.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258F20988A469000655EE /* petri.xml */; }; AF918B48158FC53E002B5D1E /* phosphor.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258F30988A469000655EE /* phosphor.xml */; }; AF918B49158FC53E002B5D1E /* photopile.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFD51DB80F063BE700471C02 /* photopile.xml */; }; AF918B4A158FC53E002B5D1E /* piecewise.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258F40988A469000655EE /* piecewise.xml */; }; AF918B4B158FC53E002B5D1E /* pinion.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258F50988A469000655EE /* pinion.xml */; }; AF918B4C158FC53E002B5D1E /* pipes.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258F60988A469000655EE /* pipes.xml */; }; AF918B4E158FC53E002B5D1E /* polyominoes.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258F80988A469000655EE /* polyominoes.xml */; }; AF918B4F158FC53E002B5D1E /* polytopes.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258F90988A469000655EE /* polytopes.xml */; }; AF918B50158FC53E002B5D1E /* pong.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258FA0988A469000655EE /* pong.xml */; }; AF918B51158FC53E002B5D1E /* popsquares.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258FB0988A469000655EE /* popsquares.xml */; }; AF918B52158FC53E002B5D1E /* providence.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258FC0988A469000655EE /* providence.xml */; }; AF918B53158FC53E002B5D1E /* pulsar.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258FD0988A469000655EE /* pulsar.xml */; }; AF918B54158FC53E002B5D1E /* pyro.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258FE0988A469000655EE /* pyro.xml */; }; AF918B55158FC53E002B5D1E /* qix.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258FF0988A469000655EE /* qix.xml */; }; AF918B56158FC53E002B5D1E /* queens.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC259000988A469000655EE /* queens.xml */; }; AF918B57158FC53E002B5D1E /* rdbomb.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFCCCBAD09BFE4B000353F4D /* rdbomb.xml */; }; AF918B58158FC53E002B5D1E /* ripples.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC259030988A469000655EE /* ripples.xml */; }; AF918B59158FC53E002B5D1E /* rocks.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC259040988A469000655EE /* rocks.xml */; }; AF918B5A158FC53E002B5D1E /* rorschach.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC259050988A469000655EE /* rorschach.xml */; }; AF918B5C158FC53E002B5D1E /* rotzoomer.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC259070988A469000655EE /* rotzoomer.xml */; }; AF918B5D158FC53E002B5D1E /* rubik.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC259080988A469000655EE /* rubik.xml */; }; AF918B5E158FC53E002B5D1E /* rubikblocks.xml in Resources */ = {isa = PBXBuildFile; fileRef = AF32D9FC0F3AD1330080F535 /* rubikblocks.xml */; }; AF918B5F158FC53E002B5D1E /* sballs.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC259090988A469000655EE /* sballs.xml */; }; AF918B60158FC53E002B5D1E /* shadebobs.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC2590A0988A469000655EE /* shadebobs.xml */; }; AF918B61158FC53E002B5D1E /* sierpinski.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC2590B0988A469000655EE /* sierpinski.xml */; }; AF918B62158FC53E002B5D1E /* sierpinski3d.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC2590C0988A469000655EE /* sierpinski3d.xml */; }; AF918B63158FC53E002B5D1E /* skytentacles.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFE2A4740E2E911200ADB298 /* skytentacles.xml */; }; AF918B64158FC53E002B5D1E /* slidescreen.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC2590D0988A469000655EE /* slidescreen.xml */; }; AF918B65158FC53E002B5D1E /* slip.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC2590E0988A469000655EE /* slip.xml */; }; AF918B66158FC53E002B5D1E /* sonar.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC2590F0988A469000655EE /* sonar.xml */; }; AF918B67158FC53E002B5D1E /* speedmine.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC259100988A469000655EE /* speedmine.xml */; }; AF918B69158FC53E002B5D1E /* spheremonics.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC259130988A469000655EE /* spheremonics.xml */; }; AF918B6B158FC53E002B5D1E /* spotlight.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC259150988A469000655EE /* spotlight.xml */; }; AF918B6C158FC53E002B5D1E /* sproingies.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC259160988A469000655EE /* sproingies.xml */; }; AF918B6D158FC53E002B5D1E /* squiral.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC259170988A469000655EE /* squiral.xml */; }; AF918B6E158FC53E002B5D1E /* stairs.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC259190988A469000655EE /* stairs.xml */; }; AF918B6F158FC53E002B5D1E /* starfish.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC2591A0988A469000655EE /* starfish.xml */; }; AF918B70158FC53E002B5D1E /* starwars.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC2591B0988A469000655EE /* starwars.xml */; }; AF918B71158FC53E002B5D1E /* stonerview.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC2591C0988A469000655EE /* stonerview.xml */; }; AF918B72158FC53E002B5D1E /* strange.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC2591D0988A469000655EE /* strange.xml */; }; AF918B73158FC53E002B5D1E /* substrate.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC2591E0988A469000655EE /* substrate.xml */; }; AF918B74158FC53E002B5D1E /* superquadrics.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC2591F0988A469000655EE /* superquadrics.xml */; }; AF918B75158FC53E002B5D1E /* surfaces.xml in Resources */ = {isa = PBXBuildFile; fileRef = AF4A3461102A59EB00A81B2A /* surfaces.xml */; }; AF918B76158FC53E002B5D1E /* swirl.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC259200988A469000655EE /* swirl.xml */; }; AF918B78158FC53E002B5D1E /* tangram.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC259220988A469000655EE /* tangram.xml */; }; AF918B79158FC53E002B5D1E /* thornbird.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC259230988A469000655EE /* thornbird.xml */; }; AF918B7A158FC53E002B5D1E /* timetunnel.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC259240988A469000655EE /* timetunnel.xml */; }; AF918B7B158FC53E002B5D1E /* topblock.xml in Resources */ = {isa = PBXBuildFile; fileRef = AF998EFA0A083E8C0051049D /* topblock.xml */; }; AF918B7C158FC53E002B5D1E /* triangle.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC259250988A469000655EE /* triangle.xml */; }; AF918B7D158FC53E002B5D1E /* tronbit.xml in Resources */ = {isa = PBXBuildFile; fileRef = AF3582211433318500E09C51 /* tronbit.xml */; }; AF918B7E158FC53E002B5D1E /* truchet.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC259260988A469000655EE /* truchet.xml */; }; AF918B7F158FC53E002B5D1E /* twang.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC259270988A469000655EE /* twang.xml */; }; AF918B80158FC53E002B5D1E /* vermiculate.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC259280988A469000655EE /* vermiculate.xml */; }; AF918B83158FC53E002B5D1E /* voronoi.xml in Resources */ = {isa = PBXBuildFile; fileRef = AF0DCA610C4CBB8E00D76972 /* voronoi.xml */; }; AF918B84158FC53E002B5D1E /* wander.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC2592B0988A469000655EE /* wander.xml */; }; AF918B86158FC53E002B5D1E /* whirlwindwarp.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC2592D0988A469000655EE /* whirlwindwarp.xml */; }; AF918B89158FC53E002B5D1E /* wormhole.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC259310988A469000655EE /* wormhole.xml */; }; AF918B8A158FC53E002B5D1E /* xanalogtv.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC259320988A469000655EE /* xanalogtv.xml */; }; AF918B8B158FC53E002B5D1E /* xflame.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC259370988A469000655EE /* xflame.xml */; }; AF918B8C158FC53E002B5D1E /* xjack.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC259380988A469000655EE /* xjack.xml */; }; AF918B8D158FC53E002B5D1E /* xlyap.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC259390988A469000655EE /* xlyap.xml */; }; AF918B8E158FC53E002B5D1E /* xmatrix.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC2593A0988A469000655EE /* xmatrix.xml */; }; AF918B8F158FC53E002B5D1E /* xrayswarm.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC2593D0988A469000655EE /* xrayswarm.xml */; }; AF918B90158FC53E002B5D1E /* xspirograph.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC2593F0988A469000655EE /* xspirograph.xml */; }; AF918B91158FC554002B5D1E /* zoom.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC259430988A469000655EE /* zoom.xml */; }; AF918B96158FD0EA002B5D1E /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF918B99158FF045002B5D1E /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF918B9A158FF04C002B5D1E /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF975734099C317000B05160 /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF97573F099C31BB00B05160 /* imsmap.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258CA0988A468000655EE /* imsmap.xml */; }; AF975741099C31DD00B05160 /* imsmap.c in Sources */ = {isa = PBXBuildFile; fileRef = AF975740099C31DD00B05160 /* imsmap.c */; }; AF97577B099C374A00B05160 /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF975788099C378B00B05160 /* moire.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258E50988A469000655EE /* moire.xml */; }; AF97578A099C37A500B05160 /* moire.c in Sources */ = {isa = PBXBuildFile; fileRef = AF975789099C37A500B05160 /* moire.c */; }; AF9757C8099C3E6300B05160 /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF9757D6099C3EB800B05160 /* rd-bomb.c in Sources */ = {isa = PBXBuildFile; fileRef = AF9757D5099C3EB800B05160 /* rd-bomb.c */; }; AF97580E099C41D500B05160 /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF97581B099C423600B05160 /* xflame.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC259370988A469000655EE /* xflame.xml */; }; AF975830099C427500B05160 /* xflame.c in Sources */ = {isa = PBXBuildFile; fileRef = AF97582F099C427500B05160 /* xflame.c */; }; AF97586B099C475900B05160 /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF975879099C490500B05160 /* shadebobs.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC2590A0988A469000655EE /* shadebobs.xml */; }; AF97587B099C492000B05160 /* shadebobs.c in Sources */ = {isa = PBXBuildFile; fileRef = AF97587A099C492000B05160 /* shadebobs.c */; }; AF975A3C099C681F00B05160 /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF975A48099C688B00B05160 /* metaballs.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258E10988A469000655EE /* metaballs.xml */; }; AF975A4A099C689F00B05160 /* metaballs.c in Sources */ = {isa = PBXBuildFile; fileRef = AF975A49099C689F00B05160 /* metaballs.c */; }; AF975A72099C6AB200B05160 /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF975A82099C6B2700B05160 /* eruption.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC2589E0988A468000655EE /* eruption.xml */; }; AF975A84099C6B4900B05160 /* eruption.c in Sources */ = {isa = PBXBuildFile; fileRef = AF975A83099C6B4900B05160 /* eruption.c */; }; AF975A8C099C6BC300B05160 /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF975A98099C6C2000B05160 /* barcode.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258730988A468000655EE /* barcode.xml */; }; AF975A9A099C6C3600B05160 /* barcode.c in Sources */ = {isa = PBXBuildFile; fileRef = AF975A99099C6C3500B05160 /* barcode.c */; }; AF975ADD099C6EB100B05160 /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF975AED099C6EFE00B05160 /* fireworkx.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258A40988A468000655EE /* fireworkx.xml */; }; AF975AEF099C6F1700B05160 /* fireworkx.c in Sources */ = {isa = PBXBuildFile; fileRef = AF975AEE099C6F1700B05160 /* fireworkx.c */; }; AF975B02099C6FE400B05160 /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF975B15099C709E00B05160 /* memscroller.c in Sources */ = {isa = PBXBuildFile; fileRef = AF975B14099C709E00B05160 /* memscroller.c */; }; AF975B16099C70B200B05160 /* memscroller.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258DF0988A469000655EE /* memscroller.xml */; }; AF975C18099C8C1500B05160 /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF975C28099C8C6A00B05160 /* halo.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258C30988A468000655EE /* halo.xml */; }; AF975C29099C8C7600B05160 /* halo.c in Sources */ = {isa = PBXBuildFile; fileRef = AF480C29098E295D00FB32B8 /* halo.c */; }; AF975C44099C8DCF00B05160 /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF975C55099C8E2800B05160 /* greynetic.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258C10988A468000655EE /* greynetic.xml */; }; AF975C56099C8E3000B05160 /* greynetic.c in Sources */ = {isa = PBXBuildFile; fileRef = AF480C21098E28EF00FB32B8 /* greynetic.c */; }; AF975C64099C8F3F00B05160 /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF975C75099C8FAC00B05160 /* noseguy.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258ED0988A469000655EE /* noseguy.xml */; }; AF975C77099C8FC700B05160 /* noseguy.c in Sources */ = {isa = PBXBuildFile; fileRef = AF975C76099C8FC700B05160 /* noseguy.c */; }; AF975C93099C929800B05160 /* xpm-pixmap.c in Sources */ = {isa = PBXBuildFile; fileRef = AF975C91099C929800B05160 /* xpm-pixmap.c */; }; AF975C94099C929800B05160 /* xpm-pixmap.h in Headers */ = {isa = PBXBuildFile; fileRef = AF975C92099C929800B05160 /* xpm-pixmap.h */; }; AF975D59099CA0F000B05160 /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF975D65099CA14B00B05160 /* rocks.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC259040988A469000655EE /* rocks.xml */; }; AF975D67099CA16A00B05160 /* rocks.c in Sources */ = {isa = PBXBuildFile; fileRef = AF975D66099CA16A00B05160 /* rocks.c */; }; AF976FCC0989CAD7001F8B92 /* deco.c in Sources */ = {isa = PBXBuildFile; fileRef = AFC25B5E0988BA63000655EE /* deco.c */; }; AF976FCD0989CAEA001F8B92 /* deco.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258940988A468000655EE /* deco.xml */; }; AF9770420989D21A001F8B92 /* rorschach.c in Sources */ = {isa = PBXBuildFile; fileRef = AFE1FD620981E40800F7970E /* rorschach.c */; }; AF9770430989D226001F8B92 /* rorschach.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC259050988A469000655EE /* rorschach.xml */; }; AF97707F0989D327001F8B92 /* attraction.c in Sources */ = {isa = PBXBuildFile; fileRef = AF976DFA09896BEB001F8B92 /* attraction.c */; }; AF9770800989D32E001F8B92 /* attraction.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258710988A468000655EE /* attraction.xml */; }; AF9771DF0989DC88001F8B92 /* SaverRunner.m in Sources */ = {isa = PBXBuildFile; fileRef = AFE1FD400981E32E00F7970E /* SaverRunner.m */; }; AF9772C80989DCD5001F8B92 /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 29B97316FDCFA39411CA2CEA /* main.m */; }; AF9772E30989DFC6001F8B92 /* SaverRunner.nib in Resources */ = {isa = PBXBuildFile; fileRef = AF9772E10989DFC6001F8B92 /* SaverRunner.nib */; }; AF998ED60A083A280051049D /* xscreensaver-text in Resources */ = {isa = PBXBuildFile; fileRef = AF0FAF0B09CA6FF900EE1051 /* xscreensaver-text */; }; AF998EE10A083DB30051049D /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF998EF90A083E750051049D /* topblock.c in Sources */ = {isa = PBXBuildFile; fileRef = AF998EF80A083E750051049D /* topblock.c */; }; AF998EFB0A083E8C0051049D /* topblock.xml in Resources */ = {isa = PBXBuildFile; fileRef = AF998EFA0A083E8C0051049D /* topblock.xml */; }; AF9CC7A1099580E70075E99B /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF9CC8EE09958D920075E99B /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF9CCAB509959CEF0075E99B /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF9CCAB609959CF70075E99B /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF9CCAB709959D000075E99B /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF9CCAB809959D0D0075E99B /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF9CCAB909959D100075E99B /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF9CCABA09959D170075E99B /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF9CCABB09959D1C0075E99B /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF9CCABC09959D200075E99B /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF9CCABD09959D250075E99B /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF9CCABE09959D290075E99B /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF9CCABF09959D2E0075E99B /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF9CCAC009959D310075E99B /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF9CCAC109959D380075E99B /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF9CCAC209959D3C0075E99B /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF9CCAC309959D420075E99B /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF9CCAC409959D450075E99B /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF9CCAC509959D4B0075E99B /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF9CCAC609959D500075E99B /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF9CCAC709959D550075E99B /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF9CCAC809959D5A0075E99B /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF9CCAC909959D5D0075E99B /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF9CCACA09959D630075E99B /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF9CCACB09959D680075E99B /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF9CCACC09959D6B0075E99B /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF9CCACD09959D720075E99B /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF9CCACE09959D750075E99B /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF9CCACF09959D7C0075E99B /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF9CCAD009959D800075E99B /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF9CCAD109959D850075E99B /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF9CCAD209959D8A0075E99B /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF9CCAD309959D8F0075E99B /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF9CCAD409959D980075E99B /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF9CCAD509959D9C0075E99B /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF9CCAD609959DA30075E99B /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF9CCAD709959DA70075E99B /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF9CCAD809959DAE0075E99B /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF9CCAD909959DB20075E99B /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF9CCADA09959DB60075E99B /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF9CCADB09959DBB0075E99B /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF9CCADC09959DC10075E99B /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF9CCADD09959DC60075E99B /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF9CCADE09959DCB0075E99B /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF9CCADF09959DCE0075E99B /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF9CCAE009959DD50075E99B /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF9CCAE109959DDA0075E99B /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF9CCAE209959DDF0075E99B /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF9CCAE309959DE20075E99B /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF9CCAE409959DE60075E99B /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF9CCAE509959DEB0075E99B /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF9CCAE609959DF00075E99B /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF9CCAE709959DF50075E99B /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF9CCAE809959DF90075E99B /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF9CCAE909959E000075E99B /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF9CCAEA09959E050075E99B /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF9CCAEB09959E090075E99B /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF9CCAEC09959E0D0075E99B /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF9CCAED09959E140075E99B /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF9CCAEE09959E170075E99B /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF9CCAEF09959E1E0075E99B /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF9CCAF009959E230075E99B /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF9CCAF109959E270075E99B /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF9D466D09B5109C006E59CF /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF9D467909B5110B006E59CF /* decayscreen.c in Sources */ = {isa = PBXBuildFile; fileRef = AF9D467809B5110B006E59CF /* decayscreen.c */; }; AF9D467A09B51126006E59CF /* decayscreen.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258930988A468000655EE /* decayscreen.xml */; }; AF9D468F09B51567006E59CF /* grabclient-osx.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9D468E09B51567006E59CF /* grabclient-osx.m */; }; AF9D473809B52EE0006E59CF /* colorbars.c in Sources */ = {isa = PBXBuildFile; fileRef = AF9D473609B52EE0006E59CF /* colorbars.c */; }; AF9D473909B52EE0006E59CF /* colorbars.h in Headers */ = {isa = PBXBuildFile; fileRef = AF9D473709B52EE0006E59CF /* colorbars.h */; }; AF9D474A09B5300A006E59CF /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF9D475609B5306A006E59CF /* slidescreen.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC2590D0988A469000655EE /* slidescreen.xml */; }; AF9D475909B53091006E59CF /* slidescreen.c in Sources */ = {isa = PBXBuildFile; fileRef = AF9D475809B53091006E59CF /* slidescreen.c */; }; AF9D476509B53166006E59CF /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF9D48D309B53214006E59CF /* zoom.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC259430988A469000655EE /* zoom.xml */; }; AF9D48D509B53229006E59CF /* zoom.c in Sources */ = {isa = PBXBuildFile; fileRef = AF9D48D409B53229006E59CF /* zoom.c */; }; AF9D48E109B53322006E59CF /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF9D48ED09B5338A006E59CF /* bumps.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258810988A468000655EE /* bumps.xml */; }; AF9D48F009B533AE006E59CF /* bumps.c in Sources */ = {isa = PBXBuildFile; fileRef = AF9D48EE09B533AE006E59CF /* bumps.c */; }; AF9D48FA09B535DA006E59CF /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF9D490609B536DE006E59CF /* distort.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258980988A468000655EE /* distort.xml */; }; AF9D490809B536F7006E59CF /* distort.c in Sources */ = {isa = PBXBuildFile; fileRef = AF9D490709B536F7006E59CF /* distort.c */; }; AF9D493109B53CBA006E59CF /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF9D493D09B53D3B006E59CF /* ripples.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC259030988A469000655EE /* ripples.xml */; }; AF9D493F09B53D55006E59CF /* ripples.c in Sources */ = {isa = PBXBuildFile; fileRef = AF9D493E09B53D55006E59CF /* ripples.c */; }; AF9D495A09B53FC9006E59CF /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF9D496609B54087006E59CF /* rotzoomer.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC259070988A469000655EE /* rotzoomer.xml */; }; AF9D496809B540A4006E59CF /* rotzoomer.c in Sources */ = {isa = PBXBuildFile; fileRef = AF9D496709B540A4006E59CF /* rotzoomer.c */; }; AF9D497209B5411D006E59CF /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF9D497E09B541CE006E59CF /* twang.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC259270988A469000655EE /* twang.xml */; }; AF9D498009B541E6006E59CF /* twang.c in Sources */ = {isa = PBXBuildFile; fileRef = AF9D497F09B541E5006E59CF /* twang.c */; }; AF9D499D09B544C2006E59CF /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF9D49A909B5457B006E59CF /* spotlight.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC259150988A469000655EE /* spotlight.xml */; }; AF9D49AB09B54596006E59CF /* spotlight.c in Sources */ = {isa = PBXBuildFile; fileRef = AF9D49AA09B54596006E59CF /* spotlight.c */; }; AF9D4C6F09B59F27006E59CF /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF9D4C7B09B5A02D006E59CF /* xlyap.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC259390988A469000655EE /* xlyap.xml */; }; AF9D4C7D09B5A044006E59CF /* xlyap.c in Sources */ = {isa = PBXBuildFile; fileRef = AF9D4C7C09B5A044006E59CF /* xlyap.c */; }; AF9D4CED09B5AA8E006E59CF /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF9D4CF909B5AC73006E59CF /* pong.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258FA0988A469000655EE /* pong.xml */; }; AF9D4CFD09B5AC94006E59CF /* analogtv.c in Sources */ = {isa = PBXBuildFile; fileRef = AF9D4CFA09B5AC94006E59CF /* analogtv.c */; }; AF9D4CFE09B5AC94006E59CF /* pong.c in Sources */ = {isa = PBXBuildFile; fileRef = AF9D4CFC09B5AC94006E59CF /* pong.c */; }; AF9D4D8409B5B2DC006E59CF /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF9D4D8509B5B2DC006E59CF /* analogtv.c in Sources */ = {isa = PBXBuildFile; fileRef = AF9D4CFA09B5AC94006E59CF /* analogtv.c */; }; AF9D4D9109B5B42B006E59CF /* xanalogtv.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC259320988A469000655EE /* xanalogtv.xml */; }; AF9D4D9309B5B444006E59CF /* xanalogtv.c in Sources */ = {isa = PBXBuildFile; fileRef = AF9D4D9209B5B444006E59CF /* xanalogtv.c */; }; AF9D4DB509B5B71E006E59CF /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF9D4DB609B5B71E006E59CF /* analogtv.c in Sources */ = {isa = PBXBuildFile; fileRef = AF9D4CFA09B5AC94006E59CF /* analogtv.c */; }; AF9D4DC209B5B862006E59CF /* bsod.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC2587E0988A468000655EE /* bsod.xml */; }; AF9D4DC409B5B87D006E59CF /* bsod.c in Sources */ = {isa = PBXBuildFile; fileRef = AF9D4DC309B5B87D006E59CF /* bsod.c */; }; AF9D4DD409B5B990006E59CF /* apple2.c in Sources */ = {isa = PBXBuildFile; fileRef = AF9D4DD309B5B990006E59CF /* apple2.c */; }; AF9D4DF209B5BB19006E59CF /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF9D4DF309B5BB19006E59CF /* analogtv.c in Sources */ = {isa = PBXBuildFile; fileRef = AF9D4CFA09B5AC94006E59CF /* analogtv.c */; }; AF9D4DF509B5BB19006E59CF /* apple2.c in Sources */ = {isa = PBXBuildFile; fileRef = AF9D4DD309B5B990006E59CF /* apple2.c */; }; AF9D4E0409B5BC85006E59CF /* apple2.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC2586F0988A468000655EE /* apple2.xml */; }; AF9D4E0609B5BC9D006E59CF /* apple2-main.c in Sources */ = {isa = PBXBuildFile; fileRef = AF9D4E0509B5BC9D006E59CF /* apple2-main.c */; }; AF9E7EC9190F4C4000A8B01F /* enable_gc.c in Sources */ = {isa = PBXBuildFile; fileRef = AF9E7EC8190F4C4000A8B01F /* enable_gc.c */; }; AFA211891CD1AA2E00C0D2A1 /* textclient-mobile.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA211881CD1AA1800C0D2A1 /* textclient-mobile.c */; }; AFA2118A1CD1AA3A00C0D2A1 /* textclient-mobile.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA211881CD1AA1800C0D2A1 /* textclient-mobile.c */; }; AFA2118B1CD1AA3F00C0D2A1 /* textclient-mobile.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA211881CD1AA1800C0D2A1 /* textclient-mobile.c */; }; AFA211931CD59DAF00C0D2A1 /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AFA211951CD59DAF00C0D2A1 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AFA211961CD59DAF00C0D2A1 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AFA211971CD59DAF00C0D2A1 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AFA211981CD59DAF00C0D2A1 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AFA211991CD59DAF00C0D2A1 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AFA2119A1CD59DAF00C0D2A1 /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; AFA2119B1CD59DAF00C0D2A1 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AFA211A51CD5A00F00C0D2A1 /* raverhoop.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFA211A41CD59FD800C0D2A1 /* raverhoop.xml */; }; AFA211A61CD5A02600C0D2A1 /* raverhoop.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFA211A41CD59FD800C0D2A1 /* raverhoop.xml */; }; AFA211A71CD5A03F00C0D2A1 /* raverhoop.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA211A31CD59FD800C0D2A1 /* raverhoop.c */; }; AFA211A81CD5A04300C0D2A1 /* raverhoop.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA211A31CD59FD800C0D2A1 /* raverhoop.c */; settings = {COMPILER_FLAGS = "-DUSE_GL"; }; }; AFA339350B058505002B0E7D /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AFA33BAF0B0585F7002B0E7D /* webcollage-cocoa.m in Sources */ = {isa = PBXBuildFile; fileRef = AFA33BAE0B0585F7002B0E7D /* webcollage-cocoa.m */; }; AFA33BB00B05860F002B0E7D /* webcollage.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC2592C0988A469000655EE /* webcollage.xml */; }; AFA33BD10B0587EE002B0E7D /* webcollage-helper-cocoa.m in Sources */ = {isa = PBXBuildFile; fileRef = AFA33BD00B0587EE002B0E7D /* webcollage-helper-cocoa.m */; }; AFA33BDD0B058A30002B0E7D /* webcollage-helper in Resources */ = {isa = PBXBuildFile; fileRef = AFA33BC70B058740002B0E7D /* webcollage-helper */; }; AFA33C0C0B058ED2002B0E7D /* webcollage in Resources */ = {isa = PBXBuildFile; fileRef = AFA33C0A0B058E6B002B0E7D /* webcollage */; }; AFA55866099324D800F3E977 /* minixpm.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA55864099324D800F3E977 /* minixpm.c */; }; AFA55867099324D800F3E977 /* minixpm.h in Headers */ = {isa = PBXBuildFile; fileRef = AFA55865099324D800F3E977 /* minixpm.h */; }; AFA5595C099330E500F3E977 /* cage.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258820988A468000655EE /* cage.xml */; }; AFA5595E0993310500F3E977 /* cage.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA5595D0993310500F3E977 /* cage.c */; }; AFA55981099331AC00F3E977 /* moebius.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258E40988A469000655EE /* moebius.xml */; }; AFA55983099331C300F3E977 /* moebius.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA55982099331C300F3E977 /* moebius.c */; }; AFA559A70993325200F3E977 /* superquadrics.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC2591F0988A469000655EE /* superquadrics.xml */; }; AFA559A90993326300F3E977 /* superquadrics.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA559A80993326300F3E977 /* superquadrics.c */; }; AFA559CB099332CF00F3E977 /* morph3d.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258E80988A469000655EE /* morph3d.xml */; }; AFA559CD099332E800F3E977 /* morph3d.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA559CC099332E800F3E977 /* morph3d.c */; }; AFA559E90993333D00F3E977 /* rubik.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC259080988A469000655EE /* rubik.xml */; }; AFA559EB0993335C00F3E977 /* rubik.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA559EA0993335C00F3E977 /* rubik.c */; }; AFA55A190993344100F3E977 /* stairs.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC259190988A469000655EE /* stairs.xml */; }; AFA55A1B0993345900F3E977 /* stairs.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA55A1A0993345900F3E977 /* stairs.c */; }; AFA55A34099334CB00F3E977 /* sproingies.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC259160988A469000655EE /* sproingies.xml */; }; AFA55A4A0993351F00F3E977 /* s1_1.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA55A400993351F00F3E977 /* s1_1.c */; }; AFA55A4B0993351F00F3E977 /* s1_2.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA55A410993351F00F3E977 /* s1_2.c */; }; AFA55A4C0993351F00F3E977 /* s1_3.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA55A420993351F00F3E977 /* s1_3.c */; }; AFA55A4D0993351F00F3E977 /* s1_4.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA55A430993351F00F3E977 /* s1_4.c */; }; AFA55A4E0993351F00F3E977 /* s1_5.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA55A440993351F00F3E977 /* s1_5.c */; }; AFA55A4F0993351F00F3E977 /* s1_6.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA55A450993351F00F3E977 /* s1_6.c */; }; AFA55A500993351F00F3E977 /* s1_b.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA55A460993351F00F3E977 /* s1_b.c */; }; AFA55A510993351F00F3E977 /* sproingies.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA55A470993351F00F3E977 /* sproingies.c */; }; AFA55A520993351F00F3E977 /* sproingiewrap.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA55A480993351F00F3E977 /* sproingiewrap.c */; }; AFA55A530993353500F3E977 /* gllist.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA55A3E0993351F00F3E977 /* gllist.c */; }; AFA55A540993353500F3E977 /* gllist.h in Headers */ = {isa = PBXBuildFile; fileRef = AFA55A3F0993351F00F3E977 /* gllist.h */; }; AFA55A8D0993366F00F3E977 /* lament.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258D60988A468000655EE /* lament.xml */; }; AFA55A8F0993369100F3E977 /* lament.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA55A8E0993369100F3E977 /* lament.c */; }; AFA55A95099336D800F3E977 /* normals.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA55A93099336D800F3E977 /* normals.c */; }; AFA55A96099336D800F3E977 /* normals.h in Headers */ = {isa = PBXBuildFile; fileRef = AFA55A94099336D800F3E977 /* normals.h */; }; AFA55AE309933D1C00F3E977 /* bubble3d.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC2587F0988A468000655EE /* bubble3d.xml */; }; AFA55AE509933D3800F3E977 /* bubble3d.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA55AE409933D3800F3E977 /* bubble3d.c */; }; AFA55AF709933DBF00F3E977 /* b_draw.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA55AF409933DBF00F3E977 /* b_draw.c */; }; AFA55AF809933DBF00F3E977 /* b_lockglue.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA55AF509933DBF00F3E977 /* b_lockglue.c */; }; AFA55AF909933DBF00F3E977 /* b_sphere.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA55AF609933DBF00F3E977 /* b_sphere.c */; }; AFA55B2009933E3100F3E977 /* glplanet.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258BA0988A468000655EE /* glplanet.xml */; }; AFA55B2209933E4A00F3E977 /* glplanet.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA55B2109933E4A00F3E977 /* glplanet.c */; }; AFA55B3909933EB400F3E977 /* pulsar.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258FD0988A469000655EE /* pulsar.xml */; }; AFA55B4509933EF800F3E977 /* pulsar.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA55B3F09933EC600F3E977 /* pulsar.c */; }; AFA55B8D09933FAA00F3E977 /* sierpinski3d.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC2590C0988A469000655EE /* sierpinski3d.xml */; }; AFA55B8F09933FBF00F3E977 /* sierpinski3d.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA55B8E09933FBF00F3E977 /* sierpinski3d.c */; }; AFA55BA50993400200F3E977 /* gflux.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258B30988A468000655EE /* gflux.xml */; }; AFA55BA70993401A00F3E977 /* gflux.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA55BA60993401A00F3E977 /* gflux.c */; }; AFA55BBF0993410100F3E977 /* circuit.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258860988A468000655EE /* circuit.xml */; }; AFA55BC10993416E00F3E977 /* circuit.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA55BC00993416E00F3E977 /* circuit.c */; }; AFA55BF8099342BF00F3E977 /* menger.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258E00988A469000655EE /* menger.xml */; }; AFA55BFA099342D500F3E977 /* menger.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA55BF9099342D500F3E977 /* menger.c */; }; AFA55C220993433D00F3E977 /* engine.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC2589C0988A468000655EE /* engine.xml */; }; AFA55C240993435300F3E977 /* engine.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA55C230993435300F3E977 /* engine.c */; }; AFA55C8B099349CC00F3E977 /* glsnake.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258BC0988A468000655EE /* glsnake.xml */; }; AFA55C8D099349EE00F3E977 /* glsnake.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA55C8C099349EE00F3E977 /* glsnake.c */; }; AFA55CBD09934BDD00F3E977 /* boxed.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC2587B0988A468000655EE /* boxed.xml */; }; AFA55CC009934C0900F3E977 /* boxed.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA55CBE09934C0900F3E977 /* boxed.c */; }; AFA55CE009934D1500F3E977 /* glforestfire.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258B60988A468000655EE /* glforestfire.xml */; }; AFA55CE209934D2E00F3E977 /* glforestfire.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA55CE109934D2E00F3E977 /* glforestfire.c */; }; AFA55D500993568200F3E977 /* sballs.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC259090988A469000655EE /* sballs.xml */; }; AFA55D520993569C00F3E977 /* sballs.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA55D510993569C00F3E977 /* sballs.c */; }; AFA55D760993587600F3E977 /* cubenetic.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC2588F0988A468000655EE /* cubenetic.xml */; }; AFA55D780993589300F3E977 /* cubenetic.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA55D770993589300F3E977 /* cubenetic.c */; }; AFA55D93099358FB00F3E977 /* spheremonics.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC259130988A469000655EE /* spheremonics.xml */; }; AFA55D950993590F00F3E977 /* spheremonics.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA55D940993590F00F3E977 /* spheremonics.c */; }; AFA55DDC09935D9D00F3E977 /* lavalite.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258D80988A468000655EE /* lavalite.xml */; }; AFA55DDE09935DB600F3E977 /* lavalite.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA55DDD09935DB600F3E977 /* lavalite.c */; }; AFA55DE309935DFB00F3E977 /* marching.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA55DE109935DFB00F3E977 /* marching.c */; }; AFA55E0509935E7E00F3E977 /* queens.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC259000988A469000655EE /* queens.xml */; }; AFA55E0709935EB800F3E977 /* queens.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA55E0609935EB800F3E977 /* queens.c */; }; AFA55E2109935F0B00F3E977 /* endgame.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC2589B0988A468000655EE /* endgame.xml */; }; AFA55E2609935F2B00F3E977 /* chessmodels.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA55E2309935F2B00F3E977 /* chessmodels.c */; }; AFA55E2709935F2B00F3E977 /* endgame.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA55E2509935F2B00F3E977 /* endgame.c */; }; AFA55E4409935FBA00F3E977 /* glblur.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258B40988A468000655EE /* glblur.xml */; }; AFA55E4609935FD300F3E977 /* glblur.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA55E4509935FD300F3E977 /* glblur.c */; }; AFA55E970993602F00F3E977 /* flyingtoasters.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258AD0988A468000655EE /* flyingtoasters.xml */; }; AFA55EAD0993608800F3E977 /* flyingtoasters.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA55E980993608800F3E977 /* flyingtoasters.c */; }; AFA55EAE0993608800F3E977 /* toast.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA55E990993608800F3E977 /* toast.c */; }; AFA55EB00993608800F3E977 /* toast2.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA55E9B0993608800F3E977 /* toast2.c */; }; AFA55EB20993608800F3E977 /* toaster_base.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA55E9D0993608800F3E977 /* toaster_base.c */; }; AFA55EB40993608800F3E977 /* toaster_handle.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA55E9F0993608800F3E977 /* toaster_handle.c */; }; AFA55EB60993608800F3E977 /* toaster_handle2.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA55EA10993608800F3E977 /* toaster_handle2.c */; }; AFA55EB80993608800F3E977 /* toaster_jet.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA55EA30993608800F3E977 /* toaster_jet.c */; }; AFA55EBA0993608800F3E977 /* toaster_knob.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA55EA50993608800F3E977 /* toaster_knob.c */; }; AFA55EBC0993608800F3E977 /* toaster_slots.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA55EA70993608800F3E977 /* toaster_slots.c */; }; AFA55EBE0993608800F3E977 /* toaster_wing.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA55EA90993608800F3E977 /* toaster_wing.c */; }; AFA55EC00993608800F3E977 /* toaster.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA55EAB0993608800F3E977 /* toaster.c */; }; AFA55EE50993610F00F3E977 /* bouncingcow.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC2587A0988A468000655EE /* bouncingcow.xml */; }; AFA55EEE0993613E00F3E977 /* bouncingcow.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA55EE70993613E00F3E977 /* bouncingcow.c */; }; AFA55EEF0993613E00F3E977 /* cow_face.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA55EE80993613E00F3E977 /* cow_face.c */; }; AFA55EF00993613E00F3E977 /* cow_hide.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA55EE90993613E00F3E977 /* cow_hide.c */; }; AFA55EF10993613E00F3E977 /* cow_hoofs.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA55EEA0993613E00F3E977 /* cow_hoofs.c */; }; AFA55EF20993613E00F3E977 /* cow_horns.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA55EEB0993613E00F3E977 /* cow_horns.c */; }; AFA55EF30993613E00F3E977 /* cow_tail.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA55EEC0993613E00F3E977 /* cow_tail.c */; }; AFA55EF40993613E00F3E977 /* cow_udder.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA55EED0993613E00F3E977 /* cow_udder.c */; }; AFA55F20099361E800F3E977 /* jigglypuff.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258CE0988A468000655EE /* jigglypuff.xml */; }; AFA55F220993620200F3E977 /* jigglypuff.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA55F210993620200F3E977 /* jigglypuff.c */; }; AFA55F3E0993625B00F3E977 /* klein.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258D40988A468000655EE /* klein.xml */; }; AFA55F400993626E00F3E977 /* klein.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA55F3F0993626E00F3E977 /* klein.c */; }; AFA55F57099362C500F3E977 /* hypertorus.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258C80988A468000655EE /* hypertorus.xml */; }; AFA55F5A099362DF00F3E977 /* hypertorus.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA55F59099362DF00F3E977 /* hypertorus.c */; }; AFA55F860993646900F3E977 /* glmatrix.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258B90988A468000655EE /* glmatrix.xml */; }; AFA55F880993648500F3E977 /* glmatrix.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA55F870993648500F3E977 /* glmatrix.c */; }; AFA55FF209936C2F00F3E977 /* cubestorm.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258900988A468000655EE /* cubestorm.xml */; }; AFA55FF409936C4500F3E977 /* cubestorm.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA55FF309936C4500F3E977 /* cubestorm.c */; }; AFA5600D09936C9D00F3E977 /* glknots.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258B80988A468000655EE /* glknots.xml */; }; AFA5600F09936CB300F3E977 /* glknots.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA5600E09936CB300F3E977 /* glknots.c */; }; AFA5602809936CF700F3E977 /* blocktube.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258770988A468000655EE /* blocktube.xml */; }; AFA5602A09936D0700F3E977 /* blocktube.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA5602909936D0700F3E977 /* blocktube.c */; }; AFA5604609936DAB00F3E977 /* flipflop.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258A70988A468000655EE /* flipflop.xml */; }; AFA5604809936DCC00F3E977 /* flipflop.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA5604709936DCC00F3E977 /* flipflop.c */; }; AFA5607B09936FDD00F3E977 /* antspotlight.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA5607809936FDD00F3E977 /* antspotlight.c */; }; AFA5608109936FFA00F3E977 /* antinspect.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA5605F09936E9C00F3E977 /* antinspect.c */; }; AFA560820993700500F3E977 /* antinspect.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC2586B0988A468000655EE /* antinspect.xml */; }; AFA560830993700900F3E977 /* antspotlight.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC2586D0988A468000655EE /* antspotlight.xml */; }; AFA560C2099371BE00F3E977 /* polytopes.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258F90988A469000655EE /* polytopes.xml */; }; AFA560C4099371D500F3E977 /* polytopes.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA560C3099371D500F3E977 /* polytopes.c */; }; AFA561110993784D00F3E977 /* molecule.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258E70988A469000655EE /* molecule.xml */; }; AFA561130993786800F3E977 /* molecule.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA561120993786800F3E977 /* molecule.c */; }; AFA5616C09937C6800F3E977 /* blinkbox.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258750988A468000655EE /* blinkbox.xml */; }; AFA5616E09937C9A00F3E977 /* blinkbox.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA5616D09937C9A00F3E977 /* blinkbox.c */; }; AFA5618F09937D2100F3E977 /* noof.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258EC0988A469000655EE /* noof.xml */; }; AFA5619109937D3600F3E977 /* noof.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA5619009937D3600F3E977 /* noof.c */; }; AFA561B109937DB400F3E977 /* polyhedra.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258F70988A469000655EE /* polyhedra.xml */; }; AFA561B509937DCC00F3E977 /* polyhedra-gl.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA561B209937DCB00F3E977 /* polyhedra-gl.c */; }; AFA561B609937DCC00F3E977 /* polyhedra.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA561B309937DCC00F3E977 /* polyhedra.c */; }; AFA5621B099384DA00F3E977 /* providence.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258FC0988A469000655EE /* providence.xml */; }; AFA5621D099384F600F3E977 /* providence.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA5621C099384F600F3E977 /* providence.c */; }; AFA562330993855500F3E977 /* pinion.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258F50988A469000655EE /* pinion.xml */; }; AFA562350993856A00F3E977 /* pinion.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA562340993856A00F3E977 /* pinion.c */; }; AFA562D3099392F900F3E977 /* boing.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258780988A468000655EE /* boing.xml */; }; AFA562D50993930C00F3E977 /* boing.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA562D40993930C00F3E977 /* boing.c */; }; AFA562EE0993940400F3E977 /* antmaze.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC2586C0988A468000655EE /* antmaze.xml */; }; AFA562F00993941600F3E977 /* antmaze.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA562EF0993941600F3E977 /* antmaze.c */; }; AFA563060993947300F3E977 /* tangram.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC259220988A469000655EE /* tangram.xml */; }; AFA5630A0993948F00F3E977 /* tangram_shapes.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA563070993948F00F3E977 /* tangram_shapes.c */; }; AFA5630B0993948F00F3E977 /* tangram.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA563090993948F00F3E977 /* tangram.c */; }; AFA563280993955000F3E977 /* crackberg.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC2588B0988A468000655EE /* crackberg.xml */; }; AFA5632A0993957100F3E977 /* crackberg.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA563290993957100F3E977 /* crackberg.c */; }; AFA563740993977100F3E977 /* glhanoi.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258B70988A468000655EE /* glhanoi.xml */; }; AFA563750993977D00F3E977 /* glhanoi.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA563460993963400F3E977 /* glhanoi.c */; }; AFA563760993978D00F3E977 /* cube21.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA563660993970F00F3E977 /* cube21.c */; }; AFA563770993979A00F3E977 /* cube21.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC2588E0988A468000655EE /* cube21.xml */; }; AFA5638D099397ED00F3E977 /* timetunnel.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC259240988A469000655EE /* timetunnel.xml */; }; AFA5638F0993980D00F3E977 /* timetunnel.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA5638E0993980D00F3E977 /* timetunnel.c */; }; AFA563B8099398F700F3E977 /* juggler3d.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258D10988A468000655EE /* juggler3d.xml */; }; AFA563BA0993991300F3E977 /* juggler3d.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA563B90993991300F3E977 /* juggler3d.c */; }; AFAA6B451773F07800DE720C /* ios-function-table.m in Sources */ = {isa = PBXBuildFile; fileRef = AFAA6B441773F07700DE720C /* ios-function-table.m */; }; AFACE87A1CC83458008B24CD /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AFACE87C1CC83458008B24CD /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AFACE87D1CC83458008B24CD /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AFACE87E1CC83458008B24CD /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AFACE87F1CC83458008B24CD /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AFACE8801CC83458008B24CD /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AFACE8811CC83458008B24CD /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; AFACE8821CC83458008B24CD /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AFACE88C1CC835F7008B24CD /* energystream.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFACE88B1CC83578008B24CD /* energystream.xml */; }; AFACE88D1CC83608008B24CD /* energystream.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFACE88B1CC83578008B24CD /* energystream.xml */; }; AFACE88E1CC83613008B24CD /* energystream.c in Sources */ = {isa = PBXBuildFile; fileRef = AFACE88A1CC83578008B24CD /* energystream.c */; }; AFACE88F1CC83617008B24CD /* energystream.c in Sources */ = {isa = PBXBuildFile; fileRef = AFACE88A1CC83578008B24CD /* energystream.c */; settings = {COMPILER_FLAGS = "-DUSE_GL"; }; }; AFAD462309D5F4DA00AB5F95 /* grabclient.c in Sources */ = {isa = PBXBuildFile; fileRef = AFAD462209D5F4DA00AB5F95 /* grabclient.c */; }; AFB591AE178B812C00EA4005 /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AFB591B0178B812C00EA4005 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AFB591B1178B812C00EA4005 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AFB591B2178B812C00EA4005 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AFB591B3178B812C00EA4005 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AFB591B4178B812C00EA4005 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AFB591BE178B81E600EA4005 /* hexadrop.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFB591BC178B81E600EA4005 /* hexadrop.xml */; }; AFB591BF178B81E600EA4005 /* hexadrop.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFB591BC178B81E600EA4005 /* hexadrop.xml */; }; AFB591C0178B81E600EA4005 /* hexadrop.c in Sources */ = {isa = PBXBuildFile; fileRef = AFB591BD178B81E600EA4005 /* hexadrop.c */; }; AFB591C1178B81E600EA4005 /* hexadrop.c in Sources */ = {isa = PBXBuildFile; fileRef = AFB591BD178B81E600EA4005 /* hexadrop.c */; }; AFB8A69B1782BA34004EDB85 /* kaleidocycle.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFB8A69A1782BA34004EDB85 /* kaleidocycle.xml */; }; AFB8A69C1782BF6C004EDB85 /* kaleidocycle.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFB8A69A1782BA34004EDB85 /* kaleidocycle.xml */; }; AFB8A69D1782BFA6004EDB85 /* kaleidocycle.c in Sources */ = {isa = PBXBuildFile; fileRef = AF7511141782B64300380EA1 /* kaleidocycle.c */; settings = {COMPILER_FLAGS = "-DUSE_GL"; }; }; AFBE744019A7C6930018AA35 /* robot.c in Sources */ = {isa = PBXBuildFile; fileRef = AFBE743F19A7C6930018AA35 /* robot.c */; }; AFBE744119A7C6EF0018AA35 /* robot.c in Sources */ = {isa = PBXBuildFile; fileRef = AFBE743F19A7C6930018AA35 /* robot.c */; settings = {COMPILER_FLAGS = "-DUSE_GL"; }; }; AFBF893E0E41D930006A2D66 /* fps.c in Sources */ = {isa = PBXBuildFile; fileRef = AFBF893C0E41D930006A2D66 /* fps.c */; }; AFBF893F0E41D930006A2D66 /* fps.h in Headers */ = {isa = PBXBuildFile; fileRef = AFBF893D0E41D930006A2D66 /* fps.h */; }; AFBF89AF0E423FC3006A2D66 /* fps-gl.c in Sources */ = {isa = PBXBuildFile; fileRef = AFBF89AE0E423FC3006A2D66 /* fps-gl.c */; }; AFBF89B20E424036006A2D66 /* fpsI.h in Headers */ = {isa = PBXBuildFile; fileRef = AFBF89B10E424036006A2D66 /* fpsI.h */; }; AFBFE74F178642DC00432B21 /* SaverRunner.nib in Resources */ = {isa = PBXBuildFile; fileRef = AF9772E10989DFC6001F8B92 /* SaverRunner.nib */; }; AFBFE750178642DC00432B21 /* SaverRunner.icns in Resources */ = {isa = PBXBuildFile; fileRef = AF2D522513E954A0002AA818 /* SaverRunner.icns */; }; AFBFE752178642DC00432B21 /* SaverRunner.m in Sources */ = {isa = PBXBuildFile; fileRef = AFE1FD400981E32E00F7970E /* SaverRunner.m */; }; AFBFE753178642DC00432B21 /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 29B97316FDCFA39411CA2CEA /* main.m */; }; AFBFE754178642DC00432B21 /* SaverListController.m in Sources */ = {isa = PBXBuildFile; fileRef = AF84AF1E15829AF000607E4C /* SaverListController.m */; }; AFBFE756178642DC00432B21 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AFBFE757178642DC00432B21 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AFBFE758178642DC00432B21 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AFBFE759178642DC00432B21 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AFBFE765178643B200432B21 /* Apple2.saver in Resources */ = {isa = PBXBuildFile; fileRef = AF9D4DFE09B5BB19006E59CF /* Apple2.saver */; }; AFBFE76F178647FE00432B21 /* SaverRunner.nib in Resources */ = {isa = PBXBuildFile; fileRef = AF9772E10989DFC6001F8B92 /* SaverRunner.nib */; }; AFBFE770178647FE00432B21 /* SaverRunner.icns in Resources */ = {isa = PBXBuildFile; fileRef = AF2D522513E954A0002AA818 /* SaverRunner.icns */; }; AFBFE772178647FE00432B21 /* SaverRunner.m in Sources */ = {isa = PBXBuildFile; fileRef = AFE1FD400981E32E00F7970E /* SaverRunner.m */; }; AFBFE773178647FE00432B21 /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 29B97316FDCFA39411CA2CEA /* main.m */; }; AFBFE774178647FE00432B21 /* SaverListController.m in Sources */ = {isa = PBXBuildFile; fileRef = AF84AF1E15829AF000607E4C /* SaverListController.m */; }; AFBFE776178647FE00432B21 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AFBFE777178647FE00432B21 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AFBFE778178647FE00432B21 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AFBFE779178647FE00432B21 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AFBFE7831786483B00432B21 /* Phosphor.saver in Resources */ = {isa = PBXBuildFile; fileRef = AF7776F609B63ABF00EA3033 /* Phosphor.saver */; }; AFC0E8B21CDC601A008CAFAC /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AFC0E8B41CDC601A008CAFAC /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AFC0E8B51CDC601A008CAFAC /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AFC0E8B61CDC601A008CAFAC /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AFC0E8B71CDC601A008CAFAC /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AFC0E8B81CDC601A008CAFAC /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AFC0E8B91CDC601A008CAFAC /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; AFC0E8BA1CDC601A008CAFAC /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AFC0E8C41CDC60B0008CAFAC /* hydrostat.c in Sources */ = {isa = PBXBuildFile; fileRef = AFC0E8C21CDC60A9008CAFAC /* hydrostat.c */; settings = {COMPILER_FLAGS = "-DUSE_GL"; }; }; AFC0E8C51CDC60D6008CAFAC /* hydrostat.c in Sources */ = {isa = PBXBuildFile; fileRef = AFC0E8C21CDC60A9008CAFAC /* hydrostat.c */; }; AFC0E8C61CDC60DB008CAFAC /* hydrostat.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC0E8C31CDC60A9008CAFAC /* hydrostat.xml */; }; AFC0E8C71CDC60DE008CAFAC /* hydrostat.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC0E8C31CDC60A9008CAFAC /* hydrostat.xml */; }; AFC211950E4E30C800D87B6E /* teapot.c in Sources */ = {isa = PBXBuildFile; fileRef = AFC211930E4E30C800D87B6E /* teapot.c */; }; AFC43E741C68364B00C89999 /* PxPlus_IBM_VGA8.ttf in Resources */ = {isa = PBXBuildFile; fileRef = AFC43E731C68364B00C89999 /* PxPlus_IBM_VGA8.ttf */; }; AFC43E771C684BE400C89999 /* PxPlus_IBM_VGA8.ttf in Resources */ = {isa = PBXBuildFile; fileRef = AFC43E731C68364B00C89999 /* PxPlus_IBM_VGA8.ttf */; }; AFC43E7B1C6AA77900C89999 /* YearlReg.ttf in Resources */ = {isa = PBXBuildFile; fileRef = AFEC68381BD6CDF9004C1B64 /* YearlReg.ttf */; }; AFC43E7C1C6AA78800C89999 /* OCRAStd.otf in Resources */ = {isa = PBXBuildFile; fileRef = AFEC68361BD6CA85004C1B64 /* OCRAStd.otf */; }; AFC7592D158D8E8B00C5458E /* textclient.c in Sources */ = {isa = PBXBuildFile; fileRef = AFC7592B158D8E8B00C5458E /* textclient.c */; }; AFC7592E158D8E8B00C5458E /* textclient.h in Headers */ = {isa = PBXBuildFile; fileRef = AFC7592C158D8E8B00C5458E /* textclient.h */; }; AFC75930158D9A7A00C5458E /* textclient-ios.m in Sources */ = {isa = PBXBuildFile; fileRef = AFC7592F158D9A7A00C5458E /* textclient-ios.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 */; }; AFCF509C198A1861005B0DB1 /* involute.c in Sources */ = {isa = PBXBuildFile; fileRef = AFE6A16A0CDD78EA002805BF /* involute.c */; }; AFCF509D198C3612005B0DB1 /* xscreensaver-text in Resources */ = {isa = PBXBuildFile; fileRef = AF0FAF0B09CA6FF900EE1051 /* xscreensaver-text */; }; AFCF83421AF5B515008BB7E1 /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AFCF83441AF5B515008BB7E1 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AFCF83451AF5B515008BB7E1 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AFCF83461AF5B515008BB7E1 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AFCF83471AF5B515008BB7E1 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AFCF83481AF5B515008BB7E1 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AFCF83491AF5B515008BB7E1 /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; AFCF834A1AF5B515008BB7E1 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AFCF83551AF5B5FD008BB7E1 /* splitflap.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFCF83521AF5B5FD008BB7E1 /* splitflap.xml */; }; AFCF83561AF5B5FD008BB7E1 /* splitflap.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFCF83521AF5B5FD008BB7E1 /* splitflap.xml */; }; AFCF83571AF5B5FD008BB7E1 /* splitflap_obj.c in Sources */ = {isa = PBXBuildFile; fileRef = AFCF83531AF5B5FD008BB7E1 /* splitflap_obj.c */; }; AFCF83581AF5B5FD008BB7E1 /* splitflap_obj.c in Sources */ = {isa = PBXBuildFile; fileRef = AFCF83531AF5B5FD008BB7E1 /* splitflap_obj.c */; settings = {COMPILER_FLAGS = "-DUSE_GL"; }; }; AFCF83591AF5B5FD008BB7E1 /* splitflap.c in Sources */ = {isa = PBXBuildFile; fileRef = AFCF83541AF5B5FD008BB7E1 /* splitflap.c */; }; AFCF835A1AF5B5FD008BB7E1 /* splitflap.c in Sources */ = {isa = PBXBuildFile; fileRef = AFCF83541AF5B5FD008BB7E1 /* splitflap.c */; settings = {COMPILER_FLAGS = "-DUSE_GL"; }; }; 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 */; }; AFD51B200F063B4A00471C02 /* xscreensaver-getimage-file in Resources */ = {isa = PBXBuildFile; fileRef = AF0FAF1209CA712600EE1051 /* xscreensaver-getimage-file */; }; AFD51B220F063B4A00471C02 /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AFD51DB70F063BCE00471C02 /* photopile.c in Sources */ = {isa = PBXBuildFile; fileRef = AFD51DB60F063BCE00471C02 /* photopile.c */; }; AFD51DB90F063BE700471C02 /* photopile.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFD51DB80F063BE700471C02 /* photopile.xml */; }; AFD56DF80996A03800BA26F7 /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AFD56E090996A07A00BA26F7 /* gltext.c in Sources */ = {isa = PBXBuildFile; fileRef = AFD56E080996A07A00BA26F7 /* gltext.c */; }; AFD56E9F0996A23800BA26F7 /* gltext.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258BD0988A468000655EE /* gltext.xml */; }; AFD56EB50996A72600BA26F7 /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AFD56EE00996A95700BA26F7 /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AFD56EEE0996A99E00BA26F7 /* forest.c in Sources */ = {isa = PBXBuildFile; fileRef = AFD56EED0996A99E00BA26F7 /* forest.c */; }; AFD56F110996AAFA00BA26F7 /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AFD56F1D0996AB1D00BA26F7 /* forest.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258AF0988A468000655EE /* forest.xml */; }; AFD56F1E0996AB4000BA26F7 /* vines.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC2592A0988A469000655EE /* vines.xml */; }; AFD56F200996AB5A00BA26F7 /* vines.c in Sources */ = {isa = PBXBuildFile; fileRef = AFD56F1F0996AB5A00BA26F7 /* vines.c */; }; AFD56F290996AB8A00BA26F7 /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AFD56F350996ABB300BA26F7 /* galaxy.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258B10988A468000655EE /* galaxy.xml */; }; AFD56F370996ABD200BA26F7 /* galaxy.c in Sources */ = {isa = PBXBuildFile; fileRef = AFD56F360996ABD200BA26F7 /* galaxy.c */; }; AFD56F550996AEEE00BA26F7 /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AFD56F610996AF1500BA26F7 /* grav.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258C00988A468000655EE /* grav.xml */; }; AFD56F630996AF2D00BA26F7 /* grav.c in Sources */ = {isa = PBXBuildFile; fileRef = AFD56F620996AF2D00BA26F7 /* grav.c */; }; AFD56F710996B01600BA26F7 /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AFD56F870996B04D00BA26F7 /* hopalong.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258C50988A468000655EE /* hopalong.xml */; }; AFD56F890996B06600BA26F7 /* hopalong.c in Sources */ = {isa = PBXBuildFile; fileRef = AFD56F880996B06600BA26F7 /* hopalong.c */; }; AFD56F920996B09400BA26F7 /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AFD56F9F0996B0D000BA26F7 /* laser.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258D70988A468000655EE /* laser.xml */; }; AFD56FA10996B0E500BA26F7 /* laser.c in Sources */ = {isa = PBXBuildFile; fileRef = AFD56FA00996B0E500BA26F7 /* laser.c */; }; AFD56FA90996B10F00BA26F7 /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AFD56FB50996B15000BA26F7 /* lightning.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258D90988A468000655EE /* lightning.xml */; }; AFD56FB70996B16300BA26F7 /* lightning.c in Sources */ = {isa = PBXBuildFile; fileRef = AFD56FB60996B16300BA26F7 /* lightning.c */; }; AFD56FBF0996B18F00BA26F7 /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AFD56FCB0996B1BE00BA26F7 /* lisa.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258DA0988A468000655EE /* lisa.xml */; }; AFD56FCD0996B1D600BA26F7 /* lisa.c in Sources */ = {isa = PBXBuildFile; fileRef = AFD56FCC0996B1D600BA26F7 /* lisa.c */; }; AFD56FD50996B20900BA26F7 /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AFD56FE10996B24B00BA26F7 /* lissie.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258DB0988A468000655EE /* lissie.xml */; }; AFD56FE30996B26200BA26F7 /* lissie.c in Sources */ = {isa = PBXBuildFile; fileRef = AFD56FE20996B26200BA26F7 /* lissie.c */; }; AFD56FFE0996B43800BA26F7 /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AFD5700B0996B47E00BA26F7 /* penrose.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258F10988A469000655EE /* penrose.xml */; }; AFD5700D0996B49D00BA26F7 /* penrose.c in Sources */ = {isa = PBXBuildFile; fileRef = AFD5700C0996B49D00BA26F7 /* penrose.c */; }; AFD570150996B4CC00BA26F7 /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AFD570210996B51100BA26F7 /* sierpinski.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC2590B0988A469000655EE /* sierpinski.xml */; }; AFD570230996B52700BA26F7 /* sierpinski.c in Sources */ = {isa = PBXBuildFile; fileRef = AFD570220996B52700BA26F7 /* sierpinski.c */; }; AFD5702C0996B56D00BA26F7 /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AFD5703A0996B5D000BA26F7 /* sphere.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC259110988A469000655EE /* sphere.xml */; }; AFD5703C0996B5E300BA26F7 /* sphere.c in Sources */ = {isa = PBXBuildFile; fileRef = AFD5703B0996B5E300BA26F7 /* sphere.c */; }; AFD570490996B61600BA26F7 /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AFD570550996B65A00BA26F7 /* spiral.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC259140988A469000655EE /* spiral.xml */; }; AFD570570996B67600BA26F7 /* spiral.c in Sources */ = {isa = PBXBuildFile; fileRef = AFD570560996B67600BA26F7 /* spiral.c */; }; AFD5705F0996B6A300BA26F7 /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AFD5706B0996B6E700BA26F7 /* fadeplot.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258A10988A468000655EE /* fadeplot.xml */; }; AFD5706D0996B70000BA26F7 /* fadeplot.c in Sources */ = {isa = PBXBuildFile; fileRef = AFD5706C0996B70000BA26F7 /* fadeplot.c */; }; AFD570750996B72700BA26F7 /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AFD570810996B77F00BA26F7 /* mountain.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258E90988A469000655EE /* mountain.xml */; }; AFD570830996B79300BA26F7 /* mountain.c in Sources */ = {isa = PBXBuildFile; fileRef = AFD570820996B79300BA26F7 /* mountain.c */; }; AFD5708B0996B80300BA26F7 /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AFD570970996B84E00BA26F7 /* triangle.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC259250988A469000655EE /* triangle.xml */; }; AFD570990996B86200BA26F7 /* triangle.c in Sources */ = {isa = PBXBuildFile; fileRef = AFD570980996B86200BA26F7 /* triangle.c */; }; AFD570A10996B88E00BA26F7 /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AFD570AD0996B8DC00BA26F7 /* worm.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC259300988A469000655EE /* worm.xml */; }; AFD570AF0996B8EF00BA26F7 /* worm.c in Sources */ = {isa = PBXBuildFile; fileRef = AFD570AE0996B8EF00BA26F7 /* worm.c */; }; AFD570B70996B93000BA26F7 /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AFD570C30996B96F00BA26F7 /* rotor.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC259060988A469000655EE /* rotor.xml */; }; AFD570C50996B98500BA26F7 /* rotor.c in Sources */ = {isa = PBXBuildFile; fileRef = AFD570C40996B98500BA26F7 /* rotor.c */; }; AFD570CF0996B9F800BA26F7 /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AFD570DD0996BA4600BA26F7 /* ant.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC2586A0988A468000655EE /* ant.xml */; }; AFD570DF0996BA5D00BA26F7 /* ant.c in Sources */ = {isa = PBXBuildFile; fileRef = AFD570DE0996BA5C00BA26F7 /* ant.c */; }; AFD570F00996BBBF00BA26F7 /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AFD570FE0996BC2000BA26F7 /* flow.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258AA0988A468000655EE /* flow.xml */; }; AFD571020996BC3800BA26F7 /* flow.c in Sources */ = {isa = PBXBuildFile; fileRef = AFD571010996BC3800BA26F7 /* flow.c */; }; AFD571190996BE9300BA26F7 /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AFD571270996BEE100BA26F7 /* discrete.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258970988A468000655EE /* discrete.xml */; }; AFD571290996BEF700BA26F7 /* discrete.c in Sources */ = {isa = PBXBuildFile; fileRef = AFD571280996BEF700BA26F7 /* discrete.c */; }; AFD571320996BF2E00BA26F7 /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AFD5713E0996BFA500BA26F7 /* apollonian.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC2586E0988A468000655EE /* apollonian.xml */; }; AFD571400996BFBE00BA26F7 /* apollonian.c in Sources */ = {isa = PBXBuildFile; fileRef = AFD5713F0996BFBE00BA26F7 /* apollonian.c */; }; AFD571490996C01700BA26F7 /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AFD571550996C05F00BA26F7 /* euler2d.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC2589F0988A468000655EE /* euler2d.xml */; }; AFD571570996C07F00BA26F7 /* euler2d.c in Sources */ = {isa = PBXBuildFile; fileRef = AFD571560996C07F00BA26F7 /* euler2d.c */; }; AFD5715F0996C0CE00BA26F7 /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AFD5716C0996C16700BA26F7 /* thornbird.c in Sources */ = {isa = PBXBuildFile; fileRef = AFD5716B0996C16700BA26F7 /* thornbird.c */; }; AFD571BB0996D9DC00BA26F7 /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AFD571C70996DA3300BA26F7 /* juggle.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258D00988A468000655EE /* juggle.xml */; }; AFD571C90996DA4600BA26F7 /* juggle.c in Sources */ = {isa = PBXBuildFile; fileRef = AFD571C80996DA4600BA26F7 /* juggle.c */; }; AFD572280996E4A300BA26F7 /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AFD572340996E52B00BA26F7 /* swirl.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC259200988A469000655EE /* swirl.xml */; }; AFD572360996E53E00BA26F7 /* swirl.c in Sources */ = {isa = PBXBuildFile; fileRef = AFD572350996E53E00BA26F7 /* swirl.c */; }; AFD572730996EE8500BA26F7 /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AFD5727F0996EF1900BA26F7 /* polyominoes.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258F80988A469000655EE /* polyominoes.xml */; }; AFD572810996EF2B00BA26F7 /* polyominoes.c in Sources */ = {isa = PBXBuildFile; fileRef = AFD572800996EF2B00BA26F7 /* polyominoes.c */; }; AFD572AB0996F99600BA26F7 /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AFD572B80996FAF900BA26F7 /* bouboule.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258790988A468000655EE /* bouboule.xml */; }; AFD572BA0996FB3D00BA26F7 /* bouboule.c in Sources */ = {isa = PBXBuildFile; fileRef = AFD572B90996FB3D00BA26F7 /* bouboule.c */; }; AFD572C80996FC0F00BA26F7 /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AFD572EC0997005900BA26F7 /* crystal.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC2588D0988A468000655EE /* crystal.xml */; }; AFD572EE0997006E00BA26F7 /* crystal.c in Sources */ = {isa = PBXBuildFile; fileRef = AFD572ED0997006E00BA26F7 /* crystal.c */; }; AFD572FF099701C000BA26F7 /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AFD5730B099702AF00BA26F7 /* julia.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258D20988A468000655EE /* julia.xml */; }; AFD5730D099702C800BA26F7 /* julia.c in Sources */ = {isa = PBXBuildFile; fileRef = AFD5730C099702C800BA26F7 /* julia.c */; }; AFD573630997411200BA26F7 /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AFD573700997418D00BA26F7 /* strange.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC2591D0988A469000655EE /* strange.xml */; }; AFD57372099741A200BA26F7 /* strange.c in Sources */ = {isa = PBXBuildFile; fileRef = AFD57371099741A200BA26F7 /* strange.c */; }; AFDA11251934424D003D397F /* aligned_malloc.c in Sources */ = {isa = PBXBuildFile; fileRef = AFDA11211934424D003D397F /* aligned_malloc.c */; }; AFDA11261934424D003D397F /* aligned_malloc.h in Headers */ = {isa = PBXBuildFile; fileRef = AFDA11221934424D003D397F /* aligned_malloc.h */; }; AFDA11271934424D003D397F /* thread_util.c in Sources */ = {isa = PBXBuildFile; fileRef = AFDA11231934424D003D397F /* thread_util.c */; }; AFDA11281934424D003D397F /* thread_util.h in Headers */ = {isa = PBXBuildFile; fileRef = AFDA11241934424D003D397F /* thread_util.h */; }; AFDA6595178A52B70070D24B /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AFDA6597178A52B70070D24B /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AFDA6598178A52B70070D24B /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AFDA6599178A52B70070D24B /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AFDA659A178A52B70070D24B /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AFDA659B178A52B70070D24B /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AFDA65A5178A541A0070D24B /* unknownpleasures.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFDA65A3178A541A0070D24B /* unknownpleasures.xml */; }; AFDA65A6178A541A0070D24B /* unknownpleasures.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFDA65A3178A541A0070D24B /* unknownpleasures.xml */; }; AFDA65A7178A541A0070D24B /* unknownpleasures.c in Sources */ = {isa = PBXBuildFile; fileRef = AFDA65A4178A541A0070D24B /* unknownpleasures.c */; }; AFDA65A8178A541A0070D24B /* unknownpleasures.c in Sources */ = {isa = PBXBuildFile; fileRef = AFDA65A4178A541A0070D24B /* unknownpleasures.c */; settings = {COMPILER_FLAGS = "-DUSE_GL"; }; }; AFDDCCEC19FF0D170072365B /* involute.c in Sources */ = {isa = PBXBuildFile; fileRef = AFE6A16A0CDD78EA002805BF /* involute.c */; }; AFDDCCED19FF0EBD0072365B /* geodesicgears.c in Sources */ = {isa = PBXBuildFile; fileRef = AF7ACFD619FF0B7A00BD752B /* geodesicgears.c */; settings = {COMPILER_FLAGS = "-DUSE_GL"; }; }; AFE2A45C0E2E904600ADB298 /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AFE2A4730E2E90E300ADB298 /* skytentacles.c in Sources */ = {isa = PBXBuildFile; fileRef = AFE2A4720E2E90E300ADB298 /* skytentacles.c */; }; AFE2A4750E2E911200ADB298 /* skytentacles.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFE2A4740E2E911200ADB298 /* skytentacles.xml */; }; AFE30BEE0E52B14700CCF4A5 /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AFE30BFE0E52B18300CCF4A5 /* sonar.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC2590F0988A469000655EE /* sonar.xml */; }; AFE30C020E52B1DC00CCF4A5 /* sonar-icmp.c in Sources */ = {isa = PBXBuildFile; fileRef = AFE30BFF0E52B1DC00CCF4A5 /* sonar-icmp.c */; }; AFE30C030E52B1DC00CCF4A5 /* sonar-sim.c in Sources */ = {isa = PBXBuildFile; fileRef = AFE30C000E52B1DC00CCF4A5 /* sonar-sim.c */; }; AFE30C040E52B1DC00CCF4A5 /* sonar.c in Sources */ = {isa = PBXBuildFile; fileRef = AFE30C010E52B1DC00CCF4A5 /* sonar.c */; }; AFE349291B033A8200AF3D73 /* xscreensaver-text in Resources */ = {isa = PBXBuildFile; fileRef = AF0FAF0B09CA6FF900EE1051 /* xscreensaver-text */; }; AFE6A16C0CDD78EA002805BF /* involute.c in Sources */ = {isa = PBXBuildFile; fileRef = AFE6A16A0CDD78EA002805BF /* involute.c */; }; AFE6A1890CDD7B2E002805BF /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AFE6A18A0CDD7B2E002805BF /* involute.c in Sources */ = {isa = PBXBuildFile; fileRef = AFE6A16A0CDD78EA002805BF /* involute.c */; }; AFE6A40C0CDD7BC3002805BF /* moebiusgears.c in Sources */ = {isa = PBXBuildFile; fileRef = AFE6A40B0CDD7BC3002805BF /* moebiusgears.c */; }; AFE6A40E0CDD7BDC002805BF /* moebiusgears.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFE6A40D0CDD7BDC002805BF /* moebiusgears.xml */; }; AFE6A4220CDD7FAA002805BF /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AFE6A4350CDD800F002805BF /* abstractile.c in Sources */ = {isa = PBXBuildFile; fileRef = AFE6A4340CDD800F002805BF /* abstractile.c */; }; AFE6A4370CDD8027002805BF /* abstractile.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFE6A4360CDD8026002805BF /* abstractile.xml */; }; AFE943B119DD54C1000A5E6D /* xft.c in Sources */ = {isa = PBXBuildFile; fileRef = AFE943AF19DD54C1000A5E6D /* xft.c */; }; AFE943B219DD54C1000A5E6D /* xft.h in Headers */ = {isa = PBXBuildFile; fileRef = AFE943B019DD54C1000A5E6D /* xft.h */; }; AFE943B519DDF97F000A5E6D /* utf8wc.c in Sources */ = {isa = PBXBuildFile; fileRef = AFE943B319DDF97F000A5E6D /* utf8wc.c */; }; AFE943B619DDF97F000A5E6D /* utf8wc.h in Headers */ = {isa = PBXBuildFile; fileRef = AFE943B419DDF97F000A5E6D /* utf8wc.h */; }; AFEB9C37158FFF88003974F3 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AFEB9C3915900514003974F3 /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AFEB9C3815900514003974F3 /* UIKit.framework */; }; AFEB9C3B1590054B003974F3 /* OpenGLES.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AFEB9C3A1590054B003974F3 /* OpenGLES.framework */; }; AFEB9C3D15900558003974F3 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AFEB9C3C15900558003974F3 /* Foundation.framework */; }; AFEB9C401590056A003974F3 /* CoreGraphics.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AFEB9C3E1590056A003974F3 /* CoreGraphics.framework */; }; AFEB9C411590056A003974F3 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AFEB9C3F1590056A003974F3 /* QuartzCore.framework */; }; AFEC23D41CB6EAE100DE138F /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AFEC23D61CB6EAE100DE138F /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AFEC23D71CB6EAE100DE138F /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AFEC23D81CB6EAE100DE138F /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AFEC23D91CB6EAE100DE138F /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AFEC23DA1CB6EAE100DE138F /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AFEC23DB1CB6EAE100DE138F /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; AFEC23DC1CB6EAE100DE138F /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AFEC23E61CB6EC0400DE138F /* dymaxionmap.c in Sources */ = {isa = PBXBuildFile; fileRef = AFEC23E41CB6EBC400DE138F /* dymaxionmap.c */; }; AFEC23E71CB6EC0B00DE138F /* dymaxionmap.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFEC23E51CB6EBDA00DE138F /* dymaxionmap.xml */; }; AFEC23E81CB6EC6800DE138F /* dymaxionmap.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFEC23E51CB6EBDA00DE138F /* dymaxionmap.xml */; }; AFEC23E91CB6EC7F00DE138F /* dymaxionmap.c in Sources */ = {isa = PBXBuildFile; fileRef = AFEC23E41CB6EBC400DE138F /* dymaxionmap.c */; settings = {COMPILER_FLAGS = "-DUSE_GL"; }; }; AFEC68371BD6CA85004C1B64 /* OCRAStd.otf in Resources */ = {isa = PBXBuildFile; fileRef = AFEC68361BD6CA85004C1B64 /* OCRAStd.otf */; }; AFEC68391BD6CDF9004C1B64 /* YearlReg.ttf in Resources */ = {isa = PBXBuildFile; fileRef = AFEC68381BD6CDF9004C1B64 /* YearlReg.ttf */; }; AFEE10541D13406000AAC8F7 /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AFEE10561D13406000AAC8F7 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AFEE10571D13406000AAC8F7 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AFEE10581D13406000AAC8F7 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AFEE10591D13406000AAC8F7 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AFEE105A1D13406000AAC8F7 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AFEE105B1D13406000AAC8F7 /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; AFEE105C1D13406000AAC8F7 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AFEE10661D1341F600AAC8F7 /* cubetwist.c in Sources */ = {isa = PBXBuildFile; fileRef = AFEE10641D1341E300AAC8F7 /* cubetwist.c */; }; AFEE10671D1341FA00AAC8F7 /* cubetwist.c in Sources */ = {isa = PBXBuildFile; fileRef = AFEE10641D1341E300AAC8F7 /* cubetwist.c */; settings = {COMPILER_FLAGS = "-DUSE_GL"; }; }; AFEE10681D1341FE00AAC8F7 /* cubetwist.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFEE10651D1341E300AAC8F7 /* cubetwist.xml */; }; AFEE10691D13420700AAC8F7 /* cubetwist.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFEE10651D1341E300AAC8F7 /* cubetwist.xml */; }; AFEE10731D15EB0800AAC8F7 /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AFEE10751D15EB0800AAC8F7 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AFEE10761D15EB0800AAC8F7 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AFEE10771D15EB0800AAC8F7 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AFEE10781D15EB0800AAC8F7 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AFEE10791D15EB0800AAC8F7 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AFEE107A1D15EB0800AAC8F7 /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; AFEE107B1D15EB0800AAC8F7 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AFEE10851D15EBB900AAC8F7 /* cubestack.c in Sources */ = {isa = PBXBuildFile; fileRef = AFEE10831D15EBA600AAC8F7 /* cubestack.c */; settings = {COMPILER_FLAGS = "-DUSE_GL"; }; }; AFEE10861D15EBC800AAC8F7 /* cubestack.c in Sources */ = {isa = PBXBuildFile; fileRef = AFEE10831D15EBA600AAC8F7 /* cubestack.c */; }; AFEE10871D15EBD900AAC8F7 /* cubestack.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFEE10841D15EBA600AAC8F7 /* cubestack.xml */; }; AFEE10881D15EBDC00AAC8F7 /* cubestack.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFEE10841D15EBA600AAC8F7 /* cubestack.xml */; }; AFEE10921D17E20B00AAC8F7 /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AFEE10941D17E20B00AAC8F7 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AFEE10951D17E20B00AAC8F7 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AFEE10961D17E20B00AAC8F7 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AFEE10971D17E20B00AAC8F7 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AFEE10981D17E20B00AAC8F7 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AFEE10991D17E20B00AAC8F7 /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; AFEE109A1D17E20B00AAC8F7 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AFEE10A41D17E2BA00AAC8F7 /* splodesic.c in Sources */ = {isa = PBXBuildFile; fileRef = AFEE10A21D17E2B300AAC8F7 /* splodesic.c */; settings = {COMPILER_FLAGS = "-DUSE_GL"; }; }; AFEE10A51D17E2C500AAC8F7 /* splodesic.c in Sources */ = {isa = PBXBuildFile; fileRef = AFEE10A21D17E2B300AAC8F7 /* splodesic.c */; }; AFEE10A61D17E2C900AAC8F7 /* splodesic.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFEE10A31D17E2B300AAC8F7 /* splodesic.xml */; }; AFEE10A71D17E2CD00AAC8F7 /* splodesic.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFEE10A31D17E2B300AAC8F7 /* splodesic.xml */; }; AFF1BA0F19A96D8B0016A88D /* lament_model.c in Sources */ = {isa = PBXBuildFile; fileRef = AFF1BA0E19A96D8B0016A88D /* lament_model.c */; }; AFF1BA1019A96D8B0016A88D /* lament_model.c in Sources */ = {isa = PBXBuildFile; fileRef = AFF1BA0E19A96D8B0016A88D /* lament_model.c */; settings = {COMPILER_FLAGS = "-DUSE_GL"; }; }; AFF2868617860E830050A578 /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AFF2868817860E830050A578 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AFF2868917860E830050A578 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AFF2868A17860E830050A578 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AFF2868B17860E830050A578 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AFF2868C17860E830050A578 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AFF28696178611720050A578 /* quasicrystal.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFF28694178611720050A578 /* quasicrystal.xml */; }; AFF28697178611720050A578 /* quasicrystal.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFF28694178611720050A578 /* quasicrystal.xml */; }; AFF28698178611720050A578 /* quasicrystal.c in Sources */ = {isa = PBXBuildFile; fileRef = AFF28695178611720050A578 /* quasicrystal.c */; }; AFF28699178611720050A578 /* quasicrystal.c in Sources */ = {isa = PBXBuildFile; fileRef = AFF28695178611720050A578 /* quasicrystal.c */; settings = {COMPILER_FLAGS = "-DUSE_GL"; }; }; AFF3C9EF17CCAC440028F240 /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AFF3C9F117CCAC440028F240 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AFF3C9F217CCAC440028F240 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AFF3C9F317CCAC440028F240 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AFF3C9F417CCAC440028F240 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AFF3C9F517CCAC440028F240 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AFF3C9FE17CCAD9A0028F240 /* geodesic.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFF3C9FD17CCAD9A0028F240 /* geodesic.xml */; }; AFF3C9FF17CCAD9A0028F240 /* geodesic.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFF3C9FD17CCAD9A0028F240 /* geodesic.xml */; }; AFF3CA0317CCAEB70028F240 /* geodesic.c in Sources */ = {isa = PBXBuildFile; fileRef = AFF3CA0217CCAEB70028F240 /* geodesic.c */; }; AFF3CA0417CCAEB70028F240 /* geodesic.c in Sources */ = {isa = PBXBuildFile; fileRef = AFF3CA0217CCAEB70028F240 /* geodesic.c */; settings = {COMPILER_FLAGS = "-DUSE_GL"; }; }; AFF4633C0C4403E400EE6509 /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AFF4634A0C44044F00EE6509 /* cwaves.c in Sources */ = {isa = PBXBuildFile; fileRef = AFF463490C44044E00EE6509 /* cwaves.c */; }; AFF4634C0C44046500EE6509 /* cwaves.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFF4634B0C44046500EE6509 /* cwaves.xml */; }; AFF4635F0C440AEF00EE6509 /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AFF463720C440B9200EE6509 /* glcells.c in Sources */ = {isa = PBXBuildFile; fileRef = AFF463710C440B9200EE6509 /* glcells.c */; }; AFF463740C440BAC00EE6509 /* glcells.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFF463730C440BAC00EE6509 /* glcells.xml */; }; AFFAB31C19158CE40020F021 /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AFFAB31E19158CE40020F021 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AFFAB31F19158CE40020F021 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AFFAB32019158CE40020F021 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AFFAB32119158CE40020F021 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AFFAB32219158CE40020F021 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AFFAB32319158CE40020F021 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AFFAB32F19158E2A0020F021 /* projectiveplane.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFFAB32C19158E2A0020F021 /* projectiveplane.xml */; }; AFFAB33019158E2A0020F021 /* projectiveplane.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFFAB32C19158E2A0020F021 /* projectiveplane.xml */; }; AFFAB33219158EA80020F021 /* projectiveplane.c in Sources */ = {isa = PBXBuildFile; fileRef = AFFAB33119158EA80020F021 /* projectiveplane.c */; }; AFFAB33319158EA80020F021 /* projectiveplane.c in Sources */ = {isa = PBXBuildFile; fileRef = AFFAB33119158EA80020F021 /* projectiveplane.c */; settings = {COMPILER_FLAGS = "-DUSE_GL"; }; }; CE3D01581B76F4C100993C75 /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; CE3D015A1B76F4C100993C75 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; CE3D015B1B76F4C100993C75 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; CE3D015C1B76F4C100993C75 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; CE3D015D1B76F4C100993C75 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; CE3D015E1B76F4C100993C75 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; CE3D015F1B76F4C100993C75 /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CE3D01601B76F4C100993C75 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; CE3D01691B76F88A00993C75 /* testx11.xml in Resources */ = {isa = PBXBuildFile; fileRef = CE3D01681B76F83E00993C75 /* testx11.xml */; }; CE3D016B1B76F93700993C75 /* testx11.c in Sources */ = {isa = PBXBuildFile; fileRef = CE3D016A1B76F8E200993C75 /* testx11.c */; }; CE43C2BF1C055157004C2BC6 /* jwxyz-cocoa.m in Sources */ = {isa = PBXBuildFile; fileRef = CE43C2BE1C055157004C2BC6 /* jwxyz-cocoa.m */; }; CE55645A1C25141000645458 /* jwxyz-gl.c in Sources */ = {isa = PBXBuildFile; fileRef = CE5564591C25141000645458 /* jwxyz-gl.c */; }; CE8EA1C21C35CF10002D1020 /* jwxyz-common.c in Sources */ = {isa = PBXBuildFile; fileRef = CE8EA1C11C35CF10002D1020 /* jwxyz-common.c */; }; CE9289D319BD00E300961F22 /* async_netdb.c in Sources */ = {isa = PBXBuildFile; fileRef = CE9289D119BD00E200961F22 /* async_netdb.c */; }; CE9289D419BD00E300961F22 /* async_netdb.h in Headers */ = {isa = PBXBuildFile; fileRef = CE9289D219BD00E300961F22 /* async_netdb.h */; }; CEE0BC621A6B0D6200C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BC631A6B0D8100C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BC641A6B0DA100C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BC661A6B0DBF00C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BC671A6B0E0600C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BC681A6B0E1800C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BC691A6B0E2D00C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BC6A1A6B0E3800C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BC6B1A6B0E4200C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BC6C1A6B0E4B00C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BC6D1A6B0E5400C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BC6E1A6B0E5E00C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BC6F1A6B0E6700C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BC701A6B0E7200C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BC711A6B0E7D00C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BC721A6B0E8800C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BC731A6B0E9200C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BC741A6B0E9B00C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BC751A6B0EA500C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BC761A6B0EAE00C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BC771A6B0ED300C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BC781A6B0EDD00C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BC791A6B0EE700C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BC7A1A6B0EF100C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BC7B1A6B0EFB00C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BC7C1A6B0F0400C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BC7D1A6B0F0D00C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BC7E1A6B0F1600C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BC7F1A6B0F1F00C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BC801A6B0F2900C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BC811A6B0F3200C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BC821A6B0F3C00C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BC831A6B0F4500C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BC841A6B0F5400C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BC851A6B0F5D00C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BC861A6B0F6700C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BC871A6B0F7000C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BC881A6B0F7C00C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BC891A6B0FB300C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BC8A1A6B0FBE00C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BC8B1A6B0FC900C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BC8C1A6B0FD400C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BC8D1A6B0FDE00C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BC8E1A6B0FEA00C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BC8F1A6B0FF600C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BC901A6B100000C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BC911A6B100900C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BC921A6B101900C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BC931A6B102600C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BC941A6B103100C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BC951A6B103B00C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BC961A6B104500C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BC971A6B104F00C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BC981A6B105800C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BC991A6B106300C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BC9A1A6B106C00C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BC9B1A6B107600C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BC9C1A6B108000C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BC9D1A6B108B00C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BC9E1A6B109600C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BC9F1A6B10A000C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BCA01A6B10A900C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BCA11A6B10B400C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BCA21A6B10BF00C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BCA31A6B10CB00C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BCA41A6B10D400C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BCA51A6B10DE00C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BCA61A6B10E900C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BCA71A6B10F300C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BCA81A6B10FD00C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BCA91A6B110700C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BCAA1A6B111200C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BCAB1A6B111E00C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BCAC1A6B112A00C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BCAD1A6B113500C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BCAE1A6B114000C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BCAF1A6B114D00C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BCB01A6B115700C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BCB11A6B116100C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BCB21A6B116B00C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BCB31A6B117500C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BCB41A6B117F00C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BCB51A6B118C00C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BCB61A6B119C00C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BCB71A6B11DC00C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BCB81A6B11E700C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BCB91A6B11F100C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BCBA1A6B11FB00C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BCBB1A6B120600C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BCBC1A6B121000C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BCBD1A6B121B00C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BCBE1A6B122600C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BCBF1A6B123500C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BCC01A6B124400C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BCC11A6B124D00C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BCC21A6B125800C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BCC31A6B126200C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BCC41A6B126D00C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BCC51A6B127700C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BCC61A6B12F700C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BCC71A6B130000C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BCC81A6B130A00C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BCC91A6B131300C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BCCA1A6B131E00C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BCCB1A6B132800C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BCCC1A6B133300C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BCCD1A6B133D00C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BCCE1A6B134600C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BCCF1A6B135000C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BCD01A6B135900C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BCD11A6B136300C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BCD21A6B136C00C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BCD31A6B137600C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BCD41A6B137F00C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BCD51A6B138800C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BCD61A6B13A100C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BCD71A6B13AA00C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BCD81A6B13B500C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BCD91A6B13C000C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BCDA1A6B13C900C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BCDB1A6B13D300C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BCDC1A6B13DD00C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BCDD1A6B13E700C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BCDE1A6B13F100C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BCDF1A6B13FC00C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BCE01A6B140500C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BCE11A6B140F00C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BCE21A6B141900C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BCE31A6B142200C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BCE41A6B142C00C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BCE51A6B143500C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BCE61A6B143E00C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BCE71A6B144800C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BCE81A6B146F00C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BCE91A6B147900C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BCEA1A6B150F00C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BCEB1A6B151A00C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BCEC1A6B152300C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BCED1A6B152E00C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BCEE1A6B153800C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BCEF1A6B154200C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BCF01A6B154E00C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BCF11A6B155700C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BCF21A6B156200C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BCF31A6B156C00C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BCF41A6B157600C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BCF51A6B158000C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BCF61A6B158C00C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BCF71A6B159600C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BCF81A6B15A300C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BCF91A6B15AD00C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BCFA1A6B15B600C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BCFB1A6B15BF00C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BCFC1A6B15C800C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BCFD1A6B15D200C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BCFE1A6B15E300C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BCFF1A6B15EE00C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BD001A6B15F800C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BD011A6B160200C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BD021A6B160D00C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BD031A6B161700C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BD041A6B162400C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BD051A6B162E00C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BD061A6B163700C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BD071A6B164000C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BD081A6B164A00C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BD091A6B165300C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BD0A1A6B165D00C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BD0B1A6B166700C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BD0C1A6B167000C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BD0D1A6B167900C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BD0E1A6B168200C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BD0F1A6B168D00C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BD101A6B169600C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BD111A6B169F00C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BD121A6B16A800C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BD131A6B16B200C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BD141A6B16BB00C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BD151A6B16C500C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BD161A6B16D000C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BD171A6B16DA00C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BD181A6B16E300C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BD191A6B16EE00C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BD1A1A6B16F800C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BD1B1A6B170100C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BD1C1A6B170A00C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BD1D1A6B171400C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BD1E1A6B171E00C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BD1F1A6B172800C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BD201A6B173100C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BD211A6B173A00C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BD221A6B174400C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BD231A6B174D00C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BD241A6B175700C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BD251A6B176000C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BD261A6B176900C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BD271A6B177200C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BD281A6B177C00C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BD291A6B178600C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BD2A1A6B178F00C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BD2B1A6B179900C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BD2C1A6B17A200C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BD2D1A6B17AD00C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BD2E1A6B17B600C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BD2F1A6B17BF00C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BD301A6B17C900C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BD311A6B17D300C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BD321A6B17DD00C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BD331A6B17E600C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BD341A6B17EF00C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BD351A6B17F700C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BD361A6B180D00C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BD371A6B181700C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BD381A6B182100C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BD391A6B182B00C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BD3A1A6B183600C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BD3B1A6B184100C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BD3C1A6B184C00C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BD3D1A6B185600C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BD3E1A6B186200C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BD3F1A6B186C00C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BD401A6B187500C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BD411A6B188100C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BD421A6B188B00C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BD431A6B189500C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BD441A6B189F00C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BD451A6B18A900C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BD461A6B18B200C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BD471A6B18BB00C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BD481A6B18C400C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BD491A6B18CE00C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BD4A1A6B18D700C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ AF08399109930B6B00277BE9 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AF083A34099311D700277BE9 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AF0DC7AD0C4C73F600D76972 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AF0DCA300C4C744D00D76972 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF0DC7AB0C4C73F600D76972; remoteInfo = m6502; }; AF0DCA440C4CBB0D00D76972 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AF0DCA5B0C4CBB4300D76972 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF0DCA420C4CBB0D00D76972; remoteInfo = Voronoi; }; AF137D460F075CC8004DE3B2 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF137D410F075C9B004DE3B2; remoteInfo = Obsolete; }; AF137D480F075E5C004DE3B2 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AFD5709B0996B88E00BA26F7; remoteInfo = Worm; }; AF137D4A0F075E5C004DE3B2 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF477208099D4EE8001F091E; remoteInfo = Whirlygig; }; AF137D4C0F075E5C004DE3B2 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AFD56F0B0996AAFA00BA26F7; remoteInfo = Vines; }; AF137D4E0F075E5C004DE3B2 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4771A7099D4949001F091E; remoteInfo = T3D; }; AF137D500F075E5C004DE3B2 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AFD570430996B61600BA26F7; remoteInfo = Spiral; }; AF137D520F075E5C004DE3B2 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AFD570260996B56D00BA26F7; remoteInfo = Sphere; }; AF137D540F075E5C004DE3B2 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AFD570B10996B93000BA26F7; remoteInfo = Rotor; }; AF137D560F075E5C004DE3B2 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AFD56FCF0996B20900BA26F7; remoteInfo = Lissie; }; AF137D580F075E5C004DE3B2 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AFD56FB90996B18F00BA26F7; remoteInfo = Lisa; }; AF137D5A0F075E5C004DE3B2 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AFD56FA30996B10F00BA26F7; remoteInfo = Lightning; }; AF137D5C0F075E5C004DE3B2 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AFD56F8C0996B09400BA26F7; remoteInfo = Laser; }; AF137D600F075E5C004DE3B2 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AFA55CCC09934CE400F3E977; remoteInfo = GLForestFire; }; AF137D620F075E5C004DE3B2 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AFD56EDA0996A95700BA26F7; remoteInfo = Forest; }; AF137D640F075E5C004DE3B2 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF477909099DE379001F091E; remoteInfo = Flag; }; AF137D660F075E5C004DE3B2 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF47765A099DA78E001F091E; remoteInfo = Critical; }; AF137D680F075E5C004DE3B2 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF6427A809A2DE36000F4CD4; remoteInfo = Bubbles; }; AF1A17630D6D6EE3008AF328 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AF1A17830D6D6FA7008AF328 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF1A17610D6D6EE3008AF328; remoteInfo = LCDscrub; }; AF1B0FA91D7AB4740011DBE4 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AF1B0FC41D7AB5740011DBE4 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF1B0FA71D7AB4740011DBE4; remoteInfo = Hexstrut; }; AF32D9E20F3AD0B40080F535 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AF32D9F80F3AD0D90080F535 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF32D9E00F3AD0B40080F535; remoteInfo = RubikBlocks; }; AF3581C11431D47B00E09C51 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AF3581FD143330F900E09C51 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AF35E88C0E63823600691F2F /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AF35E8A20E63825600691F2F /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF35E88A0E63823600691F2F; remoteInfo = Jigsaw; }; AF36340018540D050086A439 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF1AD9E118500F9F00932759; remoteInfo = XScreenSaverUpdater; }; AF39381C1D0FBD6A00205406 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AF3938371D0FBF5300205406 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF39381A1D0FBD6A00205406; remoteInfo = Discoball; }; AF39E284198A11F60064A58D /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AF39E2B9198A16920064A58D /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF39E282198A11F60064A58D; remoteInfo = WindupRobot; }; AF3C71470D624BF50030CC0D /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AF42C5150D624E9200B27FF6 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF3C71450D624BF50030CC0D; remoteInfo = Hypnowheel; }; AF4540D10E52BE8800AE87B5 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AFE30BE80E52B14700CCF4A5; remoteInfo = Sonar; }; AF46E9D11CBBA2B300240FBC /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AF46E9EC1CBBA49A00240FBC /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF46E9CF1CBBA2B300240FBC; remoteInfo = Unicrud; }; AF476FB7099D154F001F091E /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AF476FDC099D1686001F091E /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AF47704E099D4385001F091E /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AF47716B099D4786001F091E /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AF477181099D4803001F091E /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AF4771A9099D4949001F091E /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AF4771DD099D4D9A001F091E /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AF4771F4099D4E63001F091E /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AF47720A099D4EE8001F091E /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AF477220099D4F67001F091E /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AF477255099D5717001F091E /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AF47726D099D57B9001F091E /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AF477285099D5926001F091E /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AF477384099D65A1001F091E /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AF47739C099D6648001F091E /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AF4773C3099D67B9001F091E /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AF477403099D69E7001F091E /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AF477428099D7C70001F091E /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AF477444099D7D33001F091E /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AF477485099D89E4001F091E /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AF47749B099D8A74001F091E /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AF4774B6099D8B5F001F091E /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AF4774D0099D8BFF001F091E /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AF47755F099D9A1A001F091E /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AF477585099D9C28001F091E /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AF4775A1099D9CF7001F091E /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AF4775DA099D9F69001F091E /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AF4775F4099DA030001F091E /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AF477615099DA26C001F091E /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AF477646099DA6D0001F091E /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AF47765C099DA78E001F091E /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AF477672099DA849001F091E /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AF477691099DAA6F001F091E /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AF4776AC099DABDD001F091E /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AF4776C2099DAC8A001F091E /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AF4776DD099DADDF001F091E /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AF4776F3099DAE7A001F091E /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AF47770F099DAF9F001F091E /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AF477725099DB044001F091E /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AF477754099DB61E001F091E /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AF477776099DB965001F091E /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AF477792099DBA90001F091E /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AF4777D3099DC183001F091E /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AF4778AD099DDB79001F091E /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AF4778C9099DDCAE001F091E /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AF4778EA099DDDC8001F091E /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AF47790B099DE379001F091E /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AF47792C099DE4C7001F091E /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AF480921098C412F00FB32B8 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AF480929098C419000FB32B8 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AF48092C098C41AE00FB32B8 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AF480935098C421200FB32B8 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AF480C4B098E301400FB32B8 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AF480D5B098EED6900FB32B8 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF480D59098EED5100FB32B8; remoteInfo = "All Savers (OpenGL)"; }; AF480D5D098EED6900FB32B8 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF480D58098EED3D00FB32B8; remoteInfo = "All Savers (XLockmore)"; }; AF480D5F098EED6900FB32B8 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF480AAF098C669800FB32B8; remoteInfo = "All Savers (XScreenSaver)"; }; AF480D74098EEDDE00FB32B8 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AF4810ED09909FBA00FB32B8 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AF4812520990CE2700FB32B8 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AF4812B50990D3D900FB32B8 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AF48DEF10A0C25E000F94CF9 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AF48DF050A0C261100F94CF9 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF48DEEF0A0C25E000F94CF9; remoteInfo = GLSchool; }; AF4A344B102A593600A81B2A /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AF4A345F102A59A400A81B2A /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4A3449102A593600A81B2A; remoteInfo = Surfaces; }; AF4F10ED143450C300E34F3F /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF3581BF1431D47B00E09C51; remoteInfo = CompanionCube; }; AF4F10EF143450C300E34F3F /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF78D175142DD8F3002AAF77; remoteInfo = Hilbert; }; AF4F10F1143450C300E34F3F /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF3581FB143330F900E09C51; remoteInfo = TronBit; }; AF4FD6E80CE7A486005EE58E /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AF4FD6FE0CE7A4F9005EE58E /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4FD6E60CE7A486005EE58E; remoteInfo = Lockward; }; AF4FF4970D52CA5000666F98 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4FF4930D52CA0800666F98; remoteInfo = m6502.h; }; AF4FF4BC0D52CBDE00666F98 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AF4FF4D60D52CD0D00666F98 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4FF4BA0D52CBDE00666F98; remoteInfo = CubicGrid; }; AF5C9AFB1A0CCE6E00B0147A /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AF5C9B151A0CCF8000B0147A /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF5C9AF91A0CCE6E00B0147A; remoteInfo = Cityflow; }; AF63A7F31AB4EDDB00593C75 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AF63A80E1AB4EFD300593C75 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF63A7F11AB4EDDB00593C75; remoteInfo = RomanBoy; }; AF63F2491C3465BE0033E133 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AF63F24B1C3465BE0033E133 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4FF4930D52CA0800666F98; remoteInfo = m6502.h; }; AF63F24D1C3465BE0033E133 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AFA56119099378CB00F3E977; remoteInfo = molecules.h; }; AF63F4521C34682A0033E133 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AF63F4541C34682A0033E133 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4FF4930D52CA0800666F98; remoteInfo = m6502.h; }; AF63F4561C34682A0033E133 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AFA56119099378CB00F3E977; remoteInfo = molecules.h; }; AF63F47A1C3469FC0033E133 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AF63F47C1C3469FC0033E133 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4FF4930D52CA0800666F98; remoteInfo = m6502.h; }; AF63F47E1C3469FC0033E133 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AFA56119099378CB00F3E977; remoteInfo = molecules.h; }; AF6423F4099FF9C2000F4CD4 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AF6425CE09A18855000F4CD4 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AF6425EE09A189EC000F4CD4 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AF64261109A18D6C000F4CD4 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AF64262E09A18F54000F4CD4 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AF64265109A19229000F4CD4 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AF64267D09A194B0000F4CD4 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AF64277309A1D37A000F4CD4 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AF6427AA09A2DE36000F4CD4 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AF68A48019196CF800D41CD1 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AF68A49D19196EA000D41CD1 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF68A47E19196CF800D41CD1; remoteInfo = Tessellimage; }; AF714E4E105613410046AB1D /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4774B4099D8B5F001F091E; remoteInfo = LMorph; }; AF714E50105613580046AB1D /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AFD570C90996B9F800BA26F7; remoteInfo = Ant; }; AF73FF241A09877F00E485E9 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AF73FF3E1A0988F000E485E9 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF73FF221A09877F00E485E9; remoteInfo = BinaryRing; }; AF7511011782B5B900380EA1 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AF7776E609B63ABF00EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AF77771C09B6416100EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AF77774009B6446500EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AF77777609B6497800EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AF77779009B64A5200EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AF7777AA09B64B2600EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AF7777D209B64C6B00EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AF7777EC09B64E3100EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AF77781209B6504400EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AF77784609B6528100EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AF77786309B6536000EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AF77788109B6563500EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AF7778A709B659C800EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AF7778D609B6604500EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF9D475F09B53166006E59CF; remoteInfo = Zoom; }; AF7778D809B6604500EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4776AA099DABDD001F091E; remoteInfo = XSpirograph; }; AF7778DA09B6604500EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4776C0099DAC8A001F091E; remoteInfo = XRaySwarm; }; AF7778DC09B6604600EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF477442099D7D33001F091E; remoteInfo = XMatrix; }; AF7778DE09B6604600EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF9D4C6909B59F27006E59CF; remoteInfo = XLyap; }; AF7778E009B6604600EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4778C7099DDCAE001F091E; remoteInfo = XJack; }; AF7778E209B6604600EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF9D4D7E09B5B2DC006E59CF; remoteInfo = XAnalogTV; }; AF7778E409B6604600EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF975808099C41D500B05160; remoteInfo = XFlame; }; AF7778E609B6604600EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF477382099D65A1001F091E; remoteInfo = Wormhole; }; AF7778EA09B6604600EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4776DB099DADDF001F091E; remoteInfo = WhirlWindWarp; }; AF7778EC09B6604600EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF47717F099D4803001F091E; remoteInfo = Wander; }; AF7778EE09B6604600EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4776F1099DAE7A001F091E; remoteInfo = Vermiculate; }; AF7778F009B6604600EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF9D496C09B5411D006E59CF; remoteInfo = Twang; }; AF7778F209B6604600EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF476FDA099D1686001F091E; remoteInfo = Truchet; }; AF7778F609B6604600EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF477723099DB044001F091E; remoteInfo = Substrate; }; AF7778F809B6604600EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF47759F099D9CF7001F091E; remoteInfo = Starfish; }; AF7778FA09B6604600EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF477644099DA6D0001F091E; remoteInfo = Squiral; }; AF7778FC09B6604600EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF9D499709B544C2006E59CF; remoteInfo = Spotlight; }; AF7778FE09B6604700EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF64277109A1D37A000F4CD4; remoteInfo = SpeedMine; }; AF77790209B6604700EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF47792A099DE4C7001F091E; remoteInfo = Slip; }; AF77790409B6604700EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF9D474409B5300A006E59CF; remoteInfo = SlideScreen; }; AF77790609B6604700EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF975865099C475900B05160; remoteInfo = ShadeBobs; }; AF77790809B6604700EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF9D495409B53FC9006E59CF; remoteInfo = RotZoomer; }; AF77790A09B6604700EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF9770290989D1E6001F8B92; remoteInfo = Rorschach; }; AF77790C09B6604700EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF975D52099CA0F000B05160; remoteInfo = Rocks; }; AF77790E09B6604700EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF9D492B09B53CBA006E59CF; remoteInfo = Ripples; }; AF77791009B6604700EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF9757C2099C3E6300B05160; remoteInfo = RD; }; AF77791209B6604700EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF6425EC09A189EC000F4CD4; remoteInfo = Qix; }; AF77791409B6604700EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF477583099D9C28001F091E; remoteInfo = Pyro; }; AF77791609B6604700EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF47726B099D57B9001F091E; remoteInfo = PopSquares; }; AF77791809B6604700EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF9D4CE709B5AA8E006E59CF; remoteInfo = Pong; }; AF77791A09B6604700EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF477283099D5926001F091E; remoteInfo = Piecewise; }; AF77791C09B6604800EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF7776E409B63ABF00EA3033; remoteInfo = Phosphor; }; AF77791E09B6604800EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF477670099DA849001F091E; remoteInfo = Petri; }; AF77792009B6604800EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4778AB099DDB79001F091E; remoteInfo = Penetrate; }; AF77792209B6604800EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF47755D099D9A1A001F091E; remoteInfo = Pedal; }; AF77792409B6604800EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF975C5D099C8F3F00B05160; remoteInfo = NoseGuy; }; AF77792609B6604800EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4771F2099D4E63001F091E; remoteInfo = NerveRot; }; AF77792809B6604800EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF64264F09A19229000F4CD4; remoteInfo = Munch; }; AF77792A09B6604800EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF64262C09A18F54000F4CD4; remoteInfo = Moire2; }; AF77792C09B6604800EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF975775099C374A00B05160; remoteInfo = Moire; }; AF77793009B6604800EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF975A36099C681F00B05160; remoteInfo = MetaBalls; }; AF77793209B6604800EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF975AFC099C6FE400B05160; remoteInfo = MemScroller; }; AF77793409B6604800EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4774CE099D8BFF001F091E; remoteInfo = Maze; }; AF77793809B6604800EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF477613099DA26C001F091E; remoteInfo = Kumppa; }; AF77793A09B6604900EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF477499099D8A74001F091E; remoteInfo = Kaleidescope; }; AF77793E09B6604900EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF477401099D69E7001F091E; remoteInfo = Intermomentary; }; AF77794009B6604900EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF476FB5099D154F001F091E; remoteInfo = Interference; }; AF77794209B6604900EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF477752099DB61E001F091E; remoteInfo = Interaggregate; }; AF77794409B6604900EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF97572D099C317000B05160; remoteInfo = IMSMap; }; AF77794609B6604900EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF477426099D7C70001F091E; remoteInfo = IFS; }; AF77794C09B6604900EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF480C49098E301400FB32B8; remoteInfo = Helix; }; AF77794E09B6604900EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF975C12099C8C1500B05160; remoteInfo = Halo; }; AF77795009B6604900EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF477253099D5717001F091E; remoteInfo = Halftone; }; AF77795209B6604900EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF975C3D099C8DCF00B05160; remoteInfo = Greynetic; }; AF77795409B6604A00EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF64267B09A194B0000F4CD4; remoteInfo = Goop; }; AF77795609B6604A00EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF47739A099D6648001F091E; remoteInfo = FuzzyFlakes; }; AF77795809B6604A00EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF77787F09B6563500EA3033; remoteInfo = FontGlide; }; AF77795A09B6604A00EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF477790099DBA90001F091E; remoteInfo = FluidBalls; }; AF77795C09B6604A00EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF477483099D89E4001F091E; remoteInfo = Flame; }; AF77795E09B6604A00EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF975AD7099C6EB100B05160; remoteInfo = Fireworkx; }; AF77796009B6604A00EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF975A6C099C6AB200B05160; remoteInfo = Eruption; }; AF77796209B6604A00EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4775F2099DA030001F091E; remoteInfo = Epicycle; }; AF77796409B6604A00EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF9D48F409B535DA006E59CF; remoteInfo = Distort; }; AF77796609B6604A00EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF47704C099D4385001F091E; remoteInfo = Deluxe; }; AF77796809B6604A00EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF976FBB0989CAA2001F8B92; remoteInfo = Deco; }; AF77796A09B6604A00EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF9D466609B5109C006E59CF; remoteInfo = DecayScreen; }; AF77796C09B6604A00EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4778E8099DDDC8001F091E; remoteInfo = Cynosure; }; AF77797009B6604B00EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4775D8099D9F69001F091E; remoteInfo = Coral; }; AF77797209B6604B00EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF477169099D4786001F091E; remoteInfo = Compass; }; AF77797409B6604B00EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF47770D099DAF9F001F091E; remoteInfo = CloudLife; }; AF77797609B6604B00EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF477774099DB965001F091E; remoteInfo = Celtic; }; AF77797809B6604B00EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4771DB099D4D9A001F091E; remoteInfo = CCurve; }; AF77797A09B6604B00EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF9D48DB09B53322006E59CF; remoteInfo = Bumps; }; AF77797E09B6604B00EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF9D4DAF09B5B71E006E59CF; remoteInfo = BSOD; }; AF77798009B6604B00EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4777D1099DC183001F091E; remoteInfo = BoxFit; }; AF77798209B6604B00EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF7778A509B659C800EA3033; remoteInfo = BlitSpin; }; AF77798409B6604B00EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF47768F099DAA6F001F091E; remoteInfo = Blaster; }; AF77798609B6604B00EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF975A86099C6BC300B05160; remoteInfo = Barcode; }; AF77798809B6604C00EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF9770660989D2F6001F8B92; remoteInfo = Attraction; }; AF77798A09B6604C00EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF9D4DEC09B5BB19006E59CF; remoteInfo = Apple2; }; AF77798C09B6604C00EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4773C1099D67B9001F091E; remoteInfo = Anemotaxis; }; AF77798E09B6604C00EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF47721E099D4F67001F091E; remoteInfo = Anemone; }; AF77799409B6608000EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AFD570850996B80300BA26F7; remoteInfo = Triangle; }; AF77799609B6608100EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AFD571590996C0CE00BA26F7; remoteInfo = Thornbird; }; AF77799809B6608100EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AFD572220996E4A300BA26F7; remoteInfo = Swirl; }; AF77799A09B6608100EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AFD5735D0997411200BA26F7; remoteInfo = Strange; }; AF7779A009B6608100EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AFD5700F0996B4CC00BA26F7; remoteInfo = Sierpinski; }; AF7779A409B6608100EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AFD5726D0996EE8500BA26F7; remoteInfo = Polyominoes; }; AF7779A609B6608100EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AFD56FF80996B43800BA26F7; remoteInfo = Penrose; }; AF7779A809B6608100EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF77771A09B6416100EA3033; remoteInfo = Pacman; }; AF7779AA09B6608100EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AFD5706F0996B72700BA26F7; remoteInfo = Mountain; }; AF7779AC09B6608100EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF794FCD09974FA60059A8B0; remoteInfo = Loop; }; AF7779B609B6608100EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AFD572F9099701C000BA26F7; remoteInfo = Julia; }; AF7779BA09B6608100EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AFD56F6B0996B01600BA26F7; remoteInfo = Hopalong; }; AF7779BC09B6608100EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AFD56F4F0996AEEE00BA26F7; remoteInfo = Grav; }; AF7779BE09B6608100EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AFD56F230996AB8A00BA26F7; remoteInfo = Galaxy; }; AF7779C209B6608100EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AFD570EA0996BBBF00BA26F7; remoteInfo = Flow; }; AF7779C609B6608200EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF794F8E09974A320059A8B0; remoteInfo = Fiberlamp; }; AF7779C809B6608200EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AFD570590996B6A300BA26F7; remoteInfo = FadePlot; }; AF7779CA09B6608200EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AFD571430996C01700BA26F7; remoteInfo = Euler2D; }; AF7779CC09B6608200EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF480D72098EEDDE00FB32B8; remoteInfo = Drift; }; AF7779CE09B6608200EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AFD571130996BE9300BA26F7; remoteInfo = Discrete; }; AF7779D009B6608200EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF794F64099748450059A8B0; remoteInfo = Demon; }; AF7779D209B6608200EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AFD572C20996FC0F00BA26F7; remoteInfo = Crystal; }; AF7779D409B6608200EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AFD56EAE0996A72600BA26F7; remoteInfo = Braid; }; AF7779D609B6608200EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AFD572A50996F99600BA26F7; remoteInfo = Bouboule; }; AF7779D809B6608200EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AFD5712C0996BF2E00BA26F7; remoteInfo = Apollonian; }; AF7779DC09B660AF00EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AFA56379099397B300F3E977; remoteInfo = TimeTunnel; }; AF7779DE09B660AF00EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AFA562F20993943B00F3E977; remoteInfo = Tangram; }; AF7779E009B660AF00EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AFA559920993322100F3E977; remoteInfo = Superquadrics; }; AF7779E209B660B000EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF7777A809B64B2600EA3033; remoteInfo = StonerView; }; AF7779E409B660B000EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF77781009B6504400EA3033; remoteInfo = StarWars; }; AF7779E609B660B000EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AFA55A030993340300F3E977; remoteInfo = Stairs; }; AF7779E809B660B000EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AFA55A20099334A000F3E977; remoteInfo = Sproingies; }; AF7779EA09B660B000EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AFA55D7F099358C400F3E977; remoteInfo = Spheremonics; }; AF7779EC09B660B000EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AFA55B7909933F7200F3E977; remoteInfo = Sierpinski3D; }; AF7779EE09B660B000EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AFA55D3C0993565300F3E977; remoteInfo = SBalls; }; AF7779F009B660B000EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AFA559CF0993330600F3E977; remoteInfo = Rubik; }; AF7779F209B660B000EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AFA55DF009935E4900F3E977; remoteInfo = Queens; }; AF7779F409B660B100EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AFA55B2509933E8D00F3E977; remoteInfo = Pulsar; }; AF7779F609B660B100EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AFA562060993849F00F3E977; remoteInfo = Providence; }; AF7779F809B660B100EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AFA560AE0993718D00F3E977; remoteInfo = Polytopes; }; AF7779FA09B660B100EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AFA5619D09937D7E00F3E977; remoteInfo = Polyhedra; }; AF7779FC09B660B100EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4812B30990D3D900FB32B8; remoteInfo = Pipes; }; AF7779FE09B660B200EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AFA5621F0993852500F3E977; remoteInfo = Pinion; }; AF777A0009B660B200EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AFA5617B09937CF100F3E977; remoteInfo = Noof; }; AF777A0209B660B200EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AFA559B50993328000F3E977; remoteInfo = Morph3D; }; AF777A0409B660B200EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AFA560FD0993781600F3E977; remoteInfo = Molecule; }; AF777A0609B660B200EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AFA5596D0993317900F3E977; remoteInfo = Moebius; }; AF777A0809B660B200EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF77778E09B64A5200EA3033; remoteInfo = MirrorBlob; }; AF777A0A09B660B200EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AFA55BE40993429100F3E977; remoteInfo = Menger; }; AF777A0C09B660B200EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AFA55DC809935D7000F3E977; remoteInfo = Lavalite; }; AF777A0E09B660B200EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AFA55A790993364300F3E977; remoteInfo = Lament; }; AF777A1009B660B300EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AFA55F2A0993622F00F3E977; remoteInfo = Klein; }; AF777A1209B660B300EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AFA563A4099398BB00F3E977; remoteInfo = Juggler3D; }; AF777A1409B660B300EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AFA55F06099361B700F3E977; remoteInfo = JigglyPuff; }; AF777A1609B660B300EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AFA55F420993629000F3E977; remoteInfo = HyperTorus; }; AF777A1809B660B300EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AFD56DF10996A03800BA26F7; remoteInfo = GLText; }; AF777A1A09B660B300EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AFA55C77099349A600F3E977; remoteInfo = GLSnake; }; AF777A1C09B660B300EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF7777D009B64C6B00EA3033; remoteInfo = GLSlideshow; }; AF777A1E09B660B300EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AFA55B0909933E0500F3E977; remoteInfo = GLPlanet; }; AF777A2009B660B300EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AFA55F720993643600F3E977; remoteInfo = GLMatrix; }; AF777A2209B660B400EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AFA55FF909936C6D00F3E977; remoteInfo = GLKnots; }; AF777A2409B660B400EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AFA56331099395ED00F3E977; remoteInfo = GLHanoi; }; AF777A2809B660B400EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AFA55E2F09935F8E00F3E977; remoteInfo = GLBlur; }; AF777A2A09B660B400EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AFA55B9109933FDA00F3E977; remoteInfo = GFlux; }; AF777A2C09B660B400EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF77777409B6497800EA3033; remoteInfo = Gleidescope; }; AF777A2E09B660B400EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4812500990CE2700FB32B8; remoteInfo = Gears; }; AF777A3009B660B400EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AFA55E4E09935FF900F3E977; remoteInfo = FlyingToasters; }; AF777A3209B660B400EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF7777EA09B64E3100EA3033; remoteInfo = FlipText; }; AF777A3409B660B400EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF77773E09B6446500EA3033; remoteInfo = FlipScreen3D; }; AF777A3609B660B400EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AFA5603209936D5100F3E977; remoteInfo = FlipFlop; }; AF777A3809B660B400EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF6423F2099FF9C2000F4CD4; remoteInfo = Extrusion; }; AF777A3A09B660B500EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AFA55C0E0993431300F3E977; remoteInfo = Engine; }; AF777A3C09B660B500EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AFA55E0D09935EDC00F3E977; remoteInfo = Endgame; }; AF777A3E09B660B500EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF77786109B6536000EA3033; remoteInfo = DNAlogo; }; AF777A4009B660B500EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4810EB09909FBA00FB32B8; remoteInfo = DangerBall; }; AF777A4209B660B500EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AFA55FD309936BFA00F3E977; remoteInfo = CubeStorm; }; AF777A4409B660B500EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AFA55D620993584B00F3E977; remoteInfo = Cubenetic; }; AF777A4609B660B500EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AFA56351099396C000F3E977; remoteInfo = Cube21; }; AF777A4809B660B500EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AFA563130993951000F3E977; remoteInfo = Crackberg; }; AF777A4A09B660B600EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AFA55BAB099340CE00F3E977; remoteInfo = Circuit; }; AF777A4C09B660B600EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF77784409B6528100EA3033; remoteInfo = Carousel; }; AF777A4E09B660B600EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AFA55946099330B000F3E977; remoteInfo = Cage; }; AF777A5009B660B600EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AFA55ACF09933CEF00F3E977; remoteInfo = Bubble3D; }; AF777A5209B660B600EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AFA55CA909934BB200F3E977; remoteInfo = Boxed; }; AF777A5409B660B600EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AFA55EC7099360E300F3E977; remoteInfo = BouncingCow; }; AF777A5609B660B600EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AFA562BF099392C600F3E977; remoteInfo = Boing; }; AF777A5809B660B600EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AFA5601409936CC800F3E977; remoteInfo = BlockTube; }; AF777A5A09B660B600EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AFA5615609937C0D00F3E977; remoteInfo = BlinkBox; }; AF777A5C09B660B600EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF083A32099311D700277BE9; remoteInfo = Atunnel; }; AF777A5E09B660B600EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF08398F09930B6B00277BE9; remoteInfo = Atlantis; }; AF777A6009B660B700EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AFA5606209936F3800F3E977; remoteInfo = AntSpotlight; }; AF777A6209B660B700EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AFA562DA099393C900F3E977; remoteInfo = AntMaze; }; AF777A6409B660B700EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AFA5604A09936E2100F3E977; remoteInfo = AntInspect; }; AF78D177142DD8F3002AAF77 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AF794F66099748450059A8B0 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AF794F9009974A320059A8B0 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AF794FCF09974FA60059A8B0 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AF7ACFC219FF0A9200BD752B /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AF7ACFDB19FF0BDB00BD752B /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF7ACFC019FF0A9200BD752B; remoteInfo = GeodesicGears; }; AF7E07FD15925DF200D81407 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4FF4930D52CA0800666F98; remoteInfo = m6502.h; }; AF7E07FF15925DFE00D81407 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AFA56119099378CB00F3E977; remoteInfo = molecules.h; }; AF918979158FC00A002B5D1E /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AF97572F099C317000B05160 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AF975777099C374A00B05160 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AF9757C4099C3E6300B05160 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AF97580A099C41D500B05160 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AF975867099C475900B05160 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AF975A38099C681F00B05160 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AF975A6E099C6AB200B05160 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AF975A88099C6BC300B05160 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AF975AD9099C6EB100B05160 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AF975AFE099C6FE400B05160 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AF975C14099C8C1500B05160 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AF975C3F099C8DCF00B05160 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AF975C5F099C8F3F00B05160 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AF975D54099CA0F000B05160 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AF998EDC0A083DB30051049D /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AF998EF60A083E1D0051049D /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF998EDA0A083DB30051049D; remoteInfo = TopBlock; }; AF9D466809B5109C006E59CF /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AF9D474609B5300A006E59CF /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AF9D476109B53166006E59CF /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AF9D48DD09B53322006E59CF /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AF9D48F609B535DA006E59CF /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AF9D492D09B53CBA006E59CF /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AF9D495609B53FC9006E59CF /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AF9D496E09B5411D006E59CF /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AF9D499909B544C2006E59CF /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AF9D4C6B09B59F27006E59CF /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AF9D4CE909B5AA8E006E59CF /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AF9D4D8009B5B2DC006E59CF /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AF9D4DB109B5B71E006E59CF /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AF9D4DEE09B5BB19006E59CF /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AFA160911052FF87009B93AA /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF6425CC09A18855000F4CD4; remoteInfo = HyperCube; }; AFA160931052FF87009B93AA /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF64260F09A18D6C000F4CD4; remoteInfo = HyperBall; }; AFA2118E1CD59DAF00C0D2A1 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AFA211A91CD5A08000C0D2A1 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AFA2118C1CD59DAF00C0D2A1; remoteInfo = RaverHoop; }; AFA339300B058505002B0E7D /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AFA33B8E0B0585A4002B0E7D /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AFA3392E0B058505002B0E7D; remoteInfo = WebCollage; }; AFA33BCE0B0587B2002B0E7D /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AFA33BC60B058740002B0E7D; remoteInfo = "webcollage-helper"; }; AFA33BDB0B058952002B0E7D /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AFA33BC60B058740002B0E7D; remoteInfo = "webcollage-helper"; }; AFA33C030B058E3C002B0E7D /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AFA33C020B058E17002B0E7D; remoteInfo = webcollage; }; AFA55948099330B000F3E977 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AFA5596F0993317900F3E977 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AFA559940993322100F3E977 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AFA559B70993328000F3E977 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AFA559D10993330600F3E977 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AFA55A050993340300F3E977 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AFA55A22099334A000F3E977 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AFA55A7B0993364300F3E977 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AFA55AD109933CEF00F3E977 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AFA55B0B09933E0500F3E977 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AFA55B2709933E8D00F3E977 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AFA55B7B09933F7200F3E977 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AFA55B9309933FDA00F3E977 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AFA55BAD099340CE00F3E977 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AFA55BE60993429100F3E977 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AFA55C100993431300F3E977 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AFA55C79099349A600F3E977 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AFA55CAB09934BB200F3E977 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AFA55CCE09934CE400F3E977 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AFA55D3E0993565300F3E977 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AFA55D640993584B00F3E977 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AFA55D81099358C400F3E977 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AFA55DCA09935D7000F3E977 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AFA55DF209935E4900F3E977 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AFA55E0F09935EDC00F3E977 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AFA55E3109935F8E00F3E977 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AFA55E5009935FF900F3E977 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AFA55EC9099360E300F3E977 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AFA55F08099361B700F3E977 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AFA55F2C0993622F00F3E977 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AFA55F440993629000F3E977 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AFA55F740993643600F3E977 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AFA55FD509936BFA00F3E977 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AFA55FFB09936C6D00F3E977 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AFA5601609936CC800F3E977 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AFA5603409936D5100F3E977 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AFA5604C09936E2100F3E977 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AFA5606409936F3800F3E977 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AFA560B00993718D00F3E977 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AFA560FF0993781600F3E977 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AFA5611D0993791D00F3E977 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AFA56119099378CB00F3E977; remoteInfo = molecules.h; }; AFA5615809937C0D00F3E977 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AFA5617D09937CF100F3E977 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AFA5619F09937D7E00F3E977 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AFA562080993849F00F3E977 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AFA562210993852500F3E977 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AFA562C1099392C600F3E977 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AFA562DC099393C900F3E977 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AFA562F40993943B00F3E977 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AFA563150993951000F3E977 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AFA56333099395ED00F3E977 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AFA56353099396C000F3E977 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AFA5637B099397B300F3E977 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AFA563A6099398BB00F3E977 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AFACE8751CC83458008B24CD /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AFACE8901CC8365F008B24CD /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AFACE8731CC83458008B24CD; remoteInfo = EnergyStream; }; AFB581AF102F363300342B11 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AFD571B50996D9DC00BA26F7; remoteInfo = Juggle; }; AFB591A9178B812C00EA4005 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AFB591C2178B821E00EA4005 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AFB591A7178B812C00EA4005; remoteInfo = Hexadrop; }; AFBFE73F1786405E00432B21 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AFF2867F17860E830050A578; remoteInfo = QuasiCrystal; }; AFBFE7411786407000432B21 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF7510FF1782B5B900380EA1; remoteInfo = Kaleidocycle; }; AFBFE74D178642DC00432B21 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AFBFE7631786438900432B21 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF9D4DEC09B5BB19006E59CF; remoteInfo = Apple2; }; AFBFE76B178647FE00432B21 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AFBFE7801786482B00432B21 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF7776E409B63ABF00EA3033; remoteInfo = Phosphor; }; AFBFE784178648E600432B21 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AFBFE74B178642DC00432B21; remoteInfo = "Apple2-OSX"; }; AFBFE786178648F500432B21 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AFBFE767178647FE00432B21; remoteInfo = "Phosphor-OSX"; }; AFC0E8AD1CDC601A008CAFAC /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AFC0E8C81CDC6125008CAFAC /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AFC0E8AB1CDC601A008CAFAC; remoteInfo = Hydrostat; }; AFCAD5F80992DFE00009617A /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF9771D60989DC4A001F8B92; remoteInfo = SaverTester; }; AFCF833D1AF5B515008BB7E1 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AFCF835B1AF5B683008BB7E1 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AFCF833B1AF5B515008BB7E1; remoteInfo = SplitFlap; }; AFD51B1D0F063B4A00471C02 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AFD51B340F063B7800471C02 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AFD51B1B0F063B4A00471C02; remoteInfo = Photopile; }; AFD56DF30996A03800BA26F7 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AFD56EB00996A72600BA26F7 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AFD56EDC0996A95700BA26F7 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AFD56F0D0996AAFA00BA26F7 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AFD56F250996AB8A00BA26F7 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AFD56F510996AEEE00BA26F7 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AFD56F6D0996B01600BA26F7 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AFD56F8E0996B09400BA26F7 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AFD56FA50996B10F00BA26F7 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AFD56FBB0996B18F00BA26F7 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AFD56FD10996B20900BA26F7 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AFD56FFA0996B43800BA26F7 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AFD570110996B4CC00BA26F7 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AFD570280996B56D00BA26F7 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AFD570450996B61600BA26F7 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AFD5705B0996B6A300BA26F7 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AFD570710996B72700BA26F7 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AFD570870996B80300BA26F7 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AFD5709D0996B88E00BA26F7 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AFD570B30996B93000BA26F7 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AFD570CB0996B9F800BA26F7 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AFD570EC0996BBBF00BA26F7 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AFD571150996BE9300BA26F7 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AFD5712E0996BF2E00BA26F7 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AFD571450996C01700BA26F7 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AFD5715B0996C0CE00BA26F7 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AFD571B70996D9DC00BA26F7 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AFD572240996E4A300BA26F7 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AFD5726F0996EE8500BA26F7 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AFD572A70996F99600BA26F7 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AFD572C40996FC0F00BA26F7 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AFD572FB099701C000BA26F7 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AFD5735F0997411200BA26F7 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AFDA6590178A52B70070D24B /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AFDA65A9178A54690070D24B /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AFDA658E178A52B70070D24B; remoteInfo = "Unknown Pleasures"; }; AFE2A4580E2E904600ADB298 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AFE2A46E0E2E908E00ADB298 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AFE2A4560E2E904600ADB298; remoteInfo = SkyTentacles; }; AFE30BEA0E52B14700CCF4A5 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AFE6A1840CDD7B2E002805BF /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AFE6A19B0CDD7B7F002805BF /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AFE6A1820CDD7B2E002805BF; remoteInfo = MoebiusGears; }; AFE6A41D0CDD7FAA002805BF /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AFE6A42F0CDD7FEE002805BF /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AFE6A41B0CDD7FAA002805BF; remoteInfo = Abstractile; }; AFEC23CF1CB6EAE100DE138F /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AFEC23EA1CB6ED0800DE138F /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AFEC23CD1CB6EAE100DE138F; remoteInfo = DymaxionMap; }; AFEE104F1D13406000AAC8F7 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AFEE106A1D13424C00AAC8F7 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AFEE104D1D13406000AAC8F7; remoteInfo = CubeTwist; }; AFEE106E1D15EB0700AAC8F7 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AFEE10891D15EBF900AAC8F7 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AFEE106C1D15EB0700AAC8F7; remoteInfo = CubeStack; }; AFEE108D1D17E20B00AAC8F7 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AFEE10A81D17E32100AAC8F7 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AFEE108B1D17E20B00AAC8F7; remoteInfo = Splodesic; }; AFF2868117860E830050A578 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AFF3C9EA17CCAC440028F240 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AFF3CA0017CCAE210028F240 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AFF3C9E817CCAC440028F240; remoteInfo = Geodesic; }; AFF463380C4403E400EE6509 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AFF463520C44062500EE6509 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AFF463360C4403E400EE6509; remoteInfo = CWaves; }; AFF4635A0C440AEF00EE6509 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AFF4636E0C440B3B00EE6509 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AFF463580C440AEF00EE6509; remoteInfo = GLCells; }; AFFAB31719158CE40020F021 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AFFAB33419158F1E0020F021 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AFFAB31519158CE40020F021; remoteInfo = ProjectivePlane; }; CE04E8CA1B9B61D00085910B /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = CE3D01511B76F4C100993C75; remoteInfo = TestX11; }; CE3D01531B76F4C100993C75 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; /* End PBXContainerItemProxy section */ /* Begin PBXCopyFilesBuildPhase section */ AF1ADA191850185F00932759 /* CopyFiles */ = { isa = PBXCopyFilesBuildPhase; buildActionMask = 2147483647; dstPath = ""; dstSubfolderSpec = 10; files = ( AF1ADA1A1850186B00932759 /* Sparkle.framework in CopyFiles */, ); runOnlyForDeploymentPostprocessing = 0; }; AF9E7EBD190F4C1B00A8B01F /* CopyFiles */ = { isa = PBXCopyFilesBuildPhase; buildActionMask = 2147483647; dstPath = /usr/share/man/man1/; dstSubfolderSpec = 0; files = ( ); runOnlyForDeploymentPostprocessing = 1; }; /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ 089C165DFE840E0CC02AAC07 /* InfoPlist.strings */ = {isa = PBXFileReference; fileEncoding = 10; lastKnownFileType = text.plist.strings; name = InfoPlist.strings; path = English.lproj/InfoPlist.strings; sourceTree = ""; }; 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Cocoa.framework; path = /System/Library/Frameworks/Cocoa.framework; sourceTree = ""; }; 29B97316FDCFA39411CA2CEA /* main.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = ""; }; 32CA4F630368D1EE00C91783 /* xscreensaver_Prefix.pch */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = xscreensaver_Prefix.pch; sourceTree = ""; }; 550FB5FD1AD64424001A4FA5 /* Media-iOS.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = "Media-iOS.xcassets"; sourceTree = ""; }; 55EDCB3C1AD498A800251909 /* LaunchScreen.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = LaunchScreen.xib; sourceTree = ""; }; 8D1107310486CEB800E47090 /* XScreenSaver.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = XScreenSaver.plist; sourceTree = ""; }; AF01294C157D31DD00C396E1 /* iSaverRunner.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = iSaverRunner.plist; sourceTree = SOURCE_ROOT; }; AF0839A209930B6B00277BE9 /* Atlantis.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Atlantis.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AF0839A909930C4900277BE9 /* atlantis.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = atlantis.c; path = hacks/glx/atlantis.c; sourceTree = ""; }; AF0839AA09930C4900277BE9 /* dolphin.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = dolphin.c; path = hacks/glx/dolphin.c; sourceTree = ""; }; AF0839AB09930C4900277BE9 /* shark.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = shark.c; path = hacks/glx/shark.c; sourceTree = ""; }; AF0839AC09930C4900277BE9 /* swim.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = swim.c; path = hacks/glx/swim.c; sourceTree = ""; }; AF0839AD09930C4900277BE9 /* whale.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = whale.c; path = hacks/glx/whale.c; sourceTree = ""; }; AF0839AE09930C4900277BE9 /* xpm-ximage.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = "xpm-ximage.c"; path = "hacks/glx/xpm-ximage.c"; sourceTree = ""; }; AF0839AF09930C4900277BE9 /* xpm-ximage.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = "xpm-ximage.h"; path = "hacks/glx/xpm-ximage.h"; sourceTree = ""; }; AF083A31099311CE00277BE9 /* atunnel.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = atunnel.c; path = hacks/glx/atunnel.c; sourceTree = ""; }; AF083A48099311D700277BE9 /* Atunnel.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Atunnel.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AF083A58099312B000277BE9 /* tunnel_draw.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = tunnel_draw.c; path = hacks/glx/tunnel_draw.c; sourceTree = ""; }; AF083A5D099312DB00277BE9 /* tunnel_draw.h */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.h; name = tunnel_draw.h; path = hacks/glx/tunnel_draw.h; sourceTree = ""; }; AF0DC7BD0C4C73F600D76972 /* m6502.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = m6502.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AF0DCA320C4C74A200D76972 /* asm6502.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = asm6502.c; path = hacks/asm6502.c; sourceTree = ""; }; AF0DCA330C4C74A200D76972 /* asm6502.h */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.h; name = asm6502.h; path = hacks/asm6502.h; sourceTree = ""; }; AF0DCA340C4C74A200D76972 /* m6502.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = m6502.c; path = hacks/m6502.c; sourceTree = ""; }; AF0DCA370C4C74B700D76972 /* m6502.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = m6502.xml; sourceTree = ""; }; AF0DCA560C4CBB0D00D76972 /* Voronoi.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Voronoi.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AF0DCA5F0C4CBB7300D76972 /* voronoi.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = voronoi.c; path = hacks/glx/voronoi.c; sourceTree = ""; }; AF0DCA610C4CBB8E00D76972 /* voronoi.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = voronoi.xml; sourceTree = ""; }; 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; path = XScreenSaver.icns; sourceTree = ""; }; AF1A17730D6D6EE3008AF328 /* LCDscrub.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; 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 = ""; }; AF1A17800D6D6F62008AF328 /* lcdscrub.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = lcdscrub.xml; sourceTree = ""; }; AF1AD9E218500F9F00932759 /* XScreenSaverUpdater.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = XScreenSaverUpdater.app; sourceTree = BUILT_PRODUCTS_DIR; }; AF1AD9E518500F9F00932759 /* AppKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AppKit.framework; path = System/Library/Frameworks/AppKit.framework; sourceTree = SDKROOT; }; AF1AD9E618500FA000932759 /* CoreData.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreData.framework; path = System/Library/Frameworks/CoreData.framework; sourceTree = SDKROOT; }; AF1AD9E718500FA000932759 /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = System/Library/Frameworks/Foundation.framework; sourceTree = SDKROOT; }; AF1ADA0118500FA100932759 /* XCTest.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = XCTest.framework; path = Library/Frameworks/XCTest.framework; sourceTree = DEVELOPER_DIR; }; AF1ADA151850157400932759 /* Updater.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = Updater.xib; sourceTree = SOURCE_ROOT; }; AF1ADA171850180E00932759 /* Sparkle.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; path = Sparkle.framework; sourceTree = ""; }; AF1B0FBC1D7AB4740011DBE4 /* Hexstrut.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Hexstrut.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AF1B0FBE1D7AB5210011DBE4 /* hexstrut.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = hexstrut.c; path = hacks/glx/hexstrut.c; sourceTree = ""; }; AF1B0FBF1D7AB5210011DBE4 /* hexstrut.xml */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; path = hexstrut.xml; sourceTree = ""; }; AF241F81107C38DF00046A84 /* dropshadow.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = dropshadow.c; path = hacks/glx/dropshadow.c; sourceTree = ""; }; AF241F82107C38DF00046A84 /* dropshadow.h */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.h; name = dropshadow.h; path = hacks/glx/dropshadow.h; sourceTree = ""; }; AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = QuartzCore.framework; path = System/Library/Frameworks/QuartzCore.framework; sourceTree = SDKROOT; }; AF2D522513E954A0002AA818 /* SaverRunner.icns */ = {isa = PBXFileReference; lastKnownFileType = image.icns; path = SaverRunner.icns; sourceTree = ""; }; AF2D8F301CEBA10300198014 /* jwxyz-timers.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = "jwxyz-timers.c"; path = "../jwxyz/jwxyz-timers.c"; sourceTree = ""; }; AF2D8F311CEBA10300198014 /* jwxyz-timers.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = "jwxyz-timers.h"; path = "../jwxyz/jwxyz-timers.h"; sourceTree = ""; }; AF32D9F40F3AD0B40080F535 /* RubikBlocks.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RubikBlocks.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AF32D9FA0F3AD1200080F535 /* rubikblocks.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = rubikblocks.c; path = hacks/glx/rubikblocks.c; sourceTree = ""; }; AF32D9FC0F3AD1330080F535 /* rubikblocks.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = rubikblocks.xml; sourceTree = ""; }; AF34085409B80AAF00F2CEC1 /* StarWars.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = StarWars.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AF34085509B80AB000F2CEC1 /* StonerView.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = StonerView.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AF34085609B80AB000F2CEC1 /* Gleidescope.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Gleidescope.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AF34085709B80AB000F2CEC1 /* FontGlide.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = FontGlide.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AF3581D51431D47B00E09C51 /* CompanionCube.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = CompanionCube.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AF3581D61431D5FC00E09C51 /* companion_disc.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = companion_disc.c; path = hacks/glx/companion_disc.c; sourceTree = ""; }; AF3581D71431D5FC00E09C51 /* companion_heart.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = companion_heart.c; path = hacks/glx/companion_heart.c; sourceTree = ""; }; AF3581D81431D5FC00E09C51 /* companion_quad.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = companion_quad.c; path = hacks/glx/companion_quad.c; sourceTree = ""; }; AF3581D91431D5FC00E09C51 /* companion.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = companion.c; path = hacks/glx/companion.c; sourceTree = ""; }; AF3581E61431D61D00E09C51 /* companioncube.xml */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; path = companioncube.xml; sourceTree = ""; }; AF358216143330F900E09C51 /* TronBit.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = TronBit.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AF3582171433314C00E09C51 /* tronbit_idle1.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = tronbit_idle1.c; path = hacks/glx/tronbit_idle1.c; sourceTree = ""; }; AF3582181433314C00E09C51 /* tronbit_idle2.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = tronbit_idle2.c; path = hacks/glx/tronbit_idle2.c; sourceTree = ""; }; AF3582191433314C00E09C51 /* tronbit_no.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = tronbit_no.c; path = hacks/glx/tronbit_no.c; sourceTree = ""; }; AF35821A1433314C00E09C51 /* tronbit_yes.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = tronbit_yes.c; path = hacks/glx/tronbit_yes.c; sourceTree = ""; }; AF35821B1433314C00E09C51 /* tronbit.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = tronbit.c; path = hacks/glx/tronbit.c; sourceTree = ""; }; AF3582211433318500E09C51 /* tronbit.xml */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; path = tronbit.xml; sourceTree = ""; }; AF35E8A00E63823600691F2F /* Jigsaw.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Jigsaw.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AF35EB250E6382BA00691F2F /* jigsaw.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = jigsaw.c; path = hacks/glx/jigsaw.c; sourceTree = ""; }; AF3633F918530DD90086A439 /* sparkle_dsa_pub.pem */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = sparkle_dsa_pub.pem; sourceTree = ""; }; AF3633FA18530DD90086A439 /* Updater.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Updater.h; sourceTree = ""; }; AF3633FB18530DD90086A439 /* Updater.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = Updater.m; sourceTree = ""; }; AF3633FE18530DFF0086A439 /* Updater.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = Updater.plist; sourceTree = ""; }; AF39382F1D0FBD6A00205406 /* Discoball.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Discoball.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AF3938311D0FBEC800205406 /* discoball.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = discoball.c; path = hacks/glx/discoball.c; sourceTree = ""; }; AF3938321D0FBEC800205406 /* discoball.xml */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; path = discoball.xml; sourceTree = ""; }; AF39E296198A11F60064A58D /* WindupRobot.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = WindupRobot.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AF39E2A0198A13F50064A58D /* robot-wireframe.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = "robot-wireframe.c"; path = "hacks/glx/robot-wireframe.c"; sourceTree = ""; }; AF39E2A1198A13F50064A58D /* winduprobot.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = winduprobot.c; path = hacks/glx/winduprobot.c; sourceTree = ""; }; AF39E2AC198A15820064A58D /* winduprobot.xml */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; path = winduprobot.xml; sourceTree = ""; }; AF3C71590D624BF50030CC0D /* Hypnowheel.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Hypnowheel.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AF3C715D0D624C600030CC0D /* hypnowheel.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = hypnowheel.c; path = hacks/glx/hypnowheel.c; sourceTree = ""; }; AF3C715F0D624C7C0030CC0D /* hypnowheel.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = hypnowheel.xml; sourceTree = ""; }; AF46E9E41CBBA2B300240FBC /* Unicrud.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Unicrud.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AF46E9E61CBBA3F900240FBC /* unicrud.xml */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; path = unicrud.xml; sourceTree = ""; }; AF46E9E71CBBA3F900240FBC /* unicrud.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = unicrud.c; path = hacks/glx/unicrud.c; sourceTree = ""; }; AF476FC6099D154F001F091E /* Interference.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Interference.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AF476FD0099D15AA001F091E /* interference.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = interference.c; path = hacks/interference.c; sourceTree = ""; }; AF476FEB099D1686001F091E /* Truchet.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Truchet.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AF476FF0099D1713001F091E /* truchet.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = truchet.c; path = hacks/truchet.c; sourceTree = ""; }; AF47705C099D4385001F091E /* Deluxe.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Deluxe.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AF477145099D43E2001F091E /* deluxe.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = deluxe.c; path = hacks/deluxe.c; sourceTree = ""; }; AF477179099D4786001F091E /* Compass.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Compass.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AF47717C099D47D3001F091E /* compass.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = compass.c; path = hacks/compass.c; sourceTree = ""; }; AF47718F099D4803001F091E /* Wander.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Wander.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AF477192099D4864001F091E /* wander.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = wander.c; path = hacks/wander.c; sourceTree = ""; }; AF4771B7099D4949001F091E /* T3D.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = T3D.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AF4771BA099D4997001F091E /* t3d.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = t3d.c; path = hacks/t3d.c; sourceTree = ""; }; AF4771EB099D4D9A001F091E /* CCurve.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = CCurve.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AF4771EF099D4DFE001F091E /* ccurve.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = ccurve.c; path = hacks/ccurve.c; sourceTree = ""; }; AF477202099D4E64001F091E /* NerveRot.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = NerveRot.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AF477205099D4EB6001F091E /* nerverot.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = nerverot.c; path = hacks/nerverot.c; sourceTree = ""; }; AF477218099D4EE8001F091E /* Whirlygig.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Whirlygig.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AF47721B099D4F47001F091E /* whirlygig.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = whirlygig.c; path = hacks/whirlygig.c; sourceTree = ""; }; AF47722E099D4F67001F091E /* Anemone.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Anemone.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AF477231099D4FD5001F091E /* anemone.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = anemone.c; path = hacks/anemone.c; sourceTree = ""; }; AF477263099D5717001F091E /* Halftone.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Halftone.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AF477266099D5768001F091E /* halftone.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = halftone.c; path = hacks/halftone.c; sourceTree = ""; }; AF47727B099D57B9001F091E /* PopSquares.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = PopSquares.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AF47727E099D5808001F091E /* popsquares.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = popsquares.c; path = hacks/popsquares.c; sourceTree = ""; }; AF477293099D5926001F091E /* Piecewise.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Piecewise.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AF477297099D5980001F091E /* piecewise.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = piecewise.c; path = hacks/piecewise.c; sourceTree = ""; }; AF477392099D65A1001F091E /* Wormhole.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Wormhole.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AF477395099D65FE001F091E /* wormhole.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = wormhole.c; path = hacks/wormhole.c; sourceTree = ""; }; AF4773AA099D6648001F091E /* FuzzyFlakes.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = FuzzyFlakes.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AF4773B4099D6778001F091E /* fuzzyflakes.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = fuzzyflakes.c; path = hacks/fuzzyflakes.c; sourceTree = ""; }; AF4773D1099D67B9001F091E /* Anemotaxis.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Anemotaxis.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AF4773D4099D6817001F091E /* anemotaxis.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = anemotaxis.c; path = hacks/anemotaxis.c; sourceTree = ""; }; AF477412099D69E7001F091E /* Intermomentary.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Intermomentary.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AF47741C099D6A6C001F091E /* intermomentary.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = intermomentary.c; path = hacks/intermomentary.c; sourceTree = ""; }; AF477437099D7C70001F091E /* IFS.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = IFS.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AF47743A099D7CEA001F091E /* ifs.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = ifs.c; path = hacks/ifs.c; sourceTree = ""; }; AF477452099D7D33001F091E /* XMatrix.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = XMatrix.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AF477455099D7D8A001F091E /* xmatrix.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = xmatrix.c; path = hacks/xmatrix.c; sourceTree = ""; }; AF477493099D89E4001F091E /* Flame.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Flame.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AF477496099D8A53001F091E /* flame.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = flame.c; path = hacks/flame.c; sourceTree = ""; }; AF4774A9099D8A74001F091E /* Kaleidescope.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Kaleidescope.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AF4774AC099D8B08001F091E /* kaleidescope.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = kaleidescope.c; path = hacks/kaleidescope.c; sourceTree = ""; }; AF4774C4099D8B5F001F091E /* LMorph.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = LMorph.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AF4774CB099D8BC2001F091E /* lmorph.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = lmorph.c; path = hacks/lmorph.c; sourceTree = ""; }; AF4774DE099D8BFF001F091E /* Maze.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Maze.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AF4774E1099D8C8B001F091E /* maze.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = maze.c; path = hacks/maze.c; sourceTree = ""; }; AF4774E7099D8D8C001F091E /* logo.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = logo.c; path = utils/logo.c; sourceTree = ""; }; AF47756D099D9A1A001F091E /* Pedal.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Pedal.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AF477570099D9A8A001F091E /* pedal.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = pedal.c; path = hacks/pedal.c; sourceTree = ""; }; AF477593099D9C28001F091E /* Pyro.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Pyro.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AF47759C099D9CA3001F091E /* pyro.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = pyro.c; path = hacks/pyro.c; sourceTree = ""; }; AF4775AF099D9CF7001F091E /* Starfish.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Starfish.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AF4775B3099D9D67001F091E /* starfish.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = starfish.c; path = hacks/starfish.c; sourceTree = ""; }; AF4775BE099D9E79001F091E /* resources.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = resources.c; path = utils/resources.c; sourceTree = ""; }; AF4775BF099D9E79001F091E /* resources.h */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.h; name = resources.h; path = utils/resources.h; sourceTree = ""; }; AF4775E8099D9F69001F091E /* Coral.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Coral.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AF4775EF099D9FFF001F091E /* coral.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = coral.c; path = hacks/coral.c; sourceTree = ""; }; AF477602099DA030001F091E /* Epicycle.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Epicycle.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AF477605099DA097001F091E /* epicycle.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = epicycle.c; path = hacks/epicycle.c; sourceTree = ""; }; AF477623099DA26C001F091E /* Kumppa.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Kumppa.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AF47762A099DA2E9001F091E /* kumppa.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = kumppa.c; path = hacks/kumppa.c; sourceTree = ""; }; AF477654099DA6D0001F091E /* Squiral.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Squiral.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AF477657099DA75D001F091E /* squiral.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = squiral.c; path = hacks/squiral.c; sourceTree = ""; }; AF47766A099DA78F001F091E /* Critical.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Critical.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AF47766D099DA80D001F091E /* critical.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = critical.c; path = hacks/critical.c; sourceTree = ""; }; AF477680099DA849001F091E /* Petri.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Petri.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AF477683099DA8C7001F091E /* petri.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = petri.c; path = hacks/petri.c; sourceTree = ""; }; AF47769F099DAA6F001F091E /* Blaster.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Blaster.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AF4776A2099DAADE001F091E /* blaster.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = blaster.c; path = hacks/blaster.c; sourceTree = ""; }; AF4776BA099DABDD001F091E /* XSpirograph.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = XSpirograph.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AF4776BD099DAC46001F091E /* xspirograph.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = xspirograph.c; path = hacks/xspirograph.c; sourceTree = ""; }; AF4776D0099DAC8A001F091E /* XRaySwarm.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = XRaySwarm.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AF4776D3099DACEB001F091E /* xrayswarm.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = xrayswarm.c; path = hacks/xrayswarm.c; sourceTree = ""; }; AF4776EB099DADDF001F091E /* WhirlWindWarp.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = WhirlWindWarp.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AF4776EE099DAE58001F091E /* whirlwindwarp.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = whirlwindwarp.c; path = hacks/whirlwindwarp.c; sourceTree = ""; }; AF477701099DAE7A001F091E /* Vermiculate.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Vermiculate.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AF477704099DAF3F001F091E /* vermiculate.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = vermiculate.c; path = hacks/vermiculate.c; sourceTree = ""; }; AF47771D099DAF9F001F091E /* CloudLife.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = CloudLife.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AF477720099DB01C001F091E /* cloudlife.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = cloudlife.c; path = hacks/cloudlife.c; sourceTree = ""; }; AF477733099DB044001F091E /* Substrate.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Substrate.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AF477736099DB104001F091E /* substrate.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = substrate.c; path = hacks/substrate.c; sourceTree = ""; }; AF477762099DB61E001F091E /* Interaggregate.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Interaggregate.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AF477769099DB710001F091E /* interaggregate.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = interaggregate.c; path = hacks/interaggregate.c; sourceTree = ""; }; AF477784099DB965001F091E /* Celtic.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Celtic.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AF477787099DBA29001F091E /* celtic.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = celtic.c; path = hacks/celtic.c; sourceTree = ""; }; AF4777A0099DBA90001F091E /* FluidBalls.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = FluidBalls.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AF4777A4099DBB11001F091E /* fluidballs.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = fluidballs.c; path = hacks/fluidballs.c; sourceTree = ""; }; AF4777E1099DC183001F091E /* BoxFit.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = BoxFit.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AF4778A3099DDA91001F091E /* boxfit.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = boxfit.c; path = hacks/boxfit.c; sourceTree = ""; }; AF4778BB099DDB79001F091E /* Penetrate.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Penetrate.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AF4778BE099DDC32001F091E /* penetrate.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = penetrate.c; path = hacks/penetrate.c; sourceTree = ""; }; AF4778D7099DDCAE001F091E /* XJack.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = XJack.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AF4778DA099DDD2B001F091E /* xjack.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = xjack.c; path = hacks/xjack.c; sourceTree = ""; }; AF4778F8099DDDC8001F091E /* Cynosure.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Cynosure.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AF4778FB099DDE79001F091E /* cynosure.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = cynosure.c; path = hacks/cynosure.c; sourceTree = ""; }; AF477919099DE379001F091E /* Flag.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Flag.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AF47791C099DE3F1001F091E /* flag.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = flag.c; path = hacks/flag.c; sourceTree = ""; }; AF47793A099DE4C7001F091E /* Slip.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Slip.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AF47793D099DE56A001F091E /* slip.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = slip.c; path = hacks/slip.c; sourceTree = ""; }; AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libjwxyz.a; sourceTree = BUILT_PRODUCTS_DIR; }; AF480C21098E28EF00FB32B8 /* greynetic.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = greynetic.c; path = hacks/greynetic.c; sourceTree = ""; }; AF480C29098E295D00FB32B8 /* halo.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = halo.c; path = hacks/halo.c; sourceTree = ""; }; AF480C2F098E2A6700FB32B8 /* helix.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = helix.c; path = hacks/helix.c; sourceTree = ""; }; AF480C58098E301400FB32B8 /* Helix.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Helix.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AF480C82098E336D00FB32B8 /* drift.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = drift.c; path = hacks/drift.c; sourceTree = ""; }; AF480C89098E346700FB32B8 /* xlockmore.h */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.h; name = xlockmore.h; path = hacks/xlockmore.h; sourceTree = ""; }; AF480C8A098E34AB00FB32B8 /* xlockmoreI.h */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.h; name = xlockmoreI.h; path = hacks/xlockmoreI.h; sourceTree = ""; }; AF480CBB098E37D600FB32B8 /* xlockmore.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = xlockmore.c; path = hacks/xlockmore.c; sourceTree = ""; }; AF480D81098EEDDE00FB32B8 /* Drift.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Drift.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AF480DD1098F4F6200FB32B8 /* dangerball.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = dangerball.c; path = hacks/glx/dangerball.c; sourceTree = ""; }; AF480DF1098F528500FB32B8 /* OpenGL.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = OpenGL.framework; path = /System/Library/Frameworks/OpenGL.framework; sourceTree = ""; }; AF480EAC098F63B000FB32B8 /* rotator.h */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.h; name = rotator.h; path = hacks/glx/rotator.h; sourceTree = ""; }; AF480EAD098F63BE00FB32B8 /* trackball.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = trackball.c; path = hacks/glx/trackball.c; sourceTree = ""; }; AF480EAF098F63CD00FB32B8 /* trackball.h */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.h; name = trackball.h; path = hacks/glx/trackball.h; sourceTree = ""; }; AF480EB0098F63D600FB32B8 /* gltrackball.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = gltrackball.c; path = hacks/glx/gltrackball.c; sourceTree = ""; }; AF480EB2098F63DF00FB32B8 /* gltrackball.h */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.h; name = gltrackball.h; path = hacks/glx/gltrackball.h; sourceTree = ""; }; AF480EB7098F646400FB32B8 /* rotator.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = rotator.c; path = hacks/glx/rotator.c; sourceTree = ""; }; AF480EBA098F648700FB32B8 /* sphere.h */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.h; name = sphere.h; path = hacks/glx/sphere.h; sourceTree = ""; }; AF480EBB098F649600FB32B8 /* sphere.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = sphere.c; path = hacks/glx/sphere.c; sourceTree = ""; }; AF480ED1098F651C00FB32B8 /* tube.h */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.h; name = tube.h; path = hacks/glx/tube.h; sourceTree = ""; }; AF480ED2098F652A00FB32B8 /* tube.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = tube.c; path = hacks/glx/tube.c; sourceTree = ""; }; AF480FE70990375900FB32B8 /* AGL.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AGL.framework; path = /System/Library/Frameworks/AGL.framework; sourceTree = ""; }; AF4810FB09909FBA00FB32B8 /* DangerBall.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = DangerBall.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AF48112B0990A2C700FB32B8 /* Carbon.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Carbon.framework; path = /System/Library/Frameworks/Carbon.framework; sourceTree = ""; }; AF4812250990CB8C00FB32B8 /* gears.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = gears.c; path = hacks/glx/gears.c; sourceTree = ""; }; AF4812640990CE2700FB32B8 /* Gears.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Gears.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AF4812760990CF5D00FB32B8 /* buildlwo.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = buildlwo.c; path = hacks/glx/buildlwo.c; sourceTree = ""; }; AF4812770990CF5D00FB32B8 /* buildlwo.h */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.h; name = buildlwo.h; path = hacks/glx/buildlwo.h; sourceTree = ""; }; AF4812780990CF5D00FB32B8 /* pipeobjs.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = pipeobjs.c; path = hacks/glx/pipeobjs.c; sourceTree = ""; }; AF4812790990CF5D00FB32B8 /* pipes.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = pipes.c; path = hacks/glx/pipes.c; sourceTree = ""; }; AF4812C60990D3D900FB32B8 /* Pipes.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Pipes.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AF4812F70990D9AE00FB32B8 /* XScreenSaverGLView.h */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.h; path = XScreenSaverGLView.h; sourceTree = ""; }; AF4812F80990D9AE00FB32B8 /* XScreenSaverGLView.m */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.objc; path = XScreenSaverGLView.m; sourceTree = ""; }; AF48DF030A0C25E000F94CF9 /* GLSchool.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = GLSchool.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AF48E1620A0C268400F94CF9 /* glschool_alg.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = glschool_alg.c; path = hacks/glx/glschool_alg.c; sourceTree = ""; }; AF48E1630A0C268500F94CF9 /* glschool_alg.h */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.h; name = glschool_alg.h; path = hacks/glx/glschool_alg.h; sourceTree = ""; }; AF48E1640A0C268500F94CF9 /* glschool_gl.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = glschool_gl.c; path = hacks/glx/glschool_gl.c; sourceTree = ""; }; AF48E1650A0C268500F94CF9 /* glschool_gl.h */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.h; name = glschool_gl.h; path = hacks/glx/glschool_gl.h; sourceTree = ""; }; AF48E1660A0C268500F94CF9 /* glschool.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = glschool.c; path = hacks/glx/glschool.c; sourceTree = ""; }; AF48E1670A0C268500F94CF9 /* glschool.h */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.h; name = glschool.h; path = hacks/glx/glschool.h; sourceTree = ""; }; AF48E16B0A0C26A400F94CF9 /* glschool.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = glschool.xml; sourceTree = ""; }; AF4A345D102A593600A81B2A /* Surfaces.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Surfaces.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AF4A3461102A59EB00A81B2A /* surfaces.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = surfaces.xml; sourceTree = ""; }; AF4A3463102A5A0E00A81B2A /* surfaces.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = surfaces.c; path = hacks/glx/surfaces.c; sourceTree = ""; }; AF4FD6FA0CE7A486005EE58E /* Lockward.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Lockward.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AF4FD7000CE7A577005EE58E /* lockward.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = lockward.c; path = hacks/glx/lockward.c; sourceTree = ""; }; AF4FD7020CE7A5BC005EE58E /* lockward.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = lockward.xml; sourceTree = ""; }; AF4FF4CE0D52CBDE00666F98 /* CubicGrid.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = CubicGrid.saver; sourceTree = BUILT_PRODUCTS_DIR; }; 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; path = 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 /* grabclient-ios.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "grabclient-ios.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; }; AF5C9B0D1A0CCE6E00B0147A /* Cityflow.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Cityflow.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AF5C9B0F1A0CCF4E00B0147A /* cityflow.xml */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; path = cityflow.xml; sourceTree = ""; }; AF5C9B101A0CCF4E00B0147A /* cityflow.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = cityflow.c; path = hacks/glx/cityflow.c; sourceTree = ""; }; AF6048F8157C07C600CA21E4 /* jwzgles.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = jwzgles.c; path = ../jwxyz/jwzgles.c; sourceTree = ""; }; AF6048F9157C07C600CA21E4 /* jwzgles.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = jwzgles.h; path = ../jwxyz/jwzgles.h; sourceTree = ""; }; AF6048FA157C07C600CA21E4 /* jwzglesI.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = jwzglesI.h; path = ../jwxyz/jwzglesI.h; sourceTree = ""; }; AF63A8061AB4EDDB00593C75 /* RomanBoy.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RomanBoy.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AF63A8081AB4EF5D00593C75 /* romanboy.xml */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; path = romanboy.xml; sourceTree = ""; }; AF63A8091AB4EF5D00593C75 /* romanboy.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = romanboy.c; path = hacks/glx/romanboy.c; sourceTree = ""; }; AF63F44E1C3465BE0033E133 /* Apple2.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Apple2.app; sourceTree = BUILT_PRODUCTS_DIR; }; AF63F4741C34682A0033E133 /* Phosphor.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Phosphor.app; sourceTree = BUILT_PRODUCTS_DIR; }; AF63F49A1C3469FC0033E133 /* TestX11.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = TestX11.app; sourceTree = BUILT_PRODUCTS_DIR; }; AF642405099FF9C2000F4CD4 /* Extrusion.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Extrusion.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AF642409099FFAF0000F4CD4 /* extrusion-helix2.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = "extrusion-helix2.c"; path = "hacks/glx/extrusion-helix2.c"; sourceTree = ""; }; AF64240A099FFAF0000F4CD4 /* extrusion-helix3.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = "extrusion-helix3.c"; path = "hacks/glx/extrusion-helix3.c"; sourceTree = ""; }; AF64240B099FFAF0000F4CD4 /* extrusion-helix4.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = "extrusion-helix4.c"; path = "hacks/glx/extrusion-helix4.c"; sourceTree = ""; }; AF64240C099FFAF0000F4CD4 /* extrusion-joinoffset.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = "extrusion-joinoffset.c"; path = "hacks/glx/extrusion-joinoffset.c"; sourceTree = ""; }; AF64240D099FFAF0000F4CD4 /* extrusion-screw.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = "extrusion-screw.c"; path = "hacks/glx/extrusion-screw.c"; sourceTree = ""; }; AF64240E099FFAF0000F4CD4 /* extrusion-taper.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = "extrusion-taper.c"; path = "hacks/glx/extrusion-taper.c"; sourceTree = ""; }; AF64240F099FFAF1000F4CD4 /* extrusion-twistoid.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = "extrusion-twistoid.c"; path = "hacks/glx/extrusion-twistoid.c"; sourceTree = ""; }; AF642410099FFAF1000F4CD4 /* extrusion.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = extrusion.c; path = hacks/glx/extrusion.c; sourceTree = ""; }; AF642411099FFAF1000F4CD4 /* extrusion.h */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.h; name = extrusion.h; path = hacks/glx/extrusion.h; sourceTree = ""; }; AF6425DC09A18856000F4CD4 /* HyperCube.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = HyperCube.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AF6425DF09A188FB000F4CD4 /* hypercube.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = hypercube.c; path = hacks/hypercube.c; sourceTree = ""; }; AF6425FC09A189EC000F4CD4 /* Qix.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Qix.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AF6425FF09A18A94000F4CD4 /* qix.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = qix.c; path = hacks/qix.c; sourceTree = ""; }; AF64261F09A18D6C000F4CD4 /* HyperBall.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = HyperBall.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AF64262209A18E1E000F4CD4 /* hyperball.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = hyperball.c; path = hacks/hyperball.c; sourceTree = ""; }; AF64263C09A18F54000F4CD4 /* Moire2.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Moire2.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AF64263F09A18FEB000F4CD4 /* moire2.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = moire2.c; path = hacks/moire2.c; sourceTree = ""; }; AF64265F09A19229000F4CD4 /* Munch.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Munch.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AF64266209A192C5000F4CD4 /* munch.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = munch.c; path = hacks/munch.c; sourceTree = ""; }; AF64268B09A194B0000F4CD4 /* Goop.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Goop.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AF64268E09A19542000F4CD4 /* goop.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = goop.c; path = hacks/goop.c; sourceTree = ""; }; AF64278109A1D37A000F4CD4 /* SpeedMine.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = SpeedMine.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AF64278709A1D433000F4CD4 /* speedmine.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = speedmine.c; path = hacks/speedmine.c; sourceTree = ""; }; AF6427B809A2DE36000F4CD4 /* Bubbles.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Bubbles.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AF6427BB09A2DF47000F4CD4 /* bubbles-default.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = "bubbles-default.c"; path = "hacks/bubbles-default.c"; sourceTree = ""; }; AF6427BC09A2DF47000F4CD4 /* bubbles.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = bubbles.c; path = hacks/bubbles.c; sourceTree = ""; }; AF6427BD09A2DF47000F4CD4 /* bubbles.h */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.h; name = bubbles.h; path = hacks/bubbles.h; sourceTree = ""; }; AF68A49219196CF800D41CD1 /* Tessellimage.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Tessellimage.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AF68A49419196E3E00D41CD1 /* tessellimage.xml */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; path = tessellimage.xml; sourceTree = ""; }; AF68A49519196E3E00D41CD1 /* tessellimage.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = tessellimage.c; path = hacks/tessellimage.c; sourceTree = ""; }; AF68A49619196E3E00D41CD1 /* delaunay.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = delaunay.c; path = hacks/delaunay.c; sourceTree = ""; }; AF73FF201A08AB9400E485E9 /* iSaverRunner57t.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = iSaverRunner57t.png; sourceTree = ""; }; AF73FF361A09877F00E485E9 /* BinaryRing.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = BinaryRing.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AF73FF381A09889700E485E9 /* binaryring.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = binaryring.c; path = hacks/binaryring.c; sourceTree = ""; }; AF73FF3B1A0988C500E485E9 /* binaryring.xml */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; path = binaryring.xml; sourceTree = ""; }; AF7511121782B5B900380EA1 /* Kaleidocycle.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Kaleidocycle.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AF7511141782B64300380EA1 /* kaleidocycle.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = kaleidocycle.c; path = hacks/glx/kaleidocycle.c; sourceTree = ""; }; AF7511161782B66400380EA1 /* kaleidescope.xml */ = {isa = PBXFileReference; lastKnownFileType = text.xml; path = kaleidescope.xml; sourceTree = ""; }; AF7776F609B63ABF00EA3033 /* Phosphor.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Phosphor.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AF77770309B63B5F00EA3033 /* phosphor.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = phosphor.c; path = hacks/phosphor.c; sourceTree = ""; }; AF77772A09B6416100EA3033 /* Pacman.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Pacman.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AF77775109B6446500EA3033 /* FlipScreen3D.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = FlipScreen3D.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AF77775409B644FF00EA3033 /* flipscreen3d.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = flipscreen3d.c; path = hacks/glx/flipscreen3d.c; sourceTree = ""; }; AF77778B09B64A2A00EA3033 /* gleidescope.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = gleidescope.c; path = hacks/glx/gleidescope.c; sourceTree = ""; }; AF7777A209B64A5200EA3033 /* MirrorBlob.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = MirrorBlob.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AF7777A509B64AFC00EA3033 /* mirrorblob.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = mirrorblob.c; path = hacks/glx/mirrorblob.c; sourceTree = ""; }; AF7777BF09B64BD400EA3033 /* stonerview-move.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = "stonerview-move.c"; path = "hacks/glx/stonerview-move.c"; sourceTree = ""; }; AF7777C009B64BD400EA3033 /* stonerview-move.h */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.h; name = "stonerview-move.h"; path = "hacks/glx/stonerview-move.h"; sourceTree = ""; }; AF7777C109B64BD400EA3033 /* stonerview-osc.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = "stonerview-osc.c"; path = "hacks/glx/stonerview-osc.c"; sourceTree = ""; }; AF7777C209B64BD400EA3033 /* stonerview-osc.h */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.h; name = "stonerview-osc.h"; path = "hacks/glx/stonerview-osc.h"; sourceTree = ""; }; AF7777C309B64BD400EA3033 /* stonerview-view.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = "stonerview-view.c"; path = "hacks/glx/stonerview-view.c"; sourceTree = ""; }; AF7777C409B64BD400EA3033 /* stonerview.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = stonerview.c; path = hacks/glx/stonerview.c; sourceTree = ""; }; AF7777C509B64BD400EA3033 /* stonerview.h */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.h; name = stonerview.h; path = hacks/glx/stonerview.h; sourceTree = ""; }; AF7777E409B64C6B00EA3033 /* GLSlideshow.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = GLSlideshow.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AF7777E709B64CF700EA3033 /* glslideshow.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = glslideshow.c; path = hacks/glx/glslideshow.c; sourceTree = ""; }; AF7777FE09B64E3100EA3033 /* FlipText.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = FlipText.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AF77780109B64EC000EA3033 /* fliptext.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = fliptext.c; path = hacks/glx/fliptext.c; sourceTree = ""; }; AF77780809B64F4900EA3033 /* texfont.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = texfont.c; path = hacks/glx/texfont.c; sourceTree = ""; }; AF77780909B64F4900EA3033 /* texfont.h */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.h; name = texfont.h; path = hacks/glx/texfont.h; sourceTree = ""; }; AF77782809B650FF00EA3033 /* starwars.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = starwars.c; path = hacks/glx/starwars.c; sourceTree = ""; }; AF77782909B650FF00EA3033 /* starwars.txt */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text; name = starwars.txt; path = hacks/glx/starwars.txt; sourceTree = ""; }; AF77785809B6528100EA3033 /* Carousel.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Carousel.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AF77785E09B6530E00EA3033 /* carousel.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = carousel.c; path = hacks/glx/carousel.c; sourceTree = ""; }; AF77787409B6536000EA3033 /* DNAlogo.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = DNAlogo.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AF77787609B653DC00EA3033 /* dnalogo.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = dnalogo.c; path = hacks/glx/dnalogo.c; sourceTree = ""; }; AF77787909B6545E00EA3033 /* dnalogo.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = dnalogo.xml; sourceTree = ""; }; AF77789209B656C300EA3033 /* fontglide.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = fontglide.c; path = hacks/fontglide.c; sourceTree = ""; }; AF7778B509B659C800EA3033 /* BlitSpin.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = BlitSpin.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AF7778BA09B65A8A00EA3033 /* blitspin.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = blitspin.c; path = hacks/blitspin.c; sourceTree = ""; }; AF7778BC09B65B1800EA3033 /* automata.h */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.h; name = automata.h; path = hacks/automata.h; sourceTree = ""; }; AF7778BD09B65B3F00EA3033 /* atlantis.h */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.h; name = atlantis.h; path = hacks/glx/atlantis.h; sourceTree = ""; }; AF7778BE09B65BA300EA3033 /* molecules.sh */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.script.sh; name = molecules.sh; path = hacks/glx/molecules.sh; sourceTree = ""; }; AF7778C009B65C0F00EA3033 /* sproingies.h */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.h; name = sproingies.h; path = hacks/glx/sproingies.h; sourceTree = ""; }; AF7778C109B65C6A00EA3033 /* e_textures.h */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.h; name = e_textures.h; path = hacks/glx/e_textures.h; sourceTree = ""; }; AF78369617DB9F25003B9FC0 /* libz.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libz.dylib; path = usr/lib/libz.dylib; sourceTree = SDKROOT; }; AF78377C17DBA85D003B9FC0 /* libz.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libz.dylib; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS6.1.sdk/usr/lib/libz.dylib; sourceTree = DEVELOPER_DIR; }; AF78D189142DD8F3002AAF77 /* Hilbert.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Hilbert.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AF78D18A142DD96E002AAF77 /* hilbert.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = hilbert.c; path = hacks/glx/hilbert.c; sourceTree = ""; }; AF78D18E142DD99A002AAF77 /* hilbert.xml */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; path = hilbert.xml; sourceTree = ""; }; AF794F74099748450059A8B0 /* Demon.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Demon.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AF794F7E099748860059A8B0 /* demon.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = demon.c; path = hacks/demon.c; sourceTree = ""; }; AF794F9E09974A320059A8B0 /* Fiberlamp.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Fiberlamp.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AF794FA909974AE30059A8B0 /* fiberlamp.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = fiberlamp.c; path = hacks/fiberlamp.c; sourceTree = ""; }; AF794FDD09974FA60059A8B0 /* Loop.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Loop.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AF794FE009974FEC0059A8B0 /* loop.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = loop.c; path = hacks/loop.c; sourceTree = ""; }; AF795011099751940059A8B0 /* pacman_ai.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = pacman_ai.c; path = hacks/pacman_ai.c; sourceTree = ""; }; AF795012099751940059A8B0 /* pacman_ai.h */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.h; name = pacman_ai.h; path = hacks/pacman_ai.h; sourceTree = ""; }; AF795013099751940059A8B0 /* pacman_level.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = pacman_level.c; path = hacks/pacman_level.c; sourceTree = ""; }; AF795014099751940059A8B0 /* pacman_level.h */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.h; name = pacman_level.h; path = hacks/pacman_level.h; sourceTree = ""; }; AF795015099751940059A8B0 /* pacman.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = pacman.c; path = hacks/pacman.c; sourceTree = ""; }; AF795016099751940059A8B0 /* pacman.h */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.h; name = pacman.h; path = hacks/pacman.h; sourceTree = ""; }; AF7ACFD419FF0A9200BD752B /* GeodesicGears.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = GeodesicGears.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AF7ACFD619FF0B7A00BD752B /* geodesicgears.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = geodesicgears.c; path = hacks/glx/geodesicgears.c; sourceTree = ""; }; AF7ACFD819FF0BA600BD752B /* geodesicgears.xml */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; path = geodesicgears.xml; sourceTree = ""; }; AF84AF1E15829AF000607E4C /* SaverListController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SaverListController.m; sourceTree = ""; }; AF84FD4109B1209E00F3AB06 /* GLUT.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = GLUT.framework; path = /System/Library/Frameworks/GLUT.framework; sourceTree = ""; }; AF91898F158FC00A002B5D1E /* XScreenSaver.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = XScreenSaver.app; sourceTree = BUILT_PRODUCTS_DIR; }; AF94E7411A16E93600289B93 /* xscreensaver.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = xscreensaver.xcconfig; sourceTree = ""; }; AF97573D099C317000B05160 /* IMSMap.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = IMSMap.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AF975740099C31DD00B05160 /* imsmap.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = imsmap.c; path = hacks/imsmap.c; sourceTree = ""; }; AF975785099C374A00B05160 /* Moire.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Moire.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AF975789099C37A500B05160 /* moire.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = moire.c; path = hacks/moire.c; sourceTree = ""; }; AF9757D2099C3E6300B05160 /* RDbomb.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RDbomb.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AF9757D5099C3EB800B05160 /* rd-bomb.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = "rd-bomb.c"; path = "hacks/rd-bomb.c"; sourceTree = ""; }; AF975818099C41D500B05160 /* XFlame.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = XFlame.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AF97582F099C427500B05160 /* xflame.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = xflame.c; path = hacks/xflame.c; sourceTree = ""; }; AF975875099C475900B05160 /* ShadeBobs.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = ShadeBobs.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AF97587A099C492000B05160 /* shadebobs.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = shadebobs.c; path = hacks/shadebobs.c; sourceTree = ""; }; AF975A46099C681F00B05160 /* MetaBalls.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = MetaBalls.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AF975A49099C689F00B05160 /* metaballs.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = metaballs.c; path = hacks/metaballs.c; sourceTree = ""; }; AF975A7C099C6AB200B05160 /* Eruption.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Eruption.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AF975A83099C6B4900B05160 /* eruption.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = eruption.c; path = hacks/eruption.c; sourceTree = ""; }; AF975A96099C6BC300B05160 /* Barcode.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Barcode.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AF975A99099C6C3500B05160 /* barcode.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = barcode.c; path = hacks/barcode.c; sourceTree = ""; }; AF975AE7099C6EB100B05160 /* Fireworkx.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Fireworkx.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AF975AEE099C6F1700B05160 /* fireworkx.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = fireworkx.c; path = hacks/fireworkx.c; sourceTree = ""; }; AF975B0C099C6FE400B05160 /* MemScroller.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = MemScroller.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AF975B14099C709E00B05160 /* memscroller.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = memscroller.c; path = hacks/memscroller.c; sourceTree = ""; }; AF975C22099C8C1500B05160 /* Halo.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Halo.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AF975C4E099C8DCF00B05160 /* Greynetic.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Greynetic.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AF975C6E099C8F3F00B05160 /* NoseGuy.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = NoseGuy.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AF975C76099C8FC700B05160 /* noseguy.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = noseguy.c; path = hacks/noseguy.c; sourceTree = ""; }; AF975C91099C929800B05160 /* xpm-pixmap.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = "xpm-pixmap.c"; path = "hacks/xpm-pixmap.c"; sourceTree = ""; }; AF975C92099C929800B05160 /* xpm-pixmap.h */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.h; name = "xpm-pixmap.h"; path = "hacks/xpm-pixmap.h"; sourceTree = ""; }; AF975D63099CA0F000B05160 /* Rocks.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Rocks.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AF975D66099CA16A00B05160 /* rocks.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = rocks.c; path = hacks/rocks.c; sourceTree = ""; }; AF976DFA09896BEB001F8B92 /* attraction.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = attraction.c; path = hacks/attraction.c; sourceTree = ""; }; AF976ED30989BF59001F8B92 /* ScreenSaver.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = ScreenSaver.framework; path = /System/Library/Frameworks/ScreenSaver.framework; sourceTree = ""; }; AF976FBC0989CAA2001F8B92 /* Deco.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Deco.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AF9770400989D1E6001F8B92 /* Rorschach.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Rorschach.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AF97707D0989D2F6001F8B92 /* Attraction.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Attraction.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AF9771D70989DC4A001F8B92 /* SaverTester.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = SaverTester.app; sourceTree = BUILT_PRODUCTS_DIR; }; AF9771D90989DC4A001F8B92 /* SaverRunner.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = SaverRunner.plist; sourceTree = ""; }; AF9772E20989DFC6001F8B92 /* English */ = {isa = PBXFileReference; lastKnownFileType = wrapper.nib; name = English; path = English.lproj/SaverRunner.nib; sourceTree = ""; }; AF998EEE0A083DB30051049D /* TopBlock.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = TopBlock.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AF998EF80A083E750051049D /* topblock.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = topblock.c; path = hacks/glx/topblock.c; sourceTree = ""; }; AF998EFA0A083E8C0051049D /* topblock.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = topblock.xml; sourceTree = ""; }; AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */ = {isa = PBXFileReference; fileEncoding = 5; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = XScreenSaverSubclass.m; sourceTree = ""; }; AF9D467609B5109C006E59CF /* DecayScreen.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = DecayScreen.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AF9D467809B5110B006E59CF /* decayscreen.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = decayscreen.c; path = hacks/decayscreen.c; sourceTree = ""; }; AF9D468E09B51567006E59CF /* grabclient-osx.m */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.objc; path = "grabclient-osx.m"; sourceTree = ""; }; AF9D473609B52EE0006E59CF /* colorbars.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = colorbars.c; path = utils/colorbars.c; sourceTree = ""; }; AF9D473709B52EE0006E59CF /* colorbars.h */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.h; name = colorbars.h; path = utils/colorbars.h; sourceTree = ""; }; AF9D475409B5300A006E59CF /* SlideScreen.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = SlideScreen.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AF9D475809B53091006E59CF /* slidescreen.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = slidescreen.c; path = hacks/slidescreen.c; sourceTree = ""; }; AF9D476F09B53166006E59CF /* Zoom.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Zoom.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AF9D48D409B53229006E59CF /* zoom.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = zoom.c; path = hacks/zoom.c; sourceTree = ""; }; AF9D48EB09B53322006E59CF /* Bumps.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Bumps.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AF9D48EE09B533AE006E59CF /* bumps.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = bumps.c; path = hacks/bumps.c; sourceTree = ""; }; AF9D490409B535DA006E59CF /* Distort.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Distort.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AF9D490709B536F7006E59CF /* distort.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = distort.c; path = hacks/distort.c; sourceTree = ""; }; AF9D493B09B53CBA006E59CF /* Ripples.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Ripples.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AF9D493E09B53D55006E59CF /* ripples.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = ripples.c; path = hacks/ripples.c; sourceTree = ""; }; AF9D496409B53FC9006E59CF /* RotZoomer.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RotZoomer.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AF9D496709B540A4006E59CF /* rotzoomer.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = rotzoomer.c; path = hacks/rotzoomer.c; sourceTree = ""; }; AF9D497C09B5411D006E59CF /* Twang.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Twang.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AF9D497F09B541E5006E59CF /* twang.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = twang.c; path = hacks/twang.c; sourceTree = ""; }; AF9D49A709B544C3006E59CF /* Spotlight.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Spotlight.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AF9D49AA09B54596006E59CF /* spotlight.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = spotlight.c; path = hacks/spotlight.c; sourceTree = ""; }; AF9D4C7909B59F27006E59CF /* XLyap.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = XLyap.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AF9D4C7C09B5A044006E59CF /* xlyap.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = xlyap.c; path = hacks/xlyap.c; sourceTree = ""; }; AF9D4CF709B5AA8E006E59CF /* Pong.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Pong.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AF9D4CFA09B5AC94006E59CF /* analogtv.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = analogtv.c; path = hacks/analogtv.c; sourceTree = ""; }; AF9D4CFB09B5AC94006E59CF /* analogtv.h */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.h; name = analogtv.h; path = hacks/analogtv.h; sourceTree = ""; }; AF9D4CFC09B5AC94006E59CF /* pong.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = pong.c; path = hacks/pong.c; sourceTree = ""; }; AF9D4D8F09B5B2DC006E59CF /* XAnalogTV.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = XAnalogTV.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AF9D4D9209B5B444006E59CF /* xanalogtv.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = xanalogtv.c; path = hacks/xanalogtv.c; sourceTree = ""; }; AF9D4DC009B5B71E006E59CF /* BSOD.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = BSOD.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AF9D4DC309B5B87D006E59CF /* bsod.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = bsod.c; path = hacks/bsod.c; sourceTree = ""; }; AF9D4DD309B5B990006E59CF /* apple2.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = apple2.c; path = hacks/apple2.c; sourceTree = ""; }; AF9D4DFE09B5BB19006E59CF /* Apple2.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Apple2.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AF9D4E0509B5BC9D006E59CF /* apple2-main.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = "apple2-main.c"; path = "hacks/apple2-main.c"; sourceTree = ""; }; AF9E7EBF190F4C1B00A8B01F /* enable_gc */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = enable_gc; sourceTree = BUILT_PRODUCTS_DIR; }; AF9E7EC8190F4C4000A8B01F /* enable_gc.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = enable_gc.c; sourceTree = ""; }; AFA211881CD1AA1800C0D2A1 /* textclient-mobile.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = "textclient-mobile.c"; path = "utils/textclient-mobile.c"; sourceTree = ""; }; AFA211A11CD59DAF00C0D2A1 /* RaverHoop.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RaverHoop.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AFA211A31CD59FD800C0D2A1 /* raverhoop.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = raverhoop.c; path = hacks/glx/raverhoop.c; sourceTree = ""; }; AFA211A41CD59FD800C0D2A1 /* raverhoop.xml */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; path = raverhoop.xml; sourceTree = ""; }; AFA339400B058505002B0E7D /* WebCollage.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = WebCollage.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AFA33BAE0B0585F7002B0E7D /* webcollage-cocoa.m */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.objc; name = "webcollage-cocoa.m"; path = "hacks/webcollage-cocoa.m"; sourceTree = ""; }; AFA33BC70B058740002B0E7D /* webcollage-helper */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = "webcollage-helper"; sourceTree = BUILT_PRODUCTS_DIR; }; AFA33BD00B0587EE002B0E7D /* webcollage-helper-cocoa.m */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.objc; name = "webcollage-helper-cocoa.m"; path = "hacks/webcollage-helper-cocoa.m"; sourceTree = ""; }; AFA33C0A0B058E6B002B0E7D /* webcollage */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.script.perl; name = webcollage; path = hacks/webcollage; sourceTree = ""; }; AFA55864099324D800F3E977 /* minixpm.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = minixpm.c; path = utils/minixpm.c; sourceTree = ""; }; AFA55865099324D800F3E977 /* minixpm.h */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.h; name = minixpm.h; path = utils/minixpm.h; sourceTree = ""; }; AFA5595A099330B000F3E977 /* Cage.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Cage.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AFA5595D0993310500F3E977 /* cage.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = cage.c; path = hacks/glx/cage.c; sourceTree = ""; }; AFA5597F0993317900F3E977 /* Moebius.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Moebius.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AFA55982099331C300F3E977 /* moebius.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = moebius.c; path = hacks/glx/moebius.c; sourceTree = ""; }; AFA559A40993322100F3E977 /* Superquadrics.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Superquadrics.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AFA559A80993326300F3E977 /* superquadrics.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = superquadrics.c; path = hacks/glx/superquadrics.c; sourceTree = ""; }; AFA559C70993328000F3E977 /* Morph3D.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Morph3D.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AFA559CC099332E800F3E977 /* morph3d.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = morph3d.c; path = hacks/glx/morph3d.c; sourceTree = ""; }; AFA559E10993330600F3E977 /* Rubik.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Rubik.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AFA559EA0993335C00F3E977 /* rubik.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = rubik.c; path = hacks/glx/rubik.c; sourceTree = ""; }; AFA55A150993340300F3E977 /* Stairs.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Stairs.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AFA55A1A0993345900F3E977 /* stairs.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = stairs.c; path = hacks/glx/stairs.c; sourceTree = ""; }; AFA55A32099334A000F3E977 /* Sproingies.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Sproingies.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AFA55A3E0993351F00F3E977 /* gllist.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = gllist.c; path = hacks/glx/gllist.c; sourceTree = ""; }; AFA55A3F0993351F00F3E977 /* gllist.h */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.h; name = gllist.h; path = hacks/glx/gllist.h; sourceTree = ""; }; AFA55A400993351F00F3E977 /* s1_1.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = s1_1.c; path = hacks/glx/s1_1.c; sourceTree = ""; }; AFA55A410993351F00F3E977 /* s1_2.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = s1_2.c; path = hacks/glx/s1_2.c; sourceTree = ""; }; AFA55A420993351F00F3E977 /* s1_3.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = s1_3.c; path = hacks/glx/s1_3.c; sourceTree = ""; }; AFA55A430993351F00F3E977 /* s1_4.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = s1_4.c; path = hacks/glx/s1_4.c; sourceTree = ""; }; AFA55A440993351F00F3E977 /* s1_5.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = s1_5.c; path = hacks/glx/s1_5.c; sourceTree = ""; }; AFA55A450993351F00F3E977 /* s1_6.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = s1_6.c; path = hacks/glx/s1_6.c; sourceTree = ""; }; AFA55A460993351F00F3E977 /* s1_b.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = s1_b.c; path = hacks/glx/s1_b.c; sourceTree = ""; }; AFA55A470993351F00F3E977 /* sproingies.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = sproingies.c; path = hacks/glx/sproingies.c; sourceTree = ""; }; AFA55A480993351F00F3E977 /* sproingiewrap.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = sproingiewrap.c; path = hacks/glx/sproingiewrap.c; sourceTree = ""; }; AFA55A8B0993364300F3E977 /* Lament.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Lament.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AFA55A8E0993369100F3E977 /* lament.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = lament.c; path = hacks/glx/lament.c; sourceTree = ""; }; AFA55A93099336D800F3E977 /* normals.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = normals.c; path = hacks/glx/normals.c; sourceTree = ""; }; AFA55A94099336D800F3E977 /* normals.h */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.h; name = normals.h; path = hacks/glx/normals.h; sourceTree = ""; }; AFA55AE109933CEF00F3E977 /* Bubble3D.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Bubble3D.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AFA55AE409933D3800F3E977 /* bubble3d.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = bubble3d.c; path = hacks/glx/bubble3d.c; sourceTree = ""; }; AFA55AE809933D5900F3E977 /* bubble3d.h */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.h; name = bubble3d.h; path = hacks/glx/bubble3d.h; sourceTree = ""; }; AFA55AF409933DBF00F3E977 /* b_draw.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = b_draw.c; path = hacks/glx/b_draw.c; sourceTree = ""; }; AFA55AF509933DBF00F3E977 /* b_lockglue.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = b_lockglue.c; path = hacks/glx/b_lockglue.c; sourceTree = ""; }; AFA55AF609933DBF00F3E977 /* b_sphere.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = b_sphere.c; path = hacks/glx/b_sphere.c; sourceTree = ""; }; AFA55B1E09933E0500F3E977 /* GLPlanet.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = GLPlanet.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AFA55B2109933E4A00F3E977 /* glplanet.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = glplanet.c; path = hacks/glx/glplanet.c; sourceTree = ""; }; AFA55B3709933E8D00F3E977 /* Pulsar.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Pulsar.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AFA55B3F09933EC600F3E977 /* pulsar.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = pulsar.c; path = hacks/glx/pulsar.c; sourceTree = ""; }; AFA55B8B09933F7200F3E977 /* Sierpinski3D.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Sierpinski3D.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AFA55B8E09933FBF00F3E977 /* sierpinski3d.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = sierpinski3d.c; path = hacks/glx/sierpinski3d.c; sourceTree = ""; }; AFA55BA309933FDA00F3E977 /* GFlux.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = GFlux.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AFA55BA60993401A00F3E977 /* gflux.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = gflux.c; path = hacks/glx/gflux.c; sourceTree = ""; }; AFA55BBD099340CE00F3E977 /* Circuit.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Circuit.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AFA55BC00993416E00F3E977 /* circuit.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = circuit.c; path = hacks/glx/circuit.c; sourceTree = ""; }; AFA55BF60993429100F3E977 /* Menger.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Menger.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AFA55BF9099342D500F3E977 /* menger.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = menger.c; path = hacks/glx/menger.c; sourceTree = ""; }; AFA55C200993431300F3E977 /* Engine.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Engine.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AFA55C230993435300F3E977 /* engine.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = engine.c; path = hacks/glx/engine.c; sourceTree = ""; }; AFA55C89099349A600F3E977 /* GLSnake.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = GLSnake.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AFA55C8C099349EE00F3E977 /* glsnake.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = glsnake.c; path = hacks/glx/glsnake.c; sourceTree = ""; }; AFA55CBB09934BB200F3E977 /* Boxed.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Boxed.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AFA55CBE09934C0900F3E977 /* boxed.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = boxed.c; path = hacks/glx/boxed.c; sourceTree = ""; }; AFA55CBF09934C0900F3E977 /* boxed.h */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.h; name = boxed.h; path = hacks/glx/boxed.h; sourceTree = ""; }; AFA55CDE09934CE400F3E977 /* GLForestFire.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = GLForestFire.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AFA55CE109934D2E00F3E977 /* glforestfire.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = glforestfire.c; path = hacks/glx/glforestfire.c; sourceTree = ""; }; AFA55D4E0993565300F3E977 /* SBalls.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = SBalls.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AFA55D510993569C00F3E977 /* sballs.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = sballs.c; path = hacks/glx/sballs.c; sourceTree = ""; }; AFA55D740993584B00F3E977 /* Cubenetic.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Cubenetic.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AFA55D770993589300F3E977 /* cubenetic.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = cubenetic.c; path = hacks/glx/cubenetic.c; sourceTree = ""; }; AFA55D91099358C400F3E977 /* Spheremonics.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Spheremonics.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AFA55D940993590F00F3E977 /* spheremonics.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = spheremonics.c; path = hacks/glx/spheremonics.c; sourceTree = ""; }; AFA55DDA09935D7000F3E977 /* Lavalite.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Lavalite.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AFA55DDD09935DB600F3E977 /* lavalite.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = lavalite.c; path = hacks/glx/lavalite.c; sourceTree = ""; }; AFA55DE109935DFB00F3E977 /* marching.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = marching.c; path = hacks/glx/marching.c; sourceTree = ""; }; AFA55DE209935DFB00F3E977 /* marching.h */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.h; name = marching.h; path = hacks/glx/marching.h; sourceTree = ""; }; AFA55E0309935E4900F3E977 /* Queens.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Queens.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AFA55E0609935EB800F3E977 /* queens.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = queens.c; path = hacks/glx/queens.c; sourceTree = ""; }; AFA55E1F09935EDC00F3E977 /* Endgame.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Endgame.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AFA55E2209935F2B00F3E977 /* chessgames.h */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.h; name = chessgames.h; path = hacks/glx/chessgames.h; sourceTree = ""; }; AFA55E2309935F2B00F3E977 /* chessmodels.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = chessmodels.c; path = hacks/glx/chessmodels.c; sourceTree = ""; }; AFA55E2409935F2B00F3E977 /* chessmodels.h */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.h; name = chessmodels.h; path = hacks/glx/chessmodels.h; sourceTree = ""; }; AFA55E2509935F2B00F3E977 /* endgame.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = endgame.c; path = hacks/glx/endgame.c; sourceTree = ""; }; AFA55E4209935F8E00F3E977 /* GLBlur.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = GLBlur.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AFA55E4509935FD300F3E977 /* glblur.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = glblur.c; path = hacks/glx/glblur.c; sourceTree = ""; }; AFA55E6009935FF900F3E977 /* FlyingToasters.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = FlyingToasters.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AFA55E980993608800F3E977 /* flyingtoasters.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = flyingtoasters.c; path = hacks/glx/flyingtoasters.c; sourceTree = ""; }; AFA55E990993608800F3E977 /* toast.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = toast.c; path = hacks/glx/toast.c; sourceTree = ""; }; AFA55E9A0993608800F3E977 /* toast.dxf */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text; name = toast.dxf; path = hacks/glx/toast.dxf; sourceTree = ""; }; AFA55E9B0993608800F3E977 /* toast2.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = toast2.c; path = hacks/glx/toast2.c; sourceTree = ""; }; AFA55E9C0993608800F3E977 /* toast2.dxf */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text; name = toast2.dxf; path = hacks/glx/toast2.dxf; sourceTree = ""; }; AFA55E9D0993608800F3E977 /* toaster_base.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = toaster_base.c; path = hacks/glx/toaster_base.c; sourceTree = ""; }; AFA55E9F0993608800F3E977 /* toaster_handle.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = toaster_handle.c; path = hacks/glx/toaster_handle.c; sourceTree = ""; }; AFA55EA10993608800F3E977 /* toaster_handle2.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = toaster_handle2.c; path = hacks/glx/toaster_handle2.c; sourceTree = ""; }; AFA55EA30993608800F3E977 /* toaster_jet.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = toaster_jet.c; path = hacks/glx/toaster_jet.c; sourceTree = ""; }; AFA55EA50993608800F3E977 /* toaster_knob.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = toaster_knob.c; path = hacks/glx/toaster_knob.c; sourceTree = ""; }; AFA55EA70993608800F3E977 /* toaster_slots.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = toaster_slots.c; path = hacks/glx/toaster_slots.c; sourceTree = ""; }; AFA55EA90993608800F3E977 /* toaster_wing.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = toaster_wing.c; path = hacks/glx/toaster_wing.c; sourceTree = ""; }; AFA55EAB0993608800F3E977 /* toaster.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = toaster.c; path = hacks/glx/toaster.c; sourceTree = ""; }; AFA55EAC0993608800F3E977 /* toaster.dxf */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text; name = toaster.dxf; path = hacks/glx/toaster.dxf; sourceTree = ""; }; AFA55EE3099360E300F3E977 /* BouncingCow.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = BouncingCow.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AFA55EE70993613E00F3E977 /* bouncingcow.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = bouncingcow.c; path = hacks/glx/bouncingcow.c; sourceTree = ""; }; AFA55EE80993613E00F3E977 /* cow_face.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = cow_face.c; path = hacks/glx/cow_face.c; sourceTree = ""; }; AFA55EE90993613E00F3E977 /* cow_hide.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = cow_hide.c; path = hacks/glx/cow_hide.c; sourceTree = ""; }; AFA55EEA0993613E00F3E977 /* cow_hoofs.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = cow_hoofs.c; path = hacks/glx/cow_hoofs.c; sourceTree = ""; }; AFA55EEB0993613E00F3E977 /* cow_horns.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = cow_horns.c; path = hacks/glx/cow_horns.c; sourceTree = ""; }; AFA55EEC0993613E00F3E977 /* cow_tail.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = cow_tail.c; path = hacks/glx/cow_tail.c; sourceTree = ""; }; AFA55EED0993613E00F3E977 /* cow_udder.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = cow_udder.c; path = hacks/glx/cow_udder.c; sourceTree = ""; }; AFA55F1E099361B700F3E977 /* JigglyPuff.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = JigglyPuff.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AFA55F210993620200F3E977 /* jigglypuff.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = jigglypuff.c; path = hacks/glx/jigglypuff.c; sourceTree = ""; }; AFA55F3C0993622F00F3E977 /* Klein.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Klein.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AFA55F3F0993626E00F3E977 /* klein.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = klein.c; path = hacks/glx/klein.c; sourceTree = ""; }; AFA55F540993629000F3E977 /* Hypertorus.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Hypertorus.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AFA55F59099362DF00F3E977 /* hypertorus.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = hypertorus.c; path = hacks/glx/hypertorus.c; sourceTree = ""; }; AFA55F840993643600F3E977 /* GLMatrix.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = GLMatrix.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AFA55F870993648500F3E977 /* glmatrix.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = glmatrix.c; path = hacks/glx/glmatrix.c; sourceTree = ""; }; AFA55FE509936BFA00F3E977 /* CubeStorm.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = CubeStorm.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AFA55FF309936C4500F3E977 /* cubestorm.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = cubestorm.c; path = hacks/glx/cubestorm.c; sourceTree = ""; }; AFA5600B09936C6D00F3E977 /* GLKnots.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = GLKnots.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AFA5600E09936CB300F3E977 /* glknots.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = glknots.c; path = hacks/glx/glknots.c; sourceTree = ""; }; AFA5602609936CC800F3E977 /* BlockTube.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = BlockTube.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AFA5602909936D0700F3E977 /* blocktube.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = blocktube.c; path = hacks/glx/blocktube.c; sourceTree = ""; }; AFA5604409936D5100F3E977 /* FlipFlop.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = FlipFlop.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AFA5604709936DCC00F3E977 /* flipflop.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = flipflop.c; path = hacks/glx/flipflop.c; sourceTree = ""; }; AFA5605C09936E2100F3E977 /* AntInspect.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = AntInspect.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AFA5605F09936E9C00F3E977 /* antinspect.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = antinspect.c; path = hacks/glx/antinspect.c; sourceTree = ""; }; AFA5607409936F3800F3E977 /* AntSpotlight.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = AntSpotlight.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AFA5607709936FDD00F3E977 /* ants.h */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.h; name = ants.h; path = hacks/glx/ants.h; sourceTree = ""; }; AFA5607809936FDD00F3E977 /* antspotlight.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = antspotlight.c; path = hacks/glx/antspotlight.c; sourceTree = ""; }; AFA5607909936FDD00F3E977 /* grab-ximage.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = "grab-ximage.c"; path = "hacks/glx/grab-ximage.c"; sourceTree = ""; }; AFA5607A09936FDD00F3E977 /* grab-ximage.h */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.h; name = "grab-ximage.h"; path = "hacks/glx/grab-ximage.h"; sourceTree = ""; }; AFA560C00993718D00F3E977 /* Polytopes.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Polytopes.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AFA560C3099371D500F3E977 /* polytopes.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = polytopes.c; path = hacks/glx/polytopes.c; sourceTree = ""; }; AFA5610F0993781600F3E977 /* Molecule.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Molecule.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AFA561120993786800F3E977 /* molecule.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = molecule.c; path = hacks/glx/molecule.c; sourceTree = ""; }; AFA5616A09937C0D00F3E977 /* BlinkBox.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = BlinkBox.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AFA5616D09937C9A00F3E977 /* blinkbox.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = blinkbox.c; path = hacks/glx/blinkbox.c; sourceTree = ""; }; AFA5618D09937CF100F3E977 /* Noof.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Noof.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AFA5619009937D3600F3E977 /* noof.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = noof.c; path = hacks/glx/noof.c; sourceTree = ""; }; AFA561AF09937D7E00F3E977 /* Polyhedra.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Polyhedra.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AFA561B209937DCB00F3E977 /* polyhedra-gl.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = "polyhedra-gl.c"; path = "hacks/glx/polyhedra-gl.c"; sourceTree = ""; }; AFA561B309937DCC00F3E977 /* polyhedra.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = polyhedra.c; path = hacks/glx/polyhedra.c; sourceTree = ""; }; AFA561B409937DCC00F3E977 /* polyhedra.h */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.h; name = polyhedra.h; path = hacks/glx/polyhedra.h; sourceTree = ""; }; AFA562190993849F00F3E977 /* Providence.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Providence.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AFA5621C099384F600F3E977 /* providence.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = providence.c; path = hacks/glx/providence.c; sourceTree = ""; }; AFA562310993852500F3E977 /* Pinion.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Pinion.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AFA562340993856A00F3E977 /* pinion.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = pinion.c; path = hacks/glx/pinion.c; sourceTree = ""; }; AFA562D1099392C600F3E977 /* Boing.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Boing.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AFA562D40993930C00F3E977 /* boing.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = boing.c; path = hacks/glx/boing.c; sourceTree = ""; }; AFA562EC099393C900F3E977 /* AntMaze.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = AntMaze.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AFA562EF0993941600F3E977 /* antmaze.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = antmaze.c; path = hacks/glx/antmaze.c; sourceTree = ""; }; AFA563040993943B00F3E977 /* Tangram.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Tangram.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AFA563070993948F00F3E977 /* tangram_shapes.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = tangram_shapes.c; path = hacks/glx/tangram_shapes.c; sourceTree = ""; }; AFA563080993948F00F3E977 /* tangram_shapes.h */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.h; name = tangram_shapes.h; path = hacks/glx/tangram_shapes.h; sourceTree = ""; }; AFA563090993948F00F3E977 /* tangram.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = tangram.c; path = hacks/glx/tangram.c; sourceTree = ""; }; AFA563260993951000F3E977 /* Crackberg.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Crackberg.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AFA563290993957100F3E977 /* crackberg.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = crackberg.c; path = hacks/glx/crackberg.c; sourceTree = ""; }; AFA56343099395ED00F3E977 /* GLHanoi.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = GLHanoi.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AFA563460993963400F3E977 /* glhanoi.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = glhanoi.c; path = hacks/glx/glhanoi.c; sourceTree = ""; }; AFA56363099396C000F3E977 /* Cube21.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Cube21.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AFA563660993970F00F3E977 /* cube21.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = cube21.c; path = hacks/glx/cube21.c; sourceTree = ""; }; AFA5638B099397B300F3E977 /* TimeTunnel.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = TimeTunnel.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AFA5638E0993980D00F3E977 /* timetunnel.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = timetunnel.c; path = hacks/glx/timetunnel.c; sourceTree = ""; }; AFA563B6099398BB00F3E977 /* Juggler3D.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Juggler3D.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AFA563B90993991300F3E977 /* juggler3d.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = juggler3d.c; path = hacks/glx/juggler3d.c; sourceTree = ""; }; AFAA6B441773F07700DE720C /* ios-function-table.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "ios-function-table.m"; sourceTree = ""; }; AFACE8881CC83458008B24CD /* EnergyStream.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = EnergyStream.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AFACE88A1CC83578008B24CD /* energystream.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = energystream.c; path = hacks/glx/energystream.c; sourceTree = ""; }; AFACE88B1CC83578008B24CD /* energystream.xml */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; path = energystream.xml; sourceTree = ""; }; AFAD462209D5F4DA00AB5F95 /* grabclient.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = grabclient.c; path = utils/grabclient.c; sourceTree = ""; }; AFB591BA178B812C00EA4005 /* Hexadrop.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Hexadrop.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AFB591BC178B81E600EA4005 /* hexadrop.xml */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; path = hexadrop.xml; sourceTree = ""; }; AFB591BD178B81E600EA4005 /* hexadrop.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = hexadrop.c; path = hacks/hexadrop.c; sourceTree = ""; }; AFB5A06B0981F4C600871B16 /* screenhack.h */ = {isa = PBXFileReference; fileEncoding = 12; lastKnownFileType = sourcecode.c.h; name = screenhack.h; path = hacks/screenhack.h; sourceTree = ""; }; AFB5A0ED0981FF8B00871B16 /* usleep.c */ = {isa = PBXFileReference; fileEncoding = 12; lastKnownFileType = sourcecode.c.c; name = usleep.c; path = utils/usleep.c; sourceTree = ""; }; AFB5A0EE0981FF8B00871B16 /* usleep.h */ = {isa = PBXFileReference; fileEncoding = 12; lastKnownFileType = sourcecode.c.h; name = usleep.h; path = utils/usleep.h; sourceTree = ""; }; AFB8A69A1782BA34004EDB85 /* kaleidocycle.xml */ = {isa = PBXFileReference; lastKnownFileType = text.xml; path = kaleidocycle.xml; sourceTree = ""; }; AFBE743F19A7C6930018AA35 /* robot.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = robot.c; path = hacks/glx/robot.c; sourceTree = ""; }; AFBF893C0E41D930006A2D66 /* fps.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = fps.c; path = hacks/fps.c; sourceTree = ""; }; AFBF893D0E41D930006A2D66 /* fps.h */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.h; name = fps.h; path = hacks/fps.h; sourceTree = ""; }; AFBF89AE0E423FC3006A2D66 /* fps-gl.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = "fps-gl.c"; path = "hacks/glx/fps-gl.c"; sourceTree = ""; }; AFBF89B10E424036006A2D66 /* fpsI.h */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.h; name = fpsI.h; path = hacks/fpsI.h; sourceTree = ""; }; AFBFE75E178642DC00432B21 /* Apple2.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Apple2.app; sourceTree = BUILT_PRODUCTS_DIR; }; AFBFE77E178647FE00432B21 /* Phosphor.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Phosphor.app; sourceTree = BUILT_PRODUCTS_DIR; }; AFC0E8C01CDC601A008CAFAC /* Hydrostat.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Hydrostat.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AFC0E8C21CDC60A9008CAFAC /* hydrostat.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = hydrostat.c; path = hacks/glx/hydrostat.c; sourceTree = ""; }; AFC0E8C31CDC60A9008CAFAC /* hydrostat.xml */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; path = hydrostat.xml; sourceTree = ""; }; AFC211930E4E30C800D87B6E /* teapot.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = teapot.c; path = hacks/glx/teapot.c; sourceTree = ""; }; AFC211940E4E30C800D87B6E /* teapot.h */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.h; name = teapot.h; path = hacks/glx/teapot.h; sourceTree = ""; }; AFC254B909873AF9000655EE /* screenhackI.h */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.h; name = screenhackI.h; path = hacks/screenhackI.h; sourceTree = ""; }; AFC254C409882C97000655EE /* XScreenSaverView.h */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.h; path = XScreenSaverView.h; sourceTree = ""; }; AFC254C509882C97000655EE /* XScreenSaverView.m */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.objc; path = XScreenSaverView.m; sourceTree = ""; }; AFC2577F09888F5A000655EE /* XScreenSaverConfigSheet.h */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.h; path = XScreenSaverConfigSheet.h; sourceTree = ""; }; AFC2578009888F5A000655EE /* XScreenSaverConfigSheet.m */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.objc; path = XScreenSaverConfigSheet.m; sourceTree = ""; }; AFC258680988A468000655EE /* anemone.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = anemone.xml; sourceTree = ""; }; AFC258690988A468000655EE /* anemotaxis.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = anemotaxis.xml; sourceTree = ""; }; AFC2586A0988A468000655EE /* ant.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = ant.xml; sourceTree = ""; }; AFC2586B0988A468000655EE /* antinspect.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = antinspect.xml; sourceTree = ""; }; AFC2586C0988A468000655EE /* antmaze.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = antmaze.xml; sourceTree = ""; }; AFC2586D0988A468000655EE /* antspotlight.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = antspotlight.xml; sourceTree = ""; }; AFC2586E0988A468000655EE /* apollonian.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = apollonian.xml; sourceTree = ""; }; AFC2586F0988A468000655EE /* apple2.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = apple2.xml; sourceTree = ""; }; AFC258700988A468000655EE /* atlantis.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = atlantis.xml; sourceTree = ""; }; AFC258710988A468000655EE /* attraction.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = attraction.xml; sourceTree = ""; }; AFC258720988A468000655EE /* atunnel.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = atunnel.xml; sourceTree = ""; }; AFC258730988A468000655EE /* barcode.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = barcode.xml; sourceTree = ""; }; AFC258740988A468000655EE /* blaster.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = blaster.xml; sourceTree = ""; }; AFC258750988A468000655EE /* blinkbox.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = blinkbox.xml; sourceTree = ""; }; AFC258760988A468000655EE /* blitspin.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = blitspin.xml; sourceTree = ""; }; AFC258770988A468000655EE /* blocktube.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = blocktube.xml; sourceTree = ""; }; AFC258780988A468000655EE /* boing.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = boing.xml; sourceTree = ""; }; AFC258790988A468000655EE /* bouboule.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = bouboule.xml; sourceTree = ""; }; AFC2587A0988A468000655EE /* bouncingcow.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = bouncingcow.xml; sourceTree = ""; }; AFC2587B0988A468000655EE /* boxed.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = boxed.xml; sourceTree = ""; }; AFC2587C0988A468000655EE /* boxfit.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = boxfit.xml; sourceTree = ""; }; AFC2587D0988A468000655EE /* braid.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = braid.xml; sourceTree = ""; }; AFC2587E0988A468000655EE /* bsod.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = bsod.xml; sourceTree = ""; }; AFC2587F0988A468000655EE /* bubble3d.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = bubble3d.xml; sourceTree = ""; }; AFC258800988A468000655EE /* bubbles.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = bubbles.xml; sourceTree = ""; }; AFC258810988A468000655EE /* bumps.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = bumps.xml; sourceTree = ""; }; AFC258820988A468000655EE /* cage.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = cage.xml; sourceTree = ""; }; AFC258830988A468000655EE /* carousel.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = carousel.xml; sourceTree = ""; }; AFC258840988A468000655EE /* ccurve.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = ccurve.xml; sourceTree = ""; }; AFC258850988A468000655EE /* celtic.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = celtic.xml; sourceTree = ""; }; AFC258860988A468000655EE /* circuit.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = circuit.xml; sourceTree = ""; }; AFC258870988A468000655EE /* cloudlife.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = cloudlife.xml; sourceTree = ""; }; AFC258880988A468000655EE /* compass.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = compass.xml; sourceTree = ""; }; AFC258890988A468000655EE /* coral.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = coral.xml; sourceTree = ""; }; AFC2588B0988A468000655EE /* crackberg.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = crackberg.xml; sourceTree = ""; }; AFC2588C0988A468000655EE /* critical.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = critical.xml; sourceTree = ""; }; AFC2588D0988A468000655EE /* crystal.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = crystal.xml; sourceTree = ""; }; AFC2588E0988A468000655EE /* cube21.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = cube21.xml; sourceTree = ""; }; AFC2588F0988A468000655EE /* cubenetic.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = cubenetic.xml; sourceTree = ""; }; AFC258900988A468000655EE /* cubestorm.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = cubestorm.xml; sourceTree = ""; }; AFC258910988A468000655EE /* cynosure.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = cynosure.xml; sourceTree = ""; }; AFC258920988A468000655EE /* dangerball.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = dangerball.xml; sourceTree = ""; }; AFC258930988A468000655EE /* decayscreen.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = decayscreen.xml; sourceTree = ""; }; AFC258940988A468000655EE /* deco.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = deco.xml; sourceTree = ""; }; AFC258950988A468000655EE /* deluxe.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = deluxe.xml; sourceTree = ""; }; AFC258960988A468000655EE /* demon.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = demon.xml; sourceTree = ""; }; AFC258970988A468000655EE /* discrete.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = discrete.xml; sourceTree = ""; }; AFC258980988A468000655EE /* distort.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = distort.xml; sourceTree = ""; }; AFC258990988A468000655EE /* drift.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = drift.xml; sourceTree = ""; }; AFC2589B0988A468000655EE /* endgame.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = endgame.xml; sourceTree = ""; }; AFC2589C0988A468000655EE /* engine.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = engine.xml; sourceTree = ""; }; AFC2589D0988A468000655EE /* epicycle.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = epicycle.xml; sourceTree = ""; }; AFC2589E0988A468000655EE /* eruption.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = eruption.xml; sourceTree = ""; }; AFC2589F0988A468000655EE /* euler2d.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = euler2d.xml; sourceTree = ""; }; AFC258A00988A468000655EE /* extrusion.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = extrusion.xml; sourceTree = ""; }; AFC258A10988A468000655EE /* fadeplot.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = fadeplot.xml; sourceTree = ""; }; AFC258A20988A468000655EE /* fiberlamp.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = fiberlamp.xml; sourceTree = ""; }; AFC258A40988A468000655EE /* fireworkx.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = fireworkx.xml; sourceTree = ""; }; AFC258A50988A468000655EE /* flag.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = flag.xml; sourceTree = ""; }; AFC258A60988A468000655EE /* flame.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = flame.xml; sourceTree = ""; }; AFC258A70988A468000655EE /* flipflop.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = flipflop.xml; sourceTree = ""; }; AFC258A80988A468000655EE /* flipscreen3d.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = flipscreen3d.xml; sourceTree = ""; }; AFC258A90988A468000655EE /* fliptext.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = fliptext.xml; sourceTree = ""; }; AFC258AA0988A468000655EE /* flow.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = flow.xml; sourceTree = ""; }; AFC258AB0988A468000655EE /* fluidballs.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = fluidballs.xml; sourceTree = ""; }; AFC258AC0988A468000655EE /* flurry.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = flurry.xml; sourceTree = ""; }; AFC258AD0988A468000655EE /* flyingtoasters.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = flyingtoasters.xml; sourceTree = ""; }; AFC258AE0988A468000655EE /* fontglide.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = fontglide.xml; sourceTree = ""; }; AFC258AF0988A468000655EE /* forest.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = forest.xml; sourceTree = ""; }; AFC258B00988A468000655EE /* fuzzyflakes.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = fuzzyflakes.xml; sourceTree = ""; }; AFC258B10988A468000655EE /* galaxy.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = galaxy.xml; sourceTree = ""; }; AFC258B20988A468000655EE /* gears.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = gears.xml; sourceTree = ""; }; AFC258B30988A468000655EE /* gflux.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = gflux.xml; sourceTree = ""; }; AFC258B40988A468000655EE /* glblur.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = glblur.xml; sourceTree = ""; }; AFC258B50988A468000655EE /* gleidescope.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = gleidescope.xml; sourceTree = ""; }; AFC258B60988A468000655EE /* glforestfire.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = glforestfire.xml; sourceTree = ""; }; AFC258B70988A468000655EE /* glhanoi.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = glhanoi.xml; sourceTree = ""; }; AFC258B80988A468000655EE /* glknots.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = glknots.xml; sourceTree = ""; }; AFC258B90988A468000655EE /* glmatrix.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = glmatrix.xml; sourceTree = ""; }; AFC258BA0988A468000655EE /* glplanet.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = glplanet.xml; sourceTree = ""; }; AFC258BB0988A468000655EE /* glslideshow.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = glslideshow.xml; sourceTree = ""; }; AFC258BC0988A468000655EE /* glsnake.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = glsnake.xml; sourceTree = ""; }; AFC258BD0988A468000655EE /* gltext.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = gltext.xml; sourceTree = ""; }; AFC258BF0988A468000655EE /* goop.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = goop.xml; sourceTree = ""; }; AFC258C00988A468000655EE /* grav.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = grav.xml; sourceTree = ""; }; AFC258C10988A468000655EE /* greynetic.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = greynetic.xml; sourceTree = ""; }; AFC258C20988A468000655EE /* halftone.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = halftone.xml; sourceTree = ""; }; AFC258C30988A468000655EE /* halo.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = halo.xml; sourceTree = ""; }; AFC258C40988A468000655EE /* helix.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = helix.xml; sourceTree = ""; }; AFC258C50988A468000655EE /* hopalong.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = hopalong.xml; sourceTree = ""; }; AFC258C60988A468000655EE /* hyperball.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = hyperball.xml; sourceTree = ""; }; AFC258C70988A468000655EE /* hypercube.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = hypercube.xml; sourceTree = ""; }; AFC258C80988A468000655EE /* hypertorus.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = hypertorus.xml; sourceTree = ""; }; AFC258C90988A468000655EE /* ifs.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = ifs.xml; sourceTree = ""; }; AFC258CA0988A468000655EE /* imsmap.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = imsmap.xml; sourceTree = ""; }; AFC258CB0988A468000655EE /* interaggregate.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = interaggregate.xml; sourceTree = ""; }; AFC258CC0988A468000655EE /* interference.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = interference.xml; sourceTree = ""; }; AFC258CD0988A468000655EE /* intermomentary.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = intermomentary.xml; sourceTree = ""; }; AFC258CE0988A468000655EE /* jigglypuff.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = jigglypuff.xml; sourceTree = ""; }; AFC258CF0988A468000655EE /* jigsaw.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = jigsaw.xml; sourceTree = ""; }; AFC258D00988A468000655EE /* juggle.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = juggle.xml; sourceTree = ""; }; AFC258D10988A468000655EE /* juggler3d.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = juggler3d.xml; sourceTree = ""; }; AFC258D20988A468000655EE /* julia.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = julia.xml; sourceTree = ""; }; AFC258D30988A468000655EE /* kaleidescope.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = kaleidescope.xml; sourceTree = ""; }; AFC258D40988A468000655EE /* klein.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = klein.xml; sourceTree = ""; }; AFC258D50988A468000655EE /* kumppa.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = kumppa.xml; sourceTree = ""; }; AFC258D60988A468000655EE /* lament.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = lament.xml; sourceTree = ""; }; AFC258D70988A468000655EE /* laser.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = laser.xml; sourceTree = ""; }; AFC258D80988A468000655EE /* lavalite.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = lavalite.xml; sourceTree = ""; }; AFC258D90988A468000655EE /* lightning.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = lightning.xml; sourceTree = ""; }; AFC258DA0988A468000655EE /* lisa.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = lisa.xml; sourceTree = ""; }; AFC258DB0988A468000655EE /* lissie.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = lissie.xml; sourceTree = ""; }; AFC258DC0988A468000655EE /* lmorph.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = lmorph.xml; sourceTree = ""; }; AFC258DD0988A468000655EE /* loop.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = loop.xml; sourceTree = ""; }; AFC258DE0988A468000655EE /* maze.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = maze.xml; sourceTree = ""; }; AFC258DF0988A469000655EE /* memscroller.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = memscroller.xml; sourceTree = ""; }; AFC258E00988A469000655EE /* menger.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = menger.xml; sourceTree = ""; }; AFC258E10988A469000655EE /* metaballs.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = metaballs.xml; sourceTree = ""; }; AFC258E20988A469000655EE /* mirrorblob.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = mirrorblob.xml; sourceTree = ""; }; AFC258E30988A469000655EE /* mismunch.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = mismunch.xml; sourceTree = ""; }; AFC258E40988A469000655EE /* moebius.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = moebius.xml; sourceTree = ""; }; AFC258E50988A469000655EE /* moire.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = moire.xml; sourceTree = ""; }; AFC258E60988A469000655EE /* moire2.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = moire2.xml; sourceTree = ""; }; AFC258E70988A469000655EE /* molecule.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = molecule.xml; sourceTree = ""; }; AFC258E80988A469000655EE /* morph3d.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = morph3d.xml; sourceTree = ""; }; AFC258E90988A469000655EE /* mountain.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = mountain.xml; sourceTree = ""; }; AFC258EA0988A469000655EE /* munch.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = munch.xml; sourceTree = ""; }; AFC258EB0988A469000655EE /* nerverot.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = nerverot.xml; sourceTree = ""; }; AFC258EC0988A469000655EE /* noof.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = noof.xml; sourceTree = ""; }; AFC258ED0988A469000655EE /* noseguy.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = noseguy.xml; sourceTree = ""; }; AFC258EE0988A469000655EE /* pacman.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = pacman.xml; sourceTree = ""; }; AFC258EF0988A469000655EE /* pedal.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = pedal.xml; sourceTree = ""; }; AFC258F00988A469000655EE /* penetrate.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = penetrate.xml; sourceTree = ""; }; AFC258F10988A469000655EE /* penrose.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = penrose.xml; sourceTree = ""; }; AFC258F20988A469000655EE /* petri.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = petri.xml; sourceTree = ""; }; AFC258F30988A469000655EE /* phosphor.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = phosphor.xml; sourceTree = ""; }; AFC258F40988A469000655EE /* piecewise.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = piecewise.xml; sourceTree = ""; }; AFC258F50988A469000655EE /* pinion.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = pinion.xml; sourceTree = ""; }; AFC258F60988A469000655EE /* pipes.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = pipes.xml; sourceTree = ""; }; AFC258F70988A469000655EE /* polyhedra.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = polyhedra.xml; sourceTree = ""; }; AFC258F80988A469000655EE /* polyominoes.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = polyominoes.xml; sourceTree = ""; }; AFC258F90988A469000655EE /* polytopes.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = polytopes.xml; sourceTree = ""; }; AFC258FA0988A469000655EE /* pong.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = pong.xml; sourceTree = ""; }; AFC258FB0988A469000655EE /* popsquares.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = popsquares.xml; sourceTree = ""; }; AFC258FC0988A469000655EE /* providence.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = providence.xml; sourceTree = ""; }; AFC258FD0988A469000655EE /* pulsar.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = pulsar.xml; sourceTree = ""; }; AFC258FE0988A469000655EE /* pyro.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = pyro.xml; sourceTree = ""; }; AFC258FF0988A469000655EE /* qix.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = qix.xml; sourceTree = ""; }; AFC259000988A469000655EE /* queens.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = queens.xml; sourceTree = ""; }; AFC259030988A469000655EE /* ripples.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = ripples.xml; sourceTree = ""; }; AFC259040988A469000655EE /* rocks.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = rocks.xml; sourceTree = ""; }; AFC259050988A469000655EE /* rorschach.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = rorschach.xml; sourceTree = ""; }; AFC259060988A469000655EE /* rotor.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = rotor.xml; sourceTree = ""; }; AFC259070988A469000655EE /* rotzoomer.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = rotzoomer.xml; sourceTree = ""; }; AFC259080988A469000655EE /* rubik.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = rubik.xml; sourceTree = ""; }; AFC259090988A469000655EE /* sballs.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = sballs.xml; sourceTree = ""; }; AFC2590A0988A469000655EE /* shadebobs.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = shadebobs.xml; sourceTree = ""; }; AFC2590B0988A469000655EE /* sierpinski.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = sierpinski.xml; sourceTree = ""; }; AFC2590C0988A469000655EE /* sierpinski3d.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = sierpinski3d.xml; sourceTree = ""; }; AFC2590D0988A469000655EE /* slidescreen.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = slidescreen.xml; sourceTree = ""; }; AFC2590E0988A469000655EE /* slip.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = slip.xml; sourceTree = ""; }; AFC2590F0988A469000655EE /* sonar.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = sonar.xml; sourceTree = ""; }; AFC259100988A469000655EE /* speedmine.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = speedmine.xml; sourceTree = ""; }; AFC259110988A469000655EE /* sphere.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = sphere.xml; sourceTree = ""; }; AFC259130988A469000655EE /* spheremonics.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = spheremonics.xml; sourceTree = ""; }; AFC259140988A469000655EE /* spiral.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = spiral.xml; sourceTree = ""; }; AFC259150988A469000655EE /* spotlight.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = spotlight.xml; sourceTree = ""; }; AFC259160988A469000655EE /* sproingies.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = sproingies.xml; sourceTree = ""; }; AFC259170988A469000655EE /* squiral.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = squiral.xml; sourceTree = ""; }; AFC259190988A469000655EE /* stairs.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = stairs.xml; sourceTree = ""; }; AFC2591A0988A469000655EE /* starfish.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = starfish.xml; sourceTree = ""; }; AFC2591B0988A469000655EE /* starwars.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = starwars.xml; sourceTree = ""; }; AFC2591C0988A469000655EE /* stonerview.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = stonerview.xml; sourceTree = ""; }; AFC2591D0988A469000655EE /* strange.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = strange.xml; sourceTree = ""; }; AFC2591E0988A469000655EE /* substrate.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = substrate.xml; sourceTree = ""; }; AFC2591F0988A469000655EE /* superquadrics.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = superquadrics.xml; sourceTree = ""; }; AFC259200988A469000655EE /* swirl.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = swirl.xml; sourceTree = ""; }; AFC259210988A469000655EE /* t3d.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = t3d.xml; sourceTree = ""; }; AFC259220988A469000655EE /* tangram.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = tangram.xml; sourceTree = ""; }; AFC259230988A469000655EE /* thornbird.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = thornbird.xml; sourceTree = ""; }; AFC259240988A469000655EE /* timetunnel.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = timetunnel.xml; sourceTree = ""; }; AFC259250988A469000655EE /* triangle.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = triangle.xml; sourceTree = ""; }; AFC259260988A469000655EE /* truchet.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = truchet.xml; sourceTree = ""; }; AFC259270988A469000655EE /* twang.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = twang.xml; sourceTree = ""; }; AFC259280988A469000655EE /* vermiculate.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = vermiculate.xml; sourceTree = ""; }; AFC259290988A469000655EE /* vidwhacker.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = vidwhacker.xml; sourceTree = ""; }; AFC2592A0988A469000655EE /* vines.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = vines.xml; sourceTree = ""; }; AFC2592B0988A469000655EE /* wander.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = wander.xml; sourceTree = ""; }; AFC2592C0988A469000655EE /* webcollage.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = webcollage.xml; sourceTree = ""; }; AFC2592D0988A469000655EE /* whirlwindwarp.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = whirlwindwarp.xml; sourceTree = ""; }; AFC2592F0988A469000655EE /* whirlygig.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = whirlygig.xml; sourceTree = ""; }; AFC259300988A469000655EE /* worm.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = worm.xml; sourceTree = ""; }; AFC259310988A469000655EE /* wormhole.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = wormhole.xml; sourceTree = ""; }; AFC259320988A469000655EE /* xanalogtv.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = xanalogtv.xml; sourceTree = ""; }; AFC259370988A469000655EE /* xflame.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = xflame.xml; sourceTree = ""; }; AFC259380988A469000655EE /* xjack.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = xjack.xml; sourceTree = ""; }; AFC259390988A469000655EE /* xlyap.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = xlyap.xml; sourceTree = ""; }; AFC2593A0988A469000655EE /* xmatrix.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = xmatrix.xml; sourceTree = ""; }; AFC2593D0988A469000655EE /* xrayswarm.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = xrayswarm.xml; sourceTree = ""; }; AFC2593F0988A469000655EE /* xspirograph.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = xspirograph.xml; sourceTree = ""; }; AFC259430988A469000655EE /* zoom.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = zoom.xml; sourceTree = ""; }; AFC25B5E0988BA63000655EE /* deco.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = deco.c; path = hacks/deco.c; sourceTree = ""; }; AFC25B990988BC08000655EE /* colors.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = colors.c; path = utils/colors.c; sourceTree = ""; }; AFC25B9A0988BC08000655EE /* colors.h */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.h; name = colors.h; path = utils/colors.h; sourceTree = ""; }; AFC43E731C68364B00C89999 /* PxPlus_IBM_VGA8.ttf */ = {isa = PBXFileReference; lastKnownFileType = file; path = PxPlus_IBM_VGA8.ttf; sourceTree = ""; }; AFC7592B158D8E8B00C5458E /* textclient.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = textclient.c; path = utils/textclient.c; sourceTree = ""; }; AFC7592C158D8E8B00C5458E /* textclient.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = textclient.h; path = utils/textclient.h; sourceTree = ""; }; AFC7592F158D9A7A00C5458E /* textclient-ios.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = "textclient-ios.m"; path = "OSX/textclient-ios.m"; sourceTree = ""; }; AFCCCBAD09BFE4B000353F4D /* rdbomb.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = rdbomb.xml; sourceTree = ""; }; AFCF83501AF5B515008BB7E1 /* SplitFlap.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = SplitFlap.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AFCF83521AF5B5FD008BB7E1 /* splitflap.xml */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; path = splitflap.xml; sourceTree = ""; }; AFCF83531AF5B5FD008BB7E1 /* splitflap_obj.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = splitflap_obj.c; path = hacks/glx/splitflap_obj.c; sourceTree = ""; }; AFCF83541AF5B5FD008BB7E1 /* splitflap.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = splitflap.c; path = hacks/glx/splitflap.c; sourceTree = ""; }; AFD51B300F063B4A00471C02 /* Photopile.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Photopile.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AFD51DB60F063BCE00471C02 /* photopile.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = photopile.c; path = hacks/glx/photopile.c; sourceTree = ""; }; AFD51DB80F063BE700471C02 /* photopile.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = photopile.xml; sourceTree = ""; }; AFD56E040996A03800BA26F7 /* GLText.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = GLText.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AFD56E080996A07A00BA26F7 /* gltext.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = gltext.c; path = hacks/glx/gltext.c; sourceTree = ""; }; AFD56E0A0996A0ED00BA26F7 /* glut_roman.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = glut_roman.h; path = hacks/glx/glut_roman.h; sourceTree = ""; }; AFD56E0B0996A0ED00BA26F7 /* glut_stroke.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = glut_stroke.c; path = hacks/glx/glut_stroke.c; sourceTree = ""; }; AFD56E0C0996A0ED00BA26F7 /* glut_swidth.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = glut_swidth.c; path = hacks/glx/glut_swidth.c; sourceTree = ""; }; AFD56E0D0996A0ED00BA26F7 /* glutstroke.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = glutstroke.h; path = hacks/glx/glutstroke.h; sourceTree = ""; }; AFD56EBE0996A72600BA26F7 /* Braid.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Braid.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AFD56EC10996A76F00BA26F7 /* braid.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = braid.c; path = hacks/braid.c; sourceTree = ""; }; AFD56EEA0996A95700BA26F7 /* Forest.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Forest.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AFD56EED0996A99E00BA26F7 /* forest.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = forest.c; path = hacks/forest.c; sourceTree = ""; }; AFD56F1B0996AAFA00BA26F7 /* Vines.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Vines.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AFD56F1F0996AB5A00BA26F7 /* vines.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = vines.c; path = hacks/vines.c; sourceTree = ""; }; AFD56F330996AB8A00BA26F7 /* Galaxy.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Galaxy.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AFD56F360996ABD200BA26F7 /* galaxy.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = galaxy.c; path = hacks/galaxy.c; sourceTree = ""; }; AFD56F5F0996AEEE00BA26F7 /* Grav.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Grav.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AFD56F620996AF2D00BA26F7 /* grav.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = grav.c; path = hacks/grav.c; sourceTree = ""; }; AFD56F7B0996B01600BA26F7 /* Hopalong.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Hopalong.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AFD56F880996B06600BA26F7 /* hopalong.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = hopalong.c; path = hacks/hopalong.c; sourceTree = ""; }; AFD56F9C0996B09400BA26F7 /* Laser.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Laser.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AFD56FA00996B0E500BA26F7 /* laser.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = laser.c; path = hacks/laser.c; sourceTree = ""; }; AFD56FB30996B10F00BA26F7 /* Lightning.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Lightning.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AFD56FB60996B16300BA26F7 /* lightning.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = lightning.c; path = hacks/lightning.c; sourceTree = ""; }; AFD56FC90996B18F00BA26F7 /* Lisa.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Lisa.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AFD56FCC0996B1D600BA26F7 /* lisa.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = lisa.c; path = hacks/lisa.c; sourceTree = ""; }; AFD56FDF0996B20900BA26F7 /* Lissie.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Lissie.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AFD56FE20996B26200BA26F7 /* lissie.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = lissie.c; path = hacks/lissie.c; sourceTree = ""; }; AFD570080996B43800BA26F7 /* Penrose.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Penrose.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AFD5700C0996B49D00BA26F7 /* penrose.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = penrose.c; path = hacks/penrose.c; sourceTree = ""; }; AFD5701F0996B4CC00BA26F7 /* Sierpinski.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Sierpinski.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AFD570220996B52700BA26F7 /* sierpinski.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = sierpinski.c; path = hacks/sierpinski.c; sourceTree = ""; }; AFD570360996B56D00BA26F7 /* Sphere.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Sphere.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AFD5703B0996B5E300BA26F7 /* sphere.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = sphere.c; path = hacks/sphere.c; sourceTree = ""; }; AFD570530996B61600BA26F7 /* Spiral.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Spiral.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AFD570560996B67600BA26F7 /* spiral.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = spiral.c; path = hacks/spiral.c; sourceTree = ""; }; AFD570690996B6A300BA26F7 /* FadePlot.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = FadePlot.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AFD5706C0996B70000BA26F7 /* fadeplot.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = fadeplot.c; path = hacks/fadeplot.c; sourceTree = ""; }; AFD5707F0996B72800BA26F7 /* Mountain.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Mountain.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AFD570820996B79300BA26F7 /* mountain.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = mountain.c; path = hacks/mountain.c; sourceTree = ""; }; AFD570950996B80300BA26F7 /* Triangle.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Triangle.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AFD570980996B86200BA26F7 /* triangle.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = triangle.c; path = hacks/triangle.c; sourceTree = ""; }; AFD570AB0996B88E00BA26F7 /* Worm.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Worm.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AFD570AE0996B8EF00BA26F7 /* worm.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = worm.c; path = hacks/worm.c; sourceTree = ""; }; AFD570C10996B93000BA26F7 /* Rotor.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Rotor.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AFD570C40996B98500BA26F7 /* rotor.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = rotor.c; path = hacks/rotor.c; sourceTree = ""; }; AFD570D90996B9F800BA26F7 /* Ant.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Ant.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AFD570DE0996BA5C00BA26F7 /* ant.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = ant.c; path = hacks/ant.c; sourceTree = ""; }; AFD570FA0996BBBF00BA26F7 /* Flow.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Flow.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AFD571010996BC3800BA26F7 /* flow.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = flow.c; path = hacks/flow.c; sourceTree = ""; }; AFD571230996BE9300BA26F7 /* Discrete.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Discrete.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AFD571280996BEF700BA26F7 /* discrete.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = discrete.c; path = hacks/discrete.c; sourceTree = ""; }; AFD5713C0996BF2E00BA26F7 /* Apollonian.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Apollonian.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AFD5713F0996BFBE00BA26F7 /* apollonian.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = apollonian.c; path = hacks/apollonian.c; sourceTree = ""; }; AFD571530996C01700BA26F7 /* Euler2D.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Euler2D.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AFD571560996C07F00BA26F7 /* euler2d.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = euler2d.c; path = hacks/euler2d.c; sourceTree = ""; }; AFD571690996C0CE00BA26F7 /* Thornbird.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Thornbird.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AFD5716B0996C16700BA26F7 /* thornbird.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = thornbird.c; path = hacks/thornbird.c; sourceTree = ""; }; AFD571C50996D9DC00BA26F7 /* Juggle.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Juggle.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AFD571C80996DA4600BA26F7 /* juggle.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = juggle.c; path = hacks/juggle.c; sourceTree = ""; }; AFD572320996E4A300BA26F7 /* Swirl.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Swirl.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AFD572350996E53E00BA26F7 /* swirl.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = swirl.c; path = hacks/swirl.c; sourceTree = ""; }; AFD5727D0996EE8500BA26F7 /* Polyominoes.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Polyominoes.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AFD572800996EF2B00BA26F7 /* polyominoes.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = polyominoes.c; path = hacks/polyominoes.c; sourceTree = ""; }; AFD572B50996F99600BA26F7 /* Bouboule.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Bouboule.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AFD572B90996FB3D00BA26F7 /* bouboule.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = bouboule.c; path = hacks/bouboule.c; sourceTree = ""; }; AFD572D20996FC0F00BA26F7 /* Crystal.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Crystal.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AFD572ED0997006E00BA26F7 /* crystal.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = crystal.c; path = hacks/crystal.c; sourceTree = ""; }; AFD57309099701C000BA26F7 /* Julia.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Julia.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AFD5730C099702C800BA26F7 /* julia.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = julia.c; path = hacks/julia.c; sourceTree = ""; }; AFD5736D0997411200BA26F7 /* Strange.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Strange.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AFD57371099741A200BA26F7 /* strange.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = strange.c; path = hacks/strange.c; sourceTree = ""; }; AFDA11211934424D003D397F /* aligned_malloc.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = aligned_malloc.c; path = utils/aligned_malloc.c; sourceTree = ""; }; AFDA11221934424D003D397F /* aligned_malloc.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = aligned_malloc.h; path = utils/aligned_malloc.h; sourceTree = ""; }; AFDA11231934424D003D397F /* thread_util.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = thread_util.c; path = utils/thread_util.c; sourceTree = ""; }; AFDA11241934424D003D397F /* thread_util.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = thread_util.h; path = utils/thread_util.h; sourceTree = ""; }; AFDA65A1178A52B70070D24B /* UnknownPleasures.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = UnknownPleasures.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AFDA65A3178A541A0070D24B /* unknownpleasures.xml */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; path = unknownpleasures.xml; sourceTree = ""; }; AFDA65A4178A541A0070D24B /* unknownpleasures.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = unknownpleasures.c; path = hacks/glx/unknownpleasures.c; sourceTree = ""; }; AFE1FD3F0981E32E00F7970E /* SaverRunner.h */ = {isa = PBXFileReference; fileEncoding = 12; lastKnownFileType = sourcecode.c.h; path = SaverRunner.h; sourceTree = ""; }; AFE1FD400981E32E00F7970E /* SaverRunner.m */ = {isa = PBXFileReference; fileEncoding = 12; lastKnownFileType = sourcecode.c.objc; path = SaverRunner.m; sourceTree = ""; }; AFE1FD410981E32E00F7970E /* InvertedSlider.h */ = {isa = PBXFileReference; fileEncoding = 12; lastKnownFileType = sourcecode.c.h; path = InvertedSlider.h; sourceTree = ""; }; AFE1FD420981E32E00F7970E /* InvertedSlider.m */ = {isa = PBXFileReference; fileEncoding = 12; lastKnownFileType = sourcecode.c.objc; path = InvertedSlider.m; sourceTree = ""; }; AFE1FD430981E32E00F7970E /* jwxyz.h */ = {isa = PBXFileReference; fileEncoding = 12; lastKnownFileType = sourcecode.c.h; name = jwxyz.h; path = ../jwxyz/jwxyz.h; sourceTree = ""; }; AFE1FD440981E32E00F7970E /* jwxyz.m */ = {isa = PBXFileReference; fileEncoding = 12; lastKnownFileType = sourcecode.c.objc; name = jwxyz.m; path = ../jwxyz/jwxyz.m; sourceTree = ""; }; AFE1FD470981E32E00F7970E /* PrefsReader.h */ = {isa = PBXFileReference; fileEncoding = 12; lastKnownFileType = sourcecode.c.h; path = PrefsReader.h; sourceTree = ""; }; AFE1FD480981E32E00F7970E /* PrefsReader.m */ = {isa = PBXFileReference; fileEncoding = 12; lastKnownFileType = sourcecode.c.objc; path = PrefsReader.m; sourceTree = ""; }; AFE1FD530981E3CB00F7970E /* erase.c */ = {isa = PBXFileReference; fileEncoding = 12; lastKnownFileType = sourcecode.c.c; name = erase.c; path = utils/erase.c; sourceTree = ""; }; AFE1FD540981E3CB00F7970E /* erase.h */ = {isa = PBXFileReference; fileEncoding = 12; lastKnownFileType = sourcecode.c.h; name = erase.h; path = utils/erase.h; sourceTree = ""; }; AFE1FD550981E3CB00F7970E /* hsv.c */ = {isa = PBXFileReference; fileEncoding = 12; lastKnownFileType = sourcecode.c.c; name = hsv.c; path = utils/hsv.c; sourceTree = ""; }; AFE1FD560981E3CB00F7970E /* hsv.h */ = {isa = PBXFileReference; fileEncoding = 12; lastKnownFileType = sourcecode.c.h; name = hsv.h; path = utils/hsv.h; sourceTree = ""; }; AFE1FD570981E3CB00F7970E /* spline.c */ = {isa = PBXFileReference; fileEncoding = 12; lastKnownFileType = sourcecode.c.c; name = spline.c; path = utils/spline.c; sourceTree = ""; }; AFE1FD580981E3CB00F7970E /* spline.h */ = {isa = PBXFileReference; fileEncoding = 12; lastKnownFileType = sourcecode.c.h; name = spline.h; path = utils/spline.h; sourceTree = ""; }; AFE1FD590981E3CB00F7970E /* utils.h */ = {isa = PBXFileReference; fileEncoding = 12; lastKnownFileType = sourcecode.c.h; name = utils.h; path = utils/utils.h; sourceTree = ""; }; AFE1FD5A0981E3CB00F7970E /* version.h */ = {isa = PBXFileReference; fileEncoding = 12; lastKnownFileType = sourcecode.c.h; name = version.h; path = utils/version.h; sourceTree = ""; }; AFE1FD5B0981E3CB00F7970E /* yarandom.c */ = {isa = PBXFileReference; fileEncoding = 12; lastKnownFileType = sourcecode.c.c; name = yarandom.c; path = utils/yarandom.c; sourceTree = ""; }; AFE1FD5C0981E3CB00F7970E /* yarandom.h */ = {isa = PBXFileReference; fileEncoding = 12; lastKnownFileType = sourcecode.c.h; name = yarandom.h; path = utils/yarandom.h; sourceTree = ""; }; AFE1FD620981E40800F7970E /* rorschach.c */ = {isa = PBXFileReference; fileEncoding = 12; lastKnownFileType = sourcecode.c.c; name = rorschach.c; path = hacks/rorschach.c; sourceTree = ""; }; AFE2A46A0E2E904600ADB298 /* SkyTentacles.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = SkyTentacles.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AFE2A4720E2E90E300ADB298 /* skytentacles.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = skytentacles.c; path = hacks/glx/skytentacles.c; sourceTree = ""; }; AFE2A4740E2E911200ADB298 /* skytentacles.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = skytentacles.xml; sourceTree = ""; }; AFE30BFC0E52B14700CCF4A5 /* Sonar.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Sonar.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AFE30BFF0E52B1DC00CCF4A5 /* sonar-icmp.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = "sonar-icmp.c"; path = "hacks/glx/sonar-icmp.c"; sourceTree = ""; }; AFE30C000E52B1DC00CCF4A5 /* sonar-sim.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = "sonar-sim.c"; path = "hacks/glx/sonar-sim.c"; sourceTree = ""; }; AFE30C010E52B1DC00CCF4A5 /* sonar.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = sonar.c; path = hacks/glx/sonar.c; sourceTree = ""; }; AFE6A16A0CDD78EA002805BF /* involute.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = involute.c; path = hacks/glx/involute.c; sourceTree = ""; }; AFE6A16B0CDD78EA002805BF /* involute.h */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.h; name = involute.h; path = hacks/glx/involute.h; sourceTree = ""; }; AFE6A1970CDD7B2E002805BF /* MoebiusGears.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = MoebiusGears.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AFE6A40B0CDD7BC3002805BF /* moebiusgears.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = moebiusgears.c; path = hacks/glx/moebiusgears.c; sourceTree = ""; }; AFE6A40D0CDD7BDC002805BF /* moebiusgears.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = moebiusgears.xml; sourceTree = ""; }; AFE6A42D0CDD7FAA002805BF /* Abstractile.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Abstractile.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AFE6A4340CDD800F002805BF /* abstractile.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = abstractile.c; path = hacks/abstractile.c; sourceTree = ""; }; AFE6A4360CDD8026002805BF /* abstractile.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = abstractile.xml; sourceTree = ""; }; AFE943AF19DD54C1000A5E6D /* xft.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = xft.c; path = utils/xft.c; sourceTree = ""; }; AFE943B019DD54C1000A5E6D /* xft.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = xft.h; path = utils/xft.h; sourceTree = ""; }; AFE943B319DDF97F000A5E6D /* utf8wc.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = utf8wc.c; path = utils/utf8wc.c; sourceTree = ""; }; AFE943B419DDF97F000A5E6D /* utf8wc.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = utf8wc.h; path = utils/utf8wc.h; sourceTree = ""; }; AFEB9C3815900514003974F3 /* UIKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = UIKit.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS5.0.sdk/System/Library/Frameworks/UIKit.framework; sourceTree = DEVELOPER_DIR; }; AFEB9C3A1590054B003974F3 /* OpenGLES.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = OpenGLES.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS5.0.sdk/System/Library/Frameworks/OpenGLES.framework; sourceTree = DEVELOPER_DIR; }; AFEB9C3C15900558003974F3 /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS5.0.sdk/System/Library/Frameworks/Foundation.framework; sourceTree = DEVELOPER_DIR; }; AFEB9C3E1590056A003974F3 /* CoreGraphics.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreGraphics.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS5.0.sdk/System/Library/Frameworks/CoreGraphics.framework; sourceTree = DEVELOPER_DIR; }; AFEB9C3F1590056A003974F3 /* QuartzCore.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = QuartzCore.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS5.0.sdk/System/Library/Frameworks/QuartzCore.framework; sourceTree = DEVELOPER_DIR; }; AFEC23E21CB6EAE100DE138F /* DymaxionMap.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = DymaxionMap.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AFEC23E41CB6EBC400DE138F /* dymaxionmap.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = dymaxionmap.c; path = hacks/glx/dymaxionmap.c; sourceTree = ""; }; AFEC23E51CB6EBDA00DE138F /* dymaxionmap.xml */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; path = dymaxionmap.xml; sourceTree = ""; }; AFEC68361BD6CA85004C1B64 /* OCRAStd.otf */ = {isa = PBXFileReference; lastKnownFileType = file; path = OCRAStd.otf; sourceTree = ""; }; AFEC68381BD6CDF9004C1B64 /* YearlReg.ttf */ = {isa = PBXFileReference; lastKnownFileType = file; path = YearlReg.ttf; sourceTree = ""; }; AFEE10621D13406000AAC8F7 /* CubeTwist.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = CubeTwist.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AFEE10641D1341E300AAC8F7 /* cubetwist.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = cubetwist.c; path = hacks/glx/cubetwist.c; sourceTree = ""; }; AFEE10651D1341E300AAC8F7 /* cubetwist.xml */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; path = cubetwist.xml; sourceTree = ""; }; AFEE10811D15EB0800AAC8F7 /* CubeStack.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = CubeStack.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AFEE10831D15EBA600AAC8F7 /* cubestack.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = cubestack.c; path = hacks/glx/cubestack.c; sourceTree = ""; }; AFEE10841D15EBA600AAC8F7 /* cubestack.xml */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; path = cubestack.xml; sourceTree = ""; }; AFEE10A01D17E20B00AAC8F7 /* Splodesic.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Splodesic.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AFEE10A21D17E2B300AAC8F7 /* splodesic.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = splodesic.c; path = hacks/glx/splodesic.c; sourceTree = ""; }; AFEE10A31D17E2B300AAC8F7 /* splodesic.xml */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; path = splodesic.xml; sourceTree = ""; }; AFF1BA0E19A96D8B0016A88D /* lament_model.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = lament_model.c; path = hacks/glx/lament_model.c; sourceTree = ""; }; AFF2869217860E830050A578 /* QuasiCrystal.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = QuasiCrystal.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AFF28694178611720050A578 /* quasicrystal.xml */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; path = quasicrystal.xml; sourceTree = ""; }; AFF28695178611720050A578 /* quasicrystal.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = quasicrystal.c; path = hacks/glx/quasicrystal.c; sourceTree = ""; }; AFF3C9FB17CCAC440028F240 /* Geodesic.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Geodesic.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AFF3C9FD17CCAD9A0028F240 /* geodesic.xml */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; path = geodesic.xml; sourceTree = ""; }; AFF3CA0217CCAEB70028F240 /* geodesic.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = geodesic.c; path = hacks/glx/geodesic.c; sourceTree = ""; }; AFF463470C4403E400EE6509 /* CWaves.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = CWaves.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AFF463490C44044E00EE6509 /* cwaves.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = cwaves.c; path = hacks/cwaves.c; sourceTree = ""; }; AFF4634B0C44046500EE6509 /* cwaves.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = cwaves.xml; sourceTree = ""; }; AFF4636C0C440AEF00EE6509 /* GLCells.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = GLCells.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AFF463710C440B9200EE6509 /* glcells.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = glcells.c; path = hacks/glx/glcells.c; sourceTree = ""; }; AFF463730C440BAC00EE6509 /* glcells.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = glcells.xml; sourceTree = ""; }; AFFAB32919158CE40020F021 /* ProjectivePlane.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = ProjectivePlane.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AFFAB32C19158E2A0020F021 /* projectiveplane.xml */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; path = projectiveplane.xml; sourceTree = ""; }; AFFAB33119158EA80020F021 /* projectiveplane.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = projectiveplane.c; path = hacks/glx/projectiveplane.c; sourceTree = ""; }; CE3D01661B76F4C100993C75 /* TestX11.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = TestX11.saver; sourceTree = BUILT_PRODUCTS_DIR; }; CE3D01681B76F83E00993C75 /* testx11.xml */ = {isa = PBXFileReference; lastKnownFileType = text.xml; path = testx11.xml; sourceTree = ""; }; CE3D016A1B76F8E200993C75 /* testx11.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = testx11.c; path = hacks/testx11.c; sourceTree = ""; }; CE43C2BE1C055157004C2BC6 /* jwxyz-cocoa.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = "jwxyz-cocoa.m"; path = "../jwxyz/jwxyz-cocoa.m"; sourceTree = ""; }; CE5564591C25141000645458 /* jwxyz-gl.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = "jwxyz-gl.c"; path = "../jwxyz/jwxyz-gl.c"; sourceTree = ""; }; CE8206741B89048800E35532 /* jwxyz-cocoa.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "jwxyz-cocoa.h"; path = "../jwxyz/jwxyz-cocoa.h"; sourceTree = ""; }; CE8C49CC1C011CC400BA2DCF /* jwxyzI.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = jwxyzI.h; path = ../jwxyz/jwxyzI.h; sourceTree = ""; }; CE8EA1C11C35CF10002D1020 /* jwxyz-common.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = "jwxyz-common.c"; path = "../jwxyz/jwxyz-common.c"; sourceTree = ""; }; CE9289D119BD00E200961F22 /* async_netdb.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = async_netdb.c; path = utils/async_netdb.c; sourceTree = ""; }; CE9289D219BD00E300961F22 /* async_netdb.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = async_netdb.h; path = utils/async_netdb.h; sourceTree = ""; }; CEAF85661ABE4A70008F104C /* SaverListController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SaverListController.h; sourceTree = ""; }; CEE0BC611A6B0D6200C098BF /* OpenGL.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = OpenGL.framework; path = System/Library/Frameworks/OpenGL.framework; sourceTree = SDKROOT; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ AF08399709930B6B00277BE9 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD8EF158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD8F0158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C326215C0FC9C007A6896 /* QuartzCore.framework in Frameworks */, AF1FD8F1158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD8F2158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BCDC1A6B13DD00C098BF /* OpenGL.framework in Frameworks */, AF78371217DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AF083A3D099311D700277BE9 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD8F3158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD8F4158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C326315C0FC9C007A6896 /* QuartzCore.framework in Frameworks */, AF1FD8F5158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD8F6158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BCDD1A6B13E700C098BF /* OpenGL.framework in Frameworks */, AF78371317DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AF0DC7B40C4C73F600D76972 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD7BF158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD7C0158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C321515C0FC9C007A6896 /* QuartzCore.framework in Frameworks */, AF1FD7C1158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD7C2158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BC901A6B100000C098BF /* OpenGL.framework in Frameworks */, AF7836C417DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AF0DCA4A0C4CBB0D00D76972 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FDA33158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FDA34158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C32B315C0FC9D007A6896 /* QuartzCore.framework in Frameworks */, AF1FDA35158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FDA36158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BD341A6B17EF00C098BF /* OpenGL.framework in Frameworks */, AF78376617DBA581003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AF1A176A0D6D6EE3008AF328 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD7BB158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD7BC158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C321415C0FC9C007A6896 /* QuartzCore.framework in Frameworks */, AF1FD7BD158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD7BE158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BC8F1A6B0FF600C098BF /* OpenGL.framework in Frameworks */, AF7836C317DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AF1AD9DF18500F9F00932759 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1ADA181850180E00932759 /* Sparkle.framework in Frameworks */, AF1ADA1F18504A4F00932759 /* ScreenSaver.framework in Frameworks */, AF1AD9E318500F9F00932759 /* Cocoa.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AF1B0FAF1D7AB4740011DBE4 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1B0FB01D7AB4740011DBE4 /* libjwxyz.a in Frameworks */, AF1B0FB11D7AB4740011DBE4 /* ScreenSaver.framework in Frameworks */, AF1B0FB21D7AB4740011DBE4 /* QuartzCore.framework in Frameworks */, AF1B0FB31D7AB4740011DBE4 /* Cocoa.framework in Frameworks */, AF1B0FB41D7AB4740011DBE4 /* Carbon.framework in Frameworks */, AF1B0FB51D7AB4740011DBE4 /* OpenGL.framework in Frameworks */, AF1B0FB61D7AB4740011DBE4 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AF32D9E80F3AD0B40080F535 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD9F3158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD9F4158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C32A315C0FC9D007A6896 /* QuartzCore.framework in Frameworks */, AF1FD9F5158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD9F6158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BD231A6B174D00C098BF /* OpenGL.framework in Frameworks */, AF78375517DBA581003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AF3581C91431D47B00E09C51 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD91B158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD91C158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C326D15C0FC9C007A6896 /* QuartzCore.framework in Frameworks */, AF1FD91D158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD91E158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BCE81A6B146F00C098BF /* OpenGL.framework in Frameworks */, AF78371D17DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AF35820A143330F900E09C51 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FDA2F158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FDA30158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C32B215C0FC9D007A6896 /* QuartzCore.framework in Frameworks */, AF1FDA31158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FDA32158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BD321A6B17DD00C098BF /* OpenGL.framework in Frameworks */, AF78376417DBA581003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AF35E8940E63823600691F2F /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD99B158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD99C158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C328D15C0FC9D007A6896 /* QuartzCore.framework in Frameworks */, AF1FD99D158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD99E158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BD0A1A6B165D00C098BF /* OpenGL.framework in Frameworks */, AF78373D17DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AF3938221D0FBD6A00205406 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF3938231D0FBD6A00205406 /* libjwxyz.a in Frameworks */, AF3938241D0FBD6A00205406 /* ScreenSaver.framework in Frameworks */, AF3938251D0FBD6A00205406 /* QuartzCore.framework in Frameworks */, AF3938261D0FBD6A00205406 /* Cocoa.framework in Frameworks */, AF3938271D0FBD6A00205406 /* Carbon.framework in Frameworks */, AF3938281D0FBD6A00205406 /* OpenGL.framework in Frameworks */, AF3938291D0FBD6A00205406 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AF39E28A198A11F60064A58D /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF39E28B198A11F60064A58D /* libjwxyz.a in Frameworks */, AF39E28C198A11F60064A58D /* ScreenSaver.framework in Frameworks */, AF39E28D198A11F60064A58D /* QuartzCore.framework in Frameworks */, AF39E28E198A11F60064A58D /* Cocoa.framework in Frameworks */, AF39E28F198A11F60064A58D /* Carbon.framework in Frameworks */, CEE0BD351A6B17F700C098BF /* OpenGL.framework in Frameworks */, AF39E290198A11F60064A58D /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AF3C714D0D624BF50030CC0D /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD993158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD994158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C328B15C0FC9D007A6896 /* QuartzCore.framework in Frameworks */, AF1FD995158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD996158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BD081A6B164A00C098BF /* OpenGL.framework in Frameworks */, AF78373B17DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AF46E9D71CBBA2B300240FBC /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF46E9D81CBBA2B300240FBC /* libjwxyz.a in Frameworks */, AF46E9D91CBBA2B300240FBC /* ScreenSaver.framework in Frameworks */, AF46E9DA1CBBA2B300240FBC /* QuartzCore.framework in Frameworks */, AF46E9DB1CBBA2B300240FBC /* Cocoa.framework in Frameworks */, AF46E9DC1CBBA2B300240FBC /* Carbon.framework in Frameworks */, AF46E9DD1CBBA2B300240FBC /* OpenGL.framework in Frameworks */, AF46E9DE1CBBA2B300240FBC /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AF476FBE099D154F001F091E /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD7AB158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD7AC158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C321015C0FC9C007A6896 /* QuartzCore.framework in Frameworks */, AF1FD7AD158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD7AE158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BC8B1A6B0FC900C098BF /* OpenGL.framework in Frameworks */, AF7836BF17DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AF476FE3099D1686001F091E /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD83F158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD840158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C323515C0FC9C007A6896 /* QuartzCore.framework in Frameworks */, AF1FD841158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD842158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BCB11A6B116100C098BF /* OpenGL.framework in Frameworks */, AF7836E517DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AF477054099D4385001F091E /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD767158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD768158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C31FF15C0FC9C007A6896 /* QuartzCore.framework in Frameworks */, AF1FD769158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD76A158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BC791A6B0EE700C098BF /* OpenGL.framework in Frameworks */, AF7836AD17DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AF477171099D4786001F091E /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD74F158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD750158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C31F915C0FC9C007A6896 /* QuartzCore.framework in Frameworks */, AF1FD751158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD752158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BC731A6B0E9200C098BF /* OpenGL.framework in Frameworks */, AF7836A717DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AF477187099D4803001F091E /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD84B158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD84C158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C323815C0FC9C007A6896 /* QuartzCore.framework in Frameworks */, AF1FD84D158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD84E158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BCB41A6B117F00C098BF /* OpenGL.framework in Frameworks */, AF7836E817DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AF4771AF099D4949001F091E /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FDA7B158FF96600C40F17 /* libjwxyz.a in Frameworks */, AF1FDA7C158FF96600C40F17 /* ScreenSaver.framework in Frameworks */, AF2C32C515C0FC9D007A6896 /* QuartzCore.framework in Frameworks */, AF1FDA7D158FF96600C40F17 /* Cocoa.framework in Frameworks */, AF1FDA7E158FF96600C40F17 /* Carbon.framework in Frameworks */, CEE0BD471A6B18BB00C098BF /* OpenGL.framework in Frameworks */, AF78377817DBA581003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AF4771E3099D4D9A001F091E /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD743158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD744158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C31F615C0FC9C007A6896 /* QuartzCore.framework in Frameworks */, AF1FD745158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD746158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BC701A6B0E7200C098BF /* OpenGL.framework in Frameworks */, AF7836A417DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AF4771FA099D4E63001F091E /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD7DB158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD7DC158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C321C15C0FC9C007A6896 /* QuartzCore.framework in Frameworks */, AF1FD7DD158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD7DE158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BC971A6B104F00C098BF /* OpenGL.framework in Frameworks */, AF7836CB17DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AF477210099D4EE8001F091E /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FDA83158FF96600C40F17 /* libjwxyz.a in Frameworks */, AF1FDA84158FF96600C40F17 /* ScreenSaver.framework in Frameworks */, AF2C32C715C0FC9D007A6896 /* QuartzCore.framework in Frameworks */, AF1FDA85158FF96600C40F17 /* Cocoa.framework in Frameworks */, AF1FDA86158FF96600C40F17 /* Carbon.framework in Frameworks */, CEE0BD491A6B18CE00C098BF /* OpenGL.framework in Frameworks */, AF78377A17DBA581003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AF477226099D4F67001F091E /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD717158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD718158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C31EB15C0FC9C007A6896 /* QuartzCore.framework in Frameworks */, AF1FD719158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD71A158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BC631A6B0D8100C098BF /* OpenGL.framework in Frameworks */, AF78369917DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AF47725B099D5717001F091E /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD793158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD794158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C320A15C0FC9C007A6896 /* QuartzCore.framework in Frameworks */, AF1FD795158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD796158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BC841A6B0F5400C098BF /* OpenGL.framework in Frameworks */, AF7836B817DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AF477273099D57B9001F091E /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD7FF158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD800158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C322515C0FC9C007A6896 /* QuartzCore.framework in Frameworks */, AF1FD801158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD802158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BCA01A6B10A900C098BF /* OpenGL.framework in Frameworks */, AF7836D517DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AF47728B099D5926001F091E /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD7F7158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD7F8158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C322315C0FC9C007A6896 /* QuartzCore.framework in Frameworks */, AF1FD7F9158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD7FA158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BC9E1A6B109600C098BF /* OpenGL.framework in Frameworks */, AF7836D317DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AF47738A099D65A1001F091E /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD85B158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD85C158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C323C15C0FC9C007A6896 /* QuartzCore.framework in Frameworks */, AF1FD85D158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD85E158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BCB71A6B11DC00C098BF /* OpenGL.framework in Frameworks */, AF7836EC17DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AF4773A2099D6648001F091E /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD787158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD788158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C320715C0FC9C007A6896 /* QuartzCore.framework in Frameworks */, AF1FD789158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD78A158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BC811A6B0F3200C098BF /* OpenGL.framework in Frameworks */, AF7836B517DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AF4773C9099D67B9001F091E /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD71B158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD71C158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C31EC15C0FC9C007A6896 /* QuartzCore.framework in Frameworks */, AF1FD71D158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD71E158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BC621A6B0D6200C098BF /* OpenGL.framework in Frameworks */, AF78369A17DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AF47740A099D69E7001F091E /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD7AF158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD7B0158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C321115C0FC9C007A6896 /* QuartzCore.framework in Frameworks */, AF1FD7B1158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD7B2158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BC8C1A6B0FD400C098BF /* OpenGL.framework in Frameworks */, AF7836C017DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AF47742F099D7C70001F091E /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD79F158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD7A0158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C320D15C0FC9C007A6896 /* QuartzCore.framework in Frameworks */, AF1FD7A1158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD7A2158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BC881A6B0F7C00C098BF /* OpenGL.framework in Frameworks */, AF7836BC17DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AF47744A099D7D33001F091E /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD86F158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD870158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C324115C0FC9C007A6896 /* QuartzCore.framework in Frameworks */, AF1FD871158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD872158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BCBC1A6B121000C098BF /* OpenGL.framework in Frameworks */, AF7836F117DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AF47748B099D89E4001F091E /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD77B158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD77C158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C320415C0FC9C007A6896 /* QuartzCore.framework in Frameworks */, AF1FD77D158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD77E158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BC7E1A6B0F1600C098BF /* OpenGL.framework in Frameworks */, AF7836B217DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AF4774A1099D8A74001F091E /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD7B3158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD7B4158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C321215C0FC9C007A6896 /* QuartzCore.framework in Frameworks */, AF1FD7B5158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD7B6158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BC8D1A6B0FDE00C098BF /* OpenGL.framework in Frameworks */, AF7836C117DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AF4774BC099D8B5F001F091E /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FDA6B158FF96600C40F17 /* libjwxyz.a in Frameworks */, AF1FDA6C158FF96600C40F17 /* ScreenSaver.framework in Frameworks */, AF2C32C115C0FC9D007A6896 /* QuartzCore.framework in Frameworks */, AF1FDA6D158FF96600C40F17 /* Cocoa.framework in Frameworks */, AF1FDA6E158FF96600C40F17 /* Carbon.framework in Frameworks */, CEE0BD431A6B189500C098BF /* OpenGL.framework in Frameworks */, AF78377417DBA581003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AF4774D6099D8BFF001F091E /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD7C3158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD7C4158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C321615C0FC9C007A6896 /* QuartzCore.framework in Frameworks */, AF1FD7C5158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD7C6158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BC911A6B100900C098BF /* OpenGL.framework in Frameworks */, AF7836C517DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AF477565099D9A1A001F091E /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD7E3158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD7E4158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C321E15C0FC9C007A6896 /* QuartzCore.framework in Frameworks */, AF1FD7E5158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD7E6158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BC991A6B106300C098BF /* OpenGL.framework in Frameworks */, AF7836CD17DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AF47758B099D9C28001F091E /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD803158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD804158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C322615C0FC9C007A6896 /* QuartzCore.framework in Frameworks */, AF1FD805158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD806158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BCA11A6B10B400C098BF /* OpenGL.framework in Frameworks */, AF7836D617DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AF4775A7099D9CF7001F091E /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD837158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD838158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C323315C0FC9C007A6896 /* QuartzCore.framework in Frameworks */, AF1FD839158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD83A158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BCAE1A6B114000C098BF /* OpenGL.framework in Frameworks */, AF7836E317DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AF4775E0099D9F69001F091E /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD753158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD754158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C31FA15C0FC9C007A6896 /* QuartzCore.framework in Frameworks */, AF1FD755158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD756158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BC741A6B0E9B00C098BF /* OpenGL.framework in Frameworks */, AF7836A817DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AF4775FA099DA030001F091E /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD76F158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD770158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C320115C0FC9C007A6896 /* QuartzCore.framework in Frameworks */, AF1FD771158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD772158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BC7B1A6B0EFB00C098BF /* OpenGL.framework in Frameworks */, AF7836AF17DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AF47761B099DA26C001F091E /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD7B7158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD7B8158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C321315C0FC9C007A6896 /* QuartzCore.framework in Frameworks */, AF1FD7B9158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD7BA158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BC8E1A6B0FEA00C098BF /* OpenGL.framework in Frameworks */, AF7836C217DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AF47764C099DA6D0001F091E /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD833158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD834158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C323215C0FC9C007A6896 /* QuartzCore.framework in Frameworks */, AF1FD835158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD836158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BCAD1A6B113500C098BF /* OpenGL.framework in Frameworks */, AF7836E217DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AF477662099DA78E001F091E /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FDA3F158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FDA40158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C32B615C0FC9D007A6896 /* QuartzCore.framework in Frameworks */, AF1FDA41158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FDA42158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BD391A6B182B00C098BF /* OpenGL.framework in Frameworks */, AF78376917DBA581003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AF477678099DA849001F091E /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD7EB158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD7EC158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C322015C0FC9C007A6896 /* QuartzCore.framework in Frameworks */, AF1FD7ED158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD7EE158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BC9B1A6B107600C098BF /* OpenGL.framework in Frameworks */, AF7836CF17DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AF477697099DAA6F001F091E /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD72F158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD730158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C31F115C0FC9C007A6896 /* QuartzCore.framework in Frameworks */, AF1FD731158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD732158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BC6B1A6B0E4200C098BF /* OpenGL.framework in Frameworks */, AF78369F17DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AF4776B2099DABDD001F091E /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD877158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD878158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C324315C0FC9C007A6896 /* QuartzCore.framework in Frameworks */, AF1FD879158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD87A158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BCBE1A6B122600C098BF /* OpenGL.framework in Frameworks */, AF7836F317DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AF4776C8099DAC8A001F091E /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD873158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD874158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C324215C0FC9C007A6896 /* QuartzCore.framework in Frameworks */, AF1FD875158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD876158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BCBD1A6B121B00C098BF /* OpenGL.framework in Frameworks */, AF7836F217DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AF4776E3099DADDF001F091E /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD857158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD858158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C323B15C0FC9C007A6896 /* QuartzCore.framework in Frameworks */, AF1FD859158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD85A158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BCB61A6B119C00C098BF /* OpenGL.framework in Frameworks */, AF7836EB17DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AF4776F9099DAE7A001F091E /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD847158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD848158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C323715C0FC9C007A6896 /* QuartzCore.framework in Frameworks */, AF1FD849158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD84A158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BCB31A6B117500C098BF /* OpenGL.framework in Frameworks */, AF7836E717DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AF477715099DAF9F001F091E /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD74B158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD74C158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C31F815C0FC9C007A6896 /* QuartzCore.framework in Frameworks */, AF1FD74D158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD74E158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BC721A6B0E8800C098BF /* OpenGL.framework in Frameworks */, AF7836A617DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AF47772B099DB044001F091E /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD83B158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD83C158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C323415C0FC9C007A6896 /* QuartzCore.framework in Frameworks */, AF1FD83D158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD83E158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BCAF1A6B114D00C098BF /* OpenGL.framework in Frameworks */, AF7836E417DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AF47775A099DB61E001F091E /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD7A7158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD7A8158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C320F15C0FC9C007A6896 /* QuartzCore.framework in Frameworks */, AF1FD7A9158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD7AA158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BC8A1A6B0FBE00C098BF /* OpenGL.framework in Frameworks */, AF7836BE17DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AF47777C099DB965001F091E /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD747158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD748158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C31F715C0FC9C007A6896 /* QuartzCore.framework in Frameworks */, AF1FD749158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD74A158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BC711A6B0E7D00C098BF /* OpenGL.framework in Frameworks */, AF7836A517DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AF477798099DBA90001F091E /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD77F158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD780158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C320515C0FC9C007A6896 /* QuartzCore.framework in Frameworks */, AF1FD781158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD782158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BC7F1A6B0F1F00C098BF /* OpenGL.framework in Frameworks */, AF7836B317DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AF4777D9099DC183001F091E /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD737158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD738158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C31F315C0FC9C007A6896 /* QuartzCore.framework in Frameworks */, AF1FD739158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD73A158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BC6D1A6B0E5400C098BF /* OpenGL.framework in Frameworks */, AF7836A117DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AF4778B3099DDB79001F091E /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD7E7158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD7E8158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C321F15C0FC9C007A6896 /* QuartzCore.framework in Frameworks */, AF1FD7E9158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD7EA158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BC9A1A6B106C00C098BF /* OpenGL.framework in Frameworks */, AF7836CE17DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AF4778CF099DDCAE001F091E /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD867158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD868158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C323F15C0FC9C007A6896 /* QuartzCore.framework in Frameworks */, AF1FD869158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD86A158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BCBA1A6B11FB00C098BF /* OpenGL.framework in Frameworks */, AF7836EF17DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AF4778F0099DDDC8001F091E /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD75B158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD75C158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C31FC15C0FC9C007A6896 /* QuartzCore.framework in Frameworks */, AF1FD75D158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD75E158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BC761A6B0EAE00C098BF /* OpenGL.framework in Frameworks */, AF7836AA17DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AF477911099DE379001F091E /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FDA43158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FDA44158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C32B715C0FC9D007A6896 /* QuartzCore.framework in Frameworks */, AF1FDA45158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FDA46158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BD3A1A6B183600C098BF /* OpenGL.framework in Frameworks */, AF78376A17DBA581003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AF477932099DE4C7001F091E /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD827158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD828158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C322F15C0FC9C007A6896 /* QuartzCore.framework in Frameworks */, AF1FD829158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD82A158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BCAA1A6B111200C098BF /* OpenGL.framework in Frameworks */, AF7836DF17DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AF4808BF098C3B6C00FB32B8 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AF480C50098E301400FB32B8 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD79B158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD79C158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C320C15C0FC9C007A6896 /* QuartzCore.framework in Frameworks */, AF1FD79D158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD79E158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BC861A6B0F6700C098BF /* OpenGL.framework in Frameworks */, AF7836BA17DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AF480D79098EEDDE00FB32B8 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD897158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD898158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C324B15C0FC9C007A6896 /* QuartzCore.framework in Frameworks */, AF1FD899158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD89A158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BCC61A6B12F700C098BF /* OpenGL.framework in Frameworks */, AF7836FB17DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AF4810F309909FBA00FB32B8 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD933158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD934158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C327315C0FC9C007A6896 /* QuartzCore.framework in Frameworks */, AF1FD935158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD936158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BCEE1A6B153800C098BF /* OpenGL.framework in Frameworks */, AF78372317DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AF4812590990CE2700FB32B8 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD957158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD958158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C327C15C0FC9D007A6896 /* QuartzCore.framework in Frameworks */, AF1FD959158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD95A158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BCF71A6B159600C098BF /* OpenGL.framework in Frameworks */, AF78372C17DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AF4812BB0990D3D900FB32B8 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD9D7158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD9D8158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C329C15C0FC9D007A6896 /* QuartzCore.framework in Frameworks */, AF1FD9D9158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD9DA158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BD1A1A6B16F800C098BF /* OpenGL.framework in Frameworks */, AF78374D17DBA581003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AF48DEF70A0C25E000F94CF9 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD97B158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD97C158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C328515C0FC9D007A6896 /* QuartzCore.framework in Frameworks */, AF1FD97D158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD97E158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BD021A6B160D00C098BF /* OpenGL.framework in Frameworks */, AF78373517DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AF4A3451102A593600A81B2A /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FDA1F158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FDA20158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C32AE15C0FC9D007A6896 /* QuartzCore.framework in Frameworks */, AF1FDA21158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FDA22158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BD2E1A6B17B600C098BF /* OpenGL.framework in Frameworks */, AF78376017DBA581003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AF4FD6EE0CE7A486005EE58E /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD9AF158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD9B0158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C329215C0FC9D007A6896 /* QuartzCore.framework in Frameworks */, AF1FD9B1158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD9B2158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BD101A6B169600C098BF /* OpenGL.framework in Frameworks */, AF78374317DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AF4FF4C20D52CBDE00666F98 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD92F158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD930158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C327215C0FC9C007A6896 /* QuartzCore.framework in Frameworks */, AF1FD931158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD932158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BCED1A6B152E00C098BF /* OpenGL.framework in Frameworks */, AF78372217DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AF5C9B011A0CCE6E00B0147A /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF5C9B021A0CCE6E00B0147A /* libjwxyz.a in Frameworks */, AF5C9B031A0CCE6E00B0147A /* ScreenSaver.framework in Frameworks */, AF5C9B041A0CCE6E00B0147A /* QuartzCore.framework in Frameworks */, AF5C9B051A0CCE6E00B0147A /* Cocoa.framework in Frameworks */, AF5C9B061A0CCE6E00B0147A /* Carbon.framework in Frameworks */, CEE0BCE71A6B144800C098BF /* OpenGL.framework in Frameworks */, AF5C9B071A0CCE6E00B0147A /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AF63A7F91AB4EDDB00593C75 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF63A7FA1AB4EDDB00593C75 /* libjwxyz.a in Frameworks */, AF63A7FB1AB4EDDB00593C75 /* ScreenSaver.framework in Frameworks */, AF63A7FC1AB4EDDB00593C75 /* QuartzCore.framework in Frameworks */, AF63A7FD1AB4EDDB00593C75 /* Cocoa.framework in Frameworks */, AF63A7FE1AB4EDDB00593C75 /* Carbon.framework in Frameworks */, AF63A7FF1AB4EDDB00593C75 /* OpenGL.framework in Frameworks */, AF63A8001AB4EDDB00593C75 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AF63F4401C3465BE0033E133 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF63F4411C3465BE0033E133 /* libjwxyz.a in Frameworks */, AF63F4421C3465BE0033E133 /* OpenGLES.framework in Frameworks */, AF63F4431C3465BE0033E133 /* UIKit.framework in Frameworks */, AF63F4441C3465BE0033E133 /* AssetsLibrary.framework in Frameworks */, AF63F4451C3465BE0033E133 /* Foundation.framework in Frameworks */, AF63F4461C3465BE0033E133 /* CoreGraphics.framework in Frameworks */, AF63F4471C3465BE0033E133 /* CoreText.framework in Frameworks */, AF63F4481C3465BE0033E133 /* QuartzCore.framework in Frameworks */, AF63F4491C3465BE0033E133 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AF63F4661C34682A0033E133 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF63F4671C34682A0033E133 /* libjwxyz.a in Frameworks */, AF63F4681C34682A0033E133 /* OpenGLES.framework in Frameworks */, AF63F4691C34682A0033E133 /* UIKit.framework in Frameworks */, AF63F46A1C34682A0033E133 /* AssetsLibrary.framework in Frameworks */, AF63F46B1C34682A0033E133 /* Foundation.framework in Frameworks */, AF63F46C1C34682A0033E133 /* CoreGraphics.framework in Frameworks */, AF63F46D1C34682A0033E133 /* CoreText.framework in Frameworks */, AF63F46E1C34682A0033E133 /* QuartzCore.framework in Frameworks */, AF63F46F1C34682A0033E133 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AF63F48C1C3469FC0033E133 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF63F48D1C3469FC0033E133 /* libjwxyz.a in Frameworks */, AF63F48E1C3469FC0033E133 /* OpenGLES.framework in Frameworks */, AF63F48F1C3469FC0033E133 /* UIKit.framework in Frameworks */, AF63F4901C3469FC0033E133 /* AssetsLibrary.framework in Frameworks */, AF63F4911C3469FC0033E133 /* Foundation.framework in Frameworks */, AF63F4921C3469FC0033E133 /* CoreGraphics.framework in Frameworks */, AF63F4931C3469FC0033E133 /* CoreText.framework in Frameworks */, AF63F4941C3469FC0033E133 /* QuartzCore.framework in Frameworks */, AF63F4951C3469FC0033E133 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AF6423FA099FF9C2000F4CD4 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD943158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD944158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C327715C0FC9D007A6896 /* QuartzCore.framework in Frameworks */, AF1FD945158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD946158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BCF21A6B156200C098BF /* OpenGL.framework in Frameworks */, AF78372717DBA580003B9FC0 /* libz.dylib in Frameworks */, AF84FD4209B1209E00F3AB06 /* GLUT.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AF6425D409A18855000F4CD4 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FDA53158FF96600C40F17 /* libjwxyz.a in Frameworks */, AF1FDA54158FF96600C40F17 /* ScreenSaver.framework in Frameworks */, AF2C32BB15C0FC9D007A6896 /* QuartzCore.framework in Frameworks */, AF1FDA55158FF96600C40F17 /* Cocoa.framework in Frameworks */, AF1FDA56158FF96600C40F17 /* Carbon.framework in Frameworks */, CEE0BD3D1A6B185600C098BF /* OpenGL.framework in Frameworks */, AF78376E17DBA581003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AF6425F409A189EC000F4CD4 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD807158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD808158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C322715C0FC9C007A6896 /* QuartzCore.framework in Frameworks */, AF1FD809158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD80A158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BCA21A6B10BF00C098BF /* OpenGL.framework in Frameworks */, AF7836D717DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AF64261709A18D6C000F4CD4 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FDA4F158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FDA50158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C32BA15C0FC9D007A6896 /* QuartzCore.framework in Frameworks */, AF1FDA51158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FDA52158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BD3C1A6B184C00C098BF /* OpenGL.framework in Frameworks */, AF78376D17DBA581003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AF64263409A18F54000F4CD4 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD7D3158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD7D4158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C321A15C0FC9C007A6896 /* QuartzCore.framework in Frameworks */, AF1FD7D5158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD7D6158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BC951A6B103B00C098BF /* OpenGL.framework in Frameworks */, AF7836C917DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AF64265709A19229000F4CD4 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD7D7158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD7D8158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C321B15C0FC9C007A6896 /* QuartzCore.framework in Frameworks */, AF1FD7D9158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD7DA158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BC961A6B104500C098BF /* OpenGL.framework in Frameworks */, AF7836CA17DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AF64268309A194B0000F4CD4 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD78B158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD78C158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C320815C0FC9C007A6896 /* QuartzCore.framework in Frameworks */, AF1FD78D158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD78E158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BC821A6B0F3C00C098BF /* OpenGL.framework in Frameworks */, AF7836B617DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AF64277909A1D37A000F4CD4 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD82B158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD82C158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C323015C0FC9C007A6896 /* QuartzCore.framework in Frameworks */, AF1FD82D158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD82E158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BCAB1A6B111E00C098BF /* OpenGL.framework in Frameworks */, AF7836E017DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AF6427B009A2DE36000F4CD4 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FDA3B158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FDA3C158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C32B515C0FC9D007A6896 /* QuartzCore.framework in Frameworks */, AF1FDA3D158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FDA3E158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BD381A6B182100C098BF /* OpenGL.framework in Frameworks */, AF78376817DBA581003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AF68A48619196CF800D41CD1 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF68A48719196CF800D41CD1 /* libjwxyz.a in Frameworks */, AF68A48819196CF800D41CD1 /* ScreenSaver.framework in Frameworks */, AF68A48919196CF800D41CD1 /* QuartzCore.framework in Frameworks */, AF68A48A19196CF800D41CD1 /* Cocoa.framework in Frameworks */, AF68A48B19196CF800D41CD1 /* Carbon.framework in Frameworks */, CEE0BCB01A6B115700C098BF /* OpenGL.framework in Frameworks */, AF68A48C19196CF800D41CD1 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AF73FF2A1A09877F00E485E9 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF73FF2B1A09877F00E485E9 /* libjwxyz.a in Frameworks */, AF73FF2C1A09877F00E485E9 /* ScreenSaver.framework in Frameworks */, AF73FF2D1A09877F00E485E9 /* QuartzCore.framework in Frameworks */, AF73FF2E1A09877F00E485E9 /* Cocoa.framework in Frameworks */, AF73FF2F1A09877F00E485E9 /* Carbon.framework in Frameworks */, CEE0BC6A1A6B0E3800C098BF /* OpenGL.framework in Frameworks */, AF73FF301A09877F00E485E9 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AF7511071782B5B900380EA1 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF7511081782B5B900380EA1 /* libjwxyz.a in Frameworks */, AF7511091782B5B900380EA1 /* ScreenSaver.framework in Frameworks */, AF75110A1782B5B900380EA1 /* QuartzCore.framework in Frameworks */, AF75110B1782B5B900380EA1 /* Cocoa.framework in Frameworks */, AF75110C1782B5B900380EA1 /* Carbon.framework in Frameworks */, CEE0BD0C1A6B167000C098BF /* OpenGL.framework in Frameworks */, AF78373F17DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AF7776EE09B63ABF00EA3033 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD7EF158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD7F0158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C322115C0FC9C007A6896 /* QuartzCore.framework in Frameworks */, AF1FD7F1158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD7F2158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BC9C1A6B108000C098BF /* OpenGL.framework in Frameworks */, AF7836D117DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AF77772209B6416100EA3033 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD8C3158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD8C4158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C325715C0FC9C007A6896 /* QuartzCore.framework in Frameworks */, AF1FD8C5158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD8C6158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BCD11A6B136300C098BF /* OpenGL.framework in Frameworks */, AF78370617DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AF77774609B6446500EA3033 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD94B158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD94C158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C327915C0FC9D007A6896 /* QuartzCore.framework in Frameworks */, AF1FD94D158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD94E158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BCF41A6B157600C098BF /* OpenGL.framework in Frameworks */, AF78372917DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AF77777D09B6497800EA3033 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD95B158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD95C158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C327D15C0FC9D007A6896 /* QuartzCore.framework in Frameworks */, AF1FD95D158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD95E158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BCFD1A6B15D200C098BF /* OpenGL.framework in Frameworks */, AF78372D17DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AF77779709B64A5200EA3033 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD9B7158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD9B8158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C329415C0FC9D007A6896 /* QuartzCore.framework in Frameworks */, AF1FD9B9158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD9BA158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BD121A6B16A800C098BF /* OpenGL.framework in Frameworks */, AF78374517DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AF7777B109B64B2600EA3033 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FDA17158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FDA18158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C32AC15C0FC9D007A6896 /* QuartzCore.framework in Frameworks */, AF1FDA19158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FDA1A158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BD2C1A6B17A200C098BF /* OpenGL.framework in Frameworks */, AF78375E17DBA581003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AF7777D909B64C6B00EA3033 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD97F158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD980158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C328615C0FC9D007A6896 /* QuartzCore.framework in Frameworks */, AF1FD981158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD982158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BD031A6B161700C098BF /* OpenGL.framework in Frameworks */, AF78373617DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AF7777F309B64E3100EA3033 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD94F158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD950158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C327A15C0FC9D007A6896 /* QuartzCore.framework in Frameworks */, AF1FD951158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD952158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BCF51A6B158000C098BF /* OpenGL.framework in Frameworks */, AF78372A17DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AF77781A09B6504400EA3033 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FDA13158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FDA14158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C32AB15C0FC9D007A6896 /* QuartzCore.framework in Frameworks */, AF1FDA15158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FDA16158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BD2B1A6B179900C098BF /* OpenGL.framework in Frameworks */, AF78375D17DBA581003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AF77784D09B6528100EA3033 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD913158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD914158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C326B15C0FC9C007A6896 /* QuartzCore.framework in Frameworks */, AF1FD915158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD916158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BCE51A6B143500C098BF /* OpenGL.framework in Frameworks */, AF78371B17DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AF77786909B6536000EA3033 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD937158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD938158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C327415C0FC9D007A6896 /* QuartzCore.framework in Frameworks */, AF1FD939158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD93A158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BCEF1A6B154200C098BF /* OpenGL.framework in Frameworks */, AF78372417DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AF77788709B6563500EA3033 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD783158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD784158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C320615C0FC9C007A6896 /* QuartzCore.framework in Frameworks */, AF1FD785158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD786158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BC801A6B0F2900C098BF /* OpenGL.framework in Frameworks */, AF7836B417DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AF7778AD09B659C800EA3033 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD733158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD734158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C31F215C0FC9C007A6896 /* QuartzCore.framework in Frameworks */, AF1FD735158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD736158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BC6C1A6B0E4B00C098BF /* OpenGL.framework in Frameworks */, AF7836A017DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AF78D17D142DD8F3002AAF77 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD98B158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD98C158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C328915C0FC9D007A6896 /* QuartzCore.framework in Frameworks */, AF1FD98D158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD98E158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BD061A6B163700C098BF /* OpenGL.framework in Frameworks */, AF78373917DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AF794F6C099748450059A8B0 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD88F158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD890158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C324915C0FC9C007A6896 /* QuartzCore.framework in Frameworks */, AF1FD891158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD892158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BCC41A6B126D00C098BF /* OpenGL.framework in Frameworks */, AF7836F917DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AF794F9609974A320059A8B0 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD8A3158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD8A4158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C324E15C0FC9C007A6896 /* QuartzCore.framework in Frameworks */, AF1FD8A5158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD8A6158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BCC91A6B131300C098BF /* OpenGL.framework in Frameworks */, AF7836FE17DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AF794FD509974FA60059A8B0 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD8BB158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD8BC158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C325515C0FC9C007A6896 /* QuartzCore.framework in Frameworks */, AF1FD8BD158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD8BE158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BCCF1A6B135000C098BF /* OpenGL.framework in Frameworks */, AF78370417DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AF7ACFC819FF0A9200BD752B /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF7ACFC919FF0A9200BD752B /* libjwxyz.a in Frameworks */, AF7ACFCA19FF0A9200BD752B /* ScreenSaver.framework in Frameworks */, AF7ACFCB19FF0A9200BD752B /* QuartzCore.framework in Frameworks */, AF7ACFCC19FF0A9200BD752B /* Cocoa.framework in Frameworks */, AF7ACFCD19FF0A9200BD752B /* Carbon.framework in Frameworks */, CEE0BCF91A6B15AD00C098BF /* OpenGL.framework in Frameworks */, AF7ACFCE19FF0A9200BD752B /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AF918989158FC00A002B5D1E /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( 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 */, AF7F54A417DC249500CE1158 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AF975735099C317000B05160 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD7A3158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD7A4158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C320E15C0FC9C007A6896 /* QuartzCore.framework in Frameworks */, AF1FD7A5158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD7A6158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BC891A6B0FB300C098BF /* OpenGL.framework in Frameworks */, AF7836BD17DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AF97577D099C374A00B05160 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD7CF158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD7D0158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C321915C0FC9C007A6896 /* QuartzCore.framework in Frameworks */, AF1FD7D1158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD7D2158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BC941A6B103100C098BF /* OpenGL.framework in Frameworks */, AF7836C817DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AF9757CA099C3E6300B05160 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD80B158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD80C158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C322815C0FC9C007A6896 /* QuartzCore.framework in Frameworks */, AF1FD80D158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD80E158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BCA31A6B10CB00C098BF /* OpenGL.framework in Frameworks */, AF7836D817DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AF975810099C41D500B05160 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD85F158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD860158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C323D15C0FC9C007A6896 /* QuartzCore.framework in Frameworks */, AF1FD861158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD862158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BCB81A6B11E700C098BF /* OpenGL.framework in Frameworks */, AF7836ED17DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AF97586D099C475900B05160 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD81F158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD820158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C322D15C0FC9C007A6896 /* QuartzCore.framework in Frameworks */, AF1FD821158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD822158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BCA81A6B10FD00C098BF /* OpenGL.framework in Frameworks */, AF7836DD17DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AF975A3E099C681F00B05160 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD7CB158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD7CC158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C321815C0FC9C007A6896 /* QuartzCore.framework in Frameworks */, AF1FD7CD158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD7CE158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BC931A6B102600C098BF /* OpenGL.framework in Frameworks */, AF7836C717DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AF975A74099C6AB200B05160 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD773158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD774158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C320215C0FC9C007A6896 /* QuartzCore.framework in Frameworks */, AF1FD775158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD776158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BC7C1A6B0F0400C098BF /* OpenGL.framework in Frameworks */, AF7836B017DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AF975A8E099C6BC300B05160 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD72B158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD72C158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C31F015C0FC9C007A6896 /* QuartzCore.framework in Frameworks */, AF1FD72D158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD72E158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BC691A6B0E2D00C098BF /* OpenGL.framework in Frameworks */, AF78369E17DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AF975ADF099C6EB100B05160 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD777158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD778158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C320315C0FC9C007A6896 /* QuartzCore.framework in Frameworks */, AF1FD779158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD77A158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BC7D1A6B0F0D00C098BF /* OpenGL.framework in Frameworks */, AF7836B117DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AF975B04099C6FE400B05160 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD7C7158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD7C8158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C321715C0FC9C007A6896 /* QuartzCore.framework in Frameworks */, AF1FD7C9158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD7CA158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BC921A6B101900C098BF /* OpenGL.framework in Frameworks */, AF7836C617DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AF975C1A099C8C1500B05160 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD797158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD798158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C320B15C0FC9C007A6896 /* QuartzCore.framework in Frameworks */, AF1FD799158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD79A158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BC851A6B0F5D00C098BF /* OpenGL.framework in Frameworks */, AF7836B917DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AF975C46099C8DCF00B05160 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD78F158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD790158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C320915C0FC9C007A6896 /* QuartzCore.framework in Frameworks */, AF1FD791158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD792158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BC831A6B0F4500C098BF /* OpenGL.framework in Frameworks */, AF7836B717DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AF975C66099C8F3F00B05160 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD7DF158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD7E0158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C321D15C0FC9C007A6896 /* QuartzCore.framework in Frameworks */, AF1FD7E1158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD7E2158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BC981A6B105800C098BF /* OpenGL.framework in Frameworks */, AF7836CC17DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AF975D5B099CA0F000B05160 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD813158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD814158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C322A15C0FC9C007A6896 /* QuartzCore.framework in Frameworks */, AF1FD815158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD816158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BCA51A6B10DE00C098BF /* OpenGL.framework in Frameworks */, AF7836DA17DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AF976FBA0989CAA2001F8B92 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD763158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD764158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C31FE15C0FC9C007A6896 /* QuartzCore.framework in Frameworks */, AF1FD765158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD766158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BC781A6B0EDD00C098BF /* OpenGL.framework in Frameworks */, AF7836AC17DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AF9770390989D1E6001F8B92 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD817158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD818158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C322B15C0FC9C007A6896 /* QuartzCore.framework in Frameworks */, AF1FD819158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD81A158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BCA61A6B10E900C098BF /* OpenGL.framework in Frameworks */, AF7836DB17DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AF9770760989D2F6001F8B92 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD727158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD728158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C31EF15C0FC9C007A6896 /* QuartzCore.framework in Frameworks */, AF1FD729158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD72A158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BC681A6B0E1800C098BF /* OpenGL.framework in Frameworks */, AF78369D17DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AF9771D50989DC4A001F8B92 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AFEB9C37158FFF88003974F3 /* ScreenSaver.framework in Frameworks */, AF2C31E615C0F7FE007A6896 /* QuartzCore.framework in Frameworks */, AF918B99158FF045002B5D1E /* Cocoa.framework in Frameworks */, AF918B9A158FF04C002B5D1E /* Carbon.framework in Frameworks */, AF78369717DB9F25003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AF998EE20A083DB30051049D /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FDA2B158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FDA2C158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C32B115C0FC9D007A6896 /* QuartzCore.framework in Frameworks */, AF1FDA2D158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FDA2E158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BD311A6B17D300C098BF /* OpenGL.framework in Frameworks */, AF78376317DBA581003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AF9D466E09B5109C006E59CF /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD75F158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD760158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C31FD15C0FC9C007A6896 /* QuartzCore.framework in Frameworks */, AF1FD761158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD762158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BC771A6B0ED300C098BF /* OpenGL.framework in Frameworks */, AF7836AB17DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AF9D474C09B5300A006E59CF /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD823158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD824158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C322E15C0FC9C007A6896 /* QuartzCore.framework in Frameworks */, AF1FD825158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD826158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BCA91A6B110700C098BF /* OpenGL.framework in Frameworks */, AF7836DE17DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AF9D476709B53166006E59CF /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD87B158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD87C158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C324415C0FC9C007A6896 /* QuartzCore.framework in Frameworks */, AF1FD87D158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD87E158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BCBF1A6B123500C098BF /* OpenGL.framework in Frameworks */, AF7836F417DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AF9D48E309B53322006E59CF /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD73F158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD740158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C31F515C0FC9C007A6896 /* QuartzCore.framework in Frameworks */, AF1FD741158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD742158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BC6F1A6B0E6700C098BF /* OpenGL.framework in Frameworks */, AF7836A317DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AF9D48FC09B535DA006E59CF /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD76B158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD76C158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C320015C0FC9C007A6896 /* QuartzCore.framework in Frameworks */, AF1FD76D158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD76E158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BC7A1A6B0EF100C098BF /* OpenGL.framework in Frameworks */, AF7836AE17DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AF9D493309B53CBA006E59CF /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD80F158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD810158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C322915C0FC9C007A6896 /* QuartzCore.framework in Frameworks */, AF1FD811158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD812158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BCA41A6B10D400C098BF /* OpenGL.framework in Frameworks */, AF7836D917DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AF9D495C09B53FC9006E59CF /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD81B158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD81C158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C322C15C0FC9C007A6896 /* QuartzCore.framework in Frameworks */, AF1FD81D158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD81E158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BCA71A6B10F300C098BF /* OpenGL.framework in Frameworks */, AF7836DC17DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AF9D497409B5411D006E59CF /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD843158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD844158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C323615C0FC9C007A6896 /* QuartzCore.framework in Frameworks */, AF1FD845158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD846158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BCB21A6B116B00C098BF /* OpenGL.framework in Frameworks */, AF7836E617DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AF9D499F09B544C2006E59CF /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD82F158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD830158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C323115C0FC9C007A6896 /* QuartzCore.framework in Frameworks */, AF1FD831158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD832158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BCAC1A6B112A00C098BF /* OpenGL.framework in Frameworks */, AF7836E117DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AF9D4C7109B59F27006E59CF /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD86B158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD86C158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C324015C0FC9C007A6896 /* QuartzCore.framework in Frameworks */, AF1FD86D158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD86E158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BCBB1A6B120600C098BF /* OpenGL.framework in Frameworks */, AF7836F017DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AF9D4CEF09B5AA8E006E59CF /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD7FB158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD7FC158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C322415C0FC9C007A6896 /* QuartzCore.framework in Frameworks */, AF1FD7FD158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD7FE158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BC9F1A6B10A000C098BF /* OpenGL.framework in Frameworks */, AF7836D417DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AF9D4D8709B5B2DC006E59CF /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD863158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD864158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C323E15C0FC9C007A6896 /* QuartzCore.framework in Frameworks */, AF1FD865158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD866158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BCB91A6B11F100C098BF /* OpenGL.framework in Frameworks */, AF7836EE17DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AF9D4DB809B5B71E006E59CF /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD73B158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD73C158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C31F415C0FC9C007A6896 /* QuartzCore.framework in Frameworks */, AF1FD73D158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD73E158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BC6E1A6B0E5E00C098BF /* OpenGL.framework in Frameworks */, AF7836A217DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AF9D4DF609B5BB19006E59CF /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD71F158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD720158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C31ED15C0FC9C007A6896 /* QuartzCore.framework in Frameworks */, AF1FD721158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD722158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BC671A6B0E0600C098BF /* OpenGL.framework in Frameworks */, AF78369B17DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AF9E7EBC190F4C1B00A8B01F /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AFA211941CD59DAF00C0D2A1 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AFA211951CD59DAF00C0D2A1 /* libjwxyz.a in Frameworks */, AFA211961CD59DAF00C0D2A1 /* ScreenSaver.framework in Frameworks */, AFA211971CD59DAF00C0D2A1 /* QuartzCore.framework in Frameworks */, AFA211981CD59DAF00C0D2A1 /* Cocoa.framework in Frameworks */, AFA211991CD59DAF00C0D2A1 /* Carbon.framework in Frameworks */, AFA2119A1CD59DAF00C0D2A1 /* OpenGL.framework in Frameworks */, AFA2119B1CD59DAF00C0D2A1 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AFA339370B058505002B0E7D /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD84F158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD850158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C323915C0FC9C007A6896 /* QuartzCore.framework in Frameworks */, AF1FD851158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD852158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BCB51A6B118C00C098BF /* OpenGL.framework in Frameworks */, AF7836E917DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AFA33BC50B058740002B0E7D /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD853158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD854158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C323A15C0FC9C007A6896 /* QuartzCore.framework in Frameworks */, AF1FD855158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD856158FF96500C40F17 /* Carbon.framework in Frameworks */, AF7836EA17DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AFA5594F099330B000F3E977 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD90F158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD910158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C326A15C0FC9C007A6896 /* QuartzCore.framework in Frameworks */, AF1FD911158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD912158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BCE41A6B142C00C098BF /* OpenGL.framework in Frameworks */, AF78371A17DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AFA559740993317900F3E977 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD9BB158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD9BC158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C329515C0FC9D007A6896 /* QuartzCore.framework in Frameworks */, AF1FD9BD158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD9BE158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BD131A6B16B200C098BF /* OpenGL.framework in Frameworks */, AF78374617DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AFA559990993322100F3E977 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FDA1B158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FDA1C158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C32AD15C0FC9D007A6896 /* QuartzCore.framework in Frameworks */, AF1FDA1D158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FDA1E158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BD2D1A6B17AD00C098BF /* OpenGL.framework in Frameworks */, AF78375F17DBA581003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AFA559BC0993328000F3E977 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD9C7158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD9C8158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C329815C0FC9D007A6896 /* QuartzCore.framework in Frameworks */, AF1FD9C9158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD9CA158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BD161A6B16D000C098BF /* OpenGL.framework in Frameworks */, AF78374917DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AFA559D60993330600F3E977 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD9EF158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD9F0158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C32A215C0FC9D007A6896 /* QuartzCore.framework in Frameworks */, AF1FD9F1158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD9F2158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BD221A6B174400C098BF /* OpenGL.framework in Frameworks */, AF78375417DBA581003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AFA55A0A0993340300F3E977 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FDA0F158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FDA10158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C32AA15C0FC9D007A6896 /* QuartzCore.framework in Frameworks */, AF1FDA11158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FDA12158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BD2A1A6B178F00C098BF /* OpenGL.framework in Frameworks */, AF78375C17DBA581003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AFA55A27099334A000F3E977 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FDA0B158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FDA0C158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C32A915C0FC9D007A6896 /* QuartzCore.framework in Frameworks */, AF1FDA0D158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FDA0E158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BD291A6B178600C098BF /* OpenGL.framework in Frameworks */, AF78375B17DBA581003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AFA55A800993364300F3E977 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD9A7158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD9A8158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C329015C0FC9D007A6896 /* QuartzCore.framework in Frameworks */, AF1FD9A9158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD9AA158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BD0E1A6B168200C098BF /* OpenGL.framework in Frameworks */, AF78374117DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AFA55AD609933CEF00F3E977 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD90B158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD90C158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C326915C0FC9C007A6896 /* QuartzCore.framework in Frameworks */, AF1FD90D158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD90E158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BCE31A6B142200C098BF /* OpenGL.framework in Frameworks */, AF78371917DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AFA55B1309933E0500F3E977 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD977158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD978158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C328415C0FC9D007A6896 /* QuartzCore.framework in Frameworks */, AF1FD979158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD97A158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BD011A6B160200C098BF /* OpenGL.framework in Frameworks */, AF78373417DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AFA55B2C09933E8D00F3E977 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD9E7158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD9E8158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C32A015C0FC9D007A6896 /* QuartzCore.framework in Frameworks */, AF1FD9E9158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD9EA158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BD1F1A6B172800C098BF /* OpenGL.framework in Frameworks */, AF78375117DBA581003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AFA55B8009933F7200F3E977 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD9FF158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FDA00158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C32A615C0FC9D007A6896 /* QuartzCore.framework in Frameworks */, AF1FDA01158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FDA02158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BD251A6B176000C098BF /* OpenGL.framework in Frameworks */, AF78375817DBA581003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AFA55B9809933FDA00F3E977 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD95F158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD960158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C327E15C0FC9D007A6896 /* QuartzCore.framework in Frameworks */, AF1FD961158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD962158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BCFA1A6B15B600C098BF /* OpenGL.framework in Frameworks */, AF78372E17DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AFA55BB2099340CE00F3E977 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD917158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD918158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C326C15C0FC9C007A6896 /* QuartzCore.framework in Frameworks */, AF1FD919158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD91A158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BCE61A6B143E00C098BF /* OpenGL.framework in Frameworks */, AF78371C17DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AFA55BEB0993429100F3E977 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD9B3158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD9B4158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C329315C0FC9D007A6896 /* QuartzCore.framework in Frameworks */, AF1FD9B5158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD9B6158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BD111A6B169F00C098BF /* OpenGL.framework in Frameworks */, AF78374417DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AFA55C150993431300F3E977 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD93F158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD940158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C327615C0FC9D007A6896 /* QuartzCore.framework in Frameworks */, AF1FD941158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD942158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BCF11A6B155700C098BF /* OpenGL.framework in Frameworks */, AF78372617DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AFA55C7E099349A600F3E977 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD983158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD984158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C328715C0FC9D007A6896 /* QuartzCore.framework in Frameworks */, AF1FD985158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD986158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BD041A6B162400C098BF /* OpenGL.framework in Frameworks */, AF78373717DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AFA55CB009934BB200F3E977 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD907158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD908158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C326815C0FC9C007A6896 /* QuartzCore.framework in Frameworks */, AF1FD909158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD90A158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BCE21A6B141900C098BF /* OpenGL.framework in Frameworks */, AF78371817DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AFA55CD309934CE400F3E977 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FDA4B158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FDA4C158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C32B915C0FC9D007A6896 /* QuartzCore.framework in Frameworks */, AF1FDA4D158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FDA4E158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BD361A6B180D00C098BF /* OpenGL.framework in Frameworks */, AF78376C17DBA581003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AFA55D430993565300F3E977 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD9FB158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD9FC158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C32A515C0FC9D007A6896 /* QuartzCore.framework in Frameworks */, AF1FD9FD158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD9FE158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BD241A6B175700C098BF /* OpenGL.framework in Frameworks */, AF78375717DBA581003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AFA55D690993584B00F3E977 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD927158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD928158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C327015C0FC9C007A6896 /* QuartzCore.framework in Frameworks */, AF1FD929158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD92A158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BCEB1A6B151A00C098BF /* OpenGL.framework in Frameworks */, AF78372017DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AFA55D86099358C400F3E977 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FDA07158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FDA08158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C32A815C0FC9D007A6896 /* QuartzCore.framework in Frameworks */, AF1FDA09158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FDA0A158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BD281A6B177C00C098BF /* OpenGL.framework in Frameworks */, AF78375A17DBA581003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AFA55DCF09935D7000F3E977 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD9AB158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD9AC158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C329115C0FC9D007A6896 /* QuartzCore.framework in Frameworks */, AF1FD9AD158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD9AE158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BD0F1A6B168D00C098BF /* OpenGL.framework in Frameworks */, AF78374217DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AFA55DF809935E4900F3E977 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD9EB158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD9EC158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C32A115C0FC9D007A6896 /* QuartzCore.framework in Frameworks */, AF1FD9ED158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD9EE158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BD211A6B173A00C098BF /* OpenGL.framework in Frameworks */, AF78375317DBA581003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AFA55E1409935EDC00F3E977 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD93B158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD93C158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C327515C0FC9D007A6896 /* QuartzCore.framework in Frameworks */, AF1FD93D158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD93E158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BCF01A6B154E00C098BF /* OpenGL.framework in Frameworks */, AF78372517DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AFA55E3709935F8E00F3E977 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD963158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD964158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C327F15C0FC9D007A6896 /* QuartzCore.framework in Frameworks */, AF1FD965158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD966158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BCFB1A6B15BF00C098BF /* OpenGL.framework in Frameworks */, AF78372F17DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AFA55E5509935FF900F3E977 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD953158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD954158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C327B15C0FC9D007A6896 /* QuartzCore.framework in Frameworks */, AF1FD955158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD956158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BCF61A6B158C00C098BF /* OpenGL.framework in Frameworks */, AF78372B17DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AFA55ED8099360E300F3E977 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD903158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD904158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C326715C0FC9C007A6896 /* QuartzCore.framework in Frameworks */, AF1FD905158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD906158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BCE11A6B140F00C098BF /* OpenGL.framework in Frameworks */, AF78371717DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AFA55F13099361B700F3E977 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD997158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD998158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C328C15C0FC9D007A6896 /* QuartzCore.framework in Frameworks */, AF1FD999158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD99A158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BD091A6B165300C098BF /* OpenGL.framework in Frameworks */, AF78373C17DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AFA55F310993622F00F3E977 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD9A3158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD9A4158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C328F15C0FC9D007A6896 /* QuartzCore.framework in Frameworks */, AF1FD9A5158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD9A6158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BD0D1A6B167900C098BF /* OpenGL.framework in Frameworks */, AF78374017DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AFA55F490993629000F3E977 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD98F158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD990158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C328A15C0FC9D007A6896 /* QuartzCore.framework in Frameworks */, AF1FD991158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD992158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BD071A6B164000C098BF /* OpenGL.framework in Frameworks */, AF78373A17DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AFA55F790993643600F3E977 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD973158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD974158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C328315C0FC9D007A6896 /* QuartzCore.framework in Frameworks */, AF1FD975158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD976158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BD001A6B15F800C098BF /* OpenGL.framework in Frameworks */, AF78373317DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AFA55FDA09936BFA00F3E977 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD92B158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD92C158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C327115C0FC9C007A6896 /* QuartzCore.framework in Frameworks */, AF1FD92D158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD92E158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BCEC1A6B152300C098BF /* OpenGL.framework in Frameworks */, AF78372117DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AFA5600009936C6D00F3E977 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD96F158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD970158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C328215C0FC9D007A6896 /* QuartzCore.framework in Frameworks */, AF1FD971158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD972158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BCFF1A6B15EE00C098BF /* OpenGL.framework in Frameworks */, AF78373217DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AFA5601B09936CC800F3E977 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD8FB158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD8FC158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C326515C0FC9C007A6896 /* QuartzCore.framework in Frameworks */, AF1FD8FD158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD8FE158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BCDF1A6B13FC00C098BF /* OpenGL.framework in Frameworks */, AF78371517DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AFA5603909936D5100F3E977 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD947158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD948158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C327815C0FC9D007A6896 /* QuartzCore.framework in Frameworks */, AF1FD949158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD94A158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BCF31A6B156C00C098BF /* OpenGL.framework in Frameworks */, AF78372817DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AFA5605109936E2100F3E977 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD8E3158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD8E4158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C325F15C0FC9C007A6896 /* QuartzCore.framework in Frameworks */, AF1FD8E5158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD8E6158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BCD91A6B13C000C098BF /* OpenGL.framework in Frameworks */, AF78370F17DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AFA5606909936F3800F3E977 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD8EB158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD8EC158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C326115C0FC9C007A6896 /* QuartzCore.framework in Frameworks */, AF1FD8ED158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD8EE158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BCDB1A6B13D300C098BF /* OpenGL.framework in Frameworks */, AF78371117DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AFA560B50993718D00F3E977 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD9DF158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD9E0158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C329E15C0FC9D007A6896 /* QuartzCore.framework in Frameworks */, AF1FD9E1158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD9E2158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BD1C1A6B170A00C098BF /* OpenGL.framework in Frameworks */, AF78374F17DBA581003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AFA561040993781600F3E977 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD9C3158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD9C4158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C329715C0FC9D007A6896 /* QuartzCore.framework in Frameworks */, AF1FD9C5158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD9C6158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BD151A6B16C500C098BF /* OpenGL.framework in Frameworks */, AF78374817DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AFA5615F09937C0D00F3E977 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD8F7158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD8F8158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C326415C0FC9C007A6896 /* QuartzCore.framework in Frameworks */, AF1FD8F9158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD8FA158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BCDE1A6B13F100C098BF /* OpenGL.framework in Frameworks */, AF78371417DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AFA5618209937CF100F3E977 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD9CB158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD9CC158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C329915C0FC9D007A6896 /* QuartzCore.framework in Frameworks */, AF1FD9CD158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD9CE158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BD171A6B16DA00C098BF /* OpenGL.framework in Frameworks */, AF78374A17DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AFA561A409937D7E00F3E977 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD9DB158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD9DC158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C329D15C0FC9D007A6896 /* QuartzCore.framework in Frameworks */, AF1FD9DD158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD9DE158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BD1B1A6B170100C098BF /* OpenGL.framework in Frameworks */, AF78374E17DBA581003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AFA5620E0993849F00F3E977 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD9E3158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD9E4158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C329F15C0FC9D007A6896 /* QuartzCore.framework in Frameworks */, AF1FD9E5158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD9E6158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BD1E1A6B171E00C098BF /* OpenGL.framework in Frameworks */, AF78375017DBA581003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AFA562260993852500F3E977 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD9D3158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD9D4158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C329B15C0FC9D007A6896 /* QuartzCore.framework in Frameworks */, AF1FD9D5158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD9D6158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BD191A6B16EE00C098BF /* OpenGL.framework in Frameworks */, AF78374C17DBA581003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AFA562C6099392C600F3E977 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD8FF158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD900158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C326615C0FC9C007A6896 /* QuartzCore.framework in Frameworks */, AF1FD901158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD902158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BCE01A6B140500C098BF /* OpenGL.framework in Frameworks */, AF78371617DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AFA562E1099393C900F3E977 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD8E7158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD8E8158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C326015C0FC9C007A6896 /* QuartzCore.framework in Frameworks */, AF1FD8E9158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD8EA158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BCDA1A6B13C900C098BF /* OpenGL.framework in Frameworks */, AF78371017DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AFA562F90993943B00F3E977 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FDA23158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FDA24158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C32AF15C0FC9D007A6896 /* QuartzCore.framework in Frameworks */, AF1FDA25158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FDA26158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BD2F1A6B17BF00C098BF /* OpenGL.framework in Frameworks */, AF78376117DBA581003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AFA5631B0993951000F3E977 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD91F158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD920158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C326E15C0FC9C007A6896 /* QuartzCore.framework in Frameworks */, AF1FD921158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD922158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BCE91A6B147900C098BF /* OpenGL.framework in Frameworks */, AF78371E17DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AFA56338099395ED00F3E977 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD96B158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD96C158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C328115C0FC9D007A6896 /* QuartzCore.framework in Frameworks */, AF1FD96D158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD96E158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BCFE1A6B15E300C098BF /* OpenGL.framework in Frameworks */, AF78373117DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AFA56358099396C000F3E977 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD923158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD924158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C326F15C0FC9C007A6896 /* QuartzCore.framework in Frameworks */, AF1FD925158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD926158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BCEA1A6B150F00C098BF /* OpenGL.framework in Frameworks */, AF78371F17DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AFA56380099397B300F3E977 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FDA27158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FDA28158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C32B015C0FC9D007A6896 /* QuartzCore.framework in Frameworks */, AF1FDA29158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FDA2A158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BD301A6B17C900C098BF /* OpenGL.framework in Frameworks */, AF78376217DBA581003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AFA563AB099398BB00F3E977 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD99F158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD9A0158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C328E15C0FC9D007A6896 /* QuartzCore.framework in Frameworks */, AF1FD9A1158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD9A2158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BD0B1A6B166700C098BF /* OpenGL.framework in Frameworks */, AF78373E17DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AFACE87B1CC83458008B24CD /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AFACE87C1CC83458008B24CD /* libjwxyz.a in Frameworks */, AFACE87D1CC83458008B24CD /* ScreenSaver.framework in Frameworks */, AFACE87E1CC83458008B24CD /* QuartzCore.framework in Frameworks */, AFACE87F1CC83458008B24CD /* Cocoa.framework in Frameworks */, AFACE8801CC83458008B24CD /* Carbon.framework in Frameworks */, AFACE8811CC83458008B24CD /* OpenGL.framework in Frameworks */, AFACE8821CC83458008B24CD /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AFB591AF178B812C00EA4005 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AFB591B0178B812C00EA4005 /* libjwxyz.a in Frameworks */, AFB591B1178B812C00EA4005 /* ScreenSaver.framework in Frameworks */, AFB591B2178B812C00EA4005 /* QuartzCore.framework in Frameworks */, AFB591B3178B812C00EA4005 /* Cocoa.framework in Frameworks */, AFB591B4178B812C00EA4005 /* Carbon.framework in Frameworks */, CEE0BC871A6B0F7000C098BF /* OpenGL.framework in Frameworks */, AF7836BB17DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AFBFE755178642DC00432B21 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AFBFE756178642DC00432B21 /* ScreenSaver.framework in Frameworks */, AFBFE757178642DC00432B21 /* QuartzCore.framework in Frameworks */, AFBFE758178642DC00432B21 /* Cocoa.framework in Frameworks */, AFBFE759178642DC00432B21 /* Carbon.framework in Frameworks */, CEE0BC661A6B0DBF00C098BF /* OpenGL.framework in Frameworks */, AF78369C17DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AFBFE775178647FE00432B21 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AFBFE776178647FE00432B21 /* ScreenSaver.framework in Frameworks */, AFBFE777178647FE00432B21 /* QuartzCore.framework in Frameworks */, AFBFE778178647FE00432B21 /* Cocoa.framework in Frameworks */, AFBFE779178647FE00432B21 /* Carbon.framework in Frameworks */, CEE0BC9D1A6B108B00C098BF /* OpenGL.framework in Frameworks */, AF7836D217DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AFC0E8B31CDC601A008CAFAC /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AFC0E8B41CDC601A008CAFAC /* libjwxyz.a in Frameworks */, AFC0E8B51CDC601A008CAFAC /* ScreenSaver.framework in Frameworks */, AFC0E8B61CDC601A008CAFAC /* QuartzCore.framework in Frameworks */, AFC0E8B71CDC601A008CAFAC /* Cocoa.framework in Frameworks */, AFC0E8B81CDC601A008CAFAC /* Carbon.framework in Frameworks */, AFC0E8B91CDC601A008CAFAC /* OpenGL.framework in Frameworks */, AFC0E8BA1CDC601A008CAFAC /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AFCF83431AF5B515008BB7E1 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AFCF83441AF5B515008BB7E1 /* libjwxyz.a in Frameworks */, AFCF83451AF5B515008BB7E1 /* ScreenSaver.framework in Frameworks */, AFCF83461AF5B515008BB7E1 /* QuartzCore.framework in Frameworks */, AFCF83471AF5B515008BB7E1 /* Cocoa.framework in Frameworks */, AFCF83481AF5B515008BB7E1 /* Carbon.framework in Frameworks */, AFCF83491AF5B515008BB7E1 /* OpenGL.framework in Frameworks */, AFCF834A1AF5B515008BB7E1 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AFD51B240F063B4A00471C02 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD9CF158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD9D0158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C329A15C0FC9D007A6896 /* QuartzCore.framework in Frameworks */, AF1FD9D1158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD9D2158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BD181A6B16E300C098BF /* OpenGL.framework in Frameworks */, AF78374B17DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AFD56DF90996A03800BA26F7 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD987158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD988158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C328815C0FC9D007A6896 /* QuartzCore.framework in Frameworks */, AF1FD989158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD98A158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BD051A6B162E00C098BF /* OpenGL.framework in Frameworks */, AF78373817DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AFD56EB60996A72600BA26F7 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD887158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD888158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C324715C0FC9C007A6896 /* QuartzCore.framework in Frameworks */, AF1FD889158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD88A158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BCC21A6B125800C098BF /* OpenGL.framework in Frameworks */, AF7836F717DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AFD56EE20996A95700BA26F7 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FDA47158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FDA48158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C32B815C0FC9D007A6896 /* QuartzCore.framework in Frameworks */, AF1FDA49158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FDA4A158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BD3B1A6B184100C098BF /* OpenGL.framework in Frameworks */, AF78376B17DBA581003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AFD56F130996AAFA00BA26F7 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FDA7F158FF96600C40F17 /* libjwxyz.a in Frameworks */, AF1FDA80158FF96600C40F17 /* ScreenSaver.framework in Frameworks */, AF2C32C615C0FC9D007A6896 /* QuartzCore.framework in Frameworks */, AF1FDA81158FF96600C40F17 /* Cocoa.framework in Frameworks */, AF1FDA82158FF96600C40F17 /* Carbon.framework in Frameworks */, CEE0BD481A6B18C400C098BF /* OpenGL.framework in Frameworks */, AF78377917DBA581003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AFD56F2B0996AB8A00BA26F7 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD8AB158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD8AC158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C325015C0FC9C007A6896 /* QuartzCore.framework in Frameworks */, AF1FD8AD158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD8AE158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BCCB1A6B132800C098BF /* OpenGL.framework in Frameworks */, AF78370017DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AFD56F570996AEEE00BA26F7 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD8AF158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD8B0158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C325115C0FC9C007A6896 /* QuartzCore.framework in Frameworks */, AF1FD8B1158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD8B2158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BCCC1A6B133300C098BF /* OpenGL.framework in Frameworks */, AF78370117DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AFD56F730996B01600BA26F7 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD8B3158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD8B4158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C325215C0FC9C007A6896 /* QuartzCore.framework in Frameworks */, AF1FD8B5158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD8B6158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BCCD1A6B133D00C098BF /* OpenGL.framework in Frameworks */, AF78370217DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AFD56F940996B09400BA26F7 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FDA5B158FF96600C40F17 /* libjwxyz.a in Frameworks */, AF1FDA5C158FF96600C40F17 /* ScreenSaver.framework in Frameworks */, AF2C32BD15C0FC9D007A6896 /* QuartzCore.framework in Frameworks */, AF1FDA5D158FF96600C40F17 /* Cocoa.framework in Frameworks */, AF1FDA5E158FF96600C40F17 /* Carbon.framework in Frameworks */, CEE0BD3F1A6B186C00C098BF /* OpenGL.framework in Frameworks */, AF78377017DBA581003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AFD56FAB0996B10F00BA26F7 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FDA5F158FF96600C40F17 /* libjwxyz.a in Frameworks */, AF1FDA60158FF96600C40F17 /* ScreenSaver.framework in Frameworks */, AF2C32BE15C0FC9D007A6896 /* QuartzCore.framework in Frameworks */, AF1FDA61158FF96600C40F17 /* Cocoa.framework in Frameworks */, AF1FDA62158FF96600C40F17 /* Carbon.framework in Frameworks */, CEE0BD401A6B187500C098BF /* OpenGL.framework in Frameworks */, AF78377117DBA581003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AFD56FC10996B18F00BA26F7 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FDA63158FF96600C40F17 /* libjwxyz.a in Frameworks */, AF1FDA64158FF96600C40F17 /* ScreenSaver.framework in Frameworks */, AF2C32BF15C0FC9D007A6896 /* QuartzCore.framework in Frameworks */, AF1FDA65158FF96600C40F17 /* Cocoa.framework in Frameworks */, AF1FDA66158FF96600C40F17 /* Carbon.framework in Frameworks */, CEE0BD411A6B188100C098BF /* OpenGL.framework in Frameworks */, AF78377217DBA581003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AFD56FD70996B20900BA26F7 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FDA67158FF96600C40F17 /* libjwxyz.a in Frameworks */, AF1FDA68158FF96600C40F17 /* ScreenSaver.framework in Frameworks */, AF2C32C015C0FC9D007A6896 /* QuartzCore.framework in Frameworks */, AF1FDA69158FF96600C40F17 /* Cocoa.framework in Frameworks */, AF1FDA6A158FF96600C40F17 /* Carbon.framework in Frameworks */, CEE0BD421A6B188B00C098BF /* OpenGL.framework in Frameworks */, AF78377317DBA581003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AFD570000996B43800BA26F7 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD8C7158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD8C8158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C325815C0FC9C007A6896 /* QuartzCore.framework in Frameworks */, AF1FD8C9158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD8CA158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BCD21A6B136C00C098BF /* OpenGL.framework in Frameworks */, AF78370717DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AFD570170996B4CC00BA26F7 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD8CF158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD8D0158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C325A15C0FC9C007A6896 /* QuartzCore.framework in Frameworks */, AF1FD8D1158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD8D2158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BCD41A6B137F00C098BF /* OpenGL.framework in Frameworks */, AF78370917DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AFD5702E0996B56D00BA26F7 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FDA73158FF96600C40F17 /* libjwxyz.a in Frameworks */, AF1FDA74158FF96600C40F17 /* ScreenSaver.framework in Frameworks */, AF2C32C315C0FC9D007A6896 /* QuartzCore.framework in Frameworks */, AF1FDA75158FF96600C40F17 /* Cocoa.framework in Frameworks */, AF1FDA76158FF96600C40F17 /* Carbon.framework in Frameworks */, CEE0BD451A6B18A900C098BF /* OpenGL.framework in Frameworks */, AF78377617DBA581003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AFD5704B0996B61600BA26F7 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FDA77158FF96600C40F17 /* libjwxyz.a in Frameworks */, AF1FDA78158FF96600C40F17 /* ScreenSaver.framework in Frameworks */, AF2C32C415C0FC9D007A6896 /* QuartzCore.framework in Frameworks */, AF1FDA79158FF96600C40F17 /* Cocoa.framework in Frameworks */, AF1FDA7A158FF96600C40F17 /* Carbon.framework in Frameworks */, CEE0BD461A6B18B200C098BF /* OpenGL.framework in Frameworks */, AF78377717DBA581003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AFD570610996B6A300BA26F7 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD89F158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD8A0158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C324D15C0FC9C007A6896 /* QuartzCore.framework in Frameworks */, AF1FD8A1158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD8A2158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BCC81A6B130A00C098BF /* OpenGL.framework in Frameworks */, AF7836FD17DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AFD570770996B72700BA26F7 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD8BF158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD8C0158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C325615C0FC9C007A6896 /* QuartzCore.framework in Frameworks */, AF1FD8C1158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD8C2158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BCD01A6B135900C098BF /* OpenGL.framework in Frameworks */, AF78370517DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AFD5708D0996B80300BA26F7 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD8DF158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD8E0158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C325E15C0FC9C007A6896 /* QuartzCore.framework in Frameworks */, AF1FD8E1158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD8E2158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BCD81A6B13B500C098BF /* OpenGL.framework in Frameworks */, AF78370D17DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AFD570A30996B88E00BA26F7 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FDA87158FF96600C40F17 /* libjwxyz.a in Frameworks */, AF1FDA88158FF96600C40F17 /* ScreenSaver.framework in Frameworks */, AF2C32C815C0FC9D007A6896 /* QuartzCore.framework in Frameworks */, AF1FDA89158FF96600C40F17 /* Cocoa.framework in Frameworks */, AF1FDA8A158FF96600C40F17 /* Carbon.framework in Frameworks */, CEE0BD4A1A6B18D700C098BF /* OpenGL.framework in Frameworks */, AF78377B17DBA581003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AFD570B90996B93000BA26F7 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FDA6F158FF96600C40F17 /* libjwxyz.a in Frameworks */, AF1FDA70158FF96600C40F17 /* ScreenSaver.framework in Frameworks */, AF2C32C215C0FC9D007A6896 /* QuartzCore.framework in Frameworks */, AF1FDA71158FF96600C40F17 /* Cocoa.framework in Frameworks */, AF1FDA72158FF96600C40F17 /* Carbon.framework in Frameworks */, CEE0BD441A6B189F00C098BF /* OpenGL.framework in Frameworks */, AF78377517DBA581003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AFD570D10996B9F800BA26F7 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FDA37158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FDA38158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C32B415C0FC9D007A6896 /* QuartzCore.framework in Frameworks */, AF1FDA39158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FDA3A158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BD371A6B181700C098BF /* OpenGL.framework in Frameworks */, AF78376717DBA581003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AFD570F20996BBBF00BA26F7 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD8A7158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD8A8158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C324F15C0FC9C007A6896 /* QuartzCore.framework in Frameworks */, AF1FD8A9158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD8AA158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BCCA1A6B131E00C098BF /* OpenGL.framework in Frameworks */, AF7836FF17DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AFD5711B0996BE9300BA26F7 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD893158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD894158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C324A15C0FC9C007A6896 /* QuartzCore.framework in Frameworks */, AF1FD895158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD896158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BCC51A6B127700C098BF /* OpenGL.framework in Frameworks */, AF7836FA17DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AFD571340996BF2E00BA26F7 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD87F158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD880158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C324515C0FC9C007A6896 /* QuartzCore.framework in Frameworks */, AF1FD881158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD882158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BCC01A6B124400C098BF /* OpenGL.framework in Frameworks */, AF7836F517DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AFD5714B0996C01700BA26F7 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD89B158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD89C158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C324C15C0FC9C007A6896 /* QuartzCore.framework in Frameworks */, AF1FD89D158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD89E158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BCC71A6B130000C098BF /* OpenGL.framework in Frameworks */, AF7836FC17DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AFD571610996C0CE00BA26F7 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD8DB158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD8DC158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C325D15C0FC9C007A6896 /* QuartzCore.framework in Frameworks */, AF1FD8DD158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD8DE158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BCD71A6B13AA00C098BF /* OpenGL.framework in Frameworks */, AF78370C17DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AFD571BD0996D9DC00BA26F7 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FDA57158FF96600C40F17 /* libjwxyz.a in Frameworks */, AF1FDA58158FF96600C40F17 /* ScreenSaver.framework in Frameworks */, AF2C32BC15C0FC9D007A6896 /* QuartzCore.framework in Frameworks */, AF1FDA59158FF96600C40F17 /* Cocoa.framework in Frameworks */, AF1FDA5A158FF96600C40F17 /* Carbon.framework in Frameworks */, CEE0BD3E1A6B186200C098BF /* OpenGL.framework in Frameworks */, AF78376F17DBA581003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AFD5722A0996E4A300BA26F7 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD8D7158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD8D8158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C325C15C0FC9C007A6896 /* QuartzCore.framework in Frameworks */, AF1FD8D9158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD8DA158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BCD61A6B13A100C098BF /* OpenGL.framework in Frameworks */, AF78370B17DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AFD572750996EE8500BA26F7 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD8CB158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD8CC158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C325915C0FC9C007A6896 /* QuartzCore.framework in Frameworks */, AF1FD8CD158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD8CE158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BCD31A6B137600C098BF /* OpenGL.framework in Frameworks */, AF78370817DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AFD572AD0996F99600BA26F7 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD883158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD884158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C324615C0FC9C007A6896 /* QuartzCore.framework in Frameworks */, AF1FD885158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD886158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BCC11A6B124D00C098BF /* OpenGL.framework in Frameworks */, AF7836F617DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AFD572CA0996FC0F00BA26F7 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD88B158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD88C158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C324815C0FC9C007A6896 /* QuartzCore.framework in Frameworks */, AF1FD88D158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD88E158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BCC31A6B126200C098BF /* OpenGL.framework in Frameworks */, AF7836F817DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AFD57301099701C000BA26F7 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD8B7158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD8B8158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C325315C0FC9C007A6896 /* QuartzCore.framework in Frameworks */, AF1FD8B9158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD8BA158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BCCE1A6B134600C098BF /* OpenGL.framework in Frameworks */, AF78370317DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AFD573650997411200BA26F7 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD8D3158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD8D4158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C325B15C0FC9C007A6896 /* QuartzCore.framework in Frameworks */, AF1FD8D5158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD8D6158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BCD51A6B138800C098BF /* OpenGL.framework in Frameworks */, AF78370A17DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AFDA6596178A52B70070D24B /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AFDA6597178A52B70070D24B /* libjwxyz.a in Frameworks */, AFDA6598178A52B70070D24B /* ScreenSaver.framework in Frameworks */, AFDA6599178A52B70070D24B /* QuartzCore.framework in Frameworks */, AFDA659A178A52B70070D24B /* Cocoa.framework in Frameworks */, AFDA659B178A52B70070D24B /* Carbon.framework in Frameworks */, CEE0BD331A6B17E600C098BF /* OpenGL.framework in Frameworks */, AF78376517DBA581003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AFE2A45E0E2E904600ADB298 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FDA03158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FDA04158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C32A715C0FC9D007A6896 /* QuartzCore.framework in Frameworks */, AF1FDA05158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FDA06158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BD261A6B176900C098BF /* OpenGL.framework in Frameworks */, AF78375917DBA581003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AFE30BF00E52B14700CCF4A5 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD9F7158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD9F8158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C32A415C0FC9D007A6896 /* QuartzCore.framework in Frameworks */, AF1FD9F9158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD9FA158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BD271A6B177200C098BF /* OpenGL.framework in Frameworks */, AF78375617DBA581003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AFE6A18B0CDD7B2E002805BF /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD9BF158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD9C0158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C329615C0FC9D007A6896 /* QuartzCore.framework in Frameworks */, AF1FD9C1158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD9C2158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BD141A6B16BB00C098BF /* OpenGL.framework in Frameworks */, AF78374717DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AFE6A4240CDD7FAA002805BF /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD713158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD714158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C31EA15C0FC9C007A6896 /* QuartzCore.framework in Frameworks */, AF1FD715158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD716158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BC641A6B0DA100C098BF /* OpenGL.framework in Frameworks */, AF78369817DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AFEC23D51CB6EAE100DE138F /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AFEC23D61CB6EAE100DE138F /* libjwxyz.a in Frameworks */, AFEC23D71CB6EAE100DE138F /* ScreenSaver.framework in Frameworks */, AFEC23D81CB6EAE100DE138F /* QuartzCore.framework in Frameworks */, AFEC23D91CB6EAE100DE138F /* Cocoa.framework in Frameworks */, AFEC23DA1CB6EAE100DE138F /* Carbon.framework in Frameworks */, AFEC23DB1CB6EAE100DE138F /* OpenGL.framework in Frameworks */, AFEC23DC1CB6EAE100DE138F /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AFEE10551D13406000AAC8F7 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AFEE10561D13406000AAC8F7 /* libjwxyz.a in Frameworks */, AFEE10571D13406000AAC8F7 /* ScreenSaver.framework in Frameworks */, AFEE10581D13406000AAC8F7 /* QuartzCore.framework in Frameworks */, AFEE10591D13406000AAC8F7 /* Cocoa.framework in Frameworks */, AFEE105A1D13406000AAC8F7 /* Carbon.framework in Frameworks */, AFEE105B1D13406000AAC8F7 /* OpenGL.framework in Frameworks */, AFEE105C1D13406000AAC8F7 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AFEE10741D15EB0800AAC8F7 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AFEE10751D15EB0800AAC8F7 /* libjwxyz.a in Frameworks */, AFEE10761D15EB0800AAC8F7 /* ScreenSaver.framework in Frameworks */, AFEE10771D15EB0800AAC8F7 /* QuartzCore.framework in Frameworks */, AFEE10781D15EB0800AAC8F7 /* Cocoa.framework in Frameworks */, AFEE10791D15EB0800AAC8F7 /* Carbon.framework in Frameworks */, AFEE107A1D15EB0800AAC8F7 /* OpenGL.framework in Frameworks */, AFEE107B1D15EB0800AAC8F7 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AFEE10931D17E20B00AAC8F7 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AFEE10941D17E20B00AAC8F7 /* libjwxyz.a in Frameworks */, AFEE10951D17E20B00AAC8F7 /* ScreenSaver.framework in Frameworks */, AFEE10961D17E20B00AAC8F7 /* QuartzCore.framework in Frameworks */, AFEE10971D17E20B00AAC8F7 /* Cocoa.framework in Frameworks */, AFEE10981D17E20B00AAC8F7 /* Carbon.framework in Frameworks */, AFEE10991D17E20B00AAC8F7 /* OpenGL.framework in Frameworks */, AFEE109A1D17E20B00AAC8F7 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AFF2868717860E830050A578 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AFF2868817860E830050A578 /* libjwxyz.a in Frameworks */, AFF2868917860E830050A578 /* ScreenSaver.framework in Frameworks */, AFF2868A17860E830050A578 /* QuartzCore.framework in Frameworks */, AFF2868B17860E830050A578 /* Cocoa.framework in Frameworks */, AFF2868C17860E830050A578 /* Carbon.framework in Frameworks */, CEE0BD201A6B173100C098BF /* OpenGL.framework in Frameworks */, AF78375217DBA581003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AFF3C9F017CCAC440028F240 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AFF3C9F117CCAC440028F240 /* libjwxyz.a in Frameworks */, AFF3C9F217CCAC440028F240 /* ScreenSaver.framework in Frameworks */, AFF3C9F317CCAC440028F240 /* QuartzCore.framework in Frameworks */, AFF3C9F417CCAC440028F240 /* Cocoa.framework in Frameworks */, AFF3C9F517CCAC440028F240 /* Carbon.framework in Frameworks */, CEE0BCF81A6B15A300C098BF /* OpenGL.framework in Frameworks */, AF78370E17DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AFF4633E0C4403E400EE6509 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD757158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD758158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C31FB15C0FC9C007A6896 /* QuartzCore.framework in Frameworks */, AF1FD759158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD75A158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BC751A6B0EA500C098BF /* OpenGL.framework in Frameworks */, AF7836A917DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AFF463600C440AEF00EE6509 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD967158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD968158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C328015C0FC9D007A6896 /* QuartzCore.framework in Frameworks */, AF1FD969158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD96A158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BCFC1A6B15C800C098BF /* OpenGL.framework in Frameworks */, AF78373017DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AFFAB31D19158CE40020F021 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AFFAB31E19158CE40020F021 /* libjwxyz.a in Frameworks */, AFFAB31F19158CE40020F021 /* ScreenSaver.framework in Frameworks */, AFFAB32019158CE40020F021 /* QuartzCore.framework in Frameworks */, AFFAB32119158CE40020F021 /* Cocoa.framework in Frameworks */, AFFAB32219158CE40020F021 /* Carbon.framework in Frameworks */, CEE0BD1D1A6B171400C098BF /* OpenGL.framework in Frameworks */, AFFAB32319158CE40020F021 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; CE3D01591B76F4C100993C75 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( CE3D015A1B76F4C100993C75 /* libjwxyz.a in Frameworks */, CE3D015B1B76F4C100993C75 /* ScreenSaver.framework in Frameworks */, CE3D015C1B76F4C100993C75 /* QuartzCore.framework in Frameworks */, CE3D015D1B76F4C100993C75 /* Cocoa.framework in Frameworks */, CE3D015E1B76F4C100993C75 /* Carbon.framework in Frameworks */, CE3D015F1B76F4C100993C75 /* OpenGL.framework in Frameworks */, CE3D01601B76F4C100993C75 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ 080E96DDFE201D6D7F000001 /* libjwxyz */ = { isa = PBXGroup; children = ( AF561DF515969BC3007CA5ED /* grabclient-ios.m */, AFE1FD410981E32E00F7970E /* InvertedSlider.h */, AFE1FD420981E32E00F7970E /* InvertedSlider.m */, AF2D8F301CEBA10300198014 /* jwxyz-timers.c */, AF2D8F311CEBA10300198014 /* jwxyz-timers.h */, AFE1FD430981E32E00F7970E /* jwxyz.h */, AFE1FD440981E32E00F7970E /* jwxyz.m */, CE8C49CC1C011CC400BA2DCF /* jwxyzI.h */, CE8206741B89048800E35532 /* jwxyz-cocoa.h */, CE43C2BE1C055157004C2BC6 /* jwxyz-cocoa.m */, CE8EA1C11C35CF10002D1020 /* jwxyz-common.c */, CE5564591C25141000645458 /* jwxyz-gl.c */, AF6048F8157C07C600CA21E4 /* jwzgles.c */, AF6048F9157C07C600CA21E4 /* jwzgles.h */, AF6048FA157C07C600CA21E4 /* jwzglesI.h */, AF9D468E09B51567006E59CF /* grabclient-osx.m */, AFE1FD470981E32E00F7970E /* PrefsReader.h */, AFE1FD480981E32E00F7970E /* PrefsReader.m */, 32CA4F630368D1EE00C91783 /* xscreensaver_Prefix.pch */, AFC2577F09888F5A000655EE /* XScreenSaverConfigSheet.h */, AFC2578009888F5A000655EE /* XScreenSaverConfigSheet.m */, AF4812F70990D9AE00FB32B8 /* XScreenSaverGLView.h */, AF4812F80990D9AE00FB32B8 /* XScreenSaverGLView.m */, AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */, AFC254C409882C97000655EE /* XScreenSaverView.h */, AFC254C509882C97000655EE /* XScreenSaverView.m */, AF9E7EC8190F4C4000A8B01F /* enable_gc.c */, ); name = libjwxyz; sourceTree = ""; }; 19C28FACFE9D520D11CA2CBB /* Products */ = { isa = PBXGroup; children = ( AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */, AF97707D0989D2F6001F8B92 /* Attraction.saver */, AF4810FB09909FBA00FB32B8 /* DangerBall.saver */, AF976FBC0989CAA2001F8B92 /* Deco.saver */, AF480D81098EEDDE00FB32B8 /* Drift.saver */, AF480C58098E301400FB32B8 /* Helix.saver */, AF9770400989D1E6001F8B92 /* Rorschach.saver */, AF9771D70989DC4A001F8B92 /* SaverTester.app */, AF4812640990CE2700FB32B8 /* Gears.saver */, AF4812C60990D3D900FB32B8 /* Pipes.saver */, AF0839A209930B6B00277BE9 /* Atlantis.saver */, AF083A48099311D700277BE9 /* Atunnel.saver */, AFA5595A099330B000F3E977 /* Cage.saver */, AFA5597F0993317900F3E977 /* Moebius.saver */, AFA559A40993322100F3E977 /* Superquadrics.saver */, AFA559C70993328000F3E977 /* Morph3D.saver */, AFA559E10993330600F3E977 /* Rubik.saver */, AFA55A150993340300F3E977 /* Stairs.saver */, AFA55A32099334A000F3E977 /* Sproingies.saver */, AFA55A8B0993364300F3E977 /* Lament.saver */, AFA55AE109933CEF00F3E977 /* Bubble3D.saver */, AFA55B1E09933E0500F3E977 /* GLPlanet.saver */, AFA55B3709933E8D00F3E977 /* Pulsar.saver */, AFA55B8B09933F7200F3E977 /* Sierpinski3D.saver */, AFA55BA309933FDA00F3E977 /* GFlux.saver */, AFA55BBD099340CE00F3E977 /* Circuit.saver */, AFA55BF60993429100F3E977 /* Menger.saver */, AFA55C200993431300F3E977 /* Engine.saver */, AFA55C89099349A600F3E977 /* GLSnake.saver */, AFA55CBB09934BB200F3E977 /* Boxed.saver */, AFA55CDE09934CE400F3E977 /* GLForestFire.saver */, AFA55D4E0993565300F3E977 /* SBalls.saver */, AFA55D740993584B00F3E977 /* Cubenetic.saver */, AFA55D91099358C400F3E977 /* Spheremonics.saver */, AFA55DDA09935D7000F3E977 /* Lavalite.saver */, AFA55E0309935E4900F3E977 /* Queens.saver */, AFA55E1F09935EDC00F3E977 /* Endgame.saver */, AFA55E4209935F8E00F3E977 /* GLBlur.saver */, AFA55E6009935FF900F3E977 /* FlyingToasters.saver */, AFA55EE3099360E300F3E977 /* BouncingCow.saver */, AFA55F1E099361B700F3E977 /* JigglyPuff.saver */, AFA55F3C0993622F00F3E977 /* Klein.saver */, AFA55F540993629000F3E977 /* Hypertorus.saver */, AFA55F840993643600F3E977 /* GLMatrix.saver */, AFA55FE509936BFA00F3E977 /* CubeStorm.saver */, AFA5600B09936C6D00F3E977 /* GLKnots.saver */, AFA5602609936CC800F3E977 /* BlockTube.saver */, AFA5604409936D5100F3E977 /* FlipFlop.saver */, AFA5605C09936E2100F3E977 /* AntInspect.saver */, AFA5607409936F3800F3E977 /* AntSpotlight.saver */, AFA560C00993718D00F3E977 /* Polytopes.saver */, AFA5610F0993781600F3E977 /* Molecule.saver */, AFA5616A09937C0D00F3E977 /* BlinkBox.saver */, AFA5618D09937CF100F3E977 /* Noof.saver */, AFA561AF09937D7E00F3E977 /* Polyhedra.saver */, AFA562190993849F00F3E977 /* Providence.saver */, AFA562310993852500F3E977 /* Pinion.saver */, AFA562D1099392C600F3E977 /* Boing.saver */, AFA562EC099393C900F3E977 /* AntMaze.saver */, AFA563040993943B00F3E977 /* Tangram.saver */, AFA563260993951000F3E977 /* Crackberg.saver */, AFA56343099395ED00F3E977 /* GLHanoi.saver */, AFA56363099396C000F3E977 /* Cube21.saver */, AFA5638B099397B300F3E977 /* TimeTunnel.saver */, AFA563B6099398BB00F3E977 /* Juggler3D.saver */, AFD56E040996A03800BA26F7 /* GLText.saver */, AFD56EBE0996A72600BA26F7 /* Braid.saver */, AFD56EEA0996A95700BA26F7 /* Forest.saver */, AFD56F1B0996AAFA00BA26F7 /* Vines.saver */, AFD56F330996AB8A00BA26F7 /* Galaxy.saver */, AFD56F5F0996AEEE00BA26F7 /* Grav.saver */, AFD56F7B0996B01600BA26F7 /* Hopalong.saver */, AFD56F9C0996B09400BA26F7 /* Laser.saver */, AFD56FB30996B10F00BA26F7 /* Lightning.saver */, AFD56FC90996B18F00BA26F7 /* Lisa.saver */, AFD56FDF0996B20900BA26F7 /* Lissie.saver */, AFD570080996B43800BA26F7 /* Penrose.saver */, AFD5701F0996B4CC00BA26F7 /* Sierpinski.saver */, AFD570360996B56D00BA26F7 /* Sphere.saver */, AFD570530996B61600BA26F7 /* Spiral.saver */, AFD570690996B6A300BA26F7 /* FadePlot.saver */, AFD5707F0996B72800BA26F7 /* Mountain.saver */, AFD570950996B80300BA26F7 /* Triangle.saver */, AFD570AB0996B88E00BA26F7 /* Worm.saver */, AFD570C10996B93000BA26F7 /* Rotor.saver */, AFD570D90996B9F800BA26F7 /* Ant.saver */, AFD570FA0996BBBF00BA26F7 /* Flow.saver */, AFD571230996BE9300BA26F7 /* Discrete.saver */, AFD5713C0996BF2E00BA26F7 /* Apollonian.saver */, AFD571530996C01700BA26F7 /* Euler2D.saver */, AFD571690996C0CE00BA26F7 /* Thornbird.saver */, AFD571C50996D9DC00BA26F7 /* Juggle.saver */, AFD572320996E4A300BA26F7 /* Swirl.saver */, AFD5727D0996EE8500BA26F7 /* Polyominoes.saver */, AFD572B50996F99600BA26F7 /* Bouboule.saver */, AFD572D20996FC0F00BA26F7 /* Crystal.saver */, AFD57309099701C000BA26F7 /* Julia.saver */, AFD5736D0997411200BA26F7 /* Strange.saver */, AF794F74099748450059A8B0 /* Demon.saver */, AF794F9E09974A320059A8B0 /* Fiberlamp.saver */, AF794FDD09974FA60059A8B0 /* Loop.saver */, AF97573D099C317000B05160 /* IMSMap.saver */, AF975785099C374A00B05160 /* Moire.saver */, AF9757D2099C3E6300B05160 /* RDbomb.saver */, AF975818099C41D500B05160 /* XFlame.saver */, AF975875099C475900B05160 /* ShadeBobs.saver */, AF975A46099C681F00B05160 /* MetaBalls.saver */, AF975A7C099C6AB200B05160 /* Eruption.saver */, AF975A96099C6BC300B05160 /* Barcode.saver */, AF975AE7099C6EB100B05160 /* Fireworkx.saver */, AF975B0C099C6FE400B05160 /* MemScroller.saver */, AF975C22099C8C1500B05160 /* Halo.saver */, AF975C4E099C8DCF00B05160 /* Greynetic.saver */, AF975C6E099C8F3F00B05160 /* NoseGuy.saver */, AF975D63099CA0F000B05160 /* Rocks.saver */, AF476FC6099D154F001F091E /* Interference.saver */, AF476FEB099D1686001F091E /* Truchet.saver */, AF47705C099D4385001F091E /* Deluxe.saver */, AF477179099D4786001F091E /* Compass.saver */, AF47718F099D4803001F091E /* Wander.saver */, AF4771B7099D4949001F091E /* T3D.saver */, AF4771EB099D4D9A001F091E /* CCurve.saver */, AF477202099D4E64001F091E /* NerveRot.saver */, AF477218099D4EE8001F091E /* Whirlygig.saver */, AF47722E099D4F67001F091E /* Anemone.saver */, AF477263099D5717001F091E /* Halftone.saver */, AF47727B099D57B9001F091E /* PopSquares.saver */, AF477293099D5926001F091E /* Piecewise.saver */, AF477392099D65A1001F091E /* Wormhole.saver */, AF4773AA099D6648001F091E /* FuzzyFlakes.saver */, AF4773D1099D67B9001F091E /* Anemotaxis.saver */, AF477412099D69E7001F091E /* Intermomentary.saver */, AF477437099D7C70001F091E /* IFS.saver */, AF477452099D7D33001F091E /* XMatrix.saver */, AF477493099D89E4001F091E /* Flame.saver */, AF4774A9099D8A74001F091E /* Kaleidescope.saver */, AF4774C4099D8B5F001F091E /* LMorph.saver */, AF4774DE099D8BFF001F091E /* Maze.saver */, AF47756D099D9A1A001F091E /* Pedal.saver */, AF477593099D9C28001F091E /* Pyro.saver */, AF4775AF099D9CF7001F091E /* Starfish.saver */, AF4775E8099D9F69001F091E /* Coral.saver */, AF477602099DA030001F091E /* Epicycle.saver */, AF477623099DA26C001F091E /* Kumppa.saver */, AF477654099DA6D0001F091E /* Squiral.saver */, AF47766A099DA78F001F091E /* Critical.saver */, AF477680099DA849001F091E /* Petri.saver */, AF47769F099DAA6F001F091E /* Blaster.saver */, AF4776BA099DABDD001F091E /* XSpirograph.saver */, AF4776D0099DAC8A001F091E /* XRaySwarm.saver */, AF4776EB099DADDF001F091E /* WhirlWindWarp.saver */, AF477701099DAE7A001F091E /* Vermiculate.saver */, AF47771D099DAF9F001F091E /* CloudLife.saver */, AF477733099DB044001F091E /* Substrate.saver */, AF477762099DB61E001F091E /* Interaggregate.saver */, AF477784099DB965001F091E /* Celtic.saver */, AF4777A0099DBA90001F091E /* FluidBalls.saver */, AF4777E1099DC183001F091E /* BoxFit.saver */, AF4778BB099DDB79001F091E /* Penetrate.saver */, AF4778D7099DDCAE001F091E /* XJack.saver */, AF4778F8099DDDC8001F091E /* Cynosure.saver */, AF477919099DE379001F091E /* Flag.saver */, AF47793A099DE4C7001F091E /* Slip.saver */, AF642405099FF9C2000F4CD4 /* Extrusion.saver */, AF6425DC09A18856000F4CD4 /* HyperCube.saver */, AF6425FC09A189EC000F4CD4 /* Qix.saver */, AF64261F09A18D6C000F4CD4 /* HyperBall.saver */, AF64263C09A18F54000F4CD4 /* Moire2.saver */, AF64265F09A19229000F4CD4 /* Munch.saver */, AF64268B09A194B0000F4CD4 /* Goop.saver */, AF64278109A1D37A000F4CD4 /* SpeedMine.saver */, AF6427B809A2DE36000F4CD4 /* Bubbles.saver */, AF9D467609B5109C006E59CF /* DecayScreen.saver */, AF9D475409B5300A006E59CF /* SlideScreen.saver */, AF9D476F09B53166006E59CF /* Zoom.saver */, AF9D48EB09B53322006E59CF /* Bumps.saver */, AF9D490409B535DA006E59CF /* Distort.saver */, AF9D493B09B53CBA006E59CF /* Ripples.saver */, AF9D496409B53FC9006E59CF /* RotZoomer.saver */, AF9D497C09B5411D006E59CF /* Twang.saver */, AF9D49A709B544C3006E59CF /* Spotlight.saver */, AF9D4C7909B59F27006E59CF /* XLyap.saver */, AF9D4CF709B5AA8E006E59CF /* Pong.saver */, AF9D4D8F09B5B2DC006E59CF /* XAnalogTV.saver */, AF9D4DC009B5B71E006E59CF /* BSOD.saver */, AF9D4DFE09B5BB19006E59CF /* Apple2.saver */, AF7776F609B63ABF00EA3033 /* Phosphor.saver */, AF77772A09B6416100EA3033 /* Pacman.saver */, AF77775109B6446500EA3033 /* FlipScreen3D.saver */, AF7777A209B64A5200EA3033 /* MirrorBlob.saver */, AF7777E409B64C6B00EA3033 /* GLSlideshow.saver */, AF7777FE09B64E3100EA3033 /* FlipText.saver */, AF77785809B6528100EA3033 /* Carousel.saver */, AF77787409B6536000EA3033 /* DNAlogo.saver */, AF7778B509B659C800EA3033 /* BlitSpin.saver */, AF34085409B80AAF00F2CEC1 /* StarWars.saver */, AF34085509B80AB000F2CEC1 /* StonerView.saver */, AF34085609B80AB000F2CEC1 /* Gleidescope.saver */, AF34085709B80AB000F2CEC1 /* FontGlide.saver */, AF998EEE0A083DB30051049D /* TopBlock.saver */, AF48DF030A0C25E000F94CF9 /* GLSchool.saver */, AFA339400B058505002B0E7D /* WebCollage.saver */, AFA33BC70B058740002B0E7D /* webcollage-helper */, AFF463470C4403E400EE6509 /* CWaves.saver */, AFF4636C0C440AEF00EE6509 /* GLCells.saver */, AF0DC7BD0C4C73F600D76972 /* m6502.saver */, AF0DCA560C4CBB0D00D76972 /* Voronoi.saver */, AFE6A1970CDD7B2E002805BF /* MoebiusGears.saver */, AFE6A42D0CDD7FAA002805BF /* Abstractile.saver */, AF4FD6FA0CE7A486005EE58E /* Lockward.saver */, AF4FF4CE0D52CBDE00666F98 /* CubicGrid.saver */, AF3C71590D624BF50030CC0D /* Hypnowheel.saver */, AF1A17730D6D6EE3008AF328 /* LCDscrub.saver */, AFE2A46A0E2E904600ADB298 /* SkyTentacles.saver */, AFE30BFC0E52B14700CCF4A5 /* Sonar.saver */, AF35E8A00E63823600691F2F /* Jigsaw.saver */, AFD51B300F063B4A00471C02 /* Photopile.saver */, AF32D9F40F3AD0B40080F535 /* RubikBlocks.saver */, AF4A345D102A593600A81B2A /* Surfaces.saver */, AF78D189142DD8F3002AAF77 /* Hilbert.saver */, AF3581D51431D47B00E09C51 /* CompanionCube.saver */, AF358216143330F900E09C51 /* TronBit.saver */, AF91898F158FC00A002B5D1E /* XScreenSaver.app */, AF7511121782B5B900380EA1 /* Kaleidocycle.saver */, AFF2869217860E830050A578 /* QuasiCrystal.saver */, AFBFE75E178642DC00432B21 /* Apple2.app */, AFBFE77E178647FE00432B21 /* Phosphor.app */, AFDA65A1178A52B70070D24B /* UnknownPleasures.saver */, AFB591BA178B812C00EA4005 /* Hexadrop.saver */, AFF3C9FB17CCAC440028F240 /* Geodesic.saver */, AF1AD9E218500F9F00932759 /* XScreenSaverUpdater.app */, AF9E7EBF190F4C1B00A8B01F /* enable_gc */, AFFAB32919158CE40020F021 /* ProjectivePlane.saver */, AF68A49219196CF800D41CD1 /* Tessellimage.saver */, AF39E296198A11F60064A58D /* WindupRobot.saver */, AF7ACFD419FF0A9200BD752B /* GeodesicGears.saver */, AF73FF361A09877F00E485E9 /* BinaryRing.saver */, AF5C9B0D1A0CCE6E00B0147A /* Cityflow.saver */, AF63A8061AB4EDDB00593C75 /* RomanBoy.saver */, AFCF83501AF5B515008BB7E1 /* SplitFlap.saver */, CE3D01661B76F4C100993C75 /* TestX11.saver */, AF63F44E1C3465BE0033E133 /* Apple2.app */, AF63F4741C34682A0033E133 /* Phosphor.app */, AF63F49A1C3469FC0033E133 /* TestX11.app */, AFEC23E21CB6EAE100DE138F /* DymaxionMap.saver */, AF46E9E41CBBA2B300240FBC /* Unicrud.saver */, AFACE8881CC83458008B24CD /* EnergyStream.saver */, AFA211A11CD59DAF00C0D2A1 /* RaverHoop.saver */, AFC0E8C01CDC601A008CAFAC /* Hydrostat.saver */, AF39382F1D0FBD6A00205406 /* Discoball.saver */, AFEE10621D13406000AAC8F7 /* CubeTwist.saver */, AFEE10811D15EB0800AAC8F7 /* CubeStack.saver */, AFEE10A01D17E20B00AAC8F7 /* Splodesic.saver */, AF1B0FBC1D7AB4740011DBE4 /* Hexstrut.saver */, ); name = Products; path = ..; sourceTree = ""; }; 29B97314FDCFA39411CA2CEA /* xscreensaver */ = { isa = PBXGroup; children = ( AF480AB9098C66E200FB32B8 /* SaverRunner */, 080E96DDFE201D6D7F000001 /* libjwxyz */, AF1AD9E818500FA000932759 /* Updater */, AFE1FD520981E35400F7970E /* Utils */, AFE1FD610981E3E700F7970E /* Hacks */, AFC258670988A468000655EE /* config */, 29B97317FDCFA39411CA2CEA /* Resources */, 29B97323FDCFA39411CA2CEA /* Frameworks */, 19C28FACFE9D520D11CA2CBB /* Products */, ); name = xscreensaver; sourceTree = ""; }; 29B97317FDCFA39411CA2CEA /* Resources */ = { isa = PBXGroup; children = ( 089C165CFE840E0CC02AAC07 /* InfoPlist.strings */, AF14EE300E3CEF1A004CBBD2 /* XScreenSaver.icns */, AF9772E10989DFC6001F8B92 /* SaverRunner.nib */, AF56019B157DAA3D00DB2055 /* iSaverRunner.xib */, 55EDCB3C1AD498A800251909 /* LaunchScreen.xib */, 550FB5FD1AD64424001A4FA5 /* Media-iOS.xcassets */, AF2D522513E954A0002AA818 /* SaverRunner.icns */, AF73FF201A08AB9400E485E9 /* iSaverRunner57t.png */, AF9771D90989DC4A001F8B92 /* SaverRunner.plist */, AF01294C157D31DD00C396E1 /* iSaverRunner.plist */, AF94E7411A16E93600289B93 /* xscreensaver.xcconfig */, 8D1107310486CEB800E47090 /* XScreenSaver.plist */, AF0FAF1209CA712600EE1051 /* xscreensaver-getimage-file */, AF0FAF0B09CA6FF900EE1051 /* xscreensaver-text */, AFEC68361BD6CA85004C1B64 /* OCRAStd.otf */, AFEC68381BD6CDF9004C1B64 /* YearlReg.ttf */, AFC43E731C68364B00C89999 /* PxPlus_IBM_VGA8.ttf */, ); name = Resources; sourceTree = ""; }; 29B97323FDCFA39411CA2CEA /* Frameworks */ = { isa = PBXGroup; children = ( AF1ADA171850180E00932759 /* Sparkle.framework */, AF78377C17DBA85D003B9FC0 /* libz.dylib */, AF78369617DB9F25003B9FC0 /* libz.dylib */, AFEB9C3E1590056A003974F3 /* CoreGraphics.framework */, AFEB9C3F1590056A003974F3 /* QuartzCore.framework */, AF1AD9E718500FA000932759 /* Foundation.framework */, AFEB9C3C15900558003974F3 /* Foundation.framework */, AFEB9C3A1590054B003974F3 /* OpenGLES.framework */, AFEB9C3815900514003974F3 /* UIKit.framework */, AF1AD9E618500FA000932759 /* CoreData.framework */, AF1AD9E518500F9F00932759 /* AppKit.framework */, AF0F46DC104E1809000A929C /* AppKit.framework */, AF976ED30989BF59001F8B92 /* ScreenSaver.framework */, AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */, AF561DF715969C5B007CA5ED /* AssetsLibrary.framework */, AF561DF3159651A7007CA5ED /* AudioToolbox.framework */, AF0FAF3B159BAC7B00BCE2F7 /* CoreText.framework */, 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */, AF480DF1098F528500FB32B8 /* OpenGL.framework */, CEE0BC611A6B0D6200C098BF /* OpenGL.framework */, AF480FE70990375900FB32B8 /* AGL.framework */, AF84FD4109B1209E00F3AB06 /* GLUT.framework */, AF48112B0990A2C700FB32B8 /* Carbon.framework */, AF1ADA0118500FA100932759 /* XCTest.framework */, ); name = Frameworks; sourceTree = ""; }; AF1AD9E818500FA000932759 /* Updater */ = { isa = PBXGroup; children = ( AF3633F918530DD90086A439 /* sparkle_dsa_pub.pem */, AF3633FA18530DD90086A439 /* Updater.h */, AF3633FB18530DD90086A439 /* Updater.m */, AF3633FE18530DFF0086A439 /* Updater.plist */, AF1ADA151850157400932759 /* Updater.xib */, ); name = Updater; sourceTree = ""; }; AF480AB9098C66E200FB32B8 /* SaverRunner */ = { isa = PBXGroup; children = ( 29B97316FDCFA39411CA2CEA /* main.m */, CEAF85661ABE4A70008F104C /* SaverListController.h */, AF84AF1E15829AF000607E4C /* SaverListController.m */, AFE1FD3F0981E32E00F7970E /* SaverRunner.h */, AFE1FD400981E32E00F7970E /* SaverRunner.m */, AFAA6B441773F07700DE720C /* ios-function-table.m */, ); name = SaverRunner; sourceTree = ""; }; AF480DC7098F4EB500FB32B8 /* XScreenSaver */ = { isa = PBXGroup; children = ( AFE6A4340CDD800F002805BF /* abstractile.c */, AF9D4CFA09B5AC94006E59CF /* analogtv.c */, AF9D4CFB09B5AC94006E59CF /* analogtv.h */, AF477231099D4FD5001F091E /* anemone.c */, AF4773D4099D6817001F091E /* anemotaxis.c */, AF9D4E0509B5BC9D006E59CF /* apple2-main.c */, AF9D4DD309B5B990006E59CF /* apple2.c */, AF0DCA320C4C74A200D76972 /* asm6502.c */, AF0DCA330C4C74A200D76972 /* asm6502.h */, AF976DFA09896BEB001F8B92 /* attraction.c */, AF975A99099C6C3500B05160 /* barcode.c */, AF73FF381A09889700E485E9 /* binaryring.c */, AF4776A2099DAADE001F091E /* blaster.c */, AF7778BA09B65A8A00EA3033 /* blitspin.c */, AF4778A3099DDA91001F091E /* boxfit.c */, AF9D4DC309B5B87D006E59CF /* bsod.c */, AF6427BB09A2DF47000F4CD4 /* bubbles-default.c */, AF6427BC09A2DF47000F4CD4 /* bubbles.c */, AF6427BD09A2DF47000F4CD4 /* bubbles.h */, AF9D48EE09B533AE006E59CF /* bumps.c */, AF4771EF099D4DFE001F091E /* ccurve.c */, AF477787099DBA29001F091E /* celtic.c */, AF477720099DB01C001F091E /* cloudlife.c */, AF47717C099D47D3001F091E /* compass.c */, AF4775EF099D9FFF001F091E /* coral.c */, AF47766D099DA80D001F091E /* critical.c */, AFF463490C44044E00EE6509 /* cwaves.c */, AF4778FB099DDE79001F091E /* cynosure.c */, AF9D467809B5110B006E59CF /* decayscreen.c */, AFC25B5E0988BA63000655EE /* deco.c */, AF68A49619196E3E00D41CD1 /* delaunay.c */, AF477145099D43E2001F091E /* deluxe.c */, AF9D490709B536F7006E59CF /* distort.c */, AF477605099DA097001F091E /* epicycle.c */, AF975A83099C6B4900B05160 /* eruption.c */, AF975AEE099C6F1700B05160 /* fireworkx.c */, AF477496099D8A53001F091E /* flame.c */, AF4777A4099DBB11001F091E /* fluidballs.c */, AF77789209B656C300EA3033 /* fontglide.c */, AFBF893C0E41D930006A2D66 /* fps.c */, AFBF893D0E41D930006A2D66 /* fps.h */, AFBF89B10E424036006A2D66 /* fpsI.h */, AF4773B4099D6778001F091E /* fuzzyflakes.c */, AF64268E09A19542000F4CD4 /* goop.c */, AF480C21098E28EF00FB32B8 /* greynetic.c */, AF477266099D5768001F091E /* halftone.c */, AF480C29098E295D00FB32B8 /* halo.c */, AF480C2F098E2A6700FB32B8 /* helix.c */, AFB591BD178B81E600EA4005 /* hexadrop.c */, AF64262209A18E1E000F4CD4 /* hyperball.c */, AF6425DF09A188FB000F4CD4 /* hypercube.c */, AF47743A099D7CEA001F091E /* ifs.c */, AF975740099C31DD00B05160 /* imsmap.c */, AF477769099DB710001F091E /* interaggregate.c */, AF476FD0099D15AA001F091E /* interference.c */, AF47741C099D6A6C001F091E /* intermomentary.c */, AF4774AC099D8B08001F091E /* kaleidescope.c */, AF47762A099DA2E9001F091E /* kumppa.c */, AF1A177E0D6D6F3E008AF328 /* lcdscrub.c */, AF4774CB099D8BC2001F091E /* lmorph.c */, AF0DCA340C4C74A200D76972 /* m6502.c */, AF4774E1099D8C8B001F091E /* maze.c */, AF975B14099C709E00B05160 /* memscroller.c */, AF975A49099C689F00B05160 /* metaballs.c */, AF975789099C37A500B05160 /* moire.c */, AF64263F09A18FEB000F4CD4 /* moire2.c */, AF64266209A192C5000F4CD4 /* munch.c */, AF477205099D4EB6001F091E /* nerverot.c */, AF975C76099C8FC700B05160 /* noseguy.c */, AF477570099D9A8A001F091E /* pedal.c */, AF4778BE099DDC32001F091E /* penetrate.c */, AF477683099DA8C7001F091E /* petri.c */, AF77770309B63B5F00EA3033 /* phosphor.c */, AF477297099D5980001F091E /* piecewise.c */, AF9D4CFC09B5AC94006E59CF /* pong.c */, AF47727E099D5808001F091E /* popsquares.c */, AF47759C099D9CA3001F091E /* pyro.c */, AF6425FF09A18A94000F4CD4 /* qix.c */, AF9757D5099C3EB800B05160 /* rd-bomb.c */, AF9D493E09B53D55006E59CF /* ripples.c */, AF975D66099CA16A00B05160 /* rocks.c */, AFE1FD620981E40800F7970E /* rorschach.c */, AF9D496709B540A4006E59CF /* rotzoomer.c */, AF97587A099C492000B05160 /* shadebobs.c */, AF9D475809B53091006E59CF /* slidescreen.c */, AF64278709A1D433000F4CD4 /* speedmine.c */, AF9D49AA09B54596006E59CF /* spotlight.c */, AF477657099DA75D001F091E /* squiral.c */, AF4775B3099D9D67001F091E /* starfish.c */, AF477736099DB104001F091E /* substrate.c */, AF4771BA099D4997001F091E /* t3d.c */, AF68A49519196E3E00D41CD1 /* tessellimage.c */, CE3D016A1B76F8E200993C75 /* testx11.c */, AF35821B1433314C00E09C51 /* tronbit.c */, AF3582171433314C00E09C51 /* tronbit_idle1.c */, AF3582181433314C00E09C51 /* tronbit_idle2.c */, AF3582191433314C00E09C51 /* tronbit_no.c */, AF35821A1433314C00E09C51 /* tronbit_yes.c */, AF476FF0099D1713001F091E /* truchet.c */, AF9D497F09B541E5006E59CF /* twang.c */, AF477704099DAF3F001F091E /* vermiculate.c */, AF477192099D4864001F091E /* wander.c */, AFA33C0A0B058E6B002B0E7D /* webcollage */, AFA33BAE0B0585F7002B0E7D /* webcollage-cocoa.m */, AF4776EE099DAE58001F091E /* whirlwindwarp.c */, AF47721B099D4F47001F091E /* whirlygig.c */, AF477395099D65FE001F091E /* wormhole.c */, AF9D4D9209B5B444006E59CF /* xanalogtv.c */, AF97582F099C427500B05160 /* xflame.c */, AF4778DA099DDD2B001F091E /* xjack.c */, AF9D4C7C09B5A044006E59CF /* xlyap.c */, AF477455099D7D8A001F091E /* xmatrix.c */, AF4776D3099DACEB001F091E /* xrayswarm.c */, AF4776BD099DAC46001F091E /* xspirograph.c */, AF9D48D409B53229006E59CF /* zoom.c */, ); name = XScreenSaver; sourceTree = ""; }; AF480DCF098F4F0600FB32B8 /* Xlockmore */ = { isa = PBXGroup; children = ( AFD570DE0996BA5C00BA26F7 /* ant.c */, AFD5713F0996BFBE00BA26F7 /* apollonian.c */, AF7778BC09B65B1800EA3033 /* automata.h */, AFD572B90996FB3D00BA26F7 /* bouboule.c */, AFD56EC10996A76F00BA26F7 /* braid.c */, AFD572ED0997006E00BA26F7 /* crystal.c */, AF794F7E099748860059A8B0 /* demon.c */, AFD571280996BEF700BA26F7 /* discrete.c */, AF480C82098E336D00FB32B8 /* drift.c */, AFD571560996C07F00BA26F7 /* euler2d.c */, AFD5706C0996B70000BA26F7 /* fadeplot.c */, AF794FA909974AE30059A8B0 /* fiberlamp.c */, AF47791C099DE3F1001F091E /* flag.c */, AFD571010996BC3800BA26F7 /* flow.c */, AFD56EED0996A99E00BA26F7 /* forest.c */, AFD56F360996ABD200BA26F7 /* galaxy.c */, AFD56F620996AF2D00BA26F7 /* grav.c */, AFD56F880996B06600BA26F7 /* hopalong.c */, AFD571C80996DA4600BA26F7 /* juggle.c */, AFD5730C099702C800BA26F7 /* julia.c */, AFD56FA00996B0E500BA26F7 /* laser.c */, AFD56FB60996B16300BA26F7 /* lightning.c */, AFD56FCC0996B1D600BA26F7 /* lisa.c */, AFD56FE20996B26200BA26F7 /* lissie.c */, AF794FE009974FEC0059A8B0 /* loop.c */, AFD570820996B79300BA26F7 /* mountain.c */, AF795015099751940059A8B0 /* pacman.c */, AF795016099751940059A8B0 /* pacman.h */, AF795011099751940059A8B0 /* pacman_ai.c */, AF795012099751940059A8B0 /* pacman_ai.h */, AF795013099751940059A8B0 /* pacman_level.c */, AF795014099751940059A8B0 /* pacman_level.h */, AFD5700C0996B49D00BA26F7 /* penrose.c */, AFD572800996EF2B00BA26F7 /* polyominoes.c */, AFD570C40996B98500BA26F7 /* rotor.c */, AFD570220996B52700BA26F7 /* sierpinski.c */, AF47793D099DE56A001F091E /* slip.c */, AFD5703B0996B5E300BA26F7 /* sphere.c */, AFD570560996B67600BA26F7 /* spiral.c */, AFD57371099741A200BA26F7 /* strange.c */, AFD572350996E53E00BA26F7 /* swirl.c */, AFD5716B0996C16700BA26F7 /* thornbird.c */, AFD570980996B86200BA26F7 /* triangle.c */, AFD56F1F0996AB5A00BA26F7 /* vines.c */, AFD570AE0996B8EF00BA26F7 /* worm.c */, ); name = Xlockmore; sourceTree = ""; }; AF480DD0098F4F2000FB32B8 /* OpenGL */ = { isa = PBXGroup; children = ( AFA5605F09936E9C00F3E977 /* antinspect.c */, AFA562EF0993941600F3E977 /* antmaze.c */, AFA5607709936FDD00F3E977 /* ants.h */, AFA5607809936FDD00F3E977 /* antspotlight.c */, AF0839A909930C4900277BE9 /* atlantis.c */, AF7778BD09B65B3F00EA3033 /* atlantis.h */, AF083A31099311CE00277BE9 /* atunnel.c */, AFA55AF409933DBF00F3E977 /* b_draw.c */, AFA55AF509933DBF00F3E977 /* b_lockglue.c */, AFA55AF609933DBF00F3E977 /* b_sphere.c */, AFA5616D09937C9A00F3E977 /* blinkbox.c */, AFA5602909936D0700F3E977 /* blocktube.c */, AFA562D40993930C00F3E977 /* boing.c */, AFA55EE70993613E00F3E977 /* bouncingcow.c */, AFA55CBE09934C0900F3E977 /* boxed.c */, AFA55CBF09934C0900F3E977 /* boxed.h */, AFA55AE409933D3800F3E977 /* bubble3d.c */, AFA55AE809933D5900F3E977 /* bubble3d.h */, AF4812760990CF5D00FB32B8 /* buildlwo.c */, AF4812770990CF5D00FB32B8 /* buildlwo.h */, AFA5595D0993310500F3E977 /* cage.c */, AF77785E09B6530E00EA3033 /* carousel.c */, AFA55E2209935F2B00F3E977 /* chessgames.h */, AFA55E2309935F2B00F3E977 /* chessmodels.c */, AFA55E2409935F2B00F3E977 /* chessmodels.h */, AFA55BC00993416E00F3E977 /* circuit.c */, AF5C9B101A0CCF4E00B0147A /* cityflow.c */, AF3581D91431D5FC00E09C51 /* companion.c */, AF3581D61431D5FC00E09C51 /* companion_disc.c */, AF3581D71431D5FC00E09C51 /* companion_heart.c */, AF3581D81431D5FC00E09C51 /* companion_quad.c */, AFA55EE80993613E00F3E977 /* cow_face.c */, AFA55EE90993613E00F3E977 /* cow_hide.c */, AFA55EEA0993613E00F3E977 /* cow_hoofs.c */, AFA55EEB0993613E00F3E977 /* cow_horns.c */, AFA55EEC0993613E00F3E977 /* cow_tail.c */, AFA55EED0993613E00F3E977 /* cow_udder.c */, AFA563290993957100F3E977 /* crackberg.c */, AFA563660993970F00F3E977 /* cube21.c */, AFA55D770993589300F3E977 /* cubenetic.c */, AFEE10831D15EBA600AAC8F7 /* cubestack.c */, AFA55FF309936C4500F3E977 /* cubestorm.c */, AFEE10641D1341E300AAC8F7 /* cubetwist.c */, AF4FF4D00D52CC8400666F98 /* cubicgrid.c */, AF480DD1098F4F6200FB32B8 /* dangerball.c */, AF3938311D0FBEC800205406 /* discoball.c */, AF77787609B653DC00EA3033 /* dnalogo.c */, AF0839AA09930C4900277BE9 /* dolphin.c */, AF241F81107C38DF00046A84 /* dropshadow.c */, AF241F82107C38DF00046A84 /* dropshadow.h */, AFEC23E41CB6EBC400DE138F /* dymaxionmap.c */, AF7778C109B65C6A00EA3033 /* e_textures.h */, AFA55E2509935F2B00F3E977 /* endgame.c */, AFACE88A1CC83578008B24CD /* energystream.c */, AFA55C230993435300F3E977 /* engine.c */, AF642409099FFAF0000F4CD4 /* extrusion-helix2.c */, AF64240A099FFAF0000F4CD4 /* extrusion-helix3.c */, AF64240B099FFAF0000F4CD4 /* extrusion-helix4.c */, AF64240C099FFAF0000F4CD4 /* extrusion-joinoffset.c */, AF64240D099FFAF0000F4CD4 /* extrusion-screw.c */, AF64240E099FFAF0000F4CD4 /* extrusion-taper.c */, AF64240F099FFAF1000F4CD4 /* extrusion-twistoid.c */, AF642410099FFAF1000F4CD4 /* extrusion.c */, AF642411099FFAF1000F4CD4 /* extrusion.h */, AFA5604709936DCC00F3E977 /* flipflop.c */, AF77775409B644FF00EA3033 /* flipscreen3d.c */, AF77780109B64EC000EA3033 /* fliptext.c */, AFA55E980993608800F3E977 /* flyingtoasters.c */, AFBF89AE0E423FC3006A2D66 /* fps-gl.c */, AF4812250990CB8C00FB32B8 /* gears.c */, AFF3CA0217CCAEB70028F240 /* geodesic.c */, AF7ACFD619FF0B7A00BD752B /* geodesicgears.c */, AFA55BA60993401A00F3E977 /* gflux.c */, AFA55E4509935FD300F3E977 /* glblur.c */, AFF463710C440B9200EE6509 /* glcells.c */, AF77778B09B64A2A00EA3033 /* gleidescope.c */, AFA55CE109934D2E00F3E977 /* glforestfire.c */, AFA563460993963400F3E977 /* glhanoi.c */, AFA5600E09936CB300F3E977 /* glknots.c */, AFA55F870993648500F3E977 /* glmatrix.c */, AFA55B2109933E4A00F3E977 /* glplanet.c */, AF48E1660A0C268500F94CF9 /* glschool.c */, AF48E1670A0C268500F94CF9 /* glschool.h */, AF48E1620A0C268400F94CF9 /* glschool_alg.c */, AF48E1630A0C268500F94CF9 /* glschool_alg.h */, AF48E1640A0C268500F94CF9 /* glschool_gl.c */, AF48E1650A0C268500F94CF9 /* glschool_gl.h */, AF7777E709B64CF700EA3033 /* glslideshow.c */, AFA55C8C099349EE00F3E977 /* glsnake.c */, AFD56E080996A07A00BA26F7 /* gltext.c */, AF1B0FBE1D7AB5210011DBE4 /* hexstrut.c */, AF78D18A142DD96E002AAF77 /* hilbert.c */, AFC0E8C21CDC60A9008CAFAC /* hydrostat.c */, AFA55F59099362DF00F3E977 /* hypertorus.c */, AF3C715D0D624C600030CC0D /* hypnowheel.c */, AFE6A16A0CDD78EA002805BF /* involute.c */, AFE6A16B0CDD78EA002805BF /* involute.h */, AF35EB250E6382BA00691F2F /* jigsaw.c */, AFA55F210993620200F3E977 /* jigglypuff.c */, AFA563B90993991300F3E977 /* juggler3d.c */, AF7511141782B64300380EA1 /* kaleidocycle.c */, AFA55F3F0993626E00F3E977 /* klein.c */, AFA55A8E0993369100F3E977 /* lament.c */, AFF1BA0E19A96D8B0016A88D /* lament_model.c */, AFA55DDD09935DB600F3E977 /* lavalite.c */, AF4FD7000CE7A577005EE58E /* lockward.c */, AFA55DE109935DFB00F3E977 /* marching.c */, AFA55DE209935DFB00F3E977 /* marching.h */, AFA55BF9099342D500F3E977 /* menger.c */, AF7777A509B64AFC00EA3033 /* mirrorblob.c */, AFA55982099331C300F3E977 /* moebius.c */, AFE6A40B0CDD7BC3002805BF /* moebiusgears.c */, AFA561120993786800F3E977 /* molecule.c */, AF7778BE09B65BA300EA3033 /* molecules.sh */, AFA559CC099332E800F3E977 /* morph3d.c */, AFA5619009937D3600F3E977 /* noof.c */, AFD51DB60F063BCE00471C02 /* photopile.c */, AFA562340993856A00F3E977 /* pinion.c */, AF4812780990CF5D00FB32B8 /* pipeobjs.c */, AF4812790990CF5D00FB32B8 /* pipes.c */, AFA561B209937DCB00F3E977 /* polyhedra-gl.c */, AFA561B309937DCC00F3E977 /* polyhedra.c */, AFA561B409937DCC00F3E977 /* polyhedra.h */, AFA560C3099371D500F3E977 /* polytopes.c */, AFFAB33119158EA80020F021 /* projectiveplane.c */, AFA5621C099384F600F3E977 /* providence.c */, AFA55B3F09933EC600F3E977 /* pulsar.c */, AFF28695178611720050A578 /* quasicrystal.c */, AFA55E0609935EB800F3E977 /* queens.c */, AFA211A31CD59FD800C0D2A1 /* raverhoop.c */, AFBE743F19A7C6930018AA35 /* robot.c */, AF39E2A0198A13F50064A58D /* robot-wireframe.c */, AF63A8091AB4EF5D00593C75 /* romanboy.c */, AFA559EA0993335C00F3E977 /* rubik.c */, AF32D9FA0F3AD1200080F535 /* rubikblocks.c */, AFA55A400993351F00F3E977 /* s1_1.c */, AFA55A410993351F00F3E977 /* s1_2.c */, AFA55A420993351F00F3E977 /* s1_3.c */, AFA55A430993351F00F3E977 /* s1_4.c */, AFA55A440993351F00F3E977 /* s1_5.c */, AFA55A450993351F00F3E977 /* s1_6.c */, AFA55A460993351F00F3E977 /* s1_b.c */, AFA55D510993569C00F3E977 /* sballs.c */, AF0839AB09930C4900277BE9 /* shark.c */, AFA55B8E09933FBF00F3E977 /* sierpinski3d.c */, AFE2A4720E2E90E300ADB298 /* skytentacles.c */, AFE30BFF0E52B1DC00CCF4A5 /* sonar-icmp.c */, AFE30C000E52B1DC00CCF4A5 /* sonar-sim.c */, AFE30C010E52B1DC00CCF4A5 /* sonar.c */, AFA55D940993590F00F3E977 /* spheremonics.c */, AFCF83541AF5B5FD008BB7E1 /* splitflap.c */, AFCF83531AF5B5FD008BB7E1 /* splitflap_obj.c */, AFEE10A21D17E2B300AAC8F7 /* splodesic.c */, AFA55A470993351F00F3E977 /* sproingies.c */, AF7778C009B65C0F00EA3033 /* sproingies.h */, AFA55A480993351F00F3E977 /* sproingiewrap.c */, AFA55A1A0993345900F3E977 /* stairs.c */, AF77782809B650FF00EA3033 /* starwars.c */, AF77782909B650FF00EA3033 /* starwars.txt */, AF7777BF09B64BD400EA3033 /* stonerview-move.c */, AF7777C009B64BD400EA3033 /* stonerview-move.h */, AF7777C109B64BD400EA3033 /* stonerview-osc.c */, AF7777C209B64BD400EA3033 /* stonerview-osc.h */, AF7777C309B64BD400EA3033 /* stonerview-view.c */, AF7777C409B64BD400EA3033 /* stonerview.c */, AF7777C509B64BD400EA3033 /* stonerview.h */, AFA559A80993326300F3E977 /* superquadrics.c */, AF4A3463102A5A0E00A81B2A /* surfaces.c */, AF0839AC09930C4900277BE9 /* swim.c */, AFA563090993948F00F3E977 /* tangram.c */, AFA563070993948F00F3E977 /* tangram_shapes.c */, AFA563080993948F00F3E977 /* tangram_shapes.h */, AFC211930E4E30C800D87B6E /* teapot.c */, AFC211940E4E30C800D87B6E /* teapot.h */, AFA5638E0993980D00F3E977 /* timetunnel.c */, AFA55E990993608800F3E977 /* toast.c */, AFA55E9A0993608800F3E977 /* toast.dxf */, AFA55E9B0993608800F3E977 /* toast2.c */, AFA55E9C0993608800F3E977 /* toast2.dxf */, AFA55EAB0993608800F3E977 /* toaster.c */, AFA55EAC0993608800F3E977 /* toaster.dxf */, AFA55E9D0993608800F3E977 /* toaster_base.c */, AFA55E9F0993608800F3E977 /* toaster_handle.c */, AFA55EA10993608800F3E977 /* toaster_handle2.c */, AFA55EA30993608800F3E977 /* toaster_jet.c */, AFA55EA50993608800F3E977 /* toaster_knob.c */, AFA55EA70993608800F3E977 /* toaster_slots.c */, AFA55EA90993608800F3E977 /* toaster_wing.c */, AF998EF80A083E750051049D /* topblock.c */, AF083A58099312B000277BE9 /* tunnel_draw.c */, AF083A5D099312DB00277BE9 /* tunnel_draw.h */, AF46E9E71CBBA3F900240FBC /* unicrud.c */, AFDA65A4178A541A0070D24B /* unknownpleasures.c */, AF0DCA5F0C4CBB7300D76972 /* voronoi.c */, AF0839AD09930C4900277BE9 /* whale.c */, AF39E2A1198A13F50064A58D /* winduprobot.c */, ); name = OpenGL; sourceTree = ""; }; AFC258670988A468000655EE /* config */ = { isa = PBXGroup; children = ( AFE6A4360CDD8026002805BF /* abstractile.xml */, AFC258680988A468000655EE /* anemone.xml */, AFC258690988A468000655EE /* anemotaxis.xml */, AFC2586A0988A468000655EE /* ant.xml */, AFC2586B0988A468000655EE /* antinspect.xml */, AFC2586C0988A468000655EE /* antmaze.xml */, AFC2586D0988A468000655EE /* antspotlight.xml */, AFC2586E0988A468000655EE /* apollonian.xml */, AFC2586F0988A468000655EE /* apple2.xml */, AFC258700988A468000655EE /* atlantis.xml */, AFC258710988A468000655EE /* attraction.xml */, AFC258720988A468000655EE /* atunnel.xml */, AFC258730988A468000655EE /* barcode.xml */, AF73FF3B1A0988C500E485E9 /* binaryring.xml */, AFC258740988A468000655EE /* blaster.xml */, AFC258750988A468000655EE /* blinkbox.xml */, AFC258760988A468000655EE /* blitspin.xml */, AFC258770988A468000655EE /* blocktube.xml */, AFC258780988A468000655EE /* boing.xml */, AFC258790988A468000655EE /* bouboule.xml */, AFC2587A0988A468000655EE /* bouncingcow.xml */, AFC2587B0988A468000655EE /* boxed.xml */, AFC2587C0988A468000655EE /* boxfit.xml */, AFC2587D0988A468000655EE /* braid.xml */, AFC2587E0988A468000655EE /* bsod.xml */, AFC2587F0988A468000655EE /* bubble3d.xml */, AFC258800988A468000655EE /* bubbles.xml */, AFC258810988A468000655EE /* bumps.xml */, AFC258820988A468000655EE /* cage.xml */, AFC258830988A468000655EE /* carousel.xml */, AFC258840988A468000655EE /* ccurve.xml */, AFC258850988A468000655EE /* celtic.xml */, AFC258860988A468000655EE /* circuit.xml */, AF5C9B0F1A0CCF4E00B0147A /* cityflow.xml */, AFC258870988A468000655EE /* cloudlife.xml */, AF3581E61431D61D00E09C51 /* companioncube.xml */, AFC258880988A468000655EE /* compass.xml */, AFC258890988A468000655EE /* coral.xml */, AFC2588B0988A468000655EE /* crackberg.xml */, AFC2588C0988A468000655EE /* critical.xml */, AFC2588D0988A468000655EE /* crystal.xml */, AFC2588E0988A468000655EE /* cube21.xml */, AFC2588F0988A468000655EE /* cubenetic.xml */, AFEE10841D15EBA600AAC8F7 /* cubestack.xml */, AFC258900988A468000655EE /* cubestorm.xml */, AFEE10651D1341E300AAC8F7 /* cubetwist.xml */, AF4FF4D30D52CCAA00666F98 /* cubicgrid.xml */, AFF4634B0C44046500EE6509 /* cwaves.xml */, AFC258910988A468000655EE /* cynosure.xml */, AFC258920988A468000655EE /* dangerball.xml */, AFC258930988A468000655EE /* decayscreen.xml */, AFC258940988A468000655EE /* deco.xml */, AFC258950988A468000655EE /* deluxe.xml */, AFC258960988A468000655EE /* demon.xml */, AF3938321D0FBEC800205406 /* discoball.xml */, AFC258970988A468000655EE /* discrete.xml */, AFC258980988A468000655EE /* distort.xml */, AF77787909B6545E00EA3033 /* dnalogo.xml */, AFC258990988A468000655EE /* drift.xml */, AFEC23E51CB6EBDA00DE138F /* dymaxionmap.xml */, AFC2589B0988A468000655EE /* endgame.xml */, AFACE88B1CC83578008B24CD /* energystream.xml */, AFC2589C0988A468000655EE /* engine.xml */, AFC2589D0988A468000655EE /* epicycle.xml */, AFC2589E0988A468000655EE /* eruption.xml */, AFC2589F0988A468000655EE /* euler2d.xml */, AFC258A00988A468000655EE /* extrusion.xml */, AFC258A10988A468000655EE /* fadeplot.xml */, AFC258A20988A468000655EE /* fiberlamp.xml */, AFC258A40988A468000655EE /* fireworkx.xml */, AFC258A50988A468000655EE /* flag.xml */, AFC258A60988A468000655EE /* flame.xml */, AFC258A70988A468000655EE /* flipflop.xml */, AFC258A80988A468000655EE /* flipscreen3d.xml */, AFC258A90988A468000655EE /* fliptext.xml */, AFC258AA0988A468000655EE /* flow.xml */, AFC258AB0988A468000655EE /* fluidballs.xml */, AFC258AC0988A468000655EE /* flurry.xml */, AFC258AD0988A468000655EE /* flyingtoasters.xml */, AFC258AE0988A468000655EE /* fontglide.xml */, AFC258AF0988A468000655EE /* forest.xml */, AFC258B00988A468000655EE /* fuzzyflakes.xml */, AFC258B10988A468000655EE /* galaxy.xml */, AFC258B20988A468000655EE /* gears.xml */, AFF3C9FD17CCAD9A0028F240 /* geodesic.xml */, AF7ACFD819FF0BA600BD752B /* geodesicgears.xml */, AFC258B30988A468000655EE /* gflux.xml */, AFC258B40988A468000655EE /* glblur.xml */, AFF463730C440BAC00EE6509 /* glcells.xml */, AFC258B50988A468000655EE /* gleidescope.xml */, AFC258B60988A468000655EE /* glforestfire.xml */, AFC258B70988A468000655EE /* glhanoi.xml */, AFC258B80988A468000655EE /* glknots.xml */, AFC258B90988A468000655EE /* glmatrix.xml */, AFC258BA0988A468000655EE /* glplanet.xml */, AF48E16B0A0C26A400F94CF9 /* glschool.xml */, AFC258BB0988A468000655EE /* glslideshow.xml */, AFC258BC0988A468000655EE /* glsnake.xml */, AFC258BD0988A468000655EE /* gltext.xml */, AFC258BF0988A468000655EE /* goop.xml */, AFC258C00988A468000655EE /* grav.xml */, AFC258C10988A468000655EE /* greynetic.xml */, AFC258C20988A468000655EE /* halftone.xml */, AFC258C30988A468000655EE /* halo.xml */, AFC258C40988A468000655EE /* helix.xml */, AFB591BC178B81E600EA4005 /* hexadrop.xml */, AF1B0FBF1D7AB5210011DBE4 /* hexstrut.xml */, AF78D18E142DD99A002AAF77 /* hilbert.xml */, AFC258C50988A468000655EE /* hopalong.xml */, AFC258C60988A468000655EE /* hyperball.xml */, AFC0E8C31CDC60A9008CAFAC /* hydrostat.xml */, AFC258C70988A468000655EE /* hypercube.xml */, AFC258C80988A468000655EE /* hypertorus.xml */, AF3C715F0D624C7C0030CC0D /* hypnowheel.xml */, AFC258C90988A468000655EE /* ifs.xml */, AFC258CA0988A468000655EE /* imsmap.xml */, AFC258CB0988A468000655EE /* interaggregate.xml */, AFC258CC0988A468000655EE /* interference.xml */, AFC258CD0988A468000655EE /* intermomentary.xml */, AFC258CE0988A468000655EE /* jigglypuff.xml */, AFC258CF0988A468000655EE /* jigsaw.xml */, AFC258D00988A468000655EE /* juggle.xml */, AFC258D10988A468000655EE /* juggler3d.xml */, AFC258D20988A468000655EE /* julia.xml */, AFC258D30988A468000655EE /* kaleidescope.xml */, AF7511161782B66400380EA1 /* kaleidescope.xml */, AFB8A69A1782BA34004EDB85 /* kaleidocycle.xml */, AFC258D40988A468000655EE /* klein.xml */, AFC258D50988A468000655EE /* kumppa.xml */, AFC258D60988A468000655EE /* lament.xml */, AFC258D70988A468000655EE /* laser.xml */, AFC258D80988A468000655EE /* lavalite.xml */, AF1A17800D6D6F62008AF328 /* lcdscrub.xml */, AFC258D90988A468000655EE /* lightning.xml */, AFC258DA0988A468000655EE /* lisa.xml */, AFC258DB0988A468000655EE /* lissie.xml */, AFC258DC0988A468000655EE /* lmorph.xml */, AF4FD7020CE7A5BC005EE58E /* lockward.xml */, AFC258DD0988A468000655EE /* loop.xml */, AF0DCA370C4C74B700D76972 /* m6502.xml */, AFC258DE0988A468000655EE /* maze.xml */, AFC258DF0988A469000655EE /* memscroller.xml */, AFC258E00988A469000655EE /* menger.xml */, AFC258E10988A469000655EE /* metaballs.xml */, AFC258E20988A469000655EE /* mirrorblob.xml */, AFC258E30988A469000655EE /* mismunch.xml */, AFC258E40988A469000655EE /* moebius.xml */, AFE6A40D0CDD7BDC002805BF /* moebiusgears.xml */, AFC258E50988A469000655EE /* moire.xml */, AFC258E60988A469000655EE /* moire2.xml */, AFC258E70988A469000655EE /* molecule.xml */, AFC258E80988A469000655EE /* morph3d.xml */, AFC258E90988A469000655EE /* mountain.xml */, AFC258EA0988A469000655EE /* munch.xml */, AFC258EB0988A469000655EE /* nerverot.xml */, AFC258EC0988A469000655EE /* noof.xml */, AFC258ED0988A469000655EE /* noseguy.xml */, AFC258EE0988A469000655EE /* pacman.xml */, AFC258EF0988A469000655EE /* pedal.xml */, AFC258F00988A469000655EE /* penetrate.xml */, AFC258F10988A469000655EE /* penrose.xml */, AFC258F20988A469000655EE /* petri.xml */, AFC258F30988A469000655EE /* phosphor.xml */, AFD51DB80F063BE700471C02 /* photopile.xml */, AFC258F40988A469000655EE /* piecewise.xml */, AFC258F50988A469000655EE /* pinion.xml */, AFC258F60988A469000655EE /* pipes.xml */, AFC258F70988A469000655EE /* polyhedra.xml */, AFC258F80988A469000655EE /* polyominoes.xml */, AFC258F90988A469000655EE /* polytopes.xml */, AFC258FA0988A469000655EE /* pong.xml */, AFC258FB0988A469000655EE /* popsquares.xml */, AFFAB32C19158E2A0020F021 /* projectiveplane.xml */, AFC258FC0988A469000655EE /* providence.xml */, AFC258FD0988A469000655EE /* pulsar.xml */, AFC258FE0988A469000655EE /* pyro.xml */, AFC258FF0988A469000655EE /* qix.xml */, AFF28694178611720050A578 /* quasicrystal.xml */, AFC259000988A469000655EE /* queens.xml */, AFA211A41CD59FD800C0D2A1 /* raverhoop.xml */, AFCCCBAD09BFE4B000353F4D /* rdbomb.xml */, AFC259030988A469000655EE /* ripples.xml */, AFC259040988A469000655EE /* rocks.xml */, AF63A8081AB4EF5D00593C75 /* romanboy.xml */, AFC259050988A469000655EE /* rorschach.xml */, AFC259060988A469000655EE /* rotor.xml */, AFC259070988A469000655EE /* rotzoomer.xml */, AFC259080988A469000655EE /* rubik.xml */, AF32D9FC0F3AD1330080F535 /* rubikblocks.xml */, AFC259090988A469000655EE /* sballs.xml */, AFC2590A0988A469000655EE /* shadebobs.xml */, AFC2590B0988A469000655EE /* sierpinski.xml */, AFC2590C0988A469000655EE /* sierpinski3d.xml */, AFE2A4740E2E911200ADB298 /* skytentacles.xml */, AFC2590D0988A469000655EE /* slidescreen.xml */, AFC2590E0988A469000655EE /* slip.xml */, AFC2590F0988A469000655EE /* sonar.xml */, AFC259100988A469000655EE /* speedmine.xml */, AFC259110988A469000655EE /* sphere.xml */, AFC259130988A469000655EE /* spheremonics.xml */, AFC259140988A469000655EE /* spiral.xml */, AFCF83521AF5B5FD008BB7E1 /* splitflap.xml */, AFEE10A31D17E2B300AAC8F7 /* splodesic.xml */, AFC259150988A469000655EE /* spotlight.xml */, AFC259160988A469000655EE /* sproingies.xml */, AFC259170988A469000655EE /* squiral.xml */, AFC259190988A469000655EE /* stairs.xml */, AFC2591A0988A469000655EE /* starfish.xml */, AFC2591B0988A469000655EE /* starwars.xml */, AFC2591C0988A469000655EE /* stonerview.xml */, AFC2591D0988A469000655EE /* strange.xml */, AFC2591E0988A469000655EE /* substrate.xml */, AFC2591F0988A469000655EE /* superquadrics.xml */, AF4A3461102A59EB00A81B2A /* surfaces.xml */, AFC259200988A469000655EE /* swirl.xml */, AFC259210988A469000655EE /* t3d.xml */, AFC259220988A469000655EE /* tangram.xml */, AF68A49419196E3E00D41CD1 /* tessellimage.xml */, CE3D01681B76F83E00993C75 /* testx11.xml */, AFC259230988A469000655EE /* thornbird.xml */, AFC259240988A469000655EE /* timetunnel.xml */, AF998EFA0A083E8C0051049D /* topblock.xml */, AFC259250988A469000655EE /* triangle.xml */, AF3582211433318500E09C51 /* tronbit.xml */, AFC259260988A469000655EE /* truchet.xml */, AFC259270988A469000655EE /* twang.xml */, AFC259280988A469000655EE /* vermiculate.xml */, AFC259290988A469000655EE /* vidwhacker.xml */, AFC2592A0988A469000655EE /* vines.xml */, AF46E9E61CBBA3F900240FBC /* unicrud.xml */, AFDA65A3178A541A0070D24B /* unknownpleasures.xml */, AF0DCA610C4CBB8E00D76972 /* voronoi.xml */, AFC2592B0988A469000655EE /* wander.xml */, AFC2592C0988A469000655EE /* webcollage.xml */, AFC2592D0988A469000655EE /* whirlwindwarp.xml */, AFC2592F0988A469000655EE /* whirlygig.xml */, AF39E2AC198A15820064A58D /* winduprobot.xml */, AFC259300988A469000655EE /* worm.xml */, AFC259310988A469000655EE /* wormhole.xml */, AFC259320988A469000655EE /* xanalogtv.xml */, AFC259370988A469000655EE /* xflame.xml */, AFC259380988A469000655EE /* xjack.xml */, AFC259390988A469000655EE /* xlyap.xml */, AFC2593A0988A469000655EE /* xmatrix.xml */, AFC2593D0988A469000655EE /* xrayswarm.xml */, AFC2593F0988A469000655EE /* xspirograph.xml */, AFC259430988A469000655EE /* zoom.xml */, ); name = config; path = ../hacks/config; sourceTree = ""; }; AFE1FD520981E35400F7970E /* Utils */ = { isa = PBXGroup; children = ( AFDA11211934424D003D397F /* aligned_malloc.c */, AFDA11221934424D003D397F /* aligned_malloc.h */, CE9289D119BD00E200961F22 /* async_netdb.c */, CE9289D219BD00E300961F22 /* async_netdb.h */, AF9D473609B52EE0006E59CF /* colorbars.c */, AF9D473709B52EE0006E59CF /* colorbars.h */, AFC25B990988BC08000655EE /* colors.c */, AFC25B9A0988BC08000655EE /* colors.h */, AFE1FD530981E3CB00F7970E /* erase.c */, AFE1FD540981E3CB00F7970E /* erase.h */, AFA55A3E0993351F00F3E977 /* gllist.c */, AFA55A3F0993351F00F3E977 /* gllist.h */, AF480EB0098F63D600FB32B8 /* gltrackball.c */, AF480EB2098F63DF00FB32B8 /* gltrackball.h */, AFD56E0A0996A0ED00BA26F7 /* glut_roman.h */, AFD56E0B0996A0ED00BA26F7 /* glut_stroke.c */, AFD56E0C0996A0ED00BA26F7 /* glut_swidth.c */, AFD56E0D0996A0ED00BA26F7 /* glutstroke.h */, AFA5607909936FDD00F3E977 /* grab-ximage.c */, AFA5607A09936FDD00F3E977 /* grab-ximage.h */, AFAD462209D5F4DA00AB5F95 /* grabclient.c */, AFE1FD550981E3CB00F7970E /* hsv.c */, AFE1FD560981E3CB00F7970E /* hsv.h */, AF4774E7099D8D8C001F091E /* logo.c */, AFA55864099324D800F3E977 /* minixpm.c */, AFA55865099324D800F3E977 /* minixpm.h */, AFA55A93099336D800F3E977 /* normals.c */, AFA55A94099336D800F3E977 /* normals.h */, AF4775BE099D9E79001F091E /* resources.c */, AF4775BF099D9E79001F091E /* resources.h */, AF480EB7098F646400FB32B8 /* rotator.c */, AF480EAC098F63B000FB32B8 /* rotator.h */, AFB5A06B0981F4C600871B16 /* screenhack.h */, AFC254B909873AF9000655EE /* screenhackI.h */, AF480EBB098F649600FB32B8 /* sphere.c */, AF480EBA098F648700FB32B8 /* sphere.h */, AFE1FD570981E3CB00F7970E /* spline.c */, AFE1FD580981E3CB00F7970E /* spline.h */, AF77780809B64F4900EA3033 /* texfont.c */, AF77780909B64F4900EA3033 /* texfont.h */, AFC7592B158D8E8B00C5458E /* textclient.c */, AFC7592C158D8E8B00C5458E /* textclient.h */, AFC7592F158D9A7A00C5458E /* textclient-ios.m */, AFA211881CD1AA1800C0D2A1 /* textclient-mobile.c */, AFDA11231934424D003D397F /* thread_util.c */, AFDA11241934424D003D397F /* thread_util.h */, AF480EAD098F63BE00FB32B8 /* trackball.c */, AF480EAF098F63CD00FB32B8 /* trackball.h */, AF480ED2098F652A00FB32B8 /* tube.c */, AF480ED1098F651C00FB32B8 /* tube.h */, AFB5A0ED0981FF8B00871B16 /* usleep.c */, AFB5A0EE0981FF8B00871B16 /* usleep.h */, AFE943B319DDF97F000A5E6D /* utf8wc.c */, AFE943B419DDF97F000A5E6D /* utf8wc.h */, AFE1FD590981E3CB00F7970E /* utils.h */, AFE1FD5A0981E3CB00F7970E /* version.h */, AFA33BD00B0587EE002B0E7D /* webcollage-helper-cocoa.m */, AFE943AF19DD54C1000A5E6D /* xft.c */, AFE943B019DD54C1000A5E6D /* xft.h */, AF480CBB098E37D600FB32B8 /* xlockmore.c */, AF480C89098E346700FB32B8 /* xlockmore.h */, AF480C8A098E34AB00FB32B8 /* xlockmoreI.h */, AF975C91099C929800B05160 /* xpm-pixmap.c */, AF975C92099C929800B05160 /* xpm-pixmap.h */, AF0839AE09930C4900277BE9 /* xpm-ximage.c */, AF0839AF09930C4900277BE9 /* xpm-ximage.h */, AFE1FD5B0981E3CB00F7970E /* yarandom.c */, AFE1FD5C0981E3CB00F7970E /* yarandom.h */, ); name = Utils; path = ..; sourceTree = ""; }; AFE1FD610981E3E700F7970E /* Hacks */ = { isa = PBXGroup; children = ( AF480DC7098F4EB500FB32B8 /* XScreenSaver */, AF480DCF098F4F0600FB32B8 /* Xlockmore */, AF480DD0098F4F2000FB32B8 /* OpenGL */, ); name = Hacks; path = ..; sourceTree = ""; }; /* End PBXGroup section */ /* Begin PBXHeadersBuildPhase section */ AF4808BD098C3B6C00FB32B8 /* Headers */ = { isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; files = ( AFA55867099324D800F3E977 /* minixpm.h in Headers */, AFA55A540993353500F3E977 /* gllist.h in Headers */, AFA55A96099336D800F3E977 /* normals.h in Headers */, AFE943B219DD54C1000A5E6D /* xft.h in Headers */, AF975C94099C929800B05160 /* xpm-pixmap.h in Headers */, AF4775C1099D9E79001F091E /* resources.h in Headers */, AF9D473909B52EE0006E59CF /* colorbars.h in Headers */, AF2D8F331CEBA10300198014 /* jwxyz-timers.h in Headers */, AFDA11261934424D003D397F /* aligned_malloc.h in Headers */, AFDA11281934424D003D397F /* thread_util.h in Headers */, AFBF893F0E41D930006A2D66 /* fps.h in Headers */, AFBF89B20E424036006A2D66 /* fpsI.h in Headers */, AF6048FC157C07C600CA21E4 /* jwzgles.h in Headers */, AF6048FD157C07C600CA21E4 /* jwzglesI.h in Headers */, AFC7592E158D8E8B00C5458E /* textclient.h in Headers */, CE9289D419BD00E300961F22 /* async_netdb.h in Headers */, AFE943B619DDF97F000A5E6D /* utf8wc.h in Headers */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXHeadersBuildPhase section */ /* Begin PBXLegacyTarget section */ AF4FF4930D52CA0800666F98 /* m6502.h */ = { isa = PBXLegacyTarget; buildArgumentsString = "m6502.sh $(PRODUCT_NAME) images/m6502/*.asm"; buildConfigurationList = AF4FF4940D52CA0800666F98 /* Build configuration list for PBXLegacyTarget "m6502.h" */; buildPhases = ( ); buildToolPath = /bin/sh; buildWorkingDirectory = ../hacks/; dependencies = ( ); name = m6502.h; passBuildSettingsInEnvironment = 1; productName = molecules.h; }; AFA56119099378CB00F3E977 /* molecules.h */ = { isa = PBXLegacyTarget; buildArgumentsString = "molecules.sh $(PRODUCT_NAME) ../images/molecules/*.pdb"; buildConfigurationList = AFA5611A099378EA00F3E977 /* Build configuration list for PBXLegacyTarget "molecules.h" */; buildPhases = ( ); buildToolPath = /bin/sh; buildWorkingDirectory = ../hacks/glx/; dependencies = ( ); name = molecules.h; passBuildSettingsInEnvironment = 1; productName = molecules.h; }; /* End PBXLegacyTarget section */ /* Begin PBXNativeTarget section */ AF08398F09930B6B00277BE9 /* Atlantis */ = { isa = PBXNativeTarget; buildConfigurationList = AF08399F09930B6B00277BE9 /* Build configuration list for PBXNativeTarget "Atlantis" */; buildPhases = ( AF08399209930B6B00277BE9 /* Resources */, AF08399409930B6B00277BE9 /* Sources */, AF08399709930B6B00277BE9 /* Frameworks */, AF08399E09930B6B00277BE9 /* Rez */, AFA3D95309C03D9800E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AF08399009930B6B00277BE9 /* PBXTargetDependency */, ); name = Atlantis; productName = Atlantis; productReference = AF0839A209930B6B00277BE9 /* Atlantis.saver */; productType = "com.apple.product-type.bundle"; }; AF083A32099311D700277BE9 /* Atunnel */ = { isa = PBXNativeTarget; buildConfigurationList = AF083A45099311D700277BE9 /* Build configuration list for PBXNativeTarget "Atunnel" */; buildPhases = ( AF083A35099311D700277BE9 /* Resources */, AF083A37099311D700277BE9 /* Sources */, AF083A3D099311D700277BE9 /* Frameworks */, AF083A44099311D700277BE9 /* Rez */, AFA3D95509C03D9C00E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AF083A33099311D700277BE9 /* PBXTargetDependency */, ); name = Atunnel; productName = Atunnel; productReference = AF083A48099311D700277BE9 /* Atunnel.saver */; productType = "com.apple.product-type.bundle"; }; AF0DC7AB0C4C73F600D76972 /* m6502 */ = { isa = PBXNativeTarget; buildConfigurationList = AF0DC7BA0C4C73F600D76972 /* Build configuration list for PBXNativeTarget "m6502" */; buildPhases = ( AF0DC7AE0C4C73F600D76972 /* Resources */, AF0DC7B00C4C73F600D76972 /* Sources */, AF0DC7B40C4C73F600D76972 /* Frameworks */, AF0DC7B80C4C73F600D76972 /* Rez */, AF0DC7B90C4C73F600D76972 /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AF4FF4980D52CA5000666F98 /* PBXTargetDependency */, AF0DC7AC0C4C73F600D76972 /* PBXTargetDependency */, ); name = m6502; productName = Pong; productReference = AF0DC7BD0C4C73F600D76972 /* m6502.saver */; productType = "com.apple.product-type.bundle"; }; AF0DCA420C4CBB0D00D76972 /* Voronoi */ = { isa = PBXNativeTarget; buildConfigurationList = AF0DCA530C4CBB0D00D76972 /* Build configuration list for PBXNativeTarget "Voronoi" */; buildPhases = ( AF0DCA450C4CBB0D00D76972 /* Resources */, AF0DCA470C4CBB0D00D76972 /* Sources */, AF0DCA4A0C4CBB0D00D76972 /* Frameworks */, AF0DCA510C4CBB0D00D76972 /* Rez */, AF0DCA520C4CBB0D00D76972 /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AF0DCA430C4CBB0D00D76972 /* PBXTargetDependency */, ); name = Voronoi; productName = Voronoi; productReference = AF0DCA560C4CBB0D00D76972 /* Voronoi.saver */; productType = "com.apple.product-type.bundle"; }; AF1A17610D6D6EE3008AF328 /* LCDscrub */ = { isa = PBXNativeTarget; buildConfigurationList = AF1A17700D6D6EE3008AF328 /* Build configuration list for PBXNativeTarget "LCDscrub" */; buildPhases = ( AF1A17640D6D6EE3008AF328 /* Resources */, AF1A17670D6D6EE3008AF328 /* Sources */, AF1A176A0D6D6EE3008AF328 /* Frameworks */, AF1A176E0D6D6EE3008AF328 /* Rez */, AF1A176F0D6D6EE3008AF328 /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AF1A17620D6D6EE3008AF328 /* PBXTargetDependency */, ); name = LCDscrub; productName = LCDscrub; productReference = AF1A17730D6D6EE3008AF328 /* LCDscrub.saver */; productType = "com.apple.product-type.bundle"; }; AF1AD9E118500F9F00932759 /* XScreenSaverUpdater */ = { isa = PBXNativeTarget; buildConfigurationList = AF1ADA0E18500FA200932759 /* Build configuration list for PBXNativeTarget "XScreenSaverUpdater" */; buildPhases = ( AF1AD9DE18500F9F00932759 /* Sources */, AF1AD9DF18500F9F00932759 /* Frameworks */, AF1AD9E018500F9F00932759 /* Resources */, AF1ADA191850185F00932759 /* CopyFiles */, AF1ADA1E18501DC200932759 /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( ); name = XScreenSaverUpdater; productName = XScreenSaverUpdater; productReference = AF1AD9E218500F9F00932759 /* XScreenSaverUpdater.app */; productType = "com.apple.product-type.application"; }; AF1B0FA71D7AB4740011DBE4 /* Hexstrut */ = { isa = PBXNativeTarget; buildConfigurationList = AF1B0FB91D7AB4740011DBE4 /* Build configuration list for PBXNativeTarget "Hexstrut" */; buildPhases = ( AF1B0FAA1D7AB4740011DBE4 /* Resources */, AF1B0FAC1D7AB4740011DBE4 /* Sources */, AF1B0FAF1D7AB4740011DBE4 /* Frameworks */, AF1B0FB71D7AB4740011DBE4 /* Rez */, AF1B0FB81D7AB4740011DBE4 /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AF1B0FA81D7AB4740011DBE4 /* PBXTargetDependency */, ); name = Hexstrut; productName = DangerBall; productReference = AF1B0FBC1D7AB4740011DBE4 /* Hexstrut.saver */; productType = "com.apple.product-type.bundle"; }; AF32D9E00F3AD0B40080F535 /* RubikBlocks */ = { isa = PBXNativeTarget; buildConfigurationList = AF32D9F10F3AD0B40080F535 /* Build configuration list for PBXNativeTarget "RubikBlocks" */; buildPhases = ( AF32D9E30F3AD0B40080F535 /* Resources */, AF32D9E50F3AD0B40080F535 /* Sources */, AF32D9E80F3AD0B40080F535 /* Frameworks */, AF32D9EF0F3AD0B40080F535 /* Rez */, AF32D9F00F3AD0B40080F535 /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AF32D9E10F3AD0B40080F535 /* PBXTargetDependency */, ); name = RubikBlocks; productName = RubikBlocks; productReference = AF32D9F40F3AD0B40080F535 /* RubikBlocks.saver */; productType = "com.apple.product-type.bundle"; }; AF3581BF1431D47B00E09C51 /* CompanionCube */ = { isa = PBXNativeTarget; buildConfigurationList = AF3581D21431D47B00E09C51 /* Build configuration list for PBXNativeTarget "CompanionCube" */; buildPhases = ( AF3581C21431D47B00E09C51 /* Resources */, AF3581C51431D47B00E09C51 /* Sources */, AF3581C91431D47B00E09C51 /* Frameworks */, AF3581D01431D47B00E09C51 /* Rez */, AF3581D11431D47B00E09C51 /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AF3581C01431D47B00E09C51 /* PBXTargetDependency */, ); name = CompanionCube; productName = CompanionCube; productReference = AF3581D51431D47B00E09C51 /* CompanionCube.saver */; productType = "com.apple.product-type.bundle"; }; AF3581FB143330F900E09C51 /* TronBit */ = { isa = PBXNativeTarget; buildConfigurationList = AF358213143330F900E09C51 /* Build configuration list for PBXNativeTarget "TronBit" */; buildPhases = ( AF3581FE143330F900E09C51 /* Resources */, AF358202143330F900E09C51 /* Sources */, AF35820A143330F900E09C51 /* Frameworks */, AF358211143330F900E09C51 /* Rez */, AF358212143330F900E09C51 /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AF3581FC143330F900E09C51 /* PBXTargetDependency */, ); name = TronBit; productName = CompanionCube; productReference = AF358216143330F900E09C51 /* TronBit.saver */; productType = "com.apple.product-type.bundle"; }; AF35E88A0E63823600691F2F /* Jigsaw */ = { isa = PBXNativeTarget; buildConfigurationList = AF35E89D0E63823600691F2F /* Build configuration list for PBXNativeTarget "Jigsaw" */; buildPhases = ( AF35E88D0E63823600691F2F /* Resources */, AF35E88F0E63823600691F2F /* Sources */, AF35E8940E63823600691F2F /* Frameworks */, AF35E89B0E63823600691F2F /* Rez */, AF35E89C0E63823600691F2F /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AF35E88B0E63823600691F2F /* PBXTargetDependency */, ); name = Jigsaw; productName = Jigsaw; productReference = AF35E8A00E63823600691F2F /* Jigsaw.saver */; productType = "com.apple.product-type.bundle"; }; AF39381A1D0FBD6A00205406 /* Discoball */ = { isa = PBXNativeTarget; buildConfigurationList = AF39382C1D0FBD6A00205406 /* Build configuration list for PBXNativeTarget "Discoball" */; buildPhases = ( AF39381D1D0FBD6A00205406 /* Resources */, AF39381F1D0FBD6A00205406 /* Sources */, AF3938221D0FBD6A00205406 /* Frameworks */, AF39382A1D0FBD6A00205406 /* Rez */, AF39382B1D0FBD6A00205406 /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AF39381B1D0FBD6A00205406 /* PBXTargetDependency */, ); name = Discoball; productName = DangerBall; productReference = AF39382F1D0FBD6A00205406 /* Discoball.saver */; productType = "com.apple.product-type.bundle"; }; AF39E282198A11F60064A58D /* WindupRobot */ = { isa = PBXNativeTarget; buildConfigurationList = AF39E293198A11F60064A58D /* Build configuration list for PBXNativeTarget "WindupRobot" */; buildPhases = ( AF39E285198A11F60064A58D /* Resources */, AF39E287198A11F60064A58D /* Sources */, AF39E28A198A11F60064A58D /* Frameworks */, AF39E291198A11F60064A58D /* Rez */, AF39E292198A11F60064A58D /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AF39E283198A11F60064A58D /* PBXTargetDependency */, ); name = WindupRobot; productName = DangerBall; productReference = AF39E296198A11F60064A58D /* WindupRobot.saver */; productType = "com.apple.product-type.bundle"; }; AF3C71450D624BF50030CC0D /* Hypnowheel */ = { isa = PBXNativeTarget; buildConfigurationList = AF3C71560D624BF50030CC0D /* Build configuration list for PBXNativeTarget "Hypnowheel" */; buildPhases = ( AF3C71480D624BF50030CC0D /* Resources */, AF3C714A0D624BF50030CC0D /* Sources */, AF3C714D0D624BF50030CC0D /* Frameworks */, AF3C71540D624BF50030CC0D /* Rez */, AF3C71550D624BF50030CC0D /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AF3C71460D624BF50030CC0D /* PBXTargetDependency */, ); name = Hypnowheel; productName = Hypnowheel; productReference = AF3C71590D624BF50030CC0D /* Hypnowheel.saver */; productType = "com.apple.product-type.bundle"; }; AF46E9CF1CBBA2B300240FBC /* Unicrud */ = { isa = PBXNativeTarget; buildConfigurationList = AF46E9E11CBBA2B300240FBC /* Build configuration list for PBXNativeTarget "Unicrud" */; buildPhases = ( AF46E9D21CBBA2B300240FBC /* Resources */, AF46E9D41CBBA2B300240FBC /* Sources */, AF46E9D71CBBA2B300240FBC /* Frameworks */, AF46E9DF1CBBA2B300240FBC /* Rez */, AF46E9E01CBBA2B300240FBC /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AF46E9D01CBBA2B300240FBC /* PBXTargetDependency */, ); name = Unicrud; productName = DangerBall; productReference = AF46E9E41CBBA2B300240FBC /* Unicrud.saver */; productType = "com.apple.product-type.bundle"; }; AF476FB5099D154F001F091E /* Interference */ = { isa = PBXNativeTarget; buildConfigurationList = AF476FC3099D154F001F091E /* Build configuration list for PBXNativeTarget "Interference" */; buildPhases = ( AF476FB8099D154F001F091E /* Resources */, AF476FBB099D154F001F091E /* Sources */, AF476FBE099D154F001F091E /* Frameworks */, AF476FC2099D154F001F091E /* Rez */, AFA3D89509C03C4400E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AF476FB6099D154F001F091E /* PBXTargetDependency */, ); name = Interference; productName = Interference; productReference = AF476FC6099D154F001F091E /* Interference.saver */; productType = "com.apple.product-type.bundle"; }; AF476FDA099D1686001F091E /* Truchet */ = { isa = PBXNativeTarget; buildConfigurationList = AF476FE8099D1686001F091E /* Build configuration list for PBXNativeTarget "Truchet" */; buildPhases = ( AF476FDD099D1686001F091E /* Resources */, AF476FE0099D1686001F091E /* Sources */, AF476FE3099D1686001F091E /* Frameworks */, AF476FE7099D1686001F091E /* Rez */, AFA3D8E309C03CCA00E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AF476FDB099D1686001F091E /* PBXTargetDependency */, ); name = Truchet; productName = Truchet; productReference = AF476FEB099D1686001F091E /* Truchet.saver */; productType = "com.apple.product-type.bundle"; }; AF47704C099D4385001F091E /* Deluxe */ = { isa = PBXNativeTarget; buildConfigurationList = AF477059099D4385001F091E /* Build configuration list for PBXNativeTarget "Deluxe" */; buildPhases = ( AF47704F099D4385001F091E /* Resources */, AF477051099D4385001F091E /* Sources */, AF477054099D4385001F091E /* Frameworks */, AF477058099D4385001F091E /* Rez */, AFA3D86F09C03BF700E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AF47704D099D4385001F091E /* PBXTargetDependency */, ); name = Deluxe; productName = Deluxe; productReference = AF47705C099D4385001F091E /* Deluxe.saver */; productType = "com.apple.product-type.bundle"; }; AF477169099D4786001F091E /* Compass */ = { isa = PBXNativeTarget; buildConfigurationList = AF477176099D4786001F091E /* Build configuration list for PBXNativeTarget "Compass" */; buildPhases = ( AF47716C099D4786001F091E /* Resources */, AF47716E099D4786001F091E /* Sources */, AF477171099D4786001F091E /* Frameworks */, AF477175099D4786001F091E /* Rez */, AFA3D86309C03BE200E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AF47716A099D4786001F091E /* PBXTargetDependency */, ); name = Compass; productName = Compass; productReference = AF477179099D4786001F091E /* Compass.saver */; productType = "com.apple.product-type.bundle"; }; AF47717F099D4803001F091E /* Wander */ = { isa = PBXNativeTarget; buildConfigurationList = AF47718C099D4803001F091E /* Build configuration list for PBXNativeTarget "Wander" */; buildPhases = ( AF477182099D4803001F091E /* Resources */, AF477184099D4803001F091E /* Sources */, AF477187099D4803001F091E /* Frameworks */, AF47718B099D4803001F091E /* Rez */, AFA3D8E909C03CD500E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AF477180099D4803001F091E /* PBXTargetDependency */, ); name = Wander; productName = Wander; productReference = AF47718F099D4803001F091E /* Wander.saver */; productType = "com.apple.product-type.bundle"; }; AF4771A7099D4949001F091E /* T3D */ = { isa = PBXNativeTarget; buildConfigurationList = AF4771B4099D4949001F091E /* Build configuration list for PBXNativeTarget "T3D" */; buildPhases = ( AF4771AA099D4949001F091E /* Resources */, AF4771AC099D4949001F091E /* Sources */, AF4771AF099D4949001F091E /* Frameworks */, AF4771B3099D4949001F091E /* Rez */, AFA3D8E109C03CC400E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AF4771A8099D4949001F091E /* PBXTargetDependency */, ); name = T3D; productName = T3D; productReference = AF4771B7099D4949001F091E /* T3D.saver */; productType = "com.apple.product-type.bundle"; }; AF4771DB099D4D9A001F091E /* CCurve */ = { isa = PBXNativeTarget; buildConfigurationList = AF4771E8099D4D9A001F091E /* Build configuration list for PBXNativeTarget "CCurve" */; buildPhases = ( AF4771DE099D4D9A001F091E /* Resources */, AF4771E0099D4D9A001F091E /* Sources */, AF4771E3099D4D9A001F091E /* Frameworks */, AF4771E7099D4D9A001F091E /* Rez */, AFA3D85D09C03BD700E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AF4771DC099D4D9A001F091E /* PBXTargetDependency */, ); name = CCurve; productName = CCurve; productReference = AF4771EB099D4D9A001F091E /* CCurve.saver */; productType = "com.apple.product-type.bundle"; }; AF4771F2099D4E63001F091E /* NerveRot */ = { isa = PBXNativeTarget; buildConfigurationList = AF4771FF099D4E63001F091E /* Build configuration list for PBXNativeTarget "NerveRot" */; buildPhases = ( AF4771F5099D4E63001F091E /* Resources */, AF4771F7099D4E63001F091E /* Sources */, AF4771FA099D4E63001F091E /* Frameworks */, AF4771FE099D4E63001F091E /* Rez */, AFA3D8AF09C03C7300E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AF4771F3099D4E63001F091E /* PBXTargetDependency */, ); name = NerveRot; productName = NerveRot; productReference = AF477202099D4E64001F091E /* NerveRot.saver */; productType = "com.apple.product-type.bundle"; }; AF477208099D4EE8001F091E /* Whirlygig */ = { isa = PBXNativeTarget; buildConfigurationList = AF477215099D4EE8001F091E /* Build configuration list for PBXNativeTarget "Whirlygig" */; buildPhases = ( AF47720B099D4EE8001F091E /* Resources */, AF47720D099D4EE8001F091E /* Sources */, AF477210099D4EE8001F091E /* Frameworks */, AF477214099D4EE8001F091E /* Rez */, AFA3D8ED09C03CDB00E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AF477209099D4EE8001F091E /* PBXTargetDependency */, ); name = Whirlygig; productName = Whirlygig; productReference = AF477218099D4EE8001F091E /* Whirlygig.saver */; productType = "com.apple.product-type.bundle"; }; AF47721E099D4F67001F091E /* Anemone */ = { isa = PBXNativeTarget; buildConfigurationList = AF47722B099D4F67001F091E /* Build configuration list for PBXNativeTarget "Anemone" */; buildPhases = ( AF477221099D4F67001F091E /* Resources */, AF477223099D4F67001F091E /* Sources */, AF477226099D4F67001F091E /* Frameworks */, AF47722A099D4F67001F091E /* Rez */, AFCCCBB509C033DF00353F4D /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AF47721F099D4F67001F091E /* PBXTargetDependency */, ); name = Anemone; productName = Anemone; productReference = AF47722E099D4F67001F091E /* Anemone.saver */; productType = "com.apple.product-type.bundle"; }; AF477253099D5717001F091E /* Halftone */ = { isa = PBXNativeTarget; buildConfigurationList = AF477260099D5717001F091E /* Build configuration list for PBXNativeTarget "Halftone" */; buildPhases = ( AF477256099D5717001F091E /* Resources */, AF477258099D5717001F091E /* Sources */, AF47725B099D5717001F091E /* Frameworks */, AF47725F099D5717001F091E /* Rez */, AFA3D88509C03C2700E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AF477254099D5717001F091E /* PBXTargetDependency */, ); name = Halftone; productName = Halftone; productReference = AF477263099D5717001F091E /* Halftone.saver */; productType = "com.apple.product-type.bundle"; }; AF47726B099D57B9001F091E /* PopSquares */ = { isa = PBXNativeTarget; buildConfigurationList = AF477278099D57B9001F091E /* Build configuration list for PBXNativeTarget "PopSquares" */; buildPhases = ( AF47726E099D57B9001F091E /* Resources */, AF477270099D57B9001F091E /* Sources */, AF477273099D57B9001F091E /* Frameworks */, AF477277099D57B9001F091E /* Rez */, AFA3D8BF09C03C8D00E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AF47726C099D57B9001F091E /* PBXTargetDependency */, ); name = PopSquares; productName = PopSquares; productReference = AF47727B099D57B9001F091E /* PopSquares.saver */; productType = "com.apple.product-type.bundle"; }; AF477283099D5926001F091E /* Piecewise */ = { isa = PBXNativeTarget; buildConfigurationList = AF477290099D5926001F091E /* Build configuration list for PBXNativeTarget "Piecewise" */; buildPhases = ( AF477286099D5926001F091E /* Resources */, AF477288099D5926001F091E /* Sources */, AF47728B099D5926001F091E /* Frameworks */, AF47728F099D5926001F091E /* Rez */, AFA3D8BB09C03C8600E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AF477284099D5926001F091E /* PBXTargetDependency */, ); name = Piecewise; productName = Piecewise; productReference = AF477293099D5926001F091E /* Piecewise.saver */; productType = "com.apple.product-type.bundle"; }; AF477382099D65A1001F091E /* Wormhole */ = { isa = PBXNativeTarget; buildConfigurationList = AF47738F099D65A1001F091E /* Build configuration list for PBXNativeTarget "Wormhole" */; buildPhases = ( AF477385099D65A1001F091E /* Resources */, AF477387099D65A1001F091E /* Sources */, AF47738A099D65A1001F091E /* Frameworks */, AF47738E099D65A1001F091E /* Rez */, AFA3D8EF09C03CDE00E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AF477383099D65A1001F091E /* PBXTargetDependency */, ); name = Wormhole; productName = Wormhole; productReference = AF477392099D65A1001F091E /* Wormhole.saver */; productType = "com.apple.product-type.bundle"; }; AF47739A099D6648001F091E /* FuzzyFlakes */ = { isa = PBXNativeTarget; buildConfigurationList = AF4773A7099D6648001F091E /* Build configuration list for PBXNativeTarget "FuzzyFlakes" */; buildPhases = ( AF47739D099D6648001F091E /* Resources */, AF47739F099D6648001F091E /* Sources */, AF4773A2099D6648001F091E /* Frameworks */, AF4773A6099D6648001F091E /* Rez */, AFA3D87F09C03C1E00E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AF47739B099D6648001F091E /* PBXTargetDependency */, ); name = FuzzyFlakes; productName = FuzzyFlakes; productReference = AF4773AA099D6648001F091E /* FuzzyFlakes.saver */; productType = "com.apple.product-type.bundle"; }; AF4773C1099D67B9001F091E /* Anemotaxis */ = { isa = PBXNativeTarget; buildConfigurationList = AF4773CE099D67B9001F091E /* Build configuration list for PBXNativeTarget "Anemotaxis" */; buildPhases = ( AF4773C4099D67B9001F091E /* Resources */, AF4773C6099D67B9001F091E /* Sources */, AF4773C9099D67B9001F091E /* Frameworks */, AF4773CD099D67B9001F091E /* Rez */, AFCCCBC709C03AAF00353F4D /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AF4773C2099D67B9001F091E /* PBXTargetDependency */, ); name = Anemotaxis; productName = Anemotaxis; productReference = AF4773D1099D67B9001F091E /* Anemotaxis.saver */; productType = "com.apple.product-type.bundle"; }; AF477401099D69E7001F091E /* Intermomentary */ = { isa = PBXNativeTarget; buildConfigurationList = AF47740F099D69E7001F091E /* Build configuration list for PBXNativeTarget "Intermomentary" */; buildPhases = ( AF477404099D69E7001F091E /* Resources */, AF477407099D69E7001F091E /* Sources */, AF47740A099D69E7001F091E /* Frameworks */, AF47740E099D69E7001F091E /* Rez */, AFA3D89709C03C4700E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AF477402099D69E7001F091E /* PBXTargetDependency */, ); name = Intermomentary; productName = Intermomentary; productReference = AF477412099D69E7001F091E /* Intermomentary.saver */; productType = "com.apple.product-type.bundle"; }; AF477426099D7C70001F091E /* IFS */ = { isa = PBXNativeTarget; buildConfigurationList = AF477434099D7C70001F091E /* Build configuration list for PBXNativeTarget "IFS" */; buildPhases = ( AF477429099D7C70001F091E /* Resources */, AF47742C099D7C70001F091E /* Sources */, AF47742F099D7C70001F091E /* Frameworks */, AF477433099D7C70001F091E /* Rez */, AFA3D88F09C03C3900E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AF477427099D7C70001F091E /* PBXTargetDependency */, ); name = IFS; productName = IFS; productReference = AF477437099D7C70001F091E /* IFS.saver */; productType = "com.apple.product-type.bundle"; }; AF477442099D7D33001F091E /* XMatrix */ = { isa = PBXNativeTarget; buildConfigurationList = AF47744F099D7D33001F091E /* Build configuration list for PBXNativeTarget "XMatrix" */; buildPhases = ( AF477445099D7D33001F091E /* Resources */, AF477447099D7D33001F091E /* Sources */, AF47744A099D7D33001F091E /* Frameworks */, AF47744E099D7D33001F091E /* Rez */, AFA3D8F909C03CED00E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AF477443099D7D33001F091E /* PBXTargetDependency */, ); name = XMatrix; productName = XMatrix; productReference = AF477452099D7D33001F091E /* XMatrix.saver */; productType = "com.apple.product-type.bundle"; }; AF477483099D89E4001F091E /* Flame */ = { isa = PBXNativeTarget; buildConfigurationList = AF477490099D89E4001F091E /* Build configuration list for PBXNativeTarget "Flame" */; buildPhases = ( AF477486099D89E4001F091E /* Resources */, AF477488099D89E4001F091E /* Sources */, AF47748B099D89E4001F091E /* Frameworks */, AF47748F099D89E4001F091E /* Rez */, AFA3D87909C03C1200E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AF477484099D89E4001F091E /* PBXTargetDependency */, ); name = Flame; productName = Flame; productReference = AF477493099D89E4001F091E /* Flame.saver */; productType = "com.apple.product-type.bundle"; }; AF477499099D8A74001F091E /* Kaleidescope */ = { isa = PBXNativeTarget; buildConfigurationList = AF4774A6099D8A74001F091E /* Build configuration list for PBXNativeTarget "Kaleidescope" */; buildPhases = ( AF47749C099D8A74001F091E /* Resources */, AF47749E099D8A74001F091E /* Sources */, AF4774A1099D8A74001F091E /* Frameworks */, AF4774A5099D8A74001F091E /* Rez */, AFA3D89B09C03C4D00E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AF47749A099D8A74001F091E /* PBXTargetDependency */, ); name = Kaleidescope; productName = Kaleidescope; productReference = AF4774A9099D8A74001F091E /* Kaleidescope.saver */; productType = "com.apple.product-type.bundle"; }; AF4774B4099D8B5F001F091E /* LMorph */ = { isa = PBXNativeTarget; buildConfigurationList = AF4774C1099D8B5F001F091E /* Build configuration list for PBXNativeTarget "LMorph" */; buildPhases = ( AF4774B7099D8B5F001F091E /* Resources */, AF4774B9099D8B5F001F091E /* Sources */, AF4774BC099D8B5F001F091E /* Frameworks */, AF4774C0099D8B5F001F091E /* Rez */, AFA3D89F09C03C5300E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AF4774B5099D8B5F001F091E /* PBXTargetDependency */, ); name = LMorph; productName = LMorph; productReference = AF4774C4099D8B5F001F091E /* LMorph.saver */; productType = "com.apple.product-type.bundle"; }; AF4774CE099D8BFF001F091E /* Maze */ = { isa = PBXNativeTarget; buildConfigurationList = AF4774DB099D8BFF001F091E /* Build configuration list for PBXNativeTarget "Maze" */; buildPhases = ( AF4774D1099D8BFF001F091E /* Resources */, AF4774D3099D8BFF001F091E /* Sources */, AF4774D6099D8BFF001F091E /* Frameworks */, AF4774DA099D8BFF001F091E /* Rez */, AFA3D8A109C03C5600E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AF4774CF099D8BFF001F091E /* PBXTargetDependency */, ); name = Maze; productName = Maze; productReference = AF4774DE099D8BFF001F091E /* Maze.saver */; productType = "com.apple.product-type.bundle"; }; AF47755D099D9A1A001F091E /* Pedal */ = { isa = PBXNativeTarget; buildConfigurationList = AF47756A099D9A1A001F091E /* Build configuration list for PBXNativeTarget "Pedal" */; buildPhases = ( AF477560099D9A1A001F091E /* Resources */, AF477562099D9A1A001F091E /* Sources */, AF477565099D9A1A001F091E /* Frameworks */, AF477569099D9A1A001F091E /* Rez */, AFA3D8B309C03C7900E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AF47755E099D9A1A001F091E /* PBXTargetDependency */, ); name = Pedal; productName = Pedal; productReference = AF47756D099D9A1A001F091E /* Pedal.saver */; productType = "com.apple.product-type.bundle"; }; AF477583099D9C28001F091E /* Pyro */ = { isa = PBXNativeTarget; buildConfigurationList = AF477590099D9C28001F091E /* Build configuration list for PBXNativeTarget "Pyro" */; buildPhases = ( AF477586099D9C28001F091E /* Resources */, AF477588099D9C28001F091E /* Sources */, AF47758B099D9C28001F091E /* Frameworks */, AF47758F099D9C28001F091E /* Rez */, AFA3D8C109C03C9000E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AF477584099D9C28001F091E /* PBXTargetDependency */, ); name = Pyro; productName = Pyro; productReference = AF477593099D9C28001F091E /* Pyro.saver */; productType = "com.apple.product-type.bundle"; }; AF47759F099D9CF7001F091E /* Starfish */ = { isa = PBXNativeTarget; buildConfigurationList = AF4775AC099D9CF7001F091E /* Build configuration list for PBXNativeTarget "Starfish" */; buildPhases = ( AF4775A2099D9CF7001F091E /* Resources */, AF4775A4099D9CF7001F091E /* Sources */, AF4775A7099D9CF7001F091E /* Frameworks */, AF4775AB099D9CF7001F091E /* Rez */, AFA3D8DD09C03CBD00E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AF4775A0099D9CF7001F091E /* PBXTargetDependency */, ); name = Starfish; productName = Starfish; productReference = AF4775AF099D9CF7001F091E /* Starfish.saver */; productType = "com.apple.product-type.bundle"; }; AF4775D8099D9F69001F091E /* Coral */ = { isa = PBXNativeTarget; buildConfigurationList = AF4775E5099D9F69001F091E /* Build configuration list for PBXNativeTarget "Coral" */; buildPhases = ( AF4775DB099D9F69001F091E /* Resources */, AF4775DD099D9F69001F091E /* Sources */, AF4775E0099D9F69001F091E /* Frameworks */, AF4775E4099D9F69001F091E /* Rez */, AFA3D86509C03BE500E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AF4775D9099D9F69001F091E /* PBXTargetDependency */, ); name = Coral; productName = Coral; productReference = AF4775E8099D9F69001F091E /* Coral.saver */; productType = "com.apple.product-type.bundle"; }; AF4775F2099DA030001F091E /* Epicycle */ = { isa = PBXNativeTarget; buildConfigurationList = AF4775FF099DA030001F091E /* Build configuration list for PBXNativeTarget "Epicycle" */; buildPhases = ( AF4775F5099DA030001F091E /* Resources */, AF4775F7099DA030001F091E /* Sources */, AF4775FA099DA030001F091E /* Frameworks */, AF4775FE099DA030001F091E /* Rez */, AFA3D87309C03C0000E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AF4775F3099DA030001F091E /* PBXTargetDependency */, ); name = Epicycle; productName = Epicycle; productReference = AF477602099DA030001F091E /* Epicycle.saver */; productType = "com.apple.product-type.bundle"; }; AF477613099DA26C001F091E /* Kumppa */ = { isa = PBXNativeTarget; buildConfigurationList = AF477620099DA26C001F091E /* Build configuration list for PBXNativeTarget "Kumppa" */; buildPhases = ( AF477616099DA26C001F091E /* Resources */, AF477618099DA26C001F091E /* Sources */, AF47761B099DA26C001F091E /* Frameworks */, AF47761F099DA26C001F091E /* Rez */, AFA3D89D09C03C5000E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AF477614099DA26C001F091E /* PBXTargetDependency */, ); name = Kumppa; productName = Kumppa; productReference = AF477623099DA26C001F091E /* Kumppa.saver */; productType = "com.apple.product-type.bundle"; }; AF477644099DA6D0001F091E /* Squiral */ = { isa = PBXNativeTarget; buildConfigurationList = AF477651099DA6D0001F091E /* Build configuration list for PBXNativeTarget "Squiral" */; buildPhases = ( AF477647099DA6D0001F091E /* Resources */, AF477649099DA6D0001F091E /* Sources */, AF47764C099DA6D0001F091E /* Frameworks */, AF477650099DA6D0001F091E /* Rez */, AFA3D8DB09C03CBA00E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AF477645099DA6D0001F091E /* PBXTargetDependency */, ); name = Squiral; productName = Squiral; productReference = AF477654099DA6D0001F091E /* Squiral.saver */; productType = "com.apple.product-type.bundle"; }; AF47765A099DA78E001F091E /* Critical */ = { isa = PBXNativeTarget; buildConfigurationList = AF477667099DA78E001F091E /* Build configuration list for PBXNativeTarget "Critical" */; buildPhases = ( AF47765D099DA78E001F091E /* Resources */, AF47765F099DA78E001F091E /* Sources */, AF477662099DA78E001F091E /* Frameworks */, AF477666099DA78E001F091E /* Rez */, AFA3D86709C03BE800E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AF47765B099DA78E001F091E /* PBXTargetDependency */, ); name = Critical; productName = Critical; productReference = AF47766A099DA78F001F091E /* Critical.saver */; productType = "com.apple.product-type.bundle"; }; AF477670099DA849001F091E /* Petri */ = { isa = PBXNativeTarget; buildConfigurationList = AF47767D099DA849001F091E /* Build configuration list for PBXNativeTarget "Petri" */; buildPhases = ( AF477673099DA849001F091E /* Resources */, AF477675099DA849001F091E /* Sources */, AF477678099DA849001F091E /* Frameworks */, AF47767C099DA849001F091E /* Rez */, AFA3D8B709C03C7F00E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AF477671099DA849001F091E /* PBXTargetDependency */, ); name = Petri; productName = Petri; productReference = AF477680099DA849001F091E /* Petri.saver */; productType = "com.apple.product-type.bundle"; }; AF47768F099DAA6F001F091E /* Blaster */ = { isa = PBXNativeTarget; buildConfigurationList = AF47769C099DAA6F001F091E /* Build configuration list for PBXNativeTarget "Blaster" */; buildPhases = ( AF477692099DAA6F001F091E /* Resources */, AF477694099DAA6F001F091E /* Sources */, AF477697099DAA6F001F091E /* Frameworks */, AF47769B099DAA6F001F091E /* Rez */, AFCCCBD109C03AFC00353F4D /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AF477690099DAA6F001F091E /* PBXTargetDependency */, ); name = Blaster; productName = Blaster; productReference = AF47769F099DAA6F001F091E /* Blaster.saver */; productType = "com.apple.product-type.bundle"; }; AF4776AA099DABDD001F091E /* XSpirograph */ = { isa = PBXNativeTarget; buildConfigurationList = AF4776B7099DABDD001F091E /* Build configuration list for PBXNativeTarget "XSpirograph" */; buildPhases = ( AF4776AD099DABDD001F091E /* Resources */, AF4776AF099DABDD001F091E /* Sources */, AF4776B2099DABDD001F091E /* Frameworks */, AF4776B6099DABDD001F091E /* Rez */, AFA3D8FD09C03CF400E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AF4776AB099DABDD001F091E /* PBXTargetDependency */, ); name = XSpirograph; productName = XSpirograph; productReference = AF4776BA099DABDD001F091E /* XSpirograph.saver */; productType = "com.apple.product-type.bundle"; }; AF4776C0099DAC8A001F091E /* XRaySwarm */ = { isa = PBXNativeTarget; buildConfigurationList = AF4776CD099DAC8A001F091E /* Build configuration list for PBXNativeTarget "XRaySwarm" */; buildPhases = ( AF4776C3099DAC8A001F091E /* Resources */, AF4776C5099DAC8A001F091E /* Sources */, AF4776C8099DAC8A001F091E /* Frameworks */, AF4776CC099DAC8A001F091E /* Rez */, AFA3D8FB09C03CF100E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AF4776C1099DAC8A001F091E /* PBXTargetDependency */, ); name = XRaySwarm; productName = XRaySwarm; productReference = AF4776D0099DAC8A001F091E /* XRaySwarm.saver */; productType = "com.apple.product-type.bundle"; }; AF4776DB099DADDF001F091E /* WhirlWindWarp */ = { isa = PBXNativeTarget; buildConfigurationList = AF4776E8099DADDF001F091E /* Build configuration list for PBXNativeTarget "WhirlWindWarp" */; buildPhases = ( AF4776DE099DADDF001F091E /* Resources */, AF4776E0099DADDF001F091E /* Sources */, AF4776E3099DADDF001F091E /* Frameworks */, AF4776E7099DADDF001F091E /* Rez */, AFA3D8EB09C03CD800E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AF4776DC099DADDF001F091E /* PBXTargetDependency */, ); name = WhirlWindWarp; productName = WhirlWindWarp; productReference = AF4776EB099DADDF001F091E /* WhirlWindWarp.saver */; productType = "com.apple.product-type.bundle"; }; AF4776F1099DAE7A001F091E /* Vermiculate */ = { isa = PBXNativeTarget; buildConfigurationList = AF4776FE099DAE7A001F091E /* Build configuration list for PBXNativeTarget "Vermiculate" */; buildPhases = ( AF4776F4099DAE7A001F091E /* Resources */, AF4776F6099DAE7A001F091E /* Sources */, AF4776F9099DAE7A001F091E /* Frameworks */, AF4776FD099DAE7A001F091E /* Rez */, AFA3D8E709C03CD100E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AF4776F2099DAE7A001F091E /* PBXTargetDependency */, ); name = Vermiculate; productName = Vermiculate; productReference = AF477701099DAE7A001F091E /* Vermiculate.saver */; productType = "com.apple.product-type.bundle"; }; AF47770D099DAF9F001F091E /* CloudLife */ = { isa = PBXNativeTarget; buildConfigurationList = AF47771A099DAF9F001F091E /* Build configuration list for PBXNativeTarget "CloudLife" */; buildPhases = ( AF477710099DAF9F001F091E /* Resources */, AF477712099DAF9F001F091E /* Sources */, AF477715099DAF9F001F091E /* Frameworks */, AF477719099DAF9F001F091E /* Rez */, AFA3D86109C03BDE00E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AF47770E099DAF9F001F091E /* PBXTargetDependency */, ); name = CloudLife; productName = CloudLife; productReference = AF47771D099DAF9F001F091E /* CloudLife.saver */; productType = "com.apple.product-type.bundle"; }; AF477723099DB044001F091E /* Substrate */ = { isa = PBXNativeTarget; buildConfigurationList = AF477730099DB044001F091E /* Build configuration list for PBXNativeTarget "Substrate" */; buildPhases = ( AF477726099DB044001F091E /* Resources */, AF477728099DB044001F091E /* Sources */, AF47772B099DB044001F091E /* Frameworks */, AF47772F099DB044001F091E /* Rez */, AFA3D8DF09C03CC000E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AF477724099DB044001F091E /* PBXTargetDependency */, ); name = Substrate; productName = Substrate; productReference = AF477733099DB044001F091E /* Substrate.saver */; productType = "com.apple.product-type.bundle"; }; AF477752099DB61E001F091E /* Interaggregate */ = { isa = PBXNativeTarget; buildConfigurationList = AF47775F099DB61E001F091E /* Build configuration list for PBXNativeTarget "Interaggregate" */; buildPhases = ( AF477755099DB61E001F091E /* Resources */, AF477757099DB61E001F091E /* Sources */, AF47775A099DB61E001F091E /* Frameworks */, AF47775E099DB61E001F091E /* Rez */, AFA3D89309C03C4000E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AF477753099DB61E001F091E /* PBXTargetDependency */, ); name = Interaggregate; productName = Interaggregate; productReference = AF477762099DB61E001F091E /* Interaggregate.saver */; productType = "com.apple.product-type.bundle"; }; AF477774099DB965001F091E /* Celtic */ = { isa = PBXNativeTarget; buildConfigurationList = AF477781099DB965001F091E /* Build configuration list for PBXNativeTarget "Celtic" */; buildPhases = ( AF477777099DB965001F091E /* Resources */, AF477779099DB965001F091E /* Sources */, AF47777C099DB965001F091E /* Frameworks */, AF477780099DB965001F091E /* Rez */, AFA3D85F09C03BDA00E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AF477775099DB965001F091E /* PBXTargetDependency */, ); name = Celtic; productName = Celtic; productReference = AF477784099DB965001F091E /* Celtic.saver */; productType = "com.apple.product-type.bundle"; }; AF477790099DBA90001F091E /* FluidBalls */ = { isa = PBXNativeTarget; buildConfigurationList = AF47779D099DBA90001F091E /* Build configuration list for PBXNativeTarget "FluidBalls" */; buildPhases = ( AF477793099DBA90001F091E /* Resources */, AF477795099DBA90001F091E /* Sources */, AF477798099DBA90001F091E /* Frameworks */, AF47779C099DBA90001F091E /* Rez */, AFA3D87B09C03C1700E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AF477791099DBA90001F091E /* PBXTargetDependency */, ); name = FluidBalls; productName = FluidBalls; productReference = AF4777A0099DBA90001F091E /* FluidBalls.saver */; productType = "com.apple.product-type.bundle"; }; AF4777D1099DC183001F091E /* BoxFit */ = { isa = PBXNativeTarget; buildConfigurationList = AF4777DE099DC183001F091E /* Build configuration list for PBXNativeTarget "BoxFit" */; buildPhases = ( AF4777D4099DC183001F091E /* Resources */, AF4777D6099DC183001F091E /* Sources */, AF4777D9099DC183001F091E /* Frameworks */, AF4777DD099DC183001F091E /* Rez */, AFCCCBD509C03B0500353F4D /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AF4777D2099DC183001F091E /* PBXTargetDependency */, ); name = BoxFit; productName = BoxFit; productReference = AF4777E1099DC183001F091E /* BoxFit.saver */; productType = "com.apple.product-type.bundle"; }; AF4778AB099DDB79001F091E /* Penetrate */ = { isa = PBXNativeTarget; buildConfigurationList = AF4778B8099DDB79001F091E /* Build configuration list for PBXNativeTarget "Penetrate" */; buildPhases = ( AF4778AE099DDB79001F091E /* Resources */, AF4778B0099DDB79001F091E /* Sources */, AF4778B3099DDB79001F091E /* Frameworks */, AF4778B7099DDB79001F091E /* Rez */, AFA3D8B509C03C7C00E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AF4778AC099DDB79001F091E /* PBXTargetDependency */, ); name = Penetrate; productName = Penetrate; productReference = AF4778BB099DDB79001F091E /* Penetrate.saver */; productType = "com.apple.product-type.bundle"; }; AF4778C7099DDCAE001F091E /* XJack */ = { isa = PBXNativeTarget; buildConfigurationList = AF4778D4099DDCAE001F091E /* Build configuration list for PBXNativeTarget "XJack" */; buildPhases = ( AF4778CA099DDCAE001F091E /* Resources */, AF4778CC099DDCAE001F091E /* Sources */, AF4778CF099DDCAE001F091E /* Frameworks */, AF4778D3099DDCAE001F091E /* Rez */, AFA3D8F509C03CE800E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AF4778C8099DDCAE001F091E /* PBXTargetDependency */, ); name = XJack; productName = XJack; productReference = AF4778D7099DDCAE001F091E /* XJack.saver */; productType = "com.apple.product-type.bundle"; }; AF4778E8099DDDC8001F091E /* Cynosure */ = { isa = PBXNativeTarget; buildConfigurationList = AF4778F5099DDDC8001F091E /* Build configuration list for PBXNativeTarget "Cynosure" */; buildPhases = ( AF4778EB099DDDC8001F091E /* Resources */, AF4778ED099DDDC8001F091E /* Sources */, AF4778F0099DDDC8001F091E /* Frameworks */, AF4778F4099DDDC8001F091E /* Rez */, AFA3D86909C03BEC00E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AF4778E9099DDDC8001F091E /* PBXTargetDependency */, ); name = Cynosure; productName = Cynosure; productReference = AF4778F8099DDDC8001F091E /* Cynosure.saver */; productType = "com.apple.product-type.bundle"; }; AF477909099DE379001F091E /* Flag */ = { isa = PBXNativeTarget; buildConfigurationList = AF477916099DE379001F091E /* Build configuration list for PBXNativeTarget "Flag" */; buildPhases = ( AF47790C099DE379001F091E /* Resources */, AF47790E099DE379001F091E /* Sources */, AF477911099DE379001F091E /* Frameworks */, AF477915099DE379001F091E /* Rez */, AFA3D91709C03D2400E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AF47790A099DE379001F091E /* PBXTargetDependency */, ); name = Flag; productName = Flag; productReference = AF477919099DE379001F091E /* Flag.saver */; productType = "com.apple.product-type.bundle"; }; AF47792A099DE4C7001F091E /* Slip */ = { isa = PBXNativeTarget; buildConfigurationList = AF477937099DE4C7001F091E /* Build configuration list for PBXNativeTarget "Slip" */; buildPhases = ( AF47792D099DE4C7001F091E /* Resources */, AF47792F099DE4C7001F091E /* Sources */, AF477932099DE4C7001F091E /* Frameworks */, AF477936099DE4C7001F091E /* Rez */, AFA3D8D309C03CAE00E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AF47792B099DE4C7001F091E /* PBXTargetDependency */, ); name = Slip; productName = Slip; productReference = AF47793A099DE4C7001F091E /* Slip.saver */; productType = "com.apple.product-type.bundle"; }; AF4808C0098C3B6C00FB32B8 /* jwxyz */ = { isa = PBXNativeTarget; buildConfigurationList = AF4808C2098C3B8B00FB32B8 /* Build configuration list for PBXNativeTarget "jwxyz" */; buildPhases = ( AF4E1D1819CE7013002B6190 /* Update GC build settings */, AF4808BD098C3B6C00FB32B8 /* Headers */, AF4808BE098C3B6C00FB32B8 /* Sources */, AF4808BF098C3B6C00FB32B8 /* Frameworks */, ); buildRules = ( ); dependencies = ( ); name = jwxyz; productName = jwxyz; productReference = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; productType = "com.apple.product-type.library.static"; }; AF480C49098E301400FB32B8 /* Helix */ = { isa = PBXNativeTarget; buildConfigurationList = AF480C55098E301400FB32B8 /* Build configuration list for PBXNativeTarget "Helix" */; buildPhases = ( AF480C4C098E301400FB32B8 /* Resources */, AF480C4E098E301400FB32B8 /* Sources */, AF480C50098E301400FB32B8 /* Frameworks */, AF480C54098E301400FB32B8 /* Rez */, AFA3D88909C03C2E00E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AF480C4A098E301400FB32B8 /* PBXTargetDependency */, ); name = Helix; productName = Helix; productReference = AF480C58098E301400FB32B8 /* Helix.saver */; productType = "com.apple.product-type.bundle"; }; AF480D72098EEDDE00FB32B8 /* Drift */ = { isa = PBXNativeTarget; buildConfigurationList = AF480D7E098EEDDE00FB32B8 /* Build configuration list for PBXNativeTarget "Drift" */; buildPhases = ( AF480D75098EEDDE00FB32B8 /* Resources */, AF480D77098EEDDE00FB32B8 /* Sources */, AF480D79098EEDDE00FB32B8 /* Frameworks */, AF480D7D098EEDDE00FB32B8 /* Rez */, AFA3D90F09C03D1800E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AF480D73098EEDDE00FB32B8 /* PBXTargetDependency */, ); name = Drift; productName = Drift; productReference = AF480D81098EEDDE00FB32B8 /* Drift.saver */; productType = "com.apple.product-type.bundle"; }; AF4810EB09909FBA00FB32B8 /* DangerBall */ = { isa = PBXNativeTarget; buildConfigurationList = AF4810F809909FBA00FB32B8 /* Build configuration list for PBXNativeTarget "DangerBall" */; buildPhases = ( AF4810EE09909FBA00FB32B8 /* Resources */, AF4810F009909FBA00FB32B8 /* Sources */, AF4810F309909FBA00FB32B8 /* Frameworks */, AF4810F709909FBA00FB32B8 /* Rez */, AFA3D97109C03DD000E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AF4810EC09909FBA00FB32B8 /* PBXTargetDependency */, ); name = DangerBall; productName = DangerBall; productReference = AF4810FB09909FBA00FB32B8 /* DangerBall.saver */; productType = "com.apple.product-type.bundle"; }; AF4812500990CE2700FB32B8 /* Gears */ = { isa = PBXNativeTarget; buildConfigurationList = AF4812610990CE2700FB32B8 /* Build configuration list for PBXNativeTarget "Gears" */; buildPhases = ( AF4812530990CE2700FB32B8 /* Resources */, AF4812550990CE2700FB32B8 /* Sources */, AF4812590990CE2700FB32B8 /* Frameworks */, AF4812600990CE2700FB32B8 /* Rez */, AFA3D98309C03DEE00E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AF4812510990CE2700FB32B8 /* PBXTargetDependency */, ); name = Gears; productName = Gears; productReference = AF4812640990CE2700FB32B8 /* Gears.saver */; productType = "com.apple.product-type.bundle"; }; AF4812B30990D3D900FB32B8 /* Pipes */ = { isa = PBXNativeTarget; buildConfigurationList = AF4812C30990D3D900FB32B8 /* Build configuration list for PBXNativeTarget "Pipes" */; buildPhases = ( AF4812B60990D3D900FB32B8 /* Resources */, AF4812B80990D3D900FB32B8 /* Sources */, AF4812BB0990D3D900FB32B8 /* Frameworks */, AF4812C20990D3D900FB32B8 /* Rez */, AFA3D9B509C03E5700E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AF4812B40990D3D900FB32B8 /* PBXTargetDependency */, ); name = Pipes; productName = Pipes; productReference = AF4812C60990D3D900FB32B8 /* Pipes.saver */; productType = "com.apple.product-type.bundle"; }; AF48DEEF0A0C25E000F94CF9 /* GLSchool */ = { isa = PBXNativeTarget; buildConfigurationList = AF48DF000A0C25E000F94CF9 /* Build configuration list for PBXNativeTarget "GLSchool" */; buildPhases = ( AF48DEF20A0C25E000F94CF9 /* Resources */, AF48DEF40A0C25E000F94CF9 /* Sources */, AF48DEF70A0C25E000F94CF9 /* Frameworks */, AF48DEFE0A0C25E000F94CF9 /* Rez */, AF48DEFF0A0C25E000F94CF9 /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AF48DEF00A0C25E000F94CF9 /* PBXTargetDependency */, ); name = GLSchool; productName = GLSchool; productReference = AF48DF030A0C25E000F94CF9 /* GLSchool.saver */; productType = "com.apple.product-type.bundle"; }; AF4A3449102A593600A81B2A /* Surfaces */ = { isa = PBXNativeTarget; buildConfigurationList = AF4A345A102A593600A81B2A /* Build configuration list for PBXNativeTarget "Surfaces" */; buildPhases = ( AF4A344C102A593600A81B2A /* Resources */, AF4A344E102A593600A81B2A /* Sources */, AF4A3451102A593600A81B2A /* Frameworks */, AF4A3458102A593600A81B2A /* Rez */, AF4A3459102A593600A81B2A /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AF4A344A102A593600A81B2A /* PBXTargetDependency */, ); name = Surfaces; productName = Surfaces; productReference = AF4A345D102A593600A81B2A /* Surfaces.saver */; productType = "com.apple.product-type.bundle"; }; AF4FD6E60CE7A486005EE58E /* Lockward */ = { isa = PBXNativeTarget; buildConfigurationList = AF4FD6F70CE7A486005EE58E /* Build configuration list for PBXNativeTarget "Lockward" */; buildPhases = ( AF4FD6E90CE7A486005EE58E /* Resources */, AF4FD6EB0CE7A486005EE58E /* Sources */, AF4FD6EE0CE7A486005EE58E /* Frameworks */, AF4FD6F50CE7A486005EE58E /* Rez */, AF4FD6F60CE7A486005EE58E /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AF4FD6E70CE7A486005EE58E /* PBXTargetDependency */, ); name = Lockward; productName = Lockward; productReference = AF4FD6FA0CE7A486005EE58E /* Lockward.saver */; productType = "com.apple.product-type.bundle"; }; AF4FF4BA0D52CBDE00666F98 /* CubicGrid */ = { isa = PBXNativeTarget; buildConfigurationList = AF4FF4CB0D52CBDE00666F98 /* Build configuration list for PBXNativeTarget "CubicGrid" */; buildPhases = ( AF4FF4BD0D52CBDE00666F98 /* Resources */, AF4FF4BF0D52CBDE00666F98 /* Sources */, AF4FF4C20D52CBDE00666F98 /* Frameworks */, AF4FF4C90D52CBDE00666F98 /* Rez */, AF4FF4CA0D52CBDE00666F98 /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AF4FF4BB0D52CBDE00666F98 /* PBXTargetDependency */, ); name = CubicGrid; productName = CubicGrid; productReference = AF4FF4CE0D52CBDE00666F98 /* CubicGrid.saver */; productType = "com.apple.product-type.bundle"; }; AF5C9AF91A0CCE6E00B0147A /* Cityflow */ = { isa = PBXNativeTarget; buildConfigurationList = AF5C9B0A1A0CCE6E00B0147A /* Build configuration list for PBXNativeTarget "Cityflow" */; buildPhases = ( AF5C9AFC1A0CCE6E00B0147A /* Resources */, AF5C9AFE1A0CCE6E00B0147A /* Sources */, AF5C9B011A0CCE6E00B0147A /* Frameworks */, AF5C9B081A0CCE6E00B0147A /* Rez */, AF5C9B091A0CCE6E00B0147A /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AF5C9AFA1A0CCE6E00B0147A /* PBXTargetDependency */, ); name = Cityflow; productName = DangerBall; productReference = AF5C9B0D1A0CCE6E00B0147A /* Cityflow.saver */; productType = "com.apple.product-type.bundle"; }; AF63A7F11AB4EDDB00593C75 /* RomanBoy */ = { isa = PBXNativeTarget; buildConfigurationList = AF63A8031AB4EDDB00593C75 /* Build configuration list for PBXNativeTarget "RomanBoy" */; buildPhases = ( AF63A7F41AB4EDDB00593C75 /* Resources */, AF63A7F61AB4EDDB00593C75 /* Sources */, AF63A7F91AB4EDDB00593C75 /* Frameworks */, AF63A8011AB4EDDB00593C75 /* Rez */, AF63A8021AB4EDDB00593C75 /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AF63A7F21AB4EDDB00593C75 /* PBXTargetDependency */, ); name = RomanBoy; productName = Klein; productReference = AF63A8061AB4EDDB00593C75 /* RomanBoy.saver */; productType = "com.apple.product-type.bundle"; }; AF63F2471C3465BE0033E133 /* Apple2-iOS */ = { isa = PBXNativeTarget; buildConfigurationList = AF63F44B1C3465BE0033E133 /* Build configuration list for PBXNativeTarget "Apple2-iOS" */; buildPhases = ( AF63F24F1C3465BE0033E133 /* Update Function Table */, AF63F2501C3465BE0033E133 /* Resources */, AF63F3271C3465BE0033E133 /* Sources */, AF63F4401C3465BE0033E133 /* Frameworks */, AF63F44A1C3465BE0033E133 /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AF63F2481C3465BE0033E133 /* PBXTargetDependency */, AF63F24A1C3465BE0033E133 /* PBXTargetDependency */, AF63F24C1C3465BE0033E133 /* PBXTargetDependency */, ); name = "Apple2-iOS"; productName = SaverTester; productReference = AF63F44E1C3465BE0033E133 /* Apple2.app */; productType = "com.apple.product-type.application"; }; AF63F4501C34682A0033E133 /* Phosphor-iOS */ = { isa = PBXNativeTarget; buildConfigurationList = AF63F4711C34682A0033E133 /* Build configuration list for PBXNativeTarget "Phosphor-iOS" */; buildPhases = ( AF63F4571C34682A0033E133 /* Update Function Table */, AF63F4581C34682A0033E133 /* Resources */, AF63F45E1C34682A0033E133 /* Sources */, AF63F4661C34682A0033E133 /* Frameworks */, AF63F4701C34682A0033E133 /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AF63F4511C34682A0033E133 /* PBXTargetDependency */, AF63F4531C34682A0033E133 /* PBXTargetDependency */, AF63F4551C34682A0033E133 /* PBXTargetDependency */, ); name = "Phosphor-iOS"; productName = SaverTester; productReference = AF63F4741C34682A0033E133 /* Phosphor.app */; productType = "com.apple.product-type.application"; }; AF63F4781C3469FC0033E133 /* TestX11-iOS */ = { isa = PBXNativeTarget; buildConfigurationList = AF63F4971C3469FC0033E133 /* Build configuration list for PBXNativeTarget "TestX11-iOS" */; buildPhases = ( AF63F47F1C3469FC0033E133 /* Update Function Table */, AF63F4801C3469FC0033E133 /* Resources */, AF63F4861C3469FC0033E133 /* Sources */, AF63F48C1C3469FC0033E133 /* Frameworks */, AF63F4961C3469FC0033E133 /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AF63F4791C3469FC0033E133 /* PBXTargetDependency */, AF63F47B1C3469FC0033E133 /* PBXTargetDependency */, AF63F47D1C3469FC0033E133 /* PBXTargetDependency */, ); name = "TestX11-iOS"; productName = SaverTester; productReference = AF63F49A1C3469FC0033E133 /* TestX11.app */; productType = "com.apple.product-type.application"; }; AF6423F2099FF9C2000F4CD4 /* Extrusion */ = { isa = PBXNativeTarget; buildConfigurationList = AF642402099FF9C2000F4CD4 /* Build configuration list for PBXNativeTarget "Extrusion" */; buildPhases = ( AF6423F5099FF9C2000F4CD4 /* Resources */, AF6423F7099FF9C2000F4CD4 /* Sources */, AF6423FA099FF9C2000F4CD4 /* Frameworks */, AF642401099FF9C2000F4CD4 /* Rez */, AFA3D97909C03DDD00E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AF6423F3099FF9C2000F4CD4 /* PBXTargetDependency */, ); name = Extrusion; productName = Extrusion; productReference = AF642405099FF9C2000F4CD4 /* Extrusion.saver */; productType = "com.apple.product-type.bundle"; }; AF6425CC09A18855000F4CD4 /* HyperCube */ = { isa = PBXNativeTarget; buildConfigurationList = AF6425D909A18855000F4CD4 /* Build configuration list for PBXNativeTarget "HyperCube" */; buildPhases = ( AF6425CF09A18855000F4CD4 /* Resources */, AF6425D109A18855000F4CD4 /* Sources */, AF6425D409A18855000F4CD4 /* Frameworks */, AF6425D809A18855000F4CD4 /* Rez */, AFA3D88D09C03C3600E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AF6425CD09A18855000F4CD4 /* PBXTargetDependency */, ); name = HyperCube; productName = HyperCube; productReference = AF6425DC09A18856000F4CD4 /* HyperCube.saver */; productType = "com.apple.product-type.bundle"; }; AF6425EC09A189EC000F4CD4 /* Qix */ = { isa = PBXNativeTarget; buildConfigurationList = AF6425F909A189EC000F4CD4 /* Build configuration list for PBXNativeTarget "Qix" */; buildPhases = ( AF6425EF09A189EC000F4CD4 /* Resources */, AF6425F109A189EC000F4CD4 /* Sources */, AF6425F409A189EC000F4CD4 /* Frameworks */, AF6425F809A189EC000F4CD4 /* Rez */, AFA3D8C309C03C9300E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AF6425ED09A189EC000F4CD4 /* PBXTargetDependency */, ); name = Qix; productName = Qix; productReference = AF6425FC09A189EC000F4CD4 /* Qix.saver */; productType = "com.apple.product-type.bundle"; }; AF64260F09A18D6C000F4CD4 /* HyperBall */ = { isa = PBXNativeTarget; buildConfigurationList = AF64261C09A18D6C000F4CD4 /* Build configuration list for PBXNativeTarget "HyperBall" */; buildPhases = ( AF64261209A18D6C000F4CD4 /* Resources */, AF64261409A18D6C000F4CD4 /* Sources */, AF64261709A18D6C000F4CD4 /* Frameworks */, AF64261B09A18D6C000F4CD4 /* Rez */, AFA3D88B09C03C3200E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AF64261009A18D6C000F4CD4 /* PBXTargetDependency */, ); name = HyperBall; productName = HyperBall; productReference = AF64261F09A18D6C000F4CD4 /* HyperBall.saver */; productType = "com.apple.product-type.bundle"; }; AF64262C09A18F54000F4CD4 /* Moire2 */ = { isa = PBXNativeTarget; buildConfigurationList = AF64263909A18F54000F4CD4 /* Build configuration list for PBXNativeTarget "Moire2" */; buildPhases = ( AF64262F09A18F54000F4CD4 /* Resources */, AF64263109A18F54000F4CD4 /* Sources */, AF64263409A18F54000F4CD4 /* Frameworks */, AF64263809A18F54000F4CD4 /* Rez */, AFA3D8AB09C03C6D00E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AF64262D09A18F54000F4CD4 /* PBXTargetDependency */, ); name = Moire2; productName = Moire2; productReference = AF64263C09A18F54000F4CD4 /* Moire2.saver */; productType = "com.apple.product-type.bundle"; }; AF64264F09A19229000F4CD4 /* Munch */ = { isa = PBXNativeTarget; buildConfigurationList = AF64265C09A19229000F4CD4 /* Build configuration list for PBXNativeTarget "Munch" */; buildPhases = ( AF64265209A19229000F4CD4 /* Resources */, AF64265409A19229000F4CD4 /* Sources */, AF64265709A19229000F4CD4 /* Frameworks */, AF64265B09A19229000F4CD4 /* Rez */, AFA3D8AD09C03C7000E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AF64265009A19229000F4CD4 /* PBXTargetDependency */, ); name = Munch; productName = Munch; productReference = AF64265F09A19229000F4CD4 /* Munch.saver */; productType = "com.apple.product-type.bundle"; }; AF64267B09A194B0000F4CD4 /* Goop */ = { isa = PBXNativeTarget; buildConfigurationList = AF64268809A194B0000F4CD4 /* Build configuration list for PBXNativeTarget "Goop" */; buildPhases = ( AF64267E09A194B0000F4CD4 /* Resources */, AF64268009A194B0000F4CD4 /* Sources */, AF64268309A194B0000F4CD4 /* Frameworks */, AF64268709A194B0000F4CD4 /* Rez */, AFA3D88109C03C2100E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AF64267C09A194B0000F4CD4 /* PBXTargetDependency */, ); name = Goop; productName = Goop; productReference = AF64268B09A194B0000F4CD4 /* Goop.saver */; productType = "com.apple.product-type.bundle"; }; AF64277109A1D37A000F4CD4 /* SpeedMine */ = { isa = PBXNativeTarget; buildConfigurationList = AF64277E09A1D37A000F4CD4 /* Build configuration list for PBXNativeTarget "SpeedMine" */; buildPhases = ( AF64277409A1D37A000F4CD4 /* Resources */, AF64277609A1D37A000F4CD4 /* Sources */, AF64277909A1D37A000F4CD4 /* Frameworks */, AF64277D09A1D37A000F4CD4 /* Rez */, AFA3D8D709C03CB400E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AF64277209A1D37A000F4CD4 /* PBXTargetDependency */, ); name = SpeedMine; productName = SpeedMine; productReference = AF64278109A1D37A000F4CD4 /* SpeedMine.saver */; productType = "com.apple.product-type.bundle"; }; AF6427A809A2DE36000F4CD4 /* Bubbles */ = { isa = PBXNativeTarget; buildConfigurationList = AF6427B509A2DE36000F4CD4 /* Build configuration list for PBXNativeTarget "Bubbles" */; buildPhases = ( AF6427AB09A2DE36000F4CD4 /* Resources */, AF6427AD09A2DE36000F4CD4 /* Sources */, AF6427B009A2DE36000F4CD4 /* Frameworks */, AF6427B409A2DE36000F4CD4 /* Rez */, AFA3D69409C03B6200E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AF6427A909A2DE36000F4CD4 /* PBXTargetDependency */, ); name = Bubbles; productName = Bubbles; productReference = AF6427B809A2DE36000F4CD4 /* Bubbles.saver */; productType = "com.apple.product-type.bundle"; }; AF68A47E19196CF800D41CD1 /* Tessellimage */ = { isa = PBXNativeTarget; buildConfigurationList = AF68A48F19196CF800D41CD1 /* Build configuration list for PBXNativeTarget "Tessellimage" */; buildPhases = ( AF68A48119196CF800D41CD1 /* Resources */, AF68A48319196CF800D41CD1 /* Sources */, AF68A48619196CF800D41CD1 /* Frameworks */, AF68A48D19196CF800D41CD1 /* Rez */, AF68A48E19196CF800D41CD1 /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AF68A47F19196CF800D41CD1 /* PBXTargetDependency */, ); name = Tessellimage; productName = Attraction; productReference = AF68A49219196CF800D41CD1 /* Tessellimage.saver */; productType = "com.apple.product-type.bundle"; }; AF73FF221A09877F00E485E9 /* BinaryRing */ = { isa = PBXNativeTarget; buildConfigurationList = AF73FF331A09877F00E485E9 /* Build configuration list for PBXNativeTarget "BinaryRing" */; buildPhases = ( AF73FF251A09877F00E485E9 /* Resources */, AF73FF271A09877F00E485E9 /* Sources */, AF73FF2A1A09877F00E485E9 /* Frameworks */, AF73FF311A09877F00E485E9 /* Rez */, AF73FF321A09877F00E485E9 /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AF73FF231A09877F00E485E9 /* PBXTargetDependency */, ); name = BinaryRing; productName = Attraction; productReference = AF73FF361A09877F00E485E9 /* BinaryRing.saver */; productType = "com.apple.product-type.bundle"; }; AF7510FF1782B5B900380EA1 /* Kaleidocycle */ = { isa = PBXNativeTarget; buildConfigurationList = AF75110F1782B5B900380EA1 /* Build configuration list for PBXNativeTarget "Kaleidocycle" */; buildPhases = ( AF7511021782B5B900380EA1 /* Resources */, AF7511041782B5B900380EA1 /* Sources */, AF7511071782B5B900380EA1 /* Frameworks */, AF75110D1782B5B900380EA1 /* Rez */, AF75110E1782B5B900380EA1 /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AF7511001782B5B900380EA1 /* PBXTargetDependency */, ); name = Kaleidocycle; productName = Voronoi; productReference = AF7511121782B5B900380EA1 /* Kaleidocycle.saver */; productType = "com.apple.product-type.bundle"; }; AF7776E409B63ABF00EA3033 /* Phosphor */ = { isa = PBXNativeTarget; buildConfigurationList = AF7776F309B63ABF00EA3033 /* Build configuration list for PBXNativeTarget "Phosphor" */; buildPhases = ( AF7776E709B63ABF00EA3033 /* Resources */, AF7776E909B63ABF00EA3033 /* Sources */, AF7776EE09B63ABF00EA3033 /* Frameworks */, AF7776F209B63ABF00EA3033 /* Rez */, AFA3D8B909C03C8200E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AF7776E509B63ABF00EA3033 /* PBXTargetDependency */, ); name = Phosphor; productName = Phosphor; productReference = AF7776F609B63ABF00EA3033 /* Phosphor.saver */; productType = "com.apple.product-type.bundle"; }; AF77771A09B6416100EA3033 /* Pacman */ = { isa = PBXNativeTarget; buildConfigurationList = AF77772709B6416100EA3033 /* Build configuration list for PBXNativeTarget "Pacman" */; buildPhases = ( AF77771D09B6416100EA3033 /* Resources */, AF77771F09B6416100EA3033 /* Sources */, AF77772209B6416100EA3033 /* Frameworks */, AF77772609B6416100EA3033 /* Rez */, AFA3D93509C03D5700E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AF77771B09B6416100EA3033 /* PBXTargetDependency */, ); name = Pacman; productName = Pacman; productReference = AF77772A09B6416100EA3033 /* Pacman.saver */; productType = "com.apple.product-type.bundle"; }; AF77773E09B6446500EA3033 /* FlipScreen3D */ = { isa = PBXNativeTarget; buildConfigurationList = AF77774E09B6446500EA3033 /* Build configuration list for PBXNativeTarget "FlipScreen3D" */; buildPhases = ( AF77774109B6446500EA3033 /* Resources */, AF77774309B6446500EA3033 /* Sources */, AF77774609B6446500EA3033 /* Frameworks */, AF77774D09B6446500EA3033 /* Rez */, AFA3D97D09C03DE400E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AF77773F09B6446500EA3033 /* PBXTargetDependency */, ); name = FlipScreen3D; productName = FlipScreen3D; productReference = AF77775109B6446500EA3033 /* FlipScreen3D.saver */; productType = "com.apple.product-type.bundle"; }; AF77777409B6497800EA3033 /* Gleidescope */ = { isa = PBXNativeTarget; buildConfigurationList = AF77778509B6497800EA3033 /* Build configuration list for PBXNativeTarget "Gleidescope" */; buildPhases = ( AF77777709B6497800EA3033 /* Resources */, AF77777909B6497800EA3033 /* Sources */, AF77777D09B6497800EA3033 /* Frameworks */, AF77778409B6497800EA3033 /* Rez */, AFA3D98509C03DF100E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AF77777509B6497800EA3033 /* PBXTargetDependency */, ); name = Gleidescope; productName = Gleidescope; productReference = AF34085609B80AB000F2CEC1 /* Gleidescope.saver */; productType = "com.apple.product-type.bundle"; }; AF77778E09B64A5200EA3033 /* MirrorBlob */ = { isa = PBXNativeTarget; buildConfigurationList = AF77779F09B64A5200EA3033 /* Build configuration list for PBXNativeTarget "MirrorBlob" */; buildPhases = ( AF77779109B64A5200EA3033 /* Resources */, AF77779309B64A5200EA3033 /* Sources */, AF77779709B64A5200EA3033 /* Frameworks */, AF77779E09B64A5200EA3033 /* Rez */, AFA3D9A909C03E3D00E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AF77778F09B64A5200EA3033 /* PBXTargetDependency */, ); name = MirrorBlob; productName = MirrorBlob; productReference = AF7777A209B64A5200EA3033 /* MirrorBlob.saver */; productType = "com.apple.product-type.bundle"; }; AF7777A809B64B2600EA3033 /* StonerView */ = { isa = PBXNativeTarget; buildConfigurationList = AF7777B909B64B2600EA3033 /* Build configuration list for PBXNativeTarget "StonerView" */; buildPhases = ( AF7777AB09B64B2600EA3033 /* Resources */, AF7777AD09B64B2600EA3033 /* Sources */, AF7777B109B64B2600EA3033 /* Frameworks */, AF7777B809B64B2600EA3033 /* Rez */, AFA3D9CF09C03E8700E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AF7777A909B64B2600EA3033 /* PBXTargetDependency */, ); name = StonerView; productName = StonerView; productReference = AF34085509B80AB000F2CEC1 /* StonerView.saver */; productType = "com.apple.product-type.bundle"; }; AF7777D009B64C6B00EA3033 /* GLSlideshow */ = { isa = PBXNativeTarget; buildConfigurationList = AF7777E109B64C6B00EA3033 /* Build configuration list for PBXNativeTarget "GLSlideshow" */; buildPhases = ( AF7777D309B64C6B00EA3033 /* Resources */, AF7777D509B64C6B00EA3033 /* Sources */, AF7777D909B64C6B00EA3033 /* Frameworks */, AF7777E009B64C6B00EA3033 /* Rez */, AFA3D99509C03E1900E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AF7777D109B64C6B00EA3033 /* PBXTargetDependency */, ); name = GLSlideshow; productName = GLSlideshow; productReference = AF7777E409B64C6B00EA3033 /* GLSlideshow.saver */; productType = "com.apple.product-type.bundle"; }; AF7777EA09B64E3100EA3033 /* FlipText */ = { isa = PBXNativeTarget; buildConfigurationList = AF7777FB09B64E3100EA3033 /* Build configuration list for PBXNativeTarget "FlipText" */; buildPhases = ( AF7777ED09B64E3100EA3033 /* Resources */, AF7777EF09B64E3100EA3033 /* Sources */, AF7777F309B64E3100EA3033 /* Frameworks */, AF7777FA09B64E3100EA3033 /* Rez */, AFA3D97F09C03DE700E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AF7777EB09B64E3100EA3033 /* PBXTargetDependency */, ); name = FlipText; productName = FlipText; productReference = AF7777FE09B64E3100EA3033 /* FlipText.saver */; productType = "com.apple.product-type.bundle"; }; AF77781009B6504400EA3033 /* StarWars */ = { isa = PBXNativeTarget; buildConfigurationList = AF77782209B6504400EA3033 /* Build configuration list for PBXNativeTarget "StarWars" */; buildPhases = ( AF77781309B6504400EA3033 /* Resources */, AF77781509B6504400EA3033 /* Sources */, AF77781A09B6504400EA3033 /* Frameworks */, AF77782109B6504400EA3033 /* Rez */, AFA3D9CD09C03E8400E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AF77781109B6504400EA3033 /* PBXTargetDependency */, ); name = StarWars; productName = StarWars; productReference = AF34085409B80AAF00F2CEC1 /* StarWars.saver */; productType = "com.apple.product-type.bundle"; }; AF77784409B6528100EA3033 /* Carousel */ = { isa = PBXNativeTarget; buildConfigurationList = AF77785509B6528100EA3033 /* Build configuration list for PBXNativeTarget "Carousel" */; buildPhases = ( AF77784709B6528100EA3033 /* Resources */, AF77784A09B6528100EA3033 /* Sources */, AF77784D09B6528100EA3033 /* Frameworks */, AF77785409B6528100EA3033 /* Rez */, AFA3D96509C03DB900E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AF77784509B6528100EA3033 /* PBXTargetDependency */, ); name = Carousel; productName = Carousel; productReference = AF77785809B6528100EA3033 /* Carousel.saver */; productType = "com.apple.product-type.bundle"; }; AF77786109B6536000EA3033 /* DNAlogo */ = { isa = PBXNativeTarget; buildConfigurationList = AF77787109B6536000EA3033 /* Build configuration list for PBXNativeTarget "DNAlogo" */; buildPhases = ( AF77786409B6536000EA3033 /* Resources */, AF77786609B6536000EA3033 /* Sources */, AF77786909B6536000EA3033 /* Frameworks */, AF77787009B6536000EA3033 /* Rez */, AFA3D97309C03DD300E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AF77786209B6536000EA3033 /* PBXTargetDependency */, ); name = DNAlogo; productName = DNAlogo; productReference = AF77787409B6536000EA3033 /* DNAlogo.saver */; productType = "com.apple.product-type.bundle"; }; AF77787F09B6563500EA3033 /* FontGlide */ = { isa = PBXNativeTarget; buildConfigurationList = AF77788C09B6563500EA3033 /* Build configuration list for PBXNativeTarget "FontGlide" */; buildPhases = ( AF77788209B6563500EA3033 /* Resources */, AF77788409B6563500EA3033 /* Sources */, AF77788709B6563500EA3033 /* Frameworks */, AF77788B09B6563500EA3033 /* Rez */, AFA3D87D09C03C1B00E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AF77788009B6563500EA3033 /* PBXTargetDependency */, ); name = FontGlide; productName = FontGlide; productReference = AF34085709B80AB000F2CEC1 /* FontGlide.saver */; productType = "com.apple.product-type.bundle"; }; AF7778A509B659C800EA3033 /* BlitSpin */ = { isa = PBXNativeTarget; buildConfigurationList = AF7778B209B659C800EA3033 /* Build configuration list for PBXNativeTarget "BlitSpin" */; buildPhases = ( AF7778A809B659C800EA3033 /* Resources */, AF7778AA09B659C800EA3033 /* Sources */, AF7778AD09B659C800EA3033 /* Frameworks */, AF7778B109B659C800EA3033 /* Rez */, AFCCCBD309C03B0000353F4D /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AF7778A609B659C800EA3033 /* PBXTargetDependency */, ); name = BlitSpin; productName = BlitSpin; productReference = AF7778B509B659C800EA3033 /* BlitSpin.saver */; productType = "com.apple.product-type.bundle"; }; AF78D175142DD8F3002AAF77 /* Hilbert */ = { isa = PBXNativeTarget; buildConfigurationList = AF78D186142DD8F3002AAF77 /* Build configuration list for PBXNativeTarget "Hilbert" */; buildPhases = ( AF78D178142DD8F3002AAF77 /* Resources */, AF78D17A142DD8F3002AAF77 /* Sources */, AF78D17D142DD8F3002AAF77 /* Frameworks */, AF78D184142DD8F3002AAF77 /* Rez */, AF78D185142DD8F3002AAF77 /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AF78D176142DD8F3002AAF77 /* PBXTargetDependency */, ); name = Hilbert; productName = Hilbert; productReference = AF78D189142DD8F3002AAF77 /* Hilbert.saver */; productType = "com.apple.product-type.bundle"; }; AF794F64099748450059A8B0 /* Demon */ = { isa = PBXNativeTarget; buildConfigurationList = AF794F71099748450059A8B0 /* Build configuration list for PBXNativeTarget "Demon" */; buildPhases = ( AF794F67099748450059A8B0 /* Resources */, AF794F69099748450059A8B0 /* Sources */, AF794F6C099748450059A8B0 /* Frameworks */, AF794F70099748450059A8B0 /* Rez */, AFA3D90B09C03D1100E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AF794F65099748450059A8B0 /* PBXTargetDependency */, ); name = Demon; productName = Demon; productReference = AF794F74099748450059A8B0 /* Demon.saver */; productType = "com.apple.product-type.bundle"; }; AF794F8E09974A320059A8B0 /* Fiberlamp */ = { isa = PBXNativeTarget; buildConfigurationList = AF794F9B09974A320059A8B0 /* Build configuration list for PBXNativeTarget "Fiberlamp" */; buildPhases = ( AF794F9109974A320059A8B0 /* Resources */, AF794F9309974A320059A8B0 /* Sources */, AF794F9609974A320059A8B0 /* Frameworks */, AF794F9A09974A320059A8B0 /* Rez */, AFA3D91509C03D2100E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AF794F8F09974A320059A8B0 /* PBXTargetDependency */, ); name = Fiberlamp; productName = Fiberlamp; productReference = AF794F9E09974A320059A8B0 /* Fiberlamp.saver */; productType = "com.apple.product-type.bundle"; }; AF794FCD09974FA60059A8B0 /* Loop */ = { isa = PBXNativeTarget; buildConfigurationList = AF794FDA09974FA60059A8B0 /* Build configuration list for PBXNativeTarget "Loop" */; buildPhases = ( AF794FD009974FA60059A8B0 /* Resources */, AF794FD209974FA60059A8B0 /* Sources */, AF794FD509974FA60059A8B0 /* Frameworks */, AF794FD909974FA60059A8B0 /* Rez */, AFA3D93109C03D5100E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AF794FCE09974FA60059A8B0 /* PBXTargetDependency */, ); name = Loop; productName = Loop; productReference = AF794FDD09974FA60059A8B0 /* Loop.saver */; productType = "com.apple.product-type.bundle"; }; AF7ACFC019FF0A9200BD752B /* GeodesicGears */ = { isa = PBXNativeTarget; buildConfigurationList = AF7ACFD119FF0A9200BD752B /* Build configuration list for PBXNativeTarget "GeodesicGears" */; buildPhases = ( AF7ACFC319FF0A9200BD752B /* Resources */, AF7ACFC519FF0A9200BD752B /* Sources */, AF7ACFC819FF0A9200BD752B /* Frameworks */, AF7ACFCF19FF0A9200BD752B /* Rez */, AF7ACFD019FF0A9200BD752B /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AF7ACFC119FF0A9200BD752B /* PBXTargetDependency */, ); name = GeodesicGears; productName = DangerBall; productReference = AF7ACFD419FF0A9200BD752B /* GeodesicGears.saver */; productType = "com.apple.product-type.bundle"; }; AF918977158FC00A002B5D1E /* XScreenSaver-iOS */ = { isa = PBXNativeTarget; buildConfigurationList = AF91898C158FC00A002B5D1E /* Build configuration list for PBXNativeTarget "XScreenSaver-iOS" */; buildPhases = ( AF7E080115925EE300D81407 /* ICMP Sanity Check */, AF94E7421A16F66900289B93 /* Update Function Table */, AF91897B158FC00A002B5D1E /* Resources */, AF918985158FC00A002B5D1E /* Sources */, AF918989158FC00A002B5D1E /* Frameworks */, AF91898A158FC00A002B5D1E /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AF918978158FC00A002B5D1E /* PBXTargetDependency */, AF7E07FE15925DF200D81407 /* PBXTargetDependency */, AF7E080015925DFE00D81407 /* PBXTargetDependency */, ); name = "XScreenSaver-iOS"; productName = SaverTester; productReference = AF91898F158FC00A002B5D1E /* XScreenSaver.app */; productType = "com.apple.product-type.application"; }; AF97572D099C317000B05160 /* IMSMap */ = { isa = PBXNativeTarget; buildConfigurationList = AF97573A099C317000B05160 /* Build configuration list for PBXNativeTarget "IMSMap" */; buildPhases = ( AF975730099C317000B05160 /* Resources */, AF975732099C317000B05160 /* Sources */, AF975735099C317000B05160 /* Frameworks */, AF975739099C317000B05160 /* Rez */, AFA3D89109C03C3C00E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AF97572E099C317000B05160 /* PBXTargetDependency */, ); name = IMSMap; productName = IMSMap; productReference = AF97573D099C317000B05160 /* IMSMap.saver */; productType = "com.apple.product-type.bundle"; }; AF975775099C374A00B05160 /* Moire */ = { isa = PBXNativeTarget; buildConfigurationList = AF975782099C374A00B05160 /* Build configuration list for PBXNativeTarget "Moire" */; buildPhases = ( AF975778099C374A00B05160 /* Resources */, AF97577A099C374A00B05160 /* Sources */, AF97577D099C374A00B05160 /* Frameworks */, AF975781099C374A00B05160 /* Rez */, AFA3D8A909C03C6900E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AF975776099C374A00B05160 /* PBXTargetDependency */, ); name = Moire; productName = Moire; productReference = AF975785099C374A00B05160 /* Moire.saver */; productType = "com.apple.product-type.bundle"; }; AF9757C2099C3E6300B05160 /* RDbomb */ = { isa = PBXNativeTarget; buildConfigurationList = AF9757CF099C3E6300B05160 /* Build configuration list for PBXNativeTarget "RDbomb" */; buildPhases = ( AF9757C5099C3E6300B05160 /* Resources */, AF9757C7099C3E6300B05160 /* Sources */, AF9757CA099C3E6300B05160 /* Frameworks */, AF9757CE099C3E6300B05160 /* Rez */, AFA3D8C509C03C9600E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AF9757C3099C3E6300B05160 /* PBXTargetDependency */, ); name = RDbomb; productName = RDbomb; productReference = AF9757D2099C3E6300B05160 /* RDbomb.saver */; productType = "com.apple.product-type.bundle"; }; AF975808099C41D500B05160 /* XFlame */ = { isa = PBXNativeTarget; buildConfigurationList = AF975815099C41D500B05160 /* Build configuration list for PBXNativeTarget "XFlame" */; buildPhases = ( AF97580B099C41D500B05160 /* Resources */, AF97580D099C41D500B05160 /* Sources */, AF975810099C41D500B05160 /* Frameworks */, AF975814099C41D500B05160 /* Rez */, AFA3D8F109C03CE100E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AF975809099C41D500B05160 /* PBXTargetDependency */, ); name = XFlame; productName = XFlame; productReference = AF975818099C41D500B05160 /* XFlame.saver */; productType = "com.apple.product-type.bundle"; }; AF975865099C475900B05160 /* ShadeBobs */ = { isa = PBXNativeTarget; buildConfigurationList = AF975872099C475900B05160 /* Build configuration list for PBXNativeTarget "ShadeBobs" */; buildPhases = ( AF975868099C475900B05160 /* Resources */, AF97586A099C475900B05160 /* Sources */, AF97586D099C475900B05160 /* Frameworks */, AF975871099C475900B05160 /* Rez */, AFA3D8CF09C03CA800E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AF975866099C475900B05160 /* PBXTargetDependency */, ); name = ShadeBobs; productName = ShadeBobs; productReference = AF975875099C475900B05160 /* ShadeBobs.saver */; productType = "com.apple.product-type.bundle"; }; AF975A36099C681F00B05160 /* MetaBalls */ = { isa = PBXNativeTarget; buildConfigurationList = AF975A43099C681F00B05160 /* Build configuration list for PBXNativeTarget "MetaBalls" */; buildPhases = ( AF975A39099C681F00B05160 /* Resources */, AF975A3B099C681F00B05160 /* Sources */, AF975A3E099C681F00B05160 /* Frameworks */, AF975A42099C681F00B05160 /* Rez */, AFA3D8A509C03C6200E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AF975A37099C681F00B05160 /* PBXTargetDependency */, ); name = MetaBalls; productName = MetaBalls; productReference = AF975A46099C681F00B05160 /* MetaBalls.saver */; productType = "com.apple.product-type.bundle"; }; AF975A6C099C6AB200B05160 /* Eruption */ = { isa = PBXNativeTarget; buildConfigurationList = AF975A79099C6AB200B05160 /* Build configuration list for PBXNativeTarget "Eruption" */; buildPhases = ( AF975A6F099C6AB200B05160 /* Resources */, AF975A71099C6AB200B05160 /* Sources */, AF975A74099C6AB200B05160 /* Frameworks */, AF975A78099C6AB200B05160 /* Rez */, AFA3D87509C03C0400E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AF975A6D099C6AB200B05160 /* PBXTargetDependency */, ); name = Eruption; productName = Eruption; productReference = AF975A7C099C6AB200B05160 /* Eruption.saver */; productType = "com.apple.product-type.bundle"; }; AF975A86099C6BC300B05160 /* Barcode */ = { isa = PBXNativeTarget; buildConfigurationList = AF975A93099C6BC300B05160 /* Build configuration list for PBXNativeTarget "Barcode" */; buildPhases = ( AF975A89099C6BC300B05160 /* Resources */, AF975A8B099C6BC300B05160 /* Sources */, AF975A8E099C6BC300B05160 /* Frameworks */, AF975A92099C6BC300B05160 /* Rez */, AFCCCBCF09C03AF800353F4D /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AF975A87099C6BC300B05160 /* PBXTargetDependency */, ); name = Barcode; productName = Barcode; productReference = AF975A96099C6BC300B05160 /* Barcode.saver */; productType = "com.apple.product-type.bundle"; }; AF975AD7099C6EB100B05160 /* Fireworkx */ = { isa = PBXNativeTarget; buildConfigurationList = AF975AE4099C6EB100B05160 /* Build configuration list for PBXNativeTarget "Fireworkx" */; buildPhases = ( AF975ADA099C6EB100B05160 /* Resources */, AF975ADC099C6EB100B05160 /* Sources */, AF975ADF099C6EB100B05160 /* Frameworks */, AF975AE3099C6EB100B05160 /* Rez */, AFA3D87709C03C0A00E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AF975AD8099C6EB100B05160 /* PBXTargetDependency */, ); name = Fireworkx; productName = Fireworkx; productReference = AF975AE7099C6EB100B05160 /* Fireworkx.saver */; productType = "com.apple.product-type.bundle"; }; AF975AFC099C6FE400B05160 /* MemScroller */ = { isa = PBXNativeTarget; buildConfigurationList = AF975B09099C6FE400B05160 /* Build configuration list for PBXNativeTarget "MemScroller" */; buildPhases = ( AF975AFF099C6FE400B05160 /* Resources */, AF975B01099C6FE400B05160 /* Sources */, AF975B04099C6FE400B05160 /* Frameworks */, AF975B08099C6FE400B05160 /* Rez */, AFA3D8A309C03C5F00E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AF975AFD099C6FE400B05160 /* PBXTargetDependency */, ); name = MemScroller; productName = MemScroller; productReference = AF975B0C099C6FE400B05160 /* MemScroller.saver */; productType = "com.apple.product-type.bundle"; }; AF975C12099C8C1500B05160 /* Halo */ = { isa = PBXNativeTarget; buildConfigurationList = AF975C1F099C8C1500B05160 /* Build configuration list for PBXNativeTarget "Halo" */; buildPhases = ( AF975C15099C8C1500B05160 /* Resources */, AF975C17099C8C1500B05160 /* Sources */, AF975C1A099C8C1500B05160 /* Frameworks */, AF975C1E099C8C1500B05160 /* Rez */, AFA3D88709C03C2A00E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AF975C13099C8C1500B05160 /* PBXTargetDependency */, ); name = Halo; productName = Halo; productReference = AF975C22099C8C1500B05160 /* Halo.saver */; productType = "com.apple.product-type.bundle"; }; AF975C3D099C8DCF00B05160 /* Greynetic */ = { isa = PBXNativeTarget; buildConfigurationList = AF975C4B099C8DCF00B05160 /* Build configuration list for PBXNativeTarget "Greynetic" */; buildPhases = ( AF975C40099C8DCF00B05160 /* Resources */, AF975C43099C8DCF00B05160 /* Sources */, AF975C46099C8DCF00B05160 /* Frameworks */, AF975C4A099C8DCF00B05160 /* Rez */, AFA3D88309C03C2400E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AF975C3E099C8DCF00B05160 /* PBXTargetDependency */, ); name = Greynetic; productName = Greynetic; productReference = AF975C4E099C8DCF00B05160 /* Greynetic.saver */; productType = "com.apple.product-type.bundle"; }; AF975C5D099C8F3F00B05160 /* NoseGuy */ = { isa = PBXNativeTarget; buildConfigurationList = AF975C6B099C8F3F00B05160 /* Build configuration list for PBXNativeTarget "NoseGuy" */; buildPhases = ( AF975C60099C8F3F00B05160 /* Resources */, AF975C63099C8F3F00B05160 /* Sources */, AF975C66099C8F3F00B05160 /* Frameworks */, AF975C6A099C8F3F00B05160 /* Rez */, AFA3D8B109C03C7600E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AF975C5E099C8F3F00B05160 /* PBXTargetDependency */, ); name = NoseGuy; productName = NoseGuy; productReference = AF975C6E099C8F3F00B05160 /* NoseGuy.saver */; productType = "com.apple.product-type.bundle"; }; AF975D52099CA0F000B05160 /* Rocks */ = { isa = PBXNativeTarget; buildConfigurationList = AF975D60099CA0F000B05160 /* Build configuration list for PBXNativeTarget "Rocks" */; buildPhases = ( AF975D55099CA0F000B05160 /* Resources */, AF975D58099CA0F000B05160 /* Sources */, AF975D5B099CA0F000B05160 /* Frameworks */, AF975D5F099CA0F000B05160 /* Rez */, AFA3D8C909C03C9E00E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AF975D53099CA0F000B05160 /* PBXTargetDependency */, ); name = Rocks; productName = Rocks; productReference = AF975D63099CA0F000B05160 /* Rocks.saver */; productType = "com.apple.product-type.bundle"; }; AF976FBB0989CAA2001F8B92 /* Deco */ = { isa = PBXNativeTarget; buildConfigurationList = AF976FBE0989CAA4001F8B92 /* Build configuration list for PBXNativeTarget "Deco" */; buildPhases = ( AF976FB80989CAA2001F8B92 /* Resources */, AF976FB90989CAA2001F8B92 /* Sources */, AF976FBA0989CAA2001F8B92 /* Frameworks */, AF9770150989D0F6001F8B92 /* Rez */, AFA3D86D09C03BF300E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AF480922098C412F00FB32B8 /* PBXTargetDependency */, ); name = Deco; productName = Deco; productReference = AF976FBC0989CAA2001F8B92 /* Deco.saver */; productType = "com.apple.product-type.bundle"; }; AF9770290989D1E6001F8B92 /* Rorschach */ = { isa = PBXNativeTarget; buildConfigurationList = AF97703D0989D1E6001F8B92 /* Build configuration list for PBXNativeTarget "Rorschach" */; buildPhases = ( AF97702A0989D1E6001F8B92 /* Resources */, AF97702C0989D1E6001F8B92 /* Sources */, AF9770390989D1E6001F8B92 /* Frameworks */, AF97703C0989D1E6001F8B92 /* Rez */, AFA3D8CB09C03CA100E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AF48092A098C419000FB32B8 /* PBXTargetDependency */, ); name = Rorschach; productName = Rorschach; productReference = AF9770400989D1E6001F8B92 /* Rorschach.saver */; productType = "com.apple.product-type.bundle"; }; AF9770660989D2F6001F8B92 /* Attraction */ = { isa = PBXNativeTarget; buildConfigurationList = AF97707A0989D2F6001F8B92 /* Build configuration list for PBXNativeTarget "Attraction" */; buildPhases = ( AF9770670989D2F6001F8B92 /* Resources */, AF9770690989D2F6001F8B92 /* Sources */, AF9770760989D2F6001F8B92 /* Frameworks */, AF9770790989D2F6001F8B92 /* Rez */, AFCCCBCD09C03AF400353F4D /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AF48092D098C41AE00FB32B8 /* PBXTargetDependency */, ); name = Attraction; productName = Attraction; productReference = AF97707D0989D2F6001F8B92 /* Attraction.saver */; productType = "com.apple.product-type.bundle"; }; AF9771D60989DC4A001F8B92 /* SaverTester */ = { isa = PBXNativeTarget; buildConfigurationList = AF9771DA0989DC4B001F8B92 /* Build configuration list for PBXNativeTarget "SaverTester" */; buildPhases = ( AF9771D30989DC4A001F8B92 /* Resources */, AF9771D40989DC4A001F8B92 /* Sources */, AF9771D50989DC4A001F8B92 /* Frameworks */, AF578FA11434E918002455DD /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AF480936098C421200FB32B8 /* PBXTargetDependency */, ); name = SaverTester; productName = SaverTester; productReference = AF9771D70989DC4A001F8B92 /* SaverTester.app */; productType = "com.apple.product-type.application"; }; AF998EDA0A083DB30051049D /* TopBlock */ = { isa = PBXNativeTarget; buildConfigurationList = AF998EEB0A083DB30051049D /* Build configuration list for PBXNativeTarget "TopBlock" */; buildPhases = ( AF998EDD0A083DB30051049D /* Resources */, AF998EDF0A083DB30051049D /* Sources */, AF998EE20A083DB30051049D /* Frameworks */, AF998EE90A083DB30051049D /* Rez */, AF998EEA0A083DB30051049D /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AF998EDB0A083DB30051049D /* PBXTargetDependency */, ); name = TopBlock; productName = TopBlock; productReference = AF998EEE0A083DB30051049D /* TopBlock.saver */; productType = "com.apple.product-type.bundle"; }; AF9D466609B5109C006E59CF /* DecayScreen */ = { isa = PBXNativeTarget; buildConfigurationList = AF9D467309B5109C006E59CF /* Build configuration list for PBXNativeTarget "DecayScreen" */; buildPhases = ( AF9D466909B5109C006E59CF /* Resources */, AF9D466B09B5109C006E59CF /* Sources */, AF9D466E09B5109C006E59CF /* Frameworks */, AF9D467209B5109C006E59CF /* Rez */, AFA3D86B09C03BEF00E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AF9D466709B5109C006E59CF /* PBXTargetDependency */, ); name = DecayScreen; productName = DecayScreen; productReference = AF9D467609B5109C006E59CF /* DecayScreen.saver */; productType = "com.apple.product-type.bundle"; }; AF9D474409B5300A006E59CF /* SlideScreen */ = { isa = PBXNativeTarget; buildConfigurationList = AF9D475109B5300A006E59CF /* Build configuration list for PBXNativeTarget "SlideScreen" */; buildPhases = ( AF9D474709B5300A006E59CF /* Resources */, AF9D474909B5300A006E59CF /* Sources */, AF9D474C09B5300A006E59CF /* Frameworks */, AF9D475009B5300A006E59CF /* Rez */, AFA3D8D109C03CAB00E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AF9D474509B5300A006E59CF /* PBXTargetDependency */, ); name = SlideScreen; productName = SlideScreen; productReference = AF9D475409B5300A006E59CF /* SlideScreen.saver */; productType = "com.apple.product-type.bundle"; }; AF9D475F09B53166006E59CF /* Zoom */ = { isa = PBXNativeTarget; buildConfigurationList = AF9D476C09B53166006E59CF /* Build configuration list for PBXNativeTarget "Zoom" */; buildPhases = ( AF9D476209B53166006E59CF /* Resources */, AF9D476409B53166006E59CF /* Sources */, AF9D476709B53166006E59CF /* Frameworks */, AF9D476B09B53166006E59CF /* Rez */, AFA3D8FF09C03CF700E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AF9D476009B53166006E59CF /* PBXTargetDependency */, ); name = Zoom; productName = Zoom; productReference = AF9D476F09B53166006E59CF /* Zoom.saver */; productType = "com.apple.product-type.bundle"; }; AF9D48DB09B53322006E59CF /* Bumps */ = { isa = PBXNativeTarget; buildConfigurationList = AF9D48E809B53322006E59CF /* Build configuration list for PBXNativeTarget "Bumps" */; buildPhases = ( AF9D48DE09B53322006E59CF /* Resources */, AF9D48E009B53322006E59CF /* Sources */, AF9D48E309B53322006E59CF /* Frameworks */, AF9D48E709B53322006E59CF /* Rez */, AFA3D85B09C03BD300E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AF9D48DC09B53322006E59CF /* PBXTargetDependency */, ); name = Bumps; productName = Bumps; productReference = AF9D48EB09B53322006E59CF /* Bumps.saver */; productType = "com.apple.product-type.bundle"; }; AF9D48F409B535DA006E59CF /* Distort */ = { isa = PBXNativeTarget; buildConfigurationList = AF9D490109B535DA006E59CF /* Build configuration list for PBXNativeTarget "Distort" */; buildPhases = ( AF9D48F709B535DA006E59CF /* Resources */, AF9D48F909B535DA006E59CF /* Sources */, AF9D48FC09B535DA006E59CF /* Frameworks */, AF9D490009B535DA006E59CF /* Rez */, AFA3D87109C03BFB00E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AF9D48F509B535DA006E59CF /* PBXTargetDependency */, ); name = Distort; productName = Distort; productReference = AF9D490409B535DA006E59CF /* Distort.saver */; productType = "com.apple.product-type.bundle"; }; AF9D492B09B53CBA006E59CF /* Ripples */ = { isa = PBXNativeTarget; buildConfigurationList = AF9D493809B53CBA006E59CF /* Build configuration list for PBXNativeTarget "Ripples" */; buildPhases = ( AF9D492E09B53CBA006E59CF /* Resources */, AF9D493009B53CBA006E59CF /* Sources */, AF9D493309B53CBA006E59CF /* Frameworks */, AF9D493709B53CBA006E59CF /* Rez */, AFA3D8C709C03C9900E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AF9D492C09B53CBA006E59CF /* PBXTargetDependency */, ); name = Ripples; productName = Ripples; productReference = AF9D493B09B53CBA006E59CF /* Ripples.saver */; productType = "com.apple.product-type.bundle"; }; AF9D495409B53FC9006E59CF /* RotZoomer */ = { isa = PBXNativeTarget; buildConfigurationList = AF9D496109B53FC9006E59CF /* Build configuration list for PBXNativeTarget "RotZoomer" */; buildPhases = ( AF9D495709B53FC9006E59CF /* Resources */, AF9D495909B53FC9006E59CF /* Sources */, AF9D495C09B53FC9006E59CF /* Frameworks */, AF9D496009B53FC9006E59CF /* Rez */, AFA3D8CD09C03CA400E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AF9D495509B53FC9006E59CF /* PBXTargetDependency */, ); name = RotZoomer; productName = RotZoomer; productReference = AF9D496409B53FC9006E59CF /* RotZoomer.saver */; productType = "com.apple.product-type.bundle"; }; AF9D496C09B5411D006E59CF /* Twang */ = { isa = PBXNativeTarget; buildConfigurationList = AF9D497909B5411D006E59CF /* Build configuration list for PBXNativeTarget "Twang" */; buildPhases = ( AF9D496F09B5411D006E59CF /* Resources */, AF9D497109B5411D006E59CF /* Sources */, AF9D497409B5411D006E59CF /* Frameworks */, AF9D497809B5411D006E59CF /* Rez */, AFA3D8E509C03CCD00E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AF9D496D09B5411D006E59CF /* PBXTargetDependency */, ); name = Twang; productName = Twang; productReference = AF9D497C09B5411D006E59CF /* Twang.saver */; productType = "com.apple.product-type.bundle"; }; AF9D499709B544C2006E59CF /* Spotlight */ = { isa = PBXNativeTarget; buildConfigurationList = AF9D49A409B544C2006E59CF /* Build configuration list for PBXNativeTarget "Spotlight" */; buildPhases = ( AF9D499A09B544C2006E59CF /* Resources */, AF9D499C09B544C2006E59CF /* Sources */, AF9D499F09B544C2006E59CF /* Frameworks */, AF9D49A309B544C2006E59CF /* Rez */, AFA3D8D909C03CB700E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AF9D499809B544C2006E59CF /* PBXTargetDependency */, ); name = Spotlight; productName = Spotlight; productReference = AF9D49A709B544C3006E59CF /* Spotlight.saver */; productType = "com.apple.product-type.bundle"; }; AF9D4C6909B59F27006E59CF /* XLyap */ = { isa = PBXNativeTarget; buildConfigurationList = AF9D4C7609B59F27006E59CF /* Build configuration list for PBXNativeTarget "XLyap" */; buildPhases = ( AF9D4C6C09B59F27006E59CF /* Resources */, AF9D4C6E09B59F27006E59CF /* Sources */, AF9D4C7109B59F27006E59CF /* Frameworks */, AF9D4C7509B59F27006E59CF /* Rez */, AFA3D8F709C03CEA00E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AF9D4C6A09B59F27006E59CF /* PBXTargetDependency */, ); name = XLyap; productName = XLyap; productReference = AF9D4C7909B59F27006E59CF /* XLyap.saver */; productType = "com.apple.product-type.bundle"; }; AF9D4CE709B5AA8E006E59CF /* Pong */ = { isa = PBXNativeTarget; buildConfigurationList = AF9D4CF409B5AA8E006E59CF /* Build configuration list for PBXNativeTarget "Pong" */; buildPhases = ( AF9D4CEA09B5AA8E006E59CF /* Resources */, AF9D4CEC09B5AA8E006E59CF /* Sources */, AF9D4CEF09B5AA8E006E59CF /* Frameworks */, AF9D4CF309B5AA8E006E59CF /* Rez */, AFA3D8BD09C03C8900E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AF9D4CE809B5AA8E006E59CF /* PBXTargetDependency */, ); name = Pong; productName = Pong; productReference = AF9D4CF709B5AA8E006E59CF /* Pong.saver */; productType = "com.apple.product-type.bundle"; }; AF9D4D7E09B5B2DC006E59CF /* XAnalogTV */ = { isa = PBXNativeTarget; buildConfigurationList = AF9D4D8C09B5B2DC006E59CF /* Build configuration list for PBXNativeTarget "XAnalogTV" */; buildPhases = ( AF9D4D8109B5B2DC006E59CF /* Resources */, AF9D4D8309B5B2DC006E59CF /* Sources */, AF9D4D8709B5B2DC006E59CF /* Frameworks */, AF9D4D8B09B5B2DC006E59CF /* Rez */, AFA3D8F309C03CE400E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AF9D4D7F09B5B2DC006E59CF /* PBXTargetDependency */, ); name = XAnalogTV; productName = XAnalogTV; productReference = AF9D4D8F09B5B2DC006E59CF /* XAnalogTV.saver */; productType = "com.apple.product-type.bundle"; }; AF9D4DAF09B5B71E006E59CF /* BSOD */ = { isa = PBXNativeTarget; buildConfigurationList = AF9D4DBD09B5B71E006E59CF /* Build configuration list for PBXNativeTarget "BSOD" */; buildPhases = ( AF9D4DB209B5B71E006E59CF /* Resources */, AF9D4DB409B5B71E006E59CF /* Sources */, AF9D4DB809B5B71E006E59CF /* Frameworks */, AF9D4DBC09B5B71E006E59CF /* Rez */, AFA3D69209C03B5C00E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AF9D4DB009B5B71E006E59CF /* PBXTargetDependency */, ); name = BSOD; productName = BSOD; productReference = AF9D4DC009B5B71E006E59CF /* BSOD.saver */; productType = "com.apple.product-type.bundle"; }; AF9D4DEC09B5BB19006E59CF /* Apple2 */ = { isa = PBXNativeTarget; buildConfigurationList = AF9D4DFB09B5BB19006E59CF /* Build configuration list for PBXNativeTarget "Apple2" */; buildPhases = ( AF9D4DEF09B5BB19006E59CF /* Resources */, AF9D4DF109B5BB19006E59CF /* Sources */, AF9D4DF609B5BB19006E59CF /* Frameworks */, AF9D4DFA09B5BB19006E59CF /* Rez */, AFCCCBCB09C03AEE00353F4D /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AF9D4DED09B5BB19006E59CF /* PBXTargetDependency */, ); name = Apple2; productName = Apple2; productReference = AF9D4DFE09B5BB19006E59CF /* Apple2.saver */; productType = "com.apple.product-type.bundle"; }; AF9E7EBE190F4C1B00A8B01F /* enable_gc */ = { isa = PBXNativeTarget; buildConfigurationList = AF9E7EC5190F4C1C00A8B01F /* Build configuration list for PBXNativeTarget "enable_gc" */; buildPhases = ( AF9E7EBB190F4C1B00A8B01F /* Sources */, AF9E7EBC190F4C1B00A8B01F /* Frameworks */, AF9E7EBD190F4C1B00A8B01F /* CopyFiles */, ); buildRules = ( ); dependencies = ( ); name = enable_gc; productName = enable_gc; productReference = AF9E7EBF190F4C1B00A8B01F /* enable_gc */; productType = "com.apple.product-type.tool"; }; AFA2118C1CD59DAF00C0D2A1 /* RaverHoop */ = { isa = PBXNativeTarget; buildConfigurationList = AFA2119E1CD59DAF00C0D2A1 /* Build configuration list for PBXNativeTarget "RaverHoop" */; buildPhases = ( AFA2118F1CD59DAF00C0D2A1 /* Resources */, AFA211911CD59DAF00C0D2A1 /* Sources */, AFA211941CD59DAF00C0D2A1 /* Frameworks */, AFA2119C1CD59DAF00C0D2A1 /* Rez */, AFA2119D1CD59DAF00C0D2A1 /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AFA2118D1CD59DAF00C0D2A1 /* PBXTargetDependency */, ); name = RaverHoop; productName = DangerBall; productReference = AFA211A11CD59DAF00C0D2A1 /* RaverHoop.saver */; productType = "com.apple.product-type.bundle"; }; AFA3392E0B058505002B0E7D /* WebCollage */ = { isa = PBXNativeTarget; buildConfigurationList = AFA3393D0B058505002B0E7D /* Build configuration list for PBXNativeTarget "WebCollage" */; buildPhases = ( AFA339310B058505002B0E7D /* Resources */, AFA339340B058505002B0E7D /* Sources */, AFA339370B058505002B0E7D /* Frameworks */, AFA3393B0B058505002B0E7D /* Rez */, AFA3393C0B058505002B0E7D /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AFA3392F0B058505002B0E7D /* PBXTargetDependency */, AFA33BDC0B058952002B0E7D /* PBXTargetDependency */, AFA33C040B058E3C002B0E7D /* PBXTargetDependency */, ); name = WebCollage; productName = WebCollage; productReference = AFA339400B058505002B0E7D /* WebCollage.saver */; productType = "com.apple.product-type.bundle"; }; AFA33BC60B058740002B0E7D /* webcollage-helper */ = { isa = PBXNativeTarget; buildConfigurationList = AFA33BCB0B058754002B0E7D /* Build configuration list for PBXNativeTarget "webcollage-helper" */; buildPhases = ( AFA33BC40B058740002B0E7D /* Sources */, AFA33BC50B058740002B0E7D /* Frameworks */, ); buildRules = ( ); dependencies = ( ); name = "webcollage-helper"; productName = "webcollage-helper"; productReference = AFA33BC70B058740002B0E7D /* webcollage-helper */; productType = "com.apple.product-type.tool"; }; AFA55946099330B000F3E977 /* Cage */ = { isa = PBXNativeTarget; buildConfigurationList = AFA55957099330B000F3E977 /* Build configuration list for PBXNativeTarget "Cage" */; buildPhases = ( AFA55949099330B000F3E977 /* Resources */, AFA5594B099330B000F3E977 /* Sources */, AFA5594F099330B000F3E977 /* Frameworks */, AFA55956099330B000F3E977 /* Rez */, AFA3D96309C03DB500E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AFA55947099330B000F3E977 /* PBXTargetDependency */, ); name = Cage; productName = Cage; productReference = AFA5595A099330B000F3E977 /* Cage.saver */; productType = "com.apple.product-type.bundle"; }; AFA5596D0993317900F3E977 /* Moebius */ = { isa = PBXNativeTarget; buildConfigurationList = AFA5597C0993317900F3E977 /* Build configuration list for PBXNativeTarget "Moebius" */; buildPhases = ( AFA559700993317900F3E977 /* Resources */, AFA559720993317900F3E977 /* Sources */, AFA559740993317900F3E977 /* Frameworks */, AFA5597B0993317900F3E977 /* Rez */, AFA3D9AB09C03E4200E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AFA5596E0993317900F3E977 /* PBXTargetDependency */, ); name = Moebius; productName = Moebius; productReference = AFA5597F0993317900F3E977 /* Moebius.saver */; productType = "com.apple.product-type.bundle"; }; AFA559920993322100F3E977 /* Superquadrics */ = { isa = PBXNativeTarget; buildConfigurationList = AFA559A10993322100F3E977 /* Build configuration list for PBXNativeTarget "Superquadrics" */; buildPhases = ( AFA559950993322100F3E977 /* Resources */, AFA559970993322100F3E977 /* Sources */, AFA559990993322100F3E977 /* Frameworks */, AFA559A00993322100F3E977 /* Rez */, AFA3D9D109C03E8B00E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AFA559930993322100F3E977 /* PBXTargetDependency */, ); name = Superquadrics; productName = Superquadrics; productReference = AFA559A40993322100F3E977 /* Superquadrics.saver */; productType = "com.apple.product-type.bundle"; }; AFA559B50993328000F3E977 /* Morph3D */ = { isa = PBXNativeTarget; buildConfigurationList = AFA559C40993328000F3E977 /* Build configuration list for PBXNativeTarget "Morph3D" */; buildPhases = ( AFA559B80993328000F3E977 /* Resources */, AFA559BA0993328000F3E977 /* Sources */, AFA559BC0993328000F3E977 /* Frameworks */, AFA559C30993328000F3E977 /* Rez */, AFA3D9AF09C03E4B00E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AFA559B60993328000F3E977 /* PBXTargetDependency */, ); name = Morph3D; productName = Morph3D; productReference = AFA559C70993328000F3E977 /* Morph3D.saver */; productType = "com.apple.product-type.bundle"; }; AFA559CF0993330600F3E977 /* Rubik */ = { isa = PBXNativeTarget; buildConfigurationList = AFA559DE0993330600F3E977 /* Build configuration list for PBXNativeTarget "Rubik" */; buildPhases = ( AFA559D20993330600F3E977 /* Resources */, AFA559D40993330600F3E977 /* Sources */, AFA559D60993330600F3E977 /* Frameworks */, AFA559DD0993330600F3E977 /* Rez */, AFA3D9C109C03E6E00E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AFA559D00993330600F3E977 /* PBXTargetDependency */, ); name = Rubik; productName = Rubik; productReference = AFA559E10993330600F3E977 /* Rubik.saver */; productType = "com.apple.product-type.bundle"; }; AFA55A030993340300F3E977 /* Stairs */ = { isa = PBXNativeTarget; buildConfigurationList = AFA55A120993340300F3E977 /* Build configuration list for PBXNativeTarget "Stairs" */; buildPhases = ( AFA55A060993340300F3E977 /* Resources */, AFA55A080993340300F3E977 /* Sources */, AFA55A0A0993340300F3E977 /* Frameworks */, AFA55A110993340300F3E977 /* Rez */, AFA3D9CB09C03E7F00E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AFA55A040993340300F3E977 /* PBXTargetDependency */, ); name = Stairs; productName = Stairs; productReference = AFA55A150993340300F3E977 /* Stairs.saver */; productType = "com.apple.product-type.bundle"; }; AFA55A20099334A000F3E977 /* Sproingies */ = { isa = PBXNativeTarget; buildConfigurationList = AFA55A2F099334A000F3E977 /* Build configuration list for PBXNativeTarget "Sproingies" */; buildPhases = ( AFA55A23099334A000F3E977 /* Resources */, AFA55A25099334A000F3E977 /* Sources */, AFA55A27099334A000F3E977 /* Frameworks */, AFA55A2E099334A000F3E977 /* Rez */, AFA3D9C909C03E7C00E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AFA55A21099334A000F3E977 /* PBXTargetDependency */, ); name = Sproingies; productName = Sproingies; productReference = AFA55A32099334A000F3E977 /* Sproingies.saver */; productType = "com.apple.product-type.bundle"; }; AFA55A790993364300F3E977 /* Lament */ = { isa = PBXNativeTarget; buildConfigurationList = AFA55A880993364300F3E977 /* Build configuration list for PBXNativeTarget "Lament" */; buildPhases = ( AFA55A7C0993364300F3E977 /* Resources */, AFA55A7E0993364300F3E977 /* Sources */, AFA55A800993364300F3E977 /* Frameworks */, AFA55A870993364300F3E977 /* Rez */, AFA3D9A309C03E3200E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AFA55A7A0993364300F3E977 /* PBXTargetDependency */, ); name = Lament; productName = Lament; productReference = AFA55A8B0993364300F3E977 /* Lament.saver */; productType = "com.apple.product-type.bundle"; }; AFA55ACF09933CEF00F3E977 /* Bubble3D */ = { isa = PBXNativeTarget; buildConfigurationList = AFA55ADE09933CEF00F3E977 /* Build configuration list for PBXNativeTarget "Bubble3D" */; buildPhases = ( AFA55AD209933CEF00F3E977 /* Resources */, AFA55AD409933CEF00F3E977 /* Sources */, AFA55AD609933CEF00F3E977 /* Frameworks */, AFA55ADD09933CEF00F3E977 /* Rez */, AFA3D96109C03DB100E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AFA55AD009933CEF00F3E977 /* PBXTargetDependency */, ); name = Bubble3D; productName = Bubble3D; productReference = AFA55AE109933CEF00F3E977 /* Bubble3D.saver */; productType = "com.apple.product-type.bundle"; }; AFA55B0909933E0500F3E977 /* GLPlanet */ = { isa = PBXNativeTarget; buildConfigurationList = AFA55B1B09933E0500F3E977 /* Build configuration list for PBXNativeTarget "GLPlanet" */; buildPhases = ( AFA55B0C09933E0500F3E977 /* Resources */, AFA55B0E09933E0500F3E977 /* Sources */, AFA55B1309933E0500F3E977 /* Frameworks */, AFA55B1A09933E0500F3E977 /* Rez */, AFA3D99309C03E1600E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AFA55B0A09933E0500F3E977 /* PBXTargetDependency */, ); name = GLPlanet; productName = GLPlanet; productReference = AFA55B1E09933E0500F3E977 /* GLPlanet.saver */; productType = "com.apple.product-type.bundle"; }; AFA55B2509933E8D00F3E977 /* Pulsar */ = { isa = PBXNativeTarget; buildConfigurationList = AFA55B3409933E8D00F3E977 /* Build configuration list for PBXNativeTarget "Pulsar" */; buildPhases = ( AFA55B2809933E8D00F3E977 /* Resources */, AFA55B2A09933E8D00F3E977 /* Sources */, AFA55B2C09933E8D00F3E977 /* Frameworks */, AFA55B3309933E8D00F3E977 /* Rez */, AFA3D9BD09C03E6500E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AFA55B2609933E8D00F3E977 /* PBXTargetDependency */, ); name = Pulsar; productName = Pulsar; productReference = AFA55B3709933E8D00F3E977 /* Pulsar.saver */; productType = "com.apple.product-type.bundle"; }; AFA55B7909933F7200F3E977 /* Sierpinski3D */ = { isa = PBXNativeTarget; buildConfigurationList = AFA55B8809933F7200F3E977 /* Build configuration list for PBXNativeTarget "Sierpinski3D" */; buildPhases = ( AFA55B7C09933F7200F3E977 /* Resources */, AFA55B7E09933F7200F3E977 /* Sources */, AFA55B8009933F7200F3E977 /* Frameworks */, AFA55B8709933F7200F3E977 /* Rez */, AFA3D9C509C03E7400E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AFA55B7A09933F7200F3E977 /* PBXTargetDependency */, ); name = Sierpinski3D; productName = Sierpinski3D; productReference = AFA55B8B09933F7200F3E977 /* Sierpinski3D.saver */; productType = "com.apple.product-type.bundle"; }; AFA55B9109933FDA00F3E977 /* GFlux */ = { isa = PBXNativeTarget; buildConfigurationList = AFA55BA009933FDA00F3E977 /* Build configuration list for PBXNativeTarget "GFlux" */; buildPhases = ( AFA55B9409933FDA00F3E977 /* Resources */, AFA55B9609933FDA00F3E977 /* Sources */, AFA55B9809933FDA00F3E977 /* Frameworks */, AFA55B9F09933FDA00F3E977 /* Rez */, AFA3D98709C03DF400E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AFA55B9209933FDA00F3E977 /* PBXTargetDependency */, ); name = GFlux; productName = GFlux; productReference = AFA55BA309933FDA00F3E977 /* GFlux.saver */; productType = "com.apple.product-type.bundle"; }; AFA55BAB099340CE00F3E977 /* Circuit */ = { isa = PBXNativeTarget; buildConfigurationList = AFA55BBA099340CE00F3E977 /* Build configuration list for PBXNativeTarget "Circuit" */; buildPhases = ( AFA55BAE099340CE00F3E977 /* Resources */, AFA55BB0099340CE00F3E977 /* Sources */, AFA55BB2099340CE00F3E977 /* Frameworks */, AFA55BB9099340CE00F3E977 /* Rez */, AFA3D96709C03DBC00E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AFA55BAC099340CE00F3E977 /* PBXTargetDependency */, ); name = Circuit; productName = Circuit; productReference = AFA55BBD099340CE00F3E977 /* Circuit.saver */; productType = "com.apple.product-type.bundle"; }; AFA55BE40993429100F3E977 /* Menger */ = { isa = PBXNativeTarget; buildConfigurationList = AFA55BF30993429100F3E977 /* Build configuration list for PBXNativeTarget "Menger" */; buildPhases = ( AFA55BE70993429100F3E977 /* Resources */, AFA55BE90993429100F3E977 /* Sources */, AFA55BEB0993429100F3E977 /* Frameworks */, AFA55BF20993429100F3E977 /* Rez */, AFA3D9A709C03E3A00E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AFA55BE50993429100F3E977 /* PBXTargetDependency */, ); name = Menger; productName = Menger; productReference = AFA55BF60993429100F3E977 /* Menger.saver */; productType = "com.apple.product-type.bundle"; }; AFA55C0E0993431300F3E977 /* Engine */ = { isa = PBXNativeTarget; buildConfigurationList = AFA55C1D0993431300F3E977 /* Build configuration list for PBXNativeTarget "Engine" */; buildPhases = ( AFA55C110993431300F3E977 /* Resources */, AFA55C130993431300F3E977 /* Sources */, AFA55C150993431300F3E977 /* Frameworks */, AFA55C1C0993431300F3E977 /* Rez */, AFA3D97709C03DDA00E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AFA55C0F0993431300F3E977 /* PBXTargetDependency */, ); name = Engine; productName = Engine; productReference = AFA55C200993431300F3E977 /* Engine.saver */; productType = "com.apple.product-type.bundle"; }; AFA55C77099349A600F3E977 /* GLSnake */ = { isa = PBXNativeTarget; buildConfigurationList = AFA55C86099349A600F3E977 /* Build configuration list for PBXNativeTarget "GLSnake" */; buildPhases = ( AFA55C7A099349A600F3E977 /* Resources */, AFA55C7C099349A600F3E977 /* Sources */, AFA55C7E099349A600F3E977 /* Frameworks */, AFA55C85099349A600F3E977 /* Rez */, AFA3D99709C03E1C00E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AFA55C78099349A600F3E977 /* PBXTargetDependency */, ); name = GLSnake; productName = GLSnake; productReference = AFA55C89099349A600F3E977 /* GLSnake.saver */; productType = "com.apple.product-type.bundle"; }; AFA55CA909934BB200F3E977 /* Boxed */ = { isa = PBXNativeTarget; buildConfigurationList = AFA55CB809934BB200F3E977 /* Build configuration list for PBXNativeTarget "Boxed" */; buildPhases = ( AFA55CAC09934BB200F3E977 /* Resources */, AFA55CAE09934BB200F3E977 /* Sources */, AFA55CB009934BB200F3E977 /* Frameworks */, AFA55CB709934BB200F3E977 /* Rez */, AFA3D95F09C03DAE00E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AFA55CAA09934BB200F3E977 /* PBXTargetDependency */, ); name = Boxed; productName = Boxed; productReference = AFA55CBB09934BB200F3E977 /* Boxed.saver */; productType = "com.apple.product-type.bundle"; }; AFA55CCC09934CE400F3E977 /* GLForestFire */ = { isa = PBXNativeTarget; buildConfigurationList = AFA55CDB09934CE400F3E977 /* Build configuration list for PBXNativeTarget "GLForestFire" */; buildPhases = ( AFA55CCF09934CE400F3E977 /* Resources */, AFA55CD109934CE400F3E977 /* Sources */, AFA55CD309934CE400F3E977 /* Frameworks */, AFA55CDA09934CE400F3E977 /* Rez */, AFA3D98B09C03DFC00E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AFA55CCD09934CE400F3E977 /* PBXTargetDependency */, ); name = GLForestFire; productName = GLForestFire; productReference = AFA55CDE09934CE400F3E977 /* GLForestFire.saver */; productType = "com.apple.product-type.bundle"; }; AFA55D3C0993565300F3E977 /* SBalls */ = { isa = PBXNativeTarget; buildConfigurationList = AFA55D4B0993565300F3E977 /* Build configuration list for PBXNativeTarget "SBalls" */; buildPhases = ( AFA55D3F0993565300F3E977 /* Resources */, AFA55D410993565300F3E977 /* Sources */, AFA55D430993565300F3E977 /* Frameworks */, AFA55D4A0993565300F3E977 /* Rez */, AFA3D9C309C03E7100E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AFA55D3D0993565300F3E977 /* PBXTargetDependency */, ); name = SBalls; productName = SBalls; productReference = AFA55D4E0993565300F3E977 /* SBalls.saver */; productType = "com.apple.product-type.bundle"; }; AFA55D620993584B00F3E977 /* Cubenetic */ = { isa = PBXNativeTarget; buildConfigurationList = AFA55D710993584B00F3E977 /* Build configuration list for PBXNativeTarget "Cubenetic" */; buildPhases = ( AFA55D650993584B00F3E977 /* Resources */, AFA55D670993584B00F3E977 /* Sources */, AFA55D690993584B00F3E977 /* Frameworks */, AFA55D700993584B00F3E977 /* Rez */, AFA3D96D09C03DCA00E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AFA55D630993584B00F3E977 /* PBXTargetDependency */, ); name = Cubenetic; productName = Cubenetic; productReference = AFA55D740993584B00F3E977 /* Cubenetic.saver */; productType = "com.apple.product-type.bundle"; }; AFA55D7F099358C400F3E977 /* Spheremonics */ = { isa = PBXNativeTarget; buildConfigurationList = AFA55D8E099358C400F3E977 /* Build configuration list for PBXNativeTarget "Spheremonics" */; buildPhases = ( AFA55D82099358C400F3E977 /* Resources */, AFA55D84099358C400F3E977 /* Sources */, AFA55D86099358C400F3E977 /* Frameworks */, AFA55D8D099358C400F3E977 /* Rez */, AFA3D9C709C03E7800E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AFA55D80099358C400F3E977 /* PBXTargetDependency */, ); name = Spheremonics; productName = Spheremonics; productReference = AFA55D91099358C400F3E977 /* Spheremonics.saver */; productType = "com.apple.product-type.bundle"; }; AFA55DC809935D7000F3E977 /* Lavalite */ = { isa = PBXNativeTarget; buildConfigurationList = AFA55DD709935D7000F3E977 /* Build configuration list for PBXNativeTarget "Lavalite" */; buildPhases = ( AFA55DCB09935D7000F3E977 /* Resources */, AFA55DCD09935D7000F3E977 /* Sources */, AFA55DCF09935D7000F3E977 /* Frameworks */, AFA55DD609935D7000F3E977 /* Rez */, AFA3D9A509C03E3600E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AFA55DC909935D7000F3E977 /* PBXTargetDependency */, ); name = Lavalite; productName = Lavalite; productReference = AFA55DDA09935D7000F3E977 /* Lavalite.saver */; productType = "com.apple.product-type.bundle"; }; AFA55DF009935E4900F3E977 /* Queens */ = { isa = PBXNativeTarget; buildConfigurationList = AFA55E0009935E4900F3E977 /* Build configuration list for PBXNativeTarget "Queens" */; buildPhases = ( AFA55DF309935E4900F3E977 /* Resources */, AFA55DF509935E4900F3E977 /* Sources */, AFA55DF809935E4900F3E977 /* Frameworks */, AFA55DFF09935E4900F3E977 /* Rez */, AFA3D9BF09C03E6900E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AFA55DF109935E4900F3E977 /* PBXTargetDependency */, ); name = Queens; productName = Queens; productReference = AFA55E0309935E4900F3E977 /* Queens.saver */; productType = "com.apple.product-type.bundle"; }; AFA55E0D09935EDC00F3E977 /* Endgame */ = { isa = PBXNativeTarget; buildConfigurationList = AFA55E1C09935EDC00F3E977 /* Build configuration list for PBXNativeTarget "Endgame" */; buildPhases = ( AFA55E1009935EDC00F3E977 /* Resources */, AFA55E1209935EDC00F3E977 /* Sources */, AFA55E1409935EDC00F3E977 /* Frameworks */, AFA55E1B09935EDC00F3E977 /* Rez */, AFA3D97509C03DD700E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AFA55E0E09935EDC00F3E977 /* PBXTargetDependency */, ); name = Endgame; productName = Endgame; productReference = AFA55E1F09935EDC00F3E977 /* Endgame.saver */; productType = "com.apple.product-type.bundle"; }; AFA55E2F09935F8E00F3E977 /* GLBlur */ = { isa = PBXNativeTarget; buildConfigurationList = AFA55E3F09935F8E00F3E977 /* Build configuration list for PBXNativeTarget "GLBlur" */; buildPhases = ( AFA55E3209935F8E00F3E977 /* Resources */, AFA55E3409935F8E00F3E977 /* Sources */, AFA55E3709935F8E00F3E977 /* Frameworks */, AFA55E3E09935F8E00F3E977 /* Rez */, AFA3D98909C03DF700E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AFA55E3009935F8E00F3E977 /* PBXTargetDependency */, ); name = GLBlur; productName = GLBlur; productReference = AFA55E4209935F8E00F3E977 /* GLBlur.saver */; productType = "com.apple.product-type.bundle"; }; AFA55E4E09935FF900F3E977 /* FlyingToasters */ = { isa = PBXNativeTarget; buildConfigurationList = AFA55E5D09935FF900F3E977 /* Build configuration list for PBXNativeTarget "FlyingToasters" */; buildPhases = ( AFA55E5109935FF900F3E977 /* Resources */, AFA55E5309935FF900F3E977 /* Sources */, AFA55E5509935FF900F3E977 /* Frameworks */, AFA55E5C09935FF900F3E977 /* Rez */, AFA3D98109C03DEA00E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AFA55E4F09935FF900F3E977 /* PBXTargetDependency */, ); name = FlyingToasters; productName = FlyingToasters; productReference = AFA55E6009935FF900F3E977 /* FlyingToasters.saver */; productType = "com.apple.product-type.bundle"; }; AFA55EC7099360E300F3E977 /* BouncingCow */ = { isa = PBXNativeTarget; buildConfigurationList = AFA55EE0099360E300F3E977 /* Build configuration list for PBXNativeTarget "BouncingCow" */; buildPhases = ( AFA55ECA099360E300F3E977 /* Resources */, AFA55ECC099360E300F3E977 /* Sources */, AFA55ED8099360E300F3E977 /* Frameworks */, AFA55EDF099360E300F3E977 /* Rez */, AFA3D95D09C03DAB00E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AFA55EC8099360E300F3E977 /* PBXTargetDependency */, ); name = BouncingCow; productName = BouncingCow; productReference = AFA55EE3099360E300F3E977 /* BouncingCow.saver */; productType = "com.apple.product-type.bundle"; }; AFA55F06099361B700F3E977 /* JigglyPuff */ = { isa = PBXNativeTarget; buildConfigurationList = AFA55F1B099361B700F3E977 /* Build configuration list for PBXNativeTarget "JigglyPuff" */; buildPhases = ( AFA55F09099361B700F3E977 /* Resources */, AFA55F0B099361B700F3E977 /* Sources */, AFA55F13099361B700F3E977 /* Frameworks */, AFA55F1A099361B700F3E977 /* Rez */, AFA3D99D09C03E2600E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AFA55F07099361B700F3E977 /* PBXTargetDependency */, ); name = JigglyPuff; productName = JigglyPuff; productReference = AFA55F1E099361B700F3E977 /* JigglyPuff.saver */; productType = "com.apple.product-type.bundle"; }; AFA55F2A0993622F00F3E977 /* Klein */ = { isa = PBXNativeTarget; buildConfigurationList = AFA55F390993622F00F3E977 /* Build configuration list for PBXNativeTarget "Klein" */; buildPhases = ( AFA55F2D0993622F00F3E977 /* Resources */, AFA55F2F0993622F00F3E977 /* Sources */, AFA55F310993622F00F3E977 /* Frameworks */, AFA55F380993622F00F3E977 /* Rez */, AFA3D9A109C03E2E00E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AFA55F2B0993622F00F3E977 /* PBXTargetDependency */, ); name = Klein; productName = Klein; productReference = AFA55F3C0993622F00F3E977 /* Klein.saver */; productType = "com.apple.product-type.bundle"; }; AFA55F420993629000F3E977 /* Hypertorus */ = { isa = PBXNativeTarget; buildConfigurationList = AFA55F510993629000F3E977 /* Build configuration list for PBXNativeTarget "Hypertorus" */; buildPhases = ( AFA55F450993629000F3E977 /* Resources */, AFA55F470993629000F3E977 /* Sources */, AFA55F490993629000F3E977 /* Frameworks */, AFA55F500993629000F3E977 /* Rez */, AFA3D99B09C03E2300E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AFA55F430993629000F3E977 /* PBXTargetDependency */, ); name = Hypertorus; productName = HyperTorus; productReference = AFA55F540993629000F3E977 /* Hypertorus.saver */; productType = "com.apple.product-type.bundle"; }; AFA55F720993643600F3E977 /* GLMatrix */ = { isa = PBXNativeTarget; buildConfigurationList = AFA55F810993643600F3E977 /* Build configuration list for PBXNativeTarget "GLMatrix" */; buildPhases = ( AFA55F750993643600F3E977 /* Resources */, AFA55F770993643600F3E977 /* Sources */, AFA55F790993643600F3E977 /* Frameworks */, AFA55F800993643600F3E977 /* Rez */, AFA3D99109C03E1200E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AFA55F730993643600F3E977 /* PBXTargetDependency */, ); name = GLMatrix; productName = GLMatrix; productReference = AFA55F840993643600F3E977 /* GLMatrix.saver */; productType = "com.apple.product-type.bundle"; }; AFA55FD309936BFA00F3E977 /* CubeStorm */ = { isa = PBXNativeTarget; buildConfigurationList = AFA55FE209936BFA00F3E977 /* Build configuration list for PBXNativeTarget "CubeStorm" */; buildPhases = ( AFA55FD609936BFA00F3E977 /* Resources */, AFA55FD809936BFA00F3E977 /* Sources */, AFA55FDA09936BFA00F3E977 /* Frameworks */, AFA55FE109936BFA00F3E977 /* Rez */, AFA3D96F09C03DCD00E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AFA55FD409936BFA00F3E977 /* PBXTargetDependency */, ); name = CubeStorm; productName = CubeStorm; productReference = AFA55FE509936BFA00F3E977 /* CubeStorm.saver */; productType = "com.apple.product-type.bundle"; }; AFA55FF909936C6D00F3E977 /* GLKnots */ = { isa = PBXNativeTarget; buildConfigurationList = AFA5600809936C6D00F3E977 /* Build configuration list for PBXNativeTarget "GLKnots" */; buildPhases = ( AFA55FFC09936C6D00F3E977 /* Resources */, AFA55FFE09936C6D00F3E977 /* Sources */, AFA5600009936C6D00F3E977 /* Frameworks */, AFA5600709936C6D00F3E977 /* Rez */, AFA3D98F09C03E0F00E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AFA55FFA09936C6D00F3E977 /* PBXTargetDependency */, ); name = GLKnots; productName = GLKnots; productReference = AFA5600B09936C6D00F3E977 /* GLKnots.saver */; productType = "com.apple.product-type.bundle"; }; AFA5601409936CC800F3E977 /* BlockTube */ = { isa = PBXNativeTarget; buildConfigurationList = AFA5602309936CC800F3E977 /* Build configuration list for PBXNativeTarget "BlockTube" */; buildPhases = ( AFA5601709936CC800F3E977 /* Resources */, AFA5601909936CC800F3E977 /* Sources */, AFA5601B09936CC800F3E977 /* Frameworks */, AFA5602209936CC800F3E977 /* Rez */, AFA3D95909C03DA400E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AFA5601509936CC800F3E977 /* PBXTargetDependency */, ); name = BlockTube; productName = BlockTube; productReference = AFA5602609936CC800F3E977 /* BlockTube.saver */; productType = "com.apple.product-type.bundle"; }; AFA5603209936D5100F3E977 /* FlipFlop */ = { isa = PBXNativeTarget; buildConfigurationList = AFA5604109936D5100F3E977 /* Build configuration list for PBXNativeTarget "FlipFlop" */; buildPhases = ( AFA5603509936D5100F3E977 /* Resources */, AFA5603709936D5100F3E977 /* Sources */, AFA5603909936D5100F3E977 /* Frameworks */, AFA5604009936D5100F3E977 /* Rez */, AFA3D97B09C03DE000E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AFA5603309936D5100F3E977 /* PBXTargetDependency */, ); name = FlipFlop; productName = FlipFlop; productReference = AFA5604409936D5100F3E977 /* FlipFlop.saver */; productType = "com.apple.product-type.bundle"; }; AFA5604A09936E2100F3E977 /* AntInspect */ = { isa = PBXNativeTarget; buildConfigurationList = AFA5605909936E2100F3E977 /* Build configuration list for PBXNativeTarget "AntInspect" */; buildPhases = ( AFA5604D09936E2100F3E977 /* Resources */, AFA5604F09936E2100F3E977 /* Sources */, AFA5605109936E2100F3E977 /* Frameworks */, AFA5605809936E2100F3E977 /* Rez */, AFA3D94D09C03D8D00E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AFA5604B09936E2100F3E977 /* PBXTargetDependency */, ); name = AntInspect; productName = AntInspect; productReference = AFA5605C09936E2100F3E977 /* AntInspect.saver */; productType = "com.apple.product-type.bundle"; }; AFA5606209936F3800F3E977 /* AntSpotlight */ = { isa = PBXNativeTarget; buildConfigurationList = AFA5607109936F3800F3E977 /* Build configuration list for PBXNativeTarget "AntSpotlight" */; buildPhases = ( AFA5606509936F3800F3E977 /* Resources */, AFA5606709936F3800F3E977 /* Sources */, AFA5606909936F3800F3E977 /* Frameworks */, AFA5607009936F3800F3E977 /* Rez */, AFA3D95109C03D9400E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AFA5606309936F3800F3E977 /* PBXTargetDependency */, ); name = AntSpotlight; productName = AntSpotlight; productReference = AFA5607409936F3800F3E977 /* AntSpotlight.saver */; productType = "com.apple.product-type.bundle"; }; AFA560AE0993718D00F3E977 /* Polytopes */ = { isa = PBXNativeTarget; buildConfigurationList = AFA560BD0993718D00F3E977 /* Build configuration list for PBXNativeTarget "Polytopes" */; buildPhases = ( AFA560B10993718D00F3E977 /* Resources */, AFA560B30993718D00F3E977 /* Sources */, AFA560B50993718D00F3E977 /* Frameworks */, AFA560BC0993718D00F3E977 /* Rez */, AFA3D9B909C03E5E00E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AFA560AF0993718D00F3E977 /* PBXTargetDependency */, ); name = Polytopes; productName = Polytopes; productReference = AFA560C00993718D00F3E977 /* Polytopes.saver */; productType = "com.apple.product-type.bundle"; }; AFA560FD0993781600F3E977 /* Molecule */ = { isa = PBXNativeTarget; buildConfigurationList = AFA5610C0993781600F3E977 /* Build configuration list for PBXNativeTarget "Molecule" */; buildPhases = ( AFA561000993781600F3E977 /* Resources */, AFA561020993781600F3E977 /* Sources */, AFA561040993781600F3E977 /* Frameworks */, AFA5610B0993781600F3E977 /* Rez */, AFA3D9AD09C03E4600E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AFA560FE0993781600F3E977 /* PBXTargetDependency */, AFA5611E0993791D00F3E977 /* PBXTargetDependency */, ); name = Molecule; productName = Molecule; productReference = AFA5610F0993781600F3E977 /* Molecule.saver */; productType = "com.apple.product-type.bundle"; }; AFA5615609937C0D00F3E977 /* BlinkBox */ = { isa = PBXNativeTarget; buildConfigurationList = AFA5616709937C0D00F3E977 /* Build configuration list for PBXNativeTarget "BlinkBox" */; buildPhases = ( AFA5615B09937C0D00F3E977 /* Resources */, AFA5615D09937C0D00F3E977 /* Sources */, AFA5615F09937C0D00F3E977 /* Frameworks */, AFA5616609937C0D00F3E977 /* Rez */, AFA3D95709C03DA100E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AFA5615709937C0D00F3E977 /* PBXTargetDependency */, ); name = BlinkBox; productName = BlinkBox; productReference = AFA5616A09937C0D00F3E977 /* BlinkBox.saver */; productType = "com.apple.product-type.bundle"; }; AFA5617B09937CF100F3E977 /* Noof */ = { isa = PBXNativeTarget; buildConfigurationList = AFA5618A09937CF100F3E977 /* Build configuration list for PBXNativeTarget "Noof" */; buildPhases = ( AFA5617E09937CF100F3E977 /* Resources */, AFA5618009937CF100F3E977 /* Sources */, AFA5618209937CF100F3E977 /* Frameworks */, AFA5618909937CF100F3E977 /* Rez */, AFA3D9B109C03E4E00E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AFA5617C09937CF100F3E977 /* PBXTargetDependency */, ); name = Noof; productName = Noof; productReference = AFA5618D09937CF100F3E977 /* Noof.saver */; productType = "com.apple.product-type.bundle"; }; AFA5619D09937D7E00F3E977 /* Polyhedra */ = { isa = PBXNativeTarget; buildConfigurationList = AFA561AC09937D7E00F3E977 /* Build configuration list for PBXNativeTarget "Polyhedra" */; buildPhases = ( AFA561A009937D7E00F3E977 /* Resources */, AFA561A209937D7E00F3E977 /* Sources */, AFA561A409937D7E00F3E977 /* Frameworks */, AFA561AB09937D7E00F3E977 /* Rez */, AFA3D9B709C03E5B00E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AFA5619E09937D7E00F3E977 /* PBXTargetDependency */, ); name = Polyhedra; productName = Polyhedra; productReference = AFA561AF09937D7E00F3E977 /* Polyhedra.saver */; productType = "com.apple.product-type.bundle"; }; AFA562060993849F00F3E977 /* Providence */ = { isa = PBXNativeTarget; buildConfigurationList = AFA562160993849F00F3E977 /* Build configuration list for PBXNativeTarget "Providence" */; buildPhases = ( AFA562090993849F00F3E977 /* Resources */, AFA5620B0993849F00F3E977 /* Sources */, AFA5620E0993849F00F3E977 /* Frameworks */, AFA562150993849F00F3E977 /* Rez */, AFA3D9BB09C03E6200E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AFA562070993849F00F3E977 /* PBXTargetDependency */, ); name = Providence; productName = Providence; productReference = AFA562190993849F00F3E977 /* Providence.saver */; productType = "com.apple.product-type.bundle"; }; AFA5621F0993852500F3E977 /* Pinion */ = { isa = PBXNativeTarget; buildConfigurationList = AFA5622E0993852500F3E977 /* Build configuration list for PBXNativeTarget "Pinion" */; buildPhases = ( AFA562220993852500F3E977 /* Resources */, AFA562240993852500F3E977 /* Sources */, AFA562260993852500F3E977 /* Frameworks */, AFA5622D0993852500F3E977 /* Rez */, AFA3D9B309C03E5100E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AFA562200993852500F3E977 /* PBXTargetDependency */, ); name = Pinion; productName = Pinion; productReference = AFA562310993852500F3E977 /* Pinion.saver */; productType = "com.apple.product-type.bundle"; }; AFA562BF099392C600F3E977 /* Boing */ = { isa = PBXNativeTarget; buildConfigurationList = AFA562CE099392C600F3E977 /* Build configuration list for PBXNativeTarget "Boing" */; buildPhases = ( AFA562C2099392C600F3E977 /* Resources */, AFA562C4099392C600F3E977 /* Sources */, AFA562C6099392C600F3E977 /* Frameworks */, AFA562CD099392C600F3E977 /* Rez */, AFA3D95B09C03DA800E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AFA562C0099392C600F3E977 /* PBXTargetDependency */, ); name = Boing; productName = Boing; productReference = AFA562D1099392C600F3E977 /* Boing.saver */; productType = "com.apple.product-type.bundle"; }; AFA562DA099393C900F3E977 /* AntMaze */ = { isa = PBXNativeTarget; buildConfigurationList = AFA562E9099393C900F3E977 /* Build configuration list for PBXNativeTarget "AntMaze" */; buildPhases = ( AFA562DD099393C900F3E977 /* Resources */, AFA562DF099393C900F3E977 /* Sources */, AFA562E1099393C900F3E977 /* Frameworks */, AFA562E8099393C900F3E977 /* Rez */, AFA3D94F09C03D9100E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AFA562DB099393C900F3E977 /* PBXTargetDependency */, ); name = AntMaze; productName = AntMaze; productReference = AFA562EC099393C900F3E977 /* AntMaze.saver */; productType = "com.apple.product-type.bundle"; }; AFA562F20993943B00F3E977 /* Tangram */ = { isa = PBXNativeTarget; buildConfigurationList = AFA563010993943B00F3E977 /* Build configuration list for PBXNativeTarget "Tangram" */; buildPhases = ( AFA562F50993943B00F3E977 /* Resources */, AFA562F70993943B00F3E977 /* Sources */, AFA562F90993943B00F3E977 /* Frameworks */, AFA563000993943B00F3E977 /* Rez */, AFA3D9D309C03E8F00E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AFA562F30993943B00F3E977 /* PBXTargetDependency */, ); name = Tangram; productName = Tangram; productReference = AFA563040993943B00F3E977 /* Tangram.saver */; productType = "com.apple.product-type.bundle"; }; AFA563130993951000F3E977 /* Crackberg */ = { isa = PBXNativeTarget; buildConfigurationList = AFA563230993951000F3E977 /* Build configuration list for PBXNativeTarget "Crackberg" */; buildPhases = ( AFA563160993951000F3E977 /* Resources */, AFA563180993951000F3E977 /* Sources */, AFA5631B0993951000F3E977 /* Frameworks */, AFA563220993951000F3E977 /* Rez */, AFA3D96909C03DBF00E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AFA563140993951000F3E977 /* PBXTargetDependency */, ); name = Crackberg; productName = Crackberg; productReference = AFA563260993951000F3E977 /* Crackberg.saver */; productType = "com.apple.product-type.bundle"; }; AFA56331099395ED00F3E977 /* GLHanoi */ = { isa = PBXNativeTarget; buildConfigurationList = AFA56340099395ED00F3E977 /* Build configuration list for PBXNativeTarget "GLHanoi" */; buildPhases = ( AFA56334099395ED00F3E977 /* Resources */, AFA56336099395ED00F3E977 /* Sources */, AFA56338099395ED00F3E977 /* Frameworks */, AFA5633F099395ED00F3E977 /* Rez */, AFA3D98D09C03E0500E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AFA56332099395ED00F3E977 /* PBXTargetDependency */, ); name = GLHanoi; productName = GLHanoi; productReference = AFA56343099395ED00F3E977 /* GLHanoi.saver */; productType = "com.apple.product-type.bundle"; }; AFA56351099396C000F3E977 /* Cube21 */ = { isa = PBXNativeTarget; buildConfigurationList = AFA56360099396C000F3E977 /* Build configuration list for PBXNativeTarget "Cube21" */; buildPhases = ( AFA56354099396C000F3E977 /* Resources */, AFA56356099396C000F3E977 /* Sources */, AFA56358099396C000F3E977 /* Frameworks */, AFA5635F099396C000F3E977 /* Rez */, AFA3D96B09C03DC600E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AFA56352099396C000F3E977 /* PBXTargetDependency */, ); name = Cube21; productName = Cube21; productReference = AFA56363099396C000F3E977 /* Cube21.saver */; productType = "com.apple.product-type.bundle"; }; AFA56379099397B300F3E977 /* TimeTunnel */ = { isa = PBXNativeTarget; buildConfigurationList = AFA56388099397B300F3E977 /* Build configuration list for PBXNativeTarget "TimeTunnel" */; buildPhases = ( AFA5637C099397B300F3E977 /* Resources */, AFA5637E099397B300F3E977 /* Sources */, AFA56380099397B300F3E977 /* Frameworks */, AFA56387099397B300F3E977 /* Rez */, AFA3D9D509C03E9300E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AFA5637A099397B300F3E977 /* PBXTargetDependency */, ); name = TimeTunnel; productName = TimeTunnel; productReference = AFA5638B099397B300F3E977 /* TimeTunnel.saver */; productType = "com.apple.product-type.bundle"; }; AFA563A4099398BB00F3E977 /* Juggler3D */ = { isa = PBXNativeTarget; buildConfigurationList = AFA563B3099398BB00F3E977 /* Build configuration list for PBXNativeTarget "Juggler3D" */; buildPhases = ( AFA563A7099398BB00F3E977 /* Resources */, AFA563A9099398BB00F3E977 /* Sources */, AFA563AB099398BB00F3E977 /* Frameworks */, AFA563B2099398BB00F3E977 /* Rez */, AFA3D99F09C03E2900E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AFA563A5099398BB00F3E977 /* PBXTargetDependency */, ); name = Juggler3D; productName = Juggler3D; productReference = AFA563B6099398BB00F3E977 /* Juggler3D.saver */; productType = "com.apple.product-type.bundle"; }; AFACE8731CC83458008B24CD /* EnergyStream */ = { isa = PBXNativeTarget; buildConfigurationList = AFACE8851CC83458008B24CD /* Build configuration list for PBXNativeTarget "EnergyStream" */; buildPhases = ( AFACE8761CC83458008B24CD /* Resources */, AFACE8781CC83458008B24CD /* Sources */, AFACE87B1CC83458008B24CD /* Frameworks */, AFACE8831CC83458008B24CD /* Rez */, AFACE8841CC83458008B24CD /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AFACE8741CC83458008B24CD /* PBXTargetDependency */, ); name = EnergyStream; productName = DangerBall; productReference = AFACE8881CC83458008B24CD /* EnergyStream.saver */; productType = "com.apple.product-type.bundle"; }; AFB591A7178B812C00EA4005 /* Hexadrop */ = { isa = PBXNativeTarget; buildConfigurationList = AFB591B7178B812C00EA4005 /* Build configuration list for PBXNativeTarget "Hexadrop" */; buildPhases = ( AFB591AA178B812C00EA4005 /* Resources */, AFB591AC178B812C00EA4005 /* Sources */, AFB591AF178B812C00EA4005 /* Frameworks */, AFB591B5178B812C00EA4005 /* Rez */, AFB591B6178B812C00EA4005 /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AFB591A8178B812C00EA4005 /* PBXTargetDependency */, ); name = Hexadrop; productName = Attraction; productReference = AFB591BA178B812C00EA4005 /* Hexadrop.saver */; productType = "com.apple.product-type.bundle"; }; AFBFE74B178642DC00432B21 /* Apple2-OSX */ = { isa = PBXNativeTarget; buildConfigurationList = AFBFE75B178642DC00432B21 /* Build configuration list for PBXNativeTarget "Apple2-OSX" */; buildPhases = ( AFBFE74E178642DC00432B21 /* Resources */, AFBFE751178642DC00432B21 /* Sources */, AFBFE755178642DC00432B21 /* Frameworks */, AFBFE78817894FFA00432B21 /* Copy Standalone Preferences XML File */, AFBFE75A178642DC00432B21 /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AFBFE7641786438900432B21 /* PBXTargetDependency */, AFBFE74C178642DC00432B21 /* PBXTargetDependency */, ); name = "Apple2-OSX"; productName = SaverTester; productReference = AFBFE75E178642DC00432B21 /* Apple2.app */; productType = "com.apple.product-type.application"; }; AFBFE767178647FE00432B21 /* Phosphor-OSX */ = { isa = PBXNativeTarget; buildConfigurationList = AFBFE77B178647FE00432B21 /* Build configuration list for PBXNativeTarget "Phosphor-OSX" */; buildPhases = ( AFBFE76C178647FE00432B21 /* Resources */, AFBFE771178647FE00432B21 /* Sources */, AFBFE775178647FE00432B21 /* Frameworks */, AFBFE78917895AAF00432B21 /* Copy Standalone Preferences XML File */, AFBFE77A178647FE00432B21 /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AFBFE7811786482B00432B21 /* PBXTargetDependency */, AFBFE76A178647FE00432B21 /* PBXTargetDependency */, ); name = "Phosphor-OSX"; productName = SaverTester; productReference = AFBFE77E178647FE00432B21 /* Phosphor.app */; productType = "com.apple.product-type.application"; }; AFC0E8AB1CDC601A008CAFAC /* Hydrostat */ = { isa = PBXNativeTarget; buildConfigurationList = AFC0E8BD1CDC601A008CAFAC /* Build configuration list for PBXNativeTarget "Hydrostat" */; buildPhases = ( AFC0E8AE1CDC601A008CAFAC /* Resources */, AFC0E8B01CDC601A008CAFAC /* Sources */, AFC0E8B31CDC601A008CAFAC /* Frameworks */, AFC0E8BB1CDC601A008CAFAC /* Rez */, AFC0E8BC1CDC601A008CAFAC /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AFC0E8AC1CDC601A008CAFAC /* PBXTargetDependency */, ); name = Hydrostat; productName = DangerBall; productReference = AFC0E8C01CDC601A008CAFAC /* Hydrostat.saver */; productType = "com.apple.product-type.bundle"; }; AFCF833B1AF5B515008BB7E1 /* SplitFlap */ = { isa = PBXNativeTarget; buildConfigurationList = AFCF834D1AF5B515008BB7E1 /* Build configuration list for PBXNativeTarget "SplitFlap" */; buildPhases = ( AFCF833E1AF5B515008BB7E1 /* Resources */, AFCF83401AF5B515008BB7E1 /* Sources */, AFCF83431AF5B515008BB7E1 /* Frameworks */, AFCF834B1AF5B515008BB7E1 /* Rez */, AFCF834C1AF5B515008BB7E1 /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AFCF833C1AF5B515008BB7E1 /* PBXTargetDependency */, ); name = SplitFlap; productName = DangerBall; productReference = AFCF83501AF5B515008BB7E1 /* SplitFlap.saver */; productType = "com.apple.product-type.bundle"; }; AFD51B1B0F063B4A00471C02 /* Photopile */ = { isa = PBXNativeTarget; buildConfigurationList = AFD51B2D0F063B4A00471C02 /* Build configuration list for PBXNativeTarget "Photopile" */; buildPhases = ( AFD51B1E0F063B4A00471C02 /* Resources */, AFD51B210F063B4A00471C02 /* Sources */, AFD51B240F063B4A00471C02 /* Frameworks */, AFD51B2B0F063B4A00471C02 /* Rez */, AFD51B2C0F063B4A00471C02 /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AFD51B1C0F063B4A00471C02 /* PBXTargetDependency */, ); name = Photopile; productName = Photopile; productReference = AFD51B300F063B4A00471C02 /* Photopile.saver */; productType = "com.apple.product-type.bundle"; }; AFD56DF10996A03800BA26F7 /* GLText */ = { isa = PBXNativeTarget; buildConfigurationList = AFD56E010996A03800BA26F7 /* Build configuration list for PBXNativeTarget "GLText" */; buildPhases = ( AFD56DF40996A03800BA26F7 /* Resources */, AFD56DF60996A03800BA26F7 /* Sources */, AFD56DF90996A03800BA26F7 /* Frameworks */, AFD56E000996A03800BA26F7 /* Rez */, AFA3D99909C03E2000E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AFD56DF20996A03800BA26F7 /* PBXTargetDependency */, ); name = GLText; productName = GLText; productReference = AFD56E040996A03800BA26F7 /* GLText.saver */; productType = "com.apple.product-type.bundle"; }; AFD56EAE0996A72600BA26F7 /* Braid */ = { isa = PBXNativeTarget; buildConfigurationList = AFD56EBB0996A72600BA26F7 /* Build configuration list for PBXNativeTarget "Braid" */; buildPhases = ( AFD56EB10996A72600BA26F7 /* Resources */, AFD56EB30996A72600BA26F7 /* Sources */, AFD56EB60996A72600BA26F7 /* Frameworks */, AFD56EBA0996A72600BA26F7 /* Rez */, AFA3D90709C03D0B00E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AFD56EAF0996A72600BA26F7 /* PBXTargetDependency */, ); name = Braid; productName = Braid; productReference = AFD56EBE0996A72600BA26F7 /* Braid.saver */; productType = "com.apple.product-type.bundle"; }; AFD56EDA0996A95700BA26F7 /* Forest */ = { isa = PBXNativeTarget; buildConfigurationList = AFD56EE70996A95700BA26F7 /* Build configuration list for PBXNativeTarget "Forest" */; buildPhases = ( AFD56EDD0996A95700BA26F7 /* Resources */, AFD56EDF0996A95700BA26F7 /* Sources */, AFD56EE20996A95700BA26F7 /* Frameworks */, AFD56EE60996A95700BA26F7 /* Rez */, AFA3D91D09C03D3000E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AFD56EDB0996A95700BA26F7 /* PBXTargetDependency */, ); name = Forest; productName = Forest; productReference = AFD56EEA0996A95700BA26F7 /* Forest.saver */; productType = "com.apple.product-type.bundle"; }; AFD56F0B0996AAFA00BA26F7 /* Vines */ = { isa = PBXNativeTarget; buildConfigurationList = AFD56F180996AAFA00BA26F7 /* Build configuration list for PBXNativeTarget "Vines" */; buildPhases = ( AFD56F0E0996AAFA00BA26F7 /* Resources */, AFD56F100996AAFA00BA26F7 /* Sources */, AFD56F130996AAFA00BA26F7 /* Frameworks */, AFD56F170996AAFA00BA26F7 /* Rez */, AFA3D94909C03D8100E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AFD56F0C0996AAFA00BA26F7 /* PBXTargetDependency */, ); name = Vines; productName = Vines; productReference = AFD56F1B0996AAFA00BA26F7 /* Vines.saver */; productType = "com.apple.product-type.bundle"; }; AFD56F230996AB8A00BA26F7 /* Galaxy */ = { isa = PBXNativeTarget; buildConfigurationList = AFD56F300996AB8A00BA26F7 /* Build configuration list for PBXNativeTarget "Galaxy" */; buildPhases = ( AFD56F260996AB8A00BA26F7 /* Resources */, AFD56F280996AB8A00BA26F7 /* Sources */, AFD56F2B0996AB8A00BA26F7 /* Frameworks */, AFD56F2F0996AB8A00BA26F7 /* Rez */, AFA3D91F09C03D3300E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AFD56F240996AB8A00BA26F7 /* PBXTargetDependency */, ); name = Galaxy; productName = Galaxy; productReference = AFD56F330996AB8A00BA26F7 /* Galaxy.saver */; productType = "com.apple.product-type.bundle"; }; AFD56F4F0996AEEE00BA26F7 /* Grav */ = { isa = PBXNativeTarget; buildConfigurationList = AFD56F5C0996AEEE00BA26F7 /* Build configuration list for PBXNativeTarget "Grav" */; buildPhases = ( AFD56F520996AEEE00BA26F7 /* Resources */, AFD56F540996AEEE00BA26F7 /* Sources */, AFD56F570996AEEE00BA26F7 /* Frameworks */, AFD56F5B0996AEEE00BA26F7 /* Rez */, AFA3D92109C03D3600E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AFD56F500996AEEE00BA26F7 /* PBXTargetDependency */, ); name = Grav; productName = Grav; productReference = AFD56F5F0996AEEE00BA26F7 /* Grav.saver */; productType = "com.apple.product-type.bundle"; }; AFD56F6B0996B01600BA26F7 /* Hopalong */ = { isa = PBXNativeTarget; buildConfigurationList = AFD56F780996B01600BA26F7 /* Build configuration list for PBXNativeTarget "Hopalong" */; buildPhases = ( AFD56F6E0996B01600BA26F7 /* Resources */, AFD56F700996B01600BA26F7 /* Sources */, AFD56F730996B01600BA26F7 /* Frameworks */, AFD56F770996B01600BA26F7 /* Rez */, AFA3D92309C03D3A00E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AFD56F6C0996B01600BA26F7 /* PBXTargetDependency */, ); name = Hopalong; productName = Hopalong; productReference = AFD56F7B0996B01600BA26F7 /* Hopalong.saver */; productType = "com.apple.product-type.bundle"; }; AFD56F8C0996B09400BA26F7 /* Laser */ = { isa = PBXNativeTarget; buildConfigurationList = AFD56F990996B09400BA26F7 /* Build configuration list for PBXNativeTarget "Laser" */; buildPhases = ( AFD56F8F0996B09400BA26F7 /* Resources */, AFD56F910996B09400BA26F7 /* Sources */, AFD56F940996B09400BA26F7 /* Frameworks */, AFD56F980996B09400BA26F7 /* Rez */, AFA3D92909C03D4400E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AFD56F8D0996B09400BA26F7 /* PBXTargetDependency */, ); name = Laser; productName = Laser; productReference = AFD56F9C0996B09400BA26F7 /* Laser.saver */; productType = "com.apple.product-type.bundle"; }; AFD56FA30996B10F00BA26F7 /* Lightning */ = { isa = PBXNativeTarget; buildConfigurationList = AFD56FB00996B10F00BA26F7 /* Build configuration list for PBXNativeTarget "Lightning" */; buildPhases = ( AFD56FA60996B10F00BA26F7 /* Resources */, AFD56FA80996B10F00BA26F7 /* Sources */, AFD56FAB0996B10F00BA26F7 /* Frameworks */, AFD56FAF0996B10F00BA26F7 /* Rez */, AFA3D92B09C03D4700E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AFD56FA40996B10F00BA26F7 /* PBXTargetDependency */, ); name = Lightning; productName = Lightning; productReference = AFD56FB30996B10F00BA26F7 /* Lightning.saver */; productType = "com.apple.product-type.bundle"; }; AFD56FB90996B18F00BA26F7 /* Lisa */ = { isa = PBXNativeTarget; buildConfigurationList = AFD56FC60996B18F00BA26F7 /* Build configuration list for PBXNativeTarget "Lisa" */; buildPhases = ( AFD56FBC0996B18F00BA26F7 /* Resources */, AFD56FBE0996B18F00BA26F7 /* Sources */, AFD56FC10996B18F00BA26F7 /* Frameworks */, AFD56FC50996B18F00BA26F7 /* Rez */, AFA3D92D09C03D4A00E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AFD56FBA0996B18F00BA26F7 /* PBXTargetDependency */, ); name = Lisa; productName = Lisa; productReference = AFD56FC90996B18F00BA26F7 /* Lisa.saver */; productType = "com.apple.product-type.bundle"; }; AFD56FCF0996B20900BA26F7 /* Lissie */ = { isa = PBXNativeTarget; buildConfigurationList = AFD56FDC0996B20900BA26F7 /* Build configuration list for PBXNativeTarget "Lissie" */; buildPhases = ( AFD56FD20996B20900BA26F7 /* Resources */, AFD56FD40996B20900BA26F7 /* Sources */, AFD56FD70996B20900BA26F7 /* Frameworks */, AFD56FDB0996B20900BA26F7 /* Rez */, AFA3D92F09C03D4E00E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AFD56FD00996B20900BA26F7 /* PBXTargetDependency */, ); name = Lissie; productName = Lissie; productReference = AFD56FDF0996B20900BA26F7 /* Lissie.saver */; productType = "com.apple.product-type.bundle"; }; AFD56FF80996B43800BA26F7 /* Penrose */ = { isa = PBXNativeTarget; buildConfigurationList = AFD570050996B43800BA26F7 /* Build configuration list for PBXNativeTarget "Penrose" */; buildPhases = ( AFD56FFB0996B43800BA26F7 /* Resources */, AFD56FFD0996B43800BA26F7 /* Sources */, AFD570000996B43800BA26F7 /* Frameworks */, AFD570040996B43800BA26F7 /* Rez */, AFA3D93709C03D5B00E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AFD56FF90996B43800BA26F7 /* PBXTargetDependency */, ); name = Penrose; productName = Penrose; productReference = AFD570080996B43800BA26F7 /* Penrose.saver */; productType = "com.apple.product-type.bundle"; }; AFD5700F0996B4CC00BA26F7 /* Sierpinski */ = { isa = PBXNativeTarget; buildConfigurationList = AFD5701C0996B4CC00BA26F7 /* Build configuration list for PBXNativeTarget "Sierpinski" */; buildPhases = ( AFD570120996B4CC00BA26F7 /* Resources */, AFD570140996B4CC00BA26F7 /* Sources */, AFD570170996B4CC00BA26F7 /* Frameworks */, AFD5701B0996B4CC00BA26F7 /* Rez */, AFA3DBA209C0424C00E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AFD570100996B4CC00BA26F7 /* PBXTargetDependency */, ); name = Sierpinski; productName = Sierpinski; productReference = AFD5701F0996B4CC00BA26F7 /* Sierpinski.saver */; productType = "com.apple.product-type.bundle"; }; AFD570260996B56D00BA26F7 /* Sphere */ = { isa = PBXNativeTarget; buildConfigurationList = AFD570330996B56D00BA26F7 /* Build configuration list for PBXNativeTarget "Sphere" */; buildPhases = ( AFD570290996B56D00BA26F7 /* Resources */, AFD5702B0996B56D00BA26F7 /* Sources */, AFD5702E0996B56D00BA26F7 /* Frameworks */, AFD570320996B56D00BA26F7 /* Rez */, AFA3D93D09C03D6C00E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AFD570270996B56D00BA26F7 /* PBXTargetDependency */, ); name = Sphere; productName = Sphere; productReference = AFD570360996B56D00BA26F7 /* Sphere.saver */; productType = "com.apple.product-type.bundle"; }; AFD570430996B61600BA26F7 /* Spiral */ = { isa = PBXNativeTarget; buildConfigurationList = AFD570500996B61600BA26F7 /* Build configuration list for PBXNativeTarget "Spiral" */; buildPhases = ( AFD570460996B61600BA26F7 /* Resources */, AFD570480996B61600BA26F7 /* Sources */, AFD5704B0996B61600BA26F7 /* Frameworks */, AFD5704F0996B61600BA26F7 /* Rez */, AFA3D93F09C03D6F00E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AFD570440996B61600BA26F7 /* PBXTargetDependency */, ); name = Spiral; productName = Spiral; productReference = AFD570530996B61600BA26F7 /* Spiral.saver */; productType = "com.apple.product-type.bundle"; }; AFD570590996B6A300BA26F7 /* FadePlot */ = { isa = PBXNativeTarget; buildConfigurationList = AFD570660996B6A300BA26F7 /* Build configuration list for PBXNativeTarget "FadePlot" */; buildPhases = ( AFD5705C0996B6A300BA26F7 /* Resources */, AFD5705E0996B6A300BA26F7 /* Sources */, AFD570610996B6A300BA26F7 /* Frameworks */, AFD570650996B6A300BA26F7 /* Rez */, AFA3D91309C03D1E00E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AFD5705A0996B6A300BA26F7 /* PBXTargetDependency */, ); name = FadePlot; productName = FadePlot; productReference = AFD570690996B6A300BA26F7 /* FadePlot.saver */; productType = "com.apple.product-type.bundle"; }; AFD5706F0996B72700BA26F7 /* Mountain */ = { isa = PBXNativeTarget; buildConfigurationList = AFD5707C0996B72700BA26F7 /* Build configuration list for PBXNativeTarget "Mountain" */; buildPhases = ( AFD570720996B72700BA26F7 /* Resources */, AFD570740996B72700BA26F7 /* Sources */, AFD570770996B72700BA26F7 /* Frameworks */, AFD5707B0996B72700BA26F7 /* Rez */, AFA3D93309C03D5400E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AFD570700996B72700BA26F7 /* PBXTargetDependency */, ); name = Mountain; productName = Mountain; productReference = AFD5707F0996B72800BA26F7 /* Mountain.saver */; productType = "com.apple.product-type.bundle"; }; AFD570850996B80300BA26F7 /* Triangle */ = { isa = PBXNativeTarget; buildConfigurationList = AFD570920996B80300BA26F7 /* Build configuration list for PBXNativeTarget "Triangle" */; buildPhases = ( AFD570880996B80300BA26F7 /* Resources */, AFD5708A0996B80300BA26F7 /* Sources */, AFD5708D0996B80300BA26F7 /* Frameworks */, AFD570910996B80300BA26F7 /* Rez */, AFA3D94709C03D7E00E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AFD570860996B80300BA26F7 /* PBXTargetDependency */, ); name = Triangle; productName = Triangle; productReference = AFD570950996B80300BA26F7 /* Triangle.saver */; productType = "com.apple.product-type.bundle"; }; AFD5709B0996B88E00BA26F7 /* Worm */ = { isa = PBXNativeTarget; buildConfigurationList = AFD570A80996B88E00BA26F7 /* Build configuration list for PBXNativeTarget "Worm" */; buildPhases = ( AFD5709E0996B88E00BA26F7 /* Resources */, AFD570A00996B88E00BA26F7 /* Sources */, AFD570A30996B88E00BA26F7 /* Frameworks */, AFD570A70996B88E00BA26F7 /* Rez */, AFA3D94B09C03D8500E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AFD5709C0996B88E00BA26F7 /* PBXTargetDependency */, ); name = Worm; productName = Worm; productReference = AFD570AB0996B88E00BA26F7 /* Worm.saver */; productType = "com.apple.product-type.bundle"; }; AFD570B10996B93000BA26F7 /* Rotor */ = { isa = PBXNativeTarget; buildConfigurationList = AFD570BE0996B93000BA26F7 /* Build configuration list for PBXNativeTarget "Rotor" */; buildPhases = ( AFD570B40996B93000BA26F7 /* Resources */, AFD570B60996B93000BA26F7 /* Sources */, AFD570B90996B93000BA26F7 /* Frameworks */, AFD570BD0996B93000BA26F7 /* Rez */, AFA3D93B09C03D6200E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AFD570B20996B93000BA26F7 /* PBXTargetDependency */, ); name = Rotor; productName = Rotor; productReference = AFD570C10996B93000BA26F7 /* Rotor.saver */; productType = "com.apple.product-type.bundle"; }; AFD570C90996B9F800BA26F7 /* Ant */ = { isa = PBXNativeTarget; buildConfigurationList = AFD570D60996B9F800BA26F7 /* Build configuration list for PBXNativeTarget "Ant" */; buildPhases = ( AFD570CC0996B9F800BA26F7 /* Resources */, AFD570CE0996B9F800BA26F7 /* Sources */, AFD570D10996B9F800BA26F7 /* Frameworks */, AFD570D50996B9F800BA26F7 /* Rez */, AFA3D90109C03D0000E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AFD570CA0996B9F800BA26F7 /* PBXTargetDependency */, ); name = Ant; productName = Ant; productReference = AFD570D90996B9F800BA26F7 /* Ant.saver */; productType = "com.apple.product-type.bundle"; }; AFD570EA0996BBBF00BA26F7 /* Flow */ = { isa = PBXNativeTarget; buildConfigurationList = AFD570F70996BBBF00BA26F7 /* Build configuration list for PBXNativeTarget "Flow" */; buildPhases = ( AFD570ED0996BBBF00BA26F7 /* Resources */, AFD570EF0996BBBF00BA26F7 /* Sources */, AFD570F20996BBBF00BA26F7 /* Frameworks */, AFD570F60996BBBF00BA26F7 /* Rez */, AFA3D91909C03D2700E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AFD570EB0996BBBF00BA26F7 /* PBXTargetDependency */, ); name = Flow; productName = Flow; productReference = AFD570FA0996BBBF00BA26F7 /* Flow.saver */; productType = "com.apple.product-type.bundle"; }; AFD571130996BE9300BA26F7 /* Discrete */ = { isa = PBXNativeTarget; buildConfigurationList = AFD571200996BE9300BA26F7 /* Build configuration list for PBXNativeTarget "Discrete" */; buildPhases = ( AFD571160996BE9300BA26F7 /* Resources */, AFD571180996BE9300BA26F7 /* Sources */, AFD5711B0996BE9300BA26F7 /* Frameworks */, AFD5711F0996BE9300BA26F7 /* Rez */, AFA3D90D09C03D1400E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AFD571140996BE9300BA26F7 /* PBXTargetDependency */, ); name = Discrete; productName = Discrete; productReference = AFD571230996BE9300BA26F7 /* Discrete.saver */; productType = "com.apple.product-type.bundle"; }; AFD5712C0996BF2E00BA26F7 /* Apollonian */ = { isa = PBXNativeTarget; buildConfigurationList = AFD571390996BF2E00BA26F7 /* Build configuration list for PBXNativeTarget "Apollonian" */; buildPhases = ( AFD5712F0996BF2E00BA26F7 /* Resources */, AFD571310996BF2E00BA26F7 /* Sources */, AFD571340996BF2E00BA26F7 /* Frameworks */, AFD571380996BF2E00BA26F7 /* Rez */, AFA3D90309C03D0400E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AFD5712D0996BF2E00BA26F7 /* PBXTargetDependency */, ); name = Apollonian; productName = Apollonian; productReference = AFD5713C0996BF2E00BA26F7 /* Apollonian.saver */; productType = "com.apple.product-type.bundle"; }; AFD571430996C01700BA26F7 /* Euler2D */ = { isa = PBXNativeTarget; buildConfigurationList = AFD571500996C01700BA26F7 /* Build configuration list for PBXNativeTarget "Euler2D" */; buildPhases = ( AFD571460996C01700BA26F7 /* Resources */, AFD571480996C01700BA26F7 /* Sources */, AFD5714B0996C01700BA26F7 /* Frameworks */, AFD5714F0996C01700BA26F7 /* Rez */, AFA3D91109C03D1B00E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AFD571440996C01700BA26F7 /* PBXTargetDependency */, ); name = Euler2D; productName = Euler2D; productReference = AFD571530996C01700BA26F7 /* Euler2D.saver */; productType = "com.apple.product-type.bundle"; }; AFD571590996C0CE00BA26F7 /* Thornbird */ = { isa = PBXNativeTarget; buildConfigurationList = AFD571660996C0CE00BA26F7 /* Build configuration list for PBXNativeTarget "Thornbird" */; buildPhases = ( AFD5715C0996C0CE00BA26F7 /* Resources */, AFD5715E0996C0CE00BA26F7 /* Sources */, AFD571610996C0CE00BA26F7 /* Frameworks */, AFD571650996C0CE00BA26F7 /* Rez */, AFA3D94509C03D7A00E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AFD5715A0996C0CE00BA26F7 /* PBXTargetDependency */, ); name = Thornbird; productName = Thornbird; productReference = AFD571690996C0CE00BA26F7 /* Thornbird.saver */; productType = "com.apple.product-type.bundle"; }; AFD571B50996D9DC00BA26F7 /* Juggle */ = { isa = PBXNativeTarget; buildConfigurationList = AFD571C20996D9DC00BA26F7 /* Build configuration list for PBXNativeTarget "Juggle" */; buildPhases = ( AFD571B80996D9DC00BA26F7 /* Resources */, AFD571BA0996D9DC00BA26F7 /* Sources */, AFD571BD0996D9DC00BA26F7 /* Frameworks */, AFD571C10996D9DC00BA26F7 /* Rez */, AFA3D92509C03D3D00E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AFD571B60996D9DC00BA26F7 /* PBXTargetDependency */, ); name = Juggle; productName = Juggle; productReference = AFD571C50996D9DC00BA26F7 /* Juggle.saver */; productType = "com.apple.product-type.bundle"; }; AFD572220996E4A300BA26F7 /* Swirl */ = { isa = PBXNativeTarget; buildConfigurationList = AFD5722F0996E4A300BA26F7 /* Build configuration list for PBXNativeTarget "Swirl" */; buildPhases = ( AFD572250996E4A300BA26F7 /* Resources */, AFD572270996E4A300BA26F7 /* Sources */, AFD5722A0996E4A300BA26F7 /* Frameworks */, AFD5722E0996E4A300BA26F7 /* Rez */, AFA3D94309C03D7600E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AFD572230996E4A300BA26F7 /* PBXTargetDependency */, ); name = Swirl; productName = Swirl; productReference = AFD572320996E4A300BA26F7 /* Swirl.saver */; productType = "com.apple.product-type.bundle"; }; AFD5726D0996EE8500BA26F7 /* Polyominoes */ = { isa = PBXNativeTarget; buildConfigurationList = AFD5727A0996EE8500BA26F7 /* Build configuration list for PBXNativeTarget "Polyominoes" */; buildPhases = ( AFD572700996EE8500BA26F7 /* Resources */, AFD572720996EE8500BA26F7 /* Sources */, AFD572750996EE8500BA26F7 /* Frameworks */, AFD572790996EE8500BA26F7 /* Rez */, AFA3D93909C03D5E00E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AFD5726E0996EE8500BA26F7 /* PBXTargetDependency */, ); name = Polyominoes; productName = Polyominoes; productReference = AFD5727D0996EE8500BA26F7 /* Polyominoes.saver */; productType = "com.apple.product-type.bundle"; }; AFD572A50996F99600BA26F7 /* Bouboule */ = { isa = PBXNativeTarget; buildConfigurationList = AFD572B20996F99600BA26F7 /* Build configuration list for PBXNativeTarget "Bouboule" */; buildPhases = ( AFD572A80996F99600BA26F7 /* Resources */, AFD572AA0996F99600BA26F7 /* Sources */, AFD572AD0996F99600BA26F7 /* Frameworks */, AFD572B10996F99600BA26F7 /* Rez */, AFA3D90509C03D0700E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AFD572A60996F99600BA26F7 /* PBXTargetDependency */, ); name = Bouboule; productName = Bouboule; productReference = AFD572B50996F99600BA26F7 /* Bouboule.saver */; productType = "com.apple.product-type.bundle"; }; AFD572C20996FC0F00BA26F7 /* Crystal */ = { isa = PBXNativeTarget; buildConfigurationList = AFD572CF0996FC0F00BA26F7 /* Build configuration list for PBXNativeTarget "Crystal" */; buildPhases = ( AFD572C50996FC0F00BA26F7 /* Resources */, AFD572C70996FC0F00BA26F7 /* Sources */, AFD572CA0996FC0F00BA26F7 /* Frameworks */, AFD572CE0996FC0F00BA26F7 /* Rez */, AFA3D90909C03D0E00E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AFD572C30996FC0F00BA26F7 /* PBXTargetDependency */, ); name = Crystal; productName = Crystal; productReference = AFD572D20996FC0F00BA26F7 /* Crystal.saver */; productType = "com.apple.product-type.bundle"; }; AFD572F9099701C000BA26F7 /* Julia */ = { isa = PBXNativeTarget; buildConfigurationList = AFD57306099701C000BA26F7 /* Build configuration list for PBXNativeTarget "Julia" */; buildPhases = ( AFD572FC099701C000BA26F7 /* Resources */, AFD572FE099701C000BA26F7 /* Sources */, AFD57301099701C000BA26F7 /* Frameworks */, AFD57305099701C000BA26F7 /* Rez */, AFA3D92709C03D4000E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AFD572FA099701C000BA26F7 /* PBXTargetDependency */, ); name = Julia; productName = Julia; productReference = AFD57309099701C000BA26F7 /* Julia.saver */; productType = "com.apple.product-type.bundle"; }; AFD5735D0997411200BA26F7 /* Strange */ = { isa = PBXNativeTarget; buildConfigurationList = AFD5736A0997411200BA26F7 /* Build configuration list for PBXNativeTarget "Strange" */; buildPhases = ( AFD573600997411200BA26F7 /* Resources */, AFD573620997411200BA26F7 /* Sources */, AFD573650997411200BA26F7 /* Frameworks */, AFD573690997411200BA26F7 /* Rez */, AFA3D94109C03D7200E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AFD5735E0997411200BA26F7 /* PBXTargetDependency */, ); name = Strange; productName = Strange; productReference = AFD5736D0997411200BA26F7 /* Strange.saver */; productType = "com.apple.product-type.bundle"; }; AFDA658E178A52B70070D24B /* Unknown Pleasures */ = { isa = PBXNativeTarget; buildConfigurationList = AFDA659E178A52B70070D24B /* Build configuration list for PBXNativeTarget "Unknown Pleasures" */; buildPhases = ( AFDA6591178A52B70070D24B /* Resources */, AFDA6593178A52B70070D24B /* Sources */, AFDA6596178A52B70070D24B /* Frameworks */, AFDA659C178A52B70070D24B /* Rez */, AFDA659D178A52B70070D24B /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AFDA658F178A52B70070D24B /* PBXTargetDependency */, ); name = "Unknown Pleasures"; productName = DangerBall; productReference = AFDA65A1178A52B70070D24B /* UnknownPleasures.saver */; productType = "com.apple.product-type.bundle"; }; AFE2A4560E2E904600ADB298 /* SkyTentacles */ = { isa = PBXNativeTarget; buildConfigurationList = AFE2A4670E2E904600ADB298 /* Build configuration list for PBXNativeTarget "SkyTentacles" */; buildPhases = ( AFE2A4590E2E904600ADB298 /* Resources */, AFE2A45B0E2E904600ADB298 /* Sources */, AFE2A45E0E2E904600ADB298 /* Frameworks */, AFE2A4650E2E904600ADB298 /* Rez */, AFE2A4660E2E904600ADB298 /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AFE2A4570E2E904600ADB298 /* PBXTargetDependency */, ); name = SkyTentacles; productName = SkyTentacles; productReference = AFE2A46A0E2E904600ADB298 /* SkyTentacles.saver */; productType = "com.apple.product-type.bundle"; }; AFE30BE80E52B14700CCF4A5 /* Sonar */ = { isa = PBXNativeTarget; buildConfigurationList = AFE30BF90E52B14700CCF4A5 /* Build configuration list for PBXNativeTarget "Sonar" */; buildPhases = ( AF7E08021592661100D81407 /* ICMP Sanity Check */, AFE30BEB0E52B14700CCF4A5 /* Resources */, AFE30BED0E52B14700CCF4A5 /* Sources */, AFE30BF00E52B14700CCF4A5 /* Frameworks */, AFE30BF70E52B14700CCF4A5 /* Rez */, AFE30BF80E52B14700CCF4A5 /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AFE30BE90E52B14700CCF4A5 /* PBXTargetDependency */, ); name = Sonar; productName = Sonar; productReference = AFE30BFC0E52B14700CCF4A5 /* Sonar.saver */; productType = "com.apple.product-type.bundle"; }; AFE6A1820CDD7B2E002805BF /* MoebiusGears */ = { isa = PBXNativeTarget; buildConfigurationList = AFE6A1940CDD7B2E002805BF /* Build configuration list for PBXNativeTarget "MoebiusGears" */; buildPhases = ( AFE6A1850CDD7B2E002805BF /* Resources */, AFE6A1870CDD7B2E002805BF /* Sources */, AFE6A18B0CDD7B2E002805BF /* Frameworks */, AFE6A1920CDD7B2E002805BF /* Rez */, AFE6A1930CDD7B2E002805BF /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AFE6A1830CDD7B2E002805BF /* PBXTargetDependency */, ); name = MoebiusGears; productName = MoebiusGears; productReference = AFE6A1970CDD7B2E002805BF /* MoebiusGears.saver */; productType = "com.apple.product-type.bundle"; }; AFE6A41B0CDD7FAA002805BF /* Abstractile */ = { isa = PBXNativeTarget; buildConfigurationList = AFE6A42A0CDD7FAA002805BF /* Build configuration list for PBXNativeTarget "Abstractile" */; buildPhases = ( AFE6A41E0CDD7FAA002805BF /* Resources */, AFE6A4210CDD7FAA002805BF /* Sources */, AFE6A4240CDD7FAA002805BF /* Frameworks */, AFE6A4280CDD7FAA002805BF /* Rez */, AFE6A4290CDD7FAA002805BF /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AFE6A41C0CDD7FAA002805BF /* PBXTargetDependency */, ); name = Abstractile; productName = Abstractile; productReference = AFE6A42D0CDD7FAA002805BF /* Abstractile.saver */; productType = "com.apple.product-type.bundle"; }; AFEC23CD1CB6EAE100DE138F /* DymaxionMap */ = { isa = PBXNativeTarget; buildConfigurationList = AFEC23DF1CB6EAE100DE138F /* Build configuration list for PBXNativeTarget "DymaxionMap" */; buildPhases = ( AFEC23D01CB6EAE100DE138F /* Resources */, AFEC23D21CB6EAE100DE138F /* Sources */, AFEC23D51CB6EAE100DE138F /* Frameworks */, AFEC23DD1CB6EAE100DE138F /* Rez */, AFEC23DE1CB6EAE100DE138F /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AFEC23CE1CB6EAE100DE138F /* PBXTargetDependency */, ); name = DymaxionMap; productName = DangerBall; productReference = AFEC23E21CB6EAE100DE138F /* DymaxionMap.saver */; productType = "com.apple.product-type.bundle"; }; AFEE104D1D13406000AAC8F7 /* CubeTwist */ = { isa = PBXNativeTarget; buildConfigurationList = AFEE105F1D13406000AAC8F7 /* Build configuration list for PBXNativeTarget "CubeTwist" */; buildPhases = ( AFEE10501D13406000AAC8F7 /* Resources */, AFEE10521D13406000AAC8F7 /* Sources */, AFEE10551D13406000AAC8F7 /* Frameworks */, AFEE105D1D13406000AAC8F7 /* Rez */, AFEE105E1D13406000AAC8F7 /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AFEE104E1D13406000AAC8F7 /* PBXTargetDependency */, ); name = CubeTwist; productName = DangerBall; productReference = AFEE10621D13406000AAC8F7 /* CubeTwist.saver */; productType = "com.apple.product-type.bundle"; }; AFEE106C1D15EB0700AAC8F7 /* CubeStack */ = { isa = PBXNativeTarget; buildConfigurationList = AFEE107E1D15EB0800AAC8F7 /* Build configuration list for PBXNativeTarget "CubeStack" */; buildPhases = ( AFEE106F1D15EB0800AAC8F7 /* Resources */, AFEE10711D15EB0800AAC8F7 /* Sources */, AFEE10741D15EB0800AAC8F7 /* Frameworks */, AFEE107C1D15EB0800AAC8F7 /* Rez */, AFEE107D1D15EB0800AAC8F7 /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AFEE106D1D15EB0700AAC8F7 /* PBXTargetDependency */, ); name = CubeStack; productName = DangerBall; productReference = AFEE10811D15EB0800AAC8F7 /* CubeStack.saver */; productType = "com.apple.product-type.bundle"; }; AFEE108B1D17E20B00AAC8F7 /* Splodesic */ = { isa = PBXNativeTarget; buildConfigurationList = AFEE109D1D17E20B00AAC8F7 /* Build configuration list for PBXNativeTarget "Splodesic" */; buildPhases = ( AFEE108E1D17E20B00AAC8F7 /* Resources */, AFEE10901D17E20B00AAC8F7 /* Sources */, AFEE10931D17E20B00AAC8F7 /* Frameworks */, AFEE109B1D17E20B00AAC8F7 /* Rez */, AFEE109C1D17E20B00AAC8F7 /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AFEE108C1D17E20B00AAC8F7 /* PBXTargetDependency */, ); name = Splodesic; productName = DangerBall; productReference = AFEE10A01D17E20B00AAC8F7 /* Splodesic.saver */; productType = "com.apple.product-type.bundle"; }; AFF2867F17860E830050A578 /* QuasiCrystal */ = { isa = PBXNativeTarget; buildConfigurationList = AFF2868F17860E830050A578 /* Build configuration list for PBXNativeTarget "QuasiCrystal" */; buildPhases = ( AFF2868217860E830050A578 /* Resources */, AFF2868417860E830050A578 /* Sources */, AFF2868717860E830050A578 /* Frameworks */, AFF2868D17860E830050A578 /* Rez */, AFF2868E17860E830050A578 /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AFF2868017860E830050A578 /* PBXTargetDependency */, ); name = QuasiCrystal; productName = DangerBall; productReference = AFF2869217860E830050A578 /* QuasiCrystal.saver */; productType = "com.apple.product-type.bundle"; }; AFF3C9E817CCAC440028F240 /* Geodesic */ = { isa = PBXNativeTarget; buildConfigurationList = AFF3C9F817CCAC440028F240 /* Build configuration list for PBXNativeTarget "Geodesic" */; buildPhases = ( AFF3C9EB17CCAC440028F240 /* Resources */, AFF3C9ED17CCAC440028F240 /* Sources */, AFF3C9F017CCAC440028F240 /* Frameworks */, AFF3C9F617CCAC440028F240 /* Rez */, AFF3C9F717CCAC440028F240 /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AFF3C9E917CCAC440028F240 /* PBXTargetDependency */, ); name = Geodesic; productName = DangerBall; productReference = AFF3C9FB17CCAC440028F240 /* Geodesic.saver */; productType = "com.apple.product-type.bundle"; }; AFF463360C4403E400EE6509 /* CWaves */ = { isa = PBXNativeTarget; buildConfigurationList = AFF463440C4403E400EE6509 /* Build configuration list for PBXNativeTarget "CWaves" */; buildPhases = ( AFF463390C4403E400EE6509 /* Resources */, AFF4633B0C4403E400EE6509 /* Sources */, AFF4633E0C4403E400EE6509 /* Frameworks */, AFF463420C4403E400EE6509 /* Rez */, AFF463430C4403E400EE6509 /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AFF463370C4403E400EE6509 /* PBXTargetDependency */, ); name = CWaves; productName = CWaves; productReference = AFF463470C4403E400EE6509 /* CWaves.saver */; productType = "com.apple.product-type.bundle"; }; AFF463580C440AEF00EE6509 /* GLCells */ = { isa = PBXNativeTarget; buildConfigurationList = AFF463690C440AEF00EE6509 /* Build configuration list for PBXNativeTarget "GLCells" */; buildPhases = ( AFF4635B0C440AEF00EE6509 /* Resources */, AFF4635D0C440AEF00EE6509 /* Sources */, AFF463600C440AEF00EE6509 /* Frameworks */, AFF463670C440AEF00EE6509 /* Rez */, AFF463680C440AEF00EE6509 /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AFF463590C440AEF00EE6509 /* PBXTargetDependency */, ); name = GLCells; productName = GLCells; productReference = AFF4636C0C440AEF00EE6509 /* GLCells.saver */; productType = "com.apple.product-type.bundle"; }; AFFAB31519158CE40020F021 /* ProjectivePlane */ = { isa = PBXNativeTarget; buildConfigurationList = AFFAB32619158CE40020F021 /* Build configuration list for PBXNativeTarget "ProjectivePlane" */; buildPhases = ( AFFAB31819158CE40020F021 /* Resources */, AFFAB31A19158CE40020F021 /* Sources */, AFFAB31D19158CE40020F021 /* Frameworks */, AFFAB32419158CE40020F021 /* Rez */, AFFAB32519158CE40020F021 /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AFFAB31619158CE40020F021 /* PBXTargetDependency */, ); name = ProjectivePlane; productName = DangerBall; productReference = AFFAB32919158CE40020F021 /* ProjectivePlane.saver */; productType = "com.apple.product-type.bundle"; }; CE3D01511B76F4C100993C75 /* TestX11 */ = { isa = PBXNativeTarget; buildConfigurationList = CE3D01631B76F4C100993C75 /* Build configuration list for PBXNativeTarget "TestX11" */; buildPhases = ( CE3D01541B76F4C100993C75 /* Resources */, CE3D01561B76F4C100993C75 /* Sources */, CE3D01591B76F4C100993C75 /* Frameworks */, CE3D01611B76F4C100993C75 /* Rez */, CE3D01621B76F4C100993C75 /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( CE3D01521B76F4C100993C75 /* PBXTargetDependency */, ); name = TestX11; productName = Attraction; productReference = CE3D01661B76F4C100993C75 /* TestX11.saver */; productType = "com.apple.product-type.bundle"; }; /* End PBXNativeTarget section */ /* Begin PBXProject section */ 29B97313FDCFA39411CA2CEA /* Project object */ = { isa = PBXProject; attributes = { LastUpgradeCheck = 0800; TargetAttributes = { AF08398F09930B6B00277BE9 = { DevelopmentTeam = 4627ATJELP; }; AF083A32099311D700277BE9 = { DevelopmentTeam = 4627ATJELP; }; AF0DC7AB0C4C73F600D76972 = { DevelopmentTeam = 4627ATJELP; }; AF0DCA420C4CBB0D00D76972 = { DevelopmentTeam = 4627ATJELP; }; AF137D410F075C9B004DE3B2 = { DevelopmentTeam = 4627ATJELP; }; AF1A17610D6D6EE3008AF328 = { DevelopmentTeam = 4627ATJELP; }; AF1AD9E118500F9F00932759 = { DevelopmentTeam = 4627ATJELP; }; AF1B0FA71D7AB4740011DBE4 = { DevelopmentTeam = 4627ATJELP; }; AF32D9E00F3AD0B40080F535 = { DevelopmentTeam = 4627ATJELP; }; AF3581BF1431D47B00E09C51 = { DevelopmentTeam = 4627ATJELP; }; AF3581FB143330F900E09C51 = { DevelopmentTeam = 4627ATJELP; }; AF35E88A0E63823600691F2F = { DevelopmentTeam = 4627ATJELP; }; AF39381A1D0FBD6A00205406 = { DevelopmentTeam = 4627ATJELP; }; AF39E282198A11F60064A58D = { DevelopmentTeam = 4627ATJELP; }; AF3C71450D624BF50030CC0D = { DevelopmentTeam = 4627ATJELP; }; AF46E9CF1CBBA2B300240FBC = { DevelopmentTeam = 4627ATJELP; }; AF476FB5099D154F001F091E = { DevelopmentTeam = 4627ATJELP; }; AF476FDA099D1686001F091E = { DevelopmentTeam = 4627ATJELP; }; AF47704C099D4385001F091E = { DevelopmentTeam = 4627ATJELP; }; AF477169099D4786001F091E = { DevelopmentTeam = 4627ATJELP; }; AF47717F099D4803001F091E = { DevelopmentTeam = 4627ATJELP; }; AF4771A7099D4949001F091E = { DevelopmentTeam = 4627ATJELP; }; AF4771DB099D4D9A001F091E = { DevelopmentTeam = 4627ATJELP; }; AF4771F2099D4E63001F091E = { DevelopmentTeam = 4627ATJELP; }; AF477208099D4EE8001F091E = { DevelopmentTeam = 4627ATJELP; }; AF47721E099D4F67001F091E = { DevelopmentTeam = 4627ATJELP; }; AF477253099D5717001F091E = { DevelopmentTeam = 4627ATJELP; }; AF47726B099D57B9001F091E = { DevelopmentTeam = 4627ATJELP; }; AF477283099D5926001F091E = { DevelopmentTeam = 4627ATJELP; }; AF477382099D65A1001F091E = { DevelopmentTeam = 4627ATJELP; }; AF47739A099D6648001F091E = { DevelopmentTeam = 4627ATJELP; }; AF4773C1099D67B9001F091E = { DevelopmentTeam = 4627ATJELP; }; AF477401099D69E7001F091E = { DevelopmentTeam = 4627ATJELP; }; AF477426099D7C70001F091E = { DevelopmentTeam = 4627ATJELP; }; AF477442099D7D33001F091E = { DevelopmentTeam = 4627ATJELP; }; AF477483099D89E4001F091E = { DevelopmentTeam = 4627ATJELP; }; AF477499099D8A74001F091E = { DevelopmentTeam = 4627ATJELP; }; AF4774B4099D8B5F001F091E = { DevelopmentTeam = 4627ATJELP; }; AF4774CE099D8BFF001F091E = { DevelopmentTeam = 4627ATJELP; }; AF47755D099D9A1A001F091E = { DevelopmentTeam = 4627ATJELP; }; AF477583099D9C28001F091E = { DevelopmentTeam = 4627ATJELP; }; AF47759F099D9CF7001F091E = { DevelopmentTeam = 4627ATJELP; }; AF4775D8099D9F69001F091E = { DevelopmentTeam = 4627ATJELP; }; AF4775F2099DA030001F091E = { DevelopmentTeam = 4627ATJELP; }; AF477613099DA26C001F091E = { DevelopmentTeam = 4627ATJELP; }; AF477644099DA6D0001F091E = { DevelopmentTeam = 4627ATJELP; }; AF47765A099DA78E001F091E = { DevelopmentTeam = 4627ATJELP; }; AF477670099DA849001F091E = { DevelopmentTeam = 4627ATJELP; }; AF47768F099DAA6F001F091E = { DevelopmentTeam = 4627ATJELP; }; AF4776AA099DABDD001F091E = { DevelopmentTeam = 4627ATJELP; }; AF4776C0099DAC8A001F091E = { DevelopmentTeam = 4627ATJELP; }; AF4776DB099DADDF001F091E = { DevelopmentTeam = 4627ATJELP; }; AF4776F1099DAE7A001F091E = { DevelopmentTeam = 4627ATJELP; }; AF47770D099DAF9F001F091E = { DevelopmentTeam = 4627ATJELP; }; AF477723099DB044001F091E = { DevelopmentTeam = 4627ATJELP; }; AF477752099DB61E001F091E = { DevelopmentTeam = 4627ATJELP; }; AF477774099DB965001F091E = { DevelopmentTeam = 4627ATJELP; }; AF477790099DBA90001F091E = { DevelopmentTeam = 4627ATJELP; }; AF4777D1099DC183001F091E = { DevelopmentTeam = 4627ATJELP; }; AF4778AB099DDB79001F091E = { DevelopmentTeam = 4627ATJELP; }; AF4778C7099DDCAE001F091E = { DevelopmentTeam = 4627ATJELP; }; AF4778E8099DDDC8001F091E = { DevelopmentTeam = 4627ATJELP; }; AF477909099DE379001F091E = { DevelopmentTeam = 4627ATJELP; }; AF47792A099DE4C7001F091E = { DevelopmentTeam = 4627ATJELP; }; AF4808C0098C3B6C00FB32B8 = { DevelopmentTeam = 4627ATJELP; }; AF480AAF098C669800FB32B8 = { DevelopmentTeam = 4627ATJELP; }; AF480C49098E301400FB32B8 = { DevelopmentTeam = 4627ATJELP; }; AF480D58098EED3D00FB32B8 = { DevelopmentTeam = 4627ATJELP; }; AF480D59098EED5100FB32B8 = { DevelopmentTeam = 4627ATJELP; }; AF480D5A098EED5E00FB32B8 = { DevelopmentTeam = 4627ATJELP; }; AF480D72098EEDDE00FB32B8 = { DevelopmentTeam = 4627ATJELP; }; AF4810EB09909FBA00FB32B8 = { DevelopmentTeam = 4627ATJELP; }; AF4812500990CE2700FB32B8 = { DevelopmentTeam = 4627ATJELP; }; AF4812B30990D3D900FB32B8 = { DevelopmentTeam = 4627ATJELP; }; AF48DEEF0A0C25E000F94CF9 = { DevelopmentTeam = 4627ATJELP; }; AF4A3449102A593600A81B2A = { DevelopmentTeam = 4627ATJELP; }; AF4FD6E60CE7A486005EE58E = { DevelopmentTeam = 4627ATJELP; }; AF4FF4930D52CA0800666F98 = { DevelopmentTeam = 4627ATJELP; }; AF4FF4BA0D52CBDE00666F98 = { DevelopmentTeam = 4627ATJELP; }; AF5C9AF91A0CCE6E00B0147A = { DevelopmentTeam = 4627ATJELP; }; AF63A7F11AB4EDDB00593C75 = { DevelopmentTeam = 4627ATJELP; }; AF63F2471C3465BE0033E133 = { DevelopmentTeam = 4627ATJELP; }; AF63F4501C34682A0033E133 = { DevelopmentTeam = 4627ATJELP; }; AF63F4781C3469FC0033E133 = { DevelopmentTeam = 4627ATJELP; }; AF6423F2099FF9C2000F4CD4 = { DevelopmentTeam = 4627ATJELP; }; AF6425CC09A18855000F4CD4 = { DevelopmentTeam = 4627ATJELP; }; AF6425EC09A189EC000F4CD4 = { DevelopmentTeam = 4627ATJELP; }; AF64260F09A18D6C000F4CD4 = { DevelopmentTeam = 4627ATJELP; }; AF64262C09A18F54000F4CD4 = { DevelopmentTeam = 4627ATJELP; }; AF64264F09A19229000F4CD4 = { DevelopmentTeam = 4627ATJELP; }; AF64267B09A194B0000F4CD4 = { DevelopmentTeam = 4627ATJELP; }; AF64277109A1D37A000F4CD4 = { DevelopmentTeam = 4627ATJELP; }; AF6427A809A2DE36000F4CD4 = { DevelopmentTeam = 4627ATJELP; }; AF68A47E19196CF800D41CD1 = { DevelopmentTeam = 4627ATJELP; }; AF73FF221A09877F00E485E9 = { DevelopmentTeam = 4627ATJELP; }; AF7510FF1782B5B900380EA1 = { DevelopmentTeam = 4627ATJELP; }; AF7776E409B63ABF00EA3033 = { DevelopmentTeam = 4627ATJELP; }; AF77771A09B6416100EA3033 = { DevelopmentTeam = 4627ATJELP; }; AF77773E09B6446500EA3033 = { DevelopmentTeam = 4627ATJELP; }; AF77777409B6497800EA3033 = { DevelopmentTeam = 4627ATJELP; }; AF77778E09B64A5200EA3033 = { DevelopmentTeam = 4627ATJELP; }; AF7777A809B64B2600EA3033 = { DevelopmentTeam = 4627ATJELP; }; AF7777D009B64C6B00EA3033 = { DevelopmentTeam = 4627ATJELP; }; AF7777EA09B64E3100EA3033 = { DevelopmentTeam = 4627ATJELP; }; AF77781009B6504400EA3033 = { DevelopmentTeam = 4627ATJELP; }; AF77784409B6528100EA3033 = { DevelopmentTeam = 4627ATJELP; }; AF77786109B6536000EA3033 = { DevelopmentTeam = 4627ATJELP; }; AF77787F09B6563500EA3033 = { DevelopmentTeam = 4627ATJELP; }; AF7778A509B659C800EA3033 = { DevelopmentTeam = 4627ATJELP; }; AF78D175142DD8F3002AAF77 = { DevelopmentTeam = 4627ATJELP; }; AF794F64099748450059A8B0 = { DevelopmentTeam = 4627ATJELP; }; AF794F8E09974A320059A8B0 = { DevelopmentTeam = 4627ATJELP; }; AF794FCD09974FA60059A8B0 = { DevelopmentTeam = 4627ATJELP; }; AF7ACFC019FF0A9200BD752B = { DevelopmentTeam = 4627ATJELP; }; AF918977158FC00A002B5D1E = { DevelopmentTeam = 4627ATJELP; }; AF97572D099C317000B05160 = { DevelopmentTeam = 4627ATJELP; }; AF975775099C374A00B05160 = { DevelopmentTeam = 4627ATJELP; }; AF9757C2099C3E6300B05160 = { DevelopmentTeam = 4627ATJELP; }; AF975808099C41D500B05160 = { DevelopmentTeam = 4627ATJELP; }; AF975865099C475900B05160 = { DevelopmentTeam = 4627ATJELP; }; AF975A36099C681F00B05160 = { DevelopmentTeam = 4627ATJELP; }; AF975A6C099C6AB200B05160 = { DevelopmentTeam = 4627ATJELP; }; AF975A86099C6BC300B05160 = { DevelopmentTeam = 4627ATJELP; }; AF975AD7099C6EB100B05160 = { DevelopmentTeam = 4627ATJELP; }; AF975AFC099C6FE400B05160 = { DevelopmentTeam = 4627ATJELP; }; AF975C12099C8C1500B05160 = { DevelopmentTeam = 4627ATJELP; }; AF975C3D099C8DCF00B05160 = { DevelopmentTeam = 4627ATJELP; }; AF975C5D099C8F3F00B05160 = { DevelopmentTeam = 4627ATJELP; }; AF975D52099CA0F000B05160 = { DevelopmentTeam = 4627ATJELP; }; AF976FBB0989CAA2001F8B92 = { DevelopmentTeam = 4627ATJELP; }; AF9770290989D1E6001F8B92 = { DevelopmentTeam = 4627ATJELP; }; AF9770660989D2F6001F8B92 = { DevelopmentTeam = 4627ATJELP; }; AF9771D60989DC4A001F8B92 = { DevelopmentTeam = 4627ATJELP; }; AF998EDA0A083DB30051049D = { DevelopmentTeam = 4627ATJELP; }; AF9D466609B5109C006E59CF = { DevelopmentTeam = 4627ATJELP; }; AF9D474409B5300A006E59CF = { DevelopmentTeam = 4627ATJELP; }; AF9D475F09B53166006E59CF = { DevelopmentTeam = 4627ATJELP; }; AF9D48DB09B53322006E59CF = { DevelopmentTeam = 4627ATJELP; }; AF9D48F409B535DA006E59CF = { DevelopmentTeam = 4627ATJELP; }; AF9D492B09B53CBA006E59CF = { DevelopmentTeam = 4627ATJELP; }; AF9D495409B53FC9006E59CF = { DevelopmentTeam = 4627ATJELP; }; AF9D496C09B5411D006E59CF = { DevelopmentTeam = 4627ATJELP; }; AF9D499709B544C2006E59CF = { DevelopmentTeam = 4627ATJELP; }; AF9D4C6909B59F27006E59CF = { DevelopmentTeam = 4627ATJELP; }; AF9D4CE709B5AA8E006E59CF = { DevelopmentTeam = 4627ATJELP; }; AF9D4D7E09B5B2DC006E59CF = { DevelopmentTeam = 4627ATJELP; }; AF9D4DAF09B5B71E006E59CF = { DevelopmentTeam = 4627ATJELP; }; AF9D4DEC09B5BB19006E59CF = { DevelopmentTeam = 4627ATJELP; }; AF9E7EBE190F4C1B00A8B01F = { DevelopmentTeam = 4627ATJELP; }; AFA2118C1CD59DAF00C0D2A1 = { DevelopmentTeam = 4627ATJELP; }; AFA3392E0B058505002B0E7D = { DevelopmentTeam = 4627ATJELP; }; AFA33BC60B058740002B0E7D = { DevelopmentTeam = 4627ATJELP; }; AFA33C020B058E17002B0E7D = { DevelopmentTeam = 4627ATJELP; }; AFA55946099330B000F3E977 = { DevelopmentTeam = 4627ATJELP; }; AFA5596D0993317900F3E977 = { DevelopmentTeam = 4627ATJELP; }; AFA559920993322100F3E977 = { DevelopmentTeam = 4627ATJELP; }; AFA559B50993328000F3E977 = { DevelopmentTeam = 4627ATJELP; }; AFA559CF0993330600F3E977 = { DevelopmentTeam = 4627ATJELP; }; AFA55A030993340300F3E977 = { DevelopmentTeam = 4627ATJELP; }; AFA55A20099334A000F3E977 = { DevelopmentTeam = 4627ATJELP; }; AFA55A790993364300F3E977 = { DevelopmentTeam = 4627ATJELP; }; AFA55ACF09933CEF00F3E977 = { DevelopmentTeam = 4627ATJELP; }; AFA55B0909933E0500F3E977 = { DevelopmentTeam = 4627ATJELP; }; AFA55B2509933E8D00F3E977 = { DevelopmentTeam = 4627ATJELP; }; AFA55B7909933F7200F3E977 = { DevelopmentTeam = 4627ATJELP; }; AFA55B9109933FDA00F3E977 = { DevelopmentTeam = 4627ATJELP; }; AFA55BAB099340CE00F3E977 = { DevelopmentTeam = 4627ATJELP; }; AFA55BE40993429100F3E977 = { DevelopmentTeam = 4627ATJELP; }; AFA55C0E0993431300F3E977 = { DevelopmentTeam = 4627ATJELP; }; AFA55C77099349A600F3E977 = { DevelopmentTeam = 4627ATJELP; }; AFA55CA909934BB200F3E977 = { DevelopmentTeam = 4627ATJELP; }; AFA55CCC09934CE400F3E977 = { DevelopmentTeam = 4627ATJELP; }; AFA55D3C0993565300F3E977 = { DevelopmentTeam = 4627ATJELP; }; AFA55D620993584B00F3E977 = { DevelopmentTeam = 4627ATJELP; }; AFA55D7F099358C400F3E977 = { DevelopmentTeam = 4627ATJELP; }; AFA55DC809935D7000F3E977 = { DevelopmentTeam = 4627ATJELP; }; AFA55DF009935E4900F3E977 = { DevelopmentTeam = 4627ATJELP; }; AFA55E0D09935EDC00F3E977 = { DevelopmentTeam = 4627ATJELP; }; AFA55E2F09935F8E00F3E977 = { DevelopmentTeam = 4627ATJELP; }; AFA55E4E09935FF900F3E977 = { DevelopmentTeam = 4627ATJELP; }; AFA55EC7099360E300F3E977 = { DevelopmentTeam = 4627ATJELP; }; AFA55F06099361B700F3E977 = { DevelopmentTeam = 4627ATJELP; }; AFA55F2A0993622F00F3E977 = { DevelopmentTeam = 4627ATJELP; }; AFA55F420993629000F3E977 = { DevelopmentTeam = 4627ATJELP; }; AFA55F720993643600F3E977 = { DevelopmentTeam = 4627ATJELP; }; AFA55FD309936BFA00F3E977 = { DevelopmentTeam = 4627ATJELP; }; AFA55FF909936C6D00F3E977 = { DevelopmentTeam = 4627ATJELP; }; AFA5601409936CC800F3E977 = { DevelopmentTeam = 4627ATJELP; }; AFA5603209936D5100F3E977 = { DevelopmentTeam = 4627ATJELP; }; AFA5604A09936E2100F3E977 = { DevelopmentTeam = 4627ATJELP; }; AFA5606209936F3800F3E977 = { DevelopmentTeam = 4627ATJELP; }; AFA560AE0993718D00F3E977 = { DevelopmentTeam = 4627ATJELP; }; AFA560FD0993781600F3E977 = { DevelopmentTeam = 4627ATJELP; }; AFA56119099378CB00F3E977 = { DevelopmentTeam = 4627ATJELP; }; AFA5615609937C0D00F3E977 = { DevelopmentTeam = 4627ATJELP; }; AFA5617B09937CF100F3E977 = { DevelopmentTeam = 4627ATJELP; }; AFA5619D09937D7E00F3E977 = { DevelopmentTeam = 4627ATJELP; }; AFA562060993849F00F3E977 = { DevelopmentTeam = 4627ATJELP; }; AFA5621F0993852500F3E977 = { DevelopmentTeam = 4627ATJELP; }; AFA562BF099392C600F3E977 = { DevelopmentTeam = 4627ATJELP; }; AFA562DA099393C900F3E977 = { DevelopmentTeam = 4627ATJELP; }; AFA562F20993943B00F3E977 = { DevelopmentTeam = 4627ATJELP; }; AFA563130993951000F3E977 = { DevelopmentTeam = 4627ATJELP; }; AFA56331099395ED00F3E977 = { DevelopmentTeam = 4627ATJELP; }; AFA56351099396C000F3E977 = { DevelopmentTeam = 4627ATJELP; }; AFA56379099397B300F3E977 = { DevelopmentTeam = 4627ATJELP; }; AFA563A4099398BB00F3E977 = { DevelopmentTeam = 4627ATJELP; }; AFACE8731CC83458008B24CD = { DevelopmentTeam = 4627ATJELP; }; AFB591A7178B812C00EA4005 = { DevelopmentTeam = 4627ATJELP; }; AFBFE74B178642DC00432B21 = { DevelopmentTeam = 4627ATJELP; SystemCapabilities = { com.apple.Sandbox = { enabled = 0; }; }; }; AFBFE767178647FE00432B21 = { DevelopmentTeam = 4627ATJELP; }; AFC0E8AB1CDC601A008CAFAC = { DevelopmentTeam = 4627ATJELP; }; AFCF833B1AF5B515008BB7E1 = { DevelopmentTeam = 4627ATJELP; }; AFD51B1B0F063B4A00471C02 = { DevelopmentTeam = 4627ATJELP; }; AFD56DF10996A03800BA26F7 = { DevelopmentTeam = 4627ATJELP; }; AFD56EAE0996A72600BA26F7 = { DevelopmentTeam = 4627ATJELP; }; AFD56EDA0996A95700BA26F7 = { DevelopmentTeam = 4627ATJELP; }; AFD56F0B0996AAFA00BA26F7 = { DevelopmentTeam = 4627ATJELP; }; AFD56F230996AB8A00BA26F7 = { DevelopmentTeam = 4627ATJELP; }; AFD56F4F0996AEEE00BA26F7 = { DevelopmentTeam = 4627ATJELP; }; AFD56F6B0996B01600BA26F7 = { DevelopmentTeam = 4627ATJELP; }; AFD56F8C0996B09400BA26F7 = { DevelopmentTeam = 4627ATJELP; }; AFD56FA30996B10F00BA26F7 = { DevelopmentTeam = 4627ATJELP; }; AFD56FB90996B18F00BA26F7 = { DevelopmentTeam = 4627ATJELP; }; AFD56FCF0996B20900BA26F7 = { DevelopmentTeam = 4627ATJELP; }; AFD56FF80996B43800BA26F7 = { DevelopmentTeam = 4627ATJELP; }; AFD5700F0996B4CC00BA26F7 = { DevelopmentTeam = 4627ATJELP; }; AFD570260996B56D00BA26F7 = { DevelopmentTeam = 4627ATJELP; }; AFD570430996B61600BA26F7 = { DevelopmentTeam = 4627ATJELP; }; AFD570590996B6A300BA26F7 = { DevelopmentTeam = 4627ATJELP; }; AFD5706F0996B72700BA26F7 = { DevelopmentTeam = 4627ATJELP; }; AFD570850996B80300BA26F7 = { DevelopmentTeam = 4627ATJELP; }; AFD5709B0996B88E00BA26F7 = { DevelopmentTeam = 4627ATJELP; }; AFD570B10996B93000BA26F7 = { DevelopmentTeam = 4627ATJELP; }; AFD570C90996B9F800BA26F7 = { DevelopmentTeam = 4627ATJELP; }; AFD570EA0996BBBF00BA26F7 = { DevelopmentTeam = 4627ATJELP; }; AFD571130996BE9300BA26F7 = { DevelopmentTeam = 4627ATJELP; }; AFD5712C0996BF2E00BA26F7 = { DevelopmentTeam = 4627ATJELP; }; AFD571430996C01700BA26F7 = { DevelopmentTeam = 4627ATJELP; }; AFD571590996C0CE00BA26F7 = { DevelopmentTeam = 4627ATJELP; }; AFD571B50996D9DC00BA26F7 = { DevelopmentTeam = 4627ATJELP; }; AFD572220996E4A300BA26F7 = { DevelopmentTeam = 4627ATJELP; }; AFD5726D0996EE8500BA26F7 = { DevelopmentTeam = 4627ATJELP; }; AFD572A50996F99600BA26F7 = { DevelopmentTeam = 4627ATJELP; }; AFD572C20996FC0F00BA26F7 = { DevelopmentTeam = 4627ATJELP; }; AFD572F9099701C000BA26F7 = { DevelopmentTeam = 4627ATJELP; }; AFD5735D0997411200BA26F7 = { DevelopmentTeam = 4627ATJELP; }; AFDA658E178A52B70070D24B = { DevelopmentTeam = 4627ATJELP; }; AFE2A4560E2E904600ADB298 = { DevelopmentTeam = 4627ATJELP; }; AFE30BE80E52B14700CCF4A5 = { DevelopmentTeam = 4627ATJELP; }; AFE6A1820CDD7B2E002805BF = { DevelopmentTeam = 4627ATJELP; }; AFE6A41B0CDD7FAA002805BF = { DevelopmentTeam = 4627ATJELP; }; AFEC23CD1CB6EAE100DE138F = { DevelopmentTeam = 4627ATJELP; }; AFEE104D1D13406000AAC8F7 = { DevelopmentTeam = 4627ATJELP; }; AFEE106C1D15EB0700AAC8F7 = { DevelopmentTeam = 4627ATJELP; }; AFEE108B1D17E20B00AAC8F7 = { DevelopmentTeam = 4627ATJELP; }; AFF2867F17860E830050A578 = { DevelopmentTeam = 4627ATJELP; }; AFF3C9E817CCAC440028F240 = { DevelopmentTeam = 4627ATJELP; }; AFF463360C4403E400EE6509 = { DevelopmentTeam = 4627ATJELP; }; AFF463580C440AEF00EE6509 = { DevelopmentTeam = 4627ATJELP; }; AFFAB31519158CE40020F021 = { DevelopmentTeam = 4627ATJELP; }; CE3D01511B76F4C100993C75 = { DevelopmentTeam = 4627ATJELP; }; }; }; buildConfigurationList = C01FCF4E08A954540054247B /* Build configuration list for PBXProject "xscreensaver" */; compatibilityVersion = "Xcode 3.2"; developmentRegion = English; hasScannedForEncodings = 1; knownRegions = ( English, Japanese, French, German, en, Base, ); mainGroup = 29B97314FDCFA39411CA2CEA /* xscreensaver */; projectDirPath = ""; projectRoot = ""; targets = ( AF480D5A098EED5E00FB32B8 /* All Savers */, AF4808C0098C3B6C00FB32B8 /* jwxyz */, AF480AAF098C669800FB32B8 /* All Savers (XScreenSaver) */, AFE6A41B0CDD7FAA002805BF /* Abstractile */, AF47721E099D4F67001F091E /* Anemone */, AF4773C1099D67B9001F091E /* Anemotaxis */, AF9D4DEC09B5BB19006E59CF /* Apple2 */, AF63F2471C3465BE0033E133 /* Apple2-iOS */, AFBFE74B178642DC00432B21 /* Apple2-OSX */, AF9770660989D2F6001F8B92 /* Attraction */, AF975A86099C6BC300B05160 /* Barcode */, AF73FF221A09877F00E485E9 /* BinaryRing */, AF47768F099DAA6F001F091E /* Blaster */, AF7778A509B659C800EA3033 /* BlitSpin */, AF4777D1099DC183001F091E /* BoxFit */, AF9D4DAF09B5B71E006E59CF /* BSOD */, AF9D48DB09B53322006E59CF /* Bumps */, AF4771DB099D4D9A001F091E /* CCurve */, AF477774099DB965001F091E /* Celtic */, AF47770D099DAF9F001F091E /* CloudLife */, AF477169099D4786001F091E /* Compass */, AF4775D8099D9F69001F091E /* Coral */, AFF463360C4403E400EE6509 /* CWaves */, AF4778E8099DDDC8001F091E /* Cynosure */, AF9D466609B5109C006E59CF /* DecayScreen */, AF976FBB0989CAA2001F8B92 /* Deco */, AF47704C099D4385001F091E /* Deluxe */, AF9D48F409B535DA006E59CF /* Distort */, AF4775F2099DA030001F091E /* Epicycle */, AF975A6C099C6AB200B05160 /* Eruption */, AF975AD7099C6EB100B05160 /* Fireworkx */, AF477483099D89E4001F091E /* Flame */, AF477790099DBA90001F091E /* FluidBalls */, AF77787F09B6563500EA3033 /* FontGlide */, AF47739A099D6648001F091E /* FuzzyFlakes */, AF64267B09A194B0000F4CD4 /* Goop */, AF975C3D099C8DCF00B05160 /* Greynetic */, AF477253099D5717001F091E /* Halftone */, AF975C12099C8C1500B05160 /* Halo */, AF480C49098E301400FB32B8 /* Helix */, AFB591A7178B812C00EA4005 /* Hexadrop */, AF477426099D7C70001F091E /* IFS */, AF97572D099C317000B05160 /* IMSMap */, AF477752099DB61E001F091E /* Interaggregate */, AF476FB5099D154F001F091E /* Interference */, AF477401099D69E7001F091E /* Intermomentary */, AF477499099D8A74001F091E /* Kaleidescope */, AF477613099DA26C001F091E /* Kumppa */, AF1A17610D6D6EE3008AF328 /* LCDscrub */, AF4FF4930D52CA0800666F98 /* m6502.h */, AF0DC7AB0C4C73F600D76972 /* m6502 */, AF4774CE099D8BFF001F091E /* Maze */, AF975AFC099C6FE400B05160 /* MemScroller */, AF975A36099C681F00B05160 /* MetaBalls */, AF975775099C374A00B05160 /* Moire */, AF64262C09A18F54000F4CD4 /* Moire2 */, AF64264F09A19229000F4CD4 /* Munch */, AF4771F2099D4E63001F091E /* NerveRot */, AF975C5D099C8F3F00B05160 /* NoseGuy */, AF47755D099D9A1A001F091E /* Pedal */, AF4778AB099DDB79001F091E /* Penetrate */, AF477670099DA849001F091E /* Petri */, AF7776E409B63ABF00EA3033 /* Phosphor */, AF63F4501C34682A0033E133 /* Phosphor-iOS */, AFBFE767178647FE00432B21 /* Phosphor-OSX */, AF477283099D5926001F091E /* Piecewise */, AF9D4CE709B5AA8E006E59CF /* Pong */, AF47726B099D57B9001F091E /* PopSquares */, AF477583099D9C28001F091E /* Pyro */, AF6425EC09A189EC000F4CD4 /* Qix */, AF9757C2099C3E6300B05160 /* RDbomb */, AF9D492B09B53CBA006E59CF /* Ripples */, AF975D52099CA0F000B05160 /* Rocks */, AF9770290989D1E6001F8B92 /* Rorschach */, AF9D495409B53FC9006E59CF /* RotZoomer */, AF975865099C475900B05160 /* ShadeBobs */, AF9D474409B5300A006E59CF /* SlideScreen */, AF47792A099DE4C7001F091E /* Slip */, AF64277109A1D37A000F4CD4 /* SpeedMine */, AF9D499709B544C2006E59CF /* Spotlight */, AF477644099DA6D0001F091E /* Squiral */, AF47759F099D9CF7001F091E /* Starfish */, AF477723099DB044001F091E /* Substrate */, AF68A47E19196CF800D41CD1 /* Tessellimage */, AF476FDA099D1686001F091E /* Truchet */, AF9D496C09B5411D006E59CF /* Twang */, AF4776F1099DAE7A001F091E /* Vermiculate */, AF47717F099D4803001F091E /* Wander */, AFA3392E0B058505002B0E7D /* WebCollage */, AFA33C020B058E17002B0E7D /* webcollage-perl */, AFA33BC60B058740002B0E7D /* webcollage-helper */, AF4776DB099DADDF001F091E /* WhirlWindWarp */, AF477382099D65A1001F091E /* Wormhole */, AF975808099C41D500B05160 /* XFlame */, AF9D4D7E09B5B2DC006E59CF /* XAnalogTV */, AF4778C7099DDCAE001F091E /* XJack */, AF9D4C6909B59F27006E59CF /* XLyap */, AF477442099D7D33001F091E /* XMatrix */, AF4776C0099DAC8A001F091E /* XRaySwarm */, AF4776AA099DABDD001F091E /* XSpirograph */, AF9D475F09B53166006E59CF /* Zoom */, AF480D58098EED3D00FB32B8 /* All Savers (XLockmore) */, AFD5712C0996BF2E00BA26F7 /* Apollonian */, AFD572A50996F99600BA26F7 /* Bouboule */, AFD56EAE0996A72600BA26F7 /* Braid */, AFD572C20996FC0F00BA26F7 /* Crystal */, AF794F64099748450059A8B0 /* Demon */, AFD571130996BE9300BA26F7 /* Discrete */, AF480D72098EEDDE00FB32B8 /* Drift */, AFD571430996C01700BA26F7 /* Euler2D */, AFD570590996B6A300BA26F7 /* FadePlot */, AF794F8E09974A320059A8B0 /* Fiberlamp */, AFD570EA0996BBBF00BA26F7 /* Flow */, AFD56F230996AB8A00BA26F7 /* Galaxy */, AFD56F4F0996AEEE00BA26F7 /* Grav */, AFD56F6B0996B01600BA26F7 /* Hopalong */, AFD572F9099701C000BA26F7 /* Julia */, AF794FCD09974FA60059A8B0 /* Loop */, AFD5706F0996B72700BA26F7 /* Mountain */, AF77771A09B6416100EA3033 /* Pacman */, AFD56FF80996B43800BA26F7 /* Penrose */, AFD5726D0996EE8500BA26F7 /* Polyominoes */, AFD5700F0996B4CC00BA26F7 /* Sierpinski */, AFD5735D0997411200BA26F7 /* Strange */, AFD572220996E4A300BA26F7 /* Swirl */, AFD571590996C0CE00BA26F7 /* Thornbird */, AFD570850996B80300BA26F7 /* Triangle */, AF480D59098EED5100FB32B8 /* All Savers (OpenGL) */, AFA5604A09936E2100F3E977 /* AntInspect */, AFA562DA099393C900F3E977 /* AntMaze */, AFA5606209936F3800F3E977 /* AntSpotlight */, AF08398F09930B6B00277BE9 /* Atlantis */, AF083A32099311D700277BE9 /* Atunnel */, AFA5615609937C0D00F3E977 /* BlinkBox */, AFA5601409936CC800F3E977 /* BlockTube */, AFA562BF099392C600F3E977 /* Boing */, AFA55EC7099360E300F3E977 /* BouncingCow */, AFA55CA909934BB200F3E977 /* Boxed */, AFA55ACF09933CEF00F3E977 /* Bubble3D */, AFA55946099330B000F3E977 /* Cage */, AF77784409B6528100EA3033 /* Carousel */, AFA55BAB099340CE00F3E977 /* Circuit */, AF5C9AF91A0CCE6E00B0147A /* Cityflow */, AF3581BF1431D47B00E09C51 /* CompanionCube */, AFA563130993951000F3E977 /* Crackberg */, AFA56351099396C000F3E977 /* Cube21 */, AFA55D620993584B00F3E977 /* Cubenetic */, AFEE106C1D15EB0700AAC8F7 /* CubeStack */, AFA55FD309936BFA00F3E977 /* CubeStorm */, AFEE104D1D13406000AAC8F7 /* CubeTwist */, AF4FF4BA0D52CBDE00666F98 /* CubicGrid */, AF4810EB09909FBA00FB32B8 /* DangerBall */, AF39381A1D0FBD6A00205406 /* Discoball */, AF77786109B6536000EA3033 /* DNAlogo */, AFEC23CD1CB6EAE100DE138F /* DymaxionMap */, AFACE8731CC83458008B24CD /* EnergyStream */, AFA55E0D09935EDC00F3E977 /* Endgame */, AFA55C0E0993431300F3E977 /* Engine */, AF6423F2099FF9C2000F4CD4 /* Extrusion */, AFA5603209936D5100F3E977 /* FlipFlop */, AF77773E09B6446500EA3033 /* FlipScreen3D */, AF7777EA09B64E3100EA3033 /* FlipText */, AFA55E4E09935FF900F3E977 /* FlyingToasters */, AF4812500990CE2700FB32B8 /* Gears */, AFF3C9E817CCAC440028F240 /* Geodesic */, AF7ACFC019FF0A9200BD752B /* GeodesicGears */, AFA55B9109933FDA00F3E977 /* GFlux */, AFA55E2F09935F8E00F3E977 /* GLBlur */, AFF463580C440AEF00EE6509 /* GLCells */, AF77777409B6497800EA3033 /* Gleidescope */, AFA56331099395ED00F3E977 /* GLHanoi */, AFA55FF909936C6D00F3E977 /* GLKnots */, AFA55F720993643600F3E977 /* GLMatrix */, AFA55B0909933E0500F3E977 /* GLPlanet */, AF48DEEF0A0C25E000F94CF9 /* GLSchool */, AF7777D009B64C6B00EA3033 /* GLSlideshow */, AFA55C77099349A600F3E977 /* GLSnake */, AFD56DF10996A03800BA26F7 /* GLText */, AF1B0FA71D7AB4740011DBE4 /* Hexstrut */, AF78D175142DD8F3002AAF77 /* Hilbert */, AFC0E8AB1CDC601A008CAFAC /* Hydrostat */, AFA55F420993629000F3E977 /* Hypertorus */, AF3C71450D624BF50030CC0D /* Hypnowheel */, AFA55F06099361B700F3E977 /* JigglyPuff */, AF35E88A0E63823600691F2F /* Jigsaw */, AFA563A4099398BB00F3E977 /* Juggler3D */, AF7510FF1782B5B900380EA1 /* Kaleidocycle */, AFA55F2A0993622F00F3E977 /* Klein */, AFA55A790993364300F3E977 /* Lament */, AFA55DC809935D7000F3E977 /* Lavalite */, AF4FD6E60CE7A486005EE58E /* Lockward */, AFA55BE40993429100F3E977 /* Menger */, AF77778E09B64A5200EA3033 /* MirrorBlob */, AFA5596D0993317900F3E977 /* Moebius */, AFE6A1820CDD7B2E002805BF /* MoebiusGears */, AFA56119099378CB00F3E977 /* molecules.h */, AFA560FD0993781600F3E977 /* Molecule */, AFA559B50993328000F3E977 /* Morph3D */, AFA5617B09937CF100F3E977 /* Noof */, AFD51B1B0F063B4A00471C02 /* Photopile */, AFA5621F0993852500F3E977 /* Pinion */, AF4812B30990D3D900FB32B8 /* Pipes */, AFA5619D09937D7E00F3E977 /* Polyhedra */, AFA560AE0993718D00F3E977 /* Polytopes */, AFFAB31519158CE40020F021 /* ProjectivePlane */, AFA562060993849F00F3E977 /* Providence */, AFA55B2509933E8D00F3E977 /* Pulsar */, AFF2867F17860E830050A578 /* QuasiCrystal */, AFA55DF009935E4900F3E977 /* Queens */, AFA2118C1CD59DAF00C0D2A1 /* RaverHoop */, AF63A7F11AB4EDDB00593C75 /* RomanBoy */, AFA559CF0993330600F3E977 /* Rubik */, AF32D9E00F3AD0B40080F535 /* RubikBlocks */, AFA55D3C0993565300F3E977 /* SBalls */, AFA55B7909933F7200F3E977 /* Sierpinski3D */, AFE2A4560E2E904600ADB298 /* SkyTentacles */, AFE30BE80E52B14700CCF4A5 /* Sonar */, AFA55D7F099358C400F3E977 /* Spheremonics */, AFCF833B1AF5B515008BB7E1 /* SplitFlap */, AFEE108B1D17E20B00AAC8F7 /* Splodesic */, AFA55A20099334A000F3E977 /* Sproingies */, AFA55A030993340300F3E977 /* Stairs */, AF77781009B6504400EA3033 /* StarWars */, AF7777A809B64B2600EA3033 /* StonerView */, AFA559920993322100F3E977 /* Superquadrics */, AF4A3449102A593600A81B2A /* Surfaces */, AFA562F20993943B00F3E977 /* Tangram */, AFA56379099397B300F3E977 /* TimeTunnel */, AF998EDA0A083DB30051049D /* TopBlock */, AF3581FB143330F900E09C51 /* TronBit */, AF46E9CF1CBBA2B300240FBC /* Unicrud */, AFDA658E178A52B70070D24B /* Unknown Pleasures */, AF0DCA420C4CBB0D00D76972 /* Voronoi */, AF39E282198A11F60064A58D /* WindupRobot */, AF137D410F075C9B004DE3B2 /* Obsolete */, AFA55CCC09934CE400F3E977 /* GLForestFire */, AFD570C90996B9F800BA26F7 /* Ant */, AF6427A809A2DE36000F4CD4 /* Bubbles */, AF47765A099DA78E001F091E /* Critical */, AF477909099DE379001F091E /* Flag */, AFD56EDA0996A95700BA26F7 /* Forest */, AF64260F09A18D6C000F4CD4 /* HyperBall */, AF6425CC09A18855000F4CD4 /* HyperCube */, AFD571B50996D9DC00BA26F7 /* Juggle */, AFD56F8C0996B09400BA26F7 /* Laser */, AFD56FA30996B10F00BA26F7 /* Lightning */, AFD56FB90996B18F00BA26F7 /* Lisa */, AFD56FCF0996B20900BA26F7 /* Lissie */, AF4774B4099D8B5F001F091E /* LMorph */, AFD570B10996B93000BA26F7 /* Rotor */, AFD570260996B56D00BA26F7 /* Sphere */, AFD570430996B61600BA26F7 /* Spiral */, AF4771A7099D4949001F091E /* T3D */, CE3D01511B76F4C100993C75 /* TestX11 */, AF63F4781C3469FC0033E133 /* TestX11-iOS */, AFD56F0B0996AAFA00BA26F7 /* Vines */, AF477208099D4EE8001F091E /* Whirlygig */, AFD5709B0996B88E00BA26F7 /* Worm */, AF9E7EBE190F4C1B00A8B01F /* enable_gc */, AF9771D60989DC4A001F8B92 /* SaverTester */, AF918977158FC00A002B5D1E /* XScreenSaver-iOS */, AF1AD9E118500F9F00932759 /* XScreenSaverUpdater */, ); }; /* End PBXProject section */ /* Begin PBXResourcesBuildPhase section */ AF08399209930B6B00277BE9 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AF0839A609930BAC00277BE9 /* atlantis.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF083A35099311D700277BE9 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AF083A4B0993120900277BE9 /* atunnel.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF0DC7AE0C4C73F600D76972 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AF0DCA380C4C74B700D76972 /* m6502.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF0DCA450C4CBB0D00D76972 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AF0DCA620C4CBB8E00D76972 /* voronoi.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF1A17640D6D6EE3008AF328 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AF1A17810D6D6F62008AF328 /* lcdscrub.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF1AD9E018500F9F00932759 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AF1ADA1B18501B3D00932759 /* SaverRunner.icns in Resources */, AF3633FC18530DD90086A439 /* sparkle_dsa_pub.pem in Resources */, AF1ADA161850157400932759 /* Updater.xib in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF1B0FAA1D7AB4740011DBE4 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AF1B0FC11D7AB53A0011DBE4 /* hexstrut.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF32D9E30F3AD0B40080F535 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AF32D9FD0F3AD1330080F535 /* rubikblocks.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF3581C21431D47B00E09C51 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AF3581C31431D47B00E09C51 /* voronoi.xml in Resources */, AF3581E81431D61D00E09C51 /* companioncube.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF3581FE143330F900E09C51 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AF3581FF143330F900E09C51 /* voronoi.xml in Resources */, AF3582221433318500E09C51 /* tronbit.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF35E88D0E63823600691F2F /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AF35EB240E63829600691F2F /* jigsaw.xml in Resources */, AF4A8CA010B609B50074B062 /* xscreensaver-getimage-file in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF39381D1D0FBD6A00205406 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AF3938331D0FBF0100205406 /* discoball.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF39E285198A11F60064A58D /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AF39E2AD198A15820064A58D /* winduprobot.xml in Resources */, AFCF509D198C3612005B0DB1 /* xscreensaver-text in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF3C71480D624BF50030CC0D /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AF3C71600D624C7C0030CC0D /* hypnowheel.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF46E9D21CBBA2B300240FBC /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AF46E9E81CBBA41600240FBC /* unicrud.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF476FB8099D154F001F091E /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AF476FCF099D1587001F091E /* interference.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF476FDD099D1686001F091E /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AF476FEF099D16E4001F091E /* truchet.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF47704F099D4385001F091E /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AF47705E099D43B7001F091E /* deluxe.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF47716C099D4786001F091E /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AF47717B099D47B7001F091E /* compass.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF477182099D4803001F091E /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AF477191099D4846001F091E /* wander.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF4771AA099D4949001F091E /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AF4771B9099D4981001F091E /* t3d.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF4771DE099D4D9A001F091E /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AF4771EE099D4DE5001F091E /* ccurve.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF4771F5099D4E63001F091E /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AF477204099D4EA2001F091E /* nerverot.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF47720B099D4EE8001F091E /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AF47721A099D4F27001F091E /* whirlygig.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF477221099D4F67001F091E /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AF477230099D4FBD001F091E /* anemone.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF477256099D5717001F091E /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AF477265099D5752001F091E /* halftone.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF47726E099D57B9001F091E /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AF47727D099D57F5001F091E /* popsquares.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF477286099D5926001F091E /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AF477296099D596A001F091E /* piecewise.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF477385099D65A1001F091E /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AF477394099D65EB001F091E /* wormhole.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF47739D099D6648001F091E /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AF4773AC099D6762001F091E /* fuzzyflakes.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF4773C4099D67B9001F091E /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AF4773D3099D6804001F091E /* anemotaxis.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF477404099D69E7001F091E /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AF47741B099D6A58001F091E /* intermomentary.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF477429099D7C70001F091E /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AF477439099D7CD0001F091E /* ifs.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF477445099D7D33001F091E /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AF477454099D7D75001F091E /* xmatrix.xml in Resources */, AF998ED60A083A280051049D /* xscreensaver-text in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF477486099D89E4001F091E /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AF477495099D8A3A001F091E /* flame.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF47749C099D8A74001F091E /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AF4774AB099D8AF3001F091E /* kaleidescope.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF4774B7099D8B5F001F091E /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AF4774CA099D8BAE001F091E /* lmorph.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF4774D1099D8BFF001F091E /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AF4774E0099D8C74001F091E /* maze.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF477560099D9A1A001F091E /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AF47756F099D9A70001F091E /* pedal.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF477586099D9C28001F091E /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AF47759B099D9C8D001F091E /* pyro.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF4775A2099D9CF7001F091E /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AF4775B1099D9D51001F091E /* starfish.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF4775DB099D9F69001F091E /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AF4775EC099D9FDB001F091E /* coral.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF4775F5099DA030001F091E /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AF477604099DA083001F091E /* epicycle.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF477616099DA26C001F091E /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AF477629099DA2D2001F091E /* kumppa.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF477647099DA6D0001F091E /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AF477656099DA738001F091E /* squiral.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF47765D099DA78E001F091E /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AF47766C099DA7F3001F091E /* critical.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF477673099DA849001F091E /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AF477682099DA8AC001F091E /* petri.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF477692099DAA6F001F091E /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AF4776A1099DAAC9001F091E /* blaster.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF4776AD099DABDD001F091E /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AF4776BC099DAC29001F091E /* xspirograph.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF4776C3099DAC8A001F091E /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AF4776D2099DACD6001F091E /* xrayswarm.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF4776DE099DADDF001F091E /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AF4776ED099DAE38001F091E /* whirlwindwarp.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF4776F4099DAE7A001F091E /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AF477703099DAF24001F091E /* vermiculate.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF477710099DAF9F001F091E /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AF47771F099DB000001F091E /* cloudlife.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF477726099DB044001F091E /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AF477735099DB0ED001F091E /* substrate.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF477755099DB61E001F091E /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AF477768099DB6FD001F091E /* interaggregate.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF477777099DB965001F091E /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AF477786099DBA11001F091E /* celtic.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF477793099DBA90001F091E /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AF4777A3099DBAF8001F091E /* fluidballs.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF4777D4099DC183001F091E /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AF4778A2099DDA76001F091E /* boxfit.xml in Resources */, AF0FAF1609CA712600EE1051 /* xscreensaver-getimage-file in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF4778AE099DDB79001F091E /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AF4778BD099DDC1B001F091E /* penetrate.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF4778CA099DDCAE001F091E /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AF4778D9099DDD14001F091E /* xjack.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF4778EB099DDDC8001F091E /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AF4778FA099DDE5F001F091E /* cynosure.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF47790C099DE379001F091E /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AF47791B099DE3D9001F091E /* flag.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF47792D099DE4C7001F091E /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AF47793C099DE535001F091E /* slip.xml in Resources */, AF0FAF2509CA712600EE1051 /* xscreensaver-getimage-file in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF480C4C098E301400FB32B8 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AF480C69098E309E00FB32B8 /* helix.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF480D75098EEDDE00FB32B8 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AF480D85098EEE3100FB32B8 /* drift.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF4810EE09909FBA00FB32B8 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AF4811440990A35B00FB32B8 /* dangerball.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF4812530990CE2700FB32B8 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AF48126D0990CE8600FB32B8 /* gears.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF4812B60990D3D900FB32B8 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AF4812C80990D41700FB32B8 /* pipes.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF48DEF20A0C25E000F94CF9 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AF48E16C0A0C26A400F94CF9 /* glschool.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF4A344C102A593600A81B2A /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AF4A3462102A59EB00A81B2A /* surfaces.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF4FD6E90CE7A486005EE58E /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AF4FD7030CE7A5BC005EE58E /* lockward.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF4FF4BD0D52CBDE00666F98 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AF4FF4D40D52CCAA00666F98 /* cubicgrid.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF5C9AFC1A0CCE6E00B0147A /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AF5C9B111A0CCF4E00B0147A /* cityflow.xml in Resources */, AF5C9AFD1A0CCE6E00B0147A /* dangerball.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF63A7F41AB4EDDB00593C75 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AF63A80A1AB4EF5D00593C75 /* romanboy.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF63F2501C3465BE0033E133 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AF63F2511C3465BE0033E133 /* iSaverRunner.xib in Resources */, AF63F2521C3465BE0033E133 /* LaunchScreen.xib in Resources */, AF63F2531C3465BE0033E133 /* iSaverRunner57t.png in Resources */, AF63F25D1C3465BE0033E133 /* apple2.xml in Resources */, AF63F2B71C3465BE0033E133 /* Media-iOS.xcassets in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF63F4581C34682A0033E133 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AF63F4591C34682A0033E133 /* iSaverRunner.xib in Resources */, AF63F45A1C34682A0033E133 /* LaunchScreen.xib in Resources */, AF63F45B1C34682A0033E133 /* iSaverRunner57t.png in Resources */, AF63F4761C3469410033E133 /* phosphor.xml in Resources */, AF63F45D1C34682A0033E133 /* Media-iOS.xcassets in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF63F4801C3469FC0033E133 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AF63F4811C3469FC0033E133 /* iSaverRunner.xib in Resources */, AF63F4821C3469FC0033E133 /* LaunchScreen.xib in Resources */, AF63F4831C3469FC0033E133 /* iSaverRunner57t.png in Resources */, AF63F49C1C346B0A0033E133 /* testx11.xml in Resources */, AF63F4851C3469FC0033E133 /* Media-iOS.xcassets in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF6423F5099FF9C2000F4CD4 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AF642408099FFAB0000F4CD4 /* extrusion.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF6425CF09A18855000F4CD4 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AF6425DE09A188D7000F4CD4 /* hypercube.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF6425EF09A189EC000F4CD4 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AF6425FE09A18A77000F4CD4 /* qix.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF64261209A18D6C000F4CD4 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AF64262109A18DFF000F4CD4 /* hyperball.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF64262F09A18F54000F4CD4 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AF64263E09A18FCE000F4CD4 /* moire2.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF64265209A19229000F4CD4 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AF64266109A1929A000F4CD4 /* munch.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF64267E09A194B0000F4CD4 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AF64268D09A19525000F4CD4 /* goop.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF64277409A1D37A000F4CD4 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AF64278309A1D418000F4CD4 /* speedmine.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF6427AB09A2DE36000F4CD4 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AF6427BA09A2DF09000F4CD4 /* bubbles.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF68A48119196CF800D41CD1 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AF68A49719196E3E00D41CD1 /* tessellimage.xml in Resources */, AF4A6692191F7CAE00C74753 /* xscreensaver-getimage-file in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF73FF251A09877F00E485E9 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AF73FF3C1A0988C500E485E9 /* binaryring.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF7511021782B5B900380EA1 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AFB8A69B1782BA34004EDB85 /* kaleidocycle.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF7776E709B63ABF00EA3033 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AF77770209B63B3900EA3033 /* phosphor.xml in Resources */, AF0FAF1009CA6FF900EE1051 /* xscreensaver-text in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF77771D09B6416100EA3033 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AF77772C09B641C800EA3033 /* pacman.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF77774109B6446500EA3033 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AF77775309B644E300EA3033 /* flipscreen3d.xml in Resources */, AF0FAF1C09CA712600EE1051 /* xscreensaver-getimage-file in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF77777709B6497800EA3033 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AF77778A09B64A0D00EA3033 /* gleidescope.xml in Resources */, AF0FAF1E09CA712600EE1051 /* xscreensaver-getimage-file in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF77779109B64A5200EA3033 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AF7777A409B64AE200EA3033 /* mirrorblob.xml in Resources */, AF0FAF2109CA712600EE1051 /* xscreensaver-getimage-file in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF7777AB09B64B2600EA3033 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AF7777BE09B64BAC00EA3033 /* stonerview.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF7777D309B64C6B00EA3033 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AF7777E609B64CD800EA3033 /* glslideshow.xml in Resources */, AF0FAF1F09CA712600EE1051 /* xscreensaver-getimage-file in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF7777ED09B64E3100EA3033 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AF77780009B64EA800EA3033 /* fliptext.xml in Resources */, AF0FAF0D09CA6FF900EE1051 /* xscreensaver-text in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF77781309B6504400EA3033 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AF77782709B650D200EA3033 /* starwars.xml in Resources */, AF0FAF1109CA6FF900EE1051 /* xscreensaver-text in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF77784709B6528100EA3033 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AF77787D09B654FE00EA3033 /* carousel.xml in Resources */, AF0FAF1909CA712600EE1051 /* xscreensaver-getimage-file in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF77786409B6536000EA3033 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AF77787A09B6545E00EA3033 /* dnalogo.xml in Resources */, AFC43E7B1C6AA77900C89999 /* YearlReg.ttf in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF77788209B6563500EA3033 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AF77789109B656A900EA3033 /* fontglide.xml in Resources */, AF0FAF0E09CA6FF900EE1051 /* xscreensaver-text in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF7778A809B659C800EA3033 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AF7778B909B65A6E00EA3033 /* blitspin.xml in Resources */, AF0FAF1509CA712600EE1051 /* xscreensaver-getimage-file in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF78D178142DD8F3002AAF77 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AF78D179142DD8F3002AAF77 /* voronoi.xml in Resources */, AF78D191142DD99B002AAF77 /* hilbert.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF794F67099748450059A8B0 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AF794F7D0997486C0059A8B0 /* demon.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF794F9109974A320059A8B0 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AF794FA809974AC60059A8B0 /* fiberlamp.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF794FD009974FA60059A8B0 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AF794FDF09974FD10059A8B0 /* loop.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF7ACFC319FF0A9200BD752B /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AF7ACFD919FF0BA600BD752B /* geodesicgears.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF91897B158FC00A002B5D1E /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AF918983158FC00A002B5D1E /* iSaverRunner.xib in Resources */, AF73FF211A08AB9400E485E9 /* iSaverRunner57t.png in Resources */, 55EDCB3D1AD498A800251909 /* LaunchScreen.xib in Resources */, 550FB6001AD64424001A4FA5 /* Media-iOS.xcassets in Resources */, AFEC68371BD6CA85004C1B64 /* OCRAStd.otf in Resources */, AFC43E741C68364B00C89999 /* PxPlus_IBM_VGA8.ttf in Resources */, AFEC68391BD6CDF9004C1B64 /* YearlReg.ttf in Resources */, AF918AB4158FC53D002B5D1E /* abstractile.xml in Resources */, AF918AB5158FC53D002B5D1E /* anemone.xml in Resources */, AF918AB6158FC53D002B5D1E /* anemotaxis.xml in Resources */, AF918AB8158FC53D002B5D1E /* antinspect.xml in Resources */, AF918AB9158FC53D002B5D1E /* antmaze.xml in Resources */, AF918ABA158FC53D002B5D1E /* antspotlight.xml in Resources */, AF918ABB158FC53D002B5D1E /* apollonian.xml in Resources */, AF918ABC158FC53D002B5D1E /* apple2.xml in Resources */, AF918ABD158FC53D002B5D1E /* atlantis.xml in Resources */, AF918ABE158FC53D002B5D1E /* attraction.xml in Resources */, AF918ABF158FC53D002B5D1E /* atunnel.xml in Resources */, AF918AC0158FC53D002B5D1E /* barcode.xml in Resources */, AF73FF3D1A0988C500E485E9 /* binaryring.xml in Resources */, AFEE10681D1341FE00AAC8F7 /* cubetwist.xml in Resources */, AF918AC1158FC53D002B5D1E /* blaster.xml in Resources */, AF918AC2158FC53D002B5D1E /* blinkbox.xml in Resources */, AF918AC3158FC53D002B5D1E /* blitspin.xml in Resources */, AF918AC4158FC53D002B5D1E /* blocktube.xml in Resources */, AF918AC5158FC53D002B5D1E /* boing.xml in Resources */, AF918AC6158FC53D002B5D1E /* bouboule.xml in Resources */, AF918AC7158FC53D002B5D1E /* bouncingcow.xml in Resources */, AF918AC8158FC53D002B5D1E /* boxed.xml in Resources */, AF918AC9158FC53D002B5D1E /* boxfit.xml in Resources */, AF918ACA158FC53D002B5D1E /* braid.xml in Resources */, AF918ACB158FC53D002B5D1E /* bsod.xml in Resources */, AF918ACC158FC53D002B5D1E /* bubble3d.xml in Resources */, AF918ACE158FC53D002B5D1E /* bumps.xml in Resources */, AF918ACF158FC53D002B5D1E /* cage.xml in Resources */, AF918AD0158FC53D002B5D1E /* carousel.xml in Resources */, AF918AD1158FC53D002B5D1E /* ccurve.xml in Resources */, AF918AD2158FC53D002B5D1E /* celtic.xml in Resources */, AF918AD3158FC53D002B5D1E /* circuit.xml in Resources */, AF5C9B121A0CCF4E00B0147A /* cityflow.xml in Resources */, AF918AD4158FC53D002B5D1E /* cloudlife.xml in Resources */, AF918AD5158FC53D002B5D1E /* companioncube.xml in Resources */, AF918AD6158FC53D002B5D1E /* compass.xml in Resources */, AF918AD7158FC53D002B5D1E /* coral.xml in Resources */, AF918AD8158FC53D002B5D1E /* crackberg.xml in Resources */, AF918ADA158FC53D002B5D1E /* crystal.xml in Resources */, AF918ADB158FC53D002B5D1E /* cube21.xml in Resources */, AF918ADC158FC53D002B5D1E /* cubenetic.xml in Resources */, AFEE10881D15EBDC00AAC8F7 /* cubestack.xml in Resources */, AF918ADD158FC53D002B5D1E /* cubestorm.xml in Resources */, AF918ADE158FC53D002B5D1E /* cubicgrid.xml in Resources */, AF918ADF158FC53D002B5D1E /* cwaves.xml in Resources */, AF918AE0158FC53D002B5D1E /* cynosure.xml in Resources */, AF918AE1158FC53D002B5D1E /* dangerball.xml in Resources */, AF918AE2158FC53D002B5D1E /* decayscreen.xml in Resources */, AF918AE3158FC53D002B5D1E /* deco.xml in Resources */, AF918AE4158FC53D002B5D1E /* deluxe.xml in Resources */, AF918AE5158FC53D002B5D1E /* demon.xml in Resources */, AF918AE6158FC53D002B5D1E /* discrete.xml in Resources */, AF3938361D0FBF2700205406 /* discoball.xml in Resources */, AF918AE7158FC53D002B5D1E /* distort.xml in Resources */, AFCF453815986A3000E6E8CC /* dnalogo.xml in Resources */, AFEC23E81CB6EC6800DE138F /* dymaxionmap.xml in Resources */, AF918AE9158FC53D002B5D1E /* drift.xml in Resources */, AF918AEA158FC53D002B5D1E /* endgame.xml in Resources */, AFACE88C1CC835F7008B24CD /* energystream.xml in Resources */, AF918AEB158FC53D002B5D1E /* engine.xml in Resources */, AF918AEC158FC53D002B5D1E /* epicycle.xml in Resources */, AF918AED158FC53D002B5D1E /* eruption.xml in Resources */, AF918AEE158FC53D002B5D1E /* euler2d.xml in Resources */, AF918AF0158FC53D002B5D1E /* fadeplot.xml in Resources */, AF918AF1158FC53D002B5D1E /* fiberlamp.xml in Resources */, AF918AF2158FC53D002B5D1E /* fireworkx.xml in Resources */, AF918AF4158FC53D002B5D1E /* flame.xml in Resources */, AF918AF5158FC53D002B5D1E /* flipflop.xml in Resources */, AF918AF6158FC53D002B5D1E /* flipscreen3d.xml in Resources */, AF918AF7158FC53D002B5D1E /* fliptext.xml in Resources */, AF918AF8158FC53D002B5D1E /* flow.xml in Resources */, AF918AF9158FC53D002B5D1E /* fluidballs.xml in Resources */, AF918AFB158FC53D002B5D1E /* flyingtoasters.xml in Resources */, AF918AFC158FC53D002B5D1E /* fontglide.xml in Resources */, AF918AFE158FC53D002B5D1E /* fuzzyflakes.xml in Resources */, AF918AFF158FC53D002B5D1E /* galaxy.xml in Resources */, AF918B00158FC53D002B5D1E /* gears.xml in Resources */, AFF3C9FF17CCAD9A0028F240 /* geodesic.xml in Resources */, AF7ACFDA19FF0BA600BD752B /* geodesicgears.xml in Resources */, AF918B01158FC53D002B5D1E /* gflux.xml in Resources */, AF918B02158FC53D002B5D1E /* glblur.xml in Resources */, AF918B03158FC53D002B5D1E /* glcells.xml in Resources */, AF918B04158FC53D002B5D1E /* gleidescope.xml in Resources */, AF918B06158FC53D002B5D1E /* glhanoi.xml in Resources */, AF918B07158FC53D002B5D1E /* glknots.xml in Resources */, AF918B08158FC53D002B5D1E /* glmatrix.xml in Resources */, AF918B09158FC53D002B5D1E /* glplanet.xml in Resources */, AF918B0A158FC53D002B5D1E /* glschool.xml in Resources */, AF918B0B158FC53D002B5D1E /* glslideshow.xml in Resources */, AF918B0C158FC53D002B5D1E /* glsnake.xml in Resources */, AF918B10158FC53D002B5D1E /* greynetic.xml in Resources */, AF918B0D158FC53D002B5D1E /* gltext.xml in Resources */, AF918B0E158FC53D002B5D1E /* goop.xml in Resources */, AF918B0F158FC53D002B5D1E /* grav.xml in Resources */, AF918B11158FC53D002B5D1E /* halftone.xml in Resources */, AF918B12158FC53D002B5D1E /* halo.xml in Resources */, AF918B13158FC53D002B5D1E /* helix.xml in Resources */, AFB591BF178B81E600EA4005 /* hexadrop.xml in Resources */, AF1B0FC01D7AB5330011DBE4 /* hexstrut.xml in Resources */, AF918B14158FC53D002B5D1E /* hilbert.xml in Resources */, AF918B15158FC53D002B5D1E /* hopalong.xml in Resources */, AFC0E8C71CDC60DE008CAFAC /* hydrostat.xml in Resources */, AF918B18158FC53D002B5D1E /* hypertorus.xml in Resources */, AF918B19158FC53D002B5D1E /* hypnowheel.xml in Resources */, AF918B1A158FC53D002B5D1E /* ifs.xml in Resources */, AF918B1B158FC53D002B5D1E /* imsmap.xml in Resources */, AF918B1C158FC53D002B5D1E /* interaggregate.xml in Resources */, 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 */, AFB8A69C1782BF6C004EDB85 /* kaleidocycle.xml in Resources */, AF918B23158FC53D002B5D1E /* julia.xml in Resources */, AF918B24158FC53D002B5D1E /* kaleidescope.xml in Resources */, AF918B25158FC53D002B5D1E /* klein.xml in Resources */, AF918B26158FC53D002B5D1E /* kumppa.xml in Resources */, AF918B27158FC53D002B5D1E /* lament.xml in Resources */, AF918B29158FC53D002B5D1E /* lavalite.xml in Resources */, AF918B30158FC53D002B5D1E /* loop.xml in Resources */, AF918B31158FC53D002B5D1E /* m6502.xml in Resources */, AF918B32158FC53D002B5D1E /* maze.xml in Resources */, AF918B33158FC53D002B5D1E /* memscroller.xml in Resources */, AF918B34158FC53D002B5D1E /* menger.xml in Resources */, AF918B35158FC53D002B5D1E /* metaballs.xml in Resources */, AF918B36158FC53D002B5D1E /* mirrorblob.xml in Resources */, AF918B38158FC53D002B5D1E /* moebius.xml in Resources */, AF918B39158FC53D002B5D1E /* moebiusgears.xml in Resources */, AF918B3A158FC53D002B5D1E /* moire.xml in Resources */, AF918B3B158FC53D002B5D1E /* moire2.xml in Resources */, AF918B3C158FC53D002B5D1E /* molecule.xml in Resources */, AF918B3D158FC53D002B5D1E /* morph3d.xml in Resources */, AF918B3E158FC53D002B5D1E /* mountain.xml in Resources */, AF918B3F158FC53D002B5D1E /* munch.xml in Resources */, AF918B40158FC53D002B5D1E /* nerverot.xml in Resources */, AF918B41158FC53D002B5D1E /* noof.xml in Resources */, AF918B42158FC53D002B5D1E /* noseguy.xml in Resources */, AF918B43158FC53D002B5D1E /* pacman.xml in Resources */, AF918B44158FC53D002B5D1E /* pedal.xml in Resources */, AF918B45158FC53D002B5D1E /* penetrate.xml in Resources */, AF918B46158FC53D002B5D1E /* penrose.xml in Resources */, AF918B47158FC53D002B5D1E /* petri.xml in Resources */, AF918B48158FC53E002B5D1E /* phosphor.xml in Resources */, AF918B49158FC53E002B5D1E /* photopile.xml in Resources */, 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 */, AF918B51158FC53E002B5D1E /* popsquares.xml in Resources */, AFFAB33019158E2A0020F021 /* projectiveplane.xml in Resources */, AF918B52158FC53E002B5D1E /* providence.xml in Resources */, AF918B53158FC53E002B5D1E /* pulsar.xml in Resources */, AF918B54158FC53E002B5D1E /* pyro.xml in Resources */, AF918B55158FC53E002B5D1E /* qix.xml in Resources */, AFF28697178611720050A578 /* quasicrystal.xml in Resources */, AF918B56158FC53E002B5D1E /* queens.xml in Resources */, AFA211A51CD5A00F00C0D2A1 /* raverhoop.xml in Resources */, AF918B57158FC53E002B5D1E /* rdbomb.xml in Resources */, AF918B58158FC53E002B5D1E /* ripples.xml in Resources */, AF918B59158FC53E002B5D1E /* rocks.xml in Resources */, AF63A80B1AB4EF5D00593C75 /* romanboy.xml in Resources */, AF918B5A158FC53E002B5D1E /* rorschach.xml in Resources */, AF918B5C158FC53E002B5D1E /* rotzoomer.xml in Resources */, AF918B5D158FC53E002B5D1E /* rubik.xml in Resources */, AF918B5E158FC53E002B5D1E /* rubikblocks.xml in Resources */, AF918B5F158FC53E002B5D1E /* sballs.xml in Resources */, AF918B60158FC53E002B5D1E /* shadebobs.xml in Resources */, AF918B61158FC53E002B5D1E /* sierpinski.xml in Resources */, AF918B62158FC53E002B5D1E /* sierpinski3d.xml in Resources */, AF918B63158FC53E002B5D1E /* skytentacles.xml in Resources */, AF918B64158FC53E002B5D1E /* slidescreen.xml in Resources */, AF918B65158FC53E002B5D1E /* slip.xml in Resources */, AF918B66158FC53E002B5D1E /* sonar.xml in Resources */, AF918B67158FC53E002B5D1E /* speedmine.xml in Resources */, AF918B69158FC53E002B5D1E /* spheremonics.xml in Resources */, AFCF83561AF5B5FD008BB7E1 /* splitflap.xml in Resources */, AFEE10A71D17E2CD00AAC8F7 /* splodesic.xml in Resources */, AF918B6B158FC53E002B5D1E /* spotlight.xml in Resources */, AF918B6C158FC53E002B5D1E /* sproingies.xml in Resources */, AF918B6D158FC53E002B5D1E /* squiral.xml in Resources */, AF918B6E158FC53E002B5D1E /* stairs.xml in Resources */, AF918B6F158FC53E002B5D1E /* starfish.xml in Resources */, AF918B70158FC53E002B5D1E /* starwars.xml in Resources */, AF918B71158FC53E002B5D1E /* stonerview.xml in Resources */, AF918B72158FC53E002B5D1E /* strange.xml in Resources */, AF918B73158FC53E002B5D1E /* substrate.xml in Resources */, AF918B74158FC53E002B5D1E /* superquadrics.xml in Resources */, AF918B75158FC53E002B5D1E /* surfaces.xml in Resources */, AF918B76158FC53E002B5D1E /* swirl.xml in Resources */, AF918B78158FC53E002B5D1E /* tangram.xml in Resources */, AF68A49819196E3E00D41CD1 /* tessellimage.xml in Resources */, AF918B79158FC53E002B5D1E /* thornbird.xml in Resources */, AF918B7A158FC53E002B5D1E /* timetunnel.xml in Resources */, AF918B7B158FC53E002B5D1E /* topblock.xml in Resources */, AF918B7C158FC53E002B5D1E /* triangle.xml in Resources */, AF918B7D158FC53E002B5D1E /* tronbit.xml in Resources */, AF918B7E158FC53E002B5D1E /* truchet.xml in Resources */, AF918B7F158FC53E002B5D1E /* twang.xml in Resources */, AF918B80158FC53E002B5D1E /* vermiculate.xml in Resources */, AF46E9EA1CBBA42F00240FBC /* unicrud.xml in Resources */, AFDA65A6178A541A0070D24B /* unknownpleasures.xml in Resources */, AF918B83158FC53E002B5D1E /* voronoi.xml in Resources */, AF918B84158FC53E002B5D1E /* wander.xml in Resources */, AF918B86158FC53E002B5D1E /* whirlwindwarp.xml in Resources */, AF39E2AE198A15820064A58D /* winduprobot.xml in Resources */, AF918B89158FC53E002B5D1E /* wormhole.xml in Resources */, AF918B8A158FC53E002B5D1E /* xanalogtv.xml in Resources */, AF918B8B158FC53E002B5D1E /* xflame.xml in Resources */, AF918B8C158FC53E002B5D1E /* xjack.xml in Resources */, AF918B8D158FC53E002B5D1E /* xlyap.xml in Resources */, AF918B8E158FC53E002B5D1E /* xmatrix.xml in Resources */, AF918B8F158FC53E002B5D1E /* xrayswarm.xml in Resources */, AF918B90158FC53E002B5D1E /* xspirograph.xml in Resources */, AF918B91158FC554002B5D1E /* zoom.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF975730099C317000B05160 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AF97573F099C31BB00B05160 /* imsmap.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF975778099C374A00B05160 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AF975788099C378B00B05160 /* moire.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF9757C5099C3E6300B05160 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AFCCCBB009BFE4B000353F4D /* rdbomb.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF97580B099C41D500B05160 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AF97581B099C423600B05160 /* xflame.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF975868099C475900B05160 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AF975879099C490500B05160 /* shadebobs.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF975A39099C681F00B05160 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AF975A48099C688B00B05160 /* metaballs.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF975A6F099C6AB200B05160 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AF975A82099C6B2700B05160 /* eruption.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF975A89099C6BC300B05160 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AF975A98099C6C2000B05160 /* barcode.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF975ADA099C6EB100B05160 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AF975AED099C6EFE00B05160 /* fireworkx.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF975AFF099C6FE400B05160 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AF975B16099C70B200B05160 /* memscroller.xml in Resources */, AFC43E7C1C6AA78800C89999 /* OCRAStd.otf in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF975C15099C8C1500B05160 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AF975C28099C8C6A00B05160 /* halo.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF975C40099C8DCF00B05160 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AF975C55099C8E2800B05160 /* greynetic.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF975C60099C8F3F00B05160 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AF975C75099C8FAC00B05160 /* noseguy.xml in Resources */, AF0FAF0F09CA6FF900EE1051 /* xscreensaver-text in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF975D55099CA0F000B05160 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AF975D65099CA14B00B05160 /* rocks.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF976FB80989CAA2001F8B92 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AF976FCD0989CAEA001F8B92 /* deco.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF97702A0989D1E6001F8B92 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AF9770430989D226001F8B92 /* rorschach.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF9770670989D2F6001F8B92 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AF9770800989D32E001F8B92 /* attraction.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF9771D30989DC4A001F8B92 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AF9772E30989DFC6001F8B92 /* SaverRunner.nib in Resources */, AF51FD3915845FCB00E5741F /* SaverRunner.icns in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF998EDD0A083DB30051049D /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AF998EFB0A083E8C0051049D /* topblock.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF9D466909B5109C006E59CF /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AF9D467A09B51126006E59CF /* decayscreen.xml in Resources */, AF0FAF1A09CA712600EE1051 /* xscreensaver-getimage-file in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF9D474709B5300A006E59CF /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AF9D475609B5306A006E59CF /* slidescreen.xml in Resources */, AF0FAF2409CA712600EE1051 /* xscreensaver-getimage-file in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF9D476209B53166006E59CF /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AF9D48D309B53214006E59CF /* zoom.xml in Resources */, AF0FAF2909CA712600EE1051 /* xscreensaver-getimage-file in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF9D48DE09B53322006E59CF /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AF9D48ED09B5338A006E59CF /* bumps.xml in Resources */, AF0FAF1809CA712600EE1051 /* xscreensaver-getimage-file in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF9D48F709B535DA006E59CF /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AF9D490609B536DE006E59CF /* distort.xml in Resources */, AF0FAF1B09CA712600EE1051 /* xscreensaver-getimage-file in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF9D492E09B53CBA006E59CF /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AF9D493D09B53D3B006E59CF /* ripples.xml in Resources */, AF0FAF2209CA712600EE1051 /* xscreensaver-getimage-file in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF9D495709B53FC9006E59CF /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AF9D496609B54087006E59CF /* rotzoomer.xml in Resources */, AF0FAF2309CA712600EE1051 /* xscreensaver-getimage-file in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF9D496F09B5411D006E59CF /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AF9D497E09B541CE006E59CF /* twang.xml in Resources */, AF0FAF2709CA712600EE1051 /* xscreensaver-getimage-file in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF9D499A09B544C2006E59CF /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AF9D49A909B5457B006E59CF /* spotlight.xml in Resources */, AF0FAF2609CA712600EE1051 /* xscreensaver-getimage-file in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF9D4C6C09B59F27006E59CF /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AF9D4C7B09B5A02D006E59CF /* xlyap.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF9D4CEA09B5AA8E006E59CF /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AF9D4CF909B5AC73006E59CF /* pong.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF9D4D8109B5B2DC006E59CF /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AF9D4D9109B5B42B006E59CF /* xanalogtv.xml in Resources */, AF0FAF2809CA712600EE1051 /* xscreensaver-getimage-file in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF9D4DB209B5B71E006E59CF /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AF9D4DC209B5B862006E59CF /* bsod.xml in Resources */, AF0FAF1709CA712600EE1051 /* xscreensaver-getimage-file in Resources */, AFC43E771C684BE400C89999 /* PxPlus_IBM_VGA8.ttf in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF9D4DEF09B5BB19006E59CF /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AF9D4E0409B5BC85006E59CF /* apple2.xml in Resources */, AF0FAF0C09CA6FF900EE1051 /* xscreensaver-text in Resources */, AF0FAF1409CA712600EE1051 /* xscreensaver-getimage-file in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFA2118F1CD59DAF00C0D2A1 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AFA211A61CD5A02600C0D2A1 /* raverhoop.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFA339310B058505002B0E7D /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AFA33BB00B05860F002B0E7D /* webcollage.xml in Resources */, AFA33BDD0B058A30002B0E7D /* webcollage-helper in Resources */, AFA33C0C0B058ED2002B0E7D /* webcollage in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFA55949099330B000F3E977 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AFA5595C099330E500F3E977 /* cage.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFA559700993317900F3E977 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AFA55981099331AC00F3E977 /* moebius.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFA559950993322100F3E977 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AFA559A70993325200F3E977 /* superquadrics.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFA559B80993328000F3E977 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AFA559CB099332CF00F3E977 /* morph3d.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFA559D20993330600F3E977 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AFA559E90993333D00F3E977 /* rubik.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFA55A060993340300F3E977 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AFA55A190993344100F3E977 /* stairs.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFA55A23099334A000F3E977 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AFA55A34099334CB00F3E977 /* sproingies.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFA55A7C0993364300F3E977 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AFA55A8D0993366F00F3E977 /* lament.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFA55AD209933CEF00F3E977 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AFA55AE309933D1C00F3E977 /* bubble3d.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFA55B0C09933E0500F3E977 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AFA55B2009933E3100F3E977 /* glplanet.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFA55B2809933E8D00F3E977 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AFA55B3909933EB400F3E977 /* pulsar.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFA55B7C09933F7200F3E977 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AFA55B8D09933FAA00F3E977 /* sierpinski3d.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFA55B9409933FDA00F3E977 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AFA55BA50993400200F3E977 /* gflux.xml in Resources */, AF0FAF1D09CA712600EE1051 /* xscreensaver-getimage-file in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFA55BAE099340CE00F3E977 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AFA55BBF0993410100F3E977 /* circuit.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFA55BE70993429100F3E977 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AFA55BF8099342BF00F3E977 /* menger.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFA55C110993431300F3E977 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AFA55C220993433D00F3E977 /* engine.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFA55C7A099349A600F3E977 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AFA55C8B099349CC00F3E977 /* glsnake.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFA55CAC09934BB200F3E977 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AFA55CBD09934BDD00F3E977 /* boxed.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFA55CCF09934CE400F3E977 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AFA55CE009934D1500F3E977 /* glforestfire.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFA55D3F0993565300F3E977 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AFA55D500993568200F3E977 /* sballs.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFA55D650993584B00F3E977 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AFA55D760993587600F3E977 /* cubenetic.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFA55D82099358C400F3E977 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AFA55D93099358FB00F3E977 /* spheremonics.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFA55DCB09935D7000F3E977 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AFA55DDC09935D9D00F3E977 /* lavalite.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFA55DF309935E4900F3E977 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AFA55E0509935E7E00F3E977 /* queens.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFA55E1009935EDC00F3E977 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AFA55E2109935F0B00F3E977 /* endgame.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFA55E3209935F8E00F3E977 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AFA55E4409935FBA00F3E977 /* glblur.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFA55E5109935FF900F3E977 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AFA55E970993602F00F3E977 /* flyingtoasters.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFA55ECA099360E300F3E977 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AFA55EE50993610F00F3E977 /* bouncingcow.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFA55F09099361B700F3E977 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AFA55F20099361E800F3E977 /* jigglypuff.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFA55F2D0993622F00F3E977 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AFA55F3E0993625B00F3E977 /* klein.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFA55F450993629000F3E977 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AFA55F57099362C500F3E977 /* hypertorus.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFA55F750993643600F3E977 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AFA55F860993646900F3E977 /* glmatrix.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFA55FD609936BFA00F3E977 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AFA55FF209936C2F00F3E977 /* cubestorm.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFA55FFC09936C6D00F3E977 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AFA5600D09936C9D00F3E977 /* glknots.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFA5601709936CC800F3E977 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AFA5602809936CF700F3E977 /* blocktube.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFA5603509936D5100F3E977 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AF0D117D0E41566300BB14A4 /* xscreensaver-getimage-file in Resources */, AFA5604609936DAB00F3E977 /* flipflop.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFA5604D09936E2100F3E977 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AFA560820993700500F3E977 /* antinspect.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFA5606509936F3800F3E977 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AFA560830993700900F3E977 /* antspotlight.xml in Resources */, AF0FAF1309CA712600EE1051 /* xscreensaver-getimage-file in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFA560B10993718D00F3E977 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AFA560C2099371BE00F3E977 /* polytopes.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFA561000993781600F3E977 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AFA561110993784D00F3E977 /* molecule.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFA5615B09937C0D00F3E977 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AFA5616C09937C6800F3E977 /* blinkbox.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFA5617E09937CF100F3E977 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AFA5618F09937D2100F3E977 /* noof.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFA561A009937D7E00F3E977 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AFA561B109937DB400F3E977 /* polyhedra.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFA562090993849F00F3E977 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AFA5621B099384DA00F3E977 /* providence.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFA562220993852500F3E977 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AFA562330993855500F3E977 /* pinion.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFA562C2099392C600F3E977 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AFA562D3099392F900F3E977 /* boing.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFA562DD099393C900F3E977 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AFA562EE0993940400F3E977 /* antmaze.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFA562F50993943B00F3E977 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AFA563060993947300F3E977 /* tangram.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFA563160993951000F3E977 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AFA563280993955000F3E977 /* crackberg.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFA56334099395ED00F3E977 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AFA563740993977100F3E977 /* glhanoi.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFA56354099396C000F3E977 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AFA563770993979A00F3E977 /* cube21.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFA5637C099397B300F3E977 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AFA5638D099397ED00F3E977 /* timetunnel.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFA563A7099398BB00F3E977 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AFA563B8099398F700F3E977 /* juggler3d.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFACE8761CC83458008B24CD /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AFACE88D1CC83608008B24CD /* energystream.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFB591AA178B812C00EA4005 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AFB591BE178B81E600EA4005 /* hexadrop.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFBFE74E178642DC00432B21 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AFBFE765178643B200432B21 /* Apple2.saver in Resources */, AFBFE74F178642DC00432B21 /* SaverRunner.nib in Resources */, AFBFE750178642DC00432B21 /* SaverRunner.icns in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFBFE76C178647FE00432B21 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AFBFE7831786483B00432B21 /* Phosphor.saver in Resources */, AFBFE76F178647FE00432B21 /* SaverRunner.nib in Resources */, AFBFE770178647FE00432B21 /* SaverRunner.icns in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFC0E8AE1CDC601A008CAFAC /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AFC0E8C61CDC60DB008CAFAC /* hydrostat.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFCF833E1AF5B515008BB7E1 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AFCF83551AF5B5FD008BB7E1 /* splitflap.xml in Resources */, AFE349291B033A8200AF3D73 /* xscreensaver-text in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFD51B1E0F063B4A00471C02 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AFD51B200F063B4A00471C02 /* xscreensaver-getimage-file in Resources */, AFD51DB90F063BE700471C02 /* photopile.xml in Resources */, AF5BEEFD1D2AFE21002E6D51 /* OCRAStd.otf in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFD56DF40996A03800BA26F7 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AFD56E9F0996A23800BA26F7 /* gltext.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFD56EB10996A72600BA26F7 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AF642330099F45CA000F4CD4 /* braid.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFD56EDD0996A95700BA26F7 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AFD56F1D0996AB1D00BA26F7 /* forest.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFD56F0E0996AAFA00BA26F7 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AFD56F1E0996AB4000BA26F7 /* vines.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFD56F260996AB8A00BA26F7 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AFD56F350996ABB300BA26F7 /* galaxy.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFD56F520996AEEE00BA26F7 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AFD56F610996AF1500BA26F7 /* grav.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFD56F6E0996B01600BA26F7 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AFD56F870996B04D00BA26F7 /* hopalong.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFD56F8F0996B09400BA26F7 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AFD56F9F0996B0D000BA26F7 /* laser.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFD56FA60996B10F00BA26F7 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AFD56FB50996B15000BA26F7 /* lightning.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFD56FBC0996B18F00BA26F7 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AFD56FCB0996B1BE00BA26F7 /* lisa.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFD56FD20996B20900BA26F7 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AFD56FE10996B24B00BA26F7 /* lissie.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFD56FFB0996B43800BA26F7 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AFD5700B0996B47E00BA26F7 /* penrose.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFD570120996B4CC00BA26F7 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AFD570210996B51100BA26F7 /* sierpinski.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFD570290996B56D00BA26F7 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AFD5703A0996B5D000BA26F7 /* sphere.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFD570460996B61600BA26F7 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AFD570550996B65A00BA26F7 /* spiral.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFD5705C0996B6A300BA26F7 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AFD5706B0996B6E700BA26F7 /* fadeplot.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFD570720996B72700BA26F7 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AFD570810996B77F00BA26F7 /* mountain.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFD570880996B80300BA26F7 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AFD570970996B84E00BA26F7 /* triangle.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFD5709E0996B88E00BA26F7 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AFD570AD0996B8DC00BA26F7 /* worm.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFD570B40996B93000BA26F7 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AFD570C30996B96F00BA26F7 /* rotor.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFD570CC0996B9F800BA26F7 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AFD570DD0996BA4600BA26F7 /* ant.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFD570ED0996BBBF00BA26F7 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AFD570FE0996BC2000BA26F7 /* flow.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFD571160996BE9300BA26F7 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AFD571270996BEE100BA26F7 /* discrete.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFD5712F0996BF2E00BA26F7 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AFD5713E0996BFA500BA26F7 /* apollonian.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFD571460996C01700BA26F7 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AFD571550996C05F00BA26F7 /* euler2d.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFD5715C0996C0CE00BA26F7 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AFCCCBB309BFE51900353F4D /* thornbird.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFD571B80996D9DC00BA26F7 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AFD571C70996DA3300BA26F7 /* juggle.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFD572250996E4A300BA26F7 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AFD572340996E52B00BA26F7 /* swirl.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFD572700996EE8500BA26F7 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AFD5727F0996EF1900BA26F7 /* polyominoes.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFD572A80996F99600BA26F7 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AFD572B80996FAF900BA26F7 /* bouboule.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFD572C50996FC0F00BA26F7 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AFD572EC0997005900BA26F7 /* crystal.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFD572FC099701C000BA26F7 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AFD5730B099702AF00BA26F7 /* julia.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFD573600997411200BA26F7 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AFD573700997418D00BA26F7 /* strange.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFDA6591178A52B70070D24B /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AFDA65A5178A541A0070D24B /* unknownpleasures.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFE2A4590E2E904600ADB298 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AFE2A4750E2E911200ADB298 /* skytentacles.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFE30BEB0E52B14700CCF4A5 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AFE30BFE0E52B18300CCF4A5 /* sonar.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFE6A1850CDD7B2E002805BF /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AFE6A40E0CDD7BDC002805BF /* moebiusgears.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFE6A41E0CDD7FAA002805BF /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AFE6A4370CDD8027002805BF /* abstractile.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFEC23D01CB6EAE100DE138F /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AFEC23E71CB6EC0B00DE138F /* dymaxionmap.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFEE10501D13406000AAC8F7 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AFEE10691D13420700AAC8F7 /* cubetwist.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFEE106F1D15EB0800AAC8F7 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AFEE10871D15EBD900AAC8F7 /* cubestack.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFEE108E1D17E20B00AAC8F7 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AFEE10A61D17E2C900AAC8F7 /* splodesic.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFF2868217860E830050A578 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AFF28696178611720050A578 /* quasicrystal.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFF3C9EB17CCAC440028F240 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AFF3C9FE17CCAD9A0028F240 /* geodesic.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFF463390C4403E400EE6509 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AFF4634C0C44046500EE6509 /* cwaves.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFF4635B0C440AEF00EE6509 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AFF463740C440BAC00EE6509 /* glcells.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFFAB31819158CE40020F021 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AFFAB32F19158E2A0020F021 /* projectiveplane.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; CE3D01541B76F4C100993C75 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( CE3D01691B76F88A00993C75 /* testx11.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXResourcesBuildPhase section */ /* Begin PBXRezBuildPhase section */ AF08399E09930B6B00277BE9 /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AF083A44099311D700277BE9 /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AF0DC7B80C4C73F600D76972 /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AF0DCA510C4CBB0D00D76972 /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AF1A176E0D6D6EE3008AF328 /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AF1B0FB71D7AB4740011DBE4 /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AF32D9EF0F3AD0B40080F535 /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AF3581D01431D47B00E09C51 /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AF358211143330F900E09C51 /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AF35E89B0E63823600691F2F /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AF39382A1D0FBD6A00205406 /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AF39E291198A11F60064A58D /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AF3C71540D624BF50030CC0D /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AF46E9DF1CBBA2B300240FBC /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AF476FC2099D154F001F091E /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AF476FE7099D1686001F091E /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AF477058099D4385001F091E /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AF477175099D4786001F091E /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AF47718B099D4803001F091E /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AF4771B3099D4949001F091E /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AF4771E7099D4D9A001F091E /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AF4771FE099D4E63001F091E /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AF477214099D4EE8001F091E /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AF47722A099D4F67001F091E /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AF47725F099D5717001F091E /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AF477277099D57B9001F091E /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AF47728F099D5926001F091E /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AF47738E099D65A1001F091E /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AF4773A6099D6648001F091E /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AF4773CD099D67B9001F091E /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AF47740E099D69E7001F091E /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AF477433099D7C70001F091E /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AF47744E099D7D33001F091E /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AF47748F099D89E4001F091E /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AF4774A5099D8A74001F091E /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AF4774C0099D8B5F001F091E /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AF4774DA099D8BFF001F091E /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AF477569099D9A1A001F091E /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AF47758F099D9C28001F091E /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AF4775AB099D9CF7001F091E /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AF4775E4099D9F69001F091E /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AF4775FE099DA030001F091E /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AF47761F099DA26C001F091E /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AF477650099DA6D0001F091E /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AF477666099DA78E001F091E /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AF47767C099DA849001F091E /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AF47769B099DAA6F001F091E /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AF4776B6099DABDD001F091E /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AF4776CC099DAC8A001F091E /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AF4776E7099DADDF001F091E /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AF4776FD099DAE7A001F091E /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AF477719099DAF9F001F091E /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AF47772F099DB044001F091E /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AF47775E099DB61E001F091E /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AF477780099DB965001F091E /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AF47779C099DBA90001F091E /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AF4777DD099DC183001F091E /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AF4778B7099DDB79001F091E /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AF4778D3099DDCAE001F091E /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AF4778F4099DDDC8001F091E /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AF477915099DE379001F091E /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AF477936099DE4C7001F091E /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AF480C54098E301400FB32B8 /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AF480D7D098EEDDE00FB32B8 /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AF4810F709909FBA00FB32B8 /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AF4812600990CE2700FB32B8 /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AF4812C20990D3D900FB32B8 /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AF48DEFE0A0C25E000F94CF9 /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AF4A3458102A593600A81B2A /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AF4FD6F50CE7A486005EE58E /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AF4FF4C90D52CBDE00666F98 /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AF5C9B081A0CCE6E00B0147A /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AF63A8011AB4EDDB00593C75 /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AF642401099FF9C2000F4CD4 /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AF6425D809A18855000F4CD4 /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AF6425F809A189EC000F4CD4 /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AF64261B09A18D6C000F4CD4 /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AF64263809A18F54000F4CD4 /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AF64265B09A19229000F4CD4 /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AF64268709A194B0000F4CD4 /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AF64277D09A1D37A000F4CD4 /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AF6427B409A2DE36000F4CD4 /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AF68A48D19196CF800D41CD1 /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AF73FF311A09877F00E485E9 /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AF75110D1782B5B900380EA1 /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AF7776F209B63ABF00EA3033 /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AF77772609B6416100EA3033 /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AF77774D09B6446500EA3033 /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AF77778409B6497800EA3033 /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AF77779E09B64A5200EA3033 /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AF7777B809B64B2600EA3033 /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AF7777E009B64C6B00EA3033 /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AF7777FA09B64E3100EA3033 /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AF77782109B6504400EA3033 /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AF77785409B6528100EA3033 /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AF77787009B6536000EA3033 /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AF77788B09B6563500EA3033 /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AF7778B109B659C800EA3033 /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AF78D184142DD8F3002AAF77 /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AF794F70099748450059A8B0 /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AF794F9A09974A320059A8B0 /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AF794FD909974FA60059A8B0 /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AF7ACFCF19FF0A9200BD752B /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AF975739099C317000B05160 /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AF975781099C374A00B05160 /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AF9757CE099C3E6300B05160 /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AF975814099C41D500B05160 /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AF975871099C475900B05160 /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AF975A42099C681F00B05160 /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AF975A78099C6AB200B05160 /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AF975A92099C6BC300B05160 /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AF975AE3099C6EB100B05160 /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AF975B08099C6FE400B05160 /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AF975C1E099C8C1500B05160 /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AF975C4A099C8DCF00B05160 /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AF975C6A099C8F3F00B05160 /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AF975D5F099CA0F000B05160 /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AF9770150989D0F6001F8B92 /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AF97703C0989D1E6001F8B92 /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AF9770790989D2F6001F8B92 /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AF998EE90A083DB30051049D /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AF9D467209B5109C006E59CF /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AF9D475009B5300A006E59CF /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AF9D476B09B53166006E59CF /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AF9D48E709B53322006E59CF /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AF9D490009B535DA006E59CF /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AF9D493709B53CBA006E59CF /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AF9D496009B53FC9006E59CF /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AF9D497809B5411D006E59CF /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AF9D49A309B544C2006E59CF /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AF9D4C7509B59F27006E59CF /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AF9D4CF309B5AA8E006E59CF /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AF9D4D8B09B5B2DC006E59CF /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AF9D4DBC09B5B71E006E59CF /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AF9D4DFA09B5BB19006E59CF /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AFA2119C1CD59DAF00C0D2A1 /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AFA3393B0B058505002B0E7D /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AFA55956099330B000F3E977 /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AFA5597B0993317900F3E977 /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AFA559A00993322100F3E977 /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AFA559C30993328000F3E977 /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AFA559DD0993330600F3E977 /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AFA55A110993340300F3E977 /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AFA55A2E099334A000F3E977 /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AFA55A870993364300F3E977 /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AFA55ADD09933CEF00F3E977 /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AFA55B1A09933E0500F3E977 /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AFA55B3309933E8D00F3E977 /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AFA55B8709933F7200F3E977 /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AFA55B9F09933FDA00F3E977 /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AFA55BB9099340CE00F3E977 /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AFA55BF20993429100F3E977 /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AFA55C1C0993431300F3E977 /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AFA55C85099349A600F3E977 /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AFA55CB709934BB200F3E977 /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AFA55CDA09934CE400F3E977 /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AFA55D4A0993565300F3E977 /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AFA55D700993584B00F3E977 /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AFA55D8D099358C400F3E977 /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AFA55DD609935D7000F3E977 /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AFA55DFF09935E4900F3E977 /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AFA55E1B09935EDC00F3E977 /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AFA55E3E09935F8E00F3E977 /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AFA55E5C09935FF900F3E977 /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AFA55EDF099360E300F3E977 /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AFA55F1A099361B700F3E977 /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AFA55F380993622F00F3E977 /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AFA55F500993629000F3E977 /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AFA55F800993643600F3E977 /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AFA55FE109936BFA00F3E977 /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AFA5600709936C6D00F3E977 /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AFA5602209936CC800F3E977 /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AFA5604009936D5100F3E977 /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AFA5605809936E2100F3E977 /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AFA5607009936F3800F3E977 /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AFA560BC0993718D00F3E977 /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AFA5610B0993781600F3E977 /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AFA5616609937C0D00F3E977 /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AFA5618909937CF100F3E977 /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AFA561AB09937D7E00F3E977 /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AFA562150993849F00F3E977 /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AFA5622D0993852500F3E977 /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AFA562CD099392C600F3E977 /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AFA562E8099393C900F3E977 /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AFA563000993943B00F3E977 /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AFA563220993951000F3E977 /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AFA5633F099395ED00F3E977 /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AFA5635F099396C000F3E977 /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AFA56387099397B300F3E977 /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AFA563B2099398BB00F3E977 /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AFACE8831CC83458008B24CD /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AFB591B5178B812C00EA4005 /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AFC0E8BB1CDC601A008CAFAC /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AFCF834B1AF5B515008BB7E1 /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AFD51B2B0F063B4A00471C02 /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AFD56E000996A03800BA26F7 /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AFD56EBA0996A72600BA26F7 /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AFD56EE60996A95700BA26F7 /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AFD56F170996AAFA00BA26F7 /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AFD56F2F0996AB8A00BA26F7 /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AFD56F5B0996AEEE00BA26F7 /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AFD56F770996B01600BA26F7 /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AFD56F980996B09400BA26F7 /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AFD56FAF0996B10F00BA26F7 /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AFD56FC50996B18F00BA26F7 /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AFD56FDB0996B20900BA26F7 /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AFD570040996B43800BA26F7 /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AFD5701B0996B4CC00BA26F7 /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AFD570320996B56D00BA26F7 /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AFD5704F0996B61600BA26F7 /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AFD570650996B6A300BA26F7 /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AFD5707B0996B72700BA26F7 /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AFD570910996B80300BA26F7 /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AFD570A70996B88E00BA26F7 /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AFD570BD0996B93000BA26F7 /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AFD570D50996B9F800BA26F7 /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AFD570F60996BBBF00BA26F7 /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AFD5711F0996BE9300BA26F7 /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AFD571380996BF2E00BA26F7 /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AFD5714F0996C01700BA26F7 /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AFD571650996C0CE00BA26F7 /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AFD571C10996D9DC00BA26F7 /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AFD5722E0996E4A300BA26F7 /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AFD572790996EE8500BA26F7 /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AFD572B10996F99600BA26F7 /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AFD572CE0996FC0F00BA26F7 /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AFD57305099701C000BA26F7 /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AFD573690997411200BA26F7 /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AFDA659C178A52B70070D24B /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AFE2A4650E2E904600ADB298 /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AFE30BF70E52B14700CCF4A5 /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AFE6A1920CDD7B2E002805BF /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AFE6A4280CDD7FAA002805BF /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AFEC23DD1CB6EAE100DE138F /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AFEE105D1D13406000AAC8F7 /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AFEE107C1D15EB0800AAC8F7 /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AFEE109B1D17E20B00AAC8F7 /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AFF2868D17860E830050A578 /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AFF3C9F617CCAC440028F240 /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AFF463420C4403E400EE6509 /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AFF463670C440AEF00EE6509 /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AFFAB32419158CE40020F021 /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; CE3D01611B76F4C100993C75 /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXRezBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ AF0DC7B90C4C73F600D76972 /* Run Update Info Plist */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Run Update Info Plist"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; showEnvVarsInLog = 0; }; AF0DCA520C4CBB0D00D76972 /* Run Update Info Plist */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Run Update Info Plist"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; showEnvVarsInLog = 0; }; AF1A176F0D6D6EE3008AF328 /* Run Update Info Plist */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Run Update Info Plist"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; showEnvVarsInLog = 0; }; AF1ADA1E18501DC200932759 /* Run Update Info Plist */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Run Update Info Plist"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; showEnvVarsInLog = 0; }; AF1B0FB81D7AB4740011DBE4 /* Run Update Info Plist */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Run Update Info Plist"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; showEnvVarsInLog = 0; }; AF32D9F00F3AD0B40080F535 /* Run Update Info Plist */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Run Update Info Plist"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; showEnvVarsInLog = 0; }; AF3581D11431D47B00E09C51 /* Run Update Info Plist */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Run Update Info Plist"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; showEnvVarsInLog = 0; }; AF358212143330F900E09C51 /* Run Update Info Plist */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Run Update Info Plist"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; showEnvVarsInLog = 0; }; AF35E89C0E63823600691F2F /* Run Update Info Plist */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Run Update Info Plist"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; showEnvVarsInLog = 0; }; AF39382B1D0FBD6A00205406 /* Run Update Info Plist */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Run Update Info Plist"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; showEnvVarsInLog = 0; }; AF39E292198A11F60064A58D /* Run Update Info Plist */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Run Update Info Plist"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; showEnvVarsInLog = 0; }; AF3C71550D624BF50030CC0D /* Run Update Info Plist */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Run Update Info Plist"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; showEnvVarsInLog = 0; }; AF46E9E01CBBA2B300240FBC /* Run Update Info Plist */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Run Update Info Plist"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; showEnvVarsInLog = 0; }; AF48DEFF0A0C25E000F94CF9 /* Run Update Info Plist */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Run Update Info Plist"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; showEnvVarsInLog = 0; }; AF4A3459102A593600A81B2A /* Run Update Info Plist */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Run Update Info Plist"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; showEnvVarsInLog = 0; }; AF4E1D1819CE7013002B6190 /* Update GC build settings */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Update GC build settings"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "#!/bin/sh\n\n# Edit the contents of \"xscreensaver.xcconfig\" based on the running\n# Xcode version. If we are running Xcode 5.0.2, we *must* turn on GC.\n# If we are running a newer version of Xcode than that, we *cannot*\n# turn on GC.\n\nTMP=`mktemp -t xcode`\nSRC=\"$SRCROOT/xscreensaver.xcconfig\"\nMACOSX_DEPLOYMENT_TARGET=10.7\nOBJC_GC_CFLAGS=\nOBJC_NO_GC_CFLAGS=\nif [ \"$XCODE_VERSION_MAJOR\" -lt \"0600\" ]; then\n MACOSX_DEPLOYMENT_TARGET=10.4\n OBJC_GC_CFLAGS=\"-fobjc-gc\"\n OBJC_NO_GC_CFLAGS=\"-fno-objc-gc\"\nfi\n\nrm -f \"$TMP\"\nsed -e \"s/^\\(MACOSX_DEPLOYMENT_TARGET=\\).*/\\1${MACOSX_DEPLOYMENT_TARGET}/\" \\\n -e \"s/^\\(OBJC_GC_CFLAGS=\\).*/\\1${OBJC_GC_CFLAGS}/\" \\\n -e \"s/^\\(OBJC_NO_GC_CFLAGS=\\).*/\\1${OBJC_NO_GC_CFLAGS}/\" \\\n < $SRC > $TMP\nif ! ( cmp -s \"$SRC\" \"$TMP\" ); then\necho \"$SRC updated:\"\n diff -U0 \"$SRC\" \"$TMP\"\n cat \"$TMP\" > \"$SRC\"\nelse\n echo \"$SRC unchanged\"\nfi\n\nrm -f \"$TMP\"\nexit 0\n"; showEnvVarsInLog = 0; }; AF4FD6F60CE7A486005EE58E /* Run Update Info Plist */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Run Update Info Plist"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; showEnvVarsInLog = 0; }; AF4FF4CA0D52CBDE00666F98 /* Run Update Info Plist */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Run Update Info Plist"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; showEnvVarsInLog = 0; }; AF578FA11434E918002455DD /* Run Update Info Plist */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Run Update Info Plist"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; showEnvVarsInLog = 0; }; AF5C9B091A0CCE6E00B0147A /* Run Update Info Plist */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Run Update Info Plist"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; showEnvVarsInLog = 0; }; AF63A8021AB4EDDB00593C75 /* Run Update Info Plist */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Run Update Info Plist"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; showEnvVarsInLog = 0; }; AF63F24F1C3465BE0033E133 /* Update Function Table */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Update Function Table"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/build-fntable.pl $SOURCE_ROOT/ios-function-table.m"; }; AF63F44A1C3465BE0033E133 /* Run Update Info Plist */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Run Update Info Plist"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; showEnvVarsInLog = 0; }; AF63F4571C34682A0033E133 /* Update Function Table */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Update Function Table"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/build-fntable.pl $SOURCE_ROOT/ios-function-table.m"; }; AF63F4701C34682A0033E133 /* Run Update Info Plist */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Run Update Info Plist"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; showEnvVarsInLog = 0; }; AF63F47F1C3469FC0033E133 /* Update Function Table */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Update Function Table"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/build-fntable.pl $SOURCE_ROOT/ios-function-table.m"; }; AF63F4961C3469FC0033E133 /* Run Update Info Plist */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Run Update Info Plist"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; showEnvVarsInLog = 0; }; AF68A48E19196CF800D41CD1 /* Run Update Info Plist */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Run Update Info Plist"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; showEnvVarsInLog = 0; }; AF73FF321A09877F00E485E9 /* Run Update Info Plist */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Run Update Info Plist"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; showEnvVarsInLog = 0; }; AF75110E1782B5B900380EA1 /* Run Update Info Plist */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Run Update Info Plist"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; showEnvVarsInLog = 0; }; AF78D185142DD8F3002AAF77 /* Run Update Info Plist */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Run Update Info Plist"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; showEnvVarsInLog = 0; }; AF7ACFD019FF0A9200BD752B /* Run Update Info Plist */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Run Update Info Plist"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; showEnvVarsInLog = 0; }; AF7E080115925EE300D81407 /* ICMP Sanity Check */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "ICMP Sanity Check"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/icmp-warning.pl"; }; AF7E08021592661100D81407 /* ICMP Sanity Check */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "ICMP Sanity Check"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/icmp-warning.pl"; }; AF91898A158FC00A002B5D1E /* Run Update Info Plist */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Run Update Info Plist"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; showEnvVarsInLog = 0; }; AF94E7421A16F66900289B93 /* Update Function Table */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Update Function Table"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/build-fntable.pl $SOURCE_ROOT/ios-function-table.m"; }; AF998EEA0A083DB30051049D /* Run Update Info Plist */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Run Update Info Plist"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; showEnvVarsInLog = 0; }; AFA2119D1CD59DAF00C0D2A1 /* Run Update Info Plist */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Run Update Info Plist"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; showEnvVarsInLog = 0; }; AFA3393C0B058505002B0E7D /* Run Update Info Plist */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Run Update Info Plist"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; showEnvVarsInLog = 0; }; AFA3D69209C03B5C00E4CFCA /* Run Update Info Plist */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Run Update Info Plist"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; showEnvVarsInLog = 0; }; AFA3D69409C03B6200E4CFCA /* Run Update Info Plist */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Run Update Info Plist"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; showEnvVarsInLog = 0; }; AFA3D85B09C03BD300E4CFCA /* Run Update Info Plist */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Run Update Info Plist"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; showEnvVarsInLog = 0; }; AFA3D85D09C03BD700E4CFCA /* Run Update Info Plist */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Run Update Info Plist"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; showEnvVarsInLog = 0; }; AFA3D85F09C03BDA00E4CFCA /* Run Update Info Plist */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Run Update Info Plist"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; showEnvVarsInLog = 0; }; AFA3D86109C03BDE00E4CFCA /* Run Update Info Plist */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Run Update Info Plist"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; showEnvVarsInLog = 0; }; AFA3D86309C03BE200E4CFCA /* Run Update Info Plist */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Run Update Info Plist"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; showEnvVarsInLog = 0; }; AFA3D86509C03BE500E4CFCA /* Run Update Info Plist */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Run Update Info Plist"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; showEnvVarsInLog = 0; }; AFA3D86709C03BE800E4CFCA /* Run Update Info Plist */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Run Update Info Plist"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; showEnvVarsInLog = 0; }; AFA3D86909C03BEC00E4CFCA /* Run Update Info Plist */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Run Update Info Plist"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; showEnvVarsInLog = 0; }; AFA3D86B09C03BEF00E4CFCA /* Run Update Info Plist */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Run Update Info Plist"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; showEnvVarsInLog = 0; }; AFA3D86D09C03BF300E4CFCA /* Run Update Info Plist */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Run Update Info Plist"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; showEnvVarsInLog = 0; }; AFA3D86F09C03BF700E4CFCA /* Run Update Info Plist */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Run Update Info Plist"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; showEnvVarsInLog = 0; }; AFA3D87109C03BFB00E4CFCA /* Run Update Info Plist */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Run Update Info Plist"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; showEnvVarsInLog = 0; }; AFA3D87309C03C0000E4CFCA /* Run Update Info Plist */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Run Update Info Plist"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; showEnvVarsInLog = 0; }; AFA3D87509C03C0400E4CFCA /* Run Update Info Plist */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Run Update Info Plist"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; showEnvVarsInLog = 0; }; AFA3D87709C03C0A00E4CFCA /* Run Update Info Plist */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Run Update Info Plist"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; showEnvVarsInLog = 0; }; AFA3D87909C03C1200E4CFCA /* Run Update Info Plist */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Run Update Info Plist"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; showEnvVarsInLog = 0; }; AFA3D87B09C03C1700E4CFCA /* Run Update Info Plist */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Run Update Info Plist"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; showEnvVarsInLog = 0; }; AFA3D87D09C03C1B00E4CFCA /* Run Update Info Plist */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Run Update Info Plist"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; showEnvVarsInLog = 0; }; AFA3D87F09C03C1E00E4CFCA /* Run Update Info Plist */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Run Update Info Plist"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; showEnvVarsInLog = 0; }; AFA3D88109C03C2100E4CFCA /* Run Update Info Plist */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Run Update Info Plist"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; showEnvVarsInLog = 0; }; AFA3D88309C03C2400E4CFCA /* Run Update Info Plist */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Run Update Info Plist"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; showEnvVarsInLog = 0; }; AFA3D88509C03C2700E4CFCA /* Run Update Info Plist */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Run Update Info Plist"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; showEnvVarsInLog = 0; }; AFA3D88709C03C2A00E4CFCA /* Run Update Info Plist */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Run Update Info Plist"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; showEnvVarsInLog = 0; }; AFA3D88909C03C2E00E4CFCA /* Run Update Info Plist */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Run Update Info Plist"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; showEnvVarsInLog = 0; }; AFA3D88B09C03C3200E4CFCA /* Run Update Info Plist */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Run Update Info Plist"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; showEnvVarsInLog = 0; }; AFA3D88D09C03C3600E4CFCA /* Run Update Info Plist */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Run Update Info Plist"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; showEnvVarsInLog = 0; }; AFA3D88F09C03C3900E4CFCA /* Run Update Info Plist */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Run Update Info Plist"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; showEnvVarsInLog = 0; }; AFA3D89109C03C3C00E4CFCA /* Run Update Info Plist */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Run Update Info Plist"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; showEnvVarsInLog = 0; }; AFA3D89309C03C4000E4CFCA /* Run Update Info Plist */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Run Update Info Plist"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; showEnvVarsInLog = 0; }; AFA3D89509C03C4400E4CFCA /* Run Update Info Plist */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Run Update Info Plist"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; showEnvVarsInLog = 0; }; AFA3D89709C03C4700E4CFCA /* Run Update Info Plist */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Run Update Info Plist"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; showEnvVarsInLog = 0; }; AFA3D89B09C03C4D00E4CFCA /* Run Update Info Plist */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Run Update Info Plist"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; showEnvVarsInLog = 0; }; AFA3D89D09C03C5000E4CFCA /* Run Update Info Plist */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Run Update Info Plist"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; showEnvVarsInLog = 0; }; AFA3D89F09C03C5300E4CFCA /* Run Update Info Plist */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Run Update Info Plist"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; showEnvVarsInLog = 0; }; AFA3D8A109C03C5600E4CFCA /* Run Update Info Plist */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Run Update Info Plist"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; showEnvVarsInLog = 0; }; AFA3D8A309C03C5F00E4CFCA /* Run Update Info Plist */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Run Update Info Plist"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; showEnvVarsInLog = 0; }; AFA3D8A509C03C6200E4CFCA /* Run Update Info Plist */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Run Update Info Plist"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; showEnvVarsInLog = 0; }; AFA3D8A909C03C6900E4CFCA /* Run Update Info Plist */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Run Update Info Plist"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; showEnvVarsInLog = 0; }; AFA3D8AB09C03C6D00E4CFCA /* Run Update Info Plist */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Run Update Info Plist"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; showEnvVarsInLog = 0; }; AFA3D8AD09C03C7000E4CFCA /* Run Update Info Plist */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Run Update Info Plist"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; showEnvVarsInLog = 0; }; AFA3D8AF09C03C7300E4CFCA /* Run Update Info Plist */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Run Update Info Plist"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; showEnvVarsInLog = 0; }; AFA3D8B109C03C7600E4CFCA /* Run Update Info Plist */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Run Update Info Plist"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; showEnvVarsInLog = 0; }; AFA3D8B309C03C7900E4CFCA /* Run Update Info Plist */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Run Update Info Plist"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; showEnvVarsInLog = 0; }; AFA3D8B509C03C7C00E4CFCA /* Run Update Info Plist */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Run Update Info Plist"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; showEnvVarsInLog = 0; }; AFA3D8B709C03C7F00E4CFCA /* Run Update Info Plist */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Run Update Info Plist"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; showEnvVarsInLog = 0; }; AFA3D8B909C03C8200E4CFCA /* Run Update Info Plist */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Run Update Info Plist"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; showEnvVarsInLog = 0; }; AFA3D8BB09C03C8600E4CFCA /* Run Update Info Plist */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Run Update Info Plist"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; showEnvVarsInLog = 0; }; AFA3D8BD09C03C8900E4CFCA /* Run Update Info Plist */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Run Update Info Plist"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; showEnvVarsInLog = 0; }; AFA3D8BF09C03C8D00E4CFCA /* Run Update Info Plist */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Run Update Info Plist"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; showEnvVarsInLog = 0; }; AFA3D8C109C03C9000E4CFCA /* Run Update Info Plist */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Run Update Info Plist"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; showEnvVarsInLog = 0; }; AFA3D8C309C03C9300E4CFCA /* Run Update Info Plist */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Run Update Info Plist"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; showEnvVarsInLog = 0; }; AFA3D8C509C03C9600E4CFCA /* Run Update Info Plist */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Run Update Info Plist"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; showEnvVarsInLog = 0; }; AFA3D8C709C03C9900E4CFCA /* Run Update Info Plist */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Run Update Info Plist"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; showEnvVarsInLog = 0; }; AFA3D8C909C03C9E00E4CFCA /* Run Update Info Plist */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Run Update Info Plist"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; showEnvVarsInLog = 0; }; AFA3D8CB09C03CA100E4CFCA /* Run Update Info Plist */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Run Update Info Plist"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; showEnvVarsInLog = 0; }; AFA3D8CD09C03CA400E4CFCA /* Run Update Info Plist */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Run Update Info Plist"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; showEnvVarsInLog = 0; }; AFA3D8CF09C03CA800E4CFCA /* Run Update Info Plist */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Run Update Info Plist"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; showEnvVarsInLog = 0; }; AFA3D8D109C03CAB00E4CFCA /* Run Update Info Plist */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Run Update Info Plist"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; showEnvVarsInLog = 0; }; AFA3D8D309C03CAE00E4CFCA /* Run Update Info Plist */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Run Update Info Plist"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; showEnvVarsInLog = 0; }; AFA3D8D709C03CB400E4CFCA /* Run Update Info Plist */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Run Update Info Plist"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; showEnvVarsInLog = 0; }; AFA3D8D909C03CB700E4CFCA /* Run Update Info Plist */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Run Update Info Plist"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; showEnvVarsInLog = 0; }; AFA3D8DB09C03CBA00E4CFCA /* Run Update Info Plist */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Run Update Info Plist"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; showEnvVarsInLog = 0; }; AFA3D8DD09C03CBD00E4CFCA /* Run Update Info Plist */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Run Update Info Plist"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; showEnvVarsInLog = 0; }; AFA3D8DF09C03CC000E4CFCA /* Run Update Info Plist */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Run Update Info Plist"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; showEnvVarsInLog = 0; }; AFA3D8E109C03CC400E4CFCA /* Run Update Info Plist */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Run Update Info Plist"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; showEnvVarsInLog = 0; }; AFA3D8E309C03CCA00E4CFCA /* Run Update Info Plist */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Run Update Info Plist"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; showEnvVarsInLog = 0; }; AFA3D8E509C03CCD00E4CFCA /* Run Update Info Plist */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Run Update Info Plist"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; showEnvVarsInLog = 0; }; AFA3D8E709C03CD100E4CFCA /* Run Update Info Plist */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Run Update Info Plist"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; showEnvVarsInLog = 0; }; AFA3D8E909C03CD500E4CFCA /* Run Update Info Plist */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Run Update Info Plist"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; showEnvVarsInLog = 0; }; AFA3D8EB09C03CD800E4CFCA /* Run Update Info Plist */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Run Update Info Plist"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; showEnvVarsInLog = 0; }; AFA3D8ED09C03CDB00E4CFCA /* Run Update Info Plist */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Run Update Info Plist"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; showEnvVarsInLog = 0; }; AFA3D8EF09C03CDE00E4CFCA /* Run Update Info Plist */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Run Update Info Plist"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; showEnvVarsInLog = 0; }; AFA3D8F109C03CE100E4CFCA /* Run Update Info Plist */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Run Update Info Plist"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; showEnvVarsInLog = 0; }; AFA3D8F309C03CE400E4CFCA /* Run Update Info Plist */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Run Update Info Plist"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; showEnvVarsInLog = 0; }; AFA3D8F509C03CE800E4CFCA /* Run Update Info Plist */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Run Update Info Plist"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; showEnvVarsInLog = 0; }; AFA3D8F709C03CEA00E4CFCA /* Run Update Info Plist */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Run Update Info Plist"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; showEnvVarsInLog = 0; }; AFA3D8F909C03CED00E4CFCA /* Run Update Info Plist */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Run Update Info Plist"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; showEnvVarsInLog = 0; }; AFA3D8FB09C03CF100E4CFCA /* Run Update Info Plist */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Run Update Info Plist"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; showEnvVarsInLog = 0; }; AFA3D8FD09C03CF400E4CFCA /* Run Update Info Plist */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Run Update Info Plist"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; showEnvVarsInLog = 0; }; AFA3D8FF09C03CF700E4CFCA /* Run Update Info Plist */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Run Update Info Plist"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; showEnvVarsInLog = 0; }; AFA3D90109C03D0000E4CFCA /* Run Update Info Plist */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Run Update Info Plist"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; showEnvVarsInLog = 0; }; AFA3D90309C03D0400E4CFCA /* Run Update Info Plist */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Run Update Info Plist"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; showEnvVarsInLog = 0; }; AFA3D90509C03D0700E4CFCA /* Run Update Info Plist */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Run Update Info Plist"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; showEnvVarsInLog = 0; }; AFA3D90709C03D0B00E4CFCA /* Run Update Info Plist */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Run Update Info Plist"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; showEnvVarsInLog = 0; }; AFA3D90909C03D0E00E4CFCA /* Run Update Info Plist */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Run Update Info Plist"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; showEnvVarsInLog = 0; }; AFA3D90B09C03D1100E4CFCA /* Run Update Info Plist */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Run Update Info Plist"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; showEnvVarsInLog = 0; }; AFA3D90D09C03D1400E4CFCA /* Run Update Info Plist */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Run Update Info Plist"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; showEnvVarsInLog = 0; }; AFA3D90F09C03D1800E4CFCA /* Run Update Info Plist */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Run Update Info Plist"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; showEnvVarsInLog = 0; }; AFA3D91109C03D1B00E4CFCA /* Run Update Info Plist */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Run Update Info Plist"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; showEnvVarsInLog = 0; }; AFA3D91309C03D1E00E4CFCA /* Run Update Info Plist */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Run Update Info Plist"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; showEnvVarsInLog = 0; }; AFA3D91509C03D2100E4CFCA /* Run Update Info Plist */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Run Update Info Plist"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; showEnvVarsInLog = 0; }; AFA3D91709C03D2400E4CFCA /* Run Update Info Plist */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Run Update Info Plist"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; showEnvVarsInLog = 0; }; AFA3D91909C03D2700E4CFCA /* Run Update Info Plist */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Run Update Info Plist"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; showEnvVarsInLog = 0; }; AFA3D91D09C03D3000E4CFCA /* Run Update Info Plist */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Run Update Info Plist"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; showEnvVarsInLog = 0; }; AFA3D91F09C03D3300E4CFCA /* Run Update Info Plist */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Run Update Info Plist"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; showEnvVarsInLog = 0; }; AFA3D92109C03D3600E4CFCA /* Run Update Info Plist */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Run Update Info Plist"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; showEnvVarsInLog = 0; }; AFA3D92309C03D3A00E4CFCA /* Run Update Info Plist */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Run Update Info Plist"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; showEnvVarsInLog = 0; }; AFA3D92509C03D3D00E4CFCA /* Run Update Info Plist */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Run Update Info Plist"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; showEnvVarsInLog = 0; }; AFA3D92709C03D4000E4CFCA /* Run Update Info Plist */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Run Update Info Plist"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; showEnvVarsInLog = 0; }; AFA3D92909C03D4400E4CFCA /* Run Update Info Plist */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Run Update Info Plist"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; showEnvVarsInLog = 0; }; AFA3D92B09C03D4700E4CFCA /* Run Update Info Plist */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Run Update Info Plist"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; showEnvVarsInLog = 0; }; AFA3D92D09C03D4A00E4CFCA /* Run Update Info Plist */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Run Update Info Plist"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; showEnvVarsInLog = 0; }; AFA3D92F09C03D4E00E4CFCA /* Run Update Info Plist */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Run Update Info Plist"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; showEnvVarsInLog = 0; }; AFA3D93109C03D5100E4CFCA /* Run Update Info Plist */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Run Update Info Plist"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; showEnvVarsInLog = 0; }; AFA3D93309C03D5400E4CFCA /* Run Update Info Plist */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Run Update Info Plist"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; showEnvVarsInLog = 0; }; AFA3D93509C03D5700E4CFCA /* Run Update Info Plist */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Run Update Info Plist"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; showEnvVarsInLog = 0; }; AFA3D93709C03D5B00E4CFCA /* Run Update Info Plist */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Run Update Info Plist"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; showEnvVarsInLog = 0; }; AFA3D93909C03D5E00E4CFCA /* Run Update Info Plist */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Run Update Info Plist"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; showEnvVarsInLog = 0; }; AFA3D93B09C03D6200E4CFCA /* Run Update Info Plist */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Run Update Info Plist"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; showEnvVarsInLog = 0; }; AFA3D93D09C03D6C00E4CFCA /* Run Update Info Plist */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Run Update Info Plist"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; showEnvVarsInLog = 0; }; AFA3D93F09C03D6F00E4CFCA /* Run Update Info Plist */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Run Update Info Plist"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; showEnvVarsInLog = 0; }; AFA3D94109C03D7200E4CFCA /* Run Update Info Plist */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Run Update Info Plist"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; showEnvVarsInLog = 0; }; AFA3D94309C03D7600E4CFCA /* Run Update Info Plist */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Run Update Info Plist"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; showEnvVarsInLog = 0; }; AFA3D94509C03D7A00E4CFCA /* Run Update Info Plist */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Run Update Info Plist"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; showEnvVarsInLog = 0; }; AFA3D94709C03D7E00E4CFCA /* Run Update Info Plist */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Run Update Info Plist"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; showEnvVarsInLog = 0; }; AFA3D94909C03D8100E4CFCA /* Run Update Info Plist */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Run Update Info Plist"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; showEnvVarsInLog = 0; }; AFA3D94B09C03D8500E4CFCA /* Run Update Info Plist */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Run Update Info Plist"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; showEnvVarsInLog = 0; }; AFA3D94D09C03D8D00E4CFCA /* Run Update Info Plist */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Run Update Info Plist"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; showEnvVarsInLog = 0; }; AFA3D94F09C03D9100E4CFCA /* Run Update Info Plist */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Run Update Info Plist"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; showEnvVarsInLog = 0; }; AFA3D95109C03D9400E4CFCA /* Run Update Info Plist */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Run Update Info Plist"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; showEnvVarsInLog = 0; }; AFA3D95309C03D9800E4CFCA /* Run Update Info Plist */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Run Update Info Plist"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; showEnvVarsInLog = 0; }; AFA3D95509C03D9C00E4CFCA /* Run Update Info Plist */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Run Update Info Plist"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; showEnvVarsInLog = 0; }; AFA3D95709C03DA100E4CFCA /* Run Update Info Plist */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Run Update Info Plist"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; showEnvVarsInLog = 0; }; AFA3D95909C03DA400E4CFCA /* Run Update Info Plist */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Run Update Info Plist"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; showEnvVarsInLog = 0; }; AFA3D95B09C03DA800E4CFCA /* Run Update Info Plist */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Run Update Info Plist"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; showEnvVarsInLog = 0; }; AFA3D95D09C03DAB00E4CFCA /* Run Update Info Plist */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Run Update Info Plist"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; showEnvVarsInLog = 0; }; AFA3D95F09C03DAE00E4CFCA /* Run Update Info Plist */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Run Update Info Plist"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; showEnvVarsInLog = 0; }; AFA3D96109C03DB100E4CFCA /* Run Update Info Plist */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Run Update Info Plist"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; showEnvVarsInLog = 0; }; AFA3D96309C03DB500E4CFCA /* Run Update Info Plist */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Run Update Info Plist"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; showEnvVarsInLog = 0; }; AFA3D96509C03DB900E4CFCA /* Run Update Info Plist */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Run Update Info Plist"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; showEnvVarsInLog = 0; }; AFA3D96709C03DBC00E4CFCA /* Run Update Info Plist */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Run Update Info Plist"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; showEnvVarsInLog = 0; }; AFA3D96909C03DBF00E4CFCA /* Run Update Info Plist */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Run Update Info Plist"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; showEnvVarsInLog = 0; }; AFA3D96B09C03DC600E4CFCA /* Run Update Info Plist */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Run Update Info Plist"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; showEnvVarsInLog = 0; }; AFA3D96D09C03DCA00E4CFCA /* Run Update Info Plist */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Run Update Info Plist"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; showEnvVarsInLog = 0; }; AFA3D96F09C03DCD00E4CFCA /* Run Update Info Plist */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Run Update Info Plist"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; showEnvVarsInLog = 0; }; AFA3D97109C03DD000E4CFCA /* Run Update Info Plist */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Run Update Info Plist"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; showEnvVarsInLog = 0; }; AFA3D97309C03DD300E4CFCA /* Run Update Info Plist */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Run Update Info Plist"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; showEnvVarsInLog = 0; }; AFA3D97509C03DD700E4CFCA /* Run Update Info Plist */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Run Update Info Plist"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; showEnvVarsInLog = 0; }; AFA3D97709C03DDA00E4CFCA /* Run Update Info Plist */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Run Update Info Plist"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; showEnvVarsInLog = 0; }; AFA3D97909C03DDD00E4CFCA /* Run Update Info Plist */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Run Update Info Plist"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; showEnvVarsInLog = 0; }; AFA3D97B09C03DE000E4CFCA /* Run Update Info Plist */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Run Update Info Plist"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; showEnvVarsInLog = 0; }; AFA3D97D09C03DE400E4CFCA /* Run Update Info Plist */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Run Update Info Plist"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; showEnvVarsInLog = 0; }; AFA3D97F09C03DE700E4CFCA /* Run Update Info Plist */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Run Update Info Plist"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; showEnvVarsInLog = 0; }; AFA3D98109C03DEA00E4CFCA /* Run Update Info Plist */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Run Update Info Plist"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; showEnvVarsInLog = 0; }; AFA3D98309C03DEE00E4CFCA /* Run Update Info Plist */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Run Update Info Plist"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; showEnvVarsInLog = 0; }; AFA3D98509C03DF100E4CFCA /* Run Update Info Plist */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Run Update Info Plist"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; showEnvVarsInLog = 0; }; AFA3D98709C03DF400E4CFCA /* Run Update Info Plist */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Run Update Info Plist"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; showEnvVarsInLog = 0; }; AFA3D98909C03DF700E4CFCA /* Run Update Info Plist */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Run Update Info Plist"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; showEnvVarsInLog = 0; }; AFA3D98B09C03DFC00E4CFCA /* Run Update Info Plist */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Run Update Info Plist"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; showEnvVarsInLog = 0; }; AFA3D98D09C03E0500E4CFCA /* Run Update Info Plist */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Run Update Info Plist"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; showEnvVarsInLog = 0; }; AFA3D98F09C03E0F00E4CFCA /* Run Update Info Plist */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Run Update Info Plist"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; showEnvVarsInLog = 0; }; AFA3D99109C03E1200E4CFCA /* Run Update Info Plist */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Run Update Info Plist"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; showEnvVarsInLog = 0; }; AFA3D99309C03E1600E4CFCA /* Run Update Info Plist */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Run Update Info Plist"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; showEnvVarsInLog = 0; }; AFA3D99509C03E1900E4CFCA /* Run Update Info Plist */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Run Update Info Plist"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; showEnvVarsInLog = 0; }; AFA3D99709C03E1C00E4CFCA /* Run Update Info Plist */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Run Update Info Plist"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; showEnvVarsInLog = 0; }; AFA3D99909C03E2000E4CFCA /* Run Update Info Plist */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Run Update Info Plist"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; showEnvVarsInLog = 0; }; AFA3D99B09C03E2300E4CFCA /* Run Update Info Plist */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Run Update Info Plist"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; showEnvVarsInLog = 0; }; AFA3D99D09C03E2600E4CFCA /* Run Update Info Plist */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Run Update Info Plist"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; showEnvVarsInLog = 0; }; AFA3D99F09C03E2900E4CFCA /* Run Update Info Plist */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Run Update Info Plist"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; showEnvVarsInLog = 0; }; AFA3D9A109C03E2E00E4CFCA /* Run Update Info Plist */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Run Update Info Plist"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; showEnvVarsInLog = 0; }; AFA3D9A309C03E3200E4CFCA /* Run Update Info Plist */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Run Update Info Plist"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; showEnvVarsInLog = 0; }; AFA3D9A509C03E3600E4CFCA /* Run Update Info Plist */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Run Update Info Plist"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; showEnvVarsInLog = 0; }; AFA3D9A709C03E3A00E4CFCA /* Run Update Info Plist */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Run Update Info Plist"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; showEnvVarsInLog = 0; }; AFA3D9A909C03E3D00E4CFCA /* Run Update Info Plist */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Run Update Info Plist"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; showEnvVarsInLog = 0; }; AFA3D9AB09C03E4200E4CFCA /* Run Update Info Plist */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Run Update Info Plist"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; showEnvVarsInLog = 0; }; AFA3D9AD09C03E4600E4CFCA /* Run Update Info Plist */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Run Update Info Plist"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; showEnvVarsInLog = 0; }; AFA3D9AF09C03E4B00E4CFCA /* Run Update Info Plist */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Run Update Info Plist"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; showEnvVarsInLog = 0; }; AFA3D9B109C03E4E00E4CFCA /* Run Update Info Plist */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Run Update Info Plist"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; showEnvVarsInLog = 0; }; AFA3D9B309C03E5100E4CFCA /* Run Update Info Plist */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Run Update Info Plist"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; showEnvVarsInLog = 0; }; AFA3D9B509C03E5700E4CFCA /* Run Update Info Plist */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Run Update Info Plist"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; showEnvVarsInLog = 0; }; AFA3D9B709C03E5B00E4CFCA /* Run Update Info Plist */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Run Update Info Plist"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; showEnvVarsInLog = 0; }; AFA3D9B909C03E5E00E4CFCA /* Run Update Info Plist */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Run Update Info Plist"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; showEnvVarsInLog = 0; }; AFA3D9BB09C03E6200E4CFCA /* Run Update Info Plist */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Run Update Info Plist"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; showEnvVarsInLog = 0; }; AFA3D9BD09C03E6500E4CFCA /* Run Update Info Plist */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Run Update Info Plist"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; showEnvVarsInLog = 0; }; AFA3D9BF09C03E6900E4CFCA /* Run Update Info Plist */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Run Update Info Plist"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; showEnvVarsInLog = 0; }; AFA3D9C109C03E6E00E4CFCA /* Run Update Info Plist */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Run Update Info Plist"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; showEnvVarsInLog = 0; }; AFA3D9C309C03E7100E4CFCA /* Run Update Info Plist */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Run Update Info Plist"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; showEnvVarsInLog = 0; }; AFA3D9C509C03E7400E4CFCA /* Run Update Info Plist */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Run Update Info Plist"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; showEnvVarsInLog = 0; }; AFA3D9C709C03E7800E4CFCA /* Run Update Info Plist */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Run Update Info Plist"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; showEnvVarsInLog = 0; }; AFA3D9C909C03E7C00E4CFCA /* Run Update Info Plist */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Run Update Info Plist"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; showEnvVarsInLog = 0; }; AFA3D9CB09C03E7F00E4CFCA /* Run Update Info Plist */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Run Update Info Plist"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; showEnvVarsInLog = 0; }; AFA3D9CD09C03E8400E4CFCA /* Run Update Info Plist */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Run Update Info Plist"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; showEnvVarsInLog = 0; }; AFA3D9CF09C03E8700E4CFCA /* Run Update Info Plist */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Run Update Info Plist"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; showEnvVarsInLog = 0; }; AFA3D9D109C03E8B00E4CFCA /* Run Update Info Plist */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Run Update Info Plist"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; showEnvVarsInLog = 0; }; AFA3D9D309C03E8F00E4CFCA /* Run Update Info Plist */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Run Update Info Plist"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; showEnvVarsInLog = 0; }; AFA3D9D509C03E9300E4CFCA /* Run Update Info Plist */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Run Update Info Plist"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; showEnvVarsInLog = 0; }; AFA3DBA209C0424C00E4CFCA /* Run Update Info Plist */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Run Update Info Plist"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; showEnvVarsInLog = 0; }; AFACE8841CC83458008B24CD /* Run Update Info Plist */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Run Update Info Plist"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; showEnvVarsInLog = 0; }; AFB591B6178B812C00EA4005 /* Run Update Info Plist */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Run Update Info Plist"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; showEnvVarsInLog = 0; }; AFBFE75A178642DC00432B21 /* Run Update Info Plist */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Run Update Info Plist"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; showEnvVarsInLog = 0; }; AFBFE77A178647FE00432B21 /* Run Update Info Plist */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Run Update Info Plist"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; showEnvVarsInLog = 0; }; AFBFE78817894FFA00432B21 /* Copy Standalone Preferences XML File */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Copy Standalone Preferences XML File"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "SRC=$SRCROOT/$PRODUCT_NAME-app.xml\nDST=$BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX/Contents/Resources\nNAME=`echo $PRODUCT_NAME.xml | tr A-Z a-z`\ncp -p $SRC $DST/$NAME\nln -sf ../../../$NAME $DST/$PRODUCT_NAME.saver/Contents/Resources/"; }; AFBFE78917895AAF00432B21 /* Copy Standalone Preferences XML File */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Copy Standalone Preferences XML File"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "SRC=$SRCROOT/$PRODUCT_NAME-app.xml\nDST=$BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX/Contents/Resources\nNAME=`echo $PRODUCT_NAME.xml | tr A-Z a-z`\ncp -p $SRC $DST/$NAME\nln -sf ../../../$NAME $DST/$PRODUCT_NAME.saver/Contents/Resources/"; }; AFC0E8BC1CDC601A008CAFAC /* Run Update Info Plist */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Run Update Info Plist"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; showEnvVarsInLog = 0; }; AFCCCBB509C033DF00353F4D /* Run Update Info Plist */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Run Update Info Plist"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; showEnvVarsInLog = 0; }; AFCCCBC709C03AAF00353F4D /* Run Update Info Plist */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Run Update Info Plist"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; showEnvVarsInLog = 0; }; AFCCCBCB09C03AEE00353F4D /* Run Update Info Plist */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Run Update Info Plist"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; showEnvVarsInLog = 0; }; AFCCCBCD09C03AF400353F4D /* Run Update Info Plist */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Run Update Info Plist"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; showEnvVarsInLog = 0; }; AFCCCBCF09C03AF800353F4D /* Run Update Info Plist */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Run Update Info Plist"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; showEnvVarsInLog = 0; }; AFCCCBD109C03AFC00353F4D /* Run Update Info Plist */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Run Update Info Plist"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; showEnvVarsInLog = 0; }; AFCCCBD309C03B0000353F4D /* Run Update Info Plist */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Run Update Info Plist"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; showEnvVarsInLog = 0; }; AFCCCBD509C03B0500353F4D /* Run Update Info Plist */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Run Update Info Plist"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; showEnvVarsInLog = 0; }; AFCF834C1AF5B515008BB7E1 /* Run Update Info Plist */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Run Update Info Plist"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; showEnvVarsInLog = 0; }; AFD51B2C0F063B4A00471C02 /* Run Update Info Plist */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Run Update Info Plist"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; showEnvVarsInLog = 0; }; AFDA659D178A52B70070D24B /* Run Update Info Plist */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Run Update Info Plist"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; showEnvVarsInLog = 0; }; AFE2A4660E2E904600ADB298 /* Run Update Info Plist */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Run Update Info Plist"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; showEnvVarsInLog = 0; }; AFE30BF80E52B14700CCF4A5 /* Run Update Info Plist */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Run Update Info Plist"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; showEnvVarsInLog = 0; }; AFE6A1930CDD7B2E002805BF /* Run Update Info Plist */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Run Update Info Plist"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; showEnvVarsInLog = 0; }; AFE6A4290CDD7FAA002805BF /* Run Update Info Plist */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Run Update Info Plist"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; showEnvVarsInLog = 0; }; AFEC23DE1CB6EAE100DE138F /* Run Update Info Plist */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Run Update Info Plist"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; showEnvVarsInLog = 0; }; AFEE105E1D13406000AAC8F7 /* Run Update Info Plist */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Run Update Info Plist"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; showEnvVarsInLog = 0; }; AFEE107D1D15EB0800AAC8F7 /* Run Update Info Plist */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Run Update Info Plist"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; showEnvVarsInLog = 0; }; AFEE109C1D17E20B00AAC8F7 /* Run Update Info Plist */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Run Update Info Plist"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; showEnvVarsInLog = 0; }; AFF2868E17860E830050A578 /* Run Update Info Plist */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Run Update Info Plist"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; showEnvVarsInLog = 0; }; AFF3C9F717CCAC440028F240 /* Run Update Info Plist */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Run Update Info Plist"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; showEnvVarsInLog = 0; }; AFF463430C4403E400EE6509 /* Run Update Info Plist */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Run Update Info Plist"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; showEnvVarsInLog = 0; }; AFF463680C440AEF00EE6509 /* Run Update Info Plist */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Run Update Info Plist"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; showEnvVarsInLog = 0; }; AFFAB32519158CE40020F021 /* Run Update Info Plist */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Run Update Info Plist"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; showEnvVarsInLog = 0; }; CE3D01621B76F4C100993C75 /* Run Update Info Plist */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Run Update Info Plist"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; showEnvVarsInLog = 0; }; /* End PBXShellScriptBuildPhase section */ /* Begin PBXSourcesBuildPhase section */ AF08399409930B6B00277BE9 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AF0839B009930C4900277BE9 /* atlantis.c in Sources */, AF0839B109930C4900277BE9 /* dolphin.c in Sources */, AF0839B209930C4900277BE9 /* shark.c in Sources */, AF0839B309930C4900277BE9 /* swim.c in Sources */, AF0839B409930C4900277BE9 /* whale.c in Sources */, AF9CCAB509959CEF0075E99B /* XScreenSaverSubclass.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF083A37099311D700277BE9 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AF083A4A099311FF00277BE9 /* atunnel.c in Sources */, AF083A59099312B000277BE9 /* tunnel_draw.c in Sources */, AF9CCAB609959CF70075E99B /* XScreenSaverSubclass.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF0DC7B00C4C73F600D76972 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AF0DC7B10C4C73F600D76972 /* XScreenSaverSubclass.m in Sources */, AF0DC7B20C4C73F600D76972 /* analogtv.c in Sources */, AF0DCA350C4C74A200D76972 /* asm6502.c in Sources */, AF0DCA360C4C74A200D76972 /* m6502.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF0DCA470C4CBB0D00D76972 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AF0DCA480C4CBB0D00D76972 /* XScreenSaverSubclass.m in Sources */, AF0DCA600C4CBB7300D76972 /* voronoi.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF1A17670D6D6EE3008AF328 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AF1A17680D6D6EE3008AF328 /* XScreenSaverSubclass.m in Sources */, AF1A177F0D6D6F3E008AF328 /* lcdscrub.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF1AD9DE18500F9F00932759 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AF1ADA141850132600932759 /* main.m in Sources */, AF3633FD18530DD90086A439 /* Updater.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF1B0FAC1D7AB4740011DBE4 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AF1B0FC21D7AB54D0011DBE4 /* hexstrut.c in Sources */, AF1B0FAE1D7AB4740011DBE4 /* XScreenSaverSubclass.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF32D9E50F3AD0B40080F535 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AF32D9E70F3AD0B40080F535 /* XScreenSaverSubclass.m in Sources */, AF32D9FB0F3AD1200080F535 /* rubikblocks.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF3581C51431D47B00E09C51 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AF3581C61431D47B00E09C51 /* XScreenSaverSubclass.m in Sources */, AF3581DC1431D5FC00E09C51 /* companion_disc.c in Sources */, AF3581DF1431D5FC00E09C51 /* companion_heart.c in Sources */, AF3581E21431D5FC00E09C51 /* companion_quad.c in Sources */, AF3581E51431D5FC00E09C51 /* companion.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF358202143330F900E09C51 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AF358203143330F900E09C51 /* XScreenSaverSubclass.m in Sources */, AF35821C1433314C00E09C51 /* tronbit_idle1.c in Sources */, AF35821D1433314C00E09C51 /* tronbit_idle2.c in Sources */, AF35821E1433314C00E09C51 /* tronbit_no.c in Sources */, AF35821F1433314C00E09C51 /* tronbit_yes.c in Sources */, AF3582201433314C00E09C51 /* tronbit.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF35E88F0E63823600691F2F /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AF35E8900E63823600691F2F /* XScreenSaverSubclass.m in Sources */, AF35EB260E6382BA00691F2F /* jigsaw.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF39381F1D0FBD6A00205406 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AF3938211D0FBD6A00205406 /* XScreenSaverSubclass.m in Sources */, AF3938341D0FBF1900205406 /* discoball.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF39E287198A11F60064A58D /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AFCF509C198A1861005B0DB1 /* involute.c in Sources */, AF39E289198A11F60064A58D /* XScreenSaverSubclass.m in Sources */, AF39E2AB198A13F50064A58D /* winduprobot.c in Sources */, AFBE744019A7C6930018AA35 /* robot.c in Sources */, AF39E2AA198A13F50064A58D /* robot-wireframe.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF3C714A0D624BF50030CC0D /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AF3C714B0D624BF50030CC0D /* XScreenSaverSubclass.m in Sources */, AF3C715E0D624C600030CC0D /* hypnowheel.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF46E9D41CBBA2B300240FBC /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AF46E9E91CBBA41B00240FBC /* unicrud.c in Sources */, AF46E9D61CBBA2B300240FBC /* XScreenSaverSubclass.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF476FBB099D154F001F091E /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AF476FBC099D154F001F091E /* XScreenSaverSubclass.m in Sources */, AF476FD1099D15AA001F091E /* interference.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF476FE0099D1686001F091E /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AF476FE1099D1686001F091E /* XScreenSaverSubclass.m in Sources */, AF476FF1099D1713001F091E /* truchet.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF477051099D4385001F091E /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AF477052099D4385001F091E /* XScreenSaverSubclass.m in Sources */, AF477146099D43E2001F091E /* deluxe.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF47716E099D4786001F091E /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AF47716F099D4786001F091E /* XScreenSaverSubclass.m in Sources */, AF47717D099D47D3001F091E /* compass.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF477184099D4803001F091E /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AF477185099D4803001F091E /* XScreenSaverSubclass.m in Sources */, AF477193099D4864001F091E /* wander.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF4771AC099D4949001F091E /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AF4771AD099D4949001F091E /* XScreenSaverSubclass.m in Sources */, AF4771BB099D4997001F091E /* t3d.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF4771E0099D4D9A001F091E /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AF4771E1099D4D9A001F091E /* XScreenSaverSubclass.m in Sources */, AF4771F0099D4DFE001F091E /* ccurve.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF4771F7099D4E63001F091E /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AF4771F8099D4E63001F091E /* XScreenSaverSubclass.m in Sources */, AF477206099D4EB6001F091E /* nerverot.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF47720D099D4EE8001F091E /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AF47720E099D4EE8001F091E /* XScreenSaverSubclass.m in Sources */, AF47721C099D4F47001F091E /* whirlygig.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF477223099D4F67001F091E /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AF477224099D4F67001F091E /* XScreenSaverSubclass.m in Sources */, AF477232099D4FD5001F091E /* anemone.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF477258099D5717001F091E /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AF477259099D5717001F091E /* XScreenSaverSubclass.m in Sources */, AF477267099D5768001F091E /* halftone.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF477270099D57B9001F091E /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AF477271099D57B9001F091E /* XScreenSaverSubclass.m in Sources */, AF47727F099D5808001F091E /* popsquares.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF477288099D5926001F091E /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AF477289099D5926001F091E /* XScreenSaverSubclass.m in Sources */, AF477298099D5980001F091E /* piecewise.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF477387099D65A1001F091E /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AF477388099D65A1001F091E /* XScreenSaverSubclass.m in Sources */, AF477396099D65FE001F091E /* wormhole.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF47739F099D6648001F091E /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AF4773A0099D6648001F091E /* XScreenSaverSubclass.m in Sources */, AF4773B5099D6778001F091E /* fuzzyflakes.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF4773C6099D67B9001F091E /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AF4773C7099D67B9001F091E /* XScreenSaverSubclass.m in Sources */, AF4773D5099D6817001F091E /* anemotaxis.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF477407099D69E7001F091E /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AF477408099D69E7001F091E /* XScreenSaverSubclass.m in Sources */, AF47741D099D6A6D001F091E /* intermomentary.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF47742C099D7C70001F091E /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AF47742D099D7C70001F091E /* XScreenSaverSubclass.m in Sources */, AF47743B099D7CEA001F091E /* ifs.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF477447099D7D33001F091E /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AF477448099D7D33001F091E /* XScreenSaverSubclass.m in Sources */, AF477456099D7D8A001F091E /* xmatrix.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF477488099D89E4001F091E /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AF477489099D89E4001F091E /* XScreenSaverSubclass.m in Sources */, AF477497099D8A53001F091E /* flame.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF47749E099D8A74001F091E /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AF47749F099D8A74001F091E /* XScreenSaverSubclass.m in Sources */, AF4774AD099D8B08001F091E /* kaleidescope.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF4774B9099D8B5F001F091E /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AF4774BA099D8B5F001F091E /* XScreenSaverSubclass.m in Sources */, AF4774CC099D8BC2001F091E /* lmorph.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF4774D3099D8BFF001F091E /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AF4774D4099D8BFF001F091E /* XScreenSaverSubclass.m in Sources */, AF4774E2099D8C8B001F091E /* maze.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF477562099D9A1A001F091E /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AF477563099D9A1A001F091E /* XScreenSaverSubclass.m in Sources */, AF477571099D9A8A001F091E /* pedal.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF477588099D9C28001F091E /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AF477589099D9C28001F091E /* XScreenSaverSubclass.m in Sources */, AF47759D099D9CA3001F091E /* pyro.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF4775A4099D9CF7001F091E /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AF4775A5099D9CF7001F091E /* XScreenSaverSubclass.m in Sources */, AF4775B4099D9D67001F091E /* starfish.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF4775DD099D9F69001F091E /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AF4775DE099D9F69001F091E /* XScreenSaverSubclass.m in Sources */, AF4775F0099D9FFF001F091E /* coral.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF4775F7099DA030001F091E /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AF4775F8099DA030001F091E /* XScreenSaverSubclass.m in Sources */, AF477606099DA097001F091E /* epicycle.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF477618099DA26C001F091E /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AF477619099DA26C001F091E /* XScreenSaverSubclass.m in Sources */, AF47762B099DA2E9001F091E /* kumppa.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF477649099DA6D0001F091E /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AF47764A099DA6D0001F091E /* XScreenSaverSubclass.m in Sources */, AF477658099DA75D001F091E /* squiral.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF47765F099DA78E001F091E /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AF477660099DA78E001F091E /* XScreenSaverSubclass.m in Sources */, AF47766E099DA80D001F091E /* critical.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF477675099DA849001F091E /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AF477676099DA849001F091E /* XScreenSaverSubclass.m in Sources */, AF477684099DA8C7001F091E /* petri.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF477694099DAA6F001F091E /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AF477695099DAA6F001F091E /* XScreenSaverSubclass.m in Sources */, AF4776A3099DAADE001F091E /* blaster.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF4776AF099DABDD001F091E /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AF4776B0099DABDD001F091E /* XScreenSaverSubclass.m in Sources */, AF4776BE099DAC46001F091E /* xspirograph.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF4776C5099DAC8A001F091E /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AF4776C6099DAC8A001F091E /* XScreenSaverSubclass.m in Sources */, AF4776D4099DACEB001F091E /* xrayswarm.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF4776E0099DADDF001F091E /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AF4776E1099DADDF001F091E /* XScreenSaverSubclass.m in Sources */, AF4776EF099DAE58001F091E /* whirlwindwarp.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF4776F6099DAE7A001F091E /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AF4776F7099DAE7A001F091E /* XScreenSaverSubclass.m in Sources */, AF477705099DAF3F001F091E /* vermiculate.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF477712099DAF9F001F091E /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AF477713099DAF9F001F091E /* XScreenSaverSubclass.m in Sources */, AF477721099DB01C001F091E /* cloudlife.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF477728099DB044001F091E /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AF477729099DB044001F091E /* XScreenSaverSubclass.m in Sources */, AF477737099DB104001F091E /* substrate.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF477757099DB61E001F091E /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AF477758099DB61E001F091E /* XScreenSaverSubclass.m in Sources */, AF47776A099DB710001F091E /* interaggregate.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF477779099DB965001F091E /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AF47777A099DB965001F091E /* XScreenSaverSubclass.m in Sources */, AF477788099DBA29001F091E /* celtic.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF477795099DBA90001F091E /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AF477796099DBA90001F091E /* XScreenSaverSubclass.m in Sources */, AF4777A5099DBB12001F091E /* fluidballs.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF4777D6099DC183001F091E /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AF4777D7099DC183001F091E /* XScreenSaverSubclass.m in Sources */, AF4778A4099DDA91001F091E /* boxfit.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF4778B0099DDB79001F091E /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AF4778B1099DDB79001F091E /* XScreenSaverSubclass.m in Sources */, AF4778BF099DDC33001F091E /* penetrate.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF4778CC099DDCAE001F091E /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AF4778CD099DDCAE001F091E /* XScreenSaverSubclass.m in Sources */, AF4778DB099DDD2B001F091E /* xjack.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF4778ED099DDDC8001F091E /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AF4778EE099DDDC8001F091E /* XScreenSaverSubclass.m in Sources */, AF4778FC099DDE79001F091E /* cynosure.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF47790E099DE379001F091E /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AF47790F099DE379001F091E /* XScreenSaverSubclass.m in Sources */, AF47791D099DE3F1001F091E /* flag.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF47792F099DE4C7001F091E /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AF477930099DE4C7001F091E /* XScreenSaverSubclass.m in Sources */, AF47793E099DE56A001F091E /* slip.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF4808BE098C3B6C00FB32B8 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AFE943B119DD54C1000A5E6D /* xft.c in Sources */, AFE943B519DDF97F000A5E6D /* utf8wc.c in Sources */, AF4808C5098C3BDC00FB32B8 /* colors.c in Sources */, AF4808C6098C3BDF00FB32B8 /* erase.c in Sources */, AF4808C7098C3BE600FB32B8 /* hsv.c in Sources */, AFBF893E0E41D930006A2D66 /* fps.c in Sources */, AFBF89AF0E423FC3006A2D66 /* fps-gl.c in Sources */, AF4808C8098C3BE800FB32B8 /* InvertedSlider.m in Sources */, AF4808C9098C3BEC00FB32B8 /* jwxyz.m in Sources */, AF4808CA098C3BEE00FB32B8 /* PrefsReader.m in Sources */, AFDA11251934424D003D397F /* aligned_malloc.c in Sources */, AF4808CC098C3BF200FB32B8 /* spline.c in Sources */, AF2D8F321CEBA10300198014 /* jwxyz-timers.c in Sources */, AF4808CD098C3BF400FB32B8 /* usleep.c in Sources */, CE55645A1C25141000645458 /* jwxyz-gl.c in Sources */, AF4808CE098C3BF800FB32B8 /* XScreenSaverConfigSheet.m in Sources */, AF4808CF098C3BFB00FB32B8 /* XScreenSaverView.m in Sources */, AF4808D0098C3BFD00FB32B8 /* yarandom.c in Sources */, AF480FCC09901DF900FB32B8 /* gltrackball.c in Sources */, AF480FCD09901E0000FB32B8 /* rotator.c in Sources */, AF480FCE09901E0400FB32B8 /* sphere.c in Sources */, AF480FCF09901E0700FB32B8 /* trackball.c in Sources */, AF480FD009901E0A00FB32B8 /* tube.c in Sources */, AF4812FA0990D9AE00FB32B8 /* XScreenSaverGLView.m in Sources */, AF083A1C099310B300277BE9 /* xpm-ximage.c in Sources */, AF083A21099310CF00277BE9 /* xlockmore.c in Sources */, AFA55866099324D800F3E977 /* minixpm.c in Sources */, AFA55A530993353500F3E977 /* gllist.c in Sources */, AFA55A95099336D800F3E977 /* normals.c in Sources */, AFDA11271934424D003D397F /* thread_util.c in Sources */, AF975C93099C929800B05160 /* xpm-pixmap.c in Sources */, CE8EA1C21C35CF10002D1020 /* jwxyz-common.c in Sources */, AF4774E8099D8D8C001F091E /* logo.c in Sources */, AF4775C0099D9E79001F091E /* resources.c in Sources */, AF9D468F09B51567006E59CF /* grabclient-osx.m in Sources */, AF9D473809B52EE0006E59CF /* colorbars.c in Sources */, AF77783409B6516900EA3033 /* grab-ximage.c in Sources */, AF77783709B6518400EA3033 /* texfont.c in Sources */, CE43C2BF1C055157004C2BC6 /* jwxyz-cocoa.m in Sources */, AF77783A09B651AF00EA3033 /* glut_stroke.c in Sources */, AF77783D09B651C700EA3033 /* glut_swidth.c in Sources */, AFAD462309D5F4DA00AB5F95 /* grabclient.c in Sources */, AF6048FB157C07C600CA21E4 /* jwzgles.c in Sources */, AFC7592D158D8E8B00C5458E /* textclient.c in Sources */, AFC75930158D9A7A00C5458E /* textclient-ios.m in Sources */, AF561DF615969BC3007CA5ED /* grabclient-ios.m in Sources */, CE9289D319BD00E300961F22 /* async_netdb.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF480C4E098E301400FB32B8 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AF480C5C098E305900FB32B8 /* helix.c in Sources */, AF9CCABB09959D1C0075E99B /* XScreenSaverSubclass.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF480D77098EEDDE00FB32B8 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AF480D88098EEE5B00FB32B8 /* drift.c in Sources */, AF9CCAB909959D100075E99B /* XScreenSaverSubclass.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF4810F009909FBA00FB32B8 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AF4811030990A02700FB32B8 /* dangerball.c in Sources */, AF9CC7A1099580E70075E99B /* XScreenSaverSubclass.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF4812550990CE2700FB32B8 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AF4812580990CE2700FB32B8 /* gears.c in Sources */, AF9CCABA09959D170075E99B /* XScreenSaverSubclass.m in Sources */, AFCFF1D90CE4517C00C7D111 /* involute.c in Sources */, AFCFF1DA0CE4518B00C7D111 /* tube.c in Sources */, AFCFF1DB0CE451A300C7D111 /* normals.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF4812B80990D3D900FB32B8 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AF4812C90990D41E00FB32B8 /* buildlwo.c in Sources */, AF4812CA0990D42000FB32B8 /* pipeobjs.c in Sources */, AF4812CB0990D42100FB32B8 /* pipes.c in Sources */, AF9CCABD09959D250075E99B /* XScreenSaverSubclass.m in Sources */, AF69640B0E4FE3470085DBCE /* teapot.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF48DEF40A0C25E000F94CF9 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AF48DEF60A0C25E000F94CF9 /* XScreenSaverSubclass.m in Sources */, AF48E1680A0C268500F94CF9 /* glschool_alg.c in Sources */, AF48E1690A0C268500F94CF9 /* glschool_gl.c in Sources */, AF48E16A0A0C268500F94CF9 /* glschool.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF4A344E102A593600A81B2A /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AF4A3450102A593600A81B2A /* XScreenSaverSubclass.m in Sources */, AF4A3464102A5A0E00A81B2A /* surfaces.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF4FD6EB0CE7A486005EE58E /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AF4FD6EC0CE7A486005EE58E /* XScreenSaverSubclass.m in Sources */, AF4FD7010CE7A577005EE58E /* lockward.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF4FF4BF0D52CBDE00666F98 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AF4FF4C10D52CBDE00666F98 /* XScreenSaverSubclass.m in Sources */, AF4FF4D10D52CC8400666F98 /* cubicgrid.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF5C9AFE1A0CCE6E00B0147A /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AF5C9B131A0CCF4E00B0147A /* cityflow.c in Sources */, AF5C9B001A0CCE6E00B0147A /* XScreenSaverSubclass.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF63A7F61AB4EDDB00593C75 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AF63A80C1AB4EF5D00593C75 /* romanboy.c in Sources */, AF63A7F81AB4EDDB00593C75 /* XScreenSaverSubclass.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF63F3271C3465BE0033E133 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AF63F3281C3465BE0033E133 /* SaverRunner.m in Sources */, AF63F3291C3465BE0033E133 /* main.m in Sources */, AF63F32A1C3465BE0033E133 /* SaverListController.m in Sources */, AF63F32D1C3465BE0033E133 /* analogtv.c in Sources */, AF63F32F1C3465BE0033E133 /* apple2-main.c in Sources */, AFA2118B1CD1AA3F00C0D2A1 /* textclient-mobile.c in Sources */, AF63F3301C3465BE0033E133 /* apple2.c in Sources */, AF63F43F1C3465BE0033E133 /* ios-function-table.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF63F45E1C34682A0033E133 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AF63F45F1C34682A0033E133 /* SaverRunner.m in Sources */, AF63F4601C34682A0033E133 /* main.m in Sources */, AF63F4611C34682A0033E133 /* SaverListController.m in Sources */, AF63F4771C3469570033E133 /* phosphor.c in Sources */, AF63F4651C34682A0033E133 /* ios-function-table.m in Sources */, AFA2118A1CD1AA3A00C0D2A1 /* textclient-mobile.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF63F4861C3469FC0033E133 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AF63F4871C3469FC0033E133 /* SaverRunner.m in Sources */, AF63F4881C3469FC0033E133 /* main.m in Sources */, AF63F4891C3469FC0033E133 /* SaverListController.m in Sources */, AF63F49D1C346B1A0033E133 /* testx11.c in Sources */, AF63F48B1C3469FC0033E133 /* ios-function-table.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF6423F7099FF9C2000F4CD4 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AF6423F9099FF9C2000F4CD4 /* XScreenSaverSubclass.m in Sources */, AF642412099FFAF1000F4CD4 /* extrusion-helix2.c in Sources */, AF642413099FFAF1000F4CD4 /* extrusion-helix3.c in Sources */, AF642414099FFAF1000F4CD4 /* extrusion-helix4.c in Sources */, AF642415099FFAF1000F4CD4 /* extrusion-joinoffset.c in Sources */, AF642416099FFAF1000F4CD4 /* extrusion-screw.c in Sources */, AF642417099FFAF1000F4CD4 /* extrusion-taper.c in Sources */, AF642418099FFAF1000F4CD4 /* extrusion-twistoid.c in Sources */, AF642419099FFAF1000F4CD4 /* extrusion.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF6425D109A18855000F4CD4 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AF6425D209A18855000F4CD4 /* XScreenSaverSubclass.m in Sources */, AF6425E009A188FB000F4CD4 /* hypercube.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF6425F109A189EC000F4CD4 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AF6425F209A189EC000F4CD4 /* XScreenSaverSubclass.m in Sources */, AF64260009A18A94000F4CD4 /* qix.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF64261409A18D6C000F4CD4 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AF64261509A18D6C000F4CD4 /* XScreenSaverSubclass.m in Sources */, AF64262309A18E1E000F4CD4 /* hyperball.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF64263109A18F54000F4CD4 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AF64263209A18F54000F4CD4 /* XScreenSaverSubclass.m in Sources */, AF64264009A18FEB000F4CD4 /* moire2.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF64265409A19229000F4CD4 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AF64265509A19229000F4CD4 /* XScreenSaverSubclass.m in Sources */, AF64266309A192C5000F4CD4 /* munch.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF64268009A194B0000F4CD4 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AF64268109A194B0000F4CD4 /* XScreenSaverSubclass.m in Sources */, AF64268F09A19542000F4CD4 /* goop.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF64277609A1D37A000F4CD4 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AF64277709A1D37A000F4CD4 /* XScreenSaverSubclass.m in Sources */, AF64278809A1D433000F4CD4 /* speedmine.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF6427AD09A2DE36000F4CD4 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AF6427AE09A2DE36000F4CD4 /* XScreenSaverSubclass.m in Sources */, AF6427BE09A2DF47000F4CD4 /* bubbles-default.c in Sources */, AF6427BF09A2DF47000F4CD4 /* bubbles.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF68A48319196CF800D41CD1 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AF68A49919196E3E00D41CD1 /* tessellimage.c in Sources */, AF68A49B19196E3E00D41CD1 /* delaunay.c in Sources */, AF68A48519196CF800D41CD1 /* XScreenSaverSubclass.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF73FF271A09877F00E485E9 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AF73FF391A09889700E485E9 /* binaryring.c in Sources */, AF73FF291A09877F00E485E9 /* XScreenSaverSubclass.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF7511041782B5B900380EA1 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AF7511151782B64300380EA1 /* kaleidocycle.c in Sources */, AF7511051782B5B900380EA1 /* XScreenSaverSubclass.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF7776E909B63ABF00EA3033 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AF7776EA09B63ABF00EA3033 /* XScreenSaverSubclass.m in Sources */, AF77770409B63B5F00EA3033 /* phosphor.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF77771F09B6416100EA3033 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AF77772009B6416100EA3033 /* XScreenSaverSubclass.m in Sources */, AF77772D09B641D300EA3033 /* pacman.c in Sources */, AF77772E09B641D400EA3033 /* pacman_ai.c in Sources */, AF77772F09B641D600EA3033 /* pacman_level.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF77774309B6446500EA3033 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AF77774509B6446500EA3033 /* XScreenSaverSubclass.m in Sources */, AF77775509B644FF00EA3033 /* flipscreen3d.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF77777909B6497800EA3033 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AF77777A09B6497800EA3033 /* XScreenSaverSubclass.m in Sources */, AF77778C09B64A2A00EA3033 /* gleidescope.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF77779309B64A5200EA3033 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AF77779409B64A5200EA3033 /* XScreenSaverSubclass.m in Sources */, AF7777A609B64AFC00EA3033 /* mirrorblob.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF7777AD09B64B2600EA3033 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AF7777AE09B64B2600EA3033 /* XScreenSaverSubclass.m in Sources */, AF7777C609B64BD400EA3033 /* stonerview-move.c in Sources */, AF7777C709B64BD400EA3033 /* stonerview-osc.c in Sources */, AF7777C809B64BD400EA3033 /* stonerview-view.c in Sources */, AF7777C909B64BD400EA3033 /* stonerview.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF7777D509B64C6B00EA3033 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AF7777D609B64C6B00EA3033 /* XScreenSaverSubclass.m in Sources */, AF7777E809B64CF700EA3033 /* glslideshow.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF7777EF09B64E3100EA3033 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AF7777F009B64E3100EA3033 /* XScreenSaverSubclass.m in Sources */, AF77780209B64EC000EA3033 /* fliptext.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF77781509B6504400EA3033 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AF77781609B6504400EA3033 /* XScreenSaverSubclass.m in Sources */, AF77782A09B650FF00EA3033 /* starwars.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF77784A09B6528100EA3033 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AF77784B09B6528100EA3033 /* XScreenSaverSubclass.m in Sources */, AF77787C09B654F800EA3033 /* carousel.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF77786609B6536000EA3033 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AF77786709B6536000EA3033 /* XScreenSaverSubclass.m in Sources */, AF77787709B653DC00EA3033 /* dnalogo.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF77788409B6563500EA3033 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AF77788509B6563500EA3033 /* XScreenSaverSubclass.m in Sources */, AF77789309B656C300EA3033 /* fontglide.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF7778AA09B659C800EA3033 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AF7778AB09B659C800EA3033 /* XScreenSaverSubclass.m in Sources */, AF7778BB09B65A8A00EA3033 /* blitspin.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF78D17A142DD8F3002AAF77 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AF78D17B142DD8F3002AAF77 /* XScreenSaverSubclass.m in Sources */, AF78D18D142DD96E002AAF77 /* hilbert.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF794F69099748450059A8B0 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AF794F6A099748450059A8B0 /* XScreenSaverSubclass.m in Sources */, AF794F7F099748860059A8B0 /* demon.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF794F9309974A320059A8B0 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AF794F9409974A320059A8B0 /* XScreenSaverSubclass.m in Sources */, AF794FAA09974AE30059A8B0 /* fiberlamp.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF794FD209974FA60059A8B0 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AF794FD309974FA60059A8B0 /* XScreenSaverSubclass.m in Sources */, AF794FE109974FEC0059A8B0 /* loop.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF7ACFC519FF0A9200BD752B /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AF7ACFC719FF0A9200BD752B /* XScreenSaverSubclass.m in Sources */, AF7ACFD719FF0B7A00BD752B /* geodesicgears.c in Sources */, AFDDCCEC19FF0D170072365B /* involute.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF918985158FC00A002B5D1E /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AFAA6B451773F07800DE720C /* ios-function-table.m in Sources */, AF918987158FC00A002B5D1E /* main.m in Sources */, AF918986158FC00A002B5D1E /* SaverRunner.m in Sources */, AF918988158FC00A002B5D1E /* SaverListController.m in Sources */, AF918993158FC2BE002B5D1E /* abstractile.c in Sources */, AF918994158FC2BE002B5D1E /* anemone.c in Sources */, AF918995158FC2E0002B5D1E /* analogtv.c in Sources */, AF918996158FC310002B5D1E /* anemotaxis.c in Sources */, AF9189FF158FC38A002B5D1E /* apollonian.c in Sources */, AF918997158FC310002B5D1E /* apple2-main.c in Sources */, AF918998158FC310002B5D1E /* apple2.c in Sources */, AF918999158FC310002B5D1E /* asm6502.c in Sources */, AF91899A158FC310002B5D1E /* attraction.c in Sources */, AF91899B158FC310002B5D1E /* barcode.c in Sources */, AF73FF3A1A09889700E485E9 /* binaryring.c in Sources */, AF91899C158FC310002B5D1E /* blaster.c in Sources */, AF91899D158FC310002B5D1E /* blitspin.c in Sources */, AF918A00158FC38A002B5D1E /* bouboule.c in Sources */, AF91899E158FC310002B5D1E /* boxfit.c in Sources */, AF918A01158FC38A002B5D1E /* braid.c in Sources */, AF91899F158FC310002B5D1E /* bsod.c in Sources */, AF9189A0158FC310002B5D1E /* bubbles-default.c in Sources */, AF9189A2158FC310002B5D1E /* bumps.c in Sources */, AF9189A3158FC310002B5D1E /* ccurve.c in Sources */, AF9189A4158FC310002B5D1E /* celtic.c in Sources */, AF9189A5158FC310002B5D1E /* cloudlife.c in Sources */, AF9189AA158FC311002B5D1E /* compass.c in Sources */, AF9189AB158FC311002B5D1E /* coral.c in Sources */, AF918A02158FC38A002B5D1E /* crystal.c in Sources */, AF9189AD158FC311002B5D1E /* cwaves.c in Sources */, AF9189AE158FC311002B5D1E /* cynosure.c in Sources */, AF9189AF158FC311002B5D1E /* decayscreen.c in Sources */, AF9189B0158FC311002B5D1E /* deco.c in Sources */, AF68A49C19196E3E00D41CD1 /* delaunay.c in Sources */, AF9189B1158FC311002B5D1E /* deluxe.c in Sources */, AF918A03158FC38A002B5D1E /* demon.c in Sources */, AF918A04158FC38A002B5D1E /* discrete.c in Sources */, AF9189B2158FC311002B5D1E /* distort.c in Sources */, AF918A05158FC38A002B5D1E /* drift.c in Sources */, AF9189B3158FC311002B5D1E /* epicycle.c in Sources */, AF9189B4158FC311002B5D1E /* eruption.c in Sources */, AF918A06158FC38A002B5D1E /* euler2d.c in Sources */, AF918A07158FC38A002B5D1E /* fadeplot.c in Sources */, AF918A08158FC38A002B5D1E /* fiberlamp.c in Sources */, AF9189B5158FC311002B5D1E /* fireworkx.c in Sources */, AF9189B6158FC334002B5D1E /* flame.c in Sources */, AF918A0A158FC38A002B5D1E /* flow.c in Sources */, AF9189B7158FC334002B5D1E /* fluidballs.c in Sources */, AF9189B8158FC334002B5D1E /* fontglide.c in Sources */, AF9189B9158FC334002B5D1E /* fps.c in Sources */, AF9189BA158FC334002B5D1E /* fuzzyflakes.c in Sources */, AF918A0C158FC38A002B5D1E /* galaxy.c in Sources */, AF9189BB158FC334002B5D1E /* goop.c in Sources */, AF918A0D158FC38A002B5D1E /* grav.c in Sources */, AF9189BC158FC334002B5D1E /* greynetic.c in Sources */, AF9189BD158FC334002B5D1E /* halftone.c in Sources */, AF9189BE158FC334002B5D1E /* halo.c in Sources */, AF9189BF158FC334002B5D1E /* helix.c in Sources */, AFB591C1178B81E600EA4005 /* hexadrop.c in Sources */, AF918A0E158FC38A002B5D1E /* hopalong.c in Sources */, AF9189C2158FC334002B5D1E /* ifs.c in Sources */, AF9189C3158FC334002B5D1E /* imsmap.c in Sources */, AF9189C4158FC334002B5D1E /* interaggregate.c in Sources */, AF9189C5158FC334002B5D1E /* interference.c in Sources */, AF9189C6158FC334002B5D1E /* intermomentary.c in Sources */, AF918A11158FC38A002B5D1E /* julia.c in Sources */, AF9189C7158FC334002B5D1E /* kaleidescope.c in Sources */, AF9189C8158FC334002B5D1E /* kumppa.c in Sources */, AF918A16158FC38A002B5D1E /* loop.c in Sources */, AF9189CB158FC334002B5D1E /* m6502.c in Sources */, AF9189CC158FC334002B5D1E /* maze.c in Sources */, AF9189CD158FC334002B5D1E /* memscroller.c in Sources */, AF9189CE158FC334002B5D1E /* metaballs.c in Sources */, AF9189CF158FC334002B5D1E /* moire.c in Sources */, AF9189D0158FC334002B5D1E /* moire2.c in Sources */, AF918A17158FC38A002B5D1E /* mountain.c in Sources */, AF9189D1158FC334002B5D1E /* munch.c in Sources */, AF9189D2158FC334002B5D1E /* nerverot.c in Sources */, AF9189D3158FC334002B5D1E /* noseguy.c in Sources */, AF918A18158FC38A002B5D1E /* pacman.c in Sources */, AF918A19158FC38A002B5D1E /* pacman_ai.c in Sources */, AF918A1A158FC38A002B5D1E /* pacman_level.c in Sources */, AF9189D4158FC334002B5D1E /* pedal.c in Sources */, AF9189D5158FC334002B5D1E /* penetrate.c in Sources */, AF9189D6158FC334002B5D1E /* petri.c in Sources */, AF9189D7158FC334002B5D1E /* phosphor.c in Sources */, AF9189D8158FC334002B5D1E /* piecewise.c in Sources */, AF9189D9158FC334002B5D1E /* pong.c in Sources */, AF9189DA158FC334002B5D1E /* popsquares.c in Sources */, AF9189DB158FC334002B5D1E /* pyro.c in Sources */, AF9189DC158FC334002B5D1E /* qix.c in Sources */, AF918A1B158FC38A002B5D1E /* penrose.c in Sources */, AF918A1C158FC38A002B5D1E /* polyominoes.c in Sources */, AF9189DD158FC334002B5D1E /* rd-bomb.c in Sources */, AF9189DE158FC334002B5D1E /* ripples.c in Sources */, AF9189DF158FC35D002B5D1E /* rocks.c in Sources */, AF9189E0158FC35D002B5D1E /* rorschach.c in Sources */, AF9189E1158FC35D002B5D1E /* rotzoomer.c in Sources */, AF9189E2158FC35D002B5D1E /* shadebobs.c in Sources */, AF9189E3158FC35D002B5D1E /* slidescreen.c in Sources */, AF9189E4158FC35D002B5D1E /* speedmine.c in Sources */, AF9189E5158FC35D002B5D1E /* spotlight.c in Sources */, AF9189E6158FC35D002B5D1E /* squiral.c in Sources */, AF9189E7158FC35D002B5D1E /* starfish.c in Sources */, AF9189E8158FC35D002B5D1E /* substrate.c in Sources */, AF918A1E158FC38A002B5D1E /* sierpinski.c in Sources */, AF918A1F158FC38A002B5D1E /* slip.c in Sources */, AF918A22158FC38A002B5D1E /* strange.c in Sources */, AF918A23158FC38A002B5D1E /* swirl.c in Sources */, AFA211891CD1AA2E00C0D2A1 /* textclient-mobile.c in Sources */, AF68A49A19196E3E00D41CD1 /* tessellimage.c in Sources */, AF918A25158FC38A002B5D1E /* triangle.c in Sources */, AF918A24158FC38A002B5D1E /* thornbird.c in Sources */, AF9189EF158FC35D002B5D1E /* truchet.c in Sources */, AF9189F0158FC35D002B5D1E /* twang.c in Sources */, AF9189F1158FC35D002B5D1E /* vermiculate.c in Sources */, AF9189F2158FC35D002B5D1E /* wander.c in Sources */, AF9189F3158FC35E002B5D1E /* whirlwindwarp.c in Sources */, AF9189F5158FC35E002B5D1E /* wormhole.c in Sources */, AF9189F6158FC35E002B5D1E /* xanalogtv.c in Sources */, AF9189F7158FC35E002B5D1E /* xflame.c in Sources */, AF9189F8158FC35E002B5D1E /* xjack.c in Sources */, AF9189F9158FC35E002B5D1E /* xlyap.c in Sources */, AF9189FA158FC35E002B5D1E /* xmatrix.c in Sources */, AF9189FB158FC35E002B5D1E /* xrayswarm.c in Sources */, AF9189FC158FC35E002B5D1E /* xspirograph.c in Sources */, AF9189FD158FC35E002B5D1E /* zoom.c in Sources */, AF918A28158FC3BB002B5D1E /* antinspect.c in Sources */, AF918A29158FC3BB002B5D1E /* antmaze.c in Sources */, AF918A2A158FC3BB002B5D1E /* antspotlight.c in Sources */, AF918A2B158FC3BB002B5D1E /* atlantis.c in Sources */, AF918A2C158FC3BB002B5D1E /* atunnel.c in Sources */, AF918A2D158FC3BB002B5D1E /* b_draw.c in Sources */, AF918A2E158FC3BB002B5D1E /* b_lockglue.c in Sources */, AF918A2F158FC3BB002B5D1E /* b_sphere.c in Sources */, AF918A30158FC3BB002B5D1E /* blinkbox.c in Sources */, AF918A31158FC3BB002B5D1E /* blocktube.c in Sources */, AF918A32158FC3BB002B5D1E /* boing.c in Sources */, AF918A33158FC3BB002B5D1E /* bouncingcow.c in Sources */, AF918A34158FC3BB002B5D1E /* boxed.c in Sources */, AF918A35158FC3BB002B5D1E /* bubble3d.c in Sources */, AF918A36158FC3BB002B5D1E /* buildlwo.c in Sources */, AF918A37158FC3BB002B5D1E /* cage.c in Sources */, AF3938351D0FBF1D00205406 /* discoball.c in Sources */, AF918A38158FC3BB002B5D1E /* carousel.c in Sources */, AF918A39158FC3BB002B5D1E /* chessmodels.c in Sources */, AF918A3A158FC3BB002B5D1E /* circuit.c in Sources */, AF5C9B141A0CCF4E00B0147A /* cityflow.c in Sources */, AF9189A6158FC310002B5D1E /* companion.c in Sources */, AF9189A7158FC311002B5D1E /* companion_disc.c in Sources */, AF9189A8158FC311002B5D1E /* companion_heart.c in Sources */, AF9189A9158FC311002B5D1E /* companion_quad.c in Sources */, AF918A3B158FC3BB002B5D1E /* cow_face.c in Sources */, AF918A3C158FC3BB002B5D1E /* cow_hide.c in Sources */, AF918A3D158FC3BB002B5D1E /* cow_hoofs.c in Sources */, AF918A3E158FC3BB002B5D1E /* cow_horns.c in Sources */, AF918A3F158FC3BB002B5D1E /* cow_tail.c in Sources */, AF918A40158FC3BB002B5D1E /* cow_udder.c in Sources */, AF918A41158FC3BB002B5D1E /* crackberg.c in Sources */, AF918A42158FC3BB002B5D1E /* cube21.c in Sources */, AF918A43158FC3BB002B5D1E /* cubenetic.c in Sources */, AFEE10851D15EBB900AAC8F7 /* cubestack.c in Sources */, AF918A44158FC3BB002B5D1E /* cubestorm.c in Sources */, AFEE10671D1341FA00AAC8F7 /* cubetwist.c in Sources */, AF918A45158FC3BB002B5D1E /* cubicgrid.c in Sources */, AF918A46158FC3BB002B5D1E /* dangerball.c in Sources */, AFCF453715986A2100E6E8CC /* dnalogo.c in Sources */, AF918A48158FC3BB002B5D1E /* dolphin.c in Sources */, AFEC23E91CB6EC7F00DE138F /* dymaxionmap.c in Sources */, AF918A49158FC3BB002B5D1E /* dropshadow.c in Sources */, AF918A4A158FC3E5002B5D1E /* endgame.c in Sources */, AFACE88F1CC83617008B24CD /* energystream.c in Sources */, AF918A4B158FC3E5002B5D1E /* engine.c in Sources */, AF918A54158FC3E5002B5D1E /* flipflop.c in Sources */, AF918A55158FC3E5002B5D1E /* flipscreen3d.c in Sources */, AF918A56158FC3E5002B5D1E /* fliptext.c in Sources */, AF918A57158FC3E5002B5D1E /* flyingtoasters.c in Sources */, AF918A59158FC3E5002B5D1E /* fps-gl.c in Sources */, AF918A5A158FC3E5002B5D1E /* gears.c in Sources */, AFDDCCED19FF0EBD0072365B /* geodesicgears.c in Sources */, AF918A5B158FC3E5002B5D1E /* gflux.c in Sources */, AF918A5C158FC3E5002B5D1E /* glblur.c in Sources */, AF918A5D158FC3E5002B5D1E /* glcells.c in Sources */, AF918A5E158FC3E5002B5D1E /* gleidescope.c in Sources */, AF918A60158FC3E5002B5D1E /* glhanoi.c in Sources */, AF918A61158FC3E5002B5D1E /* glknots.c in Sources */, AF918A62158FC3E5002B5D1E /* glmatrix.c in Sources */, AF918A63158FC3E5002B5D1E /* glplanet.c in Sources */, AF918A64158FC3E5002B5D1E /* glschool.c in Sources */, AF918A65158FC3E5002B5D1E /* glschool_alg.c in Sources */, AF918A66158FC3E5002B5D1E /* glschool_gl.c in Sources */, AF918A67158FC3E5002B5D1E /* glslideshow.c in Sources */, AF918A68158FC3E5002B5D1E /* glsnake.c in Sources */, AF918A69158FC3E5002B5D1E /* gltext.c in Sources */, AF1B0FC31D7AB5500011DBE4 /* hexstrut.c in Sources */, AF918A6A158FC3E5002B5D1E /* hilbert.c in Sources */, AFC0E8C41CDC60B0008CAFAC /* hydrostat.c in Sources */, AF918A6B158FC3E5002B5D1E /* hypertorus.c in Sources */, 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 */, AFB8A69D1782BFA6004EDB85 /* kaleidocycle.c in Sources */, AF918A70158FC417002B5D1E /* klein.c in Sources */, AF918A71158FC417002B5D1E /* lament.c in Sources */, AFF1BA1019A96D8B0016A88D /* lament_model.c in Sources */, AF918A72158FC417002B5D1E /* lavalite.c in Sources */, AF918A74158FC417002B5D1E /* marching.c in Sources */, AF918A75158FC417002B5D1E /* menger.c in Sources */, AF918A76158FC417002B5D1E /* mirrorblob.c in Sources */, AF918A77158FC417002B5D1E /* moebius.c in Sources */, AFF3CA0417CCAEB70028F240 /* geodesic.c in Sources */, AF918A78158FC417002B5D1E /* moebiusgears.c in Sources */, AF918A79158FC417002B5D1E /* molecule.c in Sources */, AF918A7A158FC417002B5D1E /* morph3d.c in Sources */, AF918A7B158FC417002B5D1E /* noof.c in Sources */, AFFAB33319158EA80020F021 /* projectiveplane.c in Sources */, AF918A7C158FC417002B5D1E /* photopile.c in Sources */, 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 */, AFF28699178611720050A578 /* quasicrystal.c in Sources */, AF918A85158FC417002B5D1E /* queens.c in Sources */, AFA211A81CD5A04300C0D2A1 /* raverhoop.c in Sources */, AFBE744119A7C6EF0018AA35 /* robot.c in Sources */, AF39E2B7198A15EE0064A58D /* robot-wireframe.c in Sources */, AF63A80D1AB4EF5D00593C75 /* romanboy.c in Sources */, AF918A86158FC417002B5D1E /* rubik.c in Sources */, AF918A87158FC417002B5D1E /* rubikblocks.c in Sources */, AF918A88158FC417002B5D1E /* s1_1.c in Sources */, AF918A89158FC417002B5D1E /* s1_2.c in Sources */, AF918A8A158FC417002B5D1E /* s1_3.c in Sources */, AF918A8B158FC417002B5D1E /* s1_4.c in Sources */, AF918A8C158FC417002B5D1E /* s1_5.c in Sources */, AF918A8D158FC417002B5D1E /* s1_6.c in Sources */, AF918A8E158FC417002B5D1E /* s1_b.c in Sources */, AF918A8F158FC417002B5D1E /* sballs.c in Sources */, AF918A90158FC417002B5D1E /* shark.c in Sources */, AF918A91158FC417002B5D1E /* sierpinski3d.c in Sources */, AF918A92158FC417002B5D1E /* skytentacles.c in Sources */, AF918A93158FC417002B5D1E /* sonar-icmp.c in Sources */, AF918A94158FC417002B5D1E /* sonar-sim.c in Sources */, AF918A95158FC417002B5D1E /* sonar.c in Sources */, AF918A96158FC417002B5D1E /* spheremonics.c in Sources */, AFCF835A1AF5B5FD008BB7E1 /* splitflap.c in Sources */, AFCF83581AF5B5FD008BB7E1 /* splitflap_obj.c in Sources */, AFEE10A41D17E2BA00AAC8F7 /* splodesic.c in Sources */, AF918A97158FC473002B5D1E /* sproingies.c in Sources */, AF918A98158FC473002B5D1E /* sproingiewrap.c in Sources */, AF918A99158FC473002B5D1E /* stairs.c in Sources */, AF918A9A158FC473002B5D1E /* starwars.c in Sources */, AF918A9B158FC473002B5D1E /* stonerview-move.c in Sources */, AF918A9C158FC473002B5D1E /* stonerview-osc.c in Sources */, AF918A9D158FC473002B5D1E /* stonerview-view.c in Sources */, AF918A9E158FC473002B5D1E /* stonerview.c in Sources */, AF918A9F158FC473002B5D1E /* superquadrics.c in Sources */, AF918AA0158FC473002B5D1E /* surfaces.c in Sources */, AF918AA1158FC473002B5D1E /* swim.c in Sources */, AF918AA2158FC473002B5D1E /* tangram.c in Sources */, AF918AA3158FC473002B5D1E /* tangram_shapes.c in Sources */, AF918AA4158FC473002B5D1E /* teapot.c in Sources */, AF918AA5158FC473002B5D1E /* timetunnel.c in Sources */, AF918AA6158FC473002B5D1E /* toast.c in Sources */, AF918AA7158FC473002B5D1E /* toast2.c in Sources */, AF918AA8158FC473002B5D1E /* toaster.c in Sources */, AF918AA9158FC473002B5D1E /* toaster_base.c in Sources */, AF918AAA158FC473002B5D1E /* toaster_handle.c in Sources */, AF918AAB158FC473002B5D1E /* toaster_handle2.c in Sources */, AF918AAC158FC473002B5D1E /* toaster_jet.c in Sources */, AF918AAD158FC473002B5D1E /* toaster_knob.c in Sources */, AF918AAE158FC473002B5D1E /* toaster_slots.c in Sources */, AF918AAF158FC473002B5D1E /* toaster_wing.c in Sources */, AF918AB0158FC473002B5D1E /* topblock.c in Sources */, AF9189EA158FC35D002B5D1E /* tronbit.c in Sources */, AF9189EB158FC35D002B5D1E /* tronbit_idle1.c in Sources */, AF9189EC158FC35D002B5D1E /* tronbit_idle2.c in Sources */, AF9189ED158FC35D002B5D1E /* tronbit_no.c in Sources */, AF9189EE158FC35D002B5D1E /* tronbit_yes.c in Sources */, AF918AB1158FC47B002B5D1E /* tunnel_draw.c in Sources */, AF46E9EB1CBBA43B00240FBC /* unicrud.c in Sources */, AFDA65A8178A541A0070D24B /* unknownpleasures.c in Sources */, AF918AB2158FC47B002B5D1E /* voronoi.c in Sources */, AF918AB3158FC47B002B5D1E /* whale.c in Sources */, AF39E2B8198A15EE0064A58D /* winduprobot.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF975732099C317000B05160 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AF975734099C317000B05160 /* XScreenSaverSubclass.m in Sources */, AF975741099C31DD00B05160 /* imsmap.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF97577A099C374A00B05160 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AF97577B099C374A00B05160 /* XScreenSaverSubclass.m in Sources */, AF97578A099C37A500B05160 /* moire.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF9757C7099C3E6300B05160 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AF9757C8099C3E6300B05160 /* XScreenSaverSubclass.m in Sources */, AF9757D6099C3EB800B05160 /* rd-bomb.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF97580D099C41D500B05160 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AF97580E099C41D500B05160 /* XScreenSaverSubclass.m in Sources */, AF975830099C427500B05160 /* xflame.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF97586A099C475900B05160 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AF97586B099C475900B05160 /* XScreenSaverSubclass.m in Sources */, AF97587B099C492000B05160 /* shadebobs.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF975A3B099C681F00B05160 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AF975A3C099C681F00B05160 /* XScreenSaverSubclass.m in Sources */, AF975A4A099C689F00B05160 /* metaballs.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF975A71099C6AB200B05160 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AF975A72099C6AB200B05160 /* XScreenSaverSubclass.m in Sources */, AF975A84099C6B4900B05160 /* eruption.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF975A8B099C6BC300B05160 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AF975A8C099C6BC300B05160 /* XScreenSaverSubclass.m in Sources */, AF975A9A099C6C3600B05160 /* barcode.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF975ADC099C6EB100B05160 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AF975ADD099C6EB100B05160 /* XScreenSaverSubclass.m in Sources */, AF975AEF099C6F1700B05160 /* fireworkx.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF975B01099C6FE400B05160 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AF975B02099C6FE400B05160 /* XScreenSaverSubclass.m in Sources */, AF975B15099C709E00B05160 /* memscroller.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF975C17099C8C1500B05160 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AF975C18099C8C1500B05160 /* XScreenSaverSubclass.m in Sources */, AF975C29099C8C7600B05160 /* halo.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF975C43099C8DCF00B05160 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AF975C44099C8DCF00B05160 /* XScreenSaverSubclass.m in Sources */, AF975C56099C8E3000B05160 /* greynetic.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF975C63099C8F3F00B05160 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AF975C64099C8F3F00B05160 /* XScreenSaverSubclass.m in Sources */, AF975C77099C8FC700B05160 /* noseguy.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF975D58099CA0F000B05160 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AF975D59099CA0F000B05160 /* XScreenSaverSubclass.m in Sources */, AF975D67099CA16A00B05160 /* rocks.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF976FB90989CAA2001F8B92 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AF976FCC0989CAD7001F8B92 /* deco.c in Sources */, AF9CCAB809959D0D0075E99B /* XScreenSaverSubclass.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF97702C0989D1E6001F8B92 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AF9770420989D21A001F8B92 /* rorschach.c in Sources */, AF9CCABC09959D200075E99B /* XScreenSaverSubclass.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF9770690989D2F6001F8B92 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AF97707F0989D327001F8B92 /* attraction.c in Sources */, AF9CC8EE09958D920075E99B /* XScreenSaverSubclass.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF9771D40989DC4A001F8B92 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AF9771DF0989DC88001F8B92 /* SaverRunner.m in Sources */, AF9772C80989DCD5001F8B92 /* main.m in Sources */, AF84AF2015829AF000607E4C /* SaverListController.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF998EDF0A083DB30051049D /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AF998EE10A083DB30051049D /* XScreenSaverSubclass.m in Sources */, AF998EF90A083E750051049D /* topblock.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF9D466B09B5109C006E59CF /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AF9D466D09B5109C006E59CF /* XScreenSaverSubclass.m in Sources */, AF9D467909B5110B006E59CF /* decayscreen.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF9D474909B5300A006E59CF /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AF9D474A09B5300A006E59CF /* XScreenSaverSubclass.m in Sources */, AF9D475909B53091006E59CF /* slidescreen.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF9D476409B53166006E59CF /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AF9D476509B53166006E59CF /* XScreenSaverSubclass.m in Sources */, AF9D48D509B53229006E59CF /* zoom.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF9D48E009B53322006E59CF /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AF9D48E109B53322006E59CF /* XScreenSaverSubclass.m in Sources */, AF9D48F009B533AE006E59CF /* bumps.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF9D48F909B535DA006E59CF /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AF9D48FA09B535DA006E59CF /* XScreenSaverSubclass.m in Sources */, AF9D490809B536F7006E59CF /* distort.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF9D493009B53CBA006E59CF /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AF9D493109B53CBA006E59CF /* XScreenSaverSubclass.m in Sources */, AF9D493F09B53D55006E59CF /* ripples.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF9D495909B53FC9006E59CF /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AF9D495A09B53FC9006E59CF /* XScreenSaverSubclass.m in Sources */, AF9D496809B540A4006E59CF /* rotzoomer.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF9D497109B5411D006E59CF /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AF9D497209B5411D006E59CF /* XScreenSaverSubclass.m in Sources */, AF9D498009B541E6006E59CF /* twang.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF9D499C09B544C2006E59CF /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AF9D499D09B544C2006E59CF /* XScreenSaverSubclass.m in Sources */, AF9D49AB09B54596006E59CF /* spotlight.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF9D4C6E09B59F27006E59CF /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AF9D4C6F09B59F27006E59CF /* XScreenSaverSubclass.m in Sources */, AF9D4C7D09B5A044006E59CF /* xlyap.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF9D4CEC09B5AA8E006E59CF /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AF9D4CED09B5AA8E006E59CF /* XScreenSaverSubclass.m in Sources */, AF9D4CFD09B5AC94006E59CF /* analogtv.c in Sources */, AF9D4CFE09B5AC94006E59CF /* pong.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF9D4D8309B5B2DC006E59CF /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AF9D4D8409B5B2DC006E59CF /* XScreenSaverSubclass.m in Sources */, AF9D4D8509B5B2DC006E59CF /* analogtv.c in Sources */, AF9D4D9309B5B444006E59CF /* xanalogtv.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF9D4DB409B5B71E006E59CF /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AF9D4DB509B5B71E006E59CF /* XScreenSaverSubclass.m in Sources */, AF9D4DB609B5B71E006E59CF /* analogtv.c in Sources */, AF9D4DC409B5B87D006E59CF /* bsod.c in Sources */, AF9D4DD409B5B990006E59CF /* apple2.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF9D4DF109B5BB19006E59CF /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AF9D4DF209B5BB19006E59CF /* XScreenSaverSubclass.m in Sources */, AF9D4DF309B5BB19006E59CF /* analogtv.c in Sources */, AF9D4DF509B5BB19006E59CF /* apple2.c in Sources */, AF9D4E0609B5BC9D006E59CF /* apple2-main.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF9E7EBB190F4C1B00A8B01F /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AF9E7EC9190F4C4000A8B01F /* enable_gc.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFA211911CD59DAF00C0D2A1 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AFA211A71CD5A03F00C0D2A1 /* raverhoop.c in Sources */, AFA211931CD59DAF00C0D2A1 /* XScreenSaverSubclass.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFA339340B058505002B0E7D /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AFA339350B058505002B0E7D /* XScreenSaverSubclass.m in Sources */, AFA33BAF0B0585F7002B0E7D /* webcollage-cocoa.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFA33BC40B058740002B0E7D /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AFA33BD10B0587EE002B0E7D /* webcollage-helper-cocoa.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFA5594B099330B000F3E977 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AFA5595E0993310500F3E977 /* cage.c in Sources */, AF9CCAB709959D000075E99B /* XScreenSaverSubclass.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFA559720993317900F3E977 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AFA55983099331C300F3E977 /* moebius.c in Sources */, AF9CCABF09959D2E0075E99B /* XScreenSaverSubclass.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFA559970993322100F3E977 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AFA559A90993326300F3E977 /* superquadrics.c in Sources */, AF9CCAC109959D380075E99B /* XScreenSaverSubclass.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFA559BA0993328000F3E977 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AFA559CD099332E800F3E977 /* morph3d.c in Sources */, AF9CCAC009959D310075E99B /* XScreenSaverSubclass.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFA559D40993330600F3E977 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AFA559EB0993335C00F3E977 /* rubik.c in Sources */, AF9CCABE09959D290075E99B /* XScreenSaverSubclass.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFA55A080993340300F3E977 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AFA55A1B0993345900F3E977 /* stairs.c in Sources */, AF9CCAC209959D3C0075E99B /* XScreenSaverSubclass.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFA55A25099334A000F3E977 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AFA55A4A0993351F00F3E977 /* s1_1.c in Sources */, AFA55A4B0993351F00F3E977 /* s1_2.c in Sources */, AFA55A4C0993351F00F3E977 /* s1_3.c in Sources */, AFA55A4D0993351F00F3E977 /* s1_4.c in Sources */, AFA55A4E0993351F00F3E977 /* s1_5.c in Sources */, AFA55A4F0993351F00F3E977 /* s1_6.c in Sources */, AFA55A500993351F00F3E977 /* s1_b.c in Sources */, AFA55A510993351F00F3E977 /* sproingies.c in Sources */, AFA55A520993351F00F3E977 /* sproingiewrap.c in Sources */, AF9CCAC309959D420075E99B /* XScreenSaverSubclass.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFA55A7E0993364300F3E977 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AFA55A8F0993369100F3E977 /* lament.c in Sources */, AFF1BA0F19A96D8B0016A88D /* lament_model.c in Sources */, AF9CCAC409959D450075E99B /* XScreenSaverSubclass.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFA55AD409933CEF00F3E977 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AFA55AE509933D3800F3E977 /* bubble3d.c in Sources */, AFA55AF709933DBF00F3E977 /* b_draw.c in Sources */, AFA55AF809933DBF00F3E977 /* b_lockglue.c in Sources */, AFA55AF909933DBF00F3E977 /* b_sphere.c in Sources */, AF9CCAC509959D4B0075E99B /* XScreenSaverSubclass.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFA55B0E09933E0500F3E977 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AFA55B2209933E4A00F3E977 /* glplanet.c in Sources */, AF9CCAC609959D500075E99B /* XScreenSaverSubclass.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFA55B2A09933E8D00F3E977 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AFA55B4509933EF800F3E977 /* pulsar.c in Sources */, AF9CCAC709959D550075E99B /* XScreenSaverSubclass.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFA55B7E09933F7200F3E977 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AFA55B8F09933FBF00F3E977 /* sierpinski3d.c in Sources */, AF9CCAC809959D5A0075E99B /* XScreenSaverSubclass.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFA55B9609933FDA00F3E977 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AFA55BA70993401A00F3E977 /* gflux.c in Sources */, AF9CCAC909959D5D0075E99B /* XScreenSaverSubclass.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFA55BB0099340CE00F3E977 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AFA55BC10993416E00F3E977 /* circuit.c in Sources */, AF9CCACA09959D630075E99B /* XScreenSaverSubclass.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFA55BE90993429100F3E977 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AFA55BFA099342D500F3E977 /* menger.c in Sources */, AF9CCACB09959D680075E99B /* XScreenSaverSubclass.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFA55C130993431300F3E977 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AFA55C240993435300F3E977 /* engine.c in Sources */, AF9CCACC09959D6B0075E99B /* XScreenSaverSubclass.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFA55C7C099349A600F3E977 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AFA55C8D099349EE00F3E977 /* glsnake.c in Sources */, AF9CCACD09959D720075E99B /* XScreenSaverSubclass.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFA55CAE09934BB200F3E977 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AFA55CC009934C0900F3E977 /* boxed.c in Sources */, AF9CCACE09959D750075E99B /* XScreenSaverSubclass.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFA55CD109934CE400F3E977 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AFA55CE209934D2E00F3E977 /* glforestfire.c in Sources */, AF9CCACF09959D7C0075E99B /* XScreenSaverSubclass.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFA55D410993565300F3E977 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AFA55D520993569C00F3E977 /* sballs.c in Sources */, AF9CCAD009959D800075E99B /* XScreenSaverSubclass.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFA55D670993584B00F3E977 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AFA55D780993589300F3E977 /* cubenetic.c in Sources */, AF9CCAD109959D850075E99B /* XScreenSaverSubclass.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFA55D84099358C400F3E977 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AFA55D950993590F00F3E977 /* spheremonics.c in Sources */, AF9CCAD209959D8A0075E99B /* XScreenSaverSubclass.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFA55DCD09935D7000F3E977 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AFA55DDE09935DB600F3E977 /* lavalite.c in Sources */, AFA55DE309935DFB00F3E977 /* marching.c in Sources */, AF9CCAD309959D8F0075E99B /* XScreenSaverSubclass.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFA55DF509935E4900F3E977 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AFA55E0709935EB800F3E977 /* queens.c in Sources */, AF9CCAD409959D980075E99B /* XScreenSaverSubclass.m in Sources */, AF012918157C1E4C00C396E1 /* chessmodels.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFA55E1209935EDC00F3E977 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AFA55E2609935F2B00F3E977 /* chessmodels.c in Sources */, AFA55E2709935F2B00F3E977 /* endgame.c in Sources */, AF9CCAD509959D9C0075E99B /* XScreenSaverSubclass.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFA55E3409935F8E00F3E977 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AFA55E4609935FD300F3E977 /* glblur.c in Sources */, AF9CCAD609959DA30075E99B /* XScreenSaverSubclass.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFA55E5309935FF900F3E977 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AFA55EAD0993608800F3E977 /* flyingtoasters.c in Sources */, AFA55EAE0993608800F3E977 /* toast.c in Sources */, AFA55EB00993608800F3E977 /* toast2.c in Sources */, AFA55EB20993608800F3E977 /* toaster_base.c in Sources */, AFA55EB40993608800F3E977 /* toaster_handle.c in Sources */, AFA55EB60993608800F3E977 /* toaster_handle2.c in Sources */, AFA55EB80993608800F3E977 /* toaster_jet.c in Sources */, AFA55EBA0993608800F3E977 /* toaster_knob.c in Sources */, AFA55EBC0993608800F3E977 /* toaster_slots.c in Sources */, AFA55EBE0993608800F3E977 /* toaster_wing.c in Sources */, AFA55EC00993608800F3E977 /* toaster.c in Sources */, AF9CCAD709959DA70075E99B /* XScreenSaverSubclass.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFA55ECC099360E300F3E977 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AFA55EEE0993613E00F3E977 /* bouncingcow.c in Sources */, AFA55EEF0993613E00F3E977 /* cow_face.c in Sources */, AFA55EF00993613E00F3E977 /* cow_hide.c in Sources */, AFA55EF10993613E00F3E977 /* cow_hoofs.c in Sources */, AFA55EF20993613E00F3E977 /* cow_horns.c in Sources */, AFA55EF30993613E00F3E977 /* cow_tail.c in Sources */, AFA55EF40993613E00F3E977 /* cow_udder.c in Sources */, AF9CCAD809959DAE0075E99B /* XScreenSaverSubclass.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFA55F0B099361B700F3E977 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AFA55F220993620200F3E977 /* jigglypuff.c in Sources */, AF9CCAD909959DB20075E99B /* XScreenSaverSubclass.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFA55F2F0993622F00F3E977 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AFA55F400993626E00F3E977 /* klein.c in Sources */, AF9CCADA09959DB60075E99B /* XScreenSaverSubclass.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFA55F470993629000F3E977 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AFA55F5A099362DF00F3E977 /* hypertorus.c in Sources */, AF9CCADB09959DBB0075E99B /* XScreenSaverSubclass.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFA55F770993643600F3E977 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AFA55F880993648500F3E977 /* glmatrix.c in Sources */, AF9CCADC09959DC10075E99B /* XScreenSaverSubclass.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFA55FD809936BFA00F3E977 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AFA55FF409936C4500F3E977 /* cubestorm.c in Sources */, AF9CCADD09959DC60075E99B /* XScreenSaverSubclass.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFA55FFE09936C6D00F3E977 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AFA5600F09936CB300F3E977 /* glknots.c in Sources */, AF9CCADE09959DCB0075E99B /* XScreenSaverSubclass.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFA5601909936CC800F3E977 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AFA5602A09936D0700F3E977 /* blocktube.c in Sources */, AF9CCADF09959DCE0075E99B /* XScreenSaverSubclass.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFA5603709936D5100F3E977 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AFA5604809936DCC00F3E977 /* flipflop.c in Sources */, AF9CCAE009959DD50075E99B /* XScreenSaverSubclass.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFA5604F09936E2100F3E977 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AFA5608109936FFA00F3E977 /* antinspect.c in Sources */, AF9CCAE109959DDA0075E99B /* XScreenSaverSubclass.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFA5606709936F3800F3E977 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AFA5607B09936FDD00F3E977 /* antspotlight.c in Sources */, AF9CCAE209959DDF0075E99B /* XScreenSaverSubclass.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFA560B30993718D00F3E977 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AFA560C4099371D500F3E977 /* polytopes.c in Sources */, AF9CCAE309959DE20075E99B /* XScreenSaverSubclass.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFA561020993781600F3E977 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AFA561130993786800F3E977 /* molecule.c in Sources */, AF9CCAE409959DE60075E99B /* XScreenSaverSubclass.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFA5615D09937C0D00F3E977 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AFA5616E09937C9A00F3E977 /* blinkbox.c in Sources */, AF9CCAE509959DEB0075E99B /* XScreenSaverSubclass.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFA5618009937CF100F3E977 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AFA5619109937D3600F3E977 /* noof.c in Sources */, AF9CCAE609959DF00075E99B /* XScreenSaverSubclass.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFA561A209937D7E00F3E977 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AFA561B509937DCC00F3E977 /* polyhedra-gl.c in Sources */, AFA561B609937DCC00F3E977 /* polyhedra.c in Sources */, AF9CCAE709959DF50075E99B /* XScreenSaverSubclass.m in Sources */, AFC211950E4E30C800D87B6E /* teapot.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFA5620B0993849F00F3E977 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AFA5621D099384F600F3E977 /* providence.c in Sources */, AF9CCAE809959DF90075E99B /* XScreenSaverSubclass.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFA562240993852500F3E977 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AFA562350993856A00F3E977 /* pinion.c in Sources */, AF9CCAE909959E000075E99B /* XScreenSaverSubclass.m in Sources */, AFE6A16C0CDD78EA002805BF /* involute.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFA562C4099392C600F3E977 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AFA562D50993930C00F3E977 /* boing.c in Sources */, AF9CCAEA09959E050075E99B /* XScreenSaverSubclass.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFA562DF099393C900F3E977 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AFA562F00993941600F3E977 /* antmaze.c in Sources */, AF9CCAEB09959E090075E99B /* XScreenSaverSubclass.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFA562F70993943B00F3E977 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AFA5630A0993948F00F3E977 /* tangram_shapes.c in Sources */, AFA5630B0993948F00F3E977 /* tangram.c in Sources */, AF9CCAEC09959E0D0075E99B /* XScreenSaverSubclass.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFA563180993951000F3E977 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AFA5632A0993957100F3E977 /* crackberg.c in Sources */, AF9CCAED09959E140075E99B /* XScreenSaverSubclass.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFA56336099395ED00F3E977 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AFA563750993977D00F3E977 /* glhanoi.c in Sources */, AF9CCAEE09959E170075E99B /* XScreenSaverSubclass.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFA56356099396C000F3E977 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AFA563760993978D00F3E977 /* cube21.c in Sources */, AF9CCAEF09959E1E0075E99B /* XScreenSaverSubclass.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFA5637E099397B300F3E977 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AFA5638F0993980D00F3E977 /* timetunnel.c in Sources */, AF9CCAF009959E230075E99B /* XScreenSaverSubclass.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFA563A9099398BB00F3E977 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AFA563BA0993991300F3E977 /* juggler3d.c in Sources */, AF9CCAF109959E270075E99B /* XScreenSaverSubclass.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFACE8781CC83458008B24CD /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AFACE87A1CC83458008B24CD /* XScreenSaverSubclass.m in Sources */, AFACE88E1CC83613008B24CD /* energystream.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFB591AC178B812C00EA4005 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AFB591AE178B812C00EA4005 /* XScreenSaverSubclass.m in Sources */, AFB591C0178B81E600EA4005 /* hexadrop.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFBFE751178642DC00432B21 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AFBFE752178642DC00432B21 /* SaverRunner.m in Sources */, AFBFE753178642DC00432B21 /* main.m in Sources */, AFBFE754178642DC00432B21 /* SaverListController.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFBFE771178647FE00432B21 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AFBFE772178647FE00432B21 /* SaverRunner.m in Sources */, AFBFE773178647FE00432B21 /* main.m in Sources */, AFBFE774178647FE00432B21 /* SaverListController.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFC0E8B01CDC601A008CAFAC /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AFC0E8C51CDC60D6008CAFAC /* hydrostat.c in Sources */, AFC0E8B21CDC601A008CAFAC /* XScreenSaverSubclass.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFCF83401AF5B515008BB7E1 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AFCF83421AF5B515008BB7E1 /* XScreenSaverSubclass.m in Sources */, AFCF83571AF5B5FD008BB7E1 /* splitflap_obj.c in Sources */, AFCF83591AF5B5FD008BB7E1 /* splitflap.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFD51B210F063B4A00471C02 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AFD51B220F063B4A00471C02 /* XScreenSaverSubclass.m in Sources */, AFD51DB70F063BCE00471C02 /* photopile.c in Sources */, AF241F83107C38DF00046A84 /* dropshadow.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFD56DF60996A03800BA26F7 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AFD56DF80996A03800BA26F7 /* XScreenSaverSubclass.m in Sources */, AFD56E090996A07A00BA26F7 /* gltext.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFD56EB30996A72600BA26F7 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AFD56EB50996A72600BA26F7 /* XScreenSaverSubclass.m in Sources */, AF64232F099F45C3000F4CD4 /* braid.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFD56EDF0996A95700BA26F7 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AFD56EE00996A95700BA26F7 /* XScreenSaverSubclass.m in Sources */, AFD56EEE0996A99E00BA26F7 /* forest.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFD56F100996AAFA00BA26F7 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AFD56F110996AAFA00BA26F7 /* XScreenSaverSubclass.m in Sources */, AFD56F200996AB5A00BA26F7 /* vines.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFD56F280996AB8A00BA26F7 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AFD56F290996AB8A00BA26F7 /* XScreenSaverSubclass.m in Sources */, AFD56F370996ABD200BA26F7 /* galaxy.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFD56F540996AEEE00BA26F7 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AFD56F550996AEEE00BA26F7 /* XScreenSaverSubclass.m in Sources */, AFD56F630996AF2D00BA26F7 /* grav.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFD56F700996B01600BA26F7 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AFD56F710996B01600BA26F7 /* XScreenSaverSubclass.m in Sources */, AFD56F890996B06600BA26F7 /* hopalong.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFD56F910996B09400BA26F7 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AFD56F920996B09400BA26F7 /* XScreenSaverSubclass.m in Sources */, AFD56FA10996B0E500BA26F7 /* laser.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFD56FA80996B10F00BA26F7 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AFD56FA90996B10F00BA26F7 /* XScreenSaverSubclass.m in Sources */, AFD56FB70996B16300BA26F7 /* lightning.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFD56FBE0996B18F00BA26F7 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AFD56FBF0996B18F00BA26F7 /* XScreenSaverSubclass.m in Sources */, AFD56FCD0996B1D600BA26F7 /* lisa.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFD56FD40996B20900BA26F7 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AFD56FD50996B20900BA26F7 /* XScreenSaverSubclass.m in Sources */, AFD56FE30996B26200BA26F7 /* lissie.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFD56FFD0996B43800BA26F7 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AFD56FFE0996B43800BA26F7 /* XScreenSaverSubclass.m in Sources */, AFD5700D0996B49D00BA26F7 /* penrose.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFD570140996B4CC00BA26F7 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AFD570150996B4CC00BA26F7 /* XScreenSaverSubclass.m in Sources */, AFD570230996B52700BA26F7 /* sierpinski.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFD5702B0996B56D00BA26F7 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AFD5702C0996B56D00BA26F7 /* XScreenSaverSubclass.m in Sources */, AFD5703C0996B5E300BA26F7 /* sphere.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFD570480996B61600BA26F7 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AFD570490996B61600BA26F7 /* XScreenSaverSubclass.m in Sources */, AFD570570996B67600BA26F7 /* spiral.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFD5705E0996B6A300BA26F7 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AFD5705F0996B6A300BA26F7 /* XScreenSaverSubclass.m in Sources */, AFD5706D0996B70000BA26F7 /* fadeplot.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFD570740996B72700BA26F7 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AFD570750996B72700BA26F7 /* XScreenSaverSubclass.m in Sources */, AFD570830996B79300BA26F7 /* mountain.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFD5708A0996B80300BA26F7 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AFD5708B0996B80300BA26F7 /* XScreenSaverSubclass.m in Sources */, AFD570990996B86200BA26F7 /* triangle.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFD570A00996B88E00BA26F7 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AFD570A10996B88E00BA26F7 /* XScreenSaverSubclass.m in Sources */, AFD570AF0996B8EF00BA26F7 /* worm.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFD570B60996B93000BA26F7 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AFD570B70996B93000BA26F7 /* XScreenSaverSubclass.m in Sources */, AFD570C50996B98500BA26F7 /* rotor.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFD570CE0996B9F800BA26F7 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AFD570CF0996B9F800BA26F7 /* XScreenSaverSubclass.m in Sources */, AFD570DF0996BA5D00BA26F7 /* ant.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFD570EF0996BBBF00BA26F7 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AFD570F00996BBBF00BA26F7 /* XScreenSaverSubclass.m in Sources */, AFD571020996BC3800BA26F7 /* flow.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFD571180996BE9300BA26F7 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AFD571190996BE9300BA26F7 /* XScreenSaverSubclass.m in Sources */, AFD571290996BEF700BA26F7 /* discrete.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFD571310996BF2E00BA26F7 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AFD571320996BF2E00BA26F7 /* XScreenSaverSubclass.m in Sources */, AFD571400996BFBE00BA26F7 /* apollonian.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFD571480996C01700BA26F7 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AFD571490996C01700BA26F7 /* XScreenSaverSubclass.m in Sources */, AFD571570996C07F00BA26F7 /* euler2d.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFD5715E0996C0CE00BA26F7 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AFD5715F0996C0CE00BA26F7 /* XScreenSaverSubclass.m in Sources */, AFD5716C0996C16700BA26F7 /* thornbird.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFD571BA0996D9DC00BA26F7 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AFD571BB0996D9DC00BA26F7 /* XScreenSaverSubclass.m in Sources */, AFD571C90996DA4600BA26F7 /* juggle.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFD572270996E4A300BA26F7 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AFD572280996E4A300BA26F7 /* XScreenSaverSubclass.m in Sources */, AFD572360996E53E00BA26F7 /* swirl.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFD572720996EE8500BA26F7 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AFD572730996EE8500BA26F7 /* XScreenSaverSubclass.m in Sources */, AFD572810996EF2B00BA26F7 /* polyominoes.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFD572AA0996F99600BA26F7 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AFD572AB0996F99600BA26F7 /* XScreenSaverSubclass.m in Sources */, AFD572BA0996FB3D00BA26F7 /* bouboule.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFD572C70996FC0F00BA26F7 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AFD572C80996FC0F00BA26F7 /* XScreenSaverSubclass.m in Sources */, AFD572EE0997006E00BA26F7 /* crystal.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFD572FE099701C000BA26F7 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AFD572FF099701C000BA26F7 /* XScreenSaverSubclass.m in Sources */, AFD5730D099702C800BA26F7 /* julia.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFD573620997411200BA26F7 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AFD573630997411200BA26F7 /* XScreenSaverSubclass.m in Sources */, AFD57372099741A200BA26F7 /* strange.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFDA6593178A52B70070D24B /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AFDA6595178A52B70070D24B /* XScreenSaverSubclass.m in Sources */, AFDA65A7178A541A0070D24B /* unknownpleasures.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFE2A45B0E2E904600ADB298 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AFE2A45C0E2E904600ADB298 /* XScreenSaverSubclass.m in Sources */, AFE2A4730E2E90E300ADB298 /* skytentacles.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFE30BED0E52B14700CCF4A5 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AFE30BEE0E52B14700CCF4A5 /* XScreenSaverSubclass.m in Sources */, AFE30C020E52B1DC00CCF4A5 /* sonar-icmp.c in Sources */, AFE30C030E52B1DC00CCF4A5 /* sonar-sim.c in Sources */, AFE30C040E52B1DC00CCF4A5 /* sonar.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFE6A1870CDD7B2E002805BF /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AFE6A1890CDD7B2E002805BF /* XScreenSaverSubclass.m in Sources */, AFE6A18A0CDD7B2E002805BF /* involute.c in Sources */, AFE6A40C0CDD7BC3002805BF /* moebiusgears.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFE6A4210CDD7FAA002805BF /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AFE6A4220CDD7FAA002805BF /* XScreenSaverSubclass.m in Sources */, AFE6A4350CDD800F002805BF /* abstractile.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFEC23D21CB6EAE100DE138F /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AFEC23E61CB6EC0400DE138F /* dymaxionmap.c in Sources */, AFEC23D41CB6EAE100DE138F /* XScreenSaverSubclass.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFEE10521D13406000AAC8F7 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AFEE10661D1341F600AAC8F7 /* cubetwist.c in Sources */, AFEE10541D13406000AAC8F7 /* XScreenSaverSubclass.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFEE10711D15EB0800AAC8F7 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AFEE10731D15EB0800AAC8F7 /* XScreenSaverSubclass.m in Sources */, AFEE10861D15EBC800AAC8F7 /* cubestack.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFEE10901D17E20B00AAC8F7 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AFEE10A51D17E2C500AAC8F7 /* splodesic.c in Sources */, AFEE10921D17E20B00AAC8F7 /* XScreenSaverSubclass.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFF2868417860E830050A578 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AFF2868617860E830050A578 /* XScreenSaverSubclass.m in Sources */, AFF28698178611720050A578 /* quasicrystal.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFF3C9ED17CCAC440028F240 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AFF3C9EF17CCAC440028F240 /* XScreenSaverSubclass.m in Sources */, AFF3CA0317CCAEB70028F240 /* geodesic.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFF4633B0C4403E400EE6509 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AFF4633C0C4403E400EE6509 /* XScreenSaverSubclass.m in Sources */, AFF4634A0C44044F00EE6509 /* cwaves.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFF4635D0C440AEF00EE6509 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AFF4635F0C440AEF00EE6509 /* XScreenSaverSubclass.m in Sources */, AFF463720C440B9200EE6509 /* glcells.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFFAB31A19158CE40020F021 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AFFAB31C19158CE40020F021 /* XScreenSaverSubclass.m in Sources */, AFFAB33219158EA80020F021 /* projectiveplane.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; CE3D01561B76F4C100993C75 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( CE3D016B1B76F93700993C75 /* testx11.c in Sources */, CE3D01581B76F4C100993C75 /* XScreenSaverSubclass.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXSourcesBuildPhase section */ /* Begin PBXTargetDependency section */ AF08399009930B6B00277BE9 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AF08399109930B6B00277BE9 /* PBXContainerItemProxy */; }; AF083A33099311D700277BE9 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AF083A34099311D700277BE9 /* PBXContainerItemProxy */; }; AF0DC7AC0C4C73F600D76972 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AF0DC7AD0C4C73F600D76972 /* PBXContainerItemProxy */; }; AF0DCA310C4C744D00D76972 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF0DC7AB0C4C73F600D76972 /* m6502 */; targetProxy = AF0DCA300C4C744D00D76972 /* PBXContainerItemProxy */; }; AF0DCA430C4CBB0D00D76972 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AF0DCA440C4CBB0D00D76972 /* PBXContainerItemProxy */; }; AF0DCA5C0C4CBB4300D76972 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF0DCA420C4CBB0D00D76972 /* Voronoi */; targetProxy = AF0DCA5B0C4CBB4300D76972 /* PBXContainerItemProxy */; }; AF137D470F075CC8004DE3B2 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF137D410F075C9B004DE3B2 /* Obsolete */; targetProxy = AF137D460F075CC8004DE3B2 /* PBXContainerItemProxy */; }; AF137D490F075E5C004DE3B2 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AFD5709B0996B88E00BA26F7 /* Worm */; targetProxy = AF137D480F075E5C004DE3B2 /* PBXContainerItemProxy */; }; AF137D4B0F075E5C004DE3B2 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF477208099D4EE8001F091E /* Whirlygig */; targetProxy = AF137D4A0F075E5C004DE3B2 /* PBXContainerItemProxy */; }; AF137D4D0F075E5C004DE3B2 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AFD56F0B0996AAFA00BA26F7 /* Vines */; targetProxy = AF137D4C0F075E5C004DE3B2 /* PBXContainerItemProxy */; }; AF137D4F0F075E5C004DE3B2 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4771A7099D4949001F091E /* T3D */; targetProxy = AF137D4E0F075E5C004DE3B2 /* PBXContainerItemProxy */; }; AF137D510F075E5C004DE3B2 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AFD570430996B61600BA26F7 /* Spiral */; targetProxy = AF137D500F075E5C004DE3B2 /* PBXContainerItemProxy */; }; AF137D530F075E5C004DE3B2 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AFD570260996B56D00BA26F7 /* Sphere */; targetProxy = AF137D520F075E5C004DE3B2 /* PBXContainerItemProxy */; }; AF137D550F075E5C004DE3B2 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AFD570B10996B93000BA26F7 /* Rotor */; targetProxy = AF137D540F075E5C004DE3B2 /* PBXContainerItemProxy */; }; AF137D570F075E5C004DE3B2 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AFD56FCF0996B20900BA26F7 /* Lissie */; targetProxy = AF137D560F075E5C004DE3B2 /* PBXContainerItemProxy */; }; AF137D590F075E5C004DE3B2 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AFD56FB90996B18F00BA26F7 /* Lisa */; targetProxy = AF137D580F075E5C004DE3B2 /* PBXContainerItemProxy */; }; AF137D5B0F075E5C004DE3B2 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AFD56FA30996B10F00BA26F7 /* Lightning */; targetProxy = AF137D5A0F075E5C004DE3B2 /* PBXContainerItemProxy */; }; AF137D5D0F075E5C004DE3B2 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AFD56F8C0996B09400BA26F7 /* Laser */; targetProxy = AF137D5C0F075E5C004DE3B2 /* PBXContainerItemProxy */; }; AF137D610F075E5C004DE3B2 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AFA55CCC09934CE400F3E977 /* GLForestFire */; targetProxy = AF137D600F075E5C004DE3B2 /* PBXContainerItemProxy */; }; AF137D630F075E5C004DE3B2 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AFD56EDA0996A95700BA26F7 /* Forest */; targetProxy = AF137D620F075E5C004DE3B2 /* PBXContainerItemProxy */; }; AF137D650F075E5C004DE3B2 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF477909099DE379001F091E /* Flag */; targetProxy = AF137D640F075E5C004DE3B2 /* PBXContainerItemProxy */; }; AF137D670F075E5C004DE3B2 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF47765A099DA78E001F091E /* Critical */; targetProxy = AF137D660F075E5C004DE3B2 /* PBXContainerItemProxy */; }; AF137D690F075E5C004DE3B2 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF6427A809A2DE36000F4CD4 /* Bubbles */; targetProxy = AF137D680F075E5C004DE3B2 /* PBXContainerItemProxy */; }; AF1A17620D6D6EE3008AF328 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AF1A17630D6D6EE3008AF328 /* PBXContainerItemProxy */; }; AF1A17840D6D6FA7008AF328 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF1A17610D6D6EE3008AF328 /* LCDscrub */; targetProxy = AF1A17830D6D6FA7008AF328 /* PBXContainerItemProxy */; }; AF1B0FA81D7AB4740011DBE4 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AF1B0FA91D7AB4740011DBE4 /* PBXContainerItemProxy */; }; AF1B0FC51D7AB5740011DBE4 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF1B0FA71D7AB4740011DBE4 /* Hexstrut */; targetProxy = AF1B0FC41D7AB5740011DBE4 /* PBXContainerItemProxy */; }; AF32D9E10F3AD0B40080F535 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AF32D9E20F3AD0B40080F535 /* PBXContainerItemProxy */; }; AF32D9F90F3AD0D90080F535 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF32D9E00F3AD0B40080F535 /* RubikBlocks */; targetProxy = AF32D9F80F3AD0D90080F535 /* PBXContainerItemProxy */; }; AF3581C01431D47B00E09C51 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AF3581C11431D47B00E09C51 /* PBXContainerItemProxy */; }; AF3581FC143330F900E09C51 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AF3581FD143330F900E09C51 /* PBXContainerItemProxy */; }; AF35E88B0E63823600691F2F /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AF35E88C0E63823600691F2F /* PBXContainerItemProxy */; }; AF35E8A30E63825600691F2F /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF35E88A0E63823600691F2F /* Jigsaw */; targetProxy = AF35E8A20E63825600691F2F /* PBXContainerItemProxy */; }; AF36340118540D050086A439 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF1AD9E118500F9F00932759 /* XScreenSaverUpdater */; targetProxy = AF36340018540D050086A439 /* PBXContainerItemProxy */; }; AF39381B1D0FBD6A00205406 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AF39381C1D0FBD6A00205406 /* PBXContainerItemProxy */; }; AF3938381D0FBF5300205406 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF39381A1D0FBD6A00205406 /* Discoball */; targetProxy = AF3938371D0FBF5300205406 /* PBXContainerItemProxy */; }; AF39E283198A11F60064A58D /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AF39E284198A11F60064A58D /* PBXContainerItemProxy */; }; AF39E2BA198A16920064A58D /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF39E282198A11F60064A58D /* WindupRobot */; targetProxy = AF39E2B9198A16920064A58D /* PBXContainerItemProxy */; }; AF3C71460D624BF50030CC0D /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AF3C71470D624BF50030CC0D /* PBXContainerItemProxy */; }; AF42C5160D624E9200B27FF6 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF3C71450D624BF50030CC0D /* Hypnowheel */; targetProxy = AF42C5150D624E9200B27FF6 /* PBXContainerItemProxy */; }; AF4540D20E52BE8800AE87B5 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AFE30BE80E52B14700CCF4A5 /* Sonar */; targetProxy = AF4540D10E52BE8800AE87B5 /* PBXContainerItemProxy */; }; AF46E9D01CBBA2B300240FBC /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AF46E9D11CBBA2B300240FBC /* PBXContainerItemProxy */; }; AF46E9ED1CBBA49A00240FBC /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF46E9CF1CBBA2B300240FBC /* Unicrud */; targetProxy = AF46E9EC1CBBA49A00240FBC /* PBXContainerItemProxy */; }; AF476FB6099D154F001F091E /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AF476FB7099D154F001F091E /* PBXContainerItemProxy */; }; AF476FDB099D1686001F091E /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AF476FDC099D1686001F091E /* PBXContainerItemProxy */; }; AF47704D099D4385001F091E /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AF47704E099D4385001F091E /* PBXContainerItemProxy */; }; AF47716A099D4786001F091E /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AF47716B099D4786001F091E /* PBXContainerItemProxy */; }; AF477180099D4803001F091E /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AF477181099D4803001F091E /* PBXContainerItemProxy */; }; AF4771A8099D4949001F091E /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AF4771A9099D4949001F091E /* PBXContainerItemProxy */; }; AF4771DC099D4D9A001F091E /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AF4771DD099D4D9A001F091E /* PBXContainerItemProxy */; }; AF4771F3099D4E63001F091E /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AF4771F4099D4E63001F091E /* PBXContainerItemProxy */; }; AF477209099D4EE8001F091E /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AF47720A099D4EE8001F091E /* PBXContainerItemProxy */; }; AF47721F099D4F67001F091E /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AF477220099D4F67001F091E /* PBXContainerItemProxy */; }; AF477254099D5717001F091E /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AF477255099D5717001F091E /* PBXContainerItemProxy */; }; AF47726C099D57B9001F091E /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AF47726D099D57B9001F091E /* PBXContainerItemProxy */; }; AF477284099D5926001F091E /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AF477285099D5926001F091E /* PBXContainerItemProxy */; }; AF477383099D65A1001F091E /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AF477384099D65A1001F091E /* PBXContainerItemProxy */; }; AF47739B099D6648001F091E /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AF47739C099D6648001F091E /* PBXContainerItemProxy */; }; AF4773C2099D67B9001F091E /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AF4773C3099D67B9001F091E /* PBXContainerItemProxy */; }; AF477402099D69E7001F091E /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AF477403099D69E7001F091E /* PBXContainerItemProxy */; }; AF477427099D7C70001F091E /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AF477428099D7C70001F091E /* PBXContainerItemProxy */; }; AF477443099D7D33001F091E /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AF477444099D7D33001F091E /* PBXContainerItemProxy */; }; AF477484099D89E4001F091E /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AF477485099D89E4001F091E /* PBXContainerItemProxy */; }; AF47749A099D8A74001F091E /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AF47749B099D8A74001F091E /* PBXContainerItemProxy */; }; AF4774B5099D8B5F001F091E /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AF4774B6099D8B5F001F091E /* PBXContainerItemProxy */; }; AF4774CF099D8BFF001F091E /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AF4774D0099D8BFF001F091E /* PBXContainerItemProxy */; }; AF47755E099D9A1A001F091E /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AF47755F099D9A1A001F091E /* PBXContainerItemProxy */; }; AF477584099D9C28001F091E /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AF477585099D9C28001F091E /* PBXContainerItemProxy */; }; AF4775A0099D9CF7001F091E /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AF4775A1099D9CF7001F091E /* PBXContainerItemProxy */; }; AF4775D9099D9F69001F091E /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AF4775DA099D9F69001F091E /* PBXContainerItemProxy */; }; AF4775F3099DA030001F091E /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AF4775F4099DA030001F091E /* PBXContainerItemProxy */; }; AF477614099DA26C001F091E /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AF477615099DA26C001F091E /* PBXContainerItemProxy */; }; AF477645099DA6D0001F091E /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AF477646099DA6D0001F091E /* PBXContainerItemProxy */; }; AF47765B099DA78E001F091E /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AF47765C099DA78E001F091E /* PBXContainerItemProxy */; }; AF477671099DA849001F091E /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AF477672099DA849001F091E /* PBXContainerItemProxy */; }; AF477690099DAA6F001F091E /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AF477691099DAA6F001F091E /* PBXContainerItemProxy */; }; AF4776AB099DABDD001F091E /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AF4776AC099DABDD001F091E /* PBXContainerItemProxy */; }; AF4776C1099DAC8A001F091E /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AF4776C2099DAC8A001F091E /* PBXContainerItemProxy */; }; AF4776DC099DADDF001F091E /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AF4776DD099DADDF001F091E /* PBXContainerItemProxy */; }; AF4776F2099DAE7A001F091E /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AF4776F3099DAE7A001F091E /* PBXContainerItemProxy */; }; AF47770E099DAF9F001F091E /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AF47770F099DAF9F001F091E /* PBXContainerItemProxy */; }; AF477724099DB044001F091E /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AF477725099DB044001F091E /* PBXContainerItemProxy */; }; AF477753099DB61E001F091E /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AF477754099DB61E001F091E /* PBXContainerItemProxy */; }; AF477775099DB965001F091E /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AF477776099DB965001F091E /* PBXContainerItemProxy */; }; AF477791099DBA90001F091E /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AF477792099DBA90001F091E /* PBXContainerItemProxy */; }; AF4777D2099DC183001F091E /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AF4777D3099DC183001F091E /* PBXContainerItemProxy */; }; AF4778AC099DDB79001F091E /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AF4778AD099DDB79001F091E /* PBXContainerItemProxy */; }; AF4778C8099DDCAE001F091E /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AF4778C9099DDCAE001F091E /* PBXContainerItemProxy */; }; AF4778E9099DDDC8001F091E /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AF4778EA099DDDC8001F091E /* PBXContainerItemProxy */; }; AF47790A099DE379001F091E /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AF47790B099DE379001F091E /* PBXContainerItemProxy */; }; AF47792B099DE4C7001F091E /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AF47792C099DE4C7001F091E /* PBXContainerItemProxy */; }; AF480922098C412F00FB32B8 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AF480921098C412F00FB32B8 /* PBXContainerItemProxy */; }; AF48092A098C419000FB32B8 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AF480929098C419000FB32B8 /* PBXContainerItemProxy */; }; AF48092D098C41AE00FB32B8 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AF48092C098C41AE00FB32B8 /* PBXContainerItemProxy */; }; AF480936098C421200FB32B8 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AF480935098C421200FB32B8 /* PBXContainerItemProxy */; }; AF480C4A098E301400FB32B8 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AF480C4B098E301400FB32B8 /* PBXContainerItemProxy */; }; AF480D5C098EED6900FB32B8 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF480D59098EED5100FB32B8 /* All Savers (OpenGL) */; targetProxy = AF480D5B098EED6900FB32B8 /* PBXContainerItemProxy */; }; AF480D5E098EED6900FB32B8 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF480D58098EED3D00FB32B8 /* All Savers (XLockmore) */; targetProxy = AF480D5D098EED6900FB32B8 /* PBXContainerItemProxy */; }; AF480D60098EED6900FB32B8 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF480AAF098C669800FB32B8 /* All Savers (XScreenSaver) */; targetProxy = AF480D5F098EED6900FB32B8 /* PBXContainerItemProxy */; }; AF480D73098EEDDE00FB32B8 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AF480D74098EEDDE00FB32B8 /* PBXContainerItemProxy */; }; AF4810EC09909FBA00FB32B8 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AF4810ED09909FBA00FB32B8 /* PBXContainerItemProxy */; }; AF4812510990CE2700FB32B8 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AF4812520990CE2700FB32B8 /* PBXContainerItemProxy */; }; AF4812B40990D3D900FB32B8 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AF4812B50990D3D900FB32B8 /* PBXContainerItemProxy */; }; AF48DEF00A0C25E000F94CF9 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AF48DEF10A0C25E000F94CF9 /* PBXContainerItemProxy */; }; AF48DF060A0C261100F94CF9 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF48DEEF0A0C25E000F94CF9 /* GLSchool */; targetProxy = AF48DF050A0C261100F94CF9 /* PBXContainerItemProxy */; }; AF4A344A102A593600A81B2A /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AF4A344B102A593600A81B2A /* PBXContainerItemProxy */; }; AF4A3460102A59A400A81B2A /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4A3449102A593600A81B2A /* Surfaces */; targetProxy = AF4A345F102A59A400A81B2A /* PBXContainerItemProxy */; }; AF4F10EE143450C300E34F3F /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF3581BF1431D47B00E09C51 /* CompanionCube */; targetProxy = AF4F10ED143450C300E34F3F /* PBXContainerItemProxy */; }; AF4F10F0143450C300E34F3F /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF78D175142DD8F3002AAF77 /* Hilbert */; targetProxy = AF4F10EF143450C300E34F3F /* PBXContainerItemProxy */; }; AF4F10F2143450C300E34F3F /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF3581FB143330F900E09C51 /* TronBit */; targetProxy = AF4F10F1143450C300E34F3F /* PBXContainerItemProxy */; }; AF4FD6E70CE7A486005EE58E /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AF4FD6E80CE7A486005EE58E /* PBXContainerItemProxy */; }; AF4FD6FF0CE7A4F9005EE58E /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4FD6E60CE7A486005EE58E /* Lockward */; targetProxy = AF4FD6FE0CE7A4F9005EE58E /* PBXContainerItemProxy */; }; AF4FF4980D52CA5000666F98 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4FF4930D52CA0800666F98 /* m6502.h */; targetProxy = AF4FF4970D52CA5000666F98 /* PBXContainerItemProxy */; }; AF4FF4BB0D52CBDE00666F98 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AF4FF4BC0D52CBDE00666F98 /* PBXContainerItemProxy */; }; AF4FF4D70D52CD0D00666F98 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4FF4BA0D52CBDE00666F98 /* CubicGrid */; targetProxy = AF4FF4D60D52CD0D00666F98 /* PBXContainerItemProxy */; }; AF5C9AFA1A0CCE6E00B0147A /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AF5C9AFB1A0CCE6E00B0147A /* PBXContainerItemProxy */; }; AF5C9B161A0CCF8000B0147A /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF5C9AF91A0CCE6E00B0147A /* Cityflow */; targetProxy = AF5C9B151A0CCF8000B0147A /* PBXContainerItemProxy */; }; AF63A7F21AB4EDDB00593C75 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AF63A7F31AB4EDDB00593C75 /* PBXContainerItemProxy */; }; AF63A80F1AB4EFD300593C75 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF63A7F11AB4EDDB00593C75 /* RomanBoy */; targetProxy = AF63A80E1AB4EFD300593C75 /* PBXContainerItemProxy */; }; AF63F2481C3465BE0033E133 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AF63F2491C3465BE0033E133 /* PBXContainerItemProxy */; }; AF63F24A1C3465BE0033E133 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4FF4930D52CA0800666F98 /* m6502.h */; targetProxy = AF63F24B1C3465BE0033E133 /* PBXContainerItemProxy */; }; AF63F24C1C3465BE0033E133 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AFA56119099378CB00F3E977 /* molecules.h */; targetProxy = AF63F24D1C3465BE0033E133 /* PBXContainerItemProxy */; }; AF63F4511C34682A0033E133 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AF63F4521C34682A0033E133 /* PBXContainerItemProxy */; }; AF63F4531C34682A0033E133 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4FF4930D52CA0800666F98 /* m6502.h */; targetProxy = AF63F4541C34682A0033E133 /* PBXContainerItemProxy */; }; AF63F4551C34682A0033E133 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AFA56119099378CB00F3E977 /* molecules.h */; targetProxy = AF63F4561C34682A0033E133 /* PBXContainerItemProxy */; }; AF63F4791C3469FC0033E133 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AF63F47A1C3469FC0033E133 /* PBXContainerItemProxy */; }; AF63F47B1C3469FC0033E133 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4FF4930D52CA0800666F98 /* m6502.h */; targetProxy = AF63F47C1C3469FC0033E133 /* PBXContainerItemProxy */; }; AF63F47D1C3469FC0033E133 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AFA56119099378CB00F3E977 /* molecules.h */; targetProxy = AF63F47E1C3469FC0033E133 /* PBXContainerItemProxy */; }; AF6423F3099FF9C2000F4CD4 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AF6423F4099FF9C2000F4CD4 /* PBXContainerItemProxy */; }; AF6425CD09A18855000F4CD4 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AF6425CE09A18855000F4CD4 /* PBXContainerItemProxy */; }; AF6425ED09A189EC000F4CD4 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AF6425EE09A189EC000F4CD4 /* PBXContainerItemProxy */; }; AF64261009A18D6C000F4CD4 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AF64261109A18D6C000F4CD4 /* PBXContainerItemProxy */; }; AF64262D09A18F54000F4CD4 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AF64262E09A18F54000F4CD4 /* PBXContainerItemProxy */; }; AF64265009A19229000F4CD4 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AF64265109A19229000F4CD4 /* PBXContainerItemProxy */; }; AF64267C09A194B0000F4CD4 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AF64267D09A194B0000F4CD4 /* PBXContainerItemProxy */; }; AF64277209A1D37A000F4CD4 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AF64277309A1D37A000F4CD4 /* PBXContainerItemProxy */; }; AF6427A909A2DE36000F4CD4 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AF6427AA09A2DE36000F4CD4 /* PBXContainerItemProxy */; }; AF68A47F19196CF800D41CD1 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AF68A48019196CF800D41CD1 /* PBXContainerItemProxy */; }; AF68A49E19196EA000D41CD1 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF68A47E19196CF800D41CD1 /* Tessellimage */; targetProxy = AF68A49D19196EA000D41CD1 /* PBXContainerItemProxy */; }; AF714E4F105613410046AB1D /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4774B4099D8B5F001F091E /* LMorph */; targetProxy = AF714E4E105613410046AB1D /* PBXContainerItemProxy */; }; AF714E51105613580046AB1D /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AFD570C90996B9F800BA26F7 /* Ant */; targetProxy = AF714E50105613580046AB1D /* PBXContainerItemProxy */; }; AF73FF231A09877F00E485E9 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AF73FF241A09877F00E485E9 /* PBXContainerItemProxy */; }; AF73FF3F1A0988F000E485E9 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF73FF221A09877F00E485E9 /* BinaryRing */; targetProxy = AF73FF3E1A0988F000E485E9 /* PBXContainerItemProxy */; }; AF7511001782B5B900380EA1 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AF7511011782B5B900380EA1 /* PBXContainerItemProxy */; }; AF7776E509B63ABF00EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AF7776E609B63ABF00EA3033 /* PBXContainerItemProxy */; }; AF77771B09B6416100EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AF77771C09B6416100EA3033 /* PBXContainerItemProxy */; }; AF77773F09B6446500EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AF77774009B6446500EA3033 /* PBXContainerItemProxy */; }; AF77777509B6497800EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AF77777609B6497800EA3033 /* PBXContainerItemProxy */; }; AF77778F09B64A5200EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AF77779009B64A5200EA3033 /* PBXContainerItemProxy */; }; AF7777A909B64B2600EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AF7777AA09B64B2600EA3033 /* PBXContainerItemProxy */; }; AF7777D109B64C6B00EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AF7777D209B64C6B00EA3033 /* PBXContainerItemProxy */; }; AF7777EB09B64E3100EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AF7777EC09B64E3100EA3033 /* PBXContainerItemProxy */; }; AF77781109B6504400EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AF77781209B6504400EA3033 /* PBXContainerItemProxy */; }; AF77784509B6528100EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AF77784609B6528100EA3033 /* PBXContainerItemProxy */; }; AF77786209B6536000EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AF77786309B6536000EA3033 /* PBXContainerItemProxy */; }; AF77788009B6563500EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AF77788109B6563500EA3033 /* PBXContainerItemProxy */; }; AF7778A609B659C800EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AF7778A709B659C800EA3033 /* PBXContainerItemProxy */; }; AF7778D709B6604500EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF9D475F09B53166006E59CF /* Zoom */; targetProxy = AF7778D609B6604500EA3033 /* PBXContainerItemProxy */; }; AF7778D909B6604500EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4776AA099DABDD001F091E /* XSpirograph */; targetProxy = AF7778D809B6604500EA3033 /* PBXContainerItemProxy */; }; AF7778DB09B6604500EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4776C0099DAC8A001F091E /* XRaySwarm */; targetProxy = AF7778DA09B6604500EA3033 /* PBXContainerItemProxy */; }; AF7778DD09B6604600EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF477442099D7D33001F091E /* XMatrix */; targetProxy = AF7778DC09B6604600EA3033 /* PBXContainerItemProxy */; }; AF7778DF09B6604600EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF9D4C6909B59F27006E59CF /* XLyap */; targetProxy = AF7778DE09B6604600EA3033 /* PBXContainerItemProxy */; }; AF7778E109B6604600EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4778C7099DDCAE001F091E /* XJack */; targetProxy = AF7778E009B6604600EA3033 /* PBXContainerItemProxy */; }; AF7778E309B6604600EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF9D4D7E09B5B2DC006E59CF /* XAnalogTV */; targetProxy = AF7778E209B6604600EA3033 /* PBXContainerItemProxy */; }; AF7778E509B6604600EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF975808099C41D500B05160 /* XFlame */; targetProxy = AF7778E409B6604600EA3033 /* PBXContainerItemProxy */; }; AF7778E709B6604600EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF477382099D65A1001F091E /* Wormhole */; targetProxy = AF7778E609B6604600EA3033 /* PBXContainerItemProxy */; }; AF7778EB09B6604600EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4776DB099DADDF001F091E /* WhirlWindWarp */; targetProxy = AF7778EA09B6604600EA3033 /* PBXContainerItemProxy */; }; AF7778ED09B6604600EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF47717F099D4803001F091E /* Wander */; targetProxy = AF7778EC09B6604600EA3033 /* PBXContainerItemProxy */; }; AF7778EF09B6604600EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4776F1099DAE7A001F091E /* Vermiculate */; targetProxy = AF7778EE09B6604600EA3033 /* PBXContainerItemProxy */; }; AF7778F109B6604600EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF9D496C09B5411D006E59CF /* Twang */; targetProxy = AF7778F009B6604600EA3033 /* PBXContainerItemProxy */; }; AF7778F309B6604600EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF476FDA099D1686001F091E /* Truchet */; targetProxy = AF7778F209B6604600EA3033 /* PBXContainerItemProxy */; }; AF7778F709B6604600EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF477723099DB044001F091E /* Substrate */; targetProxy = AF7778F609B6604600EA3033 /* PBXContainerItemProxy */; }; AF7778F909B6604600EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF47759F099D9CF7001F091E /* Starfish */; targetProxy = AF7778F809B6604600EA3033 /* PBXContainerItemProxy */; }; AF7778FB09B6604600EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF477644099DA6D0001F091E /* Squiral */; targetProxy = AF7778FA09B6604600EA3033 /* PBXContainerItemProxy */; }; AF7778FD09B6604600EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF9D499709B544C2006E59CF /* Spotlight */; targetProxy = AF7778FC09B6604600EA3033 /* PBXContainerItemProxy */; }; AF7778FF09B6604700EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF64277109A1D37A000F4CD4 /* SpeedMine */; targetProxy = AF7778FE09B6604700EA3033 /* PBXContainerItemProxy */; }; AF77790309B6604700EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF47792A099DE4C7001F091E /* Slip */; targetProxy = AF77790209B6604700EA3033 /* PBXContainerItemProxy */; }; AF77790509B6604700EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF9D474409B5300A006E59CF /* SlideScreen */; targetProxy = AF77790409B6604700EA3033 /* PBXContainerItemProxy */; }; AF77790709B6604700EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF975865099C475900B05160 /* ShadeBobs */; targetProxy = AF77790609B6604700EA3033 /* PBXContainerItemProxy */; }; AF77790909B6604700EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF9D495409B53FC9006E59CF /* RotZoomer */; targetProxy = AF77790809B6604700EA3033 /* PBXContainerItemProxy */; }; AF77790B09B6604700EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF9770290989D1E6001F8B92 /* Rorschach */; targetProxy = AF77790A09B6604700EA3033 /* PBXContainerItemProxy */; }; AF77790D09B6604700EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF975D52099CA0F000B05160 /* Rocks */; targetProxy = AF77790C09B6604700EA3033 /* PBXContainerItemProxy */; }; AF77790F09B6604700EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF9D492B09B53CBA006E59CF /* Ripples */; targetProxy = AF77790E09B6604700EA3033 /* PBXContainerItemProxy */; }; AF77791109B6604700EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF9757C2099C3E6300B05160 /* RDbomb */; targetProxy = AF77791009B6604700EA3033 /* PBXContainerItemProxy */; }; AF77791309B6604700EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF6425EC09A189EC000F4CD4 /* Qix */; targetProxy = AF77791209B6604700EA3033 /* PBXContainerItemProxy */; }; AF77791509B6604700EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF477583099D9C28001F091E /* Pyro */; targetProxy = AF77791409B6604700EA3033 /* PBXContainerItemProxy */; }; AF77791709B6604700EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF47726B099D57B9001F091E /* PopSquares */; targetProxy = AF77791609B6604700EA3033 /* PBXContainerItemProxy */; }; AF77791909B6604700EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF9D4CE709B5AA8E006E59CF /* Pong */; targetProxy = AF77791809B6604700EA3033 /* PBXContainerItemProxy */; }; AF77791B09B6604700EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF477283099D5926001F091E /* Piecewise */; targetProxy = AF77791A09B6604700EA3033 /* PBXContainerItemProxy */; }; AF77791D09B6604800EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF7776E409B63ABF00EA3033 /* Phosphor */; targetProxy = AF77791C09B6604800EA3033 /* PBXContainerItemProxy */; }; AF77791F09B6604800EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF477670099DA849001F091E /* Petri */; targetProxy = AF77791E09B6604800EA3033 /* PBXContainerItemProxy */; }; AF77792109B6604800EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4778AB099DDB79001F091E /* Penetrate */; targetProxy = AF77792009B6604800EA3033 /* PBXContainerItemProxy */; }; AF77792309B6604800EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF47755D099D9A1A001F091E /* Pedal */; targetProxy = AF77792209B6604800EA3033 /* PBXContainerItemProxy */; }; AF77792509B6604800EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF975C5D099C8F3F00B05160 /* NoseGuy */; targetProxy = AF77792409B6604800EA3033 /* PBXContainerItemProxy */; }; AF77792709B6604800EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4771F2099D4E63001F091E /* NerveRot */; targetProxy = AF77792609B6604800EA3033 /* PBXContainerItemProxy */; }; AF77792909B6604800EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF64264F09A19229000F4CD4 /* Munch */; targetProxy = AF77792809B6604800EA3033 /* PBXContainerItemProxy */; }; AF77792B09B6604800EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF64262C09A18F54000F4CD4 /* Moire2 */; targetProxy = AF77792A09B6604800EA3033 /* PBXContainerItemProxy */; }; AF77792D09B6604800EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF975775099C374A00B05160 /* Moire */; targetProxy = AF77792C09B6604800EA3033 /* PBXContainerItemProxy */; }; AF77793109B6604800EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF975A36099C681F00B05160 /* MetaBalls */; targetProxy = AF77793009B6604800EA3033 /* PBXContainerItemProxy */; }; AF77793309B6604800EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF975AFC099C6FE400B05160 /* MemScroller */; targetProxy = AF77793209B6604800EA3033 /* PBXContainerItemProxy */; }; AF77793509B6604800EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4774CE099D8BFF001F091E /* Maze */; targetProxy = AF77793409B6604800EA3033 /* PBXContainerItemProxy */; }; AF77793909B6604800EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF477613099DA26C001F091E /* Kumppa */; targetProxy = AF77793809B6604800EA3033 /* PBXContainerItemProxy */; }; AF77793B09B6604900EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF477499099D8A74001F091E /* Kaleidescope */; targetProxy = AF77793A09B6604900EA3033 /* PBXContainerItemProxy */; }; AF77793F09B6604900EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF477401099D69E7001F091E /* Intermomentary */; targetProxy = AF77793E09B6604900EA3033 /* PBXContainerItemProxy */; }; AF77794109B6604900EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF476FB5099D154F001F091E /* Interference */; targetProxy = AF77794009B6604900EA3033 /* PBXContainerItemProxy */; }; AF77794309B6604900EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF477752099DB61E001F091E /* Interaggregate */; targetProxy = AF77794209B6604900EA3033 /* PBXContainerItemProxy */; }; AF77794509B6604900EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF97572D099C317000B05160 /* IMSMap */; targetProxy = AF77794409B6604900EA3033 /* PBXContainerItemProxy */; }; AF77794709B6604900EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF477426099D7C70001F091E /* IFS */; targetProxy = AF77794609B6604900EA3033 /* PBXContainerItemProxy */; }; AF77794D09B6604900EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF480C49098E301400FB32B8 /* Helix */; targetProxy = AF77794C09B6604900EA3033 /* PBXContainerItemProxy */; }; AF77794F09B6604900EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF975C12099C8C1500B05160 /* Halo */; targetProxy = AF77794E09B6604900EA3033 /* PBXContainerItemProxy */; }; AF77795109B6604900EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF477253099D5717001F091E /* Halftone */; targetProxy = AF77795009B6604900EA3033 /* PBXContainerItemProxy */; }; AF77795309B6604900EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF975C3D099C8DCF00B05160 /* Greynetic */; targetProxy = AF77795209B6604900EA3033 /* PBXContainerItemProxy */; }; AF77795509B6604A00EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF64267B09A194B0000F4CD4 /* Goop */; targetProxy = AF77795409B6604A00EA3033 /* PBXContainerItemProxy */; }; AF77795709B6604A00EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF47739A099D6648001F091E /* FuzzyFlakes */; targetProxy = AF77795609B6604A00EA3033 /* PBXContainerItemProxy */; }; AF77795909B6604A00EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF77787F09B6563500EA3033 /* FontGlide */; targetProxy = AF77795809B6604A00EA3033 /* PBXContainerItemProxy */; }; AF77795B09B6604A00EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF477790099DBA90001F091E /* FluidBalls */; targetProxy = AF77795A09B6604A00EA3033 /* PBXContainerItemProxy */; }; AF77795D09B6604A00EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF477483099D89E4001F091E /* Flame */; targetProxy = AF77795C09B6604A00EA3033 /* PBXContainerItemProxy */; }; AF77795F09B6604A00EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF975AD7099C6EB100B05160 /* Fireworkx */; targetProxy = AF77795E09B6604A00EA3033 /* PBXContainerItemProxy */; }; AF77796109B6604A00EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF975A6C099C6AB200B05160 /* Eruption */; targetProxy = AF77796009B6604A00EA3033 /* PBXContainerItemProxy */; }; AF77796309B6604A00EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4775F2099DA030001F091E /* Epicycle */; targetProxy = AF77796209B6604A00EA3033 /* PBXContainerItemProxy */; }; AF77796509B6604A00EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF9D48F409B535DA006E59CF /* Distort */; targetProxy = AF77796409B6604A00EA3033 /* PBXContainerItemProxy */; }; AF77796709B6604A00EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF47704C099D4385001F091E /* Deluxe */; targetProxy = AF77796609B6604A00EA3033 /* PBXContainerItemProxy */; }; AF77796909B6604A00EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF976FBB0989CAA2001F8B92 /* Deco */; targetProxy = AF77796809B6604A00EA3033 /* PBXContainerItemProxy */; }; AF77796B09B6604A00EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF9D466609B5109C006E59CF /* DecayScreen */; targetProxy = AF77796A09B6604A00EA3033 /* PBXContainerItemProxy */; }; AF77796D09B6604A00EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4778E8099DDDC8001F091E /* Cynosure */; targetProxy = AF77796C09B6604A00EA3033 /* PBXContainerItemProxy */; }; AF77797109B6604B00EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4775D8099D9F69001F091E /* Coral */; targetProxy = AF77797009B6604B00EA3033 /* PBXContainerItemProxy */; }; AF77797309B6604B00EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF477169099D4786001F091E /* Compass */; targetProxy = AF77797209B6604B00EA3033 /* PBXContainerItemProxy */; }; AF77797509B6604B00EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF47770D099DAF9F001F091E /* CloudLife */; targetProxy = AF77797409B6604B00EA3033 /* PBXContainerItemProxy */; }; AF77797709B6604B00EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF477774099DB965001F091E /* Celtic */; targetProxy = AF77797609B6604B00EA3033 /* PBXContainerItemProxy */; }; AF77797909B6604B00EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4771DB099D4D9A001F091E /* CCurve */; targetProxy = AF77797809B6604B00EA3033 /* PBXContainerItemProxy */; }; AF77797B09B6604B00EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF9D48DB09B53322006E59CF /* Bumps */; targetProxy = AF77797A09B6604B00EA3033 /* PBXContainerItemProxy */; }; AF77797F09B6604B00EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF9D4DAF09B5B71E006E59CF /* BSOD */; targetProxy = AF77797E09B6604B00EA3033 /* PBXContainerItemProxy */; }; AF77798109B6604B00EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4777D1099DC183001F091E /* BoxFit */; targetProxy = AF77798009B6604B00EA3033 /* PBXContainerItemProxy */; }; AF77798309B6604B00EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF7778A509B659C800EA3033 /* BlitSpin */; targetProxy = AF77798209B6604B00EA3033 /* PBXContainerItemProxy */; }; AF77798509B6604B00EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF47768F099DAA6F001F091E /* Blaster */; targetProxy = AF77798409B6604B00EA3033 /* PBXContainerItemProxy */; }; AF77798709B6604B00EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF975A86099C6BC300B05160 /* Barcode */; targetProxy = AF77798609B6604B00EA3033 /* PBXContainerItemProxy */; }; AF77798909B6604C00EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF9770660989D2F6001F8B92 /* Attraction */; targetProxy = AF77798809B6604C00EA3033 /* PBXContainerItemProxy */; }; AF77798B09B6604C00EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF9D4DEC09B5BB19006E59CF /* Apple2 */; targetProxy = AF77798A09B6604C00EA3033 /* PBXContainerItemProxy */; }; AF77798D09B6604C00EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4773C1099D67B9001F091E /* Anemotaxis */; targetProxy = AF77798C09B6604C00EA3033 /* PBXContainerItemProxy */; }; AF77798F09B6604C00EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF47721E099D4F67001F091E /* Anemone */; targetProxy = AF77798E09B6604C00EA3033 /* PBXContainerItemProxy */; }; AF77799509B6608000EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AFD570850996B80300BA26F7 /* Triangle */; targetProxy = AF77799409B6608000EA3033 /* PBXContainerItemProxy */; }; AF77799709B6608100EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AFD571590996C0CE00BA26F7 /* Thornbird */; targetProxy = AF77799609B6608100EA3033 /* PBXContainerItemProxy */; }; AF77799909B6608100EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AFD572220996E4A300BA26F7 /* Swirl */; targetProxy = AF77799809B6608100EA3033 /* PBXContainerItemProxy */; }; AF77799B09B6608100EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AFD5735D0997411200BA26F7 /* Strange */; targetProxy = AF77799A09B6608100EA3033 /* PBXContainerItemProxy */; }; AF7779A109B6608100EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AFD5700F0996B4CC00BA26F7 /* Sierpinski */; targetProxy = AF7779A009B6608100EA3033 /* PBXContainerItemProxy */; }; AF7779A509B6608100EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AFD5726D0996EE8500BA26F7 /* Polyominoes */; targetProxy = AF7779A409B6608100EA3033 /* PBXContainerItemProxy */; }; AF7779A709B6608100EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AFD56FF80996B43800BA26F7 /* Penrose */; targetProxy = AF7779A609B6608100EA3033 /* PBXContainerItemProxy */; }; AF7779A909B6608100EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF77771A09B6416100EA3033 /* Pacman */; targetProxy = AF7779A809B6608100EA3033 /* PBXContainerItemProxy */; }; AF7779AB09B6608100EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AFD5706F0996B72700BA26F7 /* Mountain */; targetProxy = AF7779AA09B6608100EA3033 /* PBXContainerItemProxy */; }; AF7779AD09B6608100EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF794FCD09974FA60059A8B0 /* Loop */; targetProxy = AF7779AC09B6608100EA3033 /* PBXContainerItemProxy */; }; AF7779B709B6608100EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AFD572F9099701C000BA26F7 /* Julia */; targetProxy = AF7779B609B6608100EA3033 /* PBXContainerItemProxy */; }; AF7779BB09B6608100EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AFD56F6B0996B01600BA26F7 /* Hopalong */; targetProxy = AF7779BA09B6608100EA3033 /* PBXContainerItemProxy */; }; AF7779BD09B6608100EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AFD56F4F0996AEEE00BA26F7 /* Grav */; targetProxy = AF7779BC09B6608100EA3033 /* PBXContainerItemProxy */; }; AF7779BF09B6608100EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AFD56F230996AB8A00BA26F7 /* Galaxy */; targetProxy = AF7779BE09B6608100EA3033 /* PBXContainerItemProxy */; }; AF7779C309B6608100EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AFD570EA0996BBBF00BA26F7 /* Flow */; targetProxy = AF7779C209B6608100EA3033 /* PBXContainerItemProxy */; }; AF7779C709B6608200EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF794F8E09974A320059A8B0 /* Fiberlamp */; targetProxy = AF7779C609B6608200EA3033 /* PBXContainerItemProxy */; }; AF7779C909B6608200EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AFD570590996B6A300BA26F7 /* FadePlot */; targetProxy = AF7779C809B6608200EA3033 /* PBXContainerItemProxy */; }; AF7779CB09B6608200EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AFD571430996C01700BA26F7 /* Euler2D */; targetProxy = AF7779CA09B6608200EA3033 /* PBXContainerItemProxy */; }; AF7779CD09B6608200EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF480D72098EEDDE00FB32B8 /* Drift */; targetProxy = AF7779CC09B6608200EA3033 /* PBXContainerItemProxy */; }; AF7779CF09B6608200EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AFD571130996BE9300BA26F7 /* Discrete */; targetProxy = AF7779CE09B6608200EA3033 /* PBXContainerItemProxy */; }; AF7779D109B6608200EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF794F64099748450059A8B0 /* Demon */; targetProxy = AF7779D009B6608200EA3033 /* PBXContainerItemProxy */; }; AF7779D309B6608200EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AFD572C20996FC0F00BA26F7 /* Crystal */; targetProxy = AF7779D209B6608200EA3033 /* PBXContainerItemProxy */; }; AF7779D509B6608200EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AFD56EAE0996A72600BA26F7 /* Braid */; targetProxy = AF7779D409B6608200EA3033 /* PBXContainerItemProxy */; }; AF7779D709B6608200EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AFD572A50996F99600BA26F7 /* Bouboule */; targetProxy = AF7779D609B6608200EA3033 /* PBXContainerItemProxy */; }; AF7779D909B6608200EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AFD5712C0996BF2E00BA26F7 /* Apollonian */; targetProxy = AF7779D809B6608200EA3033 /* PBXContainerItemProxy */; }; AF7779DD09B660AF00EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AFA56379099397B300F3E977 /* TimeTunnel */; targetProxy = AF7779DC09B660AF00EA3033 /* PBXContainerItemProxy */; }; AF7779DF09B660AF00EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AFA562F20993943B00F3E977 /* Tangram */; targetProxy = AF7779DE09B660AF00EA3033 /* PBXContainerItemProxy */; }; AF7779E109B660AF00EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AFA559920993322100F3E977 /* Superquadrics */; targetProxy = AF7779E009B660AF00EA3033 /* PBXContainerItemProxy */; }; AF7779E309B660B000EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF7777A809B64B2600EA3033 /* StonerView */; targetProxy = AF7779E209B660B000EA3033 /* PBXContainerItemProxy */; }; AF7779E509B660B000EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF77781009B6504400EA3033 /* StarWars */; targetProxy = AF7779E409B660B000EA3033 /* PBXContainerItemProxy */; }; AF7779E709B660B000EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AFA55A030993340300F3E977 /* Stairs */; targetProxy = AF7779E609B660B000EA3033 /* PBXContainerItemProxy */; }; AF7779E909B660B000EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AFA55A20099334A000F3E977 /* Sproingies */; targetProxy = AF7779E809B660B000EA3033 /* PBXContainerItemProxy */; }; AF7779EB09B660B000EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AFA55D7F099358C400F3E977 /* Spheremonics */; targetProxy = AF7779EA09B660B000EA3033 /* PBXContainerItemProxy */; }; AF7779ED09B660B000EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AFA55B7909933F7200F3E977 /* Sierpinski3D */; targetProxy = AF7779EC09B660B000EA3033 /* PBXContainerItemProxy */; }; AF7779EF09B660B000EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AFA55D3C0993565300F3E977 /* SBalls */; targetProxy = AF7779EE09B660B000EA3033 /* PBXContainerItemProxy */; }; AF7779F109B660B000EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AFA559CF0993330600F3E977 /* Rubik */; targetProxy = AF7779F009B660B000EA3033 /* PBXContainerItemProxy */; }; AF7779F309B660B000EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AFA55DF009935E4900F3E977 /* Queens */; targetProxy = AF7779F209B660B000EA3033 /* PBXContainerItemProxy */; }; AF7779F509B660B100EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AFA55B2509933E8D00F3E977 /* Pulsar */; targetProxy = AF7779F409B660B100EA3033 /* PBXContainerItemProxy */; }; AF7779F709B660B100EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AFA562060993849F00F3E977 /* Providence */; targetProxy = AF7779F609B660B100EA3033 /* PBXContainerItemProxy */; }; AF7779F909B660B100EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AFA560AE0993718D00F3E977 /* Polytopes */; targetProxy = AF7779F809B660B100EA3033 /* PBXContainerItemProxy */; }; AF7779FB09B660B100EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AFA5619D09937D7E00F3E977 /* Polyhedra */; targetProxy = AF7779FA09B660B100EA3033 /* PBXContainerItemProxy */; }; AF7779FD09B660B100EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4812B30990D3D900FB32B8 /* Pipes */; targetProxy = AF7779FC09B660B100EA3033 /* PBXContainerItemProxy */; }; AF7779FF09B660B200EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AFA5621F0993852500F3E977 /* Pinion */; targetProxy = AF7779FE09B660B200EA3033 /* PBXContainerItemProxy */; }; AF777A0109B660B200EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AFA5617B09937CF100F3E977 /* Noof */; targetProxy = AF777A0009B660B200EA3033 /* PBXContainerItemProxy */; }; AF777A0309B660B200EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AFA559B50993328000F3E977 /* Morph3D */; targetProxy = AF777A0209B660B200EA3033 /* PBXContainerItemProxy */; }; AF777A0509B660B200EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AFA560FD0993781600F3E977 /* Molecule */; targetProxy = AF777A0409B660B200EA3033 /* PBXContainerItemProxy */; }; AF777A0709B660B200EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AFA5596D0993317900F3E977 /* Moebius */; targetProxy = AF777A0609B660B200EA3033 /* PBXContainerItemProxy */; }; AF777A0909B660B200EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF77778E09B64A5200EA3033 /* MirrorBlob */; targetProxy = AF777A0809B660B200EA3033 /* PBXContainerItemProxy */; }; AF777A0B09B660B200EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AFA55BE40993429100F3E977 /* Menger */; targetProxy = AF777A0A09B660B200EA3033 /* PBXContainerItemProxy */; }; AF777A0D09B660B200EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AFA55DC809935D7000F3E977 /* Lavalite */; targetProxy = AF777A0C09B660B200EA3033 /* PBXContainerItemProxy */; }; AF777A0F09B660B200EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AFA55A790993364300F3E977 /* Lament */; targetProxy = AF777A0E09B660B200EA3033 /* PBXContainerItemProxy */; }; AF777A1109B660B300EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AFA55F2A0993622F00F3E977 /* Klein */; targetProxy = AF777A1009B660B300EA3033 /* PBXContainerItemProxy */; }; AF777A1309B660B300EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AFA563A4099398BB00F3E977 /* Juggler3D */; targetProxy = AF777A1209B660B300EA3033 /* PBXContainerItemProxy */; }; AF777A1509B660B300EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AFA55F06099361B700F3E977 /* JigglyPuff */; targetProxy = AF777A1409B660B300EA3033 /* PBXContainerItemProxy */; }; AF777A1709B660B300EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AFA55F420993629000F3E977 /* Hypertorus */; targetProxy = AF777A1609B660B300EA3033 /* PBXContainerItemProxy */; }; AF777A1909B660B300EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AFD56DF10996A03800BA26F7 /* GLText */; targetProxy = AF777A1809B660B300EA3033 /* PBXContainerItemProxy */; }; AF777A1B09B660B300EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AFA55C77099349A600F3E977 /* GLSnake */; targetProxy = AF777A1A09B660B300EA3033 /* PBXContainerItemProxy */; }; AF777A1D09B660B300EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF7777D009B64C6B00EA3033 /* GLSlideshow */; targetProxy = AF777A1C09B660B300EA3033 /* PBXContainerItemProxy */; }; AF777A1F09B660B300EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AFA55B0909933E0500F3E977 /* GLPlanet */; targetProxy = AF777A1E09B660B300EA3033 /* PBXContainerItemProxy */; }; AF777A2109B660B300EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AFA55F720993643600F3E977 /* GLMatrix */; targetProxy = AF777A2009B660B300EA3033 /* PBXContainerItemProxy */; }; AF777A2309B660B400EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AFA55FF909936C6D00F3E977 /* GLKnots */; targetProxy = AF777A2209B660B400EA3033 /* PBXContainerItemProxy */; }; AF777A2509B660B400EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AFA56331099395ED00F3E977 /* GLHanoi */; targetProxy = AF777A2409B660B400EA3033 /* PBXContainerItemProxy */; }; AF777A2909B660B400EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AFA55E2F09935F8E00F3E977 /* GLBlur */; targetProxy = AF777A2809B660B400EA3033 /* PBXContainerItemProxy */; }; AF777A2B09B660B400EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AFA55B9109933FDA00F3E977 /* GFlux */; targetProxy = AF777A2A09B660B400EA3033 /* PBXContainerItemProxy */; }; AF777A2D09B660B400EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF77777409B6497800EA3033 /* Gleidescope */; targetProxy = AF777A2C09B660B400EA3033 /* PBXContainerItemProxy */; }; AF777A2F09B660B400EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4812500990CE2700FB32B8 /* Gears */; targetProxy = AF777A2E09B660B400EA3033 /* PBXContainerItemProxy */; }; AF777A3109B660B400EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AFA55E4E09935FF900F3E977 /* FlyingToasters */; targetProxy = AF777A3009B660B400EA3033 /* PBXContainerItemProxy */; }; AF777A3309B660B400EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF7777EA09B64E3100EA3033 /* FlipText */; targetProxy = AF777A3209B660B400EA3033 /* PBXContainerItemProxy */; }; AF777A3509B660B400EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF77773E09B6446500EA3033 /* FlipScreen3D */; targetProxy = AF777A3409B660B400EA3033 /* PBXContainerItemProxy */; }; AF777A3709B660B400EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AFA5603209936D5100F3E977 /* FlipFlop */; targetProxy = AF777A3609B660B400EA3033 /* PBXContainerItemProxy */; }; AF777A3909B660B400EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF6423F2099FF9C2000F4CD4 /* Extrusion */; targetProxy = AF777A3809B660B400EA3033 /* PBXContainerItemProxy */; }; AF777A3B09B660B500EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AFA55C0E0993431300F3E977 /* Engine */; targetProxy = AF777A3A09B660B500EA3033 /* PBXContainerItemProxy */; }; AF777A3D09B660B500EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AFA55E0D09935EDC00F3E977 /* Endgame */; targetProxy = AF777A3C09B660B500EA3033 /* PBXContainerItemProxy */; }; AF777A3F09B660B500EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF77786109B6536000EA3033 /* DNAlogo */; targetProxy = AF777A3E09B660B500EA3033 /* PBXContainerItemProxy */; }; AF777A4109B660B500EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4810EB09909FBA00FB32B8 /* DangerBall */; targetProxy = AF777A4009B660B500EA3033 /* PBXContainerItemProxy */; }; AF777A4309B660B500EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AFA55FD309936BFA00F3E977 /* CubeStorm */; targetProxy = AF777A4209B660B500EA3033 /* PBXContainerItemProxy */; }; AF777A4509B660B500EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AFA55D620993584B00F3E977 /* Cubenetic */; targetProxy = AF777A4409B660B500EA3033 /* PBXContainerItemProxy */; }; AF777A4709B660B500EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AFA56351099396C000F3E977 /* Cube21 */; targetProxy = AF777A4609B660B500EA3033 /* PBXContainerItemProxy */; }; AF777A4909B660B500EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AFA563130993951000F3E977 /* Crackberg */; targetProxy = AF777A4809B660B500EA3033 /* PBXContainerItemProxy */; }; AF777A4B09B660B600EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AFA55BAB099340CE00F3E977 /* Circuit */; targetProxy = AF777A4A09B660B600EA3033 /* PBXContainerItemProxy */; }; AF777A4D09B660B600EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF77784409B6528100EA3033 /* Carousel */; targetProxy = AF777A4C09B660B600EA3033 /* PBXContainerItemProxy */; }; AF777A4F09B660B600EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AFA55946099330B000F3E977 /* Cage */; targetProxy = AF777A4E09B660B600EA3033 /* PBXContainerItemProxy */; }; AF777A5109B660B600EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AFA55ACF09933CEF00F3E977 /* Bubble3D */; targetProxy = AF777A5009B660B600EA3033 /* PBXContainerItemProxy */; }; AF777A5309B660B600EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AFA55CA909934BB200F3E977 /* Boxed */; targetProxy = AF777A5209B660B600EA3033 /* PBXContainerItemProxy */; }; AF777A5509B660B600EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AFA55EC7099360E300F3E977 /* BouncingCow */; targetProxy = AF777A5409B660B600EA3033 /* PBXContainerItemProxy */; }; AF777A5709B660B600EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AFA562BF099392C600F3E977 /* Boing */; targetProxy = AF777A5609B660B600EA3033 /* PBXContainerItemProxy */; }; AF777A5909B660B600EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AFA5601409936CC800F3E977 /* BlockTube */; targetProxy = AF777A5809B660B600EA3033 /* PBXContainerItemProxy */; }; AF777A5B09B660B600EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AFA5615609937C0D00F3E977 /* BlinkBox */; targetProxy = AF777A5A09B660B600EA3033 /* PBXContainerItemProxy */; }; AF777A5D09B660B600EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF083A32099311D700277BE9 /* Atunnel */; targetProxy = AF777A5C09B660B600EA3033 /* PBXContainerItemProxy */; }; AF777A5F09B660B600EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF08398F09930B6B00277BE9 /* Atlantis */; targetProxy = AF777A5E09B660B600EA3033 /* PBXContainerItemProxy */; }; AF777A6109B660B700EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AFA5606209936F3800F3E977 /* AntSpotlight */; targetProxy = AF777A6009B660B700EA3033 /* PBXContainerItemProxy */; }; AF777A6309B660B700EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AFA562DA099393C900F3E977 /* AntMaze */; targetProxy = AF777A6209B660B700EA3033 /* PBXContainerItemProxy */; }; AF777A6509B660B700EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AFA5604A09936E2100F3E977 /* AntInspect */; targetProxy = AF777A6409B660B700EA3033 /* PBXContainerItemProxy */; }; AF78D176142DD8F3002AAF77 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AF78D177142DD8F3002AAF77 /* PBXContainerItemProxy */; }; AF794F65099748450059A8B0 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AF794F66099748450059A8B0 /* PBXContainerItemProxy */; }; AF794F8F09974A320059A8B0 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AF794F9009974A320059A8B0 /* PBXContainerItemProxy */; }; AF794FCE09974FA60059A8B0 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AF794FCF09974FA60059A8B0 /* PBXContainerItemProxy */; }; AF7ACFC119FF0A9200BD752B /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AF7ACFC219FF0A9200BD752B /* PBXContainerItemProxy */; }; AF7ACFDC19FF0BDB00BD752B /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF7ACFC019FF0A9200BD752B /* GeodesicGears */; targetProxy = AF7ACFDB19FF0BDB00BD752B /* PBXContainerItemProxy */; }; AF7E07FE15925DF200D81407 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4FF4930D52CA0800666F98 /* m6502.h */; targetProxy = AF7E07FD15925DF200D81407 /* PBXContainerItemProxy */; }; AF7E080015925DFE00D81407 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AFA56119099378CB00F3E977 /* molecules.h */; targetProxy = AF7E07FF15925DFE00D81407 /* PBXContainerItemProxy */; }; AF918978158FC00A002B5D1E /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AF918979158FC00A002B5D1E /* PBXContainerItemProxy */; }; AF97572E099C317000B05160 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AF97572F099C317000B05160 /* PBXContainerItemProxy */; }; AF975776099C374A00B05160 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AF975777099C374A00B05160 /* PBXContainerItemProxy */; }; AF9757C3099C3E6300B05160 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AF9757C4099C3E6300B05160 /* PBXContainerItemProxy */; }; AF975809099C41D500B05160 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AF97580A099C41D500B05160 /* PBXContainerItemProxy */; }; AF975866099C475900B05160 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AF975867099C475900B05160 /* PBXContainerItemProxy */; }; AF975A37099C681F00B05160 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AF975A38099C681F00B05160 /* PBXContainerItemProxy */; }; AF975A6D099C6AB200B05160 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AF975A6E099C6AB200B05160 /* PBXContainerItemProxy */; }; AF975A87099C6BC300B05160 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AF975A88099C6BC300B05160 /* PBXContainerItemProxy */; }; AF975AD8099C6EB100B05160 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AF975AD9099C6EB100B05160 /* PBXContainerItemProxy */; }; AF975AFD099C6FE400B05160 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AF975AFE099C6FE400B05160 /* PBXContainerItemProxy */; }; AF975C13099C8C1500B05160 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AF975C14099C8C1500B05160 /* PBXContainerItemProxy */; }; AF975C3E099C8DCF00B05160 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AF975C3F099C8DCF00B05160 /* PBXContainerItemProxy */; }; AF975C5E099C8F3F00B05160 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AF975C5F099C8F3F00B05160 /* PBXContainerItemProxy */; }; AF975D53099CA0F000B05160 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AF975D54099CA0F000B05160 /* PBXContainerItemProxy */; }; AF998EDB0A083DB30051049D /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AF998EDC0A083DB30051049D /* PBXContainerItemProxy */; }; AF998EF70A083E1D0051049D /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF998EDA0A083DB30051049D /* TopBlock */; targetProxy = AF998EF60A083E1D0051049D /* PBXContainerItemProxy */; }; AF9D466709B5109C006E59CF /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AF9D466809B5109C006E59CF /* PBXContainerItemProxy */; }; AF9D474509B5300A006E59CF /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AF9D474609B5300A006E59CF /* PBXContainerItemProxy */; }; AF9D476009B53166006E59CF /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AF9D476109B53166006E59CF /* PBXContainerItemProxy */; }; AF9D48DC09B53322006E59CF /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AF9D48DD09B53322006E59CF /* PBXContainerItemProxy */; }; AF9D48F509B535DA006E59CF /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AF9D48F609B535DA006E59CF /* PBXContainerItemProxy */; }; AF9D492C09B53CBA006E59CF /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AF9D492D09B53CBA006E59CF /* PBXContainerItemProxy */; }; AF9D495509B53FC9006E59CF /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AF9D495609B53FC9006E59CF /* PBXContainerItemProxy */; }; AF9D496D09B5411D006E59CF /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AF9D496E09B5411D006E59CF /* PBXContainerItemProxy */; }; AF9D499809B544C2006E59CF /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AF9D499909B544C2006E59CF /* PBXContainerItemProxy */; }; AF9D4C6A09B59F27006E59CF /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AF9D4C6B09B59F27006E59CF /* PBXContainerItemProxy */; }; AF9D4CE809B5AA8E006E59CF /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AF9D4CE909B5AA8E006E59CF /* PBXContainerItemProxy */; }; AF9D4D7F09B5B2DC006E59CF /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AF9D4D8009B5B2DC006E59CF /* PBXContainerItemProxy */; }; AF9D4DB009B5B71E006E59CF /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AF9D4DB109B5B71E006E59CF /* PBXContainerItemProxy */; }; AF9D4DED09B5BB19006E59CF /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AF9D4DEE09B5BB19006E59CF /* PBXContainerItemProxy */; }; AFA160921052FF87009B93AA /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF6425CC09A18855000F4CD4 /* HyperCube */; targetProxy = AFA160911052FF87009B93AA /* PBXContainerItemProxy */; }; AFA160941052FF87009B93AA /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF64260F09A18D6C000F4CD4 /* HyperBall */; targetProxy = AFA160931052FF87009B93AA /* PBXContainerItemProxy */; }; AFA2118D1CD59DAF00C0D2A1 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AFA2118E1CD59DAF00C0D2A1 /* PBXContainerItemProxy */; }; AFA211AA1CD5A08000C0D2A1 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AFA2118C1CD59DAF00C0D2A1 /* RaverHoop */; targetProxy = AFA211A91CD5A08000C0D2A1 /* PBXContainerItemProxy */; }; AFA3392F0B058505002B0E7D /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AFA339300B058505002B0E7D /* PBXContainerItemProxy */; }; AFA33B8F0B0585A4002B0E7D /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AFA3392E0B058505002B0E7D /* WebCollage */; targetProxy = AFA33B8E0B0585A4002B0E7D /* PBXContainerItemProxy */; }; AFA33BCF0B0587B2002B0E7D /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AFA33BC60B058740002B0E7D /* webcollage-helper */; targetProxy = AFA33BCE0B0587B2002B0E7D /* PBXContainerItemProxy */; }; AFA33BDC0B058952002B0E7D /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AFA33BC60B058740002B0E7D /* webcollage-helper */; targetProxy = AFA33BDB0B058952002B0E7D /* PBXContainerItemProxy */; }; AFA33C040B058E3C002B0E7D /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AFA33C020B058E17002B0E7D /* webcollage-perl */; targetProxy = AFA33C030B058E3C002B0E7D /* PBXContainerItemProxy */; }; AFA55947099330B000F3E977 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AFA55948099330B000F3E977 /* PBXContainerItemProxy */; }; AFA5596E0993317900F3E977 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AFA5596F0993317900F3E977 /* PBXContainerItemProxy */; }; AFA559930993322100F3E977 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AFA559940993322100F3E977 /* PBXContainerItemProxy */; }; AFA559B60993328000F3E977 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AFA559B70993328000F3E977 /* PBXContainerItemProxy */; }; AFA559D00993330600F3E977 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AFA559D10993330600F3E977 /* PBXContainerItemProxy */; }; AFA55A040993340300F3E977 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AFA55A050993340300F3E977 /* PBXContainerItemProxy */; }; AFA55A21099334A000F3E977 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AFA55A22099334A000F3E977 /* PBXContainerItemProxy */; }; AFA55A7A0993364300F3E977 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AFA55A7B0993364300F3E977 /* PBXContainerItemProxy */; }; AFA55AD009933CEF00F3E977 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AFA55AD109933CEF00F3E977 /* PBXContainerItemProxy */; }; AFA55B0A09933E0500F3E977 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AFA55B0B09933E0500F3E977 /* PBXContainerItemProxy */; }; AFA55B2609933E8D00F3E977 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AFA55B2709933E8D00F3E977 /* PBXContainerItemProxy */; }; AFA55B7A09933F7200F3E977 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AFA55B7B09933F7200F3E977 /* PBXContainerItemProxy */; }; AFA55B9209933FDA00F3E977 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AFA55B9309933FDA00F3E977 /* PBXContainerItemProxy */; }; AFA55BAC099340CE00F3E977 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AFA55BAD099340CE00F3E977 /* PBXContainerItemProxy */; }; AFA55BE50993429100F3E977 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AFA55BE60993429100F3E977 /* PBXContainerItemProxy */; }; AFA55C0F0993431300F3E977 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AFA55C100993431300F3E977 /* PBXContainerItemProxy */; }; AFA55C78099349A600F3E977 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AFA55C79099349A600F3E977 /* PBXContainerItemProxy */; }; AFA55CAA09934BB200F3E977 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AFA55CAB09934BB200F3E977 /* PBXContainerItemProxy */; }; AFA55CCD09934CE400F3E977 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AFA55CCE09934CE400F3E977 /* PBXContainerItemProxy */; }; AFA55D3D0993565300F3E977 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AFA55D3E0993565300F3E977 /* PBXContainerItemProxy */; }; AFA55D630993584B00F3E977 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AFA55D640993584B00F3E977 /* PBXContainerItemProxy */; }; AFA55D80099358C400F3E977 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AFA55D81099358C400F3E977 /* PBXContainerItemProxy */; }; AFA55DC909935D7000F3E977 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AFA55DCA09935D7000F3E977 /* PBXContainerItemProxy */; }; AFA55DF109935E4900F3E977 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AFA55DF209935E4900F3E977 /* PBXContainerItemProxy */; }; AFA55E0E09935EDC00F3E977 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AFA55E0F09935EDC00F3E977 /* PBXContainerItemProxy */; }; AFA55E3009935F8E00F3E977 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AFA55E3109935F8E00F3E977 /* PBXContainerItemProxy */; }; AFA55E4F09935FF900F3E977 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AFA55E5009935FF900F3E977 /* PBXContainerItemProxy */; }; AFA55EC8099360E300F3E977 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AFA55EC9099360E300F3E977 /* PBXContainerItemProxy */; }; AFA55F07099361B700F3E977 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AFA55F08099361B700F3E977 /* PBXContainerItemProxy */; }; AFA55F2B0993622F00F3E977 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AFA55F2C0993622F00F3E977 /* PBXContainerItemProxy */; }; AFA55F430993629000F3E977 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AFA55F440993629000F3E977 /* PBXContainerItemProxy */; }; AFA55F730993643600F3E977 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AFA55F740993643600F3E977 /* PBXContainerItemProxy */; }; AFA55FD409936BFA00F3E977 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AFA55FD509936BFA00F3E977 /* PBXContainerItemProxy */; }; AFA55FFA09936C6D00F3E977 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AFA55FFB09936C6D00F3E977 /* PBXContainerItemProxy */; }; AFA5601509936CC800F3E977 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AFA5601609936CC800F3E977 /* PBXContainerItemProxy */; }; AFA5603309936D5100F3E977 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AFA5603409936D5100F3E977 /* PBXContainerItemProxy */; }; AFA5604B09936E2100F3E977 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AFA5604C09936E2100F3E977 /* PBXContainerItemProxy */; }; AFA5606309936F3800F3E977 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AFA5606409936F3800F3E977 /* PBXContainerItemProxy */; }; AFA560AF0993718D00F3E977 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AFA560B00993718D00F3E977 /* PBXContainerItemProxy */; }; AFA560FE0993781600F3E977 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AFA560FF0993781600F3E977 /* PBXContainerItemProxy */; }; AFA5611E0993791D00F3E977 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AFA56119099378CB00F3E977 /* molecules.h */; targetProxy = AFA5611D0993791D00F3E977 /* PBXContainerItemProxy */; }; AFA5615709937C0D00F3E977 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AFA5615809937C0D00F3E977 /* PBXContainerItemProxy */; }; AFA5617C09937CF100F3E977 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AFA5617D09937CF100F3E977 /* PBXContainerItemProxy */; }; AFA5619E09937D7E00F3E977 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AFA5619F09937D7E00F3E977 /* PBXContainerItemProxy */; }; AFA562070993849F00F3E977 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AFA562080993849F00F3E977 /* PBXContainerItemProxy */; }; AFA562200993852500F3E977 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AFA562210993852500F3E977 /* PBXContainerItemProxy */; }; AFA562C0099392C600F3E977 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AFA562C1099392C600F3E977 /* PBXContainerItemProxy */; }; AFA562DB099393C900F3E977 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AFA562DC099393C900F3E977 /* PBXContainerItemProxy */; }; AFA562F30993943B00F3E977 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AFA562F40993943B00F3E977 /* PBXContainerItemProxy */; }; AFA563140993951000F3E977 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AFA563150993951000F3E977 /* PBXContainerItemProxy */; }; AFA56332099395ED00F3E977 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AFA56333099395ED00F3E977 /* PBXContainerItemProxy */; }; AFA56352099396C000F3E977 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AFA56353099396C000F3E977 /* PBXContainerItemProxy */; }; AFA5637A099397B300F3E977 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AFA5637B099397B300F3E977 /* PBXContainerItemProxy */; }; AFA563A5099398BB00F3E977 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AFA563A6099398BB00F3E977 /* PBXContainerItemProxy */; }; AFACE8741CC83458008B24CD /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AFACE8751CC83458008B24CD /* PBXContainerItemProxy */; }; AFACE8911CC8365F008B24CD /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AFACE8731CC83458008B24CD /* EnergyStream */; targetProxy = AFACE8901CC8365F008B24CD /* PBXContainerItemProxy */; }; AFB581B0102F363300342B11 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AFD571B50996D9DC00BA26F7 /* Juggle */; targetProxy = AFB581AF102F363300342B11 /* PBXContainerItemProxy */; }; AFB591A8178B812C00EA4005 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AFB591A9178B812C00EA4005 /* PBXContainerItemProxy */; }; AFB591C3178B821E00EA4005 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AFB591A7178B812C00EA4005 /* Hexadrop */; targetProxy = AFB591C2178B821E00EA4005 /* PBXContainerItemProxy */; }; AFBFE7401786405E00432B21 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AFF2867F17860E830050A578 /* QuasiCrystal */; targetProxy = AFBFE73F1786405E00432B21 /* PBXContainerItemProxy */; }; AFBFE7421786407000432B21 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF7510FF1782B5B900380EA1 /* Kaleidocycle */; targetProxy = AFBFE7411786407000432B21 /* PBXContainerItemProxy */; }; AFBFE74C178642DC00432B21 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AFBFE74D178642DC00432B21 /* PBXContainerItemProxy */; }; AFBFE7641786438900432B21 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF9D4DEC09B5BB19006E59CF /* Apple2 */; targetProxy = AFBFE7631786438900432B21 /* PBXContainerItemProxy */; }; AFBFE76A178647FE00432B21 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AFBFE76B178647FE00432B21 /* PBXContainerItemProxy */; }; AFBFE7811786482B00432B21 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF7776E409B63ABF00EA3033 /* Phosphor */; targetProxy = AFBFE7801786482B00432B21 /* PBXContainerItemProxy */; }; AFBFE785178648E600432B21 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AFBFE74B178642DC00432B21 /* Apple2-OSX */; targetProxy = AFBFE784178648E600432B21 /* PBXContainerItemProxy */; }; AFBFE787178648F500432B21 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AFBFE767178647FE00432B21 /* Phosphor-OSX */; targetProxy = AFBFE786178648F500432B21 /* PBXContainerItemProxy */; }; AFC0E8AC1CDC601A008CAFAC /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AFC0E8AD1CDC601A008CAFAC /* PBXContainerItemProxy */; }; AFC0E8C91CDC6125008CAFAC /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AFC0E8AB1CDC601A008CAFAC /* Hydrostat */; targetProxy = AFC0E8C81CDC6125008CAFAC /* PBXContainerItemProxy */; }; AFCAD5F90992DFE00009617A /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF9771D60989DC4A001F8B92 /* SaverTester */; targetProxy = AFCAD5F80992DFE00009617A /* PBXContainerItemProxy */; }; AFCF833C1AF5B515008BB7E1 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AFCF833D1AF5B515008BB7E1 /* PBXContainerItemProxy */; }; AFCF835C1AF5B683008BB7E1 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AFCF833B1AF5B515008BB7E1 /* SplitFlap */; targetProxy = AFCF835B1AF5B683008BB7E1 /* PBXContainerItemProxy */; }; AFD51B1C0F063B4A00471C02 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AFD51B1D0F063B4A00471C02 /* PBXContainerItemProxy */; }; AFD51B350F063B7800471C02 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AFD51B1B0F063B4A00471C02 /* Photopile */; targetProxy = AFD51B340F063B7800471C02 /* PBXContainerItemProxy */; }; AFD56DF20996A03800BA26F7 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AFD56DF30996A03800BA26F7 /* PBXContainerItemProxy */; }; AFD56EAF0996A72600BA26F7 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AFD56EB00996A72600BA26F7 /* PBXContainerItemProxy */; }; AFD56EDB0996A95700BA26F7 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AFD56EDC0996A95700BA26F7 /* PBXContainerItemProxy */; }; AFD56F0C0996AAFA00BA26F7 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AFD56F0D0996AAFA00BA26F7 /* PBXContainerItemProxy */; }; AFD56F240996AB8A00BA26F7 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AFD56F250996AB8A00BA26F7 /* PBXContainerItemProxy */; }; AFD56F500996AEEE00BA26F7 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AFD56F510996AEEE00BA26F7 /* PBXContainerItemProxy */; }; AFD56F6C0996B01600BA26F7 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AFD56F6D0996B01600BA26F7 /* PBXContainerItemProxy */; }; AFD56F8D0996B09400BA26F7 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AFD56F8E0996B09400BA26F7 /* PBXContainerItemProxy */; }; AFD56FA40996B10F00BA26F7 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AFD56FA50996B10F00BA26F7 /* PBXContainerItemProxy */; }; AFD56FBA0996B18F00BA26F7 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AFD56FBB0996B18F00BA26F7 /* PBXContainerItemProxy */; }; AFD56FD00996B20900BA26F7 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AFD56FD10996B20900BA26F7 /* PBXContainerItemProxy */; }; AFD56FF90996B43800BA26F7 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AFD56FFA0996B43800BA26F7 /* PBXContainerItemProxy */; }; AFD570100996B4CC00BA26F7 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AFD570110996B4CC00BA26F7 /* PBXContainerItemProxy */; }; AFD570270996B56D00BA26F7 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AFD570280996B56D00BA26F7 /* PBXContainerItemProxy */; }; AFD570440996B61600BA26F7 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AFD570450996B61600BA26F7 /* PBXContainerItemProxy */; }; AFD5705A0996B6A300BA26F7 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AFD5705B0996B6A300BA26F7 /* PBXContainerItemProxy */; }; AFD570700996B72700BA26F7 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AFD570710996B72700BA26F7 /* PBXContainerItemProxy */; }; AFD570860996B80300BA26F7 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AFD570870996B80300BA26F7 /* PBXContainerItemProxy */; }; AFD5709C0996B88E00BA26F7 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AFD5709D0996B88E00BA26F7 /* PBXContainerItemProxy */; }; AFD570B20996B93000BA26F7 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AFD570B30996B93000BA26F7 /* PBXContainerItemProxy */; }; AFD570CA0996B9F800BA26F7 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AFD570CB0996B9F800BA26F7 /* PBXContainerItemProxy */; }; AFD570EB0996BBBF00BA26F7 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AFD570EC0996BBBF00BA26F7 /* PBXContainerItemProxy */; }; AFD571140996BE9300BA26F7 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AFD571150996BE9300BA26F7 /* PBXContainerItemProxy */; }; AFD5712D0996BF2E00BA26F7 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AFD5712E0996BF2E00BA26F7 /* PBXContainerItemProxy */; }; AFD571440996C01700BA26F7 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AFD571450996C01700BA26F7 /* PBXContainerItemProxy */; }; AFD5715A0996C0CE00BA26F7 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AFD5715B0996C0CE00BA26F7 /* PBXContainerItemProxy */; }; AFD571B60996D9DC00BA26F7 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AFD571B70996D9DC00BA26F7 /* PBXContainerItemProxy */; }; AFD572230996E4A300BA26F7 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AFD572240996E4A300BA26F7 /* PBXContainerItemProxy */; }; AFD5726E0996EE8500BA26F7 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AFD5726F0996EE8500BA26F7 /* PBXContainerItemProxy */; }; AFD572A60996F99600BA26F7 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AFD572A70996F99600BA26F7 /* PBXContainerItemProxy */; }; AFD572C30996FC0F00BA26F7 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AFD572C40996FC0F00BA26F7 /* PBXContainerItemProxy */; }; AFD572FA099701C000BA26F7 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AFD572FB099701C000BA26F7 /* PBXContainerItemProxy */; }; AFD5735E0997411200BA26F7 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AFD5735F0997411200BA26F7 /* PBXContainerItemProxy */; }; AFDA658F178A52B70070D24B /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AFDA6590178A52B70070D24B /* PBXContainerItemProxy */; }; AFDA65AA178A54690070D24B /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AFDA658E178A52B70070D24B /* Unknown Pleasures */; targetProxy = AFDA65A9178A54690070D24B /* PBXContainerItemProxy */; }; AFE2A4570E2E904600ADB298 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AFE2A4580E2E904600ADB298 /* PBXContainerItemProxy */; }; AFE2A46F0E2E908E00ADB298 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AFE2A4560E2E904600ADB298 /* SkyTentacles */; targetProxy = AFE2A46E0E2E908E00ADB298 /* PBXContainerItemProxy */; }; AFE30BE90E52B14700CCF4A5 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AFE30BEA0E52B14700CCF4A5 /* PBXContainerItemProxy */; }; AFE6A1830CDD7B2E002805BF /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AFE6A1840CDD7B2E002805BF /* PBXContainerItemProxy */; }; AFE6A19C0CDD7B7F002805BF /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AFE6A1820CDD7B2E002805BF /* MoebiusGears */; targetProxy = AFE6A19B0CDD7B7F002805BF /* PBXContainerItemProxy */; }; AFE6A41C0CDD7FAA002805BF /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AFE6A41D0CDD7FAA002805BF /* PBXContainerItemProxy */; }; AFE6A4300CDD7FEE002805BF /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AFE6A41B0CDD7FAA002805BF /* Abstractile */; targetProxy = AFE6A42F0CDD7FEE002805BF /* PBXContainerItemProxy */; }; AFEC23CE1CB6EAE100DE138F /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AFEC23CF1CB6EAE100DE138F /* PBXContainerItemProxy */; }; AFEC23EB1CB6ED0800DE138F /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AFEC23CD1CB6EAE100DE138F /* DymaxionMap */; targetProxy = AFEC23EA1CB6ED0800DE138F /* PBXContainerItemProxy */; }; AFEE104E1D13406000AAC8F7 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AFEE104F1D13406000AAC8F7 /* PBXContainerItemProxy */; }; AFEE106B1D13424C00AAC8F7 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AFEE104D1D13406000AAC8F7 /* CubeTwist */; targetProxy = AFEE106A1D13424C00AAC8F7 /* PBXContainerItemProxy */; }; AFEE106D1D15EB0700AAC8F7 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AFEE106E1D15EB0700AAC8F7 /* PBXContainerItemProxy */; }; AFEE108A1D15EBF900AAC8F7 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AFEE106C1D15EB0700AAC8F7 /* CubeStack */; targetProxy = AFEE10891D15EBF900AAC8F7 /* PBXContainerItemProxy */; }; AFEE108C1D17E20B00AAC8F7 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AFEE108D1D17E20B00AAC8F7 /* PBXContainerItemProxy */; }; AFEE10A91D17E32100AAC8F7 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AFEE108B1D17E20B00AAC8F7 /* Splodesic */; targetProxy = AFEE10A81D17E32100AAC8F7 /* PBXContainerItemProxy */; }; AFF2868017860E830050A578 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AFF2868117860E830050A578 /* PBXContainerItemProxy */; }; AFF3C9E917CCAC440028F240 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AFF3C9EA17CCAC440028F240 /* PBXContainerItemProxy */; }; AFF3CA0117CCAE210028F240 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AFF3C9E817CCAC440028F240 /* Geodesic */; targetProxy = AFF3CA0017CCAE210028F240 /* PBXContainerItemProxy */; }; AFF463370C4403E400EE6509 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AFF463380C4403E400EE6509 /* PBXContainerItemProxy */; }; AFF463530C44062500EE6509 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AFF463360C4403E400EE6509 /* CWaves */; targetProxy = AFF463520C44062500EE6509 /* PBXContainerItemProxy */; }; AFF463590C440AEF00EE6509 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AFF4635A0C440AEF00EE6509 /* PBXContainerItemProxy */; }; AFF4636F0C440B3B00EE6509 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AFF463580C440AEF00EE6509 /* GLCells */; targetProxy = AFF4636E0C440B3B00EE6509 /* PBXContainerItemProxy */; }; AFFAB31619158CE40020F021 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AFFAB31719158CE40020F021 /* PBXContainerItemProxy */; }; AFFAB33519158F1E0020F021 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AFFAB31519158CE40020F021 /* ProjectivePlane */; targetProxy = AFFAB33419158F1E0020F021 /* PBXContainerItemProxy */; }; CE04E8CB1B9B61D00085910B /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = CE3D01511B76F4C100993C75 /* TestX11 */; targetProxy = CE04E8CA1B9B61D00085910B /* PBXContainerItemProxy */; }; CE3D01521B76F4C100993C75 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = CE3D01531B76F4C100993C75 /* PBXContainerItemProxy */; }; /* End PBXTargetDependency section */ /* Begin PBXVariantGroup section */ 089C165CFE840E0CC02AAC07 /* InfoPlist.strings */ = { isa = PBXVariantGroup; children = ( 089C165DFE840E0CC02AAC07 /* InfoPlist.strings */, ); name = InfoPlist.strings; sourceTree = ""; }; AF9772E10989DFC6001F8B92 /* SaverRunner.nib */ = { isa = PBXVariantGroup; children = ( AF9772E20989DFC6001F8B92 /* English */, ); name = SaverRunner.nib; sourceTree = ""; }; /* End PBXVariantGroup section */ /* Begin XCBuildConfiguration section */ AF0839A009930B6B00277BE9 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Debug; }; AF0839A109930B6B00277BE9 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Release; }; AF083A46099311D700277BE9 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Debug; }; AF083A47099311D700277BE9 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Release; }; AF0DC7BB0C4C73F600D76972 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Debug; }; AF0DC7BC0C4C73F600D76972 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Release; }; AF0DCA540C4CBB0D00D76972 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Debug; }; AF0DCA550C4CBB0D00D76972 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Release; }; AF137D420F075C9C004DE3B2 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { PRODUCT_NAME = Obsolete; }; name = Debug; }; AF137D430F075C9C004DE3B2 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { PRODUCT_NAME = Obsolete; }; name = Release; }; AF1A17710D6D6EE3008AF328 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Debug; }; AF1A17720D6D6EE3008AF328 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Release; }; AF1ADA0F18500FA200932759 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { BUNDLE_IDENTIFIER = "org.jwz.${PROJECT_NAME:rfc1034identifier}.updater"; FRAMEWORK_SEARCH_PATHS = ( "$(inherited)", "$(SRCROOT)", ); INFOPLIST_FILE = "$(SRCROOT)/Updater.plist"; "OTHER_CFLAGS[sdk=macosx*]" = "${OBJC_NO_GC_CFLAGS}"; PRODUCT_BUNDLE_IDENTIFIER = "$(BUNDLE_IDENTIFIER)"; PRODUCT_NAME = "$(TARGET_NAME)"; WRAPPER_EXTENSION = app; }; name = Debug; }; AF1ADA1018500FA200932759 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { BUNDLE_IDENTIFIER = "org.jwz.${PROJECT_NAME:rfc1034identifier}.updater"; FRAMEWORK_SEARCH_PATHS = ( "$(inherited)", "$(SRCROOT)", ); INFOPLIST_FILE = "$(SRCROOT)/Updater.plist"; "OTHER_CFLAGS[sdk=macosx*]" = "${OBJC_NO_GC_CFLAGS}"; PRODUCT_BUNDLE_IDENTIFIER = "$(BUNDLE_IDENTIFIER)"; PRODUCT_NAME = "$(TARGET_NAME)"; WRAPPER_EXTENSION = app; }; name = Release; }; AF1B0FBA1D7AB4740011DBE4 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); PRODUCT_NAME = "$(TARGET_NAME)"; }; name = Debug; }; AF1B0FBB1D7AB4740011DBE4 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); PRODUCT_NAME = "$(TARGET_NAME)"; }; name = Release; }; AF32D9F20F3AD0B40080F535 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Debug; }; AF32D9F30F3AD0B40080F535 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Release; }; AF3581D31431D47B00E09C51 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Debug; }; AF3581D41431D47B00E09C51 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Release; }; AF358214143330F900E09C51 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Debug; }; AF358215143330F900E09C51 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Release; }; AF35E89E0E63823600691F2F /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Debug; }; AF35E89F0E63823600691F2F /* Release */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Release; }; AF39382D1D0FBD6A00205406 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); PRODUCT_NAME = "$(TARGET_NAME)"; }; name = Debug; }; AF39382E1D0FBD6A00205406 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); PRODUCT_NAME = "$(TARGET_NAME)"; }; name = Release; }; AF39E294198A11F60064A58D /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); PRODUCT_NAME = WindupRobot; }; name = Debug; }; AF39E295198A11F60064A58D /* Release */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); PRODUCT_NAME = WindupRobot; }; name = Release; }; AF3C71570D624BF50030CC0D /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Debug; }; AF3C71580D624BF50030CC0D /* Release */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Release; }; AF46E9E21CBBA2B300240FBC /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); PRODUCT_NAME = "$(TARGET_NAME)"; }; name = Debug; }; AF46E9E31CBBA2B300240FBC /* Release */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); PRODUCT_NAME = "$(TARGET_NAME)"; }; name = Release; }; AF476FC4099D154F001F091E /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Debug; }; AF476FC5099D154F001F091E /* Release */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Release; }; AF476FE9099D1686001F091E /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Debug; }; AF476FEA099D1686001F091E /* Release */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Release; }; AF47705A099D4385001F091E /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Debug; }; AF47705B099D4385001F091E /* Release */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Release; }; AF477177099D4786001F091E /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Debug; }; AF477178099D4786001F091E /* Release */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Release; }; AF47718D099D4803001F091E /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Debug; }; AF47718E099D4803001F091E /* Release */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Release; }; AF4771B5099D4949001F091E /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Debug; }; AF4771B6099D4949001F091E /* Release */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Release; }; AF4771E9099D4D9A001F091E /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Debug; }; AF4771EA099D4D9A001F091E /* Release */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Release; }; AF477200099D4E63001F091E /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Debug; }; AF477201099D4E63001F091E /* Release */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Release; }; AF477216099D4EE8001F091E /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Debug; }; AF477217099D4EE8001F091E /* Release */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Release; }; AF47722C099D4F67001F091E /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Debug; }; AF47722D099D4F67001F091E /* Release */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Release; }; AF477261099D5717001F091E /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Debug; }; AF477262099D5717001F091E /* Release */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Release; }; AF477279099D57B9001F091E /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Debug; }; AF47727A099D57B9001F091E /* Release */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Release; }; AF477291099D5926001F091E /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Debug; }; AF477292099D5926001F091E /* Release */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Release; }; AF477390099D65A1001F091E /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Debug; }; AF477391099D65A1001F091E /* Release */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Release; }; AF4773A8099D6648001F091E /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Debug; }; AF4773A9099D6648001F091E /* Release */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Release; }; AF4773CF099D67B9001F091E /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Debug; }; AF4773D0099D67B9001F091E /* Release */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Release; }; AF477410099D69E7001F091E /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Debug; }; AF477411099D69E7001F091E /* Release */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Release; }; AF477435099D7C70001F091E /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Debug; }; AF477436099D7C70001F091E /* Release */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Release; }; AF477450099D7D33001F091E /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Debug; }; AF477451099D7D33001F091E /* Release */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Release; }; AF477491099D89E4001F091E /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Debug; }; AF477492099D89E4001F091E /* Release */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Release; }; AF4774A7099D8A74001F091E /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Debug; }; AF4774A8099D8A74001F091E /* Release */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Release; }; AF4774C2099D8B5F001F091E /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Debug; }; AF4774C3099D8B5F001F091E /* Release */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Release; }; AF4774DC099D8BFF001F091E /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Debug; }; AF4774DD099D8BFF001F091E /* Release */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Release; }; AF47756B099D9A1A001F091E /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Debug; }; AF47756C099D9A1A001F091E /* Release */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Release; }; AF477591099D9C28001F091E /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Debug; }; AF477592099D9C28001F091E /* Release */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Release; }; AF4775AD099D9CF7001F091E /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Debug; }; AF4775AE099D9CF7001F091E /* Release */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Release; }; AF4775E6099D9F69001F091E /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Debug; }; AF4775E7099D9F69001F091E /* Release */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Release; }; AF477600099DA030001F091E /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Debug; }; AF477601099DA030001F091E /* Release */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Release; }; AF477621099DA26C001F091E /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Debug; }; AF477622099DA26C001F091E /* Release */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Release; }; AF477652099DA6D0001F091E /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Debug; }; AF477653099DA6D0001F091E /* Release */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Release; }; AF477668099DA78E001F091E /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Debug; }; AF477669099DA78E001F091E /* Release */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Release; }; AF47767E099DA849001F091E /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Debug; }; AF47767F099DA849001F091E /* Release */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Release; }; AF47769D099DAA6F001F091E /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Debug; }; AF47769E099DAA6F001F091E /* Release */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Release; }; AF4776B8099DABDD001F091E /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Debug; }; AF4776B9099DABDD001F091E /* Release */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Release; }; AF4776CE099DAC8A001F091E /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Debug; }; AF4776CF099DAC8A001F091E /* Release */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Release; }; AF4776E9099DADDF001F091E /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Debug; }; AF4776EA099DADDF001F091E /* Release */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Release; }; AF4776FF099DAE7A001F091E /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Debug; }; AF477700099DAE7A001F091E /* Release */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Release; }; AF47771B099DAF9F001F091E /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Debug; }; AF47771C099DAF9F001F091E /* Release */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Release; }; AF477731099DB044001F091E /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Debug; }; AF477732099DB044001F091E /* Release */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Release; }; AF477760099DB61E001F091E /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Debug; }; AF477761099DB61E001F091E /* Release */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Release; }; AF477782099DB965001F091E /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Debug; }; AF477783099DB965001F091E /* Release */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Release; }; AF47779E099DBA90001F091E /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Debug; }; AF47779F099DBA90001F091E /* Release */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Release; }; AF4777DF099DC183001F091E /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Debug; }; AF4777E0099DC183001F091E /* Release */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Release; }; AF4778B9099DDB79001F091E /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Debug; }; AF4778BA099DDB79001F091E /* Release */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Release; }; AF4778D5099DDCAE001F091E /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Debug; }; AF4778D6099DDCAE001F091E /* Release */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Release; }; AF4778F6099DDDC8001F091E /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Debug; }; AF4778F7099DDDC8001F091E /* Release */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Release; }; AF477917099DE379001F091E /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Debug; }; AF477918099DE379001F091E /* Release */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Release; }; AF477938099DE4C7001F091E /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Debug; }; AF477939099DE4C7001F091E /* Release */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Release; }; AF4808C3098C3B8B00FB32B8 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { INSTALL_PATH = /usr/local/lib; PRODUCT_BUNDLE_IDENTIFIER = "${BUNDLE_IDENTIFIER}"; SKIP_INSTALL = YES; SUPPORTED_PLATFORMS = "macosx iphonesimulator iphoneos"; VALID_ARCHS = "i386 x86_64 armv6 armv7 armv7s arm64"; }; name = Debug; }; AF4808C4098C3B8B00FB32B8 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { INSTALL_PATH = /usr/local/lib; PRODUCT_BUNDLE_IDENTIFIER = "${BUNDLE_IDENTIFIER}"; SKIP_INSTALL = YES; SUPPORTED_PLATFORMS = "macosx iphonesimulator iphoneos"; VALID_ARCHS = "i386 x86_64 armv6 armv7 armv7s arm64"; }; name = Release; }; AF480ABB098C66E300FB32B8 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { PRODUCT_NAME = "All Savers (XScreenSaver)"; }; name = Debug; }; AF480ABC098C66E300FB32B8 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { PRODUCT_NAME = "All Savers (XScreenSaver)"; }; name = Release; }; AF480C56098E301400FB32B8 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Debug; }; AF480C57098E301400FB32B8 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Release; }; AF480D65098EED6E00FB32B8 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { PRODUCT_NAME = "All Savers (XLockmore)"; }; name = Debug; }; AF480D66098EED6E00FB32B8 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { PRODUCT_NAME = "All Savers (XLockmore)"; }; name = Release; }; AF480D68098EED6E00FB32B8 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { PRODUCT_NAME = "All Savers (OpenGL)"; }; name = Debug; }; AF480D69098EED6E00FB32B8 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { PRODUCT_NAME = "All Savers (OpenGL)"; }; name = Release; }; AF480D6B098EED6E00FB32B8 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { PRODUCT_NAME = "All Savers"; }; name = Debug; }; AF480D6C098EED6E00FB32B8 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { PRODUCT_NAME = "All Savers"; }; name = Release; }; AF480D7F098EEDDE00FB32B8 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Debug; }; AF480D80098EEDDE00FB32B8 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Release; }; AF4810F909909FBA00FB32B8 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Debug; }; AF4810FA09909FBA00FB32B8 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Release; }; AF4812620990CE2700FB32B8 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Debug; }; AF4812630990CE2700FB32B8 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Release; }; AF4812C40990D3D900FB32B8 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Debug; }; AF4812C50990D3D900FB32B8 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Release; }; AF48DF010A0C25E000F94CF9 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Debug; }; AF48DF020A0C25E000F94CF9 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Release; }; AF4A345B102A593600A81B2A /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Debug; }; AF4A345C102A593600A81B2A /* Release */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Release; }; AF4FD6F80CE7A486005EE58E /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Debug; }; AF4FD6F90CE7A486005EE58E /* Release */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Release; }; AF4FF4950D52CA0800666F98 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { PRODUCT_NAME = m6502.h; }; name = Debug; }; AF4FF4960D52CA0800666F98 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { PRODUCT_NAME = m6502.h; }; name = Release; }; AF4FF4CC0D52CBDE00666F98 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Debug; }; AF4FF4CD0D52CBDE00666F98 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Release; }; AF5C9B0B1A0CCE6E00B0147A /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Debug; }; AF5C9B0C1A0CCE6E00B0147A /* Release */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Release; }; AF63A8041AB4EDDB00593C75 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); PRODUCT_NAME = RomanBoy; }; name = Debug; }; AF63A8051AB4EDDB00593C75 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); PRODUCT_NAME = RomanBoy; }; name = Release; }; AF63F44C1C3465BE0033E133 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; ASSETCATALOG_COMPILER_LAUNCHIMAGE_NAME = LaunchImage; BUNDLE_IDENTIFIER = "org.jwz.${PROJECT_NAME:rfc1034identifier}.apple2"; CODE_SIGN_IDENTITY = "iPhone Developer"; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; GCC_PREPROCESSOR_DEFINITIONS = ( "USE_IPHONE=1", "APPLE2_ONLY=1", "$(inherited)", ); "GCC_WARN_64_TO_32_BIT_CONVERSION[arch=*64]" = NO; INFOPLIST_FILE = iSaverRunner.plist; INSTALL_PATH = "$(HOME)/Applications"; PRODUCT_BUNDLE_IDENTIFIER = "$(BUNDLE_IDENTIFIER)"; PRODUCT_NAME = Apple2; PROVISIONING_PROFILE = ""; SDKROOT = iphoneos; WRAPPER_EXTENSION = app; }; name = Debug; }; AF63F44D1C3465BE0033E133 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; ASSETCATALOG_COMPILER_LAUNCHIMAGE_NAME = LaunchImage; BUNDLE_IDENTIFIER = "org.jwz.${PROJECT_NAME:rfc1034identifier}.apple2"; CODE_SIGN_IDENTITY = "iPhone Developer"; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; GCC_PREPROCESSOR_DEFINITIONS = ( "USE_IPHONE=1", "APPLE2_ONLY=1", "$(inherited)", ); "GCC_WARN_64_TO_32_BIT_CONVERSION[arch=*64]" = NO; INFOPLIST_FILE = iSaverRunner.plist; INSTALL_PATH = "$(HOME)/Applications"; PRODUCT_BUNDLE_IDENTIFIER = "$(BUNDLE_IDENTIFIER)"; PRODUCT_NAME = Apple2; PROVISIONING_PROFILE = ""; SDKROOT = iphoneos; WRAPPER_EXTENSION = app; }; name = Release; }; AF63F4721C34682A0033E133 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; ASSETCATALOG_COMPILER_LAUNCHIMAGE_NAME = LaunchImage; BUNDLE_IDENTIFIER = "org.jwz.${PROJECT_NAME:rfc1034identifier}.phosphor"; CODE_SIGN_IDENTITY = "iPhone Developer"; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; GCC_PREPROCESSOR_DEFINITIONS = ( "USE_IPHONE=1", "PHOSPHOR_ONLY=1", "$(inherited)", ); "GCC_WARN_64_TO_32_BIT_CONVERSION[arch=*64]" = NO; INFOPLIST_FILE = iSaverRunner.plist; INSTALL_PATH = "$(HOME)/Applications"; PRODUCT_BUNDLE_IDENTIFIER = "$(BUNDLE_IDENTIFIER)"; PRODUCT_NAME = Phosphor; PROVISIONING_PROFILE = ""; SDKROOT = iphoneos; WRAPPER_EXTENSION = app; }; name = Debug; }; AF63F4731C34682A0033E133 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; ASSETCATALOG_COMPILER_LAUNCHIMAGE_NAME = LaunchImage; BUNDLE_IDENTIFIER = "org.jwz.${PROJECT_NAME:rfc1034identifier}.phosphor"; CODE_SIGN_IDENTITY = "iPhone Developer"; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; GCC_PREPROCESSOR_DEFINITIONS = ( "USE_IPHONE=1", "PHOSPHOR_ONLY=1", "$(inherited)", ); "GCC_WARN_64_TO_32_BIT_CONVERSION[arch=*64]" = NO; INFOPLIST_FILE = iSaverRunner.plist; INSTALL_PATH = "$(HOME)/Applications"; PRODUCT_BUNDLE_IDENTIFIER = "$(BUNDLE_IDENTIFIER)"; PRODUCT_NAME = Phosphor; PROVISIONING_PROFILE = ""; SDKROOT = iphoneos; WRAPPER_EXTENSION = app; }; name = Release; }; AF63F4981C3469FC0033E133 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; ASSETCATALOG_COMPILER_LAUNCHIMAGE_NAME = LaunchImage; BUNDLE_IDENTIFIER = "org.jwz.${PROJECT_NAME:rfc1034identifier}.testX11"; CODE_SIGN_IDENTITY = "iPhone Developer"; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; GCC_PREPROCESSOR_DEFINITIONS = ( "USE_IPHONE=1", "TESTX11_ONLY=1", "$(inherited)", ); "GCC_WARN_64_TO_32_BIT_CONVERSION[arch=*64]" = NO; INFOPLIST_FILE = iSaverRunner.plist; INSTALL_PATH = "$(HOME)/Applications"; PRODUCT_BUNDLE_IDENTIFIER = "$(BUNDLE_IDENTIFIER)"; PRODUCT_NAME = TestX11; PROVISIONING_PROFILE = ""; SDKROOT = iphoneos; WRAPPER_EXTENSION = app; }; name = Debug; }; AF63F4991C3469FC0033E133 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; ASSETCATALOG_COMPILER_LAUNCHIMAGE_NAME = LaunchImage; BUNDLE_IDENTIFIER = "org.jwz.${PROJECT_NAME:rfc1034identifier}.testX11"; CODE_SIGN_IDENTITY = "iPhone Developer"; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; GCC_PREPROCESSOR_DEFINITIONS = ( "USE_IPHONE=1", "TESTX11_ONLY=1", "$(inherited)", ); "GCC_WARN_64_TO_32_BIT_CONVERSION[arch=*64]" = NO; INFOPLIST_FILE = iSaverRunner.plist; INSTALL_PATH = "$(HOME)/Applications"; PRODUCT_BUNDLE_IDENTIFIER = "$(BUNDLE_IDENTIFIER)"; PRODUCT_NAME = TestX11; PROVISIONING_PROFILE = ""; SDKROOT = iphoneos; WRAPPER_EXTENSION = app; }; name = Release; }; AF642403099FF9C2000F4CD4 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Debug; }; AF642404099FF9C2000F4CD4 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Release; }; AF6425DA09A18855000F4CD4 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Debug; }; AF6425DB09A18855000F4CD4 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Release; }; AF6425FA09A189EC000F4CD4 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Debug; }; AF6425FB09A189EC000F4CD4 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Release; }; AF64261D09A18D6C000F4CD4 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Debug; }; AF64261E09A18D6C000F4CD4 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Release; }; AF64263A09A18F54000F4CD4 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Debug; }; AF64263B09A18F54000F4CD4 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Release; }; AF64265D09A19229000F4CD4 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Debug; }; AF64265E09A19229000F4CD4 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Release; }; AF64268909A194B0000F4CD4 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Debug; }; AF64268A09A194B0000F4CD4 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Release; }; AF64277F09A1D37A000F4CD4 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Debug; }; AF64278009A1D37A000F4CD4 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Release; }; AF6427B609A2DE36000F4CD4 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Debug; }; AF6427B709A2DE36000F4CD4 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Release; }; AF68A49019196CF800D41CD1 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { PRODUCT_NAME = Tessellimage; }; name = Debug; }; AF68A49119196CF800D41CD1 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { PRODUCT_NAME = Tessellimage; }; name = Release; }; AF73FF341A09877F00E485E9 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { PRODUCT_NAME = BinaryRing; }; name = Debug; }; AF73FF351A09877F00E485E9 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { PRODUCT_NAME = BinaryRing; }; name = Release; }; AF7511101782B5B900380EA1 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); PRODUCT_NAME = Kaleidocycle; }; name = Debug; }; AF7511111782B5B900380EA1 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); PRODUCT_NAME = Kaleidocycle; }; name = Release; }; AF7776F409B63ABF00EA3033 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Debug; }; AF7776F509B63ABF00EA3033 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Release; }; AF77772809B6416100EA3033 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Debug; }; AF77772909B6416100EA3033 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Release; }; AF77774F09B6446500EA3033 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Debug; }; AF77775009B6446500EA3033 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Release; }; AF77778609B6497800EA3033 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Debug; }; AF77778709B6497800EA3033 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Release; }; AF7777A009B64A5200EA3033 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Debug; }; AF7777A109B64A5200EA3033 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Release; }; AF7777BA09B64B2600EA3033 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Debug; }; AF7777BB09B64B2600EA3033 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Release; }; AF7777E209B64C6B00EA3033 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Debug; }; AF7777E309B64C6B00EA3033 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Release; }; AF7777FC09B64E3100EA3033 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Debug; }; AF7777FD09B64E3100EA3033 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Release; }; AF77782309B6504400EA3033 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Debug; }; AF77782409B6504400EA3033 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Release; }; AF77785609B6528100EA3033 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Debug; }; AF77785709B6528100EA3033 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Release; }; AF77787209B6536000EA3033 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Debug; }; AF77787309B6536000EA3033 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Release; }; AF77788D09B6563500EA3033 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { "OTHER_CFLAGS[sdk=macosx*]" = ( "$(OBJC_GC_CFLAGS)", "-DDEBUG", ); }; name = Debug; }; AF77788E09B6563500EA3033 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Release; }; AF7778B309B659C800EA3033 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Debug; }; AF7778B409B659C800EA3033 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Release; }; AF78D187142DD8F3002AAF77 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Debug; }; AF78D188142DD8F3002AAF77 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Release; }; AF794F72099748450059A8B0 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Debug; }; AF794F73099748450059A8B0 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Release; }; AF794F9C09974A320059A8B0 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Debug; }; AF794F9D09974A320059A8B0 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Release; }; AF794FDB09974FA60059A8B0 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Debug; }; AF794FDC09974FA60059A8B0 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Release; }; AF7ACFD219FF0A9200BD752B /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); PRODUCT_NAME = GeodesicGears; }; name = Debug; }; AF7ACFD319FF0A9200BD752B /* Release */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); PRODUCT_NAME = GeodesicGears; }; name = Release; }; AF91898D158FC00A002B5D1E /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; ASSETCATALOG_COMPILER_LAUNCHIMAGE_NAME = LaunchImage; BUNDLE_IDENTIFIER = "org.jwz.${PROJECT_NAME:rfc1034identifier}"; CODE_SIGN_IDENTITY = "iPhone Developer"; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; GCC_PREPROCESSOR_DEFINITIONS = ( "USE_IPHONE=1", "$(inherited)", ); "GCC_WARN_64_TO_32_BIT_CONVERSION[arch=*64]" = NO; INFOPLIST_FILE = iSaverRunner.plist; INSTALL_PATH = "$(HOME)/Applications"; PRODUCT_BUNDLE_IDENTIFIER = "${BUNDLE_IDENTIFIER}"; PRODUCT_NAME = XScreenSaver; PROVISIONING_PROFILE = ""; SDKROOT = iphoneos; WRAPPER_EXTENSION = app; }; name = Debug; }; AF91898E158FC00A002B5D1E /* Release */ = { isa = XCBuildConfiguration; buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; ASSETCATALOG_COMPILER_LAUNCHIMAGE_NAME = LaunchImage; BUNDLE_IDENTIFIER = "org.jwz.${PROJECT_NAME:rfc1034identifier}"; CODE_SIGN_IDENTITY = "iPhone Developer"; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; GCC_PREPROCESSOR_DEFINITIONS = ( "USE_IPHONE=1", "$(inherited)", ); "GCC_WARN_64_TO_32_BIT_CONVERSION[arch=*64]" = NO; INFOPLIST_FILE = iSaverRunner.plist; INSTALL_PATH = "$(HOME)/Applications"; PRODUCT_BUNDLE_IDENTIFIER = "${BUNDLE_IDENTIFIER}"; PRODUCT_NAME = XScreenSaver; PROVISIONING_PROFILE = ""; SDKROOT = iphoneos; WRAPPER_EXTENSION = app; }; name = Release; }; AF97573B099C317000B05160 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Debug; }; AF97573C099C317000B05160 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Release; }; AF975783099C374A00B05160 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Debug; }; AF975784099C374A00B05160 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Release; }; AF9757D0099C3E6300B05160 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Debug; }; AF9757D1099C3E6300B05160 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Release; }; AF975816099C41D500B05160 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Debug; }; AF975817099C41D500B05160 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Release; }; AF975873099C475900B05160 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Debug; }; AF975874099C475900B05160 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Release; }; AF975A44099C681F00B05160 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Debug; }; AF975A45099C681F00B05160 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Release; }; AF975A7A099C6AB200B05160 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Debug; }; AF975A7B099C6AB200B05160 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Release; }; AF975A94099C6BC300B05160 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Debug; }; AF975A95099C6BC300B05160 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Release; }; AF975AE5099C6EB100B05160 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Debug; }; AF975AE6099C6EB100B05160 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Release; }; AF975B0A099C6FE400B05160 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Debug; }; AF975B0B099C6FE400B05160 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Release; }; AF975C20099C8C1500B05160 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Debug; }; AF975C21099C8C1500B05160 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Release; }; AF975C4C099C8DCF00B05160 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Debug; }; AF975C4D099C8DCF00B05160 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Release; }; AF975C6C099C8F3F00B05160 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Debug; }; AF975C6D099C8F3F00B05160 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Release; }; AF975D61099CA0F000B05160 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Debug; }; AF975D62099CA0F000B05160 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Release; }; AF976FBF0989CAA4001F8B92 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Debug; }; AF976FC00989CAA4001F8B92 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Release; }; AF97703E0989D1E6001F8B92 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Debug; }; AF97703F0989D1E6001F8B92 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Release; }; AF97707B0989D2F6001F8B92 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Debug; }; AF97707C0989D2F6001F8B92 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Release; }; AF9771DB0989DC4B001F8B92 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { INFOPLIST_FILE = SaverRunner.plist; INSTALL_PATH = "$(HOME)/Applications"; PRODUCT_BUNDLE_IDENTIFIER = "${BUNDLE_IDENTIFIER}"; WRAPPER_EXTENSION = app; }; name = Debug; }; AF9771DC0989DC4B001F8B92 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { INFOPLIST_FILE = SaverRunner.plist; INSTALL_PATH = "$(HOME)/Applications"; PRODUCT_BUNDLE_IDENTIFIER = "${BUNDLE_IDENTIFIER}"; WRAPPER_EXTENSION = app; }; name = Release; }; AF998EEC0A083DB30051049D /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Debug; }; AF998EED0A083DB30051049D /* Release */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Release; }; AF9D467409B5109C006E59CF /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Debug; }; AF9D467509B5109C006E59CF /* Release */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Release; }; AF9D475209B5300A006E59CF /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Debug; }; AF9D475309B5300A006E59CF /* Release */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Release; }; AF9D476D09B53166006E59CF /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Debug; }; AF9D476E09B53166006E59CF /* Release */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Release; }; AF9D48E909B53322006E59CF /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Debug; }; AF9D48EA09B53322006E59CF /* Release */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Release; }; AF9D490209B535DA006E59CF /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Debug; }; AF9D490309B535DA006E59CF /* Release */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Release; }; AF9D493909B53CBA006E59CF /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Debug; }; AF9D493A09B53CBA006E59CF /* Release */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Release; }; AF9D496209B53FC9006E59CF /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Debug; }; AF9D496309B53FC9006E59CF /* Release */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Release; }; AF9D497A09B5411D006E59CF /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Debug; }; AF9D497B09B5411D006E59CF /* Release */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Release; }; AF9D49A509B544C2006E59CF /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Debug; }; AF9D49A609B544C2006E59CF /* Release */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Release; }; AF9D4C7709B59F27006E59CF /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Debug; }; AF9D4C7809B59F27006E59CF /* Release */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Release; }; AF9D4CF509B5AA8E006E59CF /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Debug; }; AF9D4CF609B5AA8E006E59CF /* Release */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Release; }; AF9D4D8D09B5B2DC006E59CF /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Debug; }; AF9D4D8E09B5B2DC006E59CF /* Release */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Release; }; AF9D4DBE09B5B71E006E59CF /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Debug; }; AF9D4DBF09B5B71E006E59CF /* Release */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Release; }; AF9D4DFC09B5BB19006E59CF /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Debug; }; AF9D4DFD09B5BB19006E59CF /* Release */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Release; }; AF9E7EC6190F4C1C00A8B01F /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { PRODUCT_BUNDLE_IDENTIFIER = "${BUNDLE_IDENTIFIER}"; PRODUCT_NAME = "$(TARGET_NAME)"; SKIP_INSTALL = YES; }; name = Debug; }; AF9E7EC7190F4C1C00A8B01F /* Release */ = { isa = XCBuildConfiguration; buildSettings = { PRODUCT_BUNDLE_IDENTIFIER = "${BUNDLE_IDENTIFIER}"; PRODUCT_NAME = "$(TARGET_NAME)"; SKIP_INSTALL = YES; }; name = Release; }; AFA2119F1CD59DAF00C0D2A1 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); PRODUCT_NAME = "$(TARGET_NAME)"; }; name = Debug; }; AFA211A01CD59DAF00C0D2A1 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); PRODUCT_NAME = "$(TARGET_NAME)"; }; name = Release; }; AFA3393E0B058505002B0E7D /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Debug; }; AFA3393F0B058505002B0E7D /* Release */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Release; }; AFA33BCC0B058754002B0E7D /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREFIX_HEADER = "$(SYSTEM_LIBRARY_DIR)/Frameworks/AppKit.framework/Headers/AppKit.h"; INSTALL_PATH = "$(HOME)/bin"; "OTHER_CFLAGS[sdk=macosx*]" = "${OBJC_NO_GC_CFLAGS}"; OTHER_LDFLAGS = ( "-framework", Cocoa, ); PRODUCT_NAME = "webcollage-helper"; }; name = Debug; }; AFA33BCD0B058754002B0E7D /* Release */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREFIX_HEADER = "$(SYSTEM_LIBRARY_DIR)/Frameworks/AppKit.framework/Headers/AppKit.h"; INSTALL_PATH = "$(HOME)/bin"; "OTHER_CFLAGS[sdk=macosx*]" = "${OBJC_NO_GC_CFLAGS}"; OTHER_LDFLAGS = ( "-framework", Cocoa, ); PRODUCT_NAME = "webcollage-helper"; }; name = Release; }; AFA33C080B058E67002B0E7D /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { PRODUCT_NAME = webcollage; }; name = Debug; }; AFA33C090B058E67002B0E7D /* Release */ = { isa = XCBuildConfiguration; buildSettings = { PRODUCT_NAME = webcollage; }; name = Release; }; AFA55958099330B000F3E977 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Debug; }; AFA55959099330B000F3E977 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Release; }; AFA5597D0993317900F3E977 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Debug; }; AFA5597E0993317900F3E977 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Release; }; AFA559A20993322100F3E977 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Debug; }; AFA559A30993322100F3E977 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Release; }; AFA559C50993328000F3E977 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Debug; }; AFA559C60993328000F3E977 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Release; }; AFA559DF0993330600F3E977 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Debug; }; AFA559E00993330600F3E977 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Release; }; AFA55A130993340300F3E977 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Debug; }; AFA55A140993340300F3E977 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Release; }; AFA55A30099334A000F3E977 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Debug; }; AFA55A31099334A000F3E977 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Release; }; AFA55A890993364300F3E977 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Debug; }; AFA55A8A0993364300F3E977 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Release; }; AFA55ADF09933CEF00F3E977 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Debug; }; AFA55AE009933CEF00F3E977 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Release; }; AFA55B1C09933E0500F3E977 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Debug; }; AFA55B1D09933E0500F3E977 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Release; }; AFA55B3509933E8D00F3E977 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Debug; }; AFA55B3609933E8D00F3E977 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Release; }; AFA55B8909933F7200F3E977 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Debug; }; AFA55B8A09933F7200F3E977 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Release; }; AFA55BA109933FDA00F3E977 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Debug; }; AFA55BA209933FDA00F3E977 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Release; }; AFA55BBB099340CE00F3E977 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Debug; }; AFA55BBC099340CE00F3E977 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Release; }; AFA55BF40993429100F3E977 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Debug; }; AFA55BF50993429100F3E977 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Release; }; AFA55C1E0993431300F3E977 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Debug; }; AFA55C1F0993431300F3E977 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Release; }; AFA55C87099349A600F3E977 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Debug; }; AFA55C88099349A600F3E977 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Release; }; AFA55CB909934BB200F3E977 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Debug; }; AFA55CBA09934BB200F3E977 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Release; }; AFA55CDC09934CE400F3E977 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Debug; }; AFA55CDD09934CE400F3E977 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Release; }; AFA55D4C0993565300F3E977 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Debug; }; AFA55D4D0993565300F3E977 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Release; }; AFA55D720993584B00F3E977 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Debug; }; AFA55D730993584B00F3E977 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Release; }; AFA55D8F099358C400F3E977 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Debug; }; AFA55D90099358C400F3E977 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Release; }; AFA55DD809935D7000F3E977 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Debug; }; AFA55DD909935D7000F3E977 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Release; }; AFA55E0109935E4900F3E977 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Debug; }; AFA55E0209935E4900F3E977 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Release; }; AFA55E1D09935EDC00F3E977 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Debug; }; AFA55E1E09935EDC00F3E977 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Release; }; AFA55E4009935F8E00F3E977 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Debug; }; AFA55E4109935F8E00F3E977 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Release; }; AFA55E5E09935FF900F3E977 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Debug; }; AFA55E5F09935FF900F3E977 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Release; }; AFA55EE1099360E300F3E977 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Debug; }; AFA55EE2099360E300F3E977 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Release; }; AFA55F1C099361B700F3E977 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Debug; }; AFA55F1D099361B700F3E977 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Release; }; AFA55F3A0993622F00F3E977 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Debug; }; AFA55F3B0993622F00F3E977 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Release; }; AFA55F520993629000F3E977 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Debug; }; AFA55F530993629000F3E977 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Release; }; AFA55F820993643600F3E977 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Debug; }; AFA55F830993643600F3E977 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Release; }; AFA55FE309936BFA00F3E977 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Debug; }; AFA55FE409936BFA00F3E977 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Release; }; AFA5600909936C6D00F3E977 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Debug; }; AFA5600A09936C6D00F3E977 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Release; }; AFA5602409936CC800F3E977 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Debug; }; AFA5602509936CC800F3E977 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Release; }; AFA5604209936D5100F3E977 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Debug; }; AFA5604309936D5100F3E977 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Release; }; AFA5605A09936E2100F3E977 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Debug; }; AFA5605B09936E2100F3E977 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Release; }; AFA5607209936F3800F3E977 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Debug; }; AFA5607309936F3800F3E977 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Release; }; AFA560BE0993718D00F3E977 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Debug; }; AFA560BF0993718D00F3E977 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Release; }; AFA5610D0993781600F3E977 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Debug; }; AFA5610E0993781600F3E977 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Release; }; AFA5611B099378EA00F3E977 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { PRODUCT_NAME = molecules.h; }; name = Debug; }; AFA5611C099378EA00F3E977 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { PRODUCT_NAME = molecules.h; }; name = Release; }; AFA5616809937C0D00F3E977 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Debug; }; AFA5616909937C0D00F3E977 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Release; }; AFA5618B09937CF100F3E977 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Debug; }; AFA5618C09937CF100F3E977 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Release; }; AFA561AD09937D7E00F3E977 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Debug; }; AFA561AE09937D7E00F3E977 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Release; }; AFA562170993849F00F3E977 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Debug; }; AFA562180993849F00F3E977 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Release; }; AFA5622F0993852500F3E977 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Debug; }; AFA562300993852500F3E977 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Release; }; AFA562CF099392C600F3E977 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Debug; }; AFA562D0099392C600F3E977 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Release; }; AFA562EA099393C900F3E977 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Debug; }; AFA562EB099393C900F3E977 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Release; }; AFA563020993943B00F3E977 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Debug; }; AFA563030993943B00F3E977 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Release; }; AFA563240993951000F3E977 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Debug; }; AFA563250993951000F3E977 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Release; }; AFA56341099395ED00F3E977 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Debug; }; AFA56342099395ED00F3E977 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Release; }; AFA56361099396C000F3E977 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Debug; }; AFA56362099396C000F3E977 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Release; }; AFA56389099397B300F3E977 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Debug; }; AFA5638A099397B300F3E977 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Release; }; AFA563B4099398BB00F3E977 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Debug; }; AFA563B5099398BB00F3E977 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Release; }; AFACE8861CC83458008B24CD /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); PRODUCT_NAME = "$(TARGET_NAME)"; }; name = Debug; }; AFACE8871CC83458008B24CD /* Release */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); PRODUCT_NAME = "$(TARGET_NAME)"; }; name = Release; }; AFB591B8178B812C00EA4005 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { PRODUCT_NAME = Hexadrop; }; name = Debug; }; AFB591B9178B812C00EA4005 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { PRODUCT_NAME = Hexadrop; }; name = Release; }; AFBFE75C178642DC00432B21 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { INFOPLIST_FILE = SaverRunner.plist; INSTALL_PATH = "$(HOME)/Applications"; "OTHER_CFLAGS[sdk=macosx*]" = ""; PRODUCT_NAME = Apple2; WRAPPER_EXTENSION = app; }; name = Debug; }; AFBFE75D178642DC00432B21 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { INFOPLIST_FILE = SaverRunner.plist; INSTALL_PATH = "$(HOME)/Applications"; "OTHER_CFLAGS[sdk=macosx*]" = ""; PRODUCT_NAME = Apple2; WRAPPER_EXTENSION = app; }; name = Release; }; AFBFE77C178647FE00432B21 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { INFOPLIST_FILE = SaverRunner.plist; INSTALL_PATH = "$(HOME)/Applications"; "OTHER_CFLAGS[sdk=macosx*]" = ""; PRODUCT_NAME = Phosphor; WRAPPER_EXTENSION = app; }; name = Debug; }; AFBFE77D178647FE00432B21 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { INFOPLIST_FILE = SaverRunner.plist; INSTALL_PATH = "$(HOME)/Applications"; "OTHER_CFLAGS[sdk=macosx*]" = ""; PRODUCT_NAME = Phosphor; WRAPPER_EXTENSION = app; }; name = Release; }; AFC0E8BE1CDC601A008CAFAC /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); PRODUCT_NAME = "$(TARGET_NAME)"; }; name = Debug; }; AFC0E8BF1CDC601A008CAFAC /* Release */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); PRODUCT_NAME = "$(TARGET_NAME)"; }; name = Release; }; AFCF834E1AF5B515008BB7E1 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); PRODUCT_NAME = SplitFlap; }; name = Debug; }; AFCF834F1AF5B515008BB7E1 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); PRODUCT_NAME = SplitFlap; }; name = Release; }; AFD51B2E0F063B4A00471C02 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Debug; }; AFD51B2F0F063B4A00471C02 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Release; }; AFD56E020996A03800BA26F7 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Debug; }; AFD56E030996A03800BA26F7 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Release; }; AFD56EBC0996A72600BA26F7 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Debug; }; AFD56EBD0996A72600BA26F7 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Release; }; AFD56EE80996A95700BA26F7 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Debug; }; AFD56EE90996A95700BA26F7 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Release; }; AFD56F190996AAFA00BA26F7 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Debug; }; AFD56F1A0996AAFA00BA26F7 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Release; }; AFD56F310996AB8A00BA26F7 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Debug; }; AFD56F320996AB8A00BA26F7 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Release; }; AFD56F5D0996AEEE00BA26F7 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Debug; }; AFD56F5E0996AEEE00BA26F7 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Release; }; AFD56F790996B01600BA26F7 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Debug; }; AFD56F7A0996B01600BA26F7 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Release; }; AFD56F9A0996B09400BA26F7 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Debug; }; AFD56F9B0996B09400BA26F7 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Release; }; AFD56FB10996B10F00BA26F7 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Debug; }; AFD56FB20996B10F00BA26F7 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Release; }; AFD56FC70996B18F00BA26F7 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Debug; }; AFD56FC80996B18F00BA26F7 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Release; }; AFD56FDD0996B20900BA26F7 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Debug; }; AFD56FDE0996B20900BA26F7 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Release; }; AFD570060996B43800BA26F7 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Debug; }; AFD570070996B43800BA26F7 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Release; }; AFD5701D0996B4CC00BA26F7 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Debug; }; AFD5701E0996B4CC00BA26F7 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Release; }; AFD570340996B56D00BA26F7 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Debug; }; AFD570350996B56D00BA26F7 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Release; }; AFD570510996B61600BA26F7 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Debug; }; AFD570520996B61600BA26F7 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Release; }; AFD570670996B6A300BA26F7 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Debug; }; AFD570680996B6A300BA26F7 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Release; }; AFD5707D0996B72700BA26F7 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Debug; }; AFD5707E0996B72700BA26F7 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Release; }; AFD570930996B80300BA26F7 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Debug; }; AFD570940996B80300BA26F7 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Release; }; AFD570A90996B88E00BA26F7 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Debug; }; AFD570AA0996B88E00BA26F7 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Release; }; AFD570BF0996B93000BA26F7 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Debug; }; AFD570C00996B93000BA26F7 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Release; }; AFD570D70996B9F800BA26F7 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Debug; }; AFD570D80996B9F800BA26F7 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Release; }; AFD570F80996BBBF00BA26F7 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Debug; }; AFD570F90996BBBF00BA26F7 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Release; }; AFD571210996BE9300BA26F7 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Debug; }; AFD571220996BE9300BA26F7 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Release; }; AFD5713A0996BF2E00BA26F7 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Debug; }; AFD5713B0996BF2E00BA26F7 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Release; }; AFD571510996C01700BA26F7 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Debug; }; AFD571520996C01700BA26F7 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Release; }; AFD571670996C0CE00BA26F7 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Debug; }; AFD571680996C0CE00BA26F7 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Release; }; AFD571C30996D9DC00BA26F7 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Debug; }; AFD571C40996D9DC00BA26F7 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Release; }; AFD572300996E4A300BA26F7 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Debug; }; AFD572310996E4A300BA26F7 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Release; }; AFD5727B0996EE8500BA26F7 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Debug; }; AFD5727C0996EE8500BA26F7 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Release; }; AFD572B30996F99600BA26F7 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Debug; }; AFD572B40996F99600BA26F7 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Release; }; AFD572D00996FC0F00BA26F7 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Debug; }; AFD572D10996FC0F00BA26F7 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Release; }; AFD57307099701C000BA26F7 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Debug; }; AFD57308099701C000BA26F7 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Release; }; AFD5736B0997411200BA26F7 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Debug; }; AFD5736C0997411200BA26F7 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Release; }; AFDA659F178A52B70070D24B /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); PRODUCT_NAME = UnknownPleasures; }; name = Debug; }; AFDA65A0178A52B70070D24B /* Release */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); PRODUCT_NAME = UnknownPleasures; }; name = Release; }; AFE2A4680E2E904600ADB298 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Debug; }; AFE2A4690E2E904600ADB298 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Release; }; AFE30BFA0E52B14700CCF4A5 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Debug; }; AFE30BFB0E52B14700CCF4A5 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Release; }; AFE6A1950CDD7B2E002805BF /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Debug; }; AFE6A1960CDD7B2E002805BF /* Release */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Release; }; AFE6A42B0CDD7FAA002805BF /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Debug; }; AFE6A42C0CDD7FAA002805BF /* Release */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Release; }; AFEC23E01CB6EAE100DE138F /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); PRODUCT_NAME = "$(TARGET_NAME)"; }; name = Debug; }; AFEC23E11CB6EAE100DE138F /* Release */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); PRODUCT_NAME = "$(TARGET_NAME)"; }; name = Release; }; AFEE10601D13406000AAC8F7 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); PRODUCT_NAME = "$(TARGET_NAME)"; }; name = Debug; }; AFEE10611D13406000AAC8F7 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); PRODUCT_NAME = "$(TARGET_NAME)"; }; name = Release; }; AFEE107F1D15EB0800AAC8F7 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); PRODUCT_NAME = "$(TARGET_NAME)"; }; name = Debug; }; AFEE10801D15EB0800AAC8F7 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); PRODUCT_NAME = "$(TARGET_NAME)"; }; name = Release; }; AFEE109E1D17E20B00AAC8F7 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); PRODUCT_NAME = "$(TARGET_NAME)"; }; name = Debug; }; AFEE109F1D17E20B00AAC8F7 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); PRODUCT_NAME = "$(TARGET_NAME)"; }; name = Release; }; AFF2869017860E830050A578 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); PRODUCT_NAME = QuasiCrystal; }; name = Debug; }; AFF2869117860E830050A578 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); PRODUCT_NAME = QuasiCrystal; }; name = Release; }; AFF3C9F917CCAC440028F240 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); PRODUCT_NAME = Geodesic; }; name = Debug; }; AFF3C9FA17CCAC440028F240 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); PRODUCT_NAME = Geodesic; }; name = Release; }; AFF463450C4403E400EE6509 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Debug; }; AFF463460C4403E400EE6509 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Release; }; AFF4636A0C440AEF00EE6509 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Debug; }; AFF4636B0C440AEF00EE6509 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Release; }; AFFAB32719158CE40020F021 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Debug; }; AFFAB32819158CE40020F021 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Release; }; C01FCF4F08A954540054247B /* Debug */ = { isa = XCBuildConfiguration; baseConfigurationReference = AF94E7411A16E93600289B93 /* xscreensaver.xcconfig */; buildSettings = { ARCHS = "$(ARCHS_STANDARD_32_64_BIT)"; BUNDLE_IDENTIFIER = "org.jwz.${PROJECT_NAME:rfc1034identifier}.${PRODUCT_NAME:rfc1034identifier}"; CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES; CLANG_WARN_INT_CONVERSION = YES; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; "CODE_SIGN_IDENTITY[sdk=iphonesimulator*]" = "iPhone Developer"; "CODE_SIGN_IDENTITY[sdk=macosx*]" = "Mac Developer"; COMBINE_HIDPI_IMAGES = YES; DEVELOPMENT_TEAM = 4627ATJELP; ENABLE_TESTABILITY = YES; GCC_OPTIMIZATION_LEVEL = 0; GCC_PRECOMPILE_PREFIX_HEADER = YES; GCC_PREFIX_HEADER = xscreensaver_Prefix.pch; GCC_PREPROCESSOR_DEFINITIONS = ( "HAVE_COCOA=1", "GETTIMEOFDAY_TWO_ARGS=1", "HAVE_UNISTD_H=1", "STANDALONE=1", "HAVE_GLBINDTEXTURE=1", "HAVE_UNAME=1", "HAVE_ICMP=1", "HAVE_GETIFADDRS=1", "HAVE_FORKPTY=1", "HAVE_UTIL_H=1", "HAVE_PTHREAD=1", "HAVE_GETADDRINFO=1", "HAVE_STRUCT_SOCKADDR_SA_LEN=1", "HAVE_XUTF8DRAWSTRING=1", "HAVE_INTTYPES_H=1", "JWXYZ_QUARTZ=1", "HAVE_JWXYZ=1", "$(GCC_PREPROCESSOR_DEFINITIONS)", ); GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "CLASS=XScreenSaver${EXECUTABLE_NAME}View", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); GCC_SYMBOLS_PRIVATE_EXTERN = NO; GCC_WARN_ABOUT_MISSING_NEWLINE = YES; GCC_WARN_ABOUT_MISSING_PROTOTYPES = YES; GCC_WARN_ABOUT_RETURN_TYPE = YES; GCC_WARN_CHECK_SWITCH_STATEMENTS = YES; GCC_WARN_FOUR_CHARACTER_CONSTANTS = YES; GCC_WARN_INITIALIZER_NOT_FULLY_BRACKETED = YES; GCC_WARN_MISSING_PARENTHESES = YES; GCC_WARN_SHADOW = NO; GCC_WARN_TYPECHECK_CALLS_TO_PRINTF = YES; GCC_WARN_UNINITIALIZED_AUTOS = YES; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_LABEL = YES; GCC_WARN_UNUSED_VALUE = YES; GCC_WARN_UNUSED_VARIABLE = YES; HEADER_SEARCH_PATHS = ( "$(HEADER_SEARCH_PATHS)", "$(SRCROOT)/..", "$(SRCROOT)/../utils", "$(SRCROOT)/../jwxyz", "$(SRCROOT)/../hacks", ); INFOPLIST_FILE = XScreenSaver.plist; INSTALL_PATH = "$(HOME)/Library/Screen Savers"; IPHONEOS_DEPLOYMENT_TARGET = 8.0; LIBRARY_SEARCH_PATHS = "$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)"; ONLY_ACTIVE_ARCH = YES; OTHER_CFLAGS = ""; "OTHER_CFLAGS[sdk=macosx*]" = "$(OBJC_GC_CFLAGS)"; "OTHER_LDFLAGS[sdk=macosx*]" = "-headerpad_max_install_names"; PRODUCT_NAME = "$(TARGET_NAME)"; PROVISIONING_PROFILE = ""; SDKROOT = macosx; "SDKROOT[arch=arm*]" = iphoneos; SYMROOT = "$(SRCROOT)/build"; TARGETED_DEVICE_FAMILY = "1,2"; USER_HEADER_SEARCH_PATHS = "$(PROJECT_DIR) $(USER_HEADER_SEARCH_PATHS)"; WARNING_CFLAGS = "-Wimplicit"; WRAPPER_EXTENSION = saver; }; name = Debug; }; C01FCF5008A954540054247B /* Release */ = { isa = XCBuildConfiguration; baseConfigurationReference = AF94E7411A16E93600289B93 /* xscreensaver.xcconfig */; buildSettings = { ARCHS = "$(ARCHS_STANDARD_32_64_BIT)"; BUNDLE_IDENTIFIER = "org.jwz.${PROJECT_NAME:rfc1034identifier}.${PRODUCT_NAME:rfc1034identifier}"; CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES; CLANG_WARN_INT_CONVERSION = YES; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Distribution: Jamie Zawinski (4627ATJELP)"; "CODE_SIGN_IDENTITY[sdk=iphonesimulator*]" = "iPhone Distribution: Jamie Zawinski (4627ATJELP)"; "CODE_SIGN_IDENTITY[sdk=macosx*]" = "Developer ID Application: Jamie Zawinski (4627ATJELP)"; COMBINE_HIDPI_IMAGES = YES; DEVELOPMENT_TEAM = 4627ATJELP; GCC_GENERATE_DEBUGGING_SYMBOLS = NO; GCC_PRECOMPILE_PREFIX_HEADER = YES; GCC_PREFIX_HEADER = xscreensaver_Prefix.pch; GCC_PREPROCESSOR_DEFINITIONS = ( "HAVE_COCOA=1", "GETTIMEOFDAY_TWO_ARGS=1", "HAVE_UNISTD_H=1", "STANDALONE=1", "HAVE_GLBINDTEXTURE=1", "HAVE_UNAME=1", "HAVE_ICMP=1", "HAVE_GETIFADDRS=1", "HAVE_FORKPTY=1", "HAVE_UTIL_H=1", "HAVE_PTHREAD=1", "HAVE_GETADDRINFO=1", "HAVE_STRUCT_SOCKADDR_SA_LEN=1", "HAVE_XUTF8DRAWSTRING=1", "HAVE_INTTYPES_H=1", "JWXYZ_QUARTZ=1", "HAVE_JWXYZ=1", "$(GCC_PREPROCESSOR_DEFINITIONS)", ); GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "CLASS=XScreenSaver${EXECUTABLE_NAME}View", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); GCC_WARN_ABOUT_MISSING_NEWLINE = YES; GCC_WARN_ABOUT_MISSING_PROTOTYPES = YES; GCC_WARN_ABOUT_RETURN_TYPE = YES; GCC_WARN_CHECK_SWITCH_STATEMENTS = YES; GCC_WARN_FOUR_CHARACTER_CONSTANTS = YES; GCC_WARN_INITIALIZER_NOT_FULLY_BRACKETED = YES; GCC_WARN_MISSING_PARENTHESES = YES; GCC_WARN_SHADOW = NO; GCC_WARN_TYPECHECK_CALLS_TO_PRINTF = YES; GCC_WARN_UNINITIALIZED_AUTOS = YES; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_LABEL = YES; GCC_WARN_UNUSED_VALUE = YES; GCC_WARN_UNUSED_VARIABLE = YES; HEADER_SEARCH_PATHS = ( "$(HEADER_SEARCH_PATHS)", "$(SRCROOT)/..", "$(SRCROOT)/../utils", "$(SRCROOT)/../jwxyz", "$(SRCROOT)/../hacks", ); INFOPLIST_FILE = XScreenSaver.plist; INSTALL_PATH = "$(HOME)/Library/Screen Savers"; IPHONEOS_DEPLOYMENT_TARGET = 8.0; LIBRARY_SEARCH_PATHS = "$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)"; LLVM_LTO = NO; "LLVM_LTO[sdk=macosx*]" = NO; OTHER_CFLAGS = ""; "OTHER_CFLAGS[sdk=macosx*]" = "$(OBJC_GC_CFLAGS)"; "OTHER_LDFLAGS[sdk=macosx*]" = "-headerpad_max_install_names"; PRODUCT_NAME = "$(TARGET_NAME)"; PROVISIONING_PROFILE = ""; SDKROOT = macosx; "SDKROOT[arch=arm*]" = iphoneos; SYMROOT = "$(SRCROOT)/build"; TARGETED_DEVICE_FAMILY = "1,2"; USER_HEADER_SEARCH_PATHS = "$(PROJECT_DIR) $(USER_HEADER_SEARCH_PATHS)"; VALIDATE_PRODUCT = YES; WARNING_CFLAGS = "-Wimplicit"; WRAPPER_EXTENSION = saver; }; name = Release; }; CE3D01641B76F4C100993C75 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Debug; }; CE3D01651B76F4C100993C75 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Release; }; /* End XCBuildConfiguration section */ /* Begin XCConfigurationList section */ AF08399F09930B6B00277BE9 /* Build configuration list for PBXNativeTarget "Atlantis" */ = { isa = XCConfigurationList; buildConfigurations = ( AF0839A009930B6B00277BE9 /* Debug */, AF0839A109930B6B00277BE9 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AF083A45099311D700277BE9 /* Build configuration list for PBXNativeTarget "Atunnel" */ = { isa = XCConfigurationList; buildConfigurations = ( AF083A46099311D700277BE9 /* Debug */, AF083A47099311D700277BE9 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AF0DC7BA0C4C73F600D76972 /* Build configuration list for PBXNativeTarget "m6502" */ = { isa = XCConfigurationList; buildConfigurations = ( AF0DC7BB0C4C73F600D76972 /* Debug */, AF0DC7BC0C4C73F600D76972 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AF0DCA530C4CBB0D00D76972 /* Build configuration list for PBXNativeTarget "Voronoi" */ = { isa = XCConfigurationList; buildConfigurations = ( AF0DCA540C4CBB0D00D76972 /* Debug */, AF0DCA550C4CBB0D00D76972 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AF137D450F075CA4004DE3B2 /* Build configuration list for PBXAggregateTarget "Obsolete" */ = { isa = XCConfigurationList; buildConfigurations = ( AF137D420F075C9C004DE3B2 /* Debug */, AF137D430F075C9C004DE3B2 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AF1A17700D6D6EE3008AF328 /* Build configuration list for PBXNativeTarget "LCDscrub" */ = { isa = XCConfigurationList; buildConfigurations = ( AF1A17710D6D6EE3008AF328 /* Debug */, AF1A17720D6D6EE3008AF328 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AF1ADA0E18500FA200932759 /* Build configuration list for PBXNativeTarget "XScreenSaverUpdater" */ = { isa = XCConfigurationList; buildConfigurations = ( AF1ADA0F18500FA200932759 /* Debug */, AF1ADA1018500FA200932759 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AF1B0FB91D7AB4740011DBE4 /* Build configuration list for PBXNativeTarget "Hexstrut" */ = { isa = XCConfigurationList; buildConfigurations = ( AF1B0FBA1D7AB4740011DBE4 /* Debug */, AF1B0FBB1D7AB4740011DBE4 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AF32D9F10F3AD0B40080F535 /* Build configuration list for PBXNativeTarget "RubikBlocks" */ = { isa = XCConfigurationList; buildConfigurations = ( AF32D9F20F3AD0B40080F535 /* Debug */, AF32D9F30F3AD0B40080F535 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AF3581D21431D47B00E09C51 /* Build configuration list for PBXNativeTarget "CompanionCube" */ = { isa = XCConfigurationList; buildConfigurations = ( AF3581D31431D47B00E09C51 /* Debug */, AF3581D41431D47B00E09C51 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AF358213143330F900E09C51 /* Build configuration list for PBXNativeTarget "TronBit" */ = { isa = XCConfigurationList; buildConfigurations = ( AF358214143330F900E09C51 /* Debug */, AF358215143330F900E09C51 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AF35E89D0E63823600691F2F /* Build configuration list for PBXNativeTarget "Jigsaw" */ = { isa = XCConfigurationList; buildConfigurations = ( AF35E89E0E63823600691F2F /* Debug */, AF35E89F0E63823600691F2F /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AF39382C1D0FBD6A00205406 /* Build configuration list for PBXNativeTarget "Discoball" */ = { isa = XCConfigurationList; buildConfigurations = ( AF39382D1D0FBD6A00205406 /* Debug */, AF39382E1D0FBD6A00205406 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AF39E293198A11F60064A58D /* Build configuration list for PBXNativeTarget "WindupRobot" */ = { isa = XCConfigurationList; buildConfigurations = ( AF39E294198A11F60064A58D /* Debug */, AF39E295198A11F60064A58D /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AF3C71560D624BF50030CC0D /* Build configuration list for PBXNativeTarget "Hypnowheel" */ = { isa = XCConfigurationList; buildConfigurations = ( AF3C71570D624BF50030CC0D /* Debug */, AF3C71580D624BF50030CC0D /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AF46E9E11CBBA2B300240FBC /* Build configuration list for PBXNativeTarget "Unicrud" */ = { isa = XCConfigurationList; buildConfigurations = ( AF46E9E21CBBA2B300240FBC /* Debug */, AF46E9E31CBBA2B300240FBC /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AF476FC3099D154F001F091E /* Build configuration list for PBXNativeTarget "Interference" */ = { isa = XCConfigurationList; buildConfigurations = ( AF476FC4099D154F001F091E /* Debug */, AF476FC5099D154F001F091E /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AF476FE8099D1686001F091E /* Build configuration list for PBXNativeTarget "Truchet" */ = { isa = XCConfigurationList; buildConfigurations = ( AF476FE9099D1686001F091E /* Debug */, AF476FEA099D1686001F091E /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AF477059099D4385001F091E /* Build configuration list for PBXNativeTarget "Deluxe" */ = { isa = XCConfigurationList; buildConfigurations = ( AF47705A099D4385001F091E /* Debug */, AF47705B099D4385001F091E /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AF477176099D4786001F091E /* Build configuration list for PBXNativeTarget "Compass" */ = { isa = XCConfigurationList; buildConfigurations = ( AF477177099D4786001F091E /* Debug */, AF477178099D4786001F091E /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AF47718C099D4803001F091E /* Build configuration list for PBXNativeTarget "Wander" */ = { isa = XCConfigurationList; buildConfigurations = ( AF47718D099D4803001F091E /* Debug */, AF47718E099D4803001F091E /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AF4771B4099D4949001F091E /* Build configuration list for PBXNativeTarget "T3D" */ = { isa = XCConfigurationList; buildConfigurations = ( AF4771B5099D4949001F091E /* Debug */, AF4771B6099D4949001F091E /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AF4771E8099D4D9A001F091E /* Build configuration list for PBXNativeTarget "CCurve" */ = { isa = XCConfigurationList; buildConfigurations = ( AF4771E9099D4D9A001F091E /* Debug */, AF4771EA099D4D9A001F091E /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AF4771FF099D4E63001F091E /* Build configuration list for PBXNativeTarget "NerveRot" */ = { isa = XCConfigurationList; buildConfigurations = ( AF477200099D4E63001F091E /* Debug */, AF477201099D4E63001F091E /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AF477215099D4EE8001F091E /* Build configuration list for PBXNativeTarget "Whirlygig" */ = { isa = XCConfigurationList; buildConfigurations = ( AF477216099D4EE8001F091E /* Debug */, AF477217099D4EE8001F091E /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AF47722B099D4F67001F091E /* Build configuration list for PBXNativeTarget "Anemone" */ = { isa = XCConfigurationList; buildConfigurations = ( AF47722C099D4F67001F091E /* Debug */, AF47722D099D4F67001F091E /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AF477260099D5717001F091E /* Build configuration list for PBXNativeTarget "Halftone" */ = { isa = XCConfigurationList; buildConfigurations = ( AF477261099D5717001F091E /* Debug */, AF477262099D5717001F091E /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AF477278099D57B9001F091E /* Build configuration list for PBXNativeTarget "PopSquares" */ = { isa = XCConfigurationList; buildConfigurations = ( AF477279099D57B9001F091E /* Debug */, AF47727A099D57B9001F091E /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AF477290099D5926001F091E /* Build configuration list for PBXNativeTarget "Piecewise" */ = { isa = XCConfigurationList; buildConfigurations = ( AF477291099D5926001F091E /* Debug */, AF477292099D5926001F091E /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AF47738F099D65A1001F091E /* Build configuration list for PBXNativeTarget "Wormhole" */ = { isa = XCConfigurationList; buildConfigurations = ( AF477390099D65A1001F091E /* Debug */, AF477391099D65A1001F091E /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AF4773A7099D6648001F091E /* Build configuration list for PBXNativeTarget "FuzzyFlakes" */ = { isa = XCConfigurationList; buildConfigurations = ( AF4773A8099D6648001F091E /* Debug */, AF4773A9099D6648001F091E /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AF4773CE099D67B9001F091E /* Build configuration list for PBXNativeTarget "Anemotaxis" */ = { isa = XCConfigurationList; buildConfigurations = ( AF4773CF099D67B9001F091E /* Debug */, AF4773D0099D67B9001F091E /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AF47740F099D69E7001F091E /* Build configuration list for PBXNativeTarget "Intermomentary" */ = { isa = XCConfigurationList; buildConfigurations = ( AF477410099D69E7001F091E /* Debug */, AF477411099D69E7001F091E /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AF477434099D7C70001F091E /* Build configuration list for PBXNativeTarget "IFS" */ = { isa = XCConfigurationList; buildConfigurations = ( AF477435099D7C70001F091E /* Debug */, AF477436099D7C70001F091E /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AF47744F099D7D33001F091E /* Build configuration list for PBXNativeTarget "XMatrix" */ = { isa = XCConfigurationList; buildConfigurations = ( AF477450099D7D33001F091E /* Debug */, AF477451099D7D33001F091E /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AF477490099D89E4001F091E /* Build configuration list for PBXNativeTarget "Flame" */ = { isa = XCConfigurationList; buildConfigurations = ( AF477491099D89E4001F091E /* Debug */, AF477492099D89E4001F091E /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AF4774A6099D8A74001F091E /* Build configuration list for PBXNativeTarget "Kaleidescope" */ = { isa = XCConfigurationList; buildConfigurations = ( AF4774A7099D8A74001F091E /* Debug */, AF4774A8099D8A74001F091E /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AF4774C1099D8B5F001F091E /* Build configuration list for PBXNativeTarget "LMorph" */ = { isa = XCConfigurationList; buildConfigurations = ( AF4774C2099D8B5F001F091E /* Debug */, AF4774C3099D8B5F001F091E /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AF4774DB099D8BFF001F091E /* Build configuration list for PBXNativeTarget "Maze" */ = { isa = XCConfigurationList; buildConfigurations = ( AF4774DC099D8BFF001F091E /* Debug */, AF4774DD099D8BFF001F091E /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AF47756A099D9A1A001F091E /* Build configuration list for PBXNativeTarget "Pedal" */ = { isa = XCConfigurationList; buildConfigurations = ( AF47756B099D9A1A001F091E /* Debug */, AF47756C099D9A1A001F091E /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AF477590099D9C28001F091E /* Build configuration list for PBXNativeTarget "Pyro" */ = { isa = XCConfigurationList; buildConfigurations = ( AF477591099D9C28001F091E /* Debug */, AF477592099D9C28001F091E /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AF4775AC099D9CF7001F091E /* Build configuration list for PBXNativeTarget "Starfish" */ = { isa = XCConfigurationList; buildConfigurations = ( AF4775AD099D9CF7001F091E /* Debug */, AF4775AE099D9CF7001F091E /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AF4775E5099D9F69001F091E /* Build configuration list for PBXNativeTarget "Coral" */ = { isa = XCConfigurationList; buildConfigurations = ( AF4775E6099D9F69001F091E /* Debug */, AF4775E7099D9F69001F091E /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AF4775FF099DA030001F091E /* Build configuration list for PBXNativeTarget "Epicycle" */ = { isa = XCConfigurationList; buildConfigurations = ( AF477600099DA030001F091E /* Debug */, AF477601099DA030001F091E /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AF477620099DA26C001F091E /* Build configuration list for PBXNativeTarget "Kumppa" */ = { isa = XCConfigurationList; buildConfigurations = ( AF477621099DA26C001F091E /* Debug */, AF477622099DA26C001F091E /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AF477651099DA6D0001F091E /* Build configuration list for PBXNativeTarget "Squiral" */ = { isa = XCConfigurationList; buildConfigurations = ( AF477652099DA6D0001F091E /* Debug */, AF477653099DA6D0001F091E /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AF477667099DA78E001F091E /* Build configuration list for PBXNativeTarget "Critical" */ = { isa = XCConfigurationList; buildConfigurations = ( AF477668099DA78E001F091E /* Debug */, AF477669099DA78E001F091E /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AF47767D099DA849001F091E /* Build configuration list for PBXNativeTarget "Petri" */ = { isa = XCConfigurationList; buildConfigurations = ( AF47767E099DA849001F091E /* Debug */, AF47767F099DA849001F091E /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AF47769C099DAA6F001F091E /* Build configuration list for PBXNativeTarget "Blaster" */ = { isa = XCConfigurationList; buildConfigurations = ( AF47769D099DAA6F001F091E /* Debug */, AF47769E099DAA6F001F091E /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AF4776B7099DABDD001F091E /* Build configuration list for PBXNativeTarget "XSpirograph" */ = { isa = XCConfigurationList; buildConfigurations = ( AF4776B8099DABDD001F091E /* Debug */, AF4776B9099DABDD001F091E /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AF4776CD099DAC8A001F091E /* Build configuration list for PBXNativeTarget "XRaySwarm" */ = { isa = XCConfigurationList; buildConfigurations = ( AF4776CE099DAC8A001F091E /* Debug */, AF4776CF099DAC8A001F091E /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AF4776E8099DADDF001F091E /* Build configuration list for PBXNativeTarget "WhirlWindWarp" */ = { isa = XCConfigurationList; buildConfigurations = ( AF4776E9099DADDF001F091E /* Debug */, AF4776EA099DADDF001F091E /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AF4776FE099DAE7A001F091E /* Build configuration list for PBXNativeTarget "Vermiculate" */ = { isa = XCConfigurationList; buildConfigurations = ( AF4776FF099DAE7A001F091E /* Debug */, AF477700099DAE7A001F091E /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AF47771A099DAF9F001F091E /* Build configuration list for PBXNativeTarget "CloudLife" */ = { isa = XCConfigurationList; buildConfigurations = ( AF47771B099DAF9F001F091E /* Debug */, AF47771C099DAF9F001F091E /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AF477730099DB044001F091E /* Build configuration list for PBXNativeTarget "Substrate" */ = { isa = XCConfigurationList; buildConfigurations = ( AF477731099DB044001F091E /* Debug */, AF477732099DB044001F091E /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AF47775F099DB61E001F091E /* Build configuration list for PBXNativeTarget "Interaggregate" */ = { isa = XCConfigurationList; buildConfigurations = ( AF477760099DB61E001F091E /* Debug */, AF477761099DB61E001F091E /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AF477781099DB965001F091E /* Build configuration list for PBXNativeTarget "Celtic" */ = { isa = XCConfigurationList; buildConfigurations = ( AF477782099DB965001F091E /* Debug */, AF477783099DB965001F091E /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AF47779D099DBA90001F091E /* Build configuration list for PBXNativeTarget "FluidBalls" */ = { isa = XCConfigurationList; buildConfigurations = ( AF47779E099DBA90001F091E /* Debug */, AF47779F099DBA90001F091E /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AF4777DE099DC183001F091E /* Build configuration list for PBXNativeTarget "BoxFit" */ = { isa = XCConfigurationList; buildConfigurations = ( AF4777DF099DC183001F091E /* Debug */, AF4777E0099DC183001F091E /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AF4778B8099DDB79001F091E /* Build configuration list for PBXNativeTarget "Penetrate" */ = { isa = XCConfigurationList; buildConfigurations = ( AF4778B9099DDB79001F091E /* Debug */, AF4778BA099DDB79001F091E /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AF4778D4099DDCAE001F091E /* Build configuration list for PBXNativeTarget "XJack" */ = { isa = XCConfigurationList; buildConfigurations = ( AF4778D5099DDCAE001F091E /* Debug */, AF4778D6099DDCAE001F091E /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AF4778F5099DDDC8001F091E /* Build configuration list for PBXNativeTarget "Cynosure" */ = { isa = XCConfigurationList; buildConfigurations = ( AF4778F6099DDDC8001F091E /* Debug */, AF4778F7099DDDC8001F091E /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AF477916099DE379001F091E /* Build configuration list for PBXNativeTarget "Flag" */ = { isa = XCConfigurationList; buildConfigurations = ( AF477917099DE379001F091E /* Debug */, AF477918099DE379001F091E /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AF477937099DE4C7001F091E /* Build configuration list for PBXNativeTarget "Slip" */ = { isa = XCConfigurationList; buildConfigurations = ( AF477938099DE4C7001F091E /* Debug */, AF477939099DE4C7001F091E /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AF4808C2098C3B8B00FB32B8 /* Build configuration list for PBXNativeTarget "jwxyz" */ = { isa = XCConfigurationList; buildConfigurations = ( AF4808C3098C3B8B00FB32B8 /* Debug */, AF4808C4098C3B8B00FB32B8 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AF480ABA098C66E300FB32B8 /* Build configuration list for PBXAggregateTarget "All Savers (XScreenSaver)" */ = { isa = XCConfigurationList; buildConfigurations = ( AF480ABB098C66E300FB32B8 /* Debug */, AF480ABC098C66E300FB32B8 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AF480C55098E301400FB32B8 /* Build configuration list for PBXNativeTarget "Helix" */ = { isa = XCConfigurationList; buildConfigurations = ( AF480C56098E301400FB32B8 /* Debug */, AF480C57098E301400FB32B8 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AF480D64098EED6E00FB32B8 /* Build configuration list for PBXAggregateTarget "All Savers (XLockmore)" */ = { isa = XCConfigurationList; buildConfigurations = ( AF480D65098EED6E00FB32B8 /* Debug */, AF480D66098EED6E00FB32B8 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AF480D67098EED6E00FB32B8 /* Build configuration list for PBXAggregateTarget "All Savers (OpenGL)" */ = { isa = XCConfigurationList; buildConfigurations = ( AF480D68098EED6E00FB32B8 /* Debug */, AF480D69098EED6E00FB32B8 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AF480D6A098EED6E00FB32B8 /* Build configuration list for PBXAggregateTarget "All Savers" */ = { isa = XCConfigurationList; buildConfigurations = ( AF480D6B098EED6E00FB32B8 /* Debug */, AF480D6C098EED6E00FB32B8 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AF480D7E098EEDDE00FB32B8 /* Build configuration list for PBXNativeTarget "Drift" */ = { isa = XCConfigurationList; buildConfigurations = ( AF480D7F098EEDDE00FB32B8 /* Debug */, AF480D80098EEDDE00FB32B8 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AF4810F809909FBA00FB32B8 /* Build configuration list for PBXNativeTarget "DangerBall" */ = { isa = XCConfigurationList; buildConfigurations = ( AF4810F909909FBA00FB32B8 /* Debug */, AF4810FA09909FBA00FB32B8 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AF4812610990CE2700FB32B8 /* Build configuration list for PBXNativeTarget "Gears" */ = { isa = XCConfigurationList; buildConfigurations = ( AF4812620990CE2700FB32B8 /* Debug */, AF4812630990CE2700FB32B8 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AF4812C30990D3D900FB32B8 /* Build configuration list for PBXNativeTarget "Pipes" */ = { isa = XCConfigurationList; buildConfigurations = ( AF4812C40990D3D900FB32B8 /* Debug */, AF4812C50990D3D900FB32B8 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AF48DF000A0C25E000F94CF9 /* Build configuration list for PBXNativeTarget "GLSchool" */ = { isa = XCConfigurationList; buildConfigurations = ( AF48DF010A0C25E000F94CF9 /* Debug */, AF48DF020A0C25E000F94CF9 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AF4A345A102A593600A81B2A /* Build configuration list for PBXNativeTarget "Surfaces" */ = { isa = XCConfigurationList; buildConfigurations = ( AF4A345B102A593600A81B2A /* Debug */, AF4A345C102A593600A81B2A /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AF4FD6F70CE7A486005EE58E /* Build configuration list for PBXNativeTarget "Lockward" */ = { isa = XCConfigurationList; buildConfigurations = ( AF4FD6F80CE7A486005EE58E /* Debug */, AF4FD6F90CE7A486005EE58E /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AF4FF4940D52CA0800666F98 /* Build configuration list for PBXLegacyTarget "m6502.h" */ = { isa = XCConfigurationList; buildConfigurations = ( AF4FF4950D52CA0800666F98 /* Debug */, AF4FF4960D52CA0800666F98 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AF4FF4CB0D52CBDE00666F98 /* Build configuration list for PBXNativeTarget "CubicGrid" */ = { isa = XCConfigurationList; buildConfigurations = ( AF4FF4CC0D52CBDE00666F98 /* Debug */, AF4FF4CD0D52CBDE00666F98 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AF5C9B0A1A0CCE6E00B0147A /* Build configuration list for PBXNativeTarget "Cityflow" */ = { isa = XCConfigurationList; buildConfigurations = ( AF5C9B0B1A0CCE6E00B0147A /* Debug */, AF5C9B0C1A0CCE6E00B0147A /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AF63A8031AB4EDDB00593C75 /* Build configuration list for PBXNativeTarget "RomanBoy" */ = { isa = XCConfigurationList; buildConfigurations = ( AF63A8041AB4EDDB00593C75 /* Debug */, AF63A8051AB4EDDB00593C75 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AF63F44B1C3465BE0033E133 /* Build configuration list for PBXNativeTarget "Apple2-iOS" */ = { isa = XCConfigurationList; buildConfigurations = ( AF63F44C1C3465BE0033E133 /* Debug */, AF63F44D1C3465BE0033E133 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AF63F4711C34682A0033E133 /* Build configuration list for PBXNativeTarget "Phosphor-iOS" */ = { isa = XCConfigurationList; buildConfigurations = ( AF63F4721C34682A0033E133 /* Debug */, AF63F4731C34682A0033E133 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AF63F4971C3469FC0033E133 /* Build configuration list for PBXNativeTarget "TestX11-iOS" */ = { isa = XCConfigurationList; buildConfigurations = ( AF63F4981C3469FC0033E133 /* Debug */, AF63F4991C3469FC0033E133 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AF642402099FF9C2000F4CD4 /* Build configuration list for PBXNativeTarget "Extrusion" */ = { isa = XCConfigurationList; buildConfigurations = ( AF642403099FF9C2000F4CD4 /* Debug */, AF642404099FF9C2000F4CD4 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AF6425D909A18855000F4CD4 /* Build configuration list for PBXNativeTarget "HyperCube" */ = { isa = XCConfigurationList; buildConfigurations = ( AF6425DA09A18855000F4CD4 /* Debug */, AF6425DB09A18855000F4CD4 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AF6425F909A189EC000F4CD4 /* Build configuration list for PBXNativeTarget "Qix" */ = { isa = XCConfigurationList; buildConfigurations = ( AF6425FA09A189EC000F4CD4 /* Debug */, AF6425FB09A189EC000F4CD4 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AF64261C09A18D6C000F4CD4 /* Build configuration list for PBXNativeTarget "HyperBall" */ = { isa = XCConfigurationList; buildConfigurations = ( AF64261D09A18D6C000F4CD4 /* Debug */, AF64261E09A18D6C000F4CD4 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AF64263909A18F54000F4CD4 /* Build configuration list for PBXNativeTarget "Moire2" */ = { isa = XCConfigurationList; buildConfigurations = ( AF64263A09A18F54000F4CD4 /* Debug */, AF64263B09A18F54000F4CD4 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AF64265C09A19229000F4CD4 /* Build configuration list for PBXNativeTarget "Munch" */ = { isa = XCConfigurationList; buildConfigurations = ( AF64265D09A19229000F4CD4 /* Debug */, AF64265E09A19229000F4CD4 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AF64268809A194B0000F4CD4 /* Build configuration list for PBXNativeTarget "Goop" */ = { isa = XCConfigurationList; buildConfigurations = ( AF64268909A194B0000F4CD4 /* Debug */, AF64268A09A194B0000F4CD4 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AF64277E09A1D37A000F4CD4 /* Build configuration list for PBXNativeTarget "SpeedMine" */ = { isa = XCConfigurationList; buildConfigurations = ( AF64277F09A1D37A000F4CD4 /* Debug */, AF64278009A1D37A000F4CD4 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AF6427B509A2DE36000F4CD4 /* Build configuration list for PBXNativeTarget "Bubbles" */ = { isa = XCConfigurationList; buildConfigurations = ( AF6427B609A2DE36000F4CD4 /* Debug */, AF6427B709A2DE36000F4CD4 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AF68A48F19196CF800D41CD1 /* Build configuration list for PBXNativeTarget "Tessellimage" */ = { isa = XCConfigurationList; buildConfigurations = ( AF68A49019196CF800D41CD1 /* Debug */, AF68A49119196CF800D41CD1 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AF73FF331A09877F00E485E9 /* Build configuration list for PBXNativeTarget "BinaryRing" */ = { isa = XCConfigurationList; buildConfigurations = ( AF73FF341A09877F00E485E9 /* Debug */, AF73FF351A09877F00E485E9 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AF75110F1782B5B900380EA1 /* Build configuration list for PBXNativeTarget "Kaleidocycle" */ = { isa = XCConfigurationList; buildConfigurations = ( AF7511101782B5B900380EA1 /* Debug */, AF7511111782B5B900380EA1 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AF7776F309B63ABF00EA3033 /* Build configuration list for PBXNativeTarget "Phosphor" */ = { isa = XCConfigurationList; buildConfigurations = ( AF7776F409B63ABF00EA3033 /* Debug */, AF7776F509B63ABF00EA3033 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AF77772709B6416100EA3033 /* Build configuration list for PBXNativeTarget "Pacman" */ = { isa = XCConfigurationList; buildConfigurations = ( AF77772809B6416100EA3033 /* Debug */, AF77772909B6416100EA3033 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AF77774E09B6446500EA3033 /* Build configuration list for PBXNativeTarget "FlipScreen3D" */ = { isa = XCConfigurationList; buildConfigurations = ( AF77774F09B6446500EA3033 /* Debug */, AF77775009B6446500EA3033 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AF77778509B6497800EA3033 /* Build configuration list for PBXNativeTarget "Gleidescope" */ = { isa = XCConfigurationList; buildConfigurations = ( AF77778609B6497800EA3033 /* Debug */, AF77778709B6497800EA3033 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AF77779F09B64A5200EA3033 /* Build configuration list for PBXNativeTarget "MirrorBlob" */ = { isa = XCConfigurationList; buildConfigurations = ( AF7777A009B64A5200EA3033 /* Debug */, AF7777A109B64A5200EA3033 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AF7777B909B64B2600EA3033 /* Build configuration list for PBXNativeTarget "StonerView" */ = { isa = XCConfigurationList; buildConfigurations = ( AF7777BA09B64B2600EA3033 /* Debug */, AF7777BB09B64B2600EA3033 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AF7777E109B64C6B00EA3033 /* Build configuration list for PBXNativeTarget "GLSlideshow" */ = { isa = XCConfigurationList; buildConfigurations = ( AF7777E209B64C6B00EA3033 /* Debug */, AF7777E309B64C6B00EA3033 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AF7777FB09B64E3100EA3033 /* Build configuration list for PBXNativeTarget "FlipText" */ = { isa = XCConfigurationList; buildConfigurations = ( AF7777FC09B64E3100EA3033 /* Debug */, AF7777FD09B64E3100EA3033 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AF77782209B6504400EA3033 /* Build configuration list for PBXNativeTarget "StarWars" */ = { isa = XCConfigurationList; buildConfigurations = ( AF77782309B6504400EA3033 /* Debug */, AF77782409B6504400EA3033 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AF77785509B6528100EA3033 /* Build configuration list for PBXNativeTarget "Carousel" */ = { isa = XCConfigurationList; buildConfigurations = ( AF77785609B6528100EA3033 /* Debug */, AF77785709B6528100EA3033 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AF77787109B6536000EA3033 /* Build configuration list for PBXNativeTarget "DNAlogo" */ = { isa = XCConfigurationList; buildConfigurations = ( AF77787209B6536000EA3033 /* Debug */, AF77787309B6536000EA3033 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AF77788C09B6563500EA3033 /* Build configuration list for PBXNativeTarget "FontGlide" */ = { isa = XCConfigurationList; buildConfigurations = ( AF77788D09B6563500EA3033 /* Debug */, AF77788E09B6563500EA3033 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AF7778B209B659C800EA3033 /* Build configuration list for PBXNativeTarget "BlitSpin" */ = { isa = XCConfigurationList; buildConfigurations = ( AF7778B309B659C800EA3033 /* Debug */, AF7778B409B659C800EA3033 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AF78D186142DD8F3002AAF77 /* Build configuration list for PBXNativeTarget "Hilbert" */ = { isa = XCConfigurationList; buildConfigurations = ( AF78D187142DD8F3002AAF77 /* Debug */, AF78D188142DD8F3002AAF77 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AF794F71099748450059A8B0 /* Build configuration list for PBXNativeTarget "Demon" */ = { isa = XCConfigurationList; buildConfigurations = ( AF794F72099748450059A8B0 /* Debug */, AF794F73099748450059A8B0 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AF794F9B09974A320059A8B0 /* Build configuration list for PBXNativeTarget "Fiberlamp" */ = { isa = XCConfigurationList; buildConfigurations = ( AF794F9C09974A320059A8B0 /* Debug */, AF794F9D09974A320059A8B0 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AF794FDA09974FA60059A8B0 /* Build configuration list for PBXNativeTarget "Loop" */ = { isa = XCConfigurationList; buildConfigurations = ( AF794FDB09974FA60059A8B0 /* Debug */, AF794FDC09974FA60059A8B0 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AF7ACFD119FF0A9200BD752B /* Build configuration list for PBXNativeTarget "GeodesicGears" */ = { isa = XCConfigurationList; buildConfigurations = ( AF7ACFD219FF0A9200BD752B /* Debug */, AF7ACFD319FF0A9200BD752B /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AF91898C158FC00A002B5D1E /* Build configuration list for PBXNativeTarget "XScreenSaver-iOS" */ = { isa = XCConfigurationList; buildConfigurations = ( AF91898D158FC00A002B5D1E /* Debug */, AF91898E158FC00A002B5D1E /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AF97573A099C317000B05160 /* Build configuration list for PBXNativeTarget "IMSMap" */ = { isa = XCConfigurationList; buildConfigurations = ( AF97573B099C317000B05160 /* Debug */, AF97573C099C317000B05160 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AF975782099C374A00B05160 /* Build configuration list for PBXNativeTarget "Moire" */ = { isa = XCConfigurationList; buildConfigurations = ( AF975783099C374A00B05160 /* Debug */, AF975784099C374A00B05160 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AF9757CF099C3E6300B05160 /* Build configuration list for PBXNativeTarget "RDbomb" */ = { isa = XCConfigurationList; buildConfigurations = ( AF9757D0099C3E6300B05160 /* Debug */, AF9757D1099C3E6300B05160 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AF975815099C41D500B05160 /* Build configuration list for PBXNativeTarget "XFlame" */ = { isa = XCConfigurationList; buildConfigurations = ( AF975816099C41D500B05160 /* Debug */, AF975817099C41D500B05160 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AF975872099C475900B05160 /* Build configuration list for PBXNativeTarget "ShadeBobs" */ = { isa = XCConfigurationList; buildConfigurations = ( AF975873099C475900B05160 /* Debug */, AF975874099C475900B05160 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AF975A43099C681F00B05160 /* Build configuration list for PBXNativeTarget "MetaBalls" */ = { isa = XCConfigurationList; buildConfigurations = ( AF975A44099C681F00B05160 /* Debug */, AF975A45099C681F00B05160 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AF975A79099C6AB200B05160 /* Build configuration list for PBXNativeTarget "Eruption" */ = { isa = XCConfigurationList; buildConfigurations = ( AF975A7A099C6AB200B05160 /* Debug */, AF975A7B099C6AB200B05160 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AF975A93099C6BC300B05160 /* Build configuration list for PBXNativeTarget "Barcode" */ = { isa = XCConfigurationList; buildConfigurations = ( AF975A94099C6BC300B05160 /* Debug */, AF975A95099C6BC300B05160 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AF975AE4099C6EB100B05160 /* Build configuration list for PBXNativeTarget "Fireworkx" */ = { isa = XCConfigurationList; buildConfigurations = ( AF975AE5099C6EB100B05160 /* Debug */, AF975AE6099C6EB100B05160 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AF975B09099C6FE400B05160 /* Build configuration list for PBXNativeTarget "MemScroller" */ = { isa = XCConfigurationList; buildConfigurations = ( AF975B0A099C6FE400B05160 /* Debug */, AF975B0B099C6FE400B05160 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AF975C1F099C8C1500B05160 /* Build configuration list for PBXNativeTarget "Halo" */ = { isa = XCConfigurationList; buildConfigurations = ( AF975C20099C8C1500B05160 /* Debug */, AF975C21099C8C1500B05160 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AF975C4B099C8DCF00B05160 /* Build configuration list for PBXNativeTarget "Greynetic" */ = { isa = XCConfigurationList; buildConfigurations = ( AF975C4C099C8DCF00B05160 /* Debug */, AF975C4D099C8DCF00B05160 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AF975C6B099C8F3F00B05160 /* Build configuration list for PBXNativeTarget "NoseGuy" */ = { isa = XCConfigurationList; buildConfigurations = ( AF975C6C099C8F3F00B05160 /* Debug */, AF975C6D099C8F3F00B05160 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AF975D60099CA0F000B05160 /* Build configuration list for PBXNativeTarget "Rocks" */ = { isa = XCConfigurationList; buildConfigurations = ( AF975D61099CA0F000B05160 /* Debug */, AF975D62099CA0F000B05160 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AF976FBE0989CAA4001F8B92 /* Build configuration list for PBXNativeTarget "Deco" */ = { isa = XCConfigurationList; buildConfigurations = ( AF976FBF0989CAA4001F8B92 /* Debug */, AF976FC00989CAA4001F8B92 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AF97703D0989D1E6001F8B92 /* Build configuration list for PBXNativeTarget "Rorschach" */ = { isa = XCConfigurationList; buildConfigurations = ( AF97703E0989D1E6001F8B92 /* Debug */, AF97703F0989D1E6001F8B92 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AF97707A0989D2F6001F8B92 /* Build configuration list for PBXNativeTarget "Attraction" */ = { isa = XCConfigurationList; buildConfigurations = ( AF97707B0989D2F6001F8B92 /* Debug */, AF97707C0989D2F6001F8B92 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AF9771DA0989DC4B001F8B92 /* Build configuration list for PBXNativeTarget "SaverTester" */ = { isa = XCConfigurationList; buildConfigurations = ( AF9771DB0989DC4B001F8B92 /* Debug */, AF9771DC0989DC4B001F8B92 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AF998EEB0A083DB30051049D /* Build configuration list for PBXNativeTarget "TopBlock" */ = { isa = XCConfigurationList; buildConfigurations = ( AF998EEC0A083DB30051049D /* Debug */, AF998EED0A083DB30051049D /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AF9D467309B5109C006E59CF /* Build configuration list for PBXNativeTarget "DecayScreen" */ = { isa = XCConfigurationList; buildConfigurations = ( AF9D467409B5109C006E59CF /* Debug */, AF9D467509B5109C006E59CF /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AF9D475109B5300A006E59CF /* Build configuration list for PBXNativeTarget "SlideScreen" */ = { isa = XCConfigurationList; buildConfigurations = ( AF9D475209B5300A006E59CF /* Debug */, AF9D475309B5300A006E59CF /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AF9D476C09B53166006E59CF /* Build configuration list for PBXNativeTarget "Zoom" */ = { isa = XCConfigurationList; buildConfigurations = ( AF9D476D09B53166006E59CF /* Debug */, AF9D476E09B53166006E59CF /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AF9D48E809B53322006E59CF /* Build configuration list for PBXNativeTarget "Bumps" */ = { isa = XCConfigurationList; buildConfigurations = ( AF9D48E909B53322006E59CF /* Debug */, AF9D48EA09B53322006E59CF /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AF9D490109B535DA006E59CF /* Build configuration list for PBXNativeTarget "Distort" */ = { isa = XCConfigurationList; buildConfigurations = ( AF9D490209B535DA006E59CF /* Debug */, AF9D490309B535DA006E59CF /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AF9D493809B53CBA006E59CF /* Build configuration list for PBXNativeTarget "Ripples" */ = { isa = XCConfigurationList; buildConfigurations = ( AF9D493909B53CBA006E59CF /* Debug */, AF9D493A09B53CBA006E59CF /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AF9D496109B53FC9006E59CF /* Build configuration list for PBXNativeTarget "RotZoomer" */ = { isa = XCConfigurationList; buildConfigurations = ( AF9D496209B53FC9006E59CF /* Debug */, AF9D496309B53FC9006E59CF /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AF9D497909B5411D006E59CF /* Build configuration list for PBXNativeTarget "Twang" */ = { isa = XCConfigurationList; buildConfigurations = ( AF9D497A09B5411D006E59CF /* Debug */, AF9D497B09B5411D006E59CF /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AF9D49A409B544C2006E59CF /* Build configuration list for PBXNativeTarget "Spotlight" */ = { isa = XCConfigurationList; buildConfigurations = ( AF9D49A509B544C2006E59CF /* Debug */, AF9D49A609B544C2006E59CF /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AF9D4C7609B59F27006E59CF /* Build configuration list for PBXNativeTarget "XLyap" */ = { isa = XCConfigurationList; buildConfigurations = ( AF9D4C7709B59F27006E59CF /* Debug */, AF9D4C7809B59F27006E59CF /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AF9D4CF409B5AA8E006E59CF /* Build configuration list for PBXNativeTarget "Pong" */ = { isa = XCConfigurationList; buildConfigurations = ( AF9D4CF509B5AA8E006E59CF /* Debug */, AF9D4CF609B5AA8E006E59CF /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AF9D4D8C09B5B2DC006E59CF /* Build configuration list for PBXNativeTarget "XAnalogTV" */ = { isa = XCConfigurationList; buildConfigurations = ( AF9D4D8D09B5B2DC006E59CF /* Debug */, AF9D4D8E09B5B2DC006E59CF /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AF9D4DBD09B5B71E006E59CF /* Build configuration list for PBXNativeTarget "BSOD" */ = { isa = XCConfigurationList; buildConfigurations = ( AF9D4DBE09B5B71E006E59CF /* Debug */, AF9D4DBF09B5B71E006E59CF /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AF9D4DFB09B5BB19006E59CF /* Build configuration list for PBXNativeTarget "Apple2" */ = { isa = XCConfigurationList; buildConfigurations = ( AF9D4DFC09B5BB19006E59CF /* Debug */, AF9D4DFD09B5BB19006E59CF /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AF9E7EC5190F4C1C00A8B01F /* Build configuration list for PBXNativeTarget "enable_gc" */ = { isa = XCConfigurationList; buildConfigurations = ( AF9E7EC6190F4C1C00A8B01F /* Debug */, AF9E7EC7190F4C1C00A8B01F /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AFA2119E1CD59DAF00C0D2A1 /* Build configuration list for PBXNativeTarget "RaverHoop" */ = { isa = XCConfigurationList; buildConfigurations = ( AFA2119F1CD59DAF00C0D2A1 /* Debug */, AFA211A01CD59DAF00C0D2A1 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AFA3393D0B058505002B0E7D /* Build configuration list for PBXNativeTarget "WebCollage" */ = { isa = XCConfigurationList; buildConfigurations = ( AFA3393E0B058505002B0E7D /* Debug */, AFA3393F0B058505002B0E7D /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AFA33BCB0B058754002B0E7D /* Build configuration list for PBXNativeTarget "webcollage-helper" */ = { isa = XCConfigurationList; buildConfigurations = ( AFA33BCC0B058754002B0E7D /* Debug */, AFA33BCD0B058754002B0E7D /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AFA33C070B058E67002B0E7D /* Build configuration list for PBXAggregateTarget "webcollage-perl" */ = { isa = XCConfigurationList; buildConfigurations = ( AFA33C080B058E67002B0E7D /* Debug */, AFA33C090B058E67002B0E7D /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AFA55957099330B000F3E977 /* Build configuration list for PBXNativeTarget "Cage" */ = { isa = XCConfigurationList; buildConfigurations = ( AFA55958099330B000F3E977 /* Debug */, AFA55959099330B000F3E977 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AFA5597C0993317900F3E977 /* Build configuration list for PBXNativeTarget "Moebius" */ = { isa = XCConfigurationList; buildConfigurations = ( AFA5597D0993317900F3E977 /* Debug */, AFA5597E0993317900F3E977 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AFA559A10993322100F3E977 /* Build configuration list for PBXNativeTarget "Superquadrics" */ = { isa = XCConfigurationList; buildConfigurations = ( AFA559A20993322100F3E977 /* Debug */, AFA559A30993322100F3E977 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AFA559C40993328000F3E977 /* Build configuration list for PBXNativeTarget "Morph3D" */ = { isa = XCConfigurationList; buildConfigurations = ( AFA559C50993328000F3E977 /* Debug */, AFA559C60993328000F3E977 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AFA559DE0993330600F3E977 /* Build configuration list for PBXNativeTarget "Rubik" */ = { isa = XCConfigurationList; buildConfigurations = ( AFA559DF0993330600F3E977 /* Debug */, AFA559E00993330600F3E977 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AFA55A120993340300F3E977 /* Build configuration list for PBXNativeTarget "Stairs" */ = { isa = XCConfigurationList; buildConfigurations = ( AFA55A130993340300F3E977 /* Debug */, AFA55A140993340300F3E977 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AFA55A2F099334A000F3E977 /* Build configuration list for PBXNativeTarget "Sproingies" */ = { isa = XCConfigurationList; buildConfigurations = ( AFA55A30099334A000F3E977 /* Debug */, AFA55A31099334A000F3E977 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AFA55A880993364300F3E977 /* Build configuration list for PBXNativeTarget "Lament" */ = { isa = XCConfigurationList; buildConfigurations = ( AFA55A890993364300F3E977 /* Debug */, AFA55A8A0993364300F3E977 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AFA55ADE09933CEF00F3E977 /* Build configuration list for PBXNativeTarget "Bubble3D" */ = { isa = XCConfigurationList; buildConfigurations = ( AFA55ADF09933CEF00F3E977 /* Debug */, AFA55AE009933CEF00F3E977 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AFA55B1B09933E0500F3E977 /* Build configuration list for PBXNativeTarget "GLPlanet" */ = { isa = XCConfigurationList; buildConfigurations = ( AFA55B1C09933E0500F3E977 /* Debug */, AFA55B1D09933E0500F3E977 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AFA55B3409933E8D00F3E977 /* Build configuration list for PBXNativeTarget "Pulsar" */ = { isa = XCConfigurationList; buildConfigurations = ( AFA55B3509933E8D00F3E977 /* Debug */, AFA55B3609933E8D00F3E977 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AFA55B8809933F7200F3E977 /* Build configuration list for PBXNativeTarget "Sierpinski3D" */ = { isa = XCConfigurationList; buildConfigurations = ( AFA55B8909933F7200F3E977 /* Debug */, AFA55B8A09933F7200F3E977 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AFA55BA009933FDA00F3E977 /* Build configuration list for PBXNativeTarget "GFlux" */ = { isa = XCConfigurationList; buildConfigurations = ( AFA55BA109933FDA00F3E977 /* Debug */, AFA55BA209933FDA00F3E977 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AFA55BBA099340CE00F3E977 /* Build configuration list for PBXNativeTarget "Circuit" */ = { isa = XCConfigurationList; buildConfigurations = ( AFA55BBB099340CE00F3E977 /* Debug */, AFA55BBC099340CE00F3E977 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AFA55BF30993429100F3E977 /* Build configuration list for PBXNativeTarget "Menger" */ = { isa = XCConfigurationList; buildConfigurations = ( AFA55BF40993429100F3E977 /* Debug */, AFA55BF50993429100F3E977 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AFA55C1D0993431300F3E977 /* Build configuration list for PBXNativeTarget "Engine" */ = { isa = XCConfigurationList; buildConfigurations = ( AFA55C1E0993431300F3E977 /* Debug */, AFA55C1F0993431300F3E977 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AFA55C86099349A600F3E977 /* Build configuration list for PBXNativeTarget "GLSnake" */ = { isa = XCConfigurationList; buildConfigurations = ( AFA55C87099349A600F3E977 /* Debug */, AFA55C88099349A600F3E977 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AFA55CB809934BB200F3E977 /* Build configuration list for PBXNativeTarget "Boxed" */ = { isa = XCConfigurationList; buildConfigurations = ( AFA55CB909934BB200F3E977 /* Debug */, AFA55CBA09934BB200F3E977 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AFA55CDB09934CE400F3E977 /* Build configuration list for PBXNativeTarget "GLForestFire" */ = { isa = XCConfigurationList; buildConfigurations = ( AFA55CDC09934CE400F3E977 /* Debug */, AFA55CDD09934CE400F3E977 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AFA55D4B0993565300F3E977 /* Build configuration list for PBXNativeTarget "SBalls" */ = { isa = XCConfigurationList; buildConfigurations = ( AFA55D4C0993565300F3E977 /* Debug */, AFA55D4D0993565300F3E977 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AFA55D710993584B00F3E977 /* Build configuration list for PBXNativeTarget "Cubenetic" */ = { isa = XCConfigurationList; buildConfigurations = ( AFA55D720993584B00F3E977 /* Debug */, AFA55D730993584B00F3E977 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AFA55D8E099358C400F3E977 /* Build configuration list for PBXNativeTarget "Spheremonics" */ = { isa = XCConfigurationList; buildConfigurations = ( AFA55D8F099358C400F3E977 /* Debug */, AFA55D90099358C400F3E977 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AFA55DD709935D7000F3E977 /* Build configuration list for PBXNativeTarget "Lavalite" */ = { isa = XCConfigurationList; buildConfigurations = ( AFA55DD809935D7000F3E977 /* Debug */, AFA55DD909935D7000F3E977 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AFA55E0009935E4900F3E977 /* Build configuration list for PBXNativeTarget "Queens" */ = { isa = XCConfigurationList; buildConfigurations = ( AFA55E0109935E4900F3E977 /* Debug */, AFA55E0209935E4900F3E977 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AFA55E1C09935EDC00F3E977 /* Build configuration list for PBXNativeTarget "Endgame" */ = { isa = XCConfigurationList; buildConfigurations = ( AFA55E1D09935EDC00F3E977 /* Debug */, AFA55E1E09935EDC00F3E977 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AFA55E3F09935F8E00F3E977 /* Build configuration list for PBXNativeTarget "GLBlur" */ = { isa = XCConfigurationList; buildConfigurations = ( AFA55E4009935F8E00F3E977 /* Debug */, AFA55E4109935F8E00F3E977 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AFA55E5D09935FF900F3E977 /* Build configuration list for PBXNativeTarget "FlyingToasters" */ = { isa = XCConfigurationList; buildConfigurations = ( AFA55E5E09935FF900F3E977 /* Debug */, AFA55E5F09935FF900F3E977 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AFA55EE0099360E300F3E977 /* Build configuration list for PBXNativeTarget "BouncingCow" */ = { isa = XCConfigurationList; buildConfigurations = ( AFA55EE1099360E300F3E977 /* Debug */, AFA55EE2099360E300F3E977 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AFA55F1B099361B700F3E977 /* Build configuration list for PBXNativeTarget "JigglyPuff" */ = { isa = XCConfigurationList; buildConfigurations = ( AFA55F1C099361B700F3E977 /* Debug */, AFA55F1D099361B700F3E977 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AFA55F390993622F00F3E977 /* Build configuration list for PBXNativeTarget "Klein" */ = { isa = XCConfigurationList; buildConfigurations = ( AFA55F3A0993622F00F3E977 /* Debug */, AFA55F3B0993622F00F3E977 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AFA55F510993629000F3E977 /* Build configuration list for PBXNativeTarget "Hypertorus" */ = { isa = XCConfigurationList; buildConfigurations = ( AFA55F520993629000F3E977 /* Debug */, AFA55F530993629000F3E977 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AFA55F810993643600F3E977 /* Build configuration list for PBXNativeTarget "GLMatrix" */ = { isa = XCConfigurationList; buildConfigurations = ( AFA55F820993643600F3E977 /* Debug */, AFA55F830993643600F3E977 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AFA55FE209936BFA00F3E977 /* Build configuration list for PBXNativeTarget "CubeStorm" */ = { isa = XCConfigurationList; buildConfigurations = ( AFA55FE309936BFA00F3E977 /* Debug */, AFA55FE409936BFA00F3E977 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AFA5600809936C6D00F3E977 /* Build configuration list for PBXNativeTarget "GLKnots" */ = { isa = XCConfigurationList; buildConfigurations = ( AFA5600909936C6D00F3E977 /* Debug */, AFA5600A09936C6D00F3E977 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AFA5602309936CC800F3E977 /* Build configuration list for PBXNativeTarget "BlockTube" */ = { isa = XCConfigurationList; buildConfigurations = ( AFA5602409936CC800F3E977 /* Debug */, AFA5602509936CC800F3E977 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AFA5604109936D5100F3E977 /* Build configuration list for PBXNativeTarget "FlipFlop" */ = { isa = XCConfigurationList; buildConfigurations = ( AFA5604209936D5100F3E977 /* Debug */, AFA5604309936D5100F3E977 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AFA5605909936E2100F3E977 /* Build configuration list for PBXNativeTarget "AntInspect" */ = { isa = XCConfigurationList; buildConfigurations = ( AFA5605A09936E2100F3E977 /* Debug */, AFA5605B09936E2100F3E977 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AFA5607109936F3800F3E977 /* Build configuration list for PBXNativeTarget "AntSpotlight" */ = { isa = XCConfigurationList; buildConfigurations = ( AFA5607209936F3800F3E977 /* Debug */, AFA5607309936F3800F3E977 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AFA560BD0993718D00F3E977 /* Build configuration list for PBXNativeTarget "Polytopes" */ = { isa = XCConfigurationList; buildConfigurations = ( AFA560BE0993718D00F3E977 /* Debug */, AFA560BF0993718D00F3E977 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AFA5610C0993781600F3E977 /* Build configuration list for PBXNativeTarget "Molecule" */ = { isa = XCConfigurationList; buildConfigurations = ( AFA5610D0993781600F3E977 /* Debug */, AFA5610E0993781600F3E977 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AFA5611A099378EA00F3E977 /* Build configuration list for PBXLegacyTarget "molecules.h" */ = { isa = XCConfigurationList; buildConfigurations = ( AFA5611B099378EA00F3E977 /* Debug */, AFA5611C099378EA00F3E977 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AFA5616709937C0D00F3E977 /* Build configuration list for PBXNativeTarget "BlinkBox" */ = { isa = XCConfigurationList; buildConfigurations = ( AFA5616809937C0D00F3E977 /* Debug */, AFA5616909937C0D00F3E977 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AFA5618A09937CF100F3E977 /* Build configuration list for PBXNativeTarget "Noof" */ = { isa = XCConfigurationList; buildConfigurations = ( AFA5618B09937CF100F3E977 /* Debug */, AFA5618C09937CF100F3E977 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AFA561AC09937D7E00F3E977 /* Build configuration list for PBXNativeTarget "Polyhedra" */ = { isa = XCConfigurationList; buildConfigurations = ( AFA561AD09937D7E00F3E977 /* Debug */, AFA561AE09937D7E00F3E977 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AFA562160993849F00F3E977 /* Build configuration list for PBXNativeTarget "Providence" */ = { isa = XCConfigurationList; buildConfigurations = ( AFA562170993849F00F3E977 /* Debug */, AFA562180993849F00F3E977 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AFA5622E0993852500F3E977 /* Build configuration list for PBXNativeTarget "Pinion" */ = { isa = XCConfigurationList; buildConfigurations = ( AFA5622F0993852500F3E977 /* Debug */, AFA562300993852500F3E977 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AFA562CE099392C600F3E977 /* Build configuration list for PBXNativeTarget "Boing" */ = { isa = XCConfigurationList; buildConfigurations = ( AFA562CF099392C600F3E977 /* Debug */, AFA562D0099392C600F3E977 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AFA562E9099393C900F3E977 /* Build configuration list for PBXNativeTarget "AntMaze" */ = { isa = XCConfigurationList; buildConfigurations = ( AFA562EA099393C900F3E977 /* Debug */, AFA562EB099393C900F3E977 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AFA563010993943B00F3E977 /* Build configuration list for PBXNativeTarget "Tangram" */ = { isa = XCConfigurationList; buildConfigurations = ( AFA563020993943B00F3E977 /* Debug */, AFA563030993943B00F3E977 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AFA563230993951000F3E977 /* Build configuration list for PBXNativeTarget "Crackberg" */ = { isa = XCConfigurationList; buildConfigurations = ( AFA563240993951000F3E977 /* Debug */, AFA563250993951000F3E977 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AFA56340099395ED00F3E977 /* Build configuration list for PBXNativeTarget "GLHanoi" */ = { isa = XCConfigurationList; buildConfigurations = ( AFA56341099395ED00F3E977 /* Debug */, AFA56342099395ED00F3E977 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AFA56360099396C000F3E977 /* Build configuration list for PBXNativeTarget "Cube21" */ = { isa = XCConfigurationList; buildConfigurations = ( AFA56361099396C000F3E977 /* Debug */, AFA56362099396C000F3E977 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AFA56388099397B300F3E977 /* Build configuration list for PBXNativeTarget "TimeTunnel" */ = { isa = XCConfigurationList; buildConfigurations = ( AFA56389099397B300F3E977 /* Debug */, AFA5638A099397B300F3E977 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AFA563B3099398BB00F3E977 /* Build configuration list for PBXNativeTarget "Juggler3D" */ = { isa = XCConfigurationList; buildConfigurations = ( AFA563B4099398BB00F3E977 /* Debug */, AFA563B5099398BB00F3E977 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AFACE8851CC83458008B24CD /* Build configuration list for PBXNativeTarget "EnergyStream" */ = { isa = XCConfigurationList; buildConfigurations = ( AFACE8861CC83458008B24CD /* Debug */, AFACE8871CC83458008B24CD /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AFB591B7178B812C00EA4005 /* Build configuration list for PBXNativeTarget "Hexadrop" */ = { isa = XCConfigurationList; buildConfigurations = ( AFB591B8178B812C00EA4005 /* Debug */, AFB591B9178B812C00EA4005 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AFBFE75B178642DC00432B21 /* Build configuration list for PBXNativeTarget "Apple2-OSX" */ = { isa = XCConfigurationList; buildConfigurations = ( AFBFE75C178642DC00432B21 /* Debug */, AFBFE75D178642DC00432B21 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AFBFE77B178647FE00432B21 /* Build configuration list for PBXNativeTarget "Phosphor-OSX" */ = { isa = XCConfigurationList; buildConfigurations = ( AFBFE77C178647FE00432B21 /* Debug */, AFBFE77D178647FE00432B21 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AFC0E8BD1CDC601A008CAFAC /* Build configuration list for PBXNativeTarget "Hydrostat" */ = { isa = XCConfigurationList; buildConfigurations = ( AFC0E8BE1CDC601A008CAFAC /* Debug */, AFC0E8BF1CDC601A008CAFAC /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AFCF834D1AF5B515008BB7E1 /* Build configuration list for PBXNativeTarget "SplitFlap" */ = { isa = XCConfigurationList; buildConfigurations = ( AFCF834E1AF5B515008BB7E1 /* Debug */, AFCF834F1AF5B515008BB7E1 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AFD51B2D0F063B4A00471C02 /* Build configuration list for PBXNativeTarget "Photopile" */ = { isa = XCConfigurationList; buildConfigurations = ( AFD51B2E0F063B4A00471C02 /* Debug */, AFD51B2F0F063B4A00471C02 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AFD56E010996A03800BA26F7 /* Build configuration list for PBXNativeTarget "GLText" */ = { isa = XCConfigurationList; buildConfigurations = ( AFD56E020996A03800BA26F7 /* Debug */, AFD56E030996A03800BA26F7 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AFD56EBB0996A72600BA26F7 /* Build configuration list for PBXNativeTarget "Braid" */ = { isa = XCConfigurationList; buildConfigurations = ( AFD56EBC0996A72600BA26F7 /* Debug */, AFD56EBD0996A72600BA26F7 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AFD56EE70996A95700BA26F7 /* Build configuration list for PBXNativeTarget "Forest" */ = { isa = XCConfigurationList; buildConfigurations = ( AFD56EE80996A95700BA26F7 /* Debug */, AFD56EE90996A95700BA26F7 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AFD56F180996AAFA00BA26F7 /* Build configuration list for PBXNativeTarget "Vines" */ = { isa = XCConfigurationList; buildConfigurations = ( AFD56F190996AAFA00BA26F7 /* Debug */, AFD56F1A0996AAFA00BA26F7 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AFD56F300996AB8A00BA26F7 /* Build configuration list for PBXNativeTarget "Galaxy" */ = { isa = XCConfigurationList; buildConfigurations = ( AFD56F310996AB8A00BA26F7 /* Debug */, AFD56F320996AB8A00BA26F7 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AFD56F5C0996AEEE00BA26F7 /* Build configuration list for PBXNativeTarget "Grav" */ = { isa = XCConfigurationList; buildConfigurations = ( AFD56F5D0996AEEE00BA26F7 /* Debug */, AFD56F5E0996AEEE00BA26F7 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AFD56F780996B01600BA26F7 /* Build configuration list for PBXNativeTarget "Hopalong" */ = { isa = XCConfigurationList; buildConfigurations = ( AFD56F790996B01600BA26F7 /* Debug */, AFD56F7A0996B01600BA26F7 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AFD56F990996B09400BA26F7 /* Build configuration list for PBXNativeTarget "Laser" */ = { isa = XCConfigurationList; buildConfigurations = ( AFD56F9A0996B09400BA26F7 /* Debug */, AFD56F9B0996B09400BA26F7 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AFD56FB00996B10F00BA26F7 /* Build configuration list for PBXNativeTarget "Lightning" */ = { isa = XCConfigurationList; buildConfigurations = ( AFD56FB10996B10F00BA26F7 /* Debug */, AFD56FB20996B10F00BA26F7 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AFD56FC60996B18F00BA26F7 /* Build configuration list for PBXNativeTarget "Lisa" */ = { isa = XCConfigurationList; buildConfigurations = ( AFD56FC70996B18F00BA26F7 /* Debug */, AFD56FC80996B18F00BA26F7 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AFD56FDC0996B20900BA26F7 /* Build configuration list for PBXNativeTarget "Lissie" */ = { isa = XCConfigurationList; buildConfigurations = ( AFD56FDD0996B20900BA26F7 /* Debug */, AFD56FDE0996B20900BA26F7 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AFD570050996B43800BA26F7 /* Build configuration list for PBXNativeTarget "Penrose" */ = { isa = XCConfigurationList; buildConfigurations = ( AFD570060996B43800BA26F7 /* Debug */, AFD570070996B43800BA26F7 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AFD5701C0996B4CC00BA26F7 /* Build configuration list for PBXNativeTarget "Sierpinski" */ = { isa = XCConfigurationList; buildConfigurations = ( AFD5701D0996B4CC00BA26F7 /* Debug */, AFD5701E0996B4CC00BA26F7 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AFD570330996B56D00BA26F7 /* Build configuration list for PBXNativeTarget "Sphere" */ = { isa = XCConfigurationList; buildConfigurations = ( AFD570340996B56D00BA26F7 /* Debug */, AFD570350996B56D00BA26F7 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AFD570500996B61600BA26F7 /* Build configuration list for PBXNativeTarget "Spiral" */ = { isa = XCConfigurationList; buildConfigurations = ( AFD570510996B61600BA26F7 /* Debug */, AFD570520996B61600BA26F7 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AFD570660996B6A300BA26F7 /* Build configuration list for PBXNativeTarget "FadePlot" */ = { isa = XCConfigurationList; buildConfigurations = ( AFD570670996B6A300BA26F7 /* Debug */, AFD570680996B6A300BA26F7 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AFD5707C0996B72700BA26F7 /* Build configuration list for PBXNativeTarget "Mountain" */ = { isa = XCConfigurationList; buildConfigurations = ( AFD5707D0996B72700BA26F7 /* Debug */, AFD5707E0996B72700BA26F7 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AFD570920996B80300BA26F7 /* Build configuration list for PBXNativeTarget "Triangle" */ = { isa = XCConfigurationList; buildConfigurations = ( AFD570930996B80300BA26F7 /* Debug */, AFD570940996B80300BA26F7 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AFD570A80996B88E00BA26F7 /* Build configuration list for PBXNativeTarget "Worm" */ = { isa = XCConfigurationList; buildConfigurations = ( AFD570A90996B88E00BA26F7 /* Debug */, AFD570AA0996B88E00BA26F7 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AFD570BE0996B93000BA26F7 /* Build configuration list for PBXNativeTarget "Rotor" */ = { isa = XCConfigurationList; buildConfigurations = ( AFD570BF0996B93000BA26F7 /* Debug */, AFD570C00996B93000BA26F7 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AFD570D60996B9F800BA26F7 /* Build configuration list for PBXNativeTarget "Ant" */ = { isa = XCConfigurationList; buildConfigurations = ( AFD570D70996B9F800BA26F7 /* Debug */, AFD570D80996B9F800BA26F7 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AFD570F70996BBBF00BA26F7 /* Build configuration list for PBXNativeTarget "Flow" */ = { isa = XCConfigurationList; buildConfigurations = ( AFD570F80996BBBF00BA26F7 /* Debug */, AFD570F90996BBBF00BA26F7 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AFD571200996BE9300BA26F7 /* Build configuration list for PBXNativeTarget "Discrete" */ = { isa = XCConfigurationList; buildConfigurations = ( AFD571210996BE9300BA26F7 /* Debug */, AFD571220996BE9300BA26F7 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AFD571390996BF2E00BA26F7 /* Build configuration list for PBXNativeTarget "Apollonian" */ = { isa = XCConfigurationList; buildConfigurations = ( AFD5713A0996BF2E00BA26F7 /* Debug */, AFD5713B0996BF2E00BA26F7 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AFD571500996C01700BA26F7 /* Build configuration list for PBXNativeTarget "Euler2D" */ = { isa = XCConfigurationList; buildConfigurations = ( AFD571510996C01700BA26F7 /* Debug */, AFD571520996C01700BA26F7 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AFD571660996C0CE00BA26F7 /* Build configuration list for PBXNativeTarget "Thornbird" */ = { isa = XCConfigurationList; buildConfigurations = ( AFD571670996C0CE00BA26F7 /* Debug */, AFD571680996C0CE00BA26F7 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AFD571C20996D9DC00BA26F7 /* Build configuration list for PBXNativeTarget "Juggle" */ = { isa = XCConfigurationList; buildConfigurations = ( AFD571C30996D9DC00BA26F7 /* Debug */, AFD571C40996D9DC00BA26F7 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AFD5722F0996E4A300BA26F7 /* Build configuration list for PBXNativeTarget "Swirl" */ = { isa = XCConfigurationList; buildConfigurations = ( AFD572300996E4A300BA26F7 /* Debug */, AFD572310996E4A300BA26F7 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AFD5727A0996EE8500BA26F7 /* Build configuration list for PBXNativeTarget "Polyominoes" */ = { isa = XCConfigurationList; buildConfigurations = ( AFD5727B0996EE8500BA26F7 /* Debug */, AFD5727C0996EE8500BA26F7 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AFD572B20996F99600BA26F7 /* Build configuration list for PBXNativeTarget "Bouboule" */ = { isa = XCConfigurationList; buildConfigurations = ( AFD572B30996F99600BA26F7 /* Debug */, AFD572B40996F99600BA26F7 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AFD572CF0996FC0F00BA26F7 /* Build configuration list for PBXNativeTarget "Crystal" */ = { isa = XCConfigurationList; buildConfigurations = ( AFD572D00996FC0F00BA26F7 /* Debug */, AFD572D10996FC0F00BA26F7 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AFD57306099701C000BA26F7 /* Build configuration list for PBXNativeTarget "Julia" */ = { isa = XCConfigurationList; buildConfigurations = ( AFD57307099701C000BA26F7 /* Debug */, AFD57308099701C000BA26F7 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AFD5736A0997411200BA26F7 /* Build configuration list for PBXNativeTarget "Strange" */ = { isa = XCConfigurationList; buildConfigurations = ( AFD5736B0997411200BA26F7 /* Debug */, AFD5736C0997411200BA26F7 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AFDA659E178A52B70070D24B /* Build configuration list for PBXNativeTarget "Unknown Pleasures" */ = { isa = XCConfigurationList; buildConfigurations = ( AFDA659F178A52B70070D24B /* Debug */, AFDA65A0178A52B70070D24B /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AFE2A4670E2E904600ADB298 /* Build configuration list for PBXNativeTarget "SkyTentacles" */ = { isa = XCConfigurationList; buildConfigurations = ( AFE2A4680E2E904600ADB298 /* Debug */, AFE2A4690E2E904600ADB298 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AFE30BF90E52B14700CCF4A5 /* Build configuration list for PBXNativeTarget "Sonar" */ = { isa = XCConfigurationList; buildConfigurations = ( AFE30BFA0E52B14700CCF4A5 /* Debug */, AFE30BFB0E52B14700CCF4A5 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AFE6A1940CDD7B2E002805BF /* Build configuration list for PBXNativeTarget "MoebiusGears" */ = { isa = XCConfigurationList; buildConfigurations = ( AFE6A1950CDD7B2E002805BF /* Debug */, AFE6A1960CDD7B2E002805BF /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AFE6A42A0CDD7FAA002805BF /* Build configuration list for PBXNativeTarget "Abstractile" */ = { isa = XCConfigurationList; buildConfigurations = ( AFE6A42B0CDD7FAA002805BF /* Debug */, AFE6A42C0CDD7FAA002805BF /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AFEC23DF1CB6EAE100DE138F /* Build configuration list for PBXNativeTarget "DymaxionMap" */ = { isa = XCConfigurationList; buildConfigurations = ( AFEC23E01CB6EAE100DE138F /* Debug */, AFEC23E11CB6EAE100DE138F /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AFEE105F1D13406000AAC8F7 /* Build configuration list for PBXNativeTarget "CubeTwist" */ = { isa = XCConfigurationList; buildConfigurations = ( AFEE10601D13406000AAC8F7 /* Debug */, AFEE10611D13406000AAC8F7 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AFEE107E1D15EB0800AAC8F7 /* Build configuration list for PBXNativeTarget "CubeStack" */ = { isa = XCConfigurationList; buildConfigurations = ( AFEE107F1D15EB0800AAC8F7 /* Debug */, AFEE10801D15EB0800AAC8F7 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AFEE109D1D17E20B00AAC8F7 /* Build configuration list for PBXNativeTarget "Splodesic" */ = { isa = XCConfigurationList; buildConfigurations = ( AFEE109E1D17E20B00AAC8F7 /* Debug */, AFEE109F1D17E20B00AAC8F7 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AFF2868F17860E830050A578 /* Build configuration list for PBXNativeTarget "QuasiCrystal" */ = { isa = XCConfigurationList; buildConfigurations = ( AFF2869017860E830050A578 /* Debug */, AFF2869117860E830050A578 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AFF3C9F817CCAC440028F240 /* Build configuration list for PBXNativeTarget "Geodesic" */ = { isa = XCConfigurationList; buildConfigurations = ( AFF3C9F917CCAC440028F240 /* Debug */, AFF3C9FA17CCAC440028F240 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AFF463440C4403E400EE6509 /* Build configuration list for PBXNativeTarget "CWaves" */ = { isa = XCConfigurationList; buildConfigurations = ( AFF463450C4403E400EE6509 /* Debug */, AFF463460C4403E400EE6509 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AFF463690C440AEF00EE6509 /* Build configuration list for PBXNativeTarget "GLCells" */ = { isa = XCConfigurationList; buildConfigurations = ( AFF4636A0C440AEF00EE6509 /* Debug */, AFF4636B0C440AEF00EE6509 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AFFAB32619158CE40020F021 /* Build configuration list for PBXNativeTarget "ProjectivePlane" */ = { isa = XCConfigurationList; buildConfigurations = ( AFFAB32719158CE40020F021 /* Debug */, AFFAB32819158CE40020F021 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; C01FCF4E08A954540054247B /* Build configuration list for PBXProject "xscreensaver" */ = { isa = XCConfigurationList; buildConfigurations = ( C01FCF4F08A954540054247B /* Debug */, C01FCF5008A954540054247B /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; CE3D01631B76F4C100993C75 /* Build configuration list for PBXNativeTarget "TestX11" */ = { isa = XCConfigurationList; buildConfigurations = ( CE3D01641B76F4C100993C75 /* Debug */, CE3D01651B76F4C100993C75 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; /* End XCConfigurationList section */ }; rootObject = 29B97313FDCFA39411CA2CEA /* Project object */; } xscreensaver-5.36/utils/README000644 000767 000024 00000000425 05627212565 016171 0ustar00jwzstaff000000 000000 This directory contains various utilities that are used both by the screensaver driver and by the demo programs; for example, a portable implementation of usleep(), and code for manipulating color maps. If you have compilation problems, check the parameters in ../config.h. xscreensaver-5.36/utils/Makefile.in000664 000767 000000 00000025751 12777052474 017371 0ustar00jwzwheel000000 000000 # utils/Makefile.in --- xscreensaver, Copyright (c) 1997-2010 Jamie Zawinski. # the `../configure' script generates `utils/Makefile' from this file. # The utilities in this directory are used mostly by the demos in ../hacks/. # The Makefile in that directory builds executables by simply referencing # the .o files in this directory. ############################################################################## # # Some rambling about dynamic libraries follows, ignore it if you don't care # (which is almost assuredly the case.) # # # It would probably be sensible to just build a single .a file in this # directory, and link the hacks against that (statically.) I haven't done # that for two reasons: first, it works now, and why fix what ain't broke; # second, it wouldn't actually improve anything for the end user (it would # just make the Makefiles be a little smaller.) # # People sometimes suggest that the stuff in this directory should be in a # dynamic library, and that the hacks should be linked dynamically against # it. I haven't done this for a number of reasons: # # * First, the only thing that would improve would be disk space, in that # the executable files themselves would be smaller. That's it. Many other # things would get worse if we used a dynamic library: # # * Complication of installation procedures: suddenly, before any of the # hacks will work, you need to have a dynamic library installed, and # the system configured to use it. This is, basically, rocket science. # Most people don't know how to do this, it's a huge pain, and on many # systems, it requires root access. # # * Complication of the Makefile: every system builds dynamic libraries # differently. Every compiler takes different flags. I don't want to # do the hand-holding for the scores of Unix systems and compilers on # which people try to build this program. # # * Reduction of maintainability: gdb is remarkably bad at dealing with # debug info in dynamic libraries, and when debugging a hack, one would # constantly be fighting the linker and the debugger (or linking # statically when debugging.) # # * Version skew: when things are statically linked, it's perfectly ok to # make incompatible changes to the APIs defined in this directory, so long # as the current version in ../hacks/ is in sync. Much more care would # need to be taken with such things if dynamic libraries were involved, # to make sure that the major and minor versions of the library changed # at the appropriate time. This isn't too hard, but it's more work, and # yet another opportunity to screw up. # # * Runtime memory usage goes *up*. That's right, up! When a program # links in a dynamic library, the whole library is brought into the # address space, not just the files that are actually used. Normally, # this is ok, because if several programs are using (for example) # libX11.so, chances are that the savings outweighs the overhead. But # the nature of xscreensaver is that only one of the hacks ever runs at # a time -- so there would never be a second program using the utils/ # dynamic library with which things could be shared. # # * Runtime speed decreases slightly, since dynamic code is marginally # slower. On modern machines, this probably doesn't make a perceptible # difference, however. # # So basically, I just don't think using libraries would be a win, and it would # definitely cause more of a maintenance and portability headache. However, # if someone else wants to do the work to make it be an option to configure, # and verifies that it works on several (more than three) different Unixes, # I'd be happy to take the patches. # -- jwz, 30-Jun-98 # ############################################################################## @SET_MAKE@ .SUFFIXES: .SUFFIXES: .c .o srcdir = @srcdir@ VPATH = @srcdir@ prefix = @prefix@ datarootdir = @datarootdir@ CC = @CC@ CFLAGS = @CFLAGS@ DEFS = @DEFS@ DEPEND = @DEPEND@ DEPEND_FLAGS = @DEPEND_FLAGS@ DEPEND_DEFINES = @DEPEND_DEFINES@ SHELL = /bin/sh INSTALL = @INSTALL@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_DIRS = @INSTALL_DIRS@ X_CFLAGS = @X_CFLAGS@ INCLUDES_1 = -I$(srcdir) -I.. INCLUDES = $(INCLUDES_1) @INCLUDES@ SRCS = alpha.c colors.c fade.c grabscreen.c grabclient.c hsv.c \ overlay.c resources.c spline.c usleep.c visual.c \ visual-gl.c xmu.c logo.c yarandom.c erase.c \ xshm.c xdbe.c colorbars.c minixpm.c textclient.c \ textclient-mobile.c aligned_malloc.c thread_util.c \ async_netdb.c xft.c utf8wc.c OBJS = alpha.o colors.o fade.o grabscreen.o grabclient.o hsv.o \ overlay.o resources.o spline.o usleep.o visual.o \ visual-gl.o xmu.o logo.o yarandom.o erase.o \ xshm.o xdbe.o colorbars.o minixpm.o textclient.o \ textclient-mobile.o aligned_malloc.o thread_util.o \ async_netdb.o xft.o utf8wc.o HDRS = alpha.h colors.h fade.h grabscreen.h hsv.h resources.h \ spline.h usleep.h utils.h version.h visual.h vroot.h xmu.h \ yarandom.h erase.h xshm.h xdbe.h colorbars.h minixpm.h \ xscreensaver-intl.h textclient.h aligned_malloc.h \ thread_util.h async_netdb.h xft.h utf8wc.h STAR = * LOGOS = images/$(STAR).xpm \ images/$(STAR).png \ images/$(STAR).gif \ images/$(STAR).eps EXTRAS = README Makefile.in ad2c VMSFILES = compile_axp.com compile_decc.com vms-gtod.c vms-gtod.h \ vms-strdup.c TARFILES = $(EXTRAS) $(VMSFILES) $(SRCS) $(HDRS) $(LOGOS) default: all all: $(OBJS) install: install-program install-man uninstall: uninstall-program uninstall-man install-strip: $(MAKE) INSTALL_PROGRAM='$(INSTALL_PROGRAM) -s' install install-program: install-man: uninstall-program: uninstall-man: clean: -rm -f *.o a.out core distclean: clean -rm -f Makefile TAGS *~ "#"* # Adds all current dependencies to Makefile depend: $(DEPEND) -s '# DO NOT DELETE: updated by make depend' \ $(DEPEND_FLAGS) -- \ $(INCLUDES) $(DEFS) $(DEPEND_DEFINES) $(CFLAGS) $(X_CFLAGS) -- \ $(SRCS) # Adds some dependencies to Makefile.in -- not totally accurate, but pretty # close. This excludes dependencies on files in /usr/include, etc. It tries # to include only dependencies on files which are themselves a part of this # package. distdepend:: @echo updating dependencies in `pwd`/Makefile.in... ; \ $(DEPEND) -w 0 -f - \ -s '# DO NOT DELETE: updated by make distdepend' $(DEPEND_FLAGS) -- \ $(INCLUDES_1) $(DEFS) $(DEPEND_DEFINES) $(CFLAGS) $(X_CFLAGS) -- \ $(SRCS) 2>/dev/null | \ sort -d | \ ( \ awk '/^# .*Makefile.in ---/,/^# DO .*distdepend/' < Makefile.in ; \ sed -e '/^#.*/d' \ -e 's@ \./@ @g;s@ /[^ ]*@@g;/^.*:$$/d' \ -e 's@ \([^$$]\)@ $$(srcdir)/\1@g' \ -e 's@ $$(srcdir)/\(.*config.h\)@ \1@g' ; \ echo '' \ ) > /tmp/distdepend.$$$$ && \ mv /tmp/distdepend.$$$$ Makefile.in TAGS: tags tags: find $(srcdir) -name '*.[chly]' -print | xargs etags -a echo_tarfiles: @echo $(TARFILES) # How we build object files in this directory. .c.o: $(CC) -c $(INCLUDES) $(DEFS) $(CPPFLAGS) $(CFLAGS) $(X_CFLAGS) $< # Rules for generating the VMS makefiles on Unix, so that it doesn't have to # be done by hand... # VMS_AXP_COMPILE=$$ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H)/INCL=([],[-]) compile_axp.com: Makefile.in @echo generating $@ from $<... ; \ ( ( for c in $(SRCS) vms-*.c ; do \ c=`echo $$c | tr a-z A-Z` ; \ echo "$(VMS_AXP_COMPILE) $$c" ; \ done ; \ ) | sort -d ; \ echo '$$ lib/cre utils.olb_axp' ; \ echo '$$ lib utils.olb_axp *.obj' ; \ echo '$$! delete/noconf *.obj;' ; \ ) > $@ compile_decc.com: compile_axp.com @echo generating $@ from $<... ; \ sed 's/axp/decc/g' < $< > $@ distdepend:: compile_axp.com compile_decc.com ############################################################################## # # DO NOT DELETE: updated by make distdepend aligned_malloc.o: $(srcdir)/aligned_malloc.h alpha.o: $(srcdir)/alpha.h alpha.o: ../config.h alpha.o: $(srcdir)/hsv.h alpha.o: $(srcdir)/resources.h alpha.o: $(srcdir)/utils.h alpha.o: $(srcdir)/visual.h alpha.o: $(srcdir)/yarandom.h async_netdb.o: $(srcdir)/aligned_malloc.h async_netdb.o: $(srcdir)/async_netdb.h async_netdb.o: ../config.h async_netdb.o: $(srcdir)/thread_util.h colorbars.o: $(srcdir)/colorbars.h colorbars.o: ../config.h colorbars.o: $(srcdir)/resources.h colorbars.o: $(srcdir)/utils.h colors.o: $(srcdir)/colors.h colors.o: ../config.h colors.o: $(srcdir)/hsv.h colors.o: $(srcdir)/utils.h colors.o: $(srcdir)/visual.h colors.o: $(srcdir)/yarandom.h erase.o: ../config.h erase.o: $(srcdir)/erase.h erase.o: $(srcdir)/resources.h erase.o: $(srcdir)/usleep.h erase.o: $(srcdir)/utils.h erase.o: $(srcdir)/yarandom.h fade.o: ../config.h fade.o: $(srcdir)/fade.h fade.o: $(srcdir)/usleep.h fade.o: $(srcdir)/utils.h fade.o: $(srcdir)/visual.h grabclient.o: ../config.h 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 grabscreen.o: $(srcdir)/resources.h grabscreen.o: $(srcdir)/usleep.h grabscreen.o: $(srcdir)/utils.h grabscreen.o: $(srcdir)/visual.h grabscreen.o: $(srcdir)/vroot.h grabscreen.o: $(srcdir)/yarandom.h hsv.o: ../config.h hsv.o: $(srcdir)/hsv.h hsv.o: $(srcdir)/utils.h logo.o: ../config.h logo.o: $(srcdir)/images/logo-180.xpm logo.o: $(srcdir)/images/logo-50.xpm logo.o: $(srcdir)/minixpm.h logo.o: $(srcdir)/resources.h logo.o: $(srcdir)/utils.h logo.o: $(srcdir)/visual.h minixpm.o: ../config.h minixpm.o: $(srcdir)/minixpm.h overlay.o: ../config.h overlay.o: $(srcdir)/utils.h overlay.o: $(srcdir)/visual.h resources.o: ../config.h resources.o: $(srcdir)/resources.h resources.o: $(srcdir)/utils.h spline.o: ../config.h spline.o: $(srcdir)/spline.h spline.o: $(srcdir)/utils.h textclient-mobile.o: ../config.h textclient-mobile.o: $(srcdir)/utils.h textclient.o: ../config.h textclient.o: $(srcdir)/resources.h textclient.o: $(srcdir)/textclient.h textclient.o: $(srcdir)/utils.h thread_util.o: $(srcdir)/aligned_malloc.h thread_util.o: ../config.h thread_util.o: $(srcdir)/resources.h thread_util.o: $(srcdir)/thread_util.h usleep.o: ../config.h utf8wc.o: ../config.h utf8wc.o: $(srcdir)/utf8wc.h visual-gl.o: ../config.h visual-gl.o: $(srcdir)/resources.h visual-gl.o: $(srcdir)/utils.h visual-gl.o: $(srcdir)/visual.h visual.o: ../config.h visual.o: $(srcdir)/resources.h visual.o: $(srcdir)/utils.h visual.o: $(srcdir)/visual.h xdbe.o: ../config.h xdbe.o: $(srcdir)/resources.h xdbe.o: $(srcdir)/utils.h xdbe.o: $(srcdir)/xdbe.h xft.o: ../config.h xmu.o: ../config.h xshm.o: ../config.h xshm.o: $(srcdir)/resources.h xshm.o: $(srcdir)/utils.h xshm.o: $(srcdir)/xshm.h yarandom.o: ../config.h yarandom.o: $(srcdir)/yarandom.h xscreensaver-5.36/utils/ad2c000755 000767 000024 00000001407 10160203524 016030 0ustar00jwzstaff000000 000000 #!/bin/sh # # ad2c : Convert app-defaults file to C strings decls. # # George Ferguson, ferguson@cs.rcohester.edu, 12 Nov 1990. # 19 Mar 1991 : gf # Made it self-contained. # 6 Jan 1992 : mycroft@gnu.ai.mit.edu (Charles Hannum) # Removed use of "-n" and ":read" label since Gnu and # IBM sed print pattern space on "n" command. Still works # with Sun sed, of course. # 7 Jan 1992: matthew@sunpix.East.Sun.COM (Matthew Stier) # Escape quotes after escaping backslashes. # 22 Oct 2004: jwz: # Convert CR to LF. # #sed 's/\r/\n/g' "$@" | perl -npe 's/\r/\n/g' < "$@" | sed ' /^!/d /^$/d s/\\/\\\\/g s/\\$//g s/"/\\"/g s/^/"/ : test /\\$/b slash s/$/",/ p d : slash n /^!/d /^$/d s/"/\\"/g s/\\\\/\\/g s/\\n/\\\\n/g s/\\t/\\\\t/g s/\\f/\\\\f/g s/\\b/\\\\b/g b test' xscreensaver-5.36/utils/compile_axp.com000644 000767 000024 00000004176 12777052474 020325 0ustar00jwzstaff000000 000000 $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H)/INCL=([],[-]) ALIGNED_MALLOC.C $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H)/INCL=([],[-]) ALPHA.C $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H)/INCL=([],[-]) ASYNC_NETDB.C $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H)/INCL=([],[-]) COLORBARS.C $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H)/INCL=([],[-]) COLORS.C $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H)/INCL=([],[-]) ERASE.C $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H)/INCL=([],[-]) FADE.C $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H)/INCL=([],[-]) GRABCLIENT.C $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H)/INCL=([],[-]) GRABSCREEN.C $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H)/INCL=([],[-]) HSV.C $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H)/INCL=([],[-]) LOGO.C $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H)/INCL=([],[-]) MINIXPM.C $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H)/INCL=([],[-]) OVERLAY.C $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H)/INCL=([],[-]) RESOURCES.C $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H)/INCL=([],[-]) SPLINE.C $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H)/INCL=([],[-]) TEXTCLIENT.C $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H)/INCL=([],[-]) TEXTCLIENT-MOBILE.C $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H)/INCL=([],[-]) THREAD_UTIL.C $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H)/INCL=([],[-]) USLEEP.C $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H)/INCL=([],[-]) UTF8WC.C $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H)/INCL=([],[-]) VISUAL.C $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H)/INCL=([],[-]) VISUAL-GL.C $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H)/INCL=([],[-]) VMS-GTOD.C $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H)/INCL=([],[-]) VMS-STRDUP.C $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H)/INCL=([],[-]) XDBE.C $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H)/INCL=([],[-]) XFT.C $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H)/INCL=([],[-]) XMU.C $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H)/INCL=([],[-]) XSHM.C $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H)/INCL=([],[-]) YARANDOM.C $ lib/cre utils.olb_axp $ lib utils.olb_axp *.obj $! delete/noconf *.obj; xscreensaver-5.36/utils/compile_decc.com000644 000767 000024 00000004200 12777052474 020417 0ustar00jwzstaff000000 000000 $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H)/INCL=([],[-]) ALIGNED_MALLOC.C $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H)/INCL=([],[-]) ALPHA.C $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H)/INCL=([],[-]) ASYNC_NETDB.C $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H)/INCL=([],[-]) COLORBARS.C $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H)/INCL=([],[-]) COLORS.C $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H)/INCL=([],[-]) ERASE.C $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H)/INCL=([],[-]) FADE.C $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H)/INCL=([],[-]) GRABCLIENT.C $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H)/INCL=([],[-]) GRABSCREEN.C $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H)/INCL=([],[-]) HSV.C $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H)/INCL=([],[-]) LOGO.C $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H)/INCL=([],[-]) MINIXPM.C $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H)/INCL=([],[-]) OVERLAY.C $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H)/INCL=([],[-]) RESOURCES.C $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H)/INCL=([],[-]) SPLINE.C $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H)/INCL=([],[-]) TEXTCLIENT.C $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H)/INCL=([],[-]) TEXTCLIENT-MOBILE.C $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H)/INCL=([],[-]) THREAD_UTIL.C $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H)/INCL=([],[-]) USLEEP.C $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H)/INCL=([],[-]) UTF8WC.C $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H)/INCL=([],[-]) VISUAL.C $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H)/INCL=([],[-]) VISUAL-GL.C $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H)/INCL=([],[-]) VMS-GTOD.C $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H)/INCL=([],[-]) VMS-STRDUP.C $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H)/INCL=([],[-]) XDBE.C $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H)/INCL=([],[-]) XFT.C $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H)/INCL=([],[-]) XMU.C $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H)/INCL=([],[-]) XSHM.C $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H)/INCL=([],[-]) YARANDOM.C $ lib/cre utils.olb_decc $ lib utils.olb_decc *.obj $! delete/noconf *.obj; xscreensaver-5.36/utils/vms-gtod.c000644 000767 000024 00000001743 12701612233 017204 0ustar00jwzstaff000000 000000 /* * UNIX-style Time Functions, by pmoreau@cena.dgac.fr * (picked up from XVMSUTILS unix emulation routines for VMS by * Trevor Taylor, Patrick Mahans and Martin P.J. Zinser) * * 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. */ #include #include #include #include "vms-gtod.h" /* * gettimeofday(2) - Returns the current time */ int gettimeofday(tv) struct timeval *tv; { timeb_t tmp_time; ftime(&tmp_time); tv->tv_sec = tmp_time.time; tv->tv_usec = tmp_time.millitm * 1000; return (0); } xscreensaver-5.36/utils/vms-gtod.h000644 000767 000024 00000003235 12701612233 017207 0ustar00jwzstaff000000 000000 /* @(#)time.h 2.9 87/01/17 SMI; from UCB 7.1 6/4/86 */ /* Definitions of various structures used on UNIX for time-related syscalls. */ /* * Copyright (c) 1982, 1986 Regents of the University of California. * All rights reserved. The Berkeley software License Agreement * specifies the terms and conditions for redistribution. */ #ifndef _VMS_GTOD_ #define _VMS_GTOD_ #ifdef __cplusplus extern "C" { #endif /* * Structure returned by gettimeofday(2) system call, * and used in other calls. */ #ifndef __DECC struct timeval { long tv_sec; /* seconds */ long tv_usec; /* and microseconds */ }; #else #if __DECC_VER < 50200000 struct timeval { long tv_sec; /* seconds */ long tv_usec; /* and microseconds */ }; #endif /* __DECC_VER */ #endif /* __DECC */ /* * Operations on timevals. * * NB: timercmp does not work for >= or <=. */ #define timerisset(tvp) ((tvp)->tv_sec || (tvp)->tv_usec) #define timercmp(tvp, uvp, cmp) \ ((tvp)->tv_sec cmp (uvp)->tv_sec || \ (tvp)->tv_sec == (uvp)->tv_sec && (tvp)->tv_usec cmp (uvp)->tv_usec) #define timerclear(tvp) (tvp)->tv_sec = (tvp)->tv_usec = 0 /* * Names of the interval timers, and structure * defining a timer setting. */ #define ITIMER_REAL 0 #define ITIMER_VIRTUAL 1 #define ITIMER_PROF 2 #ifndef __DECC struct itimerval { struct timeval it_interval; /* timer interval */ struct timeval it_value; /* current value */ }; #else #if __DECC_VER < 50200000 struct itimerval { struct timeval it_interval; /* timer interval */ struct timeval it_value; /* current value */ }; #endif /* __DECC_VER */ #endif /* __DECC */ #ifndef KERNEL #include #endif #ifdef __cplusplus } #endif #endif /*!_VMS_GTOD_*/ xscreensaver-5.36/utils/vms-strdup.c000644 000767 000024 00000000757 12701612233 017574 0ustar00jwzstaff000000 000000 /* * strdup.c * * Simple version of strdup for machines without it (ie DEC Ultrix 4.2) * Apparently VMS only got strdup in 1995 (v5.2...) * * By David Chatterton * 29 July 1993 * * You can do anything you like to this... :) * I've stolen it from xpilot and added it to the xvmstuils MPJZ ;-) */ #if (__VMS_VER < 70000000) #include #include char* strdup (const char* s1) { char* s2; if (s2 = (char*)malloc(strlen(s1)+1)) strcpy(s2,s1); return s2; } #endif xscreensaver-5.36/utils/alpha.c000644 000767 000024 00000014067 12701612232 016533 0ustar00jwzstaff000000 000000 /* xscreensaver, Copyright (c) 1992, 1995, 1996, 1997, 2006 * 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. */ /* Beauty is only skin deep, unless you've got an alpha channel. */ #include "utils.h" #include "alpha.h" #include "visual.h" #include "hsv.h" #include "yarandom.h" #include "resources.h" #include #ifndef countof # define countof(x) (sizeof(*(x))/sizeof((x))) #endif /* I don't believe this fucking language doesn't have builtin exponentiation. I further can't believe that the fucking ^ character means fucking XOR!! */ static int i_exp (int i, int j) { int k = 1; while (j--) k *= i; return k; } static void merge_colors (int argc, XColor **argv, XColor *into_color, int mask, Bool additive_p) { int j; *into_color = *argv [0]; into_color->pixel |= mask; for (j = 1; j < argc; j++) { # define SHORT_INC(x,y) (x = ((((x)+(y)) > 0xFFFF) ? 0xFFFF : ((x)+(y)))) # define SHORT_DEC(x,y) (x = ((((x)-(y)) < 0) ? 0 : ((x)-(y)))) if (additive_p) { SHORT_INC (into_color->red, argv[j]->red); SHORT_INC (into_color->green, argv[j]->green); SHORT_INC (into_color->blue, argv[j]->blue); } else { SHORT_DEC (into_color->red, argv[j]->red); SHORT_DEC (into_color->green, argv[j]->green); SHORT_DEC (into_color->blue, argv[j]->blue); } # undef SHORT_INC # undef SHORT_DEC } } static void permute_colors (XColor *pcolors, XColor *colors, int count, unsigned long *plane_masks, Bool additive_p) { int out = 0; int max = i_exp (2, count); if (count > 31) abort (); for (out = 1; out < max; out++) { XColor *argv [32]; int this_mask = 0; int argc = 0; int bit; for (bit = 0; bit < 32; bit++) if (out & (1< 1 && !XAllocColorCells (dpy, cmap, False, plane_masks, nplanes, base_pixel_ret, 1)) nplanes--; return nplanes; } static void initialize_transparency_colormap (Display *dpy, Colormap cmap, int nplanes, unsigned long base_pixel, unsigned long *plane_masks, XColor *colors, Bool additive_p) { int i; int total_colors = i_exp (2, nplanes); XColor *all_colors = (XColor *) calloc (total_colors, sizeof (XColor)); for (i = 0; i < nplanes; i++) colors[i].pixel = base_pixel | plane_masks [i]; permute_colors (colors, all_colors, nplanes, plane_masks, additive_p); /* clone the default background of the window into our "base" pixel */ all_colors [total_colors - 1].pixel = get_pixel_resource (dpy, cmap, "background", "Background"); XQueryColor (dpy, cmap, &all_colors [total_colors - 1]); all_colors [total_colors - 1].pixel = base_pixel; for (i = 0; i < total_colors; i++) all_colors[i].flags = DoRed|DoGreen|DoBlue; XStoreColors (dpy, cmap, all_colors, total_colors); XFree ((XPointer) all_colors); } Bool allocate_alpha_colors (Screen *screen, Visual *visual, Colormap cmap, int *nplanesP, Bool additive_p, unsigned long **plane_masks, unsigned long *base_pixelP) { Display *dpy = DisplayOfScreen (screen); XColor *colors; int nplanes = *nplanesP; int i; if (!has_writable_cells (screen, visual)) cmap = 0; if (!cmap) /* A TrueColor visual, or similar. */ { int depth = visual_depth (screen, visual); unsigned long masks; XVisualInfo vi_in, *vi_out; /* Find out which bits the R, G, and B components actually occupy on this visual. */ vi_in.screen = screen_number (screen); vi_in.visualid = XVisualIDFromVisual (visual); vi_out = XGetVisualInfo (dpy, VisualScreenMask|VisualIDMask, &vi_in, &i); if (! vi_out) abort (); masks = vi_out[0].red_mask | vi_out[0].green_mask | vi_out[0].blue_mask; XFree ((char *) vi_out); if (nplanes > depth) nplanes = depth; *nplanesP = nplanes; *base_pixelP = 0; *plane_masks = (unsigned long *) calloc(sizeof(unsigned long), nplanes); /* Pick the planar values randomly, but constrain them to fall within the bit positions of the R, G, and B fields. */ for (i = 0; i < nplanes; i++) (*plane_masks)[i] = random() & masks; } else /* A PseudoColor visual, or similar. */ { if (nplanes > 31) nplanes = 31; *plane_masks = (unsigned long *) malloc(sizeof(unsigned long) * nplanes); nplanes = allocate_color_planes (dpy, cmap, nplanes, *plane_masks, base_pixelP); *nplanesP = nplanes; if (nplanes <= 1) { free(*plane_masks); *plane_masks = 0; return False; } colors = (XColor *) calloc (nplanes, sizeof (XColor)); for (i = 0; i < nplanes; i++) { /* pick the base colors. If we are in subtractive mode, pick higher intensities. */ hsv_to_rgb (random () % 360, frand (1.0), frand (0.5) + (additive_p ? 0.2 : 0.5), &colors[i].red, &colors[i].green, &colors[i].blue); } initialize_transparency_colormap (dpy, cmap, nplanes, *base_pixelP, *plane_masks, colors, additive_p); XFree ((XPointer) colors); } return True; } xscreensaver-5.36/utils/colors.c000644 000767 000024 00000046064 12701612232 016751 0ustar00jwzstaff000000 000000 /* xscreensaver, Copyright (c) 1997-2013 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 file contains some utility routines for randomly picking the colors to hack the screen with. */ #include "utils.h" #include "hsv.h" #include "yarandom.h" #include "visual.h" #include "colors.h" extern char *progname; void free_colors (Screen *screen, Colormap cmap, XColor *colors, int ncolors) { Display *dpy = screen ? DisplayOfScreen (screen) : 0; int i; if (ncolors > 0) { unsigned long *pixels = (unsigned long *) malloc(sizeof(*pixels) * ncolors); for (i = 0; i < ncolors; i++) pixels[i] = colors[i].pixel; XFreeColors (dpy, cmap, pixels, ncolors, 0L); free(pixels); } } void allocate_writable_colors (Screen *screen, Colormap cmap, unsigned long *pixels, int *ncolorsP) { Display *dpy = screen ? DisplayOfScreen (screen) : 0; int desired = *ncolorsP; int got = 0; int requested = desired; unsigned long *new_pixels = pixels; *ncolorsP = 0; while (got < desired && requested > 0) { if (desired - got < requested) requested = desired - got; if (XAllocColorCells (dpy, cmap, False, 0, 0, new_pixels, requested)) { /* Got all the pixels we asked for. */ new_pixels += requested; got += requested; } else { /* We didn't get all/any of the pixels we asked for. This time, ask for half as many. (If we do get all that we ask for, we ask for the same number again next time, so we only do O(log(n)) server roundtrips.) */ requested = requested / 2; } } *ncolorsP += got; } static void complain (int wanted_colors, int got_colors, Bool wanted_writable, Bool got_writable) { if (got_colors > wanted_colors - 10) /* don't bother complaining if we're within ten pixels. */ return; if (wanted_writable && !got_writable) fprintf (stderr, "%s: wanted %d writable colors; got %d read-only colors.\n", progname, wanted_colors, got_colors); else fprintf (stderr, "%s: wanted %d%s colors; got %d.\n", progname, wanted_colors, (got_writable ? " writable" : ""), got_colors); } void make_color_ramp (Screen *screen, Visual *visual, Colormap cmap, int h1, double s1, double v1, /* 0-360, 0-1.0, 0-1.0 */ int h2, double s2, double v2, /* 0-360, 0-1.0, 0-1.0 */ XColor *colors, int *ncolorsP, Bool closed_p, Bool allocate_p, Bool *writable_pP) { Display *dpy = screen ? DisplayOfScreen (screen) : 0; Bool verbose_p = True; /* argh. */ int i; int total_ncolors = *ncolorsP; int ncolors, wanted; Bool wanted_writable = (allocate_p && writable_pP && *writable_pP); double dh, ds, dv; /* deltas */ wanted = total_ncolors; if (closed_p) wanted = (wanted / 2) + 1; /* If this visual doesn't support writable cells, don't bother trying. */ if (wanted_writable && !has_writable_cells(screen, visual)) *writable_pP = False; AGAIN: ncolors = total_ncolors; memset (colors, 0, (*ncolorsP) * sizeof(*colors)); if (closed_p) ncolors = (ncolors / 2) + 1; /* Note: unlike other routines in this module, this function assumes that if h1 and h2 are more than 180 degrees apart, then the desired direction is always from h1 to h2 (rather than the shorter path.) make_uniform depends on this. */ dh = ((double)h2 - (double)h1) / ncolors; ds = (s2 - s1) / ncolors; dv = (v2 - v1) / ncolors; for (i = 0; i < ncolors; i++) { colors[i].flags = DoRed|DoGreen|DoBlue; hsv_to_rgb ((int) (h1 + (i*dh)), (s1 + (i*ds)), (v1 + (i*dv)), &colors[i].red, &colors[i].green, &colors[i].blue); } if (closed_p) for (i = ncolors; i < *ncolorsP; i++) colors[i] = colors[(*ncolorsP)-i]; if (!allocate_p) return; if (writable_pP && *writable_pP) { unsigned long *pixels = (unsigned long *) malloc(sizeof(*pixels) * ((*ncolorsP) + 1)); /* allocate_writable_colors() won't do here, because we need exactly this number of cells, or the color sequence we've chosen won't fit. */ if (! XAllocColorCells(dpy, cmap, False, 0, 0, pixels, *ncolorsP)) { free(pixels); goto FAIL; } for (i = 0; i < *ncolorsP; i++) colors[i].pixel = pixels[i]; free (pixels); XStoreColors (dpy, cmap, colors, *ncolorsP); } else { for (i = 0; i < *ncolorsP; i++) { XColor color; color = colors[i]; if (XAllocColor (dpy, cmap, &color)) { colors[i].pixel = color.pixel; } else { free_colors (screen, cmap, colors, i); goto FAIL; } } } goto WARN; FAIL: /* we weren't able to allocate all the colors we wanted; decrease the requested number and try again. */ total_ncolors = (total_ncolors > 170 ? total_ncolors - 20 : total_ncolors > 100 ? total_ncolors - 10 : total_ncolors > 75 ? total_ncolors - 5 : total_ncolors > 25 ? total_ncolors - 3 : total_ncolors > 10 ? total_ncolors - 2 : total_ncolors > 2 ? total_ncolors - 1 : 0); *ncolorsP = total_ncolors; ncolors = total_ncolors; if (total_ncolors > 0) goto AGAIN; WARN: if (verbose_p && /* don't warn if we got 0 writable colors -- probably TrueColor. */ (ncolors != 0 || !wanted_writable)) complain (wanted, ncolors, wanted_writable, (wanted_writable && writable_pP && *writable_pP)); } #define MAXPOINTS 50 /* yeah, so I'm lazy */ static void make_color_path (Screen *screen, Visual *visual, Colormap cmap, int npoints, int *h, double *s, double *v, XColor *colors, int *ncolorsP, Bool allocate_p, Bool *writable_pP) { Display *dpy = screen ? DisplayOfScreen (screen) : 0; int i, j, k; int total_ncolors = *ncolorsP; int ncolors[MAXPOINTS]; /* number of pixels per edge */ double dh[MAXPOINTS]; /* distance between pixels, per edge (0 - 360.0) */ double ds[MAXPOINTS]; /* distance between pixels, per edge (0 - 1.0) */ double dv[MAXPOINTS]; /* distance between pixels, per edge (0 - 1.0) */ if (npoints == 0) { *ncolorsP = 0; return; } else if (npoints == 2) /* using make_color_ramp() will be faster */ { make_color_ramp (screen, visual, cmap, h[0], s[0], v[0], h[1], s[1], v[1], colors, ncolorsP, True, /* closed_p */ allocate_p, writable_pP); return; } else if (npoints >= MAXPOINTS) { npoints = MAXPOINTS-1; } AGAIN: { double DH[MAXPOINTS]; /* Distance between H values in the shortest direction around the circle, that is, the distance between 10 and 350 is 20. (Range is 0 - 360.0.) */ double edge[MAXPOINTS]; /* lengths of edges in unit HSV space. */ double ratio[MAXPOINTS]; /* proportions of the edges (total 1.0) */ double circum = 0; double one_point_oh = 0; /* (debug) */ for (i = 0; i < npoints; i++) { int j = (i+1) % npoints; double d = ((double) (h[i] - h[j])) / 360; if (d < 0) d = -d; if (d > 0.5) d = 0.5 - (d - 0.5); DH[i] = d; } for (i = 0; i < npoints; i++) { int j = (i+1) % npoints; edge[i] = sqrt((DH[i] * DH[j]) + ((s[j] - s[i]) * (s[j] - s[i])) + ((v[j] - v[i]) * (v[j] - v[i]))); circum += edge[i]; } #ifdef DEBUG fprintf(stderr, "\ncolors:"); for (i=0; i < npoints; i++) fprintf(stderr, " (%d, %.3f, %.3f)", h[i], s[i], v[i]); fprintf(stderr, "\nlengths:"); for (i=0; i < npoints; i++) fprintf(stderr, " %.3f", edge[i]); #endif /* DEBUG */ if (circum < 0.0001) goto FAIL; for (i = 0; i < npoints; i++) { ratio[i] = edge[i] / circum; one_point_oh += ratio[i]; } #ifdef DEBUG fprintf(stderr, "\nratios:"); for (i=0; i < npoints; i++) fprintf(stderr, " %.3f", ratio[i]); #endif /* DEBUG */ if (one_point_oh < 0.99999 || one_point_oh > 1.00001) abort(); /* space the colors evenly along the circumference -- that means that the number of pixels on a edge is proportional to the length of that edge (relative to the lengths of the other edges.) */ for (i = 0; i < npoints; i++) ncolors[i] = total_ncolors * ratio[i]; #ifdef DEBUG fprintf(stderr, "\npixels:"); for (i=0; i < npoints; i++) fprintf(stderr, " %d", ncolors[i]); fprintf(stderr, " (%d)\n", total_ncolors); #endif /* DEBUG */ for (i = 0; i < npoints; i++) { int j = (i+1) % npoints; if (ncolors[i] > 0) { dh[i] = 360 * (DH[i] / ncolors[i]); ds[i] = (s[j] - s[i]) / ncolors[i]; dv[i] = (v[j] - v[i]) / ncolors[i]; } } } memset (colors, 0, (*ncolorsP) * sizeof(*colors)); k = 0; for (i = 0; i < npoints; i++) { int distance = h[(i+1) % npoints] - h[i]; int direction = (distance >= 0 ? -1 : 1); if (distance <= 180 && distance >= -180) direction = -direction; #ifdef DEBUG fprintf (stderr, "point %d: %3d %.2f %.2f\n", i, h[i], s[i], v[i]); fprintf(stderr, " h[i]=%d dh[i]=%.2f ncolors[i]=%d\n", h[i], dh[i], ncolors[i]); #endif /* DEBUG */ for (j = 0; j < ncolors[i]; j++, k++) { double hh = (h[i] + (j * dh[i] * direction)); if (hh < 0) hh += 360; else if (hh > 360) hh -= 0; colors[k].flags = DoRed|DoGreen|DoBlue; hsv_to_rgb ((int) hh, (s[i] + (j * ds[i])), (v[i] + (j * dv[i])), &colors[k].red, &colors[k].green, &colors[k].blue); #ifdef DEBUG fprintf (stderr, "point %d+%d: %.2f %.2f %.2f %04X %04X %04X\n", i, j, hh, (s[i] + (j * ds[i])), (v[i] + (j * dv[i])), colors[k].red, colors[k].green, colors[k].blue); #endif /* DEBUG */ } } /* Floating-point round-off can make us decide to use fewer colors. */ if (k < *ncolorsP) { *ncolorsP = k; if (k <= 0) return; } if (!allocate_p) return; if (writable_pP && *writable_pP) { unsigned long *pixels = (unsigned long *) malloc(sizeof(*pixels) * ((*ncolorsP) + 1)); /* allocate_writable_colors() won't do here, because we need exactly this number of cells, or the color sequence we've chosen won't fit. */ if (! XAllocColorCells(dpy, cmap, False, 0, 0, pixels, *ncolorsP)) { free(pixels); goto FAIL; } for (i = 0; i < *ncolorsP; i++) colors[i].pixel = pixels[i]; free (pixels); XStoreColors (dpy, cmap, colors, *ncolorsP); } else { for (i = 0; i < *ncolorsP; i++) { XColor color; color = colors[i]; if (XAllocColor (dpy, cmap, &color)) { colors[i].pixel = color.pixel; } else { free_colors (screen, cmap, colors, i); goto FAIL; } } } return; FAIL: /* we weren't able to allocate all the colors we wanted; decrease the requested number and try again. */ total_ncolors = (total_ncolors > 170 ? total_ncolors - 20 : total_ncolors > 100 ? total_ncolors - 10 : total_ncolors > 75 ? total_ncolors - 5 : total_ncolors > 25 ? total_ncolors - 3 : total_ncolors > 10 ? total_ncolors - 2 : total_ncolors > 2 ? total_ncolors - 1 : 0); *ncolorsP = total_ncolors; if (total_ncolors > 0) goto AGAIN; } void make_color_loop (Screen *screen, Visual *visual, Colormap cmap, int h0, double s0, double v0, /* 0-360, 0-1.0, 0-1.0 */ int h1, double s1, double v1, /* 0-360, 0-1.0, 0-1.0 */ int h2, double s2, double v2, /* 0-360, 0-1.0, 0-1.0 */ XColor *colors, int *ncolorsP, Bool allocate_p, Bool *writable_pP) { Bool wanted_writable = (allocate_p && writable_pP && *writable_pP); int h[3]; double s[3], v[3]; h[0] = h0; h[1] = h1; h[2] = h2; s[0] = s0; s[1] = s1; s[2] = s2; v[0] = v0; v[1] = v1; v[2] = v2; /* If this visual doesn't support writable cells, don't bother trying. */ if (wanted_writable && !has_writable_cells(screen, visual)) *writable_pP = False; make_color_path (screen, visual, cmap, 3, h, s, v, colors, ncolorsP, allocate_p, writable_pP); } void make_smooth_colormap (Screen *screen, Visual *visual, Colormap cmap, XColor *colors, int *ncolorsP, Bool allocate_p, Bool *writable_pP, Bool verbose_p) { int npoints; int ncolors = *ncolorsP; Bool wanted_writable = (allocate_p && writable_pP && *writable_pP); int i; int h[MAXPOINTS]; double s[MAXPOINTS]; double v[MAXPOINTS]; double total_s = 0; double total_v = 0; int loop = 0; if (*ncolorsP <= 0) return; { int n = random() % 20; if (n <= 5) npoints = 2; /* 30% of the time */ else if (n <= 15) npoints = 3; /* 50% of the time */ else if (n <= 18) npoints = 4; /* 15% of the time */ else npoints = 5; /* 5% of the time */ } REPICK_ALL_COLORS: for (i = 0; i < npoints; i++) { REPICK_THIS_COLOR: if (++loop > 10000) abort(); h[i] = random() % 360; s[i] = frand(1.0); v[i] = frand(0.8) + 0.2; /* Make sure that no two adjascent colors are *too* close together. If they are, try again. */ if (i > 0) { int j = (i+1 == npoints) ? 0 : (i-1); double hi = ((double) h[i]) / 360; double hj = ((double) h[j]) / 360; double dh = hj - hi; double distance; if (dh < 0) dh = -dh; if (dh > 0.5) dh = 0.5 - (dh - 0.5); distance = sqrt ((dh * dh) + ((s[j] - s[i]) * (s[j] - s[i])) + ((v[j] - v[i]) * (v[j] - v[i]))); if (distance < 0.2) goto REPICK_THIS_COLOR; } total_s += s[i]; total_v += v[i]; } /* If the average saturation or intensity are too low, repick the colors, so that we don't end up with a black-and-white or too-dark map. */ if (total_s / npoints < 0.2) goto REPICK_ALL_COLORS; if (total_v / npoints < 0.3) goto REPICK_ALL_COLORS; /* If this visual doesn't support writable cells, don't bother trying. */ if (wanted_writable && !has_writable_cells(screen, visual)) *writable_pP = False; RETRY_NON_WRITABLE: make_color_path (screen, visual, cmap, npoints, h, s, v, colors, &ncolors, allocate_p, writable_pP); /* If we tried for writable cells and got none, try for non-writable. */ if (allocate_p && *ncolorsP == 0 && writable_pP && *writable_pP) { *writable_pP = False; goto RETRY_NON_WRITABLE; } if (verbose_p) complain(*ncolorsP, ncolors, wanted_writable, wanted_writable && *writable_pP); *ncolorsP = ncolors; } void make_uniform_colormap (Screen *screen, Visual *visual, Colormap cmap, XColor *colors, int *ncolorsP, Bool allocate_p, Bool *writable_pP, Bool verbose_p) { int ncolors = *ncolorsP; Bool wanted_writable = (allocate_p && writable_pP && *writable_pP); double S = ((double) (random() % 34) + 66) / 100.0; /* range 66%-100% */ double V = ((double) (random() % 34) + 66) / 100.0; /* range 66%-100% */ if (*ncolorsP <= 0) return; /* If this visual doesn't support writable cells, don't bother trying. */ if (wanted_writable && !has_writable_cells(screen, visual)) *writable_pP = False; RETRY_NON_WRITABLE: make_color_ramp(screen, visual, cmap, 0, S, V, 359, S, V, colors, &ncolors, False, allocate_p, writable_pP); /* If we tried for writable cells and got none, try for non-writable. */ if (allocate_p && *ncolorsP == 0 && writable_pP && *writable_pP) { ncolors = *ncolorsP; *writable_pP = False; goto RETRY_NON_WRITABLE; } if (verbose_p) complain(*ncolorsP, ncolors, wanted_writable, wanted_writable && *writable_pP); *ncolorsP = ncolors; } void make_random_colormap (Screen *screen, Visual *visual, Colormap cmap, XColor *colors, int *ncolorsP, Bool bright_p, Bool allocate_p, Bool *writable_pP, Bool verbose_p) { Display *dpy = screen ? DisplayOfScreen (screen) : 0; Bool wanted_writable = (allocate_p && writable_pP && *writable_pP); int ncolors = *ncolorsP; int i; if (*ncolorsP <= 0) return; /* If this visual doesn't support writable cells, don't bother trying. */ if (wanted_writable && !has_writable_cells(screen, visual)) *writable_pP = False; RETRY_ALL: for (i = 0; i < ncolors; i++) { colors[i].flags = DoRed|DoGreen|DoBlue; if (bright_p) { int H = random() % 360; /* range 0-360 */ double S = ((double) (random()%70) + 30)/100.0; /* range 30%-100% */ double V = ((double) (random()%34) + 66)/100.0; /* range 66%-100% */ hsv_to_rgb (H, S, V, &colors[i].red, &colors[i].green, &colors[i].blue); } else { colors[i].red = random() % 0xFFFF; colors[i].green = random() % 0xFFFF; colors[i].blue = random() % 0xFFFF; } } /* If there are a small number of colors, make sure at least the first two contrast well. */ if (!bright_p && ncolors <= 4) { int h0, h1; double s0, s1, v0, v1; rgb_to_hsv (colors[0].red, colors[0].green, colors[0].blue, &h0,&s0,&v0); rgb_to_hsv (colors[1].red, colors[1].green, colors[1].blue, &h1,&s1,&v1); if (fabs (v1-v0) < 0.5) goto RETRY_ALL; } if (!allocate_p) return; RETRY_NON_WRITABLE: if (writable_pP && *writable_pP) { unsigned long *pixels = (unsigned long *) malloc(sizeof(*pixels) * (ncolors + 1)); allocate_writable_colors (screen, cmap, pixels, &ncolors); if (ncolors > 0) for (i = 0; i < ncolors; i++) colors[i].pixel = pixels[i]; free (pixels); if (ncolors > 0) XStoreColors (dpy, cmap, colors, ncolors); } else { for (i = 0; i < ncolors; i++) { XColor color; color = colors[i]; if (!XAllocColor (dpy, cmap, &color)) break; colors[i].pixel = color.pixel; } ncolors = i; } /* If we tried for writable cells and got none, try for non-writable. */ if (allocate_p && ncolors == 0 && writable_pP && *writable_pP) { ncolors = *ncolorsP; *writable_pP = False; goto RETRY_NON_WRITABLE; } if (verbose_p) complain(*ncolorsP, ncolors, wanted_writable, wanted_writable && *writable_pP); *ncolorsP = ncolors; } void rotate_colors (Screen *screen, Colormap cmap, XColor *colors, int ncolors, int distance) { Display *dpy = screen ? DisplayOfScreen (screen) : 0; int i; XColor *colors2; if (ncolors < 2) return; colors2 = (XColor *) malloc(sizeof(*colors2) * ncolors); distance = distance % ncolors; for (i = 0; i < ncolors; i++) { int j = i - distance; if (j >= ncolors) j -= ncolors; if (j < 0) j += ncolors; colors2[i] = colors[j]; colors2[i].pixel = colors[i].pixel; } XStoreColors (dpy, cmap, colors2, ncolors); XFlush(dpy); memcpy(colors, colors2, sizeof(*colors) * ncolors); free(colors2); } xscreensaver-5.36/utils/fade.c000644 000767 000024 00000067060 12701612232 016346 0ustar00jwzstaff000000 000000 /* xscreensaver, Copyright (c) 1992-2011 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. */ #include "utils.h" #include /* for gettimeofday() */ #ifdef VMS # include "vms-gtod.h" #endif /* VMS */ #include "visual.h" #include "usleep.h" #include "fade.h" Colormap copy_colormap (Screen *screen, Visual *visual, Colormap cmap, Colormap into_cmap) { int i; Display *dpy = DisplayOfScreen (screen); Window window = RootWindowOfScreen (screen); int ncolors = CellsOfScreen (screen); XColor *colors = 0; /* If this is a colormap on a mono visual, or one with insanely many color cells, bug out. */ if (ncolors <= 2 || ncolors > 4096) return 0; /* If this is a non-writable visual, bug out. */ if (!has_writable_cells (screen, visual)) return 0; if (! into_cmap) into_cmap = XCreateColormap (dpy, window, visual, AllocAll); if (! cmap) cmap = DefaultColormapOfScreen (screen); colors = (XColor *) calloc(sizeof(XColor), ncolors); for (i = 0; i < ncolors; i++) colors [i].pixel = i; XQueryColors (dpy, cmap, colors, ncolors); XStoreColors (dpy, into_cmap, colors, ncolors); free (colors); return into_cmap; } void blacken_colormap (Screen *screen, Colormap cmap) { Display *dpy = DisplayOfScreen (screen); int ncolors = CellsOfScreen (screen); XColor *colors; int i; if (ncolors > 4096) return; colors = (XColor *) calloc(sizeof(XColor), ncolors); for (i = 0; i < ncolors; i++) colors[i].pixel = i; XStoreColors (dpy, cmap, colors, ncolors); free (colors); } static void fade_screens_1 (Display *dpy, Colormap *cmaps, Window *black_windows, int nwindows, int seconds, int ticks, Bool out_p, Bool clear_windows); #ifdef HAVE_SGI_VC_EXTENSION static int sgi_gamma_fade (Display *dpy, Window *black_windows, int nwindows, int seconds, int ticks, Bool out_p, Bool clear_windows); #endif /* HAVE_SGI_VC_EXTENSION */ #ifdef HAVE_XF86VMODE_GAMMA static int xf86_gamma_fade (Display *dpy, Window *black_windows, int nwindows, int seconds, int ticks, Bool out_p, Bool clear_windows); #endif /* HAVE_XF86VMODE_GAMMA */ void fade_screens (Display *dpy, Colormap *cmaps, Window *black_windows, int nwindows, int seconds, int ticks, Bool out_p, Bool clear_windows) { int oseconds = seconds; Bool was_in_p = !out_p; /* When we're asked to fade in, first fade out, then fade in. That way all the transitions are smooth -- from what's on the screen, to black, to the desktop. */ if (was_in_p) { clear_windows = True; out_p = True; seconds /= 3; if (seconds == 0) seconds = 1; } AGAIN: /* #### printf("\n\nfade_screens %d %d %d\n", seconds, ticks, out_p); */ #ifdef HAVE_SGI_VC_EXTENSION /* First try to do it by fading the gamma in an SGI-specific way... */ if (0 == sgi_gamma_fade(dpy, black_windows, nwindows, seconds, ticks, out_p, clear_windows)) ; else #endif /* HAVE_SGI_VC_EXTENSION */ #ifdef HAVE_XF86VMODE_GAMMA /* Then try to do it by fading the gamma in an XFree86-specific way... */ if (0 == xf86_gamma_fade(dpy, black_windows, nwindows, seconds, ticks, out_p, clear_windows)) ; else #endif /* HAVE_XF86VMODE_GAMMA */ /* Else, do it the old-fashioned way, which (somewhat) loses if there are TrueColor windows visible. */ fade_screens_1 (dpy, cmaps, black_windows, nwindows, seconds, ticks, out_p, clear_windows); /* If we were supposed to be fading in, do so now (we just faded out, so now fade back in.) */ if (was_in_p) { was_in_p = False; out_p = False; seconds = oseconds * 2 / 3; if (seconds == 0) seconds = 1; goto AGAIN; } } static void sleep_from (struct timeval *now, struct timeval *then, long usecs_per_step) { /* If several seconds have passed, the machine must have been asleep or thrashing or something. Don't sleep in that case, to avoid overflowing and sleeping for an unconscionably long time. This function should only be sleeping for very short periods. */ if (now->tv_sec - then->tv_sec < 5) { long diff = (((now->tv_sec - then->tv_sec) * 1000000) + now->tv_usec - then->tv_usec); if (usecs_per_step > diff) usleep (usecs_per_step - diff); } then->tv_sec = now->tv_sec; then->tv_usec = now->tv_usec; } /* The business with `cmaps_per_screen' is to fake out the SGI 8-bit video hardware, which is capable of installing multiple (4) colormaps simultaneously. We have to install multiple copies of the same set of colors in order to fill up all the available slots in the hardware color lookup table, so we install an extra N colormaps per screen to make sure that all screens really go black. I'm told that this trick also works with XInside's AcceleratedX when using the Matrox Millennium card (which also allows multiple PseudoColor and TrueColor visuals to co-exist and display properly at the same time.) This trick works ok on the 24-bit Indy video hardware, but doesn't work at all on the O2 24-bit hardware. I guess the higher-end hardware is too "good" for this to work (dammit.) So... I figured out the "right" way to do this on SGIs, which is to ramp the monitor's gamma down to 0. That's what is implemented in sgi_gamma_fade(), so we use that if we can. */ static void fade_screens_1 (Display *dpy, Colormap *cmaps, Window *black_windows, int nwindows, int seconds, int ticks, Bool out_p, Bool clear_windows) { int i, j, k; int steps = seconds * ticks; long usecs_per_step = (long)(seconds * 1000000) / (long)steps; XEvent dummy_event; int cmaps_per_screen = 5; int nscreens = ScreenCount(dpy); int ncmaps = nscreens * cmaps_per_screen; Colormap *fade_cmaps = 0; Bool installed = False; int total_ncolors; XColor *orig_colors, *current_colors, *screen_colors, *orig_screen_colors; struct timeval then, now; #ifdef GETTIMEOFDAY_TWO_ARGS struct timezone tzp; #endif total_ncolors = 0; for (i = 0; i < nscreens; i++) total_ncolors += CellsOfScreen (ScreenOfDisplay(dpy, i)); orig_colors = (XColor *) calloc(sizeof(XColor), total_ncolors); current_colors = (XColor *) calloc(sizeof(XColor), total_ncolors); /* Get the contents of the colormap we are fading from or to. */ screen_colors = orig_colors; for (i = 0; i < nscreens; i++) { int ncolors = CellsOfScreen (ScreenOfDisplay (dpy, i)); Colormap cmap = (cmaps ? cmaps[i] : 0); if (!cmap) cmap = DefaultColormap(dpy, i); for (j = 0; j < ncolors; j++) screen_colors[j].pixel = j; XQueryColors (dpy, cmap, screen_colors, ncolors); screen_colors += ncolors; } memcpy (current_colors, orig_colors, total_ncolors * sizeof (XColor)); /* Make the writable colormaps (we keep these around and reuse them.) */ if (!fade_cmaps) { fade_cmaps = (Colormap *) calloc(sizeof(Colormap), ncmaps); for (i = 0; i < nscreens; i++) { Visual *v = DefaultVisual(dpy, i); Screen *s = ScreenOfDisplay(dpy, i); if (has_writable_cells (s, v)) for (j = 0; j < cmaps_per_screen; j++) fade_cmaps[(i * cmaps_per_screen) + j] = XCreateColormap (dpy, RootWindowOfScreen (s), v, AllocAll); } } #ifdef GETTIMEOFDAY_TWO_ARGS gettimeofday(&then, &tzp); #else gettimeofday(&then); #endif /* Iterate by steps of the animation... */ for (i = (out_p ? steps : 0); (out_p ? i > 0 : i < steps); (out_p ? i-- : i++)) { /* For each screen, compute the current value of each color... */ orig_screen_colors = orig_colors; screen_colors = current_colors; for (j = 0; j < nscreens; j++) { int ncolors = CellsOfScreen (ScreenOfDisplay (dpy, j)); for (k = 0; k < ncolors; k++) { /* This doesn't take into account the relative luminance of the RGB components (0.299, 0.587, and 0.114 at gamma 2.2) but the difference is imperceptible for this application... */ screen_colors[k].red = orig_screen_colors[k].red * i / steps; screen_colors[k].green = orig_screen_colors[k].green * i / steps; screen_colors[k].blue = orig_screen_colors[k].blue * i / steps; } screen_colors += ncolors; orig_screen_colors += ncolors; } /* Put the colors into the maps... */ screen_colors = current_colors; for (j = 0; j < nscreens; j++) { int ncolors = CellsOfScreen (ScreenOfDisplay (dpy, j)); for (k = 0; k < cmaps_per_screen; k++) { Colormap c = fade_cmaps[j * cmaps_per_screen + k]; if (c) XStoreColors (dpy, c, screen_colors, ncolors); } screen_colors += ncolors; } /* Put the maps on the screens, and then take the windows off the screen. (only need to do this the first time through the loop.) */ if (!installed) { for (j = 0; j < ncmaps; j++) if (fade_cmaps[j]) XInstallColormap (dpy, fade_cmaps[j]); installed = True; if (black_windows && !out_p) for (j = 0; j < nwindows; j++) if (black_windows[j]) { XUnmapWindow (dpy, black_windows[j]); XClearWindow (dpy, black_windows[j]); } } XSync (dpy, False); /* If there is user activity, bug out. (Bug out on keypresses or mouse presses, but not motion, and not release events. Bugging out on motion made the unfade hack be totally useless, I think.) We put the event back so that the calling code can notice it too. It would be better to not remove it at all, but that's harder because Xlib has such a non-design for this kind of crap, and in this application it doesn't matter if the events end up out of order, so in the grand unix tradition we say "fuck it" and do something that mostly works for the time being. */ if (XCheckMaskEvent (dpy, (KeyPressMask|ButtonPressMask), &dummy_event)) { XPutBackEvent (dpy, &dummy_event); goto DONE; } #ifdef GETTIMEOFDAY_TWO_ARGS gettimeofday(&now, &tzp); #else gettimeofday(&now); #endif /* If we haven't already used up our alotted time, sleep to avoid changing the colormap too fast. */ sleep_from (&now, &then, usecs_per_step); } DONE: if (orig_colors) free (orig_colors); if (current_colors) free (current_colors); /* If we've been given windows to raise after blackout, raise them before releasing the colormaps. */ if (out_p && black_windows) { for (i = 0; i < nwindows; i++) { if (clear_windows) XClearWindow (dpy, black_windows[i]); XMapRaised (dpy, black_windows[i]); } XSync(dpy, False); } /* Now put the target maps back. If we're fading out, use the given cmap (or the default cmap, if none.) If we're fading in, always use the default cmap. */ for (i = 0; i < nscreens; i++) { Colormap cmap = (cmaps ? cmaps[i] : 0); if (!cmap || !out_p) cmap = DefaultColormap(dpy, i); XInstallColormap (dpy, cmap); } /* The fade (in or out) is complete, so we don't need the black maps on stage any more. */ for (i = 0; i < ncmaps; i++) if (fade_cmaps[i]) { XUninstallColormap(dpy, fade_cmaps[i]); XFreeColormap(dpy, fade_cmaps[i]); fade_cmaps[i] = 0; } free(fade_cmaps); fade_cmaps = 0; } /* SGI Gamma fading */ #ifdef HAVE_SGI_VC_EXTENSION # include struct screen_sgi_gamma_info { int gamma_map; /* ??? always using 0 */ int nred, ngreen, nblue; unsigned short *red1, *green1, *blue1; unsigned short *red2, *green2, *blue2; int gamma_size; int gamma_precision; Bool alpha_p; }; static void sgi_whack_gamma(Display *dpy, int screen, struct screen_sgi_gamma_info *info, float ratio); static int sgi_gamma_fade (Display *dpy, Window *black_windows, int nwindows, int seconds, int ticks, Bool out_p, Bool clear_windows) { int steps = seconds * ticks; long usecs_per_step = (long)(seconds * 1000000) / (long)steps; XEvent dummy_event; int nscreens = ScreenCount(dpy); struct timeval then, now; #ifdef GETTIMEOFDAY_TWO_ARGS struct timezone tzp; #endif int i, screen; int status = -1; struct screen_sgi_gamma_info *info = (struct screen_sgi_gamma_info *) calloc(nscreens, sizeof(*info)); /* Get the current gamma maps for all screens. Bug out and return -1 if we can't get them for some screen. */ for (screen = 0; screen < nscreens; screen++) { if (!XSGIvcQueryGammaMap(dpy, screen, info[screen].gamma_map, &info[screen].gamma_size, &info[screen].gamma_precision, &info[screen].alpha_p)) goto FAIL; if (!XSGIvcQueryGammaColors(dpy, screen, info[screen].gamma_map, XSGIVC_COMPONENT_RED, &info[screen].nred, &info[screen].red1)) goto FAIL; if (! XSGIvcQueryGammaColors(dpy, screen, info[screen].gamma_map, XSGIVC_COMPONENT_GREEN, &info[screen].ngreen, &info[screen].green1)) goto FAIL; if (!XSGIvcQueryGammaColors(dpy, screen, info[screen].gamma_map, XSGIVC_COMPONENT_BLUE, &info[screen].nblue, &info[screen].blue1)) goto FAIL; if (info[screen].gamma_precision == 8) /* Scale it up to 16 bits. */ { int j; for(j = 0; j < info[screen].nred; j++) info[screen].red1[j] = ((info[screen].red1[j] << 8) | info[screen].red1[j]); for(j = 0; j < info[screen].ngreen; j++) info[screen].green1[j] = ((info[screen].green1[j] << 8) | info[screen].green1[j]); for(j = 0; j < info[screen].nblue; j++) info[screen].blue1[j] = ((info[screen].blue1[j] << 8) | info[screen].blue1[j]); } info[screen].red2 = (unsigned short *) malloc(sizeof(*info[screen].red2) * (info[screen].nred+1)); info[screen].green2 = (unsigned short *) malloc(sizeof(*info[screen].green2) * (info[screen].ngreen+1)); info[screen].blue2 = (unsigned short *) malloc(sizeof(*info[screen].blue2) * (info[screen].nblue+1)); } #ifdef GETTIMEOFDAY_TWO_ARGS gettimeofday(&then, &tzp); #else gettimeofday(&then); #endif /* If we're fading in (from black), then first crank the gamma all the way down to 0, then take the windows off the screen. */ if (!out_p) { for (screen = 0; screen < nscreens; screen++) sgi_whack_gamma(dpy, screen, &info[screen], 0.0); for (screen = 0; screen < nwindows; screen++) if (black_windows && black_windows[screen]) { XUnmapWindow (dpy, black_windows[screen]); XClearWindow (dpy, black_windows[screen]); XSync(dpy, False); } } /* Iterate by steps of the animation... */ for (i = (out_p ? steps : 0); (out_p ? i > 0 : i < steps); (out_p ? i-- : i++)) { for (screen = 0; screen < nscreens; screen++) { sgi_whack_gamma(dpy, screen, &info[screen], (((float)i) / ((float)steps))); /* If there is user activity, bug out. (Bug out on keypresses or mouse presses, but not motion, and not release events. Bugging out on motion made the unfade hack be totally useless, I think.) We put the event back so that the calling code can notice it too. It would be better to not remove it at all, but that's harder because Xlib has such a non-design for this kind of crap, and in this application it doesn't matter if the events end up out of order, so in the grand unix tradition we say "fuck it" and do something that mostly works for the time being. */ if (XCheckMaskEvent (dpy, (KeyPressMask|ButtonPressMask), &dummy_event)) { XPutBackEvent (dpy, &dummy_event); goto DONE; } #ifdef GETTIMEOFDAY_TWO_ARGS gettimeofday(&now, &tzp); #else gettimeofday(&now); #endif /* If we haven't already used up our alotted time, sleep to avoid changing the colormap too fast. */ sleep_from (&now, &then, usecs_per_step); } } DONE: if (out_p && black_windows) { for (screen = 0; screen < nwindows; screen++) { if (clear_windows) XClearWindow (dpy, black_windows[screen]); XMapRaised (dpy, black_windows[screen]); } XSync(dpy, False); } /* I can't explain this; without this delay, we get a flicker. I suppose there's some lossage with stale bits being in the hardware frame buffer or something, and this delay gives it time to flush out. This sucks! */ usleep(100000); /* 1/10th second */ for (screen = 0; screen < nscreens; screen++) sgi_whack_gamma(dpy, screen, &info[screen], 1.0); XSync(dpy, False); status = 0; FAIL: for (screen = 0; screen < nscreens; screen++) { if (info[screen].red1) free (info[screen].red1); if (info[screen].green1) free (info[screen].green1); if (info[screen].blue1) free (info[screen].blue1); if (info[screen].red2) free (info[screen].red2); if (info[screen].green2) free (info[screen].green2); if (info[screen].blue2) free (info[screen].blue2); } free(info); return status; } static void sgi_whack_gamma(Display *dpy, int screen, struct screen_sgi_gamma_info *info, float ratio) { int k; if (ratio < 0) ratio = 0; if (ratio > 1) ratio = 1; for (k = 0; k < info->gamma_size; k++) { info->red2[k] = info->red1[k] * ratio; info->green2[k] = info->green1[k] * ratio; info->blue2[k] = info->blue1[k] * ratio; } XSGIvcStoreGammaColors16(dpy, screen, info->gamma_map, info->nred, XSGIVC_MComponentRed, info->red2); XSGIvcStoreGammaColors16(dpy, screen, info->gamma_map, info->ngreen, XSGIVC_MComponentGreen, info->green2); XSGIvcStoreGammaColors16(dpy, screen, info->gamma_map, info->nblue, XSGIVC_MComponentBlue, info->blue2); XSync(dpy, False); } #endif /* HAVE_SGI_VC_EXTENSION */ /* XFree86 4.x+ Gamma fading */ #ifdef HAVE_XF86VMODE_GAMMA #include typedef struct { XF86VidModeGamma vmg; int size; unsigned short *r, *g, *b; } xf86_gamma_info; static int xf86_check_gamma_extension (Display *dpy); static Bool xf86_whack_gamma (Display *dpy, int screen, xf86_gamma_info *ginfo, float ratio); static int xf86_gamma_fade (Display *dpy, Window *black_windows, int nwindows, int seconds, int ticks, Bool out_p, Bool clear_windows) { int steps = seconds * ticks; long usecs_per_step = (long)(seconds * 1000000) / (long)steps; XEvent dummy_event; int nscreens = ScreenCount(dpy); struct timeval then, now; #ifdef GETTIMEOFDAY_TWO_ARGS struct timezone tzp; #endif int i, screen; int status = -1; xf86_gamma_info *info = 0; static int ext_ok = -1; /* Only probe the extension once: the answer isn't going to change. */ if (ext_ok == -1) ext_ok = xf86_check_gamma_extension (dpy); /* If this server doesn't have the gamma extension, bug out. */ if (ext_ok == 0) goto FAIL; # ifndef HAVE_XF86VMODE_GAMMA_RAMP if (ext_ok == 2) ext_ok = 1; /* server is newer than client! */ # endif info = (xf86_gamma_info *) calloc(nscreens, sizeof(*info)); /* Get the current gamma maps for all screens. Bug out and return -1 if we can't get them for some screen. */ for (screen = 0; screen < nscreens; screen++) { if (ext_ok == 1) /* only have gamma parameter, not ramps. */ { if (!XF86VidModeGetGamma(dpy, screen, &info[screen].vmg)) goto FAIL; } # ifdef HAVE_XF86VMODE_GAMMA_RAMP else if (ext_ok == 2) /* have ramps */ { if (!XF86VidModeGetGammaRampSize(dpy, screen, &info[screen].size)) goto FAIL; if (info[screen].size <= 0) goto FAIL; info[screen].r = (unsigned short *) calloc(info[screen].size, sizeof(unsigned short)); info[screen].g = (unsigned short *) calloc(info[screen].size, sizeof(unsigned short)); info[screen].b = (unsigned short *) calloc(info[screen].size, sizeof(unsigned short)); if (!(info[screen].r && info[screen].g && info[screen].b)) goto FAIL; if (!XF86VidModeGetGammaRamp(dpy, screen, info[screen].size, info[screen].r, info[screen].g, info[screen].b)) goto FAIL; } # endif /* HAVE_XF86VMODE_GAMMA_RAMP */ else abort(); } #ifdef GETTIMEOFDAY_TWO_ARGS gettimeofday(&then, &tzp); #else gettimeofday(&then); #endif /* If we're fading in (from black), then first crank the gamma all the way down to 0, then take the windows off the screen. */ if (!out_p) { for (screen = 0; screen < nscreens; screen++) xf86_whack_gamma(dpy, screen, &info[screen], 0.0); for (screen = 0; screen < nwindows; screen++) if (black_windows && black_windows[screen]) { XUnmapWindow (dpy, black_windows[screen]); XClearWindow (dpy, black_windows[screen]); XSync(dpy, False); } } /* Iterate by steps of the animation... */ for (i = (out_p ? steps : 0); (out_p ? i > 0 : i < steps); (out_p ? i-- : i++)) { for (screen = 0; screen < nscreens; screen++) { xf86_whack_gamma(dpy, screen, &info[screen], (((float)i) / ((float)steps))); /* If there is user activity, bug out. (Bug out on keypresses or mouse presses, but not motion, and not release events. Bugging out on motion made the unfade hack be totally useless, I think.) We put the event back so that the calling code can notice it too. It would be better to not remove it at all, but that's harder because Xlib has such a non-design for this kind of crap, and in this application it doesn't matter if the events end up out of order, so in the grand unix tradition we say "fuck it" and do something that mostly works for the time being. */ if (XCheckMaskEvent (dpy, (KeyPressMask|ButtonPressMask), &dummy_event)) { XPutBackEvent (dpy, &dummy_event); goto DONE; } #ifdef GETTIMEOFDAY_TWO_ARGS gettimeofday(&now, &tzp); #else gettimeofday(&now); #endif /* If we haven't already used up our alotted time, sleep to avoid changing the colormap too fast. */ sleep_from (&now, &then, usecs_per_step); } } DONE: if (out_p && black_windows) { for (screen = 0; screen < nwindows; screen++) { if (clear_windows) XClearWindow (dpy, black_windows[screen]); XMapRaised (dpy, black_windows[screen]); } XSync(dpy, False); } /* I can't explain this; without this delay, we get a flicker. I suppose there's some lossage with stale bits being in the hardware frame buffer or something, and this delay gives it time to flush out. This sucks! */ usleep(100000); /* 1/10th second */ for (screen = 0; screen < nscreens; screen++) xf86_whack_gamma(dpy, screen, &info[screen], 1.0); XSync(dpy, False); status = 0; FAIL: if (info) { for (screen = 0; screen < nscreens; screen++) { if (info[screen].r) free(info[screen].r); if (info[screen].g) free(info[screen].g); if (info[screen].b) free(info[screen].b); } free(info); } return status; } /* This bullshit is needed because the VidMode extension doesn't work on remote displays -- but if the remote display has the extension at all, XF86VidModeQueryExtension returns true, and then XF86VidModeQueryVersion dies with an X error. Thank you XFree, may I have another. */ static Bool error_handler_hit_p = False; static int ignore_all_errors_ehandler (Display *dpy, XErrorEvent *error) { error_handler_hit_p = True; return 0; } static Bool safe_XF86VidModeQueryVersion (Display *dpy, int *majP, int *minP) { Bool result; XErrorHandler old_handler; XSync (dpy, False); error_handler_hit_p = False; old_handler = XSetErrorHandler (ignore_all_errors_ehandler); result = XF86VidModeQueryVersion (dpy, majP, minP); XSync (dpy, False); XSetErrorHandler (old_handler); XSync (dpy, False); return (error_handler_hit_p ? False : result); } /* VidModeExtension version 2.0 or better is needed to do gamma. 2.0 added gamma values; 2.1 added gamma ramps. */ # define XF86_VIDMODE_GAMMA_MIN_MAJOR 2 # define XF86_VIDMODE_GAMMA_MIN_MINOR 0 # define XF86_VIDMODE_GAMMA_RAMP_MIN_MAJOR 2 # define XF86_VIDMODE_GAMMA_RAMP_MIN_MINOR 1 /* Returns 0 if gamma fading not available; 1 if only gamma value setting is available; 2 if gamma ramps are available. */ static int xf86_check_gamma_extension (Display *dpy) { int event, error, major, minor; if (!XF86VidModeQueryExtension (dpy, &event, &error)) return 0; /* display doesn't have the extension. */ if (!safe_XF86VidModeQueryVersion (dpy, &major, &minor)) return 0; /* unable to get version number? */ if (major < XF86_VIDMODE_GAMMA_MIN_MAJOR || (major == XF86_VIDMODE_GAMMA_MIN_MAJOR && minor < XF86_VIDMODE_GAMMA_MIN_MINOR)) return 0; /* extension is too old for gamma. */ if (major < XF86_VIDMODE_GAMMA_RAMP_MIN_MAJOR || (major == XF86_VIDMODE_GAMMA_RAMP_MIN_MAJOR && minor < XF86_VIDMODE_GAMMA_RAMP_MIN_MINOR)) return 1; /* extension is too old for gamma ramps. */ /* Copacetic */ return 2; } /* XFree doesn't let you set gamma to a value smaller than this. Apparently they didn't anticipate the trick I'm doing here... */ #define XF86_MIN_GAMMA 0.1 static Bool xf86_whack_gamma(Display *dpy, int screen, xf86_gamma_info *info, float ratio) { Bool status; XErrorHandler old_handler; XSync (dpy, False); error_handler_hit_p = False; old_handler = XSetErrorHandler (ignore_all_errors_ehandler); if (ratio < 0) ratio = 0; if (ratio > 1) ratio = 1; if (info->size == 0) /* we only have a gamma number, not a ramp. */ { XF86VidModeGamma g2; g2.red = info->vmg.red * ratio; g2.green = info->vmg.green * ratio; g2.blue = info->vmg.blue * ratio; # ifdef XF86_MIN_GAMMA if (g2.red < XF86_MIN_GAMMA) g2.red = XF86_MIN_GAMMA; if (g2.green < XF86_MIN_GAMMA) g2.green = XF86_MIN_GAMMA; if (g2.blue < XF86_MIN_GAMMA) g2.blue = XF86_MIN_GAMMA; # endif status = XF86VidModeSetGamma (dpy, screen, &g2); } else { # ifdef HAVE_XF86VMODE_GAMMA_RAMP unsigned short *r, *g, *b; int i; r = (unsigned short *) malloc(info->size * sizeof(unsigned short)); g = (unsigned short *) malloc(info->size * sizeof(unsigned short)); b = (unsigned short *) malloc(info->size * sizeof(unsigned short)); for (i = 0; i < info->size; i++) { r[i] = info->r[i] * ratio; g[i] = info->g[i] * ratio; b[i] = info->b[i] * ratio; } status = XF86VidModeSetGammaRamp(dpy, screen, info->size, r, g, b); free (r); free (g); free (b); # else /* !HAVE_XF86VMODE_GAMMA_RAMP */ abort(); # endif /* !HAVE_XF86VMODE_GAMMA_RAMP */ } XSync (dpy, False); XSetErrorHandler (old_handler); XSync (dpy, False); return status; } #endif /* HAVE_XF86VMODE_GAMMA */ xscreensaver-5.36/utils/grabscreen.c000644 000767 000024 00000065702 12721400471 017565 0ustar00jwzstaff000000 000000 /* xscreensaver, Copyright (c) 1992-2016 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 file contains code for grabbing an image of the screen to hack its bits. This is a little tricky, since doing this involves the need to tell the difference between drawing on the actual root window, and on the fake root window used by the screensaver, since at this level the illusion breaks down... The hacks themselves use utils/grabclient.c to invoke the "xscreensaver-getimage" program as a sub-process. On "real" X11 systems: "driver/xscreensaver-getimage" runs the code in this file to grab the X11 root window image as a Pixmap. On MacOS systems running X11, which nobody does any more: "driver/xscreensaver-getimage" runs the Perl script "driver/xscreensaver-getimage-desktop", which in turn runs the MacOS program "/usr/sbin/screencapture" to get the Mac desktop image as a PNG file. On MacOS systems running the native Cocoa build, or on iOS or Android systems: "driver/xscreensaver-getimage" is not used. Instead, each saver's "utils/grabclient.c" links against "OSX/grabclient-osx.m", "OSX/grabclient-ios.m" or "jwxyz/jwxyz-android.c" to grab screenshots directly without invoking a sub-process to do it. See the comment at the top of utils/grabclient.c for a more detailed explanation. */ #include "utils.h" #include "yarandom.h" #include #include #ifdef HAVE_XMU # ifndef VMS # include # else /* VMS */ # include # endif /* VMS */ #endif #include "usleep.h" #include "colors.h" #include "grabscreen.h" #include "visual.h" #include "resources.h" #include "vroot.h" #undef RootWindowOfScreen #undef RootWindow #undef DefaultRootWindow #ifdef HAVE_READ_DISPLAY_EXTENSION # include static Bool read_display (Screen *, Window, Pixmap, Bool); #endif /* HAVE_READ_DISPLAY_EXTENSION */ static void copy_default_colormap_contents (Screen *, Colormap, Visual *); #ifdef HAVE_READ_DISPLAY_EXTENSION static void allocate_cubic_colormap (Screen *, Window, Visual *); void remap_image (Screen *, Window, Colormap, XImage *); #endif static Bool MapNotify_event_p (Display *dpy, XEvent *event, XPointer window) { return (event->xany.type == MapNotify && event->xvisibility.window == (Window) window); } extern char *progname; Bool grab_verbose_p = False; void grabscreen_verbose(void) { grab_verbose_p = True; } static void raise_window(Display *dpy, Window window, Bool dont_wait) { if (grab_verbose_p) fprintf(stderr, "%s: raising window 0x%08lX (%s)\n", progname, (unsigned long) window, (dont_wait ? "not waiting" : "waiting")); if (! dont_wait) { XWindowAttributes xgwa; XSizeHints hints; long supplied = 0; memset(&hints, 0, sizeof(hints)); XGetWMNormalHints(dpy, window, &hints, &supplied); XGetWindowAttributes (dpy, window, &xgwa); hints.x = xgwa.x; hints.y = xgwa.y; hints.width = xgwa.width; hints.height = xgwa.height; hints.flags |= (PPosition|USPosition|PSize|USSize); XSetWMNormalHints(dpy, window, &hints); XSelectInput (dpy, window, (xgwa.your_event_mask | StructureNotifyMask)); } XMapRaised(dpy, window); if (! dont_wait) { XEvent event; XIfEvent (dpy, &event, MapNotify_event_p, (XPointer) window); XSync (dpy, True); } } static Bool xscreensaver_window_p (Display *dpy, Window window) { Atom type; int format; unsigned long nitems, bytesafter; unsigned char *version; if (XGetWindowProperty (dpy, window, XInternAtom (dpy, "_SCREENSAVER_VERSION", False), 0, 1, False, XA_STRING, &type, &format, &nitems, &bytesafter, &version) == Success && type != None) return True; return False; } /* Whether the given window is: - the real root window; - a direct child of the root window; - a direct child of the window manager's decorations. */ Bool top_level_window_p (Screen *screen, Window window) { Display *dpy = DisplayOfScreen (screen); Window root, parent, *kids; unsigned int nkids; if (!XQueryTree (dpy, window, &root, &parent, &kids, &nkids)) return False; if (window == root) return True; /* If our direct parent is the real root window, then yes. */ if (parent == root) return True; else { Atom type = None; int format; unsigned long nitems, bytesafter; unsigned char *data; /* If our direct parent has the WM_STATE property, then it is a window manager decoration -- yes. */ if (XGetWindowProperty (dpy, window, XInternAtom (dpy, "WM_STATE", True), 0, 0, False, AnyPropertyType, &type, &format, &nitems, &bytesafter, (unsigned char **) &data) == Success && type != None) return True; } /* Else, no. We're deep in a tree somewhere. */ return False; } static Bool error_handler_hit_p = False; static XErrorHandler old_ehandler = 0; static int BadWindow_ehandler (Display *dpy, XErrorEvent *error) { error_handler_hit_p = True; if (error->error_code == BadWindow || error->error_code == BadDrawable) return 0; else if (!old_ehandler) { abort(); return 0; } else return (*old_ehandler) (dpy, error); } /* XCopyArea seems not to work right on SGI O2s if you draw in SubwindowMode on a window whose depth is not the maximal depth of the screen? Or something. Anyway, things don't work unless we: use SubwindowMode for the real root window (or a legitimate virtual root window); but do not use SubwindowMode for the xscreensaver window. I make no attempt to explain. */ Bool use_subwindow_mode_p(Screen *screen, Window window) { if (window != VirtualRootWindowOfScreen(screen)) return False; else if (xscreensaver_window_p(DisplayOfScreen(screen), window)) return False; else return True; } /* Install the colormaps of all visible windows, deepest first. This should leave the colormaps of the topmost windows installed (if only N colormaps can be installed at a time, then only the topmost N windows will be shown in the right colors.) */ static void install_screen_colormaps (Screen *screen) { unsigned int i; Display *dpy = DisplayOfScreen (screen); Window real_root; Window parent, *kids = 0; unsigned int nkids = 0; XSync (dpy, False); old_ehandler = XSetErrorHandler (BadWindow_ehandler); error_handler_hit_p = False; real_root = XRootWindowOfScreen (screen); /* not vroot */ if (XQueryTree (dpy, real_root, &real_root, &parent, &kids, &nkids)) for (i = 0; i < nkids; i++) { XWindowAttributes xgwa; Window client; #ifdef HAVE_XMU /* #### need to put XmuClientWindow() in xmu.c, sigh... */ if (! (client = XmuClientWindow (dpy, kids[i]))) #endif client = kids[i]; xgwa.colormap = 0; XGetWindowAttributes (dpy, client, &xgwa); if (xgwa.colormap && xgwa.map_state == IsViewable) XInstallColormap (dpy, xgwa.colormap); } XInstallColormap (dpy, DefaultColormapOfScreen (screen)); XSync (dpy, False); XSetErrorHandler (old_ehandler); XSync (dpy, False); if (kids) XFree ((char *) kids); } void grab_screen_image_internal (Screen *screen, Window window) { Display *dpy = DisplayOfScreen (screen); XWindowAttributes xgwa; Window real_root; Bool root_p; Bool saver_p; Bool grab_mouse_p = False; int unmap_time = 0; real_root = XRootWindowOfScreen (screen); /* not vroot */ root_p = (window == real_root); saver_p = xscreensaver_window_p (dpy, window); XGetWindowAttributes (dpy, window, &xgwa); screen = xgwa.screen; if (saver_p) /* I think this is redundant, but just to be safe... */ root_p = False; if (saver_p) /* The only time grabbing the mouse is important is if this program is being run while the saver is locking the screen. */ grab_mouse_p = True; if (!root_p) { double unmap = 0; if (saver_p) { unmap = get_float_resource(dpy, "grabRootDelay", "Seconds"); if (unmap <= 0.00001 || unmap > 20) unmap = 2.5; } else { unmap = get_float_resource(dpy, "grabWindowDelay", "Seconds"); if (unmap <= 0.00001 || unmap > 20) unmap = 0.66; } unmap_time = unmap * 100000; } if (grab_verbose_p) { fprintf(stderr, "\n%s: window 0x%08lX root: %d saver: %d grab: %d wait: %.1f\n", progname, (unsigned long) window, root_p, saver_p, grab_mouse_p, ((double)unmap_time)/1000000.0); fprintf(stderr, "%s: ", progname); describe_visual(stderr, screen, xgwa.visual, False); fprintf (stderr, "\n"); } if (!root_p && !top_level_window_p (screen, window)) { if (grab_verbose_p) fprintf (stderr, "%s: not a top-level window: 0x%08lX: not grabbing\n", progname, (unsigned long) window); return; } if (!root_p) XSetWindowBackgroundPixmap (dpy, window, None); if (grab_mouse_p) { /* prevent random viewer of the screen saver (locker) from messing with windows. We don't check whether it succeeded, because what are our options, really... */ XGrabPointer (dpy, real_root, True, ButtonPressMask|ButtonReleaseMask, GrabModeAsync, GrabModeAsync, None, None, CurrentTime); XGrabKeyboard (dpy, real_root, True, GrabModeSync, GrabModeAsync, CurrentTime); } if (unmap_time > 0) { XUnmapWindow (dpy, window); install_screen_colormaps (screen); XSync (dpy, True); usleep(unmap_time); /* wait for everyone to swap in and handle exposes */ } if (!root_p) { #ifdef HAVE_READ_DISPLAY_EXTENSION if (! read_display(screen, window, 0, saver_p)) #endif /* HAVE_READ_DISPLAY_EXTENSION */ { #ifdef HAVE_READ_DISPLAY_EXTENSION if (grab_verbose_p) fprintf(stderr, "%s: read_display() failed\n", progname); #endif /* HAVE_READ_DISPLAY_EXTENSION */ copy_default_colormap_contents (screen, xgwa.colormap, xgwa.visual); raise_window(dpy, window, saver_p); /* Generally it's bad news to call XInstallColormap() explicitly, but this file does a lot of sleazy stuff already... This is to make sure that the window's colormap is installed, even in the case where the window is OverrideRedirect. */ if (xgwa.colormap) XInstallColormap (dpy, xgwa.colormap); XSync (dpy, False); } } else /* root_p */ { Pixmap pixmap; pixmap = XCreatePixmap(dpy, window, xgwa.width, xgwa.height, xgwa.depth); #ifdef HAVE_READ_DISPLAY_EXTENSION if (! read_display(screen, window, pixmap, True)) #endif { Window real_root = XRootWindowOfScreen (screen); /* not vroot */ XGCValues gcv; GC gc; #ifdef HAVE_READ_DISPLAY_EXTENSION if (grab_verbose_p) fprintf(stderr, "%s: read_display() failed\n", progname); #endif /* HAVE_READ_DISPLAY_EXTENSION */ copy_default_colormap_contents (screen, xgwa.colormap, xgwa.visual); gcv.function = GXcopy; gcv.subwindow_mode = IncludeInferiors; gc = XCreateGC (dpy, window, GCFunction | GCSubwindowMode, &gcv); XCopyArea (dpy, real_root, pixmap, gc, xgwa.x, xgwa.y, xgwa.width, xgwa.height, 0, 0); XFreeGC (dpy, gc); } XSetWindowBackgroundPixmap (dpy, window, pixmap); XFreePixmap (dpy, pixmap); } if (grab_verbose_p) fprintf (stderr, "%s: grabbed %d bit screen image to %swindow.\n", progname, xgwa.depth, (root_p ? "real root " : "")); if (grab_mouse_p) { XUngrabPointer (dpy, CurrentTime); XUngrabKeyboard (dpy, CurrentTime); } XSync (dpy, True); } /* When we are grabbing and manipulating a screen image, it's important that we use the same colormap it originally had. So, if the screensaver was started with -install, we need to copy the contents of the default colormap into the screensaver's colormap. */ static void copy_default_colormap_contents (Screen *screen, Colormap to_cmap, Visual *to_visual) { Display *dpy = DisplayOfScreen (screen); Visual *from_visual = DefaultVisualOfScreen (screen); Colormap from_cmap = XDefaultColormapOfScreen (screen); XColor *old_colors, *new_colors; unsigned long *pixels; XVisualInfo vi_in, *vi_out; int out_count; int from_cells, to_cells, max_cells, got_cells; int i; if (from_cmap == to_cmap) return; vi_in.screen = XScreenNumberOfScreen (screen); vi_in.visualid = XVisualIDFromVisual (from_visual); vi_out = XGetVisualInfo (dpy, VisualScreenMask|VisualIDMask, &vi_in, &out_count); if (! vi_out) abort (); from_cells = vi_out [0].colormap_size; XFree ((char *) vi_out); vi_in.screen = XScreenNumberOfScreen (screen); vi_in.visualid = XVisualIDFromVisual (to_visual); vi_out = XGetVisualInfo (dpy, VisualScreenMask|VisualIDMask, &vi_in, &out_count); if (! vi_out) abort (); to_cells = vi_out [0].colormap_size; XFree ((char *) vi_out); max_cells = (from_cells > to_cells ? to_cells : from_cells); old_colors = (XColor *) calloc (sizeof (XColor), max_cells); new_colors = (XColor *) calloc (sizeof (XColor), max_cells); pixels = (unsigned long *) calloc (sizeof (unsigned long), max_cells); for (i = 0; i < max_cells; i++) old_colors[i].pixel = i; XQueryColors (dpy, from_cmap, old_colors, max_cells); got_cells = max_cells; allocate_writable_colors (screen, to_cmap, pixels, &got_cells); if (grab_verbose_p && got_cells != max_cells) fprintf(stderr, "%s: got only %d of %d cells\n", progname, got_cells, max_cells); if (got_cells <= 0) /* we're screwed */ ; else if (got_cells == max_cells && /* we're golden */ from_cells == to_cells) XStoreColors (dpy, to_cmap, old_colors, got_cells); else /* try to cope... */ { for (i = 0; i < got_cells; i++) { XColor *c = old_colors + i; int j; for (j = 0; j < got_cells; j++) if (pixels[j] == c->pixel) { /* only store this color value if this is one of the pixels we were able to allocate. */ XStoreColors (dpy, to_cmap, c, 1); break; } } } if (grab_verbose_p) fprintf(stderr, "%s: installing copy of default colormap\n", progname); free (old_colors); free (new_colors); free (pixels); } /* The SGI ReadDisplay extension. This extension lets you get back a 24-bit image of the screen, taking into account the colors with which all windows are *currently* displayed, even if those windows have different visuals. Without this extension, presence of windows with different visuals or colormaps will result in technicolor when one tries to grab the screen image. */ #ifdef HAVE_READ_DISPLAY_EXTENSION static Bool read_display (Screen *screen, Window window, Pixmap into_pixmap, Bool dont_wait) { Display *dpy = DisplayOfScreen (screen); XWindowAttributes xgwa; int rd_event_base = 0; int rd_error_base = 0; unsigned long hints = 0; XImage *image = 0; XGCValues gcv; int class; GC gc; Bool remap_p = False; /* Check to see if the server supports the extension, and bug out if not. */ if (! XReadDisplayQueryExtension (dpy, &rd_event_base, &rd_error_base)) { if (grab_verbose_p) fprintf(stderr, "%s: no XReadDisplay extension\n", progname); return False; } /* If this isn't a visual we know how to handle, bug out. We handle: = TrueColor in depths 8, 12, 15, 16, and 32; = PseudoColor and DirectColor in depths 8 and 12. */ XGetWindowAttributes(dpy, window, &xgwa); class = visual_class (screen, xgwa.visual); if (class == TrueColor) { if (xgwa.depth != 8 && xgwa.depth != 12 && xgwa.depth != 15 && xgwa.depth != 16 && xgwa.depth != 24 && xgwa.depth != 32) { if (grab_verbose_p) fprintf(stderr, "%s: TrueColor depth %d unsupported\n", progname, xgwa.depth); return False; } } else if (class == PseudoColor || class == DirectColor) { if (xgwa.depth != 8 && xgwa.depth != 12) { if (grab_verbose_p) fprintf(stderr, "%s: Pseudo/DirectColor depth %d unsupported\n", progname, xgwa.depth); return False; } else /* Allocate a TrueColor-like spread of colors for the image. */ remap_p = True; } /* Try and read the screen. */ hints = (XRD_TRANSPARENT | XRD_READ_POINTER); image = XReadDisplay (dpy, window, xgwa.x, xgwa.y, xgwa.width, xgwa.height, hints, &hints); if (!image) { if (grab_verbose_p) fprintf(stderr, "%s: XReadDisplay() failed\n", progname); return False; } if (!image->data) { if (grab_verbose_p) fprintf(stderr, "%s: XReadDisplay() returned no data\n", progname); XDestroyImage(image); return False; } /* XReadDisplay tends to LIE about the depth of the image it read. It is returning an XImage which has `depth' and `bits_per_pixel' confused! That is, on a 24-bit display, where all visuals claim depth 24, and where XGetImage would return an XImage with depth 24, and where XPutImage will get a BadMatch with images that are not depth 24, XReadDisplay is returning images with depth 32! Fuckwits! So if the visual is of depth 24, but the image came back as depth 32, hack it to be 24 lest we get a BadMatch from XPutImage. I wonder what happens on an 8-bit SGI... Probably it still returns an image claiming depth 32? Certainly it can't be 8. So, let's just smash it to 32... */ if (image->depth == 32 /* && xgwa.depth == 24 */ ) image->depth = 24; /* If the visual of the window/pixmap into which we're going to draw is less deep than the screen itself, then we need to convert the grabbed bits to match the depth by clipping off the less significant bit-planes of each color component. */ if (image->depth > xgwa.depth) { int x, y; /* We use the same image->data in both images -- that's ok, because since we're reading from B and writing to A, and B uses more bytes per pixel than A, the write pointer won't overrun the read pointer. */ XImage *image2 = XCreateImage (dpy, xgwa.visual, xgwa.depth, ZPixmap, 0, image->data, xgwa.width, xgwa.height, 8, 0); if (!image2) { if (grab_verbose_p) fprintf(stderr, "%s: out of memory?\n", progname); return False; } if (grab_verbose_p) fprintf(stderr, "%s: converting from depth %d to depth %d\n", progname, image->depth, xgwa.depth); for (y = 0; y < image->height; y++) for (x = 0; x < image->width; x++) { /* #### really these shift values should be determined from the mask values -- but that's a pain in the ass, and anyway, this is an SGI-specific extension so hardcoding assumptions about the SGI server's behavior isn't *too* heinous... */ unsigned long pixel = XGetPixel(image, x, y); unsigned int r = (pixel & image->red_mask); unsigned int g = (pixel & image->green_mask) >> 8; unsigned int b = (pixel & image->blue_mask) >> 16; if (xgwa.depth == 8) pixel = ((r >> 5) | ((g >> 5) << 3) | ((b >> 6) << 6)); else if (xgwa.depth == 12) pixel = ((r >> 4) | ((g >> 4) << 4) | ((b >> 4) << 8)); else if (xgwa.depth == 16 || xgwa.depth == 15) /* Gah! I don't understand why these are in the other order. */ pixel = (((r >> 3) << 10) | ((g >> 3) << 5) | ((b >> 3))); else abort(); XPutPixel(image2, x, y, pixel); } image->data = 0; XDestroyImage(image); image = image2; } if (remap_p) { allocate_cubic_colormap (screen, window, xgwa.visual); remap_image (screen, window, xgwa.colormap, image); } /* Now actually put the bits into the window or pixmap -- note the design bogosity of this extension, where we've been forced to take 24 bit data from the server to the client, and then push it back from the client to the server, *without alteration*. We should have just been able to tell the server, "put a screen image in this drawable", instead of having to go through the intermediate step of converting it to an Image. Geez. (Assuming that the window is of screen depth; we happen to handle less deep windows, but that's beside the point.) */ gcv.function = GXcopy; gc = XCreateGC (dpy, window, GCFunction, &gcv); if (into_pixmap) { gcv.function = GXcopy; gc = XCreateGC (dpy, into_pixmap, GCFunction, &gcv); XPutImage (dpy, into_pixmap, gc, image, 0, 0, 0, 0, xgwa.width, xgwa.height); } else { gcv.function = GXcopy; gc = XCreateGC (dpy, window, GCFunction, &gcv); /* Ok, now we'll be needing that window on the screen... */ raise_window(dpy, window, dont_wait); /* Plop down the bits... */ XPutImage (dpy, window, gc, image, 0, 0, 0, 0, xgwa.width, xgwa.height); } XFreeGC (dpy, gc); if (image->data) { free(image->data); image->data = 0; } XDestroyImage(image); return True; } #endif /* HAVE_READ_DISPLAY_EXTENSION */ #ifdef HAVE_READ_DISPLAY_EXTENSION /* Makes and installs a colormap that makes a PseudoColor or DirectColor visual behave like a TrueColor visual of the same depth. #### Duplicated in driver/xscreensaver-getimage.c */ static void allocate_cubic_colormap (Screen *screen, Window window, Visual *visual) { Display *dpy = DisplayOfScreen (screen); XWindowAttributes xgwa; Colormap cmap; int nr, ng, nb, cells; int r, g, b; int depth; XColor colors[4097]; int i; XGetWindowAttributes (dpy, window, &xgwa); cmap = xgwa.colormap; depth = visual_depth (screen, visual); switch (depth) { case 8: nr = 3; ng = 3; nb = 2; cells = 256; break; case 12: nr = 4; ng = 4; nb = 4; cells = 4096; break; default: abort(); break; } memset(colors, 0, sizeof(colors)); for (r = 0; r < (1 << nr); r++) for (g = 0; g < (1 << ng); g++) for (b = 0; b < (1 << nb); b++) { i = (r | (g << nr) | (b << (nr + ng))); colors[i].pixel = i; colors[i].flags = DoRed|DoGreen|DoBlue; if (depth == 8) { colors[i].red = ((r << 13) | (r << 10) | (r << 7) | (r << 4) | (r << 1)); colors[i].green = ((g << 13) | (g << 10) | (g << 7) | (g << 4) | (g << 1)); colors[i].blue = ((b << 14) | (b << 12) | (b << 10) | (b << 8) | (b << 6) | (b << 4) | (b << 2) | b); } else { colors[i].red = (r << 12) | (r << 8) | (r << 4) | r; colors[i].green = (g << 12) | (g << 8) | (g << 4) | g; colors[i].blue = (b << 12) | (b << 8) | (b << 4) | b; } } { int j; int allocated = 0; int interleave = cells / 8; /* skip around, rather than allocating in order, so that we get better coverage if we can't allocated all of them. */ for (j = 0; j < interleave; j++) for (i = 0; i < cells; i += interleave) if (XAllocColor (dpy, cmap, &colors[i + j])) allocated++; if (grab_verbose_p) fprintf (stderr, "%s: allocated %d of %d colors for cubic map\n", progname, allocated, cells); } } /* Find the pixel index that is closest to the given color (using linear distance in RGB space -- which is far from the best way.) #### Duplicated in driver/xscreensaver-getimage.c */ static unsigned long find_closest_pixel (XColor *colors, int ncolors, unsigned long r, unsigned long g, unsigned long b) { unsigned long distance = ~0; int i, found = 0; if (ncolors == 0) abort(); for (i = 0; i < ncolors; i++) { unsigned long d; int rd, gd, bd; rd = r - colors[i].red; gd = g - colors[i].green; bd = b - colors[i].blue; if (rd < 0) rd = -rd; if (gd < 0) gd = -gd; if (bd < 0) bd = -bd; d = (rd << 1) + (gd << 2) + bd; if (d < distance) { distance = d; found = i; if (distance == 0) break; } } return found; } /* Given an XImage with 8-bit or 12-bit RGB data, convert it to be displayable with the given X colormap. The farther from a perfect color cube the contents of the colormap are, the lossier the transformation will be. No dithering is done. #### Duplicated in driver/xscreensaver-getimage.c */ void remap_image (Screen *screen, Window window, Colormap cmap, XImage *image) { Display *dpy = DisplayOfScreen (screen); unsigned long map[4097]; int x, y, i; int cells; XColor colors[4097]; if (image->depth == 8) cells = 256; else if (image->depth == 12) cells = 4096; else abort(); memset(map, -1, sizeof(*map)); memset(colors, -1, sizeof(*colors)); for (i = 0; i < cells; i++) colors[i].pixel = i; XQueryColors (dpy, cmap, colors, cells); if (grab_verbose_p) fprintf(stderr, "%s: building table for %d bit image\n", progname, image->depth); for (i = 0; i < cells; i++) { unsigned short r, g, b; if (cells == 256) { /* "RRR GGG BB" In an 8 bit map. Convert that to "RRR RRR RR" "GGG GGG GG" "BB BB BB BB" to give an even spread. */ r = (i & 0x07); g = (i & 0x38) >> 3; b = (i & 0xC0) >> 6; r = ((r << 13) | (r << 10) | (r << 7) | (r << 4) | (r << 1)); g = ((g << 13) | (g << 10) | (g << 7) | (g << 4) | (g << 1)); b = ((b << 14) | (b << 12) | (b << 10) | (b << 8) | (b << 6) | (b << 4) | (b << 2) | b); } else { /* "RRRR GGGG BBBB" In a 12 bit map. Convert that to "RRRR RRRR" "GGGG GGGG" "BBBB BBBB" to give an even spread. */ r = (i & 0x00F); g = (i & 0x0F0) >> 4; b = (i & 0xF00) >> 8; r = (r << 12) | (r << 8) | (r << 4) | r; g = (g << 12) | (g << 8) | (g << 4) | g; b = (b << 12) | (b << 8) | (b << 4) | b; } map[i] = find_closest_pixel (colors, cells, r, g, b); } if (grab_verbose_p) fprintf(stderr, "%s: remapping colors in %d bit image\n", progname, image->depth); for (y = 0; y < image->height; y++) for (x = 0; x < image->width; x++) { unsigned long pixel = XGetPixel(image, x, y); if (pixel >= cells) abort(); XPutPixel(image, x, y, map[pixel]); } } #endif /* HAVE_READ_DISPLAY_EXTENSION */ xscreensaver-5.36/utils/grabclient.c000664 000767 000024 00000073737 12721376026 017605 0ustar00jwzstaff000000 000000 /* xscreensaver, Copyright (c) 1992-2016 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 file contains code for running an external program to grab an image onto the given window. The external program in question must take a window ID as its argument, e.g., the "xscreensaver-getimage" program in the hacks/ directory. That program links against utils/grabimage.c, which happens to export the same API as this program (utils/grabclient.c). */ /* This code is a mess. There's two decades of history in this file. There are several distinct paths through this file depending on what platform it's being compiled for: X11 execution path: load_image_async CB load_random_image_x11 fork_exec_cb "xscreensaver-getimage 0xWINDOW 0xPIXMAP" "xscreensaver-getimage-file --name /DIR" draw_colorbars XPutImage XtAppAddInput xscreensaver_getimage_cb ... xscreensaver_getimage_cb get_name_from_xprops get_original_geometry_from_xprops CB name, geom, closure MacOS execution path: load_image_async CB load_random_image_cocoa osx_grab_desktop_image (grabclient-osx.m, MacOS version) copy_framebuffer_to_ximage XPutImage draw_colorbars osx_load_image_file_async open_image_name_pipe "xscreensaver-getimage-file --name /DIR" XtAppAddInput xscreensaver_getimage_file_cb ... xscreensaver_getimage_file_cb osx_load_image_file CB name, geom, closure iOS execution path: load_image_async CB load_random_image_cocoa osx_grab_desktop_image (grabclient-osx.m, iOS version) CGWindowListCreateImage jwxyz_draw_NSImage_or_CGImage draw_colorbars ios_load_random_image ios_load_random_image_cb jwxyz_draw_NSImage_or_CGImage CB name, geom, closure Andrid execution path: load_image_async CB load_random_image_android jwxyz_load_random_image (jwxyz-android.c) XPutImage draw_colorbars CB name, geom, closure */ #include "utils.h" #include "grabscreen.h" #include "resources.h" #include "yarandom.h" #ifdef HAVE_JWXYZ # include "jwxyz.h" # include "colorbars.h" #else /* !HAVE_COCOA -- real Xlib */ # include "vroot.h" # include # include /* for XtInputId, etc */ #endif /* !HAVE_COCOA */ #include #ifdef HAVE_UNISTD_H # include #endif #ifdef HAVE_SYS_WAIT_H # include /* for waitpid() and associated macros */ #endif extern char *progname; static void print_loading_msg (Screen *, Window); /* Used for pipe callbacks in X11 or OSX mode. X11: this is the xscreensaver_getimage_cb closure, when waiting on the fork of "xscreensaver-getimage" OSX: this is the xscreensaver_getimage_file_cb closure, when waiting on the fork of "xscreensaver-getimage-file" */ typedef struct { void (*callback) (Screen *, Window, Drawable, const char *name, XRectangle *geom, void *closure); Screen *screen; Window window; Drawable drawable; void *closure; XtInputId pipe_id; FILE *pipe; # if !defined(USE_IPHONE) && !defined(HAVE_COCOA) /* Real X11 */ pid_t pid; # endif # if !defined(USE_IPHONE) && defined(HAVE_COCOA) /* Desktop OSX */ char *directory; # endif } xscreensaver_getimage_data; #if !defined(HAVE_COCOA) && !defined(HAVE_ANDROID) /* Real X11 */ static Bool error_handler_hit_p = False; static int ignore_all_errors_ehandler (Display *dpy, XErrorEvent *error) { error_handler_hit_p = True; return 0; } /* Returns True if the given Drawable is a Window; False if it's a Pixmap. */ static Bool drawable_window_p (Display *dpy, Drawable d) { XErrorHandler old_handler; XWindowAttributes xgwa; XSync (dpy, False); old_handler = XSetErrorHandler (ignore_all_errors_ehandler); error_handler_hit_p = False; XGetWindowAttributes (dpy, d, &xgwa); XSync (dpy, False); XSetErrorHandler (old_handler); XSync (dpy, False); if (!error_handler_hit_p) return True; /* It's a Window. */ else return False; /* It's a Pixmap, or an invalid ID. */ } static Bool xscreensaver_window_p (Display *dpy, Window window) { Atom type; int format; unsigned long nitems, bytesafter; unsigned char *version; if (XGetWindowProperty (dpy, window, XInternAtom (dpy, "_SCREENSAVER_VERSION", False), 0, 1, False, XA_STRING, &type, &format, &nitems, &bytesafter, &version) == Success && type != None) return True; return False; } /* XCopyArea seems not to work right on SGI O2s if you draw in SubwindowMode on a window whose depth is not the maximal depth of the screen? Or something. Anyway, things don't work unless we: use SubwindowMode for the real root window (or a legitimate virtual root window); but do not use SubwindowMode for the xscreensaver window. I make no attempt to explain. */ Bool use_subwindow_mode_p (Screen *screen, Window window) { if (window != VirtualRootWindowOfScreen(screen)) return False; else if (xscreensaver_window_p(DisplayOfScreen(screen), window)) return False; else return True; } static void checkerboard (Screen *screen, Drawable drawable) { Display *dpy = DisplayOfScreen (screen); unsigned int x, y; int size = 24; XColor fg, bg; XGCValues gcv; GC gc = XCreateGC (dpy, drawable, 0, &gcv); Colormap cmap; unsigned int win_width, win_height; fg.flags = bg.flags = DoRed|DoGreen|DoBlue; fg.red = fg.green = fg.blue = 0x0000; bg.red = bg.green = bg.blue = 0x4444; fg.pixel = 0; bg.pixel = 1; if (drawable_window_p (dpy, drawable)) { XWindowAttributes xgwa; XGetWindowAttributes (dpy, drawable, &xgwa); win_width = xgwa.width; win_height = xgwa.height; cmap = xgwa.colormap; screen = xgwa.screen; } else /* it's a pixmap */ { XWindowAttributes xgwa; Window root; int x, y; unsigned int bw, d; XGetWindowAttributes (dpy, RootWindowOfScreen (screen), &xgwa); cmap = xgwa.colormap; XGetGeometry (dpy, drawable, &root, &x, &y, &win_width, &win_height, &bw, &d); } /* Allocate black and gray, but don't hold them locked. */ if (XAllocColor (dpy, cmap, &fg)) XFreeColors (dpy, cmap, &fg.pixel, 1, 0); if (XAllocColor (dpy, cmap, &bg)) XFreeColors (dpy, cmap, &bg.pixel, 1, 0); XSetForeground (dpy, gc, bg.pixel); XFillRectangle (dpy, drawable, gc, 0, 0, win_width, win_height); XSetForeground (dpy, gc, fg.pixel); for (y = 0; y < win_height; y += size+size) for (x = 0; x < win_width; x += size+size) { XFillRectangle (dpy, drawable, gc, x, y, size, size); XFillRectangle (dpy, drawable, gc, x+size, y+size, size, size); } XFreeGC (dpy, gc); } /* Read the image's original name off of the window's X properties. Used only when running "real" X11, not jwxyz. */ static char * get_name_from_xprops (Display *dpy, Window window) { Atom type; int format; unsigned long nitems, bytesafter; unsigned char *name = 0; Atom atom = XInternAtom (dpy, XA_XSCREENSAVER_IMAGE_FILENAME, False); if (XGetWindowProperty (dpy, window, atom, 0, 1024, False, XA_STRING, &type, &format, &nitems, &bytesafter, &name) == Success && type != None) return (char *) name; else return 0; } /* Read the image's original geometry off of the window's X properties. Used only when running "real" X11, not jwxyz. */ static Bool get_original_geometry_from_xprops (Display *dpy, Window window, XRectangle *ret) { Atom type; int format; unsigned long nitems, bytesafter; unsigned char *name = 0; Atom atom = XInternAtom (dpy, XA_XSCREENSAVER_IMAGE_GEOMETRY, False); int x, y; unsigned int w, h; if (XGetWindowProperty (dpy, window, atom, 0, 1024, False, XA_STRING, &type, &format, &nitems, &bytesafter, &name) == Success && type != None) { int flags = XParseGeometry ((char *) name, &x, &y, &w, &h); free (name); /* Require all four, and don't allow negative positions. */ if (flags == (XValue|YValue|WidthValue|HeightValue)) { ret->x = x; ret->y = y; ret->width = w; ret->height = h; return True; } else return False; } else return False; } static void hack_subproc_environment (Display *dpy) { /* Store $DISPLAY into the environment, so that the $DISPLAY variable that the spawned processes inherit is what we are actually using. */ const char *odpy = DisplayString (dpy); char *ndpy = (char *) malloc(strlen(odpy) + 20); strcpy (ndpy, "DISPLAY="); strcat (ndpy, odpy); /* Allegedly, BSD 4.3 didn't have putenv(), but nobody runs such systems any more, right? It's not Posix, but everyone seems to have it. */ # ifdef HAVE_PUTENV if (putenv (ndpy)) abort (); # endif /* HAVE_PUTENV */ /* don't free (ndpy) -- some implementations of putenv (BSD 4.4, glibc 2.0) copy the argument, but some (libc4,5, glibc 2.1.2, MacOS) do not. So we must leak it (and/or the previous setting). Yay. */ } /* Spawn a program, and wait for it to finish. If we just use system() for this, then sometimes the subprocess doesn't die when *this* process is sent a TERM signal. Perhaps this is due to the intermediate /bin/sh that system() uses to parse arguments? I'm not sure. But using fork() and execvp() here seems to close the race. Used to execute "xscreensaver-getimage". Used only when running "real" X11, not jwxyz. */ static void exec_simple_command (const char *command) { char *av[1024]; int ac = 0; char *token = strtok (strdup(command), " \t"); while (token) { av[ac++] = token; token = strtok(0, " \t"); } av[ac] = 0; execvp (av[0], av); /* shouldn't return. */ } static void xscreensaver_getimage_cb (XtPointer closure, int *fd, XtIntervalId *id); /* Spawn a program, and run the callback when it finishes. Used to execute "xscreensaver-getimage". Used only when running "real" X11, not jwxyz. */ static void fork_exec_cb (const char *command, Screen *screen, Window window, Drawable drawable, void (*callback) (Screen *, Window, Drawable, const char *name, XRectangle *geom, void *closure), void *closure) { XtAppContext app = XtDisplayToApplicationContext (DisplayOfScreen (screen)); xscreensaver_getimage_data *data; char buf [255]; pid_t forked; FILE *wpipe; int fds [2]; if (pipe (fds)) { sprintf (buf, "%s: creating pipe", progname); perror (buf); exit (1); } data = (xscreensaver_getimage_data *) calloc (1, sizeof(*data)); data->callback = callback; data->closure = closure; data->screen = screen; data->window = window; data->drawable = drawable; data->pipe = fdopen (fds[0], "r"); wpipe = fdopen (fds[1], "w"); /* Is this necessary? */ if (!data->pipe || !wpipe) { sprintf (buf, "%s: fdopen", progname); perror (buf); exit (1); } data->pipe_id = XtAppAddInput (app, fileno (data->pipe), (XtPointer) (XtInputReadMask | XtInputExceptMask), xscreensaver_getimage_cb, (XtPointer) data); forked = fork (); switch ((int) forked) { case -1: sprintf (buf, "%s: couldn't fork", progname); perror (buf); return; case 0: /* child */ fclose (data->pipe); data->pipe = 0; /* clone the write pipe onto stdout so that it gets closed when the fork exits. This will shut down the pipe and signal the parent. */ close (fileno (stdout)); dup2 (fds[1], fileno (stdout)); close (fds[1]); close (fileno (stdin)); /* for kicks */ exec_simple_command (command); exit (1); /* exits child fork */ break; default: /* parent */ fclose (wpipe); data->pid = forked; break; } } /* Called in the parent when the forked process dies. Runs the caller's callback, and cleans up. This runs when "xscreensaver-getimage" exits. Used only when running "real" X11, not jwxyz. */ static void xscreensaver_getimage_cb (XtPointer closure, int *fd, XtIntervalId *id) { xscreensaver_getimage_data *data = (xscreensaver_getimage_data *) closure; Display *dpy = DisplayOfScreen (data->screen); char *name; XRectangle geom = { 0, 0, 0, 0 }; XtRemoveInput (*id); name = get_name_from_xprops (dpy, data->window); get_original_geometry_from_xprops (dpy, data->window, &geom); data->callback (data->screen, data->window, data->drawable, name, &geom, data->closure); if (name) free (name); fclose (data->pipe); if (data->pid) /* reap zombies */ { int status; waitpid (data->pid, &status, 0); data->pid = 0; } memset (data, 0, sizeof (*data)); free (data); } /* Loads an image into the Drawable. When grabbing desktop images, the Window will be unmapped first. Used only when running "real" X11, not jwxyz. */ static void load_random_image_x11 (Screen *screen, Window window, Drawable drawable, void (*callback) (Screen *, Window, Drawable, const char *name, XRectangle *geom, void *closure), void *closure) { Display *dpy = DisplayOfScreen (screen); char *grabber = get_string_resource(dpy, "desktopGrabber", "DesktopGrabber"); char *cmd; char id[200]; if (!grabber || !*grabber) { fprintf (stderr, "%s: resources installed incorrectly: \"desktopGrabber\" is unset!\n", progname); exit (1); } sprintf (id, "0x%lx 0x%lx", (unsigned long) window, (unsigned long) drawable); cmd = (char *) malloc (strlen(grabber) + strlen(id) + 1); /* Needn't worry about buffer overflows here, because the buffer is longer than the length of the format string, and the length of what we're putting into it. So the only way to crash would be if the format string itself was corrupted, but that comes from the resource database, and if hostile forces have access to that, then the game is already over. */ sprintf (cmd, grabber, id); free (grabber); grabber = 0; /* In case "cmd" fails, leave some random image on the screen, not just black or white, so that it's more obvious what went wrong. */ checkerboard (screen, drawable); if (window == drawable) print_loading_msg (screen, window); XSync (dpy, True); hack_subproc_environment (dpy); /* Start the image loading in another fork and return immediately. Invoke the callback function when done. */ fork_exec_cb (cmd, screen, window, drawable, callback, closure); free (cmd); XSync (dpy, True); } #elif defined (HAVE_COCOA) /* OSX or iOS */ # ifndef USE_IPHONE /* HAVE_COCOA && !USE_IPHONE -- desktop OSX */ # define BACKSLASH(c) \ (! ((c >= 'a' && c <= 'z') || \ (c >= 'A' && c <= 'Z') || \ (c >= '0' && c <= '9') || \ c == '.' || c == '_' || c == '-' || c == '+' || c == '/')) /* 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! */ static FILE * open_image_name_pipe (const char *dir) { char *s; /* /bin/sh on OS X 10.10 wipes out the PATH. */ const char *path = getenv("PATH"); char *cmd = s = malloc ((strlen(dir) + strlen(path)) * 2 + 100); strcpy (s, "/bin/sh -c 'export PATH="); s += strlen (s); while (*path) { char c = *path++; if (BACKSLASH(c)) *s++ = '\\'; *s++ = c; } strcpy (s, "; "); s += strlen (s); strcpy (s, "xscreensaver-getimage-file --name "); s += strlen (s); while (*dir) { char c = *dir++; if (BACKSLASH(c)) *s++ = '\\'; *s++ = c; } strcpy (s, "'"); s += strlen (s); *s = 0; FILE *pipe = popen (cmd, "r"); free (cmd); return pipe; } static void xscreensaver_getimage_file_cb (XtPointer closure, int *source, XtInputId *id) { /* This is not called from a signal handler, so doing stuff here is fine. */ xscreensaver_getimage_data *clo2 = (xscreensaver_getimage_data *) closure; char buf[10240]; const char *dir = clo2->directory; char *absfile = 0; *buf = 0; fgets (buf, sizeof(buf)-1, clo2->pipe); pclose (clo2->pipe); clo2->pipe = 0; XtRemoveInput (clo2->pipe_id); clo2->pipe_id = 0; /* strip trailing newline */ int L = strlen(buf); while (L > 0 && (buf[L-1] == '\r' || buf[L-1] == '\n')) buf[--L] = 0; Display *dpy = DisplayOfScreen (clo2->screen); XRectangle geom; if (*buf && *buf != '/') /* pathname is relative to dir. */ { absfile = malloc (strlen(dir) + strlen(buf) + 10); strcpy (absfile, dir); if (dir[strlen(dir)-1] != '/') strcat (absfile, "/"); strcat (absfile, buf); } if (! osx_load_image_file (clo2->screen, clo2->window, clo2->drawable, (absfile ? absfile : buf), &geom)) { /* unable to load image - draw colorbars */ XWindowAttributes xgwa; XGetWindowAttributes (dpy, clo2->window, &xgwa); Window r; int x, y; unsigned int w, h, bbw, d; struct stat st; /* Log something to syslog so we can tell the difference between corrupted images and broken symlinks. */ if (!*buf) fprintf (stderr, "%s: no image filename found\n", progname); else if (! stat (buf, &st)) fprintf (stderr, "%s: %s: unparsable\n", progname, buf); else { char buf2[2048]; sprintf (buf2, "%.255s: %.1024s", progname, buf); perror (buf2); } 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; } /* Take the extension off of the file name. */ /* Duplicated in driver/xscreensaver-getimage.c. */ if (*buf) { char *slash = strrchr (buf, '/'); char *dot = strrchr ((slash ? slash : buf), '.'); if (dot) *dot = 0; /* Replace slashes with newlines */ /* while (dot = strchr(buf, '/')) *dot = '\n'; */ /* Replace slashes with spaces */ /* while ((dot = strchr(buf, '/'))) *dot = ' '; */ } if (absfile) free (absfile); clo2->callback (clo2->screen, clo2->window, clo2->drawable, buf, &geom, clo2->closure); clo2->callback = 0; free (clo2->directory); free (clo2); } # else /* HAVE_COCOA && USE_IPHONE -- iOS */ /* Callback for ios_load_random_image(), called after we have loaded an image from the iOS device's Photo Library. See grabclient-ios.m. */ static void ios_load_random_image_cb (void *uiimage, const char *filename, int width, int height, void *closure) { xscreensaver_getimage_data *clo2 = (xscreensaver_getimage_data *) closure; Display *dpy = DisplayOfScreen (clo2->screen); XRectangle geom; XWindowAttributes xgwa; Window r; int x, y; unsigned int w, h, bbw, d; int rot = 0; XGetWindowAttributes (dpy, clo2->window, &xgwa); XGetGeometry (dpy, clo2->drawable, &r, &x, &y, &w, &h, &bbw, &d); /* If the image is portrait and the window is landscape, or vice versa, rotate the image. The idea is to fill up as many pixels as possible, and assume the user will just rotate their phone until it looks right. This makes "decayscreen", etc. much more easily viewable. */ if (get_boolean_resource (dpy, "rotateImages", "RotateImages")) { if ((width > height) != (w > h)) rot = 5; } if (uiimage) { jwxyz_draw_NSImage_or_CGImage (DisplayOfScreen (clo2->screen), clo2->drawable, True, uiimage, &geom, rot); } else /* Probably means no images in the gallery. */ { 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->window, clo2->drawable, filename, &geom, clo2->closure); clo2->callback = 0; free (clo2); } # endif /* HAVE_COCOA && USE_IPHONE */ static void osx_load_image_file_async (Screen *screen, Window xwindow, Drawable drawable, const char *dir, void (*callback) (Screen *, Window, Drawable, const char *name, XRectangle *geom, void *closure), void *closure) { xscreensaver_getimage_data *clo2 = (xscreensaver_getimage_data *) calloc (1, sizeof(*clo2)); clo2->screen = screen; clo2->window = xwindow; clo2->drawable = drawable; clo2->callback = callback; clo2->closure = closure; # ifndef USE_IPHONE /* Desktop OSX */ clo2->directory = strdup (dir); clo2->pipe = open_image_name_pipe (dir); clo2->pipe_id = XtAppAddInput (XtDisplayToApplicationContext ( DisplayOfScreen (screen)), fileno (clo2->pipe), (XtPointer) (XtInputReadMask | XtInputExceptMask), xscreensaver_getimage_file_cb, (XtPointer) clo2); # else /* USE_IPHONE */ ios_load_random_image (ios_load_random_image_cb, clo2); # endif /* USE_IPHONE */ } /* Loads an image into the Drawable, returning once the image is loaded. */ static void load_random_image_cocoa (Screen *screen, Window window, Drawable drawable, void (*callback) (Screen *, Window, Drawable, const char *name, XRectangle *geom, void *closure), void *closure) { Display *dpy = DisplayOfScreen (screen); XWindowAttributes xgwa; Bool deskp = get_boolean_resource (dpy, "grabDesktopImages", "Boolean"); Bool filep = get_boolean_resource (dpy, "chooseRandomImages", "Boolean"); const char *dir = 0; Bool done = False; XRectangle geom; char *name = 0; if (!drawable) abort(); XGetWindowAttributes (dpy, window, &xgwa); { Window r; int x, y; unsigned int w, h, bbw, d; XGetGeometry (dpy, drawable, &r, &x, &y, &w, &h, &bbw, &d); xgwa.width = w; xgwa.height = h; } geom.x = 0; geom.y = 0; geom.width = xgwa.width; geom.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 */ filep = !deskp; } if (filep && !done) { osx_load_image_file_async (screen, window, drawable, dir, callback, closure); return; } if (deskp && !done) { if (osx_grab_desktop_image (screen, window, drawable, &geom)) { name = strdup ("desktop"); done = True; } } if (! done) draw_colorbars (screen, xgwa.visual, drawable, xgwa.colormap, 0, 0, xgwa.width, xgwa.height); /* If we got here, we loaded synchronously, so we're done. */ callback (screen, window, drawable, name, &geom, closure); if (name) free (name); } #elif defined(HAVE_ANDROID) /* Loads an image into the Drawable, returning once the image is loaded. */ static void load_random_image_android (Screen *screen, Window window, Drawable drawable, void (*callback) (Screen *, Window, Drawable, const char *name, XRectangle *geom, void *closure), void *closure) { Display *dpy = DisplayOfScreen (screen); XWindowAttributes xgwa; XRectangle geom; char *name = 0; char *data = 0; int width = 0; int height = 0; if (!drawable) abort(); XGetWindowAttributes (dpy, window, &xgwa); { Window r; int x, y; unsigned int w, h, bbw, d; XGetGeometry (dpy, drawable, &r, &x, &y, &w, &h, &bbw, &d); xgwa.width = w; xgwa.height = h; } geom.x = 0; geom.y = 0; geom.width = xgwa.width; geom.height = xgwa.height; data = jwxyz_load_random_image (dpy, &width, &height, &name); if (! data) draw_colorbars (screen, xgwa.visual, drawable, xgwa.colormap, 0, 0, xgwa.width, xgwa.height); else { XImage *img = XCreateImage (dpy, xgwa.visual, 32, ZPixmap, 0, data, width, height, 0, 0); XGCValues gcv; GC gc; gcv.foreground = BlackPixelOfScreen (screen); gc = XCreateGC (dpy, drawable, GCForeground, &gcv); XFillRectangle (dpy, drawable, gc, 0, 0, xgwa.width, xgwa.height); XPutImage (dpy, drawable, gc, img, 0, 0, (xgwa.width - width) / 2, (xgwa.height - height) / 2, width, height); XDestroyImage (img); XFreeGC (dpy, gc); } callback (screen, window, drawable, name, &geom, closure); if (name) free (name); } #endif /* HAVE_ANDROID */ /* Writes the string "Loading..." in the middle of the screen. This will presumably get blown away when the image finally loads, minutes or hours later... This is called by load_image_async_simple() but not by load_image_async(), since it is assumed that hacks that are loading more than one image *at one time* will be doing something more clever than just blocking with a blank screen. */ static void print_loading_msg (Screen *screen, Window window) { Display *dpy = DisplayOfScreen (screen); XWindowAttributes xgwa; XGCValues gcv; XFontStruct *f = 0; GC gc; char *fn = get_string_resource (dpy, "labelFont", "Font"); const char *text = "Loading..."; int w; if (!fn) fn = get_string_resource (dpy, "titleFont", "Font"); if (!fn) fn = get_string_resource (dpy, "font", "Font"); if (!fn) fn = strdup ("-*-times-bold-r-normal-*-180-*"); f = XLoadQueryFont (dpy, fn); if (!f) f = XLoadQueryFont (dpy, "fixed"); if (!f) abort(); free (fn); fn = 0; XGetWindowAttributes (dpy, window, &xgwa); w = XTextWidth (f, text, (int) strlen(text)); gcv.foreground = get_pixel_resource (dpy, xgwa.colormap, "foreground", "Foreground"); gcv.background = get_pixel_resource (dpy, xgwa.colormap, "background", "Background"); gcv.font = f->fid; gc = XCreateGC (dpy, window, GCFont | GCForeground | GCBackground, &gcv); XDrawImageString (dpy, window, gc, (xgwa.width - w) / 2, (xgwa.height - (f->ascent + f->descent)) / 2 + f->ascent, text, (int) strlen(text)); XFreeFont (dpy, f); XFreeGC (dpy, gc); XSync (dpy, False); } /* Loads an image into the Drawable in the background; when the image is fully loaded, runs the callback. When grabbing desktop images, the Window will be unmapped first. */ void load_image_async (Screen *screen, Window window, Drawable drawable, void (*callback) (Screen *, Window, Drawable, const char *name, XRectangle *geom, void *closure), void *closure) { if (!callback) abort(); # if defined(HAVE_COCOA) load_random_image_cocoa (screen, window, drawable, callback, closure); # elif defined(HAVE_ANDROID) load_random_image_android (screen, window, drawable, callback, closure); # else /* real X11 */ load_random_image_x11 (screen, window, drawable, callback, closure); # endif } struct async_load_state { Bool done_p; char *filename; XRectangle geom; }; static void load_image_async_simple_cb (Screen *screen, Window window, Drawable drawable, const char *name, XRectangle *geom, void *closure) { async_load_state *state = (async_load_state *) closure; state->done_p = True; state->filename = (name ? strdup (name) : 0); state->geom = *geom; } async_load_state * load_image_async_simple (async_load_state *state, Screen *screen, Window window, Drawable drawable, char **filename_ret, XRectangle *geometry_ret) { if (state && state->done_p) /* done! */ { if (filename_ret) *filename_ret = state->filename; else if (state->filename) free (state->filename); if (geometry_ret) *geometry_ret = state->geom; free (state); return 0; } else if (! state) /* first time */ { state = (async_load_state *) calloc (1, sizeof(*state)); state->done_p = False; print_loading_msg (screen, window); load_image_async (screen, window, drawable, load_image_async_simple_cb, state); return state; } else /* still waiting */ return state; } xscreensaver-5.36/utils/hsv.c000644 000767 000024 00000004215 12701612232 016240 0ustar00jwzstaff000000 000000 /* xscreensaver, Copyright (c) 1992, 1997 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 file contains some utility routines for randomly picking the colors to hack the screen with. */ #include "utils.h" #include "hsv.h" void hsv_to_rgb (int h, double s, double v, unsigned short *r, unsigned short *g, unsigned short *b) { double H, S, V, R, G, B; double p1, p2, p3; double f; int i; if (s < 0) s = 0; if (v < 0) v = 0; if (s > 1) s = 1; if (v > 1) v = 1; S = s; V = v; H = (h % 360) / 60.0; i = H; f = H - i; p1 = V * (1 - S); p2 = V * (1 - (S * f)); p3 = V * (1 - (S * (1 - f))); if (i == 0) { R = V; G = p3; B = p1; } else if (i == 1) { R = p2; G = V; B = p1; } else if (i == 2) { R = p1; G = V; B = p3; } else if (i == 3) { R = p1; G = p2; B = V; } else if (i == 4) { R = p3; G = p1; B = V; } else { R = V; G = p1; B = p2; } *r = R * 65535; *g = G * 65535; *b = B * 65535; } void rgb_to_hsv (unsigned short r, unsigned short g, unsigned short b, int *h, double *s, double *v) { double R, G, B, H, S, V; double cmax, cmin; double cmm; int imax; R = ((double) r) / 65535.0; G = ((double) g) / 65535.0; B = ((double) b) / 65535.0; cmax = R; cmin = G; imax = 1; if ( cmax < G ) { cmax = G; cmin = R; imax = 2; } if ( cmax < B ) { cmax = B; imax = 3; } if ( cmin > B ) { cmin = B; } cmm = cmax - cmin; V = cmax; if (cmm == 0) S = H = 0; else { S = cmm / cmax; if (imax == 1) H = (G - B) / cmm; else if (imax == 2) H = 2.0 + (B - R) / cmm; else /*if (imax == 3)*/ H = 4.0 + (R - G) / cmm; if (H < 0) H += 6.0; } *h = (H * 60.0); *s = S; *v = V; } xscreensaver-5.36/utils/overlay.c000644 000767 000024 00000012321 12701612232 017116 0ustar00jwzstaff000000 000000 /* xscreensaver, Copyright (c) 1997, 2001, 2004 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. */ /* If the server's root window contains a SERVER_OVERLAY_VISUALS property, then that identifies the visuals which correspond to the video hardware's overlay planes. Windows created in these kinds of visuals have the property that one or more particular pixel values is transparent. Vendor support: SGI: - Supported on all systems since IRIX 4.0. - Their version of the Motif toolkit renders menus into the overlay visual, so that they don't cause exposure events on occluded windows. - 2 bit overlay plane with Indigo Entry graphics (e.g., Indy). - 8 bit overlay on O2 with Indigo 24 graphics or better (e.g., O2). HP: - Supported on workstations with CRX24 and CRX48Z graphics hardware. - 8 bit or 24 bit overlay plane. - The default visual is the overlay visual, with a transparent pixel. That way, all Xlib programs draw into the overlay plane, and no Xlib program causes exposures on occluded OpenGL windows. IBM: - Supported on some graphics hardware (which?) DEC: - Supported on some graphics hardware (which?) SUN: - Some systems apparently implement it VERRRRRRY SLOWLY, so drawing into the overlay plane is a performance killer (about as bad as using the SHAPE extension.) On my Indy, there are two transparent visuals, one of which is at layer 1, and one of which is at layer 2. This is apparently the ordering in which they are overlayed (1 being topmost.) The other difference between them is that the topmost one only has 2 planes, while the next one has 8. This code selects the topmost one, regardless of depth. Maybe that's not the right thing. Well, in XScreenSaver, we only need to allocate two colors from it (it's only used to display the stderr output, so that the text can overlay the graphics without being obliterated by it.) Documentation, such as it is, on SERVER_OVERLAY_VISUALS found on the web: http://www.hp.com/xwindow/sharedInfo/Whitepapers/Visuals/server_overlay_visuals.html http://www.xig.com/Pages/Ed-Overlays.html */ #include "utils.h" #include #include #include "visual.h" struct overlay_data { CARD32 visual_id; CARD32 transparency; /* 0: none; 1: pixel; 2: mask ("mask" means "any pixel with these bits set is a transparent pixel") */ CARD32 value; /* the transparent pixel or mask */ CARD32 layer; /* -1: underlay; 0: normal; 1: popup; 2: overlay */ }; static int get_overlay_prop (Screen *screen, struct overlay_data **data_ret) { int result; Atom actual_type; int actual_format; unsigned long nitems, bytes_after; unsigned char *data = 0; Display *dpy = DisplayOfScreen(screen); Window window = RootWindowOfScreen(screen); Atom XA_SERVER_OVERLAY_VISUALS = XInternAtom (dpy, "SERVER_OVERLAY_VISUALS", False); *data_ret = 0; result = XGetWindowProperty (dpy, window, XA_SERVER_OVERLAY_VISUALS, 0, (65536 / sizeof (long)), False, XA_SERVER_OVERLAY_VISUALS, &actual_type, &actual_format, &nitems, &bytes_after, &data); if (result != Success || actual_type != XA_SERVER_OVERLAY_VISUALS || actual_format != 32 || nitems < 1) { if (data) XFree(data); return 0; } else { struct overlay_data *d = (struct overlay_data *) data; *data_ret = d; return nitems / (sizeof(*d) / sizeof(CARD32)); } } Visual * get_overlay_visual (Screen *screen, unsigned long *transparent_pixel_ret) { struct overlay_data *data = 0; int n_visuals = get_overlay_prop (screen, &data); Visual *visual = 0; int depth = 0; unsigned long pixel = 0; unsigned int layer = 0; int i; if (data) for (i = 0; i < n_visuals; i++) /* Only accept ones that have a transparent pixel or mask. */ if (data[i].transparency == 1 || data[i].transparency == 2) { XVisualInfo vi_in, *vi_out; int out_count; vi_in.visualid = data[i].visual_id; vi_out = XGetVisualInfo (DisplayOfScreen(screen), VisualIDMask, &vi_in, &out_count); if (vi_out) { /* Prefer the one at the topmost layer; after that, prefer the one with the greatest depth (most colors.) */ if (layer < data[i].layer || (layer == data[i].layer && depth < vi_out[0].depth)) { visual = vi_out[0].visual; depth = vi_out[0].depth; layer = data[i].layer; pixel = data[i].value; } XFree(vi_out); } } if (data) XFree(data); if (visual && transparent_pixel_ret) *transparent_pixel_ret = pixel; return visual; } xscreensaver-5.36/utils/resources.c000664 000767 000024 00000017126 12701612232 017461 0ustar00jwzstaff000000 000000 /* xscreensaver, Copyright (c) 1992-2014 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. */ #include "utils.h" #include "resources.h" extern char *progname; #if !defined(HAVE_COCOA) && !defined(HAVE_ANDROID) #include /* These are the Xlib/Xrm versions of these functions. The Cocoa versions are on OSX/XScreenSaverView.m. */ extern char *progclass; extern XrmDatabase XtDatabase (Display *); static unsigned int get_time_resource (Display *dpy, char *res_name, char *res_class, Bool sec_p); #ifndef isupper # define isupper(c) ((c) >= 'A' && (c) <= 'Z') #endif #ifndef _tolower # define _tolower(c) ((c) - 'A' + 'a') #endif char * get_string_resource (Display *dpy, char *res_name, char *res_class) { XrmValue value; char *type; char full_name [1024], full_class [1024]; strcpy (full_name, progname); strcat (full_name, "."); strcat (full_name, res_name); strcpy (full_class, progclass); strcat (full_class, "."); strcat (full_class, res_class); if (XrmGetResource (XtDatabase (dpy), full_name, full_class, &type, &value)) { char *str = (char *) malloc (value.size + 1); strncpy (str, (char *) value.addr, value.size); str [value.size] = 0; return str; } return 0; } Bool get_boolean_resource (Display *dpy, char *res_name, char *res_class) { char *tmp, buf [100]; char *s = get_string_resource (dpy, res_name, res_class); char *os = s; if (! s) return 0; for (tmp = buf; *s; s++) *tmp++ = isupper (*s) ? _tolower (*s) : *s; *tmp = 0; free (os); while (*buf && (buf[strlen(buf)-1] == ' ' || buf[strlen(buf)-1] == '\t')) buf[strlen(buf)-1] = 0; if (!strcmp (buf, "on") || !strcmp (buf, "true") || !strcmp (buf, "yes")) return 1; if (!strcmp (buf,"off") || !strcmp (buf, "false") || !strcmp (buf,"no")) return 0; fprintf (stderr, "%s: %s must be boolean, not %s.\n", progname, res_name, buf); return 0; } int get_integer_resource (Display *dpy, char *res_name, char *res_class) { int val; char c, *s = get_string_resource (dpy, res_name, res_class); char *ss = s; if (!s) return 0; while (*ss && *ss <= ' ') ss++; /* skip whitespace */ if (ss[0] == '0' && (ss[1] == 'x' || ss[1] == 'X')) /* 0x: parse as hex */ { if (1 == sscanf (ss+2, "%x %c", (unsigned int *) &val, &c)) { free (s); return val; } } else /* else parse as dec */ { if (1 == sscanf (ss, "%d %c", &val, &c)) { free (s); return val; } } fprintf (stderr, "%s: %s must be an integer, not %s.\n", progname, res_name, s); free (s); return 0; } double get_float_resource (Display *dpy, char *res_name, char *res_class) { double val; char c, *s = get_string_resource (dpy, res_name, res_class); if (! s) return 0.0; if (1 == sscanf (s, " %lf %c", &val, &c)) { free (s); return val; } fprintf (stderr, "%s: %s must be a float, not %s.\n", progname, res_name, s); free (s); return 0.0; } #endif /* !HAVE_COCOA && !HAVE_ANDROID */ /* These functions are the same with Xlib, Cocoa and Android: */ unsigned int get_pixel_resource (Display *dpy, Colormap cmap, char *res_name, char *res_class) { XColor color; char *s = get_string_resource (dpy, res_name, res_class); char *s2; Bool ok = True; if (!s) goto DEFAULT; for (s2 = s + strlen(s) - 1; s2 > s; s2--) if (*s2 == ' ' || *s2 == '\t') *s2 = 0; else break; if (! XParseColor (dpy, cmap, s, &color)) { fprintf (stderr, "%s: can't parse color %s", progname, s); ok = False; goto DEFAULT; } if (! XAllocColor (dpy, cmap, &color)) { fprintf (stderr, "%s: couldn't allocate color %s", progname, s); ok = False; goto DEFAULT; } free (s); return (unsigned int) color.pixel; DEFAULT: if (s) free (s); { Bool black_p = (strlen(res_class) >= 10 && !strcasecmp ("Background", res_class + strlen(res_class) - 10)); if (!ok) fprintf (stderr, ": using %s.\n", (black_p ? "black" : "white")); color.flags = DoRed|DoGreen|DoBlue; color.red = color.green = color.blue = (black_p ? 0 : 0xFFFF); if (XAllocColor (dpy, cmap, &color)) return (unsigned int) color.pixel; else { fprintf (stderr, "%s: couldn't allocate %s either!\n", progname, (black_p ? "black" : "white")); /* We can't use BlackPixel/WhitePixel here, because we don't know what screen we're allocating on (only an issue when running inside the xscreensaver daemon: for hacks, DefaultScreen is fine.) */ return 0; } } } int parse_time (const char *string, Bool seconds_default_p, Bool silent_p) { unsigned int h, m, s; char c; if (3 == sscanf (string, " %u : %2u : %2u %c", &h, &m, &s, &c)) ; else if (2 == sscanf (string, " : %2u : %2u %c", &m, &s, &c) || 2 == sscanf (string, " %u : %2u %c", &m, &s, &c)) h = 0; else if (1 == sscanf (string, " : %2u %c", &s, &c)) h = m = 0; else if (1 == sscanf (string, " %u %c", (seconds_default_p ? &s : &m), &c)) { h = 0; if (seconds_default_p) m = 0; else s = 0; } else { if (! silent_p) fprintf (stderr, "%s: invalid time interval specification \"%s\".\n", progname, string); return -1; } if (s >= 60 && (h != 0 || m != 0)) { if (! silent_p) fprintf (stderr, "%s: seconds > 59 in \"%s\".\n", progname, string); return -1; } if (m >= 60 && h > 0) { if (! silent_p) fprintf (stderr, "%s: minutes > 59 in \"%s\".\n", progname, string); return -1; } return ((h * 60 * 60) + (m * 60) + s); } static unsigned int get_time_resource (Display *dpy, char *res_name, char *res_class, Bool sec_p) { int val; char *s = get_string_resource (dpy, res_name, res_class); if (!s) return 0; val = parse_time (s, sec_p, False); free (s); return (val < 0 ? 0 : val); } unsigned int get_seconds_resource (Display *dpy, char *res_name, char *res_class) { return get_time_resource (dpy, res_name, res_class, True); } unsigned int get_minutes_resource (Display *dpy, char *res_name, char *res_class) { return get_time_resource (dpy, res_name, res_class, False); } /* A utility function for event-handler functions: Returns True if the event is a simple click, Space, Tab, etc. Returns False otherwise. The idea here is that most hacks interpret to clicks or basic keypresses as "change it up". This isn't really the right file for this, but whatever. */ Bool screenhack_event_helper (Display *dpy, Window window, XEvent *event) { if (event->xany.type == KeyPress) { KeySym keysym; char c = 0; XLookupString (&event->xkey, &c, 1, &keysym, 0); if (c == ' ' || c == '\t' || c == '\r' || c == '\n' || keysym == XK_Left || keysym == XK_Right || keysym == XK_Up || keysym == XK_Down || keysym == XK_Prior || keysym == XK_Next) return True; } else if (event->xany.type == ButtonPress) { if (event->xbutton.button == 1) return True; } return False; } xscreensaver-5.36/utils/spline.c000644 000767 000024 00000022523 12701612232 016734 0ustar00jwzstaff000000 000000 /* * Copyright (c) 1987, 1988, 1989 Stanford University * * 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, and that the name of Stanford not be used in advertising or * publicity pertaining to distribution of the software without specific, * written prior permission. Stanford makes no representations about * the suitability of this software for any purpose. It is provided "as is" * without express or implied warranty. * * STANFORD DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. * IN NO EVENT SHALL STANFORD BE LIABLE FOR ANY SPECIAL, INDIRECT OR * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR * OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION * WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ /* This code came with the InterViews distribution, and was translated from C++ to C by Matthieu Devin some time in 1992. */ #include "utils.h" #include "spline.h" #define SMOOTHNESS 1.0 static void grow_spline_points (spline* s); static void mid_point (double x0, double y0, double x1, double y1, double *mx, double *my); static int can_approx_with_line (double x0, double y0, double x2, double y2, double x3, double y3); static void add_line (spline* s, double x0, double y0, double x1, double y1); static void add_bezier_arc (spline* s, double x0, double y0, double x1, double y1, double x2, double y2, double x3, double y3); static void third_point (double x0, double y0, double x1, double y1, double *tx, double *ty); static void calc_section (spline* s, double cminus1x, double cminus1y, double cx, double cy, double cplus1x, double cplus1y, double cplus2x, double cplus2y); spline* make_spline (unsigned int size) { spline* s = (spline*)calloc (1, sizeof (spline)); if (!s) abort(); s->n_controls = size; s->control_x = (double*)calloc (s->n_controls, sizeof (double)); s->control_y = (double*)calloc (s->n_controls, sizeof (double)); s->n_points = 0; s->allocated_points = s->n_controls; s->points = (XPoint*)calloc (s->allocated_points, sizeof (XPoint)); if (!s->control_x || !s->control_y || !s->points) abort(); return s; } static void grow_spline_points (spline *s) { s->allocated_points = 10 + (s->allocated_points * 1.3); s->points = (XPoint*)realloc (s->points, s->allocated_points * sizeof (XPoint)); if (!s->points) abort(); } static void mid_point (double x0, double y0, double x1, double y1, double *mx, double *my) { *mx = (x0 + x1) / 2.0; *my = (y0 + y1) / 2.0; } static void third_point (double x0, double y0, double x1, double y1, double *tx, double *ty) { *tx = (2 * x0 + x1) / 3.0; *ty = (2 * y0 + y1) / 3.0; } static int can_approx_with_line (double x0, double y0, double x2, double y2, double x3, double y3) { double triangle_area, side_squared, dx, dy; triangle_area = x0 * y2 - x2 * y0 + x2 * y3 - x3 * y2 + x3 * y0 - x0 * y3; /* actually 4 times the area. */ triangle_area *= triangle_area; dx = x3 - x0; dy = y3 - y0; side_squared = dx * dx + dy * dy; return triangle_area <= SMOOTHNESS * side_squared; } static void add_line (spline *s, double x0, double y0, double x1, double y1) { if (s->n_points >= s->allocated_points) grow_spline_points (s); if (s->n_points == 0) { s->points [s->n_points].x = x0; s->points [s->n_points].y = y0; s->n_points += 1; } s->points [s->n_points].x = x1; s->points [s->n_points].y = y1; s->n_points += 1; } static void add_bezier_arc (spline *s, double x0, double y0, double x1, double y1, double x2, double y2, double x3, double y3) { double midx01, midx12, midx23, midlsegx, midrsegx, cx, midy01, midy12, midy23, midlsegy, midrsegy, cy; mid_point (x0, y0, x1, y1, &midx01, &midy01); mid_point (x1, y1, x2, y2, &midx12, &midy12); mid_point (x2, y2, x3, y3, &midx23, &midy23); mid_point (midx01, midy01, midx12, midy12, &midlsegx, &midlsegy); mid_point (midx12, midy12, midx23, midy23, &midrsegx, &midrsegy); mid_point (midlsegx, midlsegy, midrsegx, midrsegy, &cx, &cy); if (can_approx_with_line (x0, y0, midlsegx, midlsegy, cx, cy)) add_line (s, x0, y0, cx, cy); else if ((midx01 != x1) || (midy01 != y1) || (midlsegx != x2) || (midlsegy != y2) || (cx != x3) || (cy != y3)) add_bezier_arc (s, x0, y0, midx01, midy01, midlsegx, midlsegy, cx, cy); if (can_approx_with_line (cx, cy, midx23, midy23, x3, y3)) add_line (s, cx, cy, x3, y3); else if ((cx != x0) || (cy != y0) || (midrsegx != x1) || (midrsegy != y1) || (midx23 != x2) || (midy23 != y2)) add_bezier_arc (s, cx, cy, midrsegx, midrsegy, midx23, midy23, x3, y3); } static void calc_section (spline *s, double cminus1x, double cminus1y, double cx, double cy, double cplus1x, double cplus1y, double cplus2x, double cplus2y) { double p0x, p1x, p2x, p3x, tempx, p0y, p1y, p2y, p3y, tempy; third_point (cx, cy, cplus1x, cplus1y, &p1x, &p1y); third_point (cplus1x, cplus1y, cx, cy, &p2x, &p2y); third_point (cx, cy, cminus1x, cminus1y, &tempx, &tempy); mid_point (tempx, tempy, p1x, p1y, &p0x, &p0y); third_point (cplus1x, cplus1y, cplus2x, cplus2y, &tempx, &tempy); mid_point (tempx, tempy, p2x, p2y, &p3x, &p3y); add_bezier_arc (s, p0x, p0y, p1x, p1y, p2x, p2y, p3x, p3y); } void compute_spline (spline *s) { int i; s->n_points = 0; if (s->n_controls < 3) return; calc_section (s, s->control_x [0], s->control_y [0], s->control_x [0], s->control_y [0], s->control_x [0], s->control_y [0], s->control_x [1], s->control_y [1]); calc_section (s, s->control_x [0], s->control_y [0], s->control_x [0], s->control_y [0], s->control_x [1], s->control_y [1], s->control_x [2], s->control_y [2]); for (i = 1; i < s->n_controls - 2; i++) calc_section (s, s->control_x [i - 1], s->control_y [i - 1], s->control_x [i], s->control_y [i], s->control_x [i + 1], s->control_y [i + 1], s->control_x [i + 2], s->control_y [i + 2]); calc_section (s, s->control_x [i - 1], s->control_y [i - 1], s->control_x [i], s->control_y [i], s->control_x [i + 1], s->control_y [i + 1], s->control_x [i + 1], s->control_y [i + 1]); calc_section (s, s->control_x [i], s->control_y [i], s->control_x [i + 1], s->control_y [i + 1], s->control_x [i + 1], s->control_y [i + 1], s->control_x [i + 1], s->control_y [i + 1]); } void compute_closed_spline (spline *s) { int i; s->n_points = 0; if (s->n_controls < 3) return; calc_section (s, s->control_x [s->n_controls - 1], s->control_y [s->n_controls - 1], s->control_x [0], s->control_y [0], s->control_x [1], s->control_y [1], s->control_x [2], s->control_y [2]); for (i = 1; i < s->n_controls - 2; i++) calc_section (s, s->control_x [i - 1], s->control_y [i - 1], s->control_x [i], s->control_y [i], s->control_x [i + 1], s->control_y [i + 1], s->control_x [i + 2], s->control_y [i + 2]); calc_section (s, s->control_x [i - 1], s->control_y [i - 1], s->control_x [i], s->control_y [i], s->control_x [i + 1], s->control_y [i + 1], s->control_x [0], s->control_y [0]); calc_section (s, s->control_x [i], s->control_y [i], s->control_x [i + 1], s->control_y [i + 1], s->control_x [0], s->control_y [0], s->control_x [1], s->control_y [1]); } void just_fill_spline (spline *s) { int i; while (s->allocated_points < s->n_controls + 1) grow_spline_points (s); for (i = 0; i < s->n_controls; i++) { s->points [i].x = s->control_x [i]; s->points [i].y = s->control_y [i]; } s->points [s->n_controls].x = s->control_x [0]; s->points [s->n_controls].y = s->control_y [0]; s->n_points = s->n_controls + 1; } void append_spline_points (spline *s1, spline *s2) { int i; while (s1->allocated_points < s1->n_points + s2->n_points) grow_spline_points (s1); for (i = s1->n_points; i < s1->n_points + s2->n_points; i++) { s1->points [i].x = s2->points [i - s1->n_points].x; s1->points [i].y = s2->points [i - s1->n_points].y; } s1->n_points = s1->n_points + s2->n_points; } void spline_bounding_box (spline *s, XRectangle *rectangle_out) { int min_x; int max_x; int min_y; int max_y; int i; if (s->n_points == 0) { rectangle_out->x = 0; rectangle_out->y = 0; rectangle_out->width = 0; rectangle_out->height = 0; } min_x = s->points [0].x; max_x = min_x; min_y = s->points [0].y; max_y = min_y; for (i = 1; i < s->n_points; i++) { if (s->points [i].x < min_x) min_x = s->points [i].x; if (s->points [i].x > max_x) max_x = s->points [i].x; if (s->points [i].y < min_y) min_y = s->points [i].y; if (s->points [i].y > max_y) max_y = s->points [i].y; } rectangle_out->x = min_x; rectangle_out->y = min_y; rectangle_out->width = max_x - min_x; rectangle_out->height = max_y - min_y; } void free_spline(spline * s) { free ((void *) s->control_x); free ((void *) s->control_y); free ((void *) s->points); free ((void *) s); } xscreensaver-5.36/utils/usleep.c000644 000767 000024 00000003263 12701612232 016737 0ustar00jwzstaff000000 000000 /* xscreensaver, Copyright (c) 1992, 1996, 1997, 2003 * 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. */ #ifdef HAVE_CONFIG_H # include "config.h" #else /* !HAVE_CONFIG_H */ # ifndef NO_SELECT # define HAVE_SELECT # endif #endif /* !HAVE_CONFIG_H */ #ifdef __STDC__ # include #endif #ifdef HAVE_UNISTD_H # include #endif #if defined(VMS) # include # include # include #elif defined(HAVE_SELECT) # include /* for struct timeval */ #endif #ifdef __SCREENHACK_USLEEP_H__ ERROR, do not include that here #endif extern void screenhack_usleep (unsigned long usecs); /* suppress warning */ void screenhack_usleep (unsigned long usecs) { # if defined(VMS) float seconds = ((float) usecs)/1000000.0; unsigned long int statvms = lib$wait(&seconds); #elif defined(HAVE_SELECT) /* usleep() doesn't exist everywhere, and select() is faster anyway. */ struct timeval tv; tv.tv_sec = usecs / 1000000L; tv.tv_usec = usecs % 1000000L; (void) select (0, 0, 0, 0, &tv); #else /* !VMS && !HAVE_SELECT */ /* If you don't have select() or usleep(), I guess you lose... Maybe you have napms() instead? Let me know. */ usleep (usecs); #endif /* !VMS && !HAVE_SELECT */ } xscreensaver-5.36/utils/visual.c000644 000767 000024 00000041402 12701612233 016743 0ustar00jwzstaff000000 000000 /* xscreensaver, Copyright (c) 1993-2014 by 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 file contains some code for intelligently picking the best visual (where "best" is biased in the direction of either: high color counts; or: having writable color cells...) */ #include "utils.h" #include "resources.h" /* for get_string_resource() */ #include "visual.h" #include #ifndef HAVE_ANDROID #include #else #include "../android/android-visual.h" #endif extern char *progname; #ifndef isupper # define isupper(c) ((c) >= 'A' && (c) <= 'Z') #endif #ifndef _tolower # define _tolower(c) ((c) - 'A' + 'a') #endif static Visual *pick_best_visual (Screen *, Bool, Bool); static Visual *pick_mono_visual (Screen *); static Visual *pick_best_visual_of_class (Screen *, int); static Visual *pick_best_gl_visual (Screen *); #define DEFAULT_VISUAL -1 #define BEST_VISUAL -2 #define MONO_VISUAL -3 #define GRAY_VISUAL -4 #define COLOR_VISUAL -5 #define GL_VISUAL -6 #define SPECIFIC_VISUAL -7 Visual * get_visual (Screen *screen, const char *string, Bool prefer_writable_cells, Bool verbose_p) { char *v = (string ? strdup(string) : 0); char c, *tmp; int vclass; unsigned long id; Visual *result = 0; if (v) for (tmp = v; *tmp; tmp++) if (isupper (*tmp)) *tmp = _tolower (*tmp); if (!v || !*v) vclass = BEST_VISUAL; else if (!strcmp (v, "default")) vclass = DEFAULT_VISUAL; else if (!strcmp (v, "best")) vclass = BEST_VISUAL; else if (!strcmp (v, "mono")) vclass = MONO_VISUAL; else if (!strcmp (v, "monochrome")) vclass = MONO_VISUAL; else if (!strcmp (v, "gray")) vclass = GRAY_VISUAL; else if (!strcmp (v, "grey")) vclass = GRAY_VISUAL; else if (!strcmp (v, "color")) vclass = COLOR_VISUAL; else if (!strcmp (v, "gl")) vclass = GL_VISUAL; else if (!strcmp (v, "staticgray")) vclass = StaticGray; else if (!strcmp (v, "staticcolor")) vclass = StaticColor; else if (!strcmp (v, "truecolor")) vclass = TrueColor; else if (!strcmp (v, "grayscale")) vclass = GrayScale; else if (!strcmp (v, "greyscale")) vclass = GrayScale; else if (!strcmp (v, "pseudocolor")) vclass = PseudoColor; else if (!strcmp (v, "directcolor")) vclass = DirectColor; else if (1 == sscanf (v, " %lu %c", &id, &c)) vclass = SPECIFIC_VISUAL; else if (1 == sscanf (v, " 0x%lx %c", &id, &c)) vclass = SPECIFIC_VISUAL; else { fprintf (stderr, "%s: unrecognized visual \"%s\".\n", progname, v); vclass = DEFAULT_VISUAL; } if (vclass == DEFAULT_VISUAL) result = DefaultVisualOfScreen (screen); else if (vclass == BEST_VISUAL) result = pick_best_visual (screen, prefer_writable_cells, False); else if (vclass == MONO_VISUAL) { result = pick_mono_visual (screen); if (!result && verbose_p) fprintf (stderr, "%s: no monochrome visuals.\n", progname); } else if (vclass == GRAY_VISUAL) { if (prefer_writable_cells) result = pick_best_visual_of_class (screen, GrayScale); if (!result) result = pick_best_visual_of_class (screen, StaticGray); if (!result) result = pick_best_visual_of_class (screen, GrayScale); if (!result && verbose_p) fprintf (stderr, "%s: no GrayScale or StaticGray visuals.\n", progname); } else if (vclass == COLOR_VISUAL) { int class; /* First see if the default visual will do. */ result = DefaultVisualOfScreen (screen); class = visual_class(screen, result); if (class != TrueColor && class != PseudoColor && class != DirectColor && class != StaticColor) result = 0; if (result && visual_depth(screen, result) <= 1) result = 0; /* Else, find the best non-default color visual */ if (!result) result = pick_best_visual (screen, prefer_writable_cells, True); if (!result && verbose_p) fprintf (stderr, "%s: no color visuals.\n", progname); } else if (vclass == GL_VISUAL) { Visual *visual = pick_best_gl_visual (screen); if (visual) result = visual; else if (verbose_p) fprintf (stderr, "%s: no visual suitable for GL.\n", progname); } else if (vclass == SPECIFIC_VISUAL) { result = id_to_visual (screen, id); if (!result && verbose_p) fprintf (stderr, "%s: no visual with id 0x%x.\n", progname, (unsigned int) id); } else { Visual *visual = pick_best_visual_of_class (screen, vclass); if (visual) result = visual; else if (verbose_p) fprintf (stderr, "%s: no visual of class %s.\n", progname, v); } if (v) free (v); return result; } Visual * get_visual_resource (Screen *screen, char *name, char *class, Bool prefer_writable_cells) { char *string = get_string_resource (DisplayOfScreen (screen), name, class); Visual *v = get_visual (screen, string, prefer_writable_cells, True); if (string) free(string); if (v) return v; else return DefaultVisualOfScreen (screen); } static Visual * pick_best_visual (Screen *screen, Bool prefer_writable_cells, Bool color_only) { Visual *visual; if (!prefer_writable_cells) { /* If we don't prefer writable cells, then the "best" visual is the one on which we can allocate the largest range and number of colors. Therefore, a TrueColor visual which is at least 16 bits deep is best. (The assumption here being that a TrueColor of less than 16 bits is really just a PseudoColor visual with a pre-allocated color cube.) The next best thing is a PseudoColor visual of any type. After that come the non-colormappable visuals, and non-color visuals. */ if ((visual = pick_best_visual_of_class (screen, TrueColor)) && visual_depth (screen, visual) >= 16) return visual; } #define TRY_CLASS(CLASS) \ if ((visual = pick_best_visual_of_class (screen, CLASS)) && \ (!color_only || visual_depth(screen, visual) > 1)) \ return visual TRY_CLASS(PseudoColor); TRY_CLASS(TrueColor); TRY_CLASS(DirectColor); TRY_CLASS(StaticColor); if (!color_only) { TRY_CLASS(GrayScale); TRY_CLASS(StaticGray); } #undef TRY_CLASS visual = DefaultVisualOfScreen (screen); if (!color_only || visual_depth(screen, visual) > 1) return visual; else return 0; } static Visual * pick_mono_visual (Screen *screen) { Display *dpy = DisplayOfScreen (screen); XVisualInfo vi_in, *vi_out; int out_count; vi_in.depth = 1; vi_in.screen = screen_number (screen); vi_out = XGetVisualInfo (dpy, (VisualDepthMask | VisualScreenMask), &vi_in, &out_count); if (vi_out) { Visual *v = (out_count > 0 ? vi_out [0].visual : 0); if (v && vi_out[0].depth != 1) v = 0; XFree ((char *) vi_out); return v; } else return 0; } static Visual * pick_best_visual_of_class (Screen *screen, int visual_class) { /* The best visual of a class is the one which on which we can allocate the largest range and number of colors, which means the one with the greatest depth and number of cells. (But actually, for XDaliClock, all visuals of the same class are probably equivalent - either we have writable cells or we don't.) */ Display *dpy = DisplayOfScreen (screen); XVisualInfo vi_in, *vi_out; int out_count; vi_in.class = visual_class; vi_in.screen = screen_number (screen); vi_out = XGetVisualInfo (dpy, (VisualClassMask | VisualScreenMask), &vi_in, &out_count); if (vi_out) { /* choose the 'best' one, if multiple */ int i, best; Visual *visual; /* for (i = 0, best = 0; i < out_count; i++) */ for (i = out_count-1, best = i; i >= 0; i--) /* go backwards */ /* It's better if it's deeper, or if it's the same depth with more cells (does that ever happen? Well, it could...) */ if ((vi_out [i].depth > vi_out [best].depth) || ((vi_out [i].depth == vi_out [best].depth) && (vi_out [i].colormap_size > vi_out [best].colormap_size))) best = i; visual = (best < out_count ? vi_out [best].visual : 0); XFree ((char *) vi_out); return visual; } else return 0; } static Visual * pick_best_gl_visual (Screen *screen) { /* The best visual for GL is a TrueColor visual that is half as deep as the screen. If such a thing doesn't exist, then TrueColor is best. Failing that, the deepest available color visual is best. Compare this function to get_gl_visual() in visual-gl.c. This function tries to find the best GL visual using Xlib calls, whereas that function does the same thing using GLX calls. */ Display *dpy = DisplayOfScreen (screen); XVisualInfo vi_in, *vi_out; int out_count; Visual *result = 0; int ndepths = 0; int *depths = XListDepths (dpy, screen_number (screen), &ndepths); int screen_depth = (depths && ndepths) ? depths[ndepths - 1] : 0; XFree (depths); vi_in.class = TrueColor; vi_in.screen = screen_number (screen); vi_in.depth = screen_depth / 2; vi_out = XGetVisualInfo (dpy, (VisualClassMask | VisualScreenMask | VisualDepthMask), &vi_in, &out_count); if (out_count > 0) result = vi_out[0].visual; if (vi_out) XFree ((char *) vi_out); if (!result && screen_depth > 24) { /* If it's a 32-deep screen and we didn't find a depth-16 visual, see if there's a depth-12 visual. */ vi_in.class = TrueColor; vi_in.screen = screen_number (screen); vi_in.depth = 12; vi_out = XGetVisualInfo (dpy, (VisualClassMask | VisualScreenMask | VisualDepthMask), &vi_in, &out_count); if (out_count > 0) result = vi_out[0].visual; } if (!result) /* No half-depth TrueColor? Ok, try for any TrueColor (the deepest.) */ result = pick_best_visual_of_class (screen, TrueColor); if (!result) /* No TrueColor? Ok, try for anything. */ result = pick_best_visual (screen, False, False); return result; } Visual * id_to_visual (Screen *screen, int id) { Display *dpy = DisplayOfScreen (screen); XVisualInfo vi_in, *vi_out; int out_count; vi_in.screen = screen_number (screen); vi_in.visualid = id; vi_out = XGetVisualInfo (dpy, (VisualScreenMask | VisualIDMask), &vi_in, &out_count); if (vi_out) { Visual *v = vi_out[0].visual; XFree ((char *) vi_out); return v; } return 0; } int visual_depth (Screen *screen, Visual *visual) { Display *dpy = DisplayOfScreen (screen); XVisualInfo vi_in, *vi_out; int out_count, d; vi_in.screen = screen_number (screen); vi_in.visualid = XVisualIDFromVisual (visual); vi_out = XGetVisualInfo (dpy, VisualScreenMask|VisualIDMask, &vi_in, &out_count); if (! vi_out) abort (); d = vi_out [0].depth; XFree ((char *) vi_out); return d; } #if 0 /* You very probably don't want to be using this. Pixmap depth doesn't refer to the depths of pixmaps, but rather, to the depth of protocol-level on-the-wire pixmap data, that is, XImages. To get this info, you should be looking at XImage->bits_per_pixel instead. (And allocating the data for your XImage structures by multiplying ximage->bytes_per_line by ximage->height.) */ int visual_pixmap_depth (Screen *screen, Visual *visual) { Display *dpy = DisplayOfScreen (screen); int vdepth = visual_depth (screen, visual); int pdepth = vdepth; int i, pfvc = 0; XPixmapFormatValues *pfv = XListPixmapFormats (dpy, &pfvc); /* Return the first matching depth in the pixmap formats. If there are no matching pixmap formats (which shouldn't be able to happen at all) then return the visual depth instead. */ for (i = 0; i < pfvc; i++) if (pfv[i].depth == vdepth) { pdepth = pfv[i].bits_per_pixel; break; } if (pfv) XFree (pfv); return pdepth; } #endif /* 0 */ int visual_class (Screen *screen, Visual *visual) { Display *dpy = DisplayOfScreen (screen); XVisualInfo vi_in, *vi_out; int out_count, c; vi_in.screen = screen_number (screen); vi_in.visualid = XVisualIDFromVisual (visual); vi_out = XGetVisualInfo (dpy, VisualScreenMask|VisualIDMask, &vi_in, &out_count); if (! vi_out) abort (); c = vi_out [0].class; XFree ((char *) vi_out); return c; } Bool has_writable_cells (Screen *screen, Visual *visual) { switch (visual_class (screen, visual)) { case GrayScale: /* Mappable grays. */ case PseudoColor: /* Mappable colors. */ case DirectColor: /* Like TrueColor, but with three colormaps: one each for red, green, and blue. */ return True; case StaticGray: /* Fixed grays. */ case TrueColor: /* Fixed colors. */ case StaticColor: /* Like PseudoColor with an unmodifiable colormap. */ return False; default: abort(); return False; } } void describe_visual (FILE *f, Screen *screen, Visual *visual, Bool private_cmap_p) { char n[10]; Display *dpy = DisplayOfScreen (screen); XVisualInfo vi_in, *vi_out; int out_count; vi_in.screen = screen_number (screen); vi_in.visualid = XVisualIDFromVisual (visual); vi_out = XGetVisualInfo (dpy, (VisualScreenMask | VisualIDMask), &vi_in, &out_count); if (! vi_out) abort (); if (private_cmap_p) sprintf(n, "%3d", vi_out->colormap_size); else strcpy(n, "default"); fprintf (f, "0x%02x (%s depth: %2d, cmap: %s)\n", (unsigned int) vi_out->visualid, (vi_out->class == StaticGray ? "StaticGray, " : vi_out->class == StaticColor ? "StaticColor," : vi_out->class == TrueColor ? "TrueColor, " : vi_out->class == GrayScale ? "GrayScale, " : vi_out->class == PseudoColor ? "PseudoColor," : vi_out->class == DirectColor ? "DirectColor," : "UNKNOWN: "), vi_out->depth, n); XFree ((char *) vi_out); } int screen_number (Screen *screen) { Display *dpy = DisplayOfScreen (screen); int i; for (i = 0; i < ScreenCount (dpy); i++) if (ScreenOfDisplay (dpy, i) == screen) return i; abort (); return 0; } int visual_cells (Screen *screen, Visual *visual) { Display *dpy = DisplayOfScreen (screen); XVisualInfo vi_in, *vi_out; int out_count, c; vi_in.screen = screen_number (screen); vi_in.visualid = XVisualIDFromVisual (visual); vi_out = XGetVisualInfo (dpy, VisualScreenMask|VisualIDMask, &vi_in, &out_count); if (! vi_out) abort (); c = vi_out [0].colormap_size; XFree ((char *) vi_out); return c; } Visual * find_similar_visual(Screen *screen, Visual *old_visual) { Display *dpy = DisplayOfScreen (screen); XVisualInfo vi_in, *vi_out; Visual *result = 0; int out_count; vi_in.screen = screen_number (screen); vi_in.class = visual_class (screen, old_visual); vi_in.depth = visual_depth (screen, old_visual); /* Look for a visual of the same class and depth. */ vi_out = XGetVisualInfo (dpy, (VisualScreenMask | VisualClassMask | VisualDepthMask), &vi_in, &out_count); if (vi_out && out_count > 0) result = vi_out[0].visual; if (vi_out) XFree (vi_out); vi_out = 0; /* Failing that, look for a visual of the same class. */ if (!result) { vi_out = XGetVisualInfo (dpy, (VisualScreenMask | VisualClassMask), &vi_in, &out_count); if (vi_out && out_count > 0) result = vi_out[0].visual; if (vi_out) XFree (vi_out); vi_out = 0; } /* Failing that, return the default visual. */ if (!result) result = DefaultVisualOfScreen (screen); return result; } int get_bits_per_pixel(Display *dpy, int depth) { unsigned i = 0; int count, result; XPixmapFormatValues *formats = XListPixmapFormats(dpy, &count); /* XCreateImage calls _XGetBitsPerPixel to figure this out, but that function is private to Xlib. For some reason, _XGetBitsPerPixel tries a hard-coded list of depths if it doesn't find a matching pixmap format, but I (Dave Odell) couldn't find any justification for this in the X11 spec. And the XFree86 CVS repository doesn't quite go back far enough to shed any light on what the deal is with that. http://cvsweb.xfree86.org/cvsweb/xc/lib/X11/ImUtil.c The hard-coded list apparently was added between X11R5 and X11R6. See . */ if (!formats) return 0; for (;;) { if (i == (unsigned)count) { result = 0; break; } if (formats[i].depth == depth) { result = formats[i].bits_per_pixel; break; } ++i; } XFree (formats); return result; } xscreensaver-5.36/utils/visual-gl.c000644 000767 000024 00000024615 12701612232 017351 0ustar00jwzstaff000000 000000 /* xscreensaver, Copyright (c) 1999-2011 by 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 file contains code for picking the best visual for GL programs by actually asking the GL library to figure it out for us. The code in visual.c might do a good job of this on most systems, but not on most high end 3D cards (e.g., Silicon Graphics or nVidia.) There exists information about visuals which is available to GL, but which is not available via Xlib calls. So the only way to know which visual to use (other than impirically) is to actually call glXChooseVisual(). */ #include "utils.h" #include "visual.h" #include "resources.h" #ifdef HAVE_GL # include # include #endif /* HAVE_GL */ extern char *progname; Visual * get_gl_visual (Screen *screen) { #ifdef HAVE_GL Display *dpy = DisplayOfScreen (screen); int screen_num = screen_number (screen); # define R GLX_RED_SIZE # define G GLX_GREEN_SIZE # define B GLX_BLUE_SIZE # define A GLX_ALPHA_SIZE # define D GLX_DEPTH_SIZE # define I GLX_BUFFER_SIZE # define DB GLX_DOUBLEBUFFER # define ST GLX_STENCIL_SIZE # if defined(GL_SAMPLE_BUFFERS) # define SB GL_SAMPLE_BUFFERS # define SM GL_SAMPLES # elif defined(GLX_SAMPLE_BUFFERS) # define SB GLX_SAMPLE_BUFFERS # define SM GLX_SAMPLES # elif defined(GLX_SAMPLE_BUFFERS_ARB) # define SB GLX_SAMPLE_BUFFERS_ARB # define SM GLX_SAMPLES_ARB # elif defined(GLX_SAMPLE_BUFFERS_SGIS) # define SB GLX_SAMPLE_BUFFERS_SGIS # define SM GLX_SAMPLES_SGIS # endif int attrs[][40] = { # ifdef SB /* rgba double stencil multisample */ { GLX_RGBA, R,8, G,8, B,8, A,8, D,8, DB, ST,1, SB,1, SM,8, 0 }, { GLX_RGBA, R,8, G,8, B,8, A,8, D,8, DB, ST,1, SB,1, SM,6, 0 }, { GLX_RGBA, R,8, G,8, B,8, A,8, D,8, DB, ST,1, SB,1, SM,4, 0 }, { GLX_RGBA, R,8, G,8, B,8, A,8, D,8, DB, ST,1, SB,1, SM,2, 0 }, # define SB_COUNT 4 /* #### Kludgey count of preceeding lines! */ # endif { GLX_RGBA, R,8, G,8, B,8, A,8, D,8, DB, ST,1, 0 }, /* rgba double stencil */ { GLX_RGBA, R,8, G,8, B,8, D,8, DB, ST,1, 0 }, /* rgb double stencil */ { GLX_RGBA, R,4, G,4, B,4, D,4, DB, ST,1, 0 }, { GLX_RGBA, R,2, G,2, B,2, D,2, DB, ST,1, 0 }, { GLX_RGBA, R,8, G,8, B,8, A,8, D,8, DB, 0 }, /* rgba double */ { GLX_RGBA, R,8, G,8, B,8, D,8, DB, 0 }, /* rgb double */ { GLX_RGBA, R,4, G,4, B,4, D,4, DB, 0 }, { GLX_RGBA, R,2, G,2, B,2, D,2, DB, 0 }, { GLX_RGBA, R,8, G,8, B,8, A,8, D,8, 0 }, /* rgba single */ { GLX_RGBA, R,8, G,8, B,8, D,8, 0 }, /* rgb single */ { GLX_RGBA, R,4, G,4, B,4, D,4, 0 }, { GLX_RGBA, R,2, G,2, B,2, D,2, 0 }, { I, 8, D,8, DB, 0 }, /* cmap double */ { I, 4, D,4, DB, 0 }, { I, 8, D,8, 0 }, /* cmap single */ { I, 4, D,4, 0 }, { GLX_RGBA, R,1, G,1, B,1, D,1, 0 } /* monochrome */ }; int i = 0; # ifdef SB if (! get_boolean_resource (dpy, "multiSample", "MultiSample")) i = SB_COUNT; /* skip over the multibuffer entries in 'attrs' */ # endif /* SB */ for (; i < sizeof(attrs)/sizeof(*attrs); i++) { XVisualInfo *vi = glXChooseVisual (dpy, screen_num, attrs[i]); if (vi) { Visual *v = vi->visual; XFree (vi); /* describe_gl_visual (stderr, screen, v, False); */ return v; } } #endif /* !HAVE_GL */ return 0; } void describe_gl_visual (FILE *f, Screen *screen, Visual *visual, Bool private_cmap_p) { describe_visual (f, screen, visual, private_cmap_p); #ifdef HAVE_GL { int status; int value = False; Display *dpy = DisplayOfScreen (screen); XVisualInfo vi_in, *vi_out; int out_count; vi_in.screen = screen_number (screen); vi_in.visualid = XVisualIDFromVisual (visual); vi_out = XGetVisualInfo (dpy, (VisualScreenMask | VisualIDMask), &vi_in, &out_count); if (! vi_out) abort (); status = glXGetConfig (dpy, vi_out, GLX_USE_GL, &value); if (status == GLX_NO_EXTENSION) /* dpy does not support the GLX extension. */ return; if (status == GLX_BAD_VISUAL || value == False) /* this visual does not support GLX. */ return; if (!glXGetConfig (dpy, vi_out, GLX_LEVEL, &value) && value != 0) printf (" GLX level: %d\n", value); if (!glXGetConfig (dpy, vi_out, GLX_RGBA, &value) && value) { int r=0, g=0, b=0, a=0; glXGetConfig (dpy, vi_out, GLX_RED_SIZE, &r); glXGetConfig (dpy, vi_out, GLX_GREEN_SIZE, &g); glXGetConfig (dpy, vi_out, GLX_BLUE_SIZE, &b); glXGetConfig (dpy, vi_out, GLX_ALPHA_SIZE, &a); printf (" GLX type: RGBA (%2d, %2d, %2d, %2d)\n", r, g, b, a); r=0, g=0, b=0, a=0; glXGetConfig (dpy, vi_out, GLX_ACCUM_RED_SIZE, &r); glXGetConfig (dpy, vi_out, GLX_ACCUM_GREEN_SIZE, &g); glXGetConfig (dpy, vi_out, GLX_ACCUM_BLUE_SIZE, &b); glXGetConfig (dpy, vi_out, GLX_ACCUM_ALPHA_SIZE, &a); printf (" GLX accum: RGBA (%2d, %2d, %2d, %2d)\n", r, g, b, a); } else { value = 0; glXGetConfig (dpy, vi_out, GLX_BUFFER_SIZE, &value); printf (" GLX type: indexed (%d)\n", value); } # ifndef GLX_NONE_EXT /* Hooray for gratuitious name changes. */ # define GLX_NONE_EXT GLX_NONE # define GLX_TRANSPARENT_TYPE_EXT GLX_TRANSPARENT_TYPE # define GLX_TRANSPARENT_INDEX_EXT GLX_TRANSPARENT_INDEX # define GLX_TRANSPARENT_INDEX_VALUE_EXT GLX_TRANSPARENT_INDEX_VALUE # define GLX_TRANSPARENT_RGB_EXT GLX_TRANSPARENT_RGB # define GLX_TRANSPARENT_RED_VALUE_EXT GLX_TRANSPARENT_RED_VALUE # define GLX_TRANSPARENT_GREEN_VALUE_EXT GLX_TRANSPARENT_GREEN_VALUE # define GLX_TRANSPARENT_BLUE_VALUE_EXT GLX_TRANSPARENT_BLUE_VALUE # define GLX_TRANSPARENT_ALPHA_VALUE_EXT GLX_TRANSPARENT_ALPHA_VALUE # endif # ifdef GLX_VISUAL_CAVEAT_EXT if (!glXGetConfig (dpy, vi_out, GLX_VISUAL_CAVEAT_EXT, &value) && value != GLX_NONE_EXT) # ifdef GLX_NON_CONFORMANT_EXT printf (" GLX rating: %s\n", (value == GLX_NONE_EXT ? "none" : value == GLX_SLOW_VISUAL_EXT ? "slow" : value == GLX_NON_CONFORMANT_EXT ? "non-conformant" : "???")); # else printf (" GLX rating: %s\n", (value == GLX_NONE_EXT ? "none" : value == GLX_SLOW_VISUAL_EXT ? "slow" : "???")); # endif /* GLX_NON_CONFORMANT_EXT */ # endif /* GLX_VISUAL_CAVEAT_EXT */ if (!glXGetConfig (dpy, vi_out, GLX_DOUBLEBUFFER, &value)) printf (" GLX double-buffer: %s\n", (value ? "yes" : "no")); if (!glXGetConfig (dpy, vi_out, GLX_STEREO, &value) && value) printf (" GLX stereo: %s\n", (value ? "yes" : "no")); if (!glXGetConfig (dpy, vi_out, GLX_AUX_BUFFERS, &value) && value != 0) printf (" GLX aux buffers: %d\n", value); if (!glXGetConfig (dpy, vi_out, GLX_DEPTH_SIZE, &value)) printf (" GLX depth size: %d\n", value); if (!glXGetConfig (dpy, vi_out, GLX_STENCIL_SIZE, &value) && value != 0) printf (" GLX stencil size: %d\n", value); # ifdef SB /* GL_SAMPLE_BUFFERS || GLX_SAMPLE_BUFFERS_* */ if (!glXGetConfig (dpy, vi_out, SB, &value) && value != 0) { int bufs = value; if (!glXGetConfig (dpy, vi_out, SM, &value)) printf (" GLX multisample: %d, %d\n", bufs, value); } # endif /* GL_SAMPLE_BUFFERS || GLX_SAMPLE_BUFFERS_* */ if (!glXGetConfig (dpy, vi_out, GLX_TRANSPARENT_TYPE_EXT, &value) && value != GLX_NONE_EXT) { if (value == GLX_NONE_EXT) printf (" GLX transparency: none\n"); else if (value == GLX_TRANSPARENT_INDEX_EXT) { if (!glXGetConfig (dpy, vi_out, GLX_TRANSPARENT_INDEX_VALUE_EXT, &value)) printf (" GLX transparency: indexed (%d)\n", value); } else if (value == GLX_TRANSPARENT_RGB_EXT) { int r=0, g=0, b=0, a=0; glXGetConfig (dpy, vi_out, GLX_TRANSPARENT_RED_VALUE_EXT, &r); glXGetConfig (dpy, vi_out, GLX_TRANSPARENT_GREEN_VALUE_EXT, &g); glXGetConfig (dpy, vi_out, GLX_TRANSPARENT_BLUE_VALUE_EXT, &b); glXGetConfig (dpy, vi_out, GLX_TRANSPARENT_ALPHA_VALUE_EXT, &a); printf (" GLX transparency: RGBA (%2d, %2d, %2d, %2d)\n", r, g, b, a); } } } #endif /* HAVE_GL */ } Bool validate_gl_visual (FILE *out, Screen *screen, const char *window_desc, Visual *visual) { #ifdef HAVE_GL int status; int value = False; Display *dpy = DisplayOfScreen (screen); XVisualInfo vi_in, *vi_out; int out_count; unsigned int id; vi_in.screen = screen_number (screen); vi_in.visualid = XVisualIDFromVisual (visual); vi_out = XGetVisualInfo (dpy, (VisualScreenMask | VisualIDMask), &vi_in, &out_count); if (! vi_out) abort (); status = glXGetConfig (dpy, vi_out, GLX_USE_GL, &value); id = (unsigned int) vi_out->visualid; XFree ((char *) vi_out); if (status == GLX_NO_EXTENSION) { fprintf (out, "%s: display \"%s\" does not support the GLX extension.\n", progname, DisplayString (dpy)); return False; } else if (status == GLX_BAD_VISUAL || value == False) { fprintf (out, "%s: %s's visual 0x%x does not support the GLX extension.\n", progname, window_desc, id); return False; } else { return True; } #else /* !HAVE_GL */ fprintf (out, "%s: GL support was not compiled in to this program.\n", progname); return False; #endif /* !HAVE_GL */ } xscreensaver-5.36/utils/xmu.c000644 000767 000024 00000014127 12701612233 016255 0ustar00jwzstaff000000 000000 /* This file contains compatibility routines for systems without Xmu. * You would be better served by installing Xmu on your machine or * yelling at your vendor to ship it. */ #ifdef HAVE_CONFIG_H # include "config.h" #endif #ifndef HAVE_XMU /* * Copyright 1989 Massachusetts Institute of Technology * * Permission to use, copy, modify, and distribute this software and its * documentation for any purpose and without fee is hereby granted, provided * that the above copyright notice appear in all copies and that both that * copyright notice and this permission notice appear in supporting * documentation, and that the name of M.I.T. not be used in advertising * or publicity pertaining to distribution of the software without specific, * written prior permission. M.I.T. makes no representations about the * suitability of this software for any purpose. It is provided "as is" * without express or implied warranty. * * M.I.T. DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL M.I.T. * BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include "xmu.h" #ifndef NEED_EVENTS # define NEED_EVENTS /* to make Xproto.h define xEvent */ #endif #ifndef VMS # include /* for xEvent (used by Xlibint.h) */ # include /* for _XExtension */ #else /* VMS */ # include #endif /* VMS */ #include /* for XtSpecificationRelease */ /* * XmuPrintDefaultErrorMessage - print a nice error that looks like the usual * message. Returns 1 if the caller should consider exitting else 0. */ int XmuPrintDefaultErrorMessage (Display *dpy, XErrorEvent *event, FILE *fp) { char buffer[BUFSIZ]; char mesg[BUFSIZ]; char number[32]; char *mtype = "XlibMessage"; _XExtension *ext = (_XExtension *)NULL; XGetErrorText(dpy, event->error_code, buffer, BUFSIZ); XGetErrorDatabaseText(dpy, mtype, "XError", "X Error", mesg, BUFSIZ); (void) fprintf(fp, "%s: %s\n ", mesg, buffer); XGetErrorDatabaseText(dpy, mtype, "MajorCode", "Request Major code %d", mesg, BUFSIZ); (void) fprintf(fp, mesg, event->request_code); if (event->request_code < 128) { sprintf(number, "%d", event->request_code); XGetErrorDatabaseText(dpy, "XRequest", number, "", buffer, BUFSIZ); } else { /* XXX this is non-portable */ for (ext = dpy->ext_procs; ext && (ext->codes.major_opcode != event->request_code); ext = ext->next) ; if (ext) strcpy(buffer, ext->name); else buffer[0] = '\0'; } (void) fprintf(fp, " (%s)", buffer); fputs("\n ", fp); #if (XtSpecificationRelease >= 5) if (event->request_code >= 128) { XGetErrorDatabaseText(dpy, mtype, "MinorCode", "Request Minor code %d", mesg, BUFSIZ); (void) fprintf(fp, mesg, event->minor_code); if (ext) { sprintf(mesg, "%s.%d", ext->name, event->minor_code); XGetErrorDatabaseText(dpy, "XRequest", mesg, "", buffer, BUFSIZ); (void) fprintf(fp, " (%s)", buffer); } fputs("\n ", fp); } if (event->error_code >= 128) { /* let extensions try to print the values */ /* XXX this is non-portable code */ for (ext = dpy->ext_procs; ext; ext = ext->next) { if (ext->error_values) (*ext->error_values)(dpy, event, fp); } /* the rest is a fallback, providing a simple default */ /* kludge, try to find the extension that caused it */ buffer[0] = '\0'; for (ext = dpy->ext_procs; ext; ext = ext->next) { if (ext->error_string) (*ext->error_string)(dpy, event->error_code, &ext->codes, buffer, BUFSIZ); if (buffer[0]) break; } if (buffer[0]) sprintf(buffer, "%s.%d", ext->name, event->error_code - ext->codes.first_error); else strcpy(buffer, "Value"); XGetErrorDatabaseText(dpy, mtype, buffer, "", mesg, BUFSIZ); if (*mesg) { (void) fprintf(fp, mesg, event->resourceid); fputs("\n ", fp); } } else if ((event->error_code == BadWindow) || (event->error_code == BadPixmap) || (event->error_code == BadCursor) || (event->error_code == BadFont) || (event->error_code == BadDrawable) || (event->error_code == BadColor) || (event->error_code == BadGC) || (event->error_code == BadIDChoice) || (event->error_code == BadValue) || (event->error_code == BadAtom)) { if (event->error_code == BadValue) XGetErrorDatabaseText(dpy, mtype, "Value", "Value 0x%x", mesg, BUFSIZ); else if (event->error_code == BadAtom) XGetErrorDatabaseText(dpy, mtype, "AtomID", "AtomID 0x%x", mesg, BUFSIZ); else XGetErrorDatabaseText(dpy, mtype, "ResourceID", "ResourceID 0x%x", mesg, BUFSIZ); (void) fprintf(fp, mesg, event->resourceid); fputs("\n ", fp); } #elif (XtSpecificationRelease == 4) XGetErrorDatabaseText(dpy, mtype, "MinorCode", "Request Minor code %d", mesg, BUFSIZ); (void) fprintf(fp, mesg, event->minor_code); fputs("\n ", fp); if (ext) { sprintf(mesg, "%s.%d", ext->name, event->minor_code); XGetErrorDatabaseText(dpy, "XRequest", mesg, "", buffer, BUFSIZ); (void) fprintf(fp, " (%s)", buffer); } XGetErrorDatabaseText(dpy, mtype, "ResourceID", "ResourceID 0x%x", mesg, BUFSIZ); (void) fprintf(fp, mesg, event->resourceid); fputs("\n ", fp); #else ERROR! Unsupported release of X11 #endif XGetErrorDatabaseText(dpy, mtype, "ErrorSerial", "Error Serial #%d", mesg, BUFSIZ); (void) fprintf(fp, mesg, event->serial); fputs("\n ", fp); XGetErrorDatabaseText(dpy, mtype, "CurrentSerial", "Current Serial #%d", mesg, BUFSIZ); (void) fprintf(fp, mesg, NextRequest(dpy)-1); fputs("\n", fp); if (event->error_code == BadImplementation) return 0; return 1; } #else /* HAVE_XMU */ /* Shut up the stupid "gcc -pedantic" warning */ int _I_dont_care_that_ISO_C_forbids_an_empty_source_file_ = 1; #endif /* HAVE_XMU */ xscreensaver-5.36/utils/logo.c000644 000767 000024 00000004637 12701612232 016410 0ustar00jwzstaff000000 000000 /* xscreensaver, Copyright (c) 2001-2006 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. */ /* XScreenSaver Logo designed by Angela Goodman */ /* If you are looking in here because you're trying to figure out how to change the logo that xscreensaver displays on the splash screen and password dialog, please don't. The logo is xscreensaver's identity. You wouldn't alter the name or copyright notice on a program that you didn't write; please don't alter its logo either. */ #include "utils.h" #include "resources.h" #include "visual.h" #include "minixpm.h" #include #include "images/logo-50.xpm" #include "images/logo-180.xpm" /* Returns a pixmap of the xscreensaver logo. */ Pixmap xscreensaver_logo (Screen *screen, Visual *visual, Drawable drawable, Colormap cmap, unsigned long background_color, unsigned long **pixels_ret, int *npixels_ret, Pixmap *mask_ret, Bool big_p) { Display *dpy = DisplayOfScreen (screen); int depth = visual_depth (screen, visual); int iw, ih; XImage *image; Pixmap p = 0; unsigned char *mask = 0; image = minixpm_to_ximage (dpy, visual, cmap, depth, background_color, (big_p ? logo_180_xpm : logo_50_xpm), &iw, &ih, pixels_ret, npixels_ret, (mask_ret ? &mask : 0)); if (image) { XGCValues gcv; GC gc; p = XCreatePixmap (dpy, drawable, iw, ih, depth); gc = XCreateGC (dpy, p, 0, &gcv); XPutImage (dpy, p, gc, image, 0, 0, 0, 0, iw, ih); free (image->data); image->data = 0; XDestroyImage (image); XFreeGC (dpy, gc); if (mask_ret && mask) { *mask_ret = (Pixmap) XCreatePixmapFromBitmapData (dpy, drawable, (char *) mask, iw, ih, 1L, 0L, 1); free (mask); } } return p; } xscreensaver-5.36/utils/yarandom.c000664 000767 000024 00000011337 12702261051 017257 0ustar00jwzstaff000000 000000 /* yarandom.c -- Yet Another Random Number Generator. * Copyright (c) 1997-2014 by 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. */ /* The unportable mess that is rand(), random(), drand48() and friends led me to ask Phil Karlton what the Right Thing to Do was. He responded with this. It is non-cryptographically secure, reasonably random (more so than anything that is in any C library), and very fast. I don't understand how it works at all, but he says "look at Knuth, Vol. 2 (original edition), page 26, Algorithm A. In this case n=55, k=24 and m=2^32." So there you have it. --------------------------- Note: xlockmore 4.03a10 uses this very simple RNG: if ((seed = seed % 44488 * 48271 - seed / 44488 * 3399) < 0) seed += 2147483647; return seed-1; of which it says ``Dr. Park's algorithm published in the Oct. '88 ACM "Random Number Generators: Good Ones Are Hard To Find" His version available at ftp://cs.wm.edu/pub/rngs.tar Present form by many authors.'' Karlton says: ``the usual problem with that kind of RNG turns out to be unexepected short cycles for some word lengths.'' Karlton's RNG is faster, since it does three adds and two stores, while the xlockmore RNG does two multiplies, two divides, three adds, and one store. Compiler optimizations make a big difference here: gcc -O: difference is 1.2x. gcc -O2: difference is 1.4x. gcc -O3: difference is 1.5x. SGI cc -O: difference is 2.4x. SGI cc -O2: difference is 2.4x. SGI cc -O3: difference is 5.1x. Irix 6.2; Indy r5k; SGI cc version 6; gcc version 2.7.2.1. */ #ifdef HAVE_CONFIG_H # include "config.h" #endif #ifdef HAVE_UNISTD_H # include /* for getpid() */ #endif #include /* for gettimeofday() */ #include "yarandom.h" # undef ya_rand_init /* The following 'random' numbers are taken from CRC, 18th Edition, page 622. Each array element was taken from the corresponding line in the table, except that a[0] was from line 100. 8s and 9s in the table were simply skipped. The high order digit was taken mod 4. */ #define VectorSize 55 static unsigned int a[VectorSize] = { 035340171546, 010401501101, 022364657325, 024130436022, 002167303062, /* 5 */ 037570375137, 037210607110, 016272055420, 023011770546, 017143426366, /* 10 */ 014753657433, 021657231332, 023553406142, 004236526362, 010365611275, /* 14 */ 007117336710, 011051276551, 002362132524, 001011540233, 012162531646, /* 20 */ 007056762337, 006631245521, 014164542224, 032633236305, 023342700176, /* 25 */ 002433062234, 015257225043, 026762051606, 000742573230, 005366042132, /* 30 */ 012126416411, 000520471171, 000725646277, 020116577576, 025765742604, /* 35 */ 007633473735, 015674255275, 017555634041, 006503154145, 021576344247, /* 40 */ 014577627653, 002707523333, 034146376720, 030060227734, 013765414060, /* 45 */ 036072251540, 007255221037, 024364674123, 006200353166, 010126373326, /* 50 */ 015664104320, 016401041535, 016215305520, 033115351014, 017411670323 /* 55 */ }; static int i1, i2; unsigned int ya_random (void) { register int ret = a[i1] + a[i2]; a[i1] = ret; if (++i1 >= VectorSize) i1 = 0; if (++i2 >= VectorSize) i2 = 0; return ret; } void ya_rand_init(unsigned int seed) { int i; if (seed == 0) { struct timeval tp; #ifdef GETTIMEOFDAY_TWO_ARGS struct timezone tzp; gettimeofday(&tp, &tzp); #else gettimeofday(&tp); #endif /* Since the multiplications will have a larger effect on the upper bits than the lower bits, after every addition in the seed, perform a bitwise rotate by an odd number, resulting in a better distribution of randomness throughout the bits. -- Brian Carlson, 2010. */ #define ROT(X,N) (((X)<<(N)) | ((X)>>((sizeof(unsigned int)*8)-(N)))) seed = (999U * (unsigned int) tp.tv_sec); seed = ROT (seed, 11); seed += (1001 * tp.tv_usec); seed = ROT (seed, 7); seed += (1003 * getpid()); seed = ROT (seed, 13); } a[0] += seed; for (i = 1; i < VectorSize; i++) { seed = seed*999; seed = ROT (seed, 9); seed += a[i-1]*1001; seed = ROT (seed, 15); a[i] += seed; } i1 = a[0] % VectorSize; i2 = (i1 + 24) % VectorSize; } xscreensaver-5.36/utils/erase.c000644 000767 000024 00000045102 12701612232 016537 0ustar00jwzstaff000000 000000 /* erase.c: Erase the screen in various more or less interesting ways. * Copyright (c) 1997-2008 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. * * Portions (c) 1997 by Johannes Keukelaar : * Permission to use in any way granted. Provided "as is" without expressed * or implied warranty. NO WARRANTY, NO EXPRESSION OF SUITABILITY FOR ANY * PURPOSE. (I.e.: Use in any way, but at your own risk!) */ #include "utils.h" #include "yarandom.h" #include "usleep.h" #include "resources.h" #include "erase.h" #include /* for gettimeofday() */ extern char *progname; #undef countof #define countof(x) (sizeof(x)/sizeof(*(x))) typedef void (*Eraser) (eraser_state *); struct eraser_state { Display *dpy; Window window; GC fg_gc, bg_gc; int width, height; Eraser fn; double start_time, stop_time; double ratio, prev_ratio; /* data for random_lines, venetian, random_squares */ Bool horiz_p; Bool flip_p; int nlines, *lines; /* data for triple_wipe, quad_wipe */ Bool flip_x, flip_y; /* data for circle_wipe, three_circle_wipe */ int start; /* data for random_squares */ int cols; }; static double double_time (void) { struct timeval now; # ifdef GETTIMEOFDAY_TWO_ARGS struct timezone tzp; gettimeofday(&now, &tzp); # else gettimeofday(&now); # endif return (now.tv_sec + ((double) now.tv_usec * 0.000001)); } static void random_lines (eraser_state *st) { int i; if (! st->lines) /* first time */ { st->horiz_p = (random() & 1); st->nlines = (st->horiz_p ? st->height : st->width); st->lines = (int *) calloc (st->nlines, sizeof(*st->lines)); for (i = 0; i < st->nlines; i++) /* every line */ st->lines[i] = i; for (i = 0; i < st->nlines; i++) /* shuffle */ { int t, r; t = st->lines[i]; r = random() % st->nlines; st->lines[i] = st->lines[r]; st->lines[r] = t; } } for (i = st->nlines * st->prev_ratio; i < st->nlines * st->ratio; i++) { if (st->horiz_p) XDrawLine (st->dpy, st->window, st->bg_gc, 0, st->lines[i], st->width, st->lines[i]); else XDrawLine (st->dpy, st->window, st->bg_gc, st->lines[i], 0, st->lines[i], st->height); } if (st->ratio >= 1.0) { free (st->lines); st->lines = 0; } } static void venetian (eraser_state *st) { int i; if (st->ratio == 0.0) { int j = 0; st->horiz_p = (random() & 1); st->flip_p = (random() & 1); st->nlines = (st->horiz_p ? st->height : st->width); st->lines = (int *) calloc (st->nlines, sizeof(*st->lines)); for (i = 0; i < st->nlines * 2; i++) { int line = ((i / 16) * 16) - ((i % 16) * 15); if (line >= 0 && line < st->nlines) st->lines[j++] = (st->flip_p ? st->nlines - line : line); } } for (i = st->nlines * st->prev_ratio; i < st->nlines * st->ratio; i++) { if (st->horiz_p) XDrawLine (st->dpy, st->window, st->bg_gc, 0, st->lines[i], st->width, st->lines[i]); else XDrawLine (st->dpy, st->window, st->bg_gc, st->lines[i], 0, st->lines[i], st->height); } if (st->ratio >= 1.0) { free (st->lines); st->lines = 0; } } static void triple_wipe (eraser_state *st) { int i; if (st->ratio == 0.0) { st->flip_x = random() & 1; st->flip_y = random() & 1; st->nlines = st->width + (st->height / 2); st->lines = (int *) calloc (st->nlines, sizeof(*st->lines)); for (i = 0; i < st->width / 2; i++) st->lines[i] = i * 2 + st->height; for (i = 0; i < st->height / 2; i++) st->lines[i + st->width / 2] = i*2; for (i = 0; i < st->width / 2; i++) st->lines[i + st->width / 2 + st->height / 2] = st->width - i * 2 - (st->width % 2 ? 0 : 1) + st->height; } for (i = st->nlines * st->prev_ratio; i < st->nlines * st->ratio; i++) { int x, y, x2, y2; if (st->lines[i] < st->height) x = 0, y = st->lines[i], x2 = st->width, y2 = y; else x = st->lines[i]-st->height, y = 0, x2 = x, y2 = st->height; if (st->flip_x) x = st->width - x, x2 = st->width - x2; if (st->flip_y) y = st->height - y, y2 = st->height - y2; XDrawLine (st->dpy, st->window, st->bg_gc, x, y, x2, y2); } if (st->ratio >= 1.0) { free (st->lines); st->lines = 0; } } static void quad_wipe (eraser_state *st) { int i; if (st->ratio == 0.0) { st->flip_x = random() & 1; st->flip_y = random() & 1; st->nlines = st->width + st->height; st->lines = (int *) calloc (st->nlines, sizeof(*st->lines)); for (i = 0; i < st->nlines/4; i++) { st->lines[i*4] = i*2; st->lines[i*4+1] = st->height - i*2 - (st->height % 2 ? 0 : 1); st->lines[i*4+2] = st->height + i*2; st->lines[i*4+3] = st->height + st->width - i*2 - (st->width % 2 ? 0 : 1); } } for (i = st->nlines * st->prev_ratio; i < st->nlines * st->ratio; i++) { int x, y, x2, y2; if (st->lines[i] < st->height) x = 0, y = st->lines[i], x2 = st->width, y2 = y; else x = st->lines[i] - st->height, y = 0, x2 = x, y2 = st->height; if (st->flip_x) x = st->width-x, x2 = st->width-x2; if (st->flip_y) y = st->height-y, y2 = st->height-y2; XDrawLine (st->dpy, st->window, st->bg_gc, x, y, x2, y2); } if (st->ratio >= 1.0) { free (st->lines); st->lines = 0; } } static void circle_wipe (eraser_state *st) { int rad = (st->width > st->height ? st->width : st->height); int max = 360 * 64; int th, oth; if (st->ratio == 0.0) { st->flip_p = random() & 1; st->start = random() % max; } th = max * st->ratio; oth = max * st->prev_ratio; if (st->flip_p) { th = max - th; oth = max - oth; } XFillArc (st->dpy, st->window, st->bg_gc, (st->width / 2) - rad, (st->height / 2) - rad, rad*2, rad*2, (st->start + oth) % max, th-oth); } static void three_circle_wipe (eraser_state *st) { int rad = (st->width > st->height ? st->width : st->height); int max = 360 * 64; int th, oth; int i; if (st->ratio == 0.0) st->start = random() % max; th = max/6 * st->ratio; oth = max/6 * st->prev_ratio; for (i = 0; i < 3; i++) { int off = i * max / 3; XFillArc (st->dpy, st->window, st->bg_gc, (st->width / 2) - rad, (st->height / 2) - rad, rad*2, rad*2, (st->start + off + oth) % max, th-oth); XFillArc (st->dpy, st->window, st->bg_gc, (st->width / 2) - rad, (st->height / 2) - rad, rad*2, rad*2, (st->start + off - oth) % max, oth-th); } } static void squaretate (eraser_state *st) { int max = ((st->width > st->height ? st->width : st->height) * 2); XPoint points [3]; int i = max * st->ratio; if (st->ratio == 0.0) st->flip_p = random() & 1; # define DRAW() \ if (st->flip_p) { \ points[0].x = st->width - points[0].x; \ points[1].x = st->width - points[1].x; \ points[2].x = st->width - points[2].x; \ } \ XFillPolygon (st->dpy, st->window, st->bg_gc, \ points, 3, Convex, CoordModeOrigin) points[0].x = 0; points[0].y = 0; points[1].x = st->width; points[1].y = 0; points[2].x = 0; points[2].y = points[0].y + ((i * st->height) / max); DRAW(); points[0].x = 0; points[0].y = 0; points[1].x = 0; points[1].y = st->height; points[2].x = ((i * st->width) / max); points[2].y = st->height; DRAW(); points[0].x = st->width; points[0].y = st->height; points[1].x = 0; points[1].y = st->height; points[2].x = st->width; points[2].y = st->height - ((i * st->height) / max); DRAW(); points[0].x = st->width; points[0].y = st->height; points[1].x = st->width; points[1].y = 0; points[2].x = st->width - ((i * st->width) / max); points[2].y = 0; DRAW(); # undef DRAW } static void fizzle (eraser_state *st) { XPoint *points; int chunk = 20000; int npoints = st->width * st->height * 4; npoints *= (st->ratio - st->prev_ratio); points = (XPoint *) malloc (chunk * sizeof(*points)); if (! points) return; while (npoints > 0) { int remain = (chunk > npoints ? npoints : chunk); int i; for (i = 0; i < remain; i++) { int r = random(); points[i].x = r % st->width; points[i].y = (r >> 16) % st->height; } XDrawPoints (st->dpy, st->window, st->bg_gc, points, remain, CoordModeOrigin); npoints -= remain; } free (points); } static void spiral (eraser_state *st) { int max_radius = (st->width > st->height ? st->width : st->height) * 0.7; int loops = 10; float max_th = M_PI * 2 * loops; int i; int steps = 360 * loops / 4; float off; if (st->ratio == 0.0) { st->flip_p = random() & 1; st->start = random() % 360; } off = st->start * M_PI / 180; for (i = steps * st->prev_ratio; i < steps * st->ratio; i++) { float th1 = i * max_th / steps; float th2 = (i+1) * max_th / steps; int r1 = i * max_radius / steps; int r2 = (i+1) * max_radius / steps; XPoint points[3]; if (st->flip_p) { th1 = max_th - th1; th2 = max_th - th2; } points[0].x = st->width / 2; points[0].y = st->height / 2; points[1].x = points[0].x + r1 * cos (off + th1); points[1].y = points[0].y + r1 * sin (off + th1); points[2].x = points[0].x + r2 * cos (off + th2); points[2].y = points[0].y + r2 * sin (off + th2); /* XFillRectangle(st->dpy, st->window, st->fg_gc,0,0,st->width, st->height);*/ XFillPolygon (st->dpy, st->window, st->bg_gc, points, 3, Convex, CoordModeOrigin); } } static void random_squares (eraser_state *st) { int i, size, rows; if (st->ratio == 0.0) { st->cols = 10 + random() % 30; size = st->width / st->cols; rows = (size ? (st->height / size) : 0) + 1; st->nlines = st->cols * rows; st->lines = (int *) calloc (st->nlines, sizeof(*st->lines)); for (i = 0; i < st->nlines; i++) /* every square */ st->lines[i] = i; for (i = 0; i < st->nlines; i++) /* shuffle */ { int t, r; t = st->lines[i]; r = random() % st->nlines; st->lines[i] = st->lines[r]; st->lines[r] = t; } } size = st->width / st->cols; rows = (size ? (st->height / size) : 0) + 1; for (i = st->nlines * st->prev_ratio; i < st->nlines * st->ratio; i++) { int x = st->lines[i] % st->cols; int y = st->lines[i] / st->cols; XFillRectangle (st->dpy, st->window, st->bg_gc, st->width * x / st->cols, st->height * y / rows, size+1, size+1); } if (st->ratio >= 1.0) { free (st->lines); st->lines = 0; } } /* I first saw something like this, albeit in reverse, in an early Tetris implementation for the Mac. -- Torbjörn Andersson */ static void slide_lines (eraser_state *st) { int max = st->width * 1.1; int nlines = 40; int h = st->height / nlines; int y, step; int tick = 0; if (h < 10) h = 10; step = (max * st->ratio) - (max * st->prev_ratio); if (step <= 0) step = 1; for (y = 0; y < st->height; y += h) { if (st->width <= step) ; else if (tick & 1) { XCopyArea (st->dpy, st->window, st->window, st->fg_gc, 0, y, st->width-step, h, step, y); XFillRectangle (st->dpy, st->window, st->bg_gc, 0, y, step, h); } else { XCopyArea (st->dpy, st->window, st->window, st->fg_gc, step, y, st->width-step, h, 0, y); XFillRectangle (st->dpy, st->window, st->bg_gc, st->width-step, y, step, h); } tick++; } } /* from Frederick Roeber */ static void losira (eraser_state *st) { double mode1 = 0.55; double mode2 = mode1 + 0.30; double mode3 = 1.0; int radius = 10; if (st->ratio < mode1) /* squeeze from the sides */ { double ratio = st->ratio / mode1; double prev_ratio = st->prev_ratio / mode1; int max = st->width / 2; int step = (max * ratio) - (max * prev_ratio); if (step <= 0) step = 1; /* pull from left */ XCopyArea (st->dpy, st->window, st->window, st->fg_gc, 0, 0, max - step, st->height, step, 0); XFillRectangle (st->dpy, st->window, st->bg_gc, 0, 0, max * ratio, st->height); /* pull from right */ XCopyArea (st->dpy, st->window, st->window, st->fg_gc, max+step, 0, max - step, st->height, max, 0); XFillRectangle (st->dpy, st->window, st->bg_gc, max + max*(1-ratio), 0, max, st->height); /* expand white from center */ XFillRectangle (st->dpy, st->window, st->fg_gc, max - (radius * ratio), 0, radius * ratio * 2, st->height); } else if (st->ratio < mode2) /* squeeze from the top/bottom */ { double ratio = (st->ratio - mode1) / (mode2 - mode1); int max = st->height / 2; /* fill middle */ XFillRectangle (st->dpy, st->window, st->fg_gc, st->width/2 - radius, max * ratio, radius*2, st->height * (1 - ratio)); /* fill left and right */ XFillRectangle (st->dpy, st->window, st->bg_gc, 0, 0, st->width/2 - radius, st->height); XFillRectangle (st->dpy, st->window, st->bg_gc, st->width/2 + radius, 0, st->width/2, st->height); /* fill top and bottom */ XFillRectangle (st->dpy, st->window, st->bg_gc, 0, 0, st->width, max * ratio); XFillRectangle (st->dpy, st->window, st->bg_gc, 0, st->height - (max * ratio), st->width, max); /* cap top */ XFillArc (st->dpy, st->window, st->fg_gc, st->width/2 - radius, max * ratio - radius, radius*2, radius*2, 0, 180*64); /* cap bottom */ XFillArc (st->dpy, st->window, st->fg_gc, st->width/2 - radius, st->height - (max * ratio + radius), radius*2, radius*2, 180*64, 180*64); } else /* starburst */ { double ratio = (st->ratio - mode2) / (mode3 - mode2); double r2 = ratio * radius * 4; XArc arc[9]; int i; int angle = 360*64/countof(arc); for (i = 0; i < countof(arc); i++) { double th; arc[i].angle1 = angle * i; arc[i].angle2 = angle; arc[i].width = radius*2 * (1 + ratio); arc[i].height = radius*2 * (1 + ratio); arc[i].x = st->width / 2 - radius; arc[i].y = st->height / 2 - radius; th = ((arc[i].angle1 + (arc[i].angle2 / 2)) / 64.0 / 180 * M_PI); arc[i].x += r2 * cos (th); arc[i].y -= r2 * sin (th); } XFillRectangle (st->dpy, st->window, st->bg_gc, 0, 0, st->width, st->height); XFillArcs (st->dpy, st->window, st->fg_gc, arc, countof(arc)); } } static Eraser erasers[] = { random_lines, venetian, triple_wipe, quad_wipe, circle_wipe, three_circle_wipe, squaretate, fizzle, spiral, random_squares, slide_lines, losira, }; static eraser_state * eraser_init (Display *dpy, Window window) { eraser_state *st = (eraser_state *) calloc (1, sizeof(*st)); XWindowAttributes xgwa; XGCValues gcv; unsigned long fg, bg; double duration; int which; char *s; st->dpy = dpy; st->window = window; XGetWindowAttributes (dpy, window, &xgwa); st->width = xgwa.width; st->height = xgwa.height; bg = get_pixel_resource (dpy, xgwa.colormap, "background", "Background"); fg = get_pixel_resource (dpy, xgwa.colormap, "foreground", "Foreground"); gcv.foreground = fg; gcv.background = bg; st->fg_gc = XCreateGC (dpy, window, GCForeground|GCBackground, &gcv); gcv.foreground = bg; gcv.background = fg; st->bg_gc = XCreateGC (dpy, window, GCForeground|GCBackground, &gcv); # ifdef HAVE_COCOA /* Pretty much all of these leave turds if AA is on. */ jwxyz_XSetAntiAliasing (st->dpy, st->fg_gc, False); jwxyz_XSetAntiAliasing (st->dpy, st->bg_gc, False); # endif s = get_string_resource (dpy, "eraseMode", "Integer"); if (!s || !*s) which = -1; else which = get_integer_resource(dpy, "eraseMode", "Integer"); if (which < 0 || which >= countof(erasers)) which = random() % countof(erasers); st->fn = erasers[which]; duration = get_float_resource (dpy, "eraseSeconds", "Float"); if (duration < 0.1 || duration > 10) duration = 1; st->start_time = double_time(); st->stop_time = st->start_time + duration; XSync (st->dpy, False); return st; } static Bool eraser_draw (eraser_state *st, Bool first_p) { double now = (first_p ? st->start_time : double_time()); double duration = st->stop_time - st->start_time; st->prev_ratio = st->ratio; st->ratio = (now - st->start_time) / duration; if (st->ratio > 1.0) st->ratio = 1.0; st->fn (st); XSync (st->dpy, False); return (st->ratio < 1.0); } static void eraser_free (eraser_state *st) { XClearWindow (st->dpy, st->window); XFreeGC (st->dpy, st->fg_gc); XFreeGC (st->dpy, st->bg_gc); free (st); } eraser_state * erase_window (Display *dpy, Window window, eraser_state *st) { Bool first_p = False; if (! st) { first_p = True; st = eraser_init (dpy, window); } if (! eraser_draw (st, first_p)) { eraser_free (st); st = 0; } return st; } xscreensaver-5.36/utils/xshm.c000644 000767 000024 00000014226 12701612233 016423 0ustar00jwzstaff000000 000000 /* xscreensaver, Copyright (c) 1993, 1994, 1995, 1996, 1997, 1998, 2001, 2006 * by 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. */ /* The MIT-SHM (Shared Memory) extension is pretty tricky to use. This file contains the common boiler-plate for creating a shared XImage structure, and for making sure that the shared memory segments get allocated and shut down cleanly. This code currently deals only with shared XImages, not with shared Pixmaps. It also doesn't use "completion events", but so far that doesn't seem to be a problem (and I'm not entirely clear on when they would actually be needed, anyway.) If you don't have man pages for this extension, see http://www.x.org/X11R6.8.1/docs/Xext/ (This document seems not to ever remain available on the web in one place for very long; you can search for it by the title, "MIT-SHM -- The MIT Shared Memory Extension".) To monitor the system's shared memory segments, run "ipcs -m". */ #include "utils.h" #ifdef HAVE_XSHM_EXTENSION /* whole file */ /* #define DEBUG */ #include /* for perror() */ #include /* for XDestroyImage() */ #include "xshm.h" #include "resources.h" /* for get_string_resource() */ #ifdef DEBUG # include #endif extern char *progname; /* The documentation for the XSHM extension implies that if the server supports XSHM but is not the local machine, the XShm calls will return False; but this turns out not to be the case. Instead, the server throws a BadAccess error. So, we need to catch X errors around all of our XSHM calls, sigh. */ static Bool shm_got_x_error = False; XErrorHandler old_handler = 0; static int shm_ehandler (Display *dpy, XErrorEvent *error) { shm_got_x_error = True; #ifdef DEBUG fprintf (stderr, "\n%s: ignoring X error from XSHM:\n", progname); XmuPrintDefaultErrorMessage (dpy, error, stderr); fprintf (stderr, "\n"); #endif return 0; } #define CATCH_X_ERROR(DPY) do { \ XSync((DPY), False); \ shm_got_x_error = False; \ if (old_handler != shm_ehandler) \ old_handler = XSetErrorHandler (shm_ehandler); \ } while(0) #define UNCATCH_X_ERROR(DPY) do { \ XSync((DPY), False); \ if (old_handler) \ XSetErrorHandler (old_handler); \ old_handler = 0; \ } while(0) XImage * create_xshm_image (Display *dpy, Visual *visual, unsigned int depth, int format, char *data, XShmSegmentInfo *shm_info, unsigned int width, unsigned int height) { Status status; XImage *image = 0; if (!get_boolean_resource(dpy, "useSHM", "Boolean")) return 0; if (!XShmQueryExtension (dpy)) return 0; CATCH_X_ERROR(dpy); image = XShmCreateImage(dpy, visual, depth, format, data, shm_info, width, height); UNCATCH_X_ERROR(dpy); if (shm_got_x_error) return 0; #ifdef DEBUG fprintf(stderr, "\n%s: XShmCreateImage(... %d, %d)\n", progname, width, height); #endif shm_info->shmid = shmget(IPC_PRIVATE, image->bytes_per_line * image->height, IPC_CREAT | 0777); #ifdef DEBUG fprintf(stderr, "%s: shmget(IPC_PRIVATE, %d, IPC_CREAT | 0777) ==> %d\n", progname, image->bytes_per_line * image->height, shm_info->shmid); #endif if (shm_info->shmid == -1) { char buf[1024]; sprintf (buf, "%s: shmget failed", progname); perror(buf); XDestroyImage (image); image = 0; XSync(dpy, False); } else { shm_info->readOnly = False; image->data = shm_info->shmaddr = shmat(shm_info->shmid, 0, 0); #ifdef DEBUG fprintf(stderr, "%s: shmat(%d, 0, 0) ==> %d\n", progname, shm_info->shmid, (int) image->data); #endif CATCH_X_ERROR(dpy); status = XShmAttach(dpy, shm_info); UNCATCH_X_ERROR(dpy); if (shm_got_x_error) status = False; if (!status) { fprintf (stderr, "%s: XShmAttach failed!\n", progname); XDestroyImage (image); XSync(dpy, False); shmdt (shm_info->shmaddr); image = 0; } #ifdef DEBUG else fprintf(stderr, "%s: XShmAttach(dpy, shm_info) ==> True\n", progname); #endif XSync(dpy, False); /* Delete the shared segment right now; the segment won't actually go away until both the client and server have deleted it. The server will delete it as soon as the client disconnects, so we should delete our side early in case of abnormal termination. (And note that, in the context of xscreensaver, abnormal termination is the rule rather than the exception, so this would leak like a sieve if we didn't do this...) #### Are we leaking anyway? Perhaps because of the window of opportunity between here and the XShmAttach call above, during which we might be killed? Do we need to establish a signal handler for this case? */ shmctl (shm_info->shmid, IPC_RMID, 0); #ifdef DEBUG fprintf(stderr, "%s: shmctl(%d, IPC_RMID, 0)\n\n", progname, shm_info->shmid); #endif } return image; } void destroy_xshm_image (Display *dpy, XImage *image, XShmSegmentInfo *shm_info) { Status status; CATCH_X_ERROR(dpy); status = XShmDetach (dpy, shm_info); UNCATCH_X_ERROR(dpy); if (shm_got_x_error) status = False; if (!status) fprintf (stderr, "%s: XShmDetach failed!\n", progname); #ifdef DEBUG else fprintf (stderr, "%s: XShmDetach(dpy, shm_info) ==> True\n", progname); #endif XDestroyImage (image); XSync(dpy, False); status = shmdt (shm_info->shmaddr); if (status != 0) { char buf[1024]; sprintf (buf, "%s: shmdt(0x%lx) failed", progname, (unsigned long) shm_info->shmaddr); perror(buf); } #ifdef DEBUG else fprintf (stderr, "%s: shmdt(shm_info->shmaddr) ==> 0\n", progname); #endif XSync(dpy, False); } #endif /* HAVE_XSHM_EXTENSION */ xscreensaver-5.36/utils/xdbe.c000644 000767 000024 00000003653 12701612233 016370 0ustar00jwzstaff000000 000000 /* xscreensaver, Copyright (c) 1998, 1999, 2006 * by 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. */ /* The XDBE (Double Buffering) extension is pretty tricky to use, since you can get X errors at inconvenient times during initialization. This file contains a utility routine to make it easier to deal with. */ #include "utils.h" #include "xdbe.h" #include "resources.h" /* for get_string_resource() */ /* #define DEBUG */ #ifdef DEBUG # include #endif extern char *progname; #ifdef HAVE_DOUBLE_BUFFER_EXTENSION /* whole file */ static Bool xdbe_got_x_error = False; static int xdbe_ehandler (Display *dpy, XErrorEvent *error) { xdbe_got_x_error = True; #ifdef DEBUG fprintf (stderr, "\n%s: ignoring X error from DOUBLE-BUFFER:\n", progname); XmuPrintDefaultErrorMessage (dpy, error, stderr); fprintf (stderr, "\n"); #endif return 0; } XdbeBackBuffer xdbe_get_backbuffer (Display *dpy, Window window, XdbeSwapAction action) { XdbeBackBuffer b; XErrorHandler old_handler; int maj, min; if (!get_boolean_resource(dpy, "useDBE", "Boolean")) return 0; if (!XdbeQueryExtension (dpy, &maj, &min)) return 0; XSync (dpy, False); xdbe_got_x_error = False; old_handler = XSetErrorHandler (xdbe_ehandler); b = XdbeAllocateBackBufferName(dpy, window, XdbeUndefined); XSync (dpy, False); XSetErrorHandler (old_handler); if (xdbe_got_x_error) return 0; return b; } #endif /* HAVE_DOUBLE_BUFFER_EXTENSION */ xscreensaver-5.36/utils/colorbars.c000644 000767 000024 00000010654 12701612232 017432 0ustar00jwzstaff000000 000000 /* xscreensaver, Copyright (c) 2001, 2003 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 file contains code for drawing NTSC colorbars. A couple of things use this. */ #include "utils.h" #include "resources.h" #include "colorbars.h" static const char * const colors[7][18] = { { "#CCCCCC", "#FFFF00", "#00FFFF", "#00FF00", /* tall bars */ "#FF00FF", "#FF0000", "#0000FF", "#000000", 0 }, { "#000000", "#0000FF", "#FF0000", "#FF00FF", /* short rev bars */ "#00FF00", "#00FFFF", "#FFFF00", "#CCCCCC", 0 }, { "#000000", 0 /* blank */ }, { "#FFFFFF", "#EEEEEE", "#DDDDDD", "#CCCCCC", /* gray ramp */ "#BBBBBB", "#AAAAAA", "#999999", "#888888", "#777777", "#666666", "#555555", "#444444", "#333333", "#222222", "#111111", "#000000" }, { "#000000", "#111111", "#222222", "#333333", /* gray rev ramp */ "#444444", "#555555", "#666666", "#777777", "#888888", "#999999", "#AAAAAA", "#BBBBBB", "#CCCCCC", "#DDDDDD", "#EEEEEE", "#FFFFFF" }, { "#000000", 0 /* blank */ }, { "#FF00FF", "#FF00FF", "#FF00FF", /* blacklevel row */ "#FFFFFF", "#FFFFFF", "#FFFFFF", "#0000AD", "#0000AD", "#0000AD", "#131313", "#131313", "#131313", "#000000", "#000000", "#262626", "#000000", "#000000", "#000000" } }; static const int heights[7] = { 63, 10, 1, 5, 5, 1, 15 }; /* percentages */ void draw_colorbars (Screen *screen, Visual *visual, Drawable drawable, Colormap cmap, int x, int y, int width, int height) { Display *dpy = DisplayOfScreen (screen); int oy = y; int ypct = 0; int j; XGCValues gcv; GC gc = XCreateGC (dpy, drawable, 0, &gcv); if (width <= 0 || height <= 0) { Window root; int xx, yy; unsigned int bw, d; XGetGeometry (dpy, drawable, &root, &xx, &yy, (unsigned int *) &width, (unsigned int *) &height, &bw, &d); } for (j = 0; j < sizeof(colors) / sizeof(*colors); j++) { int i, h, ncols; int x1 = 0; int y2; for (ncols = 0; ncols < sizeof(*colors) / sizeof(**colors); ncols++) if (!colors[j][ncols]) break; ypct += heights[j]; y2 = height * ypct / 100; h = y2 - y; /* avoid roundoff fencepost */ for (i = 0; i < ncols; i++) { XColor xcolor; const char *color = colors[j][i]; int x2 = x + (width * (i+1) / ncols); int w = x2 - x1; /* avoid roundoff fencepost */ if (! XParseColor (dpy, cmap, color, &xcolor)) abort(); xcolor.flags = DoRed|DoGreen|DoBlue; if (!XAllocColor (dpy, cmap, &xcolor)) continue; XSetForeground (dpy, gc, xcolor.pixel); XFillRectangle (dpy, drawable, gc, x1, y, w, h); x1 = x2; } y = y2; } y = oy; /* Add in the xscreensaver logo */ { unsigned long *pixels; /* ignored - unfreed */ int npixels; unsigned long bg = ~0; Pixmap logo_mask = 0; Pixmap logo_map = xscreensaver_logo (screen, visual, drawable, cmap, bg, &pixels, &npixels, &logo_mask, True); if (logo_map) { Window root; unsigned int logo_width, logo_height; int w = width; int h = height * heights[0] / 100; int x1, y1; unsigned int bw, d; XGetGeometry (dpy, logo_map, &root, &x1, &y1, &logo_width, &logo_height, &bw, &d); x1 = x + (w - (int) logo_width) / 2; y1 = y + (h - (int) logo_height) / 2; if (logo_mask) { XSetClipMask (dpy, gc, logo_mask); XSetClipOrigin (dpy, gc, x1, y1); } XCopyArea (dpy, logo_map, drawable, gc, 0, 0, logo_width, logo_height, x1, y1); XFreePixmap (dpy, logo_map); if (logo_mask) XFreePixmap (dpy, logo_mask); } } XFreeGC(dpy, gc); } xscreensaver-5.36/utils/minixpm.c000644 000767 000024 00000016333 12701612232 017125 0ustar00jwzstaff000000 000000 /* xscreensaver, Copyright (c) 2001-2014 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. */ /* I implemented this subset of libXPM here because I don't want the xscreensaver daemon to depend on libXPM for two reasons: first, because I want the logo to show up even if libXPM is not installed on the system; and second, I don't want to have to security-audit libXPM. The fewer libraries that are linked into the xscreensaver daemon, the more likely to be secure it is. Also, the Cocoa port uses this code since libXPM isn't available by default on MacOS. */ #ifdef HAVE_CONFIG_H # include "config.h" #endif #include #include #include #ifdef HAVE_JWXYZ # include "jwxyz.h" #else /* real Xlib */ # include # include #endif /* !HAVE_JWXYZ */ #include "minixpm.h" extern const char *progname; static Bool bigendian (void) { union { int i; char c[sizeof(int)]; } u; u.i = 1; return !u.c[0]; } static const char hex[128] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 0, 0, 0, 0, 0, 0, 10,11,12,13,14,15,0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10,11,12,13,14,15,0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; XImage * minixpm_to_ximage (Display *dpy, Visual *visual, Colormap colormap, int depth, unsigned long transparent_color, const char * const * data, int *width_ret, int *height_ret, unsigned long **pixels_ret, int *npixels_ret, unsigned char **mask_ret) { int w, w8, h, ncolors, nbytes; char c; int x, y, i, pixel_count; struct { char byte; int cr; int cg; int cb; int mr; int mg; int mb; } cmap[256]; unsigned char rmap[256]; unsigned long *pixels; XImage *ximage = 0; memset (cmap, 0, sizeof(cmap)); /* avoid warnings */ if (4 != sscanf ((const char *) *data, "%d %d %d %d %c", &w, &h, &ncolors, &nbytes, &c)) { fprintf (stderr, "%s: unparsable XPM header\n", progname); abort(); } if (ncolors < 1 || ncolors > 255) { fprintf (stderr, "%s: XPM: ncolors is %d\n", progname, ncolors); abort(); } if (nbytes != 1) { fprintf (stderr, "%s: %d-byte XPM files not supported\n", progname, nbytes); abort(); } data++; for (i = 0; i < ncolors; i++) { const char *line = *data; cmap[i].byte = *line++; while (*line) { int r, g, b; char which; while (*line == ' ' || *line == '\t') line++; which = *line; if (!which) continue; /* whitespace at end of line */ line++; if (which != 'c' && which != 'm') { fprintf (stderr, "%s: unknown XPM pixel type '%c' in \"%s\"\n", progname, which, *data); abort(); } while (*line == ' ' || *line == '\t') line++; if (!strncasecmp(line, "None", 4)) { r = g = b = -1; line += 4; } else if (!strncasecmp(line, "white", 5)) { r = g = b = 255; line += 5; } else if (!strncasecmp(line, "black", 5)) { r = g = b = 0; line += 5; } else { if (*line != '#') { fprintf (stderr, "%s: unparsable XPM color spec: \"%s\"\n", progname, line); abort(); } if (*line == '#') line++; r = (hex[(int) line[0]] << 4) | hex[(int) line[1]]; line += 2; g = (hex[(int) line[0]] << 4) | hex[(int) line[1]]; line += 2; b = (hex[(int) line[0]] << 4) | hex[(int) line[1]]; line += 2; } if (which == 'c') { cmap[i].cr = r; cmap[i].cg = g; cmap[i].cb = b; } else { cmap[i].mr = r; cmap[i].mg = g; cmap[i].mb = b; } } data++; } if (depth == 1) transparent_color = 1; pixels = (unsigned long *) calloc (ncolors+1, sizeof(*pixels)); pixel_count = 0; for (i = 0; i < ncolors; i++) { if (cmap[i].cr == -1) /* transparent */ { rmap[(int) cmap[i].byte] = 255; } else { XColor color; color.flags = DoRed|DoGreen|DoBlue; color.red = (cmap[i].cr << 8) | cmap[i].cr; color.green = (cmap[i].cg << 8) | cmap[i].cg; color.blue = (cmap[i].cb << 8) | cmap[i].cb; if (depth == 1 || !XAllocColor (dpy, colormap, &color)) { color.red = (cmap[i].mr << 8) | cmap[i].mr; color.green = (cmap[i].mg << 8) | cmap[i].mg; color.blue = (cmap[i].mb << 8) | cmap[i].mb; if (!XAllocColor (dpy, colormap, &color)) { fprintf (stderr, "%s: unable to allocate XPM color\n", progname); abort(); } } pixels[pixel_count] = color.pixel; rmap[(int) cmap[i].byte] = pixel_count; pixel_count++; } } ximage = XCreateImage (dpy, visual, depth, (depth == 1 ? XYBitmap : ZPixmap), 0, 0, w, h, 8, 0); if (! ximage) { if (pixels) free (pixels); return 0; } ximage->bitmap_bit_order = ximage->byte_order = (bigendian() ? MSBFirst : LSBFirst); ximage->data = (char *) calloc (ximage->height, ximage->bytes_per_line); if (!ximage->data) { XDestroyImage (ximage); if (pixels) free (pixels); return 0; } w8 = (w + 7) / 8; if (mask_ret) { int s = (w8 * h) + 1; *mask_ret = (unsigned char *) malloc (s); if (!*mask_ret) mask_ret = 0; else memset (*mask_ret, 255, s); } for (y = 0; y < h; y++) { const char *line = *data++; for (x = 0; x < w; x++) { int p = rmap[(int) *line]; line++; XPutPixel (ximage, x, y, (p == 255 ? transparent_color : pixels[p])); if (p == 255 && mask_ret) (*mask_ret)[(y * w8) + (x >> 3)] &= (~(1 << (x & 7))); } } *width_ret = w; *height_ret = h; *pixels_ret = pixels; *npixels_ret = pixel_count; return ximage; } xscreensaver-5.36/utils/textclient.c000644 000767 000024 00000041201 12776333612 017635 0ustar00jwzstaff000000 000000 /* xscreensaver, Copyright (c) 2012-2016 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. * * Running programs under a pipe or pty and returning bytes from them. * Uses these X resources: * * program: What to run. Usually "xscreensaver-text". * relaunchDelay: secs How long after the command dies before restarting. * usePty: bool Whether to run the command interactively. * metaSendsESC: bool Whether to send Alt-x as ESC x in pty-mode. * swapBSDEL: bool Swap Backspace and Delete in pty-mode. * * On iOS and Android, textclient-mobile.c is used instead. */ #include "utils.h" #if !defined(USE_IPHONE) && !defined(HAVE_ANDROID) /* whole file */ #include "textclient.h" #include "resources.h" #ifndef HAVE_COCOA # define XK_MISCELLANY # include # include # include #endif #include #include #include #ifdef HAVE_UNISTD_H # include # include /* for O_RDWR */ #endif #ifdef HAVE_FORKPTY # include # ifdef HAVE_PTY_H # include # endif # ifdef HAVE_UTIL_H # include # endif # ifdef HAVE_SYS_TERMIOS_H # include # endif #endif /* HAVE_FORKPTY */ #undef DEBUG extern const char *progname; struct text_data { Display *dpy; char *program; int pix_w, pix_h, char_w, char_h; int max_lines; Bool pty_p; XtIntervalId pipe_timer; FILE *pipe; pid_t pid; XtInputId pipe_id; Bool input_available_p; Time subproc_relaunch_delay; XComposeStatus compose; Bool meta_sends_esc_p; Bool swap_bs_del_p; Bool meta_done_once; unsigned int meta_mask; const char *out_buffer; int out_column; }; static void subproc_cb (XtPointer closure, int *source, XtInputId *id) { text_data *d = (text_data *) closure; # ifdef DEBUG if (! d->input_available_p) fprintf (stderr, "%s: textclient: input available\n", progname); # endif d->input_available_p = True; } # define BACKSLASH(c) \ (! ((c >= 'a' && c <= 'z') || \ (c >= 'A' && c <= 'Z') || \ (c >= '0' && c <= '9') || \ c == '.' || c == '_' || c == '-' || c == '+' || c == '/')) #ifdef HAVE_COCOA static char * escape_str (char *s, const char *src) { while (*src) { char c = *src++; if (BACKSLASH(c)) *s++ = '\\'; *s++ = c; } return s; } #endif static void launch_text_generator (text_data *d) { XtAppContext app = XtDisplayToApplicationContext (d->dpy); char buf[255]; const char *oprogram = d->program; char *s; size_t oprogram_size = strlen(oprogram); size_t len; # ifdef HAVE_COCOA /* /bin/sh on OS X 10.10 wipes out the PATH. */ const char *path = getenv("PATH"); size_t cmd_capacity = (oprogram_size + strlen(path)) * 2 + 100; char *cmd = s = malloc (cmd_capacity); strcpy (s, "export PATH="); s += strlen (s); s = escape_str (s, path); strcpy (s, "; "); s += strlen (s); # else char *cmd = s = malloc ((strlen(oprogram)) * 2 + 100); # endif strcpy (s, "( "); strcat (s, oprogram); s += strlen (s); /* Kludge! Special-case "xscreensaver-text" to tell it how wide the screen is. We used to do this by just always feeding `program' through sprintf() and setting the default value to "xscreensaver-text --cols %d", but that makes things blow up if someone ever uses a --program that includes a % anywhere. */ len = 17; /* strlen("xscreensaver-text") */ if (oprogram_size >= len && !memcmp (oprogram, "xscreensaver-text", len) && (oprogram[len] == ' ' || !oprogram[len])) { /* strstr is sloppy here. Technically, we should be parsing the command line to identify flags and their arguments. This will blow up if one of those pesky end users could set .textLiteral to "--cols". */ if (d->char_w && !strstr (oprogram, "--cols ")) sprintf (s, " --cols %d", d->char_w); if (d->max_lines && !strstr (oprogram, "--lines ")) sprintf (s, " --lines %d", d->max_lines); s += strlen(s); # ifdef HAVE_COCOA /* Also special-case "xscreensaver-text" to specify the text content on the command line. defaults(1) on macOS doesn't know about the default screenhack resources that don't make it into the ~/Library/Preferences/ByHost/org.jwz.xscreensaver.*.plist. */ char *text_mode_flag = " --date"; char *value_res = NULL; char *text_mode = get_string_resource (d->dpy, "textMode", "String"); if (text_mode) { if (!strcmp (text_mode, "1") || !strcmp (text_mode, "literal")) { text_mode_flag = " --text"; value_res = "textLiteral"; } else if (!strcmp (text_mode, "2") || !strcmp (text_mode, "file")) { text_mode_flag = " --file"; value_res = "textFile"; } else if (!strcmp (text_mode, "3") || !strcmp (text_mode, "url")) { text_mode_flag = " --url"; value_res = "textURL"; } else if (!strcmp (text_mode, "4") || !strcmp (text_mode, "program")) { text_mode_flag = " --program"; value_res = "textProgram"; } free (text_mode); } strcpy (s, text_mode_flag); s += strlen (s); if (value_res) { size_t old_s = s - cmd; char *value = get_string_resource (d->dpy, value_res, ""); if (!value) value = strdup(""); cmd = realloc(cmd, cmd_capacity + strlen(value) * 2); s = cmd + old_s; *s = ' '; ++s; s = escape_str(s, value); free(value); } # endif /* HAVE_COCOA */ } strcpy (s, " ) 2>&1"); # ifdef DEBUG fprintf (stderr, "%s: textclient: launch %s: %s\n", progname, (d->pty_p ? "pty" : "pipe"), cmd); # endif #ifdef HAVE_FORKPTY if (d->pty_p) { int fd; struct winsize ws; ws.ws_col = d->char_w; ws.ws_row = d->char_h; ws.ws_xpixel = d->pix_w; ws.ws_ypixel = d->pix_h; d->pipe = 0; # ifdef HAVE_COCOA if (getenv ("MallocScribble")) /* This is here to stop me from wasting my time trying to answer this question the next time I forget about it. */ fprintf (stderr, "%s: WARNING: forkpty hates 'Enable Guard Malloc'\n", progname); # endif if ((d->pid = forkpty(&fd, NULL, NULL, &ws)) < 0) { /* Unable to fork */ sprintf (buf, "%.100s: forkpty", progname); perror (buf); } else if (!d->pid) { /* This is the child fork. */ char *av[10]; int i = 0; if (putenv ("TERM=vt100")) abort(); av[i++] = "/bin/sh"; av[i++] = "-c"; av[i++] = cmd; av[i] = 0; # ifdef DEBUG { int j; fprintf (stderr, "%s: textclient: execvp:", progname); for (j = 0; j < i; j++) fprintf (stderr, " %s", av[j]); fprintf (stderr, "\n"); } # endif execvp (av[0], av); sprintf (buf, "%.100s: %.100s", progname, oprogram); perror (buf); exit (1); } else { /* This is the parent fork. */ if (d->pipe) abort(); d->pipe = fdopen (fd, "r+"); if (d->pipe_id) abort(); d->pipe_id = XtAppAddInput (app, fileno (d->pipe), (XtPointer) (XtInputReadMask | XtInputExceptMask), subproc_cb, (XtPointer) d); # ifdef DEBUG fprintf (stderr, "%s: textclient: pid = %d\n", progname, d->pid); # endif } } else #endif /* HAVE_FORKPTY */ { /* don't mess up controlling terminal on "-pipe -program tcsh". */ static int protected_stdin_p = 0; if (! protected_stdin_p) { fclose (stdin); open ("/dev/null", O_RDWR); /* re-allocate fd 0 */ protected_stdin_p = 1; } if (d->pipe) abort(); if ((d->pipe = popen (cmd, "r"))) { if (d->pipe_id) abort(); d->pipe_id = XtAppAddInput (app, fileno (d->pipe), (XtPointer) (XtInputReadMask | XtInputExceptMask), subproc_cb, (XtPointer) d); # ifdef DEBUG fprintf (stderr, "%s: textclient: popen\n", progname); # endif } else { sprintf (buf, "%.100s: %.100s", progname, cmd); perror (buf); } } free (cmd); } static void relaunch_generator_timer (XtPointer closure, XtIntervalId *id) { text_data *d = (text_data *) closure; /* if (!d->pipe_timer) abort(); */ d->pipe_timer = 0; # ifdef DEBUG fprintf (stderr, "%s: textclient: launch timer fired\n", progname); # endif launch_text_generator (d); } static void start_timer (text_data *d) { XtAppContext app = XtDisplayToApplicationContext (d->dpy); # ifdef DEBUG fprintf (stderr, "%s: textclient: relaunching in %d\n", progname, (int) d->subproc_relaunch_delay); # endif if (d->pipe_timer) XtRemoveTimeOut (d->pipe_timer); d->pipe_timer = XtAppAddTimeOut (app, d->subproc_relaunch_delay, relaunch_generator_timer, (XtPointer) d); } static void close_pipe (text_data *d) { if (d->pid) { # ifdef DEBUG fprintf (stderr, "%s: textclient: kill %d\n", progname, d->pid); # endif kill (d->pid, SIGTERM); } d->pid = 0; if (d->pipe_id) XtRemoveInput (d->pipe_id); d->pipe_id = 0; if (d->pipe) { # ifdef DEBUG fprintf (stderr, "%s: textclient: pclose\n", progname); # endif pclose (d->pipe); } d->pipe = 0; } void textclient_reshape (text_data *d, int pix_w, int pix_h, int char_w, int char_h, int max_lines) { # if defined(HAVE_FORKPTY) && defined(TIOCSWINSZ) d->pix_w = pix_w; d->pix_h = pix_h; d->char_w = char_w; d->char_h = char_h; d->max_lines = max_lines; # ifdef DEBUG fprintf (stderr, "%s: textclient: reshape: %dx%d, %dx%d\n", progname, pix_w, pix_h, char_w, char_h); # endif if (d->pid && d->pipe) { /* Tell the sub-process that the screen size has changed. */ struct winsize ws; ws.ws_col = char_w; ws.ws_row = char_h; ws.ws_xpixel = pix_w; ws.ws_ypixel = pix_h; ioctl (fileno (d->pipe), TIOCSWINSZ, &ws); kill (d->pid, SIGWINCH); # ifdef DEBUG fprintf (stderr, "%s: textclient: SIGWINCH\n", progname); # endif } # endif /* HAVE_FORKPTY && TIOCSWINSZ */ /* If we're running xscreensaver-text, then kill and restart it any time the window is resized so that it gets an updated --cols arg right away. But if we're running something else, leave it alone. */ if (!strcmp (d->program, "xscreensaver-text")) { # ifdef DEBUG fprintf (stderr, "%s: textclient: reshape relaunch\n", progname); # endif close_pipe (d); d->input_available_p = False; start_timer (d); } } text_data * textclient_open (Display *dpy) { text_data *d = (text_data *) calloc (1, sizeof (*d)); # ifdef DEBUG fprintf (stderr, "%s: textclient: init\n", progname); # endif d->dpy = dpy; if (get_boolean_resource (dpy, "usePty", "UsePty")) { # ifdef HAVE_FORKPTY d->pty_p = True; # else fprintf (stderr, "%s: no pty support on this system; using a pipe instead.\n", progname); # endif } d->subproc_relaunch_delay = get_integer_resource (dpy, "relaunchDelay", "Time"); if (d->subproc_relaunch_delay < 1) d->subproc_relaunch_delay = 1; d->subproc_relaunch_delay *= 1000; d->meta_sends_esc_p = get_boolean_resource (dpy, "metaSendsESC", "Boolean"); d->swap_bs_del_p = get_boolean_resource (dpy, "swapBSDEL", "Boolean"); d->program = get_string_resource (dpy, "program", "Program"); # ifdef HAVE_FORKPTY /* Kludge for MacOS standalone mode: see OSX/SaverRunner.m. */ { const char *s = getenv ("XSCREENSAVER_STANDALONE"); if (s && *s && strcmp(s, "0")) { d->pty_p = 1; d->program = strdup (getenv ("SHELL")); # ifdef DEBUG fprintf (stderr, "%s: textclient: standalone: %s\n", progname, d->program); # endif } } # endif start_timer (d); return d; } void textclient_close (text_data *d) { # ifdef DEBUG fprintf (stderr, "%s: textclient: free\n", progname); # endif close_pipe (d); if (d->program) free (d->program); if (d->pipe_timer) XtRemoveTimeOut (d->pipe_timer); d->pipe_timer = 0; memset (d, 0, sizeof (*d)); free (d); } int textclient_getc (text_data *d) { XtAppContext app = XtDisplayToApplicationContext (d->dpy); int ret = -1; if (XtAppPending (app) & (XtIMTimer|XtIMAlternateInput)) XtAppProcessEvent (app, XtIMTimer|XtIMAlternateInput); if (d->out_buffer && *d->out_buffer) { ret = *d->out_buffer; d->out_buffer++; } else if (d->input_available_p && d->pipe) { unsigned char s[2]; int n = read (fileno (d->pipe), (void *) s, 1); if (n > 0) ret = s[0]; else /* EOF */ { if (d->pid) { # ifdef DEBUG fprintf (stderr, "%s: textclient: waitpid %d\n", progname, d->pid); # endif waitpid (d->pid, NULL, 0); d->pid = 0; } close_pipe (d); if (d->out_column > 0) { # ifdef DEBUG fprintf (stderr, "%s: textclient: adding blank line at EOF\n", progname); # endif d->out_buffer = "\r\n\r\n"; } start_timer (d); } d->input_available_p = False; } if (ret == '\r' || ret == '\n') d->out_column = 0; else if (ret > 0) d->out_column++; # ifdef DEBUG if (ret <= 0) fprintf (stderr, "%s: textclient: getc: %d\n", progname, ret); else if (ret < ' ') fprintf (stderr, "%s: textclient: getc: %03o\n", progname, ret); else fprintf (stderr, "%s: textclient: getc: '%c'\n", progname, (char) ret); # endif return ret; } /* The interpretation of the ModN modifiers is dependent on what keys are bound to them: Mod1 does not necessarily mean "meta". It only means "meta" if Meta_L or Meta_R are bound to it. If Meta_L is on Mod5, then Mod5 is the one that means Meta. Oh, and Meta and Alt aren't necessarily the same thing. Icepicks in my forehead! */ static unsigned int do_icccm_meta_key_stupidity (Display *dpy) { unsigned int modbits = 0; # ifndef HAVE_COCOA int i, j, k; XModifierKeymap *modmap = XGetModifierMapping (dpy); for (i = 3; i < 8; i++) for (j = 0; j < modmap->max_keypermod; j++) { int code = modmap->modifiermap[i * modmap->max_keypermod + j]; KeySym *syms; int nsyms = 0; if (code == 0) continue; syms = XGetKeyboardMapping (dpy, code, 1, &nsyms); for (k = 0; k < nsyms; k++) if (syms[k] == XK_Meta_L || syms[k] == XK_Meta_R || syms[k] == XK_Alt_L || syms[k] == XK_Alt_R) modbits |= (1 << i); XFree (syms); } XFreeModifiermap (modmap); # endif /* HAVE_COCOA */ return modbits; } /* Returns a mask of the bit or bits of a KeyPress event that mean "meta". */ static unsigned int meta_modifier (text_data *d) { if (!d->meta_done_once) { /* Really, we are supposed to recompute this if a KeymapNotify event comes in, but fuck it. */ d->meta_done_once = True; d->meta_mask = do_icccm_meta_key_stupidity (d->dpy); # ifdef DEBUG fprintf (stderr, "%s: textclient: ICCCM Meta is 0x%08X\n", progname, d->meta_mask); # endif } return d->meta_mask; } Bool textclient_putc (text_data *d, XKeyEvent *k) { KeySym keysym; unsigned char c = 0; XLookupString (k, (char *) &c, 1, &keysym, &d->compose); if (c != 0 && d->pipe) { if (!d->swap_bs_del_p) ; else if (c == 127) c = 8; else if (c == 8) c = 127; /* If meta was held down, send ESC, or turn on the high bit. */ if (k->state & meta_modifier (d)) { if (d->meta_sends_esc_p) fputc ('\033', d->pipe); else c |= 0x80; } fputc (c, d->pipe); fflush (d->pipe); k->type = 0; /* don't interpret this event defaultly. */ # ifdef DEBUG fprintf (stderr, "%s: textclient: putc '%c'\n", progname, (char) c); # endif return True; } return False; } #endif /* !USE_IPHONE -- whole file */ xscreensaver-5.36/utils/textclient-mobile.c000644 000767 000024 00000051364 12721432300 021075 0ustar00jwzstaff000000 000000 /* xscreensaver, Copyright (c) 2012-2016 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. * * Loading URLs and returning the underlying text. * * This is necessary because iOS and Android don't have Perl installed, * so we can't just run "xscreensaver-text" at the end of a pipe to do this. */ #include "utils.h" #if defined(USE_IPHONE) || defined(HAVE_ANDROID) /* whole file */ #include "textclient.h" #include "resources.h" #include "utf8wc.h" #include #undef countof #define countof(x) (sizeof((x))/sizeof((*x))) extern const char *progname; struct text_data { enum { DATE, LITERAL, URL } mode; char *literal, *url; Display *dpy; int columns; int max_lines; char *buf; int buf_size; char *fp; }; text_data * textclient_open (Display *dpy) { text_data *d = (text_data *) calloc (1, sizeof (*d)); # ifdef DEBUG fprintf (stderr, "%s: textclient: init\n", progname); # endif char *s = get_string_resource (dpy, "textMode", "TextMode"); if (!s || !*s || !strcasecmp (s, "date") || !strcmp (s, "0")) d->mode = DATE; else if (!strcasecmp (s, "literal") || !strcmp (s, "1")) d->mode = LITERAL; else if (!strcasecmp (s, "url") || !strcmp (s, "3")) d->mode = URL; else d->mode = DATE; d->dpy = dpy; d->literal = get_string_resource (dpy, "textLiteral", "TextLiteral"); d->url = get_string_resource (dpy, "textURL", "TextURL"); return d; } void textclient_close (text_data *d) { # ifdef DEBUG fprintf (stderr, "%s: textclient: free\n", progname); # endif if (d->buf) free (d->buf); if (d->literal) free (d->literal); if (d->url) free (d->url); free (d); } /* Returns a copy of the string with some basic HTML entities decoded. */ static char * decode_entities (const char *html) { char *ret = (char *) malloc ((strlen(html) * 4) + 1); // room for UTF8 const char *in = html; char *out = ret; *out = 0; const struct { const char *c; const char *e; } entities[] = { { "amp", "&" }, { "lt", "<" }, { "gt", ">" }, // Convert Latin1 to UTF8 { "nbsp", " " }, //   160 { "iexcl", "\302\241" }, // ¡ 161 { "cent", "\302\242" }, // ¢ 162 { "pound", "\302\243" }, // £ 163 { "curren", "\302\244" }, // ¤ 164 { "yen", "\302\245" }, // ¥ 165 { "brvbar", "\302\246" }, // ¦ 166 { "sect", "\302\247" }, // § 167 { "uml", "\302\250" }, // ¨ 168 { "copy", "\302\251" }, // © 169 { "ordf", "\302\252" }, // ª 170 { "laquo", "\302\253" }, // « 171 { "not", "\302\254" }, // ¬ 172 { "shy", "\302\255" }, // ­ 173 { "reg", "\302\256" }, // ® 174 { "macr", "\302\257" }, // ¯ 175 { "deg", "\302\260" }, // ° 176 { "plusmn", "\302\261" }, // ± 177 { "sup2", "\302\262" }, // ² 178 { "sup3", "\302\263" }, // ³ 179 { "acute", "\302\264" }, // ´ 180 { "micro", "\302\265" }, // µ 181 { "para", "\302\266" }, // ¶ 182 { "middot", "\302\267" }, // · 183 { "cedil", "\302\270" }, // ¸ 184 { "sup1", "\302\271" }, // ¹ 185 { "ordm", "\302\272" }, // º 186 { "raquo", "\302\273" }, // » 187 { "frac14", "\302\274" }, // ¼ 188 { "frac12", "\302\275" }, // ½ 189 { "frac34", "\302\276" }, // ¾ 190 { "iquest", "\302\277" }, // ¿ 191 { "Agrave", "\303\200" }, // À 192 { "Aacute", "\303\201" }, // Á 193 { "Acirc", "\303\202" }, // Â 194 { "Atilde", "\303\203" }, // Ã 195 { "Auml", "\303\204" }, // Ä 196 { "Aring", "\303\205" }, // Å 197 { "AElig", "\303\206" }, // Æ 198 { "Ccedil", "\303\207" }, // Ç 199 { "Egrave", "\303\210" }, // È 200 { "Eacute", "\303\211" }, // É 201 { "Ecirc", "\303\212" }, // Ê 202 { "Euml", "\303\213" }, // Ë 203 { "Igrave", "\303\214" }, // Ì 204 { "Iacute", "\303\215" }, // Í 205 { "Icirc", "\303\216" }, // Î 206 { "Iuml", "\303\217" }, // Ï 207 { "ETH", "\303\220" }, // Ð 208 { "Ntilde", "\303\221" }, // Ñ 209 { "Ograve", "\303\222" }, // Ò 210 { "Oacute", "\303\223" }, // Ó 211 { "Ocirc", "\303\224" }, // Ô 212 { "Otilde", "\303\225" }, // Õ 213 { "Ouml", "\303\226" }, // Ö 214 { "times", "\303\227" }, // × 215 { "Oslash", "\303\230" }, // Ø 216 { "Ugrave", "\303\231" }, // Ù 217 { "Uacute", "\303\232" }, // Ú 218 { "Ucirc", "\303\233" }, // Û 219 { "Uuml", "\303\234" }, // Ü 220 { "Yacute", "\303\235" }, // Ý 221 { "THORN", "\303\236" }, // Þ 222 { "szlig", "\303\237" }, // ß 223 { "agrave", "\303\240" }, // à 224 { "aacute", "\303\241" }, // á 225 { "acirc", "\303\242" }, // â 226 { "atilde", "\303\243" }, // ã 227 { "auml", "\303\244" }, // ä 228 { "aring", "\303\245" }, // å 229 { "aelig", "\303\246" }, // æ 230 { "ccedil", "\303\247" }, // ç 231 { "egrave", "\303\250" }, // è 232 { "eacute", "\303\251" }, // é 233 { "ecirc", "\303\252" }, // ê 234 { "euml", "\303\253" }, // ë 235 { "igrave", "\303\254" }, // ì 236 { "iacute", "\303\255" }, // í 237 { "icirc", "\303\256" }, // î 238 { "iuml", "\303\257" }, // ï 239 { "eth", "\303\260" }, // ð 240 { "ntilde", "\303\261" }, // ñ 241 { "ograve", "\303\262" }, // ò 242 { "oacute", "\303\263" }, // ó 243 { "ocirc", "\303\264" }, // ô 244 { "otilde", "\303\265" }, // õ 245 { "ouml", "\303\266" }, // ö 246 { "divide", "\303\267" }, // ÷ 247 { "oslash", "\303\270" }, // ø 248 { "ugrave", "\303\271" }, // ù 249 { "uacute", "\303\272" }, // ú 250 { "ucirc", "\303\273" }, // û 251 { "uuml", "\303\274" }, // ü 252 { "yacute", "\303\275" }, // ý 253 { "thorn", "\303\276" }, // þ 254 { "yuml", "\303\277" }, // ÿ 255 // And some random others { "bdquo", "\342\200\236" }, // ~ { "bull", "\342\200\242" }, // ~ { "circ", "\313\206" }, // ~ { "cong", "\342\211\205" }, // ~ { "empty", "\342\210\205" }, // ~ { "emsp", "\342\200\203" }, // ~ { "ensp", "\342\200\202" }, // ~ { "equiv", "\342\211\241" }, // ~ { "frasl", "\342\201\204" }, // ~ { "ge", "\342\211\245" }, // ~ { "hArr", "\342\207\224" }, // ~ { "harr", "\342\206\224" }, // ~ { "hellip", "\342\200\246" }, // ~ { "lArr", "\342\207\220" }, // ~ { "lang", "\342\237\250" }, // ~ { "larr", "\342\206\220" }, // ~ { "ldquo", "\342\200\234" }, // ~ { "le", "\342\211\244" }, // ~ { "lowast", "\342\210\227" }, // ~ { "loz", "\342\227\212" }, // ~ { "lsaquo", "\342\200\271" }, // ~ { "lsquo", "\342\200\230" }, // ~ { "mdash", "\342\200\224" }, // ~ { "minus", "\342\210\222" }, // ~ { "ndash", "\342\200\223" }, // ~ { "ne", "\342\211\240" }, // ~ { "OElig", "\305\222" }, // ~ { "oelig", "\305\223" }, // ~ { "prime", "\342\200\262" }, // ~ { "quot", "\342\200\235" }, // ~ { "rArr", "\342\207\222" }, // ~ { "rang", "\342\237\251" }, // ~ { "rarr", "\342\206\222" }, // ~ { "rdquo", "\342\200\235" }, // ~ { "rsaquo", "\342\200\272" }, // ~ { "rsquo", "\342\200\231" }, // ~ { "sbquo", "\342\200\232" }, // ~ { "sim", "\342\210\274" }, // ~ { "thinsp", "\342\200\211" }, // ~ { "tilde", "\313\234" }, // ~ { "trade", "\342\204\242" }, // ~ }; while (*in) { if (*in == '&') { int done = 0; if (in[1] == '#' && in[2] == 'x') { // A unsigned long i = 0; in += 2; while ((*in >= '0' && *in <= '9') || (*in >= 'A' && *in <= 'F') || (*in >= 'a' && *in <= 'f')) { i = (i * 16) + (*in >= 'a' ? *in - 'a' + 16 : *in >= 'A' ? *in - 'A' + 16 : *in - '0'); in++; } *out += utf8_encode (i, out, strlen(out)); done = 1; } else if (in[1] == '#') { // A unsigned long i = 0; in++; while (*in >= '0' && *in <= '9') { i = (i * 10) + (*in - '0'); in++; } *out += utf8_encode (i, out, strlen(out)); done = 1; } else { int i; for (i = 0; !done && i < countof(entities); i++) { if (!strncmp (in+1, entities[i].c, strlen(entities[i].c))) { strcpy (out, entities[i].e); in += strlen(entities[i].c) + 1; out += strlen(entities[i].e); done = 1; } } } if (done) { if (*in == ';') in++; } else { *out++ = *in++; } } else { *out++ = *in++; } } *out = 0; /* Shrink */ ret = realloc (ret, out - ret + 1); return ret; } /* Returns a copy of the HTML string that has been converted to plain text, in UTF8 encoding. HTML tags are stripped,
and

are converted to newlines, and some basic HTML entities are decoded. */ static char * textclient_strip_html (const char *html) { int tag = 0; int comment = 0; int white = 0; int nl = 0; char *ret = (char *) malloc ((strlen(html) * 4) + 1); // room for UTF8 char *out = ret; *out = 0; for (const char *in = html; *in; in++) { if (comment) { if (!strncmp (in, "-->", 3)) { comment = 0; } } else if (tag) { if (*in == '>') { tag = 0; } } else if (*in == '<') { tag = 1; if (!strncmp (in, " */ { char *e = strstr (in+4, "-->"); if (e) in = e + 3; } else if (!strncmp (in, "/*", 2)) /* ... */ { char *e = strstr (in+2, "*/"); if (e) in = e + 2; else *out++ = *in++; } else if (!strncmp (in, "{{Infobox", 9)) /* {{Infobox ... \n}}\n */ { char *e = strstr (in+2, "\n}}"); if (e) in = e + 3; else *out++ = *in++; } else if (!strncmp (in, "{{", 2)) /* {{ ...table... }} */ { char *e = strstr (in+2, "}}"); if (e) in = e + 2; else *out++ = *in++; } else if (!strncmp (in, "{|", 2)) /* {| ...table... |} */ { char *e = strstr (in+2, "|}"); if (e) in = e + 2; else *out++ = *in++; } else if (!strncmp (in, "|-", 2)) /* |- ...table cell... | */ { char *e = strstr (in+2, "|"); if (e) in = e + 1; else *out++ = *in++; } else if (!strncmp (in, "... -> "*" */ { char *e1 = strstr (in+4, "/>"); char *e2 = strstr (in+4, ""); if (e1 && e1 < e2) in = e1 + 2; else if (e2) in = e2 + 6; else *out++ = *in++; *out++ = '*'; } else if (!strncmp (in, "<", 1)) /* <...> */ { char *e = strstr (in+1, ">"); if (e) in = e + 1; else *out++ = *in++; } else if (!strncmp (in, "[[", 2)) /* [[ ... ]] */ { char *e1 = strstr (in+2, "|"); char *e2 = strstr (in+2, "]]"); if (e1 && e2 && e1 < e2) /* [[link|anchor]] */ { long L = e2 - e1 - 1; memmove (out, e1+1, L); out += L; in = e2+2; } else if (e2) /* [[link]] */ { long L = e2 - in - 2; memmove (out, in+2, L); out += L; in = e2+2; } else *out++ = *in++; } else if (!strncmp (in, "[", 1)) /* [ ... ] */ { char *e1 = strstr (in+2, " "); char *e2 = strstr (in+2, "]"); if (e1 && e2 && e1 < e2) /* [url anchor] */ { long L = e2 - e1 - 1; memmove (out, e1+1, L); out += L; in = e2+2; } else *out++ = *in++; } else if (!strncmp (in, "''''", 4)) /* omit '''' */ in += 4; else if (!strncmp (in, "'''", 3)) /* omit ''' */ in += 3; else if (!strncmp (in, "''", 2) || /* '' or `` or "" -> " */ !strncmp (in, "``", 2) || !strncmp (in, "\"\"", 2)) { *out++ = '"'; in += 2; } else { *out++ = *in++; } } *out = 0; /* Collapse newlines */ in = text; out = text; while (*in) { while (!strncmp(in, "\n\n\n", 3)) in++; *out++ = *in++; } *out = 0; } /* Returns a copy of the RSS document that has been converted to plain text, in UTF8 encoding. Rougly, it uses the contents of the field of each , and decodes HTML within it. */ static char * textclient_strip_rss (const char *rss) { char *ret = malloc (strlen(rss) * 4 + 1); // room for UTF8 char *out = ret; const char *a = 0, *b = 0, *c = 0, *d = 0, *t = 0; int head = 1; int done = 0; int wiki_p = !!strcasestr (rss, "MediaWiki"); *out = 0; for (const char *in = rss; *in; in++) { if (*in == '<') { if (!strncasecmp (in, ""); out += strlen (out); } } else if (head) { // still before first ; } else if (!strncasecmp (in, " columns && last_space) { *last_space = '\n'; col = col - last_col; } last_space = p; last_col = col; } if (*p == '\r' || *p == '\n') { col = 0; last_col = 0; last_space = 0; lines++; if (max_lines && lines >= max_lines) { *p = 0; break; } } else { col++; } } } 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, 0); } static void strip_backslashes (char *s) { char *out = s; for (char *in = s; *in; in++) { if (*in == '\\') { in++; if (*in == 'n') *out++ = '\n'; else if (*in == 'r') *out++ = '\r'; else if (*in == 't') *out++ = '\t'; else *out++ = *in; } else { *out++ = *in; } } *out = 0; } /* Load the raw body of a URL, and convert it to plain text. */ static char * mobile_url_text (Display *dpy, const char *url) { char *body = textclient_mobile_url_string (dpy, url); enum { RSS, HTML, TEXT } type; if (!body) return NULL; if (!strncasecmp (body, "fp || !*d->fp) { if (d->buf) { free (d->buf); d->buf = 0; d->fp = 0; } switch (d->mode) { case DATE: DATE: d->buf = textclient_mobile_date_string(); break; case LITERAL: if (!d->literal || !*d->literal) goto DATE; d->buf = (char *) malloc (strlen (d->literal) + 3); strcpy (d->buf, d->literal); strcat (d->buf, "\n"); strip_backslashes (d->buf); d->fp = d->buf; break; case URL: if (!d->url || !*d->url) goto DATE; d->buf = mobile_url_text (d->dpy, d->url); break; default: abort(); } if (d->columns > 10) wrap_text (d->buf, d->columns, d->max_lines); d->fp = d->buf; } if (!d->fp || !*d->fp) return -1; unsigned char c = (unsigned char) *d->fp++; return (int) c; } Bool 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, int max_lines) { d->columns = char_w; d->max_lines = max_lines; rewrap_text (d->buf, d->columns); } #endif /* whole file */ xscreensaver-5.36/utils/aligned_malloc.c000644 000767 000024 00000002357 12701612232 020377 0ustar00jwzstaff000000 000000 /* -*- mode: c; tab-width: 4; fill-column: 128 -*- */ /* vi: set ts=4 tw=128: */ /* aligned_malloc.c, Copyright (c) 2014 Dave Odell 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. */ #include "aligned_malloc.h" #include #include #if !ALIGNED_MALLOC_HAS_MEMALIGN #include #include int aligned_malloc(void **ptr, unsigned alignment, size_t size) { void *block_start; ptrdiff_t align1 = alignment - 1; assert(alignment && !(alignment & (alignment - 1))); /* alignment must be a power of two. */ size += sizeof(void *) + align1; block_start = malloc(size); if(!block_start) return ENOMEM; *ptr = (void *)(((ptrdiff_t)block_start + sizeof(void *) + align1) & ~align1); ((void **)(*ptr))[-1] = block_start; return 0; } void aligned_free(void *ptr) { free(((void **)(ptr))[-1]); } #endif xscreensaver-5.36/utils/thread_util.c000644 000767 000024 00000072313 12716377007 017766 0ustar00jwzstaff000000 000000 /* -*- mode: c; tab-width: 4; fill-column: 78 -*- */ /* vi: set ts=4 tw=78: */ /* thread_util.c, Copyright (c) 2014 Dave Odell 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. */ #if HAVE_CONFIG_H # include "config.h" #endif #include #include #include #include #include /* Only used by thread_memory_alignment(). */ #include #if HAVE_ALLOCA_H # include #endif #if HAVE_UNISTD_H # include #endif #if defined __MACH__ && defined __APPLE__ /* OS X, iOS */ # include # include #endif #include "thread_util.h" #include "aligned_malloc.h" #include "resources.h" #define IS_POWER_OF_2(x) ((x) > 0 && !((x) & ((x) - 1))) /* arraysize(a). Also known as countof(x), XtNumber(x), NELEMS(x), LEN(x), NUMOF(x), ARRAY_SIZE(x), etc., since the fine folks behind C never got around to including this incredibly useful macro in the standard library, which is where it belongs. Much of the code here assumes that multiple processors in a system all use the same cache line size...which might be wrong on occasion. */ #define arraysize(a) (sizeof(a) / sizeof(*(a))) #define arrayend(a) ((a) + arraysize(a)) /* These numbers are from: - Linux: arch/(arch name)/include/asm/cache.h, note L1_CACHE_BYTES/L1_CACHE_SHIFT/SMP_CACHE_BYTES. - FreeBSD: sys/(sys name)/include/param.h, note CACHE_LINE_SHIFT/CACHE_LINE_SIZE. Preprocessor symbols come from: - TARGET_CPU_CPP_BUILTINS() in the GNU C preprocessor - http://predef.sourceforge.net/ */ /* Several architectures need preprocessor symbols. Qualcomm Hexagon: 1 << 5 Imagination Technologies META: 1 << 6 OpenRISC: 16 (Linux has the cache line size as a todo.) Unicore: 1 << 5 */ #if HAVE_PTHREAD # if !HAVE_UNISTD_H # error unistd.h must be present whenever pthread.h is. # endif # if defined __MACH__ && defined __APPLE__ /* OS X, iOS */ # include /* For TARGET_OS_IPHONE. */ # ifdef TARGET_OS_IPHONE # define _CACHE_LINE_SIZE 64 # endif # endif # if defined __FreeBSD__ && !defined _CACHE_LINE_SIZE # include # ifdef CACHE_LINE_SIZE # define _CACHE_LINE_SIZE CACHE_LINE_SIZE # endif # endif # if !defined _CACHE_LINE_SIZE # if defined __alpha || defined __alpha__ /* DEC Alpha */ # define _CACHE_LINE_SIZE 64 /* EV6 and above. EV4 and EV5 use 32 bytes. */ # elif defined __arm__ /* ARM architecture */ # define _CACHE_LINE_SIZE (1 << 6) # elif defined __AVR || defined __AVR__ /* Atmel AVR32 */ # define _CACHE_LINE_SIZE (1 << 5) # elif defined __bfin || defined __BFIN__ /* Analog Devices Blackfin */ # define _CACHE_LINE_SIZE (1 << 5) # elif defined _TMS320C6X || defined __TMS320C6X__ /* Texas Instruments TMS320C6x */ # define _CACHE_LINE_SIZE (1 << 7) /* From L2. L1 data cache line is 1 << 6. */ # elif defined __cris /* Axis Communications ETRAX CRIS */ # define _CACHE_LINE_SIZE 32 # elif defined __ia64__ || defined _IA64 /* Intel Itanium */ # define _CACHE_LINE_SIZE (1 << 7) # elif defined __M32R__ || defined __m32r__ /* Mitsubishi/Renesas M32R */ # define _CACHE_LINE_SIZE (1 << 4) # elif defined __m68k__ || defined M68000 || defined __MC68K__ /* Motorola 68000 */ # define _CACHE_LINE_SIZE (1 << 4) # elif defined __MICROBLAZE__ || defined __microblaze__ /* Xilinx MicroBlaze */ # define _CACHE_LINE_SIZE (1 << 5) # elif defined __mips__ || defined __mips || defined __MIPS__ /* MIPS */ # define _CACHE_LINE_SIZE (1 << 6) # elif defined __mn10300__ || defined __MN10300__ /* Matsushita/Panasonic MN103 */ # define _CACHE_LINE_SIZE 32 /* MN103E010 has 16 bytes. */ # elif defined __hppa || defined __hppa__ /* Hewlett-Packard PA-RISC */ # define _CACHE_LINE_SIZE 64 /* PA-RISC 2.0 uses 64 bytes, PA-RISC 1.1 uses 32. */ # elif defined __powerpc || defined _ARCH_PPC /* Power Architecture (a.k.a. PowerPC) */ # define _CACHE_LINE_SIZE (1 << 7) /* Linux has a list of PPC models with associated L1_CACHE_SHIFT values. */ # elif defined __s390__ || defined __370__ || defined __zarch__ || defined __SYSC_ZARCH__ /* IBM System/390 */ # define _CACHE_LINE_SIZE 256 # elif defined SUNPLUS || defined __SCORE__ || defined __score__ /* Sunplus S+core */ # define _CACHE_LINE_SIZE (1 << 4) # elif defined __sh__ /* Hitachi SuperH */ # define _CACHE_LINE_SIZE (1 << 5) /* SH3 and earlier used 1 << 4. */ # elif defined __sparc__ || defined __sparc /* SPARC */ # define _CACHE_LINE_SIZE (1 << 7) /* Linux and FreeBSD disagree as to what this should be. */ # elif defined __tile__ /* Tilera TILE series */ # define _CACHE_LINE_SIZE (1 << 6) /* TILEPro uses different sizes for L1 and L2. */ # elif defined __i386 || defined __x86_64 /* x86(-64) */ # define _CACHE_LINE_SIZE (1 << 7) # elif defined __xtensa__ || defined __XTENSA__ /* Cadence Design Systems/Tensilica Xtensa */ # define _CACHE_LINE_SIZE (1 << 5) /* 1 << 4 on some models. */ # endif # endif /* !defined _CACHE_LINE_SIZE */ # if defined __NetBSD__ && !defined _CACHE_LINE_SIZE /* NetBSD defines COHERENCY_UNIT to be 32 on MIPS, and 64 for all other platforms -- which is wrong. Still, this is what the kernel uses; if this value didn't work, the system wouldn't run. */ # include # ifdef COHERENCY_UNIT # define _CACHE_LINE_SIZE COHERENCY_UNIT # endif # endif # ifndef _CACHE_LINE_SIZE # define _CACHE_LINE_SIZE 256 /* Fallback cache line size. */ # endif static unsigned _get_cache_line_size(void) { /* The general idea: - Try to get the actual cache line size from the operating system. - In the interest of keeping things simple, this only checks with glibc and OS X. - A few other methods that could be added: - Query x86 CPUs directly with the CPUID instruction. - Query various ELF systems through the auxillary vector. (Power, Alpha, SuperH) - Query Linux through /sys/devices/system/cpu/cpu?/cache/index?/coherency_line_size (x86 only, AFAIK) - Query Linux through cache_alignment in /proc/cpuinfo - Query Solaris through PICL. - If that fails, return a value appropriate for the current CPU architecture. - Otherwise, return a sufficiently large number. */ /* sysconf(3) is not a syscall, it's a glibc call that, for cache line sizes, uses CPUID on x86 and returns 0 on other platforms. If it were to work on most other platforms, it would have to get cache information from the kernel, since that information is usually made available by the processor only in privileged mode. https://sourceware.org/git/?p=glibc.git;a=blob;f=sysdeps/unix/sysv/linux/i386/sysconf.c;hb=HEAD */ /* uClibc, newlib, dietlibc, musl, Bionic do not have this. */ # if HAVE_UNISTD_H && ( \ defined _SC_LEVEL1_DCACHE_LINESIZE || \ defined _SC_LEVEL2_CACHE_LINESIZE || \ defined _SC_LEVEL3_CACHE_LINESIZE || \ defined _SC_LEVEL4_CACHE_LINESIZE) { static const int names[] = { # ifdef _SC_LEVEL1_DCACHE_LINESIZE _SC_LEVEL1_DCACHE_LINESIZE, # endif # ifdef _SC_LEVEL2_CACHE_LINESIZE _SC_LEVEL2_CACHE_LINESIZE, # endif # ifdef _SC_LEVEL3_CACHE_LINESIZE _SC_LEVEL3_CACHE_LINESIZE, # endif # ifdef _SC_LEVEL4_CACHE_LINESIZE _SC_LEVEL4_CACHE_LINESIZE # endif }; const int *name; long result = 0; for(name = names; name != arrayend(names); ++name) { long sysconf_result = sysconf(*name); /* Can return -1 or 0 on failure. */ if(sysconf_result > result) result = sysconf_result; } if(result) return result; /* Currently, this fails for every platform that isn't x86. Perhaps future versions will support other processors? */ } # endif # if defined __MACH__ && defined __APPLE__ { uint32_t result; /* sysctl.h says that hw.cachelinesize is a CTLTYPE_INT. */ size_t size = sizeof(result); static const int name[] = {CTL_HW, HW_CACHELINE}; if(!sysctl((int *)name, 2, &result, &size, NULL, 0)) /* (int *) is for OS X. */ { assert(size == sizeof(result)); return result; }; } # endif /* Guess based on the CPU type. */ return _CACHE_LINE_SIZE; } const pthread_mutex_t mutex_initializer = # if defined _GNU_SOURCE && !defined NDEBUG PTHREAD_ERRORCHECK_MUTEX_INITIALIZER_NP # else PTHREAD_MUTEX_INITIALIZER # endif ; const pthread_cond_t cond_initializer = PTHREAD_COND_INITIALIZER; static int _has_pthread = 0; /* Initialize when needed. */ static int _cache_line_size = sizeof(void *); /* This is actually the init function for various things in here. */ int threads_available(Display *dpy) { /* This is maybe not thread-safe, but: this should -- and generally will -- be called before the program launches its second thread. */ if(!_has_pthread) { # if _POSIX_THREADS _has_pthread = _POSIX_THREADS; # else _has_pthread = sysconf(_SC_THREADS); # endif if(_has_pthread >= 0) { if(get_boolean_resource(dpy, "useThreads", "Boolean")) { _cache_line_size = _get_cache_line_size(); assert(_cache_line_size >= sizeof(void *)); assert(IS_POWER_OF_2(_cache_line_size)); } else { _has_pthread = -1; } } } return _has_pthread; } #endif /* HAVE_PTHREAD */ /* hardware_concurrency() - Various platforms offer various statistics that look like they should be useful: sysconf(_SC_NPROCESSORS_ONLN) (i.e. the number of 'online' processors) in particular is available on many Unixes, and is frequently used for functions like hardware_concurrency(). But 'online' is somewhat ambiguous; it can mean: 1. The number of CPU cores that are not (temporarily) asleep. (e.g. Android can sometimes put cores to sleep if they aren't being used, and this is reflected in _SC_NPROCESSORS_ONLN.) 2. The maximum number of CPU cores that can be provided to this application, as currently set by the system administrator. (2) is the one that hardware_concurrency() ultimately needs. */ /* Shamelessly plagarized from Boost.Thread and Stack Overflow . GNU libstdc++ has some of this too, see thread::hardware_concurrency() in thread.cc. http://gcc.gnu.org/viewcvs/gcc/trunk/libstdc%2B%2B-v3/src/c%2B%2B11/thread.cc?view=markup This might not work right on less common systems for various reasons. */ #if HAVE_PTHREAD # if defined __APPLE__ && defined __MACH__ || \ defined __FreeBSD__ || \ defined __OpenBSD__ || \ defined __NetBSD__ || \ defined __DragonFly__ || \ defined __minix /* BSD Unixes use sysctl(3) for this. Some BSDs also support sysconf(3) for this, but in each case this was added after sysctl(3). Linux: sysctl is present, but strongly deprecated. Minix uses the NetBSD userspace, so it has both this and sysconf(3). QNX: sysctl is present for kern.* and net.*, but it doesn't say anything about hw.* */ /* __APPLE__ without __MACH__ is OS 9 or earlier. __APPLE__ with __MACH__ is OS X. */ /* The usual thing to do here is for sysctl(3) to call __sysctl(2). http://cvsweb.netbsd.org/bsdweb.cgi/src/lib/libc/gen/sysctl.c?only_with_tag=HEAD http://svnweb.freebsd.org/base/head/lib/libc/gen/sysctl.c?view=markup */ /* OS X: Xcode Instruments (as of Xcode 4; Apple likes to move things like this around) can disable CPUs as a debugging tool. Instruments -> Preferences... (Command-,) -> General -> Active Processor Cores FreeBSD, OpenBSD: It doesn't look like CPUs can be disabled. NetBSD: CPUs can be disabled manually through cpuctl(8). */ # include /* FreeBSD: sys/sysctl.h needs sys/types.h, but the one doesn't bring the other in automatically. */ # include # include static unsigned _hardware_concurrency(void) { int count; size_t size = sizeof(count); # if defined __APPLE__ && defined __MACH__ /* Apple sez: sysctl("hw.logicalcpu") is affected by the "current power management mode", so use hw.logicalcpu_max. */ /* https://developer.apple.com/library/mac/#documentation/Darwin/Reference/ManPages/man3/sysctl.3.html */ if(!sysctlbyname("hw.logicalcpu_max", &count, &size, NULL, 0)) /* Preferred on more recent Darwin. */ { assert(size == sizeof(count)); return count; } # endif # if defined HW_NCPUONLINE /* NetBSD has this. */ { static const int name[] = {CTL_HW, HW_NCPUONLINE}; if(!sysctl(name, 2, &count, &size, NULL, 0)) { assert(size == sizeof(count)); return count; } } # endif { static const int name[] = {CTL_HW, HW_NCPU}; if(!sysctl((int *)name, 2, &count, &size, NULL, 0)) /* (int *) is for OS X. */ { assert(size == sizeof(count)); return count; } } return 1; } # elif HAVE_UNISTD_H && defined _SC_NPROCESSORS_ONLN /* Supported by: Linux 2.0 was the first version to provide SMP support via clone(2). (e)glibc on Linux provides this, which in turn uses get_nprocs(). get_nprocs in turn uses /sys/devices/system/cpu/online, /proc/stat, or /proc/cpuinfo, whichever's available. https://sourceware.org/git/?p=glibc.git;a=blob;f=posix/sysconf.c;hb=HEAD https://sourceware.org/git/?p=glibc.git;a=blob;f=sysdeps/unix/sysv/linux/getsysstats.c;hb=HEAD Linux usually isn't configured to auto-enable/disable cores. SunOS (Solaris), sometime between 4.1.3 and 5.5.1. This includes all open source derivatives of 5.10. (Illumos, OpenIndiana) sysconf(_SC_NPROCESSORS_ONLN) call _sysconfig(2). Not sure if CPU power management (enabled by default, see cpupm and cpu_deep_idle in power.conf(4)) affects this. psradm(1M) can bring up/down CPU cores, which affects sysconf(_SC_NPROCESSORS_ONLN). http://src.illumos.org/source/xref/illumos-gate/usr/src/lib/libc/port/gen/sysconf.c Minix 3.2, at the latest. (This is the first version to support SMP.) AIX 7.1, probably earlier. Also: Mac OS X apparently has this on 10.5+. FreeBSD 5.0, NetBSD 5.0 also have this. They both call sysctl(3). http://svnweb.freebsd.org/base/head/lib/libc/gen/sysconf.c?view=markup http://cvsweb.netbsd.org/bsdweb.cgi/src/lib/libc/gen/sysconf.c?only_with_tag=HEAD QNX has sysconf(3), but it doesn't have _SC_NPROCESSORS_*. */ static unsigned _hardware_concurrency(void) { long count = sysconf(_SC_NPROCESSORS_ONLN); return count > 0 ? count : 1; } # else static unsigned _hardware_concurrency(void) { return 1; /* Fallback for unknown systems. */ } # endif #endif unsigned hardware_concurrency(Display *dpy) { #if HAVE_PTHREAD if(threads_available(dpy) >= 0) return _hardware_concurrency(); #endif return 1; } /* thread_memory_alignment() - */ unsigned thread_memory_alignment(Display *dpy) { (void)threads_available(dpy); #if HAVE_PTHREAD return _cache_line_size; #else return sizeof(void *); #endif } /* Thread pool - */ static unsigned _threadpool_count_serial(struct threadpool *self) { #if HAVE_PTHREAD assert(_has_pthread); if(_has_pthread >= 0) return self->count ? 1 : 0; #endif return self->count; } static void _serial_destroy(struct threadpool *self) { void *thread = self->serial_threads; unsigned i, count = _threadpool_count_serial(self); for(i = 0; i != count; ++i) { self->thread_destroy(thread); thread = (char *)thread + self->thread_size; } free(self->serial_threads); } #if HAVE_PTHREAD static void _parallel_abort(struct threadpool *self) { assert(self->count > 1); self->count = self->parallel_unfinished + 1 /* The '+ 1' should technically be _threadpool_count_serial(self). */; PTHREAD_VERIFY(pthread_cond_broadcast(&self->cond)); } struct _parallel_startup_type { struct threadpool *parent; int (*thread_create)(void *self, struct threadpool *pool, unsigned id); int last_errno; }; static unsigned _threadpool_count_parallel(struct threadpool *self) { assert(_has_pthread); assert(self->count >= 1); return self->count - 1 /* The '- 1' should technically be _threadpool_count_serial(self). */; } static void *_start_routine(void *startup_raw); /* Tricky lock sequence: _add_next_thread unlocks on error. */ static void _add_next_thread(struct _parallel_startup_type *self) { assert(!self->last_errno); if(self->parent->parallel_unfinished == _threadpool_count_parallel(self->parent)) { PTHREAD_VERIFY(pthread_cond_broadcast(&self->parent->cond)); } else { pthread_t *thread = self->parent->parallel_threads + self->parent->parallel_unfinished; self->last_errno = pthread_create(thread, NULL, _start_routine, self); if(self->last_errno) _parallel_abort(self->parent); } } static void *_thread_free_and_unlock(struct threadpool *self, void *thread) { PTHREAD_VERIFY(pthread_mutex_unlock(&self->mutex)); # if !HAVE_ALLOCA thread_free(thread); # endif return NULL; } static void *_thread_destroy_and_unlock(struct threadpool *self, void *thread) { self->thread_destroy(thread); return _thread_free_and_unlock(self, thread); } /* At one point, one of the threads refused to destroy itself at the end. Why?! And why won't it happen again? */ static void *_start_routine(void *startup_raw) { struct _parallel_startup_type *startup = (struct _parallel_startup_type *)startup_raw; struct threadpool *parent = startup->parent; void *thread; PTHREAD_VERIFY(pthread_mutex_lock(&parent->mutex)); ++parent->parallel_unfinished; # if HAVE_ALLOCA /* Ideally, the thread object goes on the thread's stack. This guarantees no false sharing with other threads, and in a NUMA configuration, ensures that the thread object is using memory from the right node. */ thread = alloca(parent->thread_size); # else startup->last_errno = thread_malloc(&thread, NULL, parent->thread_size); if(startup->last_errno) { _parallel_abort(parent); PTHREAD_VERIFY(pthread_mutex_unlock(&parent->mutex)); return NULL; } # endif /* Setting thread affinity for threads running in lock-step can cause delays and jumpiness. Ideally, there would be some way to recommend (but not require) that a thread run on a certain core/set of cores. */ /* Neither Linux nor libnuma seem to support the concept of a preferred/ideal CPU for a thread/process. */ /* Untested. */ /* { cpu_set_t cpu_set; CPU_ZERO(&cpu_set); CPU_SET(&cpu_set, &parent._threads_unfinished); pthread_setaffinity_np(pthread_self(), sizeof(cpu_set_t), &cpu_set); } */ startup->last_errno = startup->thread_create(thread, parent, parent->parallel_unfinished); if(startup->last_errno) { _parallel_abort(parent); return _thread_free_and_unlock(parent, thread); /* Tail calls make everything better. */ } assert(!startup->last_errno); _add_next_thread(startup); /* Calls _parallel_abort() on failure. */ if(startup->last_errno) return _thread_destroy_and_unlock(parent, thread); for(;;) { for(;;) { /* This must come before the '.threads' check, otherwise if threadpool_destroy is called immediately after a run starts, then it's possible that not all threads would be launched for the final run. This can cause deadlock in conjunction with things like barriers. */ if(parent->parallel_pending) break; /* Start a run. */ if(!parent->parallel_threads) return _thread_destroy_and_unlock(parent, thread); /* Threads are shutting down. */ PTHREAD_VERIFY(pthread_cond_wait(&parent->cond, &parent->mutex)); } --parent->parallel_pending; if(!parent->parallel_pending) PTHREAD_VERIFY(pthread_cond_broadcast(&parent->cond)); /* All threads have started processing, other threads can finish. */ PTHREAD_VERIFY(pthread_mutex_unlock(&parent->mutex)); parent->thread_run(thread); PTHREAD_VERIFY(pthread_mutex_lock(&parent->mutex)); # if 0 if(!parent->parallel_threads) /* I don't think this is necessary anymore. */ break; # endif /* Don't loop around until all other threads have begun processing. */ /* I suspect it doesn't matter whether this comes before or after the threads_unfinished check. */ while(parent->parallel_pending) PTHREAD_VERIFY(pthread_cond_wait(&parent->cond, &parent->mutex)); --parent->parallel_unfinished; if(!parent->parallel_unfinished) PTHREAD_VERIFY(pthread_cond_broadcast(&parent->cond)); /* All threads done for now. */ } /* return _thread_destroy_and_unlock(parent, thread); */ } static void _unlock_and_destroy(struct threadpool *self) { pthread_t *threads; threads = self->parallel_threads; self->parallel_threads = NULL; if(threads) PTHREAD_VERIFY(pthread_cond_broadcast(&self->cond)); PTHREAD_VERIFY(pthread_mutex_unlock(&self->mutex)); if(threads) { unsigned i, count = _threadpool_count_parallel(self); for(i = 0; i != count; ++i) PTHREAD_VERIFY(pthread_join(threads[i], NULL)); free(threads); PTHREAD_VERIFY(pthread_cond_destroy(&self->cond)); PTHREAD_VERIFY(pthread_mutex_destroy(&self->mutex)); } _serial_destroy(self); } #endif /* HAVE_PTHREAD */ int threadpool_create(struct threadpool *self, const struct threadpool_class *cls, Display *dpy, unsigned count) { (void)threads_available(dpy); self->count = count; /* If threads are not present, run each "thread" in sequence on the calling thread. Otherwise, only run the first thread on the main thread. */ assert(cls); self->thread_size = cls->size; self->thread_destroy = cls->destroy; { void *thread; unsigned i, count_serial = _threadpool_count_serial(self); if(count_serial) { thread = malloc(cls->size * count_serial); if(!thread) return ENOMEM; } else { /* Might as well skip the malloc. */ thread = NULL; } self->serial_threads = thread; for(i = 0; i != count_serial; ++i) { int error = cls->create(thread, self, i); if(error) { self->count = i; _serial_destroy(self); return error; } thread = (char *)thread + self->thread_size; } } #if HAVE_PTHREAD assert(_has_pthread); /* _has_pthread should be either -1 or >0. */ if(_has_pthread >= 0) { unsigned count_parallel = _threadpool_count_parallel(self); self->mutex = mutex_initializer; self->cond = cond_initializer; self->parallel_pending = 0; self->parallel_unfinished = 0; if(!count_parallel) { self->parallel_threads = NULL; return 0; } self->parallel_threads = malloc(sizeof(pthread_t) * count_parallel); if(!self->parallel_threads) return ENOMEM; { struct _parallel_startup_type startup; startup.parent = self; startup.thread_create = cls->create; startup.last_errno = 0; PTHREAD_VERIFY(pthread_mutex_lock(&self->mutex)); _add_next_thread(&startup); if(!startup.last_errno) { while(self->parallel_unfinished != count_parallel && self->parallel_threads) PTHREAD_VERIFY(pthread_cond_wait(&self->cond, &self->mutex)); } /* This must come after the if(!startup.last_errno). */ if(startup.last_errno) { _unlock_and_destroy(self); } else { self->parallel_unfinished = 0; PTHREAD_VERIFY(pthread_mutex_unlock(&self->mutex)); } return startup.last_errno; } } #endif return 0; } void threadpool_destroy(struct threadpool *self) { #if HAVE_PTHREAD if(_has_pthread >= 0) { PTHREAD_VERIFY(pthread_mutex_lock(&self->mutex)); _unlock_and_destroy(self); return; } #endif _serial_destroy(self); } void threadpool_run(struct threadpool *self, void (*func)(void *)) { #if HAVE_PTHREAD if(_has_pthread >= 0) { unsigned count = _threadpool_count_parallel(self); PTHREAD_VERIFY(pthread_mutex_lock(&self->mutex)); /* Do not call threadpool_run() twice without a threadpool_wait() in the middle. */ assert(!self->parallel_pending); assert(!self->parallel_unfinished); self->parallel_pending = count; self->parallel_unfinished = count; self->thread_run = func; PTHREAD_VERIFY(pthread_cond_broadcast(&self->cond)); PTHREAD_VERIFY(pthread_mutex_unlock(&self->mutex)); } #endif /* It's perfectly valid to move this to the beginning of threadpool_wait(). */ { void *thread = self->serial_threads; unsigned i, count = _threadpool_count_serial(self); for(i = 0; i != count; ++i) { func(thread); thread = (char *)thread + self->thread_size; } } } void threadpool_wait(struct threadpool *self) { #if HAVE_PTHREAD if(_has_pthread >= 0) { PTHREAD_VERIFY(pthread_mutex_lock(&self->mutex)); while(self->parallel_unfinished) PTHREAD_VERIFY(pthread_cond_wait(&self->cond, &self->mutex)); PTHREAD_VERIFY(pthread_mutex_unlock(&self->mutex)); } #endif } /* io_thread - */ #if HAVE_PTHREAD /* Without threads at compile time, there's only stubs in thread_util.h. */ # define VERSION_CHECK(cc_major, cc_minor, req_major, req_minor) \ ((cc_major) > (req_major) || \ (cc_major) == (req_major) && (cc_minor) >= (req_minor)) # if defined(__GNUC__) && (__GNUC__ > 4 || __GNUC__ == 4 && __GNUC_MINOR__ >= 7) || \ defined(__clang__) && \ (!defined(__apple_build_version__) && VERSION_CHECK(__clang_major__, __clang_minor__, 3, 1) || \ defined(__apple_build_version__) && VERSION_CHECK(__clang_major__, __clang_minor__, 3, 1)) || \ defined(__ICC) && __ICC >= 1400 /* Clang 3.0 has a partial implementation of GNU atomics; 3.1 rounds it out. http://llvm.org/viewvc/llvm-project/cfe/tags/RELEASE_30/final/include/clang/Basic/Builtins.def?view=markup http://llvm.org/viewvc/llvm-project/cfe/tags/RELEASE_31/final/include/clang/Basic/Builtins.def?view=markup Apple changes the Clang version to track Xcode versions; use __apple_build_version__ to distinguish between the two. Xcode 4.3 uses Apple LLVM 3.1, which corresponds to Clang 3.1. https://en.wikipedia.org/wiki/Xcode Earlier versions of Intel C++ may also support these intrinsics. */ #define _status_load(status) (__atomic_load_n((status), __ATOMIC_SEQ_CST)) #define _status_exchange(obj, desired) (__atomic_exchange_n((obj), (desired), __ATOMIC_SEQ_CST)) /* C11 atomics are around the corner, but they're not here yet for many systems. (Including mine.) */ /* #elif __STDC_VERSION__ >= 201112l && !defined __STDC_NO_ATOMICS__ #include #define _status_load(status) (atomic_load((status))) #define _status_exchange(obj, desired) (atomic_exchange((obj), (desired))) */ /* Solaris profiles atomic ops on at least Solaris 10. See atomic_swap(3C) and membar_ops(3C). This would probably also need a snippet in configure.in. http://graegert.com/programming/using-atomic-operations-in-c-on-solaris-10 */ # else /* No atomic variables, so here's some ugly mutex-based code instead. */ /* Nothing ever destroys this mutex. */ pthread_mutex_t _global_mutex = PTHREAD_MUTEX_INITIALIZER; #define _lock() PTHREAD_VERIFY(pthread_mutex_lock(&_global_mutex)) #define _unlock() PTHREAD_VERIFY(pthread_mutex_unlock(&_global_mutex)) static enum _io_thread_status _status_load(enum _io_thread_status *status) { enum _io_thread_status result; _lock(); result = *status; _unlock(); return result; } static enum _io_thread_status _status_exchange(enum _io_thread_status *obj, enum _io_thread_status desired) { enum _io_thread_status result; _lock(); result = *obj; *obj = desired; _unlock(); return result; } # endif void *io_thread_create(struct io_thread *self, void *parent, void *(*start_routine)(void *), Display *dpy, unsigned stacksize) { if(threads_available(dpy) >= 0) { int error; pthread_attr_t attr; pthread_attr_t *attr_ptr = NULL; if(stacksize) { attr_ptr = &attr; if(pthread_attr_init(&attr)) return NULL; # if defined _POSIX_SOURCE || defined _POSIX_C_SOURCE || defined _XOPEN_SOURCE /* PTHREAD_STACK_MIN needs the above test. */ assert(stacksize >= PTHREAD_STACK_MIN); # endif PTHREAD_VERIFY(pthread_attr_setstacksize(&attr, stacksize)); } /* This doesn't need to be an atomic store, since pthread_create(3) "synchronizes memory with respect to other threads". http://pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap04.html#tag_04_11 */ self->status = _io_thread_working; error = pthread_create(&self->thread, attr_ptr, start_routine, parent); assert(!error || error == EAGAIN); if(error) parent = NULL; if(attr_ptr) PTHREAD_VERIFY(pthread_attr_destroy(attr_ptr)); return parent; } return NULL; } int io_thread_return(struct io_thread *self) { if(_has_pthread >= 0) { enum _io_thread_status old_status = _status_exchange(&self->status, _io_thread_done); assert(old_status == _io_thread_working || old_status == _io_thread_cancelled); return old_status != _io_thread_working; } return 0; } int io_thread_is_done(struct io_thread *self) { if(_has_pthread >= 0) { int result = _status_load(&self->status); assert(result != _io_thread_cancelled); return result; } return 1; } int io_thread_cancel(struct io_thread *self) { if(_has_pthread >= 0) { enum _io_thread_status old_status = _status_exchange(&self->status, _io_thread_cancelled); assert(old_status == _io_thread_working || old_status == _io_thread_done); PTHREAD_VERIFY(pthread_detach(self->thread)); return old_status != _io_thread_working; } return 0; } void io_thread_finish(struct io_thread *self) { if(_has_pthread >= 0) { # ifndef NDEBUG enum _io_thread_status status = _status_load(&self->status); assert(status == _io_thread_working || status == _io_thread_done); # endif PTHREAD_VERIFY(pthread_join(self->thread, NULL)); assert(_status_load(&self->status) == _io_thread_done); } } #endif /* HAVE_PTHREAD */ xscreensaver-5.36/utils/async_netdb.c000664 000767 000024 00000025714 12701612232 017742 0ustar00jwzstaff000000 000000 /* vi: set tw=78: */ /* async_netdb.c, Copyright (c) Dave Odell * * 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. * * Threaded versions of get(name/addr)info to replace calls to * gethostby(name/addr), for Sonar. */ #include "async_netdb.h" #include "thread_util.h" #include #include #include #include #include #include /* This is very much system-dependent, but hopefully 64K covers it just about everywhere. The threads here shouldn't need much. */ #define ASYNC_NETDB_STACK 65536 #if ASYNC_NETDB_USE_GAI # define _get_addr_family(addr) ((addr)->x_sockaddr_storage.ss_family) # define _get_addr_len(addr) ((addr)->x_sockaddr_storage.ss_len) static int _has_threads; int _async_netdb_is_done (struct io_thread *io) { if (_has_threads >= 0) return io_thread_is_done (io); return 1; } #else /* ASYNC_NETDB_USE_GAI */ # define _get_addr_family(addr) ((addr)->x_sockaddr_in.sin_family) # define _get_addr_len(addr) ((addr)->x_sockaddr_in.sin_len) static const int _has_threads = -1; # if ASYNC_NETDB_FAKE_EAI const char *_async_netdb_strerror (int errcode) { /* (h)strerror should return messages in the user's preferred language. */ /* On Solaris, gethostbyname(3) is in libnsl, but hstrerror(3) is in libresolv. Not that it matters, since Solaris has real gai_strerror in libsocket. */ switch (errcode) { case EAI_NONAME: return hstrerror (HOST_NOT_FOUND); case EAI_AGAIN: return hstrerror (TRY_AGAIN); case EAI_FAIL: return hstrerror (NO_RECOVERY); case EAI_MEMORY: return strerror (ENOMEM); } /* case EAI_SYSTEM: default: */ return strerror (EINVAL); /* No good errno equivalent here. */ } # endif /* ASYNC_NETDB_FAKE_EAI */ #endif /* !ASYNC_NETDB_USE_GAI */ static int _translate_h_errno (int error) { switch (error) { case HOST_NOT_FOUND: case NO_DATA: return EAI_NONAME; case TRY_AGAIN: return EAI_AGAIN; } /* case NO_RECOVERY: default: */ return EAI_FAIL; } /* async_name_from_addr - */ #if ASYNC_NETDB_USE_GAI static void * _async_name_from_addr_thread (void *self_raw) { /* The stack is unusually small here. If this crashes, you may need to bump the value of ASYNC_NETDB_STACK. */ async_name_from_addr_t self = (async_name_from_addr_t)self_raw; /* getnameinfo() is thread-safe, gethostbyaddr() is not. */ self->gai_error = getnameinfo ((void *)&self->param.addr, self->param.addrlen, self->host, sizeof(self->host), NULL, 0, NI_NAMEREQD); /* Removing NI_MAKEREQD would require a call to inet_ntoa in async_name_from_addr_finish. */ self->errno_error = errno; if (io_thread_return (&self->io)) thread_free(self); return NULL; } #endif /* ASYNC_NETDB_USE_GAI */ static void _async_name_from_addr_set_param (struct _async_name_from_addr_param *self, const struct sockaddr *addr, socklen_t addrlen) { self->addrlen = addrlen; memcpy (&self->addr, addr, addrlen); #if HAVE_STRUCT_SOCKADDR_SA_LEN _get_addr_len (&self->addr) = addrlen; /* The BSDs need this. */ #endif } async_name_from_addr_t async_name_from_addr_start (Display *dpy, const struct sockaddr *addr, socklen_t addrlen) { assert (addrlen); assert (addrlen <= sizeof (async_netdb_sockaddr_storage_t)); #if ASYNC_NETDB_USE_GAI _has_threads = threads_available (dpy); if (_has_threads >= 0) { async_name_from_addr_t self, result; if (thread_malloc ((void **)&self, dpy, sizeof (struct async_name_from_addr))) return NULL; _async_name_from_addr_set_param (&self->param, addr, addrlen); result = io_thread_create (&self->io, self, _async_name_from_addr_thread, dpy, ASYNC_NETDB_STACK); if (!result) thread_free (self); return result; } #endif /* ASYNC_NETDB_USE_GAI */ { struct _async_name_from_addr_param *result = (struct _async_name_from_addr_param *) malloc (sizeof (struct _async_name_from_addr_param)); if (result) _async_name_from_addr_set_param (result, addr, addrlen); return (async_name_from_addr_t)result; } } #if ASYNC_NETDB_USE_GAI void async_name_from_addr_cancel (async_name_from_addr_t self) { if (_has_threads >= 0) { if(io_thread_cancel (&self->io)) thread_free (self); } else { free (self); } } #endif /* ASYNC_NETDB_USE_GAI */ int async_name_from_addr_finish (async_name_from_addr_t self_raw, char **host, int *errno_error) { #if ASYNC_NETDB_USE_GAI if (_has_threads >= 0) { async_name_from_addr_t self = self_raw; int gai_error; io_thread_finish (&self->io); gai_error = self->gai_error; if (gai_error) { if (errno_error) *errno_error = self->errno_error; *host = NULL; /* For safety's sake. */ } else { *host = strdup(self->host); if (!*host) gai_error = EAI_MEMORY; } thread_free (self); return gai_error; } #endif /* ASYNC_NETDB_USE_GAI */ { struct _async_name_from_addr_param *self = (struct _async_name_from_addr_param *)self_raw; const struct hostent *he; int error; const void *raw_addr; socklen_t addrlen; switch (_get_addr_family (&self->addr)) { case AF_INET: raw_addr = &self->addr.x_sockaddr_in.sin_addr; addrlen = 4; break; #if ASYNC_NETDB_USE_GAI case AF_INET6: raw_addr = &self->addr.x_sockaddr_in6.sin6_addr; addrlen = 16; break; #endif /* ASYNC_NETDB_USE_GAI */ default: return EAI_NONAME; } he = gethostbyaddr(raw_addr, addrlen, _get_addr_family (&self->addr)); error = h_errno; free (self); if (!he) { *host = NULL; /* For safety's sake. */ return _translate_h_errno(error); } if (!he->h_name) return EAI_NONAME; *host = strdup (he->h_name); if (!*host) return EAI_MEMORY; return 0; } } /* async_addr_from_name - */ static char * _async_addr_from_name_hostname (async_addr_from_name_t self) { return (char *)(self + 1); } static void _async_addr_from_name_free (async_addr_from_name_t self) { #if ASYNC_NETDB_USE_GAI if (self->res) /* FreeBSD won't do freeaddrinfo (NULL). */ freeaddrinfo (self->res); #endif thread_free (self); } #if ASYNC_NETDB_USE_GAI static void * _async_addr_from_name_thread (void *self_raw) { /* The stack is unusually small here. If this crashes, you may need to bump the value of ASYNC_NETDB_STACK. */ async_addr_from_name_t self = (async_addr_from_name_t)self_raw; self->gai_error = getaddrinfo (_async_addr_from_name_hostname (self), NULL, NULL, &self->res); self->errno_error = errno; if (io_thread_return (&self->io)) _async_addr_from_name_free (self); return NULL; } #endif /* ASYNC_NETDB_USE_GAI */ /* getaddrinfo supports more than a hostname, but gethostbyname does not. */ async_addr_from_name_t async_addr_from_name_start (Display *dpy, const char *hostname) { async_addr_from_name_t self; if (thread_malloc ((void **)&self, dpy, sizeof(struct async_addr_from_name) + strlen(hostname) + 1)) return NULL; strcpy (_async_addr_from_name_hostname (self), hostname); #if ASYNC_NETDB_USE_GAI _has_threads = threads_available (dpy); self->res = NULL; if (_has_threads >= 0) { async_addr_from_name_t result = io_thread_create (&self->io, self, _async_addr_from_name_thread, dpy, ASYNC_NETDB_STACK); if (!result) thread_free(result); self = result; } #endif /* ASYNC_NETDB_USE_GAI */ return self; } #if ASYNC_NETDB_USE_GAI void async_addr_from_name_cancel (async_addr_from_name_t self) { if (_has_threads >= 0) { if (io_thread_cancel (&self->io)) _async_addr_from_name_free (self); } else { thread_free (self); } } #endif /* ASYNC_NETDB_USE_GAI */ /* async_name_from_addr_finish does sockaddr_in or sockaddr_in6. */ int async_addr_from_name_finish (async_addr_from_name_t self, void *addr, socklen_t *addrlen, int *errno_error) { #if ASYNC_NETDB_USE_GAI if (_has_threads >= 0) { int gai_error; io_thread_finish (&self->io); gai_error = self->gai_error; if (errno_error) *errno_error = self->errno_error; if (!gai_error) { struct addrinfo *ai = self->res; if (!ai) gai_error = EAI_NONAME; else { assert (ai->ai_addrlen <= sizeof (async_netdb_sockaddr_storage_t)); memcpy (addr, ai->ai_addr, ai->ai_addrlen); *addrlen = ai->ai_addrlen; } } _async_addr_from_name_free (self); return gai_error; } #endif /* ASYNC_NETDB_USE_GAI */ { struct hostent *he = gethostbyname (_async_addr_from_name_hostname (self)); int error = h_errno; void *raw_addr; async_netdb_sockaddr_storage_t *addr_storage = (async_netdb_sockaddr_storage_t *)addr; _async_addr_from_name_free (self); if (!he) return _translate_h_errno (error); switch (he->h_addrtype) { case AF_INET: { struct sockaddr_in *addr_in = (struct sockaddr_in *)addr; addr_in->sin_port = 0; raw_addr = &addr_in->sin_addr; *addrlen = sizeof(*addr_in); assert (he->h_length == 4); } break; #if ASYNC_NETDB_USE_GAI case AF_INET6: { struct sockaddr_in6 *addr_in6 = (struct sockaddr_in6 *)addr; addr_in6->sin6_port = 0; addr_in6->sin6_flowinfo = 0; raw_addr = &addr_in6->sin6_addr; *addrlen = sizeof(*addr_in6); assert (he->h_length == 16); } break; #endif /* ASYNC_NETDB_USE_GAI */ default: return EAI_NONAME; } #if HAVE_STRUCT_SOCKADDR_SA_LEN _get_addr_len (addr_storage) = *addrlen; #endif _get_addr_family (addr_storage) = he->h_addrtype; memcpy (raw_addr, he->h_addr_list[0], he->h_length); return 0; } } /* Local Variables: */ /* mode: c */ /* fill-column: 78 */ /* c-file-style: "gnu" */ /* c-basic-offset: 2 */ /* indent-tabs-mode: nil */ /* End: */ xscreensaver-5.36/utils/xft.c000644 000767 000024 00000021672 12716404747 016267 0ustar00jwzstaff000000 000000 /* xscreensaver, Copyright (c) 2014-2016 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. */ /* Compatibility layer using XDrawString, XDrawString16() or Xutf8DrawString(). This layer is used by X11 systems without Xft, and by MacOS / iOS. */ #ifdef HAVE_CONFIG_H # include "config.h" #endif #ifndef HAVE_XFT # include "utils.h" # include "resources.h" # include "xft.h" # include "utf8wc.h" extern const char *progname; struct _XftDraw { Display *dpy; Drawable drawable; GC gc; unsigned long pixel; Font fid; Visual *visual; Colormap colormap; }; XftFont * XftFontOpenXlfd (Display *dpy, int screen, _Xconst char *xlfd) { XftFont *ff = (XftFont *) calloc (1, sizeof(*ff)); if (!dpy || !xlfd) abort(); if (!ff) return 0; ff->xfont = XLoadQueryFont (dpy, xlfd); if (!ff->xfont) { free (ff); return 0; } ff->name = strdup (xlfd); ff->ascent = ff->xfont->ascent; ff->descent = ff->xfont->descent; ff->height = ff->ascent + ff->descent; # ifdef HAVE_XUTF8DRAWSTRING { unsigned i; // In the event of -*-random-* (under JWXYZ), get the actual XLFD, // otherwise we'll get another random font that doesn't match ff->xfont. char *xlfd_resolved = NULL; char **missing_charset_list_return; int missing_charset_count_return; char *def_string_return; char *ss; for (i = 0; i != ff->xfont->n_properties; ++i) { if (ff->xfont->properties[i].name == XA_FONT) { xlfd_resolved = XGetAtomName (dpy, ff->xfont->properties[i].card32); if (xlfd_resolved) xlfd = xlfd_resolved; break; } } ss = (char *) malloc (strlen(xlfd) + 10); strcpy (ss, xlfd); strcat (ss, ",*"); ff->fontset = XCreateFontSet (dpy, ss, &missing_charset_list_return, &missing_charset_count_return, &def_string_return); # if 0 { int i; for (i = 0; i < missing_charset_count_return; i++) fprintf (stderr, "%s: missing charset: %s\n", ss, missing_charset_list_return[i]); } # endif /* Apparently this is not to be freed. */ /* if (def_string_return) XFree (def_string_return); */ if (missing_charset_list_return) XFreeStringList (missing_charset_list_return); free (ss); free (xlfd_resolved); } # endif return ff; } void XftFontClose (Display *dpy, XftFont *font) { if (!dpy || !font) abort(); free (font->name); XFreeFont (dpy, font->xfont); # ifdef HAVE_XUTF8DRAWSTRING XFreeFontSet (dpy, font->fontset); # endif free (font); } Bool XftColorAllocName (Display *dpy, _Xconst Visual *visual, Colormap cmap, _Xconst char *name, XftColor *result) { XColor color; if (!dpy || !visual || !name || !result) abort(); if (! XParseColor (dpy, cmap, name, &color)) { fprintf (stderr, "%s: can't parse color %s", progname, name); return False; } else if (! XAllocColor (dpy, cmap, &color)) { fprintf (stderr, "%s: couldn't allocate color %s", progname, name); return False; } else { XRenderColor color2; color2.red = color.red; color2.green = color.green; color2.blue = color.blue; color2.alpha = 0xFFFF; XftColorAllocValue (dpy, visual, cmap, &color2, result); result->pixel = color.pixel; return True; } } static short maskbase (unsigned long m) { short i; if (!m) return 0; i = 0; while (! (m&1)) { m >>= 1; i++; } return i; } static short masklen (unsigned long m) { unsigned long y; y = (m >> 1) & 033333333333; y = m - y - ((y >>1) & 033333333333); return (short) (((y + (y >> 3)) & 030707070707) % 077); } Bool XftColorAllocValue (Display *dpy, _Xconst Visual *visual, Colormap cmap, _Xconst XRenderColor *color, XftColor *result) { if (!dpy || !visual || !color || !result) abort(); if (visual->class == TrueColor) { int red_shift, red_len; int green_shift, green_len; int blue_shift, blue_len; red_shift = maskbase (visual->red_mask); red_len = masklen (visual->red_mask); green_shift = maskbase (visual->green_mask); green_len = masklen (visual->green_mask); blue_shift = maskbase (visual->blue_mask); blue_len = masklen (visual->blue_mask); result->pixel = (((color->red >> (16 - red_len)) << red_shift) | ((color->green >> (16 - green_len)) << green_shift) | ((color->blue >> (16 - blue_len)) << blue_shift)); # ifdef HAVE_JWXYZ result->pixel |= BlackPixel(dpy, 0); /* alpha */ # endif } else { XColor xcolor; xcolor.red = color->red; xcolor.green = color->green; xcolor.blue = color->blue; if (!XAllocColor (dpy, cmap, &xcolor)) return False; result->pixel = xcolor.pixel; } result->color.red = color->red; result->color.green = color->green; result->color.blue = color->blue; result->color.alpha = color->alpha; return True; } void XftColorFree (Display *dpy, Visual *visual, Colormap cmap, XftColor *color) { if (!dpy || !visual || !color) abort(); if (visual->class != TrueColor) XFreeColors (dpy, cmap, &color->pixel, 1, 0); } XftDraw * XftDrawCreate (Display *dpy, Drawable drawable, Visual *visual, Colormap colormap) { XftDraw *dd = (XftDraw *) calloc (1, sizeof(*dd)); if (!dpy || !drawable || !visual) abort(); if (!dd) return 0; dd->dpy = dpy; dd->drawable = drawable; dd->visual = visual; dd->colormap = colormap; dd->gc = XCreateGC (dpy, drawable, 0, 0); return dd; } void XftDrawDestroy (XftDraw *draw) { if (!draw) abort(); XFreeGC (draw->dpy, draw->gc); free (draw); } void XftTextExtentsUtf8 (Display *dpy, XftFont *font, _Xconst FcChar8 *string, int len, XGlyphInfo *extents) { XCharStruct overall; if (!dpy || !font || !string || !extents) abort(); # ifdef HAVE_XUTF8DRAWSTRING { XRectangle ink; int advancement = Xutf8TextExtents (font->fontset, (const char *) string, len, &ink, 0); XmbRectangle_to_XCharStruct (ink, overall, advancement); } # else /* !HAVE_XUTF8DRAWSTRING */ { char *s2 = (char *) malloc (len + 1); int direction, ascent, descent; XChar2b *s16; int s16_len = 0; strncpy (s2, (char *) string, len); s2[len] = 0; s16 = utf8_to_XChar2b (s2, &s16_len); XTextExtents16 (font->xfont, s16, s16_len, &direction, &ascent, &descent, &overall); free (s2); free (s16); } # endif /* !HAVE_XUTF8DRAWSTRING */ XCharStruct_to_XGlyphInfo (overall, *extents); } void XftDrawStringUtf8 (XftDraw *draw, _Xconst XftColor *color, XftFont *font, int x, int y, _Xconst FcChar8 *string, int len) { if (!draw || !color || !font || !string) abort(); if (color->pixel != draw->pixel) { XSetForeground (draw->dpy, draw->gc, color->pixel); draw->pixel = color->pixel; } if (font->xfont->fid != draw->fid) { XSetFont (draw->dpy, draw->gc, font->xfont->fid); draw->fid = font->xfont->fid; } # ifdef HAVE_XUTF8DRAWSTRING /* If we have Xutf8DrawString, use it instead of XDrawString16 because there is some chance it will handle characters of more than 16 bits (beyond the Basic Multilingual Plane). */ /* #### I guess I don't really understand how FontSet works, because when using the real X11 implementation of Xutf8DrawString, this seems to just truncate the text at the first non-ASCII character. The XDrawString16() path works, however, at the expense of losing everything above Basic Multilingual. However, that path is only taken on X11 systems that are old enough to not have libXft, which means that the chance of Unicode working was already slim. */ Xutf8DrawString (draw->dpy, draw->drawable, font->fontset, draw->gc, x, y, (const char *) string, len); # else { int s16_len = 0; char *s2 = (char *) malloc (len + 1); XChar2b *s16; strncpy (s2, (char *) string, len); s2[len] = 0; s16 = utf8_to_XChar2b (s2, &s16_len); free (s2); XDrawString16 (draw->dpy, draw->drawable, draw->gc, x, y, s16, s16_len); free (s16); } # endif } #else /* HAVE_XFT */ const int Wempty_translation_unit_is_a_dumb_warning = 0; #endif /* HAVE_XFT */ xscreensaver-5.36/utils/utf8wc.c000644 000767 000024 00000073430 12716405122 016671 0ustar00jwzstaff000000 000000 /* xscreensaver, Copyright (c) 2014-2016 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. */ #ifdef HAVE_CONFIG_H # include "config.h" #endif #include #include #include #ifdef HAVE_JWXYZ # include "jwxyz.h" #else /* !HAVE_JWXYZ */ # include #endif #include "utf8wc.h" /* "Unicode Replacement Character", displayed in lieu of invalid characters. */ # define INVALID 0xFFFD /* Mask the number to be within the valid range of unicode characters. */ static unsigned long uc_truncate (unsigned long uc) { uc &= 0x7FFFFFFFL; /* Unicode is 31 bits */ if (uc > 0x10FFFF) uc = INVALID; /* But UTF-8 is 4 bytes */ if (uc == 0) uc = INVALID; /* no nulls */ if (uc >= 0xD800 && uc <= 0xDFFF) /* Reserved for use with UTF-16: not a real character. */ uc = INVALID; return uc; } /* Parse the first UTF8 character at the front of the string. Return the Unicode character, and the number of bytes read. */ long utf8_decode (const unsigned char *in, long length, unsigned long *unicode_ret) { const unsigned char *start = in; const unsigned char *end = in + length; unsigned long uc = INVALID; unsigned long min = 0; unsigned char c; if (length <= 0) goto DONE; c = *in++; # define PREMATURE_EOF { in = end; goto DONE; } if ((c & 0xC0) == 0x80) { /* 10xxxxxx - lonely continuation byte */ uc = INVALID; } else if ((c & 0x80) == 0) { /* 0xxxxxxx - 7 bits in 1 byte */ uc = (c & 0x7F); /* 01111111 */ } else if ((c & 0xE0) == 0xC0) { /* 110xxxxx - 11 bits in 2 bytes */ if (in+1 > end) PREMATURE_EOF; min = 1 << 7; uc = (((c & 0x1F) << 6) | /* 00011111------ */ (in[0] & 0x3F)); /* 00111111 */ in += 1; } else if ((c & 0xF0) == 0xE0) { /* 1110xxxx - 16 bits in 3 bytes */ if (in+2 > end) PREMATURE_EOF; min = 1 << 11; uc = (((c & 0x0F) << 12) | /* 00001111----+------- */ ((in[0] & 0x3F) << 6) | /* 00111111------ */ ((in[1] & 0x3F))); /* 00111111 */ in += 2; } else if ((c & 0xF8) == 0xF0) { /* 11110xxx - 21 bits in 4 bytes */ if (in+3 > end) PREMATURE_EOF; min = 1 << 16; uc = (((c & 0x07) << 18) | /* 00000111--+-------+------- */ ((in[0] & 0x3F) << 12) | /* 01111111----+------- */ ((in[1] & 0x3F) << 6) | /* 00111111------ */ ((in[2] & 0x3F))); /* 00111111 */ in += 3; } else if ((c & 0xFC) == 0xF8) { /* 111110xx - 26 bits in 5 bytes */ if (in+4 > end) PREMATURE_EOF; min = 1 << 21; uc = (((c & 0x03) << 24) | /* 00000011--------+-------+------- */ ((in[0] & 0x3F) << 18) | /* 00111111--+-------+------- */ ((in[1] & 0x3F) << 12) | /* 00111111----+------- */ ((in[2] & 0x3F) << 6) | /* 00111111------ */ ((in[3] & 0x3F))); /* 00111111 */ in += 4; } else if ((c & 0xFE) == 0xFC) { /* 1111110x - 31 bits in 6 bytes */ if (in+5 > end) PREMATURE_EOF; min = 1 << 26; uc = (((c & 0x01) << 30) | /* 00000001------+-------+-------+------- */ ((in[0] & 0x3F) << 24) | /* 00111111+-------+-------+------- */ ((in[1] & 0x3F) << 18) | /* 00111111--+-------+------- */ ((in[2] & 0x3F) << 12) | /* 00111111----+------- */ ((in[3] & 0x3F) << 6) | /* 00111111------ */ ((in[4] & 0x3F))); /* 00111111 */ in += 5; } else { uc = INVALID; /* Unparsable sequence. */ } DONE: length = in - start; /* If any of the continuation bytes didn't begin with the continuation tag, the sequence is invalid; stop at the bad byte, not consuming later ones. (It's easier to check this after the fact than up above.) */ { int i; for (i = 1; i < length; i++) if ((start[i] & 0xC0) != 0x80) { uc = INVALID; length = i+1; break; } } if (uc < min) /* A multi-byte sequence encoded a character that could have been encoded with a shorter sequence, e.g., hiding ASCII inside a multi-byte sequence. Something hinky's going on. Reject it. */ uc = INVALID; uc = uc_truncate (uc); if (unicode_ret) *unicode_ret = uc; return length; } /* Converts a Unicode character to a multi-byte UTF8 sequence. Returns the number of bytes written. */ int utf8_encode (unsigned long uc, char *out, long length) { const char *old = out; uc = uc_truncate (uc); if (uc < 0x80 && length >= 1) /* 7 bits in 1 byte */ { *out++ = uc; /* 0xxxxxxx */ } else if (uc < 0x800 && length >= 2) /* 11 bits in 2 bytes */ { *out++ = (0xC0 | ((uc >> 6) & 0x1F)); /* 110xxxxx */ *out++ = (0x80 | (uc & 0x3F)); /* 10xxxxxx */ } else if (uc < 0x10000L && length >= 3) /* 16 bits in 3 bytes */ { *out++ = (0xE0 | ((uc >> 12) & 0x0F)); /* 1110xxxx */ *out++ = (0x80 | ((uc >> 6) & 0x3F)); /* 10xxxxxx */ *out++ = (0x80 | (uc & 0x3F)); /* 10xxxxxx */ } else if (uc < 0x200000L && length >= 4) /* 21 bits in 4 bytes */ { *out++ = (0xF0 | ((uc >> 18) & 0x07)); /* 11110xxx */ *out++ = (0x80 | ((uc >> 12) & 0x3F)); /* 10xxxxxx */ *out++ = (0x80 | ((uc >> 6) & 0x3F)); /* 10xxxxxx */ *out++ = (0x80 | (uc & 0x3F)); /* 10xxxxxx */ } else if (uc < 0x4000000L && length >= 5) /* 26 bits in 5 bytes */ { *out++ = (0xF8 | ((uc >> 24) & 0x03)); /* 111110xx */ *out++ = (0x80 | ((uc >> 18) & 0x3F)); /* 10xxxxxx */ *out++ = (0x80 | ((uc >> 12) & 0x3F)); /* 10xxxxxx */ *out++ = (0x80 | ((uc >> 6) & 0x3F)); /* 10xxxxxx */ *out++ = (0x80 | (uc & 0x3F)); /* 10xxxxxx */ } else if (length >= 6) /* 31 bits in 6 bytes */ { *out++ = (0xFC | ((uc >> 30) & 0x01)); /* 1111110x */ *out++ = (0x80 | ((uc >> 24) & 0x3F)); /* 10xxxxxx */ *out++ = (0x80 | ((uc >> 18) & 0x3F)); /* 10xxxxxx */ *out++ = (0x80 | ((uc >> 12) & 0x3F)); /* 10xxxxxx */ *out++ = (0x80 | ((uc >> 6) & 0x3F)); /* 10xxxxxx */ *out++ = (0x80 | (uc & 0x3F)); /* 10xxxxxx */ } return (int) (out - old); } /* Converts a null-terminated UTF8 string to a null-terminated XChar2b array. This only handles characters that can be represented in 16 bits, the Basic Multilingual Plane. (No hieroglyphics, Elvish, Klingon or Emoji.) */ XChar2b * utf8_to_XChar2b (const char *string, int *length_ret) { long in_len = strlen(string); const unsigned char *in = (const unsigned char *) string; const unsigned char *in_end = in + in_len; XChar2b *c2b = (XChar2b *) malloc ((in_len + 1) * sizeof(*c2b)); XChar2b *out = c2b; if (! out) return 0; while (in < in_end) { unsigned long uc = 0; long L = utf8_decode (in, in_end - in, &uc); in += L; /* If it can't be represented in a 16-bit XChar2b, use "Unicode Replacement Character". */ if (uc > 0xFFFF) uc = INVALID; out->byte1 = (uc >> 8) & 0xFF; out->byte2 = uc & 0xFF; out++; } out->byte1 = 0; out->byte2 = 0; if (length_ret) *length_ret = (int) (out - c2b); /* shrink */ c2b = (XChar2b *) realloc (c2b, (out - c2b + 1) * sizeof(*c2b)); return c2b; } /* Split a UTF8 string into an array of strings, one per character. The sub-strings will be null terminated and may be multiple bytes. */ char ** utf8_split (const char *string, int *length_ret) { const unsigned char *in = (const unsigned char *) string; long len = strlen (string); const unsigned char *end = in + len; char **ret = (char **) malloc ((len+1) * sizeof(*ret)); int i = 0; if (!ret) return 0; while (in < end) { unsigned long uc; long len2 = utf8_decode (in, len, &uc); char tmp[10]; strncpy (tmp, (char *) in, len2); tmp[len2] = 0; ret[i++] = strdup (tmp); in += len2; /* If this is a Combining Diacritical, append it to the previous character. E.g., "y\314\206\314\206" is one string, not three. */ if (i > 1 && ((uc >= 0x300 && uc <= 0x36F) || /* Combining Diacritical */ (uc >= 0x1AB0 && uc <= 0x1AFF) || /* Combining Diacritical Ext. */ (uc >= 0x1DC0 && uc <= 0x1DFF) || /* Combining Diacritical Supp. */ (uc >= 0x20D0 && uc <= 0x20FF) || /* Combining Diacritical Sym. */ (uc >= 0xFE20 && uc <= 0xFE2F))) /* Combining Half Marks */ { long L1 = strlen(ret[i-2]); long L2 = strlen(ret[i-1]); char *s2 = (char *) malloc (L1 + L2 + 1); strncpy (s2, ret[i-2], L1); strncpy (s2 + L1, ret[i-1], L2); s2[L1 + L2] = 0; free (ret[i-2]); ret[i-2] = s2; i--; } } ret[i] = 0; if (length_ret) *length_ret = i; /* shrink */ ret = (char **) realloc (ret, (i+1) * sizeof(*ret)); return ret; } /* Converts a null-terminated XChar2b array to a null-terminated UTF8 string. */ char * XChar2b_to_utf8 (const XChar2b *in, int *length_ret) { int in_len = 0; const XChar2b *in_end; int out_len; char *utf8, *out; const char *out_end; /* Find the null termination on the XChar2b. */ for (in_end = in; in_end->byte1 || in_end->byte2; in_end++, in_len++) ; out_len = (in_len + 1) * 3; /* 16 bit chars = 3 bytes max */ utf8 = out = (char *) malloc (out_len + 1); if (! out) return 0; out_end = out + out_len; while (in < in_end) { unsigned long uc = (in->byte1 << 8) | in->byte2; int wrote = utf8_encode (uc, out, out_end - out); if (wrote > 3) abort(); /* Can't happen with 16 bit input */ out += wrote; in++; } *out = 0; out_len = (int) (out - utf8 + 1); if (length_ret) *length_ret = out_len; /* shrink */ utf8 = (char *) realloc (utf8, out_len); return utf8; } /* Converts a UTF8 string to the closest Latin1 or ASCII equivalent. */ char * utf8_to_latin1 (const char *string, Bool ascii_p) { long in_len = strlen(string); const unsigned char *in = (const unsigned char *) string; const unsigned char *in_end = in + in_len; unsigned char *ret = (unsigned char *) malloc (in_len + 1); unsigned char *out = ret; if (! ret) return 0; while (in < in_end) { unsigned long uc = 0; long len2 = utf8_decode (in, in_end - in, &uc); in += len2; if (uc == '\240') /*   */ uc = ' '; else if (uc >= 0x300 && uc <= 0x36F) uc = 0; /* Discard "Combining Diacritical Marks" */ else if (uc >= 0x1AB0 && uc <= 0x1AFF) uc = 0; /* Discard "Combining Diacritical Marks Extended" */ else if (uc >= 0x1DC0 && uc <= 0x1DFF) uc = 0; /* Discard "Combining Diacritical Marks Supplement" */ else if (uc >= 0x20D0 && uc <= 0x20FF) uc = 0; /* Discard "Combining Diacritical Marks for Symbols" */ else if (uc >= 0xFE20 && uc <= 0xFE2F) uc = 0; /* Discard "Combining Half Marks" */ else if (uc > 0xFF) switch (uc) { /* Map "Unicode General Punctuation Block" to Latin1 equivalents. */ case 0x2000: /* EN QUAD */ case 0x2001: /* EM QUAD */ case 0x2002: /* EN SPACE */ case 0x2003: /* EM SPACE */ case 0x2004: /* THREE-PER-EM SPACE */ case 0x2005: /* FOUR-PER-EM SPACE */ case 0x2006: /* SIX-PER-EM SPACE */ case 0x2007: /* FIGURE SPACE */ case 0x2008: /* PUNCTUATION SPACE */ case 0x2009: /* THIN SPACE */ case 0x200A: /* HAIR SPACE */ uc = ' '; break; case 0x2010: /* HYPHEN */ case 0x2011: /* NON-BREAKING HYPHEN */ case 0x2012: /* FIGURE DASH */ case 0x2013: /* EN DASH */ case 0x2014: /* EM DASH */ case 0x2015: /* HORIZONTAL BAR */ uc = '-'; break; case 0x2018: /* LEFT SINGLE QUOTATION MARK */ case 0x2019: /* SINGLE LOW-9 QUOTATION MARK */ case 0x201A: /* SINGLE LOW-9 QUOTATION MARK */ case 0x201B: /* SINGLE HIGH-REVERSED-9 QUOTATION MARK */ uc = '\''; break; case 0x201C: /* LEFT DOUBLE QUOTATION MARK */ case 0x201D: /* RIGHT DOUBLE QUOTATION MARK */ case 0x201E: /* DOUBLE LOW-9 QUOTATION MARK */ case 0x201F: /* DOUBLE HIGH-REVERSED-9 QUOTATION MARK */ uc = '"'; break; case 0x2022: uc = '\267'; break; /* BULLET */ case 0x2023: uc = '\273'; break; /* TRIANGULAR BULLET */ case 0x2027: uc = '\267'; break; /* HYPHENATION POINT */ case 0x202F: uc = ' '; break; /* NARROW NO-BREAK SPACE */ case 0x2038: uc = '^'; break; /* CARET */ case 0x2039: uc = '\253'; break; /* SINGLE LEFT ANGLE QUOTATION MARK */ case 0x203A: uc = '\273'; break; /* SINGLE RIGHT ANGLE QUOTATION MARK*/ case 0x2041: uc = '^'; break; /* CARET INSERTION POINT */ case 0x2042: uc = '*'; break; /* ASTERISM */ case 0x2043: uc = '='; break; /* HYPHEN BULLET */ case 0x2044: uc = '/'; break; /* FRACTION SLASH */ case 0x204B: uc = '\266'; break; /* REVERSED PILCROW SIGN */ case 0x204C: uc = '\267'; break; /* BLACK LEFTWARDS BULLET */ case 0x204D: uc = '\267'; break; /* BLACK RIGHTWARDS BULLET */ case 0x204E: uc = '*'; break; /* LOW ASTERISK */ case 0x204F: uc = ';'; break; /* REVERSED SEMICOLON */ default: break; } if (uc > 0xFF) /* "Inverted question mark" looks enough like 0xFFFD, the "Unicode Replacement Character". */ uc = (ascii_p ? '#' : '\277'); if (ascii_p) /* Map Latin1 to the closest ASCII versions. */ { const unsigned char latin1_to_ascii[96] = " !C##Y|S_C#<=-R_##23'uP.,1o>###?" "AAAAAAECEEEEIIIIDNOOOOOx0UUUUYpS" "aaaaaaeceeeeiiiionooooo/ouuuuypy"; if (uc >= 0xA0) uc = latin1_to_ascii[uc - 0xA0]; } if (uc > 0) *out++ = (unsigned char) uc; } *out = 0; /* shrink */ ret = (unsigned char *) realloc (ret, (out - ret + 1) * sizeof(*ret)); return (char *) ret; } /************************************************************************* cd ../hacks ; make test-utf8wc *************************************************************************/ #ifdef SELFTEST /* Convert a UTF8 string to Unicode and back again. */ static char * split_and_join (const char *string) { const unsigned char *in = (const unsigned char *) string; int len = strlen (string); const unsigned char *end = in + len; unsigned long *unicode = (unsigned long *) malloc((len + 1) * sizeof(*unicode)); int i = 0; char *ret, *out, *out_end; while (in < end) { long len2 = utf8_decode (in, len, &unicode[i]); i++; in += len2; } unicode[i] = 0; i = i*6 + 1; out = ret = (char *) malloc(i); out_end = out + i; i = 0; while (unicode[i]) { int len2 = utf8_encode (unicode[i], out, out_end - out); out += len2; i++; } *out = 0; free (unicode); return ret; } static void LOG (FILE *out, const char *prefix, const char *s) { fprintf (out, "%6s: \"", prefix); while (*s) { unsigned char c = *s; if (c == '"' || c == '\\') fprintf(out, "\\%c", c); else if (c < 32 || c >= 127) fprintf(out, "\\%03o", c); else fprintf (out, "%c", c); s++; } fprintf (out, "\"\n"); } int main (int argc, char **argv) { /* Adapted from http://www.cl.cam.ac.uk/~mgk25/ucs/examples/UTF-8-test.txt */ # define URC "\357\277\275" /* 0xFFFD, "Unicode Replacement Character" */ static const struct { const char *name, *in, *target, *target2; } tests[] = { /* 1 Some correct UTF-8 text */ /* The Greek word 'kosme': */ { "1", "\316\272\341\275\271\317\203\316\274\316\265" }, /* 2 Boundary condition test cases */ /* 2.1 First possible sequence of a certain length */ { "2.1.1", /* 1 byte (U-00000000): */ "\000" }, { "2.1.2", /* 2 bytes (U-00000080): */ "\302\200" }, { "2.1.3", /* 3 bytes (U-00000800): */ "\340\240\200" }, { "2.1.4", /* 4 bytes (U-00010000): */ "\360\220\200\200", 0, URC }, { "2.1.5", /* 5 bytes (U-00200000): */ "\370\210\200\200\200", URC }, { "2.1.6", /* 6 bytes (U-04000000): */ "\374\204\200\200\200\200", URC }, /* 2.2 Last possible sequence of a certain length */ { "2.2.1", /* 1 byte (U-0000007F): */ "\177" }, { "2.2.2", /* 2 bytes (U-000007FF): */ "\337\277" }, { "2.2.3", /* 3 bytes (U-0000FFFF): */ "\357\277\277" }, { "2.2.4", /* 4 bytes (U-001FFFFF): */ "\367\277\277\277", URC }, { "2.2.5", /* 5 bytes (U-03FFFFFF): */ "\373\277\277\277\277", URC }, { "2.2.6", /* 6 bytes (U-7FFFFFFF): */ "\375\277\277\277\277\277", URC }, /* 2.3 Other boundary conditions */ { "2.3.1", /* U-0000D7FF = ed 9f bf = */ "\355\237\277" }, { "2.3.2", /* U-0000E000 = ee 80 80 = */ "\356\200\200" }, { "2.3.3", /* U-0000FFFD = ef bf bd = */ URC }, { "2.3.4", /* U-0010FFFF = f4 8f bf bf = */ "\364\217\277\277", 0, URC }, { "2.3.5", /* U-00110000 = f4 90 80 80 = */ "\364\220\200\200", URC }, /* 3 Malformed sequences */ /* 3.1 Unexpected continuation bytes */ /* Each unexpected continuation byte should be separately signalled as a malformed sequence of its own. */ { "3.1.1", /* First continuation byte 0x80: */ "\200", URC }, { "3.1.2", /* Last continuation byte 0xbf: */ "\277", URC }, { "3.1.3", /* 2 continuation bytes: */ "\200\277", URC URC }, { "3.1.4", /* 3 continuation bytes: */ "\200\277\200", URC URC URC }, { "3.1.5", /* 4 continuation bytes: */ "\200\277\200\277", URC URC URC URC }, { "3.1.6", /* 5 continuation bytes: */ "\200\277\200\277\200", URC URC URC URC URC }, { "3.1.7", /* 6 continuation bytes: */ "\200\277\200\277\200\277", URC URC URC URC URC URC }, { "3.1.8", /* 7 continuation bytes: */ "\200\277\200\277\200\277\200", URC URC URC URC URC URC URC }, { "3.1.9", /* Sequence of all 64 possible continuation bytes (0x80-0xbf):*/ "\200\201\202\203\204\205\206\207\210\211\212\213\214\215\216\217" "\220\221\222\223\224\225\226\227\230\231\232\233\234\235\236\237" "\240\241\242\243\244\245\246\247\250\251\252\253\254\255\256\257" "\260\261\262\263\264\265\266\267\270\271\272\273\274\275\276\277", URC URC URC URC URC URC URC URC URC URC URC URC URC URC URC URC URC URC URC URC URC URC URC URC URC URC URC URC URC URC URC URC URC URC URC URC URC URC URC URC URC URC URC URC URC URC URC URC URC URC URC URC URC URC URC URC URC URC URC URC URC URC URC URC }, /* 3.2 Lonely start characters */ { "3.2.1", /* All 32 first bytes of 2-byte sequences (0xc0-0xdf), each followed by a space character: */ "\300 \301 \302 \303 \304 \305 \306 \307 \310 \311 \312 \313 \314 " "\315 \316 \317 \320 \321 \322 \323 \324 \325 \326 \327 \330 \331 " "\332 \333 \334 \335 \336 \337 ", URC URC URC URC URC URC URC URC URC URC URC URC URC URC URC URC URC URC URC URC URC URC URC URC URC URC URC URC URC URC URC URC }, { "3.2.2", /* All 16 first bytes of 3-byte sequences (0xe0-0xef), each followed by a space character: */ "\340 \341 \342 \343 \344 \345 \346 \347 " "\350 \351 \352 \353 \354 \355 \356 \357 ", URC URC URC URC URC URC URC URC URC URC URC URC URC URC URC URC }, { "3.2.3", /* All 8 first bytes of 4-byte sequences (0xf0-0xf7), each followed by a space character: */ URC URC URC URC URC URC URC URC }, { "3.2.4", /* All 4 first bytes of 5-byte sequences (0xf8-0xfb), each followed by a space character: */ "\370 \371 \372 \373 ", URC URC URC URC }, { "3.2.5", /* All 2 first bytes of 6-byte sequences (0xfc-0xfd), each followed by a space character: */ "\374 \375 ", URC URC }, /* 3.3 Sequences with last continuation byte missing */ /* All bytes of an incomplete sequence should be signalled as a single malformed sequence, i.e., you should see only a single replacement character in each of the next 10 tests. (Characters as in section 2) */ { "3.3.1", /* 2-byte sequence with last byte missing (U+0000): */ "\300", URC }, { "3.3.2", /* 3-byte sequence with last byte missing (U+0000): */ "\340\200", URC }, { "3.3.3", /* 4-byte sequence with last byte missing (U+0000): */ "\360\200\200", URC }, { "3.3.4", /* 5-byte sequence with last byte missing (U+0000): */ "\370\200\200\200", URC }, { "3.3.5", /* 6-byte sequence with last byte missing (U+0000): */ "\374\200\200\200\200", URC }, { "3.3.6", /* 2-byte sequence with last byte missing (U-000007FF): */ "\337", URC }, { "3.3.7", /* 3-byte sequence with last byte missing (U-0000FFFF): */ "\357\277", URC }, { "3.3.8", /* 4-byte sequence with last byte missing (U-001FFFFF): */ "\367\277\277", URC }, { "3.3.9", /* 5-byte sequence with last byte missing (U-03FFFFFF): */ "\373\277\277\277", URC }, { "3.3.10", /* 6-byte sequence with last byte missing (U-7FFFFFFF): */ "\375\277\277\277\277", URC }, /* 3.4 Concatenation of incomplete sequences */ /* All the 10 sequences of 3.3 concatenated, you should see 10 malformed sequences being signalled: */ { "3.4", "\300\340\200\360\200\200\370\200\200\200\374\200\200\200\200" "\337\357\277\367\277\277\373\277\277\277\375\277\277\277\277", URC URC URC URC URC URC URC URC URC URC URC URC URC URC URC }, /* 3.5 Impossible bytes */ /* The following two bytes cannot appear in a correct UTF-8 string */ { "3.5.1", /* fe = */ "\376", URC }, { "3.5.2", /* ff = */ "\377", URC }, { "3.5.3", /* fe fe ff ff = */ "\376\376\377\377", URC URC URC URC }, /* 4 Overlong sequences */ /* 4.1 Examples of an overlong ASCII character */ { "4.1.1", /* U+002F = c0 af = */ "\300\257", URC }, { "4.1.2", /* U+002F = e0 80 af = */ "\340\200\257", URC }, { "4.1.3", /* U+002F = f0 80 80 af = */ "\360\200\200\257", URC }, { "4.1.4", /* U+002F = f8 80 80 80 af = */ "\370\200\200\200\257", URC }, { "4.1.5", /* U+002F = fc 80 80 80 80 af = */ "\374\200\200\200\200\257", URC }, /* 4.2 Maximum overlong sequences */ { "4.2.1", /* U-0000007F = c1 bf = */ "\301\277", URC }, { "4.2.2", /* U-000007FF = e0 9f bf = */ "\340\237\277", URC }, { "4.2.3", /* U-0000FFFF = f0 8f bf bf = */ "\360\217\277\277", URC }, { "4.2.4", /* U-001FFFFF = f8 87 bf bf bf = */ "\370\207\277\277\277", URC }, { "4.2.5", /* U-03FFFFFF = fc 83 bf bf bf bf = */ URC }, /* 4.3 Overlong representation of the NUL character */ { "4.3.1", /* U+0000 = c0 80 = */ "\300\200", URC }, { "4.3.2", /* U+0000 = e0 80 80 = */ "\340\200\200", URC }, { "4.3.3", /* U+0000 = f0 80 80 80 = */ "\360\200\200\200", URC }, { "4.3.4", /* U+0000 = f8 80 80 80 80 = */ "\370\200\200\200\200", URC }, { "4.3.5", /* U+0000 = fc 80 80 80 80 80 = */ "\374\200\200\200\200\200", URC }, /* 5 Illegal code positions */ /* 5.1 Single UTF-16 surrogates */ { "5.1.1", /* U+D800 = ed a0 80 = */ "\355\240\200", URC }, { "5.1.2", /* U+DB7F = ed ad bf = */ "\355\255\277", URC }, { "5.1.3", /* U+DB80 = ed ae 80 = */ "\355\256\200", URC }, { "5.1.4", /* U+DBFF = ed af bf = */ "\355\257\277", URC }, { "5.1.5", /* U+DC00 = ed b0 80 = */ "\355\260\200", URC }, { "5.1.6", /* U+DF80 = ed be 80 = */ "\355\276\200", URC }, { "5.1.7", /* U+DFFF = ed bf bf = */ "\355\277\277", URC }, /* 5.2 Paired UTF-16 surrogates */ { "5.2.1", /* U+D800 U+DC00 = ed a0 80 ed b0 80 = */ URC URC }, { "5.2.2", /* U+D800 U+DFFF = ed a0 80 ed bf bf = */ URC URC }, { "5.2.3", /* U+DB7F U+DC00 = ed ad bf ed b0 80 = */ URC URC }, { "5.2.4", /* U+DB7F U+DFFF = ed ad bf ed bf bf = */ URC URC }, { "5.2.5", /* U+DB80 U+DC00 = ed ae 80 ed b0 80 = */ URC URC }, { "5.2.6", /* U+DB80 U+DFFF = ed ae 80 ed bf bf = */ URC URC }, { "5.2.7", /* U+DBFF U+DC00 = ed af bf ed b0 80 = */ URC URC }, { "5.2.8", /* U+DBFF U+DFFF = ed af bf ed bf bf = */ URC URC }, /* 5.3 Other illegal code positions */ { "5.3.1", /* U+FFFE = ef bf be = */ "\357\277\276" }, { "5.3.2", /* U+FFFF = ef bf bf = */ "\357\277\277" }, /* 6 Some other junk */ { "6.0", "" }, { "6.1", "\001\002\003\004\005 ABC" }, { "6.2", /* every non-ASCII Latin1 character */ "\302\241\302\242\302\243\302\244\302\245\302\246\302\247\302\250" "\302\251\302\252\302\253\302\254\302\255\302\256\302\257\302\260" "\302\261\302\262\302\263\302\264\302\265\302\266\302\267\302\270" "\302\271\302\272\302\273\302\274\302\275\302\276\302\277\303\200" "\303\201\303\202\303\203\303\204\303\205\303\206\303\207\303\210" "\303\211\303\212\303\213\303\214\303\215\303\216\303\217\303\220" "\303\221\303\222\303\223\303\224\303\225\303\226\303\227\303\230" "\303\231\303\232\303\233\303\234\303\235\303\236\303\237\303\240" "\303\241\303\242\303\243\303\244\303\245\303\246\303\247\303\250" "\303\251\303\252\303\253\303\254\303\255\303\256\303\257\303\260" "\303\261\303\262\303\263\303\264\303\265\303\266\303\267\303\270" "\303\271\303\272\303\273\303\274\303\275\303\276\303\277" }, { "6.3", /* Christmas tree */ "\001\002\003\004\005\006\007\010\011\012\013\014\015\016\017\020" "\021\022\023\024\025\026\027\030\031\032\033\034\035\036\037\040" "\041\042\043\044\045\046\047\050\051\052\053\054\055\056\057\060" "\061\062\063\064\065\066\067\070\071\072\073\074\075\076\077\100" "\101\102\103\104\105\106\107\110\111\112\113\114\115\116\117\120" "\121\122\123\124\125\126\127\130\131\132\133\134\135\136\137\140" "\141\142\143\144\145\146\147\150\151\152\153\154\155\156\157\160" "\161\162\163\164\165\166\167\170\171\172\173\174\175\176\177\200" "\201\202\203\204\205\206\207\210\211\212\213\214\215\216\217\220" "\221\222\223\224\225\226\227\230\231\232\233\234\235\236\237\240" "\241\242\243\244\245\246\247\250\251\252\253\254\255\256\257\260" "\261\262\263\264\265\266\267\270\271\272\273\274\275\276\277\300" "\301\302\303\304\305\306\307\310\311\312\313\314\315\316\317\320" "\321\322\323\324\325\326\327\330\331\332\333\334\335\336\337\340" "\341\342\343\344\345\346\347\350\351\352\353\354\355\356\357\360" "\361\362\363\364\365\366\367\370\371\372\373\374\375\376\377", "\001\002\003\004\005\006\007\010\011\012\013\014\015\016\017\020" "\021\022\023\024\025\026\027\030\031\032\033\034\035\036\037" " !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ" "[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~\177" URC URC URC URC URC URC URC URC URC URC URC URC URC URC URC URC URC URC URC URC URC URC URC URC URC URC URC URC URC URC URC URC URC URC URC URC URC URC URC URC URC URC URC URC URC URC URC URC URC URC URC URC URC URC URC URC URC URC URC URC URC URC URC URC URC URC URC URC URC URC URC URC URC URC URC URC URC URC URC URC URC URC URC URC URC URC URC URC URC URC URC URC URC URC URC URC URC }, }; int i; int ok = 1; for (i = 0; i < sizeof(tests)/sizeof(*tests); i++) { const char *name = tests[i].name; const char *in = tests[i].in; const char *target = (tests[i].target ? tests[i].target : in); const char *target2 = (tests[i].target2 ? tests[i].target2 : target); char *out = split_and_join (in); XChar2b *out16 = utf8_to_XChar2b (in, 0); char *out2 = XChar2b_to_utf8 (out16, 0); if (strcmp (out, target)) { LOG (stderr, name, target); LOG (stderr, "FAIL", out); fprintf (stderr, "\n"); ok = 0; } if (strcmp (out2, target2)) { LOG (stderr, name, target2); LOG (stderr, "FAIL2", out2); fprintf (stderr, "\n"); ok = 0; } free (out); free (out2); free (out16); } { const char *utf8 = ("son \303\256le int\303\251rieure, \303\240 " "c\303\264t\303\251 de l'alc\303\264ve " "ovo\303\257de, o\303\271 les b\303\273ches " "se consument dans l'\303\242tre"); const char *latin1 = ("son \356le int\351rieure, \340 " "c\364t\351 de l'alc\364ve ovo\357de, " "o\371 les b\373ches se consument dans " "l'\342tre"); const char *ascii = ("son ile interieure, a cote de l'alcove " "ovoide, ou les buches se consument dans " "l'atre"); char *latin1b = utf8_to_latin1 (utf8, False); char *ascii2 = utf8_to_latin1 (utf8, True); if (strcmp (latin1, latin1b)) { LOG (stderr, "LATIN1", utf8); LOG (stderr, "FAIL3", latin1b); fprintf (stderr, "\n"); ok = 0; } if (strcmp (ascii, ascii2)) { LOG (stderr, "ASCII", utf8); LOG (stderr, "FAIL4", ascii2); fprintf (stderr, "\n"); ok = 0; } free (latin1b); free (ascii2); } if (ok) fprintf (stderr, "OK\n"); return (ok == 0); } #endif /* SELFTEST */ xscreensaver-5.36/utils/alpha.h000644 000767 000024 00000001723 12701612232 016533 0ustar00jwzstaff000000 000000 /* xscreensaver, Copyright (c) 1992, 1995, 1996, 1997 * 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. */ #ifndef __XSCREENSAVER_ALPHA_H__ #define __XSCREENSAVER_ALPHA_H__ extern Bool allocate_alpha_colors (Screen *screen, Visual *visual, Colormap cmap, int *nplanesP, Bool additive_p, unsigned long **plane_masks, unsigned long *base_pixelP); #endif /* __XSCREENSAVER_ALPHA_H__ */ xscreensaver-5.36/utils/colors.h000644 000767 000024 00000013441 12701612232 016747 0ustar00jwzstaff000000 000000 /* xscreensaver, Copyright (c) 1992-2013 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. */ #ifndef __COLORS_H__ #define __COLORS_H__ /* Like XFreeColors, but works on `XColor *' instead of `unsigned long *' */ extern void free_colors (Screen *, Colormap, XColor *, int ncolors); /* Allocates writable, non-contiguous color cells. The number requested is passed in *ncolorsP, and the number actually allocated is returned there. (Unlike XAllocColorCells(), this will allocate as many as it can, instead of failing if they can't all be allocated.) */ extern void allocate_writable_colors (Screen *, Colormap, unsigned long *pixels, int *ncolorsP); /* Generates a sequence of colors evenly spaced between the given pair of HSV coordinates. If closed_p is true, the colors will go from the first point to the second then back to the first. If allocate_p is true, the colors will be allocated from the map; if enough colors can't be allocated, we will try for less, and the result will be returned to ncolorsP. If writable_p is true, writable color cells will be allocated; otherwise, read-only cells will be allocated. If allocate_p is false, screen and cmap are unused (OpenGL usage). */ extern void make_color_ramp (Screen *, Visual *, Colormap, int h1, double s1, double v1, int h2, double s2, double v2, XColor *colors, int *ncolorsP, Bool closed_p, Bool allocate_p, Bool *writable_pP); /* Generates a sequence of colors evenly spaced around the triangle indicated by the thee HSV coordinates. If allocate_p is true, the colors will be allocated from the map; if enough colors can't be allocated, we will try for less, and the result will be returned to ncolorsP. If writable_p is true, writable color cells will be allocated; otherwise, read-only cells will be allocated. If allocate_p is false, screen, visual and cmap are unused (OpenGL usage). */ extern void make_color_loop (Screen *, Visual *, Colormap, int h1, double s1, double v1, int h2, double s2, double v2, int h3, double s3, double v3, XColor *colors, int *ncolorsP, Bool allocate_p, Bool *writable_pP); /* Allocates a hopefully-interesting colormap, which will be a closed loop without any sudden transitions. If allocate_p is true, the colors will be allocated from the map; if enough colors can't be allocated, we will try for less, and the result will be returned to ncolorsP. An error message will be printed on stderr (if verbose_p). If *writable_pP is true, writable color cells will be allocated; otherwise, read-only cells will be allocated. If no writable cells cannot be allocated, we will try to allocate unwritable cells instead, and print a message on stderr to that effect (if verbose_p). If allocate_p is false, screen, visual and cmap are unused (OpenGL usage). */ extern void make_smooth_colormap (Screen *, Visual *, Colormap, XColor *colors, int *ncolorsP, Bool allocate_p, Bool *writable_pP, Bool verbose_p); /* Allocates a uniform colormap which touches each hue of the spectrum, evenly spaced. The saturation and intensity are chosen randomly, but will be high enough to be visible. If allocate_p is true, the colors will be allocated from the map; if enough colors can't be allocated, we will try for less, and the result will be returned to ncolorsP. An error message will be printed on stderr (if verbose_p). If *writable_pP is true, writable color cells will be allocated; otherwise, read-only cells will be allocated. If no writable cells cannot be allocated, we will try to allocate unwritable cells instead, and print a message on stderr to that effect (if verbose_p). If allocate_p is false, screen, visual and cmap are unused (OpenGL usage). */ extern void make_uniform_colormap (Screen *, Visual *, Colormap, XColor *colors, int *ncolorsP, Bool allocate_p, Bool *writable_pP, Bool verbose_p); /* Allocates a random colormap (the colors are unrelated to one another.) If `bright_p' is false, the colors will be completely random; if it is true, all of the colors will be bright enough to see on a black background. If allocate_p is true, the colors will be allocated from the map; if enough colors can't be allocated, we will try for less, and the result will be returned to ncolorsP. An error message will be printed on stderr (if verbose_p). If *writable_pP is true, writable color cells will be allocated; otherwise, read-only cells will be allocated. If no writable cells cannot be allocated, we will try to allocate unwritable cells instead, and print a message on stderr to that effect (if verbose_p). If allocate_p is false, screen, visual and cmap are unused (OpenGL usage). */ extern void make_random_colormap (Screen *, Visual *, Colormap, XColor *colors, int *ncolorsP, Bool bright_p, Bool allocate_p, Bool *writable_pP, Bool verbose_p); /* Assuming that the array of colors indicates the current state of a set of writable color cells, this rotates the contents of the array by `distance' steps, moving the colors of cell N to cell (N - distance). */ extern void rotate_colors (Screen *, Colormap, XColor *, int ncolors, int distance); #endif /* __COLORS_H__ */ xscreensaver-5.36/utils/fade.h000644 000767 000024 00000001623 12701612232 016344 0ustar00jwzstaff000000 000000 /* xscreensaver, Copyright (c) 1992-1997, 2003 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. */ #ifndef __FADE_H__ #define __FADE_H__ extern Colormap copy_colormap (Screen *, Visual *, Colormap from, Colormap to); extern void blacken_colormap (Screen *, Colormap cmap); extern void fade_screens (Display *dpy, Colormap *cmaps, Window *black_windows, int nwindows, int seconds, int ticks, Bool out_p, Bool clear_windows); #endif /* __FADE_H__ */ xscreensaver-5.36/utils/grabscreen.h000644 000767 000024 00000011267 12717232413 017573 0ustar00jwzstaff000000 000000 /* xscreensaver, Copyright (c) 1992-2014 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. */ #ifndef __GRABSCREEN_H__ #define __GRABSCREEN_H__ /* This will write an image onto the given Drawable. The Drawable (arg 3) may be a Window or a Pixmap. The Window must be the top-level window. The image *may or may not* be written to the window, though it will definitely be written to the drawable. It's fine for args 2 and 3 to be the same window, or for arg 2 to be a Window, and arg 3 to be a Pixmap. The loaded image might be from a file, or from a screen shot of the desktop, or from the system's video input, depending on user preferences. When the callback is called, the image data will have been loaded into the given drawable. Copy `name' if you want to keep it. If it is from a file, then the `filename' argument will be the name of the file. It may be NULL. If you want to keep this string, copy it. The size and position of the image is in the `geometry' arg. The image will generally have been scaled up to fit the window, but if a loaded file had a different aspect ratio than the window, it will have been centered, and the returned coords will describe that. Many colors may be allocated from the window's colormap. */ extern void load_image_async (Screen *, Window, Drawable, void (*callback) (Screen *, Window, Drawable, const char *name, XRectangle *geometry, void *closure), void *closure); /* A utility wrapper around load_image_async() that is simpler if you are only loading a single image at a time: just keep calling it periodically until it returns NULL. When it does, the image has been loaded. */ typedef struct async_load_state async_load_state; extern async_load_state *load_image_async_simple (async_load_state *, Screen *, Window top_level, Drawable target, char **filename_ret, XRectangle *geometry_ret); /* Whether one should use GCSubwindowMode when drawing on this window (assuming a screen image has been grabbed onto it.) Yes, this is a total kludge. */ extern Bool use_subwindow_mode_p(Screen *screen, Window window); /* Whether the given window is: - the real root window; - the virtual root window; - a direct child of the root window; - a direct child of the window manager's decorations. */ extern Bool top_level_window_p(Screen *screen, Window window); /* Don't call this: this is for the "xscreensaver-getimage" program only. */ extern void grab_screen_image_internal (Screen *, Window); /* Don't use these: this is how "xscreensaver-getimage" and "grabclient.c" pass the file name around. */ #define XA_XSCREENSAVER_IMAGE_FILENAME "_SCREENSAVER_IMAGE_FILENAME" #define XA_XSCREENSAVER_IMAGE_GEOMETRY "_SCREENSAVER_IMAGE_GEOMETRY" /* For debugging: turn on verbosity. */ extern void grabscreen_verbose (void); #ifdef HAVE_JWXYZ /* Don't use these: internal interface of grabclient.c. */ extern Bool osx_grab_desktop_image (Screen *, Window, Drawable, XRectangle *geom_ret); extern Bool osx_load_image_file (Screen *, Window, Drawable, const char *filename, XRectangle *geom_ret); #endif /* HAVE_JWXYZ */ #ifdef USE_IPHONE extern void ios_load_random_image (void (*callback) (void *uiimage, const char *filename, int w, int h, void *closure), void *closure); #endif /* USE_IPHONE */ #ifdef HAVE_ANDROID char *jwxyz_load_random_image (Display *dpy, /* utils/grabclient.c */ int *width_ret, int *height_ret, char **name_ret); #endif #endif /* __GRABSCREEN_H__ */ xscreensaver-5.36/utils/hsv.h000644 000767 000024 00000001746 12701612232 016253 0ustar00jwzstaff000000 000000 /* xscreensaver, Copyright (c) 1992, 1997 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. */ #ifndef __HSV_H__ #define __HSV_H__ /* Converts between RGB and HSV color spaces. R, G, and B are in the range 0 - 65535; H is in the range 0 - 360; S and V are in the range 0.0 - 1.0. */ extern void hsv_to_rgb (int h, double s, double v, unsigned short *r, unsigned short *g, unsigned short *b); extern void rgb_to_hsv (unsigned short r, unsigned short g, unsigned short b, int *h, double *s, double *v); #endif /* __HSV_H__ */ xscreensaver-5.36/utils/resources.h000644 000767 000024 00000003427 12701612232 017463 0ustar00jwzstaff000000 000000 /* xscreensaver, Copyright (c) 1992-2014 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. */ #ifndef __XSCREENSAVER_RESOURCES_H__ #define __XSCREENSAVER_RESOURCES_H__ extern char *get_string_resource (Display*,char*,char*); extern Bool get_boolean_resource (Display*,char*,char*); extern int get_integer_resource (Display*,char*,char*); extern double get_float_resource (Display*,char*,char*); extern unsigned int get_pixel_resource (Display*,Colormap,char*,char*); extern unsigned int get_minutes_resource (Display*,char*,char*); extern unsigned int get_seconds_resource (Display*,char*,char*); extern int parse_time (const char *string, Bool seconds_default_p, Bool silent_p); extern Pixmap xscreensaver_logo (Screen *screen, Visual *visual, Drawable drawable, Colormap cmap, unsigned long background_color, unsigned long **pixels_ret, int *npixels_ret, Pixmap *mask_ret, Bool big_p); /* A utility function for event-handler functions: Returns True if the event is a simple click, Space, Tab, etc. Returns False otherwise. The idea here is that most hacks interpret to clicks or basic keypresses as "change it up". */ extern Bool screenhack_event_helper (Display *, Window, XEvent *); #endif /* __XSCREENSAVER_RESOURCES_H__ */ xscreensaver-5.36/utils/spline.h000644 000767 000024 00000003530 12701612232 016736 0ustar00jwzstaff000000 000000 /* * Copyright (c) 1987, 1988, 1989 Stanford University * * 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, and that the name of Stanford not be used in advertising or * publicity pertaining to distribution of the software without specific, * written prior permission. Stanford makes no representations about * the suitability of this software for any purpose. It is provided "as is" * without express or implied warranty. * * STANFORD DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. * IN NO EVENT SHALL STANFORD BE LIABLE FOR ANY SPECIAL, INDIRECT OR * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR * OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION * WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ /* This code came with the InterViews distribution, and was translated from C++ to C by Matthieu Devin some time in 1992. */ #ifndef _SPLINE_H_ #define _SPLINE_H_ typedef struct _spline { /* input */ unsigned int n_controls; double* control_x; double* control_y; /* output */ unsigned int n_points; XPoint* points; unsigned int allocated_points; } spline; spline* make_spline (unsigned int size); void compute_spline (spline* s); void compute_closed_spline (spline* s); void just_fill_spline (spline* s); void append_spline_points (spline* s1, spline* s2); void spline_bounding_box (spline* s, XRectangle* rectangle_out); void free_spline(spline *s); #endif /* _SPLINE_H_ */ xscreensaver-5.36/utils/usleep.h000644 000767 000024 00000001537 12701612232 016746 0ustar00jwzstaff000000 000000 /* xscreensaver, Copyright (c) 1992, 1996 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. */ #ifndef __SCREENHACK_USLEEP_H__ #define __SCREENHACK_USLEEP_H__ #ifdef HAVE_CONFIG_H # include "config.h" #endif #ifdef HAVE_UNISTD_H # include #endif extern void screenhack_usleep (unsigned long usecs); #undef usleep #define usleep(usecs) screenhack_usleep(usecs) #endif /* __SCREENHACK_USLEEP_H__ */ xscreensaver-5.36/utils/utils.h000644 000767 000024 00000001471 12701612232 016606 0ustar00jwzstaff000000 000000 /* xscreensaver, Copyright (c) 1997-2014 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. */ #ifdef HAVE_CONFIG_H # include "config.h" #endif #include #include #include #include #ifdef HAVE_JWXYZ # include "jwxyz.h" #else /* real X11 */ # include # include # include #endif /* !HAVE_JWXYZ */ xscreensaver-5.36/utils/version.h000644 000767 000024 00000000156 12777044602 017147 0ustar00jwzstaff000000 000000 static const char screensaver_id[] = "@(#)xscreensaver 5.36 (10-Oct-2016), by Jamie Zawinski (jwz@jwz.org)"; xscreensaver-5.36/utils/visual.h000644 000767 000024 00000003021 12701612233 016743 0ustar00jwzstaff000000 000000 /* xscreensaver, Copyright (c) 1993-2014 by 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. */ #ifndef __VISUAL_H__ #define __VISUAL_H__ extern Visual *get_visual (Screen *, const char *name, Bool, Bool); extern Visual *get_visual_resource (Screen *, char *, char *, Bool); extern int visual_depth (Screen *, Visual *); /* extern int visual_pixmap_depth (Screen *, Visual *); */ extern int visual_class (Screen *, Visual *); extern int visual_cells (Screen *, Visual *); extern int screen_number (Screen *); extern Visual *find_similar_visual (Screen *, Visual *old); extern void describe_visual (FILE *f, Screen *, Visual *, Bool private_cmap_p); extern Visual *get_overlay_visual (Screen *, unsigned long *pixel_return); extern Bool has_writable_cells (Screen *, Visual *); extern Visual *id_to_visual (Screen *, int); extern int get_bits_per_pixel(Display *dpy, int depth); extern Visual *get_gl_visual (Screen *); extern void describe_gl_visual (FILE *, Screen *, Visual *, Bool priv_cmap_p); extern Bool validate_gl_visual (FILE *, Screen *, const char *, Visual *); #endif /* __VISUAL_H__ */ xscreensaver-5.36/utils/vroot.h000644 000767 000024 00000014132 12701612233 016616 0ustar00jwzstaff000000 000000 /* -*- Mode: C; tab-width: 2 -*- */ /*****************************************************************************/ /** Copyright 1991 by Andreas Stolcke **/ /** Copyright 1990 by Solbourne Computer Inc. **/ /** Longmont, Colorado **/ /** **/ /** All Rights Reserved **/ /** **/ /** Permission to use, copy, modify, and distribute this software and **/ /** its documentation for any purpose and without fee is hereby **/ /** granted, provided that the above copyright notice appear in all **/ /** copies and that both that copyright notice and this permis- **/ /** sion notice appear in supporting documentation, and that the **/ /** name of Solbourne not be used in advertising **/ /** in publicity pertaining to distribution of the software without **/ /** specific, written prior permission. **/ /** **/ /** ANDREAS STOLCKE AND SOLBOURNE COMPUTER INC. DISCLAIMS ALL WARRANTIES **/ /** WITH REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF **/ /** MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL ANDREAS STOLCKE **/ /** OR SOLBOURNE BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL **/ /** DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA **/ /** OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER **/ /** TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE **/ /** OR PERFORMANCE OF THIS SOFTWARE. **/ /*****************************************************************************/ /* * vroot.h -- Virtual Root Window handling header file * * This header file redefines the X11 macros RootWindow and DefaultRootWindow, * making them look for a virtual root window as provided by certain `virtual' * window managers like swm and tvtwm. If none is found, the ordinary root * window is returned, thus retaining backward compatibility with standard * window managers. * The function implementing the virtual root lookup remembers the result of * its last invocation to avoid overhead in the case of repeated calls * on the same display and screen arguments. * The lookup code itself is taken from Tom LaStrange's ssetroot program. * * Most simple root window changing X programs can be converted to using * virtual roots by just including * * #include * * after all the X11 header files. It has been tested on such popular * X clients as xphoon, xfroot, xloadimage, and xaqua. * It also works with the core clients xprop, xwininfo, xwd, and editres * (and is necessary to get those clients working under tvtwm). * It does NOT work with xsetroot; get the xsetroot replacement included in * the tvtwm distribution instead. * * Andreas Stolcke , 9/7/90 * - replaced all NULL's with properly cast 0's, 5/6/91 * - free children list (suggested by Mark Martin ), 5/16/91 * - include X11/Xlib.h and support RootWindowOfScreen, too 9/17/91 * * Jamie Zawinski , 28-Apr-1997 * - use ANSI C * * Jamie Zawinski , 3-Sep-2003 * - if the environment variable "XSCREENSAVER_WINDOW" is set, use that * as the root window instead of searching for __SWM_VROOT. * * Jamie Zawinski , 14-Aug-2004 * - changes to get gcc to stop whining about "type punning". * * Jamie Zawinski , 16-Dec-2004 * - fixed that last fix. */ #ifndef _VROOT_H_ #define _VROOT_H_ #define _XSCREENSAVER_VROOT_H_ #if !defined(lint) && !defined(SABER) static const char vroot_rcsid[] = "#Id: vroot.h,v 1.8 2004/12/16 05:33:54 jwz Exp #" "\n" "#Id: vroot.h,v 1.4 1991/09/30 19:23:16 stolcke Exp stolcke #"; #endif #include #include #include static Window #ifdef __STDC__ /* ANSIfication added by jwz, to avoid superfluous warnings. */ VirtualRootWindowOfScreen(Screen *screen) #else /* !__STDC__ */ VirtualRootWindowOfScreen(screen) Screen *screen; #endif /* !__STDC__ */ { static Screen *save_screen = (Screen *)0; static Window root = (Window)0; if (screen != save_screen) { Display *dpy = DisplayOfScreen(screen); Atom __SWM_VROOT = None; int i; Window rootReturn, parentReturn, *children; unsigned int numChildren; /* first check for a hex or decimal window ID in the environment */ const char *xss_id = getenv("XSCREENSAVER_WINDOW"); if (xss_id && *xss_id) { unsigned long id = 0; char c; if (1 == sscanf (xss_id, " 0x%lx %c", &id, &c) || 1 == sscanf (xss_id, " %lu %c", &id, &c)) { root = (Window) id; save_screen = screen; return root; } } root = RootWindowOfScreen(screen); /* go look for a virtual root */ __SWM_VROOT = XInternAtom(dpy, "__SWM_VROOT", False); if (XQueryTree(dpy, root, &rootReturn, &parentReturn, &children, &numChildren)) { for (i = 0; i < numChildren; i++) { Atom actual_type; int actual_format; unsigned long nitems, bytesafter; unsigned char *newRoot = 0; if (XGetWindowProperty(dpy, children[i], __SWM_VROOT, 0, 1, False, XA_WINDOW, &actual_type, &actual_format, &nitems, &bytesafter, &newRoot) == Success && newRoot) { root = *((Window *) newRoot); break; } } if (children) XFree((char *)children); } save_screen = screen; } return root; } #undef RootWindowOfScreen #define RootWindowOfScreen(s) VirtualRootWindowOfScreen(s) #undef RootWindow #define RootWindow(dpy,screen) VirtualRootWindowOfScreen(ScreenOfDisplay(dpy,screen)) #undef DefaultRootWindow #define DefaultRootWindow(dpy) VirtualRootWindowOfScreen(DefaultScreenOfDisplay(dpy)) #endif /* _VROOT_H_ */ xscreensaver-5.36/utils/xmu.h000644 000767 000024 00000000551 12701612233 016256 0ustar00jwzstaff000000 000000 /* This file contains compatibility routines for systems without Xmu. * You would be better served by installing Xmu on your machine or * yelling at your vendor to ship it. */ #ifndef __XMU_H__ #define __XMU_H__ #include #include int XmuPrintDefaultErrorMessage (Display *dpy, XErrorEvent *event, FILE *fp); #endif /* __XMU_H__ */ xscreensaver-5.36/utils/yarandom.h000644 000767 000024 00000006577 12701612233 017275 0ustar00jwzstaff000000 000000 /* xscreensaver, Copyright (c) 1997, 1998, 2003 by 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. */ #ifndef __YARANDOM_H__ #define __YARANDOM_H__ #ifdef HAVE_CONFIG_H # include "config.h" #endif #ifdef HAVE_INTTYPES_H # include #endif #undef random #undef rand #undef drand48 #undef srandom #undef srand #undef srand48 #undef frand #undef RAND_MAX #ifdef VMS # include "vms-gtod.h" #endif extern unsigned int ya_random (void); extern void ya_rand_init (unsigned int); #define random() ya_random() #define RAND_MAX 0xFFFFFFFF /*#define srandom(i) ya_rand_init(0)*/ /* Define these away to keep people from using the wrong APIs in xscreensaver. */ #define rand __ERROR_use_random_not_rand_in_xscreensaver__ #define drand48 __ERROR_use_frand_not_drand48_in_xscreensaver__ #define srandom __ERROR_do_not_call_srandom_in_xscreensaver__ #define srand __ERROR_do_not_call_srand_in_xscreensaver__ #define srand48 __ERROR_do_not_call_srand48_in_xscreensaver__ #define ya_rand_init __ERROR_do_not_call_ya_rand_init_in_xscreensaver__ #if defined (__GNUC__) && (__GNUC__ >= 2) /* Implement frand using GCC's statement-expression extension. */ # define frand(f) \ __extension__ \ ({ double tmp = ((((double) random()) * ((double) (f))) / \ ((double) ((unsigned int)~0))); \ tmp < 0 ? (-tmp) : tmp; }) #else /* not GCC2 - implement frand using a global variable.*/ static double _frand_tmp_; # define frand(f) \ (_frand_tmp_ = ((((double) random()) * ((double) (f))) / \ ((double) ((unsigned int)~0))), \ _frand_tmp_ < 0 ? (-_frand_tmp_) : _frand_tmp_) #endif /* not GCC2 */ /* Compatibility with the xlockmore RNG API (note that the xlockmore hacks never expect negative numbers.) */ #define LRAND() ((long) (random() & 0x7fffffff)) /* The first NRAND(n) is much faster, when uint64_t is available to allow it. * Especially on ARM and other processors without built-in division. * * n must be greater than zero. * * The division by RAND_MAX+1 should optimize down to a bit shift. * * Although the result here is never negative, this needs to return signed * integers: A binary operator in C requires operands have the same type, and * if one side is signed and the other is unsigned, but they're both the same * size, then the signed operand is cast to unsigned, and the result is * similarly unsigned. This can potentially cause problems when idioms like * "NRAND(n) * RANDSIGN()" (where RANDSIGN() returns either -1 or 1) is used * to get random numbers from the range (-n,n). */ #ifdef HAVE_INTTYPES_H # define NRAND(n) ((int32_t) ((uint64_t) random() * (uint32_t) (n) / \ ((uint64_t) RAND_MAX + 1))) #else # define NRAND(n) ((int) (LRAND() % (n))) #endif #define MAXRAND (2147483648.0) /* unsigned 1<<31 as a float */ #define SRAND(n) /* already seeded by screenhack.c */ #endif /* __YARANDOM_H__ */ xscreensaver-5.36/utils/erase.h000644 000767 000024 00000001473 12701612232 016547 0ustar00jwzstaff000000 000000 /* erase.c: Erase the screen in various more or less interesting ways. * Copyright (c) 1997-2001, 2006 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. */ #ifndef __XSCREENSAVER_ERASE_H__ #define __XSCREENSAVER_ERASE_H__ typedef struct eraser_state eraser_state; extern eraser_state *erase_window (Display *, Window, eraser_state *); #endif /* __XSCREENSAVER_ERASE_H__ */ xscreensaver-5.36/utils/xshm.h000644 000767 000024 00000002530 12701612233 016423 0ustar00jwzstaff000000 000000 /* xscreensaver, Copyright (c) 1993, 1994, 1995, 1996, 1997, 1998, 2001 * by 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. */ /* The MIT-SHM (Shared Memory) extension is pretty tricky to use. This file contains the common boiler-plate for creating a shared XImage structure, and for making sure that the shared memory segments get allocated and shut down cleanly. */ #ifndef __XSCREENSAVER_XSHM_H__ #ifdef HAVE_XSHM_EXTENSION # include # include # include extern XImage *create_xshm_image (Display *dpy, Visual *visual, unsigned int depth, int format, char *data, XShmSegmentInfo *shm_info, unsigned int width, unsigned int height); extern void destroy_xshm_image (Display *dpy, XImage *image, XShmSegmentInfo *shm_info); #endif /* HAVE_XSHM_EXTENSION */ #endif /* __XSCREENSAVER_XSHM_H__ */ xscreensaver-5.36/utils/xdbe.h000644 000767 000024 00000002010 12701612233 016357 0ustar00jwzstaff000000 000000 /* xscreensaver, Copyright (c) 1998, 1999 by 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. */ /* The XDBE (Double Buffering) extension is pretty tricky to use, since you can get X errors at inconvenient times during initialization. This file contains a utility routine to make it easier to deal with. */ #ifndef __XSCREENSAVER_XDBE_H__ #ifdef HAVE_DOUBLE_BUFFER_EXTENSION # include extern XdbeBackBuffer xdbe_get_backbuffer (Display *, Window, XdbeSwapAction); #endif /* HAVE_DOUBLE_BUFFER_EXTENSION */ #endif /* __XSCREENSAVER_XDBE_H__ */ xscreensaver-5.36/utils/colorbars.h000644 000767 000024 00000001704 12701612232 017433 0ustar00jwzstaff000000 000000 /* xscreensaver, Copyright (c) 2001, 2003 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. */ #ifndef __COLORBARS_H__ #define __COLORBARS_H__ /* Renders colorbars (plus an xscreensaver logo) onto the given Window or Pixmap. Width and height may be zero (meaning "full size".) Colors will be allocated from the cmap, and never freed. */ extern void draw_colorbars (Screen *, Visual *, Drawable, Colormap, int x, int y, int width, int height); #endif /* __COLORBARS_H__ */ xscreensaver-5.36/utils/minixpm.h000644 000767 000024 00000002243 12701612232 017125 0ustar00jwzstaff000000 000000 /* xscreensaver, Copyright (c) 2001-2006 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. */ #ifndef __MINIXPM_H__ #define __MINIXPM_H__ /* A dead simple XPM parser that knows how to make XImage structures. Only handles single-byte color XPMs. */ extern XImage * minixpm_to_ximage (Display *, Visual *, Colormap, int depth, unsigned long transparent_color, const char * const * data, int *width_ret, int *height_ret, unsigned long **pixels_ret, int *npixels_ret, unsigned char **mask_ret); #endif /* __MINIXPM_H__ */ xscreensaver-5.36/utils/xscreensaver-intl.h000644 000767 000024 00000002272 12701612233 021123 0ustar00jwzstaff000000 000000 /* xscreensaver, Copyright (c) 2002 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. */ #ifndef __XSCREENSAVER_INTL_H__ #define __XSCREENSAVER_INTL_H__ #ifdef ENABLE_NLS # include # define _(String) dgettext(GETTEXT_PACKAGE,(String)) # ifdef gettext_noop # define N_(String) gettext_noop((String)) # else /* !gettext_noop */ # define N_(String) (String) # endif /* !gettext_noop */ #else /* !ENABLE_NLS */ # define _(String) (String) # define N_(String) (String) # define textdomain(String) (String) # define gettext(String) (String) # define dgettext(Domain,String) (String) # define dcgettext(Domain,String,Type) (String) # define bindtextdomain(Domain,Directory) (Domain) #endif /* !ENABLE_NLS */ #endif /* __XSCREENSAVER_INTL_H__ */ xscreensaver-5.36/utils/textclient.h000644 000767 000024 00000002506 12721432253 017636 0ustar00jwzstaff000000 000000 /* xscreensaver, Copyright (c) 2012-2016 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. * * Running "xscreensaver-text" and returning bytes from it. */ #ifndef __TEXTCLIENT_H__ #define __TEXTCLIENT_H__ # ifdef USE_IPHONE # undef HAVE_FORKPTY # endif typedef struct text_data text_data; extern text_data *textclient_open (Display *); extern void textclient_close (text_data *); extern void textclient_reshape (text_data *, int pix_w, int pix_h, int char_w, int char_h, int max_lines); extern int textclient_getc (text_data *); extern Bool textclient_putc (text_data *, XKeyEvent *); # if defined(USE_IPHONE) || defined(HAVE_ANDROID) extern char *textclient_mobile_date_string (void); extern char *textclient_mobile_url_string (Display *, const char *url); # endif #endif /* __TEXTCLIENT_H__ */ xscreensaver-5.36/utils/aligned_malloc.h000644 000767 000024 00000002527 12701612232 020403 0ustar00jwzstaff000000 000000 /* -*- mode: c; tab-width: 4; fill-column: 128 -*- */ /* vi: set ts=4 tw=128: */ /* aligned_malloc.h, Copyright (c) 2014 Dave Odell 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. */ #ifndef __ALIGNED_MALLOC_H__ #define __ALIGNED_MALLOC_H__ #include #if HAVE_UNISTD_H # include #endif #if defined ANDROID # include #endif #if (_POSIX_VERSION >= 200112L || _XOPEN_VERSION >= 600) && \ (!defined ANDROID || __ANDROID_API__ >= 15) # define ALIGNED_MALLOC_HAS_MEMALIGN 1 #endif #if ALIGNED_MALLOC_HAS_MEMALIGN # define aligned_malloc posix_memalign # define aligned_free free #else /* !ALIGNED_MALLOC_HAS_MEMALIGN */ /* This can't simply be named posix_memalign, since the real thing uses free(), but this one can't. */ int aligned_malloc(void **ptr, unsigned alignment, size_t size); void aligned_free(void *); #endif /* ALIGNED_MALLOC_HAS_MEMALIGN */ #endif /* __ALIGNED_MALLOC_H__ */ xscreensaver-5.36/utils/thread_util.h000644 000767 000024 00000041303 12701612232 017750 0ustar00jwzstaff000000 000000 /* -*- mode: c; tab-width: 4; fill-column: 78 -*- */ /* vi: set ts=4 tw=78: */ /* thread_util.h, Copyright (c) 2014 Dave Odell 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. */ #ifndef THREAD_UTIL_H #define THREAD_UTIL_H /* thread_util.h because C11 took threads.h. */ /* And POSIX threads because there aren't too many systems that support C11 threads that don't already support POSIX threads. ...Not that it would be too hard to convert from the one to the other. Or to have both. */ /* Beware! Multithreading is a great way to add insidious and catastrophic bugs to a program. Make sure you understand the risks. You may wish to become familiar with race conditions, deadlocks, mutexes, condition variables, and, in lock-free code, memory ordering, cache hierarchies, etc., before working with threads. On the other hand, if a screenhack locks up or crashes, it's not the end of the world: XScreenSaver won't unlock the screen if that happens. */ /* The basic stragegy for applying threads to a CPU-hungry screenhack: 1. Find the CPU-hungry part of the hack. 2. Change that part so the workload can be divided into N equal-sized loads, where N is the number of CPU cores in the machine. (For example: with two cores, one core could render even scan lines, and the other odd scan lines.) 2a. Keeping in mind that two threads should not write to the same memory at the same time. Specifically, they should not be writing to the same cache line at the same time -- so align memory allocation and memory accesses to the system cache line size as necessary. 3. On screenhack_init, create a threadpool object. This creates N worker threads, and each thread creates and owns a user-defined struct. After creation, the threads are idle. 4. On screenhack_frame, call threadpool_run(). Each thread simultaneously wakes up, calls a function that does one of the equal-sized loads, then goes back to sleep. The main thread then calls threadpool_wait(), which returns once all the worker threads have finished. Using this to implement SMP won't necessarily increase performance by a factor of N (again, N is CPU cores.). Both X11 and Cocoa on OS X can impose a not-insignificant amount of overhead even when simply blitting full-screen XImages @ 30 FPS. On systems with simultaneous multithreading (a.k.a. Hyper-threading), performance gains may be slim to non-existant. */ #include "aligned_malloc.h" #if HAVE_CONFIG_H /* For HAVE_PTHREAD. */ # include "config.h" #endif #include #if HAVE_UNISTD_H /* For _POSIX_THREADS. */ # include #endif #if defined HAVE_JWXYZ # include "jwxyz.h" #else # include #endif #if HAVE_PTHREAD int threads_available(Display *dpy); #else # define threads_available(dpy) (-1) #endif /* > 0: Threads are available. This is normally _POSIX_VERSION. -1: Threads are not available. */ unsigned hardware_concurrency(Display *dpy); /* This is supposed to return the number of available CPU cores. This number isn't necessarily constant: a system administrator can hotplug or enable/disable CPUs on certain systems, or the system can deactivate a malfunctioning core -- but these are rare. If threads are unavailable, this function will return 1. This function isn't fast; the result should be cached. */ unsigned thread_memory_alignment(Display *dpy); /* Returns the proper alignment for memory allocated by a thread that is shared with other threads. A typical CPU accesses the system RAM through a cache, and this cache is divided up into cache lines - aligned chunks of memory typically 32 or 64 bytes in size. Cache faults cause cache lines to be populated from memory. And, in a multiprocessing environment, two CPU cores can access the same cache line. The consequences of this depend on the CPU model: - x86 implements the MESI protocol [1] to maintain cache coherency between CPU cores, with a serious performance penalty on both Intel [1] and AMD [2]. Intel uses the term "false sharing" to describe two CPU cores accessing different memory in the same cache line. - ARM allows CPU caches to become inconsistent in this case [3]. Memory fences are needed to prevent horrible non-deterministic bugs from occurring. Other CPU architectures have similar behavior to one of the above, depending on whether they are "strongly-orderered" (like x86), or "weakly-ordered" (like ARM). Aligning multithreaded memory accesses according to the cache line size neatly sidesteps both issues. One complication is that CPU caches are divided up into separate levels, and occasionally different levels can have different cache line sizes, so to be safe this function returns the largest cache line size among all levels. If multithreading is not in effect, this returns sizeof(void *), because posix_memalign(3) will error out if the alignment is set to be smaller than that. [1] Intel(R) 64 and IA-32 Architectures Optimization Reference Manual (Order Number: 248966-026): 2.1.5 Cache Hierarchy [2] Software Optimization Guide for AMD Family 10h Processors (Publication #40546): 11.3.4 Data Sharing between Caches [3] http://wanderingcoder.net/2011/04/01/arm-memory-ordering/ */ /* Note: aligned_malloc uses posix_memalign(3) when available, or malloc(3) otherwise. As of SUSv2 (1997), and *probably* earlier, these are guaranteed to be thread-safe. C89 does not discuss threads, or thread safety; non-POSIX systems, watch out! http://pubs.opengroup.org/onlinepubs/7908799/xsh/threads.html http://pubs.opengroup.org/onlinepubs/009695399/functions/xsh_chap02_09.html */ /* int thread_malloc(void **ptr, Display *dpy, unsigned size); */ #define thread_malloc(ptr, dpy, size) \ (aligned_malloc((ptr), thread_memory_alignment(dpy), (size))) /* This simply does a malloc aligned to thread_memory_alignment(). See above. On failure, an errno is returned, usually ENOMEM. It's possible for two malloc()'d blocks to at least partially share the same cache line. When a different thread is writing to each block, then bad things can happen (see thread_memory_alignment). Better malloc() implementations will divide memory into pools belonging to one thread or another, causing memory blocks belonging to different threads to typically be located on different memory pages (see getpagesize(2)), mitigating the problem in question...but there's nothing stopping threads from passing memory to each other. And it's not practical for the system to align each block to 64 or 128 byte boundaries -- it's not uncommon to need lots and lots of 8-32 byte allocations, and the waste could become a bit excessive. Some rules of thumb to take away from this: 1. Use thread_alloc for memory that might be written to by a thread that didn't originally allocate the object. 2. Use thread_alloc for memory that will be handed from one thread to another. 3. Use malloc if a single thread allocates, reads from, writes to, and frees the block of memory. Oddly, I (Dave) have not seen this problem described anywhere else. */ #define thread_free(ptr) aligned_free(ptr) #if HAVE_PTHREAD # if defined _POSIX_THREADS && _POSIX_THREADS >= 0 /* See The Open Group Base Specifications Issue 7, , Constants for Options and Option Groups http://pubs.opengroup.org/onlinepubs/9699919799/basedefs/unistd.h.html#tag_13_77_03_02 */ # include /* Most PThread synchronization functions only fail when they are misused. */ # if defined NDEBUG # define PTHREAD_VERIFY(expr) (void)(expr) # else # include # define PTHREAD_VERIFY(expr) assert(!(expr)) # endif extern const pthread_mutex_t mutex_initializer; extern const pthread_cond_t cond_initializer; # else /* Whatever caused HAVE_PTHREAD to be defined (configure script, usually) made a mistake if this is reached. */ /* Maybe this should be a warning. */ # error HAVE_PTHREAD is defined, but _POSIX_THREADS is not. /* #undef HAVE_PTHREAD */ # endif #endif struct threadpool { /* This is always the same as the count parameter fed to threadpool_create(). Here's a neat trick: if the threadpool is zeroed out with a memset, and threadpool_create() is never called to create 0 threads, then threadpool::count can be used to determine if the threadpool object was ever initialized. */ unsigned count; /* Copied from threadpool_class. No need for thread_create here, though. */ size_t thread_size; void (*thread_run)(void *self); void (*thread_destroy)(void *self); void *serial_threads; #if HAVE_PTHREAD pthread_mutex_t mutex; pthread_cond_t cond; /* Number of threads waiting for the startup signal. */ unsigned parallel_pending; /* Number of threads still running. During startup, this is the index of the thread currently being initialized. */ unsigned parallel_unfinished; pthread_t *parallel_threads; #endif }; /* The threadpool_* functions manage a group of threads (naturally). Each thread owns an object described by a threadpool_class. When threadpool_run() is called, the specified func parameter is called on each thread in parallel. Sometime after calling threadpool_run(), call threadpool_wait(), which waits for each thread to return from threadpool_class::run(). Note that thread 0 runs on the thread from which threadpool_run is called from, so if each thread has an equal workload, then when threadpool_run returns, the other threads will be finished or almost finished. Adding code between threadpool_run and threadpool_wait increases the odds that threadpool_wait won't actually have to wait at all -- which is nice. If the system does not provide threads, then these functions will fake it: everything will appear to work normally from the perspective of the caller, but when threadpool_run() is called, the "threads" are run synchronously; threadpool_wait() does nothing. */ struct threadpool_class { /* Size of the thread private object. */ size_t size; /* Create the thread private object. Called in sequence for each thread (effectively) from threadpool_create. self: A pointer to size bytes of memory, allocated to hold the thread object. pool: The threadpool object that owns all the threads. If the threadpool is nested in another struct, try GET_PARENT_OBJ. id: The ID for the thread; numbering starts at zero and goes up by one for each thread. Return 0 on success. On failure, return a value from errno.h; this will be returned from threadpool_create. */ int (*create)(void *self, struct threadpool *pool, unsigned id); /* Destroys the thread private object. Called in sequence (though not always the same sequence as create). Warning: During shutdown, it is possible for destroy() to be called while other threads are still in threadpool_run(). */ void (*destroy)(void *self); }; /* Returns 0 on success, on failure can return ENOMEM, or any error code from threadpool_class.create. */ int threadpool_create(struct threadpool *self, const struct threadpool_class *cls, Display *dpy, unsigned count); void threadpool_destroy(struct threadpool *self); void threadpool_run(struct threadpool *self, void (*func)(void *)); void threadpool_wait(struct threadpool *self); /* io_thread is meant to wrap blocking I/O operations in a one-shot worker thread, with cancel semantics. Unlike threadpool_*, io_thread will not 'fake it'; it is up to the caller to figure out what to do if the system doesn't have threads. In particular, the start_routine passed to io_thread_create will never be called. Clients of io_thread implement four functions: - state *process_start(...); Starts the worker thread. - bool process_is_done(state *); Returns true if the I/O operation is complete. - void process_cancel(state *); "Cancels" the I/O operation. The thread will continue to run, but it will detach, and clean itself up upon completion. - int process_finish(state *, ...) Waits for the I/O operation to complete, returns results, and cleans up. Or: /---\ \/ | /--> cancel start -> is_done --+ \--> finish These functions follow a basic pattern: - start: 1. Allocate a thread state object with thread_alloc. This state object contains an io_thread member. 2. Save parameters from the start parameters to the state object. 3. Start the thread with _io_thread_create. The thread receives the state object as its parameter. - On the worker thread: 1. Do the I/O. 2. Call io_thread_return. 2a. If the result != 0, free the state object. - is_done: 1. Just call _io_thread_is_done. - cancel: 1. Call io_thread_cancel. 1a. If the result != 0, free the state object. - finish: 1. Call io_thread_finish. 2. Copy results out of the state object as needed. 3. Free the state object...or return it to the caller. Incidentally, there may sometimes be asynchronous versions of blocking I/O functions (struct aiocb and friends, for example); these should be preferred over io_thread when performance is a concern. */ enum _io_thread_status { _io_thread_working, _io_thread_done, _io_thread_cancelled }; struct io_thread { #if HAVE_PTHREAD /* Common misconception: "volatile" should be applied to atomic variables, such as 'status', below. This is false, see . */ enum _io_thread_status status; pthread_t thread; #else char gcc_emits_a_warning_when_the_struct_has_no_members; #endif }; #if HAVE_PTHREAD void *io_thread_create(struct io_thread *self, void *parent, void *(*start_routine)(void *), Display *dpy, unsigned stacksize); /* Create the thread, returns NULL on failure. Failure is usually due to ENOMEM, or the system doesn't support threads. self: The io_thread object to be initialized. parent: The parameter to start_routine. The io_thread should be contained within or be reachable from this. start_routine: The start routine for the worker thread. dpy: The X11 Display, so that '*useThreads' is honored. stacksize: The stack size for the thread. Set to 0 for the system default. A note about stacksize: Linux, for example, uses a default of 2 MB of stack per thread. Now, this memory is usually committed on the first write, so lots of threads won't waste RAM, but it does mean that on a 32-bit system, there's a limit of just under 1024 threads with the 2 MB default due to typical address space limitations of 2 GB for userspace processes. And 1024 threads might not always be enough... */ int io_thread_return(struct io_thread *self); /* Called at the end of start_routine, from above. Returns non-zero if the thread has been cancelled, and cleanup needs to take place. */ int io_thread_is_done(struct io_thread *self); /* Call from the main thread. Returns non-zero if the thread finished. */ int io_thread_cancel(struct io_thread *self); /* Call from the main thread if the results from the worker thread are not needed. This cleans up the io_thread. Returns non-zero if cleanup needs to take place. */ void io_thread_finish(struct io_thread *self); /* Call from the main thread to wait for the worker thread to finish. This cleans up the io_thread. */ #else #define IO_THREAD_STACK_MIN 0 #define io_thread_create(self, parent, start_routine, dpy, stacksize) NULL #define io_thread_return(self) 0 #define io_thread_is_done(self) 1 #define io_thread_cancel(self) 0 #define io_thread_finish(self) #endif #if HAVE_PTHREAD # define THREAD_DEFAULTS "*useThreads: True", # define THREAD_DEFAULTS_XLOCK "*useThreads: True\n" # define THREAD_OPTIONS \ {"-threads", ".useThreads", XrmoptionNoArg, "True"}, \ {"-no-threads", ".useThreads", XrmoptionNoArg, "False"}, #else # define THREAD_DEFAULTS # define THREAD_DEFAULTS_XLOCK # define THREAD_OPTIONS #endif /* If a variable 'member' is known to be a member (named 'member_name') of a struct (named 'struct_name'), then this can find a pointer to the struct that contains it. */ #define GET_PARENT_OBJ(struct_name, member_name, member) (struct_name *)((char *)member - offsetof(struct_name, member_name)); #endif xscreensaver-5.36/utils/async_netdb.h000664 000767 000024 00000016240 12701612232 017741 0ustar00jwzstaff000000 000000 /* vi: set tw=78: */ /* async_netdb.h, Copyright (c) Dave Odell * * 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. */ #ifndef ASYNC_NETDB_H #define ASYNC_NETDB_H #include "thread_util.h" #include #include #include #include /* Both async_name_from_addr_* and async_addr_from_name_* follow basic pattern for io_thread clients as described in thread_util.h: 1. async_*_from_*_start 2. async_*_from_*_is_done (repeat as necessary) 3a. async_*_from_*_finish to retrieve the results, or: 3b. async_*_from_*_cancel to abort the lookup. On systems that can't do asynchronous host lookups, the *_finish functions do the actual lookup. */ #ifndef NI_MAXHOST /* From the glibc man page for getnameinfo(3): Since glibc 2.8, these definitions are exposed only if one of the feature test macros _BSD_SOURCE, _SVID_SOURCE, or _GNU_SOURCE is defined. */ # define NI_MAXHOST 1025 #endif #if HAVE_PTHREAD && HAVE_GETADDRINFO /* If threads or getaddrinfo() are unavailable, then the older gethostbyname() and gethostbyaddr() functions are used, and IPv6 is disabled. */ # define ASYNC_NETDB_USE_GAI 1 #endif #if ASYNC_NETDB_USE_GAI /* Without using union, gcc-6 warns for breaking strict aliasing rules */ typedef union { struct sockaddr_storage x_sockaddr_storage; struct sockaddr_in x_sockaddr_in; struct sockaddr_in6 x_sockaddr_in6; } async_netdb_sockaddr_storage_t; int _async_netdb_is_done (struct io_thread *io); #else /* Because the definition for the above case is now union, the definition for this case must also be union... */ typedef union { struct sockaddr_in x_sockaddr_in; } async_netdb_sockaddr_storage_t; # ifndef EAI_SYSTEM /* The EAI_* codes are specified specifically as preprocessor macros, so the #ifdef here should always work... http://pubs.opengroup.org/onlinepubs/009604499/basedefs/netdb.h.html */ # define ASYNC_NETDB_FAKE_EAI 1 /* Even without addrinfo, the EAI_* error codes are used. The numbers are from Linux's netdb.h. */ # define EAI_NONAME -2 # define EAI_AGAIN -3 # define EAI_FAIL -4 # define EAI_MEMORY -10 # define EAI_SYSTEM -11 const char *_async_netdb_strerror (int errcode); # define gai_strerror(errcode) _async_netdb_strerror (errcode) # endif # define _async_netdb_is_done(io) 1 #endif /* In non-threaded mode, _async_name_from_addr_param is used in place of async_name_from_addr. */ struct _async_name_from_addr_param { socklen_t addrlen; async_netdb_sockaddr_storage_t addr; }; typedef struct async_name_from_addr { /* Stupid memory trick, thwarted: The host string could be at the beginning of this structure, and the memory block that contains this struct could be resized and returned directly in async_name_from_addr_finish. But... There is no aligned_realloc. In fact, aligned_realloc is a bit of a problem, mostly because: 1. realloc() is the only way to resize a heap-allocated memory block. 2. realloc() moves memory. 3. The location that realloc() moves memory to won't be aligned. */ struct _async_name_from_addr_param param; struct io_thread io; char host[NI_MAXHOST]; int gai_error; int errno_error; } *async_name_from_addr_t; async_name_from_addr_t async_name_from_addr_start (Display *dpy, const struct sockaddr *addr, socklen_t addrlen); /* Starts an asynchronous name-from-address lookup. dpy: An X11 Display with a .useThreads resource. addr: An address. Like various socket functions (e.g. bind(2), connect(2), sendto(2)), this isn't really a struct sockaddr so much as a "subtype" of sockaddr, like sockaddr_in, or sockaddr_in6, or whatever. addrlen: The (actual) length of *addr. Returns NULL if the request couldn't be created (due to low memory). */ #define async_name_from_addr_is_done(self) _async_netdb_is_done (&(self)->io) #if ASYNC_NETDB_USE_GAI void async_name_from_addr_cancel (async_name_from_addr_t self); #else # define async_name_from_addr_cancel(self) (free (self)) #endif int async_name_from_addr_finish (async_name_from_addr_t self, char **host, int *errno_error); /* Gets the result of an asynchronous name-from-address lookup. If the lookup operation is still in progress, or if the system can't do async lookups, this will block. This cleans up the lookup operation; do not use 'self' after calling this function. self: The lookup operation. host: If no error, the name of the host. Free this with free(3). errno_error: The value of errno if EAI_SYSTEM is returned. Can be NULL. Returns 0 on success, otherwise an error from getnameinfo(3). */ /* In non-threaded mode, async_addr_from_name contains different stuff. */ typedef struct async_addr_from_name { #if ASYNC_NETDB_USE_GAI struct io_thread io; int gai_error; int errno_error; struct addrinfo *res; #else char dont_complain_about_empty_structs; #endif } *async_addr_from_name_t; async_addr_from_name_t async_addr_from_name_start (Display *dpy, const char *host); /* Starts an asynchronous address-from-name lookup. dpy: An X11 display. host: The hostname to look up. Returns NULL if the request couldn't be created (due to low memory). */ #define async_addr_from_name_is_done(self) _async_netdb_is_done (&(self)->io) #if ASYNC_NETDB_USE_GAI void async_addr_from_name_cancel (async_addr_from_name_t self); #else # define async_addr_from_name_cancel(self) (thread_free (self)); #endif /* sockaddr must be sizeof(async_netdb_sockaddr_storage_t) in size. */ int async_addr_from_name_finish (async_addr_from_name_t self, void *addr, socklen_t *addrlen, int *errno_error); /* Returns the address from an asynchronous address-from-name operation. If the lookup is still in progress, or the system can't do an asynchronous lookup, this blocks. This cleans up the lookup operation; do not use 'self' after calling this function. self: The lookup operation. addr: A sockaddr. This must be as large as or larger than sizeof(async_netdb_sockaddr_storage_t). (Hint: just use an instance of async_netdb_sockaddr_storage_t itself here.) addrlen: The length of the obtained sockaddr. errno_error: The value of errno if EAI_SYSTEM is returned. Can be NULL. Returns 0 on success, or an error from getaddrinfo(3). */ #endif /* Local Variables: */ /* mode: c */ /* fill-column: 78 */ /* c-file-style: "gnu" */ /* c-basic-offset: 2 */ /* indent-tabs-mode: nil */ /* End: */ xscreensaver-5.36/utils/xft.h000644 000767 000024 00000011020 12701612233 016237 0ustar00jwzstaff000000 000000 /* xscreensaver, Copyright (c) 2014-2015 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. */ /* Compatibility layer using XDrawString, XDrawString16() or Xutf8DrawString(). This layer is used by X11 systems without Xft, and by MacOS / iOS. */ #ifndef __XSCREENSAVER_XFT_H__ #define __XSCREENSAVER_XFT_H__ /* The XGlyphInfo field names and values are, of course, arbitrarily different from XCharStruct for no sensible reason. These macros translate between them. */ # define XGlyphInfo_to_XCharStruct(G,C) do { \ (C).lbearing = -(G).x; \ (C).rbearing = (G).width - (G).x; \ (C).ascent = (G).y; \ (C).descent = (G).height - (G).y; \ (C).width = (G).xOff; \ } while (0) # define XCharStruct_to_XGlyphInfo(C,G) do { \ (G).x = -(C).lbearing; \ (G).y = (C).ascent; \ (G).xOff = (C).width; \ (G).yOff = 0; \ (G).width = (C).rbearing - (C).lbearing; \ (G).height = (C).ascent + (C).descent; \ } while (0) /* Xutf8TextExtents returns a bounding box in an XRectangle, which conveniently interprets everything in the opposite direction from XGlyphInfo! */ # define XCharStruct_to_XmbRectangle(C,R) do { \ (R).x = (C).lbearing; \ (R).y = -(C).ascent; \ (R).width = (C).rbearing - (C).lbearing; \ (R).height = (C).ascent + (C).descent; \ } while (0) # define XmbRectangle_to_XCharStruct(R,C,ADV) do { \ (C).lbearing = (R).x; \ (C).rbearing = (R).width + (R).x; \ (C).ascent = -(R).y; \ (C).descent = (R).height + (R).y; \ (C).width = (ADV); \ } while (0) # ifdef HAVE_XFT # include # else /* !HAVE_XFT -- the rest of the file */ # ifdef HAVE_COCOA # include "jwxyz.h" #elif defined(HAVE_ANDROID) # include "jwxyz.h" # else # include # endif /* This doesn't seem to work right under X11. See comment in xft.c. */ # ifndef HAVE_COCOA # undef HAVE_XUTF8DRAWSTRING # endif # ifndef _Xconst # define _Xconst const # endif typedef struct _XGlyphInfo { unsigned short width, height; /* bounding box of the ink */ short x, y; /* distance from upper left of bbox to glyph origin. */ short xOff, yOff; /* distance from glyph origin to next origin. */ } XGlyphInfo; typedef struct _XftFont { XFontStruct *xfont; # ifdef HAVE_XUTF8DRAWSTRING XFontSet fontset; # endif char *name; int ascent; int descent; int height; } XftFont; typedef struct { unsigned short red; unsigned short green; unsigned short blue; unsigned short alpha; } XRenderColor; typedef struct _XftColor { unsigned long pixel; XRenderColor color; } XftColor; typedef struct _XftDraw XftDraw; typedef unsigned char FcChar8; XftFont *XftFontOpenXlfd (Display *dpy, int screen, _Xconst char *xlfd); #define XftFontOpenName XftFontOpenXlfd void XftFontClose (Display *dpy, XftFont *font); Bool XftColorAllocName (Display *dpy, _Xconst Visual *visual, Colormap cmap, _Xconst char *name, XftColor *result); Bool XftColorAllocValue (Display *dpy, _Xconst Visual *visual, Colormap cmap, _Xconst XRenderColor *color, XftColor *result); void XftColorFree (Display *dpy, Visual *visual, Colormap cmap, XftColor *color); XftDraw *XftDrawCreate (Display *dpy, Drawable drawable, Visual *visual, Colormap colormap); void XftDrawDestroy (XftDraw *draw); void XftTextExtentsUtf8 (Display *dpy, XftFont *pub, _Xconst FcChar8 *string, int len, XGlyphInfo *extents); void XftDrawStringUtf8 (XftDraw *draw, _Xconst XftColor *color, XftFont *pub, int x, int y, _Xconst FcChar8 *string, int len); # endif /* !HAVE_XFT */ #endif /* __XSCREENSAVER_XFT_H__ */ xscreensaver-5.36/utils/utf8wc.h000644 000767 000024 00000003606 12701612232 016670 0ustar00jwzstaff000000 000000 /* xscreensaver, Copyright (c) 2014-2015 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. */ #ifndef __XSCREENSAVER_UTF8WC_H__ #define __XSCREENSAVER_UTF8WC_H__ /* Utilities for converting between UTF8 and XChar2b. */ /* Converts a null-terminated UTF8 string to a null-terminated XChar2b array. This only handles characters that can be represented in 16 bits, the Basic Multilingual Plane. (No hieroglyphics, Elvish, Klingon or Emoji.) */ extern XChar2b * utf8_to_XChar2b (const char *, int *length_ret); /* Converts a null-terminated XChar2b array to a null-terminated UTF8 string. */ extern char * XChar2b_to_utf8 (const XChar2b *, int *length_ret); /* Split a UTF8 string into an array of strings, one per character. The sub-strings will be null terminated and may be multiple bytes. */ extern char ** utf8_split (const char *string, int *length_ret); /* Converts a UTF8 string to the closest Latin1 or ASCII equivalent. */ extern char *utf8_to_latin1 (const char *string, Bool ascii_p); /* Converts a Unicode character to a multi-byte UTF8 sequence. Returns the number of bytes written. */ extern int utf8_encode (unsigned long uc, char *out, long length); /* Parse the first UTF8 character at the front of the string. Return the Unicode character, and the number of bytes read. */ extern long utf8_decode (const unsigned char *in, long length, unsigned long *unicode_ret); #endif /* __XSCREENSAVER_UTF8WC_H__ */ xscreensaver-5.36/utils/images/logo-180.xpm000644 000767 000024 00000102022 12701614664 020543 0ustar00jwzstaff000000 000000 /* XPM */ /* XScreenSaver Logo, designed by Angela Goodman Copyright (c) 2001, 2002 by Jamie Zawinski Unauthorized use or reproduction prohibited. https://www.jwz.org/xscreensaver/ */ static const char * const logo_180_xpm[] = { "180 180 16 1", " c None m None", ") c #FF0000 m #FFFFFF", ", c #FFFFFF m #FFFFFF", ". c #000000 m #000000", "- c #ED9E00 m #FFFFFF", "' c #4F3504 m #000000", "= c #DBDBDB m #000000", "> c #B0B0B0 m #000000", "+ c #929292 m #000000", "; c #797979 m #000000", "@ c #A30000 m #000000", "# c #604D28 m #000000", "$ c #600000 m #000000", "% c #37332D m #000000", "& c #2D0C05 m #000000", "* c #A46E00 m #000000", " ", " . ", " .. ", " ... ", " . ... ", " .. ... ", " .&..... ", " &&.... ", " .@&.... ", " $)..... ", " .)@.... ", " .@)@.... ", " &))$.... ", " .)))&... ", " .@))@&... ", " $)))@.... ", " &))))$.... ", " .)))))&... ", " @))))@.... ", " $)))))$&... ", " .)))))).&.. ", " .))))))@.... .. ", " .)))))))&'... .. ... ", " .@)))))))%'.. . ... ", " @)))))))$#&.. .. ... ", " $))))))))&#... .& .... ", " &))))))))$*%.. &. .... ", " $))))))))@#*... .$..... ", " &)))))))))&-'.. .@$..... ", " $)))))))))&-*.. &)...... ", " &)))))))))@*-... .@@..... ", " .)))))))))$*-&.. &)@..... ", " .)))))))))$**... .@)$..&.. ", " .)))))))))&-'.. &))$.&'.. ", " $))))))))$'-... .@))$.*'.. ", " $)))))))).-'.. $)))&%-... ", " @)))))))$#-... .))))&*-.. ", " .@)))))))&-#.. &))))&-*.. ", " .)))))))$*-... .@))))&--... ", " ....................................................$)))))))&-*.........&)))))&-*............................................................... ", " .....................................................@))))))$#-&.........$)))))&--................................................................. ", " .....................................................&)))))))&-*..........))))))$--.................................................................. ", " .....................................................@))))))$*-'.........$))))))$*-.................................................................. ", " .....+,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,+&))))))).--..;,,,,,,#@))))))@*-..;,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,=#.... ", " ....%,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,=&)))))))@'-#..=,,,,,=&)))))))$*-..;,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,=.... ", " ....;,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,%@)))))))&--&.%,,,,,,+$)))))))@#-..;,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,=.... ", " ....+,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,%$)))))))@'-*..+,,,,,,%)))))))))&-%.#,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,=.... ", " ....+,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,+$))))))))$*-'.&=,,,,,=&)))))))))&-'.&,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,=.... ", " ....+,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,>.)))))))))&--..#,,,,,,;@)))))))))$-#..=,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,=.... ", " ....+,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,=&@))))))))$*-*..>,,,,,,#@)))))))))$**..>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,=.... ", " ....+,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,=%@)))))))))&--'.&,,,,,,=&))))))))))@#-..+,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,=.... ", " ....+,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,;$))))))))))%--..;,,,,,,>$)))))))))))%-&.#,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,=.... ", " ....+,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,=&))))))))))@#--..+,,,,,,;@)))))))))))&-'.%,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,=.... ", " ....+,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,>=,,,,,,,%@))))))))))$--#..=,,,,,,%))))))))))))$*#..=,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,=.... ", " ....+,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,;.>,&&=,,+$)))))))))))&--'.%,,,,,,,&))))))))))))@'*..>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,=.... ", " ....+,,,,,,,,,,,,=>>>>>>+>>>>+>>>>+&$;#..;>>&)))))))))))@'--..%>>>>>>+&)))))))))))))&-&.%>>>>+>>>>+>>>>+>>>>+>>>>+>>>>+>>>>>>>>>>>>>>=,,,,,,,,,,,=.... ", " ....+,,,,,,,,,,+...................@&.......$)))))))))))@#--..........$)))))))))))))$*#...............................................%>,,,,,,,,,=.... ", " ....+,,,,,,,,,#...................&)........@)))))))))))@*-*..........@)))))))))))))@#*.................................................+,,,,,,,,=.... ", " ....+,,,,,,,,+....................@@.......$))))))))))))$*-*..........@))))))))))))))&-&.................................................=,,,,,,,=.... ", " ....+,,,,,,,=....................&)@.......)))))))))))))$--#..........@))))))))))))))$*#.................................................%,,,,,,,=.... ", " ....+,,,,,,,>....................@)$......&)))))))))))))$*-*..........)))))))))))))))@'*..................................................,,,,,,,=.... ", " ....+,,,,,,,+....................)).......$)))))))))))))@*-#..........))))))))))))))))&-..................................................>,,,,,,=.... ", " ....+,,,,,,,+...................@)).......@)))))))))))))@#-*..........))))))))))))))))$#'.................................................>,,,,,,=.... ", " ....+,,,,,,,+...................@)@......&)))))))))))))))%-*..........)))))))))))))))))&-.................................................>,,,,,,=.... ", " ....+,,,,,,,+..................$))$......$)))))))))))))))&--..........)))))))))))))))))$*'................................................>,,,,,,=.... ", " ....+,,,,,,,+..................@))&......$)))))))))))))))$*-&.........)))))))))))))))))@%-................................................>,,,,,,=.... ", " ....+,,,,,,,+..................))).......@))))))))))))))))&-#.........))))))))))))))))))&*'...............................................>,,,,,,=.... ", " ....+,,,,,,,+.................$))).......@))))))))))))))))$*-.........))))))))))))))))))@'*...............................................>,,,,,,=.... ", " ....+,,,,,,,+.................@))@.......))))))))))))))))))&-&........)))))))))))))))))))$*'..............................................>,,,,,,=.... ", " ....+,,,,,,,+.................)))@.%.....))))))))))))))))))$#*........@))))))))))))))))))@&-..............................................>,,,,,,=.... ", " ....+,,,,,,,+................$)))$.*.....)))))))))))))))))))&*&.......$)))))))))))))))))))$*#.............................................>,,,,,,=.... ", " ....+,,,,,,,+................@)))$'*.....@)))))))))))))))))))&*.......&))))))))))))))))))))&-&............................................>,,,,,,=.... ", " ....+,,,,,,,+...............&))))$**..&%&@)))))))))))))))))))@%#...%&%.))))))))))))))))))))$#*...&%%&%%&%%&%%&%%&%%&%%....................>,,,,,,=.... ", " ....+,,,,,,,+...............$))))$*-..+,;@))))))))))))))))))))$#%..+,,#@))))))))))))))))))))&-#..%,,,,,,,,,,,,,,,,,,,,=+..................>,,,,,,=.... ", " ....+,,,,,,,+...............@))))$--..+,+@)))))))))))))))))))))&#...=,=&))))))))))))))))))))).-&..#,,,,,,,,,,,,,,,,,,,,,=.................>,,,,,,=.... ", " ....+,,,,,,,+...............)))))$*-%.#,>$))))))))))))))))))))))&#...=,'@))))))))))))))))))))@%-%..;,,,,,,,,,,,,,,,,,,,,,#................>,,,,,,=.... ", " ....+,,,,,,,+..............$)))))$--&.#,,&))))))))))))))))))))))@&'..%,>$)))))))))))))))))))))$#-...+,,,,,,,,,,,,,,,,,,,,>................>,,,,,,=.... ", " ....+,,,,,,,+..............@)))))@*-#.%,,#@))))))))))))))))))))))@&'..%=%))))))))))))))))))))))&**...>,,,,,,,,,,,,,,,,,,,>................>,,,,,,=.... ", " ....+,,,,,,,+..............@)))))@#-#..,,+$)))))))))))))))))))))))@&%..;+$)))))))))))))))))))))@&--..#,,,,,,,,,,,,,,,,,,,>................>,,,,,,=.... ", " ....+,,,,,,,+.............&))))))@#-*..=,=&))))))))))))))))))))))))$'&..;%))))))))))))))))))))))@'-#..>,,,,,,,,,,,,,,,,,,>................>,,,,,,=.... ", " ....+,,,,,,,+.............&)))))))&--..+,,'@))))))))))))))))))))))))&#...#$))))))))))))))))))))))&*-..#,,,,,,,,,,,,,,,,,,>................>,,,,,,=.... ", " ....+,,,,,,,+.............@)))))))&--..#,,>$)))))))))))))))))))))))))&#....)))))))))))))))))))))))&-#..>,,,,,,,,,,,,,,,,,>................>,,,,,,=.... ", " ....+,,,,,,,+.............@)))))))@#-#.&=,,&)))))))))))))))))))))))))@&#...$))))))))))))))))))))))$#-..#,,,,,,,,,,,,,,,,,>................>,,,,,,=.... ", " ....+,,,,,,,+.............)))))))))#-*..>,,;@)))))))))))))))))))))))))@''...)))))))))))))))))))))))&-'..,,,,,,,,,,,,,,,,,>................>,,,,,,=.... ", " ....+,,,,,,,+............&)))))))))&--&.#,,=&))))))))))))))))))))))))))&*&..&))))))))))))))))))))))@#*..>,,,,,,,,,,,,,,,,>................>,,,,,,=.... ", " ....+,,,,,,,+............@)))))))))$*-'.&,,,#@))))))))))))))))))))))))))&*...@))))))))))))))))))))))&-..#,,,,,,,,,,,,,,,,>................>,,,,,,=.... ", " ....+,,,,,,,+............@)))))))))@#-*..>,,=&))))))))))))))))))))))))))$##..$))))))))))))))))))))))@##..=,,,,,,,,,,,,,,,>................>,,,,,,=.... ", " ....+,,,,,,,+............@))))))))))%--..#,,,%)))))))))))))))))))))))))))&-&..@))))))))))))))))))))))&*..+,,,,,,,,,,,,,,,>................>,,,,,,=.... ", " ....+,,,,,,,+............)))))))))))$*-#..=,,>&))))))))))))))))))))))))))@#*..$))))))))))))))))))))))$*&.#,,,,,,,,,,,,,,,>................>,,,,,,=.... ", " ....+,,,,,,,+............))))))))))))&--..#,,,%@))))))))))))))))))))))))))&-&..@)))))))))))))))))))))@''.%,,,,,,,,,,,,,,,>................>,,,,,,=.... ", " ....+,,,,,,,+...........$))))))))))))&*-'..=,,+$))))))))))))))))))))))))))@#*..$))))))))))))))))))))))&#..=,,,,,,,,,,,,,,>................>,,,,,,=.... ", " ....+,,,,,,,+...........$))))))))))))@'-*..;,,,&)))))))))))))))))))))))))))&-&..))))))))))))))))))))))$#..>,,,,,,,,,,,,,,>................>,,,,,,=.... ", " ....+,,,,,,,+...........$)))))))))))))&*-'..=,,+$))))))))))))))))))))))))))$**..$))))))))))))))))))))))&..;,,,,,,,,,,,,,,>................>,,,,,,=.... ", " ....+,,,,,,,+...........@)))))))))))))@'-*..;,,,.))))))))))))))))))))))))))@%-...))))))))))))))))))))))&%.%,,,,,,,,,,,,,,>................>,,,,,,=.... ", " ....+,,,,,,,+...........@))))))))))))))$*-%..=,,;$))))))))))))))))))))))))))&-'..@)))))))))))))))))))))$&..,,,,,,,,,,,,,,>................>,,,,,,=.... ", " ....+,,,,,,,+...........@)))))))))))))))&-*..%,,=&))))))))))))))))))))))))))@'-..$)))))))))))))))))))))@&..>,,,,,,,,,,,,,>................>,,,,,,=.... ", " ....+,,,,,,,+...........@)))))))))))))))$#-#..>,,;@))))))))))))))))))))))))))&*&.&))))))))))))))))))))))...;,,,,,,,,,,,,,>................>,,,,,,=.... ", " ....+,,,,,,,+...........@))))))))))))))))&*-&.&=,=.)))))))))))))))))))))))))))&&..))))))))))))))))))))))$..%,,,,,,,,,,,,,>................>,,,,,,=.... ", " ....+,,,,,,,+...........@))))))))))))))))@&-#..+,,#@)))))))))))))))))))))))))))$.$))))))))))))))))))))))@...=,,,,,,,,,,,,>................>,,,,,,=.... ", " ....+,,,,,,,+...........$)))))))))))))))))$#-%..=,>&)))))))))))))))))))))))))))))))))))))))))))))))))))))...>,,,,,,,,,,,,>................>,,,,,,=.... ", " ....+,,,,,,,+...........$))))))))))))))))))$**..#,,#@))))))))))))))))))))))))))))))))))))))))))))))))))))...+,,,,,,,,,,,,>................>,,,,,,=.... ", " ....+,,,,,,,+...........&))))))))))))))))))@&-'..>,>$))))))))))))))))))))))))))))))))))))))))))))))))))))$..#,,,,,,,,,,,,>................>,,,,,,=.... ", " ....+,,,,,,,+............)))))))))))))))))))@%-..%,,&))))))))))))))))))))))))))))))))))))))))))))))))))))@..%,,,,,,,,,,,,>................>,,,,,,=.... ", " ....+,,,,,,,+............@)))))))))))))))))))$##..;,#@)))))))))))))))))))))))))))))))))))))))))))))))))))@...,,,,,,,,,,,,>................>,,,,,,=.... ", " ....+,,,,,,,+............$))))))))))))))))))))&*&.&=>$))))))))))))))))))))))))))))))))))))))))))))))))))))...=,,,,,,,,,,,>................>,,,,,,=.... ", " ....+,,,,,,,+.............)))))))))))))))))))))%#..;,&))))))))))))))))))))))))))))))))))))))))))))))))))))&..>,,,,,,,,,,,>................>,,,,,,=.... ", " ....+,,,,,,,+.............@))))))))))))))))))))$''..=#@)))))))))))))))))))))))))))))))))))))))))))))))))))$..;,,,,,,,,,,,>................>,,,,,,=.... ", " ....+,,,,,,,+.............&)))))))))))))))))))))&#..#+$)))))))))))))))))))))))))))))))))))))))))))))))))))$..;,,,,,,,,,,,>................>,,,,,,=.... ", " ....+,,,,,,,+..............@))))))))))))))))))))@&'..=$)))))))))))))))))))))))))))))))))))))))))))))))))))@..&,,,,,,,,,,,>................>,,,,,,=.... ", " ....+,,,,,,,+..............$)))))))))))))))))))))$'..+&)))))))))))))))))))))))))))))))))))))))))))))))))))@...=,,,,,,,,,,>................>,,,,,,=.... ", " ....+,,,,,,,+...............))))))))))))))))))))))...#%))))))))))))))))))))))))))))))))))))))))))))))))))))...=,,,,,,,,,,>................>,,,,,,=.... ", " ....+,,,,,,,+...............$)))))))))))))))))))))$....))))))))))))))))))))))))))))))))))))))))))))))))))))...+,,,,,,,,,,>................>,,,,,,=.... ", " ....+,,,,,,,+................))))))))))))))))))))))....))))))))))))))))))))))))))))))))))))))))))))))))))))...;,,,,,,,,,,>................>,,,,,,=.... ", " ....+,,,,,,,+................$)))))))))))))))))))))$...@)))))))))))))))))))))))))))))))))))))))))))))))))))&&.#,,,,,,,,,,>................>,,,,,,=.... ", " ....+,,,,,,,+.................))))))))))))))))))))))&..))))))))))))))))))))))))))))))))))))))))))))))))))))$%.%,,,,,,,,,,>................>,,,,,,=.... ", " ....+,,,,,,,+.................$))))))))))))))))))))))&&))))))))))))))))))))))))))))))))))))))))))))))))))))$'..,,,,,,,,,,>................>,,,,,,=.... ", " ....+,,,,,,,+.................&))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))$#..=,,,,,,,,,>................>,,,,,,=.... ", " ....+,,,,,,,+.................+$)))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))$*..>,,,,,,,,,>................>,,,,,,=.... ", " ....+,,,,,,,+.................=%)))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))$*..>,,,,,,,,,>................>,,,,,,=.... ", " ....+,,,,,,,+.................,+&))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))&-..;,,,,,,,,,>................>,,,,,,=.... ", " ....+,,,,,,,+.................,,#@)))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))&-%.#,,,,,,,,,>................>,,,,,,=.... ", " ....+,,,,,,,+.................,,=&)))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))&-'.%,,,,,,,,,>................>,,,,,,=.... ", " ....+,,,,,,,+.................,,,;$)))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))@'-#.&,,,,,,,,,>................>,,,,,,=.... ", " ....+,,,,,,,+.................,,,,&@))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))@*-*..=,,,,,,,,>................>,,,,,,=.... ", " ....+,,,,,,,+.................,,,,>$))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))&--&..=,,,,,,,,>................>,,,,,,=.... ", " ....+,,,,,,,+.................,,,,,#@)))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))&-'..#,,,,,,,,,>................>,,,,,,=.... ", " ....+,,,,,,,+.................,,,,,=&))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))$**..%,,,,,,,,,,>................>,,,,,,=.... ", " ....+,,,,,,,+.................,,,,,,>&))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))).*..&=,,,,,,,,,,>................>,,,,,,=.... ", " ....+,,,,,,,+.................,,,,,,,;$)))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))$'...=,,,,,,,,,,,>................>,,,,,,=.... ", " ....+,,,,,,,+.................,,,,,,,,%@)))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))).&..;,,,,,,,,,,,,>................>,,,,,,=.... ", " ....+,,,,,,,+.................=,,,,,,,=&)))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))$...#,,,,,,,,,,,,,>................>,,,,,,=.... ", " ....+,,,,,,,+.................>,,,,,,,,>&))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))...%,,,,,,,,,,,,,,+................>,,,,,,=.... ", " ....+,,,,,,,+.................;,,,,,,,,,#$))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))&..&=,,,,,,,,,,,,,,%................>,,,,,,=.... ", " ....+,,,,,,,+..................+,,,,,,,,,#$))))))))))))))))))))))))))))))))))))))))))))))))))))))))))@...=,,,,,,,,,,,,,,;.................>,,,,,,=.... ", " ....+,,,,,,,+...................#+>>>>>>>>%@))))))))))))))))))))))))))))))))))))))))))))))))))))))))@...#>>>>>>>>>>>>>+#..................>,,,,,,=.... ", " ....+,,,,,,,+...............................@)))))))))))))))))))))))))))))))))))))))))))))))))))))))&.....................................>,,,,,,=.... ", " ....+,,,,,,,+................................@)))))))))))))))))))))))))))))))))))))))))))))))))))))&......................................>,,,,,,=.... ", " ....+,,,,,,,+................................&@)))))))))))))))))))))))))))))))))))))))))))))))))))$.......................................>,,,,,,=.... ", " ....+,,,,,,,+.................................&@)))))))))))))))))))))))))))))))))))))))))))))))))@........................................>,,,,,,=.... ", " ....+,,,,,,,+..................................&@)))))))))))))))))))))))))))))))))))))))))))))))$.........................................>,,,,,,=.... ", " ....+,,,,,,,+...................................&@)))))))))))))))))))))))))))))))))))))))))))))$..........................................>,,,,,,=.... ", " ....+,,,,,,,+....................................&@)))))))))))))))))))))))))))))))))))))))))))$...........................................>,,,,,,=.... ", " ....+,,,,,,,+......................................@)))))))))))))))))))))))))))))))))))))))))&............................................>,,,,,,=.... ", " ....+,,,,,,,+.......................................$))))))))))))))))))))))))))))))))))))))@..............................................>,,,,,,=.... ", " ....+,,,,,,,+.........................................@)))))))))))))))))))))))))))))))))))&...............................................>,,,,,,=.... ", " ....+,,,,,,,+..........................................$))))))))))))))))))))))))))))))))@.................................................=,,,,,,=.... ", " ....+,,,,,,,=............................................$))))))))))))))))))))))))))))$&.................................................&,,,,,,,=.... ", " ....+,,,,,,,,%.............................................$@))))))))))))))))))))))@$&...................................................;,,,,,,,=.... ", " ....+,,,,,,,,=................................................$@@))))))))))))))@@@&'#%..................................................%,,,,,,,,=.... ", " ....+,,,,,,,,,=&...................................................$$@@@@@@@$$&''**'...................................................%=,,,,,,,,=.... ", " ....+,,,,,,,,,,=+%%%#%%%%#%%%%#%%%%#%%%%#%%%%#%%%%#%%%%#%%..................#----'............%%%#%%%%#%%%%#%%%%#%%%%#%%%%#%%%%#%%%%##+,,,,,,,,,,=.... ", " ....+,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,&..................&''..............=,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,=.... ", " ....+,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,+....................................;,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,=.... ", " ....+,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,&.....................................=,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,=.... ", " ....+,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#......................................%,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,=.... ", " ....+,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,+........................................;,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,=.... ", " ....+,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,>&.........................................>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,=.... ", " ....+,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,>............................................>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,=.... ", " ....+,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,>..............................................;,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,=.... ", " ....+,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#................................................#=,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,=.... ", " ....+,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,>%..................................................&+,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,=.... ", " ....+,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,>%......................................................%>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,=.... ", " ....+,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,=;%..........................................................&;=,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,=.... ", " ....+,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,>................................................................+,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,=.... ", " ....+,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,.................................................................%,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,=.... ", " ....+,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,%................................................................#,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,=.... ", " ....+,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,=;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;+=,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,=.... ", " ....+,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,=.... ", " ....+,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,=.... ", " ....+,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,=.... ", " ....;,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,=.... ", " ....&,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,>.... ", " ....%;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>;..... ", " ..................................................................................................................................................... ", " ................................................................................................................................................... ", " .................................................................................................................................................. ", " ............................................................................................................................................... ", " ", " ", " "}; xscreensaver-5.36/utils/images/logo-50.xpm000644 000767 000024 00000006473 12701614676 020477 0ustar00jwzstaff000000 000000 /* XPM */ /* XScreenSaver Logo, designed by Angela Goodman Copyright (c) 2001, 2002 by Jamie Zawinski Unauthorized use or reproduction prohibited. https://www.jwz.org/xscreensaver/ */ static const char * const logo_50_xpm[] = { "50 50 16 1", " c None m None", "& c #FF0000 m #FFFFFF", ", c #FFFFFF m #FFFFFF", ". c #000000 m #000000", "= c #CCCCCC m #000000", "- c #B0B0B0 m #000000", "+ c #989898 m #000000", "; c #707070 m #000000", "@ c #A30805 m #000000", "# c #5E4D34 m #000000", "$ c #A6531B m #000000", "% c #620805 m #000000", "* c #A63013 m #000000", "> c #523410 m #000000", "' c #AC6C44 m #000000", ") c #24221C m #000000", " ", " .. ", " .. ", " @. ", " @@. ", " %&% ", " &&. . ", " &&*. .. ", " &&@> %. ", " &&*. @) ", " %&&#. @&# ", " ..............@&*)..&&#................. ", " .+,,,,,,,,,,,,'&&$;,'&@#=,,,,,,,,,,,,,,,-. ", " .+,,,,,,,,,,,-&&*#=,@&&>-,,,,,,,,,,,,,,,-. ", " .+,,,,,,,,,,,@&&$#,=&&&*;,,,,,,,,,,,,,,,-. ", " .+,,=;;;;;>)*&&&'>;#&&&*>;;;;;;;;;;;;+,,-. ", " .+,=.....%..&&&&'..%&&&&>.............+,-. ", " .+,-.....@..&&&&$..%&&&&*.............;,-. ", " .+,+....%@.%&&&&$..%&&&&@)............;,-. ", " .+,-....@@.%&&&&&).%&&&&&*............;,-. ", " .+,-....&*>$&&&&&@);&&&&&@>#==-==;....;,-. ", " .+,-....&*>-&&&&&&%#*&&&&&*>-,,,,,....;,-. ", " .+,+...%&@#=&&&&&&&%)&&&&&&*#,,,,,....;,-. ", " .+,-...@&&$;'&&&&&&&)@&&&&&@>=,,,,....;,-. ", " .+,-...&&&$>=&&&&&&&@)&&&&&&*;,,,,....;,-. ", " .+,-...&&&&#-$&&&&&&&>@&&&&&@#,,,,....;,-. ", " .+,+...&&&&$>-&&&&&&&*%&&&&&&),,,,....;,-. ", " .+,-...&&&&&#+*&&&&&&&@&&&&&&%=,,,....;,-. ", " .+,-...&&&&&@>+&&&&&&&&&&&&&&%+,,,....;,-. ", " .+,-...@&&&&&%#&&&&&&&&&&&&&&@;,,,....;,-. ", " .+,+....&&&&&&)@&&&&&&&&&&&&&&>,,,....;,-. ", " .+,-....@&&&&&%%&&&&&&&&&&&&&&),,,....;,-. ", " .+,-....%&&&&&&&&&&&&&&&&&&&&&),,,....;,-. ", " .+,-....;*&&&&&&&&&&&&&&&&&&&&>=,,....;,-. ", " .+,+....;=&&&&&&&&&&&&&&&&&&&@#-,,....;,-. ", " .+,-....;,'&&&&&&&&&&&&&&&&&&*#,,,....;,-. ", " .+,-....;,,*&&&&&&&&&&&&&&&&@),,,,....;,-. ", " .+,-.....#;#@&&&&&&&&&&&&&&&.#;;;)....;,-. ", " .+,+.........@&&&&&&&&&&&&&%..........;,-. ", " .+,-..........@&&&&&&&&&&&............;,-. ", " .+,-...........%&&&&&&&&@.............;,-. ", " .+,,#)))))))))))..%@@@*)...))))))))))>,,-. ", " .+,,,,,,,,,,,,,,).........;,,,,,,,,,,,,,-. ", " .+,,,,,,,,,,,,,#...........-,,,,,,,,,,,,-. ", " .+,,,,,,,,,,,=#.............+,,,,,,,,,,,-. ", " .+,,,,,,,,,,#.................-,,,,,,,,,-. ", " .+,,,,,,,,,,==-=-=-=-=-=-=-=-=,,,,,,,,,,-. ", " .;++++++++++++++++++++++++++++++++++++++;. ", " ........................................ ", " "}; xscreensaver-5.36/utils/images/screensaver-cmndln.png000644 000767 000024 00000002020 07666260010 023037 0ustar00jwzstaff000000 000000 ‰PNG  IHDRàw=øbKGDÿÿÿ ½§“ÅIDATxÚµ•=«U†Ÿý1çk¼IÐN¼¶‘€`,­Rè°µ [+•ÄFH­`¡)„ü‚4’" ‚‚ÁBÉg¡†œ$jî™Ù{¯µ,öœ9ÞÜ`!q`˜föû¬wíõÿ÷óééOþìY¿§?úð!à`?]ÿŽà=!œó8çÆTAÍP)”")”œI)‘R¢ï;ú¾§ï{º®#çÌ{ïŸØŠÞ9¾<÷5¿/ïÑ4 Î9bŒxçð>âÃ03LU%¥L‘Bê3)õ¤”I}âÍ7^çù[ëø*ÀÌX¥Ž;·Å0vº¦“)“fÂt:Å{O qt%"”R(¹K¦ïzRJt]Çd2#§´þµž’"ãáóçÎsùòe.}{‰[woÑĦºñCê¬D„œ2«nE qpì™Ïgô;z çJ|¼zÌÉNrôèQÎ||†#¯a>ŸÓ¶-mÛ²ÿ~Ú¶e_»ÅbÁb±`>›3i&4±¡iú¾ å @;o9ûÙY.\¼Àµ«×H)Ñ.ZB„°hÕq½&Í„œsu<¦¶Ðw]´-ÇOg6›Õèæsš¦Ù¬Þ.;ï=MlÈ)|@Uéþ𩯀”1Fš¦æ=ø0þhjqW…q›êp8ÌŒô$`µªï|mÝû¡7L­ö…*f†Šî׊TÒ¦Š†õ+ÖåªV)JÉ…#"‚s®~qµDKAE‘ ¢žUµ½€Õj¬oS«—"Á¼÷䜟 (2|µ *ƒC‹f¬@Úß{OŸzœs¨*1Ä¡VwR„\29gTµº)5u"Bþ7@úa&9¼óõ€Ïc ×VJ’a>‰ÊÓï ë6€u…¬Å¼÷øàñΫª£ø®T•RÝ= ˜Lf,,9xà ‡–*Ò4 Î\®º(¹Œãbí$çÌòÁQATvBl8¼ý¯:±nPÌ´VEQDeŒ®hAE("H© Z=‚ªñ¡­]û¦ŽŠ”øåç›x53†ª¡ë(¥ ‚‚hA†4­Óµ«7쇽€{÷~#§„ +Èl(Z…uˆTdp¶7ÃL×¶gcº—·_üñÆÍ;‡Þ>öqÒ`bø1[­ Y)*”œkž‹PJ®ÎDÃ9Ï•kÕÁ¡ƒÏ]¿¿|ôN¼qóÎWÀ«À»Y„` ÓÅœÙtÆt:Ã9C†Ž÷@Éä”èûºhD ªµ ‡ç›ûËGß+€màðÅ3ZøŸzÛÀ$·?‡Áwe=ÿã#À]à*ðп·š4Ü2ËæIEND®B`‚xscreensaver-5.36/utils/images/screensaver-colorselector.png000644 000767 000024 00000002120 07666260010 024444 0ustar00jwzstaff000000 000000 ‰PNG  IHDRàw=ø pHYs  ÒÝ~ütIMEÓ3N†ïIDATxœµ•Kh\UÇçÞ›™LÒd3y4¶¦V‚&¨© ›Ú¥ TªmPI|Ô˜¶ŒT¡W*Ø…-¥øè¢7.\H¬PRÑØ—…>L“”LÒtâ¼2Ídî<ï܇‹™ÌqJÍ&çð}ßùÿ¿×ý.¬ò…ÓZ-|eùfúül™6sñwê_âÁ][z@Hy¹, Í¾-Ð3!L=e+=姦yE}~mòJAvâ2[zà™í— 8R!vSO‘S'K”™È¯EŒ"ÁŠâ•l`Y*–€—ÉlÉ—!ËE{!Áôä9†ö¦'Ï‘N©X–…aÉè†Bˆ2Œ»F ›fþ`êW~9J"­#Ë G? Q¹ÇU*Ê}.¤ÇΠù&l;!ˆþô=žFˆ-@0tÔx€äâ j—@HXZüZ…³ÖJöჭìRxE¶…m×À0tRñ(ñ…ùüޏþÇŒ3::J2™C£o÷®2ï>úà]Nýð-ѹ«äb³d®~]™¢äbˆÅÀL1‡BÔ…yÆÆÆðz½ìm/HÐÙ±ÓБdË4ðxšˆÞŽqìÈ[ôíÜÎzëF%Ai–;aùôz½¨ñ8ß}s,‹‡ÚÞ9ü&–e±ï¥çÙ´uƒƒ¯ÓÝÙT«!¥ÿ/F¨Æò-©%ñG—0RQÚ;îCE¨nðà÷ûq3·‚$2¹;ü\QÖrš¦ÑX_‹–Nñô“[™šü›¾gwúgŽ}ÔV™…Zšˆ’wÅ…¦/ ΖEã¿~¶h”N¥x¬k#`˜–†Z4MCÑ“„ƒašZˆ†Cds:JjÆvºpÞuš:œ=ÍÅógÙüh'†e‘M§‘$"+ŒOM3í»É_ “-ZL´eè:™H¸L¹ð'ö¼Èñ‘O~ï$Ýt±®½uk=dÒYœNŠ,31åãÓÃô òò«Cb=Ú× ¥ã: “¸é!! - Ðzo ½ýÛ8ub„ÞÞÇ …¢`j¸ªDci››¨,\¸;™ Û ©hÓeðÒ·oXËŽ¾§x¢{3ú½8eÝ0@@΂®îM<7ð­mí¸jÖ „YI $e»=%©xw:œ¸Ýn^éßKÐ?G\UÑ´Õ5N\µkhjnÅYãàý#ŸS¥™J‚|ElðeRD}C÷?€–Ëánp³[ÂQí Ñ@@]]=ŠREä¶VI -ň\º` ’`îçΧ~CÁñ…cùz©Yæ¯øx÷—ì?”Ÿ¸ 5Œï–×_|s6ÁªÿôW ×^ÿƒD¹eXq¿IEND®B`‚xscreensaver-5.36/utils/images/screensaver-diagnostic.png000644 000767 000024 00000002433 07666260010 023720 0ustar00jwzstaff000000 000000 ‰PNG  IHDRàw=øbKGDÿÿÿ ½§“ÐIDATxÚµ–Kh”WÇßc&ß<㤘«q|Œ“dªÁ¦5” Fˆ´ˆtÑtS(Ô ëîÔ¥…RAi } –ÖTpQñŒ±&ÅGÒd45˜‡L&Ç™ùæûæ{u‘⦤.çÞ³8¿{8÷ð¿s&â¼_ s{Þ³{~³’ë dp4MclllE®®ë:MMMÛQ NÓÕÕÅ7PI’E¯×‹®ësu;²,cÛ6’$Q__Ͼ}û°m›ááaª««) ¬M@V^8ݼy'P¢¡9ŠÇë! `²$¢ë&6ÅW ½B¡XÆÔ º.œåèÑ£\¿~/>ÿ”ÇOžsòäÉ…”~@Y¸ÝnVEœ;ñ>¹ÅÓÉ´rÙ-¡5Lò³y ¥üècΜ9³0Å‹¶øLeY&—ÍñxðÁUÕØ†Å×çNàˆFÅÀ6Îþð-/ 9dQA]ŠE‚Á «W¯æðáÆAMMÍò€rA£TÐQñ¸½˜¦Mu ˆ·6€€ˆVPq»ä¹øª †n!Ë2ôöö …Èf³ËöîÝK"‘ÀÌgEÌŒŠÇãaÖeãñx$ LS‹3ëæê•›‚Ààà ›7Õp©ûµµµË,Ëâøñãø|>ÇADQ¤¦¦†r¹L]]ŽãÌ5NÑu‘‘îÝ»G(bum{öÈ:thy@"‘@×uFGGQ…óçÏsðàA¦§§éììdxxMÓ¨ªªÂï÷“Ëåðz½´´´púôiöïßO__Š¢¼€¯Ž9Âøø8©T UUéé顽½¡¡!Âá0ýýý(ŠÂää$UUU\¾|™P(D©TÂq¢Ñ(ÇŽ#™LÒÜÜL__ÀïÀ3`||œp8ŒeY¼xñ‚`0H2™$‹ÑÚÚJ$! ¢ø|>|>²,sñâEÚÚÚ˜šš"—Ë-•MàËÿA2¯ŸdàW`Øx– Ÿðž¼˜ÏY×¼@‡e6 ¯€¼°¤Ù®úº,@,Àüí@Jôç@IEND®B`‚xscreensaver-5.36/utils/images/screensaver-locking.png000644 000767 000024 00000001660 07666260010 023223 0ustar00jwzstaff000000 000000 ‰PNG  IHDRàw=øbKGDùC»eIDATxÚµ•Ïk\UÇ?÷¾7“I&1S£ÄZP ]è" ¸‰Bº’ªëˆ¸(]¸ÔE‚ÿÀºuS$Ù» hpS1 Šù¤é(™4c33ÉLæefÞýq\ÌÓD'/\¸ï¼sÏ÷|Ï9÷øŸ—êSO g`¾ŸÚ,ð° õö:ð50@ŸÊø €ÌÏÏK­V“J¥"{{{²³³#«««255•°±ÀðB+ÈÚÚš”ËeYXXHO2(‹²²²"ÓÓÓ.ÈF.r4p{nnNÊå²ÌÎÎ#ï×›€loo»ååe™˜˜øø,„³¯w«Õª,..ö< ¸<}x ™™™à{à™Ó,ô¿¼™$ KKKI=*@8V …“““À¡Óñ9áHÓ”J¥Ò r*æwE„|>ß“€ÐúO0P¯|TŽï~Å»×Ôxø· ÔOì*@éÛÏZ¿Ó»¿ùêXöc`¸ÇätÖ#ÀlýÀqåŽ*»ØN k[¤íΦëWk ®`“:irD©´Ã­ov^¹ø¬—­DÀ[ƒ àªÜÛ,Q­·¸ñöäu»«®u÷–öø¿t¶gë¬à½Cœ}yç-÷6w¹³ð û‡-Öìóå·¨—ïƒÒ JEè3žA|v "]"‚Rš?kMŠ{ ~üuQo:xÓÆ;‹3çåÌŠy²Gè­5J+t$ˆÒ¼øÜ(—džÉec>½ù¶ÝDðà=â\78Šþðë,6M±Æàáê•K<_¢Z>˜z¤ö +Ý5Gq‚"RQœAG1Z)Jû jcÖ?Z‚x!—¿Ô'€·xÓÆ¤ 6MètÚ,­la¬`cc‘ñk8›"&ÅZ‹÷Ž(›ë/ÉJk$Ê õd„Œ÷\½2Æp~ï…4©ƒ8tœE¼#ŠZds9Œ賊œCpˆ38gp&å“nEΚîƒxÄ;Tœ!74ÊQõð?`ï·ŸH;M’ýÖRÓÆ=ÜÆ‰G£ÐQ7?Ê ¨,ÍúÅ­bÏŽ=oŒê—FâWNÆ íŒæzhçú¼¡ŸFCúè´¡›6ÂùÜ*»ÿx"ÄÒkÕÖ³ÂpL³EÀIEND®B`‚xscreensaver-5.36/utils/images/screensaver-power.png000644 000767 000024 00000001715 07666260010 022732 0ustar00jwzstaff000000 000000 ‰PNG  IHDRàw=øbKGDùC»‚IDATxÚÅ–;o$E€¿ž‡÷vmlñò›„°tD BRøFY BDJ@€ñÈ€ 2‰éN'­‘‘½~ÜÝ®wwvw^=Ó‚› ¶¹Û‹(©45ê®úªª»§þGYo?»ö5`Kuñ ðÐzÔ`x« °·oü NoØÃÎwöú_Ùßst~ðîÃó|{僃î½/Îþú&vlҒɘ<—Qƒ•ökœÞ°óÇ/ û'¼òò*ãqL,3~»yš~íº¼ üðŸÀÆÁ®Nƒ›®+\²4 “Szý!½³)wψ"ÉÕ—Vp]Ëp0% #¢8Ej?ýè³ï¯ÔbýK¼Ò˜k>éjÙÆZƒKß]du}…§×,›W2Mè÷î0Œ™DƒQH’ä,¯>qåA-ªáñ·Ì?ó8sdéO|ÏG«”$`‡h3 ‘™kžZÛ$8<Øg&&C§'ø /2טG«€tt›pt„²>Y’ã¸Ðj5iµgo÷w¢D¢ ³”6Ŧpq\Ž%N‰Âˆi(¹{oÀh$9Fhe1F0 ÕNiÜÚ{Œ8N±&ÅZµ£Æh”ÒdyŽ1`ŒÂFÀp ªÙ*è-:û)/˜ KKKxŽÄ(‰5S(Âe;Ü΄ Nú,f6€6†TZ&¡D¸ka÷p£#E„aÈd2¹ÿÌÆ$y„ëù!gk€µ­uõÔZ_pX\\dyy™f³9Ó'¢8ŽƒÖš<Ï+ˆR c BÇ©ìùùy<Ïõv6€µ¶ÊÜS©¢Bežw¿³åX!nO\ºe&J©ª‚PÂ…c˜N§dY†¢Y1 [Jç² Õeaa×u/ëÆ@Œ€#àH½ú cLÕ÷r Jx½ß÷ñ<¯z/d0@41 ½ói”NõÌëöx<¦×ëÇñùùÀ¯¯ƒSs¼t;Ôƒ!PJ†aÕÆ0 Ë“¦Šìna[ Ñh¼·µµ%vvvª@Û~Ýn—N§ã_'@¸‹më[êuàW€ííí£¥ýýý–RÊM’D$Ibƒ ý~_îííG£Q»ðûø8z@dE».H»¸cí ú!ð*° ,â,ˆË®ÌGù98˜L zAþ„F»WßIEND®B`‚xscreensaver-5.36/utils/images/screensaver-snap.png000644 000767 000024 00000002370 07666260010 022535 0ustar00jwzstaff000000 000000 ‰PNG  IHDRàw=øbKGDùC»­IDATxÚµ–]hTG†Ÿ9çìOþ6b4»lˆ5ôF…!ö¢c ”FôFAñÚ‹@K‘‚P¨´hÉE[ ¥7ÒT""Š7zUD!ÊÒ$„ÄpÓ]›²»Ù¿ó3sfz‘³Ë¶ØÖ\tàcœsÞ÷ûfÞoÞÿyˆ×xgEϯúÖ:šÍfHmà‹¶_ß½@'œ¶d^ ÚÓÑÑñn*•ú0™LÆÌÏϯ-//{¥Rɬ­­™B¡`–––ÌÕ«WW›D‰Dâ[˲Þ"Âd” h[ÀGÀt&“áÂ… œ‡b||)% P(pöìY(•JضÍÄÄDÏØØØüýû÷¿ÞâV«Ƙ–­5J)r¹µZ|>Ïêê*–e1;;ËŽ;˜žžfrr’r¹L6›uŽ;ÖAvIë/Ý&À6¶°0Æ ”"´Ö­>ÐZ£µfaa\.ÇÓ§O¹{÷.GŽAk;}û’\Ðá´7³´1h£[o ôööbŒÁÚØ2ž={Æèè(ÏŸ?çÚµk ‘Ïç9|ø0‹‹‹íg˜ÕªÀÑ‹ˆTëL&Ö-[èéé!N“Ïç‘RrðàA<ÏãÉ“' ³k×.ùàÁƒð% ÕªÀhM¨C´6i R¢”Âó<€Ör5 I§ÓLMMÉd’+W®Äfff~æ€à9ÕêzX©¬›zÍ®ëâù>J*”’4 J¥RʉçyH)™››cmmjµŠçy\¿~x<¾øN"‘øtd佋'NLªÕ|Í UHÆéìLÑߟF)…ïûê2¦UU†X–…mÛôõõál(ÇqT>à¾ãûþwÀÅr¹6ûÆÎ7”R–mÛ"£”¢X,’Íf‰Åb-Ù6U%¥Ä÷}êõ:Bt]·Òö8ðõ˜ËëÆ 0 ¼ùCGÓѱÝé7öoîô£iŸ>PŠ¢Ö®Y'"r"GzßnoÎ!  i8í@Vl2û¿éæe@lò¦±Y"þG8}WN¥'?IEND®B`‚xscreensaver-5.36/utils/images/logo-180.gif000644 000767 000024 00000006400 07376667334 020525 0ustar00jwzstaff000000 000000 GIF89a´´ã’’‘£`M(`73-- ¤nÛÛÚížyyw°°®þþüO5ýÿÿÿ!ù ,´´þðÉI«½8ëÍ»ÿ`(Ždfª®lëNúÎtm›±|ï|O£9ŸpH<cŤr 0ä˨tgp§Ø, °Bµà0ˆàxêÄètà<Õp8·ýŽÛǃP¿û¥lz^„Lz]W…‹Bdˆ}Œ‘6yz{’˜-•ƒ™ž-‡•nŠŸ¥$Ž•¦¬ ›•M_­³¯¤F´‹¶‚ ¸µGgºws••¾Âµ¿Ãq¡Æ{VHÍÎp¨Ñ×M—Øq”Ñ{²NáÞãbÚÆî|âïjåæ É¸às§LÇ" mý¨jÆ©‹A¾O“_»@é™D§€ç¼âìó'7¯QÄØú‘þW€}>)àl%Hé àƒ¶ñç ÿAH]} ®å‹ÛÍÖ‚45aáˆÕ‡C’˜Û29€ƒ´)ðJbÅСŠúIÕs(⸜3®¥ÐÁÍxÎ>æh"1¤˜¤l¸§ |JPÛ‡ Þ×ä“ìéèZ\ΦOÇø^m Y¦0†)ž—/Tèfu׉rÕON2 ã” ú2ßœÓÁ邜#.p#‚FîÑ™vµ%Èç9Œ* š€i¡YE‡òù–Ÿ¶Õ)OHJª¥[XŠ ´êj®.ë« ÀX ´**">ýT@¬­îöè‚òÅ:k°Æ&ûª²Àþ6kèq¨®@¨m–cÞç¶Ã¦Ôk€ýºê’ªJÛ·€5$W¢mT”™Cì"B¸†åY¹#L;[µÖŽ”ƒšaVW¼ÄÒ[Ø¡Pâ럹÷&’fÝ.:ð°(€®Áwýé¡ÂFl‰æc‡ ”î¿kżšŒ±]rì ú=†·ÙVtñ(/¸r`DrçòúÆÆ/a¡¬Kñ}*ç³4Éì|WÏ÷×1öØ!þ6‘óSIǰ4|NûuÂR¿ì1}…9"r ‡µíÉK§ÔtØsÝð„ùÂlõ_¡,ÆvÎkùóÒf}qb_´ñØì©~V€„S?øŒEcrÞÓ®¤ºtNƒs¡ gð¤›ñå¥9ÛÁRé’b…6½‰0”ïµ4ˆiª  PÈ€˜p"Ožz¨3¹ºq0wœa]â1B6ÅÆ||êB2¢“à Z*öJþ‹ÃJµ„“‡Í~ êPŠ1(@”t8•ho<[üKSõE¾Mä*cšõ²¥?ðtª~]0“ ¥G±QyS«ÚûÌ4щ=±‚UAd'‰CN!7è3$ràƒ‹ì‡™äCHΤ9ØãùF7H-òìÜË[ïòÁ¨ŠäFð*(9LRg“v™£´”£ܧz¢)Û Ë¿éðŠ1håq€‰8X²jÔòË”®RªBÒ’MËåi~ùÊN"Òlج Gv¾ø¼¨,k›åf®¹Ã\­~ȱL´€ÅËs€°îbvsEï¼zEàmG§×ÅèÇjXª"v¦Ï]§zãæÆw2€ ù=nûhãÝý¯h¥ËN"‹â2ÁVT(Q{ט†´50a O$/íoY!¬NZBp¸:0zML‡¤˜Ãö°béòWA—C¦ñÒØ»aCvXµqýîGØ y&¾\Ñ{;øI£Ž×ŠPµ‚Ÿü[ÂJYÅ™ý¯Uw,a6sär—ÛzY0Ã÷Dòemñ’€ÓxVú2ŽýËb‰ÞÅÎ{H†°ÔŒþ²Œ´÷¶Sö$0âì6æ`(%ô£ˆÜæ=¯XÇþó3w)i>ÁL6 ŽrŽ‘Lf»8ZirõläQï¶Ôz…àASý¨*X¹‰Öl• ±ÁB6Õ¨,«9éjçÂ:Öõ«­ù—Œa¼ýäµCœ¼lÀ‰•Á¹óf“ ˜4W;¿)u]-æ>ó.0kü6†ÃmQ\»™Ê‹æö_tCmu·ÓËî}·¢5ÊÀ”qÆö¾Ì ÝMî73IÞ~¹hÀ™ªîÆ&Ôí.vx~Ù„vá±½džó]pxóÛÊs™ ý0^IwõuÜ­æ3¦[ìoPão±Â¡q˜mscµåøÂ+,Íþ‡×|å~ž·‡êðÀŽ˜à)¿4©3p]ÝßÌ}®o]ÇûØt±ÍÅIþÛ¦Mêßw@@.—Û,•ë“–ä“^n Ÿ0‡†-Ú7óh†Ýê—6s»ûôNçÀá,¿»¶wMq»$w /—4=¿Ž Ÿ/=ðÝÆM*ç~â“SŽ5Óÿ‚fg-àìsÏÈ<¬qŸÐŽoá+£s!§5D…óêY?÷×Ã>õ²Ç:eFŽñµ­,ö×ýî[Ѭý÷Áßüjxÿmßï øÝ›=h˜Okç?ùÑþg¨/ië_ÿÈš‡üʈ_¹ìE\åúÎYó‹[éáW¿ÓÈï)÷þ¿¿íéûáØŸ%ûSZâÑö\:‚9ü— ¶w8€ª—EÀ“= s  þ—-#vÐ9af~8>ÐÐ6(Vx7v F'"È6Ø,HªU*q9ö§F·apÙ·@÷£ƒ;¨ƒæƒ<øƒ$„=8„DwÒ2è@Ø„Fè„E…DcYÆf*Çq€rñK(Œ7'6(KÏ……½µ2‡‡…aQUˆ…Zø_&ixVdtx€‡‰5‡òg†zh…·†s¢S¶c[pèq&8†€q«AˆO‚‡ˆ\¢ˆ¬q†…h€nrzt3oH"Ž8fÑdøy)h艆xŸ–$¢˜‚Ljò‰ÛVŠ‚“ÄŠ[¨˜°Hx²¨’h½¸»xunb‹~a‡³xŠ—˜Š#Ò€Æ8=÷ŠÊ˜ÌøŠ pØ˜Ú¸ÜØÞøÝ¹(ŒÓ¸Õ؇è˜$Øwˆ˜Žîˆ#ëxˆÁøŽôHŽ–HøVúhŠ÷hŽ1€ûRH¢‘F¹Bz™ ¹ Ùù¹˜×þøŒ6“q‘‰16°‘É<ð‘"hQ’&y’( !þã XScreenSaver Logo, designed by Angela Goodman Copyright (c) 2001 by Jamie Zawinski Unauthorized use or reproduction prohibited. http://www.jwz.org/xscreensaver/ ;xscreensaver-5.36/utils/images/logo-50.gif000644 000767 000024 00000001531 07376667334 020441 0ustar00jwzstaff000000 000000 GIF89a22㘗˜£^M4¦Sbú¦0ÌË˱°®pppR4üüú¬lD$"ÿÿÿ!ù ,22þðÉI«½8ë-à`˜ybi>Âw®š²°UElO†¡Nûæ‡É'Ê ’BȪfhf|U¦gËíbOÎÚ-wG†zÍV7rã- ÚxvbÉKç× @v X y{~‰… 9r‰m‹j    • •¨¡®®~›]J• T9 fei²{\)¸•¼¹AÀ\rÃ\)½ËÙPÏ[Ñ|ÂÇØ¹aÙ–ßáŒä[– çP õ v ŸÐ Òúä"/йJ5;Ôæ_Àq ª1«Cé HbãP܃bþ[ )xcÑA¡JGî¬éøn 8 *ÖÃxîGp[K6&=‹ NÙ¨†%§4yj;dÑ’:t7Ûå<êRi• ëY, ’ÑYð¬ дiG_‰…JCUÙz˜¼â|ø)Ás&ßž[°r®G!>-ë ¯Tº€™éÕ[¸¨_в.ª2í4»àdNÎU‘ÜÃÃCró*¢–î­Fòd(QY# `@*¶zk‡ ó˜jÒ2¸Í~sGu5ðÅìd‡® l°d숃U3ÀõëØy_sfKöì|§NÏ´†·™¸™f“§ÎÎsúå™açèúDó“{pçþŸ~ü!¸Ï€ü0à{Œ(À‚ 6èàƒF¸ }¤ß…ÉIÁD!þã XScreenSaver Logo, designed by Angela Goodman Copyright (c) 2001 by Jamie Zawinski Unauthorized use or reproduction prohibited. http://www.jwz.org/xscreensaver/ ;xscreensaver-5.36/utils/images/logo-big.gif000644 000767 000024 00000041173 07376667335 020765 0ustar00jwzstaff000000 000000 GIF89a½1Âÿÿªÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ!ù ,½1þHºÜþ0ÊI«½8ëÍ»ÿ`(Ždižhª®lë¾p,Ïtmßx®ï|ïÿÀ pH,ȤrÉl:ŸÐ¨tJ­Z¯Ø¬vËíz¿à°xL.›Ïè´zÍn»ßð¸|N¯Ûïø¼~Ïïûÿ€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀNÃÁÅÆ’ÃÉÇÌÍ…ÊÐÎÒÓ|ÐÊÔØÙsÖ×ÚÞßhÜÉàäåaâÄæêëVèËìðñEé îïòøù9ÝõèúÿgðS`/ Áƒ)¢-(ˆ°¡ÃÖúù{H±¢…ˆZÜÈþq!F{÷:Ьˆ‘È‘(r˨1¥K€+A†|IS^²×dÖÜON™ãx UwèÀ¡H³ù44©Sj7}JUšO©@«j=«Î­`}uõÚ2¬Ù[WÉ–=ËVÖX¦3ÛÊm5V­»¹xéÖeš·¯ª½|ý &•6€Ý‰ƒ{*l8°âÇ›ê6ž ¹ò%Æ“³ZÞTšå¢¦¢êq«ja Æz)¡…Zg­¶ŽŠk©º’Äk¯tRþ ì¤8°ê¬ÅŠ„jªË2[ƒ³OjmJÓÒJlЦåº-·Ç"›¬ªÕÂù‚¶âŽ+k¹æî¨ì· Á6i»îŽ4í£ézè¬ùê o¼S *½%,uÀw´/µéª[oI 7ÌÑôöƒÂ!Ul±ECŒ0E5åñÇÆBI°¹¿ - ?;2Êÿ„œñÌp|ÏÉ4«4ðÊS¢«1‰QuÃcÏ ÿ 4uÊ¢û2 W™Ì3Ò…̯ËÚžuPGSM‘ÕcíjÂrݵ×>/ÍrÓb-BZfO¶AJ«öÐdk9N—s§m·¯-·ÞÛ]åtvßU«ü·¡lãM¸ÞÄô‰xâ‹þn°ÐÕ¾HèÞ|O~PÝvg,øà—µžS^9ã—;ý´€žº±«³Žyæ+îœÜ³ãzèã‚d§KÜ{>¿«øè–N¼ìÇ;öÝÂCtlñÑKŸ<ÐËWïüõÐgÿùö+wÿúEà‡/~@Ó/ßéªoüúë€-ºã°“æŽ÷ô#O~¼î;|³¿¬õϺ«ÓZǼæý7èàßmò?d‰î}ùƒW8ArX킌ÀzÄÑÀêãƒÃàFB š(ì ¸ÂÊëf4|¡9l@lå,;ÜpuC®n†C¬¡åH:"z0†Éb þ”È:&¢Îþ‰O4ââ¬ØDô)ÍB !1§µ5N…(…è¶1jc)c‘Ôx?9ºÑûª£p=&ñŽJb†¸xÅ4ö1x{ä/ºÕÃ?R‹ƒ4_9 F² ^„¤¼n·,J‚£ŒKÄ&+À DNғͰäí)3‚Ï…¨L¥ 5$JV>É•¦td,ñˆ*Iž’”ÛóewYŒ^6r˜À f.‘ILÈï™ÐŒ¦4§IÍâ)P˜Õ„÷–™Ínzó›à g8½!ÎršóœèekYÎmJ1b錧<çIO].²žøÌ§>gÅMpºs•û ¨@JMfô Ífíü(Î¥a3¡þ(B‹)ÑŠZÔ íç7ªÑ‹zô£æ¼'HG*Ñ#>Ô›Êë(IWÊÒgö¢¥0hFßyΔÒ4¦8ÍéáÜ¢ÓžÆÓ¤*U(Gß OŸ•¤¹8ªRÃ9S€¶Ó¦œ\ªTaŠ‹©Z•š@½éS‡Õ«zÕ£hùªX™ÒTv6ôo'«ZZ‹µº£•»_Q¥¹Å ¾õ®é¤^÷ªI\ju«P5+_{ÎYö®YuêYÑj×Ã:Vš†}ìXË*XÖõ¯’ÍlAc¡Ù¯&¶²kc;KZ|­¢xH­jWËÚÖºöµ°­lgKÛÚÚö¶¸­­:£Ô½jåÖµ˜Réo‡KÜâ÷¸ÈþM®r±‹Ó)÷¹Ð®t»Û*ÖÇ­nÐ@;Œéz÷»à ¯xS Îe¼èM¯ze«Ý‚]ÙefÞ›ŒõÚ÷¾ø oy_Á”üú÷¿Ë5&QÑ_ùRÀN°‚üZÉ¢¿ ް„Y«ÍφÁÅ0}»;á{½6„?Lbÿ¶w»Üåp† |`q”øÅ0FnçP1âÛ¼'¦å†Pà¾úU ÜŠø¼DNrrsÜŸ®º˜º,žï…¹¡ä*yÆŠ•·üÛ [xÊØ…r”ïd.›yÂX>²LÎÌföZ³ð³˜â6ÛyÁi.’ïÌg&7yÇ<–þóœÉüd>ú¾y&Œ–Ýf?/pÀ…&®£ æ83úÒãMô(öŒi+{™²•¶´¤ÇLçP×·Ó¨ž®¦EÁéT_yÒW3µŠGMj)³QԮε˜M›ŠVë:ư¦^º <è?ßZ¿N6­yMãE+ÆÁ–ë°]lBSùÙØÖ­‘õììl{8ر>ö©©]lBÚÛè.2ï6Ýít3ÜÂvG«]jqÏÚÝé^u(|ïÿ~úš½•7¹«}Ld÷ÛÝú¿Žhx÷ַĦ·­Èð|o[Ñk®¸¿QøJ¯¸ÖƦ¸Æ³ðO,|ä™¶ß+!>p‚ÇñÚ(WvÉÓäánàþ¹?.ñ—Ùæ®žy'Ntéþ{Î÷8Ï{>q–=ÕBçÑŸàö­üç]ž^½ENuTG=25ï:tá½'Ã|éL·v˜ÅŽé¯kbêl_6Ó“ŽõÜjÒöÞyÜ íöLÀ}ï¸%ûÖe­÷á ÅNüûމ¿+^Û8|ÞeùMþñ}¾8»3ŽùûX´¯{à+øÄwžËŒ¿LØOùσž“¦7<éC{Ö+9õ–p¼í)|wa×~ô³Ç;×wïiͳzõÄopï¥ýûÛöñ¢O¾q_ Ýÿð’×9å]ô3FZú¯^÷ñ9~Øb¿é“ß~Ú-Ÿþò‡ŸÙY&¿ûþy|ßGß¶çwoûç?}ãïùî÷|97|´¶~‘Ä@÷Çhæ €à—ö—€´%€Ð÷} XbÔG Ö's·}ÜT°'XúG€øaØèmkG…g~È|"8[Xgw‚(È€&·‚$‡kpƒÊG‚×|øWƒ>g8¸€â÷ò×o@ˆ„«èg‚²÷åÖ2J—„Jj#W2zwR@X…x.û§…–‚ÈÀƒh/³–….x†egv>h†tÈ~D¨†&¦ƒ4ׄGãöƒÑg„t…vG‚Ø:rȇ Ɔ‘°Ñ5R»MyH†æt‰zXZ…þ_ ’Øc”"Fq‰‡Xš8qœøQêõ‰£á†KÖR†U¦xu5•ŠG¸Šb~8t°(Š$5‹Ó¤‰§¸X¸kºRâ劎ŠY'‹ÂM©XŒLuŒ[—ŒÊˆc½(u¿X…0¥!ÃHŒ¶˜‰Ö¨ŠØÈŠßÅŒàŒESàHWÓHT:WMå(|suŽå]êÈì8‚îøŽÒ(Žòx–X戥Ûv€‹8U0ð(!x‹ùrÙ‰F·o×Î÷i‡ÕX‘y‘•‘KØ€ Œ,õ‘òˆNy&‰‘c§‘~Ç‘­ùLÇH–5“%Y“5‰8þÙx:Iƒ9uC “IŽB9”D‰P7™’;¸’Ëö=iM?9ލXR9•U•\ÈmXéßÈ”>i@Z36bYQϵ‹ÐA¨•Ñ(?娖(õ–È—EYue‰q^H–<¹•§³—^9’~–€¹Osy”ªw–‰è‘.É•l¹˜AÙ˜Xø˜T)˜8ã‹” |i©–z©˜1 •~)2žyP‘i•X˜ Ù’¦yš™™š_•Øšc郹y²é›‡™—˜Ù•¸iŒœÙ4¼Ù›šÜ8šYš—™˜`pª¹š¹œ5›¶´‘ÐÙŽÃIœp¡›"é–«y5Ú¹Â9JfœÍŒþ¼ŽÕ i¹ù–Ù™žøÄ¿Ôžö`˜ðY›ÔI’ô‰œØyŸø9OúiOüÙˆž÷Ÿ:žä hôxžÂw ù¹žÝ™“ß¹“£¸ˆ/9Ÿpfžê˜*N ÊL„ÙŸ¯¹RQ´–özZ ÊY¢òt¢ÁÒkI ƒ,Ÿ¡)6¡J“4ŠN6ÚE]¨¢EQ-ê¢>Jx@¤è9¤DŠ¡û™¢ š•UE* åÙMPš‹Rj¢Tª V:ƒêQZj›/:ZM ¥8¦búžŠ”êê¡jº¦]ú¤nJ¢p*MIê@8Z§Jy§JVçiŒù¥~ú§Ð¨óœH:¦%µ¤yª›!*þT_Z‡óè¨ò©Í•£w‰¦iz©MÚ©mʨ—ä©Ýªü%ªê–¥¥ZœÉ d1¤oʪÔ䪮`—­å ‡ZŠ}š©´¸©Bª«€J©7Úl„êf²j©´*£¶º™Æš«Èú¨Êj¤ j¦vzQK´¥‰ê}Ôº©æv­¾ªZt©ç… õ­L:¢ǧÕj æê\ÙZHñçž,©¤îjª2ú£©J®Z¯Ü[éšëŠ®Ï ­:¬Óê¥ÆZ‚û©÷*¨Ìª¯»fQýê¯ÿê¤à±;±wˆ–ìY¦ˆH²ü:«Ñ ¯â ±[¡"[c[²’z¥( Q2$Ÿóú°šú²³{³dþZ³ë¬»± +°«Ú—>Ë©@ «ì ›¢´Xг9Û£;»›.Û´pù´“:³s:™T+´eAÐ@FxYZ»µ>[®^Ë«zѬë­W['+«ªKÛ³Mk­^;²Ïø›ã7¶›²îжŠ8SŒÈ´\ë¶@ ·¬°äu´u{9w‹·k[¬\¥}Û‚`[¥D{²ƒkµ…k¸Vˆ©y÷®{²븧µ.(º£[¹J›¸z›ºy»¹/H¶Ëš¯_»¯eF3 ¡™Ë/Š›¹ªk®¬û®µ„«¥§ WÆK¯Û¶Ç‹¬É;¨‚[™°û­Ï‹Ãë´òº¸-Û·×{±½Û¹@Õ›¶þÝ7/ák»—û¶©{¾ ŠPê{»Âú½gKºÞû½œê¿pZ¾¼k³¡û»ù¿@À૳ÃËPOKÀGjÀÚ‹¿ù+¡âÀÀ <½ðë±È;¿¡*·:šP~µaA¨Áu(¸ì{…úë·ýS¼­ [Á|Áuö«‡Ko|넘Ã,̳œ[e,Ã&[†÷›¾%|Ãô‡ÂlÄ [º,«À<,d$EÄŸëĺ›Oå#\8 Ÿú+c;†Ǹl6RV\¿Lš5l××Å^Å:·o,­Üh»¯*£ŠÄIÜÆ]ÌĹ1r<Çk*ÅSLÅ ‰Ç½º¼O\¶[L¬' È^!Èw þÈŒ›»IvÇrê¹h\´ƒÌÇ},k‘,ÉgKµ+ìr-ÄBl“¾‹¢W¬ÊG¼O\eÂê&Éx´b<Æd\Ær©Èq›½j,Sÿ´cµlË)l¿§üËÉDÆÊèëÊ<ÃÁ,˳¬ÄÌkÌÇ܈¹¬Ëã‹Åˆ|’¾ü¸Œ¹kÊiøÄØœÍX—ÌÊ\ÇfÖË›<´ÑìÍ4LÍÃlÍQ›Î“Œ±ì¼~lÙx×ëM¿ƒÑ{LÖ±m³Ñ Ú”ÛŸâÝÎNúÍÕÝÔ×ÝÓê}Àô„ÔÌÍÚ¾}Õòàjû£NÛç½à•ØÖM‘í}Î×üÝ3mú\ß¾Ôøíà`mÚ„]×þ ‚«-áœíÚ.fáºá/œà_-×WI×—-O$MÞ#L⌨،â­âŽá[ÀüÛ1j"¾Ù$Ná ¡×Ýœâß¶âõÌÉûÝ0>OþÚ<\àtˆå&žÎJÎÛ]Þä®ß.åÉ=å2®ãÍmäjþ¿l¾åKþæ<×”ýÔ\.è î×3^ÌF^âÜç~îÖ÷ þç þäØ-ÚAžÚ,ᕼèÏ ½Iþèþˆ^>Í`>çb~éì]æ»ýçV®ç6îé¶\®9-é=>èémß…ºÝªþ” Žæy¸çÜ å%íæ£mÞqÂ@Þ­d>Þ‰®è‹¾ÃÖpâ$zÒ£®Ý¥þã§Í⩞éD^䜮¹°NÊ©LìÆÔµŽÞanéÊ.ä ½§nã=ìÑîè†Lí´nèN謎ï·Û{ï6ªÒnȡއ÷žßÈží_¾í¨¬é›þíÐîëC^åïVícÞâØþâ¨^ŸÞíyÎéò~t–<îo}ðÚnëéÞà èÜÞìnüíMìôÙ9hò+ò¦®î¹þ¾ìßÝK óàÞèŸ^ï5èŸÇɾóìïf>ÅÿëÁËçÆñßp6Oê› õ×ÙîOãW.½"ÏÄbOî¢~õÖžõS»õißõÌîó­òã>ßiñE¯áÇŽôlñnoàn´@ô2?ô4_ì®iÜØ»÷¿¨ÜÌë‡ ðLOð ýÅ´«óéeîü.çOç¯ûSô­¨ôüôiî§3¯Ðgoô'î9¬ßúþÙú°û²?û´/ûg¸ïîþø]‹û¾ÿûOñöûÄ_üÆüÈŸüÉ_Ú›ü¯¯üÐý¸û¾¯û€ô¿ï±¥¿ü†/ýÞÿýÆÏüZÏýþ þÐõ«Žû»øÕÿ¼Áoúgþò?ÿâ¿öä?¿óüèŸþïîûìßþ Ü!ÊI«½8ë›ZO3Œdižhª®cè¾p,¿l]Î ¡ï|ïÿÀ pH,Èäǰ9[Ì(“C­z>Ÿ˜­Qíz¿`ÍU! ›Ï^™öl»SÒ¸œýFE•ø¼~Ïïë£u+sƒh`jXkt*†ŽaˆŠ/•ŽW0šm„R›&w~£¤¥¦§:€ ¡žƒ–TcXZ5\¯¶· ²1¸½c™«Â'­Å³Â¢¨ÊËÌÍªÃÆr¾’».[µÕÜ‘±eÝáˆÁÑÑÓèçLÎíîïJÐÃéSþâ×YåŒÛöýß¼üUôÈÜ*zéÖá€Ç°¡ÃTL "œ!pœ®D ÂáW±ã5pm©ÑgÔÄi g<\Ér™ñÞŽF5^’8ÙZ•òI¨eÿ!É ’W†¨Ò“hî¥SöDÓ’Ú}i×}ßÉ9A‹À‰ #™ó9wfš€&±¦6:fõf7di'…VÖ¹¨Eæ©'–|öÉT“fJÄ ËíU‰eJó㣿ìä¨þaNêc¥Ù]ú§¦°Á阅zœJªˆ·¨†ªîÉjL¾ë±;ÌZÞW‘z¤¨ÛíÚEŠ…H‹§¥ÁB;,±~…ì·¥ZlZÍÞŠ(¥ÑJ K¯§¢j¤¤“nÛ*aÆ‚ «²¦yZn‚¸b˜®º,šêå£âf+ï‚ÝŠe/²øæªoc Ù À¥Bå«»çŠy0·®z»p¬ ûû0Äæ–©(Å`J2$ÁÀ¼1€||lÈ«’Ëš³ð¢‹rÅU®ükËÁn Ì9È|osã2{sÉëºóÀ´+'Ъ M4F]pÇJ/ÍoÆ?Á]ž¬%Õñ¾œ´_YgJ³°]£þqÎPü+¶dKýåÖzZ½¶fmúv¢µÊÍ4Ýaß7EÖ¢­±Ú ³xšƒ£k³q8c»§â¼úÌrÆú9à“£YyÝ#{Í¥‚‹Ìyçïê8’¢s-yéNž®íå˜þ@œ¯ÿ£¢º|Ó¹í¤ãn£îmöÎî•fŸKôS÷Û÷ñôz¬|Ì_–_æšë,ýøÌ:ö3bº}‡Ýîüêe·î#ùôOªrµg¯ðú¶ï¾pø°žøê'½âï`Wÿ¸‡´Ñ ÅAd‹ÐïLDÀ ðEùK_½ÿ¥Ž;“‰ÑþgnÈYHkž“K2zã:WÔNgŠš’ç%éII.ò3jéŒâ>ùH·Ø|3G•({Læ`¬g µÛBÚM‰Äœû“èQŠyË‹²ŽcÚÚè5åX’‡Ji–"] IKºÒßhN*%K=úN=&/¦2¥(H ÊQõ §9K?½ùQˆ†¨ ™©1ÅhT’è3©ïk¨?·uE¨JG¨NµèE«Z¤bAÍdjO«R¯F¬/ÍÐçȺ³žu-;M sºêÖ‰j± æ™ëI §Ñ»°£z _ûÊ©ÒÔ¤pºªaušVžþželcáÊ&%‘Šú°ëdû±TËru”™Õþ,8K¨}öZníhƒXÔÆh±ªm‡c[½Ÿ”C²³uSmz[Û-·îØ-ok¿¡í2¸‡®Où„[ä~ˆµríkß[…B¯•M,hªk]e(wª‚mîs¿»¯¼7Cä-ï)΋^ªª·nìUV[ÚÔ¸FT¾£ ïDhØ\çÊ6¿¸(­x/_“BÀÞn¤æ\“VÁïõOƒ %ìÒŠOþ­w-L[é–ó´V ‡ÍëáeiW³80‰+áËfÃ+VS‹óâ)Nx‚2žñ#jl\ YÅ9¾ÑŽÖcg"ÈBž“‰ëÉ*'®/UŸ<â(§Æ½Ó%“þ•¯,¨%‹¬RÌdœ—á3劢³1#óƒÍ\34ûkFkxá ß#ËyÎu³|±<—Ì'Ö˜ÿ\„,/··j6´h0f%-šÑCp´–ÇZhIsƒÈ|6rŠ1­:ÃUiöœ§¿Œh*WêÒ¤–•© »­TëmÕ æ®.ÝyÙJÇ9ÖyÐô£WÚi\ß¶óâõ›}}\`ÇcÖ–«õ‹mìW ;™[U´Ÿeh£î`¶®Vµ?­ëdg»ÊÛæv™=Ôa.ã¶O›ÃŠîQ«{Ý Î.¸ÃÝåx£!߉®w¨‘|o#•„†²¿;¿*.›­·+ø¦¼½»½{x ïŵþQzîW§[âg7½åÕKŒgüØåƶZ{ ñŸ‚<ÏdªO.ïû†òáwùËs„O›æ5ou»©ûñËZäþZ¿Ç;÷æÚ¶·ÑaNq¥‹›é*u:\ÚYaN=\w±Ð°žÓ­ìú—ýíúÞs™“}Ÿf?;ךs$~çU·zJßwßîwà{-úÝ“•w¥ã—ï댻¹çÎòºÇsð„GºÚÕVaÄWPñ*7mÔyÁ^t•·<ý0Ïñ•ãÜÕvï<Ø)ýaÈ…^ôã#ýÓ•½yfcMõ‘;ßùzØ¿¡r×¼ÀmOpÕ·!¬ô}ÓÑéG´¤½µOüñéþÑIå øÁ·ñ^`]ðé'¤úÖ¿<ó³äÀK÷ÞGǪÂ?Cì/ÞùtGýã;Ÿ~”¬ŸýõCæìÑÀFœþŸGH ‡%A™§}iÁ}÷VÆà0H>^ô~ø ¨n Hø€Á˜bæÇy¸·zóvj§·wÈ9x€¨X‚yØ Às‚%ô<ÍW~,x~Æ€ýwx2(6)Xzð×xò—Z9(yзƒ&؃CDƒäx7‚!ø‚žÐ)J¸„LØN8^-(}:(„„U…®? G{Ã×r©W„ºÇdH¨L`H`!túV†ŽG„h„qX‚É׆éÕ(5˜… ¶…wþ'…`ÑZzø9Á:dèq8X‡ixfk8@…xN‡hs¦W{f8.Ø…x~‘˜JbH‰Œ·‰#w†ŒÈzbg‰1؉NÄ#pØz¨8„¿†~šøŠ¤ŠŠ­xŠbˆ_'ˆ|Q¶¸ŠbhŠ“G‹‚ö™h‡®è…ùŒ|ô†Äx„r‹Í††ÑèˆÌ˜ÎB_3‚ºhi¼8u¾8”´Ü¸:(Š…²¨ŒßHteŽªc€M¸‚Z¸ˆÉ˜Ž$hŒ©(Ju…õhˆ\莻—ýèhEXhƒ÷ÈŽÖèц ©‡O×8Š»H8‹Ó¨v)\ã÷w9YŠùmþX‘!yh'„'™¹é_-)#A(ŠI×V(™‹´¶’–“æwB©‘àÈ‘½è‘ëXNFi²§‚üG‘ňŒ©Ci•T•ä–r<)|Oy‰tH“)Yq\Ù•^©q`ÙUé“W©sYY“[ — ¹–(×–0)IDy‡¤h–I©’i©–x‰"z¹—Pw“C‡‰sy–V·®R˜†IqÇ8–s‹˜hi—8)™CF™•)“Ä‚"¨™¹rž)eZI|8š¤9Žs€š©iºs™}Æ”âè”–™³y é» œÙ˜¦yš²Ù›²š~xcáÈvº)šAˆœÉyþ–¬ù„®…Ϲ‘Œ'J¤0ê˜ÂºGx¬†G«è«Ê:Jø¬8 ŸeY¤š£Òª©'˜­ÏG­ ˜FÊžÜê É:®:¢ŒY¬Åi®›æ{ìz®X:¦ù¹¥ïaÖW¯-ºŸòª§eНö*zþš¯uö¢Z£ä°ä °«˜Jù­ÖÚ‡¡¹°ÀŠx˰?I°dJ¯; |·±Á±Õª®áŠ® ­þXW²Ði›·‡ýв° t.«á™™#¯1k² w³KI¬k¬:[ 9û³·É³k°Bû²Õv´C;³ ±‹©´R€kP»´ Úžàz­Þ:µxfhZKµ*[|M¦YÛµð6cd;¤L{µNÛ°giÖ¶h[µ++žF ·û¶vÛšr ¶j+¶bš·[û]€ë¤Ì ¥Î:¸K·Lˆ«·_KšÏp¸‹[X¹Œk¥|û°~+®”krY·¹à¹·Ž{ª [vžû¹ ûš[º Uº zº,[Ÿ¬{·ž»­Û¸¨Ë¤´+»×—»µk¹¡K™¼«»ù¼½+œéÚ³šy°Ä붸¼Åkþ¼!‹¼5K²ÎKm%W½¦ëºtëØ+¼×½&Y¸lú›à뽜ætå‹7бój°u™¾õp¾t¿Rº¾YZ´ ª¼ô˼ ¥2ûK}•ȾüZ¥=ú¿ñ]/À<ˆ!*À—ʤºÀQËf3À‡¬¾ |¿í›¿yÁ +oLÜ€1y¼ø›¼ú:¸ªš!|ˆ*¬~‰¸¯LÀüÂò2‰6eÿ˜¤^'½X»·:<8,ÂAÌÀ<¼vì¾[Ä{1Ä8ÌÄSèp@Ù·(šÁP<NLÄWü ÓÃ'<½ÙÆbܤ̑ÅÅ5ÆhœÆVlÂŒÂjüÆj|§.,³p\Çv¼Äþ+²?|Ç| ÇZ`ÏÛÇ‚œÆÉ°½n<Ȉ\Â]›ÈŒìÇ0EÅTÙÈ’\5‹;É–4Œ¹U|Éœ¬È‹ÜÉ Ì—H<ÃJʦL½d{ʪ̢lœÄ¼Ê§ì¹°<Ëi«É‘L˸<¶©œË¼Œ­ÑûÅ{Ü˸̺Â\Ì6ûËm ÆÆlʱ»Ìά¿Vkˈù̼œ»Ô\Ì…L³Á|̻͜ÜÜËÙ¶›üÍ ¼ä<Ì™¬Çk{ÎåL¼ì Ëá ÉÓüÎì¼ô¬Êñ,ÍyÏÌ\½üÊù¬Î™ûÏ|ܽÝÍéìÃë|Ђ\¾ =É­ÐýЄœ¾ÍÈ Ì }ÑoL¿ÈÌþÛüÑ”ìÑ$]Ð ­Ñ}Ò]¼¿,mÇ!íʇüÒökÑ4Ç)-Ò}ÓÆsÁ<Æ1MʯüÓ– ¾Dí2^¬Ó+}Ô¬lÀL6I-ÓÊüÔd¼¼TÝӣܫ|ÕªÂ\½u9-Õ#ýÕÐëÕdí,Ô3}Ö5üÂlÀ,Ö;ýÖOËÄt]Ói­Õ4üÖ[\Ê\Ôzí×|ÝׂýÔ€mª¿ÉÖ„]›W}Ø­ºÕd½Ø˜q×eÍ=Δ=°’ Ù?íØµÊÙL½ÙQœÙ¾œÇÙ™-Ú$LÚšû» }Óª]¿¬ÝÖ—{Ù·LÚ±}³MÛ®½×$Û ¸ÛžÝ¬¯MÑÀ½ŠÖj=þÕ4}Üq{ÖÃm¸ÅMÐÎíµ_Ýã;Ý÷\Ý; ÝÊØCÍÏÜMÇý݈­Ýï<ÞÝ}Ýæýؾ½Ýê}ÆÞÕË=Ö'ßëÝØíýÙïMÏø-ßìMßà½Öâýß„›Ü~ÞýíßÈDÝ‚šØÝàÈMÕž¨>á. ƒàî]Ø ½áC‘ÚûMÜ ¾Û(žâPÕ â*þâ0ÖÎß.ã6~ãxÌr½Ô8Þã>n¡q]ßsýãD^ä9nÚ*ÚF¾äL²H®ÔJÞäR>åÇüä;åTžåT~៚áZþå/Îå˜ÆØ`^æa^âÒ}âf¾æÎâÞlçóíæ4þçr~çŽæÙ­æxÞç°­çîå~>è>ã&Î焞è-æŒÆÅŠþègè]Næ^éÆÍèæè–¾ét½ÞœêËìéŸ.è¢~êàLê·k ¨Þê—>Ž[š">ë´ëK븞»¶žë¼Îº¶.ë½ìmûë·.ìÆ>ìÄ^ìǾìJ›ì¹ÇìÐ~³ÎþìÑ^í;íÔníÚŽ¯ØÎÛþíÜÞíÞîäž­âŽwåžî·zîT§îîÞ¨ìžiï>ïiïfAïø~0öÎùÞï̱ïð?ð_ððŸð ¿ð ßðÿðñ?ñ_ññŸñ¿ñßñþÿñ ò"?ò$_ò&ò(Ÿò*¿ò,ßò.ÿò0ó2?óÎ4/3kÐ;?L9ß?_:=oë° ]d·I¿P GÏ8K/OÐ0 g`½ [?M¯`õfðàWÿ]OõUöaŽàQÏógoô‹suOEb÷UàõmÏõ}ïö†Ð öC¿eøôÙ{AOø+ï÷PøE÷eÌ0÷Íp÷¤ø+ló“_>»ø>@JŸ ÛPúœï9™ùEÏökoø˜Ï÷ÿ ´¢ùï$÷à%®)‘©À– ·¿ùa@ü³þ´Ÿü´ü@ûƒøßøÎq PSý;°?ü;ðûŒú_&ÓϨHú„Ðúfžïôè©÷ž¿ý¦ü²?ÿË/ã?1¶ý¾¯üÔ_û@ºÜî!‚9c|¸YÊÍ bIÞøef§®¬z†š9®òßx®mï3Ö –j;£]¬FBÊ”˜Ú±Â„ò‚Ó¬kÁj¿¥_7ÐâÞz¾Ð vŠ­Ñ&%¹–sÌ96õÍ(¶µt8RSLjp‡ˆ"vsx!hi‚zŒ|g…dFOˆ~`Uu“Š˜ Yce¢q¤‘¥{†‰}¯{Jµ”²:’¶«°¦ªK‹À𳯮©ºþ–ñËÌ §Îœ„Å·¼€5»Ï¿w¢¸ÜnÊ ß½yÛÁãדѳßìŽç•Dñâé¬àiõcÛÔÕÇÿ¨„ £uÏ4|Ýä=´Î”iК+ˆ0! ~ø‘ £ÏW²ƒ9$7`&…é¥ )°£=ŒÄJøÐÞ[ÞÇ<\q¾F­—™ZƸ¶Y{ÒEG]>û7 6L˜UÞL‘ý›^ñqa^!L¤q¨v—´sa‰›€o𘖈úˆÑN”Øb'†g¢‹2”`Fßd5v˜×%E˜V3-öÚDB)£iä%˜¤‘³Õ÷#’RÚØ• š'¥@Ò4£m]É]˜n5×"Ù e†N„ò¡‹ïðÒ•ÙYAfyñ9¨Ý˜þVÃb"…–9hšrʧ¢~žY‰ž}ªÙ¤ˆZfu)‰m²å_vnŠi~ ݉àcîÔžW~:*A‚Uši©`¦÷ßXf)–¤¹S¥¥Â´ÚŸ¦¹Úš)bm Wά§ujì‚Ïîú( «Â§´ºjUŠ<(¦§Å.«¤°ÿé¥;+Ž7Zˆ'»s¾UÈ©ëç«©ä¶v!µÝ²ê¨“áþú„µê®·Ì üí–¢n«.dôôzmÃÙ[ñƒÂxñ°Íb‹pÂéZÃç„:x(³ï®Èì0Å/“ºE¼áíÃ"·«o½I:âÆ%'á£Á2Ç<îÍEwC3l$w+îÑþ/šæ½ˆÊ»bªoæ‹q*Kë¼0±8Gê5ÔQ7#Ì)›í&¬Ã¸«µÚ`ƒÜ5eM‡ŠöÓw¬¥ÂRy+ÒI3é1#s3JuØë\OÍ_4²ˆÆ]d;®-Þ—+ÝôÈÔÚ‰ÙÄ•[Þßt¦ rÏc\Bá+?.+âŸ9æÓ«ªÛ¾ÜݦÏ.Ó›Ó­ªÓ¶÷ ¸ñ¢ÇîÄŽv7ntínŸÄzÙ[;ïfðüwòp÷œ½(bom¬Ÿsίð¨Êõû´§o¯p齫<õɃS1½õÝ}½â0î|ÜØ‚ÜÛ^Ò'ú n}¬Zꤕ,xå k0{Ÿú ºö‰/dkþ¢òô·?èqÁ€ªÛIÛò½×eÕK)TÁ‘è\û²àϸǻ|¸ €³Óß ]¸ÀšvÚSžSˆÂŸ¼Hbï Zç;¨ì°\-„"ñW;ïÅP=¤àÏ eÄ.ùï`|›¡k¢D ‚î‹b"Ut:ZOzi|^þ8È­&n.õ³"û¤§;60;O$¢9ÆŽ‹$ä YÅͰ±‘?\¢@þ‡@Dú‘‰Ì³ ¯É2‘ÆLS¤âCxHKŠ }‹$â‚Äí R"Üãùàx·JbrJv<¥&åÁÆ–ªÌ"ÙKþÝofqÄa"/¨†b’²Œ®Tþ&QéÃòåò’jŒJ(1çLA¾ÒRðËE4ã×Í’”” fØÌ…Æd~SôJŸùRiMSjóš,Ãc¥YNu…Sš¾à-½IGPRóXêÄÏú¹O½ў÷¤%oÅiBt‹ä*g ùO:¶Òb%è/3É5wt™"ÕP»^G ºC†Î‘©M-iTêŒæ5wCêT ‰:/VTŠø|jË:™G°ï2ãªIÒIš4­þ„ß$iÔˆ›¸û«þߪ¯Z”89Eâ`W¹V´R­ªIí§XÍRv›þ‘+ kzX]Š•žc½«S7;Ù” ´´pmÌMñÀׯ’éôì:·zÒ¯ö6Ÿ°®_k¹XDzи•mdëz[/)—µ´e¬9×*·Î’U´sÅ.@ûêS˜ž¶š©•g\ ûGe`5‰Z­¬(•­†—1E¨nw Úí¢¬¹¶¥.QÛzËÚ†5›ÂÕ§o_ àÇ>÷½˜Íì1—gÝë:²Úý­vñ»\âÖ3¸[¤0o?vÞÖ>ì{6ætå_Ò”Œ&ov#lWÓØÅÔC1Uç«Výú6r®Õiˆe {°Ò1þéjáct¼H§j1¬âW¢ëÂ6œ¥ìŽ1t˜Sô}ÔY…<â&¯×Àe{²‘]Ú*åD‹ÿ í‚,•ÊœHÊSŽíÏû( Ÿ®ÎeíN‰“¬70ãOÆcþß–YÚÇä2ÙË´cLô”êg\Qù3?èg )ç|ø˜Ëù%1¯–ÌDEÛX¡~XÐ> ãwâò;Oš_)mbýj©É1 ûµ»F'uжr›)¸êWcØž­s^èÜue¥zŽ—“ëT'pÔ÷v´kmîÈeµ®é>všíþ#KÕ¤nÏ|v6½ÙêîÕ5œ¬o¾5M>«7ÖVÝ’º§Í ‰ã»3“Ž8‰Â¸Ð7 z‘ÞfÅõ}ñ—[ã_LE| è5#DPæbÌO|¦/eÜß+']ŽÐûñn#·ä„5^O.èËO1@j¹Ks5…ïõá4—Íï§«¹ÔüÞv¦·Žh“]ÀDÏZÆvu%œe—yÚG;óKjãTw‹Õ݈ugký§6¨P¥ÚîS¾ZØGñµØ‘n³sï;$±ôPÑ5S\9)îì­ò¯X4iþÆà¯Íâ!v¡·‹9·¥á[øÄ¿gó¹yæÎï¾ÆÐ›òæÊst0ïþwÖþê/yZ‡eð¢}îÃ\»í…Ïæ:Ÿç²‡àiˆ›oö´'¾}3ÏøÜ£þók‘ü¬ .oS|—Eu=”µjÖÿø}}aœÏÌè£?Ý׿õ¿},ò>jd2ºÁHáúë×xå÷æ·F÷7z©RyE7 ÖQ{ÿ·åõiéå4ÍUpÍSc¿Ç¬€GÒè÷€Í6GR€ç'‚Aa'( xf²Âw !ûC'†&Ô&b.7-XY$‡rÇr«G€¸&wórƒdÖ*]îåy#7~‡fó'réw\6ˆI˜Wwü÷:ÕƒôÇoËÇNƒ|bS…þ†5Iø|^Õl¸|)ƒìfF´¦ö74ƒt…†u?ôOÄbM2b.$ø&3Zí&L¦§CXE®Æ†72¸Lð6ƒ&(:v`šGzwjžSUx"h#J7xlÂ~Ï”ˆßÆ0Üu‰Qø`Ÿ(OU1SFg‰Þw‡Žhhn˜ŠÁ‚b8<¯Èk“¥€Ó†g²ø¶8t«È„oMfjÞÅy˜x$Ù–‰¸¨9|FŠœFˆìgþâuÈȈ‹W:Þ_@rÍÈ]ÑHŒš8\ ÖŠÃhW¤h’ãŒñˆŠÅˆŽÇ¨†„èrË8}Ó(ˆ¶†é-ØÏ(wþc‡˜z÷¨Žë¨ŠûXo©&¡Èu9x‚X(‘i93÷†©†Ù“†ÔÇl°¶ ¹K)ЬÁQ»¦`™v¢¦"Ÿ–(CF?#ùˆsô+ƒ’¼5y8)‡.è“’¸MÉèNÿHlyO9ŽÁx[< uÉx8J8) i‘±Œä(y/É•¹fmQ‰|8v9…íe6Š1w•Ìsœdˆáç’i)•]Ø{ayŠŽÆS3‰5ù~DÙomùw8؆ðÛØ:ôxtvI‹£w–F¸—]ô˜I9$f™ŽPÙuv†’ù2o‰”å.Šy})–ÌHd×h”‰˜†yŽÏ“™Ý“Ù™sþù‘âšr¸O‹f…Çàè™iY^­Ùˆ* j ˜i™œùˆÂ9aoN©˜nF˜tiyù™©©ÕWœ) Žù›æxxúø^…™Æ—É9c8÷nœq“?ž¬¹—Ò¹”¾÷c¸q­(›h¸›Iv’N'š£Y\Š“'[ ƒÛÙeKG~Á6f%Dnȉ™ãْѦ—é  x  ´žÚDã÷ƒèveIþIpºø¡jº–â9Ÿ¸ n·Ùsz¢‡Y™ XíÉ?Ë6@¼'•6º_“ˆžz!-ªϨW¯ÉL­7^Az£™6C )&—ˆˆ‡ñ7꓌£‹þ­¹PŒŠ/¸7¼T¡¹-±‡‚Î9£.j4 9>{ˆ6ìr#X—w—múo ºìWÒæÙj\žI¸K+^ ›½Õˆºƒá½;»¬×¹]èh Uc²‹{£¾ðÙ®+Ôºh[iDz½_‡´t'_üHitˆ¡ü«N𻲠̵nš†ù“ZÀ?«ŸŒÚwþ˳øÅWð#ÁÅwø»>âx¥‘»Áš‹£„J_Aµ¼ß&zDÂ|Y´›Âª›¶öÕS.¼]¡¨“|´¿"׿$ ®³KÄ~默†Vˆ½Ú‹½þŠ\BIÅÍ™±Õ:ÃÛ‡Á†û4^™}os†j›^ Ƹe^¥#œ‘`ÈÅûÆÂØÀFÜ´>Ë•ubC @¬ÆýE¸6lÂT«¡Ú²Þ–ÆŒC•G†yü@0›Èä{žÃG<>Ì–ȺV ŠZ‡Èp ºñëÁ$<º§+EÇ”\ÉñÅõ»º²)ëëÄùÊ£ÊxuŽ{ÊòÛi¥Œœ¸ Ìè6¢#·úÛÅ–¼ÇBªkʱ‚ïÍ}qË©ûÄË\¶h R¾,¾ìÄ6ªZ¸³ÌÈR|Äßzmƒ ËHA›ÒËÍ$ w Rx}o2¤q2ܽVk^¡\ÄL:¬ñ …¶[☸6þÀ>vZ+©8›Ä#5Éÿ\ÆÁÛ Ìk®Ä‹šÌéŸ!,´oê…ñ<¾ÊcúÑý½À –â<Ëßɧɻ*mÀ(-t½É¬ú̾d7hz×È çª7<½Dw¾­¸Ô.­Ñw6Ò$Í»ÆXÂ)ݼK" Î»Ñæ¬Åžëz»Û­=½kÀMͪT›Ä¼ÆÒ·Ò›Ô/z‹Y°¡ƒ—VZPMÕ;}Æ~LÌ[KÀêW°³–®CMÔõ\Òd=ÖŒ7ÓÕŠÃ!%!] ¾š«nõÔmýrÀûÂíÀòÆÉ‡tum×Ûn­Ð ·Ñ€²Д]9j Ú¦²8ÍØ# ÖÎŒ·çê­þLØöaŠçÑý/œÚ· Ø–äÊ÷*~ì5Ú‘u×9ì×ÜÈH [¤Áˆçk“±D|&d… ×¥·8B]±µkšØÛfw4ÀÝÃ4×ØÍ¬o½ÖFfØf–½­}!˜{ÒÚ•-ÖR¨ÞH i3mOùÇpVyχ­MÅyÝíšòMÚ)'àÛí`^¤× Kx˜3sÐÞôÜð àôÍ×d- lháûÍ6 >‡þŠ P8±úUÝLº:Ò×xyÓdä1 ðì2@™o߸‰Ô×üF*î˜øZuäà;Î-rðãÞ3î†5þR÷MÎü­–ˆ}D뽩9.9®¼­ÓÜ·½þâ÷©6mõHåŽ*ä<ån€]#`~~L>†iñ‚n{Â=Rnž @$çd*ÑrþÐ hÚ²'äxnçDØç¤¶tÎàcîoÿ)¶åàœ“€n˹(®èI9T>†ŽNv‡né^.èƒæÞéœþé;êšN…—ç…ê®(ê¤N@›Lg‰€õ¨„.é‰Sé@Þꄬ潮밲+eì¬Áÿ ë¿~¯±þÉ©.“FyìÞYçÍnë"`²Ñ~í/ í} ë´N„~Šíà®/á>îäÎÚåîBçžîê¾îìÞîàäîðïò>ïô^ïö~ïøžïú¾ïüÞïþþïšð?ð_ððŸð ¿ð ßðÿðñ?ñ_ññŸñ¿ñßñÿñ ò"?ò$_ò&ò(Ÿò*¿ò,ßò.ÿò0ó2?ó4_ó6ó8Ÿó:¿ó<ßó>ÿó@ôB?ôD_ôFôHŸôJ¿ôLßôNÿôPõR?õT_õVõXŸõZ¿õ\ßõ^ÿõ`öb?öd_öAŸ!þã XScreenSaver Logo, designed by Angela Goodman Copyright (c) 2001 by Jamie Zawinski Unauthorized use or reproduction prohibited. http://www.jwz.org/xscreensaver/ ;xscreensaver-5.36/utils/images/logo.eps000644 000767 000024 00001001020 07376667335 020234 0ustar00jwzstaff000000 000000 %!PS-Adobe-3.0 EPSF-3.0 %%Creator: Adobe Illustrator(R) 8.0 %%AI8_CreatorVersion: 8 %%For: (rzr Grl) (evol engel) %%Title: (xscreensaver.eps) %%CreationDate: (1/30/01) (8:38 PM) %%BoundingBox: 179 249 429 531 %%HiResBoundingBox: 179.3335 249.9619 428.666 530.8477 %%DocumentProcessColors: Black %%DocumentFonts: Device %%DocumentSuppliedFonts: Device %%DocumentSuppliedResources: procset Adobe_level2_AI5 1.2 0 %%+ procset Adobe_typography_AI5 1.0 1 %%+ procset Adobe_ColorImage_AI6 1.3 0 %%+ procset Adobe_Illustrator_AI5 1.3 0 %%+ procset Adobe_cshow 2.0 8 %%+ procset Adobe_shading_AI8 1.0 0 %AI5_FileFormat 4.0 %AI3_ColorUsage: Color %AI3_IncludePlacedImages %AI7_ImageSettings: 1 %%DocumentCustomColors: (PANTONE 152 CVC) %%+ (PANTONE 485 CVC) %%CMYKCustomColor: 0 0.51 1 0 (PANTONE 152 CVC) %%+ 0.91 0.01 0.93 0 (PANTONE 354 2X CVC) %%+ 0 1 0.91 0 (PANTONE 485 CVC) %%CMYKProcessColor: 1 1 1 1 ([Registration]) %%AI6_ColorSeparationSet: 1 1 (AI6 Default Color Separation Set) %%+ Options: 1 16 0 1 0 1 1 1 0 1 1 1 1 18 0 0 0 0 0 0 0 0 131071 -1 %%+ PPD: 1 21 0 0 60 45 2 2 1 0 0 1 0 0 0 0 0 0 0 0 0 0 () %AI3_TemplateBox: 306.5 395.5 306.5 395.5 %AI3_TileBox: 30 31 582 761 %AI3_DocumentPreview: Header %AI5_ArtSize: 612 792 %AI5_RulerUnits: 2 %AI5_ArtFlags: 1 0 0 1 0 0 1 0 0 %AI5_TargetResolution: 800 %AI5_NumLayers: 4 %AI8_OpenToView: -109 667 1 718 623 18 0 1 153 44 0 0 %AI5_OpenViewLayers: 3733 %%PageOrigin:30 31 %%AI3_PaperRect:-30 761 582 -31 %%AI3_Margin:30 -31 -30 31 %AI7_GridSettings: 72 8 72 8 1 0 0.8 0.8 0.8 0.9 0.9 0.9 %AI7_Thumbnail: 116 128 8 %%BeginData: 12612 Hex Bytes %0000330000660000990000CC0033000033330033660033990033CC0033FF %0066000066330066660066990066CC0066FF009900009933009966009999 %0099CC0099FF00CC0000CC3300CC6600CC9900CCCC00CCFF00FF3300FF66 %00FF9900FFCC3300003300333300663300993300CC3300FF333300333333 %3333663333993333CC3333FF3366003366333366663366993366CC3366FF %3399003399333399663399993399CC3399FF33CC0033CC3333CC6633CC99 %33CCCC33CCFF33FF0033FF3333FF6633FF9933FFCC33FFFF660000660033 %6600666600996600CC6600FF6633006633336633666633996633CC6633FF %6666006666336666666666996666CC6666FF669900669933669966669999 %6699CC6699FF66CC0066CC3366CC6666CC9966CCCC66CCFF66FF0066FF33 %66FF6666FF9966FFCC66FFFF9900009900339900669900999900CC9900FF %9933009933339933669933999933CC9933FF996600996633996666996699 %9966CC9966FF9999009999339999669999999999CC9999FF99CC0099CC33 %99CC6699CC9999CCCC99CCFF99FF0099FF3399FF6699FF9999FFCC99FFFF %CC0000CC0033CC0066CC0099CC00CCCC00FFCC3300CC3333CC3366CC3399 %CC33CCCC33FFCC6600CC6633CC6666CC6699CC66CCCC66FFCC9900CC9933 %CC9966CC9999CC99CCCC99FFCCCC00CCCC33CCCC66CCCC99CCCCCCCCCCFF %CCFF00CCFF33CCFF66CCFF99CCFFCCCCFFFFFF0033FF0066FF0099FF00CC %FF3300FF3333FF3366FF3399FF33CCFF33FFFF6600FF6633FF6666FF6699 %FF66CCFF66FFFF9900FF9933FF9966FF9999FF99CCFF99FFFFCC00FFCC33 %FFCC66FFCC99FFCCCCFFCCFFFFFF33FFFF66FFFF99FFFFCC110000001100 %000011111111220000002200000022222222440000004400000044444444 %550000005500000055555555770000007700000077777777880000008800 %000088888888AA000000AA000000AAAAAAAABB000000BB000000BBBBBBBB %DD000000DD000000DDDDDDDDEE000000EE000000EEEEEEEE0000000000FF %00FF0000FFFFFF0000FF00FFFFFF00FFFFFF %524C45FD2BFF2727FD71FF2052F87DFD70FF76F8F8F8A8FD6FFFA8FD04F8 %FD70FF4B69F8F852FD6FFFA84468F8F87DFD6FFF27FC44F827A8FD6EFF27 %8C8C20F827A8FD6DFFA844B08C27F852FD6DFFA820FCFC4426F87DFD6DFF %20B0FCB0204AF8FD09FFA1FFA8FD61FF4B8CFCFC8CF8F827FD07FF7DF87D %F87DFD60FF528DFCB0FC4B26F8A8FD06FF204B27F8FD61FF7D68FCFCFC8C %4AF827FD05FF27F827F852FD61FFA869FCB0FCB02074F8FD04FFA8204BF8 %F8A8FD61FFA844FD04FC4492F87DFFFFFF2068F8F8F8FD62FF7D69FCB0FC %B02050F8A8FFFF526944F8F852FD62FF7668FCFCFC684AF827FFFFA8208C %68F8F852FD62FF27B0FCB0FC274AF87DFFFF7644B02050F87DFD45FFA852 %FD1B2720FCFCFC6820F8F8272727F8FCFC206EF8F8FD202752A8FD22FF7D %FD1CF82044B0FCB0F874FD04F82069FCB0449EFD23F827FD22FF27F8F8F8 %FD1927F8FCFCFC4474F8F8272727208CFCFC6844F8F8FD1F27F8F8F87DFD %21FFF8F8F8FD19FF4B69FCB08C206EF852FFFFA844B0FCB06898F87DFD1F %FFA8F8F827FD21FFF8F827FD18FF2744FCFCFC684426F8A8FFFF4B68FCFC %FC8C44F827FD20FFF8F827FD21FFF8F827FD17FF764BFCB0FCB0F8C0F852 %FFFFFF27FCB0FCB0FC4B2027FD20FFF8F827FD21FFF8F827FD16FF7D20FD %04FC8C4A44F87DFFFFA844FD05FC204AF8FD20FFF8F827FD21FFF8F827FD %16FF278CB0FCB0FC696E26F8FFFFFF768DFCB0FCB0FC444AF87DFD1FFFF8 %F827FD21FFF8F827FD10FF4BA1A8FFFF5268FD05FC20C0F852FFFFFF4B8C %FD05FC6844F852FD1FFFF8F827FD21FFF8F827FD05FF7D52275227522752 %2752274B27F8F85220B0FCB0FCB0FC4B92F8F852275220B0FCB0FCB0FCB0 %2026F852275227522752275227522752275227522752275227522752A8FD %05FFF8F827FD21FFF8F827FD04FF52FD0AF8206820F8F8F88CFD05FC8C44 %74FD05F820FD07FC44FD1CF87DFD04FFF8F827FD21FFF8F827FFFFFFA8FD %0AF8204444F826F820FCB0FCB0FCB08C744AFD05F844B0FCB0FCB0FCB068 %4AFD1BF827FD04FFF8F827FD21FFF8F827FFFFFFA8FD0BF88CF8F8F82068 %FD06FC8C444AFD05F868FD08FC2020FD1BF8FD04FFF8F827FD21FFF8F827 %FFFFFFA8FD0AF8458C20F8F820B0FCB0FCB0FCB0FC266EFD05F844B0FCB0 %FCB0FCB0FC6944FD1BF8FD04FFF8F827FD21FFF8F827FFFFFFA8FD09F820 %6868F8F8F820FD08FC449EFD05F868FD08FC8C20FD1BF8FD04FFF8F827FD %21FFF8F827FFFFFF7DFD0AF8B044F8F8F820B0FCB0FCB0FCB0FC8D2026FD %04F844B0FCB0FCB0FCB0FCB0446EFD1AF8FD04FFF8F827FD21FFF8F827FF %FFFFA8FD09F844FC20F8F8F820FD09FC4420FD04F820FD0AFC2020FD19F8 %FD04FFF8F827FD21FFF8F827FFFFFFA8FD08F8218CB02026F8F820B0FCB0 %FCB0FCB0FCB0FC20FD04F820B0FCB0FCB0FCB0FCB0FC6944FD19F8FD04FF %F8F827FD21FFF8F827FFFFFFA8FD09F8FCFC444AF85220FD0AFC8C20F8F8 %274B8CFD0AFC2020F8F87D527D527D527D527D527D27FD0AF8FD04FFF8F8 %27FD21FFF8F827FFFFFFA8FD08F845FCB02074F8A820B0FCB0FCB0FCB0FC %B0FCB06820F827A84BFCB0FCB0FCB0FCB0FCB08C2020F852FD0BFF27FD09 %F8FD04FFF8F827FD21FFF8F827FFFFFFA8FD07F82068FCFC206EF87D4B8C %FD0BFC4420F827208CFD0AFC6820F8F852FD0AFFA8FD09F8FD04FFF8F827 %FD21FFF8F827FFFFFFA8FD07F820B0FCB0209EF87D7D69FCB0FCB0FCB0FC %B0FCB0FCB0444BF87620B0FCB0FCB0FCB0FCB0FCB0685120F8A8FD09FFA8 %FD09F8FD04FFF8F827FD21FFF8F827FFFFFFA8FD07F844FCFCFC686EF827 %FF20FD0DFC2026F82068FD0BFC2074F852FD09FFA8FD09F8FD04FFF8F827 %FD21FFF8F827FFFFFF7DFD06F82068B0FCB0686E26F8A87668B0FCB0FCB0 %FCB0FCB0FCB0FCB0204AF820FCB0FCB0FCB0FCB0FCB0FCB0204AF8FD09FF %7DFD09F8FD04FFF8F827FD21FFF8F827FFFFFFA8FD07F88CFD04FCF874F8 %7DA820FD0DFC8CF8F8F868FD0BFC4420F852FD08FFA8FD09F8FD04FFF8F8 %27FD21FFF8F827FFFFFFA8FD06F820FCB0FCB0FC4B98F827FF4B8DFCB0FC %B0FCB0FCB0FCB0FCB0FC8D44F8F8B0FCB0FCB0FCB0FCB0FCB0FC27F827FD %08FFA8FD09F8FD04FFF8F827FD21FFF8F827FFFFFFA8FD06F820FD05FC68 %4A44F87DFF20FD0EFC20202044FD0BFC444AF8A8FD07FFA8FD09F8FD04FF %F8F827FD21FFF8F827FFFFFFA8FD06F821FCB0FCB0FCB0209EF827FF4C8C %B0FCB0FCB0FCB0FCB0FCB0FCB0684AF820FCB0FCB0FCB0FCB0FCB0FCB020 %F87DFD07FFA8FD09F8FD04FFF8F827FD21FFF8F827FFFFFFA8FD06F844FD %06FC684426F8A8A820FD0EFCF84AF868FD0BFC20F852FD07FFA8FD09F8FD %04FFF8F827FD21FFF8F827FFFFFFA8FD06F869FCB0FCB0FCB0FC4B74F827 %FF4B8DFCB0FCB0FCB0FCB0FCB0FCB0FC694AF820B0FCB0FCB0FCB0FCB0FC %B0684AF8FD07FFA8FD09F8FD04FFF8F827FD21FFF8F827FFFFFFA8FD06F8 %44FD07FC8C2644F87DFF20FD0DFC8C20F820FD0BFC8C20F8A8FD06FFA8FD %09F8FD04FFF8F827FD21FFF8F827FFFFFF7DFD06F869FCB0FCB0FCB0FCB0 %4474F826A84B8CB0FCB0FCB0FCB0FCB0FCB0FCB08C2020B0FCB0FCB0FCB0 %FCB0FCB0FC20F87DFD06FF7DFD09F8FD04FFF8F827FD21FFF8F827FFFFFF %A8FD06F844FD09FCF874F8527D44FD0EFC8C8CFD0CFC44F827FD06FFA8FD %09F8FD04FFF8F827FD21FFF8F827FFFFFFA8FD06F821FCB0FCB0FCB0FCB0 %FCB0204AF8A821B0FCB0FCB0FCB0FCB0FCB0FCB0FCB0FCB0FCB0FCB0FCB0 %FCB0FCB0FC8DF827FD06FFA8FD09F8FD04FFF8F827FD21FFF8F827FFFFFF %A8FD07F8FD0AFC8C20F8F87D44FD1BFC8C20F8FD06FFA8FD09F8FD04FFF8 %F827FD21FFF8F827FFFFFFA8FD06F82068B0FCB0FCB0FCB0FCB0FC6920F8 %5227FCB0FCB0FCB0FCB0FCB0FCB0FCB0FCB0FCB0FCB0FCB0FCB0FCB0FCB0 %20F87DFD05FFA8FD09F8FD04FFF8F827FD21FFF8F827FFFFFFA8FD07F820 %FD0BFC20F8F820FD1CFC44F87DFD05FFA8FD09F8FD04FFF8F827FD21FFF8 %F827FFFFFFA8FD07F8208DFCB0FCB0FCB0FCB0FCB08C26F8528CB0FCB0FC %B0FCB0FCB0FCB0FCB0FCB0FCB0FCB0FCB0FCB0FCB0FCB044F852FD05FFA8 %FD09F8FD04FFF8F827FD21FFF8F827FFFFFFA8FD08F820FD0BFC44F8F868 %FD1BFC68F827FD05FFA8FD09F8FD04FFF8F827FD21FFF8F827FFFFFF7DFD %08F8208CB0FCB0FCB0FCB0FCB0FCB020F844B0FCB0FCB0FCB0FCB0FCB0FC %B0FCB0FCB0FCB0FCB0FCB0FCB0FCB0684AF8FD05FF7DFD09F8FD04FFF8F8 %27FD21FFF8F827FFFFFFA8FD09F820FD0BFC8CF868FD1BFC8CF8F8FD05FF %A8FD09F8FD04FFF8F827FD21FFF8F827FFFFFFA8FD09F8208DFCB0FCB0FC %B0FCB0FCB0FCB0FCB0FCB0FCB0FCB0FCB0FCB0FCB0FCB0FCB0FCB0FCB0FC %B0FCB0FCB08C4BF8A8FD04FFA8FD09F8FD04FFF8F827FD21FFF8F827FFFF %FFA8FD09F82720FD28FC8C20F87DFD04FFA8FD09F8FD04FFF8F827FD21FF %F8F827FFFFFFA8FD09F8277644B0FCB0FCB0FCB0FCB0FCB0FCB0FCB0FCB0 %FCB0FCB0FCB0FCB0FCB0FCB0FCB0FCB0FCB0FCB0FCB08C74F87DFD04FFA8 %FD09F8FD04FFF8F827FD21FFF8F827FFFFFFA8FD09F827FF278CFD26FC44 %6EF827FD04FFA8FD09F8FD04FFF8F827FD21FFF8F827FFFFFFA8FD09F827 %FFA84BFCB0FCB0FCB0FCB0FCB0FCB0FCB0FCB0FCB0FCB0FCB0FCB0FCB0FC %B0FCB0FCB0FCB0FCB0FCB02074F852FD04FFA8FD09F8FD04FFF8F827FD21 %FFF8F827FFFFFFA8FD09F827FFFF5268FD24FC684AF8F8A8FD04FFA8FD09 %F8FD04FFF8F827FD21FFF8F827FFFFFF7DFD09F827FFFFFF208DFCB0FCB0 %FCB0FCB0FCB0FCB0FCB0FCB0FCB0FCB0FCB0FCB0FCB0FCB0FCB0FCB0FCB0 %FC20F827A8FD05FF7DFD09F8FD04FFF8F827FD21FFF8F827FFFFFFA8FD09 %F827FD04FFF88CFD21FC8CF8F87DFD06FFA8FD09F8FD04FFF8F827FD21FF %F8F827FFFFFFA8FD08F82727FD04FFA820B0FCB0FCB0FCB0FCB0FCB0FCB0 %FCB0FCB0FCB0FCB0FCB0FCB0FCB0FCB0FCB0FCB020F852FD07FF52FD09F8 %FD04FFF8F827FD21FFF8F827FFFFFFA8FD0AF8277D7DA87D7DF8FD1FFC20 %2027A87DA87DA87DA852FD0AF8FD04FFF8F827FD21FFF8F827FFFFFFA8FD %10F82020B0FCB0FCB0FCB0FCB0FCB0FCB0FCB0FCB0FCB0FCB0FCB0FCB0FC %B0FCB06820FD14F8FD04FFF8F827FD21FFF8F827FFFFFFA8FD11F82020FD %1BFC6820FD15F8FD04FFF8F827FD21FFF8F827FFFFFFA8FD12F82120B0FC %B0FCB0FCB0FCB0FCB0FCB0FCB0FCB0FCB0FCB0FCB0FCB06821FD16F8FD04 %FFF8F827FD21FFF8F827FFFFFFA8FD13F820F88CFD16FC4420FD17F8FD04 %FFF8F827FD21FFF8F827FFFFFF7DFD14F820F88DFCB0FCB0FCB0FCB0FCB0 %FCB0FCB0FCB0FCB0FC8DF820FD18F8FD04FFF8F827FD21FFF8F827FFFFFF %A8FD17F82068FD0FFC8C44FD1BF8FD04FFF8F827FD21FFF8F827FD04FF27 %FD17F82120698CB0FCB0FCB0FCB0FCB0FC8D4427FD1BF852FD04FFF8F827 %FD21FFF8F827FD04FF7DFD1AF820F820446844684444202620FD1CF827A8 %FD04FFF8F827FD21FFF8F827FD05FFA87D527D527D527D527D527D527D52 %7D527D527D527D527DFD0AF82050FD07F827527D527D527D527D527D527D %527D527D527D527D52A8FD06FFF8F827FD21FFF8F827FD1CFFFD15F8A8FD %1BFFF8F827FD21FFF8F827FD1BFF52FD16F8FD1BFFF8F827FD21FFF8F827 %FD1AFF52FD18F8FD1AFFF8F827FD21FFF8F827FD19FF2727FD19F8A8FD18 %FFF8F827FD21FFF8F827FD17FF7DFD1DF827A8FD16FFF8F827FD21FFF8F8 %27FD15FFFD23F8A8FD14FFF8F827FD21FFF8F827FD14FF52FD24F8FD14FF %F8F827FD21FFF8F827FD15FF2727F827F827F827F827F827F827F827F827 %F827F827F827F827F827F827F827F827F8A8FD14FFF8F827FD21FFF8F827 %FD4DFFF8F827FD21FFF8F827FD4DFFF8F827FD21FFF8F8F8277D527D527D %527D527D527D527D527D527D527D527D527D527D527D527D527D527D527D %527D527D527D527D527D527D527D527D527D527D527D527D527D527D527D %527D527D527D527D527D27F8F852FD21FF52FD51F87DFD22FF52FD4EF827 %7DFD25FFFD4CA8FD91FFCACACAFFFFFF9AC3CAFFFFCA93B59ACAFD05FFCA %FD06FFCACACAFD04FFCA93B593BC6FFFFFCA93B593BC93FFCABC9AFFFFFF %93BCFFFFFFCA9AB593CAFD05FFB6A1FFFFFF94CAFD04FFCAFFFFFF93B593 %BC93FD04FFCAC4FD13FF9A448DCAFFA18C44BCFFBC6820F8208CCAFFFF93 %93688D93FFFFFF8C68448D8CCAFFCA8C20F8F8F8449ACA8C20F8F8F8449A %BC448CCAFF9A6868CAFFBC6820F84468FD04FFCA688CCAFF9A6868CAFFFF %8C688DFF8C20F8F8F82093FF9AB044688CBCCAFD10FFCA6944BCFFB62068 %CAFF8CF82069444493FF8C44F820F8689AFF9320F86944208CFFCA68F893 %8CB58CCACA68F8938CB58CCA9A4420BCFFC32069CAFF8CF82068204593FF %FFFF9A4444C3FFC320459AFFCA6920B6FF93F8938CB58CBCFFB5F8444445 %68C3FD11FF8CF88CFF8CF88CFFC368F8B0C3B0F8B5FF8DF8208C68F8B5FF %B5F88C9ABC208DFFCA442093FD04FFCA442093FD04FFBC20F88CFF762020 %CAA144F8B5C38CF8B5FFFFFFB5F8208CFFC368F8B5FFC4442093FF8CF88C %FD04FFCA68208CCA8C208CFD11FFB5F893C393F8B5FFCA44449AFF934493 %FF68F88CFF93B59AFF68F88CFF764444CAC46920BCFD04FFC46920BCFD04 %FF9320F893A1BC204493CA204493FF934493FFFFFF8CF8F8B5FFFF8CF88C %FF932044CAFF8DF8B5FD04FFCA68F8B5FFB5F893FD11FF9A4420FC20449A %FFC368F8BCFFCA93CAC368F8B0FD05FF69F88DFFA12068C3CA442093FD04 %FFCA442093FD04FF93F8F82093932020BCC34420BCFFCA93A1FFFFCA8DF8 %F844CAFFB5F88CFF93F88CCAFF68F88CFD04FFCA44F88CFF8CF88CFD12FF %8CF844F88CFFFFCA44F894FD04FFCA44F88DFD05FF68F88CFFCA4544CACA %6920BCFD04FFCA6920BCFD04FF8CF8F8F88CBD20449ACA442093FD06FFCA %44F8F8449AFF932068CA8CF88CFFFF68F8B5FD04FFCA68F8B5FFB5F8B5FD %12FF93F8F8F8B5FFFFC368F8B093CACAFFC36820BCFD05FF6FF88DC39320 %68CACA44208CCAC3CAFFCA20208CCAC3CAFFB5F8F8F8688C2020BCC368F8 %FC6FCACAFFFFFF93202044F8B5FFBD20449393F893FFCA44F88CCAC3CAFF %CA44F88CCA8CF88CFD12FFA144F84493FFFFFF8C20F84444B5CAFF444493 %FD05FF68F8446920F88CFFCA44F84444688CFFA144F84444688CFF8DF820 %4420B020449AFF8C20204444B5FFFFFFB5F89368F88CFFC46920B544449A %FFC469F82044698CFFC469F868442020BCFD12FFCA44F844CAFFFFFFC38C %68202020BCFF682093FD05FF6FF8F8F82068BCFFCA20F8F820688DFFA120 %F8F820688DFFB5F86868F88C2020BCFFC38C68442020BCFFFF8CF88C8CF8 %68C3FF8CF88C2044CAFFCA44F8F82044B0CACA44F8F8F8208DCAFD12FFA1 %68F8699BFD05FFCACA8C2093FF44F88CFD05FF69F8F8F844BCFFFFCA44F8 %4593CAFFFFA144F84593CAFFFF8DF844B5F868F8459AFFFFFFCAC38C2093 %FFCA93F8938C2044C3FFB5F868F893CAFFCA69F8208CCAFFFFCA69F8F8F8 %93CAFD13FF9420F8F8B5FD07FFB5F893C368F8B5FD05FF9AF8F8F8208CFF %FFCA44208CFD04FFCA20208CFD04FFB5F8689344F8F820BCFD05FFB5F8B5 %FFBC202093BC202093FF8C20F8F88CFFFFCA44F88CFD04FFCA44F8F8F844 %C3FD13FF8CF868208CFFFFFFA1C3FFFF8CF868CA44F88DFD05FF6FF86893 %F8B5FFFFC46920BCFD04FFC46820BCFD04FF8CF88CCA68F8F84493FF9AC3 %CAFF8DF86FFF932068B58C44F8B5FFBC20F8F8B5FFFFCA68F8B5FD04FFCA %68F8B0442093FD12FFCA68F8FC44449AFFC38C44BCFF93F88DC368F8B5FF %FF68B0FF93F86F8CF844CAFFCA442093FD04FFCA442093FD04FF93F88DFF %93F8F820BCC38C449AFFB5F869FFB0FD06F868FFA168F82093FFFFFF44F8 %8CFD04FFCA4420938DF88DFD12FFBC2045BC93F8B5FFCA442193FF8CF88C %CA44F893FF9A4568FF6FF88CC3444593FFCA69209AFD04FFCA69209AFD04 %FF8CF88CFF9321F8449ACA442093FF8DF868FF8CF820934420F8699BFF8C %F844C3FFFFFF6FF8B5FD04FFCA6820BD8D2068CAFD11FF8CF868FF8CF868 %FFCA68F8B09BFCF88DC368F8B593B5F868C39AF88DCA68F8B5FFCA442093 %FD04FFCA442093FD04FFB5F88DFFCA44F820BCC368F88C9AB5F86F9A4420 %93CAC38C20F893FF93F868C3FFFFFF68F88CFD04FFCA442093BD204493FD %10FFCA93F8B5FFBC20449AFF8CF8206920208CFF8CF8204444F88CFF6FF8 %8CFF8CF868FFCA68F8938C8D8CC3CA68F8938C8D8CC38DF88CFFFFB5F844 %9AFF8CF82068F82093BC2093CAFFFFCA68F88CFF8DF88CFD04FFB5F8938C %B568B5C469F8BCCA93F8B5FD10FFCA688DA1FFCA8D2093FFBC6820F82068 %A1FFBC44F8F8204493FFB5F88DFF93204494CA44FD05F88CCA44FD05F88C %93208CFFFF934444BCFFBC6820F82068CA9A8C93FD04FFB020FCCABC4493 %FD04FF8CFD05F868CA682093FF8CF868CAFD10FFB5CAFFFFFFBCB59AFFFF %CA93B593CAFFFFFFC38DB593C3FFFF9AB59AFFCAB593FFFFB58CB58DB58C %CAFFB58CB58DB58CCACAB59AFFFFFF93CAFFFFFFCA93B593CAFFFFC3FD05 %FFCAB5CAFFFFB59AFD04FFBC8DB58CB58DBCFFB68DCAFFCA8CBCFDFCFFFD %FCFFFDFCFFFDFCFFFDFCFFFDFCFFFDECFFFF %%EndData %%EndComments %%BeginProlog %%BeginResource: procset Adobe_level2_AI5 1.2 0 %%Title: (Adobe Illustrator (R) Version 5.0 Level 2 Emulation) %%Version: 1.2 0 %%CreationDate: (04/10/93) () %%Copyright: ((C) 1987-1996 Adobe Systems Incorporated All Rights Reserved) userdict /Adobe_level2_AI5 26 dict dup begin put /packedarray where not { userdict begin /packedarray { array astore readonly } bind def /setpacking /pop load def /currentpacking false def end 0 } if pop userdict /defaultpacking currentpacking put true setpacking /initialize { Adobe_level2_AI5 begin } bind def /terminate { currentdict Adobe_level2_AI5 eq { end } if } bind def mark /setcustomcolor where not { /findcmykcustomcolor { (AI8_CMYK_CustomColor) 6 packedarray } bind def /findrgbcustomcolor { (AI8_RGB_CustomColor) 5 packedarray } bind def /setcustomcolor { exch aload pop dup (AI8_CMYK_CustomColor) eq { pop pop 4 { 4 index mul 4 1 roll } repeat 5 -1 roll pop setcmykcolor } { dup (AI8_RGB_CustomColor) eq { pop pop 3 { 1 exch sub 3 index mul 1 exch sub 3 1 roll } repeat 4 -1 roll pop setrgbcolor } { pop 4 { 4 index mul 4 1 roll } repeat 5 -1 roll pop setcmykcolor } ifelse } ifelse } def } if /setAIseparationgray { false setoverprint 0 setgray /setseparationgray where{ pop setseparationgray }{ /setcolorspace where{ pop [/Separation (All) /DeviceCMYK {dup dup dup}] setcolorspace 1 exch sub setcolor }{ setgray }ifelse }ifelse } def /gt38? mark {version cvr cvx exec} stopped {cleartomark true} {38 gt exch pop} ifelse def userdict /deviceDPI 72 0 matrix defaultmatrix dtransform dup mul exch dup mul add sqrt put userdict /level2? systemdict /languagelevel known dup { pop systemdict /languagelevel get 2 ge } if put /level2ScreenFreq { begin 60 HalftoneType 1 eq { pop Frequency } if HalftoneType 2 eq { pop GrayFrequency } if HalftoneType 5 eq { pop Default level2ScreenFreq } if end } bind def userdict /currentScreenFreq level2? {currenthalftone level2ScreenFreq} {currentscreen pop pop} ifelse put level2? not { /setcmykcolor where not { /setcmykcolor { exch .11 mul add exch .59 mul add exch .3 mul add 1 exch sub setgray } def } if /currentcmykcolor where not { /currentcmykcolor { 0 0 0 1 currentgray sub } def } if /setoverprint where not { /setoverprint /pop load def } if /selectfont where not { /selectfont { exch findfont exch dup type /arraytype eq { makefont } { scalefont } ifelse setfont } bind def } if /cshow where not { /cshow { [ 0 0 5 -1 roll aload pop ] cvx bind forall } bind def } if } if cleartomark /anyColor? { add add add 0 ne } bind def /testColor { gsave setcmykcolor currentcmykcolor grestore } bind def /testCMYKColorThrough { testColor anyColor? } bind def userdict /composite? 1 0 0 0 testCMYKColorThrough 0 1 0 0 testCMYKColorThrough 0 0 1 0 testCMYKColorThrough 0 0 0 1 testCMYKColorThrough and and and put composite? not { userdict begin gsave /cyan? 1 0 0 0 testCMYKColorThrough def /magenta? 0 1 0 0 testCMYKColorThrough def /yellow? 0 0 1 0 testCMYKColorThrough def /black? 0 0 0 1 testCMYKColorThrough def grestore /isCMYKSep? cyan? magenta? yellow? black? or or or def /customColor? isCMYKSep? not def end } if end defaultpacking setpacking %%EndResource %%BeginResource: procset Adobe_typography_AI5 1.0 1 %%Title: (Typography Operators) %%Version: 1.0 1 %%CreationDate:(6/10/1996) () %%Copyright: ((C) 1987-1996 Adobe Systems Incorporated All Rights Reserved) currentpacking true setpacking userdict /Adobe_typography_AI5 68 dict dup begin put /initialize { begin begin Adobe_typography_AI5 begin Adobe_typography_AI5 { dup xcheck { bind } if pop pop } forall end end end Adobe_typography_AI5 begin } def /terminate { currentdict Adobe_typography_AI5 eq { end } if } def /modifyEncoding { /_tempEncode exch ddef /_pntr 0 ddef { counttomark -1 roll dup type dup /marktype eq { pop pop exit } { /nametype eq { _tempEncode /_pntr dup load dup 3 1 roll 1 add ddef 3 -1 roll put } { /_pntr exch ddef } ifelse } ifelse } loop _tempEncode } def /havefont { systemdict /languagelevel known { /Font resourcestatus dup { exch pop exch pop } if } { systemdict /FontDirectory get 1 index known { pop true } { systemdict /fileposition known { dup length 6 add exch Ss 6 250 getinterval cvs pop Ss exch 0 exch getinterval status { pop pop pop pop true } { false } ifelse } { pop false } ifelse } ifelse } ifelse } def /TE { StandardEncoding 256 array copy modifyEncoding /_nativeEncoding exch def } def /subststring { exch 2 index exch search { exch pop exch dup () eq { pop exch concatstring } { 3 -1 roll exch concatstring concatstring } ifelse exch pop true } { pop pop false } ifelse } def /concatstring { 1 index length 1 index length 1 index add string dup 0 5 index putinterval dup 2 index 4 index putinterval 4 1 roll pop pop pop } def % /TZ { dup type /arraytype eq { /_wv exch def } { /_wv 0 def } ifelse /_useNativeEncoding exch def 2 index havefont { 3 index 255 string cvs dup (_Symbol_) eq { pop 2 index findfont } { 1 index 0 eq { dup length 1 sub 1 exch getinterval cvn findfont } { pop 2 index findfont } ifelse } ifelse } { dup 1 eq { 2 index 64 string cvs dup (-90pv-RKSJ-) (-83pv-RKSJ-) subststring { exch pop dup havefont { findfont false } { pop true } ifelse } { pop dup (-90ms-RKSJ-) (-Ext-RKSJ-) subststring { exch pop dup havefont { findfont false } { pop true } ifelse } { pop pop true } ifelse } ifelse { 1 index 1 eq { /Ryumin-Light-Ext-RKSJ-V havefont {/Ryumin-Light-Ext-RKSJ-V} {/Courier} ifelse } { /Ryumin-Light-83pv-RKSJ-H havefont {/Ryumin-Light-83pv-RKSJ-H} {/Courier} ifelse } ifelse findfont [1 0 0.5 1 0 0] makefont } if } { /Courier findfont } ifelse } ifelse _wv type /arraytype eq { _wv makeblendedfont } if dup length 10 add dict begin mark exch { 1 index /FID ne { def } if cleartomark mark } forall pop /FontScript exch def /FontDirection exch def /FontRequest exch def /FontName exch def counttomark 0 eq { 1 _useNativeEncoding eq { /Encoding _nativeEncoding def } if cleartomark } { /Encoding load 256 array copy modifyEncoding /Encoding exch def } ifelse FontName currentdict end definefont pop } def /tr { _ax _ay 3 2 roll } def /trj { _cx _cy _sp _ax _ay 6 5 roll } def /a0 { /Tx { dup currentpoint 3 2 roll tr _psf newpath moveto tr _ctm _pss } ddef /Tj { dup currentpoint 3 2 roll trj _pjsf newpath moveto trj _ctm _pjss } ddef } def /a1 { W B } def /e0 { /Tx { tr _psf } ddef /Tj { trj _pjsf } ddef } def /e1 { W F } def /i0 { /Tx { tr sp } ddef /Tj { trj jsp } ddef } def /i1 { W N } def /o0 { /Tx { tr sw rmoveto } ddef /Tj { trj swj rmoveto } ddef } def /r0 { /Tx { tr _ctm _pss } ddef /Tj { trj _ctm _pjss } ddef } def /r1 { W S } def /To { pop _ctm currentmatrix pop } def /TO { iTe _ctm setmatrix newpath } def /Tp { pop _tm astore pop _ctm setmatrix _tDict begin /W { } def /h { } def } def /TP { end iTm 0 0 moveto } def /Tr { _render 3 le { currentpoint newpath moveto } if dup 8 eq { pop 0 } { dup 9 eq { pop 1 } if } ifelse dup /_render exch ddef _renderStart exch get load exec } def /iTm { _ctm setmatrix _tm concat _shift aload pop _lineorientation 1 eq { exch } if translate _scale aload pop _lineorientation 1 eq _yokoorientation 1 eq or { exch } if scale } def /Tm { _tm astore pop iTm 0 0 moveto } def /Td { _mtx translate _tm _tm concatmatrix pop iTm 0 0 moveto } def /iTe { _render -1 eq { } { _renderEnd _render get dup null ne { load exec } { pop } ifelse } ifelse /_render -1 ddef } def /Ta { pop } def /Tf { 1 index type /nametype eq { dup 0.75 mul 1 index 0.25 mul neg } if /_fontDescent exch ddef /_fontAscent exch ddef /_fontSize exch ddef /_fontRotateAdjust _fontAscent _fontDescent add 2 div neg ddef /_fontHeight _fontSize ddef findfont _fontSize scalefont setfont } def /Tl { pop neg 0 exch _leading astore pop } def /Tt { pop } def /TW { 3 npop } def /Tw { /_cx exch ddef } def /TC { 3 npop } def /Tc { /_ax exch ddef } def /Ts { 0 exch _shift astore pop currentpoint iTm moveto } def /Ti { 3 npop } def /Tz { count 1 eq { 100 } if 100 div exch 100 div exch _scale astore pop iTm } def /TA { pop } def /Tq { pop } def /Tg { pop } def /TG { pop } def /Tv { /_lineorientation exch ddef } def /TV { /_charorientation exch ddef } def /Ty { dup /_yokoorientation exch ddef 1 sub neg Tv } def /TY { pop } def /T~ { Tx } def /Th { pop pop pop pop pop } def /TX { pop } def /Tk { _fontSize mul 1000 div _lineorientation 0 eq { neg 0 } { 0 exch } ifelse rmoveto pop } def /TK { 2 npop } def /T* { _leading aload pop _lineorientation 0 ne { exch } if Td } def /T*- { _leading aload pop _lineorientation 0 ne { exch } if exch neg exch neg Td } def /T- { _ax neg 0 rmoveto _lineorientation 1 eq _charorientation 0 eq and { 1 TV _hyphen Tx 0 TV } { _hyphen Tx } ifelse } def /T+ { } def /TR { _ctm currentmatrix pop _tm astore pop iTm 0 0 moveto } def /TS { currentfont 3 1 roll /_Symbol_ findfont _fontSize scalefont setfont 0 eq { Tx } { Tj } ifelse setfont } def /Xb { pop pop } def /Tb /Xb load def /Xe { pop pop pop pop } def /Te /Xe load def /XB { } def /TB /XB load def currentdict readonly pop end setpacking % /X^ { currentfont 5 1 roll dup havefont { findfont _fontSize scalefont setfont } { pop exch } ifelse 2 index 0 eq { Tx } { Tj } ifelse pop pop setfont } def /T^ /X^ load def %%EndResource %%BeginProcSet: Adobe_ColorImage_AI6 1.3 0 userdict /Adobe_ColorImage_AI6 known not { userdict /Adobe_ColorImage_AI6 53 dict put } if userdict /Adobe_ColorImage_AI6 get begin /initialize { Adobe_ColorImage_AI6 begin Adobe_ColorImage_AI6 { dup type /arraytype eq { dup xcheck { bind } if } if pop pop } forall } def /terminate { end } def currentdict /Adobe_ColorImage_AI6_Vars known not { /Adobe_ColorImage_AI6_Vars 41 dict def } if Adobe_ColorImage_AI6_Vars begin /plateindex -1 def /_newproc null def /_proc1 null def /_proc2 null def /sourcearray 4 array def /_ptispace null def /_ptiname null def /_pti0 0 def /_pti1 0 def /_ptiproc null def /_ptiscale 0 def /_pticomps 0 def /_ptibuf 0 string def /_gtigray 0 def /_cticmyk null def /_rtirgb null def /XIEnable true def /XIType 0 def /XIEncoding 0 def /XICompression 0 def /XIChannelCount 0 def /XIBitsPerPixel 0 def /XIImageHeight 0 def /XIImageWidth 0 def /XIImageMatrix null def /XIRowBytes 0 def /XIFile null def /XIBuffer1 null def /XIBuffer2 null def /XIBuffer3 null def /XIDataProc null def /XIColorSpace /DeviceGray def /XIColorValues 0 def /XIPlateList false def end /ci6colorimage /colorimage where {/colorimage get}{null} ifelse def /ci6image systemdict /image get def /ci6curtransfer systemdict /currenttransfer get def /ci6curoverprint /currentoverprint where {/currentoverprint get}{{_of}} ifelse def /ci6foureq { 4 index ne { pop pop pop false }{ 4 index ne { pop pop false }{ 4 index ne { pop false }{ 4 index eq } ifelse } ifelse } ifelse } def /ci6testplate { Adobe_ColorImage_AI6_Vars begin /plateindex -1 def /setcmykcolor where { pop gsave 1 0 0 0 setcmykcolor systemdict /currentgray get exec 1 exch sub 0 1 0 0 setcmykcolor systemdict /currentgray get exec 1 exch sub 0 0 1 0 setcmykcolor systemdict /currentgray get exec 1 exch sub 0 0 0 1 setcmykcolor systemdict /currentgray get exec 1 exch sub grestore 1 0 0 0 ci6foureq { /plateindex 0 def }{ 0 1 0 0 ci6foureq { /plateindex 1 def }{ 0 0 1 0 ci6foureq { /plateindex 2 def }{ 0 0 0 1 ci6foureq { /plateindex 3 def }{ 0 0 0 0 ci6foureq { /plateindex 5 def } if } ifelse } ifelse } ifelse } ifelse pop pop pop pop } if plateindex end } def /ci6concatprocs { /packedarray where { pop dup type /packedarraytype eq 2 index type /packedarraytype eq or }{ false } ifelse { /_proc2 exch cvlit def /_proc1 exch cvlit def _proc1 aload pop _proc2 aload pop _proc1 length _proc2 length add packedarray cvx }{ /_proc2 exch cvlit def /_proc1 exch cvlit def /_newproc _proc1 length _proc2 length add array def _newproc 0 _proc1 putinterval _newproc _proc1 length _proc2 putinterval _newproc cvx } ifelse } def /ci6istint { type /arraytype eq } def /ci6isspot { dup type /arraytype eq { dup length 1 sub get /Separation eq }{ pop false } ifelse } def /ci6spotname { dup ci6isspot {dup length 2 sub get}{pop ()} ifelse } def /ci6altspace { aload pop pop pop ci6colormake } def /ci6numcomps { dup /DeviceGray eq { pop 1 }{ dup /DeviceRGB eq { pop 3 }{ /DeviceCMYK eq { 4 }{ 1 } ifelse } ifelse } ifelse } def /ci6marksplate { dup /DeviceGray eq { pop plateindex 3 eq }{ dup /DeviceRGB eq { pop plateindex 5 ne }{ dup /DeviceCMYK eq { pop plateindex 5 ne }{ dup ci6isspot { /findcmykcustomcolor where { pop dup length 2 sub get 0.1 0.1 0.1 0.1 5 -1 roll findcmykcustomcolor 1 setcustomcolor systemdict /currentgray get exec 1 ne }{ pop plateindex 5 ne } ifelse }{ pop plateindex 5 ne } ifelse } ifelse } ifelse } ifelse } def /ci6colormake { dup ci6numcomps exch 1 index 2 add 1 roll dup 1 eq {pop}{array astore} ifelse exch } def /ci6colorexpand { dup ci6spotname exch dup ci6istint { ci6altspace exch 4 1 roll }{ 1 3 1 roll } ifelse } def /ci6colortint { dup /DeviceGray eq { 3 1 roll 1 exch sub mul 1 exch sub exch }{ dup /DeviceRGB eq { 3 1 roll {1 exch sub 1 index mul 1 exch sub exch} forall pop 3 array astore exch }{ dup /DeviceCMYK eq { 3 1 roll {1 index mul exch} forall pop 4 array astore exch }{ 3 1 roll mul exch } ifelse } ifelse } ifelse } def /ci6colortocmyk { dup /DeviceGray eq { pop 1 exch sub 0 0 0 4 -1 roll 4 array astore }{ dup /DeviceRGB eq { pop aload pop _rgbtocmyk 4 array astore }{ dup /DeviceCMYK eq { pop }{ ci6altspace ci6colortint ci6colortocmyk } ifelse } ifelse } ifelse } def /ci6makeimagedict { 7 dict begin /ImageType 1 def /Decode exch def /DataSource exch def /ImageMatrix exch def /BitsPerComponent exch def /Height exch def /Width exch def currentdict end } def /ci6stringinvert { 0 1 2 index length 1 sub { dup 2 index exch get 255 exch sub 2 index 3 1 roll put } for } def /ci6stringknockout { 0 1 2 index length 1 sub { 255 2 index 3 1 roll put } for } def /ci6stringapply { 0 1 4 index length 1 sub { dup 4 index exch get 3 index 3 1 roll 3 index exec } for pop exch pop } def /ci6walkrgbstring { 0 3 index dup length 1 sub 0 3 3 -1 roll { 3 getinterval {} forall 5 index exec 3 index } for 5 {pop} repeat } def /ci6walkcmykstring { 0 3 index dup length 1 sub 0 4 3 -1 roll { 4 getinterval {} forall 6 index exec 3 index } for 5 { pop } repeat } def /ci6putrgbtograystr { .11 mul exch .59 mul add exch .3 mul add cvi 3 copy put pop 1 add } def /ci6putcmyktograystr { exch .11 mul add exch .59 mul add exch .3 mul add dup 255 gt { pop 255 } if 255 exch sub cvi 3 copy put pop 1 add } def /ci6rgbtograyproc { Adobe_ColorImage_AI6_Vars begin sourcearray 0 get exec XIBuffer3 dup 3 1 roll /ci6putrgbtograystr load exch ci6walkrgbstring end } def /ci6cmyktograyproc { Adobe_ColorImage_AI6_Vars begin sourcearray 0 get exec XIBuffer3 dup 3 1 roll /ci6putcmyktograystr load exch ci6walkcmykstring end } def /ci6separatecmykproc { Adobe_ColorImage_AI6_Vars begin sourcearray 0 get exec XIBuffer3 0 2 index plateindex 4 2 index length 1 sub { get 255 exch sub 3 copy put pop 1 add 2 index } for pop pop exch pop end } def /ci6compositeimage { dup 1 eq { pop pop image }{ /ci6colorimage load null ne { ci6colorimage }{ 3 1 roll pop sourcearray 0 3 -1 roll put 3 eq {/ci6rgbtograyproc}{/ci6cmyktograyproc} ifelse load image } ifelse } ifelse } def /ci6knockoutimage { gsave 0 ci6curtransfer exec 1 ci6curtransfer exec eq { 0 ci6curtransfer exec 0.5 lt }{ 0 ci6curtransfer exec 1 ci6curtransfer exec gt } ifelse {{pop 0}}{{pop 1}} ifelse systemdict /settransfer get exec ci6compositeimage grestore } def /ci6drawimage { ci6testplate -1 eq { pop ci6compositeimage }{ dup type /arraytype eq { dup length plateindex gt {plateindex get}{pop false} ifelse }{ { true }{ dup 1 eq {plateindex 3 eq}{plateindex 3 le} ifelse } ifelse } ifelse { dup 1 eq { pop pop ci6image }{ dup 3 eq { ci6compositeimage }{ pop pop sourcearray 0 3 -1 roll put /ci6separatecmykproc load ci6image } ifelse } ifelse }{ ci6curoverprint { 7 {pop} repeat }{ ci6knockoutimage } ifelse } ifelse } ifelse } def /ci6proctintimage { /_ptispace exch store /_ptiname exch store /_pti1 exch store /_pti0 exch store /_ptiproc exch store /_pticomps _ptispace ci6numcomps store /_ptiscale _pti1 _pti0 sub store level2? { _ptiname length 0 gt version cvr 2012 ge and { [/Separation _ptiname _ptispace {_ptiproc}] setcolorspace [_pti0 _pti1] ci6makeimagedict ci6image }{ [/Indexed _ptispace 255 {255 div _ptiscale mul _pti0 add _ptiproc}] setcolorspace [0 255] ci6makeimagedict ci6image } ifelse }{ _pticomps 1 eq { { dup { 255 div _ptiscale mul _pti0 add _ptiproc 255 mul cvi put } ci6stringapply } ci6concatprocs ci6image }{ { dup length _pticomps mul dup _ptibuf length ne {/_ptibuf exch string store}{pop} ifelse _ptibuf { exch _pticomps mul exch 255 div _ptiscale mul _pti0 add _ptiproc _pticomps 2 add -2 roll _pticomps 1 sub -1 0 { 1 index add 2 index exch 5 -1 roll 255 mul cvi put } for pop pop } ci6stringapply } ci6concatprocs false _pticomps /ci6colorimage load null eq {7 {pop} repeat}{ci6colorimage} ifelse } ifelse } ifelse } def /ci6graytintimage { /_gtigray 5 -1 roll store {1 _gtigray sub mul 1 exch sub} 4 1 roll /DeviceGray ci6proctintimage } def /ci6cmyktintimage { /_cticmyk 5 -1 roll store {_cticmyk {1 index mul exch} forall pop} 4 1 roll /DeviceCMYK ci6proctintimage } def /ci6rgbtintimage { /_rtirgb 5 -1 roll store {_rtirgb {1 exch sub 1 index mul 1 exch sub exch} forall pop} 4 1 roll /DeviceRGB ci6proctintimage } def /ci6tintimage { ci6testplate -1 eq { ci6colorexpand 3 -1 roll 5 -1 roll {0}{0 exch} ifelse 4 2 roll dup /DeviceGray eq { pop ci6graytintimage }{ dup /DeviceRGB eq { pop ci6rgbtintimage }{ pop ci6cmyktintimage } ifelse } ifelse }{ dup ci6marksplate { plateindex 5 lt { ci6colortocmyk plateindex get dup 0 eq ci6curoverprint and { 7 {pop} repeat }{ 1 exch sub exch {1 0}{0 1} ifelse () ci6graytintimage } ifelse }{ pop exch {0}{0 exch} ifelse 0 3 1 roll () ci6graytintimage } ifelse }{ ci6curoverprint { 8 {pop} repeat }{ pop pop pop {pop 1} 0 1 () /DeviceGray ci6proctintimage } ifelse } ifelse } ifelse } def /XINullImage { } def /XIImageMask { XIImageWidth XIImageHeight false [XIImageWidth 0 0 XIImageHeight neg 0 0] /XIDataProc load imagemask } def /XIImageTint { XIImageWidth XIImageHeight XIBitsPerPixel [XIImageWidth 0 0 XIImageHeight neg 0 0] /XIDataProc load XIType 3 eq XIColorValues XIColorSpace ci6tintimage } def /XIImage { XIImageWidth XIImageHeight XIBitsPerPixel [XIImageWidth 0 0 XIImageHeight neg 0 0] /XIDataProc load false XIChannelCount XIPlateList ci6drawimage } def /XG { pop pop } def /XF { 13 {pop} repeat } def /Xh { Adobe_ColorImage_AI6_Vars begin gsave /XIType exch def /XIImageHeight exch def /XIImageWidth exch def /XIImageMatrix exch def 0 0 moveto XIImageMatrix concat XIImageWidth XIImageHeight scale /_lp /null ddef _fc /_lp /imagemask ddef end } def /XH { Adobe_ColorImage_AI6_Vars begin grestore end } def /XIEnable { Adobe_ColorImage_AI6_Vars /XIEnable 3 -1 roll put } def /XC { Adobe_ColorImage_AI6_Vars begin ci6colormake /XIColorSpace exch def /XIColorValues exch def end } def /XIPlates { Adobe_ColorImage_AI6_Vars begin /XIPlateList exch def end } def /XI { Adobe_ColorImage_AI6_Vars begin gsave /XIType exch def cvi dup 256 idiv /XICompression exch store 256 mod /XIEncoding exch store pop pop /XIChannelCount exch def /XIBitsPerPixel exch def /XIImageHeight exch def /XIImageWidth exch def pop pop pop pop /XIImageMatrix exch def XIBitsPerPixel 1 eq { XIImageWidth 8 div ceiling cvi }{ XIImageWidth XIChannelCount mul } ifelse /XIRowBytes exch def XIEnable { /XIBuffer3 XIImageWidth string def XICompression 0 eq { /XIBuffer1 XIRowBytes string def XIEncoding 0 eq { {currentfile XIBuffer1 readhexstring pop} }{ {currentfile XIBuffer1 readstring pop} } ifelse }{ /XIBuffer1 256 string def /XIBuffer2 XIRowBytes string def {currentfile XIBuffer1 readline pop (%) anchorsearch {pop} if} /ASCII85Decode filter /DCTDecode filter /XIFile exch def {XIFile XIBuffer2 readstring pop} } ifelse /XIDataProc exch def XIType 1 ne { 0 setgray } if XIType 1 eq { XIImageMask }{ XIType 2 eq XIType 3 eq or { XIImageTint }{ XIImage } ifelse } ifelse }{ XINullImage } ifelse /XIPlateList false def grestore end } def end %%EndProcSet %%BeginResource: procset Adobe_Illustrator_AI5 1.3 0 %%Title: (Adobe Illustrator (R) Version 8.0 Full Prolog) %%Version: 1.3 0 %%CreationDate: (3/7/1994) () %%Copyright: ((C) 1987-1998 Adobe Systems Incorporated All Rights Reserved) currentpacking true setpacking userdict /Adobe_Illustrator_AI5_vars 112 dict dup begin put /_?cmyk false def /_eo false def /_lp /none def /_pf { } def /_ps { } def /_psf { } def /_pss { } def /_pjsf { } def /_pjss { } def /_pola 0 def /_doClip 0 def /cf currentflat def /_lineorientation 0 def /_charorientation 0 def /_yokoorientation 0 def /_tm matrix def /_renderStart [ /e0 /r0 /a0 /o0 /e1 /r1 /a1 /i0 ] def /_renderEnd [ null null null null /i1 /i1 /i1 /i1 ] def /_render -1 def /_shift [0 0] def /_ax 0 def /_ay 0 def /_cx 0 def /_cy 0 def /_leading [ 0 0 ] def /_ctm matrix def /_mtx matrix def /_sp 16#020 def /_hyphen (-) def /_fontSize 0 def /_fontAscent 0 def /_fontDescent 0 def /_fontHeight 0 def /_fontRotateAdjust 0 def /Ss 256 string def Ss 0 (fonts/) putinterval /_cnt 0 def /_scale [1 1] def /_nativeEncoding 0 def /_useNativeEncoding 0 def /_tempEncode 0 def /_pntr 0 def /_tDict 2 dict def /_hfname 100 string def /_hffound false def /Tx { } def /Tj { } def /CRender { } def /_AI3_savepage { } def /_gf null def /_cf 4 array def /_rgbf 3 array def /_if null def /_of false def /_fc { } def /_gs null def /_cs 4 array def /_rgbs 3 array def /_is null def /_os false def /_sc { } def /_pd 1 dict def /_ed 15 dict def /_pm matrix def /_fm null def /_fd null def /_fdd null def /_sm null def /_sd null def /_sdd null def /_i null def /_lobyte 0 def /_hibyte 0 def /_cproc null def /_cscript 0 def /_hvax 0 def /_hvay 0 def /_hvwb 0 def /_hvcx 0 def /_hvcy 0 def /_bitfont null def /_bitlobyte 0 def /_bithibyte 0 def /_bitkey null def /_bitdata null def /_bitindex 0 def /discardSave null def /buffer 256 string def /beginString null def /endString null def /endStringLength null def /layerCnt 1 def /layerCount 1 def /perCent (%) 0 get def /perCentSeen? false def /newBuff null def /newBuffButFirst null def /newBuffLast null def /clipForward? false def end userdict /Adobe_Illustrator_AI5 known not { userdict /Adobe_Illustrator_AI5 100 dict put } if userdict /Adobe_Illustrator_AI5 get begin /initialize { Adobe_Illustrator_AI5 dup begin Adobe_Illustrator_AI5_vars begin /_aicmykps where {pop /_?cmyk _aicmykps def}if discardDict { bind pop pop } forall dup /nc get begin { dup xcheck 1 index type /operatortype ne and { bind } if pop pop } forall end newpath } def /terminate { end end } def /_ null def /ddef { Adobe_Illustrator_AI5_vars 3 1 roll put } def /xput { dup load dup length exch maxlength eq { dup dup load dup length 2 mul dict copy def } if load begin def end } def /npop { { pop } repeat } def /hswj { dup stringwidth 3 2 roll { _hvwb eq { exch _hvcx add exch _hvcy add } if exch _hvax add exch _hvay add } cforall } def /vswj { 0 0 3 -1 roll { dup 255 le _charorientation 1 eq and { dup cstring stringwidth 5 2 roll _hvwb eq { exch _hvcy sub exch _hvcx sub } if exch _hvay sub exch _hvax sub 4 -1 roll sub exch 3 -1 roll sub exch } { _hvwb eq { exch _hvcy sub exch _hvcx sub } if exch _hvay sub exch _hvax sub _fontHeight sub } ifelse } cforall } def /swj { 6 1 roll /_hvay exch ddef /_hvax exch ddef /_hvwb exch ddef /_hvcy exch ddef /_hvcx exch ddef _lineorientation 0 eq { hswj } { vswj } ifelse } def /sw { 0 0 0 6 3 roll swj } def /vjss { 4 1 roll { dup cstring dup length 1 eq _charorientation 1 eq and { -90 rotate currentpoint _fontRotateAdjust add moveto gsave false charpath currentpoint 5 index setmatrix stroke grestore _fontRotateAdjust sub moveto _sp eq { 5 index 5 index rmoveto } if 2 copy rmoveto 90 rotate } { currentpoint _fontHeight sub 5 index sub 3 index _sp eq { 9 index sub } if currentpoint exch 4 index stringwidth pop 2 div sub exch _fontAscent sub moveto gsave 2 index false charpath 6 index setmatrix stroke grestore moveto pop pop } ifelse } cforall 6 npop } def /hjss { 4 1 roll { dup cstring gsave false charpath currentpoint 5 index setmatrix stroke grestore moveto _sp eq { 5 index 5 index rmoveto } if 2 copy rmoveto } cforall 6 npop } def /jss { _lineorientation 0 eq { hjss } { vjss } ifelse } def /ss { 0 0 0 7 3 roll jss } def /vjsp { 4 1 roll { dup cstring dup length 1 eq _charorientation 1 eq and { -90 rotate currentpoint _fontRotateAdjust add moveto false charpath currentpoint _fontRotateAdjust sub moveto _sp eq { 5 index 5 index rmoveto } if 2 copy rmoveto 90 rotate } { currentpoint _fontHeight sub 5 index sub 3 index _sp eq { 9 index sub } if currentpoint exch 4 index stringwidth pop 2 div sub exch _fontAscent sub moveto 2 index false charpath moveto pop pop } ifelse } cforall 6 npop } def /hjsp { 4 1 roll { dup cstring false charpath _sp eq { 5 index 5 index rmoveto } if 2 copy rmoveto } cforall 6 npop } def /jsp { matrix currentmatrix _lineorientation 0 eq {hjsp} {vjsp} ifelse } def /sp { matrix currentmatrix 0 0 0 7 3 roll _lineorientation 0 eq {hjsp} {vjsp} ifelse } def /pl { transform 0.25 sub round 0.25 add exch 0.25 sub round 0.25 add exch itransform } def /setstrokeadjust where { pop true setstrokeadjust /c { curveto } def /C /c load def /v { currentpoint 6 2 roll curveto } def /V /v load def /y { 2 copy curveto } def /Y /y load def /l { lineto } def /L /l load def /m { moveto } def } { /c { pl curveto } def /C /c load def /v { currentpoint 6 2 roll pl curveto } def /V /v load def /y { pl 2 copy curveto } def /Y /y load def /l { pl lineto } def /L /l load def /m { pl moveto } def } ifelse /d { setdash } def /cf { } def /i { dup 0 eq { pop cf } if setflat } def /j { setlinejoin } def /J { setlinecap } def /M { setmiterlimit } def /w { setlinewidth } def /XR { 0 ne /_eo exch ddef } def /H { } def /h { closepath } def /N { _pola 0 eq { _doClip 1 eq { _eo {eoclip} {clip} ifelse /_doClip 0 ddef } if newpath } { /CRender { N } ddef } ifelse } def /n { N } def /F { _pola 0 eq { _doClip 1 eq { gsave _pf grestore _eo {eoclip} {clip} ifelse newpath /_lp /none ddef _fc /_doClip 0 ddef } { _pf } ifelse } { /CRender { F } ddef } ifelse } def /f { closepath F } def /S { _pola 0 eq { _doClip 1 eq { gsave _ps grestore _eo {eoclip} {clip} ifelse newpath /_lp /none ddef _sc /_doClip 0 ddef } { _ps } ifelse } { /CRender { S } ddef } ifelse } def /s { closepath S } def /B { _pola 0 eq { _doClip 1 eq gsave F grestore { gsave S grestore _eo {eoclip} {clip} ifelse newpath /_lp /none ddef _sc /_doClip 0 ddef } { S } ifelse } { /CRender { B } ddef } ifelse } def /b { closepath B } def /W { /_doClip 1 ddef } def /* { count 0 ne { dup type /stringtype eq { pop } if } if newpath } def /u { } def /U { } def /q { _pola 0 eq { gsave } if } def /Q { _pola 0 eq { grestore } if } def /*u { _pola 1 add /_pola exch ddef } def /*U { _pola 1 sub /_pola exch ddef _pola 0 eq { CRender } if } def /D { pop } def /*w { } def /*W { } def /` { /_i save ddef clipForward? { nulldevice } if 6 1 roll 4 npop concat pop userdict begin /showpage { } def 0 setgray 0 setlinecap 1 setlinewidth 0 setlinejoin 10 setmiterlimit [] 0 setdash /setstrokeadjust where {pop false setstrokeadjust} if newpath 0 setgray false setoverprint } def /~ { end _i restore } def /_rgbtocmyk { 3 { 1 exch sub 3 1 roll } repeat 3 copy 1 4 1 roll 3 { 3 index 2 copy gt { exch } if pop 4 1 roll } repeat pop pop pop 4 1 roll 3 { 3 index sub 3 1 roll } repeat 4 -1 roll } def /setrgbfill { _rgbf astore pop /_fc { _lp /fill ne { _of setoverprint _rgbf aload pop setrgbcolor /_lp /fill ddef } if } ddef /_pf { _fc _eo {eofill} {fill} ifelse } ddef /_psf { _fc hvashow } ddef /_pjsf { _fc hvawidthshow } ddef /_lp /none ddef } def /setrgbstroke { _rgbs astore pop /_sc { _lp /stroke ne { _os setoverprint _rgbs aload pop setrgbcolor /_lp /stroke ddef } if } ddef /_ps { _sc stroke } ddef /_pss { _sc ss } ddef /_pjss { _sc jss } ddef /_lp /none ddef } def /O { 0 ne /_of exch ddef /_lp /none ddef } def /R { 0 ne /_os exch ddef /_lp /none ddef } def /g { /_gf exch ddef /_fc { _lp /fill ne { _of setoverprint _gf setgray /_lp /fill ddef } if } ddef /_pf { _fc _eo {eofill} {fill} ifelse } ddef /_psf { _fc hvashow } ddef /_pjsf { _fc hvawidthshow } ddef /_lp /none ddef } def /G { /_gs exch ddef /_sc { _lp /stroke ne { _os setoverprint _gs setgray /_lp /stroke ddef } if } ddef /_ps { _sc stroke } ddef /_pss { _sc ss } ddef /_pjss { _sc jss } ddef /_lp /none ddef } def /k { _cf astore pop /_fc { _lp /fill ne { _of setoverprint _cf aload pop setcmykcolor /_lp /fill ddef } if } ddef /_pf { _fc _eo {eofill} {fill} ifelse } ddef /_psf { _fc hvashow } ddef /_pjsf { _fc hvawidthshow } ddef /_lp /none ddef } def /K { _cs astore pop /_sc { _lp /stroke ne { _os setoverprint _cs aload pop setcmykcolor /_lp /stroke ddef } if } ddef /_ps { _sc stroke } ddef /_pss { _sc ss } ddef /_pjss { _sc jss } ddef /_lp /none ddef } def /Xa { _?cmyk { 3 npop k }{ setrgbfill 4 npop } ifelse } def /XA { _?cmyk { 3 npop K }{ setrgbstroke 4 npop } ifelse } def /Xs { /_gf exch ddef 5 npop /_fc { _lp /fill ne { _of setoverprint _gf setAIseparationgray /_lp /fill ddef } if } ddef /_pf { _fc _eo {eofill} {fill} ifelse } ddef /_psf { _fc hvashow } ddef /_pjsf { _fc hvawidthshow } ddef /_lp /none ddef } def /XS { /_gs exch ddef 5 npop /_sc { _lp /stroke ne { _os setoverprint _gs setAIseparationgray /_lp /stroke ddef } if } ddef /_ps { _sc stroke } ddef /_pss { _sc ss } ddef /_pjss { _sc jss } ddef /_lp /none ddef } def /Xx { exch /_gf exch ddef 0 eq { findcmykcustomcolor }{ _?cmyk {true}{/findrgbcustomcolor where{pop false}{true}ifelse}ifelse { 4 1 roll 3 npop findcmykcustomcolor }{ 8 -4 roll 4 npop findrgbcustomcolor } ifelse } ifelse /_if exch ddef /_fc { _lp /fill ne { _of setoverprint _if _gf 1 exch sub setcustomcolor /_lp /fill ddef } if } ddef /_pf { _fc _eo {eofill} {fill} ifelse } ddef /_psf { _fc hvashow } ddef /_pjsf { _fc hvawidthshow } ddef /_lp /none ddef } def /XX { exch /_gs exch ddef 0 eq { findcmykcustomcolor }{ _?cmyk {true}{/findrgbcustomcolor where{pop false}{true}ifelse}ifelse { 4 1 roll 3 npop findcmykcustomcolor }{ 8 -4 roll 4 npop findrgbcustomcolor } ifelse } ifelse /_is exch ddef /_sc { _lp /stroke ne { _os setoverprint _is _gs 1 exch sub setcustomcolor /_lp /stroke ddef } if } ddef /_ps { _sc stroke } ddef /_pss { _sc ss } ddef /_pjss { _sc jss } ddef /_lp /none ddef } def /x { /_gf exch ddef findcmykcustomcolor /_if exch ddef /_fc { _lp /fill ne { _of setoverprint _if _gf 1 exch sub setcustomcolor /_lp /fill ddef } if } ddef /_pf { _fc _eo {eofill} {fill} ifelse } ddef /_psf { _fc hvashow } ddef /_pjsf { _fc hvawidthshow } ddef /_lp /none ddef } def /X { /_gs exch ddef findcmykcustomcolor /_is exch ddef /_sc { _lp /stroke ne { _os setoverprint _is _gs 1 exch sub setcustomcolor /_lp /stroke ddef } if } ddef /_ps { _sc stroke } ddef /_pss { _sc ss } ddef /_pjss { _sc jss } ddef /_lp /none ddef } def /XK { 3 -1 roll pop 0 eq { 1 exch sub 3 {dup 3 1 roll mul 5 1 roll} repeat mul 4 1 roll K } { 1 exch sub 4 1 roll 3 {1 exch sub 3 index mul 1 exch sub 3 1 roll} repeat 4 -1 roll pop XA } ifelse } def /Xk { 3 -1 roll pop 0 eq { 1 exch sub 3 {dup 3 1 roll mul 5 1 roll} repeat mul 4 1 roll k } { 1 exch sub 4 1 roll 3 {1 exch sub 3 index mul 1 exch sub 3 1 roll} repeat 4 -1 roll pop Xa } ifelse } def /A { pop } def /annotatepage { userdict /annotatepage 2 copy known {get exec} {pop pop} ifelse } def /XT { pop pop } def /Xt { pop } def /discard { save /discardSave exch store discardDict begin /endString exch store gt38? { 2 add } if load stopped pop end discardSave restore } bind def userdict /discardDict 7 dict dup begin put /pre38Initialize { /endStringLength endString length store /newBuff buffer 0 endStringLength getinterval store /newBuffButFirst newBuff 1 endStringLength 1 sub getinterval store /newBuffLast newBuff endStringLength 1 sub 1 getinterval store } def /shiftBuffer { newBuff 0 newBuffButFirst putinterval newBuffLast 0 currentfile read not { stop } if put } def 0 { pre38Initialize mark currentfile newBuff readstring exch pop { { newBuff endString eq { cleartomark stop } if shiftBuffer } loop } { stop } ifelse } def 1 { pre38Initialize /beginString exch store mark currentfile newBuff readstring exch pop { { newBuff beginString eq { /layerCount dup load 1 add store } { newBuff endString eq { /layerCount dup load 1 sub store layerCount 0 eq { cleartomark stop } if } if } ifelse shiftBuffer } loop } if } def 2 { mark { currentfile buffer {readline} stopped { % assume error was due to overfilling the buffer }{ not { stop } if endString eq { cleartomark stop } if }ifelse } loop } def 3 { /beginString exch store /layerCnt 1 store mark { currentfile buffer {readline} stopped { % assume error was due to overfilling the buffer }{ not { stop } if dup beginString eq { pop /layerCnt dup load 1 add store } { endString eq { layerCnt 1 eq { cleartomark stop } { /layerCnt dup load 1 sub store } ifelse } if } ifelse }ifelse } loop } def end userdict /clipRenderOff 15 dict dup begin put { /n /N /s /S /f /F /b /B } { { _doClip 1 eq { /_doClip 0 ddef _eo {eoclip} {clip} ifelse } if newpath } def } forall /Tr /pop load def /Bb {} def /BB /pop load def /Bg {12 npop} def /Bm {6 npop} def /Bc /Bm load def /Bh {4 npop} def end /Lb { 6 npop 7 2 roll 5 npop 0 eq { 0 eq { (%AI5_BeginLayer) 1 (%AI5_EndLayer--) discard } { /clipForward? true def /Tx /pop load def /Tj /pop load def currentdict end clipRenderOff begin begin } ifelse } { 0 eq { save /discardSave exch store } if } ifelse } bind def /LB { discardSave dup null ne { restore } { pop clipForward? { currentdict end end begin /clipForward? false ddef } if } ifelse } bind def /Pb { pop pop 0 (%AI5_EndPalette) discard } bind def /Np { 0 (%AI5_End_NonPrinting--) discard } bind def /Ln /pop load def /Ap /pop load def /Ar { 72 exch div 0 dtransform dup mul exch dup mul add sqrt dup 1 lt { pop 1 } if setflat } def /Mb { q } def /Md { } def /MB { Q } def /nc 4 dict def nc begin /setgray { pop } bind def /setcmykcolor { 4 npop } bind def /setrgbcolor { 3 npop } bind def /setcustomcolor { 2 npop } bind def currentdict readonly pop end /XP { 4 npop } bind def /XD { pop } bind def end setpacking %%EndResource %%BeginResource: procset Adobe_cshow 2.0 8 %%Title: (Writing System Operators) %%Version: 2.0 8 %%CreationDate: (1/23/89) () %%Copyright: ((C) 1992-1996 Adobe Systems Incorporated All Rights Reserved) currentpacking true setpacking userdict /Adobe_cshow 14 dict dup begin put /initialize { Adobe_cshow begin Adobe_cshow { dup xcheck { bind } if pop pop } forall end Adobe_cshow begin } def /terminate { currentdict Adobe_cshow eq { end } if } def /cforall { /_lobyte 0 ddef /_hibyte 0 ddef /_cproc exch ddef /_cscript currentfont /FontScript known { currentfont /FontScript get } { -1 } ifelse ddef { /_lobyte exch ddef _hibyte 0 eq _cscript 1 eq _lobyte 129 ge _lobyte 159 le and _lobyte 224 ge _lobyte 252 le and or and _cscript 2 eq _lobyte 161 ge _lobyte 254 le and and _cscript 3 eq _lobyte 161 ge _lobyte 254 le and and _cscript 25 eq _lobyte 161 ge _lobyte 254 le and and _cscript -1 eq or or or or and { /_hibyte _lobyte ddef } { _hibyte 256 mul _lobyte add _cproc /_hibyte 0 ddef } ifelse } forall } def /cstring { dup 256 lt { (s) dup 0 4 3 roll put } { dup 256 idiv exch 256 mod (hl) dup dup 0 6 5 roll put 1 4 3 roll put } ifelse } def /clength { 0 exch { 256 lt { 1 } { 2 } ifelse add } cforall } def /hawidthshow { { dup cstring show _hvax _hvay rmoveto _hvwb eq { _hvcx _hvcy rmoveto } if } cforall } def /vawidthshow { { dup 255 le _charorientation 1 eq and { -90 rotate 0 _fontRotateAdjust rmoveto cstring _hvcx _hvcy _hvwb _hvax _hvay 6 -1 roll awidthshow 0 _fontRotateAdjust neg rmoveto 90 rotate } { currentpoint _fontHeight sub exch _hvay sub exch _hvax sub 2 index _hvwb eq { exch _hvcy sub exch _hvcx sub } if 3 2 roll cstring dup stringwidth pop 2 div neg _fontAscent neg rmoveto show moveto } ifelse } cforall } def /hvawidthshow { 6 1 roll /_hvay exch ddef /_hvax exch ddef /_hvwb exch ddef /_hvcy exch ddef /_hvcx exch ddef _lineorientation 0 eq { hawidthshow } { vawidthshow } ifelse } def /hvwidthshow { 0 0 3 -1 roll hvawidthshow } def /hvashow { 0 0 0 6 -3 roll hvawidthshow } def /hvshow { 0 0 0 0 0 6 -1 roll hvawidthshow } def currentdict readonly pop end setpacking %%EndResource %%BeginResource: procset Adobe_shading_AI8 1.0 0 %%Title: (Adobe Illustrator 8 Shading Procset) %%Version: 1.0 0 %%CreationDate: (12/17/97) () %%Copyright: ((C) 1987-1997 Adobe Systems Incorporated All Rights Reserved) userdict /defaultpacking currentpacking put true setpacking userdict /Adobe_shading_AI8 10 dict dup begin put /initialize { Adobe_shading_AI8 begin Adobe_shading_AI8 bdprocs Mesh /initialize get exec } def /terminate { currentdict Adobe_shading_AI8 eq { end } if } def /bdprocs { { dup xcheck 1 index type /arraytype eq and { bind } if pop pop } forall } def /X! {pop} def /X# {pop pop} def /Mesh 40 dict def Mesh begin /initialize { Mesh bdprocs Mesh begin /emulate? /AI8MeshEmulation where { pop AI8MeshEmulation }{ systemdict /shfill known not } ifelse def end } def /bd { shadingdict begin } def /paint { emulate? { end }{ /_lp /none ddef _fc /_lp /none ddef /AIColorSpace AIColorSpace tocolorspace store /ColorSpace AIColorSpace topsspace store version_ge_3010.106 not systemdict /setsmoothness known and { 0.0001 setsmoothness } if composite? { /DataSource getdatasrc def Matrix concat currentdict end shfill }{ AIColorSpace makesmarks AIPlateList markingplate and not isoverprint and { end }{ /ColorSpace /DeviceGray store /Decode [0 1 0 1 0 1] store /DataSource getplatesrc def Matrix concat currentdict end shfill } ifelse } ifelse } ifelse } def /shadingdict 12 dict def shadingdict begin /ShadingType 6 def /BitsPerCoordinate 16 def /BitsPerComponent 8 def /BitsPerFlag 8 def end /datafile null def /databuf 256 string def /dataptr 0 def /srcspace null def /srcchannels 0 def /dstchannels 0 def /dstplate 0 def /srctodstcolor null def /getplatesrc { /srcspace AIColorSpace store /srcchannels AIColorSpace getnchannels store /dstchannels 1 store /dstplate getplateindex store /srctodstcolor srcspace makesmarks { dstplate 4 eq { {1 exch sub} }{ {srcspace tocmyk 3 dstplate sub index 1 exch sub 5 1 roll 4 {pop} repeat} } ifelse }{ {srcchannels {pop} repeat 1} } ifelse store /datafile getdatasrc store /rdpatch168 load DataLength () /SubFileDecode filter } def /getdatasrc { /rdcmntline load /ASCII85Decode filter } def /rdpatch168 { /dataptr 0 store 49 rdcount 4 { dup {pop srcchannels getint8} if dup {pop srctodstcolor dstchannels putint8 true} if } repeat {databuf 0 dataptr getinterval}{()} ifelse } def /rdpatch3216 { /dataptr 0 store 97 rdcount 4 { dup {pop srcchannels getint16} if dup {pop srctodstcolor dstchannels putint16 true} if } repeat {databuf 0 dataptr getinterval}{()} ifelse } def /rdcount { dup 0 gt { datafile databuf dataptr 4 -1 roll getinterval readstring exch length dataptr add /dataptr exch store }{ true } ifelse } def /getint8 { mark true 3 -1 roll { dup {pop datafile read} if dup {pop 255 div true} if } repeat { counttomark 1 add -1 roll pop true }{ cleartomark false } ifelse } def /putint8 { dup dataptr add /dataptr exch store dataptr exch { 1 sub exch 255 mul cvi databuf 2 index 3 -1 roll put } repeat pop } def /getint16 { mark true 3 -1 roll { dup {pop datafile read} if dup {pop 256 mul datafile read} if dup {pop add 65535 div true} if } repeat { counttomark 1 add -1 roll pop true }{ cleartomark false } ifelse } def /putint16 { dup 2 mul dataptr add /dataptr exch store dataptr exch { 2 sub exch 65535 mul cvi dup 256 idiv databuf 3 index 3 -1 roll put 256 mod databuf 2 index 1 add 3 -1 roll put } repeat pop } def /srcbuf 256 string def /rdcmntline { currentfile srcbuf readline pop (%) anchorsearch {pop} if } def /getplateindex { 0 [cyan? magenta? yellow? black? customColor?] {{exit} if 1 add} forall } def /aicsarray 4 array def /aicsaltvals 4 array def /aicsaltcolr aicsaltvals def /tocolorspace { dup type /arraytype eq { mark exch aload pop aicsarray 0 3 -1 roll put aicsarray 1 3 -1 roll put dup aicsarray 2 3 -1 roll put gettintxform aicsarray 3 3 -1 roll put counttomark aicsaltvals 0 3 -1 roll getinterval /aicsaltcolr exch store aicsaltcolr astore pop pop aicsarray } if } def /subtintxform {aicsaltcolr {1 index mul exch} forall pop} def /addtintxform {aicsaltcolr {1 sub 1 index mul 1 add exch} forall pop} def /gettintxform { /DeviceRGB eq {/addtintxform}{/subtintxform} ifelse load } def /getnchannels { dup type /arraytype eq {0 get} if colorspacedict exch get begin Channels end } def /makesmarks { composite? { pop true }{ dup dup type /arraytype eq {0 get} if colorspacedict exch get begin MarksPlate end } ifelse } def /markingplate { composite? { pop true }{ dup type /arraytype eq { dup length getplateindex gt {getplateindex get}{pop false} ifelse } if } ifelse } def /tocmyk { dup dup type /arraytype eq {0 get} if colorspacedict exch get begin ToCMYK end } def /topsspace { dup dup type /arraytype eq {0 get} if colorspacedict exch get begin ToPSSpace end } def /colorspacedict 5 dict dup begin /DeviceGray 4 dict dup begin /Channels 1 def /MarksPlate {pop black?} def /ToCMYK {pop 1 exch sub 0 0 0 4 -1 roll} def /ToPSSpace {} def end def /DeviceRGB 4 dict dup begin /Channels 3 def /MarksPlate {pop isCMYKSep?} def /ToCMYK {pop _rgbtocmyk} def /ToPSSpace {} def end def /DeviceCMYK 4 dict dup begin /Channels 4 def /MarksPlate {pop isCMYKSep?} def /ToCMYK {pop} def /ToPSSpace {} def end def /Separation 4 dict dup begin /Channels 1 def /MarksPlate { /findcmykcustomcolor where { pop dup 1 exch ToCMYK 5 -1 roll 1 get findcmykcustomcolor 1 setcustomcolor systemdict /currentgray get exec 1 ne }{ pop false } ifelse } def /ToCMYK { dup 2 get mark exch 4 2 roll 3 get exec counttomark -1 roll tocmyk 5 -1 roll pop } def /ToPSSpace {} def end def /Process 4 dict dup begin /Channels 1 def /MarksPlate { isCMYKSep? { 1 exch ToCMYK 4 array astore getplateindex get 0 ne }{ pop false } ifelse } def /ToCMYK { dup 2 get mark exch 4 2 roll 3 get exec counttomark -1 roll tocmyk 5 -1 roll pop } def /ToPSSpace { 4 array copy dup 0 /Separation put } def end def end def /isoverprint { /currentoverprint where {pop currentoverprint}{_of} ifelse } def /version_ge_3010.106 { version {cvr} stopped { pop false }{ 3010.106 ge } ifelse } def end end defaultpacking setpacking %%EndResource %%EndProlog %%BeginSetup userdict /_useSmoothShade false put userdict /_aicmykps true put userdict /_forceToCMYK true put Adobe_level2_AI5 /initialize get exec Adobe_cshow /initialize get exec Adobe_Illustrator_AI5_vars Adobe_Illustrator_AI5 Adobe_typography_AI5 /initialize get exec Adobe_ColorImage_AI6 /initialize get exec Adobe_shading_AI8 /initialize get exec Adobe_Illustrator_AI5 /initialize get exec %AI3_BeginRider currentpacking true setpacking %%BeginFont: Device %!PS-AdobeFont-1.0: Device 001.000 %%CreationDate: 3/28/94 at 10:55:02 PM %%VMusage: 1024 52339 % Generated by Fontographer 4.0.2 % ©1994 InFonts. 619-234-9400. Created by Gary Hustwit % ADL: 800 200 0 %%EndComments FontDirectory/Device known{/Device findfont dup/UniqueID known{dup /UniqueID get 4115447 eq exch/FontType get 1 eq and}{pop false}ifelse {save true}{false}ifelse}{false}ifelse 20 dict begin /FontInfo 16 dict dup begin /version (001.000) readonly def /FullName (Device) readonly def /FamilyName (Device) readonly def /Weight (Medium) readonly def /ItalicAngle 0 def /isFixedPitch false def /UnderlinePosition -133 def /UnderlineThickness 20 def /Notice (©1994 InFonts. 619-234-9400. Created by Gary Hustwit) readonly def /em 1000 def /ascent 800 def /descent 200 def end readonly def /FontName /Device def /Encoding 256 array dup 0/NUL put dup 1/Eth put dup 2/eth put dup 3/Lslash put dup 4/lslash put dup 5/Scaron put dup 6/scaron put dup 7/Yacute put dup 8/yacute put dup 9/HT put dup 10/LF put dup 11/Thorn put dup 12/thorn put dup 13/CR put dup 14/Zcaron put dup 15/zcaron put dup 16/DLE put dup 17/DC1 put dup 18/DC2 put dup 19/DC3 put dup 20/DC4 put dup 21/onehalf put dup 22/onequarter put dup 23/onesuperior put dup 24/threequarters put dup 25/threesuperior put dup 26/twosuperior put dup 27/brokenbar put dup 28/minus put dup 29/multiply put dup 30/RS put dup 31/US put dup 32/space put dup 33/exclam put dup 34/quotedbl put dup 35/numbersign put dup 36/dollar put dup 37/percent put dup 38/ampersand put dup 39/quotesingle put dup 40/parenleft put dup 41/parenright put dup 42/asterisk put dup 43/plus put dup 44/comma put dup 45/hyphen put dup 46/period put dup 47/slash put dup 48/zero put dup 49/one put dup 50/two put dup 51/three put dup 52/four put dup 53/five put dup 54/six put dup 55/seven put dup 56/eight put dup 57/nine put dup 58/colon put dup 59/semicolon put dup 60/less put dup 61/equal put dup 62/greater put dup 63/question put dup 64/at put dup 65/A put dup 66/B put dup 67/C put dup 68/D put dup 69/E put dup 70/F put dup 71/G put dup 72/H put dup 73/I put dup 74/J put dup 75/K put dup 76/L put dup 77/M put dup 78/N put dup 79/O put dup 80/P put dup 81/Q put dup 82/R put dup 83/S put dup 84/T put dup 85/U put dup 86/V put dup 87/W put dup 88/X put dup 89/Y put dup 90/Z put dup 91/bracketleft put dup 92/backslash put dup 93/bracketright put dup 94/asciicircum put dup 95/underscore put dup 96/grave put dup 97/a put dup 98/b put dup 99/c put dup 100/d put dup 101/e put dup 102/f put dup 103/g put dup 104/h put dup 105/i put dup 106/j put dup 107/k put dup 108/l put dup 109/m put dup 110/n put dup 111/o put dup 112/p put dup 113/q put dup 114/r put dup 115/s put dup 116/t put dup 117/u put dup 118/v put dup 119/w put dup 120/x put dup 121/y put dup 122/z put dup 123/braceleft put dup 124/bar put dup 125/braceright put dup 126/asciitilde put dup 127/DEL put dup 128/Adieresis put dup 129/Aring put dup 130/Ccedilla put dup 131/Eacute put dup 132/Ntilde put dup 133/Odieresis put dup 134/Udieresis put dup 135/aacute put dup 136/agrave put dup 137/acircumflex put dup 138/adieresis put dup 139/atilde put dup 140/aring put dup 141/ccedilla put dup 142/eacute put dup 143/egrave put dup 144/ecircumflex put dup 145/edieresis put dup 146/iacute put dup 147/igrave put dup 148/icircumflex put dup 149/idieresis put dup 150/ntilde put dup 151/oacute put dup 152/ograve put dup 153/ocircumflex put dup 154/odieresis put dup 155/otilde put dup 156/uacute put dup 157/ugrave put dup 158/ucircumflex put dup 159/udieresis put dup 160/dagger put dup 161/degree put dup 162/cent put dup 163/sterling put dup 164/section put dup 165/bullet put dup 166/paragraph put dup 167/germandbls put dup 168/registered put dup 169/copyright put dup 170/trademark put dup 171/acute put dup 172/dieresis put dup 173/notequal put dup 174/AE put dup 175/Oslash put dup 176/infinity put dup 177/plusminus put dup 178/lessequal put dup 179/greaterequal put dup 180/yen put dup 181/mu put dup 182/partialdiff put dup 183/summation put dup 184/product put dup 185/pi put dup 186/integral put dup 187/ordfeminine put dup 188/ordmasculine put dup 189/Omega put dup 190/ae put dup 191/oslash put dup 192/questiondown put dup 193/exclamdown put dup 194/logicalnot put dup 195/radical put dup 196/florin put dup 197/approxequal put dup 198/Delta put dup 199/guillemotleft put dup 200/guillemotright put dup 201/ellipsis put dup 202/nbspace put dup 203/Agrave put dup 204/Atilde put dup 205/Otilde put dup 206/OE put dup 207/oe put dup 208/endash put dup 209/emdash put dup 210/quotedblleft put dup 211/quotedblright put dup 212/quoteleft put dup 213/quoteright put dup 214/divide put dup 215/lozenge put dup 216/ydieresis put dup 217/Ydieresis put dup 218/fraction put dup 219/currency put dup 220/guilsinglleft put dup 221/guilsinglright put dup 222/fi put dup 223/fl put dup 224/daggerdbl put dup 225/periodcentered put dup 226/quotesinglbase put dup 227/quotedblbase put dup 228/perthousand put dup 229/Acircumflex put dup 230/Ecircumflex put dup 231/Aacute put dup 232/Edieresis put dup 233/Egrave put dup 234/Iacute put dup 235/Icircumflex put dup 236/Idieresis put dup 237/Igrave put dup 238/Oacute put dup 239/Ocircumflex put dup 240/apple put dup 241/Ograve put dup 242/Uacute put dup 243/Ucircumflex put dup 244/Ugrave put dup 245/dotlessi put dup 246/circumflex put dup 247/tilde put dup 248/macron put dup 249/breve put dup 250/dotaccent put dup 251/ring put dup 252/cedilla put dup 253/hungarumlaut put dup 254/ogonek put dup 255/caron put readonly def /PaintType 0 def /FontType 1 def /StrokeWidth 0 def /FontMatrix[0.001 0 0 0.001 0 0]readonly def /UniqueID 4115447 def /FontBBox{12 -148 648 974}readonly def currentdict end currentfile eexec d8061d93a824652cab7761a8dac65b57ec3fe6381b068e57a586b08ef37fe40b49b7d7633b8ad558cfeda279bfa8db2693a95b593a4473e0e0f38e654ad86ce1231549719ea44878ff49585a89f37ddb79b56f99b7d19a6f1acf5bae20ca0c10d8ed181b136c268f5815bb0b476c700d50e8d29a6c215ecd2f8dc20a8607af 2d7ea45a72aa45d6134609a1958b1c5eb3371c235e02c89fc6c20f6d9d89e7de177924fa6330368f5fe19f98a087d7eca80136d901279d0a430b7318a2c7cd321fae1e0a6d7b61e387f08c3ef3c1af63d5b419648455e43086bc0f48779a66c5282b6305c0ba8613d66f3fb7dcbf4f6993d06a8341171e0b6716dec273b955 3282dbdf7725e2adbfeecc4cb50c0bc17354017a7ed420764d36644dc641e5ad23b874d1afce9e0d21c8a51de06eb32f7596def184be868771c0b9c40f9f473a95b361a8f9440635cbfbdc756e9ab670bb141d723e2d00b774782034fc49c519e7c63b4e3c831b0b3c7940a6b493ed4d7b2f633f0e953d09d843ba3fd0a6c4 1820e5ca93a99ded985442f057bf442caf1ffbdbbf70cf5788351bd1445566488a9beb9419fa93b418dfbee8ca9752a50f79165b62281a7a17ed89c099d068ba53d667d632f5cebcd874b18d88b90f0254fc7f8567a15a50b4a183b123a054cebc9ea1a7ce89bd58774ff507d6eb0e11a447f7527679ff9665257d5f9a7518 be658907cdad9d68c196bc411b35395d66cc9ef105609942dca7a1833b182aa820c6490eba6c87a1acc52a7391465235c249598578cdfdd7bf1219c8ea8496efec282c08b54127cb1675aced783aca8f6e2520857d1692c18f6a60881693c0e3811089aff3e70ab7e72de2b1f4ad0e3a664dfd0858970ddbeba4e8ab877322 26616c2f7dabd2421d5efcd3666728fc69fcaebf926af2c3174aab7bdec6e0d8431449eb938d33b68992e6c36984e05fd2d74e837708b42d4899c0614df95303b2b33e22a3b0dc6883d6516e6804b2d5ba6ce94db57ee254b840490b82ee2a847fbc1e2957d3ffa335f026167c05562a79c4ca7467990ab22f816c47061417 cf969ca6f300a72c7d2e3aacc12dba2477170a4999e8624d924717f9cd83dab168eab77a1b41631f986be5587beee9ffa5c9ea5cac6cc6d3429d57a10149fe4d81a8a5a27e68f193765cc7c1db653647271ceb9ee3ab6be87989888457ce0861f3ecfb57abb2b33776cc54ca83c846ddfcb0d31065224b0735a85536e334ba 7cfe1f29ec0a17c3c0120bb269f115213d4e2cc9bba6a6188dcb51efe797904b6953943b7c823c9966437973cf0da10d500db5b19f492119b5f8dc1efb27c38666a1982ab013ca68654b6de603f315ba15c9056260935613fc97312d41a8f6c36e31e3df887a73065d555cb3fb914d03b0f6e0fa179e1330bddcf8461c400e ec3c58c0279ab5226cc73f3376db7ff98d3aac32808b595120873be783c9a56690a01dff3b5cf183490cb8200318bffac052eef361834649ea9430efefbd981dbb5aa7052f67fb96399fab7070195a8a85989b4565d136fc4ee2f5060a6d48823041f44bb3e27415f81538b2dfa16afcce8ad23e885d4bead26c16fbe97f14 40cc98ab1a5af166133fab2ed572f805b4084b21e4cd289bc2c93b44e01200d1b0611d704e814b856d48c6377128fa2f90e4dc173f97e5a677f44084b6dbc25014ab7ae1e8539511c2ad200cb4b9e1f60b3c82a22434a8bff68779166190883f9624580d26230e61d06a692b09101c1f60fab7672b5d6a168519f9061f1311 c662b6033166660875692c7cb400a45f49a9058d0eec60158000c1b3ff6cb6ada7e3cb0f549696060766d6c88417de185e8f92fd0b95b3e60a8d5d92d3eb3fa7ff4e0268ef612cd93e6b70f2fa393ebf3f15cb105696464ea23e7ee2c467539c3df167859fb8318cedd23cfbf8d8acb1cd7cf1d07e6023873d0f7d6236c412 79de21b2cfff6b2c22c5fb824880bb115bd80bdc923c6d0aec0d30ff65024fb9fd55b0eb0163055138b9f140dc7fc02a7206b3d48f240bdaed454e73798e57e898ede3c3c90cebf437a11d2587322a026889cecae0580f851c3b24f776ecc40454fa2a4a18d6a9f7acf0eb1ed77aa874666426892829b27806d58bfcbb2fe8 bfaa8ffbe9af08035a80e38fec7d365f7bbb0252c977b6067ca276c7f8eb1fedd4992730ac0bf1eb423e11f23110c40a05f2962a58e6f945caa0353668c1a748bc96ebbc31dcf33811139bb4a09bd798670ecd4bf27b69632f24c43a7e9932d23b3c5ac161b588e5510bd34aa9fca0effdb0d04648d0938f0604bee4053952 889b115efb5874087ea4d968898243af4f823470154a5ff87bd5b7ff15e503a202b7c1a6ea95972f6e41cb541e4d64b51cc9cde37dc8829d0dd5c5e15de63b23b275ab2a2dd8677909a97f2b7298a88f01934587e99dbab11efaedd8ffbcf7cc71dd15d6899c6b9b5d0c116ce2905164a99526068aa57b92e5288128a75759 9f51a287484491c727e258bc146e14e139ade61d957b2bccfdbf1d7251c9c6c11bb59ea4896c9ab6901a11454acc95098ec9b1072bc3043fbb0f532ba75aa47aa61e340f1cf1d679648c3b5d0eecef05212c571dcdee915e54fddeb48574433f25ec49b5e51aff9096dcc37f3ecc251e324ab189c0d9900873e4a25af639f9 9cd818f0bf3b2e7ccfc9eef7094b49ad6e912cdcce96189cb646369683084148de4c6a4f5e6e55a322164f063072ab7010367f3b0d7f544ad8072f54badd32cc5bf51e0f7203780041db263fe150af7300895f1fb7be300853c264a2777076fee6f9e56619a1b7d44154b95c3a3e0433ce02a1db6262f3d9f5438838ffb362 b963da4f4e438a1a01d74ff6ecc56bfc4cb4b1a135ab81431dc7c81ace913fbd056e5f2266ef565d4464c9ecab8094d638bfbe0a640f7f892a46572b5db1f618e6a71b727937a672c95e604a6bad1977a907616c8aa3af17ace4d9530d02a992314728455be5f207c13cf209499c748ce2f7c4bcc8756e9579bac1ce84eebb 02d9fe35ed80ac2a4323bbd15d91e2c214c4bdb0e1dc8101f349f0328c371754eb08f5508d3b6a14afde9181e85611ecb2de720c2bb332ee6b6eeb928a5e3cc5a1b7a0bc72116aba7cc9684c7d3bb96203ab60f550bdb279129576aba4b2657aae837efcb4e56a711c56d6ac6777bf68b91a4fdeda09f9ea528f532a45f291 258957255cca6ebd4534ede89c2bc397c91388ceb8655995b8ce792a4d617063645bcbe7a2770be9cda1a0161cd5f33e36a71ca94883a1067ea9c97571832a8892cfc6ac2c9fee7f115b306817f3d2f8eba2c52f9150503087bd7c6d118980418e0682767c287b23ac1474cb820d17b9991335c3ab932cecc7901c50daaa83 8aedd750d8f2655f2500151319600e3ec08d1ab3d4e529bcca3e87fcdff2fa0eb4903c23e7ca155e7dc021bdfd981581303ddcd133563ab65e99b93dffe49fc52a394e6650ae60df8bf615237b78aa426d3da8b8db58dbc54c38543771a0ed633d5ee39cfdcaeb824f266348c21d4e456cee8ded74af8d20e73186f1228258 7ecfa09ea725b674ba887e7efb22a5644abbeb890670f6263e3b9eb011f6940148f46c29b4145192521d8247a4c6066a02dd4d90353c170ab70163269e12972640b34efcd9298f86e9fe6b83ad0628ec8b803c32bf2c2a550f8e89c71d47f2a63c0792677373048be1c8729ac277545334e7b460958491daae755f6af3c06a 8b848ca70336e5b585908d93422f3da947090ffd9175c98b08e523fde5ccc9043acc4c9960af2ecef6aaebcd12ff4c9af27f0a5e3b3a772195c1bace42a568a535e30b5aab6729fa405de74d4a649af84d70e10ba0b69f76e0234c4fbcc5ec377d0ffb49c67208ef3f0aac2c477e726009fcd49bdb0387d134983d12f51df2 21057c51753a0ecdca14ae8c9f2eaf2b4ac7516d72d8ae78e950cbfb19aa676dfc03e3c923c4d8ce25e4a7c9cadfe5fbf9fadfa382da04cbb47829b988ed99f208d60f915f52a3564efd3462d68e54aebe58cb5678817415f2e00d698c1469bbabfbf6919d7ef821dfc497df4b8db1dd53c70906f8e518f3b7f34c8b26171b 590829a68bd7be76dab9db6239955c04942e2b261be108aaeeedbe77f2f4d05e4902ae99eba1cd4f482bd36f72fffc124e3c90ed48ade35a25e673841c149113ad0da2fe2bab1207bd002323509ba5d29ae00285e8909dfbe7ea3bcc73998346dde576a41ac98939c174a973b41e1a0666dd247ebd5e00a4e408d39503f490 de243866ea7893643495cf9bf551bca3200baeac4e0f1955adb174416b29900bdc2def860e7ab7bd013de0dcd8679e183aa2e7693a86659caae141afe8ec7f357e9713b0e7d07de7e38e2259e558643413ed046fa3aeb75fb7fabcbcc3dd89ea664f5e5e811041a31384f420656c62f5128ceb1289cb807d0cc41359d61cda 741f98f967e29eae00fd8dc3741869e37d84734817f8d8efe8289ddcac1cf7453a5f847817f1904a3d12c06c6ec290df8136fbc0234f4e3408d1470c3ecbe6e5f5667974b01eb6ee6e59dd577375bf21696bfa4d5e4a3941a326187dd3ac06f6612bc53dc31bd7199f13a4fc3bc565b7aeb3ab7715c6d54441e8a88ba29ca9 4c1afba6770d72d0e20710c4bd382b1ffe3d47a6c54be048d93d7da86f8f385eb30f79d6821087ac542a1da642a1fca38c7236eb55471a55f85d95e3325c145623d017167eca2909721302bfc6a6023967c6c3513c2c69ccbaf875801138640fc1f47fe28b9d8bcdb948135e74050d60db4b3b583dbf2c6a627d1b46d39ca6 88b8413c95d0935ff58d8b5ced048fa04a5890dc4e1e257c0ab5a8200532ea3a11611c170d7834b23ded19d0f6438906b7a7d6ca1ec1b3216a5e651e270583970b96da93617b82932dabe11feaf993a93ead759dfb34f4cb9bda39c2b5910808a8ab41168c2773a0fbbcb896a85913ddbc41446d1a2fa208df5ff3660e2095 fe17138d0b735eca1aebeb34fe0311c4df5ff111f6f5d7e2be085afc3f231f2cabd5a4e7b7fe5996e7ee2fc56ec6a4b593b400c3707ec7d954807fc1f8013174286daf55d9d03c0b1a6e6de0af0067b4f42b13b767777398f6fa494ab448c08d603238434c8b2de9c140e890b9da0cb80529c58eaccb50eb7a560eaa32c9d9 e179b39fb7d8b18b523966763d2cb6bbc0273db6ad7a29b31fdb9ced9943d9f2c3348d3a5fb22939f84609af0cbd5078bfce54b52c45cdfffafba11f221bb43b31848dee06579182715fa0aaee8492ba378f03afcee8823e00c06a4012ababe9a78a3a3288ace313061084dde37b21d34cdcd02ea1117d3acfa3245eccf86c 6315e71e446687e6d9517910c440c838aafba25779151e4a64fa43f39abec747260a6ede4ae9b8a38c94ea57ee4ad5734d4d8a32d3b087c1331bed493f5482552252aeb7de7c0d9adb11882b96f074ff1b41f558987af3f081d64704721d3c0219f9e762f74c65d7420067527328b1e2913b772e82330d22ac35b7677c96ee 8eaed8b99f2d7b8c28a42b3a7d22e79a2c3818c8bedfb3e3ef42215c21e338cb8cbedc151ba547f7c6592bf7e13cfb8081ff8fcdc1e54fcb6708f3e28374fb366953157eeee486f706253ba18af4623f38c1a74cd46dc01fa49a12dff6a6fe59ef589c2c0b55b7c16e35fa8184b1aab386ae793bea13fa656a8fdfbf712831 5c4806d00cd2df4afb6a5e84b237b5a68415479531a47afbd5a00bc1ccd5fd1f4f9c95a426a553ef445615de74bc01dcd1226971233099ee75d0ee5cb06321e0c96aafde7ca90b8153d0c81758238af7c55402116abdb470ef76e025125bbe6d91ffbe99263494c65c59eb9cba650c957bee2250e79757eee857f07bea6023 569590e1348049bf932e0422edfc51751310368da04e96ce80729eacb63fa140fa83e759655153a590fd44840abc6ec60aef47489fecd48fa953103a5f642aee55e28cab055da0d15e3d750e93e08cbe9d5277e61fd55312f518c293c1cf98fc9eea0d2f6d7b0c26df869b36bc869664bef19b6d2577106d7dc9b15a69bdc1 d0b2263926b249bcbbd392c7b55e59aa9066022733ee075a7ac0d407c56659660bbf4d051c793fc4ae5f3984fc8bad99d5d8aa6141501960c52efb0a75219c934e4e989f23844fc319bade151406a45afe6a34450367bc34cce43fb8f18e20a3451d999548121cc552abf976489c60ce14b164321285e67c76ffe46211e557 109742bd3861b74fbc28a26e16cc367f83eb08f3399d01114b78c615757f768934edf990fdbcbe160ba0be780723dd5558ab3274c09e76b4086efaffa891826e5c94c4355aec9caf4eec8b557b28163b809180a7754ed0edc212a4e6e7aa42cfd842202c320341889709b351309fe55e2d96c3b433ca7e70a4c68cdd424b88 0f9c9379b41075bfa77f72808718a26a509f708427be64c8c9d82f5eb45f64079ef03613a19e6ad4a231d1e5dce672cc69a8ccec7773bd07c5d29a78c17797831ff7111f73a47fc637f32eed55d42c869eda61049308d43a1854ce98a2ba7b2819911beaa1b375a52cf825364681f7b9d0aa55e377fd7792db37c59b3193e7 b7203b5764616b5efe8bb2f63c248118fe52aaf104f2a0554dbc013ff95753f7a64da8d877f265870c0ec98e9eab430286d0b8616c5e1731d32ffd85888b904b1861f2ba9e74dc3f2a4f3faa8f6425ff88aa2f1498a98be44748d6100f20c704323ec200a47f3de3a850097410674ebc0de4c0bbd6c781dfacf665c18f327e f6166d933838aec0583fa35fd3321db29f27af50b4d158e5d9a875b45286c19c675d92d56936c603c5cc533da08683e13bd35e2a1a02690cf4b0c9e25d2357fda47dec700321e4e2b9a1afe0b9210736b970cdb25bb9b4802d06697892aad68e825b9d2efe0be08593279d78271c42f2f7ec281c009c6cf34f2b71e8adb0b7 39431882a521cff5001ca81a1fce7f46b87b6a7e793e4327a244f3ef16019febd705c463979b60ee6ea6f87c2c9202c060bf5521ed2b61a729697fadb707fd2eca5b5bb74580228a7cac3579a0707175bf10e35b6f5a4f72497390564d2c0a9e30614bfd1982cd528faf0081ddf57e2311315cd5b21de66f5eb01582c6c9d5 7c4bc18687638c120c9dfe0fa4565f7f4ff2facdbc455ead34703595dec11b94c866791ec7594471a2addb3fe7e3a4ff3baffa0e4793e2fc6b6d2a991baa3d2277ae71d3e200c9e66f9acc298793021e0146019a0be4f7f393d6530bc397b71b6a4b6bd57d25deb41dd8748b6a49bf110615acafe1924be715616af387267c 3032c9dc819206d67bf16c005b8406697e31dcc27cb978896c86d151043a6284bcdbd3491adfaed4d752ab0545040722dc822ebeb86aabc704547026c5f7ed488a96e40c80fd1318a12d1f08807ccdffc4ca2f28c7a6e4610d31879be015f6e5dc654e13ac2e6c978a3e8caefa23b84ea909f82af078f9bdb6efb13f614107 7a70a9cbb32f3c44858aada1fc329e53fed7b91dfc087e9e99ead0add11e1f6f1b64f8c01f63f0f66d8b0e72532131fa0e5a8491d9104a8e469165466b51381ad969ba3f40180d0d248b2b12d3e7400dcf7f6a79a773e237318ce8da78cca61f8d47e916f87e5c796be484cc75ca49e111e8669516de77ddb5f11e33f60205 5654b1bca7cade5774593cc239cd4fcb3d5e4f3a92992dbaeb54823260f6b39a9b5ccc95dcc870f5b06ddebd1d5efd8793d69d30abac25586345ff9c770a92e65a04105b21198e72fff5bb2701511cac912935a3ae9633a4fcf046db1ccd4d95b5223d62a452ce58a5df0382f0caf9021490c540c4bdcbf4e93ce337781069 82268503d6238c5c738884f95bdd5ff4a21c0c09afc08d520dd5811066a94707911fb57ee495284aafd51f747924b1bc7dbe035a81b5cf83b8307830e760271dc5f23e8892a55d8dcf43bdc5fbe96b1107f6059318260a090882912cb9bb134d19bad158f23d9d7524d75b0c4895a2c51d0fd8d727b6830bce8bf2a946206d 4bde47d871d2f2e0765768d751c3c176f142b7c935e9b56a9eb4629ebcca59b11fc4e8ee672e8dd7b86c32ca8b14ac3cfd38010f11b24bd8195861bf04af8406c846305993922fca7525e2d41a2155df3ce5e69d65b023fc516e122aeea9a60fddfa366671530867c9ea775560ede353f845f069a97f99bf0fd36a745aa244 efe7a6cdefd3223fa50b4c7202ff06cdd500957d22ef4ceb99f7209f47edbad226d803c59060522cb64d75d33a0a528234a5a08624295588ee5f43571b6eb3005ffd9f3c6aa25b47ccc54899f8d2c92e873eb8428cd87224253f7425d921a88e0274a5ecc536845f4109dcb58d549be8ecde36fc996a681142d9eaf8eeb6a1 860e88a98ef857f4b85d247cdb4c320f39a565b568b5fabbe86cfe097c6500ddcaa28216422c0b3f59d1c965cf0d75b487f1fd16a22815cacec8cac0f87e9eae79c0bfd4b60750dcd740bde980a11f4ad2499505a259f7619151fd5c0ae1eef55eac375251121f9651994c31534632458c92d3ef9549ba7556a8c65bf13d70 e20583b41c57a460ebcb92fb2f36c567763f1e40da89ac94c4b89aa148431e294854a85835e73a730cd6c53202b5065ddf04d784f8d4326b7adc1e9b2a4e0265fd236f6d186cfa6c93a469486bc341ce64b12fb2f4c2e8c981e208888b748d944231dc1fb5362db890ef1edfdc15420a10020d15fa3ba1acc41c3ed0a0e295 b366ffb47505aff24ee0ade40f070260c863515afbcd8a93637f2f7a82b7802c05a310b6b4c0da22a4c1e8ff47e739656282a57f97af84c04d645b5dba2d9a763fe2e18d7a92d00b4c95b314726889ff51543429de1d2d8a3819dfbe42cccda4466d20569e3d036f86428a1ed1b801fe287da0c91060e14b149dafba38ee6d fb2a790cdbeb4747b89d2afb44d86100a9f228a00f8019812d4d79bd400dd2643bf59475c882c83fa8837d8ddf5c602cda009303a7344576bd14db7cf1f42a9915e49586dd6216d86d53f644a245fbacabb985ce746169509ef0067a98528ab696b88814d791dac614373e7a14761e7c860bb86e7016ae11c3fd99aa935dbe e4773b2fa8317da780ee188914274b3cb4b2ab2590b0478abadba0f6db801be4488bae80e0bd16425d8a10f3975c5b0e4eaa3c17e30343aa04fcfb0d1bd3a5c6ad6ec33174ecfd9cc6ceaf1ddd0a0c2763be7ba3aa580ec4c0e4efe578fffd37dd044285ee207e728469a8f79d541945a70141851ab25530bb5a09be0e2d40 3b56e6a5152dc75a59d70afb83af949c13898b3ae3da49455c92b2ee0337fca9613d147c492df5ea23e9a72d3e003b374c409ecb50d8f5895df1f017c30e8095573ee46395195961a5addd97c2237c54d3086e430da34ee6e1ae85b32a98d7212a6e072ffe73e57d065e2497508c0899e3309945a8e0c48f6b908fe569911e f443a5a39f72a474536945731a0358a18aacb46df1c1e8b27857aa9dbff6322c7ee3555f657daa27e78aa1f57a67b2b3286ed4d5c50446e0c8116acfa2350633acf375471b0328708854e7d6e92265f3e74e0a16c6bbaa81544e9cca44c351a477b2202d64b47fa89bafb043b2b704c4848eb349cdbff9cf31ea28a813918c 117b259d343aa5f03a2bad1724bff9cc7dc9686eae637673438c20de1ec832eba488006c16b771a4be83c2880d378a73312a0ba07c246a72f03fb55214e205b59b2cf1826fa459c2f1d55a420ab9bdf1ce11f8fd7c659e3d43edcfeec64f591651ee7e7ca23c4b78f6f17362f6ab27701b8c84db6ce89c571603d2171cf5b7 3300357abb2920e5652bd859ee437581870eb729858f65e8356856956fe1dcf617de21f80cb69977f0aaa02260e306d672f5f9196c06b08a4126be7cbf431bea44e03a3ab86bfbd685099658369680a307313fa23e4ed89b02b4062fbd40fe42d270344a916530749c56ddc245183607b4a07d4f1ffb4599e8460ce525d6ab 19af4b561fa987401d2160cfc9e78ff4d211d84863e09d3f8c6f906c1c42c3dd8bdd0ecd709a5e90cbc4679d0ecedd20014694015f36a20eadfca4c818b0a2fc0353d4c576e7e94c308c08ed67236858bb88f180611dcf38cae8d14bdc3ad0f40a5f9695c11f584d4801390b885b544c3f3a5b07a6d3821724c09137260dde 72224f90f206921b38768da87d0df7721b7a5cde0735d7164a4cf429ce3584da362454c6e389c8c2073e49564b245aac532e0a3631e868a3ac174f7a62c0e8cd8e4b6932e7cecd5618ba937e637ba20ea131863012a5688315520270e866b85c0ef3a450a292f9fc8052766240f632263fee77f3538b5e1058787cb65295af 7e5eea99d41a84beadfdccff9f4fab6879ee0eb54654ac5cb345e830ef22a5bf9a00026e526086a27264d70e181aa2336e96e987d341ea74c7212048092af199b711cad5195e64ff60789ee873d301dc3fac7b681ed94aff52490ee6aeba217d5861a39a148dda37e2ccb876065c47818e49ae05272f6038b3a58f3f4824b9 5538d791c678305ebd5c5aaa346658bae0c2d3f4f0f1f04a2941a1fa7c3e14ff067e9ad1e1e95a72d267c6394353320c4b4d31ab1d090a0d53bdc3df6dfba09642adb22c18a5d66dba104bd9a6331efaa34853f299fc0e9d435fb251b48bfbc56acfb79bd032dbe2ab2303538bdddb3c8083ef4696b569b070de832afe8e99 d8869d408702e052001e5b39280136384653693b35ace3fc01c9f859f709d1078c17c75d32c9a00fb3db97c4d3ae4445507e238e5c0b7806d9c8492b9b843e3f0cc5e2cc5dd817e081c00d6d83378297f27c4131a29b9437323175bf5b9d3cf86e250578387df3e342f97e7cccafcd0bc229e22a9cf8fd48a3b28f82adff7b 65e654706d8d79fa6b0d4e6754651dc2235f37ba47984e6e26cb99f46056ab74da43b1cc76561fe82aa233263b05126e66cf6f4f6aa3c52c3c6bafac90494e266fc7f47212f164e041761211f73514363cef69d5e1fe3155d19260fa622e41431584bf71212f42cdb6ecc2bce920591e6a06abc72c70863a116877aec33aed 235f43f01bbb320ec12da7c95744f604544988ad2b68936db008c324e500b1e614c5035559957d3307d8d57028da029826e09a601d667ff635dac374e390e70b968511b5b859a029a3d80b22eba03bb4d4dda966139e927d62fa9869f6bc3b65d19fb81d1509a23bb396e6ec9df76555781ff2e595648c73a05133476f8339 e71c97b2e7478e15e11c553178dc901a5b5aedcfe928cbbf46db104402d1b0224893c67f3efed78acd7193fc4a960850b6c4c167594a528576d1ae64c0e88ea5b57bffd4e1bfb56cea85436ef0bbb8846076dcbd88be89727c6277bfa4502c121d6eafc514332daecf17f681a36d1860263f9e3bb24483f84451acdf849067 2f497e5c656dea475d9df57046c0ce4577e2f5f76ec273aacf56b12cd527db47bf88c7dec117b9500a3c4d1842a1b61fc7bd430de6d563526fca71b341fd97613802812b4c1b77ddced234619b459867b3201a9f1da37b8db636ad07c70968976e5e33df49d4bb2c74bb6d2c472f624032d47f1309d5139dfe6e6804987058 a227fc0adc716e6ceb2401b4158929e5634e8b329facdea8c8f6edf33d52c5ccce8db18bae293c19bce6a1caff9af9d3a1a4c9125735d97090e212427c5cd2462127b1756f9b2b1968517f9b06ecedfa1a890328a7a68554f727240e7828e9bb54b788fd49ccb0ab90386f1ceea196e588a6ad17155b25fcd5071a4cd4fc98 1a2ac8a930f85d9e70ccc6f5f2eef51c144e5f4c1523f5cc9de9027a6a96b14280ffbfa12bdf07ddae577b7b0559a500451ed1e254b05e29b7fbcb09a908ef2dc5054224ea7f9c91288d1f4c1bfdce151331e0a8841cb41296525e2d51ff2bc7ee6430b40f15c64f0ab35ba1917e35e0a2c9c1afddfd64049cd3b1544bc1f8 95cb3e653160b62c93046dba6c49bce6d0026f06cc771e462c9796c6657ccdf4c9db0d346e1574a5181e52493bd08c7196845359be3f837eeeb3ab445c348502da48d840b8887d239a51f84ef32cc9699d27f4f783ee311f8639dfa8a5ce0c33c518a45c5f6474a8d7765d25e0453f3f60f88bb40ed5e2dc2344160c171b6b 66d8894342502baf13f63532314bf2ed29576a7584df8e3d5a44eea8185fd3ec095e8bed72520b9334d1431d9f3004f17202b98b3409419b6f8747854a104a5f0afb9da9bc8c93bc4391e33cf99c3c8b9bdb3ccb251341c5979be14d8a9b1213219c2947e2604cab41f00a7226db4c1ae3d65739afdefd62ce3d268d854540 549fceb1c46a3d37fec17a3bd01631ebc63cfc36c576bd41118ff2524bc6361bb52799425c93f2dc275c1a988b2083c82a2cdb5d6aa311b135a38721e46e57e00e518a0f06e09622d86301727a3ee674aab7267fd680f2b4c0379d96818422e41634d568ff18538a4eb4aa309bc1bd174dd987047b817733424d4392ed9236 3dd395f517c2ba622ea25dda82738e9a942558bdf278f96508a6ef4c2a457e845667caa84173b11c46e8a8a4f9c33aaabe426295baebaae0eac62f8dbd68b71362d4076a503cfe9f95b26d744fc9a7186953cac74a4b5ebd605e702278a5c6f5b6311fd50a39625e63319d932cbc5353833822fec28824eed4a8793eda8d5c 081711ddeb87a5f915eb07189931ef1b015af1cf555c99208ca09d3c802b2f1593a23a8774410947c39c116697e4edeb29954fee933d2c46f1c2f61449e08a0df628f100bd986869b4812e259dc5ef37a59b56e938da476ca294a430f1fe1e836aed44fcdba589689e90dd6e1e215eff05e70c0df258056303238260b26797 48aa26a396d7bcf99a086e5ed03c1a48ea3fd63d61daf7c1c56faa45f824f011b594af1569f2c1ebf0fc4cf99c692442c0957fbe6561728774c0860debc7e265a98297f6bdab8d18b0938993777bf50ecd3ca6395074ea555fc3a925b8433bcd68ea6366c9bc148268f68dbd9c292d8c821a108c3a1b8a194e7f3e745d1428 7441c7e9c8895b15c6a9abbc42292bc373056079083360cb3481d749ef439e788303d500ac098dd88903f487ab6b198126675dcf021367d32e24680d58dbf551ec5c92acc019ac5e170705190dd7b89338514c3f102afce6409fd3ac4d95ad85b809f920579a2b6697d2424cd7a6324e2fcb6daa2a5f4c5e80970275567393 4a599e605aed017aba72d3b84390d7336c1c39f2199f732befcdb6532bc2bdfbc92ce17316e5519b53abce88d54f6877fd0a00bba4192197a89b61e6076d521ef6bacf588d19aed7cbdba39819c9a4019ab0641227eea491e5a0aee1eef458571ba706342fe0876d0419704118b18d1ee9e4e055c286c1fa59ca2fd375346a fb75570429922b44b376006e2a23c3228dff653e6ee6ae109c82655c18c02908efe8f447784e5719f3aef0ea4040774200ecb72e96f7752c3d89a7bac7b1da38452f820315b39441e0300944c657cded958620ed0178b0901e03e349bced5bb23ae9e4294deb84e5031116633483e5af73d30e221d1b9d0bc05d6a7507fd52 f6f6db80bcc9116adc6c34eb6e037d4bf40bf04f282005d8539bcc32ff7719a5256e0cc263724a645973a8be965cb20a5d87b53ee0ac408af6c89dc54f79f04ded7cde96a166c30bef69fb320ca5ceafbbdf8252ffb2c0ac82558f65bffb8022bc9c7c8f373e1cd7819a3375c29646557ac306b47f9ff2cb91e0679029110f a583655f8d29a7def1e84ae42480a4b79d23c9d7b1e000a913d26522ed86aa3497d93345139dd461ee93bad486fb47229ea75607c51206cc994e3efb187aafaadc9ec1a905eac775ea8debe6faabd7ff22b11e06fe8554576575b337065ac891761a25975b9b59284f842dbbb3b2c1a27016113a1c13bcb6e552d5204a1f41 a0775987910fee7eaf8cfadf31c537b85bb4853ba8a3fe6aa222f09233cf8d72f573b1651c90ca32aa7ba49185b8afd79c483e0a6241a89aa7dc18ba9d9ed6576b2e81e0168d57c496bcae44e9d07875a6f3c447c622d1d9004020acbe566047055435279a093cebd7c4bd6ed9a29721f1eec21c4ae24199876541d113f744 6219637f4477e6977287e704ef7edfa1bdde7fd4be8ff57439ea8f2146b0629d8e98a5a80c2b8763f7189bcbfdb3222b9003d92dcc07bb7f1215b27c1b5a9a6b3595eca046df1ca827400c216f2f6da33bbcd47300ba4c4bf6d5b61fa5172f0813868d7a684e1adc3740e4e22a9e430141d68db63d6c40b5b8b837a9a27e3b a41eb6cfdc48765ca00b5f88b5ca84f19dc5b7e481a9fdafa504a673f0871c5a44f2d44f726d6f042cfd5b76828bee85dfada1a721533771e995d24ac9bef9e40dec0c0d0ab444dfeb55cd83048eedef09501f1f0e3b7ceb5f96686d571eac8f5c710e551c350560a85b68931d3ec66bba5c3673e59ac0cef367f9bb5b63a2 98c1900e13569a540affc04c8a42768636c45469ca2d2173073e40a743d78cd8f58449efd6662978a3d58d73d05ecde6daad772894d9d2b27ceb04afae35f3a18854c61968cc052943109c2358b66a31aeeffae17b9112758796e41470498ccba8009bdb2e400d8177af4ab29e57c67e2a816a7a682e6f89ac9d4c0d3c5fcd c353523354221aa5f227d902a8fd6ea1ee63fc6df9cdadd1373d516c6d00a80d46472eee97d0393100db54a0034635d772766b1533a0b41186d87727a64c3e90e02d0a00deda7e91b72f752661a5e8da1ee320c97781f804b4fc9169a67ad3713eaf027e64dba1b4c1ac04ebb31b91b0b287e235f9ed9786e5b509d8b73b80 75f74c95c8e269af91c5d38e45486fcec38e00abdd2c82f241142331709d78d7ad32c0237ac3e04eb79d78962d9bd014e2c1a58803b17ef22f0e05e234253b665ec0a813ed61e93733414c065693b7f6d78ee298356ff8f7a275ed990fa6d2ed7e52e9a5465acbfdd07be9affd4b4731314b5e80d1564212863e5498ba1eaf 7508a899fc41ac1b33e7b20aec88de070c9a490d7a573f11bbc260ec929478cdd1348ee0a9356e16a22563222f89cc049828d3d07bfcd566f2e075915a7b709375ea963ae4a226d430200e227f8e7b602496fae39d595d9e34a642dc8c16efbb51f13e8f3026d4c4adbc7f6ff14321066e996f256a9cc9b6115a9ffa9aae77 e794ddfb7d5efd704c61adfab6588dd8e42b988e332757a4876eae9aac89e7f86b89f48ccae16adb137eb79a9289cf391a95dd4e73719ea2ccec34bcb59754b939b5a99d3077de748cb4df3b8b534dce94ac3b7a709a3ee13859d215ebfad213687f75a9988f23607b2dd603c2cd3e2af8d49d659bf1e7d214fd6b92db86cd af8878d0002e2a050009d9db2d4a0700728870d2d3165e7611d7eb20058f27fb7f7922db96a92b8573fdc8b6e0d1bb9e8df799621a1615bc5dfb089eb220fc4a8085efa031436c767a63731200728aff1c8047848108becb8e554e05f6140159a40b1073bede345010aeade337f2d502383fbd036a500bb5c1ddf42204f2b8 4b5c339bc5e269c1704bc1b95661d4b633540c50162f56661689cfcfcee775de2126d729a37c31bdc4fcc06c540ef8f6cc9ba978f85bf8270c1bbb9c2d49707c1695d4fa8381520b2511e40d890a50282376639e70b2145f1ba4738275951bd6e1427f9612c78260bdab1e2315d41c6f5ccb7ebcd9e9b6ab9be818a3485604 2369744103a0210c2ab48be9235c2344efb570e82e16ebe934790d6acfa8606db201ba275cd3592a0c2b7c627808a0f08e181af74e4dd0dcff9a54fc1af11688e3b550991700b3693dfdf834657ac3e4977f75cc120679b35e4b0d82359e57b4a6ad12b3199e6e54068bc65dee5760ca3a813df048bd8503348a660bc4550a 8f504649dfedb69031ea44343daeb2f994022cd2d70f828f355f0f35d5fd031408b6f0be5876da5e993c23e8d3118f2436408b99aee857a02824b2c66591f31bfd41e91fa3252739ac5359bfb1212fbb8a244b6d41354c42fdf0c3109e950ba4bc24124caaaeac7ba166b8c8c67198ece4dc222bfa6b866325e792d552a5e0 ede88df12921b03d1ef2fe0aa5201b294582ffd3f132739afcf97e2a1feb9dbf490173530dbd7155da05e86b3e1fcf1237ad6ddc2059633b6134bdaa312427327958fe100989d4043219275b63a00612dcf4e50cc5ab5c9d634906bab562e5303f2fca751eb973bd8cbe505db334f5952aac5bb4eed480196d3b8556226b98 6f2bd57a77fae30252e1c6de72cdaeefe3c23897dc796ece0bf11aa3cc72ee4c54481f426e2d4934dfbe34798961855bfcaa2174fee48565da40c617c84070dbda70ceea64631821f11183d25cfa78f0a7b4d6a50908a39cd090ca5c932f4c96b92ddb0933867be413dde51d795aed8e9abb4559ed0ef83fb6676f353fc383 52ed0fab4da9d5cc60701b83e6e67640233a6d47b33063f08f758960d8b0efaf21a1843a771c760fd9dc4169f4464ac7a2c6ddaf0fb748ef6f66d541c669f2f3a3fdda3f638517c74925e8780901e61eebcbac3db53c36e6848e16e4b99dd9fe3c0d4f42aec5218f4cb6c9ba80153d53e77726fa110b61b137718e608da99d 4fe056bb4b05d69143fc87f52d4aa130ab026b5c8afae8df0be26c260f807e1626f38ea644865ff8a6838eca7c0dd98314cbdc861bd06ffe8d8b8fc1b5ed1f4e643a4bbff318f16aa5f1e122a18ccf5becda91b97c3ff4b068a71d8b1492718c282e84932578fa10d3500c35a25f62781e3f85b5ce786530a5e95a815e6a58 df70cd2bf2fcff4003152bebd49e7191a31a298b124407e39097335e5559b67415c7c695128caad080553ebc9dcf39f80fdb4b1e6f119ae487f809130e177586307004c46ca5d6e669fca92251d598577a9b53975f19a3748b23c429e033e27dcb4b79309f02a07063e4e5c085984a436cc61d86ac36692066c49522ca78c4 4d0f4e94bed0327104958798f1c1e813727b4e5a1f722921b210d9e55debf6b0165b4139082bd20126c5f07bb145974c776bfbde92bd0b258ecbf6484bc8e7fc85594a68f8f21a48651044d367f0dc843963d4676f5ab892a4b2b54c8ad5f3e6ad73d32247495e2df10a4b937d6a0b3bce9828bf147f845e2edf9290c605a0 24452fab80be623d1415433a48a2fda1ef272133cd4ad4cef69ff078b3d1036abef3121014e89456446c115a7b5d5ea3233173239ad9677ac6f2bf1afafb2c47c83443ab90b8e6558b7861d38f1b77f121ed2a4825e9f5a41f12ab36e1520244d790ca5823aae2a74efc30982a47c761bd8870699e70ccdb5dc90388b2fba2 fc13f32c15ea3db5ec31cdc76c19c1ffd71590a2a0867e30674d9e0f71239f36e5afec527e3b67bd50c2c0ad98a96ea16e1306ed31f807a2b08bb72adf690974e8fc148b559731b0a2cb98b7ca2d610db0ea0c875891ec8e12be3ff4d16658596399332244d9a6468e501622caa053ca43ae0e7b9fcb9fd98b99d964478b93 793ceefea54a96bdf2663c64eee639375f7d4ad7127f0f816ec8a7512b83b3cb83e5b40c7ab4fb1afd590008a522e548e39b64f5d31e42b15989e736f9b0e1e542b0b0acd5e1df5fb712d66e939fc2359f720587e24d7046f39ebeb464dbb353d19cc64ebbd2a3463064d9b4ab3b9b5de3d8805aa62cf477a18359c661a199 0d27393a1dbbd7b38b4b56a13e9be9cac64b5edf3465db6f0773d65e86dae5dbe5b6dd4b579c532866fa94775ad1d992e20e6b828a68536a7baed097965941f92130d454a17f1740cdf1b2fb7537d1c02e1ffb06e30104bbbd7957c83a5bdd3af99819c0d2e95894fc463a6111532457c72e61bc801e1869d4175b2a6d031c 82bd15c12fff28c31f766dd362ef74960e2ef41852b21d5b052bceab43de4d7501cd80d0ed60613cca8b875fada6d3746b8e6cea1f0d507d80a2f89bc42e75caa36da8f7095189f81c87fd24fd533e0528b942cccaca578b8481785edb2845063012ce78aa93afa6a8b39139b1cdac135d1a30a59a3130275f28ab74be35cf 8fcf6cead29c4295bb3db61feadc8f6e5d333c81c133ad9c765f3f432cf31f0ad3a1806fd34f409dc6537c998ef3b63253012ccbe3edac76663602bedd2c28abfb1f3f883b7383ac09dc42802639ebb83db822802b53214963eb988e4d1fb430c86445d4cb24d2bb3d7fd7e191a62221a4e0c24d2af499655d79ee67d642aa 49f63fd82a7cc170500f964c7c33165291bef814a1cc0362f9b36e733049e9c0030fb2679c75b5f4c36d7e7b4b86230f8ef88467f39b772b646344e0c3f010c3d1e0e32f58d91f2501f47184f5106ff250b431816d4de7c09b0355718cd7722e531cfd1cd922730b7f71db7b882fb52f495c241bf1cf4f0ec77a059757d2c9 7a9fb187d48e997086c55bc2bd04a061db81985b6a37f721d7c55aebbc36b5fdf99558d07823f53b007858e38146a62e5ca25f100e0d26f644d2c5e5949afa8b03d322f626eef137a54ba8ba9937233509e3db69ef2ab64518e57ddad3cf3f230b7b889f613e9037c49ee18c0ed3fa60dbd4ffb887d08619711e2926f57f27 1dbc112d9cb068f7346236d0b168e31728f3c005ed22beb18f0708c345c23582e86e4306c944e1b2183013dcf7ae4d72dd6705671f6566440ed19622d619822c643e98c7c361c78aa1cf4d216493854fb3ef4635c3c265fbd43c6096f3eb459cbc8474a44998492bdd286c14e328df8a73e421ff5ea5ba8003fdbba9cff842 2e0a8e32f7ea5c60be79ba96d87242201c0e83cb1db0582c5e548acd0e5c79b0f6025521a22af244b7490a8aab533fae10d22655c08f65f36ff668811de6cbcd6912b88f1df605ee4ed92606e405d44338a781cf0c55b55e1c61dca12c5b6714e23963712a6f6cc39976d3cd3f5156b0af67d59fb1f394a0909eda39c97cf7 e96cb1a12606dd36ba6c07c41b00f5528c20bbce7acebdffd14d298ba83dd3af61a1da522b4ee302a811df4878806395249ae13345294501640f8e5c9192b616a49d5d1bf30c48315b33def4ac77ad6291be2be111c8bceb45463d961c5da3a0dbc6e7618c7478781c84320bcc32ba0c725f599ea2fca47c9480617c03bb23 9426619c2caab2547fc917066e9ad80ef1d0b365b859ebfe662c81fe19d3f7beb819c3c122a1b88d6df0d4afafef05ddf49cdc2e8802432d29eacfa8f3d7dfdbe3776179aba4dc7fa113b1a63bb6ba896516adf6a6ab2e09feee2b93a493f0e65f969d255e24f72671a3f76b27cd20a86d0438a0ddc70f7501973235d99949 14224f86bb91bbe36c9a60fc43dc75ee6901914cd332e1d511c2167e748f2f8b2399f33d52782b6a587617d6eb0877ce02123b097af276d012eef72e8e785477cd37dd04a287a0d1f9d32ea95e12a30408dfe61efae276b3569aa9cc355b3cbed0b56e671fbdfcad47b3249ad477ce7e823669a8e0f317f1b9f8f9c5a7a787 0d5d87e057747e2bb07378064e3b1fcf2cebf2ef865c1bb9fcb567c5c2d6ecbfdf9ec7805e4bf36e09f3ec3c4e696a2910d382497b1ea650aca0291965be3f893994626769aebfb03d19f9ca084d62d8453a637c4791211f9e4a4b9efdc6669e4b0328a33274cc3de6248132b01ea2ac56160497a19f1759057ecf9d0daf9f 054f10d9203c2cb2f2d53d357ccc1fc400be9f20481f0e2c095e2df843d8d393521d3b2d6ffd8db68c1468e75f15c4378d07783a7d3a956b4f5a9698f368059e84f406cbf60a9157cd734e81ad0b07e8c67f96a408bb246d2d47f6bed1af8c9df5bc2263d9ce0418ca8e57ec7030bc820c1fdc8f8e0ef1703d3eaad05d19db e49d20a80b44e6b5fbe8f1dca5b53e7de7a0d699a64b35ba61546e8aefe6f608dcaf4ca7e202726d1f118773d4e161da4dc6867956439bfc4da4e1b4d45d98674c395d01be779a22c12f1b9f77628399acd7e9f9f100669d57aa992434523f8a1942dd69ea3b1090474c3b9e1482f53a9e0c9d43517165416327f98b6424b8 1e37aa1dbf1d976c809a8fce1a713b625883b2233ae2e7949196d41785307e538bf1c2b1f1dcc71ac96d76bd34f26085752a616930940a2cd6fe5d1ea6599d6f3a92fa9272fbd899f4d6ae7d6173b933cbb95c49ed8ba27cbb20d639b692d9160d4d41543f504ff04ace06759403db8bd42abb37225b1b72c04a6367e2edd8 aeaa29249bafb5353331f4cd42b373f45184c5bbedadc4b31ddb226c607e1e68f82070850194d31e9368bd2881e2a9fc7760378b44f7ade27aec4ba4a74de72d2753558ef5840b8f1ca013afb4eb9272ea0a6e9916817ab0ba9691a015e348fa3d500685ff999f91c74a9a72ed499b8efe4b8e5bebdb6bf6557dfc8fee44ea c6c9c94a28191c714b524c3c62eb285b0b93dc4162d13c1fd1c3ea2a6209566f2b8d8725ba60ee78231fc7f7d54b8f7095575453850fa30fc4f35ed7d13b624d9d4f1ed0c624ea561d8362ef397d31610e06fb18c2a64dbab31df2779af4134756f1e1a0de30f9bf9a12a3377e72717fcabb6de9e207ddc511eec03dae3f3b 9d710b9c5df8eee0773ab5af103d383a83ff26f92d29702802d3dc7e33c53626d41c06459de547d9bfe8d62e4adc9aca779aac7048954a42a97de0c13aa3298f2d4a1bcf6c3b012f49ecb90fc37a17c16e35a81d04d5fdd3a8ebad6292a1cd5edf831a7d3ae35045c12e3e7ecf9fbe2331dd8b7650987da815f01f9e0dc261 1fcee1b811987a752ebedd4857bf39c2688ebc2235c997ffc2e2aa833f132b61241c48b4b84c61ffd4fcd3cbf7b569e42624e02e80f471fb1fed83e9c6eafac8ea5bd0d33b033661bf1ac89a13056a21a42349a37bb094fc5097b306087a77cde8f9b85df6082d62938f539cacd3bb3eb690c729767712801c272ffd0bcede ae1f2dc6808322930287a020a2d843058e4b562cde75b0f37ac94fc9abf0cd7f8248a1f0fc70c3d58c21064018c3ee44272fd8d56c6527af50e47cda397ac4cd3bcc365fd8f441af41edc41fcf081f7e73f38f98872cf95f1915e66c43f06c68cce9868e69c570ac36a2bb4d818a46c985804fce150637749cde4495cb2620 7dc942dbc2c929f80313b14d27327fba035214d915282d319d8e36e243632f71cf917ff964b97d26a00f793e452e64fd4aa229b40755011c6016984fb12375b74397f7ed824ebdf86648d9997ec708f30f985ef7f100fb309148eb12dcf8a6582c1a1cae6ada5e06acf0a562d79b78008575a547505182630390d4e0c4e1fd def9e529d96a92bb602962f54866a7b29107c949f1388013093c3e34e7ac8351249d90b30a60587cf4aa7411b1f526f991d72a631a2105307b12008283f5ee36baa88345d3859d821b03c097ded9df4122b0a4b294350fa3404179ff2daac414a973fc51fb4a250d320aae115ab384726b2e1b9096e26c864df7360b516cbc 0afcdca17101fb4f65d0895aa2ab801a97e26cf024b656ee6785e1847cf2b135287987b9ac2efbb673883317ec4886551a892e83f1be0c61febfaec860736509d9e9b4c756e7a0b5ad5993266aa6d1ee11be77d8b90f3fe2e8a0f9917ab42d28609db7fa218000d840d7714a9fc30c41cf0a7b0b3e78f7ca7c907b289b5fef f4619e200ce56090a0de35544137c83aee3c6289f99fbaae9ad8ead6416206b1c03ec59062ddf5ed123b37e34948cd2b2ea8164b06be73d0d54cc98304d6432a3f6f3bf3f6d8ebbffdee3e47bd9bd22c4f9dbe42a926c09199a6b17db66b61c0593d766b7bf2aa63241384c0f32d61e020082118e08dac70f5034dafbde839 db49b6826cf37832ac11829f2aebba2e06bcb179c2e6fa5b3a1a4976081469d50d64ab44e8e2f94764bf3c1a3454f057fd45ede47c9ebfc034cd07cb5d6eb2a27057af83d6b123402de65ee88fd55c30795270d122fade06b80cc4b237818085e62e2b8603638b910baa4e5f688cb31238568b3e6e307ced895a6684eb7fca bb54c91ea12e6a8d996868adae73cac1237425c00ca1c09a1f29bbc89e59fff8d2069916b51976c89aaa64bc58116e49d92bfc8140644210bcf4b3e785a2b6485ddd2157815fd425d421dc69e1b8f1ea1bb6fa6380b9e27fe67c792b05333acb05aa8f95323eae7ebb406ecf96cdd213231c943b02e3c3385df462e6c1b504 6d58f94cdd30ed7747797ee142d44968ce450dd46352003b858e73e4d07b0f1d3fa872d2419a88be3889f87d7ba0d31052cfd4f0c6644f24dee7fab7c9bac7d8043a253c83d4fa4f6a5da82868e43064d50924cd155ec5751f44768e249c96e78bf703fee7b49c63cc57a8097125e11878e8410487860481077a950605a604 a65c43e955eff1dcafbdb807afcc4d780b9cf39188e217698a0e09b761b3cac7bd578ec4bf5169b45a5d82506b019b93598d01521a00eba75863aba9e360fa24e90bb62a02f64bd9caf4339f787ed8f2a0e6be587e622caf7c9994336a16f96c1f1e82e932895100f49cba410bc594506b6142c2af6aba49dedfcb99e3bd23 f6e1013c96f3163c55411a4b64ecdcfe9c718c931ddfe9599bcd6670e831f6d7c3451381a44e6c83827aa688e1be4e002ba0251555756bcdee6488229d4ff0b6462a38acd17990788293df3405b667a9466a954275bd1c148125fcb5623da03027a61ef99523cc99ba5718f25e3c124fab4f38ec79b5157739bcad24e069af bd59ef843125a07bd83745d9664f79b412b40ce53254308be8672f73f7f1e047107f5e385534c881479fff9d713d26f1286de459c153c6328ba44e526d3bbba2b6475799e84499195aec9da34be296b21002c2182f826bed70ded6c5234c13ed40653c88da4e2685afc022e22f6b33989d19d6cf06cb6025106e42892c2655 24071a67147c254a904a10bd7abfe3eb13bf474ddd385753e537c97a5ff42fe7d6409eabfefda62e14e58fbe4e6a961b55475ee469f97cd04437b0fe4375a95a33730aad517b540173e42042e4bb38bce522f68138fd35cd036a986e36e9e5e9b2d2aa9f6fc2ba39816738104bc9d3d12843773f51a1e227e949bb7981bb16 b1423ab3cc0dee9a025971722e0078f8e2a505dc93d8f5793ddc91683637c7892041a465be94741c335c7cb30f8d4a195c6fc350a99f665afb964248d63dc236fab7e201dc6400043213437147fce4f849f598fa21735aed8a5e42a8bfbd786137044fadbe0c41d982f312ffbefcf9341f6f1e8d18374d933fc20f2a5e82c7 08e707763f9330014b7b6339c71d5f08041fe1500e268da79ac61e24bb4ffa3967242a8c688edec625ae14379ad5532b33be8d513db0405915da79141c23d0f46299e4e39fbcdd4704f9b618b1e73b8b618f1b9d53b31d34f11c91fd786331c0bce3a63575a616d949044fc241a125b4426f185c8cde39d68c0d094da11440 76e777c9958e3e9db8e80afdc36f30f1596766bc7357c5bf4400f843038f0e9dcf43b0207227875e306b44bfa7e2c92288880e76ca80a24975be7a55bf27bfbedf0234c20e5f3a5dfa7cb174e4533d7f685f61dbf1ef23318537332896866275b60ebd8a036a1d01d9cfd8bc6e7814c18e928ff189405ae91707ba995b6a5e a0aecabd94029b34e09aca3adef0c9f48e362feb00caf969c5922a54003394abeac728b7d68f17b3ae58f6503b8697ca4668ff9df3f328d922f7d6e3a58172db6d1bf9a1dc110059e25bfb18829a0121c417420676bf90f37bf7e3c9eb7e3b65bab1e6484935ab1cd496932676a33c02829cc39bd386074c9639be07b4859b 64af2b428c79c25ed460ccbee77725afae2119b1f9196cc30ecfae5a9effa104eb71689f2e0afa38ae1a5b08045886aab635e6a62646a1526890cc276b00828db6abfab88dc2f14ce5966dff518693813396d8d0f8cb1f437a800e5150b8fdec1d431f81ec7cddb4eadf22eb3e9c0116d36e175093391668d3befe49194bf7 fd4dc5a27dec66c19d88bf40e0abab2297ac18e63daaff6cd571c717cfcd79e8c0811f4ba50d191d7b0b92bf93228b3a288cc363beb68a055520e8e1bad3b65b7c9acd753e11df768a763dbeb8df640a788dbd8659f44342cd17128ff47e1b372c95c562f1d31211ba6871c8a877ad39b4edbe382499b254b778d6c01720c4 b86f8c3da6f212cc62ae297721212d9e033935ec7130c7a6f98bd28a8028c8cc5644dc06a1fddedbc0c6ca77370ac2f016025bc2f53663a7c83a55cd1d21fbdd983fcec08660c881ba1d01b2d2685eaa278213f71a58e07eb2892a0493cf269963854584f1c452d6762aaa05d482c75f61bd2d13952e3b04eb359d6204ce4f 1abd87f33581b93305f67bc32fd92779ed3f95ef120fd44207fc47b3e8ad65f7ba4a22885b9d0d217bf34bc169b738abe0a2abb7a0d2465c95d6d16526937db61b8563af385706f1c2f970f13e321e7d8621edb9e444f2a3a9f46b2d9d17228d670e2a131e016672049161b837730cafc10617b0d20b562dc85b97516a64e2 0a38952519dc5d8bd2827a8b8ab6555e2c86a8a3e07447e0bf8e0d393eae352435a70ad83f38bd657820e028c40e2c7267c91b9826f5210737b6999ce841410b526f8782c8816a612c8b9457fd19e41c9ce4972946738f6461d33302be7978e8bbf9aaad56f02ab4e8ec01364ceca2bfa62dacc60e7abd9fe72a55420f7c89 a9a326b55d239a3070fc4c316cb852c7f28e4481236af2caa71ed3a8088a3e77e027f8b42d1bdd7e7334cf2ad3be330510ff3ab45f16cf114415a14e104c900e3b87afbdc3f0f3af28f25306c1416f314138da6e4585d16cab538c6255284c4d05520a1aa959b62d9d8b917b44997ad2abf563ed70ef00beab3bb9562839ae f7e4abb3dc9f5e5734b44bf7dcb257795891325bf746a9ced8ceeeff486769ebcfa27fac8a2353947b2bd378327dbfddba3a67a378099809b6c6fc5f4e18ffb8a7d3e1af912381dab3113ac87a24adbc08f1b6dc8076a29b88932918e8fcbe52b705daac632e176e6044ee7f4587d6d0370532c702c9dc92eb3ee8938c08e1 e23a9e1ceefbd05dcc3f048ac631e38c6b46ace97e893ec455dffd1bb3873b1a85703126d7bf0a47f5e0633bd0e7dca7f174137cdd5508bd1c6493cb7b619f482c541ebe705f83c03719de967e083f1c9e3a4e357155a4b20553fec360ea773258ef477f8952c5172b10062958f72f2964f653ead7d3e1c4b1c9efb2bfc324 ac2de310776b8cd5d910afa419c441ad7d239fe39f6179d20e0bb0db05f89ef02baaae6d53f39522fbc48e613aea450926d42560cb970b2d18c9ef992aa73843242fd5b3730ccb7da14e6dacd48cf0e08a22750ab9046034f494e4909c07b0e9de13794247f497e5a0e9c1354bbcbb71625f19a5ce5d94cf5af1ef5ca0feb1 7c0a097882d41b7889a1e4da2476abf38521c490bdf845ea0e246da370a2f68029f4ba1ad7c183b442d63eaff498aa2b33604edb786030d033a37a251b09f55fa77b88ca7e77b0f9fa91e323049b344c82ce7d79acbeb379c4b23a8510e20566878268b2d835273cf5b36614528a4693960b27df4f0b93458dabca1badfd74 0c380d30512e68713b88d193899de03552567267a9f99deac408fbb832258bdba1765bf12c0ab5e020ba228363170cda6aafbe8eaf50596aa41635d6a32dd60ae3ea3dc2d2850184fc2e9567e2d827c2509386b01a10d255e317a2b5d7354d325d52c542b3b3fc740c9872bced1b4833e7f2788e959847a002eececa271dbf fca11fb781880c82f5ab623456e8f70264de2a8ca5297ee960cedb48de05f41a66a5b4a60d427f281e71e19a5c2c176a004ba276f6e2fb8023227a8a46354938c656e0d1fc9b6d825584b43b73ab00f3b2b265af5a56208f8b8392cb954e207ee90e73782592cccf684d7d3a4982fa925195df7b21cebacee35227e9d58a84 f6f035ceb665160084ba5dd53a2a1f5614a5830c28ad191886692067d5e2a505db188afc8e074a0c8d31c6a8726440f841c53a93f87f0ca724a6a7f4dcf166a376df218596050473e3eee63a9d0a1f40f9a59dc400dc6688d3fad7c7637ed6bacd16dbd80b27f4f8161d38c70f2f776519abca443e2ea6f6668080ffffc680 81d96a16fe53a299cddc74f53169a10bf4c09613d88a6a12730e9728d00f1bd91efe8bf2331885589c047b1a94be3350d3afe43b35892c45c4d7dde587c1adbfe18afd376aab2ba652c512eed5ebf8f2da844fb30ac4c86dc0838f204847db7420deb9e059e185f968d134a4a7a6bfc09ab4b93e6e1cae167f6c984cc99b97 c1feb59e31e3f5c87979ad351a5497554dcaa314aa4d35cd296d372e6f9344655cdac01a7c804e6aa229fb65684e7693dccdb7bdc018e9eb5d7c4eb739cde06ae9833ec2aa9d437e226e0adc91b6e0f15e848c36d7f61214daf57bc1bb10c51f8e2d99b0d8d04c68572da6b5ac1871911f18f024e80cd1c77e2b1596b221ac c4da476a4a54c91097d77393a51626b2ab5ebefc17e69c47c854b856a5b17402c55ad9c587509116eb49b3f7629b64ebd9d6a49fdb03318238de4a7a7351394225a80f28bba86937399ab6b1b02464958ebb832d3c1843713309ddbdda3afbcd1f2abdd6510075388585635cbdcfd6d3c59f71e90b287daaff8689d0a3266c f1470d27051f024eb406dd6861b2212026cb1cc188c309dc1659309c970b6316b066796844e605e606c7c050b548fcd702a7de57df2656ad727fa271f9ef79393c3fc8b2bbdc43214616c3db1587e317676750a3c0ab61b2160d55d18614e35276cbc77d0bcf0a5b14301dc7d6b5ca78876fcd00d843d6023b52fed7c390c6 4c68850bca9f1623ff9508c312fe2d6e597850bebd23f705295e606651f021e1554810229fc9a98ed50c9a61bbc464ae8c5c6563a0ac09ba85a33f7ad555b51e59c32c7147b140822b9182d29521652ea64a22e40b2456c6044d28cc00f835e83d7560a146a7ca3d76911e72d01d69d0eb8a139c1fa62f69aee3c9642c08af 6cba103bbfe56fc46451d775a826f54a949011924ea3ced9d739643c9ce3a45ce94998c69b6baaeb5c17e12119ddbeae483ede540c1912b153ee7522fe3f8bdfa76db94eba99005440ddd907c59aebf5cc76a7c5e1a60d40eb9e56a028c5293356a7bbe3cfb02350dfa177525c7637d885f3eced08dbbfbb365d1cca0a60db 572d07e0a6829ce8ffe562c04553258b7ae406546b8d9a676d931f30355e17963a3f11eb4c9e190ce2c28347c164faeb9051a815d47c2986ba2cf3094caf2c5f64a2422f2222743c1700a21b79b1ffd8ce31a3589239af38be807dcdcd355c8e7cf3e8671764bb23031b5ada1acabb63928267cd26b2c9cacd1b4f4b0a71c9 426161788e7ee7f32fb5520ab759938beefa4fcdd968bd53701ae9c27429b5d6e059342b9adef7b56b4c5eee2f46e0cd472d48f4b9d47d04dd0a390f88a2be3e275b65c3b7049431f94d850d63b2b2154105edb0527a4f712cf523b75aec52c4816683d59ecccb03a26e151114dae625f446a713af28d7d8173e4c44624ec3 30f84446f46752fb18ca83e19392b1570739b4d02cef8427ae082b2cc31d8115bc18f2d71940437f77c1f98046b243b41f0ec5b8db811f1e8785fa163b58703e813161ea55c4ec7bd96206f318d2ca177d2d00df885cde32a2c589323bb40ff941da9726655daded4d7758dcca859606892ffbddb1889a4a0b2cca0470051a 799292acbcf80ec3d459dc25208c73b0923bfa81e73e558c0a86c805bc450293ae9fd058a5f860074c6a200517a59c51582ef0c3ff883ab42cf184e7501919c9249e4cf3cee68a5df88e6c3d25f865df22ab77383427e73fc409cc5f24112251389c58d40dce86648cbb4abe34ca5aa1627202e281aa2261a37f6ab2e46856 cb978aec861908094a865447eb1db7460287e2c4aade4853895eccbab40eeb427631087b3602286d2d2756894d74753afd3a82e61d33cb0cf748dc9321d7909abf4c362a3d00f1fb2bdb29ffe13427db353790f94629ff9756b2c3a4fdb544946d95d67f0b8e4253bc0272e7bdf1b84ea04aaab353a83bc2db356ef30f14d6 ca7c6a280e8305a8874ac689d49c297c6a71fe61caa17ca8c1912701dced09cfc9436ec44c18b239c173e9f235e301a9aa2b23011d64a84a78d6f279e836257dee1dd4b6e44c92b06cd5a1a14a6dda6b7edaa4581203049333fa934279f0f4978f3c4508e78d348fd9f19ed2c0e7e39338b724ef376e351659dd0ced44defe 1eae9b5e53a8b71726c08ba2660a50c5a2dfab6453d60d03662addd8aeac2453a1366b46f3d8133896382636aa4b401005a3fc9dd7722badea24dc1388fcb9ce23bf480621b513ee70e2d2cf1493a7a32343bf24cca354f6bda4ce719baae7d2563529f3026a6df7fcc843f735d1ada133f59f131053bce12b4d5f28bf87f9 52034379a9759ea86ba5ae959d98408305b3c4e03142868ec2e9a7474a17d67964c115ab811f7a6b11425c1ca749effafcd6fe5e2cd8f709460902a2cb94111691d1f775142590fef526b3c7c12d0c525b7c95ac270a7375918c01b10bd5c0fb9479d4d4ec1cbbf11b893a6f78dbef8aa7e59cb014951015c89341c09e09a3 e498cf9d17653bd0d93f4ff0457e499988e5109dde6b58d09491910869d7fd39d11a9d5223116b05bb766fcc9083f5f70a9d061d678c1655261b98b0697253b5e141a9d47d119384361241f3a1bbc7d80e6a454762e54400ba253cc72a37e27504731399a4d0b32316c32ca317bb22b4663f464dcbbe0bf81e1e0192c24365 cca2cf7f329ea990a8657775a2bdea4773d2f61f4d0c75e3c5d85064ee3b042204b77feab4e3cfcb7877e8019c7a94c69e309c617dd1fe9faac9975e52cac77342e5fe156a5660abac1c3b4717779650c8d347322e8df24f47dbe690a78683bf67c01fff514f6317f8e52f78bfd780459818f32ece4124f16c6d43877e9d81 e2061bbdcf8dc6aa52b9381528ea453ca9ff79a476a157cd2c5fd48f21421ae7d1447158ba806dffcc23cc37182a1ec042d8c9ccdc1457e579a1d07fb1ea4b76656e725a1cd26d675ba20ca83500ce9833da0c6125722f676c181164d442058ec5554c11ed6e4fdcbaba1241ff49bae20dce32e390bb0b50c2b815903a8e8a ffecc0676f6e5e86fdd36360040c9910faf0444df024d5c7bda00c59a4515f928c93d21a94ee872fe678059c8630bf7f81e9ae18c367456942f630c06cd0964b9684277cd2be69ec352ecfcdaf9b831dde441bc3ea50b8017590e68a79ba7eb827756e43d0ef9930cf498081a35546779536fba79bf3a27f05d32a905e7059 f9f021026254d242c6660df02c95013c117c6d24ebe13841361d37bd46ae35e9666fe1d038ab598d9d9b390cb84f392160e25118164d28c6fd26ba993a34e9c43438f23f3a0ba3ca8bc64930ea374933d1e78303222529ce0e863b6b23e986bf56273f3fb30e0713e480e10db649efbaaf6e1639d350b248774b104e7faebc be52194905e54e132b02bcf999fa2467d0d35b913f81b23b6779ca937d80d225935e3c84bc5d0351789b514e08a6371a092a3745c36a6047173ee1c00f08acb111bb0d51ff4636fdd5278aa4c47980cf4782747aa0f5c48f95554977acd04e4bc95e9f3e57c04add8299fde93cf0ce05f03d5f795572892abf04d5e9350c9b d5ab7dfed8a30a55b73abcd420552acfe07a306333e4cee21e14eb790d3275e85af87db5ebdf952ce6a87fd1ff3413a7dc2ae3239f5ba51638e0ddc0e8bf8cbd73352856d0c71286c4670b24bc7e45f9e94afa897b24fb32dde0adad6edecfda7ed4ad98e2d3b3ab70fb48146dbbdbba0cd135c5eafe5a39edcf57ef873d52 cf6924d2b449d199e3b902bbb475b7753ddd39f211a7fc6846b6d47203c4560a9b2304c86dc7a45dd5764d150ebcd4154e03410c453ee7e50b9156b7c1100534be5febc06046f1c2b7b28a17d1bc83a812ac100233b08daf42fe4130b7f650ba2e456f83c54b688f57fc4577dc2433aa2003dafa0390fd8d554e01b4863d64 55e65dfdca016c9cc4df2749a736829211c192258e278f8e7b93089554647c545f50f5e7e2dd6addf75c20574c96f8182f102feead3f2fedeb26ac1dc75d93296d87c2983402551d21ec439ab0221a2c8be1f6ce0de9e44eef0a2e21f7471cc2f2ad9be8682b4f48e91aa07c49743225705e541b09015788e511ca78a1d537 044e211b7b69d6c3f1e5d1489f9d909b08ad05a6488c79ab27578375b4ce7187646501dd31e0bcf7eefe884cb43ffff02dd9d0495f9c896bf2bedaa1fd88cf2f81a2626e6b9ff3640458b833ad44c6611695a9bd5ccbd6bb0f119d394b2ab32afb571a9cf3aa3119eb6b653d746dd90a8a79375474d96fc8bc274ebb15525f de953cb11a30556cc9c158f28d274a1b0bba86edcb16deccf8ceaad0e6e296296d3650eeb9e31977631147dc46b4ee8e98a8f2dd98dda6bc34160a90b0853aee24b31fb51bb9e59648d491708295e22c9428539deba079170f84a0956e8e6d85aac3218b2c0cb14d86af8512bfa0ee21b8dd8461716d539129fd604def7e0d 64299308cda32c03bb63a5bae0465938d656fbbee6218080c3646853e30553b4b7e413be75334c607ade51b0111342419e48abf43a336fc56d27f1d826e3814376c7981dacc200a068fcd1bfa7e5466766fde52d26e23f05de090b134f6abc8e7891685670b646e3f08c5938c058a0d28463643895137745ef1cb9ec10d96c 99deb3909b48b545d9f105e115e339543e058fef584a5eb28c465bce0972d57704db6b7a9a76deb1e0b09ef4102586e99c01f8e5b4ddb6871ee426e2b14464d4b0f9fb6efa1d26cefd389e7e3abe64f472a7b26cfd2d01e925e55d8e16b1a3f724cc03564f4b02a95c1159b9bbca97b698489861f971def07536dca84e9893 9f49e1481e717384e4af2a3d8401434857c6afd424518f073a0c6611d0640b381c7ecfd17e1ffe8ffeeaf029991aa8b94814ad301cee7f9ab2f81471747d55c3bc61ba3de62827cab35b11c70f6dae3ecae2ac474b7cbfa5f39e382e979b63bd4a11de546c8be9b31773711b5e67913c18226f84643afa17b91d9b324a7330 9a38ca8d98cb7f004bf1e9b587463cf9210a0a7ceed051573e312322712f5229a7a6d560c3503fa045a0682266b92c0136e0b3c29cbfd6fbd95c6c9c4be00480e892590bb12cc2240c98813283f65ed0886f781f520d36b037a7d08ca5513d4a90e4a883829999943f2a7fea006f074c898e7116176671691a2c95ae13f83e 394c79c281dda817b542b762a39ee76e224af79c6a43776f09ec76604d3b4b240f0bad91e4d856e61011dfbd53c06141def0d1d0ec98123831c693cec547a0194ab274a7a2b9397b490f2dc1da0ec2d0c180cbed2ee5fe7e366070fffb3627eb8ef42eb9469828472769c2ad188584487254cd2af779be1f6730684cbfff9e e6c1b7bf5ac833e7fc34b7193f9d51296c0d719003471533da36f1130855177b7ed3e60760155c86377b20ab674b69e32365967e28703e3922b23a15b021091e07c0b75fa538090b235dd96be442c3baa1ea8add831b97d211c2ff5b3fe53f038a1c12144dcc8361c31ffbcbab2167a4f0e51da23642480214498125011a1d 711771b41153fcf6b934c0c25c35d5dcd02db5349dd083518aaa14f32543ed076e9fd2ebf53d4e88892feca7b3a5189470b21d142b154d75e1ede154bdc78592ecb14d82c6715ba1624088c2b90357f3416c01b34397aaa942bab61df55396ec5ce23407d3dd3c2eda7f107a401017f232dfbd1b150f6c0ec3b93152c74e9d 2591f3c6909f378b4947de867eba25f89d9e69de798b652103bad8bd49260f8492b622c282d635270144a12d58e0492713ed4609b1d609dfa57b9201939e9f18f524b019357f3cafd9f6c12679d8d9400475f66b93ce1135667370068a5b527dffad644143fe8741d56807e046368b91dd66e75a88f74637d0b5a59c04baab 6dbf44b5b89e702e074d7dc6feffc48697a74797d773f4d8c960bb99344bd458751c4754cc2b4eab9c563b750098110697e586fd3b9c4bb33296e34de4ec1eb86d8974722e53559e301495d26c3197e65440582e5f54dccc5dad10a14cce792602c8c6c7c617f55a759981e358bd1d33e659d5c77cf30687e502126429171d da8c596be3395a78af1bd6cf2b643c2de81ba7e1e22078c91746a3bb40adf99553ed61c621e2b24387394f18a66d7caeb16daa0ffb60ad9b9d425090a9b6a5e0d035303b137fd254cd27733d8b67058685fb62e343f874a7941162fd5580cadad88c7608ac4487a0f14058a9196d884da3a1916d7079617213d5f89db244fc ab39c41bd7f51b18d9c9257b16ab12b8d921020105007a5b2d02421a34af52bcd2ddde0f344d50d90565119b889595dc8dbb37c9c9b8cfb965ba3839e735ff91f72374c1eeeab92d472733a3d6978840ed61465fe61979ba2379029ba59c50aef02892a39d8320113f019d32c34c27312089826ccc562fb970982fdd14de3b dfe77f5ae32d49c99adfd6978d6aa7fd7fa6071073f8f9bba55fbc95b54e7992b953da492bed8a5728d14393bab1f54e739de8c3025a5f8b61d171255e3517ef9e19314b8d107c6ad9d41f1e40ee4bde3dfb0efd4ab519007a77b0e023e08492a6de7155233d041d5cf7b7e9e82039906ddc523cb8810217bcc199925f31b5 0fb6a8d47d3ebeb1560f5ede57d549b0763e0c67a40295b84e8ab7692d05c13989967e616a427dd96f4e077428125be951b10b1e5817cdd22bd232ff958c526d256a5670e3219e6d2a3ddeb6e1ab790176bada7032aeec3a9aabcc2ace9aeac918c01f337455ed11cb724e5e258d0628853eca184210dabb0c6ed6b95023be 9057833399b78aa2aeff5dde3f0aaa2c2009f9efbc48eb0d9d4765dbf07b4663f228ed941f59a76d55fc9f67c07810748456b8e334e77e6d4f74277e9261d9ffc2da1cdd3128bf863691fce8cc48a100359b65666ba38069d3b29912546ea0a16e305db0d1545226c50628d4f6a08c408d64f2474eaccc41695dc2aef0d4bc 683c40a3f0f94f9948d58efe7822a240e172491acdd6e8ca1b68f271ac6dfaf2e1705951485f15f8b9432b9a72e8c1bfbd0402a0e50bd3e71cbe8cf62503794ca877ebe9dbfbab545adaf15cc37a2a97d01449214036423409ff042a1dc07ad4882dd5a8d10b141153e451a4af2c2662bdc8a79061c9603b38e9b5ac67f5cd aacf5fcd6836a2de4d2ce94d9cfff1c2bbe4f98ada627d7f27b8d44b7f0e37393c19ee16038dd6346f5e7bf07e0cd51f3604732359109b8996146c40ece11bdb91c86f4b6e7e74d8d8918b625705ae75ff05bff1dc185fdbd897241b0b74d37591875cf7dffbd6da4a4fb3bb516e141f0f7ead76025343d328965e3315df4f 56217f9f55afbe29bb5523ccf7ff4aa3f42889a5f3e85a7a22f0475aacc8c4fab17c4443ae7a72024749c5a40a5bf8c82b4f58a8c09f9a4ee0cba8f21f1e178e8232600a43e2ff86c61c5982227f95c93cee2d4674058d2127bf050fa113d478cd1485934eb9e37b55aeed7cd56e4db12cbebe8e666f679824c09ecf92aa2e 09fc84edd85473d49de862a62f78ac63d87d53e61dbbe5b74932fe27e2b8fb73d60b154f8a456bd2f570e94ed58bd8201e460eef859d800c58c3b59d8cffc122d6a334d96f52cd88491ecaabbc25b414fc2b9efee56a0ba1c673151ff35de2d810dc1c7b0f9ec2c823a8b8d835210cdb55cb2e959533ee6b54dfda46722d85 e3794c50c5c9dcf1dd618b2035e8bb8f0d99520a9864f2e96021aa1db1aab35f3e32e45c0bb457e5e117f313fcfe6938b9974207c10775f906eeffc4176fce43c79cc555edb26dbd02c54cd3df65838b6ce17a6604ac71036e882eca31325344fcde4371b928e47b55595bc299827908e617bb4b82e5bcd954c439c84fadfb 0bfc9cb00ee1e5d41dac337699fa4c49b1a3d2214aada8a7dd63dfa83663660094d6d753493c1310da086f069ecac792e1e8598850af44f9719912be8463fed1d7ec2544245f70b1833d1af7114596ee3063e3ddaee634022a6fb39a0a2137681fc136ff3a21ff9d032089b9089a7dbcacf55945108f30607bab327a9de8c1 31d1484c2463a8ec2e7072a2c0b14617e2bdbc332113a1f3c5d6f680af024929045070fd4d49f1d12015f8049a449835457b4b9eeebf04ed5f805020a428d607d7e4b8c8c406ef9faad69fcbed1ae04e4d69eaaff06b91d73b6aafa2f6d5378daccd9c6681dce4383e48501681ad611917f734b3d97174c2fc5c32bd3cc987 172ac14aea7ed03f4ee707ccbfcc64b29d2909379bd95c96caa59217e8e33b6ac95e1218d6c3ebcdf6479c7f7fece2905e402a85df4430e44fe77e8d6ce4e4ada1031482c5e423dcc6c1a7b6dcf308b2f5a88e8c617acd02644ac99ce42beae85ab78473d01cf6a4830e8e83febacfad50fe475ad206654e567d26abf4766d cb8e75a9f62aaed4cb0d65d6af505e05dcb6f2e9b54f76f2f40f6dbc25b60d647d96133edeeb0673f74bcf1a3bda8c9c74f92f7f3f9026ee2b84ddf074d5b0d305d45253a56b33cd66b515e4a747c2ea5b53956044bdbab253d8a52fccaf0d6aa108b793840f6d0daccf8839204daaa69b3cb2cadfd063417168cbe3bebf55 719fc878f02aaa2cdd1d32ee97747b5f5adc46d13d15e986360ac7991e65075b2cf47dfe8d35c9d47ae8d20cf5fa1b235852660722e87179910378bb654f214666338884eb2f0bb7524bc12dc072cbc192520c7c62a193b5649b3993578d799eae9cb034044e93b61f80946ec63ce375443d8054620fadb5d3c894f1e15b13 7adcdc4de399976680989537b849876eeaa2b443433a4db069e42eeec7c596ed6bcb020dab6a476fd5aaf4c3c2a3bbf301b249f5a0a8bbdd54b328d13f6f930f4a0fee218be4f192a8854fd9ba70b99a30f1709988abf51cd282896a4542f5835ffa7b9188cbdcc381a9400911ec727fa7942d47405a469f09552f51a60179 81a7fc216110b492662e23919146a0baee38a5526705a1434306031d4914041964763c55f4214b07a5a43bf6917f34a7b00cbd233ec93a2d4500a601b25a0b215ce4d6405e1aa53a459e6e4ecede606ec4b8ba535e27d7df3902f0517f6eeeead89841d1b32095348bb19178169740fbfc3cf2f8619efea7dcbf4b0f95a4ad 15939056f09a9eb4f79783d82c2e18a5686eaed7ff7381bdfed64f2b364c0329745148b86911cde3e293f30ae05db48637bd22d0bd8e2fe5a236229213736068513b9c8e691f7b2a659495c81a6b70774140c628586d25588f3e6d16434ec06c058fba057b593151d10c869f55797d313e06afb3fb16d01c4c291058e7583d 6398ea0cb269ac8d2aed9c9b14b5054cd1410d61f4aece806a6b3cb7d6db1394153b6e46d755c148b7f9a923db78a9ddd36df5dcdaa70d40c12fe125935765ce3297a24b50acc37cd98d05b49c141e19c71c55b9a807a0788b79d6b6fb3bbfc4312e76f50ca414895430419ada545ac3b632cb9aedfae267e75fba42d213d6 50ea89afc6259499bf1ab0cc9cc47e8a323ceaa6018b1f14561f66e6e450be7b99ef54b39eed97b9674dd6ff5967b450f3ea40f26f222605a07c5235683b8709165a57324fb8b68b0b328f083505ed8f18a67be25c64c5c837fd218f85580d31bc4a88a296a07d0f8052f86944fceb8492ad0baf0bd911e927088853a01ff5 a2fdbecccfc31abcbd7f50dd1a958512bdbb34a0df4c08fa597f1e736e3c118b2d1b3c79f199cb3adf45782c514134ae761e0b74bf3a1cb791212bd92b5d90a097425ee12161e0073ae64eb111bb2443fa5faa7b22aa1735a4eb83dfca07c7dd90aeb8fbc357ca7af634dbcb9ede0751e9196657ccecbfc8e5eacf760965d2 ca09cf01259945f5fd92f5ccbe2f63bd939ee89f2eb4bf6ffee83a1d04b6fbe2676f5a266d06b7e9d762e79f280f3acced9672c9dde6aa50c68a4627c59abd96460a3839f5a7ef734c1021f4aad7a481911e71ed9f8c7fce0dde8f1d68fc7d2ce95947ac080378954246b8a09a1c53c11111323b1f04ffc08fc330ff65c590 f5b186342c0618d617c9a9b3ad4a58a37fd8e2f96d8c7f8be066eaea8db5155607b6e0678b9f8c1d20100d4b1e5f8063f90484747f5ba080f40cc0ab075e5b6605a296c1effdd9a3db89b9c564fa2e5033737d084929ec3402e5dfb594b9c69e57e9aa53b12f242303ec7c3acfaffb3bd4a23718a5b4ccebb09e0c4c770a7c 131233f6e402e1fa7f8f9fe3b8572a7fcf5074735c984e4d7d26ae626c609ffec1e1342df9cd6c2409b1c9dfb7945914ad4571bf97b6ccfbdb527f749f09c1ceaf3edb56f06e2bb4f75a99f35145fbaa2604f339a095e734dc504e3a017c1a69c0f545d61a0b2e5eb476e64ec60e7f5f101b6d1c2039c58a383b337d57b31e 49bbf407c98f2cb09f45bbf07c9f6d43636f61f6fb9cc72b0a1e66665c3bfadc795b274b28c862fefbd8c9df6415494712f4d39b6c9e8b6840ff6a53d06c00b89fd41bb3155c38d873e9da1fdeb144c40bed42d56b7d9369f7bf4edfbb9a7335cf9cd8f9dd7d1cbd555eb8e0dfa95599d3e8cb39852de35f3fca0f6d1d24a9 56f93f4fd1a6619d112f30822c0a7fe9c2c844c5bbd59b6fbd8a056d88d22af574c272a8b0be09d988d37472d4094585e837f36ab119aeb02b9d3b4d4454f19f755c41dd926a4856bfa3c2ba360f72ad13e8d18506e30a9b01b83deb9c89b09184dc68a2bd29c54ede5444c90fb369e0ca546255d1b25a97ddc37092ccaf79 8a4df6ae1ab1f6fe5978f58ab0f12d3a18253a661a527db5e4bb6b68b35ab57f4d351b0c3143b6231ddd0ae6fc7781da577a421b15c9adcfa0b7a850be966de93ac1a1e7f0aadfb026d2d275c3d37604b2174dd3bb7982ec4430122462c21591313e0aa701a10e8f580712abc662a71fcae9baf937b67c16195c040f02aaf6 de17db5b302c189eb0cd7dde487eb7a897a006c5506af24f65c42d639d82fb78499b8c6212e32e14079c420c86ef3f0acccddf7ae63921adcb7f64cc084e6aeaea1f5c0b2b67ff411b86c6e788da96c68bfa68c6093219b2d9d80f854cb946cd702d076ce093e5d2cb2943540a45d145c0e22c52a3dc69ff278a46751e1ba4 db39a4c5246714fccf80a49a520d887a8f2e33f5e6dec99cb3d8b717b95ec797b7f7ba2691485154171352c4d8d348faaa50f72168a0a8ac4922761cdac42e9f97305e253730d6ce6bf2e72e5c88b30d86e9d0372bf385fd5864b4aa9b492333e0eb6d90e194fad705b9a9800239b53f3055eb976d6372431e9694c4e9b469 6d49a3e4182f09e34758fb925efa2e6b89fc2e7b820e8ff605df9446a6960d099f014a2c541950a71aee75677a871c2d81ecc8654518e3e13226dd0e7ed9c6e0aaa7b2be4c2af2118bd4c3058e0ca8d6043eda24c69c3751524493a1787c20c3780c51230fad06300cd2d161906190ba01956b4aed0b0b2b1938d12bd12c3c 6ebcb75fb6e0ce53dc25429733cb2bc11542715ddf9aed35302f942c9ac1bc0ea1ee18a4d1b09c32a7501c45a91881b60cea11ef61ddfe0cac4bc73caf3a8ef7a0fd5c8e6bcfbb81dc0adec060503519b151e1a7504a53cfe8f0704044c4cbf6a4c06eccc11f7aef476aaf8319488be982467bf55917a403726930d92a240d c3af32db6f83e06f3964f8b22329b7eab6c51b419ecacec0cb45e82eea7af08890a85df3dd8a078c94352cc9bb22de7cfbf06fdc59ce5198d62138d563c5ea959d6950ab0334134c3deb6b78babc9746ef3d66ada708edcc4f70d20252ea79b4c195e9710f558a60b0bbf28ff9d34a400a76ba580cbf8f2f2aea376a82d740 22bb9ea003a3b5962948ccbfb92574683c45db36edf0376cd8a5a83c9032044e23f695d700014054ad65037a273fd8c876f229902e4b64d6f660d28e412276cad4971f1927d85f8c89e7c7afdb59fc341aa415e83d9fee5a0b9b2dba23b499a4593e564758333700aee0565348d981cdb87d394b5bd72eae7ce76c4208e044 9cea3a959243051bb44583223bce68b50719a47f783c9705f461ff40f40de2d284bec99048f8b9558b5aa3bd55771eb45a04d94555e6fdf1be530c1d0d39b8e112704b41ce0d7f86540165aa9dfcfc6aac9e2c1f1adaf871a937aea0b5cb6ecdaf64042d33e4b8e67a8e27ab68946c23a69703eaa4cdf02977273b775e7cac 1071ed89fe72282620873c5c8f501060b6a5a4478f43b19f63833372b5a45b0bb8ba292c97acc3ae6ea644c0bf01565c1a4324a6ef5420dc3b1058c186d5b373ef3cf7e5606b6fffdeebe23d36a634f3d5a87543d2e79b7c4d56c424fcfb06629fa126e6b5b7efa57b809cf83cf078b13ae067da2f9ca4e17c43c413cc4db0 4865b15989d63481cd055414b4d35abec549c0b8d0ccc748d0b617481e44accf8136072a0a736a35f55467fb482d56d5c6115078eb2fdfa1b35d9262fe7efa40cbcffa8548463afc1bd47062a66598269b4af1a3c4ae0bf91f759b9dc51cc18e9205268436b29100e529424aec36e21b34c5b1a81480115a0fb0abc00bf73e b90761bd52b1253382752af2916ea7a938e26843ee420dcd820b5ae0c32f3a96c586e3ac08b55adaa81f8887410a7e4b00db81f2143c59074627753055bdc3c7a2e6146823e7dd932bd4e4ded28bc218ed865c9f8d7a69c760d00dbac27bc455c254d539066ea5551e2654afc675cfd2e17acab2123ab0c65e3e99521ca52f dcb7d5c044fdbd8871d447e395e1de2c9362e8eaef9065c1176a1995d70020318caed30d4edf4ab45986cd3e7cd64d57783523c3b892d27410a3d4bcad5c01a0ef6a92694c9a98b7c040b2783f9a1074d9e16fe6853af21d2ab3e985d904a0e04749565c956ec0ca450c67e6f826c4480c339b6b732909db08ab4550c0cd80 5a585b9d3c52673bbe79f23e0083d1135030dea216596a2ca5e2f4feaf6783238197c21dfe92075a556a793d1aac9d2ebee27da1294665ea9b1edb71c15de79fec422c9d516511315742c97fd880f6717f303d058ff1ea803578291eecc227366d3361f08ac7ba33c47ff14739421098d38eb1da367104667607eb192cc561 e8a80f2ce7726a65ed75f5f0c0b18bbb676cf82a468251d983352bd1a147134294762579018705cb98379c606754bf75149dd2e300aa5ecc8812edbac86a622cef1f51b8cd2b6cb8bdc081f730abbcb33091d4ac5a90d183e16278c69192247db4882da8c58b75dd93a77ce01fc76f55caadaa7017f91c6f4b2e2e7a3f0bb3 f0c839f13d73cc8d8293bc981eb9c5866b9a3b1534c064384e1437023528fa6e6169775882522275040c3e373cda0c2743d078d7a04f5d29b622ff4e55c460909d18ed428078916824488bb49f197ed81d96b67cbb7f36f03039fd1d9bfc5b4bb7091c6584fa240d6d706d43f68c1643524cb0ce831ea345309574cab2ee1f bf1567a9760e4975b57af854ad3f8b95a76718a01d1a5fa977ee6f7d41db653f822953e52cffb8d914143b7cf599e4935b73426e8d55eb7f630d3c2fbf03358cd08fdf9ec23fc4b759455f5ad2936344c2cb4709cf5778bbe53c42a2fdff9df9494e08c26b099fd64e58f06b7b044283b34b220d6f223ca0765396c432a3bc 662e21925679e63e149ea48b0a3591ff9d03a973b74fcf109ba19483eb66187a9556df04bfc88980079080025539219b580c7f7b6f85595f017729a426a4c670ef41ed5570c74b1d6dee3c1a20d6dd4117737519fe81496dbceb0cb6f54326786efd14eeae887cd226f7398a3e316d25f52d5f37b323828d416a50517b6e4a e7dcdebe12cd7ace92823aea4e3e99c39b2b45e978f3e3d4b68576f4a57b28b5c8e3a9925c600cf28170750cb89793543045690d32248b9ba3c7f592cabb34b6cb49fcb022bd128739dd758b432a5ef1bd01c110e6ba2fe7e90c8c3aceae45189eddac411090e34ea00b76969ec399e84948b8b317af70d4e8e429e46fbc8c ee535d79e72056f14fdf84bdd95fb6f1418ec8cf97b48880f7f91ff7e7d12f1988d8d17d70176643d880a2ce377d27f9efcd971d19dfa6b8f17ab7bc4ef1a90192c5d9a21b4bda44adb6b2e57933a60d2f7f44679ab7f59f86530aac0813920c24baa47e3a8cc1e6e2cb49d4968668564624e310230851723e309660ef3ded dca8cb501c6ba2fe14b086d96344fddeb0e209b7877d7bd5d4fe878cb6082de69d5d5f6d516a06932aaa40411633b4b7e3feb851f94394845c661074094cecda80d302d2a5a7e9cb683b9c34fc4cec21092322933fd6bdb6835282ad8e20e0c46ef3601704b4e0153fe1a08d08c4846dcc8d77fa464b899b7d3c06be15dd62 7dea14d40c447fdc6f80a18a1264c480895d8b03d8e660366cf34e526451f0146bfbd5b34d8f85a1597f298ada965187780d0d2f280889b50c00d18e4ea710c1d03b361d0a7b4b9a8d4725dd9d92a40f8b817f7dd7257f2d15795688d36ccaa4c5ca2758acda97542f24232bb30b92d4f4992d788c6904e848b5ffd60d3e77 ded7ea6165f84978c879f8f453710bbb5d19198b38c563cf9670d91cff10d6d381172febce3335bd186995e3673e8920fa73b43cb5fe34d301ab247e9fd7f795f67b2805947ac022cfda235665598aaf238b887cf84fa4cbc8214fb930166fcfc30a921c1f123338101d1d1679ecb7bb3b1e51e00dafa82bb986f9f61406c9 b571aeb79066a84cdcd6cdcfd70d98bf53799a1a1269a888ba4c24e470840a498f101764f5d92a5d6f575894bc6be6527ea89f2b0e387251c9c8a34af1fb6478f49a482de89dfb5215fd77bcd1dd94ebb068b062a9992a4108f3f1ebf313440394f09fb2715d95c9e995c157330702fcac08a1366d675630eb6bb8402f8327 e54a8022b1409e5594c3649ff14443058e5a0ddccb421ffd1697979a900d924be3c6f7568483802f119da1686738079b96e3d6aa432f9c2eb233af9d8c0adf1c257da8d5b7ee0388e51817fe50b0d7a5f9dd8649c3f8283ff52034f2e6828436b9b29876d9ecb6fa0a3cb8f861380e482bf56dffa994f7225d3d1dc03b667f a65ee3a1298b8ff5f5315abef5de514b3f58cd2b83c28aab17f8581d146fbf9e248f4eb056f01ec41e689739ac72d6f055382420743fbb279a1f855121511cd17971580ea4b1a809df10ecec464444acafc6e7e2d96014198ed9bf3a891c61d71db5b00d451550adda9c225aac412be9aa65dbb1539c8918117458307cf0e3 3a50d04720b30c752bab5774028dec340a53c9b9ccd62d6ecb9142fd0f598a4cf4a0c26c8d5f7e5ec8bb283d13201a17b449cfd95405b1d3b8860aad3796fab1e3a3a94805013bf17764cc230a97428bafd855b045fb04095783a84908670a6dab743a0d3318270dde32fe787fb352932e219cad6e02b6072b2e0f69949313 c12f95a256c71ae06d285756dac443fa7a6e6332f640e48fae5948b4528a1aa9947825c8ee43ca95b59b0eace71574c07dacd10c01916fa61e3c4904b5baf81ddaf8157ed27600b1f547efe0b17478a90c4b41f139a427e06a4afdaea2d49fc65769bef1b1a31d789de62f6f657eb1819cc684018018b1bbc0e050c0f4d074 f176760a6a834dbe624c63951e6977b09bb28c7f928c787b01ae8101b77f022617e010e2a13e137468a7dee42d2534eeddcf7b5f377f621e3e653f98a964da7f375991b063ae81bd4586b89a5559bccf1e9deb68966857375a3f312fb7f595d5f1cef91ae58bae549a5e054b4c247bef7bfd3b829124e3e39b6993c9f168e8 65e7dea0b0063052efbbb22b01ed459cd09770b71ece09a6a115667d9e86028ce21c696ef46920c230f478ff62a4fadd93bd3dc09e9436141650b6251e01259fcc48800c883665b7ed6abe106ac781f96f5913154eadf17a95fe937ab883b7119c03ed1b77210646c088c0c569c73398ecda80aafea7a07dcce9e4b4119859 336ab79ddb8aa826afe882b6ac8549042726aaeb294081568aa220e6b264ec8333f1363a848e965c913c860d8f468b57b2e963a42f28cbf4871ac8419e297b4bea4ebbb9663ffa1fe6159250a214c88258756d90c83747e84ba9555511d02adb9bd5be7910763cc502509a2c0909ae5adb592ad760dadc9b5cabd6b5425e6a dfca15a0904ed052af61e409d77976009a5b9bc2a262cfce4ea086857ec043c20c8129e20e5649c838895aec54af9d0bf4dc6c464d9b6b67b24667e6b36e699e135a92a51bfa85f8c7e530a50641582ce89baa2d8596664e83d2d52f55618f0303d589b91ddadda7b87fdfe331a88a7dd29f47f00ed3bf3bcc8021cb63c90a 802dd8dfc62104c58df37b0270ba95037b82402a3ecb6898f1474bf51b91f97c420e0c517f03b61e3b6544856c4bb4c5e426e167e314b4f77323125794f0786ca00081ae0345ef0075ad9a454ec3b38add9ef11c2f31fcaad866f7cd5cb6d20d07b514795dbdc89f77a00ab8af90634a3cb8d31bce450e8ce5ef362bda0b3f cb25aa983c21fd82a4ee68a45fa2e5c1483fd27e02455142371614b5633e5aa22b2dcf4607ec925d60a461c8598a8dd4f66f7d8f274f11ef129373624add11a097334630e43873a9eb99ac8495b0dc83dc20d2756892ae42b6730f228ed47b7672cbae329052454b1e7e0febb380adc51ba89d0743c908c263f1b4b60e4b7f 4844cc8d24c342b8fca2be5395ede85f872bf99f71d9289a721719b48eecc37d16e512cf94e30270e592d2b9ea12db08607f1c3033b0bd0cb65a045466a8e454e2d0b1d619b6767ea791a5022f7caa72f9568f3244f47b38c2f3ce4ba191c09cfaed4d6777c6c3fb54e1b45f272e3cda7c94fa8a23da81061880beb0925e01 622d6a4d1ab1d637a0e35a27ed1ae46d4501d511b3e0616e7f4f791b9fa8725d194aed5b0496c00a7c87f376fc5befcd54375d96c8907c58ab707c6c004a5d263d22ca106d6744d8b9af3fecdb292941d00646ec96c9e9b4c75eb7b2c636d5a9eaa7e209ed2f2608bd14f54a9f313c7551ee688489699f4f523d427fe02797 481e69dc8063dffbec8f76136a32dbb93ff555f631e54a21ce87d2751333c1b5059265c8715229a5fe02fa731ae37a5b7dd0142f353b4434cb1e693b0119bd31c7ca7d211703bc1df0bcadc6a33ae167889d8d6fe2a22884766546911956febdc6661ec3ffc59b4fcd0fa7c3b0775887f251f919a35f941aa56488dc98dc62 5ef65019913809e33e5abda90d4fe37120a4da79d61e3676cdeb6f895bc46e012228bb306beef82e2e6ad40ee1da4cd8dc5919e626c31c8a3e6754422f35770fee9659cb742cf8f7642362fe2bb9752bf15158d6d5c67e42b617050818d1709629475ba093335c2687f3cf90a04805af3528211dfa3c9ac93ccfd78cf82abb 21c8b717c5bbe37d6741acf7b2c17fe0ff1ea23f9a538f0aa76d89bea204b5d054f336551779300e51faddb9ef11b680d21a7430512b5ffc9ebe6d684b3bc9cda6025e9ac6460c51f374e36d4c35522eb5176697c2e03c9d213e12ec32f1b7187dfb4066c3ca80ceee0923c01075fc1c9862a206b45ba3021bd7f4147fd0f6 bccd893602d07fde9976e33be17bec186af2870e312625f9832364613345263fb4d98813b39dee77cccca0410613f7a9f538a70131245f6d1289ff2002bd21994253d5f1c58180c1e8a2b8fa5fca661260043c7a9d5d8a525bddd960cc9e158d6cd58e51e9053800941fc906a4bb969f096196a48c100b7378afcd56372f17 aa8deb5c891ae09bd79af8b6453622b2697a84d494064acfe74e09cee528dfe3b218b96f0beec9d41b53f6e648705ccccfaaf72eb00028edf3d4fb0fe4c7633bb93999e2fcfae53ff072468a8ada44e0090e7dc3b5dd4fa284a936e72e2f9fc600ef23e24364f2c17ae8ad548b4e19ce7082be7439d9e948f31b939d0cbca5 21a24ef72cec3eae0b3bf708fd3313c5a60aa5d60defc56eea51508fdf5c02a366d76699ff03d5e86f3451313cee71c3d7413c441ce9f00b2bc5959e0e2dc4e5288caf3cadf7f4af729471acc283d5db5cc63dd26a6389508784c7320b6c5f0e48e8978070cbf418edb7ba5b84a28aac19b345ce4c50a1f066413c24b5df9c 1fa9d26d73749c1af1af0eecb0d7549820cc7d3796f15e98e1a9ec2f03dc864f6e57a3e7c6e714e170a5aeacdf02a02279fd4c68b683c83192ecd3b459775c81acb661689e65542e5466a9524a03774a20547758d5cf86daac6b0fb47b4eb0ec9d007645ed2a3a1282583789c5c615b32affc5085561091317cf53e64d7d9a 688f5c61608b042ce2902af5cf42c0799e35aaef0a7b2da4453135a8b08d9d051ed73aa1b64388c8469242ad2fe61154d3715b4aea1cc9c055824c28a3aa05cec976484569b3086b43e22e7d656bb263f5402c8d6509f8e165589098638b4eb466b85026521d70bfa96f1890ad481d2f12ca27fcb75ad53138a430232f5d03 b68024be7d4063a26fb5812606d295577a1cc0d642536882b16d70c95a69027a8ebea67c2ed63fa51e5f2687e35337eb6afdf9ff763d6b7155d5616d1f66df53f264ee1ceb52143cb481aff34aad961beb6a466f011a97906f7235ac1482b59caf4f35bf10c106a17849b9eab63dee84e84389ca872f0c55f9c88122b6d6f0 c758d0dbb717bf7c66b04db20b2ba106bb7b51a01f4f60a45431157c3767fbf164604167583f3ebffa0d874d78e54e673d922091584593f45c0653eec563a7115b497984ade01c733126c968a156d562f14b9d1bc3555565f84af0cbf9b67d390d1eea546bf8f53abce45dcb31de4e15aecb10c71437efc777537e89c2d906 249d55ac4d17fe2346b1b68a1696953fa4484d0408e2c8ca96d0b6a04bf78cdf672d99c3d8697a6c388c31bba5f487d68d516e0f5f9d0f71f7d0c12d9030c7440f3f8219d1fce3cd87f1ab5a2ab38288b99f98253a648a350bd78bef72ca7f334c1e92a2cf4f274827648efe4d4c986d6b28683878990269e0d695cc93a18c 7f8f64c4a1a89e4568e43c8e0118bc039c271146e047511ea911a4afe7e01885f69d310c37d0ba5257f0d1a025dc9dc32d23c9580a0ee224ed267bfd6501907720b19126f43b5844267e73aa9ff473382388810eb339c7ab6766fc56ccf74caa2a7c0d66294a6c5cb210fcfb6232584cf7016c3328c54295ede965bf88a6e5 e0cc3d5bb9e023da53ceaed73ab6053f58f0c31258a1b74c90d2402dbc638e4f7e235c9a81c91adbe55f2e4f9cf8de445a6fcf0c7f4d33cf5e7eb89fb1fe6bf6e8aaaa3cba72b90965807ec54d18617b0af0bb4a1308aac8e957b52e5d395f0831f2906557f1ece3c17063cd73e1c31c50f2e2f81aae3412be4fa3c08164f4 d8803936644a984eced76fc2fd3eb150d8f5792bb61351b84d59b9d01b32391848c87932d99074424d0824db25a0c994646c66115f9c47ee44477893342ae1a7b7031ce6d859470e583b8c75e71f34463ea780c87c50db3623b344013bbb98fc8172fe9018487921ed239a9bcb44acfa7f8a69fbcb6131f883be0483fdaf75 6bc76e3eb32e3b353272e9d8187398ae8114e6874319adecb93bc38f2f8c1aa0e10ee71d69d64f3a149a7ec6a80663d80fa5e2253df2b2b4489713f10c337ef9d480854742234e6b715daebea54b2719546999fa791dcaf99c162962a488a0b54de92543bdd0dc09ca49ed58afb252476e3933cace812e910ddf8d88ff4a77 292928b547a23ac37e2fdcf1595f6183c6b69b5fcb4af16ee950750819842d44457a4ecfa9b0401c914116ad58d5b73a4573d22a029c3693b6ecb62e13d7e788181facbfb7ca5dae15be9386758149d49a3565af847ce37e8b9f4f2b1c9f3da84b4c6fe37d03479da226e7feaa71fb1ea7b6ac7fa1ded0f474337888f6df18 1f2adb07179da391f95b5663712ed86bcceae06626b53408b89a00e9ab7d97866bec9f47fc4be2885d7c5757438a886866500f803d0e228ee3e5f83287415814e0525b5c12ccf748b34fa769bf76001fbcc764bdcaef33f75a2fb1a064f9893842385111a6116879c29686939c8682071adbb78c6f7c28e57ffae6568419e2 6b58505a631092c46b49a64951e05d0be79d2034598f03587a322c214c064413810072f4ba8cb847c9b1a6fef06a55a2dc915edff4308e911cdb1f1d09ccf9be8481a014670dd438b17773d8cfa065bb84aaeb476a5467905da4980b7a1c9311fdea5b6a627977041bf74aaa1bd0b239455118899f53291a0c0e4b3c8d0d58 f01ac3c7fac9530025720609865d9f242573414f23a4c184884cadabfe4b5409e7ca3e607a1ea0868217e77f404570388cc484df144649a0504abd9e8c06ef4e8fe3ca6863842bebff55fff6751dd3c17e0083b9eaa3bc6e5ca60fd81f82fd2b2a662563a6dbce2cedc61d270ee9c96b543226f900e720f0c60b784b258c9e 5499f664312b77d1e4eb6d92709c306f796e7027228be42b5b900e414736aa94c8a2f9b8a9c5099751b720a0b1417ded6fcf1d4e091aa8c3e474b7b111b1e51c6caf82c8af141d425e65475af041335ef8cdb22c4816e0518759982776fbd91378a2c98eecdc23d36ebb93a6af735e063f9f0698ca7a24a098b9fea98f0c71 c8abd33b6df1bc8cf2c1f387aa6480c32b978b31a8e72fa9724f7ffa07dbcd1058da143c6110ae8626d427f1efc6bf7e61d98c79b860e468aa22c5dbad1db9d6c81c4cd6c2c0ffdd78ec68b23eb64031b17725b6d59176340fcd113cb6af9ad9825851c82dac499f01669f541364a978ecbc8f0596b218accb1b4fa860130a 2cc6cc108b71d54b78092469172096c9d3d81b502f747355cbacc6747573b002da8d63a30bb08be6565e77e6f8de66aef8c388ba228022bb054d0c6bde488fedbde7bc556e29ac4f6c3335597f5379ebfd24c3e36cde88b49a4e72ac4980da7c17a6492b4193c04827e3bfe7795107e25df2121aaed1886060640777d8fd46 dafa1d4ebe76d5d7b45f8a6a907e69cc66d55c38e7a3071e67ad47fa326c3a6efadf5aafbb5b76eb4658ad84d52d563cd5e53a4558085af5005ad11036c67f96680d882d24a611fea4cde2fd25cf6c925a94071f4bf6ff3322f8129d8660a73328b20287bc2e80157fcb64990b3a2ee994ea93b4666d2968b9624902e9366a c1d297b2b1c71b2a03c61121bd42e8513960ca64d54aac073b72b965b3d20f3fd355d21317eb15698c8a8b9a4f84f8d61040ab20b90bb6c82645f7d261c825e874f25a3dcb1f10b4db4bd43abab67b4b7061f419cb350c923208e8ca8c65398a7c7928209fc6abf82d08c913f9373fb5faeff071e79ff75fb7937e5e276195 8b37f6b0c6c17462fbcc88ddf758bdf1fd344e36cd4d6947a6ba2cc35c0a9939d36cce7683e58641eef683ea29b30e311f128f695950be5e83d892a004678ebde3c8f8d8d8916a7f12d65ef50df425196285b0be8ff4b8b939342dbd843e3cab919212178e2fc5c3627a225e41274485dc7f28e4642410382a5c92438cb4e3 2ddc7263e3afbb76362d6e9542504dc427950df6a80336d76165d5b93774319dd6428f3dd5ce365801b75252ac934856cf75c69f9dcdae1209c6c2cfae1f139911d92d0f154a5d5f21c00c0cde4ba030af503e424827c1b7057399e5f1503d170242cb3bffa736f5f4966fbeb8c9333fcdcb91486800f6d13462bdceca6282 45abddbb1cece414f8107ce640512c1360a01e8784a14155ffa9be5ba9422312bf08ee622683841bb42f561188876d072be23fb02646e63161119f01a691faf0655e6875928f12d461d352ec5018ea94678f74a18bf610d3080f0264f31b6ab50741493db8c0805037c7308954b2657b5d3c2f6f982a8a86537cbfd551cb4c 4c1bddc2ecaf4b800084462464c52380b756fe9d323ac82868f0b476843b6b12cf7888d7e45be3fe8ab2168d0a4b9cf1a9c82d2c53d94097dcc8a9c95ba808757b8ad42bdf4f525419a27d16619e30ff31be2b5464165507bf1be59a66fa379db86d16ce98c6a95e3d27825fa01c90d16c88ff86755cbbac54579b637e94b1 e8db989c65b8b4af9daf4e71d15f75aa65be4e79a9440a62e7021bd412ff18cbba097a341526d66eb035eae1a541db3b21f5cbbc4b8cb2c4b6f0e5e45e0927811242e0f4d2863be6933bdbb87179f354d99e899e3e1d010085c50c59d23653bdf35e881a9ae4352f176e9938931d724d7e5e795ef8e8cd2b47cc8f9eb253c9 02591b57fb345d48ae00d8cd5d8fdd82db9b92ccbb66d9b4f89d5133abec9e5a933f89452426cae8c2bb4984e64f6790f410cc4cc113ce680fbd43cab83886c2a31ede57811e61da4dc51c0e9d965f36a45983041057252632fe7e38a20ba5fc66bfb02349a1321667c6a07f6fef33a97a8e2e9f3e3348c8fc32f230fc2473 feb6169e1448deaf125ba0e0742830bcb698b1f992d1f3a07a6bc286a52aa03e65aa72b4ac989951e8dfa34c6cd1984f180f7175ed611dc5ab87303c7a2961de9bb50dfd1a789b6c048b3bff4a36cc8756007ad771d9c09d6ea718a6fc42618f94e619332eec80de01d30bb169318a19e44fb6852097238d221d4102f76285 cc3df433b21150c0f400537aa52056aea9cb5f8030c5e5b49d8210753f5926f6d85ef9006b3ebdc4f66f4b23270edc9663303a27abc38ef56020b3fdc01716585747456c9cac8987305fee9786bf59170f4241b38c1ad0d4294b84cea35b015bf52a0a73f142d278df4f1011c8696c38a2fc0867240a5190a5730a582874f9 fe454c49bd989be6952ac9bfd7d219d718d2d08547defb57e793e339bfa32a3e44425a365776a1df8e568d1b838855e826f7822427d99a82f19bcb8aa14b5ecb6570fa85871c10e59c10074793aec3e0e22bc98d709780758687e5cb818aa59f3f759401c7a5ed92298d5f59b74f6b184eea9b9168c908609e1d8245e44a33 727679c49f9ee78371843ff1105bcd8ab15a1bb52926bbe0f81dcf9666299bb89f3237e60077c5bb2fcff808839b3be0991161f62794929f9aeb5e5459e97e24496f2e1af05000a6d12957ffadfde6d6d2bc67404f04faec739caabc9fc004ecb08937af3a110e3d341c7d865303c3741a74e02c937403137a4f37cdbbbca9 24c1252efabdb73adddc933bfb6d7eee605e79262f98d747d4f5e62c0ead33d2778c1559889ed63125ef5ba53b6cea71e9ee844101eefdc455c2d11dc6d1252670124a168c55fd43aedec416ed01856344966e70c89f6a6f372eeee25884bf84d52d563cd5e53a4558095906115b7b6e942ec369d377d18000da1dbe1cc4be ad068874d9222d0d3a3f266639ac0466fc5f6a672f176640b42b761954ad82a7574fb389d0ca69c0715c30e72b37d7178dc2b00092c0bb689b400e91c7433951133627bd61b23221c6deb012414d4c3550a061f6c37515a0f23c54e46aadcb641c5d8bed81f511c801c7e13b54398ef8a2e5df59f82df5dd075349fba603ff 0271319f79f573bcee0ec9f545e49f9b083b8d61c33c55f2286dcaf20fcd22a7bc94e8bc193707ec31eeab18a57c5619d815f1bb17860c1f8732465a574a668e35f47b1d2a805878309f59f5b64a5217b399215a0076384ba874beafb8135caea2185ade836552d1495389b0ec6f230272a507ebf00f33c4ca1c5b85a395ae 5b924065aecaa169085c2864ad4329bc054731a8b510e814443d091027fdd6c35e100d46967a2fb9f2a6018a3e9a973dc91fd9e8741bf4f6d1f4ccf29f35aa37ba439587f04ed97e0bd53624028156bc5ae38bc65325143672f08b41ef2196e2d47a60fc778332054765a60bcbda40ef1a192faff26a811d65a729325db934 d95838e444b51fe5d2780eeae5fe444028f9e291c637aa64e988402eb2e7d4d6d32925f93d18eab3ade01ecb66fa8eb298202a94c9e3f24024030dd162897b08c66756bf2cd92f3fdc294012500bd2383313376ba6e559593f9ba2437d420c173fb60b3274c4ccd091ca96d276d63435563fea10663753c3bb859c07a8b8b5 d60b723aba33dad8d1926092dddae3e31010acc1d69900c2cc66a029a91e10e018b3cbaabd813eb1202714b1f221dbcd735fdd75ad90d32036197a8f7684dee75171d9eafb518dfcb3870cac88eae93b509302f3da384ab4250de9ae074495135cacda458861b8478d7bae74bed7b035cb268c04ae5488ab9fb86d839b69f1 38705abbf82f01b0f7139b976bdc09f80a9cf584725a39b2735415ee4a1cacaa3da06e242d339382ec35949be25dd673a2c62995df7d0ac79a45bde93b91f400821eabcd3aa1c5534d3f8e79770de25c76e28460c65162756e55b9f3bb137c74710722aa0468598a3cb7afebb1dbfe77cad22e9654f93790f94629e0d4882b 24b79ee955fec15120b0f2cd29f59ca860ea833e7023ab716d3a15e43fc5130ac41161bc94fa860d077964e589210ee8e383e3fc2222ce1486f0b52634f6a7f003b7a1a37f1ed3bfc0ff5336c36a3ab2910f513b98cc1df9acc3c5d0585245e605cf2ddeb6b07bb822d5f72796b17ff35e822e523dd24a6069ef8baf345175 d46225f77a129154e9dc985cc74238d307a4d8272aa2ff736c428e1a3ff734badbeebaf7114d1afe2c7dcf390eabcc5d54686b1a3ddca593eac4b9a5737a14e6f16cc20c4986070da4b9431d8efb42f6003792044b5984073be785906d74ba0bbfb2a19bc1d465d1024af069c2e6092628ec67feb230f288829b8b83633925 b9242a35a44fb2f946795c125917c9554063cb6e740b7e6d56ed4e070861dffecf723a2ca1dac1ed59a642cc55afb63a54e41fc27ed61ce27ba656107e25fbb53d779201e62034a95a07618666940e42357e342dfdfed3c38d448b9f0f818098ba08dbb645c85e0107c1d4912ac2a3445fadf63731721aec26fd81bcc7859e 1058c9dd448f5eadef0a47915598bf58db577f172c462ee5ec69d3b1e3e8dbee0d46b5196c36dac3140889b89a8f53b11b92caf302f71a62a5c3909806ae315866f4ebe2c05773898697443ace1a3757a79f96b713dca1ec16e053d11e6ed5f27b1ac42a877f32fd2eecda6e44e04808bf109b777702c6c3b9d10c06ca4210 5f15a31995a472a811348b3f68671ac7760af3b5b9eca0d80f3a3cba3fc4f008cae55b377f7ab315dbe2338ebc38b165ad38d4ac6aaea58f46a0882defb5aa4fce2c2c13749a5115bf210197ed59107f58be06cf234b82dbb7ceeb9da3c8b7a1f055f3009dd620c6a43eba73d1b21b5435d5389274dfd82460cf63a26a2c54 8d75a402913c812aa2974ce87850a4560c24ddeef1ec53a1ea9356ab26b148a6aa4e9e30c3fd94effb017d41e5a1c9b11b1e92d25874a17239f0ebfb8e131a7465b09946d9ca665a78d940f0d367e73b18768809eeda4c4365230cce7ffee67d5e850ca8754c97bd579ac36c6605f2121995b6f0d1d212fece438ade5d7525 56024bcc58acaa3338299c419d99d3ece454ca23064139d89dd65937e12eee7d859fd6bbaeb697fb074015e5e10719b3aa0de6e02e38425e9970403bd58286dd868063efc25d08418a9856b8649ce4a9e7d7d7c5510ca5858f3faa4387d4bb11177772747a78e928bb36b3879b2ef749f9b7a831ce5761ef228e660eb8aeb1 f0ae24433d9af3a555afc08c3dfbdc9f74f1db0cd64b8101453a2944364d902fef71d1cac0f97515f39601157dbf76a310bd8bf13c4690e85bcf962507848a27be29cb7ff0e0fc7230b141f8558d06a194c5e799fc0e803a8b9bd5f9558bdfc955d2146ea5ef9f05759590437cf0571f942a71e9643ef081de4c80a096ca0f bb5a234109311865c88bff1eccd8be1dc394d9f099a8600c3e1d850568d2b54fc758d88b6af9e960a18162cd793a8de95fd0a58392e26e6cd662c9cc1a12589a8e0bfa1df1f466c9c575d7b7868d0d3ba22782a6a0f63a50f03d10e606749377e6672f606e32b55022fc9b329f6d50334994cc53c13fed75053054095e66fc 5fc6297fa80154541c5b34afab967fda3dcdaf387074a99f3ba7767bc2a20ed0391f07c17e5b0bc3235d88324859d01a2ebb6b72d3eb0b6aaafc3df45da43651c331be0f4e5ff8c8f0974d98b97678aebee35bc3d66f46306150e8fef0690732ea21975a05668b1aec7dc955b0a3a2a02c8c75dfb1a3138b5711e2a8d920f3 185ff967e4a7ce7df4343a5f642480a2807be5c686aec981ddec06bcf5c46619c51d4cb34ec0de9325a6ee9693d6f3849efce363c4e6d187c0b1095aecd2a9c29caeeb9627465f6fbabeb7c63a2650f6f77d636012445690c032459661e9f4c330f733744626646af8dd235a4ae2e841a3c0637ddc3cb3e93fa48c51a84206 0ccbe19ded9d784571db78235115dd2bacf6fa0579b1e77fcbf19fd1b88aa57551e869f0aaed338d2db14d0968fab6a02907e0e5aefc2fb8aff9748576d2fd1490e50425e6ea36e3536d696709f072e0046a271fb772b8d9c0812834ae6b42124d29ef360ac09152de058adc9afaacbca9f9012247b74459bd84ff3aabc1ae de433d7a4efbb169fc51e12f2b9bee837e4888ac1b76739d82e99e8d8056479cbb9a957cfa8499594bcaac8899d270e149d664c55648af1ca0d56de23aad43be627bc3ee7051cd1e17cf12caef2f4de2578e06170a13c01ef38ff72ca985114212dc6aff41c50f87150f2fd3db8c6273f2ca478a19a7cb92427c9c339447da 84b6297c2f95d04ddb2440d227e55023f2d2fdfda574404e0b274b7dafcf4d993756b8b56094da880ed11be1dcada1080cf8a912c0f6e206307590f797414ecfec6c691254f520a2516610697817a4ef0e1354b7f3b66226c8b403f4955426a651c0237b54da17e15598f62977a0f0a4bafa09f64c730c016ec8b163413749 2d0429e247d1374e3d1cac75fbc0e8820158e776004e542e7f50934c9f4b477776ff5c567561a2100f08af0343d4131e5713fd49c996aab67c0b1c0947c280fb78973c06bd9f590f9cb25cdbda2e342aa22f9d45cd441f130d206dcc38ad026ecd85c0258ee98de88cf1ac5a8c038ddf87c48ac6c5e64708759968b9887a4e fc00e5d08ce8842b3c1649b5e54a00411b1587d76acb57e3dbded888141e4c3f90ced5b3c5ade78e6b6d12297584eda04e1ff673ef825437abb45f32f721b2803bbbfeb31d93d7573ce70f8f61391e3a1af911375434db1054fff2a0503529b48b891680e15e3f16d46556365314dd5d81629dcb31ed07dc32c2b1bfeb1935 685e406fb5fc31ca37a306c213053ade935c9bea95fc2f6227fb3e10d5d617f3d64b31641d8ff54ce1c6c960061e02908b3c1e4f088c457f345ceac29cb05986c09b51565ae11d89c807376503c6a152642b693367326a0ce6e65b48b2b07d9395e3daa04d30d5fa14b0c4d35ef65db3519aa866cfbd9035d157639259a34c 21bf729e12537bd5107566b8d089a6fc47fd3ebe25e9884cfd77579d3ac5f9d5f3d0f26ddde548193f8df07fad054a6145dcd353a53aa7b4134dc06df0a7431d92e4e826be68def13a2c904595d08bb71360a29a5e915a0320d019ae20f0cbe9c215fbab7313bfad387ac60f766e26ced406062dc33e908be782abacc9bb16 f68a468b4edf4dd11bcdda9712575249c2aef455a6c4281426df8fd595ae3543a33b8ac9ff42f202b11472bf35006ca1e953f3f8cbdf4828402ccbc7351409193d18bbedc5e44d4359cd46dd6af0dff1ab9c361a319e628e7daae57d145b5633325c4454d821ebcd57f14e8d475f157e7b7e32ce47fd0d1c2c5b6d46005e93 5cad8e4b9736db6533ad14736270d8ebd87172293a1ba351ebb1b49df031f97b4db7d2bc8b7c8b660a4fe78af4816a5e123651eb5e804ae2e94ae54c17b5be968a5af1438a965a57e9f2f9ba168e55c346c11dafc8d2f4bbde2afa19d0576340a865a3da4cc556ff2a7e620333b6e5a83c601d4ceeeb6242ed3a07e0b18dc3 c1aed25b27a74e8e5d5ecd5afe2bdcd57f0248b1d0c6e26bbcb040f7f20d1149884aef92014465eb9a205716577ca2e93cbb953711317884960ed05d4896c6419ccbf960e7a29790a14ea30390614a4f843c22f253c070c41e70e67e323f74452b6c4f1a598f8b84d9353443db4fc7721b5f3e6432f68fd9619aca2cb8fa0b e2f56c57d004f068e4780940a4f7986d26beab8c6bd3753feef6dc34e0957f1265438c1f5279630eabcdeed9ed7e8d22efc60fa98761fa930b7cc14a2fa087ace3dc45473459298f61820cc6f7a9028585ea1fed8d25528ff063d8d4c131da0b99b03a8414bfb286a3e41c013ce5055e93b2889a8034f0cb51b00e657970c5 de52e263dede0861497404b86694437ac2643a753f1682002e947a5822e0b52c1cf9c9f52904f6e2b1998c0e0f880327e35eac4252d52e52ab2c5f4d440a40a69ec8bd2b0efa87f4283ef1ef9ad3414429d572bef98a6df87c0d24c0b8d9f33c5430cf12d627f9372e0fdb25a28af925c1ec95921813bdacacf7c1f6195a9a 1ed7d7fed7df9a3df68b1366f9eea34fc437b4dd78738c2701c6322bf732d61ea1dd3eeb38c3ac10de840fb4a7cfb03c1b23d815d51fc77ad6551c6782e2a1206adeac949ed0ae6cdbbb1f20150f2e1a75a8730d70f0083c070fce79541ec0b2c6e6f1a91ec8c509a525b0be7f76ea7f4f17981a0eaf9c0af95d8e45da4be9 8a07e567d7b5a31b161c14ba138a29fc704fffeb42d1f2f7d6ee3e31adcf5f323ba3b6466e77e1751e390ef49f682f865ae68788c7da3c2bff07828010b072bc1fb9a163c6e2796adaa6e2a623cdadcfbab371c2bcaf7adb2f8da46c07692cd097013c8fc2377c15a75b5e8cecfbcb8483def7a4cc62e2305e26df4b0a8e1c 79de4361a16586a4f1bfcad1b44aa103ea3bb553094d689f5532bebdfd6e0cb21b0d071656a69d5321679712e3957547a4e6bbe527a734ba59af93ae82b803e0b0ccbb1d5c771ea0ca8602b51b89c22fba82cda89ef3dde6dadf07ecbdc3ee1528a40566b22bef138eb95985da8e2e9b9a8b6d839999b048d481a460914b61 75a3f8dbe10d7e44acd6b7e7c394bd717e7edf4e670858c0d84c5bbff06c9fffb0231fc4d7563cd79320729e8d03ab47ccc8d7016f13ac6ce5862bfbac90eaec0ae22222bd838a9be96d2fa24cf80636e5ad658f45a3ea63a588a14550ef3a81f898b4afe83c8bc2f04954471feb715374712539158ee5567b2b3d3e454ffe d3c0eab4202ae27cfaadd673da7f9655888efe008a07f50168d1e8ae5368f5af3b9eef2a2fbb0808773a22149815bc5902aadbf6ab7bffe6e1cab56a99d671fbb2d8375614388bc2f452d46aca0d318afba07ffc17831ce7f8da474c995aba7af56583a2425236b568b7aaf216131bcfcf099aa14db701854218e746b40dca a974b9f3b63a7f6b8dc348ccab4fd21edb7150876f27ffd5d09d27dc365f5e08468f178f8005133a14459059cffb60dc48da774b7583344395ecf7a274caee349725143548875cd9cfc74e14e8c4a5c7c03cda2baea7b463724cc6028addd5bd71d2630574a5fc96f8c13a75cc2804f1b1f7f195c1166900157466537f761f f51eb0db89174a040bf2dd160f92f24896c998139a115ce941ec46e1aeefbaac7b0cbfa26d764070acdf094cad687f209090f98d38d4f3918b2acad3b5b342c94d2114acc977e40990e2ef16413e03c8442d8186987b0adf0bbe2836aa434a6d44f3ccd7eae175fc02abb0db726ce79c65cee83c9ac23ee37e3bba34d8c03d fcdc68c7a130b13e566ea129d8af8cb271fc2519421e9c4c55c6d029a99093f3290a9bafa66ae6a22882731e6cb62d16c6c23590583c0c21e6e0ffbe466f15e0cace20727ec72e06c7b03a3db3620b8cb12123f8f2648e7c606ee233404462681b8979e20fd8e47e6c42f0e4705f60b444c299b6e4f9200dd60b086b166e3b 05c3aa67bf2625eea32fa4facc8fe18f980d2871a0fa6cec81e90c0c7d0d88fac1d91af8377917bb8834c6d428d7e6dd0febcf651ff687ca55a6d207003f30e1d1da0a19e560f0121b3da29e3ba68248728f453a7829ef70993743e153dba668df62c043bd8904406c80f4b396a7a134b1addc90934cf3ee949fd26a6ff9e5 e01d72540caf415f97f26dab45d861b70129187c07bc667856c74c39f9d27b6060f47f5e16df2e611574b3148cb4ce1e7c431142d4a992f3ca7b66e524c0aade577dc4c22d27ef10aae6dc4bb0a106a2fe2fe379c752f91dd4a98146ed35d4470746a9fb8949cbef8b6017f960baa82db48f5f71142e9442bcb5452980b9a0 c7e699a663bd99e8df94f5591aca08b8e1031952e1a8d0c141b819f9cdcb39f952b27e2026a18e8e3f6ec026c987f4a124d18a383f9ba4f9dc883e3f1b8c9262687a84cb854c7764699538519fa10a804a54aa7feb1426d80919f8ed1cfda18ee5cd138afd66a9ae0f0882a28a207fe355a2270701057e40e7f83d43ebd5b8 3aa2e6c1435e4e3f12f2540e70b2da3e356163586ea6a41be1a782b0e460d5e1a3cc317b96435c3ce0e1f147959bcb5f74e42fef522cabf2334b8fa3971c894ea0842306f4a9dea99e46163557ca4c93c3eb10493643782bda19511e8e763faf815051af4b30dd72ad3fb775fd29e33b9109b22a8682426e36671366b0f615 def2a72b09286139acd2cf7dcd487d068485c559b0d5adf247bcffc542c9bacca6271a46e9a5906db57ea691fb85cfd966f40422997d9c67a39117804f4da3a9158add2cdb25a98ffedb70fb947c221b0ca1f3d24a89871fc16cd1fa0aa5dd312f8153ec3c1bb9ff62ced28f56a064947bd0559221a9c478e341b5681569d3 35444b2b357d2f142c34fb86e5bd5df49c1837034c95b12b3979cf08f54330a1ea420e597bbefaadddf284671057e243f2a48a3e7993a116c0b806ba232b0e31897349961ba6516bca4c3bcf482b0f05f27bd36b30580623048de317b82f7dc41c9b45091044a51db54fb1fa728a70ea90ebf6f7f812b5fbc9a3cafdbfa54f 16d53f2c155129bb21d94c22a7f9c444ed47c87f0a0988ce25c802ffb20da648085e706fe36c01b8baa3371fa2f11df97aa9d08b7fa819049b607cce3c16a7a5ed4848778105724f7bf2ea2d7b04d0368284b143a3e7e03ca448e4ad7765bac6718a6fcb285fa415671c24159fe77788d9b4213f27ecd65935f0d2d4c92b18 37ecfd8b513c5b77a5aef7d3102ce4b862671a13b1fc29284e36652744aa7c9545499008d56e6d1b42c8ffbe54586a464a0a834b95fbbdb449164c8dcd4cf18c7150f78d6420257c1ba47ad7b86d1bd91aa88b284f604d455852c3551fd10cb4917835965e87a0a42f86eaea2d4571876df9d5237965dca6e4332efc683e3a 6376b09c4ab9c9cac459910044dde61b776f87b9353f9c93e68072f9947a54fe6ad8ff874a12653badfe2f6f1a21d47dab6c808bbf32cf3dd3ceb95a2bd0b273ccc79549c590377df9c4d1b2e056033cd694b3ca7923abc563d9aa27f85fd895b69a3f1152410cbe526e704ac4d568548893b0a16fdb7645aef7ad09c33064 e82a457f5ee84634032f63e229792b952b65c909513ac03ecd1a4a22ae605e087fccdd1e17a22586248ffbae45cd3b8c80814722bc46451d15e97ded57ca354d85ba70bff0cdca4a47d876593eaf84c59e9abb3b10aedeb9e8aac86ce8019b5c7831b1a3241d88f56e8d436620503fb86d035da5068a34f7a6ef6f1d25d695 9e8451a7cad54bf85624eeb2355978713578dbb847ec7605d1ebe0aa238a4de8545ee6d4d6d9b719044a39989867ce69bbc8445c20466a7e4f5161d0a6ae263717db731e1eb08f4e1f24d28ea2d55a63d6d2b1c717e4c171511b51c3ee46b039179fbf69fcd3c5c84318add0a76771650e8d1d3ba948abd048e2281d5a0ed8 ca90a7196ba4fdcb202265f0b6faa659267a492009a28dba3787f07f4af3770d64301ed11e13a9ab9762b1a110729f9db5d39562a1a5aa96e34082fcd4279c7a0646e3fad1380269d0d9cdf546a08ecc22b9a6dbe08d75568de8540e9c1e6a4795bd39bc712810a80a6fdea258e4936481c7a4b7d293eab715a331af11df78 4a66f2ca8241982d24e5ccdc3bd775bd08e00d873ed022384b63a5f023ff9cc9cc5c60f3ecb64bac383f380cc3de3a2746b4225db983663d179bbb063fd5bf8cd6a3a7a84b9a273087691e1e89b7c7d65f18d2454d3704993843b285cfb54557cfc8647ec40f90234ef022576dd05ba17b07c45caf035873a18647618962c0 f37583a907bbdce2afee783a8a8b46bfae16c33e19b34ab8c2926e568b3e16ba66feb54ffab3c3fd353d15cf35085f1d59cbead0192698e5c26bfe498119340df867ab86ff3e58f061ba5a061d274e809aae1f7513a28eed3d279f3f34f2de44cfa12aab0303d311b7c0e4b4cb66dc3959fb21b9c26348068311738cf2258d 5381f9dc01cdc49dcff5e588d9fe854fa4759395cb1dc51b58c83d4b55fcd3da70272881575b5acd9c11de97b79702ef417d0ac199bd5185533911dc5b4c8ec0db6e96e1a3c00477ce553b81a0f610d19c837699cbbf9c0bc4ed8dd9ffe6d13a8008b20d4c52135b6a9e515ea4fdf2057d9d4312ac75337abe16da9d7ef1bf 07aa4e4e8a5dff5381619fd1f2353a4de0ca3330417f3ebf9f86cb5921a1635f2da48f8aea9fba25db2f4d86ea8ff54ad165b68a0f30c1835b944221e4a674e9f805857bf7c93298f147a529636ce2b6aab94e37abef08e8261d74633ceaf5ae110455a53ac96a14637677d4f9392b8927a6031d0eee4b004ea1d41cd5c4f8 904c389bcf5c7ae18f77dc22438742eef46e018040a03144134968c92b82f88e22a9f9846f506444d5fd43f72c9272235fbf0845b5a0676c803bc61d66d5a18a2fbd447761c41fb79a30c90cbcab35840fb14a9bc8d5d6edb19f70b420d81df60713b6cac192bc9ef006f7af35114461cc87fc50a2323cf30af4788312239e 8546618038952f0e93de5ac06ad51551b8e968d49c16e7d59c7738e7e69798bc9f04b2b6175d24f33ba2eafa0bc36a5226b368c6636bc33334ab4b94ae08c4f9370bb31da42f53c3b76cee0da4146e99ae0f57086c479500c6d2342297e3d4f49f556d6934c312bd3ddc9beb1c07119dc1d91c20f678e7e52d1e0494859f6c 9dacb7ec450aa2047ac38fc0d3f1fb9b794eefb18e62daedafaac5bc083c5a8a0ef03c176195dab2c5dbc8aae1803e3a811369d1ea946c0eba323ff60e5affc5b60194997eaf8be304b65256d10ad5bfde7da1378a94902ee2005981d9c9ca902875fb9354c1ddd201484fbfb851e86a5d6dc541819e67d8ba415912f7f2e7 b1def89c663dedf9b5f2633f1c45f5529f944466bb5c0cd03ae26c78ab1c5491ff310f335d53d967214b2a5e2f0ac75a66048ebab664c15a69ea7c256c40783cc9f001aedfb315e16607a06f4c9cde1034f27e05a0e6a73381d83a5e678ba952308a6c9b73c98cefa070d3c52b2ecaf706b9b247fc88028c710c8d5d0aa49e b35b5f4006d43e554937605e1f5712667e46e63eff3f1082257c82669b1cfc8815b3c3e87069977dc980d23a145e33f43dbf5e90cdbdb684f7db8d66f84c50a594f6f4b4057b58e6c5e27b34df4ea6849d4668efd8d402eaf6dfcbf5c54e4f52d15f7236def60a892a9e300091e438d447fa6fd26435692a457e5eea4e2d69 ef8bb74daf6aecf57616fb6be91598ac5fa15d4dcb0c5806d4e43db6e526564cc3e2122b6ce50b5c637de8fb1b5bafffdf51214a8355f74cadd668f0d9b20e5bcee2a1485f2599088cfade4f5496f612de6f7607bd76d152c3f26944de667ca264af64eaba6f6f0fa1841e860a73075cb8e98792361b23a4cc2150cb9842d2 59f78e62959a21a5873e190356117a31e75377908e48f249345f9727c0c9d1231bb2ac7a4533b9f2f3c2f479fb24f38cde23dd8e29a7d1d381b92ca4557225b4a796cd5abe2cdb90d032189388fcbf9848b0602efd6aa662162b53a8c83ce3cf06a9dfd0f0ecd017e7c0a1c1adb88f64c85809fead4bea4b639ce4e74e008d a9f35970a1e9b973a878d5d419b43b8073c3dbbd829f07c45694edaa1ab98dfdd823830d663930ac316ea0c52f5e290e02b26fbb07d18f57d7bc4e572822f494304d6458efa42222bc6486acb53674595a913d613952fdba9e59f433641f01dbb7a7a2a16ca96480c229feaac7242ec15a7291637f09a99b3160c6ada9a478 e1b276f6d77329cb2f9569b539b24f174e2ff12218aafd06abd1b663dd42d1089ee817719ea0e7bba089e167bec881b68a59bab6556106b128126bfcc1be67017a2beb29e307d5a9ca5e6d916b2f829964f13a06249e1bbc41264eb0217462365451e96f4e9ac13941d9fd2fc1fd8d4aa2e6f14ef4b99d9b4c16a3850e2423 a84130f218a5cf5a64d467f7fe0f027c12f79c1ec8db81a4e4d584559d169ce624cad2d3c53bc2293e4de6e70a1f516e28d96710fcdade6a305816673be3f463cf03e98941162c265ba8dc5b88d2cd7d6e9ce00857cd7fa9498655eefa74e85a2b8ef749ce35ae966a9064052ad5a192bf7c5d9e9f7bf0f4254dbfed25b52d c0c98ea598b6decd079783a2524a25e7054e0280923537f3e00d05baab5bc51d67442e6bb14986248a6543e90ea9b14f777b6d575bb07a11996c311c98ae4a90d983415e0e6d14b2f509acb555e605644dc9cde6968e290fa223441dee889d832773e4b0b66404d7b583fb76bfc4a9b5a708c852613ab2212032ae4c59c922 2cf397dca566147a468838e2267fd4a55f2daf9b54f0cc55db9ca1ecc1a997a596a82812de11f0770b5eb5dde5412df05e9e02039e6d5e7d428c493b36d76b8208375861343469c5af66ff26ef2ee0e8b21f6c81be86d5bfe42d563901d8efd57f9ac0cf1acba4ca506b3499a790677792a528890c0562f44b6aa0b1608ee3 fc66c4e0e0b8432ea1b2c8adf009c14d6bd099e5d55457d0143628b907d3aa00fb6dfd690b7f6fc45c60cc937e99a3945719987c4108186762dfe0140731e12169d6b3cf6fc5cbcf1db786aa88068044b5260aa9bf8fd767f50691b123208d7cfd3d8805076a456b3455d36c569a3e7fc38d466f57f29e38aa97d030e0f4c2 fcaf77081fb37259948ef21c4c51b5b2661acb8b8e5e230346e19b03233fff6ed14c73092237cc8becda676e0c3d4205689d9b506bd0a079ab0f9ca49bb06e383896fb00f2a6b9b3485849fa6f8b3dd14946dcf5c5dc260800d54365fc619f594733f55fbb7e6b8c208d09a480a1ba1193f48f56416d6c36351861eff0ccf2 3990ff8a012f1652d082d061011cfc98bfa9d089fad96f48b275267710da5ec1e1ce243b609bcb72ef943521be21fdda9f24a9da985a6df8f0300ded2c5416313dff090042b1434952fe7ba55f07c19d97b2a8587e90431ab7375dff1a818e218340116c51c0a2c96ce249221a3f9c29f1f9bd7cb7b6e4595fa7764640ab41 9a2d69249c0fd1a2fd964f101bb46e61680bc62b1f55ae93a027b7c777611891566d89c1a33b999317c2a196cbfd4a6f8ec7f53ea3a9ca213f6dfe86f6ee51dff65aaa56612b1d78d55b23834a629c1f8b5347e8179e33ce883e0540d1a3036c163f2ce26ee6042fed8eede235251acc8904d71825ba22be8e34c2e06b0b01 6cb4584614c59abc462ddec40a9d43cb74e1d61b99e60a1dad094a33528cfb83bad8e7ce451c41b2a9c1c0fb554c62793e27553534ecf0af92ff48492fb4565f05cfdc2ff70f3299833c5c62912601ed94572c03430f4906d9d9298619d22b421b198f8323d5dc6c48a193a856f22b2a3f7adc218733d2dd9e6540879bb5c8 aa75b45fd299a6711eadb04410121076e0372b3cf7e22c949b51bf5c1d02f6fddd7a997fe2dfbb863bb96314cf130fd0a76dcdb21ea3d04f24d2948d4bb54e5070161f92e5212bec9da48827d791a83390aef110183038837cb513d717bc6b5619047157185121910a60cd0d6ebd5e6139d630be33d660e5380c11dadf1275 2f34d2cd155aa8d6e38553dfa89e2dd9964e0ade344e0d8ce50ece046db1496839859b4bdd3b4971af731ab12da964b0f7d4f220ad692c94473e176eeac031f237d8f0d576076ea791a6b670cd5fb4936a10acddeb44f4275183424b437245ec1729004edfe5e7e60d9ff533a606c69c52adb0d78732997f4d62551faaec01 e49094465d6fcf339ffe4b841fb20bb75f67f54d5e30993d1e24502d602b55948720411530024b3e5d8ac52f9a840fc5c7c15a2a9f652261e5d144eed3fca65d283db21c90cf1bc9c98dbbf6d2b0113a7d4c237d255b2704c5f7cd8d1f575d11bfcb3cd27a416605388b500681e3a41ebc1125a8a3fffda2db0dd3c7ca9eab 670823e8afe16f5628a879482838c09f00e780288bc2b470f39298d666e33142cb8068c4c99434368fc19638844e2fb241a18fdea88a6578cd9c311f6b36125d953c9d1d6850c006d1a9ad0bba7c4bed86b92befc612414e6ad90f8b1380a7d22a48f1cafd8cc6f8cd3f7dd17a61a5336caaa3a7d8ba40925585d41d4f1172 ecdcc2c3f613d6b2c0bce2c177b3445337fa2ac0038cb13e5636e5af3f5e82b387d6aed0814370dce2899abd93db3f6c576f7e3c9564c89dfbe904ab963e41716d9bd730cd79916a3de3b72fc19a4bbf350050388c7aa3b3a7f6bbb92208e09d48401d9e5af523aced2e3663abb00f34aada3e7a234e9f316bdf66dc19f95a c5d434e7c0f669524cf617426aacec209138d160d0ebce8ffa1f36a308937c09b84babf87a9e12ce22dcf4f74d766690c538bfd7e2f12c2507a9b8ef2941ba1103452b860c89d9e9ce5856eb68724d0e179a7c56509973502700879fc3c62dfbf427d9fddbb826884e4ecec9b9fbf52ac0550e9754ec76a5714a12a8832e10 755e0952b3f4758af045dd6050a930512f9b3120949349b9e8b88fe8d8f95650687ecca00e5882bace4deaf25ea5215cd4d150b675a5e74118e40b0647e54590262e0aa4b01a7cc80401ca6b3f064d9ebae831e5b4a318e0a3fc710887f3877ecbaf0d8a379ab23bc9b19d9478ed552c1bcb5f70e03b34ed8429af033fa1b0 8d99da8c61c26bedfdbbd22bad46b97a731d94ef4c8641e0d7f2734f6ab08c896d2c0b1d4531bad9d880882d5cde429616015ca37bf416e2b5fa7c68cb32af6d16d1980f1baf477d6a5205c640ee82f29df0eb4c4522b54a01989ba42fe0bf94912cb426ce2da3d0fcaa730b9cecbbf12a9577 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 cleartomark{restore}if %%EndFont setpacking %AI3_EndRider [ 39/quotesingle 96/grave 128/Adieresis/Aring/Ccedilla/Eacute/Ntilde/Odieresis /Udieresis/aacute/agrave/acircumflex/adieresis/atilde/aring/ccedilla/eacute /egrave/ecircumflex/edieresis/iacute/igrave/icircumflex/idieresis/ntilde /oacute/ograve/ocircumflex/odieresis/otilde/uacute/ugrave/ucircumflex /udieresis/dagger/degree/cent/sterling/section/bullet/paragraph/germandbls /registered/copyright/trademark/acute/dieresis/.notdef/AE/Oslash /.notdef/plusminus/.notdef/.notdef/yen/mu/.notdef/.notdef /.notdef/.notdef/.notdef/ordfeminine/ordmasculine/.notdef/ae/oslash /questiondown/exclamdown/logicalnot/.notdef/florin/.notdef/.notdef /guillemotleft/guillemotright/ellipsis/space/Agrave/Atilde/Otilde/OE/oe /endash/emdash/quotedblleft/quotedblright/quoteleft/quoteright/divide /.notdef/ydieresis/Ydieresis/fraction/currency/guilsinglleft/guilsinglright /fi/fl/daggerdbl/periodcentered/quotesinglbase/quotedblbase/perthousand /Acircumflex/Ecircumflex/Aacute/Edieresis/Egrave/Iacute/Icircumflex /Idieresis/Igrave/Oacute/Ocircumflex/.notdef/Ograve/Uacute/Ucircumflex /Ugrave/dotlessi/circumflex/tilde/macron/breve/dotaccent/ring/cedilla /hungarumlaut/ogonek/caron TE %AI55J_Tsume: None %AI3_BeginEncoding: _Device Device [/NUL /Eth /eth /Lslash /lslash /Scaron /scaron /Yacute /yacute /HT /LF /Thorn /thorn /CR /Zcaron /zcaron /DLE /DC1 /DC2 /DC3 /DC4 /onehalf /onequarter /onesuperior /threequarters /threesuperior /twosuperior /brokenbar /minus /multiply /RS /US /space /exclam /quotedbl /numbersign /dollar /percent /ampersand /quotesingle /parenleft /parenright /asterisk /plus /comma /hyphen /period /slash /zero /one /two /three /four /five /six /seven /eight /nine /colon /semicolon /less /equal /greater /question /at /A /B /C /D /E /F /G /H /I /J /K /L /M /N /O /P /Q /R /S /T /U /V /W /X /Y /Z /bracketleft /backslash /bracketright /asciicircum /underscore /grave /a /b /c /d /e /f /g /h /i /j /k /l /m /n /o /p /q /r /s /t /u /v /w /x /y /z /braceleft /bar /braceright /asciitilde /DEL /Adieresis /Aring /Ccedilla /Eacute /Ntilde /Odieresis /Udieresis /aacute /agrave /acircumflex /adieresis /atilde /aring /ccedilla /eacute /egrave /ecircumflex /edieresis /iacute /igrave /icircumflex /idieresis /ntilde /oacute /ograve /ocircumflex /odieresis /otilde /uacute /ugrave /ucircumflex /udieresis /dagger /degree /cent /sterling /section /bullet /paragraph /germandbls /registered /copyright /trademark /acute /dieresis /notequal /AE /Oslash /infinity /plusminus /lessequal /greaterequal /yen /mu /partialdiff /summation /product /pi /integral /ordfeminine /ordmasculine /Omega /ae /oslash /questiondown /exclamdown /logicalnot /radical /florin /approxequal /Delta /guillemotleft /guillemotright /ellipsis /nbspace /Agrave /Atilde /Otilde /OE /oe /endash /emdash /quotedblleft /quotedblright /quoteleft /quoteright /divide /lozenge /ydieresis /Ydieresis /fraction /currency /guilsinglleft /guilsinglright /fi /fl /daggerdbl /periodcentered /quotesinglbase /quotedblbase /perthousand /Acircumflex /Ecircumflex /Aacute /Edieresis /Egrave /Iacute /Icircumflex /Idieresis /Igrave /Oacute /Ocircumflex /apple /Ograve /Uacute /Ucircumflex /Ugrave /dotlessi /circumflex /tilde /macron /breve /dotaccent /ring /cedilla /hungarumlaut /ogonek /caron /_Device/Device 0 0 0 TZ %AI3_EndEncoding AdobeType [161/degree 173/notequal 176/infinity/plusminus/lessequal/greaterequal 181/mu/partialdiff/summation/product/pi/integral 189/Omega 195/radical 197/approxequal 198/Delta 214/divide/lozenge 240/apple /_Symbol_/Symbol 0 0 0 TZ %AI5_Begin_NonPrinting Np %AI3_BeginPattern: (Brick) (Brick) 0 0 72 72 [ %AI3_Tile (0 O 0 R 0.3 0.85 0.85 0 k 0.3 0.85 0.85 0 K ) @ ( %AI6_BeginPatternLayer 800 Ar 0 J 0 j 1 w 4 M []0 d %AI3_Note: 0 D 0 XR 0 0 m 0 72 L 72 72 L 72 0 L 0 0 L f %AI6_EndPatternLayer ) & (0 O 0 R 1 g 1 G ) @ ( %AI6_BeginPatternLayer 800 Ar 0 J 0 j 0.3 w 4 M []0 d %AI3_Note: 0 D 0 XR 0 68.4097 m 72 68.4097 l S 0 61.209 m 72 61.209 L S 0 54.0088 m 72 54.0088 L S 0 46.8076 m 72 46.8076 L S 0 39.6084 m 72 39.6084 L S 0 32.4072 m 72 32.4072 L S 0 25.207 m 72 25.207 L S 0 18.0059 m 72 18.0059 L S 0 10.8057 m 72 10.8057 L S 0 3.6064 m 72 3.6064 L S 68.4102 68.4097 m 68.4102 61.2217 l S 54.0098 68.4097 m 54.0098 61.2217 L S 39.6094 68.4097 m 39.6094 61.2217 L S 25.21 68.4097 m 25.21 61.2217 L S 10.8105 68.4097 m 10.8105 61.2217 L S 68.4102 53.9717 m 68.4102 46.7842 l S 54.0098 53.9717 m 54.0098 46.7842 L S 39.6094 53.9717 m 39.6094 46.7842 L S 25.21 53.9717 m 25.21 46.7842 L S 10.8105 53.9717 m 10.8105 46.7842 L S 68.4102 39.5967 m 68.4102 32.4092 l S 54.0098 39.5967 m 54.0098 32.4092 L S 39.6094 39.5967 m 39.6094 32.4092 L S 25.21 39.5967 m 25.21 32.4092 L S 10.8105 39.5967 m 10.8105 32.4092 L S 68.4102 25.2217 m 68.4102 18.0342 l S 54.0098 25.2217 m 54.0098 18.0342 L S 39.6094 25.2217 m 39.6094 18.0342 L S 25.21 25.2217 m 25.21 18.0342 L S 10.8105 25.2217 m 10.8105 18.0342 L S 68.4102 10.7842 m 68.4102 3.5967 l S 54.0098 10.7842 m 54.0098 3.5967 L S 39.6094 10.7842 m 39.6094 3.5967 L S 25.21 10.7842 m 25.21 3.5967 L S 10.8105 10.7842 m 10.8105 3.5967 L S 61.1973 3.5967 m 61.1973 0 L S 46.7969 3.5967 m 46.7969 0 L S 32.3965 3.5967 m 32.3965 0 L S 17.9971 3.5967 m 17.9971 0 L S 3.5967 3.5967 m 3.5967 0 l S 61.1973 18.0342 m 61.1973 10.8467 L S 46.7969 18.0342 m 46.7969 10.8467 L S 32.3965 18.0342 m 32.3965 10.8467 L S 17.9971 18.0342 m 17.9971 10.8467 L S 3.5967 18.0342 m 3.5967 10.8467 l S 61.1973 32.4092 m 61.1973 25.2217 L S 46.7969 32.4092 m 46.7969 25.2217 L S 17.9971 32.4092 m 17.9971 25.2217 L S 3.5967 32.4092 m 3.5967 25.2217 l S 61.1973 46.7842 m 61.1973 39.5967 L S 46.7969 46.7842 m 46.7969 39.5967 L S 32.3965 46.7842 m 32.3965 39.5967 L S 17.9971 46.7842 m 17.9971 39.5967 L S 3.5967 46.7842 m 3.5967 39.5967 l S 61.1973 61.2217 m 61.1973 54.0347 L S 46.7969 61.2217 m 46.7969 54.0347 L S 32.3965 61.2217 m 32.3965 54.0347 L S 17.9971 61.2217 m 17.9971 54.0347 L S 3.5967 61.2217 m 3.5967 54.0347 l S 61.1973 71.959 m 61.1973 68.4717 L S 46.7969 71.959 m 46.7969 68.4717 L S 32.3965 71.959 m 32.3965 68.4717 L S 17.9971 71.959 m 17.9971 68.4717 L S 3.5967 71.959 m 3.5967 68.4717 l S 32.3965 32.4092 m 32.3965 25.2217 L S %AI6_EndPatternLayer ) & ] E %AI3_EndPattern %AI3_BeginPattern: (Confetti) (Confetti) 4.85 3.617 76.85 75.617 [ %AI3_Tile (0 O 0 R 1 g 1 G ) @ ( %AI6_BeginPatternLayer 800 Ar 0 J 0 j 1 w 4 M []0 d %AI3_Note: 0 D 0 XR 4.85 3.617 m 4.85 75.617 L 76.85 75.617 L 76.85 3.617 L 4.85 3.617 L f %AI6_EndPatternLayer ) & (0 O 0 R 0 g 0 G ) @ ( %AI6_BeginPatternLayer 800 Ar 0 J 0 j 0.3 w 4 M []0 d %AI3_Note: 0 D 0 XR 10.6 64.867 m 7.85 62.867 l S 9.1 8.617 m 6.85 6.867 l S 78.1 68.617 m 74.85 67.867 l S 76.85 56.867 m 74.35 55.117 l S 79.6 51.617 m 76.6 51.617 l S 76.35 44.117 m 73.6 45.867 l S 78.6 35.867 m 76.6 34.367 l S 76.1 23.867 m 73.35 26.117 l S 78.1 12.867 m 73.85 13.617 l S 68.35 14.617 m 66.1 12.867 l S 76.6 30.617 m 73.6 30.617 l S 62.85 58.117 m 60.956 60.941 l S 32.85 59.617 m 31.196 62.181 l S 47.891 64.061 m 49.744 66.742 l S 72.814 2.769 m 73.928 5.729 l S 67.976 2.633 m 67.35 5.909 l S 61.85 27.617 m 59.956 30.441 l S 53.504 56.053 m 51.85 58.617 l S 52.762 1.779 m 52.876 4.776 l S 45.391 5.311 m 47.244 7.992 l S 37.062 3.375 m 35.639 5.43 l S 55.165 34.828 m 57.518 37.491 l S 20.795 3.242 m 22.12 5.193 l S 14.097 4.747 m 15.008 8.965 l S 9.736 1.91 m 8.073 4.225 l S 31.891 5.573 m 32.005 8.571 l S 12.1 70.367 m 15.6 68.867 l S 9.35 54.867 m 9.6 58.117 l S 12.85 31.867 m 14.35 28.117 l S 10.1 37.367 m 12.35 41.117 l S 34.1 71.117 m 31.85 68.617 l S 38.35 71.117 m 41.6 68.367 l S 55.1 71.117 m 58.35 69.117 l S 57.35 65.117 m 55.35 61.867 l S 64.35 66.367 m 69.35 68.617 l S 71.85 62.867 m 69.35 61.117 l S 23.6 70.867 m 23.6 67.867 l S 20.6 65.867 m 17.35 65.367 l S 24.85 61.367 m 25.35 58.117 l S 25.85 65.867 m 29.35 66.617 l S 14.1 54.117 m 16.85 56.117 l S 12.35 11.617 m 12.6 15.617 l S 12.1 19.867 m 14.35 22.367 l S 26.1 9.867 m 23.6 13.367 l S 34.6 47.117 m 32.1 45.367 l S 62.6 41.867 m 59.85 43.367 l S 31.6 35.617 m 27.85 36.367 l S 36.35 26.117 m 34.35 24.617 l S 33.85 14.117 m 31.1 16.367 l S 37.1 9.867 m 35.1 11.117 l S 34.35 20.867 m 31.35 20.867 l S 44.6 56.617 m 42.1 54.867 l S 47.35 51.367 m 44.35 51.367 l S 44.1 43.867 m 41.35 45.617 l S 43.35 33.117 m 42.6 30.617 l S 43.85 23.617 m 41.1 25.867 l S 44.35 15.617 m 42.35 16.867 l S 67.823 31.1 m 64.823 31.1 l S 27.1 32.617 m 29.6 30.867 l S 31.85 55.117 m 34.85 55.117 l S 19.6 40.867 m 22.1 39.117 l S 16.85 35.617 m 19.85 35.617 l S 20.1 28.117 m 22.85 29.867 l S 52.1 42.617 m 54.484 44.178 l S 52.437 50.146 m 54.821 48.325 l S 59.572 54.133 m 59.35 51.117 l S 50.185 10.055 m 53.234 9.928 l S 51.187 15.896 m 53.571 14.075 l S 58.322 19.883 m 59.445 16.823 l S 53.1 32.117 m 50.6 30.367 l S 52.85 24.617 m 49.6 25.617 l S 61.85 9.117 m 59.1 10.867 l S 69.35 34.617 m 66.6 36.367 l S 67.1 23.617 m 65.1 22.117 l S 24.435 46.055 m 27.484 45.928 l S 25.437 51.896 m 27.821 50.075 l S 62.6 47.117 m 65.321 46.575 l S 19.85 19.867 m 20.35 16.617 l S 21.85 21.867 m 25.35 22.617 l S 37.6 62.867 m 41.6 62.117 l S 38.323 42.1 m 38.823 38.6 l S 69.35 52.617 m 66.85 53.867 l S 14.85 62.117 m 18.1 59.367 l S 9.6 46.117 m 7.1 44.367 l S 20.6 51.617 m 18.6 50.117 l S 46.141 70.811 m 47.994 73.492 l S 69.391 40.561 m 71.244 43.242 l S 38.641 49.311 m 39.35 52.117 l S 25.141 16.811 m 25.85 19.617 l S 36.6 32.867 m 34.6 31.367 l S 6.1 68.617 m 2.85 67.867 l S 4.85 56.867 m 2.35 55.117 l S 7.6 51.617 m 4.6 51.617 l S 6.6 35.867 m 4.6 34.367 l S 6.1 12.867 m 1.85 13.617 l S 4.6 30.617 m 1.6 30.617 l S 72.814 74.769 m 73.928 77.729 l S 67.976 74.633 m 67.35 77.909 l S 52.762 73.779 m 52.876 76.776 l S 37.062 75.375 m 35.639 77.43 l S 20.795 75.242 m 22.12 77.193 l S 9.736 73.91 m 8.073 76.225 l S 10.1 23.617 m 6.35 24.367 l S 73.217 18.276 m 71.323 21.1 l S 28.823 39.6 m 29.505 42.389 l S 49.6 38.617 m 47.6 37.117 l S 60.323 73.6 m 62.323 76.6 l S 60.323 1.6 m 62.323 4.6 l S %AI6_EndPatternLayer ) & ] E %AI3_EndPattern %AI3_BeginPattern: (Leaves - Fall ) (Leaves - Fall ) 0 0 64.0781 78.9336 [ %AI3_Tile (0 O 0 R 0.05 0.2 1 0 k 0.05 0.2 1 0 K ) @ ( %AI6_BeginPatternLayer 800 Ar 0 J 0 j 1 w 4 M []0 d %AI3_Note: 0 D 0 XR 64.0781 78.9336 m 64.0781 0 L 0 0 L 0 78.9336 L 64.0781 78.9336 L f %AI6_EndPatternLayer ) & (0 O 0 R 0.83 0 1 0 k 0.83 0 1 0 K ) @ ( %AI6_BeginPatternLayer 800 Ar 0 J 0 j 1 w 4 M []0 d %AI3_Note: 1 D 0 XR 29.7578 0.9902 m 30.4346 1.1914 30.7246 1.3428 V 29.2559 4.0547 33.707 8.3359 34.627 9.0762 C 35.2275 8.8506 35.3477 6.3184 34.6699 4.9805 C 35.5137 5.1035 37.7031 3.7256 38.4609 2.4365 C 38.5254 3.125 40.0957 6.0664 40.9219 6.4434 C 40.002 6.8408 39.3359 8.3135 38.5742 9.7617 C 39.5957 9.9287 40.9961 9.0078 42.4668 8.1025 C 42.9814 8.9043 44.3555 9.875 45.6143 10.3916 C 44.5264 11.0781 44.0313 11.8203 43.5352 13.2793 C 42.4922 12.7139 40.3057 12.5645 39.7764 12.8516 C 40.291 13.9648 42.5371 14.5078 43.2676 14.4551 C 43.0137 15.3164 42.8652 17.4697 43.0391 20.0625 C 41.3789 18.7461 39.834 17.4297 38.1738 17.4883 C 38.4434 16.0664 37.8076 14.2607 37.4307 13.7676 C 36.8574 14.5117 36.4463 15.3389 36.8008 17.3164 C 35.3486 17.8008 34.1113 18.3467 32.7373 19.6045 C 32.7373 17.7734 32.166 16.5723 31.2969 15.2959 C 32.5576 14.8076 33.8301 13.6045 33.8252 12.5664 C 32.9775 12.7178 31.2852 13.4619 30.793 14.4551 C 30.0742 13.707 28.3906 12.3984 26.7871 12.3945 C 27.9746 11.5391 28.8945 10.5059 28.9893 8.5938 C 30.2422 9.5645 32.6953 10.1797 34.0752 9.582 C 29.2344 5.3457 29.7031 2.3125 29.7578 0.9902 C f 13.8525 29.9844 m 13.3281 29.5127 13.1309 29.25 V 15.623 27.4326 13.3691 21.6074 12.8555 20.5439 C 12.2168 20.4883 10.8096 23.2285 10.8457 24.7266 C 9.7129 23.9707 8.0488 24.0918 6.4463 24.3779 C 7.0186 23.2891 6.6172 21.3447 5.8164 20.5439 C 6.8184 20.5801 8.1699 19.8652 9.4785 18.8838 C 8.6436 18.0645 6.8164 18.2246 4.9004 18.8838 C 4.9004 17.5107 4.0781 15.7734 3.2412 14.5918 C 4.5576 14.6484 5.7031 13.9629 6.5605 12.9316 C 7.2256 14.5 9.2598 15.6133 10.166 15.5645 C 10.1826 14.1992 8.6094 12.1094 7.5879 11.7109 C 8.1875 11.041 9.207 9.5107 10.166 7.0947 C 10.9648 9.0205 12.1348 10.2627 13.3672 11.1953 C 12.2256 12.7578 12.3994 13.6289 12.7988 15.1074 C 13.541 14.5664 14.5723 14.1338 14.7441 12.1309 C 16.4609 12.416 17.5957 12.3447 19.0938 11.4434 C 18.6387 13.1055 18.6348 14.707 18.9551 16.4063 C 17.1055 16.2666 15.5449 16.4795 14.5156 17.9688 C 15.3457 18.1953 17.6055 18.2549 18.4795 17.3223 C 18.8066 18.3047 19.7012 19.7109 21.1475 20.4043 C 19.707 20.6641 18.7227 21.7637 17.8135 23.4492 C 17.1006 22.0332 14.873 20.3691 13.3711 20.3145 C 15.373 24.3779 15.373 27.2959 13.8525 29.9844 C f 41.2324 26.0742 m 41.5518 26.7021 41.7549 26.959 V 44.1523 25.0176 48.958 28.3262 49.8535 29.0957 C 49.7432 29.7266 47.6182 30.8643 45.9004 29.834 C 46.3408 31.123 45.4395 33.084 44.2402 34.126 C 45.9805 34.0254 48.126 35.3867 48.6484 36.1289 C 48.8701 35.1514 50.0527 33.8809 51.3379 32.8672 C 51.6895 33.8398 50.9941 35.958 50.0781 37.5605 C 51.3125 38.0605 52.4248 38.9912 52.8828 40.25 C 53.3398 38.9336 54.3428 38.2598 55.6875 37.5039 C 54.5273 36.0762 53.7471 33.9023 54.0273 33.0391 C 55.3496 33.374 56.9209 36.0918 57.0439 37.1816 C 57.9189 36.415 59.4727 35.7285 62.0537 35.4219 C 60.3535 34.3438 59.9902 32.3516 59.4063 30.9219 C 58.2588 31.3682 56.0898 31.4277 55.1152 30.8643 C 55.8281 30.2852 57.168 29.7344 59.1777 29.7207 C 59.1777 28.1758 59.6406 27.043 60.8945 25.8281 C 59.1719 25.8418 57.0723 25.3555 55.5762 24.9629 C 55.3281 26.292 54.4844 27.8887 53.3398 28.2891 C 53.334 27.4277 53.5996 25.1797 54.4844 24.5117 C 53.6201 23.9443 52.3672 22.5674 51.9102 20.8496 C 51.2881 22.1758 50.4268 23.4805 48.5645 23.9238 C 49.749 24.9766 50.584 26.9941 50.25 28.4609 C 45.1973 24.4785 42.5215 25.7773 41.2324 26.0742 C f 27.7578 38.7324 m 28.4346 38.9316 28.7246 39.084 V 27.2559 41.7969 31.707 46.0776 32.627 46.8169 C 33.2275 46.5918 33.3477 44.0586 32.6699 42.7227 C 33.5137 42.8457 35.7031 41.4678 36.4609 40.1787 C 36.5254 40.8652 38.0957 43.8066 38.9219 44.1846 C 38.002 44.582 37.3359 46.0547 36.5742 47.5039 C 37.5957 47.6709 38.9961 46.7485 40.4668 45.8438 C 40.9814 46.6445 42.3555 47.6177 43.6143 48.1328 C 42.5264 48.8198 42.0313 49.5615 41.5352 51.0205 C 40.4922 50.4556 38.3057 50.3057 37.7764 50.5938 C 38.291 51.7056 40.5371 52.2485 41.2676 52.1958 C 41.0137 53.0576 40.8652 55.2109 41.0391 57.8037 C 39.3789 56.4878 37.834 55.1719 36.1738 55.2285 C 36.4434 53.8076 35.8076 52.002 35.4307 51.5088 C 34.8574 52.2529 34.4463 53.0796 34.8008 55.0576 C 33.3486 55.5425 32.1113 56.0879 30.7373 57.3467 C 30.7373 55.5146 30.166 54.314 29.2969 53.0366 C 30.5576 52.5488 31.8301 51.3467 31.8252 50.3076 C 30.9775 50.46 29.2852 51.2036 28.793 52.1958 C 28.0742 51.4497 26.3906 50.1396 24.7871 50.1357 C 25.9746 49.2817 26.8945 48.2466 26.9893 46.335 C 28.2422 47.3057 30.6953 47.9209 32.0752 47.3237 C 27.2344 43.0869 27.7031 40.0547 27.7578 38.7324 C f 13.5195 70.3916 m 12.9941 69.9209 12.7988 69.6587 V 15.2891 67.8418 13.0352 62.0146 12.5225 60.9517 C 11.8828 60.8955 10.4766 63.6367 10.5117 65.1348 C 9.3809 64.3789 7.7148 64.4995 6.1133 64.7856 C 6.6855 63.6987 6.2842 61.7529 5.4834 60.9517 C 6.4854 60.9878 7.8359 60.2729 9.1455 59.2925 C 8.3105 58.4717 6.4834 58.6338 4.5674 59.2925 C 4.5674 57.9189 3.7461 56.1816 2.9082 54.9995 C 4.2246 55.0576 5.3691 54.3706 6.2275 53.3408 C 6.8926 54.9097 8.9258 56.0215 9.832 55.9727 C 9.8496 54.6079 8.2764 52.5176 7.2539 52.1187 C 7.8545 51.4497 8.873 49.9189 9.832 47.5039 C 10.6309 49.4297 11.8008 50.6719 13.0342 51.6045 C 11.8926 53.1655 12.0664 54.0366 12.4648 55.5146 C 13.209 54.9746 14.2393 54.5415 14.4102 52.5386 C 16.127 52.8247 17.2637 52.7529 18.7598 51.8525 C 18.3057 53.5137 18.3027 55.1147 18.623 56.8149 C 16.7725 56.6748 15.2129 56.8887 14.1826 58.377 C 15.0117 58.6035 17.2725 58.6626 18.1465 57.731 C 18.4736 58.7129 19.3691 60.1187 20.8145 60.8125 C 19.375 61.0728 18.3896 62.1719 17.4805 63.8579 C 16.7676 62.4429 14.541 60.7769 13.0371 60.7227 C 15.041 64.7856 15.041 67.7046 13.5195 70.3916 C f 41.2324 64.4824 m 41.5518 65.1113 41.7549 65.3682 V 44.1523 63.4272 48.958 66.7354 49.8535 67.5034 C 49.7432 68.1362 47.6182 69.2725 45.9004 68.2422 C 46.3408 69.5313 45.4395 71.4922 44.2402 72.5342 C 45.9805 72.4341 48.126 73.7954 48.6484 74.5371 C 48.8701 73.5601 50.0527 72.29 51.3379 71.2754 C 51.6895 72.249 50.9941 74.3662 50.0781 75.9683 C 51.3125 76.4692 52.4248 77.3994 52.8828 78.6582 C 53.3398 77.3423 54.3428 76.667 55.6875 75.9111 C 54.5273 74.4844 53.7471 72.3101 54.0273 71.4473 C 55.3496 71.7822 56.9209 74.5 57.0439 75.5903 C 57.9189 74.8232 59.4727 74.1372 62.0537 73.8311 C 60.3535 72.7534 59.9902 70.7612 59.4063 69.3301 C 58.2588 69.7773 56.0898 69.8364 55.1152 69.2725 C 55.8281 68.6934 57.168 68.1431 59.1777 68.1284 C 59.1777 66.583 59.6406 65.4512 60.8945 64.2373 C 59.1719 64.249 57.0723 63.7632 55.5762 63.3721 C 55.3281 64.7002 54.4844 66.2974 53.3398 66.6973 C 53.334 65.8364 53.5996 63.5874 54.4844 62.9214 C 53.6201 62.353 52.3672 60.9751 51.9102 59.2583 C 51.2881 60.583 50.4268 61.8882 48.5645 62.333 C 49.749 63.3862 50.584 65.4033 50.25 66.8691 C 45.1973 62.8872 42.5215 64.1851 41.2324 64.4824 C f %AI6_EndPatternLayer ) & ] E %AI3_EndPattern %AI3_BeginPattern: (Stripes) (Stripes) 8.45 4.6001 80.45 76.6001 [ %AI3_Tile (0 O 0 R 1 0.07 1 0 k 1 0.07 1 0 K ) @ ( %AI6_BeginPatternLayer 800 Ar 0 J 0 j 3.6 w 4 M []0 d %AI3_Note: 0 D 0 XR 8.2 8.2 m 80.7 8.2 L S 8.2 22.6001 m 80.7 22.6001 L S 8.2 37.0002 m 80.7 37.0002 L S 8.2 51.4 m 80.7 51.4 L S 8.2 65.8001 m 80.7 65.8001 L S 8.2 15.4 m 80.7 15.4 L S 8.2 29.8001 m 80.7 29.8001 L S 8.2 44.2 m 80.7 44.2 L S 8.2 58.6001 m 80.7 58.6001 L S 8.2 73.0002 m 80.7 73.0002 L S %AI6_EndPatternLayer ) & ] E %AI3_EndPattern %AI5_End_NonPrinting-- %AI5_Begin_NonPrinting Np %AI8_BeginBrushPattern (New Pattern 1) 0 A u 1 Ap 800 Ar 0 J 0 j 1 w 4 M []0 d %AI3_Note: 0 D 0 XR -7834.75 8587 m -7834.75 8563 L -7884.75 8563 L -7884.75 8587 L -7834.75 8587 L n u 0 Ap 0 O 1 g -7854.75 8585 m -7866.96 8588.0527 -7875.4434 8578.0605 -7884.75 8570.9512 C F -7844.75 8585 m -7861.1279 8589.0947 -7870.8008 8569.7227 -7884.75 8565.3154 C F -7884.75 8565 m -7864.75 8560 -7854.75 8590 -7834.75 8585 C F -7874.75 8565 m -7858.3721 8560.9053 -7848.6992 8580.2773 -7834.75 8584.6846 C F -7864.75 8565 m -7852.54 8561.9473 -7844.0566 8571.9395 -7834.75 8579.0488 C F -7844.75 8565 m -7841.1279 8564.0947 -7837.835 8564.3408 -7834.75 8565.3154 C F -7874.75 8585 m -7878.3721 8585.9053 -7881.665 8585.6592 -7884.75 8584.6846 C F -7844.7817 8565.125 m -7850.9009 8563.6162 -7854.7817 8565.125 V -7858.877 8563.6484 -7864.7817 8565.125 V -7869.7446 8563.4492 -7874.7817 8565.125 V -7880.7969 8563.5742 -7884.7817 8565.125 V -7884.7817 8584.8096 L -7881.6958 8585.7842 -7878.2969 8585.9912 -7874.3799 8584.9082 C -7868.2134 8586.4912 -7864.4634 8584.9082 V -7859.4634 8586.4912 -7854.3799 8584.8242 V -7850.0474 8586.4082 -7844.3799 8584.9082 V -7838.8799 8586.3242 -7834.7817 8585.125 V -7834.7817 8565.4404 L -7837.5254 8564.4287 -7840.6514 8563.9287 -7844.7817 8565.125 C f 0 R 0 G 1 J 1 j 0.5 w -7864.75 8585 m -7872.54 8586.9473 -7878.813 8583.585 -7884.75 8579.0488 C S -7854.75 8585 m -7866.96 8588.0527 -7875.4434 8578.0605 -7884.75 8570.9512 C S -7844.75 8585 m -7861.1279 8589.0947 -7870.8008 8569.7227 -7884.75 8565.3154 C S -7884.75 8565 m -7864.75 8560 -7854.75 8590 -7834.75 8585 C S -7874.75 8565 m -7858.3721 8560.9053 -7848.6992 8580.2773 -7834.75 8584.6846 C S -7864.75 8565 m -7852.54 8561.9473 -7844.0566 8571.9395 -7834.75 8579.0488 C S -7854.75 8565 m -7846.96 8563.0527 -7840.687 8566.415 -7834.75 8570.9512 C S -7844.75 8565 m -7841.1279 8564.0947 -7837.835 8564.3408 -7834.75 8565.3154 C S -7874.75 8585 m -7878.3721 8585.9053 -7881.665 8585.6592 -7884.75 8584.6846 C S U U %AI8_EndBrushPattern %AI8_BeginBrushPattern (New Pattern 2) 0 A u 800 Ar 0 J 0 j 1 w 4 M []0 d %AI3_Note: 0 D 0 XR -7884 8586 m -7819.187 8586 L -7819.187 8521.9023 L -7884 8521.9023 L -7884 8586 L n u 0 O 0 g -7849.6978 8544.4297 m -7851.6094 8521.9023 L -7853.5215 8544.4297 L -7852.9033 8544.3066 -7852.2642 8544.2402 -7851.6094 8544.2402 c -7850.9551 8544.2402 -7850.3159 8544.3066 -7849.6978 8544.4297 C f -7861.2402 8552.3975 m -7884 8554.3301 L -7861.1138 8556.2734 L -7861.2856 8555.5469 -7861.3848 8554.793 -7861.3848 8554.0156 c -7861.3848 8553.4629 -7861.3281 8552.9248 -7861.2402 8552.3975 C f -7856.519 8545.5723 m -7870.1626 8536.8047 L -7860.2153 8549.377 L -7859.3574 8547.791 -7858.0718 8546.4766 -7856.519 8545.5723 C f -7853.481 8563.6074 m -7851.5786 8586 L -7849.6768 8563.5967 L -7850.3018 8563.7227 -7850.9473 8563.791 -7851.6094 8563.791 c -7852.25 8563.791 -7852.873 8563.7246 -7853.481 8563.6074 C f -7841.9609 8555.5068 m -7819.187 8553.5732 L -7842.083 8551.6289 L -7842.083 8551.8506 L -7841.9258 8552.5488 -7841.834 8553.2695 -7841.834 8554.0156 c -7841.834 8554.5234 -7841.8848 8555.0195 -7841.9609 8555.5068 C f -7860.1138 8558.8262 m -7870.1641 8571.5293 L -7856.2778 8562.6055 L -7857.8823 8561.7305 -7859.2114 8560.416 -7860.1138 8558.8262 C f -7842.9961 8549.3945 m -7832.875 8536.6055 L -7846.7666 8545.5313 L -7845.1768 8546.4414 -7843.8633 8547.7793 -7842.9961 8549.3945 C f -7846.6895 8562.4512 m -7832.873 8571.3281 L -7842.9658 8558.5732 L -7843.8198 8560.1895 -7845.1152 8561.5313 -7846.6895 8562.4512 C f -7842.8887 8558.6133 m -7842.3862 8557.6641 -7842.043 8556.6211 -7841.875 8555.5195 c -7841.7993 8555.0293 -7841.748 8554.5273 -7841.748 8554.0156 c -7841.748 8553.2637 -7841.8398 8552.5352 -7841.998 8551.8311 c -7842.1958 8550.957 -7842.5049 8550.124 -7842.918 8549.3545 c -7843.7954 8547.7246 -7845.1191 8546.374 -7846.7241 8545.4561 c -7847.6294 8544.9375 -7848.6226 8544.5537 -7849.6802 8544.3457 c -7850.3047 8544.2207 -7850.9497 8544.1523 -7851.6094 8544.1523 c -7852.2695 8544.1523 -7852.915 8544.2207 -7853.5391 8544.3457 c -7854.623 8544.5605 -7855.6382 8544.957 -7856.5625 8545.4961 c -7858.1313 8546.4102 -7859.4282 8547.7363 -7860.291 8549.335 c -7860.7969 8550.2695 -7861.145 8551.2969 -7861.3262 8552.3828 c -7861.415 8552.916 -7861.4727 8553.459 -7861.4727 8554.0156 c -7861.4727 8554.8008 -7861.3711 8555.5605 -7861.1978 8556.293 c -7860.981 8557.207 -7860.6406 8558.0732 -7860.187 8558.8701 c -7859.2793 8560.4727 -7857.939 8561.8008 -7856.3174 8562.6826 c -7855.4487 8563.1553 -7854.5 8563.498 -7853.4961 8563.6934 c -7852.8848 8563.8115 -7852.2554 8563.8779 -7851.6094 8563.8779 c -7850.9414 8563.8779 -7850.29 8563.8086 -7849.6602 8563.6826 c -7848.5786 8563.4668 -7847.5664 8563.0654 -7846.6455 8562.5273 c -7845.0566 8561.5977 -7843.751 8560.2441 -7842.8887 8558.6133 c f U U %AI8_EndBrushPattern %AI8_BeginBrushPattern (New Pattern 3) 0 A u 1 Ap 800 Ar 0 J 0 j 1 w 4 M []0 d %AI3_Note: 0 D 0 XR -7874.75 8587 m -7874.75 8563 L -7884.75 8563 L -7884.75 8587 L -7874.75 8587 L n u u 0 Ap 0 O 1 g -7875.4058 8578.5361 m -7874.9878 8577.4355 -7874.75 8576.2471 -7874.75 8575 c -7874.75 8573.1377 -7875.2681 8571.4004 -7876.1543 8569.9072 c -7877.897 8566.9736 -7881.0898 8565 -7884.75 8565 C -7884.75 8585 L -7884.4297 8585 -7884.1143 8584.9814 -7883.8018 8584.9521 c -7881.9121 8584.7754 -7880.1807 8584.0645 -7878.7441 8582.9824 c -7877.2471 8581.8545 -7876.0801 8580.3184 -7875.4058 8578.5361 c f 0 R 0 G 1 J 1 j 0.5 w -7884.75 8565.3174 m -7881.7207 8566.2744 -7878.8926 8567.9326 -7876.1543 8569.9072 C S -7884.75 8570.9512 m -7881.5991 8573.3564 -7878.543 8576.0869 -7875.4058 8578.5361 C S -7878.7441 8582.9824 m -7880.8105 8581.8916 -7882.7993 8580.5342 -7884.75 8579.043 C S -7883.8018 8584.9521 m -7884.1191 8584.8682 -7884.4375 8584.7852 -7884.75 8584.6865 C S -7878.7441 8582.9824 m -7880.1807 8584.0645 -7881.9121 8584.7744 -7883.8018 8584.9521 C S -7875.4058 8578.5361 m -7874.9878 8577.4355 -7874.75 8576.2471 -7874.75 8575 c -7874.75 8573.1377 -7875.2681 8571.4004 -7876.1543 8569.9072 C S -7884.75 8585 m -7884.4297 8585 -7884.1143 8584.9814 -7883.8018 8584.9521 C S -7878.7441 8582.9824 m -7877.2471 8581.8545 -7876.0801 8580.3184 -7875.4058 8578.5361 C S -7876.1543 8569.9072 m -7877.8975 8566.9736 -7881.0898 8565 -7884.75 8565 C S U U U %AI8_EndBrushPattern %AI8_BeginBrushPattern (New Pattern 5) 0 A u 800 Ar 0 J 0 j 1 w 4 M []0 d %AI3_Note: 0 D 0 XR -7726.3994 8587 m -7726.3994 8573.4199 L -7885 8573.4199 L -7885 8587 L -7726.3994 8587 L n u u 0 O 0.285 0.228 0.171 0 k -7741.0786 8585.4844 m -7741.043 8586.6895 L -7727.5103 8587.5176 -7726.8418 8586.2822 v -7726.7441 8586.1016 -7726.647 8585.7148 -7726.561 8585.1934 C -7728.584 8585.8242 -7738.291 8585.5713 -7741.0786 8585.4844 C f 0.44 0.352 0.264 0 k -7741.4063 8574.0234 m -7741.3711 8575.2676 L -7738.4912 8575.0488 -7728.1914 8574.3164 -7726.543 8574.8652 C -7726.7031 8574.2188 -7726.9199 8573.7646 -7727.2046 8573.6152 c -7728.8306 8572.7656 -7741.4063 8574.0234 Y f 0.145 0.116 0.087 0 k -7741.3711 8575.2676 m -7741.0786 8585.4844 L -7738.291 8585.5713 -7728.584 8585.8242 -7726.561 8585.1934 C -7726.1519 8582.7773 -7725.9258 8577.3604 -7726.543 8574.8652 C -7728.1914 8574.3164 -7738.4912 8575.0488 -7741.3711 8575.2676 C f U u 0.155 0.124 0.093 0 k -7766.9375 8579.2734 m -7765.897 8579.6563 L -7747.0728 8575.1465 L -7747.481 8574.3145 L -7766.3633 8576.7246 L -7767.252 8577.0059 L -7767.6504 8576.8936 -7768.1934 8576.8242 V -7767.6094 8577.2373 -7767.1426 8578.1406 -7766.9375 8579.2734 C f u 0.085 0.068 0.051 0 k -7771.7993 8583.666 m -7772.5977 8583.7217 -7769.749 8583.6641 Y -7770.3481 8583.0176 -7770.771 8581.8203 -7770.8105 8580.4375 c -7770.8169 8580.2246 -7770.8105 8580.0176 -7770.7993 8579.8135 C -7771.041 8579.707 -7771.0918 8579.7734 -7771.6289 8579.5645 C -7771 8583.6113 -7771.7993 8583.666 v f 0.305 0.244 0.183 0 k -7770.3442 8576.8672 m -7770.5527 8576.8105 -7770.4937 8578.9307 Y -7769.4785 8579.7588 L -7767.8359 8578.9434 L -7766.9375 8579.2734 L -7767.1426 8578.1406 -7767.6094 8577.2373 -7768.1934 8576.8242 C -7768.6094 8576.7715 -7769.874 8576.7998 -7770.3442 8576.8672 C f U 0.115 0.092 0.069 0 k -7766.9375 8579.2734 m -7767.8359 8578.9434 L -7769.4785 8579.7588 L -7770.4937 8578.9307 L -7770.793 8579.708 -7770.7993 8579.8135 V -7769.5137 8580.3789 -7768.1831 8580.7402 -7766.8398 8580.9258 C -7766.79 8580.7275 -7766.7842 8580.543 -7766.79 8580.3369 c -7766.7998 8579.9717 -7766.8218 8579.6182 -7766.9375 8579.2734 C f 0.41 0.328 0.246 0 k -7747.4512 8575.3965 m -7749.377 8576.6426 -7758.3862 8582.0986 -7766.8398 8580.9258 C -7766.9038 8582.0928 -7767.248 8583.0908 -7767.75 8583.6631 C -7767.1895 8583.6621 L -7746.7402 8586.7559 L -7747.0366 8576.4258 L -7747.0728 8575.1465 L -7747.2046 8575.2373 -7747.4512 8575.3965 v f 0.395 0.316 0.237 0 k -7770.8105 8580.4375 m -7770.771 8581.8203 -7770.3481 8583.0176 -7769.749 8583.6641 C -7767.6807 8583.6631 L -7767.1782 8583.0908 -7766.8218 8582.0713 -7766.8398 8580.9258 C -7768.1831 8580.7402 -7769.5137 8580.3789 -7770.7993 8579.8135 C -7770.8105 8580.0176 -7770.8169 8580.2246 -7770.8105 8580.4375 c f U u 0 0 0 0.11 k -7741.2642 8574.2012 m -7740.2407 8574.0352 L -7741.2642 8574.2012 L -7741.2642 8574.2012 L f 0 0 0 0.34 k -7747.481 8574.3145 m -7747.0728 8575.1465 L -7745.6714 8574.918 L -7744.5234 8574.7314 L -7742.6758 8574.4307 L -7741.2642 8574.2012 L -7740.2407 8574.0352 L -7740.2954 8573.7168 -7740.3672 8573.498 -7740.4648 8573.4199 C -7747.481 8574.3145 L f 0 0 0 0.32 k -7745.8042 8579.207 m -7746.041 8586.8613 L -7740.7144 8587 L -7739.7266 8583.5146 -7740.1816 8579.1543 V -7745.8042 8579.207 L f U 0.025 0.02 0.015 0 k -7739.3223 8576.3848 m -7736.373 8576.9199 -7733.2402 8577.1602 -7730.3159 8576.3613 c -7730.2856 8576.3496 -7730.2754 8576.3184 -7730.2871 8576.2969 c -7730.2881 8576.2656 -7730.3198 8576.2559 -7730.3418 8576.2559 c -7733.2422 8577.0645 -7736.375 8576.8242 -7739.3042 8576.2783 c -7739.3262 8576.2793 -7739.3574 8576.291 -7739.3672 8576.3223 c -7739.3662 8576.3438 -7739.355 8576.375 -7739.3223 8576.3848 c -7739.3223 8576.3848 l f -7737.8374 8575.3076 m -7737.7295 8575.3789 -7737.6313 8575.4941 -7737.5234 8575.502 c -7733.7886 8575.832 -7730.1631 8575.7813 -7726.4746 8575.6641 c -7726.4526 8575.6641 -7726.4209 8575.6426 -7726.4214 8575.6211 c -7726.4214 8575.5879 -7726.4551 8575.5684 -7726.4766 8575.5684 c -7729.3223 8575.6816 -7732.1401 8575.6992 -7735.0039 8575.5352 c -7735.9336 8575.4766 -7736.9082 8575.7402 -7737.7778 8575.2207 c -7737.7993 8575.2109 -7737.8306 8575.2109 -7737.8506 8575.2334 c -7737.8618 8575.2559 -7737.8594 8575.2871 -7737.8374 8575.3076 c -7737.8374 8575.3076 l f -7733.373 8577.3672 m -7731.5098 8578.6797 -7729.3022 8579.374 -7727.1001 8579.8867 c -7727.0679 8579.8965 -7727.0474 8579.8848 -7727.0366 8579.8535 c -7727.0273 8579.8203 -7727.0488 8579.8008 -7727.0703 8579.79 c -7729.2617 8579.2656 -7731.459 8578.6035 -7733.3105 8577.2803 c -7733.3433 8577.2598 -7733.375 8577.2715 -7733.3848 8577.293 c -7733.4058 8577.3145 -7733.3945 8577.3457 -7733.373 8577.3672 c -7733.373 8577.3672 l f -7738.9321 8584.0566 m -7736.7295 8584.5703 -7734.5298 8585.0303 -7732.2798 8585.2754 c -7732.2598 8585.2852 -7732.229 8585.2637 -7732.229 8585.2422 c -7732.2183 8585.209 -7732.2407 8585.1777 -7732.2729 8585.1787 c -7734.5122 8584.8809 -7736.7305 8584.5176 -7738.9126 8583.9502 c -7738.9351 8583.9512 -7738.9673 8583.9629 -7738.9766 8583.9941 c -7738.9751 8584.0156 -7738.9648 8584.0479 -7738.9321 8584.0566 c -7738.9321 8584.0566 l f -7738.439 8583.3604 m -7736.3457 8584.1973 -7734.1016 8583.9297 -7731.9023 8583.9629 c -7731.8706 8583.9609 -7731.8496 8583.9395 -7731.8506 8583.9082 c -7731.8521 8583.875 -7731.873 8583.8555 -7731.8945 8583.8555 c -7734.0928 8583.8438 -7736.3374 8584.0996 -7738.4209 8583.2529 c -7738.4434 8583.2539 -7738.4746 8583.2656 -7738.4834 8583.2969 c -7738.4834 8583.3184 -7738.4722 8583.3506 -7738.439 8583.3604 c -7738.439 8583.3604 l f -7737.707 8584.7051 m -7736.3833 8584.752 -7735.1504 8584.5469 -7733.8271 8584.209 c -7733.3594 8584.0996 -7732.9199 8584.2266 -7732.4609 8584.2129 c -7731.897 8584.1973 l -7731.874 8584.1963 -7731.8633 8584.1855 -7731.8535 8584.1738 c -7731.834 8584.1523 -7731.8442 8584.1211 -7731.8662 8584.0996 c -7732.0625 8583.9453 l -7732.0742 8583.9453 -7732.085 8583.9355 -7732.0962 8583.9355 c -7732.5 8583.9473 l -7733.9551 8584.1914 -7735.457 8584.6719 -7736.8926 8584.0742 c -7736.9258 8584.0645 -7736.957 8584.0859 -7736.9673 8584.1074 c -7736.9673 8584.1396 -7736.9551 8584.1602 -7736.9336 8584.1709 c -7735.647 8584.6992 -7734.1714 8584.4756 -7732.8818 8584.0547 c -7732.0918 8584.043 L -7732.124 8584.0332 L -7731.9282 8584.1875 L -7731.8984 8584.0898 L -7732.4639 8584.1064 l -7732.9321 8584.1406 -7733.3848 8583.9834 -7733.8398 8584.1035 c -7735.1543 8584.4609 -7736.3975 8584.625 -7737.71 8584.5986 c -7737.7422 8584.5996 -7737.7642 8584.6211 -7737.7617 8584.6533 c -7737.7617 8584.6855 -7737.7402 8584.7061 -7737.707 8584.7051 c -7737.707 8584.7051 l f -7738.5718 8585.0605 m -7735.8711 8586.2207 -7732.9023 8585.5703 -7730.1279 8585.1816 c -7729.7832 8585.2891 l -7729.7617 8585.2988 -7729.7417 8585.2871 -7729.7207 8585.2656 c -7729.71 8585.2441 -7729.7217 8585.2129 -7729.7422 8585.2021 c -7730.0801 8585.0098 l -7732.7754 8584.3926 -7735.5391 8584.7813 -7738.271 8584.7852 c -7738.3022 8584.7871 -7738.3232 8584.8086 -7738.3223 8584.8398 c -7738.3198 8584.8721 -7738.2983 8584.8926 -7738.2681 8584.8926 c -7735.6738 8584.9355 -7733.0303 8584.4434 -7730.4727 8585.0742 c -7729.7954 8585.2891 L -7729.7534 8585.1914 L -7730.1406 8585.0859 l -7732.9058 8585.4424 -7735.8418 8586.1348 -7738.5313 8584.9746 c -7738.5537 8584.9648 -7738.585 8584.9648 -7738.5962 8584.998 c -7738.6055 8585.0195 -7738.605 8585.0508 -7738.5718 8585.0605 c -7738.5718 8585.0605 l f -7735.6895 8578.3945 m -7734.3945 8578.9004 -7732.9834 8578.6465 -7731.6802 8578.3438 c -7731.647 8578.3418 -7731.6367 8578.3203 -7731.6382 8578.2891 c -7731.6504 8578.2568 -7731.6714 8578.2461 -7731.7031 8578.248 c -7732.998 8578.5303 -7734.377 8578.8154 -7735.6504 8578.2969 c -7735.6826 8578.2871 -7735.7144 8578.2988 -7735.7246 8578.3311 c -7735.7222 8578.3525 -7735.7114 8578.3848 -7735.6895 8578.3945 c -7735.6895 8578.3945 l f -7736.1401 8580.2207 m -7734.2266 8580.6895 -7732.3145 8581.1035 -7730.355 8581.3242 c -7730.3242 8581.334 -7730.3022 8581.3125 -7730.293 8581.2803 c -7730.2954 8581.2598 -7730.3159 8581.2285 -7730.3374 8581.2285 c -7732.2959 8581.0078 -7734.209 8580.582 -7736.1206 8580.1133 c -7736.1426 8580.1152 -7736.1738 8580.126 -7736.1831 8580.1582 c -7736.1831 8580.1797 -7736.1719 8580.2109 -7736.1401 8580.2207 c -7736.1401 8580.2207 l f -7736.9336 8582.6348 m -7734.499 8583.4609 -7731.8647 8583.0547 -7729.3457 8583.0879 c -7729.313 8583.0879 -7729.293 8583.0664 -7729.293 8583.0332 c -7729.2954 8583.0117 -7729.3159 8582.9922 -7729.3481 8582.9922 c -7731.8574 8582.916 -7734.481 8583.3848 -7736.8945 8582.5264 c -7736.9282 8582.5273 -7736.959 8582.5391 -7736.9688 8582.5605 c -7736.9678 8582.5918 -7736.9561 8582.624 -7736.9336 8582.6348 c -7736.9336 8582.6348 l f -7732.0542 8583.8496 m -7730.6582 8584.5449 -7729.0503 8584.4033 -7727.5342 8584.4668 c -7727.502 8584.4648 -7727.4824 8584.4434 -7727.4824 8584.4121 c -7727.4834 8584.3906 -7727.5054 8584.3594 -7727.5366 8584.3594 c -7729.0137 8584.2207 -7730.6489 8584.5234 -7732.0039 8583.7617 c -7732.0366 8583.7529 -7732.0679 8583.7637 -7732.0786 8583.7861 c -7732.0879 8583.8076 -7732.0767 8583.8398 -7732.0542 8583.8496 c -7732.0542 8583.8496 l f -7731.3418 8580.4248 m -7730.3926 8580.3975 -7729.4336 8580.3701 -7728.4839 8580.3428 c -7728.4526 8580.3418 -7728.4312 8580.3203 -7728.4336 8580.2881 c -7728.4336 8580.2559 -7728.4551 8580.2354 -7728.4878 8580.2363 c -7729.437 8580.2637 -7730.397 8580.291 -7731.3457 8580.3184 c -7731.377 8580.3184 -7731.3975 8580.3418 -7731.3975 8580.373 c -7731.397 8580.4043 -7731.374 8580.4258 -7731.3418 8580.4248 c -7731.3418 8580.4248 l f -7729.1592 8578.0361 m -7728.6895 8578.0645 -7728.209 8578.0723 -7727.7383 8578.0918 c -7727.7168 8578.0908 -7727.6855 8578.0684 -7727.6865 8578.0371 c -7727.687 8578.0039 -7727.71 8577.9844 -7727.7417 8577.9844 c -7728.2114 8577.9873 -7728.6816 8577.9375 -7729.1514 8577.9395 c -7729.1831 8577.9297 -7729.2031 8577.9512 -7729.2134 8577.9844 c -7729.2129 8578.0156 -7729.1914 8578.0371 -7729.1592 8578.0361 c -7729.1592 8578.0361 l f -7736.9702 8580.2344 m -7736.5688 8580.5107 -7736.125 8580.6797 -7735.645 8580.751 c -7735.6113 8580.7607 -7735.5918 8580.7383 -7735.5806 8580.7168 c -7735.5703 8580.6855 -7735.5928 8580.6543 -7735.6152 8580.6543 c -7736.0854 8580.5723 -7736.5176 8580.4023 -7736.9209 8580.1475 c -7736.9521 8580.1377 -7736.9849 8580.1387 -7736.9946 8580.1709 c -7737.0039 8580.1934 -7736.9922 8580.2246 -7736.9702 8580.2344 c -7736.9702 8580.2344 l f -7738.1904 8586.085 m -7735.7344 8586.5273 -7733.2983 8587.001 -7730.7993 8586.7266 c -7730.7778 8586.7266 -7730.7568 8586.7041 -7730.7578 8586.6719 c -7730.7578 8586.6406 -7730.7798 8586.6191 -7730.8022 8586.6191 c -7733.291 8586.873 -7735.7344 8586.4844 -7738.1719 8585.9775 c -7738.1934 8585.9785 -7738.2256 8585.9902 -7738.2344 8586.0215 c -7738.2344 8586.043 -7738.2222 8586.0752 -7738.1904 8586.085 c -7738.1904 8586.085 l f 0.195 0.156 0.117 0 k -7738.166 8574.6445 m -7735.7969 8574.2676 -7733.4058 8574.3477 -7731.0298 8574.5898 c -7730.998 8574.5879 -7730.9766 8574.5664 -7730.9766 8574.5352 c -7730.9785 8574.5137 -7731 8574.4824 -7731.0215 8574.4824 c -7733.4082 8574.2422 -7735.791 8574.1602 -7738.1694 8574.5391 c -7738.2026 8574.5391 -7738.2222 8574.5605 -7738.2217 8574.5938 c -7738.2207 8574.625 -7738.1992 8574.6465 -7738.166 8574.6445 c -7738.166 8574.6445 l f 0.335 0.268 0.201 0 k -7737.4351 8574.1113 m -7734.9282 8574.1152 -7732.4146 8574.2773 -7729.918 8573.8965 c -7729.8862 8573.8945 -7729.8647 8573.873 -7729.8662 8573.8418 c -7729.8672 8573.8086 -7729.8896 8573.7891 -7729.9209 8573.7891 c -7732.418 8574.1699 -7734.9297 8574.0293 -7737.4375 8574.0059 c -7737.46 8574.0059 -7737.481 8574.0273 -7737.4785 8574.0596 c -7737.4785 8574.0918 -7737.457 8574.1123 -7737.4351 8574.1113 c -7737.4351 8574.1113 l f 0.205 0.164 0.123 0 k -7738.9766 8574.3262 m -7737.5039 8574.668 -7736.0078 8574.4023 -7734.5391 8574.2207 c -7734.5078 8574.2207 -7734.4873 8574.1973 -7734.499 8574.166 c -7734.5 8574.1348 -7734.5215 8574.1133 -7734.5537 8574.125 c -7736.0103 8574.2842 -7737.4961 8574.583 -7738.9473 8574.2188 c -7738.9785 8574.2207 -7739.0103 8574.2324 -7739.0098 8574.2637 c -7739.019 8574.2852 -7738.998 8574.3164 -7738.9766 8574.3262 c -7738.9766 8574.3262 l f -7732.3535 8573.7949 m -7731.1978 8573.9219 -7730.0273 8573.8145 -7728.8926 8573.5898 c -7728.8711 8573.5781 -7728.8506 8573.5566 -7728.8618 8573.5244 c -7728.8623 8573.5029 -7728.8945 8573.4824 -7728.916 8573.4941 c -7730.0503 8573.7402 -7731.1914 8573.7939 -7732.3462 8573.6885 c -7732.3794 8573.6895 -7732.3984 8573.7109 -7732.4087 8573.7324 c -7732.4082 8573.7646 -7732.3862 8573.7852 -7732.3535 8573.7949 c -7732.3535 8573.7949 l f 0.335 0.268 0.201 0 k -7739.2681 8576.4473 m -7737.9214 8577.1885 -7736.3066 8576.5977 -7734.855 8576.6416 c -7734.8223 8576.6406 -7734.8022 8576.6191 -7734.8022 8576.5859 c -7734.8042 8576.5654 -7734.8262 8576.5449 -7734.8574 8576.5449 c -7736.2886 8576.4902 -7737.8823 8577.0801 -7739.2168 8576.3506 c -7739.2383 8576.3398 -7739.2695 8576.3516 -7739.291 8576.374 c -7739.3008 8576.3955 -7739.2886 8576.4277 -7739.2681 8576.4473 c -7739.2681 8576.4473 l f -7737.8945 8578.5645 m -7735.6719 8579.0449 -7733.3896 8578.6162 -7731.1504 8578.5625 c -7731.1177 8578.5615 -7731.0977 8578.5391 -7731.0977 8578.5078 c -7731.1001 8578.4863 -7731.1318 8578.4668 -7731.1519 8578.4668 c -7733.3833 8578.4775 -7735.6519 8578.9805 -7737.875 8578.457 c -7737.8975 8578.457 -7737.9287 8578.4688 -7737.9375 8578.502 c -7737.9375 8578.5225 -7737.9258 8578.5547 -7737.8945 8578.5645 c -7737.8945 8578.5645 l f -7732.0273 8575.1406 m -7730.3496 8575.9688 -7728.499 8576.502 -7726.603 8576.3613 c -7726.5718 8576.3613 -7726.5513 8576.3389 -7726.5527 8576.3066 c -7726.5527 8576.2754 -7726.5742 8576.2539 -7726.6074 8576.2559 c -7728.481 8576.416 -7730.3198 8575.8604 -7731.9873 8575.0547 c -7732.0078 8575.0449 -7732.041 8575.0449 -7732.0503 8575.0781 c -7732.061 8575.0996 -7732.061 8575.1309 -7732.0273 8575.1406 c -7732.0273 8575.1406 l f u 0.5 0.85 1 0.45 k -7885 8581.9082 m -7885.0254 8582.4883 -7884.5664 8583.1875 -7883.167 8583.9902 C -7882.8521 8584.0029 -7881.3945 8584.0234 -7879.0889 8584.0488 C -7879.0889 8581.8223 L -7881.1382 8581.8457 -7883.1177 8581.8867 -7885 8581.9082 C f -7884.5088 8580.9688 m -7879.0889 8580.8447 L -7879.0889 8579.8145 L -7882.644 8579.959 L -7883.8145 8580.3301 -7884.5088 8580.9688 V f 0.5 0.85 1 0.32 k -7879.0889 8580.8252 m -7884.4746 8580.9434 L -7884.7695 8581.2148 -7884.9849 8581.5566 -7885 8581.9277 C -7883.1177 8581.9063 -7881.1382 8581.8848 -7879.0889 8581.8613 C -7879.0889 8580.8252 L f 0.5 0.85 1 0.45 k -7774.1504 8580.6172 m -7852.3584 8581.541 -7879.1079 8581.8418 V -7879.1079 8584.0488 L -7862.8145 8584.2324 -7803.9902 8584.707 Y -7769.749 8583.6641 L -7770.457 8580.5684 L -7774.1504 8580.6172 L f 0.5 0.85 1 0.12 k -7879.1079 8579.8145 m -7879.1079 8580.8447 L -7770.4258 8579 L -7770.3833 8576.8633 L -7803.6553 8576.7129 L -7879.1079 8579.8145 L f u 0.065 0.052 0.039 0 k -7747.0728 8575.1465 m -7747.0366 8576.4258 L -7747.2954 8575.1172 L -7765.897 8579.6563 L -7766.9375 8579.2734 L -7766.8794 8579.6055 -7766.8398 8579.957 -7766.8306 8580.3223 c -7766.8242 8580.5283 -7766.8281 8580.7285 -7766.8398 8580.9258 C -7758.3862 8582.0986 -7748.9634 8577.6719 -7747.0366 8576.4258 C -7746.7402 8586.7559 L -7746.041 8586.8613 L -7745.8042 8579.207 L -7740.1816 8579.1543 L -7740.0898 8577.0137 -7740.0718 8575.0215 -7740.2407 8574.0352 C -7747.0728 8575.1465 L f 0.4 0.7 1 0 k -7770.457 8580.5879 m -7770.4258 8578.9805 L -7879.1079 8580.8252 L -7879.1079 8581.8613 L -7852.3584 8581.5605 -7770.457 8580.5879 Y f U U 0.025 0.02 0.015 0 k -7734.7344 8583.0293 m -7734.7344 8583.0625 -7734.7129 8583.082 -7734.6802 8583.082 c -7731.6714 8583.1133 -7729.4214 8582.9453 -7726.415 8582.8594 C -7726.4087 8582.7656 L -7729.3262 8582.8701 -7731.7607 8583.0078 -7734.6841 8582.9746 C -7734.7168 8582.9766 -7734.7358 8582.998 -7734.7344 8583.0293 C f -7726.3994 8582.7656 m -7726.4082 8582.7441 L -7726.4087 8582.7656 L -7726.4063 8582.7656 -7726.4033 8582.7656 -7726.3994 8582.7656 C f -7730.4487 8581.4238 m -7731.4458 8581.292 -7732.3394 8581.7656 -7733.2114 8582.1973 C -7733.2441 8582.208 -7733.2534 8582.2402 -7733.2422 8582.2715 C -7733.2305 8582.293 -7733.1982 8582.3027 -7733.1777 8582.291 c -7732.3262 8581.8301 -7731.4312 8581.4199 -7730.4678 8581.5195 c -7729.1079 8581.6621 -7727.9038 8582.375 -7726.5254 8582.4531 C -7726.4463 8582.3594 L -7728.04 8582.2656 -7728.8647 8581.623 -7730.4487 8581.4238 c f U U %AI8_EndBrushPattern %AI8_BeginBrushPattern (New Pattern 6) 0 A u 1 Ap 800 Ar 0 J 0 j 1 w 4 M []0 d %AI3_Note: 0 D 0 XR -7884.75 8563 m -7884.75 8587 L -7874.75 8587 L -7874.75 8563 L -7884.75 8563 L n 0 Ap 0 O 1 g -7874.75 8565 m -7875.0703 8565 -7875.3857 8565.0186 -7875.6982 8565.0479 c -7877.5879 8565.2256 -7879.3198 8565.9346 -7880.7559 8567.0176 c -7882.2529 8568.1465 -7883.4199 8569.6816 -7884.0942 8571.4639 c -7884.5122 8572.5645 -7884.75 8573.7529 -7884.75 8575 c -7884.75 8576.8623 -7884.2319 8578.5996 -7883.3457 8580.0918 c -7881.6025 8583.0273 -7878.4102 8585 -7874.75 8585 C -7874.75 8565 L f 0 R 0 G 1 J 1 j 0.5 w -7874.75 8584.6816 m -7877.7793 8583.7256 -7880.6074 8582.0674 -7883.3457 8580.0918 C S -7874.75 8579.0488 m -7877.8999 8576.6436 -7880.957 8573.9131 -7884.0942 8571.4639 C S -7880.7559 8567.0176 m -7878.6904 8568.1084 -7876.7017 8569.4668 -7874.75 8570.957 C S -7875.6982 8565.0479 m -7875.3809 8565.1309 -7875.063 8565.2148 -7874.75 8565.3145 C S -7880.7559 8567.0176 m -7879.3193 8565.9355 -7877.5879 8565.2256 -7875.6982 8565.0479 C S -7884.0942 8571.4639 m -7884.5122 8572.5645 -7884.75 8573.7529 -7884.75 8575 c -7884.75 8576.8623 -7884.231 8578.5996 -7883.3457 8580.0918 C S -7874.75 8565 m -7875.0703 8565 -7875.3857 8565.0186 -7875.6982 8565.0479 C S -7880.7559 8567.0176 m -7882.2529 8568.1465 -7883.4199 8569.6816 -7884.0942 8571.4639 C S -7883.3457 8580.0918 m -7881.6025 8583.0273 -7878.4102 8585 -7874.75 8585 C S U %AI8_EndBrushPattern %AI8_BeginBrushPattern (New Pattern 8) 0 A u 800 Ar 0 J 0 j 1 w 4 M []0 d %AI3_Note: 0 D 0 XR -7883.9521 8584.3125 m -7776.7954 8584.3125 L -7776.7954 8570.1855 L -7883.9521 8570.1855 L -7883.9521 8584.3125 L n u 0 O 0 0 0 1 k -7882.2832 8583.623 m -7882.8535 8586 -7882.8184 8582.0039 V -7883.0479 8578.8027 L -7883.6167 8576.4551 L -7883.4502 8574.123 L -7881.9502 8573.4551 -7865.2832 8572.123 V -7858.6167 8570.7891 -7849.6167 8570.7891 V -7784.3936 8571.4766 -7779.4912 8572.8848 v -7820.3882 8570.875 -7822.9688 8571.5117 v -7783.8569 8573.1602 -7780.8545 8574.4316 v -7818.79 8572.5469 -7822.167 8574.1777 v -7787.249 8575.9102 -7783.021 8577.5313 v -7789.7217 8576.8828 -7791.5127 8577.082 v -7788.3896 8577.5703 l -7793.4194 8577.502 l -7796.3218 8577.1289 l -7788.4521 8578.2422 -7787.9033 8578.8086 v -7784.3154 8578.1309 -7798.5186 8578.3848 v -7832.1177 8574.4551 -7882.2832 8583.623 V f /BBAccumRotation (5.805971) XT 0 R 0 0 0 0.5 K 0.025 w -7883.9502 8573.123 m -7863.667 8571.2949 -7843.9727 8570.2207 v -7801.1514 8570.502 -7796.5737 8570.9004 v -7784.1631 8571.0313 -7776.7959 8572.0273 v S /BBAccumRotation (5.805971) XT 0 0 0 1 K -7821.8369 8570.4082 m -7825.2959 8570.0273 -7851.2607 8570.2793 Y -7861.627 8570.1602 -7883.9502 8573.123 Y S /BBAccumRotation (5.805971) XT -7820.9873 8573.6641 m -7790.3608 8574.582 -7783.6606 8575.2324 v S /BBAccumRotation (5.805971) XT 0 0 0 0.5 K -7829.6201 8578.2051 m -7794.3706 8579.6172 -7791.4058 8580.1406 v S /BBAccumRotation (5.805971) XT U U %AI8_EndBrushPattern %AI8_BeginBrushPattern (New Pattern 10) 0 A u 800 Ar 0 J 0 j 1 w 4 M []0 d %AI3_Note: 0 D 0 XR -7884 8586 m -7833.8921 8586 L -7833.8921 8529.9756 L -7884 8529.9756 L -7884 8586 L n u 0 O 0.1 1 1 0 k -7846.9014 8551.5752 m -7848.7178 8545.0957 -7858.8247 8548.4658 Y -7858.791 8548.5303 L -7868.8999 8545.1611 -7870.7144 8551.6396 V -7876.6758 8569.0068 -7871.4922 8575.7451 V -7864.7529 8585.3369 -7860.6055 8585.3369 V -7857.0103 8585.2705 L -7852.8638 8585.2705 -7846.125 8575.6816 Y -7840.9409 8568.9424 -7846.9014 8551.5752 Y f u 0 0 0 1 k -7851.3926 8529.9756 m -7852.1167 8531.4199 -7852.9238 8532.4756 V -7852.4058 8532.0635 -7851.5151 8531.1924 -7851.3926 8529.9756 C f -7865.064 8532.4854 m -7865.8711 8531.4307 -7866.5942 8529.9863 Y -7866.4727 8531.2021 -7865.582 8532.0732 -7865.064 8532.4854 C f U 0 0.61 0.74 0 k -7850.5977 8554.4609 m -7851.9038 8549.7959 -7859.1816 8552.2217 Y -7859.1567 8552.2686 L -7866.436 8549.8428 -7867.7417 8554.5078 V -7872.0337 8567.0117 -7868.3018 8571.8633 V -7863.4487 8578.7686 -7860.4634 8578.7686 V -7857.875 8578.7227 L -7854.8887 8578.7227 -7850.0366 8571.8174 Y -7846.3042 8566.9639 -7850.5977 8554.4609 Y f u 1 Ap 0.73 0.43 1 0.22 k 0 R 0 0 0 1 K -7854.6226 8557.2754 m -7853.813 8557.2754 -7853.1558 8556.6182 -7853.1558 8555.8096 c -7853.1558 8555 -7853.813 8554.3428 -7854.6226 8554.3428 c -7855.4321 8554.3428 -7856.0889 8555 -7856.0889 8555.8096 c -7856.0889 8556.6182 -7855.4321 8557.2754 -7854.6226 8557.2754 c b -7854.3638 8568.9971 m -7853.0806 8568.9971 -7852.0415 8568.1201 -7852.0415 8567.042 c -7852.0415 8565.9619 -7853.0806 8565.0869 -7854.3638 8565.0869 c -7855.645 8565.0869 -7856.6846 8565.9619 -7856.6846 8567.042 c -7856.6846 8568.1201 -7855.645 8568.9971 -7854.3638 8568.9971 c b -7853.834 8580.7861 m -7852.2817 8580.7861 -7851.0239 8580.1299 -7851.0239 8579.3213 c -7851.0239 8578.5117 -7852.2817 8577.8545 -7853.834 8577.8545 c -7855.3862 8577.8545 -7856.645 8578.5117 -7856.645 8579.3213 c -7856.645 8580.1299 -7855.3862 8580.7861 -7853.834 8580.7861 c b -7849.6104 8552.5264 m -7848.8687 8552.5264 -7848.2671 8551.8154 -7848.2671 8550.9365 c -7848.2671 8550.0596 -7848.8687 8549.3477 -7849.6104 8549.3477 c -7850.353 8549.3477 -7850.9546 8550.0596 -7850.9546 8550.9365 c -7850.9546 8551.8154 -7850.353 8552.5264 -7849.6104 8552.5264 c b -7848.0034 8574.083 m -7848.8818 8573.7354 -7849.1494 8572.335 -7848.603 8570.9541 c -7848.0566 8569.5752 -7846.9014 8568.7363 -7846.0234 8569.085 c -7845.145 8569.4326 -7844.877 8570.833 -7845.4233 8572.2139 c -7845.9702 8573.5947 -7847.125 8574.4316 -7848.0034 8574.083 c b u -7863.0566 8557.1592 m -7863.8662 8557.1592 -7864.5239 8556.502 -7864.5239 8555.6934 c -7864.5239 8554.8828 -7863.8662 8554.2266 -7863.0566 8554.2266 c -7862.248 8554.2266 -7861.5913 8554.8828 -7861.5913 8555.6934 c -7861.5913 8556.502 -7862.248 8557.1592 -7863.0566 8557.1592 c b -7863.3159 8568.8799 m -7864.5991 8568.8799 -7865.6382 8568.0049 -7865.6382 8566.9248 c -7865.6382 8565.8447 -7864.5991 8564.9697 -7863.3159 8564.9697 c -7862.0342 8564.9697 -7860.9951 8565.8447 -7860.9951 8566.9248 c -7860.9951 8568.0049 -7862.0342 8568.8799 -7863.3159 8568.8799 c b -7863.8457 8580.6709 m -7865.3975 8580.6709 -7866.6558 8580.0146 -7866.6558 8579.2041 c -7866.6558 8578.3936 -7865.3975 8577.7383 -7863.8457 8577.7383 c -7862.293 8577.7383 -7861.0352 8578.3936 -7861.0352 8579.2041 c -7861.0352 8580.0146 -7862.293 8580.6709 -7863.8457 8580.6709 c b -7868.0679 8552.4092 m -7868.811 8552.4092 -7869.4121 8551.6982 -7869.4121 8550.8213 c -7869.4121 8549.9443 -7868.811 8549.2334 -7868.0679 8549.2334 c -7867.3262 8549.2334 -7866.7241 8549.9443 -7866.7241 8550.8213 c -7866.7241 8551.6982 -7867.3262 8552.4092 -7868.0679 8552.4092 c b -7869.6758 8573.9678 m -7868.7983 8573.6201 -7868.5298 8572.2188 -7869.0762 8570.8379 c -7869.6226 8569.457 -7870.7778 8568.6201 -7871.6558 8568.9678 c -7872.5342 8569.3164 -7872.8032 8570.7178 -7872.2568 8572.0967 c -7871.7104 8573.4775 -7870.5552 8574.3154 -7869.6758 8573.9678 c b U U 0 Ap 0 0 0 1 k -7859.1318 8552.6553 m -7859.1318 8585.3145 l F u -7843.3906 8538.5303 m -7844.0815 8537.8369 -7847.019 8538.7021 Y -7848.229 8538.874 -7848.0562 8541.2939 Y -7847.019 8543.3682 -7847.7104 8543.1943 Y -7848.2998 8543.1943 -7849.855 8543.1143 -7850.7822 8543.0635 C -7851.1226 8541.6689 -7852.6128 8540.4756 -7854.7217 8539.7695 C -7852.7578 8536.4775 -7854.5176 8535.7949 -7856.2935 8535.79 C -7856.3096 8535.7021 -7856.332 8535.6162 -7856.3599 8535.5332 C -7854.1089 8535.5791 -7853.6392 8533.2588 Y -7853.4048 8533.0635 -7853.1606 8532.7861 -7852.9238 8532.4756 C -7853.1416 8532.6475 -7853.2944 8532.7393 Y -7854.2583 8532.7393 -7855.8774 8534.4941 -7856.4966 8535.207 C -7856.9194 8534.4434 -7857.853 8533.9111 -7858.9434 8533.9111 c -7860.0698 8533.9111 -7861.0322 8534.4795 -7861.4312 8535.2852 C -7861.9985 8534.624 -7863.6968 8532.751 -7864.6943 8532.751 C -7864.8462 8532.6572 -7865.064 8532.4854 V -7864.8281 8532.7939 -7864.583 8533.0732 -7864.3481 8533.2686 C -7863.8638 8535.6563 -7861.5254 8535.5342 V -7861.5449 8535.5889 -7861.5674 8535.6436 -7861.5806 8535.7021 C -7864.9238 8535.6924 -7863.937 8538.3174 -7863.2104 8539.6602 C -7865.5918 8540.376 -7867.2646 8541.7012 -7867.5239 8543.25 C -7868.4473 8543.2998 -7869.6729 8543.3584 -7870.1802 8543.3584 C -7870.8726 8543.5313 -7869.835 8541.458 V -7869.6626 8539.0391 -7870.8726 8538.8662 V -7873.8096 8538.002 -7874.501 8538.6934 V -7875.1919 8539.5566 -7876.0562 8538.3467 V -7875.1919 8540.0752 -7873.291 8539.5566 V -7870.6982 8538.8662 -7871.3906 8540.5938 V -7871.9087 8544.0498 -7870.1802 8544.7402 V -7868.0342 8545.8545 -7866.2822 8546.0889 V -7865.9087 8546.4141 -7865.4639 8546.7109 -7864.958 8546.9766 C -7867.5562 8547.0469 -7870.2246 8547.9209 -7871.0752 8550.9561 C -7871.5151 8552.2432 -7872.0518 8554.2432 V -7873.1025 8554.8252 -7874.3022 8556.0078 -7875.541 8558.2627 C -7876.394 8561.4502 -7877.167 8556.7129 V -7878.3975 8553.6494 -7879.6504 8553.5381 V -7878.4702 8555.2871 -7878.9038 8556.416 V -7877.2998 8560.917 -7875.6138 8559.8994 V -7874.0986 8559.2197 -7872.688 8556.8154 V -7873.0698 8558.4971 -7873.4326 8560.417 -7873.6743 8562.3906 C -7874.4888 8562.3975 L -7876.3506 8561.4795 -7876.3262 8564.959 V -7877.1226 8568.9453 -7876.3594 8571.6826 V -7875.647 8574.1504 -7878.1274 8572.9307 V -7879.2842 8573.3242 -7879.9839 8572.7881 V -7882.3882 8571.4131 -7884 8573.124 V -7882.147 8572.8799 -7881.4482 8573.417 V -7879.9785 8573.5615 -7879.897 8574.1787 V -7876.9561 8574.8555 -7876.188 8574.0771 V -7874.417 8573.2139 -7875.1304 8570.3604 V -7875.8799 8562.4814 -7874.3198 8564.4053 V -7874.1182 8564.4219 -7873.8784 8564.5176 V -7874.1519 8568.4326 -7873.8018 8572.3252 -7871.9961 8574.8516 C -7875.4536 8567.333 -7870.2974 8552.3037 Y -7868.9609 8547.5303 -7863.127 8548.1016 -7860.145 8548.7344 C -7860.0718 8550.1299 -7859.8374 8551.9492 -7859.1318 8552.6553 C -7858.2134 8550.6963 -7858.2358 8549.0732 V -7857.0762 8548.7217 -7850.2817 8546.8447 -7847.4487 8550.3369 C -7848.4312 8547.8135 -7850.8262 8547.0186 -7853.2007 8546.9189 C -7852.667 8546.6318 -7852.2041 8546.3047 -7851.8257 8545.9502 C -7850.041 8545.7861 -7847.7104 8544.5771 Y -7845.9814 8543.8857 -7846.5015 8540.4307 Y -7847.1919 8538.7021 -7844.5991 8539.3936 Y -7842.7002 8539.9111 -7841.835 8538.1836 Y -7842.7002 8539.3936 -7843.3906 8538.5303 Y f -7837.9082 8572.9521 m -7838.6074 8573.4893 -7839.7632 8573.0938 Y -7842.2446 8574.3135 -7841.5327 8571.8467 Y -7840.769 8569.1104 -7841.564 8565.1221 Y -7841.541 8561.6445 -7843.4014 8562.5596 Y -7844.0342 8562.5557 L -7844.3198 8560.6123 -7844.7046 8558.7549 -7845.0898 8557.1699 C -7843.7129 8559.4199 -7842.2778 8560.0635 Y -7840.5913 8561.082 -7838.9878 8556.5791 Y -7839.4214 8555.4502 -7838.2417 8553.7021 Y -7839.4937 8553.8125 -7840.7246 8556.876 Y -7841.4976 8561.6152 -7842.3511 8558.4268 Y -7843.5776 8556.1904 -7844.769 8555.0098 -7845.814 8554.4229 C -7846.2026 8553.0635 -7846.4858 8552.2393 Y -7846.7002 8551.4727 -7847.0337 8550.8486 -7847.4487 8550.3369 C -7847.3799 8550.5127 -7847.3174 8550.6982 -7847.2632 8550.8916 C -7841.3022 8568.2588 -7846.4858 8574.9971 V -7853.2246 8584.5869 -7857.3721 8584.5869 V -7860.9663 8584.6514 L -7865.1138 8584.6514 -7871.853 8575.0615 Y -7871.9038 8574.9961 -7871.9463 8574.9219 -7871.9961 8574.8516 C -7871.7378 8575.4141 -7871.437 8575.9404 -7871.0752 8576.4092 C -7864.3359 8586 -7860.189 8586 V -7856.5942 8585.9346 L -7852.4482 8585.9346 -7845.709 8576.3447 Y -7843.5801 8573.5771 -7843.3306 8569.0176 -7843.7769 8564.6055 C -7843.6553 8564.5752 -7843.5698 8564.5684 Y -7842.0112 8562.6475 -7842.7598 8570.5244 Y -7843.4746 8573.3789 -7841.7026 8574.2402 Y -7840.9351 8575.0186 -7837.9946 8574.3428 Y -7837.9136 8573.7256 -7836.4434 8573.5811 Y -7835.7446 8573.0449 -7833.8921 8573.2881 Y -7835.5024 8571.5771 -7837.9082 8572.9521 Y f U U U %AI8_EndBrushPattern %AI8_BeginBrushPattern (New Pattern 34) 0 A u 800 Ar 0 J 0 j 1 w 4 M []0 d %AI3_Note: 0 D 0 XR -7884.0254 8586.0264 m -7828.0542 8586.0264 L -7828.0542 8524.5342 L -7884.0254 8524.5342 L -7884.0254 8586.0264 L n u u 0 O 0.0745 0.9 0.9019 0.18 k 0 R 0 0 0 1 K 1 J 1 j 0.0518 w -7857.5991 8562.7217 m -7857.3594 8573.5215 -7862.8794 8583.8398 v -7862.4009 8586 -7860.959 8586 v -7861.2002 8582.6406 -7860.2393 8582.1611 v -7855.9199 8570.1602 -7856.6382 8562.2402 v -7857.5991 8562.7217 l b -7857.5991 8562.7217 m -7859.2793 8568 -7871.0391 8569.2012 v -7875.3594 8569.6807 -7875.5991 8571.1211 v -7869.1206 8561.5195 -7868.1602 8561.7607 v -7881.3594 8556.001 -7884 8550.7197 v -7878.959 8553.6006 -7875.5991 8551.4404 v -7867.6802 8551.2012 -7862.6406 8553.3613 v -7858.8008 8555.2813 -7866.7202 8539.2012 v -7862.8794 8550.9609 -7859.2793 8524.5605 v -7858.3198 8529.8408 -7856.8799 8531.2813 v -7850.8799 8538.9609 -7851.8398 8541.1211 v -7852.3198 8544.9609 -7847.7598 8538.7207 v -7848 8548.3213 -7850.4009 8551.6807 v -7852.5591 8555.2813 -7846.5591 8553.1211 v -7840.5591 8551.2012 -7835.2793 8552.8809 v -7829.7598 8554.3203 -7828.0801 8551.4404 v -7839.8398 8563.9209 -7845.5991 8563.6807 v -7843.9194 8567.2813 l -7841.519 8572.0811 -7842 8573.2813 v -7857.2681 8563.8828 -7857.5991 8562.7217 v b -7857.5991 8562.7217 m -7854.959 8544.2402 -7857.5991 8536.5605 v -7859.998 8526.001 -7859.2793 8524.5605 v S -7856.1602 8551.4404 m -7850.1602 8546.6406 -7848.959 8541.3604 v S -7856.1602 8550.7197 m -7865.0391 8543.041 -7866.7202 8539.2012 v S -7828.0801 8551.4404 m -7829.2793 8553.6006 -7857.3594 8561.7607 y -7862.4009 8556.2422 -7873.9199 8553.8408 v -7881.5986 8552.8809 -7884 8550.7197 v S -7874.6382 8569.6807 m -7863.1191 8560.5615 -7857.3594 8561.7607 y -7843.1992 8568 -7842 8573.2813 v S U U U %AI8_EndBrushPattern %AI8_BeginBrushPattern (New Pattern 36) 0 A u 800 Ar 0 J 0 j 1 w 4 M []0 d %AI3_Note: 0 D 0 XR -7883.8496 8585.9961 m -7833.96 8585.9961 L -7833.96 8534.9258 L -7883.8496 8534.9258 L -7883.8496 8585.9961 L n u 0 O 0.025 0.1 0.475 0 k -7862.1504 8553.9043 m -7864.4766 8552.8125 -7866.6914 8552.4434 -7868.373 8552.9238 c -7869.0518 8553.1172 -7869.645 8553.4473 -7870.123 8553.9238 c -7870.6006 8554.4023 -7870.9297 8554.9951 -7871.123 8555.6729 c -7872.0088 8558.7715 -7870.0103 8563.6777 -7865.9233 8567.7666 c -7861.834 8571.8535 -7856.9297 8573.8516 -7853.8286 8572.9668 c -7853.1519 8572.7715 -7852.5586 8572.4424 -7852.0806 8571.9658 c -7851.603 8571.4883 -7851.2754 8570.8955 -7851.082 8570.2168 c -7850.5176 8568.2461 -7851.1226 8565.5449 -7852.6855 8562.7891 c -7853.582 8561.21 -7854.791 8559.6133 -7856.2793 8558.123 c -7858.1504 8556.2539 -7860.1914 8554.8242 -7862.1504 8553.9043 c f u 0.0035 0.014 0.0665 0 k -7861.2183 8552.9727 m -7863.8306 8552.0215 -7866.3975 8551.9688 -7868.373 8552.9238 C -7866.6914 8552.4434 -7864.4766 8552.8125 -7862.1504 8553.9043 c -7861.6191 8554.1543 -7861.0806 8554.4434 -7860.543 8554.7676 C -7858.8984 8554.0537 L -7859.667 8553.6172 -7860.4434 8553.2539 -7861.2183 8552.9727 c f 0.015 0.06 0.285 0 k -7858.8984 8554.0537 m -7860.543 8554.7676 L -7859.0962 8555.6348 -7857.6426 8556.7607 -7856.2793 8558.123 c -7856.1538 8558.25 -7856.0327 8558.3779 -7855.9102 8558.5059 C -7855.2153 8556.8633 L -7856.3706 8555.7236 -7857.6191 8554.7813 -7858.8984 8554.0537 C f U u 0.039 0.156 0.741 0 k -7849.687 8541.4043 m -7849.9746 8541.6914 -7861.2183 8552.9727 Y -7860.4434 8553.2539 -7859.667 8553.6172 -7858.8984 8554.0537 C -7845.4146 8540.5703 L -7847.061 8540.0996 -7848.6406 8540.3555 -7849.687 8541.4043 c f 0.025 0.1 0.475 0 k -7845.4146 8540.5703 m -7858.8984 8554.0537 L -7857.584 8554.8027 -7856.2969 8555.7754 -7855.1143 8556.957 c -7855.084 8556.9863 -7855.0586 8557.0156 -7855.0278 8557.0449 C -7841.3408 8543.3574 L -7841.5264 8543.1328 -7841.7202 8542.9141 -7841.9302 8542.7012 c -7843.0103 8541.623 -7844.2305 8540.9082 -7845.4146 8540.5703 C f U u 0.0115 0.046 0.2185 0 k -7835.9346 8550.3926 m -7833.5337 8547.9893 -7833.335 8544.0898 -7835.1382 8540.6973 C -7836.2954 8541.1182 L -7834.0938 8544.4961 -7833.8398 8548.2949 -7835.9346 8550.3926 c f 0.015 0.06 0.285 0 k -7843.5337 8535.5957 m -7842.582 8534.9258 L -7845.2046 8534.3516 -7847.8306 8534.9141 -7849.6206 8536.7061 c -7848.1719 8535.2578 -7845.9082 8534.9307 -7843.5337 8535.5957 C f 0.0295 0.118 0.5605 0 k -7843.5337 8535.5957 m -7845.9082 8534.9307 -7848.1719 8535.2578 -7849.6206 8536.7061 c -7851.019 8538.1055 -7851.3706 8540.2637 -7850.7954 8542.5469 C -7848.8672 8539.5449 -7845.4082 8540.5537 V -7843.585 8535.6309 L -7843.5337 8535.5957 L f *u 0.048 0.192 0.912 0 k 1 D -7835.9346 8550.3926 m -7837.2817 8551.7383 -7839.332 8552.1133 -7841.5234 8551.627 C -7851.6714 8561.7734 L -7851.7695 8561.5684 -7851.7695 8561.5684 -7851.6714 8561.7734 c -7850.2246 8564.8145 -7849.9702 8567.916 -7851.082 8570.2168 C -7850.5176 8568.2461 -7851.1226 8565.5449 -7852.6855 8562.7891 c -7853.5054 8561.3438 -7854.5918 8559.8848 -7855.9102 8558.5059 C -7855.2153 8556.8633 L -7855.1816 8556.8945 -7855.1465 8556.9238 -7855.1143 8556.957 c -7855.084 8556.9883 -7855.0566 8557.0176 -7855.0273 8557.0469 c -7855.0278 8557.0469 -7855.0278 8557.0469 -7855.0278 8557.0449 C -7841.3408 8543.3574 L -7836.3262 8541.1289 L -7836.2954 8541.1182 L -7834.0938 8544.4961 -7833.8398 8548.2949 -7835.9346 8550.3926 c f *U 0.0215 0.086 0.4085 0 k 0 D -7842.582 8534.9258 m -7843.5337 8535.5957 L -7841.6846 8536.1113 -7839.7656 8537.2285 -7838.1138 8538.8828 c -7837.4063 8539.5889 -7836.7998 8540.3418 -7836.2954 8541.1182 C -7835.1382 8540.6973 L -7835.6553 8539.7246 -7836.3374 8538.793 -7837.1802 8537.9512 c -7838.7695 8536.3594 -7840.6758 8535.3428 -7842.582 8534.9258 C f 0.0205 0.082 0.3895 0 k -7836.2954 8541.1182 m -7836.7998 8540.3418 -7837.4063 8539.5889 -7838.1138 8538.8828 c -7839.7656 8537.2285 -7841.6846 8536.1113 -7843.5337 8535.5957 C -7843.585 8535.6309 L -7845.4082 8540.5537 L -7844.2114 8540.9219 -7842.9878 8541.6436 -7841.9302 8542.7012 c -7841.7202 8542.9141 -7841.5264 8543.1328 -7841.3408 8543.3574 C -7836.3262 8541.1289 L -7836.2954 8541.1182 L f U u 0.445 0.356 0.267 0 k -7883.8496 8585.9961 m -7861.957 8562.9688 L -7862.2007 8562.6494 -7862.5752 8562.6133 -7862.8887 8562.6592 C -7867.1802 8567.2891 -7878.3145 8579.4561 -7882.7266 8584.2793 C -7883.5649 8585.3516 -7884 8585.9932 -7883.8496 8585.9961 C f 0.15 0.12 0.09 0 k -7883.834 8585.9961 m -7882.6606 8585.7031 -7861.6934 8564.0029 Y -7861.6934 8563.502 -7861.7993 8563.1758 -7861.957 8562.9688 C -7883.8496 8585.9961 L -7883.8442 8585.9961 -7883.8418 8586 -7883.834 8585.9961 c f 0.2 0.16 0.12 0 k -7882.7266 8584.2793 m -7878.3145 8579.4561 -7867.1802 8567.2891 -7862.8887 8562.6592 C -7863.2002 8562.7041 -7863.4526 8562.8301 Y -7864.603 8563.1328 -7878.5742 8578.9619 -7882.7266 8584.2793 C f U U U %AI8_EndBrushPattern %AI8_BeginBrushPattern (New Pattern 37) 0 A u 800 Ar 0 J 0 j 1 w 4 M []0 d %AI3_Note: 0 D 0 XR -7882.9502 8585.2324 m -7833.0391 8585.2324 L -7833.0391 8521.1152 L -7882.9502 8521.1152 L -7882.9502 8585.2324 L n u 0 O 0 0 0 1 k 0 R 0 0 0 1 K 0 w -7833.2358 8521.1152 m -7833.6064 8521.248 -7833.9858 8521.2832 -7834.3833 8521.2031 c -7834.4863 8521.168 l -7834.5254 8521.1602 -7834.5703 8521.1787 -7834.6025 8521.1992 c -7834.9434 8521.3926 l -7838.7129 8523.2959 -7842.0962 8525.8965 -7844.5 8529.4473 c -7845.9634 8531.5918 -7847.123 8533.8789 -7848.7993 8535.8564 c -7849.1729 8536.209 -7849.1758 8536.7725 -7848.834 8537.1309 c -7848.4951 8537.501 -7847.918 8537.5078 -7847.561 8537.165 c -7847.4038 8537.21 l -7847.2642 8537.1289 -7847.0742 8537.0703 -7847.0234 8536.957 c -7845.853 8534.2031 -7845.1895 8531.5137 -7843.4336 8529.1387 c -7841.1719 8526.0947 -7838.1777 8523.9941 -7835.0298 8522.0234 c -7834.3672 8521.6055 L -7834.4966 8521.6348 L -7833.7695 8521.6426 l -7833.791 8521.6113 -7833.8008 8521.5957 -7833.8223 8521.5645 C -7833.6064 8521.5234 -7833.377 8521.4746 -7833.1626 8521.4336 c -7833.0762 8521.4238 -7833.0186 8521.3389 -7833.0391 8521.2383 c -7833.0503 8521.1523 -7833.1382 8521.1084 -7833.2358 8521.1152 c -7833.2358 8521.1152 l b -7849.2222 8534.9951 m -7849.5742 8534.8066 -7849.9658 8534.6719 -7850.248 8534.3887 c -7856.4521 8528.1719 -7866.6802 8527.2734 -7874.0488 8533.6855 C -7874.1582 8533.7813 -7874.1582 8533.957 -7874.063 8534.0645 C -7871.0527 8532.9434 -7862.8838 8534.375 -7859.3223 8537.4121 C -7859.2534 8537.4668 -7859.1465 8537.4531 -7859.1055 8537.3711 C -7859.0503 8537.3047 -7859.0664 8537.1953 -7859.1328 8537.1563 C -7862.5625 8534.0859 -7867.0674 8532.29 -7871.6729 8532.748 C -7868.8535 8531.1855 -7865.6313 8530.4941 -7862.3984 8530.6885 c -7857.7144 8530.9717 -7853.4634 8533.1191 -7849.3711 8535.2793 c -7849.291 8535.3193 -7849.1978 8535.293 -7849.1553 8535.2109 C -7849.1016 8535.1309 -7849.1426 8535.0352 -7849.2222 8534.9951 c b -7858.647 8536.3359 m -7860.2266 8540.3613 -7862.3911 8544.3203 -7865.8018 8547.0762 c -7865.9648 8547.2119 -7865.9946 8547.4492 -7865.8711 8547.6055 c -7865.7344 8547.7676 -7865.5049 8547.7793 -7865.3481 8547.6563 c -7861.123 8545.5967 -7858.1904 8541.1309 -7858.1626 8536.4014 c -7858.1626 8536.4014 l -7858.1328 8536.2676 -7858.2354 8536.1348 -7858.3633 8536.1221 c -7858.5039 8536.1055 -7858.6318 8536.1973 -7858.647 8536.3359 c -7858.647 8536.3359 l b -7852.9414 8541.0176 m -7853.042 8541.1816 -7853.1152 8541.3838 -7853.2617 8541.4824 c -7856.0806 8543.3906 -7858.9785 8544.6309 -7861.8848 8546.1328 c -7862.0503 8546.209 -7862.1118 8546.418 -7862.0313 8546.5703 c -7861.9512 8546.7227 -7861.7559 8546.7793 -7861.5898 8546.7041 c -7858.439 8545.3232 -7854.313 8544.5 -7852.6729 8541.1797 c -7852.6289 8541.1113 -7852.6455 8541.0146 -7852.7266 8540.9648 c -7852.7959 8540.9199 -7852.897 8540.9492 -7852.9414 8541.0176 c -7852.9414 8541.0176 l b -7852.6602 8541.918 m -7852.4438 8542.4297 -7852.1431 8542.8896 -7852.0503 8543.4355 c -7851.2183 8548.2773 -7851.1152 8553.042 -7852.248 8557.6875 c -7852.248 8557.6875 l -7852.3418 8557.9531 -7852.2114 8558.2441 -7851.9438 8558.3389 c -7851.6777 8558.4336 -7851.3882 8558.3125 -7851.2935 8558.0479 c -7849.293 8552.8115 -7849.897 8546.7373 -7852.3711 8541.7832 c -7852.4063 8541.7002 -7852.498 8541.6689 -7852.582 8541.6914 c -7852.6641 8541.7275 -7852.6978 8541.835 -7852.6602 8541.918 c -7852.6602 8541.918 l b -7851.5352 8557.5938 m -7848.8984 8555.2275 -7846.6816 8552.252 -7845.853 8548.7363 c -7845.853 8548.7363 l -7845.7246 8548.1816 -7846.0742 8547.623 -7846.6416 8547.4902 c -7847.1992 8547.375 -7847.7578 8547.7246 -7847.8862 8548.2793 c -7848.5649 8551.5313 -7849.8711 8554.6729 -7851.7954 8557.3867 c -7851.7954 8557.3867 l -7851.8462 8557.4551 -7851.834 8557.5576 -7851.7695 8557.6201 c -7851.6992 8557.6699 -7851.5977 8557.6582 -7851.5352 8557.5938 c -7851.5352 8557.5938 l b -7836.3711 8550.1826 m -7837.7114 8545.8301 -7840.2598 8542.0693 -7843.689 8539.1533 C -7843.729 8539.0723 -7843.8242 8539.0322 -7843.9038 8539.0859 C -7843.9863 8539.127 -7844.0122 8539.2207 -7843.9722 8539.3018 C -7843.957 8539.7891 -7843.7144 8540.2334 -7843.4458 8540.5313 c -7838.4063 8546.1621 -7834.9902 8554.7197 -7837.3433 8561.9551 C -7837.0762 8556.4512 -7838.7241 8550.3008 -7842.1362 8545.6738 c -7843.1606 8544.2695 -7844.7422 8544.1211 -7846.3081 8544.2031 C -7846.4023 8544.1895 -7846.4834 8544.2432 -7846.4961 8544.3369 c -7846.5098 8544.4189 -7846.4551 8544.5137 -7846.3623 8544.5254 C -7843.1479 8545.7695 -7841.4878 8549.2246 -7840.084 8552.1943 c -7838.415 8555.7441 -7837.7017 8559.6387 -7838.0054 8563.5 C -7838.0454 8563.6777 -7838.1138 8565.3975 -7837.9775 8565.4102 C -7837.8306 8565.4395 -7837.709 8565.3438 -7837.6802 8565.1943 C -7837.645 8565.0449 -7834.6426 8555.7988 -7836.3711 8550.1826 c b -7844.4863 8537.4912 m -7843.3945 8533.6211 -7841.1094 8530.251 -7838.4824 8527.2383 c -7838.3306 8527.1045 -7838.3145 8526.8867 -7838.4502 8526.7354 c -7838.5752 8526.6006 -7838.8047 8526.582 -7838.957 8526.7178 c -7842.3306 8529.332 -7843.4487 8533.541 -7844.7954 8537.375 c -7844.7954 8537.375 l -7844.8262 8537.4648 -7844.7754 8537.5586 -7844.6982 8537.5869 c -7844.6094 8537.6191 -7844.5166 8537.5684 -7844.4863 8537.4912 c -7844.4863 8537.4912 l b -7838.5313 8562.1094 m -7838.5991 8562.0566 -7838.707 8562.083 -7838.748 8562.1504 C -7838.9634 8562.4746 -7840.6914 8564.5195 -7841.3926 8565.1406 c -7846.1719 8569.3945 -7849.5137 8573.9609 -7857.5391 8577.7227 c -7864.4512 8580.9639 -7867.1113 8583.5957 -7874.3862 8581.8262 c -7877.687 8581.0293 -7879.0313 8580.5313 -7880.4351 8575.4551 C -7881.9473 8569.2988 -7880.8672 8571.7832 -7881.084 8564.4385 c -7881.2222 8559.6973 -7884 8548.4551 -7871.5254 8534.2598 C -7871.4199 8534.1484 -7871.4336 8533.9961 -7871.5337 8533.9072 C -7871.6328 8533.8027 -7871.7959 8533.8164 -7871.8862 8533.916 C -7877.5786 8538.7168 -7881.0234 8545.6582 -7882.3145 8552.9424 c -7883.2871 8558.4668 -7882.9199 8563.25 -7882.666 8569.6367 c -7882.5688 8572.0938 -7883.6855 8579.0723 -7878.9102 8583.0625 c -7875.3926 8586 -7870.3911 8585.5469 -7866.3545 8584.1563 c -7860.6992 8582.2119 -7855.9727 8579.1465 -7850.8711 8575.6094 c -7847.2656 8573.125 -7839.2881 8563.2852 -7838.4785 8562.3262 C -7838.4351 8562.2588 -7838.4502 8562.1504 -7838.5313 8562.1094 C b -7873.0503 8549.3057 m -7872.168 8548.5029 -7871.7017 8549.8457 -7871.4297 8550.6016 c -7871.1626 8551.3574 -7870.189 8551.25 -7870.5127 8551.5732 c -7870.8369 8551.8975 -7870.8369 8551.9521 -7871.3232 8551.5195 c -7871.8086 8551.0879 -7871.8086 8551.7363 -7872.5649 8551.25 c -7873.3198 8550.7627 -7873.645 8549.8457 -7873.0503 8549.3057 c b -7865.6519 8553.9492 m -7865.3657 8553.5918 -7864.6802 8553.5723 -7864.4648 8553.8945 c -7864.25 8554.2197 -7863.3306 8554.2734 -7863.4937 8554.5967 c -7863.6543 8554.9219 -7863.6016 8555.1387 -7864.0874 8554.9219 c -7864.5737 8554.7051 -7864.4121 8555.2998 -7864.897 8555.084 c -7865.3833 8554.8672 -7865.8687 8554.2197 -7865.6519 8553.9492 c b -7857.6074 8559.0791 m -7857.1206 8558.7559 -7855.8794 8559.5117 -7856.4727 8559.5117 c -7857.0674 8559.5117 -7856.311 8560.2676 -7856.8521 8560.4834 c -7857.3906 8560.6992 -7857.2832 8560.4297 -7857.6074 8560.6445 c -7857.9297 8560.8613 -7858.3633 8561.2393 -7858.5239 8560.4297 c -7858.6855 8559.6191 -7858.3633 8559.6191 -7857.9849 8559.3496 c -7857.6074 8559.0791 -7857.6074 8559.0791 y b -7872.2402 8559.3496 m -7871.1074 8559.2422 -7871.8633 8559.998 -7871.269 8560.4834 c -7870.6738 8560.9697 -7869.918 8561.6172 -7870.729 8561.4004 c -7871.5391 8561.1855 -7872.9961 8561.6719 -7872.9434 8560.5381 c -7872.8887 8559.4033 -7872.6328 8559.3867 -7872.2402 8559.3496 c b -7866.5703 8567.6113 m -7866.1016 8567.3438 -7866.6802 8567.7197 -7866.0303 8567.6113 c -7865.3833 8567.5039 -7864.7886 8567.6113 -7865.2207 8567.8281 c -7865.6519 8568.0439 -7866.3008 8568.1523 -7866.4634 8567.9893 c -7866.625 8567.8281 -7866.9473 8567.8281 -7866.5703 8567.6113 c b -7857.0674 8567.1797 m -7857.4785 8566.1797 -7856.0962 8566.4238 -7855.4473 8566.7461 c -7854.7998 8567.0723 -7853.8262 8566.4775 -7854.4209 8566.9102 c -7855.0137 8567.3418 -7854.7998 8566.9102 -7855.3926 8567.2334 c -7855.9873 8567.5566 -7856.6895 8568.0977 -7857.0674 8567.1797 c b -7872.6738 8573.0664 m -7872.7222 8572.0752 -7871.8086 8572.957 -7871.269 8573.0117 c -7870.729 8573.0664 -7870.0801 8573.0664 -7870.2432 8573.2813 c -7870.4038 8573.498 -7870.459 8573.498 -7871.1626 8573.7129 c -7871.8633 8573.9297 -7872.6191 8574.1445 -7872.6738 8573.0664 c b -7873.1582 8567.6113 m -7874.0664 8567.9746 -7874.293 8567.8809 -7874.5625 8568.2051 c -7874.834 8568.5293 -7875.1558 8569.2314 -7875.5352 8568.0977 c -7875.9121 8566.9629 -7875.4282 8565.7764 -7875.0479 8565.9375 c -7874.6714 8566.0996 -7874.293 8566.7461 -7873.8618 8566.9629 c -7873.4297 8567.1797 -7872.6191 8567.3945 -7873.1582 8567.6113 c b U U %AI8_EndBrushPattern %AI8_BeginBrushPattern (New Pattern 41) 0 A u 800 Ar 0 J 0 j 1 w 4 M []0 d %AI3_Note: 0 D 0 XR -7884 8586 m -7803 8586 L -7803 8481 L -7884 8481 L -7884 8586 L n u u u 0 O 0 0 0 1 k -7865.8057 8498.4258 m -7866.0742 8496.6621 -7867.1602 8495.291 -7868.5239 8495.3965 c -7869.8862 8495.502 -7870.707 8497.0234 -7870.7432 8498.8066 c -7870.748 8499.0693 -7870.6743 8500.2441 -7870.6304 8500.4775 C -7870.6382 8500.582 -7870.6191 8500.6738 -7870.6104 8500.7803 c -7870.5142 8502.0254 -7869.3574 8503.3604 -7867.9414 8503.25 c -7866.5249 8503.1406 -7865.4897 8501.8613 -7865.6367 8500.4727 c -7865.644 8500.4072 -7865.6958 8499.626 -7865.707 8499.5625 C -7865.6816 8499.2852 -7865.7598 8498.7256 -7865.8057 8498.4258 c f -7876.2646 8507.7334 m -7876.9946 8515.916 -7871.5015 8515.1191 v -7868.3682 8514.0186 -7869.4414 8511.1211 v -7869.6426 8509.752 -7871.7847 8508.498 v -7872.146 8508.25 -7872.7632 8507.1016 v -7873.1294 8505.5977 -7874.5186 8505.2979 v -7876.0762 8505.251 -7876.2646 8507.7334 v f -7850.7646 8516.4971 m F -7850.0762 8514.3408 m -7850.7847 8513.1934 -7853.8848 8513.6279 Y -7854.811 8513.6885 -7855.3799 8513.1113 Y -7857.8394 8509.0918 -7861.0386 8509.8857 -7861.4082 8509.9932 C -7861.4097 8509.9863 L -7864.999 8510.6045 -7865.2666 8515.6035 V -7865.4912 8516.3828 -7866.335 8516.7695 V -7869.2695 8517.8613 -7869.3481 8519.208 V -7869.8999 8521.1152 -7867.6006 8521.7422 V -7865.6792 8522.2568 -7863.7886 8519.8945 V -7862.6113 8518.6797 -7859.5762 8517.9395 V -7859.5728 8517.9531 L -7856.3594 8517.0459 -7854.6392 8517.5889 Y -7851.8521 8518.7676 -7850.4063 8517.4014 Y -7848.6826 8515.7559 -7850.0762 8514.3408 Y f -7863.9834 8497.8789 m -7864.5854 8496.2002 -7864.2822 8494.4775 -7863.0327 8493.9229 c -7861.7842 8493.3672 -7860.3384 8494.3164 -7859.4585 8495.8672 c -7859.3286 8496.0957 -7858.8359 8497.165 -7858.7632 8497.3906 C -7858.7065 8497.4785 -7858.6792 8497.5684 -7858.6362 8497.667 c -7858.1289 8498.8086 -7858.5122 8500.5303 -7859.8105 8501.1074 c -7861.1089 8501.6855 -7862.6279 8501.0527 -7863.1582 8499.7617 c -7863.1831 8499.7002 -7863.5078 8498.9883 -7863.5298 8498.9268 C -7863.6831 8498.6963 -7863.8809 8498.166 -7863.9834 8497.8789 c f -7849.7129 8500.9316 m -7845.1802 8507.7822 -7850.3911 8509.6943 v -7853.6714 8510.2168 -7854.103 8507.1572 v -7854.5786 8505.8564 -7853.29 8503.7354 v -7853.0903 8503.3447 -7853.0938 8502.04 v -7853.4858 8500.5449 -7852.4082 8499.6182 v -7851.0591 8498.8359 -7849.7129 8500.9316 v f U u -7824.7358 8550.1074 m -7824.3687 8548.3623 -7824.9048 8546.6963 -7826.2183 8546.3164 c -7827.5322 8545.9375 -7828.8345 8547.0752 -7829.4937 8548.7324 c -7829.5903 8548.9775 -7829.9326 8550.1025 -7829.9746 8550.3369 C -7830.0176 8550.4326 -7830.0322 8550.5244 -7830.0625 8550.6279 c -7830.4087 8551.8271 -7829.7935 8553.4805 -7828.4282 8553.875 c -7827.063 8554.2695 -7825.645 8553.4365 -7825.2969 8552.085 c -7825.2793 8552.0205 -7825.0552 8551.2705 -7825.0425 8551.207 C -7824.9214 8550.9551 -7824.7983 8550.4053 -7824.7358 8550.1074 c f -7838.2705 8554.6172 m -7841.8242 8562.0244 -7836.3999 8563.2061 v -7833.0801 8563.2754 -7833.0688 8560.1846 v -7832.7778 8558.8311 -7834.3433 8556.9072 v -7834.5942 8556.5459 -7834.7695 8555.2539 v -7834.5854 8553.7188 -7835.7793 8552.9492 v -7837.2222 8552.3594 -7838.2705 8554.6172 v f -7817.4648 8571.7695 m F -7816.063 8569.9912 m -7816.3247 8568.6689 -7819.3799 8567.9883 Y -7820.27 8567.7197 -7820.5986 8566.9795 Y -7821.4922 8562.3535 -7824.7666 8561.9746 -7825.1494 8561.9453 C -7825.1494 8561.9395 L -7828.7271 8561.2588 -7830.731 8565.8467 V -7831.2153 8566.4961 -7832.1416 8566.5625 V -7835.272 8566.5557 -7835.8169 8567.7891 V -7837.0039 8569.3809 -7835.0713 8570.7764 V -7833.4526 8571.9316 -7830.853 8570.3818 V -7829.3242 8569.6582 -7826.2222 8570.0293 V -7826.2231 8570.042 L -7822.896 8570.3213 -7821.4766 8571.4326 Y -7819.2793 8573.5146 -7817.4463 8572.7432 Y -7815.2554 8571.8057 -7816.063 8569.9912 Y f -7822.8374 8550.2354 m -7822.813 8548.4512 -7821.9258 8546.9453 -7820.5601 8546.8633 c -7819.1943 8546.7803 -7818.1743 8548.1768 -7817.895 8549.9385 c -7817.854 8550.1973 -7817.7666 8551.3711 -7817.7778 8551.6094 C -7817.7559 8551.7109 -7817.7617 8551.8037 -7817.7559 8551.9121 c -7817.6807 8553.1592 -7818.644 8554.6367 -7820.0625 8554.7217 c -7821.4814 8554.8066 -7822.6826 8553.6826 -7822.7246 8552.2871 c -7822.7271 8552.2217 -7822.7822 8551.4404 -7822.7798 8551.375 C -7822.8433 8551.1045 -7822.8423 8550.54 -7822.8374 8550.2354 c f -7811.0186 8557.5625 m -7809.1777 8565.5684 -7814.7271 8565.5303 v -7817.9834 8564.8691 -7817.3154 8561.8516 v -7817.3032 8560.4668 -7815.353 8558.9326 v -7815.0278 8558.6377 -7814.5742 8557.415 v -7814.417 8555.876 -7813.083 8555.3877 v -7811.5454 8555.1279 -7811.0186 8557.5625 v f U U 1 Ap -7884 8586 m -7884 8481 L -7803 8481 L -7803 8586 L -7884 8586 L n U U %AI8_EndBrushPattern %AI8_BeginBrushPattern (New Pattern 42) 0 A u 0 Ap 800 Ar 0 J 0 j 1 w 4 M []0 d %AI3_Note: 0 D 0 XR -7857.4609 8559.085 m -7885 8559.085 L -7885 8586.624 L -7857.4609 8586.624 L -7857.4609 8559.085 L n 0 O 0 0.55 1 0.12 k -7871.7598 8577.3623 m -7871.7598 8587 L -7870.6343 8587 L -7870.6343 8577.3623 L -7871.7598 8577.3623 L f 0 0.55 1 0.3 k -7875.4233 8572.876 m -7874.3096 8571.1553 -7870.8809 8569.457 -7866.4966 8569.457 c -7862.1152 8569.457 -7858.6138 8571.1064 -7857.5718 8572.874 C -7857.5718 8572.874 L -7858.6138 8574.6006 -7862.1152 8576.2979 -7866.4966 8576.2979 c -7870.875 8576.2979 -7874.3242 8574.5615 -7875.4233 8572.876 C f U %AI8_EndBrushPattern %AI8_BeginBrushPattern (New Pattern 45) 0 A u 800 Ar 0 J 0 j 1 w 4 M []0 d %AI3_Note: 0 D 0 XR -7885 8543.918 m -7885 8587 L -7798.2217 8587 L -7798.2217 8543.918 L -7885 8543.918 L n u u 0 O 0 0 0 1 k -7825.2217 8573.2363 m -7825.2217 8581.0742 L -7813.2217 8574.1445 L -7801.2217 8567.2168 L -7813.2217 8560.2891 L -7825.2217 8553.3613 L -7825.2217 8561.4824 L -7883.9351 8547.7168 L -7870.9878 8566.8027 L -7885 8587 L -7825.2217 8573.2363 L f 0 1 1 0.1 k 0 R 0 0 0 1 K -7823.2217 8570.2363 m -7823.2217 8578.0742 L -7811.2217 8571.1445 L -7799.2217 8564.2168 L -7811.2217 8557.2891 L -7823.2217 8550.3613 L -7823.2217 8558.4824 L -7881.9351 8544.7168 L -7867.2754 8564.3594 L -7881.9351 8584 L -7823.2217 8570.2363 L b U U U %AI8_EndBrushPattern %AI8_BeginBrushPattern (New Pattern 50) 0 A u 800 Ar 0 J 0 j 1 w 4 M []0 d %AI3_Note: 0 D 0 XR -7884 8586 m -7756.877 8586 L -7756.877 8538.415 L -7884 8538.415 L -7884 8586 L n u *u 0 O 0.9529 0.949 0.1961 0.0745 k -7857.793 8570.417 m -7857.8232 8570.2676 L -7859.9849 8564.3643 -7860.9438 8561.6377 -7861.2754 8560.2891 c -7861.3657 8560.2891 L -7861.6953 8561.6074 -7862.7754 8564.335 -7864.9673 8570.2676 c -7864.9966 8570.417 L -7857.793 8570.417 l f 1 D -7868.1182 8578.9678 m -7869.6191 8582.5371 -7870.3994 8584.709 -7868.1182 8584.917 c -7868.1182 8585.9678 L -7870.6992 8585.9375 -7873.5806 8585.917 -7876.3418 8585.917 c -7880.0649 8585.917 -7882.5273 8585.9375 -7884 8585.9678 c -7884 8584.917 L -7882.1064 8584.709 -7881.0542 8582.5674 -7873.5513 8565.5029 c -7861.6953 8538.415 L -7859.8638 8538.415 L -7848.1582 8565.5029 L -7840.8047 8582.5078 -7839.7246 8584.709 -7837.8887 8584.917 c -7837.8887 8585.9678 L -7839.5142 8585.9375 -7841.916 8585.917 -7845.5767 8585.917 c -7848.5488 8585.917 -7851.6694 8585.9375 -7854.7026 8585.9678 c -7854.7026 8584.917 L -7852.481 8584.709 -7853.3218 8582.5078 -7854.7617 8578.9678 C -7868.1182 8578.9678 l f *U *u 0 D -7813.0762 8554.0811 m -7813.0762 8550.4717 -7815.3535 8548.0947 -7819.1294 8548.0947 c -7820.2383 8548.0947 -7821.0767 8548.2158 -7821.5273 8548.2451 c -7821.5273 8560.5479 L -7820.8672 8560.6084 -7820.208 8560.6084 -7819.729 8560.6084 c -7818.2002 8560.6084 -7816.7026 8560.127 -7815.6841 8559.4053 c -7814.3945 8558.5332 -7813.0762 8556.7881 -7813.0762 8554.1416 C -7813.0762 8554.0811 l f 1 D -7832.0806 8558.3926 m -7832.0806 8542.6445 -7832.0806 8540.4287 -7834.542 8540.2783 c -7834.542 8539.3184 L -7833.042 8539.2588 -7830.3174 8539.1992 -7827.5664 8539.1689 c -7825.6538 8539.1084 -7822.3945 8539.0186 -7820.1479 8538.9775 c -7816.582 8538.9775 -7813.585 8539.4258 -7811.0049 8540.2627 c -7806.353 8541.8477 -7801.9702 8545.8525 -7801.9702 8553.6602 c -7801.9702 8558.7432 -7804.4014 8562.3193 -7806.5034 8564.0605 c -7807.583 8565.0215 -7808.8135 8565.832 -7809.7744 8566.3125 c -7809.7744 8566.4629 L -7807.5234 8569.4912 -7805.6025 8572.0625 -7799.3906 8580.6426 c -7797.5 8583.0645 -7795.9102 8584.7383 -7794.7402 8584.9775 c -7794.7402 8586 L -7796.6602 8586 -7799 8585.8848 -7801.1294 8585.8848 c -7803.3511 8585.8848 -7804.8521 8586 -7806.4424 8586 c -7807.6729 8586 -7808.7241 8585.9404 -7809.5039 8585.2725 c -7813.0151 8579.8477 -7816.9121 8573.7559 -7820.1182 8568.7139 c -7820.5078 8568.7139 -7820.957 8568.7139 -7821.5273 8568.7139 c -7821.5273 8571.2852 L -7821.5273 8582.5264 -7821.437 8584.7686 -7819.1895 8584.9775 c -7819.1895 8585.9697 L -7820.6279 8585.9404 -7823.9194 8585.915 -7826.6992 8585.915 c -7829.9287 8585.915 -7832.8921 8585.9404 -7834.5122 8585.9697 c -7834.5122 8584.9775 L -7832.0518 8584.7686 -7832.0806 8582.5264 -7832.0806 8565.5918 C -7832.0806 8558.3926 l f *U *u 0 D -7781.4561 8565.5928 m -7781.4561 8582.4941 -7781.4561 8584.6484 -7784.2832 8584.9775 C -7784.2832 8585.9697 l -7782.3887 8585.9404 -7779.0542 8585.915 -7775.7822 8585.915 c -7772.6294 8585.915 -7769.5688 8585.9404 -7767.2881 8585.9697 C -7767.2881 8584.9775 l -7770.2578 8584.9775 -7770.2881 8582.5244 -7770.2881 8565.5928 C -7770.2881 8548.1514 L -7762.8193 8548.1514 l -7759.999 8548.1514 -7758.5298 8548.96 -7757.8994 8551.2627 C -7756.9072 8551.2627 l -7756.9072 8546.4697 -7756.877 8542.415 -7756.877 8539.1709 c -7761.3486 8539.2012 -7766.748 8539.2314 -7772.0601 8539.2314 C -7779.7446 8539.2314 l -7784.5537 8539.2314 -7789.9966 8539.2012 -7794.9614 8539.1709 c -7794.9614 8542.3848 -7794.9326 8546.4697 -7794.9326 8551.2627 C -7793.9072 8551.2627 l -7793.3657 8549.1094 -7791.771 8548.1514 -7788.9438 8548.1514 C -7781.4561 8548.1514 l -7781.4561 8565.5928 L f *U U U %AI8_EndBrushPattern %AI8_BeginBrushPattern (New Pattern 62) 0 A u 800 Ar 0 J 0 j 1 w 4 M []0 d %AI3_Note: 0 D 0 XR -7885 8587 m -7885 8548.7305 L -7846.7305 8548.7305 L -7846.7305 8587 L -7885 8587 L n 0 O 1 0.14 0.09 0 k -7846.7305 8569.9043 m -7846.7305 8561.3408 L -7885 8561.3408 L -7885 8569.9043 L -7846.7305 8569.9043 L f -7846.7305 8573.0967 m -7846.7305 8572.4229 L -7885 8572.4229 L -7885 8573.0967 L -7846.7305 8573.0967 L f U %AI8_EndBrushPattern %AI8_BeginBrushPattern (New Pattern 63) 0 A u 800 Ar 0 J 0 j 1 w 4 M []0 d %AI3_Note: 0 D 0 XR -7885 8587 m -7885 8548.7305 L -7846.7305 8548.7305 L -7846.7305 8587 L -7885 8587 L n 0 O 1 0.14 0.09 0 k -7846.7305 8565.8262 m -7846.7305 8574.3896 L -7859.3408 8574.3896 L -7859.3408 8587 L -7867.9038 8587 L -7867.9063 8565.8262 L -7867.9038 8565.8262 L -7867.9038 8565.8252 L -7846.7305 8565.8262 L f -7846.7305 8563.3076 m -7870.4233 8563.3076 L -7870.4233 8587 L -7871.0967 8587 L -7871.0977 8562.6328 L -7846.7305 8562.6328 L -7846.7305 8563.3076 L f U %AI8_EndBrushPattern %AI8_BeginBrushPattern (New Pattern 64) 0 A u 800 Ar 0 J 0 j 1 w 4 M []0 d %AI3_Note: 0 D 0 XR -7885 8586.999 m -7885 8548.7285 L -7846.7305 8548.7285 L -7846.7305 8586.999 L -7885 8586.999 L n 0 O 1 0.14 0.09 0 k -7846.7305 8561.3389 m -7872.3896 8561.3389 L -7872.3896 8586.999 L -7863.8262 8587 L -7863.8262 8569.9033 L -7846.7305 8569.9033 L -7846.7305 8561.3389 L f -7846.7305 8572.4219 m -7861.3081 8572.4219 L -7861.3081 8587 L -7860.6338 8587 L -7860.6338 8573.0957 L -7846.7305 8573.0957 L -7846.7305 8572.4219 L f U %AI8_EndBrushPattern %AI8_BeginBrushPattern (New Pattern 65) 0 A u 1 Ap 800 Ar 0 J 0 j 1 w 4 M []0 d %AI3_Note: 0 D 0 XR -7857.0625 8559.4609 m -7884.6025 8559.4609 L -7884.6025 8587 L -7857.0625 8587 L -7857.0625 8559.4609 L n 0 O 0 0.55 1 0.12 k -7856.8418 8572.7002 m -7885 8572.7002 L -7885 8573.8252 L -7856.8418 8573.8252 L -7856.8418 8572.7002 L f u 0 0.55 1 0.3 k -7883.9814 8560.5215 m -7884.4102 8562.5254 -7883.1865 8566.1514 -7880.0874 8569.251 c -7876.9878 8572.3496 -7873.3457 8573.6602 -7871.3594 8573.1455 C -7871.3594 8573.1455 L -7870.875 8571.1895 -7872.1519 8567.5117 -7875.25 8564.4141 c -7878.3457 8561.3184 -7882.0122 8560.1064 -7883.9814 8560.5215 C f 0 0.39 0.7 0.12 k -7883.9814 8585.9912 m -7884.4102 8583.9883 -7883.1865 8580.3613 -7880.0874 8577.2617 c -7876.9878 8574.1641 -7873.3457 8572.8535 -7871.3594 8573.3672 C -7871.3594 8573.3672 L -7870.875 8575.3242 -7872.1519 8579.001 -7875.25 8582.0996 c -7878.3457 8585.1953 -7882.0122 8586.4063 -7883.9814 8585.9912 C f U u 0 0.55 1 0.3 k -7870.1782 8585.9912 m -7870.6074 8583.9883 -7869.3838 8580.3613 -7866.2842 8577.2617 c -7863.1855 8574.1641 -7859.543 8572.8535 -7857.5576 8573.3672 C -7857.5566 8573.3672 L -7857.0718 8575.3242 -7858.3496 8579.001 -7861.4473 8582.0996 c -7864.543 8585.1953 -7868.209 8586.4063 -7870.1782 8585.9912 C f 0 0.39 0.7 0.12 k -7870.1782 8560.5215 m -7870.6074 8562.5254 -7869.3838 8566.1514 -7866.2842 8569.251 c -7863.1855 8572.3496 -7859.543 8573.6602 -7857.5576 8573.1455 C -7857.5566 8573.1455 L -7857.0718 8571.1895 -7858.3496 8567.5117 -7861.4473 8564.4141 c -7864.543 8561.3184 -7868.209 8560.1064 -7870.1782 8560.5215 C f U U %AI8_EndBrushPattern %AI8_BeginBrushPattern (New Pattern 67) 0 A u 0 Ap 800 Ar 0 J 0 j 1 w 4 M []0 d %AI3_Note: 0 D 0 XR -7857.4609 8559.085 m -7885 8559.085 L -7885 8586.624 L -7857.4609 8586.624 L -7857.4609 8559.085 L n 0 O 0 0.55 1 0.12 k -7871.7598 8577.3623 m -7871.7598 8587 L -7870.6343 8587 L -7870.6343 8577.3623 L -7871.7598 8577.3623 L f 0 0.55 1 0.3 k -7875.4233 8572.876 m -7874.3096 8571.1553 -7870.8809 8569.457 -7866.4966 8569.457 c -7862.1152 8569.457 -7858.6138 8571.1064 -7857.5718 8572.874 C -7857.5718 8572.874 L -7858.6138 8574.6006 -7862.1152 8576.2979 -7866.4966 8576.2979 c -7870.875 8576.2979 -7874.3242 8574.5615 -7875.4233 8572.876 C f U %AI8_EndBrushPattern %AI8_BeginBrushPattern (New Pattern 69) 0 A u 800 Ar 0 J 0 j 1 w 4 M []0 d %AI3_Note: 0 D 0 XR -7857.4609 8559.4609 m -7885 8559.4609 L -7885 8587 L -7857.4609 8587 L -7857.4609 8559.4609 L n 0 O 0 0.55 1 0.3 k -7875.4233 8573.252 m -7874.3096 8571.5313 -7870.8809 8569.833 -7866.4966 8569.833 c -7862.1152 8569.833 -7858.6138 8571.4824 -7857.5718 8573.25 C -7857.5718 8573.25 L -7858.6138 8574.9766 -7862.1152 8576.6738 -7866.4966 8576.6738 c -7870.875 8576.6738 -7874.3242 8574.9375 -7875.4233 8573.252 C f U %AI8_EndBrushPattern %AI8_BeginBrushPattern (New Pattern 83) 0 A u 800 Ar 0 J 0 j 1 w 4 M []0 d %AI3_Note: 0 D 0 XR -7884 8585.9355 m -7670.4009 8585.9355 L -7670.4009 8578.1348 L -7884 8578.1348 L -7884 8585.9355 L n 0 O 0 0 0 1 k -7884 8582.0352 m -7873.9858 8584.5273 -7867.187 8585.875 -7855.2007 8585.9355 c -7842.2183 8586 -7777.2002 8585.9355 y -7712.1816 8586 -7699.2002 8585.9355 v -7687.2129 8585.875 -7680.415 8584.5273 -7670.4009 8582.0352 C -7680.415 8579.543 -7687.2129 8578.1953 -7699.2002 8578.1348 c -7712.1816 8578.0693 -7777.2002 8578.1348 y -7842.2183 8578.0693 -7855.2007 8578.1348 v -7867.187 8578.1953 -7873.9858 8579.543 -7884 8582.0352 C f U %AI8_EndBrushPattern %AI5_End_NonPrinting-- %AI5_Begin_NonPrinting Np 4 Bn %AI5_BeginGradient: (Black, White) (Black, White) 0 2 Bd [ < FFFEFDFCFBFAF9F8F7F6F5F4F3F2F1F0EFEEEDECEBEAE9E8E7E6E5E4E3E2E1E0DFDEDDDCDBDAD9D8 D7D6D5D4D3D2D1D0CFCECDCCCBCAC9C8C7C6C5C4C3C2C1C0BFBEBDBCBBBAB9B8B7B6B5B4B3B2B1B0 AFAEADACABAAA9A8A7A6A5A4A3A2A1A09F9E9D9C9B9A999897969594939291908F8E8D8C8B8A8988 87868584838281807F7E7D7C7B7A797877767574737271706F6E6D6C6B6A69686766656463626160 5F5E5D5C5B5A595857565554535251504F4E4D4C4B4A494847464544434241403F3E3D3C3B3A3938 37363534333231302F2E2D2C2B2A292827262524232221201F1E1D1C1B1A19181716151413121110 0F0E0D0C0B0A09080706050403020100 > 0 %_Br [ 0 0 50 100 %_BS %_0 0 50 100 Bs 1 0 50 0 %_BS %_1 0 50 0 Bs BD %AI5_EndGradient %AI5_BeginGradient: (Chrome) (Chrome) 0 6 Bd [ 0 < 464646454545444444444343434342424241414141404040403F3F3F3E3E3E3E3D3D3D3C3C3C3C3B 3B3B3B3A3A3A39393939383838383737373636363635353535343434333333333232323131313130 3030302F2F2F2E2E2E2E2D2D2D2D2C2C2C2B2B2B2B2A2A2A2A292929282828282727272626262625 2525252424242323232322222222212121202020201F1F1F1F1E1E1E1D1D1D1D1C1C1C1B1B1B1B1A 1A1A1A1919191818181817171717161616151515151414141413131312121212111111101010100F 0F0F0F0E0E0E0D0D0D0D0C0C0C0C0B0B0B0A0A0A0A09090909080808070707070606060505050504 04040403030302020202010101010000 > < FFFEFDFCFBFAF9F8F7F6F5F4F3F2F1F0EFEEEDECEBEAE9E8E7E6E5E4E3E2E1E0DFDEDDDCDBDAD9D8 D7D6D5D4D3D2D1D0CFCECDCCCBCAC9C8C7C6C5C4C3C2C1C0BFBEBDBCBBBAB9B8B7B6B5B4B3B2B1B0 AFAEADACABAAA9A8A7A6A5A4A3A2A1A09F9E9D9C9B9A999897969594939291908F8E8D8C8B8A8988 87868584838281807F7E7D7C7B7A797877767574737271706F6E6D6C6B6A69686766656463626160 5F5E5D5C5B5A595857565554535251504F4E4D4C4B4A494847464544434241403F3E3D3C3B3A3938 37363534333231302F2E2D2C2B2A292827262524232221201F1E1D1C1B1A19181716151413121110 0F0E0D0C0B0A09080706050403020100 > < 1F1E1E1E1E1E1E1E1E1E1D1D1D1D1D1D1D1D1C1C1C1C1C1C1C1C1B1B1B1B1B1B1B1B1B1A1A1A1A1A 1A1A1A19191919191919191818181818181818181717171717171717161616161616161615151515 15151515151414141414141414131313131313131312121212121212121211111111111111111010 1010101010100F0F0F0F0F0F0F0F0F0E0E0E0E0E0E0E0E0D0D0D0D0D0D0D0D0C0C0C0C0C0C0C0C0C 0B0B0B0B0B0B0B0B0A0A0A0A0A0A0A0A090909090909090909080808080808080807070707070707 07060606060606060606050505050505050504040404040404040303030303030303030202020202 02020201010101010101010000000000 > 1 %_Br 0 0.275 1 < 6B6A696867666564636261605F5E5D5C5B5A595857565554535251504F4E4D4C4B4A494847464544 434241403F3E3D3C3B3A393837363534333231302F2E2D2C2B2A292827262524232221201F > 1 %_Br 0 < 00000101010102020202030303040404040505050506060607070707080808090909090A0A0A0A0B 0B0B0C0C0C0C0D0D0D0D0E0E0E0F0F0F0F1010101011111112121212131313141414141515151516 161617171717181818181919191A1A1A1A1B1B1B1C1C1C1C1D1D1D1D1E1E1E1F1F1F1F2020202021 212122222222232323232424242525252526262626272727282828282929292A2A2A2A2B2B2B2B2C 2C2C2D2D2D2D2E2E2E2E2F2F2F303030303131313132323233333333343434353535353636363637 373738383838393939393A3A3A3B3B3B3B3C3C3C3D3D3D3D3E3E3E3E3F3F3F404040404141414142 42424343434344444444454545464646 > < 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F2021222324252627 28292A2B2C2D2E2F303132333435363738393A3B3C3D3E3F404142434445464748494A4B4C4D4E4F 505152535455565758595A5B5C5D5E5F606162636465666768696A6B6C6D6E6F7071727374757677 78797A7B7C7D7E7F808182838485868788898A8B8C8D8E8F909192939495969798999A9B9C9D9E9F A0A1A2A3A4A5A6A7A8A9AAABACADAEAFB0B1B2B3B4B5B6B7B8B9BABBBCBDBEBFC0C1C2C3C4C5C6C7 C8C9CACBCCCDCECFD0D1D2D3D4D5D6D7D8D9DADBDCDDDEDFE0E1E2E3E4E5E6E7E8E9EAEBECEDEEEF F0F1F2F3F4F5F6F7F8F9FAFBFCFDFEFF > < 00000101020203030304040505050606070708080809090A0A0B0B0B0C0C0D0D0D0E0E0F0F101010 1111121212131314141515151616171718181819191A1A1A1B1B1C1C1D1D1D1E1E1F1F1F20202121 222222232324242525252626272727282829292A2A2A2B2B2C2C2D2D2D2E2E2F2F2F303031313232 32333334343435353636373737383839393A3A3A3B3B3C3C3C3D3D3E3E3F3F3F4040414142424243 434444444545464647474748484949494A4A4B4B4C4C4C4D4D4E4E4F4F4F50505151515252535354 54545555565657575758585959595A5A5B5B5C5C5C5D5D5E5E5E5F5F606061616162626363646464 6565666666676768686969696A6A6B6B > 1 %_Br 1 0 %_Br < FFFEFDFCFBFAF9F8F7F6F5F4F3F2F1F0EFEEEDECEBEAE9E8E7E6E5E4E3E2E1E0DFDEDDDCDBDAD9D8 D7D6D5D4D3D2D1D0CFCECDCCCBCAC9C8C7C6C5C4C3C2C1C0BFBEBDBCBBBAB9B8B7B6B5B4B3B2B1B0 AFAEADACABAAA9A8A7A6A5A4A3A2A1A09F9E9D9C9B9A999897969594939291908F8E8D8C8B8A8988 87868584838281807F7E7D7C7B7A797877767574737271706F6E6D6C6B6A69686766656463626160 5F5E5D5C5B5A595857565554535251504F4E4D4C4B4A494847464544434241403F3E3D3C3B3A3938 37363534333231302F2E2D2C2B2A292827262524232221201F1E1D1C1B1A19181716151413121110 0F0E0D0C0B0A09080706050403020100 > < 4D4C4C4C4B4B4B4A4A4A4A4949494848484747474746464645454544444444434343424242414141 414040403F3F3F3E3E3E3E3D3D3D3C3C3C3B3B3B3B3A3A3A39393938383838373737363636353535 35343434333333323232323131313030302F2F2F2E2E2E2E2D2D2D2C2C2C2B2B2B2B2A2A2A292929 282828282727272626262525252524242423232322222222212121202020201F1F1F1E1E1E1D1D1D 1D1C1C1C1B1B1B1A1A1A1A1919191818181717171616161615151514141413131313121212111111 101010100F0F0F0E0E0E0D0D0D0D0C0C0C0B0B0B0A0A0A0A09090908080807070707060606050505 04040404030303020202010101010000 > 0 0 1 %_Br [ 1 0 50 92 %_BS %_1 0 50 92 Bs 0 0.275 1 0.12 1 50 59 %_BS %_0 0.275 1 0.12 1 50 59 Bs 0 0.275 1 0.42 1 50 50 %_BS %_0 0.275 1 0.42 1 50 50 Bs 1 0 50 49 %_BS %_1 0 50 49 Bs 1 0 50 41 %_BS %_1 0 50 41 Bs 1 0.3 0 0 1 50 0 %_BS %_1 0.3 0 0 1 50 0 Bs BD %AI5_EndGradient %AI5_BeginGradient: (Rainbow) (Rainbow) 0 6 Bd [ < FFFEFDFCFBFAF9F8F7F6F5F4F3F2F1F0EFEEEDECEBEAE9E8E7E6E5E4E3E2E1E0DFDEDDDCDBDAD9D8 D7D6D5D4D3D2D1D0CFCECDCCCBCAC9C8C7C6C5C4C3C2C1C0BFBEBDBCBBBAB9B8B7B6B5B4B3B2B1B0 AFAEADACABAAA9A8A7A6A5A4A3A2A1A09F9E9D9C9B9A999897969594939291908F8E8D8C8B8A8988 87868584838281807F7E7D7C7B7A797877767574737271706F6E6D6C6B6A69686766656463626160 5F5E5D5C5B5A595857565554535251504F4E4D4C4B4A494847464544434241403F3E3D3C3B3A3938 37363534333231302F2E2D2C2B2A292827262524232221201F1E1D1C1B1A19181716151413121110 0F0E0D0C0B0A09080706050403020100 > 1 0 0 1 %_Br 1 < 0708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F202122232425262728292A2B2C2D2E 2F303132333435363738393A3B3C3D3E3F404142434445464748494A4B4C4D4E4F50515253545556 5758595A5B5C5D5E5F606162636465666768696A6B6C6D6E6F707172737475767778797A7B7C7D7E 7F808182838485868788898A8B8C8D8E8F909192939495969798999A9B9C9D9E9FA0A1A2A3A4A5A6 A7A8A9AAABACADAEAFB0B1B2B3B4B5B6B7B8B9BABBBCBDBEBFC0C1C2C3C4C5C6C7C8C9CACBCCCDCE CFD0D1D2D3D4D5D6D7D8D9DADBDCDDDEDFE0E1E2E3E4E5E6E7E8E9EAEBECEDEEEFF0F1F2F3F4F5F6 F7F8F9FAFBFCFDFEFF > 0 0 1 %_Br 1 < 00000000000000000000000000000000000001010101010101010101010101010101010101010101 01010101010101010101010101010202020202020202020202020202020202020202020202020202 02020202020202020202030303030303030303030303030303030303030303030303030303030303 03030303030304040404040404040404040404040404040404040404040404040404040404040404 04040505050505050505050505050505050505050505050505050505050505050505050505050606 06060606060606060606060606060606060606060606060606060606060606060607070707070707 07070707070707070707070707070707 > < FFFEFDFCFBFAF9F8F7F6F5F4F3F2F1F0EFEEEDECEBEAE9E8E7E6E5E4E3E2E1E0DFDEDDDCDBDAD9D8 D7D6D5D4D3D2D1D0CFCECDCCCBCAC9C8C7C6C5C4C3C2C1C0BFBEBDBCBBBAB9B8B7B6B5B4B3B2B1B0 AFAEADACABAAA9A8A7A6A5A4A3A2A1A09F9E9D9C9B9A999897969594939291908F8E8D8C8B8A8988 87868584838281807F7E7D7C7B7A797877767574737271706F6E6D6C6B6A69686766656463626160 5F5E5D5C5B5A595857565554535251504F4E4D4C4B4A494847464544434241403F3E3D3C3B3A3938 37363534333231302F2E2D2C2B2A292827262524232221201F1E1D1C1B1A19181716151413121110 0F0E0D0C0B0A09080706050403020100 > 0 1 %_Br < 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F2021222324252627 28292A2B2C2D2E2F303132333435363738393A3B3C3D3E3F404142434445464748494A4B4C4D4E4F 505152535455565758595A5B5C5D5E5F606162636465666768696A6B6C6D6E6F7071727374757677 78797A7B7C7D7E7F808182838485868788898A8B8C8D8E8F909192939495969798999A9B9C9D9E9F A0A1A2A3A4A5A6A7A8A9AAABACADAEAFB0B1B2B3B4B5B6B7B8B9BABBBCBDBEBFC0C1C2C3C4C5C6C7 C8C9CACBCCCDCECFD0D1D2D3D4D5D6D7D8D9DADBDCDDDEDFE0E1E2E3E4E5E6E7E8E9EAEBECEDEEEF F0F1F2F3F4F5F6F7F8F9FAFBFCFDFEFF > 0 1 0 1 %_Br 0 < FFFEFDFCFBFAF9F8F7F6F5F4F3F2F1F0EFEEEDECEBEAE9E8E7E6E5E4E3E2E1E0DFDEDDDCDBDAD9D8 D7D6D5D4D3D2D1D0CFCECDCCCBCAC9C8C7C6C5C4C3C2C1C0BFBEBDBCBBBAB9B8B7B6B5B4B3B2B1B0 AFAEADACABAAA9A8A7A6A5A4A3A2A1A09F9E9D9C9B9A999897969594939291908F8E8D8C8B8A8988 87868584838281807F7E7D7C7B7A797877767574737271706F6E6D6C6B6A69686766656463626160 5F5E5D5C5B5A595857565554535251504F4E4D4C4B4A494847464544434241403F3E3D3C3B3A3938 37363534333231302F2E2D2C2B2A292827262524232221201F1E1D1C1B1A19181716151413121110 0F0E0D0C0B0A09080706050403020100 > 1 0 1 %_Br [ 0 1 0 0 1 50 100 %_BS %_0 1 0 0 1 50 100 Bs 1 1 0 0 1 50 80 %_BS %_1 1 0 0 1 50 80 Bs 1 0.0279 0 0 1 50 60 %_BS %_1 0.0279 0 0 1 50 60 Bs 1 0 1 0 1 50 40 %_BS %_1 0 1 0 1 50 40 Bs 0 0 1 0 1 50 20 %_BS %_0 0 1 0 1 50 20 Bs 0 1 1 0 1 50 0 %_BS %_0 1 1 0 1 50 0 Bs BD %AI5_EndGradient %AI5_BeginGradient: (Yellow & Orange Radial) (Yellow & Orange Radial) 1 2 Bd [ 0 < 0001010203040506060708090A0B0C0C0D0E0F10111213131415161718191A1B1C1D1D1E1F202122 232425262728292A2B2B2C2D2E2F303132333435363738393A3B3C3D3E3E3F404142434445464748 494A4B4C4D4E4F505152535455565758595A5B5C5D5E5F60606162636465666768696A6B6C6D6E6F 707172737475767778797A7B7C7D7E7F808182838485868788898A8B8C > < FFFFFFFFFEFEFEFEFEFEFEFDFDFDFDFDFDFCFCFCFCFCFCFBFBFBFBFBFBFAFAFAFAFAFAF9F9F9F9F9 F9F8F8F8F8F8F8F7F7F7F7F7F7F6F6F6F6F6F6F5F5F5F5F5F5F4F4F4F4F4F3F3F3F3F3F3F2F2F2F2 F2F2F1F1F1F1F1F0F0F0F0F0F0EFEFEFEFEFEFEEEEEEEEEEEDEDEDEDEDEDECECECECECEBEBEBEBEB EBEAEAEAEAEAE9E9E9E9E9E9E8E8E8E8E8E8E7E7E7E7E7E6E6E6E6E6E6 > 0 1 %_Br [ 0 0 1 0 1 52 19 %_BS %_0 0 1 0 1 52 19 Bs 0 0.55 0.9 0 1 50 100 %_BS %_0 0.55 0.9 0 1 50 100 Bs BD %AI5_EndGradient %AI5_End_NonPrinting-- %AI5_BeginPalette 0 0 Pb 0 0 0 0 k (WHITE) Pc 1 1 1 1 ([Registration]) 0 Xs ([Registration]) Pc 0 0 0 1 k (C=0 M=0 Y=0 K=100) Pc Bb 2 (Black, White) -7885 8587 0 0 1 0 0 1 0 0 Bg 0 BB (Black, White) Pc Bb 2 (Chrome) -7885 8587 0 0 1 0 0 1 0 0 Bg 0 BB (Chrome) Pc Bb 2 (Rainbow) -7885 8587 0 0 1 0 0 1 0 0 Bg 0 BB (Rainbow) Pc Bb 0 0 0 0 Bh 2 (Yellow & Orange Radial) -7885 8587 0 0 1 0 0 1 0 0 Bg 0 BB (Yellow & Orange Radial) Pc (Brick) 0 0 1 1 0 0 0 0 0 [1 0 0 1 0 0] p (Brick) Pc (Confetti) 0 0 1 1 0 0 0 0 0 [1 0 0 1 0 0] p (Confetti) Pc (Leaves - Fall ) 0 0 1 1 0 0 0 0 0 [1 0 0 1 0 0] p (Leaves - Fall ) Pc (Stripes) 0 0 1 1 0 0 0 0 0 [1 0 0 1 0 0] p (Stripes) Pc 0.91 0.01 0.93 0 (PANTONE 354 2X CVC) 0 x (PANTONE 354 2X CVC) Pc 0 1 0.91 0 (PANTONE 485 CVC) 0 x (PANTONE 485 CVC) Pc 0 0.51 1 0 (PANTONE 152 CVC) 0 x (PANTONE 152 CVC) Pc PB %AI5_EndPalette %AI5_Begin_NonPrinting Np %AI8_BeginPluginObject (Adobe Brush Manager Order) (Adobe Brush Manager Order) ( Adobe Calligraphic Brush Tool/ 6 pt Flat / Adobe Calligraphic Brush T) - (ool/ 10 pt Oval/ Adobe Calligraphic Brush Tool/ 12 pt Oval / Adobe Cal) - (ligraphic Brush Tool/ 20 pt Oval/ Adobe Calligraphic Brush Tool/ 25 pt) - ( Round / Adobe Calligraphic Brush Tool/ 50 pt Flat/ Adobe Scatter Brus) - (h Tool/ Dog Tracks/ Adobe Scatter Brush Tool/ Fall Leaf/ Adobe Scatter) - ( Brush Tool/ Ladybug/ Adobe Scatter Brush Tool/ Push Pin/ Adobe Scatte) - (r Brush Tool/ Strawberry/ Adobe Scatter Brush Tool/ Twinkle Star / Ado) - (be ArtOnPath Brush Tool/ Marker/ Adobe ArtOnPath Brush Tool/ Tapered S) - (troke/ Adobe ArtOnPath Brush Tool/ Arrow/ Adobe ArtOnPath Brush Tool/ ) - (Paintbrush/ Adobe ArtOnPath Brush Tool/ Type/ Adobe PatternOnPath Brus) - (h Tool/ Double Lines/ Adobe PatternOnPath Brush Tool/ Laurel/ Adobe Pa) - (tternOnPath Brush Tool/ Rope /) . %AI8_EndPluginObject %AI8_BeginPluginObject (Adobe Calligraphic Brush Tool) (6 pt Flat ) (1 4 8 10 10 90 90 2 0 0 0) . %AI8_EndPluginObject %AI8_BeginPluginObject (Adobe Calligraphic Brush Tool) (10 pt Oval) (1 1 19 15 15 130 130 2 0 0 0) . %AI8_EndPluginObject %AI8_BeginPluginObject (Adobe Calligraphic Brush Tool) (12 pt Oval ) (1 7 17 45 45 0 0 2 0 0 0) . %AI8_EndPluginObject %AI8_BeginPluginObject (Adobe Calligraphic Brush Tool) (20 pt Oval) (1 20 20 20 100 40 80 0 2 1 0) . %AI8_EndPluginObject %AI8_BeginPluginObject (Adobe Calligraphic Brush Tool) (25 pt Round ) (1 10 40 100 100 0 0 2 0 0 0) . %AI8_EndPluginObject %AI8_BeginPluginObject (Adobe Calligraphic Brush Tool) (50 pt Flat) (1 40 60 0 0 44 44 0 0 0 0) . %AI8_EndPluginObject %AI8_BeginPluginObject (Adobe ArtOnPath Brush Tool) (Arrow) (1 / New Pattern 45/ / / / / 5 0.898039 0 0 / 2 0 1 0 1 0 0 0) . %AI8_EndPluginObject %AI8_BeginPluginObject (Adobe ArtOnPath Brush Tool) (Marker) (1 / New Pattern 8/ / / / / 0 0 / 1 1 1 0 1 0 0 0) . %AI8_EndPluginObject %AI8_BeginPluginObject (Adobe ArtOnPath Brush Tool) (Paintbrush) (1 / New Pattern 5/ / / / / 1 0.5 0.85 1 0.45 / 0 0 1 0 1 0 0 0) . %AI8_EndPluginObject %AI8_BeginPluginObject (Adobe ArtOnPath Brush Tool) (Tapered Stroke) (1 / New Pattern 83/ / / / / 1 0 0 0 1 / 1 1 1 0 1 0 0 0) . %AI8_EndPluginObject %AI8_BeginPluginObject (Adobe ArtOnPath Brush Tool) (Type) (1 / New Pattern 50/ / / / / 1 0.952941 0.94902 0.196078 0.0745098 / 1) - ( 0 1 0 1 0 0 0) . %AI8_EndPluginObject %AI8_BeginPluginObject (Adobe PatternOnPath Brush Tool) (Double Lines) (1 / New Pattern 62/ New Pattern 63/ New Pattern 64/ / / 1 1 0.14 0.09 ) - (0 / 1 0 1 0 1 0 0 0) . %AI8_EndPluginObject %AI8_BeginPluginObject (Adobe PatternOnPath Brush Tool) (Laurel) (1 / New Pattern 65/ New Pattern 42/ New Pattern 67/ / New Pattern 69/ ) - (1 0 0.55 1 0.3 / 1 0 1 0 1 0 0 0) . %AI8_EndPluginObject %AI8_BeginPluginObject (Adobe PatternOnPath Brush Tool) (Rope ) (1 / New Pattern 1/ / / New Pattern 3/ New Pattern 6/ 5 0 0 0 / 1 0 1 ) - (0 1 0 0 0) . %AI8_EndPluginObject %AI8_BeginPluginObject (Adobe Scatter Brush Tool) (Dog Tracks) (1 /New Pattern 41/ 1 0 0 0 1 / 0 1 1 0 1 1 0 0 0 0 -90 -90 0 1 0) . %AI8_EndPluginObject %AI8_BeginPluginObject (Adobe Scatter Brush Tool) (Fall Leaf) (1 /New Pattern 34/ 1 0.0745 0.9 0.9019 0.18 / 0 0.602793 1 1 0.1 1 1 -) - (1 1 1 -180 180 1 0 0) . %AI8_EndPluginObject %AI8_BeginPluginObject (Adobe Scatter Brush Tool) (Ladybug) (1 /New Pattern 10/ 5 0.898039 0 0 / 0 1 1 0 0.803911 1.2 1 -1.55 1.55 ) - (1 -180 180 1 0 0) . %AI8_EndPluginObject %AI8_BeginPluginObject (Adobe Scatter Brush Tool) (Push Pin) (1 /New Pattern 36/ 1 0.025 0.1 0.475 0 / 0 1 1 0 0.401676 1 1 -1.06145) - ( 1.06 1 -180 180 1 0 0) . %AI8_EndPluginObject %AI8_BeginPluginObject (Adobe Scatter Brush Tool) (Strawberry) (1 /New Pattern 37/ 1 0 0 0 1 / 0 0.803911 1 1 0.803911 1 1 -0.5 0.5 1 ) - (-75 75.419 1 0 0) . %AI8_EndPluginObject %AI8_BeginPluginObject (Adobe Scatter Brush Tool) (Twinkle Star ) (1 /New Pattern 2/ 0 1 / 1 0.5 1 1 0.25 1 1 -0.5 0.5 1 0 0 0 0 0) . %AI8_EndPluginObject %AI5_End_NonPrinting-- %AI5_Begin_NonPrinting Np %AI8_PluginGroupInfo (Adobe Path Blends) (Adobe Blends Plugin) (Live Blends) %AI8_PluginGroupInfo (Adobe PatternOnPath Brush Tool) (Adobe Pattern Brush Plugin) (Art Brush Tool) %AI8_PluginGroupInfo (Adobe ArtOnPath Brush Tool) (Adobe Art Brush Plugin) (Art Brush Tool) %AI8_PluginGroupInfo (Adobe Calligraphic Brush Tool) (Undo New Calligraphic Brush) (Calligraphic Brush Tool) %AI8_PluginGroupInfo (Adobe Scatter Brush Tool) (Adobe Scatter Brush Plugin) (Scatter Brush Tool) %AI5_End_NonPrinting-- %%EndSetup %AI5_BeginLayer 1 1 0 1 0 0 1 8 0 0 0 0 50 Lb (border) Ln 0 A 1 Ap 0 R 0 0 0 1 K 800 Ar 0 J 0 j 5.2327 w 4 M []0 d %AI3_Note: 0 D 0 XR 390.7588 335.9102 m 390.7588 333.4834 388.5283 331.5156 385.7754 331.5156 C 220.209 331.5156 L 217.457 331.5156 215.2256 333.4834 215.2256 335.9102 C 215.2256 481.3916 L 215.2256 483.8184 217.457 485.7856 220.209 485.7856 C 385.7754 485.7856 L 388.5283 485.7856 390.7588 483.8184 390.7588 481.3916 C 390.7588 335.9102 L s LB %AI5_EndLayer-- %AI5_BeginLayer 1 1 0 1 0 0 1 20 102 102 0 0 50 Lb (tv) Ln 0 A 0 O 0 0 0 1 k 0 R 0 0 0 1 K 800 Ar 0 J 0 j 3 w 4 M []0 d %AI3_Note: 0 D 0 XR 377.3408 366.4893 m 377.3408 363.1758 374.6543 360.4893 371.3408 360.4893 C 234.6743 360.4893 L 231.3608 360.4893 228.6743 363.1758 228.6743 366.4893 C 228.6743 461.1563 L 228.6743 464.4697 231.3608 467.1563 234.6743 467.1563 C 371.3408 467.1563 L 374.6543 467.1563 377.3408 464.4697 377.3408 461.1563 C 377.3408 366.4893 L b 0 0 0 0 k 360.3711 382.1641 m 360.3711 378.8506 357.6846 376.1641 354.3711 376.1641 C 253.0381 376.1641 L 249.7246 376.1641 247.0381 378.8506 247.0381 382.1641 C 247.0381 444.1641 L 247.0381 447.4775 249.7246 450.1641 253.0381 450.1641 C 354.3711 450.1641 L 357.6846 450.1641 360.3711 447.4775 360.3711 444.1641 C 360.3711 382.1641 L b u 0 Ap 0 0 0 1 k 1 w 325.7354 369.5391 m 322.2354 375.0391 318.2354 351.5391 342.2354 344.5391 c 265.4619 344.5391 l 289.4619 351.5391 285.4619 375.0391 281.9619 369.5391 c 325.7354 369.5391 l b 1 Ap 1.0096 w 342.9453 343.0273 m 342.9453 342.1924 342.2539 341.5156 341.4043 341.5156 C 266.0039 341.5156 L 265.1523 341.5156 264.4639 342.1924 264.4639 343.0273 C 264.4639 343.0273 L 264.4639 343.8623 265.1523 344.5391 266.0039 344.5391 C 341.4043 344.5391 L 342.2539 344.5391 342.9453 343.8623 342.9453 343.0273 C 342.9453 343.0273 L b U LB %AI5_EndLayer-- %AI5_BeginLayer 1 1 1 1 0 0 1 1 255 79 79 0 50 Lb (flames!) Ln 0 A u 0 Ap 0 O 0 0.51 1 0 (PANTONE 152 CVC) 0 x 0 R 0 0 0 1 K 800 Ar 0 J 0 j 3 w 4 M []0 d %AI3_Note: 0 D 0 XR 268.1118 375.1055 m 278.0723 371.9902 285.0166 362.1172 307.6953 356.7012 C 328.5361 364.6758 339.9619 383.5098 345.8936 389.666 C 343.8018 403.9888 340.0576 432.1499 332.6553 443.0522 C 319.5771 453.9092 308.0566 485.27 318.7891 505.4521 C 325.9775 515.9902 288.2168 468.6289 304.229 442.3589 C 318.9365 416.1494 313.5049 417.688 311.5088 418.7856 C 306.4565 424.1489 308.7578 428.8916 297.6426 440.9727 C 282.4565 457.4297 280.1528 461.7734 296.6025 495.0522 C 301.0166 499.0298 277.292 523.6685 275.7539 530.4106 C 277.292 523.6685 293.3374 492.3101 277.8828 480.4922 C 265.1763 462.8696 265.939 450.7354 264.7095 445.1323 C 268.3765 438.5493 275.417 425.7495 278.5762 413.9326 C 284.3765 406.5493 284.7471 391.6973 275.8027 404.2261 C 273.8164 414.5488 252.376 431.5088 257.4292 460.0386 C 269.9766 491.3496 240.8564 433.4292 244.603 410.4658 C 256.2168 392.4688 270.3921 380.3086 268.1118 375.1055 C b 0 1 0.91 0 (PANTONE 485 CVC) 0 x 1 w 263.0464 378.707 m 271.0464 370.041 280.3799 358.707 303.0464 360.041 c 325.7129 361.373 339.7129 382.041 341.7129 392.707 c 343.7129 403.374 337.7129 432.708 327.0459 444.041 c 316.3799 455.374 304.3794 488.041 313.7129 504.041 c 323.0469 520.041 283.7129 470.707 299.7129 443.374 c 315.7129 416.041 310.0547 417.644 306.7129 420.7075 c 302.7129 424.374 305.1094 429.314 293.3799 442.041 c 277.7129 459.041 275.3135 463.5659 292.3799 494.041 c 297.0464 502.374 272.333 528.0396 y 289.0469 495.3745 274.3799 480.041 v 259.7129 464.7075 260.5073 452.0679 261.7129 446.041 c 263.0464 439.374 270.3799 426.041 275.0464 416.041 c 279.7129 406.041 280.0986 390.5684 272.3799 406.7075 c 268.7129 414.374 246.3794 432.0405 254.7129 460.374 c 264.7129 494.374 234.3799 434.041 242.3799 412.7075 c 250.3799 391.373 263.0464 378.707 y b U LB %AI5_EndLayer-- %AI5_BeginLayer 1 1 0 1 0 0 1 2 79 255 79 0 50 Lb (text) Ln 0 A 1 To 1 0 0 1 179.3335 327.2939 0 Tp 0 Tv 1 Ap 800 Ar 0 J 0 j 1 w 4 M []0 d %AI3_Note: 0 D 0 XR 428.666 249.9619 m 428.666 327.2939 L 179.3335 327.2939 L 179.3335 249.9619 L 428.666 249.9619 L n TP 14.3068 -43.125 Td 2 Tr 0 O 0 0 0 1 k 0 R 0 1 0.91 0 (PANTONE 485 CVC) 0 X %_ 0 50 XQ /_Device 48 46.752 -7.1038 Tf 0 Ts 100 100 Tz 0 Tt %_0 0 100 100 Xu %AI55J_GlyphSubst: GlyphSubstNone 1 TA %_ 0 XL 0 TY 0 TV 36 0 Xb XB 0 0 5 TC 100 100 200 TW 25 TG 0 0 0 Ti 1 Ta 0 1 2 2 3 Th 0 Tq 240 Tg 0 0 Tl 0 Tc 0 Tw (XSCREENSA) Tx 1 91 Tk (VER) Tx 1 0 Tk (\r) TX TO LB %AI5_EndLayer-- %%PageTrailer gsave annotatepage grestore showpage %%Trailer Adobe_Illustrator_AI5 /terminate get exec Adobe_shading_AI8 /terminate get exec Adobe_ColorImage_AI6 /terminate get exec Adobe_typography_AI5 /terminate get exec Adobe_cshow /terminate get exec Adobe_level2_AI5 /terminate get exec %%EOF xscreensaver-5.36/jwxyz/README000644 000767 000024 00000002534 12720215422 016212 0ustar00jwzstaff000000 000000 JWXYZ Is Not Xlib. But it's a bunch of function definitions that bear some resemblance to Xlib and that kinda sorta implement Xlib in terms of the native graphics substrate (Cocoa, OpenGL, GLES, Java). When porting XScreenSaver to other platforms, my goal is to keep a single code base that compiles for multiple platforms. That is, I don't want to end up with two different files that implement "Attraction" using different APIs or different languages, Since the vast majority of xscreensaver was originally written in C for the vintage-1985 X11 API and the vintage-1992 OpenGL API, this presents something of a challenge. 1: To do the MacOS port, I implemented X11 in terms of Cocoa. That's what jwxyz.m is. 2: To do the iOS port, I used that X11/Cocoa layer from #1, but also had to implement OpenGL 1.1 in terms of OpenGLES 1.0. That's what jwzgles.c is. I have some things to say about that. You can read it on my blog: http://jwz.org/b/yhM9 3: To do the Android port, we used the OpenGL/OpenGLES layer from #2, but implemented X11 in terms of OpenGL. That's what jwxyz-gl.c, jwxyz-common.c and jwxyz-android.c are. Perhaps some day we can re-target MacOS and iOS at the OpenGL port of X11 instead of the Cocoa port of X11, and replace jwxyz.m with jwxyz-gl.c and jwxyz-cocoa.m. That day has not yet arrived. xscreensaver-5.36/jwxyz/Makefile.in000664 000767 000000 00000007414 12777052474 017420 0ustar00jwzwheel000000 000000 # utils/Makefile.in --- xscreensaver, Copyright (c) 1997-2010 Jamie Zawinski. # the `../configure' script generates `jwxyz/Makefile' from this file. # JWXYZ Is Not Xlib. # # But it's a bunch of function definitions that bear some resemblance to # Xlib and that kinda sorta implement Xlib in terms of the native graphics # substrate (Cocoa, OpenGL, GLES, Java). @SET_MAKE@ .SUFFIXES: .SUFFIXES: .c .o srcdir = @srcdir@ VPATH = @srcdir@ prefix = @prefix@ datarootdir = @datarootdir@ CC = @CC@ CFLAGS = @CFLAGS@ DEFS = @DEFS@ DEPEND = @DEPEND@ DEPEND_FLAGS = @DEPEND_FLAGS@ DEPEND_DEFINES = @DEPEND_DEFINES@ SHELL = /bin/sh INSTALL = @INSTALL@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_DIRS = @INSTALL_DIRS@ X_CFLAGS = @X_CFLAGS@ INCLUDES_1 = -I$(srcdir) -I.. INCLUDES = $(INCLUDES_1) @INCLUDES@ SRCS = jwxyz-android.c jwxyz-cocoa.m jwxyz-common.c jwxyz-gl.c \ jwxyz-timers.c jwxyz.m jwzgles.c OBJS = HDRS = jwxyz-android.h jwxyz-cocoa.h jwxyz-timers.h jwxyz.h \ jwxyzI.h jwzgles.h jwzglesI.h EXTRAS = README Makefile.in TARFILES = $(EXTRAS) $(SRCS) $(HDRS) $(LOGOS) default: all all: $(OBJS) install: install-program install-man uninstall: uninstall-program uninstall-man install-strip: $(MAKE) INSTALL_PROGRAM='$(INSTALL_PROGRAM) -s' install install-program: install-man: uninstall-program: uninstall-man: clean: -rm -f *.o a.out core distclean: clean -rm -f Makefile TAGS *~ "#"* # Adds all current dependencies to Makefile depend: $(DEPEND) -s '# DO NOT DELETE: updated by make depend' \ $(DEPEND_FLAGS) -- \ $(INCLUDES) $(DEFS) $(DEPEND_DEFINES) $(CFLAGS) $(X_CFLAGS) -- \ $(SRCS) # Adds some dependencies to Makefile.in -- not totally accurate, but pretty # close. This excludes dependencies on files in /usr/include, etc. It tries # to include only dependencies on files which are themselves a part of this # package. distdepend:: @echo updating dependencies in `pwd`/Makefile.in... ; \ $(DEPEND) -w 0 -f - \ -s '# DO NOT DELETE: updated by make distdepend' $(DEPEND_FLAGS) -- \ $(INCLUDES_1) $(DEFS) $(DEPEND_DEFINES) $(CFLAGS) $(X_CFLAGS) -- \ $(SRCS) 2>/dev/null | \ sort -d | \ ( \ awk '/^# .*Makefile.in ---/,/^# DO .*distdepend/' < Makefile.in ; \ sed -e '/^#.*/d' \ -e 's@ \./@ @g;s@ /[^ ]*@@g;/^.*:$$/d' \ -e 's@ \([^$$]\)@ $$(srcdir)/\1@g' \ -e 's@ $$(srcdir)/\(.*config.h\)@ \1@g' ; \ echo '' \ ) > /tmp/distdepend.$$$$ && \ mv /tmp/distdepend.$$$$ Makefile.in TAGS: tags tags: find $(srcdir) -name '*.[chly]' -print | xargs etags -a echo_tarfiles: @echo $(TARFILES) # How we build object files in this directory. .c.o: $(CC) -c $(INCLUDES) $(DEFS) $(CPPFLAGS) $(CFLAGS) $(X_CFLAGS) $< # Rules for generating the VMS makefiles on Unix, so that it doesn't have to # be done by hand... # VMS_AXP_COMPILE=$$ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H)/INCL=([],[-]) compile_axp.com: Makefile.in @echo generating $@ from $<... ; \ ( ( for c in $(SRCS) vms-*.c ; do \ c=`echo $$c | tr a-z A-Z` ; \ echo "$(VMS_AXP_COMPILE) $$c" ; \ done ; \ ) | sort -d ; \ echo '$$ lib/cre utils.olb_axp' ; \ echo '$$ lib utils.olb_axp *.obj' ; \ echo '$$! delete/noconf *.obj;' ; \ ) > $@ compile_decc.com: compile_axp.com @echo generating $@ from $<... ; \ sed 's/axp/decc/g' < $< > $@ distdepend:: compile_axp.com compile_decc.com ############################################################################## # # DO NOT DELETE: updated by make distdepend jwxyz-android.o: ../config.h jwxyz-common.o: ../config.h jwxyz-timers.o: ../config.h jwzgles.o: ../config.h xscreensaver-5.36/jwxyz/jwxyz-android.c000664 000767 000024 00000103760 12774322551 020327 0ustar00jwzstaff000000 000000 /* xscreensaver, Copyright (c) 2016 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 file is three related things: * * - It is the Android-specific C companion to jwxyz-gl.c; * - It is how C calls into Java to do things that OpenGL does not * have access to without Java-based APIs; * - It is how the jwxyz.java class calls into C to run the hacks. */ #include "config.h" #ifdef HAVE_ANDROID /* whole file */ #include #include #include #include #include #include #include #include #include #include #include "screenhackI.h" #include "jwxyzI.h" #include "jwzglesI.h" #include "jwxyz-android.h" #include "textclient.h" #include "grabscreen.h" #define countof(x) (sizeof(x)/sizeof(*(x))) extern struct xscreensaver_function_table *xscreensaver_function_table; struct function_table_entry { const char *progname; struct xscreensaver_function_table *xsft; }; #include "gen/function-table.h" struct event_queue { XEvent event; struct event_queue *next; }; static void send_queued_events (struct running_hack *rh); const char *progname; const char *progclass; int mono_p = 0; static JavaVM *global_jvm; static jmp_buf jmp_target; static double current_rotation = 0; extern void check_gl_error (const char *type); void jwxyz_logv(Bool error, const char *fmt, va_list args) { __android_log_vprint(error ? ANDROID_LOG_ERROR : ANDROID_LOG_INFO, "xscreensaver", fmt, args); /* The idea here is that if the device/emulator dies shortly after a log message, then waiting here for a short while should increase the odds that adb logcat can pick up the message before everything blows up. Of course, doing this means dumping a ton of messages will slow things down significantly. */ # if 0 struct timespec ts; ts.tv_sec = 0; ts.tv_nsec = 25 * 1000000; nanosleep(&ts, NULL); # endif } /* Handle an abort on Android TODO: Test that Android handles aborts properly */ void jwxyz_abort (const char *fmt, ...) { /* Send error to Android device log */ if (!fmt || !*fmt) fmt = "abort"; va_list args; va_start (args, fmt); jwxyz_logv(True, fmt, args); va_end (args); char buf[10240]; va_start (args, fmt); vsprintf (buf, fmt, args); va_end (args); JNIEnv *env; (*global_jvm)->AttachCurrentThread (global_jvm, &env, NULL); if (! (*env)->ExceptionOccurred(env)) { // If there's already an exception queued, let's just go with that one. // Else, queue a Java exception to be thrown. (*env)->ThrowNew (env, (*env)->FindClass(env, "java/lang/RuntimeException"), buf); } // Nonlocal exit out of the jwxyz code. longjmp (jmp_target, 1); } /* We get to keep live references to Java classes in use because the VM can unload a class that isn't being used, which invalidates field and method IDs. https://docs.oracle.com/javase/7/docs/technotes/guides/jni/spec/design.html#wp17074 */ // #### only need one var I think static size_t classRefCount = 0; static jobject globalRefjwxyz, globalRefIterable, globalRefIterator, globalRefMapEntry; static jfieldID runningHackField; static jmethodID iterableIterator, iteratorHasNext, iteratorNext; static jmethodID entryGetKey, entryGetValue; static pthread_mutex_t mutg = PTHREAD_MUTEX_INITIALIZER; static void screenhack_do_fps (Display *, Window, fps_state *, void *); // Initialized OpenGL and runs the screenhack's init function. // static void doinit (jobject jwxyz_obj, struct running_hack *rh, JNIEnv *env, const struct function_table_entry *chosen, jint api, jobject defaults, jint w, jint h) { if (setjmp (jmp_target)) goto END; // Jump here from jwxyz_abort and return. progname = chosen->progname; rh->xsft = chosen->xsft; rh->api = api; rh->jni_env = env; rh->jobject = jwxyz_obj; // update this every time we call into C (*env)->GetJavaVM (env, &global_jvm); # undef ya_rand_init // This is the one and only place it is allowed ya_rand_init (0); Window wnd = (Window) calloc(1, sizeof(*wnd)); wnd->window.rh = rh; wnd->frame.width = w; wnd->frame.height = h; wnd->type = WINDOW; rh->egl_window_ctx = eglGetCurrentContext(); Assert(rh->egl_window_ctx != EGL_NO_CONTEXT, "doinit: EGL_NO_CONTEXT"); wnd->egl_surface = eglGetCurrentSurface(EGL_DRAW); Assert(eglGetCurrentSurface(EGL_READ) == wnd->egl_surface, "doinit: EGL_READ != EGL_DRAW"); rh->egl_display = eglGetCurrentDisplay(); Assert(rh->egl_display != EGL_NO_DISPLAY, "doinit: EGL_NO_DISPLAY"); EGLint config_attribs[3]; config_attribs[0] = EGL_CONFIG_ID; eglQueryContext(rh->egl_display, rh->egl_window_ctx, EGL_CONFIG_ID, &config_attribs[1]); config_attribs[2] = EGL_NONE; EGLint num_config; eglChooseConfig(rh->egl_display, config_attribs, &rh->egl_config, 1, &num_config); Assert(num_config == 1, "no EGL config chosen"); rh->egl_xlib_ctx = eglCreateContext(rh->egl_display, rh->egl_config, EGL_NO_CONTEXT, NULL); Assert(rh->egl_xlib_ctx != EGL_NO_CONTEXT, "doinit: EGL_NO_CONTEXT"); Assert(rh->egl_xlib_ctx != rh->egl_window_ctx, "Only one context here?!"); rh->window = wnd; rh->dpy = jwxyz_make_display(wnd); Assert(wnd == XRootWindow(rh->dpy, 0), "Wrong root window."); // TODO: Zero looks right, but double-check that is the right number progclass = rh->xsft->progclass; if ((*env)->ExceptionOccurred(env)) abort(); jwzgles_reset(); // This has to come before resource processing. It does not do graphics. if (rh->xsft->setup_cb) rh->xsft->setup_cb(rh->xsft, rh->xsft->setup_arg); if ((*env)->ExceptionOccurred(env)) abort(); // Load the defaults. // Unceremoniously stolen from [PrefsReader defaultsToDict:]. jclass c = (*env)->GetObjectClass (env, defaults); jmethodID m = (*env)->GetMethodID (env, c, "put", "(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;"); if (! m) abort(); if ((*env)->ExceptionOccurred(env)) abort(); const struct { const char *key, *val; } default_defaults[] = { { "doubleBuffer", "false" }, { "multiSample", "false" }, { "texFontCacheSize", "30" }, { "textMode", "date" }, { "textURL", "https://en.wikipedia.org/w/index.php?title=Special:NewPages&feed=rss" }, { "grabDesktopImages", "true" }, { "chooseRandomImages", "true" }, }; for (int i = 0; i < countof(default_defaults); i++) { const char *key = default_defaults[i].key; const char *val = default_defaults[i].val; char *key2 = malloc (strlen(progname) + strlen(key) + 2); strcpy (key2, progname); strcat (key2, "_"); strcat (key2, key); // defaults.put(key2, val); jstring jkey = (*env)->NewStringUTF (env, key2); jstring jval = (*env)->NewStringUTF (env, val); (*env)->CallObjectMethod (env, defaults, m, jkey, jval); (*env)->DeleteLocalRef (env, jkey); (*env)->DeleteLocalRef (env, jval); // Log ("default0: \"%s\" = \"%s\"", key2, val); free (key2); } const char *const *defs = rh->xsft->defaults; while (*defs) { char *line = strdup (*defs); char *key, *val; key = line; while (*key == '.' || *key == '*' || *key == ' ' || *key == '\t') key++; val = key; while (*val && *val != ':') val++; if (*val != ':') abort(); *val++ = 0; while (*val == ' ' || *val == '\t') val++; unsigned long L = strlen(val); while (L > 0 && (val[L-1] == ' ' || val[L-1] == '\t')) val[--L] = 0; char *key2 = malloc (strlen(progname) + strlen(key) + 2); strcpy (key2, progname); strcat (key2, "_"); strcat (key2, key); // defaults.put(key2, val); jstring jkey = (*env)->NewStringUTF (env, key2); jstring jval = (*env)->NewStringUTF (env, val); (*env)->CallObjectMethod (env, defaults, m, jkey, jval); (*env)->DeleteLocalRef (env, jkey); (*env)->DeleteLocalRef (env, jval); // Log ("default: \"%s\" = \"%s\"", key2, val); free (key2); free (line); defs++; } (*env)->DeleteLocalRef (env, c); if ((*env)->ExceptionOccurred(env)) abort(); END: ; } #undef DEBUG_FPS #ifdef DEBUG_FPS static double double_time (void) { struct timeval now; # ifdef GETTIMEOFDAY_TWO_ARGS struct timezone tzp; gettimeofday(&now, &tzp); # else gettimeofday(&now); # endif return (now.tv_sec + ((double) now.tv_usec * 0.000001)); } #endif // Animates a single frame of the current hack. // static jlong drawXScreenSaver (JNIEnv *env, struct running_hack *rh) { # ifdef DEBUG_FPS double fps0=0, fps1=0, fps2=0, fps3=0, fps4=0; fps0 = fps1 = fps2 = fps3 = fps4 = double_time(); # endif unsigned long delay = 0; if (setjmp (jmp_target)) goto END; // Jump here from jwxyz_abort and return. /* There is some kind of weird redisplay race condition between Settings and the launching hack: e.g., Abstractile does XClearWindow at init, but the screen is getting filled with random bits. So let's wait a few frames before really starting up. */ if (++rh->frame_count < 8) goto END; prepare_context(rh); # ifdef DEBUG_FPS fps1 = double_time(); # endif // The init function might do graphics (e.g. XClearWindow) so it has // to be run from inside onDrawFrame, not onSurfaceChanged. if (! rh->initted_p) { void *(*init_cb) (Display *, Window, void *) = (void *(*)(Display *, Window, void *)) rh->xsft->init_cb; unsigned int bg = get_pixel_resource (rh->dpy, 0, "background", "Background"); XSetWindowBackground (rh->dpy, rh->window, bg); XClearWindow (rh->dpy, rh->window); rh->closure = init_cb (rh->dpy, rh->window, rh->xsft->setup_arg); rh->initted_p = True; rh->ignore_rotation_p = (rh->api == API_XLIB && get_boolean_resource (rh->dpy, "ignoreRotation", "IgnoreRotation")); if (get_boolean_resource (rh->dpy, "doFPS", "DoFPS")) { rh->fpst = fps_init (rh->dpy, rh->window); if (! rh->xsft->fps_cb) rh->xsft->fps_cb = screenhack_do_fps; } else { rh->fpst = NULL; rh->xsft->fps_cb = 0; } if ((*env)->ExceptionOccurred(env)) abort(); } # ifdef DEBUG_FPS fps2 = double_time(); # endif // Apparently events don't come in on the drawing thread, and JNI flips // out. So we queue them there and run them here. send_queued_events (rh); # ifdef DEBUG_FPS fps3 = double_time(); # endif delay = rh->xsft->draw_cb(rh->dpy, rh->window, rh->closure); # ifdef DEBUG_FPS fps4 = double_time(); # endif if (rh->fpst && rh->xsft->fps_cb) rh->xsft->fps_cb (rh->dpy, rh->window, rh->fpst, rh->closure); END: ; # ifdef DEBUG_FPS Log("## FPS prep = %-6d init = %-6d events = %-6d draw = %-6d fps = %-6d\n", (int) ((fps1-fps0)*1000000), (int) ((fps2-fps1)*1000000), (int) ((fps3-fps2)*1000000), (int) ((fps4-fps3)*1000000), (int) ((double_time()-fps4)*1000000)); # endif return delay; } // Extracts the C structure that is stored in the jwxyz Java object. static struct running_hack * getRunningHack (JNIEnv *env, jobject thiz) { jlong result = (*env)->GetLongField (env, thiz, runningHackField); struct running_hack *rh = (struct running_hack *)(intptr_t)result; if (rh) rh->jobject = thiz; // update this every time we call into C return rh; } // Look up a class and mark it global in the provided variable. static jclass acquireClass (JNIEnv *env, const char *className, jobject *globalRef) { jclass clazz = (*env)->FindClass(env, className); *globalRef = (*env)->NewGlobalRef(env, clazz); return clazz; } /* Note: to find signature strings for native methods: cd ./project/xscreensaver/build/intermediates/classes/debug/ javap -s -p org.jwz.xscreensaver.jwxyz */ // Implementation of jwxyz's nativeInit Java method. // JNIEXPORT void JNICALL Java_org_jwz_xscreensaver_jwxyz_nativeInit (JNIEnv *env, jobject thiz, jstring jhack, jint api, jobject defaults, jint w, jint h) { pthread_mutex_lock(&mutg); struct running_hack *rh = calloc(1, sizeof(struct running_hack)); if ((*env)->ExceptionOccurred(env)) abort(); // #### simplify if (!classRefCount) { jclass classjwxyz = (*env)->GetObjectClass(env, thiz); globalRefjwxyz = (*env)->NewGlobalRef(env, classjwxyz); runningHackField = (*env)->GetFieldID (env, classjwxyz, "nativeRunningHackPtr", "J"); if ((*env)->ExceptionOccurred(env)) abort(); jclass classIterable = acquireClass(env, "java/lang/Iterable", &globalRefIterable); iterableIterator = (*env)->GetMethodID (env, classIterable, "iterator", "()Ljava/util/Iterator;"); if ((*env)->ExceptionOccurred(env)) abort(); jclass classIterator = acquireClass(env, "java/util/Iterator", &globalRefIterator); iteratorHasNext = (*env)->GetMethodID (env, classIterator, "hasNext", "()Z"); iteratorNext = (*env)->GetMethodID (env, classIterator, "next", "()Ljava/lang/Object;"); if ((*env)->ExceptionOccurred(env)) abort(); jclass classMapEntry = acquireClass(env, "java/util/Map$Entry", &globalRefMapEntry); entryGetKey = (*env)->GetMethodID (env, classMapEntry, "getKey", "()Ljava/lang/Object;"); entryGetValue = (*env)->GetMethodID (env, classMapEntry, "getValue", "()Ljava/lang/Object;"); if ((*env)->ExceptionOccurred(env)) abort(); } ++classRefCount; // Store the C struct into the Java object. (*env)->SetLongField(env, thiz, runningHackField, (jlong)(intptr_t)rh); // TODO: Sort the list so binary search works. const char *hack =(*env)->GetStringUTFChars(env, jhack, NULL); int chosen = 0; for (;;) { if (chosen == countof(function_table)) { Log ("Hack not found: %s", hack); abort(); } if (!strcmp(function_table[chosen].progname, hack)) break; chosen++; } (*env)->ReleaseStringUTFChars(env, jhack, hack); doinit (thiz, rh, env, &function_table[chosen], api, defaults, w, h); pthread_mutex_unlock(&mutg); } JNIEXPORT void JNICALL Java_org_jwz_xscreensaver_jwxyz_nativeResize (JNIEnv *env, jobject thiz, jint w, jint h, jdouble rot) { pthread_mutex_lock(&mutg); if (setjmp (jmp_target)) goto END; // Jump here from jwxyz_abort and return. current_rotation = rot; Log ("native rotation: %f", current_rotation); struct running_hack *rh = getRunningHack(env, thiz); Window wnd = rh->window; wnd->frame.x = 0; wnd->frame.y = 0; wnd->frame.width = w; wnd->frame.height = h; glViewport (0, 0, w, h); if (ignore_rotation_p(rh->dpy) && rot != 0 && rot != 180 && rot != -180) { int swap = w; w = h; h = swap; wnd->frame.width = w; wnd->frame.height = h; } jwxyz_window_resized (rh->dpy); if (rh->initted_p) rh->xsft->reshape_cb (rh->dpy, rh->window, rh->closure, wnd->frame.width, wnd->frame.height); if (rh->api == API_GL) { glMatrixMode (GL_PROJECTION); glRotatef (-rot, 0, 0, 1); glMatrixMode (GL_MODELVIEW); } END: pthread_mutex_unlock(&mutg); } JNIEXPORT jlong JNICALL Java_org_jwz_xscreensaver_jwxyz_nativeRender (JNIEnv *env, jobject thiz) { pthread_mutex_lock(&mutg); struct running_hack *rh = getRunningHack(env, thiz); jlong result = drawXScreenSaver(env, rh); pthread_mutex_unlock(&mutg); return result; } // TODO: Check Java side is calling this properly JNIEXPORT void JNICALL Java_org_jwz_xscreensaver_jwxyz_nativeDone (JNIEnv *env, jobject thiz) { pthread_mutex_lock(&mutg); if (setjmp (jmp_target)) goto END; // Jump here from jwxyz_abort and return. struct running_hack *rh = getRunningHack(env, thiz); prepare_context (rh); if (rh->initted_p) rh->xsft->free_cb (rh->dpy, rh->window, rh->closure); jwxyz_free_display(rh->dpy); free(rh); (*env)->SetLongField(env, thiz, runningHackField, 0); --classRefCount; if (!classRefCount) { (*env)->DeleteGlobalRef(env, globalRefjwxyz); (*env)->DeleteGlobalRef(env, globalRefIterable); (*env)->DeleteGlobalRef(env, globalRefIterator); (*env)->DeleteGlobalRef(env, globalRefMapEntry); } END: pthread_mutex_unlock(&mutg); } static int send_event (struct running_hack *rh, XEvent *e) { // Assumes mutex is locked and context is prepared int *xP = 0, *yP = 0; switch (e->xany.type) { case ButtonPress: case ButtonRelease: xP = &e->xbutton.x; yP = &e->xbutton.y; break; case MotionNotify: xP = &e->xmotion.x; yP = &e->xmotion.y; break; } // Rotate the coordinates in the events to match the pixels. if (xP) { if (ignore_rotation_p (rh->dpy)) { Window win = XRootWindow (rh->dpy, 0); int w = win->frame.width; int h = win->frame.height; int swap; switch ((int) current_rotation) { case 180: case -180: // #### untested *xP = w - *xP; *yP = h - *yP; break; case 90: case -270: swap = *xP; *xP = *yP; *yP = swap; *yP = h - *yP; break; case -90: case 270: // #### untested swap = *xP; *xP = *yP; *yP = swap; *xP = w - *xP; break; } } rh->window->window.last_mouse_x = *xP; rh->window->window.last_mouse_y = *yP; } return (rh->xsft->event_cb ? rh->xsft->event_cb (rh->dpy, rh->window, rh->closure, e) : 0); } static void send_queued_events (struct running_hack *rh) { struct event_queue *event, *next; if (! rh->event_queue) return; for (event = rh->event_queue, next = event->next; event; event = next, next = (event ? event->next : 0)) { if (! send_event (rh, &event->event)) { // #### flash the screen or something } free (event); } rh->event_queue = 0; } static void queue_event (JNIEnv *env, jobject thiz, XEvent *e) { pthread_mutex_lock (&mutg); struct running_hack *rh = getRunningHack (env, thiz); struct event_queue *q = (struct event_queue *) malloc (sizeof(*q)); memcpy (&q->event, e, sizeof(*e)); q->next = 0; // Put it at the end. struct event_queue *oq; for (oq = rh->event_queue; oq && oq->next; oq = oq->next) ; if (oq) oq->next = q; else rh->event_queue = q; pthread_mutex_unlock (&mutg); } JNIEXPORT void JNICALL Java_org_jwz_xscreensaver_jwxyz_sendButtonEvent (JNIEnv *env, jobject thiz, int x, int y, jboolean down) { XEvent e; memset (&e, 0, sizeof(e)); e.xany.type = (down ? ButtonPress : ButtonRelease); e.xbutton.button = Button1; e.xbutton.x = x; e.xbutton.y = y; queue_event (env, thiz, &e); } JNIEXPORT void JNICALL Java_org_jwz_xscreensaver_jwxyz_sendMotionEvent (JNIEnv *env, jobject thiz, int x, int y) { XEvent e; memset (&e, 0, sizeof(e)); e.xany.type = MotionNotify; e.xmotion.x = x; e.xmotion.y = y; queue_event (env, thiz, &e); } JNIEXPORT void JNICALL Java_org_jwz_xscreensaver_jwxyz_sendKeyEvent (JNIEnv *env, jobject thiz, jboolean down_p, int code, int mods) { XEvent e; memset (&e, 0, sizeof(e)); e.xkey.keycode = code; e.xkey.state = code; e.xany.type = (down_p ? KeyPress : KeyRelease); queue_event (env, thiz, &e); e.xany.type = KeyRelease; queue_event (env, thiz, &e); } /*************************************************************************** Backend functions for jwxyz-gl.c */ void prepare_context (struct running_hack *rh) { Window w = rh->window; eglMakeCurrent (rh->egl_display, w->egl_surface, w->egl_surface, rh->egl_window_ctx); rh->current_drawable = rh->window; } void jwxyz_bind_drawable (Display *dpy, Window w, Drawable d) { struct running_hack *rh = w->window.rh; JNIEnv *env = w->window.rh->jni_env; if ((*env)->ExceptionOccurred(env)) abort(); if (rh->current_drawable != d) { EGLContext ctx = d == w ? rh->egl_window_ctx : rh->egl_xlib_ctx; eglMakeCurrent (rh->egl_display, d->egl_surface, d->egl_surface, ctx); // Log("%p %p %p %p %p", rh->egl_display, d->egl_surface, ctx, w, d); rh->current_drawable = d; jwxyz_assert_gl (); if (d != w) { glViewport (0, 0, d->frame.width, d->frame.height); jwxyz_set_matrices (dpy, d->frame.width, d->frame.height, False); } } } const XRectangle * jwxyz_frame (Drawable d) { return &d->frame; } unsigned int jwxyz_drawable_depth (Drawable d) { return (d->type == WINDOW ? visual_depth (NULL, NULL) : d->pixmap.depth); } void jwxyz_get_pos (Window w, XPoint *xvpos, XPoint *xp) { xvpos->x = 0; xvpos->y = 0; if (xp) { xp->x = w->window.last_mouse_x; xp->y = w->window.last_mouse_y; } } static void screenhack_do_fps (Display *dpy, Window w, fps_state *fpst, void *closure) { fps_compute (fpst, 0, -1); fps_draw (fpst); } void jwxyz_copy_area (Display *dpy, Drawable src, Drawable dst, GC gc, int src_x, int src_y, unsigned int width, unsigned int height, int dst_x, int dst_y) { #if 0 // Hilarious display corruption ahoy! jwxyz_gl_copy_area_copy_tex_image (dpy, src, dst, gc, src_x, src_y, width, height, dst_x, dst_y); #else jwxyz_gl_copy_area_read_pixels (dpy, src, dst, gc, src_x, src_y, width, height, dst_x, dst_y); #endif jwxyz_assert_gl (); } void jwxyz_assert_drawable (Window main_window, Drawable d) { check_gl_error("jwxyz_assert_drawable"); } void jwxyz_assert_gl (void) { check_gl_error("jwxyz_assert_gl"); } Pixmap XCreatePixmap (Display *dpy, Drawable d, unsigned int width, unsigned int height, unsigned int depth) { // See also: // https://web.archive.org/web/20140213220709/http://blog.vlad1.com/2010/07/01/how-to-go-mad-while-trying-to-render-to-a-texture/ // https://software.intel.com/en-us/articles/using-opengl-es-to-accelerate-apps-with-legacy-2d-guis // https://www.khronos.org/registry/egl/extensions/ANDROID/EGL_ANDROID_image_native_buffer.txt Window win = XRootWindow(dpy, 0); Pixmap p = malloc(sizeof(*p)); p->type = PIXMAP; p->frame.x = 0; p->frame.y = 0; p->frame.width = width; p->frame.height = height; Assert(depth == 1 || depth == visual_depth(NULL, NULL), "XCreatePixmap: bad depth"); p->pixmap.depth = depth; // Native EGL is Android 2.3/API 9. EGL in Java is available from API 1. struct running_hack *rh = win->window.rh; EGLint attribs[5]; attribs[0] = EGL_WIDTH; attribs[1] = width; attribs[2] = EGL_HEIGHT; attribs[3] = height; attribs[4] = EGL_NONE; p->egl_surface = eglCreatePbufferSurface(rh->egl_display, rh->egl_config, attribs); Assert(p->egl_surface != EGL_NO_SURFACE, "XCreatePixmap: got EGL_NO_SURFACE"); jwxyz_bind_drawable (dpy, win, p); glClearColor (frand(1), frand(1), frand(1), 0); glClear (GL_COLOR_BUFFER_BIT); return p; } int XFreePixmap (Display *d, Pixmap p) { struct running_hack *rh = XRootWindow(d, 0)->window.rh; if (rh->current_drawable == p) rh->current_drawable = NULL; eglDestroySurface(rh->egl_display, p->egl_surface); free (p); return 0; } double current_device_rotation (void) { return current_rotation; } Bool ignore_rotation_p (Display *dpy) { struct running_hack *rh = XRootWindow(dpy, 0)->window.rh; return rh->ignore_rotation_p; } static char * jstring_dup (JNIEnv *env, jstring str) { Assert (str, "expected jstring, not null"); const char *cstr = (*env)->GetStringUTFChars (env, str, 0); size_t len = (*env)->GetStringUTFLength (env, str) + 1; char *result = malloc (len); if (result) { memcpy (result, cstr, len); } (*env)->ReleaseStringUTFChars (env, str, cstr); return result; } char * get_string_resource (Display *dpy, char *name, char *class) { Window window = RootWindow (dpy, 0); JNIEnv *env = window->window.rh->jni_env; jobject obj = window->window.rh->jobject; if ((*env)->ExceptionOccurred(env)) abort(); jstring jstr = (*env)->NewStringUTF (env, name); jclass c = (*env)->GetObjectClass (env, obj); jmethodID m = (*env)->GetMethodID (env, c, "getStringResource", "(Ljava/lang/String;)Ljava/lang/String;"); if ((*env)->ExceptionOccurred(env)) abort(); jstring jvalue = (m ? (*env)->CallObjectMethod (env, obj, m, jstr) : NULL); (*env)->DeleteLocalRef (env, c); (*env)->DeleteLocalRef (env, jstr); char *ret = 0; if (jvalue) ret = jstring_dup (env, jvalue); Log("pref %s = %s", name, (ret ? ret : "(null)")); return ret; } /* Returns the contents of the URL. */ char * textclient_mobile_url_string (Display *dpy, const char *url) { Window window = RootWindow (dpy, 0); JNIEnv *env = window->window.rh->jni_env; jobject obj = window->window.rh->jobject; jstring jstr = (*env)->NewStringUTF (env, url); jclass c = (*env)->GetObjectClass (env, obj); jmethodID m = (*env)->GetMethodID (env, c, "loadURL", "(Ljava/lang/String;)Ljava/nio/ByteBuffer;"); if ((*env)->ExceptionOccurred(env)) abort(); jobject buf = (m ? (*env)->CallObjectMethod (env, obj, m, jstr) : NULL); (*env)->DeleteLocalRef (env, c); (*env)->DeleteLocalRef (env, jstr); char *body = (char *) (buf ? (*env)->GetDirectBufferAddress (env, buf) : 0); char *body2; if (body) { int L = (*env)->GetDirectBufferCapacity (env, buf); body2 = malloc (L + 1); memcpy (body2, body, L); body2[L] = 0; } else { body2 = strdup ("ERROR"); } if (buf) (*env)->DeleteLocalRef (env, buf); return body2; } void * jwxyz_load_native_font (Display *dpy, const char *name, char **native_name_ret, float *size_ret, int *ascent_ret, int *descent_ret) { Window window = RootWindow (dpy, 0); JNIEnv *env = window->window.rh->jni_env; jobject obj = window->window.rh->jobject; jstring jstr = (*env)->NewStringUTF (env, name); jclass c = (*env)->GetObjectClass (env, obj); jmethodID m = (*env)->GetMethodID (env, c, "loadFont", "(Ljava/lang/String;)[Ljava/lang/Object;"); if ((*env)->ExceptionOccurred(env)) abort(); jobjectArray array = (m ? (*env)->CallObjectMethod (env, obj, m, jstr) : NULL); (*env)->DeleteLocalRef (env, c); (*env)->DeleteLocalRef (env, jstr); jstr = 0; if (array) { jobject font = (*env)->GetObjectArrayElement (env, array, 0); jobject name = (jstring) ((*env)->GetObjectArrayElement (env, array, 1)); jobject size = (*env)->GetObjectArrayElement (env, array, 2); jobject asc = (*env)->GetObjectArrayElement (env, array, 3); jobject desc = (*env)->GetObjectArrayElement (env, array, 4); if ((*env)->ExceptionOccurred(env)) abort(); *native_name_ret = jstring_dup (env, name); jobject paint = (*env)->NewGlobalRef (env, font); if ((*env)->ExceptionOccurred(env)) abort(); c = (*env)->GetObjectClass(env, size); m = (*env)->GetMethodID (env, c, "floatValue", "()F"); if ((*env)->ExceptionOccurred(env)) abort(); *size_ret = (*env)->CallFloatMethod (env, size, m); *ascent_ret = (int) (*env)->CallFloatMethod (env, asc, m); *descent_ret = (int) (*env)->CallFloatMethod (env, desc, m); return (void *) paint; } else { return 0; } } void jwxyz_release_native_font (Display *dpy, void *native_font) { Window window = RootWindow (dpy, 0); JNIEnv *env = window->window.rh->jni_env; if ((*env)->ExceptionOccurred(env)) abort(); (*env)->DeleteGlobalRef (env, (jobject) native_font); if ((*env)->ExceptionOccurred(env)) abort(); } /* If the local reference table fills up, use this to figure out where you missed a call to DeleteLocalRef. */ /* static void dump_reference_tables(JNIEnv *env) { jclass c = (*env)->FindClass(env, "dalvik/system/VMDebug"); jmethodID m = (*env)->GetStaticMethodID (env, c, "dumpReferenceTables", "()V"); (*env)->CallStaticVoidMethod (env, c, m); (*env)->DeleteLocalRef (env, c); } */ // Returns the metrics of the multi-character, single-line UTF8 or Latin1 // string. If pixmap_ret is provided, also renders the text. // void jwxyz_render_text (Display *dpy, void *native_font, const char *str, size_t len, int utf8, XCharStruct *cs, char **pixmap_ret) { Window window = RootWindow (dpy, 0); JNIEnv *env = window->window.rh->jni_env; jobject obj = window->window.rh->jobject; char *s2; if (utf8) { s2 = malloc (len + 1); memcpy (s2, str, len); s2[len] = 0; } else { // Convert Latin1 to UTF8 s2 = malloc (len * 2 + 1); unsigned char *s3 = (unsigned char *) s2; int i; for (i = 0; i < len; i++) { unsigned char c = ((unsigned char *) str)[i]; if (! (c & 0x80)) { *s3++ = c; } else { *s3++ = (0xC0 | (0x03 & (c >> 6))); *s3++ = (0x80 | (0x3F & c)); } } *s3 = 0; } jstring jstr = (*env)->NewStringUTF (env, s2); jclass c = (*env)->GetObjectClass (env, obj); jmethodID m = (*env)->GetMethodID (env, c, "renderText", "(Landroid/graphics/Paint;Ljava/lang/String;Z)Ljava/nio/ByteBuffer;"); if ((*env)->ExceptionOccurred(env)) abort(); jobject buf = (m ? (*env)->CallObjectMethod (env, obj, m, (jobject) native_font, jstr, (pixmap_ret ? JNI_TRUE : JNI_FALSE)) : NULL); (*env)->DeleteLocalRef (env, c); (*env)->DeleteLocalRef (env, jstr); free (s2); if ((*env)->ExceptionOccurred(env)) abort(); unsigned char *bits = (unsigned char *) (buf ? (*env)->GetDirectBufferAddress (env, buf) : 0); if (bits) { int i = 0; int L = (*env)->GetDirectBufferCapacity (env, buf); if (L < 10) abort(); cs->lbearing = (bits[i] << 8) | (bits[i+1] & 0xFF); i += 2; cs->rbearing = (bits[i] << 8) | (bits[i+1] & 0xFF); i += 2; cs->width = (bits[i] << 8) | (bits[i+1] & 0xFF); i += 2; cs->ascent = (bits[i] << 8) | (bits[i+1] & 0xFF); i += 2; cs->descent = (bits[i] << 8) | (bits[i+1] & 0xFF); i += 2; if (pixmap_ret) { char *pix = malloc (L - i); if (! pix) abort(); memcpy (pix, bits + i, L - i); *pixmap_ret = pix; } } else { memset (cs, 0, sizeof(*cs)); if (pixmap_ret) *pixmap_ret = 0; } if (buf) (*env)->DeleteLocalRef (env, buf); } char * jwxyz_unicode_character_name (Display *dpy, Font fid, unsigned long uc) { JNIEnv *env = XRootWindow (dpy, 0)->window.rh->jni_env; /* FindClass doesn't like to load classes if GetStaticMethodID fails. Huh? */ jclass c = (*env)->FindClass (env, "java/lang/Character"), c2 = (*env)->FindClass (env, "java/lang/NoSuchMethodError"); if ((*env)->ExceptionOccurred(env)) abort(); jmethodID m = (*env)->GetStaticMethodID ( env, c, "getName", "(I)Ljava/lang/String;"); jthrowable exc = (*env)->ExceptionOccurred(env); if (exc) { if ((*env)->IsAssignableFrom(env, (*env)->GetObjectClass(env, exc), c2)) { (*env)->ExceptionClear (env); Assert (!m, "jwxyz_unicode_character_name: m?"); } else { abort(); } } char *ret = NULL; if (m) { jstring name = (*env)->CallStaticObjectMethod (env, c, m, (jint)uc); if (name) ret = jstring_dup (env, name); } if (!ret) { asprintf(&ret, "U+%.4lX", uc); } return ret; } /* Called from utils/grabclient.c */ char * jwxyz_load_random_image (Display *dpy, int *width_ret, int *height_ret, char **name_ret) { Window window = RootWindow (dpy, 0); struct running_hack *rh = window->window.rh; JNIEnv *env = rh->jni_env; jobject obj = rh->jobject; Bool images_p = get_boolean_resource (rh->dpy, "chooseRandomImages", "ChooseRandomImages"); Bool grab_p = get_boolean_resource (rh->dpy, "grabDesktopImages", "GrabDesktopImages"); Bool rotate_p = get_boolean_resource (rh->dpy, "rotateImages", "RotateImages"); if (!images_p && !grab_p) return 0; if (grab_p && images_p) { grab_p = !(random() & 5); /* if both, screenshot 1/5th of the time */ images_p = !grab_p; } jclass c = (*env)->GetObjectClass (env, obj); jmethodID m = (*env)->GetMethodID (env, c, (grab_p ? "getScreenshot" : "loadRandomImage"), "(IIZ)Ljava/nio/ByteBuffer;"); if ((*env)->ExceptionOccurred(env)) abort(); jobject buf = (m ? (*env)->CallObjectMethod (env, obj, m, window->frame.width, window->frame.height, (rotate_p ? JNI_TRUE : JNI_FALSE)) : NULL); (*env)->DeleteLocalRef (env, c); unsigned char *bits = (unsigned char *) (buf ? (*env)->GetDirectBufferAddress (env, buf) : 0); if (bits) { int i = 0; int L = (*env)->GetDirectBufferCapacity (env, buf); if (L < 100) abort(); int width = (bits[i] << 8) | (bits[i+1] & 0xFF); i += 2; int height = (bits[i] << 8) | (bits[i+1] & 0xFF); i += 2; char *name = (char *) bits + i; int L2 = strlen (name); i += L2 + 1; if (width * height * 4 != L - i) abort(); char *pix = malloc (L - i); if (! pix) abort(); memcpy (pix, bits + i, L - i); *width_ret = width; *height_ret = height; *name_ret = strdup (name); return (char *) pix; } if (buf) (*env)->DeleteLocalRef (env, buf); return 0; } #endif /* HAVE_ANDROID */ xscreensaver-5.36/jwxyz/jwxyz-cocoa.m000664 000767 000024 00000041220 12774322552 017776 0ustar00jwzstaff000000 000000 /* xscreensaver, Copyright (c) 1991-2016 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. */ /* JWXYZ Is Not Xlib. But it's a bunch of function definitions that bear some resemblance to Xlib and that do Cocoa-ish or OpenGL-ish things that bear some resemblance to the things that Xlib might have done. This code is used by both the original jwxyz.m and the new jwxyz-gl.c. */ #import "jwxyzI.h" #import "jwxyz-cocoa.h" #include #ifdef USE_IPHONE # import # import # define NSOpenGLContext EAGLContext #endif /* OS X/iOS-specific JWXYZ implementation. */ void jwxyz_logv (Bool error, const char *fmt, va_list args) { vfprintf (stderr, fmt, args); fputc ('\n', stderr); } /* 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 } const XRectangle * jwxyz_frame (Drawable d) { return &d->frame; } unsigned int jwxyz_drawable_depth (Drawable d) { return (d->type == WINDOW ? visual_depth (NULL, NULL) : d->pixmap.depth); } void jwxyz_get_pos (Window w, XPoint *xvpos, XPoint *xp) { # ifdef USE_IPHONE xvpos->x = 0; xvpos->y = 0; if (xp) { xp->x = w->window.last_mouse_x; xp->y = w->window.last_mouse_y; } # else // !USE_IPHONE NSWindow *nsw = [w->window.view window]; // get bottom left of window on screen, from bottom left # if (MAC_OS_X_VERSION_MAX_ALLOWED > MAC_OS_X_VERSION_10_6) NSRect rr1 = [w->window.view convertRect: NSMakeRect(0,0,0,0) toView:nil]; NSRect rr2 = [nsw convertRectToScreen: rr1]; NSPoint wpos = NSMakePoint (rr2.origin.x - rr1.origin.x, rr2.origin.y - rr1.origin.y); # else // deprecated as of 10.7 NSPoint wpos = [nsw convertBaseToScreen: NSMakePoint(0,0)]; # endif // get bottom left of view on window, from bottom left NSPoint vpos; vpos.x = vpos.y = 0; vpos = [w->window.view convertPoint:vpos toView:[nsw contentView]]; // get bottom left of view on screen, from bottom left vpos.x += wpos.x; vpos.y += wpos.y; // get top left of view on screen, from bottom left vpos.y += w->frame.height; // get top left of view on screen, from top left NSArray *screens = [NSScreen screens]; NSScreen *screen = (screens && [screens count] > 0 ? [screens objectAtIndex:0] : [NSScreen mainScreen]); NSRect srect = [screen frame]; vpos.y = srect.size.height - vpos.y; xvpos->x = vpos.x; xvpos->y = vpos.y; if (xp) { // get the mouse position on window, from bottom left NSEvent *e = [NSApp currentEvent]; NSPoint p = [e locationInWindow]; // get mouse position on screen, from bottom left p.x += wpos.x; p.y += wpos.y; // get mouse position on screen, from top left p.y = srect.size.height - p.y; xp->x = (int) p.x; xp->y = (int) p.y; } # endif // !USE_IPHONE } #ifdef USE_IPHONE void check_framebuffer_status (void) { int err = glCheckFramebufferStatusOES (GL_FRAMEBUFFER_OES); switch (err) { case GL_FRAMEBUFFER_COMPLETE_OES: break; case GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT_OES: Assert (0, "framebuffer incomplete attachment"); break; case GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT_OES: Assert (0, "framebuffer incomplete missing attachment"); break; case GL_FRAMEBUFFER_INCOMPLETE_DIMENSIONS_OES: Assert (0, "framebuffer incomplete dimensions"); break; case GL_FRAMEBUFFER_INCOMPLETE_FORMATS_OES: Assert (0, "framebuffer incomplete formats"); break; case GL_FRAMEBUFFER_UNSUPPORTED_OES: Assert (0, "framebuffer unsupported"); break; /* case GL_FRAMEBUFFER_UNDEFINED: Assert (0, "framebuffer undefined"); break; case GL_FRAMEBUFFER_INCOMPLETE_DRAW_BUFFER: Assert (0, "framebuffer incomplete draw buffer"); break; case GL_FRAMEBUFFER_INCOMPLETE_READ_BUFFER: Assert (0, "framebuffer incomplete read buffer"); break; case GL_FRAMEBUFFER_INCOMPLETE_MULTISAMPLE: Assert (0, "framebuffer incomplete multisample"); break; case GL_FRAMEBUFFER_INCOMPLETE_LAYER_TARGETS: Assert (0, "framebuffer incomplete layer targets"); break; */ default: NSCAssert (0, @"framebuffer incomplete, unknown error 0x%04X", err); break; } } void create_framebuffer (GLuint *gl_framebuffer, GLuint *gl_renderbuffer) { glGenFramebuffersOES (1, gl_framebuffer); glBindFramebufferOES (GL_FRAMEBUFFER_OES, *gl_framebuffer); glGenRenderbuffersOES (1, gl_renderbuffer); glBindRenderbufferOES (GL_RENDERBUFFER_OES, *gl_renderbuffer); } #endif // USE_IPHONE #if defined JWXYZ_QUARTZ /* Pushes a GC context; sets Fill and Stroke colors to the background color. */ static void push_bg_gc (Display *dpy, Drawable d, GC gc, Bool fill_p) { XGCValues *gcv = jwxyz_gc_gcv (gc); push_color_gc (dpy, d, gc, gcv->background, gcv->antialias_p, fill_p); } void jwxyz_copy_area (Display *dpy, Drawable src, Drawable dst, GC gc, int src_x, int src_y, unsigned int width, unsigned int height, int dst_x, int dst_y) { XRectangle src_frame = src->frame, dst_frame = dst->frame; XGCValues *gcv = jwxyz_gc_gcv (gc); BOOL mask_p = src->type == PIXMAP && src->pixmap.depth == 1; /* If we're copying from a bitmap to a bitmap, and there's nothing funny going on with clipping masks or depths or anything, optimize it by just doing a memcpy instead of going through a CGI. */ if (gcv->function == GXcopy && !gcv->clip_mask && jwxyz_drawable_depth (src) == jwxyz_drawable_depth (dst)) { Assert(!src_frame.x && !src_frame.y && !dst_frame.x && !dst_frame.y, "unexpected non-zero origin"); ptrdiff_t src_pitch = CGBitmapContextGetBytesPerRow(src->cgc); ptrdiff_t dst_pitch = CGBitmapContextGetBytesPerRow(dst->cgc); char *src_data = seek_xy (CGBitmapContextGetData (src->cgc), src_pitch, src_x, src_y); char *dst_data = seek_xy (CGBitmapContextGetData (dst->cgc), dst_pitch, dst_x, dst_y); size_t bytes = width * 4; if (src == dst && dst_y > src_y) { // Copy upwards if the areas might overlap. src_data += src_pitch * (height - 1); dst_data += dst_pitch * (height - 1); src_pitch = -src_pitch; dst_pitch = -dst_pitch; } while (height) { // memcpy is an alias for memmove on OS X. memmove(dst_data, src_data, bytes); src_data += src_pitch; dst_data += dst_pitch; --height; } } else { CGRect src_rect = CGRectMake(src_x, src_y, width, height), dst_rect = CGRectMake(dst_x, dst_y, width, height); src_rect.origin = map_point (src, src_rect.origin.x, src_rect.origin.y + src_rect.size.height); dst_rect.origin = map_point (dst, dst_rect.origin.x, dst_rect.origin.y + src_rect.size.height); NSObject *releaseme = 0; CGImageRef cgi; BOOL free_cgi_p = NO; // We must first copy the bits to an intermediary CGImage object, then // copy that to the destination drawable's CGContext. // // First we get a CGImage out of the pixmap CGContext -- it's the whole // pixmap, but it presumably shares the data pointer instead of copying // it. We then cache that CGImage it inside the Pixmap object. Note: // invalidate_drawable_cache() must be called to discard this any time a // modification is made to the pixmap, or we'll end up re-using old bits. // if (!src->cgi) src->cgi = CGBitmapContextCreateImage (src->cgc); cgi = src->cgi; // if doing a sub-rect, trim it down. if (src_rect.origin.x != src_frame.x || src_rect.origin.y != src_frame.y || src_rect.size.width != src_frame.width || src_rect.size.height != src_frame.height) { // #### I don't understand why this is needed... src_rect.origin.y = (src_frame.height - src_rect.size.height - src_rect.origin.y); // This does not copy image data, so it should be fast. cgi = CGImageCreateWithImageInRect (cgi, src_rect); free_cgi_p = YES; } CGContextRef cgc = dst->cgc; if (mask_p) { // src depth == 1 push_bg_gc (dpy, dst, gc, YES); // fill the destination rectangle with solid background... CGContextFillRect (cgc, dst_rect); Assert (cgc, "no CGC with 1-bit XCopyArea"); // then fill in a solid rectangle of the fg color, using the image as an // alpha mask. (the image has only values of BlackPixel or WhitePixel.) set_color (dpy, cgc, gcv->foreground, jwxyz_gc_depth (gc), gcv->alpha_allowed_p, YES); CGContextClipToMask (cgc, dst_rect, cgi); CGContextFillRect (cgc, dst_rect); pop_gc (dst, gc); } else { // src depth > 1 push_gc (dst, gc); // copy the CGImage onto the destination CGContext //Assert(CGImageGetColorSpace(cgi) == dpy->colorspace, "bad colorspace"); CGContextDrawImage (cgc, dst_rect, cgi); pop_gc (dst, gc); } if (free_cgi_p) CGImageRelease (cgi); if (releaseme) [releaseme release]; } invalidate_drawable_cache (dst); } #elif defined JWXYZ_GL /* Warning! The JWXYZ_GL code here is experimental and provisional and not at all ready for prime time. Please be careful. */ void jwxyz_copy_area (Display *dpy, Drawable src, Drawable dst, GC gc, int src_x, int src_y, unsigned int width, unsigned int height, int dst_x, int dst_y) { /* TODO: - glCopyPixels if src == dst - Pixel buffer copying - APPLE_framebuffer_multisample has ResolveMultisampleFramebufferAPPLE, which is like a blit. */ /* Strange and ugly flickering when going the glCopyTexImage2D route on OS X. (Early 2009 Mac mini, OS X 10.10) */ # ifdef USE_IPHONE jwxyz_gl_copy_area_copy_tex_image (dpy, src, dst, gc, src_x, src_y, width, height, dst_x, dst_y); # else // !USE_IPHONE jwxyz_gl_copy_area_read_pixels (dpy, src, dst, gc, src_x, src_y, width, height, dst_x, dst_y); # endif // !USE_IPHONE jwxyz_assert_gl (); } void jwxyz_assert_gl () { // This is like check_gl_error, except this happens for debug builds only. #ifndef __OPTIMIZE__ if([NSOpenGLContext currentContext]) { // glFinish here drops FPS into the toilet. It might need to be on if // something goes wrong. // glFinish(); GLenum error = glGetError(); Assert (!error, "jwxyz_assert_gl: OpenGL error"); } #endif // !__OPTIMIZE__ } void jwxyz_assert_drawable (Window main_window, Drawable d) { #if !defined USE_IPHONE && !defined __OPTIMIZE__ XScreenSaverView *view = main_window->window.view; NSOpenGLContext *ogl_ctx = [view oglContext]; if (d->type == WINDOW) { Assert([ogl_ctx view] == view, "jwxyz_assert_display: ogl_ctx view not set!"); } @try { /* Assert([d->ctx isKindOfClass:[NSOpenGLContext class]], "Not a context."); */ Class c = [ogl_ctx class]; Assert([c isSubclassOfClass:[NSOpenGLContext class]], "Not a context."); // [d->ctx makeCurrentContext]; } @catch (NSException *exception) { perror([[exception reason] UTF8String]); abort(); } #endif // !USE_IPHONE && !__OPTIMIZE__ } void jwxyz_bind_drawable (Window main_window, Drawable d) { /* Windows and Pixmaps need to use different contexts with OpenGL screenhacks, because an OpenGL screenhack sets state in an arbitrary fashion, but jwxyz-gl.c has its own ideas w.r.t. OpenGL state. On iOS, all pixmaps can use the same context with different FBOs. Which is nice. */ /* OpenGL screenhacks in general won't be drawing on the Window, but they can and will draw on a Pixmap -- but an OpenGL call following an Xlib call won't be able to fix the fact that it's drawing offscreen. */ /* EXT_direct_state_access might be appropriate, but it's apparently not available on Mac OS X. */ // jwxyz_assert_display (dpy); jwxyz_assert_drawable (main_window, main_window); jwxyz_assert_gl (); jwxyz_assert_drawable (main_window, d); #if defined USE_IPHONE && !defined __OPTIMIZE__ Drawable current_drawable = main_window->window.current_drawable; Assert (!current_drawable || current_drawable->ogl_ctx == [EAGLContext currentContext], "bind_drawable: Wrong context."); if (current_drawable) { GLint framebuffer; glGetIntegerv (GL_FRAMEBUFFER_BINDING_OES, &framebuffer); Assert (framebuffer == current_drawable->gl_framebuffer, "bind_drawable: Wrong framebuffer."); } #endif if (main_window->window.current_drawable != d) { main_window->window.current_drawable = d; /* Doing this repeatedly is probably not OK performance-wise. Probably. */ #ifndef USE_IPHONE [d->ogl_ctx makeCurrentContext]; #else [EAGLContext setCurrentContext:d->ogl_ctx]; glBindFramebufferOES(GL_FRAMEBUFFER_OES, d->gl_framebuffer); if (d->type == PIXMAP) { glViewport (0, 0, d->frame.width, d->frame.height); jwxyz_set_matrices (d->frame.width, d->frame.height); } #endif } jwxyz_assert_gl (); } Pixmap XCreatePixmap (Display *dpy, Drawable d, unsigned int width, unsigned int height, unsigned int depth) { Pixmap p = (Pixmap) calloc (1, sizeof(*p)); p->type = PIXMAP; p->frame.width = width; p->frame.height = height; p->pixmap.depth = depth; Assert (depth == 1 || depth == 32, "XCreatePixmap: depth must be 32"); /* TODO: If Pixel buffers are not supported, do something about it. */ Window w = XRootWindow (dpy, 0); # ifndef USE_IPHONE p->ogl_ctx = [[NSOpenGLContext alloc] initWithFormat:w->window.pixfmt shareContext:w->ogl_ctx]; CFRetain (p->ogl_ctx); [p->ogl_ctx makeCurrentContext]; // This is indeed necessary. p->pixmap.gl_pbuffer = [[NSOpenGLPixelBuffer alloc] /* TODO: Only if there are rectangluar textures. */ initWithTextureTarget:GL_TEXTURE_RECTANGLE_EXT /* TODO: Make sure GL_RGBA isn't better. */ textureInternalFormat:GL_RGB textureMaxMipMapLevel:0 pixelsWide:width pixelsHigh:height]; CFRetain (p->pixmap.gl_pbuffer); [p->ogl_ctx setPixelBuffer:p->pixmap.gl_pbuffer cubeMapFace:0 mipMapLevel:0 currentVirtualScreen:w->window.virtual_screen]; # else // USE_IPHONE p->ogl_ctx = w->window.ogl_ctx_pixmap; [EAGLContext setCurrentContext:p->ogl_ctx]; create_framebuffer (&p->gl_framebuffer, &p->gl_renderbuffer); glRenderbufferStorageOES (GL_RENDERBUFFER_OES, GL_RGBA8_OES, width, height); glFramebufferRenderbufferOES (GL_FRAMEBUFFER_OES, GL_COLOR_ATTACHMENT0_OES, GL_RENDERBUFFER_OES, p->gl_renderbuffer); check_framebuffer_status (); glBindFramebufferOES(GL_FRAMEBUFFER_OES, p->gl_framebuffer); # endif // USE_IPHONE w->window.current_drawable = p; glViewport (0, 0, width, height); jwxyz_set_matrices (width, height); # ifndef __OPTIMIZE__ glClearColor (frand(1), frand(1), frand(1), 0); glClear (GL_COLOR_BUFFER_BIT); # endif return p; } int XFreePixmap (Display *d, Pixmap p) { Assert (p && p->type == PIXMAP, "not a pixmap"); Window w = RootWindow (d, 0); # ifndef USE_IPHONE CFRelease (p->ogl_ctx); [p->ogl_ctx release]; CFRelease (p->pixmap.gl_pbuffer); [p->pixmap.gl_pbuffer release]; # else // USE_IPHONE glDeleteRenderbuffersOES (1, &p->gl_renderbuffer); glDeleteFramebuffersOES (1, &p->gl_framebuffer); # endif // USE_IPHONE if (w->window.current_drawable == p) { w->window.current_drawable = NULL; } free (p); return 0; } #endif // JWXYZ_GL xscreensaver-5.36/jwxyz/jwxyz-common.c000664 000767 000024 00000062071 12774322552 020177 0ustar00jwzstaff000000 000000 /* xscreensaver, Copyright (c) 1991-2016 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. */ /* JWXYZ Is Not Xlib. But it's a bunch of function definitions that bear some resemblance to Xlib and that do Cocoa-ish or OpenGL-ish things that bear some resemblance to the things that Xlib might have done. This is the version of jwxyz for Android. The version used by MacOS and iOS is in jwxyz.m. */ #include "config.h" #ifdef HAVE_JWXYZ /* whole file */ #include "jwxyzI.h" /* There's only one Window for a given jwxyz_Display. */ #define assert_window(dpy, w) \ Assert (w == RootWindow (dpy, 0), "not a window") void Log (const char *fmt, ...) { va_list args; va_start (args, fmt); Logv (fmt, args); va_end (args); } int XDisplayWidth (Display *dpy, int screen) { return jwxyz_frame (XRootWindow (dpy, 0))->width; } int XDisplayHeight (Display *dpy, int screen) { return jwxyz_frame (XRootWindow (dpy, 0))->height; } /* XLFDs use dots per inch, but Xlib uses millimeters. Go figure. */ static const unsigned dpi = 75; int XDisplayWidthMM (Display *dpy, int screen) { const unsigned denom = dpi * 10 / 2; return (254 * XDisplayWidth (dpy, screen) + denom) / (2 * denom); } int XDisplayHeightMM (Display *dpy, int screen) { const unsigned denom = dpi * 10 / 2; return (254 * XDisplayHeight (dpy, screen) + denom) / (2 * denom); } void jwxyz_validate_pixel (Display *dpy, unsigned long pixel, unsigned int depth, Bool alpha_allowed_p) { Assert (depth == 1 || depth == visual_depth(NULL, NULL), "invalid depth: %d", depth); if (depth == 1) Assert ((pixel == 0 || pixel == 1), "bogus mono pixel: 0x%08X", pixel); else if (!alpha_allowed_p) Assert (((pixel & BlackPixel(dpy,0)) == BlackPixel(dpy,0)), "bogus color pixel: 0x%08X", pixel); } int XDrawPoint (Display *dpy, Drawable d, GC gc, int x, int y) { XPoint p; p.x = x; p.y = y; return XDrawPoints (dpy, d, gc, &p, 1, CoordModeOrigin); } Bool jwxyz_dumb_drawing_mode(Display *dpy, Drawable d, GC gc, int x, int y, unsigned width, unsigned height) { XGCValues *gcv = jwxyz_gc_gcv (gc); if (gcv->function == GXset || gcv->function == GXclear) { // "set" and "clear" are dumb drawing modes that ignore the source // bits and just draw solid rectangles. unsigned depth = jwxyz_gc_depth (gc); jwxyz_fill_rect (dpy, d, 0, x, y, width, height, (gcv->function == GXset ? (depth == 1 ? 1 : WhitePixel(dpy,0)) : (depth == 1 ? 0 : BlackPixel(dpy,0)))); return True; } return False; } int XCopyArea (Display *dpy, Drawable src, Drawable dst, GC gc, int src_x, int src_y, unsigned int width, unsigned int height, int dst_x, int dst_y) { Assert (gc, "no GC"); Assert ((width < 65535), "improbably large width"); Assert ((height < 65535), "improbably large height"); Assert ((src_x < 65535 && src_x > -65535), "improbably large src_x"); Assert ((src_y < 65535 && src_y > -65535), "improbably large src_y"); Assert ((dst_x < 65535 && dst_x > -65535), "improbably large dst_x"); Assert ((dst_y < 65535 && dst_y > -65535), "improbably large dst_y"); if (width == 0 || height == 0) return 0; if (jwxyz_dumb_drawing_mode (dpy, dst, gc, dst_x, dst_y, width, height)) return 0; XRectangle src_frame, dst_frame; // Sizes and origins of the two drawables Bool clipped = False; // Whether we did any clipping of the rects. src_frame = *jwxyz_frame (src); dst_frame = *jwxyz_frame (dst); // Initialize src_rect... // src_x += src_frame.x; src_y += src_frame.y; if (src_y < -65535) Assert(0, "src.origin.y went nuts"); // Initialize dst_rect... // dst_x += dst_frame.x; dst_y += dst_frame.y; if (dst_y < -65535) Assert(0, "dst.origin.y went nuts"); // Use signed width and height for this... int width0 = width, height0 = height; // Clip rects to frames... // # define CLIP(THIS,THAT,VAL,SIZE) do { \ int off = THIS##_##VAL; \ if (off < 0) { \ clipped = True; \ SIZE##0 += off; \ THIS##_##VAL -= off; \ THAT##_##VAL -= off; \ } \ off = (( THIS##_##VAL + SIZE##0) - \ (THIS##_frame.VAL + THIS##_frame.SIZE)); \ if (off > 0) { \ clipped = True; \ SIZE##0 -= off; \ }} while(0) CLIP (dst, src, x, width); CLIP (dst, src, y, height); // Not actually the original dst_rect, just the one before it's clipped to // the src_frame. int orig_dst_x = dst_x; int orig_dst_y = dst_y; int orig_width = width0; int orig_height = height0; if (width0 <= 0 || height0 <= 0) return 0; CLIP (src, dst, x, width); CLIP (src, dst, y, height); # undef CLIP // Sort-of-special case where no pixels can be grabbed from the source, // and the whole destination is filled with the background color. if (width0 <= 0 || height0 <= 0) { width0 = 0; height0 = 0; } else { jwxyz_copy_area (dpy, src, dst, gc, src_x, src_y, width0, height0, dst_x, dst_y); } // If either the src or dst rects did not lie within their drawables, then // we have adjusted both the src and dst rects to account for the clipping; // that means we need to clear to the background, so that clipped bits end // up in the bg color instead of simply not being copied. // // This has to happen after the copy, because if it happens before, the // cleared area will get grabbed if it overlaps with the source rectangle. // if (clipped && dst == XRootWindow (dpy,0)) { int dst_x0 = dst_x; int dst_y0 = dst_y; Assert (orig_dst_x >= 0 && orig_dst_x + orig_width <= dst_frame.width && orig_dst_y >= 0 && orig_dst_y + orig_height <= dst_frame.height, "wrong dimensions"); XRectangle rects[4]; XRectangle *rects_end = rects; if (orig_dst_y < dst_y0) { rects_end->x = orig_dst_x; rects_end->y = orig_dst_y; rects_end->width = orig_width; rects_end->height = dst_y0 - orig_dst_y; ++rects_end; } if (orig_dst_y + orig_height > dst_y0 + height0) { rects_end->x = orig_dst_x; rects_end->y = dst_y0 + height0; rects_end->width = orig_width; rects_end->height = orig_dst_y + orig_height - dst_y0 - height0; ++rects_end; } if (orig_dst_x < dst_x0) { rects_end->x = orig_dst_x; rects_end->y = dst_y0; rects_end->width = dst_x0 - orig_dst_x; rects_end->height = height0; ++rects_end; } if (dst_x0 + width0 < orig_dst_x + orig_width) { rects_end->x = dst_x0 + width0; rects_end->y = dst_y0; rects_end->width = orig_dst_x + orig_width - dst_x0 - width0; rects_end->height = height0; ++rects_end; } XGCValues *gcv = jwxyz_gc_gcv (gc); int old_function = gcv->function; gcv->function = GXcopy; jwxyz_fill_rects (dpy, dst, gc, rects, rects_end - rects, jwxyz_window_background (dpy)); gcv->function = old_function; } return 0; } int XCopyPlane (Display *dpy, Drawable src, Drawable dest, GC gc, int src_x, int src_y, unsigned width, int height, int dest_x, int dest_y, unsigned long plane) { Assert ((jwxyz_gc_depth (gc) == 1 || plane == 1), "hairy plane mask!"); // This isn't right: XCopyPlane() is supposed to map 1/0 to fg/bg, // not to white/black. return XCopyArea (dpy, src, dest, gc, src_x, src_y, width, height, dest_x, dest_y); } void jwxyz_fill_rect (Display *dpy, Drawable d, GC gc, int x, int y, unsigned int width, unsigned int height, unsigned long pixel) { XRectangle r = {x, y, width, height}; jwxyz_fill_rects (dpy, d, gc, &r, 1, pixel); } int XFillRectangle (Display *dpy, Drawable d, GC gc, int x, int y, unsigned int width, unsigned int height) { jwxyz_fill_rect (dpy, d, gc, x, y, width, height, jwxyz_gc_gcv (gc)->foreground); return 0; } int XDrawRectangle (Display *dpy, Drawable d, GC gc, int x, int y, unsigned int width, unsigned int height) { XPoint points[5] = { {x, y}, {x, y + height}, {x + width, y + height}, {x + width, y}, {x, y} }; XDrawLines(dpy, d, gc, points, 5, CoordModeOrigin); return 0; } int XFillRectangles (Display *dpy, Drawable d, GC gc, XRectangle *rects, int n) { jwxyz_fill_rects (dpy, d, gc, rects, n, jwxyz_gc_gcv (gc)->foreground); return 0; } int XDrawArc (Display *dpy, Drawable d, GC gc, int x, int y, unsigned int width, unsigned int height, int angle1, int angle2) { return jwxyz_draw_arc (dpy, d, gc, x, y, width, height, angle1, angle2, False); } int XFillArc (Display *dpy, Drawable d, GC gc, int x, int y, unsigned int width, unsigned int height, int angle1, int angle2) { return jwxyz_draw_arc (dpy, d, gc, x, y, width, height, angle1, angle2, True); } int XDrawArcs (Display *dpy, Drawable d, GC gc, XArc *arcs, int narcs) { int i; for (i = 0; i < narcs; i++) jwxyz_draw_arc (dpy, d, gc, arcs[i].x, arcs[i].y, arcs[i].width, arcs[i].height, arcs[i].angle1, arcs[i].angle2, False); return 0; } int XFillArcs (Display *dpy, Drawable d, GC gc, XArc *arcs, int narcs) { int i; for (i = 0; i < narcs; i++) jwxyz_draw_arc (dpy, d, gc, arcs[i].x, arcs[i].y, arcs[i].width, arcs[i].height, arcs[i].angle1, arcs[i].angle2, True); return 0; } void jwxyz_gcv_defaults (Display *dpy, XGCValues *gcv, int depth) { memset (gcv, 0, sizeof(*gcv)); gcv->function = GXcopy; gcv->foreground = (depth == 1 ? 1 : WhitePixel(dpy,0)); gcv->background = (depth == 1 ? 0 : BlackPixel(dpy,0)); gcv->line_width = 1; gcv->cap_style = CapButt; gcv->join_style = JoinMiter; gcv->fill_rule = EvenOddRule; gcv->alpha_allowed_p = False; gcv->antialias_p = True; } int XChangeGC (Display *dpy, GC gc, unsigned long mask, XGCValues *from) { if (! mask) return 0; Assert (gc && from, "no gc"); if (!gc || !from) return 0; XGCValues *to = jwxyz_gc_gcv (gc); unsigned depth = jwxyz_gc_depth (gc); if (mask & GCFunction) to->function = from->function; if (mask & GCForeground) to->foreground = from->foreground; if (mask & GCBackground) to->background = from->background; if (mask & GCLineWidth) to->line_width = from->line_width; if (mask & GCCapStyle) to->cap_style = from->cap_style; if (mask & GCJoinStyle) to->join_style = from->join_style; if (mask & GCFillRule) to->fill_rule = from->fill_rule; if (mask & GCClipXOrigin) to->clip_x_origin = from->clip_x_origin; if (mask & GCClipYOrigin) to->clip_y_origin = from->clip_y_origin; if (mask & GCSubwindowMode) to->subwindow_mode = from->subwindow_mode; if (mask & GCClipMask) XSetClipMask (0, gc, from->clip_mask); if (mask & GCFont) XSetFont (0, gc, from->font); if (mask & GCForeground) jwxyz_validate_pixel (dpy, from->foreground, depth, to->alpha_allowed_p); if (mask & GCBackground) jwxyz_validate_pixel (dpy, from->background, depth, to->alpha_allowed_p); Assert ((! (mask & (GCLineStyle | GCPlaneMask | GCFillStyle | GCTile | GCStipple | GCTileStipXOrigin | GCTileStipYOrigin | GCGraphicsExposures | GCDashOffset | GCDashList | GCArcMode))), "unimplemented gcvalues mask"); return 0; } Status XGetWindowAttributes (Display *dpy, Window w, XWindowAttributes *xgwa) { assert_window(dpy, w); memset (xgwa, 0, sizeof(*xgwa)); const XRectangle *frame = jwxyz_frame (w); xgwa->x = frame->x; xgwa->y = frame->y; xgwa->width = frame->width; xgwa->height = frame->height; xgwa->depth = visual_depth (NULL, NULL); xgwa->screen = DefaultScreenOfDisplay (dpy); xgwa->visual = XDefaultVisualOfScreen (xgwa->screen); return 0; } Status XGetGeometry (Display *dpy, Drawable d, Window *root_ret, int *x_ret, int *y_ret, unsigned int *w_ret, unsigned int *h_ret, unsigned int *bw_ret, unsigned int *d_ret) { const XRectangle *frame = jwxyz_frame (d); *x_ret = frame->x; *y_ret = frame->y; *w_ret = frame->width; *h_ret = frame->height; *d_ret = jwxyz_drawable_depth (d); *root_ret = RootWindow (dpy, 0); *bw_ret = 0; return True; } Status XAllocColor (Display *dpy, Colormap cmap, XColor *color) { color->pixel = jwxyz_alloc_color (dpy, color->red, color->green, color->blue, 0xFFFF); return 1; } Status XAllocColorCells (Display *dpy, Colormap cmap, Bool contig, unsigned long *pmret, unsigned int npl, unsigned long *pxret, unsigned int npx) { return 0; } int XStoreColors (Display *dpy, Colormap cmap, XColor *colors, int n) { Assert(0, "XStoreColors called"); return 0; } int XStoreColor (Display *dpy, Colormap cmap, XColor *c) { Assert(0, "XStoreColor called"); return 0; } int XFreeColors (Display *dpy, Colormap cmap, unsigned long *px, int npixels, unsigned long planes) { return 0; } Status XParseColor (Display *dpy, Colormap cmap, const char *spec, XColor *ret) { unsigned char r=0, g=0, b=0; if (*spec == '#' && strlen(spec) == 7) { static unsigned const char hex[] = { // yeah yeah, shoot me. 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,2,3,4,5,6,7,8,9,0,0,0,0,0,0, 0,10,11,12,13,14,15,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,10,11,12,13,14,15,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}; const unsigned char *uspec = (const unsigned char *)spec; r = (hex[uspec[1]] << 4) | hex[uspec[2]]; g = (hex[uspec[3]] << 4) | hex[uspec[4]]; b = (hex[uspec[5]] << 4) | hex[uspec[6]]; } else if (!strcasecmp(spec,"black")) { // r = g = b = 0; } else if (!strcasecmp(spec,"white")) { r = g = b = 255; } else if (!strcasecmp(spec,"red")) { r = 255; } else if (!strcasecmp(spec,"green")) { g = 255; } else if (!strcasecmp(spec,"blue")) { b = 255; } else if (!strcasecmp(spec,"cyan")) { g = b = 255; } else if (!strcasecmp(spec,"magenta")) { r = b = 255; } else if (!strcasecmp(spec,"yellow")) { r = g = 255; } else { return 0; } ret->red = (r << 8) | r; ret->green = (g << 8) | g; ret->blue = (b << 8) | b; ret->flags = DoRed|DoGreen|DoBlue; return 1; } Status XAllocNamedColor (Display *dpy, Colormap cmap, char *name, XColor *screen_ret, XColor *exact_ret) { if (! XParseColor (dpy, cmap, name, screen_ret)) return False; *exact_ret = *screen_ret; return XAllocColor (dpy, cmap, screen_ret); } int XQueryColor (Display *dpy, Colormap cmap, XColor *color) { jwxyz_validate_pixel (dpy, color->pixel, visual_depth (NULL, NULL), False); uint8_t rgba[4]; jwxyz_query_color (dpy, color->pixel, rgba); color->red = (rgba[0] << 8) | rgba[0]; color->green = (rgba[1] << 8) | rgba[1]; color->blue = (rgba[2] << 8) | rgba[2]; color->flags = DoRed|DoGreen|DoBlue; return 0; } int XQueryColors (Display *dpy, Colormap cmap, XColor *c, int n) { int i; for (i = 0; i < n; i++) XQueryColor (dpy, cmap, &c[i]); return 0; } static unsigned long ximage_getpixel_1 (XImage *ximage, int x, int y) { return ((ximage->data [y * ximage->bytes_per_line + (x>>3)] >> (x & 7)) & 1); } static int ximage_putpixel_1 (XImage *ximage, int x, int y, unsigned long pixel) { if (pixel) ximage->data [y * ximage->bytes_per_line + (x>>3)] |= (1 << (x & 7)); else ximage->data [y * ximage->bytes_per_line + (x>>3)] &= ~(1 << (x & 7)); return 0; } static unsigned long ximage_getpixel_32 (XImage *ximage, int x, int y) { return ((unsigned long) *((uint32_t *) ximage->data + (y * (ximage->bytes_per_line >> 2)) + x)); } static int ximage_putpixel_32 (XImage *ximage, int x, int y, unsigned long pixel) { *((uint32_t *) ximage->data + (y * (ximage->bytes_per_line >> 2)) + x) = (uint32_t) pixel; return 0; } Status XInitImage (XImage *ximage) { if (!ximage->bytes_per_line) ximage->bytes_per_line = (ximage->depth == 1 ? (ximage->width + 7) / 8 : ximage->width * 4); if (ximage->depth == 1) { ximage->f.put_pixel = ximage_putpixel_1; ximage->f.get_pixel = ximage_getpixel_1; } else if (ximage->depth == 32 || ximage->depth == 24) { ximage->f.put_pixel = ximage_putpixel_32; ximage->f.get_pixel = ximage_getpixel_32; } else { Assert (0, "unknown depth"); } return 1; } XImage * XCreateImage (Display *dpy, Visual *visual, unsigned int depth, int format, int offset, char *data, unsigned int width, unsigned int height, int bitmap_pad, int bytes_per_line) { XImage *ximage = (XImage *) calloc (1, sizeof(*ximage)); ximage->width = width; ximage->height = height; ximage->format = format; ximage->data = data; ximage->bitmap_unit = 8; ximage->byte_order = LSBFirst; ximage->bitmap_bit_order = ximage->byte_order; ximage->bitmap_pad = bitmap_pad; ximage->depth = depth; Visual *v = DefaultVisualOfScreen (DefaultScreenOfDisplay (dpy)); ximage->red_mask = (depth == 1 ? 0 : v->red_mask); ximage->green_mask = (depth == 1 ? 0 : v->green_mask); ximage->blue_mask = (depth == 1 ? 0 : v->blue_mask); ximage->bits_per_pixel = (depth == 1 ? 1 : visual_depth (NULL, NULL)); ximage->bytes_per_line = bytes_per_line; XInitImage (ximage); return ximage; } XImage * XSubImage (XImage *from, int x, int y, unsigned int w, unsigned int h) { XImage *to = (XImage *) malloc (sizeof(*to)); memcpy (to, from, sizeof(*from)); to->width = w; to->height = h; to->bytes_per_line = 0; XInitImage (to); to->data = (char *) malloc (h * to->bytes_per_line); if (x >= from->width) w = 0; else if (x+w > from->width) w = from->width - x; if (y >= from->height) h = 0; else if (y+h > from->height) h = from->height - y; int tx, ty; for (ty = 0; ty < h; ty++) for (tx = 0; tx < w; tx++) XPutPixel (to, tx, ty, XGetPixel (from, x+tx, y+ty)); return to; } XPixmapFormatValues * XListPixmapFormats (Display *dpy, int *n_ret) { XPixmapFormatValues *ret = calloc (2, sizeof(*ret)); ret[0].depth = visual_depth (NULL, NULL); ret[0].bits_per_pixel = 32; ret[0].scanline_pad = 8; ret[1].depth = 1; ret[1].bits_per_pixel = 1; ret[1].scanline_pad = 8; *n_ret = 2; return ret; } unsigned long XGetPixel (XImage *ximage, int x, int y) { return ximage->f.get_pixel (ximage, x, y); } int XPutPixel (XImage *ximage, int x, int y, unsigned long pixel) { return ximage->f.put_pixel (ximage, x, y, pixel); } int XDestroyImage (XImage *ximage) { if (ximage->data) free (ximage->data); free (ximage); return 0; } Pixmap XCreatePixmapFromBitmapData (Display *dpy, Drawable drawable, const char *data, unsigned int w, unsigned int h, unsigned long fg, unsigned int bg, unsigned int depth) { Pixmap p = XCreatePixmap (dpy, drawable, w, h, depth); XImage *image = XCreateImage (dpy, 0, 1, XYPixmap, 0, (char *) data, w, h, 0, 0); XGCValues gcv; gcv.foreground = fg; gcv.background = bg; GC gc = XCreateGC (dpy, p, GCForeground|GCBackground, &gcv); XPutImage (dpy, p, gc, image, 0, 0, 0, 0, w, h); XFreeGC (dpy, gc); image->data = 0; XDestroyImage (image); return p; } char * XGetAtomName (Display *dpy, Atom atom) { if (atom == XA_FONT) return strdup ("FONT"); // Note that atoms (that aren't predefined) are just char *. return strdup ((char *) atom); } int XSetForeground (Display *dpy, GC gc, unsigned long fg) { XGCValues *gcv = jwxyz_gc_gcv (gc); jwxyz_validate_pixel (dpy, fg, jwxyz_gc_depth (gc), gcv->alpha_allowed_p); gcv->foreground = fg; return 0; } int XSetBackground (Display *dpy, GC gc, unsigned long bg) { XGCValues *gcv = jwxyz_gc_gcv (gc); jwxyz_validate_pixel (dpy, bg, jwxyz_gc_depth (gc), gcv->alpha_allowed_p); gcv->background = bg; return 0; } int jwxyz_XSetAlphaAllowed (Display *dpy, GC gc, Bool allowed) { jwxyz_gc_gcv (gc)->alpha_allowed_p = allowed; return 0; } int jwxyz_XSetAntiAliasing (Display *dpy, GC gc, Bool antialias_p) { jwxyz_gc_gcv (gc)->antialias_p = antialias_p; return 0; } int XSetLineAttributes (Display *dpy, GC gc, unsigned int line_width, int line_style, int cap_style, int join_style) { XGCValues *gcv = jwxyz_gc_gcv (gc); gcv->line_width = line_width; Assert (line_style == LineSolid, "only LineSolid implemented"); // gc->gcv.line_style = line_style; gcv->cap_style = cap_style; gcv->join_style = join_style; return 0; } int XSetGraphicsExposures (Display *dpy, GC gc, Bool which) { return 0; } int XSetFunction (Display *dpy, GC gc, int which) { jwxyz_gc_gcv (gc)->function = which; return 0; } int XSetSubwindowMode (Display *dpy, GC gc, int which) { jwxyz_gc_gcv (gc)->subwindow_mode = which; return 0; } Bool XQueryPointer (Display *dpy, Window w, Window *root_ret, Window *child_ret, int *root_x_ret, int *root_y_ret, int *win_x_ret, int *win_y_ret, unsigned int *mask_ret) { assert_window (dpy, w); XPoint vpos, p; jwxyz_get_pos (w, &vpos, &p); if (root_x_ret) *root_x_ret = p.x; if (root_y_ret) *root_y_ret = p.y; if (win_x_ret) *win_x_ret = p.x - vpos.x; if (win_y_ret) *win_y_ret = p.y - vpos.y; if (mask_ret) *mask_ret = 0; // #### poll the keyboard modifiers? if (root_ret) *root_ret = 0; if (child_ret) *child_ret = 0; return True; } Bool XTranslateCoordinates (Display *dpy, Window w, Window dest_w, int src_x, int src_y, int *dest_x_ret, int *dest_y_ret, Window *child_ret) { assert_window (dpy, w); XPoint vpos, p; jwxyz_get_pos (w, &vpos, NULL); // point starts out relative to top left of view p.x = src_x; p.y = src_y; // get point relative to top left of screen p.x += vpos.x; p.y += vpos.y; *dest_x_ret = p.x; *dest_y_ret = p.y; if (child_ret) *child_ret = w; return True; } KeySym XKeycodeToKeysym (Display *dpy, KeyCode code, int index) { return code; } int XLookupString (XKeyEvent *e, char *buf, int size, KeySym *k_ret, XComposeStatus *xc) { KeySym ks = XKeycodeToKeysym (0, e->keycode, 0); char c = 0; // Do not put non-ASCII KeySyms like XK_Shift_L and XK_Page_Up in the string. if ((unsigned int) ks <= 255) c = (char) ks; // Put control characters in the string. Not meta. if (e->state & ControlMask) { if (c >= 'a' && c <= 'z') // Upcase control. c -= 'a'-'A'; if (c >= '@' && c <= '_') // Shift to control page. c -= '@'; if (c == ' ') // C-SPC is NULL. c = 0; } if (k_ret) *k_ret = ks; if (size > 0) buf[0] = c; if (size > 1) buf[1] = 0; return (size > 0 ? 1 : 0); } int XFlush (Display *dpy) { // Just let the event loop take care of this on its own schedule. return 0; } int XSync (Display *dpy, Bool flush) { return XFlush (dpy); } // declared in utils/visual.h int has_writable_cells (Screen *s, Visual *v) { return 0; } int visual_depth (Screen *s, Visual *v) { return 32; } int visual_cells (Screen *s, Visual *v) { return (int)(v->red_mask | v->green_mask | v->blue_mask); } int visual_class (Screen *s, Visual *v) { return TrueColor; } int get_bits_per_pixel (Display *dpy, int depth) { Assert (depth == 32 || depth == 1, "unexpected depth"); return depth; } int screen_number (Screen *screen) { Display *dpy = DisplayOfScreen (screen); int i; for (i = 0; i < ScreenCount (dpy); i++) if (ScreenOfDisplay (dpy, i) == screen) return i; abort (); return 0; } // declared in utils/grabclient.h Bool use_subwindow_mode_p (Screen *screen, Window window) { return False; } #endif /* HAVE_JWXYZ */ xscreensaver-5.36/jwxyz/jwxyz-gl.c000664 000767 000024 00000245150 12776334454 017320 0ustar00jwzstaff000000 000000 /* xscreensaver, Copyright (c) 1991-2016 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. */ /* JWXYZ Is Not Xlib. But it's a bunch of function definitions that bear some resemblance to Xlib and that do OpenGL-ish things that bear some resemblance to the things that Xlib might have done. This is the version of jwxyz for Android. The version used by MacOS and iOS is in jwxyz.m. */ /* Be advised, this is all very much a work in progress. TODO: The following should be implemented before OpenGL can be considered practical here: - Above all, pick the smallest not-yet working hack that utilizes the needed functionality. - Half-ass the drawing functions. - [OK] What Interference needs - Fast Pixmaps - Whatever clipping is used in XScreenSaver (shape and/or bitmap clipping) - Delayed context creation to support anti-aliasing/multisampling - Everything these hacks need: - FuzzyFlakes (needs wide lines) - Greynetic - [OK] Deluxe - [OK] Get DangerBall going. - [OK] iOS. - [Interference, so far...] And fast, too. - And text really needs to work for the FPS display. */ /* Also, Take note that OS X can actually run with 256 colors. */ /* TODO: - malloc error checking - Check max texture sizes for XGet/PutImage, XCopyArea. - Optional 5:5:5 16-bit color */ /* Techniques & notes: - iOS: OpenGL ES 2.0 isn't always available. Use OpenGL ES 1.1. - OS X: Drivers can go back to OpenGL 1.1 (GeForce 2 MX on 10.5.8). - Use stencil buffers (OpenGL 1.0+) for bitmap clipping masks. - glLogicOp is an actual thing that should work for GCs. - Pixmaps can be any of the following, depending on GL implementation. - This requires offscreen rendering. Fortunately, this is always available. - OS X: Drawable objects, including: pixel buffers and offscreen memory. - Offscreen buffers w/ CGLSetOffScreen (10.0+) - http://lists.apple.com/archives/mac-opengl/2002/Jun/msg00087.html provides a very ugly solution for hardware-accelerated offscreen rendering with CGLSetParameter(*, kCGLCPSurfaceTexture, *) on OS X 10.1+. Apple docs say it's actually for OS X 10.3+, instead. - Pixel buffers w/ CGLSetPBuffer (10.3+, now deprecated) - Requires APPLE_pixel_buffer. - Available in software on x86 only. - Always available on hardware. - Need to blit? Use OpenGL pixel buffers. (GL_PIXEL_PACK_BUFFER) - Framebuffer objects w/ GL_(ARB|EXT)_framebuffer_object - TODO: Can EXT_framebuffers be different sizes? - Preferred on 10.7+ - iOS: Use OES_framebuffer_object, it's always present. */ /* OpenGL hacks call a number of X11 functions, including * XCopyArea, XDrawString, XGetImage * XCreatePixmap, XCreateGC, XCreateImage * XPutPixel * Check these, of course. */ #ifdef JWXYZ_GL /* entire file */ #include #include #include #include #include #include #include #ifdef HAVE_COCOA # ifdef USE_IPHONE # import # include # include # define NSView UIView # define NSRect CGRect # define NSPoint CGPoint # define NSSize CGSize # define NSColor UIColor # define NSImage UIImage # define NSEvent UIEvent # define NSFont UIFont # define NSGlyph CGGlyph # define NSWindow UIWindow # define NSMakeSize CGSizeMake # define NSBezierPath UIBezierPath # define colorWithDeviceRed colorWithRed # define NSFontTraitMask UIFontDescriptorSymbolicTraits // The values for the flags for NSFontTraitMask and // UIFontDescriptorSymbolicTraits match up, not that it really matters here. # define NSBoldFontMask UIFontDescriptorTraitBold # define NSFixedPitchFontMask UIFontDescriptorTraitMonoSpace # define NSItalicFontMask UIFontDescriptorTraitItalic # define NSOpenGLContext EAGLContext # else # include # endif #else /* TODO: Does this work on iOS? */ # ifndef HAVE_JWZGLES # include # else # include # include # endif #endif #ifdef HAVE_JWZGLES # include "jwzglesI.h" #endif #ifdef HAVE_ANDROID # include #endif #include "jwxyzI.h" #include "jwxyz-timers.h" #include "yarandom.h" #include "utf8wc.h" #include "xft.h" #if defined HAVE_COCOA # include #else struct CGPoint { float x; float y; }; typedef struct CGPoint CGPoint; struct CGSize { float width; float height; }; typedef struct CGSize CGSize; struct CGRect { CGPoint origin; CGSize size; }; typedef struct CGRect CGRect; #endif # undef MAX # undef MIN # define MAX(a,b) ((a)>(b)?(a):(b)) # define MIN(a,b) ((a)<(b)?(a):(b)) union color_bytes { /* On 64-bit systems, high bits of the 32-bit pixel are available as scratch space. I doubt if any screen savers need it, but just in case... */ unsigned long pixel; uint8_t bytes[4]; }; struct jwxyz_Display { Window main_window; Screen *screen; int screen_count; struct jwxyz_sources_data *timers_data; Bool gl_texture_npot_p; /* Bool opengl_core_p */; GLenum gl_texture_target; // #if defined USE_IPHONE GLuint rect_texture; // Also can work on the desktop. // #endif unsigned long window_background; }; struct jwxyz_Screen { Display *dpy; GLenum pixel_format, pixel_type; unsigned long black, white; Visual *visual; int screen_number; }; struct jwxyz_GC { XGCValues gcv; unsigned int depth; // CGImageRef clip_mask; // CGImage copy of the Pixmap in gcv.clip_mask }; struct jwxyz_Font { Display *dpy; char *ps_name; void *native_font; int refcount; // for deciding when to release the native font float size; // points int ascent, descent; char *xa_font; // In X11, "Font" is just an ID, and "XFontStruct" contains the metrics. // But we need the metrics on both of them, so they go here. XFontStruct metrics; }; struct jwxyz_XFontSet { XFontStruct *font; }; /* XGetImage in CoreGraphics JWXYZ has to deal with funky pixel formats necessitating fast & flexible pixel conversion. OpenGL does image format conversion itself, so alloc_color and query_color are mercifully simple. */ uint32_t jwxyz_alloc_color (Display *dpy, uint16_t r, uint16_t g, uint16_t b, uint16_t a) { union color_bytes color; /* Instead of (int)(c / 256.0), another possibility is (int)(c * 255.0 / 65535.0 + 0.5). This can be calculated using only uint8_t integer_math(uint16_t c) { unsigned c0 = c + 128; return (c0 - (c0 >> 8)) >> 8; } */ color.bytes[0] = r >> 8; color.bytes[1] = g >> 8; color.bytes[2] = b >> 8; color.bytes[3] = a >> 8; if (dpy->screen->pixel_format == GL_BGRA_EXT) { color.pixel = color.bytes[2] | (color.bytes[1] << 8) | (color.bytes[0] << 16) | (color.bytes[3] << 24); } else { Assert(dpy->screen->pixel_format == GL_RGBA, "jwxyz_alloc_color: Unknown pixel_format"); } return (uint32_t)color.pixel; } // Converts an array of pixels ('src') from one format to another, placing the // result in 'dest', according to the pixel conversion mode 'mode'. void jwxyz_query_color (Display *dpy, unsigned long pixel, uint8_t *rgba) { union color_bytes color; if(dpy->screen->pixel_format == GL_RGBA) { color.pixel = pixel; for (unsigned i = 0; i != 4; ++i) rgba[i] = color.bytes[i]; return; } Assert (dpy->screen->pixel_format == GL_BGRA_EXT, "jwxyz_query_color: Unknown pixel format"); /* TODO: Cross-check with XAllocColor. */ rgba[0] = (pixel >> 16) & 0xFF; rgba[1] = (pixel >> 8) & 0xFF; rgba[2] = (pixel >> 0) & 0xFF; rgba[3] = (pixel >> 24) & 0xFF; } void jwxyz_assert_display(Display *dpy) { if(!dpy) return; jwxyz_assert_gl (); jwxyz_assert_drawable (dpy->main_window, dpy->main_window); } void jwxyz_set_matrices (Display *dpy, unsigned width, unsigned height, Bool window_p) { /* TODO: Check registration pattern from Interference with rectangles instead of points. */ // The projection matrix is always set as follows. The modelview matrix is // usually identity, but for points and thin lines, it's translated by 0.5. glMatrixMode(GL_PROJECTION); glLoadIdentity(); # if defined(USE_IPHONE) || defined(HAVE_ANDROID) if (window_p && ignore_rotation_p(dpy)) { int o = (int) current_device_rotation(); glRotatef (-o, 0, 0, 1); } // glPointSize(1); // This is the default. #ifdef HAVE_JWZGLES glOrthof /* TODO: Is glOrthox worth it? Signs point to no. */ #else glOrtho #endif (0, width, height, 0, -1, 1); glMatrixMode(GL_MODELVIEW); # endif // HAVE_MOBILE } #ifndef HAVE_JWZGLES struct gl_version { // iOS always uses OpenGL ES 1.1. unsigned major; unsigned minor; }; static GLboolean gl_check_ver (const struct gl_version *caps, unsigned gl_major, unsigned gl_minor) { return caps->major > gl_major || (caps->major == gl_major && caps->minor >= gl_minor); } /* static GLboolean gl_check_ext(const struct gl_caps *caps, unsigned gl_major, unsigned gl_minor, const char *extension) { return gl_check_ver(caps, gl_major, gl_minor) || gluCheckExtension(extension, caps->extensions); } */ #endif // NSOpenGLContext *jwxyz_debug_context; /* We keep a list of all of the Displays that have been created and not yet freed so that they can have sensible display numbers. If three displays are created (0, 1, 2) and then #1 is closed, then the fourth display will be given the now-unused display number 1. (Everything in here assumes a 1:1 Display/Screen mapping.) The size of this array is the most number of live displays at one time. So if it's 20, then we'll blow up if the system has 19 monitors and also has System Preferences open (the small preview window). Note that xlockmore-style savers tend to allocate big structures, so setting this to 1000 will waste a few megabytes. Also some of them assume that the number of screens never changes, so dynamically expanding this array won't work. */ # ifndef USE_IPHONE static Display *jwxyz_live_displays[20] = { 0, }; # endif Display * jwxyz_make_display (Window w) { Display *d = (Display *) calloc (1, sizeof(*d)); d->screen = (Screen *) calloc (1, sizeof(Screen)); d->screen->dpy = d; d->screen_count = 1; d->screen->screen_number = 0; # ifndef USE_IPHONE { // Find the first empty slot in live_displays and plug us in. int size = sizeof(jwxyz_live_displays) / sizeof(*jwxyz_live_displays); int i; for (i = 0; i < size; i++) { if (! jwxyz_live_displays[i]) break; } if (i >= size) abort(); jwxyz_live_displays[i] = d; d->screen_count = size; d->screen->screen_number = i; } # endif // !USE_IPHONE # ifndef HAVE_JWZGLES struct gl_version version; { const GLubyte *version_str = glGetString (GL_VERSION); /* iPhone is always OpenGL ES 1.1. */ if (sscanf ((const char *) version_str, "%u.%u", &version.major, &version.minor) < 2) { version.major = 1; version.minor = 1; } } # endif // !HAVE_JWZGLES const GLubyte *extensions = glGetString (GL_EXTENSIONS); /* See: - Apple TN2080: Understanding and Detecting OpenGL Functionality. - OpenGL Programming Guide for the Mac - Best Practices for Working with Texture Data - Optimal Data Formats and Types */ // If a video adapter suports BGRA textures, then that's probably as fast as // you're gonna get for getting a texture onto the screen. # ifdef HAVE_JWZGLES /* TODO: Make BGRA work on iOS. As it is, it breaks XPutImage. (glTexImage2D, AFAIK) */ d->screen->pixel_format = GL_RGBA; /* gluCheckExtension ((const GLubyte *) "GL_APPLE_texture_format_BGRA8888", extensions) ? GL_BGRA_EXT : GL_RGBA; */ d->screen->pixel_type = GL_UNSIGNED_BYTE; // See also OES_read_format. # else // !HAVE_JWZGLES if (gl_check_ver (&version, 1, 2) || (gluCheckExtension ((const GLubyte *) "GL_EXT_bgra", extensions) && gluCheckExtension ((const GLubyte *) "GL_APPLE_packed_pixels", extensions))) { d->screen->pixel_format = GL_BGRA_EXT; // Both Intel and PowerPC-era docs say to use GL_UNSIGNED_INT_8_8_8_8_REV. d->screen->pixel_type = GL_UNSIGNED_INT_8_8_8_8_REV; } else { d->screen->pixel_format = GL_RGBA; d->screen->pixel_type = GL_UNSIGNED_BYTE; } // GL_ABGR_EXT/GL_UNSIGNED_BYTE is another possibilty that may have made more // sense on PowerPC. # endif // !HAVE_JWZGLES // On really old systems, it would make sense to split the texture // into subsections. # ifndef HAVE_JWZGLES d->gl_texture_npot_p = gluCheckExtension ((const GLubyte *) "GL_ARB_texture_rectangle", extensions); d->gl_texture_target = d->gl_texture_npot_p ? GL_TEXTURE_RECTANGLE_EXT : GL_TEXTURE_2D; # else d->gl_texture_npot_p = jwzgles_gluCheckExtension ((const GLubyte *) "GL_APPLE_texture_2D_limited_npot", extensions) || jwzgles_gluCheckExtension ((const GLubyte *) "GL_OES_texture_npot", extensions) || jwzgles_gluCheckExtension // From PixelFlinger 1.4 ((const GLubyte *) "GL_ARB_texture_non_power_of_two", extensions); d->gl_texture_target = GL_TEXTURE_2D; # endif d->screen->black = jwxyz_alloc_color (d, 0x0000, 0x0000, 0x0000, 0xFFFF); d->screen->white = jwxyz_alloc_color (d, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF); Visual *v = (Visual *) calloc (1, sizeof(Visual)); v->class = TrueColor; v->red_mask = jwxyz_alloc_color (d, 0xFFFF, 0x0000, 0x0000, 0x0000); v->green_mask = jwxyz_alloc_color (d, 0x0000, 0xFFFF, 0x0000, 0x0000); v->blue_mask = jwxyz_alloc_color (d, 0x0000, 0x0000, 0xFFFF, 0x0000); v->bits_per_rgb = 8; d->screen->visual = v; d->timers_data = jwxyz_sources_init (XtDisplayToApplicationContext (d)); d->window_background = BlackPixel(d,0); d->main_window = w; { fputs((char *)glGetString(GL_VENDOR), stderr); fputc(' ', stderr); fputs((char *)glGetString(GL_RENDERER), stderr); fputc(' ', stderr); fputs((char *)glGetString(GL_VERSION), stderr); fputc('\n', stderr); // puts(caps.extensions); GLint max_texture_size; glGetIntegerv (GL_MAX_TEXTURE_SIZE, &max_texture_size); printf ("GL_MAX_TEXTURE_SIZE: %d\n", max_texture_size); } // In case a GL hack wants to use X11 to draw offscreen, the rect_texture is available. Assert (d->main_window == w, "Uh-oh."); glGenTextures (1, &d->rect_texture); // TODO: Check for (ARB|EXT|NV)_texture_rectangle. (All three are alike.) // Rectangle textures should be present on OS X with the following exceptions: // - Generic renderer on PowerPC OS X 10.4 and earlier // - ATI Rage 128 glBindTexture (d->gl_texture_target, d->rect_texture); // TODO: This is all somewhere else. Refactor. glTexParameteri (d->gl_texture_target, GL_TEXTURE_MIN_FILTER, GL_NEAREST); glTexParameteri (d->gl_texture_target, GL_TEXTURE_MAG_FILTER, GL_NEAREST); // This might be redundant for rectangular textures. # ifndef HAVE_JWZGLES const GLint wrap = GL_CLAMP; # else // HAVE_JWZGLES const GLint wrap = GL_CLAMP_TO_EDGE; # endif // HAVE_JWZGLES // In OpenGL, CLAMP_TO_EDGE is OpenGL 1.2 or GL_SGIS_texture_edge_clamp. // This is always present with OpenGL ES. glTexParameteri (d->gl_texture_target, GL_TEXTURE_WRAP_S, wrap); glTexParameteri (d->gl_texture_target, GL_TEXTURE_WRAP_T, wrap); jwxyz_assert_display(d); return d; } void jwxyz_free_display (Display *dpy) { /* TODO: Go over everything. */ jwxyz_sources_free (dpy->timers_data); # ifndef USE_IPHONE { // Find us in live_displays and clear that slot. int size = ScreenCount(dpy); int i; for (i = 0; i < size; i++) { if (dpy == jwxyz_live_displays[i]) { jwxyz_live_displays[i] = 0; break; } } if (i >= size) abort(); } # endif // !USE_IPHONE free (dpy->screen->visual); free (dpy->screen); free (dpy); } /* Call this after any modification to the bits on a Pixmap or Window. Most Pixmaps are used frequently as sources and infrequently as destinations, so it pays to cache the data as a CGImage as needed. */ static void invalidate_drawable_cache (Drawable d) { /* TODO: Kill this outright. jwxyz_bind_drawable handles any potential invalidation. */ /* if (d && d->cgi) { abort(); CGImageRelease (d->cgi); d->cgi = 0; } */ } /* Call this when the View changes size or position. */ void jwxyz_window_resized (Display *dpy) { const XRectangle *new_frame = jwxyz_frame (dpy->main_window); unsigned new_width = new_frame->width; unsigned new_height = new_frame->height; Assert (new_width, "jwxyz_window_resized: No width."); Assert (new_height, "jwxyz_window_resized: No height."); /*if (cgc) w->cgc = cgc; Assert (w->cgc, "no CGContext"); */ Log("resize: %d, %d\n", new_width, new_height); jwxyz_bind_drawable (dpy, dpy->main_window, dpy->main_window); // TODO: What does the iPhone need? // iOS only: If the main_window is not the current_drawable, then set_matrices // was already called in bind_drawable. jwxyz_set_matrices (dpy, new_width, new_height, True); /* GLint draw_buffer; glGetIntegerv (GL_DRAW_BUFFER, &draw_buffer); glDrawBuffer (GL_FRONT); glClearColor (1, 0, 1, 0); glClear (GL_COLOR_BUFFER_BIT); glDrawBuffer (GL_BACK); glClearColor (0, 1, 1, 0); glClear (GL_COLOR_BUFFER_BIT); glDrawBuffer (draw_buffer); */ // Stylish and attractive purple! // glClearColor (1, 0, 1, 0.5); // glClear (GL_COLOR_BUFFER_BIT); invalidate_drawable_cache (dpy->main_window); } jwxyz_sources_data * display_sources_data (Display *dpy) { return dpy->timers_data; } Window XRootWindow (Display *dpy, int screen) { return dpy ? dpy->main_window : 0; } Screen * XDefaultScreenOfDisplay (Display *dpy) { return dpy ? dpy->screen : 0; } Visual * XDefaultVisualOfScreen (Screen *screen) { return screen ? screen->visual : 0; } Display * XDisplayOfScreen (Screen *s) { return s ? s->dpy : 0; } int XDisplayNumberOfScreen (Screen *s) { return 0; } int XScreenNumberOfScreen (Screen *s) { return s? s->screen_number : 0; } int jwxyz_ScreenCount (Display *dpy) { return dpy ? dpy->screen_count : 0; } unsigned long XBlackPixelOfScreen(Screen *screen) { return screen->black; } unsigned long XWhitePixelOfScreen(Screen *screen) { return screen->white; } unsigned long XCellsOfScreen(Screen *screen) { Visual *v = screen->visual; return v->red_mask | v->green_mask | v->blue_mask; } /* GC attributes by usage and OpenGL implementation: * * All drawing functions: * function | glLogicOp w/ GL_COLOR_LOGIC_OP * clip_x_origin, clip_y_origin, clip_mask | Stencil mask * * Shape drawing functions: * foreground, background | glColor* * * XDrawLines, XDrawRectangles, XDrawSegments: * line_width, cap_style, join_style | Lotsa vertices * * XFillPolygon: * fill_rule | Multiple GL_TRIANGLE_FANs * * XDrawText: * font | Cocoa, then OpenGL display lists. * * alpha_allowed_p | TODO * antialias_p | TODO * * Nothing, really: * subwindow_mode */ static void set_clip_mask (GC gc) { Assert (!gc->gcv.clip_mask, "set_gc: TODO"); } static void set_function (int function) { Assert (function == GXcopy, "set_gc: (TODO) Stubbed gcv function"); /* TODO: The GL_COLOR_LOGIC_OP extension is exactly what is needed here. (OpenGL 1.1) Fun fact: The glLogicOp opcode constants are the same as the X11 GX* function constants | GL_CLEAR. */ #if 0 switch (gc->gcv.function) { case GXset: case GXclear: case GXcopy:/*CGContextSetBlendMode (cgc, kCGBlendModeNormal);*/ break; case GXxor: CGContextSetBlendMode (cgc, kCGBlendModeDifference); break; case GXor: CGContextSetBlendMode (cgc, kCGBlendModeLighten); break; case GXand: CGContextSetBlendMode (cgc, kCGBlendModeDarken); break; default: Assert(0, "unknown gcv function"); break; } #endif } static void set_color (Display *dpy, unsigned long pixel, unsigned int depth, Bool alpha_allowed_p) { jwxyz_validate_pixel (dpy, pixel, depth, alpha_allowed_p); if (depth == 1) { GLfloat f = pixel; glColor4f (f, f, f, 1); } else { /* TODO: alpha_allowed_p */ uint8_t rgba[4]; jwxyz_query_color (dpy, pixel, rgba); #ifdef HAVE_JWZGLES glColor4f (rgba[0] / 255.0f, rgba[1] / 255.0f, rgba[2] / 255.0f, rgba[3] / 255.0f); #else glColor4ubv (rgba); #endif } } /* Pushes a GC context; sets Function, ClipMask, and color. */ static void set_color_gc (Display *dpy, GC gc, unsigned long color) { // GC is NULL for XClearArea and XClearWindow. unsigned int depth; int function; if (gc) { function = gc->gcv.function; depth = gc->depth; set_clip_mask (gc); } else { function = GXcopy; depth = visual_depth (NULL, NULL); // TODO: Set null clip mask here. } set_function (function); switch (function) { case GXset: color = (depth == 1 ? 1 : WhitePixel(dpy,0)); break; case GXclear: color = (depth == 1 ? 0 : BlackPixel(dpy,0)); break; } set_color (dpy, color, depth, gc ? gc->gcv.alpha_allowed_p : False); /* TODO: Antialiasing. */ /* CGContextSetShouldAntialias (cgc, antialias_p); */ } /* Pushes a GC context; sets color to the foreground color. */ static void set_fg_gc (Display *dpy, GC gc) { set_color_gc (dpy, gc, gc->gcv.foreground); } static void next_point(short *v, XPoint p, int mode) { switch (mode) { case CoordModeOrigin: v[0] = p.x; v[1] = p.y; break; case CoordModePrevious: v[0] += p.x; v[1] += p.y; break; default: Assert (False, "next_point: bad mode"); break; } } int XDrawPoints (Display *dpy, Drawable d, GC gc, XPoint *points, int count, int mode) { jwxyz_bind_drawable (dpy, dpy->main_window, d); set_fg_gc (dpy, gc); /* glBegin(GL_POINTS); for (unsigned i = 0; i < count; i++) { next_point(v, points[i], mode); glVertex2f(v[0] + 0.5f, v[1] + 0.5f); } glEnd(); */ short v[2] = {0, 0}; // TODO: XPoints can be fed directly to OpenGL. GLshort *gl_points = malloc (count * 2 * sizeof(GLshort)); // TODO: malloc returns NULL. for (unsigned i = 0; i < count; i++) { next_point (v, points[i], mode); gl_points[2 * i] = v[0]; gl_points[2 * i + 1] = v[1]; } glMatrixMode (GL_MODELVIEW); glTranslatef (0.5, 0.5, 0); glEnableClientState (GL_VERTEX_ARRAY); glDisableClientState (GL_TEXTURE_COORD_ARRAY); glVertexPointer (2, GL_SHORT, 0, gl_points); glDrawArrays (GL_POINTS, 0, count); free (gl_points); glLoadIdentity (); return 0; } static GLint texture_internalformat(Display *dpy) { #ifdef HAVE_JWZGLES return dpy->screen->pixel_format; #else return GL_RGBA; #endif } static GLenum gl_pixel_type(const Display *dpy) { return dpy->screen->pixel_type; } static void clear_texture (Display *dpy) { glTexImage2D (dpy->gl_texture_target, 0, texture_internalformat(dpy), 0, 0, 0, dpy->screen->pixel_format, gl_pixel_type (dpy), NULL); } static void set_white (void) { #ifdef HAVE_JWZGLES glColor4f (1, 1, 1, 1); #else glColor3ub (0xff, 0xff, 0xff); #endif } static GLsizei to_pow2 (size_t x); void jwxyz_gl_copy_area_copy_tex_image (Display *dpy, Drawable src, Drawable dst, GC gc, int src_x, int src_y, unsigned int width, unsigned int height, int dst_x, int dst_y) { const XRectangle *src_frame = jwxyz_frame (src); Assert(gc->gcv.function == GXcopy, "XCopyArea: Unknown function"); jwxyz_bind_drawable (dpy, dpy->main_window, src); # if defined HAVE_COCOA && !defined USE_IPHONE /* TODO: Does this help? */ /* glFinish(); */ # endif unsigned tex_w = width, tex_h = height; if (!dpy->gl_texture_npot_p) { tex_w = to_pow2(tex_w); tex_h = to_pow2(tex_h); } GLint internalformat = texture_internalformat(dpy); glBindTexture (dpy->gl_texture_target, dpy->rect_texture); if (tex_w == width && tex_h == height) { glCopyTexImage2D (dpy->gl_texture_target, 0, internalformat, src_x, src_frame->height - src_y - height, width, height, 0); } else { glTexImage2D (dpy->gl_texture_target, 0, internalformat, tex_w, tex_h, 0, dpy->screen->pixel_format, gl_pixel_type(dpy), NULL); glCopyTexSubImage2D (dpy->gl_texture_target, 0, 0, 0, src_x, src_frame->height - src_y - height, width, height); } jwxyz_bind_drawable (dpy, dpy->main_window, dst); set_white (); glBindTexture (dpy->gl_texture_target, dpy->rect_texture); glEnable (dpy->gl_texture_target); glEnableClientState (GL_TEXTURE_COORD_ARRAY); glEnableClientState (GL_VERTEX_ARRAY); /* TODO: Copied from XPutImage. Refactor. */ /* TODO: EXT_draw_texture or whatever it's called. */ GLfloat vertices[4][2] = { {dst_x, dst_y}, {dst_x, dst_y + height}, {dst_x + width, dst_y + height}, {dst_x + width, dst_y} }; #ifdef HAVE_JWZGLES static const GLshort tex_coords[4][2] = {{0, 1}, {0, 0}, {1, 0}, {1, 1}}; #else GLshort tex_coords[4][2] = {{0, height}, {0, 0}, {width, 0}, {width, height}}; #endif glVertexPointer (2, GL_FLOAT, 0, vertices); glTexCoordPointer (2, GL_SHORT, 0, tex_coords); glDrawArrays (GL_TRIANGLE_FAN, 0, 4); clear_texture (dpy); glDisable (dpy->gl_texture_target); } void jwxyz_gl_copy_area_read_pixels (Display *dpy, Drawable src, Drawable dst, GC gc, int src_x, int src_y, unsigned int width, unsigned int height, int dst_x, int dst_y) { # if 1 XImage *img = XGetImage (dpy, src, src_x, src_y, width, height, ~0, ZPixmap); XPutImage (dpy, dst, gc, img, 0, 0, dst_x, dst_y, width, height); XDestroyImage (img); # endif # if 0 /* Something may or may not be broken in here. (shrug) */ bind_drawable(dpy, src); /* Error checking would be nice. */ void *pixels = malloc (src_rect.size.width * 4 * src_rect.size.height); glPixelStorei (GL_PACK_ROW_LENGTH, 0); glPixelStorei (GL_PACK_ALIGNMENT, 4); glReadPixels (src_rect.origin.x, dst_frame.size.height - (src_rect.origin.y + src_rect.size.height), src_rect.size.width, src_rect.size.height, GL_RGBA, GL_UNSIGNED_BYTE, // TODO: Pick better formats. pixels); bind_drawable (dpy, dst); glPixelZoom (1.0f, 1.0f); glPixelStorei (GL_UNPACK_ROW_LENGTH, 0); glPixelStorei (GL_UNPACK_ALIGNMENT, 4); glRasterPos2i (dst_rect.origin.x, dst_rect.origin.y + dst_rect.size.height); glDrawPixels (dst_rect.size.width, dst_rect.size.height, GL_RGBA, GL_UNSIGNED_BYTE, pixels); free(pixels); # endif } #if 0 // TODO: Make sure offset works in super-sampled mode. static void adjust_point_for_line (GC gc, CGPoint *p) { // Here's the authoritative discussion on how X draws lines: // http://www.x.org/releases/current/doc/xproto/x11protocol.html#requests:CreateGC:line-width if (gc->gcv.line_width <= 1) { /* Thin lines are "drawn using an unspecified, device-dependent algorithm", but seriously though, Bresenham's algorithm. Bresenham's algorithm runs to and from pixel centers. There's a few screenhacks (Maze, at the very least) that set line_width to 1 when it probably should be set to 0, so it's line_width <= 1 instead of < 1. */ p->x += 0.5; p->y -= 0.5; } else { /* Thick lines OTOH run from the upper-left corners of pixels. This means that a horizontal thick line of width 1 straddles two scan lines. Aliasing requires one of these scan lines be chosen; the following nudges the point so that the right choice is made. */ p->y -= 1e-3; } } #endif int XDrawLine (Display *dpy, Drawable d, GC gc, int x1, int y1, int x2, int y2) { // TODO: XDrawLine == XDrawSegments(nlines == 1), also in jwxyz.m XSegment segment; segment.x1 = x1; segment.y1 = y1; segment.x2 = x2; segment.y2 = y2; XDrawSegments (dpy, d, gc, &segment, 1); // when drawing a zero-length line, obey line-width and cap-style. /* if (x1 == x2 && y1 == y2) { int w = gc->gcv.line_width; x1 -= w/2; y1 -= w/2; if (gc->gcv.line_width > 1 && gc->gcv.cap_style == CapRound) return XFillArc (dpy, d, gc, x1, y1, w, w, 0, 360*64); else { if (!w) w = 1; // Actually show zero-length lines. return XFillRectangle (dpy, d, gc, x1, y1, w, w); } } CGPoint p = point_for_line (d, gc, x1, y1); push_fg_gc (dpy, d, gc, NO); CGContextRef cgc = d->cgc; set_line_mode (cgc, &gc->gcv); CGContextBeginPath (cgc); CGContextMoveToPoint (cgc, p.x, p.y); p = point_for_line(d, gc, x2, y2); CGContextAddLineToPoint (cgc, p.x, p.y); CGContextStrokePath (cgc); pop_gc (d, gc); invalidate_drawable_cache (d); */ return 0; } int XDrawLines (Display *dpy, Drawable d, GC gc, XPoint *points, int count, int mode) { jwxyz_bind_drawable (dpy, dpy->main_window, d); set_fg_gc (dpy, gc); /* TODO: Thick lines * Zero-length line segments * Paths with zero length total (Remember line width, cap style.) * Closed loops */ if (!count) return 0; GLshort *vertices = malloc(2 * sizeof(GLshort) * count); // TODO malloc NULL sigh glMatrixMode (GL_MODELVIEW); glTranslatef (0.5f, 0.5f, 0); short p[2] = {0, 0}; for (unsigned i = 0; i < count; i++) { next_point (p, points[i], mode); vertices[2 * i] = p[0]; vertices[2 * i + 1] = p[1]; } glEnableClientState (GL_VERTEX_ARRAY); glDisableClientState (GL_TEXTURE_COORD_ARRAY); glVertexPointer (2, GL_SHORT, 0, vertices); glDrawArrays (GL_LINE_STRIP, 0, count); free (vertices); if (gc->gcv.cap_style != CapNotLast) { // TODO: How does this look with multisampling? // TODO: Disable me for closed loops. glVertexPointer (2, GL_SHORT, 0, p); glDrawArrays (GL_POINTS, 0, 1); } glLoadIdentity (); return 0; } int XDrawSegments (Display *dpy, Drawable d, GC gc, XSegment *segments, int count) { jwxyz_bind_drawable (dpy, dpy->main_window, d); set_fg_gc (dpy, gc); /* TODO: Thick lines. */ /* Thin lines <= 1px are offset by +0.5; thick lines are not. */ glMatrixMode (GL_MODELVIEW); glTranslatef (0.5, 0.5, 0); glEnableClientState (GL_VERTEX_ARRAY); glDisableClientState (GL_TEXTURE_COORD_ARRAY); Assert (sizeof(XSegment) == sizeof(short) * 4, "XDrawSegments: Data alignment mix-up."); // TODO: Static assert here. Assert (sizeof(GLshort) == sizeof(short), "XDrawSegments: Data alignment mix-up."); // TODO: Static assert here. Assert (offsetof(XSegment, x1) == 0, "XDrawSegments: Data alignment mix-up."); Assert (offsetof(XSegment, x2) == 4, "XDrawSegments: Data alignment mix-up."); glVertexPointer (2, GL_SHORT, 0, segments); glDrawArrays (GL_LINES, 0, count * 2); if (gc->gcv.cap_style != CapNotLast) { glVertexPointer (2, GL_SHORT, sizeof(GLshort) * 4, (const GLshort *)segments + 2); glDrawArrays (GL_POINTS, 0, count); } glLoadIdentity (); /* CGRect wr = d->frame; push_fg_gc (dpy, d, gc, NO); set_line_mode (cgc, &gc->gcv); CGContextBeginPath (cgc); for (i = 0; i < count; i++) { CGPoint p = point_for_line (d, gc, segments->x1, segments->y1); CGContextMoveToPoint (cgc, p.x, p.y); p = point_for_line (d, gc, segments->x2, segments->y2); CGContextAddLineToPoint (cgc, p.x, p.y); segments++; } CGContextStrokePath (cgc); pop_gc (d, gc); invalidate_drawable_cache (d); */ return 0; } int XClearWindow (Display *dpy, Window win) { Assert (win == dpy->main_window, "not a window"); const XRectangle *wr = jwxyz_frame (win); /* TODO: Use glClear if there's no background pixmap. */ return XClearArea (dpy, win, 0, 0, wr->width, wr->height, 0); } unsigned long jwxyz_window_background (Display *dpy) { return dpy->window_background; } int XSetWindowBackground (Display *dpy, Window w, unsigned long pixel) { Assert (w == dpy->main_window, "not a window"); jwxyz_validate_pixel (dpy, pixel, visual_depth (NULL, NULL), False); dpy->window_background = pixel; return 0; } void jwxyz_fill_rects (Display *dpy, Drawable d, GC gc, const XRectangle *rectangles, unsigned long nrectangles, unsigned long pixel) { jwxyz_bind_drawable (dpy, dpy->main_window, d); set_color_gc (dpy, gc, pixel); /* glBegin(GL_QUADS); for (unsigned i = 0; i != nrectangles; ++i) { const XRectangle *r = &rectangles[i]; glVertex2i(r->x, r->y); glVertex2i(r->x, r->y + r->height); glVertex2i(r->x + r->width, r->y + r->height); glVertex2i(r->x + r->width, r->y); } glEnd(); */ glEnableClientState (GL_VERTEX_ARRAY); glDisableClientState (GL_TEXTURE_COORD_ARRAY); for (unsigned long i = 0; i != nrectangles; ++i) { const XRectangle *r = &rectangles[i]; GLfloat coords[4][2] = { {r->x, r->y}, {r->x, r->y + r->height}, {r->x + r->width, r->y + r->height}, {r->x + r->width, r->y} }; // TODO: Several rects at once. Maybe even tune for XScreenSaver workloads. glVertexPointer (2, GL_FLOAT, 0, coords); jwxyz_assert_gl (); glDrawArrays (GL_TRIANGLE_FAN, 0, 4); jwxyz_assert_gl (); } } int XClearArea (Display *dpy, Window win, int x, int y, int w, int h, Bool exp) { Assert(win == dpy->main_window, "XClearArea: not a window"); Assert(!exp, "XClearArea: exposures unsupported"); jwxyz_fill_rect (dpy, win, 0, x, y, w, h, dpy->window_background); return 0; } int XFillPolygon (Display *dpy, Drawable d, GC gc, XPoint *points, int npoints, int shape, int mode) { jwxyz_bind_drawable (dpy, dpy->main_window, d); set_fg_gc(dpy, gc); // TODO: Re-implement the GLU tesselation functions. /* Complex: Pedal, and for some reason Attraction, Mountain, Qix, SpeedMine, Starfish * Nonconvex: Goop, Pacman, Rocks, Speedmine */ Assert(shape == Convex, "XFillPolygon: (TODO) Unimplemented shape"); // TODO: Feed vertices straight to OpenGL for CoordModeOrigin. GLshort *vertices = malloc(npoints * sizeof(GLshort) * 2); // TODO: Oh look, another unchecked malloc. short v[2] = {0, 0}; for (unsigned i = 0; i < npoints; i++) { next_point(v, points[i], mode); vertices[2 * i] = v[0]; vertices[2 * i + 1] = v[1]; } glEnableClientState (GL_VERTEX_ARRAY); glDisableClientState (GL_TEXTURE_COORD_ARRAY); glVertexPointer (2, GL_SHORT, 0, vertices); glDrawArrays (GL_TRIANGLE_FAN, 0, npoints); free(vertices); /* CGRect wr = d->frame; int i; push_fg_gc (dpy, d, gc, YES); CGContextRef cgc = d->cgc; CGContextBeginPath (cgc); float x = 0, y = 0; for (i = 0; i < npoints; i++) { if (i > 0 && mode == CoordModePrevious) { x += points[i].x; y -= points[i].y; } else { x = wr.origin.x + points[i].x; y = wr.origin.y + wr.size.height - points[i].y; } if (i == 0) CGContextMoveToPoint (cgc, x, y); else CGContextAddLineToPoint (cgc, x, y); } CGContextClosePath (cgc); if (gc->gcv.fill_rule == EvenOddRule) CGContextEOFillPath (cgc); else CGContextFillPath (cgc); pop_gc (d, gc); invalidate_drawable_cache (d); */ return 0; } #define radians(DEG) ((DEG) * M_PI / 180.0) #define degrees(RAD) ((RAD) * 180.0 / M_PI) static void arc_xy(GLfloat *p, double cx, double cy, double w2, double h2, double theta) { p[0] = cos(theta) * w2 + cx; p[1] = -sin(theta) * h2 + cy; } static unsigned mod_neg(int a, unsigned b) { /* Normal modulus is implementation defined for negative numbers. This is * well-defined such that the repeating pattern for a >= 0 is maintained for * a < 0. */ return a < 0 ? (b - 1) - (-(a + 1) % b) : a % b; } int jwxyz_draw_arc (Display *dpy, Drawable d, GC gc, int x, int y, unsigned int width, unsigned int height, int angle1, int angle2, Bool fill_p) { jwxyz_bind_drawable (dpy, dpy->main_window, d); set_fg_gc(dpy, gc); /* Let's say the number of line segments needed to make a convincing circle is 4*sqrt(radius). (But these arcs aren't necessarily circular arcs...) */ double w2 = width * 0.5f, h2 = height * 0.5f; double a, b; /* Semi-major/minor axes. */ if(w2 > h2) { a = w2; b = h2; } else { a = h2; b = w2; } const double two_pi = 2 * M_PI; double amb = a - b, apb = a + b; double h = (amb * amb) / (apb * apb); // TODO: Math cleanup. double C_approx = M_PI * apb * (1 + 3 * h / (10 + sqrtf(4 - 3 * h))); double segments_f = 4 * sqrtf(C_approx / (2 * M_PI)); // TODO: Explain how drawing works what with the points of overlapping arcs // matching up. #if 1 unsigned segments_360 = segments_f; /* TODO: angle2 == 0. This is a tilted square with CapSquare. */ /* TODO: color, thick lines, CapNotLast for thin lines */ /* TODO: Transformations. */ double segment_angle = two_pi / segments_360; const unsigned deg64 = 360 * 64; const double rad_from_deg64 = two_pi / deg64; if (angle2 < 0) { angle1 += angle2; angle2 = -angle2; } angle1 = mod_neg(angle1, deg64); // TODO: Is this OK? Consider negative numbers. if (angle2 > deg64) angle2 = deg64; // TODO: Handle circles special. double angle1_f = angle1 * rad_from_deg64, angle2_f = angle2 * rad_from_deg64; if (angle2_f > two_pi) // TODO: Move this up. angle2_f = two_pi; double segment1_angle_part = fmodf(angle1_f, segment_angle); unsigned segment1 = ((angle1_f - segment1_angle_part) / segment_angle) + 1.5; double angle_2r = angle2_f - segment1_angle_part; unsigned segments = angle_2r / segment_angle; GLfloat cx = x + w2, cy = y + h2; GLfloat *data = malloc((segments + 3) * sizeof(GLfloat) * 2); // TODO: Check result. GLfloat *data_ptr = data; if (fill_p) { data_ptr[0] = cx; data_ptr[1] = cy; data_ptr += 2; } arc_xy (data_ptr, cx, cy, w2, h2, angle1_f); data_ptr += 2; for (unsigned s = 0; s != segments; ++s) { // TODO: Make sure values of theta for the following arc_xy call are between // angle1_f and angle1_f + angle2_f. arc_xy (data_ptr, cx, cy, w2, h2, (segment1 + s) * segment_angle); data_ptr += 2; } arc_xy (data_ptr, cx, cy, w2, h2, angle1_f + angle2_f); data_ptr += 2; glDisableClientState (GL_TEXTURE_COORD_ARRAY); glEnableClientState (GL_VERTEX_ARRAY); glVertexPointer (2, GL_FLOAT, 0, data); glDrawArrays (fill_p ? GL_TRIANGLE_FAN : GL_LINE_STRIP, 0, (GLsizei)((data_ptr - data) / 2)); free(data); #endif #if 0 unsigned segments = segments_f * (fabs(angle2) / (360 * 64)); glBegin (fill_p ? GL_TRIANGLE_FAN : GL_LINE_STRIP); if (fill_p /* && gc->gcv.arc_mode == ArcPieSlice */) glVertex2f (cx, cy); /* TODO: This should fix the middle points of the arc so that the starting and ending points are OK. */ float to_radians = 2 * M_PI / (360 * 64); float theta = angle1 * to_radians, d_theta = angle2 * to_radians / segments; for (unsigned s = 0; s != segments + 1; ++s) /* TODO: This is the right number of segments, yes? */ { glVertex2f(cos(theta) * w2 + cx, -sin(theta) * h2 + cy); theta += d_theta; } glEnd (); #endif return 0; } XGCValues * jwxyz_gc_gcv (GC gc) { return &gc->gcv; } unsigned int jwxyz_gc_depth (GC gc) { return gc->depth; } GC XCreateGC (Display *dpy, Drawable d, unsigned long mask, XGCValues *xgcv) { struct jwxyz_GC *gc = (struct jwxyz_GC *) calloc (1, sizeof(*gc)); gc->depth = jwxyz_drawable_depth (d); jwxyz_gcv_defaults (dpy, &gc->gcv, gc->depth); XChangeGC (dpy, gc, mask, xgcv); return gc; } int XFreeGC (Display *dpy, GC gc) { if (gc->gcv.font) XUnloadFont (dpy, gc->gcv.font); // TODO /* Assert (!!gc->gcv.clip_mask == !!gc->clip_mask, "GC clip mask mixup"); if (gc->gcv.clip_mask) { XFreePixmap (dpy, gc->gcv.clip_mask); CGImageRelease (gc->clip_mask); } */ free (gc); return 0; } /* static void flipbits (unsigned const char *in, unsigned char *out, int length) { static const unsigned char table[256] = { 0x00, 0x80, 0x40, 0xC0, 0x20, 0xA0, 0x60, 0xE0, 0x10, 0x90, 0x50, 0xD0, 0x30, 0xB0, 0x70, 0xF0, 0x08, 0x88, 0x48, 0xC8, 0x28, 0xA8, 0x68, 0xE8, 0x18, 0x98, 0x58, 0xD8, 0x38, 0xB8, 0x78, 0xF8, 0x04, 0x84, 0x44, 0xC4, 0x24, 0xA4, 0x64, 0xE4, 0x14, 0x94, 0x54, 0xD4, 0x34, 0xB4, 0x74, 0xF4, 0x0C, 0x8C, 0x4C, 0xCC, 0x2C, 0xAC, 0x6C, 0xEC, 0x1C, 0x9C, 0x5C, 0xDC, 0x3C, 0xBC, 0x7C, 0xFC, 0x02, 0x82, 0x42, 0xC2, 0x22, 0xA2, 0x62, 0xE2, 0x12, 0x92, 0x52, 0xD2, 0x32, 0xB2, 0x72, 0xF2, 0x0A, 0x8A, 0x4A, 0xCA, 0x2A, 0xAA, 0x6A, 0xEA, 0x1A, 0x9A, 0x5A, 0xDA, 0x3A, 0xBA, 0x7A, 0xFA, 0x06, 0x86, 0x46, 0xC6, 0x26, 0xA6, 0x66, 0xE6, 0x16, 0x96, 0x56, 0xD6, 0x36, 0xB6, 0x76, 0xF6, 0x0E, 0x8E, 0x4E, 0xCE, 0x2E, 0xAE, 0x6E, 0xEE, 0x1E, 0x9E, 0x5E, 0xDE, 0x3E, 0xBE, 0x7E, 0xFE, 0x01, 0x81, 0x41, 0xC1, 0x21, 0xA1, 0x61, 0xE1, 0x11, 0x91, 0x51, 0xD1, 0x31, 0xB1, 0x71, 0xF1, 0x09, 0x89, 0x49, 0xC9, 0x29, 0xA9, 0x69, 0xE9, 0x19, 0x99, 0x59, 0xD9, 0x39, 0xB9, 0x79, 0xF9, 0x05, 0x85, 0x45, 0xC5, 0x25, 0xA5, 0x65, 0xE5, 0x15, 0x95, 0x55, 0xD5, 0x35, 0xB5, 0x75, 0xF5, 0x0D, 0x8D, 0x4D, 0xCD, 0x2D, 0xAD, 0x6D, 0xED, 0x1D, 0x9D, 0x5D, 0xDD, 0x3D, 0xBD, 0x7D, 0xFD, 0x03, 0x83, 0x43, 0xC3, 0x23, 0xA3, 0x63, 0xE3, 0x13, 0x93, 0x53, 0xD3, 0x33, 0xB3, 0x73, 0xF3, 0x0B, 0x8B, 0x4B, 0xCB, 0x2B, 0xAB, 0x6B, 0xEB, 0x1B, 0x9B, 0x5B, 0xDB, 0x3B, 0xBB, 0x7B, 0xFB, 0x07, 0x87, 0x47, 0xC7, 0x27, 0xA7, 0x67, 0xE7, 0x17, 0x97, 0x57, 0xD7, 0x37, 0xB7, 0x77, 0xF7, 0x0F, 0x8F, 0x4F, 0xCF, 0x2F, 0xAF, 0x6F, 0xEF, 0x1F, 0x9F, 0x5F, 0xDF, 0x3F, 0xBF, 0x7F, 0xFF }; while (length-- > 0) *out++ = table[*in++]; } */ // Copied and pasted from OSX/XScreenSaverView.m static GLsizei to_pow2 (size_t x) { if (x <= 1) return 1; size_t mask = (size_t)-1; unsigned bits = sizeof(x) * CHAR_BIT; unsigned log2 = bits; --x; while (bits) { if (!(x & mask)) { log2 -= bits; x <<= bits; } bits >>= 1; mask <<= bits; } return 1 << log2; } int XPutImage (Display *dpy, Drawable d, GC gc, XImage *ximage, int src_x, int src_y, int dest_x, int dest_y, unsigned int w, unsigned int h) { jwxyz_assert_display (dpy); const XRectangle *wr = jwxyz_frame (d); Assert (gc, "no GC"); Assert ((w < 65535), "improbably large width"); Assert ((h < 65535), "improbably large height"); Assert ((src_x < 65535 && src_x > -65535), "improbably large src_x"); Assert ((src_y < 65535 && src_y > -65535), "improbably large src_y"); Assert ((dest_x < 65535 && dest_x > -65535), "improbably large dest_x"); Assert ((dest_y < 65535 && dest_y > -65535), "improbably large dest_y"); // Clip width and height to the bounds of the Drawable // if (dest_x + w > wr->width) { if (dest_x > wr->width) return 0; w = wr->width - dest_x; } if (dest_y + h > wr->height) { if (dest_y > wr->height) return 0; h = wr->height - dest_y; } if (w <= 0 || h <= 0) return 0; // Clip width and height to the bounds of the XImage // if (src_x + w > ximage->width) { if (src_x > ximage->width) return 0; w = ximage->width - src_x; } if (src_y + h > ximage->height) { if (src_y > ximage->height) return 0; h = ximage->height - src_y; } if (w <= 0 || h <= 0) return 0; /* Assert (d->win */ if (jwxyz_dumb_drawing_mode(dpy, d, gc, dest_x, dest_y, w, h)) return 0; jwxyz_bind_drawable (dpy, dpy->main_window, d); int bpl = ximage->bytes_per_line; int bpp = ximage->bits_per_pixel; /* int bsize = bpl * h; */ char *data = ximage->data; /* CGRect r; r.origin.x = wr->x + dest_x; r.origin.y = wr->y + wr->height - dest_y - h; r.size.width = w; r.size.height = h; */ Assert (gc->gcv.function == GXcopy, "XPutImage: (TODO) GC function not supported"); Assert (!gc->gcv.clip_mask, "XPutImage: (TODO) GC clip mask not supported"); if (bpp == 32) { /* Take advantage of the fact that it's ok for (bpl != w * bpp) to create a CGImage from a sub-rectagle of the XImage. */ data += (src_y * bpl) + (src_x * 4); jwxyz_assert_display(dpy); /* There probably won't be any hacks that do this, but... */ Assert (!(bpl % 4), "XPutImage: bytes_per_line not divisible by four."); unsigned src_w = bpl / 4; /* GL_UNPACK_ROW_LENGTH is not allowed to be negative. (sigh) */ # ifndef HAVE_JWZGLES glPixelStorei (GL_UNPACK_ROW_LENGTH, src_w); src_w = w; # endif glPixelStorei (GL_UNPACK_ALIGNMENT, 4); # if 1 // defined HAVE_JWZGLES // Regular OpenGL uses GL_TEXTURE_RECTANGLE_EXT in place of GL_TEXTURE_2D. // TODO: Make use of OES_draw_texture. // TODO: Coords might be wrong; things might be upside-down or backwards // or whatever. unsigned tex_w = src_w, tex_h = h; if (!dpy->gl_texture_npot_p) { tex_w = to_pow2(tex_w); tex_h = to_pow2(tex_h); } GLint internalformat = texture_internalformat(dpy); glBindTexture (dpy->gl_texture_target, dpy->rect_texture); if (tex_w == src_w && tex_h == h) { glTexImage2D (dpy->gl_texture_target, 0, internalformat, tex_w, tex_h, 0, dpy->screen->pixel_format, gl_pixel_type(dpy), data); } else { // TODO: Sampling the last row might be a problem if src_x != 0. glTexImage2D (dpy->gl_texture_target, 0, internalformat, tex_w, tex_h, 0, dpy->screen->pixel_format, gl_pixel_type(dpy), NULL); glTexSubImage2D (dpy->gl_texture_target, 0, 0, 0, src_w, h, dpy->screen->pixel_format, gl_pixel_type(dpy), data); } set_white (); // glEnable (dpy->gl_texture_target); // glColor4f (0.5, 0, 1, 1); glEnable (dpy->gl_texture_target); glEnableClientState (GL_VERTEX_ARRAY); glEnableClientState (GL_TEXTURE_COORD_ARRAY); // TODO: Why are these ever turned on in the first place? glDisableClientState (GL_COLOR_ARRAY); glDisableClientState (GL_NORMAL_ARRAY); // glDisableClientState (GL_TEXTURE_COORD_ARRAY); GLfloat vertices[4][2] = { {dest_x, dest_y}, {dest_x, dest_y + h}, {dest_x + w, dest_y + h}, {dest_x + w, dest_y} }; GLfloat texcoord_w, texcoord_h; # ifndef HAVE_JWZGLES if (dpy->gl_texture_target == GL_TEXTURE_RECTANGLE_EXT) { texcoord_w = w; texcoord_h = h; } else # endif /* HAVE_JWZGLES */ { texcoord_w = (double)w / tex_w; texcoord_h = (double)h / tex_h; } GLfloat tex_coords[4][2]; tex_coords[0][0] = 0; tex_coords[0][1] = 0; tex_coords[1][0] = 0; tex_coords[1][1] = texcoord_h; tex_coords[2][0] = texcoord_w; tex_coords[2][1] = texcoord_h; tex_coords[3][0] = texcoord_w; tex_coords[3][1] = 0; glVertexPointer (2, GL_FLOAT, 0, vertices); glTexCoordPointer (2, GL_FLOAT, 0, tex_coords); // Respect the alpha channel in the XImage if we're using alpha. if (gc->gcv.alpha_allowed_p) { glEnable (GL_BLEND); glBlendFunc (GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); } glDrawArrays (GL_TRIANGLE_FAN, 0, 4); if (gc->gcv.alpha_allowed_p) glDisable (GL_BLEND); // clear_texture(); glDisable (dpy->gl_texture_target); # else glRasterPos2i (dest_x, dest_y); glPixelZoom (1, -1); jwxyz_assert_display (dpy); glDrawPixels (w, h, dpy->screen->pixel_format, gl_pixel_type(dpy), data); # endif } else { // (bpp == 1) // Assert(FALSE, "XPutImage: TODO"); // Check out ximage_(get|put)pixel_1 #if 0 /* To draw a 1bpp image, we use it as a mask and fill two rectangles. #### However, the bit order within a byte in a 1bpp XImage is the wrong way around from what Quartz expects, so first we have to copy the data to reverse it. Shit! Maybe it would be worthwhile to go through the hacks and #ifdef each one that diddles 1bpp XImage->data directly... */ Assert ((src_x % 8) == 0, "XPutImage with non-byte-aligned 1bpp X offset not implemented"); data += (src_y * bpl) + (src_x / 8); // move to x,y within the data unsigned char *flipped = (unsigned char *) malloc (bsize); flipbits ((unsigned char *) data, flipped, bsize); CGDataProviderRef prov = CGDataProviderCreateWithData (NULL, flipped, bsize, NULL); CGImageRef mask = CGImageMaskCreate (w, h, 1, bpp, bpl, prov, NULL, /* decode[] */ GL_FALSE); /* interpolate */ push_fg_gc (dpy, d, gc, GL_TRUE); CGContextFillRect (cgc, r); // foreground color CGContextClipToMask (cgc, r, mask); set_color (dpy, cgc, gc->gcv.background, gc->depth, GL_FALSE, GL_TRUE); CGContextFillRect (cgc, r); // background color pop_gc (d, gc); free (flipped); CGDataProviderRelease (prov); CGImageRelease (mask); #endif } jwxyz_assert_gl (); invalidate_drawable_cache (d); return 0; } /* At the moment nothing actually uses XGetSubImage. */ /* #### Actually lots of things call XGetImage, which calls XGetSubImage. E.g., Twang calls XGetImage on the window intending to get a buffer full of black. This is returning a buffer full of white instead of black for some reason. */ static XImage * XGetSubImage (Display *dpy, Drawable d, int x, int y, unsigned int width, unsigned int height, unsigned long plane_mask, int format, XImage *dest_image, int dest_x, int dest_y) { Assert ((width < 65535), "improbably large width"); Assert ((height < 65535), "improbably large height"); Assert ((x < 65535 && x > -65535), "improbably large x"); Assert ((y < 65535 && y > -65535), "improbably large y"); jwxyz_bind_drawable (dpy, dpy->main_window, d); // TODO: What if this reads off the edge? What is supposed to happen? { // In case the caller tries to write off the edge. int max_width = dest_image->width - dest_x, max_height = dest_image->height - dest_y; if (width > max_width) { width = max_width; } if (height > max_height) { height = max_height; } } Assert (jwxyz_drawable_depth (d) == dest_image->depth, "XGetSubImage: depth mismatch"); if (dest_image->depth == visual_depth (NULL, NULL)) { Assert (!(dest_image->bytes_per_line % 4), "XGetSubImage: bytes_per_line not divisible by 4"); unsigned pixels_per_line = dest_image->bytes_per_line / 4; #ifdef HAVE_JWZGLES Assert (pixels_per_line == width, "XGetSubImage: (TODO) pixels_per_line != width"); #else glPixelStorei (GL_PACK_ROW_LENGTH, pixels_per_line); #endif glPixelStorei (GL_PACK_ALIGNMENT, 4); uint32_t *dest_data = (uint32_t *)dest_image->data + pixels_per_line * dest_y + dest_x; glReadPixels (x, jwxyz_frame (d)->height - (y + height), width, height, dpy->screen->pixel_format, gl_pixel_type(dpy), dest_data); /* Flip this upside down. :( */ uint32_t *top = dest_data; uint32_t *bottom = dest_data + pixels_per_line * (height - 1); for (unsigned y = height / 2; y; --y) { for (unsigned x = 0; x != width; ++x) { uint32_t px = top[x]; top[x] = bottom[x]; bottom[x] = px; } top += pixels_per_line; bottom -= pixels_per_line; } } else { /* TODO: Actually get pixels. */ Assert (!(dest_x % 8), "XGetSubImage: dest_x not byte-aligned"); uint8_t *dest_data = (uint8_t *)dest_image->data + dest_image->bytes_per_line * dest_y + dest_x / 8; for (unsigned y = height / 2; y; --y) { memset (dest_data, y & 1 ? 0x55 : 0xAA, width / 8); dest_data += dest_image->bytes_per_line; } } return dest_image; } XImage * XGetImage (Display *dpy, Drawable d, int x, int y, unsigned int width, unsigned int height, unsigned long plane_mask, int format) { unsigned depth = jwxyz_drawable_depth (d); XImage *image = XCreateImage (dpy, 0, depth, format, 0, 0, width, height, 0, 0); image->data = (char *) malloc (height * image->bytes_per_line); return XGetSubImage (dpy, d, x, y, width, height, plane_mask, format, image, 0, 0); } /* Returns a transformation matrix to do rotation as per the provided EXIF "Orientation" value. */ /* static CGAffineTransform exif_rotate (int rot, CGSize rect) { CGAffineTransform trans = CGAffineTransformIdentity; switch (rot) { case 2: // flip horizontal trans = CGAffineTransformMakeTranslation (rect.width, 0); trans = CGAffineTransformScale (trans, -1, 1); break; case 3: // rotate 180 trans = CGAffineTransformMakeTranslation (rect.width, rect.height); trans = CGAffineTransformRotate (trans, M_PI); break; case 4: // flip vertical trans = CGAffineTransformMakeTranslation (0, rect.height); trans = CGAffineTransformScale (trans, 1, -1); break; case 5: // transpose (UL-to-LR axis) trans = CGAffineTransformMakeTranslation (rect.height, rect.width); trans = CGAffineTransformScale (trans, -1, 1); trans = CGAffineTransformRotate (trans, 3 * M_PI / 2); break; case 6: // rotate 90 trans = CGAffineTransformMakeTranslation (0, rect.width); trans = CGAffineTransformRotate (trans, 3 * M_PI / 2); break; case 7: // transverse (UR-to-LL axis) trans = CGAffineTransformMakeScale (-1, 1); trans = CGAffineTransformRotate (trans, M_PI / 2); break; case 8: // rotate 270 trans = CGAffineTransformMakeTranslation (rect.height, 0); trans = CGAffineTransformRotate (trans, M_PI / 2); break; default: break; } return trans; } */ void jwxyz_draw_NSImage_or_CGImage (Display *dpy, Drawable d, Bool nsimg_p, void *img_arg, XRectangle *geom_ret, int exif_rotation) { Assert (False, "jwxyz_draw_NSImage_or_CGImage: TODO stub"); #if 0 CGImageRef cgi; # ifndef USE_IPHONE CGImageSourceRef cgsrc; # endif // USE_IPHONE NSSize imgr; CGContextRef cgc = d->cgc; if (nsimg_p) { NSImage *nsimg = (NSImage *) img_arg; imgr = [nsimg size]; # ifndef USE_IPHONE // convert the NSImage to a CGImage via the toll-free-bridging // of NSData and CFData... // NSData *nsdata = [NSBitmapImageRep TIFFRepresentationOfImageRepsInArray: [nsimg representations]]; CFDataRef cfdata = (CFDataRef) nsdata; cgsrc = CGImageSourceCreateWithData (cfdata, NULL); cgi = CGImageSourceCreateImageAtIndex (cgsrc, 0, NULL); # else // USE_IPHONE cgi = nsimg.CGImage; # endif // USE_IPHONE } else { cgi = (CGImageRef) img_arg; imgr.width = CGImageGetWidth (cgi); imgr.height = CGImageGetHeight (cgi); } Bool rot_p = (exif_rotation >= 5); if (rot_p) imgr = NSMakeSize (imgr.height, imgr.width); CGRect winr = d->frame; float rw = winr.size.width / imgr.width; float rh = winr.size.height / imgr.height; float r = (rw < rh ? rw : rh); CGRect dst, dst2; dst.size.width = imgr.width * r; dst.size.height = imgr.height * r; dst.origin.x = (winr.size.width - dst.size.width) / 2; dst.origin.y = (winr.size.height - dst.size.height) / 2; dst2.origin.x = dst2.origin.y = 0; if (rot_p) { dst2.size.width = dst.size.height; dst2.size.height = dst.size.width; } else { dst2.size = dst.size; } // Clear the part not covered by the image to background or black. // if (d->type == WINDOW) XClearWindow (dpy, d); else { jwxyz_fill_rect (dpy, d, 0, 0, 0, winr.size.width, winr.size.height, drawable_depth (d) == 1 ? 0 : BlackPixel(dpy,0)); } CGAffineTransform trans = exif_rotate (exif_rotation, rot_p ? dst2.size : dst.size); CGContextSaveGState (cgc); CGContextConcatCTM (cgc, CGAffineTransformMakeTranslation (dst.origin.x, dst.origin.y)); CGContextConcatCTM (cgc, trans); //Assert (CGImageGetColorSpace (cgi) == dpy->colorspace, "bad colorspace"); CGContextDrawImage (cgc, dst2, cgi); CGContextRestoreGState (cgc); # ifndef USE_IPHONE if (nsimg_p) { CFRelease (cgsrc); CGImageRelease (cgi); } # endif // USE_IPHONE if (geom_ret) { geom_ret->x = dst.origin.x; geom_ret->y = dst.origin.y; geom_ret->width = dst.size.width; geom_ret->height = dst.size.height; } invalidate_drawable_cache (d); #endif } #ifndef HAVE_JWZGLES /* static void create_rectangle_texture (GLuint *texture) { glGenTextures(1, texture); glBindTexture(GL_TEXTURE_RECTANGLE_EXT, *texture); glTexParameteri(GL_TEXTURE_RECTANGLE_EXT, GL_TEXTURE_MIN_FILTER, GL_NEAREST); glTexParameteri(GL_TEXTURE_RECTANGLE_EXT, GL_TEXTURE_MAG_FILTER, GL_NEAREST); } */ #endif #if 0 static Pixmap copy_pixmap (Display *dpy, Pixmap p) { if (!p) return 0; Assert (p->type == PIXMAP, "not a pixmap"); Pixmap p2 = 0; Window root; int x, y; unsigned int width, height, border_width, depth; if (XGetGeometry (dpy, p, &root, &x, &y, &width, &height, &border_width, &depth)) { XGCValues gcv; gcv.function = GXcopy; GC gc = XCreateGC (dpy, p, GCFunction, &gcv); if (gc) { p2 = XCreatePixmap (dpy, p, width, height, depth); if (p2) XCopyArea (dpy, p, p2, gc, 0, 0, width, height, 0, 0); XFreeGC (dpy, gc); } } Assert (p2, "could not copy pixmap"); return p2; } #endif // This is XQueryFont, but for the XFontStruct embedded in 'Font' // static void query_font (Font fid) { if (!fid || !fid->native_font) { Assert (0, "no native font in fid"); return; } int first = 32; int last = 255; Display *dpy = fid->dpy; void *native_font = fid->native_font; XFontStruct *f = &fid->metrics; XCharStruct *min = &f->min_bounds; XCharStruct *max = &f->max_bounds; f->fid = fid; f->min_char_or_byte2 = first; f->max_char_or_byte2 = last; f->default_char = 'M'; f->ascent = fid->ascent; f->descent = fid->descent; min->width = 32767; // set to smaller values in the loop min->ascent = 32767; min->descent = 32767; min->lbearing = 32767; min->rbearing = 32767; f->per_char = (XCharStruct *) calloc (last-first+2, sizeof (XCharStruct)); for (int i = first; i <= last; i++) { XCharStruct *cs = &f->per_char[i-first]; char s = (char) i; jwxyz_render_text (dpy, native_font, &s, 1, GL_FALSE, cs, 0); max->width = MAX (max->width, cs->width); max->ascent = MAX (max->ascent, cs->ascent); max->descent = MAX (max->descent, cs->descent); max->lbearing = MAX (max->lbearing, cs->lbearing); max->rbearing = MAX (max->rbearing, cs->rbearing); min->width = MIN (min->width, cs->width); min->ascent = MIN (min->ascent, cs->ascent); min->descent = MIN (min->descent, cs->descent); min->lbearing = MIN (min->lbearing, cs->lbearing); min->rbearing = MIN (min->rbearing, cs->rbearing); /* Log (" %3d %c: w=%3d lb=%3d rb=%3d as=%3d ds=%3d\n", i, i, cs->width, cs->lbearing, cs->rbearing, cs->ascent, cs->descent); */ } } // Since 'Font' includes the metrics, this just makes a copy of that. // XFontStruct * XQueryFont (Display *dpy, Font fid) { // copy XFontStruct XFontStruct *f = (XFontStruct *) calloc (1, sizeof(*f)); *f = fid->metrics; f->fid = fid; // build XFontProps f->n_properties = 1; f->properties = malloc (sizeof(*f->properties) * f->n_properties); f->properties[0].name = XA_FONT; Assert (sizeof (f->properties[0].card32) >= sizeof (char *), "atoms probably needs a real implementation"); // If XInternAtom is ever implemented, use it here. f->properties[0].card32 = (unsigned long)(char *)fid->xa_font; // copy XCharStruct array int size = (f->max_char_or_byte2 - f->min_char_or_byte2) + 1; f->per_char = (XCharStruct *) calloc (size + 2, sizeof (XCharStruct)); memcpy (f->per_char, fid->metrics.per_char, size * sizeof (XCharStruct)); return f; } static Font copy_font (Font fid) { fid->refcount++; return fid; } #if 0 static NSArray * font_family_members (NSString *family_name) { # ifndef USE_IPHONE return [[NSFontManager sharedFontManager] availableMembersOfFontFamily:family_name]; # else return [UIFont fontNamesForFamilyName:family_name]; # endif } static NSString * default_font_family (NSFontTraitMask require) { return require & NSFixedPitchFontMask ? @"Courier" : @"Verdana"; } static NSFont * try_font (NSFontTraitMask traits, NSFontTraitMask mask, NSString *family_name, float size, char **name_ret) { Assert (size > 0, "zero font size"); NSArray *family_members = font_family_members (family_name); if (!family_members.count) family_members = font_family_members (default_font_family (traits)); # ifndef USE_IPHONE for (unsigned k = 0; k != family_members.count; ++k) { NSArray *member = [family_members objectAtIndex:k]; NSFontTraitMask font_mask = [(NSNumber *)[member objectAtIndex:3] unsignedIntValue]; if ((font_mask & mask) == traits) { NSString *name = [member objectAtIndex:0]; NSFont *f = [NSFont fontWithName:name size:size]; if (!f) break; /* Don't use this font if it (probably) doesn't include ASCII characters. */ NSStringEncoding enc = [f mostCompatibleStringEncoding]; if (! (enc == NSUTF8StringEncoding || enc == NSISOLatin1StringEncoding || enc == NSNonLossyASCIIStringEncoding || enc == NSISOLatin2StringEncoding || enc == NSUnicodeStringEncoding || enc == NSWindowsCP1250StringEncoding || enc == NSWindowsCP1252StringEncoding || enc == NSMacOSRomanStringEncoding)) { // NSLog(@"skipping \"%@\": encoding = %d", name, enc); break; } // NSLog(@"using \"%@\": %d", name, enc); // *name_ret = strdup ([name cStringUsingEncoding:NSUTF8StringEncoding]); *name_ret = strdup (name.UTF8String); return f; } } # else // USE_IPHONE for (NSString *fn in family_members) { # define MATCH(X) \ ([fn rangeOfString:X options:NSCaseInsensitiveSearch].location \ != NSNotFound) // The magic invocation for getting font names is // [[UIFontDescriptor // fontDescriptorWithFontAttributes:@{UIFontDescriptorNameAttribute: name}] // symbolicTraits] // ...but this only works on iOS 7 and later. NSFontTraitMask font_mask = 0; if (MATCH(@"Bold")) font_mask |= NSBoldFontMask; if (MATCH(@"Italic") || MATCH(@"Oblique")) font_mask |= NSItalicFontMask; if ((font_mask & mask) == traits) { /* Check if it can do ASCII. No good way to accomplish this! These are fonts present in iPhone Simulator as of June 2012 that don't include ASCII. */ if (MATCH(@"AppleGothic") || // Korean MATCH(@"Dingbats") || // Dingbats MATCH(@"Emoji") || // Emoticons MATCH(@"Geeza") || // Arabic MATCH(@"Hebrew") || // Hebrew MATCH(@"HiraKaku") || // Japanese MATCH(@"HiraMin") || // Japanese MATCH(@"Kailasa") || // Tibetan MATCH(@"Ornaments") || // Dingbats MATCH(@"STHeiti") // Chinese ) break; *name_ret = strdup (fn.UTF8String); return [UIFont fontWithName:fn size:size]; } # undef MATCH } # endif return NULL; } /* On Cocoa and iOS, fonts may be specified as "Georgia Bold 24" instead of XLFD strings; also they can be comma-separated strings with multiple font names. First one that exists wins. */ static NSFont * try_native_font (const char *name, float scale, char **name_ret, float *size_ret, char **xa_font) { if (!name) return 0; const char *spc = strrchr (name, ' '); if (!spc) return 0; NSFont *f = 0; char *token = strdup (name); char *name2; while ((name2 = strtok (token, ","))) { token = 0; while (*name2 == ' ' || *name2 == '\t' || *name2 == '\n') name2++; spc = strrchr (name2, ' '); if (!spc) continue; int dsize = 0; if (1 != sscanf (spc, " %d ", &dsize)) continue; float size = dsize; if (size <= 4) continue; size *= scale; name2[strlen(name2) - strlen(spc)] = 0; NSString *nsname = [NSString stringWithCString:name2 encoding:NSUTF8StringEncoding]; f = [NSFont fontWithName:nsname size:size]; if (f) { *name_ret = name2; *size_ret = size; *xa_font = strdup (name); // Maybe this should be an XLFD? break; } else { NSLog(@"No native font: \"%@\" %.0f", nsname, size); } } free (token); return f; } /* Returns a random font in the given size and face. */ static NSFont * random_font (NSFontTraitMask traits, NSFontTraitMask mask, float size, NSString **family_ret, char **name_ret) { # ifndef USE_IPHONE // Providing Unbold or Unitalic in the mask for availableFontNamesWithTraits // returns an empty list, at least on a system with default fonts only. NSArray *families = [[NSFontManager sharedFontManager] availableFontFamilies]; if (!families) return 0; # else NSArray *families = [UIFont familyNames]; // There are many dups in the families array -- uniquify it. { NSArray *sorted_families = [families sortedArrayUsingSelector:@selector(compare:)]; NSMutableArray *new_families = [NSMutableArray arrayWithCapacity:sorted_families.count]; NSString *prev_family = nil; for (NSString *family in sorted_families) { if ([family compare:prev_family]) [new_families addObject:family]; } families = new_families; } # endif // USE_IPHONE long n = [families count]; if (n <= 0) return 0; int j; for (j = 0; j < n; j++) { int i = random() % n; NSString *family_name = [families objectAtIndex:i]; NSFont *result = try_font (traits, mask, family_name, size, name_ret); if (result) { [*family_ret release]; *family_ret = family_name; [*family_ret retain]; return result; } } // None of the fonts support ASCII? return 0; } // Fonts need this. XDisplayHeightMM and friends should probably be consistent // with this as well if they're ever implemented. static const unsigned dpi = 75; static const char * xlfd_field_end (const char *s) { const char *s2 = strchr(s, '-'); if (!s2) s2 = s + strlen(s); return s2; } static size_t xlfd_next (const char **s, const char **s2) { if (!**s2) { *s = *s2; } else { Assert (**s2 == '-', "xlfd parse error"); *s = *s2 + 1; *s2 = xlfd_field_end (*s); } return *s2 - *s; } static NSFont * try_xlfd_font (const char *name, float scale, char **name_ret, float *size_ret, char **xa_font) { NSFont *nsfont = 0; NSString *family_name = nil; NSFontTraitMask require = 0, forbid = 0; GLboolean rand = GL_FALSE; float size = 0; char *ps_name = 0; const char *s = (name ? name : ""); size_t L = strlen (s); # define CMP(STR) (L == strlen(STR) && !strncasecmp (s, (STR), L)) # define UNSPEC (L == 0 || L == 1 && *s == '*') if (CMP ("6x10")) size = 8, require |= NSFixedPitchFontMask; else if (CMP ("6x10bold")) size = 8, require |= NSFixedPitchFontMask | NSBoldFontMask; else if (CMP ("fixed")) size = 12, require |= NSFixedPitchFontMask; else if (CMP ("9x15")) size = 12, require |= NSFixedPitchFontMask; else if (CMP ("9x15bold")) size = 12, require |= NSFixedPitchFontMask | NSBoldFontMask; else if (CMP ("vga")) size = 12, require |= NSFixedPitchFontMask; else if (CMP ("console")) size = 12, require |= NSFixedPitchFontMask; else if (CMP ("gallant")) size = 12, require |= NSFixedPitchFontMask; else { // Incorrect fields are ignored. if (*s == '-') ++s; const char *s2 = xlfd_field_end(s); // Foundry (ignore) L = xlfd_next (&s, &s2); // Family name // This used to substitute Georgia for Times. Now it doesn't. if (CMP ("random")) { rand = GL_TRUE; } else if (CMP ("fixed")) { require |= NSFixedPitchFontMask; family_name = @"Courier"; } else if (!UNSPEC) { family_name = [[[NSString alloc] initWithBytes:s length:L encoding:NSUTF8StringEncoding] autorelease]; } L = xlfd_next (&s, &s2); // Weight name if (CMP ("bold") || CMP ("demibold")) require |= NSBoldFontMask; else if (CMP ("medium") || CMP ("regular")) forbid |= NSBoldFontMask; L = xlfd_next (&s, &s2); // Slant if (CMP ("i") || CMP ("o")) require |= NSItalicFontMask; else if (CMP ("r")) forbid |= NSItalicFontMask; xlfd_next (&s, &s2); // Set width name (ignore) xlfd_next (&s, &s2); // Add style name (ignore) xlfd_next (&s, &s2); // Pixel size (ignore) xlfd_next (&s, &s2); // Point size char *s3; uintmax_t n = strtoumax(s, &s3, 10); if (s2 == s3) size = n / 10.0; xlfd_next (&s, &s2); // Resolution X (ignore) xlfd_next (&s, &s2); // Resolution Y (ignore) xlfd_next (&s, &s2); // Spacing if (CMP ("p")) forbid |= NSFixedPitchFontMask; else if (CMP ("m") || CMP ("c")) require |= NSFixedPitchFontMask; // Don't care about average_width or charset registry. } # undef CMP # undef UNSPEC if (!family_name && !rand) family_name = default_font_family (require); if (size < 6 || size > 1000) size = 12; size *= scale; NSFontTraitMask mask = require | forbid; if (rand) { nsfont = random_font (require, mask, size, &family_name, &ps_name); [family_name autorelease]; } if (!nsfont) nsfont = try_font (require, mask, family_name, size, &ps_name); // if that didn't work, turn off attibutes until it does // (e.g., there is no "Monaco-Bold".) // if (!nsfont && (mask & NSItalicFontMask)) { require &= ~NSItalicFontMask; mask &= ~NSItalicFontMask; nsfont = try_font (require, mask, family_name, size, &ps_name); } if (!nsfont && (mask & NSBoldFontMask)) { require &= ~NSBoldFontMask; mask &= ~NSBoldFontMask; nsfont = try_font (require, mask, family_name, size, &ps_name); } if (!nsfont && (mask & NSFixedPitchFontMask)) { require &= ~NSFixedPitchFontMask; mask &= ~NSFixedPitchFontMask; nsfont = try_font (require, mask, family_name, size, &ps_name); } if (nsfont) { *name_ret = ps_name; *size_ret = size; float actual_size = size / scale; asprintf(xa_font, "-*-%s-%s-%c-*-*-%u-%u-%u-%u-%c-0-iso10646-1", family_name.UTF8String, (require & NSBoldFontMask) ? "bold" : "medium", (require & NSItalicFontMask) ? 'o' : 'r', (unsigned)(dpi * actual_size / 72.27 + 0.5), (unsigned)(actual_size * 10 + 0.5), dpi, dpi, (require & NSFixedPitchFontMask) ? 'm' : 'p'); return nsfont; } else { return 0; } } #endif Font XLoadFont (Display *dpy, const char *name) { Font fid = (Font) calloc (1, sizeof(*fid)); fid->refcount = 1; fid->dpy = dpy; // (TODO) float scale = 1; # ifdef USE_IPHONE /* Since iOS screens are physically smaller than desktop screens, scale up the fonts to make them more readable. Note that X11 apps on iOS also have the backbuffer sized in points instead of pixels, resulting in an effective X11 screen size of 768x1024 or so, even if the display has significantly higher resolution. That is unrelated to this hack, which is really about DPI. */ /* scale = 2; */ # endif fid->dpy = dpy; fid->native_font = jwxyz_load_native_font (dpy, name, &fid->ps_name, &fid->size, &fid->ascent, &fid->descent); if (!fid->native_font) { free (fid); return 0; } query_font (fid); return fid; } XFontStruct * XLoadQueryFont (Display *dpy, const char *name) { Font fid = XLoadFont (dpy, name); if (!fid) return 0; return XQueryFont (dpy, fid); } int XUnloadFont (Display *dpy, Font fid) { if (--fid->refcount < 0) abort(); if (fid->refcount > 0) return 0; if (fid->native_font) jwxyz_release_native_font (fid->dpy, fid->native_font); if (fid->ps_name) free (fid->ps_name); if (fid->metrics.per_char) free (fid->metrics.per_char); // #### DAMMIT! I can't tell what's going wrong here, but I keep getting // crashes in [NSFont ascender] <- query_font, and it seems to go away // if I never release the nsfont. So, fuck it, we'll just leak fonts. // They're probably not very big... // // [fid->nsfont release]; // CFRelease (fid->nsfont); free (fid); return 0; } int XFreeFontInfo (char **names, XFontStruct *info, int n) { int i; if (names) { for (i = 0; i < n; i++) if (names[i]) free (names[i]); free (names); } if (info) { for (i = 0; i < n; i++) if (info[i].per_char) { free (info[i].per_char); free (info[i].properties); } free (info); } return 0; } int XFreeFont (Display *dpy, XFontStruct *f) { Font fid = f->fid; XFreeFontInfo (0, f, 1); XUnloadFont (dpy, fid); return 0; } int XSetFont (Display *dpy, GC gc, Font fid) { Font font2 = copy_font (fid); if (gc->gcv.font) XUnloadFont (dpy, gc->gcv.font); gc->gcv.font = font2; return 0; } XFontSet XCreateFontSet (Display *dpy, char *name, char ***missing_charset_list_return, int *missing_charset_count_return, char **def_string_return) { char *name2 = strdup (name); char *s = strchr (name, ','); if (s) *s = 0; XFontSet set = 0; XFontStruct *f = XLoadQueryFont (dpy, name2); if (f) { set = (XFontSet) calloc (1, sizeof(*set)); set->font = f; } free (name2); if (missing_charset_list_return) *missing_charset_list_return = 0; if (missing_charset_count_return) *missing_charset_count_return = 0; if (def_string_return) *def_string_return = 0; return set; } void XFreeFontSet (Display *dpy, XFontSet set) { XFreeFont (dpy, set->font); free (set); } const char * jwxyz_nativeFontName (Font f, float *size) { if (size) *size = f->size; return f->ps_name; } void XFreeStringList (char **list) { int i; if (!list) return; for (i = 0; list[i]; i++) XFree (list[i]); XFree (list); } // Given a UTF8 string, return an NSString. Bogus UTF8 characters are ignored. // We have to do this because stringWithCString returns NULL if there are // any invalid characters at all. // /* TODO static NSString * sanitize_utf8 (const char *in, int in_len, Bool *latin1_pP) { int out_len = in_len * 4; // length of string might increase char *s2 = (char *) malloc (out_len); char *out = s2; const char *in_end = in + in_len; const char *out_end = out + out_len; Bool latin1_p = True; while (in < in_end) { unsigned long uc; long L1 = utf8_decode ((const unsigned char *) in, in_end - in, &uc); long L2 = utf8_encode (uc, out, out_end - out); in += L1; out += L2; if (uc > 255) latin1_p = False; } *out = 0; NSString *nsstr = [NSString stringWithCString:s2 encoding:NSUTF8StringEncoding]; free (s2); if (latin1_pP) *latin1_pP = latin1_p; return (nsstr ? nsstr : @""); } */ int XTextExtents (XFontStruct *f, const char *s, int length, int *dir_ret, int *ascent_ret, int *descent_ret, XCharStruct *cs) { // Unfortunately, adding XCharStructs together to get the extents for a // string doesn't work: Cocoa uses non-integral character advancements, but // XCharStruct.width is an integer. Plus that doesn't take into account // kerning pairs, alternate glyphs, and fun stuff like the word "Zapfino" in // Zapfino. Font ff = f->fid; Display *dpy = ff->dpy; jwxyz_render_text (dpy, ff->native_font, s, length, GL_FALSE, cs, 0); *dir_ret = 0; *ascent_ret = f->ascent; *descent_ret = f->descent; return 0; } int XTextWidth (XFontStruct *f, const char *s, int length) { int ascent, descent, dir; XCharStruct cs; XTextExtents (f, s, length, &dir, &ascent, &descent, &cs); return cs.width; } int XTextExtents16 (XFontStruct *f, const XChar2b *s, int length, int *dir_ret, int *ascent_ret, int *descent_ret, XCharStruct *cs) { // Bool latin1_p = True; int i, utf8_len = 0; char *utf8 = XChar2b_to_utf8 (s, &utf8_len); // already sanitized for (i = 0; i < length; i++) if (s[i].byte1 > 0) { // latin1_p = False; break; } { Font ff = f->fid; Display *dpy = ff->dpy; jwxyz_render_text (dpy, ff->native_font, utf8, strlen(utf8), GL_TRUE, cs, 0); } *dir_ret = 0; *ascent_ret = f->ascent; *descent_ret = f->descent; free (utf8); return 0; } /* "Returns the distance in pixels in the primary draw direction from the drawing origin to the origin of the next character to be drawn." "overall_ink_return is set to the bbox of the string's character ink." "The overall_ink_return for a nondescending, horizontally drawn Latin character is conventionally entirely above the baseline; that is, overall_ink_return.height <= -overall_ink_return.y." [So this means that y is the top of the ink, and height grows down: For above-the-baseline characters, y is negative.] "The overall_ink_return for a nonkerned character is entirely at, and to the right of, the origin; that is, overall_ink_return.x >= 0." [So this means that x is the left of the ink, and width grows right. For left-of-the-origin characters, x is negative.] "A character consisting of a single pixel at the origin would set overall_ink_return fields y = 0, x = 0, width = 1, and height = 1." */ int Xutf8TextExtents (XFontSet set, const char *str, int len, XRectangle *overall_ink_return, XRectangle *overall_logical_return) { #if 0 Bool latin1_p; NSString *nsstr = sanitize_utf8 (str, len, &latin1_p); XCharStruct cs; utf8_metrics (set->font->fid, nsstr, &cs); /* "The overall_logical_return is the bounding box that provides minimum spacing to other graphical features for the string. Other graphical features, for example, a border surrounding the text, should not intersect this rectangle." So I think that means they're the same? Or maybe "ink" is the bounding box, and "logical" is the advancement? But then why is the return value the advancement? */ if (overall_ink_return) XCharStruct_to_XmbRectangle (cs, *overall_ink_return); if (overall_logical_return) XCharStruct_to_XmbRectangle (cs, *overall_logical_return); return cs.width; #endif abort(); } static int draw_string (Display *dpy, Drawable d, GC gc, int x, int y, const char *str, size_t len, GLboolean utf8) { Font ff = gc->gcv.font; XCharStruct cs; char *data = 0; jwxyz_render_text (dpy, ff->native_font, str, len, utf8, &cs, &data); int w = cs.rbearing - cs.lbearing; int h = cs.ascent + cs.descent; if (w < 0 || h < 0) abort(); if (w == 0 || h == 0) { if (data) free(data); return 0; } XImage *img = XCreateImage (dpy, dpy->screen->visual, 32, ZPixmap, 0, data, w, h, 0, 0); /* The image of text is a 32-bit image, in white. Take the red channel for intensity and use that as alpha. replace RGB with the GC's foreground color. This expects that XPutImage respects alpha and only writes the bits that are not masked out. This also assumes that XPutImage expects ARGB. */ { char *s = data; char *end = s + (w * h * 4); uint8_t rgba[4]; jwxyz_query_color (dpy, gc->gcv.foreground, rgba); while (s < end) { s[3] = s[1]; s[0] = rgba[0]; s[1] = rgba[1]; s[2] = rgba[2]; s += 4; } } XPutImage (dpy, d, gc, img, 0, 0, x + cs.lbearing, y - cs.ascent, w, h); XDestroyImage (img); return 0; } int XDrawString (Display *dpy, Drawable d, GC gc, int x, int y, const char *str, int len) { return draw_string (dpy, d, gc, x, y, str, len, GL_FALSE); } int XDrawString16 (Display *dpy, Drawable d, GC gc, int x, int y, const XChar2b *str, int len) { XChar2b *b2 = malloc ((len + 1) * sizeof(*b2)); char *s2; int ret; memcpy (b2, str, len * sizeof(*b2)); b2[len].byte1 = b2[len].byte2 = 0; s2 = XChar2b_to_utf8 (b2, 0); free (b2); ret = draw_string (dpy, d, gc, x, y, s2, strlen(s2), GL_TRUE); free (s2); return ret; } void Xutf8DrawString (Display *dpy, Drawable d, XFontSet set, GC gc, int x, int y, const char *str, int len) { draw_string (dpy, d, gc, x, y, str, len, GL_TRUE); } int XDrawImageString (Display *dpy, Drawable d, GC gc, int x, int y, const char *str, int len) { int ascent, descent, dir; XCharStruct cs; XTextExtents (&gc->gcv.font->metrics, str, len, &dir, &ascent, &descent, &cs); jwxyz_fill_rect (dpy, d, gc, x + MIN (0, cs.lbearing), y - MAX (0, ascent), MAX (MAX (0, cs.rbearing) - MIN (0, cs.lbearing), cs.width), MAX (0, ascent) + MAX (0, descent), gc->gcv.background); return XDrawString (dpy, d, gc, x, y, str, len); } int XSetClipMask (Display *dpy, GC gc, Pixmap m) { //#### abort(); /* TODO Assert (!!gc->gcv.clip_mask == !!gc->clip_mask, "GC clip mask mixup"); if (gc->gcv.clip_mask) { XFreePixmap (dpy, gc->gcv.clip_mask); CGImageRelease (gc->clip_mask); } gc->gcv.clip_mask = copy_pixmap (dpy, m); if (gc->gcv.clip_mask) gc->clip_mask = CGBitmapContextCreateImage (gc->gcv.clip_mask->cgc); else gc->clip_mask = 0; */ return 0; } int XSetClipOrigin (Display *dpy, GC gc, int x, int y) { gc->gcv.clip_x_origin = x; gc->gcv.clip_y_origin = y; return 0; } #endif /* JWXYZ_GL -- entire file */ xscreensaver-5.36/jwxyz/jwxyz-timers.c000664 000767 000024 00000020034 12717376063 020206 0ustar00jwzstaff000000 000000 /* xscreensaver, Copyright (c) 2006-2016 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 is the portable implementation of Xt timers and inputs, for libjwxyz. */ #include "config.h" #ifdef HAVE_JWXYZ /* whole file */ #undef DEBUG_TIMERS #undef DEBUG_SOURCES #include #include #include #include #include "jwxyz.h" #include "jwxyz-timers.h" #ifdef HAVE_ANDROID extern void Log(const char *format, ...); #endif #ifdef HAVE_COCOA # define Log(S, ...) fprintf(stderr, "xscreensaver: " S "\n", __VA_ARGS__) #endif #ifdef DEBUG_TIMERS # define LOGT(...) Log(__VA_ARGS__) #else # define LOGT(...) #endif #ifdef DEBUG_SOURCES # define LOGI(...) Log(__VA_ARGS__) #else # define LOGI(...) #endif #define ASSERT_RET(C,S) do { \ if (!(C)) { \ jwxyz_abort ("jwxyz-timers: %s",(S)); \ return; \ }} while(0) #define ASSERT_RET0(C,S) do { \ if (!(C)) { \ jwxyz_abort ("jwxyz-timers: %s",(S)); \ return 0; \ }} while(0) XtAppContext XtDisplayToApplicationContext (Display *dpy) { return (XtAppContext) dpy; } #define app_to_display(APP) ((Display *) (APP)) struct jwxyz_sources_data { int fd_count; XtInputId ids[FD_SETSIZE]; XtIntervalId all_timers; }; struct jwxyz_XtIntervalId { XtAppContext app; int refcount; double run_at; XtTimerCallbackProc cb; XtPointer closure; XtIntervalId next; }; struct jwxyz_XtInputId { XtAppContext app; int refcount; XtInputCallbackProc cb; XtPointer closure; int fd; }; static double double_time (void) { struct timeval now; # ifdef GETTIMEOFDAY_TWO_ARGS struct timezone tzp; gettimeofday(&now, &tzp); # else gettimeofday(&now); # endif return (now.tv_sec + ((double) now.tv_usec * 0.000001)); } jwxyz_sources_data * jwxyz_sources_init (XtAppContext app) { jwxyz_sources_data *td = (jwxyz_sources_data *) calloc (1, sizeof (*td)); return td; } XtIntervalId XtAppAddTimeOut (XtAppContext app, unsigned long msecs, XtTimerCallbackProc cb, XtPointer closure) { jwxyz_sources_data *td = display_sources_data (app_to_display (app)); XtIntervalId data = (XtIntervalId) calloc (1, sizeof(*data)); double now = double_time(); data->app = app; data->cb = cb; data->closure = closure; data->refcount++; data->run_at = now + (msecs / 1000.0); data->next = td->all_timers; td->all_timers = data; LOGT("timer 0x%08lX: alloc %lu %.2f", (unsigned long) data, msecs, data->run_at - now); return data; } /* This is called both by the user to manually kill a timer, and by the run loop after a timer has fired. */ void XtRemoveTimeOut (XtIntervalId data) { jwxyz_sources_data *td = display_sources_data (app_to_display (data->app)); LOGT("timer 0x%08lX: remove", (unsigned long) data); ASSERT_RET (data->refcount > 0, "already freed"); data->refcount--; LOGT("timer 0x%08lX: release %d", (unsigned long) data, data->refcount); ASSERT_RET (data->refcount >= 0, "double free"); if (data->refcount == 0) { /* Remove it from the list of live timers. */ XtIntervalId prev, timer; int hit = 0; for (timer = td->all_timers, prev = 0; timer; prev = timer, timer = timer->next) { if (timer == data) { ASSERT_RET (!hit, "circular timer list"); if (prev) prev->next = timer->next; else td->all_timers = timer->next; timer->next = 0; hit = 1; } else { ASSERT_RET (timer->refcount > 0, "timer list corrupted"); } } free (data); } } XtInputId XtAppAddInput (XtAppContext app, int fd, XtPointer flags, XtInputCallbackProc cb, XtPointer closure) { jwxyz_sources_data *td = display_sources_data (app_to_display (app)); XtInputId data = (XtInputId) calloc (1, sizeof(*data)); data->cb = cb; data->fd = fd; data->closure = closure; data->app = app; data->refcount++; LOGI("source 0x%08lX %2d: alloc", (unsigned long) data, data->fd); ASSERT_RET0 (fd > 0 && fd < FD_SETSIZE, "fd out of range"); ASSERT_RET0 (td->ids[fd] == 0, "sources corrupted"); td->ids[fd] = data; td->fd_count++; return data; } void XtRemoveInput (XtInputId id) { jwxyz_sources_data *td = display_sources_data (app_to_display (id->app)); LOGI("source 0x%08lX %2d: remove", (unsigned long) id, id->fd); ASSERT_RET (id->refcount > 0, "sources corrupted"); ASSERT_RET (td->fd_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->fd_count--; id->refcount--; LOGI("source 0x%08lX %2d: release %d", (unsigned long) id, id->fd, id->refcount); ASSERT_RET (id->refcount >= 0, "double free"); if (id->refcount == 0) { memset (id, 0xA1, sizeof(*id)); id->fd = -666; free (id); } } static void jwxyz_timers_run (jwxyz_sources_data *td) { /* Iterate the timer list, being careful because XtRemoveTimeOut removes the current item from that list. */ if (td->all_timers) { XtIntervalId timer, next; double now = double_time(); int count = 0; for (timer = td->all_timers, next = timer->next; timer; timer = next, next = (timer ? timer->next : 0)) { if (timer->run_at <= now) { LOGT("timer 0x%08lX: fire %.02f", (unsigned long) timer, now - timer->run_at); timer->cb (timer->closure, &timer); XtRemoveTimeOut (timer); count++; ASSERT_RET (count < 10000, "way too many timers to run"); } } } } static void jwxyz_sources_run (jwxyz_sources_data *td) { if (td->fd_count == 0) return; struct timeval tv = { 0, }; fd_set fds; int i; int max = 0; FD_ZERO (&fds); for (i = 0; i < FD_SETSIZE; i++) { if (td->ids[i]) { FD_SET (i, &fds); max = i; } } 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]; ASSERT_RET (id && id->cb, "sources corrupted"); ASSERT_RET (id->fd == i, "sources corrupted"); id->cb (id->closure, &id->fd, &id); } } } } static void jwxyz_XtRemoveInput_all (jwxyz_sources_data *td) { int i; for (i = 0; i < FD_SETSIZE; i++) { XtInputId id = td->ids[i]; if (id) XtRemoveInput (id); } } static void jwxyz_XtRemoveTimeOut_all (jwxyz_sources_data *td) { XtIntervalId timer, next; int count = 0; /* Iterate the timer list, being careful because XtRemoveTimeOut removes the current item from that list. */ if (td->all_timers) { for (timer = td->all_timers, next = timer->next; timer; timer = next, next = (timer ? timer->next : 0)) { XtRemoveTimeOut (timer); count++; ASSERT_RET (count < 10000, "way too many timers to free"); } ASSERT_RET (!td->all_timers, "timer list didn't empty"); } } void jwxyz_sources_free (jwxyz_sources_data *td) { jwxyz_XtRemoveInput_all (td); jwxyz_XtRemoveTimeOut_all (td); memset (td, 0xA1, sizeof(*td)); free (td); } XtInputMask XtAppPending (XtAppContext app) { return XtIMAlternateInput; /* just always say yes */ } void XtAppProcessEvent (XtAppContext app, XtInputMask mask) { jwxyz_sources_data *td = display_sources_data (app_to_display (app)); if (mask & XtIMAlternateInput) jwxyz_sources_run (td); if (mask & XtIMTimer) jwxyz_timers_run (td); } #endif /* HAVE_JWXYZ */ xscreensaver-5.36/jwxyz/jwxyz.m000664 000767 000024 00000243273 12762445336 016733 0ustar00jwzstaff000000 000000 /* xscreensaver, Copyright (c) 1991-2016 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. */ /* JWXYZ Is Not Xlib. But it's a bunch of function definitions that bear some resemblance to Xlib and that do Cocoa-ish things that bear some resemblance to the things that Xlib might have done. This is the original version of jwxyz for MacOS and iOS. The version used by Android is in jwxyz-gl.c and jwxyz-common.c. Both versions depend on jwxyz-cocoa.m. */ #ifdef JWXYZ_QUARTZ // entire file #import #import #import #ifdef USE_IPHONE # import # import # import # define NSView UIView # define NSRect CGRect # define NSPoint CGPoint # define NSSize CGSize # define NSColor UIColor # define NSImage UIImage # define NSEvent UIEvent # define NSFont UIFont # define NSGlyph CGGlyph # define NSWindow UIWindow # define NSMakeSize CGSizeMake # define NSBezierPath UIBezierPath # define colorWithDeviceRed colorWithRed # define NSFontTraitMask UIFontDescriptorSymbolicTraits // The values for the flags for NSFontTraitMask and // UIFontDescriptorSymbolicTraits match up, not that it really matters here. # define NSBoldFontMask UIFontDescriptorTraitBold # define NSFixedPitchFontMask UIFontDescriptorTraitMonoSpace # define NSItalicFontMask UIFontDescriptorTraitItalic #else # import #endif #import #import #import #import "jwxyzI.h" #import "jwxyz-cocoa.h" #import "jwxyz-timers.h" #import "yarandom.h" #import "utf8wc.h" #import "xft.h" # undef MAX # undef MIN # define MAX(a,b) ((a)>(b)?(a):(b)) # define MIN(a,b) ((a)<(b)?(a):(b)) struct jwxyz_Display { Window main_window; Screen *screen; int screen_count; struct jwxyz_sources_data *timers_data; # ifndef USE_IPHONE CGDirectDisplayID cgdpy; /* ...of the one and only Window, main_window. This can change if the window is dragged to a different screen. */ # endif CGColorSpaceRef colorspace; /* Color space of this screen. We tag all of our images with this to avoid translation when rendering. */ unsigned long window_background; }; struct jwxyz_Screen { Display *dpy; CGBitmapInfo bitmap_info; unsigned long black, white; Visual *visual; int screen_number; }; struct jwxyz_GC { XGCValues gcv; unsigned int depth; CGImageRef clip_mask; // CGImage copy of the Pixmap in gcv.clip_mask }; struct jwxyz_Font { Display *dpy; char *ps_name; NSFont *nsfont; float size; // points char *xa_font; // In X11, "Font" is just an ID, and "XFontStruct" contains the metrics. // But we need the metrics on both of them, so they go here. XFontStruct metrics; }; struct jwxyz_XFontSet { XFontStruct *font; }; // 24/32bpp -> 32bpp image conversion. // Any of RGBA, BGRA, ABGR, or ARGB can be represented by a rotate of 0/8/16/24 // bits and an optional byte order swap. // This type encodes such a conversion. typedef unsigned convert_mode_t; // It's rotate, then swap. // A rotation here shifts bytes forward in memory. On x86/ARM, that's a left // rotate, and on PowerPC, a rightward rotation. static const convert_mode_t CONVERT_MODE_ROTATE_MASK = 0x3; static const convert_mode_t CONVERT_MODE_SWAP = 0x4; // Converts an array of pixels ('src') from one format to another, placing the // result in 'dest', according to the pixel conversion mode 'mode'. static void convert_row (uint32_t *dest, const void *src, size_t count, convert_mode_t mode, size_t src_bpp) { Assert (src_bpp == 24 || src_bpp == 32, "weird bpp"); // This works OK iff src == dest or src and dest do not overlap. if (!mode) { if (src != dest) memcpy (dest, src, count * 4); return; } // This is correct, but not fast. convert_mode_t rot = (mode & CONVERT_MODE_ROTATE_MASK) * 8; convert_mode_t flip = mode & CONVERT_MODE_SWAP; src_bpp /= 8; uint32_t *dest_end = dest + count; while (dest != dest_end) { uint32_t x; if (src_bpp == 4) x = *(const uint32_t *)src; else { // src_bpp == 3 const uint8_t *src8 = (const uint8_t *)src; // __LITTLE/BIG_ENDIAN__ are defined by the compiler. # if defined __LITTLE_ENDIAN__ x = src8[0] | (src8[1] << 8) | (src8[2] << 16) | 0xff000000; # elif defined __BIG_ENDIAN__ x = (src8[0] << 24) | (src8[1] << 16) | (src8[2] << 8) | 0xff; # else # error "Can't determine system endianness." # endif } src = (const uint8_t *)src + src_bpp; /* The naive (i.e. ubiquitous) portable implementation of bitwise rotation, for 32-bit integers, is: (x << rot) | (x >> (32 - rot)) This works nearly everywhere. Compilers on x86 wil generally recognize the idiom and convert it to a ROL instruction. But there's a problem here: according to the C specification, bit shifts greater than or equal to the length of the integer are undefined. And if rot = 0: 1. (x << 0) | (x >> (32 - 0)) 2. (x << 0) | (x >> 32) 3. (x << 0) | (Undefined!) Still, when the compiler converts this to a ROL on x86, everything works as intended. But, there are two additional problems when Clang does compile-time constant expression evaluation with the (x >> 32) expression: 1. Instead of evaluating it to something reasonable (either 0, like a human would intuitively expect, or x, like x86 would with SHR), Clang seems to pull a value out of nowhere, like -1, or some other random number. 2. Clang's warning for this, -Wshift-count-overflow, only works when the shift count is a literal constant, as opposed to an arbitrary expression that is optimized down to a constant. Put together, this means that the assertions in jwxyz_make_display with convert_px break with the above naive rotation, but only for a release build. http://blog.regehr.org/archives/1063 http://llvm.org/bugs/show_bug.cgi?id=17332 As described in those links, there is a solution here: Masking the undefined shift with '& 31' as below makes the experesion well-defined again. And LLVM is set to pick up on this safe version of the idiom and use a rotation instruction on architectures (like x86) that support it, just like it does with the unsafe version. Too bad LLVM doesn't want to pick up on that particular optimization here. Oh well. At least this code usually isn't critical w.r.t. performance. */ # if defined __LITTLE_ENDIAN__ x = (x << rot) | (x >> ((32 - rot) & 31)); # elif defined __BIG_ENDIAN__ x = (x >> rot) | (x << ((32 - rot) & 31)); # endif if (flip) x = __builtin_bswap32(x); // LLVM/GCC built-in function. *dest = x; ++dest; } } // Converts a single pixel. static uint32_t convert_px (uint32_t px, convert_mode_t mode) { convert_row (&px, &px, 1, mode, 32); return px; } // This returns the inverse conversion mode, such that: // pixel // == convert_px(convert_px(pixel, mode), convert_mode_invert(mode)) // == convert_px(convert_px(pixel, convert_mode_invert(mode)), mode) static convert_mode_t convert_mode_invert (convert_mode_t mode) { // swap(0); rot(n) == rot(n); swap(0) // swap(1); rot(n) == rot(-n); swap(1) return mode & CONVERT_MODE_SWAP ? mode : CONVERT_MODE_ROTATE_MASK & -mode; } // This combines two conversions into one, such that: // convert_px(convert_px(pixel, mode0), mode1) // == convert_px(pixel, convert_mode_merge(mode0, mode1)) static convert_mode_t convert_mode_merge (convert_mode_t m0, convert_mode_t m1) { // rot(r0); swap(s0); rot(r1); swap(s1) // rot(r0); rot(s0 ? -r1 : r1); swap(s0); swap(s1) // rot(r0 + (s0 ? -r1 : r1)); swap(s0 + s1) return ((m0 + (m0 & CONVERT_MODE_SWAP ? -m1 : m1)) & CONVERT_MODE_ROTATE_MASK) | ((m0 ^ m1) & CONVERT_MODE_SWAP); } // This returns a conversion mode that converts an arbitrary 32-bit format // specified by bitmap_info to RGBA. static convert_mode_t convert_mode_to_rgba (CGBitmapInfo bitmap_info) { // Former default: kCGImageAlphaNoneSkipFirst | kCGBitmapByteOrder32Little // i.e. BGRA // red = 0x00FF0000; // green = 0x0000FF00; // blue = 0x000000FF; // RGBA: kCGImageAlphaNoneSkipLast | kCGBitmapByteOrder32Big CGImageAlphaInfo alpha_info = (CGImageAlphaInfo)(bitmap_info & kCGBitmapAlphaInfoMask); Assert (! (bitmap_info & kCGBitmapFloatComponents), "kCGBitmapFloatComponents unsupported"); Assert (alpha_info != kCGImageAlphaOnly, "kCGImageAlphaOnly not supported"); convert_mode_t rot = alpha_info == kCGImageAlphaFirst || alpha_info == kCGImageAlphaPremultipliedFirst || alpha_info == kCGImageAlphaNoneSkipFirst ? 3 : 0; CGBitmapInfo byte_order = bitmap_info & kCGBitmapByteOrderMask; Assert (byte_order == kCGBitmapByteOrder32Little || byte_order == kCGBitmapByteOrder32Big, "byte order not supported"); convert_mode_t swap = byte_order == kCGBitmapByteOrder32Little ? CONVERT_MODE_SWAP : 0; if (swap) rot = CONVERT_MODE_ROTATE_MASK & -rot; return swap | rot; } union color_bytes { uint32_t pixel; uint8_t bytes[4]; }; uint32_t jwxyz_alloc_color (Display *dpy, uint16_t r, uint16_t g, uint16_t b, uint16_t a) { union color_bytes color; /* Instead of (int)(c / 256.0), another possibility is (int)(c * 255.0 / 65535.0 + 0.5). This can be calculated using only uint8_t integer_math(uint16_t c) { unsigned c0 = c + 128; return (c0 - (c0 >> 8)) >> 8; } */ color.bytes[0] = r >> 8; color.bytes[1] = g >> 8; color.bytes[2] = b >> 8; color.bytes[3] = a >> 8; return convert_px (color.pixel, convert_mode_invert (convert_mode_to_rgba (dpy->screen->bitmap_info))); } void jwxyz_query_color (Display *dpy, unsigned long pixel, uint8_t *rgba) { union color_bytes color; color.pixel = convert_px ((uint32_t)pixel, convert_mode_to_rgba (dpy->screen->bitmap_info)); for (unsigned i = 0; i != 4; ++i) rgba[i] = color.bytes[i]; } static void query_color_float (Display *dpy, unsigned long pixel, float *rgba) { uint8_t rgba8[4]; jwxyz_query_color (dpy, pixel, rgba8); for (unsigned i = 0; i != 4; ++i) rgba[i] = rgba8[i] * (1.0f / 255.0f); } /* We keep a list of all of the Displays that have been created and not yet freed so that they can have sensible display numbers. If three displays are created (0, 1, 2) and then #1 is closed, then the fourth display will be given the now-unused display number 1. (Everything in here assumes a 1:1 Display/Screen mapping.) The size of this array is the most number of live displays at one time. So if it's 20, then we'll blow up if the system has 19 monitors and also has System Preferences open (the small preview window). Note that xlockmore-style savers tend to allocate big structures, so setting this to 1000 will waste a few megabytes. Also some of them assume that the number of screens never changes, so dynamically expanding this array won't work. */ # ifndef USE_IPHONE static Display *jwxyz_live_displays[20] = { 0, }; # endif Display * jwxyz_make_display (Window w) { CGContextRef cgc = w->cgc; Display *d = (Display *) calloc (1, sizeof(*d)); d->screen = (Screen *) calloc (1, sizeof(Screen)); d->screen->dpy = d; d->screen_count = 1; d->screen->screen_number = 0; # ifndef USE_IPHONE { // Find the first empty slot in live_displays and plug us in. int size = sizeof(jwxyz_live_displays) / sizeof(*jwxyz_live_displays); int i; for (i = 0; i < size; i++) { if (! jwxyz_live_displays[i]) break; } if (i >= size) abort(); jwxyz_live_displays[i] = d; d->screen_count = size; d->screen->screen_number = i; } # endif // !USE_IPHONE d->screen->bitmap_info = CGBitmapContextGetBitmapInfo (cgc); d->screen->black = jwxyz_alloc_color (d, 0x0000, 0x0000, 0x0000, 0xFFFF); d->screen->white = jwxyz_alloc_color (d, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF); # if 0 // Tests for the image conversion modes. { const uint32_t key = 0x04030201; # ifdef __LITTLE_ENDIAN__ assert (convert_px (key, 0) == key); assert (convert_px (key, 1) == 0x03020104); assert (convert_px (key, 3) == 0x01040302); assert (convert_px (key, 4) == 0x01020304); assert (convert_px (key, 5) == 0x04010203); # endif for (unsigned i = 0; i != 8; ++i) { assert (convert_px(convert_px(key, i), convert_mode_invert(i)) == key); assert (convert_mode_invert(convert_mode_invert(i)) == i); } for (unsigned i = 0; i != 8; ++i) { for (unsigned j = 0; j != 8; ++j) assert (convert_px(convert_px(key, i), j) == convert_px(key, convert_mode_merge(i, j))); } } # endif Visual *v = (Visual *) calloc (1, sizeof(Visual)); v->class = TrueColor; v->red_mask = jwxyz_alloc_color (d, 0xFFFF, 0x0000, 0x0000, 0x0000); v->green_mask = jwxyz_alloc_color (d, 0x0000, 0xFFFF, 0x0000, 0x0000); v->blue_mask = jwxyz_alloc_color (d, 0x0000, 0x0000, 0xFFFF, 0x0000); CGBitmapInfo byte_order = d->screen->bitmap_info & kCGBitmapByteOrderMask; Assert ( ! (d->screen->bitmap_info & kCGBitmapFloatComponents) && (byte_order == kCGBitmapByteOrder32Little || byte_order == kCGBitmapByteOrder32Big), "invalid bits per channel"); v->bits_per_rgb = 8; d->screen->visual = v; d->timers_data = jwxyz_sources_init (XtDisplayToApplicationContext (d)); d->window_background = BlackPixel(d,0); d->main_window = w; Assert (cgc, "no CGContext"); return d; } void jwxyz_free_display (Display *dpy) { jwxyz_sources_free (dpy->timers_data); # ifndef USE_IPHONE { // Find us in live_displays and clear that slot. int size = ScreenCount(dpy); int i; for (i = 0; i < size; i++) { if (dpy == jwxyz_live_displays[i]) { jwxyz_live_displays[i] = 0; break; } } if (i >= size) abort(); } # endif // !USE_IPHONE free (dpy->screen->visual); free (dpy->screen); free (dpy); } /* Call this after any modification to the bits on a Pixmap or Window. Most Pixmaps are used frequently as sources and infrequently as destinations, so it pays to cache the data as a CGImage as needed. */ void invalidate_drawable_cache (Drawable d) { if (d && d->cgi) { CGImageRelease (d->cgi); d->cgi = 0; } } /* Call this when the View changes size or position. */ void jwxyz_window_resized (Display *dpy) { Window w = dpy->main_window; # ifndef USE_IPHONE // Figure out which screen the window is currently on. { int wx, wy; XTranslateCoordinates (dpy, w, NULL, 0, 0, &wx, &wy, NULL); CGPoint p; p.x = wx; p.y = wy; CGDisplayCount n; dpy->cgdpy = 0; CGGetDisplaysWithPoint (p, 1, &dpy->cgdpy, &n); // Auuugh! if (! dpy->cgdpy) { p.x = p.y = 0; CGGetDisplaysWithPoint (p, 1, &dpy->cgdpy, &n); } Assert (dpy->cgdpy, "unable to find CGDisplay"); } # endif // USE_IPHONE /* { // Figure out this screen's colorspace, and use that for every CGImage. // CMProfileRef profile = 0; CMGetProfileByAVID ((CMDisplayIDType) dpy->cgdpy, &profile); Assert (profile, "unable to find colorspace profile"); dpy->colorspace = CGColorSpaceCreateWithPlatformColorSpace (profile); Assert (dpy->colorspace, "unable to find colorspace"); } */ // WTF? It's faster if we *do not* use the screen's colorspace! // dpy->colorspace = CGColorSpaceCreateDeviceRGB(); invalidate_drawable_cache (w); } void jwxyz_flush_context (Display *dpy) { // CGContextSynchronize is another possibility. CGContextFlush(dpy->main_window->cgc); } jwxyz_sources_data * display_sources_data (Display *dpy) { return dpy->timers_data; } Window XRootWindow (Display *dpy, int screen) { return dpy ? dpy->main_window : 0; } Screen * XDefaultScreenOfDisplay (Display *dpy) { return dpy ? dpy->screen : 0; } Visual * XDefaultVisualOfScreen (Screen *screen) { return screen ? screen->visual : 0; } Display * XDisplayOfScreen (Screen *s) { return s ? s->dpy : 0; } int XDisplayNumberOfScreen (Screen *s) { return 0; } int XScreenNumberOfScreen (Screen *s) { return s? s->screen_number : 0; } int jwxyz_ScreenCount (Display *dpy) { return dpy ? dpy->screen_count : 0; } unsigned long XBlackPixelOfScreen(Screen *screen) { return screen->black; } unsigned long XWhitePixelOfScreen(Screen *screen) { return screen->white; } unsigned long XCellsOfScreen(Screen *screen) { Visual *v = screen->visual; return v->red_mask | v->green_mask | v->blue_mask; } void set_color (Display *dpy, CGContextRef cgc, unsigned long argb, unsigned int depth, Bool alpha_allowed_p, Bool fill_p) { jwxyz_validate_pixel (dpy, argb, depth, alpha_allowed_p); if (depth == 1) { if (fill_p) CGContextSetGrayFillColor (cgc, (argb ? 1.0 : 0.0), 1.0); else CGContextSetGrayStrokeColor (cgc, (argb ? 1.0 : 0.0), 1.0); } else { float rgba[4]; query_color_float (dpy, argb, rgba); if (fill_p) CGContextSetRGBFillColor (cgc, rgba[0], rgba[1], rgba[2], rgba[3]); else CGContextSetRGBStrokeColor (cgc, rgba[0], rgba[1], rgba[2], rgba[3]); } } static void set_line_mode (CGContextRef cgc, XGCValues *gcv) { CGContextSetLineWidth (cgc, gcv->line_width ? gcv->line_width : 1); CGContextSetLineJoin (cgc, gcv->join_style == JoinMiter ? kCGLineJoinMiter : gcv->join_style == JoinRound ? kCGLineJoinRound : kCGLineJoinBevel); CGContextSetLineCap (cgc, gcv->cap_style == CapNotLast ? kCGLineCapButt : gcv->cap_style == CapButt ? kCGLineCapButt : gcv->cap_style == CapRound ? kCGLineCapRound : kCGLineCapSquare); } static void set_clip_mask (Drawable d, GC gc) { Assert (!!gc->gcv.clip_mask == !!gc->clip_mask, "GC clip mask mixup"); Pixmap p = gc->gcv.clip_mask; if (!p) return; Assert (p->type == PIXMAP, "not a pixmap"); XRectangle wr = d->frame; CGRect to; to.origin.x = wr.x + gc->gcv.clip_x_origin; to.origin.y = wr.y + wr.height - gc->gcv.clip_y_origin - p->frame.height; to.size.width = p->frame.width; to.size.height = p->frame.height; CGContextClipToMask (d->cgc, to, gc->clip_mask); } /* Pushes a GC context; sets BlendMode and ClipMask. */ void push_gc (Drawable d, GC gc) { CGContextRef cgc = d->cgc; CGContextSaveGState (cgc); switch (gc->gcv.function) { case GXset: case GXclear: case GXcopy:/*CGContextSetBlendMode (cgc, kCGBlendModeNormal);*/ break; case GXxor: CGContextSetBlendMode (cgc, kCGBlendModeDifference); break; case GXor: CGContextSetBlendMode (cgc, kCGBlendModeLighten); break; case GXand: CGContextSetBlendMode (cgc, kCGBlendModeDarken); break; default: Assert(0, "unknown gcv function"); break; } if (gc->gcv.clip_mask) set_clip_mask (d, gc); } /* Pushes a GC context; sets BlendMode, ClipMask, Fill, and Stroke colors. */ void push_color_gc (Display *dpy, Drawable d, GC gc, unsigned long color, Bool antialias_p, Bool fill_p) { push_gc (d, gc); int depth = gc->depth; switch (gc->gcv.function) { case GXset: color = (depth == 1 ? 1 : WhitePixel(dpy,0)); break; case GXclear: color = (depth == 1 ? 0 : BlackPixel(dpy,0)); break; } CGContextRef cgc = d->cgc; set_color (dpy, cgc, color, depth, gc->gcv.alpha_allowed_p, fill_p); CGContextSetShouldAntialias (cgc, antialias_p); } /* Pushes a GC context; sets Fill and Stroke colors to the foreground color. */ static void push_fg_gc (Display *dpy, Drawable d, GC gc, Bool fill_p) { push_color_gc (dpy, d, gc, gc->gcv.foreground, gc->gcv.antialias_p, fill_p); } static Bool bitmap_context_p (Drawable d) { return True; } /* You've got to be fucking kidding me! It is *way* faster to draw points by creating and drawing a 1x1 CGImage with repeated calls to CGContextDrawImage than it is to make a single call to CGContextFillRects() with a list of 1x1 rectangles! I still wouldn't call it *fast*, however... */ #define XDRAWPOINTS_IMAGES /* Update, 2012: Kurt Revis points out that diddling the bitmap data directly is faster. This only works on Pixmaps, though, not Windows. (Fortunately, on iOS, the Window is really a Pixmap.) */ #define XDRAWPOINTS_CGDATA int XDrawPoints (Display *dpy, Drawable d, GC gc, XPoint *points, int count, int mode) { int i; XRectangle wr = d->frame; # ifdef XDRAWPOINTS_CGDATA if (bitmap_context_p (d)) { CGContextRef cgc = d->cgc; void *data = CGBitmapContextGetData (cgc); size_t bpr = CGBitmapContextGetBytesPerRow (cgc); size_t w = CGBitmapContextGetWidth (cgc); size_t h = CGBitmapContextGetHeight (cgc); Assert (data, "no bitmap data in Drawable"); unsigned long argb = gc->gcv.foreground; jwxyz_validate_pixel (dpy, argb, gc->depth, gc->gcv.alpha_allowed_p); if (gc->depth == 1) argb = (gc->gcv.foreground ? WhitePixel(dpy,0) : BlackPixel(dpy,0)); CGFloat x0 = wr.x; CGFloat y0 = wr.y; // Y axis is refreshingly not flipped. // It's uglier, but faster, to hoist the conditional out of the loop. if (mode == CoordModePrevious) { CGFloat x = x0, y = y0; for (i = 0; i < count; i++, points++) { x += points->x; y += points->y; if (x >= 0 && x < w && y >= 0 && y < h) { unsigned int *p = (unsigned int *) ((char *) data + (size_t) y * bpr + (size_t) x * 4); *p = (unsigned int) argb; } } } else { for (i = 0; i < count; i++, points++) { CGFloat x = x0 + points->x; CGFloat y = y0 + points->y; if (x >= 0 && x < w && y >= 0 && y < h) { unsigned int *p = (unsigned int *) ((char *) data + (size_t) y * bpr + (size_t) x * 4); *p = (unsigned int) argb; } } } } else /* d->type == WINDOW */ # endif /* XDRAWPOINTS_CGDATA */ { push_fg_gc (dpy, d, gc, YES); # ifdef XDRAWPOINTS_IMAGES unsigned long argb = gc->gcv.foreground; jwxyz_validate_pixel (dpy, argb, gc->depth, gc->gcv.alpha_allowed_p); if (gc->depth == 1) argb = (gc->gcv.foreground ? WhitePixel(dpy,0) : BlackPixel(dpy,0)); CGDataProviderRef prov = CGDataProviderCreateWithData (NULL, &argb, 4, NULL); CGImageRef cgi = CGImageCreate (1, 1, 8, 32, 4, dpy->colorspace, /* Host-ordered, since we're using the address of an int as the color data. */ dpy->screen->bitmap_info, prov, NULL, /* decode[] */ NO, /* interpolate */ kCGRenderingIntentDefault); CGDataProviderRelease (prov); CGContextRef cgc = d->cgc; CGRect rect; rect.size.width = rect.size.height = 1; for (i = 0; i < count; i++) { if (i > 0 && mode == CoordModePrevious) { rect.origin.x += points->x; rect.origin.x -= points->y; } else { rect.origin.x = wr.x + points->x; rect.origin.y = wr.y + wr.height - points->y - 1; } //Assert(CGImageGetColorSpace (cgi) == dpy->colorspace,"bad colorspace"); CGContextDrawImage (cgc, rect, cgi); points++; } CGImageRelease (cgi); # else /* ! XDRAWPOINTS_IMAGES */ CGRect *rects = (CGRect *) malloc (count * sizeof(CGRect)); CGRect *r = rects; for (i = 0; i < count; i++) { r->size.width = r->size.height = 1; if (i > 0 && mode == CoordModePrevious) { r->origin.x = r[-1].origin.x + points->x; r->origin.y = r[-1].origin.x - points->y; } else { r->origin.x = wr.origin.x + points->x; r->origin.y = wr.origin.y + wr.size.height - points->y; } points++; r++; } CGContextFillRects (d->cgc, rects, count); free (rects); # endif /* ! XDRAWPOINTS_IMAGES */ pop_gc (d, gc); } invalidate_drawable_cache (d); return 0; } CGPoint map_point (Drawable d, int x, int y) { const XRectangle *wr = &d->frame; CGPoint p; p.x = wr->x + x; p.y = wr->y + wr->height - y; return p; } static void adjust_point_for_line (GC gc, CGPoint *p) { // Here's the authoritative discussion on how X draws lines: // http://www.x.org/releases/current/doc/xproto/x11protocol.html#requests:CreateGC:line-width if (gc->gcv.line_width <= 1) { /* Thin lines are "drawn using an unspecified, device-dependent algorithm", but seriously though, Bresenham's algorithm. Bresenham's algorithm runs to and from pixel centers. There's a few screenhacks (Maze, at the very least) that set line_width to 1 when it probably should be set to 0, so it's line_width <= 1 instead of < 1. */ p->x += 0.5; p->y -= 0.5; } else { /* Thick lines OTOH run from the upper-left corners of pixels. This means that a horizontal thick line of width 1 straddles two scan lines. Aliasing requires one of these scan lines be chosen; the following nudges the point so that the right choice is made. */ p->y -= 1e-3; } } static CGPoint point_for_line (Drawable d, GC gc, int x, int y) { CGPoint result = map_point (d, x, y); adjust_point_for_line (gc, &result); return result; } int XDrawLine (Display *dpy, Drawable d, GC gc, int x1, int y1, int x2, int y2) { // when drawing a zero-length line, obey line-width and cap-style. if (x1 == x2 && y1 == y2) { int w = gc->gcv.line_width; x1 -= w/2; y1 -= w/2; if (gc->gcv.line_width > 1 && gc->gcv.cap_style == CapRound) return XFillArc (dpy, d, gc, x1, y1, w, w, 0, 360*64); else { if (!w) w = 1; // Actually show zero-length lines. return XFillRectangle (dpy, d, gc, x1, y1, w, w); } } CGPoint p = point_for_line (d, gc, x1, y1); push_fg_gc (dpy, d, gc, NO); CGContextRef cgc = d->cgc; set_line_mode (cgc, &gc->gcv); CGContextBeginPath (cgc); CGContextMoveToPoint (cgc, p.x, p.y); p = point_for_line(d, gc, x2, y2); CGContextAddLineToPoint (cgc, p.x, p.y); CGContextStrokePath (cgc); pop_gc (d, gc); invalidate_drawable_cache (d); return 0; } int XDrawLines (Display *dpy, Drawable d, GC gc, XPoint *points, int count, int mode) { int i; CGPoint p; push_fg_gc (dpy, d, gc, NO); CGContextRef cgc = d->cgc; set_line_mode (cgc, &gc->gcv); // if the first and last points coincide, use closepath to get // the proper line-joining. BOOL closed_p = (points[0].x == points[count-1].x && points[0].y == points[count-1].y); if (closed_p) count--; p = point_for_line(d, gc, points->x, points->y); points++; CGContextBeginPath (cgc); CGContextMoveToPoint (cgc, p.x, p.y); for (i = 1; i < count; i++) { if (mode == CoordModePrevious) { p.x += points->x; p.y -= points->y; } else { p = point_for_line(d, gc, points->x, points->y); } CGContextAddLineToPoint (cgc, p.x, p.y); points++; } if (closed_p) CGContextClosePath (cgc); CGContextStrokePath (cgc); pop_gc (d, gc); invalidate_drawable_cache (d); return 0; } int XDrawSegments (Display *dpy, Drawable d, GC gc, XSegment *segments, int count) { int i; CGContextRef cgc = d->cgc; push_fg_gc (dpy, d, gc, NO); set_line_mode (cgc, &gc->gcv); CGContextBeginPath (cgc); for (i = 0; i < count; i++) { CGPoint p = point_for_line (d, gc, segments->x1, segments->y1); CGContextMoveToPoint (cgc, p.x, p.y); p = point_for_line (d, gc, segments->x2, segments->y2); CGContextAddLineToPoint (cgc, p.x, p.y); segments++; } CGContextStrokePath (cgc); pop_gc (d, gc); invalidate_drawable_cache (d); return 0; } int XClearWindow (Display *dpy, Window win) { Assert (win && win->type == WINDOW, "not a window"); XRectangle wr = win->frame; return XClearArea (dpy, win, 0, 0, wr.width, wr.height, 0); } unsigned long jwxyz_window_background (Display *dpy) { return dpy->window_background; } int XSetWindowBackground (Display *dpy, Window w, unsigned long pixel) { Assert (w && w->type == WINDOW, "not a window"); jwxyz_validate_pixel (dpy, pixel, 32, NO); dpy->window_background = pixel; return 0; } void jwxyz_fill_rects (Display *dpy, Drawable d, GC gc, const XRectangle *rectangles, unsigned long nrectangles, unsigned long pixel) { Assert (!gc || gc->depth == jwxyz_drawable_depth (d), "depth mismatch"); CGContextRef cgc = d->cgc; Bool fast_fill_p = bitmap_context_p (d) && (!gc || (gc->gcv.function == GXcopy && !gc->gcv.alpha_allowed_p && !gc->gcv.clip_mask)); if (!fast_fill_p) { if (gc) push_color_gc (dpy, d, gc, pixel, gc->gcv.antialias_p, YES); else set_color (dpy, d->cgc, pixel, jwxyz_drawable_depth (d), NO, YES); } for (unsigned i = 0; i != nrectangles; ++i) { int x = rectangles[i].x; int y = rectangles[i].y; unsigned long width = rectangles[i].width; unsigned long height = rectangles[i].height; if (fast_fill_p) { long // negative_int > unsigned_int == 1 dw = CGBitmapContextGetWidth (cgc), dh = CGBitmapContextGetHeight (cgc); if (x >= dw || y >= dh) continue; if (x < 0) { width += x; x = 0; } if (y < 0) { height += y; y = 0; } if (width <= 0 || height <= 0) continue; unsigned long max_width = dw - x; if (width > max_width) width = max_width; unsigned long max_height = dh - y; if (height > max_height) height = max_height; if (jwxyz_drawable_depth (d) == 1) pixel = pixel ? WhitePixel(dpy, 0) : BlackPixel(dpy, 0); size_t dst_bytes_per_row = CGBitmapContextGetBytesPerRow (d->cgc); void *dst = seek_xy (CGBitmapContextGetData (d->cgc), dst_bytes_per_row, x, y); Assert(sizeof(wchar_t) == 4, "somebody changed the ABI"); while (height) { // Would be nice if Apple used SSE/NEON in wmemset. Maybe someday. wmemset (dst, (wchar_t) pixel, width); --height; dst = (char *) dst + dst_bytes_per_row; } } else { CGRect r; r.origin = map_point (d, x, y); r.origin.y -= height; r.size.width = width; r.size.height = height; CGContextFillRect (cgc, r); } } if (!fast_fill_p && gc) pop_gc (d, gc); invalidate_drawable_cache (d); } int XClearArea (Display *dpy, Window win, int x, int y, int w, int h, Bool exp) { Assert (win && win->type == WINDOW, "not a window"); jwxyz_fill_rect (dpy, win, 0, x, y, w, h, dpy->window_background); return 0; } int XFillPolygon (Display *dpy, Drawable d, GC gc, XPoint *points, int npoints, int shape, int mode) { XRectangle wr = d->frame; int i; push_fg_gc (dpy, d, gc, YES); CGContextRef cgc = d->cgc; CGContextBeginPath (cgc); float x = 0, y = 0; for (i = 0; i < npoints; i++) { if (i > 0 && mode == CoordModePrevious) { x += points[i].x; y -= points[i].y; } else { x = wr.x + points[i].x; y = wr.y + wr.height - points[i].y; } if (i == 0) CGContextMoveToPoint (cgc, x, y); else CGContextAddLineToPoint (cgc, x, y); } CGContextClosePath (cgc); if (gc->gcv.fill_rule == EvenOddRule) CGContextEOFillPath (cgc); else CGContextFillPath (cgc); pop_gc (d, gc); invalidate_drawable_cache (d); return 0; } #define radians(DEG) ((DEG) * M_PI / 180.0) #define degrees(RAD) ((RAD) * 180.0 / M_PI) int jwxyz_draw_arc (Display *dpy, Drawable d, GC gc, int x, int y, unsigned int width, unsigned int height, int angle1, int angle2, Bool fill_p) { XRectangle wr = d->frame; CGRect bound; bound.origin.x = wr.x + x; bound.origin.y = wr.y + wr.height - y - (int)height; bound.size.width = width; bound.size.height = height; CGPoint ctr; ctr.x = bound.origin.x + bound.size.width /2; ctr.y = bound.origin.y + bound.size.height/2; float r1 = radians (angle1/64.0); float r2 = radians (angle2/64.0) + r1; BOOL clockwise = angle2 < 0; BOOL closed_p = (angle2 >= 360*64 || angle2 <= -360*64); push_fg_gc (dpy, d, gc, fill_p); CGContextRef cgc = d->cgc; CGContextBeginPath (cgc); CGContextSaveGState(cgc); CGContextTranslateCTM (cgc, ctr.x, ctr.y); CGContextScaleCTM (cgc, width/2.0, height/2.0); if (fill_p) CGContextMoveToPoint (cgc, 0, 0); CGContextAddArc (cgc, 0.0, 0.0, 1, r1, r2, clockwise); CGContextRestoreGState (cgc); // restore before stroke, for line width if (closed_p) CGContextClosePath (cgc); // for proper line joining if (fill_p) { CGContextFillPath (cgc); } else { set_line_mode (cgc, &gc->gcv); CGContextStrokePath (cgc); } pop_gc (d, gc); invalidate_drawable_cache (d); return 0; } XGCValues * jwxyz_gc_gcv (GC gc) { return &gc->gcv; } unsigned int jwxyz_gc_depth (GC gc) { return gc->depth; } GC XCreateGC (Display *dpy, Drawable d, unsigned long mask, XGCValues *xgcv) { struct jwxyz_GC *gc = (struct jwxyz_GC *) calloc (1, sizeof(*gc)); gc->depth = jwxyz_drawable_depth (d); jwxyz_gcv_defaults (dpy, &gc->gcv, gc->depth); XChangeGC (dpy, gc, mask, xgcv); return gc; } int XFreeGC (Display *dpy, GC gc) { if (gc->gcv.font) XUnloadFont (dpy, gc->gcv.font); Assert (!!gc->gcv.clip_mask == !!gc->clip_mask, "GC clip mask mixup"); if (gc->gcv.clip_mask) { XFreePixmap (dpy, gc->gcv.clip_mask); CGImageRelease (gc->clip_mask); } free (gc); return 0; } static void flipbits (unsigned const char *in, unsigned char *out, int length) { static const unsigned char table[256] = { 0x00, 0x80, 0x40, 0xC0, 0x20, 0xA0, 0x60, 0xE0, 0x10, 0x90, 0x50, 0xD0, 0x30, 0xB0, 0x70, 0xF0, 0x08, 0x88, 0x48, 0xC8, 0x28, 0xA8, 0x68, 0xE8, 0x18, 0x98, 0x58, 0xD8, 0x38, 0xB8, 0x78, 0xF8, 0x04, 0x84, 0x44, 0xC4, 0x24, 0xA4, 0x64, 0xE4, 0x14, 0x94, 0x54, 0xD4, 0x34, 0xB4, 0x74, 0xF4, 0x0C, 0x8C, 0x4C, 0xCC, 0x2C, 0xAC, 0x6C, 0xEC, 0x1C, 0x9C, 0x5C, 0xDC, 0x3C, 0xBC, 0x7C, 0xFC, 0x02, 0x82, 0x42, 0xC2, 0x22, 0xA2, 0x62, 0xE2, 0x12, 0x92, 0x52, 0xD2, 0x32, 0xB2, 0x72, 0xF2, 0x0A, 0x8A, 0x4A, 0xCA, 0x2A, 0xAA, 0x6A, 0xEA, 0x1A, 0x9A, 0x5A, 0xDA, 0x3A, 0xBA, 0x7A, 0xFA, 0x06, 0x86, 0x46, 0xC6, 0x26, 0xA6, 0x66, 0xE6, 0x16, 0x96, 0x56, 0xD6, 0x36, 0xB6, 0x76, 0xF6, 0x0E, 0x8E, 0x4E, 0xCE, 0x2E, 0xAE, 0x6E, 0xEE, 0x1E, 0x9E, 0x5E, 0xDE, 0x3E, 0xBE, 0x7E, 0xFE, 0x01, 0x81, 0x41, 0xC1, 0x21, 0xA1, 0x61, 0xE1, 0x11, 0x91, 0x51, 0xD1, 0x31, 0xB1, 0x71, 0xF1, 0x09, 0x89, 0x49, 0xC9, 0x29, 0xA9, 0x69, 0xE9, 0x19, 0x99, 0x59, 0xD9, 0x39, 0xB9, 0x79, 0xF9, 0x05, 0x85, 0x45, 0xC5, 0x25, 0xA5, 0x65, 0xE5, 0x15, 0x95, 0x55, 0xD5, 0x35, 0xB5, 0x75, 0xF5, 0x0D, 0x8D, 0x4D, 0xCD, 0x2D, 0xAD, 0x6D, 0xED, 0x1D, 0x9D, 0x5D, 0xDD, 0x3D, 0xBD, 0x7D, 0xFD, 0x03, 0x83, 0x43, 0xC3, 0x23, 0xA3, 0x63, 0xE3, 0x13, 0x93, 0x53, 0xD3, 0x33, 0xB3, 0x73, 0xF3, 0x0B, 0x8B, 0x4B, 0xCB, 0x2B, 0xAB, 0x6B, 0xEB, 0x1B, 0x9B, 0x5B, 0xDB, 0x3B, 0xBB, 0x7B, 0xFB, 0x07, 0x87, 0x47, 0xC7, 0x27, 0xA7, 0x67, 0xE7, 0x17, 0x97, 0x57, 0xD7, 0x37, 0xB7, 0x77, 0xF7, 0x0F, 0x8F, 0x4F, 0xCF, 0x2F, 0xAF, 0x6F, 0xEF, 0x1F, 0x9F, 0x5F, 0xDF, 0x3F, 0xBF, 0x7F, 0xFF }; while (length-- > 0) *out++ = table[*in++]; } int XPutImage (Display *dpy, Drawable d, GC gc, XImage *ximage, int src_x, int src_y, int dest_x, int dest_y, unsigned int w, unsigned int h) { XRectangle wr = d->frame; Assert (gc, "no GC"); Assert ((w < 65535), "improbably large width"); Assert ((h < 65535), "improbably large height"); Assert ((src_x < 65535 && src_x > -65535), "improbably large src_x"); Assert ((src_y < 65535 && src_y > -65535), "improbably large src_y"); Assert ((dest_x < 65535 && dest_x > -65535), "improbably large dest_x"); Assert ((dest_y < 65535 && dest_y > -65535), "improbably large dest_y"); // Clip width and height to the bounds of the Drawable // if (dest_x + (int)w > wr.width) { if (dest_x > wr.width) return 0; w = wr.width - dest_x; } if (dest_y + (int)h > wr.height) { if (dest_y > wr.height) return 0; h = wr.height - dest_y; } if (w <= 0 || h <= 0) return 0; // Clip width and height to the bounds of the XImage // if (src_x + w > ximage->width) { if (src_x > ximage->width) return 0; w = ximage->width - src_x; } if (src_y + h > ximage->height) { if (src_y > ximage->height) return 0; h = ximage->height - src_y; } if (w <= 0 || h <= 0) return 0; CGContextRef cgc = d->cgc; if (jwxyz_dumb_drawing_mode(dpy, d, gc, dest_x, dest_y, w, h)) return 0; int bpl = ximage->bytes_per_line; int bpp = ximage->bits_per_pixel; int bsize = bpl * h; char *data = ximage->data; CGRect r; r.origin.x = wr.x + dest_x; r.origin.y = wr.y + wr.height - dest_y - (int)h; r.size.width = w; r.size.height = h; if (bpp == 32) { /* Take advantage of the fact that it's ok for (bpl != w * bpp) to create a CGImage from a sub-rectagle of the XImage. */ data += (src_y * bpl) + (src_x * 4); CGDataProviderRef prov = CGDataProviderCreateWithData (NULL, data, bsize, NULL); CGImageRef cgi = CGImageCreate (w, h, bpp/4, bpp, bpl, dpy->colorspace, dpy->screen->bitmap_info, prov, NULL, /* decode[] */ NO, /* interpolate */ kCGRenderingIntentDefault); CGDataProviderRelease (prov); //Assert (CGImageGetColorSpace (cgi) == dpy->colorspace, "bad colorspace"); CGContextDrawImage (cgc, r, cgi); CGImageRelease (cgi); } else { // (bpp == 1) /* To draw a 1bpp image, we use it as a mask and fill two rectangles. #### However, the bit order within a byte in a 1bpp XImage is the wrong way around from what Quartz expects, so first we have to copy the data to reverse it. Shit! Maybe it would be worthwhile to go through the hacks and #ifdef each one that diddles 1bpp XImage->data directly... */ Assert ((src_x % 8) == 0, "XPutImage with non-byte-aligned 1bpp X offset not implemented"); data += (src_y * bpl) + (src_x / 8); // move to x,y within the data unsigned char *flipped = (unsigned char *) malloc (bsize); flipbits ((unsigned char *) data, flipped, bsize); CGDataProviderRef prov = CGDataProviderCreateWithData (NULL, flipped, bsize, NULL); CGImageRef mask = CGImageMaskCreate (w, h, 1, bpp, bpl, prov, NULL, /* decode[] */ NO); /* interpolate */ push_fg_gc (dpy, d, gc, YES); CGContextFillRect (cgc, r); // foreground color CGContextClipToMask (cgc, r, mask); set_color (dpy, cgc, gc->gcv.background, gc->depth, NO, YES); CGContextFillRect (cgc, r); // background color pop_gc (d, gc); free (flipped); CGDataProviderRelease (prov); CGImageRelease (mask); } invalidate_drawable_cache (d); return 0; } XImage * XGetImage (Display *dpy, Drawable d, int x, int y, unsigned int width, unsigned int height, unsigned long plane_mask, int format) { const unsigned char *data = 0; size_t depth, ibpp, ibpl; convert_mode_t mode; Assert ((width < 65535), "improbably large width"); Assert ((height < 65535), "improbably large height"); Assert ((x < 65535 && x > -65535), "improbably large x"); Assert ((y < 65535 && y > -65535), "improbably large y"); CGContextRef cgc = d->cgc; { depth = jwxyz_drawable_depth (d); mode = convert_mode_to_rgba (dpy->screen->bitmap_info); ibpp = CGBitmapContextGetBitsPerPixel (cgc); ibpl = CGBitmapContextGetBytesPerRow (cgc); data = CGBitmapContextGetData (cgc); Assert (data, "CGBitmapContextGetData failed"); } // data points at (x,y) with ibpl rowstride. ignore x,y from now on. data += (y * ibpl) + (x * (ibpp/8)); format = (depth == 1 ? XYPixmap : ZPixmap); XImage *image = XCreateImage (dpy, 0, (unsigned int) depth, format, 0, 0, width, height, 0, 0); image->data = (char *) malloc (height * image->bytes_per_line); int obpl = image->bytes_per_line; /* both PPC and Intel use word-ordered ARGB frame buffers, which means that on Intel it is BGRA when viewed by bytes (And BGR when using 24bpp packing). BUT! Intel-64 stores alpha at the other end! 32bit=RGBA, 64bit=ARGB. The NSAlphaFirstBitmapFormat bit in bitmapFormat seems to be the indicator of this latest kink. */ int xx, yy; if (depth == 1) { const unsigned char *iline = data; for (yy = 0; yy < height; yy++) { const unsigned char *iline2 = iline; for (xx = 0; xx < width; xx++) { iline2++; // ignore R or A or A or B iline2++; // ignore G or B or R or G unsigned char r = *iline2++; // use B or G or G or R if (ibpp == 32) iline2++; // ignore A or R or B or A XPutPixel (image, xx, yy, (r ? 1 : 0)); } iline += ibpl; } } else { const unsigned char *iline = data; unsigned char *oline = (unsigned char *) image->data; mode = convert_mode_merge (mode, convert_mode_invert ( convert_mode_to_rgba (dpy->screen->bitmap_info))); for (yy = 0; yy < height; yy++) { convert_row ((uint32_t *)oline, iline, width, mode, ibpp); oline += obpl; iline += ibpl; } } return image; } /* Returns a transformation matrix to do rotation as per the provided EXIF "Orientation" value. */ static CGAffineTransform exif_rotate (int rot, CGSize rect) { CGAffineTransform trans = CGAffineTransformIdentity; switch (rot) { case 2: // flip horizontal trans = CGAffineTransformMakeTranslation (rect.width, 0); trans = CGAffineTransformScale (trans, -1, 1); break; case 3: // rotate 180 trans = CGAffineTransformMakeTranslation (rect.width, rect.height); trans = CGAffineTransformRotate (trans, M_PI); break; case 4: // flip vertical trans = CGAffineTransformMakeTranslation (0, rect.height); trans = CGAffineTransformScale (trans, 1, -1); break; case 5: // transpose (UL-to-LR axis) trans = CGAffineTransformMakeTranslation (rect.height, rect.width); trans = CGAffineTransformScale (trans, -1, 1); trans = CGAffineTransformRotate (trans, 3 * M_PI / 2); break; case 6: // rotate 90 trans = CGAffineTransformMakeTranslation (0, rect.width); trans = CGAffineTransformRotate (trans, 3 * M_PI / 2); break; case 7: // transverse (UR-to-LL axis) trans = CGAffineTransformMakeScale (-1, 1); trans = CGAffineTransformRotate (trans, M_PI / 2); break; case 8: // rotate 270 trans = CGAffineTransformMakeTranslation (rect.height, 0); trans = CGAffineTransformRotate (trans, M_PI / 2); break; default: break; } return trans; } void jwxyz_draw_NSImage_or_CGImage (Display *dpy, Drawable d, Bool nsimg_p, void *img_arg, XRectangle *geom_ret, int exif_rotation) { CGImageRef cgi; # ifndef USE_IPHONE CGImageSourceRef cgsrc; # endif // USE_IPHONE NSSize imgr; CGContextRef cgc = d->cgc; if (nsimg_p) { NSImage *nsimg = (NSImage *) img_arg; imgr = [nsimg size]; # ifndef USE_IPHONE // convert the NSImage to a CGImage via the toll-free-bridging // of NSData and CFData... // NSData *nsdata = [NSBitmapImageRep TIFFRepresentationOfImageRepsInArray: [nsimg representations]]; CFDataRef cfdata = (CFDataRef) nsdata; cgsrc = CGImageSourceCreateWithData (cfdata, NULL); cgi = CGImageSourceCreateImageAtIndex (cgsrc, 0, NULL); # else // USE_IPHONE cgi = nsimg.CGImage; # endif // USE_IPHONE } else { cgi = (CGImageRef) img_arg; imgr.width = CGImageGetWidth (cgi); imgr.height = CGImageGetHeight (cgi); } Bool rot_p = (exif_rotation >= 5); if (rot_p) imgr = NSMakeSize (imgr.height, imgr.width); XRectangle winr = d->frame; float rw = winr.width / imgr.width; float rh = winr.height / imgr.height; float r = (rw < rh ? rw : rh); CGRect dst, dst2; dst.size.width = imgr.width * r; dst.size.height = imgr.height * r; dst.origin.x = (winr.width - dst.size.width) / 2; dst.origin.y = (winr.height - dst.size.height) / 2; dst2.origin.x = dst2.origin.y = 0; if (rot_p) { dst2.size.width = dst.size.height; dst2.size.height = dst.size.width; } else { dst2.size = dst.size; } // Clear the part not covered by the image to background or black. // if (d->type == WINDOW) XClearWindow (dpy, d); else { jwxyz_fill_rect (dpy, d, 0, 0, 0, winr.width, winr.height, jwxyz_drawable_depth (d) == 1 ? 0 : BlackPixel(dpy,0)); } CGAffineTransform trans = exif_rotate (exif_rotation, rot_p ? dst2.size : dst.size); CGContextSaveGState (cgc); CGContextConcatCTM (cgc, CGAffineTransformMakeTranslation (dst.origin.x, dst.origin.y)); CGContextConcatCTM (cgc, trans); //Assert (CGImageGetColorSpace (cgi) == dpy->colorspace, "bad colorspace"); CGContextDrawImage (cgc, dst2, cgi); CGContextRestoreGState (cgc); # ifndef USE_IPHONE if (nsimg_p) { CFRelease (cgsrc); CGImageRelease (cgi); } # endif // USE_IPHONE if (geom_ret) { geom_ret->x = dst.origin.x; geom_ret->y = dst.origin.y; geom_ret->width = dst.size.width; geom_ret->height = dst.size.height; } invalidate_drawable_cache (d); } Pixmap XCreatePixmap (Display *dpy, Drawable d, unsigned int width, unsigned int height, unsigned int depth) { if (!dpy) abort(); char *data = (char *) malloc (width * height * 4); if (! data) return 0; Pixmap p = (Pixmap) calloc (1, sizeof(*p)); p->type = PIXMAP; p->frame.width = width; p->frame.height = height; p->pixmap.depth = depth; p->pixmap.cgc_buffer = data; /* Quartz doesn't have a 1bpp image type. Used to use 8bpp gray images instead of 1bpp, but some Mac video cards don't support that! So we always use 32bpp, regardless of depth. */ p->cgc = CGBitmapContextCreate (data, width, height, 8, /* bits per component */ width * 4, /* bpl */ dpy->colorspace, dpy->screen->bitmap_info); Assert (p->cgc, "could not create CGBitmapContext"); return p; } int XFreePixmap (Display *d, Pixmap p) { Assert (p && p->type == PIXMAP, "not a pixmap"); invalidate_drawable_cache (p); CGContextRelease (p->cgc); if (p->pixmap.cgc_buffer) free (p->pixmap.cgc_buffer); free (p); return 0; } static Pixmap copy_pixmap (Display *dpy, Pixmap p) { if (!p) return 0; Assert (p->type == PIXMAP, "not a pixmap"); Pixmap p2 = 0; Window root; int x, y; unsigned int width, height, border_width, depth; if (XGetGeometry (dpy, p, &root, &x, &y, &width, &height, &border_width, &depth)) { XGCValues gcv; gcv.function = GXcopy; GC gc = XCreateGC (dpy, p, GCFunction, &gcv); if (gc) { p2 = XCreatePixmap (dpy, p, width, height, depth); if (p2) XCopyArea (dpy, p, p2, gc, 0, 0, width, height, 0, 0); XFreeGC (dpy, gc); } } Assert (p2, "could not copy pixmap"); return p2; } /* Font metric terminology, as used by X11: "lbearing" is the distance from the logical origin to the leftmost pixel. If a character's ink extends to the left of the origin, it is negative. "rbearing" is the distance from the logical origin to the rightmost pixel. "descent" is the distance from the logical origin to the bottommost pixel. For characters with descenders, it is positive. For superscripts, it is negative. "ascent" is the distance from the logical origin to the topmost pixel. It is the number of pixels above the baseline. "width" is the distance from the logical origin to the position where the logical origin of the next character should be placed. If "rbearing" is greater than "width", then this character overlaps the following character. If smaller, then there is trailing blank space. */ static void utf8_metrics (Font fid, NSString *nsstr, XCharStruct *cs) { // Returns the metrics of the multi-character, single-line UTF8 string. NSFont *nsfont = fid->nsfont; Drawable d = XRootWindow (fid->dpy, 0); CGContextRef cgc = d->cgc; NSDictionary *attr = [NSDictionary dictionaryWithObjectsAndKeys: nsfont, NSFontAttributeName, nil]; NSAttributedString *astr = [[NSAttributedString alloc] initWithString:nsstr attributes:attr]; CTLineRef ctline = CTLineCreateWithAttributedString ( (__bridge CFAttributedStringRef) astr); CGContextSetTextPosition (cgc, 0, 0); CGContextSetShouldAntialias (cgc, True); // #### Guess? memset (cs, 0, sizeof(*cs)); // "CTRun represents set of consecutive glyphs sharing the same // attributes and direction". // // We also get multiple runs any time font subsitution happens: // E.g., if the current font is Verdana-Bold, a ← character // in the NSString will actually be rendered in LucidaGrande-Bold. // int count = 0; for (id runid in (NSArray *)CTLineGetGlyphRuns(ctline)) { CTRunRef run = (CTRunRef) runid; CFRange r = { 0, }; CGRect bbox = CTRunGetImageBounds (run, cgc, r); CGFloat ascent, descent, leading; CGFloat advancement = CTRunGetTypographicBounds (run, r, &ascent, &descent, &leading); # ifndef USE_IPHONE // Only necessary for when LCD smoothing is enabled, which iOS doesn't do. bbox.origin.x -= 2.0/3.0; bbox.size.width += 4.0/3.0; bbox.size.height += 1.0/2.0; # endif // Create the metrics for this run: XCharStruct cc; cc.ascent = ceil (bbox.origin.y + bbox.size.height); cc.descent = ceil (-bbox.origin.y); cc.lbearing = floor (bbox.origin.x); cc.rbearing = ceil (bbox.origin.x + bbox.size.width); cc.width = floor (advancement + 0.5); // Add those metrics into the cumulative metrics: if (count == 0) *cs = cc; else { cs->ascent = MAX (cs->ascent, cc.ascent); cs->descent = MAX (cs->descent, cc.descent); cs->lbearing = MIN (cs->lbearing, cs->width + cc.lbearing); cs->rbearing = MAX (cs->rbearing, cs->width + cc.rbearing); cs->width = MAX (cs->width, cs->width + cc.width); } // Why no y? What about vertical text? // XCharStruct doesn't encapsulate that but XGlyphInfo does. count++; } [astr release]; CFRelease (ctline); } // This is XQueryFont, but for the XFontStruct embedded in 'Font' // static void query_font (Font fid) { if (!fid || !fid->nsfont) { Assert (0, "no NSFont in fid"); return; } if (![fid->nsfont fontName]) { Assert(0, "broken NSFont in fid"); return; } int first = 32; int last = 255; XFontStruct *f = &fid->metrics; XCharStruct *min = &f->min_bounds; XCharStruct *max = &f->max_bounds; f->fid = fid; f->min_char_or_byte2 = first; f->max_char_or_byte2 = last; f->default_char = 'M'; f->ascent = ceil ([fid->nsfont ascender]); f->descent = -floor ([fid->nsfont descender]); min->width = 32767; // set to smaller values in the loop min->ascent = 32767; min->descent = 32767; min->lbearing = 32767; min->rbearing = 32767; f->per_char = (XCharStruct *) calloc (last-first+2, sizeof (XCharStruct)); for (int i = first; i <= last; i++) { XCharStruct *cs = &f->per_char[i-first]; char s2[2]; s2[0] = i; s2[1] = 0; NSString *nsstr = [NSString stringWithCString:s2 encoding:NSISOLatin1StringEncoding]; utf8_metrics (fid, nsstr, cs); max->width = MAX (max->width, cs->width); max->ascent = MAX (max->ascent, cs->ascent); max->descent = MAX (max->descent, cs->descent); max->lbearing = MAX (max->lbearing, cs->lbearing); max->rbearing = MAX (max->rbearing, cs->rbearing); min->width = MIN (min->width, cs->width); min->ascent = MIN (min->ascent, cs->ascent); min->descent = MIN (min->descent, cs->descent); min->lbearing = MIN (min->lbearing, cs->lbearing); min->rbearing = MIN (min->rbearing, cs->rbearing); # if 0 fprintf(stderr, " %3d %c: w=%3d lb=%3d rb=%3d as=%3d ds=%3d " " bb=%5.1f x %5.1f @ %5.1f %5.1f adv=%5.1f %5.1f\n", i, i, cs->width, cs->lbearing, cs->rbearing, cs->ascent, cs->descent, bbox.size.width, bbox.size.height, bbox.origin.x, bbox.origin.y, advancement.width, advancement.height); # endif // 0 } } // Since 'Font' includes the metrics, this just makes a copy of that. // XFontStruct * XQueryFont (Display *dpy, Font fid) { // copy XFontStruct XFontStruct *f = (XFontStruct *) calloc (1, sizeof(*f)); *f = fid->metrics; // build XFontProps f->n_properties = 1; f->properties = malloc (sizeof(*f->properties) * f->n_properties); f->properties[0].name = XA_FONT; Assert (sizeof (f->properties[0].card32) >= sizeof (char *), "atoms probably needs a real implementation"); // If XInternAtom is ever implemented, use it here. f->properties[0].card32 = (unsigned long)fid->xa_font; // copy XCharStruct array int size = (f->max_char_or_byte2 - f->min_char_or_byte2) + 1; f->per_char = (XCharStruct *) calloc (size + 2, sizeof (XCharStruct)); memcpy (f->per_char, fid->metrics.per_char, size * sizeof (XCharStruct)); return f; } static Font copy_font (Font fid) { // copy 'Font' struct Font fid2 = (Font) malloc (sizeof(*fid2)); *fid2 = *fid; // copy XCharStruct array int size = fid->metrics.max_char_or_byte2 - fid->metrics.min_char_or_byte2; fid2->metrics.per_char = (XCharStruct *) malloc ((size + 2) * sizeof (XCharStruct)); memcpy (fid2->metrics.per_char, fid->metrics.per_char, size * sizeof (XCharStruct)); // copy the other pointers fid2->ps_name = strdup (fid->ps_name); fid2->xa_font = strdup (fid->xa_font); // [fid2->nsfont retain]; fid2->metrics.fid = fid2; return fid2; } static NSArray * font_family_members (NSString *family_name) { # ifndef USE_IPHONE return [[NSFontManager sharedFontManager] availableMembersOfFontFamily:family_name]; # else return [UIFont fontNamesForFamilyName:family_name]; # endif } static NSString * default_font_family (NSFontTraitMask require) { return require & NSFixedPitchFontMask ? @"Courier" : @"Verdana"; } static NSFont * try_font (NSFontTraitMask traits, NSFontTraitMask mask, NSString *family_name, float size, char **name_ret) { Assert (size > 0, "zero font size"); NSArray *family_members = font_family_members (family_name); if (!family_members.count) family_members = font_family_members (default_font_family (traits)); # ifndef USE_IPHONE for (unsigned k = 0; k != family_members.count; ++k) { NSArray *member = [family_members objectAtIndex:k]; NSFontTraitMask font_mask = [(NSNumber *)[member objectAtIndex:3] unsignedIntValue]; if ((font_mask & mask) == traits) { NSString *name = [member objectAtIndex:0]; NSFont *f = [NSFont fontWithName:name size:size]; if (!f) break; /* Don't use this font if it (probably) doesn't include ASCII characters. */ NSStringEncoding enc = [f mostCompatibleStringEncoding]; if (! (enc == NSUTF8StringEncoding || enc == NSISOLatin1StringEncoding || enc == NSNonLossyASCIIStringEncoding || enc == NSISOLatin2StringEncoding || enc == NSUnicodeStringEncoding || enc == NSWindowsCP1250StringEncoding || enc == NSWindowsCP1252StringEncoding || enc == NSMacOSRomanStringEncoding)) { // NSLog(@"skipping \"%@\": encoding = %d", name, enc); break; } // NSLog(@"using \"%@\": %d", name, enc); // *name_ret = strdup ([name cStringUsingEncoding:NSUTF8StringEncoding]); *name_ret = strdup (name.UTF8String); return f; } } # else // USE_IPHONE // This trick needs iOS 3.1, see "Using SDK-Based Development". Class has_font_descriptor = [UIFontDescriptor class]; for (NSString *fn in family_members) { # define MATCH(X) \ ([fn rangeOfString:X options:NSCaseInsensitiveSearch].location \ != NSNotFound) NSFontTraitMask font_mask; if (has_font_descriptor) { // This only works on iOS 7 and later. font_mask = [[UIFontDescriptor fontDescriptorWithFontAttributes: @{UIFontDescriptorNameAttribute:fn}] symbolicTraits]; } else { font_mask = 0; if (MATCH(@"Bold")) font_mask |= NSBoldFontMask; if (MATCH(@"Italic") || MATCH(@"Oblique")) font_mask |= NSItalicFontMask; if (MATCH(@"Courier")) font_mask |= NSFixedPitchFontMask; } if ((font_mask & mask) == traits) { /* Check if it can do ASCII. No good way to accomplish this! These are fonts present in iPhone Simulator as of June 2012 that don't include ASCII. */ if (MATCH(@"AppleGothic") || // Korean MATCH(@"Dingbats") || // Dingbats MATCH(@"Emoji") || // Emoticons MATCH(@"Geeza") || // Arabic MATCH(@"Hebrew") || // Hebrew MATCH(@"HiraKaku") || // Japanese MATCH(@"HiraMin") || // Japanese MATCH(@"Kailasa") || // Tibetan MATCH(@"Ornaments") || // Dingbats MATCH(@"STHeiti") // Chinese ) break; *name_ret = strdup (fn.UTF8String); return [UIFont fontWithName:fn size:size]; } # undef MATCH } # endif return NULL; } /* On Cocoa and iOS, fonts may be specified as "Georgia Bold 24" instead of XLFD strings; also they can be comma-separated strings with multiple font names. First one that exists wins. */ static NSFont * try_native_font (const char *name, float scale, char **name_ret, float *size_ret, char **xa_font) { if (!name) return 0; const char *spc = strrchr (name, ' '); if (!spc) return 0; NSFont *f = 0; char *token = strdup (name); char *otoken = token; char *name2; char *lasts; while ((name2 = strtok_r (token, ",", &lasts))) { token = 0; while (*name2 == ' ' || *name2 == '\t' || *name2 == '\n') name2++; spc = strrchr (name2, ' '); if (!spc) continue; int dsize = 0; if (1 != sscanf (spc, " %d ", &dsize)) continue; float size = dsize; if (size < 4) continue; size *= scale; name2[strlen(name2) - strlen(spc)] = 0; NSString *nsname = [NSString stringWithCString:name2 encoding:NSUTF8StringEncoding]; f = [NSFont fontWithName:nsname size:size]; if (f) { *name_ret = strdup (name2); *size_ret = size; *xa_font = strdup (name); // Maybe this should be an XLFD? break; } else { NSLog(@"No native font: \"%@\" %.0f", nsname, size); # if 0 for (NSString *fam in [UIFont familyNames]) { NSLog(@"Family: %@", fam); for (NSString *f in [UIFont fontNamesForFamilyName:fam]) { NSLog(@" Font: %@", f); } } # endif } } free (otoken); return f; } /* Returns a random font in the given size and face. */ static NSFont * random_font (NSFontTraitMask traits, NSFontTraitMask mask, float size, NSString **family_ret, char **name_ret) { # ifndef USE_IPHONE // Providing Unbold or Unitalic in the mask for availableFontNamesWithTraits // returns an empty list, at least on a system with default fonts only. NSArray *families = [[NSFontManager sharedFontManager] availableFontFamilies]; if (!families) return 0; # else NSArray *families = [UIFont familyNames]; // There are many dups in the families array -- uniquify it. { NSArray *sorted_families = [families sortedArrayUsingSelector:@selector(compare:)]; NSMutableArray *new_families = [NSMutableArray arrayWithCapacity:sorted_families.count]; NSString *prev_family = @""; for (NSString *family in sorted_families) { if ([family compare:prev_family]) [new_families addObject:family]; prev_family = family; } families = new_families; } # endif // USE_IPHONE long n = [families count]; if (n <= 0) return 0; int j; for (j = 0; j < n; j++) { int i = random() % n; NSString *family_name = [families objectAtIndex:i]; NSFont *result = try_font (traits, mask, family_name, size, name_ret); if (result) { [*family_ret release]; *family_ret = family_name; [*family_ret retain]; return result; } } // None of the fonts support ASCII? return 0; } static const char * xlfd_field_end (const char *s) { const char *s2 = strchr(s, '-'); if (!s2) s2 = s + strlen(s); return s2; } static size_t xlfd_next (const char **s, const char **s2) { if (!**s2) { *s = *s2; } else { Assert (**s2 == '-', "xlfd parse error"); *s = *s2 + 1; *s2 = xlfd_field_end (*s); } return *s2 - *s; } static NSFont * try_xlfd_font (Display *dpy, const char *name, float scale, char **name_ret, float *size_ret, char **xa_font) { NSFont *nsfont = 0; NSString *family_name = nil; NSFontTraitMask require = 0, // Default mask is for the built-in X11 font aliases. mask = NSFixedPitchFontMask | NSBoldFontMask | NSItalicFontMask; BOOL rand = NO; float size = 12; /* In points (1/72 in.) */ char *ps_name = 0; const char *s = (name ? name : ""); size_t L = strlen (s); # define CMP(STR) (L == strlen(STR) && !strncasecmp (s, (STR), L)) # define UNSPEC (L == 0 || L == 1 && *s == '*') if (CMP ("6x10")) size = 8, require |= NSFixedPitchFontMask; else if (CMP ("6x10bold")) size = 8, require |= NSFixedPitchFontMask | NSBoldFontMask; else if (CMP ("fixed")) size = 12, require |= NSFixedPitchFontMask; else if (CMP ("9x15")) size = 12, require |= NSFixedPitchFontMask; else if (CMP ("9x15bold")) size = 12, require |= NSFixedPitchFontMask | NSBoldFontMask; else if (CMP ("vga")) size = 12, require |= NSFixedPitchFontMask; else if (CMP ("console")) size = 12, require |= NSFixedPitchFontMask; else if (CMP ("gallant")) size = 12, require |= NSFixedPitchFontMask; else { NSFontTraitMask forbid = 0; // Incorrect fields are ignored. if (*s == '-') ++s; const char *s2 = xlfd_field_end(s); // Foundry (ignore) L = xlfd_next (&s, &s2); // Family name // This used to substitute Georgia for Times. Now it doesn't. if (CMP ("random")) { rand = YES; } else if (CMP ("fixed")) { require |= NSFixedPitchFontMask; family_name = @"Courier"; } else if (!UNSPEC) { family_name = [[[NSString alloc] initWithBytes:s length:L encoding:NSUTF8StringEncoding] autorelease]; } L = xlfd_next (&s, &s2); // Weight name if (CMP ("bold") || CMP ("demibold")) require |= NSBoldFontMask; else if (CMP ("medium") || CMP ("regular")) forbid |= NSBoldFontMask; L = xlfd_next (&s, &s2); // Slant if (CMP ("i") || CMP ("o")) require |= NSItalicFontMask; else if (CMP ("r")) forbid |= NSItalicFontMask; xlfd_next (&s, &s2); // Set width name (ignore) xlfd_next (&s, &s2); // Add style name (ignore) L = xlfd_next (&s, &s2); // Pixel size (ignore) char *s3; uintmax_t pxsize = strtoumax(s, &s3, 10); if (UNSPEC || s2 != s3) pxsize = UINTMAX_MAX; // i.e. it's invalid. L = xlfd_next (&s, &s2); // Point size uintmax_t ptsize = strtoumax(s, &s3, 10); if (UNSPEC || s2 != s3) ptsize = UINTMAX_MAX; xlfd_next (&s, &s2); // Resolution X (ignore) xlfd_next (&s, &s2); // Resolution Y (ignore) L = xlfd_next (&s, &s2); // Spacing if (CMP ("p")) forbid |= NSFixedPitchFontMask; else if (CMP ("m") || CMP ("c")) require |= NSFixedPitchFontMask; xlfd_next (&s, &s2); // Average width (ignore) // -*-courier-bold-r-*-*-14-*-*-*-*-*-*-* 14 px // -*-courier-bold-r-*-*-*-140-*-*-m-*-*-* 14 pt // -*-courier-bold-r-*-*-140-* 14 pt, via wildcard // -*-courier-bold-r-*-140-* 14 pt, not handled // -*-courier-bold-r-*-*-14-180-*-*-*-*-*-* error L = xlfd_next (&s, &s2); // Charset registry if (ptsize != UINTMAX_MAX) { // It was in the ptsize field, so that's definitely what it is. size = ptsize / 10.0; } else if (pxsize != UINTMAX_MAX) { size = pxsize; // If it's a fully qualified XLFD, then this really is the pxsize. // Otherwise, this is probably point size with a multi-field wildcard. if (L == 0) size /= 10.0; } mask = require | forbid; } # undef CMP # undef UNSPEC if (!family_name && !rand) family_name = default_font_family (require); if (size < 6 || size > 1000) size = 12; size *= scale; if (rand) { nsfont = random_font (require, mask, size, &family_name, &ps_name); [family_name autorelease]; } if (!nsfont) nsfont = try_font (require, mask, family_name, size, &ps_name); // if that didn't work, turn off attibutes until it does // (e.g., there is no "Monaco-Bold".) // if (!nsfont && (mask & NSItalicFontMask)) { require &= ~NSItalicFontMask; mask &= ~NSItalicFontMask; nsfont = try_font (require, mask, family_name, size, &ps_name); } if (!nsfont && (mask & NSBoldFontMask)) { require &= ~NSBoldFontMask; mask &= ~NSBoldFontMask; nsfont = try_font (require, mask, family_name, size, &ps_name); } if (!nsfont && (mask & NSFixedPitchFontMask)) { require &= ~NSFixedPitchFontMask; mask &= ~NSFixedPitchFontMask; nsfont = try_font (require, mask, family_name, size, &ps_name); } if (nsfont) { unsigned dpi_d = XDisplayHeightMM (dpy,0) * 10 / 2; unsigned dpi = (254 * XDisplayHeight (dpy,0) + dpi_d) / (2 * dpi_d); *name_ret = ps_name; *size_ret = size; float actual_size = size / scale; asprintf(xa_font, "-*-%s-%s-%c-*-*-%u-%u-%u-%u-%c-0-iso10646-1", family_name.UTF8String, (require & NSBoldFontMask) ? "bold" : "medium", (require & NSItalicFontMask) ? 'o' : 'r', (unsigned)(dpi * actual_size / 72.27 + 0.5), (unsigned)(actual_size * 10 + 0.5), dpi, dpi, (require & NSFixedPitchFontMask) ? 'm' : 'p'); return nsfont; } else { if (ps_name) free (ps_name); return 0; } } Font XLoadFont (Display *dpy, const char *name) { Font fid = (Font) calloc (1, sizeof(*fid)); float scale = 1; # ifdef USE_IPHONE /* Since iOS screens are physically smaller than desktop screens, scale up the fonts to make them more readable. Note that X11 apps on iOS also have the backbuffer sized in points instead of pixels, resulting in an effective X11 screen size of 768x1024 or so, even if the display has significantly higher resolution. That is unrelated to this hack, which is really about DPI. */ scale = dpy->main_window->window.view.hackedContentScaleFactor; if (scale < 1) // iPad Pro magnifies the backbuffer by 3x, which makes text scale = 1; // excessively blurry in BSOD. # endif fid->dpy = dpy; fid->nsfont = try_native_font (name, scale, &fid->ps_name, &fid->size, &fid->xa_font); if (!fid->nsfont && name && strchr (name, ' ') && !strchr (name, '*')) { // If name contains a space but no stars, it is a native font spec -- // return NULL so that we know it really didn't exist. Else, it is an // XLFD font, so keep trying. XUnloadFont (dpy, fid); return 0; } if (! fid->nsfont) fid->nsfont = try_xlfd_font (dpy, name, scale, &fid->ps_name, &fid->size, &fid->xa_font); // We should never return NULL for XLFD fonts. if (!fid->nsfont) { Assert (0, "no font"); return 0; } CFRetain (fid->nsfont); // needed for garbage collection? //NSLog(@"parsed \"%s\" to %s %.1f", name, fid->ps_name, fid->size); query_font (fid); return fid; } XFontStruct * XLoadQueryFont (Display *dpy, const char *name) { Font fid = XLoadFont (dpy, name); if (!fid) return 0; return XQueryFont (dpy, fid); } int XUnloadFont (Display *dpy, Font fid) { if (fid->ps_name) free (fid->ps_name); if (fid->metrics.per_char) free (fid->metrics.per_char); // #### DAMMIT! I can't tell what's going wrong here, but I keep getting // crashes in [NSFont ascender] <- query_font, and it seems to go away // if I never release the nsfont. So, fuck it, we'll just leak fonts. // They're probably not very big... // // [fid->nsfont release]; // CFRelease (fid->nsfont); free (fid); return 0; } int XFreeFontInfo (char **names, XFontStruct *info, int n) { int i; if (names) { for (i = 0; i < n; i++) if (names[i]) free (names[i]); free (names); } if (info) { for (i = 0; i < n; i++) if (info[i].per_char) { free (info[i].per_char); free (info[i].properties); } free (info); } return 0; } int XFreeFont (Display *dpy, XFontStruct *f) { Font fid = f->fid; XFreeFontInfo (0, f, 1); XUnloadFont (dpy, fid); return 0; } int XSetFont (Display *dpy, GC gc, Font fid) { if (gc->gcv.font) XUnloadFont (dpy, gc->gcv.font); gc->gcv.font = copy_font (fid); [gc->gcv.font->nsfont retain]; CFRetain (gc->gcv.font->nsfont); // needed for garbage collection? return 0; } XFontSet XCreateFontSet (Display *dpy, char *name, char ***missing_charset_list_return, int *missing_charset_count_return, char **def_string_return) { char *name2 = strdup (name); char *s = strchr (name, ','); if (s) *s = 0; XFontSet set = 0; XFontStruct *f = XLoadQueryFont (dpy, name2); if (f) { set = (XFontSet) calloc (1, sizeof(*set)); set->font = f; } free (name2); if (missing_charset_list_return) *missing_charset_list_return = 0; if (missing_charset_count_return) *missing_charset_count_return = 0; if (def_string_return) *def_string_return = 0; return set; } void XFreeFontSet (Display *dpy, XFontSet set) { XFreeFont (dpy, set->font); free (set); } const char * jwxyz_nativeFontName (Font f, float *size) { if (size) *size = f->size; return f->ps_name; } void XFreeStringList (char **list) { int i; if (!list) return; for (i = 0; list[i]; i++) XFree (list[i]); XFree (list); } // Returns the verbose Unicode name of this character, like "agrave" or // "daggerdouble". Used by fontglide debugMetrics. // char * jwxyz_unicode_character_name (Display *dpy, Font fid, unsigned long uc) { char *ret = 0; CTFontRef ctfont = CTFontCreateWithName ((CFStringRef) [fid->nsfont fontName], [fid->nsfont pointSize], NULL); Assert (ctfont, "no CTFontRef for UIFont"); CGGlyph cgglyph; if (CTFontGetGlyphsForCharacters (ctfont, (UniChar *) &uc, &cgglyph, 1)) { CGFontRef cgfont = CTFontCopyGraphicsFont (ctfont, 0); NSString *name = (NSString *) CGFontCopyGlyphNameForGlyph(cgfont, cgglyph); ret = (name ? strdup ([name UTF8String]) : 0); CGFontRelease (cgfont); [name release]; } CFRelease (ctfont); return ret; } // Given a UTF8 string, return an NSString. Bogus UTF8 characters are ignored. // We have to do this because stringWithCString returns NULL if there are // any invalid characters at all. // static NSString * sanitize_utf8 (const char *in, int in_len, Bool *latin1_pP) { int out_len = in_len * 4; // length of string might increase char *s2 = (char *) malloc (out_len); char *out = s2; const char *in_end = in + in_len; const char *out_end = out + out_len; Bool latin1_p = True; while (in < in_end) { unsigned long uc; long L1 = utf8_decode ((const unsigned char *) in, in_end - in, &uc); long L2 = utf8_encode (uc, out, out_end - out); in += L1; out += L2; if (uc > 255) latin1_p = False; } *out = 0; NSString *nsstr = [NSString stringWithCString:s2 encoding:NSUTF8StringEncoding]; free (s2); if (latin1_pP) *latin1_pP = latin1_p; return (nsstr ? nsstr : @""); } int XTextExtents (XFontStruct *f, const char *s, int length, int *dir_ret, int *ascent_ret, int *descent_ret, XCharStruct *cs) { // Unfortunately, adding XCharStructs together to get the extents for a // string doesn't work: Cocoa uses non-integral character advancements, but // XCharStruct.width is an integer. Plus that doesn't take into account // kerning pairs, alternate glyphs, and fun stuff like the word "Zapfino" in // Zapfino. NSString *nsstr = [[[NSString alloc] initWithBytes:s length:length encoding:NSISOLatin1StringEncoding] autorelease]; utf8_metrics (f->fid, nsstr, cs); *dir_ret = 0; *ascent_ret = f->ascent; *descent_ret = f->descent; return 0; } int XTextWidth (XFontStruct *f, const char *s, int length) { int ascent, descent, dir; XCharStruct cs; XTextExtents (f, s, length, &dir, &ascent, &descent, &cs); return cs.width; } int XTextExtents16 (XFontStruct *f, const XChar2b *s, int length, int *dir_ret, int *ascent_ret, int *descent_ret, XCharStruct *cs) { // Bool latin1_p = True; int i, utf8_len = 0; char *utf8 = XChar2b_to_utf8 (s, &utf8_len); // already sanitized for (i = 0; i < length; i++) if (s[i].byte1 > 0) { // latin1_p = False; break; } { NSString *nsstr = [NSString stringWithCString:utf8 encoding:NSUTF8StringEncoding]; utf8_metrics (f->fid, nsstr, cs); } *dir_ret = 0; *ascent_ret = f->ascent; *descent_ret = f->descent; free (utf8); return 0; } /* "Returns the distance in pixels in the primary draw direction from the drawing origin to the origin of the next character to be drawn." "overall_ink_return is set to the bbox of the string's character ink." "The overall_ink_return for a nondescending, horizontally drawn Latin character is conventionally entirely above the baseline; that is, overall_ink_return.height <= -overall_ink_return.y." [So this means that y is the top of the ink, and height grows down: For above-the-baseline characters, y is negative.] "The overall_ink_return for a nonkerned character is entirely at, and to the right of, the origin; that is, overall_ink_return.x >= 0." [So this means that x is the left of the ink, and width grows right. For left-of-the-origin characters, x is negative.] "A character consisting of a single pixel at the origin would set overall_ink_return fields y = 0, x = 0, width = 1, and height = 1." */ int Xutf8TextExtents (XFontSet set, const char *str, int len, XRectangle *overall_ink_return, XRectangle *overall_logical_return) { Bool latin1_p; NSString *nsstr = sanitize_utf8 (str, len, &latin1_p); XCharStruct cs; utf8_metrics (set->font->fid, nsstr, &cs); /* "The overall_logical_return is the bounding box that provides minimum spacing to other graphical features for the string. Other graphical features, for example, a border surrounding the text, should not intersect this rectangle." So I think that means they're the same? Or maybe "ink" is the bounding box, and "logical" is the advancement? But then why is the return value the advancement? */ if (overall_ink_return) XCharStruct_to_XmbRectangle (cs, *overall_ink_return); if (overall_logical_return) XCharStruct_to_XmbRectangle (cs, *overall_logical_return); return cs.width; } static int draw_string (Display *dpy, Drawable d, GC gc, int x, int y, NSString *nsstr) { if (! nsstr) return 1; XRectangle wr = d->frame; CGContextRef cgc = d->cgc; unsigned long argb = gc->gcv.foreground; if (gc->depth == 1) argb = (argb ? WhitePixel(dpy,0) : BlackPixel(dpy,0)); float rgba[4]; query_color_float (dpy, argb, rgba); NSColor *fg = [NSColor colorWithDeviceRed:rgba[0] green:rgba[1] blue:rgba[2] alpha:rgba[3]]; if (!gc->gcv.font) { Assert (0, "no font"); return 1; } /* This crashes on iOS 5.1 because NSForegroundColorAttributeName, NSFontAttributeName, and NSAttributedString are only present on iOS 6 and later. We could resurrect the Quartz code from v5.29 and do a runtime conditional on that, but that would be a pain in the ass. Probably time to just make iOS 6 a requirement. */ NSDictionary *attr = [NSDictionary dictionaryWithObjectsAndKeys: gc->gcv.font->nsfont, NSFontAttributeName, fg, NSForegroundColorAttributeName, nil]; // Don't understand why we have to do both set_color and // NSForegroundColorAttributeName, but we do. // set_color (dpy, cgc, argb, 32, NO, YES); NSAttributedString *astr = [[NSAttributedString alloc] initWithString:nsstr attributes:attr]; CTLineRef dl = CTLineCreateWithAttributedString ( (__bridge CFAttributedStringRef) astr); // Not sure why this is necessary, but xoff is positive when the first // character on the line has a negative lbearing. Without this, the // string is rendered with the first ink at 0 instead of at lbearing. // I have not seen xoff be negative, so I'm not sure if that can happen. // // Test case: "Combining Double Tilde" U+0360 (\315\240) followed by // a letter. // CGFloat xoff = CTLineGetOffsetForStringIndex (dl, 0, NULL); Assert (xoff >= 0, "unexpected CTLineOffset"); x -= xoff; CGContextSetTextPosition (cgc, wr.x + x, wr.y + wr.height - y); CGContextSetShouldAntialias (cgc, gc->gcv.antialias_p); CTLineDraw (dl, cgc); CFRelease (dl); [astr release]; invalidate_drawable_cache (d); return 0; } int XDrawString (Display *dpy, Drawable d, GC gc, int x, int y, const char *str, int len) { char *s2 = (char *) malloc (len + 1); strncpy (s2, str, len); s2[len] = 0; NSString *nsstr = [NSString stringWithCString:s2 encoding:NSISOLatin1StringEncoding]; int ret = draw_string (dpy, d, gc, x, y, nsstr); free (s2); return ret; } int XDrawString16 (Display *dpy, Drawable d, GC gc, int x, int y, const XChar2b *str, int len) { char *s2 = XChar2b_to_utf8 (str, 0); // already sanitized NSString *nsstr = [NSString stringWithCString:s2 encoding:NSUTF8StringEncoding]; int ret = draw_string (dpy, d, gc, x, y, nsstr); free (s2); return ret; } void Xutf8DrawString (Display *dpy, Drawable d, XFontSet set, GC gc, int x, int y, const char *str, int len) { char *s2 = (char *) malloc (len + 1); strncpy (s2, str, len); s2[len] = 0; NSString *nsstr = sanitize_utf8 (str, len, 0); draw_string (dpy, d, gc, x, y, nsstr); free (s2); } int XDrawImageString (Display *dpy, Drawable d, GC gc, int x, int y, const char *str, int len) { int ascent, descent, dir; XCharStruct cs; XTextExtents (&gc->gcv.font->metrics, str, len, &dir, &ascent, &descent, &cs); jwxyz_fill_rect (dpy, d, gc, x + MIN (0, cs.lbearing), y - MAX (0, ascent), MAX (MAX (0, cs.rbearing) - MIN (0, cs.lbearing), cs.width), MAX (0, ascent) + MAX (0, descent), gc->gcv.background); return XDrawString (dpy, d, gc, x, y, str, len); } int XSetClipMask (Display *dpy, GC gc, Pixmap m) { Assert (!!gc->gcv.clip_mask == !!gc->clip_mask, "GC clip mask mixup"); if (gc->gcv.clip_mask) { XFreePixmap (dpy, gc->gcv.clip_mask); CGImageRelease (gc->clip_mask); } gc->gcv.clip_mask = copy_pixmap (dpy, m); if (gc->gcv.clip_mask) gc->clip_mask = CGBitmapContextCreateImage (gc->gcv.clip_mask->cgc); else gc->clip_mask = 0; return 0; } int XSetClipOrigin (Display *dpy, GC gc, int x, int y) { gc->gcv.clip_x_origin = x; gc->gcv.clip_y_origin = y; return 0; } #endif // JWXYZ_QUARTZ -- entire file xscreensaver-5.36/jwxyz/jwzgles.c000664 000767 000024 00000353646 12774322533 017215 0ustar00jwzstaff000000 000000 /* xscreensaver, Copyright (c) 2012-2016 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. */ /* A compatibility shim to allow OpenGL 1.3 source code to work in an OpenGLES environment, where almost every OpenGL 1.3 function has been "deprecated". There are two major operations going on here: - Converting calls to glBegin + glVertex3f + glEnd to glDrawArrays - Implementing display lists. From an API point of view, OpenGL 1.3 and earlier code looks like this: glLightfv (GL_LIGHT0, GL_POSITION, ...); glLightfv (GL_LIGHT0, GL_AMBIENT, ...); glMatrixMode (GL_PROJECTION); glLoadIdentity (); gluPerspective (...); glMatrixMode (GL_MODELVIEW); glLoadIdentity (); gluLookAt (...); glPushMatrix (); glRotatef (...); glColor3f (...); glBegin (GL_TRIANGLES); glNormal3f (...); glVertex3f (...); glVertex3f (...); glVertex3f (...); glEnd (); glPopMatrix (); glFinish (); OpenGLES broke that model by eliminating glBegin(). Instead of iterating a sequence of vertexes, you need to pack your points into an array first, e.g.: GLfloat coords[] = { 0, 0, 0, 0, 1, 0, ... }; glDrawArrays (GL_TRIANGLES, 0, 3); The projection model (glRotatef, etc.) works the same, but glColor() is missing. You're expected to encode that into your arrays. Also, OpenGLES doesn't support display lists at all. So this code shadows all of the functions that are allowed within glBegin, builds up an array, and calls glDrawArrays at the end. Likewise, it shadows all of the functions that are allowed within glNewList and records those calls for later playback. This code only handles OpenGLES 1.1, not 1.0 or 2.x. OpenGLES 2.0 broke things further by eliminating the whole OpenGL lighting model. Instead of specifying the positions and properties of your lights using the glLight* API, now you are expected to implement it all yourself by downloading C-like code into the GPU directly. This is more flexible, in that if you wanted a completely different lighting model than what OpenGL provides, you could do that, but it leaves you needing to download boilerplate to reproduce what used to be built in. Incidentally, the OpenGL numbering scheme goes something like this: OpenGL 1.0 1992 OpenGL 1.1 1997 (improved texture support) OpenGL 1.2 1998 (nothing interesting) OpenGL 1.3 2001 (multisampling, cubemaps) OpenGL 1.4 2002 (added auto-mipmapping) OpenGLES 1.0 2003 (deprecated 80% of the language; fork of OpenGL 1.3) OpenGL 1.5 2003 (added VBOs) OpenGLES 1.1 2004 (fork of OpenGL 1.5) OpenGL 2.0 2004 (a political quagmire) OpenGLES 2.0 2007 (deprecated 95% of the language; fork of OpenGL 2.0) OpenGL 3.0 2008 (added FBOs, VAOs, deprecated 60% of the language) Some things that are missing: - glTexGeni, meaning no spherical environment-mapping textures. - gluNewTess, meaning no tesselation of complex objects. - glMap2f mesh evaluators, meaning no Utah Teapot. - glPolygonMode with GL_LINE or GL_POINT, meaning no wireframe modes that do hidden-surface removal. - glSelectBuffer, meaning no mouse-hit detection on rendered objects. - gluNewQuadric, gluCylinder, etc: rewrite your code to use tube.c, etc. - Putting verts in a display list without a wrapping glBegin. I didn't realize that even worked! Lockward used to do that, before I fixed it to not. - Not every function is implemented; just the ones that I needed for xscreensaver. However, the trivial ones are trivial to enable as they come up. Harder ones will be harder. As a result of that, these savers look wrong: atlantis Uses EYE_PLANE. blocktube Uses SPHERE_MAP. dnalogo Uses GLUtesselator. extrusion Uses all kinds of GLUT crap. flyingtoasters Uses SPHERE_MAP. winduprobot Uses SPHERE_MAP. jigglypuff Uses SPHERE_MAP (in chrome mode), GL_LINE (in wireframe) jigsaw Uses GLUtesselator. pinion Uses glSelectBuffer and gluPickMatrix for mouse-clicks. pipes Uses glMap2f for the 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. */ #undef DEBUG #ifdef HAVE_CONFIG_H # include "config.h" #endif /* HAVE_CONFIG_H */ #ifdef HAVE_JWZGLES /* whole file */ #include #include #include #include #include #include #ifdef HAVE_UNISTD_H # include #endif /* HAVE_UNISTD_H */ #if defined(USE_IPHONE) # include # include #elif defined(HAVE_COCOA) # include # include #elif defined(HAVE_ANDROID) # include # include #else /* real X11 */ # ifndef GL_GLEXT_PROTOTYPES # define GL_GLEXT_PROTOTYPES /* for glBindBuffer */ # endif # include # include #endif #include "jwzglesI.h" #define STRINGIFY(X) #X #undef countof #define countof(x) (sizeof((x))/sizeof((*x))) #undef Assert #ifdef HAVE_COCOA extern void jwxyz_abort (const char *fmt, ...) __dead2; # define Assert(C,S) do { if (!(C)) { jwxyz_abort ("%s",S); }} while(0) #elif defined HAVE_ANDROID # define Assert(C,S) do { \ if (!(C)) { \ __android_log_print (ANDROID_LOG_ERROR, "xscreensaver", "jwzgles: %s\n", S); \ abort(); \ }} 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; typedef struct { GLfloat x, y, z, w; } XYZW; typedef struct { GLfloat s, t, r, q; } STRQ; typedef struct { GLfloat r, g, b, a; } RGBA; /* Used to record all calls to glVertex3f, glNormal3f, etc. while inside glBegin / glEnd so that we can convert that to a single call to glDrawArrays. */ typedef struct { int mode; int count, size; /* size of each array */ XYZW *verts; /* Arrays being built */ XYZ *norms; STRQ *tex; RGBA *color; int ncount; /* How many normals, tex coords and colors were */ int tcount; /* used. We optimize based on "0, 1, or many". */ int ccount; int materialistic; /* Whether glMaterial was called inside glBegin */ XYZ cnorm; /* Prevailing normal/texture/color while building */ STRQ ctex; RGBA ccolor; } vert_set; typedef void (*list_fn_cb) (void); /* We need this nonsense because you can't cast a double to a void* or vice versa. They tend to be passed in different registers, and you need to know about that because it's still 1972 here. */ typedef union { const void *v; GLfloat f; GLuint i; GLshort s; GLdouble d; } void_int; typedef struct { /* saved args for glDrawArrays */ int binding, size, type, stride, bytes; void *data; } draw_array; typedef enum { /* shorthand describing arglist signature */ PROTO_VOID, /* no args */ PROTO_I, /* 1 int arg */ PROTO_F, /* 1 float arg */ PROTO_II, /* int, int */ PROTO_FF, /* float, float */ PROTO_IF, /* int, float */ PROTO_III, /* int, int, int */ PROTO_FFF, /* float, float, float */ PROTO_IIF, /* int, int, float */ PROTO_IIII, /* int, int, int, int */ PROTO_FFFF, /* float, float, float, float */ PROTO_IIV, /* int, int[4] */ PROTO_IFV, /* int, float[4] */ PROTO_IIIV, /* int, int, int[4] */ PROTO_IIFV, /* int, int, float[4] */ PROTO_FV16, /* float[16] */ PROTO_ARRAYS /* glDrawArrays */ } fn_proto; typedef struct { /* A single element of a display list */ const char *name; list_fn_cb fn; /* saved function pointer */ fn_proto proto; /* arglist prototype */ draw_array *arrays; /* args for glDrawArrays */ void_int argv[16]; /* args for everything else */ } list_fn; 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 { /* All display lists */ list *lists; int count, size; } list_set; #define ISENABLED_TEXTURE_2D (1<<0) #define ISENABLED_TEXTURE_GEN_S (1<<1) #define ISENABLED_TEXTURE_GEN_T (1<<2) #define ISENABLED_TEXTURE_GEN_R (1<<3) #define ISENABLED_TEXTURE_GEN_Q (1<<4) #define ISENABLED_LIGHTING (1<<5) #define ISENABLED_BLEND (1<<6) #define ISENABLED_DEPTH_TEST (1<<7) #define ISENABLED_CULL_FACE (1<<8) #define ISENABLED_NORMALIZE (1<<9) #define ISENABLED_FOG (1<<10) #define ISENABLED_COLMAT (1<<11) #define ISENABLED_VERT_ARRAY (1<<12) #define ISENABLED_NORM_ARRAY (1<<13) #define ISENABLED_TEX_ARRAY (1<<14) #define ISENABLED_COLOR_ARRAY (1<<15) #define ISENABLED_ALPHA_TEST (1<<16) typedef struct { GLuint mode; GLfloat obj[4], eye[4]; } texgen_state; typedef struct { /* global state */ vert_set set; /* set being built */ int compiling_list; /* list id if inside glNewList; 0 means immediate */ int replaying_list; /* depth of call stack to glCallList */ int compiling_verts; /* inside glBegin */ list_set lists; /* saved lists */ unsigned long enabled; /* enabled flags, immediate mode */ unsigned long list_enabled; /* and for the list-in-progress */ texgen_state s, t, r, q; /* Implementing glPushClientAttrib? Don't forget about these! */ draw_array varray, narray, carray, tarray; } jwzgles_state; static jwzgles_state *state = 0; #ifdef DEBUG static void Log(const char *fmt, ...) { va_list args; va_start (args, fmt); #ifdef HAVE_ANDROID /* setprop log.redirect-stdio true is another possibility, but that apparently only works on rooted devices. */ __android_log_vprint(ANDROID_LOG_DEBUG, "xscreensaver", fmt, args); # else vfprintf(stderr, fmt, args); # endif va_end (args); } # define LOG(A) Log("jwzgles: " A "\n") # define LOG1(A,B) Log("jwzgles: " A "\n",B) # define LOG2(A,B,C) Log("jwzgles: " A "\n",B,C) # define LOG3(A,B,C,D) Log("jwzgles: " A "\n",B,C,D) # define LOG4(A,B,C,D,E) Log("jwzgles: " A "\n",B,C,D,E) # define LOG5(A,B,C,D,E,F) Log("jwzgles: " A "\n",B,C,D,E,F) # define LOG6(A,B,C,D,E,F,G) Log("jwzgles: " A "\n",B,C,D,E,F,G) # define LOG7(A,B,C,D,E,F,G,H) Log("jwzgles: " A "\n",B,C,D,E,F,G,H) # define LOG8(A,B,C,D,E,F,G,H,I)\ Log("jwzgles: "A "\n",B,C,D,E,F,G,H,I) # define LOG9(A,B,C,D,E,F,G,H,I,J)\ Log("jwzgles: "A "\n",B,C,D,E,F,G,H,I,J) # define LOG10(A,B,C,D,E,F,G,H,I,J,K)\ Log("jwzgles: "A "\n",B,C,D,E,F,G,H,I,J,K) # define LOG17(A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R)\ Log("jwzgles: "A "\n",B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R) # define CHECK(S) jwzgles_check_gl_error(S) #else # define LOG(A) /* */ # define LOG1(A,B) /* */ # define LOG2(A,B,C) /* */ # define LOG3(A,B,C,D) /* */ # define LOG4(A,B,C,D,E) /* */ # define LOG5(A,B,C,D,E,F) /* */ # define LOG6(A,B,C,D,E,F,G) /* */ # define LOG7(A,B,C,D,E,F,G,H) /* */ # define LOG8(A,B,C,D,E,F,G,H,I) /* */ # define LOG9(A,B,C,D,E,F,G,H,I,J) /* */ # define LOG10(A,B,C,D,E,F,G,H,I,J,K) /* */ # define LOG17(A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R) /* */ # define CHECK(S) /* */ #endif #ifdef DEBUG static const char * 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(BYTE) SS(C3F_V3F) SS(C4F_N3F_V3F) SS(C4UB_V2F) SS(C4UB_V3F) SS(CCW) SS(CLAMP) SS(COLOR_ARRAY) SS(COLOR_ARRAY_BUFFER_BINDING); SS(COLOR_MATERIAL) SS(COLOR_MATERIAL_FACE) SS(COLOR_MATERIAL_PARAMETER) SS(COMPILE) SS(CULL_FACE) SS(CW) SS(DECAL) 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) SS(FILL) SS(FLAT) SS(FLOAT) 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) SS(LIGHT3) SS(LIGHTING) SS(LIGHT_MODEL_AMBIENT) SS(LIGHT_MODEL_COLOR_CONTROL) SS(LIGHT_MODEL_LOCAL_VIEWER) SS(LIGHT_MODEL_TWO_SIDE) SS(LINE) SS(LINEAR) SS(LINEAR_MIPMAP_LINEAR) SS(LINEAR_MIPMAP_NEAREST) SS(LINES) SS(LINE_LOOP) SS(LINE_STRIP) SS(LUMINANCE) SS(LUMINANCE_ALPHA) SS(MATRIX_MODE) SS(MODELVIEW) SS(MODULATE) SS(N3F_V3F) SS(NEAREST) SS(NEAREST_MIPMAP_LINEAR) 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) SS(ONE_MINUS_DST_COLOR) SS(ONE_MINUS_SRC_ALPHA) SS(ONE_MINUS_SRC_COLOR) SS(OUT_OF_MEMORY) SS(PACK_ALIGNMENT) SS(POINTS) SS(POLYGON) SS(POLYGON_OFFSET_FILL) SS(POLYGON_SMOOTH) SS(POLYGON_STIPPLE) SS(POSITION) SS(PROJECTION) SS(Q) SS(QUADS) SS(QUAD_STRIP) SS(R) SS(RENDER) SS(REPEAT) SS(RGB) SS(RGBA) SS(RGBA_MODE) SS(S) SS(SELECT) SS(SEPARATE_SPECULAR_COLOR) SS(SHADE_MODEL) SS(SHININESS) SS(SHORT) SS(SINGLE_COLOR) SS(SMOOTH) SS(SPECULAR) SS(SPHERE_MAP) SS(SRC_ALPHA) SS(SRC_ALPHA_SATURATE) SS(SRC_COLOR) SS(STACK_OVERFLOW) SS(STACK_UNDERFLOW) SS(STATIC_DRAW) SS(STENCIL_BUFFER_BIT) SS(T) SS(T2F_C3F_V3F) SS(T2F_C4F_N3F_V3F) SS(T2F_C4UB_V3F) SS(T2F_N3F_V3F) SS(T2F_V3F) SS(T4F_C4F_N3F_V4F) SS(T4F_V4F) SS(TEXTURE) SS(TEXTURE_1D) SS(TEXTURE_2D) SS(TEXTURE_ALPHA_SIZE) SS(TEXTURE_BINDING_2D) SS(TEXTURE_BLUE_SIZE) SS(TEXTURE_BORDER) 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) SS(TEXTURE_GEN_MODE) SS(TEXTURE_GEN_Q) SS(TEXTURE_GEN_R) SS(TEXTURE_GEN_S) SS(TEXTURE_GEN_T) SS(TEXTURE_GREEN_SIZE) SS(TEXTURE_HEIGHT) SS(TEXTURE_INTENSITY_SIZE) SS(TEXTURE_LUMINANCE_SIZE) SS(TEXTURE_MAG_FILTER) SS(TEXTURE_MIN_FILTER) SS(TEXTURE_RED_SIZE) SS(TEXTURE_WRAP_S) SS(TEXTURE_WRAP_T) SS(TRIANGLES) SS(TRIANGLE_FAN) SS(TRIANGLE_STRIP) SS(UNPACK_ALIGNMENT) SS(UNPACK_ROW_LENGTH) SS(UNSIGNED_BYTE) SS(UNSIGNED_INT_8_8_8_8_REV) SS(UNSIGNED_SHORT) 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): return "DEPTH_BUFFER_BIT | COLOR_BUFFER_BIT"; /* Oops, same as INVALID_ENUM. case (GL_DEPTH_BUFFER_BIT | GL_STENCIL_BUFFER_BIT): return "DEPTH_BUFFER_BIT | STENCIL_BUFFER_BIT"; */ case (GL_COLOR_BUFFER_BIT | GL_STENCIL_BUFFER_BIT): return "COLOR_BUFFER_BIT | STENCIL_BUFFER_BIT"; case (GL_DEPTH_BUFFER_BIT | GL_COLOR_BUFFER_BIT | GL_STENCIL_BUFFER_BIT): return "DEPTH_BUFFER_BIT | COLOR_BUFFER_BIT | STENCIL_BUFFER_BIT"; default: { static char buf[255]; sprintf (buf, "0x%04X", mode); return buf; } } } static void jwzgles_check_gl_error (const char *s) { GLenum i = glGetError(); if (i == GL_NO_ERROR) return; fprintf (stderr, "jwzgles: GL ERROR: %s: %s\n", s, mode_desc(i)); } #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; } } void jwzgles_reset (void) { if (! state) state = (jwzgles_state *) calloc (1, sizeof (*state)); if (state->lists.lists) { state->compiling_list = 0; if (state->lists.count) jwzgles_glDeleteLists (1, state->lists.count); free (state->lists.lists); } if (state->set.verts) free (state->set.verts); if (state->set.norms) free (state->set.norms); if (state->set.tex) free (state->set.tex); if (state->set.color) free (state->set.color); memset (state, 0, sizeof(*state)); state->s.mode = state->t.mode = state->r.mode = state->q.mode = GL_EYE_LINEAR; state->s.obj[0] = state->s.eye[0] = 1; /* s = 1 0 0 0 */ state->t.obj[1] = state->t.eye[1] = 1; /* t = 0 1 0 0 */ } int jwzgles_glGenLists (int n) { int i; int ret = 0; Assert (!state->compiling_verts, "glGenLists not allowed inside glBegin"); /* Ensure space in state->lists, clear the one at the end, and tick counter Note that lists are never really deleted, and we can never re-use elements of this array. glDeleteLists zeroes out the contents of the list, but the list ID is still valid for use with glNewList forever. #### So maybe this should be a linked list instead of an array. */ for (i = 0; i < n; i++) { list *L; int id = 0; 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]; memset (L, 0, sizeof (*L)); L->id = id; if (ret == 0) ret = id; LOG1("glGenLists -> %d", L->id); } /* Return the ID of the first list allocated */ return ret; } void jwzgles_glNewList (int id, int mode) { list *L; Assert (id > 0 && id <= state->lists.count, "glNewList: bogus ID"); Assert (mode == GL_COMPILE, "glNewList: bad mode"); Assert (!state->compiling_verts, "glNewList not allowed inside glBegin"); Assert (!state->compiling_list, "nested glNewList"); Assert (state->set.count == 0, "missing glEnd"); L = &state->lists.lists[id-1]; Assert (L->id == id, "glNewList corrupted"); if (L->count != 0) jwzgles_glDeleteLists (L->id, 1); /* Overwriting */ Assert (L->count == 0, "glNewList corrupted"); state->compiling_list = id; state->list_enabled = state->enabled; LOG1("glNewList -> %d", id); } 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); static void generate_texture_coords (GLuint, GLuint); void jwzgles_glEndList (void) { Assert (state->compiling_list, "extra glEndList"); 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; state->list_enabled = state->enabled; } static void list_push (const char * const name, list_fn_cb fn, fn_proto proto, void_int *av) { list *L; list_fn *F; int i; Assert (state->compiling_list > 0, "not inside glNewList"); Assert (state->compiling_list <= state->lists.count, "glNewList corrupted"); L = &state->lists.lists[state->compiling_list-1]; Assert (L, "glNewList: no list"); 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; F->fn = fn; F->proto = proto; if (proto != PROTO_VOID) for (i = 0; i < countof(F->argv); i++) F->argv[i] = av[i]; # ifdef DEBUG switch (proto) { case PROTO_VOID: LOG1 (" push %-12s", name); break; case PROTO_I: if (fn == (list_fn_cb) &jwzgles_glBegin || fn == (list_fn_cb) &jwzgles_glFrontFace || fn == (list_fn_cb) &jwzgles_glEnable || fn == (list_fn_cb) &jwzgles_glDisable || fn == (list_fn_cb) &jwzgles_glEnableClientState || fn == (list_fn_cb) &jwzgles_glDisableClientState || fn == (list_fn_cb) &jwzgles_glShadeModel || fn == (list_fn_cb) &jwzgles_glMatrixMode) LOG2 (" push %-12s %s", name, mode_desc (av[0].i)); else LOG2 (" push %-12s %d", name, av[0].i); break; case PROTO_F: LOG2 (" push %-12s %7.3f", name, av[0].f); break; case PROTO_II: 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); break; case PROTO_FF: LOG3 (" push %-12s %7.3f %7.3f", name, av[0].f, av[1].f); break; case PROTO_IF: LOG3 (" push %-12s %s %7.3f", name, mode_desc (av[0].i), av[1].f); break; case PROTO_III: case PROTO_ARRAYS: if (fn == (list_fn_cb) &jwzgles_glDrawArrays || fn == (list_fn_cb) &jwzgles_glTexParameteri) LOG4 (" push %-12s %s %d %d", name, mode_desc (av[0].i), av[1].i, av[2].i); else LOG4 (" push %-12s %d %d %d", name, av[0].i, av[1].i, av[2].i); break; case PROTO_FFF: LOG4 (" push %-12s %7.3f %7.3f %7.3f", name, av[0].f, av[1].f, av[2].f); break; case PROTO_IIF: LOG4 (" push %-12s %s %s %7.3f", name, mode_desc(av[0].i), mode_desc(av[1].i), av[2].f); break; case PROTO_IIII: LOG5 (" push %-12s %d %d %d %d", name, av[0].i, av[1].i, av[2].i, av[3].i); break; case PROTO_FFFF: LOG5 (" push %-12s %7.3f %7.3f %7.3f %7.3f", name, av[0].f, av[1].f, av[2].f, av[3].f); break; case PROTO_IFV: LOG6 (" push %-12s %s %3.1f %3.1f %3.1f %3.1f", name, mode_desc (av[0].i), av[1].f, av[2].f, av[3].f, av[4].f); break; case PROTO_IIV: LOG6 (" push %-12s %s %d %d %d %d", name, mode_desc (av[0].i), av[1].i, av[2].i, av[3].i, av[4].i); break; case PROTO_IIFV: LOG7 (" push %-12s %s %-8s %3.1f %3.1f %3.1f %3.1f", name, mode_desc (av[0].i), mode_desc (av[1].i), av[2].f, av[3].f, av[4].f, av[5].f); break; case PROTO_IIIV: LOG7 (" push %-12s %s %-8s %3d %3d %3d %3d", name, mode_desc (av[0].i), mode_desc (av[1].i), av[2].i, av[3].i, av[4].i, av[5].i); break; case PROTO_FV16: LOG17 (" push %-12s [" "%8.3f %8.3f %8.3f %8.3f " "\n\t\t\t " "%8.3f %8.3f %8.3f %8.3f " "\n\t\t\t " "%8.3f %8.3f %8.3f %8.3f " "\n\t\t\t " "%8.3f %8.3f %8.3f %8.3f ]", name, av[0].f, av[1].f, av[2].f, av[3].f, av[4].f, av[5].f, av[6].f, av[7].f, av[8].f, av[9].f, av[10].f, av[11].f, av[12].f, av[13].f, av[14].f, av[15].f); break; default: Assert (0, "bogus prototype"); break; } # endif /* DEBUG */ if (proto == PROTO_ARRAYS) /* glDrawArrays */ save_arrays (F, av[1].i + av[2].i); L->count++; } void jwzgles_glBegin (int mode) { Assert (!state->compiling_verts, "nested glBegin"); state->compiling_verts++; /* Only these commands are allowed inside glBegin: glVertex -- not allowed outside glColor glSecondaryColor glIndex glNormal glFogCoord glTexCoord glMultiTexCoord glVertexAttrib glEvalCoord glEvalPoint glArrayElement -- not allowed outside glMaterial glEdgeFlag glCallList glCallLists */ if (!state->replaying_list) LOG2 ("%sglBegin %s", (state->compiling_list || state->replaying_list ? " " : ""), mode_desc (mode)); Assert (state->set.count == 0, "glBegin corrupted"); state->set.mode = mode; state->set.count = 0; state->set.ncount = 0; state->set.tcount = 0; state->set.ccount = 0; } void jwzgles_glDeleteLists (int id0, int range) { Assert (!state->compiling_verts, "glDeleteLists not allowed inside glBegin"); if (state->compiling_list) { void_int vv[2]; vv[0].i = id0; vv[1].i = range; list_push ("glDeleteLists", (list_fn_cb) &jwzgles_glDeleteLists, PROTO_II, vv); } else { int id; if (!state->replaying_list) LOG2 ("glDeleteLists %d %d", id0, range); for (id = id0 + range - 1; id >= id0; id--) { int i; list *L; if (id == 0) continue; /* People do this stupid thing */ if (id > state->lists.count) break; /* this too */ Assert (id > 0 && id <= state->lists.count, "glDeleteLists: bogus ID"); L = &state->lists.lists[id-1]; Assert (L->id == id, "glDeleteLists corrupted"); for (i = 0; i < L->count; i++) { list_fn *lf = &L->fns[i]; if (lf->arrays) { int j; for (j = 0; j < 4; j++) /* 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; } } } extern GLboolean jwzgles_glIsList (GLuint id) { return (id > 0 && id < state->lists.count); } void jwzgles_glNormal3fv (const GLfloat *v) { if (state->compiling_list && !state->compiling_verts) { void_int vv[3]; vv[0].f = v[0]; vv[1].f = v[1]; vv[2].f = v[2]; list_push ("glNormal3f", (list_fn_cb) &jwzgles_glNormal3f, PROTO_FFF, vv); } else { if (!state->replaying_list) LOG5 ("%s%sglNormal3f %7.3f %7.3f %7.3f", (state->compiling_list || state->replaying_list ? " " : ""), (state->compiling_verts ? " rec " : ""), v[0], v[1], v[2]); 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"); } } } void jwzgles_glNormal3f (GLfloat x, GLfloat y, GLfloat z) { GLfloat v[3]; v[0] = x; v[1] = y; v[2] = z; jwzgles_glNormal3fv (v); } void jwzgles_glTexCoord4fv (const GLfloat *v) { if (state->compiling_list && !state->compiling_verts) { void_int vv[4]; vv[0].f = v[0]; vv[1].f = v[1]; vv[2].f = v[2]; vv[3].f = v[3]; list_push ("glTexCoord4f", (list_fn_cb) &jwzgles_glTexCoord4f, PROTO_FFFF, vv); } else { if (!state->replaying_list) LOG6 ("%s%sglTexCoord4f %7.3f %7.3f %7.3f %7.3f", (state->compiling_list || state->replaying_list ? " " : ""), (state->compiling_verts ? " rec " : ""), v[0], v[1], v[2], v[3]); 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++; } } } void jwzgles_glTexCoord4f (GLfloat s, GLfloat t, GLfloat r, GLfloat q) { GLfloat v[4]; v[0] = s; v[1] = t; v[2] = r; v[3] = q; jwzgles_glTexCoord4fv (v); } void jwzgles_glTexCoord3fv (const GLfloat *v) { GLfloat vv[4]; vv[0] = v[0]; vv[1] = v[1]; vv[2] = v[2]; vv[3] = 1; jwzgles_glTexCoord4fv (vv); } void jwzgles_glTexCoord2fv (const GLfloat *v) { GLfloat vv[4]; vv[0] = v[0]; vv[1] = v[1]; vv[2] = 0; vv[3] = 1; jwzgles_glTexCoord4fv (vv); } void jwzgles_glTexCoord3f (GLfloat s, GLfloat t, GLfloat r) { jwzgles_glTexCoord4f (s, t, r, 1); } void jwzgles_glTexCoord2f (GLfloat s, GLfloat t) { jwzgles_glTexCoord4f (s, t, 0, 1); } void jwzgles_glTexCoord1f (GLfloat s) { jwzgles_glTexCoord4f (s, 0, 0, 1); } /* glColor: GLfloat */ void jwzgles_glColor4fv (const GLfloat *v) { if (state->compiling_list && !state->compiling_verts) { void_int vv[4]; vv[0].f = v[0]; vv[1].f = v[1]; vv[2].f = v[2]; vv[3].f = v[3]; list_push ("glColor4f", (list_fn_cb) &jwzgles_glColor4f, PROTO_FFFF, vv); } else { if (!state->replaying_list) LOG6 ("%s%sglColor4f %7.3f %7.3f %7.3f %7.3f", (state->compiling_list || state->replaying_list ? " " : ""), (state->compiling_verts ? " rec " : ""), v[0], v[1], v[2], v[3]); 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"); } } } void jwzgles_glColor4f (GLfloat r, GLfloat g, GLfloat b, GLfloat a) { GLfloat v[4]; v[0] = r; v[1] = g; v[2] = b; v[3] = a; jwzgles_glColor4fv (v); } void jwzgles_glColor3f (GLfloat r, GLfloat g, GLfloat b) { jwzgles_glColor4f (r, g, b, 1); } void jwzgles_glColor3fv (const GLfloat *v) { jwzgles_glColor3f (v[0], v[1], v[2]); } /* glColor: GLdouble */ void jwzgles_glColor4d (GLdouble r, GLdouble g, GLdouble b, GLdouble a) { jwzgles_glColor4f (r, g, b, a); } void jwzgles_glColor4dv (const GLdouble *v) { jwzgles_glColor4d (v[0], v[1], v[2], v[3]); } void jwzgles_glColor3d (GLdouble r, GLdouble g, GLdouble b) { jwzgles_glColor4d (r, g, b, 1.0); } void jwzgles_glColor3dv (const GLdouble *v) { jwzgles_glColor3d (v[0], v[1], v[2]); } /* glColor: GLint (INT_MIN - INT_MAX) */ void jwzgles_glColor4i (GLint r, GLint g, GLint b, GLint a) { /* -0x8000000 - 0x7FFFFFFF => 0.0 - 1.0 */ jwzgles_glColor4f (0.5 + (GLfloat) r / 0xFFFFFFFF, 0.5 + (GLfloat) g / 0xFFFFFFFF, 0.5 + (GLfloat) b / 0xFFFFFFFF, 0.5 + (GLfloat) a / 0xFFFFFFFF); } void jwzgles_glColor4iv (const GLint *v) { jwzgles_glColor4i (v[0], v[1], v[2], v[3]); } void jwzgles_glColor3i (GLint r, GLint g, GLint b) { jwzgles_glColor4i (r, g, b, 0x7FFFFFFF); } void jwzgles_glColor3iv (const GLint *v) { jwzgles_glColor3i (v[0], v[1], v[2]); } /* glColor: GLuint (0 - UINT_MAX) */ void jwzgles_glColor4ui (GLuint r, GLuint g, GLuint b, GLuint a) { /* 0 - 0xFFFFFFFF => 0.0 - 1.0 */ jwzgles_glColor4f ((GLfloat) r / 0xFFFFFFFF, (GLfloat) g / 0xFFFFFFFF, (GLfloat) b / 0xFFFFFFFF, (GLfloat) a / 0xFFFFFFFF); } void jwzgles_glColor4uiv (const GLuint *v) { jwzgles_glColor4ui (v[0], v[1], v[2], v[3]); } void jwzgles_glColor3ui (GLuint r, GLuint g, GLuint b) { jwzgles_glColor4ui (r, g, b, 0xFFFFFFFF); } void jwzgles_glColor3uiv (const GLuint *v) { jwzgles_glColor3ui (v[0], v[1], v[2]); } /* glColor: GLshort (SHRT_MIN - SHRT_MAX) */ void jwzgles_glColor4s (GLshort r, GLshort g, GLshort b, GLshort a) { /* -0x8000 - 0x7FFF => 0.0 - 1.0 */ jwzgles_glColor4f (0.5 + (GLfloat) r / 0xFFFF, 0.5 + (GLfloat) g / 0xFFFF, 0.5 + (GLfloat) b / 0xFFFF, 0.5 + (GLfloat) a / 0xFFFF); } void jwzgles_glColor4sv (const GLshort *v) { jwzgles_glColor4s (v[0], v[1], v[2], v[3]); } void jwzgles_glColor3s (GLshort r, GLshort g, GLshort b) { jwzgles_glColor4s (r, g, b, 0x7FFF); } void jwzgles_glColor3sv (const GLshort *v) { jwzgles_glColor3s (v[0], v[1], v[2]); } /* glColor: GLushort (0 - USHRT_MAX) */ void jwzgles_glColor4us (GLushort r, GLushort g, GLushort b, GLushort a) { /* 0 - 0xFFFF => 0.0 - 1.0 */ jwzgles_glColor4f ((GLfloat) r / 0xFFFF, (GLfloat) g / 0xFFFF, (GLfloat) b / 0xFFFF, (GLfloat) a / 0xFFFF); } void jwzgles_glColor4usv (const GLushort *v) { jwzgles_glColor4us (v[0], v[1], v[2], v[3]); } void jwzgles_glColor3us (GLushort r, GLushort g, GLushort b) { jwzgles_glColor4us (r, g, b, 0xFFFF); } void jwzgles_glColor3usv (const GLushort *v) { jwzgles_glColor3us (v[0], v[1], v[2]); } /* glColor: GLbyte (-128 - 127) */ void jwzgles_glColor4b (GLbyte r, GLbyte g, GLbyte b, GLbyte a) { /* -128 - 127 => 0.0 - 1.0 */ jwzgles_glColor4f (0.5 + (GLfloat) r / 255, 0.5 + (GLfloat) g / 255, 0.5 + (GLfloat) b / 255, 0.5 + (GLfloat) a / 255); } void jwzgles_glColor4bv (const GLbyte *v) { jwzgles_glColor4b (v[0], v[1], v[2], v[3]); } void jwzgles_glColor3b (GLbyte r, GLbyte g, GLbyte b) { jwzgles_glColor4b (r, g, b, 127); } void jwzgles_glColor3bv (const GLbyte *v) { jwzgles_glColor3b (v[0], v[1], v[2]); } /* glColor: GLubyte (0 - 255) */ void jwzgles_glColor4ub (GLubyte r, GLubyte g, GLubyte b, GLubyte a) { /* 0 - 255 => 0.0 - 1.0 */ jwzgles_glColor4f (r / 255.0, g / 255.0, b / 255.0, a / 255.0); } void jwzgles_glColor4ubv (const GLubyte *v) { jwzgles_glColor4ub (v[0], v[1], v[2], v[3]); } void jwzgles_glColor3ub (GLubyte r, GLubyte g, GLubyte b) { jwzgles_glColor4ub (r, g, b, 255); } void jwzgles_glColor3ubv (const GLubyte *v) { jwzgles_glColor3ub (v[0], v[1], v[2]); } void jwzgles_glMaterialfv (GLenum face, GLenum pname, const GLfloat *color) { /* If this is called inside glBegin/glEnd with a front ambient color, then treat it the same as glColor: set the color of the upcoming vertex. Other faces or lighting types within glBegin are ignored. */ if (state->compiling_verts) { if ((face == GL_FRONT || face == GL_FRONT_AND_BACK) && (pname == GL_AMBIENT || pname == GL_DIFFUSE || pname == GL_AMBIENT_AND_DIFFUSE)) { jwzgles_glColor4f (color[0], color[1], color[2], color[3]); state->set.materialistic++; } else LOG2 (" IGNORING glMaterialfv %s %s", mode_desc(face), mode_desc(pname)); } else if (state->compiling_list) { void_int vv[6]; vv[0].i = face; vv[1].i = pname; vv[2].f = color[0]; vv[3].f = color[1]; vv[4].f = color[2]; vv[5].f = color[3]; list_push ("glMaterialfv", (list_fn_cb) &jwzgles_glMaterialfv, PROTO_IIFV, vv); } else { /* If this is called outside of glBegin/glEnd with a front ambient color, then the intent is presumably for that color to apply to the upcoming vertexes (which may be played back from a list that does not have vertex colors in it). In that case, the only way to make the colors show up is to call glColor() with GL_COLOR_MATERIAL enabled. I'm not sure if this will have other inappropriate side effects... */ if ((face == GL_FRONT || face == GL_FRONT_AND_BACK) && (pname == GL_AMBIENT || pname == GL_DIFFUSE || pname == GL_AMBIENT_AND_DIFFUSE)) { jwzgles_glEnable (GL_COLOR_MATERIAL); jwzgles_glColor4f (color[0], color[1], color[2], color[3]); } /* OpenGLES seems to throw "invalid enum" for GL_FRONT -- but it goes ahead and sets the material anyway! No error if we just always use GL_FRONT_AND_BACK. */ if (face == GL_FRONT) face = GL_FRONT_AND_BACK; if (! state->replaying_list) LOG7 ("direct %-12s %s %s %7.3f %7.3f %7.3f %7.3f", "glMaterialfv", mode_desc(face), mode_desc(pname), color[0], color[1], color[2], color[3]); glMaterialfv (face, pname, color); /* the real one */ CHECK("glMaterialfv"); } } void jwzgles_glMaterialiv (GLenum face, GLenum pname, const GLint *v) { GLfloat vv[4]; vv[0] = v[0]; vv[1] = v[1]; vv[2] = v[2]; vv[3] = 1; jwzgles_glMaterialfv (face, pname, vv); } void jwzgles_glMaterialf (GLenum face, GLenum pname, const GLfloat c) { GLfloat vv[4]; vv[0] = c; vv[1] = c; vv[2] = c; vv[3] = 1; jwzgles_glMaterialfv (face, pname, vv); } void jwzgles_glMateriali (GLenum face, GLenum pname, const GLuint c) { jwzgles_glMaterialf (face, pname, c); } void jwzgles_glColorMaterial (GLenum face, GLenum mode) { Assert (!state->compiling_verts, "glColorMaterial not allowed inside glBegin"); #if 0 if (state->compiling_list) { void_int vv[2]; vv[0].i = face; vv[1].i = mode; list_push ("glColorMaterial", (list_fn_cb) &jwzgles_glColorMaterial, PROTO_II, vv); } else { /* No real analog to this distinction in OpenGLES, since color arrays don't distinguish between "color" and "material", */ Assert (0, "glColorMaterial: unimplemented mode"); } #endif } void jwzgles_glVertex4fv (const GLfloat *v) { vert_set *s = &state->set; int count = s->count; Assert (state->compiling_verts, "glVertex4fv not inside glBegin"); LOG5("%s rec glVertex4f %7.3f %7.3f %7.3f %7.3f", (state->compiling_list || state->replaying_list ? " " : ""), v[0], v[1], v[2], v[3]); if (count >= s->size - 1) { int new_size = 20 + (s->size * 1.2); /* 4 arrays, different element sizes... We allocate all 4 arrays just in case we need them, but we might not end up using them all at the end. */ s->verts = (XYZW *) realloc (s->verts, new_size * sizeof (*s->verts)); Assert (s->verts, "out of memory"); s->norms = (XYZ *) realloc (s->norms, new_size * sizeof (*s->norms)); Assert (s->norms, "out of memory"); s->tex = (STRQ *) realloc (s->tex, new_size * sizeof (*s->tex)); Assert (s->tex, "out of memory"); s->color = (RGBA *) realloc (s->color, new_size * sizeof (*s->color)); Assert (s->color, "out of memory"); s->size = new_size; } s->verts [count].x = v[0]; s->verts [count].y = v[1]; s->verts [count].z = v[2]; s->verts [count].w = v[3]; s->norms [count] = s->cnorm; s->tex [count] = s->ctex; s->color [count] = s->ccolor; s->count++; } void jwzgles_glVertex4f (GLfloat x, GLfloat y, GLfloat z, GLfloat w) { GLfloat v[4]; v[0] = x; v[1] = y; v[2] = z; v[3] = w; jwzgles_glVertex4fv (v); } void jwzgles_glVertex4i (GLint x, GLint y, GLint z, GLint w) { jwzgles_glVertex4f (x, y, z, w); } void jwzgles_glVertex3f (GLfloat x, GLfloat y, GLfloat z) { GLfloat v[4]; v[0] = x; v[1] = y; v[2] = z; v[3] = 1; jwzgles_glVertex4fv (v); } void jwzgles_glVertex3i (GLint x, GLint y, GLint z) { jwzgles_glVertex3f (x, y, z); } void jwzgles_glVertex3fv (const GLfloat *v) { jwzgles_glVertex3f (v[0], v[1], v[2]); } void jwzgles_glVertex3dv (const GLdouble *v) { jwzgles_glVertex3f (v[0], v[1], v[2]); } void jwzgles_glVertex2f (GLfloat x, GLfloat y) { GLfloat v[3]; v[0] = x; v[1] = y; v[2] = 0; jwzgles_glVertex3fv (v); } void jwzgles_glVertex2dv (const GLdouble *v) { jwzgles_glVertex2f (v[0], v[1]); } void jwzgles_glVertex2fv (const GLfloat *v) { jwzgles_glVertex2f (v[0], v[1]); } void jwzgles_glVertex2i (GLint x, GLint y) { jwzgles_glVertex2f (x, y); } void jwzgles_glLightiv (GLenum light, GLenum pname, const GLint *params) { GLfloat v[4]; v[0] = params[0]; v[1] = params[1]; v[2] = params[2]; v[3] = params[3]; jwzgles_glLightfv (light, pname, v); } void jwzgles_glLightModeliv (GLenum pname, const GLint *params) { GLfloat v[4]; v[0] = params[0]; v[1] = params[1]; v[2] = params[2]; v[3] = params[3]; jwzgles_glLightModelfv (pname, v); } void jwzgles_glFogiv (GLenum pname, const GLint *params) { GLfloat v[4]; v[0] = params[0]; v[1] = params[1]; v[2] = params[2]; v[3] = params[3]; jwzgles_glFogfv (pname, v); } void jwzgles_glLighti (GLenum light, GLenum pname, GLint param) { jwzgles_glLightf (light, pname, param); } void jwzgles_glLightModeli (GLenum pname, GLint param) { jwzgles_glLightModelf (pname, param); } void jwzgles_glFogi (GLenum pname, GLint param) { jwzgles_glFogf (pname, param); } void jwzgles_glRotated (GLdouble angle, GLdouble x, GLdouble y, GLdouble z) { jwzgles_glRotatef (angle, x, y, z); } void jwzgles_glClipPlane (GLenum plane, const GLdouble *equation) { Assert (state->compiling_verts, "glClipPlane not inside glBegin"); Assert (0, "glClipPlane unimplemented"); /* no GLES equivalent... */ } void jwzgles_glPolygonMode (GLenum face, GLenum mode) { Assert (!state->compiling_verts, "not inside glBegin"); if (state->compiling_list) { void_int vv[2]; vv[0].i = face; vv[1].i = mode; list_push ("glPolygonMode", (list_fn_cb) &jwzgles_glPolygonMode, PROTO_II, vv); } else { /* POINT and LINE don't exist in GLES */ Assert (mode == GL_FILL, "glPolygonMode: unimplemented mode"); } } void jwzgles_glDrawBuffer (GLenum buf) { Assert (!state->compiling_verts, "not inside glBegin"); if (state->compiling_list) { void_int vv[1]; vv[0].i = buf; list_push ("glDrawBuffer", (list_fn_cb) &jwzgles_glDrawBuffer, PROTO_I, vv); } else { /* Assert (buf == GL_BACK, "glDrawBuffer: back buffer only"); */ # ifndef GL_VERSION_ES_CM_1_0 /* not compiling against OpenGLES 1.x */ if (! state->replaying_list) LOG1 ("direct %-12s", "glDrawBuffer"); glDrawBuffer (buf); /* the real one */ CHECK("glDrawBuffer"); # endif } } /* Given an array of sets of 4 elements of arbitrary size, convert it to an array of sets of 6 elements instead: ABCD becomes ABC BCD. */ static int cq2t (unsigned char **arrayP, int stride, int count) { int count2 = count * 6 / 4; int size = stride * count; int size2 = stride * count2; const unsigned char *oarray, *in; unsigned char *array2, *oarray2, *out; int i; oarray = *arrayP; if (!oarray || count == 0) return count2; array2 = (unsigned char *) malloc (size2); Assert (array2, "out of memory"); oarray2 = array2; in = oarray; out = oarray2; for (i = 0; i < count / 4; i++) { const unsigned char *a, *b, *c, *d; /* the 4 corners */ a = in; in += stride; b = in; in += stride; c = in; in += stride; d = in; in += stride; # define PUSH(IN) do { \ const unsigned char *ii = IN; \ int j; \ for (j = 0; j < stride; j++) { \ *out++ = *ii++; \ }} while(0) PUSH (a); PUSH (b); PUSH (d); /* the 2 triangles */ PUSH (b); PUSH (c); PUSH (d); # undef PUSH } Assert (in == oarray + size, "convert_quads corrupted"); Assert (out == oarray2 + size2, "convert_quads corrupted"); free (*arrayP); *arrayP = oarray2; return count2; } /* Convert all coordinates in a GL_QUADS vert_set to GL_TRIANGLES. */ static void convert_quads_to_triangles (vert_set *s) { int count2; Assert (s->mode == GL_QUADS, "convert_quads bad mode"); count2 = cq2t ((unsigned char **) &s->verts, sizeof(*s->verts), s->count); cq2t ((unsigned char **) &s->norms, sizeof(*s->norms), s->count); cq2t ((unsigned char **) &s->tex, sizeof(*s->tex), s->count); cq2t ((unsigned char **) &s->color, sizeof(*s->color), s->count); s->count = count2; s->size = count2; s->mode = GL_TRIANGLES; } void jwzgles_glEnd (void) { vert_set *s = &state->set; int was_norm, was_tex, was_color, was_mat; int is_norm, is_tex, is_color, is_mat; 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]", (state->compiling_list || state->replaying_list ? " " : ""), s->count, s->ncount, s->tcount, s->ccount); LOG1 ("%sglEnd", (state->compiling_list || state->replaying_list ? " " : "")); } if (s->count == 0) return; if (s->mode == GL_QUADS) convert_quads_to_triangles (s); else if (s->mode == GL_QUAD_STRIP) s->mode = GL_TRIANGLE_STRIP; /* They do the same thing! */ else if (s->mode == GL_POLYGON) s->mode = GL_TRIANGLE_FAN; /* They do the same thing! */ jwzgles_glColorPointer (4,GL_FLOAT, sizeof(*s->color),s->color); /* RGBA */ jwzgles_glNormalPointer ( GL_FLOAT, sizeof(*s->norms),s->norms); /* XYZ */ jwzgles_glTexCoordPointer(4,GL_FLOAT, sizeof(*s->tex), s->tex); /* STRQ */ jwzgles_glVertexPointer (4,GL_FLOAT, sizeof(*s->verts),s->verts); /* XYZW */ /* glVertexPointer must come after glTexCoordPointer */ /* If there were no calls to glNormal3f inside of glBegin/glEnd, don't bother enabling the normals array. If there was exactly *one* call to glNormal3f inside of glBegin/glEnd, and it was before the first glVertex3f, then also don't enable the normals array, but do emit that call to glNormal3f before calling glDrawArrays. Likewise for texture coordinates and colors. Be careful to leave the arrays' enabled/disabled state the same as before, or a later caller might end up using one of our arrays by mistake. (Remember that jwzgles_glIsEnabled() tracks the enablement of the list-in-progress as well as the global state.) */ was_norm = jwzgles_glIsEnabled (GL_NORMAL_ARRAY); was_tex = jwzgles_glIsEnabled (GL_TEXTURE_COORD_ARRAY); 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; jwzgles_glEnableClientState (GL_NORMAL_ARRAY); } else { is_norm = 0; if (s->ncount == 1) jwzgles_glNormal3f (s->cnorm.x, s->cnorm.y, s->cnorm.z); jwzgles_glDisableClientState (GL_NORMAL_ARRAY); } if (s->tcount > 1 || ((state->compiling_list ? state->list_enabled : state->enabled) & (ISENABLED_TEXTURE_GEN_S | ISENABLED_TEXTURE_GEN_T | ISENABLED_TEXTURE_GEN_R | ISENABLED_TEXTURE_GEN_Q))) { /* Enable texture coords if any were specified; or if generation is on in immediate mode; or if this list turned on generation. */ is_tex = 1; jwzgles_glEnableClientState (GL_TEXTURE_COORD_ARRAY); } else { is_tex = 0; if (s->tcount == 1) jwzgles_glTexCoord4f (s->ctex.s, s->ctex.t, s->ctex.r, s->ctex.q); jwzgles_glDisableClientState (GL_TEXTURE_COORD_ARRAY); } if (s->ccount > 1) { is_color = 1; jwzgles_glEnableClientState (GL_COLOR_ARRAY); } else { is_color = 0; if (s->ccount == 1) jwzgles_glColor4f (s->ccolor.r, s->ccolor.g, s->ccolor.b, s->ccolor.a); jwzgles_glDisableClientState (GL_COLOR_ARRAY); } jwzgles_glEnableClientState (GL_VERTEX_ARRAY); /* We translated the glMaterial calls to per-vertex colors, which are of the glColor sort, not the glMaterial sort, so automatically turn on material mapping. Maybe this is a bad idea. */ if (s->materialistic && !jwzgles_glIsEnabled (GL_COLOR_MATERIAL)) { is_mat = 1; jwzgles_glEnable (GL_COLOR_MATERIAL); } 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) { \ if (was_##VAR) jwzgles_glEnable##FN (ARG); \ else jwzgles_glDisable##FN (ARG); \ }} while(0) RESET (norm, ClientState, GL_NORMAL_ARRAY); RESET (tex, ClientState, GL_TEXTURE_COORD_ARRAY); RESET (color, ClientState, GL_COLOR_ARRAY); RESET (mat, , GL_COLOR_MATERIAL); # undef RESET s->count = 0; s->ncount = 0; s->tcount = 0; s->ccount = 0; s->materialistic = 0; } /* 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) { if (state->compiling_list) { /* Yes, you can call lists inside of lists. Yes, recursion would be a mistake. */ void_int vv[1]; vv[0].i = id; list_push ("glCallList", (list_fn_cb) &jwzgles_glCallList, PROTO_I, vv); } else { list *L; int i; state->replaying_list++; # ifdef DEBUG fprintf (stderr, "\n"); LOG1 ("glCallList %d", id); # endif Assert (id > 0 && id <= state->lists.count, "glCallList: bogus ID"); L = &state->lists.lists[id-1]; Assert (id == L->id, "glCallList corrupted"); for (i = 0; i < L->count; i++) { list_fn *F = &L->fns[i]; list_fn_cb fn = F->fn; void_int *av = F->argv; switch (F->proto) { case PROTO_VOID: LOG1 (" call %-12s", F->name); ((void (*) (void)) fn) (); break; case PROTO_I: if (fn == (list_fn_cb) &jwzgles_glBegin || fn == (list_fn_cb) &jwzgles_glFrontFace || fn == (list_fn_cb) &jwzgles_glEnable || fn == (list_fn_cb) &jwzgles_glDisable || fn == (list_fn_cb) &jwzgles_glEnableClientState || fn == (list_fn_cb) &jwzgles_glDisableClientState || fn == (list_fn_cb) &jwzgles_glShadeModel || fn == (list_fn_cb) &jwzgles_glMatrixMode) LOG2 (" call %-12s %s", F->name, mode_desc (av[0].i)); else LOG2 (" call %-12s %d", F->name, av[0].i); ((void (*) (int)) fn) (av[0].i); break; case PROTO_F: LOG2 (" call %-12s %7.3f", F->name, av[0].f); ((void (*) (GLfloat)) fn) (av[0].f); break; case PROTO_II: 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 LOG3 (" call %-12s %d %d", F->name, av[0].i, av[1].i); ((void (*) (int, int)) fn) (av[0].i, av[1].i); break; case PROTO_FF: LOG3 (" call %-12s %7.3f %7.3f", F->name, av[0].f, av[1].f); ((void (*) (GLfloat, GLfloat)) fn) (av[0].f, av[1].f); break; case PROTO_IF: LOG3 (" call %-12s %s %7.3f", F->name, mode_desc (av[0].f), av[1].f); ((void (*) (GLint, GLfloat)) fn) (av[0].i, av[1].f); break; case PROTO_III: III: if (fn == (list_fn_cb) &jwzgles_glDrawArrays || fn == (list_fn_cb) &jwzgles_glTexParameteri) LOG4 (" call %-12s %s %d %d", F->name, mode_desc (av[0].i), av[1].i, av[2].i); else LOG4 (" call %-12s %d %d %d", F->name, av[0].i, av[1].i, av[2].i); ((void (*) (int, int, int)) fn) (av[0].i, av[1].i, av[2].i); break; case PROTO_FFF: LOG4 (" call %-12s %7.3f %7.3f %7.3f", F->name, av[0].f, av[1].f, av[2].f); ((void (*) (GLfloat, GLfloat, GLfloat)) fn) (av[0].f, av[1].f, av[2].f); break; case PROTO_IIF: LOG4 (" call %-12s %s %s %7.3f", F->name, mode_desc (av[0].i), mode_desc (av[1].i), av[2].f); ((void (*) (int, int, GLfloat)) fn) (av[0].i, av[1].i, av[2].f); break; case PROTO_IIII: LOG5 (" call %-12s %d %d %d %d", F->name, av[0].i, av[1].i, av[2].i, av[3].i); ((void (*) (int, int, int, int)) fn) (av[0].i, av[1].i, av[2].i, av[3].i); break; case PROTO_FFFF: LOG5 (" call %-12s %7.3f %7.3f %7.3f %7.3f", F->name, av[0].f, av[1].f, av[2].f, av[3].f); ((void (*) (GLfloat, GLfloat, GLfloat, GLfloat)) fn) (av[0].f, av[1].f, av[2].f, av[3].f); break; case PROTO_IFV: { GLfloat v[4]; v[0] = av[1].f; v[1] = av[2].f; v[2] = av[3].f; v[3] = av[4].f; LOG6 (" call %-12s %s %3.1f %3.1f %3.1f %3.1f", F->name, mode_desc (av[0].i), av[1].f, av[2].f, av[3].f, av[4].f); ((void (*) (int, const GLfloat *)) fn) (av[0].i, v); } break; case PROTO_IIFV: { GLfloat v[4]; v[0] = av[2].f; v[1] = av[3].f; v[2] = av[4].f; v[3] = av[5].f; LOG7 (" call %-12s %s %-8s %3.1f %3.1f %3.1f %3.1f", F->name, mode_desc (av[0].i), mode_desc (av[1].i), av[2].f, av[3].f, av[4].f, av[5].f); ((void (*) (int, int, const GLfloat *)) fn) (av[0].i, av[1].i, v); } break; case PROTO_IIV: { int v[4]; v[0] = av[1].i; v[1] = av[2].i; v[2] = av[3].i; v[3] = av[4].i; LOG6 (" call %-12s %s %3d %3d %3d %3d", F->name, mode_desc (av[0].i), av[1].i, av[2].i, av[3].i, av[4].i); ((void (*) (int, const int *)) fn) (av[0].i, v); } break; case PROTO_IIIV: { int v[4]; v[0] = av[2].i; v[1] = av[3].i; v[2] = av[4].i; v[3] = av[5].i; LOG7 (" call %-12s %s %-8s %3d %3d %3d %3d", F->name, mode_desc (av[0].i), mode_desc (av[1].i), av[2].i, av[3].i, av[4].i, av[5].i); ((void (*) (int, int, const int *)) fn) (av[0].i, av[1].i, v); } break; case PROTO_ARRAYS: restore_arrays (F, av[1].i + av[2].i); goto III; break; case PROTO_FV16: { GLfloat m[16]; int i; for (i = 0; i < countof(m); i++) m[i] = av[i].f; LOG17 (" call %-12s [" "%8.3f %8.3f %8.3f %8.3f " "\n\t\t\t " "%8.3f %8.3f %8.3f %8.3f " "\n\t\t\t " "%8.3f %8.3f %8.3f %8.3f " "\n\t\t\t " "%8.3f %8.3f %8.3f %8.3f ]", F->name, m[0], m[1], m[2], m[3], m[4], m[5], m[6], m[7], m[8], m[9], m[10], m[11], m[12], m[13], m[14], m[15]); ((void (*) (GLfloat *)) fn) (m); } break; default: Assert (0, "bogus prototype"); break; } } LOG1 ("glCallList %d done\n", id); state->replaying_list--; Assert (state->replaying_list >= 0, "glCallList corrupted"); } } /* When we save a call to glDrawArrays into a display list, we also need to save the prevailing copy of the arrays that it will use, and restore them later. */ static void save_arrays (list_fn *F, int count) { int i = 0; draw_array *A = (draw_array *) calloc (4, sizeof (*A)); Assert (A, "out of memory"); /* if (state->set.count > 0) */ { jwzgles_glGetIntegerv (GL_VERTEX_ARRAY_BUFFER_BINDING, &A[i].binding); jwzgles_glGetIntegerv (GL_VERTEX_ARRAY_SIZE, &A[i].size); jwzgles_glGetIntegerv (GL_VERTEX_ARRAY_TYPE, &A[i].type); jwzgles_glGetIntegerv (GL_VERTEX_ARRAY_STRIDE, &A[i].stride); jwzgles_glGetPointerv (GL_VERTEX_ARRAY_POINTER, &A[i].data); CHECK("glGetPointerv"); copy_array_data (&A[i], count, "vert"); } i++; if (state->set.ncount > 1) { A[i].size = 3; jwzgles_glGetIntegerv (GL_NORMAL_ARRAY_BUFFER_BINDING, &A[i].binding); jwzgles_glGetIntegerv (GL_NORMAL_ARRAY_TYPE, &A[i].type); jwzgles_glGetIntegerv (GL_NORMAL_ARRAY_STRIDE, &A[i].stride); jwzgles_glGetPointerv (GL_NORMAL_ARRAY_POINTER, &A[i].data); CHECK("glGetPointerv"); copy_array_data (&A[i], count, "norm"); } i++; if (state->set.tcount > 1) { jwzgles_glGetIntegerv (GL_TEXTURE_COORD_ARRAY_BUFFER_BINDING, &A[i].binding); jwzgles_glGetIntegerv (GL_TEXTURE_COORD_ARRAY_SIZE, &A[i].size); jwzgles_glGetIntegerv (GL_TEXTURE_COORD_ARRAY_TYPE, &A[i].type); jwzgles_glGetIntegerv (GL_TEXTURE_COORD_ARRAY_STRIDE, &A[i].stride); jwzgles_glGetPointerv (GL_TEXTURE_COORD_ARRAY_POINTER, &A[i].data); CHECK("glGetPointerv"); copy_array_data (&A[i], count, "tex "); } i++; if (state->set.ccount > 1) { jwzgles_glGetIntegerv (GL_COLOR_ARRAY_BUFFER_BINDING, &A[i].binding); jwzgles_glGetIntegerv (GL_COLOR_ARRAY_SIZE, &A[i].size); jwzgles_glGetIntegerv (GL_COLOR_ARRAY_TYPE, &A[i].type); jwzgles_glGetIntegerv (GL_COLOR_ARRAY_STRIDE, &A[i].stride); jwzgles_glGetPointerv (GL_COLOR_ARRAY_POINTER, &A[i].data); CHECK("glGetPointerv"); copy_array_data (&A[i], count, "col "); } /* Freed by glDeleteLists. */ Assert (!F->arrays, "save_arrays corrupted"); F->arrays = A; } #ifdef DEBUG static void dump_array_data (draw_array *A, int count, const char *action, const char *name, const void *old) { int bytes = count * A->stride; 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"); } if (A->binding) { Assert (((unsigned long) A->binding < 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; GLfloat *f = (GLfloat *) b; int s = A->size; if (s == 0) s = 3; /* normals */ fprintf (stderr, "jwzgles: "); for (j = 0; j < s; j++) fprintf (stderr, " %7.3f", f[j]); fprintf (stderr, "\n"); b += A->stride; } } # endif } static void dump_direct_array_data (int count) { draw_array A = { 0, }; if (jwzgles_glIsEnabled (GL_VERTEX_ARRAY)) { jwzgles_glGetIntegerv (GL_VERTEX_ARRAY_BUFFER_BINDING, &A.binding); jwzgles_glGetIntegerv (GL_VERTEX_ARRAY_SIZE, &A.size); jwzgles_glGetIntegerv (GL_VERTEX_ARRAY_TYPE, &A.type); jwzgles_glGetIntegerv (GL_VERTEX_ARRAY_STRIDE, &A.stride); jwzgles_glGetPointerv (GL_VERTEX_ARRAY_POINTER, &A.data); A.bytes = count * A.stride; dump_array_data (&A, count, "direct", "vertex ", 0); } if (jwzgles_glIsEnabled (GL_NORMAL_ARRAY)) { A.size = 0; jwzgles_glGetIntegerv (GL_NORMAL_ARRAY_BUFFER_BINDING, &A.binding); jwzgles_glGetIntegerv (GL_NORMAL_ARRAY_TYPE, &A.type); jwzgles_glGetIntegerv (GL_NORMAL_ARRAY_STRIDE, &A.stride); jwzgles_glGetPointerv (GL_NORMAL_ARRAY_POINTER, &A.data); A.bytes = count * A.stride; dump_array_data (&A, count, "direct", "normal ", 0); } if (jwzgles_glIsEnabled (GL_TEXTURE_COORD_ARRAY)) { jwzgles_glGetIntegerv (GL_TEXTURE_COORD_ARRAY_BUFFER_BINDING, &A.binding); jwzgles_glGetIntegerv (GL_TEXTURE_COORD_ARRAY_SIZE, &A.size); jwzgles_glGetIntegerv (GL_TEXTURE_COORD_ARRAY_TYPE, &A.type); jwzgles_glGetIntegerv (GL_TEXTURE_COORD_ARRAY_STRIDE, &A.stride); jwzgles_glGetPointerv (GL_TEXTURE_COORD_ARRAY_POINTER, &A.data); A.bytes = count * A.stride; dump_array_data (&A, count, "direct", "texture", 0); } if (jwzgles_glIsEnabled (GL_COLOR_ARRAY)) { jwzgles_glGetIntegerv (GL_COLOR_ARRAY_BUFFER_BINDING, &A.binding); jwzgles_glGetIntegerv (GL_COLOR_ARRAY_SIZE, &A.size); jwzgles_glGetIntegerv (GL_COLOR_ARRAY_TYPE, &A.type); jwzgles_glGetIntegerv (GL_COLOR_ARRAY_STRIDE, &A.stride); jwzgles_glGetPointerv (GL_COLOR_ARRAY_POINTER, &A.data); A.bytes = count * A.stride; dump_array_data (&A, count, "direct", "color ", 0); } } #endif /* DEBUG */ static void copy_array_data (draw_array *A, int count, const char *name) { /* Instead of just memcopy'ing the whole array and obeying its previous 'stride' value, we make up a more compact array. This is because if the same array data is being used with multiple component types, e.g. with glInterleavedArrays, we don't want to copy all of the data multiple times. */ int stride2, bytes, i, j; void *data2; const GLfloat *IF; GLfloat *OF; const unsigned char *IB; unsigned char *OB; if (((unsigned long) A->data) < 0xFFFF) { Assert (0, "buffer data not a pointer"); return; } Assert (A->size >= 2 && A->size <= 4, "bogus array size"); switch (A->type) { case GL_FLOAT: stride2 = A->size * sizeof(GLfloat); break; case GL_UNSIGNED_BYTE: stride2 = A->size; break; default: Assert (0, "bogus array type"); break; } bytes = count * stride2; Assert (bytes > 0, "bogus array count or stride"); Assert (A->data, "missing array data"); data2 = (void *) malloc (bytes); Assert (data2, "out of memory"); IB = (const unsigned char *) A->data; OB = (unsigned char *) data2; IF = (const GLfloat *) A->data; OF = (GLfloat *) data2; switch (A->type) { case GL_FLOAT: for (i = 0; i < count; i++) { for (j = 0; j < A->size; j++) *OF++ = IF[j]; IF = (const GLfloat *) (((const unsigned char *) IF) + A->stride); } break; case GL_UNSIGNED_BYTE: for (i = 0; i < count; i++) { for (j = 0; j < A->size; j++) *OB++ = IB[j]; IB += A->stride; } break; default: Assert (0, "bogus array type"); break; } A->data = data2; A->bytes = bytes; A->stride = stride2; # ifdef DEBUG dump_array_data (A, count, "saved", name, 0); # endif } static void restore_arrays (list_fn *F, int count) { int i = 0; draw_array *A = F->arrays; Assert (A, "missing array"); for (i = 0; i < 4; i++) { 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: jwzgles_glVertexPointer (A[i].size, A[i].type, A[i].stride, A[i].data); name = "vertex "; CHECK("glVertexPointer"); break; case 1: jwzgles_glNormalPointer ( A[i].type, A[i].stride, A[i].data); name = "normal "; CHECK("glNormalPointer"); break; case 2: jwzgles_glTexCoordPointer(A[i].size, A[i].type, A[i].stride, A[i].data); name = "texture"; CHECK("glTexCoordPointer"); break; case 3: jwzgles_glColorPointer (A[i].size, A[i].type, A[i].stride, A[i].data); name = "color "; CHECK("glColorPointer"); break; default: Assert (0, "wat"); break; } # ifdef DEBUG dump_array_data (&A[i], count, "restored", name, 0); # endif (void)name; } glBindBuffer (GL_ARRAY_BUFFER, 0); /* Keep out of others' hands */ } void jwzgles_glDrawArrays (GLuint mode, GLuint first, GLuint count) { /* If we are auto-generating texture coordinates, do that now, after the vertex array was installed, but before drawing, This happens when recording into a list, or in direct mode. It must happen before calling optimize_arrays() from glEndList(). */ if (! state->replaying_list && ((state->compiling_list ? state->list_enabled : state->enabled) & (ISENABLED_TEXTURE_GEN_S | ISENABLED_TEXTURE_GEN_T | ISENABLED_TEXTURE_GEN_R | ISENABLED_TEXTURE_GEN_Q))) generate_texture_coords (first, count); if (state->compiling_list) { void_int vv[3]; vv[0].i = mode; vv[1].i = first; vv[2].i = count; list_push ("glDrawArrays", (list_fn_cb) &jwzgles_glDrawArrays, PROTO_ARRAYS, vv); } else { # ifdef DEBUG if (! state->replaying_list) { LOG4("direct %-12s %d %d %d", "glDrawArrays", mode, first, count); dump_direct_array_data (first + count); } # endif glDrawArrays (mode, first, count); /* the real one */ CHECK("glDrawArrays"); } } void jwzgles_glInterleavedArrays (GLenum format, GLsizei stride, const void *data) { /* We can implement this by calling the various *Pointer functions with offsets into the same data, taking advantage of stride. */ const unsigned char *c = (const unsigned char *) data; # define B 1 # define F sizeof(GLfloat) Assert (!state->compiling_verts, "glInterleavedArrays not allowed inside glBegin"); jwzgles_glEnableClientState (GL_VERTEX_ARRAY); if (!state->replaying_list) LOG4 ("%sglInterleavedArrays %s %d %lX", (state->compiling_list || state->replaying_list ? " " : ""), mode_desc (format), stride, (unsigned long) data); switch (format) { case GL_V2F: jwzgles_glVertexPointer (2, GL_FLOAT, stride, c); CHECK("glVertexPointer"); if (!state->replaying_list) LOG3 ("%s -> glVertexPointer 2 FLOAT %d %lX", (state->compiling_list || state->replaying_list ? " " : ""), stride, (unsigned long) c); break; case GL_V3F: jwzgles_glVertexPointer (3, GL_FLOAT, stride, c); CHECK("glVertexPointer"); if (!state->replaying_list) LOG3 ("%s -> glVertexPointer 3 FLOAT %d %lX", (state->compiling_list || state->replaying_list ? " " : ""), stride, (unsigned long) c); break; case GL_C4UB_V2F: if (stride == 0) stride = 4*B + 2*F; jwzgles_glEnableClientState (GL_COLOR_ARRAY); jwzgles_glColorPointer (4, GL_UNSIGNED_BYTE, stride, c); CHECK("glColorPointer"); c += 4*B; /* #### might be incorrect float-aligned address */ jwzgles_glVertexPointer (2, GL_FLOAT, stride, c); break; case GL_C4UB_V3F: if (stride == 0) stride = 4*B + 3*F; jwzgles_glEnableClientState (GL_COLOR_ARRAY); jwzgles_glColorPointer (4, GL_UNSIGNED_BYTE, stride, c); CHECK("glColorPointer"); c += 4*B; jwzgles_glVertexPointer (3, GL_FLOAT, stride, c); CHECK("glVertexPointer"); break; case GL_C3F_V3F: if (stride == 0) stride = 3*F + 3*F; jwzgles_glEnableClientState (GL_COLOR_ARRAY); jwzgles_glColorPointer (3, GL_FLOAT, stride, c); CHECK("glColorPointer"); c += 3*F; jwzgles_glVertexPointer (3, GL_FLOAT, stride, c); CHECK("glVertexPointer"); break; case GL_N3F_V3F: if (stride == 0) stride = 3*F + 3*F; jwzgles_glEnableClientState (GL_NORMAL_ARRAY); jwzgles_glNormalPointer (GL_FLOAT, stride, c); CHECK("glNormalPointer"); if (!state->replaying_list) LOG3 ("%s -> glNormalPointer FLOAT %d %lX", (state->compiling_list || state->replaying_list ? " " : ""), stride, (unsigned long) c); c += 3*F; jwzgles_glVertexPointer (3, GL_FLOAT, stride, c); CHECK("glVertexPointer"); if (!state->replaying_list) LOG3 ("%s -> glVertexPointer 3 FLOAT %d %lX", (state->compiling_list || state->replaying_list ? " " : ""), stride, (unsigned long) c); break; case GL_C4F_N3F_V3F: if (stride == 0) stride = 4*F + 3*F + 3*F; jwzgles_glEnableClientState (GL_COLOR_ARRAY); jwzgles_glColorPointer (4, GL_FLOAT, stride, c); CHECK("glColorPointer"); c += 4*F; jwzgles_glEnableClientState (GL_NORMAL_ARRAY); jwzgles_glNormalPointer (GL_FLOAT, stride, c); CHECK("glNormalPointer"); c += 3*F; jwzgles_glVertexPointer (3, GL_FLOAT, stride, c); CHECK("glVertexPointer"); break; case GL_T2F_V3F: if (stride == 0) stride = 2*F + 3*F; jwzgles_glEnableClientState (GL_TEXTURE_COORD_ARRAY); jwzgles_glTexCoordPointer (2, GL_FLOAT, stride, c); CHECK("glTexCoordPointer"); c += 2*F; jwzgles_glVertexPointer (3, GL_FLOAT, stride, c); CHECK("glVertexPointer"); break; case GL_T4F_V4F: if (stride == 0) stride = 4*F + 4*F; jwzgles_glEnableClientState (GL_TEXTURE_COORD_ARRAY); jwzgles_glTexCoordPointer (4, GL_FLOAT, stride, c); CHECK("glTexCoordPointer"); c += 4*F; jwzgles_glVertexPointer (4, GL_FLOAT, stride, c); CHECK("glVertexPointer"); break; case GL_T2F_C4UB_V3F: if (stride == 0) stride = 2*F + 4*B + 3*F; jwzgles_glEnableClientState (GL_TEXTURE_COORD_ARRAY); jwzgles_glTexCoordPointer (2, GL_FLOAT, stride, c); CHECK("glTexCoordPointer"); c += 2*F; jwzgles_glEnableClientState (GL_COLOR_ARRAY); jwzgles_glColorPointer (4, GL_UNSIGNED_BYTE, stride, c); CHECK("glColorPointer"); c += 4*B; jwzgles_glVertexPointer (3, GL_FLOAT, stride, c); CHECK("glVertexPointer"); break; case GL_T2F_C3F_V3F: if (stride == 0) stride = 2*F + 3*F + 3*F; jwzgles_glEnableClientState (GL_TEXTURE_COORD_ARRAY); jwzgles_glTexCoordPointer (2, GL_FLOAT, stride, c); CHECK("glTexCoordPointer"); c += 2*F; jwzgles_glEnableClientState (GL_COLOR_ARRAY); jwzgles_glColorPointer (3, GL_FLOAT, stride, c); CHECK("glColorPointer"); c += 3*F; jwzgles_glVertexPointer (3, GL_FLOAT, stride, c); CHECK("glVertexPointer"); break; case GL_T2F_N3F_V3F: if (stride == 0) stride = 2*F + 3*F + 3*F; jwzgles_glEnableClientState (GL_TEXTURE_COORD_ARRAY); jwzgles_glTexCoordPointer (2, GL_FLOAT, stride, c); CHECK("glTexCoordPointer"); c += 2*F; jwzgles_glEnableClientState (GL_NORMAL_ARRAY); jwzgles_glNormalPointer (GL_FLOAT, stride, c); CHECK("glNormalPointer"); c += 3*F; jwzgles_glVertexPointer (3, GL_FLOAT, stride, c); CHECK("glVertexPointer"); break; case GL_T2F_C4F_N3F_V3F: if (stride == 0) stride = 2*F + 4*F + 3*F + 3*F; jwzgles_glEnableClientState (GL_TEXTURE_COORD_ARRAY); jwzgles_glTexCoordPointer (2, GL_FLOAT, stride, c); CHECK("glTexCoordPointer"); c += 2*F; jwzgles_glEnableClientState (GL_COLOR_ARRAY); jwzgles_glColorPointer (3, GL_FLOAT, stride, c); CHECK("glColorPointer"); c += 3*F; jwzgles_glEnableClientState (GL_NORMAL_ARRAY); jwzgles_glNormalPointer (GL_FLOAT, stride, c); CHECK("glNormalPointer"); c += 3*F; jwzgles_glVertexPointer (3, GL_FLOAT, stride, c); CHECK("glVertexPointer"); break; case GL_T4F_C4F_N3F_V4F: if (stride == 0) stride = 4*F + 4*F + 3*F + 4*F; jwzgles_glEnableClientState (GL_TEXTURE_COORD_ARRAY); jwzgles_glTexCoordPointer (4, GL_FLOAT, stride, c); CHECK("glTexCoordPointer"); c += 4*F; jwzgles_glEnableClientState (GL_COLOR_ARRAY); jwzgles_glColorPointer (4, GL_FLOAT, stride, c); CHECK("glColorPointer"); c += 4*F; jwzgles_glEnableClientState (GL_NORMAL_ARRAY); jwzgles_glNormalPointer (GL_FLOAT, stride, c); CHECK("glNormalPointer"); c += 3*F; jwzgles_glVertexPointer (3, GL_FLOAT, stride, c); CHECK("glVertexPointer"); break; default: Assert (0, "glInterleavedArrays: bogus format"); break; } # undef B # undef F } void jwzgles_glMultMatrixf (const GLfloat *m) { Assert (!state->compiling_verts, "glMultMatrixf not allowed inside glBegin"); if (state->compiling_list) { void_int vv[16]; int i; for (i = 0; i < countof(vv); i++) vv[i].f = m[i]; list_push ("glMultMatrixf", (list_fn_cb) &jwzgles_glMultMatrixf, PROTO_FV16, vv); } else { if (! state->replaying_list) LOG1 ("direct %-12s", "glMultMatrixf"); glMultMatrixf (m); /* the real one */ CHECK("glMultMatrixf"); } } void jwzgles_glClearIndex(GLfloat c) { /* Does GLES even do indexed color? */ Assert (0, "glClearIndex unimplemented"); } void jwzgles_glBitmap (GLsizei width, GLsizei height, GLfloat xorig, GLfloat yorig, GLfloat xmove, GLfloat ymove, const GLubyte *bitmap) { Assert (0, "glBitmap unimplemented"); } void jwzgles_glPushAttrib(int flags) { Assert (0, "glPushAttrib unimplemented"); } void jwzgles_glPopAttrib(void) { Assert (0, "glPopAttrib unimplemented"); } /* These are needed for object hit detection in pinion. Might need to rewrite that code entirely. Punt for now. */ void jwzgles_glInitNames (void) { /* Assert (0, "glInitNames unimplemented");*/ } void jwzgles_glPushName (GLuint name) { /* Assert (0, "glPushName unimplemented");*/ } GLuint jwzgles_glPopName (void) { /* Assert (0, "glPopName unimplemented");*/ return 0; } GLuint jwzgles_glRenderMode (GLuint mode) { /* Assert (0, "glRenderMode unimplemented");*/ return 0; } void jwzgles_glSelectBuffer (GLsizei size, GLuint *buf) { /* Assert (0, "glSelectBuffer unimplemented");*/ } void jwzgles_glGenTextures (GLuint n, GLuint *ret) { Assert (!state->compiling_verts, "glGenTextures not allowed inside glBegin"); /* technically legal, but stupid! */ Assert (!state->compiling_list, "glGenTextures not allowed inside glNewList"); if (! state->replaying_list) LOG1 ("direct %-12s", "glGenTextures"); glGenTextures (n, ret); /* the real one */ CHECK("glGenTextures"); } /* return the next larger power of 2. */ static int to_pow2 (int value) { int i = 1; while (i < value) i <<= 1; return i; } void jwzgles_glTexImage1D (GLenum target, GLint level, GLint internalFormat, GLsizei width, GLint border, GLenum format, GLenum type, const GLvoid *data) { Assert (!state->compiling_verts, "glTexImage1D not allowed inside glBegin"); /* technically legal, but stupid! */ Assert (!state->compiling_list, "glTexImage1D inside glNewList"); Assert (width == to_pow2(width), "width must be a power of 2"); if (target == GL_TEXTURE_1D) target = GL_TEXTURE_2D; jwzgles_glTexImage2D (target, level, internalFormat, width, 1, border, format, type, data); } void jwzgles_glTexImage2D (GLenum target, GLint level, GLint internalFormat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, const GLvoid *data) { GLvoid *d2 = (GLvoid *) data; Assert (!state->compiling_verts, "glTexImage2D not allowed inside glBegin"); Assert (!state->compiling_list, /* technically legal, but stupid! */ "glTexImage2D not allowed inside glNewList"); Assert (width == to_pow2(width), "width must be a power of 2"); Assert (height == to_pow2(height), "height must be a power of 2"); /* OpenGLES no longer supports "4" as a synonym for "RGBA". */ switch (internalFormat) { case 1: internalFormat = GL_LUMINANCE; break; case 2: internalFormat = GL_LUMINANCE_ALPHA; break; case 3: internalFormat = GL_RGB; break; case 4: internalFormat = GL_RGBA; break; } /* GLES does not let us omit the data pointer to create a blank texture. */ if (! data) { d2 = (GLvoid *) calloc (1, width * height * sizeof(GLfloat) * 4); Assert (d2, "out of memory"); } if (internalFormat == GL_RGB && format == GL_RGBA) internalFormat = GL_RGBA; /* WTF */ if (type == GL_UNSIGNED_INT_8_8_8_8_REV) type = GL_UNSIGNED_BYTE; if (! state->replaying_list) LOG10 ("direct %-12s %s %d %s %d %d %d %s %s 0x%lX", "glTexImage2D", mode_desc(target), level, mode_desc(internalFormat), width, height, border, mode_desc(format), mode_desc(type), (unsigned long) d2); glTexImage2D (target, level, internalFormat, width, height, border, format, type, d2); /* the real one */ CHECK("glTexImage2D"); if (d2 != data) free (d2); } void jwzgles_glTexSubImage2D (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid *pixels) { Assert (!state->compiling_verts, "glTexSubImage2D not allowed inside glBegin"); Assert (!state->compiling_list, /* technically legal, but stupid! */ "glTexSubImage2D not allowed inside glNewList"); if (! state->replaying_list) LOG10 ("direct %-12s %s %d %d %d %d %d %s %s 0x%lX", "glTexSubImage2D", mode_desc(target), level, xoffset, yoffset, width, height, mode_desc (format), mode_desc (type), (unsigned long) pixels); glTexSubImage2D (target, level, xoffset, yoffset, width, height, format, type, pixels); /* the real one */ CHECK("glTexSubImage2D"); } void jwzgles_glCopyTexImage2D (GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border) { Assert (!state->compiling_verts, "glCopyTexImage2D not allowed inside glBegin"); Assert (!state->compiling_list, /* technically legal, but stupid! */ "glCopyTexImage2D not allowed inside glNewList"); if (! state->replaying_list) LOG9 ("direct %-12s %s %d %s %d %d %d %d %d", "glCopyTexImage2D", mode_desc(target), level, mode_desc(internalformat), x, y, width, height, border); glCopyTexImage2D (target, level, internalformat, x, y, width, height, border); /* the real one */ CHECK("glCopyTexImage2D"); } /* OpenGLES doesn't have auto texture-generation at all! "Oh, just rewrite that code to use GPU shaders", they say. How fucking convenient. */ void jwzgles_glTexGenfv (GLenum coord, GLenum pname, const GLfloat *params) { texgen_state *s; if (pname == GL_TEXTURE_GEN_MODE) LOG5 ("%sdirect %-12s %s %s %s", (state->compiling_list || state->replaying_list ? " " : ""), "glTexGenfv", mode_desc(coord), mode_desc(pname), mode_desc(params[0])); else LOG8 ("%sdirect %-12s %s %s %3.1f %3.1f %3.1f %3.1f", (state->compiling_list || state->replaying_list ? " " : ""), "glTexGenfv", mode_desc(coord), mode_desc(pname), params[0], params[1], params[2], params[3]); switch (coord) { case GL_S: s = &state->s; break; case GL_T: s = &state->t; break; case GL_R: s = &state->r; break; case GL_Q: s = &state->q; break; default: Assert (0, "glGetTexGenfv: unknown coord"); break; } switch (pname) { case GL_TEXTURE_GEN_MODE: s->mode = params[0]; break; case GL_OBJECT_PLANE: memcpy (s->obj, params, sizeof(s->obj)); break; case GL_EYE_PLANE: memcpy (s->eye, params, sizeof(s->eye)); break; default: Assert (0, "glTexGenfv: unknown pname"); break; } } void jwzgles_glTexGeni (GLenum coord, GLenum pname, GLint param) { GLfloat v = param; jwzgles_glTexGenfv (coord, pname, &v); } void jwzgles_glGetTexGenfv (GLenum coord, GLenum pname, GLfloat *params) { texgen_state *s; switch (coord) { case GL_S: s = &state->s; break; case GL_T: s = &state->t; break; case GL_R: s = &state->r; break; case GL_Q: s = &state->q; break; default: Assert (0, "glGetTexGenfv: unknown coord"); break; } switch (pname) { case GL_TEXTURE_GEN_MODE: params[0] = s->mode; break; case GL_OBJECT_PLANE: memcpy (params, s->obj, sizeof(s->obj)); break; case GL_EYE_PLANE: memcpy (params, s->eye, sizeof(s->eye)); break; default: Assert (0, "glGetTexGenfv: unknown pname"); break; } if (pname == GL_TEXTURE_GEN_MODE) LOG5 ("%sdirect %-12s %s %s -> %s", (state->compiling_list || state->replaying_list ? " " : ""), "glGetTexGenfv", mode_desc(coord), mode_desc(pname), mode_desc(params[0])); else LOG8 ("%sdirect %-12s %s %s -> %3.1f %3.1f %3.1f %3.1f", (state->compiling_list || state->replaying_list ? " " : ""), "glGetTexGenfv", mode_desc(coord), mode_desc(pname), params[0], params[1], params[2], params[3]); } static GLfloat dot_product (int rank, GLfloat *a, GLfloat *b) { /* A dot B => (A[1] * B[1]) + ... + (A[n] * B[n]) */ GLfloat ret = 0; int i; for (i = 0; i < rank; i++) ret += a[i] * b[i]; return ret; } /* Compute the texture coordinates of the prevailing list of verts as per http://www.opengl.org/wiki/Mathematics_of_glTexGen */ static void generate_texture_coords (GLuint first, GLuint count) { GLfloat *tex_out, *tex_array; GLsizei tex_stride; GLuint i; draw_array A = { 0, }; char *verts_in; struct { GLuint which, flag, mode; GLfloat plane[4]; } tg[4] = { { GL_S, ISENABLED_TEXTURE_GEN_S, 0, { 0, } }, { GL_T, ISENABLED_TEXTURE_GEN_T, 0, { 0, } }, { GL_R, ISENABLED_TEXTURE_GEN_R, 0, { 0, } }, { GL_Q, ISENABLED_TEXTURE_GEN_Q, 0, { 0, }}}; int tcoords = 0; /* Read the texture plane configs that were stored with glTexGen. */ for (i = 0; i < countof(tg); i++) { GLfloat mode = 0; if (! ((state->compiling_list ? state->list_enabled : state->enabled) & tg[i].flag)) continue; jwzgles_glGetTexGenfv (tg[i].which, GL_TEXTURE_GEN_MODE, &mode); jwzgles_glGetTexGenfv (tg[i].which, GL_OBJECT_PLANE, tg[i].plane); tg[i].mode = mode; tcoords++; } if (tcoords == 0) return; /* Nothing to do! */ /* Make the array to store our texture coords in. */ tex_stride = tcoords * sizeof(GLfloat); tex_array = (GLfloat *) calloc (first + count, tex_stride); tex_out = tex_array; /* Read the prevailing vertex array, that was stored with glVertexPointer or glInterleavedArrays. */ jwzgles_glGetIntegerv (GL_VERTEX_ARRAY_BUFFER_BINDING, &A.binding); jwzgles_glGetIntegerv (GL_VERTEX_ARRAY_SIZE, &A.size); jwzgles_glGetIntegerv (GL_VERTEX_ARRAY_TYPE, &A.type); jwzgles_glGetIntegerv (GL_VERTEX_ARRAY_STRIDE, &A.stride); jwzgles_glGetPointerv (GL_VERTEX_ARRAY_POINTER, &A.data); A.bytes = count * A.stride; verts_in = (char *) A.data; /* Iterate over each vertex we're drawing. We just skip the ones < start, but the tex array has left room for zeroes there anyway. */ for (i = first; i < first + count; i++) { GLfloat vert[4] = { 0, }; int j, k; /* Extract this vertex into `vert' as a float, whatever its type was. */ for (j = 0; j < A.size; j++) { switch (A.type) { case GL_SHORT: vert[j] = ((GLshort *) verts_in)[j]; break; case GL_INT: vert[j] = ((GLint *) verts_in)[j]; break; case GL_FLOAT: vert[j] = ((GLfloat *) verts_in)[j]; break; case GL_DOUBLE: vert[j] = ((GLdouble *) verts_in)[j]; break; default: Assert (0, "unknown vertex type"); break; } } /* Compute the texture coordinate for this vertex. For GL_OBJECT_LINEAR, these coordinates are static, and can go into the display list. But for GL_EYE_LINEAR, GL_SPHERE_MAP and GL_REFLECTION_MAP, they depend on the prevailing ModelView matrix, and so need to be computed afresh each time glDrawArrays is called. Unfortunately, our verts and norms are gone by then, dumped down into the VBO and discarded from CPU RAM. Bleh. */ for (j = 0, k = 0; j < countof(tg); j++) { if (! ((state->compiling_list ? state->list_enabled : state->enabled) & tg[j].flag)) continue; switch (tg[j].mode) { case GL_OBJECT_LINEAR: tex_out[k] = dot_product (4, vert, tg[j].plane); break; default: Assert (0, "unimplemented texture mode"); break; } k++; } /* fprintf (stderr, "%4d: V %-5.1f %-5.1f %-5.1f T %-5.1f %-5.1f\n", i, vert[0], vert[1], vert[2], tex_out[0], tex_out[1]); */ /* Move verts_in and tex_out forward to the next vertex by stride. */ verts_in += A.stride; tex_out = (GLfloat *) (((char *) tex_out) + tex_stride); } jwzgles_glEnableClientState (GL_TEXTURE_COORD_ARRAY); jwzgles_glTexCoordPointer (tcoords, GL_FLOAT, tex_stride, (GLvoid *) tex_array); free (tex_array); } int jwzgles_gluBuild2DMipmaps (GLenum target, GLint internalFormat, GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid *data) { /* Not really bothering with mipmapping; only making one level. Note that this required a corresponding hack in glTexParameterf(). */ int w2 = to_pow2(width); int h2 = to_pow2(height); void *d2 = (void *) data; /* OpenGLES no longer supports "4" as a synonym for "RGBA". */ switch (internalFormat) { case 1: internalFormat = GL_LUMINANCE; break; case 2: internalFormat = GL_LUMINANCE_ALPHA; break; case 3: internalFormat = GL_RGB; break; case 4: internalFormat = GL_RGBA; break; } /* if (w2 < h2) w2 = h2; if (h2 < w2) h2 = w2;*/ if (w2 != width || h2 != height) { /* Scale up the image bits to fit the power-of-2 texture. We have to do this because the mipmap API assumes that the texture bits go to texture coordinates 1.0 x 1.0. This could be more efficient, but it doesn't happen often. */ int istride = (format == GL_RGBA ? 4 : 3); int ostride = 4; int ibpl = istride * width; int obpl = ostride * w2; int oy; const unsigned char *in = (unsigned char *) data; unsigned char *out = (void *) malloc (h2 * obpl); Assert (out, "out of memory"); d2 = out; for (oy = 0; oy < h2; oy++) { int iy = oy * height / h2; const unsigned char *iline = in + (iy * ibpl); unsigned char *oline = out + (oy * obpl); int ox; for (ox = 0; ox < w2; ox++) { int ix = ox * width / w2; const unsigned char *i = iline + (ix * istride); unsigned char *o = oline + (ox * ostride); *o++ = *i++; /* R */ *o++ = *i++; /* G */ *o++ = *i++; /* B */ *o++ = (istride == 4 ? *i : 0xFF); /* A */ } } /* width = w2; */ /* height = h2; */ internalFormat = GL_RGBA; format = GL_RGBA; } jwzgles_glTexImage2D (target, 0, internalFormat, w2, h2, 0, format, type, d2); if (d2 != data) free (d2); return 0; } void jwzgles_glRectf (GLfloat x1, GLfloat y1, GLfloat x2, GLfloat y2) { jwzgles_glBegin (GL_POLYGON); jwzgles_glVertex2f (x1, y1); jwzgles_glVertex2f (x2, y1); jwzgles_glVertex2f (x2, y2); jwzgles_glVertex2f (x1, y2); jwzgles_glEnd (); } void jwzgles_glRecti (GLint x1, GLint y1, GLint x2, GLint y2) { jwzgles_glRectf (x1, y1, x2, y2); } void jwzgles_glClearDepth (GLfloat d) { /* Not sure what to do here */ Assert (d == 1.0, "glClearDepth unimplemented"); } /* When in immediate mode, we store a bit into state->enabled, and also call the real glEnable() / glDisable(). When recording a list, we store a bit into state->list_enabled instead, so that we can see what the prevailing enablement state will be when the list is run. set: 1 = set, -1 = clear, 0 = query. */ static int enable_disable (GLuint bit, int set) { int result = (set > 0); int omitp = 0; int csp = 0; unsigned long flag = 0; switch (bit) { case GL_TEXTURE_1D: /* We implement 1D textures as 2D textures. */ case GL_TEXTURE_2D: flag = ISENABLED_TEXTURE_2D; break; case GL_TEXTURE_GEN_S: flag = ISENABLED_TEXTURE_GEN_S; omitp = 1; break; case GL_TEXTURE_GEN_T: flag = ISENABLED_TEXTURE_GEN_T; omitp = 1; break; case GL_TEXTURE_GEN_R: flag = ISENABLED_TEXTURE_GEN_R; omitp = 1; break; case GL_TEXTURE_GEN_Q: flag = ISENABLED_TEXTURE_GEN_Q; omitp = 1; break; case GL_LIGHTING: flag = ISENABLED_LIGHTING; break; case GL_BLEND: flag = ISENABLED_BLEND; break; case GL_DEPTH_TEST: flag = ISENABLED_DEPTH_TEST; break; case GL_ALPHA_TEST: flag = ISENABLED_ALPHA_TEST; break; case GL_CULL_FACE: flag = ISENABLED_CULL_FACE; break; case GL_NORMALIZE: flag = ISENABLED_NORMALIZE; break; case GL_FOG: flag = ISENABLED_FOG; break; case GL_COLOR_MATERIAL: flag = ISENABLED_COLMAT; break; /* Maybe technically these only work with glEnableClientState, but we treat that as synonymous with glEnable. */ case GL_VERTEX_ARRAY: flag = ISENABLED_VERT_ARRAY; csp = 1; break; case GL_NORMAL_ARRAY: flag = ISENABLED_NORM_ARRAY; csp = 1; break; case GL_COLOR_ARRAY: flag = ISENABLED_COLOR_ARRAY; csp = 1; break; case GL_TEXTURE_COORD_ARRAY: flag = ISENABLED_TEX_ARRAY; csp = 1; break; default: Assert (set != 0, "glIsEnabled unimplemented bit"); break; } if (set) /* setting or unsetting, not querying */ { const char *fns[4] = { "glEnable", "glDisable", "glEnableClientState", "glDisableClientState" }; list_fn_cb fs[4] = { (list_fn_cb) &jwzgles_glEnable, (list_fn_cb) &jwzgles_glDisable, (list_fn_cb) &jwzgles_glEnableClientState, (list_fn_cb) &jwzgles_glDisableClientState }; const char *fn = fns[(csp ? 2 : 0) + (set < 0 ? 1 : 0)]; list_fn_cb f = fs[(csp ? 2 : 0) + (set < 0 ? 1 : 0)]; Assert (!state->compiling_verts, "glEnable/glDisable not allowed inside glBegin"); if (state->compiling_list) { void_int vv[1]; vv[0].i = bit; list_push (fn, f,PROTO_I, vv); } if (! state->replaying_list && ! state->compiling_list) LOG2 ("direct %-12s %s", fn, mode_desc(bit)); if (csp && !state->compiling_verts) { if (set > 0) switch (bit) { case GL_NORMAL_ARRAY: state->set.ncount += 2; break; case GL_TEXTURE_COORD_ARRAY: state->set.tcount += 2; break; case GL_COLOR_ARRAY: state->set.ccount += 2; break; default: break; } else switch (bit) { case GL_NORMAL_ARRAY: state->set.ncount = 0; break; case GL_TEXTURE_COORD_ARRAY: state->set.tcount = 0; break; case GL_COLOR_ARRAY: state->set.ccount = 0; break; default: break; } } if (omitp || state->compiling_list) ; else if (set > 0 && csp) glEnableClientState (bit); /* the real one */ else if (set < 0 && csp) glDisableClientState (bit); /* the real one */ else if (set > 0) glEnable (bit); /* the real one */ else glDisable (bit); /* the real one */ CHECK(fn); } /* Store the bit in our state as well, or query it. */ if (flag) { unsigned long *enabled = (state->compiling_list ? &state->list_enabled : &state->enabled); if (set > 0) *enabled |= flag; else if (set < 0) *enabled &= ~flag; else result = !!(*enabled & flag); } return result; } void jwzgles_glEnable (GLuint bit) { enable_disable (bit, 1); } void jwzgles_glDisable (GLuint bit) { enable_disable (bit, -1); } GLboolean jwzgles_glIsEnabled (GLuint bit) { return enable_disable (bit, 0); } void jwzgles_glEnableClientState (GLuint cap) { enable_disable (cap, 1); } void jwzgles_glDisableClientState (GLuint cap) { enable_disable (cap, -1); } #define GET(pname, value) \ case pname: \ *params = value; \ break; /* The spec says that OpenGLES 1.0 doesn't implement glGetFloatv. iOS provides 1.1 (and glGetFloatv by extension) at the very minimum. Android goes down to 1.0. In particular, this includes the emulator when running without GPU emulation. Actual devices that don't support 1.1 are extremely rare at this point. OpenGL ES 1.0 sucks because without glGetFloatv there is no way to retrieve the prevailing matrixes. To implement this, we'd have to keep track of them all on the client side by combining in all the actions of glMultMatrixf, glRotatef, etc. Right now, we're only keeping track of the gl*Pointer functions. */ void jwzgles_glGetFloatv (GLenum pname, GLfloat *params) { if (! state->replaying_list) LOG2 ("direct %-12s %s", "glGetFloatv", mode_desc(pname)); switch (pname) { /* OpenGL ES 1.0 omits a few dozen properties that 1.1 supports. The following, however, is sufficient to get things basically working in the Android emulator. */ GET(GL_VERTEX_ARRAY_BUFFER_BINDING, state->varray.binding) GET(GL_VERTEX_ARRAY_SIZE, state->varray.size) GET(GL_VERTEX_ARRAY_TYPE, state->varray.type) GET(GL_VERTEX_ARRAY_STRIDE, state->varray.stride) GET(GL_NORMAL_ARRAY_BUFFER_BINDING, state->narray.binding) GET(GL_NORMAL_ARRAY_TYPE, state->narray.type) GET(GL_NORMAL_ARRAY_STRIDE, state->narray.stride) GET(GL_COLOR_ARRAY_BUFFER_BINDING, state->carray.binding) GET(GL_COLOR_ARRAY_SIZE, state->carray.size) GET(GL_COLOR_ARRAY_TYPE, state->carray.type) GET(GL_COLOR_ARRAY_STRIDE, state->carray.stride) GET(GL_TEXTURE_COORD_ARRAY_BUFFER_BINDING, state->tarray.binding) GET(GL_TEXTURE_COORD_ARRAY_SIZE, state->tarray.size) GET(GL_TEXTURE_COORD_ARRAY_TYPE, state->tarray.type) GET(GL_TEXTURE_COORD_ARRAY_STRIDE, state->tarray.stride) default: glGetFloatv (pname, params); /* the real one */ break; } CHECK("glGetFloatv"); } void jwzgles_glGetPointerv (GLenum pname, GLvoid **params) { if (! state->replaying_list) LOG2 ("direct %-12s %s", "glGetPointerv", mode_desc(pname)); switch (pname) { GET(GL_VERTEX_ARRAY_POINTER, state->varray.data) GET(GL_NORMAL_ARRAY_POINTER, state->narray.data) GET(GL_COLOR_ARRAY_POINTER, state->carray.data) GET(GL_TEXTURE_COORD_ARRAY_POINTER, state->tarray.data) default: glGetPointerv (pname, params); /* the real one */ } CHECK("glGetPointerv"); } #undef GET /* How many cells are written into the *params array. We need to know this to avoid smashing the caller's stack if they asked for a single-value parameter. */ static int glGet_ret_count (GLenum pname) { switch (pname) { /*case GL_COLOR_MATRIX: */ case GL_MODELVIEW_MATRIX: case GL_PROJECTION_MATRIX: case GL_TEXTURE_MATRIX: /*case GL_TRANSPOSE_COLOR_MATRIX: */ /*case GL_TRANSPOSE_MODELVIEW_MATRIX: */ /*case GL_TRANSPOSE_PROJECTION_MATRIX: */ /*case GL_TRANSPOSE_TEXTURE_MATRIX: */ return 16; /*case GL_ACCUM_CLEAR_VALUE: */ /*case GL_BLEND_COLOR: */ case GL_COLOR_CLEAR_VALUE: case GL_COLOR_WRITEMASK: case GL_CURRENT_COLOR: /*case GL_CURRENT_RASTER_COLOR: */ /*case GL_CURRENT_RASTER_POSITION: */ /*case GL_CURRENT_RASTER_SECONDARY_COLOR: */ /*case GL_CURRENT_RASTER_TEXTURE_COORDS: */ /*case GL_CURRENT_SECONDARY_COLOR: */ case GL_CURRENT_TEXTURE_COORDS: case GL_FOG_COLOR: case GL_LIGHT_MODEL_AMBIENT: /*case GL_MAP2_GRID_DOMAIN: */ case GL_SCISSOR_BOX: case GL_VIEWPORT: return 4; case GL_CURRENT_NORMAL: case GL_POINT_DISTANCE_ATTENUATION: return 3; case GL_ALIASED_LINE_WIDTH_RANGE: case GL_ALIASED_POINT_SIZE_RANGE: case GL_DEPTH_RANGE: /*case GL_LINE_WIDTH_RANGE: */ /*case GL_MAP1_GRID_DOMAIN: */ /*case GL_MAP2_GRID_SEGMENTS: */ case GL_MAX_VIEWPORT_DIMS: /*case GL_POINT_SIZE_RANGE: */ case GL_POLYGON_MODE: case GL_SMOOTH_LINE_WIDTH_RANGE: case GL_SMOOTH_POINT_SIZE_RANGE: return 2; default: return 1; } } void jwzgles_glGetDoublev (GLenum pname, GLdouble *params) { GLfloat m[16]; int i, j = glGet_ret_count (pname); jwzgles_glGetFloatv (pname, m); for (i = 0; i < j; i++) params[i] = m[i]; } void jwzgles_glGetIntegerv (GLenum pname, GLint *params) { GLfloat m[16]; int i, j = glGet_ret_count (pname); jwzgles_glGetFloatv (pname, m); for (i = 0; i < j; i++) params[i] = m[i]; } void jwzgles_glGetBooleanv (GLenum pname, GLboolean *params) { GLfloat m[16]; int i, j = glGet_ret_count (pname); jwzgles_glGetFloatv (pname, m); for (i = 0; i < j; i++) params[i] = (m[i] != 0.0); } const char * jwzgles_gluErrorString (GLenum error) { static char s[20]; sprintf (s, "0x%lX", (unsigned long) error); return s; } /* 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, const GLvoid *ptr) { if (! state->replaying_list) LOG5 ("direct %-12s %d %s %d 0x%lX", "glVertexPointer", size, mode_desc(type), stride, (unsigned long) ptr); state->varray.size = size; state->varray.type = type; state->varray.stride = stride; state->varray.data = (GLvoid *)ptr; glVertexPointer (size, type, stride, ptr); /* the real one */ CHECK("glVertexPointer"); } void jwzgles_glNormalPointer (GLuint type, GLuint stride, const GLvoid *ptr) { if (! state->replaying_list) LOG4 ("direct %-12s %s %d 0x%lX", "glNormalPointer", mode_desc(type), stride, (unsigned long) ptr); state->narray.type = type; state->narray.stride = stride; state->narray.data = (GLvoid *)ptr; glNormalPointer (type, stride, ptr); /* the real one */ CHECK("glNormalPointer"); } void jwzgles_glColorPointer (GLuint size, GLuint type, GLuint stride, const GLvoid *ptr) { if (! state->replaying_list) LOG5 ("direct %-12s %d %s %d 0x%lX", "glColorPointer", size, mode_desc(type), stride, (unsigned long) ptr); state->carray.size = size; state->carray.type = type; state->carray.stride = stride; state->carray.data = (GLvoid *)ptr; glColorPointer (size, type, stride, ptr); /* the real one */ CHECK("glColorPointer"); } void jwzgles_glTexCoordPointer (GLuint size, GLuint type, GLuint stride, const GLvoid *ptr) { if (! state->replaying_list) LOG5 ("direct %-12s %d %s %d 0x%lX", "glTexCoordPointer", size, mode_desc(type), stride, (unsigned long) ptr); state->tarray.size = size; state->tarray.type = type; state->tarray.stride = stride; state->tarray.data = (GLvoid *)ptr; glTexCoordPointer (size, type, stride, ptr); /* the real one */ 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) { Assert (!state->compiling_verts, "glTexParameterf not allowed inside glBegin"); /* We don't *really* implement mipmaps, so just turn this off. */ if (param == GL_LINEAR_MIPMAP_LINEAR) param = GL_LINEAR; if (param == GL_NEAREST_MIPMAP_LINEAR) param = GL_LINEAR; if (param == GL_LINEAR_MIPMAP_NEAREST) param = GL_NEAREST; if (param == GL_NEAREST_MIPMAP_NEAREST) param = GL_NEAREST; /* 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]; vv[0].i = target; vv[1].i = pname; vv[2].f = param; list_push ("glTexParameterf", (list_fn_cb) &jwzgles_glTexParameterf, PROTO_IIF, vv); } else { if (! state->replaying_list) LOG4 ("direct %-12s %s %s %7.3f", "glTexParameterf", mode_desc(target), mode_desc(pname), param); glTexParameterf (target, pname, param); /* the real one */ CHECK("glTexParameterf"); } } void jwzgles_glTexParameteri (GLuint target, GLuint pname, GLuint param) { jwzgles_glTexParameterf (target, pname, param); } void jwzgles_glBindTexture (GLuint target, GLuint texture) { Assert (!state->compiling_verts, "glBindTexture not allowed inside glBegin"); /* We implement 1D textures as 2D textures. */ if (target == GL_TEXTURE_1D) target = GL_TEXTURE_2D; if (state->compiling_list) { void_int vv[2]; vv[0].i = target; vv[1].i = texture; list_push ("glBindTexture", (list_fn_cb) &jwzgles_glBindTexture, PROTO_II, vv); } /* Do it immediately as well, for generate_texture_coords */ /* else */ { if (! state->replaying_list) LOG3 ("direct %-12s %s %d", "glBindTexture", mode_desc(target), texture); glBindTexture (target, texture); /* the real one */ CHECK("glBindTexture"); } } /* Matrix functions, mostly cribbed from Mesa. */ void jwzgles_glFrustum (GLfloat left, GLfloat right, GLfloat bottom, GLfloat top, GLfloat near, GLfloat far) { GLfloat m[16]; GLfloat x = (2 * near) / (right-left); GLfloat y = (2 * near) / (top - bottom); GLfloat a = (right + left) / (right - left); GLfloat b = (top + bottom) / (top - bottom); GLfloat c = -(far + near) / (far - near); GLfloat d = -(2 * far * near) / (far - near); # define M(X,Y) m[Y * 4 + X] M(0,0) = x; M(0,1) = 0; M(0,2) = a; M(0,3) = 0; M(1,0) = 0; M(1,1) = y; M(1,2) = b; M(1,3) = 0; M(2,0) = 0; M(2,1) = 0; M(2,2) = c; M(2,3) = d; M(3,0) = 0; M(3,1) = 0; M(3,2) = -1; M(3,3) = 0; # undef M jwzgles_glMultMatrixf (m); } void jwzgles_glOrtho (GLfloat left, GLfloat right, GLfloat bottom, GLfloat top, GLfloat near, GLfloat far) { GLfloat m[16]; GLfloat a = 2 / (right - left); GLfloat b = -(right + left) / (right - left); GLfloat c = 2 / (top - bottom); GLfloat d = -(top + bottom) / (top - bottom); GLfloat e = -2 / (far - near); GLfloat f = -(far + near) / (far - near); # define M(X,Y) m[Y * 4 + X] M(0,0) = a; M(0,1) = 0; M(0,2) = 0; M(0,3) = b; M(1,0) = 0; M(1,1) = c; M(1,2) = 0; M(1,3) = d; M(2,0) = 0; M(2,1) = 0; M(2,2) = e; M(2,3) = f; M(3,0) = 0; M(3,1) = 0; M(3,2) = 0; M(3,3) = 1; # undef M jwzgles_glMultMatrixf (m); } void jwzgles_gluPerspective (GLdouble fovy, GLdouble aspect, GLdouble near, GLdouble far) { GLfloat m[16]; double si, co, dz; double rad = fovy / 2 * M_PI / 180; double a, b, c, d; dz = far - near; si = sin(rad); if (dz == 0 || si == 0 || aspect == 0) return; co = cos(rad) / si; a = co / aspect; b = co; c = -(far + near) / dz; d = -2 * near * far / dz; # define M(X,Y) m[Y * 4 + X] M(0,0) = a; M(0,1) = 0; M(0,2) = 0; M(0,3) = 0; M(1,0) = 0; M(1,1) = b; M(1,2) = 0; M(1,3) = 0; M(2,0) = 0; M(2,1) = 0; M(2,2) = c; M(2,3) = d; M(3,0) = 0; M(3,1) = 0; M(3,2) = -1; M(3,3) = 0; # undef M jwzgles_glMultMatrixf (m); } void jwzgles_gluLookAt (GLfloat eyex, GLfloat eyey, GLfloat eyez, GLfloat centerx, GLfloat centery, GLfloat centerz, GLfloat upx, GLfloat upy, GLfloat upz) { GLfloat m[16]; GLfloat x[3], y[3], z[3]; GLfloat mag; /* Make rotation matrix */ /* Z vector */ z[0] = eyex - centerx; z[1] = eyey - centery; z[2] = eyez - centerz; mag = sqrt(z[0] * z[0] + z[1] * z[1] + z[2] * z[2]); if (mag) { /* mpichler, 19950515 */ z[0] /= mag; z[1] /= mag; z[2] /= mag; } /* Y vector */ y[0] = upx; y[1] = upy; y[2] = upz; /* X vector = Y cross Z */ x[0] = y[1] * z[2] - y[2] * z[1]; x[1] = -y[0] * z[2] + y[2] * z[0]; x[2] = y[0] * z[1] - y[1] * z[0]; /* Recompute Y = Z cross X */ y[0] = z[1] * x[2] - z[2] * x[1]; y[1] = -z[0] * x[2] + z[2] * x[0]; y[2] = z[0] * x[1] - z[1] * x[0]; /* mpichler, 19950515 */ /* cross product gives area of parallelogram, which is < 1.0 for * non-perpendicular unit-length vectors; so normalize x, y here */ mag = sqrt(x[0] * x[0] + x[1] * x[1] + x[2] * x[2]); if (mag) { x[0] /= mag; x[1] /= mag; x[2] /= mag; } mag = sqrt(y[0] * y[0] + y[1] * y[1] + y[2] * y[2]); if (mag) { y[0] /= mag; y[1] /= mag; y[2] /= mag; } #define M(row,col) m[col*4+row] M(0, 0) = x[0]; M(0, 1) = x[1]; M(0, 2) = x[2]; M(0, 3) = 0.0; M(1, 0) = y[0]; M(1, 1) = y[1]; M(1, 2) = y[2]; M(1, 3) = 0.0; M(2, 0) = z[0]; M(2, 1) = z[1]; M(2, 2) = z[2]; M(2, 3) = 0.0; M(3, 0) = 0.0; M(3, 1) = 0.0; M(3, 2) = 0.0; M(3, 3) = 1.0; #undef M jwzgles_glMultMatrixf(m); /* Translate Eye to Origin */ jwzgles_glTranslatef(-eyex, -eyey, -eyez); } static void __gluMultMatrixVecd (const GLdouble matrix[16], const GLdouble in[4], GLdouble out[4]) { int i; for (i=0; i<4; i++) { out[i] = in[0] * matrix[0*4+i] + in[1] * matrix[1*4+i] + in[2] * matrix[2*4+i] + in[3] * matrix[3*4+i]; } } GLint jwzgles_gluProject (GLdouble objx, GLdouble objy, GLdouble objz, const GLdouble modelMatrix[16], const GLdouble projMatrix[16], const GLint viewport[4], GLdouble *winx, GLdouble *winy, GLdouble *winz) { GLdouble in[4]; GLdouble out[4]; /* #### I suspect this is not working right. I was seeing crazy values in lament.c. Maybe there's some float-vs-double confusion going on? */ in[0]=objx; in[1]=objy; in[2]=objz; in[3]=1.0; __gluMultMatrixVecd(modelMatrix, in, out); __gluMultMatrixVecd(projMatrix, out, in); if (in[3] == 0.0) return(GL_FALSE); in[0] /= in[3]; in[1] /= in[3]; in[2] /= in[3]; /* Map x, y and z to range 0-1 */ in[0] = in[0] * 0.5 + 0.5; in[1] = in[1] * 0.5 + 0.5; in[2] = in[2] * 0.5 + 0.5; /* Map x,y to viewport */ in[0] = in[0] * viewport[2] + viewport[0]; in[1] = in[1] * viewport[3] + viewport[1]; *winx=in[0]; *winy=in[1]; *winz=in[2]; return(GL_TRUE); } /* OpenGL ES has different extensions vs. regular OpenGL, but the basic principle for checking for extensions is the same. */ GLboolean jwzgles_gluCheckExtension (const GLubyte *ext_name, const GLubyte *ext_string) { size_t ext_len = strlen ((const char *)ext_name); for (;;) { const GLubyte *found = (const GLubyte *)strstr ((const char *)ext_string, (const char *)ext_name); if (!found) break; char last_ch = found[ext_len]; if ((found == ext_string || found[-1] == ' ') && (last_ch == ' ' || !last_ch)) { return GL_TRUE; } ext_string = found + ext_len; } return GL_FALSE; } void jwzgles_glViewport (GLuint x, GLuint y, GLuint w, GLuint h) { # if TARGET_IPHONE_SIMULATOR /* fprintf (stderr, "glViewport %dx%d\n", w, h); */ # endif glViewport (x, y, w, h); /* the real one */ } /* The following functions are present in both OpenGL 1.1 and in OpenGLES 1, but are allowed within glNewList/glEndList, so we must wrap them to allow them to either be recorded in lists, or run directly. All this CPP obscenity is me screaming in rage at all the ways that C is not Lisp, as all I want to do here is DEFADVICE. */ #define PROTO_V PROTO_VOID #define TYPE_V GLuint #define ARGS_V void #define VARS_V /* */ #define LOGS_V "\n" #define FILL_V /* */ #define TYPE_I GLuint #define TYPE_II TYPE_I #define TYPE_III TYPE_I #define TYPE_IIII TYPE_I #define ARGS_I TYPE_I a #define ARGS_II TYPE_I a, TYPE_I b #define ARGS_III TYPE_I a, TYPE_I b, TYPE_I c #define ARGS_IIII TYPE_I a, TYPE_I b, TYPE_I c, TYPE_I d #define LOGS_I "%s\n", mode_desc(a) #define LOGS_II "%s %d\n", mode_desc(a), b #define LOGS_III "%s %s %s\n", mode_desc(a), mode_desc(b), mode_desc(c) #define LOGS_IIII "%d %d %d %d\n", a, b, c, d #define VARS_I a #define VARS_II a, b #define VARS_III a, b, c #define VARS_IIII a, b, c, d #define FILL_I vv[0].i = a; #define FILL_II vv[0].i = a; vv[1].i = b; #define FILL_III vv[0].i = a; vv[1].i = b; vv[2].i = c; #define FILL_IIII vv[0].i = a; vv[1].i = b; vv[2].i = c; vv[3].i = d; #define TYPE_F GLfloat #define TYPE_FF TYPE_F #define TYPE_FFF TYPE_F #define TYPE_FFFF TYPE_F #define ARGS_F TYPE_F a #define ARGS_FF TYPE_F a, TYPE_F b #define ARGS_FFF TYPE_F a, TYPE_F b, TYPE_F c #define ARGS_FFFF TYPE_F a, TYPE_F b, TYPE_F c, TYPE_F d #define LOGS_F "%7.3f\n", a #define LOGS_FF "%7.3f %7.3f\n", a, b #define LOGS_FFF "%7.3f %7.3f %7.3f\n", a, b, c #define LOGS_FFFF "%7.3f %7.3f %7.3f %7.3f\n", a, b, c, d #define VARS_F VARS_I #define VARS_FF VARS_II #define VARS_FFF VARS_III #define VARS_FFFF VARS_IIII #define FILL_F vv[0].f = a; #define FILL_FF vv[0].f = a; vv[1].f = b; #define FILL_FFF vv[0].f = a; vv[1].f = b; vv[2].f = c; #define FILL_FFFF vv[0].f = a; vv[1].f = b; vv[2].f = c; vv[3].f = d; #define ARGS_IF TYPE_I a, TYPE_F b #define VARS_IF VARS_II #define LOGS_IF "%s %7.3f\n", mode_desc(a), b #define FILL_IF vv[0].i = a; vv[1].f = b; #define ARGS_IIF TYPE_I a, TYPE_I b, TYPE_F c #define VARS_IIF VARS_III #define LOGS_IIF "%s %s %7.3f\n", mode_desc(a), mode_desc(b), c #define FILL_IIF vv[0].i = a; vv[1].i = b; vv[2].f = c; #define TYPE_IV GLint #define ARGS_IIV TYPE_I a, const TYPE_IV *b #define VARS_IIV VARS_II #define LOGS_IIV "%s %d %d %d %d\n", mode_desc(a), b[0], b[1], b[2], b[3] #define FILL_IIV vv[0].i = a; \ vv[1].i = b[0]; vv[2].i = b[1]; \ vv[3].i = b[2]; vv[4].i = b[3]; #define ARGS_IFV TYPE_I a, const TYPE_F *b #define VARS_IFV VARS_II #define LOGS_IFV "%s %7.3f %7.3f %7.3f %7.3f\n", mode_desc(a), \ b[0], b[1], b[2], b[3] #define FILL_IFV vv[0].i = a; \ vv[1].f = b[0]; vv[2].f = b[1]; \ vv[3].f = b[2]; vv[4].f = b[3]; #define ARGS_IIIV TYPE_I a, TYPE_I b, const TYPE_IV *c #define VARS_IIIV VARS_III #define LOGS_IIIV "%s %-8s %3d %3d %3d %3d\n", mode_desc(a), mode_desc(b), \ c[0], c[1], c[2], c[3] #define FILL_IIIV vv[0].i = a; vv[1].i = b; \ vv[2].i = c[0]; vv[3].i = c[1]; \ vv[4].i = c[2]; vv[5].i = c[3]; #define ARGS_IIFV TYPE_I a, TYPE_I b, const TYPE_F *c #define VARS_IIFV VARS_III #define LOGS_IIFV "%s %-8s %7.3f %7.3f %7.3f %7.3f\n", \ mode_desc(a), mode_desc(b), \ c[0], c[1], c[2], c[3] #define FILL_IIFV vv[0].i = a; vv[1].i = b; \ vv[2].f = c[0]; vv[3].f = c[1]; \ vv[4].f = c[2]; vv[5].f = c[3]; #ifdef DEBUG # define WLOG(NAME,ARGS) \ fprintf (stderr, "jwzgles: direct %-12s ", NAME); \ fprintf (stderr, ARGS) #else # define WLOG(NAME,ARGS) /* */ #endif #define WRAP(NAME,SIG) \ void jwzgles_##NAME (ARGS_##SIG) \ { \ Assert (!state->compiling_verts, \ STRINGIFY(NAME) " not allowed inside glBegin"); \ if (state->compiling_list) { \ void_int vv[10]; \ FILL_##SIG \ list_push (STRINGIFY(NAME), (list_fn_cb) &jwzgles_##NAME, \ PROTO_##SIG, vv); \ } else { \ if (! state->replaying_list) { \ WLOG (STRINGIFY(NAME), LOGS_##SIG); \ } \ NAME (VARS_##SIG); \ CHECK(STRINGIFY(NAME)); \ } \ } WRAP (glActiveTexture, I) WRAP (glAlphaFunc, IF) WRAP (glBlendFunc, II) WRAP (glClear, I) WRAP (glClearColor, FFFF) WRAP (glClearStencil, I) WRAP (glColorMask, IIII) WRAP (glCullFace, I) WRAP (glDepthFunc, I) WRAP (glDepthMask, I) WRAP (glFinish, V) WRAP (glFlush, V) WRAP (glFogf, IF) WRAP (glFogfv, IFV) WRAP (glFrontFace, I) WRAP (glHint, II) WRAP (glLightModelf, IF) WRAP (glLightModelfv, IFV) WRAP (glLightf, IIF) WRAP (glLightfv, IIFV) WRAP (glLineWidth, F) WRAP (glLoadIdentity, V) WRAP (glLogicOp, I) WRAP (glMatrixMode, I) WRAP (glPixelStorei, II) WRAP (glPointSize, F) WRAP (glPolygonOffset, FF) WRAP (glPopMatrix, V) WRAP (glPushMatrix, V) WRAP (glRotatef, FFFF) WRAP (glScalef, FFF) WRAP (glScissor, IIII) WRAP (glShadeModel, I) WRAP (glStencilFunc, III) WRAP (glStencilMask, I) WRAP (glStencilOp, III) WRAP (glTexEnvf, IIF) WRAP (glTexEnvi, III) WRAP (glTranslatef, FFF) #undef TYPE_IV #define TYPE_IV GLuint WRAP (glDeleteTextures, IIV) #endif /* HAVE_JWZGLES - whole file */ xscreensaver-5.36/jwxyz/jwxyz-android.h000664 000767 000024 00000006552 12774322552 020336 0ustar00jwzstaff000000 000000 /* xscreensaver, Copyright (c) 2016 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. */ #ifndef __JWXYZ_ANDROID_H__ #define __JWXYZ_ANDROID_H__ #include "jwxyz.h" #include "../hacks/fps.h" #include #include #include /* Keep synchronized with check-configs.pl and jwxyz.java. */ #define API_XLIB 0 #define API_GL 1 struct running_hack { struct xscreensaver_function_table *xsft; jint api; Display *dpy; Window window; fps_state *fpst; void *closure; JNIEnv *jni_env; jobject jobject; EGLDisplay egl_display; EGLConfig egl_config; EGLContext egl_window_ctx, egl_xlib_ctx; Drawable current_drawable; Bool ignore_rotation_p; unsigned long frame_count; Bool initted_p; struct event_queue *event_queue; }; struct jwxyz_Drawable { enum { WINDOW, PIXMAP } type; XRectangle frame; EGLSurface egl_surface; union { struct { struct running_hack *rh; int last_mouse_x, last_mouse_y; } window; struct { int depth; } pixmap; }; }; extern void prepare_context (struct running_hack *rh); // Methods of the Java class org.jwz.jwxyz that are implemented in C. JNIEXPORT void JNICALL Java_org_jwz_xscreensaver_jwxyz_nativeInit (JNIEnv *, jobject thiz, jstring jhack, jint api, jobject defaults, jint w, jint h); JNIEXPORT void JNICALL Java_org_jwz_xscreensaver_jwxyz_nativeResize (JNIEnv *, jobject thiz, jint w, jint h, jdouble rot); JNIEXPORT jlong JNICALL Java_org_jwz_xscreensaver_jwxyz_nativeRender (JNIEnv *, jobject thiz); JNIEXPORT void JNICALL Java_org_jwz_xscreensaver_jwxyz_nativeDone (JNIEnv *, jobject thiz); JNIEXPORT void JNICALL Java_org_jwz_xscreensaver_jwxyz_allnativeSettings (JNIEnv *, jobject thiz, jstring jhack, jstring hackPref, jint draw, jstring key); JNIEXPORT jboolean JNICALL Java_org_jwz_xscreensaver_jwxyz_ignoreRotation (JNIEnv *, jobject thiz); JNIEXPORT jboolean JNICALL Java_org_jwz_xscreensaver_jwxyz_suppressRotationAnimation (JNIEnv *, jobject thiz); JNIEXPORT void JNICALL Java_org_jwz_xscreensaver_jwxyz_sendButtonEvent (JNIEnv *, jobject thiz, int x, int y, jboolean down); JNIEXPORT void JNICALL Java_org_jwz_xscreensaver_jwxyz_sendMotionEvent (JNIEnv *, jobject thiz, int x, int y); JNIEXPORT void JNICALL Java_org_jwz_xscreensaver_jwxyz_sendKeyEvent (JNIEnv *, jobject thiz, jboolean down_p, int code, int mods); #endif // __JWXYZ_ANDROID_H__ xscreensaver-5.36/jwxyz/jwxyz-cocoa.h000644 000767 000024 00000005512 12647577761 020010 0ustar00jwzstaff000000 000000 /* xscreensaver, Copyright (c) 1991-2015 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. */ #ifndef __JWXYZ_COCOA_H__ #define __JWXYZ_COCOA_H__ #import "XScreenSaverView.h" #ifdef USE_IPHONE # import # define NSView UIView # define NSOpenGLContext EAGLContext #endif #ifdef JWXYZ_QUARTZ struct jwxyz_Drawable { enum { WINDOW, PIXMAP } type; CGContextRef cgc; CGImageRef cgi; XRectangle frame; union { struct { XScreenSaverView *view; int last_mouse_x, last_mouse_y; } window; struct { int depth; void *cgc_buffer; // the bits to which CGContextRef renders } pixmap; }; }; #elif defined JWXYZ_GL struct jwxyz_Drawable { enum { WINDOW, PIXMAP } type; /* OS X: Contexts are unique for each pixmap, 'cause life is hectic. (OS X appears to dislike it when you attach different pbuffers to the same context one after the other, apparently.) The Window has this CFRetained because of garbage collection. For both Pixmaps and Windows, CFRelease this when done. iOS: ogl_ctx here is set to either XScreenSaverView.ogl_ctx or XRootWindow()->window.ogl_ctx_pixmap. No garbage collection antics here, so no need to CFRetain anything. Plus, if a screenhack leaks a Pixmap (and they do that all the time), ogl_ctx_pixmap will also get leaked if a Pixmap CFRetains this. */ NSOpenGLContext *ogl_ctx; // OpenGL rendering context (OS X) # ifdef USE_IPHONE // TODO: Also on OS X as extensions. GLuint gl_framebuffer, gl_renderbuffer; # endif // USE_IPHONE CGImageRef cgi; XRectangle frame; union { struct { XScreenSaverView *view; int last_mouse_x, last_mouse_y; struct jwxyz_Drawable *current_drawable; # ifndef USE_IPHONE NSOpenGLPixelFormat *pixfmt; GLint virtual_screen; # else // USE_IPHONE NSOpenGLContext *ogl_ctx_pixmap; # endif } window; struct { int depth; # ifndef USE_IPHONE NSOpenGLPixelBuffer *gl_pbuffer; // GLuint blit_texture; // TODO: For blitting from Pbuffers # endif } pixmap; }; }; #endif // JWXYZ_GL #ifdef USE_IPHONE extern void create_framebuffer (GLuint *gl_framebuffer, GLuint *gl_renderbuffer); extern void check_framebuffer_status (void); #endif // USE_IPHONE #define jwxyz_window_view(w) ((w)->window.view) #endif xscreensaver-5.36/jwxyz/jwxyz-timers.h000644 000767 000024 00000001566 12716673037 020222 0ustar00jwzstaff000000 000000 /* xscreensaver, Copyright (c) 2006-2016 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 is an implementation of Xt timers, for libjwxyz. */ #ifndef __JWXYZ_TIMERS_H__ #define __JWXYZ_TIMERS_H__ #include "jwxyz.h" typedef struct jwxyz_sources_data jwxyz_sources_data; extern jwxyz_sources_data *jwxyz_sources_init (XtAppContext); extern void jwxyz_sources_free (jwxyz_sources_data *); #endif /* __JWXYZ_TIMERS_H__ */ xscreensaver-5.36/jwxyz/jwxyz.h000664 000767 000024 00000067560 12774322552 016726 0ustar00jwzstaff000000 000000 /* xscreensaver, Copyright (c) 1991-2016 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. */ /* JWXYZ Is Not Xlib. But it's a bunch of function definitions that bear some resemblance to Xlib and that do Cocoa-ish or OpenGL-ish things that bear some resemblance to the things that Xlib might have done. */ #ifndef __JWXYZ_H__ #define __JWXYZ_H__ #include /* For abort(). */ #include #if defined __FreeBSD__ || defined __MACH__ && defined __APPLE__ # include #endif #ifndef __dead2 /* __dead2 is an undocumented FreeBSD-ism (and by extension, an OSX-ism), normally #defined in . */ # if defined __GNUC__ || defined __clang__ # define __dead2 __attribute__((__noreturn__)) # else # define __dead2 # endif #endif 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; typedef unsigned long Time; typedef unsigned int KeySym; typedef unsigned int KeyCode; typedef unsigned int VisualID; typedef unsigned long Atom; /* Must be as large as a char *. */ typedef struct jwxyz_Display Display; typedef struct jwxyz_Screen Screen; typedef struct jwxyz_Visual Visual; typedef struct jwxyz_Drawable * Drawable; typedef struct jwxyz_Colormap * Colormap; typedef struct jwxyz_GC * GC; typedef struct jwxyz_XColor XColor; typedef struct jwxyz_XGCValues XGCValues; typedef struct jwxyz_XPoint XPoint; typedef struct jwxyz_XSegment XSegment; typedef struct jwxyz_XRectangle XRectangle; typedef struct jwxyz_XArc XArc; typedef struct jwxyz_XWindowAttributes XWindowAttributes; typedef struct jwxyz_XrmOptionDescRec XrmOptionDescRec; typedef struct jwxyz_XrmDatabase * XrmDatabase; typedef struct jwxyz_XImage XImage; typedef struct jwxyz_XFontProp XFontProp; typedef struct jwxyz_XFontStruct XFontStruct; typedef struct jwxyz_Font * Font; typedef struct jwxyz_XFontSet * XFontSet; typedef struct jwxyz_XCharStruct XCharStruct; typedef struct jwxyz_XComposeStatus XComposeStatus; typedef struct jwxyz_XPixmapFormatValues XPixmapFormatValues; typedef struct jwxyz_XChar2b XChar2b; typedef union jwxyz_XEvent XEvent; typedef struct jwxyz_XAnyEvent XAnyEvent; typedef struct jwxyz_XKeyEvent XKeyEvent; typedef struct jwxyz_XMotionEvent XMotionEvent; typedef struct jwxyz_XButtonEvent XButtonEvent; typedef XKeyEvent XKeyPressedEvent; typedef XKeyEvent XKeyReleasedEvent; typedef XMotionEvent XPointerMovedEvent; typedef XButtonEvent XButtonPressedEvent; typedef XButtonEvent XButtonReleasedEvent; /* Not technically Xlib... */ typedef struct jwxyz_GLXContext * GLXContext; typedef struct jwxyz_XtAppContext * XtAppContext; typedef struct jwxyz_XtIntervalId * XtIntervalId; typedef struct jwxyz_XtInputId * XtInputId; typedef void * XtPointer; typedef unsigned long XtInputMask; #define XtInputReadMask (1L<<0) #define XtInputWriteMask (1L<<1) #define XtInputExceptMask (1L<<2) #define XtIMXEvent 1 #define XtIMTimer 2 #define XtIMAlternateInput 4 #define XtIMSignal 8 #define XtIMAll (XtIMXEvent | XtIMTimer | XtIMAlternateInput | XtIMSignal) #define True 1 #define TRUE 1 #define False 0 #define FALSE 0 #define None 0 #define Window Drawable #define Pixmap Drawable #define XrmoptionNoArg 0 #define XrmoptionSepArg 1 #define CoordModeOrigin 0 #define CoordModePrevious 1 #define LineSolid 0 #define LineOnOffDash 1 #define LineDoubleDash 2 #define CapNotLast 0 #define CapButt 1 #define CapRound 2 #define CapProjecting 3 #define JoinMiter 0 #define JoinRound 1 #define JoinBevel 2 #define FillSolid 0 #define FillTiled 1 #define FillStippled 2 #define FillOpaqueStippled 3 #define EvenOddRule 0 #define WindingRule 1 #define Complex 0 #define Nonconvex 1 #define Convex 2 #define XYBitmap 0 #define XYPixmap 1 #define ZPixmap 2 #define AllocNone 0 #define AllocAll 1 #define StaticGray 0 #define GrayScale 1 #define StaticColor 2 #define PseudoColor 3 #define TrueColor 4 #define DirectColor 5 #define LSBFirst 0 #define MSBFirst 1 #define DoRed (1<<0) #define DoGreen (1<<1) #define DoBlue (1<<2) #define GCFunction (1L<<0) #define GCPlaneMask (1L<<1) #define GCForeground (1L<<2) #define GCBackground (1L<<3) #define GCLineWidth (1L<<4) #define GCLineStyle (1L<<5) #define GCCapStyle (1L<<6) #define GCJoinStyle (1L<<7) #define GCFillStyle (1L<<8) #define GCFillRule (1L<<9) #define GCTile (1L<<10) #define GCStipple (1L<<11) #define GCTileStipXOrigin (1L<<12) #define GCTileStipYOrigin (1L<<13) #define GCFont (1L<<14) #define GCSubwindowMode (1L<<15) #define GCGraphicsExposures (1L<<16) #define GCClipXOrigin (1L<<17) #define GCClipYOrigin (1L<<18) #define GCClipMask (1L<<19) #define GCDashOffset (1L<<20) #define GCDashList (1L<<21) #define GCArcMode (1L<<22) #define KeyPress 2 #define KeyRelease 3 #define ButtonPress 4 #define ButtonRelease 5 #define MotionNotify 6 #define Expose 12 #define GraphicsExpose 13 #define NoExpose 14 #define VisibilityNotify 15 #define ClipByChildren 0 #define IncludeInferiors 1 #define KeyPressMask (1L<<0) #define KeyReleaseMask (1L<<1) #define ButtonPressMask (1L<<2) #define ButtonReleaseMask (1L<<3) #define PointerMotionMask (1L<<6) #define Button1 1 #define Button2 2 #define Button3 3 #define Button4 4 #define Button5 5 #define ShiftMask (1<<0) #define LockMask (1<<1) #define ControlMask (1<<2) #define Mod1Mask (1<<3) #define Mod2Mask (1<<4) #define Mod3Mask (1<<5) #define Mod4Mask (1<<6) #define Mod5Mask (1<<7) #define Button1Mask (1<<8) #define Button2Mask (1<<9) #define Button3Mask (1<<10) #define Button4Mask (1<<11) #define Button5Mask (1<<12) #define XK_Shift_L 0xFFE1 #define XK_Shift_R 0xFFE2 #define XK_Control_L 0xFFE3 #define XK_Control_R 0xFFE4 #define XK_Caps_Lock 0xFFE5 #define XK_Shift_Lock 0xFFE6 #define XK_Meta_L 0xFFE7 #define XK_Meta_R 0xFFE8 #define XK_Alt_L 0xFFE9 #define XK_Alt_R 0xFFEA #define XK_Super_L 0xFFEB #define XK_Super_R 0xFFEC #define XK_Hyper_L 0xFFED #define XK_Hyper_R 0xFFEE #define XK_Home 0xFF50 #define XK_Left 0xFF51 #define XK_Up 0xFF52 #define XK_Right 0xFF53 #define XK_Down 0xFF54 #define XK_Prior 0xFF55 #define XK_Page_Up 0xFF55 #define XK_Next 0xFF56 #define XK_Page_Down 0xFF56 #define XK_End 0xFF57 #define XK_Begin 0xFF58 #define XK_F1 0xFFBE #define XK_F2 0xFFBF #define XK_F3 0xFFC0 #define XK_F4 0xFFC1 #define XK_F5 0xFFC2 #define XK_F6 0xFFC3 #define XK_F7 0xFFC4 #define XK_F8 0xFFC5 #define XK_F9 0xFFC6 #define XK_F10 0xFFC7 #define XK_F11 0xFFC8 #define XK_F12 0xFFC9 #define GXclear 0x0 /* 0 */ #define GXand 0x1 /* src AND dst */ // #define GXandReverse 0x2 /* src AND NOT dst */ #define GXcopy 0x3 /* src */ // #define GXandInverted 0x4 /* NOT src AND dst */ // #define GXnoop 0x5 /* dst */ #define GXxor 0x6 /* src XOR dst */ #define GXor 0x7 /* src OR dst */ // #define GXnor 0x8 /* NOT src AND NOT dst */ // #define GXequiv 0x9 /* NOT src XOR dst */ // #define GXinvert 0xa /* NOT dst */ // #define GXorReverse 0xb /* src OR NOT dst */ // #define GXcopyInverted 0xc /* NOT src */ // #define GXorInverted 0xd /* NOT src OR dst */ // #define GXnand 0xe /* NOT src OR NOT dst */ #define GXset 0xf /* 1 */ #define XA_FONT 18 #define DefaultScreen(dpy) (0) #define BlackPixelOfScreen XBlackPixelOfScreen #define WhitePixelOfScreen XWhitePixelOfScreen #define BlackPixel(dpy,n) BlackPixelOfScreen(ScreenOfDisplay(dpy,n)) #define WhitePixel(dpy,n) WhitePixelOfScreen(ScreenOfDisplay(dpy,n)) #define CellsOfScreen XCellsOfScreen #define XFree(x) free(x) #define BitmapPad(dpy) (8) #define BitmapBitOrder(dpy) (MSBFirst) #define ImageByteOrder(dpy) (MSBFirst) #define DisplayOfScreen XDisplayOfScreen #define DefaultScreenOfDisplay XDefaultScreenOfDisplay #define ScreenOfDisplay(dpy,n) DefaultScreenOfDisplay(dpy) #define DefaultVisualOfScreen XDefaultVisualOfScreen #define DefaultColormapOfScreen(s) (0) #define RootWindow XRootWindow #define RootWindowOfScreen(s) RootWindow(DisplayOfScreen(s),0) #define DisplayWidth XDisplayWidth #define DisplayHeight XDisplayHeight #define XMaxRequestSize(dpy) (65535) #define XWidthOfScreen(s) (DisplayWidth(DisplayOfScreen(s),0)) #define XHeightOfScreen(s) (DisplayHeight(DisplayOfScreen(s),0)) #define XWidthMMOfScreen(s) (XDisplayWidthMM(DisplayOfScreen(s),0)) #define XHeightMMOfScreen(s) (XDisplayHeightMM(DisplayOfScreen(s),0)) #define ScreenCount(dpy) jwxyz_ScreenCount(dpy) extern int jwxyz_ScreenCount(Display *); extern Window XRootWindow (Display *, int screen); extern Screen *XDefaultScreenOfDisplay (Display *); extern Visual *XDefaultVisualOfScreen (Screen *); extern Display *XDisplayOfScreen (Screen *); extern int XDisplayNumberOfScreen (Screen *); extern int XScreenNumberOfScreen (Screen *); extern int XDisplayWidth (Display *, int); extern int XDisplayHeight (Display *, int); extern int XDisplayWidthMM (Display *, int); extern int XDisplayHeightMM (Display *, int); unsigned long XBlackPixelOfScreen(Screen *); unsigned long XWhitePixelOfScreen(Screen *); unsigned long XCellsOfScreen(Screen *); extern int XDrawPoint (Display *, Drawable, GC, int x, int y); extern int XDrawPoints (Display *, Drawable, GC, XPoint *, int n, int mode); extern int XDrawSegments (Display *, Drawable, GC, XSegment *, int n); extern GC XCreateGC (Display *, Drawable, unsigned long mask, XGCValues *); extern int XChangeGC (Display *, GC, unsigned long mask, XGCValues *); extern int XFreeGC (Display *, GC); extern int XClearWindow (Display *, Window); extern int XClearArea (Display *, Window, int x, int y, int w, int h,Bool exp); extern int XSetWindowBackground (Display *, Window, unsigned long); extern Status XGetWindowAttributes (Display *, Window, XWindowAttributes *); extern Status XGetGeometry (Display *, Drawable, Window *root_ret, int *x_ret, int *y_ret, unsigned int *w_ret, unsigned int *h_ret, unsigned int *bw_ret, unsigned int *depth_ret); extern Status XAllocColor (Display *, Colormap, XColor *); extern Status XAllocColorCells (Display *, Colormap, Bool contig, unsigned long *pmret, unsigned int npl, unsigned long *pxret, unsigned int npx); extern int XStoreColors (Display *, Colormap, XColor *, int n); extern int XStoreColor (Display *, Colormap, XColor *); extern Status XParseColor(Display *, Colormap, const char *spec, XColor *ret); extern Status XAllocNamedColor (Display *, Colormap, char *name, XColor *screen_ret, XColor *exact_ret); extern int XQueryColor (Display *, Colormap, XColor *); extern int XQueryColors(Display *, Colormap colormap, XColor *, int ncolors); extern int XSetForeground (Display *, GC, unsigned long); extern int XSetBackground (Display *, GC, unsigned long); extern int XSetFunction (Display *, GC, int); extern int XSetSubwindowMode (Display *, GC, int); extern int XSetLineAttributes (Display *, GC, unsigned int line_width, int line_style, int cap_style, int join_style); extern int XSetClipMask (Display *, GC, Pixmap); extern int XSetClipOrigin (Display *, GC, int x, int y); extern int jwxyz_XSetAlphaAllowed (Display *, GC, Bool); extern int jwxyz_XSetAntiAliasing (Display *, GC, Bool); extern int XFlush (Display *); extern int XSync (Display *, Bool); extern int XFreeColors (Display *, Colormap, unsigned long *px, int n, unsigned long planes); extern int XFillPolygon (Display *, Drawable, GC, XPoint * points, int npoints, int shape, int mode); extern int XCopyArea (Display *, Drawable src, Drawable dest, GC, int src_x, int src_y, unsigned int width, unsigned int height, int dest_x, int dest_y); extern int XCopyPlane (Display *, Drawable, Drawable, GC, int src_x, int src_y, unsigned width, int height, int dest_x, int dest_y, unsigned long plane); extern int XDrawLine (Display *, Drawable, GC, int x1, int y1, int x2, int y2); extern int XDrawLines (Display *, Drawable, GC, XPoint *, int n, int mode); extern int XDrawArc (Display *, Drawable, GC, int x, int y, unsigned int width, unsigned int height, int angle1, int angle2); extern int XFillArc (Display *, Drawable, GC, int x, int y, unsigned int width, unsigned int height, int angle1, int angle2); extern int XDrawArcs (Display *, Drawable, GC, XArc *arcs, int narcs); extern int XFillArcs (Display *, Drawable, GC, XArc *arcs, int narcs); extern int XDrawRectangle (Display *, Drawable, GC, int x, int y, unsigned int width, unsigned int height); extern int XFillRectangle (Display *, Drawable, GC, int x, int y, unsigned int width, unsigned int height); extern int XFillRectangles (Display *, Drawable, GC, XRectangle *, int n); extern int XDrawString (Display *, Drawable, GC, int x, int y, const char *, int len); extern int XDrawImageString (Display *, Drawable, GC, int x, int y, const char *, int len); extern int XDrawString16 (Display *, Drawable, GC, int x, int y, const XChar2b *, int len); extern Bool XQueryPointer (Display *, Window, Window *root_ret, Window *child_ret, int *root_x_ret, int *root_y_ret, int *win_x_ret, int *win_y_ret, unsigned int *mask_ret); extern int XLookupString (XKeyEvent *, char *ret, int size, KeySym *ks_ret, XComposeStatus *); extern KeySym XKeycodeToKeysym (Display *, KeyCode, int index); extern Status XInitImage (XImage *); extern XImage *XCreateImage (Display *, Visual *, unsigned int depth, int format, int offset, char *data, unsigned int width, unsigned int height, int bitmap_pad, int bytes_per_line); extern XImage *XSubImage (XImage *, int x, int y, unsigned int w, unsigned int h); extern unsigned long XGetPixel (XImage *, int x, int y); extern int XPutPixel (XImage *, int x, int y, unsigned long); extern int XDestroyImage (XImage *); extern int XPutImage (Display *, Drawable, GC, XImage *, int src_x, int src_y, int dest_x, int dest_y, unsigned int w, unsigned int h); extern XImage *XGetImage (Display *, Drawable, int x, int y, unsigned int w, unsigned int h, unsigned long pm, int fmt); extern Pixmap XCreatePixmapFromBitmapData (Display *, Drawable, const char *data, unsigned int w, unsigned int h, unsigned long fg, unsigned int bg, unsigned int depth); extern XPixmapFormatValues *XListPixmapFormats (Display *, int *count_ret); extern void jwxyz_draw_NSImage_or_CGImage (Display *, Drawable, Bool nsimg_p, void *NSImage_arg, XRectangle *geom_ret, int exif_rotation); extern int XSetGraphicsExposures (Display *, GC, Bool); extern Bool XTranslateCoordinates (Display *, Window src_w, Window dest_w, int src_x, int src_y, int *dest_x_ret, int *dest_y_ret, Window *child_ret); extern Font XLoadFont (Display *, const char *); extern XFontStruct * XQueryFont (Display *, Font); extern XFontStruct * XLoadQueryFont (Display *, const char *); extern int XFreeFontInfo (char **names, XFontStruct *info, int n); extern int XFreeFont (Display *, XFontStruct *); extern int XUnloadFont (Display *, Font); extern int XTextExtents (XFontStruct *, const char *, int length, int *dir_ret, int *ascent_ret, int *descent_ret, XCharStruct *overall_ret); extern char * jwxyz_unicode_character_name (Display *, Font, unsigned long uc); extern int XTextExtents16 (XFontStruct *, const XChar2b *, int length, int *dir_ret, int *ascent_ret, int *descent_ret, XCharStruct *overall_ret); extern int XTextWidth (XFontStruct *, const char *, int length); extern int XSetFont (Display *, GC, Font); extern XFontSet XCreateFontSet (Display *, char *name, char ***missing_charset_list_return, int *missing_charset_count_return, char **def_string_return); extern void XFreeFontSet (Display *, XFontSet); extern void XFreeStringList (char **); extern int Xutf8TextExtents (XFontSet, const char *, int num_bytes, XRectangle *overall_ink_return, XRectangle *overall_logical_return); extern void Xutf8DrawString (Display *, Drawable, XFontSet, GC, int x, int y, const char *, int num_bytes); extern const char *jwxyz_nativeFontName (Font, float *size); extern Pixmap XCreatePixmap (Display *, Drawable, unsigned int width, unsigned int height, unsigned int depth); extern int XFreePixmap (Display *, Pixmap); extern char *XGetAtomName (Display *, Atom); // Log()/Logv(), for debugging JWXYZ. Screenhacks should still use // fprintf(stderr, ...). extern void Log(const char *format, ...) #if defined __GNUC__ || defined __clang__ __attribute__((format(printf, 1, 2))) #endif ; extern void jwxyz_logv(Bool error, const char *fmt, va_list args); #define Logv(format, args) (jwxyz_logv(False, format, args)) // Xt timers and fds extern XtAppContext XtDisplayToApplicationContext (Display *); typedef void (*XtTimerCallbackProc) (XtPointer closure, XtIntervalId *); typedef void (*XtInputCallbackProc) (XtPointer closure, int *fd, XtInputId *); extern XtIntervalId XtAppAddTimeOut (XtAppContext, unsigned long usecs, XtTimerCallbackProc, XtPointer closure); extern void XtRemoveTimeOut (XtIntervalId); extern XtInputId XtAppAddInput (XtAppContext, int fd, XtPointer flags, XtInputCallbackProc, XtPointer closure); extern void XtRemoveInput (XtInputId); extern XtInputMask XtAppPending (XtAppContext); extern void XtAppProcessEvent (XtAppContext, XtInputMask); extern struct jwxyz_sources_data *display_sources_data (Display *); // Some GLX stuff that also doesn't technically belong here... // from XScreenSaverGLView.m extern void glXSwapBuffers (Display *, Window); extern void glXMakeCurrent (Display *, Window, GLXContext); // also declared in utils/visual.h extern int has_writable_cells (Screen *, Visual *); extern int visual_depth (Screen *, Visual *); extern int visual_cells (Screen *, Visual *); extern int visual_class (Screen *, Visual *); extern int get_bits_per_pixel (Display *, int); extern int screen_number (Screen *); // also declared in utils/grabclient.h extern Bool use_subwindow_mode_p (Screen *, Window); // also declared in xlockmoreI.h extern void clear_gl_error (void); extern void check_gl_error (const char *type); struct jwxyz_Visual { VisualID visualid; /* visual id of this visual */ int class; /* class of screen (monochrome, etc.) */ unsigned long red_mask, green_mask, blue_mask; /* mask values */ int bits_per_rgb; /* log base 2 of distinct color values */ // int map_entries; /* color map entries */ }; struct jwxyz_XGCValues { int function; /* logical operation */ #if 0 unsigned long plane_mask;/* plane mask */ #endif unsigned long foreground;/* foreground pixel */ unsigned long background;/* background pixel */ int line_width; /* line width */ #if 0 int line_style; /* LineSolid, LineOnOffDash, LineDoubleDash */ #endif int cap_style; /* CapNotLast, CapButt, CapRound, CapProjecting */ int join_style; /* JoinMiter, JoinRound, JoinBevel */ #if 0 int fill_style; /* FillSolid, FillTiled, FillStippled, FillOpaeueStippled */ #endif int fill_rule; /* EvenOddRule, WindingRule */ #if 0 int arc_mode; /* ArcChord, ArcPieSlice */ Pixmap tile; /* tile pixmap for tiling operations */ Pixmap stipple; /* stipple 1 plane pixmap for stipping */ int ts_x_origin; /* offset for tile or stipple operations */ int ts_y_origin; #endif Font font; /* default text font for text operations */ int subwindow_mode; /* ClipByChildren, IncludeInferiors */ #if 0 Bool graphics_exposures;/* boolean, should exposures be generated */ #endif int clip_x_origin; /* origin for clipping */ int clip_y_origin; Pixmap clip_mask; /* bitmap clipping; other calls for rects */ #if 0 int dash_offset; /* patterned/dashed line information */ char dashes; #endif Bool alpha_allowed_p; /* jwxyz extension: whether pixel values may have a non-opaque alpha component. */ Bool antialias_p; /* jwxyz extension: whether Quartz should draw with antialiasing. */ }; struct jwxyz_XWindowAttributes { int x, y; /* location of window */ int width, height; /* width and height of window */ int border_width; /* border width of window */ int depth; /* depth of window */ Visual *visual; /* the associated visual structure */ #if 0 Window root; /* root of screen containing window */ int class; /* InputOutput, InputOnly*/ int bit_gravity; /* one of bit gravity values */ int win_gravity; /* one of the window gravity values */ int backing_store; /* NotUseful, WhenMapped, Always */ unsigned long backing_planes;/* planes to be preserved if possible */ unsigned long backing_pixel;/* value to be used when restoring planes */ Bool save_under; /* boolean, should bits under be saved? */ #endif Colormap colormap; /* color map to be associated with window */ #if 0 Bool map_installed; /* boolean, is color map currently installed*/ int map_state; /* IsUnmapped, IsUnviewable, IsViewable */ long all_event_masks; /* set of events all people have interest in*/ long your_event_mask; /* my event mask */ long do_not_propagate_mask; /* set of events that should not propagate */ Bool override_redirect; /* boolean value for override-redirect */ #endif Screen *screen; /* back pointer to correct screen */ }; struct jwxyz_XColor { unsigned long pixel; unsigned short red, green, blue; char flags; /* do_red, do_green, do_blue */ char pad; }; struct jwxyz_XPoint { short x, y; }; struct jwxyz_XSegment { short x1, y1, x2, y2; }; struct jwxyz_XRectangle { short x, y; unsigned short width, height; }; struct jwxyz_XArc { short x, y; unsigned short width, height; short angle1, angle2; }; struct jwxyz_XrmOptionDescRec { char *option; char *specifier; int argKind; void *value; }; struct jwxyz_XAnyEvent { int type; #if 0 unsigned long serial; Bool send_event; Display *display; Window window; #endif }; struct jwxyz_XKeyEvent { int type; #if 0 unsigned long serial; Bool send_event; Display *display; Window window; Window root; Window subwindow; Time time; int x, y; int x_root, y_root; #endif unsigned int state; unsigned int keycode; #if 0 Bool same_screen; #endif }; struct jwxyz_XButtonEvent { int type; #if 0 unsigned long serial; Bool send_event; Display *display; Window window; Window root; Window subwindow; Time time; #endif int x, y; #if 0 int x_root, y_root; #endif unsigned int state; unsigned int button; #if 0 Bool same_screen; #endif }; struct jwxyz_XMotionEvent { int type; #if 0 unsigned long serial; Bool send_event; Display *display; Window window; Window root; Window subwindow; Time time; #endif int x, y; #if 0 int x_root, y_root; #endif unsigned int state; #if 0 char is_hint; Bool same_screen; #endif }; union jwxyz_XEvent { int type; XAnyEvent xany; XKeyEvent xkey; XButtonEvent xbutton; XMotionEvent xmotion; }; struct jwxyz_XImage { int width, height; /* size of image */ int xoffset; /* number of pixels offset in X direction */ int format; /* XYBitmap, XYPixmap, ZPixmap */ char *data; /* pointer to image data */ int byte_order; /* data byte order, LSBFirst, MSBFirst */ int bitmap_unit; /* quant. of scanline 8, 16, 32 */ int bitmap_bit_order; /* LSBFirst, MSBFirst */ int bitmap_pad; /* 8, 16, 32 either XY or ZPixmap */ int depth; /* depth of image */ int bytes_per_line; /* accelarator to next line */ int bits_per_pixel; /* bits per pixel (ZPixmap) */ unsigned long red_mask; /* bits in z arrangment */ unsigned long green_mask; unsigned long blue_mask; // XPointer obdata; /* hook for the object routines to hang on */ struct funcs { /* image manipulation routines */ #if 0 XImage *(*create_image)( Display* /* display */, Visual* /* visual */, unsigned int /* depth */, int /* format */, int /* offset */, char* /* data */, unsigned int /* width */, unsigned int /* height */, int /* bitmap_pad */, int /* bytes_per_line */); int (*destroy_image) (XImage *); #endif unsigned long (*get_pixel) (XImage *, int, int); int (*put_pixel) (XImage *, int, int, unsigned long); #if 0 XImage *(*sub_image) (XImage *, int, int, unsigned int, unsigned int); int (*add_pixel) (XImage *, long); #endif } f; }; struct jwxyz_XCharStruct { short lbearing; /* origin to left edge of ink */ short rbearing; /* origin to right edge of ink */ short width; /* advance to next char's origin */ short ascent; /* baseline to top edge of ink */ short descent; /* baseline to bottom edge of ink */ #if 0 unsigned short attributes; /* per char flags (not predefined) */ #endif }; struct jwxyz_XFontProp { Atom name; unsigned long card32; /* Careful: This holds (32- or 64-bit) pointers. */ }; struct jwxyz_XFontStruct { #if 0 XExtData *ext_data; /* hook for extension to hang data */ #endif Font fid; /* Font id for this font */ #if 0 unsigned direction; /* hint about direction the font is painted */ #endif unsigned min_char_or_byte2; /* first character */ unsigned max_char_or_byte2; /* last character */ #if 0 unsigned min_byte1; /* first row that exists */ unsigned max_byte1; /* last row that exists */ Bool all_chars_exist; /* flag if all characters have non-zero size*/ #endif unsigned default_char; /* char to print for undefined character */ int n_properties; /* how many properties there are */ XFontProp *properties; /* pointer to array of additional properties*/ XCharStruct min_bounds; /* minimum bounds over all existing char*/ XCharStruct max_bounds; /* maximum bounds over all existing char*/ XCharStruct *per_char; /* first_char to last_char information */ int ascent; /* log. extent above baseline for spacing */ int descent; /* log. descent below baseline for spacing */ }; struct jwxyz_XComposeStatus { char dummy; }; struct jwxyz_XPixmapFormatValues { int depth; int bits_per_pixel; int scanline_pad; }; struct jwxyz_XChar2b { unsigned char byte1; unsigned char byte2; }; #endif /* __JWXYZ_H__ */ xscreensaver-5.36/jwxyz/jwxyzI.h000664 000767 000024 00000013713 12717232373 017024 0ustar00jwzstaff000000 000000 /* xscreensaver, Copyright (c) 1991-2016 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. */ #ifndef __JWXYZ_I_H__ #define __JWXYZ_I_H__ #include #include "jwxyz.h" #define Assert(C, ...) do { if (!(C)) jwxyz_abort (__VA_ARGS__); } while(0) /* OSX/jwxyz.m, utils/jwxyz-gl.c */ extern Display *jwxyz_make_display (Window w); extern void jwxyz_free_display (Display *); extern void jwxyz_window_resized (Display *); extern uint32_t jwxyz_alloc_color (Display *dpy, uint16_t r, uint16_t g, uint16_t b, uint16_t a); extern void jwxyz_query_color (Display *dpy, unsigned long pixel, uint8_t *rgba); extern unsigned long jwxyz_window_background (Display *); extern int jwxyz_draw_arc (Display *dpy, Drawable d, GC gc, int x, int y, unsigned int width, unsigned int height, int angle1, int angle2, Bool fill_p); extern void jwxyz_fill_rects (Display *dpy, Drawable d, GC gc, const XRectangle *rectangles, unsigned long nrects, unsigned long pixel); extern XGCValues *jwxyz_gc_gcv (GC gc); extern unsigned int jwxyz_gc_depth (GC gc); /* OSX/jwxyz-cocoa.m, android/jwxyz-android.c */ extern const XRectangle *jwxyz_frame (Drawable d); /* XGetGeometry sux. */ extern unsigned int jwxyz_drawable_depth (Drawable d); extern void jwxyz_get_pos (Window w, XPoint *vpos, XPoint *p); extern void jwxyz_copy_area (Display *dpy, Drawable src, Drawable dst, GC gc, int src_x, int src_y, unsigned int width, unsigned int height, int dst_x, int dst_y); #ifndef current_device_rotation extern double current_device_rotation (void); extern Bool ignore_rotation_p (Display *); #endif /* utils/jwxyz-common.c */ extern void jwxyz_validate_pixel (Display *dpy, unsigned long pixel, unsigned int depth, Bool alpha_allowed_p); extern Bool jwxyz_dumb_drawing_mode(Display *dpy, Drawable d, GC gc, int x, int y, unsigned width, unsigned height); extern void jwxyz_fill_rect (Display *, Drawable, GC, int x, int y, unsigned int width, unsigned int height, unsigned long pixel); extern void jwxyz_gcv_defaults (Display *dpy, XGCValues *gcv, int depth); # if defined JWXYZ_QUARTZ # include # include extern void jwxyz_flush_context (Display *); # define jwxyz_assert_display(dpy) # define jwxyz_assert_drawable(main_window, d) # define jwxyz_assert_gl() /* jwxyz-cocoa.m needs these from jwxyz.m for XCopyArea. */ extern void invalidate_drawable_cache (Drawable d); extern void set_color (Display *dpy, CGContextRef cgc, unsigned long argb, unsigned int depth, Bool alpha_allowed_p, Bool fill_p); extern void push_gc (Drawable d, GC gc); extern void push_color_gc (Display *dpy, Drawable d, GC gc, unsigned long color, Bool antialias_p, Bool fill_p); extern CGPoint map_point (Drawable d, int x, int y); #define seek_xy(dst, dst_pitch, x, y) \ ((void *)((char *)dst + dst_pitch * y + x * 4)) #define pop_gc(d,gc) CGContextRestoreGState (d->cgc) # elif defined JWXYZ_GL /* utils/jwxyz-gl.c */ extern void jwxyz_prepare_context (Display *dpy); extern void jwxyz_set_matrices (Display *dpy, unsigned width, unsigned height, Bool screen_p); /* Only works if both drawables share OpenGL objects. OpenGL context sharing works on OS X, iOS, and some (but not all!) EGL implementations. This would also work with FBOs and one context for everything. Surprisingly slow and unreliable. */ extern void jwxyz_gl_copy_area_copy_tex_image (Display *dpy, Drawable src, Drawable dst, GC gc, int src_x, int src_y, unsigned int width, unsigned int height, int dst_x, int dst_y); /* glReadPixels followed by glTexImage2D. This is terrible, so only use this if nothing else works. */ extern void jwxyz_gl_copy_area_read_pixels (Display *dpy, Drawable src, Drawable dst, GC gc, int src_x, int src_y, unsigned int width, unsigned int height, int dst_x, int dst_y); /* Platform-specific */ extern void jwxyz_bind_drawable (Display *dpy, Window w, Drawable d); extern void jwxyz_assert_display (Display *); extern void jwxyz_assert_drawable (Window main_window, Drawable d); extern void jwxyz_assert_gl (void); extern void *jwxyz_load_native_font (Display *, const char *name, char **native_name_ret, float *size_ret, int *ascent_ret, int *descent_ret); extern void jwxyz_release_native_font (Display *, void *native_font); extern void jwxyz_render_text (Display *, void *native_font, const char *str, size_t len, int utf8_p, XCharStruct *cs_ret, char **pixmap_ret); # endif /* JWXYZ_GL */ #endif xscreensaver-5.36/jwxyz/jwzgles.h000644 000767 000024 00000055324 12701612217 017177 0ustar00jwzstaff000000 000000 /* xscreensaver, Copyright (c) 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. */ /* A compatibility shim to allow OpenGL 1.3 source code to work in an OpenGLES environment, where almost every OpenGL 1.3 function has been "deprecated". See jwzgles.c for details. */ #ifndef __JWZGLES_H__ #define __JWZGLES_H__ #ifndef HAVE_JWZGLES # error: do not include this without HAVE_JWZGLES #endif #include "jwzglesI.h" /* These are the OpenGL 1.3 functions that are not present in OpenGLES 1. As you can see from the length of this list, OpenGL and OpenGLES have almost nothing to do with each other. To claim that GLES is a dialect of OpenGL is absurd -- English and Latin have more in common! */ #define glAccum jwzgles_glAccum #define glAntialiasing jwzgles_glAntialiasing #define glAreTexturesResident jwzgles_glAreTexturesResident #define glArrayElement jwzgles_glArrayElement #define glBegin jwzgles_glBegin #define glBitmap jwzgles_glBitmap #define glBlendColor jwzgles_glBlendColor #define glBlendEquation jwzgles_glBlendEquation #define glCallList jwzgles_glCallList #define glCallLists jwzgles_glCallLists #define glClearAccum jwzgles_glClearAccum #define glClearDepth jwzgles_glClearDepth #define glClearIndex jwzgles_glClearIndex #define glClipPlane jwzgles_glClipPlane #define glColor3b jwzgles_glColor3b #define glColor3bv jwzgles_glColor3bv #define glColor3d jwzgles_glColor3f #define glColor3dv jwzgles_glColor3dv #define glColor3f jwzgles_glColor3f #define glColor3fv jwzgles_glColor3fv #define glColor3i jwzgles_glColor3i #define glColor3iv jwzgles_glColor3iv #define glColor3s jwzgles_glColor3s #define glColor3sv jwzgles_glColor3sv #define glColor3ub jwzgles_glColor3ub #define glColor3ubv jwzgles_glColor3ubv #define glColor3ui jwzgles_glColor3ui #define glColor3uiv jwzgles_glColor3uiv #define glColor3us jwzgles_glColor3us #define glColor3usv jwzgles_glColor3usv #define glColor4b jwzgles_glColor4b #define glColor4bv jwzgles_glColor4bv #define glColor4d jwzgles_glColor4d #define glColor4dv jwzgles_glColor4dv #define glColor4fv jwzgles_glColor4fv #define glColor4i jwzgles_glColor4i #define glColor4iv jwzgles_glColor4iv #define glColor4s jwzgles_glColor4s #define glColor4sv jwzgles_glColor4sv #define glColor4ub jwzgles_glColor4ub #define glColor4ubv jwzgles_glColor4ubv #define glColor4ui jwzgles_glColor4ui #define glColor4uiv jwzgles_glColor4uiv #define glColor4us jwzgles_glColor4us #define glColor4usv jwzgles_glColor4usv #define glColorMaterial jwzgles_glColorMaterial #define glColorSubTable jwzgles_glColorSubTable #define glColorTable jwzgles_glColorTable #define glColorTableParameter jwzgles_glColorTableParameter #define glColorTableParameterfv jwzgles_glColorTableParameterfv #define glColorub jwzgles_glColorub #define glColorui jwzgles_glColorui #define glColorus jwzgles_glColorus #define glCompressedTexImage jwzgles_glCompressedTexImage #define glCompressedTexImage1D jwzgles_glCompressedTexImage1D #define glCompressedTexImage3D jwzgles_glCompressedTexImage3D #define glCompressedTexSubImage1D jwzgles_glCompressedTexSubImage1D #define glCompressedTexSubImage3D jwzgles_glCompressedTexSubImage3D #define glConvolutionFilter1D jwzgles_glConvolutionFilter1D #define glConvolutionFilter2D jwzgles_glConvolutionFilter2D #define glConvolutionParameter jwzgles_glConvolutionParameter #define glConvolutionParameterfv jwzgles_glConvolutionParameterfv #define glConvolutionParameteriv jwzgles_glConvolutionParameteriv #define glCopyColorSubTable jwzgles_glCopyColorSubTable #define glCopyColorTable jwzgles_glCopyColorTable #define glCopyConvolutionFilter1D jwzgles_glCopyConvolutionFilter1D #define glCopyConvolutionFilter2D jwzgles_glCopyConvolutionFilter2D #define glCopyPixels jwzgles_glCopyPixels #define glCopyTexImage1D jwzgles_glCopyTexImage1D #define glCopyTexImage3D jwzgles_glCopyTexImage3D #define glCopyTexSubImage1D jwzgles_glCopyTexSubImage1D #define glCopyTexSubImage3D jwzgles_glCopyTexSubImage3D #define glDeleteLists jwzgles_glDeleteLists #define glDepthRange jwzgles_glDepthRange #define glDrawBuffer jwzgles_glDrawBuffer #define glDrawPixels jwzgles_glDrawPixels #define glDrawRangeElements jwzgles_glDrawRangeElements #define glEdgeFlag jwzgles_glEdgeFlag #define glEdgeFlagPointer jwzgles_glEdgeFlagPointer #define glEdgeFlagv jwzgles_glEdgeFlagv #define glEnd jwzgles_glEnd #define glEndList jwzgles_glEndList #define glEvalCoord1d jwzgles_glEvalCoord1d #define glEvalCoord1dv jwzgles_glEvalCoord1dv #define glEvalCoord1f jwzgles_glEvalCoord1f #define glEvalCoord1fv jwzgles_glEvalCoord1fv #define glEvalCoord2d jwzgles_glEvalCoord2d #define glEvalCoord2dv jwzgles_glEvalCoord2dv #define glEvalCoord2f jwzgles_glEvalCoord2f #define glEvalCoord2fv jwzgles_glEvalCoord2fv #define glEvalMesh1 jwzgles_glEvalMesh1 #define glEvalMesh2 jwzgles_glEvalMesh2 #define glEvalPoint1 jwzgles_glEvalPoint1 #define glEvalPoint2 jwzgles_glEvalPoint2 #define glFeedbackBuffer jwzgles_glFeedbackBuffer #define glFogi jwzgles_glFogi #define glFogiv jwzgles_glFogiv #define glFrustum jwzgles_glFrustum #define glGenLists jwzgles_glGenLists #define glGet jwzgles_glGet #define glGetBooleanv jwzgles_glGetBooleanv #define glGetClipPlane jwzgles_glGetClipPlane #define glGetColorTable jwzgles_glGetColorTable #define glGetColorTableParameter jwzgles_glGetColorTableParameter #define glGetCompressedTexImage jwzgles_glGetCompressedTexImage #define glGetConvolutionFilter jwzgles_glGetConvolutionFilter #define glGetConvolutionParameter jwzgles_glGetConvolutionParameter #define glGetConvolutionParameteriv jwzgles_glGetConvolutionParameteriv #define glGetDoublev jwzgles_glGetDoublev #define glGetFloatv jwzgles_glGetFloatv #define glGetHistogram jwzgles_glGetHistogram #define glGetHistogramParameter jwzgles_glGetHistogramParameter #define glGetLightfv jwzgles_glGetLightfv #define glGetLightiv jwzgles_glGetLightiv #define glGetMapdv jwzgles_glGetMapdv #define glGetMapfv jwzgles_glGetMapfv #define glGetMapiv jwzgles_glGetMapiv #define glGetMaterialfv jwzgles_glGetMaterialfv #define glGetMaterialiv jwzgles_glGetMaterialiv #define glGetPixelMapfv jwzgles_glGetPixelMapfv #define glGetPixelMapuiv jwzgles_glGetPixelMapuiv #define glGetPixelMapusv jwzgles_glGetPixelMapusv #define glGetPointerv jwzgles_glGetPointerv #define glGetPolygonStipple jwzgles_glGetPolygonStipple #define glGetSeparableFilter jwzgles_glGetSeparableFilter #define glGetTexEnvfv jwzgles_glGetTexEnvfv #define glGetTexEnviv jwzgles_glGetTexEnviv #define glGetTexGendv jwzgles_glGetTexGendv #define glGetTexGenfv jwzgles_glGetTexGenfv #define glGetTexGeniv jwzgles_glGetTexGeniv #define glGetTexImage jwzgles_glGetTexImage #define glGetTexImage1D jwzgles_glGetTexImage1D #define glGetTexImage2D jwzgles_glGetTexImage2D #define glGetTexImage3D jwzgles_glGetTexImage3D #define glGetTexLevelParameterfv jwzgles_glGetTexLevelParameterfv #define glGetTexLevelParameteriv jwzgles_glGetTexLevelParameteriv #define glGetTexParameterfv jwzgles_glGetTexParameterfv #define glGetTexParameteriv jwzgles_glGetTexParameteriv #define glHistogram jwzgles_glHistogram #define glIndex jwzgles_glIndex #define glIndexMask jwzgles_glIndexMask #define glIndexPointer jwzgles_glIndexPointer #define glIndexd jwzgles_glIndexd #define glIndexdv jwzgles_glIndexdv #define glIndexf jwzgles_glIndexf #define glIndexfv jwzgles_glIndexfv /*#define glIndexi jwzgles_glIndexi*/ #define glIndexiv jwzgles_glIndexiv #define glIndexs jwzgles_glIndexs #define glIndexsv jwzgles_glIndexsv #define glIndexub jwzgles_glIndexub #define glIndexubv jwzgles_glIndexubv #define glInitNames jwzgles_glInitNames #define glInterleavedArrays jwzgles_glInterleavedArrays #define glIsEnabled jwzgles_glIsEnabled #define glIsList jwzgles_glIsList #define glIsTexture jwzgles_glIsTexture #define glLightModeli jwzgles_glLightModeli #define glLightModeliv jwzgles_glLightModeliv #define glLighti jwzgles_glLighti #define glLightiv jwzgles_glLightiv #define glLightf jwzgles_glLightf #define glLightfv jwzgles_glLightfv #define glLineStipple jwzgles_glLineStipple #define glListBase jwzgles_glListBase #define glLoadMatrix jwzgles_glLoadMatrix #define glLoadMatrixd jwzgles_glLoadMatrixd #define glLoadName jwzgles_glLoadName #define glLoadTransposeMatrix jwzgles_glLoadTransposeMatrix #define glLoadTransposeMatrixd jwzgles_glLoadTransposeMatrixd #define glLoadTransposeMatrixf jwzgles_glLoadTransposeMatrixf #define glMap1d jwzgles_glMap1d #define glMap1f jwzgles_glMap1f #define glMap2d jwzgles_glMap2d #define glMap2f jwzgles_glMap2f #define glMapGrid1d jwzgles_glMapGrid1d #define glMapGrid1f jwzgles_glMapGrid1f #define glMapGrid2d jwzgles_glMapGrid2d #define glMapGrid2f jwzgles_glMapGrid2f #define glMateriali jwzgles_glMateriali #define glMaterialiv jwzgles_glMaterialiv #define glMultMatrixd jwzgles_glMultMatrixd #define glMultTransposeMatrix jwzgles_glMultTransposeMatrix #define glMultTransposeMatrixd jwzgles_glMultTransposeMatrixd #define glMultTransposeMatrixf jwzgles_glMultTransposeMatrixf #define glMultiTexCoord jwzgles_glMultiTexCoord #define glNewList jwzgles_glNewList #define glNormal3b jwzgles_glNormal3b #define glNormal3bv jwzgles_glNormal3bv #define glNormal3d jwzgles_glNormal3f #define glNormal3dv jwzgles_glNormal3dv #define glNormal3fv jwzgles_glNormal3fv #define glNormal3i jwzgles_glNormal3i #define glNormal3iv jwzgles_glNormal3iv #define glNormal3s jwzgles_glNormal3s #define glNormal3sv jwzgles_glNormal3sv #define glOrtho jwzgles_glOrtho #define glPassThrough jwzgles_glPassThrough #define glPixelMapfv jwzgles_glPixelMapfv #define glPixelMapuiv jwzgles_glPixelMapuiv #define glPixelMapusv jwzgles_glPixelMapusv #define glPixelStoref jwzgles_glPixelStoref #define glPixelTransferf jwzgles_glPixelTransferf #define glPixelTransferi jwzgles_glPixelTransferi #define glPixelZoom jwzgles_glPixelZoom #define glPolygonMode jwzgles_glPolygonMode #define glPolygonStipple jwzgles_glPolygonStipple #define glPopAttrib jwzgles_glPopAttrib #define glPopClientAttrib jwzgles_glPopClientAttrib #define glPopName jwzgles_glPopName #define glPrioritizeTextures jwzgles_glPrioritizeTextures #define glPushAttrib jwzgles_glPushAttrib #define glPushClientAttrib jwzgles_glPushClientAttrib #define glPushName jwzgles_glPushName #define glRasterPos2d jwzgles_glRasterPos2d #define glRasterPos2dv jwzgles_glRasterPos2dv #define glRasterPos2f jwzgles_glRasterPos2f #define glRasterPos2fv jwzgles_glRasterPos2fv #define glRasterPos2i jwzgles_glRasterPos2i #define glRasterPos2iv jwzgles_glRasterPos2iv #define glRasterPos2s jwzgles_glRasterPos2s #define glRasterPos2sv jwzgles_glRasterPos2sv #define glRasterPos3d jwzgles_glRasterPos3d #define glRasterPos3dv jwzgles_glRasterPos3dv #define glRasterPos3f jwzgles_glRasterPos3f #define glRasterPos3fv jwzgles_glRasterPos3fv #define glRasterPos3i jwzgles_glRasterPos3i #define glRasterPos3iv jwzgles_glRasterPos3iv #define glRasterPos3s jwzgles_glRasterPos3s #define glRasterPos3sv jwzgles_glRasterPos3sv #define glRasterPos4d jwzgles_glRasterPos4d #define glRasterPos4dv jwzgles_glRasterPos4dv #define glRasterPos4f jwzgles_glRasterPos4f #define glRasterPos4fv jwzgles_glRasterPos4fv #define glRasterPos4i jwzgles_glRasterPos4i #define glRasterPos4iv jwzgles_glRasterPos4iv #define glRasterPos4s jwzgles_glRasterPos4s #define glRasterPos4sv jwzgles_glRasterPos4sv #define glReadBuffer jwzgles_glReadBuffer #define glRectd jwzgles_glRectf #define glRectdv jwzgles_glRectdv #define glRectf jwzgles_glRectf #define glRectfv jwzgles_glRectfv #define glRecti jwzgles_glRecti #define glRectiv jwzgles_glRectiv #define glRects jwzgles_glRects #define glRectsv jwzgles_glRectsv #define glRenderMode jwzgles_glRenderMode #define glResetHistogram jwzgles_glResetHistogram #define glResetMinmax jwzgles_glResetMinmax #define glRotated jwzgles_glRotated #define glScaled jwzgles_glScalef #define glSelectBuffer jwzgles_glSelectBuffer #define glSeparableFilter2D jwzgles_glSeparableFilter2D #define glTexCoord1d jwzgles_glTexCoord1d #define glTexCoord1dv jwzgles_glTexCoord1dv #define glTexCoord1f jwzgles_glTexCoord1f #define glTexCoord1fv jwzgles_glTexCoord1fv #define glTexCoord1i jwzgles_glTexCoord1i #define glTexCoord1iv jwzgles_glTexCoord1iv #define glTexCoord1s jwzgles_glTexCoord1s #define glTexCoord1sv jwzgles_glTexCoord1sv #define glTexCoord2d jwzgles_glTexCoord2f #define glTexCoord2dv jwzgles_glTexCoord2dv #define glTexCoord2f jwzgles_glTexCoord2f #define glTexCoord2fv jwzgles_glTexCoord2fv #define glTexCoord2i jwzgles_glTexCoord2i #define glTexCoord2iv jwzgles_glTexCoord2iv #define glTexCoord2s jwzgles_glTexCoord2s #define glTexCoord2sv jwzgles_glTexCoord2sv #define glTexCoord3d jwzgles_glTexCoord3d #define glTexCoord3dv jwzgles_glTexCoord3dv #define glTexCoord3f jwzgles_glTexCoord3f #define glTexCoord3fv jwzgles_glTexCoord3fv #define glTexCoord3i jwzgles_glTexCoord3i #define glTexCoord3iv jwzgles_glTexCoord3iv #define glTexCoord3s jwzgles_glTexCoord3s #define glTexCoord3sv jwzgles_glTexCoord3sv #define glTexCoord4d jwzgles_glTexCoord4d #define glTexCoord4dv jwzgles_glTexCoord4dv #define glTexCoord4f jwzgles_glTexCoord4f #define glTexCoord4fv jwzgles_glTexCoord4fv #define glTexCoord4i jwzgles_glTexCoord4i #define glTexCoord4iv jwzgles_glTexCoord4iv #define glTexCoord4s jwzgles_glTexCoord4s #define glTexCoord4sv jwzgles_glTexCoord4sv #define glTexEnvi jwzgles_glTexEnvi #define glTexEnviv jwzgles_glTexEnviv #define glTexGend jwzgles_glTexGend #define glTexGendv jwzgles_glTexGendv #define glTexGenf jwzgles_glTexGenf #define glTexGenfv jwzgles_glTexGenfv #define glTexGeni jwzgles_glTexGeni #define glTexGeniv jwzgles_glTexGeniv #define glTexImage1D jwzgles_glTexImage1D #define glTexImage3D jwzgles_glTexImage3D #define glTexParameterfv jwzgles_glTexParameterfv #define glTexParameteri jwzgles_glTexParameteri #define glTexParameteriv jwzgles_glTexParameteriv #define glTexSubImage1D jwzgles_glTexSubImage1D #define glTexSubImage3D jwzgles_glTexSubImage3D #define glTranslated jwzgles_glTranslatef #define glVertex2d jwzgles_glVertex2d #define glVertex2dv jwzgles_glVertex2dv #define glVertex2f jwzgles_glVertex2f #define glVertex2fv jwzgles_glVertex2fv #define glVertex2i jwzgles_glVertex2i #define glVertex2iv jwzgles_glVertex2iv #define glVertex2s jwzgles_glVertex2s #define glVertex2sv jwzgles_glVertex2sv #define glVertex3d jwzgles_glVertex3f #define glVertex3dv jwzgles_glVertex3dv #define glVertex3f jwzgles_glVertex3f #define glVertex3fv jwzgles_glVertex3fv #define glVertex3i jwzgles_glVertex3i #define glVertex3iv jwzgles_glVertex3iv #define glVertex3s jwzgles_glVertex3s #define glVertex3sv jwzgles_glVertex3sv #define glVertex4d jwzgles_glVertex4d #define glVertex4dv jwzgles_glVertex4dv #define glVertex4f jwzgles_glVertex4f #define glVertex4fv jwzgles_glVertex4fv #define glVertex4i jwzgles_glVertex4i #define glVertex4iv jwzgles_glVertex4iv #define glVertex4s jwzgles_glVertex4s #define glVertex4sv jwzgles_glVertex4sv #define gluOrtho2D(L,R,B,T) glOrtho(L,R,B,T,-1,1) #define gluPerspective jwzgles_gluPerspective #define glXChooseVisual jwzgles_glXChooseVisual #define glXCopyContext jwzgles_glXCopyContext /*#define glXCreateContext jwzgles_glXCreateContext*/ #define glXCreateGLXPixmap jwzgles_glXCreateGLXPixmap #define glXDestroyContext jwzgles_glXDestroyContext #define glXDestroyGLXPixmap jwzgles_glXDestroyGLXPixmap #define glXFreeContextEXT jwzgles_glXFreeContextEXT #define glXGetClientString jwzgles_glXGetClientString #define glXGetConfig jwzgles_glXGetConfig #define glXGetContextIDEXT jwzgles_glXGetContextIDEXT #define glXGetCurrentContext jwzgles_glXGetCurrentContext #define glXGetCurrentDisplay jwzgles_glXGetCurrentDisplay #define glXGetCurrentDrawable jwzgles_glXGetCurrentDrawable #define glXImportContextEXT jwzgles_glXImportContextEXT #define glXIntro jwzgles_glXIntro #define glXIsDirect jwzgles_glXIsDirect /*#define glXMakeCurrent jwzgles_glXMakeCurrent*/ #define glXQueryContextInfoEXT jwzgles_glXQueryContextInfoEXT #define glXQueryExtension jwzgles_glXQueryExtension #define glXQueryExtensionsString jwzgles_glXQueryExtensionsString #define glXQueryServerString jwzgles_glXQueryServerString #define glXQueryVersion jwzgles_glXQueryVersion /*#define glXSwapBuffers jwzgles_glXSwapBuffers*/ #define glXUseXFont jwzgles_glXUseXFont #define glXWaitGL jwzgles_glXWaitGL #define glXWaitX jwzgles_glXWaitX #define gluBeginCurve jwzgles_gluBeginCurve #define gluBeginPolygon jwzgles_gluBeginPolygon #define gluBeginSurface jwzgles_gluBeginSurface #define gluBeginTrim jwzgles_gluBeginTrim #define gluBuild1DMipmaps jwzgles_gluBuild1DMipmaps #define gluBuild2DMipmaps jwzgles_gluBuild2DMipmaps #define gluCheckExtension jwzgles_gluCheckExtension #define gluCylinder jwzgles_gluCylinder #define gluDeleteNurbsRenderer jwzgles_gluDeleteNurbsRenderer #define gluDeleteQuadric jwzgles_gluDeleteQuadric #define gluDeleteTess jwzgles_gluDeleteTess #define gluDisk jwzgles_gluDisk #define gluEndCurve jwzgles_gluEndCurve #define gluEndPolygon jwzgles_gluEndPolygon #define gluEndSurface jwzgles_gluEndSurface #define gluEndTrim jwzgles_gluEndTrim #define gluErrorString jwzgles_gluErrorString #define gluGetNurbsProperty jwzgles_gluGetNurbsProperty #define gluGetString jwzgles_gluGetString #define gluGetTessProperty jwzgles_gluGetTessProperty #define gluLoadSamplingMatrices jwzgles_gluLoadSamplingMatrices #define gluLookAt jwzgles_gluLookAt #define gluNewNurbsRenderer jwzgles_gluNewNurbsRenderer #define gluNewQuadric jwzgles_gluNewQuadric #define gluNewTess jwzgles_gluNewTess #define gluNextContour jwzgles_gluNextContour #define gluNurbsCallback jwzgles_gluNurbsCallback #define gluNurbsCurve jwzgles_gluNurbsCurve #define gluNurbsProperty jwzgles_gluNurbsProperty #define gluNurbsSurface jwzgles_gluNurbsSurface #define gluPartialDisk jwzgles_gluPartialDisk #define gluPickMatrix jwzgles_gluPickMatrix #define gluProject jwzgles_gluProject #define gluPwlCurve jwzgles_gluPwlCurve #define gluQuadricCallback jwzgles_gluQuadricCallback #define gluQuadricDrawStyle jwzgles_gluQuadricDrawStyle #define gluQuadricNormals jwzgles_gluQuadricNormals #define gluQuadricOrientation jwzgles_gluQuadricOrientation #define gluQuadricTexture jwzgles_gluQuadricTexture #define gluScaleImage jwzgles_gluScaleImage #define gluSphere jwzgles_gluSphere #define gluTessBeginContour jwzgles_gluTessBeginContour #define gluTessBeginPolygon jwzgles_gluTessBeginPolygon #define gluTessCallback jwzgles_gluTessCallback #define gluTessEndPolygon jwzgles_gluTessEndPolygon #define gluTessEndContour jwzgles_gluTessEndContour #define gluTessNormal jwzgles_gluTessNormal #define gluTessProperty jwzgles_gluTessProperty #define gluTessVertex jwzgles_gluTessVertex #define gluUnProject jwzgles_gluUnProject /* These functions are present in both OpenGL 1.1 and in OpenGLES 1, but are allowed within glNewList/glEndList, so we must wrap them to allow them to be recorded. */ #define glActiveTexture jwzgles_glActiveTexture #define glAlphaFunc jwzgles_glAlphaFunc #define glBindTexture jwzgles_glBindTexture #define glBlendFunc jwzgles_glBlendFunc #define glClear jwzgles_glClear #define glClearColor jwzgles_glClearColor #define glClearStencil jwzgles_glClearStencil #define glColor4f jwzgles_glColor4f #define glColorMask jwzgles_glColorMask #define glColorPointer jwzgles_glColorPointer #define glCompressedTexImage2D jwzgles_glCompressedTexImage2D #define glCompressedTexSubImage2D jwzgles_glCompressedTexSubImage2D #define glCopyTexImage2D jwzgles_glCopyTexImage2D #define glCopyTexSubImage2D jwzgles_glCopyTexSubImage2D #define glCullFace jwzgles_glCullFace #define glDeleteTextures jwzgles_glDeleteTextures #define glDepthFunc jwzgles_glDepthFunc #define glDepthMask jwzgles_glDepthMask #define glDisable jwzgles_glDisable #define glDrawArrays jwzgles_glDrawArrays #define glDrawElements jwzgles_glDrawElements #define glEnable jwzgles_glEnable #define glFinish jwzgles_glFinish #define glFlush jwzgles_glFlush #define glFogf jwzgles_glFogf #define glFogfv jwzgles_glFogfv #define glFrontFace jwzgles_glFrontFace #define glGenTextures jwzgles_glGenTextures #define glGetIntegerv jwzgles_glGetIntegerv #define glHint jwzgles_glHint #define glLightModelf jwzgles_glLightModelf #define glLightModelfv jwzgles_glLightModelfv #define glLightf jwzgles_glLightf #define glLightfv jwzgles_glLightfv #define glLineWidth jwzgles_glLineWidth #define glLoadIdentity jwzgles_glLoadIdentity #define glLoadMatrixf jwzgles_glLoadMatrixf #define glLogicOp jwzgles_glLogicOp #define glMaterialf jwzgles_glMaterialf #define glMateriali jwzgles_glMateriali #define glMaterialfv jwzgles_glMaterialfv #define glMaterialiv jwzgles_glMaterialiv #define glMatrixMode jwzgles_glMatrixMode #define glMultMatrixf jwzgles_glMultMatrixf #define glNormal3f jwzgles_glNormal3f #define glNormalPointer jwzgles_glNormalPointer #define glPixelStorei jwzgles_glPixelStorei #define glPointSize jwzgles_glPointSize #define glPolygonOffset jwzgles_glPolygonOffset #define glPopMatrix jwzgles_glPopMatrix #define glPushMatrix jwzgles_glPushMatrix #define glReadPixels jwzgles_glReadPixels #define glRotatef jwzgles_glRotatef #define glScalef jwzgles_glScalef #define glSampleCoverage jwzgles_glSampleCoverage #define glScissor jwzgles_glScissor #define glShadeModel jwzgles_glShadeModel #define glStencilFunc jwzgles_glStencilFunc #define glStencilMask jwzgles_glStencilMask #define glStencilOp jwzgles_glStencilOp #define glTexCoordPointer jwzgles_glTexCoordPointer #define glTexEnvf jwzgles_glTexEnvf #define glTexEnvfv jwzgles_glTexEnvfv #define glTexImage2D jwzgles_glTexImage2D #define glTexParameterf jwzgles_glTexParameterf #define glTexSubImage2D jwzgles_glTexSubImage2D #define glTranslatef jwzgles_glTranslatef #define glVertexPointer jwzgles_glVertexPointer #define glViewport jwzgles_glViewport #define glEnableClientState jwzgles_glEnableClientState #define glDisableClientState jwzgles_glDisableClientState #define glClipPlane jwzgles_glClipPlane #endif /* __JWZGLES_H__ */ xscreensaver-5.36/jwxyz/jwzglesI.h000644 000767 000024 00000037614 12701612217 017312 0ustar00jwzstaff000000 000000 /* xscreensaver, Copyright (c) 2012-2015 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. */ /* A compatibility shim to allow OpenGL 1.3 source code to work in an OpenGLES environment, where almost every OpenGL 1.3 function has been "deprecated". See jwzgles.c for details. */ #ifndef __JWZGLES_I_H__ #define __JWZGLES_I_H__ #ifdef GL_VERSION_ES_CM_1_0 /* compiling against OpenGLES 1.x */ /* These OpenGL 1.3 constants are not present in OpenGLES 1. Fortunately, it looks like they didn't re-use any of the numbers, so we can just keep using the OpenGL 1.3 values. I'm actually kind of shocked that the GLES folks passed up that opportunity for further clusterfuckery. */ # define GLdouble double # define GL_ACCUM_BUFFER_BIT 0x00000200 # define GL_ALL_ATTRIB_BITS 0x000FFFFF # define GL_AUTO_NORMAL 0x0D80 # define GL_BLEND_SRC_ALPHA 0x80CB # define GL_C3F_V3F 0x2A24 # define GL_C4F_N3F_V3F 0x2A26 # define GL_C4UB_V2F 0x2A22 # define GL_C4UB_V3F 0x2A23 # define GL_CLAMP 0x2900 # define GL_COLOR_BUFFER_BIT 0x00004000 # define GL_COLOR_MATERIAL_FACE 0x0B55 # define GL_COLOR_MATERIAL_PARAMETER 0x0B56 # define GL_COMPILE 0x1300 # define GL_CURRENT_BIT 0x00000001 # define GL_DEPTH_BUFFER_BIT 0x00000100 # define GL_DOUBLEBUFFER 0x0C32 # define GL_ENABLE_BIT 0x00002000 # define GL_EVAL_BIT 0x00010000 # define GL_EYE_LINEAR 0x2400 # define GL_EYE_PLANE 0x2502 # define GL_FEEDBACK 0x1C01 # define GL_FILL 0x1B02 # define GL_FOG_BIT 0x00000080 # define GL_HINT_BIT 0x00008000 # define GL_INTENSITY 0x8049 # define GL_LIGHTING_BIT 0x00000040 # define GL_LIGHT_MODEL_COLOR_CONTROL 0x81F8 # define GL_LIGHT_MODEL_LOCAL_VIEWER 0x0B51 # define GL_LINE 0x1B01 # define GL_LINE_BIT 0x00000004 # define GL_LIST_BIT 0x00020000 # define GL_MAX_TEXTURE_MAX_ANISOTROPY_EXT 0x84FF # define GL_N3F_V3F 0x2A25 # define GL_OBJECT_LINEAR 0x2401 # define GL_OBJECT_PLANE 0x2501 # define GL_PIXEL_MODE_BIT 0x00000020 # define GL_POINT_BIT 0x00000002 # define GL_POLYGON 0x0009 # define GL_POLYGON_BIT 0x00000008 # define GL_POLYGON_MODE 0x0B40 # define GL_POLYGON_SMOOTH 0x0B41 # define GL_POLYGON_STIPPLE 0x0B42 # define GL_POLYGON_STIPPLE_BIT 0x00000010 # define GL_Q 0x2003 # define GL_QUADS 0x0007 # define GL_QUAD_STRIP 0x0008 # define GL_R 0x2002 # define GL_RENDER 0x1C00 # define GL_RGBA_MODE 0x0C31 # define GL_S 0x2000 # define GL_SCISSOR_BIT 0x00080000 # define GL_SELECT 0x1C02 # define GL_SEPARATE_SPECULAR_COLOR 0x81FA # define GL_SINGLE_COLOR 0x81F9 # define GL_SPHERE_MAP 0x2402 # define GL_STENCIL_BUFFER_BIT 0x00000400 # define GL_T 0x2001 # define GL_T2F_C3F_V3F 0x2A2A # define GL_T2F_C4F_N3F_V3F 0x2A2C # define GL_T2F_C4UB_V3F 0x2A29 # define GL_T2F_N3F_V3F 0x2A2B # define GL_T2F_V3F 0x2A27 # define GL_T4F_C4F_N3F_V4F 0x2A2D # define GL_T4F_V4F 0x2A28 # define GL_TEXTURE_1D 0x0DE0 # define GL_TEXTURE_ALPHA_SIZE 0x805F # define GL_TEXTURE_BIT 0x00040000 # define GL_TEXTURE_BLUE_SIZE 0x805E # define GL_TEXTURE_BORDER 0x1005 # define GL_TEXTURE_BORDER_COLOR 0x1004 # define GL_TEXTURE_COMPONENTS 0x1003 # define GL_TEXTURE_GEN_MODE 0x2500 # define GL_TEXTURE_GEN_Q 0x0C63 # define GL_TEXTURE_GEN_R 0x0C62 # define GL_TEXTURE_GEN_S 0x0C60 # define GL_TEXTURE_GEN_T 0x0C61 # define GL_TEXTURE_GREEN_SIZE 0x805D # define GL_TEXTURE_HEIGHT 0x1001 # define GL_TEXTURE_INTENSITY_SIZE 0x8061 # define GL_TEXTURE_LUMINANCE_SIZE 0x8060 # define GL_TEXTURE_MAX_ANISOTROPY_EXT 0x84FE # define GL_TEXTURE_RED_SIZE 0x805C # define GL_TEXTURE_WIDTH 0x1000 # define GL_TRANSFORM_BIT 0x00001000 # define GL_UNPACK_ROW_LENGTH 0x0CF2 # define GL_UNSIGNED_INT_8_8_8_8_REV 0x8367 # define GL_V2F 0x2A20 # define GL_V3F 0x2A21 # define GL_VIEWPORT_BIT 0x00000800 # define GL_INT 0x1404 # define GL_DOUBLE 0x140A #endif extern void jwzgles_reset (void); /* Prototypes for the things re-implemented in jwzgles.c */ extern int jwzgles_glGenLists (int n); extern void jwzgles_glNewList (int id, int mode); extern void jwzgles_glEndList (void); extern void jwzgles_glDeleteLists (int list, int range); extern void jwzgles_glBegin (int mode); extern void jwzgles_glNormal3fv (const GLfloat *); extern void jwzgles_glNormal3f (GLfloat x, GLfloat y, GLfloat z); extern void jwzgles_glTexCoord1f (GLfloat s); extern void jwzgles_glTexCoord2fv (const GLfloat *); extern void jwzgles_glTexCoord2f (GLfloat s, GLfloat t); extern void jwzgles_glTexCoord3fv (const GLfloat *); extern void jwzgles_glTexCoord3f (GLfloat s, GLfloat t, GLfloat r); extern void jwzgles_glTexCoord4fv (const GLfloat *); extern void jwzgles_glTexCoord4f (GLfloat s, GLfloat t, GLfloat r, GLfloat q); extern void jwzgles_glVertex2f (GLfloat x, GLfloat y); extern void jwzgles_glVertex2dv (const GLdouble *); extern void jwzgles_glVertex2fv (const GLfloat *); extern void jwzgles_glVertex2i (GLint x, GLint y); extern void jwzgles_glVertex3f (GLfloat x, GLfloat y, GLfloat z); extern void jwzgles_glVertex3dv (const GLdouble *); extern void jwzgles_glVertex3fv (const GLfloat *); extern void jwzgles_glVertex3i (GLint x, GLint y, GLint z); extern void jwzgles_glVertex4f (GLfloat x, GLfloat y, GLfloat z, GLfloat w); extern void jwzgles_glVertex4fv (const GLfloat *); extern void jwzgles_glVertex4i (GLint x, GLint y, GLint z, GLint w); extern void jwzgles_glEnd (void); extern void jwzgles_glCallList (int id); extern void jwzgles_glClearIndex(GLfloat c); extern void jwzgles_glBitmap (GLsizei, GLsizei, GLfloat, GLfloat, GLfloat, GLfloat, const GLubyte *); extern void jwzgles_glPushAttrib(int); extern void jwzgles_glPopAttrib(void); /* These functions are present in both OpenGL 1.3 and in OpenGLES 1, but are allowed within glNewList/glEndList, so we must wrap them to allow them to be recorded. */ extern void jwzgles_glActiveTexture (GLuint); extern void jwzgles_glBindTexture (GLuint, GLuint); extern void jwzgles_glBlendFunc (GLuint, GLuint); extern void jwzgles_glClear (GLuint); extern void jwzgles_glClearColor (GLclampf, GLclampf, GLclampf, GLclampf); extern void jwzgles_glClearStencil (GLuint); extern void jwzgles_glColorMask (GLuint, GLuint, GLuint, GLuint); extern void jwzgles_glCullFace (GLuint); extern void jwzgles_glDepthFunc (GLuint); extern void jwzgles_glDepthMask (GLuint); extern void jwzgles_glDisable (GLuint); extern void jwzgles_glDrawArrays (GLuint, GLuint, GLuint); extern GLboolean jwzgles_glIsEnabled (GLuint); extern void jwzgles_glEnable (GLuint); extern void jwzgles_glFrontFace (GLuint); extern void jwzgles_glHint (GLuint, GLuint); extern void jwzgles_glLineWidth (GLfloat); extern void jwzgles_glLoadIdentity (void); extern void jwzgles_glLogicOp (GLuint); extern void jwzgles_glMatrixMode (GLuint); extern void jwzgles_glMultMatrixf (const GLfloat *); extern void jwzgles_glPointSize (GLfloat); extern void jwzgles_glPolygonOffset (GLfloat, GLfloat); extern void jwzgles_glPopMatrix (void); extern void jwzgles_glPushMatrix (void); extern void jwzgles_glScissor (GLuint, GLuint, GLuint, GLuint); extern void jwzgles_glShadeModel (GLuint); extern void jwzgles_glStencilFunc (GLuint, GLuint, GLuint); extern void jwzgles_glStencilMask (GLuint); extern void jwzgles_glStencilOp (GLuint, GLuint, GLuint); extern void jwzgles_glViewport (GLuint, GLuint, GLuint, GLuint); extern void jwzgles_glTranslatef (GLfloat, GLfloat, GLfloat); extern void jwzgles_glRotatef (GLfloat, GLfloat, GLfloat, GLfloat); extern void jwzgles_glRotated (GLdouble, GLdouble x, GLdouble y, GLdouble z); extern void jwzgles_glScalef (GLfloat, GLfloat, GLfloat); extern void jwzgles_glColor3f (GLfloat, GLfloat, GLfloat); extern void jwzgles_glColor4f (GLfloat, GLfloat, GLfloat, GLfloat); extern void jwzgles_glColor3fv (const GLfloat *); extern void jwzgles_glColor4fv (const GLfloat *); extern void jwzgles_glColor3s (GLshort, GLshort, GLshort); extern void jwzgles_glColor4s (GLshort, GLshort, GLshort, GLshort); extern void jwzgles_glColor3sv (const GLshort *); extern void jwzgles_glColor4sv (const GLshort *); extern void jwzgles_glColor3us (GLushort, GLushort, GLushort); extern void jwzgles_glColor4us (GLushort, GLushort, GLushort, GLushort); extern void jwzgles_glColor3usv (const GLushort *); extern void jwzgles_glColor4usv (const GLushort *); extern void jwzgles_glColor3d (GLdouble, GLdouble, GLdouble); extern void jwzgles_glColor4d (GLdouble, GLdouble, GLdouble, GLdouble); extern void jwzgles_glColor3dv (const GLdouble *); extern void jwzgles_glColor4dv (const GLdouble *); extern void jwzgles_glColor4i (GLint, GLint, GLint, GLint); extern void jwzgles_glColor3i (GLint, GLint, GLint); extern void jwzgles_glColor3iv (const GLint *); extern void jwzgles_glColor4iv (const GLint *); extern void jwzgles_glColor4ui (GLuint, GLuint, GLuint, GLuint); extern void jwzgles_glColor3ui (GLuint, GLuint, GLuint); extern void jwzgles_glColor3uiv (const GLuint *); extern void jwzgles_glColor4uiv (const GLuint *); extern void jwzgles_glColor4b (GLbyte, GLbyte, GLbyte, GLbyte); extern void jwzgles_glColor3b (GLbyte, GLbyte, GLbyte); extern void jwzgles_glColor4bv (const GLbyte *); extern void jwzgles_glColor3bv (const GLbyte *); extern void jwzgles_glColor4ub (GLubyte, GLubyte, GLubyte, GLubyte); extern void jwzgles_glColor3ub (GLubyte, GLubyte, GLubyte); extern void jwzgles_glColor4ubv (const GLubyte *); extern void jwzgles_glColor3ubv (const GLubyte *); extern void jwzgles_glMaterialf (GLuint, GLuint, GLfloat); extern void jwzgles_glMateriali (GLuint, GLuint, GLuint); extern void jwzgles_glMaterialfv (GLuint, GLuint, const GLfloat *); extern void jwzgles_glMaterialiv (GLuint, GLuint, const GLint *); extern void jwzgles_glFinish (void); extern void jwzgles_glFlush (void); extern void jwzgles_glPixelStorei (GLuint, GLuint); extern void jwzgles_glEnableClientState (GLuint); extern void jwzgles_glDisableClientState (GLuint); extern void jwzgles_glInitNames (void); extern void jwzgles_glPushName (GLuint); extern GLuint jwzgles_glPopName (void); extern GLuint jwzgles_glRenderMode (GLuint); extern void jwzgles_glSelectBuffer (GLsizei, GLuint *); extern void jwzgles_glLightf (GLenum, GLenum, GLfloat); extern void jwzgles_glLighti (GLenum, GLenum, GLint); extern void jwzgles_glLightfv (GLenum, GLenum, const GLfloat *); extern void jwzgles_glLightiv (GLenum, GLenum, const GLint *); extern void jwzgles_glLightModelf (GLenum, GLfloat); extern void jwzgles_glLightModeli (GLenum, GLint); extern void jwzgles_glLightModelfv (GLenum, const GLfloat *); extern void jwzgles_glLightModeliv (GLenum, const GLint *); extern void jwzgles_glGenTextures (GLuint, GLuint *); extern void jwzgles_glFrustum (GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat); extern void jwzgles_glOrtho (GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat); extern void jwzgles_glTexImage1D (GLenum target, GLint level, GLint internalFormat, GLsizei width, GLint border, GLenum format, GLenum type, const GLvoid *pixels); extern void jwzgles_glTexImage2D (GLenum target, GLint level, GLint internalFormat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, const GLvoid *data); extern void jwzgles_glTexSubImage2D (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid *pixels); extern void jwzgles_glCopyTexImage2D (GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border); extern void jwzgles_glInterleavedArrays (GLenum, GLsizei, const GLvoid *); extern void jwzgles_glTexEnvf (GLuint, GLuint, GLfloat); extern void jwzgles_glTexEnvi (GLuint, GLuint, GLuint); extern void jwzgles_glTexParameterf (GLuint, GLuint, GLfloat); extern void jwzgles_glTexParameteri (GLuint, GLuint, GLuint); extern void jwzgles_glTexGeni (GLenum, GLenum, GLint); extern void jwzgles_glTexGenfv (GLenum, GLenum, const GLfloat *); extern void jwzgles_glGetTexGenfv (GLenum, GLenum, GLfloat *); extern void jwzgles_glRectf (GLfloat, GLfloat, GLfloat, GLfloat); extern void jwzgles_glRecti (GLint, GLint, GLint, GLint); extern void jwzgles_glLightModelfv (GLenum, const GLfloat *); extern void jwzgles_glClearDepth (GLfloat); extern GLboolean jwzgles_glIsList (GLuint); extern void jwzgles_glColorMaterial (GLenum, GLenum); extern void jwzgles_glPolygonMode (GLenum, GLenum); extern void jwzgles_glFogf (GLenum, GLfloat); extern void jwzgles_glFogi (GLenum, GLint); extern void jwzgles_glFogfv (GLenum, const GLfloat *); extern void jwzgles_glFogiv (GLenum, const GLint *); extern void jwzgles_glAlphaFunc (GLenum, GLfloat); extern void jwzgles_glClipPlane (GLenum, const GLdouble *); extern void jwzgles_glDrawBuffer (GLenum); extern void jwzgles_glDeleteTextures (GLuint, const GLuint *); extern void jwzgles_gluPerspective (GLdouble fovy, GLdouble aspect, GLdouble near, GLdouble far); extern void jwzgles_gluLookAt (GLfloat eyex, GLfloat eyey, GLfloat eyez, GLfloat centerx, GLfloat centery, GLfloat centerz, GLfloat upx, GLfloat upy, GLfloat upz); extern GLint jwzgles_gluProject (GLdouble objx, GLdouble objy, GLdouble objz, const GLdouble modelMatrix[16], const GLdouble projMatrix[16], const GLint viewport[4], GLdouble *winx, GLdouble *winy, GLdouble *winz); extern int jwzgles_gluBuild2DMipmaps (GLenum target, GLint internalFormat, GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid *data); extern GLboolean jwzgles_gluCheckExtension (const GLubyte *ext_name, const GLubyte *ext_string); extern void jwzgles_glGetFloatv (GLenum pname, GLfloat *params); extern void jwzgles_glGetPointerv (GLenum pname, GLvoid **params); extern void jwzgles_glGetDoublev (GLenum pname, GLdouble *params); extern void jwzgles_glGetIntegerv (GLenum pname, GLint *params); extern void jwzgles_glGetBooleanv (GLenum pname, GLboolean *params); 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__ */ xscreensaver-5.36/hacks/attraction.c000644 000767 000024 00000101262 12717745722 017563 0ustar00jwzstaff000000 000000 /* xscreensaver, Copyright (c) 1992-2013 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. */ /* Simulation of a pair of quasi-gravitational fields, maybe sorta kinda a little like the strong and weak electromagnetic forces. Derived from a Lispm screensaver by John Pezaris . Viscosity added by Philip Edward Cutone, III . John sez: The simulation started out as a purely accurate gravitational simulation, but, with constant simulation step size, I quickly realized the field being simulated while grossly gravitational was, in fact, non-conservative. It also had the rather annoying behavior of dealing very badly with colliding orbs. Therefore, I implemented a negative-gravity region (with two thresholds; as I read your code, you only implemented one) to prevent orbs from every coming too close together, and added a viscosity factor if the speed of any orb got too fast. This provides a nice stable system with interesting behavior. I had experimented with a number of fields including the van der Waals force (very interesting orbiting behavior) and 1/r^3 gravity (not as interesting as 1/r^2). An even normal viscosity (rather than the thresholded version to bleed excess energy) is also not interesting. The 1/r^2, -1/r^2, -10/r^2 thresholds proved not only robust but also interesting -- the orbs never collided and the threshold viscosity fixed the non-conservational problem. Philip sez: > An even normal viscosity (rather than the thresholded version to > bleed excess energy) is also not interesting. unless you make about 200 points.... set the viscosity to about .8 and drag the mouse through it. it makes a nice wave which travels through the field. And (always the troublemaker) Joe Keane sez: Despite what John sez, the field being simulated is always conservative. The real problem is that it uses a simple hack, computing acceleration *based only on the starting position*, instead of a real differential equation solver. Thus you'll always have energy coming out of nowhere, although it's most blatant when balls get close together. If it were done right, you wouldn't need viscosity or artificial limits on how close the balls can get. Matt sez: Added a switch to remove the walls. Added a switch to make the threshold viscosity optional. If nomaxspeed is specified, then balls going really fast do not recieve special treatment. I've made tail mode prettier by eliminating the first erase line that drew from the upper left corner to the starting position of each point. Made the balls in modes other than "balls" bounce exactly at the walls. (Because the graphics for different modes are drawn differently with respect to the "actual" position of the point, they used to be able to run somewhat past the walls, or bounce before hitting them.) Added an option to output each ball's speed in the form of a bar graph drawn on the same window as the balls. If only x or y is selected, they will be represented on the appropriate axis down the center of the window. If both are selected, they will both be displayed along the diagonal such that the x and y bars for each point start at the same place. If speed is selected, the speed will be displayed down the left side. */ #include #include #include "screenhack.h" #include "spline.h" /* The normal (and max) width for a graph bar */ #define BAR_SIZE 11 #define MAX_SIZE 16 #define min(a,b) ((a)<(b)?(a):(b)) #define max(a,b) ((a)>(b)?(a):(b)) enum object_mode { ball_mode, line_mode, polygon_mode, spline_mode, spline_filled_mode, tail_mode }; enum graph_mode { graph_none, graph_x, graph_y, graph_both, graph_speed }; struct ball { double x, y; double vx, vy; double dx, dy; double mass; int size; int pixel_index; int hue; }; struct state { struct ball *balls; double *x_vels; double *y_vels; double *speeds; int npoints; int threshold; int delay; int global_size; int segments; Bool glow_p; Bool orbit_p; Bool walls_p; Bool maxspeed_p; Bool cbounce_p; XPoint *point_stack; int point_stack_size, point_stack_fp; XColor *colors; int ncolors; int fg_index; int color_shift; int xlim, ylim; Bool no_erase_yet; /* for tail mode fix */ double viscosity; int mouse_ball; /* index of ball being dragged, or 0 if none. */ unsigned long mouse_pixel; enum object_mode mode; enum graph_mode graph_mode; GC draw_gc, erase_gc; int total_ticks; int color_tick; spline *spl; }; static void * attraction_init (Display *dpy, Window window) { struct state *st = (struct state *) calloc (1, sizeof(*st)); int i; XWindowAttributes xgwa; XGCValues gcv; int midx, midy, r, vx, vy; double th; Colormap cmap; char *mode_str, *graph_mode_str; XGetWindowAttributes (dpy, window, &xgwa); st->xlim = xgwa.width; st->ylim = xgwa.height; cmap = xgwa.colormap; midx = st->xlim/2; midy = st->ylim/2; st->walls_p = get_boolean_resource (dpy, "walls", "Boolean"); /* if there aren't walls, don't set a limit on the radius */ r = get_integer_resource (dpy, "radius", "Integer"); if (r <= 0 || (r > min (st->xlim/2, st->ylim/2) && st->walls_p) ) r = min (st->xlim/2, st->ylim/2) - 50; vx = get_integer_resource (dpy, "vx", "Integer"); vy = get_integer_resource (dpy, "vy", "Integer"); st->npoints = get_integer_resource (dpy, "points", "Integer"); if (st->npoints < 1) st->npoints = 3 + (random () % 5); st->balls = (struct ball *) malloc (st->npoints * sizeof (struct ball)); st->no_erase_yet = 1; /* for tail mode fix */ st->segments = get_integer_resource (dpy, "segments", "Integer"); if (st->segments < 0) st->segments = 1; st->threshold = get_integer_resource (dpy, "threshold", "Integer"); if (st->threshold < 0) st->threshold = 0; st->delay = get_integer_resource (dpy, "delay", "Integer"); if (st->delay < 0) st->delay = 0; st->global_size = get_integer_resource (dpy, "size", "Integer"); if (st->global_size < 0) st->global_size = 0; st->glow_p = get_boolean_resource (dpy, "glow", "Boolean"); st->orbit_p = get_boolean_resource (dpy, "orbit", "Boolean"); st->maxspeed_p = get_boolean_resource (dpy, "maxspeed", "Boolean"); st->cbounce_p = get_boolean_resource (dpy, "cbounce", "Boolean"); st->color_shift = get_integer_resource (dpy, "colorShift", "Integer"); if (st->color_shift <= 0) st->color_shift = 5; st->viscosity = get_float_resource (dpy, "viscosity", "Float"); mode_str = get_string_resource (dpy, "mode", "Mode"); if (! mode_str) st->mode = ball_mode; else if (!strcmp (mode_str, "balls")) st->mode = ball_mode; else if (!strcmp (mode_str, "lines")) st->mode = line_mode; else if (!strcmp (mode_str, "polygons")) st->mode = polygon_mode; else if (!strcmp (mode_str, "tails")) st->mode = tail_mode; else if (!strcmp (mode_str, "splines")) st->mode = spline_mode; else if (!strcmp (mode_str, "filled-splines"))st->mode = spline_filled_mode; else { fprintf (stderr, "%s: mode must be balls, lines, tails, polygons, splines, or\n\ filled-splines, not \"%s\"\n", progname, mode_str); exit (1); } graph_mode_str = get_string_resource (dpy, "graphmode", "Mode"); if (! graph_mode_str) st->graph_mode = graph_none; else if (!strcmp (graph_mode_str, "x")) st->graph_mode = graph_x; else if (!strcmp (graph_mode_str, "y")) st->graph_mode = graph_y; else if (!strcmp (graph_mode_str, "both")) st->graph_mode = graph_both; else if (!strcmp (graph_mode_str, "speed")) st->graph_mode = graph_speed; else if (!strcmp (graph_mode_str, "none")) st->graph_mode = graph_none; else { fprintf (stderr, "%s: graphmode must be speed, x, y, both, or none, not \"%s\"\n", progname, graph_mode_str); exit (1); } /* only allocate memory if it is needed */ if(st->graph_mode != graph_none) { if(st->graph_mode == graph_x || st->graph_mode == graph_both) st->x_vels = (double *) malloc (st->npoints * sizeof (double)); if(st->graph_mode == graph_y || st->graph_mode == graph_both) st->y_vels = (double *) malloc (st->npoints * sizeof (double)); if(st->graph_mode == graph_speed) st->speeds = (double *) malloc (st->npoints * sizeof (double)); } if (st->mode != ball_mode && st->mode != tail_mode) st->glow_p = False; if (st->mode == polygon_mode && st->npoints < 3) st->mode = line_mode; st->ncolors = get_integer_resource (dpy, "colors", "Colors"); if (st->ncolors < 2) st->ncolors = 2; if (st->ncolors <= 2) mono_p = True; st->colors = 0; if (!mono_p) { st->fg_index = 0; switch (st->mode) { case ball_mode: if (st->glow_p) { int H = random() % 360; double S1 = 0.25; double S2 = 1.00; double V = frand(0.25) + 0.75; st->colors = (XColor *) malloc(sizeof(*st->colors) * (st->ncolors+1)); make_color_ramp (xgwa.screen, xgwa.visual, cmap, H, S1, V, H, S2, V, st->colors, &st->ncolors, False, True, False); } else { st->ncolors = st->npoints; st->colors = (XColor *) malloc(sizeof(*st->colors) * (st->ncolors+1)); make_random_colormap (xgwa.screen, xgwa.visual, cmap, st->colors, &st->ncolors, True, True, False, True); } break; case line_mode: case polygon_mode: case spline_mode: case spline_filled_mode: case tail_mode: st->colors = (XColor *) malloc(sizeof(*st->colors) * (st->ncolors+1)); make_smooth_colormap (xgwa.screen, xgwa.visual, cmap, st->colors, &st->ncolors, True, False, True); break; default: abort (); } } if (!mono_p && st->ncolors <= 2) { if (st->colors) free (st->colors); st->colors = 0; mono_p = True; } st->mouse_pixel = get_pixel_resource (dpy, cmap, "mouseForeground", "MouseForeground"); st->mouse_ball = -1; if (st->mode != ball_mode) { int size = (st->segments ? st->segments : 1); st->point_stack_size = size * (st->npoints + 1); st->point_stack = (XPoint *) calloc (st->point_stack_size, sizeof (XPoint)); st->point_stack_fp = 0; } gcv.line_width = (st->mode == tail_mode ? (st->global_size ? st->global_size : (MAX_SIZE * 2 / 3)) : 1); gcv.cap_style = (st->mode == tail_mode ? CapRound : CapButt); if (mono_p) gcv.foreground = get_pixel_resource(dpy, cmap, "foreground", "Foreground"); else gcv.foreground = st->colors[st->fg_index].pixel; st->draw_gc = XCreateGC (dpy, window, GCForeground|GCLineWidth|GCCapStyle, &gcv); gcv.foreground = get_pixel_resource(dpy, cmap, "background", "Background"); st->erase_gc = XCreateGC (dpy, window, GCForeground|GCLineWidth|GCCapStyle,&gcv); #ifdef HAVE_JWXYZ jwxyz_XSetAntiAliasing (dpy, st->draw_gc, False); jwxyz_XSetAntiAliasing (dpy, st->erase_gc, False); #endif /* let's make the balls bigger by default */ #define rand_size() (3 * (8 + (random () % 7))) if (st->orbit_p && !st->global_size) /* To orbit, all objects must be the same mass, or the math gets really hairy... */ st->global_size = rand_size (); RETRY_NO_ORBIT: th = frand (M_PI+M_PI); for (i = 0; i < st->npoints; i++) { int new_size = (st->global_size ? st->global_size : rand_size ()); st->balls [i].dx = 0; st->balls [i].dy = 0; st->balls [i].size = new_size; st->balls [i].mass = (new_size * new_size * 10); st->balls [i].x = midx + r * cos (i * ((M_PI+M_PI) / st->npoints) + th); st->balls [i].y = midy + r * sin (i * ((M_PI+M_PI) / st->npoints) + th); if (! st->orbit_p) { st->balls [i].vx = vx ? vx : ((6.0 - (random () % 11)) / 8.0); st->balls [i].vy = vy ? vy : ((6.0 - (random () % 11)) / 8.0); } if (mono_p || st->mode != ball_mode) st->balls [i].pixel_index = -1; else if (st->glow_p) st->balls [i].pixel_index = 0; else st->balls [i].pixel_index = random() % st->ncolors; } /* This lets modes where the points don't really have any size use the whole window. Otherwise, since the points still have a positive size assigned to them, they will be bounced somewhat early. Mass and size are seperate, so this shouldn't cause problems. It's a bit kludgy, tho. */ if(st->mode == line_mode || st->mode == spline_mode || st->mode == spline_filled_mode || st->mode == polygon_mode) { for(i = 1; i < st->npoints; i++) { st->balls[i].size = 0; } } if (st->orbit_p) { double a = 0; double v; double v_mult = get_float_resource (dpy, "vMult", "Float"); if (v_mult == 0.0) v_mult = 1.0; for (i = 1; i < st->npoints; i++) { double _2ipi_n = (2 * i * M_PI / st->npoints); double x = r * cos (_2ipi_n); double y = r * sin (_2ipi_n); double distx = r - x; double dist2 = (distx * distx) + (y * y); double dist = sqrt (dist2); double a1 = ((st->balls[i].mass / dist2) * ((dist < st->threshold) ? -1.0 : 1.0) * (distx / dist)); a += a1; } if (a < 0.0) { /* "domain error: forces on balls too great" */ fprintf (stderr, "%s: window too small for these orbit settings.\n", progname); st->orbit_p = False; goto RETRY_NO_ORBIT; } v = sqrt (a * r) * v_mult; for (i = 0; i < st->npoints; i++) { double k = ((2 * i * M_PI / st->npoints) + th); st->balls [i].vx = -v * sin (k); st->balls [i].vy = v * cos (k); } } if (mono_p) st->glow_p = False; XClearWindow (dpy, window); return st; } static void compute_force (struct state *st, int i, double *dx_ret, double *dy_ret) { int j; double x_dist, y_dist, dist, dist2; *dx_ret = 0; *dy_ret = 0; for (j = 0; j < st->npoints; j++) { if (i == j) continue; x_dist = st->balls [j].x - st->balls [i].x; y_dist = st->balls [j].y - st->balls [i].y; dist2 = (x_dist * x_dist) + (y_dist * y_dist); dist = sqrt (dist2); if (dist > 0.1) /* the balls are not overlapping */ { double new_acc = ((st->balls[j].mass / dist2) * ((dist < st->threshold) ? -1.0 : 1.0)); double new_acc_dist = new_acc / dist; *dx_ret += new_acc_dist * x_dist; *dy_ret += new_acc_dist * y_dist; } else { /* the balls are overlapping; move randomly */ *dx_ret += (frand (10.0) - 5.0); *dy_ret += (frand (10.0) - 5.0); } } } /* Draws meters along the diagonal for the x velocity */ static void draw_meter_x(Display *dpy, Window window, struct state *st, int i, int alone) { XWindowAttributes xgwa; int x1,x2,y,w1,w2,h; XGetWindowAttributes (dpy, window, &xgwa); /* set the width of the bars to use */ if(xgwa.height < BAR_SIZE*st->npoints) { y = i*(xgwa.height/st->npoints); h = (xgwa.height/st->npoints) - 2; } else { y = BAR_SIZE*i; h = BAR_SIZE - 2; } if(alone) { x1 = xgwa.width/2; x2 = x1; } else { x1 = i*(h+2); if(x1 < i) x1 = i; x2 = x1; } if(y<1) y=i; if(h<1) h=1; w1 = (int)(20*st->x_vels[i]); w2 = (int)(20*st->balls[i].vx); st->x_vels[i] = st->balls[i].vx; if (w1<0) { w1=-w1; x1=x1-w1; } if (w2<0) { w2=-w2; x2=x2-w2; } XDrawRectangle(dpy,window,st->erase_gc,x1+(h+2)/2,y,w1,h); XDrawRectangle(dpy,window,st->draw_gc,x2+(h+2)/2,y,w2,h); } /* Draws meters along the diagonal for the y velocity. Is there some way to make draw_meter_x and draw_meter_y one function instead of two without making them completely unreadable? */ static void draw_meter_y (Display *dpy, Window window, struct state *st, int i, int alone) { XWindowAttributes xgwa; int y1,y2,x,h1,h2,w; XGetWindowAttributes (dpy, window, &xgwa); if(xgwa.height < BAR_SIZE*st->npoints){ /*needs to be height still */ x = i*(xgwa.height/st->npoints); w = (xgwa.height/st->npoints) - 2; } else{ x = BAR_SIZE*i; w = BAR_SIZE - 2; } if(alone) { y1 = xgwa.height/2; y2 = y1; } else { y1 = i*(w+2); if(y1 < i) y1 = i; y2 = y1; } if(x < 1) x = i; if(w < 1) w = 1; h1 = (int)(20*st->y_vels[i]); h2 = (int)(20*st->balls[i].vy); st->y_vels[i] = st->balls[i].vy; if (h1<0) { h1=-h1; y1=y1-h1; } if (h2<0) { h2=-h2; y2=y2-h2; } XDrawRectangle(dpy,window,st->erase_gc,x,y1+(w+2)/2,w,h1); XDrawRectangle(dpy,window,st->draw_gc,x,y2+(w+2)/2,w,h2); } /* Draws meters of the total speed of the balls */ static void draw_meter_speed (Display *dpy, Window window, struct state *st, int i) { XWindowAttributes xgwa; int y,x1,x2,h,w1,w2; XGetWindowAttributes (dpy, window, &xgwa); if(xgwa.height < BAR_SIZE*st->npoints) { y = i*(xgwa.height/st->npoints); h = (xgwa.height/st->npoints) - 2; } else{ y = BAR_SIZE*i; h = BAR_SIZE - 2; } x1 = 0; x2 = x1; if(y < 1) y = i; if(h < 1) h = 1; w1 = (int)(5*st->speeds[i]); w2 = (int)(5*(st->balls[i].vy*st->balls[i].vy+st->balls[i].vx*st->balls[i].vx)); st->speeds[i] = st->balls[i].vy*st->balls[i].vy+st->balls[i].vx*st->balls[i].vx; XDrawRectangle(dpy,window,st->erase_gc,x1,y,w1,h); XDrawRectangle(dpy,window,st->draw_gc, x2,y,w2,h); } /* Returns the position of the mouse relative to the root window. */ static void query_mouse (Display *dpy, Window win, int *x, int *y) { Window root1, child1; int mouse_x, mouse_y, root_x, root_y; unsigned int mask; if (XQueryPointer (dpy, win, &root1, &child1, &root_x, &root_y, &mouse_x, &mouse_y, &mask)) { *x = mouse_x; *y = mouse_y; } else { *x = -9999; *y = -9999; } } static unsigned long attraction_draw (Display *dpy, Window window, void *closure) { struct state *st = (struct state *) closure; int last_point_stack_fp = st->point_stack_fp; int i, radius = st->global_size/2; st->total_ticks++; if(st->global_size == 0) radius = (MAX_SIZE / 3); if(st->graph_mode != graph_none) { if(st->graph_mode == graph_both) { for(i = 0; i < st->npoints; i++) { draw_meter_x(dpy, window, st, i, 0); draw_meter_y(dpy, window, st, i, 0); } } else if(st->graph_mode == graph_x) { for(i = 0; i < st->npoints; i++) { draw_meter_x(dpy, window, st, i, 1); } } else if(st->graph_mode == graph_y) { for(i = 0; i < st->npoints; i++) { draw_meter_y(dpy, window, st, i, 1); } } else if(st->graph_mode == graph_speed) { for(i = 0; i < st->npoints; i++) { draw_meter_speed(dpy, window, st, i); } } } /* compute the force of attraction/repulsion among all balls */ for (i = 0; i < st->npoints; i++) compute_force (st, i, &st->balls[i].dx, &st->balls[i].dy); /* move the balls according to the forces now in effect */ for (i = 0; i < st->npoints; i++) { double old_x = st->balls[i].x; double old_y = st->balls[i].y; double new_x, new_y; int size = st->balls[i].size; st->balls[i].vx += st->balls[i].dx; st->balls[i].vy += st->balls[i].dy; /* "don't let them get too fast: impose a terminal velocity (actually, make the medium have friction)" Well, what this first step really does is give the medium a viscosity of .9 for balls going over the speed limit. Anyway, this is now optional */ if (fabs(st->balls[i].vx) > 10 && st->maxspeed_p) { st->balls[i].vx *= 0.9; st->balls[i].dx = 0; } if (st->viscosity != 1) { st->balls[i].vx *= st->viscosity; } if (fabs(st->balls[i].vy) > 10 && st->maxspeed_p) { st->balls[i].vy *= 0.9; st->balls[i].dy = 0; } if (st->viscosity != 1) { st->balls[i].vy *= st->viscosity; } st->balls[i].x += st->balls[i].vx; st->balls[i].y += st->balls[i].vy; /* bounce off the walls if desired note: a ball is actually its upper left corner */ if(st->walls_p) { if(st->cbounce_p) /* with correct bouncing */ { /* so long as it's out of range, keep bouncing */ /* limit the maximum number to bounce to 4.*/ int bounce_allowed = 4; while( bounce_allowed && ( (st->balls[i].x >= (st->xlim - st->balls[i].size)) || (st->balls[i].y >= (st->ylim - st->balls[i].size)) || (st->balls[i].x <= 0) || (st->balls[i].y <= 0) ) ) { bounce_allowed--; if (st->balls[i].x >= (st->xlim - st->balls[i].size)) { st->balls[i].x = (2*(st->xlim - st->balls[i].size) - st->balls[i].x); st->balls[i].vx = -st->balls[i].vx; } if (st->balls[i].y >= (st->ylim - st->balls[i].size)) { st->balls[i].y = (2*(st->ylim - st->balls[i].size) - st->balls[i].y); st->balls[i].vy = -st->balls[i].vy; } if (st->balls[i].x <= 0) { st->balls[i].x = -st->balls[i].x; st->balls[i].vx = -st->balls[i].vx; } if (st->balls[i].y <= 0) { st->balls[i].y = -st->balls[i].y; st->balls[i].vy = -st->balls[i].vy; } } } else /* with old bouncing */ { if (st->balls[i].x >= (st->xlim - st->balls[i].size)) { st->balls[i].x = (st->xlim - st->balls[i].size - 1); if (st->balls[i].vx > 0) /* why is this check here? */ st->balls[i].vx = -st->balls[i].vx; } if (st->balls[i].y >= (st->ylim - st->balls[i].size)) { st->balls[i].y = (st->ylim - st->balls[i].size - 1); if (st->balls[i].vy > 0) st->balls[i].vy = -st->balls[i].vy; } if (st->balls[i].x <= 0) { st->balls[i].x = 0; if (st->balls[i].vx < 0) st->balls[i].vx = -st->balls[i].vx; } if (st->balls[i].y <= 0) { st->balls[i].y = 0; if (st->balls[i].vy < 0) st->balls[i].vy = -st->balls[i].vy; } } } if (i == st->mouse_ball) { int x, y; query_mouse (dpy, window, &x, &y); if (st->mode == ball_mode) { x -= st->balls[i].size / 2; y -= st->balls[i].size / 2; } st->balls[i].x = x; st->balls[i].y = y; } new_x = st->balls[i].x; new_y = st->balls[i].y; if (!mono_p) { if (st->mode == ball_mode) { if (st->glow_p) { /* make color saturation be related to particle acceleration. */ double limit = 0.5; double s, fraction; double vx = st->balls [i].dx; double vy = st->balls [i].dy; if (vx < 0) vx = -vx; if (vy < 0) vy = -vy; fraction = vx + vy; if (fraction > limit) fraction = limit; s = 1 - (fraction / limit); st->balls[i].pixel_index = (st->ncolors * s); } XSetForeground (dpy, st->draw_gc, (i == st->mouse_ball ? st->mouse_pixel : st->colors[st->balls[i].pixel_index].pixel)); } } if (st->mode == ball_mode) { XFillArc (dpy, window, st->erase_gc, (int) old_x, (int) old_y, size, size, 0, 360*64); XFillArc (dpy, window, st->draw_gc, (int) new_x, (int) new_y, size, size, 0, 360*64); } else { st->point_stack [st->point_stack_fp].x = new_x; st->point_stack [st->point_stack_fp].y = new_y; st->point_stack_fp++; } } /* draw the lines or polygons after computing all points */ if (st->mode != ball_mode) { st->point_stack [st->point_stack_fp].x = st->balls [0].x; /* close the polygon */ st->point_stack [st->point_stack_fp].y = st->balls [0].y; st->point_stack_fp++; if (st->point_stack_fp == st->point_stack_size) st->point_stack_fp = 0; else if (st->point_stack_fp > st->point_stack_size) /* better be aligned */ abort (); if (!mono_p) { if (st->color_tick++ == st->color_shift) { st->color_tick = 0; st->fg_index = (st->fg_index + 1) % st->ncolors; XSetForeground (dpy, st->draw_gc, st->colors[st->fg_index].pixel); } } } switch (st->mode) { case ball_mode: break; case line_mode: if (st->segments > 0) XDrawLines (dpy, window, st->erase_gc, st->point_stack + st->point_stack_fp, st->npoints + 1, CoordModeOrigin); XDrawLines (dpy, window, st->draw_gc, st->point_stack + last_point_stack_fp, st->npoints + 1, CoordModeOrigin); break; case polygon_mode: if (st->segments > 0) XFillPolygon (dpy, window, st->erase_gc, st->point_stack + st->point_stack_fp, st->npoints + 1, (st->npoints == 3 ? Convex : Complex), CoordModeOrigin); XFillPolygon (dpy, window, st->draw_gc, st->point_stack + last_point_stack_fp, st->npoints + 1, (st->npoints == 3 ? Convex : Complex), CoordModeOrigin); break; case tail_mode: { for (i = 0; i < st->npoints; i++) { int index = st->point_stack_fp + i; int next_index = (index + (st->npoints + 1)) % st->point_stack_size; if(st->no_erase_yet == 1) { if(st->total_ticks >= st->segments) { st->no_erase_yet = 0; XDrawLine (dpy, window, st->erase_gc, st->point_stack [index].x + radius, st->point_stack [index].y + radius, st->point_stack [next_index].x + radius, st->point_stack [next_index].y + radius); } } else { XDrawLine (dpy, window, st->erase_gc, st->point_stack [index].x + radius, st->point_stack [index].y + radius, st->point_stack [next_index].x + radius, st->point_stack [next_index].y + radius); } index = last_point_stack_fp + i; next_index = (index - (st->npoints + 1)) % st->point_stack_size; if (next_index < 0) next_index += st->point_stack_size; if (st->point_stack [next_index].x == 0 && st->point_stack [next_index].y == 0) continue; XDrawLine (dpy, window, st->draw_gc, st->point_stack [index].x + radius, st->point_stack [index].y + radius, st->point_stack [next_index].x + radius, st->point_stack [next_index].y + radius); } } break; case spline_mode: case spline_filled_mode: { if (! st->spl) st->spl = make_spline (st->npoints); if (st->segments > 0) { for (i = 0; i < st->npoints; i++) { st->spl->control_x [i] = st->point_stack [st->point_stack_fp + i].x; st->spl->control_y [i] = st->point_stack [st->point_stack_fp + i].y; } compute_closed_spline (st->spl); if (st->mode == spline_filled_mode) XFillPolygon (dpy, window, st->erase_gc, st->spl->points, st->spl->n_points, (st->spl->n_points == 3 ? Convex : Complex), CoordModeOrigin); else XDrawLines (dpy, window, st->erase_gc, st->spl->points, st->spl->n_points, CoordModeOrigin); } for (i = 0; i < st->npoints; i++) { st->spl->control_x [i] = st->point_stack [last_point_stack_fp + i].x; st->spl->control_y [i] = st->point_stack [last_point_stack_fp + i].y; } compute_closed_spline (st->spl); if (st->mode == spline_filled_mode) XFillPolygon (dpy, window, st->draw_gc, st->spl->points, st->spl->n_points, (st->spl->n_points == 3 ? Convex : Complex), CoordModeOrigin); else XDrawLines (dpy, window, st->draw_gc, st->spl->points, st->spl->n_points, CoordModeOrigin); } break; default: abort (); } return st->delay; } static void attraction_reshape (Display *dpy, Window window, void *closure, unsigned int w, unsigned int h) { struct state *st = (struct state *) closure; st->xlim = w; st->ylim = h; } static Bool attraction_event (Display *dpy, Window window, void *closure, XEvent *event) { struct state *st = (struct state *) closure; if (event->xany.type == ButtonPress) { int i; if (st->mouse_ball != -1) /* second down-click? drop the ball. */ { st->mouse_ball = -1; return True; } else { /* When trying to pick up a ball, first look for a click directly inside the ball; but if we don't find it, expand the radius outward until we find something nearby. */ int x = event->xbutton.x; int y = event->xbutton.y; float max = 10 * (st->global_size ? st->global_size : MAX_SIZE); float step = max / 100; float r2; for (r2 = step; r2 < max; r2 += step) { for (i = 0; i < st->npoints; i++) { float d = ((st->balls[i].x - x) * (st->balls[i].x - x) + (st->balls[i].y - y) * (st->balls[i].y - y)); float r = st->balls[i].size; if (r2 > r) r = r2; if (d < r*r) { st->mouse_ball = i; return True; } } } } return True; } else if (event->xany.type == ButtonRelease) /* drop the ball */ { st->mouse_ball = -1; return True; } return False; } static void attraction_free (Display *dpy, Window window, void *closure) { struct state *st = (struct state *) closure; if (st->balls) free (st->balls); if (st->x_vels) free (st->x_vels); if (st->y_vels) free (st->y_vels); if (st->speeds) free (st->speeds); if (st->point_stack) free (st->point_stack); if (st->colors) free (st->colors); if (st->spl) free_spline (st->spl); free (st); } static const char *attraction_defaults [] = { ".background: black", ".foreground: white", "*fpsSolid: true", "*mode: balls", "*graphmode: none", "*points: 0", "*size: 0", "*colors: 200", "*threshold: 200", "*delay: 10000", "*glow: false", "*walls: true", "*maxspeed: true", "*cbounce: true", "*viscosity: 1.0", "*orbit: false", "*colorShift: 3", "*segments: 500", "*vMult: 0.9", "*radius: 0", "*vx: 0", "*vy: 0", "*mouseForeground: white", #ifdef HAVE_MOBILE "*ignoreRotation: True", #endif 0 }; static XrmOptionDescRec attraction_options [] = { { "-mode", ".mode", XrmoptionSepArg, 0 }, { "-graphmode", ".graphmode", XrmoptionSepArg, 0 }, { "-colors", ".colors", XrmoptionSepArg, 0 }, { "-points", ".points", XrmoptionSepArg, 0 }, { "-color-shift", ".colorShift", XrmoptionSepArg, 0 }, { "-threshold", ".threshold", XrmoptionSepArg, 0 }, { "-segments", ".segments", XrmoptionSepArg, 0 }, { "-delay", ".delay", XrmoptionSepArg, 0 }, { "-size", ".size", XrmoptionSepArg, 0 }, { "-radius", ".radius", XrmoptionSepArg, 0 }, { "-vx", ".vx", XrmoptionSepArg, 0 }, { "-vy", ".vy", XrmoptionSepArg, 0 }, { "-vmult", ".vMult", XrmoptionSepArg, 0 }, { "-viscosity", ".viscosity", XrmoptionSepArg, 0 }, { "-glow", ".glow", XrmoptionNoArg, "true" }, { "-noglow", ".glow", XrmoptionNoArg, "false" }, { "-orbit", ".orbit", XrmoptionNoArg, "true" }, { "-nowalls", ".walls", XrmoptionNoArg, "false" }, { "-walls", ".walls", XrmoptionNoArg, "true" }, { "-nomaxspeed", ".maxspeed", XrmoptionNoArg, "false" }, { "-maxspeed", ".maxspeed", XrmoptionNoArg, "true" }, { "-correct-bounce", ".cbounce", XrmoptionNoArg, "false" }, { "-fast-bounce", ".cbounce", XrmoptionNoArg, "true" }, { 0, 0, 0, 0 } }; XSCREENSAVER_MODULE ("Attraction", attraction) xscreensaver-5.36/hacks/blitspin.c000644 000767 000024 00000033242 12717745764 017247 0ustar00jwzstaff000000 000000 /* xscreensaver, Copyright (c) 1992-2014 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. */ /* Rotate a bitmap using using bitblts. The bitmap must be square, and must be a power of 2 in size. This was translated from SmallTalk code which appeared in the August 1981 issue of Byte magazine. The input bitmap may be non-square, it is padded and centered with the background color. Another way would be to subdivide the bitmap into square components and rotate them independently (and preferably in parallel), but I don't think that would be as interesting looking. It's too bad almost nothing uses blitter hardware these days, or this might actually win. */ #include "screenhack.h" #include "xpm-pixmap.h" #include #include #include "images/som.xbm" /* Implementing this using XCopyArea doesn't work with color images on OSX. This means that the Cocoa implementation of XCopyArea in jwxyz.m is broken with the GXor, GXand, and/or the GXxor GC operations. This probably means that (e.g.) "kCGBlendModeDarken" is not close enough to being "GXand" to use for that. (It works with monochrome images, just not color ones). So, on OSX, we implement the blitter by hand. It is correct, but orders of magnitude slower. */ #ifndef HAVE_JWXYZ # define USE_XCOPYAREA #endif struct state { Display *dpy; Window window; XWindowAttributes xgwa; int width, height, size; Bool scale_up; Pixmap self, temp, mask; # ifdef USE_XCOPYAREA GC gc_set, gc_clear, gc_copy, gc_and, gc_or, gc_xor; # endif GC gc; int delay, delay2; int duration; Pixmap bitmap; unsigned int fg, bg; int qwad; /* fuckin' C, man... who needs namespaces? */ int first_time; int last_w, last_h; time_t start_time; Bool loaded_p; Bool load_ext_p; async_load_state *img_loader; }; static void display (struct state *, Pixmap); static void blitspin_init_2 (struct state *); #define copy_to(from, xoff, yoff, to, op) \ bitblt (st, st->from, st->to, op, 0, 0, \ st->size-(xoff), st->size-(yoff), (xoff), (yoff)) #define copy_from(to, xoff, yoff, from, op) \ bitblt (st, st->from, st->to, op, (xoff), (yoff), \ st->size-(xoff), st->size-(yoff), 0, 0) #ifdef USE_XCOPYAREA # define bitblt(st, from, to, op, src_x, src_y, w, h, dst_x, dst_y) \ XCopyArea((st)->dpy, (from), (to), (st)->gc_##op, \ (src_x), (src_y), (w), (h), (dst_x), (dst_y)) #else /* !USE_XCOPYAREA */ # define bitblt(st, from, to, op, src_x, src_y, w, h, dst_x, dst_y) \ do_bitblt((st)->dpy, (from), (to), st->gc, GX##op, \ (src_x), (src_y), (w), (h), (dst_x), (dst_y)) static void do_bitblt (Display *dpy, Drawable src, Drawable dst, GC gc, int op, int src_x, int src_y, unsigned int width, unsigned int height, int dst_x, int dst_y) { if (op == GXclear) { XSetForeground (dpy, gc, 0xFF000000); /* ARGB black for Cocoa */ XFillRectangle (dpy, dst, gc, dst_x, dst_y, width, height); } else if (op == GXset) { XSetForeground (dpy, gc, ~0L); XFillRectangle (dpy, dst, gc, dst_x, dst_y, width, height); } else if (op == GXcopy) { XCopyArea (dpy, src, dst, gc, src_x, src_y, width, height, dst_x, dst_y); } else { XImage *srci = XGetImage (dpy, src, src_x, src_y, width, height, ~0L, ZPixmap); XImage *dsti = XGetImage (dpy, dst, dst_x, dst_y, width, height, ~0L, ZPixmap); unsigned long *out = (unsigned long *) dsti->data; unsigned long *in = (unsigned long *) srci->data; unsigned long *end = (in + (height * srci->bytes_per_line / sizeof(unsigned long))); switch (op) { case GXor: while (in < end) { *out++ |= *in++; } break; case GXand: while (in < end) { *out++ &= *in++; } break; case GXxor: while (in < end) { *out++ ^= *in++; } break; default: abort(); } XPutImage (dpy, dst, gc, dsti, 0, 0, dst_x, dst_y, width, height); XDestroyImage (srci); XDestroyImage (dsti); } } #endif /* !USE_XCOPYAREA */ static unsigned long blitspin_draw (Display *dpy, Window window, void *closure) { struct state *st = (struct state *) closure; int this_delay = st->delay; int qwad; if (st->img_loader) /* still loading */ { st->img_loader = load_image_async_simple (st->img_loader, 0, 0, 0, 0, 0); if (!st->img_loader) { /* just finished */ st->first_time = 0; st->loaded_p = True; st->qwad = -1; st->start_time = time ((time_t *) 0); blitspin_init_2 (st); } /* Rotate nothing if the very first image is not yet loaded */ if (! st->loaded_p) return this_delay; } if (!st->img_loader && st->load_ext_p && st->start_time + st->duration < time ((time_t *) 0)) { /* Start a new image loading, but keep rotating the old image until the new one arrives. */ st->img_loader = load_image_async_simple (0, st->xgwa.screen, st->window, st->bitmap, 0, 0); } if (st->qwad == -1) { bitblt(st, st->mask, st->mask, clear,0,0, st->size, st->size, 0,0); bitblt(st, st->mask, st->mask, set, 0,0, st->size>>1, st->size>>1, 0,0); st->qwad = st->size>>1; } if (st->first_time) { st->first_time = 0; display (st, st->self); return st->delay2; } /* for (st->qwad = st->size>>1; st->qwad > 0; st->qwad>>=1) */ qwad = st->qwad; copy_to (mask, 0, 0, temp, copy); /* 1 */ copy_to (mask, 0, qwad, temp, or); /* 2 */ copy_to (self, 0, 0, temp, and); /* 3 */ copy_to (temp, 0, 0, self, xor); /* 4 */ copy_from (temp, qwad, 0, self, xor); /* 5 */ copy_from (self, qwad, 0, self, or); /* 6 */ copy_to (temp, qwad, 0, self, xor); /* 7 */ copy_to (self, 0, 0, temp, copy); /* 8 */ copy_from (temp, qwad, qwad, self, xor); /* 9 */ copy_to (mask, 0, 0, temp, and); /* A */ copy_to (temp, 0, 0, self, xor); /* B */ copy_to (temp, qwad, qwad, self, xor); /* C */ copy_from (mask, qwad>>1, qwad>>1, mask, and); /* D */ copy_to (mask, qwad, 0, mask, or); /* E */ copy_to (mask, 0, qwad, mask, or); /* F */ display (st, st->self); st->qwad >>= 1; if (st->qwad == 0) /* done with this round */ { st->qwad = -1; this_delay = st->delay2; } return this_delay; } static int to_pow2(struct state *st, int n, Bool up) { int powers_of_2[] = { 1, 2, 4, 8, 16, 32, 64, 128, 256, 512, 1024, 2048, 4096, 8192, 16384, 32768, 65536 }; int i = 0; if (n > 65536) st->size = 65536; while (n >= powers_of_2[i]) i++; if (n == powers_of_2[i-1]) return n; else return powers_of_2[up ? i : i-1]; } static void * blitspin_init (Display *d_arg, Window w_arg) { struct state *st = (struct state *) calloc (1, sizeof(*st)); char *bitmap_name; st->dpy = d_arg; st->window = w_arg; XGetWindowAttributes (st->dpy, st->window, &st->xgwa); st->fg = get_pixel_resource (st->dpy, st->xgwa.colormap, "foreground", "Foreground"); st->bg = get_pixel_resource (st->dpy, st->xgwa.colormap, "background", "Background"); st->delay = get_integer_resource (st->dpy, "delay", "Integer"); st->delay2 = get_integer_resource (st->dpy, "delay2", "Integer"); st->duration = get_integer_resource (st->dpy, "duration", "Seconds"); if (st->delay < 0) st->delay = 0; if (st->delay2 < 0) st->delay2 = 0; if (st->duration < 1) st->duration = 1; st->start_time = time ((time_t *) 0); bitmap_name = get_string_resource (st->dpy, "bitmap", "Bitmap"); if (! bitmap_name || !*bitmap_name) bitmap_name = "(default)"; if (!strcasecmp (bitmap_name, "(default)") || !strcasecmp (bitmap_name, "default")) bitmap_name = "(screen)"; if (!strcasecmp (bitmap_name, "(builtin)") || !strcasecmp (bitmap_name, "builtin")) { st->width = som_width; st->height = som_height; st->bitmap = XCreatePixmapFromBitmapData (st->dpy, st->window, (char *) som_bits, st->width, st->height, st->fg, st->bg, st->xgwa.depth); st->scale_up = True; /* definitely. */ st->loaded_p = True; blitspin_init_2 (st); } else if (!strcasecmp (bitmap_name, "(screen)") || !strcasecmp (bitmap_name, "screen")) { st->bitmap = XCreatePixmap (st->dpy, st->window, st->xgwa.width, st->xgwa.height, st->xgwa.depth); st->width = st->xgwa.width; st->height = st->xgwa.height; st->scale_up = True; /* maybe? */ st->load_ext_p = True; st->img_loader = load_image_async_simple (0, st->xgwa.screen, st->window, st->bitmap, 0, 0); } else { st->bitmap = xpm_file_to_pixmap (st->dpy, st->window, bitmap_name, &st->width, &st->height, 0); st->scale_up = True; /* probably? */ blitspin_init_2 (st); } return st; } static void blitspin_init_2 (struct state *st) { XGCValues gcv; /* make it square */ st->size = (st->width < st->height) ? st->height : st->width; st->size = to_pow2(st, st->size, st->scale_up); /* round up to power of 2 */ { /* don't exceed screen size */ int s = XScreenNumberOfScreen(st->xgwa.screen); int w = to_pow2(st, XDisplayWidth(st->dpy, s), False); int h = to_pow2(st, XDisplayHeight(st->dpy, s), False); if (st->size > w) st->size = w; if (st->size > h) st->size = h; } if (st->self) XFreePixmap (st->dpy, st->self); if (st->temp) XFreePixmap (st->dpy, st->temp); if (st->mask) XFreePixmap (st->dpy, st->mask); st->self = XCreatePixmap (st->dpy, st->window, st->size, st->size, st->xgwa.depth); st->temp = XCreatePixmap (st->dpy, st->window, st->size, st->size, st->xgwa.depth); st->mask = XCreatePixmap (st->dpy, st->window, st->size, st->size, st->xgwa.depth); gcv.foreground = (st->xgwa.depth == 1 ? 1 : (~0)); # ifdef USE_XCOPYAREA # define make_gc(op) \ gcv.function=GX##op; \ if (st->gc_##op) XFreeGC (st->dpy, st->gc_##op); \ st->gc_##op = XCreateGC (st->dpy, st->self, GCFunction|GCForeground, &gcv) make_gc(set); make_gc(clear); make_gc(copy); make_gc(and); make_gc(or); make_gc(xor); # endif /* USE_XCOPYAREA */ gcv.foreground = gcv.background = st->bg; if (st->gc) XFreeGC (st->dpy, st->gc); st->gc = XCreateGC (st->dpy, st->window, GCForeground|GCBackground, &gcv); /* Clear st->self to the background color (not to 0, which 'clear' does.) */ XFillRectangle (st->dpy, st->self, st->gc, 0, 0, st->size, st->size); XSetForeground (st->dpy, st->gc, st->fg); XCopyArea (st->dpy, st->bitmap, st->self, st->gc, 0, 0, st->width, st->height, (st->size - st->width) >> 1, (st->size - st->height) >> 1); st->qwad = -1; st->first_time = 1; } static void display (struct state *st, Pixmap pixmap) { XGetWindowAttributes (st->dpy, st->window, &st->xgwa); if (st->xgwa.width != st->last_w || st->xgwa.height != st->last_h) { XClearWindow (st->dpy, st->window); st->last_w = st->xgwa.width; st->last_h = st->xgwa.height; } if (st->xgwa.depth != 1) XCopyArea (st->dpy, pixmap, st->window, st->gc, 0, 0, st->size, st->size, (st->xgwa.width - st->size) >> 1, (st->xgwa.height - st->size) >> 1); else XCopyPlane (st->dpy, pixmap, st->window, st->gc, 0, 0, st->size, st->size, (st->xgwa.width - st->size) >> 1, (st->xgwa.height - st->size) >> 1, 1); /* XDrawRectangle (st->dpy, st->window, st->gc, ((st->xgwa.width - st->size) >> 1) - 1, ((st->xgwa.height - st->size) >> 1) - 1, st->size+2, st->size+2); */ } static void blitspin_reshape (Display *dpy, Window window, void *closure, unsigned int w, unsigned int h) { } static Bool blitspin_event (Display *dpy, Window window, void *closure, XEvent *event) { struct state *st = (struct state *) closure; if (screenhack_event_helper (dpy, window, event)) { st->start_time = 0; return True; } return False; } static void blitspin_free (Display *dpy, Window window, void *closure) { } static const char *blitspin_defaults [] = { ".background: black", ".foreground: white", ".fpsSolid: true", "*delay: 500000", "*delay2: 500000", "*duration: 120", "*bitmap: (default)", "*geometry: 1080x1080", #ifdef HAVE_MOBILE "*ignoreRotation: True", #endif 0 }; static XrmOptionDescRec blitspin_options [] = { { "-delay", ".delay", XrmoptionSepArg, 0 }, { "-delay2", ".delay2", XrmoptionSepArg, 0 }, { "-duration", ".duration", XrmoptionSepArg, 0 }, { "-bitmap", ".bitmap", XrmoptionSepArg, 0 }, { 0, 0, 0, 0 } }; XSCREENSAVER_MODULE ("BlitSpin", blitspin) xscreensaver-5.36/hacks/bouboule.c000644 000767 000024 00000063135 12717745776 017246 0ustar00jwzstaff000000 000000 /* -*- Mode: C; tab-width: 4 -*- Ported from xlockmore 4.03a12 to be a standalone program and thus usable with xscreensaver by Jamie Zawinski on 15-May-97. Original copyright notice from xlock.c: * Copyright (c) 1988-91 by Patrick J. Naughton. * * Permission to use, copy, modify, and distribute this software and its * documentation for any purpose and without fee is hereby granted, * provided that the above copyright notice appear in all copies and that * both that copyright notice and this permission notice appear in * supporting documentation. * * This file is provided AS IS with no warranties of any kind. The author * shall have no liability with respect to the infringement of copyrights, * trade secrets or any patents by this file or any part thereof. In no * event will the author be liable for any lost revenue or profits or * other special, indirect and consequential damages. */ #if 0 static const char sccsid[] = "@(#)bouboule.c 4.00 97/01/01 xlockmore"; #endif /*- * bouboule.c (bouboule mode for xlockmore) * * Sort of starfield for xlockmore. I found that making a starfield for * a 3D engine and thought it could be a nice lock mode. For a real starfield, * I only scale the sort of sphere you see to the whole sky and clip the stars * to the camera screen. * * Code Copyright 1996 by Jeremie PETIT (jeremie_petit@geocities.com) * * Use: batchcount is the number of stars. * cycles is the maximum size for a star * * 15-May-97: jwz@jwz.org: turned into a standalone program. * 04-Sep-96: Added 3d support (Henrik Theiling, theiling@coli-uni-sb.de) * 20-Feb-96: Added tests so that already malloced objects are not * malloced twice, thanks to the report from * 01-Feb-96: Patched by Jouk Jansen for VMS * Patched by for TrueColor displays * 30-Jan-96: Wrote all that I wanted to. * * DONE: Build up a XArc list and Draw everything once with XFillArcs * That idea came from looking at swarm code. * DONE: Add an old arcs list for erasing. * DONE: Make center of starfield SinVariable. * DONE: Add some random in the sinvary() function. * DONE: check time for erasing the stars with the two methods and use the * better one. Note that sometimes the time difference between * beginning of erasing and its end is negative! I check this, and * do not use this result when it occurs. If all values are negative, * the erasing will continue being done in the currently tested mode. * DONE: Allow stars size customization. * DONE: Make sizey be no less than half sizex or no bigger than twice sizex. * * IDEA: A simple check can be performed to know which stars are "behind" * and which are "in front". So is possible to very simply change * the drawing mode for these two sorts of stars. BUT: this would lead * to a rewrite of the XArc list code because drawing should be done * in two steps: "behind" stars then "in front" stars. Also, what could * be the difference between the rendering of these two types of stars? * IDEA: Calculate the distance of each star to the "viewer" and render the * star accordingly to this distance. Same remarks as for previous * ideas can be pointed out. This would even lead to reget the old stars * drawing code, that has been replaced by the XFillArcs. On another * hand, this would allow particular stars (own color, shape...), as * far as they would be individually drawn. One should be careful to * draw them according to their distance, that is not drawing a far * star after a close one. */ #ifdef STANDALONE # define DEFAULTS "*count: 100 \n" \ "*size: 15 \n" \ "*delay: 20000 \n" \ "*ncolors: 64 \n" \ "*use3d: True \n" \ "*delta3d: 1.5 \n" \ "*right3d: red \n" \ "*left3d: blue \n" \ "*both3d: magenta \n" \ "*none3d: black \n" \ "*fpsSolid: true \n" \ "*ignoreRotation: True \n" # define SMOOTH_COLORS # define bouboule_handle_event 0 # include "xlockmore.h" /* from the xscreensaver distribution */ #else /* !STANDALONE */ # include "xlock.h" /* from the xlockmore distribution */ # define ENTRYPOINT /**/ #endif /* !STANDALONE */ ENTRYPOINT ModeSpecOpt bouboule_opts = { 0, NULL, 0, NULL, NULL }; #define USEOLDXARCS 1 /* If 1, we use old xarcs list for erasing. * else we just roughly erase the window. * This mainly depends on the number of stars, * because when they are many, it is faster to * erase the whole window than to erase each star */ #if HAVE_GETTIMEOFDAY #define ADAPT_ERASE 1 /* If 1, then we try ADAPT_CHECKS black XFillArcs, * and after, ADAPT_CHECKS XFillRectangle. * We check which method seems better, knowing that * XFillArcs is generally visually better. So we * consider that XFillArcs is still better if its time * is about XFillRectangle * ADAPT_ARC_PREFERED * We need gettimeofday * for this... Does it exist on other systems ? Do we * have to use another function for others ? * This value overrides USEOLDXARCS. */ #ifdef USE_XVMSUTILS # if 0 # include "../xvmsutils/unix_time.h" # else # include # endif #endif #include #define ADAPT_CHECKS 50 #define ADAPT_ARC_PREFERED 150 /* Maybe the value that is the most important * for adapting to a system */ #endif #define dtor(x) (((x) * M_PI) / 180.0) /* Degrees to radians */ #define MINSTARS 1 #define MINSIZE 1 /* jwz: I think slower color changes look better */ #define COLOR_CHANGES 50 /* How often we change colors (1 = always) * This value should be tuned accordingly to * the number of stars */ #define MAX_SIZEX_SIZEY 2. /* This controls whether the sphere can be very * very large and have a small height (or the * opposite) or no. */ #define THETACANRAND 80 /* percentage of changes for the speed of * change of the 3 theta values */ #define SIZECANRAND 80 /* percentage of changes for the speed of * change of the sizex and sizey values */ #define POSCANRAND 80 /* percentage of changes for the speed of * change of the x and y values */ /* Note that these XXXCANRAND values can be 0, that is no rand acceleration * variation. */ #define VARRANDALPHA (NRAND((int) (M_PI * 1000.0))/1000.0) #define VARRANDSTEP (M_PI/(NRAND(100)+100.0)) #define VARRANDMIN (-70.0) #define VARRANDMAX 70.0 #define MINZVAL 100 /* stars can come this close */ #define SCREENZ 2000 /* this is where the screen is */ #define MAXZVAL 10000 /* stars can go this far away */ #define GETZDIFF(z) ((MI_DELTA3D(mi))*20.0*(1.0-(SCREENZ)/(z+1000))) #define MAXDIFF MAX(-GETZDIFF(MINZVAL),GETZDIFF(MAXZVAL)) /* These values are the variation parameters of the acceleration variation * of the SinVariables that are randomized. */ /******************************/ typedef struct SinVariableStruct /******************************/ { double alpha; /* * Alpha is the current state of the sinvariable * alpha should be initialized to a value between * 0.0 and 2 * M_PI */ double step; /* * Speed of evolution of alpha. It should be a reasonable * fraction of 2 * M_PI. This value directly influence * the variable speed of variation. */ double minimum; /* Minimum value for the variable */ double maximum; /* Maximum value for the variable */ double value; /* Current value */ int mayrand; /* Flag for knowing whether some randomization can be * applied to the variable */ struct SinVariableStruct *varrand; /* Evolving Variable: the variation of * alpha */ } SinVariable; /***********************/ typedef struct StarStruct /***********************/ { double x, y, z; /* Position of the star */ short size; /* Try to guess */ } Star; /****************************/ typedef struct StarFieldStruct /****************************/ { short width, height; /* width and height of the starfield window */ short max_star_size; /* Maximum radius for stars. stars radius will * vary from 1 to MAX_STAR_SIZE */ SinVariable x; /* Evolving variables: */ SinVariable y; /* Center of the field on the screen */ SinVariable z; SinVariable sizex; /* Evolving variable: half width of the field */ SinVariable sizey; /* Evolving variable: half height of the field */ SinVariable thetax; /* Evolving Variables: */ SinVariable thetay; /* rotation angles of the starfield */ SinVariable thetaz; /* around x, y and z local axis */ Star *star; /* List of stars */ XArc *xarc; /* Current List of arcs */ XArc *xarcleft; /* additional list for the left arcs */ #if ((USEOLDXARCS == 1) || (ADAPT_ERASE == 1)) XArc *oldxarc; /* Old list of arcs */ XArc *oldxarcleft; #endif unsigned long color; /* Current color of the starfield */ int colorp; /* Pointer to color of the starfield */ int NbStars; /* Number of stars */ short colorchange; /* Counter for the color change */ #if (ADAPT_ERASE == 1) short hasbeenchecked; long rect_time; long xarc_time; #endif } StarField; static StarField *starfield = NULL; /*********/ static void sinvary(SinVariable * v) /*********/ { v->value = v->minimum + (v->maximum - v->minimum) * (sin(v->alpha) + 1.0) / 2.0; if (v->mayrand == 0) v->alpha += v->step; else { int vaval = NRAND(100); if (vaval <= v->mayrand) sinvary(v->varrand); v->alpha += (100.0 + (v->varrand->value)) * v->step / 100.0; } if (v->alpha > 2 * M_PI) v->alpha -= 2 * M_PI; } /*************************************************/ static void sininit(SinVariable * v, double alpha, double step, double minimum, double maximum, short int mayrand) { v->alpha = alpha; v->step = step; v->minimum = minimum; v->maximum = maximum; v->mayrand = mayrand; if (mayrand != 0) { if (v->varrand == NULL) v->varrand = (SinVariable *) calloc(1, sizeof (SinVariable)); sininit(v->varrand, VARRANDALPHA, VARRANDSTEP, VARRANDMIN, VARRANDMAX, 0); sinvary(v->varrand); } /* We calculate the values at least once for initialization */ sinvary(v); } static void sinfree(SinVariable * point) { SinVariable *temp, *next; next = point->varrand; while (next) { temp = next; next = temp->varrand; (void) free((void *) temp); } } /***************/ ENTRYPOINT void init_bouboule(ModeInfo * mi) /***************/ /*- * The stars init part was first inspirated from the net3d game starfield * code. But net3d starfield is not really 3d starfield, and I needed real 3d, * so only remains the net3d starfield initialization main idea, that is * the stars distribution on a sphere (theta and omega computing) */ { StarField *sp; int size = MI_SIZE(mi); int i; double theta, omega; if (starfield == NULL) { if ((starfield = (StarField *) calloc(MI_NUM_SCREENS(mi), sizeof (StarField))) == NULL) return; } sp = &starfield[MI_SCREEN(mi)]; sp->width = MI_WIN_WIDTH(mi); sp->height = MI_WIN_HEIGHT(mi); /* use the right `black' pixel values: */ if (MI_WIN_IS_INSTALL(mi) && MI_WIN_IS_USE3D(mi)) { XSetForeground(MI_DISPLAY(mi), MI_GC(mi), MI_NONE_COLOR(mi)); XFillRectangle(MI_DISPLAY(mi), MI_WINDOW(mi), MI_GC(mi), 0, 0, sp->width, sp->height); } else XClearWindow(MI_DISPLAY(mi), MI_WINDOW(mi)); if (size < -MINSIZE) sp->max_star_size = NRAND(-size - MINSIZE + 1) + MINSIZE; else if (size < MINSIZE) sp->max_star_size = MINSIZE; else sp->max_star_size = size; sp->NbStars = MI_BATCHCOUNT(mi); if (sp->NbStars < -MINSTARS) { if (sp->star) { (void) free((void *) sp->star); sp->star = NULL; } if (sp->xarc) { (void) free((void *) sp->xarc); sp->xarc = NULL; } if (sp->xarcleft) { (void) free((void *) sp->xarcleft); sp->xarcleft = NULL; } #if ((USEOLDXARCS == 1) || (ADAPT_ERASE == 1)) if (sp->oldxarc) { (void) free((void *) sp->oldxarc); sp->oldxarc = NULL; } if (sp->oldxarcleft) { (void) free((void *) sp->oldxarcleft); sp->oldxarcleft = NULL; } #endif sp->NbStars = NRAND(-sp->NbStars - MINSTARS + 1) + MINSTARS; } else if (sp->NbStars < MINSTARS) sp->NbStars = MINSTARS; /* We get memory for lists of objects */ if (sp->star == NULL) sp->star = (Star *) malloc(sp->NbStars * sizeof (Star)); if (sp->xarc == NULL) sp->xarc = (XArc *) malloc(sp->NbStars * sizeof (XArc)); if (MI_WIN_IS_USE3D(mi) && sp->xarcleft == NULL) sp->xarcleft = (XArc *) malloc(sp->NbStars * sizeof (XArc)); #if ((USEOLDXARCS == 1) || (ADAPT_ERASE == 1)) if (sp->oldxarc == NULL) sp->oldxarc = (XArc *) malloc(sp->NbStars * sizeof (XArc)); if (MI_WIN_IS_USE3D(mi) && sp->oldxarcleft == NULL) sp->oldxarcleft = (XArc *) malloc(sp->NbStars * sizeof (XArc)); #endif { /* We initialize evolving variables */ sininit(&sp->x, NRAND(3142) / 1000.0, M_PI / (NRAND(100) + 100.0), ((double) sp->width) / 4.0, 3.0 * ((double) sp->width) / 4.0, POSCANRAND); sininit(&sp->y, NRAND(3142) / 1000.0, M_PI / (NRAND(100) + 100.0), ((double) sp->height) / 4.0, 3.0 * ((double) sp->height) / 4.0, POSCANRAND); /* for z, we have to ensure that the bouboule does not get behind */ /* the eyes of the viewer. His/Her eyes are at 0. Because the */ /* bouboule uses the x-radius for the z-radius, too, we have to */ /* use the x-values. */ sininit(&sp->z, NRAND(3142) / 1000.0, M_PI / (NRAND(100) + 100.0), ((double) sp->width / 2.0 + MINZVAL), ((double) sp->width / 2.0 + MAXZVAL), POSCANRAND); sininit(&sp->sizex, NRAND(3142) / 1000.0, M_PI / (NRAND(100) + 100.0), MIN(((double) sp->width) - sp->x.value, sp->x.value) / 5.0, MIN(((double) sp->width) - sp->x.value, sp->x.value), SIZECANRAND); sininit(&sp->sizey, NRAND(3142) / 1000.0, M_PI / (NRAND(100) + 100.0), MAX(sp->sizex.value / MAX_SIZEX_SIZEY, sp->sizey.maximum / 5.0), MIN(sp->sizex.value * MAX_SIZEX_SIZEY, MIN(((double) sp->height) - sp->y.value, sp->y.value)), SIZECANRAND); sininit(&sp->thetax, NRAND(3142) / 1000.0, M_PI / (NRAND(200) + 200.0), -M_PI, M_PI, THETACANRAND); sininit(&sp->thetay, NRAND(3142) / 1000.0, M_PI / (NRAND(200) + 200.0), -M_PI, M_PI, THETACANRAND); sininit(&sp->thetaz, NRAND(3142) / 1000.0, M_PI / (NRAND(400) + 400.0), -M_PI, M_PI, THETACANRAND); } for (i = 0; i < sp->NbStars; i++) { Star *star; XArc *arc = NULL, *arcleft = NULL; #if ((USEOLDXARCS == 1) || (ADAPT_ERASE == 1)) XArc *oarc = NULL, *oarcleft = NULL; #endif star = &(sp->star[i]); arc = &(sp->xarc[i]); if (MI_WIN_IS_USE3D(mi)) arcleft = &(sp->xarcleft[i]); #if ((USEOLDXARCS == 1) || (ADAPT_ERASE == 1)) oarc = &(sp->oldxarc[i]); if (MI_WIN_IS_USE3D(mi)) oarcleft = &(sp->oldxarcleft[i]); #endif /* Elevation and bearing of the star */ theta = dtor((NRAND(1800)) / 10.0 - 90.0); omega = dtor((NRAND(3600)) / 10.0 - 180.0); /* Stars coordinates in a 3D space */ star->x = cos(theta) * sin(omega); star->y = sin(omega) * sin(theta); star->z = cos(omega); /* We set the stars size */ star->size = NRAND(2 * sp->max_star_size); if (star->size < sp->max_star_size) star->size = 0; else star->size -= sp->max_star_size; /* We set default values for the XArc lists elements */ arc->x = arc->y = 0; if (MI_WIN_IS_USE3D(mi)) { arcleft->x = arcleft->y = 0; } #if ((USEOLDXARCS == 1) || (ADAPT_ERASE == 1)) oarc->x = oarc->y = 0; if (MI_WIN_IS_USE3D(mi)) { oarcleft->x = oarcleft->y = 0; } #endif arc->width = 2 + star->size; arc->height = 2 + star->size; if (MI_WIN_IS_USE3D(mi)) { arcleft->width = 2 + star->size; arcleft->height = 2 + star->size; } #if ((USEOLDXARCS == 1) || (ADAPT_ERASE == 1)) oarc->width = 2 + star->size; oarc->height = 2 + star->size; if (MI_WIN_IS_USE3D(mi)) { oarcleft->width = 2 + star->size; oarcleft->height = 2 + star->size; } #endif arc->angle1 = 0; arc->angle2 = 360 * 64; if (MI_WIN_IS_USE3D(mi)) { arcleft->angle1 = 0; arcleft->angle2 = 360 * 64; } #if ((USEOLDXARCS == 1) || (ADAPT_ERASE == 1)) oarc->angle1 = 0; oarc->angle2 = 360 * 64; /* ie. we draw whole disks: * from 0 to 360 degrees */ if (MI_WIN_IS_USE3D(mi)) { oarcleft->angle1 = 0; oarcleft->angle2 = 360 * 64; } #endif } if (MI_NPIXELS(mi) > 2) sp->colorp = NRAND(MI_NPIXELS(mi)); /* We set up the starfield color */ if (!MI_WIN_IS_USE3D(mi) && MI_NPIXELS(mi) > 2) sp->color = MI_PIXEL(mi, sp->colorp); else sp->color = MI_WIN_WHITE_PIXEL(mi); #if (ADAPT_ERASE == 1) /* We initialize the adaptation code for screen erasing */ sp->hasbeenchecked = ADAPT_CHECKS * 2; sp->rect_time = 0; sp->xarc_time = 0; #endif } /****************/ ENTRYPOINT void draw_bouboule(ModeInfo * mi) /****************/ { Display *display = MI_DISPLAY(mi); Window window = MI_WINDOW(mi); GC gc = MI_GC(mi); StarField *sp = &starfield[MI_SCREEN(mi)]; int i, diff = 0; double CX, CY, CZ, SX, SY, SZ; Star *star; XArc *arc = NULL, *arcleft = NULL; #ifdef HAVE_JWXYZ /* Don't second-guess Quartz's double-buffering */ XClearWindow(MI_DISPLAY(mi), MI_WINDOW(mi)); #endif #if (ADAPT_ERASE == 1) struct timeval tv1; struct timeval tv2; #endif #if ((USEOLDXARCS == 0) || (ADAPT_ERASE == 1)) short x_1, y_1, x_2, y_2; /* bounding rectangle around the old starfield, * for erasing with the smallest rectangle * instead of filling the whole screen */ int maxdiff = 0; /* maximal distance between left and right */ /* star in 3d mode, otherwise 0 */ #endif #if ((USEOLDXARCS == 0) || (ADAPT_ERASE == 1)) if (MI_WIN_IS_USE3D(mi)) { maxdiff = (int) MAXDIFF; } x_1 = (int) sp->x.value - (int) sp->sizex.value - sp->max_star_size - maxdiff; y_1 = (int) sp->y.value - (int) sp->sizey.value - sp->max_star_size; x_2 = 2 * ((int) sp->sizex.value + sp->max_star_size + maxdiff); y_2 = 2 * ((int) sp->sizey.value + sp->max_star_size); #endif /* We make variables vary. */ sinvary(&sp->thetax); sinvary(&sp->thetay); sinvary(&sp->thetaz); sinvary(&sp->x); sinvary(&sp->y); if (MI_WIN_IS_USE3D(mi)) sinvary(&sp->z); /* A little trick to prevent the bouboule from being * bigger than the screen */ sp->sizex.maximum = MIN(((double) sp->width) - sp->x.value, sp->x.value); sp->sizex.minimum = sp->sizex.maximum / 3.0; /* Another trick to make the ball not too flat */ sp->sizey.minimum = MAX(sp->sizex.value / MAX_SIZEX_SIZEY, sp->sizey.maximum / 3.0); sp->sizey.maximum = MIN(sp->sizex.value * MAX_SIZEX_SIZEY, MIN(((double) sp->height) - sp->y.value, sp->y.value)); sinvary(&sp->sizex); sinvary(&sp->sizey); /* * We calculate the rotation matrix values. We just make the * rotation on the fly, without using a matrix. * Star positions are recorded as unit vectors pointing in various * directions. We just make them all rotate. */ CX = cos(sp->thetax.value); SX = sin(sp->thetax.value); CY = cos(sp->thetay.value); SY = sin(sp->thetay.value); CZ = cos(sp->thetaz.value); SZ = sin(sp->thetaz.value); for (i = 0; i < sp->NbStars; i++) { star = &(sp->star[i]); arc = &(sp->xarc[i]); if (MI_WIN_IS_USE3D(mi)) { arcleft = &(sp->xarcleft[i]); /* to help the eyes, the starfield is always as wide as */ /* deep, so .sizex.value can be used. */ diff = (int) GETZDIFF(sp->sizex.value * ((SY * CX) * star->x + (SX) * star->y + (CX * CY) * star->z) + sp->z.value); } arc->x = (short) ((sp->sizex.value * ((CY * CZ - SX * SY * SZ) * star->x + (-CX * SZ) * star->y + (SY * CZ + SZ * SX * CY) * star->z) + sp->x.value)); arc->y = (short) ((sp->sizey.value * ((CY * SZ + SX * SY * CZ) * star->x + (CX * CZ) * star->y + (SY * SZ - SX * CY * CZ) * star->z) + sp->y.value)); if (MI_WIN_IS_USE3D(mi)) { arcleft->x = (short) ((sp->sizex.value * ((CY * CZ - SX * SY * SZ) * star->x + (-CX * SZ) * star->y + (SY * CZ + SZ * SX * CY) * star->z) + sp->x.value)); arcleft->y = (short) ((sp->sizey.value * ((CY * SZ + SX * SY * CZ) * star->x + (CX * CZ) * star->y + (SY * SZ - SX * CY * CZ) * star->z) + sp->y.value)); arc->x += diff; arcleft->x -= diff; } if (star->size != 0) { arc->x -= star->size; arc->y -= star->size; if (MI_WIN_IS_USE3D(mi)) { arcleft->x -= star->size; arcleft->y -= star->size; } } } /* First, we erase the previous starfield */ if (MI_WIN_IS_INSTALL(mi) && MI_WIN_IS_USE3D(mi)) XSetForeground(display, gc, MI_NONE_COLOR(mi)); else XSetForeground(display, gc, MI_WIN_BLACK_PIXEL(mi)); #if (ADAPT_ERASE == 1) if (sp->hasbeenchecked == 0) { /* We just calculate which method is the faster and eventually free * the oldxarc list */ if (sp->xarc_time > ADAPT_ARC_PREFERED * sp->rect_time) { sp->hasbeenchecked = -2; /* XFillRectangle mode */ (void) free((void *) sp->oldxarc); sp->oldxarc = NULL; if (MI_WIN_IS_USE3D(mi)) { (void) free((void *) sp->oldxarcleft); sp->oldxarcleft = NULL; } } else { sp->hasbeenchecked = -1; /* XFillArcs mode */ } } if (sp->hasbeenchecked == -2) { /* Erasing is done with XFillRectangle */ XFillRectangle(display, window, gc, x_1, y_1, x_2, y_2); } else if (sp->hasbeenchecked == -1) { /* Erasing is done with XFillArcs */ XFillArcs(display, window, gc, sp->oldxarc, sp->NbStars); if (MI_WIN_IS_USE3D(mi)) XFillArcs(display, window, gc, sp->oldxarcleft, sp->NbStars); } else { long usec; if (sp->hasbeenchecked > ADAPT_CHECKS) { #ifdef GETTIMEOFDAY_TWO_ARGS (void) gettimeofday(&tv1, NULL); #else (void) gettimeofday(&tv1); #endif XFillRectangle(display, window, gc, x_1, y_1, x_2, y_2); #ifdef GETTIMEOFDAY_TWO_ARGS (void) gettimeofday(&tv2, NULL); #else (void) gettimeofday(&tv2); #endif usec = (tv2.tv_sec - tv1.tv_sec) * 1000000; if (usec + tv2.tv_usec - tv1.tv_usec > 0) { sp->rect_time += usec + tv2.tv_usec - tv1.tv_usec; sp->hasbeenchecked--; } } else { #ifdef GETTIMEOFDAY_TWO_ARGS (void) gettimeofday(&tv1, NULL); #else (void) gettimeofday(&tv1); #endif XFillArcs(display, window, gc, sp->oldxarc, sp->NbStars); if (MI_WIN_IS_USE3D(mi)) XFillArcs(display, window, gc, sp->oldxarcleft, sp->NbStars); #ifdef GETTIMEOFDAY_TWO_ARGS (void) gettimeofday(&tv2, NULL); #else (void) gettimeofday(&tv2); #endif usec = (tv2.tv_sec - tv1.tv_sec) * 1000000; if (usec + tv2.tv_usec - tv1.tv_usec > 0) { sp->xarc_time += usec + tv2.tv_usec - tv1.tv_usec; sp->hasbeenchecked--; } } } #else #if (USEOLDXARCS == 1) XFillArcs(display, window, gc, sp->oldxarc, sp->NbStars); if (MI_WIN_IS_USE3D(mi)) XFillArcs(display, window, gc, sp->oldxarcleft, sp->NbStars); #else XFillRectangle(display, window, gc, x_1, y_1, x_2, y_2); #endif #endif /* Then we draw the new one */ if (MI_WIN_IS_USE3D(mi)) { if (MI_WIN_IS_INSTALL(mi)) XSetFunction(display, gc, GXor); XSetForeground(display, gc, MI_RIGHT_COLOR(mi)); XFillArcs(display, window, gc, sp->xarc, sp->NbStars); XSetForeground(display, gc, MI_LEFT_COLOR(mi)); XFillArcs(display, window, gc, sp->xarcleft, sp->NbStars); if (MI_WIN_IS_INSTALL(mi)) XSetFunction(display, gc, GXcopy); } else { XSetForeground(display, gc, sp->color); XFillArcs(display, window, gc, sp->xarc, sp->NbStars); } #if ((USEOLDXARCS == 1) || (ADAPT_ERASE == 1)) #if (ADAPT_ERASE == 1) if (sp->hasbeenchecked >= -1) { arc = sp->xarc; sp->xarc = sp->oldxarc; sp->oldxarc = arc; if (MI_WIN_IS_USE3D(mi)) { arcleft = sp->xarcleft; sp->xarcleft = sp->oldxarcleft; sp->oldxarcleft = arcleft; } } #else arc = sp->xarc; sp->xarc = sp->oldxarc; sp->oldxarc = arc; if (MI_WIN_IS_USE3D(mi)) { arcleft = sp->xarcleft; sp->xarcleft = sp->oldxarcleft; sp->oldxarcleft = arcleft; } #endif #endif /* We set up the color for the next drawing */ if (!MI_WIN_IS_USE3D(mi) && MI_NPIXELS(mi) > 2 && (++sp->colorchange >= COLOR_CHANGES)) { sp->colorchange = 0; if (++sp->colorp >= MI_NPIXELS(mi)) sp->colorp = 0; sp->color = MI_PIXEL(mi, sp->colorp); } } ENTRYPOINT void release_bouboule(ModeInfo * mi) { if (starfield != NULL) { int screen; for (screen = 0; screen < MI_NUM_SCREENS(mi); screen++) { StarField *sp = &starfield[screen]; if (sp->star) (void) free((void *) sp->star); if (sp->xarc) (void) free((void *) sp->xarc); if (sp->xarcleft) (void) free((void *) sp->xarcleft); #if ((USEOLDXARCS == 1) || (ADAPT_ERASE == 1)) if (sp->oldxarc) (void) free((void *) sp->oldxarc); if (sp->oldxarcleft) (void) free((void *) sp->oldxarcleft); #endif sinfree(&(sp->x)); sinfree(&(sp->y)); sinfree(&(sp->z)); sinfree(&(sp->sizex)); sinfree(&(sp->sizey)); sinfree(&(sp->thetax)); sinfree(&(sp->thetay)); sinfree(&(sp->thetaz)); } (void) free((void *) starfield); starfield = NULL; } } 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) { /* Do nothing, it will refresh by itself */ } XSCREENSAVER_MODULE ("Bouboule", bouboule) xscreensaver-5.36/hacks/braid.c000644 000767 000024 00000034326 12701612216 016462 0ustar00jwzstaff000000 000000 /* -*- Mode: C; tab-width: 4 -*- */ /*- * braid --- random braids around a circle and then changes the color in * a rotational pattern */ #if 0 static const char sccsid[] = "@(#)braid.c 5.00 2000/11/01 xlockmore"; #endif /*- * Copyright (c) 1995 by John Neil. * * Permission to use, copy, modify, and distribute this software and its * documentation for any purpose and without fee is hereby granted, * provided that the above copyright notice appear in all copies and that * both that copyright notice and this permission notice appear in * supporting documentation. * * This file is provided AS IS with no warranties of any kind. The author * shall have no liability with respect to the infringement of copyrights, * trade secrets or any patents by this file or any part thereof. In no * event will the author be liable for any lost revenue or profits or * other special, indirect and consequential damages. * * Revision History: * 01-Nov-2000: Allocation checks * 10-May-1997: Jamie Zawinski compatible with xscreensaver * 01-Sep-1995: color knotted components differently, J. Neil. * 29-Aug-1995: Written. John Neil */ #ifdef STANDALONE # define MODE_braid # define DEFAULTS "*delay: 1000 \n" \ "*count: 15 \n" \ "*cycles: 100 \n" \ "*size: -7 \n" \ "*ncolors: 64 \n" \ "*fpsSolid: true \n" \ "*ignoreRotation: True" \ # define UNIFORM_COLORS # include "xlockmore.h" # include "erase.h" #else /* STANDALONE */ # include "xlock.h" # define ENTRYPOINT /**/ #endif /* STANDALONE */ #ifdef MODE_braid ENTRYPOINT ModeSpecOpt braid_opts = {0, NULL, 0, NULL, NULL}; #ifdef USE_MODULES ModStruct braid_description = {"braid", "init_braid", "draw_braid", "release_braid", "refresh_braid", "init_braid", (char *) NULL, &braid_opts, 1000, 15, 100, 1, 64, 1.0, "", "Shows random braids and knots", 0, NULL}; #endif #if defined( COLORROUND ) && defined( COLORCOMP ) #undef COLORROUND #undef COLORCOMP #endif #if !defined( COLORROUND ) && !defined( COLORCOMP ) #if 0 /* to color in a circular pattern use COLORROUND */ #define COLORROUND #else /* to color by component use COLORCOMP */ #define COLORCOMP #endif #endif #define MAXLENGTH 50 /* the maximum length of a braid word */ #define MINLENGTH 8 /* the minimum length of a braid word */ #define MAXSTRANDS 15 /* the maximum number of strands in the braid */ #define MINSTRANDS 3 /* the minimum number of strands in the braid */ #define SPINRATE 12.0 /* the rate at which the colors spin */ #define INTRAND(min,max) (NRAND((max+1)-(min))+(min)) #define FLOATRAND(min,max) ((min)+((double) LRAND()/((double) MAXRAND))*((max)-(min))) typedef struct { int linewidth; int braidword[MAXLENGTH]; int components[MAXSTRANDS]; int startcomp[MAXLENGTH][MAXSTRANDS]; int nstrands; int braidlength; float startcolor; int center_x; int center_y; float min_radius; float max_radius; float top, bottom, left, right; int age; int color_direction; #ifdef STANDALONE eraser_state *eraser; #endif } braidtype; static braidtype *braids = (braidtype *) NULL; static int applyword(braidtype * braid, int string, int position) { int i, c; c = string; for (i = position; i < braid->braidlength; i++) { if (c == ABS(braid->braidword[i])) c--; else if (c == ABS(braid->braidword[i]) - 1) c++; } for (i = 0; i < position; i++) { if (c == ABS(braid->braidword[i])) c--; else if (c == ABS(braid->braidword[i]) - 1) c++; } return c; } #if 0 static int applywordto(braidtype * braid, int string, int position) { int i, c; c = string; for (i = 0; i < position; i++) { if (c == ABS(braid->braidword[i])) { c--; } else if (c == ABS(braid->braidword[i]) - 1) { c++; } } return c; } #endif static int applywordbackto(braidtype * braid, int string, int position) { int i, c; c = string; for (i = position - 1; i >= 0; i--) { if (c == ABS(braid->braidword[i])) { c--; } else if (c == ABS(braid->braidword[i]) - 1) { c++; } } return c; } ENTRYPOINT void init_braid(ModeInfo * mi) { braidtype *braid; int used[MAXSTRANDS]; int i, count, comp, c; float min_length; if (braids == NULL) { if ((braids = (braidtype *) calloc(MI_NUM_SCREENS(mi), sizeof (braidtype))) == NULL) return; } braid = &braids[MI_SCREEN(mi)]; braid->center_x = MI_WIDTH(mi) / 2; braid->center_y = MI_HEIGHT(mi) / 2; braid->age = 0; /* jwz: go in the other direction sometimes. */ braid->color_direction = ((LRAND() & 1) ? 1 : -1); #ifndef STANDALONE MI_CLEARWINDOW(mi); #endif min_length = (braid->center_x > braid->center_y) ? braid->center_y : braid->center_x; braid->min_radius = min_length * 0.30; braid->max_radius = min_length * 0.90; if (MI_COUNT(mi) < MINSTRANDS) braid->nstrands = MINSTRANDS; else braid->nstrands = INTRAND(MINSTRANDS, MAX(MIN(MIN(MAXSTRANDS, MI_COUNT(mi)), (int) ((braid->max_radius - braid->min_radius) / 5.0)), MINSTRANDS)); braid->braidlength = INTRAND(MINLENGTH, MIN(MAXLENGTH -1, braid->nstrands * 6)); for (i = 0; i < braid->braidlength; i++) { braid->braidword[i] = INTRAND(1, braid->nstrands - 1) * (INTRAND(1, 2) * 2 - 3); if (i > 0) while (braid->braidword[i] == -braid->braidword[i - 1]) braid->braidword[i] = INTRAND(1, braid->nstrands - 1) * (INTRAND(1, 2) * 2 - 3); } while (braid->braidword[0] == -braid->braidword[braid->braidlength - 1]) braid->braidword[braid->braidlength - 1] = INTRAND(1, braid->nstrands - 1) * (INTRAND(1, 2) * 2 - 3); do { (void) memset((char *) used, 0, sizeof (used)); count = 0; for (i = 0; i < braid->braidlength; i++) used[ABS(braid->braidword[i])]++; for (i = 0; i < braid->nstrands; i++) count += (used[i] > 0) ? 1 : 0; if (count < braid->nstrands - 1) { braid->braidword[braid->braidlength] = INTRAND(1, braid->nstrands - 1) * (INTRAND(1, 2) * 2 - 3); while (braid->braidword[braid->braidlength] == -braid->braidword[braid->braidlength - 1] && braid->braidword[0] == -braid->braidword[braid->braidlength]) braid->braidword[braid->braidlength] = INTRAND(1, braid->nstrands - 1) * (INTRAND(1, 2) * 2 - 3); braid->braidlength++; } } while (count < braid->nstrands - 1 && braid->braidlength < MAXLENGTH); braid->startcolor = (MI_NPIXELS(mi) > 2) ? (float) NRAND(MI_NPIXELS(mi)) : 0.0; /* XSetLineAttributes (display, MI_GC(mi), 2, LineSolid, CapRound, JoinRound); */ (void) memset((char *) braid->components, 0, sizeof (braid->components)); c = 1; comp = 0; braid->components[0] = 1; do { i = comp; do { i = applyword(braid, i, 0); braid->components[i] = braid->components[comp]; } while (i != comp); count = 0; for (i = 0; i < braid->nstrands; i++) if (braid->components[i] == 0) count++; if (count > 0) { for (comp = 0; braid->components[comp] != 0; comp++); braid->components[comp] = ++c; } } while (count > 0); braid->linewidth = MI_SIZE(mi); if (braid->linewidth < 0) braid->linewidth = NRAND(-braid->linewidth) + 1; if (braid->linewidth * braid->linewidth * 8 > MIN(MI_WIDTH(mi), MI_HEIGHT(mi))) braid->linewidth = MIN(1, (int) sqrt((double) MIN(MI_WIDTH(mi), MI_HEIGHT(mi)) / 8)); for (i = 0; i < braid->nstrands; i++) if (!(braid->components[i] & 1)) braid->components[i] *= -1; } ENTRYPOINT void draw_braid(ModeInfo * mi) { Display *display = MI_DISPLAY(mi); Window window = MI_WINDOW(mi); int num_points = 500; float t_inc; float theta, psi; float t, r_diff; int i, s; float x_1, y_1, x_2, y_2, r1, r2; float color, color_use = 0.0, color_inc; braidtype *braid; if (braids == NULL) return; braid = &braids[MI_SCREEN(mi)]; #ifdef STANDALONE if (braid->eraser) { braid->eraser = erase_window (MI_DISPLAY(mi), MI_WINDOW(mi), braid->eraser); return; } #endif MI_IS_DRAWN(mi) = True; XSetLineAttributes(display, MI_GC(mi), braid->linewidth, LineSolid, (braid->linewidth <= 3 ? CapButt : CapRound), JoinMiter); theta = (2.0 * M_PI) / (float) (braid->braidlength); t_inc = (2.0 * M_PI) / (float) num_points; color_inc = (float) MI_NPIXELS(mi) * braid->color_direction / (float) num_points; braid->startcolor += SPINRATE * color_inc; if (((int) braid->startcolor) >= MI_NPIXELS(mi)) braid->startcolor = 0.0; r_diff = (braid->max_radius - braid->min_radius) / (float) (braid->nstrands); color = braid->startcolor; psi = 0.0; for (i = 0; i < braid->braidlength; i++) { psi += theta; for (t = 0.0; t < theta; t += t_inc) { #ifdef COLORROUND color += color_inc; if (((int) color) >= MI_NPIXELS(mi)) color = 0.0; color_use = color; #endif for (s = 0; s < braid->nstrands; s++) { if (ABS(braid->braidword[i]) == s) continue; if (ABS(braid->braidword[i]) - 1 == s) { /* crosSINFg */ #ifdef COLORCOMP if (MI_NPIXELS(mi) > 2) { color_use = color + SPINRATE * braid->components[applywordbackto(braid, s, i)] + (psi + t) / 2.0 / M_PI * (float) MI_NPIXELS(mi); while (((int) color_use) >= MI_NPIXELS(mi)) color_use -= (float) MI_NPIXELS(mi); while (((int) color_use) < 0) color_use += (float) MI_NPIXELS(mi); } #endif #ifdef COLORROUND if (MI_NPIXELS(mi) > 2) { color_use += SPINRATE * color_inc; while (((int) color_use) >= MI_NPIXELS(mi)) color_use -= (float) MI_NPIXELS(mi); } #endif r1 = braid->min_radius + r_diff * (float) (s); r2 = braid->min_radius + r_diff * (float) (s + 1); if (braid->braidword[i] > 0 || (FABSF(t - theta / 2.0) > theta / 7.0)) { x_1 = ((0.5 * (1.0 + SINF(t / theta * M_PI - M_PI_2)) * r2 + 0.5 * (1.0 + SINF((theta - t) / theta * M_PI - M_PI_2)) * r1)) * COSF(t + psi) + braid->center_x; y_1 = ((0.5 * (1.0 + SINF(t / theta * M_PI - M_PI_2)) * r2 + 0.5 * (1.0 + SINF((theta - t) / theta * M_PI - M_PI_2)) * r1)) * SINF(t + psi) + braid->center_y; x_2 = ((0.5 * (1.0 + SINF((t + t_inc) / theta * M_PI - M_PI_2)) * r2 + 0.5 * (1.0 + SINF((theta - t - t_inc) / theta * M_PI - M_PI_2)) * r1)) * COSF(t + t_inc + psi) + braid->center_x; y_2 = ((0.5 * (1.0 + SINF((t + t_inc) / theta * M_PI - M_PI_2)) * r2 + 0.5 * (1.0 + SINF((theta - t - t_inc) / theta * M_PI - M_PI_2)) * r1)) * SINF(t + t_inc + psi) + braid->center_y; if (MI_NPIXELS(mi) > 2) XSetForeground(display, MI_GC(mi), MI_PIXEL(mi, (int) color_use)); else XSetForeground(display, MI_GC(mi), MI_WHITE_PIXEL(mi)); XDrawLine(display, window, MI_GC(mi), (int) (x_1), (int) (y_1), (int) (x_2), (int) (y_2)); } #ifdef COLORCOMP if (MI_NPIXELS(mi) > 2) { color_use = color + SPINRATE * braid->components[applywordbackto(braid, s + 1, i)] + (psi + t) / 2.0 / M_PI * (float) MI_NPIXELS(mi); while (((int) color_use) >= MI_NPIXELS(mi)) color_use -= (float) MI_NPIXELS(mi); while (((int) color_use) < 0) color_use += (float) MI_NPIXELS(mi); } #endif if (braid->braidword[i] < 0 || (FABSF(t - theta / 2.0) > theta / 7.0)) { x_1 = ((0.5 * (1.0 + SINF(t / theta * M_PI - M_PI_2)) * r1 + 0.5 * (1.0 + SINF((theta - t) / theta * M_PI - M_PI_2)) * r2)) * COSF(t + psi) + braid->center_x; y_1 = ((0.5 * (1.0 + SINF(t / theta * M_PI - M_PI_2)) * r1 + 0.5 * (1.0 + SINF((theta - t) / theta * M_PI - M_PI_2)) * r2)) * SINF(t + psi) + braid->center_y; x_2 = ((0.5 * (1.0 + SINF((t + t_inc) / theta * M_PI - M_PI_2)) * r1 + 0.5 * (1.0 + SINF((theta - t - t_inc) / theta * M_PI - M_PI_2)) * r2)) * COSF(t + t_inc + psi) + braid->center_x; y_2 = ((0.5 * (1.0 + SINF((t + t_inc) / theta * M_PI - M_PI_2)) * r1 + 0.5 * (1.0 + SINF((theta - t - t_inc) / theta * M_PI - M_PI_2)) * r2)) * SINF(t + t_inc + psi) + braid->center_y; if (MI_NPIXELS(mi) > 2) XSetForeground(display, MI_GC(mi), MI_PIXEL(mi, (int) color_use)); else XSetForeground(display, MI_GC(mi), MI_WHITE_PIXEL(mi)); XDrawLine(display, window, MI_GC(mi), (int) (x_1), (int) (y_1), (int) (x_2), (int) (y_2)); } } else { /* no crosSINFg */ #ifdef COLORCOMP if (MI_NPIXELS(mi) > 2) { color_use = color + SPINRATE * braid->components[applywordbackto(braid, s, i)] + (psi + t) / 2.0 / M_PI * (float) MI_NPIXELS(mi); while (((int) color_use) >= MI_NPIXELS(mi)) color_use -= (float) MI_NPIXELS(mi); while (((int) color_use) < 0) color_use += (float) MI_NPIXELS(mi); } #endif #ifdef COLORROUND if (MI_NPIXELS(mi) > 2) { color_use += SPINRATE * color_inc; while (((int) color_use) >= MI_NPIXELS(mi)) color_use -= (float) MI_NPIXELS(mi); } #endif r1 = braid->min_radius + r_diff * (float) (s); x_1 = r1 * COSF(t + psi) + braid->center_x; y_1 = r1 * SINF(t + psi) + braid->center_y; x_2 = r1 * COSF(t + t_inc + psi) + braid->center_x; y_2 = r1 * SINF(t + t_inc + psi) + braid->center_y; if (MI_NPIXELS(mi) > 2) XSetForeground(display, MI_GC(mi), MI_PIXEL(mi, (int) color_use)); else XSetForeground(display, MI_GC(mi), MI_WHITE_PIXEL(mi)); XDrawLine(display, window, MI_GC(mi), (int) (x_1), (int) (y_1), (int) (x_2), (int) (y_2)); } } } } XSetLineAttributes(display, MI_GC(mi), 1, LineSolid, CapNotLast, JoinRound); if (++braid->age > MI_CYCLES(mi)) { #ifdef STANDALONE braid->eraser = erase_window (MI_DISPLAY(mi), MI_WINDOW(mi), braid->eraser); #endif init_braid(mi); } } ENTRYPOINT void reshape_braid(ModeInfo * mi, int width, int height) { XClearWindow (MI_DISPLAY (mi), MI_WINDOW(mi)); init_braid (mi); } ENTRYPOINT Bool braid_handle_event (ModeInfo *mi, XEvent *event) { if (screenhack_event_helper (MI_DISPLAY(mi), MI_WINDOW(mi), event)) { reshape_braid (mi, MI_WIDTH(mi), MI_HEIGHT(mi)); return True; } return False; } ENTRYPOINT void release_braid(ModeInfo * mi) { if (braids != NULL) { (void) free((void *) braids); braids = (braidtype *) NULL; } } ENTRYPOINT void refresh_braid(ModeInfo * mi) { MI_CLEARWINDOW(mi); } XSCREENSAVER_MODULE ("Braid", braid) #endif /* MODE_braid */ xscreensaver-5.36/hacks/bubbles.c000644 000767 000024 00000107777 12701612216 017032 0ustar00jwzstaff000000 000000 /* bubbles.c - frying pan / soft drink in a glass simulation */ /*$Id: bubbles.c,v 1.30 2008/07/31 19:27:48 jwz Exp $*/ /* * Copyright (C) 1995-1996 James Macnicol * * 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. */ /* * I got my original inspiration for this by looking at the bottom of a * frying pan while something was cooking and watching the little bubbles * coming off the bottom of the pan as the oil was boiling joining together * to form bigger bubbles and finally to *pop* and disappear. I had some * time on my hands so I wrote this little xscreensaver module to imitate * it. Now that it's done it reminds me more of the bubbles you get in * a glass of fizzy soft drink..... * * The problem seemed to be that the position/size etc. of all the bubbles * on the screen had to be remembered and searched through to find when * bubbles hit each other and combined. To do this more efficiently, the * window/screen is divided up into a square mesh of side length mesh_length * and separate lists of bubbles contained in each cell of the mesh are * kept. Only the cells in the immediate vicinity of the bubble in question * are searched. This should make things more efficient although the whole * thing seems to use up too much CPU, but then I'm using an ancient PC so * perhaps it's not surprising . * (Six months after I wrote the above I now have a Pentium with PCI graphics * and things are _much_ nicer.) * * Author: James Macnicol * Internet E-mail : j-macnicol@adfa.edu.au */ #ifdef HAVE_CONFIG_H # include "config.h" #endif #undef DEBUG /* doesn't compile */ #include #include #ifndef VMS # include #else /* VMS */ # if __DECC_VER >= 50200000 # include # endif #endif /* VMS */ #ifdef HAVE_UNISTD_H # include #endif #include "screenhack.h" #include "yarandom.h" #include "bubbles.h" #include "xpm-pixmap.h" #if defined(HAVE_GDK_PIXBUF) || defined(HAVE_XPM) # define FANCY_BUBBLES #endif /* * Public variables */ static const char *bubbles_defaults [] = { ".background: black", ".foreground: white", "*fpsSolid: true", "*simple: false", "*broken: false", "*delay: 10000", "*quiet: false", "*mode: float", "*trails: false", "*3D: false", 0 }; static XrmOptionDescRec bubbles_options [] = { { "-simple", ".simple", XrmoptionNoArg, "true" }, #ifdef FANCY_BUBBLES { "-broken", ".broken", XrmoptionNoArg, "true" }, #endif { "-quiet", ".quiet", XrmoptionNoArg, "true" }, { "-3D", ".3D", XrmoptionNoArg, "true" }, { "-delay", ".delay", XrmoptionSepArg, 0 }, { "-mode", ".mode", XrmoptionSepArg, 0 }, { "-drop", ".mode", XrmoptionNoArg, "drop" }, { "-rise", ".mode", XrmoptionNoArg, "rise" }, { "-trails", ".trails", XrmoptionNoArg, "true" }, { 0, 0, 0, 0 } }; /* * Private variables */ struct state { Display *dpy; Window window; Bubble **mesh; int mesh_length; int mesh_width; int mesh_height; int mesh_cells; int **adjacent_list; int screen_width; int screen_height; int screen_depth; unsigned int default_fg_pixel, default_bg_pixel; int bubble_min_radius; /* For simple mode only */ int bubble_max_radius; long *bubble_areas; int *bubble_droppages; GC draw_gc, erase_gc; #ifdef FANCY_BUBBLES int num_bubble_pixmaps; Bubble_Step **step_pixmaps; #endif Bool simple; Bool broken; Bool quiet; Bool threed; Bool drop; Bool trails; int drop_dir; int delay; }; static int drop_bubble( struct state *st, Bubble *bb ); /* * To prevent forward references, some stuff is up here */ static long calc_bubble_area(struct state *st, int r) /* Calculate the area of a bubble of radius r */ { #ifdef DEBUG printf("%d %g\n", r, 10.0 * PI * (double)r * (double)r * (double)r); #endif /* DEBUG */ if (st->threed) return (long)(10.0 * PI * (double)r * (double)r * (double)r); else return (long)(10.0 * PI * (double)r * (double)r); } static void * xmalloc(size_t size) /* Safe malloc */ { void *ret; if ((ret = malloc(size)) == NULL) { fprintf(stderr, "%s: out of memory\n", progname); exit(1); } return ret; } #ifdef DEBUG static void die_bad_bubble(Bubble *bb) /* This is for use with GDB */ { fprintf(stderr, "Bad bubble detected at 0x%x!\n", (int)bb); exit(1); } #endif static int null_bubble(Bubble *bb) /* Returns true if the pointer passed is NULL. If not then this checks to see if the bubble is valid (i.e. the (x,y) position is valid and the magic number is set correctly. This only a sanity check for debugging and is turned off if DEBUG isn't set. */ { if (bb == (Bubble *)NULL) return 1; #ifdef DEBUG if ((bb->cell_index < 0) || (bb->cell_index > st->mesh_cells)) { fprintf(stderr, "cell_index = %d\n", bb->cell_index); die_bad_bubble(bb); } if (bb->magic != BUBBLE_MAGIC) { fprintf(stderr, "Magic = %d\n", bb->magic); die_bad_bubble(bb); } if (st->simple) { if ((bb->x < 0) || (bb->x > st->screen_width) || (bb->y < 0) || (bb->y > st->screen_height) || (bb->radius < st->bubble_min_radius) || (bb->radius > st->bubble_max_radius)) { fprintf(stderr, "radius = %d, x = %d, y = %d, magic = %d, cell index = %d\n", bb->radius, bb->x, bb->y, bb->magic, bb->cell_index); die_bad_bubble(bb); } #ifdef FANCY_BUBBLES } else { if ((bb->x < 0) || (bb->x > st->screen_width) || (bb->y < 0) || (bb->y > st->screen_height) || (bb->radius < st->step_pixmaps[0]->radius) || (bb->radius > st->step_pixmaps[st->num_bubble_pixmaps-1]->radius)) { fprintf(stderr, "radius = %d, x = %d, y = %d, magic = %d, cell index = %d\n", bb->radius, bb->x, bb->y, bb->magic, bb->cell_index); die_bad_bubble(bb); } #endif } #endif /* DEBUG */ return 0; } #ifdef DEBUG static void print_bubble_list(Bubble *bb) /* Print list of where all the bubbles are. For debugging purposes only. */ { if (! null_bubble(bb)) { printf(" (%d, %d) %d\n", bb->x, bb->y, bb->radius); print_bubble_list(bb->next); } } #endif /* DEBUG */ static void add_bubble_to_list(Bubble **list, Bubble *bb) /* Take a pointer to a list of bubbles and stick bb at the head of the list. */ { Bubble *head = *list; if (null_bubble(head)) { bb->prev = (Bubble *)NULL; bb->next = (Bubble *)NULL; } else { bb->next = head; bb->prev = (Bubble *)NULL; head->prev = bb; } *list = bb; } /* * Mesh stuff */ static void init_mesh (struct state *st) /* Setup the mesh of bubbles */ { int i; st->mesh = (Bubble **)xmalloc(st->mesh_cells * sizeof(Bubble *)); for (i = 0; i < st->mesh_cells; i++) st->mesh[i] = (Bubble *)NULL; } static int cell_to_mesh(struct state *st, int x, int y) /* convert cell coordinates to mesh index */ { #ifdef DEBUG if ((x < 0) || (y < 0)) { fprintf(stderr, "cell_to_mesh: x = %d, y = %d\n", x, y); exit(1); } #endif return ((st->mesh_width * y) + x); } static void mesh_to_cell(struct state *st, int mi, int *cx, int *cy) /* convert mesh index into cell coordinates */ { *cx = mi % st->mesh_width; *cy = mi / st->mesh_width; } static int pixel_to_mesh(struct state *st, int x, int y) /* convert screen coordinates into mesh index */ { return cell_to_mesh(st, (x / st->mesh_length), (y / st->mesh_length)); } static int verify_mesh_index(struct state *st, int x, int y) /* check to see if (x,y) is in the mesh */ { if ((x < 0) || (y < 0) || (x >= st->mesh_width) || (y >= st->mesh_height)) return (-1); return (cell_to_mesh(st, x, y)); } #ifdef DEBUG static void print_adjacents(int *adj) /* Print a list of the cells calculated above. For debugging only. */ { int i; printf("("); for (i = 0; i < 8; i++) printf("%d ", adj[i]); printf(")\n"); } #endif /* DEBUG */ static void add_to_mesh(struct state *st, Bubble *bb) /* Add the given bubble to the mesh by sticking it on the front of the list. bb is already allocated so no need to malloc() anything, just adjust pointers. */ { #ifdef DEBUG if (null_bubble(bb)) { fprintf(stderr, "Bad bubble passed to add_to_mesh()!\n"); exit(1); } #endif /* DEBUG */ add_bubble_to_list(&st->mesh[bb->cell_index], bb); } #ifdef DEBUG static void print_mesh (struct state *st) /* Print the contents of the mesh */ { int i; for (i = 0; i < st->mesh_cells; i++) { if (! null_bubble(st->mesh[i])) { printf("Mesh cell %d\n", i); print_bubble_list(st->mesh[i]); } } } static void valid_mesh (struct state *st) /* Check to see if the mesh is Okay. For debugging only. */ { int i; Bubble *b; for (i = 0; i < st->mesh_cells; i++) { b = st->mesh[i]; while (! null_bubble(b)) b = b->next; } } static int total_bubbles (struct state *st) /* Count how many bubbles there are in total. For debugging only. */ { int rv = 0; int i; Bubble *b; for (i = 0; i < st->mesh_cells; i++) { b = st->mesh[i]; while (! null_bubble(b)) { rv++; b = b->next; } } return rv; } #endif /* DEBUG */ static void calculate_adjacent_list (struct state *st) /* Calculate the list of cells adjacent to a particular cell for use later. */ { int i; int ix, iy; st->adjacent_list = (int **)xmalloc(st->mesh_cells * sizeof(int *)); for (i = 0; i < st->mesh_cells; i++) { st->adjacent_list[i] = (int *)xmalloc(9 * sizeof(int)); mesh_to_cell(st, i, &ix, &iy); st->adjacent_list[i][0] = verify_mesh_index(st, --ix, --iy); st->adjacent_list[i][1] = verify_mesh_index(st, ++ix, iy); st->adjacent_list[i][2] = verify_mesh_index(st, ++ix, iy); st->adjacent_list[i][3] = verify_mesh_index(st, ix, ++iy); st->adjacent_list[i][4] = verify_mesh_index(st, ix, ++iy); st->adjacent_list[i][5] = verify_mesh_index(st, --ix, iy); st->adjacent_list[i][6] = verify_mesh_index(st, --ix, iy); st->adjacent_list[i][7] = verify_mesh_index(st, ix, --iy); st->adjacent_list[i][8] = i; } } static void adjust_areas (struct state *st) /* Adjust areas of bubbles so we don't get overflow in weighted_mean() */ { double maxvalue; long maxarea; long factor; int i; #ifdef FANCY_BUBBLES if (st->simple) maxarea = st->bubble_areas[st->bubble_max_radius+1]; else maxarea = st->step_pixmaps[st->num_bubble_pixmaps]->area; #else /* !FANCY_BUBBLES */ maxarea = st->bubble_areas[st->bubble_max_radius+1]; #endif /* !FANCY_BUBBLES */ maxvalue = (double)st->screen_width * 2.0 * (double)maxarea; factor = (long)ceil(maxvalue / (double)LONG_MAX); if (factor > 1) { /* Overflow will occur in weighted_mean(). We must divide areas each by factor so it will never do so. */ #ifdef FANCY_BUBBLES if (st->simple) { for (i = st->bubble_min_radius; i <= st->bubble_max_radius+1; i++) { st->bubble_areas[i] /= factor; if (st->bubble_areas[i] == 0) st->bubble_areas[i] = 1; } } else { for (i = 0; i <= st->num_bubble_pixmaps; i++) { #ifdef DEBUG printf("area = %ld", st->step_pixmaps[i]->area); #endif /* DEBUG */ st->step_pixmaps[i]->area /= factor; if (st->step_pixmaps[i]->area == 0) st->step_pixmaps[i]->area = 1; #ifdef DEBUG printf("-> %ld\n", st->step_pixmaps[i]->area); #endif /* DEBUG */ } } #else /* !FANCY_BUBBLES */ for (i = st->bubble_min_radius; i <= st->bubble_max_radius+1; i++) { st->bubble_areas[i] /= factor; if (st->bubble_areas[i] == 0) st->bubble_areas[i] = 1; } #endif /* !FANCY_BUBBLES */ } #ifdef DEBUG printf("maxarea = %ld\n", maxarea); printf("maxvalue = %g\n", maxvalue); printf("LONG_MAX = %ld\n", LONG_MAX); printf("factor = %ld\n", factor); #endif /* DEBUG */ } /* * Bubbles stuff */ static Bubble * new_bubble (struct state *st) /* Add a new bubble at some random position on the screen of the smallest size. */ { Bubble *rv = (Bubble *)xmalloc(sizeof(Bubble)); /* Can't use null_bubble() here since magic number hasn't been set */ if (rv == (Bubble *)NULL) { fprintf(stderr, "Ran out of memory!\n"); exit(1); } if (st->simple) { rv->radius = st->bubble_min_radius; rv->area = st->bubble_areas[st->bubble_min_radius]; #ifdef FANCY_BUBBLES } else { rv->step = 0; rv->radius = st->step_pixmaps[0]->radius; rv->area = st->step_pixmaps[0]->area; #endif /* FANCY_BUBBLES */ } rv->visible = 0; rv->magic = BUBBLE_MAGIC; rv->x = random() % st->screen_width; rv->y = random() % st->screen_height; rv->cell_index = pixel_to_mesh(st, rv->x, rv->y); return rv; } static void show_bubble(struct state *st, Bubble *bb) /* paint the bubble on the screen */ { if (null_bubble(bb)) { fprintf(stderr, "NULL bubble passed to show_bubble\n"); exit(1); } if (! bb->visible) { bb->visible = 1; if (st->simple) { XDrawArc(st->dpy, st->window, st->draw_gc, (bb->x - bb->radius), (bb->y - bb->radius), bb->radius*2, bb->radius*2, 0, 360*64); } else { #ifdef FANCY_BUBBLES XSetClipOrigin(st->dpy, st->step_pixmaps[bb->step]->draw_gc, (bb->x - bb->radius), (bb->y - bb->radius)); XCopyArea(st->dpy, st->step_pixmaps[bb->step]->ball, st->window, st->step_pixmaps[bb->step]->draw_gc, 0, 0, (bb->radius * 2), (bb->radius * 2), (bb->x - bb->radius), (bb->y - bb->radius)); #endif /* FANCY_BUBBLES */ } } } static void hide_bubble(struct state *st, Bubble *bb) /* erase the bubble */ { if (null_bubble(bb)) { fprintf(stderr, "NULL bubble passed to hide_bubble\n"); exit(1); } if (bb->visible) { bb->visible = 0; if (st->simple) { XDrawArc(st->dpy, st->window, st->erase_gc, (bb->x - bb->radius), (bb->y - bb->radius), bb->radius*2, bb->radius*2, 0, 360*64); } else { #ifdef FANCY_BUBBLES if (! st->broken) { XSetClipOrigin(st->dpy, st->step_pixmaps[bb->step]->erase_gc, (bb->x - bb->radius), (bb->y - bb->radius)); XFillRectangle(st->dpy, st->window, st->step_pixmaps[bb->step]->erase_gc, (bb->x - bb->radius), (bb->y - bb->radius), (bb->radius * 2), (bb->radius * 2)); } #endif /* FANCY_BUBBLES */ } } } static void delete_bubble_in_mesh(struct state *st, Bubble *bb, int keep_bubble) /* Delete an individual bubble, adjusting list of bubbles around it. If keep_bubble is true then the bubble isn't actually deleted. We use this to allow bubbles to change mesh cells without reallocating, (it needs this when two bubbles collide and the centre position is recalculated, and this may stray over a mesh boundary). */ { if ((!null_bubble(bb->prev)) && (!null_bubble(bb->next))) { bb->prev->next = bb->next; bb->next->prev = bb->prev; } else if ((!null_bubble(bb->prev)) && (null_bubble(bb->next))) { bb->prev->next = (Bubble *)NULL; bb->next = st->mesh[bb->cell_index]; } else if ((null_bubble(bb->prev)) && (!null_bubble(bb->next))) { bb->next->prev = (Bubble *)NULL; st->mesh[bb->cell_index] = bb->next; bb->next = st->mesh[bb->cell_index]; } else { /* Only item on list */ st->mesh[bb->cell_index] = (Bubble *)NULL; } if (! keep_bubble) free(bb); } static unsigned long ulongsqrint(int x) /* Saves ugly inline code */ { return ((unsigned long)x * (unsigned long)x); } static Bubble * get_closest_bubble(struct state *st, Bubble *bb) /* Find the closest bubble touching the this bubble, NULL if none are touching. */ { Bubble *rv = (Bubble *)NULL; Bubble *tmp; unsigned long separation2, touchdist2; int dx, dy; unsigned long closest2 = ULONG_MAX; int i; #ifdef DEBUG if (null_bubble(bb)) { fprintf(stderr, "NULL pointer 0x%x passed to get_closest_bubble()!", (int)bb); exit(1); } #endif /* DEBUG */ for (i = 0; i < 9; i++) { /* There is a bug here where bb->cell_index is negaitve.. */ #ifdef DEBUG if ((bb->cell_index < 0) || (bb->cell_index >= st->mesh_cells)) { fprintf(stderr, "bb->cell_index = %d\n", bb->cell_index); exit(1); } #endif /* DEBUG */ /* printf("%d,", bb->cell_index); */ if (st->adjacent_list[bb->cell_index][i] != -1) { tmp = st->mesh[st->adjacent_list[bb->cell_index][i]]; while (! null_bubble(tmp)) { if (tmp != bb) { dx = tmp->x - bb->x; dy = tmp->y - bb->y; separation2 = ulongsqrint(dx) + ulongsqrint(dy); /* Add extra leeway so circles _never_ overlap */ touchdist2 = ulongsqrint(tmp->radius + bb->radius + 2); if ((separation2 <= touchdist2) && (separation2 < closest2)) { rv = tmp; closest2 = separation2; } } tmp = tmp->next; } } } return rv; } #ifdef DEBUG static void ldr_barf (struct state *st) { } #endif /* DEBUG */ static long long_div_round(long num, long dem) { long divvie, moddo; #ifdef DEBUG if ((num < 0) || (dem < 0)) { fprintf(stderr, "long_div_round: %ld, %ld\n", num, dem); ldr_barf(); exit(1); } #endif /* DEBUG */ divvie = num / dem; moddo = num % dem; if (moddo > (dem / 2)) ++divvie; #ifdef DEBUG if ((divvie < 0) || (moddo < 0)) { fprintf(stderr, "long_div_round: %ld, %ld\n", divvie, moddo); ldr_barf(); exit(1); } #endif /* DEBUG */ return divvie; } static int weighted_mean(int n1, int n2, long w1, long w2) /* Mean of n1 and n2 respectively weighted by weights w1 and w2. */ { #ifdef DEBUG if ((w1 <= 0) || (w2 <= 0)) { fprintf(stderr, "Bad weights passed to weighted_mean() - (%d, %d, %ld, %ld)!\n", n1, n2, w1, w2); exit(1); } #endif /* DEBUG */ return ((int)long_div_round((long)n1 * w1 + (long)n2 * w2, w1 + w2)); } static int bubble_eat(struct state *st, Bubble *diner, Bubble *food) /* The diner eats the food. Returns true (1) if the diner still exists */ { int i; int newmi; #ifdef DEBUG if ((null_bubble(diner)) || (null_bubble(food))) { fprintf(stderr, "Bad bubbles passed to bubble_eat()!\n"); exit(1); } #endif /* DEBUG */ /* We hide the diner even in the case that it doesn't grow so that if the food overlaps its boundary it is replaced. This could probably be solved by letting bubbles eat others which are close but not quite touching. It's probably worth it, too, since we would then not have to redraw bubbles which don't change in size. */ hide_bubble(st, diner); hide_bubble(st, food); diner->x = weighted_mean(diner->x, food->x, diner->area, food->area); diner->y = weighted_mean(diner->y, food->y, diner->area, food->area); newmi = pixel_to_mesh(st, diner->x, diner->y); diner->area += food->area; delete_bubble_in_mesh(st, food, DELETE_BUBBLE); if (st->drop) { if ((st->simple) && (diner->area > st->bubble_areas[st->bubble_max_radius])) { diner->area = st->bubble_areas[st->bubble_max_radius]; } #ifdef FANCY_BUBBLES if ((! st->simple) && (diner->area > st->step_pixmaps[st->num_bubble_pixmaps]->area)) { diner->area = st->step_pixmaps[st->num_bubble_pixmaps]->area; } #endif /* FANCY_BUBBLES */ } else { if ((st->simple) && (diner->area > st->bubble_areas[st->bubble_max_radius])) { delete_bubble_in_mesh(st, diner, DELETE_BUBBLE); return 0; } #ifdef FANCY_BUBBLES if ((! st->simple) && (diner->area > st->step_pixmaps[st->num_bubble_pixmaps]->area)) { delete_bubble_in_mesh(st, diner, DELETE_BUBBLE); return 0; } #endif /* FANCY_BUBBLES */ } if (st->simple) { if (diner->area > st->bubble_areas[diner->radius + 1]) { /* Move the bubble to a new radius */ i = diner->radius; while ((i < st->bubble_max_radius - 1) && (diner->area > st->bubble_areas[i+1])) ++i; diner->radius = i; } show_bubble(st, diner); #ifdef FANCY_BUBBLES } else { if (diner->area > st->step_pixmaps[diner->step+1]->area) { i = diner->step; while ((i < st->num_bubble_pixmaps - 1) && (diner->area > st->step_pixmaps[i+1]->area)) ++i; diner->step = i; diner->radius = st->step_pixmaps[diner->step]->radius; } show_bubble(st, diner); #endif /* FANCY_BUBBLES */ } /* Now adjust locations and cells if need be */ if (newmi != diner->cell_index) { delete_bubble_in_mesh(st, diner, KEEP_BUBBLE); diner->cell_index = newmi; add_to_mesh(st, diner); } return 1; } static int merge_bubbles(struct state *st, Bubble *b1, Bubble *b2) /* These two bubbles merge into one. If the first one wins out return 1 else return 2. If there is no winner (it explodes) then return 0 */ { int b1size, b2size; b1size = b1->area; b2size = b2->area; #ifdef DEBUG if ((null_bubble(b1) || null_bubble(b2))) { fprintf(stderr, "NULL bubble passed to merge_bubbles()!\n"); exit(1); } #endif /* DEBUG */ if (b1 == b2) { hide_bubble(st, b1); delete_bubble_in_mesh(st, b1, DELETE_BUBBLE); return 0; } if (b1size > b2size) { switch (bubble_eat(st, b1, b2)) { case 0: return 0; break; case 1: return 1; break; default: break; } } else if (b1size < b2size) { switch (bubble_eat(st, b2, b1)) { case 0: return 0; break; case 1: return 2; break; default: break; } } else { if ((random() % 2) == 0) { switch (bubble_eat(st, b1, b2)) { case 0: return 0; break; case 1: return 1; break; default: break; } } else { switch (bubble_eat(st, b2, b1)) { case 0: return 0; break; case 1: return 2; break; default: break; } } } fprintf(stderr, "An error occurred in merge_bubbles()\n"); exit(1); } static void insert_new_bubble(struct state *st, Bubble *tmp) /* Calculates which bubbles are eaten when a new bubble tmp is inserted. This is called recursively in case when a bubble grows it eats others. Careful to pick out disappearing bubbles. */ { Bubble *nextbub; Bubble *touch; #ifdef DEBUG if (null_bubble(tmp)) { fprintf(stderr, "Bad bubble passed to insert_new_bubble()!\n"); exit(1); } #endif /* DEBUG */ nextbub = tmp; touch = get_closest_bubble(st, nextbub); if (null_bubble(touch)) return; while (1) { /* Merge all touching bubbles */ while (! null_bubble(touch)) { switch (merge_bubbles(st, nextbub, touch)) { case 2: /* touch ate nextbub and survived */ nextbub = touch; break; case 1: /* nextbub ate touch and survived */ break; case 0: /* somebody ate someone else but they exploded */ nextbub = (Bubble *)NULL; break; default: /* something went wrong */ fprintf(stderr, "Error occurred in insert_new_bubble()\n"); exit(1); } /* Check to see if any bubble survived. */ if (null_bubble(nextbub)) break; /* Check to see if there are any other bubbles still in the area and if we need to do this all over again for them. */ touch = get_closest_bubble(st, nextbub); } if (null_bubble(nextbub)) break; /* Shift bubble down. Break if we run off the screen. */ if (st->drop) { if (drop_bubble( st, nextbub ) == -1) break; } /* Check to see if there are any other bubbles still in the area and if we need to do this all over again for them. */ touch = get_closest_bubble(st, nextbub); if (null_bubble(touch)) { /* We also continue every so often if we're dropping and the bubble is at max size */ if (st->drop) { if (st->simple) { if ((nextbub->area >= st->bubble_areas[st->bubble_max_radius - 1]) && (random() % 2 == 0)) continue; } #ifdef FANCY_BUBBLES else { if ((nextbub->step >= st->num_bubble_pixmaps - 1) && (random() % 2 == 0)) continue; } #endif /* FANCY_BUBBLES */ } break; } } } static void leave_trail(struct state *st, Bubble *bb ) { Bubble *tmp; tmp = new_bubble(st); tmp->x = bb->x; tmp->y = bb->y - ((bb->radius + 10) * st->drop_dir); tmp->cell_index = pixel_to_mesh(st, tmp->x, tmp->y); add_to_mesh(st, tmp); insert_new_bubble(st, tmp); show_bubble( st, tmp ); } static int drop_bubble( struct state *st, Bubble *bb ) { int newmi; hide_bubble( st, bb ); if (st->simple) (bb->y) += (st->bubble_droppages[bb->radius] * st->drop_dir); #ifdef FANCY_BUBBLES else (bb->y) += (st->step_pixmaps[bb->step]->droppage * st->drop_dir); #endif /* FANCY_BUBBLES */ if ((bb->y < 0) || (bb->y > st->screen_height)) { delete_bubble_in_mesh( st, bb, DELETE_BUBBLE ); return -1; } show_bubble( st, bb ); /* Now adjust locations and cells if need be */ newmi = pixel_to_mesh(st, bb->x, bb->y); if (newmi != bb->cell_index) { delete_bubble_in_mesh(st, bb, KEEP_BUBBLE); bb->cell_index = newmi; add_to_mesh(st, bb); } if (st->trails) { if (st->simple) { if ((bb->area >= st->bubble_areas[st->bubble_max_radius - 1]) && (random() % 2 == 0)) leave_trail( st, bb ); } #ifdef FANCY_BUBBLES else { if ((bb->step >= st->num_bubble_pixmaps - 1) && (random() % 2 == 0)) leave_trail( st, bb ); } #endif /* FANCY_BUBBLES */ } return 0; } #ifdef DEBUG static int get_length_of_bubble_list(Bubble *bb) { Bubble *tmp = bb; int rv = 0; while (! null_bubble(tmp)) { rv++; tmp = tmp->next; } return rv; } #endif /* DEBUG */ /* * Pixmap stuff used regardless of whether file I/O is available. Must * still check for XPM, though! */ #ifdef FANCY_BUBBLES /* * Pixmaps without file I/O (but do have XPM) */ static void pixmap_sort(Bubble_Step **head, int numelems) /* Couldn't get qsort to work right with this so I wrote my own. This puts the numelems length array with first element at head into order of radius. */ { Bubble_Step tmp; Bubble_Step *least = 0; int minradius = INT_MAX; int i; for (i = 0; i < numelems; i++) { if (head[i]->radius < minradius) { least = head[i]; minradius = head[i]->radius; } } if (*head != least) { memcpy(&tmp, least, sizeof(Bubble_Step)); memcpy(least, *head, sizeof(Bubble_Step)); memcpy(*head, &tmp, sizeof(Bubble_Step)); } if (numelems > 2) pixmap_sort(&head[1], numelems-1); } static int extrapolate(int i1, int i2) { return (i2 + (i2 - i1)); } static void make_pixmap_array(struct state *st, Bubble_Step *list) /* From a linked list of bubbles construct the array step_pixmaps */ { Bubble_Step *tmp = list; int ind; #ifdef DEBUG int prevrad = -1; #endif if (list == (Bubble_Step *)NULL) { fprintf(stderr, "NULL list passed to make_pixmap_array\n"); exit(1); } st->num_bubble_pixmaps = 1; while(tmp->next != (Bubble_Step *)NULL) { tmp = tmp->next; ++st->num_bubble_pixmaps; } if (st->num_bubble_pixmaps < 2) { fprintf(stderr, "Must be at least two bubbles in file\n"); exit(1); } st->step_pixmaps = (Bubble_Step **)xmalloc((st->num_bubble_pixmaps + 1) * sizeof(Bubble_Step *)); /* Copy them blindly into the array for sorting. */ ind = 0; tmp = list; do { st->step_pixmaps[ind++] = tmp; tmp = tmp->next; } while(tmp != (Bubble_Step *)NULL); /* We make another bubble beyond the ones with pixmaps so that the final bubble hangs around and doesn't pop immediately. It's radius and area are found by extrapolating from the largest two bubbles with pixmaps. */ st->step_pixmaps[st->num_bubble_pixmaps] = (Bubble_Step *)xmalloc(sizeof(Bubble_Step)); st->step_pixmaps[st->num_bubble_pixmaps]->radius = INT_MAX; pixmap_sort(st->step_pixmaps, (st->num_bubble_pixmaps + 1)); #ifdef DEBUG if (st->step_pixmaps[st->num_bubble_pixmaps]->radius != INT_MAX) { fprintf(stderr, "pixmap_sort() screwed up make_pixmap_array\n"); } #endif /* DEBUG */ st->step_pixmaps[st->num_bubble_pixmaps]->radius = extrapolate(st->step_pixmaps[st->num_bubble_pixmaps-2]->radius, st->step_pixmaps[st->num_bubble_pixmaps-1]->radius); st->step_pixmaps[st->num_bubble_pixmaps]->area = calc_bubble_area(st, st->step_pixmaps[st->num_bubble_pixmaps]->radius); #ifdef DEBUG /* Now check for correct order */ for (ind = 0; ind < st->num_bubble_pixmaps; ind++) { if (prevrad > 0) { if (st->step_pixmaps[ind]->radius < prevrad) { fprintf(stderr, "Pixmaps not in ascending order of radius\n"); exit(1); } } prevrad = st->step_pixmaps[ind]->radius; } #endif /* DEBUG */ /* Now populate the droppage values */ for (ind = 0; ind < st->num_bubble_pixmaps; ind++) st->step_pixmaps[ind]->droppage = MAX_DROPPAGE * ind / st->num_bubble_pixmaps; } static void make_pixmap_from_default(struct state *st, char **pixmap_data, Bubble_Step *bl) /* Read pixmap data which has been compiled into the program and a pointer to which has been passed. This is virtually copied verbatim from make_pixmap_from_file() above and changes made to either should be propagated onwards! */ { XGCValues gcv; #ifdef DEBUG if (pixmap_data == (char **)0) { fprintf(stderr, "make_pixmap_from_default(): NULL passed\n"); exit(1); } #endif if (bl == (Bubble_Step *)NULL) { fprintf(stderr, "NULL pointer passed to make_pixmap()\n"); exit(1); } #ifdef FANCY_BUBBLES { int w, h; bl->ball = xpm_data_to_pixmap (st->dpy, st->window, (char **) pixmap_data, &w, &h, &bl->shape_mask); bl->radius = MAX(w, h) / 2; bl->area = calc_bubble_area(st, bl->radius); } #endif /* FANCY_BUBBLES */ gcv.foreground = st->default_fg_pixel; gcv.function = GXcopy; bl->draw_gc = XCreateGC (st->dpy, st->window, GCForeground, &gcv); XSetClipMask(st->dpy, bl->draw_gc, bl->shape_mask); gcv.foreground = st->default_bg_pixel; gcv.function = GXcopy; bl->erase_gc = XCreateGC (st->dpy, st->window, GCForeground, &gcv); XSetClipMask(st->dpy, bl->erase_gc, bl->shape_mask); } static void default_to_pixmaps (struct state *st) /* Make pixmaps out of default ball data stored in bubbles_default.c */ { int i; Bubble_Step *pixmap_list = (Bubble_Step *)NULL; Bubble_Step *newpix, *tmppix; char **pixpt; init_default_bubbles(); for (i = 0; i < num_default_bubbles; i++) { pixpt = default_bubbles[i]; newpix = (Bubble_Step *)xmalloc(sizeof(Bubble_Step)); make_pixmap_from_default(st, pixpt, newpix); /* Now add to list */ if (pixmap_list == (Bubble_Step *)NULL) { pixmap_list = newpix; } else { tmppix = pixmap_list; while (tmppix->next != (Bubble_Step *)NULL) tmppix = tmppix->next; tmppix->next = newpix; } newpix->next = (Bubble_Step *)NULL; } /* Finally construct step_pixmaps[] */ make_pixmap_array(st, pixmap_list); } #endif /* FANCY_BUBBLES */ /* * Main stuff */ static void get_resources(struct state *st) /* Get the appropriate X resources and warn about any inconsistencies. */ { Bool rise; XWindowAttributes xgwa; Colormap cmap; char *s; XGetWindowAttributes (st->dpy, st->window, &xgwa); cmap = xgwa.colormap; st->threed = get_boolean_resource(st->dpy, "3D", "Boolean"); st->quiet = get_boolean_resource(st->dpy, "quiet", "Boolean"); st->simple = get_boolean_resource(st->dpy, "simple", "Boolean"); /* Forbid rendered bubbles on monochrome displays */ if ((mono_p) && (! st->simple)) { if (! st->quiet) fprintf(stderr, "Rendered bubbles not supported on monochrome displays\n"); st->simple = True; } st->delay = get_integer_resource(st->dpy, "delay", "Integer"); s = get_string_resource (st->dpy, "mode", "Mode"); rise = False; if (!s || !*s || !strcasecmp (s, "float")) ; else if (!strcasecmp (s, "rise")) rise = True; else if (!strcasecmp (s, "drop")) st->drop = True; else fprintf (stderr, "%s: bogus mode: \"%s\"\n", progname, s); st->trails = get_boolean_resource(st->dpy, "trails", "Boolean"); st->drop_dir = (st->drop ? 1 : -1); if (st->drop || rise) st->drop = 1; st->default_fg_pixel = get_pixel_resource (st->dpy, cmap, "foreground", "Foreground"); st->default_bg_pixel = get_pixel_resource (st->dpy, cmap, "background", "Background"); if (st->simple) { /* This is easy */ st->broken = get_boolean_resource(st->dpy, "broken", "Boolean"); if (st->broken) if (! st->quiet) fprintf(stderr, "-broken not available in simple mode\n"); } else { #ifndef FANCY_BUBBLES st->simple = 1; #else /* FANCY_BUBBLES */ st->broken = get_boolean_resource(st->dpy, "broken", "Boolean"); #endif /* FANCY_BUBBLES */ } } static void * bubbles_init (Display *dpy, Window window) { struct state *st = (struct state *) calloc (1, sizeof(*st)); XGCValues gcv; XWindowAttributes xgwa; int i; st->dpy = dpy; st->window = window; get_resources(st); XGetWindowAttributes (st->dpy, st->window, &xgwa); #ifdef DEBUG printf("sizof(int) on this platform is %d\n", sizeof(int)); printf("sizof(long) on this platform is %d\n", sizeof(long)); #endif /* DEBUG */ st->screen_width = xgwa.width; st->screen_height = xgwa.height; st->screen_depth = xgwa.depth; if (st->simple) { /* These are pretty much plucked out of the air */ st->bubble_min_radius = (int)(0.006*(double)(MIN(st->screen_width, st->screen_height))); st->bubble_max_radius = (int)(0.045*(double)(MIN(st->screen_width, st->screen_height))); /* Some trivial values */ if (st->bubble_min_radius < 1) st->bubble_min_radius = 1; if (st->bubble_max_radius <= st->bubble_min_radius) st->bubble_max_radius = st->bubble_min_radius + 1; st->mesh_length = (2 * st->bubble_max_radius) + 3; /* store area of each bubble of certain radius as number of 1/10s of a pixel area. PI is defined in */ st->bubble_areas = (long *)xmalloc((st->bubble_max_radius + 2) * sizeof(int)); for (i = 0; i < st->bubble_min_radius; i++) st->bubble_areas[i] = 0; for (i = st->bubble_min_radius; i <= (st->bubble_max_radius+1); i++) st->bubble_areas[i] = calc_bubble_area(st, i); /* Now populate the droppage values */ st->bubble_droppages = (int *)xmalloc((st->bubble_max_radius + 2) * sizeof(int)); for (i = 0; i < st->bubble_min_radius; i++) st->bubble_droppages[i] = 0; for (i = st->bubble_min_radius; i <= (st->bubble_max_radius+1); i++) st->bubble_droppages[i] = MAX_DROPPAGE * (i - st->bubble_min_radius) / (st->bubble_max_radius - st->bubble_min_radius); st->mesh_length = (2 * st->bubble_max_radius) + 3; } else { #ifndef FANCY_BUBBLES fprintf(stderr, "Bug: simple mode code not set but FANCY_BUBBLES not defined\n"); exit(1); #else /* FANCY_BUBBLES */ /* Make sure all #ifdef sort of things have been taken care of in get_resources(). */ default_to_pixmaps(st); /* Set mesh length */ st->mesh_length = (2 * st->step_pixmaps[st->num_bubble_pixmaps-1]->radius) + 3; #endif /* FANCY_BUBBLES */ /* Am I missing something in here??? */ } st->mesh_width = (st->screen_width / st->mesh_length) + 1; st->mesh_height = (st->screen_height / st->mesh_length) + 1; st->mesh_cells = st->mesh_width * st->mesh_height; init_mesh(st); calculate_adjacent_list(st); adjust_areas(st); /* Graphics contexts for simple mode */ if (st->simple) { gcv.foreground = st->default_fg_pixel; st->draw_gc = XCreateGC (st->dpy, st->window, GCForeground, &gcv); gcv.foreground = st->default_bg_pixel; st->erase_gc = XCreateGC (st->dpy, st->window, GCForeground, &gcv); } XClearWindow (st->dpy, st->window); # ifndef FANCY_BUBBLES st->simple = True; # endif return st; } static unsigned long bubbles_draw (Display *dpy, Window window, void *closure) { struct state *st = (struct state *) closure; int i; for (i = 0; i < 5; i++) { Bubble *tmp = new_bubble(st); add_to_mesh(st, tmp); insert_new_bubble(st, tmp); } return st->delay; } static void bubbles_reshape (Display *dpy, Window window, void *closure, unsigned int w, unsigned int h) { } static Bool bubbles_event (Display *dpy, Window window, void *closure, XEvent *event) { return False; } static void bubbles_free (Display *dpy, Window window, void *closure) { struct state *st = (struct state *) closure; free (st); } XSCREENSAVER_MODULE ("Bubbles", bubbles) xscreensaver-5.36/hacks/bubbles-default.c000644 000767 000024 00000010407 12701612216 020433 0ustar00jwzstaff000000 000000 /* bubbles_default.c - pick images for bubbles.c * By Jamie Zawinski , 20-Jan-98. * * 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. */ #ifdef HAVE_CONFIG_H # include "config.h" #endif #include #include #include "bubbles.h" #include "yarandom.h" #ifndef NO_DEFAULT_BUBBLE # define BLOOD 0 # include "images/bubbles/blood1.xpm" # include "images/bubbles/blood2.xpm" # include "images/bubbles/blood3.xpm" # include "images/bubbles/blood4.xpm" # include "images/bubbles/blood5.xpm" # include "images/bubbles/blood6.xpm" # include "images/bubbles/blood7.xpm" # include "images/bubbles/blood8.xpm" # include "images/bubbles/blood9.xpm" # include "images/bubbles/blood10.xpm" # include "images/bubbles/blood11.xpm" # define BLUE 1 # include "images/bubbles/blue1.xpm" # include "images/bubbles/blue2.xpm" # include "images/bubbles/blue3.xpm" # include "images/bubbles/blue4.xpm" # include "images/bubbles/blue5.xpm" # include "images/bubbles/blue6.xpm" # include "images/bubbles/blue7.xpm" # include "images/bubbles/blue8.xpm" # include "images/bubbles/blue9.xpm" # include "images/bubbles/blue10.xpm" # include "images/bubbles/blue11.xpm" # define GLASS 2 # include "images/bubbles/glass1.xpm" # include "images/bubbles/glass2.xpm" # include "images/bubbles/glass3.xpm" # include "images/bubbles/glass4.xpm" # include "images/bubbles/glass5.xpm" # include "images/bubbles/glass6.xpm" # include "images/bubbles/glass7.xpm" # include "images/bubbles/glass8.xpm" # include "images/bubbles/glass9.xpm" # include "images/bubbles/glass10.xpm" # include "images/bubbles/glass11.xpm" # define JADE 3 # include "images/bubbles/jade1.xpm" # include "images/bubbles/jade2.xpm" # include "images/bubbles/jade3.xpm" # include "images/bubbles/jade4.xpm" # include "images/bubbles/jade5.xpm" # include "images/bubbles/jade6.xpm" # include "images/bubbles/jade7.xpm" # include "images/bubbles/jade8.xpm" # include "images/bubbles/jade9.xpm" # include "images/bubbles/jade10.xpm" # include "images/bubbles/jade11.xpm" # define END 4 char **default_bubbles[50]; int num_default_bubbles; void init_default_bubbles(void) { int i = 0; switch (random() % END) { case BLOOD: default_bubbles[i++] = blood1; default_bubbles[i++] = blood2; default_bubbles[i++] = blood3; default_bubbles[i++] = blood4; default_bubbles[i++] = blood5; default_bubbles[i++] = blood6; default_bubbles[i++] = blood7; default_bubbles[i++] = blood8; default_bubbles[i++] = blood9; default_bubbles[i++] = blood10; default_bubbles[i++] = blood11; break; case BLUE: default_bubbles[i++] = blue1; default_bubbles[i++] = blue2; default_bubbles[i++] = blue3; default_bubbles[i++] = blue4; default_bubbles[i++] = blue5; default_bubbles[i++] = blue6; default_bubbles[i++] = blue7; default_bubbles[i++] = blue8; default_bubbles[i++] = blue9; default_bubbles[i++] = blue10; default_bubbles[i++] = blue11; break; case GLASS: default_bubbles[i++] = glass1; default_bubbles[i++] = glass2; default_bubbles[i++] = glass3; default_bubbles[i++] = glass4; default_bubbles[i++] = glass5; default_bubbles[i++] = glass6; default_bubbles[i++] = glass7; default_bubbles[i++] = glass8; default_bubbles[i++] = glass9; default_bubbles[i++] = glass10; default_bubbles[i++] = glass11; break; case JADE: default_bubbles[i++] = jade1; default_bubbles[i++] = jade2; default_bubbles[i++] = jade3; default_bubbles[i++] = jade4; default_bubbles[i++] = jade5; default_bubbles[i++] = jade6; default_bubbles[i++] = jade7; default_bubbles[i++] = jade8; default_bubbles[i++] = jade9; default_bubbles[i++] = jade10; default_bubbles[i++] = jade11; break; default: abort(); break; } default_bubbles[i] = 0; num_default_bubbles = i; } #endif /* NO_DEFAULT_BUBBLE */ xscreensaver-5.36/hacks/decayscreen.c000664 000767 000024 00000026666 12742254234 017707 0ustar00jwzstaff000000 000000 /* xscreensaver, Copyright (c) 1992-2014 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. */ /* decayscreen * * Based on slidescreen program from the xscreensaver application and the * decay program for Sun framebuffers. This is the comment from the decay.c * file: * decay.c * find the screen bitmap for the console and make it "decay" by * randomly shifting random rectangles by one pixelwidth at a time. * * by David Wald, 1988 * rewritten by Natuerlich! * based on a similar "utility" on the Apollo ring at Yale. * X version by * * Vivek Khera * 5-AUG-1993 * * Hacked by jwz, 28-Nov-97 (sped up and added new motion directions) * R. Schultz * Added "melt" & "stretch" modes 28-Mar-1999 * */ #include "screenhack.h" #include struct state { Display *dpy; Window window; XWindowAttributes xgwa; Pixmap saved; int saved_w, saved_h; int sizex, sizey; int delay; int duration; GC gc; int mode; int random_p; time_t start_time; int fuzz_toggle; const int *current_bias; async_load_state *img_loader; }; #define SHUFFLE 0 #define UP 1 #define LEFT 2 #define RIGHT 3 #define DOWN 4 #define UPLEFT 5 #define DOWNLEFT 6 #define UPRIGHT 7 #define DOWNRIGHT 8 #define IN 9 #define OUT 10 #define MELT 11 #define STRETCH 12 #define FUZZ 13 static void decayscreen_load_image (struct state *st) { XWindowAttributes xgwa; XGetWindowAttributes (st->dpy, st->window, &xgwa); 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); } static void * decayscreen_init (Display *dpy, Window window) { struct state *st = (struct state *) calloc (1, sizeof(*st)); XGCValues gcv; long gcflags; unsigned long bg; char *s; st->dpy = dpy; st->window = window; st->random_p = 0; s = get_string_resource(st->dpy, "mode", "Mode"); if (s && !strcmp(s, "shuffle")) st->mode = SHUFFLE; else if (s && !strcmp(s, "up")) st->mode = UP; else if (s && !strcmp(s, "left")) st->mode = LEFT; else if (s && !strcmp(s, "right")) st->mode = RIGHT; else if (s && !strcmp(s, "down")) st->mode = DOWN; else if (s && !strcmp(s, "upleft")) st->mode = UPLEFT; else if (s && !strcmp(s, "downleft")) st->mode = DOWNLEFT; else if (s && !strcmp(s, "upright")) st->mode = UPRIGHT; else if (s && !strcmp(s, "downright")) st->mode = DOWNRIGHT; else if (s && !strcmp(s, "in")) st->mode = IN; else if (s && !strcmp(s, "out")) st->mode = OUT; else if (s && !strcmp(s, "melt")) st->mode = MELT; else if (s && !strcmp(s, "stretch")) st->mode = STRETCH; else if (s && !strcmp(s, "fuzz")) st->mode = FUZZ; else { if (s && *s && !!strcmp(s, "random")) fprintf(stderr, "%s: unknown mode %s\n", progname, s); st->random_p = 1; st->mode = random() % (FUZZ+1); } st->delay = get_integer_resource (st->dpy, "delay", "Integer"); if (st->delay < 0) st->delay = 0; st->duration = get_integer_resource (st->dpy, "duration", "Seconds"); if (st->duration < 1) st->duration = 1; XGetWindowAttributes (st->dpy, st->window, &st->xgwa); gcv.function = GXcopy; gcv.subwindow_mode = IncludeInferiors; bg = get_pixel_resource (st->dpy, st->xgwa.colormap, "background", "Background"); gcv.foreground = bg; gcflags = GCForeground | GCFunction; if (use_subwindow_mode_p(st->xgwa.screen, st->window)) /* see grabscreen.c */ gcflags |= GCSubwindowMode; st->gc = XCreateGC (st->dpy, st->window, gcflags, &gcv); st->start_time = time ((time_t *) 0); decayscreen_load_image (st); return st; } /* * perform one iteration of decay */ static unsigned long decayscreen_draw (Display *dpy, Window window, void *closure) { struct state *st = (struct state *) closure; int left, top, width, height, toleft, totop; #define L 101 #define R 102 #define U 103 #define D 104 static const int no_bias[] = { L,L,L,L, R,R,R,R, U,U,U,U, D,D,D,D }; static const int up_bias[] = { L,L,L,L, R,R,R,R, U,U,U,U, U,U,D,D }; static const int down_bias[] = { L,L,L,L, R,R,R,R, U,U,D,D, D,D,D,D }; static const int left_bias[] = { L,L,L,L, L,L,R,R, U,U,U,U, D,D,D,D }; static const int right_bias[] = { L,L,R,R, R,R,R,R, U,U,U,U, D,D,D,D }; static const int upleft_bias[] = { L,L,L,L, L,R,R,R, U,U,U,U, U,D,D,D }; static const int downleft_bias[] = { L,L,L,L, L,R,R,R, U,U,U,D, D,D,D,D }; static const int upright_bias[] = { L,L,L,R, R,R,R,R, U,U,U,U, U,D,D,D }; static const int downright_bias[] = { L,L,L,R, R,R,R,R, U,U,U,D, D,D,D,D }; if (st->img_loader) /* still loading */ { st->img_loader = load_image_async_simple (st->img_loader, 0, 0, 0, 0, 0); if (! st->img_loader) { /* just finished */ st->start_time = time ((time_t *) 0); if (st->random_p) st->mode = random() % (FUZZ+1); 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; } if (!st->img_loader && st->start_time + st->duration < time ((time_t *) 0)) { decayscreen_load_image (st); } switch (st->mode) { case SHUFFLE: st->current_bias = no_bias; break; case UP: st->current_bias = up_bias; break; case LEFT: st->current_bias = left_bias; break; case RIGHT: st->current_bias = right_bias; break; case DOWN: st->current_bias = down_bias; break; case UPLEFT: st->current_bias = upleft_bias; break; case DOWNLEFT: st->current_bias = downleft_bias; break; case UPRIGHT: st->current_bias = upright_bias; break; case DOWNRIGHT: st->current_bias = downright_bias; break; case IN: st->current_bias = no_bias; break; case OUT: st->current_bias = no_bias; break; case MELT: st->current_bias = no_bias; break; case STRETCH: st->current_bias = no_bias; break; case FUZZ: st->current_bias = no_bias; break; default: abort(); } #define nrnd(x) ((x) ? random() % (x) : x) if (st->mode == MELT || st->mode == STRETCH) { left = nrnd(st->sizex/2); top = nrnd(st->sizey); width = nrnd( st->sizex/2 ) + st->sizex/2 - left; height = nrnd(st->sizey - top); toleft = left; totop = top+1; } else if (st->mode == FUZZ) { /* By Vince Levey ; inspired by the "melt" mode of the "scrhack" IrisGL program by Paul Haeberli circa 1991. */ left = nrnd(st->sizex - 1); top = nrnd(st->sizey - 1); st->fuzz_toggle = !st->fuzz_toggle; if (st->fuzz_toggle) { totop = top; height = 1; toleft = nrnd(st->sizex - 1); if (toleft > left) { width = toleft-left; toleft = left; left++; } else { width = left-toleft; left = toleft; toleft++; } } else { toleft = left; width = 1; totop = nrnd(st->sizey - 1); if (totop > top) { height = totop-top; totop = top; top++; } else { height = top-totop; top = totop; totop++; } } } else { left = nrnd(st->sizex - 1); top = nrnd(st->sizey); width = nrnd(st->sizex - left); height = nrnd(st->sizey - top); toleft = left; totop = top; if (st->mode == IN || st->mode == OUT) { int x = left+(width/2); int y = top+(height/2); int cx = st->sizex/2; int cy = st->sizey/2; if (st->mode == IN) { if (x > cx && y > cy) st->current_bias = upleft_bias; else if (x < cx && y > cy) st->current_bias = upright_bias; else if (x < cx && y < cy) st->current_bias = downright_bias; else /* (x > cx && y < cy)*/ st->current_bias = downleft_bias; } else { if (x > cx && y > cy) st->current_bias = downright_bias; else if (x < cx && y > cy) st->current_bias = downleft_bias; else if (x < cx && y < cy) st->current_bias = upleft_bias; else /* (x > cx && y < cy)*/ st->current_bias = upright_bias; } } switch (st->current_bias[random() % (sizeof(no_bias)/sizeof(*no_bias))]) { case L: toleft = left-1; break; case R: toleft = left+1; break; case U: totop = top-1; break; case D: totop = top+1; break; default: abort(); break; } } if (st->mode == STRETCH) { XCopyArea (st->dpy, st->window, st->window, st->gc, 0, st->sizey-top-2, st->sizex, top+1, 0, st->sizey-top-1); } else { XCopyArea (st->dpy, st->window, st->window, st->gc, left, top, width, height, toleft, totop); } #undef nrnd return st->delay; } static void decayscreen_reshape (Display *dpy, Window window, void *closure, unsigned int w, unsigned int h) { struct state *st = (struct state *) closure; if (! st->saved) return; /* Image might not be loaded yet */ XClearWindow (st->dpy, st->window); XCopyArea (st->dpy, st->saved, st->window, st->gc, 0, 0, st->saved_w, st->saved_h, ((int)w - st->saved_w) / 2, ((int)h - st->saved_h) / 2); st->sizex = w; st->sizey = h; } static Bool decayscreen_event (Display *dpy, Window window, void *closure, XEvent *event) { struct state *st = (struct state *) closure; if (screenhack_event_helper (dpy, window, event)) { st->start_time = 0; return True; } return False; } static void decayscreen_free (Display *dpy, Window window, void *closure) { struct state *st = (struct state *) closure; free (st); } static const char *decayscreen_defaults [] = { ".background: Black", ".foreground: Yellow", "*dontClearRoot: True", "*fpsSolid: True", #ifdef __sgi /* really, HAVE_READ_DISPLAY_EXTENSION */ "*visualID: Best", #endif "*delay: 10000", "*mode: random", "*duration: 120", #ifdef HAVE_MOBILE "*ignoreRotation: True", "*rotateImages: True", #endif 0 }; static XrmOptionDescRec decayscreen_options [] = { { "-delay", ".delay", XrmoptionSepArg, 0 }, { "-mode", ".mode", XrmoptionSepArg, 0 }, { "-duration", ".duration", XrmoptionSepArg, 0 }, { 0, 0, 0, 0 } }; XSCREENSAVER_MODULE ("DecayScreen", decayscreen) xscreensaver-5.36/hacks/deco.c000644 000767 000024 00000023512 12710314205 016303 0ustar00jwzstaff000000 000000 /* xscreensaver, Copyright (c) 1997-2013 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. * * Concept snarfed from Michael D. Bayne in * http://www.go2net.com/internet/deep/1997/04/16/body.html * * Changes by Lars Huttar, http://www.huttar.net: * - allow use of golden ratio for dividing rectangles instead of 1/2. * - allow smooth colors instead of random * - added line thickness setting * - added "Mondrian" mode * Other ideas: * - allow recomputing the colormap on each new frame (especially useful * when ncolors is low) */ #include "screenhack.h" #include struct state { XColor colors[255]; int ncolors; int max_depth; int min_height; int min_width; int line_width; int old_line_width; Bool goldenRatio; Bool mondrian; Bool smoothColors; int delay; XWindowAttributes xgwa; GC fgc, bgc; int current_color; }; /* Golden Ratio * Suppose you're dividing a rectangle of length A+B * into two parts, of length A and B respectively. You want the ratio of * A to B to be the same as the ratio of the whole (A+B) to A. The golden * ratio (phi) is that ratio. Supposed to be visually pleasing. */ #define PHI 1.61803 #define PHI1 (1.0/PHI) #define PHI2 (1.0 - PHI1) /* copied from make_random_colormap in colors.c */ static void make_mondrian_colormap (Screen *screen, Visual *visual, Colormap cmap, XColor *colors, int *ncolorsP, Bool allocate_p, Bool *writable_pP, Bool verbose_p) { Display *dpy = DisplayOfScreen (screen); Bool wanted_writable = (allocate_p && writable_pP && *writable_pP); int ncolors = 8; int i; if (*ncolorsP <= 0) return; /* If this visual doesn't support writable cells, don't bother trying. */ if (wanted_writable && !has_writable_cells(screen, visual)) *writable_pP = False; for (i = 0; i < ncolors; i++) { colors[i].flags = DoRed|DoGreen|DoBlue; colors[i].red = 0; colors[i].green = 0; colors[i].blue = 0; switch(i) { case 0: case 1: case 2: case 3: case 7: /* white */ colors[i].red = 0xE800; colors[i].green = 0xE800; colors[i].blue = 0xE800; break; case 4: colors[i].red = 0xCFFF; break; /* red */ case 5: colors[i].red = 0x2000; colors[i].blue = 0xCFFF; break; /* blue */ case 6: colors[i].red = 0xDFFF; /* yellow */ colors[i].green = 0xCFFF; break; } } if (!allocate_p) return; RETRY_NON_WRITABLE: if (writable_pP && *writable_pP) { unsigned long *pixels = (unsigned long *) malloc(sizeof(*pixels) * (ncolors + 1)); allocate_writable_colors (screen, cmap, pixels, &ncolors); if (ncolors > 0) for (i = 0; i < ncolors; i++) colors[i].pixel = pixels[i]; free (pixels); if (ncolors > 0) XStoreColors (dpy, cmap, colors, ncolors); } else { for (i = 0; i < ncolors; i++) { XColor color; color = colors[i]; if (!XAllocColor (dpy, cmap, &color)) break; colors[i].pixel = color.pixel; } ncolors = i; } /* If we tried for writable cells and got none, try for non-writable. */ if (allocate_p && ncolors == 0 && writable_pP && *writable_pP) { ncolors = *ncolorsP; *writable_pP = False; goto RETRY_NON_WRITABLE; } #if 0 /* I don't think we need to bother copying or linking to the complain function. */ if (verbose_p) complain(*ncolorsP, ncolors, wanted_writable, wanted_writable && *writable_pP); #endif *ncolorsP = ncolors; } static void mondrian_set_sizes (struct state *st, int w, int h) { if (w > h) { st->line_width = w/50; st->min_height = st->min_width = w/8; } else { st->line_width = h/50; st->min_height = st->min_width = h/8; } } static void deco (Display *dpy, Window window, struct state *st, int x, int y, int w, int h, int depth) { if (((random() % st->max_depth) < depth) || (w < st->min_width) || (h < st->min_height)) { if (!mono_p) { if (++st->current_color >= st->ncolors) st->current_color = 0; XSetForeground(dpy, st->bgc, st->colors[st->current_color].pixel); } XFillRectangle (dpy, window, st->bgc, x, y, w, h); XDrawRectangle (dpy, window, st->fgc, x, y, w, h); } else { if ((st->goldenRatio || st->mondrian) ? (w > h) : (random() & 1)) { /* Divide the rectangle side-by-side */ int wnew = (st->goldenRatio ? (w * (random() & 1 ? PHI1 : PHI2)) : w/2); deco (dpy, window, st, x, y, wnew, h, depth+1); deco (dpy, window, st, x+wnew, y, w-wnew, h, depth+1); } else { /* Divide the rectangle top-to-bottom */ int hnew = (st->goldenRatio ? (h * (random() & 1 ? PHI1 : PHI2)) : h/2); deco (dpy, window, st, x, y, w, hnew, depth+1); deco (dpy, window, st, x, y+hnew, w, h-hnew, depth+1); } } } static void * deco_init (Display *dpy, Window window) { struct state *st = (struct state *) calloc (1, sizeof(*st)); XGCValues gcv; st->delay = get_integer_resource (dpy, "delay", "Integer"); st->smoothColors = get_boolean_resource(dpy, "smoothColors", "Boolean"); st->old_line_width = 1; st->goldenRatio = get_boolean_resource (dpy, "goldenRatio", "Boolean"); st->max_depth = get_integer_resource (dpy, "maxDepth", "Integer"); if (st->max_depth < 1) st->max_depth = 1; else if (st->max_depth > 1000) st->max_depth = 1000; st->min_width = get_integer_resource (dpy, "minWidth", "Integer"); if (st->min_width < 2) st->min_width = 2; st->min_height = get_integer_resource (dpy, "minHeight", "Integer"); if (st->min_height < 2) st->min_height = 2; st->line_width = get_integer_resource (dpy, "lineWidth", "Integer"); XGetWindowAttributes (dpy, window, &st->xgwa); st->ncolors = get_integer_resource (dpy, "ncolors", "Integer"); gcv.foreground = get_pixel_resource(dpy, st->xgwa.colormap, "foreground", "Foreground"); st->fgc = XCreateGC (dpy, window, GCForeground, &gcv); gcv.foreground = get_pixel_resource(dpy, st->xgwa.colormap, "background", "Background"); st->bgc = XCreateGC (dpy, window, GCForeground, &gcv); if (st->ncolors <= 2) mono_p = True; if (!mono_p) { GC tmp = st->fgc; st->fgc = st->bgc; st->bgc = tmp; } st->mondrian = get_boolean_resource(dpy, "mondrian", "Boolean"); if (st->mondrian) { /* Mondrian, if true, overrides several other options. */ mondrian_set_sizes(st, st->xgwa.width, st->xgwa.height); /** set up red-yellow-blue-black-white colormap and fgc **/ make_mondrian_colormap(st->xgwa.screen, st->xgwa.visual, st->xgwa.colormap, st->colors, &st->ncolors, True, 0, True); /** put white in several cells **/ /** set min-height and min-width to about 10% of total w/h **/ } else if (st->smoothColors) make_smooth_colormap (st->xgwa.screen, st->xgwa.visual, st->xgwa.colormap, st->colors, &st->ncolors, True, 0, True); else make_random_colormap (st->xgwa.screen, st->xgwa.visual, st->xgwa.colormap, st->colors, &st->ncolors, False, True, 0, True); gcv.line_width = st->old_line_width = st->line_width; XChangeGC(dpy, st->fgc, GCLineWidth, &gcv); return st; } static unsigned long deco_draw (Display *dpy, Window window, void *closure) { struct state *st = (struct state *) closure; XFillRectangle (dpy, window, st->bgc, 0, 0, st->xgwa.width, st->xgwa.height); if (st->mondrian) { mondrian_set_sizes(st, st->xgwa.width, st->xgwa.height); if (st->line_width != st->old_line_width) { XSetLineAttributes(dpy, st->fgc, st->line_width, LineSolid, CapButt, JoinBevel); st->old_line_width = st->line_width; } } deco (dpy, window, st, 0, 0, st->xgwa.width, st->xgwa.height, 0); return 1000000 * st->delay; } static void deco_reshape (Display *dpy, Window window, void *closure, unsigned int w, unsigned int h) { struct state *st = (struct state *) closure; st->xgwa.width = w; st->xgwa.height = h; } static Bool deco_event (Display *dpy, Window window, void *closure, XEvent *event) { return False; } static void deco_free (Display *dpy, Window window, void *closure) { struct state *st = (struct state *) closure; free (st); } static const char *deco_defaults [] = { ".background: black", ".foreground: white", "*maxDepth: 12", "*minWidth: 20", "*minHeight: 20", "*lineWidth: 1", "*delay: 5", "*ncolors: 64", "*goldenRatio: False", "*smoothColors: False", "*mondrian: False", #ifdef HAVE_MOBILE "*ignoreRotation: True", #endif 0 }; static XrmOptionDescRec deco_options [] = { { "-max-depth", ".maxDepth", XrmoptionSepArg, 0 }, { "-min-width", ".minWidth", XrmoptionSepArg, 0 }, { "-min-height", ".minHeight", XrmoptionSepArg, 0 }, { "-line-width", ".lineWidth", XrmoptionSepArg, 0 }, { "-delay", ".delay", XrmoptionSepArg, 0 }, { "-ncolors", ".ncolors", XrmoptionSepArg, 0 }, { "-golden-ratio", ".goldenRatio", XrmoptionNoArg, "True" }, { "-no-golden-ratio", ".goldenRatio", XrmoptionNoArg, "False" }, { "-smooth-colors", ".smoothColors",XrmoptionNoArg, "True" }, { "-no-smooth-colors",".smoothColors",XrmoptionNoArg, "False" }, { "-mondrian", ".mondrian", XrmoptionNoArg, "True" }, { "-no-mondrian", ".mondrian", XrmoptionNoArg, "False" }, { 0, 0, 0, 0 } }; XSCREENSAVER_MODULE ("Deco", deco) xscreensaver-5.36/hacks/drift.c000644 000767 000024 00000037105 12701612216 016507 0ustar00jwzstaff000000 000000 /* -*- Mode: C; tab-width: 4 -*- */ /* drift --- drifting recursive fractal cosmic flames */ #if 0 static const char sccsid[] = "@(#)drift.c 5.00 2000/11/01 xlockmore"; #endif /*- * Copyright (c) 1991 by Patrick J. Naughton. * * Permission to use, copy, modify, and distribute this software and its * documentation for any purpose and without fee is hereby granted, * provided that the above copyright notice appear in all copies and that * both that copyright notice and this permission notice appear in * supporting documentation. * * This file is provided AS IS with no warranties of any kind. The author * shall have no liability with respect to the infringement of copyrights, * trade secrets or any patents by this file or any part thereof. In no * event will the author be liable for any lost revenue or profits or * other special, indirect and consequential damages. * * Revision History: * 01-Nov-2000: Allocation checks * 10-May-1997: Jamie Zawinski compatible with xscreensaver * 01-Jan-1997: Moved new flame to drift. Compile time options now run time. * 01-Jun-1995: Updated by Scott Draves. * 27-Jun-1991: vary number of functions used. * 24-Jun-1991: fixed portability problem with integer mod (%). * 06-Jun-1991: Written, received from Scott Draves */ #ifdef STANDALONE # define MODE_drift # define DEFAULTS "*delay: 10000 \n" \ "*count: 30 \n" \ "*ncolors: 200 \n" \ "*fpsSolid: true \n" \ "*ignoreRotation: True \n" \ # define SMOOTH_COLORS # include "xlockmore.h" /* in xscreensaver distribution */ # include "erase.h" #else /* STANDALONE */ # define ENTRYPOINT /**/ # include "xlock.h" /* in xlockmore distribution */ #endif /* STANDALONE */ #ifdef MODE_drift #define DEF_GROW "False" /* Grow fractals instead of animating one at a time, would then be like flame */ #define DEF_LISS "False" /* if this is defined then instead of a point bouncing around in a high dimensional sphere, we use lissojous figures. Only makes sense if grow is false. */ static Bool grow; static Bool liss; static XrmOptionDescRec opts[] = { {"-grow", ".drift.grow", XrmoptionNoArg, "on"}, {"+grow", ".drift.grow", XrmoptionNoArg, "off"}, {"-liss", ".drift.trail", XrmoptionNoArg, "on"}, {"+liss", ".drift.trail", XrmoptionNoArg, "off"} }; static argtype vars[] = { {&grow, "grow", "Grow", DEF_GROW, t_Bool}, {&liss, "trail", "Trail", DEF_LISS, t_Bool} }; static OptionStruct desc[] = { {"-/+grow", "turn on/off growing fractals, else they are animated"}, {"-/+liss", "turn on/off using lissojous figures to get points"} }; ENTRYPOINT ModeSpecOpt drift_opts = {sizeof opts / sizeof opts[0], opts, sizeof vars / sizeof vars[0], vars, desc}; #ifdef USE_MODULES ModStruct drift_description = {"drift", "init_drift", "draw_drift", "release_drift", "refresh_drift", "init_drift", (char *) NULL, &drift_opts, 10000, 30, 1, 1, 64, 1.0, "", "Shows cosmic drifting flame fractals", 0, NULL}; #endif #define MAXBATCH1 200 /* mono */ #define MAXBATCH2 20 /* color */ #define FUSE 10 /* discard this many initial iterations */ #define NMAJORVARS 7 #define MAXLEV 10 typedef struct { /* shape of current flame */ int nxforms; double f[2][3][MAXLEV]; /* a bunch of non-homogeneous xforms */ int variation[10]; /* for each xform */ /* Animation */ double df[2][3][MAXLEV]; /* high-level control */ int mode; /* 0->slow/single 1->fast/many */ int nfractals; /* draw this many fractals */ int major_variation; int fractal_len; /* pts/fractal */ int color; int rainbow; /* more than one color per fractal 1-> computed by adding dimension to fractal */ int width, height; /* of window */ int timer; /* draw info about current flame */ int fuse; /* iterate this many before drawing */ int total_points; /* draw this many pts before fractal ends */ int npoints; /* how many we've computed but not drawn */ XPoint pts[MAXBATCH1]; /* here they are */ unsigned long pixcol; /* when drawing in color, we have a buffer per color */ int *ncpoints; XPoint *cpts; double x, y, c; int liss_time; Bool grow, liss; short lasthalf; long saved_random_bits; int nbits; #ifdef STANDALONE int erase_countdown; eraser_state *eraser; #endif } driftstruct; static driftstruct *drifts = (driftstruct *) NULL; static short halfrandom(driftstruct * dp, int mv) { unsigned long r; if (dp->lasthalf) { r = dp->lasthalf; dp->lasthalf = 0; } else { r = LRAND(); dp->lasthalf = (short) (r >> 16); } r = r % mv; return r; } static int frandom(driftstruct * dp, int n) { int result; if (3 > dp->nbits) { dp->saved_random_bits = LRAND(); dp->nbits = 31; } switch (n) { case 2: result = (int) (dp->saved_random_bits & 1); dp->saved_random_bits >>= 1; dp->nbits -= 1; return result; case 3: result = (int) (dp->saved_random_bits & 3); dp->saved_random_bits >>= 2; dp->nbits -= 2; if (3 == result) return frandom(dp, 3); return result; case 4: result = (int) (dp->saved_random_bits & 3); dp->saved_random_bits >>= 2; dp->nbits -= 2; return result; case 5: result = (int) (dp->saved_random_bits & 7); dp->saved_random_bits >>= 3; dp->nbits -= 3; if (4 < result) return frandom(dp, 5); return result; default: (void) fprintf(stderr, "bad arg to frandom\n"); } return 0; } #define DISTRIB_A (halfrandom(dp, 7000) + 9000) #define DISTRIB_B ((frandom(dp, 3) + 1) * (frandom(dp, 3) + 1) * 120000) #define LEN(x) (sizeof(x)/sizeof((x)[0])) static void initmode(ModeInfo * mi, int mode) { driftstruct *dp = &drifts[MI_SCREEN(mi)]; #define VARIATION_LEN 14 dp->mode = mode; dp->major_variation = halfrandom(dp, VARIATION_LEN); /* 0, 0, 1, 1, 2, 2, 3, 4, 4, 5, 5, 6, 6, 6 */ dp->major_variation = ((dp->major_variation >= VARIATION_LEN >> 1) && (dp->major_variation < VARIATION_LEN - 1)) ? (dp->major_variation + 1) >> 1 : dp->major_variation >> 1; if (dp->grow) { dp->rainbow = 0; if (mode) { if (!dp->color || halfrandom(dp, 8)) { dp->nfractals = halfrandom(dp, 30) + 5; dp->fractal_len = DISTRIB_A; } else { dp->nfractals = halfrandom(dp, 5) + 5; dp->fractal_len = DISTRIB_B; } } else { dp->rainbow = dp->color; dp->nfractals = 1; dp->fractal_len = DISTRIB_B; } } else { dp->nfractals = 1; dp->rainbow = dp->color; dp->fractal_len = 2000000; } dp->fractal_len = (dp->fractal_len * MI_COUNT(mi)) / 20; #ifndef STANDALONE MI_CLEARWINDOW(mi); #endif } static void pick_df_coefs(ModeInfo * mi) { driftstruct *dp = &drifts[MI_SCREEN(mi)]; int i, j, k; double r; for (i = 0; i < dp->nxforms; i++) { r = 1e-6; for (j = 0; j < 2; j++) for (k = 0; k < 3; k++) { dp->df[j][k][i] = ((double) halfrandom(dp, 1000) / 500.0 - 1.0); r += dp->df[j][k][i] * dp->df[j][k][i]; } r = (3 + halfrandom(dp, 5)) * 0.01 / sqrt(r); for (j = 0; j < 2; j++) for (k = 0; k < 3; k++) dp->df[j][k][i] *= r; } } static void free_drift(driftstruct *dp) { if (dp->ncpoints != NULL) { (void) free((void *) dp->ncpoints); dp->ncpoints = (int *) NULL; } if (dp->cpts != NULL) { (void) free((void *) dp->cpts); dp->cpts = (XPoint *) NULL; } } static void initfractal(ModeInfo * mi) { driftstruct *dp = &drifts[MI_SCREEN(mi)]; int i, j, k; #define XFORM_LEN 9 dp->fuse = FUSE; dp->total_points = 0; if (!dp->ncpoints) { if ((dp->ncpoints = (int *) malloc(sizeof (int) * MI_NCOLORS(mi))) == NULL) { free_drift(dp); return; } } if (!dp->cpts) { if ((dp->cpts = (XPoint *) malloc(MAXBATCH2 * sizeof (XPoint) * MI_NCOLORS(mi))) == NULL) { free_drift(dp); return; } } if (dp->rainbow) for (i = 0; i < MI_NPIXELS(mi); i++) dp->ncpoints[i] = 0; else dp->npoints = 0; dp->nxforms = halfrandom(dp, XFORM_LEN); /* 2, 2, 2, 3, 3, 3, 4, 4, 5 */ dp->nxforms = (dp->nxforms >= XFORM_LEN - 1) + dp->nxforms / 3 + 2; dp->c = dp->x = dp->y = 0.0; if (dp->liss && !halfrandom(dp, 10)) { dp->liss_time = 0; } if (!dp->grow) pick_df_coefs(mi); for (i = 0; i < dp->nxforms; i++) { if (NMAJORVARS == dp->major_variation) dp->variation[i] = halfrandom(dp, NMAJORVARS); else dp->variation[i] = dp->major_variation; for (j = 0; j < 2; j++) for (k = 0; k < 3; k++) { if (dp->liss) dp->f[j][k][i] = sin(dp->liss_time * dp->df[j][k][i]); else dp->f[j][k][i] = ((double) halfrandom(dp, 1000) / 500.0 - 1.0); } } if (dp->color) dp->pixcol = MI_PIXEL(mi, halfrandom(dp, MI_NPIXELS(mi))); else dp->pixcol = MI_WHITE_PIXEL(mi); } ENTRYPOINT void init_drift(ModeInfo * mi) { driftstruct *dp; if (drifts == NULL) { if ((drifts = (driftstruct *) calloc(MI_NUM_SCREENS(mi), sizeof (driftstruct))) == NULL) return; } dp = &drifts[MI_SCREEN(mi)]; dp->width = MI_WIDTH(mi); dp->height = MI_HEIGHT(mi); dp->color = MI_NPIXELS(mi) > 2; if (MI_IS_FULLRANDOM(mi)) { if (NRAND(3) == 0) dp->grow = True; else { dp->grow = False; dp->liss = (Bool) (LRAND() & 1); } } else { dp->grow = grow; if (dp->grow) dp->liss = False; else dp->liss = liss; } initmode(mi, 1); initfractal(mi); } static void iter(driftstruct * dp) { int i = frandom(dp, dp->nxforms); double nx, ny, nc; if (i) nc = (dp->c + 1.0) / 2.0; else nc = dp->c / 2.0; nx = dp->f[0][0][i] * dp->x + dp->f[0][1][i] * dp->y + dp->f[0][2][i]; ny = dp->f[1][0][i] * dp->x + dp->f[1][1][i] * dp->y + dp->f[1][2][i]; switch (dp->variation[i]) { case 1: /* sinusoidal */ nx = sin(nx); ny = sin(ny); break; case 2: { /* complex */ double r2 = nx * nx + ny * ny + 1e-6; nx = nx / r2; ny = ny / r2; break; } case 3: /* bent */ if (nx < 0.0) nx = nx * 2.0; if (ny < 0.0) ny = ny / 2.0; break; case 4: { /* swirl */ double r = (nx * nx + ny * ny); /* times k here is fun */ double c1 = sin(r); double c2 = cos(r); double t = nx; if (nx > 1e4 || nx < -1e4 || ny > 1e4 || ny < -1e4) ny = 1e4; else ny = c2 * t + c1 * ny; nx = c1 * nx - c2 * ny; break; } case 5: { /* horseshoe */ double r, c1, c2, t; /* Avoid atan2: DOMAIN error message */ if (nx == 0.0 && ny == 0.0) r = 0.0; else r = atan2(nx, ny); /* times k here is fun */ c1 = sin(r); c2 = cos(r); t = nx; nx = c1 * nx - c2 * ny; ny = c2 * t + c1 * ny; break; } case 6: { /* drape */ double t; /* Avoid atan2: DOMAIN error message */ if (nx == 0.0 && ny == 0.0) t = 0.0; else t = atan2(nx, ny) / M_PI; if (nx > 1e4 || nx < -1e4 || ny > 1e4 || ny < -1e4) ny = 1e4; else ny = sqrt(nx * nx + ny * ny) - 1.0; nx = t; break; } } #if 0 /* here are some others */ { /* broken */ if (nx > 1.0) nx = nx - 1.0; if (nx < -1.0) nx = nx + 1.0; if (ny > 1.0) ny = ny - 1.0; if (ny < -1.0) ny = ny + 1.0; break; } { /* complex sine */ double u = nx, v = ny; double ev = exp(v); double emv = exp(-v); nx = (ev + emv) * sin(u) / 2.0; ny = (ev - emv) * cos(u) / 2.0; } { /* polynomial */ if (nx < 0) nx = -nx * nx; else nx = nx * nx; if (ny < 0) ny = -ny * ny; else ny = ny * ny; } { /* spherical */ double r = 0.5 + sqrt(nx * nx + ny * ny + 1e-6); nx = nx / r; ny = ny / r; } { nx = atan(nx) / M_PI_2 ny = atan(ny) / M_PI_2 } #endif /* how to check nan too? some machines don't have finite(). don't need to check ny, it'll propogate */ if (nx > 1e4 || nx < -1e4) { nx = halfrandom(dp, 1000) / 500.0 - 1.0; ny = halfrandom(dp, 1000) / 500.0 - 1.0; dp->fuse = FUSE; } dp->x = nx; dp->y = ny; dp->c = nc; } static void draw(ModeInfo * mi, driftstruct * dp, Drawable d) { Display *display = MI_DISPLAY(mi); GC gc = MI_GC(mi); double x = dp->x; double y = dp->y; int fixed_x, fixed_y, npix, c, n; if (dp->fuse) { dp->fuse--; return; } if (!(x > -1.0 && x < 1.0 && y > -1.0 && y < 1.0)) return; fixed_x = (int) ((dp->width / 2) * (x + 1.0)); fixed_y = (int) ((dp->height / 2) * (y + 1.0)); if (!dp->rainbow) { dp->pts[dp->npoints].x = fixed_x; dp->pts[dp->npoints].y = fixed_y; dp->npoints++; if (dp->npoints == MAXBATCH1) { XSetForeground(display, gc, dp->pixcol); XDrawPoints(display, d, gc, dp->pts, dp->npoints, CoordModeOrigin); dp->npoints = 0; } } else { npix = MI_NPIXELS(mi); c = (int) (dp->c * npix); if (c < 0) c = 0; if (c >= npix) c = npix - 1; n = dp->ncpoints[c]; dp->cpts[c * MAXBATCH2 + n].x = fixed_x; dp->cpts[c * MAXBATCH2 + n].y = fixed_y; if (++dp->ncpoints[c] == MAXBATCH2) { XSetForeground(display, gc, MI_PIXEL(mi, c)); XDrawPoints(display, d, gc, &(dp->cpts[c * MAXBATCH2]), dp->ncpoints[c], CoordModeOrigin); dp->ncpoints[c] = 0; } } } static void draw_flush(ModeInfo * mi, driftstruct * dp, Drawable d) { Display *display = MI_DISPLAY(mi); GC gc = MI_GC(mi); if (dp->rainbow) { int npix = MI_NPIXELS(mi); int i; for (i = 0; i < npix; i++) { if (dp->ncpoints[i]) { XSetForeground(display, gc, MI_PIXEL(mi, i)); XDrawPoints(display, d, gc, &(dp->cpts[i * MAXBATCH2]), dp->ncpoints[i], CoordModeOrigin); dp->ncpoints[i] = 0; } } } else { if (dp->npoints) XSetForeground(display, gc, dp->pixcol); XDrawPoints(display, d, gc, dp->pts, dp->npoints, CoordModeOrigin); dp->npoints = 0; } } ENTRYPOINT void draw_drift(ModeInfo * mi) { Window window = MI_WINDOW(mi); driftstruct *dp; if (drifts == NULL) return; dp = &drifts[MI_SCREEN(mi)]; if (dp->ncpoints == NULL) return; if (dp->erase_countdown) { if (!--dp->erase_countdown) { dp->eraser = erase_window (MI_DISPLAY(mi), MI_WINDOW(mi), dp->eraser); } return; } if (dp->eraser) { dp->eraser = erase_window (MI_DISPLAY(mi), MI_WINDOW(mi), dp->eraser); return; } MI_IS_DRAWN(mi) = True; dp->timer = 3000; while (dp->timer) { iter(dp); draw(mi, dp, window); if (dp->total_points++ > dp->fractal_len) { draw_flush(mi, dp, window); if (0 == --dp->nfractals) { #ifdef STANDALONE dp->erase_countdown = 4 * 1000000 / MI_PAUSE(mi); #endif /* STANDALONE */ initmode(mi, frandom(dp, 2)); } initfractal(mi); } dp->timer--; } if (!dp->grow) { int i, j, k; draw_flush(mi, dp, window); if (dp->liss) dp->liss_time++; for (i = 0; i < dp->nxforms; i++) for (j = 0; j < 2; j++) for (k = 0; k < 3; k++) { if (dp->liss) dp->f[j][k][i] = sin(dp->liss_time * dp->df[j][k][i]); else { double t = dp->f[j][k][i] += dp->df[j][k][i]; if (t < -1.0 || 1.0 < t) dp->df[j][k][i] *= -1.0; } } } } ENTRYPOINT void release_drift(ModeInfo * mi) { if (drifts != NULL) { int screen; for (screen = 0; screen < MI_NUM_SCREENS(mi); screen++) free_drift(&drifts[screen]); (void) free((void *) drifts); drifts = (driftstruct *) NULL; } } ENTRYPOINT void reshape_drift(ModeInfo * mi, int width, int height) { MI_CLEARWINDOW(mi); init_drift (mi); } ENTRYPOINT void refresh_drift(ModeInfo * mi) { MI_CLEARWINDOW(mi); } ENTRYPOINT Bool drift_handle_event (ModeInfo *mi, XEvent *event) { if (screenhack_event_helper (MI_DISPLAY(mi), MI_WINDOW(mi), event)) { reshape_drift (mi, MI_WIDTH(mi), MI_HEIGHT(mi)); return True; } return False; } XSCREENSAVER_MODULE ("Drift", drift) #endif /* MODE_drift */ xscreensaver-5.36/hacks/flag.c000644 000767 000024 00000036472 12717746140 016331 0ustar00jwzstaff000000 000000 /* -*- Mode: C; tab-width: 4 -*- * flag --- a waving flag */ #if 0 static const char sccsid[] = "@(#)flag.c 4.02 97/04/01 xlockmore"; #endif /* Copyright (c) 1996 Charles Vidal . * PEtite demo X11 de charles vidal 15 05 96 * tourne sous Linux et SOLARIS * thank's to Bas van Gaalen, Holland, PD, for his sources * in pascal vous devez rajouter une ligne dans mode.c * * Permission to use, copy, modify, and distribute this software and its * documentation for any purpose and without fee is hereby granted, * provided that the above copyright notice appear in all copies and that * both that copyright notice and this permission notice appear in * supporting documentation. * * This file is provided AS IS with no warranties of any kind. The author * shall have no liability with respect to the infringement of copyrights, * trade secrets or any patents by this file or any part thereof. In no * event will the author be liable for any lost revenue or profits or * other special, indirect and consequential damages. * * Revision History: * 22-Jan-98: jwz: made the flag wigglier; added xpm support. * (I tried to do this by re-porting from xlockmore, but the * current xlockmore version is completely inscrutable.) * 13-May-97: jwz@jwz.org: turned into a standalone program. * Made it able to animate arbitrary (runtime) text or bitmaps. * 01-May-96: written. */ #ifdef HAVE_COCOA # define DEF_FONT "Monaco 15" #else # define DEF_FONT "fixed" #endif #ifdef STANDALONE # define DEFAULTS "*delay: 50000 \n" \ "*cycles: 1000 \n" \ "*size: -7 \n" \ "*ncolors: 200 \n" \ "*bitmap: \n" \ "*font: " DEF_FONT "\n" \ "*text: \n" \ "*fpsSolid: true \n" \ # define BRIGHT_COLORS # define UNIFORM_COLORS # define reshape_flag 0 # define flag_handle_event 0 # include "xlockmore.h" /* from the xscreensaver distribution */ #include "xpm-pixmap.h" #include "images/bob.xbm" #else /* !STANDALONE */ # include "xlock.h" /* from the xlockmore distribution */ # include "flag.h" #endif /* !STANDALONE */ #ifdef HAVE_UNAME # include #endif /* HAVE_UNAME */ #ifdef STANDALONE static XrmOptionDescRec opts[] = { { "-bitmap", ".flag.bitmap", XrmoptionSepArg, 0 }, { "-text", ".flag.text", XrmoptionSepArg, 0 } }; #endif /* STANDALONE */ ENTRYPOINT ModeSpecOpt flag_opts = { #ifdef STANDALONE 2, opts, 0, NULL, NULL #else /* !STANDALONE */ 0, NULL, 0, NULL, NULL #endif /* STANDALONE */ }; #define MINSIZE 1 #define MAXSCALE 8 #define MINSCALE 2 #define MAXINITSIZE 6 #define MININITSIZE 2 #define MINAMP 5 #define MAXAMP 20 #define MAXW(fp) (MAXSCALE * (fp)->image->width + 2 * MAXAMP + (fp)->pointsize) #define MAXH(fp) (MAXSCALE * (fp)->image->height+ 2 * MAXAMP + (fp)->pointsize) #define MINW(fp) (MINSCALE * (fp)->image->width + 2 * MINAMP + (fp)->pointsize) #define MINH(fp) (MINSCALE * (fp)->image->height+ 2 * MINAMP + (fp)->pointsize) #define ANGLES 360 typedef struct { int samp; int sofs; int sidx; int x_flag, y_flag; int timer; int initialized; int stab[ANGLES]; Bool dbufp; Pixmap cache; int width, height; int pointsize; float size; float inctaille; int startcolor; XImage *image; } flagstruct; static flagstruct *flags = NULL; static int random_num(int n) { return ((int) (((float) LRAND() / MAXRAND) * (n + 1.0))); } static void initSintab(ModeInfo * mi) { flagstruct *fp = &flags[MI_SCREEN(mi)]; int i; /*- * change the periodicity of the sin formula : the maximum of the * periocity seem to be 16 ( 2^4 ), after the drawing isn't good looking */ int periodicity = random_num(4); int puissance = 1; /* for (i=0;istab[i] = (int) (SINF(i * puissance * M_PI / ANGLES) * fp->samp) + fp->sofs; } static void affiche(ModeInfo * mi) { Display *display = MI_DISPLAY(mi); int x, y, xp, yp; flagstruct *fp = &flags[MI_SCREEN(mi)]; for (x = 0; x < fp->image->width; x++) for (y = fp->image->height-1; y >= 0; y--) { xp = (int) (fp->size * (float) x) + fp->stab[(fp->sidx + x + y) % ANGLES]; yp = (int) (fp->size * (float) y) + fp->stab[(fp->sidx + 4 * x + y + y) % ANGLES]; if (fp->image->depth > 1) XSetForeground(display, MI_GC(mi), XGetPixel(fp->image, x, y)); else if (XGetPixel(fp->image, x, y)) XSetForeground(display, MI_GC(mi), MI_WIN_BLACK_PIXEL(mi)); else if (MI_NPIXELS(mi) <= 2) XSetForeground(display, MI_GC(mi), MI_WIN_WHITE_PIXEL(mi)); else XSetForeground(display, MI_GC(mi), MI_PIXEL(mi, (y + x + fp->sidx + fp->startcolor) % MI_NPIXELS(mi))); if (fp->cache == MI_WINDOW(mi)) { /* not double-buffering */ xp += fp->x_flag; yp += fp->y_flag; } if (fp->pointsize <= 1) XDrawPoint(display, fp->cache, MI_GC(mi), xp, yp); else if (fp->pointsize < 6) XFillRectangle(display, fp->cache, MI_GC(mi), xp, yp, fp->pointsize, fp->pointsize); else XFillArc(display, fp->cache, MI_GC(mi), xp, yp, fp->pointsize, fp->pointsize, 0, 360*64); } } #ifdef STANDALONE static void make_flag_bits(ModeInfo *mi) { Display *dpy = MI_DISPLAY(mi); flagstruct *fp = &flags[MI_SCREEN(mi)]; char *bitmap_name = get_string_resource (dpy, "bitmap", "Bitmap"); char *text = get_string_resource (dpy, "text", "Text"); #ifdef HAVE_JWXYZ bitmap_name = 0; /* #### always use default */ #endif /* If neither a bitmap nor text are specified, randomly select either the builtin bitmap or builtin text. */ if ((!bitmap_name || !*bitmap_name) && (!text || !*text)) { if (random() & 1) { free(bitmap_name); bitmap_name = strdup("(default)"); } else { free(text); text = strdup("(default)"); } } if (bitmap_name && *bitmap_name && !!strcmp(bitmap_name, "(default)")) { Pixmap bitmap = 0; int width = 0; int height = 0; bitmap = xpm_file_to_pixmap (dpy, MI_WINDOW (mi), bitmap_name, &width, &height, 0); if (bitmap) { fp->image = XGetImage(dpy, bitmap, 0, 0, width, height, ~0L, ZPixmap); XFreePixmap(dpy, bitmap); } } else if (text && *text) { char *text2; char *fn = get_string_resource (dpy, "font", "Font"); char *def_fn = "fixed"; char *line, *token; int width, height; int lines; int margin = 2; int fg = 1; int bg = 0; Pixmap bitmap; XFontStruct *font; XCharStruct overall; XGCValues gcv; GC gc; if (!strcmp(text, "(default)")) { # ifdef HAVE_UNAME struct utsname uts; if (uname (&uts) < 0) { text = strdup("uname() failed"); } else { char *s; if ((s = strchr(uts.nodename, '.'))) *s = 0; text = (char *) malloc(strlen(uts.nodename) + strlen(uts.sysname) + strlen(uts.version) + strlen(uts.release) + 10); # if defined(_AIX) sprintf(text, "%s\n%s %s.%s", uts.nodename, uts.sysname, uts.version, uts.release); # elif defined(__APPLE__) && !defined(USE_IPHONE) /* MacOS X + XDarwin */ { const char *file = "/System/Library/CoreServices/SystemVersion.plist"; FILE *f = fopen (file, "r"); char *pbv = 0, *pn = 0, *puvv = 0; if (f) { char *s, buf[255]; while (fgets (buf, sizeof(buf)-1, f)) { # define GRAB(S,V) \ if (strstr(buf, S)) { \ fgets (buf, sizeof(buf)-1, f); \ if ((s = strchr (buf, '>'))) V = strdup(s+1); \ if ((s = strchr (V, '<'))) *s = 0; \ } GRAB ("ProductName", pn) GRAB ("ProductBuildVersion", pbv) GRAB ("ProductUserVisibleVersion", puvv) # undef GRAB } } if (pbv) sprintf (text, "%s\n%s\n%s", uts.nodename, pn, puvv /*, uts.machine*/); else sprintf(text, "%s\n%s %s", uts.nodename, uts.sysname, uts.release); } # else sprintf(text, "%s\n%s %s", uts.nodename, uts.sysname, uts.release); # endif /* special system types */ } #else /* !HAVE_UNAME */ # ifdef VMS text = strdup(getenv("SYS$NODE")); # else text = strdup("X\nScreen\nSaver"); # endif #endif /* !HAVE_UNAME */ } while (*text && (text[strlen(text)-1] == '\r' || text[strlen(text)-1] == '\n')) text[strlen(text)-1] = 0; text2 = strdup(text); if (!fn) fn = def_fn; font = XLoadQueryFont (dpy, fn); if (! font) { fprintf(stderr, "%s: unable to load font %s; using %s\n", progname, fn, def_fn); font = XLoadQueryFont (dpy, def_fn); } memset(&overall, 0, sizeof(overall)); token = text; lines = 0; while ((line = strtok(token, "\r\n"))) { XCharStruct o2; int ascent, descent, direction; token = 0; XTextExtents(font, line, strlen(line), &direction, &ascent, &descent, &o2); overall.lbearing = MAX(overall.lbearing, o2.lbearing); overall.rbearing = MAX(overall.rbearing, o2.rbearing); lines++; } width = overall.lbearing + overall.rbearing + margin + margin + 1; height = ((font->ascent + font->descent) * lines) + margin + margin; bitmap = XCreatePixmap(dpy, MI_WINDOW(mi), width, height, 1); gcv.font = font->fid; gcv.foreground = bg; gc = XCreateGC (dpy, bitmap, (GCFont | GCForeground), &gcv); XFillRectangle(dpy, bitmap, gc, 0, 0, width, height); XSetForeground(dpy, gc, fg); token = text2; lines = 0; while ((line = strtok(token, "\r\n"))) { XCharStruct o2; int ascent, descent, direction, xoff; token = 0; XTextExtents(font, line, strlen(line), &direction, &ascent, &descent, &o2); xoff = ((overall.lbearing + overall.rbearing) - (o2.lbearing + o2.rbearing)) / 2; XDrawString(dpy, bitmap, gc, overall.lbearing + margin + xoff, ((font->ascent * (lines + 1)) + (font->descent * lines) + margin), line, strlen(line)); lines++; } free(text2); XUnloadFont(dpy, font->fid); XFree((XPointer) font); XFreeGC(dpy, gc); fp->image = XGetImage(dpy, bitmap, 0, 0, width, height, 1L, XYPixmap); XFreePixmap(dpy, bitmap); } if (! fp->image) { char *bits = (char *) malloc (sizeof(bob_bits)); memcpy (bits, bob_bits, sizeof(bob_bits)); fp->image = XCreateImage (dpy, MI_VISUAL(mi), 1, XYBitmap, 0, bits, bob_width, bob_height, 8, 0); fp->image->byte_order = LSBFirst; fp->image->bitmap_bit_order = LSBFirst; } if (bitmap_name) free (bitmap_name); if (text) free (text); } #else /* !STANDALONE */ static void make_flag_bits(ModeInfo *mi) { flagstruct *fp = &flags[MI_SCREEN(mi)]; int x, y; int w = flag_width; int h = flag_height; int i = 0; fp->image = XCreateImage(MI_DISPLAY(mi), MI_VISUAL(mi), 1, XYBitmap, 0, /* dpth, fmt, offset */ (char *) calloc ((w+8) / 8, h), /* data */ w, h, 8, 0); /* w, h, pad, bpl */ /* Geez, what kinda goofy bit order is this?? */ for (x = 0; x < w; x++) for (y = h-1; y >= 0; y--) XPutPixel (fp->image, x, y, flag_bits[i++]); } #endif /* !STANDALONE */ ENTRYPOINT void init_flag(ModeInfo * mi) { Display *display = MI_DISPLAY(mi); int size = MI_SIZE(mi); flagstruct *fp; if (flags == NULL) { if ((flags = (flagstruct *) calloc(MI_NUM_SCREENS(mi), sizeof (flagstruct))) == NULL) return; } fp = &flags[MI_SCREEN(mi)]; make_flag_bits(mi); if (!fp->image) abort(); fp->width = MI_WIN_WIDTH(mi); fp->height = MI_WIN_HEIGHT(mi); fp->samp = MAXAMP; /* Amplitude */ fp->sofs = 20; /* ???????? */ fp->pointsize = size; if (size < -MINSIZE) fp->pointsize = NRAND(-size - MINSIZE + 1) + MINSIZE; if (fp->pointsize < MINSIZE || fp->width <= MAXW(fp) || fp->height <= MAXH(fp)) fp->pointsize = MINSIZE; fp->size = MAXINITSIZE; /* Initial distance between pts */ fp->inctaille = 0.05; fp->timer = 0; fp->sidx = fp->x_flag = fp->y_flag = 0; if (!fp->initialized) { fp->dbufp = True; # ifdef HAVE_JWXYZ /* Don't second-guess Quartz's double-buffering */ fp->dbufp = False; #endif fp->initialized = True; if (!fp->dbufp) fp->cache = MI_WINDOW(mi); /* not double-buffering */ else if (!(fp->cache = XCreatePixmap(display, MI_WINDOW(mi), MAXW(fp), MAXH(fp), MI_WIN_DEPTH(mi)))) #ifdef STANDALONE exit(-1); #else /* !STANDALONE */ error("%s: catastrophe memoire\n"); #endif /* !STANDALONE */ } XSetForeground(display, MI_GC(mi), MI_WIN_BLACK_PIXEL(mi)); XFillRectangle(display, fp->cache, MI_GC(mi), 0, 0, MAXW(fp), MAXH(fp)); /* don't want any exposure events from XCopyArea */ XSetGraphicsExposures(display, MI_GC(mi), False); if (MI_NPIXELS(mi) > 2) fp->startcolor = NRAND(MI_NPIXELS(mi)); if (fp->width <= MAXW(fp) || fp->height <= MAXH(fp)) { fp->samp = MINAMP; fp->sofs = 0; fp->x_flag = random_num(fp->width - MINW(fp)); fp->y_flag = random_num(fp->height - MINH(fp)); } else { fp->samp = MAXAMP; fp->sofs = 20; fp->x_flag = random_num(fp->width - MAXW(fp)); fp->y_flag = random_num(fp->height - MAXH(fp)); } initSintab(mi); XClearWindow(display, MI_WINDOW(mi)); } ENTRYPOINT void release_flag(ModeInfo * mi); ENTRYPOINT void draw_flag(ModeInfo * mi) { Display *display = MI_DISPLAY(mi); Window window = MI_WINDOW(mi); flagstruct *fp = &flags[MI_SCREEN(mi)]; if (!fp->image) abort(); if (fp->cache == window) { /* not double-buffering */ XClearWindow (display, window); } else if (fp->width <= MAXW(fp) || fp->height <= MAXH(fp)) { fp->size = MININITSIZE; /* fp->pointsize = MINPOINTSIZE; */ XCopyArea(display, fp->cache, window, MI_GC(mi), 0, 0, MINW(fp), MINH(fp), fp->x_flag, fp->y_flag); } else { if ((fp->size + fp->inctaille) > MAXSCALE) fp->inctaille = -fp->inctaille; if ((fp->size + fp->inctaille) < MINSCALE) fp->inctaille = -fp->inctaille; fp->size += fp->inctaille; XCopyArea(display, fp->cache, window, MI_GC(mi), 0, 0, MAXW(fp), MAXH(fp), fp->x_flag, fp->y_flag); } XSetForeground(MI_DISPLAY(mi), MI_GC(mi), MI_WIN_BLACK_PIXEL(mi)); XFillRectangle(display, fp->cache, MI_GC(mi), 0, 0, MAXW(fp), MAXH(fp)); affiche(mi); fp->sidx += 2; fp->sidx %= (ANGLES * MI_NPIXELS(mi)); fp->timer++; if ((MI_CYCLES(mi) > 0) && (fp->timer >= MI_CYCLES(mi))) { release_flag(mi); init_flag(mi); } } ENTRYPOINT void release_flag(ModeInfo * mi) { if (flags != NULL) { int screen; for (screen = 0; screen < MI_NUM_SCREENS(mi); screen++) { if (flags[screen].cache && flags[screen].dbufp) XFreePixmap(MI_DISPLAY(mi), flags[screen].cache); if (flags[screen].image) XDestroyImage(flags[screen].image); } (void) free((void *) flags); flags = NULL; } } ENTRYPOINT void refresh_flag(ModeInfo * mi) { /* Do nothing, it will refresh by itself */ } XSCREENSAVER_MODULE ("Flag", flag) xscreensaver-5.36/hacks/flame.c000644 000767 000024 00000026365 12710314233 016467 0ustar00jwzstaff000000 000000 /* xscreensaver, Copyright (c) 1993-2014 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 file was ported from xlock for use in xscreensaver (and standalone) * by jwz on 18-Oct-93. (And again, 11-May-97.) Original copyright reads: * * static char sccsid[] = "@(#)flame.c 1.4 91/09/27 XLOCK"; * * flame.c - recursive fractal cosmic flames. * * Copyright (c) 1991 by Patrick J. Naughton. * * Permission to use, copy, modify, and distribute this software and its * documentation for any purpose and without fee is hereby granted, * provided that the above copyright notice appear in all copies and that * both that copyright notice and this permission notice appear in * supporting documentation. * * This file is provided AS IS with no warranties of any kind. The author * shall have no liability with respect to the infringement of copyrights, * trade secrets or any patents by this file or any part thereof. In no * event will the author be liable for any lost revenue or profits or * other special, indirect and consequential damages. * * Comments and additions should be sent to the author: * * naughton@eng.sun.com * * Patrick J. Naughton * MS 21-14 * Sun Laboritories, Inc. * 2550 Garcia Ave * Mountain View, CA 94043 * * Revision History: * 01-Jun-95: This should look more like the original with some updates by * Scott Draves. * 27-Jun-91: vary number of functions used. * 24-Jun-91: fixed portability problem with integer mod (%). * 06-Jun-91: Written. (received from Scott Draves, spot@cs.cmu.edu). */ #include #include "screenhack.h" #include /* so we can ignore SIGFPE */ #define POINT_BUFFER_SIZE 10 #define MAXLEV 4 #define MAXKINDS 10 struct state { Display *dpy; Window window; double f[2][3][MAXLEV]; /* three non-homogeneous transforms */ int max_total; int max_levels; int max_points; int cur_level; int variation; int snum; int anum; int num_points; int total_points; int pixcol; int ncolors; XColor *colors; XPoint points [POINT_BUFFER_SIZE]; GC gc; int delay, delay2; int width, height; short lasthalf; int flame_alt; int do_reset; }; static short halfrandom (struct state *st, int mv) { unsigned long r; if (st->lasthalf) { r = st->lasthalf; st->lasthalf = 0; } else { r = random (); st->lasthalf = r >> 16; } return (r % mv); } static void * flame_init (Display *dpy, Window window) { struct state *st = (struct state *) calloc (1, sizeof(*st)); XGCValues gcv; XWindowAttributes xgwa; Colormap cmap; st->dpy = dpy; st->window = window; #if defined(SIGFPE) && defined(SIG_IGN) /* No doubt a better fix would be to track down where the NaN is coming from, and code around that; but this should do. Apparently most systems (Linux, Solaris, Irix, ...) ignore FPE by default -- but FreeBSD dumps core by default. */ signal (SIGFPE, SIG_IGN); #endif XGetWindowAttributes (st->dpy, st->window, &xgwa); st->width = xgwa.width; st->height = xgwa.height; cmap = xgwa.colormap; st->max_points = get_integer_resource (st->dpy, "iterations", "Integer"); if (st->max_points <= 0) st->max_points = 100; st->max_levels = st->max_points; st->max_total = get_integer_resource (st->dpy, "points", "Integer"); if (st->max_total <= 0) st->max_total = 10000; st->delay = get_integer_resource (st->dpy, "delay", "Integer"); if (st->delay < 0) st->delay = 0; st->delay2 = get_integer_resource (st->dpy, "delay2", "Integer"); if (st->delay2 < 0) st->delay2 = 0; st->variation = random() % MAXKINDS; if (mono_p) st->ncolors = 0; else { st->ncolors = get_integer_resource (st->dpy, "colors", "Integer"); if (st->ncolors <= 0) st->ncolors = 128; st->colors = (XColor *) malloc ((st->ncolors+1) * sizeof (*st->colors)); make_smooth_colormap (xgwa.screen, xgwa.visual, xgwa.colormap, st->colors, &st->ncolors, True, 0, True); if (st->ncolors <= 2) mono_p = True, st->ncolors = 0; } gcv.foreground = get_pixel_resource (st->dpy, cmap, "foreground", "Foreground"); gcv.background = get_pixel_resource (st->dpy, cmap, "background", "Background"); if (! mono_p) { st->pixcol = halfrandom (st, st->ncolors); gcv.foreground = (st->colors [st->pixcol].pixel); } st->gc = XCreateGC (st->dpy, st->window, GCForeground | GCBackground, &gcv); return st; } static int recurse (struct state *st, double x, double y, int l, Display *dpy, Window win) { int i; double nx, ny; if (l == st->max_levels) { st->total_points++; if (st->total_points > st->max_total) /* how long each fractal runs */ return 0; if (x > -1.0 && x < 1.0 && y > -1.0 && y < 1.0) { st->points[st->num_points].x = (int) ((st->width / 2) * (x + 1.0)); st->points[st->num_points].y = (int) ((st->height / 2) * (y + 1.0)); st->num_points++; if (st->num_points >= POINT_BUFFER_SIZE) { XDrawPoints (st->dpy, win, st->gc, st->points, st->num_points, CoordModeOrigin); st->num_points = 0; } } } else { for (i = 0; i < st->snum; i++) { /* Scale back when values get very large. Spot sez: "I think this happens on HPUX. I think it's non-IEEE to generate an exception instead of a silent NaN." */ if ((fabs(x) > 1.0E5) || (fabs(y) > 1.0E5)) x = x / y; nx = st->f[0][0][i] * x + st->f[0][1][i] * y + st->f[0][2][i]; ny = st->f[1][0][i] * x + st->f[1][1][i] * y + st->f[1][2][i]; if (i < st->anum) { switch (st->variation) { case 0: /* sinusoidal */ nx = sin(nx); ny = sin(ny); break; case 1: /* complex */ { double r2 = nx * nx + ny * ny + 1e-6; nx = nx / r2; ny = ny / r2; } break; case 2: /* bent */ if (nx < 0.0) nx = nx * 2.0; if (ny < 0.0) ny = ny / 2.0; break; case 3: /* swirl */ { double r = (nx * nx + ny * ny); /* times k here is fun */ double c1 = sin(r); double c2 = cos(r); double t = nx; if (nx > 1e4 || nx < -1e4 || ny > 1e4 || ny < -1e4) ny = 1e4; else ny = c2 * t + c1 * ny; nx = c1 * nx - c2 * ny; } break; case 4: /* horseshoe */ { double r, c1, c2, t; /* Avoid atan2: DOMAIN error message */ if (nx == 0.0 && ny == 0.0) r = 0.0; else r = atan2(nx, ny); /* times k here is fun */ c1 = sin(r); c2 = cos(r); t = nx; nx = c1 * nx - c2 * ny; ny = c2 * t + c1 * ny; } break; case 5: /* drape */ { double t; /* Avoid atan2: DOMAIN error message */ if (nx == 0.0 && ny == 0.0) t = 0.0; else t = atan2(nx, ny) / M_PI; if (nx > 1e4 || nx < -1e4 || ny > 1e4 || ny < -1e4) ny = 1e4; else ny = sqrt(nx * nx + ny * ny) - 1.0; nx = t; } break; case 6: /* broken */ if (nx > 1.0) nx = nx - 1.0; if (nx < -1.0) nx = nx + 1.0; if (ny > 1.0) ny = ny - 1.0; if (ny < -1.0) ny = ny + 1.0; break; case 7: /* spherical */ { double r = 0.5 + sqrt(nx * nx + ny * ny + 1e-6); nx = nx / r; ny = ny / r; } break; case 8: /* */ nx = atan(nx) / M_PI_2; ny = atan(ny) / M_PI_2; break; /* #if 0 */ /* core dumps on some machines, why not all? */ case 9: /* complex sine */ { double u = nx; double v = ny; double ev = exp(v); double emv = exp(-v); nx = (ev + emv) * sin(u) / 2.0; ny = (ev - emv) * cos(u) / 2.0; } break; case 10: /* polynomial */ if (nx < 0) nx = -nx * nx; else nx = nx * nx; if (ny < 0) ny = -ny * ny; else ny = ny * ny; break; /* #endif */ default: nx = sin(nx); ny = sin(ny); } } if (!recurse (st, nx, ny, l + 1, st->dpy, win)) return 0; } } return 1; } static unsigned long flame_draw (Display *dpy, Window window, void *closure) { struct state *st = (struct state *) closure; int i, j, k; unsigned long this_delay = st->delay; if (st->do_reset) { st->do_reset = 0; XClearWindow (st->dpy, st->window); } if (!(st->cur_level++ % st->max_levels)) { st->do_reset = 1; this_delay = st->delay2; st->flame_alt = !st->flame_alt; st->variation = random() % MAXKINDS; } else { if (st->ncolors > 2) { XSetForeground (st->dpy, st->gc, st->colors [st->pixcol].pixel); if (--st->pixcol < 0) st->pixcol = st->ncolors - 1; } } /* number of functions */ st->snum = 2 + (st->cur_level % (MAXLEV - 1)); /* how many of them are of alternate form */ if (st->flame_alt) st->anum = 0; else st->anum = halfrandom (st, st->snum) + 2; /* 6 coefs per function */ for (k = 0; k < st->snum; k++) { for (i = 0; i < 2; i++) for (j = 0; j < 3; j++) st->f[i][j][k] = ((double) (random() & 1023) / 512.0 - 1.0); } st->num_points = 0; st->total_points = 0; recurse (st, 0.0, 0.0, 0, st->dpy, st->window); XDrawPoints (st->dpy, st->window, st->gc, st->points, st->num_points, CoordModeOrigin); return this_delay; } #if defined(__hpux) && defined(PLOSS) /* I don't understand why this is necessary, but I'm told that this program does nothing at all on HP-sUX without it. I'm further told that HPUX 11.0 doesn't define PLOSS, and works ok without this section. Go figure. */ #undef random #undef srandom #include int matherr(x) register struct exception *x; { if (x->type == PLOSS) return 1; else return 0; } #endif /* __hpux */ static const char *flame_defaults [] = { ".background: black", ".foreground: white", "*fpsSolid: true", "*colors: 64", "*iterations: 25", "*delay: 50000", "*delay2: 2000000", "*points: 10000", #ifdef HAVE_MOBILE "*ignoreRotation: True", #endif 0 }; static XrmOptionDescRec flame_options [] = { { "-colors", ".colors", XrmoptionSepArg, 0 }, { "-iterations", ".iterations", XrmoptionSepArg, 0 }, { "-delay", ".delay", XrmoptionSepArg, 0 }, { "-delay2", ".delay2", XrmoptionSepArg, 0 }, { "-points", ".points", XrmoptionSepArg, 0 }, { 0, 0, 0, 0 } }; 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 flame_event (Display *dpy, Window window, void *closure, XEvent *event) { struct state *st = (struct state *) closure; if (screenhack_event_helper (dpy, window, event)) { st->do_reset = 1; return True; } return False; } static void flame_free (Display *dpy, Window window, void *closure) { struct state *st = (struct state *) closure; free (st); } XSCREENSAVER_MODULE ("Flame", flame) xscreensaver-5.36/hacks/forest.c000644 000767 000024 00000017047 12701612216 016704 0ustar00jwzstaff000000 000000 /* forest.c (aka xtree.c), Copyright (c) 1999 * Peter Baumung * * Most code taken from * xscreensaver, Copyright (c) 1992, 1995, 1997 * 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. */ #ifdef HAVE_CONFIG_H # include "config.h" #endif /* ****************************** NOTE ****************************** This is not the xlockmore version of forest, but a much better looking rewrite. Be careful not to delete it in a merging frenzy... ********************************************************************** */ #ifdef STANDALONE # define DEFAULTS "*delay: 500000 \n" \ "*ncolors: 20 \n" \ "*fpsSolid: true \n" \ # include "xlockmore.h" /* from the xscreensaver distribution */ # define refresh_trees 0 # define reshape_trees 0 # define trees_handle_event 0 #else /* !STANDALONE */ # include "xlock.h" /* from the xlockmore distribution */ #endif /* !STANDALONE */ ENTRYPOINT ModeSpecOpt trees_opts = {0, NULL, 0, NULL, NULL}; typedef struct { int x; int y; int thick; double size; long color; int toDo; int pause; int season; } treestruct; static treestruct *trees = NULL; static XColor colors[20]; static int color; static long colorM[12] = {0xff0000, 0xff8000, 0xffff00, 0x80ff00, 0x00ff00, 0x00ff80, 0x00ffff, 0x0080ff, 0x0000ff, 0x8000ff, 0xff00ff, 0xff0080}; static long colorV[12] = {0x0a0000, 0x0a0500, 0x0a0a00, 0x050a00, 0x000a00, 0x000a05, 0x000a0a, 0x00050a, 0x00000a, 0x05000a, 0x0a000a, 0x0a0005}; ENTRYPOINT void init_trees(ModeInfo * mi) { unsigned long pixels[20]; treestruct *tree; Display *display = MI_DISPLAY(mi); GC gc = MI_GC(mi); int i; if (trees == NULL) { trees = (treestruct *) calloc(MI_NUM_SCREENS(mi), sizeof (treestruct)); if (trees == NULL) { return; } if (mi->npixels > 20) { printf("%d colors selected. Setting limit to 20...\n", mi->npixels); mi->npixels = 20; } if (mi->npixels < 4) { for (i = 0; i < mi->npixels; i++) { colors[i].red = 65535 * (i & 1); colors[i].green = 65535 * (i & 1); colors[i].blue = 65535 * (i & 1); colors[i].flags = DoRed | DoGreen | DoBlue; } } else { if (mi->npixels < 8) { for (i = 0; i < mi->npixels; i++) { colors[i].red = 32768 + 4096 * (i % 4); colors[i].green = 32768 + 4096 * (i % 4); colors[i].blue = 32768 + 4096 * (i % 4); colors[i].flags = DoRed | DoGreen | DoBlue; } } else { for (i = 0; i < mi->npixels; i++) { colors[i].red = 24576 + 4096 * (i % 4); colors[i].green = 10240 + 2048 * (i % 4); colors[i].blue = 0; colors[i].flags = DoRed | DoGreen | DoBlue; } } } for (i = 0; i < mi->npixels; i++) if (!XAllocColor(display, mi->xgwa.colormap, &colors[i])) break; color = i; XSetForeground(display, gc, colors[1].pixel); } XClearWindow(display, MI_WINDOW(mi)); XSetLineAttributes(display, gc, 2, LineSolid, CapButt, JoinMiter); tree = &trees[MI_SCREEN(mi)]; tree->toDo = 25; tree->season = NRAND(12); for (i = 4; i < mi->npixels; i++) { int sIndex = (tree->season + (i-4) / 4) % 12; long color = colorM[sIndex] - 2 * colorV[sIndex] * (i % 4); colors[i].red = (color & 0xff0000) / 256; colors[i].green = (color & 0x00ff00); colors[i].blue = (color & 0x0000ff) * 256; colors[i].flags = DoRed | DoGreen | DoBlue; } for (i = 0; i < color; i++) pixels[i] = colors[i].pixel; XFreeColors(display, mi->xgwa.colormap, pixels, mi->npixels, 0L); for (i = 0; i < mi->npixels; i++) if (!XAllocColor(display, mi->xgwa.colormap, &colors[i])) break; color = i; } static double rRand(double a, double b) { return (a+(b-a)*NRAND(10001)/10000.0); } static void draw_line(ModeInfo * mi, int x1, int y1, int x2, int y2, double angle, int widths, int widthe) { Display *display = MI_DISPLAY(mi); GC gc = MI_GC(mi); double sns = 0.5*widths*sin(angle + M_PI_2); double css = 0.5*widths*cos(angle + M_PI_2); double sne = 0.5*widthe*sin(angle + M_PI_2); double cse = 0.5*widthe*cos(angle + M_PI_2); int xs1 = (int) (x1-sns); int xs2 = (int) (x1+sns); int ys1 = (int) (y1-css); int ys2 = (int) (y1+css); int xe1 = (int) (x2-sne); int xe2 = (int) (x2+sne); int ye1 = (int) (y2-cse); int ye2 = (int) (y2+cse); int i; for (i = 0; i < widths; i++) { if (color >= 4) XSetForeground(display, gc, colors[i*4/widths].pixel); XDrawLine(display, MI_WINDOW(mi), gc, xs1+(xs2-xs1)*i/widths, ys1+(ys2-ys1)*i/widths, xe1+(xe2-xe1)*i/widths, ye1+(ye2-ye1)*i/widths); } } static void draw_tree_rec(ModeInfo * mi, double thick, int x, int y, double angle) { treestruct *tree = &trees[MI_SCREEN(mi)]; Display *display = MI_DISPLAY(mi); GC gc = MI_GC(mi); int length = (24+NRAND(12))*tree->size; int a = (int) (x - length*sin(angle)); int b = (int) (y - length*cos(angle)); int i; draw_line(mi, x, y, a, b, angle, thick*tree->size, 0.68*thick*tree->size); if (thick > 2) { draw_tree_rec(mi, 0.68*thick, a, b, 0.8*angle+rRand(-0.2, 0.2)); if (thick < tree->thick-1) { draw_tree_rec(mi, 0.68*thick, a, b, angle+rRand(0.2, 0.9)); draw_tree_rec(mi, 0.68*thick, (a+x)/2, (b+y)/2, angle-rRand(0.2, 0.9)); } } if (thick < 0.5*tree->thick) { int nleaf = 12 + NRAND(4); XArc leaf[16]; for (i = 0; i < nleaf; i++) { leaf[i].x = a + (int) (tree->size * rRand(-12, 12)); leaf[i].y = b + (int) (tree->size * rRand(-12, 12)); leaf[i].width = (int) (tree->size * rRand(2, 6)); leaf[i].height = leaf[i].width; leaf[i].angle1 = 0; leaf[i].angle2 = 360 * 64; } if (mi->npixels >= 4) XSetForeground(display, gc, colors[tree->color+NRAND(4)].pixel); XFillArcs(display, MI_WINDOW(mi), gc, leaf, nleaf); } } ENTRYPOINT void draw_trees(ModeInfo * mi) { treestruct *tree = &trees[MI_SCREEN(mi)]; int width = MI_WIN_WIDTH(mi); int height = MI_WIN_HEIGHT(mi); if (tree->pause == 1) { tree->pause--; init_trees(mi); } else if (tree->pause > 1) { tree->pause--; return; } else if (--(tree->toDo) == 0) { tree->pause = 6; return; } tree->x = NRAND(width); tree->y = (int) (1.25 * height * (1 - tree->toDo / 23.0)); tree->thick = rRand(7, 12); tree->size = height / 480.0; if (color < 8) { tree->color = 0; } else { tree->color = 4 * (1 + NRAND(color / 4 - 1)); } draw_tree_rec(mi, tree->thick, tree->x, tree->y, rRand(-0.1, 0.1)); } ENTRYPOINT void release_trees(ModeInfo * mi) { if (trees != NULL) { (void) free((void *) trees); trees = NULL; } } XSCREENSAVER_MODULE_2 ("Forest", forest, trees) xscreensaver-5.36/hacks/vines.c000644 000767 000024 00000012202 12701612217 016513 0ustar00jwzstaff000000 000000 /* -*- Mode: C; tab-width: 4 -*- */ /* vines --- vine fractals */ #if 0 static const char sccsid[] = "@(#)vines.c 5.00 2000/11/01 xlockmore"; #endif /*- * Copyright (c) 1997 by Tracy Camp campt@hurrah.com * * Permission to use, copy, modify, and distribute this software and its * documentation for any purpose and without fee is hereby granted, * provided that the above copyright notice appear in all copies and that * both that copyright notice and this permission notice appear in * supporting documentation. * * This file is provided AS IS with no warranties of any kind. The author * shall have no liability with respect to the infringement of copyrights, * trade secrets or any patents by this file or any part thereof. In no * event will the author be liable for any lost revenue or profits or * other special, indirect and consequential damages. * * If you make a modification I would of course appreciate a copy. * * Revision History: * 01-Nov-2000: Allocation checks * 11-Jul-1997: David Hansen * Changed names to vines and modified draw loop * to honor batchcount so vines can be grown or plotted. * 10-May-1997: Compatible with xscreensaver * 21-Mar-1997: David Hansen * Updated mode to draw complete patterns on every * iteration instead of growing the vine. Also made * adjustments to randomization and changed variable * names to make logic easier to follow. */ /*- * This was modifed from a 'screen saver' that a friend and I * wrote on our TI-8x calculators in high school physics one day * Basically another geometric pattern generator, this ones claim * to fame is a pseudo-fractal looking vine like pattern that creates * nifty whorls and loops. */ #ifdef STANDALONE # define MODE_vines # define DEFAULTS "*delay: 200000 \n" \ "*count: 0 \n" \ "*ncolors: 64 \n" \ "*fpsSolid: true \n" \ # include "xlockmore.h" /* in xscreensaver distribution */ # define reshape_vines 0 # define vines_handle_event 0 # include "erase.h" #else /* STANDALONE */ # include "xlock.h" /* in xlockmore distribution */ #endif /* STANDALONE */ #ifdef MODE_vines ENTRYPOINT ModeSpecOpt vines_opts = {0, (XrmOptionDescRec *) NULL, 0, (argtype *) NULL, (OptionStruct *) NULL}; #ifdef USE_MODULES ModStruct vines_description = {"vines", "init_vines", "draw_vines", "release_vines", "refresh_vines", "init_vines", (char *) NULL, &vines_opts, 200000, 0, 1, 1, 64, 1.0, "", "Shows fractals", 0, NULL}; #endif typedef struct { int a; int x1; int y1; int x2; int y2; int i; int length; int iterations; int constant; int ang; int centerx; int centery; #ifdef STANDALONE eraser_state *eraser; #endif } vinestruct; static vinestruct *vines = (vinestruct *) NULL; ENTRYPOINT void refresh_vines(ModeInfo * mi) { MI_CLEARWINDOW(mi); } /* refresh_vines */ ENTRYPOINT void init_vines(ModeInfo * mi) { vinestruct *fp; if (vines == NULL) { if ((vines = (vinestruct *) calloc(MI_NUM_SCREENS(mi), sizeof (vinestruct))) == NULL) { return; } } fp = &vines[MI_SCREEN(mi)]; fp->i = 0; fp->length = 0; fp->iterations = 30 + NRAND(100); #ifndef STANDALONE MI_CLEARWINDOW(mi); #endif } /* init_vines */ ENTRYPOINT void draw_vines(ModeInfo * mi) { Display *display = MI_DISPLAY(mi); GC gc = MI_GC(mi); int count; vinestruct *fp; if (vines == NULL) return; fp = &vines[MI_SCREEN(mi)]; #ifdef STANDALONE if (fp->eraser) { fp->eraser = erase_window (MI_DISPLAY(mi), MI_WINDOW(mi), fp->eraser); return; } #endif /* MI_IS_DRAWN(mi) = True; */ if (fp->i >= fp->length) { if (--(fp->iterations) == 0) { #ifdef STANDALONE fp->eraser = erase_window (MI_DISPLAY(mi), MI_WINDOW(mi), fp->eraser); #endif /* STANDALONE */ init_vines(mi); } fp->centerx = NRAND(MI_WIDTH(mi)); fp->centery = NRAND(MI_HEIGHT(mi)); fp->ang = 60 + NRAND(720); fp->length = 100 + NRAND(3000); fp->constant = fp->length * (10 + NRAND(10)); fp->i = 0; fp->a = 0; fp->x1 = 0; fp->y1 = 0; fp->x2 = 1; fp->y2 = 0; if (MI_NPIXELS(mi) > 2) XSetForeground(display, gc, MI_PIXEL(mi, NRAND(MI_NPIXELS(mi)))); else XSetForeground(display, gc, MI_WHITE_PIXEL(mi)); } count = fp->i + MI_COUNT(mi); if ((count <= fp->i) || (count > fp->length)) count = fp->length; while (fp->i < count) { XDrawLine(display, MI_WINDOW(mi), gc, fp->centerx + (fp->x1 / fp->constant), fp->centery - (fp->y1 / fp->constant), fp->centerx + (fp->x2 / fp->constant), fp->centery - (fp->y2 / fp->constant)); fp->a += (fp->ang * fp->i); fp->x1 = fp->x2; fp->y1 = fp->y2; fp->x2 += (int) (fp->i * (cos((double) fp->a) * 360.0) / (2.0 * M_PI)); fp->y2 += (int) (fp->i * (sin((double) fp->a) * 360.0) / (2.0 * M_PI)); fp->i++; } } /* draw_vines */ ENTRYPOINT void release_vines(ModeInfo * mi) { if (vines != NULL) { (void) free((void *) vines); vines = (vinestruct *) NULL; } } /* release_vines */ XSCREENSAVER_MODULE ("Vines", vines) #endif /* MODE_vines */ xscreensaver-5.36/hacks/galaxy.c000644 000767 000024 00000032021 12717746354 016676 0ustar00jwzstaff000000 000000 /* -*- Mode: C; tab-width: 4 -*- */ /* galaxy --- spinning galaxies */ /* #include*/ #if 0 static const char sccsid[] = "@(#)galaxy.c 4.04 97/07/28 xlockmore"; #endif /* Originally done by Uli Siegmund on Amiga * for EGS in Cluster * Port from Cluster/EGS to C/Intuition by Harald Backert * Port to X11 and incorporation into xlockmore by Hubert Feyrer * * * Permission to use, copy, modify, and distribute this software and its * documentation for any purpose and without fee is hereby granted, * provided that the above copyright notice appear in all copies and that * both that copyright notice and this permission notice appear in * supporting documentation. * * This file is provided AS IS with no warranties of any kind. The author * shall have no liability with respect to the infringement of copyrights, * trade secrets or any patents by this file or any part thereof. In no * event will the author be liable for any lost revenue or profits or * other special, indirect and consequential damages. * * Revision History: * 26-Aug-00: robert.nagtegaal@phil.uu.nl and roland@tschai.demon.nl: * various improvements * 10-May-97: jwz@jwz.org: turned into a standalone program. * 18-Apr-97: Memory leak fixed by Tom Schmidt * 07-Apr-97: Modified by Dave Mitchell * 23-Oct-94: Modified by David Bagley * random star sizes * colors change depending on velocity * 10-Oct-94: Add colors by Hubert Feyer * 30-Sep-94: Initial port by Hubert Feyer * 09-Mar-94: VMS can generate a random number 0.0 which results in a * division by zero, corrected by Jouk Jansen * */ #ifdef STANDALONE # define DEFAULTS "*delay: 20000 \n" \ "*count: -5 \n" \ "*cycles: 250 \n" \ "*ncolors: 64 \n" \ "*fpsSolid: true \n" \ "*ignoreRotation: True \n" \ # define UNIFORM_COLORS # include "xlockmore.h" /* from the xscreensaver distribution */ #else /* !STANDALONE */ # include "xlock.h" /* from the xlockmore distribution */ #endif /* !STANDALONE */ static Bool tracks; static Bool spin; static Bool dbufp; #define DEF_TRACKS "True" #define DEF_SPIN "True" #define DEF_DBUF "True" static XrmOptionDescRec opts[] = { {"-tracks", ".galaxy.tracks", XrmoptionNoArg, "on"}, {"+tracks", ".galaxy.tracks", XrmoptionNoArg, "off"}, {"-spin", ".galaxy.spin", XrmoptionNoArg, "on"}, {"+spin", ".galaxy.spin", XrmoptionNoArg, "off"}, {"-dbuf", ".galaxy.dbuf", XrmoptionNoArg, "on"}, {"+dbuf", ".galaxy.dbuf", XrmoptionNoArg, "off"}, }; static argtype vars[] = { {&tracks, "tracks", "Tracks", DEF_TRACKS, t_Bool}, {&spin, "spin", "Spin", DEF_SPIN, t_Bool}, {&dbufp, "dbuf", "Dbuf", DEF_DBUF, t_Bool}, }; static OptionStruct desc[] = { {"-/+tracks", "turn on/off star tracks"}, {"-/+spin", "do/don't spin viewpoint"}, {"-/+dbuf", "turn on/off double buffering."}, }; ENTRYPOINT ModeSpecOpt galaxy_opts = {sizeof opts / sizeof opts[0], opts, sizeof vars / sizeof vars[0], vars, desc}; #define FLOATRAND ((double) LRAND() / ((double) MAXRAND)) #if 0 #define WRAP 1 /* Warp around edges */ #define BOUNCE 1 /* Bounce from borders */ #endif #define MINSIZE 1 #define MINGALAXIES 2 #define MAX_STARS 3000 #define MAX_IDELTAT 50 /* These come originally from the Cluster-version */ #define DEFAULT_GALAXIES 3 #define DEFAULT_STARS 1000 #define DEFAULT_HITITERATIONS 7500 #define DEFAULT_IDELTAT 200 /* 0.02 */ #define EPSILON 0.00000001 #define sqrt_EPSILON 0.0001 #define DELTAT (MAX_IDELTAT * 0.0001) #define GALAXYRANGESIZE 0.1 #define GALAXYMINSIZE 0.15 #define QCONS 0.001 #define COLORBASE 16 /* colors per galaxy */ /* #define COLORSTEP (NUMCOLORS/COLORBASE) */ # define COLORSTEP (MI_NCOLORS(mi)/COLORBASE) typedef struct { double pos[3], vel[3]; } Star; typedef struct { int mass; int nstars; Star *stars; XPoint *oldpoints; XPoint *newpoints; double pos[3], vel[3]; int galcol; } Galaxy; typedef struct { double mat[3][3]; /* Movement of stars(?) */ double scale; /* Scale */ int midx; /* Middle of screen, x */ int midy; /* Middle of screen, y */ double size; /* */ double diff[3]; /* */ Galaxy *galaxies; /* the Whole Universe */ int ngalaxies; /* # galaxies */ int f_hititerations; /* # iterations before restart */ int step; /* */ double rot_y; /* rotation of eye around center of universe, around y-axis*/ double rot_x; /* rotation of eye around center of universe, around x-axis */ } unistruct; static unistruct *universes = NULL; static void free_galaxies(unistruct * gp) { if (gp->galaxies != NULL) { int i; for (i = 0; i < gp->ngalaxies; i++) { Galaxy *gt = &gp->galaxies[i]; if (gt->stars != NULL) (void) free((void *) gt->stars); if (gt->oldpoints != NULL) (void) free((void *) gt->oldpoints); if (gt->newpoints != NULL) (void) free((void *) gt->newpoints); } (void) free((void *) gp->galaxies); gp->galaxies = NULL; } } static void startover(ModeInfo * mi) { unistruct *gp = &universes[MI_SCREEN(mi)]; int i, j; /* more tmp */ double w1, w2; /* more tmp */ double d, v, w, h; /* yet more tmp */ gp->step = 0; gp->rot_y = 0; gp->rot_x = 0; if (MI_BATCHCOUNT(mi) < -MINGALAXIES) free_galaxies(gp); gp->ngalaxies = MI_BATCHCOUNT(mi); if (gp->ngalaxies < -MINGALAXIES) gp->ngalaxies = NRAND(-gp->ngalaxies - MINGALAXIES + 1) + MINGALAXIES; else if (gp->ngalaxies < MINGALAXIES) gp->ngalaxies = MINGALAXIES; if (gp->galaxies == NULL) gp->galaxies = (Galaxy *) calloc(gp->ngalaxies, sizeof (Galaxy)); for (i = 0; i < gp->ngalaxies; ++i) { Galaxy *gt = &gp->galaxies[i]; double sinw1, sinw2, cosw1, cosw2; gt->galcol = NRAND(COLORBASE - 2); if (gt->galcol > 1) gt->galcol += 2; /* Mult 8; 16..31 no green stars */ /* Galaxies still may have some green stars but are not all green. */ if (gt->stars != NULL) { (void) free((void *) gt->stars); gt->stars = NULL; } gt->nstars = (NRAND(MAX_STARS / 2)) + MAX_STARS / 2; gt->stars = (Star *) malloc(gt->nstars * sizeof (Star)); gt->oldpoints = (XPoint *) malloc(gt->nstars * sizeof (XPoint)); gt->newpoints = (XPoint *) malloc(gt->nstars * sizeof (XPoint)); w1 = 2.0 * M_PI * FLOATRAND; w2 = 2.0 * M_PI * FLOATRAND; sinw1 = SINF(w1); sinw2 = SINF(w2); cosw1 = COSF(w1); cosw2 = COSF(w2); gp->mat[0][0] = cosw2; gp->mat[0][1] = -sinw1 * sinw2; gp->mat[0][2] = cosw1 * sinw2; gp->mat[1][0] = 0.0; gp->mat[1][1] = cosw1; gp->mat[1][2] = sinw1; gp->mat[2][0] = -sinw2; gp->mat[2][1] = -sinw1 * cosw2; gp->mat[2][2] = cosw1 * cosw2; gt->vel[0] = FLOATRAND * 2.0 - 1.0; gt->vel[1] = FLOATRAND * 2.0 - 1.0; gt->vel[2] = FLOATRAND * 2.0 - 1.0; gt->pos[0] = -gt->vel[0] * DELTAT * gp->f_hititerations + FLOATRAND - 0.5; gt->pos[1] = -gt->vel[1] * DELTAT * gp->f_hititerations + FLOATRAND - 0.5; gt->pos[2] = -gt->vel[2] * DELTAT * gp->f_hititerations + FLOATRAND - 0.5; gt->mass = (int) (FLOATRAND * 1000.0) + 1; gp->size = GALAXYRANGESIZE * FLOATRAND + GALAXYMINSIZE; for (j = 0; j < gt->nstars; ++j) { Star *st = >->stars[j]; XPoint *oldp = >->oldpoints[j]; XPoint *newp = >->newpoints[j]; double sinw, cosw; w = 2.0 * M_PI * FLOATRAND; sinw = SINF(w); cosw = COSF(w); d = FLOATRAND * gp->size; h = FLOATRAND * exp(-2.0 * (d / gp->size)) / 5.0 * gp->size; if (FLOATRAND < 0.5) h = -h; st->pos[0] = gp->mat[0][0] * d * cosw + gp->mat[1][0] * d * sinw + gp->mat[2][0] * h + gt->pos[0]; st->pos[1] = gp->mat[0][1] * d * cosw + gp->mat[1][1] * d * sinw + gp->mat[2][1] * h + gt->pos[1]; st->pos[2] = gp->mat[0][2] * d * cosw + gp->mat[1][2] * d * sinw + gp->mat[2][2] * h + gt->pos[2]; v = sqrt(gt->mass * QCONS / sqrt(d * d + h * h)); st->vel[0] = -gp->mat[0][0] * v * sinw + gp->mat[1][0] * v * cosw + gt->vel[0]; st->vel[1] = -gp->mat[0][1] * v * sinw + gp->mat[1][1] * v * cosw + gt->vel[1]; st->vel[2] = -gp->mat[0][2] * v * sinw + gp->mat[1][2] * v * cosw + gt->vel[2]; st->vel[0] *= DELTAT; st->vel[1] *= DELTAT; st->vel[2] *= DELTAT; oldp->x = 0; oldp->y = 0; newp->x = 0; newp->y = 0; } } XClearWindow(MI_DISPLAY(mi), MI_WINDOW(mi)); #if 0 (void) printf("ngalaxies=%d, f_hititerations=%d\n", gp->ngalaxies, gp->f_hititerations); (void) printf("f_deltat=%g\n", DELTAT); (void) printf("Screen: "); #endif /*0 */ } ENTRYPOINT void init_galaxy(ModeInfo * mi) { unistruct *gp; if (universes == NULL) { if ((universes = (unistruct *) calloc(MI_NUM_SCREENS(mi), sizeof (unistruct))) == NULL) return; } gp = &universes[MI_SCREEN(mi)]; # ifdef HAVE_JWXYZ /* Don't second-guess Quartz's double-buffering */ dbufp = False; # endif gp->f_hititerations = MI_CYCLES(mi); gp->scale = (double) (MI_WIN_WIDTH(mi) + MI_WIN_HEIGHT(mi)) / 8.0; gp->midx = MI_WIN_WIDTH(mi) / 2; gp->midy = MI_WIN_HEIGHT(mi) / 2; startover(mi); } ENTRYPOINT void draw_galaxy(ModeInfo * mi) { Display *display = MI_DISPLAY(mi); Window window = MI_WINDOW(mi); GC gc = MI_GC(mi); unistruct *gp = &universes[MI_SCREEN(mi)]; double d, eps, cox, six, cor, sir; /* tmp */ int i, j, k; /* more tmp */ XPoint *dummy = NULL; if (! dbufp) XClearWindow(MI_DISPLAY(mi), MI_WINDOW(mi)); if(spin){ gp->rot_y += 0.01; gp->rot_x += 0.004; } cox = COSF(gp->rot_y); six = SINF(gp->rot_y); cor = COSF(gp->rot_x); sir = SINF(gp->rot_x); eps = 1/(EPSILON * sqrt_EPSILON * DELTAT * DELTAT * QCONS); for (i = 0; i < gp->ngalaxies; ++i) { Galaxy *gt = &gp->galaxies[i]; for (j = 0; j < gp->galaxies[i].nstars; ++j) { Star *st = >->stars[j]; XPoint *newp = >->newpoints[j]; double v0 = st->vel[0]; double v1 = st->vel[1]; double v2 = st->vel[2]; for (k = 0; k < gp->ngalaxies; ++k) { Galaxy *gtk = &gp->galaxies[k]; double d0 = gtk->pos[0] - st->pos[0]; double d1 = gtk->pos[1] - st->pos[1]; double d2 = gtk->pos[2] - st->pos[2]; d = d0 * d0 + d1 * d1 + d2 * d2; if (d > EPSILON) d = gtk->mass / (d * sqrt(d)) * DELTAT * DELTAT * QCONS; else d = gtk->mass / (eps * sqrt(eps)); v0 += d0 * d; v1 += d1 * d; v2 += d2 * d; } st->vel[0] = v0; st->vel[1] = v1; st->vel[2] = v2; st->pos[0] += v0; st->pos[1] += v1; st->pos[2] += v2; newp->x = (short) (((cox * st->pos[0]) - (six * st->pos[2])) * gp->scale) + gp->midx; newp->y = (short) (((cor * st->pos[1]) - (sir * ((six * st->pos[0]) + (cox * st->pos[2])))) * gp->scale) + gp->midy; } for (k = i + 1; k < gp->ngalaxies; ++k) { Galaxy *gtk = &gp->galaxies[k]; double d0 = gtk->pos[0] - gt->pos[0]; double d1 = gtk->pos[1] - gt->pos[1]; double d2 = gtk->pos[2] - gt->pos[2]; d = d0 * d0 + d1 * d1 + d2 * d2; if (d > EPSILON) d = 1 / (d * sqrt(d)) * DELTAT * QCONS; else d = 1 / (EPSILON * sqrt_EPSILON) * DELTAT * QCONS; d0 *= d; d1 *= d; d2 *= d; gt->vel[0] += d0 * gtk->mass; gt->vel[1] += d1 * gtk->mass; gt->vel[2] += d2 * gtk->mass; gtk->vel[0] -= d0 * gt->mass; gtk->vel[1] -= d1 * gt->mass; gtk->vel[2] -= d2 * gt->mass; } gt->pos[0] += gt->vel[0] * DELTAT; gt->pos[1] += gt->vel[1] * DELTAT; gt->pos[2] += gt->vel[2] * DELTAT; if (dbufp) { XSetForeground(display, gc, MI_WIN_BLACK_PIXEL(mi)); XDrawPoints(display, window, gc, gt->oldpoints, gt->nstars, CoordModeOrigin); } XSetForeground(display, gc, MI_PIXEL(mi, COLORSTEP * gt->galcol)); XDrawPoints(display, window, gc, gt->newpoints, gt->nstars, CoordModeOrigin); dummy = gt->oldpoints; gt->oldpoints = gt->newpoints; gt->newpoints = dummy; } gp->step++; if (gp->step > gp->f_hititerations * 4) 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) { if (universes != NULL) { int screen; for (screen = 0; screen < MI_NUM_SCREENS(mi); screen++) free_galaxies(&universes[screen]); (void) free((void *) universes); universes = NULL; } } ENTRYPOINT void refresh_galaxy(ModeInfo * mi) { /* Do nothing, it will refresh by itself */ } ENTRYPOINT Bool galaxy_handle_event (ModeInfo *mi, XEvent *event) { if (screenhack_event_helper (MI_DISPLAY(mi), MI_WINDOW(mi), event)) { reshape_galaxy (mi, MI_WIDTH(mi), MI_HEIGHT(mi)); return True; } return False; } XSCREENSAVER_MODULE ("Galaxy", galaxy) xscreensaver-5.36/hacks/grav.c000644 000767 000024 00000021724 12717746345 016360 0ustar00jwzstaff000000 000000 /* -*- Mode: C; tab-width: 4 -*- */ /* grav --- planets spinning around a pulsar */ #if 0 static const char sccsid[] = "@(#)grav.c 5.00 2000/11/01 xlockmore"; #endif /*- * Copyright (c) 1993 by Greg Boewring * * Permission to use, copy, modify, and distribute this software and its * documentation for any purpose and without fee is hereby granted, * provided that the above copyright notice appear in all copies and that * both that copyright notice and this permission notice appear in * supporting documentation. * * This file is provided AS IS with no warranties of any kind. The author * shall have no liability with respect to the infringement of copyrights, * trade secrets or any patents by this file or any part thereof. In no * event will the author be liable for any lost revenue or profits or * other special, indirect and consequential damages. * * Revision History: * 01-Nov-2000: Allocation checks * 10-May-1997: Compatible with xscreensaver * 11-Jul-1994: color version * 06-Oct-1993: Written by Greg Bowering */ #ifdef STANDALONE #define MODE_grav #define DEFAULTS "*delay: 10000 \n" \ "*count: 12 \n" \ "*ncolors: 64 \n" \ "*fpsSolid: true \n" \ "*ignoreRotation: True \n" \ #define BRIGHT_COLORS # define grav_handle_event 0 # include "xlockmore.h" /* in xscreensaver distribution */ #else /* STANDALONE */ # include "xlock.h" /* in xlockmore distribution */ #endif /* STANDALONE */ #ifdef MODE_grav #define DEF_DECAY "True" /* Damping for decaying orbits */ #define DEF_TRAIL "True" /* For trails (works good in mono only) */ static Bool decay; static Bool trail; static XrmOptionDescRec opts[] = { {"-decay", ".grav.decay", XrmoptionNoArg, "on"}, {"+decay", ".grav.decay", XrmoptionNoArg, "off"}, {"-trail", ".grav.trail", XrmoptionNoArg, "on"}, {"+trail", ".grav.trail", XrmoptionNoArg, "off"} }; static argtype vars[] = { {&decay, "decay", "Decay", DEF_DECAY, t_Bool}, {&trail, "trail", "Trail", DEF_TRAIL, t_Bool} }; static OptionStruct desc[] = { {"-/+decay", "turn on/off decaying orbits"}, {"-/+trail", "turn on/off trail dots"} }; ENTRYPOINT ModeSpecOpt grav_opts = {sizeof opts / sizeof opts[0], opts, sizeof vars / sizeof vars[0], vars, desc}; #ifdef USE_MODULES ModStruct grav_description = {"grav", "init_grav", "draw_grav", "release_grav", "refresh_grav", "init_grav", (char *) NULL, &grav_opts, 10000, -12, 1, 1, 64, 1.0, "", "Shows orbiting planets", 0, NULL}; #endif #define GRAV -0.02 /* Gravitational constant */ #define DIST 16.0 #define COLLIDE 0.0001 #define ALMOST 15.99 #define HALF 0.5 /* #define INTRINSIC_RADIUS 200.0 */ #define INTRINSIC_RADIUS ((float) (gp->height/5)) #define STARRADIUS (unsigned int)(gp->height/(2*DIST)) #define AVG_RADIUS (INTRINSIC_RADIUS/DIST) #define RADIUS (unsigned int)(INTRINSIC_RADIUS/(POS(Z)+DIST)) #define XR HALF*ALMOST #define YR HALF*ALMOST #define ZR HALF*ALMOST #define VR 0.04 #define DIMENSIONS 3 #define X 0 #define Y 1 #define Z 2 #define DAMP 0.999999 #define MaxA 0.1 /* Maximum acceleration (w/ damping) */ #define POS(c) planet->P[c] #define VEL(c) planet->V[c] #define ACC(c) planet->A[c] #define Planet(x,y)\ if ((x) >= 0 && (y) >= 0 && (x) <= gp->width && (y) <= gp->height) {\ if (planet->ri < 2)\ XDrawPoint(display, window, gc, (x), (y));\ else\ XFillArc(display, window, gc,\ (x) - planet->ri / 2, (y) - planet->ri / 2, planet->ri, planet->ri,\ 0, 23040);\ } #define FLOATRAND(min,max) ((min)+(LRAND()/MAXRAND)*((max)-(min))) typedef struct { double P[DIMENSIONS], V[DIMENSIONS], A[DIMENSIONS]; int xi, yi, ri; unsigned long colors; } planetstruct; typedef struct { int width, height; int x, y, sr, nplanets; unsigned long starcolor; planetstruct *planets; } gravstruct; static gravstruct *gravs = (gravstruct *) NULL; static void init_planet(ModeInfo * mi, planetstruct * planet) { Display *display = MI_DISPLAY(mi); Window window = MI_WINDOW(mi); GC gc = MI_GC(mi); gravstruct *gp = &gravs[MI_SCREEN(mi)]; # ifdef HAVE_JWXYZ jwxyz_XSetAntiAliasing (MI_DISPLAY(mi), MI_GC(mi), False); # endif if (MI_NPIXELS(mi) > 2) planet->colors = MI_PIXEL(mi, NRAND(MI_NPIXELS(mi))); else planet->colors = MI_WHITE_PIXEL(mi); /* Initialize positions */ POS(X) = FLOATRAND(-XR, XR); POS(Y) = FLOATRAND(-YR, YR); POS(Z) = FLOATRAND(-ZR, ZR); if (POS(Z) > -ALMOST) { planet->xi = (int) ((double) gp->width * (HALF + POS(X) / (POS(Z) + DIST))); planet->yi = (int) ((double) gp->height * (HALF + POS(Y) / (POS(Z) + DIST))); } else planet->xi = planet->yi = -1; planet->ri = RADIUS; /* Initialize velocities */ VEL(X) = FLOATRAND(-VR, VR); VEL(Y) = FLOATRAND(-VR, VR); VEL(Z) = FLOATRAND(-VR, VR); /* Draw planets */ Planet(planet->xi, planet->yi); } static void draw_planet(ModeInfo * mi, planetstruct * planet) { Display *display = MI_DISPLAY(mi); Window window = MI_WINDOW(mi); GC gc = MI_GC(mi); gravstruct *gp = &gravs[MI_SCREEN(mi)]; double D; /* A distance variable to work with */ register unsigned char cmpt; D = POS(X) * POS(X) + POS(Y) * POS(Y) + POS(Z) * POS(Z); if (D < COLLIDE) D = COLLIDE; D = sqrt(D); D = D * D * D; for (cmpt = X; cmpt < DIMENSIONS; cmpt++) { ACC(cmpt) = POS(cmpt) * GRAV / D; if (decay) { if (ACC(cmpt) > MaxA) ACC(cmpt) = MaxA; else if (ACC(cmpt) < -MaxA) ACC(cmpt) = -MaxA; VEL(cmpt) = VEL(cmpt) + ACC(cmpt); VEL(cmpt) *= DAMP; } else { /* update velocity */ VEL(cmpt) = VEL(cmpt) + ACC(cmpt); } /* update position */ POS(cmpt) = POS(cmpt) + VEL(cmpt); } gp->x = planet->xi; gp->y = planet->yi; if (POS(Z) > -ALMOST) { planet->xi = (int) ((double) gp->width * (HALF + POS(X) / (POS(Z) + DIST))); planet->yi = (int) ((double) gp->height * (HALF + POS(Y) / (POS(Z) + DIST))); } else planet->xi = planet->yi = -1; /* Mask */ XSetForeground(display, gc, MI_BLACK_PIXEL(mi)); Planet(gp->x, gp->y); if (trail) { XSetForeground(display, gc, planet->colors); XDrawPoint(display, MI_WINDOW(mi), gc, gp->x, gp->y); } /* Move */ gp->x = planet->xi; gp->y = planet->yi; planet->ri = RADIUS; /* Redraw */ XSetForeground(display, gc, planet->colors); Planet(gp->x, gp->y); } ENTRYPOINT void init_grav(ModeInfo * mi) { Display *display = MI_DISPLAY(mi); GC gc = MI_GC(mi); unsigned char ball; gravstruct *gp; if (gravs == NULL) { if ((gravs = (gravstruct *) calloc(MI_NUM_SCREENS(mi), sizeof (gravstruct))) == NULL) return; } gp = &gravs[MI_SCREEN(mi)]; gp->width = MI_WIDTH(mi); gp->height = MI_HEIGHT(mi); gp->sr = STARRADIUS; gp->nplanets = MI_COUNT(mi); if (gp->nplanets < 0) { if (gp->planets) { (void) free((void *) gp->planets); gp->planets = (planetstruct *) NULL; } gp->nplanets = NRAND(-gp->nplanets) + 1; /* Add 1 so its not too boring */ } if (gp->planets == NULL) { if ((gp->planets = (planetstruct *) calloc(gp->nplanets, sizeof (planetstruct))) == NULL) return; } MI_CLEARWINDOW(mi); if (MI_NPIXELS(mi) > 2) gp->starcolor = MI_PIXEL(mi, NRAND(MI_NPIXELS(mi))); else gp->starcolor = MI_WHITE_PIXEL(mi); for (ball = 0; ball < (unsigned char) gp->nplanets; ball++) init_planet(mi, &gp->planets[ball]); /* Draw centrepoint */ XDrawArc(display, MI_WINDOW(mi), gc, gp->width / 2 - gp->sr / 2, gp->height / 2 - gp->sr / 2, gp->sr, gp->sr, 0, 23040); } ENTRYPOINT void draw_grav(ModeInfo * mi) { Display *display = MI_DISPLAY(mi); Window window = MI_WINDOW(mi); GC gc = MI_GC(mi); register unsigned char ball; gravstruct *gp; if (gravs == NULL) return; gp = &gravs[MI_SCREEN(mi)]; if (gp->planets == NULL) return; MI_IS_DRAWN(mi) = True; /* Mask centrepoint */ XSetForeground(display, gc, MI_BLACK_PIXEL(mi)); XDrawArc(display, window, gc, gp->width / 2 - gp->sr / 2, gp->height / 2 - gp->sr / 2, gp->sr, gp->sr, 0, 23040); /* Resize centrepoint */ switch (NRAND(4)) { case 0: if (gp->sr < (int) STARRADIUS) gp->sr++; break; case 1: if (gp->sr > 2) gp->sr--; } /* Draw centrepoint */ XSetForeground(display, gc, gp->starcolor); XDrawArc(display, window, gc, gp->width / 2 - gp->sr / 2, gp->height / 2 - gp->sr / 2, gp->sr, gp->sr, 0, 23040); for (ball = 0; ball < (unsigned char) gp->nplanets; ball++) 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) { if (gravs != NULL) { int screen; for (screen = 0; screen < MI_NUM_SCREENS(mi); screen++) { gravstruct *gp = &gravs[screen]; if (gp->planets) (void) free((void *) gp->planets); } (void) free((void *) gravs); gravs = (gravstruct *) NULL; } } ENTRYPOINT void refresh_grav(ModeInfo * mi) { MI_CLEARWINDOW(mi); } XSCREENSAVER_MODULE ("Grav", grav) #endif /* MODE_grav */ xscreensaver-5.36/hacks/greynetic.c000644 000767 000024 00000020724 12710314315 017366 0ustar00jwzstaff000000 000000 /* xscreensaver, Copyright (c) 1992-2008 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. */ #include "screenhack.h" #ifndef HAVE_JWXYZ # define DO_STIPPLE #endif #define NBITS 12 /* On some systems (notably MacOS X) these files are messed up. * They're tiny, so we might as well just inline them here. * * # include * # include * # include * # include * # include * # include * # include * # include * # include * # include * # include * # include */ #ifdef DO_STIPPLE #define stipple_width 16 #define stipple_height 4 static unsigned char stipple_bits[] = { 0x55, 0x55, 0xee, 0xee, 0x55, 0x55, 0xba, 0xbb}; #define cross_weave_width 16 #define cross_weave_height 16 static unsigned char cross_weave_bits[] = { 0x55, 0x55, 0x88, 0x88, 0x55, 0x55, 0x22, 0x22, 0x55, 0x55, 0x88, 0x88, 0x55, 0x55, 0x22, 0x22, 0x55, 0x55, 0x88, 0x88, 0x55, 0x55, 0x22, 0x22, 0x55, 0x55, 0x88, 0x88, 0x55, 0x55, 0x22, 0x22}; #define dimple1_width 16 #define dimple1_height 16 static unsigned char dimple1_bits[] = { 0x55, 0x55, 0x00, 0x00, 0x55, 0x55, 0x00, 0x00, 0x55, 0x55, 0x00, 0x00, 0x55, 0x55, 0x00, 0x00, 0x55, 0x55, 0x00, 0x00, 0x55, 0x55, 0x00, 0x00, 0x55, 0x55, 0x00, 0x00, 0x55, 0x55, 0x00, 0x00}; #define dimple3_width 16 #define dimple3_height 16 static unsigned char dimple3_bits[] = { 0x11, 0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}; #define flipped_gray_width 4 #define flipped_gray_height 2 static char flipped_gray_bits[] = { 0x07, 0x0d}; #define gray1_width 2 #define gray1_height 2 static char gray1_bits[] = { 0x01, 0x02}; #define gray3_width 4 #define gray3_height 4 static char gray3_bits[] = { 0x01, 0x00, 0x04, 0x00}; #define hlines2_width 1 #define hlines2_height 2 static char hlines2_bits[] = { 0x01, 0x00}; #define light_gray_width 4 #define light_gray_height 2 static char light_gray_bits[] = { 0x08, 0x02}; #define root_weave_width 4 #define root_weave_height 4 static char root_weave_bits[] = { 0x07, 0x0d, 0x0b, 0x0e}; #define vlines2_width 2 #define vlines2_height 1 static char vlines2_bits[] = { 0x01}; #define vlines3_width 3 #define vlines3_height 1 static char vlines3_bits[] = { 0x02}; #endif /* DO_STIPPLE */ struct state { Display *dpy; Window window; Pixmap pixmaps [NBITS]; GC gc; int delay; unsigned long fg, bg, pixels [512]; int npixels; int xlim, ylim; Bool grey_p; Colormap cmap; }; static void * greynetic_init (Display *dpy, Window window) { struct state *st = (struct state *) calloc (1, sizeof(*st)); # ifdef DO_STIPPLE int i; # endif /* DO_STIPPLE */ XGCValues gcv; XWindowAttributes xgwa; st->dpy = dpy; st->window = window; XGetWindowAttributes (st->dpy, st->window, &xgwa); st->xlim = xgwa.width; st->ylim = xgwa.height; st->cmap = xgwa.colormap; st->npixels = 0; st->grey_p = get_boolean_resource(st->dpy, "grey", "Boolean"); gcv.foreground= st->fg= get_pixel_resource(st->dpy, st->cmap, "foreground","Foreground"); gcv.background= st->bg= get_pixel_resource(st->dpy, st->cmap, "background","Background"); st->delay = get_integer_resource (st->dpy, "delay", "Integer"); if (st->delay < 0) st->delay = 0; # ifndef DO_STIPPLE st->gc = XCreateGC (st->dpy, st->window, GCForeground, &gcv); # ifdef HAVE_JWXYZ /* allow non-opaque alpha components in pixel values */ jwxyz_XSetAlphaAllowed (st->dpy, st->gc, True); # endif /* HAVE_JWXYZ */ # else /* DO_STIPPLE */ gcv.fill_style= FillOpaqueStippled; st->gc = XCreateGC (st->dpy, st->window, GCForeground|GCBackground|GCFillStyle, &gcv); i = 0; # define BITS(n,w,h) \ st->pixmaps [i++] = \ XCreatePixmapFromBitmapData (st->dpy, st->window, (char *) n, w, h, 1, 0, 1) BITS (stipple_bits, stipple_width, stipple_height); BITS (cross_weave_bits, cross_weave_width, cross_weave_height); BITS (dimple1_bits, dimple1_width, dimple1_height); BITS (dimple3_bits, dimple3_width, dimple3_height); BITS (flipped_gray_bits, flipped_gray_width, flipped_gray_height); BITS (gray1_bits, gray1_width, gray1_height); BITS (gray3_bits, gray3_width, gray3_height); BITS (hlines2_bits, hlines2_width, hlines2_height); BITS (light_gray_bits, light_gray_width, light_gray_height); BITS (root_weave_bits, root_weave_width, root_weave_height); BITS (vlines2_bits, vlines2_width, vlines2_height); BITS (vlines3_bits, vlines3_width, vlines3_height); # endif /* DO_STIPPLE */ return st; } static unsigned long greynetic_draw (Display *dpy, Window window, void *closure) { struct state *st = (struct state *) closure; int x, y, w=0, h=0, i; XGCValues gcv; for (i = 0; i < 10; i++) /* minimize area, but don't try too hard */ { w = 50 + random () % (st->xlim - 50); h = 50 + random () % (st->ylim - 50); if (w + h < st->xlim && w + h < st->ylim) break; } x = random () % (st->xlim - w); y = random () % (st->ylim - h); # ifdef DO_STIPPLE gcv.stipple = st->pixmaps [random () % NBITS]; # endif /* !DO_STIPPLE */ if (mono_p) { MONO: if (random () & 1) gcv.foreground = st->fg, gcv.background = st->bg; else gcv.foreground = st->bg, gcv.background = st->fg; } else { XColor fgc, bgc; if (st->npixels == sizeof (st->pixels) / sizeof (unsigned long)) goto REUSE; fgc.flags = bgc.flags = DoRed|DoGreen|DoBlue; fgc.red = random (); fgc.green = random (); fgc.blue = random (); # ifdef DO_STIPPLE bgc.red = random (); bgc.green = random (); bgc.blue = random (); # endif /* DO_STIPPLE */ if (st->grey_p) { fgc.green = fgc.blue = fgc.red; bgc.green = bgc.blue = bgc.red; } if (! XAllocColor (st->dpy, st->cmap, &fgc)) goto REUSE; st->pixels [st->npixels++] = fgc.pixel; gcv.foreground = fgc.pixel; # ifdef DO_STIPPLE if (! XAllocColor (st->dpy, st->cmap, &bgc)) goto REUSE; st->pixels [st->npixels++] = bgc.pixel; gcv.background = bgc.pixel; # endif /* DO_STIPPLE */ goto DONE; REUSE: if (st->npixels <= 0) { mono_p = 1; goto MONO; } gcv.foreground = st->pixels [random () % st->npixels]; # ifdef DO_STIPPLE gcv.background = st->pixels [random () % st->npixels]; # endif /* DO_STIPPLE */ DONE: ; # ifdef HAVE_JWXYZ { /* give a non-opaque alpha to the color */ unsigned long pixel = gcv.foreground; unsigned long amask = BlackPixel (dpy,0); unsigned long a = (random() & amask); pixel = (pixel & (~amask)) | a; gcv.foreground = pixel; } # endif /* !HAVE_JWXYZ */ } # ifndef DO_STIPPLE XChangeGC (st->dpy, st->gc, GCForeground, &gcv); # else /* DO_STIPPLE */ XChangeGC (st->dpy, st->gc, GCStipple|GCForeground|GCBackground, &gcv); # endif /* DO_STIPPLE */ XFillRectangle (st->dpy, st->window, st->gc, x, y, w, h); return st->delay; } static const char *greynetic_defaults [] = { ".background: black", ".foreground: white", "*fpsSolid: true", "*delay: 10000", "*grey: false", #ifdef HAVE_MOBILE "*ignoreRotation: True", #endif 0 }; static XrmOptionDescRec greynetic_options [] = { { "-delay", ".delay", XrmoptionSepArg, 0 }, { "-grey", ".grey", XrmoptionNoArg, "True" }, { 0, 0, 0, 0 } }; static void greynetic_reshape (Display *dpy, Window window, void *closure, unsigned int w, unsigned int h) { struct state *st = (struct state *) closure; st->xlim = w; st->ylim = h; } static Bool greynetic_event (Display *dpy, Window window, void *closure, XEvent *event) { return False; } static void greynetic_free (Display *dpy, Window window, void *closure) { struct state *st = (struct state *) closure; XFreeGC (st->dpy, st->gc); free (st); } XSCREENSAVER_MODULE ("Greynetic", greynetic) xscreensaver-5.36/hacks/halo.c000644 000767 000024 00000031664 12717746337 016351 0ustar00jwzstaff000000 000000 /* xscreensaver, Copyright (c) 1993-2013 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. */ /* I wanted to lay down new circles with TV:ALU-ADD instead of TV:ALU-XOR, but X doesn't support arithmetic combinations of pixmaps!! What losers. I suppose I could crank out the 2's compliment math by hand, but that's a real drag... This would probably look good with shapes other than circles as well. */ #include "screenhack.h" #include struct circle { int x, y, radius; int increment; int dx, dy; }; static enum color_mode { seuss_mode, ramp_mode, random_mode } cmode; struct state { Display *dpy; Window window; struct circle *circles; int count, global_count; Pixmap pixmap, buffer; int width, height, global_inc; int delay, delay2; unsigned long fg_pixel, bg_pixel; GC draw_gc, erase_gc, copy_gc, merge_gc; Bool anim_p; Colormap cmap; int ncolors; XColor *colors; int fg_index; int bg_index; int iterations; Bool done_once; Bool done_once_no_really; int clear_tick; struct timeval then; }; #define min(x,y) ((x)<(y)?(x):(y)) #define max(x,y) ((x)>(y)?(x):(y)) static void init_circles_1 (struct state *st) { int i; st->count = (st->global_count ? st->global_count : (3 + (random () % max (1, (min (st->width, st->height) / 50))) + (random () % max (1, (min (st->width, st->height) / 50))))); st->circles = (struct circle *) malloc (st->count * sizeof (struct circle)); for (i = 0; i < st->count; i++) { st->circles [i].x = 10 + random () % (st->width - 20); st->circles [i].y = 10 + random () % (st->height - 20); if (st->global_inc) st->circles [i].increment = st->global_inc; else { /* prefer smaller increments to larger ones */ int j = 8; int inc = ((random()%j) + (random()%j) + (random()%j)) - ((j*3)/2); if (inc < 0) inc = -inc + 3; st->circles [i].increment = inc + 3; } st->circles [i].radius = random () % st->circles [i].increment; st->circles [i].dx = ((random () % 3) - 1) * (1 + random () % 5); st->circles [i].dy = ((random () % 3) - 1) * (1 + random () % 5); } } static void * halo_init (Display *dpy, Window window) { struct state *st = (struct state *) calloc (1, sizeof(*st)); XGCValues gcv; XWindowAttributes xgwa; char *mode_str = 0; st->dpy = dpy; st->window = window; XGetWindowAttributes (st->dpy, st->window, &xgwa); st->cmap = xgwa.colormap; st->global_count = get_integer_resource (st->dpy, "count", "Integer"); if (st->global_count < 0) st->global_count = 0; st->global_inc = get_integer_resource (st->dpy, "increment", "Integer"); if (st->global_inc < 0) st->global_inc = 0; st->anim_p = get_boolean_resource (st->dpy, "animate", "Boolean"); st->delay = get_integer_resource (st->dpy, "delay", "Integer"); st->delay2 = get_integer_resource (st->dpy, "delay2", "Integer") * 1000000; mode_str = get_string_resource (st->dpy, "colorMode", "ColorMode"); if (! mode_str) cmode = random_mode; else if (!strcmp (mode_str, "seuss")) cmode = seuss_mode; else if (!strcmp (mode_str, "ramp")) cmode = ramp_mode; else if (!strcmp (mode_str, "random")) cmode = random_mode; else { fprintf (stderr, "%s: colorMode must be seuss, ramp, or random, not \"%s\"\n", progname, mode_str); exit (1); } if (mono_p) cmode = seuss_mode; if (cmode == random_mode) cmode = ((random()&3) == 1) ? ramp_mode : seuss_mode; if (cmode == ramp_mode) st->anim_p = False; /* This combo doesn't work right... */ st->ncolors = get_integer_resource (st->dpy, "colors", "Colors"); if (st->ncolors < 2) st->ncolors = 2; if (st->ncolors <= 2) mono_p = True; if (mono_p) st->colors = 0; else st->colors = (XColor *) malloc(sizeof(*st->colors) * (st->ncolors+1)); if (mono_p) ; else if (random() % (cmode == seuss_mode ? 2 : 10)) make_uniform_colormap (xgwa.screen, xgwa.visual, st->cmap, st->colors, &st->ncolors, True, 0, True); else make_smooth_colormap (xgwa.screen, xgwa.visual, st->cmap, st->colors, &st->ncolors, True, 0, True); if (st->ncolors <= 2) mono_p = True; if (mono_p) cmode = seuss_mode; if (mono_p) { st->fg_pixel = get_pixel_resource (st->dpy, st->cmap, "foreground", "Foreground"); st->bg_pixel = get_pixel_resource (st->dpy, st->cmap, "background", "Background"); } else { st->fg_index = 0; st->bg_index = st->ncolors / 4; if (st->fg_index == st->bg_index) st->bg_index++; st->fg_pixel = st->colors[st->fg_index].pixel; st->bg_pixel = st->colors[st->bg_index].pixel; } st->width = max (50, xgwa.width); st->height = max (50, xgwa.height); #ifdef DEBUG st->width/=2; st->height/=2; #endif st->pixmap = XCreatePixmap (st->dpy, st->window, st->width, st->height, 1); if (cmode == seuss_mode) st->buffer = XCreatePixmap (st->dpy, st->window, st->width, st->height, 1); else st->buffer = 0; gcv.foreground = 1; gcv.background = 0; st->draw_gc = XCreateGC (st->dpy, st->pixmap, GCForeground | GCBackground, &gcv); gcv.foreground = 0; st->erase_gc = XCreateGC (st->dpy, st->pixmap, GCForeground, &gcv); gcv.foreground = st->fg_pixel; gcv.background = st->bg_pixel; st->copy_gc = XCreateGC (st->dpy, st->window, GCForeground | GCBackground, &gcv); #ifdef HAVE_JWXYZ jwxyz_XSetAntiAliasing (dpy, st->draw_gc, False); jwxyz_XSetAntiAliasing (dpy, st->erase_gc, False); jwxyz_XSetAntiAliasing (dpy, st->copy_gc, False); #endif if (cmode == seuss_mode) { gcv.foreground = 1; gcv.background = 0; gcv.function = GXxor; st->merge_gc = XCreateGC (st->dpy, st->pixmap, GCForeground | GCBackground | GCFunction, &gcv); } else { gcv.foreground = st->fg_pixel; gcv.background = st->bg_pixel; gcv.function = GXcopy; st->merge_gc = XCreateGC (st->dpy, st->window, GCForeground | GCBackground | GCFunction, &gcv); } init_circles_1 (st); XClearWindow (st->dpy, st->window); if (st->buffer) XFillRectangle (st->dpy, st->buffer, st->erase_gc, 0, 0, st->width, st->height); return st; } static unsigned long halo_draw (Display *dpy, Window window, void *closure) { struct state *st = (struct state *) closure; int i; Bool done = False; Bool inhibit_sleep = False; int this_delay = st->delay; XFillRectangle (st->dpy, st->pixmap, st->erase_gc, 0, 0, st->width, st->height); for (i = 0; i < st->count; i++) { int radius = st->circles [i].radius; int inc = st->circles [i].increment; if (! (st->iterations & 1)) /* never stop on an odd number of iterations */ ; else if (radius == 0) /* eschew inf */ ; else if (radius < 0) /* stop when the circles are points */ done = True; else /* stop when the circles fill the st->window */ { /* Probably there's a simpler way to ask the musical question, "is this square completely enclosed by this circle," but I've forgotten too much trig to know it... (That's not really the right question anyway, but the right question is too hard.) */ double x1 = ((double) (-st->circles [i].x)) / ((double) radius); double y1 = ((double) (-st->circles [i].y)) / ((double) radius); double x2 = ((double) (st->width - st->circles [i].x)) / ((double) radius); double y2 = ((double) (st->height - st->circles [i].y)) / ((double) radius); x1 *= x1; x2 *= x2; y1 *= y1; y2 *= y2; if ((x1 + y1) < 1 && (x2 + y2) < 1 && (x1 + y2) < 1 && (x2 + y1) < 1) done = True; } if (radius > 0 && (cmode == seuss_mode || /* drawing all circles, or */ st->circles [0].increment < 0)) /* on the way back in */ { XFillArc (st->dpy, (cmode == seuss_mode ? st->pixmap : st->window), (cmode == seuss_mode ? st->draw_gc : st->merge_gc), st->circles [i].x - radius, st->circles [i].y - radius, radius * 2, radius * 2, 0, 360*64); } st->circles [i].radius += inc; } if (st->anim_p && !st->done_once) inhibit_sleep = !done; if (done) { if (st->anim_p) { st->done_once = True; for (i = 0; i < st->count; i++) { st->circles [i].x += st->circles [i].dx; st->circles [i].y += st->circles [i].dy; st->circles [i].radius %= st->circles [i].increment; if (st->circles [i].x < 0 || st->circles [i].x >= st->width) { st->circles [i].dx = -st->circles [i].dx; st->circles [i].x += (2 * st->circles [i].dx); } if (st->circles [i].y < 0 || st->circles [i].y >= st->height) { st->circles [i].dy = -st->circles [i].dy; st->circles [i].y += (2 * st->circles [i].dy); } } } else if (st->circles [0].increment < 0) { /* We've zoomed out and the screen is blank -- re-pick the center points, and shift the st->colors. */ free (st->circles); init_circles_1 (st); if (! mono_p) { st->fg_index = (st->fg_index + 1) % st->ncolors; st->bg_index = (st->fg_index + (st->ncolors/2)) % st->ncolors; XSetForeground (st->dpy, st->copy_gc, st->colors [st->fg_index].pixel); XSetBackground (st->dpy, st->copy_gc, st->colors [st->bg_index].pixel); } } /* Sometimes go out from the inside instead of the outside */ else if (st->clear_tick == 0 && ((random () % 3) == 0)) { st->iterations = 0; /* ick */ for (i = 0; i < st->count; i++) st->circles [i].radius %= st->circles [i].increment; st->clear_tick = ((random() % 8) + 4) | 1; /* must be odd */ } else { for (i = 0; i < st->count; i++) { st->circles [i].increment = -st->circles [i].increment; st->circles [i].radius += (2 * st->circles [i].increment); } } } if (st->buffer) XCopyPlane (st->dpy, st->pixmap, st->buffer, st->merge_gc, 0, 0, st->width, st->height, 0, 0, 1); else if (cmode != seuss_mode) { if (!mono_p) { st->fg_index++; st->bg_index++; if (st->fg_index >= st->ncolors) st->fg_index = 0; if (st->bg_index >= st->ncolors) st->bg_index = 0; XSetForeground (st->dpy, st->merge_gc, st->colors [st->fg_index].pixel); } if (st->circles [0].increment >= 0) inhibit_sleep = True; else if (done && cmode == seuss_mode) XFillRectangle (st->dpy, st->window, st->merge_gc, 0, 0, st->width, st->height); } else XCopyPlane (st->dpy, st->pixmap, st->window, st->merge_gc, 0, 0, st->width, st->height, 0, 0, 1); /* st->buffer is only used in seuss-mode or anim-mode */ if (st->buffer && (st->anim_p ? (done || (!st->done_once && (st->iterations & 1))) : (st->iterations & 1))) { XCopyPlane (st->dpy, st->buffer, st->window, st->copy_gc, 0, 0, st->width, st->height, 0, 0, 1); if (st->anim_p && done) XFillRectangle (st->dpy, st->buffer, st->erase_gc, 0, 0, st->width, st->height); } #ifdef DEBUG XCopyPlane (st->dpy, st->pixmap, st->window, st->copy_gc, 0,0,st->width,st->height,st->width,st->height, 1); if (st->buffer) XCopyPlane (st->dpy, st->buffer, st->window, st->copy_gc, 0,0,st->width,st->height,0,st->height, 1); #endif if (done) st->iterations = 0; else st->iterations++; if (st->delay && !inhibit_sleep) { int d = st->delay; if (cmode == seuss_mode && st->anim_p) this_delay = d/100; else this_delay = d; if (done) st->done_once_no_really = True; } if (done && st->clear_tick > 0) { st->clear_tick--; if (!st->clear_tick) { XClearWindow (st->dpy, st->window); if (st->buffer) XFillRectangle (st->dpy, st->buffer, st->erase_gc, 0,0,st->width,st->height); } } if (inhibit_sleep) this_delay = 0; return this_delay; } static const char *halo_defaults [] = { ".background: black", ".foreground: white", "*colorMode: random", "*colors: 100", "*count: 0", "*delay: 100000", "*delay2: 20", "*increment: 0", "*animate: False", #ifdef HAVE_MOBILE "*ignoreRotation: True", #endif 0 }; static XrmOptionDescRec halo_options [] = { { "-count", ".count", XrmoptionSepArg, 0 }, { "-delay", ".delay", XrmoptionSepArg, 0 }, { "-animate", ".animate", XrmoptionNoArg, "True" }, { "-mode", ".colorMode", XrmoptionSepArg, 0 }, { "-colors", ".colors", XrmoptionSepArg, 0 }, { 0, 0, 0, 0 } }; static void halo_reshape (Display *dpy, Window window, void *closure, unsigned int w, unsigned int h) { } static Bool halo_event (Display *dpy, Window window, void *closure, XEvent *event) { return False; } static void halo_free (Display *dpy, Window window, void *closure) { } XSCREENSAVER_MODULE ("Halo", halo) xscreensaver-5.36/hacks/helix.c000644 000767 000024 00000022145 12710314320 016501 0ustar00jwzstaff000000 000000 /* xscreensaver, Copyright (c) 1992-2008 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. */ /* Algorithm from a Mac program by Chris Tate, written in 1988 or so. */ /* 18-Sep-97: Johannes Keukelaar (johannes@nada.kth.se): Improved screen * eraser. * 10-May-97: merged ellipse code by Dan Stromberg * as found in xlockmore 4.03a10. * 1992: jwz created. */ /* 25 April 2002: Matthew Strait added -subdelay option so the drawing process can be watched */ #include #include "screenhack.h" #include "erase.h" enum draw_state { HELIX, DRAW_HELIX, TRIG, DRAW_TRIG, LINGER, ERASE }; struct state { enum draw_state dstate; double sins [360]; double coss [360]; GC draw_gc; unsigned int default_fg_pixel; int sleep_time; int subdelay; eraser_state *eraser; int width, height; Colormap cmap; int x1, y1, x2, y2, angle, i; int radius1, radius2, d_angle, factor1, factor2, factor3, factor4; int d_angle_offset; int offset, dir, density; }; static void * helix_init (Display *dpy, Window window) { struct state *st = (struct state *) calloc (1, sizeof(*st)); int i; XGCValues gcv; XWindowAttributes xgwa; st->sleep_time = get_integer_resource(dpy, "delay", "Integer"); st->subdelay = get_integer_resource(dpy, "subdelay", "Integer"); XGetWindowAttributes (dpy, window, &xgwa); st->width = xgwa.width; st->height = xgwa.height; st->cmap = xgwa.colormap; gcv.foreground = st->default_fg_pixel = get_pixel_resource (dpy, st->cmap, "foreground", "Foreground"); st->draw_gc = XCreateGC (dpy, window, GCForeground, &gcv); gcv.foreground = get_pixel_resource (dpy, st->cmap, "background", "Background"); for (i = 0; i < 360; i++) { st->sins [i] = sin ((((double) i) / 180.0) * M_PI); st->coss [i] = cos ((((double) i) / 180.0) * M_PI); } st->dstate = (random() & 1) ? HELIX : TRIG; return st; } static int gcd (int a, int b) { while (b > 0) { int tmp; tmp = a % b; a = b; b = tmp; } return (a < 0 ? -a : a); } static void helix (Display *dpy, Window window, struct state *st) { int xmid = st->width / 2; int ymid = st->height / 2; int limit = 1 + (360 / gcd (360, st->d_angle)); if (st->i == 0) { st->x1 = xmid; st->y1 = ymid + st->radius2; st->x2 = xmid; st->y2 = ymid + st->radius1; st->angle = 0; } /* for (st->i = 0; st->i < limit; st->i++)*/ { int tmp; #define pmod(x,y) (tmp=((x) % (y)), (tmp >= 0 ? tmp : (tmp + (y)))) st->x1 = xmid + (((double) st->radius1) * st->sins [pmod ((st->angle * st->factor1), 360)]); st->y1 = ymid + (((double) st->radius2) * st->coss [pmod ((st->angle * st->factor2), 360)]); XDrawLine (dpy, window, st->draw_gc, st->x1, st->y1, st->x2, st->y2); st->x2 = xmid + (((double) st->radius2) * st->sins [pmod ((st->angle * st->factor3), 360)]); st->y2 = ymid + (((double) st->radius1) * st->coss [pmod ((st->angle * st->factor4), 360)]); XDrawLine (dpy, window, st->draw_gc, st->x1, st->y1, st->x2, st->y2); st->angle += st->d_angle; } st->i++; if (st->i >= limit) st->dstate = LINGER; } static void trig (Display *dpy, Window window, struct state *st) { int xmid = st->width / 2; int ymid = st->height / 2; /* while (st->d_angle >= -360 && st->d_angle <= 360)*/ { int tmp; int angle = st->d_angle + st->d_angle_offset; st->x1 = (st->sins [pmod(angle * st->factor1, 360)] * xmid) + xmid; st->y1 = (st->coss [pmod(angle * st->factor1, 360)] * ymid) + ymid; st->x2 = (st->sins [pmod(angle * st->factor2 + st->offset, 360)] * xmid) + xmid; st->y2 = (st->coss [pmod(angle * st->factor2 + st->offset, 360)] * ymid) + ymid; XDrawLine(dpy, window, st->draw_gc, st->x1, st->y1, st->x2, st->y2); tmp = (int) 360 / (2 * st->density * st->factor1 * st->factor2); if (tmp == 0) /* Do not want it getting stuck... */ tmp = 1; /* Would not need if floating point */ st->d_angle += st->dir * tmp; } if (st->d_angle < -360 || st->d_angle > 360) st->dstate = LINGER; } #define min(a,b) ((a)<(b)?(a):(b)) static void random_helix (Display *dpy, Window window, struct state *st, XColor *color, Bool *got_color) { int radius; double divisor; radius = min (st->width, st->height) / 2; st->i = 0; st->d_angle = 0; st->factor1 = 2; st->factor2 = 2; st->factor3 = 2; st->factor4 = 2; divisor = ((frand (3.0) + 1) * (((random() & 1) * 2) - 1)); if ((random () & 1) == 0) { st->radius1 = radius; st->radius2 = radius / divisor; } else { st->radius2 = radius; st->radius1 = radius / divisor; } while (gcd (360, st->d_angle) >= 2) st->d_angle = random () % 360; #define random_factor() \ (((random() % 7) ? ((random() & 1) + 1) : 3) \ * (((random() & 1) * 2) - 1)) while (gcd (gcd (gcd (st->factor1, st->factor2), st->factor3), st->factor4) != 1) { st->factor1 = random_factor (); st->factor2 = random_factor (); st->factor3 = random_factor (); st->factor4 = random_factor (); } if (mono_p) XSetForeground (dpy, st->draw_gc, st->default_fg_pixel); else { hsv_to_rgb (random () % 360, frand (1.0), frand (0.5) + 0.5, &color->red, &color->green, &color->blue); if ((*got_color = XAllocColor (dpy, st->cmap, color))) XSetForeground (dpy, st->draw_gc, color->pixel); else XSetForeground (dpy, st->draw_gc, st->default_fg_pixel); } XClearWindow (dpy, window); } static void random_trig (Display *dpy, Window window, struct state *st, XColor *color, Bool *got_color) { st->d_angle = 0; st->factor1 = (random() % 8) + 1; do { st->factor2 = (random() % 8) + 1; } while (st->factor1 == st->factor2); st->dir = (random() & 1) ? 1 : -1; st->d_angle_offset = random() % 360; st->offset = ((random() % ((360 / 4) - 1)) + 1) / 4; st->density = 1 << ((random() % 4) + 4); /* Higher density, higher angles */ if (mono_p) XSetForeground (dpy, st->draw_gc, st->default_fg_pixel); else { hsv_to_rgb (random () % 360, frand (1.0), frand (0.5) + 0.5, &color->red, &color->green, &color->blue); if ((*got_color = XAllocColor (dpy, st->cmap, color))) XSetForeground (dpy, st->draw_gc, color->pixel); else XSetForeground (dpy, st->draw_gc, st->default_fg_pixel); } XClearWindow (dpy, window); } /* random_helix_or_trig */ static unsigned long helix_draw (Display *dpy, Window window, void *closure) { struct state *st = (struct state *) closure; Bool free_color = False; XColor color; int delay = st->subdelay; int erase_delay = 10000; int ii; if (st->eraser) { st->eraser = erase_window (dpy, window, st->eraser); if (st->eraser) delay = erase_delay; goto END; } switch (st->dstate) { case LINGER: delay = st->sleep_time * 1000000; st->dstate = ERASE; break; case ERASE: st->eraser = erase_window (dpy, window, st->eraser); delay = erase_delay; if (free_color) XFreeColors (dpy, st->cmap, &color.pixel, 1, 0); st->dstate = (random() & 1) ? HELIX : TRIG; break; case DRAW_HELIX: for (ii = 0; ii < 10; ii++) { helix (dpy, window, st); if (st->dstate != DRAW_HELIX) break; } break; case DRAW_TRIG: for (ii = 0; ii < 5; ii++) { trig (dpy, window, st); if (st->dstate != DRAW_TRIG) break; } break; case HELIX: random_helix (dpy, window, st, &color, &free_color); st->dstate = DRAW_HELIX; break; case TRIG: random_trig(dpy, window, st, &color, &free_color); st->dstate = DRAW_TRIG; break; default: abort(); } END: return delay; } static void helix_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 helix_event (Display *dpy, Window window, void *closure, XEvent *event) { return False; } static void helix_free (Display *dpy, Window window, void *closure) { struct state *st = (struct state *) closure; free (st); } static const char *helix_defaults [] = { ".background: black", ".foreground: white", "*fpsSolid: true", "*delay: 5", "*subdelay: 20000", #ifdef HAVE_MOBILE "*ignoreRotation: True", #endif 0 }; static XrmOptionDescRec helix_options [] = { { "-delay", ".delay", XrmoptionSepArg, 0 }, { "-subdelay", ".subdelay", XrmoptionSepArg, 0 }, { 0, 0, 0, 0 }, }; XSCREENSAVER_MODULE ("Helix", helix) xscreensaver-5.36/hacks/hopalong.c000644 000767 000024 00000042112 12701612216 017200 0ustar00jwzstaff000000 000000 /* -*- Mode: C; tab-width: 4 -*- */ /* hop --- real plane fractals */ #if 0 static const char sccsid[] = "@(#)hop.c 5.00 2000/11/01 xlockmore"; #endif /*- * Copyright (c) 1991 by Patrick J. Naughton. * * Permission to use, copy, modify, and distribute this software and its * documentation for any purpose and without fee is hereby granted, * provided that the above copyright notice appear in all copies and that * both that copyright notice and this permission notice appear in * supporting documentation. * * This file is provided AS IS with no warranties of any kind. The author * shall have no liability with respect to the infringement of copyrights, * trade secrets or any patents by this file or any part thereof. In no * event will the author be liable for any lost revenue or profits or * other special, indirect and consequential damages. * * Revision History: * Changes in xlockmore distribution * 01-Nov-2000: Allocation checks * 24-Jun-1997: EJK and RR functions stolen from xmartin2.2 * Ed Kubaitis ejk functions and xmartin * Renaldo Recuerdo rr function, generalized exponent version * of the Barry Martin's square root function * 10-May-1997: Compatible with xscreensaver * 27-Jul-1995: added Peter de Jong's hop from Scientific American * July 87 p. 111. Sometimes they are amazing but there are a * few duds (I did not see a pattern in the parameters). * 29-Mar-1995: changed name from hopalong to hop * 09-Dec-1994: added Barry Martin's sine hop * Changes in original xlock * 29-Oct-1990: fix bad (int) cast. * 29-Jul-1990: support for multiple screens. * 08-Jul-1990: new timing and colors and new algorithm for fractals. * 15-Dec-1989: Fix for proper skipping of {White,Black}Pixel() in colors. * 08-Oct-1989: Fixed long standing typo bug in RandomInitHop(); * Fixed bug in memory allocation in init_hop(); * Moved seconds() to an extern. * Got rid of the % mod since .mod is slow on a sparc. * 20-Sep-1989: Lint. * 31-Aug-1988: Forked from xlock.c for modularity. * 23-Mar-1988: Coded HOPALONG routines from Scientific American Sept. 86 p. 14. * Hopalong was attributed to Barry Martin of Aston University * (Birmingham, England) */ #ifdef STANDALONE #define MODE_hop #define DEFAULTS "*delay: 10000 \n" \ "*count: 1000 \n" \ "*cycles: 2500 \n" \ "*ncolors: 200 \n" \ "*fpsSolid: true \n" \ "*ignoreRotation: True \n" \ # define SMOOTH_COLORS # define reshape_hop 0 # include "xlockmore.h" /* in xscreensaver distribution */ # include "erase.h" #else /* STANDALONE */ # include "xlock.h" /* in xlockmore distribution */ #endif /* STANDALONE */ #ifdef MODE_hop #define DEF_MARTIN "False" #define DEF_POPCORN "False" #define DEF_EJK1 "False" #define DEF_EJK2 "False" #define DEF_EJK3 "False" #define DEF_EJK4 "False" #define DEF_EJK5 "False" #define DEF_EJK6 "False" #define DEF_RR "False" #define DEF_JONG "False" #define DEF_SINE "False" static Bool martin; static Bool popcorn; static Bool ejk1; static Bool ejk2; static Bool ejk3; static Bool ejk4; static Bool ejk5; static Bool ejk6; static Bool rr; static Bool jong; static Bool sine; static XrmOptionDescRec opts[] = { {"-martin", ".hop.martin", XrmoptionNoArg, "on"}, {"+martin", ".hop.martin", XrmoptionNoArg, "off"}, {"-popcorn", ".hop.popcorn", XrmoptionNoArg, "on"}, {"+popcorn", ".hop.popcorn", XrmoptionNoArg, "off"}, {"-ejk1", ".hop.ejk1", XrmoptionNoArg, "on"}, {"+ejk1", ".hop.ejk1", XrmoptionNoArg, "off"}, {"-ejk2", ".hop.ejk2", XrmoptionNoArg, "on"}, {"+ejk2", ".hop.ejk2", XrmoptionNoArg, "off"}, {"-ejk3", ".hop.ejk3", XrmoptionNoArg, "on"}, {"+ejk3", ".hop.ejk3", XrmoptionNoArg, "off"}, {"-ejk4", ".hop.ejk4", XrmoptionNoArg, "on"}, {"+ejk4", ".hop.ejk4", XrmoptionNoArg, "off"}, {"-ejk5", ".hop.ejk5", XrmoptionNoArg, "on"}, {"+ejk5", ".hop.ejk5", XrmoptionNoArg, "off"}, {"-ejk6", ".hop.ejk6", XrmoptionNoArg, "on"}, {"+ejk6", ".hop.ejk6", XrmoptionNoArg, "off"}, {"-rr", ".hop.rr", XrmoptionNoArg, "on"}, {"+rr", ".hop.rr", XrmoptionNoArg, "off"}, {"-jong", ".hop.jong", XrmoptionNoArg, "on"}, {"+jong", ".hop.jong", XrmoptionNoArg, "off"}, {"-sine", ".hop.sine", XrmoptionNoArg, "on"}, {"+sine", ".hop.sine", XrmoptionNoArg, "off"} }; static argtype vars[] = { {&martin, "martin", "Martin", DEF_MARTIN, t_Bool}, {&popcorn, "popcorn", "Popcorn", DEF_POPCORN, t_Bool}, {&ejk1, "ejk1", "EJK1", DEF_EJK1, t_Bool}, {&ejk2, "ejk2", "EJK2", DEF_EJK2, t_Bool}, {&ejk3, "ejk3", "EJK3", DEF_EJK3, t_Bool}, {&ejk4, "ejk4", "EJK4", DEF_EJK4, t_Bool}, {&ejk5, "ejk5", "EJK5", DEF_EJK5, t_Bool}, {&ejk6, "ejk6", "EJK6", DEF_EJK6, t_Bool}, {&rr, "rr", "RR", DEF_RR, t_Bool}, {&jong, "jong", "Jong", DEF_JONG, t_Bool}, {&sine, "sine", "Sine", DEF_SINE, t_Bool} }; static OptionStruct desc[] = { {"-/+martin", "turn on/off sqrt format"}, {"-/+popcorn", "turn on/off Clifford A. Pickover's popcorn format"}, {"-/+ejk1", "turn on/off ejk1 format"}, {"-/+ejk2", "turn on/off ejk2 format"}, {"-/+ejk3", "turn on/off ejk3 format"}, {"-/+ejk4", "turn on/off ejk4 format"}, {"-/+ejk5", "turn on/off ejk5 format"}, {"-/+ejk6", "turn on/off ejk6 format"}, {"-/+rr", "turn on/off rr format"}, {"-/+jong", "turn on/off jong format"}, {"-/+sine", "turn on/off sine format"} }; ENTRYPOINT ModeSpecOpt hop_opts = {sizeof opts / sizeof opts[0], opts, sizeof vars / sizeof vars[0], vars, desc}; #ifdef USE_MODULES ModStruct hop_description = {"hop", "init_hop", "draw_hop", "release_hop", "refresh_hop", "init_hop", (char *) NULL, &hop_opts, 10000, 1000, 2500, 1, 64, 1.0, "", "Shows real plane iterated fractals", 0, NULL}; #endif #define MARTIN 0 #define POPCORN 7 #define SINE 8 #define EJK1 1 #define EJK2 2 #define EJK3 9 #define EJK4 3 #define EJK5 4 #define EJK6 10 #define RR 5 #define JONG 6 #ifdef OFFENDING #define OPS 8 /* 8, 9, 10 might be too close to a swastika for some... */ #else #define OPS 11 #endif typedef struct { int centerx, centery; /* center of the screen */ double a, b, c, d; double i, j; /* hopalong parameters */ int inc; int pix; int op; int count; int bufsize; XPoint *pointBuffer; /* pointer for XDrawPoints */ #ifdef STANDALONE eraser_state *eraser; #endif } hopstruct; static hopstruct *hops = (hopstruct *) NULL; ENTRYPOINT void init_hop(ModeInfo * mi) { Display *display = MI_DISPLAY(mi); GC gc = MI_GC(mi); double range; hopstruct *hp; if (hops == NULL) { if ((hops = (hopstruct *) calloc(MI_NUM_SCREENS(mi), sizeof (hopstruct))) == NULL) return; } hp = &hops[MI_SCREEN(mi)]; hp->centerx = MI_WIDTH(mi) / 2; hp->centery = MI_HEIGHT(mi) / 2; /* Make the other operations less common since they are less interesting */ if (MI_IS_FULLRANDOM(mi)) { hp->op = NRAND(OPS); } else { if (martin) hp->op = MARTIN; else if (popcorn) hp->op = POPCORN; else if (ejk1) hp->op = EJK1; else if (ejk2) hp->op = EJK2; else if (ejk3) hp->op = EJK3; else if (ejk4) hp->op = EJK4; else if (ejk5) hp->op = EJK5; else if (ejk6) hp->op = EJK6; else if (rr) hp->op = RR; else if (jong) hp->op = JONG; else if (sine) hp->op = SINE; else hp->op = NRAND(OPS); } range = sqrt((double) hp->centerx * hp->centerx + (double) hp->centery * hp->centery) / (1.0 + LRAND() / MAXRAND); hp->i = hp->j = 0.0; hp->inc = (int) ((LRAND() / MAXRAND) * 200) - 100; #undef XMARTIN switch (hp->op) { case MARTIN: #ifdef XMARTIN hp->a = (LRAND() / MAXRAND) * 1500.0 + 40.0; hp->b = (LRAND() / MAXRAND) * 17.0 + 3.0; hp->c = (LRAND() / MAXRAND) * 3000.0 + 100.0; #else hp->a = ((LRAND() / MAXRAND) * 2.0 - 1.0) * range / 20.0; hp->b = ((LRAND() / MAXRAND) * 2.0 - 1.0) * range / 20.0; if (LRAND() & 1) hp->c = ((LRAND() / MAXRAND) * 2.0 - 1.0) * range / 20.0; else hp->c = 0.0; #endif if (MI_IS_VERBOSE(mi)) (void) fprintf(stdout, "sqrt a=%g, b=%g, c=%g\n", hp->a, hp->b, hp->c); break; case EJK1: #ifdef XMARTIN hp->a = (LRAND() / MAXRAND) * 500.0; hp->c = (LRAND() / MAXRAND) * 100.0 + 10.0; #else hp->a = ((LRAND() / MAXRAND) * 2.0 - 1.0) * range / 30.0; hp->c = ((LRAND() / MAXRAND) * 2.0 - 1.0) * range / 40.0; #endif hp->b = (LRAND() / MAXRAND) * 0.4; if (MI_IS_VERBOSE(mi)) (void) fprintf(stdout, "ejk1 a=%g, b=%g, c=%g\n", hp->a, hp->b, hp->c); break; case EJK2: #ifdef XMARTIN hp->a = (LRAND() / MAXRAND) * 500.0; #else hp->a = ((LRAND() / MAXRAND) * 2.0 - 1.0) * range / 30.0; #endif hp->b = pow(10.0, 6.0 + (LRAND() / MAXRAND) * 24.0); if (LRAND() & 1) hp->b = -hp->b; hp->c = pow(10.0, (LRAND() / MAXRAND) * 9.0); if (LRAND() & 1) hp->c = -hp->c; if (MI_IS_VERBOSE(mi)) (void) fprintf(stdout, "ejk2 a=%g, b=%g, c=%g\n", hp->a, hp->b, hp->c); break; case EJK3: #ifdef XMARTIN hp->a = (LRAND() / MAXRAND) * 500.0; hp->c = (LRAND() / MAXRAND) * 80.0 + 30.0; #else hp->a = ((LRAND() / MAXRAND) * 2.0 - 1.0) * range / 30.0; hp->c = ((LRAND() / MAXRAND) * 2.0 - 1.0) * range / 70.0; #endif hp->b = (LRAND() / MAXRAND) * 0.35 + 0.5; if (MI_IS_VERBOSE(mi)) (void) fprintf(stdout, "ejk3 a=%g, b=%g, c=%g\n", hp->a, hp->b, hp->c); break; case EJK4: #ifdef XMARTIN hp->a = (LRAND() / MAXRAND) * 1000.0; hp->c = (LRAND() / MAXRAND) * 40.0 + 30.0; #else hp->a = ((LRAND() / MAXRAND) * 2.0 - 1.0) * range / 2.0; hp->c = ((LRAND() / MAXRAND) * 2.0 - 1.0) * range / 200.0; #endif hp->b = (LRAND() / MAXRAND) * 9.0 + 1.0; if (MI_IS_VERBOSE(mi)) (void) fprintf(stdout, "ejk4 a=%g, b=%g, c=%g\n", hp->a, hp->b, hp->c); break; case EJK5: #ifdef XMARTIN hp->a = (LRAND() / MAXRAND) * 600.0; hp->c = (LRAND() / MAXRAND) * 90.0 + 20.0; #else hp->a = ((LRAND() / MAXRAND) * 2.0 - 1.0) * range / 2.0; hp->c = ((LRAND() / MAXRAND) * 2.0 - 1.0) * range / 200.0; #endif hp->b = (LRAND() / MAXRAND) * 0.3 + 0.1; if (MI_IS_VERBOSE(mi)) (void) fprintf(stdout, "ejk5 a=%g, b=%g, c=%g\n", hp->a, hp->b, hp->c); break; case EJK6: #ifdef XMARTIN hp->a = (LRAND() / MAXRAND) * 100.0 + 550.0; #else hp->a = ((LRAND() / MAXRAND) * 2.0 - 1.0) * range / 30.0; #endif hp->b = (LRAND() / MAXRAND) + 0.5; if (MI_IS_VERBOSE(mi)) (void) fprintf(stdout, "ejk6 a=%g, b=%g\n", hp->a, hp->b); break; case RR: #ifdef XMARTIN hp->a = (LRAND() / MAXRAND) * 100.0; hp->b = (LRAND() / MAXRAND) * 20.0; hp->c = (LRAND() / MAXRAND) * 200.0; #else hp->a = ((LRAND() / MAXRAND) * 2.0 - 1.0) * range / 40.0; hp->b = ((LRAND() / MAXRAND) * 2.0 - 1.0) * range / 200.0; hp->c = ((LRAND() / MAXRAND) * 2.0 - 1.0) * range / 20.0; #endif hp->d = (LRAND() / MAXRAND) * 0.9; if (MI_IS_VERBOSE(mi)) (void) fprintf(stdout, "rr a=%g, b=%g, c=%g, d=%g\n", hp->a, hp->b, hp->c, hp->d); break; case POPCORN: hp->a = 0.0; hp->b = 0.0; hp->c = ((LRAND() / MAXRAND) * 2.0 - 1.0) * 0.24 + 0.25; hp->inc = 100; if (MI_IS_VERBOSE(mi)) (void) fprintf(stdout, "popcorn a=%g, b=%g, c=%g, d=%g\n", hp->a, hp->b, hp->c, hp->d); break; case JONG: hp->a = ((LRAND() / MAXRAND) * 2.0 - 1.0) * M_PI; hp->b = ((LRAND() / MAXRAND) * 2.0 - 1.0) * M_PI; hp->c = ((LRAND() / MAXRAND) * 2.0 - 1.0) * M_PI; hp->d = ((LRAND() / MAXRAND) * 2.0 - 1.0) * M_PI; if (MI_IS_VERBOSE(mi)) (void) fprintf(stdout, "jong a=%g, b=%g, c=%g, d=%g\n", hp->a, hp->b, hp->c, hp->d); break; case SINE: /* MARTIN2 */ #ifdef XMARTIN hp->a = M_PI + ((LRAND() / MAXRAND) * 2.0 - 1.0) * 0.07; #else hp->a = M_PI + ((LRAND() / MAXRAND) * 2.0 - 1.0) * 0.7; #endif if (MI_IS_VERBOSE(mi)) (void) fprintf(stdout, "sine a=%g\n", hp->a); break; } if (MI_NPIXELS(mi) > 2) hp->pix = NRAND(MI_NPIXELS(mi)); hp->bufsize = MI_COUNT(mi); if (hp->pointBuffer == NULL) { if ((hp->pointBuffer = (XPoint *) malloc(hp->bufsize * sizeof (XPoint))) == NULL) return; } #ifndef STANDALONE MI_CLEARWINDOW(mi); #endif XSetForeground(display, gc, MI_WHITE_PIXEL(mi)); hp->count = 0; } ENTRYPOINT void draw_hop(ModeInfo * mi) { double oldj, oldi; XPoint *xp; int k; hopstruct *hp; if (hops == NULL) return; hp = &hops[MI_SCREEN(mi)]; #ifdef STANDALONE if (hp->eraser) { hp->eraser = erase_window (MI_DISPLAY(mi), MI_WINDOW(mi), hp->eraser); return; } #endif if (hp->pointBuffer == NULL) return; xp = hp->pointBuffer; k = hp->bufsize; MI_IS_DRAWN(mi) = True; hp->inc++; if (MI_NPIXELS(mi) > 2) { XSetForeground(MI_DISPLAY(mi), MI_GC(mi), MI_PIXEL(mi, hp->pix)); if (++hp->pix >= MI_NPIXELS(mi)) hp->pix = 0; } while (k--) { oldj = hp->j; switch (hp->op) { case MARTIN: /* SQRT, MARTIN1 */ oldi = hp->i + hp->inc; hp->j = hp->a - hp->i; hp->i = oldj + ((hp->i < 0) ? sqrt(fabs(hp->b * oldi - hp->c)) : -sqrt(fabs(hp->b * oldi - hp->c))); xp->x = hp->centerx + (int) (hp->i + hp->j); xp->y = hp->centery - (int) (hp->i - hp->j); break; case EJK1: oldi = hp->i + hp->inc; hp->j = hp->a - hp->i; hp->i = oldj - ((hp->i > 0) ? (hp->b * oldi - hp->c) : -(hp->b * oldi - hp->c)); xp->x = hp->centerx + (int) (hp->i + hp->j); xp->y = hp->centery - (int) (hp->i - hp->j); break; case EJK2: oldi = hp->i + hp->inc; hp->j = hp->a - hp->i; hp->i = oldj - ((hp->i < 0) ? log(fabs(hp->b * oldi - hp->c)) : -log(fabs(hp->b * oldi - hp->c))); xp->x = hp->centerx + (int) (hp->i + hp->j); xp->y = hp->centery - (int) (hp->i - hp->j); break; case EJK3: oldi = hp->i + hp->inc; hp->j = hp->a - hp->i; hp->i = oldj - ((hp->i > 0) ? sin(hp->b * oldi) - hp->c : -sin(hp->b * oldi) - hp->c); xp->x = hp->centerx + (int) (hp->i + hp->j); xp->y = hp->centery - (int) (hp->i - hp->j); break; case EJK4: oldi = hp->i + hp->inc; hp->j = hp->a - hp->i; hp->i = oldj - ((hp->i > 0) ? sin(hp->b * oldi) - hp->c : -sqrt(fabs(hp->b * oldi - hp->c))); xp->x = hp->centerx + (int) (hp->i + hp->j); xp->y = hp->centery - (int) (hp->i - hp->j); break; case EJK5: oldi = hp->i + hp->inc; hp->j = hp->a - hp->i; hp->i = oldj - ((hp->i > 0) ? sin(hp->b * oldi) - hp->c : -(hp->b * oldi - hp->c)); xp->x = hp->centerx + (int) (hp->i + hp->j); xp->y = hp->centery - (int) (hp->i - hp->j); break; case EJK6: oldi = hp->i + hp->inc; hp->j = hp->a - hp->i; hp->i = oldj - asin((hp->b * oldi) - (long) (hp->b * oldi)); xp->x = hp->centerx + (int) (hp->i + hp->j); xp->y = hp->centery - (int) (hp->i - hp->j); break; case RR: /* RR1 */ oldi = hp->i + hp->inc; hp->j = hp->a - hp->i; hp->i = oldj - ((hp->i < 0) ? -pow(fabs(hp->b * oldi - hp->c), hp->d) : pow(fabs(hp->b * oldi - hp->c), hp->d)); xp->x = hp->centerx + (int) (hp->i + hp->j); xp->y = hp->centery - (int) (hp->i - hp->j); break; case POPCORN: #define HVAL 0.05 #define INCVAL 50 { double tempi, tempj; if (hp->inc >= 100) hp->inc = 0; if (hp->inc == 0) { if (hp->a++ >= INCVAL) { hp->a = 0; if (hp->b++ >= INCVAL) hp->b = 0; } hp->i = (-hp->c * INCVAL / 2 + hp->c * hp->a) * M_PI / 180.0; hp->j = (-hp->c * INCVAL / 2 + hp->c * hp->b) * M_PI / 180.0; } tempi = hp->i - HVAL * sin(hp->j + tan(3.0 * hp->j)); tempj = hp->j - HVAL * sin(hp->i + tan(3.0 * hp->i)); xp->x = hp->centerx + (int) (MI_WIDTH(mi) / 40 * tempi); xp->y = hp->centery + (int) (MI_HEIGHT(mi) / 40 * tempj); hp->i = tempi; hp->j = tempj; } break; case JONG: if (hp->centerx > 0) oldi = hp->i + 4 * hp->inc / hp->centerx; else oldi = hp->i; hp->j = sin(hp->c * hp->i) - cos(hp->d * hp->j); hp->i = sin(hp->a * oldj) - cos(hp->b * oldi); xp->x = hp->centerx + (int) (hp->centerx * (hp->i + hp->j) / 4.0); xp->y = hp->centery - (int) (hp->centery * (hp->i - hp->j) / 4.0); break; case SINE: /* MARTIN2 */ oldi = hp->i + hp->inc; hp->j = hp->a - hp->i; hp->i = oldj - sin(oldi); xp->x = hp->centerx + (int) (hp->i + hp->j); xp->y = hp->centery - (int) (hp->i - hp->j); break; } xp++; } XDrawPoints(MI_DISPLAY(mi), MI_WINDOW(mi), MI_GC(mi), hp->pointBuffer, hp->bufsize, CoordModeOrigin); if (++hp->count > MI_CYCLES(mi)) { #ifdef STANDALONE hp->eraser = erase_window (MI_DISPLAY(mi), MI_WINDOW(mi), hp->eraser); #endif /* STANDALONE */ init_hop(mi); } } ENTRYPOINT void release_hop(ModeInfo * mi) { if (hops != NULL) { int screen; for (screen = 0; screen < MI_NUM_SCREENS(mi); screen++) { hopstruct *hp = &hops[screen]; if (hp->pointBuffer != NULL) (void) free((void *) hp->pointBuffer); } (void) free((void *) hops); hops = (hopstruct *) NULL; } } ENTRYPOINT void refresh_hop(ModeInfo * mi) { MI_CLEARWINDOW(mi); } ENTRYPOINT Bool hop_handle_event (ModeInfo *mi, XEvent *event) { if (screenhack_event_helper (MI_DISPLAY(mi), MI_WINDOW(mi), event)) { MI_CLEARWINDOW(mi); init_hop (mi); return True; } return False; } XSCREENSAVER_MODULE_2 ("Hopalong", hopalong, hop) #endif /* MODE_hop */ xscreensaver-5.36/hacks/hypercube.c000644 000767 000024 00000033111 12717750052 017366 0ustar00jwzstaff000000 000000 /* xscreensaver, Copyright (c) 1992-2008 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 code derived from TI Explorer Lisp code by Joe Keane, Fritz Mueller, * and Jamie Zawinski. */ #include #include "screenhack.h" #define POINT_COUNT 16 #define LINE_COUNT 32 #define ANGLE_SCALE 0.001 struct line_info { char li_ip; char li_iq; char li_color; char li_pad; }; struct point_state { short old_x, old_y; short new_x, new_y; }; struct hyper_state { char hs_stop; char hs_icon; char hs_resize; char hs_redraw; Display *hs_display; Window hs_window; float hs_two_observer_z; float hs_offset_x; float hs_offset_y; float hs_unit_scale; int hs_delay; GC hs_color_gcs[8]; GC black_gc; #if 0 double hs_angle_xy; double hs_angle_xz; double hs_angle_yz; double hs_angle_xw; double hs_angle_yw; double hs_angle_zw; #endif double hs_cos_xy, hs_sin_xy; double hs_cos_xz, hs_sin_xz; double hs_cos_yz, hs_sin_yz; double hs_cos_xw, hs_sin_xw; double hs_cos_yw, hs_sin_yw; double hs_cos_zw, hs_sin_zw; double hs_ref_ax, hs_ref_ay, hs_ref_az, hs_ref_aw; double hs_ref_bx, hs_ref_by, hs_ref_bz, hs_ref_bw; double hs_ref_cx, hs_ref_cy, hs_ref_cz, hs_ref_cw; double hs_ref_dx, hs_ref_dy, hs_ref_dz, hs_ref_dw; struct point_state hs_points[POINT_COUNT]; int roted; }; static const struct line_info line_table[LINE_COUNT]; static const char *hypercube_defaults[] = { "*observer-z: 3.0", "*delay: 10000", "*xy: 3", "*xz: 5", "*yw: 10", "*yz: 0", "*xw: 0", "*zw: 0", ".background: black", ".foreground: white", "*fpsSolid: true", "*color0: magenta", "*color3: #FF0093", "*color1: yellow", "*color2: #FF9300", "*color4: green", "*color7: #00FFD0", "*color5: #8080FF", "*color6: #00D0FF", 0 }; static XrmOptionDescRec hypercube_options [] = { { "-color0", ".color0", XrmoptionSepArg, 0 }, { "-color1", ".color1", XrmoptionSepArg, 0 }, { "-color2", ".color2", XrmoptionSepArg, 0 }, { "-color3", ".color3", XrmoptionSepArg, 0 }, { "-color4", ".color4", XrmoptionSepArg, 0 }, { "-color5", ".color5", XrmoptionSepArg, 0 }, { "-color6", ".color6", XrmoptionSepArg, 0 }, { "-color7", ".color7", XrmoptionSepArg, 0 }, { "-xw", ".xw", XrmoptionSepArg, 0 }, { "-xy", ".xy", XrmoptionSepArg, 0 }, { "-xz", ".xz", XrmoptionSepArg, 0 }, { "-yw", ".yw", XrmoptionSepArg, 0 }, { "-yz", ".yz", XrmoptionSepArg, 0 }, { "-zw", ".zw", XrmoptionSepArg, 0 }, { "-observer-z", ".observer-z", XrmoptionSepArg, 0 }, { "-delay", ".delay", XrmoptionSepArg, 0 }, { 0, 0, 0, 0 } }; static void set_sizes (struct hyper_state *hs, int width, int height); static void * hypercube_init (Display *dpy, Window win) { XGCValues gcv; Colormap cmap; unsigned long bg_pixel; int delay; float observer_z; struct hyper_state *hs = (struct hyper_state *) calloc (1, sizeof(*hs)); hs->hs_display = dpy; hs->hs_window = win; observer_z = get_float_resource (dpy, "observer-z", "Float"); if (observer_z < 1.125) observer_z = 1.125; /* hs->hs_observer_z = observer_z; */ hs->hs_two_observer_z = 2.0 * observer_z; { XWindowAttributes wa; XGetWindowAttributes (dpy, win, &wa); cmap = wa.colormap; set_sizes (hs, wa.width, wa.height); } delay = get_integer_resource (dpy, "delay", "Integer"); hs->hs_delay = delay; bg_pixel = get_pixel_resource (dpy, cmap, "background", "Background"); if (mono_p) { GC black_gc; unsigned long fg_pixel; GC white_gc; gcv.function = GXcopy; gcv.foreground = bg_pixel; black_gc = XCreateGC (dpy, win, GCForeground|GCFunction, &gcv); fg_pixel = get_pixel_resource (dpy, cmap, "foreground", "Foreground"); gcv.foreground = fg_pixel ^ bg_pixel; white_gc = XCreateGC (dpy, win, GCForeground|GCFunction, &gcv); hs->hs_color_gcs[0] = black_gc; hs->hs_color_gcs[1] = white_gc; } else { int col; gcv.function = GXcopy; gcv.foreground = get_pixel_resource (dpy, cmap, "background", "Background"); hs->black_gc = XCreateGC (dpy, win, GCForeground|GCFunction, &gcv); for (col = 0; col < 8; col++) { char buffer[16]; unsigned long fg_pixel; GC color_gc; sprintf (buffer, "color%d", col); fg_pixel = get_pixel_resource (dpy, cmap, buffer, "Foreground"); gcv.foreground = fg_pixel; color_gc = XCreateGC (dpy, win, GCForeground|GCFunction, &gcv); hs->hs_color_gcs[col] = color_gc; } } hs->hs_ref_ax = 1.0, hs->hs_ref_ay = 0.0, hs->hs_ref_az = 0.0, hs->hs_ref_aw = 0.0; hs->hs_ref_bx = 0.0, hs->hs_ref_by = 1.0, hs->hs_ref_bz = 0.0, hs->hs_ref_bw = 0.0; hs->hs_ref_cx = 0.0, hs->hs_ref_cy = 0.0, hs->hs_ref_cz = 1.0, hs->hs_ref_cw = 0.0; hs->hs_ref_dx = 0.0, hs->hs_ref_dy = 0.0, hs->hs_ref_dz = 0.0, hs->hs_ref_dw = 1.0; { double xy; double xz; double yz; double xw; double yw; double zw; double cos_xy, sin_xy; double cos_xz, sin_xz; double cos_yz, sin_yz; double cos_xw, sin_xw; double cos_yw, sin_yw; double cos_zw, sin_zw; xy = get_float_resource (dpy, "xy", "Float") * ANGLE_SCALE; xz = get_float_resource (dpy, "xz", "Float") * ANGLE_SCALE; yz = get_float_resource (dpy, "yz", "Float") * ANGLE_SCALE; xw = get_float_resource (dpy, "xw", "Float") * ANGLE_SCALE; yw = get_float_resource (dpy, "yw", "Float") * ANGLE_SCALE; zw = get_float_resource (dpy, "zw", "Float") * ANGLE_SCALE; cos_xy = cos (xy), sin_xy = sin (xy); hs->hs_cos_xy = cos_xy, hs->hs_sin_xy = sin_xy; cos_xz = cos (xz), sin_xz = sin (xz); hs->hs_cos_xz = cos_xz, hs->hs_sin_xz = sin_xz; cos_yz = cos (yz), sin_yz = sin (yz); hs->hs_cos_yz = cos_yz, hs->hs_sin_yz = sin_yz; cos_xw = cos (xw), sin_xw = sin (xw); hs->hs_cos_xw = cos_xw, hs->hs_sin_xw = sin_xw; cos_yw = cos (yw), sin_yw = sin (yw); hs->hs_cos_yw = cos_yw, hs->hs_sin_yw = sin_yw; cos_zw = cos (zw), sin_zw = sin (zw); hs->hs_cos_zw = cos_zw, hs->hs_sin_zw = sin_zw; } return hs; } static unsigned long hypercube_draw (Display *dpy, Window window, void *closure) { struct hyper_state *hs = (struct hyper_state *) closure; int this_delay = hs->hs_delay; #ifdef HAVE_JWXYZ /* Don't second-guess Quartz's double-buffering */ XClearWindow (dpy, window); #endif { int icon; int resize; char moved[POINT_COUNT]; int redraw; int stop; int delay; icon = hs->hs_icon; resize = hs->hs_resize; if (icon || !(hs->roted | resize)) goto skip1; { float observer_z; float unit_scale; float offset_x; float offset_y; double az, bz, cz, dz; double sum_z; double ax, bx, cx, dx; double sum_x; double ay, by, cy, dy; double sum_y; struct point_state *ps; int old_x; int old_y; double mul; double xf; double yf; int new_x; int new_y; int mov; #define compute(as,bs,cs,ds,i) \ az = hs->hs_ref_az; bz = hs->hs_ref_bz; cz = hs->hs_ref_cz; dz = hs->hs_ref_dz; \ ax = hs->hs_ref_ax; bx = hs->hs_ref_bx; cx = hs->hs_ref_cx; dx = hs->hs_ref_dx; \ ay = hs->hs_ref_ay; by = hs->hs_ref_by; cy = hs->hs_ref_cy; dy = hs->hs_ref_dy; \ sum_z = as az bs bz cs cz ds dz; \ observer_z = hs->hs_two_observer_z; \ unit_scale = hs->hs_unit_scale; \ sum_x = as ax bs bx cs cx ds dx; \ sum_y = as ay bs by cs cy ds dy; \ ps = &hs->hs_points[i]; \ mul = unit_scale / (observer_z - sum_z); \ offset_x = hs->hs_offset_x; \ offset_y = hs->hs_offset_y; \ old_x = ps->new_x; \ old_y = ps->new_y; \ xf = sum_x * mul + offset_x; \ yf = sum_y * mul + offset_y; \ new_x = (int)rint(xf); \ new_y = (int)rint(yf); \ ps->old_x = old_x; \ ps->old_y = old_y; \ ps->new_x = new_x; \ ps->new_y = new_y; \ mov = old_x != new_x || old_y != new_y; \ moved[i] = mov; compute (-, -, -, -, 0); compute (-, -, -, +, 1); compute (-, -, +, -, 2); compute (-, -, +, +, 3); compute (-, +, -, -, 4); compute (-, +, -, +, 5); compute (-, +, +, -, 6); compute (-, +, +, +, 7); compute (+, -, -, -, 8); compute (+, -, -, +, 9); compute (+, -, +, -, 10); compute (+, -, +, +, 11); compute (+, +, -, -, 12); compute (+, +, -, +, 13); compute (+, +, +, -, 14); compute (+, +, +, +, 15); } skip1: icon = hs->hs_icon; redraw = hs->hs_redraw; if (icon || !(hs->roted | redraw)) goto skip2; { int lc; const struct line_info *lip; int mono; Window win; lc = LINE_COUNT; lip = &line_table[0]; mono = mono_p; win = hs->hs_window; while (--lc >= 0) { int ip; int iq; int col; struct point_state *sp; struct point_state *sq; int mov_p; int mov_q; GC erase_gc; GC draw_gc; int p_x; int p_y; int q_x; int q_y; ip = lip->li_ip; iq = lip->li_iq; col = lip->li_color; lip++; mov_p = moved[ip]; mov_q = moved[iq]; if (!(redraw | mov_p | mov_q)) continue; sp = &hs->hs_points[ip]; sq = &hs->hs_points[iq]; if (mono) { erase_gc = hs->hs_color_gcs[0]; draw_gc = hs->hs_color_gcs[1]; } else { erase_gc = hs->black_gc; draw_gc = hs->hs_color_gcs[col]; } if (!redraw) { p_x = sp->old_x; p_y = sp->old_y; q_x = sq->old_x; q_y = sq->old_y; XDrawLine (dpy, win, erase_gc, p_x, p_y, q_x, q_y); } p_x = sp->new_x; p_y = sp->new_y; q_x = sq->new_x; q_y = sq->new_y; XDrawLine (dpy, win, draw_gc, p_x, p_y, q_x, q_y); } } skip2: stop = hs->hs_stop; hs->roted = 0; if (stop) goto skip3; hs->roted = 1; { double cos_a; double sin_a; double old_u; double old_v; double new_u; double new_v; /* If you get error messages about the following forms, and you think you're using an ANSI C conforming compiler, then you're mistaken. Possibly you're mixing an ANSI compiler with a non-ANSI preprocessor, or vice versa. Regardless, your system is broken; it's not a bug in this program. */ #if defined(__STDC__) || defined(__ANSI_CPP__) #define rotate(name,dim0,dim1) \ old_u = hs->hs_ref_##name##dim0; \ old_v = hs->hs_ref_##name##dim1; \ new_u = old_u * cos_a + old_v * sin_a; \ new_v = old_v * cos_a - old_u * sin_a; \ hs->hs_ref_##name##dim0 = new_u; \ hs->hs_ref_##name##dim1 = new_v; #define rotates(dim0,dim1) \ if (hs->hs_sin_##dim0##dim1 != 0) { \ cos_a = hs->hs_cos_##dim0##dim1; \ sin_a = hs->hs_sin_##dim0##dim1; \ rotate(a,dim0,dim1); \ rotate(b,dim0,dim1); \ rotate(c,dim0,dim1); \ rotate(d,dim0,dim1); \ } #else /* !__STDC__, courtesy of Andreas Luik */ #define rotate(name,dim0,dim1) \ old_u = hs->hs_ref_/**/name/**/dim0; \ old_v = hs->hs_ref_/**/name/**/dim1; \ new_u = old_u * cos_a + old_v * sin_a; \ new_v = old_v * cos_a - old_u * sin_a; \ hs->hs_ref_/**/name/**/dim0 = new_u; \ hs->hs_ref_/**/name/**/dim1 = new_v; #define rotates(dim0,dim1) \ if (hs->hs_sin_/**/dim0/**/dim1 != 0) { \ cos_a = hs->hs_cos_/**/dim0/**/dim1; \ sin_a = hs->hs_sin_/**/dim0/**/dim1; \ rotate(a,dim0,dim1); \ rotate(b,dim0,dim1); \ rotate(c,dim0,dim1); \ rotate(d,dim0,dim1); \ } #endif /* !__STDC__ */ rotates (x,y); rotates (x,z); rotates (y,z); rotates (x,w); rotates (y,w); rotates (z,w); } skip3: /* stop = hs->hs_stop; */ delay = hs->hs_delay; if (stop && this_delay < 10000) this_delay = 10000; } return this_delay; } static Bool hypercube_event (Display *dpy, Window window, void *closure, XEvent *e) { struct hyper_state *hs = (struct hyper_state *) closure; if (e->type == ButtonPress && e->xbutton.button == 2) { hs->hs_stop = !hs->hs_stop; return True; } return False; } static void hypercube_reshape (Display *dpy, Window window, void *closure, unsigned int w, unsigned int h) { struct hyper_state *hs = (struct hyper_state *) closure; set_sizes (hs, w, h); XClearWindow (dpy, window); } static void set_sizes (struct hyper_state *hs, int width, int height) { double observer_z; int min_dim; double var; double offset_x; double offset_y; double unit_scale; observer_z = 0.5 * hs->hs_two_observer_z; min_dim = width < height ? width : height; var = sqrt(observer_z * observer_z - 1.0); offset_x = 0.5 * (double)(width - 1); offset_y = 0.5 * (double)(height - 1); unit_scale = 0.4 * min_dim * var; hs->hs_offset_x = (float)offset_x; hs->hs_offset_y = (float)offset_y; hs->hs_unit_scale = (float)unit_scale; } /* data */ static const struct line_info line_table[LINE_COUNT] = { { 0, 1, 0, }, { 0, 2, 0, }, { 1, 3, 0, }, { 2, 3, 0, }, { 4, 5, 1, }, { 4, 6, 1, }, { 5, 7, 1, }, { 6, 7, 1, }, { 0, 4, 4, }, { 0, 8, 4, }, { 4, 12, 4, }, { 8, 12, 4, }, { 1, 5, 5, }, { 1, 9, 5, }, { 5, 13, 5, }, { 9, 13, 5, }, { 2, 6, 6, }, { 2, 10, 6, }, { 6, 14, 6, }, { 10, 14, 6, }, { 3, 7, 7, }, { 3, 11, 7, }, { 7, 15, 7, }, { 11, 15, 7, }, { 8, 9, 2, }, { 8, 10, 2, }, { 9, 11, 2, }, { 10, 11, 2, }, { 12, 13, 3, }, { 12, 14, 3, }, { 13, 15, 3, }, { 14, 15, 3, }, }; static void hypercube_free (Display *dpy, Window window, void *closure) { } XSCREENSAVER_MODULE ("HyperCube", hypercube) xscreensaver-5.36/hacks/ifs.c000644 000767 000024 00000036276 12717750050 016176 0ustar00jwzstaff000000 000000 /* Copyright © Chris Le Sueur and Robby Griffin, 2005-2006 Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. Ultimate thanks go to Massimino Pascal, who created the original xscreensaver hack, and inspired me with it's swirly goodness. This version adds things like variable quality, number of functions and also a groovier colouring mode. This version by Chris Le Sueur , Feb 2005 Many improvements by Robby Griffin , Mar 2006 Multi-coloured mode added by Jack Grahl , Jan 2007 */ #include #include #include #include #include #include "screenhack.h" #undef countof #define countof(x) (sizeof((x)) / sizeof(*(x))) typedef struct { float r, s, tx, ty; /* Rotation, Scale, Translation X & Y */ float ro, rt, rc; /* Old Rotation, Rotation Target, Rotation Counter */ float so, st, sc; /* Old Scale, Scale Target, Scale Counter */ float sa, txa, tya; /* Scale change, Translation change */ int ua, ub, utx; /* Precomputed combined r,s,t values */ int uc, ud, uty; /* Precomputed combined r,s,t values */ } Lens; struct state { Display *dpy; Window window; GC gc; Drawable backbuffer; XColor *colours; int ncolours; int ccolour; int blackColor, whiteColor; int width, widthb, height; int width8, height8; unsigned int *board; XPoint pointbuf[1000]; int npoints; int xmin, xmax, ymin, ymax; int x, y; int delay; int lensnum; Lens *lenses; int length; int mode; Bool recurse; Bool multi; Bool translate, scale, rotate; }; #define getdot(x,y) (st->board[((y)*st->widthb)+((x)>>5)] & (1<<((x) & 31))) #define setdot(x,y) (st->board[((y)*st->widthb)+((x)>>5)] |= (1<<((x) & 31))) static float myrandom(float up) { return (((float)random() / RAND_MAX) * up); } static const char *ifs_defaults [] = { ".background: Black", "*lensnum: 3", "*fpsSolid: true", "*length: 9", "*mode: 0", "*colors: 200", "*delay: 20000", "*translate: True", "*scale: True", "*rotate: True", "*recurse: False", "*multi: True", # ifdef HAVE_JWXYZ /* Don't second-guess Quartz's double-buffering */ "*doubleBuffer: False", #else "*doubleBuffer: True", #endif #ifdef HAVE_MOBILE "*ignoreRotation: True", #endif 0 }; static XrmOptionDescRec ifs_options [] = { { "-detail", ".length", XrmoptionSepArg, 0 }, { "-delay", ".delay", XrmoptionSepArg, 0 }, { "-mode", ".mode", XrmoptionSepArg, 0 }, { "-colors", ".colors", XrmoptionSepArg, 0 }, { "-functions", ".lensnum", XrmoptionSepArg, 0 }, { "-no-translate", ".translate", XrmoptionNoArg, "False" }, { "-no-scale", ".scale", XrmoptionNoArg, "False" }, { "-no-rotate", ".rotate", XrmoptionNoArg, "False" }, { "-recurse", ".recurse", XrmoptionNoArg, "True" }, { "-iterate", ".recurse", XrmoptionNoArg, "False" }, { "-multi", ".multi", XrmoptionNoArg, "True" }, { "-no-multi", ".multi", XrmoptionNoArg, "False" }, { "-db", ".doubleBuffer",XrmoptionNoArg, "True" }, { "-no-db", ".doubleBuffer",XrmoptionNoArg, "False" }, { 0, 0, 0, 0 } }; /* Draw all the queued points on the backbuffer */ static void drawpoints(struct state *st) { XDrawPoints(st->dpy, st->backbuffer, st->gc, st->pointbuf, st->npoints, CoordModeOrigin); st->npoints = 0; } /* Set a point to be drawn, if it hasn't been already. * Expects coordinates in 256ths of a pixel. */ static void sp(struct state *st, int x, int y) { if (x < 0 || x >= st->width8 || y < 0 || y >= st->height8) return; x >>= 8; y >>= 8; if (getdot(x, y)) return; setdot(x, y); if (x < st->xmin) st->xmin = x; if (x > st->xmax) st->xmax = x; if (y < st->ymin) st->ymin = y; if (y > st->ymax) st->ymax = y; st->pointbuf[st->npoints].x = x; st->pointbuf[st->npoints].y = y; st->npoints++; if (st->npoints >= countof(st->pointbuf)) { drawpoints(st); } } /* Precompute integer values for matrix multiplication and vector * addition. The matrix multiplication will go like this (see iterate()): * |x2| |ua ub| |x| |utx| * | | = | | * | | + | | * |y2| |uc ud| |y| |uty| * * There is an extra factor of 2^10 in these values, and an extra factor of * 2^8 in the coordinates, in order to implement fixed-point arithmetic. */ static void lensmatrix(struct state *st, Lens *l) { l->ua = 1024.0 * l->s * cos(l->r); l->ub = -1024.0 * l->s * sin(l->r); l->uc = -l->ub; l->ud = l->ua; l->utx = 131072.0 * st->width * (l->s * (sin(l->r) - cos(l->r)) + l->tx / 16 + 1); l->uty = -131072.0 * st->height * (l->s * (sin(l->r) + cos(l->r)) + l->ty / 16 - 1); } static void CreateLens(struct state *st, float nr, float ns, float nx, float ny, Lens *newlens) { newlens->sa = newlens->txa = newlens->tya = 0; if (st->rotate) { newlens->r = newlens->ro = newlens->rt = nr; newlens->rc = 1; } else newlens->r = 0; if (st->scale) { newlens->s = newlens->so = newlens->st = ns; newlens->sc = 1; } else newlens->s = 0.5; newlens->tx = nx; newlens->ty = ny; lensmatrix(st, newlens); } static void mutate(struct state *st, Lens *l) { if (st->rotate) { float factor; if(l->rc >= 1) { l->rc = 0; l->ro = l->rt; l->rt = myrandom(4) - 2; } factor = (sin((-M_PI / 2.0) + M_PI * l->rc) + 1.0) / 2.0; l->r = l->ro + (l->rt - l->ro) * factor; l->rc += 0.01; } if (st->scale) { float factor; if (l->sc >= 1) { /* Reset counter, obtain new target value */ l->sc = 0; l->so = l->st; l->st = myrandom(2) - 1; } factor = (sin((-M_PI / 2.0) + M_PI * l->sc) + 1.0) / 2.0; /* Take average of old target and new target, using factor to * * weight. It's computed sinusoidally, resulting in smooth, * * rhythmic transitions. */ l->s = l->so + (l->st - l->so) * factor; l->sc += 0.01; } if (st->translate) { l->txa += myrandom(0.004) - 0.002; l->tya += myrandom(0.004) - 0.002; l->tx += l->txa; l->ty += l->tya; if (l->tx > 6) l->txa -= 0.004; if (l->ty > 6) l->tya -= 0.004; if (l->tx < -6) l->txa += 0.004; if (l->ty < -6) l->tya += 0.004; if (l->txa > 0.05 || l->txa < -0.05) l->txa /= 1.7; if (l->tya > 0.05 || l->tya < -0.05) l->tya /= 1.7; } if (st->rotate || st->scale || st->translate) { lensmatrix(st, l); } } #define STEPX(l,x,y) (((l)->ua * (x) + (l)->ub * (y) + (l)->utx) >> 10) #define STEPY(l,x,y) (((l)->uc * (x) + (l)->ud * (y) + (l)->uty) >> 10) /*#define STEPY(l,x,y) (((l)->ua * (y) - (l)->ub * (x) + (l)->uty) >> 10)*/ /* Calls itself times - with results from each lens/function. * * After calls to itself, it stops iterating and draws a point. */ static void recurse(struct state *st, int x, int y, int length, int p) { int i; Lens *l; if (length == 0) { if (p == 0) sp(st, x, y); else { l = &st->lenses[p]; sp(st, STEPX(l, x, y), STEPY(l, x, y)); } } else { for (i = 0; i < st->lensnum; i++) { l = &st->lenses[i]; recurse(st, STEPX(l, x, y), STEPY(l, x, y), length - 1, p); } } } /* Performs random lens transformations, drawing a point at each * iteration after the first 10. */ static void iterate(struct state *st, int count, int p) { int i; Lens *l; int x = st->x; int y = st->y; int tx; # define STEP() \ l = &st->lenses[random() % st->lensnum]; \ tx = STEPX(l, x, y); \ y = STEPY(l, x, y); \ x = tx for (i = 0; i < 10; i++) { STEP(); } for ( ; i < count; i++) { STEP(); if (p == 0) sp(st, x, y); else { l = &st->lenses[p]; sp(st, STEPX(l, x, y), STEPY(l, x, y)); } } # undef STEP st->x = x; st->y = y; } /* Come on and iterate, iterate, iterate and sing... * * Yeah, this function just calls iterate, mutate, * * and then draws everything. */ static unsigned long ifs_draw (Display *dpy, Window window, void *closure) { struct state *st = (struct state *) closure; int i; int xmin = st->xmin, xmax = st->xmax, ymin = st->ymin, ymax = st->ymax; int partcolor, x, y; /* erase whatever was drawn in the previous frame */ if (xmin <= xmax && ymin <= ymax) { XSetForeground(st->dpy, st->gc, st->blackColor); XFillRectangle(st->dpy, st->backbuffer, st->gc, xmin, ymin, xmax - xmin + 1, ymax - ymin + 1); st->xmin = st->width + 1; st->xmax = st->ymax = -1; st->ymin = st->height + 1; } st->ccolour++; st->ccolour %= st->ncolours; /* calculate and draw points for this frame */ x = st->width << 7; y = st->height << 7; if (st->multi) { for (i = 0; i < st->lensnum; i++) { partcolor = st->ccolour * (i+1); partcolor %= st->ncolours; XSetForeground(st->dpy, st->gc, st->colours[partcolor].pixel); memset(st->board, 0, st->widthb * st->height * sizeof(*st->board)); if (st->recurse) recurse(st, x, y, st->length - 1, i); else iterate(st, pow(st->lensnum, st->length - 1), i); if (st->npoints) drawpoints(st); } } else { XSetForeground(st->dpy, st->gc, st->colours[st->ccolour].pixel); memset(st->board, 0, st->widthb * st->height * sizeof(*st->board)); if (st->recurse) recurse(st, x, y, st->length, 0); else iterate(st, pow(st->lensnum, st->length), 0); if (st->npoints) drawpoints(st); } /* if we just drew into a buffer, copy the changed area (including * erased area) to screen */ if (st->backbuffer != st->window && ((st->xmin <= st->xmax && st->ymin <= st->ymax) || (xmin <= xmax && ymin <= ymax))) { if (st->xmin < xmin) xmin = st->xmin; if (st->xmax > xmax) xmax = st->xmax; if (st->ymin < ymin) ymin = st->ymin; if (st->ymax > ymax) ymax = st->ymax; XCopyArea(st->dpy, st->backbuffer, st->window, st->gc, xmin, ymin, xmax - xmin + 1, ymax - ymin + 1, xmin, ymin); } for(i = 0; i < st->lensnum; i++) { mutate(st, &st->lenses[i]); } return st->delay; } static void ifs_reshape (Display *, Window, void *, unsigned int, unsigned int); static void * ifs_init (Display *d_arg, Window w_arg) { struct state *st = (struct state *) calloc (1, sizeof(*st)); int i; XWindowAttributes xgwa; /* Initialise all this X shizzle */ st->dpy = d_arg; st->window = w_arg; st->blackColor = BlackPixel(st->dpy, DefaultScreen(st->dpy)); st->whiteColor = WhitePixel(st->dpy, DefaultScreen(st->dpy)); st->gc = XCreateGC(st->dpy, st->window, 0, NULL); XGetWindowAttributes (st->dpy, st->window, &xgwa); ifs_reshape(st->dpy, st->window, st, xgwa.width, xgwa.height); st->ncolours = get_integer_resource(st->dpy, "colors", "Colors"); if (st->ncolours < st->lensnum) st->ncolours = st->lensnum; if (st->colours) free(st->colours); if (st->ncolours < 1) st->ncolours = 1; st->colours = (XColor *)calloc(st->ncolours, sizeof(XColor)); if (!st->colours) exit(1); make_smooth_colormap (xgwa.screen, xgwa.visual, xgwa.colormap, st->colours, &st->ncolours, True, 0, False); /* Initialize IFS data */ st->delay = get_integer_resource(st->dpy, "delay", "Delay"); st->length = get_integer_resource(st->dpy, "length", "Detail"); if (st->length < 0) st->length = 0; st->mode = get_integer_resource(st->dpy, "mode", "Mode"); st->rotate = get_boolean_resource(st->dpy, "rotate", "Boolean"); st->scale = get_boolean_resource(st->dpy, "scale", "Boolean"); st->translate = get_boolean_resource(st->dpy, "translate", "Boolean"); st->recurse = get_boolean_resource(st->dpy, "recurse", "Boolean"); st->multi = get_boolean_resource(st->dpy, "multi", "Boolean"); st->lensnum = get_integer_resource(st->dpy, "lensnum", "Functions"); if (st->lenses) free (st->lenses); st->lenses = (Lens *)calloc(st->lensnum, sizeof(Lens)); if (!st->lenses) exit(1); for (i = 0; i < st->lensnum; i++) { CreateLens(st, myrandom(1)-0.5, myrandom(1), myrandom(4)-2, myrandom(4)+2, &st->lenses[i]); } return st; } static void ifs_reshape (Display *dpy, Window window, void *closure, unsigned int w, unsigned int h) { struct state *st = (struct state *)closure; XWindowAttributes xgwa; /* oh well, we need the screen depth anyway */ XGetWindowAttributes (st->dpy, st->window, &xgwa); st->width = xgwa.width; st->widthb = ((xgwa.width + 31) >> 5); st->height = xgwa.height; st->width8 = xgwa.width << 8; st->height8 = xgwa.height << 8; if (!st->xmax && !st->ymax && !st->xmin && !st->ymin) { st->xmin = xgwa.width + 1; st->xmax = st->ymax = -1; st->ymin = xgwa.height + 1; } if (st->backbuffer != None && st->backbuffer != st->window) { XFreePixmap(st->dpy, st->backbuffer); st->backbuffer = None; } if (get_boolean_resource (st->dpy, "doubleBuffer", "Boolean")) { st->backbuffer = XCreatePixmap(st->dpy, st->window, st->width, st->height, xgwa.depth); XSetForeground(st->dpy, st->gc, st->blackColor); XFillRectangle(st->dpy, st->backbuffer, st->gc, 0, 0, st->width, st->height); } else { st->backbuffer = st->window; XClearWindow(st->dpy, st->window); } if (st->board) free(st->board); st->board = (unsigned int *)calloc(st->widthb * st->height, sizeof(unsigned int)); if (!st->board) exit(1); } static Bool ifs_event (Display *dpy, Window window, void *closure, XEvent *event) { struct state *st = (struct state *)closure; if (screenhack_event_helper (dpy, window, event)) { int i; for (i = 0; i < st->lensnum; i++) { CreateLens(st, myrandom(1)-0.5, myrandom(1), myrandom(4)-2, myrandom(4)+2, &st->lenses[i]); } return True; } return False; } static void ifs_free (Display *dpy, Window window, void *closure) { struct state *st = (struct state *) closure; if (st->board) free(st->board); if (st->lenses) free(st->lenses); if (st->colours) free(st->colours); if (st->backbuffer != None && st->backbuffer != st->window) XFreePixmap(st->dpy, st->backbuffer); free(st); } XSCREENSAVER_MODULE ("IFS", ifs) xscreensaver-5.36/hacks/imsmap.c000644 000767 000024 00000025113 12710314323 016657 0ustar00jwzstaff000000 000000 /* imsmap, Copyright (c) 1992-2013 Juergen Nickelsen and Jamie Zawinski. * Derived from code by Markus Schirmer, TU Berlin. * * 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. * * Revision History: * 24-aug-92: jwz: hacked. * 17-May-97: jwz: hacked more. */ #include #include #include "screenhack.h" #define NSTEPS 7 #define COUNT (1 << NSTEPS) #define CELL(c, r) st->cell[((unsigned int)(c)) + ((unsigned int) (r)) * st->xmax] #if defined(sun) && !__STDC__ /* sun cc doesn't know "signed char" */ #define signed /**/ #endif struct state { Display *dpy; Window window; Colormap cmap; int ncolors; XColor *colors; Bool extra_krinkly_p; int delay, delay2; signed char *cell; int xmax, ymax; int iteration, iterations; int cx, xstep, ystep, xnextStep, ynextStep; unsigned int last_pixel, last_valid; int flip_x; int flip_xy; GC gc, gc2; XWindowAttributes xgwa; struct timeval then; }; #define HEIGHT_TO_PIXEL(height) \ ((height) < 0 \ ? (st->extra_krinkly_p \ ? st->ncolors - 1 - ((-(height)) % st->ncolors) \ : 0) \ : ((height) >= st->ncolors \ ? (st->extra_krinkly_p \ ? (height) % st->ncolors \ : st->ncolors-1) \ : (height))) static unsigned int set (struct state *st, unsigned int l, unsigned int c, unsigned int size, int height) { int rang = 1 << (NSTEPS - size); height = height + (random () % rang) - rang / 2; height = HEIGHT_TO_PIXEL(height); CELL (l, c) = height; return st->colors[height].pixel; } static void floyd_steinberg (struct state *st) { int x, y, err; /* Instead of repeatedly calling XPutPixel(), we make an Image and then send its bits over all at once. This consumes much less network bandwidth. The image we create is Wx1 intead of WxH, so that we don't use enormous amounts of memory. */ XImage *image = XCreateImage (st->dpy, st->xgwa.visual, 1, XYBitmap, 0, /* depth, format, offset */ (char *) calloc ((st->xmax + 8) / 8, 1), /* data */ st->xmax, 1, 8, 0); /* w, h, pad, bpl */ XSetForeground (st->dpy, st->gc, st->colors[0].pixel); XSetBackground (st->dpy, st->gc, st->colors[1].pixel); for (y = 0; y < st->ymax - 1; y++) { for (x = 0; x < st->xmax - 1; x++) { if (CELL(x, y) < 0) { err = CELL (x, y); XPutPixel (image, x, 0, 1); } else { err = CELL (x, y) - 1; XPutPixel (image, x, 0, 0); } /* distribute error */ CELL (x, y+1) += (int) (((float) err) * 3.0/8.0); CELL (x+1, y) += (int) (((float) err) * 3.0/8.0); CELL (x+1, y+1) += (int) (((float) err) * 1.0/4.0); } XPutImage (st->dpy, st->window, st->gc, image, 0, 0, 0, y, st->xmax, 1); } XDestroyImage (image); } static void draw (struct state *st, int x, int y, unsigned long pixel, int grid_size) { if (st->flip_x) x = st->xmax - x; if (st->flip_xy) { int swap = x; x = y; y = swap; } if (! (st->last_valid && pixel == st->last_pixel)) XSetForeground (st->dpy, st->gc, pixel); st->last_valid = 1, st->last_pixel = pixel; if (grid_size == 1) XDrawPoint (st->dpy, st->window, st->gc, x, y); else XFillRectangle (st->dpy, st->window, st->gc, x, y, grid_size, grid_size); } static void init_map (struct state *st) { XGCValues gcv; XGetWindowAttributes (st->dpy, st->window, &st->xgwa); st->cmap = st->xgwa.colormap; st->flip_x = (random() % 2); st->flip_xy = (random() % 2); if (mono_p) st->flip_xy = 0; else if (st->colors) free_colors (st->xgwa.screen, st->cmap, st->colors, st->ncolors); st->colors = 0; st->ncolors = get_integer_resource (st->dpy, "ncolors", "Integer"); st->delay = get_integer_resource (st->dpy, "delay", "Integer"); st->delay2 = get_integer_resource (st->dpy, "delay2", "Integer"); st->iterations = get_integer_resource (st->dpy, "iterations", "Integer"); if (st->iterations < 0) st->iterations = 0; else if (st->iterations > 7) st->iterations = 7; if (st->ncolors <= 2) st->ncolors = 0; if (st->ncolors == 0) mono_p = True; if (st->ncolors > 255) st->ncolors = 255; /* too many look bad */ if (!st->gc) st->gc = XCreateGC (st->dpy, st->window, 0, &gcv); if (!st->gc2) st->gc2 = XCreateGC (st->dpy, st->window, 0, &gcv); if (mono_p) st->extra_krinkly_p = !(random() % 15); else st->extra_krinkly_p = !(random() % 5); if (!mono_p) { if (st->ncolors < 1) st->ncolors = 1; st->colors = (XColor *) malloc (st->ncolors * sizeof(*st->colors)); make_smooth_colormap (st->xgwa.screen, st->xgwa.visual, st->cmap, st->colors, &st->ncolors, True, 0, False); if (st->ncolors <= 2) mono_p = 1; } if (mono_p) { int i; unsigned long fg_pixel = get_pixel_resource (st->dpy, st->xgwa.colormap, "foreground", "Foreground"); unsigned long bg_pixel = get_pixel_resource (st->dpy, st->xgwa.colormap, "background", "Background"); if (!st->colors) { st->ncolors = 50; st->colors = (XColor *) calloc (st->ncolors, sizeof(*st->colors)); } st->colors[0].pixel = fg_pixel; for (i = 1; i < st->ncolors; i++) st->colors[i].pixel = bg_pixel; } XSetForeground (st->dpy, st->gc, st->colors[1].pixel); XFillRectangle (st->dpy, st->window, st->gc, 0, 0, st->xgwa.width, st->xgwa.height); if (st->flip_xy) { st->xmax = st->xgwa.height; st->ymax = st->xgwa.width; } else { st->xmax = st->xgwa.width; st->ymax = st->xgwa.height; } if (st->cell) free (st->cell); st->cell = (signed char *) calloc (st->xmax * st->ymax, 1); CELL (0, 0) = 0; st->xstep = COUNT; st->ystep = COUNT; st->iteration = 0; st->cx = 0; } static void * imsmap_init (Display *dpy, Window window) { struct state *st = (struct state *) calloc (1, sizeof(*st)); st->dpy = dpy; st->window = window; init_map (st); return st; } static unsigned long imsmap_draw (Display *dpy, Window window, void *closure) { struct state *st = (struct state *) closure; int this_delay = st->delay2; int i; /* do this many lines at a time without pausing */ int col_chunk = st->iteration * 2 + 1; if (st->iteration > st->iterations) init_map (st); if (st->cx == 0) { st->xnextStep = st->xstep / 2; st->ynextStep = st->ystep / 2; } for (i = 0; i < col_chunk; i++) { int x1, x2, y1, y2; int y; int x = st->cx; x1 = x + st->xnextStep; if (x1 < 0) x1 = st->xmax-1; else if (x1 >= st->xmax) x1 = 0; x2 = x + st->xstep; if (x2 < 0) x2 = st->xmax-1; else if (x2 >= st->xmax) x2 = 0; for (y = 0; y < st->ymax; y += st->ystep) { unsigned int pixel, qpixels [4]; y1 = y + st->ynextStep; if (y1 < 0) y1 = st->ymax-1; else if (y1 >= st->ymax) y1 = 0; y2 = y + st->ystep; if (y2 < 0) y2 = st->ymax-1; else if (y2 >= st->ymax) y2 = 0; qpixels [0] = st->colors [HEIGHT_TO_PIXEL (CELL (x, y))].pixel; qpixels [1] = st->colors [HEIGHT_TO_PIXEL (CELL (x, y2))].pixel; qpixels [2] = st->colors [HEIGHT_TO_PIXEL (CELL (x2, y))].pixel; qpixels [3] = st->colors [HEIGHT_TO_PIXEL (CELL (x2, y2))].pixel; pixel = set (st, x, y1, st->iteration, ((int) CELL (x, y) + (int) CELL (x, y2) + 1) / 2); if (! mono_p && (pixel != qpixels[0] || pixel != qpixels[1] || pixel != qpixels[2] || pixel != qpixels[3])) draw (st, x, y1, pixel, st->ynextStep); pixel = set (st, x1, y, st->iteration, ((int) CELL (x, y) + (int) CELL (x2, y) + 1) / 2); if (! mono_p && (pixel != qpixels[0] || pixel != qpixels[1] || pixel != qpixels[2] || pixel != qpixels[3])) draw (st, x1, y, pixel, st->ynextStep); pixel = set (st, x1, y1, st->iteration, ((int) CELL (x, y) + (int) CELL (x, y2) + (int) CELL (x2, y) + (int) CELL (x2, y2) + 2) / 4); if (! mono_p && (pixel != qpixels[0] || pixel != qpixels[1] || pixel != qpixels[2] || pixel != qpixels[3])) draw (st, x1, y1, pixel, st->ynextStep); } st->cx += st->xstep; if (st->cx >= st->xmax) break; } if (st->cx >= st->xmax) { st->cx = 0; st->xstep = st->xnextStep; st->ystep = st->ynextStep; st->iteration++; if (st->iteration > st->iterations) this_delay = st->delay * 1000000; if (mono_p) floyd_steinberg (st); /* in mono, do all drawing at the end */ } return this_delay; } static void imsmap_reshape (Display *dpy, Window window, void *closure, unsigned int w, unsigned int h) { struct state *st = (struct state *) closure; init_map (st); } static Bool imsmap_event (Display *dpy, Window window, void *closure, XEvent *event) { struct state *st = (struct state *) closure; if (screenhack_event_helper (dpy, window, event)) { init_map (st); return True; } return False; } static void imsmap_free (Display *dpy, Window window, void *closure) { struct state *st = (struct state *) closure; if (st->colors) free (st->colors); if (st->cell) free (st->cell); free (st); } static const char *imsmap_defaults [] = { ".background: #000066", ".foreground: #FF00FF", "*fpsSolid: true", "*mode: random", "*ncolors: 50", "*iterations: 7", "*delay: 5", "*delay2: 20000", #ifdef HAVE_MOBILE "*ignoreRotation: True", #endif 0 }; static XrmOptionDescRec imsmap_options [] = { { "-ncolors", ".ncolors", XrmoptionSepArg, 0 }, { "-delay", ".delay", XrmoptionSepArg, 0 }, { "-delay2", ".delay2", XrmoptionSepArg, 0 }, { "-mode", ".mode", XrmoptionSepArg, 0 }, { "-iterations", ".iterations", XrmoptionSepArg, 0 }, { 0, 0, 0, 0 } }; XSCREENSAVER_MODULE ("IMSMap", imsmap) xscreensaver-5.36/hacks/julia.c000644 000767 000024 00000030551 12707725632 016516 0ustar00jwzstaff000000 000000 /* -*- Mode: C; tab-width: 4 -*- * julia --- continuously varying Julia set. */ #if 0 static const char sccsid[] = "@(#)julia.c 4.03 97/04/10 xlockmore"; #endif /* Copyright (c) 1995 Sean McCullough . * * Permission to use, copy, modify, and distribute this software and its * documentation for any purpose and without fee is hereby granted, * provided that the above copyright notice appear in all copies and that * both that copyright notice and this permission notice appear in * supporting documentation. * * This file is provided AS IS with no warranties of any kind. The author * shall have no liability with respect to the infringement of copyrights, * trade secrets or any patents by this file or any part thereof. In no * event will the author be liable for any lost revenue or profits or * other special, indirect and consequential damages. * * Revision History: * 10-Jun-06: j.grahl@ucl.ac.uk: tweaked functions for parameter of Julia set * 28-May-97: jwz@jwz.org: added interactive frobbing with the mouse. * 10-May-97: jwz@jwz.org: turned into a standalone program. * 02-Dec-95: snagged boilerplate from hop.c * used ifs {w0 = sqrt(x-c), w1 = -sqrt(x-c)} with random iteration * to plot the julia set, and sinusoidially varied parameter for set * and plotted parameter with a circle. */ /*- * One thing to note is that batchcount is the *depth* of the search tree, * so the number of points computed is 2^batchcount - 1. I use 8 or 9 * on a 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. */ #ifdef STANDALONE # define DEFAULTS "*count: 1000 \n" \ "*cycles: 20 \n" \ "*delay: 10000 \n" \ "*ncolors: 200 \n" \ "*fpsSolid: true \n" \ "*ignoreRotation: True \n" \ # define UNIFORM_COLORS # include "xlockmore.h" /* in xscreensaver distribution */ #else /* !STANDALONE */ # include "xlock.h" /* in xlockmore distribution */ #endif /* !STANDALONE */ #define DEF_MOUSE "False" ENTRYPOINT ModeSpecOpt julia_opts = { 0, }; #define numpoints ((0x2<depth)-1) typedef struct { int centerx; int centery; /* center of the screen */ double cr; double ci; /* julia params */ int depth; int inc; int circsize; int erase; int pix; long itree; int buffer; int nbuffers; int redrawing, redrawpos; Pixmap pixmap; #ifndef HAVE_JWXYZ Cursor cursor; #endif GC stippledGC; XPoint **pointBuffer; /* pointer for XDrawPoints */ Bool button_down_p; int mouse_x, mouse_y; } juliastruct; static juliastruct *julias = NULL; /* How many segments to draw per cycle when redrawing */ #define REDRAWSTEP 3 static void apply(juliastruct * jp, register double xr, register double xi, int d) { double theta, r; jp->pointBuffer[jp->buffer][jp->itree].x = (int) (0.5 * xr * jp->centerx + jp->centerx); jp->pointBuffer[jp->buffer][jp->itree].y = (int) (0.5 * xi * jp->centery + jp->centery); jp->itree++; if (d > 0) { xi -= jp->ci; xr -= jp->cr; /* Avoid atan2: DOMAIN error message */ if (xi == 0.0 && xr == 0.0) theta = 0.0; else theta = atan2(xi, xr) / 2.0; /*r = pow(xi * xi + xr * xr, 0.25); */ r = sqrt(sqrt(xi * xi + xr * xr)); /* 3 times faster */ xr = r * cos(theta); xi = r * sin(theta); d--; apply(jp, xr, xi, d); apply(jp, -xr, -xi, d); } } static void incr(ModeInfo * mi, juliastruct * jp) { if (jp->button_down_p) { 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 { #if 0 jp->cr = 1.5 * (sin(M_PI * (jp->inc / 300.0)) * sin(jp->inc * M_PI / 200.0)); jp->ci = 1.5 * (cos(M_PI * (jp->inc / 300.0)) * cos(jp->inc * M_PI / 200.0)); jp->cr += 0.5 * cos(M_PI * jp->inc / 400.0); jp->ci += 0.5 * sin(M_PI * jp->inc / 400.0); #else jp->cr = 1.5 * (sin(M_PI * (jp->inc / 290.0)) * sin(jp->inc * M_PI / 210.0)); jp->ci = 1.5 * (cos(M_PI * (jp->inc / 310.0)) * cos(jp->inc * M_PI / 190.0)); jp->cr += 0.5 * cos(M_PI * jp->inc / 395.0); jp->ci += 0.5 * sin(M_PI * jp->inc / 410.0); #endif } } ENTRYPOINT void init_julia(ModeInfo * mi) { Display *display = MI_DISPLAY(mi); Window window = MI_WINDOW(mi); juliastruct *jp; XGCValues gcv; int i; if (julias == NULL) { if ((julias = (juliastruct *) calloc(MI_NUM_SCREENS(mi), sizeof (juliastruct))) == NULL) return; } jp = &julias[MI_SCREEN(mi)]; jp->centerx = MI_WIN_WIDTH(mi) / 2; jp->centery = MI_WIN_HEIGHT(mi) / 2; jp->depth = MI_BATCHCOUNT(mi); if (jp->depth > 10) jp->depth = 10; #ifndef HAVE_JWXYZ if (jp->button_down_p && !jp->cursor && !jp->cursor) { Pixmap bit; XColor black; black.red = black.green = black.blue = 0; black.flags = DoRed|DoGreen|DoBlue; bit = XCreatePixmapFromBitmapData (display, window, "\000", 1, 1, MI_WIN_BLACK_PIXEL(mi), MI_WIN_BLACK_PIXEL(mi), 1); jp->cursor = XCreatePixmapCursor (display, bit, bit, &black, &black, 0, 0); XFreePixmap (display, bit); } #endif /* HAVE_JWXYZ */ if (jp->pixmap != None && jp->circsize != (MIN(jp->centerx, jp->centery) / 60) * 2 + 1) { XFreePixmap(display, jp->pixmap); jp->pixmap = None; } if (jp->pixmap == None) { GC fg_gc = None, bg_gc = None; 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); gcv.foreground = 0; bg_gc = XCreateGC(display, jp->pixmap, GCForeground, &gcv); XFillRectangle(display, jp->pixmap, bg_gc, 0, 0, jp->circsize, jp->circsize); if (jp->circsize < 2) XDrawPoint(display, jp->pixmap, fg_gc, 0, 0); else XFillArc(display, jp->pixmap, fg_gc, 0, 0, jp->circsize, jp->circsize, 0, 23040); if (fg_gc != None) XFreeGC(display, fg_gc); if (bg_gc != None) XFreeGC(display, bg_gc); } #ifndef HAVE_JWXYZ if (MI_WIN_IS_INROOT(mi)) ; else if (jp->circsize > 0) XDefineCursor (display, window, jp->cursor); else XUndefineCursor (display, window); #endif /* HAVE_JWXYZ */ if (!jp->stippledGC) { gcv.foreground = MI_WIN_BLACK_PIXEL(mi); gcv.background = MI_WIN_BLACK_PIXEL(mi); if ((jp->stippledGC = XCreateGC(display, window, GCForeground | GCBackground, &gcv)) == None) return; } if (MI_NPIXELS(mi) > 2) jp->pix = NRAND(MI_NPIXELS(mi)); jp->inc = ((LRAND() & 1) * 2 - 1) * NRAND(200); jp->nbuffers = (MI_CYCLES(mi) + 1); if (!jp->pointBuffer) jp->pointBuffer = (XPoint **) calloc(jp->nbuffers, sizeof (XPoint *)); for (i = 0; i < jp->nbuffers; ++i) if (jp->pointBuffer[i]) (void) memset((char *) jp->pointBuffer[i], 0, numpoints * sizeof (XPoint)); else jp->pointBuffer[i] = (XPoint *) calloc(numpoints, sizeof (XPoint)); jp->buffer = 0; jp->redrawing = 0; jp->erase = 0; XClearWindow(display, window); } 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 (yly) \ (y>yl-ys)?XFillRectangle(d,w,g,xl,y+ys,xs,yl-y): \ XFillRectangle(d,w,g,xl,yl,xs,ys); \ if (xlx) \ (x>xl-xs)?XFillRectangle(d,w,g,x+xs,yl,xl-x,ys): \ XFillRectangle(d,w,g,xl,yl,xs,ys) ENTRYPOINT void draw_julia (ModeInfo * mi) { Display *display = MI_DISPLAY(mi); Window window = MI_WINDOW(mi); GC gc = MI_GC(mi); juliastruct *jp = &julias[MI_SCREEN(mi)]; double r, theta; register double xr = 0.0, xi = 0.0; int k = 64, rnd = 0, i, j; XPoint *xp = jp->pointBuffer[jp->buffer], old_circle, new_circle; old_circle.x = (int) (jp->centerx * jp->cr / 2) + jp->centerx - 2; old_circle.y = (int) (jp->centery * jp->ci / 2) + jp->centery - 2; incr(mi, jp); new_circle.x = (int) (jp->centerx * 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)); 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)); #ifndef HAVE_JWXYZ XSetTSOrigin(display, jp->stippledGC, new_circle.x, new_circle.y); XSetStipple(display, jp->stippledGC, jp->pixmap); XSetFillStyle(display, jp->stippledGC, FillOpaqueStippled); #endif /* HAVE_JWXYZ */ 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); } jp->inc++; if (MI_NPIXELS(mi) > 2) { XSetForeground(display, gc, MI_PIXEL(mi, jp->pix)); if (++jp->pix >= MI_NPIXELS(mi)) jp->pix = 0; } else XSetForeground(display, gc, MI_WIN_WHITE_PIXEL(mi)); while (k--) { /* save calls to LRAND by using bit shifts over and over on the same int for 32 iterations, then get a new random int */ if (!(k % 32)) rnd = LRAND(); /* complex sqrt: x^0.5 = radius^0.5*(cos(theta/2) + i*sin(theta/2)) */ xi -= jp->ci; xr -= jp->cr; /* Avoid atan2: DOMAIN error message */ if (xi == 0.0 && xr == 0.0) theta = 0.0; else theta = atan2(xi, xr) / 2.0; /*r = pow(xi * xi + xr * xr, 0.25); */ r = sqrt(sqrt(xi * xi + xr * xr)); /* 3 times faster */ xr = r * cos(theta); xi = r * sin(theta); if ((rnd >> (k % 32)) & 0x1) { xi = -xi; xr = -xr; } xp->x = jp->centerx + (int) ((jp->centerx >> 1) * xr); xp->y = jp->centery + (int) ((jp->centery >> 1) * xi); xp++; } jp->itree = 0; apply(jp, xr, xi, jp->depth); XDrawPoints(display, window, gc, jp->pointBuffer[jp->buffer], numpoints, CoordModeOrigin); jp->buffer++; if (jp->buffer > jp->nbuffers - 1) { jp->buffer -= jp->nbuffers; jp->erase = 1; } if (jp->redrawing) { for (i = 0; i < REDRAWSTEP; i++) { j = (jp->buffer - jp->redrawpos + jp->nbuffers) % jp->nbuffers; XDrawPoints(display, window, gc, jp->pointBuffer[j], numpoints, CoordModeOrigin); if (++(jp->redrawpos) >= jp->nbuffers) { jp->redrawing = 0; break; } } } } ENTRYPOINT void release_julia (ModeInfo * mi) { if (julias != NULL) { int screen; for (screen = 0; screen < MI_NUM_SCREENS(mi); screen++) { Display *display = MI_DISPLAY(mi); juliastruct *jp = &julias[screen]; int buffer; if (jp->pointBuffer) { for (buffer = 0; buffer < jp->nbuffers; buffer++) if (jp->pointBuffer[buffer]) (void) free((void *) jp->pointBuffer[buffer]); (void) free((void *) jp->pointBuffer); } if (jp->stippledGC != None) XFreeGC(display, jp->stippledGC); if (jp->pixmap != None) XFreePixmap(display, jp->pixmap); #ifndef HAVE_JWXYZ if (jp->cursor) XFreeCursor (display, jp->cursor); #endif } (void) free((void *) julias); julias = NULL; } } ENTRYPOINT void refresh_julia (ModeInfo * mi) { juliastruct *jp = &julias[MI_SCREEN(mi)]; jp->redrawing = 1; jp->redrawpos = 0; } XSCREENSAVER_MODULE ("Julia", julia) xscreensaver-5.36/hacks/kaleidescope.c000644 000767 000024 00000033017 12717750044 020036 0ustar00jwzstaff000000 000000 /* kaleidescope, Copyright (c) 1997, 2006 Ron Tapia * * 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. */ /* * The above, for lack of a better copyright statement in easy reach * was just lifted from the xscreensaver source. * * One of the odd things about this hack is that the radial motion of the * segments depends on roundoff error alone. * * I tried to make the source easy to add other shapes. So far, I've * only messed with elipses and I couldn't do much with them that looked * cool. A nice addition would be to add some sort of spline based shapes. * Maybe rectangles would look nice. * */ #include #include #include #include "screenhack.h" #include "spline.h" #define NEWX(x,y) ((x*g->costheta) + (y*g->sintheta)) #define NEWY(x,y) ((y*g->costheta) - (x*g->sintheta)) typedef struct state GLOBAL; typedef struct Obj OBJECT; struct Obj { int type; int time; void (*propigate) (GLOBAL *, OBJECT *); void (*draw) (GLOBAL *, OBJECT *); void (*init) (GLOBAL *, OBJECT *); void *cur; }; typedef struct KSEGMENT { struct KSEGMENT *next; XColor color; int drawn; short int x1,y1,x2,y2; /* these are in the natural coordinate system */ XSegment *xsegments; /* these are in the X coordinate system */ } Ksegment; struct state { int xoff, yoff; /* offset of origin xmax/2, ymax/2 */ int xmax, ymax; /* width, height of window */ float costheta, sintheta; int symmetry; int ntrails; int nsegments; int narcs; int nobjects; int local_rotation; int global_rotation; int spring_constant; Colormap cmap; GC draw_gc; GC erase_gc; unsigned int default_fg_pixel; Display *dpy; Window window; unsigned long delay; unsigned short redmin,redrange,greenmin,greenrange,bluemin,bluerange; int color_mode; OBJECT *objects; int counter; int done_once; }; static const char *kaleidescope_defaults [] = { ".background: black", ".foreground: white", "*fpsSolid: true", "*color_mode: nice", "*symmetry: 11", "*ntrails: 100", "*nsegments: 7", "*narcs: 0", "*local_rotation: -59", "*global_rotation: 1", "*spring_constant: 5", "*delay: 20000", "*redmin: 30000", "*redrange: 20000", "*greenmin: 30000", "*greenrange: 20000", "*bluemin: 30000", "*bluerange: 20000", #ifdef HAVE_MOBILE "*ignoreRotation: True", #endif 0 }; static XrmOptionDescRec kaleidescope_options [] = { { "-color_mode", ".color_mode", XrmoptionSepArg, 0 }, { "-symmetry", ".symmetry", XrmoptionSepArg, 0 }, { "-nsegments", ".nsegments", XrmoptionSepArg, 0 }, { "-ntrails", ".ntrails", XrmoptionSepArg, 0 }, { "-local_rotation", ".local_rotation", XrmoptionSepArg, 0 }, { "-global_rotation", ".global_rotation", XrmoptionSepArg, 0 }, { "-delay", ".delay", XrmoptionSepArg, 0 }, { "-spring_constant", ".spring_constant", XrmoptionSepArg, 0 }, { "-redmin", ".redmin", XrmoptionSepArg, 0 }, { "-redrange", ".redrange", XrmoptionSepArg, 0 }, { "-bluemin", ".bluemin", XrmoptionSepArg, 0 }, { "-bluerange", ".bluerange", XrmoptionSepArg, 0 }, { "-greenmin", ".greenmin", XrmoptionSepArg, 0 }, { "-greenrange", ".greenrange", XrmoptionSepArg, 0 }, { 0, 0, 0, 0 } }; /* END global variables */ static void krandom_color(GLOBAL *g, XColor *color) { if((g->color_mode == 0) || (g->color_mode == 1)) { color->blue = (random() % g->bluerange) + g->bluemin; color->green = (random() % g->greenrange) + g->greenmin; color->red = (random() % g->redrange) + g->redmin; if(!XAllocColor(g->dpy, g->cmap, color)) { color->pixel = g->default_fg_pixel; } return; } else { color->pixel = g->default_fg_pixel; return; } } static void kcopy_color(XColor *to, XColor *from) { to->red = from->red; to->green = from->green; to->blue = from->blue; to->pixel = from->pixel; } static void kcycle_color(GLOBAL *g, XColor *color, unsigned short redstep, unsigned short greenstep, unsigned short bluestep) { unsigned short red,green,blue; if (! g->color_mode) { XColor copy; color->flags = DoRed|DoGreen|DoBlue; color->red = (red = color->red) - redstep; color->green = (green = color->green) - greenstep; color->blue = (blue = color->blue) - bluestep; copy = *color; if(!XAllocColor(g->dpy, g->cmap, color)) { /* printf("couldn't alloc color...\n"); */ color->pixel = g->default_fg_pixel; } copy.pixel = color->pixel; *color = copy; color->red = red - redstep; color->green = green- greenstep; color->blue = blue - bluestep; return; } } static Ksegment * create_ksegment (GLOBAL *g) { Ksegment *seg, *prev; XColor new_color; int i; unsigned short redstep,bluestep,greenstep; krandom_color(g, &new_color); redstep = new_color.red/(2 * g->ntrails); greenstep = new_color.green/(2 * g->ntrails); bluestep = new_color.blue/(2 * g->ntrails); seg = (Ksegment *) malloc(sizeof(Ksegment)); seg->xsegments = (XSegment *) malloc(g->symmetry * sizeof(XSegment)); prev = seg; for(i=0; i< (g->ntrails - 1); i++) { kcycle_color(g, &new_color,redstep,greenstep,bluestep); kcopy_color(&(prev->color), &new_color); prev->next = (Ksegment*)malloc(sizeof(Ksegment)); (prev->next)->xsegments = (XSegment*)malloc(g->symmetry * sizeof(XSegment)); prev->drawn = 0; prev = (prev->next); } prev->drawn = 0; prev->next = seg; kcopy_color(&(prev->color), &new_color); return seg; } static void init_ksegment (GLOBAL *g, OBJECT *obj) { /* Give the segment some random values */ ((Ksegment *)obj->cur)->x1 = (g->xoff ? random() % g->xoff : 0); ((Ksegment *)obj->cur)->y1 = (g->yoff ? random() % g->yoff : 0); ((Ksegment *)obj->cur)->x2 = (g->xoff ? random() % g->xoff : 0); ((Ksegment *)obj->cur)->y2 = (g->yoff ? random() % g->yoff : 0); } static void draw_ksegment (GLOBAL *g, OBJECT *obj) { register short x1, y1, x2, y2; int dx, dy; int i; g->counter++; x1 = ((Ksegment *)obj->cur)->x1; /* in the natural coordinate system */ y1 = ((Ksegment *)obj->cur)->y1; x2 = ((Ksegment *)obj->cur)->x2; y2 = ((Ksegment *)obj->cur)->y2; dx = x2 - x1; dy = y2 - y1; /* maybe throw away values and start over */ if( ((dx*dx) + (dy * dy)) < 100) { init_ksegment (g, obj); x1 = ((Ksegment *)obj->cur)->x1; /* in the natural coordinate system */ y1 = ((Ksegment *)obj->cur)->y1; x2 = ((Ksegment *)obj->cur)->x2; y2 = ((Ksegment *)obj->cur)->y2; } for (i=0; isymmetry; i++) { (((Ksegment *)obj->cur)->xsegments)[i].x1 = NEWX(x1,y1); (((Ksegment *)obj->cur)->xsegments)[i].y1 = NEWY(x1,y1); (((Ksegment *)obj->cur)->xsegments)[i].x2 = NEWX(x2,y2); (((Ksegment *)obj->cur)->xsegments)[i].y2 = NEWY(x2,y2); (((Ksegment *)obj->cur)->xsegments)[i].x1 = (x1 = (((Ksegment *)obj->cur)->xsegments)[i].x1) + g->xoff; (((Ksegment *)obj->cur)->xsegments)[i].y1 = (y1 = (((Ksegment *)obj->cur)->xsegments)[i].y1) + g->yoff; (((Ksegment *)obj->cur)->xsegments)[i].x2 = (x2 = (((Ksegment *)obj->cur)->xsegments)[i].x2) + g->xoff; (((Ksegment *)obj->cur)->xsegments)[i].y2 = (y2 = (((Ksegment *)obj->cur)->xsegments)[i].y2) + g->yoff; } XSetForeground(g->dpy, g->draw_gc, (((Ksegment *)obj->cur)->color).pixel); XDrawSegments(g->dpy, g->window, g->draw_gc, ((Ksegment *)obj->cur)->xsegments, g->symmetry); ((Ksegment *)obj->cur)->drawn = 1; if (((((Ksegment *)obj->cur)->next)->drawn) != 0) { XDrawSegments(g->dpy, g->window, g->erase_gc, ((Ksegment *)obj->cur)->next->xsegments, g->symmetry); } } static void propigate_ksegment(GLOBAL *g, OBJECT *obj) { int t; short int x1,y1,x2,y2; short int midx,midy,nmidx,nmidy; float lsin, lcos, gsin, gcos; lsin = sin((2*M_PI/10000)*g->local_rotation); lcos = cos((2*M_PI/10000)*g->local_rotation); gsin = sin((2*M_PI/10000)*g->global_rotation); gcos = cos((2*M_PI/10000)*g->global_rotation); t=obj->time; obj->time = t + 1; x1 = ((Ksegment *) obj->cur)->x1; y1 = ((Ksegment *) obj->cur)->y1; x2 = ((Ksegment *) obj->cur)->x2; y2 = ((Ksegment *) obj->cur)->y2; midx = (x1 + x2)/2; midy = (y1 + y2)/2; nmidx = midx*gcos + midy*gsin; nmidy = midy*gcos - midx*gsin; x1 = x1 - midx; x2 = x2 - midx; y1 = y1 - midy; y2 = y2 - midy; /* This is where we move to the next ksegment... */ obj->cur = ((Ksegment *)obj->cur)->next; ((Ksegment *)obj->cur)->x1 = ((x1*lcos) + (y1*lsin)) + nmidx; ((Ksegment *)obj->cur)->y1 = ((y1*lcos) - (x1*lsin)) + nmidy; ((Ksegment *)obj->cur)->x2 = ((x2*lcos) + (y2*lsin)) + nmidx; ((Ksegment *)obj->cur)->y2 = ((y2*lcos) - (x2*lsin)) + nmidy; return ; } static void init_objects (GLOBAL *g) { int i; for (i=0; inobjects; i++) { (g->objects[i].init)(g, g->objects + i); } } static void create_objects (GLOBAL *g) { int i; g->objects = (OBJECT *) malloc(g->nobjects * sizeof(OBJECT)); for (i=0; i< g->nsegments; i++) { g->objects[i].cur = create_ksegment(g); g->objects[i].type = 1; g->objects[i].time = 0; g->objects[i].propigate = propigate_ksegment; g->objects[i].draw = draw_ksegment; g->objects[i].init = init_ksegment; } /* Here we can add creation functions for other object types. */ } static void propigate_objects (GLOBAL *g) { int i; for(i=0; inobjects; i++) { g->objects[i].propigate(g, g->objects + i); } } static void draw_objects (GLOBAL *g) { int i; for(i=0; inobjects; i++) { g->objects[i].draw(g, g->objects + i); } } static void init_g (GLOBAL *g) { XWindowAttributes xgwa; XGCValues gcv; char *color_mode_str; g->symmetry = get_integer_resource(g->dpy, "symmetry", "Integer"); g->ntrails = get_integer_resource(g->dpy, "ntrails" , "Integer"); g->nsegments = get_integer_resource(g->dpy, "nsegments", "Integer"); g->narcs = get_integer_resource(g->dpy, "narcs", "Integer"); g->local_rotation = get_integer_resource(g->dpy, "local_rotation", "Integer"); g->global_rotation = get_integer_resource(g->dpy, "global_rotation", "Integer"); g->spring_constant = get_integer_resource(g->dpy, "spring_constant", "Integer"); g->delay = get_integer_resource(g->dpy, "delay", "Integer"); g->nobjects = g->nsegments + g->narcs; color_mode_str = get_string_resource(g->dpy, "color_mode", "color_mode"); /* make into an enum... */ if(!color_mode_str) { g->color_mode = 0; } else if (!strcmp(color_mode_str, "greedy")) { g->color_mode = 0; } else if (!strcmp(color_mode_str, "nice")) { g->color_mode = 1; } else { g->color_mode = 2; } XGetWindowAttributes (g->dpy, g->window, &xgwa); g->xmax = xgwa.width; g->ymax = xgwa.height; g->xoff = g->xmax/2; g->yoff = g->ymax/2; g->costheta = cos(2*M_PI/g->symmetry); g->sintheta = sin(2*M_PI/g->symmetry); g->cmap = xgwa.colormap; g->redmin = get_integer_resource(g->dpy, "redmin", "Integer"); g->redrange = get_integer_resource(g->dpy, "redrange", "Integer"); g->greenmin = get_integer_resource(g->dpy, "greenmin", "Integer"); g->greenrange = get_integer_resource(g->dpy, "greenrange", "Integer"); g->bluemin = get_integer_resource(g->dpy, "bluemin", "Integer"); g->bluerange = get_integer_resource(g->dpy, "bluerange", "Integer"); gcv.line_width = 1; gcv.cap_style = CapRound; gcv.foreground = g->default_fg_pixel = get_pixel_resource (g->dpy, g->cmap, "foreground", "Foreground"); g->draw_gc = XCreateGC (g->dpy, g->window, GCForeground|GCLineWidth|GCCapStyle, &gcv); gcv.foreground = get_pixel_resource (g->dpy, g->cmap, "background", "Background"); g->erase_gc = XCreateGC (g->dpy, g->window, GCForeground|GCLineWidth|GCCapStyle,&gcv); # ifdef HAVE_JWXYZ jwxyz_XSetAntiAliasing (g->dpy, g->draw_gc, False); jwxyz_XSetAntiAliasing (g->dpy, g->erase_gc, False); # endif } static void * kaleidescope_init (Display *dpy, Window window) { GLOBAL *g = (GLOBAL *) calloc (1, sizeof(*g)); g->dpy = dpy; g->window = window; init_g (g); create_objects(g); init_objects (g); return g; } static unsigned long kaleidescope_draw (Display *dpy, Window window, void *closure) { GLOBAL *g = (GLOBAL *) closure; if (g->done_once) propigate_objects(g); else g->done_once = 1; draw_objects (g); return g->delay; } static void kaleidescope_reshape (Display *dpy, Window window, void *closure, unsigned int w, unsigned int h) { GLOBAL *g = (GLOBAL *) closure; g->xmax = w; g->ymax = h; g->xoff = g->xmax/2; g->yoff = g->ymax/2; } static Bool kaleidescope_event (Display *dpy, Window window, void *closure, XEvent *event) { return False; } static void kaleidescope_free (Display *dpy, Window window, void *closure) { GLOBAL *g = (GLOBAL *) closure; free (g); } XSCREENSAVER_MODULE ("Kaleidescope", kaleidescope) xscreensaver-5.36/hacks/laser.c000644 000767 000024 00000020555 12717750043 016516 0ustar00jwzstaff000000 000000 /* -*- Mode: C; tab-width: 4 -*- */ /* laser --- spinning lasers */ #if 0 static const char sccsid[] = "@(#)laser.c 5.00 2000/11/01 xlockmore"; #endif /*- * Copyright (c) 1995 Pascal Pensa * * Permission to use, copy, modify, and distribute this software and its * documentation for any purpose and without fee is hereby granted, * provided that the above copyright notice appear in all copies and that * both that copyright notice and this permission notice appear in * supporting documentation. * * This file is provided AS IS with no warranties of any kind. The author * shall have no liability with respect to the infringement of copyrights, * trade secrets or any patents by this file or any part thereof. In no * event will the author be liable for any lost revenue or profits or * other special, indirect and consequential damages. * * Revision History: * 01-Nov-2000: Allocation checks * 10-May-1997: Compatible with xscreensaver * 1995: Written. */ #ifdef STANDALONE # define MODE_laser # define DEFAULTS "*delay: 40000 \n" \ "*count: 10 \n" \ "*cycles: 200 \n" \ "*ncolors: 64 \n" \ "*fpsSolid: true \n" \ # define BRIGHT_COLORS # define reshape_laser 0 # define laser_handle_event 0 # include "xlockmore.h" /* in xscreensaver distribution */ #else /* STANDALONE */ # include "xlock.h" /* in xlockmore distribution */ #endif /* STANDALONE */ #ifdef MODE_laser ENTRYPOINT ModeSpecOpt laser_opts = {0, (XrmOptionDescRec *) NULL, 0, (argtype *) NULL, (OptionStruct *) NULL}; #ifdef USE_MODULES ModStruct laser_description = {"laser", "init_laser", "draw_laser", "release_laser", "refresh_laser", "init_laser", (char *) NULL, &laser_opts, 20000, -10, 200, 1, 64, 1.0, "", "Shows spinning lasers", 0, NULL}; #endif #define MINREDRAW 3 /* Number of redrawn on each frame */ #define MAXREDRAW 8 #define MINLASER 1 /* Laser number */ #define MINWIDTH 2 /* Laser ray width range */ #define MAXWIDTH 40 #define MINSPEED 2 /* Speed range */ #define MAXSPEED 17 #define MINDIST 10 /* Minimal distance from edges */ #define COLORSTEP 2 /* Laser color step */ #define RANGE_RAND(min,max) (int) ((min) + LRAND() % ((max) - (min))) typedef enum { TOP, RIGHT, BOTTOM, LEFT } border; typedef struct { int bx; /* border x */ int by; /* border y */ border bn; /* active border */ int dir; /* direction */ int speed; /* laser velocity from MINSPEED to MAXSPEED */ int sx[MAXWIDTH]; /* x stack */ int sy[MAXWIDTH]; /* x stack */ XGCValues gcv; /* for color */ } laserstruct; typedef struct { int width; int height; int cx; /* center x */ int cy; /* center y */ int lw; /* laser width */ int ln; /* laser number */ int lr; /* laser redraw */ int sw; /* stack width */ int so; /* stack offset */ int time; /* up time */ GC stippledGC; XGCValues gcv_black; /* for black color */ laserstruct *laser; } lasersstruct; static lasersstruct *lasers = (lasersstruct *) NULL; static void free_laser(Display *display, lasersstruct *lp) { if (lp->laser != NULL) { (void) free((void *) lp->laser); lp->laser = (laserstruct *) NULL; } if (lp->stippledGC != None) { XFreeGC(display, lp->stippledGC); lp->stippledGC = None; } } ENTRYPOINT void init_laser(ModeInfo * mi) { Display *display = MI_DISPLAY(mi); int i, c = 0; lasersstruct *lp; if (lasers == NULL) { if ((lasers = (lasersstruct *) calloc(MI_NUM_SCREENS(mi), sizeof (lasersstruct))) == NULL) return; } lp = &lasers[MI_SCREEN(mi)]; lp->width = MI_WIDTH(mi); lp->height = MI_HEIGHT(mi); lp->time = 0; lp->ln = MI_COUNT(mi); if (lp->ln < -MINLASER) { /* if lp->ln is random ... the size can change */ if (lp->laser != NULL) { (void) free((void *) lp->laser); lp->laser = (laserstruct *) NULL; } lp->ln = NRAND(-lp->ln - MINLASER + 1) + MINLASER; } else if (lp->ln < MINLASER) lp->ln = MINLASER; if (lp->laser == NULL) { if ((lp->laser = (laserstruct *) malloc(lp->ln * sizeof (laserstruct))) == NULL) { free_laser(display, lp); return; } } if (lp->stippledGC == None) { XGCValues gcv; gcv.foreground = MI_WHITE_PIXEL(mi); gcv.background = MI_BLACK_PIXEL(mi); lp->gcv_black.foreground = MI_BLACK_PIXEL(mi); if ((lp->stippledGC = XCreateGC(display, MI_WINDOW(mi), GCForeground | GCBackground, &gcv)) == None) { free_laser(display, lp); return; } # ifdef HAVE_JWXYZ jwxyz_XSetAntiAliasing (MI_DISPLAY(mi), lp->stippledGC, False); # endif } MI_CLEARWINDOW(mi); if (MINDIST < lp->width - MINDIST) lp->cx = RANGE_RAND(MINDIST, lp->width - MINDIST); else lp->cx = RANGE_RAND(0, lp->width); if (MINDIST < lp->height - MINDIST) lp->cy = RANGE_RAND(MINDIST, lp->height - MINDIST); else lp->cy = RANGE_RAND(0, lp->height); lp->lw = RANGE_RAND(MINWIDTH, MAXWIDTH); lp->lr = RANGE_RAND(MINREDRAW, MAXREDRAW); lp->sw = 0; lp->so = 0; if (MI_NPIXELS(mi) > 2) c = NRAND(MI_NPIXELS(mi)); for (i = 0; i < lp->ln; i++) { laserstruct *l = &lp->laser[i]; l->bn = (border) NRAND(4); switch (l->bn) { case TOP: l->bx = NRAND(lp->width); l->by = 0; break; case RIGHT: l->bx = lp->width; l->by = NRAND(lp->height); break; case BOTTOM: l->bx = NRAND(lp->width); l->by = lp->height; break; case LEFT: l->bx = 0; l->by = NRAND(lp->height); } l->dir = (int) (LRAND() & 1); l->speed = ((RANGE_RAND(MINSPEED, MAXSPEED) * lp->width) / 1000) + 1; if (MI_NPIXELS(mi) > 2) { l->gcv.foreground = MI_PIXEL(mi, c); c = (c + COLORSTEP) % MI_NPIXELS(mi); } else l->gcv.foreground = MI_WHITE_PIXEL(mi); } } static void draw_laser_once(ModeInfo * mi) { Display *display = MI_DISPLAY(mi); lasersstruct *lp = &lasers[MI_SCREEN(mi)]; int i; for (i = 0; i < lp->ln; i++) { laserstruct *l = &lp->laser[i]; if (lp->sw >= lp->lw) { XChangeGC(display, lp->stippledGC, GCForeground, &(lp->gcv_black)); XDrawLine(display, MI_WINDOW(mi), lp->stippledGC, lp->cx, lp->cy, l->sx[lp->so], l->sy[lp->so]); } if (l->dir) { switch (l->bn) { case TOP: l->bx -= l->speed; if (l->bx < 0) { l->by = -l->bx; l->bx = 0; l->bn = LEFT; } break; case RIGHT: l->by -= l->speed; if (l->by < 0) { l->bx = lp->width + l->by; l->by = 0; l->bn = TOP; } break; case BOTTOM: l->bx += l->speed; if (l->bx >= lp->width) { l->by = lp->height - l->bx % lp->width; l->bx = lp->width; l->bn = RIGHT; } break; case LEFT: l->by += l->speed; if (l->by >= lp->height) { l->bx = l->by % lp->height; l->by = lp->height; l->bn = BOTTOM; } } } else { switch (l->bn) { case TOP: l->bx += l->speed; if (l->bx >= lp->width) { l->by = l->bx % lp->width; l->bx = lp->width; l->bn = RIGHT; } break; case RIGHT: l->by += l->speed; if (l->by >= lp->height) { l->bx = lp->width - l->by % lp->height; l->by = lp->height; l->bn = BOTTOM; } break; case BOTTOM: l->bx -= l->speed; if (l->bx < 0) { l->by = lp->height + l->bx; l->bx = 0; l->bn = LEFT; } break; case LEFT: l->by -= l->speed; if (l->by < 0) { l->bx = -l->bx; l->by = 0; l->bn = TOP; } } } XChangeGC(display, lp->stippledGC, GCForeground, &l->gcv); XDrawLine(display, MI_WINDOW(mi), lp->stippledGC, lp->cx, lp->cy, l->bx, l->by); l->sx[lp->so] = l->bx; l->sy[lp->so] = l->by; } if (lp->sw < lp->lw) ++lp->sw; lp->so = (lp->so + 1) % lp->lw; } ENTRYPOINT void draw_laser(ModeInfo * mi) { int i; lasersstruct *lp; if (lasers == NULL) return; lp = &lasers[MI_SCREEN(mi)]; if (lp->laser == NULL) return; MI_IS_DRAWN(mi) = True; for (i = 0; i < lp->lr; i++) draw_laser_once(mi); if (++lp->time > MI_CYCLES(mi)) init_laser(mi); } ENTRYPOINT void release_laser(ModeInfo * mi) { if (lasers != NULL) { int screen; for (screen = 0; screen < MI_NUM_SCREENS(mi); screen++) free_laser(MI_DISPLAY(mi), &lasers[screen]); (void) free((void *) lasers); lasers = (lasersstruct *) NULL; } } ENTRYPOINT void refresh_laser(ModeInfo * mi) { MI_CLEARWINDOW(mi); } XSCREENSAVER_MODULE ("Laser", laser) #endif /* MODE_laser */ xscreensaver-5.36/hacks/lightning.c000644 000767 000024 00000041273 12701612216 017363 0ustar00jwzstaff000000 000000 /* -*- Mode: C; tab-width: 4 -*- */ /* lightning --- fractal lightning bolds */ #if 0 static const char sccsid[] = "@(#)lightning.c 5.00 2000/11/01 xlockmore"; #endif /*- * Copyright (c) 1996 by Keith Romberg * * Permission to use, copy, modify, and distribute this software and its * documentation for any purpose and without fee is hereby granted, * provided that the above copyright notice appear in all copies and that * both that copyright notice and this permission notice appear in * supporting documentation. * * This file is provided AS IS with no warranties of any kind. The author * shall have no liability with respect to the infringement of copyrights, * trade secrets or any patents by this file or any part thereof. In no * event will the author be liable for any lost revenue or profits or * other special, indirect and consequential damages. * * Revision History: * 01-Nov-2000: Allocation checks * 10-May-1997: Compatible with xscreensaver * 14-Jul-1996: Cleaned up code. * 27-Jun-1996: Written and submitted by Keith Romberg . */ #ifdef STANDALONE # define MODE_lightning # define DEFAULTS "*delay: 10000 \n" \ "*ncolors: 64 \n" # define BRIGHT_COLORS # define reshape_lightning 0 # define lightning_handle_event 0 # include "xlockmore.h" /* in xscreensaver distribution */ #else /* STANDALONE */ # include "xlock.h" /* in xlockmore distribution */ #endif /* STANDALONE */ #ifdef MODE_lightning ENTRYPOINT ModeSpecOpt lightning_opts = {0, (XrmOptionDescRec *) NULL, 0, (argtype *) NULL, (OptionStruct *) NULL}; #ifdef USE_MODULES ModStruct lightning_description = {"lightning", "init_lightning", "draw_lightning", "release_lightning", "refresh_lightning", "init_lightning", (char *) NULL, &lightning_opts, 10000, 1, 1, 1, 64, 0.6, "", "Shows Keith's fractal lightning bolts", 0, NULL}; #endif #define BOLT_NUMBER 4 #define BOLT_ITERATION 4 #define LONG_FORK_ITERATION 3 #define MEDIUM_FORK_ITERATION 2 #define SMALL_FORK_ITERATION 1 #define WIDTH_VARIATION 30 #define HEIGHT_VARIATION 15 #define DELAY_TIME_AMOUNT 15 #define MULTI_DELAY_TIME_BASE 5 #define MAX_WIGGLES 16 #define WIGGLE_BASE 8 #define WIGGLE_AMOUNT 14 #define RANDOM_FORK_PROBILITY 4 #define FIRST_LEVEL_STRIKE 0 #define LEVEL_ONE_STRIKE 1 #define LEVEL_TWO_STRIKE 2 #define BOLT_VERTICIES ((1<= 51) && (multi_prob < 75)) result = 2; else if ((multi_prob >= 76) && (multi_prob < 92)) result = 3; else result = BOLT_NUMBER; /* 4 */ return (result); } /*-------------------------------------------------------------------------*/ static int flashing_strike(void) { int tmp = NRAND(FLASH_PROBILITY); if (tmp <= FLASH_PROBILITY) return (1); return (0); } /*-------------------------------------------------------------------------*/ static void flash_duration(int *start, int *end, int total_duration) { int mid, d; mid = total_duration / MAX_FLASH_AMOUNT; d = NRAND(total_duration / MAX_FLASH_AMOUNT) / 2; *start = mid - d; *end = mid + d; } /*-------------------------------------------------------------------------*/ static void random_storm(Storm * st) { int i, j, tmp; XPoint p; for (i = 0; i < st->multi_strike; i++) { st->bolts[i].end1.x = NRAND(st->scr_width); st->bolts[i].end1.y = 0; st->bolts[i].end2.x = NRAND(st->scr_width); st->bolts[i].end2.y = st->scr_height; st->bolts[i].wiggle_number = WIGGLE_BASE + NRAND(MAX_WIGGLES); if ((st->bolts[i].flash = flashing_strike())) flash_duration(&(st->bolts[i].flash_begin), &(st->bolts[i].flash_stop), st->bolts[i].wiggle_number); else st->bolts[i].flash_begin = st->bolts[i].flash_stop = 0; st->bolts[i].wiggle_amount = WIGGLE_AMOUNT; if (i == 0) st->bolts[i].delay_time = NRAND(DELAY_TIME_AMOUNT); else st->bolts[i].delay_time = NRAND(DELAY_TIME_AMOUNT) + (MULTI_DELAY_TIME_BASE * i); st->bolts[i].strike_level = FIRST_LEVEL_STRIKE; tmp = 0; generate(st->bolts[i].end1, st->bolts[i].end2, BOLT_ITERATION, st->bolts[i].middle, &tmp); st->bolts[i].fork_number = 0; st->bolts[i].visible = 0; for (j = 0; j < BOLT_VERTICIES; j++) { if (st->bolts[i].fork_number >= 2) break; if (NRAND(100) < RANDOM_FORK_PROBILITY) { p.x = NRAND(st->scr_width); p.y = st->scr_height; st->bolts[i].forks_start[st->bolts[i].fork_number] = j; create_fork(&(st->bolts[i].branch[st->bolts[i].fork_number]), st->bolts[i].middle[j], p, j); st->bolts[i].fork_number++; } } } } static void generate(XPoint A, XPoint B, int iter, XPoint * verts, int *vert_index) { XPoint mid; mid.x = (A.x + B.x) / 2 + NRAND(WIDTH_VARIATION) - WIDTH_VARIATION / 2; mid.y = (A.y + B.y) / 2 + NRAND(HEIGHT_VARIATION) - HEIGHT_VARIATION / 2; if (!iter) { verts[*vert_index].x = mid.x; verts[*vert_index].y = mid.y; (*vert_index)++; return; } generate(A, mid, iter - 1, verts, vert_index); generate(mid, B, iter - 1, verts, vert_index); } /*------------------------------------------------------------------------*/ static void create_fork(Fork * f, XPoint start, XPoint end, int level) { int tmp = 1; f->ForkVerticies[0].x = start.x; f->ForkVerticies[0].y = start.y; if (level <= 6) { generate(start, end, LONG_FORK_ITERATION, f->ForkVerticies, &tmp); f->num_used = 9; } else if ((level > 6) && (level <= 11)) { generate(start, end, MEDIUM_FORK_ITERATION, f->ForkVerticies, &tmp); f->num_used = 5; } else { if (distance(start, end) > 100) { generate(start, end, MEDIUM_FORK_ITERATION, f->ForkVerticies, &tmp); f->num_used = 5; } else { generate(start, end, SMALL_FORK_ITERATION, f->ForkVerticies, &tmp); f->num_used = 3; } } f->ForkVerticies[f->num_used - 1].x = end.x; f->ForkVerticies[f->num_used - 1].y = end.y; } /*------------------------------------------------------------------------*/ static void update_bolt(Lightning * bolt, int time_now) { wiggle_bolt(bolt); if ((bolt->wiggle_amount == 0) && (bolt->wiggle_number > 2)) bolt->wiggle_number = 0; if (((time_now % 3) == 0)) bolt->wiggle_amount++; if (((time_now >= bolt->delay_time) && (time_now < bolt->flash_begin)) || (time_now > bolt->flash_stop)) bolt->visible = 1; else bolt->visible = 0; if (time_now == bolt->delay_time) bolt->strike_level = FIRST_LEVEL_STRIKE; else if (time_now == (bolt->delay_time + 1)) bolt->strike_level = LEVEL_ONE_STRIKE; else if ((time_now > (bolt->delay_time + 1)) && (time_now <= (bolt->delay_time + bolt->flash_begin - 2))) bolt->strike_level = LEVEL_TWO_STRIKE; else if (time_now == (bolt->delay_time + bolt->flash_begin - 1)) bolt->strike_level = LEVEL_ONE_STRIKE; else if (time_now == (bolt->delay_time + bolt->flash_stop + 1)) bolt->strike_level = LEVEL_ONE_STRIKE; else bolt->strike_level = LEVEL_TWO_STRIKE; } /*------------------------------------------------------------------------*/ static void draw_bolt(Lightning * bolt, ModeInfo * mi) { if (bolt->visible) { if (bolt->strike_level == FIRST_LEVEL_STRIKE) first_strike(*bolt, mi); else if (bolt->strike_level == LEVEL_ONE_STRIKE) level1_strike(*bolt, mi); else level2_strike(*bolt, mi); } } /*------------------------------------------------------------------------*/ static void first_strike(Lightning bolt, ModeInfo * mi) { Display *display = MI_DISPLAY(mi); Window window = MI_WINDOW(mi); GC gc = MI_GC(mi); int i; XSetForeground(display, gc, MI_WHITE_PIXEL(mi)); XDrawLine(display, window, gc, bolt.end1.x, bolt.end1.y, bolt.middle[0].x, bolt.middle[0].y); draw_line(mi, bolt.middle, BOLT_VERTICIES, gc, 0); XDrawLine(display, window, gc, bolt.middle[BOLT_VERTICIES - 1].x, bolt.middle[BOLT_VERTICIES - 1].y, bolt.end2.x, bolt.end2.y); for (i = 0; i < bolt.fork_number; i++) draw_line(mi, bolt.branch[i].ForkVerticies, bolt.branch[i].num_used, gc, 0); } /*------------------------------------------------------------------------*/ static void draw_line(ModeInfo * mi, XPoint * points, int number, GC to_use, int offset) { int i; for (i = 0; i < number - 1; i++) { if (points[i].y <= points[i + 1].y) XDrawLine(MI_DISPLAY(mi), MI_WINDOW(mi), to_use, points[i].x + offset, points[i].y, points[i + 1].x + offset, points[i + 1].y); else { if (points[i].x < points[i + 1].x) XDrawLine(MI_DISPLAY(mi), MI_WINDOW(mi), to_use, points[i].x + offset, points[i].y + offset, points[i + 1].x + offset, points[i + 1].y + offset); else XDrawLine(MI_DISPLAY(mi), MI_WINDOW(mi), to_use, points[i].x - offset, points[i].y + offset, points[i + 1].x - offset, points[i + 1].y + offset); } } } /*------------------------------------------------------------------------*/ static void level1_strike(Lightning bolt, ModeInfo * mi) { Display *display = MI_DISPLAY(mi); Window window = MI_WINDOW(mi); Storm *st = &Helga[MI_SCREEN(mi)]; GC gc = MI_GC(mi); int i; if (MI_NPIXELS(mi) > 2) /* color */ XSetForeground(display, gc, MI_PIXEL(mi, st->color)); else XSetForeground(display, gc, MI_WHITE_PIXEL(mi)); XDrawLine(display, window, gc, bolt.end1.x - 1, bolt.end1.y, bolt.middle[0].x - 1, bolt.middle[0].y); draw_line(mi, bolt.middle, BOLT_VERTICIES, gc, -1); XDrawLine(display, window, gc, bolt.middle[BOLT_VERTICIES - 1].x - 1, bolt.middle[BOLT_VERTICIES - 1].y, bolt.end2.x - 1, bolt.end2.y); XDrawLine(display, window, gc, bolt.end1.x + 1, bolt.end1.y, bolt.middle[0].x + 1, bolt.middle[0].y); draw_line(mi, bolt.middle, BOLT_VERTICIES, gc, 1); XDrawLine(display, window, gc, bolt.middle[BOLT_VERTICIES - 1].x + 1, bolt.middle[BOLT_VERTICIES - 1].y, bolt.end2.x + 1, bolt.end2.y); for (i = 0; i < bolt.fork_number; i++) { draw_line(mi, bolt.branch[i].ForkVerticies, bolt.branch[i].num_used, gc, -1); draw_line(mi, bolt.branch[i].ForkVerticies, bolt.branch[i].num_used, gc, 1); } first_strike(bolt, mi); } /*------------------------------------------------------------------------*/ static int distance(XPoint a, XPoint b) { return ((int) sqrt((double) (a.x - b.x) * (a.x - b.x) + (a.y - b.y) * (a.y - b.y))); } /*------------------------------------------------------------------------*/ static void level2_strike(Lightning bolt, ModeInfo * mi) { Display *display = MI_DISPLAY(mi); Window window = MI_WINDOW(mi); Storm *st = &Helga[MI_SCREEN(mi)]; GC gc = MI_GC(mi); int i; /* This was originally designed to be a little darker then the level1 strike. This was changed to get it to work on multiscreens and to add more color variety. I tried stippling but it did not look good. */ if (MI_NPIXELS(mi) > 2) XSetForeground(display, gc, MI_PIXEL(mi, st->color)); else XSetForeground(display, gc, MI_WHITE_PIXEL(mi)); XDrawLine(display, window, gc, bolt.end1.x - 2, bolt.end1.y, bolt.middle[0].x - 2, bolt.middle[0].y); draw_line(mi, bolt.middle, BOLT_VERTICIES, gc, -2); XDrawLine(display, window, gc, bolt.middle[BOLT_VERTICIES - 1].x - 2, bolt.middle[BOLT_VERTICIES - 1].y, bolt.end2.x - 2, bolt.end2.y); XDrawLine(display, window, gc, bolt.end1.x + 2, bolt.end1.y, bolt.middle[0].x + 2, bolt.middle[0].y); draw_line(mi, bolt.middle, BOLT_VERTICIES, gc, 2); XDrawLine(display, window, gc, bolt.middle[BOLT_VERTICIES - 1].x + 2, bolt.middle[BOLT_VERTICIES - 1].y, bolt.end2.x + 2, bolt.end2.y); for (i = 0; i < bolt.fork_number; i++) { draw_line(mi, bolt.branch[i].ForkVerticies, bolt.branch[i].num_used, gc, -2); draw_line(mi, bolt.branch[i].ForkVerticies, bolt.branch[i].num_used, gc, 2); } level1_strike(bolt, mi); } /*------------------------------------------------------------------------*/ static int storm_active(Storm * st) { int i, atleast_1 = 0; for (i = 0; i < st->multi_strike; i++) if (st->bolts[i].wiggle_number > 0) atleast_1++; return (atleast_1); } /*------------------------------------------------------------------------*/ static void wiggle_bolt(Lightning * bolt) { int i; wiggle_line(bolt->middle, BOLT_VERTICIES, bolt->wiggle_amount); bolt->end2.x += NRAND(bolt->wiggle_amount) - bolt->wiggle_amount / 2; bolt->end2.y += NRAND(bolt->wiggle_amount) - bolt->wiggle_amount / 2; for (i = 0; i < bolt->fork_number; i++) { wiggle_line(bolt->branch[i].ForkVerticies, bolt->branch[i].num_used, bolt->wiggle_amount); bolt->branch[i].ForkVerticies[0].x = bolt->middle[bolt->forks_start[i]].x; bolt->branch[i].ForkVerticies[0].y = bolt->middle[bolt->forks_start[i]].y; } if (bolt->wiggle_amount > 1) bolt->wiggle_amount -= 1; else bolt->wiggle_amount = 0; } /*------------------------------------------------------------------------*/ static void wiggle_line(XPoint * p, int number, int amount) { int i; for (i = 0; i < number; i++) { p[i].x += NRAND(amount) - amount / 2; p[i].y += NRAND(amount) - amount / 2; } } /*------------------------------------------------------------------------*/ ENTRYPOINT void init_lightning (ModeInfo * mi) { Storm *st; if (Helga == NULL) { if ((Helga = (Storm *) calloc(MI_NUM_SCREENS(mi), sizeof (Storm))) == NULL) return; } st = &Helga[MI_SCREEN(mi)]; st->scr_width = MI_WIDTH(mi); st->scr_height = MI_HEIGHT(mi); st->multi_strike = setup_multi_strike(); random_storm(st); st->stage = 0; } /*------------------------------------------------------------------------*/ ENTRYPOINT void draw_lightning (ModeInfo * mi) { int i; Storm *st; if (Helga == NULL) return; st = &Helga[MI_SCREEN(mi)]; MI_IS_DRAWN(mi) = True; switch (st->stage) { case 0: MI_IS_DRAWN(mi) = False; MI_CLEARWINDOW(mi); MI_IS_DRAWN(mi) = True; st->color = NRAND(MI_NPIXELS(mi)); st->draw_time = 0; if (storm_active(st)) st->stage++; else st->stage = 4; break; case 1: for (i = 0; i < st->multi_strike; i++) { if (st->bolts[i].visible) draw_bolt(&(st->bolts[i]), mi); update_bolt(&(st->bolts[i]), st->draw_time); } st->draw_time++; st->stage++; st->busyLoop = 0; break; case 2: if (++st->busyLoop > 6) { st->stage++; st->busyLoop = 0; } break; case 3: MI_IS_DRAWN(mi) = False; MI_CLEARWINDOW(mi); MI_IS_DRAWN(mi) = True; if (storm_active(st)) st->stage = 1; else st->stage++; break; case 4: if (++st->busyLoop > 100) { st->busyLoop = 0; } init_lightning(mi); break; } } ENTRYPOINT void release_lightning(ModeInfo * mi) { if (Helga != NULL) { (void) free((void *) Helga); Helga = (Storm *) NULL; } } ENTRYPOINT void refresh_lightning(ModeInfo * mi) { /* Do nothing, it will refresh by itself */ } XSCREENSAVER_MODULE ("Lightning", lightning) #endif /* MODE_lightning */ xscreensaver-5.36/hacks/lisa.c000644 000767 000024 00000051470 12717750041 016336 0ustar00jwzstaff000000 000000 /* -*- Mode: C; tab-width: 4 -*- */ /* lisa --- animated full-loop lissajous figures */ #if 0 static const char sccsid[] = "@(#)lisa.c 5.00 2000/11/01 xlockmore"; #endif /*- * Copyright (c) 1997, 2006 by Caleb Cullen. * * Permission to use, copy, modify, and distribute this software and its * documentation for any purpose and without fee is hereby granted, * provided that the above copyright notice appear in all copies and that * both that copyright notice and this permission notice appear in * supporting documentation. * * This file is provided AS IS with no warranties of any kind. The author * shall have no liability with respect to the infringement of copyrights, * trade secrets or any patents by this file or any part thereof. In no * event will the author be liable for any lost revenue or profits or * other special, indirect and consequential damages. * * Revision History: * 23-Feb-2006: fixed color-cycling issues * 01-Nov-2000: Allocation checks * 10-May-1997: Compatible with xscreensaver * * The inspiration for this program, Lasp, was written by Adam B. Roach * in 1990, assisted by me, Caleb Cullen. It was written first in C, then * in assembly, and used pre-calculated data tables to graph lissajous * figures on 386 machines and lower. This version bears only superficial * resemblances to the original Lasp. * * The `lissie' module's source code was studied as an example of how * to incorporate a new module into xlock. Resemblances to it are * expected, but not intended to be plaigiaristic. * * February, 2006: 21st Century Update for Lisa * + fixed color-mapping: the 'beginning' of the loop always uses the * same (starting) pixel value, causing the loop's coloration to * appear solid rather than flickering as in the previous version * + all lines/points in a single color are drawn at once using XDrawLines() * or XDrawPoints(); the artifacting evident in the previous version * has been masked by the use of CapNotLast to separate individual drawn * areas with intentional "whitespace" (typically black) * + added many new elements to the Function[] array * + randomized selection of next function * + introduced concept of "rarely-chosen" functions * + cleaned up code somewhat, standardized capitalization, commented all * #directives with block labels */ #ifdef STANDALONE # define MODE_lisa # define DEFAULTS "*delay: 17000 \n" \ "*count: 1 \n" \ "*cycles: 768 \n" \ "*size: 500 \n" \ "*ncolors: 64 \n" \ "*fpsSolid: true \n" \ # define UNIFORM_COLORS # define reshape_lisa 0 # define lisa_handle_event 0 # include "xlockmore.h" /* in xscreensaver distribution */ #else /* STANDALONE */ #include "xlock.h" /* in xlockmore distribution */ #endif /* STANDALONE */ #ifdef MODE_lisa #define DEF_ADDITIVE "True" static Bool additive; static XrmOptionDescRec opts[] = { {"-additive", ".lisa.additive", XrmoptionNoArg, "True"}, {"+additive", ".lisa.additive", XrmoptionNoArg, "False"} }; static argtype vars[] = { {&additive, "additive", "Additive", DEF_ADDITIVE, t_Bool} }; static OptionStruct desc[] = { {"-/+additive", "turn on/off additive functions mode"} }; ENTRYPOINT ModeSpecOpt lisa_opts = {sizeof opts / sizeof opts[0], opts, sizeof vars / sizeof vars[0], vars, desc}; #ifdef USE_MODULES ModStruct lisa_description = {"lisa", "init_lisa", "draw_lisa", "release_lisa", "refresh_lisa", "change_lisa", (char *) NULL, &lisa_opts, 17000, 1, 768, -1, 64, 1.0, "", "Shows animated lissajous figures", 0, NULL}; #endif #define DRAWLINES 1 /* #define FOLLOW_FUNC_ORDER 1 */ #define TWOLOOPS 1 #define XVMAX 10 /* Maximum velocities */ #define YVMAX 10 #define LISAMAXFUNCS 2 #define NUMSTDFUNCS 28 #define RAREFUNCMIN 25 #define RAREFUNCODDS 4 /* 1:n chance a rare function will be re-randomized */ #define MAXCYCLES 3 #define MINLISAS 1 #define STARTCOLOR 0 #define STARTFUNC 24 /* if negative, is upper-bound on randomization */ #define LINEWIDTH -8 /* if negative, is upper-bound on randomization */ #define LINESTYLE LineSolid /* an insane man might have fun with this :) */ #define LINECAP CapNotLast /* anything else looks pretty crappy */ #define LINEJOIN JoinBevel /* this ought to be fastest */ #define SET_COLOR() \ if (MI_NPIXELS(mi) > 2) { \ XSetForeground(MI_DISPLAY(mi), MI_GC(mi), MI_PIXEL(mi, loop->color)); \ if (loop->cstep \ && pctr % loop->cstep == 0 \ && ++(loop->color) >= (unsigned) MI_NPIXELS(mi)) \ { loop->color=STARTCOLOR; } \ } else { XSetForeground(MI_DISPLAY(mi), MI_GC(mi), MI_WHITE_PIXEL(mi)); } #define GET_RADIUS(context) \ ((context->width > context->height)?context->height:context->width) * 3 / 8 #define CHECK_RADIUS(loop, context) \ if ((context->height / 2 > MI_SIZE(mi)) && (context->width / 2 > MI_SIZE(mi))) \ loop->radius = MI_SIZE(mi); \ if ((loop->radius < 0) || \ (loop->radius > loop->center.x) || \ (loop->radius > loop->center.y)) loop->radius = GET_RADIUS(context) #define PRINT_FUNC(funcptr) \ printf("new function -- #%d:\n\tx = sin(%gs) * sin(%gs)\n\ty = sin(%gt) * sin(%gt)\n", \ funcptr->index, \ funcptr->xcoeff[0], funcptr->xcoeff[1], \ funcptr->ycoeff[0], funcptr->ycoeff[1]) typedef struct lisafunc_struct { double xcoeff[2], ycoeff[2]; int nx, ny; int index; } lisafuncs; typedef struct lisa_struct { unsigned long color; int radius, dx, dy, nsteps, nfuncs, melting, cstep; double pistep, phi, theta; XPoint center, *lastpoint; lisafuncs *function[LISAMAXFUNCS]; int linewidth; } lisas; typedef struct lisacontext_struct { lisas *lissajous; int width, height, nlissajous, loopcount; int maxcycles; Bool painted; } lisacons; static lisacons *Lisa = (lisacons *) NULL; static lisafuncs Function[NUMSTDFUNCS] = { { {1.0, 2.0}, {1.0, 2.0}, 2, 2, 0}, { {1.0, 2.0}, {1.0, 1.0}, 2, 2, 1}, { {1.0, 3.0}, {1.0, 2.0}, 2, 2, 2}, { {1.0, 3.0}, {1.0, 3.0}, 2, 2, 3}, { {2.0, 4.0}, {1.0, 2.0}, 2, 2, 4}, { {1.0, 4.0}, {1.0, 3.0}, 2, 2, 5}, { {1.0, 4.0}, {1.0, 4.0}, 2, 2, 6}, { {1.0, 5.0}, {1.0, 5.0}, 2, 2, 7}, { {2.0, 5.0}, {2.0, 5.0}, 2, 2, 8}, { {1.0, 2.0}, {2.0, 5.0}, 2, 2, 9}, { {1.0, 2.0}, {3.0, 5.0}, 2, 2, 10}, { {1.0, 2.0}, {2.0, 3.0}, 2, 2, 11}, { {1.0, 3.0}, {2.0, 3.0}, 2, 2, 12}, { {2.0, 3.0}, {1.0, 3.0}, 2, 2, 13}, { {2.0, 4.0}, {1.0, 3.0}, 2, 2, 14}, { {1.0, 4.0}, {2.0, 3.0}, 2, 2, 15}, { {2.0, 4.0}, {2.0, 3.0}, 2, 2, 16}, { {1.0, 5.0}, {2.0, 3.0}, 2, 2, 17}, { {2.0, 5.0}, {2.0, 3.0}, 2, 2, 18}, { {1.0, 5.0}, {2.0, 5.0}, 2, 2, 19}, { {1.0, 3.0}, {2.0, 7.0}, 2, 2, 20}, { {2.0, 3.0}, {5.0, 7.0}, 2, 2, 21}, { {1.0, 2.0}, {3.0, 7.0}, 2, 2, 22}, { {2.0, 5.0}, {5.0, 7.0}, 2, 2, 23}, { {5.0, 7.0}, {5.0, 7.0}, 2, 2, 24}, { /* functions past here are 'rare' and won't */ {2.0, 7.0}, /* show up as often. tweak the #defines above */ {1.0, 7.0}, 2, 2, 25}, /* to see them more frequently */ { {2.0, 9.0}, {1.0, 7.0}, 2, 2, 26}, { {5.0, 11.0}, {2.0, 9.0}, 2, 2, 27} }; int xMaxLines; static void free_lisa(lisacons *lc) { while (lc->lissajous) { int lctr; for (lctr = 0; lctr < lc->nlissajous; lctr++) { (void) free((void *) lc->lissajous[lctr].lastpoint); } (void) free((void *) lc->lissajous); lc->lissajous = (lisas *) NULL; } } static Bool drawlisa(ModeInfo * mi, lisas * loop) { XPoint *np; XPoint *lp = loop->lastpoint; lisacons *lc = &Lisa[MI_SCREEN(mi)]; lisafuncs **lf = loop->function; int phase = lc->loopcount % loop->nsteps; int pctr, fctr, xctr, yctr, extra_points; double xprod, yprod, xsum, ysum; /* why carry this around in the struct when we can calculate it on demand? */ extra_points = loop->cstep - (loop->nsteps % loop->cstep); /* Allocate the np (new point) array (with padding) */ if ((np = (XPoint *) calloc(loop->nsteps+extra_points, sizeof (XPoint))) == NULL) { free_lisa(lc); return False; } /* Update the center */ loop->center.x += loop->dx; loop->center.y += loop->dy; CHECK_RADIUS(loop, lc); /* check for overlaps -- where the figure might go off the screen */ if ((loop->center.x - loop->radius) <= 0) { loop->center.x = loop->radius; loop->dx = NRAND(XVMAX); } else if ((loop->center.x + loop->radius) >= lc->width) { loop->center.x = lc->width - loop->radius; loop->dx = -NRAND(XVMAX); }; if ((loop->center.y - loop->radius) <= 0) { loop->center.y = loop->radius; loop->dy = NRAND(YVMAX); } else if ((loop->center.y + loop->radius) >= lc->height) { loop->center.y = lc->height - loop->radius; loop->dy = -NRAND(YVMAX); }; /* Now draw the points, and erase the ones from the last cycle */ for (pctr = 0; pctr < loop->nsteps; pctr++) { fctr = loop->nfuncs; loop->phi = (double) (pctr - phase) * loop->pistep; loop->theta = (double) (pctr + phase) * loop->pistep; xsum = ysum = 0; while (fctr--) { xctr = lf[fctr]->nx; yctr = lf[fctr]->ny; if (additive) { xprod = yprod = 0.0; while (xctr--) xprod += sin(lf[fctr]->xcoeff[xctr] * loop->theta); while (yctr--) yprod += sin(lf[fctr]->ycoeff[yctr] * loop->phi); if (loop->melting) { if (fctr) { xsum += xprod * (double) (loop->nsteps - loop->melting) / (double) loop->nsteps; ysum += yprod * (double) (loop->nsteps - loop->melting) / (double) loop->nsteps; } else { xsum += xprod * (double) loop->melting / (double) loop->nsteps; ysum += yprod * (double) loop->melting / (double) loop->nsteps; } } else { xsum = xprod; ysum = yprod; } if (!fctr) { xsum = xsum * (double) loop->radius / (double) lf[fctr]->nx; ysum = ysum * (double) loop->radius / (double) lf[fctr]->ny; } } else { if (loop->melting) { if (fctr) { yprod = xprod = (double) loop->radius * (double) (loop->nsteps - loop->melting) / (double) (loop->nsteps); } else { yprod = xprod = (double) loop->radius * (double) (loop->melting) / (double) (loop->nsteps); } } else { xprod = yprod = (double) loop->radius; } while (xctr--) xprod *= sin(lf[fctr]->xcoeff[xctr] * loop->theta); while (yctr--) yprod *= sin(lf[fctr]->ycoeff[yctr] * loop->phi); xsum += xprod; ysum += yprod; } } if ((loop->nfuncs > 1) && (!loop->melting)) { xsum /= (double) loop->nfuncs; ysum /= (double) loop->nfuncs; } xsum += (double) loop->center.x; ysum += (double) loop->center.y; np[pctr].x = (int) ceil(xsum); np[pctr].y = (int) ceil(ysum); } /* fill in extra points */ for (pctr=loop->nsteps; pctr < loop->nsteps+extra_points; pctr++) { np[pctr].x = np[pctr - loop->nsteps].x; np[pctr].y = np[pctr - loop->nsteps].y; } if (loop->melting) { if (!--loop->melting) { loop->nfuncs = 1; loop->function[0] = loop->function[1]; } } /* reset starting color each time to prevent ass-like appearance */ loop->color = STARTCOLOR; if (loop->cstep < xMaxLines) { /* printf("Drawing dashes\n"); */ for (pctr = 0; pctr < loop->nsteps; pctr+=loop->cstep) { #if defined DRAWLINES XSetLineAttributes(MI_DISPLAY(mi), MI_GC(mi), loop->linewidth, LINESTYLE, LINECAP, LINEJOIN); /* erase the last cycle's point */ XSetForeground(MI_DISPLAY(mi), MI_GC(mi), MI_BLACK_PIXEL(mi)); XDrawLines(MI_DISPLAY(mi), MI_WINDOW(mi), MI_GC(mi), &lp[pctr], loop->cstep, CoordModeOrigin); /* Set the new color */ SET_COLOR(); /* plot this cycle's point */ XDrawLines(MI_DISPLAY(mi), MI_WINDOW(mi), MI_GC(mi), &np[pctr], loop->cstep, CoordModeOrigin); XSetLineAttributes(MI_DISPLAY(mi), MI_GC(mi), 1, LINESTYLE, LINECAP, LINEJOIN); #else /* erase the last cycle's point */ XSetForeground(MI_DISPLAY(mi), MI_GC(mi), MI_BLACK_PIXEL(mi)); XDrawPoints(MI_DISPLAY(mi), MI_WINDOW(mi), MI_GC(mi), &lp[pctr], loop->cstep, CoordModeOrigin); /* Set the new color */ SET_COLOR(); /* plot this cycle's point */ XDrawPoints(MI_DISPLAY(mi), MI_WINDOW(mi), MI_GC(mi), &np[pctr], loop->cstep, CoordModeOrigin); #endif } } else { /* on my system, cstep is larger than 65532/2 if we get here */ for (pctr = 0; pctr < loop->nsteps; pctr++) { #if defined DRAWLINES XSetLineAttributes(MI_DISPLAY(mi), MI_GC(mi), loop->linewidth, LINESTYLE, LINECAP, LINEJOIN); /* erase the last cycle's point */ XSetForeground(MI_DISPLAY(mi), MI_GC(mi), MI_BLACK_PIXEL(mi)); XDrawLine(MI_DISPLAY(mi), MI_WINDOW(mi), MI_GC(mi), lp[pctr].x, lp[pctr].y, lp[(pctr + 1) % loop->nsteps].x, lp[(pctr + 1) % loop->nsteps].y); /* Set the new color */ SET_COLOR(); /* plot this cycle's point */ XDrawLine(MI_DISPLAY(mi), MI_WINDOW(mi), MI_GC(mi), np[pctr].x, np[pctr].y, np[(pctr + 1) % loop->nsteps].x, np[(pctr + 1) % loop->nsteps].y); XSetLineAttributes(MI_DISPLAY(mi), MI_GC(mi), 1, LINESTYLE, LINECAP, LINEJOIN); #else /* DRAWLINES */ /* erase the last cycle's point */ XSetForeground(MI_DISPLAY(mi), MI_GC(mi), MI_BLACK_PIXEL(mi)); XDrawPoint(MI_DISPLAY(mi), MI_WINDOW(mi), MI_GC(mi), lp[pctr].x, lp[pctr].y); /* Set the new color */ SET_COLOR(); /* plot this cycle's point */ XDrawPoint(MI_DISPLAY(mi), MI_WINDOW(mi), MI_GC(mi), np[pctr].x, np[pctr].y); #endif /* DRAWLINES */ } } (void) free((void *) lp); loop->lastpoint = np; return True; } static Bool initlisa(ModeInfo * mi, lisas * loop) { lisacons *lc = &Lisa[MI_SCREEN(mi)]; lisafuncs **lf = loop->function; XPoint *lp; int phase, pctr, fctr, xctr, yctr, extra_points; double xprod, yprod, xsum, ysum; xMaxLines = (XMaxRequestSize(MI_DISPLAY(mi))-3)/2; /* printf("Got xMaxLines = %d\n", xMaxLines); */ loop->nsteps = MI_CYCLES(mi); if (loop->nsteps == 0) loop->nsteps = 1; if (MI_NPIXELS(mi) > 2) { loop->color = STARTCOLOR; loop->cstep = (loop->nsteps > MI_NPIXELS(mi)) ? loop->nsteps / MI_NPIXELS(mi) : 1; } else { loop->color = MI_WHITE_PIXEL(mi); loop->cstep = 0; } extra_points = loop->cstep - (loop->nsteps % loop->cstep); lc->maxcycles = (MAXCYCLES * loop->nsteps) - 1; loop->cstep = ( loop->nsteps > MI_NPIXELS(mi) ) ? loop->nsteps / MI_NPIXELS(mi) : 1; /* printf("Got cstep = %d\n", loop->cstep); */ loop->melting = 0; loop->nfuncs = 1; loop->pistep = 2.0 * M_PI / (double) loop->nsteps; loop->center.x = lc->width / 2; loop->center.y = lc->height / 2; loop->radius = (int) MI_SIZE(mi); CHECK_RADIUS(loop, lc); loop->dx = NRAND(XVMAX); loop->dy = NRAND(YVMAX); loop->dx++; loop->dy++; #if defined STARTFUNC lf[0] = &Function[STARTFUNC]; #else /* STARTFUNC */ lf[0] = &Function[NRAND(NUMSTDFUNCS)]; #endif /* STARTFUNC */ if ((lp = loop->lastpoint = (XPoint *) calloc(loop->nsteps+extra_points, sizeof (XPoint))) == NULL) { free_lisa(lc); return False; } phase = lc->loopcount % loop->nsteps; #if defined DEBUG printf( "nsteps = %d\tcstep = %d\tmrs = %d\textra_points = %d\n", loop->nsteps, loop->cstep, xMaxLines, extra_points ); PRINT_FUNC(lf[0]); #endif /* DEBUG */ for (pctr = 0; pctr < loop->nsteps; pctr++) { loop->phi = (double) (pctr - phase) * loop->pistep; loop->theta = (double) (pctr + phase) * loop->pistep; fctr = loop->nfuncs; xsum = ysum = 0.0; while (fctr--) { xprod = yprod = (double) loop->radius; xctr = lf[fctr]->nx; yctr = lf[fctr]->ny; while (xctr--) xprod *= sin(lf[fctr]->xcoeff[xctr] * loop->theta); while (yctr--) yprod *= sin(lf[fctr]->ycoeff[yctr] * loop->phi); xsum += xprod; ysum += yprod; } if (loop->nfuncs > 1) { xsum /= 2.0; ysum /= 2.0; } xsum += (double) loop->center.x; ysum += (double) loop->center.y; lp[pctr].x = (int) ceil(xsum); lp[pctr].y = (int) ceil(ysum); } /* this fills in the extra points, so we can use segment-drawing calls */ for (pctr = loop->nsteps; pctr < loop->nsteps + extra_points; pctr++) { lp[pctr].x=lp[pctr - loop->nsteps].x; lp[pctr].y=lp[pctr - loop->nsteps].y; } #if defined DRAWLINES loop->linewidth = LINEWIDTH; /* #### make this a resource */ if (loop->linewidth == 0) loop->linewidth = 1; if (loop->linewidth < 0) loop->linewidth = NRAND(-loop->linewidth) + 1; XSetLineAttributes(MI_DISPLAY(mi), MI_GC(mi), loop->linewidth, LINESTYLE, LINECAP, LINEJOIN); #endif /* DRAWLINES */ if ( loop->cstep < xMaxLines ) { /* we can send each color segment in a single request * because the max request length is long enough * and because we have padded out the array to have extra elements * to support calls which would otherwise fall off the end*/ for (pctr = 0; pctr < loop->nsteps; pctr+=loop->cstep) { /* Set the color */ SET_COLOR(); #if defined DRAWLINES XDrawLines(MI_DISPLAY(mi), MI_WINDOW(mi), MI_GC(mi), &lp[pctr], loop->cstep, CoordModeOrigin ); #else /* DRAWLINES */ XDrawPoints(MI_DISPLAY(mi), MI_WINDOW(mi), MI_GC(mi), &lp[pctr], loop->cstep, CoordModeOrigin ); #endif /* DRAWLINES */ } } else { /* do it one by one as before */ for (pctr = 0; pctr < loop->nsteps; pctr++ ) { SET_COLOR(); #if defined DRAWLINES XDrawLine(MI_DISPLAY(mi), MI_WINDOW(mi), MI_GC(mi), lp[pctr].x, lp[pctr].y, lp[pctr+1 % loop->nsteps].x, lp[pctr+1 % loop->nsteps].y); #else /* DRAWLINES */ XDrawPoint(MI_DISPLAY(mi), MI_WINDOW(mi), MI_GC(mi), lp[pctr].x, lp[pctr].y); #endif /* DRAWLINES */ } } #if defined DRAWLINES XSetLineAttributes(MI_DISPLAY(mi), MI_GC(mi), 1, LINESTYLE, LINECAP, LINEJOIN); #endif /* DRAWLINES */ return True; } static void refreshlisa(ModeInfo * mi) { lisacons *lc = &Lisa[MI_SCREEN(mi)]; int lctr; for (lctr = 0; lctr < lc->nlissajous; lctr++) { if (!drawlisa(mi, &lc->lissajous[lctr])) return; } } ENTRYPOINT void refresh_lisa(ModeInfo * mi) { lisacons *lc; if (Lisa == NULL) return; lc = &Lisa[MI_SCREEN(mi)]; if (lc->lissajous == NULL) return; if (lc->painted) { lc->painted = False; MI_CLEARWINDOW(mi); refreshlisa(mi); } } static void change_lisa(ModeInfo * mi) { lisas *loop; int lctr, newfunc; lisacons *lc; if (Lisa == NULL) return; lc = &Lisa[MI_SCREEN(mi)]; if (lc->lissajous == NULL) return; lc->loopcount = 0; for (lctr = 0; lctr < lc->nlissajous; lctr++) { loop = &lc->lissajous[lctr]; /* count through the loops we're drawing */ newfunc = NRAND(NUMSTDFUNCS); /* choose a new function at random */ #if defined FOLLOW_FUNC_ORDER loop->function[1] = &Function[(loop->function[0]->index + 1) % NUMSTDFUNCS]; #else /* FOLLOW_FUNC_ORDER */ if (newfunc == loop->function[0]->index) { ++newfunc; newfunc %= NUMSTDFUNCS; /* take the next if we got the one we have */ } if (newfunc >= RAREFUNCMIN \ && !(random() % RAREFUNCODDS) \ && (newfunc = NRAND(NUMSTDFUNCS)) == loop->function[0]->index) { ++newfunc; newfunc %= NUMSTDFUNCS; } loop->function[1] = /* set 2nd function pointer on the loop */ &Function[newfunc]; /* to the new function we just chose */ #endif /* FOLLOW_FUNC_ORDER */ #if defined DEBUG PRINT_FUNC(loop->function[1]); #endif /* DEBUG */ loop->melting = loop->nsteps - 1; /* melt the two functions together */ loop->nfuncs = 2; /* simultaneously for a full cycle */ } } ENTRYPOINT void init_lisa (ModeInfo * mi) { int lctr; lisacons *lc; if (Lisa == NULL) { if ((Lisa = (lisacons *) calloc(MI_NUM_SCREENS(mi), sizeof (lisacons))) == NULL) return; } lc = &Lisa[MI_SCREEN(mi)]; lc->width = MI_WIDTH(mi); lc->height = MI_HEIGHT(mi); lc->loopcount = 0; lc->nlissajous = MI_COUNT(mi); if (lc->nlissajous <= 0) lc->nlissajous = 1; MI_CLEARWINDOW(mi); lc->painted = False; if (lc->lissajous == NULL) { if ((lc->lissajous = (lisas *) calloc(lc->nlissajous, sizeof (lisas))) == NULL) return; for (lctr = 0; lctr < lc->nlissajous; lctr++) { if (!initlisa(mi, &lc->lissajous[lctr])) return; lc->loopcount++; } } else { refreshlisa(mi); } } ENTRYPOINT void draw_lisa (ModeInfo * mi) { lisacons *lc; if (Lisa == NULL) return; lc = &Lisa[MI_SCREEN(mi)]; if (lc->lissajous == NULL) return; #ifdef HAVE_JWXYZ /* Don't second-guess Quartz's double-buffering */ XClearWindow (MI_DISPLAY(mi), MI_WINDOW(mi)); #endif MI_IS_DRAWN(mi) = True; lc->painted = True; if (++lc->loopcount > lc->maxcycles) { change_lisa(mi); } refreshlisa(mi); } ENTRYPOINT void release_lisa (ModeInfo * mi) { if (Lisa) { int screen; for (screen = 0; screen < MI_NUM_SCREENS(mi); screen++) free_lisa(&Lisa[screen]); (void) free(Lisa); Lisa = (lisacons *) NULL; } } XSCREENSAVER_MODULE ("Lisa", lisa) #endif /* MODE_lisa */ xscreensaver-5.36/hacks/lmorph.c000644 000767 000024 00000045153 12701612216 016702 0ustar00jwzstaff000000 000000 /* lmorph, Copyright (c) 1993-1999 Sverre H. Huseby and Glenn T. Lines * * 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. */ /*------------------------------------------------------------------------ | | FILE lmorph.c | MODULE OF xscreensaver | | DESCRIPTION Smooth and non-linear morphing between 1D curves. | | WRITTEN BY Sverre H. Huseby Glenn T. Lines | Kurvn. 30 Østgaardsgt. 5 | N-0495 Oslo N-0474 Oslo | Norway Norway | | Phone: +47 901 63 579 Phone: +47 22 04 67 28 | E-mail: sverrehu@online.no E-mail: glennli@ifi.uio.no | URL: http://home.sol.no/~sverrehu/ | | The original idea, and the bilinear interpolation | mathematics used, emerged in the head of the wise | Glenn T. Lines. | | MODIFICATIONS october 1999 (shh) | * Removed option to use integer arithmetic. | * Increased default number of points, and brightened | the foreground color a little bit. | * Minor code cleanup (very minor, that is). | * Default number of steps is no longer random. | * Added -linewidth option (and resource). | | october 1999 (gtl) | * Added cubic interpolation between shapes | * Added non-linear transformation speed | | june 1998 (shh) | * Minor code cleanup. | | january 1997 (shh) | * Some code reformatting. | * Added possibility to use float arithmetic. | * Added -figtype option. | * Made color blue default. | | december 1995 (jwz) | * Function headers converted from ANSI to K&R. | * Added posibility for random number of steps, and | made this the default. | | march 1995 (shh) | * Converted from an MS-Windows program to X Window. | | november 1993 (gtl, shh, lots of beer) | * Original Windows version (we didn't know better). +----------------------------------------------------------------------*/ #include #include "screenhack.h" /*-----------------------------------------------------------------------+ | PRIVATE DATA | +-----------------------------------------------------------------------*/ /* define MARGINS to make some space around the figure. */ #define MARGINS #define MAXFIGS 20 #define TWO_PI (2.0 * M_PI) #define RND(x) (random() % (x)) #define FT_OPEN 1 #define FT_CLOSED 2 #define FT_ALL (FT_OPEN | FT_CLOSED) struct state { Display *dpy; Window window; int numFigs; /* number of figure arrays. */ int numPoints; /* number of points in each array. */ int nWork; /* current work array number. */ int nFrom; /* current from array number. */ int nTo; /* current to array number. */ int nNext; /* current next array number (after to).*/ int shift; /* shifts the starting point of a figure */ int figType; long delay; /* usecs to wait between updates. */ XPoint *aWork[2]; /* working arrays. */ XPoint *a[MAXFIGS]; /* the figure arrays. */ XPoint *aTmp; /* used as source when interrupting morph */ XPoint *aPrev; /* previous points displayed. */ XPoint *aCurr; /* the current points displayed. */ XPoint *aFrom; /* figure converting from. */ XPoint *aTo; /* figure converting to. */ XPoint *aNext; /* figure converting to next time. */ XPoint *aSlopeFrom; /* slope at start of morph */ XPoint *aSlopeTo; /* slope at end of morph */ int scrWidth, scrHeight; double currGamma, maxGamma, deltaGamma; GC gcDraw, gcClear; }; /*-----------------------------------------------------------------------+ | PUBLIC DATA | +-----------------------------------------------------------------------*/ static const char *lmorph_defaults [] = { ".background: black", ".foreground: #4444FF", "*points: 200", "*steps: 150", "*delay: 70000", "*figtype: all", "*linewidth: 5", 0 }; static XrmOptionDescRec lmorph_options [] = { { "-points", ".points", XrmoptionSepArg, 0 }, { "-steps", ".steps", XrmoptionSepArg, 0 }, { "-delay", ".delay", XrmoptionSepArg, 0 }, { "-figtype", ".figtype", XrmoptionSepArg, 0 }, { "-linewidth", ".linewidth", XrmoptionSepArg, 0 }, { 0, 0, 0, 0 } }; /*-----------------------------------------------------------------------+ | PRIVATE FUNCTIONS | +-----------------------------------------------------------------------*/ static void * xmalloc(size_t size) { void *ret; if ((ret = malloc(size)) == NULL) { fprintf(stderr, "lmorph: out of memory\n"); exit(1); } return ret; } static void initPointArrays(struct state *st) { int q, w; int mx, my; /* max screen coordinates. */ int mp; /* max point number. */ int s, rx, ry; int marginx, marginy; double scalex, scaley; mx = st->scrWidth - 1; my = st->scrHeight - 1; mp = st->numPoints - 1; st->aWork[0] = (XPoint *) xmalloc(st->numPoints * sizeof(XPoint)); st->aWork[1] = (XPoint *) xmalloc(st->numPoints * sizeof(XPoint)); st->aTmp = (XPoint *) xmalloc(st->numPoints * sizeof(XPoint)); if (st->figType & FT_CLOSED) { /* rectangle */ st->a[st->numFigs] = (XPoint *) xmalloc(st->numPoints * sizeof(XPoint)); s = st->numPoints / 4; for (q = 0; q < s; q++) { st->a[st->numFigs][q].x = ((double) q / s) * mx; st->a[st->numFigs][q].y = 0; st->a[st->numFigs][s + q].x = mx; st->a[st->numFigs][s + q].y = ((double) q / s) * my; st->a[st->numFigs][2 * s + q].x = mx - ((double) q / s) * mx; st->a[st->numFigs][2 * s + q].y = my; st->a[st->numFigs][3 * s + q].x = 0; st->a[st->numFigs][3 * s + q].y = my - ((double) q / s) * my; } for (q = 4 * s; q < st->numPoints; q++) st->a[st->numFigs][q].x = st->a[st->numFigs][q].y = 0; st->a[st->numFigs][mp].x = st->a[st->numFigs][0].x; st->a[st->numFigs][mp].y = st->a[st->numFigs][0].y; ++st->numFigs; /* */ st->a[st->numFigs] = (XPoint *) xmalloc(st->numPoints * sizeof(XPoint)); rx = mx / 2; ry = my / 2; for (q = 0; q < st->numPoints; q++) { st->a[st->numFigs][q].x = mx / 2 + rx * sin(1 * TWO_PI * (double) q / mp); st->a[st->numFigs][q].y = my / 2 + ry * cos(3 * TWO_PI * (double) q / mp); } st->a[st->numFigs][mp].x = st->a[st->numFigs][0].x; st->a[st->numFigs][mp].y = st->a[st->numFigs][0].y; ++st->numFigs; /* */ st->a[st->numFigs] = (XPoint *) xmalloc(st->numPoints * sizeof(XPoint)); rx = mx / 2; ry = my / 2; for (q = 0; q < st->numPoints; q++) { st->a[st->numFigs][q].x = mx / 2 + ry * sin(3 * TWO_PI * (double) q / mp); st->a[st->numFigs][q].y = my / 2 + ry * cos(1 * TWO_PI * (double) q / mp); } st->a[st->numFigs][mp].x = st->a[st->numFigs][0].x; st->a[st->numFigs][mp].y = st->a[st->numFigs][0].y; ++st->numFigs; /* */ st->a[st->numFigs] = (XPoint *) xmalloc(st->numPoints * sizeof(XPoint)); rx = mx / 2; ry = my / 2; for (q = 0; q < st->numPoints; q++) { st->a[st->numFigs][q].x = mx / 2 + ry * (0.8 - 0.2 * sin(30 * TWO_PI * q / mp)) * sin(TWO_PI * (double) q / mp); st->a[st->numFigs][q].y = my / 2 + ry * (0.8 - 0.2 * sin(30 * TWO_PI * q / mp)) * cos(TWO_PI * (double) q / mp); } st->a[st->numFigs][mp].x = st->a[st->numFigs][0].x; st->a[st->numFigs][mp].y = st->a[st->numFigs][0].y; ++st->numFigs; /* */ st->a[st->numFigs] = (XPoint *) xmalloc(st->numPoints * sizeof(XPoint)); rx = mx / 2; ry = my / 2; for (q = 0; q < st->numPoints; q++) { st->a[st->numFigs][q].x = mx / 2 + ry * sin(TWO_PI * (double) q / mp); st->a[st->numFigs][q].y = my / 2 + ry * cos(TWO_PI * (double) q / mp); } st->a[st->numFigs][mp].x = st->a[st->numFigs][0].x; st->a[st->numFigs][mp].y = st->a[st->numFigs][0].y; ++st->numFigs; /* */ st->a[st->numFigs] = (XPoint *) xmalloc(st->numPoints * sizeof(XPoint)); rx = mx / 2; ry = my / 2; for (q = 0; q < st->numPoints; q++) { st->a[st->numFigs][q].x = mx / 2 + rx * cos(TWO_PI * (double) q / mp); st->a[st->numFigs][q].y = my / 2 + ry * sin(TWO_PI * (double) q / mp); } st->a[st->numFigs][mp].x = st->a[st->numFigs][0].x; st->a[st->numFigs][mp].y = st->a[st->numFigs][0].y; ++st->numFigs; /* */ st->a[st->numFigs] = (XPoint *) xmalloc(st->numPoints * sizeof(XPoint)); rx = mx / 2; ry = my / 2; for (q = 0; q < st->numPoints; q++) { st->a[st->numFigs][q].x = mx / 2 + rx * sin(2 * TWO_PI * (double) q / mp); st->a[st->numFigs][q].y = my / 2 + ry * cos(3 * TWO_PI * (double) q / mp); } st->a[st->numFigs][mp].x = st->a[st->numFigs][0].x; st->a[st->numFigs][mp].y = st->a[st->numFigs][0].y; ++st->numFigs; } if (st->figType & FT_OPEN) { /* sine wave, one period */ st->a[st->numFigs] = (XPoint *) xmalloc(st->numPoints * sizeof(XPoint)); for (q = 0; q < st->numPoints; q++) { st->a[st->numFigs][q].x = ((double) q / st->numPoints) * mx; st->a[st->numFigs][q].y = (1.0 - sin(((double) q / mp) * TWO_PI)) * my / 2.0; } ++st->numFigs; /* */ st->a[st->numFigs] = (XPoint *) xmalloc(st->numPoints * sizeof(XPoint)); for (q = 0; q < st->numPoints; q++) { st->a[st->numFigs][q].x = ((double) q / mp) * mx; st->a[st->numFigs][q].y = (1.0 - cos(((double) q / mp) * 3 * TWO_PI)) * my / 2.0; } ++st->numFigs; /* spiral, one endpoint at bottom */ st->a[st->numFigs] = (XPoint *) xmalloc(st->numPoints * sizeof(XPoint)); rx = mx / 2; ry = my / 2; for (q = 0; q < st->numPoints; q++) { st->a[st->numFigs][q].x = mx / 2 + ry * sin(5 * TWO_PI * (double) q / mp) * ((double) q / mp); st->a[st->numFigs][q].y = my / 2 + ry * cos(5 * TWO_PI * (double) q / mp) * ((double) q / mp); } ++st->numFigs; /* spiral, one endpoint at top */ st->a[st->numFigs] = (XPoint *) xmalloc(st->numPoints * sizeof(XPoint)); rx = mx / 2; ry = my / 2; for (q = 0; q < st->numPoints; q++) { st->a[st->numFigs][q].x = mx / 2 + ry * sin(6 * TWO_PI * (double) q / mp) * ((double) q / mp); st->a[st->numFigs][q].y = my / 2 - ry * cos(6 * TWO_PI * (double) q / mp) * ((double) q / mp); } ++st->numFigs; /* */ st->a[st->numFigs] = (XPoint *) xmalloc(st->numPoints * sizeof(XPoint)); for (q = 0; q < st->numPoints; q++) { st->a[st->numFigs][q].x = ((double) q / mp) * mx; st->a[st->numFigs][q].y = (1.0 - sin(((double) q / mp) * 5 * TWO_PI)) * my / 2.0; } ++st->numFigs; } #ifdef MARGINS /* make some space around the figures. */ marginx = (mx + 1) / 10; marginy = (my + 1) / 10; scalex = (double) ((mx + 1) - 2.0 * marginx) / (mx + 1.0); scaley = (double) ((my + 1) - 2.0 * marginy) / (my + 1.0); for (q = 0; q < st->numFigs; q++) for (w = 0; w < st->numPoints; w++) { st->a[q][w].x = marginx + st->a[q][w].x * scalex; st->a[q][w].y = marginy + st->a[q][w].y * scaley; } #endif } static void initLMorph(struct state *st) { int steps; XGCValues gcv; XWindowAttributes wa; Colormap cmap; char *ft; int i; st->maxGamma = 1.0; st->numPoints = get_integer_resource(st->dpy, "points", "Integer"); steps = get_integer_resource(st->dpy, "steps", "Integer"); st->delay = get_integer_resource(st->dpy, "delay", "Integer"); ft = get_string_resource(st->dpy, "figtype", "String"); if (strcmp(ft, "all") == 0) st->figType = FT_ALL; else if (strcmp(ft, "open") == 0) st->figType = FT_OPEN; else if (strcmp(ft, "closed") == 0) st->figType = FT_CLOSED; else { fprintf(stderr, "figtype should be `all', `open' or `closed'.\n"); st->figType = FT_ALL; } if (steps <= 0) steps = (random() % 400) + 100; st->deltaGamma = 1.0 / steps; XGetWindowAttributes(st->dpy, st->window, &wa); st->scrWidth = wa.width; st->scrHeight = wa.height; cmap = wa.colormap; gcv.foreground = get_pixel_resource(st->dpy, cmap, "foreground", "Foreground"); st->gcDraw = XCreateGC(st->dpy, st->window, GCForeground, &gcv); XSetForeground(st->dpy, st->gcDraw, gcv.foreground); gcv.foreground = get_pixel_resource(st->dpy, cmap, "background", "Background"); st->gcClear = XCreateGC(st->dpy, st->window, GCForeground, &gcv); XClearWindow(st->dpy, st->window); initPointArrays(st); st->aCurr = st->aWork[st->nWork = 0]; st->aPrev = NULL; st->currGamma = st->maxGamma + 1.0; /* force creation of new figure at startup */ st->nTo = RND(st->numFigs); do { st->nNext = RND(st->numFigs); } while (st->nNext == st->nTo); st->aSlopeTo = (XPoint *) xmalloc(st->numPoints * sizeof(XPoint)); st->aSlopeFrom = (XPoint *) xmalloc(st->numPoints * sizeof(XPoint)); st->aNext = (XPoint *) xmalloc(st->numPoints * sizeof(XPoint)); for (i = 0; i < st->numPoints ; i++) { st->aSlopeTo[i].x = 0.0; st->aSlopeTo[i].y = 0.0; } { /* jwz for version 2.11 */ /* int width = random() % 10;*/ int width = get_integer_resource(st->dpy, "linewidth", "Integer"); int style = LineSolid; int cap = (width > 1 ? CapRound : CapButt); int join = (width > 1 ? JoinRound : JoinBevel); if (width == 1) width = 0; XSetLineAttributes(st->dpy, st->gcDraw, width, style, cap, join); XSetLineAttributes(st->dpy, st->gcClear, width, style, cap, join); } } /* 55% of execution time */ static void createPoints(struct state *st) { int q; XPoint *pa = st->aCurr, *pa1 = st->aFrom, *pa2 = st->aTo; XPoint *qa1 = st->aSlopeFrom, *qa2 = st->aSlopeTo; float fg, f1g; float speed; fg = st->currGamma; f1g = 1.0 - st->currGamma; for (q = st->numPoints; q; q--) { speed = 0.45 * sin(TWO_PI * (double) (q + st->shift) / (st->numPoints - 1)); fg = st->currGamma + 1.67 * speed * exp(-200.0 * (st->currGamma - 0.5 + 0.7 * speed) * (st->currGamma - 0.5 + 0.7 * speed)); f1g = 1.0 - fg; pa->x = (short) (f1g * f1g * f1g * pa1->x + f1g * f1g * fg * (3 * pa1->x + qa1->x) + f1g * fg * fg * (3 * pa2->x - qa2->x) + fg * fg * fg * pa2->x); pa->y = (short) (f1g * f1g * f1g * pa1->y + f1g * f1g * fg * (3 * pa1->y + qa1->y) + f1g * fg * fg * (3 * pa2->y - qa2->y) + fg * fg * fg * pa2->y); ++pa; ++pa1; ++pa2; ++qa1; ++qa2; } } /* 36% of execution time */ static void drawImage(struct state *st) { #if 0 int q; XPoint *old0, *old1, *new0, *new1; /* Problem: update the window without too much flickering. I do * this by handling each linesegment separately. First remove a * line, then draw the new line. The problem is that this leaves * small black pixels on the figure. To fix this, we draw the * entire figure using XDrawLines() afterwards. */ if (st->aPrev) { old0 = st->aPrev; old1 = st->aPrev + 1; new0 = st->aCurr; new1 = st->aCurr + 1; for (q = st->numPoints - 1; q; q--) { XDrawLine(st->dpy, st->window, st->gcClear, old0->x, old0->y, old1->x, old1->y); XDrawLine(st->dpy, st->window, st->gcDraw, new0->x, new0->y, new1->x, new1->y); ++old0; ++old1; ++new0; ++new1; } } #else XClearWindow(st->dpy,st->window); #endif XDrawLines(st->dpy, st->window, st->gcDraw, st->aCurr, st->numPoints, CoordModeOrigin); } /* neglectible % of execution time */ static void animateLMorph(struct state *st) { int i; if (st->currGamma > st->maxGamma) { st->currGamma = 0.0; st->nFrom = st->nTo; st->nTo = st->nNext; st->aFrom = st->a[st->nFrom]; st->aTo = st->a[st->nTo]; do { st->nNext = RND(st->numFigs); } while (st->nNext == st->nTo); st->aNext = st->a[st->nNext]; st->shift = RND(st->numPoints); if (RND(2)) { /* reverse the array to get more variation. */ int i1, i2; XPoint p; for (i1 = 0, i2 = st->numPoints - 1; i1 < st->numPoints / 2; i1++, i2--) { p = st->aNext[i1]; st->aNext[i1] = st->aNext[i2]; st->aNext[i2] = p; } } /* calculate the slopes */ for (i = 0; i < st->numPoints ; i++) { st->aSlopeFrom[i].x = st->aSlopeTo[i].x; st->aSlopeFrom[i].y = st->aSlopeTo[i].y; st->aSlopeTo[i].x = st->aNext[i].x - st->aTo[i].x; st->aSlopeTo[i].y = (st->aNext[i].y - st->aTo[i].y); } } createPoints(st); drawImage(st); st->aPrev = st->aCurr; st->aCurr = st->aWork[st->nWork ^= 1]; st->currGamma += st->deltaGamma; } /*-----------------------------------------------------------------------+ | PUBLIC FUNCTIONS | +-----------------------------------------------------------------------*/ static void * lmorph_init (Display *d, Window w) { struct state *st = (struct state *) calloc (1, sizeof(*st)); st->dpy = d; st->window = w; initLMorph(st); return st; } static unsigned long lmorph_draw (Display *dpy, Window window, void *closure) { struct state *st = (struct state *) closure; animateLMorph(st); return st->delay; } static void lmorph_reshape (Display *dpy, Window window, void *closure, unsigned int w, unsigned int h) { } static Bool lmorph_event (Display *dpy, Window window, void *closure, XEvent *event) { return False; } static void lmorph_free (Display *dpy, Window window, void *closure) { struct state *st = (struct state *) closure; free (st); } XSCREENSAVER_MODULE ("LMorph", lmorph) xscreensaver-5.36/hacks/maze.c000644 000767 000024 00000132521 12717750040 016336 0ustar00jwzstaff000000 000000 /****************************************************************************** * [ maze ] ... * * modified: [ 13-08-08 ] Jamie Zawinski * Removed the bridge option: it didn't look good, and it made * the code a lot harder to understand. * Made the maze stay out of the area used for the -fps display. * Cleaned up and commented. * * modified: [ 1-04-00 ] Johannes Keukelaar * Added -ignorant option (not the default) to remove knowlege * of the direction in which the exit lies. * * modified: [ 6-28-98 ] Zack Weinberg * * Made the maze-solver somewhat more intelligent. There are * three optimizations: * * - Straight-line lookahead: the solver does not enter dead-end * corridors. This is a win with all maze generators. * * - First order direction choice: the solver knows where the * exit is in relation to itself, and will try paths leading in * that direction first. This is a major win on maze generator 1 * which tends to offer direct routes to the exit. * * - Dead region elimination: the solver already has a map of * all squares visited. Whenever it starts to backtrack, it * consults this map and marks off all squares that cannot be * reached from the exit without crossing a square already * visited. Those squares can never contribute to the path to * the exit, so it doesn't bother checking them. This helps a * lot with maze generator 2 and somewhat less with generator 1. * * Further improvements would require knowledge of the wall map * as well as the position of the exit and the squares visited. * I would consider that to be cheating. Generator 0 makes * mazes which are remarkably difficult to solve mechanically -- * even with these optimizations the solver generally must visit * at least two-thirds of the squares. This is partially * because generator 0's mazes have longer paths to the exit. * * modified: [ 4-10-97 ] Johannes Keukelaar * Added multiple maze creators. Robustified solver. * Added bridge option. * modified: [ 8-11-95 ] Ed James * added fill of dead-end box to solve_maze while loop. * modified: [ 3-7-93 ] Jamie Zawinski * added the XRoger logo, cleaned up resources, made * grid size a parameter. * modified: [ 3-3-93 ] Jim Randell * Added the colour stuff and integrated it with jwz's * screenhack stuff. There's still some work that could * be done on this, particularly allowing a resource to * specify how big the squares are. * modified: [ 10-4-88 ] Richard Hess ...!uunet!cimshop!rhess * [ Revised primary execution loop within main()... * [ Extended X event handler, check_events()... * modified: [ 1-29-88 ] Dave Lemke lemke@sun.com * [ Hacked for X11... * [ Note the word "hacked" -- this is extremely ugly, but at * [ least it does the job. NOT a good programming example * [ for X. * original: [ 6/21/85 ] Martin Weiss Sun Microsystems [ SunView ] * ****************************************************************************** Copyright 1988 by Sun Microsystems, Inc. Mountain View, CA. All Rights Reserved Permission to use, copy, modify, and distribute this software and its documentation for any purpose and without fee is hereby granted, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation, and that the names of Sun or MIT not be used in advertising or publicity pertaining to distribution of the software without specific prior written permission. Sun and M.I.T. make no representations about the suitability of this software for any purpose. It is provided "as is" without any express or implied warranty. SUN DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL SUN BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. *****************************************************************************/ #include "screenhack.h" #include "erase.h" #include /* #include */ /* #define gray1_width 2 #define gray1_height 2 static const char gray1_bits[] = { 0x01, 0x02 }; */ #define MAX_MAZE_SIZE_X 1000 #define MAX_MAZE_SIZE_Y 1000 #define MOVE_LIST_SIZE (MAX_MAZE_SIZE_X * MAX_MAZE_SIZE_Y) #define NOT_DEAD 0x8000 #define SOLVER_VISIT 0x4000 #define START_SQUARE 0x2000 #define END_SQUARE 0x1000 #define WALL_TOP 0x8 #define WALL_RIGHT 0x4 #define WALL_BOTTOM 0x2 #define WALL_LEFT 0x1 #define WALL_ANY 0xF #define DOOR_IN_TOP 0x800 #define DOOR_IN_RIGHT 0x400 #define DOOR_IN_BOTTOM 0x200 #define DOOR_IN_LEFT 0x100 #define DOOR_IN_ANY 0xF00 #define DOOR_OUT_TOP 0x80 #define DOOR_OUT_RIGHT 0x40 #define DOOR_OUT_BOTTOM 0x20 #define DOOR_OUT_LEFT 0x10 #define border_x (0) #define border_y (0) #define get_random(x) (random() % (x)) struct move_list_struct { unsigned short x; unsigned short y; unsigned char dir, ways; }; struct solve_state { int running; int i, x, y, bt; }; struct state { Display *dpy; Window window; GC gc, cgc, tgc, sgc, ugc, logo_gc, erase_gc; Pixmap logo_map; int logo_x, logo_y; /* in grid cells (or -1) */ int logo_width, logo_height; /* in pixels */ int fps_width, fps_height; /* in pixels */ int solve_delay, pre_solve_delay, post_solve_delay; unsigned short maze[MAX_MAZE_SIZE_X][MAX_MAZE_SIZE_Y]; struct move_list_struct move_list[MOVE_LIST_SIZE]; struct move_list_struct save_path[MOVE_LIST_SIZE]; struct move_list_struct path[MOVE_LIST_SIZE]; int maze_size_x, maze_size_y; int sqnum, cur_sq_x, cur_sq_y, path_length; int start_x, start_y, start_dir, end_x, end_y, end_dir; int grid_width, grid_height; int bw; int x, y, restart, stop, state, max_length; int sync_p, sync_tick; int ignorant_p; struct solve_state *solve_state; int *sets; /* The sets that our squares are in. */ int *hedges; /* The `list' of hedges. */ int this_gen; int erase_window; eraser_state *eraser; int ifrandom; int ifinit; }; static void draw_wall (struct state *, int, int, int, GC); static void draw_solid_square (struct state *, int, int, int, GC); static void build_wall (struct state *, int, int, int); static void set_maze_sizes (struct state *st, int width, int height) { st->maze_size_x = width / st->grid_width; st->maze_size_y = height / st->grid_height; if (st->maze_size_x < 4) st->maze_size_x = 4; if (st->maze_size_y < 4) st->maze_size_y = 4; } /* Resets the maze grid, picks the starting and ending points, and the position of the logo, if any. */ static void initialize_maze (struct state *st) { int retry_count = 0; int i, j, wall; int logow = 1 + st->logo_width / st->grid_width; int logoh = 1 + st->logo_height / st->grid_height; AGAIN: /* This can happen if the window is really small. Let's not sweat it. */ if (++retry_count > 100) return; /* initialize all squares */ for ( i=0; imaze_size_x; i++) { for ( j=0; jmaze_size_y; j++) { st->maze[i][j] = 0; } } /* top wall */ for ( i=0; imaze_size_x; i++ ) { st->maze[i][0] |= WALL_TOP; } /* right wall */ for ( j=0; jmaze_size_y; j++ ) { st->maze[st->maze_size_x-1][j] |= WALL_RIGHT; } /* bottom wall */ for ( i=0; imaze_size_x; i++ ) { st->maze[i][st->maze_size_y-1] |= WALL_BOTTOM; } /* left wall */ for ( j=0; jmaze_size_y; j++ ) { st->maze[0][j] |= WALL_LEFT; } /* set start square */ wall = get_random(4); switch (wall) { case 0: i = get_random(st->maze_size_x); j = 0; break; case 1: i = st->maze_size_x - 1; j = get_random(st->maze_size_y); break; case 2: i = get_random(st->maze_size_x); j = st->maze_size_y - 1; break; case 3: i = 0; j = get_random(st->maze_size_y); break; } st->maze[i][j] |= START_SQUARE; st->maze[i][j] |= ( DOOR_IN_TOP >> wall ); st->maze[i][j] &= ~( WALL_TOP >> wall ); st->cur_sq_x = i; st->cur_sq_y = j; st->start_x = i; st->start_y = j; st->start_dir = wall; st->sqnum = 0; /* set end square */ wall = (wall + 2)%4; switch (wall) { case 0: i = get_random(st->maze_size_x); j = 0; break; case 1: i = st->maze_size_x - 1; j = get_random(st->maze_size_y); break; case 2: i = get_random(st->maze_size_x); j = st->maze_size_y - 1; break; case 3: i = 0; j = get_random(st->maze_size_y); break; } st->maze[i][j] |= END_SQUARE; st->maze[i][j] |= ( DOOR_OUT_TOP >> wall ); st->maze[i][j] &= ~( WALL_TOP >> wall ); st->end_x = i; st->end_y = j; st->end_dir = wall; /* set logo */ if ((st->maze_size_x-logow >= 6) && (st->maze_size_y-logoh >= 6)) { /* not closer than 3 grid units from a wall, to ensure that it won't overlap the entrance or exit. */ st->logo_x = get_random (st->maze_size_x - logow - 5) + 3; st->logo_y = get_random (st->maze_size_y - logoh - 5) + 3; for (i=0; imaze[st->logo_x + i][st->logo_y + j] |= DOOR_IN_ANY; } else st->logo_y = st->logo_x = -1; /* mask out the fps area */ if (st->fps_width > 0) { int fpsw = 1 + st->fps_width / st->grid_width; int fpsh = 1 + st->fps_height / st->grid_width; /* if the chosen logo position overlapped the fps area, try again! */ if (st->logo_x < fpsw+3 && st->logo_y+logoh > st->maze_size_y-fpsh-4) goto AGAIN; /* if the start or end point is inside the fps area, try again! */ if ((st->start_x <= fpsw && st->start_y >= st->maze_size_y-fpsh-1) || (st->end_x <= fpsw && st->end_y >= st->maze_size_y-fpsh-1)) goto AGAIN; for (i=0; imaze[i][st->maze_size_y - j - 1] |= DOOR_IN_ANY|SOLVER_VISIT; /* take off left/bottom wall or the FPS text overlaps it */ st->maze[i][st->maze_size_y - j - 1] &= ~(WALL_BOTTOM|WALL_LEFT); } } } /**************************************************************************** Generator 2: Set-based maze generator. Put each square in the maze in a separate set. Also, make a list of all the hedges. Randomize that list. Walk through the list. If, for a certain hedge, the two squares on both sides of it are in different sets, union the sets and remove the hedge. Continue until all hedges have been processed or only one set remains. This is essentially the "Kruskal" algorithm. ****************************************************************************/ static void mask_out_set_rect(struct state *st, int x, int y, int w, int h); /* Initialise the sets. */ static void init_sets(struct state *st) { int i, t, r; if(st->sets) free(st->sets); st->sets = (int *)malloc(st->maze_size_x*st->maze_size_y*sizeof(int)); if(!st->sets) abort(); for(i = 0; i < st->maze_size_x*st->maze_size_y; i++) { st->sets[i] = i; } if(st->hedges) free(st->hedges); st->hedges = (int *)malloc(st->maze_size_x*st->maze_size_y*2*sizeof(int)); if(!st->hedges) abort(); for(i = 0; i < st->maze_size_x*st->maze_size_y*2; i++) { st->hedges[i] = i; } /* Mask out outside walls. */ for(i = 0; i < st->maze_size_y; i++) { st->hedges[2*((st->maze_size_x)*i+st->maze_size_x-1)+1] = -1; } for(i = 0; i < st->maze_size_x; i++) { st->hedges[2*((st->maze_size_y-1)*st->maze_size_x+i)] = -1; } /* Mask out the logo area. */ if(st->logo_x!=-1) { int logow = 1 + st->logo_width / st->grid_width; int logoh = 1 + st->logo_height / st->grid_height; mask_out_set_rect(st, st->logo_x, st->logo_y, logow, logoh); } /* Mask out the FPS area. */ if(st->fps_width > 0) { int fpsw = 1 + st->fps_width / st->grid_width; int fpsh = 1 + st->fps_height / st->grid_height; mask_out_set_rect(st, 0, st->maze_size_y-fpsh, fpsw, fpsh); } for(i = 0; i < st->maze_size_x*st->maze_size_y*2; i++) { t = st->hedges[i]; r = random()%(st->maze_size_x*st->maze_size_y*2); st->hedges[i] = st->hedges[r]; st->hedges[r] = t; } } /* Get the representative of a set. */ static int get_set(struct state *st, int num) { int s; if(st->sets[num]==num) return num; else { s = get_set(st, st->sets[num]); st->sets[num] = s; return s; } } /* Join two sets together. */ static void join_sets(struct state *st, int num1, int num2) { int s1, s2; s1 = get_set(st, num1); s2 = get_set(st, num2); if(s1sets[s2] = s1; else st->sets[s1] = s2; } /* Exitialise the sets. */ static void exit_sets(struct state *st) { if(st->hedges) free(st->hedges); st->hedges = 0; if(st->sets) free(st->sets); st->sets = 0; } static void set_create_maze(struct state *st) { int i, h, xx, yy, dir, v, w; /* Do almost all the setup. */ init_sets(st); /* Start running through the hedges. */ for(i = 0; i < 2*st->maze_size_x*st->maze_size_y; i++) { h = st->hedges[i]; /* This one is in the logo or outside border. */ if(h==-1) continue; dir = h%2?1:2; xx = (h>>1)%st->maze_size_x; yy = (h>>1)/st->maze_size_x; v = xx; w = yy; switch(dir) { case 1: v++; break; case 2: w++; break; } if(get_set(st, xx+yy*st->maze_size_x)!=get_set(st, v+w*st->maze_size_x)) { join_sets(st, xx+yy*st->maze_size_x, v+w*st->maze_size_x); /* Don't draw the wall. */ } else { /* Don't join the sets. */ build_wall(st, xx, yy, dir); } } /* Free some memory. */ exit_sets(st); } /* mark a rectangle as being unavailable for usage in the maze */ static void mask_out_set_rect(struct state *st, int x, int y, int w, int h) { int xx, yy; for(xx = x; xx < x+w; xx++) for(yy = y; yy < y+h; yy++) { st->hedges[2*(xx+st->maze_size_x*yy)+1] = -1; st->hedges[2*(xx+st->maze_size_x*yy)] = -1; } for(xx = x; xx < x+w; xx++) { build_wall(st, xx, y, 0); build_wall(st, xx, y+h, 0); st->hedges[2*(xx+st->maze_size_x*(y-1))] = -1; } for(yy = y; yy < y+h; yy++) { build_wall(st, x, yy, 3); build_wall(st, x+w, yy, 3); st->hedges[2*(x-1+st->maze_size_x*yy)+1] = -1; } } /**************************************************************************** Generator 1: Wall-building maze generator. Pick a random, empty corner in the maze. Pick a random direction. Draw a wall in that direction, from that corner until we hit a wall. Option: Only draw the wall if it's going to be shorter than a certain length. Otherwise we get lots of long walls. This is essentially the "Prim" algorithm. ****************************************************************************/ static void alt_mask_out_rect(struct state *st, char *corners, int x, int y, int w, int h); static void alt_create_maze(struct state *st) { char *corners; int *c_idx; int i, j, height, width, open_corners, k, dir, xx, yy; height = st->maze_size_y+1; width = st->maze_size_x+1; /* Allocate and clear some mem. */ corners = (char *)calloc(height*width, 1); if(!corners) return; /* Set up the indexing array. */ c_idx = (int *)malloc(sizeof(int)*height*width); if(!c_idx) { free(corners); return; } for(i = 0; i < height*width; i++) c_idx[i] = i; for(i = 0; i < height*width; i++) { j = c_idx[i]; k = random()%(height*width); c_idx[i] = c_idx[k]; c_idx[k] = j; } /* Set up some initial walls. */ /* Outside walls. */ for(i = 0; i < width; i++) { corners[i] = 1; corners[i+width*(height-1)] = 1; } for(i = 0; i < height; i++) { corners[i*width] = 1; corners[i*width+width-1] = 1; } /* mask out the logo area */ if(st->logo_x!=-1) { int logow = 1 + st->logo_width / st->grid_width; int logoh = 1 + st->logo_height / st->grid_height; alt_mask_out_rect (st, corners, st->logo_x, st->logo_y, logow, logoh); } /* mask out the FPS area */ if(st->fps_width>0) { int fpsw = 1 + st->fps_width / st->grid_width; int fpsh = 1 + st->fps_height / st->grid_height; alt_mask_out_rect (st, corners, 0, st->maze_size_y-fpsh, fpsw, fpsh); } /* Count open gridpoints. */ open_corners = 0; for(i = 0; i < width; i++) for(j = 0; j < height; j++) if(!corners[i+width*j]) open_corners++; /* Now do actual maze generation. */ while(open_corners>0) { for(i = 0; i < width*height; i++) { if(!corners[c_idx[i]]) { xx = c_idx[i]%width; yy = c_idx[i]/width; /* Choose a random direction. */ dir = random()%4; k = 0; /* Measure the length of the wall we'd draw. */ while(!corners[xx+width*yy]) { k++; switch(dir) { case 0: yy--; break; case 1: xx++; break; case 2: yy++; break; case 3: xx--; break; } } if(k<=st->max_length) { xx = c_idx[i]%width; yy = c_idx[i]/width; /* Draw a wall until we hit something. */ while(!corners[xx+width*yy]) { open_corners--; corners[xx+width*yy] = 1; switch(dir) { case 0: build_wall(st, xx-1, yy-1, 1); yy--; break; case 1: build_wall(st, xx, yy, 0); xx++; break; case 2: build_wall(st, xx, yy, 3); yy++; break; case 3: build_wall(st, xx-1, yy-1, 2); xx--; break; } } } } } } /* Free some memory we used. */ free(corners); free(c_idx); } /* mark a rectangle as being unavailable for usage in the maze */ static void alt_mask_out_rect(struct state *st, char *corners, int x, int y, int w, int h) { int i, j, xx, yy; int mazew = st->maze_size_x+1; for(i = x; i <= x+w; i++) for(j = y; j <= y+h; j++) corners[i+mazew*j] = 1; for(xx = x; xx < x+w; xx++) { build_wall(st, xx, y, 0); if (y+h < st->maze_size_y) build_wall(st, xx, y+h, 0); } for(yy = y; yy < y+h; yy++) { if (x > 0) build_wall(st, x, yy, 3); build_wall(st, x+w, yy, 3); } } /**************************************************************************** Generator 0: The original maze generator. Start somewhere. Take a step in a random direction. Keep doing this until we hit a wall. Then, backtrack until we find a point where we can go in another direction. This is essentially the "depth-first recursive backtracker" algorithm. ****************************************************************************/ static int choose_door (struct state *st); static int backup (struct state *st); static void create_maze (struct state *st) /* create a maze layout given the initialized maze */ { int i, newdoor = 0; do { st->move_list[st->sqnum].x = st->cur_sq_x; st->move_list[st->sqnum].y = st->cur_sq_y; st->move_list[st->sqnum].dir = newdoor; while ( ( newdoor = choose_door(st) ) == -1 ) { /* pick a door */ if ( backup(st) == -1 ) { /* no more doors ... backup */ return; /* done ... return */ } } /* mark the out door */ st->maze[st->cur_sq_x][st->cur_sq_y] |= ( DOOR_OUT_TOP >> newdoor ); switch (newdoor) { case 0: st->cur_sq_y--; break; case 1: st->cur_sq_x++; break; case 2: st->cur_sq_y++; break; case 3: st->cur_sq_x--; break; } st->sqnum++; /* mark the in door */ st->maze[st->cur_sq_x][st->cur_sq_y] |= ( DOOR_IN_TOP >> ((newdoor+2)%4) ); /* if end square set path length and save path */ if ( st->maze[st->cur_sq_x][st->cur_sq_y] & END_SQUARE ) { st->path_length = st->sqnum; for ( i=0; ipath_length; i++) { st->save_path[i].x = st->move_list[i].x; st->save_path[i].y = st->move_list[i].y; st->save_path[i].dir = st->move_list[i].dir; } } } while (1); } static int choose_door (struct state *st) /* pick a new path */ { int candidates[3]; int num_candidates; num_candidates = 0; /* top wall */ if ( st->maze[st->cur_sq_x][st->cur_sq_y] & DOOR_IN_TOP ) goto rightwall; if ( st->maze[st->cur_sq_x][st->cur_sq_y] & DOOR_OUT_TOP ) goto rightwall; if ( st->maze[st->cur_sq_x][st->cur_sq_y] & WALL_TOP ) goto rightwall; if ( st->maze[st->cur_sq_x][st->cur_sq_y - 1] & DOOR_IN_ANY ) { st->maze[st->cur_sq_x][st->cur_sq_y] |= WALL_TOP; st->maze[st->cur_sq_x][st->cur_sq_y - 1] |= WALL_BOTTOM; draw_wall(st, st->cur_sq_x, st->cur_sq_y, 0, st->gc); goto rightwall; } candidates[num_candidates++] = 0; rightwall: /* right wall */ if ( st->maze[st->cur_sq_x][st->cur_sq_y] & DOOR_IN_RIGHT ) goto bottomwall; if ( st->maze[st->cur_sq_x][st->cur_sq_y] & DOOR_OUT_RIGHT ) goto bottomwall; if ( st->maze[st->cur_sq_x][st->cur_sq_y] & WALL_RIGHT ) goto bottomwall; if ( st->maze[st->cur_sq_x + 1][st->cur_sq_y] & DOOR_IN_ANY ) { st->maze[st->cur_sq_x][st->cur_sq_y] |= WALL_RIGHT; st->maze[st->cur_sq_x + 1][st->cur_sq_y] |= WALL_LEFT; draw_wall(st, st->cur_sq_x, st->cur_sq_y, 1, st->gc); goto bottomwall; } candidates[num_candidates++] = 1; bottomwall: /* bottom wall */ if ( st->maze[st->cur_sq_x][st->cur_sq_y] & DOOR_IN_BOTTOM ) goto leftwall; if ( st->maze[st->cur_sq_x][st->cur_sq_y] & DOOR_OUT_BOTTOM ) goto leftwall; if ( st->maze[st->cur_sq_x][st->cur_sq_y] & WALL_BOTTOM ) goto leftwall; if ( st->maze[st->cur_sq_x][st->cur_sq_y + 1] & DOOR_IN_ANY ) { st->maze[st->cur_sq_x][st->cur_sq_y] |= WALL_BOTTOM; st->maze[st->cur_sq_x][st->cur_sq_y + 1] |= WALL_TOP; draw_wall(st, st->cur_sq_x, st->cur_sq_y, 2, st->gc); goto leftwall; } candidates[num_candidates++] = 2; leftwall: /* left wall */ if ( st->maze[st->cur_sq_x][st->cur_sq_y] & DOOR_IN_LEFT ) goto donewall; if ( st->maze[st->cur_sq_x][st->cur_sq_y] & DOOR_OUT_LEFT ) goto donewall; if ( st->maze[st->cur_sq_x][st->cur_sq_y] & WALL_LEFT ) goto donewall; if ( st->maze[st->cur_sq_x - 1][st->cur_sq_y] & DOOR_IN_ANY ) { st->maze[st->cur_sq_x][st->cur_sq_y] |= WALL_LEFT; st->maze[st->cur_sq_x - 1][st->cur_sq_y] |= WALL_RIGHT; draw_wall(st, st->cur_sq_x, st->cur_sq_y, 3, st->gc); goto donewall; } candidates[num_candidates++] = 3; donewall: if (num_candidates == 0) return ( -1 ); if (num_candidates == 1) return ( candidates[0] ); return ( candidates[ get_random(num_candidates) ] ); } static int backup (struct state *st) /* back up a move */ { st->sqnum--; if (st->sqnum >= 0) { st->cur_sq_x = st->move_list[st->sqnum].x; st->cur_sq_y = st->move_list[st->sqnum].y; } return ( st->sqnum ); } /**************************************************************************** Drawing the maze ****************************************************************************/ /* draws the maze outline, and the logo */ static void draw_maze_border (struct state *st) { int i, j; for ( i=0; imaze_size_x; i++) { if ( st->maze[i][0] & WALL_TOP ) { XDrawLine(st->dpy, st->window, st->gc, border_x + st->grid_width * i, border_y, border_x + st->grid_width * (i+1) - 1, border_y); } if ((st->maze[i][st->maze_size_y - 1] & WALL_BOTTOM)) { XDrawLine(st->dpy, st->window, st->gc, border_x + st->grid_width * i, border_y + st->grid_height * (st->maze_size_y) - 1, border_x + st->grid_width * (i+1) - 1, border_y + st->grid_height * (st->maze_size_y) - 1); } } for ( j=0; jmaze_size_y; j++) { if ( st->maze[st->maze_size_x - 1][j] & WALL_RIGHT ) { XDrawLine(st->dpy, st->window, st->gc, border_x + st->grid_width * st->maze_size_x - 1, border_y + st->grid_height * j, border_x + st->grid_width * st->maze_size_x - 1, border_y + st->grid_height * (j+1) - 1); } if ( st->maze[0][j] & WALL_LEFT ) { XDrawLine(st->dpy, st->window, st->gc, border_x, border_y + st->grid_height * j, border_x, border_y + st->grid_height * (j+1) - 1); } } if (st->logo_x != -1) { Window r; int xx, yy; unsigned int w, h, bbw, d; /* round up to grid size */ int ww = ((st->logo_width / st->grid_width) + 1) * st->grid_width; int hh = ((st->logo_height / st->grid_height) + 1) * st->grid_height; int lx, ly; XGetGeometry (st->dpy, st->logo_map, &r, &xx, &yy, &w, &h, &bbw, &d); /* kludge: if the logo "hole" is around the same size as the logo, don't center it (since the xscreensaver logo image is a little off center... But do center it if the hole/gridsize is large. */ if (ww < st->logo_width + 5) ww = w; if (hh < st->logo_height + 5) hh = h; lx = border_x + 3 + st->grid_width * st->logo_x + ((ww - w) / 2); ly = border_y + 3 + st->grid_height * st->logo_y + ((hh - h) / 2); /* Fill the background of the logo box with the "unreachable" color */ XFillRectangle (st->dpy, st->window, st->ugc, border_x + 3 + st->grid_width * st->logo_x, border_y + 3 + st->grid_height * st->logo_y, ww, hh); XSetClipOrigin (st->dpy, st->logo_gc, lx, ly); if (d == 1) XCopyPlane (st->dpy, st->logo_map, st->window, st->logo_gc, 0, 0, w, h, lx, ly, 1); else XCopyArea (st->dpy, st->logo_map, st->window, st->logo_gc, 0, 0, w, h, lx, ly); } draw_solid_square (st, st->start_x, st->start_y, WALL_TOP >> st->start_dir, st->tgc); draw_solid_square (st, st->end_x, st->end_y, WALL_TOP >> st->end_dir, st->tgc); } /* Mark the maze grid as having a wall at the given coordinate, and draw that wall on the screen. */ static void build_wall(struct state *st, int i, int j, int dir) { /* Draw it on the screen. */ draw_wall(st, i, j, dir, st->gc); /* Put it in the maze. */ switch(dir) { case 0: st->maze[i][j] |= WALL_TOP; if(j>0) st->maze[i][j-1] |= WALL_BOTTOM; break; case 1: st->maze[i][j] |= WALL_RIGHT; if(imaze_size_x-1) st->maze[i+1][j] |= WALL_LEFT; break; case 2: st->maze[i][j] |= WALL_BOTTOM; if(jmaze_size_y-1) st->maze[i][j+1] |= WALL_TOP; break; case 3: st->maze[i][j] |= WALL_LEFT; if(i>0) st->maze[i-1][j] |= WALL_RIGHT; break; } } static void draw_wall(struct state *st, int i, int j, int dir, GC with_gc) /* draw a single wall */ { switch (dir) { case 0: XDrawLine(st->dpy, st->window, with_gc, border_x + st->grid_width * i, border_y + st->grid_height * j, border_x + st->grid_width * (i+1), border_y + st->grid_height * j); break; case 1: XDrawLine(st->dpy, st->window, with_gc, border_x + st->grid_width * (i+1), border_y + st->grid_height * j, border_x + st->grid_width * (i+1), border_y + st->grid_height * (j+1)); break; case 2: XDrawLine(st->dpy, st->window, with_gc, border_x + st->grid_width * i, border_y + st->grid_height * (j+1), border_x + st->grid_width * (i+1), border_y + st->grid_height * (j+1)); break; case 3: XDrawLine(st->dpy, st->window, with_gc, border_x + st->grid_width * i, border_y + st->grid_height * j, border_x + st->grid_width * i, border_y + st->grid_height * (j+1)); break; } if(st->sync_p) { /* too slow if we sync on every wall, so only sync about ten times during the maze-creation process. */ st->sync_tick--; if (st->sync_tick <= 0) { XSync(st->dpy, False); st->sync_tick = st->maze_size_x * st->maze_size_x / 10; } } } static void draw_solid_square(struct state *st, int i, int j, int dir, GC with_gc) { switch (dir) { case WALL_TOP: XFillRectangle(st->dpy, st->window, with_gc, border_x + st->bw+(st->bw==0?1:0) + st->grid_width * i, border_y - st->bw-(st->bw==0?1:0) + st->grid_height * j, st->grid_width - (st->bw+st->bw+(st->bw==0?1:0)), st->grid_height); break; case WALL_RIGHT: XFillRectangle(st->dpy, st->window, with_gc, border_x + st->bw+(st->bw==0?1:0) + st->grid_width * i, border_y + st->bw+(st->bw==0?1:0) + st->grid_height * j, st->grid_width, st->grid_height - (st->bw+st->bw+(st->bw==0?1:0))); break; case WALL_BOTTOM: XFillRectangle(st->dpy, st->window, with_gc, border_x + st->bw+(st->bw==0?1:0) + st->grid_width * i, border_y + st->bw+(st->bw==0?1:0) + st->grid_height * j, st->grid_width - (st->bw+st->bw+(st->bw==0?1:0)), st->grid_height); break; case WALL_LEFT: XFillRectangle(st->dpy, st->window, with_gc, border_x - st->bw-(st->bw==0?1:0) + st->grid_width * i, border_y + st->bw+(st->bw==0?1:0) + st->grid_height * j, st->grid_width, st->grid_height - (st->bw+st->bw+(st->bw==0?1:0))); break; } } /**************************************************************************** Solving the maze ****************************************************************************/ static int longdeadend_p(struct state *st, int x1, int y1, int x2, int y2, int endwall) { int dx = x2 - x1, dy = y2 - y1; int sidewalls; sidewalls = endwall | (endwall >> 2 | endwall << 2); sidewalls = ~sidewalls & WALL_ANY; while((st->maze[x2][y2] & WALL_ANY) == sidewalls) { if (x2 + dx < 0 || x2 + dx >= st->maze_size_x || y2 + dy < 0 || y2 + dy >= st->maze_size_y) break; x2 += dx; y2 += dy; } if((st->maze[x2][y2] & WALL_ANY) == (sidewalls | endwall)) { endwall = (endwall >> 2 | endwall << 2) & WALL_ANY; while(x1 != x2 || y1 != y2) { x1 += dx; y1 += dy; draw_solid_square(st, x1, y1, endwall, st->sgc); st->maze[x1][y1] |= SOLVER_VISIT; } return 1; } else return 0; } /* Find all dead regions -- areas from which the goal cannot be reached -- and mark them visited. */ static void find_dead_regions(struct state *st) { int xx, yy, flipped; /* Find all not SOLVER_VISIT squares bordering NOT_DEAD squares and mark them NOT_DEAD also. Repeat until no more such squares. */ st->maze[st->start_x][st->start_y] |= NOT_DEAD; do { flipped = 0; for(xx = 0; xx < st->maze_size_x; xx++) for(yy = 0; yy < st->maze_size_y; yy++) if(!(st->maze[xx][yy] & (SOLVER_VISIT | NOT_DEAD)) && ( (xx && (st->maze[xx-1][yy] & NOT_DEAD)) || (yy && (st->maze[xx][yy-1] & NOT_DEAD)))) { flipped = 1; st->maze[xx][yy] |= NOT_DEAD; } for(xx = st->maze_size_x-1; xx >= 0; xx--) for(yy = st->maze_size_y-1; yy >= 0; yy--) if(!(st->maze[xx][yy] & (SOLVER_VISIT | NOT_DEAD)) && ( (xx != st->maze_size_x-1 && (st->maze[xx+1][yy] & NOT_DEAD)) || (yy != st->maze_size_y-1 && (st->maze[xx][yy+1] & NOT_DEAD)))) { flipped = 1; st->maze[xx][yy] |= NOT_DEAD; } } while(flipped); for (yy = 0; yy < st->maze_size_y; yy++) for (xx = 0; xx < st->maze_size_x; xx++) { if (st->maze[xx][yy] & NOT_DEAD) st->maze[xx][yy] &= ~NOT_DEAD; else if (!(st->maze[xx][yy] & SOLVER_VISIT)) { st->maze[xx][yy] |= SOLVER_VISIT; if((xx < st->logo_x || xx > st->logo_x + st->logo_width / st->grid_width) || (yy < st->logo_y || yy > st->logo_y + st->logo_height / st->grid_height)) { /* if we are completely surrounded by walls, just draw the inside part */ if ((st->maze[xx][yy] & WALL_ANY) == WALL_ANY) XFillRectangle(st->dpy, st->window, st->ugc, border_x + st->bw + st->grid_width * xx, border_y + st->bw + st->grid_height * yy, st->grid_width - (st->bw+st->bw), st->grid_height - (st->bw+st->bw)); else { if (! (st->maze[xx][yy] & WALL_LEFT)) draw_solid_square(st, xx, yy, WALL_LEFT, st->ugc); if (! (st->maze[xx][yy] & WALL_RIGHT)) draw_solid_square(st, xx, yy, WALL_RIGHT, st->ugc); if (! (st->maze[xx][yy] & WALL_TOP)) draw_solid_square(st, xx, yy, WALL_TOP, st->ugc); if (! (st->maze[xx][yy] & WALL_BOTTOM)) draw_solid_square(st, xx, yy, WALL_BOTTOM, st->ugc); } } } } } /* solve the maze by one more tick */ static int solve_maze (struct state *st) { struct solve_state *ss = st->solve_state; if (!ss) ss = st->solve_state = (struct solve_state *) calloc (1, sizeof(*ss)); if (!ss->running) { /* plug up the surrounding wall */ st->maze[st->end_x][st->end_y] |= (WALL_TOP >> st->end_dir); /* initialize search path */ ss->i = 0; st->path[ss->i].x = st->end_x; st->path[ss->i].y = st->end_y; st->path[ss->i].dir = 0; st->maze[st->end_x][st->end_y] |= SOLVER_VISIT; ss->running = 1; } /* do it */ /* while (1) */ { int dir, from, ways; if ( st->maze[st->path[ss->i].x][st->path[ss->i].y] & START_SQUARE ) { ss->running = 0; return 1; } if(!st->path[ss->i].dir) { ways = 0; /* First visit this square. Which adjacent squares are open? */ for(dir = WALL_TOP; dir & WALL_ANY; dir >>= 1) { if(st->maze[st->path[ss->i].x][st->path[ss->i].y] & dir) continue; ss->y = st->path[ss->i].y - !!(dir & WALL_TOP) + !!(dir & WALL_BOTTOM); ss->x = st->path[ss->i].x + !!(dir & WALL_RIGHT) - !!(dir & WALL_LEFT); if(st->maze[ss->x][ss->y] & SOLVER_VISIT) continue; from = (dir << 2 & WALL_ANY) | (dir >> 2 & WALL_ANY); /* don't enter obvious dead ends */ if(((st->maze[ss->x][ss->y] & WALL_ANY) | from) != WALL_ANY) { if(!longdeadend_p(st, st->path[ss->i].x, st->path[ss->i].y, ss->x, ss->y, dir)) ways |= dir; } else { draw_solid_square(st, ss->x, ss->y, from, st->sgc); st->maze[ss->x][ss->y] |= SOLVER_VISIT; } } } else ways = st->path[ss->i].ways; /* ways now has a bitmask of open paths. */ if(!ways) goto backtrack; if (!st->ignorant_p) { ss->x = st->path[ss->i].x - st->start_x; ss->y = st->path[ss->i].y - st->start_y; /* choice one */ if(abs(ss->y) <= abs(ss->x)) dir = (ss->x > 0) ? WALL_LEFT : WALL_RIGHT; else dir = (ss->y > 0) ? WALL_TOP : WALL_BOTTOM; if(dir & ways) goto found; /* choice two */ switch(dir) { case WALL_LEFT: case WALL_RIGHT: dir = (ss->y > 0) ? WALL_TOP : WALL_BOTTOM; break; case WALL_TOP: case WALL_BOTTOM: dir = (ss->x > 0) ? WALL_LEFT : WALL_RIGHT; } if(dir & ways) goto found; /* choice three */ dir = (dir << 2 & WALL_ANY) | (dir >> 2 & WALL_ANY); if(dir & ways) goto found; /* choice four */ dir = ways; if(!dir) goto backtrack; found: ; } else { if(ways&WALL_TOP) dir = WALL_TOP; else if(ways&WALL_LEFT) dir = WALL_LEFT; else if(ways&WALL_BOTTOM) dir = WALL_BOTTOM; else if(ways&WALL_RIGHT) dir = WALL_RIGHT; else goto backtrack; } ss->bt = 0; ways &= ~dir; /* tried this one */ ss->y = st->path[ss->i].y - !!(dir & WALL_TOP) + !!(dir & WALL_BOTTOM); ss->x = st->path[ss->i].x + !!(dir & WALL_RIGHT) - !!(dir & WALL_LEFT); /* advance in direction dir */ st->path[ss->i].dir = dir; st->path[ss->i].ways = ways; draw_solid_square(st, st->path[ss->i].x, st->path[ss->i].y, dir, st->tgc); ss->i++; st->path[ss->i].dir = 0; st->path[ss->i].ways = 0; st->path[ss->i].x = ss->x; st->path[ss->i].y = ss->y; st->maze[ss->x][ss->y] |= SOLVER_VISIT; return 0; /* continue; */ backtrack: if(ss->i == 0) { printf("Unsolvable maze.\n"); ss->running = 0; return 1; } if(!ss->bt && !st->ignorant_p) find_dead_regions(st); ss->bt = 1; from = st->path[ss->i-1].dir; from = (from << 2 & WALL_ANY) | (from >> 2 & WALL_ANY); draw_solid_square(st, st->path[ss->i].x, st->path[ss->i].y, from, st->cgc); ss->i--; } return 0; } /**************************************************************************** XScreenSaver boilerplate: resources, command line options, and main loop. ****************************************************************************/ static const char *maze_defaults[] = { ".background: black", ".foreground: white", "*fpsSolid: true", "*gridSize: 0", "*generator: -1", "*maxLength: 5", "*ignorant: False", "*solveDelay: 10000", "*preDelay: 2000000", "*postDelay: 4000000", "*liveColor: #00FF00", "*deadColor: #880000", "*skipColor: #8B5A00", "*surroundColor: #220055", 0 }; static XrmOptionDescRec maze_options[] = { { "-ignorant", ".ignorant", XrmoptionNoArg, "True" }, { "-no-ignorant", ".ignorant", XrmoptionNoArg, "False" }, { "-grid-size", ".gridSize", XrmoptionSepArg, 0 }, { "-solve-delay", ".solveDelay", XrmoptionSepArg, 0 }, { "-pre-delay", ".preDelay", XrmoptionSepArg, 0 }, { "-post-delay", ".postDelay", XrmoptionSepArg, 0 }, { "-bg-color", ".background", XrmoptionSepArg, 0 }, { "-fg-color", ".foreground", XrmoptionSepArg, 0 }, { "-live-color", ".liveColor", XrmoptionSepArg, 0 }, { "-dead-color", ".deadColor", XrmoptionSepArg, 0 }, { "-skip-color", ".skipColor", XrmoptionSepArg, 0 }, { "-surround-color", ".surroundColor",XrmoptionSepArg, 0 }, { "-generator", ".generator", XrmoptionSepArg, 0 }, { "-max-length", ".maxLength", XrmoptionSepArg, 0 }, { 0, 0, 0, 0 } }; static int generator = 0; static void * maze_init (Display *dpy_arg, Window window_arg) { struct state *st = (struct state *) calloc (1, sizeof(*st)); int size; XWindowAttributes xgwa; unsigned long bg, fg, pfg, pbg, sfg, ufg; st->dpy = dpy_arg; st->window = window_arg; st->stop = 0; st->state = 1; st->restart = 1; st->ifrandom = 0; st->ifinit = 1; size = get_integer_resource (st->dpy, "gridSize", "Dimension"); st->solve_delay = get_integer_resource (st->dpy, "solveDelay", "Integer"); st->pre_solve_delay = get_integer_resource (st->dpy, "preDelay", "Integer"); st->post_solve_delay = get_integer_resource (st->dpy, "postDelay", "Integer"); generator = get_integer_resource(st->dpy, "generator", "Integer"); st->max_length = get_integer_resource(st->dpy, "maxLength", "Integer"); st->ignorant_p = get_boolean_resource(st->dpy, "ignorant", "Boolean"); if (get_boolean_resource (st->dpy, "doFPS", "DoFPS")) { /* Just guess, rather than loading and measuring the "fpsFont"... */ st->fps_width = 210; st->fps_height = 62; } if (!size) st->ifrandom = 1; if (size < 2) size = 7 + (random () % 30); st->grid_width = st->grid_height = size; st->bw = (size > 6 ? 3 : (size-1)/2); XGetWindowAttributes (st->dpy, st->window, &xgwa); st->x = 0; st->y = 0; set_maze_sizes (st, xgwa.width, xgwa.height); st->gc = XCreateGC(st->dpy, st->window, 0, 0); st->cgc = XCreateGC(st->dpy, st->window, 0, 0); st->tgc = XCreateGC(st->dpy, st->window, 0, 0); st->sgc = XCreateGC(st->dpy, st->window, 0, 0); st->ugc = XCreateGC(st->dpy, st->window, 0, 0); st->logo_gc = XCreateGC(st->dpy, st->window, 0, 0); st->erase_gc = XCreateGC(st->dpy, st->window, 0, 0); bg = get_pixel_resource (st->dpy, xgwa.colormap, "background","Background"); fg = get_pixel_resource (st->dpy, xgwa.colormap, "foreground","Foreground"); pfg = get_pixel_resource (st->dpy, xgwa.colormap, "liveColor", "Foreground"); pbg = get_pixel_resource (st->dpy, xgwa.colormap, "deadColor", "Foreground"); sfg = get_pixel_resource (st->dpy, xgwa.colormap, "skipColor", "Foreground"); ufg = get_pixel_resource (st->dpy, xgwa.colormap, "surroundColor", "Foreground"); XSetForeground (st->dpy, st->gc, fg); XSetBackground (st->dpy, st->gc, bg); XSetForeground (st->dpy, st->cgc, pbg); XSetBackground (st->dpy, st->cgc, bg); XSetForeground (st->dpy, st->tgc, pfg); XSetBackground (st->dpy, st->tgc, bg); XSetForeground (st->dpy, st->sgc, sfg); XSetBackground (st->dpy, st->sgc, bg); XSetForeground (st->dpy, st->ugc, ufg); XSetBackground (st->dpy, st->ugc, bg); XSetForeground (st->dpy, st->logo_gc, fg); XSetBackground (st->dpy, st->logo_gc, bg); XSetForeground (st->dpy, st->erase_gc, bg); XSetBackground (st->dpy, st->erase_gc, bg); # ifdef HAVE_JWXYZ jwxyz_XSetAntiAliasing (st->dpy, st->gc, False); # endif { Window r; int x, y; unsigned int w, h, bbw, d; unsigned long *pixels; int npixels; Pixmap logo_mask = 0; st->logo_map = xscreensaver_logo (xgwa.screen, xgwa.visual, st->window, xgwa.colormap, bg, &pixels, &npixels, &logo_mask, xgwa.width > 800 || xgwa.height > 800); if (logo_mask) { XSetClipMask (st->dpy, st->logo_gc, logo_mask); XFreePixmap (st->dpy, logo_mask); } if (pixels) free (pixels); XGetGeometry (st->dpy, st->logo_map, &r, &x, &y, &w, &h, &bbw, &d); st->logo_width = w; st->logo_height = h; } st->restart = 0; st->sync_p = 1; return st; } static void maze_reshape (Display *dpy, Window window, void *closure, unsigned int w, unsigned int h) { struct state *st = (struct state *) closure; st->restart = 1; } static unsigned long maze_draw (Display *dpy, Window window, void *closure) { struct state *st = (struct state *) closure; int this_delay = st->solve_delay; if (st->eraser || st->erase_window) { st->erase_window = 0; st->eraser = erase_window (st->dpy, st->window, st->eraser); if (st->eraser) this_delay = 10000; else { this_delay = 1000000; if (this_delay > st->pre_solve_delay) this_delay = st->pre_solve_delay; } goto END; } if (st->restart || st->stop) goto pop; switch (st->state) { case 1: initialize_maze(st); if (st->ifrandom && st->ifinit) { int size; size = 7 + (random () % 30); st->grid_width = st->grid_height = size; st->bw = (size > 6 ? 3 : (size-1)/2); st->ifinit = 0; st->restart = 1; } break; case 2: XClearWindow(st->dpy, st->window); draw_maze_border(st); break; case 3: st->this_gen = generator; if(st->this_gen<0 || st->this_gen>2) st->this_gen = random()%3; switch(st->this_gen) { case 0: create_maze(st); break; case 1: alt_create_maze(st); break; case 2: set_create_maze(st); break; } break; case 4: this_delay = st->pre_solve_delay; break; case 5: if (! solve_maze(st)) --st->state; /* stay in state 5 */ break; case 6: st->erase_window = 1; this_delay = st->post_solve_delay; st->state = 0 ; st->ifinit = 1; break; default: abort (); } ++st->state; pop: if (st->restart) { XWindowAttributes xgwa; int size; st->restart = 0; st->stop = 0; st->state = 1; if (st->solve_state && st->solve_state->running) st->solve_state->running = 0; st->sync_p = ((random() % 4) != 0); size = get_integer_resource (st->dpy, "gridSize", "Dimension"); if (size < 2) size = 7 + (random () % 30); st->grid_width = st->grid_height = size; st->bw = (size > 6 ? 3 : (size-1)/2); XGetWindowAttributes (st->dpy, st->window, &xgwa); set_maze_sizes (st, xgwa.width, xgwa.height); } END: return this_delay; } static Bool maze_event (Display *dpy, Window window, void *closure, XEvent *event) { struct state *st = (struct state *) closure; if (event->type == ButtonPress) { switch (event->xbutton.button) { case 2: st->stop = !st->stop ; if (st->state == 5) st->state = 4 ; else { st->restart = 1; st->stop = 0; } return True; default: st->restart = 1 ; st->stop = 0 ; return True; } } else if (event->type == Expose) { st->restart = 1; return False; } else if (screenhack_event_helper (dpy, window, event)) { st->restart = 1 ; st->stop = 0 ; return True; } return False; } static void maze_free (Display *dpy, Window window, void *closure) { struct state *st = (struct state *) closure; free (st); } XSCREENSAVER_MODULE ("Maze", maze) xscreensaver-5.36/hacks/moire.c000644 000767 000024 00000017617 12710314342 016517 0ustar00jwzstaff000000 000000 /* xscreensaver, Copyright (c) 1997-2013 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. * * Concept snarfed from Michael D. Bayne in * http://www.go2net.com/internet/deep/1997/04/16/body.html */ #include "screenhack.h" #undef HAVE_XSHM_EXTENSION /* this is broken here at the moment */ #ifdef HAVE_XSHM_EXTENSION # include "xshm.h" #endif /* HAVE_XSHM_EXTENSION */ struct state { Display *dpy; Window window; #ifdef HAVE_XSHM_EXTENSION Bool use_shm; XShmSegmentInfo shm_info; #endif /* HAVE_XSHM_EXTENSION */ int delay; int offset; XColor *colors; int ncolors; GC gc; unsigned long fg_pixel; unsigned long bg_pixel; int depth; int draw_y, draw_xo, draw_yo; int draw_factor; XImage *draw_image; XWindowAttributes xgwa; }; static void moire_init_1 (struct state *st) { int oncolors; int i; int fgh, bgh; double fgs, fgv, bgs, bgv; XWindowAttributes xgwa; XColor fgc, bgc; XGCValues gcv; XGetWindowAttributes (st->dpy, st->window, &xgwa); st->delay = get_integer_resource (st->dpy, "delay", "Integer"); st->offset = get_integer_resource (st->dpy, "offset", "Integer"); if (st->offset < 2) st->offset = 2; #ifdef HAVE_XSHM_EXTENSION st->use_shm = get_boolean_resource(st->dpy, "useSHM", "Boolean"); #endif /* HAVE_XSHM_EXTENSION */ MONO: if (st->colors) { for (i = 0; i < st->ncolors; i++) XFreeColors (st->dpy, xgwa.colormap, &st->colors[i].pixel, 1, 0); free(st->colors); st->colors = 0; } if (mono_p) { st->fg_pixel = WhitePixelOfScreen (DefaultScreenOfDisplay(st->dpy)); st->bg_pixel = BlackPixelOfScreen (DefaultScreenOfDisplay(st->dpy)); } else { st->fg_pixel = get_pixel_resource (st->dpy, xgwa.colormap, "foreground", "Foreground"); st->bg_pixel = get_pixel_resource (st->dpy, xgwa.colormap, "background", "Background"); } if (mono_p) { st->offset *= 20; /* compensate for lack of shading */ gcv.foreground = st->fg_pixel; } else { st->ncolors = get_integer_resource (st->dpy, "ncolors", "Integer"); if (st->ncolors < 2) st->ncolors = 2; oncolors = st->ncolors; fgc.flags = bgc.flags = DoRed|DoGreen|DoBlue; if (get_boolean_resource(st->dpy, "random","Boolean")) { fgc.red = random() & 0xFFFF; fgc.green = random() & 0xFFFF; fgc.blue = random() & 0xFFFF; bgc.red = random() & 0xFFFF; bgc.green = random() & 0xFFFF; bgc.blue = random() & 0xFFFF; } else { fgc.pixel = st->fg_pixel; bgc.pixel = st->bg_pixel; XQueryColor (st->dpy, xgwa.colormap, &fgc); XQueryColor (st->dpy, xgwa.colormap, &bgc); } rgb_to_hsv (fgc.red, fgc.green, fgc.blue, &fgh, &fgs, &fgv); rgb_to_hsv (bgc.red, bgc.green, bgc.blue, &bgh, &bgs, &bgv); st->colors = (XColor *) malloc (sizeof (XColor) * (st->ncolors+2)); memset(st->colors, 0, (sizeof (XColor) * (st->ncolors+2))); make_color_ramp (xgwa.screen, xgwa.visual, xgwa.colormap, fgh, fgs, fgv, bgh, bgs, bgv, st->colors, &st->ncolors, True, True, False); if (st->ncolors != oncolors) fprintf(stderr, "%s: got %d of %d requested colors.\n", progname, st->ncolors, oncolors); if (st->ncolors <= 2) { mono_p = True; goto MONO; } gcv.foreground = st->colors[0].pixel; } st->gc = XCreateGC (st->dpy, st->window, GCForeground, &gcv); } static void * moire_init (Display *dpy, Window window) { struct state *st = (struct state *) calloc (1, sizeof(*st)); st->dpy = dpy; st->window = window; moire_init_1 (st); return st; } static unsigned long moire_draw (Display *dpy, Window window, void *closure) { struct state *st = (struct state *) closure; XGCValues gcv; int chunk_size = 20, ii; if (st->draw_y == 0) { moire_init_1 (st); XGetWindowAttributes (st->dpy, st->window, &st->xgwa); st->draw_xo = (random() % st->xgwa.width) - st->xgwa.width/2; st->draw_yo = (random() % st->xgwa.height) - st->xgwa.height/2; st->draw_factor = (random() % st->offset) + 1; st->depth = visual_depth(DefaultScreenOfDisplay(st->dpy), st->xgwa.visual); # ifdef HAVE_XSHM_EXTENSION if (st->use_shm) { st->draw_image = create_xshm_image(st->dpy, st->xgwa.visual, st->depth, ZPixmap, 0, &st->shm_info, st->xgwa.width, 1); if (!st->draw_image) st->use_shm = False; } # endif /* HAVE_XSHM_EXTENSION */ if (!st->draw_image) { st->draw_image = XCreateImage (st->dpy, st->xgwa.visual, st->depth, ZPixmap, 0, /* depth, format, offset */ 0, st->xgwa.width, 1, 8, 0); /* data, w, h, pad, bpl */ st->draw_image->data = (char *) calloc(st->draw_image->height, st->draw_image->bytes_per_line); } } /* for (y = 0; y < st->xgwa.height; y++) */ for (ii = 0; ii < chunk_size; ii++) { int x; for (x = 0; x < st->xgwa.width; x++) { double xx = x + st->draw_xo; double yy = st->draw_y + st->draw_yo; double i = ((xx * xx) + (yy * yy)) / (double) st->draw_factor; if (mono_p) gcv.foreground = ((((long) i) & 1) ? st->fg_pixel : st->bg_pixel); else gcv.foreground = st->colors[((long) i) % st->ncolors].pixel; XPutPixel (st->draw_image, x, 0, gcv.foreground); } # ifdef HAVE_XSHM_EXTENSION if (st->use_shm) XShmPutImage(st->dpy, st->window, st->gc, st->draw_image, 0, 0, 0, st->draw_y, st->xgwa.width, 1, False); else # endif /* HAVE_XSHM_EXTENSION */ XPutImage (st->dpy, st->window, st->gc, st->draw_image, 0, 0, 0, st->draw_y, st->xgwa.width, 1); st->draw_y++; if (st->draw_y >= st->xgwa.height) break; } if (st->draw_y >= st->xgwa.height) { st->draw_y = 0; # ifdef HAVE_XSHM_EXTENSION if (!st->use_shm) # endif /* HAVE_XSHM_EXTENSION */ if (st->draw_image->data) { free(st->draw_image->data); st->draw_image->data = 0; } # ifdef HAVE_XSHM_EXTENSION if (st->use_shm) destroy_xshm_image (st->dpy, st->draw_image, &st->shm_info); else # endif /* HAVE_XSHM_EXTENSION */ XDestroyImage (st->draw_image); st->draw_image = 0; return st->delay * 1000000; } return st->delay * 10000; } static const char *moire_defaults [] = { ".background: blue", ".foreground: red", "*fpsSolid: true", "*random: true", "*delay: 5", "*ncolors: 64", "*offset: 50", #ifdef HAVE_XSHM_EXTENSION "*useSHM: True", #else "*useSHM: False", #endif #ifdef HAVE_MOBILE "*ignoreRotation: True", #endif 0 }; static XrmOptionDescRec moire_options [] = { { "-random", ".random", XrmoptionNoArg, "True" }, { "-no-random", ".random", XrmoptionNoArg, "False" }, { "-delay", ".delay", XrmoptionSepArg, 0 }, { "-ncolors", ".ncolors", XrmoptionSepArg, 0 }, { "-offset", ".offset", XrmoptionSepArg, 0 }, { "-shm", ".useSHM", XrmoptionNoArg, "True" }, { "-no-shm", ".useSHM", XrmoptionNoArg, "False" }, { 0, 0, 0, 0 } }; static void moire_reshape (Display *dpy, Window window, void *closure, unsigned int w, unsigned int h) { } static Bool moire_event (Display *dpy, Window window, void *closure, XEvent *event) { return False; } static void moire_free (Display *dpy, Window window, void *closure) { } XSCREENSAVER_MODULE ("Moire", moire) xscreensaver-5.36/hacks/noseguy.c000644 000767 000024 00000042521 12717750011 017071 0ustar00jwzstaff000000 000000 /* xscreensaver, Copyright (c) 1992-2014 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. */ /* Make a little guy with a big nose and a hat wanter around the screen, spewing out messages. Derived from xnlock by Dan Heller . */ #include "screenhack.h" #include "xpm-pixmap.h" #include "textclient.h" #include "xft.h" #ifdef HAVE_JWXYZ # define HAVE_XPM #endif #define font_height(font) (font->ascent + font->descent) struct state { Display *dpy; Window window; int Width, Height; GC fg_gc, bg_gc, text_fg_gc, text_bg_gc; int x, y; XftFont *xftfont; XftColor xftcolor; XftDraw *xftdraw; unsigned long interval; Pixmap left1, left2, right1, right2; Pixmap left_front, right_front, front, down; text_data *tc; int state; /* indicates states: walking or getting passwd */ int first_time; void (*next_fn) (struct state *); int move_length, move_dir; int walk_lastdir; int walk_up; Pixmap walk_frame; int X, Y, talking; struct { int x, y, width, height; } s_rect; char words[10240]; int lines; }; static void fill_words (struct state *); static void walk (struct state *, int dir); static void talk (struct state *, int erase); static void talk_1 (struct state *); static int think (struct state *); static unsigned long look (struct state *); #define IS_MOVING 1 #if defined(HAVE_GDK_PIXBUF) || defined(HAVE_XPM) # include "images/noseguy/nose-f1.xpm" # include "images/noseguy/nose-f2.xpm" # include "images/noseguy/nose-f3.xpm" # include "images/noseguy/nose-f4.xpm" # include "images/noseguy/nose-l1.xpm" # include "images/noseguy/nose-l2.xpm" # include "images/noseguy/nose-r1.xpm" # include "images/noseguy/nose-r2.xpm" #else # include "images/noseguy/nose-f1.xbm" # include "images/noseguy/nose-f2.xbm" # include "images/noseguy/nose-f3.xbm" # include "images/noseguy/nose-f4.xbm" # include "images/noseguy/nose-l1.xbm" # include "images/noseguy/nose-l2.xbm" # include "images/noseguy/nose-r1.xbm" # include "images/noseguy/nose-r2.xbm" #endif static void init_images (struct state *st) { Pixmap *images[8]; #if defined(HAVE_GDK_PIXBUF) || defined(HAVE_XPM) char **bits[8]; #else unsigned char *bits[8]; #endif int i = 0; images[i++] = &st->left1; images[i++] = &st->left2; images[i++] = &st->right1; images[i++] = &st->right2; images[i++] = &st->left_front; images[i++] = &st->right_front; images[i++] = &st->front; images[i] = &st->down; #if defined(HAVE_GDK_PIXBUF) || defined(HAVE_XPM) i = 0; bits[i++] = nose_l1_xpm; bits[i++] = nose_l2_xpm; bits[i++] = nose_r1_xpm; bits[i++] = nose_r2_xpm; bits[i++] = nose_f2_xpm; bits[i++] = nose_f3_xpm; bits[i++] = nose_f1_xpm; bits[i] = nose_f4_xpm; for (i = 0; i < sizeof (images) / sizeof(*images); i++) { Pixmap pixmap = xpm_data_to_pixmap (st->dpy, st->window, bits[i], 0, 0, 0); if (!pixmap) { fprintf (stderr, "%s: Can't load nose images\n", progname); exit (1); } *images[i] = pixmap; } #else i = 0; bits[i++] = nose_l1_bits; bits[i++] = nose_l2_bits; bits[i++] = nose_r1_bits; bits[i++] = nose_r2_bits; bits[i++] = nose_f2_bits; bits[i++] = nose_f3_bits; bits[i++] = nose_f1_bits; bits[i++] = nose_f4_bits; for (i = 0; i < sizeof (images) / sizeof(*images); i++) if (!(*images[i] = XCreatePixmapFromBitmapData(st->dpy, st->window, (char *) bits[i], 64, 64, 1, 0, 1))) { fprintf (stderr, "%s: Can't load nose images\n", progname); exit (1); } #endif } #define LEFT 001 #define RIGHT 002 #define DOWN 004 #define UP 010 #define FRONT 020 #define X_INCR 3 #define Y_INCR 2 static void move (struct state *st) { if (!st->move_length) { register int tries = 0; st->move_dir = 0; if ((random() & 1) && think(st)) { talk(st, 0); /* sets timeout to itself */ return; } if (!(random() % 3) && (st->interval = look(st))) { st->next_fn = move; return; } st->interval = 20 + random() % 100; do { if (!tries) st->move_length = st->Width / 100 + random() % 90, tries = 8; else tries--; /* There maybe the case that we won't be able to exit from this routine (especially when the geometry is too small)!! Ensure that we can exit from this routine. */ #if 1 if (!tries && (st->move_length <= 1)) { st->move_length = 1; break; } #endif switch (random() % 8) { case 0: if (st->x - X_INCR * st->move_length >= 5) st->move_dir = LEFT; break; case 1: if (st->x + X_INCR * st->move_length <= st->Width - 70) st->move_dir = RIGHT; break; case 2: if (st->y - (Y_INCR * st->move_length) >= 5) st->move_dir = UP, st->interval = 40; break; case 3: if (st->y + Y_INCR * st->move_length <= st->Height - 70) st->move_dir = DOWN, st->interval = 20; break; case 4: if (st->x - X_INCR * st->move_length >= 5 && st->y - (Y_INCR * st->move_length) >= 5) st->move_dir = (LEFT | UP); break; case 5: if (st->x + X_INCR * st->move_length <= st->Width - 70 && st->y - Y_INCR * st->move_length >= 5) st->move_dir = (RIGHT | UP); break; case 6: if (st->x - X_INCR * st->move_length >= 5 && st->y + Y_INCR * st->move_length <= st->Height - 70) st->move_dir = (LEFT | DOWN); break; case 7: if (st->x + X_INCR * st->move_length <= st->Width - 70 && st->y + Y_INCR * st->move_length <= st->Height - 70) st->move_dir = (RIGHT | DOWN); break; default: /* No Defaults */ break; } } while (!st->move_dir); } if (st->move_dir) walk(st, st->move_dir); --st->move_length; st->next_fn = move; } #ifdef HAVE_XPM # define COPY(dpy,frame,window,gc,x,y,w,h,x2,y2) \ XCopyArea (dpy,frame,window,gc,x,y,w,h,x2,y2) #else # define COPY(dpy,frame,window,gc,x,y,w,h,x2,y2) \ XCopyPlane(dpy,frame,window,gc,x,y,w,h,x2,y2,1L) #endif static void walk (struct state *st, int dir) { register int incr = 0; if (dir & (LEFT | RIGHT)) { /* left/right movement (mabye up/st->down too) */ st->walk_up = -st->walk_up; /* bouncing effect (even if hit a wall) */ if (dir & LEFT) { incr = X_INCR; st->walk_frame = (st->walk_up < 0) ? st->left1 : st->left2; } else { incr = -X_INCR; st->walk_frame = (st->walk_up < 0) ? st->right1 : st->right2; } if ((st->walk_lastdir == FRONT || st->walk_lastdir == DOWN) && dir & UP) { /* * workaround silly bug that leaves screen dust when guy is * facing forward or st->down and moves up-left/right. */ COPY(st->dpy, st->walk_frame, st->window, st->fg_gc, 0, 0, 64, 64, st->x, st->y); } /* note that maybe neither UP nor DOWN is set! */ if (dir & UP && st->y > Y_INCR) st->y -= Y_INCR; else if (dir & DOWN && st->y < st->Height - 64) st->y += Y_INCR; } /* Explicit up/st->down movement only (no left/right) */ else if (dir == UP) COPY(st->dpy, st->front, st->window, st->fg_gc, 0, 0, 64, 64, st->x, st->y -= Y_INCR); else if (dir == DOWN) COPY(st->dpy, st->down, st->window, st->fg_gc, 0, 0, 64, 64, st->x, st->y += Y_INCR); else if (dir == FRONT && st->walk_frame != st->front) { if (st->walk_up > 0) st->walk_up = -st->walk_up; if (st->walk_lastdir & LEFT) st->walk_frame = st->left_front; else if (st->walk_lastdir & RIGHT) st->walk_frame = st->right_front; else st->walk_frame = st->front; COPY(st->dpy, st->walk_frame, st->window, st->fg_gc, 0, 0, 64, 64, st->x, st->y); } if (dir & LEFT) while (--incr >= 0) { COPY(st->dpy, st->walk_frame, st->window, st->fg_gc, 0, 0, 64, 64, --st->x, st->y + st->walk_up); } else if (dir & RIGHT) while (++incr <= 0) { COPY(st->dpy, st->walk_frame, st->window, st->fg_gc, 0, 0, 64, 64, ++st->x, st->y + st->walk_up); } st->walk_lastdir = dir; } static int think (struct state *st) { if (random() & 1) walk(st, FRONT); if (random() & 1) return 1; return 0; } #define MAXLINES 10 #define LINELEN 256 static void talk (struct state *st, int force_erase) { int width = 0, height, Z, total = 0; register char *p, *p2; char args[MAXLINES][LINELEN]; /* clear what we've written */ if (st->talking || force_erase) { if (!st->talking) return; XFillRectangle(st->dpy, st->window, st->bg_gc, st->s_rect.x - 5, st->s_rect.y - 5, st->s_rect.width + 10, st->s_rect.height + 10); st->talking = 0; if (!force_erase) st->next_fn = move; st->interval = 0; { /* might as well check the st->window for size changes now... */ XWindowAttributes xgwa; XGetWindowAttributes (st->dpy, st->window, &xgwa); st->Width = xgwa.width + 2; st->Height = xgwa.height + 2; } return; } p = st->words; /* If there is actually no words, just return */ if (!*p) { st->talking = 0; return; } st->talking = 1; walk(st, FRONT); for (p2 = p; *p2; p2++) if (*p2 == '\t') *p2 = ' '; if (!(p2 = strchr(p, '\n')) || !p2[1]) { XGlyphInfo extents; total = strlen (st->words); strncpy (args[0], st->words, LINELEN); args[0][LINELEN - 1] = 0; XftTextExtentsUtf8 (st->dpy, st->xftfont, (FcChar8 *) st->words, total, &extents); width = extents.xOff; height = 0; } else /* p2 now points to the first '\n' */ for (height = 0; p; height++) { int w; XGlyphInfo extents; *p2 = 0; XftTextExtentsUtf8 (st->dpy, st->xftfont, (FcChar8 *) p, p2 - p, &extents); w = extents.xOff; if (w > width) width = w; total += p2 - p; /* total chars; count to determine reading * time */ (void) strncpy(args[height], p, LINELEN); args[height][LINELEN - 1] = 0; if (height == MAXLINES - 1) { /* puts("Message too long!"); */ break; } p = p2 + 1; if (!(p2 = strchr(p, '\n'))) break; } height++; /* * Figure out the height and width in pixels (height, width) extend the * new box by 15 pixels on the sides (30 total) top and bottom. */ st->s_rect.width = width + 30; st->s_rect.height = height * font_height(st->xftfont) + 30; if (st->x - st->s_rect.width - 10 < 5) st->s_rect.x = 5; else if ((st->s_rect.x = st->x + 32 - (st->s_rect.width + 15) / 2) + st->s_rect.width + 15 > st->Width - 5) st->s_rect.x = st->Width - 15 - st->s_rect.width; if (st->y - st->s_rect.height - 10 < 5) st->s_rect.y = st->y + 64 + 5; else st->s_rect.y = st->y - 5 - st->s_rect.height; XFillRectangle(st->dpy, st->window, st->text_bg_gc, st->s_rect.x, st->s_rect.y, st->s_rect.width, st->s_rect.height); /* make a box that's 5 pixels thick. Then add a thin box inside it */ XSetLineAttributes(st->dpy, st->text_fg_gc, 5, 0, 0, 0); XDrawRectangle(st->dpy, st->window, st->text_fg_gc, st->s_rect.x, st->s_rect.y, st->s_rect.width - 1, st->s_rect.height - 1); XSetLineAttributes(st->dpy, st->text_fg_gc, 0, 0, 0, 0); XDrawRectangle(st->dpy, st->window, st->text_fg_gc, st->s_rect.x + 7, st->s_rect.y + 7, st->s_rect.width - 15, st->s_rect.height - 15); st->X = 15; st->Y = 15 + font_height(st->xftfont); /* now print each string in reverse order (start at bottom of box) */ for (Z = 0; Z < height; Z++) { int L = strlen(args[Z]); /* If there are continuous new lines, L can be 0 */ if (L && (args[Z][L-1] == '\r' || args[Z][L-1] == '\n')) args[Z][--L] = 0; XftDrawStringUtf8 (st->xftdraw, &st->xftcolor, st->xftfont, st->s_rect.x + st->X, st->s_rect.y + st->Y, (FcChar8 *) args[Z], L); st->Y += font_height(st->xftfont); } st->interval = (total / 15) * 1000; if (st->interval < 2000) st->interval = 2000; st->next_fn = talk_1; *st->words = 0; st->lines = 0; } static void talk_1 (struct state *st) { talk(st, 0); } static unsigned long look (struct state *st) { if (random() % 3) { COPY(st->dpy, (random() & 1) ? st->down : st->front, st->window, st->fg_gc, 0, 0, 64, 64, st->x, st->y); return 1000L; } if (!(random() % 5)) return 0; if (random() % 3) { COPY(st->dpy, (random() & 1) ? st->left_front : st->right_front, st->window, st->fg_gc, 0, 0, 64, 64, st->x, st->y); return 1000L; } if (!(random() % 5)) return 0; COPY(st->dpy, (random() & 1) ? st->left1 : st->right1, st->window, st->fg_gc, 0, 0, 64, 64, st->x, st->y); return 1000L; } static void fill_words (struct state *st) { char *p = st->words + strlen(st->words); char *c; int lines = 0; int max = MAXLINES; for (c = st->words; c < p; c++) if (*c == '\n') lines++; while (p < st->words + sizeof(st->words) - 1 && lines < max) { int c = textclient_getc (st->tc); if (c == '\n') lines++; if (c > 0) *p++ = (char) c; else break; } *p = 0; st->lines = lines; } static const char *noseguy_defaults [] = { ".background: black", ".foreground: #CCCCCC", "*textForeground: black", "*textBackground: #CCCCCC", "*fpsSolid: true", "*program: xscreensaver-text", "*usePty: False", ".font: -*-helvetica-medium-r-*-*-*-140-*-*-*-*-*-*", 0 }; static XrmOptionDescRec noseguy_options [] = { { "-program", ".program", XrmoptionSepArg, 0 }, { "-font", ".font", XrmoptionSepArg, 0 }, { "-text-foreground", ".textForeground", XrmoptionSepArg, 0 }, { "-text-background", ".textBackground", XrmoptionSepArg, 0 }, { 0, 0, 0, 0 } }; static void * noseguy_init (Display *d, Window w) { struct state *st = (struct state *) calloc (1, sizeof(*st)); unsigned long fg, bg, text_fg, text_bg; XWindowAttributes xgwa; Colormap cmap; char *fontname; XGCValues gcvalues; st->dpy = d; st->window = w; st->first_time = 1; fontname = get_string_resource (st->dpy, "font", "Font"); XGetWindowAttributes (st->dpy, st->window, &xgwa); st->Width = xgwa.width + 2; st->Height = xgwa.height + 2; cmap = xgwa.colormap; st->tc = textclient_open (st->dpy); { int w = 40; int h = 15; textclient_reshape (st->tc, w, h, w, h, /* Passing MAXLINES isn't actually necessary */ 0); } init_images(st); st->xftfont = XftFontOpenXlfd (st->dpy, screen_number (xgwa.screen), fontname); XftColorAllocName (st->dpy, xgwa.visual, xgwa.colormap, get_string_resource (st->dpy, "textForeground", "Foreground"), &st->xftcolor); st->xftdraw = XftDrawCreate (st->dpy, st->window, xgwa.visual, xgwa.colormap); fg = get_pixel_resource (st->dpy, cmap, "foreground", "Foreground"); bg = get_pixel_resource (st->dpy, cmap, "background", "Background"); text_fg = get_pixel_resource (st->dpy, cmap, "textForeground", "Foreground"); text_bg = get_pixel_resource (st->dpy, cmap, "textBackground", "Background"); /* notice when unspecified */ if (! get_string_resource (st->dpy, "textForeground", "Foreground")) text_fg = bg; if (! get_string_resource (st->dpy, "textBackground", "Background")) text_bg = fg; gcvalues.foreground = fg; gcvalues.background = bg; st->fg_gc = XCreateGC (st->dpy, st->window, GCForeground|GCBackground, &gcvalues); gcvalues.foreground = bg; gcvalues.background = fg; st->bg_gc = XCreateGC (st->dpy, st->window, GCForeground|GCBackground, &gcvalues); gcvalues.foreground = text_fg; gcvalues.background = text_bg; st->text_fg_gc = XCreateGC (st->dpy, st->window, GCForeground|GCBackground, &gcvalues); gcvalues.foreground = text_bg; gcvalues.background = text_fg; st->text_bg_gc = XCreateGC (st->dpy, st->window, GCForeground|GCBackground, &gcvalues); st->x = st->Width / 2; st->y = st->Height / 2; st->state = IS_MOVING; st->next_fn = move; st->walk_up = 1; return st; } static unsigned long noseguy_draw (Display *dpy, Window window, void *closure) { struct state *st = (struct state *) closure; fill_words(st); st->next_fn(st); return (st->interval * 1000); } 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 noseguy_event (Display *dpy, Window window, void *closure, XEvent *event) { return False; } static void noseguy_free (Display *dpy, Window window, void *closure) { struct state *st = (struct state *) closure; textclient_close (st->tc); free (st); } XSCREENSAVER_MODULE ("NoseGuy", noseguy) xscreensaver-5.36/hacks/pedal.c000644 000767 000024 00000021310 12710314502 016450 0ustar00jwzstaff000000 000000 /* * pedal * * Based on a program for some old PDP-11 Graphics Display Processors * at CMU. * * X version by * * Dale Moore * 24-Jun-1994 * * Copyright (c) 1994, by Carnegie Mellon University. Permission to use, * copy, modify, distribute, and sell this software and its documentation * for any purpose is hereby granted without fee, provided fnord 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 fnord this software * for any purpose. It is provided "as is" without express or implied * warranty. */ #include #include #include "screenhack.h" #include "erase.h" /* If MAXLINES is too big, we might not be able to get it * to the X server in the 2byte length field. Must be less * than 16k */ #define MAXLINES (16 * 1024) #define MAXPOINTS MAXLINES /* * If the pedal has only this many lines, it must be ugly and we dont * want to see it. */ #define MINLINES 7 struct state { Display *dpy; Window window; XPoint *points; int sizex, sizey; int delay; int maxlines; GC gc; XColor foreground, background; Colormap cmap; eraser_state *eraser; int erase_p; }; /* * Routine (Macro actually) * mysin * Description: * Assume that degrees is .. oh 360... meaning that * there are 360 degress in a circle. Then this function * would return the sin of the angle in degrees. But lets * say that they are really big degrees, with 4 big degrees * the same as one regular degree. Then this routine * would be called mysin(t, 90) and would return sin(t degrees * 4) */ #define mysin(t, degrees) sin(t * 2 * M_PI / (degrees)) #define mycos(t, degrees) cos(t * 2 * M_PI / (degrees)) /* * Macro: * rand_range * Description: * Return a random number between a inclusive and b exclusive. * rand (3, 6) returns 3 or 4 or 5, but not 6. */ #define rand_range(a, b) (a + random() % (b - a)) static int gcd(int m, int n) /* Greatest Common Divisor (also Greates common factor). */ { int r; for (;;) { r = m % n; if (r == 0) return (n); m = n; n = r; } } static int numlines (int a, int b, int d) /* * Description: * * Given parameters a and b, how many lines will we have to draw? * * Algorithm: * * This algorithm assumes that r = sin (theta * a), where we * evaluate theta on multiples of b. * * LCM (i, j) = i * j / GCD (i, j); * * So, at LCM (b, 360) we start over again. But since we * got to LCM (b, 360) by steps of b, the number of lines is * LCM (b, 360) / b. * * If a is odd, then at 180 we cross over and start the * negative. Someone should write up an elegant way of proving * this. Why? Because I'm not convinced of it myself. * */ { #define odd(x) (x & 1) #define even(x) (!odd(x)) if ( odd(a) && odd(b) && even(d)) d /= 2; return (d / gcd (d, b)); #undef odd } static int compute_pedal(struct state *st, XPoint *points, int maxpoints) /* * Description: * * Basically, it's combination spirograph and string art. * Instead of doing lines, we just use a complex polygon, * and use an even/odd rule for filling in between. * * The spirograph, in mathematical terms is a polar * plot of the form r = sin (theta * c); * The string art of this is that we evaluate that * function only on certain multiples of theta. That is * we let theta advance in some random increment. And then * we draw a straight line between those two adjacent points. * * Eventually, the lines will start repeating themselves * if we've evaluated theta on some rational portion of the * whole. * * The number of lines generated is limited to the * ratio of the increment we put on theta to the whole. * If we say that there are 360 degrees in a circle, then we * will never have more than 360 lines. * * Return: * * The number of points. * */ { int a, b, d; /* These describe a unique pedal */ double r; int theta = 0; XPoint *pp = st->points; int count; int numpoints; /* Just to make sure that this division is not done inside the loop */ int h_width = st->sizex / 2, h_height = st->sizey / 2 ; for (;;) { d = rand_range (MINLINES, st->maxlines); a = rand_range (1, d); b = rand_range (1, d); numpoints = numlines(a, b, d); if (numpoints > MINLINES) break; } /* it might be nice to try to move as much sin and cos computing * (or at least the argument computing) out of the loop. */ for (count = numpoints; count-- ; ) { r = mysin (theta * a, d); /* Convert from polar to cartesian coordinates */ /* We could round the results, but coercing seems just fine */ pp->x = mysin (theta, d) * r * h_width + h_width; pp->y = mycos (theta, d) * r * h_height + h_height; /* Advance index into array */ pp++; /* Advance theta */ theta += b; theta %= d; } return(numpoints); } static void * pedal_init (Display *dpy, Window window) { struct state *st = (struct state *) calloc (1, sizeof(*st)); XGCValues gcv; XWindowAttributes xgwa; st->dpy = dpy; st->window = window; st->delay = get_integer_resource (st->dpy, "delay", "Integer"); if (st->delay < 0) st->delay = 0; st->maxlines = get_integer_resource (st->dpy, "maxlines", "Integer"); if (st->maxlines < MINLINES) st->maxlines = MINLINES; else if (st->maxlines > MAXLINES) st->maxlines = MAXLINES; st->points = (XPoint *)malloc(sizeof(XPoint) * st->maxlines); XGetWindowAttributes (st->dpy, st->window, &xgwa); st->sizex = xgwa.width; st->sizey = xgwa.height; st->cmap = xgwa.colormap; gcv.function = GXcopy; gcv.foreground = get_pixel_resource (st->dpy, st->cmap, "foreground", "Foreground"); gcv.background = get_pixel_resource (st->dpy, st->cmap, "background", "Background"); st->gc = XCreateGC (st->dpy, st->window, GCForeground | GCBackground |GCFunction, &gcv); return st; } /* * Since the XFillPolygon doesn't require that the last * point == first point, the number of points is the same * as the number of lines. We just let XFillPolygon supply * the line from the last point to the first point. * */ static unsigned long pedal_draw (Display *dpy, Window window, void *closure) { struct state *st = (struct state *) closure; int numpoints; int erase_delay = 10000; int long_delay = 1000000 * st->delay; if (st->erase_p || st->eraser) { st->eraser = erase_window (dpy, window, st->eraser); st->erase_p = 0; return (st->eraser ? erase_delay : 1000000); } numpoints = compute_pedal(st, st->points, st->maxlines); /* Pick a new foreground color (added by jwz) */ if (! mono_p) { XColor color; hsv_to_rgb (random()%360, 1.0, 1.0, &color.red, &color.green, &color.blue); if (XAllocColor (st->dpy, st->cmap, &color)) { XSetForeground (st->dpy, st->gc, color.pixel); XFreeColors (st->dpy, st->cmap, &st->foreground.pixel, 1, 0); st->foreground.red = color.red; st->foreground.green = color.green; st->foreground.blue = color.blue; st->foreground.pixel = color.pixel; } } XFillPolygon (st->dpy, st->window, st->gc, st->points, numpoints, Complex, CoordModeOrigin); st->erase_p = 1; return long_delay; } static void pedal_reshape (Display *dpy, Window window, void *closure, unsigned int w, unsigned int h) { struct state *st = (struct state *) closure; st->sizex = w; st->sizey = h; } static Bool pedal_event (Display *dpy, Window window, void *closure, XEvent *event) { struct state *st = (struct state *) closure; if (screenhack_event_helper (dpy, window, event)) { st->erase_p = 1; return True; } return False; } static void pedal_free (Display *dpy, Window window, void *closure) { struct state *st = (struct state *) closure; free (st); } /* * If we are trying to save the screen, the background * should be dark. */ static const char *pedal_defaults [] = { ".background: black", ".foreground: white", "*fpsSolid: true", "*delay: 5", "*maxlines: 1000", #ifdef HAVE_MOBILE "*ignoreRotation: True", #endif 0 }; static XrmOptionDescRec pedal_options [] = { { "-delay", ".delay", XrmoptionSepArg, 0 }, { "-maxlines", ".maxlines", XrmoptionSepArg, 0 }, { "-foreground", ".foreground", XrmoptionSepArg, 0 }, { "-background", ".background", XrmoptionSepArg, 0 }, { 0, 0, 0, 0 } }; XSCREENSAVER_MODULE ("Pedal", pedal) xscreensaver-5.36/hacks/penrose.c000644 000767 000024 00000116264 12717403424 017064 0ustar00jwzstaff000000 000000 /* -*- Mode: C; tab-width: 4 -*- */ /* penrose --- quasiperiodic tilings */ /* As reported in News of the Weird: In April, Sir Roger Penrose, a British math professor who has worked with Stephen Hawking on such topics as relativity, black holes, and whether time has a beginning, filed a copyright-infringement lawsuit against the Kimberly-Clark Corporation, which Penrose said copied a pattern he created (a pattern demonstrating that "a nonrepeating pattern could exist in nature") for its Kleenex quilted toilet paper. Penrose said he doesn't like litigation but, "When it comes to the population of Great Britain being invited by a multinational to wipe their bottoms on what appears to be the work of a Knight of the Realm, then a last stand must be taken." NOTW #491, 4-jul-1997, by Chuck Shepherd. http://www.nine.org/notw/notw.html */ #if 0 static const char sccsid[] = "@(#)penrose.c 5.00 2000/11/01 xlockmore"; #endif /*- * Copyright (c) 1996 by Timo Korvola * * Permission to use, copy, modify, and distribute this software and its * documentation for any purpose and without fee is hereby granted, * provided that the above copyright notice appear in all copies and that * both that copyright notice and this permission notice appear in * supporting documentation. * * This file is provided AS IS with no warranties of any kind. The author * shall have no liability with respect to the infringement of copyrights, * trade secrets or any patents by this file or any part thereof. In no * event will the author be liable for any lost revenue or profits or * other special, indirect and consequential damages. * * Revision History: * 01-Nov-2000: Allocation checks * 10-May-1997: Jamie Zawinski compatible with xscreensaver * 09-Sep-1996: Written. */ /*- Be careful, this probably still has a few bugs (many of which may only appear with a very low probability). These are seen with -verbose . If one of these are hit penrose will reinitialize. */ /*- * See Onoda, Steinhardt, DiVincenzo and Socolar in * Phys. Rev. Lett. 60, #25, 1988 or * Strandburg in Computers in Physics, Sep/Oct 1991. * * This implementation uses the simpler version of the growth * algorithm, i.e., if there are no forced vertices, a randomly chosen * tile is added to a randomly chosen vertex (no preference for those * 108 degree angles). * * There are two essential differences to the algorithm presented in * the literature: First, we do not allow the tiling to enclose an * untiled area. Whenever this is in danger of happening, we just * do not add the tile, hoping for a better random choice the next * time. Second, when choosing a vertex randomly, we will take * one that lies within the viewport if available. If this seems to * cause enclosures in the forced rule case, we will allow invisible * vertices to be chosen. * * Tiling is restarted whenever one of the following happens: there * are no incomplete vertices within the viewport or the tiling has * extended a window's length beyond the edge of the window * horizontally or vertically or forced rule choice has failed 100 * times due to areas about to become enclosed. * * Introductory info: * Science News March 23 1985 Vol 127, No. 12 * Science News July 16 1988 Vol 134, No. 3 * The Economist Sept 17 1988 pg. 100 * */ #ifdef STANDALONE #define MODE_penrose #define DEFAULTS "*delay: 10000 \n" \ "*size: 40 \n" \ "*ncolors: 64 \n" \ "*fpsSolid: true \n" \ "*ignoreRotation: True \n" \ # define refresh_penrose 0 # include "xlockmore.h" /* from the xscreensaver distribution */ #else /* !STANDALONE */ # include "xlock.h" /* from the xlockmore distribution */ #endif /* !STANDALONE */ #ifdef MODE_penrose #define DEF_AMMANN "False" static Bool ammann; static XrmOptionDescRec opts[] = { {"-ammann", ".penrose.ammann", XrmoptionNoArg, "on"}, {"+ammann", ".penrose.ammann", XrmoptionNoArg, "off"} }; static argtype vars[] = { {&ammann, "ammann", "Ammann", DEF_AMMANN, t_Bool} }; static OptionStruct desc[] = { {"-/+ammann", "turn on/off Ammann lines"} }; ENTRYPOINT ModeSpecOpt penrose_opts = {sizeof opts / sizeof opts[0], opts, sizeof vars / sizeof vars[0], vars, desc}; #ifdef USE_MODULES ModStruct penrose_description = {"penrose", "init_penrose", "draw_penrose", "release_penrose", "init_penrose", "init_penrose", (char *) NULL, &penrose_opts, 10000, 1, 1, -40, 64, 1.0, "", "Shows Penrose's quasiperiodic tilings", 0, NULL}; #endif /*- * Annoyingly the ANSI C library people have reserved all identifiers * ending with _t for future use. Hence we use _c as a suffix for * typedefs (c for class, although this is not C++). */ #define MINSIZE 5 /*- * In theory one could fit 10 tiles to a single vertex. However, the * vertex rules only allow at most seven tiles to meet at a vertex. */ #define CELEBRATE 31415 /* This causes a pause, an error occurred. */ #define COMPLETION 3141 /* This causes a pause, tiles filled up screen. */ #define MAX_TILES_PER_VERTEX 7 #define N_VERTEX_RULES 8 #define ALLOC_NODE(type) (type *)malloc(sizeof (type)) /*- * These are used to specify directions. They can also be used in bit * masks to specify a combination of directions. */ #define S_LEFT 1 #define S_RIGHT 2 /*- * We do not actually maintain objects corresponding to the tiles since * we do not really need them and they would only consume memory and * cause additional bookkeeping. Instead we only have vertices, and * each vertex lists the type of each adjacent tile as well as the * position of the vertex on the tile (hereafter refered to as * "corner"). These positions are numbered in counterclockwise order * so that 0 is where two double arrows meet (see one of the * articles). The tile type and vertex number are stored in a single * integer (we use char, and even most of it remains unused). * * The primary use of tile objects would be draw traversal, but we do * not currently do redraws at all (we just start over). */ #define VT_CORNER_MASK 0x3 #define VT_TYPE_MASK 0x4 #define VT_THIN 0 #define VT_THICK 0x4 #define VT_BITS 3 #define VT_TOTAL_MASK 0x7 typedef unsigned char vertex_type_c; /*- * These allow one to compute the types of the other corners of the tile. If * you are standing at a vertex of type vt looking towards the middle of the * tile, VT_LEFT( vt) is the vertex on your left etc. */ #define VT_LEFT( vt) ((((vt) - 1) & VT_CORNER_MASK) | (((vt) & VT_TYPE_MASK))) #define VT_RIGHT( vt) ((((vt) + 1) & VT_CORNER_MASK) | (((vt) & VT_TYPE_MASK))) #define VT_FAR( vt) ((vt) ^ 2) /*- * Since we do not do redraws, we only store the vertices we need. These are * the ones with still some empty space around them for the growth algorithm * to fill. * * Here we use a doubly chained ring-like structure as vertices often need * to be removed or inserted (they are kept in geometrical order * circling the tiled area counterclockwise). The ring is refered to by * a pointer to one more or less random node. When deleting nodes one * must make sure that this pointer continues to refer to a valid * node. A vertex count is maintained to make it easier to pick * vertices randomly. */ typedef struct forced_node forced_node_c; typedef struct fringe_node { struct fringe_node *prev; struct fringe_node *next; /* These are numbered counterclockwise. The gap, if any, lies between the last and first tiles. */ vertex_type_c tiles[MAX_TILES_PER_VERTEX]; int n_tiles; /* A bit mask used to indicate vertex rules that are still applicable for completing this vertex. Initialize this to (1 << N_VERTEX_RULES) - 1, i.e., all ones, and the rule matching functions will automatically mask out rules that no longer match. */ unsigned char rule_mask; /* If the vertex is on the forced vertex list, this points to the pointer to the appropriate node in the list. To remove the vertex from the list just set *list_ptr to the next node, deallocate and decrement node count. */ struct forced_node **list_ptr; /* Screen coordinates. */ XPoint loc; /* We also keep track of 5D coordinates to avoid rounding errors. These are in units of edge length. */ int fived[5]; /* This is used to quickly check if a vertex is visible. */ unsigned char off_screen; } fringe_node_c; typedef struct { fringe_node_c *nodes; /* This does not count off-screen nodes. */ int n_nodes; } fringe_c; /*- * The forced vertex pool contains vertices where at least one * side of the tiled region can only be extended in one way. Note * that this does not necessarily mean that there would only be one * applicable rule. forced_sides are specified using S_LEFT and * S_RIGHT as if looking at the untiled region from the vertex. */ struct forced_node { fringe_node_c *vertex; unsigned forced_sides; struct forced_node *next; }; typedef struct { forced_node_c *first; int n_nodes, n_visible; } forced_pool_c; /* The tiles are listed in counterclockwise order. */ typedef struct { vertex_type_c tiles[MAX_TILES_PER_VERTEX]; int n_tiles; } vertex_rule_c; static vertex_rule_c vertex_rules[N_VERTEX_RULES] = { { {VT_THICK | 2, VT_THICK | 2, VT_THICK | 2, VT_THICK | 2, VT_THICK | 2}, 5}, { {VT_THICK | 0, VT_THICK | 0, VT_THICK | 0, VT_THICK | 0, VT_THICK | 0}, 5}, { {VT_THICK | 0, VT_THICK | 0, VT_THICK | 0, VT_THIN | 0}, 4}, { {VT_THICK | 2, VT_THICK | 2, VT_THIN | 1, VT_THIN | 3, VT_THICK | 2, VT_THIN | 1, VT_THIN | 3}, 7}, { {VT_THICK | 2, VT_THICK | 2, VT_THICK | 2, VT_THICK | 2, VT_THIN | 1, VT_THIN | 3}, 6}, { {VT_THICK | 1, VT_THICK | 3, VT_THIN | 2}, 3}, { {VT_THICK | 0, VT_THIN | 0, VT_THIN | 0}, 3}, { {VT_THICK | 2, VT_THIN | 1, VT_THICK | 3, VT_THICK | 1, VT_THIN | 3}, 5} }; /* Match information returned by match_rules. */ typedef struct { int rule; int pos; } rule_match_c; /* Occasionally floating point coordinates are needed. */ typedef struct { float x, y; } fcoord_c; /* All angles are measured in multiples of 36 degrees. */ typedef int angle_c; static angle_c vtype_angles[] = {4, 1, 4, 1, 2, 3, 2, 3}; #define vtype_angle( v) (vtype_angles[ v]) /* This is the data related to the tiling of one screen. */ typedef struct { int width, height; XPoint origin; int edge_length; fringe_c fringe; forced_pool_c forced; int done, failures; unsigned long thick_color, thin_color; int busyLoop; Bool ammann; float ammann_r; fcoord_c fived_table[5]; } tiling_c; static tiling_c *tilings = (tiling_c *) NULL; /* Direction angle of an edge. */ static angle_c vertex_dir(ModeInfo * mi, fringe_node_c * vertex, unsigned side) { tiling_c *tp = &tilings[MI_SCREEN(mi)]; fringe_node_c *v2 = (side == S_LEFT ? vertex->next : vertex->prev); register int i; for (i = 0; i < 5; i++) switch (v2->fived[i] - vertex->fived[i]) { case 1: return 2 * i; case -1: return (2 * i + 5) % 10; } tp->done = True; if (MI_IS_VERBOSE(mi)) { (void) fprintf(stderr, "Weirdness in vertex_dir (this has been reported)\n"); for (i = 0; i < 5; i++) (void) fprintf(stderr, "v2->fived[%d]=%d, vertex->fived[%d]=%d\n", i, v2->fived[i], i, vertex->fived[i]); } tp->busyLoop = CELEBRATE; return 0; } /* Move one step to a given direction. */ static void add_unit_vec(angle_c dir, int *fived) { static const int dir2i[] = {0, 3, 1, 4, 2}; while (dir < 0) dir += 10; fived[dir2i[dir % 5]] += (dir % 2 ? -1 : 1); } /* For comparing coordinates. */ #define fived_equal( f1, f2) (!memcmp( (f1), (f2), 5 * sizeof( int))) /*- * This computes screen coordinates from 5D representation. Note that X * uses left-handed coordinates (y increases downwards). */ static void fived_to_loc(int fived[], tiling_c * tp, XPoint *pt) { float fifth = 8 * atan(1.) / 5; register int i; register float r; register fcoord_c offset; *pt = tp->origin; offset.x = 0.0; offset.y = 0.0; if (tp->fived_table[0].x == .0) for (i = 0; i < 5; i++) { tp->fived_table[i].x = cos(fifth * i); tp->fived_table[i].y = sin(fifth * i); } for (i = 0; i < 5; i++) { r = fived[i] * tp->edge_length; offset.x += r * tp->fived_table[i].x; offset.y -= r * tp->fived_table[i].y; } (*pt).x += (int) (offset.x + .5); (*pt).y += (int) (offset.y + .5); } /* Mop up dynamic data for one screen. */ static void free_penrose(tiling_c * tp) { register fringe_node_c *fp1, *fp2; register forced_node_c *lp1, *lp2; if (tp->fringe.nodes == NULL) return; fp1 = tp->fringe.nodes; do { fp2 = fp1; fp1 = fp1->next; (void) free((void *) fp2); } while (fp1 != tp->fringe.nodes); tp->fringe.nodes = (fringe_node_c *) NULL; for (lp1 = tp->forced.first; lp1 != 0;) { lp2 = lp1; lp1 = lp1->next; (void) free((void *) lp2); } tp->forced.first = 0; } /* Called to init the mode. */ ENTRYPOINT void init_penrose(ModeInfo * mi) { tiling_c *tp; fringe_node_c *fp; int i, size; if (tilings == NULL) { if ((tilings = (tiling_c *) calloc(MI_NUM_SCREENS(mi), sizeof (tiling_c))) == NULL) return; } tp = &tilings[MI_SCREEN(mi)]; #if 0 /* if you do this, then the -ammann and -no-ammann options don't work. -- jwz */ if (MI_IS_FULLRANDOM(mi)) tp->ammann = (Bool) (LRAND() & 1); else #endif /* 0 */ tp->ammann = ammann; tp->done = False; tp->busyLoop = 0; tp->failures = 0; tp->width = MI_WIDTH(mi); tp->height = MI_HEIGHT(mi); if (MI_NPIXELS(mi) > 2) { tp->thick_color = NRAND(MI_NPIXELS(mi)); /* Insure good contrast */ tp->thin_color = (NRAND(2 * MI_NPIXELS(mi) / 3) + tp->thick_color + MI_NPIXELS(mi) / 6) % MI_NPIXELS(mi); } size = MI_SIZE(mi); if (size < -MINSIZE) tp->edge_length = NRAND(MIN(-size, MAX(MINSIZE, MIN(tp->width, tp->height) / 2)) - MINSIZE + 1) + MINSIZE; else if (size < MINSIZE) { if (!size) tp->edge_length = MAX(MINSIZE, MIN(tp->width, tp->height) / 2); else tp->edge_length = MINSIZE; } else tp->edge_length = MIN(size, MAX(MINSIZE, MIN(tp->width, tp->height) / 2)); tp->origin.x = (tp->width / 2 + NRAND(tp->width)) / 2; tp->origin.y = (tp->height / 2 + NRAND(tp->height)) / 2; tp->fringe.n_nodes = 2; if (tp->fringe.nodes != NULL) free_penrose(tp); if (tp->fringe.nodes != NULL || tp->forced.first != 0) { if (MI_IS_VERBOSE(mi)) { (void) fprintf(stderr, "Weirdness in init_penrose()\n"); (void) fprintf(stderr, "tp->fringe.nodes = NULL && tp->forced.first = 0\n"); } free_penrose(tp); /* Try again */ tp->done = True; } tp->forced.n_nodes = tp->forced.n_visible = 0; if ((fp = tp->fringe.nodes = ALLOC_NODE(fringe_node_c)) == NULL) { free_penrose(tp); return; } if (fp == 0) { if (MI_IS_VERBOSE(mi)) { (void) fprintf(stderr, "Weirdness in init_penrose()\n"); (void) fprintf(stderr, "fp = 0\n"); } if ((fp = tp->fringe.nodes = ALLOC_NODE(fringe_node_c)) == NULL) { free_penrose(tp); return; } tp->done = True; } /* First vertex. */ fp->rule_mask = (1 << N_VERTEX_RULES) - 1; fp->list_ptr = 0; if ((fp->prev = fp->next = ALLOC_NODE(fringe_node_c)) == NULL) { free_penrose(tp); return; } if (fp->next == 0) { if (MI_IS_VERBOSE(mi)) { (void) fprintf(stderr, "Weirdness in init_penrose()\n"); (void) fprintf(stderr, "fp->next = 0\n"); } if ((fp->prev = fp->next = ALLOC_NODE(fringe_node_c)) == NULL) { free_penrose(tp); return; } tp->done = True; } fp->n_tiles = 0; fp->loc = tp->origin; fp->off_screen = False; for (i = 0; i < 5; i++) fp->fived[i] = 0; /* Second vertex. */ *(fp->next) = *fp; fp->next->prev = fp->next->next = fp; fp = fp->next; i = NRAND(5); fp->fived[i] = 2 * NRAND(2) - 1; fived_to_loc(fp->fived, tp, &(fp->loc)); /* That's it! We have created our first edge. */ } /*- * This attempts to match the configuration of vertex with the vertex * rules. The return value is a total match count. If matches is * non-null, it will be used to store information about the matches * and must be large enough to contain it. To play it absolutely * safe, allocate room for MAX_TILES_PER_VERTEX * N_VERTEX_RULES * entries when searching all matches. The rule mask of vertex will * be applied and rules masked out will not be searched. Only strict * subsequences match. If first_only is true, the search stops when * the first match is found. Otherwise all matches will be found and * the rule_mask of vertex will be updated, which also happens in * single-match mode if no match is found. */ static int match_rules(fringe_node_c * vertex, rule_match_c * matches, int first_only) { /* I will assume that I can fit all the relevant bits in vertex->tiles into one unsigned long. With 3 bits per element and at most 7 elements this means 21 bits, which should leave plenty of room. After packing the bits the rest is just integer comparisons and some bit shuffling. This is essentially Rabin-Karp without congruence arithmetic. */ register int i, j; int hits = 0, good_rules[N_VERTEX_RULES], n_good = 0; unsigned long vertex_hash = 0, lower_bits_mask = ~(VT_TOTAL_MASK << VT_BITS * (vertex->n_tiles - 1)); unsigned new_rule_mask = 0; for (i = 0; i < N_VERTEX_RULES; i++) if (vertex->n_tiles >= vertex_rules[i].n_tiles) vertex->rule_mask &= ~(1 << i); else if (vertex->rule_mask & 1 << i) good_rules[n_good++] = i; for (i = 0; i < vertex->n_tiles; i++) vertex_hash |= (unsigned long) vertex->tiles[i] << (VT_BITS * i); for (j = 0; j < n_good; j++) { unsigned long rule_hash = 0; vertex_rule_c *vr = vertex_rules + good_rules[j]; for (i = 0; i < vertex->n_tiles; i++) rule_hash |= (unsigned long) vr->tiles[i] << (VT_BITS * i); if (rule_hash == vertex_hash) { if (matches != 0) { matches[hits].rule = good_rules[j]; matches[hits].pos = 0; } hits++; if (first_only) return hits; else new_rule_mask |= 1 << good_rules[j]; } for (i = vr->n_tiles - 1; i > 0; i--) { rule_hash = vr->tiles[i] | (rule_hash & lower_bits_mask) << VT_BITS; if (vertex_hash == rule_hash) { if (matches != 0) { matches[hits].rule = good_rules[j]; matches[hits].pos = i; } hits++; if (first_only) return hits; else new_rule_mask |= 1 << good_rules[j]; } } } vertex->rule_mask = new_rule_mask; return hits; } /*- * find_completions finds the possible ways to add a tile to a vertex. * The return values is the number of such possibilities. You must * first call match_rules to produce matches and n_matches. sides * specifies which side of the vertex to extend and can be S_LEFT or * S_RIGHT. If results is non-null, it should point to an array large * enough to contain the results, which will be stored there. * MAX_COMPL elements will always suffice. If first_only is true we * stop as soon as we find one possibility (NOT USED). */ #define MAX_COMPL 2 static int find_completions(fringe_node_c * vertex, rule_match_c * matches, int n_matches, unsigned side, vertex_type_c * results /*, int first_only */ ) { int n_res = 0, cont; register int i, j; vertex_type_c buf[MAX_COMPL]; if (results == 0) results = buf; if (n_matches <= 0) return 0; for (i = 0; i < n_matches; i++) { vertex_rule_c *rule = vertex_rules + matches[i].rule; int pos = (matches[i].pos + (side == S_RIGHT ? vertex->n_tiles : rule->n_tiles - 1)) % rule->n_tiles; vertex_type_c vtype = rule->tiles[pos]; cont = 1; for (j = 0; j < n_res; j++) if (vtype == results[j]) { cont = 0; break; } if (cont) results[n_res++] = vtype; } return n_res; } /*- * Draw a tile on the display. Vertices must be given in a * counterclockwise order. vtype is the vertex type of v1 (and thus * also gives the tile type). */ static void draw_tile(fringe_node_c * v1, fringe_node_c * v2, fringe_node_c * v3, fringe_node_c * v4, vertex_type_c vtype, ModeInfo * mi) { Display *display = MI_DISPLAY(mi); Window window = MI_WINDOW(mi); GC gc = MI_GC(mi); tiling_c *tp = &tilings[MI_SCREEN(mi)]; XPoint pts[5]; vertex_type_c corner = vtype & VT_CORNER_MASK; if (v1->off_screen && v2->off_screen && v3->off_screen && v4->off_screen) return; pts[corner] = v1->loc; pts[VT_RIGHT(corner)] = v2->loc; pts[VT_FAR(corner)] = v3->loc; pts[VT_LEFT(corner)] = v4->loc; pts[4] = pts[0]; if (MI_NPIXELS(mi) > 2) { if ((vtype & VT_TYPE_MASK) == VT_THICK) XSetForeground(display, gc, MI_PIXEL(mi, tp->thick_color)); else XSetForeground(display, gc, MI_PIXEL(mi, tp->thin_color)); } else XSetForeground(display, gc, MI_WHITE_PIXEL(mi)); XFillPolygon(display, window, gc, pts, 4, Convex, CoordModeOrigin); XSetForeground(display, gc, MI_BLACK_PIXEL(mi)); XDrawLines(display, window, gc, pts, 5, CoordModeOrigin); if (tp->ammann) { /* Draw some Ammann lines for debugging purposes. This will probably fail miserably on a b&w display. */ if ((vtype & VT_TYPE_MASK) == VT_THICK) { if (tp->ammann_r == .0) { float pi10 = 2 * atan(1.) / 5; tp->ammann_r = 1 - sin(pi10) / (2 * sin(3 * pi10)); } if (MI_NPIXELS(mi) > 2) XSetForeground(display, gc, MI_PIXEL(mi, tp->thin_color)); else { XSetForeground(display, gc, MI_BLACK_PIXEL(mi)); XSetLineAttributes(display, gc, 1, LineOnOffDash, CapNotLast, JoinMiter); } XDrawLine(display, window, gc, (int) (tp->ammann_r * pts[3].x + (1 - tp->ammann_r) * pts[0].x + .5), (int) (tp->ammann_r * pts[3].y + (1 - tp->ammann_r) * pts[0].y + .5), (int) (tp->ammann_r * pts[1].x + (1 - tp->ammann_r) * pts[0].x + .5), (int) (tp->ammann_r * pts[1].y + (1 - tp->ammann_r) * pts[0].y + .5)); if (MI_NPIXELS(mi) <= 2) XSetLineAttributes(display, gc, 1, LineSolid, CapNotLast, JoinMiter); } else { if (MI_NPIXELS(mi) > 2) XSetForeground(display, gc, MI_PIXEL(mi, tp->thick_color)); else { XSetForeground(display, gc, MI_BLACK_PIXEL(mi)); XSetLineAttributes(display, gc, 1, LineOnOffDash, CapNotLast, JoinMiter); } XDrawLine(display, window, gc, (int) ((pts[3].x + pts[2].x) / 2 + .5), (int) ((pts[3].y + pts[2].y) / 2 + .5), (int) ((pts[1].x + pts[2].x) / 2 + .5), (int) ((pts[1].y + pts[2].y) / 2 + .5)); if (MI_NPIXELS(mi) <= 2) XSetLineAttributes(display, gc, 1, LineSolid, CapNotLast, JoinMiter); } } } /*- * Update the status of this vertex on the forced vertex queue. If * the vertex has become untileable set tp->done. This is supposed * to detect dislocations -- never call this routine with a completely * tiled vertex. * * Check for untileable vertices in check_vertex and stop tiling as * soon as one finds one. I don't know if it is possible to run out * of forced vertices while untileable vertices exist (or will * cavities inevitably appear). If this can happen, add_random_tile * might get called with an untileable vertex, causing ( n <= 1). * (This is what the tp->done checks for). * * A delayLoop celebrates the dislocation. */ static void check_vertex(ModeInfo * mi, fringe_node_c * vertex, tiling_c * tp) { rule_match_c hits[MAX_TILES_PER_VERTEX * N_VERTEX_RULES]; int n_hits = match_rules(vertex, hits, False); unsigned forced_sides = 0; if (vertex->rule_mask == 0) { tp->done = True; if (MI_IS_VERBOSE(mi)) { (void) fprintf(stderr, "Dislocation occurred!\n"); } tp->busyLoop = CELEBRATE; /* Should be able to recover */ } if (1 == find_completions(vertex, hits, n_hits, S_LEFT, 0 /*, False */ )) forced_sides |= S_LEFT; if (1 == find_completions(vertex, hits, n_hits, S_RIGHT, 0 /*, False */ )) forced_sides |= S_RIGHT; if (forced_sides == 0) { if (vertex->list_ptr != 0) { forced_node_c *node = *vertex->list_ptr; *vertex->list_ptr = node->next; if (node->next != 0) node->next->vertex->list_ptr = vertex->list_ptr; (void) free((void *) node); tp->forced.n_nodes--; if (!vertex->off_screen) tp->forced.n_visible--; vertex->list_ptr = 0; } } else { forced_node_c *node; if (vertex->list_ptr == 0) { if ((node = ALLOC_NODE(forced_node_c)) == NULL) return; node->vertex = vertex; node->next = tp->forced.first; if (tp->forced.first != 0) tp->forced.first->vertex->list_ptr = &(node->next); tp->forced.first = node; vertex->list_ptr = &(tp->forced.first); tp->forced.n_nodes++; if (!vertex->off_screen) tp->forced.n_visible++; } else node = *vertex->list_ptr; node->forced_sides = forced_sides; } } /*- * Delete this vertex. If the vertex is a member of the forced vertex queue, * also remove that entry. We assume that the vertex is no longer * connected to the fringe. Note that tp->fringe.nodes must not point to * the vertex being deleted. */ static void delete_vertex(ModeInfo * mi, fringe_node_c * vertex, tiling_c * tp) { if (tp->fringe.nodes == vertex) { tp->done = True; if (MI_IS_VERBOSE(mi)) { (void) fprintf(stderr, "Weirdness in delete_penrose()\n"); (void) fprintf(stderr, "tp->fringe.nodes == vertex\n"); } tp->busyLoop = CELEBRATE; } if (vertex->list_ptr != 0) { forced_node_c *node = *vertex->list_ptr; *vertex->list_ptr = node->next; if (node->next != 0) node->next->vertex->list_ptr = vertex->list_ptr; (void) free((void *) node); tp->forced.n_nodes--; if (!vertex->off_screen) tp->forced.n_visible--; } if (!vertex->off_screen) tp->fringe.n_nodes--; (void) free((void *) vertex); } /*- * Check whether the addition of a tile of type vtype would completely fill * the space available at vertex. */ static int fills_vertex(ModeInfo * mi, vertex_type_c vtype, fringe_node_c * vertex) { return (vertex_dir(mi, vertex, S_LEFT) - vertex_dir(mi, vertex, S_RIGHT) - vtype_angle(vtype)) % 10 == 0; } /*- * If you were to add a tile of type vtype to a specified side of * vertex, fringe_changes tells you which other vertices it would * attach to. The addresses of these vertices will be stored in the * last three arguments. Null is stored if the corresponding vertex * would need to be allocated. * * The function also analyzes which vertices would be swallowed by the tiling * and thus cut off from the fringe. The result is returned as a bit pattern. */ #define FC_BAG 1 /* Total enclosure. Should never occur. */ #define FC_NEW_RIGHT 2 #define FC_NEW_FAR 4 #define FC_NEW_LEFT 8 #define FC_NEW_MASK 0xe #define FC_CUT_THIS 0x10 #define FC_CUT_RIGHT 0x20 #define FC_CUT_FAR 0x40 #define FC_CUT_LEFT 0x80 #define FC_CUT_MASK 0xf0 #define FC_TOTAL_MASK 0xff static unsigned fringe_changes(ModeInfo * mi, fringe_node_c * vertex, unsigned side, vertex_type_c vtype, fringe_node_c ** right, fringe_node_c ** far, fringe_node_c ** left) { fringe_node_c *v, *f = (fringe_node_c *) NULL; unsigned result = FC_NEW_FAR; /* We clear this later if necessary. */ if (far) *far = 0; if (fills_vertex(mi, vtype, vertex)) { result |= FC_CUT_THIS; } else if (side == S_LEFT) { result |= FC_NEW_RIGHT; if (right) *right = 0; } else { result |= FC_NEW_LEFT; if (left) *left = 0; } if (!(result & FC_NEW_LEFT)) { v = vertex->next; if (left) *left = v; if (fills_vertex(mi, VT_LEFT(vtype), v)) { result = (result & ~FC_NEW_FAR) | FC_CUT_LEFT; f = v->next; if (far) *far = f; } } if (!(result & FC_NEW_RIGHT)) { v = vertex->prev; if (right) *right = v; if (fills_vertex(mi, VT_RIGHT(vtype), v)) { result = (result & ~FC_NEW_FAR) | FC_CUT_RIGHT; f = v->prev; if (far) *far = f; } } if (!(result & FC_NEW_FAR) && fills_vertex(mi, VT_FAR(vtype), f)) { result |= FC_CUT_FAR; result &= (~FC_NEW_LEFT & ~FC_NEW_RIGHT); if (right && (result & FC_CUT_LEFT)) *right = f->next; if (left && (result & FC_CUT_RIGHT)) *left = f->prev; } if (((result & FC_CUT_LEFT) && (result & FC_CUT_RIGHT)) || ((result & FC_CUT_THIS) && (result & FC_CUT_FAR))) result |= FC_BAG; return result; } /* A couple of lesser helper functions for add_tile. */ static void add_vtype(fringe_node_c * vertex, unsigned side, vertex_type_c vtype) { if (side == S_RIGHT) vertex->tiles[vertex->n_tiles++] = vtype; else { register int i; for (i = vertex->n_tiles; i > 0; i--) vertex->tiles[i] = vertex->tiles[i - 1]; vertex->tiles[0] = vtype; vertex->n_tiles++; } } static fringe_node_c * alloc_vertex(ModeInfo * mi, angle_c dir, fringe_node_c * from, tiling_c * tp) { fringe_node_c *v; if ((v = ALLOC_NODE(fringe_node_c)) == NULL) { tp->done = True; if (MI_IS_VERBOSE(mi)) { (void) fprintf(stderr, "No memory in alloc_vertex()\n"); } tp->busyLoop = CELEBRATE; return v; } *v = *from; add_unit_vec(dir, v->fived); fived_to_loc(v->fived, tp, &(v->loc)); if (v->loc.x < 0 || v->loc.y < 0 || v->loc.x >= tp->width || v->loc.y >= tp->height) { v->off_screen = True; if (v->loc.x < -tp->width || v->loc.y < -tp->height || v->loc.x >= 2 * tp->width || v->loc.y >= 2 * tp->height) tp->done = True; } else { v->off_screen = False; tp->fringe.n_nodes++; } v->n_tiles = 0; v->rule_mask = (1 << N_VERTEX_RULES) - 1; v->list_ptr = 0; return v; } /*- * Add a tile described by vtype to the side of vertex. This must be * allowed by the rules -- we do not check it here. New vertices are * allocated as necessary. The fringe and the forced vertex pool are updated. * The new tile is drawn on the display. * * One thing we do check here is whether the new tile causes an untiled * area to become enclosed by the tiling. If this would happen, the tile * is not added. The return value is true iff a tile was added. */ static int add_tile(ModeInfo * mi, fringe_node_c * vertex, unsigned side, vertex_type_c vtype) { tiling_c *tp = &tilings[MI_SCREEN(mi)]; fringe_node_c *left = (fringe_node_c *) NULL, *right = (fringe_node_c *) NULL, *far = (fringe_node_c *) NULL, *node; unsigned fc = fringe_changes(mi, vertex, side, vtype, &right, &far, &left); vertex_type_c ltype = VT_LEFT(vtype), rtype = VT_RIGHT(vtype), ftype = VT_FAR(vtype); /* By our conventions vertex->next lies to the left of vertex and vertex->prev to the right. */ /* This should never occur. */ if (fc & FC_BAG) { tp->done = True; if (MI_IS_VERBOSE(mi)) { (void) fprintf(stderr, "Weirdness in add_tile()\n"); (void) fprintf(stderr, "fc = %d, FC_BAG = %d\n", fc, FC_BAG); } } if (side == S_LEFT) { if (right == NULL) if ((right = alloc_vertex(mi, vertex_dir(mi, vertex, S_LEFT) - vtype_angle(vtype), vertex, tp)) == NULL) return False; if (far == NULL) if ((far = alloc_vertex(mi, vertex_dir(mi, left, S_RIGHT) + vtype_angle(ltype), left, tp)) == NULL) return False; } else { if (left == NULL) if ((left = alloc_vertex(mi, vertex_dir(mi, vertex, S_RIGHT) + vtype_angle(vtype), vertex, tp)) == NULL) return False; if (far == NULL) if ((far = alloc_vertex(mi, vertex_dir(mi, right, S_LEFT) - vtype_angle(rtype), right, tp)) == NULL) return False; } /* Having allocated the new vertices, but before joining them with the rest of the fringe, check if vertices with same coordinates already exist. If any such are found, give up. */ node = tp->fringe.nodes; do { if (((fc & FC_NEW_LEFT) && fived_equal(node->fived, left->fived)) || ((fc & FC_NEW_RIGHT) && fived_equal(node->fived, right->fived)) || ((fc & FC_NEW_FAR) && fived_equal(node->fived, far->fived))) { /* Better luck next time. */ if (fc & FC_NEW_LEFT) delete_vertex(mi, left, tp); if (fc & FC_NEW_RIGHT) delete_vertex(mi, right, tp); if (fc & FC_NEW_FAR) delete_vertex(mi, far, tp); return False; } node = node->next; } while (node != tp->fringe.nodes); /* Rechain. */ if (!(fc & FC_CUT_THIS)) { if (side == S_LEFT) { vertex->next = right; right->prev = vertex; } else { vertex->prev = left; left->next = vertex; } } if (!(fc & FC_CUT_FAR)) { if (!(fc & FC_CUT_LEFT)) { far->next = left; left->prev = far; } if (!(fc & FC_CUT_RIGHT)) { far->prev = right; right->next = far; } } draw_tile(vertex, right, far, left, vtype, mi); /* Delete vertices that are no longer on the fringe. Check the others. */ if (fc & FC_CUT_THIS) { tp->fringe.nodes = far; delete_vertex(mi, vertex, tp); } else { add_vtype(vertex, side, vtype); check_vertex(mi, vertex, tp); tp->fringe.nodes = vertex; } if (fc & FC_CUT_FAR) delete_vertex(mi, far, tp); else { add_vtype(far, fc & FC_CUT_RIGHT ? S_LEFT : S_RIGHT, ftype); check_vertex(mi, far, tp); } if (fc & FC_CUT_LEFT) delete_vertex(mi, left, tp); else { add_vtype(left, fc & FC_CUT_FAR ? S_LEFT : S_RIGHT, ltype); check_vertex(mi, left, tp); } if (fc & FC_CUT_RIGHT) delete_vertex(mi, right, tp); else { add_vtype(right, fc & FC_CUT_FAR ? S_RIGHT : S_LEFT, rtype); check_vertex(mi, right, tp); } return True; } /*- * Add a forced tile to a given forced vertex. Basically an easy job, * since we know what to add. But it might fail if adding the tile * would cause some untiled area to become enclosed. There is also another * more exotic culprit: we might have a dislocation. Fortunately, they * are very rare (the PRL article reported that perfect tilings of over * 2^50 tiles had been generated). There is a version of the algorithm * that doesn't produce dislocations, but it's a lot hairier than the * simpler version I used. */ static int add_forced_tile(ModeInfo * mi, forced_node_c * node) { tiling_c *tp = &tilings[MI_SCREEN(mi)]; unsigned side; vertex_type_c vtype = 0; rule_match_c hits[MAX_TILES_PER_VERTEX * N_VERTEX_RULES]; int n; if (node->forced_sides == (S_LEFT | S_RIGHT)) side = NRAND(2) ? S_LEFT : S_RIGHT; else side = node->forced_sides; n = match_rules(node->vertex, hits, True); n = find_completions(node->vertex, hits, n, side, &vtype /*, True */ ); if (n <= 0) { tp->done = True; if (MI_IS_VERBOSE(mi)) { (void) fprintf(stderr, "Weirdness in add_forced_tile()\n"); (void) fprintf(stderr, "n = %d\n", n); } } return add_tile(mi, node->vertex, side, vtype); } /*- * Whether the addition of a tile of vtype on the given side of vertex * would conform to the rules. The efficient way to do this would be * to add the new tile and then use the same type of search as in * match_rules. However, this function is not a performance * bottleneck (only needed for random tile additions, which are * relatively infrequent), so I will settle for a simpler implementation. */ static int legal_move(fringe_node_c * vertex, unsigned side, vertex_type_c vtype) { rule_match_c hits[MAX_TILES_PER_VERTEX * N_VERTEX_RULES]; vertex_type_c legal_vt[MAX_COMPL]; int n_hits, n_legal, i; n_hits = match_rules(vertex, hits, False); n_legal = find_completions(vertex, hits, n_hits, side, legal_vt /*, False */ ); for (i = 0; i < n_legal; i++) if (legal_vt[i] == vtype) return True; return False; } /*- * Add a randomly chosen tile to a given vertex. This requires more checking * as we must make sure the new tile conforms to the vertex rules at every * vertex it touches. */ static void add_random_tile(fringe_node_c * vertex, ModeInfo * mi) { fringe_node_c *right, *left, *far; int i, j, n, n_hits, n_good; unsigned side, fc, no_good, s; vertex_type_c vtypes[MAX_COMPL]; rule_match_c hits[MAX_TILES_PER_VERTEX * N_VERTEX_RULES]; tiling_c *tp = &tilings[MI_SCREEN(mi)]; if (MI_NPIXELS(mi) > 2) { tp->thick_color = NRAND(MI_NPIXELS(mi)); /* Insure good contrast */ tp->thin_color = (NRAND(2 * MI_NPIXELS(mi) / 3) + tp->thick_color + MI_NPIXELS(mi) / 6) % MI_NPIXELS(mi); } else tp->thick_color = tp->thin_color = MI_WHITE_PIXEL(mi); n_hits = match_rules(vertex, hits, False); side = NRAND(2) ? S_LEFT : S_RIGHT; n = find_completions(vertex, hits, n_hits, side, vtypes /*, False */ ); /* One answer would mean a forced tile. */ if (n <= 0) { tp->done = True; if (MI_IS_VERBOSE(mi)) { (void) fprintf(stderr, "Weirdness in add_random_tile()\n"); (void) fprintf(stderr, "n = %d\n", n); } } no_good = 0; n_good = n; for (i = 0; i < n; i++) { fc = fringe_changes(mi, vertex, side, vtypes[i], &right, &far, &left); if (fc & FC_BAG) { tp->done = True; if (MI_IS_VERBOSE(mi)) { (void) fprintf(stderr, "Weirdness in add_random_tile()\n"); (void) fprintf(stderr, "fc = %d, FC_BAG = %d\n", fc, FC_BAG); } } if (right) { s = (((fc & FC_CUT_FAR) && (fc & FC_CUT_LEFT)) ? S_RIGHT : S_LEFT); if (!legal_move(right, s, VT_RIGHT(vtypes[i]))) { no_good |= (1 << i); n_good--; continue; } } if (left) { s = (((fc & FC_CUT_FAR) && (fc & FC_CUT_RIGHT)) ? S_LEFT : S_RIGHT); if (!legal_move(left, s, VT_LEFT(vtypes[i]))) { no_good |= (1 << i); n_good--; continue; } } if (far) { s = ((fc & FC_CUT_LEFT) ? S_RIGHT : S_LEFT); if (!legal_move(far, s, VT_FAR(vtypes[i]))) { no_good |= (1 << i); n_good--; } } } if (n_good <= 0) { tp->done = True; if (MI_IS_VERBOSE(mi)) { (void) fprintf(stderr, "Weirdness in add_random_tile()\n"); (void) fprintf(stderr, "n_good = %d\n", n_good); } } n = NRAND(n_good); for (i = j = 0; i <= n; i++, j++) while (no_good & (1 << j)) j++; if (!add_tile(mi, vertex, side, vtypes[j - 1])) { tp->done = True; if (MI_IS_VERBOSE(mi)) { (void) fprintf(stderr, "Weirdness in add_random_tile()\n"); } free_penrose(tp); } } /* One step of the growth algorithm. */ ENTRYPOINT void draw_penrose(ModeInfo * mi) { int i = 0, n; forced_node_c *p; tiling_c *tp; if (tilings == NULL) return; tp = &tilings[MI_SCREEN(mi)]; if (tp->fringe.nodes == NULL) return; MI_IS_DRAWN(mi) = True; p = tp->forced.first; if (tp->busyLoop > 0) { tp->busyLoop--; return; } if (tp->done || tp->failures >= 100) { init_penrose(mi); return; } /* Check for the initial "2-gon". */ if (tp->fringe.nodes->prev == tp->fringe.nodes->next) { vertex_type_c vtype = (unsigned char) (VT_TOTAL_MASK & LRAND()); MI_CLEARWINDOW(mi); if (!add_tile(mi, tp->fringe.nodes, S_LEFT, vtype)) free_penrose(tp); return; } /* No visible nodes left. */ if (tp->fringe.n_nodes == 0) { tp->done = True; tp->busyLoop = COMPLETION; /* Just finished drawing */ return; } if (tp->forced.n_visible > 0 && tp->failures < 10) { n = NRAND(tp->forced.n_visible); for (;;) { while (p->vertex->off_screen) p = p->next; if (i++ < n) p = p->next; else break; } } else if (tp->forced.n_nodes > 0) { n = NRAND(tp->forced.n_nodes); while (i++ < n) p = p->next; } else { fringe_node_c *fringe_p = tp->fringe.nodes; n = NRAND(tp->fringe.n_nodes); i = 0; for (; i <= n; i++) do { fringe_p = fringe_p->next; } while (fringe_p->off_screen); add_random_tile(fringe_p, mi); tp->failures = 0; return; } if (add_forced_tile(mi, p)) tp->failures = 0; else tp->failures++; } 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) { if (tilings != NULL) { int screen; for (screen = 0; screen < MI_NUM_SCREENS(mi); screen++) free_penrose(&tilings[screen]); (void) free((void *) tilings); tilings = (tiling_c *) NULL; } } ENTRYPOINT Bool penrose_handle_event (ModeInfo *mi, XEvent *event) { if (screenhack_event_helper (MI_DISPLAY(mi), MI_WINDOW(mi), event)) { init_penrose (mi); return True; } return False; } XSCREENSAVER_MODULE ("Penrose", penrose) #endif /* MODE_penrose */ xscreensaver-5.36/hacks/pyro.c000644 000767 000024 00000022677 12701612217 016401 0ustar00jwzstaff000000 000000 /* xscreensaver, Copyright (c) 1992-2008 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. */ /* Draw some fireworks. Inspired from TI Explorer Lisp code by John S. Pezaris */ #include #include "screenhack.h" struct projectile { int x, y; /* position */ int dx, dy; /* velocity */ int decay; int size; int fuse; Bool primary; Bool dead; XColor color; struct projectile *next_free; }; #define PI_2000 6284 struct state { Display *dpy; Window window; struct projectile *projectiles, *free_projectiles; struct projectile **sorted_projectiles; GC draw_gc, erase_gc; unsigned int default_fg_pixel; Colormap cmap; int how_many, frequency, scatter, delay; int sin_cache[PI_2000]; int cos_cache[PI_2000]; int draw_xlim, draw_ylim, real_draw_xlim, real_draw_ylim; unsigned long last_pixel; }; /* Slightly whacked, for better explosions */ static void cache(struct state *st) { /*needs to be run once. Could easily be */ int i; /*reimplemented to run and cache at compile-time,*/ double dA; /*saving on init_pyro time */ for (i=0; icos_cache[i]=(int) (cos(((double)i)/1000.0)*dA*2500.0); st->sin_cache[i]=(int) (sin(((double)i)/1000.0)*dA*2500.0); } } static struct projectile * get_projectile (struct state *st) { struct projectile *p; if (st->free_projectiles) { p = st->free_projectiles; st->free_projectiles = p->next_free; p->next_free = 0; p->dead = False; return p; } else return 0; } static void free_projectile (struct state *st, struct projectile *p) { p->next_free = st->free_projectiles; st->free_projectiles = p; p->dead = True; } static void launch (struct state *st, int xlim, int ylim, int g) { struct projectile *p = get_projectile (st); int x, dx, xxx; if (! p) return; do { x = (random () % xlim); dx = 30000 - (random () % 60000); xxx = x + (dx * 200); } while (xxx <= 0 || xxx >= xlim); p->x = x; p->y = ylim; p->dx = dx; p->size = 8000; p->decay = 0; p->dy = (random () % 4000) - 13000; p->fuse = ((((random () % 500) + 500) * abs (p->dy / g)) / 1000); p->primary = True; /* cope with small windows -- those constants assume big windows. */ { int dd = 1000000 / ylim; if (dd > 1) p->fuse /= dd; } if (! mono_p) { hsv_to_rgb (random () % 360, 1.0, 1.0, &p->color.red, &p->color.green, &p->color.blue); p->color.flags = DoRed | DoGreen | DoBlue; if (!XAllocColor (st->dpy, st->cmap, &p->color)) { p->color.pixel = WhitePixel (st->dpy, DefaultScreen (st->dpy)); p->color.red = p->color.green = p->color.blue = 0xFFFF; } } } static struct projectile * shrapnel (struct state *st, struct projectile *parent) { struct projectile *p = get_projectile (st); int v; if (! p) return 0; p->x = parent->x; p->y = parent->y; v=random () % PI_2000; p->dx =(st->sin_cache[v]) + parent->dx; p->dy =(st->cos_cache[v]) + parent->dy; p->decay = (random () % 50) - 60; p->size = (parent->size * 2) / 3; p->fuse = 0; p->primary = False; p->color = parent->color; if (! mono_p) XAllocColor (st->dpy, st->cmap, &p->color); /* dup the lock */ return p; } static void * pyro_init (Display *dpy, Window window) { struct state *st = (struct state *) calloc (1, sizeof(*st)); int i; XGCValues gcv; XWindowAttributes xgwa; st->dpy = dpy; st->window = window; XGetWindowAttributes (st->dpy, st->window, &xgwa); st->last_pixel = ~0; st->cmap = xgwa.colormap; st->delay = get_integer_resource (st->dpy, "delay", "Integer"); st->how_many = get_integer_resource (st->dpy, "count", "Integer"); st->frequency = get_integer_resource (st->dpy, "frequency", "Integer"); st->scatter = get_integer_resource (st->dpy, "scatter", "Integer"); if (st->how_many <= 0) st->how_many = 100; if (st->frequency <= 0) st->frequency = 30; if (st->scatter <= 0) st->scatter = 20; st->projectiles = 0; st->free_projectiles = 0; st->projectiles = (struct projectile *) calloc (st->how_many, sizeof (*st->projectiles)); st->sorted_projectiles = (struct projectile **) calloc (st->how_many, sizeof (*st->sorted_projectiles)); for (i = 0; i < st->how_many; i++) free_projectile (st, &st->projectiles [i]); for (i = 0; i < st->how_many; i++) st->sorted_projectiles[i] = &st->projectiles[i]; gcv.foreground = st->default_fg_pixel = get_pixel_resource (st->dpy, st->cmap, "foreground", "Foreground"); st->draw_gc = XCreateGC (st->dpy, st->window, GCForeground, &gcv); gcv.foreground = get_pixel_resource (st->dpy, st->cmap, "background", "Background"); st->erase_gc = XCreateGC (st->dpy, st->window, GCForeground, &gcv); XClearWindow (st->dpy, st->window); cache(st); return st; } static int projectile_pixel_sorter (const void *a, const void *b) { struct projectile *pa = *(struct projectile **) a; struct projectile *pb = *(struct projectile **) b; if (pa->color.pixel == pb->color.pixel) return 0; else if (pa->color.pixel < pb->color.pixel) return -1; else return 1; } static void sort_by_pixel (struct state *st, int length) { qsort ((void *) st->sorted_projectiles, length, sizeof(*st->sorted_projectiles), projectile_pixel_sorter); } static unsigned long pyro_draw (Display *dpy, Window window, void *closure) { struct state *st = (struct state *) closure; XWindowAttributes xgwa; int g = 100; int resort = 0; int i; for (i = 0; i < st->how_many; i++) { struct projectile *p = st->sorted_projectiles [i]; int old_x, old_y, old_size; int size, x, y; if (p->dead) continue; old_x = p->x >> 10; old_y = p->y >> 10; old_size = p->size >> 10; size = (p->size += p->decay) >> 10; x = (p->x += p->dx) >> 10; y = (p->y += p->dy) >> 10; p->dy += (p->size >> 6); if (p->primary) p->fuse--; /* erase old one */ if (old_size > 0) { if (old_size == 1) XDrawPoint (st->dpy, st->window, st->erase_gc, old_x, old_y); else XFillRectangle (st->dpy, st->window, st->erase_gc, old_x, old_y, old_size, old_size); } if ((p->primary ? (p->fuse > 0) : (p->size > 0)) && x < st->real_draw_xlim && y < st->real_draw_ylim && x > 0 && y > 0) { if (size > 0) { unsigned long pixel; if (mono_p || p->primary) pixel = st->default_fg_pixel; else pixel = p->color.pixel; if (pixel != st->last_pixel) { st->last_pixel = pixel; XSetForeground (st->dpy, st->draw_gc, pixel); } if (size == 1) XDrawPoint (st->dpy, st->window, st->draw_gc, x, y); else if (size < 4) XFillRectangle (st->dpy, st->window, st->draw_gc, x, y, size, size); else XFillArc (st->dpy, st->window, st->draw_gc, x, y, size, size, 0, 360*64); } } else { free_projectile (st, p); if (! mono_p) if (p->color.pixel != WhitePixel (st->dpy, DefaultScreen (st->dpy))) XFreeColors (st->dpy, st->cmap, &p->color.pixel, 1, 0); } if (p->primary && p->fuse <= 0) { int j = (random () % st->scatter) + (st->scatter/2); while (j--) shrapnel (st, p); resort = 1; } } if ((random () % st->frequency) == 0) { XGetWindowAttributes (st->dpy, st->window, &xgwa); st->real_draw_xlim = xgwa.width; st->real_draw_ylim = xgwa.height; st->draw_xlim = st->real_draw_xlim * 1000; st->draw_ylim = st->real_draw_ylim * 1000; launch (st, st->draw_xlim, st->draw_ylim, g); resort = 1; } /* being sorted lets us avoid changing the GC's foreground color as often. */ if (resort) sort_by_pixel (st, st->how_many); return st->delay; } static void pyro_reshape (Display *dpy, Window window, void *closure, unsigned int w, unsigned int h) { } static Bool pyro_event (Display *dpy, Window window, void *closure, XEvent *event) { return False; } static void pyro_free (Display *dpy, Window window, void *closure) { struct state *st = (struct state *) closure; free (st); } static const char *pyro_defaults [] = { ".background: black", ".foreground: white", "*fpsSolid: true", "*count: 600", "*delay: 10000", "*frequency: 30", "*scatter: 100", 0 }; static XrmOptionDescRec pyro_options [] = { { "-delay", ".delay", XrmoptionSepArg, 0 }, { "-count", ".count", XrmoptionSepArg, 0 }, { "-frequency", ".frequency", XrmoptionSepArg, 0 }, { "-scatter", ".scatter", XrmoptionSepArg, 0 }, { 0, 0, 0, 0 } }; XSCREENSAVER_MODULE ("Pyro", pyro) xscreensaver-5.36/hacks/qix.c000644 000767 000024 00000044161 12717750002 016203 0ustar00jwzstaff000000 000000 /* xscreensaver, Copyright (c) 1992-2008 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. */ #include "screenhack.h" #include "alpha.h" #include #define MAXPOLY 16 #define SCALE 6 struct qpoint { int x, y; int dx, dy; }; struct qline { struct qpoint *p; XColor color; Bool dead; }; struct qix { int id; int fp; int nlines; int npoly; struct qline *lines; }; struct state { Display *dpy; Window window; GC draw_gc, erase_gc; unsigned int default_fg_pixel; long maxx, maxy, max_spread, max_size; int color_shift; Bool random_p, solid_p, xor_p, transparent_p, gravity_p; int delay; int count; Colormap cmap; int npoly; Bool additive_p; Bool cmap_p; GC *gcs[2]; int gtick; struct qix **qixes; }; static void get_geom (struct state *st) { XWindowAttributes xgwa; XGetWindowAttributes (st->dpy, st->window, &xgwa); st->maxx = ((long)(xgwa.width+1)<maxy = ((long)(xgwa.height+1)<nlines = nlines; qix->lines = (struct qline *) calloc (qix->nlines, sizeof (struct qline)); qix->npoly = st->npoly; for (i = 0; i < qix->nlines; i++) qix->lines[i].p = (struct qpoint *) calloc(qix->npoly, sizeof(struct qpoint)); # ifndef HAVE_JWXYZ if (!mono_p && !st->transparent_p) # endif { hsv_to_rgb (random () % 360, frand (1.0), frand (0.5) + 0.5, &qix->lines[0].color.red, &qix->lines[0].color.green, &qix->lines[0].color.blue); if (!XAllocColor (st->dpy, st->cmap, &qix->lines[0].color)) { qix->lines[0].color.pixel = st->default_fg_pixel; XQueryColor (st->dpy, st->cmap, &qix->lines[0].color); if (!XAllocColor (st->dpy, st->cmap, &qix->lines[0].color)) abort (); } } if (st->max_size == 0) { for (i = 0; i < qix->npoly; i++) { qix->lines[0].p[i].x = random () % st->maxx; qix->lines[0].p[i].y = random () % st->maxy; } } else { /*assert(qix->npoly == 2);*/ qix->lines[0].p[0].x = random () % st->maxx; qix->lines[0].p[0].y = random () % st->maxy; qix->lines[0].p[1].x = qix->lines[0].p[0].x + (random () % (st->max_size/2)); qix->lines[0].p[1].y = qix->lines[0].p[0].y + (random () % (st->max_size/2)); if (qix->lines[0].p[1].x > st->maxx) qix->lines[0].p[1].x = st->maxx; if (qix->lines[0].p[1].y > st->maxy) qix->lines[0].p[1].y = st->maxy; } for (i = 0; i < qix->npoly; i++) { qix->lines[0].p[i].dx = (random () % (st->max_spread + 1)) - (st->max_spread /2); qix->lines[0].p[i].dy = (random () % (st->max_spread + 1)) - (st->max_spread /2); } qix->lines[0].dead = True; for (i = 1; i < qix->nlines; i++) { for(j=0; jnpoly; j++) qix->lines[i].p[j] = qix->lines[0].p[j]; qix->lines[i].color = qix->lines[0].color; qix->lines[i].dead = qix->lines[0].dead; # ifndef HAVE_JWXYZ if (!mono_p && !st->transparent_p) # endif if (!XAllocColor (st->dpy, st->cmap, &qix->lines[i].color)) abort (); } return qix; } static void * qix_init (Display *dpy, Window window) { struct state *st = (struct state *) calloc (1, sizeof(*st)); int nlines; XGCValues gcv; XWindowAttributes xgwa; st->dpy = dpy; st->window = window; XGetWindowAttributes (st->dpy, st->window, &xgwa); st->cmap = xgwa.colormap; st->count = get_integer_resource (st->dpy, "count", "Integer"); if (st->count <= 0) st->count = 1; nlines = get_integer_resource (st->dpy, "segments", "Integer"); if (nlines <= 0) nlines = 20; st->npoly = get_integer_resource(st->dpy, "poly", "Integer"); if (st->npoly <= 2) st->npoly = 2; if (st->npoly > MAXPOLY) st->npoly = MAXPOLY; get_geom (st); st->max_spread = get_integer_resource (st->dpy, "spread", "Integer"); if (st->max_spread <= 0) st->max_spread = 10; st->max_spread <<= SCALE; st->max_size = get_integer_resource (st->dpy, "size", "Integer"); if (st->max_size < 0) st->max_size = 0; st->max_size <<= SCALE; st->random_p = get_boolean_resource (st->dpy, "random", "Boolean"); st->solid_p = get_boolean_resource (st->dpy, "solid", "Boolean"); st->xor_p = get_boolean_resource (st->dpy, "xor", "Boolean"); st->transparent_p = get_boolean_resource (st->dpy, "transparent", "Boolean"); st->gravity_p = get_boolean_resource(st->dpy, "gravity", "Boolean"); st->delay = get_integer_resource (st->dpy, "delay", "Integer"); st->color_shift = get_integer_resource (st->dpy, "colorShift", "Integer"); if (st->color_shift < 0 || st->color_shift >= 360) st->color_shift = 5; if (st->delay < 0) st->delay = 0; /* Clear up ambiguities regarding npoly */ if (st->solid_p) { if (st->npoly != 2) fprintf(stderr, "%s: Can't have -solid and -poly; using -poly 2\n", progname); st->npoly = 2; } if (st->npoly > 2) { if (st->max_size) fprintf(stderr, "%s: Can't have -poly and -size; using -size 0\n", progname); st->max_size = 0; } if (st->count == 1 && st->transparent_p) st->transparent_p = False; /* it's a no-op */ if (st->transparent_p && CellsOfScreen (DefaultScreenOfDisplay (st->dpy)) <= 2) { fprintf (stderr, "%s: -transparent only works on color displays.\n", progname); st->transparent_p = False; } if (st->xor_p && !st->transparent_p) mono_p = True; st->gcs[0] = st->gcs[1] = 0; gcv.foreground = st->default_fg_pixel = get_pixel_resource (st->dpy, st->cmap, "foreground", "Foreground"); st->additive_p = get_boolean_resource (st->dpy, "additive", "Boolean"); st->cmap_p = has_writable_cells (xgwa.screen, xgwa.visual); # ifndef HAVE_JWXYZ if (st->transparent_p) { unsigned long *plane_masks = 0; unsigned long base_pixel; int nplanes = st->count; int i; allocate_alpha_colors (xgwa.screen, xgwa.visual, st->cmap, &nplanes, st->additive_p, &plane_masks, &base_pixel); if (nplanes <= 1) { fprintf (stderr, "%s: couldn't allocate any color planes; turning -transparent off.\n", progname); st->transparent_p = False; if (st->xor_p) goto NON_TRANSPARENT_XOR; else goto NON_TRANSPARENT; } else if (nplanes != st->count) { fprintf (stderr, "%s: only allocated %d color planes (instead of %d).\n", progname, nplanes, st->count); st->count = nplanes; } st->gcs[0] = (GC *) malloc (st->count * sizeof (GC)); st->gcs[1] = (st->xor_p ? st->gcs[0] : (GC *) malloc (st->count * sizeof (GC))); for (i = 0; i < st->count; i++) { gcv.plane_mask = plane_masks [i]; gcv.foreground = ~0; /* argh, I'm not sure how to make "-subtractive" work in truecolor... if (!cmap_p && !additive_p) gcv.function = GXclear; */ if (st->xor_p) { gcv.function = GXxor; st->gcs [0][i] = XCreateGC (st->dpy, st->window, GCForeground|GCFunction|GCPlaneMask, &gcv); } else { st->gcs [0][i] = XCreateGC (st->dpy, st->window, GCForeground|GCPlaneMask, &gcv); gcv.foreground = 0; st->gcs [1][i] = XCreateGC (st->dpy, st->window, GCForeground|GCPlaneMask, &gcv); # ifdef HAVE_JWXYZ /* jwxyz_XSetAntiAliasing (st->dpy, st->gcs [0][i], False); jwxyz_XSetAntiAliasing (st->dpy, st->gcs [1][i], False); */ if (st->transparent_p) { jwxyz_XSetAlphaAllowed (dpy, st->gcs [0][i], True); jwxyz_XSetAlphaAllowed (dpy, st->gcs [1][i], True); } # endif /* HAVE_JWXYZ */ } } if (plane_masks) free (plane_masks); XSetWindowBackground (st->dpy, st->window, base_pixel); XClearWindow (st->dpy, st->window); } else #endif /* !HAVE_JWXYZ */ if (st->xor_p) { #ifndef HAVE_JWXYZ NON_TRANSPARENT_XOR: #endif gcv.function = GXxor; gcv.foreground = (st->default_fg_pixel /* ^ get_pixel_resource (st->dpy, st->cmap, "background", "Background")*/); st->draw_gc = st->erase_gc = XCreateGC(st->dpy,st->window,GCForeground|GCFunction,&gcv); } else { #ifndef HAVE_JWXYZ NON_TRANSPARENT: #endif st->draw_gc = XCreateGC (st->dpy, st->window, GCForeground, &gcv); gcv.foreground = get_pixel_resource (st->dpy, st->cmap, "background", "Background"); st->erase_gc = XCreateGC (st->dpy, st->window, GCForeground, &gcv); } #ifdef HAVE_JWXYZ if (st->transparent_p) jwxyz_XSetAlphaAllowed (dpy, st->draw_gc, True); #endif st->qixes = (struct qix **) malloc ((st->count + 1) * sizeof (struct qix *)); st->qixes [st->count] = 0; while (st->count--) { st->qixes [st->count] = init_one_qix (st, nlines); st->qixes [st->count]->id = st->count; } # ifdef HAVE_JWXYZ /* line-mode leaves turds without this. */ jwxyz_XSetAntiAliasing (st->dpy, st->erase_gc, False); jwxyz_XSetAntiAliasing (st->dpy, st->draw_gc, False); # endif return st; } static void free_qline (struct state *st, struct qline *qline, struct qline *prev, struct qix *qix) { int i; if (qline->dead || !prev) ; else if (st->solid_p) { XPoint points [4]; /*assert(qix->npoly == 2);*/ points [0].x = qline->p[0].x >> SCALE; points [0].y = qline->p[0].y >> SCALE; points [1].x = qline->p[1].x >> SCALE; points [1].y = qline->p[1].y >> SCALE; points [2].x = prev->p[1].x >> SCALE; points [2].y = prev->p[1].y >> SCALE; points [3].x = prev->p[0].x >> SCALE; points [3].y = prev->p[0].y >> SCALE; XFillPolygon (st->dpy, st->window, (st->transparent_p && st->gcs[1] ? st->gcs[1][qix->id] : st->erase_gc), points, 4, Complex, CoordModeOrigin); } else { /* XDrawLine (dpy, window, (transparent_p ? gcs[1][qix->id] : erase_gc), qline->p1.x, qline->p1.y, qline->p2.x, qline->p2.y);*/ XPoint points[MAXPOLY+1]; for(i = 0; i < qix->npoly; i++) { points[i].x = qline->p[i].x >> SCALE; points[i].y = qline->p[i].y >> SCALE; } points[qix->npoly] = points[0]; XDrawLines(st->dpy, st->window, (st->transparent_p && st->gcs[1] ? st->gcs[1][qix->id] : st->erase_gc), points, qix->npoly+1, CoordModeOrigin); } if (!mono_p && !st->transparent_p) XFreeColors (st->dpy, st->cmap, &qline->color.pixel, 1, 0); qline->dead = True; } static void add_qline (struct state *st, struct qline *qline, struct qline *prev_qline, struct qix *qix) { int i; for(i=0; inpoly; i++) qline->p[i] = prev_qline->p[i]; qline->color = prev_qline->color; qline->dead = prev_qline->dead; #define wiggle(point,delta,max) \ if (st->random_p) delta += (random () % (1 << (SCALE+1))) - (1 << SCALE); \ if (delta > st->max_spread) delta = st->max_spread; \ else if (delta < -st->max_spread) delta = -st->max_spread; \ point += delta; \ if (point < 0) point = 0, delta = -delta, point += delta<<1; \ else if (point > max) point = max, delta = -delta, point += delta<<1; if (st->gravity_p) for(i=0; inpoly; i++) qline->p[i].dy += 3; for (i = 0; i < qix->npoly; i++) { wiggle (qline->p[i].x, qline->p[i].dx, st->maxx); wiggle (qline->p[i].y, qline->p[i].dy, st->maxy); } if (st->max_size) { /*assert(qix->npoly == 2);*/ if (qline->p[0].x - qline->p[1].x > st->max_size) qline->p[0].x = qline->p[1].x + st->max_size - (st->random_p ? random() % st->max_spread : 0); else if (qline->p[1].x - qline->p[0].x > st->max_size) qline->p[1].x = qline->p[0].x + st->max_size - (st->random_p ? random() % st->max_spread : 0); if (qline->p[0].y - qline->p[1].y > st->max_size) qline->p[0].y = qline->p[1].y + st->max_size - (st->random_p ? random() % st->max_spread : 0); else if (qline->p[1].y - qline->p[0].y > st->max_size) qline->p[1].y = qline->p[0].y + st->max_size - (st->random_p ? random() % st->max_spread : 0); } #ifndef HAVE_JWXYZ if (!mono_p && !st->transparent_p) #endif { XColor desired; int h; double s, v; rgb_to_hsv (qline->color.red, qline->color.green, qline->color.blue, &h, &s, &v); h = (h + st->color_shift) % 360; hsv_to_rgb (h, s, v, &qline->color.red, &qline->color.green, &qline->color.blue); qline->color.flags = DoRed | DoGreen | DoBlue; desired = qline->color; if (XAllocColor (st->dpy, st->cmap, &qline->color)) { /* XAllocColor returns the actual RGB that the hardware let us allocate. Restore the requested values into the XColor struct so that limited-resolution hardware doesn't cause the cycle to get "stuck". */ qline->color.red = desired.red; qline->color.green = desired.green; qline->color.blue = desired.blue; } else { qline->color = prev_qline->color; if (!XAllocColor (st->dpy, st->cmap, &qline->color)) abort (); /* same color should work */ } # ifdef HAVE_JWXYZ if (st->transparent_p) { /* give a non-opaque alpha to the color */ unsigned long pixel = qline->color.pixel; unsigned long amask = BlackPixel (st->dpy, 0); unsigned long a = (0xBBBBBBBB & amask); pixel = (pixel & (~amask)) | a; qline->color.pixel = pixel; } # endif /* HAVE_JWXYZ */ XSetForeground (st->dpy, st->draw_gc, qline->color.pixel); } if (! st->solid_p) { /* XDrawLine (dpy, window, (transparent_p ? gcs[0][qix->id] : draw_gc), qline->p1.x, qline->p1.y, qline->p2.x, qline->p2.y);*/ XPoint points[MAXPOLY+1]; for (i = 0; i < qix->npoly; i++) { points[i].x = qline->p[i].x >> SCALE; points[i].y = qline->p[i].y >> SCALE; } points[qix->npoly] = points[0]; XDrawLines(st->dpy, st->window, (st->transparent_p && st->gcs[0] ? st->gcs[0][qix->id] : st->draw_gc), points, qix->npoly+1, CoordModeOrigin); } else if (!prev_qline->dead) { XPoint points [4]; points [0].x = qline->p[0].x >> SCALE; points [0].y = qline->p[0].y >> SCALE; points [1].x = qline->p[1].x >> SCALE; points [1].y = qline->p[1].y >> SCALE; points [2].x = prev_qline->p[1].x >> SCALE; points [2].y = prev_qline->p[1].y >> SCALE; points [3].x = prev_qline->p[0].x >> SCALE; points [3].y = prev_qline->p[0].y >> SCALE; XFillPolygon (st->dpy, st->window, (st->transparent_p && st->gcs[0] ? st->gcs[0][qix->id] : st->draw_gc), points, 4, Complex, CoordModeOrigin); } qline->dead = False; } static void qix1 (struct state *st, struct qix *qix) { int ofp = qix->fp - 1; if (ofp < 0) ofp = qix->nlines - 1; if (st->gtick++ == 500) get_geom (st), st->gtick = 0; free_qline (st, &qix->lines [qix->fp], &qix->lines[(qix->fp + 1) % qix->nlines], qix); add_qline (st, &qix->lines[qix->fp], &qix->lines[ofp], qix); if ((++qix->fp) >= qix->nlines) qix->fp = 0; } static unsigned long qix_draw (Display *dpy, Window window, void *closure) { struct state *st = (struct state *) closure; struct qix **q1 = st->qixes; struct qix **qn; for (qn = q1; *qn; qn++) qix1 (st, *qn); return st->delay; } static void qix_reshape (Display *dpy, Window window, void *closure, unsigned int w, unsigned int h) { struct state *st = (struct state *) closure; get_geom (st); } static Bool qix_event (Display *dpy, Window window, void *closure, XEvent *event) { return False; } static void qix_free (Display *dpy, Window window, void *closure) { struct state *st = (struct state *) closure; if (st->gcs[0]) free (st->gcs[0]); if (st->gcs[1] && st->gcs[0] != st->gcs[1]) free (st->gcs[1]); free (st->qixes); free (st); } static const char *qix_defaults [] = { ".background: black", ".foreground: white", "*fpsSolid: true", "*count: 4", "*segments: 250", "*poly: 2", "*spread: 8", "*size: 200", "*colorShift: 3", "*solid: true", "*delay: 10000", "*random: false", "*xor: false", "*transparent:true", "*gravity: false", "*additive: true", #ifdef HAVE_MOBILE "*ignoreRotation: True", #endif 0 }; static XrmOptionDescRec qix_options [] = { { "-count", ".count", XrmoptionSepArg, 0 }, { "-segments", ".segments", XrmoptionSepArg, 0 }, { "-poly", ".poly", XrmoptionSepArg, 0 }, { "-spread", ".spread", XrmoptionSepArg, 0 }, { "-size", ".size", XrmoptionSepArg, 0 }, { "-delay", ".delay", XrmoptionSepArg, 0 }, { "-color-shift", ".colorShift", XrmoptionSepArg, 0 }, { "-random", ".random", XrmoptionNoArg, "true" }, { "-linear", ".random", XrmoptionNoArg, "false" }, { "-solid", ".solid", XrmoptionNoArg, "true" }, { "-hollow", ".solid", XrmoptionNoArg, "false" }, { "-xor", ".xor", XrmoptionNoArg, "true" }, { "-no-xor", ".xor", XrmoptionNoArg, "false" }, { "-transparent", ".transparent", XrmoptionNoArg, "true" }, { "-non-transparent", ".transparent", XrmoptionNoArg, "false" }, { "-gravity", ".gravity", XrmoptionNoArg, "true" }, { "-no-gravity", ".gravity", XrmoptionNoArg, "false" }, { "-additive", ".additive", XrmoptionNoArg, "true" }, { "-subtractive", ".additive", XrmoptionNoArg, "false" }, { 0, 0, 0, 0 } }; XSCREENSAVER_MODULE ("Qix", qix) xscreensaver-5.36/hacks/rocks.c000644 000767 000024 00000036627 12710314360 016527 0ustar00jwzstaff000000 000000 /* xscreensaver, Copyright (c) 1992-2013 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. */ /* 18-Sep-97: Johannes Keukelaar : Added some color. * Using -mono gives the old behaviour. (Modified by jwz.) */ /* Flying through an asteroid field. Based on TI Explorer Lisp code by John Nguyen */ #include #include #include "screenhack.h" #define MIN_ROCKS 1 #define MIN_DEPTH 2 /* rocks disappear when they get this close */ #define MAX_DEPTH 60 /* this is where rocks appear */ #define MIN_SIZE 3 /* how small where pixmaps are not used */ #define MAX_SIZE 200 /* how big (in pixels) rocks are at depth 1 */ #define DEPTH_SCALE 100 /* how many ticks there are between depths */ #define SIN_RESOLUTION 1000 #define MAX_DEP 0.3 /* how far the displacement can be (percent) */ #define DIRECTION_CHANGE_RATE 60 #define MAX_DEP_SPEED 5 /* Maximum speed for movement */ #define MOVE_STYLE 0 /* Only 0 and 1. Distinguishes the fact that these are the rocks that are moving (1) or the rocks source (0). */ /* there's not much point in the above being user-customizable, but those numbers might want to be tweaked for displays with an order of magnitude higher resolution or compute power. */ struct state { Display *dpy; Window window; double sins [SIN_RESOLUTION]; double coss [SIN_RESOLUTION]; double depths [(MAX_DEPTH + 1) * DEPTH_SCALE]; int width, height, midx, midy; int dep_x, dep_y; int ncolors; XColor *colors; float max_dep; GC erase_gc; GC *draw_gcs; Bool rotate_p; Bool move_p; int speed; Bool threed; GC threed_left_gc, threed_right_gc; double threed_delta; struct rock *rocks; int nrocks; Pixmap pixmaps [MAX_SIZE]; int delay; int move_current_dep[2]; int move_speed[2]; short move_direction[2]; int move_limit[2]; int current_delta; /* observer Z rotation */ int new_delta; int dchange_tick; }; #define GETZDIFF(z) \ (st->threed_delta * 40.0 * \ (1.0 - ((MAX_DEPTH * DEPTH_SCALE / 2) / \ ((z) + 20.0 * DEPTH_SCALE)))) struct rock { int real_size; int r; int theta; int depth; int size, x, y; int diff; int color; }; static void rock_compute (struct state *, struct rock *); static void rock_draw (struct state *, struct rock *, Bool draw_p); static void rock_reset (struct state *st, struct rock *rock) { rock->real_size = MAX_SIZE; rock->r = (SIN_RESOLUTION * 0.7) + (random () % (30 * SIN_RESOLUTION)); rock->theta = random () % SIN_RESOLUTION; rock->depth = MAX_DEPTH * DEPTH_SCALE; rock->color = random() % st->ncolors; rock_compute (st, rock); rock_draw (st, rock, True); } static void rock_tick (struct state *st, struct rock *rock, int d) { if (rock->depth > 0) { rock_draw (st, rock, False); rock->depth -= st->speed; if (st->rotate_p) { rock->theta = (rock->theta + d) % SIN_RESOLUTION; } while (rock->theta < 0) rock->theta += SIN_RESOLUTION; if (rock->depth < (MIN_DEPTH * DEPTH_SCALE)) rock->depth = 0; else { rock_compute (st, rock); rock_draw (st, rock, True); } } else if ((random () % 40) == 0) rock_reset (st, rock); } static void rock_compute (struct state *st, struct rock *rock) { double factor = st->depths [rock->depth]; double rsize = rock->real_size * factor; rock->size = (int) (rsize + 0.5); rock->diff = (int) GETZDIFF(rock->depth); rock->x = st->midx + (st->coss [rock->theta] * rock->r * factor); rock->y = st->midy + (st->sins [rock->theta] * rock->r * factor); if (st->move_p) { double move_factor = (((double) MOVE_STYLE) - (((double) rock->depth) / (((double) (MAX_DEPTH + 1)) * ((double) DEPTH_SCALE)))); /* move_factor is 0 when the rock is close, 1 when far */ rock->x += (((double) st->dep_x) * move_factor); rock->y += (((double) st->dep_y) * move_factor); } } static void rock_draw (struct state *st, struct rock *rock, Bool draw_p) { GC gc = (draw_p ? (st->threed ? st->erase_gc : st->draw_gcs[rock->color]) : st->erase_gc); if (rock->x <= 0 || rock->y <= 0 || rock->x >= st->width || rock->y >= st->height) { /* this means that if a rock were to go off the screen at 12:00, but would have been visible at 3:00, it won't come back once the observer rotates around so that the rock would have been visible again. Oh well. */ if (!st->move_p) rock->depth = 0; return; } if (rock->size <= 1) { if (st->threed) { if (draw_p) gc = st->threed_left_gc; XDrawPoint (st->dpy, st->window, gc, rock->x - rock->diff, rock->y); if (draw_p) gc = st->threed_right_gc; XDrawPoint (st->dpy, st->window, gc, rock->x + rock->diff, rock->y); } else { XDrawPoint (st->dpy, st->window, gc, rock->x, rock->y); } } else if (rock->size <= MIN_SIZE || !draw_p) { if (st->threed) { if (draw_p) gc = st->threed_left_gc; XFillRectangle(st->dpy, st->window, gc, rock->x - rock->size / 2 - rock->diff, rock->y - rock->size / 2, rock->size, rock->size); if (draw_p) gc = st->threed_right_gc; XFillRectangle(st->dpy, st->window, gc, rock->x - rock->size / 2 + rock->diff, rock->y - rock->size / 2, rock->size, rock->size); } else { XFillRectangle (st->dpy, st->window, gc, rock->x - rock->size/2, rock->y - rock->size/2, rock->size, rock->size); } } else if (rock->size < MAX_SIZE) { if (st->threed) { gc = st->threed_left_gc; XCopyPlane(st->dpy, st->pixmaps[rock->size], st->window, gc, 0, 0, rock->size, rock->size, rock->x - rock->size / 2 - rock->diff, rock->y - rock->size / 2, 1L); gc = st->threed_right_gc; XCopyPlane(st->dpy, st->pixmaps[rock->size], st->window, gc, 0, 0, rock->size, rock->size, rock->x - rock->size / 2 + rock->diff, rock->y - rock->size / 2, 1L); } else { XCopyPlane (st->dpy, st->pixmaps [rock->size], st->window, gc, 0, 0, rock->size, rock->size, rock->x - rock->size/2, rock->y - rock->size/2, 1L); } } } static void init_pixmaps (struct state *st) { int i; XGCValues gcv; GC fg_gc = 0, bg_gc = 0; st->pixmaps [0] = st->pixmaps [1] = 0; for (i = MIN_DEPTH; i < MAX_SIZE; i++) { int w = (1+(i/32))<<5; /* server might be faster if word-aligned */ int h = i; Pixmap p = XCreatePixmap (st->dpy, st->window, w, h, 1); XPoint points [7]; st->pixmaps [i] = p; if (! p) { fprintf (stderr, "%s: couldn't allocate pixmaps", progname); exit (1); } if (! fg_gc) { /* must use drawable of pixmap, not window (fmh) */ gcv.foreground = 1; fg_gc = XCreateGC (st->dpy, p, GCForeground, &gcv); gcv.foreground = 0; bg_gc = XCreateGC (st->dpy, p, GCForeground, &gcv); } XFillRectangle (st->dpy, p, bg_gc, 0, 0, w, h); points [0].x = i * 0.15; points [0].y = i * 0.85; points [1].x = i * 0.00; points [1].y = i * 0.20; points [2].x = i * 0.30; points [2].y = i * 0.00; points [3].x = i * 0.40; points [3].y = i * 0.10; points [4].x = i * 0.90; points [4].y = i * 0.10; points [5].x = i * 1.00; points [5].y = i * 0.55; points [6].x = i * 0.45; points [6].y = i * 1.00; XFillPolygon (st->dpy, p, fg_gc, points, 7, Nonconvex, CoordModeOrigin); } XFreeGC (st->dpy, fg_gc); XFreeGC (st->dpy, bg_gc); } static int compute_move(struct state *st, int axe) /* 0 for x, 1 for y */ { int change = 0; st->move_limit[0] = st->midx; st->move_limit[1] = st->midy; st->move_current_dep[axe] += st->move_speed[axe]; /* We adjust the displacement */ if (st->move_current_dep[axe] > (int) (st->move_limit[axe] * st->max_dep)) { if (st->move_current_dep[axe] > st->move_limit[axe]) st->move_current_dep[axe] = st->move_limit[axe]; st->move_direction[axe] = -1; } /* This is when we reach the upper screen limit */ if (st->move_current_dep[axe] < (int) (-st->move_limit[axe] * st->max_dep)) { if (st->move_current_dep[axe] < -st->move_limit[axe]) st->move_current_dep[axe] = -st->move_limit[axe]; st->move_direction[axe] = 1; } /* This is when we reach the lower screen limit */ if (st->move_direction[axe] == 1) /* We adjust the speed */ st->move_speed[axe] += 1; else if (st->move_direction[axe] == -1) st->move_speed[axe] -= 1; if (st->move_speed[axe] > MAX_DEP_SPEED) st->move_speed[axe] = MAX_DEP_SPEED; else if (st->move_speed[axe] < -MAX_DEP_SPEED) st->move_speed[axe] = -MAX_DEP_SPEED; if (st->move_p && !(random() % DIRECTION_CHANGE_RATE)) { /* We change direction */ change = random() & 1; if (change != 1) { if (st->move_direction[axe] == 0) st->move_direction[axe] = change - 1; /* 0 becomes either 1 or -1 */ else st->move_direction[axe] = 0; /* -1 or 1 become 0 */ } } return (st->move_current_dep[axe]); } static void tick_rocks (struct state *st, int d) { int i; if (st->move_p) { st->dep_x = compute_move(st, 0); st->dep_y = compute_move(st, 1); } for (i = 0; i < st->nrocks; i++) rock_tick (st, &st->rocks [i], d); } static unsigned long rocks_draw (Display *dpy, Window window, void *closure) { struct state *st = (struct state *) closure; if (st->current_delta != st->new_delta) { if (st->dchange_tick++ == 5) { st->dchange_tick = 0; if (st->current_delta < st->new_delta) st->current_delta++; else st->current_delta--; } } else { if (! (random() % 50)) { st->new_delta = ((random() % 11) - 5); if (! (random() % 10)) st->new_delta *= 5; } } tick_rocks (st, st->current_delta); return st->delay; } static void * rocks_init (Display *d, Window w) { struct state *st = (struct state *) calloc (1, sizeof(*st)); int i; XGCValues gcv; Colormap cmap; XWindowAttributes xgwa; unsigned int bg; st->dpy = d; st->window = w; XGetWindowAttributes (st->dpy, st->window, &xgwa); st->width = xgwa.width; st->height = xgwa.height; st->midx = st->width/2; st->midy = st->height/2; cmap = xgwa.colormap; st->delay = get_integer_resource (st->dpy, "delay", "Integer"); if (st->delay < 0) st->delay = 0; st->speed = get_integer_resource (st->dpy, "speed", "Integer"); if (st->speed < 1) st->speed = 1; if (st->speed > 100) st->speed = 100; st->rotate_p = get_boolean_resource (st->dpy, "rotate", "Boolean"); st->move_p = get_boolean_resource (st->dpy, "move", "Boolean"); if (mono_p) st->ncolors = 2; else st->ncolors = get_integer_resource (st->dpy, "colors", "Colors"); if (st->ncolors < 2) { st->ncolors = 2; mono_p = True; } st->colors = (XColor *) malloc(st->ncolors * sizeof(*st->colors)); st->draw_gcs = (GC *) malloc(st->ncolors * sizeof(*st->draw_gcs)); bg = get_pixel_resource (st->dpy, cmap, "background", "Background"); st->colors[0].pixel = bg; st->colors[0].flags = DoRed|DoGreen|DoBlue; XQueryColor(st->dpy, cmap, &st->colors[0]); st->ncolors--; make_random_colormap(xgwa.screen, xgwa.visual, cmap, st->colors+1, &st->ncolors, True, True, 0, True); st->ncolors++; if (st->ncolors < 2) { st->ncolors = 2; mono_p = True; } if (mono_p) { unsigned int fg = get_pixel_resource(st->dpy, cmap, "foreground", "Foreground"); st->colors[1].pixel = fg; st->colors[1].flags = DoRed|DoGreen|DoBlue; XQueryColor(st->dpy, cmap, &st->colors[1]); gcv.foreground = fg; gcv.background = bg; st->draw_gcs[0] = XCreateGC (st->dpy, st->window, GCForeground|GCBackground, &gcv); st->draw_gcs[1] = st->draw_gcs[0]; } else for( i = 0; i < st->ncolors; i++ ) { gcv.foreground = st->colors[i].pixel; gcv.background = bg; st->draw_gcs[i] = XCreateGC (st->dpy, st->window, GCForeground|GCBackground, &gcv); } gcv.foreground = bg; st->erase_gc = XCreateGC (st->dpy, st->window, GCForeground|GCBackground, &gcv); st->max_dep = (st->move_p ? MAX_DEP : 0); for (i = 0; i < SIN_RESOLUTION; i++) { st->sins [i] = sin ((((double) i) / (SIN_RESOLUTION / 2)) * M_PI); st->coss [i] = cos ((((double) i) / (SIN_RESOLUTION / 2)) * M_PI); } /* we actually only need i/speed of these, but wtf */ for (i = 1; i < (sizeof (st->depths) / sizeof (st->depths[0])); i++) st->depths [i] = atan (((double) 0.5) / (((double) i) / DEPTH_SCALE)); st->depths [0] = M_PI/2; /* avoid division by 0 */ st->threed = get_boolean_resource(st->dpy, "use3d", "Boolean"); if (st->threed) { gcv.background = bg; gcv.foreground = get_pixel_resource (st->dpy, cmap, "left3d", "Foreground"); st->threed_left_gc = XCreateGC (st->dpy, st->window, GCForeground|GCBackground,&gcv); gcv.foreground = get_pixel_resource (st->dpy, cmap, "right3d", "Foreground"); st->threed_right_gc = XCreateGC (st->dpy, st->window,GCForeground|GCBackground,&gcv); st->threed_delta = get_float_resource(st->dpy, "delta3d", "Integer"); } /* don't want any exposure events from XCopyPlane */ for( i = 0; i < st->ncolors; i++) XSetGraphicsExposures (st->dpy, st->draw_gcs[i], False); XSetGraphicsExposures (st->dpy, st->erase_gc, False); st->nrocks = get_integer_resource (st->dpy, "count", "Count"); if (st->nrocks < 1) st->nrocks = 1; st->rocks = (struct rock *) calloc (st->nrocks, sizeof (struct rock)); init_pixmaps (st); XClearWindow (st->dpy, st->window); return st; } static void rocks_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; st->midx = st->width/2; st->midy = st->height/2; } static Bool rocks_event (Display *dpy, Window window, void *closure, XEvent *event) { return False; } static void rocks_free (Display *dpy, Window window, void *closure) { } static const char *rocks_defaults [] = { ".background: Black", ".foreground: #E9967A", "*fpsSolid: true", "*colors: 5", "*count: 100", "*delay: 50000", "*speed: 100", "*rotate: true", "*move: true", "*use3d: False", "*left3d: Blue", "*right3d: Red", "*delta3d: 1.5", #ifdef HAVE_MOBILE "*ignoreRotation: True", #endif 0 }; static XrmOptionDescRec rocks_options [] = { { "-count", ".count", XrmoptionSepArg, 0 }, { "-rotate", ".rotate", XrmoptionNoArg, "true" }, { "-no-rotate", ".rotate", XrmoptionNoArg, "false" }, { "-move", ".move", XrmoptionNoArg, "true" }, { "-no-move", ".move", XrmoptionNoArg, "false" }, { "-delay", ".delay", XrmoptionSepArg, 0 }, { "-speed", ".speed", XrmoptionSepArg, 0 }, {"-3d", ".use3d", XrmoptionNoArg, "True"}, {"-no-3d", ".use3d", XrmoptionNoArg, "False"}, {"-left3d", ".left3d", XrmoptionSepArg, 0 }, {"-right3d", ".right3d", XrmoptionSepArg, 0 }, {"-delta3d", ".delta3d", XrmoptionSepArg, 0 }, { "-colors", ".colors", XrmoptionSepArg, 0 }, { 0, 0, 0, 0 } }; XSCREENSAVER_MODULE ("Rocks", rocks) xscreensaver-5.36/hacks/rorschach.c000644 000767 000024 00000013254 12710314361 017352 0ustar00jwzstaff000000 000000 /* xscreensaver, Copyright (c) 1992-2014 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. * * 19971004: Johannes Keukelaar : Use helix screen * eraser. */ #include "screenhack.h" #include "erase.h" struct state { GC draw_gc; unsigned int default_fg_pixel; int iterations, offset; Bool xsym, ysym; int sleep_time; int xlim, ylim; XColor color; int current_x, current_y, remaining_iterations; eraser_state *eraser; }; static void * rorschach_init (Display *dpy, Window window) { struct state *st = (struct state *) calloc (1, sizeof(*st)); XGCValues gcv; Colormap cmap; XWindowAttributes xgwa; XGetWindowAttributes (dpy, window, &xgwa); cmap = xgwa.colormap; gcv.foreground = st->default_fg_pixel = get_pixel_resource (dpy, cmap, "foreground", "Foreground"); st->draw_gc = XCreateGC (dpy, window, GCForeground, &gcv); gcv.foreground = get_pixel_resource (dpy, cmap, "background", "Background"); st->iterations = get_integer_resource (dpy, "iterations", "Integer"); st->offset = get_integer_resource (dpy, "offset", "Integer"); if (st->offset <= 0) st->offset = 3; if (st->iterations < 10) st->iterations = 10; st->sleep_time = get_integer_resource (dpy, "delay", "Delay"); st->xsym = get_boolean_resource (dpy, "xsymmetry", "Symmetry"); st->ysym = get_boolean_resource (dpy, "ysymmetry", "Symmetry"); st->remaining_iterations = -1; st->color.pixel = 0; return st; } static void rorschach_reshape (Display *dpy, Window window, void *closure, unsigned int width, unsigned int height) { struct state *st = (struct state *) closure; st->xlim = width; st->ylim = height; } static void rorschach_draw_start (Display *dpy, Window window, struct state *st) { Colormap cmap; XWindowAttributes xgwa; XGetWindowAttributes (dpy, window, &xgwa); st->xlim = xgwa.width; st->ylim = xgwa.height; cmap = xgwa.colormap; if (st->color.pixel) XFreeColors (dpy, cmap, &st->color.pixel, 1, 0); if (! mono_p) hsv_to_rgb (random()%360, 1.0, 1.0, &st->color.red, &st->color.green, &st->color.blue); if ((!mono_p) && XAllocColor (dpy, cmap, &st->color)) XSetForeground (dpy, st->draw_gc, st->color.pixel); else XSetForeground (dpy, st->draw_gc, st->default_fg_pixel); st->current_x = st->xlim/2; st->current_y = st->ylim/2; st->remaining_iterations = st->iterations; } static void rorschach_draw_step (Display *dpy, Window window, struct state *st) { # define ITER_CHUNK 300 XPoint points [4 * ITER_CHUNK]; int x = st->current_x; int y = st->current_y; int i, j = 0; int this_iterations = ITER_CHUNK; if (this_iterations > st->remaining_iterations) this_iterations = st->remaining_iterations; for (i = 0; i < this_iterations; i++) { x += ((random () % (1 + (st->offset << 1))) - st->offset); y += ((random () % (1 + (st->offset << 1))) - st->offset); points [j].x = x; points [j].y = y; j++; if (st->xsym) { points [j].x = st->xlim - x; points [j].y = y; j++; } if (st->ysym) { points [j].x = x; points [j].y = st->ylim - y; j++; } if (st->xsym && st->ysym) { points [j].x = st->xlim - x; points [j].y = st->ylim - y; j++; } } XDrawPoints (dpy, window, st->draw_gc, points, j, CoordModeOrigin); st->remaining_iterations -= this_iterations; if (st->remaining_iterations < 0) st->remaining_iterations = 0; st->current_x = x; st->current_y = y; } static unsigned long rorschach_draw (Display *dpy, Window window, void *closure) { struct state *st = (struct state *) closure; unsigned long delay = 20000; if (st->eraser) { st->eraser = erase_window (dpy, window, st->eraser); goto END; } if (st->remaining_iterations > 0) { rorschach_draw_step (dpy, window, st); if (st->remaining_iterations == 0) delay = st->sleep_time * 1000000; } else { if (st->remaining_iterations == 0) st->eraser = erase_window (dpy, window, st->eraser); rorschach_draw_start (dpy, window, st); } END: return delay; } static Bool rorschach_event (Display *dpy, Window window, void *closure, XEvent *event) { struct state *st = (struct state *) closure; if (screenhack_event_helper (dpy, window, event)) { st->remaining_iterations = 0; return True; } return False; } static void rorschach_free (Display *dpy, Window window, void *closure) { struct state *st = (struct state *) closure; free (st); } static const char *rorschach_defaults [] = { ".background: black", ".foreground: white", "*fpsSolid: true", "*xsymmetry: true", "*ysymmetry: false", "*iterations: 4000", "*offset: 7", "*delay: 5", #ifdef HAVE_MOBILE "*ignoreRotation: True", #endif 0 }; static XrmOptionDescRec rorschach_options [] = { { "-iterations", ".iterations", XrmoptionSepArg, 0 }, { "-offset", ".offset", XrmoptionSepArg, 0 }, { "-xsymmetry", ".xsymmetry", XrmoptionNoArg, "true" }, { "-ysymmetry", ".ysymmetry", XrmoptionNoArg, "true" }, { "-no-xsymmetry", ".xsymmetry", XrmoptionNoArg, "false" }, { "-no-ysymmetry", ".ysymmetry", XrmoptionNoArg, "false" }, { "-delay", ".delay", XrmoptionSepArg, 0 }, { 0, 0, 0, 0 } }; XSCREENSAVER_MODULE ("Rorschach", rorschach) xscreensaver-5.36/hacks/screenhack.c000644 000767 000024 00000072541 12701612217 017511 0ustar00jwzstaff000000 000000 /* xscreensaver, Copyright (c) 1992-2014 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. * * And remember: X Windows is to graphics hacking as roman numerals are to * the square root of pi. */ /* This file contains simple code to open a window or draw on the root. The idea being that, when writing a graphics hack, you can just link with this .o to get all of the uninteresting junk out of the way. Create a few static global procedures and variables: static void *YOURNAME_init (Display *, Window); Return an opaque structure representing your drawing state. static unsigned long YOURNAME_draw (Display *, Window, void *closure); Draw one frame. The `closure' arg is your drawing state, that you created in `init'. Return the number of microseconds to wait until the next frame. This should return in some small fraction of a second. Do not call `usleep' or loop excessively. For long loops, use a finite state machine. static void YOURNAME_reshape (Display *, Window, void *closure, unsigned int width, unsigned int height); Called when the size of the window changes with the new size. static Bool YOURNAME_event (Display *, Window, void *closure, XEvent *event); Called when a keyboard or mouse event arrives. Return True if you handle it in some way, False otherwise. static void YOURNAME_free (Display *, Window, void *closure); Called when you are done: free everything you've allocated, including your private `state' structure. NOTE: this is called in windowed-mode when the user typed 'q' or clicks on the window's close box; but when xscreensaver terminates this screenhack, it does so by killing the process with SIGSTOP. So this callback is mostly useless. static char YOURNAME_defaults [] = { "...", "...", ... , 0 }; This variable is an array of strings, your default resources. Null-terminate the list. static XrmOptionDescRec YOURNAME_options[] = { { ... }, ... { 0,0,0,0 } } This variable describes your command-line options. Null-terminate the list. Finally , invoke the XSCREENSAVER_MODULE() macro to tie it all together. Additional caveats: - Make sure that all functions in your module are static (check this by running "nm -g" on the .o file). - Do not use global variables: all such info must be stored in the private `state' structure. - Do not use static function-local variables, either. Put it in `state'. Assume that there are N independent runs of this code going in the same address space at the same time: they must not affect each other. - Don't forget to write an XML file to describe the user interface of your screen saver module. See .../hacks/config/README for details. */ #define DEBUG_PAIR #include #include #include #include #include #include #include #ifdef __sgi # include /* for SgiUseSchemes() */ #endif /* __sgi */ #ifdef HAVE_XMU # ifndef VMS # include # else /* VMS */ # include # endif #else # include "xmu.h" #endif #include "screenhackI.h" #include "version.h" #include "vroot.h" #include "fps.h" #ifdef HAVE_RECORD_ANIM # include "recanim.h" #endif #ifndef _XSCREENSAVER_VROOT_H_ # error Error! You have an old version of vroot.h! Check -I args. #endif /* _XSCREENSAVER_VROOT_H_ */ #ifndef isupper # define isupper(c) ((c) >= 'A' && (c) <= 'Z') #endif #ifndef _tolower # define _tolower(c) ((c) - 'A' + 'a') #endif /* This is defined by the SCREENHACK_MAIN() macro via screenhack.h. */ extern struct xscreensaver_function_table *xscreensaver_function_table; const char *progname; /* used by hacks in error messages */ const char *progclass; /* used by ../utils/resources.c */ Bool mono_p; /* used by hacks */ static XrmOptionDescRec default_options [] = { { "-root", ".root", XrmoptionNoArg, "True" }, { "-window", ".root", XrmoptionNoArg, "False" }, { "-mono", ".mono", XrmoptionNoArg, "True" }, { "-install", ".installColormap", XrmoptionNoArg, "True" }, { "-noinstall",".installColormap", XrmoptionNoArg, "False" }, { "-visual", ".visualID", XrmoptionSepArg, 0 }, { "-window-id", ".windowID", XrmoptionSepArg, 0 }, { "-fps", ".doFPS", XrmoptionNoArg, "True" }, { "-no-fps", ".doFPS", XrmoptionNoArg, "False" }, # ifdef DEBUG_PAIR { "-pair", ".pair", XrmoptionNoArg, "True" }, # endif /* DEBUG_PAIR */ # ifdef HAVE_RECORD_ANIM { "-record-animation", ".recordAnim", XrmoptionSepArg, 0 }, # endif /* HAVE_RECORD_ANIM */ { 0, 0, 0, 0 } }; static char *default_defaults[] = { ".root: false", "*geometry: 1280x720", /* this should be .geometry, but noooo... */ "*mono: false", "*installColormap: false", "*doFPS: false", "*multiSample: false", "*visualID: default", "*windowID: ", "*desktopGrabber: xscreensaver-getimage %s", 0 }; static XrmOptionDescRec *merged_options; static int merged_options_size; static char **merged_defaults; static void merge_options (void) { struct xscreensaver_function_table *ft = xscreensaver_function_table; const XrmOptionDescRec *options = ft->options; const char * const *defaults = ft->defaults; const char *progclass = ft->progclass; int def_opts_size, opts_size; int def_defaults_size, defaults_size; for (def_opts_size = 0; default_options[def_opts_size].option; def_opts_size++) ; for (opts_size = 0; options[opts_size].option; opts_size++) ; merged_options_size = def_opts_size + opts_size; merged_options = (XrmOptionDescRec *) malloc ((merged_options_size + 1) * sizeof(*default_options)); memcpy (merged_options, default_options, (def_opts_size * sizeof(*default_options))); memcpy (merged_options + def_opts_size, options, ((opts_size + 1) * sizeof(*default_options))); for (def_defaults_size = 0; default_defaults[def_defaults_size]; def_defaults_size++) ; for (defaults_size = 0; defaults[defaults_size]; defaults_size++) ; merged_defaults = (char **) malloc ((def_defaults_size + defaults_size + 1) * sizeof (*defaults));; memcpy (merged_defaults, default_defaults, def_defaults_size * sizeof(*defaults)); memcpy (merged_defaults + def_defaults_size, defaults, (defaults_size + 1) * sizeof(*defaults)); /* This totally sucks. Xt should behave like this by default. If the string in `defaults' looks like ".foo", change that to "Progclass.foo". */ { char **s; for (s = merged_defaults; *s; s++) if (**s == '.') { const char *oldr = *s; char *newr = (char *) malloc(strlen(oldr) + strlen(progclass) + 3); strcpy (newr, progclass); strcat (newr, oldr); *s = newr; } else *s = strdup (*s); } } /* Make the X errors print out the name of this program, so we have some clue which one has a bug when they die under the screensaver. */ static int screenhack_ehandler (Display *dpy, XErrorEvent *error) { fprintf (stderr, "\nX error in %s:\n", progname); if (XmuPrintDefaultErrorMessage (dpy, error, stderr)) exit (-1); else fprintf (stderr, " (nonfatal.)\n"); return 0; } static Bool MapNotify_event_p (Display *dpy, XEvent *event, XPointer window) { return (event->xany.type == MapNotify && event->xvisibility.window == (Window) window); } static Atom XA_WM_PROTOCOLS, XA_WM_DELETE_WINDOW; /* Dead-trivial event handling: exits if "q" or "ESC" are typed. Exit if the WM_PROTOCOLS WM_DELETE_WINDOW ClientMessage is received. Returns False if the screen saver should now terminate. */ static Bool screenhack_handle_event_1 (Display *dpy, XEvent *event) { switch (event->xany.type) { case KeyPress: { KeySym keysym; char c = 0; XLookupString (&event->xkey, &c, 1, &keysym, 0); if (c == 'q' || c == 'Q' || c == 3 || /* ^C */ c == 27) /* ESC */ return False; /* exit */ else if (! (keysym >= XK_Shift_L && keysym <= XK_Hyper_R)) XBell (dpy, 0); /* beep for non-chord keys */ } break; case ButtonPress: XBell (dpy, 0); break; case ClientMessage: { if (event->xclient.message_type != XA_WM_PROTOCOLS) { char *s = XGetAtomName(dpy, event->xclient.message_type); if (!s) s = "(null)"; fprintf (stderr, "%s: unknown ClientMessage %s received!\n", progname, s); } else if (event->xclient.data.l[0] != XA_WM_DELETE_WINDOW) { char *s1 = XGetAtomName(dpy, event->xclient.message_type); char *s2 = XGetAtomName(dpy, event->xclient.data.l[0]); if (!s1) s1 = "(null)"; if (!s2) s2 = "(null)"; fprintf (stderr, "%s: unknown ClientMessage %s[%s] received!\n", progname, s1, s2); } else { return False; /* exit */ } } break; } return True; } static Visual * pick_visual (Screen *screen) { struct xscreensaver_function_table *ft = xscreensaver_function_table; if (ft->pick_visual_hook) { Visual *v = ft->pick_visual_hook (screen); if (v) return v; } return get_visual_resource (screen, "visualID", "VisualID", False); } /* Notice when the user has requested a different visual or colormap on a pre-existing window (e.g., "-root -visual truecolor" or "-window-id 0x2c00001 -install") and complain, since when drawing on an existing window, we have no choice about these things. */ static void visual_warning (Screen *screen, Window window, Visual *visual, Colormap cmap, Bool window_p) { struct xscreensaver_function_table *ft = xscreensaver_function_table; char *visual_string = get_string_resource (DisplayOfScreen (screen), "visualID", "VisualID"); Visual *desired_visual = pick_visual (screen); char win[100]; char why[100]; if (window == RootWindowOfScreen (screen)) strcpy (win, "root window"); else sprintf (win, "window 0x%lx", (unsigned long) window); if (window_p) sprintf (why, "-window-id 0x%lx", (unsigned long) window); else strcpy (why, "-root"); if (visual_string && *visual_string) { char *s; for (s = visual_string; *s; s++) if (isupper (*s)) *s = _tolower (*s); if (!strcmp (visual_string, "default") || !strcmp (visual_string, "default") || !strcmp (visual_string, "best")) /* don't warn about these, just silently DWIM. */ ; else if (visual != desired_visual) { fprintf (stderr, "%s: ignoring `-visual %s' because of `%s'.\n", progname, visual_string, why); fprintf (stderr, "%s: using %s's visual 0x%lx.\n", progname, win, XVisualIDFromVisual (visual)); } free (visual_string); } if (visual == DefaultVisualOfScreen (screen) && has_writable_cells (screen, visual) && get_boolean_resource (DisplayOfScreen (screen), "installColormap", "InstallColormap")) { fprintf (stderr, "%s: ignoring `-install' because of `%s'.\n", progname, why); fprintf (stderr, "%s: using %s's colormap 0x%lx.\n", progname, win, (unsigned long) cmap); } if (ft->validate_visual_hook) { if (! ft->validate_visual_hook (screen, win, visual)) exit (1); } } static void fix_fds (void) { /* Bad Things Happen if stdin, stdout, and stderr have been closed (as by the `sh incantation "attraction >&- 2>&-"). When you do that, the X connection gets allocated to one of these fds, and then some random library writes to stderr, and random bits get stuffed down the X pipe, causing "Xlib: sequence lost" errors. So, we cause the first three file descriptors to be open to /dev/null if they aren't open to something else already. This must be done before any other files are opened (or the closing of that other file will again free up one of the "magic" first three FDs.) We do this by opening /dev/null three times, and then closing those fds, *unless* any of them got allocated as #0, #1, or #2, in which case we leave them open. Gag. Really, this crap is technically required of *every* X program, if you want it to be robust in the face of "2>&-". */ int fd0 = open ("/dev/null", O_RDWR); int fd1 = open ("/dev/null", O_RDWR); int fd2 = open ("/dev/null", O_RDWR); if (fd0 > 2) close (fd0); if (fd1 > 2) close (fd1); if (fd2 > 2) close (fd2); } static Boolean screenhack_table_handle_events (Display *dpy, const struct xscreensaver_function_table *ft, Window window, void *closure #ifdef DEBUG_PAIR , Window window2, void *closure2 #endif ) { XtAppContext app = XtDisplayToApplicationContext (dpy); if (XtAppPending (app) & (XtIMTimer|XtIMAlternateInput)) XtAppProcessEvent (app, XtIMTimer|XtIMAlternateInput); while (XPending (dpy)) { XEvent event; XNextEvent (dpy, &event); if (event.xany.type == ConfigureNotify) { if (event.xany.window == window) ft->reshape_cb (dpy, window, closure, event.xconfigure.width, event.xconfigure.height); #ifdef DEBUG_PAIR if (window2 && event.xany.window == window2) ft->reshape_cb (dpy, window2, closure2, event.xconfigure.width, event.xconfigure.height); #endif } else if (event.xany.type == ClientMessage || (! (event.xany.window == window ? ft->event_cb (dpy, window, closure, &event) #ifdef DEBUG_PAIR : (window2 && event.xany.window == window2) ? ft->event_cb (dpy, window2, closure2, &event) #endif : 0))) if (! screenhack_handle_event_1 (dpy, &event)) return False; if (XtAppPending (app) & (XtIMTimer|XtIMAlternateInput)) XtAppProcessEvent (app, XtIMTimer|XtIMAlternateInput); } return True; } static Boolean usleep_and_process_events (Display *dpy, const struct xscreensaver_function_table *ft, Window window, fps_state *fpst, void *closure, unsigned long delay #ifdef DEBUG_PAIR , Window window2, fps_state *fpst2, void *closure2, unsigned long delay2 #endif # ifdef HAVE_RECORD_ANIM , record_anim_state *anim_state # endif ) { do { unsigned long quantum = 33333; /* 30 fps */ if (quantum > delay) quantum = delay; delay -= quantum; XSync (dpy, False); #ifdef HAVE_RECORD_ANIM if (anim_state) screenhack_record_anim (anim_state); #endif if (quantum > 0) { usleep (quantum); if (fpst) fps_slept (fpst, quantum); #ifdef DEBUG_PAIR if (fpst2) fps_slept (fpst2, quantum); #endif } if (! screenhack_table_handle_events (dpy, ft, window, closure #ifdef DEBUG_PAIR , window2, closure2 #endif )) return False; } while (delay > 0); return True; } static void screenhack_do_fps (Display *dpy, Window w, fps_state *fpst, void *closure) { fps_compute (fpst, 0, -1); fps_draw (fpst); } static void run_screenhack_table (Display *dpy, Window window, # ifdef DEBUG_PAIR Window window2, # endif # ifdef HAVE_RECORD_ANIM record_anim_state *anim_state, # endif const struct xscreensaver_function_table *ft) { /* Kludge: even though the init_cb functions are declared to take 2 args, actually call them with 3, for the benefit of xlockmore_init() and xlockmore_setup(). */ void *(*init_cb) (Display *, Window, void *) = (void *(*) (Display *, Window, void *)) ft->init_cb; void (*fps_cb) (Display *, Window, fps_state *, void *) = ft->fps_cb; void *closure = init_cb (dpy, window, ft->setup_arg); fps_state *fpst = fps_init (dpy, window); #ifdef DEBUG_PAIR void *closure2 = 0; fps_state *fpst2 = 0; if (window2) closure2 = init_cb (dpy, window2, ft->setup_arg); if (window2) fpst2 = fps_init (dpy, window2); #endif if (! closure) /* if it returns nothing, it can't possibly be re-entrant. */ abort(); if (! fps_cb) fps_cb = screenhack_do_fps; while (1) { unsigned long delay = ft->draw_cb (dpy, window, closure); #ifdef DEBUG_PAIR unsigned long delay2 = 0; if (window2) delay2 = ft->draw_cb (dpy, window2, closure2); #endif if (fpst) fps_cb (dpy, window, fpst, closure); #ifdef DEBUG_PAIR if (fpst2) fps_cb (dpy, window, fpst2, closure); #endif if (! usleep_and_process_events (dpy, ft, window, fpst, closure, delay #ifdef DEBUG_PAIR , window2, fpst2, closure2, delay2 #endif #ifdef HAVE_RECORD_ANIM , anim_state #endif )) break; } #ifdef HAVE_RECORD_ANIM /* Exiting before target frames hit: write the video anyway. */ if (anim_state) screenhack_record_anim_free (anim_state); #endif ft->free_cb (dpy, window, closure); if (fpst) fps_free (fpst); #ifdef DEBUG_PAIR if (window2) ft->free_cb (dpy, window2, closure2); if (fpst2) fps_free (fpst2); #endif } static Widget make_shell (Screen *screen, Widget toplevel, int width, int height) { Display *dpy = DisplayOfScreen (screen); Visual *visual = pick_visual (screen); Boolean def_visual_p = (toplevel && visual == DefaultVisualOfScreen (screen)); if (width <= 0) width = 600; if (height <= 0) height = 480; if (def_visual_p) { Window window; XtVaSetValues (toplevel, XtNmappedWhenManaged, False, XtNwidth, width, XtNheight, height, XtNinput, True, /* for WM_HINTS */ NULL); XtRealizeWidget (toplevel); window = XtWindow (toplevel); if (get_boolean_resource (dpy, "installColormap", "InstallColormap")) { Colormap cmap = XCreateColormap (dpy, window, DefaultVisualOfScreen (screen), AllocNone); XSetWindowColormap (dpy, window, cmap); } } else { unsigned int bg, bd; Widget new; Colormap cmap = XCreateColormap (dpy, VirtualRootWindowOfScreen(screen), visual, AllocNone); bg = get_pixel_resource (dpy, cmap, "background", "Background"); bd = get_pixel_resource (dpy, cmap, "borderColor", "Foreground"); new = XtVaAppCreateShell (progname, progclass, topLevelShellWidgetClass, dpy, XtNmappedWhenManaged, False, XtNvisual, visual, XtNdepth, visual_depth (screen, visual), XtNwidth, width, XtNheight, height, XtNcolormap, cmap, XtNbackground, (Pixel) bg, XtNborderColor, (Pixel) bd, XtNinput, True, /* for WM_HINTS */ NULL); if (!toplevel) /* kludge for the second window in -pair mode... */ XtVaSetValues (new, XtNx, 0, XtNy, 550, NULL); XtRealizeWidget (new); toplevel = new; } return toplevel; } static void init_window (Display *dpy, Widget toplevel, const char *title) { Window window; XWindowAttributes xgwa; XtPopup (toplevel, XtGrabNone); XtVaSetValues (toplevel, XtNtitle, title, NULL); /* Select KeyPress, and announce that we accept WM_DELETE_WINDOW. */ window = XtWindow (toplevel); XGetWindowAttributes (dpy, window, &xgwa); XSelectInput (dpy, window, (xgwa.your_event_mask | KeyPressMask | KeyReleaseMask | ButtonPressMask | ButtonReleaseMask)); XChangeProperty (dpy, window, XA_WM_PROTOCOLS, XA_ATOM, 32, PropModeReplace, (unsigned char *) &XA_WM_DELETE_WINDOW, 1); } int main (int argc, char **argv) { struct xscreensaver_function_table *ft = xscreensaver_function_table; XWindowAttributes xgwa; Widget toplevel; Display *dpy; Window window; # ifdef DEBUG_PAIR Window window2 = 0; Widget toplevel2 = 0; # endif #ifdef HAVE_RECORD_ANIM record_anim_state *anim_state = 0; #endif XtAppContext app; Bool root_p; Window on_window = 0; XEvent event; Boolean dont_clear; char version[255]; fix_fds(); progname = argv[0]; /* reset later */ progclass = ft->progclass; if (ft->setup_cb) ft->setup_cb (ft, ft->setup_arg); merge_options (); #ifdef __sgi /* We have to do this on SGI to prevent the background color from being overridden by the current desktop color scheme (we'd like our backgrounds to be black, thanks.) This should be the same as setting the "*useSchemes: none" resource, but it's not -- if that resource is present in the `default_defaults' above, it doesn't work, though it does work when passed as an -xrm arg on the command line. So screw it, turn them off from C instead. */ SgiUseSchemes ("none"); #endif /* __sgi */ toplevel = XtAppInitialize (&app, progclass, merged_options, merged_options_size, &argc, argv, merged_defaults, 0, 0); dpy = XtDisplay (toplevel); XtGetApplicationNameAndClass (dpy, (char **) &progname, (char **) &progclass); /* half-assed way of avoiding buffer-overrun attacks. */ if (strlen (progname) >= 100) ((char *) progname)[100] = 0; XSetErrorHandler (screenhack_ehandler); XA_WM_PROTOCOLS = XInternAtom (dpy, "WM_PROTOCOLS", False); XA_WM_DELETE_WINDOW = XInternAtom (dpy, "WM_DELETE_WINDOW", False); { char *v = (char *) strdup(strchr(screensaver_id, ' ')); char *s1, *s2, *s3, *s4; const char *ot = get_string_resource (dpy, "title", "Title"); s1 = (char *) strchr(v, ' '); s1++; s2 = (char *) strchr(s1, ' '); s3 = (char *) strchr(v, '('); s3++; s4 = (char *) strchr(s3, ')'); *s2 = 0; *s4 = 0; if (ot && !*ot) ot = 0; sprintf (version, "%.50s%s%s: from the XScreenSaver %s distribution (%s)", (ot ? ot : ""), (ot ? ": " : ""), progclass, s1, s3); free(v); } if (argc > 1) { const char *s; int i; int x = 18; int end = 78; Bool help_p = (!strcmp(argv[1], "-help") || !strcmp(argv[1], "--help")); fprintf (stderr, "%s\n", version); for (s = progclass; *s; s++) fprintf(stderr, " "); fprintf (stderr, " https://www.jwz.org/xscreensaver/\n\n"); if (!help_p) fprintf(stderr, "Unrecognised option: %s\n", argv[1]); fprintf (stderr, "Options include: "); for (i = 0; i < merged_options_size; i++) { char *sw = merged_options [i].option; Bool argp = (merged_options [i].argKind == XrmoptionSepArg); int size = strlen (sw) + (argp ? 6 : 0) + 2; if (x + size >= end) { fprintf (stderr, "\n\t\t "); x = 18; } x += size; fprintf (stderr, "%s", sw); if (argp) fprintf (stderr, " "); if (i != merged_options_size - 1) fprintf (stderr, ", "); } fprintf (stderr, ".\n"); #if 0 if (help_p) { fprintf (stderr, "\nResources:\n\n"); for (i = 0; i < merged_options_size; i++) { const char *opt = merged_options [i].option; const char *res = merged_options [i].specifier + 1; const char *val = merged_options [i].value; char *s = get_string_resource (dpy, (char *) res, (char *) res); if (s) { int L = strlen(s); while (L > 0 && (s[L-1] == ' ' || s[L-1] == '\t')) s[--L] = 0; } fprintf (stderr, " %-16s %-18s ", opt, res); if (merged_options [i].argKind == XrmoptionSepArg) { fprintf (stderr, "[%s]", (s ? s : "?")); } else { fprintf (stderr, "%s", (val ? val : "(null)")); if (val && s && !strcasecmp (val, s)) fprintf (stderr, " [default]"); } fprintf (stderr, "\n"); } fprintf (stderr, "\n"); } #endif exit (help_p ? 0 : 1); } { char **s; for (s = merged_defaults; *s; s++) free(*s); } free (merged_options); free (merged_defaults); merged_options = 0; merged_defaults = 0; dont_clear = get_boolean_resource (dpy, "dontClearRoot", "Boolean"); mono_p = get_boolean_resource (dpy, "mono", "Boolean"); if (CellsOfScreen (DefaultScreenOfDisplay (dpy)) <= 2) mono_p = True; root_p = get_boolean_resource (dpy, "root", "Boolean"); { char *s = get_string_resource (dpy, "windowID", "WindowID"); if (s && *s) on_window = get_integer_resource (dpy, "windowID", "WindowID"); if (s) free (s); } if (on_window) { window = (Window) on_window; XtDestroyWidget (toplevel); XGetWindowAttributes (dpy, window, &xgwa); visual_warning (xgwa.screen, window, xgwa.visual, xgwa.colormap, True); /* Select KeyPress and resize events on the external window. */ xgwa.your_event_mask |= KeyPressMask | StructureNotifyMask; XSelectInput (dpy, window, xgwa.your_event_mask); /* Select ButtonPress and ButtonRelease events on the external window, if no other app has already selected them (only one app can select ButtonPress at a time: BadAccess results.) */ if (! (xgwa.all_event_masks & (ButtonPressMask | ButtonReleaseMask))) XSelectInput (dpy, window, (xgwa.your_event_mask | ButtonPressMask | ButtonReleaseMask)); } else if (root_p) { window = VirtualRootWindowOfScreen (XtScreen (toplevel)); XtDestroyWidget (toplevel); XGetWindowAttributes (dpy, window, &xgwa); /* With RANDR, the root window can resize! */ XSelectInput (dpy, window, xgwa.your_event_mask | StructureNotifyMask); visual_warning (xgwa.screen, window, xgwa.visual, xgwa.colormap, False); } else { Widget new = make_shell (XtScreen (toplevel), toplevel, toplevel->core.width, toplevel->core.height); if (new != toplevel) { XtDestroyWidget (toplevel); toplevel = new; } init_window (dpy, toplevel, version); window = XtWindow (toplevel); XGetWindowAttributes (dpy, window, &xgwa); # ifdef DEBUG_PAIR if (get_boolean_resource (dpy, "pair", "Boolean")) { toplevel2 = make_shell (xgwa.screen, 0, toplevel->core.width, toplevel->core.height); init_window (dpy, toplevel2, version); window2 = XtWindow (toplevel2); } # endif /* DEBUG_PAIR */ } if (!dont_clear) { unsigned int bg = get_pixel_resource (dpy, xgwa.colormap, "background", "Background"); XSetWindowBackground (dpy, window, bg); XClearWindow (dpy, window); # ifdef DEBUG_PAIR if (window2) { XSetWindowBackground (dpy, window2, bg); XClearWindow (dpy, window2); } # endif } if (!root_p && !on_window) /* wait for it to be mapped */ XIfEvent (dpy, &event, MapNotify_event_p, (XPointer) window); XSync (dpy, False); /* This is the one and only place that the random-number generator is seeded in any screenhack. You do not need to seed the RNG again, it is done for you before your code is invoked. */ # undef ya_rand_init ya_rand_init (0); #ifdef HAVE_RECORD_ANIM { int frames = get_integer_resource (dpy, "recordAnim", "Integer"); if (frames > 0) anim_state = screenhack_record_anim_init (xgwa.screen, window, frames); } #endif run_screenhack_table (dpy, window, # ifdef DEBUG_PAIR window2, # endif # ifdef HAVE_RECORD_ANIM anim_state, # endif ft); #ifdef HAVE_RECORD_ANIM if (anim_state) screenhack_record_anim_free (anim_state); #endif XtDestroyWidget (toplevel); XtDestroyApplicationContext (app); return 0; } xscreensaver-5.36/hacks/sierpinski.c000644 000767 000024 00000014314 12701612217 017555 0ustar00jwzstaff000000 000000 /* -*- Mode: C; tab-width: 4 -*- */ /* sierpinski --- Sierpinski's triangle fractal */ #if 0 static const char sccsid[] = "@(#)sierpinski.c 5.00 2000/11/01 xlockmore"; #endif /*- * Copyright (c) 1996 by Desmond Daignault * * Permission to use, copy, modify, and distribute this software and its * documentation for any purpose and without fee is hereby granted, * provided that the above copyright notice appear in all copies and that * both that copyright notice and this permission notice appear in * supporting documentation. * * This file is provided AS IS with no warranties of any kind. The author * shall have no liability with respect to the infringement of copyrights, * trade secrets or any patents by this file or any part thereof. In no * event will the author be liable for any lost revenue or profits or * other special, indirect and consequential damages. * * Dots initially appear where they "should not". Later they get * "focused". This is correct behavior. * * Revision History: * 01-Nov-2000: Allocation checks * 18-Sep-1997: 3D version Antti Kuntsi . * 20-May-1997: Changed the name tri to sierpinski for more compatiblity * 10-May-1997: Jamie Zawinski compatible with xscreensaver * 05-Sep-1996: Desmond Daignault Datatimes Incorporated * . */ #ifdef STANDALONE # define MODE_sierpinski # define DEFAULTS "*delay: 400000 \n" \ "*count: 2000 \n" \ "*cycles: 100 \n" \ "*ncolors: 64 \n" \ "*fpsSolid: true \n" \ "*ignoreRotation: True \n" \ # define BRIGHT_COLORS # define sierpinski_handle_event 0 # include "xlockmore.h" /* in xscreensaver distribution */ #else /* STANDALONE */ # include "xlock.h" /* in xlockmore distribution */ #endif /* STANDALONE */ #ifdef MODE_sierpinski ENTRYPOINT ModeSpecOpt sierpinski_opts = {0, (XrmOptionDescRec *) NULL, 0, (argtype *) NULL, (OptionStruct *) NULL}; #ifdef USE_MODULES ModStruct sierpinski_description = {"sierpinski", "init_sierpinski", "draw_sierpinski", "release_sierpinski", "refresh_sierpinski", "init_sierpinski", (char *) NULL, &sierpinski_opts, 400000, 2000, 100, 1, 64, 1.0, "", "Shows Sierpinski's triangle", 0, NULL}; #endif #define MAXCORNERS 4 typedef struct { int width, height; int time; int px, py; int total_npoints; int corners; int npoints[MAXCORNERS]; unsigned long colors[MAXCORNERS]; XPoint *pointBuffer[MAXCORNERS]; XPoint vertex[MAXCORNERS]; } sierpinskistruct; static sierpinskistruct *tris = (sierpinskistruct *) NULL; static void startover(ModeInfo * mi) { int j; sierpinskistruct *sp = &tris[MI_SCREEN(mi)]; if (MI_NPIXELS(mi) > 2) { if (sp->corners == 3) { sp->colors[0] = (NRAND(MI_NPIXELS(mi))); sp->colors[1] = (sp->colors[0] + MI_NPIXELS(mi) / 7 + NRAND(2 * MI_NPIXELS(mi) / 7 + 1)) % MI_NPIXELS(mi); sp->colors[2] = (sp->colors[0] + 4 * MI_NPIXELS(mi) / 7 + NRAND(2 * MI_NPIXELS(mi) / 7 + 1)) % MI_NPIXELS(mi); } else if (sp->corners == 4) { sp->colors[0] = (NRAND(MI_NPIXELS(mi))); sp->colors[1] = (sp->colors[0] + MI_NPIXELS(mi) / 7 + NRAND(MI_NPIXELS(mi) / 7 + 1)) % MI_NPIXELS(mi); sp->colors[2] = (sp->colors[0] + 3 * MI_NPIXELS(mi) / 7 + NRAND(MI_NPIXELS(mi) / 7 + 1)) % MI_NPIXELS(mi); sp->colors[3] = (sp->colors[0] + 5 * MI_NPIXELS(mi) / 7 + NRAND(MI_NPIXELS(mi) / 7 + 1)) % MI_NPIXELS(mi); } else { (void) fprintf(stderr, "colors not set for %d corners\n", sp->corners); } } for (j = 0; j < sp->corners; j++) { sp->vertex[j].x = NRAND(sp->width); sp->vertex[j].y = NRAND(sp->height); } sp->px = NRAND(sp->width); sp->py = NRAND(sp->height); sp->time = 0; MI_CLEARWINDOW(mi); } static void free_sierpinski(sierpinskistruct *sp) { int corner; for (corner = 0; corner < MAXCORNERS; corner++) if (sp->pointBuffer[corner] != NULL) { (void) free((void *) sp->pointBuffer[corner]); sp->pointBuffer[corner] = (XPoint *) NULL; } } ENTRYPOINT void init_sierpinski(ModeInfo * mi) { int i; sierpinskistruct *sp; if (tris == NULL) { if ((tris = (sierpinskistruct *) calloc(MI_NUM_SCREENS(mi), sizeof (sierpinskistruct))) == NULL) return; } sp = &tris[MI_SCREEN(mi)]; sp->width = MI_WIDTH(mi); sp->height = MI_HEIGHT(mi); sp->total_npoints = MI_COUNT(mi); if (sp->total_npoints < 1) sp->total_npoints = 1; sp->corners = MI_SIZE(mi); if (sp->corners < 3 || sp->corners > 4) { sp->corners = (int) (LRAND() & 1) + 3; } for (i = 0; i < sp->corners; i++) { if (!sp->pointBuffer[i]) if ((sp->pointBuffer[i] = (XPoint *) malloc(sp->total_npoints * sizeof (XPoint))) == NULL) { free_sierpinski(sp); return; } } startover(mi); } ENTRYPOINT void draw_sierpinski(ModeInfo * mi) { Display *display = MI_DISPLAY(mi); GC gc = MI_GC(mi); XPoint *xp[MAXCORNERS]; int i, v; sierpinskistruct *sp; if (tris == NULL) return; sp = &tris[MI_SCREEN(mi)]; if (sp->pointBuffer[0] == NULL) return; MI_IS_DRAWN(mi) = True; if (MI_NPIXELS(mi) <= 2) XSetForeground(display, gc, MI_WHITE_PIXEL(mi)); for (i = 0; i < sp->corners; i++) xp[i] = sp->pointBuffer[i]; for (i = 0; i < sp->total_npoints; i++) { v = NRAND(sp->corners); sp->px = (sp->px + sp->vertex[v].x) / 2; sp->py = (sp->py + sp->vertex[v].y) / 2; xp[v]->x = sp->px; xp[v]->y = sp->py; xp[v]++; sp->npoints[v]++; } for (i = 0; i < sp->corners; i++) { if (MI_NPIXELS(mi) > 2) XSetForeground(display, gc, MI_PIXEL(mi, sp->colors[i])); XDrawPoints(display, MI_WINDOW(mi), gc, sp->pointBuffer[i], sp->npoints[i], CoordModeOrigin); sp->npoints[i] = 0; } if (++sp->time >= MI_CYCLES(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) { if (tris != NULL) { int screen; for (screen = 0; screen < MI_NUM_SCREENS(mi); screen++) free_sierpinski(&tris[screen]); (void) free((void *) tris); tris = (sierpinskistruct *) NULL; } } ENTRYPOINT void refresh_sierpinski(ModeInfo * mi) { MI_CLEARWINDOW(mi); } XSCREENSAVER_MODULE ("Sierpinski", sierpinski) #endif /* MODE_sierpinski */ xscreensaver-5.36/hacks/slidescreen.c000664 000767 000024 00000035162 12717747776 017735 0ustar00jwzstaff000000 000000 /* xscreensaver, Copyright (c) 1992-2014 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. */ #include "screenhack.h" enum { DOWN = 0, LEFT, UP, RIGHT }; enum { VERTICAL, HORIZONTAL }; struct state { Display *dpy; Window window; int grid_size; int pix_inc; int hole_x, hole_y; int bitmap_w, bitmap_h; int xoff, yoff; int grid_w, grid_h; int delay, delay2; int duration; GC gc; unsigned long fg, bg; int max_width, max_height; int early_i; int draw_rnd, draw_i; int draw_x, draw_y, draw_ix, draw_iy, draw_dx, draw_dy; int draw_dir, draw_w, draw_h, draw_size, draw_inc; int draw_last; int draw_initted; time_t start_time; async_load_state *img_loader; }; static void * slidescreen_init (Display *dpy, Window window) { struct state *st = (struct state *) calloc (1, sizeof(*st)); XWindowAttributes xgwa; XGCValues gcv; long gcflags; st->dpy = dpy; st->window = window; 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); st->max_width = xgwa.width; st->max_height = xgwa.height; st->delay = get_integer_resource (st->dpy, "delay", "Integer"); st->delay2 = get_integer_resource (st->dpy, "delay2", "Integer"); st->duration = get_integer_resource (st->dpy, "duration", "Seconds"); st->grid_size = get_integer_resource (st->dpy, "gridSize", "Integer"); st->pix_inc = get_integer_resource (st->dpy, "pixelIncrement", "Integer"); /* Don't let the grid be smaller than 5x5 */ while (st->grid_size > xgwa.width / 5) st->grid_size /= 2; while (st->grid_size > xgwa.height / 5) st->grid_size /= 2; if (st->delay < 0) st->delay = 0; if (st->delay2 < 0) st->delay2 = 0; if (st->duration < 1) st->duration = 1; if (st->pix_inc < 1) st->pix_inc = 1; if (st->grid_size < 1) st->grid_size = 1; { XColor fgc, bgc; char *fgs = get_string_resource(st->dpy, "background", "Background"); char *bgs = get_string_resource(st->dpy, "foreground", "Foreground"); Bool fg_ok, bg_ok; if (!XParseColor (st->dpy, xgwa.colormap, fgs, &fgc)) XParseColor (st->dpy, xgwa.colormap, "black", &bgc); if (!XParseColor (st->dpy, xgwa.colormap, bgs, &bgc)) XParseColor (st->dpy, xgwa.colormap, "gray", &fgc); fg_ok = XAllocColor (st->dpy, xgwa.colormap, &fgc); bg_ok = XAllocColor (st->dpy, xgwa.colormap, &bgc); /* If we weren't able to allocate the two colors we want from the colormap (which is likely if the screen has been grabbed on an 8-bit SGI visual -- don't ask) then just go through the map and find the closest color to the ones we wanted, and use those pixels without actually allocating them. */ if (fg_ok) st->fg = fgc.pixel; else st->fg = 0; if (bg_ok) st->bg = bgc.pixel; else st->bg = 1; #ifndef HAVE_JWXYZ if (!fg_ok || bg_ok) { int i; unsigned long fgd = ~0; unsigned long bgd = ~0; int max = visual_cells (xgwa.screen, xgwa.visual); XColor *all = (XColor *) calloc(sizeof (*all), max); for (i = 0; i < max; i++) { all[i].flags = DoRed|DoGreen|DoBlue; all[i].pixel = i; } XQueryColors (st->dpy, xgwa.colormap, all, max); for(i = 0; i < max; i++) { long rd, gd, bd; unsigned long dd; if (!fg_ok) { rd = (all[i].red >> 8) - (fgc.red >> 8); gd = (all[i].green >> 8) - (fgc.green >> 8); bd = (all[i].blue >> 8) - (fgc.blue >> 8); if (rd < 0) rd = -rd; if (gd < 0) gd = -gd; if (bd < 0) bd = -bd; dd = (rd << 1) + (gd << 2) + bd; if (dd < fgd) { fgd = dd; st->fg = all[i].pixel; if (dd == 0) fg_ok = True; } } if (!bg_ok) { rd = (all[i].red >> 8) - (bgc.red >> 8); gd = (all[i].green >> 8) - (bgc.green >> 8); bd = (all[i].blue >> 8) - (bgc.blue >> 8); if (rd < 0) rd = -rd; if (gd < 0) gd = -gd; if (bd < 0) bd = -bd; dd = (rd << 1) + (gd << 2) + bd; if (dd < bgd) { bgd = dd; st->bg = all[i].pixel; if (dd == 0) bg_ok = True; } } if (fg_ok && bg_ok) break; } XFree(all); } #endif /* !HAVE_JWXYZ */ } gcv.foreground = st->fg; gcv.function = GXcopy; gcv.subwindow_mode = IncludeInferiors; gcflags = GCForeground |GCFunction; if (use_subwindow_mode_p(xgwa.screen, st->window)) /* see grabscreen.c */ gcflags |= GCSubwindowMode; st->gc = XCreateGC (st->dpy, st->window, gcflags, &gcv); return st; } static void draw_grid (struct state *st) { int i; Drawable d; int border; XWindowAttributes xgwa; XGetWindowAttributes (st->dpy, st->window, &xgwa); border = get_integer_resource (st->dpy, "internalBorderWidth", "InternalBorderWidth"); XGetWindowAttributes (st->dpy, st->window, &xgwa); st->bitmap_w = xgwa.width; st->bitmap_h = xgwa.height; st->grid_w = st->bitmap_w / st->grid_size; st->grid_h = st->bitmap_h / st->grid_size; st->hole_x = random () % st->grid_w; st->hole_y = random () % st->grid_h; st->xoff = (st->bitmap_w - (st->grid_w * st->grid_size)) / 2; st->yoff = (st->bitmap_h - (st->grid_h * st->grid_size)) / 2; d = st->window; st->early_i = -10; st->draw_last = -1; if (border) { int half = border/2; int half2 = (border & 1 ? half+1 : half); XSetForeground(st->dpy, st->gc, st->bg); for (i = 0; i < st->bitmap_w; i += st->grid_size) { int j; for (j = 0; j < st->bitmap_h; j += st->grid_size) XDrawRectangle (st->dpy, d, st->gc, st->xoff+i+half2, st->yoff+j+half2, st->grid_size-border-1, st->grid_size-border-1); } XSetForeground(st->dpy, st->gc, st->fg); for (i = 0; i <= st->bitmap_w; i += st->grid_size) XFillRectangle (st->dpy, d, st->gc, st->xoff+i-half, st->yoff, border, st->bitmap_h); for (i = 0; i <= st->bitmap_h; i += st->grid_size) XFillRectangle (st->dpy, d, st->gc, st->xoff, st->yoff+i-half, st->bitmap_w, border); } if (st->xoff) { XFillRectangle (st->dpy, d, st->gc, 0, 0, st->xoff, st->bitmap_h); XFillRectangle (st->dpy, d, st->gc, st->bitmap_w - st->xoff, 0, st->xoff, st->bitmap_h); } if (st->yoff) { XFillRectangle (st->dpy, d, st->gc, 0, 0, st->bitmap_w, st->yoff); XFillRectangle (st->dpy, d, st->gc, 0, st->bitmap_h - st->yoff, st->bitmap_w, st->yoff); } } static int slidescreen_draw_early (struct state *st) { while (st->early_i < 0) { st->early_i++; return 1; } /* for (early_i = 0; early_i < grid_size; early_i += pix_inc) */ { XPoint points [3]; points[0].x = st->xoff + st->grid_size * st->hole_x; points[0].y = st->yoff + st->grid_size * st->hole_y; points[1].x = points[0].x + st->grid_size; points[1].y = points[0].y; points[2].x = points[0].x; points[2].y = points[0].y + st->early_i; XFillPolygon (st->dpy, st->window, st->gc, points, 3, Convex, CoordModeOrigin); points[1].x = points[0].x; points[1].y = points[0].y + st->grid_size; points[2].x = points[0].x + st->early_i; points[2].y = points[0].y + st->grid_size; XFillPolygon (st->dpy, st->window, st->gc, points, 3, Convex, CoordModeOrigin); points[0].x = points[1].x + st->grid_size; points[0].y = points[1].y; points[2].x = points[0].x; points[2].y = points[0].y - st->early_i; XFillPolygon (st->dpy, st->window, st->gc, points, 3, Convex, CoordModeOrigin); points[1].x = points[0].x; points[1].y = points[0].y - st->grid_size; points[2].x = points[1].x - st->early_i; points[2].y = points[1].y; XFillPolygon (st->dpy, st->window, st->gc, points, 3, Convex, CoordModeOrigin); } st->early_i += st->pix_inc; if (st->early_i < st->grid_size) return 1; XFillRectangle (st->dpy, st->window, st->gc, st->xoff + st->grid_size * st->hole_x, st->yoff + st->grid_size * st->hole_y, st->grid_size, st->grid_size); return 0; } static unsigned long slidescreen_draw (Display *dpy, Window window, void *closure) { struct state *st = (struct state *) closure; int this_delay = st->delay; /* this code is a total kludge, but who cares, it works... */ if (st->img_loader) /* still loading */ { st->img_loader = load_image_async_simple (st->img_loader, 0, 0, 0, 0, 0); if (! st->img_loader) { /* just finished */ st->start_time = time ((time_t *) 0); draw_grid (st); } return st->delay; } if (!st->img_loader && st->start_time + st->duration < time ((time_t *) 0)) { 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); st->draw_initted = 0; return st->delay; } if (! st->draw_initted) { if (!slidescreen_draw_early (st)) { st->draw_initted = 1; return st->delay2; } else return st->delay; } if (st->draw_i == 0) { if (st->draw_last == -1) st->draw_last = random () % 2; /* alternate between horizontal and vertical slides */ /* note that draw_dir specifies the direction the _hole_ moves, not the tiles */ if (st->draw_last == VERTICAL) { if (((st->grid_w > 1) ? st->draw_rnd = random () % (st->grid_w - 1) : 0) < st->hole_x) { st->draw_dx = -1; st->draw_dir = LEFT; st->hole_x -= st->draw_rnd; } else { st->draw_dx = 1; st->draw_dir = RIGHT; st->draw_rnd -= st->hole_x; } st->draw_dy = 0; st->draw_w = st->draw_size = st->draw_rnd + 1; st->draw_h = 1; st->draw_last = HORIZONTAL; } else { if (((st->grid_h > 1) ? st->draw_rnd = random () % (st->grid_h - 1) : 0) < st->hole_y) { st->draw_dy = -1; st->draw_dir = UP; st->hole_y -= st->draw_rnd; } else { st->draw_dy = 1; st->draw_dir = DOWN; st->draw_rnd -= st->hole_y; } st->draw_dx = 0; st->draw_h = st->draw_size = st->draw_rnd + 1; st->draw_w = 1; st->draw_last = VERTICAL; } st->draw_ix = st->draw_x = st->xoff + (st->hole_x + st->draw_dx) * st->grid_size; st->draw_iy = st->draw_y = st->yoff + (st->hole_y + st->draw_dy) * st->grid_size; st->draw_inc = st->pix_inc; } /* for (draw_i = 0; draw_i < grid_size; draw_i += draw_inc) */ { int fx, fy, tox, toy; if (st->draw_inc + st->draw_i > st->grid_size) st->draw_inc = st->grid_size - st->draw_i; tox = st->draw_x - st->draw_dx * st->draw_inc; toy = st->draw_y - st->draw_dy * st->draw_inc; fx = (st->draw_x < 0 ? 0 : st->draw_x > st->max_width ? st->max_width : st->draw_x); fy = (st->draw_y < 0 ? 0 : st->draw_y > st->max_height ? st->max_height : st->draw_y); tox = (tox < 0 ? 0 : tox > st->max_width ? st->max_width : tox); toy = (toy < 0 ? 0 : toy > st->max_height ? st->max_height : toy); XCopyArea (st->dpy, st->window, st->window, st->gc, fx, fy, st->grid_size * st->draw_w, st->grid_size * st->draw_h, tox, toy); st->draw_x -= st->draw_dx * st->draw_inc; st->draw_y -= st->draw_dy * st->draw_inc; switch (st->draw_dir) { case DOWN: XFillRectangle (st->dpy, st->window, st->gc, st->draw_ix, st->draw_y + st->grid_size * st->draw_h, st->grid_size * st->draw_w, st->draw_iy - st->draw_y); break; case LEFT: XFillRectangle (st->dpy, st->window, st->gc, st->draw_ix, st->draw_iy, st->draw_x - st->draw_ix, st->grid_size * st->draw_h); break; case UP: XFillRectangle (st->dpy, st->window, st->gc, st->draw_ix, st->draw_iy, st->grid_size * st->draw_w, st->draw_y - st->draw_iy); break; case RIGHT: XFillRectangle (st->dpy, st->window, st->gc, st->draw_x + st->grid_size * st->draw_w, st->draw_iy, st->draw_ix - st->draw_x, st->grid_size * st->draw_h); break; } } st->draw_i += st->draw_inc; if (st->draw_i >= st->grid_size) { st->draw_i = 0; switch (st->draw_dir) { case DOWN: st->hole_y += st->draw_size; break; case LEFT: st->hole_x--; break; case UP: st->hole_y--; break; case RIGHT: st->hole_x += st->draw_size; break; } this_delay = st->delay2; } return this_delay; } 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 slidescreen_event (Display *dpy, Window window, void *closure, XEvent *event) { struct state *st = (struct state *) closure; if (screenhack_event_helper (dpy, window, event)) { st->start_time = 0; return True; } return False; } static void slidescreen_free (Display *dpy, Window window, void *closure) { struct state *st = (struct state *) closure; XFreeGC (dpy, st->gc); free (st); } static const char *slidescreen_defaults [] = { "*dontClearRoot: True", "*fpsSolid: true", #ifdef __sgi /* really, HAVE_READ_DISPLAY_EXTENSION */ "*visualID: Best", #endif ".background: Black", ".foreground: #BEBEBE", "*gridSize: 70", "*pixelIncrement: 10", "*internalBorderWidth: 4", "*delay: 50000", "*delay2: 1000000", "*duration: 120", #ifdef HAVE_MOBILE "*ignoreRotation: True", "*rotateImages: True", #endif 0 }; static XrmOptionDescRec slidescreen_options [] = { { "-grid-size", ".gridSize", XrmoptionSepArg, 0 }, { "-ibw", ".internalBorderWidth", XrmoptionSepArg, 0 }, { "-increment", ".pixelIncrement", XrmoptionSepArg, 0 }, { "-delay", ".delay", XrmoptionSepArg, 0 }, { "-delay2", ".delay2", XrmoptionSepArg, 0 }, {"-duration", ".duration", XrmoptionSepArg, 0 }, { 0, 0, 0, 0 } }; XSCREENSAVER_MODULE ("SlideScreen", slidescreen) xscreensaver-5.36/hacks/slip.c000644 000767 000024 00000022202 12701612217 016337 0ustar00jwzstaff000000 000000 /* -*- Mode: C; tab-width: 4 -*- */ /* slip --- lots of slipping blits */ #if 0 static const char sccsid[] = "@(#)slip.c 5.00 2000/11/01 xlockmore"; #endif /*- * Copyright (c) 1992 by Scott Draves * * Permission to use, copy, modify, and distribute this software and its * documentation for any purpose and without fee is hereby granted, * provided that the above copyright notice appear in all copies and that * both that copyright notice and this permission notice appear in * supporting documentation. * * This file is provided AS IS with no warranties of any kind. The author * shall have no liability with respect to the infringement of copyrights, * trade secrets or any patents by this file or any part thereof. In no * event will the author be liable for any lost revenue or profits or * other special, indirect and consequential damages. * * 01-Nov-2000: Allocation checks * 10-May-1997: Jamie Zawinski compatible with xscreensaver * 01-Dec-1995: Patched for VMS */ #ifdef STANDALONE # define MODE_slip # define DEFAULTS "*delay: 50000 \n" \ "*count: 35 \n" \ "*cycles: 50 \n" \ "*ncolors: 200 \n" \ "*fpsSolid: true \n" \ "*ignoreRotation: True \n" \ # define refresh_slip 0 # include "xlockmore.h" /* in xscreensaver distribution */ #else /* STANDALONE */ # include "xlock.h" /* in xlockmore distribution */ #endif /* STANDALONE */ #ifdef MODE_slip ENTRYPOINT ModeSpecOpt slip_opts = {0, (XrmOptionDescRec *) NULL, 0, (argtype *) NULL, (OptionStruct *) NULL}; #ifdef USE_MODULES ModStruct slip_description = {"slip", "init_slip", "draw_slip", "release_slip", "init_slip", "init_slip", (char *) NULL, &slip_opts, 50000, 35, 50, 1, 64, 1.0, "", "Shows slipping blits", 0, NULL}; #endif typedef struct { int width, height; int nblits_remaining; int blit_width, blit_height; int mode; int first_time; int backwards; short lasthalf; int stage; unsigned long r; Bool image_loading_p; } slipstruct; static slipstruct *slips = (slipstruct *) NULL; static short halfrandom(slipstruct *sp, int mv) { unsigned long r; if (sp->lasthalf) { r = sp->lasthalf; sp->lasthalf = 0; } else { r = LRAND(); sp->lasthalf = (short) (r >> 16); } return r % mv; } static int erandom(slipstruct *sp, int mv) { int res; if (0 == sp->stage) { sp->r = LRAND(); sp->stage = 7; } res = (int) (sp->r & 0xf); sp->r = sp->r >> 4; sp->stage--; if (res & 8) return res & mv; else return -(res & mv); } #ifdef STANDALONE static void image_loaded_cb (Screen *screen, Window w, Drawable d, const char *name, XRectangle *geom, void *closure) { ModeInfo *mi = (ModeInfo *) closure; slipstruct *sp = &slips[MI_SCREEN(mi)]; Display *dpy = DisplayOfScreen (screen); XCopyArea (dpy, d, w, mi->gc, 0, 0, sp->width, sp->height, 0, 0); XFreePixmap (dpy, d); sp->image_loading_p = False; } #endif /* STANDALONE */ static void prepare_screen(ModeInfo * mi, slipstruct * sp) { Display *display = MI_DISPLAY(mi); GC gc = MI_GC(mi); int i, n, w = sp->width / 20; int not_solid = halfrandom(sp, 10); sp->backwards = (int) (LRAND() & 1); /* jwz: go the other way sometimes */ if (sp->first_time || !halfrandom(sp, 10)) { MI_CLEARWINDOW(mi); n = 300; } else { if (halfrandom(sp, 5)) return; if (halfrandom(sp, 5)) n = 100; else n = 2000; } if (MI_NPIXELS(mi) > 2) XSetForeground(display, gc, MI_PIXEL(mi, halfrandom(sp, MI_NPIXELS(mi)))); else if (halfrandom(sp, 2)) XSetForeground(display, gc, MI_WHITE_PIXEL(mi)); else XSetForeground(display, gc, MI_BLACK_PIXEL(mi)); for (i = 0; i < n; i++) { int ww = ((w / 2) + halfrandom(sp, MAX(w, 1))); if (not_solid) { if (MI_NPIXELS(mi) > 2) XSetForeground(display, gc, MI_PIXEL(mi, halfrandom(sp, MI_NPIXELS(mi)))); else if (halfrandom(sp, 2)) XSetForeground(display, gc, MI_WHITE_PIXEL(mi)); else XSetForeground(display, gc, MI_BLACK_PIXEL(mi)); } XFillRectangle(display, MI_WINDOW(mi), gc, halfrandom(sp, MAX(sp->width - ww, 1)), halfrandom(sp, MAX(sp->height - ww, 1)), ww, ww); } sp->first_time = 0; #ifdef STANDALONE /* jwz -- sometimes hack the desktop image! */ if (!sp->image_loading_p && (1||halfrandom(sp, 2) == 0)) { /* Load it into a pixmap so that the "Loading" message and checkerboard don't show up on the window -- we keep running while the image is in progress... */ Pixmap p = XCreatePixmap (MI_DISPLAY(mi), MI_WINDOW(mi), sp->width, sp->height, mi->xgwa.depth); sp->image_loading_p = True; load_image_async (ScreenOfDisplay (MI_DISPLAY(mi), 0/*####MI_SCREEN(mi)*/), MI_WINDOW(mi), p, image_loaded_cb, mi); } #endif } static int quantize(double d) { int i = (int) floor(d); double f = d - i; if ((LRAND() & 0xff) < f * 0xff) i++; return i; } ENTRYPOINT void reshape_slip (ModeInfo * mi, int w, int h) { slipstruct *sp = &slips[MI_SCREEN(mi)]; sp->width = w; sp->height = h; sp->blit_width = sp->width / 25; sp->blit_height = sp->height / 25; sp->mode = 0; sp->nblits_remaining = 0; } ENTRYPOINT void init_slip (ModeInfo * mi) { slipstruct *sp; if (slips == NULL) { if ((slips = (slipstruct *) calloc(MI_NUM_SCREENS(mi), sizeof (slipstruct))) == NULL) return; } sp = &slips[MI_SCREEN(mi)]; sp->nblits_remaining = 0; sp->mode = 0; sp->first_time = 1; /* no "NoExpose" events from XCopyArea wanted */ XSetGraphicsExposures(MI_DISPLAY(mi), MI_GC(mi), False); reshape_slip (mi, MI_WIDTH(mi), MI_HEIGHT(mi)); } ENTRYPOINT void draw_slip (ModeInfo * mi) { Display *display = MI_DISPLAY(mi); Window window = MI_WINDOW(mi); GC gc = MI_GC(mi); int timer; slipstruct *sp; if (slips == NULL) return; sp = &slips[MI_SCREEN(mi)]; timer = MI_COUNT(mi) * MI_CYCLES(mi); MI_IS_DRAWN(mi) = True; while (timer--) { int xi = halfrandom(sp, MAX(sp->width - sp->blit_width, 1)); int yi = halfrandom(sp, MAX(sp->height - sp->blit_height, 1)); double x, y, dx = 0, dy = 0, t, s1, s2; if (0 == sp->nblits_remaining--) { static const int lut[] = {0, 0, 0, 1, 1, 1, 2}; prepare_screen(mi, sp); sp->nblits_remaining = MI_COUNT(mi) * (2000 + halfrandom(sp, 1000) + halfrandom(sp, 1000)); if (sp->mode == 2) sp->mode = halfrandom(sp, 2); else sp->mode = lut[halfrandom(sp, 7)]; } x = (2 * xi + sp->blit_width) / (double) sp->width - 1; y = (2 * yi + sp->blit_height) / (double) sp->height - 1; /* (x,y) is in biunit square */ switch (sp->mode) { case 0: /* rotor */ dx = x; dy = y; if (dy < 0) { dy += 0.04; if (dy > 0) dy = 0.00; } if (dy > 0) { dy -= 0.04; if (dy < 0) dy = 0.00; } t = dx * dx + dy * dy + 1e-10; s1 = 2 * dx * dx / t - 1; s2 = 2 * dx * dy / t; dx = s1 * 5; dy = s2 * 5; if (sp->backwards) { /* jwz: go the other way sometimes */ dx = -dx; dy = -dy; } break; case 1: /* shuffle */ dx = erandom(sp, 3); dy = erandom(sp, 3); break; case 2: /* explode */ dx = x * 3; dy = y * 3; break; } { int qx = xi + quantize(dx), qy = yi + quantize(dy); int wrap; if (qx < 0 || qy < 0 || qx >= sp->width - sp->blit_width || qy >= sp->height - sp->blit_height) continue; /*- Seems to cause problems using Exceed with PseudoColor X Error of failed request: BadGC (invalid GC parameter) with TrueColor X Error of failed request: BadDrawable (invalid Pixmap or Window parameter) Major opcode of failed request: 62 (X_CopyArea) */ XCopyArea(display, window, window, gc, xi, yi, sp->blit_width, sp->blit_height, qx, qy); switch (sp->mode) { case 0: /* wrap */ wrap = sp->width - (2 * sp->blit_width); if (qx > wrap ) { XCopyArea(display, window, window, gc, qx, qy, sp->blit_width, sp->blit_height, qx - wrap, qy); } if (qx < 2 * sp->blit_width) { XCopyArea(display, window, window, gc, qx, qy, sp->blit_width, sp->blit_height, qx + wrap, qy); } wrap = sp->height - (2 * sp->blit_height); if (qy > wrap) { XCopyArea(display, window, window, gc, qx, qy, sp->blit_width, sp->blit_height, qx, qy - wrap); } if (qy < 2 * sp->blit_height) { XCopyArea(display, window, window, gc, qx, qy, sp->blit_width, sp->blit_height, qx, qy + wrap); } break; case 1: case 2: break; } } } } ENTRYPOINT void release_slip (ModeInfo * mi) { if (slips != NULL) { (void) free((void *) slips); slips = (slipstruct *) NULL; } } ENTRYPOINT Bool slip_handle_event (ModeInfo *mi, XEvent *event) { slipstruct *sp = &slips[MI_SCREEN(mi)]; if (screenhack_event_helper (MI_DISPLAY(mi), MI_WINDOW(mi), event)) { sp->first_time = 1; sp->nblits_remaining = 0; return True; } return False; } XSCREENSAVER_MODULE ("Slip", slip) #endif /* MODE_slip */ xscreensaver-5.36/hacks/sphere.c000644 000767 000024 00000020612 12701612217 016661 0ustar00jwzstaff000000 000000 /* -*- Mode: C; tab-width: 4 -*- */ /* sphere --- a bunch of shaded spheres */ #if 0 static const char sccsid[] = "@(#)sphere.c 5.00 2000/11/01 xlockmore"; #endif /*- * Copyright (c) 1988 by Sun Microsystems * * Permission to use, copy, modify, and distribute this software and its * documentation for any purpose and without fee is hereby granted, * provided that the above copyright notice appear in all copies and that * both that copyright notice and this permission notice appear in * supporting documentation. * * This file is provided AS IS with no warranties of any kind. The author * shall have no liability with respect to the infringement of copyrights, * trade secrets or any patents by this file or any part thereof. In no * event will the author be liable for any lost revenue or profits or * other special, indirect and consequential damages. * * Revision History: * 01-Nov-2000: Allocation checks * 30-May-1997: made it go vertically as well as horizontally. * 27-May-1997: turned into a standalone program. * 02-Sep-1993: xlock version David Bagley * 1988: Revised to use SunView canvas instead of gfxsw Sun Microsystems * 1982: Orignal Algorithm Tom Duff Lucasfilm Ltd. */ /*- * original copyright * ************************************************************************** * Copyright 1988 by Sun Microsystems, Inc. Mountain View, CA. * * All Rights Reserved * * Permission to use, copy, modify, and distribute this software and its * documentation for any purpose and without fee is hereby granted, provided * that the above copyright notice appear in all copies and that both that * copyright notice and this permission notice appear in supporting * documentation, and that the names of Sun or MIT not be used in advertising * or publicity pertaining to distribution of the software without specific * prior written permission. Sun and M.I.T. make no representations about the * suitability of this software for any purpose. It is provided "as is" * without any express or implied warranty. * * SUN DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. * IN NO EVENT SHALL SUN BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS * ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS * SOFTWARE. * *************************************************************************** */ #ifdef STANDALONE # define MODE_sphere #define DEFAULTS "*delay: 20000 \n" \ "*cycles: 20 \n" \ "*size: 0 \n" \ "*ncolors: 64 \n" \ "*fpsSolid: true \n" \ # define BRIGHT_COLORS # define reshape_sphere 0 # define sphere_handle_event 0 # include "xlockmore.h" /* from the xscreensaver distribution */ #else /* !STANDALONE */ # include "xlock.h" /* from the xlockmore distribution */ #endif /* !STANDALONE */ #ifdef MODE_sphere ENTRYPOINT ModeSpecOpt sphere_opts = {0, (XrmOptionDescRec *) NULL, 0, (argtype *) NULL, (OptionStruct *) NULL}; #ifdef USE_MODULES ModStruct sphere_description = {"sphere", "init_sphere", "draw_sphere", "release_sphere", "refresh_sphere", "init_sphere", (char *) NULL, &sphere_opts, 5000, 1, 20, 0, 64, 1.0, "", "Shows a bunch of shaded spheres", 0, NULL}; #endif /*- * (NX, NY, NZ) is the light source vector -- length should be 100 */ #define NX 48 #define NY (-36) #define NZ 80 #define NR 100 #define SQRT(a) ((int)sqrt((double)(a))) typedef struct { int width, height; int radius; int x0; /* x center */ int y0; /* y center */ int color; int x, y; int dirx, diry; int shadowx, shadowy; int maxx, maxy; XPoint *points; } spherestruct; static spherestruct *spheres = (spherestruct *) NULL; ENTRYPOINT void init_sphere(ModeInfo * mi) { spherestruct *sp; if (spheres == NULL) { if ((spheres = (spherestruct *) calloc(MI_NUM_SCREENS(mi), sizeof (spherestruct))) == NULL) return; } sp = &spheres[MI_SCREEN(mi)]; if (sp->points != NULL) { (void) free((void *) sp->points); sp->points = (XPoint *) NULL; } sp->width = MAX(MI_WIDTH(mi), 4); sp->height = MAX(MI_HEIGHT(mi), 4); if ((sp->points = (XPoint *) malloc(MIN(sp->width, sp->height) * sizeof (XPoint))) == NULL) { return; } MI_CLEARWINDOW(mi); sp->dirx = 1; sp->x = sp->radius; sp->shadowx = (LRAND() & 1) ? 1 : -1; sp->shadowy = (LRAND() & 1) ? 1 : -1; } ENTRYPOINT void draw_sphere(ModeInfo * mi) { Display *display = MI_DISPLAY(mi); GC gc = MI_GC(mi); int sqrd, nd; register int minx = 0, maxx = 0, miny = 0, maxy = 0, npts = 0; spherestruct *sp; if (spheres == NULL) return; sp = &spheres[MI_SCREEN(mi)]; if (sp->points == NULL) return; MI_IS_DRAWN(mi) = True; if ((sp->dirx && ABS(sp->x) >= sp->radius) || (sp->diry && ABS(sp->y) >= sp->radius)) { sp->radius = NRAND(MIN(sp->width / 2, sp->height / 2) - 1) + 1; if (LRAND() & 1) { sp->dirx = (int) (LRAND() & 1) * 2 - 1; sp->diry = 0; } else { sp->dirx = 0; sp->diry = (int) (LRAND() & 1) * 2 - 1; } sp->x0 = NRAND(sp->width); sp->y0 = NRAND(sp->height); sp->x = -sp->radius * sp->dirx; sp->y = -sp->radius * sp->diry; if (MI_NPIXELS(mi) > 2) sp->color = NRAND(MI_NPIXELS(mi)); } if (sp->dirx == 1) { if (sp->x0 + sp->x < 0) sp->x = -sp->x0; } else if (sp->dirx == -1) { if (sp->x0 + sp->x >= sp->width) sp->x = sp->width - sp->x0 - 1; } if (sp->diry == 1) { if (sp->y0 + sp->y < 0) sp->y = -sp->y0; } else if (sp->diry == -1) { if (sp->y0 + sp->y >= sp->height) sp->y = sp->height - sp->y0 - 1; } if (sp->dirx) { sp->maxy = SQRT(sp->radius * sp->radius - sp->x * sp->x); miny = -sp->maxy; if (sp->y0 - sp->maxy < 0) miny = -sp->y0; maxy = sp->maxy; } if (sp->diry) { sp->maxx = SQRT(sp->radius * sp->radius - sp->y * sp->y); minx = -sp->maxx; if (sp->x0 - sp->maxx < 0) minx = -sp->x0; maxx = sp->maxx; } if (sp->dirx) { if (sp->y0 + sp->maxy >= sp->height) maxy = sp->height - sp->y0; } if (sp->diry) { if (sp->x0 + sp->maxx >= sp->width) maxx = sp->width - sp->x0; } XSetForeground(display, gc, MI_BLACK_PIXEL(mi)); if (sp->dirx) XDrawLine(display, MI_WINDOW(mi), gc, sp->x0 + sp->x, sp->y0 + miny, sp->x0 + sp->x, sp->y0 + maxy); if (sp->diry) XDrawLine(display, MI_WINDOW(mi), gc, sp->x0 + minx, sp->y0 + sp->y, sp->x0 + maxx, sp->y0 + sp->y); if (MI_NPIXELS(mi) > 2) XSetForeground(display, gc, MI_PIXEL(mi, sp->color)); else XSetForeground(display, gc, MI_WHITE_PIXEL(mi)); if (sp->dirx) { sqrd = sp->radius * sp->radius - sp->x * sp->x; nd = NX * sp->shadowx * sp->x; for (sp->y = miny; sp->y <= maxy; sp->y++) if ((NRAND(sp->radius * NR)) <= nd + NY * sp->shadowy * sp->y + NZ * SQRT(sqrd - sp->y * sp->y)) { sp->points[npts].x = sp->x + sp->x0; sp->points[npts].y = sp->y + sp->y0; npts++; } } if (sp->diry) { sqrd = sp->radius * sp->radius - sp->y * sp->y; nd = NY * sp->shadowy * sp->y; for (sp->x = minx; sp->x <= maxx; sp->x++) if ((NRAND(sp->radius * NR)) <= NX * sp->shadowx * sp->x + nd + NZ * SQRT(sqrd - sp->x * sp->x)) { sp->points[npts].x = sp->x + sp->x0; sp->points[npts].y = sp->y + sp->y0; npts++; } } XDrawPoints(display, MI_WINDOW(mi), gc, sp->points, npts, CoordModeOrigin); if (sp->dirx == 1) { sp->x++; if (sp->x0 + sp->x >= sp->width) sp->x = sp->radius; } else if (sp->dirx == -1) { sp->x--; if (sp->x0 + sp->x < 0) sp->x = -sp->radius; } if (sp->diry == 1) { sp->y++; if (sp->y0 + sp->y >= sp->height) sp->y = sp->radius; } else if (sp->diry == -1) { sp->y--; if (sp->y0 + sp->y < 0) sp->y = -sp->radius; } } ENTRYPOINT void release_sphere(ModeInfo * mi) { if (spheres != NULL) { int screen; for (screen = 0; screen < MI_NUM_SCREENS(mi); screen++) { spherestruct *sp = &spheres[screen]; if (sp->points) { (void) free((void *) sp->points); /* sp->points = NULL; */ } } (void) free((void *) spheres); spheres = (spherestruct *) NULL; } } ENTRYPOINT void refresh_sphere(ModeInfo * mi) { spherestruct *sp; if (spheres == NULL) return; sp = &spheres[MI_SCREEN(mi)]; MI_CLEARWINDOW(mi); sp->x = -sp->radius; } XSCREENSAVER_MODULE ("Sphere", sphere) #endif /* MODE_sphere */ xscreensaver-5.36/hacks/spiral.c000644 000767 000024 00000020356 12717747773 016721 0ustar00jwzstaff000000 000000 /* -*- Mode: C; tab-width: 4 -*- */ /* spiral --- spiraling dots */ #if 0 static const char sccsid[] = "@(#)spiral.c 5.00 2000/11/01 xlockmore"; #endif /*- * Copyright (c) 1994 by Darrick Brown. * * Permission to use, copy, modify, and distribute this software and its * documentation for any purpose and without fee is hereby granted, * provided that the above copyright notice appear in all copies and that * both that copyright notice and this permission notice appear in * supporting documentation. * * This file is provided AS IS with no warranties of any kind. The author * shall have no liability with respect to the infringement of copyrights, * trade secrets or any patents by this file or any part thereof. In no * event will the author be liable for any lost revenue or profits or * other special, indirect and consequential damages. * * Revision History: * 01-Nov-2000: Allocation checks * 10-May-1997: jwz@jwz.org: turned into a standalone program. * 24-Jul-1995: Fix to allow cycles not to have an arbitrary value by * Peter Schmitzberger (schmitz@coma.sbg.ac.at). * 06-Mar-1995: Finished cleaning up and final testing. * 03-Mar-1995: Cleaned up code. * 12-Jul-1994: Written. * * Low CPU usage mode. * Idea based on a graphics demo I saw a *LONG* time ago. */ #ifdef STANDALONE # define MODE_spiral #define DEFAULTS "*delay: 50000 \n" \ "*count: 40 \n" \ "*cycles: 350 \n" \ "*ncolors: 64 \n" \ "*fpsSolid: true \n" \ # define SMOOTH_COLORS # define reshape_spiral 0 # define spiral_handle_event 0 # include "xlockmore.h" /* from the xscreensaver distribution */ #else /* !STANDALONE */ # include "xlock.h" /* from the xlockmore distribution */ #endif /* !STANDALONE */ #ifdef MODE_spiral ENTRYPOINT ModeSpecOpt spiral_opts = {0, (XrmOptionDescRec *) NULL, 0, (argtype *) NULL, (OptionStruct *) NULL}; #ifdef USE_MODULES ModStruct spiral_description = {"spiral", "init_spiral", "draw_spiral", "release_spiral", "refresh_spiral", "init_spiral", (char *) NULL, &spiral_opts, 5000, -40, 350, 1, 64, 1.0, "", "Shows a helical locus of points", 0, NULL}; #endif #define MAXTRAIL 512 /* The length of the trail */ #define MAXDOTS 40 #define MINDOTS 1 #define TWOPI (2.0*M_PI) /* for convienence */ #define JAGGINESS 4 /* This sets the "Craziness" of the spiral (I like 4) */ #define SPEED 2.0 /* How many segments to draw per cycle when redrawing */ #define REDRAWSTEP 3 typedef struct { float hx, hy, ha, hr; } Traildots; typedef struct { Traildots *traildots; float cx, cy; float angle; float radius; float dr, da; float dx, dy; int erase; int inc; float colors; int width, height; float top, bottom, left, right; int dots, nlength; int redrawing, redrawpos; } spiralstruct; static spiralstruct *spirals = (spiralstruct *) NULL; static void draw_dots(ModeInfo * mi, int in); #define TFX(sp,x) ((int)((x/sp->right)*(float)sp->width)) #define TFY(sp,y) ((int)((y/sp->top)*(float)sp->height)) static void draw_dots(ModeInfo * mi, int in) { float i, inc; float x, y; spiralstruct *sp = &spirals[MI_SCREEN(mi)]; inc = TWOPI / (float) sp->dots; for (i = 0.0; i < TWOPI; i += inc) { x = sp->traildots[in].hx + COSF(i + sp->traildots[in].ha) * sp->traildots[in].hr; y = sp->traildots[in].hy + SINF(i + sp->traildots[in].ha) * sp->traildots[in].hr; XDrawPoint(MI_DISPLAY(mi), MI_WINDOW(mi), MI_GC(mi), TFX(sp, x), TFY(sp, y)); } } ENTRYPOINT void init_spiral(ModeInfo * mi) { spiralstruct *sp; int i; if (spirals == NULL) { if ((spirals = (spiralstruct *) calloc(MI_NUM_SCREENS(mi), sizeof (spiralstruct))) == NULL) return; } sp = &spirals[MI_SCREEN(mi)]; #ifdef HAVE_JWXYZ jwxyz_XSetAntiAliasing (MI_DISPLAY(mi), MI_GC(mi), False); #endif sp->width = MI_WIDTH(mi); sp->height = MI_HEIGHT(mi); MI_CLEARWINDOW(mi); /* Init */ sp->nlength = MI_CYCLES(mi); if (!sp->traildots) if ((sp->traildots = (Traildots *) malloc(sp->nlength * sizeof (Traildots))) == NULL) { return; } /* initialize the allocated array */ for (i = 0; i < sp->nlength; i++) { sp->traildots[i].hx = 0.0; sp->traildots[i].hy = 0.0; sp->traildots[i].ha = 0.0; sp->traildots[i].hr = 0.0; } sp->redrawing = 0; /* keep the window parameters proportional */ sp->top = 10000.0; sp->bottom = 0; sp->right = (float) (sp->width) / (float) (sp->height) * (10000.0); sp->left = 0; /* assign the initial values */ sp->cx = (float) (5000.0 - NRAND(2000)) / 10000.0 * sp->right; sp->cy = (float) (5000.0 - NRAND(2000)); sp->radius = (float) (NRAND(200) + 200); sp->angle = 0.0; sp->dx = (float) (10 - NRAND(20)) * SPEED; sp->dy = (float) (10 - NRAND(20)) * SPEED; sp->dr = (float) ((NRAND(10) + 4) * (1 - (LRAND() & 1) * 2)); sp->da = (float) NRAND(360) / 7200.0 + 0.01; if (MI_NPIXELS(mi) > 2) sp->colors = (float) NRAND(MI_NPIXELS(mi)); sp->erase = 0; sp->inc = 0; sp->traildots[sp->inc].hx = sp->cx; sp->traildots[sp->inc].hy = sp->cy; sp->traildots[sp->inc].ha = sp->angle; sp->traildots[sp->inc].hr = sp->radius; sp->inc++; sp->dots = MI_COUNT(mi); if (sp->dots < -MINDOTS) sp->dots = NRAND(sp->dots - MINDOTS + 1) + MINDOTS; /* Absolute minimum */ if (sp->dots < MINDOTS) sp->dots = MINDOTS; } ENTRYPOINT void draw_spiral(ModeInfo * mi) { Display *display = MI_DISPLAY(mi); GC gc = MI_GC(mi); int i, j; spiralstruct *sp; if (spirals == NULL) return; sp = &spirals[MI_SCREEN(mi)]; if (sp->traildots == NULL) return; MI_IS_DRAWN(mi) = True; if (sp->erase == 1) { XSetForeground(display, gc, MI_BLACK_PIXEL(mi)); draw_dots(mi, sp->inc); } sp->cx += sp->dx; sp->traildots[sp->inc].hx = sp->cx; if ((sp->cx > 9000.0) || (sp->cx < 1000.0)) sp->dx *= -1.0; sp->cy += sp->dy; sp->traildots[sp->inc].hy = sp->cy; if ((sp->cy > 9000.0) || (sp->cy < 1000.0)) sp->dy *= -1.0; sp->radius += sp->dr; sp->traildots[sp->inc].hr = sp->radius; if ((sp->radius > 2500.0) && (sp->dr > 0.0)) sp->dr *= -1.0; else if ((sp->radius < 50.0) && (sp->radius < 0.0)) sp->dr *= -1.0; /* Randomly give some variations to: */ /* spiral direction (if it is within the boundaries) */ if ((NRAND(3000) < 1 * JAGGINESS) && (((sp->cx > 2000.0) && (sp->cx < 8000.0)) && ((sp->cy > 2000.0) && (sp->cy < 8000.0)))) { sp->dx = (float) (10 - NRAND(20)) * SPEED; sp->dy = (float) (10 - NRAND(20)) * SPEED; } /* The speed of the change in size of the spiral */ if (NRAND(3000) < 1 * JAGGINESS) { if (LRAND() & 1) sp->dr += (float) (NRAND(3) + 1); else sp->dr -= (float) (NRAND(3) + 1); /* don't let it get too wild */ if (sp->dr > 18.0) sp->dr = 18.0; else if (sp->dr < 4.0) sp->dr = 4.0; } /* The speed of rotation */ if (NRAND(3000) < 1 * JAGGINESS) sp->da = (float) NRAND(360) / 7200.0 + 0.01; /* Reverse rotation */ if (NRAND(3000) < 1 * JAGGINESS) sp->da *= -1.0; sp->angle += sp->da; sp->traildots[sp->inc].ha = sp->angle; if (sp->angle > TWOPI) sp->angle -= TWOPI; else if (sp->angle < 0.0) sp->angle += TWOPI; sp->colors += (float) MI_NPIXELS(mi) / ((float) (2 * sp->nlength)); if (sp->colors >= (float) MI_NPIXELS(mi)) sp->colors = 0.0; if (MI_NPIXELS(mi) > 2) XSetForeground(display, gc, MI_PIXEL(mi, (int) sp->colors)); else XSetForeground(display, gc, MI_WHITE_PIXEL(mi)); draw_dots(mi, sp->inc); sp->inc++; if (sp->inc > sp->nlength - 1) { sp->inc -= sp->nlength; sp->erase = 1; } if (sp->redrawing) { for (i = 0; i < REDRAWSTEP; i++) { j = (sp->inc - sp->redrawpos + sp->nlength) % sp->nlength; draw_dots(mi, j); if (++(sp->redrawpos) >= sp->nlength) { sp->redrawing = 0; break; } } } } ENTRYPOINT void release_spiral(ModeInfo * mi) { if (spirals != NULL) { int screen; for (screen = 0; screen < MI_NUM_SCREENS(mi); screen++) { spiralstruct *sp = &spirals[screen]; if (sp->traildots) (void) free((void *) sp->traildots); } (void) free((void *) spirals); spirals = (spiralstruct *) NULL; } } ENTRYPOINT void refresh_spiral(ModeInfo * mi) { spiralstruct *sp; if (spirals == NULL) return; sp = &spirals[MI_SCREEN(mi)]; MI_CLEARWINDOW(mi); sp->redrawing = 1; sp->redrawpos = 0; } XSCREENSAVER_MODULE ("Spiral", spiral) #endif /* MODE_spiral */ xscreensaver-5.36/hacks/strange.c000644 000767 000024 00000045033 12717747767 017074 0ustar00jwzstaff000000 000000 /* -*- Mode: C; tab-width: 4 -*- */ /* strange --- strange attractors */ #if 0 static const char sccsid[] = "@(#)strange.c 5.00 2000/11/01 xlockmore"; #endif /*- * Copyright (c) 1997 by Massimino Pascal * * Permission to use, copy, modify, and distribute this software and its * documentation for any purpose and without fee is hereby granted, * provided that the above copyright notice appear in all copies and that * both that copyright notice and this permission notice appear in * supporting documentation. * * This file is provided AS IS with no warranties of any kind. The author * shall have no liability with respect to the infringement of copyrights, * trade secrets or any patents by this file or any part thereof. In no * event will the author be liable for any lost revenue or profits or * other special, indirect and consequential damages. * * Revision History: * 01-Nov-2000: Allocation checks * 10-May-1997: jwz@jwz.org: turned into a standalone program. * Made it render into an offscreen bitmap and then copy * that onto the screen, to reduce flicker. * * strange attractors are not so hard to find... */ /* TODO: Bring over tweaks from 3.x version. * For a good idea of what's missing, diff strange.c.20081107-good2 against strange.c-3.29 * We forked from the 3.29 series at 20081107, so anything added since then may be missing. */ #ifdef STANDALONE # define MODE_strange # define DEFAULTS "*delay: 10000 \n" \ "*ncolors: 100 \n" \ "*fpsSolid: True \n" \ "*ignoreRotation: True \n" \ # define SMOOTH_COLORS # define refresh_strange 0 # include "xlockmore.h" /* from the xscreensaver distribution */ #else /* !STANDALONE */ # include "xlock.h" /* from the xlockmore distribution */ #endif /* !STANDALONE */ #ifdef MODE_strange #define DEF_CURVE "10" #define DEF_POINTS "5500" /*static int curve;*/ static int points; static XrmOptionDescRec opts[] = { /* {"-curve", ".strange.curve", XrmoptionSepArg, 0}, */ {"-points", ".strange.points", XrmoptionSepArg, 0}, }; static argtype vars[] = { /* {&curve, "curve", "Curve", DEF_CURVE, t_Int},*/ {&points, "points", "Points", DEF_POINTS, t_Int}, }; static OptionStruct desc[] = { /* {"-curve", "set the curve factor of the attractors"},*/ {"-points", "change the number of points/iterations each frame"}, }; ENTRYPOINT ModeSpecOpt strange_opts = {sizeof opts / sizeof opts[0], opts, sizeof vars / sizeof vars[0], vars, desc}; #ifdef USE_MODULES ModStruct strange_description = {"strange", "init_strange", "draw_strange", "release_strange", "init_strange", "init_strange", (char *) NULL, &strange_opts, 1000, 1, 1, 1, 64, 1.0, "", "Shows strange attractors", 0, NULL}; #endif #ifdef HAVE_JWXYZ # define NO_DBUF #endif typedef float DBL; typedef int PRM; #define UNIT (1<<12) #define UNIT2 (1<<14) /* #define UNIT2 (3140*UNIT/1000) */ #define SKIP_FIRST 100 #define DBL_To_PRM(x) (PRM)( (DBL)(UNIT)*(x) ) #define DO_FOLD(a) (a)<0 ? -A->Fold[ (-(a))&(UNIT2-1) ] : A->Fold[ (a)&(UNIT2-1) ] #if 0 #define DO_FOLD(a) (a)<-UNIT2 ? -A->Fold[(-(a))%UNIT2] : (a)<0 ? -A->Fold[ -(a) ] :\ (a)>UNIT2 ? A->Fold[ (a)%UNIT2 ] : A->Fold[ (a) ] #define DO_FOLD(a) DBL_To_PRM( sin( (DBL)(a)/UNIT ) ) #define DO_FOLD(a) (a)<0 ? DBL_To_PRM( exp( 16.0*(a)/UNIT2 ) )-1.0 : \ DBL_To_PRM( 1.0-exp( -16.0*(a)/UNIT2 ) ) #endif /* useAccumulator performs two functions: * If it is defined, then support for the accumulator will be compiled. * It is also the condition for which the accumulator renderer will engage. */ #define useAccumulator (Root->Max_Pt > 6000) #define ACC_GAMMA 10.0 #define NUM_COLS 150 /* Extra options: */ #define VARY_SPEED_TO_AVOID_BOREDOM #define POINTS_HISTORY #define MERGE_FRAMES 3 /******************************************************************/ #define MAX_PRM 3*5 typedef struct _ATTRACTOR { DBL Prm1[MAX_PRM], Prm2[MAX_PRM]; PRM Prm[MAX_PRM], *Fold; void (*Iterate) (struct _ATTRACTOR *, PRM, PRM, PRM *, PRM *); XPoint *Buffer1, *Buffer2; int Cur_Pt, Max_Pt; int Col, Count, Speed; int Width, Height; Pixmap dbuf; /* jwz */ GC dbuf_gc; #ifdef useAccumulator int **accMap; #endif } ATTRACTOR; static ATTRACTOR *Root = (ATTRACTOR *) NULL; #ifdef useAccumulator static XColor* cols; #endif #ifdef POINTS_HISTORY static int numOldPoints; static int* oldPointsX; static int* oldPointsY; static int oldPointsIndex; static int startedClearing; #endif static DBL Amp_Prm[MAX_PRM] = { 1.0, 3.5, 3.5, 2.5, 4.7, 1.0, 3.5, 3.6, 2.5, 4.7, 1.0, 1.5, 2.2, 2.1, 3.5 }; static DBL Mid_Prm[MAX_PRM] = { 0.0, 1.5, 0.0, .5, 1.5, 0.0, 1.5, 0.0, .5, 1.5, 0.0, 1.5, -1.0, -.5, 2.5, }; static DBL Gauss_Rand(DBL c, DBL A, DBL S) { DBL y; y = (DBL) LRAND() / MAXRAND; y = A * (1.0 - exp(-y * y * S)) / (1.0 - exp(-S)); if (NRAND(2)) return (c + y); else return (c - y); } static void Random_Prm(DBL * Prm) { int i; for (i = 0; i < MAX_PRM; ++i) Prm[i] = Gauss_Rand(Mid_Prm[i], Amp_Prm[i], 4.0); } /***************************************************************/ /* 2 examples of non-linear map */ static void Iterate_X2(ATTRACTOR * A, PRM x, PRM y, PRM * xo, PRM * yo) { PRM xx, yy, xy, x2y, y2x, Tmp; xx = (x * x) / UNIT; x2y = (xx * y) / UNIT; yy = (y * y) / UNIT; y2x = (yy * x) / UNIT; xy = (x * y) / UNIT; Tmp = A->Prm[1] * xx + A->Prm[2] * xy + A->Prm[3] * yy + A->Prm[4] * x2y; Tmp = A->Prm[0] - y + (Tmp / UNIT); *xo = DO_FOLD(Tmp); Tmp = A->Prm[6] * xx + A->Prm[7] * xy + A->Prm[8] * yy + A->Prm[9] * y2x; Tmp = A->Prm[5] + x + (Tmp / UNIT); *yo = DO_FOLD(Tmp); } static void Iterate_X3(ATTRACTOR * A, PRM x, PRM y, PRM * xo, PRM * yo) { PRM xx, yy, xy, x2y, y2x, Tmp_x, Tmp_y, Tmp_z; xx = (x * x) / UNIT; x2y = (xx * y) / UNIT; yy = (y * y) / UNIT; y2x = (yy * x) / UNIT; xy = (x * y) / UNIT; Tmp_x = A->Prm[1] * xx + A->Prm[2] * xy + A->Prm[3] * yy + A->Prm[4] * x2y; Tmp_x = A->Prm[0] - y + (Tmp_x / UNIT); Tmp_x = DO_FOLD(Tmp_x); Tmp_y = A->Prm[6] * xx + A->Prm[7] * xy + A->Prm[8] * yy + A->Prm[9] * y2x; Tmp_y = A->Prm[5] + x + (Tmp_y / UNIT); Tmp_y = DO_FOLD(Tmp_y); Tmp_z = A->Prm[11] * xx + A->Prm[12] * xy + A->Prm[13] * yy + A->Prm[14] * y2x; Tmp_z = A->Prm[10] + x + (Tmp_z / UNIT); Tmp_z = UNIT + Tmp_z * Tmp_z / UNIT; *xo = (Tmp_x * UNIT) / Tmp_z; *yo = (Tmp_y * UNIT) / Tmp_z; } static void (*Funcs[2]) (ATTRACTOR *, PRM, PRM, PRM *, PRM *) = { Iterate_X2, Iterate_X3 }; /***************************************************************/ static void free_strange(Display *display, ATTRACTOR *A) { if (A->Buffer1 != NULL) { (void) free((void *) A->Buffer1); A->Buffer1 = (XPoint *) NULL; } if (A->Buffer2 != NULL) { (void) free((void *) A->Buffer2); A->Buffer2 = (XPoint *) NULL; } if (A->dbuf) { XFreePixmap(display, A->dbuf); A->dbuf = None; } if (A->dbuf_gc) { XFreeGC(display, A->dbuf_gc); A->dbuf_gc = None; } if (A->Fold != NULL) { (void) free((void *) A->Fold); A->Fold = (PRM *) NULL; } } ENTRYPOINT void draw_strange(ModeInfo * mi) { int i, j, n, Cur_Pt; PRM x, y, xo, yo; DBL u; XPoint *Buf; Display *display = MI_DISPLAY(mi); Window window = MI_WINDOW(mi); GC gc = MI_GC(mi); DBL Lx, Ly; void (*Iterate) (ATTRACTOR *, PRM, PRM, PRM *, PRM *); PRM xmin, xmax, ymin, ymax; ATTRACTOR *A; if (Root == NULL) return; A = &Root[MI_SCREEN(mi)]; if (A->Fold == NULL) return; Cur_Pt = A->Cur_Pt; Iterate = A->Iterate; u = (DBL) (A->Count) / 40000.0; for (j = MAX_PRM - 1; j >= 0; --j) A->Prm[j] = DBL_To_PRM((1.0 - u) * A->Prm1[j] + u * A->Prm2[j]); /* We collect the accumulation of the orbits in the 2d int array field. */ #ifndef POINTS_HISTORY #ifdef useAccumulator if (useAccumulator) { for (i=0;iWidth;i++) { for (j=0;jHeight;j++) { A->accMap[i][j] = 0; } } } #endif #endif x = y = DBL_To_PRM(.0); for (n = SKIP_FIRST; n; --n) { (*Iterate) (A, x, y, &xo, &yo); x = xo + NRAND(8) - 4; y = yo + NRAND(8) - 4; } xmax = 0; xmin = UNIT * 4; ymax = 0; ymin = UNIT * 4; A->Cur_Pt = 0; Buf = A->Buffer2; Lx = (DBL) A->Width / UNIT / 2.2; Ly = (DBL) A->Height / UNIT / 2.2; for (n = A->Max_Pt; n; --n) { (*Iterate) (A, x, y, &xo, &yo); #ifdef useAccumulator if (useAccumulator) { int mx,my; mx = (short) ( A->Width*0.1 + A->Width*0.8 * (xo - xmin) / (xmax - xmin) ); my = (short) ( A->Width*0.1 + (A->Height - A->Width*0.2) * (yo - ymin) / (ymax - ymin) ); if (mx>=0 && my>=0 && mxWidth && myHeight) { A->accMap[mx][my]++; } #ifdef POINTS_HISTORY /* #define clearOldPoint(i) { if (startedClearing) { field[oldPoints[i].x][oldPoints[i].y]--; } } #define saveUnplot(X,Y) { clearOldPoint(oldPointsIndex) oldPoints[oldPointsIndex].x = X; oldPoints[oldPointsIndex].y = Y; oldPointsIndex = (oldPointsIndex + 1) % numOldPoints; if (oldPointsIndex==0) { startedClearing=1; } } saveUnplot(mx,my) */ if (startedClearing) { int oldX = oldPointsX[oldPointsIndex]; int oldY = oldPointsY[oldPointsIndex]; if (oldX>=0 && oldY>=0 && oldXWidth && oldYHeight) { A->accMap[oldX][oldY]--; } } oldPointsX[oldPointsIndex] = mx; oldPointsY[oldPointsIndex] = my; oldPointsIndex = (oldPointsIndex + 1) % numOldPoints; if (oldPointsIndex==0) { startedClearing=1; } #endif } else { #endif Buf->x = (int) (Lx * (x + DBL_To_PRM(1.1))); Buf->y = (int) (Ly * (DBL_To_PRM(1.1) - y)); Buf++; A->Cur_Pt++; #ifdef useAccumulator } #endif /* (void) fprintf( stderr, "X,Y: %d %d ", Buf->x, Buf->y ); */ if (xo > xmax) xmax = xo; else if (xo < xmin) xmin = xo; if (yo > ymax) ymax = yo; else if (yo < ymin) ymin = yo; x = xo + NRAND(8) - 4; y = yo + NRAND(8) - 4; } MI_IS_DRAWN(mi) = True; XSetForeground(display, gc, MI_BLACK_PIXEL(mi)); #ifdef useAccumulator if (useAccumulator) { float colorScale; int col; #ifdef VARY_SPEED_TO_AVOID_BOREDOM int pixelCount = 0; #endif colorScale = (A->Width*A->Height/640.0/480.0*800000.0/(float)A->Max_Pt*(float)NUM_COLS/256); if (A->dbuf != None) { XSetForeground(display, A->dbuf_gc, 0); XFillRectangle(display, A->dbuf, A->dbuf_gc, 0, 0, A->Width, A->Height); } else { XSetForeground(display, gc, MI_BLACK_PIXEL(mi)); XFillRectangle(display, window, gc, 0, 0, A->Width, A->Height); } for (i=0;iWidth;i++) { for (j=0;jHeight;j++) { if (A->accMap[i][j]>0) { col = (float)A->accMap[i][j] * colorScale; if (col>NUM_COLS-1) { col = NUM_COLS-1; } #ifdef VARY_SPEED_TO_AVOID_BOREDOM if (col>0) { if (colCol % MI_NPIXELS(mi)));*/ XSetForeground(display, gc, cols[col].pixel); if (A->dbuf != None) { XSetForeground(display, A->dbuf_gc, cols[col].pixel); XDrawPoint(display, A->dbuf, A->dbuf_gc, i, j); } else { XSetForeground(display, gc, cols[col].pixel); XDrawPoint(display, window, gc, i, j); } } } } if (A->dbuf != None) { XCopyArea(display, A->dbuf, window, gc, 0, 0, A->Width, A->Height, 0, 0); } #ifdef VARY_SPEED_TO_AVOID_BOREDOM /* Increaase the rate of change of the parameters if the attractor has become visually boring. */ if ((xmax - xmin < DBL_To_PRM(.2)) && (ymax - ymin < DBL_To_PRM(.2))) { A->Speed *= 1.25; } else if (pixelCount>0 && pixelCountWidth*A->Height/1000) { A->Speed *= 1.25; /* A->Count = 1000; */ } else { A->Speed = 4; /* reset to normal/default */ } if (A->Speed > 32) A->Speed = 32; A->Count += A->Speed; if (A->Count >= 1000) { for (i = MAX_PRM - 1; i >= 0; --i) A->Prm1[i] = A->Prm2[i]; Random_Prm(A->Prm2); A->Count = 0; } #endif } else { #endif if (A->dbuf != None) { /* jwz */ XSetForeground(display, A->dbuf_gc, 0); /* XDrawPoints(display, A->dbuf, A->dbuf_gc, A->Buffer1, Cur_Pt,CoordModeOrigin); */ XFillRectangle(display, A->dbuf, A->dbuf_gc, 0, 0, A->Width, A->Height); } else XDrawPoints(display, window, gc, A->Buffer1, Cur_Pt, CoordModeOrigin); if (MI_NPIXELS(mi) < 2) XSetForeground(display, gc, MI_WHITE_PIXEL(mi)); else XSetForeground(display, gc, MI_PIXEL(mi, A->Col % MI_NPIXELS(mi))); if (A->dbuf != None) { XSetForeground(display, A->dbuf_gc, 1); XDrawPoints(display, A->dbuf, A->dbuf_gc, A->Buffer2, A->Cur_Pt, CoordModeOrigin); XCopyPlane(display, A->dbuf, window, gc, 0, 0, A->Width, A->Height, 0, 0, 1); } else XDrawPoints(display, window, gc, A->Buffer2, A->Cur_Pt, CoordModeOrigin); #ifdef useAccumulator } #endif Buf = A->Buffer1; A->Buffer1 = A->Buffer2; A->Buffer2 = Buf; if ((xmax - xmin < DBL_To_PRM(.2)) && (ymax - ymin < DBL_To_PRM(.2))) A->Count += 4 * A->Speed; else A->Count += A->Speed; if (A->Count >= 1000) { for (i = MAX_PRM - 1; i >= 0; --i) A->Prm1[i] = A->Prm2[i]; Random_Prm(A->Prm2); A->Count = 0; } A->Col++; mi->recursion_depth = A->Count; } /***************************************************************/ ENTRYPOINT void init_strange(ModeInfo * mi) { Display *display = MI_DISPLAY(mi); Window window = MI_WINDOW(mi); #ifndef NO_DBUF GC gc = MI_GC(mi); #endif ATTRACTOR *Attractor; #ifdef POINTS_HISTORY startedClearing=0; oldPointsIndex=0; #endif if (Root == NULL) { if ((Root = (ATTRACTOR *) calloc(MI_NUM_SCREENS(mi), sizeof (ATTRACTOR))) == NULL) return; } Attractor = &Root[MI_SCREEN(mi)]; if (Attractor->Fold == NULL) { int i; if ((Attractor->Fold = (PRM *) calloc(UNIT2 + 1, sizeof (PRM))) == NULL) { free_strange(display, Attractor); return; } for (i = 0; i <= UNIT2; ++i) { DBL x; /* x = ( DBL )(i)/UNIT2; */ /* x = sin( M_PI/2.0*x ); */ /* x = sqrt( x ); */ /* x = x*x; */ /* x = x*(1.0-x)*4.0; */ x = (DBL) (i) / UNIT; x = sin(x); Attractor->Fold[i] = DBL_To_PRM(x); } } Attractor->Max_Pt = points; if (Attractor->Buffer1 == NULL) if ((Attractor->Buffer1 = (XPoint *) calloc(Attractor->Max_Pt, sizeof (XPoint))) == NULL) { free_strange(display, Attractor); return; } if (Attractor->Buffer2 == NULL) if ((Attractor->Buffer2 = (XPoint *) calloc(Attractor->Max_Pt, sizeof (XPoint))) == NULL) { free_strange(display, Attractor); return; } Attractor->Width = MI_WIDTH(mi); Attractor->Height = MI_HEIGHT(mi); Attractor->Cur_Pt = 0; Attractor->Count = 0; Attractor->Col = NRAND(MI_NPIXELS(mi)); Attractor->Speed = 4; Attractor->Iterate = Funcs[NRAND(2)]; Random_Prm(Attractor->Prm1); Random_Prm(Attractor->Prm2); #ifndef NO_DBUF if (Attractor->dbuf != None) XFreePixmap(display, Attractor->dbuf); #ifdef useAccumulator #define colorDepth ( useAccumulator ? MI_DEPTH(mi) : 1 ) #else #define colorDepth 1 #endif Attractor->dbuf = XCreatePixmap(display, window, Attractor->Width, Attractor->Height, colorDepth); /* Allocation checked */ if (Attractor->dbuf != None) { XGCValues gcv; gcv.foreground = 0; gcv.background = 0; #ifndef HAVE_JWXYZ gcv.graphics_exposures = False; #endif /* HAVE_JWXYZ */ gcv.function = GXcopy; if (Attractor->dbuf_gc != None) XFreeGC(display, Attractor->dbuf_gc); if ((Attractor->dbuf_gc = XCreateGC(display, Attractor->dbuf, #ifndef HAVE_JWXYZ GCGraphicsExposures | #endif /* HAVE_JWXYZ */ GCFunction | GCForeground | GCBackground, &gcv)) == None) { XFreePixmap(display, Attractor->dbuf); Attractor->dbuf = None; } else { XFillRectangle(display, Attractor->dbuf, Attractor->dbuf_gc, 0, 0, Attractor->Width, Attractor->Height); XSetBackground(display, gc, MI_BLACK_PIXEL(mi)); XSetFunction(display, gc, GXcopy); } } #endif #ifdef useAccumulator #define A Attractor if (useAccumulator) { XWindowAttributes xgwa; int i,j; XGetWindowAttributes (display, window, &xgwa); /* cmap = xgwa.colormap; */ /* cmap = XCreateColormap(display, window, MI_VISUAL(mi), AllocAll); */ Attractor->accMap = (int**)calloc(Attractor->Width,sizeof(int*)); for (i=0;iWidth;i++) { Attractor->accMap[i] = (int*)calloc(Attractor->Height,sizeof(int)); for (j=0;jHeight;j++) { Attractor->accMap[i][j] = 0; } } #ifdef POINTS_HISTORY numOldPoints = A->Max_Pt * MERGE_FRAMES; oldPointsX = (int*)calloc(numOldPoints,sizeof(int)); oldPointsY = (int*)calloc(numOldPoints,sizeof(int)); #endif cols = (XColor*)calloc(NUM_COLS,sizeof(XColor)); for (i=0;iWidth;i++) { (void) free((void *) Root->accMap[i]); } (void) free((void *) Root->accMap); #endif #ifdef POINTS_HISTORY free(oldPointsX); free(oldPointsY); #endif for (screen = 0; screen < MI_NUM_SCREENS(mi); ++screen) free_strange(MI_DISPLAY(mi), &Root[screen]); (void) free((void *) Root); Root = (ATTRACTOR *) NULL; } } ENTRYPOINT Bool strange_handle_event (ModeInfo *mi, XEvent *event) { if (screenhack_event_helper (MI_DISPLAY(mi), MI_WINDOW(mi), event)) { reshape_strange (mi, MI_WIDTH(mi), MI_HEIGHT(mi)); return True; } return False; } XSCREENSAVER_MODULE ("Strange", strange) #endif /* MODE_strange */ xscreensaver-5.36/hacks/swirl.c000644 000767 000024 00000115553 12701612217 016544 0ustar00jwzstaff000000 000000 /* -*- Mode: C; tab-width: 4 -*- * swirl --- swirly color-cycling patterns. */ #if 0 static const char sccsid[] = "@(#)swirl.c 4.00 97/01/01 xlockmore"; #endif /* Copyright (c) 1994 M.Dobie * * Permission to use, copy, modify, and distribute this software and its * documentation for any purpose and without fee is hereby granted, * provided that the above copyright notice appear in all copies and that * both that copyright notice and this permission notice appear in * supporting documentation. * * This file is provided AS IS with no warranties of any kind. The author * shall have no liability with respect to the infringement of copyrights, * trade secrets or any patents by this file or any part thereof. In no * event will the author be liable for any lost revenue or profits or * other special, indirect and consequential damages. * * 13-May-97: jwz@jwz.org: turned into a standalone program. * 21-Apr-95: improved startup time for TrueColour displays * (limited to 16bpp to save memory) S.Early * 09-Jan-95: fixed colour maps (more colourful) and the image now spirals * outwards from the centre with a fixed number of points drawn * every iteration. Thanks to M.Dobie . * 1994: written. Copyright (c) 1994 M.Dobie * based on original code by R.Taylor */ #ifdef STANDALONE # define DEFAULTS "*count: 5 \n" \ "*delay: 10000 \n" \ "*ncolors: 200 \n" \ "*useSHM: True \n" \ "*fpsSolid: true \n" \ "*ignoreRotation: True \n" \ # define SMOOTH_COLORS # define WRITABLE_COLORS # include "xlockmore.h" /* from the xscreensaver distribution */ # ifdef HAVE_XSHM_EXTENSION # include "xshm.h" # endif /* HAVE_XSHM_EXTENSION */ #else /* !STANDALONE */ # include "xlock.h" /* from the xlockmore distribution */ # undef HAVE_XSHM_EXTENSION #endif /* !STANDALONE */ ENTRYPOINT ModeSpecOpt swirl_opts = { 0, NULL, 0, NULL, NULL }; #include /****************************************************************/ #define MASS 4 /* maximum mass of a knot */ #define MIN_RES 5 /* minimim resolution (>= MIN_RES) */ #define MAX_RES 1 /* maximum resolution (>0) */ #define TWO_PLANE_PCNT 30 /* probability for two plane mode (0-100) */ #define RESTART 2500 /* number of cycles before restart */ #define BATCH_DRAW 100 /* points to draw per iteration */ /* knot types */ typedef enum { NONE = 0, ORBIT = (1 << 0), WHEEL = (1 << 1), PICASSO = (1 << 2), RAY = (1 << 3), HOOK = (1 << 4), ALL = (1 << 5) } KNOT_T; /* a knot */ typedef struct Knot { int x, y; /* position */ int m; /* mass */ KNOT_T t; /* type in the first (or only) plane */ KNOT_T T; /* type in second plane if there is one */ int M; /* mass in second plane if there is one */ } KNOT , *KNOT_P; /* a colour specification */ typedef struct Colour { unsigned short r, g, b; } COLOUR , *COLOUR_P; /* drawing direction */ typedef enum { DRAW_RIGHT, DRAW_DOWN, DRAW_LEFT, DRAW_UP } DIR_T; /****************************************************************/ /* data associated with a swirl window */ typedef struct swirl_data { /* window paramaters */ Window win; /* the window */ int width, height; /* window size */ int depth; /* depth */ int rdepth; /* real depth (for XImage) */ Visual *visual; /* visual */ /* swirl drawing parameters */ int n_knots; /* number of knots */ KNOT_P knots; /* knot details */ KNOT_T knot_type; /* general type of knots */ int resolution; /* drawing resolution, 1..5 */ int max_resolution; /* maximum resolution, MAX_RES */ int r; /* pixel step */ Bool two_plane; /* two plane mode? */ Bool first_plane; /* doing first plane? */ int start_again; /* when to restart */ /* spiral drawing parameters */ int x, y; /* current point */ DIR_T direction; /* current direction */ int dir_todo, dir_done; /* how many points in current direction? */ int batch_todo, batch_done; /* how many points in this batch */ Bool started, drawing; /* are we drawing? */ /* image stuff */ unsigned char *image; /* image data */ XImage *ximage; /* colours stuff */ int colours; /* how many colours possible */ int dcolours; /* how many colours for shading */ #ifndef STANDALONE Bool fixed_colourmap; /* fixed colourmap? */ #endif /* !STANDALONE */ Bool monochrome; /* monochrome? */ Colormap cmap; /* colour map for the window */ XColor *rgb_values; /* colour definitions array */ #ifndef STANDALONE int current_map; /* current colour map, 0..dcolours-1 */ unsigned long fg, bg, white, black; /* black and white pixel values */ int shift; /* colourmap shift */ int dshift; /* colourmap shift while drawing */ XColor fgcol, bgcol; /* foreground and background colour specs */ #endif /* !STANDALONE */ Bool off_screen; } SWIRL , *SWIRL_P; #define SWIRLCOLOURS 13 #ifndef STANDALONE /* basic colours */ static COLOUR basic_colours[SWIRLCOLOURS]; #endif /* !STANDALONE */ /* an array of swirls for each screen */ static SWIRL_P swirls = NULL; /* random_no Return a random integer between 0 and n inclusive - n is the maximum number Returns a random integer */ static int random_no(unsigned int n) { return ((int) ((n + 1) * (double) LRAND() / MAXRAND)); } /****************************************************************/ /* initialise_swirl Initialise all the swirl data - swirl is the swirl data */ static void initialise_swirl(ModeInfo * mi, SWIRL_P swirl) { #ifndef STANDALONE Display *display = MI_DISPLAY(mi); #endif /* !STANDALONE */ swirl->width = 0; /* width and height of window */ swirl->height = 0; swirl->depth = 1; swirl->rdepth = 1; swirl->visual = NULL; swirl->resolution = MIN_RES + 1; /* current resolution */ swirl->max_resolution = MAX_RES; /* maximum resolution */ swirl->n_knots = 0; /* number of knots */ swirl->knot_type = ALL; /* general type of knots */ swirl->two_plane = False; /* two plane mode? */ swirl->first_plane = False; /* doing first plane? */ swirl->start_again = -1; /* restart counter */ /* drawing parameters */ swirl->x = 0; swirl->y = 0; swirl->started = False; swirl->drawing = False; /* image stuff */ swirl->image = NULL; /* image data */ swirl->ximage = NULL; /* colours stuff */ swirl->colours = 0; /* how many colours possible */ swirl->dcolours = 0; /* how many colours for shading */ swirl->cmap = (Colormap) NULL; swirl->rgb_values = NULL; /* colour definitions array */ #ifndef STANDALONE swirl->current_map = 0; /* current colour map, 0..dcolours-1 */ /* set up fg fb colour specs */ swirl->white = MI_WIN_WHITE_PIXEL(mi); swirl->black = MI_WIN_BLACK_PIXEL(mi); #endif /* !STANDALONE */ #ifndef STANDALONE swirl->fg = MI_FG_COLOR(mi); swirl->bg = MI_BG_COLOR(mi); swirl->fgcol.pixel = swirl->fg; swirl->bgcol.pixel = swirl->bg; XQueryColor(display, MI_COLORMAP(mi), &(swirl->fgcol)); XQueryColor(display, MI_COLORMAP(mi), &(swirl->bgcol)); #endif /* !STANDALONE */ } /****************************************************************/ /* * initialise_image * * Initialise the image for drawing to * * - swirl is the swirl data */ static void initialise_image(ModeInfo * mi, SWIRL_P swirl) { Display *dpy = MI_DISPLAY(mi); if (swirl->ximage != NULL) XDestroyImage(swirl->ximage); swirl->ximage = 0; #ifdef HAVE_XSHM_EXTENSION if (mi->use_shm) { swirl->ximage = create_xshm_image(dpy, swirl->visual, swirl->rdepth, ZPixmap, 0, &mi->shm_info, swirl->width, swirl->height); if (!swirl->ximage) mi->use_shm = False; } #endif /* HAVE_XSHM_EXTENSION */ if (!swirl->ximage) { swirl->ximage = XCreateImage(dpy, swirl->visual, swirl->rdepth, ZPixmap, 0, 0, swirl->width, swirl->height, 8, 0); swirl->image = (unsigned char *) calloc(swirl->height, swirl->ximage->bytes_per_line); swirl->ximage->data = (char *) swirl->image; } } /****************************************************************/ #ifndef STANDALONE /* * initialise_colours * * Initialise the list of colours from which the colourmaps are derived * * - colours is the array to initialise * - saturation is the saturation value to use 0->grey, * 1.0->full saturation */ static void initialise_colours(COLOUR * colours, float saturate) { int i; /* start off fully saturated, medium and bright colours */ colours[0].r = 0xA000; colours[0].g = 0x0000; colours[0].b = 0x0000; colours[1].r = 0xD000; colours[1].g = 0x0000; colours[1].b = 0x0000; colours[2].r = 0x0000; colours[2].g = 0x6000; colours[2].b = 0x0000; colours[3].r = 0x0000; colours[3].g = 0x9000; colours[3].b = 0x0000; colours[4].r = 0x0000; colours[4].g = 0x0000; colours[4].b = 0xC000; colours[5].r = 0x0000; colours[5].g = 0x0000; colours[5].b = 0xF000; colours[6].r = 0xA000; colours[6].g = 0x6000; colours[6].b = 0x0000; colours[7].r = 0xD000; colours[7].g = 0x9000; colours[7].b = 0x0000; colours[8].r = 0xA000; colours[8].g = 0x0000; colours[8].b = 0xC000; colours[9].r = 0xD000; colours[9].g = 0x0000; colours[9].b = 0xF000; colours[10].r = 0x0000; colours[10].g = 0x6000; colours[10].b = 0xC000; colours[11].r = 0x0000; colours[11].g = 0x9000; colours[11].b = 0xF000; colours[12].r = 0xA000; colours[12].g = 0xA000; colours[12].b = 0xA000; /* add white for low saturation */ for (i = 0; i < SWIRLCOLOURS - 1; i++) { unsigned short max_rg, max; /* what is the max intensity for this colour? */ max_rg = (colours[i].r > colours[i].g) ? colours[i].r : colours[i].g; max = (max_rg > colours[i].b) ? max_rg : colours[i].b; /* bring elements up to max as saturation approaches 0.0 */ colours[i].r += (unsigned short) ((float) (1.0 - saturate) * ((float) max - colours[i].r)); colours[i].g += (unsigned short) ((float) (1.0 - saturate) * ((float) max - colours[i].g)); colours[i].b += (unsigned short) ((float) (1.0 - saturate) * ((float) max - colours[i].b)); } } #endif /* !STANDALONE */ /****************************************************************/ #ifndef STANDALONE /* * set_black_and_white * * Set the entries for foreground & background pixels and * WhitePixel & BlackPixel in an array of colour specifications. * * - swirl is the swirl data * - values is the array of specifications */ static void set_black_and_white(SWIRL_P swirl, XColor * values) { unsigned long white, black; /* where is black and white? */ white = swirl->white; black = swirl->black; /* set black and white up */ values[white].flags = DoRed | DoGreen | DoBlue; values[white].pixel = white; values[white].red = 0xFFFF; values[white].green = 0xFFFF; values[white].blue = 0xFFFF; values[black].flags = DoRed | DoGreen | DoBlue; values[black].pixel = black; values[black].red = 0; values[black].green = 0; values[black].blue = 0; /* copy the colour specs from the original entries */ values[swirl->fg] = swirl->fgcol; values[swirl->bg] = swirl->bgcol; } /****************************************************************/ /* * set_colour * * Set an entry in an array of XColor specifications. The given entry will be * set to the given colour. If the entry corresponds to the foreground, * background, WhitePixel, or BlackPixel it is ignored and the given colour * is is put in the next entry. * * Therefore, the given colour may be placed up to four places after the * specified entry in the array, if foreground, background, white, or black * intervene. * * - swirl is the swirl data * - value points to a pointer to the array entry. It gets updated to * point to the next free entry. * - pixel points to the current pixel number. It gets updated. * - c points to the colour to add */ static void set_colour(SWIRL_P swirl, XColor ** value, unsigned long *pixel, COLOUR_P c) { Bool done; unsigned long fg, bg, white, black; /* where are foreground, background, white, and black? */ fg = swirl->fg; bg = swirl->bg; white = swirl->white; black = swirl->black; /* haven't set it yet */ done = False; /* try and set the colour */ while (!done) { (**value).flags = DoRed | DoGreen | DoBlue; (**value).pixel = *pixel; /* white, black, fg, bg, or a colour? */ if ((*pixel != fg) && (*pixel != bg) && (*pixel != white) && (*pixel != black)) { (**value).red = c->r; (**value).green = c->g; (**value).blue = c->b; /* now we've done it */ done = True; } /* next pixel */ (*value)++; (*pixel)++; } } /****************************************************************/ /* * get_colour * * Get an entry from an array of XColor specifications. The next colour from * the array will be returned. Foreground, background, WhitePixel, or * BlackPixel will be ignored. * * - swirl is the swirl data * - value points the array entry. It is updated to point to the entry * following the one returned. * - c is set to the colour found */ static void get_colour(SWIRL_P swirl, XColor ** value, COLOUR_P c) { Bool done; unsigned long fg, bg, white, black; /* where is white and black? */ fg = swirl->fg; bg = swirl->bg; white = swirl->white; black = swirl->black; /* haven't set it yet */ done = False; /* try and set the colour */ while (!done) { /* black, white or a colour? */ if (((*value)->pixel != fg) && ((*value)->pixel != bg) && ((*value)->pixel != white) && ((*value)->pixel != black)) { c->r = (*value)->red; c->g = (*value)->green; c->b = (*value)->blue; /* now we've done it */ done = True; } /* next value */ (*value)++; } } #endif /* !STANDALONE */ /****************************************************************/ #ifndef STANDALONE /* * interpolate * * Generate n colours between c1 and c2. n XColors at *value are set up with * ascending pixel values. * * If the pixel range includes BlackPixel or WhitePixel they are set to black * and white respectively but otherwise ignored. Therefore, up to n+2 colours * may actually be set by this function. * * - swirl is the swirl data * - values points a pointer to an array of XColors to update * - pixel points to the pixel number to start at * - k n is the number of colours to generate * - c1, c2 are the colours to interpolate between */ static void interpolate(SWIRL_P swirl, XColor ** values, unsigned long *pixel, int n, COLOUR_P c1, COLOUR_P c2) { int i, r, g, b; COLOUR c; unsigned short maxv; /* maximum value */ maxv = (255 << 8); for (i = 0; i < n / 2 && (int) *pixel < swirl->colours; i++) { /* work out the colour */ r = c1->r + 2 * i * ((int) c2->r) / n; c.r = (r > (int) maxv) ? maxv : r; g = c1->g + 2 * i * ((int) c2->g) / n; c.g = (g > (int) maxv) ? maxv : g; b = c1->b + 2 * i * ((int) c2->b) / n; c.b = (b > (int) maxv) ? maxv : b; /* set it up */ set_colour(swirl, values, pixel, &c); } for (i = n / 2; i >= 0 && (int) *pixel < swirl->colours; i--) { r = c2->r + 2 * i * ((int) c1->r) / n; c.r = (r > (int) maxv) ? maxv : r; g = c2->g + 2 * i * ((int) c1->g) / n; c.g = (g > (int) maxv) ? maxv : g; b = c2->b + 2 * i * ((int) c1->b) / n; c.b = (b > (int) maxv) ? maxv : b; /* set it up */ set_colour(swirl, values, pixel, &c); } } /****************************************************************/ /* * basic_map * * Generate a `random' closed loop colourmap that occupies the whole colour * map. * * - swirl is the swirl data * - values is the array of colour definitions to set up */ static void basic_map(SWIRL_P swirl, XColor * values) { COLOUR c[3]; int i; unsigned short r1, g1, b1, r2, g2, b2, r3, g3, b3; int L1, L2, L3, L; unsigned long pixel; XColor *value; /* start at the beginning of the colour map */ pixel = 0; value = values; /* choose 3 different basic colours at random */ for (i = 0; i < 3;) { int j; Bool same; /* choose colour i */ c[i] = basic_colours[random_no(SWIRLCOLOURS - 1)]; /* assume different */ same = False; /* different from the rest? */ for (j = 0; j < i; j++) if ((c[i].r == c[j].r) && (c[i].g == c[j].g) && (c[i].b == c[j].b)) same = True; /* ready for the next colour? */ if (!same) i++; } /* extract components into variables */ r1 = c[0].r; g1 = c[0].g; b1 = c[0].b; r2 = c[1].r; g2 = c[1].g; b2 = c[1].b; r3 = c[2].r; g3 = c[2].g; b3 = c[2].b; /* work out the lengths of each side of the triangle */ L1 = (int) sqrt((((double) r1 - r2) * ((double) r1 - r2) + ((double) g1 - g2) * ((double) g1 - g2) + ((double) b1 - b2) * ((double) b1 - b2))); L2 = (int) sqrt((((double) r3 - r2) * ((double) r3 - r2) + ((double) g3 - g2) * ((double) g3 - g2) + ((double) b3 - b2) * ((double) b3 - b2))); L3 = (int) sqrt((((double) r1 - r3) * ((double) r1 - r3) + ((double) g1 - g3) * ((double) g1 - g3) + ((double) b1 - b3) * ((double) b1 - b3))); L = L1 + L2 + L3; /* allocate colours in proportion to the lengths of the sides */ interpolate(swirl, &value, &pixel, (int) ((double) swirl->dcolours * ((double) L1 / (double) L)) + 1, c, c + 1); interpolate(swirl, &value, &pixel, (int) ((double) swirl->dcolours * ((double) L2 / (double) L)) + 1, c + 1, c + 2); interpolate(swirl, &value, &pixel, (int) ((double) swirl->dcolours * ((double) L3 / (double) L)) + 1, c + 2, c); /* fill up any remaining slots (due to rounding) */ while ((int) pixel < swirl->colours) { /* repeat the last colour */ set_colour(swirl, &value, &pixel, c); } /* ensure black and white are correct */ if (!swirl->fixed_colourmap) set_black_and_white(swirl, values); } /****************************************************************/ /* * pre_rotate * * Generate pre-rotated versions of the colour specifications * * - swirl is the swirl data * - values is an array of colour specifications */ static void pre_rotate(SWIRL_P swirl, XColor * values) { int i, j; XColor *src, *dest; int dcolours; unsigned long pixel; /* how many colours to display? */ dcolours = swirl->dcolours; /* start at the first map */ src = values; dest = values + swirl->colours; /* generate dcolours-1 rotated maps */ for (i = 0; i < dcolours - 1; i++) { COLOUR first; /* start at the first pixel */ pixel = 0; /* remember the first one and skip it */ get_colour(swirl, &src, &first); /* put a rotated version of src at dest */ for (j = 0; j < dcolours - 1; j++) { COLOUR c; /* get the source colour */ get_colour(swirl, &src, &c); /* set the colour */ set_colour(swirl, &dest, &pixel, &c); } /* put the first one at the end */ set_colour(swirl, &dest, &pixel, &first); /* NB: src and dest should now be ready for the next table */ /* ensure black and white are properly set */ set_black_and_white(swirl, src); } } /****************************************************************/ /* * create_colourmap * * Create a read/write colourmap to use * * - swirl is the swirl data */ static void create_colourmap(ModeInfo * mi, SWIRL_P swirl) { Display *display = MI_DISPLAY(mi); int preserve; int n_rotations; int i; Bool truecolor; unsigned long redmask, greenmask, bluemask; swirl->fixed_colourmap = !setupColormap(mi, &(swirl->colours), &truecolor, &redmask, &greenmask, &bluemask); preserve = preserveColors(swirl->fg, swirl->bg, swirl->white, swirl->black); /* how many colours should we animate? */ swirl->dcolours = (swirl->colours > preserve + 1) ? swirl->colours - preserve : swirl->colours; if (MI_NPIXELS(mi) < 2) return; /* how fast to shift the colourmap? */ swirl->shift = (swirl->colours > 64) ? swirl->colours / 64 : 1; swirl->dshift = (swirl->shift > 1) ? swirl->shift * 2 : 1; /* how may colour map rotations are there? */ n_rotations = (swirl->fixed_colourmap) ? 1 : swirl->dcolours; /* allocate space for colour definitions (if not already there) */ if (swirl->rgb_values == NULL) { swirl->rgb_values = (XColor *) calloc((swirl->colours + 3) * n_rotations, sizeof (XColor)); /* create a colour map */ if (!swirl->fixed_colourmap) swirl->cmap = XCreateColormap(display, swirl->win, swirl->visual, AllocAll); } /* select a set of colours for the colour map */ basic_map(swirl, swirl->rgb_values); /* are we rotating them? */ if (!swirl->fixed_colourmap) { /* generate rotations of the colour maps */ pre_rotate(swirl, swirl->rgb_values); /* store the colours in the colour map */ XStoreColors(display, swirl->cmap, swirl->rgb_values, swirl->colours); } else { if (truecolor) { int rsh, gsh, bsh; unsigned long int t; t = redmask; for (i = 0; (int) t > 0; i++, t >>= 1); rsh = 16 - i; t = greenmask; for (i = 0; (int) t > 0; i++, t >>= 1); gsh = 16 - i; t = bluemask; for (i = 0; (int) t > 0; i++, t >>= 1); bsh = 16 - i; for (i = 0; i < swirl->colours; i++) swirl->rgb_values[i].pixel = ((rsh > 0 ? (swirl->rgb_values[i].red) >> rsh : (swirl->rgb_values[i].red) << (-rsh)) & redmask) | ((gsh > 0 ? (swirl->rgb_values[i].green) >> gsh : (swirl->rgb_values[i].green) << (-gsh)) & greenmask) | ((bsh > 0 ? (swirl->rgb_values[i].blue) >> bsh : (swirl->rgb_values[i].blue) << (-bsh)) & bluemask); } else { /* lookup the colours in the fixed colour map */ for (i = 0; i < swirl->colours; i++) (void) XAllocColor(display, MI_COLORMAP(mi), &(swirl->rgb_values[i])); } } } /****************************************************************/ /* * install_map * * Install a new set of colours into the colour map * * - dpy is the display * - swirl is the swirl data * - shift is the amount to rotate the colour map by */ static void install_map(Display * dpy, SWIRL_P swirl, int shift) { if (!swirl->fixed_colourmap) { /* shift the colour map */ swirl->current_map = (swirl->current_map + shift) % swirl->dcolours; /* store it */ XStoreColors(dpy, swirl->cmap, swirl->rgb_values + swirl->current_map * swirl->colours, swirl->colours); } } #endif /* !STANDALONE */ /****************************************************************/ /* * create_knots * * Initialise the array of knot * * swirl is the swirl data */ static void create_knots(SWIRL_P swirl) { int k; Bool orbit, wheel, picasso, ray, hook; KNOT_P knot; /* create array for knots */ if (swirl->knots) (void) free((void *) swirl->knots); swirl->knots = (KNOT_P) calloc(swirl->n_knots, sizeof (KNOT)); /* no knots yet */ orbit = wheel = picasso = ray = hook = False; /* what types do we have? */ if ((int) swirl->knot_type & (int) ALL) { orbit = wheel = ray = hook = True; } else { if ((int) swirl->knot_type & (int) ORBIT) orbit = True; if ((int) swirl->knot_type & (int) WHEEL) wheel = True; if ((int) swirl->knot_type & (int) PICASSO) picasso = True; if ((int) swirl->knot_type & (int) RAY) ray = True; if ((int) swirl->knot_type & (int) HOOK) hook = True; } /* initialise each knot */ knot = swirl->knots; for (k = 0; k < swirl->n_knots; k++) { /* position */ knot->x = random_no((unsigned int) swirl->width); knot->y = random_no((unsigned int) swirl->height); /* mass */ knot->m = random_no(MASS) + 1; /* can be negative */ if (random_no(100) > 50) knot->m *= -1; /* type */ knot->t = NONE; while (knot->t == NONE) { /* choose a random one from the types available */ switch (random_no(4)) { case 0: if (orbit) knot->t = ORBIT; break; case 1: if (wheel) knot->t = WHEEL; break; case 2: if (picasso) knot->t = PICASSO; break; case 3: if (ray) knot->t = RAY; break; case 4: if (hook) knot->t = HOOK; break; } } /* if two planes, do same for second plane */ if (swirl->two_plane) { knot->T = NONE; while (knot->T == NONE || knot->T == knot->t) { /* choose a different type */ switch (random_no(4)) { case 0: if (orbit) knot->T = ORBIT; break; case 1: if (wheel) knot->T = WHEEL; break; case 2: if (picasso) knot->T = PICASSO; break; case 3: if (ray) knot->T = RAY; break; case 4: if (hook) knot->T = HOOK; break; } } } /* next knot */ knot++; } } /****************************************************************/ /* * do_point * * Work out the pixel value at i, j. Ensure it does not clash with BlackPixel * or WhitePixel. * * - swirl is the swirl data * - i, j is the point to calculate * * Returns the value of the point */ static unsigned long do_point(SWIRL_P swirl, int i, int j) { int tT, k, value, add; double dx, dy, theta, dist; int dcolours, qcolours; double rads; KNOT_P knot; /* how many colours? */ dcolours = swirl->dcolours; qcolours = dcolours / 4; /* colour step round a circle */ rads = (double) dcolours / (2.0 * M_PI); /* start at zero */ value = 0; /* go through all the knots */ knot = swirl->knots; for (k = 0; k < swirl->n_knots; k++) { dx = i - knot->x; dy = j - knot->y; /* in two_plane mode get the appropriate knot type */ if (swirl->two_plane) tT = (int) ((swirl->first_plane) ? knot->t : knot->T); else tT = (int) knot->t; /* distance from knot */ dist = sqrt(dx * dx + dy * dy); /* nothing to add at first */ add = 0; /* work out the contribution (if close enough) */ if (dist > 0.1) switch (tT) { case ORBIT: add = (int) (dcolours / (1.0 + 0.01 * abs(knot->m) * dist)); break; case WHEEL: /* Avoid atan2: DOMAIN error message */ if (dy == 0.0 && dx == 0.0) theta = 1.0; else theta = (atan2(dy, dx) + M_PI) / M_PI; if (theta < 1.0) add = (int) (dcolours * theta + sin(0.1 * knot->m * dist) * qcolours * exp(-0.01 * dist)); else add = (int) (dcolours * (theta - 1.0) + sin(0.1 * knot->m * dist) * qcolours * exp(-0.01 * dist)); break; case PICASSO: add = (int) (dcolours * fabs(cos(0.002 * knot->m * dist))); break; case RAY: /* Avoid atan2: DOMAIN error message */ if (dy == 0.0 && dx == 0.0) add = 0; else add = (int) (dcolours * fabs(sin(2.0 * atan2(dy, dx)))); break; case HOOK: /* Avoid atan2: DOMAIN error message */ if (dy == 0.0 && dx == 0.0) add = (int) (0.05 * (abs(knot->m) - 1) * dist); else add = (int) (rads * atan2(dy, dx) + 0.05 * (abs(knot->m) - 1) * dist); break; } /* for a +ve mass add on the contribution else take it off */ if (knot->m > 0) value += add; else value -= add; /* next knot */ knot++; } /* toggle plane */ swirl->first_plane = (!swirl->first_plane); /* make sure we handle -ve values properly */ if (value >= 0) value = (value % dcolours) + 2; else value = dcolours - (abs(value) % (dcolours - 1)); #ifndef STANDALONE /* if fg and bg are 1 and 0 we should be OK, but just in case */ while ((dcolours > 2) && (((value % swirl->colours) == (int) swirl->fg) || ((value % swirl->colours) == (int) swirl->bg) || ((value % swirl->colours) == (int) swirl->white) || ((value % swirl->colours) == (int) swirl->black))) { value++; } #endif /* !STANDALONE */ /* definitely make sure it is in range */ value = value % swirl->colours; /* lookup the pixel value if necessary */ #ifndef STANDALONE if (swirl->fixed_colourmap && swirl->dcolours > 2) #endif value = swirl->rgb_values[value].pixel; /* return it */ return ((unsigned long) value); } /****************************************************************/ /* * draw_block * * Draw a square block of points with the same value. * * - ximage is the XImage to draw on. * - x, y is the top left corner * - s is the length of each side * - v is the value */ static void draw_block(XImage * ximage, int x, int y, int s, unsigned long v) { int a, b; for (a = 0; a < s; a++) for (b = 0; b < s; b++) { XPutPixel(ximage, x + b, y + a, v); } } /****************************************************************/ /* * draw_point Draw the current point in a swirl pattern onto the XImage * * - swirl is the swirl * - win is the window to update */ static void draw_point(ModeInfo * mi, SWIRL_P swirl) { int r; int x, y; /* get current point coordinates and resolution */ x = swirl->x; y = swirl->y; r = swirl->r; /* check we are within the window */ if ((x < 0) || (x > swirl->width - r) || (y < 0) || (y > swirl->height - r)) return; /* what style are we drawing? */ if (swirl->two_plane) { int r2; /* halve the block size */ r2 = r / 2; /* interleave blocks at half r */ draw_block(swirl->ximage, x, y, r2, do_point(swirl, x, y)); draw_block(swirl->ximage, x + r2, y, r2, do_point(swirl, x + r2, y)); draw_block(swirl->ximage, x + r2, y + r2, r2, do_point(swirl, x + r2, y + r2)); draw_block(swirl->ximage, x, y + r2, r2, do_point(swirl, x, y + r2)); } else draw_block(swirl->ximage, x, y, r, do_point(swirl, x, y)); /* update the screen */ #ifdef HAVE_XSHM_EXTENSION if (mi->use_shm) XShmPutImage(MI_DISPLAY(mi), MI_WINDOW(mi), MI_GC(mi), swirl->ximage, x, y, x, y, r, r, False); else #endif /* !HAVE_XSHM_EXTENSION */ /* PURIFY 4.0.1 on SunOS4 and on Solaris 2 reports a 256 byte memory leak on the next line. */ XPutImage(MI_DISPLAY(mi), MI_WINDOW(mi), MI_GC(mi), swirl->ximage, x, y, x, y, r, r); } /****************************************************************/ /* * next_point Move to the next point in the spiral pattern * - swirl is the swirl * - win is the window to update */ static void next_point(SWIRL_P swirl) { /* more to do in this direction? */ if (swirl->dir_done < swirl->dir_todo) { /* move in the current direction */ switch (swirl->direction) { case DRAW_RIGHT: swirl->x += swirl->r; break; case DRAW_DOWN: swirl->y += swirl->r; break; case DRAW_LEFT: swirl->x -= swirl->r; break; case DRAW_UP: swirl->y -= swirl->r; break; } /* done another point */ swirl->dir_done++; } else { /* none drawn yet */ swirl->dir_done = 0; /* change direction - check and record if off screen */ switch (swirl->direction) { case DRAW_RIGHT: swirl->direction = DRAW_DOWN; if (swirl->x > swirl->width - swirl->r) { /* skip these points */ swirl->dir_done = swirl->dir_todo; swirl->y += (swirl->dir_todo * swirl->r); /* check for finish */ if (swirl->off_screen) swirl->drawing = False; swirl->off_screen = True; } else swirl->off_screen = False; break; case DRAW_DOWN: swirl->direction = DRAW_LEFT; swirl->dir_todo++; if (swirl->y > swirl->height - swirl->r) { /* skip these points */ swirl->dir_done = swirl->dir_todo; swirl->x -= (swirl->dir_todo * swirl->r); /* check for finish */ if (swirl->off_screen) swirl->drawing = False; swirl->off_screen = True; } else swirl->off_screen = False; break; case DRAW_LEFT: swirl->direction = DRAW_UP; if (swirl->x < 0) { /* skip these points */ swirl->dir_done = swirl->dir_todo; swirl->y -= (swirl->dir_todo * swirl->r); /* check for finish */ if (swirl->off_screen) swirl->drawing = False; swirl->off_screen = True; } else swirl->off_screen = False; break; case DRAW_UP: swirl->direction = DRAW_RIGHT; swirl->dir_todo++; if (swirl->y < 0) { /* skip these points */ swirl->dir_done = swirl->dir_todo; swirl->x += (swirl->dir_todo * swirl->r); /* check for finish */ if (swirl->off_screen) swirl->drawing = False; swirl->off_screen = True; } else swirl->off_screen = False; break; } } } /****************************************************************/ /* * init_swirl * * Initialise things for swirling * * - win is the window to draw in */ ENTRYPOINT void init_swirl(ModeInfo * mi) { Display *display = MI_DISPLAY(mi); Window window = MI_WINDOW(mi); SWIRL_P swirl; /* does the swirls array exist? */ if (swirls == NULL) { /* allocate an array, one entry for each screen */ swirls = (SWIRL_P) calloc(MI_NUM_SCREENS(mi), sizeof (SWIRL)); } /* get a pointer to this swirl */ swirl = &(swirls[MI_SCREEN(mi)]); initialise_swirl(mi, swirl); /* get window parameters */ swirl->win = window; swirl->width = MI_WIN_WIDTH(mi); swirl->height = MI_WIN_HEIGHT(mi); swirl->depth = MI_WIN_DEPTH(mi); swirl->rdepth = swirl->depth; swirl->visual = MI_VISUAL(mi); if (swirl->depth > 16) swirl->depth = 16; /* initialise image for speeding up drawing */ initialise_image(mi, swirl); /* clear the window (before setting the colourmap) */ XClearWindow(display, MI_WINDOW(mi)); #ifdef STANDALONE swirl->rgb_values = mi->colors; swirl->colours = mi->npixels; swirl->dcolours = swirl->colours; /* swirl->fixed_colourmap = !mi->writable_p;*/ #else /* !STANDALONE */ /* initialise the colours from which the colourmap is derived */ initialise_colours(basic_colours, MI_SATURATION(mi)); /* set up the colour map */ create_colourmap(mi, swirl); /* attach the colour map to the window (if we have one) */ if (!swirl->fixed_colourmap) { #if 1 setColormap(display, window, swirl->cmap, MI_WIN_IS_INWINDOW(mi)); #else XSetWindowColormap(display, window, swirl->cmap); (void) XSetWMColormapWindows(display, window, &window, 1); XInstallColormap(display, swirl->cmap); #endif } #endif /* STANDALONE */ /* resolution starts off chunky */ swirl->resolution = MIN_RES + 1; /* calculate the pixel step for this resulution */ swirl->r = (1 << (swirl->resolution - 1)); /* how many knots? */ swirl->n_knots = random_no((unsigned int) MI_BATCHCOUNT(mi) / 2) + MI_BATCHCOUNT(mi) + 1; /* what type of knots? */ swirl->knot_type = ALL; /* for now */ /* use two_plane mode occaisionally */ if (random_no(100) <= TWO_PLANE_PCNT) { swirl->two_plane = swirl->first_plane = True; swirl->max_resolution = 2; } else swirl->two_plane = False; /* fix the knot values */ create_knots(swirl); /* we are off */ swirl->started = True; swirl->drawing = False; } /****************************************************************/ /* * draw_swirl * * Draw one iteration of swirling * * - win is the window to draw in */ ENTRYPOINT void draw_swirl(ModeInfo * mi) { SWIRL_P swirl = &(swirls[MI_SCREEN(mi)]); /* are we going? */ if (swirl->started) { /* in the middle of drawing? */ if (swirl->drawing) { #ifdef STANDALONE if (mi->writable_p) rotate_colors(mi->xgwa.screen, MI_COLORMAP(mi), swirl->rgb_values, swirl->colours, 1); #else /* !STANDALONE */ /* rotate the colours */ install_map(MI_DISPLAY(mi), swirl, swirl->dshift); #endif /* !STANDALONE */ /* draw a batch of points */ swirl->batch_todo = BATCH_DRAW; while ((swirl->batch_todo > 0) && swirl->drawing) { /* draw a point */ draw_point(mi, swirl); /* move to the next point */ next_point(swirl); /* done a point */ swirl->batch_todo--; } } else { #ifdef STANDALONE if (mi->writable_p) rotate_colors(mi->xgwa.screen, MI_COLORMAP(mi), swirl->rgb_values, swirl->colours, 1); #else /* !STANDALONE */ /* rotate the colours */ install_map(MI_DISPLAY(mi), swirl, swirl->shift); #endif /* !STANDALONE */ /* time for a higher resolution? */ if (swirl->resolution > swirl->max_resolution) { /* move to higher resolution */ swirl->resolution--; /* calculate the pixel step for this resulution */ swirl->r = (1 << (swirl->resolution - 1)); /* start drawing again */ swirl->drawing = True; /* start in the middle of the screen */ swirl->x = (swirl->width - swirl->r) / 2; swirl->y = (swirl->height - swirl->r) / 2; /* initialise spiral drawing parameters */ swirl->direction = DRAW_RIGHT; swirl->dir_todo = 1; swirl->dir_done = 0; } else { /* all done, decide when to restart */ if (swirl->start_again == -1) { /* start the counter */ swirl->start_again = RESTART; } else if (swirl->start_again == 0) { /* reset the counter */ swirl->start_again = -1; #ifdef STANDALONE /* Pick a new colormap! */ XClearWindow (MI_DISPLAY(mi), MI_WINDOW(mi)); free_colors (mi->xgwa.screen, MI_COLORMAP(mi), mi->colors, mi->npixels); make_smooth_colormap (mi->xgwa.screen, MI_VISUAL(mi), MI_COLORMAP(mi), mi->colors, &mi->npixels, True, &mi->writable_p, True); swirl->colours = mi->npixels; #endif /* STANDALONE */ /* start again */ init_swirl(mi); } else /* decrement the counter */ swirl->start_again--; } } } } ENTRYPOINT void reshape_swirl(ModeInfo * mi, int width, int height) { XClearWindow (MI_DISPLAY (mi), MI_WINDOW(mi)); init_swirl (mi); } /****************************************************************/ ENTRYPOINT void release_swirl (ModeInfo * mi) { /* does the swirls array exist? */ if (swirls != NULL) { int i; /* free them all */ for (i = 0; i < MI_NUM_SCREENS(mi); i++) { SWIRL_P swirl = &(swirls[i]); #ifndef STANDALONE if (swirl->cmap != (Colormap) NULL) XFreeColormap(MI_DISPLAY(mi), swirl->cmap); #endif /* STANDALONE */ #ifndef STANDALONE if (swirl->rgb_values != NULL) XFree((void *) swirl->rgb_values); #endif /* !STANDALONE */ if (swirl->ximage != NULL) XDestroyImage(swirl->ximage); if (swirl->knots) (void) free((void *) swirl->knots); } /* deallocate an array, one entry for each screen */ (void) free((void *) swirls); swirls = NULL; } } /****************************************************************/ ENTRYPOINT void refresh_swirl (ModeInfo * mi) { SWIRL_P swirl = &(swirls[MI_SCREEN(mi)]); if (swirl->started) { if (swirl->drawing) swirl->resolution = swirl->resolution + 1; swirl->drawing = False; } } ENTRYPOINT Bool swirl_handle_event (ModeInfo *mi, XEvent *event) { if (screenhack_event_helper (MI_DISPLAY(mi), MI_WINDOW(mi), event)) { reshape_swirl (mi, MI_WIDTH(mi), MI_HEIGHT(mi)); return True; } return False; } XSCREENSAVER_MODULE ("Swirl", swirl) xscreensaver-5.36/hacks/xlockmore.c000644 000767 000024 00000040343 12717747753 017426 0ustar00jwzstaff000000 000000 /* xlockmore.c --- xscreensaver compatibility layer for xlockmore modules. * xscreensaver, Copyright (c) 1997-2014 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 file, along with xlockmore.h, make it possible to compile an xlockmore * module into a standalone program, and thus use it with xscreensaver. * By Jamie Zawinski on 10-May-97; based on the ideas * in the older xlock.h by Charles Hannum . (I had * to redo it, since xlockmore has diverged so far from xlock...) */ #include "xlockmoreI.h" #include "screenhack.h" #ifndef HAVE_JWXYZ # include #endif /* !HAVE_JWXYZ */ #define countof(x) (sizeof((x))/sizeof(*(x))) #define MAX_COLORS (1L<<13) extern struct xscreensaver_function_table *xscreensaver_function_table; extern const char *progclass; extern struct xlockmore_function_table xlockmore_function_table; static void *xlockmore_init (Display *, Window, struct xlockmore_function_table *); static unsigned long xlockmore_draw (Display *, Window, void *); static void xlockmore_reshape (Display *, Window, void *, unsigned int w, unsigned int h); static Bool xlockmore_event (Display *, Window, void *, XEvent *); static void xlockmore_free (Display *, Window, void *); void xlockmore_setup (struct xscreensaver_function_table *xsft, void *arg) { struct xlockmore_function_table *xlmft = (struct xlockmore_function_table *) arg; int i, j; char *s; XrmOptionDescRec *new_options; char **new_defaults; const char *xlockmore_defaults; ModeSpecOpt *xlockmore_opts = xlmft->opts; # undef ya_rand_init ya_rand_init (0); xsft->init_cb = (void *(*) (Display *, Window)) xlockmore_init; xsft->draw_cb = xlockmore_draw; xsft->reshape_cb = xlockmore_reshape; xsft->event_cb = xlockmore_event; xsft->free_cb = xlockmore_free; progclass = xlmft->progclass; xlockmore_defaults = xlmft->defaults; /* Translate the xlockmore `opts[]' argument to a form that screenhack.c expects. */ new_options = (XrmOptionDescRec *) calloc (xlockmore_opts->numopts*3 + 100, sizeof (*new_options)); for (i = 0; i < xlockmore_opts->numopts; i++) { XrmOptionDescRec *old = &xlockmore_opts->opts[i]; XrmOptionDescRec *new = &new_options[i]; if (old->option[0] == '-') new->option = old->option; else { /* Convert "+foo" to "-no-foo". */ new->option = (char *) malloc (strlen(old->option) + 5); strcpy (new->option, "-no-"); strcat (new->option, old->option + 1); } new->specifier = strrchr (old->specifier, '.'); if (!new->specifier) abort(); new->argKind = old->argKind; new->value = old->value; } /* Add extra args, if they're mentioned in the defaults... */ { char *args[] = { "-count", "-cycles", "-delay", "-ncolors", "-size", "-font", "-wireframe", "-use3d", "-useSHM" }; for (j = 0; j < countof(args); j++) if (strstr(xlockmore_defaults, args[j]+1)) { XrmOptionDescRec *new = &new_options[i++]; new->option = args[j]; new->specifier = strdup(args[j]); new->specifier[0] = '.'; if (!strcmp(new->option, "-wireframe")) { new->argKind = XrmoptionNoArg; new->value = "True"; new = &new_options[i++]; new->option = "-no-wireframe"; new->specifier = new_options[i-2].specifier; new->argKind = XrmoptionNoArg; new->value = "False"; } else if (!strcmp(new->option, "-use3d")) { new->option = "-3d"; new->argKind = XrmoptionNoArg; new->value = "True"; new = &new_options[i++]; new->option = "-no-3d"; new->specifier = new_options[i-2].specifier; new->argKind = XrmoptionNoArg; new->value = "False"; } else if (!strcmp(new->option, "-useSHM")) { new->option = "-shm"; new->argKind = XrmoptionNoArg; new->value = "True"; new = &new_options[i++]; new->option = "-no-shm"; new->specifier = new_options[i-2].specifier; new->argKind = XrmoptionNoArg; new->value = "False"; } else { new->argKind = XrmoptionSepArg; new->value = 0; } } } /* Construct the kind of `defaults' that screenhack.c expects from the xlockmore `vars[]' argument. */ i = 0; new_defaults = (char **) calloc (1, xlockmore_opts->numvarsdesc * 10 + 1000); /* Put on the PROGCLASS.background/foreground resources. */ s = (char *) malloc(50); *s = 0; # ifndef HAVE_JWXYZ strcpy (s, progclass); # endif strcat (s, ".background: black"); new_defaults [i++] = s; s = (char *) malloc(50); *s = 0; # ifndef HAVE_JWXYZ strcpy (s, progclass); # endif strcat (s, ".foreground: white"); new_defaults [i++] = s; /* Copy the lines out of the `xlockmore_defaults' var and into this array. */ s = strdup (xlockmore_defaults); while (s && *s) { new_defaults [i++] = s; s = strchr(s, '\n'); if (s) *s++ = 0; } /* Copy the defaults out of the `xlockmore_opts->' variable. */ for (j = 0; j < xlockmore_opts->numvarsdesc; j++) { const char *def = xlockmore_opts->vars[j].def; if (!def) abort(); if (!*def) abort(); if (strlen(def) > 1000) abort(); s = (char *) malloc (strlen (xlockmore_opts->vars[j].name) + strlen (def) + 10); strcpy (s, "*"); strcat (s, xlockmore_opts->vars[j].name); strcat (s, ": "); strcat (s, def); new_defaults [i++] = s; /* Go through the list of resources and print a warning if there are any duplicates. */ { char *onew = strdup (xlockmore_opts->vars[j].name); const char *new = onew; int k; if ((s = strrchr (new, '.'))) new = s+1; if ((s = strrchr (new, '*'))) new = s+1; for (k = 0; k < i-1; k++) { char *oold = strdup (new_defaults[k]); const char *old = oold; if ((s = strchr (oold, ':'))) *s = 0; if ((s = strrchr (old, '.'))) old = s+1; if ((s = strrchr (old, '*'))) old = s+1; if (!strcasecmp (old, new)) { fprintf (stderr, "%s: duplicate resource \"%s\": " "set in both DEFAULTS and vars[]\n", progname, old); } free (oold); } free (onew); } } new_defaults [i] = 0; xsft->progclass = progclass; xsft->options = new_options; xsft->defaults = (const char * const *) new_defaults; } static void xlockmore_read_resources (ModeInfo *mi) { Display *dpy = mi->dpy; ModeSpecOpt *xlockmore_opts = mi->xlmft->opts; int i; for (i = 0; i < xlockmore_opts->numvarsdesc; i++) { void *var = xlockmore_opts->vars[i].var; Bool *var_b = (Bool *) var; char **var_c = (char **) var; int *var_i = (int *) var; float *var_f = (float *) var; switch (xlockmore_opts->vars[i].type) { case t_String: *var_c = get_string_resource (dpy, xlockmore_opts->vars[i].name, xlockmore_opts->vars[i].classname); break; case t_Float: *var_f = get_float_resource (dpy, xlockmore_opts->vars[i].name, xlockmore_opts->vars[i].classname); break; case t_Int: *var_i = get_integer_resource (dpy, xlockmore_opts->vars[i].name, xlockmore_opts->vars[i].classname); break; case t_Bool: *var_b = get_boolean_resource (dpy, xlockmore_opts->vars[i].name, xlockmore_opts->vars[i].classname); break; default: abort (); } } } static void * xlockmore_init (Display *dpy, Window window, struct xlockmore_function_table *xlmft) { ModeInfo *mi = (ModeInfo *) calloc (1, sizeof(*mi)); XGCValues gcv; XColor color; int i; Bool root_p; if (! xlmft) abort(); mi->xlmft = xlmft; mi->dpy = dpy; mi->window = window; XGetWindowAttributes (dpy, window, &mi->xgwa); #ifdef HAVE_JWXYZ # if 0 /* In Cocoa and Android-based xscreensaver, all hacks run in the same address space, so each one needs to get its own screen number. Believe what jwxyz says about screen counts and numbers. */ mi->num_screens = ScreenCount (dpy); mi->screen_number = XScreenNumberOfScreen (mi->xgwa.screen); # else /* No, that doesn't work. The xlockmore docs/HACKERS.GUIDE says that xlock modes are supposed to support repeated calls to init_*() for the same screen in the same session, but in practice, a number of them blow up if you do that. So instead we're stuck with a world where on OSX/iOS, we have to increment the screen number every time the hack is run. Arrgh. */ mi->num_screens = 40; mi->screen_number = xlmft->screen_count; if (mi->screen_number >= mi->num_screens) abort(); xlmft->screen_count++; # endif root_p = True; #else /* real Xlib */ /* In Xlib-based xscreensaver, each hack runs in its own address space, so each one only needs to be aware of one screen. */ mi->num_screens = 1; mi->screen_number = 0; { /* kludge for DEBUG_PAIR */ static int screen_tick = 0; mi->num_screens++; if (screen_tick) mi->screen_number++; screen_tick++; } root_p = (window == RootWindowOfScreen (mi->xgwa.screen)); /* Everybody gets motion events, just in case. */ XSelectInput (dpy, window, (mi->xgwa.your_event_mask | PointerMotionMask)); #endif /* !HAVE_JWXYZ */ color.flags = DoRed|DoGreen|DoBlue; color.red = color.green = color.blue = 0; if (!XAllocColor(dpy, mi->xgwa.colormap, &color)) abort(); mi->black = color.pixel; color.red = color.green = color.blue = 0xFFFF; if (!XAllocColor(dpy, mi->xgwa.colormap, &color)) abort(); mi->white = color.pixel; if (mono_p) { static XColor colors[2]; MONO: mi->npixels = 2; if (! mi->pixels) mi->pixels = (unsigned long *) calloc (mi->npixels, sizeof (*mi->pixels)); if (!mi->colors) mi->colors = (XColor *) calloc (mi->npixels, sizeof (*mi->colors)); colors[0].flags = DoRed|DoGreen|DoBlue; colors[1].flags = DoRed|DoGreen|DoBlue; colors[0].red = colors[0].green = colors[0].blue = 0; colors[1].red = colors[1].green = colors[1].blue = 0xFFFF; mi->writable_p = False; } else { mi->npixels = get_integer_resource (dpy, "ncolors", "Integer"); if (mi->npixels <= 0) mi->npixels = 64; else if (mi->npixels > MAX_COLORS) mi->npixels = MAX_COLORS; mi->colors = (XColor *) calloc (mi->npixels, sizeof (*mi->colors)); mi->writable_p = mi->xlmft->want_writable_colors; switch (mi->xlmft->desired_color_scheme) { case color_scheme_uniform: make_uniform_colormap (mi->xgwa.screen, mi->xgwa.visual, mi->xgwa.colormap, mi->colors, &mi->npixels, True, &mi->writable_p, True); break; case color_scheme_smooth: make_smooth_colormap (mi->xgwa.screen, mi->xgwa.visual, mi->xgwa.colormap, mi->colors, &mi->npixels, True, &mi->writable_p, True); break; case color_scheme_bright: case color_scheme_default: make_random_colormap (mi->xgwa.screen, mi->xgwa.visual, mi->xgwa.colormap, mi->colors, &mi->npixels, (mi->xlmft->desired_color_scheme == color_scheme_bright), True, &mi->writable_p, True); break; default: abort(); } if (mi->npixels <= 2) goto MONO; else { mi->pixels = (unsigned long *) calloc (mi->npixels, sizeof (*mi->pixels)); for (i = 0; i < mi->npixels; i++) mi->pixels[i] = mi->colors[i].pixel; } } gcv.foreground = mi->white; gcv.background = mi->black; mi->gc = XCreateGC (dpy, window, GCForeground|GCBackground, &gcv); mi->fullrandom = True; mi->pause = get_integer_resource (dpy, "delay", "Usecs"); mi->cycles = get_integer_resource (dpy, "cycles", "Int"); mi->batchcount = get_integer_resource (dpy, "count", "Int"); mi->size = get_integer_resource (dpy, "size", "Int"); mi->threed = get_boolean_resource (dpy, "use3d", "Boolean"); mi->threed_delta = get_float_resource (dpy, "delta3d", "Float"); mi->threed_right_color = get_pixel_resource (dpy, mi->xgwa.colormap, "right3d", "Color"); mi->threed_left_color = get_pixel_resource (dpy, mi->xgwa.colormap, "left3d", "Color"); mi->threed_both_color = get_pixel_resource (dpy, mi->xgwa.colormap, "both3d", "Color"); mi->threed_none_color = get_pixel_resource (dpy, mi->xgwa.colormap, "none3d", "Color"); mi->wireframe_p = get_boolean_resource (dpy, "wireframe", "Boolean"); mi->root_p = root_p; #ifdef HAVE_XSHM_EXTENSION mi->use_shm = get_boolean_resource (dpy, "useSHM", "Boolean"); #endif /* !HAVE_XSHM_EXTENSION */ mi->fps_p = get_boolean_resource (dpy, "doFPS", "DoFPS"); mi->recursion_depth = -1; /* see fps.c */ if (mi->pause < 0) mi->pause = 0; else if (mi->pause > 100000000) mi->pause = 100000000; /* If this hack uses fonts (meaning, mentioned "font" in DEFAULTS) then load it. */ { char *name = get_string_resource (dpy, "font", "Font"); if (name) { XFontStruct *f = XLoadQueryFont (dpy, name); const char *def1 = "-*-helvetica-bold-r-normal-*-180-*"; const char *def2 = "fixed"; if (!f) { fprintf (stderr, "%s: font %s does not exist, using %s\n", progname, name, def1); f = XLoadQueryFont (dpy, def1); } if (!f) { fprintf (stderr, "%s: font %s does not exist, using %s\n", progname, def1, def2); f = XLoadQueryFont (dpy, def2); } if (f) XSetFont (dpy, mi->gc, f->fid); if (f) XFreeFont (dpy, f); free (name); } } xlockmore_read_resources (mi); XClearWindow (dpy, window); mi->xlmft->hack_init (mi); return mi; } static unsigned long xlockmore_draw (Display *dpy, Window window, void *closure) { ModeInfo *mi = (ModeInfo *) closure; unsigned long orig_pause = mi->pause; unsigned long this_pause; mi->xlmft->hack_draw (mi); this_pause = mi->pause; mi->pause = orig_pause; return this_pause; } static void xlockmore_reshape (Display *dpy, Window window, void *closure, unsigned int w, unsigned int h) { ModeInfo *mi = (ModeInfo *) closure; if (mi && mi->xlmft->hack_reshape) { XGetWindowAttributes (dpy, window, &mi->xgwa); mi->xlmft->hack_reshape (mi, mi->xgwa.width, mi->xgwa.height); } } static Bool xlockmore_event (Display *dpy, Window window, void *closure, XEvent *event) { ModeInfo *mi = (ModeInfo *) closure; if (mi && mi->xlmft->hack_handle_events) return mi->xlmft->hack_handle_events (mi, event); else return False; } void xlockmore_do_fps (Display *dpy, Window w, fps_state *fpst, void *closure) { ModeInfo *mi = (ModeInfo *) closure; fps_compute (fpst, 0, mi ? mi->recursion_depth : -1); fps_draw (fpst); } static void xlockmore_free (Display *dpy, Window window, void *closure) { /* Most of the xlockmore/GL hacks don't have `free' functions, and of those that do have them, they're incomplete or buggy. So, fuck it. Under X11, we're about to exit anyway, and it doesn't matter. On OSX, we'll leak a little. Beats crashing. */ #if 0 ModeInfo *mi = (ModeInfo *) closure; if (mi->xlmft->hack_free) mi->xlmft->hack_free (mi); XFreeGC (dpy, mi->gc); free_colors (dpy, mi->xgwa.colormap, mi->colors, mi->npixels); free (mi->colors); free (mi->pixels); free (mi); #endif } xscreensaver-5.36/hacks/fps.c000664 000767 000024 00000015353 12701612216 016172 0ustar00jwzstaff000000 000000 /* fps, Copyright (c) 2001-2014 Jamie Zawinski * Draw a frames-per-second display (Xlib and OpenGL). * * 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. */ #ifdef HAVE_CONFIG_H # include "config.h" #endif /* HAVE_CONFIG_H */ #include #include "screenhackI.h" #include "fpsI.h" fps_state * fps_init (Display *dpy, Window window) { fps_state *st; const char *font; XFontStruct *f; if (! get_boolean_resource (dpy, "doFPS", "DoFPS")) return 0; st = (fps_state *) calloc (1, sizeof(*st)); st->dpy = dpy; st->window = window; st->clear_p = get_boolean_resource (dpy, "fpsSolid", "FPSSolid"); font = get_string_resource (dpy, "fpsFont", "Font"); if (!font) font = "-*-courier-bold-r-normal-*-180-*"; f = XLoadQueryFont (dpy, font); if (!f) f = XLoadQueryFont (dpy, "fixed"); { XWindowAttributes xgwa; XGCValues gcv; XGetWindowAttributes (dpy, window, &xgwa); gcv.font = f->fid; gcv.foreground = get_pixel_resource (st->dpy, xgwa.colormap, "foreground", "Foreground"); st->draw_gc = XCreateGC (dpy, window, GCFont|GCForeground, &gcv); gcv.foreground = get_pixel_resource (st->dpy, xgwa.colormap, "background", "Background"); st->erase_gc = XCreateGC (dpy, window, GCFont|GCForeground, &gcv); } st->font = f; st->x = 10; st->y = 10; if (get_boolean_resource (dpy, "fpsTop", "FPSTop")) st->y = - (st->font->ascent + st->font->descent + 10); strcpy (st->string, "FPS: ... "); return st; } void fps_free (fps_state *st) { if (st->draw_gc) XFreeGC (st->dpy, st->draw_gc); if (st->erase_gc) XFreeGC (st->dpy, st->erase_gc); if (st->font) XFreeFont (st->dpy, st->font); free (st); } void fps_slept (fps_state *st, unsigned long usecs) { st->slept += usecs; } double fps_compute (fps_state *st, unsigned long polys, double depth) { if (! st) return 0; /* too early? */ /* Every N frames (where N is approximately one second's worth of frames) check the wall clock. We do this because checking the wall clock is a slow operation. */ if (st->frame_count++ >= st->last_ifps) { # ifdef GETTIMEOFDAY_TWO_ARGS struct timezone tzp; gettimeofday(&st->this_frame_end, &tzp); # else gettimeofday(&st->this_frame_end); # endif if (st->prev_frame_end.tv_sec == 0) st->prev_frame_end = st->this_frame_end; } /* If we've probed the wall-clock time, regenerate the string. */ if (st->this_frame_end.tv_sec != st->prev_frame_end.tv_sec) { double uprev_frame_end = (st->prev_frame_end.tv_sec + ((double) st->prev_frame_end.tv_usec * 0.000001)); double uthis_frame_end = (st->this_frame_end.tv_sec + ((double) st->this_frame_end.tv_usec * 0.000001)); double fps = st->frame_count / (uthis_frame_end - uprev_frame_end); double idle = (((double) st->slept * 0.000001) / (uthis_frame_end - uprev_frame_end)); double load = 100 * (1 - idle); if (load < 0) load = 0; /* well that's obviously nonsense... */ st->prev_frame_end = st->this_frame_end; st->frame_count = 0; st->slept = 0; st->last_ifps = fps; st->last_fps = fps; sprintf (st->string, (polys ? "FPS: %.1f \nLoad: %.1f%% " : "FPS: %.1f \nLoad: %.1f%% "), fps, load); if (polys > 0) { const char *s = ""; # if 0 if (polys >= (1024 * 1024)) polys >>= 20, s = "M"; else if (polys >= 2048) polys >>= 10, s = "K"; # endif strcat (st->string, "\nPolys: "); if (polys >= 1000000) sprintf (st->string + strlen(st->string), "%lu,%03lu,%03lu%s ", (polys / 1000000), ((polys / 1000) % 1000), (polys % 1000), s); else if (polys >= 1000) sprintf (st->string + strlen(st->string), "%lu,%03lu%s ", (polys / 1000), (polys % 1000), s); else sprintf (st->string + strlen(st->string), "%lu%s ", polys, s); } if (depth >= 0.0) { unsigned long L = strlen (st->string); char *s = st->string + L; strcat (s, "\nDepth: "); sprintf (s + strlen(s), "%.1f", depth); L = strlen (s); /* Remove trailing ".0" in case depth is not a fraction. */ if (s[L-2] == '.' && s[L-1] == '0') s[L-2] = 0; } } return st->last_fps; } /* Width (and optionally height) of the string in pixels. */ static int string_width (XFontStruct *f, const char *c, int *height_ret) { int x = 0; int max_w = 0; int h = f->ascent + f->descent; while (*c) { int cc = *((unsigned char *) c); if (*c == '\n') { if (x > max_w) max_w = x; x = 0; h += f->ascent + f->descent; } else x += (f->per_char ? f->per_char[cc-f->min_char_or_byte2].width : f->min_bounds.rbearing); c++; } if (x > max_w) max_w = x; if (height_ret) *height_ret = h; return max_w; } /* This function is used only in Xlib mode. For GL mode, see glx/fps-gl.c. */ void fps_draw (fps_state *st) { XWindowAttributes xgwa; const char *string = st->string; const char *s; int x = st->x; int y = st->y; int lines = 1; int lh = st->font->ascent + st->font->descent; XGetWindowAttributes (st->dpy, st->window, &xgwa); for (s = string; *s; s++) if (*s == '\n') lines++; if (y < 0) y = -y + (lines-1) * lh; else y = xgwa.height - y; y -= lh * (lines-1) + st->font->descent; /* clear the background */ if (st->clear_p) { int w, h; w = string_width (st->font, string, &h); XFillRectangle (st->dpy, st->window, st->erase_gc, x - st->font->descent, y - lh, w + 2*st->font->descent, h + 2*st->font->descent); } /* draw the text */ while (lines) { s = strchr (string, '\n'); if (! s) s = string + strlen(string); XDrawString (st->dpy, st->window, st->draw_gc, x, y, string, (int) (s - string)); string = s; string++; lines--; y += lh; } } xscreensaver-5.36/hacks/goop.c000644 000767 000024 00000043441 12717741276 016363 0ustar00jwzstaff000000 000000 /* xscreensaver, Copyright (c) 1997-2008 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. */ #include #include "screenhack.h" #include "spline.h" #include "alpha.h" /* This is pretty compute-intensive, probably due to the large number of polygon fills. I tried introducing a scaling factor to make the spline code emit fewer line segments, but that made the edges very rough. However, tuning *maxVelocity, *elasticity and *delay can result in much smoother looking animation. I tuned these for a 1280x1024 Indy display, but I don't know whether these values will be reasonable for a slower machine... The more planes the better -- SGIs have a 12-bit pseudocolor display (4096 colormap cells) which is mostly useless, except for this program, where it means you can have 11 or 12 mutually-transparent objects instead of only 7 or 8. But, if you are using the 12-bit visual, you should crank down the velocity and elasticity, or server slowness will cause the animation to look jerky (yes, it's sad but true, SGI's X server is perceptibly slower when using plane masks on a 12-bit visual than on an 8-bit visual.) Using -max-velocity 0.5 -elasticity 0.9 seems to work ok on my Indy R5k with visual 0x27 and the bottom-of-the-line 24-bit graphics board. It might look better if each blob had an outline, which was a *slightly* darker color than the center, to give them a bit more definition -- but that would mean using two planes per blob. (Or maybe allocating the outline colors outside of the plane-space? Then the outlines wouldn't be transparent, but maybe that wouldn't be so noticeable?) Oh, for an alpha channel... maybe I should rewrite this in GL. Then the blobs could have thickness, and curved edges with specular reflections... */ #define SCALE 10000 /* fixed-point math, for sub-pixel motion */ #define DEF_COUNT 12 /* When planes and count are 0, how many blobs. */ #define RAND(n) ((long) ((random() & 0x7fffffff) % ((long) (n)))) #define RANDSIGN() ((random() & 1) ? 1 : -1) struct blob { long x, y; /* position of midpoint */ long dx, dy; /* velocity and direction */ double torque; /* rotational speed */ double th; /* angle of rotation */ long elasticity; /* how fast they deform */ long max_velocity; /* speed limit */ long min_r, max_r; /* radius range */ int npoints; /* control points */ long *r; /* radii */ spline *spline; }; struct layer { int nblobs; struct blob **blobs; Pixmap pixmap; unsigned long pixel; GC gc; }; enum goop_mode { transparent, opaque, xor, outline }; struct goop { enum goop_mode mode; int width, height; int nlayers; struct layer **layers; unsigned long background; Pixmap pixmap; GC pixmap_gc; GC window_gc; Bool additive_p; Bool cmap_p; int delay; }; static struct blob * make_blob (Display *dpy, int maxx, int maxy, int size) { struct blob *b = (struct blob *) calloc(1, sizeof(*b)); int i; int mid; maxx *= SCALE; maxy *= SCALE; size *= SCALE; b->max_r = size/2; b->min_r = size/10; if (b->min_r < (5*SCALE)) b->min_r = (5*SCALE); mid = ((b->min_r + b->max_r) / 2); b->torque = get_float_resource (dpy, "torque", "Torque"); b->elasticity = SCALE * get_float_resource (dpy, "elasticity", "Elasticity"); b->max_velocity = SCALE * get_float_resource (dpy, "maxVelocity", "MaxVelocity"); b->x = RAND(maxx); b->y = RAND(maxy); b->dx = RAND(b->max_velocity) * RANDSIGN(); b->dy = RAND(b->max_velocity) * RANDSIGN(); b->th = frand(M_PI+M_PI) * RANDSIGN(); b->npoints = (random() % 5) + 5; b->spline = make_spline (b->npoints); b->r = (long *) malloc (sizeof(*b->r) * b->npoints); for (i = 0; i < b->npoints; i++) b->r[i] = (long) ((random() % mid) + (mid/2)) * RANDSIGN(); return b; } static void free_blob(struct blob *blob) { free_spline(blob->spline); free(blob->r); free(blob); } static void throb_blob (struct blob *b) { int i; double frac = ((M_PI+M_PI) / b->npoints); for (i = 0; i < b->npoints; i++) { long r = b->r[i]; long ra = (r > 0 ? r : -r); double th = (b->th > 0 ? b->th : -b->th); long x, y; /* place control points evenly around perimiter, shifted by theta */ x = b->x + ra * cos (i * frac + th); y = b->y + ra * sin (i * frac + th); b->spline->control_x[i] = x / SCALE; b->spline->control_y[i] = y / SCALE; /* alter the radius by a random amount, in the direction in which it had been going (the sign of the radius indicates direction.) */ ra += (RAND(b->elasticity) * (r > 0 ? 1 : -1)); r = ra * (r >= 0 ? 1 : -1); /* If we've reached the end (too long or too short) reverse direction. */ if ((ra > b->max_r && r >= 0) || (ra < b->min_r && r < 0)) r = -r; /* And reverse direction in mid-course once every 50 times. */ else if (! (random() % 50)) r = -r; b->r[i] = r; } } static void move_blob (struct blob *b, int maxx, int maxy) { maxx *= SCALE; maxy *= SCALE; b->x += b->dx; b->y += b->dy; /* If we've reached the edge of the box, reverse direction. */ if ((b->x > maxx && b->dx >= 0) || (b->x < 0 && b->dx < 0)) { b->dx = -b->dx; } if ((b->y > maxy && b->dy >= 0) || (b->y < 0 && b->dy < 0)) { b->dy = -b->dy; } /* Alter velocity randomly. */ if (! (random() % 10)) { b->dx += (RAND(b->max_velocity/2) * RANDSIGN()); b->dy += (RAND(b->max_velocity/2) * RANDSIGN()); /* Throttle velocity */ if (b->dx > b->max_velocity || b->dx < -b->max_velocity) b->dx /= 2; if (b->dy > b->max_velocity || b->dy < -b->max_velocity) b->dy /= 2; } { double th = b->th; double d = (b->torque == 0 ? 0 : frand(b->torque)); if (th < 0) th = -(th + d); else th += d; if (th > (M_PI+M_PI)) th -= (M_PI+M_PI); else if (th < 0) th += (M_PI+M_PI); b->th = (b->th > 0 ? th : -th); } /* Alter direction of rotation randomly. */ if (! (random() % 100)) b->th *= -1; } static void draw_blob (Display *dpy, Drawable drawable, GC gc, struct blob *b, Bool fill_p) { compute_closed_spline (b->spline); #ifdef DEBUG { int i; for (i = 0; i < b->npoints; i++) XDrawLine (dpy, drawable, gc, b->x/SCALE, b->y/SCALE, b->spline->control_x[i], b->spline->control_y[i]); } #else if (fill_p) XFillPolygon (dpy, drawable, gc, b->spline->points, b->spline->n_points, Nonconvex, CoordModeOrigin); else #endif XDrawLines (dpy, drawable, gc, b->spline->points, b->spline->n_points, CoordModeOrigin); } static struct layer * make_layer (Display *dpy, Window window, int width, int height, int nblobs) { int i; struct layer *layer = (struct layer *) calloc(1, sizeof(*layer)); int blob_min, blob_max; XGCValues gcv; layer->nblobs = nblobs; layer->blobs = (struct blob **) malloc(sizeof(*layer->blobs)*layer->nblobs); blob_max = (width < height ? width : height) / 2; blob_min = (blob_max * 2) / 3; for (i = 0; i < layer->nblobs; i++){ int j = blob_max - blob_min; layer->blobs[i] = make_blob (dpy, width, height, (j ? random() % j : 0) + blob_min); } layer->pixmap = XCreatePixmap (dpy, window, width, height, 1); layer->gc = XCreateGC (dpy, layer->pixmap, 0, &gcv); # ifdef HAVE_JWXYZ jwxyz_XSetAlphaAllowed (dpy, layer->gc, True); # endif /* HAVE_JWXYZ */ return layer; } static void free_layer(struct layer *layer, Display *dpy) { int i; for (i = 0; i < layer->nblobs; i++){ free_blob(layer->blobs[i]); } free(layer->blobs); XFreeGC(dpy, layer->gc); free(layer); } #ifndef HAVE_JWXYZ static void draw_layer_plane (Display *dpy, struct layer *layer, int width, int height) { int i; for (i = 0; i < layer->nblobs; i++) { throb_blob (layer->blobs[i]); move_blob (layer->blobs[i], width, height); draw_blob (dpy, layer->pixmap, layer->gc, layer->blobs[i], True); } } #endif /* !HAVE_JWXYZ */ static void draw_layer_blobs (Display *dpy, Drawable drawable, GC gc, struct layer *layer, int width, int height, Bool fill_p) { int i; for (i = 0; i < layer->nblobs; i++) { draw_blob (dpy, drawable, gc, layer->blobs[i], fill_p); throb_blob (layer->blobs[i]); move_blob (layer->blobs[i], width, height); } } static struct goop * make_goop (Screen *screen, Visual *visual, Window window, Colormap cmap, int width, int height, long depth) { Display *dpy = DisplayOfScreen (screen); int i; struct goop *goop = (struct goop *) calloc(1, sizeof(*goop)); XGCValues gcv; int nblobs = get_integer_resource (dpy, "count", "Count"); unsigned long *plane_masks = 0; # ifndef HAVE_JWXYZ unsigned long base_pixel = 0; # endif char *s; s = get_string_resource (dpy, "mode", "Mode"); goop->mode = transparent; if (!s || !*s || !strcasecmp (s, "transparent")) ; else if (!strcasecmp (s, "opaque")) goop->mode = opaque; else if (!strcasecmp (s, "xor")) goop->mode = xor; else fprintf (stderr, "%s: bogus mode: \"%s\"\n", progname, s); free(s); goop->delay = get_integer_resource (dpy, "delay", "Integer"); goop->width = width; goop->height = height; goop->nlayers = get_integer_resource (dpy, "planes", "Planes"); if (goop->nlayers <= 0) goop->nlayers = (random() % (depth-2)) + 2; 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); if (mono_p && goop->mode == transparent) goop->mode = opaque; # ifndef HAVE_JWXYZ /* Try to allocate some color planes before committing to nlayers. */ if (goop->mode == transparent) { int nplanes = goop->nlayers; allocate_alpha_colors (screen, visual, cmap, &nplanes, goop->additive_p, &plane_masks, &base_pixel); if (nplanes > 1) goop->nlayers = nplanes; else { fprintf (stderr, "%s: couldn't allocate any color planes; turning transparency off.\n", progname); goop->mode = opaque; } } # endif /* !HAVE_JWXYZ */ { int lblobs[32]; int total = DEF_COUNT; memset (lblobs, 0, sizeof(lblobs)); if (nblobs <= 0) while (total) for (i = 0; total && i < goop->nlayers; i++) lblobs[i]++, total--; for (i = 0; i < goop->nlayers; i++) goop->layers[i] = make_layer (dpy, window, width, height, (nblobs > 0 ? nblobs : lblobs[i])); } # ifndef HAVE_JWXYZ if (goop->mode == transparent && plane_masks) { for (i = 0; i < goop->nlayers; i++) goop->layers[i]->pixel = base_pixel | plane_masks[i]; goop->background = base_pixel; } # endif /* !HAVE_JWXYZ */ if (plane_masks) free (plane_masks); # ifndef HAVE_JWXYZ if (goop->mode != transparent) # endif /* !HAVE_JWXYZ */ { XColor color; color.flags = DoRed|DoGreen|DoBlue; goop->background = get_pixel_resource (dpy,cmap, "background", "Background"); for (i = 0; i < goop->nlayers; i++) { int H = random() % 360; /* range 0-360 */ double S = ((double) (random()%70) + 30)/100.0; /* range 30%-100% */ double V = ((double) (random()%34) + 66)/100.0; /* range 66%-100% */ hsv_to_rgb (H, S, V, &color.red, &color.green, &color.blue); if (XAllocColor (dpy, cmap, &color)) goop->layers[i]->pixel = color.pixel; else goop->layers[i]->pixel = WhitePixelOfScreen(DefaultScreenOfDisplay(dpy)); # ifdef HAVE_JWXYZ if (goop->mode == transparent) { /* give a non-opaque alpha to the color */ unsigned long pixel = goop->layers[i]->pixel; unsigned long amask = BlackPixelOfScreen (screen); unsigned long a = (0xBBBBBBBB & amask); pixel = (pixel & (~amask)) | a; goop->layers[i]->pixel = pixel; } # endif /* HAVE_JWXYZ */ } } goop->pixmap = XCreatePixmap (dpy, window, width, height, (goop->mode == xor ? 1L : depth)); gcv.background = goop->background; gcv.foreground = get_pixel_resource (dpy, cmap, "foreground", "Foreground"); gcv.line_width = get_integer_resource (dpy, "thickness","Thickness"); goop->pixmap_gc = XCreateGC (dpy, goop->pixmap, GCLineWidth, &gcv); goop->window_gc = XCreateGC (dpy, window, GCForeground|GCBackground, &gcv); # ifdef HAVE_JWXYZ jwxyz_XSetAlphaAllowed (dpy, goop->pixmap_gc, True); # endif /* HAVE_JWXYZ */ return goop; } /* Well, the naming of this function is confusing with goop_free()... */ static void free_goop (struct goop *goop, Display *dpy) { int i; for (i = 0; i < goop->nlayers; i++){ struct layer * layer = goop->layers[i]; free_layer(layer, dpy); } free(goop->layers); XFreeGC(dpy, goop->pixmap_gc); XFreeGC(dpy, goop->window_gc); } static void * goop_init (Display *dpy, Window window) { XWindowAttributes xgwa; XGetWindowAttributes (dpy, window, &xgwa); return make_goop (xgwa.screen, xgwa.visual, window, xgwa.colormap, xgwa.width, xgwa.height, xgwa.depth); } static unsigned long goop_draw (Display *dpy, Window window, void *closure) { struct goop *goop = (struct goop *) closure; int i; switch (goop->mode) { # ifndef HAVE_JWXYZ case transparent: for (i = 0; i < goop->nlayers; i++) draw_layer_plane (dpy, goop->layers[i], goop->width, goop->height); XSetForeground (dpy, goop->pixmap_gc, goop->background); XSetFunction (dpy, goop->pixmap_gc, GXcopy); XSetPlaneMask (dpy, goop->pixmap_gc, AllPlanes); XFillRectangle (dpy, goop->pixmap, goop->pixmap_gc, 0, 0, goop->width, goop->height); XSetForeground (dpy, goop->pixmap_gc, ~0L); if (!goop->cmap_p && !goop->additive_p) { int j; for (i = 0; i < goop->nlayers; i++) for (j = 0; j < goop->layers[i]->nblobs; j++) draw_blob (dpy, goop->pixmap, goop->pixmap_gc, goop->layers[i]->blobs[j], True); XSetFunction (dpy, goop->pixmap_gc, GXclear); } for (i = 0; i < goop->nlayers; i++) { XSetPlaneMask (dpy, goop->pixmap_gc, goop->layers[i]->pixel); draw_layer_blobs (dpy, goop->pixmap, goop->pixmap_gc, goop->layers[i], goop->width, goop->height, True); } XCopyArea (dpy, goop->pixmap, window, goop->window_gc, 0, 0, goop->width, goop->height, 0, 0); break; #endif /* !HAVE_JWXYZ */ case xor: XSetFunction (dpy, goop->pixmap_gc, GXcopy); XSetForeground (dpy, goop->pixmap_gc, 0); XFillRectangle (dpy, goop->pixmap, goop->pixmap_gc, 0, 0, goop->width, goop->height); XSetFunction (dpy, goop->pixmap_gc, GXxor); XSetForeground (dpy, goop->pixmap_gc, 1); for (i = 0; i < goop->nlayers; i++) draw_layer_blobs (dpy, goop->pixmap, goop->pixmap_gc, goop->layers[i], goop->width, goop->height, (goop->mode != outline)); XCopyPlane (dpy, goop->pixmap, window, goop->window_gc, 0, 0, goop->width, goop->height, 0, 0, 1L); break; # ifdef HAVE_JWXYZ case transparent: # endif case opaque: case outline: XSetForeground (dpy, goop->pixmap_gc, goop->background); XFillRectangle (dpy, goop->pixmap, goop->pixmap_gc, 0, 0, goop->width, goop->height); for (i = 0; i < goop->nlayers; i++) { XSetForeground (dpy, goop->pixmap_gc, goop->layers[i]->pixel); draw_layer_blobs (dpy, goop->pixmap, goop->pixmap_gc, goop->layers[i], goop->width, goop->height, (goop->mode != outline)); } XCopyArea (dpy, goop->pixmap, window, goop->window_gc, 0, 0, goop->width, goop->height, 0, 0); break; default: abort (); break; } return goop->delay; } static void goop_reshape (Display *dpy, Window window, void *closure, unsigned int w, unsigned int h) { struct goop *goop = (struct goop *) closure; if (w != goop->width || h != goop->height) { struct goop *goop2 = goop_init (dpy, window); free_goop(goop, dpy); memcpy (goop, goop2, sizeof(*goop)); free(goop2); } } static Bool goop_event (Display *dpy, Window window, void *closure, XEvent *event) { return False; } static void goop_free (Display *dpy, Window window, void *closure) { struct goop *goop = (struct goop *) closure; free_goop(goop, dpy); free(goop); } static const char *goop_defaults [] = { ".background: black", ".foreground: yellow", "*delay: 12000", "*additive: true", "*mode: transparent", "*count: 1", "*planes: 12", "*thickness: 5", "*torque: 0.0075", "*elasticity: 0.9", "*maxVelocity: 0.5", #ifdef HAVE_MOBILE "*ignoreRotation: True", #endif 0 }; static XrmOptionDescRec goop_options [] = { { "-delay", ".delay", XrmoptionSepArg, 0 }, { "-count", ".count", XrmoptionSepArg, 0 }, { "-planes", ".planes", XrmoptionSepArg, 0 }, { "-mode", ".mode", XrmoptionSepArg, 0 }, { "-xor", ".mode", XrmoptionNoArg, "xor" }, { "-transparent", ".mode", XrmoptionNoArg, "transparent" }, { "-opaque", ".mode", XrmoptionNoArg, "opaque" }, { "-additive", ".additive", XrmoptionNoArg, "True" }, { "-subtractive", ".additive", XrmoptionNoArg, "false" }, { "-thickness", ".thickness", XrmoptionSepArg, 0 }, { "-torque", ".torque", XrmoptionSepArg, 0 }, { "-elasticity", ".elasticity", XrmoptionSepArg, 0 }, { "-max-velocity", ".maxVelocity", XrmoptionSepArg, 0 }, { 0, 0, 0, 0 } }; XSCREENSAVER_MODULE ("Goop", goop) xscreensaver-5.36/hacks/starfish.c000644 000767 000024 00000032001 12717747770 017235 0ustar00jwzstaff000000 000000 /* xscreensaver, Copyright (c) 1997-2015 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. */ #include #include "screenhack.h" #include "spline.h" #define SCALE 1000 /* fixed-point math, for sub-pixel motion */ #define RAND(n) ((long) ((random() & 0x7fffffff) % ((long) (n)))) #define RANDSIGN() ((random() & 1) ? 1 : -1) enum starfish_mode { pulse, zoom }; struct starfish { enum starfish_mode mode; Bool blob_p; int skip; long x, y; /* position of midpoint */ double th; /* angle of rotation */ double rotv; /* rotational velocity */ double rota; /* rotational acceleration */ long elasticity; /* how fast it deforms: radial velocity */ double rot_max; long min_r, max_r; /* radius range */ int npoints; /* control points */ long *r; /* radii */ spline *spline; XPoint *prev; int n_prev; }; struct state { Display *dpy; Window window; Colormap cmap; XColor *colors; int ncolors; int fg_index; GC gc; int delay, delay2, duration, direction, blob_p; Bool done_once; Bool initted; unsigned long black, white; long tick; time_t start_time; struct starfish *starfish; }; static struct starfish * make_starfish (struct state *st, int maxx, int maxy, int size) { struct starfish *s = (struct starfish *) calloc(1, sizeof(*s)); int i; s->blob_p = st->blob_p; s->elasticity = SCALE * get_float_resource (st->dpy, "thickness", "Thickness"); if (s->elasticity == 0) /* bell curve from 0-15, avg 7.5 */ s->elasticity = RAND(5*SCALE) + RAND(5*SCALE) + RAND(5*SCALE); s->rotv = get_float_resource (st->dpy, "rotation", "Rotation"); if (s->rotv == -1) /* bell curve from 0-12 degrees, avg 6 */ s->rotv = frand(4) + frand(4) + frand(4); s->rotv /= 360; /* convert degrees to ratio */ if (s->blob_p) { s->elasticity *= 3; s->rotv *= 3; } s->rot_max = s->rotv * 2; s->rota = 0.0004 + frand(0.0002); if (! (random() % 20)) size *= frand(0.35) + frand(0.35) + 0.3; { static const char skips[] = { 2, 2, 2, 2, 3, 3, 3, 6, 6, 12 }; s->skip = skips[random() % sizeof(skips)]; } if (! (random() % (s->skip == 2 ? 3 : 12))) s->mode = zoom; else s->mode = pulse; maxx *= SCALE; maxy *= SCALE; size *= SCALE; s->max_r = size; s->min_r = 0; if (s->min_r < (5*SCALE)) s->min_r = (5*SCALE); s->x = maxx/2; s->y = maxy/2; s->th = frand(M_PI+M_PI) * RANDSIGN(); { static const char sizes[] = { 3, 3, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 5, 5, 8, 8, 8, 10, 35 }; int nsizes = sizeof(sizes); if (s->skip > 3) nsizes -= 4; s->npoints = s->skip * sizes[random() % nsizes]; } s->spline = make_spline (s->npoints); s->r = (long *) malloc (sizeof(*s->r) * s->npoints); for (i = 0; i < s->npoints; i++) s->r[i] = ((i % s->skip) == 0) ? 0 : size; return s; } static void free_starfish (struct starfish *s) { if (s->r) free (s->r); if (s->prev) free (s->prev); if (s->spline) { if (s->spline->control_x) free (s->spline->control_x); if (s->spline->control_y) free (s->spline->control_y); if (s->spline->points) free (s->spline->points); free (s->spline); } free (s); } static void throb_starfish (struct starfish *s) { int i; double frac = ((M_PI+M_PI) / s->npoints); for (i = 0; i < s->npoints; i++) { long r = s->r[i]; long ra = (r > 0 ? r : -r); double th = (s->th > 0 ? s->th : -s->th); long x, y; long elasticity = s->elasticity; /* place control points evenly around perimiter, shifted by theta */ x = s->x + ra * cos (i * frac + th); y = s->y + ra * sin (i * frac + th); s->spline->control_x[i] = x / SCALE; s->spline->control_y[i] = y / SCALE; if (s->mode == zoom && ((i % s->skip) == 0)) continue; /* Slow down near the end points: move fastest in the middle. */ { double ratio = (double)ra / (double)(s->max_r - s->min_r); if (ratio > 0.5) ratio = 1-ratio; /* flip */ ratio *= 2; /* normalize */ ratio = (ratio * 0.9) + 0.1; /* fudge */ elasticity *= ratio; } /* Increase/decrease radius by elasticity */ ra += (r >= 0 ? elasticity : -elasticity); if ((i % s->skip) == 0) ra += (elasticity / 2); r = ra * (r >= 0 ? 1 : -1); /* If we've reached the end (too long or too short) reverse direction. */ if ((ra > s->max_r && r >= 0) || (ra < s->min_r && r < 0)) r = -r; s->r[i] = r; } } static void spin_starfish (struct starfish *s) { double th = s->th; if (th < 0) th = -(th + s->rotv); else th += s->rotv; if (th > (M_PI+M_PI)) th -= (M_PI+M_PI); else if (th < 0) th += (M_PI+M_PI); s->th = (s->th > 0 ? th : -th); s->rotv += s->rota; if (s->rotv > s->rot_max || s->rotv < -s->rot_max) { s->rota = -s->rota; } /* If it stops, start it going in the other direction. */ else if (s->rotv < 0) { if (random() & 1) { /* keep going in the same direction */ s->rotv = 0; if (s->rota < 0) s->rota = -s->rota; } else { /* reverse gears */ s->rotv = -s->rotv; s->rota = -s->rota; s->th = -s->th; } } /* Alter direction of rotational acceleration randomly. */ if (! (random() % 120)) s->rota = -s->rota; /* Change acceleration very occasionally. */ if (! (random() % 200)) { if (random() & 1) s->rota *= 1.2; else s->rota *= 0.8; } } static void draw_starfish (struct state *st, Drawable drawable, GC this_gc, struct starfish *s, Bool fill_p) { compute_closed_spline (s->spline); if (s->prev) { XPoint *points = (XPoint *) malloc (sizeof(XPoint) * (s->n_prev + s->spline->n_points + 2)); int i = s->spline->n_points; int j = s->n_prev; memcpy (points, s->spline->points, (i * sizeof(*points))); memcpy (points+i, s->prev, (j * sizeof(*points))); if (s->blob_p) XClearWindow (st->dpy, drawable); XFillPolygon (st->dpy, drawable, this_gc, points, i+j, Complex, CoordModeOrigin); free (points); free (s->prev); s->prev = 0; } s->prev = (XPoint *) malloc (s->spline->n_points * sizeof(XPoint)); memcpy (s->prev, s->spline->points, s->spline->n_points * sizeof(XPoint)); s->n_prev = s->spline->n_points; #ifdef DEBUG if (s->blob_p) { int i; for (i = 0; i < s->npoints; i++) XDrawLine (st->dpy, drawable, this_gc, s->x/SCALE, s->y/SCALE, s->spline->control_x[i], s->spline->control_y[i]); } #endif } static struct starfish * make_window_starfish (struct state *st) { XWindowAttributes xgwa; int size; XGetWindowAttributes (st->dpy, st->window, &xgwa); size = (xgwa.width < xgwa.height ? xgwa.width : xgwa.height); if (st->blob_p) size /= 2; else size *= 1.3; return make_starfish (st, xgwa.width, xgwa.height, size); } static struct starfish * reset_starfish (struct state *st) { XGCValues gcv; unsigned int flags = 0; XWindowAttributes xgwa; XGetWindowAttributes (st->dpy, st->window, &xgwa); st->cmap = xgwa.colormap; if (st->done_once) { if (st->colors && st->ncolors) free_colors (xgwa.screen, st->cmap, st->colors, st->ncolors); if (st->colors) free (st->colors); st->colors = 0; XFreeGC (st->dpy, st->gc); st->gc = 0; } st->ncolors = get_integer_resource (st->dpy, "colors", "Colors"); if (st->ncolors < 2) st->ncolors = 2; if (st->ncolors <= 2) mono_p = True; if (mono_p) st->colors = 0; else st->colors = (XColor *) malloc(sizeof(*st->colors) * (st->ncolors+1)); if (mono_p) ; else if (random() % 3) make_smooth_colormap (xgwa.screen, xgwa.visual, st->cmap, st->colors, &st->ncolors, True, 0, True); else make_uniform_colormap (xgwa.screen, xgwa.visual, st->cmap, st->colors, &st->ncolors, True, 0, True); if (st->ncolors < 2) st->ncolors = 2; if (st->ncolors <= 2) mono_p = True; st->fg_index = 0; if (!mono_p && !st->blob_p) { flags |= GCForeground; gcv.foreground = st->colors[st->fg_index].pixel; XSetWindowBackground (st->dpy, st->window, gcv.foreground); } if (!st->done_once) { XClearWindow (st->dpy, st->window); st->done_once = 1; } flags |= GCFillRule; gcv.fill_rule = EvenOddRule; st->gc = XCreateGC (st->dpy, st->window, flags, &gcv); #ifdef HAVE_JWXYZ if (!st->blob_p) jwxyz_XSetAntiAliasing (st->dpy, st->gc, False); #endif return make_window_starfish (st); } static void run_starfish (struct state *st, struct starfish *s) { throb_starfish (s); spin_starfish (s); draw_starfish (st, st->window, st->gc, s, False); if (mono_p) { if (!st->initted) { st->black = get_pixel_resource (st->dpy, st->cmap, "background", "Background"); st->white = get_pixel_resource (st->dpy, st->cmap, "foreground", "Foreground"); st->initted = True; st->fg_index = st->white; XSetForeground (st->dpy, st->gc, st->fg_index); } else if (!s->blob_p) { st->fg_index = (st->fg_index == st->black ? st->white : st->black); XSetForeground (st->dpy, st->gc, st->fg_index); } } else { st->fg_index = (st->fg_index + 1) % st->ncolors; XSetForeground (st->dpy, st->gc, st->colors [st->fg_index].pixel); } } static void * starfish_init (Display *dpy, Window window) { struct state *st = (struct state *) calloc (1, sizeof(*st)); char *s; st->dpy = dpy; st->window = window; st->delay = get_integer_resource (st->dpy, "delay", "Delay"); st->delay2 = get_integer_resource (st->dpy, "delay2", "Delay") * 1000000; /* st->duration = get_seconds_resource (st->dpy, "duration", "Seconds");*/ st->duration = get_integer_resource (st->dpy, "duration", "Seconds"); st->direction = (random() & 1) ? 1 : -1; s = get_string_resource (st->dpy, "mode", "Mode"); if (s && !strcasecmp (s, "blob")) st->blob_p = True; else if (s && !strcasecmp (s, "zoom")) st->blob_p = False; else if (!s || !*s || !strcasecmp (s, "random")) st->blob_p = !(random() % 3); else fprintf (stderr, "%s: mode must be blob, zoom, or random", progname); if (st->blob_p) st->delay *= 3; st->starfish = reset_starfish (st); return st; } static unsigned long starfish_draw (Display *dpy, Window window, void *closure) { struct state *st = (struct state *) closure; struct starfish *s = st->starfish; time_t now; run_starfish (st, s); if (st->duration > 0) { if (st->start_time == 0) st->start_time = time ((time_t *) 0); now = time ((time_t *) 0); if (st->start_time + st->duration < now) { st->start_time = now; free_starfish (s); /* Every now and then, pick new colors; otherwise, just build a new starfish with the current colors. */ if (! (random () % 10)) s = reset_starfish (st); else s = make_window_starfish (st); st->starfish = s; } } return st->delay; } 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 starfish_event (Display *dpy, Window window, void *closure, XEvent *event) { return False; } static void starfish_free (Display *dpy, Window window, void *closure) { struct state *st = (struct state *) closure; free (st); } static const char *starfish_defaults [] = { ".background: black", ".foreground: white", "*fpsSolid: true", "*delay: 10000", "*thickness: 0", /* pixels, 0 = random */ "*rotation: -1", /* degrees, -1 = "random" */ "*colors: 200", "*duration: 30", "*delay2: 5", "*mode: random", #ifdef HAVE_MOBILE "*ignoreRotation: True", #endif 0 }; static XrmOptionDescRec starfish_options [] = { { "-delay", ".delay", XrmoptionSepArg, 0 }, { "-delay2", ".delay2", XrmoptionSepArg, 0 }, { "-thickness", ".thickness", XrmoptionSepArg, 0 }, { "-rotation", ".rotation", XrmoptionSepArg, 0 }, { "-colors", ".colors", XrmoptionSepArg, 0 }, { "-duration", ".duration", XrmoptionSepArg, 0 }, { "-mode", ".mode", XrmoptionSepArg, 0 }, { "-blob", ".mode", XrmoptionNoArg, "blob" }, { "-zoom", ".mode", XrmoptionNoArg, "zoom" }, { 0, 0, 0, 0 } }; XSCREENSAVER_MODULE ("Starfish", starfish) xscreensaver-5.36/hacks/munch.c000644 000767 000024 00000030224 12710314343 016504 0ustar00jwzstaff000000 000000 /* Munching Squares and Mismunch * * Portions copyright 1992-2014 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. * * Portions Copyright 1997, Tim Showalter * * Permission is granted to copy, modify, and use this as long * as this notice remains intact. No warranties are expressed or * implied. CMU Sucks. * * Portions Copyright 2004 Steven Hazel * * (The "mismunch" part). * * "munch.c" and "mismunch.c" merged by jwz, 29-Aug-2008. * * * *********************************************************************** * * HAKMEM * * MIT AI Memo 239, Feb. 29, 1972. * Beeler, M., Gosper, R.W., and Schroeppel, R. * * http://www.inwap.com/pdp10/hbaker/hakmem/hacks.html#item146 * *********************************************************************** * * ITEM 146: MUNCHING SQUARES * * Another simple display program. It is thought that this was * discovered by Jackson Wright on the RLE PDP-1 circa 1962. * * DATAI 2 * ADDB 1,2 * ROTC 2,-22 * XOR 1,2 * JRST .-4 * * 2=X, 3=Y. Try things like 1001002 in data switches. This also * does * interesting things with operations other than XOR, and * rotations * other than -22. (Try IOR; AND; TSC; FADR; FDV(!); * ROT * -14, -9, -20, * ...) * * ITEM 147 (Schroeppel): * * Munching squares is just views of the graph Y = X XOR T for * consecutive values of T = time. * * ITEM 147 (Cohen, Beeler): * * A modification to munching squares which reveals them in frozen * states through opening and closing curtains: insert FADR 2,1 * before the XOR. Try data switches = * * 4000,,4 1000,,2002 2000,,4 0,,1002 * * (Notation: ,,) * Also try the FADR after the XOR, switches = 1001,,1. * *********************************************************************** */ #include #include "screenhack.h" typedef struct _muncher { int mismunch; int width; int atX, atY; int kX, kT, kY; int grav; XColor fgc; int yshadow, xshadow; int x, y, t; int doom; int done; } muncher; struct state { Display *dpy; Window window; GC gc; int delay, simul, clear, xor; int logminwidth, logmaxwidth; int restart, window_width, window_height; int draw_n; /* number of squares before we have to clear */ int draw_i; int mismunch; muncher **munchers; }; /* * dumb way to get # of digits in number. Probably faster than actually * doing a log and a division, maybe. */ static int dumb_log_2(int k) { int r = -1; while (k > 0) { k >>= 1; r++; } return r; } static void calc_logwidths (struct state *st) { /* Choose a range of square sizes based on the window size. We want a power of 2 for the square width or the munch doesn't fill up. Also, if a square doesn't fit inside an area 20% smaller than the window, it's too big. Mismunched squares that big make things look too noisy. */ if (st->window_height < st->window_width) { st->logmaxwidth = (int)dumb_log_2(st->window_height * 0.8); } else { st->logmaxwidth = (int)dumb_log_2(st->window_width * 0.8); } if (st->logmaxwidth < 2) { st->logmaxwidth = 2; } /* we always want three sizes of squares */ st->logminwidth = st->logmaxwidth - 2; if (st->logminwidth < 2) { st->logminwidth = 2; } } static muncher *make_muncher (struct state *st) { int logwidth; XWindowAttributes xgwa; muncher *m = (muncher *) malloc(sizeof(muncher)); XGetWindowAttributes(st->dpy, st->window, &xgwa); m->mismunch = st->mismunch; /* choose size -- power of two */ logwidth = (st->logminwidth + (random() % (1 + st->logmaxwidth - st->logminwidth))); m->width = 1 << logwidth; /* draw at this location */ m->atX = (random() % (xgwa.width <= m->width ? 1 : xgwa.width - m->width)); m->atY = (random() % (xgwa.height <= m->width ? 1 : xgwa.width - m->width)); /* wrap-around by these values; no need to % as we end up doing that later anyway */ m->kX = ((random() % 2) ? (random() % m->width) : 0); m->kT = ((random() % 2) ? (random() % m->width) : 0); m->kY = ((random() % 2) ? (random() % m->width) : 0); /* set the gravity of the munch, or rather, which direction we draw stuff in. */ m->grav = random() % 2; /* I like this color scheme better than random colors. */ switch (random() % 4) { case 0: m->fgc.red = random() % 65536; m->fgc.blue = random() % 32768; m->fgc.green = random() % 16384; break; case 1: m->fgc.red = 0; m->fgc.blue = random() % 65536; m->fgc.green = random() % 16384; break; case 2: m->fgc.red = random() % 8192; m->fgc.blue = random() % 8192; m->fgc.green = random() % 49152; break; case 3: m->fgc.red = random() % 65536; m->fgc.green = m->fgc.red; m->fgc.blue = m->fgc.red; break; } /* Sometimes draw a mostly-overlapping copy of the square. This generates all kinds of neat blocky graphics when drawing in xor mode. */ if (!m->mismunch || (random() % 4)) { m->xshadow = 0; m->yshadow = 0; } else { m->xshadow = (random() % (m->width/3)) - (m->width/6); m->yshadow = (random() % (m->width/3)) - (m->width/6); } /* Start with a random y value -- this sort of controls the type of deformities seen in the squares. */ m->y = random() % 256; m->t = 0; /* Doom each square to be aborted at some random point. (When doom == (width - 1), the entire square will be drawn.) */ m->doom = (m->mismunch ? (random() % m->width) : (m->width - 1)); m->done = 0; return m; } static void munch (struct state *st, muncher *m) { int drawX, drawY; XWindowAttributes xgwa; if (m->done) { return; } XGetWindowAttributes(st->dpy, st->window, &xgwa); if (!mono_p) { /* XXX there are probably bugs with this. */ if (XAllocColor(st->dpy, xgwa.colormap, &m->fgc)) { XSetForeground(st->dpy, st->gc, m->fgc.pixel); } } /* Finally draw this pass of the munching error. */ for(m->x = 0; m->x < m->width; m->x++) { /* figure out the next point */ /* The ordinary Munching Squares calculation is: m->y = ((m->x ^ ((m->t + m->kT) % m->width)) + m->kY) % m->width; We create some feedback by plugging in y in place of x, and make a couple of values negative so that some parts of some squares get drawn in the wrong place. */ if (m->mismunch) m->y = ((-m->y ^ ((-m->t + m->kT) % m->width)) + m->kY) % m->width; else m->y = ((m->x ^ ((m->t + m->kT) % m->width)) + m->kY) % m->width; drawX = ((m->x + m->kX) % m->width) + m->atX; drawY = (m->grav ? m->y + m->atY : m->atY + m->width - 1 - m->y); XDrawPoint(st->dpy, st->window, st->gc, drawX, drawY); if ((m->xshadow != 0) || (m->yshadow != 0)) { /* draw the corresponding shadow point */ XDrawPoint(st->dpy, st->window, st->gc, drawX + m->xshadow, drawY + m->yshadow); } /* XXX may want to change this to XDrawPoints, but it's fast enough without it for the moment. */ } m->t++; if (m->t > m->doom) { m->done = 1; } } static void * munch_init (Display *dpy, Window w) { struct state *st = (struct state *) calloc (1, sizeof(*st)); XWindowAttributes xgwa; XGCValues gcv; int i; char *mm; st->dpy = dpy; st->window = w; st->restart = 0; /* get the dimensions of the window */ XGetWindowAttributes(st->dpy, w, &xgwa); /* create the gc */ gcv.foreground= get_pixel_resource(st->dpy, xgwa.colormap, "foreground","Foreground"); gcv.background= get_pixel_resource(st->dpy, xgwa.colormap, "background","Background"); st->gc = XCreateGC(st->dpy, w, GCForeground|GCBackground, &gcv); st->delay = get_integer_resource(st->dpy, "delay", "Integer"); if (st->delay < 0) st->delay = 0; st->simul = get_integer_resource(st->dpy, "simul", "Integer"); if (st->simul < 1) st->simul = 1; st->clear = get_integer_resource(st->dpy, "clear", "Integer"); if (st->clear < 0) st->clear = 0; st->xor = get_boolean_resource(st->dpy, "xor", "Boolean"); mm = get_string_resource (st->dpy, "mismunch", "Mismunch"); if (!mm || !*mm || !strcmp(mm, "random")) st->mismunch = random() & 1; else st->mismunch = get_boolean_resource (st->dpy, "mismunch", "Mismunch"); st->window_width = xgwa.width; st->window_height = xgwa.height; calc_logwidths(st); /* always draw xor on mono. */ if (mono_p || st->xor) { XSetFunction(st->dpy, st->gc, GXxor); } st->munchers = (muncher **) calloc(st->simul, sizeof(muncher *)); for (i = 0; i < st->simul; i++) { st->munchers[i] = make_muncher(st); } return st; } static unsigned long munch_draw (Display *dpy, Window w, void *closure) { struct state *st = (struct state *) closure; int i; for (i = 0; i < 5; i++) { /* for (draw_i = 0; draw_i < simul; draw_i++) */ { munch(st, st->munchers[st->draw_i]); if (st->munchers[st->draw_i]->done) { st->draw_n++; free(st->munchers[st->draw_i]); st->munchers[st->draw_i] = make_muncher(st); } } st->draw_i++; if (st->draw_i >= st->simul) { int i = 0; st->draw_i = 0; if (st->restart || (st->clear && st->draw_n >= st->clear)) { char *mm = get_string_resource (st->dpy, "mismunch", "Mismunch"); if (!mm || !*mm || !strcmp(mm, "random")) st->mismunch = random() & 1; for (i = 0; i < st->simul; i++) { free(st->munchers[i]); st->munchers[i] = make_muncher(st); } XClearWindow(st->dpy, w); st->draw_n = 0; st->restart = 0; } } } return st->delay; } static void munch_reshape (Display *dpy, Window window, void *closure, unsigned int w, unsigned int h) { struct state *st = (struct state *) closure; if (w != st->window_width || h != st->window_height) { st->window_width = w; st->window_height = h; calc_logwidths(st); st->restart = 1; st->draw_i = 0; } } static Bool munch_event (Display *dpy, Window window, void *closure, XEvent *event) { struct state *st = (struct state *) closure; if (screenhack_event_helper (dpy, window, event)) { int i; st->window_height--; munch_reshape(dpy, window, closure, st->window_width, st->window_height); st->mismunch = random() & 1; for (i = 0; i < st->simul; i++) { free (st->munchers[i]); st->munchers[i] = make_muncher(st); } XClearWindow(dpy, window); return True; } return False; } static void munch_free (Display *dpy, Window window, void *closure) { struct state *st = (struct state *) closure; free (st); } static const char *munch_defaults [] = { ".background: black", ".foreground: white", "*fpsSolid: true", "*delay: 10000", "*mismunch: random", "*simul: 5", "*clear: 65", "*xor: True", #ifdef HAVE_MOBILE "*ignoreRotation: True", #endif 0 }; static XrmOptionDescRec munch_options [] = { { "-delay", ".delay", XrmoptionSepArg, 0 }, { "-simul", ".simul", XrmoptionSepArg, 0 }, { "-clear", ".clear", XrmoptionSepArg, "true" }, { "-xor", ".xor", XrmoptionNoArg, "true" }, { "-no-xor", ".xor", XrmoptionNoArg, "false" }, { "-classic", ".mismunch", XrmoptionNoArg, "false" }, { "-mismunch", ".mismunch", XrmoptionNoArg, "true" }, { "-random", ".mismunch", XrmoptionNoArg, "random" }, { 0, 0, 0, 0 } }; XSCREENSAVER_MODULE ("Munch", munch) xscreensaver-5.36/hacks/fadeplot.c000644 000767 000024 00000014365 12701612216 017200 0ustar00jwzstaff000000 000000 /* -*- Mode: C; tab-width: 4 -*- */ /* fadeplot --- a fading plot of sine squared */ #if 0 static const char sccsid[] = "@(#)fadeplot.c 5.00 2000/11/01 xlockmore"; #endif /*- * Some easy plotting stuff, by Bas van Gaalen, Holland, PD * * Copyright (c) 1996 by Charles Vidal * * Permission to use, copy, modify, and distribute this software and its * documentation for any purpose and without fee is hereby granted, * provided that the above copyright notice appear in all copies and that * both that copyright notice and this permission notice appear in * supporting documentation. * * This file is provided AS IS with no warranties of any kind. The author * shall have no liability with respect to the infringement of copyrights, * trade secrets or any patents by this file or any part thereof. In no * event will the author be liable for any lost revenue or profits or * other special, indirect and consequential damages. * * Revision History: * 01-Nov-2000: Allocation checks * 10-May-1997: Compatible with screensaver * 1996: Written by Charles Vidal based on work by Bas van Gaalen */ #ifdef STANDALONE # define MODE_fadeplot # define DEFAULTS "*delay: 30000 \n" \ "*count: 10 \n" \ "*cycles: 1500 \n" \ "*ncolors: 64 \n" \ "*fpsSolid: true \n" \ "*ignoreRotation: True \n" \ # define BRIGHT_COLORS # define UNIFORM_COLORS # define fadeplot_handle_event 0 # include "xlockmore.h" /* in xscreensaver distribution */ #else /* STANDALONE */ # include "xlock.h" /* in xlockmore distribution */ #endif /* STANDALONE */ #ifdef MODE_fadeplot ENTRYPOINT ModeSpecOpt fadeplot_opts = {0, (XrmOptionDescRec *) NULL, 0, (argtype *) NULL, (OptionStruct *) NULL}; #ifdef USE_MODULES ModStruct fadeplot_description = {"fadeplot", "init_fadeplot", "draw_fadeplot", "release_fadeplot", "refresh_fadeplot", "init_fadeplot", (char *) NULL, &fadeplot_opts, 30000, 10, 1500, 1, 64, 0.6, "", "Shows a fading plot of sine squared", 0, NULL}; #endif #define MINSTEPS 1 typedef struct { XPoint speed, step, factor, st; int temps, maxpts, nbstep; int min; int width, height; int pix; int angles; int *stab; XPoint *pts; } fadeplotstruct; static fadeplotstruct *fadeplots = (fadeplotstruct *) NULL; static void free_fadeplot(fadeplotstruct *fp) { if (fp->pts != NULL) { (void) free((void *) fp->pts); fp->pts = (XPoint *) NULL; } if (fp->stab != NULL) { (void) free((void *) fp->stab); fp->stab = (int *) NULL; } } static Bool initSintab(ModeInfo * mi) { fadeplotstruct *fp = &fadeplots[MI_SCREEN(mi)]; int i; float x; fp->angles = NRAND(950) + 250; if ((fp->stab = (int *) malloc(fp->angles * sizeof (int))) == NULL) { free_fadeplot(fp); return False; } for (i = 0; i < fp->angles; i++) { x = SINF(2.0 * M_PI * i / fp->angles); fp->stab[i] = (int) (x * ABS(x) * fp->min) + fp->min; } return True; } ENTRYPOINT void init_fadeplot (ModeInfo * mi) { fadeplotstruct *fp; if (fadeplots == NULL) { if ((fadeplots = (fadeplotstruct *) calloc(MI_NUM_SCREENS(mi), sizeof (fadeplotstruct))) == NULL) return; } fp = &fadeplots[MI_SCREEN(mi)]; fp->width = MI_WIDTH(mi); fp->height = MI_HEIGHT(mi); fp->min = MAX(MIN(fp->width, fp->height) / 2, 1); fp->speed.x = 8; fp->speed.y = 10; fp->step.x = 1; fp->step.y = 1; fp->temps = 0; fp->factor.x = MAX(fp->width / (2 * fp->min), 1); fp->factor.y = MAX(fp->height / (2 * fp->min), 1); fp->nbstep = MI_COUNT(mi); if (fp->nbstep < -MINSTEPS) { fp->nbstep = NRAND(-fp->nbstep - MINSTEPS + 1) + MINSTEPS; } else if (fp->nbstep < MINSTEPS) fp->nbstep = MINSTEPS; fp->maxpts = MI_CYCLES(mi); if (fp->maxpts < 1) fp->maxpts = 1; if (fp->pts == NULL) { if ((fp->pts = (XPoint *) calloc(fp->maxpts, sizeof (XPoint))) == NULL) { free_fadeplot(fp); return; } } if (MI_NPIXELS(mi) > 2) fp->pix = NRAND(MI_NPIXELS(mi)); if (fp->stab != NULL) (void) free((void *) fp->stab); if (!initSintab(mi)) return; MI_CLEARWINDOW(mi); } ENTRYPOINT void draw_fadeplot (ModeInfo * mi) { Display *display = MI_DISPLAY(mi); Window window = MI_WINDOW(mi); GC gc = MI_GC(mi); int i, j, temp; fadeplotstruct *fp; if (fadeplots == NULL) return; fp = &fadeplots[MI_SCREEN(mi)]; if (fp->stab == NULL) return; MI_IS_DRAWN(mi) = True; XSetForeground(display, gc, MI_BLACK_PIXEL(mi)); XDrawPoints(display, window, gc, fp->pts, fp->maxpts, CoordModeOrigin); if (MI_NPIXELS(mi) > 2) { XSetForeground(display, gc, MI_PIXEL(mi, fp->pix)); if (++fp->pix >= MI_NPIXELS(mi)) fp->pix = 0; } else XSetForeground(display, gc, MI_WHITE_PIXEL(mi)); temp = 0; for (j = 0; j < fp->nbstep; j++) { for (i = 0; i < fp->maxpts / fp->nbstep; i++) { fp->pts[temp].x = fp->stab[(fp->st.x + fp->speed.x * j + i * fp->step.x) % fp->angles] * fp->factor.x + fp->width / 2 - fp->min; fp->pts[temp].y = fp->stab[(fp->st.y + fp->speed.y * j + i * fp->step.y) % fp->angles] * fp->factor.y + fp->height / 2 - fp->min; temp++; } } XDrawPoints(display, window, gc, fp->pts, temp, CoordModeOrigin); fp->st.x = (fp->st.x + fp->speed.x) % fp->angles; fp->st.y = (fp->st.y + fp->speed.y) % fp->angles; fp->temps++; if ((fp->temps % (fp->angles / 2)) == 0) { fp->temps = fp->temps % fp->angles * 5; if ((fp->temps % (fp->angles)) == 0) fp->speed.y = (fp->speed.y + 1) % 30 + 1; if ((fp->temps % (fp->angles * 2)) == 0) fp->speed.x = (fp->speed.x) % 20; if ((fp->temps % (fp->angles * 3)) == 0) fp->step.y = (fp->step.y + 1) % 2 + 1; MI_CLEARWINDOW(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) { } ENTRYPOINT void release_fadeplot (ModeInfo * mi) { if (fadeplots != NULL) { int screen; for (screen = 0; screen < MI_NUM_SCREENS(mi); screen++) free_fadeplot(&fadeplots[screen]); (void) free((void *) fadeplots); fadeplots = (fadeplotstruct *) NULL; } } XSCREENSAVER_MODULE ("FadePlot", fadeplot) #endif /* MODE_fadeplot */ xscreensaver-5.36/hacks/rd-bomb.c000644 000767 000024 00000042223 12710314356 016722 0ustar00jwzstaff000000 000000 /* xscreensaver, Copyright (c) 1992-2014 Jamie Zawinski * * reaction/diffusion textures * Copyright (c) 1997 Scott Draves spot@transmeta.com * this code is derived from Bomb * see http://www.cs.cmu.edu/~spot/bomb.html * * 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. * * And remember: X Windows is to graphics hacking as roman numerals are to * the square root of pi. */ #include #include "screenhack.h" #ifdef HAVE_XSHM_EXTENSION # include "xshm.h" #endif /* HAVE_XSHM_EXTENSION */ /* costs ~6% speed */ #define dither_when_mapped 1 struct state { Display *dpy; Window window; int ncolors; XColor *colors; Visual *visual; #if dither_when_mapped unsigned char *mc; #endif Colormap cmap; int mapped; int pdepth; int frame, epoch_time; unsigned short *r1, *r2, *r1b, *r2b; int width, height, npix; int radius; int reaction; int diffusion; char *pd; int array_width, array_height; #ifdef HAVE_XSHM_EXTENSION Bool use_shm; XShmSegmentInfo shm_info; #endif GC gc; XImage *image; double array_x, array_y; double array_dx, array_dy; XWindowAttributes xgwa; int delay; }; static void random_colors(struct state *st); /* ----------------------------------------------------------- pixel hack, 8-bit pixel grid, first/next frame interface pixack_init(int *size_h, int *size_v) pixack_frame(char *pix_buf) */ #define bps 16 #define mx ((1<<16)-1) /* you can replace integer mults wish shift/adds with these, but it doesn't help on my 586 */ #define x5(n) ((n<<2)+n) #define x7(n) ((n<<3)-n) /* why strip bit? */ #define R (random()&((1<<30)-1)) #define BELLRAND(x) (((random()%(x)) + (random()%(x)) + (random()%(x)))/3) /* returns number of pixels that the pixack produces. called once. */ static void pixack_init(struct state *st, int *size_h, int *size_v) { st->width = get_integer_resource (st->dpy, "width", "Integer"); st->height = get_integer_resource (st->dpy, "height", "Integer"); if (st->width <= 0 && st->height <= 0 && (R & 1)) st->width = st->height = 64 + BELLRAND(512); if (st->width <= 0) st->width = 64 + BELLRAND(512); if (st->height <= 0) st->height = 64 + BELLRAND(512); if (st->width > st->xgwa.width) st->width = st->xgwa.width; if (st->height > st->xgwa.height) st->height = st->xgwa.height; /* jwz: when (and only when) XSHM is in use on an SGI 8-bit visual, we get shear unless st->width is a multiple of 4. I don't understand why. This is undoubtedly the wrong fix... */ if (visual_depth (st->xgwa.screen, st->xgwa.visual) == 8) st->width &= ~0x7; /* don't go there */ if (st->width < 10) st->width = 10; if (st->height < 10) st->height = 10; st->epoch_time = get_integer_resource (st->dpy, "epoch", "Integer"); st->npix = (st->width + 2) * (st->height + 2); st->r1 = (unsigned short *) malloc(sizeof(unsigned short) * st->npix); st->r2 = (unsigned short *) malloc(sizeof(unsigned short) * st->npix); st->r1b = (unsigned short *) malloc(sizeof(unsigned short) * st->npix); st->r2b = (unsigned short *) malloc(sizeof(unsigned short) * st->npix); if (!st->r1 || !st->r2 || !st->r1b || !st->r2b) { fprintf(stderr, "not enough memory for %d pixels.\n", st->npix); exit(1); } *size_h = st->width; *size_v = st->height; } #define test_pattern_hyper 0 /* returns the pixels. called many times. */ static void pixack_frame(struct state *st, char *pix_buf) { int i, j; int w2 = st->width + 2; unsigned short *t; #if test_pattern_hyper if (st->frame&0x100) sleep(1); #endif if (!(st->frame%st->epoch_time)) { int s; for (i = 0; i < st->npix; i++) { /* equilibrium */ st->r1[i] = 65500; st->r2[i] = 11; } random_colors(st); XSetWindowBackground(st->dpy, st->window, st->colors[255 % st->ncolors].pixel); XClearWindow(st->dpy, st->window); s = w2 * (st->height/2) + st->width/2; st->radius = get_integer_resource (st->dpy, "radius", "Integer"); { int maxr = st->width/2-2; int maxr2 = st->height/2-2; if (maxr2 < maxr) maxr = maxr2; if (st->radius < 0) st->radius = 1 + ((R%10) ? (R%5) : (R % maxr)); if (st->radius > maxr) st->radius = maxr; } for (i = -st->radius; i < (st->radius+1); i++) for (j = -st->radius; j < (st->radius+1); j++) st->r2[s + i + j*w2] = mx - (R&63); st->reaction = get_integer_resource (st->dpy, "reaction", "Integer"); if (st->reaction < 0 || st->reaction > 2) st->reaction = R&1; st->diffusion = get_integer_resource (st->dpy, "diffusion", "Integer"); if (st->diffusion < 0 || st->diffusion > 2) st->diffusion = (R%5) ? ((R%3)?0:1) : 2; if (2 == st->reaction && 2 == st->diffusion) st->reaction = st->diffusion = 0; } for (i = 0; i <= st->width+1; i++) { st->r1[i] = st->r1[i + w2 * st->height]; st->r2[i] = st->r2[i + w2 * st->height]; st->r1[i + w2 * (st->height + 1)] = st->r1[i + w2]; st->r2[i + w2 * (st->height + 1)] = st->r2[i + w2]; } for (i = 0; i <= st->height+1; i++) { st->r1[w2 * i] = st->r1[st->width + w2 * i]; st->r2[w2 * i] = st->r2[st->width + w2 * i]; st->r1[w2 * i + st->width + 1] = st->r1[w2 * i + 1]; st->r2[w2 * i + st->width + 1] = st->r2[w2 * i + 1]; } for (i = 0; i < st->height; i++) { int ii = i + 1; char *q = pix_buf + st->width * i; short *qq = ((short *) pix_buf) + st->width * i; /* long *qqq = ((long *) pix_buf) + st->width * i; -- crashes on Alpha */ int *qqq = ((int *) pix_buf) + st->width * i; unsigned short *i1 = st->r1 + 1 + w2 * ii; unsigned short *i2 = st->r2 + 1 + w2 * ii; unsigned short *o1 = st->r1b + 1 + w2 * ii; unsigned short *o2 = st->r2b + 1 + w2 * ii; for (j = 0; j < st->width; j++) { #if test_pattern_hyper int r1 = (i * j + (st->frame&127)*frame)&65535; #else int uvv, r1 = 0, r2 = 0; switch (st->diffusion) { case 0: r1 = i1[j] + i1[j+1] + i1[j-1] + i1[j+w2] + i1[j-w2]; r1 = r1 / 5; r2 = (i2[j]<<3) + i2[j+1] + i2[j-1] + i2[j+w2] + i2[j-w2]; r2 = r2 / 12; break; case 1: r1 = i1[j+1] + i1[j-1] + i1[j+w2] + i1[j-w2]; r1 = r1 >> 2; r2 = (i2[j]<<2) + i2[j+1] + i2[j-1] + i2[j+w2] + i2[j-w2]; r2 = r2 >> 3; break; case 2: r1 = (i1[j]<<1) + (i1[j+1]<<1) + (i1[j-1]<<1) + i1[j+w2] + i1[j-w2]; r1 = r1 >> 3; r2 = (i2[j]<<2) + i2[j+1] + i2[j-1] + i2[j+w2] + i2[j-w2]; r2 = r2 >> 3; break; } /* John E. Pearson "Complex Patterns in a Simple System" Science, July 1993 */ /* uvv = (((r1 * r2) >> bps) * r2) >> bps; */ /* avoid signed integer overflow */ uvv = ((((r1 >> 1)* r2) >> bps) * r2) >> (bps - 1); switch (st->reaction) { /* costs 4% */ case 0: r1 += 4 * (((28 * (mx-r1)) >> 10) - uvv); r2 += 4 * (uvv - ((80 * r2) >> 10)); break; case 1: r1 += 3 * (((27 * (mx-r1)) >> 10) - uvv); r2 += 3 * (uvv - ((80 * r2) >> 10)); break; case 2: r1 += 2 * (((28 * (mx-r1)) >> 10) - uvv); r2 += 3 * (uvv - ((80 * r2) >> 10)); break; } if (r1 > mx) r1 = mx; if (r2 > mx) r2 = mx; if (r1 < 0) r1 = 0; if (r2 < 0) r2 = 0; o1[j] = r1; o2[j] = r2; #endif /* this is terrible. here i want to assume ncolors = 256. should lose double indirection */ if (st->mapped) #if dither_when_mapped q[j] = st->colors[st->mc[r1] % st->ncolors].pixel; #else q[j] = st->colors[(r1>>8) % st->ncolors].pixel; #endif else if (st->pdepth == 8) q[j] = st->colors[(r1>>8) % st->ncolors].pixel; else if (st->pdepth == 16) #if dither_when_mapped qq[j] = st->colors[st->mc[r1] % st->ncolors].pixel; #else qq[j] = st->colors[(r1>>8) % st->ncolors].pixel; #endif else if (st->pdepth == 32) #if dither_when_mapped qqq[j] = st->colors[st->mc[r1] % st->ncolors].pixel; #else qqq[j] = st->colors[(r1>>8) % st->ncolors].pixel; #endif else abort(); } } t = st->r1; st->r1 = st->r1b; st->r1b = t; t = st->r2; st->r2 = st->r2b; st->r2b = t; } /* ------------- xscreensaver rendering -------------- */ static const char *rd_defaults [] = { ".background: black", ".foreground: white", "*fpsSolid: true", "*width: 0", /* tried to use -1 but it complained */ "*height: 0", "*epoch: 40000", "*reaction: -1", "*diffusion: -1", "*radius: -1", "*speed: 0.0", "*size: 1.0", "*delay: 30000", "*colors: 255", #ifdef HAVE_XSHM_EXTENSION "*useSHM: True", #else "*useSHM: False", #endif #ifdef HAVE_MOBILE "*ignoreRotation: True", #endif 0 }; static XrmOptionDescRec rd_options [] = { { "-width", ".width", XrmoptionSepArg, 0 }, { "-height", ".height", XrmoptionSepArg, 0 }, { "-epoch", ".epoch", XrmoptionSepArg, 0 }, { "-reaction", ".reaction", XrmoptionSepArg, 0 }, { "-diffusion", ".diffusion", XrmoptionSepArg, 0 }, { "-radius", ".radius", XrmoptionSepArg, 0 }, { "-speed", ".speed", XrmoptionSepArg, 0 }, { "-size", ".size", XrmoptionSepArg, 0 }, { "-delay", ".delay", XrmoptionSepArg, 0 }, { "-ncolors", ".colors", XrmoptionSepArg, 0 }, { "-shm", ".useSHM", XrmoptionNoArg, "True" }, { "-no-shm", ".useSHM", XrmoptionNoArg, "False" }, { 0, 0, 0, 0 } }; static void random_colors(struct state *st) { memset(st->colors, 0, st->ncolors*sizeof(*st->colors)); make_smooth_colormap (st->xgwa.screen, st->visual, st->cmap, st->colors, &st->ncolors, True, 0, True); if (st->ncolors <= 2) { mono_p = True; st->ncolors = 2; st->colors[0].flags = DoRed|DoGreen|DoBlue; st->colors[0].red = st->colors[0].green = st->colors[0].blue = 0; XAllocColor(st->dpy, st->cmap, &st->colors[0]); st->colors[1].flags = DoRed|DoGreen|DoBlue; st->colors[1].red = st->colors[1].green = st->colors[1].blue = 0xFFFF; XAllocColor(st->dpy, st->cmap, &st->colors[1]); } /* Scale it up so that there are exactly 255 colors -- that keeps the animation speed consistent, even when there aren't many allocatable colors, and prevents the -mono mode from looking like static. */ if (st->ncolors != 255) { int i, n = 255; double scale = (double) st->ncolors / (double) (n+1); XColor *c2 = (XColor *) malloc(sizeof(*c2) * (n+1)); for (i = 0; i < n; i++) c2[i] = st->colors[(int) (i * scale)]; free(st->colors); st->colors = c2; st->ncolors = n; } } /* should factor into RD-specfic and compute-every-pixel general */ static void * rd_init (Display *dpy, Window win) { struct state *st = (struct state *) calloc (1, sizeof(*st)); XGCValues gcv; int vdepth; st->dpy = dpy; st->window = win; st->delay = get_integer_resource (st->dpy, "delay", "Float"); #ifdef HAVE_XSHM_EXTENSION st->use_shm = get_boolean_resource(st->dpy, "useSHM", "Boolean"); #endif XGetWindowAttributes (st->dpy, win, &st->xgwa); st->visual = st->xgwa.visual; pixack_init(st, &st->width, &st->height); { double s = get_float_resource (st->dpy, "size", "Float"); double p = get_float_resource (st->dpy, "speed", "Float"); if (s < 0.0 || s > 1.0) s = 1.0; s = sqrt(s); st->array_width = st->xgwa.width * s; st->array_height = st->xgwa.height * s; if (s < 0.99) { st->array_width = (st->array_width / st->width) * st->width; st->array_height = (st->array_height / st->height) * st->height; } if (st->array_width < st->width) st->array_width = st->width; if (st->array_height < st->height) st->array_height = st->height; st->array_x = (st->xgwa.width - st->array_width)/2; st->array_y = (st->xgwa.height - st->array_height)/2; st->array_dx = p; st->array_dy = .31415926 * p; /* start in a random direction */ if (random() & 1) st->array_dx = -st->array_dx; if (random() & 1) st->array_dy = -st->array_dy; } st->npix = (st->width + 2) * (st->height + 2); /* gcv.function = GXcopy;*/ st->gc = XCreateGC(st->dpy, win, 0 /*GCFunction*/, &gcv); vdepth = visual_depth(DefaultScreenOfDisplay(st->dpy), st->xgwa.visual); /* This code only deals with pixmap depths of 1, 8, 16, and 32. Therefore, we assume that those depths will be supported by the coresponding visual depths (that depth-24 dpys accept depth-32 pixmaps, and that depth-12 dpys accept depth-16 pixmaps.) */ st->pdepth = (vdepth == 1 ? 1 : vdepth <= 8 ? 8 : vdepth <= 16 ? 16 : 32); /* Ok, this like, sucks and stuff. There are some XFree86 systems that have depth-24 visuals, that do not accept depth-32 XImages! Which if you ask me is just absurd, since all it would take is for the server to truncate the bits in that case. So, this crap here detects the specific case of: we have chosen depth 32; and the server does not support depth 32. In that case, we try and use depth 16 instead. The real fix would be to rewrite this program to deal with depth 24 directly (or even better, arbitrary depths, but that would mean going through the XImage routines instead of messing with the XImage->data directly.) jwz, 18-Mar-99: well, the X servers I have access to these days do support 32-deep images on deep visuals, so I no longer have the ability to test this code -- but it was causing problems on the visuals that I do have, and I think that's because I mistakenly wrote `pfv[i].depth' when I meant to write `pfv[i].bits_per_pixel'. The symptom I was seeing was that the grid was 64x64, but the images were being drawn 32x32 -- so there was a black stripe on every other row. Wow, this code sucks so much. */ if (st->pdepth == 32) { int i, pfvc = 0; Bool ok = False; XPixmapFormatValues *pfv = XListPixmapFormats (st->dpy, &pfvc); for (i = 0; i < pfvc; i++) if (pfv[i].bits_per_pixel == st->pdepth) ok = True; if (!ok) st->pdepth = 16; } st->cmap = st->xgwa.colormap; st->ncolors = get_integer_resource (st->dpy, "colors", "Integer"); if (st->ncolors <= 0 || st->ncolors >= 255) { if (vdepth > 8) st->ncolors = 2047; else st->ncolors = 255; } if (mono_p || st->ncolors < 2) st->ncolors = 2; if (st->ncolors <= 2) mono_p = True; st->colors = (XColor *) malloc(sizeof(*st->colors) * (st->ncolors+1)); st->mapped = (vdepth <= 8 && has_writable_cells(st->xgwa.screen, st->xgwa.visual)); { int i, di; st->mc = (unsigned char *) malloc(1<<16); for (i = 0; i < (1<<16); i++) { di = (i + (random()&255))>>8; if (di > 255) di = 255; st->mc[i] = di; } } st->pd = malloc(st->npix * (st->pdepth == 1 ? 1 : (st->pdepth / 8))); if (!st->pd) { fprintf(stderr, "not enough memory for %d pixels.\n", st->npix); exit(1); } st->image = 0; #ifdef HAVE_XSHM_EXTENSION if (st->use_shm) { st->image = create_xshm_image(st->dpy, st->xgwa.visual, vdepth, ZPixmap, 0, &st->shm_info, st->width, st->height); if (!st->image) st->use_shm = False; else { free(st->pd); st->pd = st->image->data; } } #endif /* HAVE_XSHM_EXTENSION */ if (!st->image) { st->image = XCreateImage(st->dpy, st->xgwa.visual, vdepth, ZPixmap, 0, st->pd, st->width, st->height, 8, 0); } return st; } static unsigned long rd_draw (Display *dpy, Window win, void *closure) { struct state *st = (struct state *) closure; Bool bump = False; int i, j; pixack_frame(st, st->pd); for (i = 0; i < st->array_width; i += st->width) for (j = 0; j < st->array_height; j += st->height) #ifdef HAVE_XSHM_EXTENSION if (st->use_shm) XShmPutImage(st->dpy, st->window, st->gc, st->image, 0, 0, i+st->array_x, j+st->array_y, st->width, st->height, False); else #endif XPutImage(st->dpy, win, st->gc, st->image, 0, 0, i+st->array_x, j+st->array_y, st->width, st->height); st->array_x += st->array_dx; st->array_y += st->array_dy; if (st->array_x < 0) { st->array_x = 0; st->array_dx = -st->array_dx; bump = True; } else if (st->array_x > (st->xgwa.width - st->array_width)) { st->array_x = (st->xgwa.width - st->array_width); st->array_dx = -st->array_dx; bump = True; } if (st->array_y < 0) { st->array_y = 0; st->array_dy = -st->array_dy; bump = True; } else if (st->array_y > (st->xgwa.height - st->array_height)) { st->array_y = (st->xgwa.height - st->array_height); st->array_dy = -st->array_dy; bump = True; } if (bump) { if (random() & 1) { double swap = st->array_dx; st->array_dx = st->array_dy; st->array_dy = swap; } } st->frame++; return st->delay; } static void rd_reshape (Display *dpy, Window window, void *closure, unsigned int w, unsigned int h) { } static Bool rd_event (Display *dpy, Window window, void *closure, XEvent *event) { return False; } static void rd_free (Display *dpy, Window window, void *closure) { } XSCREENSAVER_MODULE_2 ("RDbomb", rdbomb, rd) xscreensaver-5.36/hacks/coral.c000644 000767 000024 00000020513 12710314201 016463 0ustar00jwzstaff000000 000000 /* coral, by "Frederick G.M. Roeber" , 15-jul-97. * * 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. */ #include "screenhack.h" #include "colors.h" #include "erase.h" #define NCOLORSMAX 200 struct state { Display *dpy; Window window; GC draw_gc, erase_gc; unsigned int default_fg_pixel; XColor colors[NCOLORSMAX]; int ncolors; int colorindex; int colorsloth; XPoint *walkers; int nwalkers; int width, widthb; int height; int delay, delay2; int max_points; XPoint *pointbuf; unsigned int *board; int done, reset; int npoints; eraser_state *eraser; }; #define getdot(x,y) (st->board[(y*st->widthb)+(x>>5)] & (1<<(x & 31))) #define setdot(x,y) (st->board[(y*st->widthb)+(x>>5)] |= (1<<(x & 31))) static void init_coral(struct state *st) { XGCValues gcv; Colormap cmap; XWindowAttributes xgwa; Bool writeable = False; int seeds; int density; int i; XClearWindow(st->dpy, st->window); XGetWindowAttributes(st->dpy, st->window, &xgwa); st->width = xgwa.width; st->widthb = ((xgwa.width + 31) >> 5); st->height = xgwa.height; if (st->board) free(st->board); st->board = (unsigned int *)calloc(st->widthb * xgwa.height, sizeof(unsigned int)); if(!st->board) exit(1); cmap = xgwa.colormap; if( st->ncolors ) { free_colors(xgwa.screen, cmap, st->colors, st->ncolors); st->ncolors = 0; } gcv.foreground = st->default_fg_pixel = get_pixel_resource(st->dpy, cmap, "foreground", "Foreground"); st->draw_gc = XCreateGC(st->dpy, st->window, GCForeground, &gcv); gcv.foreground = get_pixel_resource (st->dpy, cmap, "background", "Background"); st->erase_gc = XCreateGC (st->dpy, st->window, GCForeground, &gcv); st->ncolors = NCOLORSMAX; make_uniform_colormap(xgwa.screen, xgwa.visual, cmap, st->colors, &st->ncolors, True, &writeable, False); if (st->ncolors <= 0) { st->ncolors = 2; st->colors[0].red = st->colors[0].green = st->colors[0].blue = 0; st->colors[1].red = st->colors[1].green = st->colors[1].blue = 0xFFFF; XAllocColor(st->dpy, cmap, &st->colors[0]); XAllocColor(st->dpy, cmap, &st->colors[1]); } st->colorindex = random()%st->ncolors; density = get_integer_resource(st->dpy, "density", "Integer"); if( density < 1 ) density = 1; if( density > 100 ) density = 90; /* more like mold than coral */ st->nwalkers = (st->width*st->height*density)/100; if (st->walkers) free(st->walkers); st->walkers = (XPoint *)calloc(st->nwalkers, sizeof(XPoint)); if( (XPoint *)0 == st->walkers ) exit(1); seeds = get_integer_resource(st->dpy, "seeds", "Integer"); if( seeds < 1 ) seeds = 1; if( seeds > 1000 ) seeds = 1000; st->colorsloth = st->nwalkers*2/st->ncolors; XSetForeground(st->dpy, st->draw_gc, st->colors[st->colorindex].pixel); if ((st->width <= 2) || (st->height <= 2)) return; for( i = 0; i < seeds; i++ ) { int x, y; int max_repeat = 10; do { x = 1 + random() % (st->width - 2); y = 1 + random() % (st->height - 2); } while( getdot(x, y) && max_repeat--); setdot((x-1), (y-1)); setdot(x, (y-1)); setdot((x+1), (y-1)); setdot((x-1), y ); setdot(x, y ); setdot((x+1), y ); setdot((x-1), (y+1)); setdot(x, (y+1)); setdot((x+1), (y+1)); XDrawPoint(st->dpy, st->window, st->draw_gc, x, y); } for( i = 0; i < st->nwalkers; i++ ) { st->walkers[i].x = (random() % (st->width-2)) + 1; st->walkers[i].y = (random() % (st->height-2)) + 1; } } /* returns 2 bits of randomness (conserving calls to random()). This speeds things up a little, but not a lot (5-10% or so.) */ static int rand_2(void) { static int i = 0; static int r = 0; if (i != 0) { i--; } else { i = 15; r = random(); } { register int j = (r & 3); r = r >> 2; return j; } } static int coral(struct state *st) { int i = 0; for( i = 0; i < st->nwalkers; i++ ) { int x = st->walkers[i].x; int y = st->walkers[i].y; if( getdot(x, y) ) { Bool flush = False; Bool color = False; /* XDrawPoint(dpy, window, draw_gc, x, y); */ st->pointbuf[st->npoints].x = x; st->pointbuf[st->npoints].y = y; st->npoints++; /* Mark the surrounding area as "sticky" */ setdot((x-1), (y-1)); setdot(x, (y-1)); setdot((x+1), (y-1)); setdot((x-1), y ); setdot((x+1), y ); setdot((x-1), (y+1)); setdot(x, (y+1)); setdot((x+1), (y+1)); st->nwalkers--; st->walkers[i].x = st->walkers[st->nwalkers].x; st->walkers[i].y = st->walkers[st->nwalkers].y; if( 0 == ((st->colorsloth ? st->nwalkers%st->colorsloth : 0)) ) { color = True; } if (flush || color || 0 == st->nwalkers || st->npoints >= st->max_points) { XDrawPoints(st->dpy, st->window, st->draw_gc, st->pointbuf, st->npoints, CoordModeOrigin); st->npoints = 0; } if (color) { st->colorindex++; if( st->colorindex == st->ncolors ) st->colorindex = 0; XSetForeground(st->dpy, st->draw_gc, st->colors[st->colorindex].pixel); } } else { /* move it a notch */ do { switch(rand_2()) { case 0: if( 1 == x ) continue; st->walkers[i].x--; break; case 1: if( st->width-2 == x ) continue; st->walkers[i].x++; break; case 2: if( 1 == y ) continue; st->walkers[i].y--; break; default: /* case 3: */ if( st->height-2 == y ) continue; st->walkers[i].y++; break; /* default: abort(); */ } } while(0); } } return (0 == st->nwalkers); } static void * coral_init (Display *dpy, Window window) { struct state *st = (struct state *) calloc (1, sizeof(*st)); st->dpy = dpy; st->window = window; st->max_points = 200; st->pointbuf = (XPoint *) calloc(sizeof(XPoint), st->max_points+2); if (!st->pointbuf) exit(-1); st->delay = get_integer_resource (st->dpy, "delay", "Integer"); st->delay2 = get_integer_resource (st->dpy, "delay2", "Integer"); st->reset = 1; return st; } static unsigned long coral_draw (Display *dpy, Window window, void *closure) { struct state *st = (struct state *) closure; if (st->eraser || st->done) { st->done = 0; st->eraser = erase_window (st->dpy, st->window, st->eraser); return st->delay2; } if (st->reset) init_coral(st); st->reset = st->done = coral(st); return (st->reset ? (st->delay * 1000000) : st->delay2); } 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 coral_event (Display *dpy, Window window, void *closure, XEvent *event) { struct state *st = (struct state *) closure; if (screenhack_event_helper (dpy, window, event)) { st->reset = 1; return True; } return False; } static void coral_free (Display *dpy, Window window, void *closure) { struct state *st = (struct state *) closure; free (st->pointbuf); if (st->walkers) free (st->walkers); if (st->board) free (st->board); free (st); } static const char *coral_defaults[] = { ".background: black", ".foreground: white", "*fpsSolid: true", "*density: 25", "*seeds: 20", /* too many for 640x480, too few for 1280x1024 */ "*delay: 5", "*delay2: 20000", #ifdef HAVE_MOBILE "*ignoreRotation: True", #endif 0 }; static XrmOptionDescRec coral_options[] = { { "-density", ".density", XrmoptionSepArg, 0 }, { "-seeds", ".seeds", XrmoptionSepArg, 0 }, { "-delay", ".delay", XrmoptionSepArg, 0 }, { "-delay2", ".delay2", XrmoptionSepArg, 0 }, { 0, 0, 0, 0 } }; XSCREENSAVER_MODULE ("Coral", coral) xscreensaver-5.36/hacks/mountain.c000644 000767 000024 00000016752 12701612216 017236 0ustar00jwzstaff000000 000000 /* -*- Mode: C; tab-width: 4 -*- */ /* mountain -- square grid mountains */ #if 0 static const char sccsid[] = "@(#)mountain.c 5.00 2000/11/01 xlockmore"; #endif /*- * Copyright (c) 1995 Pascal Pensa * * Permission to use, copy, modify, and distribute this software and its * documentation for any purpose and without fee is hereby granted, * provided that the above copyright notice appear in all copies and that * both that copyright notice and this permission notice appear in * supporting documentation. * * This file is provided AS IS with no warranties of any kind. The author * shall have no liability with respect to the infringement of copyrights, * trade secrets or any patents by this file or any part thereof. In no * event will the author be liable for any lost revenue or profits or * other special, indirect and consequential damages. * * Revision History: * 01-Nov-2000: Allocation checks * 10-May-1997: Compatible with xscreensaver * 1995: Written */ #ifdef STANDALONE # define MODE_mountain #define DEFAULTS "*delay: 20000 \n" \ "*count: 30 \n" \ "*cycles: 4000 \n" \ "*ncolors: 64 \n" \ "*fpsSolid: true \n" \ # define SMOOTH_COLORS # include "xlockmore.h" /* in xscreensaver distribution */ #else /* STANDALONE */ # include "xlock.h" /* in xlockmore distribution */ #endif /* STANDALONE */ #ifdef MODE_mountain ENTRYPOINT ModeSpecOpt mountain_opts = {0, (XrmOptionDescRec *) NULL, 0, (argtype *) NULL, (OptionStruct *) NULL}; #ifdef USE_MODULES ModStruct mountain_description = {"mountain", "init_mountain", "draw_mountain", "release_mountain", "refresh_mountain", "init_mountain", (char *) NULL, &mountain_opts, 1000, 30, 4000, 1, 64, 1.0, "", "Shows Papo's mountain range", 0, NULL}; #endif /* ~ 5000 Max mountain height (1000 - 10000) */ #define MAXHEIGHT (3 * (mp->width + mp->height)) #define WORLDWIDTH 50 /* World size x * y */ #define RANGE_RAND(min,max) ((min) + NRAND((max) - (min))) typedef struct { int pixelmode; int width; int height; int x, y; int offset; int stage; int h[WORLDWIDTH][WORLDWIDTH]; long time; /* up time */ Bool wireframe; Bool joke; GC stippledGC; } mountainstruct; static mountainstruct *mountains = (mountainstruct *) NULL; static void spread(int (*m)[50], int x, int y) { int x2, y2; int h = m[x][y]; for (y2 = y - 1; y2 <= y + 1; y2++) for (x2 = x - 1; x2 <= x + 1; x2++) if (x2 >= 0 && y2 >= 0 && x2 < WORLDWIDTH && y2 < WORLDWIDTH) m[x2][y2] = (m[x2][y2] + h) / 2; } static void drawamountain(ModeInfo * mi) { Display *display = MI_DISPLAY(mi); Window window = MI_WINDOW(mi); GC gc = MI_GC(mi); mountainstruct *mp = &mountains[MI_SCREEN(mi)]; int x2, y2, x3, y3, y4, y5, c = 0; XPoint p[5]; if (MI_NPIXELS(mi) > 2) { c = (mp->h[mp->x][mp->y] + mp->h[mp->x + 1][mp->y] + mp->h[mp->x][mp->y + 1] + mp->h[mp->x + 1][mp->y + 1]) / 4; c = (c / 10 + mp->offset) % MI_NPIXELS(mi); } x2 = mp->x * (2 * mp->width) / (3 * WORLDWIDTH); y2 = mp->y * (2 * mp->height) / (3 * WORLDWIDTH); p[0].x = (x2 - y2 / 2) + (mp->width / 4); p[0].y = (y2 - mp->h[mp->x][mp->y]) + mp->height / 4; x3 = (mp->x + 1) * (2 * mp->width) / (3 * WORLDWIDTH); y3 = mp->y * (2 * mp->height) / (3 * WORLDWIDTH); p[1].x = (x3 - y3 / 2) + (mp->width / 4); p[1].y = (y3 - mp->h[mp->x + 1][mp->y]) + mp->height / 4; y4 = (mp->y + 1) * (2 * mp->height) / (3 * WORLDWIDTH); p[2].x = (x3 - y4 / 2) + (mp->width / 4); p[2].y = (y4 - mp->h[mp->x + 1][mp->y + 1]) + mp->height / 4; y5 = (mp->y + 1) * (2 * mp->height) / (3 * WORLDWIDTH); p[3].x = (x2 - y5 / 2) + (mp->width / 4); p[3].y = (y5 - mp->h[mp->x][mp->y + 1]) + mp->height / 4; p[4].x = p[0].x; p[4].y = p[0].y; if (MI_NPIXELS(mi) > 2) XSetForeground(display, gc, MI_PIXEL(mi, c)); else XSetForeground(display, gc, MI_WHITE_PIXEL(mi)); if (mp->joke) { if ((Bool) (LRAND() & 1)) XDrawLines(display, window, gc, p, 5, CoordModeOrigin); else { XFillPolygon(display, window, gc, p, 4, Complex, CoordModeOrigin); if (!mp->pixelmode) { XSetForeground(display, gc, MI_BLACK_PIXEL(mi)); XDrawLines(display, window, gc, p, 5, CoordModeOrigin); } } } else { if (mp->wireframe) { XDrawLines(display, window, gc, p, 5, CoordModeOrigin); } else { XFillPolygon(display, window, gc, p, 4, Complex, CoordModeOrigin); if (!mp->pixelmode) { XSetForeground(display, gc, MI_BLACK_PIXEL(mi)); XDrawLines(display, window, gc, p, 5, CoordModeOrigin); } } } mp->x++; if (mp->x == WORLDWIDTH - 1) { mp->y++; mp->x = 0; } if (mp->y == WORLDWIDTH - 1) mp->stage++; } ENTRYPOINT void init_mountain (ModeInfo * mi) { int i, j, x, y; XGCValues gcv; mountainstruct *mp; if (mountains == NULL) { if ((mountains = (mountainstruct *) calloc(MI_NUM_SCREENS(mi), sizeof (mountainstruct))) == NULL) return; } mp = &mountains[MI_SCREEN(mi)]; mp->width = MI_WIDTH(mi); mp->height = MI_HEIGHT(mi); mp->pixelmode = (mp->width + mp->height < 200); mp->stage = 0; mp->time = 0; mp->x = mp->y = 0; if (MI_IS_FULLRANDOM(mi)) { mp->joke = (Bool) (NRAND(10) == 0); mp->wireframe = (Bool) (LRAND() & 1); } else { mp->joke = False; mp->wireframe = MI_IS_WIREFRAME(mi); } if (mp->stippledGC == None) { gcv.foreground = MI_WHITE_PIXEL(mi); gcv.background = MI_BLACK_PIXEL(mi); if ((mp->stippledGC = XCreateGC(MI_DISPLAY(mi), MI_WINDOW(mi), GCForeground | GCBackground, &gcv)) == None) return; } MI_CLEARWINDOW(mi); for (y = 0; y < (int) WORLDWIDTH; y++) for (x = 0; x < (int) WORLDWIDTH; x++) mp->h[x][y] = 0; j = MI_COUNT(mi); if (j < 0) j = NRAND(-j) + 1; for (i = 0; i < j; i++) mp->h[RANGE_RAND(1, WORLDWIDTH - 1)][RANGE_RAND(1, WORLDWIDTH - 1)] = NRAND(MAXHEIGHT); for (y = 0; y < WORLDWIDTH; y++) for (x = 0; x < WORLDWIDTH; x++) spread(mp->h, x, y); for (y = 0; y < WORLDWIDTH; y++) for (x = 0; x < WORLDWIDTH; x++) { mp->h[x][y] = mp->h[x][y] + NRAND(10) - 5; if (mp->h[x][y] < 10) mp->h[x][y] = 0; } if (MI_NPIXELS(mi) > 2) mp->offset = NRAND(MI_NPIXELS(mi)); else mp->offset = 0; } ENTRYPOINT void draw_mountain (ModeInfo * mi) { mountainstruct *mp; if (mountains == NULL) return; mp = &mountains[MI_SCREEN(mi)]; if (mp->stippledGC == NULL) return; MI_IS_DRAWN(mi) = True; switch (mp->stage) { case 0: drawamountain(mi); break; case 1: if (++mp->time > MI_CYCLES(mi)) mp->stage++; break; case 2: init_mountain(mi); break; } } 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) { if (mountains != NULL) { int screen; for (screen = 0; screen < MI_NUM_SCREENS(mi); screen++) { mountainstruct *mp = &mountains[screen]; if (mp->stippledGC) XFreeGC(MI_DISPLAY(mi), mp->stippledGC); } (void) free((void *) mountains); mountains = (mountainstruct *) NULL; } } ENTRYPOINT void refresh_mountain(ModeInfo * mi) { mountainstruct *mp; if (mountains == NULL) return; mp = &mountains[MI_SCREEN(mi)]; MI_CLEARWINDOW(mi); mp->x = 0; mp->y = 0; } ENTRYPOINT Bool mountain_handle_event (ModeInfo *mi, XEvent *event) { if (screenhack_event_helper (MI_DISPLAY(mi), MI_WINDOW(mi), event)) { init_mountain (mi); return True; } return False; } XSCREENSAVER_MODULE ("Mountain", mountain) #endif /* MODE_mountain */ xscreensaver-5.36/hacks/triangle.c000644 000767 000024 00000024320 12701612217 017200 0ustar00jwzstaff000000 000000 /* -*- Mode: C; tab-width: 4 -*- */ /* triangle --- create a triangle-mountain */ #if 0 static const char sccsid[] = "@(#)triangle.c 4.04 97/07/28 xlockmore"; #endif /*- * Copyright (c) 1995 by Tobias Gloth * * Permission to use, copy, modify, and distribute this software and its * documentation for any purpose and without fee is hereby granted, * provided that the above copyright notice appear in all copies and that * both that copyright notice and this permission notice appear in * supporting documentation. * * This file is provided AS IS with no warranties of any kind. The author * shall have no liability with respect to the infringement of copyrights, * trade secrets or any patents by this file or any part thereof. In no * event will the author be liable for any lost revenue or profits or * other special, indirect and consequential damages. * * Revision History: * 10-May-97: Compatible with xscreensaver * 10-Mar-96: re-arranged and re-formatted the code for appearance and * to make common subroutines. Simplified. * Ron Hitchens * 07-Mar-96: Removed internal delay code, set MI_PAUSE(mi) for inter-scene * delays. No other delays are needed here. * Made pause time sensitive to value of cycles (in 10ths of a * second). Removed (hopefully) all references to globals. * Ron Hitchens * 27-Feb-96: Undid the changes listed below. Added ModeInfo argument. * Implemented delay between scenes using the MI_PAUSE(mi) * scheme. Ron Hitchens * 27-Dec-95: Ron Hitchens * Modified logic of draw_triangle() to provide a delay * (sensitive to the value of cycles) between each iteration. * Because this mode is so compute intensive, when the new * event loop adjusted the delay to compensate, this mode had * almost no delay time left. This change pauses between each * new landscape, but could still be done better (it is not * sensitive to input events while drawing, for example). * 03-Nov-95: Many changes (hopefully some good ones) by David Bagley * 01-Oct-95: Written by Tobias Gloth */ #ifdef STANDALONE # define DEFAULTS "*delay: 10000 \n" \ "*ncolors: 128 \n" \ "*fpsSolid: true \n" \ # define SMOOTH_COLORS # include "xlockmore.h" /* in xscreensaver distribution */ #else /* STANDALONE */ # include "xlock.h" /* in xlockmore distribution */ #endif /* STANDALONE */ ENTRYPOINT ModeSpecOpt triangle_opts = {0, NULL, 0, NULL, NULL}; #define MAX_STEPS 8 #define MAX_SIZE (1< 2) { /* color */ int dmax, dmin; long color; dmin = MIN(y_0, y_1); dmin = MIN(dmin, y_2); dmax = MAX(y_0, y_1); dmax = MAX(dmax, y_2); if (dmax == 0) { color = BLUE; } else { color = MI_NCOLORS(mi) - (int) ((double) MI_NCOLORS(mi) / M_PI_2 * atan(dinv * (dmax - dmin))); } XSetForeground(display, gc, mi->colors[color % MI_NCOLORS(mi)].pixel); XFillPolygon(display, window, gc, p, 3, Convex, CoordModeOrigin); } else { /* mono */ #ifdef BACKFACE_REMOVAL XSetForeground(display, gc, MI_WIN_BLACK_PIXEL(mi)); XFillPolygon(display, window, gc, p, 3, Convex, CoordModeOrigin); #endif XSetForeground(display, gc, MI_WIN_WHITE_PIXEL(mi)); XDrawLine(display, window, gc, p[0].x, p[0].y, p[1].x, p[1].y); XDrawLine(display, window, gc, p[1].x, p[1].y, p[2].x, p[2].y); XDrawLine(display, window, gc, p[2].x, p[2].y, p[0].x, p[0].y); } } static void calc_points1(trianglestruct * tp, int d, int *y0_p, int *y1_p, int *y2_p, XPoint * p) { *y0_p = tp->level[MAX(tp->h[tp->i][tp->j], 0)]; *y1_p = tp->level[MAX(tp->h[tp->i + d][tp->j], 0)]; *y2_p = tp->level[MAX(tp->h[tp->i][tp->j + d], 0)]; p[0].x = tp->xpos[2 * tp->i + tp->j]; p[1].x = tp->xpos[2 * (tp->i + d) + tp->j]; p[2].x = tp->xpos[2 * tp->i + (tp->j + d)]; p[0].y = tp->ypos[tp->j] - *y0_p; p[1].y = tp->ypos[tp->j] - *y1_p; p[2].y = tp->ypos[tp->j + d] - *y2_p; } static void calc_points2(trianglestruct * tp, int d, int *y0_p, int *y1_p, int *y2_p, XPoint * p) { *y0_p = tp->level[MAX(tp->h[tp->i + d][tp->j], 0)]; *y1_p = tp->level[MAX(tp->h[tp->i + d][tp->j + d], 0)]; *y2_p = tp->level[MAX(tp->h[tp->i][tp->j + d], 0)]; p[0].x = tp->xpos[2 * (tp->i + d) + tp->j]; p[1].x = tp->xpos[2 * (tp->i + d) + (tp->j + d)]; p[2].x = tp->xpos[2 * tp->i + (tp->j + d)]; p[0].y = tp->ypos[tp->j] - *y0_p; p[1].y = tp->ypos[tp->j + d] - *y1_p; p[2].y = tp->ypos[tp->j + d] - *y2_p; } static void draw_mesh(ModeInfo * mi, trianglestruct * tp, int d, int count) { XPoint p[3]; int first = 1; int y_0, y_1, y_2; double dinv = 0.2 / d; if ((tp->j == 0) && (tp->i == 0)) { #if 0 /* jwz */ XClearWindow(MI_DISPLAY(mi), MI_WINDOW(mi)); #else { int x = 0; int y = 0; int x2 = MI_WIN_WIDTH(mi); int y2 = tp->ypos[0]; XSetForeground(MI_DISPLAY(mi), MI_GC(mi), MI_WIN_BLACK_PIXEL(mi)); XFillRectangle(MI_DISPLAY(mi), MI_WINDOW(mi), MI_GC(mi), x, y, x2, y2); } #endif } for (; (tp->j < tp->size) && (count > 0); tp->j += ((count) ? d : 0)) { for (tp->i = (first) ? tp->i : 0, first = 0; (tp->i < MAX_SIZE - tp->j) && (count > 0); tp->i += d, count--) { if (tp->i + tp->j < tp->size) { calc_points1(tp, d, &y_0, &y_1, &y_2, p); draw_atriangle(mi, p, y_0, y_1, y_2, dinv); } if (tp->i + tp->j + d < tp->size) { calc_points2(tp, d, &y_0, &y_1, &y_2, p); draw_atriangle(mi, p, y_0, y_1, y_2, dinv); } } } if (tp->j == tp->size) { tp->init_now = 1; } } ENTRYPOINT void init_triangle (ModeInfo * mi) { trianglestruct *tp; short *tmp; int i, dim, one; if (triangles == NULL) { if ((triangles = (trianglestruct *) calloc(MI_NUM_SCREENS(mi), sizeof (trianglestruct))) == NULL) return; } tp = &triangles[MI_SCREEN(mi)]; tp->width = MI_WIN_WIDTH(mi); tp->height = MI_WIN_HEIGHT(mi); tp->init_now = 1; tp->fast = 2; XClearWindow(MI_DISPLAY(mi), MI_WINDOW(mi)); tp->steps = MAX_STEPS; do { tp->size = 1 << --tp->steps; } while (tp->size * 5 > tp->width); tmp = tp->H; for (i = 0; i < tp->size + 1; i++) { tp->h[i] = tmp; tmp += (tp->size) + 1 - i; } tp->stage = -1; dim = MIN(tp->width, tp->height); for (i = 0; i < 2 * tp->size + 1; i++) { tp->xpos[i] = (short) ((((double) i) / ((double) (2 * tp->size)) * (RIGHT - LEFT) + LEFT) * dim) + (tp->width - dim) / 2; } for (i = 0; i < (tp->size + 1); i++) { tp->ypos[i] = (short) ((((double) i) / ((double) tp->size) * (BOTTOM - TOP) + TOP) * dim) + (tp->height - dim) / 2; } for (i = 0; i < tp->steps; i++) { tp->delta[i] = ((short) (DELTA * dim)) >> i; } one = tp->delta[0]; if (one > 0) for (i = 0; i < MAX_LEVELS; i++) { tp->level[i] = (i * i) / one; } } ENTRYPOINT void draw_triangle (ModeInfo * mi) { trianglestruct *tp = &triangles[MI_SCREEN(mi)]; int d, d2, i, j, delta; if (!tp->init_now) { draw_mesh(mi, tp, tp->d / 2, MAX_SIZE / tp->d); /* The init_now flag will pop up when the scene is complete. * Cycles specifies how long to wait, in 1/10 secs. TODO: This is wrong for multi-screens *** */ if (tp->init_now) { #ifndef STANDALONE MI_PAUSE(mi) = 2000000; #else if (tp->stage == -1) { XClearWindow(MI_DISPLAY(mi), MI_WINDOW(mi)); if (!mono_p) { free_colors(mi->xgwa.screen, mi->xgwa.colormap, mi->colors, mi->npixels); mi->npixels = get_integer_resource (mi->dpy, "ncolors", "Integer"); make_smooth_colormap (mi->xgwa.screen, mi->xgwa.visual, mi->xgwa.colormap, mi->colors, &mi->npixels, True, &mi->writable_p, True); } } #endif } return; } if (tp->delta[0] > 0) { if (!(++tp->stage)) { tp->h[0][0] = (short int) MAX(0, DISPLACE(0, tp->delta[0])); tp->h[tp->size][0] = (short int) MAX(0, DISPLACE(0, tp->delta[0])); tp->h[0][tp->size] = (short int) MAX(0, DISPLACE(0, tp->delta[0])); } else { d = 2 << (tp->steps - tp->stage); d2 = d / 2; delta = tp->delta[tp->stage - 1]; for (i = 0; i < tp->size; i += d) { for (j = 0; j < (tp->size - i); j += d) { tp->h[i + d2][j] = (short int) DISPLACE(tp->h[i][j] + tp->h[i + d][j], delta); tp->h[i][j + d2] = (short int) DISPLACE(tp->h[i][j] + tp->h[i][j + d], delta); tp->h[i + d2][j + d2] = (short int) DISPLACE(tp->h[i + d][j] + tp->h[i][j + d], delta); } tp->init_now = 0; tp->i = 0; tp->j = 0; tp->d = d; } } } if (tp->stage == tp->steps) { tp->stage = -1; } } 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) { if (triangles != NULL) { (void) free((void *) triangles); triangles = NULL; } } ENTRYPOINT void refresh_triangle (ModeInfo * mi) { /* Do nothing, it will refresh by itself */ } ENTRYPOINT Bool triangle_handle_event (ModeInfo *mi, XEvent *event) { if (screenhack_event_helper (MI_DISPLAY(mi), MI_WINDOW(mi), event)) { reshape_triangle (mi, MI_WIDTH(mi), MI_HEIGHT(mi)); return True; } return False; } XSCREENSAVER_MODULE ("Triangle", triangle) xscreensaver-5.36/hacks/lissie.c000644 000767 000024 00000020315 12717750041 016670 0ustar00jwzstaff000000 000000 /* -*- Mode: C; tab-width: 4 -*- */ /* lissie --- the Lissajous worm */ #if 0 static const char sccsid[] = "@(#)lissie.c 5.00 2000/11/01 xlockmore"; #endif /*- * lissie.c - The Lissajous worm for xlock, the X Window System * lockscreen. * * Copyright (c) 1996 by Alexander Jolk * * Permission to use, copy, modify, and distribute this software and its * documentation for any purpose and without fee is hereby granted, * provided that the above copyright notice appear in all copies and that * both that copyright notice and this permission notice appear in * supporting documentation. * * This file is provided AS IS with no warranties of any kind. The author * shall have no liability with respect to the infringement of copyrights, * trade secrets or any patents by this file or any part thereof. In no * event will the author be liable for any lost revenue or profits or * other special, indirect and consequential damages. * * Revision History: * 01-Nov-2000: Allocation checks * 10-May-1997: Compatible with xscreensaver * 18-Aug-1996: added refresh-hook. * 01-May-1996: written. */ #ifdef STANDALONE # define MODE_lissie # define DEFAULTS "*delay: 10000 \n" \ "*count: 1 \n" \ "*cycles: 20000 \n" \ "*size: -200 \n" \ "*ncolors: 200 \n" \ "*fpsSolid: true \n" \ # define SMOOTH_COLORS # define reshape_lissie 0 # define lissie_handle_event 0 # include "xlockmore.h" /* in xscreensaver distribution */ #else /* STANDALONE */ # include "xlock.h" /* in xlockmore distribution */ #endif /* STANDALONE */ #ifdef MODE_lissie ENTRYPOINT ModeSpecOpt lissie_opts = {0, (XrmOptionDescRec *) NULL, 0, (argtype *) NULL, (OptionStruct *) NULL}; #ifdef USE_MODULES ModStruct lissie_description = {"lissie", "init_lissie", "draw_lissie", "release_lissie", "refresh_lissie", "init_lissie", (char *) NULL, &lissie_opts, 10000, 1, 2000, -200, 64, 0.6, "", "Shows lissajous worms", 0, NULL}; #endif #define MINSIZE 1 #define Lissie(n)\ if (lissie->loc[(n)].x > 0 && lissie->loc[(n)].y > 0 &&\ lissie->loc[(n)].x <= lp->width && lissie->loc[(n)].y <= lp->height) {\ if (lissie->ri < 2)\ XDrawPoint(display, MI_WINDOW(mi),\ gc, lissie->loc[(n)].x, lissie->loc[(n)].y);\ else\ XDrawArc(display, MI_WINDOW(mi), gc,\ lissie->loc[(n)].x - lissie->ri / 2,\ lissie->loc[(n)].y - lissie->ri / 2,\ lissie->ri, lissie->ri, 0, 23040);\ } #define FLOATRAND(min,max) ((min)+(LRAND()/MAXRAND)*((max)-(min))) #define INTRAND(min,max) ((min)+NRAND((max)-(min)+1)) #define MINDT 0.01 #define MAXDT 0.15 #define MAXLISSIELEN 100 #define MINLISSIELEN 10 #define MINLISSIES 1 /* How many segments to draw per cycle when redrawing */ #define REDRAWSTEP 3 typedef struct { double tx, ty, dtx, dty; int xi, yi, ri, rx, ry, len, pos; int redrawing, redrawpos; XPoint loc[MAXLISSIELEN]; unsigned long color; } lissiestruct; typedef struct { Bool painted; int width, height; int nlissies; lissiestruct *lissie; int loopcount; } lissstruct; static lissstruct *lisses = (lissstruct *) NULL; static void drawlissie(ModeInfo * mi, lissiestruct * lissie) { Display *display = MI_DISPLAY(mi); GC gc = MI_GC(mi); lissstruct *lp = &lisses[MI_SCREEN(mi)]; int p = (++lissie->pos) % MAXLISSIELEN; int oldp = (lissie->pos - lissie->len + MAXLISSIELEN) % MAXLISSIELEN; /* Let time go by ... */ lissie->tx += lissie->dtx; lissie->ty += lissie->dty; if (lissie->tx > 2 * M_PI) lissie->tx -= 2 * M_PI; if (lissie->ty > 2 * M_PI) lissie->ty -= 2 * M_PI; /* vary both (x/y) speeds by max. 1% */ lissie->dtx *= FLOATRAND(0.99, 1.01); lissie->dty *= FLOATRAND(0.99, 1.01); if (lissie->dtx < MINDT) lissie->dtx = MINDT; else if (lissie->dtx > MAXDT) lissie->dtx = MAXDT; if (lissie->dty < MINDT) lissie->dty = MINDT; else if (lissie->dty > MAXDT) lissie->dty = MAXDT; lissie->loc[p].x = lissie->xi + (int) (sin(lissie->tx) * lissie->rx); lissie->loc[p].y = lissie->yi + (int) (sin(lissie->ty) * lissie->ry); /* Mask */ XSetForeground(display, gc, MI_BLACK_PIXEL(mi)); Lissie(oldp); /* Redraw */ if (MI_NPIXELS(mi) > 2) { XSetForeground(display, gc, MI_PIXEL(mi, lissie->color)); if (++lissie->color >= (unsigned) MI_NPIXELS(mi)) lissie->color = 0; } else XSetForeground(display, gc, MI_WHITE_PIXEL(mi)); Lissie(p); if (lissie->redrawing) { int i; lissie->redrawpos++; /* This compensates for the changed p since the last callback. */ for (i = 0; i < REDRAWSTEP; i++) { Lissie((p - lissie->redrawpos + MAXLISSIELEN) % MAXLISSIELEN); if (++(lissie->redrawpos) >= lissie->len) { lissie->redrawing = 0; break; } } } } static void initlissie(ModeInfo * mi, lissiestruct * lissie) { lissstruct *lp = &lisses[MI_SCREEN(mi)]; int size = MI_SIZE(mi); int i; if (MI_NPIXELS(mi) > 2) lissie->color = NRAND(MI_NPIXELS(mi)); else lissie->color = MI_WHITE_PIXEL(mi); /* Initialize parameters */ if (size < -MINSIZE) lissie->ri = NRAND(MIN(-size, MAX(MINSIZE, MIN(lp->width, lp->height) / 4)) - MINSIZE + 1) + MINSIZE; else if (size < MINSIZE) { if (!size) lissie->ri = MAX(MINSIZE, MIN(lp->width, lp->height) / 4); else lissie->ri = MINSIZE; } else lissie->ri = MIN(size, MAX(MINSIZE, MIN(lp->width, lp->height) / 4)); lissie->xi = INTRAND(lp->width / 4 + lissie->ri, lp->width * 3 / 4 - lissie->ri); lissie->yi = INTRAND(lp->height / 4 + lissie->ri, lp->height * 3 / 4 - lissie->ri); lissie->rx = INTRAND(lp->width / 4, MIN(lp->width - lissie->xi, lissie->xi)) - 2 * lissie->ri; lissie->ry = INTRAND(lp->height / 4, MIN(lp->height - lissie->yi, lissie->yi)) - 2 * lissie->ri; lissie->len = INTRAND(MINLISSIELEN, MAXLISSIELEN - 1); lissie->pos = 0; lissie->redrawing = 0; lissie->tx = FLOATRAND(0, 2 * M_PI); lissie->ty = FLOATRAND(0, 2 * M_PI); lissie->dtx = FLOATRAND(MINDT, MAXDT); lissie->dty = FLOATRAND(MINDT, MAXDT); for (i = 0; i < MAXLISSIELEN; i++) lissie->loc[i].x = lissie->loc[i].y = 0; /* Draw lissie */ drawlissie(mi, lissie); } ENTRYPOINT void init_lissie (ModeInfo * mi) { lissstruct *lp; unsigned char ball; if (lisses == NULL) { if ((lisses = (lissstruct *) calloc(MI_NUM_SCREENS(mi), sizeof (lissstruct))) == NULL) return; } lp = &lisses[MI_SCREEN(mi)]; lp->width = MI_WIDTH(mi); #ifdef HAVE_JWXYZ jwxyz_XSetAntiAliasing (MI_DISPLAY(mi), MI_GC(mi), False); #endif lp->height = MI_HEIGHT(mi); lp->nlissies = MI_COUNT(mi); if (lp->nlissies < -MINLISSIES) { if (lp->lissie) { (void) free((void *) lp->lissie); lp->lissie = (lissiestruct *) NULL; } lp->nlissies = NRAND(-lp->nlissies - MINLISSIES + 1) + MINLISSIES; } else if (lp->nlissies < MINLISSIES) lp->nlissies = MINLISSIES; lp->loopcount = 0; if (lp->lissie == NULL) if ((lp->lissie = (lissiestruct *) calloc(lp->nlissies, sizeof (lissiestruct))) == NULL) return; MI_CLEARWINDOW(mi); lp->painted = False; for (ball = 0; ball < (unsigned char) lp->nlissies; ball++) initlissie(mi, &lp->lissie[ball]); } ENTRYPOINT void draw_lissie (ModeInfo * mi) { register unsigned char ball; lissstruct *lp; if (lisses == NULL) return; lp = &lisses[MI_SCREEN(mi)]; if (lp->lissie == NULL) return; MI_IS_DRAWN(mi) = True; if (++lp->loopcount > MI_CYCLES(mi)) { init_lissie(mi); } else { lp->painted = True; for (ball = 0; ball < (unsigned char) lp->nlissies; ball++) drawlissie(mi, &lp->lissie[ball]); } } ENTRYPOINT void release_lissie (ModeInfo * mi) { if (lisses != NULL) { int screen; for (screen = 0; screen < MI_NUM_SCREENS(mi); screen++) { lissstruct *lp = &lisses[screen]; if (lp->lissie != NULL) { (void) free((void *) lp->lissie); /* lp->lissie = NULL; */ } } (void) free((void *) lisses); lisses = (lissstruct *) NULL; } } ENTRYPOINT void refresh_lissie(ModeInfo * mi) { int i; lissstruct *lp; if (lisses == NULL) return; lp = &lisses[MI_SCREEN(mi)]; if (lp->lissie == NULL) return; if (lp->painted) { MI_CLEARWINDOW(mi); for (i = 0; i < lp->nlissies; i++) { lp->lissie[i].redrawing = 1; lp->lissie[i].redrawpos = 0; } } } XSCREENSAVER_MODULE ("Lissie", lissie) #endif /* MODE_lissie */ xscreensaver-5.36/hacks/worm.c000644 000767 000024 00000027107 12701612217 016365 0ustar00jwzstaff000000 000000 /* -*- Mode: C; tab-width: 4 -*- */ /* worm --- draw wiggly worms */ #if 0 static const char sccsid[] = "@(#)worm.c 4.04 97/07/28 xlockmore"; #endif /*- * Copyright (c) 1991 by Patrick J. Naughton. * * Permission to use, copy, modify, and distribute this software and its * documentation for any purpose and without fee is hereby granted, * provided that the above copyright notice appear in all copies and that * both that copyright notice and this permission notice appear in * supporting documentation. * * This file is provided AS IS with no warranties of any kind. The author * shall have no liability with respect to the infringement of copyrights, * trade secrets or any patents by this file or any part thereof. In no * event will the author be liable for any lost revenue or profits or * other special, indirect and consequential damages. * * Revision History: * 10-May-97: Compatible with xscreensaver * 03-Sep-96: fixed bug in allocation of space for worms, added 3d support * Henrik Theiling * 27-Sep-95: put back malloc * 23-Sep-93: got rid of "rint". (David Bagley) * 27-Sep-91: got rid of all malloc calls since there were no calls to free(). * 25-Sep-91: Integrated into X11R5 contrib xlock. * * Adapted from a concept in the Dec 87 issue of Scientific American p. 142. * * SunView version: Brad Taylor * X11 version: Dave Lemke * xlock version: Boris Putanec */ #ifdef STANDALONE # define DEFAULTS "*delay: 17000 \n" \ "*count: -20 \n" \ "*cycles: 10 \n" \ "*size: -3 \n" \ "*ncolors: 150 \n" \ "*use3d: False \n" \ "*delta3d: 1.5 \n" \ "*right3d: red \n" \ "*left3d: blue \n" \ "*both3d: magenta \n" \ "*none3d: black \n" \ "*fpsSolid: true \n" \ # define SMOOTH_COLORS # define reshape_worm 0 # define worm_handle_event 0 # include "xlockmore.h" /* in xscreensaver distribution */ #else /* STANDALONE */ # include "xlock.h" /* in xlockmore distribution */ #endif /* STANDALONE */ ENTRYPOINT ModeSpecOpt worm_opts = {0, NULL, 0, NULL, NULL}; #define MINSIZE 1 #define SEGMENTS 36 #define MINWORMS 1 #define MAXZ 750 #define MINZ 100 #define SCREENZ 200 #define GETZDIFF(z) (MI_DELTA3D(mi)*20.0*(1.0-(SCREENZ)/((float)(z)+MINZ))) #define IRINT(x) ((int)(((x)>0.0)?(x)+0.5:(x)-0.5)) /* How many segments to draw per cycle when redrawing */ #define REDRAWSTEP 3 typedef struct { XPoint *circ; int *diffcirc; int dir, dir2; int tail; int x, y, z; int redrawing, redrawpos; } wormstuff; typedef struct { int xsize, ysize, zsize; int wormlength; int nc; int nw; int circsize; wormstuff *worm; XRectangle *rects; /* [NUMCOLORS * batchcount/NUMCOLORS+1] */ int maxsize; int *size; unsigned int chromo; } wormstruct; static float sintab[SEGMENTS]; static float costab[SEGMENTS]; static int init_table = 0; static wormstruct *worms = NULL; static void worm_doit(ModeInfo * mi, int which, unsigned long color) { Display *display = MI_DISPLAY(mi); Window window = MI_WINDOW(mi); GC gc = MI_GC(mi); wormstruct *wp = &worms[MI_SCREEN(mi)]; wormstuff *ws = &wp->worm[which]; int x, y, z; int diff; ws->tail++; if (ws->tail == wp->wormlength) ws->tail = 0; x = ws->circ[ws->tail].x; y = ws->circ[ws->tail].y; if (MI_WIN_IS_USE3D(mi)) { diff = ws->diffcirc[ws->tail]; if (MI_WIN_IS_INSTALL(mi)) { XSetForeground(display, gc, MI_NONE_COLOR(mi)); XFillRectangle(display, window, gc, x - diff, y, wp->circsize, wp->circsize); XFillRectangle(display, window, gc, x + diff, y, wp->circsize, wp->circsize); } else { XClearArea(display, window, x - diff, y, wp->circsize, wp->circsize, False); XClearArea(display, window, x + diff, y, wp->circsize, wp->circsize, False); } } else XClearArea(display, window, x, y, wp->circsize, wp->circsize, False); if (LRAND() & 1) ws->dir = (ws->dir + 1) % SEGMENTS; else ws->dir = (ws->dir + SEGMENTS - 1) % SEGMENTS; x = (ws->x + IRINT((float) wp->circsize * costab[ws->dir]) + wp->xsize) % wp->xsize; y = (ws->y + IRINT((float) wp->circsize * sintab[ws->dir]) + wp->ysize) % wp->ysize; ws->circ[ws->tail].x = x; ws->circ[ws->tail].y = y; ws->x = x; ws->y = y; if (MI_WIN_IS_USE3D(mi)) { if (LRAND() & 1) ws->dir2 = (ws->dir2 + 1) % SEGMENTS; else ws->dir2 = (ws->dir2 + SEGMENTS - 1) % SEGMENTS; /* for the z-axis the wrap-around looks bad, so worms should just turn around. */ z = (int) (ws->z + wp->circsize * sintab[ws->dir2]); if (z < 0 || z >= wp->zsize) z = (int) (ws->z - wp->circsize * sintab[ws->dir2]); diff = (int) (GETZDIFF(z) + 0.5); /* ROUND */ ws->diffcirc[ws->tail] = diff; ws->z = z; /* right eye */ color = 0; wp->rects[color * wp->maxsize + wp->size[color]].x = x + diff; wp->rects[color * wp->maxsize + wp->size[color]].y = y; wp->size[color]++; /* left eye */ color = 1; wp->rects[color * wp->maxsize + wp->size[color]].x = x - diff; wp->rects[color * wp->maxsize + wp->size[color]].y = y; wp->size[color]++; #if 0 if (ws->redrawing) { /* Too hard for now */ int j; for (j = 0; j < REDRAWSTEP; j++) { int k = (ws->tail - ws->redrawpos + wp->wormlength) % wp->wormlength; color = 0; wp->rects[color * wp->maxsize + wp->size[color]].x = ws->circ[k].x + ws->diffcirc[k]; wp->rects[color * wp->maxsize + wp->size[color]].y = ws->circ[k].y; wp->size[color]++; color = 1; wp->rects[color * wp->maxsize + wp->size[color]].x = ws->circ[k].x - ws->diffcirc[k]; wp->rects[color * wp->maxsize + wp->size[color]].y = ws->circ[k].y; wp->size[color]++; if (++(ws->redrawpos) >= wp->wormlength) { ws->redrawing = 0; break; } } } #endif } else { wp->rects[color * wp->maxsize + wp->size[color]].x = x; wp->rects[color * wp->maxsize + wp->size[color]].y = y; wp->size[color]++; if (ws->redrawing) { int j; ws->redrawpos++; /* Compensates for the changed ws->tail since the last callback. */ for (j = 0; j < REDRAWSTEP; j++) { int k = (ws->tail - ws->redrawpos + wp->wormlength) % wp->wormlength; wp->rects[color * wp->maxsize + wp->size[color]].x = ws->circ[k].x; wp->rects[color * wp->maxsize + wp->size[color]].y = ws->circ[k].y; wp->size[color]++; if (++(ws->redrawpos) >= wp->wormlength) { ws->redrawing = 0; break; } } } } } static void free_worms(wormstruct * wp) { int wn; if (wp->worm) { for (wn = 0; wn < wp->nw; wn++) { if (wp->worm[wn].circ) (void) free((void *) wp->worm[wn].circ); if (wp->worm[wn].diffcirc) (void) free((void *) wp->worm[wn].diffcirc); } (void) free((void *) wp->worm); wp->worm = NULL; } if (wp->rects) { (void) free((void *) wp->rects); wp->rects = NULL; } if (wp->size) { (void) free((void *) wp->size); wp->size = NULL; } } ENTRYPOINT void init_worm (ModeInfo * mi) { wormstruct *wp; int size = MI_SIZE(mi); int i, j; if (worms == NULL) { if ((worms = (wormstruct *) calloc(MI_NUM_SCREENS(mi), sizeof (wormstruct))) == NULL) return; } wp = &worms[MI_SCREEN(mi)]; if (MI_NPIXELS(mi) <= 2 || MI_WIN_IS_USE3D(mi)) wp->nc = 2; else wp->nc = MI_NPIXELS(mi); if (wp->nc > NUMCOLORS) wp->nc = NUMCOLORS; free_worms(wp); wp->nw = MI_BATCHCOUNT(mi); if (wp->nw < -MINWORMS) wp->nw = NRAND(-wp->nw - MINWORMS + 1) + MINWORMS; else if (wp->nw < MINWORMS) wp->nw = MINWORMS; if (!wp->worm) wp->worm = (wormstuff *) malloc(wp->nw * sizeof (wormstuff)); if (!wp->size) wp->size = (int *) malloc(NUMCOLORS * sizeof (int)); wp->maxsize = (REDRAWSTEP + 1) * wp->nw; /* / wp->nc + 1; */ if (!wp->rects) wp->rects = (XRectangle *) malloc(wp->maxsize * NUMCOLORS * sizeof (XRectangle)); if (!init_table) { init_table = 1; for (i = 0; i < SEGMENTS; i++) { sintab[i] = SINF(i * 2.0 * M_PI / SEGMENTS); costab[i] = COSF(i * 2.0 * M_PI / SEGMENTS); } } wp->xsize = MI_WIN_WIDTH(mi); wp->ysize = MI_WIN_HEIGHT(mi); wp->zsize = MAXZ - MINZ + 1; if (MI_NPIXELS(mi) > 2) wp->chromo = NRAND(MI_NPIXELS(mi)); if (size < -MINSIZE) wp->circsize = NRAND(-size - MINSIZE + 1) + MINSIZE; else if (size < MINSIZE) wp->circsize = MINSIZE; else wp->circsize = size; for (i = 0; i < wp->nc; i++) { for (j = 0; j < wp->maxsize; j++) { wp->rects[i * wp->maxsize + j].width = wp->circsize; wp->rects[i * wp->maxsize + j].height = wp->circsize; } } (void) memset((char *) wp->size, 0, wp->nc * sizeof (int)); wp->wormlength = (int) sqrt(wp->xsize + wp->ysize) * MI_CYCLES(mi) / 8; /* Fudge this to something reasonable */ for (i = 0; i < wp->nw; i++) { wp->worm[i].circ = (XPoint *) malloc(wp->wormlength * sizeof (XPoint)); wp->worm[i].diffcirc = (int *) malloc(wp->wormlength * sizeof (int)); for (j = 0; j < wp->wormlength; j++) { wp->worm[i].circ[j].x = wp->xsize / 2; wp->worm[i].circ[j].y = wp->ysize / 2; if (MI_WIN_IS_USE3D(mi)) wp->worm[i].diffcirc[j] = 0; } wp->worm[i].dir = NRAND(SEGMENTS); wp->worm[i].dir2 = NRAND(SEGMENTS); wp->worm[i].tail = 0; wp->worm[i].x = wp->xsize / 2; wp->worm[i].y = wp->ysize / 2; wp->worm[i].z = SCREENZ - MINZ; wp->worm[i].redrawing = 0; } if (MI_WIN_IS_INSTALL(mi) && MI_WIN_IS_USE3D(mi)) { XSetForeground(MI_DISPLAY(mi), MI_GC(mi), MI_NONE_COLOR(mi)); XFillRectangle(MI_DISPLAY(mi), MI_WINDOW(mi), MI_GC(mi), 0, 0, wp->xsize, wp->ysize); } else XClearWindow(MI_DISPLAY(mi), MI_WINDOW(mi)); } ENTRYPOINT void draw_worm (ModeInfo * mi) { Display *display = MI_DISPLAY(mi); Window window = MI_WINDOW(mi); GC gc = MI_GC(mi); wormstruct *wp = &worms[MI_SCREEN(mi)]; unsigned long wcolor; int i; (void) memset((char *) wp->size, 0, wp->nc * sizeof (int)); for (i = 0; i < wp->nw; i++) { if (MI_NPIXELS(mi) > 2) { wcolor = (i + wp->chromo) % wp->nc; worm_doit(mi, i, wcolor); } else worm_doit(mi, i, (unsigned long) 0); } if (MI_WIN_IS_USE3D(mi)) { if (MI_WIN_IS_INSTALL(mi)) XSetFunction(display, gc, GXor); XSetForeground(display, gc, MI_RIGHT_COLOR(mi)); XFillRectangles(display, window, gc, &(wp->rects[0]), wp->size[0]); XSetForeground(display, gc, MI_LEFT_COLOR(mi)); XFillRectangles(display, window, gc, &(wp->rects[wp->maxsize]), wp->size[1]); if (MI_WIN_IS_INSTALL(mi)) XSetFunction(display, gc, GXcopy); } else if (MI_NPIXELS(mi) > 2) { for (i = 0; i < wp->nc; i++) { XSetForeground(display, gc, MI_PIXEL(mi, i)); XFillRectangles(display, window, gc, &(wp->rects[i * wp->maxsize]), wp->size[i]); } } else { XSetForeground(display, gc, MI_WIN_WHITE_PIXEL(mi)); XFillRectangles(display, window, gc, &(wp->rects[0]), wp->size[0]); } if (++wp->chromo == (unsigned long) wp->nc) wp->chromo = 0; } ENTRYPOINT void release_worm(ModeInfo * mi) { if (worms != NULL) { int screen; for (screen = 0; screen < MI_NUM_SCREENS(mi); screen++) free_worms(&worms[screen]); (void) free((void *) worms); worms = NULL; } } ENTRYPOINT void refresh_worm (ModeInfo * mi) { if (MI_WIN_IS_USE3D(mi)) /* The 3D code does drawing&clearing by XORing. We do not want to go to too much trouble here to make it redraw correctly. */ XClearWindow(MI_DISPLAY(mi), MI_WINDOW(mi)); else if (worms != NULL) { wormstruct *wp = &worms[MI_SCREEN(mi)]; int i; for (i = 0; i < wp->nw; i++) { wp->worm[i].redrawing = 1; wp->worm[i].redrawpos = 0; } } } XSCREENSAVER_MODULE ("Worm", worm) xscreensaver-5.36/hacks/rotor.c000644 000767 000024 00000024452 12717747777 016601 0ustar00jwzstaff000000 000000 /* -*- Mode: C; tab-width: 4 -*- */ /* rotor --- a swirly rotor */ #if 0 static const char sccsid[] = "@(#)rotor.c 5.00 2000/11/01 xlockmore"; #endif /*- * Copyright (c) 1991 by Patrick J. Naughton. * * Permission to use, copy, modify, and distribute this software and its * documentation for any purpose and without fee is hereby granted, * provided that the above copyright notice appear in all copies and that * both that copyright notice and this permission notice appear in * supporting documentation. * * This file is provided AS IS with no warranties of any kind. The author * shall have no liability with respect to the infringement of copyrights, * trade secrets or any patents by this file or any part thereof. In no * event will the author be liable for any lost revenue or profits or * other special, indirect and consequential damages. * * Revision History: * 01-Nov-2000: Allocation checks * 10-May-1997: Compatible with xscreensaver * 08-Mar-1995: CAT stuff for ## was tripping up some C compilers. Removed. * 01-Dec-1993: added patch for AIXV3 from Tom McConnell * * 11-Nov-1990: put into xlock by Steve Zellers * 16-Oct-1990: Received from Tom Lawrence (tcl@cs.brown.edu: 'flight' * simulator) */ #ifdef STANDALONE #define MODE_rotor #define DEFAULTS "*delay: 10000 \n" \ "*count: 4 \n" \ "*cycles: 20 \n" \ "*size: -6 \n" \ "*ncolors: 200 \n" \ "*fpsSolid: true \n" \ # define SMOOTH_COLORS # define reshape_rotor 0 # define rotor_handle_event 0 # include "xlockmore.h" /* in xscreensaver distribution */ #else /* STANDALONE */ # include "xlock.h" /* in xlockmore distribution */ #endif /* STANDALONE */ #ifdef MODE_rotor ENTRYPOINT ModeSpecOpt rotor_opts = {0, (XrmOptionDescRec *) NULL, 0, (argtype *) NULL, (OptionStruct *) NULL}; #ifdef USE_MODULES ModStruct rotor_description = {"rotor", "init_rotor", "draw_rotor", "release_rotor", "refresh_rotor", "init_rotor", (char *) NULL, &rotor_opts, 100, 4, 100, -6, 64, 0.3, "", "Shows Tom's Roto-Rooter", 0, NULL}; #endif /*- * A 'batchcount' of 3 or 4 works best! */ #define MAXANGLE 3000.0 /* irrectangular (was 10000.0) */ /* How many segments to draw per cycle when redrawing */ #define REDRAWSTEP 3 typedef struct { float angle; float radius; float start_radius; float end_radius; float radius_drift_max; float radius_drift_now; float ratio; float start_ratio; float end_ratio; float ratio_drift_max; float ratio_drift_now; } elem; typedef struct { int pix; int lastx, lasty; int num, rotor, prev; int nsave; float angle; int centerx, centery; int prevcenterx, prevcentery; unsigned char firsttime; unsigned char iconifiedscreen; /* for iconified view */ unsigned char forward; unsigned char unused; elem *elements; XPoint *save; int redrawing, redrawpos; int linewidth; } rotorstruct; static rotorstruct *rotors = (rotorstruct *) NULL; static void free_rotor(rotorstruct *rp) { if (rp->elements != NULL) { (void) free((void *) rp->elements); rp->elements = (elem *) NULL; } if (rp->save != NULL) { (void) free((void *) rp->save); rp->save = (XPoint *) NULL; } } ENTRYPOINT void init_rotor (ModeInfo * mi) { int x; elem *pelem; unsigned char wasiconified; rotorstruct *rp; if (rotors == NULL) { if ((rotors = (rotorstruct *) calloc(MI_NUM_SCREENS(mi), sizeof (rotorstruct))) == NULL) return; } rp = &rotors[MI_SCREEN(mi)]; #ifdef HAVE_JWXYZ jwxyz_XSetAntiAliasing (MI_DISPLAY(mi), MI_GC(mi), False); #endif rp->prevcenterx = rp->centerx; rp->prevcentery = rp->centery; rp->centerx = MI_WIDTH(mi) / 2; rp->centery = MI_HEIGHT(mi) / 2; rp->redrawing = 0; /* * sometimes, you go into iconified view, only to see a really whizzy pattern * that you would like to look more closely at. Normally, clicking in the * icon reinitializes everything - but I don't, cuz I'm that kind of guy. * HENCE, the wasiconified stuff you see here. */ wasiconified = rp->iconifiedscreen; rp->iconifiedscreen = MI_IS_ICONIC(mi); if (wasiconified && !rp->iconifiedscreen) rp->firsttime = True; else { /* This is a fudge is needed since prevcenter may not be set when it comes from the the random mode and return is pressed (and its not the first mode that was running). This assumes that the size of the lock screen window / size of the icon window = 12 */ if (!rp->prevcenterx) rp->prevcenterx = rp->centerx * 12; if (!rp->prevcentery) rp->prevcentery = rp->centery * 12; rp->num = MI_COUNT(mi); if (rp->num < 0) { rp->num = NRAND(-rp->num) + 1; if (rp->elements != NULL) { (void) free((void *) rp->elements); rp->elements = (elem *) NULL; } } if (rp->elements == NULL) if ((rp->elements = (elem *) calloc(rp->num, sizeof (elem))) == NULL) { free_rotor(rp); return; } rp->nsave = MI_CYCLES(mi); if (rp->nsave <= 1) rp->nsave = 2; if (rp->save == NULL) if ((rp->save = (XPoint *) malloc(rp->nsave * sizeof (XPoint))) == NULL) { free_rotor(rp); return; } for (x = 0; x < rp->nsave; x++) { rp->save[x].x = rp->centerx; rp->save[x].y = rp->centery; } pelem = rp->elements; for (x = rp->num; --x >= 0; pelem++) { pelem->radius_drift_max = 1.0; pelem->radius_drift_now = 1.0; pelem->end_radius = 100.0; pelem->ratio_drift_max = 1.0; pelem->ratio_drift_now = 1.0; pelem->end_ratio = 10.0; } if (MI_NPIXELS(mi) > 2) rp->pix = NRAND(MI_NPIXELS(mi)); rp->rotor = 0; rp->prev = 1; rp->lastx = rp->centerx; rp->lasty = rp->centery; rp->angle = (float) NRAND((long) MAXANGLE) / 3.0; rp->forward = rp->firsttime = True; } rp->linewidth = MI_SIZE(mi); if (rp->linewidth == 0) rp->linewidth = 1; if (rp->linewidth < 0) rp->linewidth = NRAND(-rp->linewidth) + 1; MI_CLEARWINDOW(mi); } ENTRYPOINT void draw_rotor (ModeInfo * mi) { Display *display = MI_DISPLAY(mi); GC gc = MI_GC(mi); register elem *pelem; int thisx, thisy; int i; int x_1, y_1, x_2, y_2; rotorstruct *rp; if (rotors == NULL) return; rp = &rotors[MI_SCREEN(mi)]; if (rp->elements == NULL) return; MI_IS_DRAWN(mi) = True; if (!rp->iconifiedscreen) { thisx = rp->centerx; thisy = rp->centery; } else { thisx = rp->prevcenterx; thisy = rp->prevcentery; } XSetLineAttributes(MI_DISPLAY(mi), MI_GC(mi), rp->linewidth, LineSolid, CapButt, JoinMiter); for (i = rp->num, pelem = rp->elements; --i >= 0; pelem++) { if (pelem->radius_drift_max <= pelem->radius_drift_now) { pelem->start_radius = pelem->end_radius; pelem->end_radius = (float) NRAND(40000) / 100.0 - 200.0; pelem->radius_drift_max = (float) NRAND(100000) + 10000.0; pelem->radius_drift_now = 0.0; } if (pelem->ratio_drift_max <= pelem->ratio_drift_now) { pelem->start_ratio = pelem->end_ratio; pelem->end_ratio = (float) NRAND(2000) / 100.0 - 10.0; pelem->ratio_drift_max = (float) NRAND(100000) + 10000.0; pelem->ratio_drift_now = 0.0; } pelem->ratio = pelem->start_ratio + (pelem->end_ratio - pelem->start_ratio) / pelem->ratio_drift_max * pelem->ratio_drift_now; pelem->angle = rp->angle * pelem->ratio; pelem->radius = pelem->start_radius + (pelem->end_radius - pelem->start_radius) / pelem->radius_drift_max * pelem->radius_drift_now; thisx += (int) (COSF(pelem->angle) * pelem->radius); thisy += (int) (SINF(pelem->angle) * pelem->radius); pelem->ratio_drift_now += 1.0; pelem->radius_drift_now += 1.0; } if (rp->firsttime) rp->firsttime = False; else { XSetForeground(display, gc, MI_BLACK_PIXEL(mi)); x_1 = (int) rp->save[rp->rotor].x; y_1 = (int) rp->save[rp->rotor].y; x_2 = (int) rp->save[rp->prev].x; y_2 = (int) rp->save[rp->prev].y; if (rp->iconifiedscreen) { x_1 = x_1 * rp->centerx / rp->prevcenterx; x_2 = x_2 * rp->centerx / rp->prevcenterx; y_1 = y_1 * rp->centery / rp->prevcentery; y_2 = y_2 * rp->centery / rp->prevcentery; } XDrawLine(display, MI_WINDOW(mi), gc, x_1, y_1, x_2, y_2); if (MI_NPIXELS(mi) > 2) { XSetForeground(display, gc, MI_PIXEL(mi, rp->pix)); if (++rp->pix >= MI_NPIXELS(mi)) rp->pix = 0; } else XSetForeground(display, gc, MI_WHITE_PIXEL(mi)); x_1 = rp->lastx; y_1 = rp->lasty; x_2 = thisx; y_2 = thisy; if (rp->iconifiedscreen) { x_1 = x_1 * rp->centerx / rp->prevcenterx; x_2 = x_2 * rp->centerx / rp->prevcenterx; y_1 = y_1 * rp->centery / rp->prevcentery; y_2 = y_2 * rp->centery / rp->prevcentery; } XDrawLine(display, MI_WINDOW(mi), gc, x_1, y_1, x_2, y_2); } rp->save[rp->rotor].x = rp->lastx = thisx; rp->save[rp->rotor].y = rp->lasty = thisy; ++rp->rotor; rp->rotor %= rp->nsave; ++rp->prev; rp->prev %= rp->nsave; if (rp->forward) { rp->angle += 0.01; if (rp->angle >= MAXANGLE) { rp->angle = MAXANGLE; rp->forward = False; } } else { rp->angle -= 0.1; if (rp->angle <= 0) { rp->angle = 0.0; rp->forward = True; } } if (rp->redrawing) { int j; for (i = 0; i < REDRAWSTEP; i++) { j = (rp->rotor - rp->redrawpos + rp->nsave) % rp->nsave; x_1 = (int) rp->save[j].x; y_1 = (int) rp->save[j].y; x_2 = (int) rp->save[(j - 1 + rp->nsave) % rp->nsave].x; y_2 = (int) rp->save[(j - 1 + rp->nsave) % rp->nsave].y; if (rp->iconifiedscreen) { x_1 = x_1 * rp->centerx / rp->prevcenterx; x_2 = x_2 * rp->centerx / rp->prevcenterx; y_1 = y_1 * rp->centery / rp->prevcentery; y_2 = y_2 * rp->centery / rp->prevcentery; } XDrawLine(display, MI_WINDOW(mi), gc, x_1, y_1, x_2, y_2); if (++(rp->redrawpos) >= rp->nsave) { rp->redrawing = 0; break; } } } XSetLineAttributes(MI_DISPLAY(mi), MI_GC(mi), 1, LineSolid, CapButt, JoinMiter); } ENTRYPOINT void release_rotor (ModeInfo * mi) { if (rotors != NULL) { int screen; for (screen = 0; screen < MI_NUM_SCREENS(mi); screen++) free_rotor(&rotors[screen]); (void) free((void *) rotors); rotors = (rotorstruct *) NULL; } } ENTRYPOINT void refresh_rotor (ModeInfo * mi) { rotorstruct *rp; if (rotors == NULL) return; rp = &rotors[MI_SCREEN(mi)]; MI_CLEARWINDOW(mi); rp->redrawing = 1; rp->redrawpos = 1; } XSCREENSAVER_MODULE ("Rotor", rotor) #endif /* MODE_rotor */ xscreensaver-5.36/hacks/ant.c000644 000767 000024 00000114606 12717745712 016202 0ustar00jwzstaff000000 000000 /* -*- Mode: C; tab-width: 4 -*- */ /*- * ant --- Chris Langton's generalized turing machine ants (also known * as Greg Turk's turmites) whose tape is the screen */ #if 0 static const char sccsid[] = "@(#)ant.c 5.00 2000/11/01 xlockmore"; #endif /*- * Copyright (c) 1995 by David Bagley. * * Permission to use, copy, modify, and distribute this software and its * documentation for any purpose and without fee is hereby granted, * provided that the above copyright notice appear in all copies and that * both that copyright notice and this permission notice appear in * supporting documentation. * * This file is provided AS IS with no warranties of any kind. The author * shall have no liability with respect to the infringement of copyrights, * trade secrets or any patents by this file or any part thereof. In no * event will the author be liable for any lost revenue or profits or * other special, indirect and consequential damages. * * Revision History: * 01-Nov-2000: Allocation checks * 10-May-1997: Compatible with xscreensaver * 16-Apr-1997: -neighbors 3 and 8 added * 01-Jan-1997: Updated ant.c to handle more kinds of ants. Thanks to * J Austin David . Check it out in * java at http://havoc.gtf.gatech.edu/austin He thought up the * new Ladder ant. * 04-Apr-1996: -neighbors 6 runtime-time option added for hexagonal ants * (bees), coded from an idea of Jim Propp's in Science News, * Oct 28, 1995 VOL. 148 page 287 * 20-Sep-1995: Memory leak in ant fixed. Now random colors. * 05-Sep-1995: Coded from A.K. Dewdney's "Computer Recreations", Scientific * American Magazine" Sep 1989 pp 180-183, Mar 1990 p 121 * Also used Ian Stewart's Mathematical Recreations, Scientific * American Jul 1994 pp 104-107 * also used demon.c and life.c as a guide. */ /*- Species Grid Number of Neighbors ------- ---- ------------------ Ants Square 4 (or 8) Bees Hexagon 6 Bees Triangle 3 (or 9, 12) Neighbors 6 and neighbors 3 produce the same Turk ants. */ #ifndef HAVE_JWXYZ /*# define DO_STIPPLE*/ #endif #ifdef STANDALONE # define MODE_ant # define DEFAULTS "*delay: 20000 \n" \ "*count: -3 \n" \ "*cycles: 40000 \n" \ "*size: -12 \n" \ "*ncolors: 64 \n" \ "*fpsSolid: true \n" \ # define reshape_ant 0 # define ant_handle_event 0 # include "xlockmore.h" /* in xscreensaver distribution */ # include "erase.h" #else /* STANDALONE */ # include "xlock.h" /* in xlockmore distribution */ #endif /* STANDALONE */ #include "automata.h" #ifdef MODE_ant /*- * neighbors of 0 randomizes it for 3, 4, 6, 8, 12 (last 2 are less likely) */ #define DEF_NEIGHBORS "0" /* choose random value */ #define DEF_TRUCHET "False" #define DEF_EYES "False" #define DEF_SHARPTURN "False" static int neighbors; static Bool truchet; static Bool eyes; static Bool sharpturn; static XrmOptionDescRec opts[] = { {"-neighbors", ".ant.neighbors", XrmoptionSepArg, 0}, {"-truchet", ".ant.truchet", XrmoptionNoArg, "on"}, {"+truchet", ".ant.truchet", XrmoptionNoArg, "off"}, {"-eyes", ".ant.eyes", XrmoptionNoArg, "on"}, {"+eyes", ".ant.eyes", XrmoptionNoArg, "off"}, {"-sharpturn", ".ant.sharpturn", XrmoptionNoArg, "on"}, {"+sharpturn", ".ant.sharpturn", XrmoptionNoArg, "off"}, }; static argtype vars[] = { {&neighbors, "neighbors", "Neighbors", DEF_NEIGHBORS, t_Int}, {&truchet, "truchet", "Truchet", DEF_TRUCHET, t_Bool}, {&eyes, "eyes", "Eyes", DEF_EYES, t_Bool}, {&sharpturn, "sharpturn", "SharpTurn", DEF_SHARPTURN, t_Bool}, }; static OptionStruct desc[] = { {"-neighbors num", "squares 4 or 8, hexagons 6, triangles 3 or 12"}, {"-/+truchet", "turn on/off Truchet lines"}, {"-/+eyes", "turn on/off eyes"}, {"-/+sharpturn", "turn on/off sharp turns (6, 8 or 12 neighbors only)"} }; ENTRYPOINT ModeSpecOpt ant_opts = {sizeof opts / sizeof opts[0], opts, sizeof vars / sizeof vars[0], vars, desc}; #ifdef USE_MODULES const ModStruct ant_description = {"ant", "init_ant", "draw_ant", "release_ant", "refresh_ant", "init_ant", (char *) NULL, &ant_opts, 1000, -3, 40000, -12, 64, 1.0, "", "Shows Langton's and Turk's generalized ants", 0, NULL}; #endif #define ANTBITS(n,w,h)\ if ((ap->pixmaps[ap->init_bits]=\ XCreatePixmapFromBitmapData(display,window,(char *)n,w,h,1,0,1))==None){\ free_ant(display,ap); return;} else {ap->init_bits++;} /* If you change the table you may have to change the following 2 constants */ #define STATES 2 #define MINANTS 1 #define REDRAWSTEP 2000 /* How much tape to draw per cycle */ #define MINGRIDSIZE 24 #define MINSIZE 1 #define MINRANDOMSIZE 5 #define ANGLES 360 typedef struct { unsigned char color; short direction; unsigned char next; } statestruct; typedef struct { int col, row; short direction; unsigned char state; } antstruct; typedef struct { Bool painted; int neighbors; int generation; int xs, ys; int xb, yb; int init_dir; int nrows, ncols; int width, height; unsigned char ncolors, nstates; int n; int redrawing, redrawpos; int truchet; /* Only for Turk modes */ int eyes; int sharpturn; statestruct machine[NUMSTIPPLES * STATES]; unsigned char *tape; unsigned char *truchet_state; antstruct *ants; int init_bits; unsigned char colors[NUMSTIPPLES - 1]; # ifdef DO_STIPPLE GC stippledGC; # endif /* DO_STIPPLE */ Pixmap pixmaps[NUMSTIPPLES - 1]; union { XPoint hexagon[7]; /* Need more than 6 for truchet */ XPoint triangle[2][4]; /* Need more than 3 for truchet */ } shape; #ifdef STANDALONE eraser_state *eraser; #endif } antfarmstruct; static char plots[] = {3, 4, 6, 8, #ifdef NUMBER_9 9, #endif 12}; #define NEIGHBORKINDS ((long) (sizeof plots / sizeof *plots)) #define GOODNEIGHBORKINDS 3 /* Relative ant moves */ #define FS 0 /* Step */ #define TRS 1 /* Turn right, then step */ #define THRS 2 /* Turn hard right, then step */ #define TBS 3 /* Turn back, then step */ #define THLS 4 /* Turn hard left, then step */ #define TLS 5 /* Turn left, then step */ #define SF 6 /* Step */ #define STR 7 /* Step then turn right */ #define STHR 8 /* Step then turn hard right */ #define STB 9 /* Step then turn back */ #define STHL 10 /* Step then turn hard left */ #define STL 11 /* Step then turn left */ static antfarmstruct *antfarms = (antfarmstruct *) NULL; /* LANGTON'S ANT (10) Chaotic after 500, Builder after 10,000 (104p) */ /* TURK'S 100 ANT Always chaotic?, tested past 150,000,000 */ /* TURK'S 101 ANT Always chaotic? */ /* TURK'S 110 ANT Builder at 150 (18p) */ /* TURK'S 1000 ANT Always chaotic? */ /* TURK'S 1100 SYMMETRIC ANT all even run 1's and 0's are symmetric */ /* other examples 1001, 110011, 110000, 1001101 */ /* TURK'S 1101 ANT Builder after 250,000 (388p) */ /* Once saw a chess horse type builder (i.e. non-45 degree builder) */ /* BEE ONLY */ /* All alternating 10 appear symmetric, no proof (i.e. 10, 1010, etc) */ /* Even runs of 0's and 1's are also symmetric */ /* I have seen Hexagonal builders but they are more rare. */ static unsigned char tables[][3 * NUMSTIPPLES * STATES + 2] = { #if 0 /* Here just so you can figure out notation */ { /* Langton's ant */ 2, 1, 1, TLS, 0, 0, TRS, 0 }, #else /* First 2 numbers are the size (ncolors, nstates) */ { /* LADDER BUILDER */ 4, 1, 1, STR, 0, 2, STL, 0, 3, TRS, 0, 0, TLS, 0 }, { /* SPIRALING PATTERN */ 2, 2, 1, TLS, 0, 0, FS, 1, 1, TRS, 0, 1, TRS, 0 }, { /* SQUARE (HEXAGON) BUILDER */ 2, 2, 1, TLS, 0, 0, FS, 1, 0, TRS, 0, 1, TRS, 0 }, #endif }; #define NTABLES (sizeof tables / sizeof tables[0]) static void position_of_neighbor(antfarmstruct * ap, int dir, int *pcol, int *prow) { int col = *pcol, row = *prow; if (ap->neighbors == 6) { switch (dir) { case 0: col = (col + 1 == ap->ncols) ? 0 : col + 1; break; case 60: if (!(row & 1)) col = (col + 1 == ap->ncols) ? 0 : col + 1; row = (!row) ? ap->nrows - 1 : row - 1; break; case 120: if (row & 1) col = (!col) ? ap->ncols - 1 : col - 1; row = (!row) ? ap->nrows - 1 : row - 1; break; case 180: col = (!col) ? ap->ncols - 1 : col - 1; break; case 240: if (row & 1) col = (!col) ? ap->ncols - 1 : col - 1; row = (row + 1 == ap->nrows) ? 0 : row + 1; break; case 300: if (!(row & 1)) col = (col + 1 == ap->ncols) ? 0 : col + 1; row = (row + 1 == ap->nrows) ? 0 : row + 1; break; default: (void) fprintf(stderr, "wrong direction %d\n", dir); } } else if (ap->neighbors == 4 || ap->neighbors == 8) { switch (dir) { case 0: col = (col + 1 == ap->ncols) ? 0 : col + 1; break; case 45: col = (col + 1 == ap->ncols) ? 0 : col + 1; row = (!row) ? ap->nrows - 1 : row - 1; break; case 90: row = (!row) ? ap->nrows - 1 : row - 1; break; case 135: col = (!col) ? ap->ncols - 1 : col - 1; row = (!row) ? ap->nrows - 1 : row - 1; break; case 180: col = (!col) ? ap->ncols - 1 : col - 1; break; case 225: col = (!col) ? ap->ncols - 1 : col - 1; row = (row + 1 == ap->nrows) ? 0 : row + 1; break; case 270: row = (row + 1 == ap->nrows) ? 0 : row + 1; break; case 315: col = (col + 1 == ap->ncols) ? 0 : col + 1; row = (row + 1 == ap->nrows) ? 0 : row + 1; break; default: (void) fprintf(stderr, "wrong direction %d\n", dir); } } else { /* TRI */ if ((col + row) % 2) { /* right */ switch (dir) { case 0: col = (!col) ? ap->ncols - 1 : col - 1; break; case 30: case 40: col = (!col) ? ap->ncols - 1 : col - 1; row = (!row) ? ap->nrows - 1 : row - 1; break; case 60: col = (!col) ? ap->ncols - 1 : col - 1; if (!row) row = ap->nrows - 2; else if (!(row - 1)) row = ap->nrows - 1; else row = row - 2; break; case 80: case 90: if (!row) row = ap->nrows - 2; else if (!(row - 1)) row = ap->nrows - 1; else row = row - 2; break; case 120: row = (!row) ? ap->nrows - 1 : row - 1; break; case 150: case 160: col = (col + 1 == ap->ncols) ? 0 : col + 1; row = (!row) ? ap->nrows - 1 : row - 1; break; case 180: col = (col + 1 == ap->ncols) ? 0 : col + 1; break; case 200: case 210: col = (col + 1 == ap->ncols) ? 0 : col + 1; row = (row + 1 == ap->nrows) ? 0 : row + 1; break; case 240: row = (row + 1 == ap->nrows) ? 0 : row + 1; break; case 270: case 280: if (row + 1 == ap->nrows) row = 1; else if (row + 2 == ap->nrows) row = 0; else row = row + 2; break; case 300: col = (!col) ? ap->ncols - 1 : col - 1; if (row + 1 == ap->nrows) row = 1; else if (row + 2 == ap->nrows) row = 0; else row = row + 2; break; case 320: case 330: col = (!col) ? ap->ncols - 1 : col - 1; row = (row + 1 == ap->nrows) ? 0 : row + 1; break; default: (void) fprintf(stderr, "wrong direction %d\n", dir); } } else { /* left */ switch (dir) { case 0: col = (col + 1 == ap->ncols) ? 0 : col + 1; break; case 30: case 40: col = (col + 1 == ap->ncols) ? 0 : col + 1; row = (row + 1 == ap->nrows) ? 0 : row + 1; break; case 60: col = (col + 1 == ap->ncols) ? 0 : col + 1; if (row + 1 == ap->nrows) row = 1; else if (row + 2 == ap->nrows) row = 0; else row = row + 2; break; case 80: case 90: if (row + 1 == ap->nrows) row = 1; else if (row + 2 == ap->nrows) row = 0; else row = row + 2; break; case 120: row = (row + 1 == ap->nrows) ? 0 : row + 1; break; case 150: case 160: col = (!col) ? ap->ncols - 1 : col - 1; row = (row + 1 == ap->nrows) ? 0 : row + 1; break; case 180: col = (!col) ? ap->ncols - 1 : col - 1; break; case 200: case 210: col = (!col) ? ap->ncols - 1 : col - 1; row = (!row) ? ap->nrows - 1 : row - 1; break; case 240: row = (!row) ? ap->nrows - 1 : row - 1; break; case 270: case 280: if (!row) row = ap->nrows - 2; else if (row == 1) row = ap->nrows - 1; else row = row - 2; break; case 300: col = (col + 1 == ap->ncols) ? 0 : col + 1; if (!row) row = ap->nrows - 2; else if (row == 1) row = ap->nrows - 1; else row = row - 2; break; case 320: case 330: col = (col + 1 == ap->ncols) ? 0 : col + 1; row = (!row) ? ap->nrows - 1 : row - 1; break; default: (void) fprintf(stderr, "wrong direction %d\n", dir); } } } *pcol = col; *prow = row; } static void fillcell(ModeInfo * mi, GC gc, int col, int row) { antfarmstruct *ap = &antfarms[MI_SCREEN(mi)]; if (ap->neighbors == 6) { int ccol = 2 * col + !(row & 1), crow = 2 * row; ap->shape.hexagon[0].x = ap->xb + ccol * ap->xs; ap->shape.hexagon[0].y = ap->yb + crow * ap->ys; if (ap->xs == 1 && ap->ys == 1) XDrawPoint(MI_DISPLAY(mi), MI_WINDOW(mi), gc, ap->shape.hexagon[0].x, ap->shape.hexagon[0].y); else XFillPolygon(MI_DISPLAY(mi), MI_WINDOW(mi), gc, ap->shape.hexagon, 6, Convex, CoordModePrevious); } else if (ap->neighbors == 4 || ap->neighbors == 8) { XFillRectangle(MI_DISPLAY(mi), MI_WINDOW(mi), gc, ap->xb + ap->xs * col, ap->yb + ap->ys * row, ap->xs - (ap->xs > 3), ap->ys - (ap->ys > 3)); } else { /* TRI */ int orient = (col + row) % 2; /* O left 1 right */ ap->shape.triangle[orient][0].x = ap->xb + col * ap->xs; ap->shape.triangle[orient][0].y = ap->yb + row * ap->ys; if (ap->xs <= 3 || ap->ys <= 3) XDrawPoint(MI_DISPLAY(mi), MI_WINDOW(mi), gc, ((orient) ? -1 : 1) + ap->shape.triangle[orient][0].x, ap->shape.triangle[orient][0].y); else { if (orient) ap->shape.triangle[orient][0].x += (ap->xs / 2 - 1); else ap->shape.triangle[orient][0].x -= (ap->xs / 2 - 1); XFillPolygon(MI_DISPLAY(mi), MI_WINDOW(mi), gc, ap->shape.triangle[orient], 3, Convex, CoordModePrevious); } } } static void truchetcell(ModeInfo * mi, int col, int row, int truchetstate) { antfarmstruct *ap = &antfarms[MI_SCREEN(mi)]; if (ap->neighbors == 6) { int ccol = 2 * col + !(row & 1), crow = 2 * row; int side; int fudge = 7; /* fudge because the hexagons are not exact */ XPoint hex, hex2; if (ap->sharpturn) { hex.x = ap->xb + ccol * ap->xs - (int) ((double) ap->xs / 2.0) - 1; hex.y = ap->yb + crow * ap->ys - (int) ((double) ap->ys / 2.0) - 1; for (side = 0; side < 6; side++) { if (side) { hex.x += ap->shape.hexagon[side].x; hex.y += ap->shape.hexagon[side].y; } if (truchetstate == side % 2) XDrawArc(MI_DISPLAY(mi), MI_WINDOW(mi), MI_GC(mi), hex.x, hex.y, ap->xs, ap->ys, ((570 - (side * 60) + fudge) % 360) * 64, (120 - 2 * fudge) * 64); } } else { /* Very crude approx of Sqrt 3, so it will not cause drawing errors. */ hex.x = ap->xb + ccol * ap->xs - (int) ((double) ap->xs * 1.6 / 2.0) - 1; hex.y = ap->yb + crow * ap->ys - (int) ((double) ap->ys * 1.6 / 2.0) - 1; for (side = 0; side < 6; side++) { if (side) { hex.x += ap->shape.hexagon[side].x; hex.y += ap->shape.hexagon[side].y; } hex2.x = hex.x + ap->shape.hexagon[side + 1].x / 2; hex2.y = hex.y + ap->shape.hexagon[side + 1].y / 2 + 1; /* Lots of fudging here */ if (side == 1) { hex2.x += (short) (ap->xs * 0.1 + 1); hex2.y += (short) (ap->ys * 0.1 - ((ap->ys > 5) ? 1 : 0)); } else if (side == 2) { hex2.x += (short) (ap->xs * 0.1); } else if (side == 4) { hex2.x += (short) (ap->xs * 0.1); hex2.y += (short) (ap->ys * 0.1 - 1); } else if (side == 5) { hex2.x += (short) (ap->xs * 0.5); hex2.y += (short) (-ap->ys * 0.3 + 1); } if (truchetstate == side % 3) /* Crude approx of 120 deg, so it will not cause drawing errors. */ XDrawArc(MI_DISPLAY(mi), MI_WINDOW(mi), MI_GC(mi), hex2.x, hex2.y, (int) ((double) ap->xs * 1.5), (int) ((double) ap->ys * 1.5), ((555 - (side * 60)) % 360) * 64, 90 * 64); } } } else if (ap->neighbors == 4) { if (truchetstate) { XDrawArc(MI_DISPLAY(mi), MI_WINDOW(mi), MI_GC(mi), ap->xb + ap->xs * col - ap->xs / 2 + 1, ap->yb + ap->ys * row + ap->ys / 2 - 1, ap->xs - 2, ap->ys - 2, 0 * 64, 90 * 64); XDrawArc(MI_DISPLAY(mi), MI_WINDOW(mi), MI_GC(mi), ap->xb + ap->xs * col + ap->xs / 2 - 1, ap->yb + ap->ys * row - ap->ys / 2 + 1, ap->xs - 2, ap->ys - 2, -90 * 64, -90 * 64); } else { XDrawArc(MI_DISPLAY(mi), MI_WINDOW(mi), MI_GC(mi), ap->xb + ap->xs * col - ap->xs / 2 + 1, ap->yb + ap->ys * row - ap->ys / 2 + 1, ap->xs - 2, ap->ys - 2, 0 * 64, -90 * 64); XDrawArc(MI_DISPLAY(mi), MI_WINDOW(mi), MI_GC(mi), ap->xb + ap->xs * col + ap->xs / 2 - 1, ap->yb + ap->ys * row + ap->ys / 2 - 1, ap->xs - 2, ap->ys - 2, 90 * 64, 90 * 64); } } else if (ap->neighbors == 3) { int orient = (col + row) % 2; /* O left 1 right */ int side, ang; int fudge = 7; /* fudge because the triangles are not exact */ double fudge2 = 1.18; XPoint tri; tri.x = ap->xb + col * ap->xs; tri.y = ap->yb + row * ap->ys; if (orient) { tri.x += (ap->xs / 2 - 1); } else { tri.x -= (ap->xs / 2 - 1); } for (side = 0; side < 3; side++) { if (side > 0) { tri.x += ap->shape.triangle[orient][side].x; tri.y += ap->shape.triangle[orient][side].y; } if (truchetstate == side) { if (orient) ang = (510 - side * 120) % 360; /* Right */ else ang = (690 - side * 120) % 360; /* Left */ XDrawArc(MI_DISPLAY(mi), MI_WINDOW(mi), MI_GC(mi), (int) (tri.x - ap->xs * fudge2 / 2), (int) (tri.y - 3 * ap->ys * fudge2 / 4), (unsigned int) (ap->xs * fudge2), (unsigned int) (3 * ap->ys * fudge2 / 2), (ang + fudge) * 64, (60 - 2 * fudge) * 64); } } } } static void drawcell(ModeInfo * mi, int col, int row, unsigned char color) { antfarmstruct *ap = &antfarms[MI_SCREEN(mi)]; GC gc; if (!color) { XSetForeground(MI_DISPLAY(mi), MI_GC(mi), MI_BLACK_PIXEL(mi)); gc = MI_GC(mi); # ifdef DO_STIPPLE } else if (MI_NPIXELS(mi) <= 2) { XGCValues gcv; gcv.foreground = MI_WHITE_PIXEL(mi); gcv.background = MI_BLACK_PIXEL(mi); gcv.stipple = ap->pixmaps[color - 1]; XChangeGC(MI_DISPLAY(mi), ap->stippledGC, GCStipple | GCForeground | GCBackground, &gcv); gc = ap->stippledGC; # endif /* !DO_STIPPLE */ } else { XSetForeground(MI_DISPLAY(mi), MI_GC(mi), MI_PIXEL(mi, ap->colors[color - 1])); gc = MI_GC(mi); } fillcell(mi, gc, col, row); } static void drawtruchet(ModeInfo * mi, int col, int row, unsigned char color, unsigned char truchetstate) { antfarmstruct *ap = &antfarms[MI_SCREEN(mi)]; if (!color) XSetForeground(MI_DISPLAY(mi), MI_GC(mi), MI_WHITE_PIXEL(mi)); else if (MI_NPIXELS(mi) > 2 || color > ap->ncolors / 2) XSetForeground(MI_DISPLAY(mi), MI_GC(mi), MI_BLACK_PIXEL(mi)); else XSetForeground(MI_DISPLAY(mi), MI_GC(mi), MI_WHITE_PIXEL(mi)); truchetcell(mi, col, row, truchetstate); } static void draw_anant(ModeInfo * mi, int direction, int col, int row) { antfarmstruct *ap = &antfarms[MI_SCREEN(mi)]; Display *display = MI_DISPLAY(mi); Window window = MI_WINDOW(mi); XSetForeground(display, MI_GC(mi), MI_WHITE_PIXEL(mi)); fillcell(mi, MI_GC(mi), col, row); if (ap->eyes) { /* Draw Eyes */ XSetForeground(display, MI_GC(mi), MI_BLACK_PIXEL(mi)); if (ap->neighbors == 6) { int ccol = 2 * col + !(row & 1), crow = 2 * row; int side, ang; XPoint hex; if (!(ap->xs > 3 && ap->ys > 3)) return; hex.x = ap->xb + ccol * ap->xs; hex.y = ap->yb + crow * ap->ys + ap->ys / 2; ang = direction * ap->neighbors / ANGLES; for (side = 0; side < ap->neighbors; side++) { if (side) { hex.x -= ap->shape.hexagon[side].x / 2; hex.y += ap->shape.hexagon[side].y / 2; } if (side == (ap->neighbors + ang - 2) % ap->neighbors) XDrawPoint(display, window, MI_GC(mi), hex.x, hex.y); if (side == (ap->neighbors + ang - 1) % ap->neighbors) XDrawPoint(display, window, MI_GC(mi), hex.x, hex.y); } } else if (ap->neighbors == 4 || ap->neighbors == 8) { if (!(ap->xs > 3 && ap->ys > 3)) return; switch (direction) { case 0: XDrawPoint(display, window, MI_GC(mi), ap->xb + ap->xs * (col + 1) - 3, ap->yb + ap->ys * row + ap->ys / 2 - 2); XDrawPoint(display, window, MI_GC(mi), ap->xb + ap->xs * (col + 1) - 3, ap->yb + ap->ys * row + ap->ys / 2); break; case 45: XDrawPoint(display, window, MI_GC(mi), ap->xb + ap->xs * (col + 1) - 4, ap->yb + ap->ys * row + 1); XDrawPoint(display, window, MI_GC(mi), ap->xb + ap->xs * (col + 1) - 3, ap->yb + ap->ys * row + 2); break; case 90: XDrawPoint(display, window, MI_GC(mi), ap->xb + ap->xs * col + ap->xs / 2 - 2, ap->yb + ap->ys * row + 1); XDrawPoint(display, window, MI_GC(mi), ap->xb + ap->xs * col + ap->xs / 2, ap->yb + ap->ys * row + 1); break; case 135: XDrawPoint(display, window, MI_GC(mi), ap->xb + ap->xs * col + 2, ap->yb + ap->ys * row + 1); XDrawPoint(display, window, MI_GC(mi), ap->xb + ap->xs * col + 1, ap->yb + ap->ys * row + 2); break; case 180: XDrawPoint(display, window, MI_GC(mi), ap->xb + ap->xs * col + 1, ap->yb + ap->ys * row + ap->ys / 2 - 2); XDrawPoint(display, window, MI_GC(mi), ap->xb + ap->xs * col + 1, ap->yb + ap->ys * row + ap->ys / 2); break; case 225: XDrawPoint(display, window, MI_GC(mi), ap->xb + ap->xs * col + 2, ap->yb + ap->ys * (row + 1) - 3); XDrawPoint(display, window, MI_GC(mi), ap->xb + ap->xs * col + 1, ap->yb + ap->ys * (row + 1) - 4); break; case 270: XDrawPoint(display, window, MI_GC(mi), ap->xb + ap->xs * col + ap->xs / 2 - 2, ap->yb + ap->ys * (row + 1) - 3); XDrawPoint(display, window, MI_GC(mi), ap->xb + ap->xs * col + ap->xs / 2, ap->yb + ap->ys * (row + 1) - 3); break; case 315: XDrawPoint(display, window, MI_GC(mi), ap->xb + ap->xs * (col + 1) - 4, ap->yb + ap->ys * (row + 1) - 3); XDrawPoint(display, window, MI_GC(mi), ap->xb + ap->xs * (col + 1) - 3, ap->yb + ap->ys * (row + 1) - 4); break; default: (void) fprintf(stderr, "wrong eyes direction %d for ant eyes\n", direction); } } else { /* TRI */ int orient = (col + row) % 2; /* O left 1 right */ int side, ang; XPoint tri; if (!(ap->xs > 6 && ap->ys > 6)) return; tri.x = ap->xb + col * ap->xs; tri.y = ap->yb + row * ap->ys; if (orient) tri.x += (ap->xs / 6 - 1); else tri.x -= (ap->xs / 6 - 1); ang = direction * ap->neighbors / ANGLES; /* approx... does not work that well for even numbers */ if ( #ifdef NUMBER_9 ap->neighbors == 9 || #endif ap->neighbors == 12) { #ifdef UNDER_CONSTRUCTION /* Not sure why this does not work */ ang = ((ang + ap->neighbors / 6) / (ap->neighbors / 3)) % 3; #else return; #endif } for (side = 0; side < 3; side++) { if (side) { tri.x += ap->shape.triangle[orient][side].x / 3; tri.y += ap->shape.triangle[orient][side].y / 3; } /* Either you have the eyes in back or one eye in front */ #if 0 if (side == ang) XDrawPoint(display, window, MI_GC(mi), tri.x, tri.y); #else if (side == (ang + 2) % 3) XDrawPoint(display, window, MI_GC(mi), tri.x, tri.y); if (side == (ang + 1) % 3) XDrawPoint(display, window, MI_GC(mi), tri.x, tri.y); #endif } } } } #if 0 static void RandomSoup(mi) ModeInfo *mi; { antfarmstruct *ap = &antfarms[MI_SCREEN(mi)]; int row, col, mrow = 0; for (row = 0; row < ap->nrows; ++row) { for (col = 0; col < ap->ncols; ++col) { ap->old[col + mrow] = (unsigned char) NRAND((int) ap->ncolors); drawcell(mi, col, row, ap->old[col + mrow]); } mrow += ap->nrows; } } #endif static short fromTableDirection(unsigned char dir, int local_neighbors) { /* Crafted to work for odd number of neighbors */ switch (dir) { case FS: return 0; case TLS: return (ANGLES / local_neighbors); case THLS: return (2 * ANGLES / local_neighbors); case TBS: return ((local_neighbors / 2) * ANGLES / local_neighbors); case THRS: return (ANGLES - 2 * ANGLES / local_neighbors); case TRS: return (ANGLES - ANGLES / local_neighbors); case SF: return ANGLES; case STL: return (ANGLES + ANGLES / local_neighbors); case STHL: return (ANGLES + 2 * ANGLES / local_neighbors); case STB: return (ANGLES + (local_neighbors / 2) * ANGLES / local_neighbors); case STHR: return (2 * ANGLES - 2 * ANGLES / local_neighbors); case STR: return (2 * ANGLES - ANGLES / local_neighbors); default: (void) fprintf(stderr, "wrong direction %d from table\n", dir); } return -1; } static void getTable(ModeInfo * mi, int i) { antfarmstruct *ap = &antfarms[MI_SCREEN(mi)]; int j, total; unsigned char *patptr; patptr = &tables[i][0]; ap->ncolors = *patptr++; ap->nstates = *patptr++; total = ap->ncolors * ap->nstates; if (MI_IS_VERBOSE(mi)) (void) fprintf(stdout, "ants %d, neighbors %d, table number %d, colors %d, states %d\n", ap->n, ap->neighbors, i, ap->ncolors, ap->nstates); for (j = 0; j < total; j++) { ap->machine[j].color = *patptr++; if (ap->sharpturn && ap->neighbors > 4) { int k = *patptr++; switch (k) { case TRS: k = THRS; break; case THRS: k = TRS; break; case THLS: k = TLS; break; case TLS: k = THLS; break; case STR: k = STHR; break; case STHR: k = STR; break; case STHL: k = STL; break; case STL: k = STHL; break; default: break; } ap->machine[j].direction = fromTableDirection(k, ap->neighbors); } else { ap->machine[j].direction = fromTableDirection(*patptr++, ap->neighbors); } ap->machine[j].next = *patptr++; } ap->truchet = False; } static void getTurk(ModeInfo * mi, int i) { antfarmstruct *ap = &antfarms[MI_SCREEN(mi)]; int power2, j, number, total; /* To force a number, say has i + 2 (or 4) binary digits */ power2 = 1 << (i + 1); /* Do not want numbers which in binary are all 1's. */ number = NRAND(power2 - 1) + power2; /* To force a particular number, say */ ap->ncolors = i + 2; ap->nstates = 1; total = ap->ncolors * ap->nstates; for (j = 0; j < total; j++) { ap->machine[j].color = (j + 1) % total; if (ap->sharpturn && ap->neighbors > 4) { ap->machine[j].direction = (power2 & number) ? fromTableDirection(THRS, ap->neighbors) : fromTableDirection(THLS, ap->neighbors); } else { ap->machine[j].direction = (power2 & number) ? fromTableDirection(TRS, ap->neighbors) : fromTableDirection(TLS, ap->neighbors); } ap->machine[j].next = 0; power2 >>= 1; } ap->truchet = (ap->truchet && ap->xs > 2 && ap->ys > 2 && (ap->neighbors == 3 || ap->neighbors == 4 || ap->neighbors == 6)); if (MI_IS_VERBOSE(mi)) (void) fprintf(stdout, "ants %d, neighbors %d, Turk's number %d, colors %d\n", ap->n, ap->neighbors, number, ap->ncolors); } static void free_ant(Display *display, antfarmstruct *ap) { int shade; #ifdef DO_STIPPLE if (ap->stippledGC != None) { XFreeGC(display, ap->stippledGC); ap->stippledGC = None; } #endif /* DO_STIPPLE */ for (shade = 0; shade < ap->init_bits; shade++) { XFreePixmap(display, ap->pixmaps[shade]); } ap->init_bits = 0; if (ap->tape != NULL) { (void) free((void *) ap->tape); ap->tape = (unsigned char *) NULL; } if (ap->ants != NULL) { (void) free((void *) ap->ants); ap->ants = (antstruct *) NULL; } if (ap->truchet_state != NULL) { (void) free((void *) ap->truchet_state); ap->truchet_state = (unsigned char *) NULL; } } ENTRYPOINT void init_ant(ModeInfo * mi) { Display *display = MI_DISPLAY(mi); int size = MI_SIZE(mi); antfarmstruct *ap; int col, row, dir; int i; if (antfarms == NULL) { if ((antfarms = (antfarmstruct *) calloc(MI_NUM_SCREENS(mi), sizeof (antfarmstruct))) == NULL) return; } ap = &antfarms[MI_SCREEN(mi)]; ap->redrawing = 0; #ifdef DO_STIPPLE if (MI_NPIXELS(mi) <= 2) { Window window = MI_WINDOW(mi); if (ap->stippledGC == None) { XGCValues gcv; gcv.fill_style = FillOpaqueStippled; if ((ap->stippledGC = XCreateGC(display, window, GCFillStyle, &gcv)) == None) { free_ant(display, ap); return; } } if (ap->init_bits == 0) { for (i = 1; i < NUMSTIPPLES; i++) { ANTBITS(stipples[i], STIPPLESIZE, STIPPLESIZE); } } } #endif /* DO_STIPPLE */ ap->generation = 0; ap->n = MI_COUNT(mi); if (ap->n < -MINANTS) { /* if ap->n is random ... the size can change */ if (ap->ants != NULL) { (void) free((void *) ap->ants); ap->ants = (antstruct *) NULL; } ap->n = NRAND(-ap->n - MINANTS + 1) + MINANTS; } else if (ap->n < MINANTS) ap->n = MINANTS; ap->width = MI_WIDTH(mi); ap->height = MI_HEIGHT(mi); for (i = 0; i < NEIGHBORKINDS; i++) { if (neighbors == plots[i]) { ap->neighbors = plots[i]; break; } if (i == NEIGHBORKINDS - 1) { if (!NRAND(10)) { /* Make above 6 rare */ ap->neighbors = plots[NRAND(NEIGHBORKINDS)]; } else { ap->neighbors = plots[NRAND(GOODNEIGHBORKINDS)]; } break; } } if (ap->neighbors == 6) { int nccols, ncrows; if (ap->width < 8) ap->width = 8; if (ap->height < 8) ap->height = 8; if (size < -MINSIZE) { ap->ys = NRAND(MIN(-size, MAX(MINSIZE, MIN(ap->width, ap->height) / MINGRIDSIZE)) - MINSIZE + 1) + MINSIZE; if (ap->ys < MINRANDOMSIZE) ap->ys = MIN(MINRANDOMSIZE, MAX(MINSIZE, MIN(ap->width, ap->height) / MINGRIDSIZE)); } else if (size < MINSIZE) { if (!size) ap->ys = MAX(MINSIZE, MIN(ap->width, ap->height) / MINGRIDSIZE); else ap->ys = MINSIZE; } else ap->ys = MIN(size, MAX(MINSIZE, MIN(ap->width, ap->height) / MINGRIDSIZE)); ap->xs = ap->ys; nccols = MAX(ap->width / ap->xs - 2, 2); ncrows = MAX(ap->height / ap->ys - 1, 4); ap->ncols = nccols / 2; ap->nrows = 2 * (ncrows / 4); ap->xb = (ap->width - ap->xs * nccols) / 2 + ap->xs / 2; ap->yb = (ap->height - ap->ys * (ncrows / 2) * 2) / 2 + ap->ys - 2; for (i = 0; i < 6; i++) { ap->shape.hexagon[i].x = (ap->xs - 1) * hexagonUnit[i].x; ap->shape.hexagon[i].y = ((ap->ys - 1) * hexagonUnit[i].y / 2) * 4 / 3; } /* Avoid array bounds read of hexagonUnit */ ap->shape.hexagon[6].x = 0; ap->shape.hexagon[6].y = 0; } else if (ap->neighbors == 4 || ap->neighbors == 8) { if (size < -MINSIZE) { ap->ys = NRAND(MIN(-size, MAX(MINSIZE, MIN(ap->width, ap->height) / MINGRIDSIZE)) - MINSIZE + 1) + MINSIZE; if (ap->ys < MINRANDOMSIZE) ap->ys = MIN(MINRANDOMSIZE, MAX(MINSIZE, MIN(ap->width, ap->height) / MINGRIDSIZE)); } else if (size < MINSIZE) { if (!size) ap->ys = MAX(MINSIZE, MIN(ap->width, ap->height) / MINGRIDSIZE); else ap->ys = MINSIZE; } else ap->ys = MIN(size, MAX(MINSIZE, MIN(ap->width, ap->height) / MINGRIDSIZE)); ap->xs = ap->ys; ap->ncols = MAX(ap->width / ap->xs, 2); ap->nrows = MAX(ap->height / ap->ys, 2); ap->xb = (ap->width - ap->xs * ap->ncols) / 2; ap->yb = (ap->height - ap->ys * ap->nrows) / 2; } else { /* TRI */ int orient; if (ap->width < 2) ap->width = 2; if (ap->height < 2) ap->height = 2; if (size < -MINSIZE) { ap->ys = NRAND(MIN(-size, MAX(MINSIZE, MIN(ap->width, ap->height) / MINGRIDSIZE)) - MINSIZE + 1) + MINSIZE; if (ap->ys < MINRANDOMSIZE) ap->ys = MIN(MINRANDOMSIZE, MAX(MINSIZE, MIN(ap->width, ap->height) / MINGRIDSIZE)); } else if (size < MINSIZE) { if (!size) ap->ys = MAX(MINSIZE, MIN(ap->width, ap->height) / MINGRIDSIZE); else ap->ys = MINSIZE; } else ap->ys = MIN(size, MAX(MINSIZE, MIN(ap->width, ap->height) / MINGRIDSIZE)); ap->xs = (int) (1.52 * ap->ys); ap->ncols = (MAX(ap->width / ap->xs - 1, 2) / 2) * 2; ap->nrows = (MAX(ap->height / ap->ys - 1, 2) / 2) * 2; ap->xb = (ap->width - ap->xs * ap->ncols) / 2 + ap->xs / 2; ap->yb = (ap->height - ap->ys * ap->nrows) / 2 + ap->ys; for (orient = 0; orient < 2; orient++) { for (i = 0; i < 3; i++) { ap->shape.triangle[orient][i].x = (ap->xs - 2) * triangleUnit[orient][i].x; ap->shape.triangle[orient][i].y = (ap->ys - 2) * triangleUnit[orient][i].y; } /* Avoid array bounds read of triangleUnit */ ap->shape.triangle[orient][3].x = 0; ap->shape.triangle[orient][3].y = 0; } } XSetLineAttributes(display, MI_GC(mi), 1, LineSolid, CapNotLast, JoinMiter); MI_CLEARWINDOW(mi); ap->painted = False; if (MI_IS_FULLRANDOM(mi)) { ap->truchet = (Bool) (LRAND() & 1); ap->eyes = (Bool) (LRAND() & 1); ap->sharpturn = (Bool) (LRAND() & 1); } else { ap->truchet = truchet; ap->eyes = eyes; ap->sharpturn = sharpturn; } if (!NRAND(NUMSTIPPLES)) { getTable(mi, (int) (NRAND(NTABLES))); } else getTurk(mi, (int) (NRAND(NUMSTIPPLES - 1))); if (MI_NPIXELS(mi) > 2) for (i = 0; i < (int) ap->ncolors - 1; i++) ap->colors[i] = (unsigned char) (NRAND(MI_NPIXELS(mi)) + i * MI_NPIXELS(mi)) / ((int) (ap->ncolors - 1)); if (ap->ants == NULL) { if ((ap->ants = (antstruct *) malloc(ap->n * sizeof (antstruct))) == NULL) { free_ant(display, ap); return; } } if (ap->tape != NULL) (void) free((void *) ap->tape); if ((ap->tape = (unsigned char *) calloc(ap->ncols * ap->nrows, sizeof (unsigned char))) == NULL) { free_ant(display, ap); return; } if (ap->truchet_state != NULL) (void) free((void *) ap->truchet_state); if ((ap->truchet_state = (unsigned char *) calloc(ap->ncols * ap->nrows, sizeof (unsigned char))) == NULL) { free_ant(display, ap); return; } row = ap->nrows / 2; col = ap->ncols / 2; if (col > 0 && ((ap->neighbors % 2) || ap->neighbors == 12) && (LRAND() & 1)) col--; dir = NRAND(ap->neighbors) * ANGLES / ap->neighbors; ap->init_dir = dir; #ifdef NUMBER_9 if (ap->neighbors == 9 && !((col + row) & 1)) dir = (dir + ANGLES - ANGLES / (ap->neighbors * 2)) % ANGLES; #endif /* Have them all start in the same spot, why not? */ for (i = 0; i < ap->n; i++) { ap->ants[i].col = col; ap->ants[i].row = row; ap->ants[i].direction = dir; ap->ants[i].state = 0; } draw_anant(mi, dir, col, row); } ENTRYPOINT void draw_ant(ModeInfo * mi) { antstruct *anant; statestruct *status; int i, state_pos, tape_pos; unsigned char color; short chg_dir, old_dir; antfarmstruct *ap; if (antfarms == NULL) return; ap = &antfarms[MI_SCREEN(mi)]; if (ap->ants == NULL) return; #ifdef STANDALONE if (ap->eraser) { ap->eraser = erase_window (MI_DISPLAY(mi), MI_WINDOW(mi), ap->eraser); return; } #endif MI_IS_DRAWN(mi) = True; ap->painted = True; for (i = 0; i < ap->n; i++) { anant = &ap->ants[i]; tape_pos = anant->col + anant->row * ap->ncols; color = ap->tape[tape_pos]; /* read tape */ state_pos = color + anant->state * ap->ncolors; status = &(ap->machine[state_pos]); drawcell(mi, anant->col, anant->row, status->color); ap->tape[tape_pos] = status->color; /* write on tape */ /* Find direction of Bees or Ants. */ /* Translate relative direction to actual direction */ old_dir = anant->direction; chg_dir = (2 * ANGLES - status->direction) % ANGLES; anant->direction = (chg_dir + old_dir) % ANGLES; if (ap->truchet) { int a = 0, b; if (ap->neighbors == 6) { if (ap->sharpturn) { a = (((ANGLES + anant->direction - old_dir) % ANGLES) == 240); /* should be some way of getting rid of the init_dir dependency... */ b = !(ap->init_dir % 120); a = ((a && !b) || (b && !a)); drawtruchet(mi, anant->col, anant->row, status->color, a); } else { a = (old_dir / 60) % 3; b = (anant->direction / 60) % 3; a = (a + b + 1) % 3; drawtruchet(mi, anant->col, anant->row, status->color, a); } } else if (ap->neighbors == 4) { a = old_dir / 180; b = anant->direction / 180; a = ((a && !b) || (b && !a)); drawtruchet(mi, anant->col, anant->row, status->color, a); } else if (ap->neighbors == 3) { if (chg_dir == 240) a = (2 + anant->direction / 120) % 3; else a = (1 + anant->direction / 120) % 3; drawtruchet(mi, anant->col, anant->row, status->color, a); } ap->truchet_state[tape_pos] = a + 1; } anant->state = status->next; /* Allow step first and turn */ old_dir = ((status->direction < ANGLES) ? anant->direction : old_dir); #if DEBUG (void) printf("old_dir %d, col %d, row %d", old_dir, anant->col, anant->row); #endif position_of_neighbor(ap, old_dir, &(anant->col), &(anant->row)); #if DEBUG (void) printf(", ncol %d, nrow %d\n", anant->col, anant->row); #endif draw_anant(mi, anant->direction, anant->col, anant->row); } if (++ap->generation > MI_CYCLES(mi)) { #ifdef STANDALONE ap->eraser = erase_window (MI_DISPLAY(mi), MI_WINDOW(mi), ap->eraser); #endif init_ant(mi); } if (ap->redrawing) { for (i = 0; i < REDRAWSTEP; i++) { if (ap->tape[ap->redrawpos] || (ap->truchet && ap->truchet_state[ap->redrawpos])) { drawcell(mi, ap->redrawpos % ap->ncols, ap->redrawpos / ap->ncols, ap->tape[ap->redrawpos]); if (ap->truchet) drawtruchet(mi, ap->redrawpos % ap->ncols, ap->redrawpos / ap->ncols, ap->tape[ap->redrawpos], ap->truchet_state[ap->redrawpos] - 1); } if (++(ap->redrawpos) >= ap->ncols * ap->nrows) { ap->redrawing = 0; break; } } } } ENTRYPOINT void release_ant(ModeInfo * mi) { if (antfarms != NULL) { int screen; for (screen = 0; screen < MI_NUM_SCREENS(mi); screen++) free_ant(MI_DISPLAY(mi), &antfarms[screen]); (void) free((void *) antfarms); antfarms = (antfarmstruct *) NULL; } } ENTRYPOINT void refresh_ant(ModeInfo * mi) { antfarmstruct *ap; if (antfarms == NULL) return; ap = &antfarms[MI_SCREEN(mi)]; if (ap->painted) { MI_CLEARWINDOW(mi); ap->redrawing = 1; ap->redrawpos = 0; } } XSCREENSAVER_MODULE ("Ant", ant) #endif /* MODE_ant */ xscreensaver-5.36/hacks/xjack.c000644 000767 000024 00000033505 12701612217 016500 0ustar00jwzstaff000000 000000 /* xscreensaver, Copyright (c) 1997-2013 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. * * Wendy, let me explain something to you. Whenever you come in here and * interrupt me, you're BREAKING my CONCENTRATION. You're DISTRACTING me! * And it will then take me time to get back to where I was. You understand? * Now, we're going to make a new rule. When you come in here and you hear * me typing, or whether you DON'T hear me typing, or whatever the FUCK you * hear me doing; when I'm in here, it means that I am working, THAT means * don't come in! Now, do you think you can handle that? */ #include #include "screenhack.h" static const char *source = "All work and no play makes Jack a dull boy. "; /* If you're here because you're thinking about making the above string be customizable, then you don't get the joke. You loser. */ struct state { Display *dpy; Window window; XWindowAttributes xgwa; XFontStruct *font; GC gc; const char *s; int columns, rows; /* characters */ int left, right; /* characters */ int char_width, line_height; /* pixels */ int x, y; /* characters */ int mode; int hspace; /* pixels */ int vspace; /* pixels */ Bool break_para; Bool caps; int sentences; int paras; int scrolling; int subscrolling; int pining; int delay; }; static void xjack_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->columns = (st->xgwa.width - st->hspace - st->hspace) / st->char_width; st->rows = (st->xgwa.height - st->vspace - st->vspace) / st->line_height; st->rows--; st->columns--; /* If the window is stupidly small, just truncate. */ if (st->rows < 4) st->rows = 4; if (st->columns < 12) st->columns = 12; if (st->y > st->rows) st->y = st->rows-1; if (st->x > st->columns) st->x = st->columns-2; if (st->right > st->columns) st->right = st->columns; if (st->left > st->columns-20) st->left = st->columns-20; if (st->left < 0) st->left = 0; XClearWindow (st->dpy, st->window); } static void * xjack_init (Display *dpy, Window window) { struct state *st = (struct state *) calloc (1, sizeof(*st)); XGCValues gcv; char *fontname; st->dpy = dpy; st->window = window; st->s = source; st->delay = get_integer_resource (st->dpy, "delay", "Integer"); fontname = get_string_resource (st->dpy, "font", "Font"); XGetWindowAttributes (st->dpy, st->window, &st->xgwa); if (st->xgwa.width <= 480) fontname = "-*-courier-medium-r-*-*-*-180-*-*-m-*-*-*"; st->font = XLoadQueryFont (st->dpy, fontname); if (!st->font) st->font = XLoadQueryFont (st->dpy, "-*-*-medium-r-*-*-*-240-*-*-m-*-*-*"); if (!st->font) st->font = XLoadQueryFont (st->dpy, "-*-courier-medium-r-*-*-*-180-*-*-m-*-*-*"); if (!st->font) st->font = XLoadQueryFont (st->dpy, "-*-*-*-r-*-*-*-240-*-*-m-*-*-*"); if (!st->font) { fprintf(stderr, "no big fixed-width font like \"%s\"\n", fontname); exit(1); } gcv.font = st->font->fid; gcv.foreground = get_pixel_resource (st->dpy, st->xgwa.colormap, "foreground", "Foreground"); gcv.background = get_pixel_resource (st->dpy, st->xgwa.colormap, "background", "Background"); st->gc = XCreateGC (st->dpy, st->window, (GCFont | GCForeground | GCBackground), &gcv); st->char_width = (st->font->per_char ? st->font->per_char['n'-st->font->min_char_or_byte2].rbearing : st->font->min_bounds.rbearing); st->line_height = st->font->ascent + st->font->descent + 1; xjack_reshape (dpy, window, st, st->xgwa.width, st->xgwa.height); st->left = 0xFF & (random() % ((st->columns / 2)+1)); st->right = st->left + (0xFF & (random() % (st->columns - st->left) + 10)); if (st->right < st->left + 10) st->right = st->left + 10; if (st->right > st->columns) st->right = st->columns; st->x = st->left; st->y = 0; if (st->xgwa.width > 200 && st->xgwa.height > 200) st->hspace = st->vspace = 40; return st; } static unsigned long xjack_scroll (struct state *st) { st->break_para = 0; if (st->subscrolling) { int inc = st->line_height / 7; XCopyArea (st->dpy, st->window, st->window, st->gc, 0, inc, st->xgwa.width, st->xgwa.height - inc, 0, 0); /* See? It's OK. He saw it on the television. */ XClearArea (st->dpy, st->window, 0, st->xgwa.height - inc, st->xgwa.width, inc, False); st->subscrolling -= inc; if (st->subscrolling <= 0) st->subscrolling = 0; if (st->subscrolling == 0) { if (st->scrolling > 0) st->scrolling--; st->y--; } return st->delay / 1000; } else if (st->scrolling) st->subscrolling = st->line_height; if (st->y < 0) st->y = 0; else if (st->y >= st->rows-1) st->y = st->rows-1; return st->delay; } static unsigned long xjack_pine (struct state *st) { /* See also http://catalog.com/hopkins/unix-haters/login.html */ const char *n1 = "NFS server overlook not responding, still trying..."; const char *n2 = "NFS server overlook ok."; int prev = st->pining; if (!st->pining) st->pining = 1 + (random() % 3); if (prev) while (*n2) { XDrawString (st->dpy, st->window, st->gc, (st->x * st->char_width) + st->hspace, ((st->y * st->line_height) + st->vspace + st->font->ascent), (char *) n2, 1); st->x++; if (st->x >= st->columns) st->x = 0, st->y++; n2++; } st->y++; st->x = 0; st->pining--; if (st->pining) while (*n1) { XDrawString (st->dpy, st->window, st->gc, (st->x * st->char_width) + st->hspace, ((st->y * st->line_height) + st->vspace + st->font->ascent), (char *) n1, 1); st->x++; if (st->x >= st->columns) st->x = 0, st->y++; n1++; } return 5000000; } static unsigned long xjack_draw (Display *dpy, Window window, void *closure) { struct state *st = (struct state *) closure; int this_delay = st->delay; int word_length = 0; const char *s2; if (st->scrolling) return xjack_scroll (st); if (st->pining) return xjack_pine (st); for (s2 = st->s; *s2 && *s2 != ' '; s2++) word_length++; if (st->break_para || (*st->s != ' ' && (st->x + word_length) >= st->right)) { st->x = st->left; st->y++; if (st->break_para) st->y++; st->break_para = 0; if (st->mode == 1 || st->mode == 2) { /* 1 = left margin goes southwest; 2 = southeast */ st->left += (st->mode == 1 ? 1 : -1); if (st->left >= st->right - 10) { if ((st->right < (st->columns - 10)) && (random() & 1)) st->right += (0xFF & (random() % (st->columns - st->right))); else st->mode = 2; } else if (st->left <= 0) { st->left = 0; st->mode = 1; } } else if (st->mode == 3 || st->mode == 4) { /* 3 = right margin goes southeast; 4 = southwest */ st->right += (st->mode == 3 ? 1 : -1); if (st->right >= st->columns) { st->right = st->columns; st->mode = 4; } else if (st->right <= st->left + 10) st->mode = 3; } if (st->y >= st->rows-1) /* bottom of page */ { # if 0 /* Nah, this looks bad. */ /* scroll by 1-5 lines */ st->scrolling = (random() % 5 ? 0 : (0xFF & (random() % 5))) + 1; if (st->break_para) st->scrolling++; /* but sometimes scroll by a whole page */ if (0 == (random() % 100)) st->scrolling += st->rows; # else st->scrolling = 1; # endif return xjack_scroll (st); } } if (*st->s != ' ') { char c = *st->s; int xshift = 0, yshift = 0; if (0 == random() % 50) { xshift = random() % ((st->char_width / 3) + 1); /* mis-strike */ yshift = random() % ((st->line_height / 6) + 1); if (0 == (random() % 3)) yshift *= 2; if (random() & 1) xshift = -xshift; if (random() & 1) yshift = -yshift; } if (0 == (random() % 250)) /* introduce adjascent-key typo */ { static const char * const typo[] = { "asqw", "ASQW", "bgvhn", "cxdfv", "dserfcx", "ewsdrf", "Jhuikmn", "kjiol,m", "lkop;.,", "mnjk,", "nbhjm", "oiklp09", "pol;(-0", "redft54", "sawedxz", "uyhji87", "wqase32", "yuhgt67", ".,l;/", 0 }; int i = 0; while (typo[i] && typo[i][0] != c) i++; if (typo[i]) c = typo[i][0xFF & ((random() % strlen(typo[i]+1)) + 1)]; } /* caps typo */ if (c >= 'a' && c <= 'z' && (st->caps || 0 == (random() % 350))) { c -= ('a'-'A'); if (c == 'O' && random() & 1) c = '0'; } OVERSTRIKE: XDrawString (st->dpy, st->window, st->gc, (st->x * st->char_width) + st->hspace + xshift, ((st->y * st->line_height) + st->vspace + st->font->ascent + yshift), &c, 1); if (xshift == 0 && yshift == 0 && (0 == (random() & 3000))) { if (random() & 1) xshift--; else yshift--; goto OVERSTRIKE; } if ((tolower(c) != tolower(*st->s)) ? (0 == (random() % 10)) /* backup to correct */ : (0 == (random() % 400))) /* fail to advance */ { st->x--; st->s--; if (st->delay) st->delay += (0xFFFF & (st->delay + (random() % (st->delay * 10)))); } } st->x++; st->s++; if (0 == random() % 200) { if (random() & 1 && st->s != source) st->s--; /* duplicate character */ else if (*st->s) st->s++; /* skip character */ } if (*st->s == 0) { st->sentences++; st->caps = (0 == random() % 40); /* capitalize sentence */ if (0 == (random() % 10) || /* randomly break paragraph */ (st->mode == 0 && ((0 == (random() % 10)) || st->sentences > 20))) { st->break_para = True; st->sentences = 0; st->paras++; if (random() & 1) /* mode=0 50% of the time */ st->mode = 0; else st->mode = (0xFF & (random() % 5)); if (0 == (random() % 2)) /* re-pick margins */ { st->left = 0xFF & (random() % (st->columns / 3)); st->right = (st->columns - (0xFF & (random() % (st->columns / 3)))); if (0 == random() % 3) /* sometimes be wide */ st->right = st->left + ((st->right - st->left) / 2); } if (st->right - st->left <= 10) /* introduce sanity */ { st->left = 0; st->right = st->columns; } if (st->right - st->left > 50) /* if wide, shrink and move */ { st->left += (0xFF & (random() % ((st->columns - 50) + 1))); st->right = st->left + (0xFF & ((random() % 40) + 10)); } /* oh, gag. */ if (st->mode == 0 && st->right - st->left < 25 && st->columns > 40) { st->right += 20; if (st->right > st->columns) st->left -= (st->right - st->columns); } if (st->right - st->left < 5) st->left = st->right - 5; if (st->left < 0) st->left = 0; if (st->right - st->left < 5) st->right = st->left + 5; } st->s = source; } if (st->delay) { if (0 == random() % 3) this_delay += (0xFFFFFF & ((random() % (st->delay * 5)) + 1)); if (st->break_para) this_delay += (0xFFFFFF & ((random() % (st->delay * 15)) + 1)); } if (st->paras > 5 && (0 == (random() % 1000)) && st->y < st->rows-2) return xjack_pine (st); return this_delay; } static Bool xjack_event (Display *dpy, Window window, void *closure, XEvent *event) { struct state *st = (struct state *) closure; if (event->xany.type == ButtonPress) { st->scrolling++; return True; } return False; } static void xjack_free (Display *dpy, Window window, void *closure) { struct state *st = (struct state *) closure; free (st); } static const char *xjack_defaults [] = { ".background: #FFF0B4", ".foreground: #000000", "*fpsSolid: true", #ifdef HAVE_COCOA ".font: American Typewriter 24", #else ".font: -*-courier-medium-r-*-*-*-240-*-*-m-*-*-*", #endif "*delay: 50000", 0 }; static XrmOptionDescRec xjack_options [] = { { "-delay", ".delay", XrmoptionSepArg, 0 }, { "-font", ".font", XrmoptionSepArg, 0 }, { 0, 0, 0, 0 } }; XSCREENSAVER_MODULE ("XJack", xjack) xscreensaver-5.36/hacks/xlyap.c000644 000767 000024 00000151116 12717747752 016560 0ustar00jwzstaff000000 000000 /* Lyap - calculate and display Lyapunov exponents */ /* Written by Ron Record (rr@sco) 03 Sep 1991 */ /* The idea here is to calculate the Lyapunov exponent for a periodically * forced logistic map (later i added several other nonlinear maps of the unit * interval). In order to turn the 1-dimensional parameter space of the * logistic map into a 2-dimensional parameter space, select two parameter * values ('a' and 'b') then alternate the iterations of the logistic map using * first 'a' then 'b' as the parameter. This program accepts an argument to * specify a forcing function, so instead of just alternating 'a' and 'b', you * can use 'a' as the parameter for say 6 iterations, then 'b' for 6 iterations * and so on. An interesting forcing function to look at is abbabaab (the * Morse-Thue sequence, an aperiodic self-similar, self-generating sequence). * Anyway, step through all the values of 'a' and 'b' in the ranges you want, * calculating the Lyapunov exponent for each pair of values. The exponent * is calculated by iterating out a ways (specified by the variable "settle") * then on subsequent iterations calculating an average of the logarithm of * the absolute value of the derivative at that point. Points in parameter * space with a negative Lyapunov exponent are colored one way (using the * value of the exponent to index into a color map) while points with a * non-negative exponent are colored differently. * * The algorithm was taken from the September 1991 Scientific American article * by A. K. Dewdney who gives credit to Mario Markus of the Max Planck * Institute for its creation. Additional information and ideas were gleaned * from the discussion on alt.fractals involving Stephen Hall, Ed Kubaitis, * Dave Platt and Baback Moghaddam. Assistance with colormaps and spinning * color wheels and X was gleaned from Hiram Clawson. Rubber banding code was * adapted from an existing Mandelbrot program written by Stacey Campbell. */ #define LYAP_PATCHLEVEL 4 #define LYAP_VERSION "#(@) lyap 2.3 2/20/92" #include #include #include "screenhack.h" #include "yarandom.h" #include "hsv.h" #undef countof #define countof(x) (sizeof((x))/sizeof((*x))) #ifndef HAVE_JWXYZ # include #endif static const char *xlyap_defaults [] = { ".background: black", ".foreground: white", "*fpsSolid: true", "*randomize: true", "*builtin: -1", "*minColor: 1", "*maxColor: 256", "*dwell: 50", "*useLog: false", "*colorExponent: 1.0", "*colorOffset: 0", "*randomForce: ", /* 0.5 */ "*settle: 50", "*minA: 2.0", "*minB: 2.0", "*wheels: 7", "*function: 10101010", "*forcingFunction: abbabaab", "*bRange: ", /* 2.0 */ "*startX: 0.65", "*mapIndex: ", /* 0 */ "*outputFile: ", "*beNegative: false", "*rgbMax: 65000", "*spinLength: 256", "*show: false", "*aRange: ", /* 2.0 */ "*delay: 10000", "*linger: 5", "*colors: 200", #ifdef HAVE_MOBILE "*ignoreRotation: True", #endif 0 }; static XrmOptionDescRec xlyap_options [] = { { "-randomize", ".randomize", XrmoptionNoArg, "true" }, { "-builtin", ".builtin", XrmoptionSepArg, 0 }, { "-C", ".minColor", XrmoptionSepArg, 0 }, /* n */ { "-D", ".dwell", XrmoptionSepArg, 0 }, /* n */ { "-L", ".useLog", XrmoptionNoArg, "true" }, { "-M", ".colorExponent", XrmoptionSepArg, 0 }, /* r */ { "-O", ".colorOffset", XrmoptionSepArg, 0 }, /* n */ { "-R", ".randomForce", XrmoptionSepArg, 0 }, /* p */ { "-S", ".settle", XrmoptionSepArg, 0 }, /* n */ { "-a", ".minA", XrmoptionSepArg, 0 }, /* r */ { "-b", ".minB", XrmoptionSepArg, 0 }, /* n */ { "-c", ".wheels", XrmoptionSepArg, 0 }, /* n */ { "-F", ".function", XrmoptionSepArg, 0 }, /* 10101010 */ { "-f", ".forcingFunction", XrmoptionSepArg, 0 }, /* abbabaab */ { "-h", ".bRange", XrmoptionSepArg, 0 }, /* r */ { "-i", ".startX", XrmoptionSepArg, 0 }, /* r */ { "-m", ".mapIndex", XrmoptionSepArg, 0 }, /* n */ { "-o", ".outputFile", XrmoptionSepArg, 0 }, /* filename */ { "-p", ".beNegative", XrmoptionNoArg, "true" }, { "-r", ".rgbMax", XrmoptionSepArg, 0 }, /* n */ { "-s", ".spinLength", XrmoptionSepArg, 0 }, /* n */ { "-v", ".show", XrmoptionNoArg, "true" }, { "-w", ".aRange", XrmoptionSepArg, 0 }, /* r */ { "-delay", ".delay", XrmoptionSepArg, 0 }, /* delay */ { "-linger", ".linger", XrmoptionSepArg, 0 }, /* linger */ { 0, 0, 0, 0 } }; #define ABS(a) (((a)<0) ? (0-(a)) : (a) ) #define Min(x,y) ((x < y)?x:y) #define Max(x,y) ((x > y)?x:y) #ifdef SIXTEEN_COLORS # define MAXPOINTS 128 # ifdef BIGMEM # define MAXFRAMES 4 # else /* !BIGMEM */ # define MAXFRAMES 2 # endif /* !BIGMEM */ # define MAXCOLOR 16 #else /* !SIXTEEN_COLORS */ # define MAXPOINTS 256 # ifdef BIGMEM # define MAXFRAMES 8 # else /* !BIGMEM */ # define MAXFRAMES 2 # endif /* !BIGMEM */ # define MAXCOLOR 256 #endif /* !SIXTEEN_COLORS */ #define MAXINDEX 64 #define FUNCMAXINDEX 16 #define MAXWHEELS 7 #define NUMMAPS 5 #define NBUILTINS 22 #ifndef TRUE # define TRUE 1 # define FALSE 0 #endif typedef struct { int x, y; } xy_t; #if 0 typedef struct { int start_x, start_y; int last_x, last_y; } rubber_band_data_t; #endif typedef struct { # ifndef HAVE_JWXYZ Cursor band_cursor; # endif double p_min, p_max, q_min, q_max; /* rubber_band_data_t rubber_band;*/ } image_data_t; typedef struct points_t { XPoint data[MAXCOLOR][MAXPOINTS]; int npoints[MAXCOLOR]; } points_t; typedef double (*PFD)(double,double); /* #### What was this for? Everything was drawn twice, to the window and to this, and this was never displayed! */ /*#define BACKING_PIXMAP*/ struct state { Display *dpy; Screen *screen; Visual *visual; Colormap cmap; unsigned long foreground, background; Window canvas; int delay, linger; unsigned int maxcolor, startcolor, mincolindex; int color_offset; int dwell, settle; int width, height, xposition, yposition; points_t Points; /* image_data_t rubber_data;*/ GC Data_GC[MAXCOLOR]/*, RubberGC*/; PFD map, deriv; int aflag, bflag, wflag, hflag, Rflag; int maxindex; int funcmaxindex; double min_a, min_b, a_range, b_range, minlyap; double max_a, max_b; double start_x, lyapunov, a_inc, b_inc, a, b; int numcolors, numfreecols, lowrange; xy_t point; #ifdef BACKING_PIXMAP Pixmap pixmap; #endif /* XColor Colors[MAXCOLOR];*/ double *exponents[MAXFRAMES]; double a_minimums[MAXFRAMES], b_minimums[MAXFRAMES]; double a_maximums[MAXFRAMES], b_maximums[MAXFRAMES]; double minexp, maxexp, prob; int expind[MAXFRAMES], resized[MAXFRAMES]; int numwheels, force, Force, negative; int rgb_max, nostart, stripe_interval; int save, show, useprod, spinlength; int maxframe, frame, dorecalc, mapindex, run; char *outname; int sendpoint_index; int forcing[MAXINDEX]; int Forcing[FUNCMAXINDEX]; int reset_countdown; int ncolors; XColor colors[MAXCOLOR]; }; static const double pmins[NUMMAPS] = { 2.0, 0.0, 0.0, 0.0, 0.0 }; static const double pmaxs[NUMMAPS] = { 4.0, 1.0, 6.75, 6.75, 16.0 }; static const double amins[NUMMAPS] = { 2.0, 0.0, 0.0, 0.0, 0.0 }; static const double aranges[NUMMAPS] = { 2.0, 1.0, 6.75, 6.75, 16.0 }; static const double bmins[NUMMAPS] = { 2.0, 0.0, 0.0, 0.0, 0.0 }; static const double branges[NUMMAPS] = { 2.0, 1.0, 6.75, 6.75, 16.0 }; /****************************************************************************/ /* callback function declarations */ static double logistic(double,double); static double circle(double,double); static double leftlog(double,double); static double rightlog(double,double); static double doublelog(double,double); static double dlogistic(double,double); static double dcircle(double,double); static double dleftlog(double,double); static double drightlog(double,double); static double ddoublelog(double,double); static const PFD Maps[NUMMAPS] = { logistic, circle, leftlog, rightlog, doublelog }; static const PFD Derivs[NUMMAPS] = { dlogistic, dcircle, dleftlog, drightlog, ddoublelog }; /****************************************************************************/ /* other function declarations */ static void resize(struct state *); /*static void Spin(struct state *);*/ static void show_defaults(struct state *); /*static void StartRubberBand(struct state *, image_data_t *, XEvent *); static void TrackRubberBand(struct state *, image_data_t *, XEvent *); static void EndRubberBand(struct state *, image_data_t *, XEvent *);*/ /*static void CreateXorGC(struct state *);*/ static void InitBuffer(struct state *); static void BufferPoint(struct state *, int color, int x, int y); static void FlushBuffer(struct state *); static void init_data(struct state *); static void init_color(struct state *); static void parseargs(struct state *); static void Clear(struct state *); static void setupmem(struct state *); static int complyap(struct state *); static Bool Getkey(struct state *, XKeyEvent *); static int sendpoint(struct state *, double expo); /*static void save_to_file(struct state *);*/ static void setforcing(struct state *); static void check_params(struct state *, int mapnum, int parnum); static void usage(struct state *); static void Destroy_frame(struct state *); static void freemem(struct state *); static void Redraw(struct state *); static void redraw(struct state *, double *exparray, int index, int cont); static void recalc(struct state *); /*static void SetupCorners(XPoint *, image_data_t *); static void set_new_params(struct state *, image_data_t *);*/ static void go_down(struct state *); static void go_back(struct state *); static void go_init(struct state *); static void jumpwin(struct state *); static void print_help(struct state *); static void print_values(struct state *); /****************************************************************************/ /* complyap() is the guts of the program. This is where the Lyapunov exponent * is calculated. For each iteration (past some large number of iterations) * calculate the logarithm of the absolute value of the derivative at that * point. Then average them over some large number of iterations. Some small * speed up is achieved by utilizing the fact that log(a*b) = log(a) + log(b). */ static int complyap(struct state *st) { int i, bindex; double total, prod, x, dx, r; if (st->maxcolor > MAXCOLOR) abort(); if (!st->run) return TRUE; st->a += st->a_inc; if (st->a >= st->max_a) { if (sendpoint(st, st->lyapunov) == TRUE) return FALSE; else { FlushBuffer(st); /* if (savefile) save_to_file(); */ return TRUE; } } if (st->b >= st->max_b) { FlushBuffer(st); /* if (savefile) save_to_file();*/ return TRUE; } prod = 1.0; total = 0.0; bindex = 0; x = st->start_x; r = (st->forcing[bindex]) ? st->b : st->a; #ifdef MAPS findex = 0; map = Maps[st->Forcing[findex]]; #endif for (i=0;isettle;i++) { /* Here's where we let the thing */ x = st->map (x, r); /* "settle down". There is usually */ if (++bindex >= st->maxindex) { /* some initial "noise" in the */ bindex = 0; /* iterations. How can we optimize */ if (st->Rflag) /* the value of settle ??? */ setforcing(st); } r = (st->forcing[bindex]) ? st->b : st->a; #ifdef MAPS if (++findex >= funcmaxindex) findex = 0; map = Maps[st->Forcing[findex]]; #endif } #ifdef MAPS deriv = Derivs[st->Forcing[findex]]; #endif if (st->useprod) { /* using log(a*b) */ for (i=0;idwell;i++) { x = st->map (x, r); dx = st->deriv (x, r); /* ABS is a macro, so don't be fancy */ dx = ABS(dx); if (dx == 0.0) /* log(0) is nasty so break out. */ { i++; break; } prod *= dx; /* we need to prevent overflow and underflow */ if ((prod > 1.0e12) || (prod < 1.0e-12)) { total += log(prod); prod = 1.0; } if (++bindex >= st->maxindex) { bindex = 0; if (st->Rflag) setforcing(st); } r = (st->forcing[bindex]) ? st->b : st->a; #ifdef MAPS if (++findex >= funcmaxindex) findex = 0; map = Maps[st->Forcing[findex]]; deriv = Derivs[st->Forcing[findex]]; #endif } total += log(prod); st->lyapunov = (total * M_LOG2E) / (double)i; } else { /* use log(a) + log(b) */ for (i=0;idwell;i++) { x = st->map (x, r); dx = st->deriv (x, r); /* ABS is a macro, so don't be fancy */ dx = ABS(dx); if (x == 0.0) /* log(0) check */ { i++; break; } total += log(dx); if (++bindex >= st->maxindex) { bindex = 0; if (st->Rflag) setforcing(st); } r = (st->forcing[bindex]) ? st->b : st->a; #ifdef MAPS if (++findex >= funcmaxindex) findex = 0; map = Maps[st->Forcing[findex]]; deriv = Derivs[st->Forcing[findex]]; #endif } st->lyapunov = (total * M_LOG2E) / (double)i; } if (sendpoint(st, st->lyapunov) == TRUE) return FALSE; else { FlushBuffer(st); /* if (savefile) save_to_file();*/ return TRUE; } } static double logistic(double x, double r) /* the familiar logistic map */ { return(r * x * (1.0 - x)); } static double dlogistic(double x, double r) /* the derivative of logistic map */ { return(r - (2.0 * r * x)); } static double circle(double x, double r) /* sin() hump or sorta like the circle map */ { return(r * sin(M_PI * x)); } static double dcircle(double x, double r) /* derivative of the "sin() hump" */ { return(r * M_PI * cos(M_PI * x)); } static double leftlog(double x, double r) /* left skewed logistic */ { double d; d = 1.0 - x; return(r * x * d * d); } static double dleftlog(double x, double r) /* derivative of the left skewed logistic */ { return(r * (1.0 - (4.0 * x) + (3.0 * x * x))); } static double rightlog(double x, double r) /* right skewed logistic */ { return(r * x * x * (1.0 - x)); } static double drightlog(double x, double r) /* derivative of the right skewed logistic */ { return(r * ((2.0 * x) - (3.0 * x * x))); } static double doublelog(double x, double r) /* double logistic */ { double d; d = 1.0 - x; return(r * x * x * d * d); } static double ddoublelog(double x, double r) /* derivative of the double logistic */ { double d; d = x * x; return(r * ((2.0 * x) - (6.0 * d) + (4.0 * x * d))); } static void init_data(struct state *st) { st->numcolors = get_integer_resource (st->dpy, "colors", "Integer"); if (st->numcolors < 2) st->numcolors = 2; if (st->numcolors > st->maxcolor) st->numcolors = st->maxcolor; st->numfreecols = st->numcolors - st->mincolindex; st->lowrange = st->mincolindex - st->startcolor; st->a_inc = st->a_range / (double)st->width; st->b_inc = st->b_range / (double)st->height; st->point.x = -1; st->point.y = 0; st->a = /*st->rubber_data.p_min = */st->min_a; st->b = /*st->rubber_data.q_min = */st->min_b; /* st->rubber_data.p_max = st->max_a; st->rubber_data.q_max = st->max_b;*/ if (st->show) show_defaults(st); InitBuffer(st); } #if 0 static void hls2rgb(int hue_light_sat[3], int rgb[3]) /* Each in range [0..65535] */ { unsigned short r, g, b; hsv_to_rgb((int) (hue_light_sat[0] / 10), /* 0-3600 -> 0-360 */ (int) ((hue_light_sat[2]/1000.0) * 64435), /* 0-1000 -> 0-65535 */ (int) ((hue_light_sat[1]/1000.0) * 64435), /* 0-1000 -> 0-65535 */ &r, &g, &b); rgb[0] = r; rgb[1] = g; rgb[2] = b; } #endif /* 0 */ static void init_color(struct state *st) { int i; if (st->ncolors) free_colors (st->screen, st->cmap, st->colors, st->ncolors); st->ncolors = st->maxcolor; make_smooth_colormap(st->screen, st->visual, st->cmap, st->colors, &st->ncolors, True, NULL, True); for (i = 0; i < st->maxcolor; i++) { if (! st->Data_GC[i]) { XGCValues gcv; gcv.background = BlackPixelOfScreen(st->screen); st->Data_GC[i] = XCreateGC(st->dpy, st->canvas, GCBackground, &gcv); } XSetForeground(st->dpy, st->Data_GC[i], st->colors[((int) ((i / ((float)st->maxcolor)) * st->ncolors))].pixel); } } static void parseargs(struct state *st) { int i; int bindex=0, findex; char *s, *ch; st->map = Maps[0]; st->deriv = Derivs[0]; st->maxexp=st->minlyap; st->minexp= -1.0 * st->minlyap; st->mincolindex = get_integer_resource(st->dpy, "minColor", "Integer"); st->dwell = get_integer_resource(st->dpy, "dwell", "Integer"); #ifdef MAPS { char *optarg = get_string_resource(st->dpy, "function", "String"); funcmaxindex = strlen(optarg); if (funcmaxindex > FUNCMAXINDEX) usage(); ch = optarg; st->Force++; for (findex=0;findexForcing[findex] = (int)(*ch++ - '0');; if (st->Forcing[findex] >= NUMMAPS) usage(); } } #endif if (get_boolean_resource(st->dpy, "useLog", "Boolean")) st->useprod=0; st->minlyap=ABS(get_float_resource(st->dpy, "colorExponent", "Float")); st->maxexp=st->minlyap; st->minexp= -1.0 * st->minlyap; st->color_offset = get_integer_resource(st->dpy, "colorOffset", "Integer"); st->maxcolor=ABS(get_integer_resource(st->dpy, "maxColor", "Integer")); if ((st->maxcolor - st->startcolor) <= 0) st->startcolor = get_pixel_resource(st->dpy, st->cmap, "background", "Background"); if ((st->maxcolor - st->mincolindex) <= 0) { st->mincolindex = 1; st->color_offset = 0; } s = get_string_resource(st->dpy, "randomForce", "Float"); if (s && *s) { st->prob=atof(s); st->Rflag++; setforcing(st); } st->settle = get_integer_resource(st->dpy, "settle", "Integer"); #if 0 s = get_string_resource(st->dpy, "minA", "Float"); if (s && *s) { st->min_a = atof(s); st->aflag++; } s = get_string_resource(st->dpy, "minB", "Float"); if (s && *s) { st->min_b=atof(s); st->bflag++; } #else st->min_a = get_float_resource (st->dpy, "minA", "Float"); st->aflag++; st->min_b = get_float_resource (st->dpy, "minB", "Float"); st->bflag++; #endif st->numwheels = get_integer_resource(st->dpy, "wheels", "Integer"); s = get_string_resource(st->dpy, "forcingFunction", "String"); if (s && *s) { st->maxindex = strlen(s); if (st->maxindex > MAXINDEX) usage(st); ch = s; st->force++; while (bindex < st->maxindex) { if (*ch == 'a') st->forcing[bindex++] = 0; else if (*ch == 'b') st->forcing[bindex++] = 1; else usage(st); ch++; } } s = get_string_resource(st->dpy, "bRange", "Float"); if (s && *s) { st->b_range = atof(s); st->hflag++; } st->start_x = get_float_resource(st->dpy, "startX", "Float"); s = get_string_resource(st->dpy, "mapIndex", "Integer"); if (s && *s) { st->mapindex=atoi(s); if ((st->mapindex >= NUMMAPS) || (st->mapindex < 0)) usage(st); st->map = Maps[st->mapindex]; st->deriv = Derivs[st->mapindex]; if (!st->aflag) st->min_a = amins[st->mapindex]; if (!st->wflag) st->a_range = aranges[st->mapindex]; if (!st->bflag) st->min_b = bmins[st->mapindex]; if (!st->hflag) st->b_range = branges[st->mapindex]; if (!st->Force) for (i=0;iForcing[i] = st->mapindex; } st->outname = get_string_resource(st->dpy, "outputFile", "Integer"); if (get_boolean_resource(st->dpy, "beNegative", "Boolean")) st->negative--; st->rgb_max = get_integer_resource(st->dpy, "rgbMax", "Integer"); st->spinlength = get_integer_resource(st->dpy, "spinLength", "Integer"); st->show = get_boolean_resource(st->dpy, "show", "Boolean"); s = get_string_resource(st->dpy, "aRange", "Float"); if (s && *s) { st->a_range = atof(s); st->wflag++; } st->max_a = st->min_a + st->a_range; st->max_b = st->min_b + st->b_range; st->a_minimums[0] = st->min_a; st->b_minimums[0] = st->min_b; st->a_maximums[0] = st->max_a; st->b_maximums[0] = st->max_b; if (st->Force) if (st->maxindex == st->funcmaxindex) for (findex=0;findexfuncmaxindex;findex++) check_params(st, st->Forcing[findex],st->forcing[findex]); else fprintf(stderr, "Warning! Unable to check parameters\n"); else check_params(st, st->mapindex,2); } static void check_params(struct state *st, int mapnum, int parnum) { if (parnum != 1) { if ((st->max_a > pmaxs[mapnum]) || (st->min_a < pmins[mapnum])) { fprintf(stderr, "Warning! Parameter 'a' out of range.\n"); fprintf(stderr, "You have requested a range of (%f,%f).\n", st->min_a,st->max_a); fprintf(stderr, "Valid range is (%f,%f).\n", pmins[mapnum],pmaxs[mapnum]); } } if (parnum != 0) { if ((st->max_b > pmaxs[mapnum]) || (st->min_b < pmins[mapnum])) { fprintf(stderr, "Warning! Parameter 'b' out of range.\n"); fprintf(stderr, "You have requested a range of (%f,%f).\n", st->min_b,st->max_b); fprintf(stderr, "Valid range is (%f,%f).\n", pmins[mapnum],pmaxs[mapnum]); } } } static void usage(struct state *st) { fprintf(stderr,"lyap [-BLs][-W#][-H#][-a#][-b#][-w#][-h#][-x xstart]\n"); fprintf(stderr,"\t[-M#][-S#][-D#][-f string][-r#][-O#][-C#][-c#][-m#]\n"); #ifdef MAPS fprintf(stderr,"\t[-F string]\n"); #endif fprintf(stderr,"\tWhere: -C# specifies the minimum color index\n"); fprintf(stderr,"\t -r# specifies the maxzimum rgb value\n"); fprintf(stderr,"\t -u displays this message\n"); fprintf(stderr,"\t -a# specifies the minimum horizontal parameter\n"); fprintf(stderr,"\t -b# specifies the minimum vertical parameter\n"); fprintf(stderr,"\t -w# specifies the horizontal parameter range\n"); fprintf(stderr,"\t -h# specifies the vertical parameter range\n"); fprintf(stderr,"\t -D# specifies the dwell\n"); fprintf(stderr,"\t -S# specifies the settle\n"); fprintf(stderr,"\t -H# specifies the initial window height\n"); fprintf(stderr,"\t -W# specifies the initial window width\n"); fprintf(stderr,"\t -O# specifies the color offset\n"); fprintf(stderr,"\t -c# specifies the desired color wheel\n"); fprintf(stderr,"\t -m# specifies the desired map (0-4)\n"); fprintf(stderr,"\t -f aabbb specifies a forcing function of 00111\n"); #ifdef MAPS fprintf(stderr,"\t -F 00111 specifies the function forcing function\n"); #endif fprintf(stderr,"\t -L indicates use log(x)+log(y) rather than log(xy)\n"); fprintf(stderr,"\tDuring display :\n"); fprintf(stderr,"\t Use the mouse to zoom in on an area\n"); fprintf(stderr,"\t e or E recalculates color indices\n"); fprintf(stderr,"\t f or F saves exponents to a file\n"); fprintf(stderr,"\t KJmn increase/decrease minimum negative exponent\n"); fprintf(stderr,"\t r or R redraws\n"); fprintf(stderr,"\t s or S spins the colorwheel\n"); fprintf(stderr,"\t w or W changes the color wheel\n"); fprintf(stderr,"\t x or X clears the window\n"); fprintf(stderr,"\t q or Q exits\n"); exit(1); } static void Cycle_frames(struct state *st) { int i; for (i=0;i<=st->maxframe;i++) redraw(st, st->exponents[i], st->expind[i], 1); } #if 0 static void Spin(struct state *st) { int i, j; long tmpxcolor; if (!mono_p) { for (j=0;jspinlength;j++) { tmpxcolor = st->Colors[st->mincolindex].pixel; for (i=st->mincolindex;inumcolors-1;i++) st->Colors[i].pixel = st->Colors[i+1].pixel; st->Colors[st->numcolors-1].pixel = tmpxcolor; XStoreColors(st->dpy, st->cmap, st->Colors, st->numcolors); } for (j=0;jspinlength;j++) { tmpxcolor = st->Colors[st->numcolors-1].pixel; for (i=st->numcolors-1;i>st->mincolindex;i--) st->Colors[i].pixel = st->Colors[i-1].pixel; st->Colors[st->mincolindex].pixel = tmpxcolor; XStoreColors(st->dpy, st->cmap, st->Colors, st->numcolors); } } } #endif static Bool Getkey(struct state *st, XKeyEvent *event) { unsigned char key; int i; if (XLookupString(event, (char *)&key, sizeof(key), (KeySym *)0, (XComposeStatus *) 0) > 0) { if (st->reset_countdown) st->reset_countdown = st->linger; switch (key) { case '<': st->dwell /= 2; if (st->dwell < 1) st->dwell = 1; return True; case '>': st->dwell *= 2; return True; case '[': st->settle /= 2; if (st->settle < 1) st->settle = 1; return True; case ']': st->settle *= 2; return True; case 'd': go_down(st); return True; case 'D': FlushBuffer(st); return True; case 'e': case 'E': FlushBuffer(st); st->dorecalc = (!st->dorecalc); if (st->dorecalc) recalc(st); else { st->maxexp = st->minlyap; st->minexp = -1.0 * st->minlyap; } redraw(st, st->exponents[st->frame], st->expind[st->frame], 1); return True; case 'f': /* case 'F': save_to_file(); return True;*/ case 'i': if (st->stripe_interval > 0) { st->stripe_interval--; if (!mono_p) { init_color(st); } } return True; case 'I': st->stripe_interval++; if (!mono_p) { init_color(st); } return True; case 'K': if (st->minlyap > 0.05) st->minlyap -= 0.05; return True; case 'J': st->minlyap += 0.05; return True; case 'm': st->mapindex++; if (st->mapindex >= NUMMAPS) st->mapindex=0; st->map = Maps[st->mapindex]; st->deriv = Derivs[st->mapindex]; if (!st->aflag) st->min_a = amins[st->mapindex]; if (!st->wflag) st->a_range = aranges[st->mapindex]; if (!st->bflag) st->min_b = bmins[st->mapindex]; if (!st->hflag) st->b_range = branges[st->mapindex]; if (!st->Force) for (i=0;iForcing[i] = st->mapindex; st->max_a = st->min_a + st->a_range; st->max_b = st->min_b + st->b_range; st->a_minimums[0] = st->min_a; st->b_minimums[0] = st->min_b; st->a_maximums[0] = st->max_a; st->b_maximums[0] = st->max_b; st->a_inc = st->a_range / (double)st->width; st->b_inc = st->b_range / (double)st->height; st->point.x = -1; st->point.y = 0; st->a = /*st->rubber_data.p_min = */st->min_a; st->b = /*st->rubber_data.q_min = */st->min_b; /* st->rubber_data.p_max = st->max_a; st->rubber_data.q_max = st->max_b;*/ Clear(st); return True; case 'M': if (st->minlyap > 0.005) st->minlyap -= 0.005; return True; case 'N': st->minlyap += 0.005; return True; case 'p': case 'P': st->negative = (!st->negative); FlushBuffer(st); redraw(st, st->exponents[st->frame], st->expind[st->frame], 1); return True; case 'r': FlushBuffer(st); redraw(st, st->exponents[st->frame], st->expind[st->frame], 1); return True; case 'R': FlushBuffer(st); Redraw(st); return True; case 's': st->spinlength=st->spinlength/2; #if 0 case 'S': if (!mono_p) Spin(st); st->spinlength=st->spinlength*2; return True; #endif case 'u': go_back(st); return True; case 'U': go_init(st); return True; case 'v': case 'V': print_values(st); return True; case 'W': if (st->numwheels < MAXWHEELS) st->numwheels++; else st->numwheels = 0; if (!mono_p) { init_color(st); } return True; case 'w': if (st->numwheels > 0) st->numwheels--; else st->numwheels = MAXWHEELS; if (!mono_p) { init_color(st); } return True; case 'x': Clear(st); return True; case 'X': Destroy_frame(st); return True; case 'z': Cycle_frames(st); redraw(st, st->exponents[st->frame], st->expind[st->frame], 1); return True; #if 0 case 'Z': while (!XPending(st->dpy)) Cycle_frames(st); redraw(st, st->exponents[st->frame], st->expind[st->frame], 1); return True; #endif case 'q': case 'Q': exit(0); return True; case '?': case 'h': case 'H': print_help(st); return True; default: return False; } } return False; } /* Here's where we index into a color map. After the Lyapunov exponent is * calculated, it is used to determine what color to use for that point. I * suppose there are a lot of ways to do this. I used the following : if it's * non-negative then there's a reserved area at the lower range of the color * map that i index into. The ratio of some "minimum exponent value" and the * calculated value is used as a ratio of how high to index into this reserved * range. Usually these colors are dark red (see init_color). If the exponent * is negative, the same ratio (expo/minlyap) is used to index into the * remaining portion of the colormap (which is usually some light shades of * color or a rainbow wheel). The coloring scheme can actually make a great * deal of difference in the quality of the picture. Different colormaps bring * out different details of the dynamics while different indexing algorithms * also greatly effect what details are seen. Play around with this. */ static int sendpoint(struct state *st, double expo) { double tmpexpo; if (st->maxcolor > MAXCOLOR) abort(); #if 0 /* The relationship st->minexp <= expo <= maxexp should always be true. This test enforces that. But maybe not enforcing it makes better pictures. */ if (expo < st->minexp) expo = st->minexp; else if (expo > maxexp) expo = maxexp; #endif st->point.x++; tmpexpo = (st->negative) ? expo : -1.0 * expo; if (tmpexpo > 0) { if (!mono_p) { st->sendpoint_index = (int)(tmpexpo*st->lowrange/st->maxexp); st->sendpoint_index = ((st->sendpoint_index % st->lowrange) + st->startcolor); } else st->sendpoint_index = 0; } else { if (!mono_p) { st->sendpoint_index = (int)(tmpexpo*st->numfreecols/st->minexp); st->sendpoint_index = ((st->sendpoint_index % st->numfreecols) + st->mincolindex); } else st->sendpoint_index = 1; } BufferPoint(st, st->sendpoint_index, st->point.x, st->point.y); if (st->save) { if (st->frame > MAXFRAMES) abort(); st->exponents[st->frame][st->expind[st->frame]++] = expo; } if (st->point.x >= st->width) { st->point.y++; st->point.x = 0; if (st->save) { st->b += st->b_inc; st->a = st->min_a; } if (st->point.y >= st->height) return FALSE; else return TRUE; } return TRUE; } static void resize(struct state *st) { Window r; int n, x, y; unsigned int bw, d, new_w, new_h; XGetGeometry(st->dpy,st->canvas,&r,&x,&y,&new_w,&new_h,&bw,&d); if ((new_w == st->width) && (new_h == st->height)) return; st->width = new_w; st->height = new_h; XClearWindow(st->dpy, st->canvas); #ifdef BACKING_PIXMAP if (st->pixmap) XFreePixmap(st->dpy, st->pixmap); st->pixmap = XCreatePixmap(st->dpy, st->canvas, st->width, st->height, d); #endif st->a_inc = st->a_range / (double)st->width; st->b_inc = st->b_range / (double)st->height; st->point.x = -1; st->point.y = 0; st->run = 1; st->a = /*st->rubber_data.p_min = */st->min_a; st->b = /*st->rubber_data.q_min = */st->min_b; /* st->rubber_data.p_max = st->max_a; st->rubber_data.q_max = st->max_b;*/ freemem(st); setupmem(st); for (n=0;nmaxframe) && (n != st->frame)) st->resized[n] = 1; InitBuffer(st); Clear(st); Redraw(st); } static void redraw(struct state *st, double *exparray, int index, int cont) { int i, x_sav, y_sav; x_sav = st->point.x; y_sav = st->point.y; st->point.x = -1; st->point.y = 0; st->save=0; for (i=0;isave=1; if (cont) { st->point.x = x_sav; st->point.y = y_sav; } else { st->a = st->point.x * st->a_inc + st->min_a; st->b = st->point.y * st->b_inc + st->min_b; } FlushBuffer(st); } static void Redraw(struct state *st) { FlushBuffer(st); st->point.x = -1; st->point.y = 0; st->run = 1; st->a = st->min_a; st->b = st->min_b; st->expind[st->frame] = 0; st->resized[st->frame] = 0; } static void recalc(struct state *st) { int i; st->minexp = st->maxexp = 0.0; for (i=0;iexpind[st->frame];i++) { if (st->exponents[st->frame][i] < st->minexp) st->minexp = st->exponents[st->frame][i]; if (st->exponents[st->frame][i] > st->maxexp) st->maxexp = st->exponents[st->frame][i]; } } static void Clear(struct state *st) { XClearWindow(st->dpy, st->canvas); #ifdef BACKING_PIXMAP XCopyArea(st->dpy, st->canvas, st->pixmap, st->Data_GC[0], 0, 0, st->width, st->height, 0, 0); #endif InitBuffer(st); } static void show_defaults(struct state *st) { printf("Width=%d Height=%d numcolors=%d settle=%d dwell=%d\n", st->width,st->height,st->numcolors,st->settle,st->dwell); printf("min_a=%f a_range=%f max_a=%f\n", st->min_a,st->a_range,st->max_a); printf("min_b=%f b_range=%f max_b=%f\n", st->min_b,st->b_range,st->max_b); printf("minlyap=%f minexp=%f maxexp=%f\n", st->minlyap,st->minexp, st->maxexp); exit(0); } #if 0 static void CreateXorGC(struct state *st) { XGCValues values; values.foreground = st->foreground; values.function = GXxor; st->RubberGC = XCreateGC(st->dpy, st->canvas, GCForeground | GCFunction, &values); } static void StartRubberBand(struct state *st, image_data_t *data, XEvent *event) { XPoint corners[5]; st->nostart = 0; data->rubber_band.last_x = data->rubber_band.start_x = event->xbutton.x; data->rubber_band.last_y = data->rubber_band.start_y = event->xbutton.y; SetupCorners(corners, data); XDrawLines(st->dpy, st->canvas, st->RubberGC, corners, sizeof(corners) / sizeof(corners[0]), CoordModeOrigin); } static void SetupCorners(XPoint *corners, image_data_t *data) { corners[0].x = data->rubber_band.start_x; corners[0].y = data->rubber_band.start_y; corners[1].x = data->rubber_band.start_x; corners[1].y = data->rubber_band.last_y; corners[2].x = data->rubber_band.last_x; corners[2].y = data->rubber_band.last_y; corners[3].x = data->rubber_band.last_x; corners[3].y = data->rubber_band.start_y; corners[4] = corners[0]; } static void TrackRubberBand(struct state *st, image_data_t *data, XEvent *event) { XPoint corners[5]; int xdiff, ydiff; if (st->nostart) return; SetupCorners(corners, data); XDrawLines(st->dpy, st->canvas, st->RubberGC, corners, sizeof(corners) / sizeof(corners[0]), CoordModeOrigin); ydiff = event->xbutton.y - data->rubber_band.start_y; xdiff = event->xbutton.x - data->rubber_band.start_x; data->rubber_band.last_x = data->rubber_band.start_x + xdiff; data->rubber_band.last_y = data->rubber_band.start_y + ydiff; if (data->rubber_band.last_y < data->rubber_band.start_y || data->rubber_band.last_x < data->rubber_band.start_x) { data->rubber_band.last_y = data->rubber_band.start_y; data->rubber_band.last_x = data->rubber_band.start_x; } SetupCorners(corners, data); XDrawLines(st->dpy, st->canvas, st->RubberGC, corners, sizeof(corners) / sizeof(corners[0]), CoordModeOrigin); } static void EndRubberBand(struct state *st, image_data_t *data, XEvent *event) { XPoint corners[5]; XPoint top, bot; double delta, diff; st->nostart = 1; SetupCorners(corners, data); XDrawLines(st->dpy, st->canvas, st->RubberGC, corners, sizeof(corners) / sizeof(corners[0]), CoordModeOrigin); if (data->rubber_band.start_x >= data->rubber_band.last_x || data->rubber_band.start_y >= data->rubber_band.last_y) return; top.x = data->rubber_band.start_x; bot.x = data->rubber_band.last_x; top.y = data->rubber_band.start_y; bot.y = data->rubber_band.last_y; diff = data->q_max - data->q_min; delta = (double)top.y / (double)st->height; data->q_min += diff * delta; delta = (double)(st->height - bot.y) / (double)st->height; data->q_max -= diff * delta; diff = data->p_max - data->p_min; delta = (double)top.x / (double)st->width; data->p_min += diff * delta; delta = (double)(st->width - bot.x) / (double)st->width; data->p_max -= diff * delta; set_new_params(st, data); } static void set_new_params(struct state *st, image_data_t *data) { st->frame = (st->maxframe + 1) % MAXFRAMES; if (st->frame > st->maxframe) st->maxframe = st->frame; st->a_range = data->p_max - data->p_min; st->b_range = data->q_max - data->q_min; st->a_minimums[st->frame] = st->min_a = data->p_min; st->b_minimums[st->frame] = st->min_b = data->q_min; st->a_inc = st->a_range / (double)st->width; st->b_inc = st->b_range / (double)st->height; st->point.x = -1; st->point.y = 0; st->run = 1; st->a = st->min_a; st->b = st->min_b; st->a_maximums[st->frame] = st->max_a = data->p_max; st->b_maximums[st->frame] = st->max_b = data->q_max; st->expind[st->frame] = 0; Clear(st); } #endif static void go_down(struct state *st) { st->frame++; if (st->frame > st->maxframe) st->frame = 0; jumpwin(st); } static void go_back(struct state *st) { st->frame--; if (st->frame < 0) st->frame = st->maxframe; jumpwin(st); } static void jumpwin(struct state *st) { /*st->rubber_data.p_min =*/ st->min_a = st->a_minimums[st->frame]; /*st->rubber_data.q_min =*/ st->min_b = st->b_minimums[st->frame]; /*st->rubber_data.p_max =*/ st->max_a = st->a_maximums[st->frame]; /*st->rubber_data.q_max =*/ st->max_b = st->b_maximums[st->frame]; st->a_range = st->max_a - st->min_a; st->b_range = st->max_b - st->min_b; st->a_inc = st->a_range / (double)st->width; st->b_inc = st->b_range / (double)st->height; st->point.x = -1; st->point.y = 0; st->a = st->min_a; st->b = st->min_b; Clear(st); if (st->resized[st->frame]) Redraw(st); else redraw(st, st->exponents[st->frame], st->expind[st->frame], 0); } static void go_init(struct state *st) { st->frame = 0; jumpwin(st); } static void Destroy_frame(struct state *st) { int i; for (i=st->frame; imaxframe; i++) { st->exponents[st->frame] = st->exponents[st->frame+1]; st->expind[st->frame] = st->expind[st->frame+1]; st->a_minimums[st->frame] = st->a_minimums[st->frame+1]; st->b_minimums[st->frame] = st->b_minimums[st->frame+1]; st->a_maximums[st->frame] = st->a_maximums[st->frame+1]; st->b_maximums[st->frame] = st->b_maximums[st->frame+1]; } st->maxframe--; go_back(st); } static void InitBuffer(struct state *st) { int i; for (i = 0 ; i < st->maxcolor; ++i) st->Points.npoints[i] = 0; } static void BufferPoint(struct state *st, int color, int x, int y) { if (st->maxcolor > MAXCOLOR) abort(); /* Guard against bogus color values. Shouldn't be necessary but paranoia is good. */ if (color < 0) color = 0; else if (color >= st->maxcolor) color = st->maxcolor - 1; if (st->Points.npoints[color] == MAXPOINTS) { XDrawPoints(st->dpy, st->canvas, st->Data_GC[color], st->Points.data[color], st->Points.npoints[color], CoordModeOrigin); #ifdef BACKING_PIXMAP XDrawPoints(st->dpy, st->pixmap, st->Data_GC[color], st->Points.data[color], st->Points.npoints[color], CoordModeOrigin); #endif st->Points.npoints[color] = 0; } st->Points.data[color][st->Points.npoints[color]].x = x; st->Points.data[color][st->Points.npoints[color]].y = y; ++st->Points.npoints[color]; } static void FlushBuffer(struct state *st) { int color; for (color = 0; color < st->maxcolor; ++color) if (st->Points.npoints[color]) { XDrawPoints(st->dpy, st->canvas, st->Data_GC[color], st->Points.data[color], st->Points.npoints[color], CoordModeOrigin); #ifdef BACKING_PIXMAP XDrawPoints(st->dpy, st->pixmap, st->Data_GC[color], st->Points.data[color], st->Points.npoints[color], CoordModeOrigin); #endif st->Points.npoints[color] = 0; } } static void print_help(struct state *st) { printf("During run-time, interactive control can be exerted via : \n"); printf("Mouse buttons allow rubber-banding of a zoom box\n"); printf("< halves the 'dwell', > doubles the 'dwell'\n"); printf("[ halves the 'settle', ] doubles the 'settle'\n"); printf("D flushes the drawing buffer\n"); printf("e or E recalculates color indices\n"); printf("f or F saves exponents to a file\n"); printf("h or H or ? displays this message\n"); printf("i decrements, I increments the stripe interval\n"); printf("KJMN increase/decrease minimum negative exponent\n"); printf("m increments the map index, changing maps\n"); printf("p or P reverses the colormap for negative/positive exponents\n"); printf("r redraws without recalculating\n"); printf("R redraws, recalculating with new dwell and settle values\n"); printf("s or S spins the colorwheel\n"); printf("u pops back up to the last zoom\n"); printf("U pops back up to the first picture\n"); printf("v or V displays the values of various settings\n"); printf("w decrements, W increments the color wheel index\n"); printf("x or X clears the window\n"); printf("q or Q exits\n"); } static void print_values(struct state *st) { int i; printf("\nminlyap=%f minexp=%f maxexp=%f\n", st->minlyap,st->minexp, st->maxexp); printf("width=%d height=%d\n",st->width,st->height); printf("settle=%d dwell=%d st->start_x=%f\n", st->settle,st->dwell, st->start_x); printf("min_a=%f a_rng=%f max_a=%f\n", st->min_a,st->a_range,st->max_a); printf("min_b=%f b_rng=%f max_b=%f\n", st->min_b,st->b_range,st->max_b); if (st->Rflag) printf("pseudo-random forcing\n"); else if (st->force) { printf("periodic forcing="); for (i=0;imaxindex;i++) printf("%d",st->forcing[i]); printf("\n"); } else printf("periodic forcing=01\n"); if (st->Force) { printf("function forcing="); for (i=0;ifuncmaxindex;i++) { printf("%d",st->Forcing[i]); } printf("\n"); } printf("numcolors=%d\n",st->numcolors-1); } static void freemem(struct state *st) { int i; for (i=0;iexponents[i]); } static void setupmem(struct state *st) { int i; for (i=0;iexponents[i]= (double *)malloc(sizeof(double)*st->width*(st->height+1)))==NULL){ fprintf(stderr,"Error malloc'ing exponent array.\n"); exit(-1); } } } static void setforcing(struct state *st) { int i; for (i=0;iforcing[i] = (random() > st->prob) ? 0 : 1; } /****************************************************************************/ static void do_defaults (struct state *st) { int i; memset (st->expind, 0, sizeof(st->expind)); memset (st->resized, 0, sizeof(st->resized)); st->aflag = 0; st->bflag = 0; st->hflag = 0; st->wflag = 0; st->minexp = 0; st->mapindex = 0; # ifdef SIXTEEN_COLORS st->maxcolor=16; st->startcolor=0; st->color_offset=0; st->mincolindex=1; st->dwell=50; st->settle=25; st->xposition=128; st->yposition=128; # else /* !SIXTEEN_COLORS */ st->maxcolor=256; st->startcolor=17; st->color_offset=96; st->mincolindex=33; st->dwell=100; st->settle=50; # endif /* !SIXTEEN_COLORS */ st->maxindex = MAXINDEX; st->funcmaxindex = FUNCMAXINDEX; st->min_a=2.0; st->min_b=2.0; st->a_range=2.0; st->b_range=2.0; st->minlyap=1.0; st->max_a=4.0; st->max_b=4.0; st->numcolors=16; st->prob=0.5; st->numwheels=MAXWHEELS; st->negative=1; st->rgb_max=65000; st->nostart=1; st->stripe_interval=7; st->save=1; st->useprod=1; st->spinlength=256; st->run=1; for (i = 0; i < countof(st->forcing); i++) st->forcing[i] = (i & 1) ? 1 : 0; } static void do_preset (struct state *st, int builtin) { char *ff = 0; switch (builtin) { case 0: st->min_a = 3.75; st->aflag++; st->min_b = 3.299999; st->bflag++; st->a_range = 0.05; st->wflag++; st->b_range = 0.05; st->hflag++; st->dwell = 200; st->settle = 100; ff = "abaabbaaabbb"; break; case 1: st->min_a = 3.8; st->aflag++; st->min_b = 3.2; st->bflag++; st->b_range = .05; st->hflag++; st->a_range = .05; st->wflag++; ff = "bbbbbaaaaa"; break; case 2: st->min_a = 3.4; st->aflag++; st->min_b = 3.04; st->bflag++; st->a_range = .5; st->wflag++; st->b_range = .5; st->hflag++; ff = "abbbbbbbbb"; st->settle = 500; st->dwell = 1000; break; case 3: st->min_a = 3.5; st->aflag++; st->min_b = 3.0; st->bflag++; st->a_range = 0.2; st->wflag++; st->b_range = 0.2; st->hflag++; st->dwell = 600; st->settle = 300; ff = "aaabbbab"; break; case 4: st->min_a = 3.55667; st->aflag++; st->min_b = 3.2; st->bflag++; st->b_range = .05; st->hflag++; st->a_range = .05; st->wflag++; ff = "bbbbbaaaaa"; break; case 5: st->min_a = 3.79; st->aflag++; st->min_b = 3.22; st->bflag++; st->b_range = .02999; st->hflag++; st->a_range = .02999; st->wflag++; ff = "bbbbbaaaaa"; break; case 6: st->min_a = 3.7999; st->aflag++; st->min_b = 3.299999; st->bflag++; st->a_range = 0.2; st->wflag++; st->b_range = 0.2; st->hflag++; st->dwell = 300; st->settle = 150; ff = "abaabbaaabbb"; break; case 7: st->min_a = 3.89; st->aflag++; st->min_b = 3.22; st->bflag++; st->b_range = .028; st->hflag++; st->a_range = .02999; st->wflag++; ff = "bbbbbaaaaa"; st->settle = 600; st->dwell = 1000; break; case 8: st->min_a = 3.2; st->aflag++; st->min_b = 3.7; st->bflag++; st->a_range = 0.05; st->wflag++; st->b_range = .005; st->hflag++; ff = "abbbbaa"; break; case 9: ff = "aaaaaabbbbbb"; st->mapindex = 1; st->dwell = 400; st->settle = 200; st->minlyap = st->maxexp = ABS(-0.85); st->minexp = -1.0 * st->minlyap; break; case 10: ff = "aaaaaabbbbbb"; st->mapindex = 1; st->dwell = 400; st->settle = 200; st->minlyap = st->maxexp = ABS(-0.85); st->minexp = -1.0 * st->minlyap; break; case 11: st->mapindex = 1; st->dwell = 400; st->settle = 200; st->minlyap = st->maxexp = ABS(-0.85); st->minexp = -1.0 * st->minlyap; break; case 12: ff = "abbb"; st->mapindex = 1; st->dwell = 400; st->settle = 200; st->minlyap = st->maxexp = ABS(-0.85); st->minexp = -1.0 * st->minlyap; break; case 13: ff = "abbabaab"; st->mapindex = 1; st->dwell = 400; st->settle = 200; st->minlyap = st->maxexp = ABS(-0.85); st->minexp = -1.0 * st->minlyap; break; case 14: ff = "abbabaab"; st->dwell = 800; st->settle = 200; st->minlyap = st->maxexp = ABS(-0.85); st->minexp = -1.0 * st->minlyap; /* #### -x 0.05 */ st->min_a = 3.91; st->aflag++; st->a_range = 0.0899999999; st->wflag++; st->min_b = 3.28; st->bflag++; st->b_range = 0.35; st->hflag++; break; case 15: ff = "aaaaaabbbbbb"; st->dwell = 400; st->settle = 200; st->minlyap = st->maxexp = ABS(-0.85); st->minexp = -1.0 * st->minlyap; break; case 16: st->dwell = 400; st->settle = 200; st->minlyap = st->maxexp = ABS(-0.85); st->minexp = -1.0 * st->minlyap; break; case 17: ff = "abbb"; st->dwell = 400; st->settle = 200; st->minlyap = st->maxexp = ABS(-0.85); st->minexp = -1.0 * st->minlyap; break; case 18: ff = "abbabaab"; st->dwell = 400; st->settle = 200; st->minlyap = st->maxexp = ABS(-0.85); st->minexp = -1.0 * st->minlyap; break; case 19: st->mapindex = 2; ff = "aaaaaabbbbbb"; st->dwell = 400; st->settle = 200; st->minlyap = st->maxexp = ABS(-0.85); st->minexp = -1.0 * st->minlyap; break; case 20: st->mapindex = 2; st->dwell = 400; st->settle = 200; st->minlyap = st->maxexp = ABS(-0.85); st->minexp = -1.0 * st->minlyap; break; case 21: st->mapindex = 2; ff = "abbb"; st->dwell = 400; st->settle = 200; st->minlyap = st->maxexp = ABS(-0.85); st->minexp = -1.0 * st->minlyap; break; case 22: st->mapindex = 2; ff = "abbabaab"; st->dwell = 400; st->settle = 200; st->minlyap = st->maxexp = ABS(-0.85); st->minexp = -1.0 * st->minlyap; break; default: abort(); break; } if (ff) { char *ch; int bindex = 0; st->maxindex = strlen(ff); if (st->maxindex > MAXINDEX) usage(st); ch = ff; st->force++; while (bindex < st->maxindex) { if (*ch == 'a') st->forcing[bindex++] = 0; else if (*ch == 'b') st->forcing[bindex++] = 1; else usage(st); ch++; } } } static void * xlyap_init (Display *d, Window window) { struct state *st = (struct state *) calloc (1, sizeof(*st)); XWindowAttributes xgwa; int builtin = -1; XGetWindowAttributes (d, window, &xgwa); st->dpy = d; st->width = xgwa.width; st->height = xgwa.height; st->visual = xgwa.visual; st->screen = xgwa.screen; st->cmap = xgwa.colormap; do_defaults(st); parseargs(st); if (get_boolean_resource(st->dpy, "randomize", "Boolean")) builtin = random() % NBUILTINS; else { char *s = get_string_resource(st->dpy, "builtin", "Integer"); if (s && *s) builtin = atoi(s); if (s) free (s); } if (builtin >= 0) do_preset (st, builtin); st->background = BlackPixelOfScreen(st->screen); setupmem(st); init_data(st); if (!mono_p) st->foreground = st->startcolor; else st->foreground = WhitePixelOfScreen(st->screen); /* * Create the window to display the Lyapunov exponents */ st->canvas = window; init_color(st); #ifdef BACKING_PIXMAP st->pixmap = XCreatePixmap(st->dpy, window, st->width, st->height, xgwa.depth); #endif /* st->rubber_data.band_cursor = XCreateFontCursor(st->dpy, XC_hand2);*/ /* CreateXorGC(st);*/ Clear(st); st->delay = get_integer_resource(st->dpy, "delay", "Delay"); st->linger = get_integer_resource(st->dpy, "linger", "Linger"); if (st->linger < 1) st->linger = 1; return st; } static unsigned long xlyap_draw (Display *dpy, Window window, void *closure) { struct state *st = (struct state *) closure; int i; if (!st->run && st->reset_countdown) { st->reset_countdown--; if (st->reset_countdown) return 1000000; else { do_defaults (st); do_preset (st, (random() % NBUILTINS)); Clear (st); init_data(st); init_color(st); resize (st); st->frame = 0; st->run = 1; } } for (i = 0; i < 1000; i++) if (complyap(st) == TRUE) { st->run = 0; st->reset_countdown = st->linger; break; } return st->delay; } static void xlyap_reshape (Display *dpy, Window window, void *closure, unsigned int w, unsigned int h) { struct state *st = (struct state *) closure; resize(st); } static Bool xlyap_event (Display *dpy, Window window, void *closure, XEvent *event) { struct state *st = (struct state *) closure; switch(event->type) { case KeyPress: if (Getkey(st, &event->xkey)) return True; break; #if 0 case ButtonPress: StartRubberBand(st, &st->rubber_data, event); return True; case MotionNotify: TrackRubberBand(st, &st->rubber_data, event); return True; case ButtonRelease: EndRubberBand(st, &st->rubber_data, event); return True; #endif default: break; } if (screenhack_event_helper (dpy, window, event)) { Clear(st); return True; } return False; } static void xlyap_free (Display *dpy, Window window, void *closure) { int i; struct state *st = (struct state *) closure; freemem (st); #ifdef BACKING_PIXMAP XFreePixmap (st->dpy, st->pixmap); #endif /* XFreeGC (st->dpy, st->RubberGC);*/ for (i = 0; i < st->maxcolor; i++) XFreeGC (st->dpy, st->Data_GC[i]); free (st); } XSCREENSAVER_MODULE ("XLyap", xlyap) xscreensaver-5.36/hacks/xscreensaver-sgigl.c000644 000767 000024 00000015112 12701612217 021205 0ustar00jwzstaff000000 000000 /* xscreensaver, Copyright (c) 1997, 2005 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 is a kludge that lets xscreensaver work with SGI demos that expect to be run from `haven'. It runs the program given on the command line, then waits for an X window to be created whose name is that of the program. Then, it resizes that window to fill the screen. Run it like this: xscreensaver-sgigl /usr/demos/bin/ep -S xscreensaver-sgigl -n ant /usr/demos/General_Demos/ant/RUN xscreensaver-sgigl -n atlantis /usr/demos/General_Demos/atlantis/RUN xscreensaver-sgigl -n /usr/demos/General_Demos/powerflip/powerflip \ /usr/demos/General_Demos/powerflip/RUN Except that doesn't really work. You have to do this instead: xscreensaver-sgigl -n ant ant.sh where ant.sh contains #!/bin/sh cd /usr/demos/General_Demos/ant exec ./ant -S There's no way to make this work with powerflip at all, since it doesn't take a -S option to run in the foreground. */ /* #### Another way to do this would be: instead of exec'ing the hack, fork it; then wait for that fork to die. If it dies, but the window ID is still valid, then that means the sub-process has forked itself (as those fuckwits at SGI are wont to do.) In that case, this process should go to sleep, and set up a signal handler that will destroy the X window when it is killed. That way, the caller is given a foreground pid which, when killed, will cause the hack to die (by a roundabout mechanism.) This would all be so much simpler if those assholes would just: 1: get out of the habit of writing programs that magically background themselves, and 2: give the fucking programs arguments which control the window size instead of always making 100x100 windows! I won't even dream of having a "-root" option that understood virtual-roots; that would just be too outlandish to even dream about. */ static char *progname; #include #include #include #include #include #include #include #include #include "vroot.h" #undef RootWindowOfScreen #undef RootWindow #undef DefaultRootWindow static int BadWindow_ehandler (Display *dpy, XErrorEvent *error) { if (error->error_code == BadWindow || error->error_code == BadMatch || error->error_code == BadDrawable) return 0; else { fprintf (stderr, "\nX error in %s:\n", progname); if (XmuPrintDefaultErrorMessage (dpy, error, stderr)) exit(1); else fprintf (stderr, " (nonfatal.)\n"); } return 0; } void main(int ac, char **av) { char buf [512]; pid_t parent, forked; Display *dpy; Screen *screen; char *s; char *n1 = 0; char *n2 = 0; Bool verbose = False; Window root, vroot; XSizeHints h; long ls; progname = av[0]; s = strrchr(progname, '/'); if (s) progname = s+1; if (ac < 1) { fprintf(stderr, "usage: %s [ -v ] [ -n window-name ] program arguments...\n", progname); exit(1); } if (ac > 2 && !strcmp(av[1], "-v")) { verbose = True; av++; ac--; } if (ac > 2 && !strcmp(av[1], "-n")) { n2 = av[2]; av += 2; ac -= 2; } n1 = strrchr(av[1], '/'); if (n1) n1++; else n1 = av[1]; dpy = XOpenDisplay(0); if (!dpy) { fprintf(stderr, "%s: couldn't open display\n", progname); exit(1); } screen = DefaultScreenOfDisplay(dpy); root = XRootWindowOfScreen (screen); vroot = VirtualRootWindowOfScreen (screen); XSelectInput (dpy, root, SubstructureNotifyMask); if (root != vroot) XSelectInput (dpy, vroot, SubstructureNotifyMask); XSetErrorHandler (BadWindow_ehandler); if (verbose) fprintf(stderr, "%s: selected SubstructureNotifyMask on 0x%x / 0x%x\n", progname, root, vroot); parent = getpid(); if (verbose) fprintf(stderr, "%s: pid is %d\n", progname, parent); switch ((int) (forked = fork ())) { case -1: { sprintf (buf, "%s: couldn't fork", progname); perror (buf); exit (1); break; } case 0: /* forked */ { time_t start = time((time_t) 0); XEvent event; if (verbose) fprintf(stderr, "%s: forked pid is %d\n", progname, getpid()); while (1) { XNextEvent(dpy, &event); if (event.xany.type == CreateNotify) { char *name = 0; Window w = event.xcreatewindow.window; XSync(dpy, False); XFetchName(dpy, w, &name); if (!name) { /* Try again to see if the name has been set later... */ XSync(dpy, False); sleep(1); XFetchName(dpy, w, &name); } if (name && ((n1 && !strcmp(name, n1)) || (n2 && !strcmp(name, n2)))) { if (verbose) fprintf(stderr, "%s: resizing 0x%x\n", progname, w); /* Make sure the window allows itself to be resized. */ XGetWMNormalHints (dpy, w, &h, &ls); h.flags |= PMaxSize; h.max_width = WidthOfScreen(screen)+128; h.max_height = HeightOfScreen(screen)+128; XSetWMNormalHints (dpy, w, &h); XMoveResizeWindow(dpy, w, 0, 0, WidthOfScreen(screen), HeightOfScreen(screen)); #if 0 if (vroot && vroot != root && event.xcreatewindow.parent == root) { if (verbose) fprintf(stderr, "%s: reparenting 0x%x from 0x%x to 0x%x\n", progname, w, root, vroot); XReparentWindow(dpy, w, vroot, 0, 0); } #endif XSync(dpy, False); fflush(stdout); fflush(stderr); exit(0); /* Note that this only exits a child fork. */ } } if (start + 5 < time((time_t) 0)) { fprintf(stderr, "%s: timed out: no window named \"%s\" has been created\n", progname, (n2 ? n2 : n1)); fflush(stdout); fflush(stderr); kill(parent, SIGTERM); exit(1); } } break; } default: /* foreground */ { close (ConnectionNumber (dpy)); /* close display fd */ execvp (av[1], av+1); /* shouldn't return. */ sprintf (buf, "%s: execvp(\"%s\") failed", progname, av[1]); perror (buf); fflush(stderr); fflush(stdout); exit (1); break; } } } xscreensaver-5.36/hacks/cynosure.c000664 000767 000024 00000031352 12717746075 017270 0ustar00jwzstaff000000 000000 /* cynosure --- draw some rectangles * * 01-aug-96: written in Java by ozymandias G desiderata * 25-dec-97: ported to C and XScreenSaver by Jamie Zawinski * * Original version: * http://www.organic.com/staff/ogd/java/cynosure.html * http://www.organic.com/staff/ogd/java/source/cynosure/Cynosure-java.txt * * Original comments and copyright: * * Cynosure.java * A Java implementation of Stephen Linhart's Cynosure screen-saver as a * drop-in class. * * Header: /home/ogd/lib/cvs/aoaioxxysz/graphics/Cynosure.java,v 1.2 1996/08/02 02:41:21 ogd Exp * * ozymandias G desiderata * Thu Aug 1 1996 * * COPYRIGHT NOTICE * * Copyright 1996 ozymandias G desiderata. Title, ownership rights, and * intellectual property rights in and to this software remain with * ozymandias G desiderata. This software may be copied, modified, * or used as long as this copyright is retained. Use this code at your * own risk. * * Revision: 1.2 * * Log: Cynosure.java,v * Revision 1.2 1996/08/02 02:41:21 ogd * Added a few more comments, fixed messed-up header. * * Revision 1.1.1.1 1996/08/02 02:30:45 ogd * First version */ #include "screenhack.h" /* #define DO_STIPPLE */ struct state { Display *dpy; Window window; XColor *colors; int ncolors; #ifndef DO_STIPPLE XColor *colors2; int ncolors2; #endif int fg_pixel, bg_pixel; GC fg_gc, bg_gc, shadow_gc; int curColor; int curBase; /* color progression */ int shadowWidth; int elevation; /* offset of dropshadow */ int sway; /* time until base color changed */ int timeLeft; /* until base color used */ int tweak; /* amount of color variance */ int gridSize; int iterations, i, delay; XWindowAttributes xgwa; }; /** * The smallest size for an individual cell. **/ #define MINCELLSIZE 16 /** * The narrowest a rectangle can be. **/ #define MINRECTSIZE 6 /** * Every so often genNewColor() generates a completely random * color. This variable sets how frequently that happens. It's * currently set to happen 1% of the time. * * @see #genNewColor **/ #define THRESHOLD 100 /*0.01*/ static void paint(struct state *st); static int genNewColor(struct state *st); static int genConstrainedColor(struct state *st, int base, int tweak); static int c_tweak(struct state *st, int base, int tweak); static void * cynosure_init (Display *d, Window w) { struct state *st = (struct state *) calloc (1, sizeof(*st)); XGCValues gcv; st->dpy = d; st->window = w; st->curColor = 0; st->curBase = st->curColor; st->shadowWidth = get_integer_resource (st->dpy, "shadowWidth", "Integer"); st->elevation = get_integer_resource (st->dpy, "elevation", "Integer"); st->sway = get_integer_resource (st->dpy, "sway", "Integer"); st->tweak = get_integer_resource (st->dpy, "tweak", "Integer"); st->gridSize = get_integer_resource (st->dpy, "gridSize", "Integer"); st->timeLeft = 0; XGetWindowAttributes (st->dpy, st->window, &st->xgwa); st->ncolors = get_integer_resource (st->dpy, "colors", "Colors"); if (st->ncolors < 2) st->ncolors = 2; if (st->ncolors <= 2) mono_p = True; if (mono_p) st->colors = 0; else st->colors = (XColor *) malloc(sizeof(*st->colors) * (st->ncolors+1)); if (mono_p) ; else { make_smooth_colormap (st->xgwa.screen, st->xgwa.visual, st->xgwa.colormap, st->colors, &st->ncolors, True, 0, True); if (st->ncolors <= 2) { mono_p = True; st->ncolors = 2; if (st->colors) free(st->colors); st->colors = 0; } } st->bg_pixel = get_pixel_resource(st->dpy, st->xgwa.colormap, "background", "Background"); st->fg_pixel = get_pixel_resource(st->dpy, st->xgwa.colormap, "foreground", "Foreground"); gcv.foreground = st->fg_pixel; st->fg_gc = XCreateGC(st->dpy, st->window, GCForeground, &gcv); gcv.foreground = st->bg_pixel; st->bg_gc = XCreateGC(st->dpy, st->window, GCForeground, &gcv); #ifdef DO_STIPPLE gcv.fill_style = FillStippled; gcv.stipple = XCreateBitmapFromData(st->dpy, st->window, "\125\252", 8, 2); st->shadow_gc = XCreateGC(st->dpy, st->window, GCForeground|GCFillStyle|GCStipple, &gcv); XFreePixmap(st->dpy, gcv.stipple); #else /* !DO_STIPPLE */ st->shadow_gc = XCreateGC(st->dpy, st->window, GCForeground, &gcv); # ifdef HAVE_JWXYZ /* allow non-opaque alpha components in pixel values */ jwxyz_XSetAlphaAllowed (st->dpy, st->shadow_gc, True); # endif if (st->colors) { int i; st->ncolors2 = st->ncolors; st->colors2 = (XColor *) malloc(sizeof(*st->colors2) * (st->ncolors2+1)); for (i = 0; i < st->ncolors2; i++) { # ifdef HAVE_JWXYZ /* give a non-opaque alpha to the shadow colors */ unsigned long pixel = st->colors[i].pixel; unsigned long amask = BlackPixelOfScreen (st->xgwa.screen); unsigned long a = (0x77777777 & amask); pixel = (pixel & (~amask)) | a; st->colors2[i].pixel = pixel; # else /* !HAVE_JWXYZ */ int h; double s, v; rgb_to_hsv (st->colors[i].red, st->colors[i].green, st->colors[i].blue, &h, &s, &v); v *= 0.4; hsv_to_rgb (h, s, v, &st->colors2[i].red, &st->colors2[i].green, &st->colors2[i].blue); st->colors2[i].pixel = st->colors[i].pixel; XAllocColor (st->dpy, st->xgwa.colormap, &st->colors2[i]); # endif /* !HAVE_JWXYZ */ } } # endif /* !DO_STIPPLE */ st->delay = get_integer_resource (st->dpy, "delay", "Delay"); st->iterations = get_integer_resource (st->dpy, "iterations", "Iterations"); return st; } static unsigned long cynosure_draw (Display *dpy, Window window, void *closure) { struct state *st = (struct state *) closure; if (st->iterations > 0 && ++st->i >= st->iterations) { st->i = 0; if (!mono_p) XSetWindowBackground(st->dpy, st->window, st->colors[random() % st->ncolors].pixel); XClearWindow(st->dpy, st->window); } paint(st); return st->delay; } /** * paint adds a new layer of multicolored rectangles within a grid of * randomly generated size. Each row of rectangles is the same color, * but colors vary slightly from row to row. Each rectangle is placed * within a regularly-sized cell, but each rectangle is sized and * placed randomly within that cell. * * @param g the Graphics coordinate in which to draw * @see #genNewColor **/ static void paint(struct state *st) { int i; int cellsWide, cellsHigh, cellWidth, cellHeight; int width = st->xgwa.width; int height = st->xgwa.height; /* How many cells wide the grid is (equal to gridSize +/- (gridSize / 2)) */ cellsWide = c_tweak(st, st->gridSize, st->gridSize / 2); /* How many cells high the grid is (equal to gridSize +/- (gridSize / 2)) */ cellsHigh = c_tweak(st, st->gridSize, st->gridSize / 2); /* How wide each cell in the grid is */ cellWidth = width / cellsWide; /* How tall each cell in the grid is */ cellHeight = height / cellsHigh; /* Ensure that each cell is above a certain minimum size */ if (cellWidth < MINCELLSIZE) { cellWidth = MINCELLSIZE; cellsWide = width / cellWidth; } if (cellHeight < MINCELLSIZE) { cellHeight = MINCELLSIZE; cellsHigh = width / cellWidth; } /* fill the grid with randomly-generated cells */ for(i = 0; i < cellsHigh; i++) { int j; /* Each row is a different color, randomly generated (but constrained) */ if (!mono_p) { int c = genNewColor(st); XSetForeground(st->dpy, st->fg_gc, st->colors[c].pixel); # ifndef DO_STIPPLE if (st->colors2) XSetForeground(st->dpy, st->shadow_gc, st->colors2[c].pixel); # endif } for(j = 0; j < cellsWide; j++) { int curWidth, curHeight, curX, curY; /* Generate a random height for a rectangle and make sure that */ /* it's above a certain minimum size */ curHeight = random() % (cellHeight - st->shadowWidth); if (curHeight < MINRECTSIZE) curHeight = MINRECTSIZE; /* Generate a random width for a rectangle and make sure that it's above a certain minimum size */ curWidth = random() % (cellWidth - st->shadowWidth); if (curWidth < MINRECTSIZE) curWidth = MINRECTSIZE; /* Figure out a random place to locate the rectangle within the cell */ curY = (i * cellHeight) + (random() % ((cellHeight - curHeight) - st->shadowWidth)); curX = (j * cellWidth) + (random() % ((cellWidth - curWidth) - st->shadowWidth)); /* Draw the shadow */ if (st->elevation > 0) XFillRectangle(st->dpy, st->window, st->shadow_gc, curX + st->elevation, curY + st->elevation, curWidth, curHeight); /* Draw the edge */ if (st->shadowWidth > 0) XFillRectangle(st->dpy, st->window, st->bg_gc, curX + st->shadowWidth, curY + st->shadowWidth, curWidth, curHeight); XFillRectangle(st->dpy, st->window, st->fg_gc, curX, curY, curWidth, curHeight); /* Draw a 1-pixel black border around the rectangle */ XDrawRectangle(st->dpy, st->window, st->bg_gc, curX, curY, curWidth, curHeight); } } } /** * genNewColor returns a new color, gradually mutating the colors and * occasionally returning a totally random color, just for variety. * * @return the new color **/ static int genNewColor(struct state *st) { /* These lines handle "sway", or the gradual random changing of */ /* colors. After genNewColor() has been called a given number of */ /* times (specified by a random permutation of the tweak variable), */ /* take whatever color has been most recently randomly generated and */ /* make it the new base color. */ if (st->timeLeft == 0) { st->timeLeft = c_tweak(st, st->sway, st->sway / 3); st->curColor = st->curBase; } else { st->timeLeft--; } /* If a randomly generated number is less than the threshold value, produce a "sport" color value that is completely unrelated to the current palette. */ if (0 == (random() % THRESHOLD)) { return (random() % st->ncolors); } else { st->curBase = genConstrainedColor(st, st->curColor, st->tweak); return st->curBase; } } /** * genConstrainedColor creates a random new color within a certain * range of an existing color. Right now this works with RGB color * values, but a future version of the program will most likely use HSV * colors, which should generate a more pleasing progression of values. * * @param base the color on which the new color will be based * @param tweak the amount that the new color can be tweaked * @return a new constrained color * @see #genNewColor **/ static int genConstrainedColor(struct state *st, int base, int tweak) { int i = 1 + (random() % st->tweak); if (random() & 1) i = -i; i = (base + i) % st->ncolors; while (i < 0) i += st->ncolors; return i; } /** * Utility function to generate a tweaked color value * * @param base the byte value on which the color is based * @param tweak the amount the value will be skewed * @see #tweak * @return the tweaked byte **/ static int c_tweak(struct state *st, int base, int tweak) { int ranTweak = (random() % (2 * tweak)); int n = (base + (ranTweak - tweak)); if (n < 0) n = -n; return (n < 255 ? n : 255); } static void cynosure_reshape (Display *dpy, Window window, void *closure, unsigned int w, unsigned int h) { struct state *st = (struct state *) closure; st->xgwa.width = w; st->xgwa.height = h; } static Bool cynosure_event (Display *dpy, Window window, void *closure, XEvent *event) { struct state *st = (struct state *) closure; if (screenhack_event_helper (dpy, window, event)) { st->i = st->iterations; return True; } return False; } static void cynosure_free (Display *dpy, Window window, void *closure) { struct state *st = (struct state *) closure; free (st); } static const char *cynosure_defaults [] = { ".background: black", ".foreground: white", "*fpsSolid: true", "*delay: 500000", "*colors: 128", "*iterations: 100", "*shadowWidth: 2", "*elevation: 5", "*sway: 30", "*tweak: 20", "*gridSize: 12", #ifdef HAVE_MOBILE "*ignoreRotation: True", #endif 0 }; static XrmOptionDescRec cynosure_options [] = { { "-delay", ".delay", XrmoptionSepArg, 0 }, { "-ncolors", ".colors", XrmoptionSepArg, 0 }, { "-iterations", ".iterations", XrmoptionSepArg, 0 }, { 0, 0, 0, 0 } }; XSCREENSAVER_MODULE ("Cynosure", cynosure) xscreensaver-5.36/hacks/moire2.c000644 000767 000024 00000023411 12710314343 016567 0ustar00jwzstaff000000 000000 /* xscreensaver, Copyright (c) 1997-2013 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. */ #include "screenhack.h" #ifdef HAVE_DOUBLE_BUFFER_EXTENSION # include "xdbe.h" #endif /* HAVE_DOUBLE_BUFFER_EXTENSION */ struct state { Display *dpy; Window window; int ncolors; XColor *colors; int fg_pixel, bg_pixel; Pixmap p0, p1, p2, p3; GC copy_gc, erase_gc, window_gc; int width, height, size; int x1, x2, y1, y2, x3, y3; int dx1, dx2, dx3, dy1, dy2, dy3; int othickness, thickness; Bool do_three; #ifdef HAVE_DOUBLE_BUFFER_EXTENSION XdbeBackBuffer back_buf; #endif /* HAVE_DOUBLE_BUFFER_EXTENSION */ Bool flip_a, flip_b; int pix; int delay, color_shift; int reset; int iterations, iteration; }; static void moire2_init_1 (struct state *st) { XWindowAttributes xgwa; XGetWindowAttributes (st->dpy, st->window, &xgwa); st->othickness = get_integer_resource(st->dpy, "thickness", "Thickness"); if (mono_p) st->ncolors = 2; else st->ncolors = get_integer_resource (st->dpy, "colors", "Colors"); if (st->ncolors < 2) st->ncolors = 2; if (st->ncolors <= 2) mono_p = True; if (mono_p) st->colors = 0; else st->colors = (XColor *) malloc(sizeof(*st->colors) * (st->ncolors+1)); if (mono_p) ; else make_smooth_colormap (xgwa.screen, xgwa.visual, xgwa.colormap, st->colors, &st->ncolors, True, 0, True); st->bg_pixel = get_pixel_resource(st->dpy, xgwa.colormap, "background", "Background"); st->fg_pixel = get_pixel_resource(st->dpy, xgwa.colormap, "foreground", "Foreground"); #ifdef HAVE_DOUBLE_BUFFER_EXTENSION st->back_buf = xdbe_get_backbuffer (st->dpy, st->window, XdbeUndefined); #endif /* HAVE_DOUBLE_BUFFER_EXTENSION */ } static void reset_moire2 (struct state *st) { GC gc; XWindowAttributes xgwa; XGCValues gcv; Bool xor; XGetWindowAttributes (st->dpy, st->window, &xgwa); st->do_three = (0 == (random() % 3)); st->width = xgwa.width; st->height = xgwa.height; st->size = st->width > st->height ? st->width : st->height; if (st->p0) XFreePixmap(st->dpy, st->p0); if (st->p1) XFreePixmap(st->dpy, st->p1); if (st->p2) XFreePixmap(st->dpy, st->p2); if (st->p3) XFreePixmap(st->dpy, st->p3); st->p0 = XCreatePixmap(st->dpy, st->window, st->width, st->height, 1); st->p1 = XCreatePixmap(st->dpy, st->window, st->width*2, st->height*2, 1); st->p2 = XCreatePixmap(st->dpy, st->window, st->width*2, st->height*2, 1); if (st->do_three) st->p3 = XCreatePixmap(st->dpy, st->window, st->width*2, st->height*2, 1); else st->p3 = 0; st->thickness = (st->othickness > 0 ? st->othickness : (1 + (random() % 4))); gcv.foreground = 0; gcv.line_width = (st->thickness == 1 ? 0 : st->thickness); gc = XCreateGC (st->dpy, st->p1, GCForeground|GCLineWidth, &gcv); XFillRectangle(st->dpy, st->p1, gc, 0, 0, st->width*2, st->height*2); XFillRectangle(st->dpy, st->p2, gc, 0, 0, st->width*2, st->height*2); if (st->do_three) XFillRectangle(st->dpy, st->p3, gc, 0, 0, st->width*2, st->height*2); XSetForeground(st->dpy, gc, 1); xor = (st->do_three || (st->thickness == 1) || (random() & 1)); { int i, ii, maxx, maxy; #define FROB(P) do { \ maxx = (st->size*4); \ maxy = (st->size*4); \ if (0 == (random() % 5)) { \ float f = 1.0 + frand(0.05); \ if (random() & 1) maxx *= f; \ else maxy *= f; \ } \ ii = (st->thickness + 1 + (xor ? 0 : 1) + (random() % (4 * st->thickness))); \ for (i = 0; i < (st->size*2); i += ii) \ XDrawArc(st->dpy, (P), gc, i-st->size, i-st->size, maxx-i-i, maxy-i-i, 0, 360*64); \ if (0 == (random() % 5)) \ { \ XSetFunction(st->dpy, gc, GXxor); \ XFillRectangle(st->dpy, (P), gc, 0, 0, st->width*2, st->height*2); \ XSetFunction(st->dpy, gc, GXcopy); \ } \ } while(0) FROB(st->p1); FROB(st->p2); if (st->do_three) FROB(st->p3); #undef FROB } XFreeGC(st->dpy, gc); if (st->copy_gc) XFreeGC(st->dpy, st->copy_gc); gcv.function = (xor ? GXxor : GXor); gcv.foreground = 1; gcv.background = 0; st->copy_gc = XCreateGC (st->dpy, st->p0, GCFunction|GCForeground|GCBackground, &gcv); gcv.foreground = 0; if (st->erase_gc) XFreeGC(st->dpy, st->erase_gc); st->erase_gc = XCreateGC (st->dpy, st->p0, GCForeground, &gcv); gcv.foreground = st->fg_pixel; gcv.background = st->bg_pixel; if (st->window_gc) XFreeGC(st->dpy, st->window_gc); st->window_gc = XCreateGC (st->dpy, st->window, GCForeground|GCBackground, &gcv); #define FROB(N,DN,MAX) \ N = (MAX/2) + (random() % MAX); \ DN = ((1 + (random() % (7*st->thickness))) * ((random() & 1) ? 1 : -1)) FROB(st->x1,st->dx1,st->width); FROB(st->x2,st->dx2,st->width); FROB(st->x3,st->dx3,st->width); FROB(st->y1,st->dy1,st->height); FROB(st->y2,st->dy2,st->height); FROB(st->y3,st->dy3,st->height); #undef FROB } static void moire2 (struct state *st) { #define FROB(N,DN,MAX) \ N += DN; \ if (N <= 0) N = 0, DN = -DN; \ else if (N >= MAX) N = MAX, DN = -DN; \ else if (0 == (random() % 100)) DN = -DN; \ else if (0 == (random() % 50)) \ DN += (DN <= -20 ? 1 : (DN >= 20 ? -1 : ((random() & 1) ? 1 : -1))) FROB(st->x1,st->dx1,st->width); FROB(st->x2,st->dx2,st->width); FROB(st->x3,st->dx3,st->width); FROB(st->y1,st->dy1,st->height); FROB(st->y2,st->dy2,st->height); FROB(st->y3,st->dy3,st->height); #undef FROB XFillRectangle(st->dpy, st->p0, st->erase_gc, 0, 0, st->width, st->height); XCopyArea(st->dpy, st->p1, st->p0, st->copy_gc, st->x1, st->y1, st->width, st->height, 0, 0); XCopyArea(st->dpy, st->p2, st->p0, st->copy_gc, st->x2, st->y2, st->width, st->height, 0, 0); if (st->do_three) XCopyArea(st->dpy, st->p3, st->p0, st->copy_gc, st->x3, st->y3, st->width, st->height, 0, 0); #ifdef HAVE_DOUBLE_BUFFER_EXTENSION if (st->back_buf) { XdbeSwapInfo info[1]; info[0].swap_window = st->window; info[0].swap_action = XdbeUndefined; XCopyPlane (st->dpy, st->p0, st->back_buf, st->window_gc, 0, 0, st->width, st->height, 0, 0, 1L); XdbeSwapBuffers (st->dpy, info, 1); } else #endif /* HAVE_DOUBLE_BUFFER_EXTENSION */ XCopyPlane (st->dpy, st->p0, st->window, st->window_gc, 0, 0, st->width, st->height, 0, 0, 1L); #if 0 XCopyPlane(st->dpy, st->p1, st->window, st->window_gc, (st->width*2)/3, (st->height*2)/3, st->width/2, st->height/2, 0, st->height/2, 1L); XCopyPlane(st->dpy, st->p2, st->window, st->window_gc, (st->width*2)/3, (st->height*2)/3, st->width/2, st->height/2, st->width/2, st->height/2, 1L); #endif } static void * moire2_init (Display *dpy, Window window) { struct state *st = (struct state *) calloc (1, sizeof(*st)); st->dpy = dpy; st->window = window; st->reset = 1; st->delay = get_integer_resource (st->dpy, "delay", "Integer"); st->color_shift = get_integer_resource (st->dpy, "colorShift", "Integer"); if (st->color_shift <= 0) st->color_shift = 1; moire2_init_1 (st); return st; } static unsigned long moire2_draw (Display *dpy, Window window, void *closure) { struct state *st = (struct state *) closure; if (st->reset) { st->reset = 0; st->iteration = 0; st->iterations = 30 + (random() % 70) + (random() % 70); reset_moire2 (st); st->flip_a = mono_p ? False : (random() & 1); st->flip_b = mono_p ? False : (random() & 1); if (st->flip_b) { XSetForeground(st->dpy, st->window_gc, st->bg_pixel); XSetBackground(st->dpy, st->window_gc, st->fg_pixel); } else { XSetForeground(st->dpy, st->window_gc, st->fg_pixel); XSetBackground(st->dpy, st->window_gc, st->bg_pixel); } } if (!mono_p) { st->pix++; st->pix = st->pix % st->ncolors; if (st->flip_a) XSetBackground(st->dpy, st->window_gc, st->colors[st->pix].pixel); else XSetForeground(st->dpy, st->window_gc, st->colors[st->pix].pixel); } moire2 (st); st->iteration++; if (st->iteration >= st->color_shift) { st->iteration = 0; st->iterations--; if (st->iterations <= 0) st->reset = 1; } return st->delay; } 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 moire2_event (Display *dpy, Window window, void *closure, XEvent *event) { return False; } static void moire2_free (Display *dpy, Window window, void *closure) { } static const char *moire2_defaults [] = { ".background: black", ".foreground: white", "*delay: 50000", "*thickness: 0", "*colors: 150", "*colorShift: 5", #ifdef HAVE_MOBILE "*ignoreRotation: True", #endif #ifdef HAVE_DOUBLE_BUFFER_EXTENSION /* Off by default, since it slows it down a lot, and the flicker isn't really all that bad without it... Or rather, it flickers just as badly with it. The XFree86 implementation of the XDBE extension totally blows! There is just *no* excuse for the "swap buffers" operation to flicker like it does. */ "*useDBE: False", #endif /* HAVE_DOUBLE_BUFFER_EXTENSION */ 0 }; static XrmOptionDescRec moire2_options [] = { { "-delay", ".delay", XrmoptionSepArg, 0 }, { "-ncolors", ".colors", XrmoptionSepArg, 0 }, { "-thickness", ".thickness", XrmoptionSepArg, 0 }, { 0, 0, 0, 0 } }; XSCREENSAVER_MODULE ("Moire2", moire2) xscreensaver-5.36/hacks/flow.c000644 000767 000024 00000111757 12717746153 016373 0ustar00jwzstaff000000 000000 /* -*- Mode: C; tab-width: 4; c-basic-offset: 4 -*- */ /* flow --- flow of strange bees */ #if 0 static const char sccsid[] = "@(#)flow.c 5.00 2000/11/01 xlockmore"; #endif /*- * Copyright (c) 1996 by Tim Auckland * Incorporating some code from Stephen Davies Copyright (c) 2000 * * Search code based on techniques described in "Strange Attractors: * Creating Patterns in Chaos" by Julien C. Sprott * * Permission to use, copy, modify, and distribute this software and its * documentation for any purpose and without fee is hereby granted, * provided that the above copyright notice appear in all copies and that * both that copyright notice and this permission notice appear in * supporting documentation. * * This file is provided AS IS with no warranties of any kind. The author * shall have no liability with respect to the infringement of copyrights, * trade secrets or any patents by this file or any part thereof. In no * event will the author be liable for any lost revenue or profits or * other special, indirect and consequential damages. * * "flow" shows a variety of continuous phase-space flows around strange * attractors. It includes the well-known Lorentz mask (the "Butterfly" * of chaos fame), two forms of Rossler's "Folded Band" and Poincare' * sections of the "Birkhoff Bagel" and Duffing's forced occilator. "flow" * can now discover new attractors. * * Revision History: * * 29-Oct-2004: [TDA] Discover Attractors unknown to science. * Replace 2D rendering of Periodic Attractors with a 3D * 'interrupted' rendering. Replace "-/+allow2d" with "-/+periodic" * Replace all ODE formulae with completely generic forms. * Add '-search' option to perform background high-speed discovery * for completely new attractors without impacting rendering * performance. * Use gaussian distribution for initial point positions and for * parameter search. * Add "+dbuf" option to allow Double-Buffering to be turned off on * slow X servers. * Remove redundant '-zoom' option. Now automatically zooms if both * rotation and riding are permitted. * Replace dynamic bounding box with static one pre-calculated * during discovery phase. * Simplify and fix bounding box clipping code. Should now be safe * to run without double buffer on all XFree86 servers if desired. * 12-Oct-2004: [TDA] Merge Xscreensaver and Xlockmore branches * Added Chalky's orbital camera, but made the zooming work by * flying the camera rather than interpolating the view transforms. * Added Chalky's Bounding Box, but time-averaged the boundaries to * let the lost bees escape. * Added Chalky's 'view-frustrum' clipping, but only applying it to * the Bounding Box. Trails make clipping less useful. * Added Chalky's "-slow" and "-freeze" options for compatibility, * but haven't implemented the features, since the results are ugly * and make no mathematical contribution. * Added Double-Buffering as a work-around for a persistent XFree86 * bug that left debris on the screen. * 21-Mar-2003: [TDA] Trails added (XLockmore branch) * 01-Nov-2000: [TDA] Allocation checks (XLockmore branch) * 21-Feb-2000: [Chalky] Major hackage (Stephen Davies, chalky@null.net) * (Xscreensaver branch) * Forced perspective mode, added 3d box around attractor which * involved coding 3d-planar-clipping against the view-frustrum * thingy. Also made view alternate between piggybacking on a 'bee' * to zooming around outside the attractor. Most bees slow down and * stop, to make the structure of the attractor more obvious. * 28-Jan-1999: [TDA] Catch 'lost' bees in flow.c and disable them. * (XLockmore branch) * I chose to disable them rather than reinitialise them because * reinitialising can produce fake attractors. * This has allowed me to relax some of the parameters and initial * conditions slightly to catch some of the more extreme cases. As a * result you may see some bees fly away at the start - these are the ones * that 'missed' the attractor. If the bee with the camera should fly * away the mode will restart :-) * 31-Nov-1998: [TDA] Added Duffing (what a strange day that was :) DAB) * Duffing's forced oscillator has been added to the formula list and * the parameters section has been updated to display it in Poincare' * section. * 30-Nov-1998: [TDA] Added travelling perspective option * A more exciting point-of-view has been added to all autonomous flows. * This views the flow as seen by a particle moving with the flow. In the * metaphor of the original code, I've attached a camera to one of the * trained bees! * 30-Nov-1998: [TDA] Much code cleanup. * 09-Apr-1997: [TDA] Ported to xlockmore-4 * 18-Jul-1996: Adapted from swarm.c Copyright (c) 1991 by Patrick J. Naughton. * 31-Aug-1990: Adapted from xswarm by Jeff Butterworth. (butterwo@ncsc.org). */ #ifdef STANDALONE # define MODE_flow # define DEFAULTS "*delay: 10000 \n" \ "*count: 3000 \n" \ "*size: -10 \n" \ "*cycles: 10000 \n" \ "*ncolors: 200 \n" # include "xlockmore.h" /* in xscreensaver distribution */ #else /* STANDALONE */ # include "xlock.h" /* in xlockmore distribution */ #endif /* STANDALONE */ #ifdef MODE_flow #define DEF_ROTATE "TRUE" #define DEF_RIDE "TRUE" #define DEF_BOX "TRUE" #define DEF_PERIODIC "TRUE" #define DEF_SEARCH "TRUE" #define DEF_DBUF "TRUE" static Bool rotatep; static Bool ridep; static Bool boxp; static Bool periodicp; static Bool searchp; static Bool dbufp; static XrmOptionDescRec opts[] = { {"-rotate", ".flow.rotate", XrmoptionNoArg, "on"}, {"+rotate", ".flow.rotate", XrmoptionNoArg, "off"}, {"-ride", ".flow.ride", XrmoptionNoArg, "on"}, {"+ride", ".flow.ride", XrmoptionNoArg, "off"}, {"-box", ".flow.box", XrmoptionNoArg, "on"}, {"+box", ".flow.box", XrmoptionNoArg, "off"}, {"-periodic", ".flow.periodic", XrmoptionNoArg, "on"}, {"+periodic", ".flow.periodic", XrmoptionNoArg, "off"}, {"-search", ".flow.search", XrmoptionNoArg, "on"}, {"+search", ".flow.search", XrmoptionNoArg, "off"}, {"-dbuf", ".flow.dbuf", XrmoptionNoArg, "on"}, {"+dbuf", ".flow.dbuf", XrmoptionNoArg, "off"}, }; static argtype vars[] = { {&rotatep, "rotate", "Rotate", DEF_ROTATE, t_Bool}, {&ridep, "ride", "Ride", DEF_RIDE, t_Bool}, {&boxp, "box", "Box", DEF_BOX, t_Bool}, {&periodicp, "periodic", "Periodic", DEF_PERIODIC, t_Bool}, {&searchp, "search", "Search", DEF_SEARCH, t_Bool}, {&dbufp, "dbuf", "Dbuf", DEF_DBUF, t_Bool}, }; static OptionStruct desc[] = { {"-/+rotate", "turn on/off rotating around attractor."}, {"-/+ride", "turn on/off ride in the flow."}, {"-/+box", "turn on/off bounding box."}, {"-/+periodic", "turn on/off periodic attractors."}, {"-/+search", "turn on/off search for new attractors."}, {"-/+dbuf", "turn on/off double buffering."}, }; ENTRYPOINT ModeSpecOpt flow_opts = {sizeof opts / sizeof opts[0], opts, sizeof vars / sizeof vars[0], vars, desc}; #ifdef USE_MODULES ModStruct flow_description = { "flow", "init_flow", "draw_flow", "release_flow", "refresh_flow", "init_flow", NULL, &flow_opts, 1000, 1024, 10000, -10, 200, 1.0, "", "Shows dynamic strange attractors", 0, NULL }; #endif typedef struct { double x, y, z; } dvector; #define N_PARS 20 /* Enough for Full Cubic or Periodic Cubic */ typedef dvector Par[N_PARS]; enum { /* Name the parameter indices to make it easier to write standard examples */ C, X,XX,XXX,XXY,XXZ,XY,XYY,XYZ,XZ,XZZ, Y,YY,YYY,YYZ,YZ,YZZ, Z,ZZ,ZZZ, SINY = XY /* OK to overlap in this case */ }; /* Camera target [TDA] */ typedef enum { ORBIT = 0, BEE = 1 } Chaseto; /* Macros */ #define IX(C) ((C) * segindex + sp->cnsegs[(C)]) #define B(t,b) (sp->p + (t) + (b) * sp->taillen) #define X(t,b) (B((t),(b))->x) #define Y(t,b) (B((t),(b))->y) #define Z(t,b) (B((t),(b))->z) #define balance_rand(v) ((LRAND()/MAXRAND*(v))-((v)/2)) /* random around 0 */ #define LOST_IN_SPACE 2000.0 #define INITIALSTEP 0.04 #define EYEHEIGHT 0.005 #define MINTRAIL 2 #define BOX_L 36 /* Points that make up the box (normalized coordinates) */ static const double box[][3] = { {1,1,1}, /* 0 */ {1,1,-1}, /* 1 */ {1,-1,-1}, /* 2 */ {1,-1,1}, /* 3 */ {-1,1,1}, /* 4 */ {-1,1,-1}, /* 5 */ {-1,-1,-1},/* 6 */ {-1,-1,1}, /* 7 */ {1, .8, .8}, {1, .8,-.8}, {1,-.8,-.8}, {1,-.8, .8}, { .8,1, .8}, { .8,1,-.8}, {-.8,1,-.8}, {-.8,1, .8}, { .8, .8,1}, { .8,-.8,1}, {-.8,-.8,1}, {-.8, .8,1}, {-1, .8, .8}, {-1, .8,-.8}, {-1,-.8,-.8}, {-1,-.8, .8}, { .8,-1, .8}, { .8,-1,-.8}, {-.8,-1,-.8}, {-.8,-1, .8}, { .8, .8,-1}, { .8,-.8,-1}, {-.8,-.8,-1}, {-.8, .8,-1} }; /* Lines connecting the box dots */ static const double lines[][2] = { {0,1}, {1,2}, {2,3}, {3,0}, /* box */ {4,5}, {5,6}, {6,7}, {7,4}, {0,4}, {1,5}, {2,6}, {3,7}, {4+4,5+4}, {5+4,6+4}, {6+4,7+4}, {7+4,4+4}, {4+8,5+8}, {5+8,6+8}, {6+8,7+8}, {7+8,4+8}, {4+12,5+12}, {5+12,6+12}, {6+12,7+12}, {7+12,4+12}, {4+16,5+16}, {5+16,6+16}, {6+16,7+16}, {7+16,4+16}, {4+20,5+20}, {5+20,6+20}, {6+20,7+20}, {7+20,4+20}, {4+24,5+24}, {5+24,6+24}, {6+24,7+24}, {7+24,4+24}, }; typedef struct { /* Variables used in rendering */ dvector cam[3]; /* camera flight path */ int chasetime; Chaseto chaseto; Pixmap buffer; /* Double Buffer */ dvector circle[2]; /* POV that circles around the scene */ dvector centre; /* centre */ int beecount; /* number of bees */ XSegment *csegs; /* bee lines */ int *cnsegs; XSegment *old_segs; /* old bee lines */ int nold_segs; int taillen; /* Variables common to iterators */ dvector (*ODE) (Par par, double x, double y, double z); dvector range; /* Initial conditions */ double yperiod; /* ODE's where Y is periodic. */ /* Variables used in iterating main flow */ Par par; dvector *p; /* bee positions x[time][bee#] */ int count; double lyap; double size; dvector mid; /* Effective bounding box */ double step; /* second set of variables, used for parallel search */ Par par2; dvector p2[2]; int count2; double lyap2; double size2; dvector mid2; double step2; } flowstruct; static flowstruct *flows = (flowstruct *) NULL; /* * Private functions */ /* ODE functions */ /* Generic 3D Cubic Polynomial. Includes all the Quadratics (Lorentz, Rossler) and much more! */ /* I considered offering a seperate 'Quadratic' option, since Cubic is clearly overkill for the standard examples, but the performance difference is too small to measure. The compute time is entirely dominated by the XDrawSegments calls anyway. [TDA] */ static dvector Cubic(Par a, double x, double y, double z) { dvector d; d.x = a[C].x + a[X].x*x + a[XX].x*x*x + a[XXX].x*x*x*x + a[XXY].x*x*x*y + a[XXZ].x*x*x*z + a[XY].x*x*y + a[XYY].x*x*y*y + a[XYZ].x*x*y*z + a[XZ].x*x*z + a[XZZ].x*x*z*z + a[Y].x*y + a[YY].x*y*y + a[YYY].x*y*y*y + a[YYZ].x*y*y*z + a[YZ].x*y*z + a[YZZ].x*y*z*z + a[Z].x*z + a[ZZ].x*z*z + a[ZZZ].x*z*z*z; d.y = a[C].y + a[X].y*x + a[XX].y*x*x + a[XXX].y*x*x*x + a[XXY].y*x*x*y + a[XXZ].y*x*x*z + a[XY].y*x*y + a[XYY].y*x*y*y + a[XYZ].y*x*y*z + a[XZ].y*x*z + a[XZZ].y*x*z*z + a[Y].y*y + a[YY].y*y*y + a[YYY].y*y*y*y + a[YYZ].y*y*y*z + a[YZ].y*y*z + a[YZZ].y*y*z*z + a[Z].y*z + a[ZZ].y*z*z + a[ZZZ].y*z*z*z; d.z = a[C].z + a[X].z*x + a[XX].z*x*x + a[XXX].z*x*x*x + a[XXY].z*x*x*y + a[XXZ].z*x*x*z + a[XY].z*x*y + a[XYY].z*x*y*y + a[XYZ].z*x*y*z + a[XZ].z*x*z + a[XZZ].z*x*z*z + a[Y].z*y + a[YY].z*y*y + a[YYY].z*y*y*y + a[YYZ].z*y*y*z + a[YZ].z*y*z + a[YZZ].z*y*z*z + a[Z].z*z + a[ZZ].z*z*z + a[ZZZ].z*z*z*z; return d; } /* 3D Cubic in (x,z) with periodic sinusoidal forcing term in x. y is the independent periodic (time) axis. This includes Birkhoff's Bagel and Duffing's Attractor */ static dvector Periodic(Par a, double x, double y, double z) { dvector d; d.x = a[C].x + a[X].x*x + a[XX].x*x*x + a[XXX].x*x*x*x + a[XXZ].x*x*x*z + a[XZ].x*x*z + a[XZZ].x*x*z*z + a[Z].x*z + a[ZZ].x*z*z + a[ZZZ].x*z*z*z + a[SINY].x*sin(y); d.y = a[C].y; d.z = a[C].z + a[X].z*x + a[XX].z*x*x + a[XXX].z*x*x*x + a[XXZ].z*x*x*z + a[XZ].z*x*z + a[XZZ].z*x*z*z + a[Z].z*z + a[ZZ].z*z*z + a[ZZZ].z*z*z*z; return d; } /* Numerical integration of the ODE using 2nd order Runge Kutta. Returns length^2 of the update, so that we can detect if the step size needs reducing. */ static double Iterate(dvector *p, dvector(*ODE)(Par par, double x, double y, double z), Par par, double step) { dvector k1, k2, k3; k1 = ODE(par, p->x, p->y, p->z); k1.x *= step; k1.y *= step; k1.z *= step; k2 = ODE(par, p->x + k1.x, p->y + k1.y, p->z + k1.z); k2.x *= step; k2.y *= step; k2.z *= step; k3.x = (k1.x + k2.x) / 2.0; k3.y = (k1.y + k2.y) / 2.0; k3.z = (k1.z + k2.z) / 2.0; p->x += k3.x; p->y += k3.y; p->z += k3.z; return k3.x*k3.x + k3.y*k3.y + k3.z*k3.z; } /* Memory functions */ #define deallocate(p,t) if (p!=NULL) {free(p); p=(t*)NULL; } #define allocate(p,t,s) if ((p=(t*)malloc(sizeof(t)*s))==NULL)\ {free_flow(sp);return;} static void free_flow(flowstruct *sp) { deallocate(sp->csegs, XSegment); deallocate(sp->cnsegs, int); deallocate(sp->old_segs, XSegment); deallocate(sp->p, dvector); } /* Generate Gaussian random number: mean 0, "amplitude" A (actually A is 3*standard deviation). */ /* Note this generates a pair of gaussian variables, so it saves one to give out next time it's called */ static double Gauss_Rand(double A) { static double d; static Bool ready = 0; if(ready) { ready = 0; return A/3 * d; } else { double x, y, w; do { x = 2.0 * (double)LRAND() / MAXRAND - 1.0; y = 2.0 * (double)LRAND() / MAXRAND - 1.0; w = x*x + y*y; } while(w >= 1.0); w = sqrt((-2 * log(w))/w); ready = 1; d = x * w; return A/3 * y * w; } } /* Attempt to discover new atractors by sending a pair of bees on a fast trip through the new flow and computing their Lyapunov exponent. Returns False if the bees fly away. If the bees stay bounded, the new bounds and the Lyapunov exponent are stored in sp and the function returns True. Repeat invocations continue the flow and improve the accuracy of the bounds and the Lyapunov exponent. Set sp->count2 to zero to start a new test. Acts on alternate variable set, so that it can be run in parallel with the main flow */ static Bool discover(ModeInfo * mi) { flowstruct *sp; double l = 0; dvector dl; dvector max, min; double dl2, df, rs, lsum = 0, s, maxv2 = 0, v2; int N, i, nl = 0; if (flows == NULL) return 0; sp = &flows[MI_SCREEN(mi)]; if(sp->count2 == 0) { /* initial conditions */ sp->p2[0].x = Gauss_Rand(sp->range.x); sp->p2[0].y = (sp->yperiod > 0)? balance_rand(sp->range.y) : Gauss_Rand(sp->range.y); sp->p2[0].z = Gauss_Rand(sp->range.z); /* 1000 steps to find an attractor */ /* Most cases explode out here */ for(N=0; N < 1000; N++){ Iterate(sp->p2, sp->ODE, sp->par2, sp->step2); if(sp->yperiod > 0 && sp->p2[0].y > sp->yperiod) sp->p2[0].y -= sp->yperiod; if(fabs(sp->p2[0].x) > LOST_IN_SPACE || fabs(sp->p2[0].y) > LOST_IN_SPACE || fabs(sp->p2[0].z) > LOST_IN_SPACE) { return 0; } sp->count2++; } /* Small perturbation */ sp->p2[1].x = sp->p2[0].x + 0.000001; sp->p2[1].y = sp->p2[0].y; sp->p2[1].z = sp->p2[0].z; } /* Reset bounding box */ max.x = min.x = sp->p2[0].x; max.y = min.y = sp->p2[0].y; max.z = min.z = sp->p2[0].z; /* Compute Lyapunov Exponent */ /* (Technically, we're only estimating the largest Lyapunov Exponent, but that's all we need to know to determine if we have a strange attractor.) [TDA] */ /* Fly two bees close together */ for(N=0; N < 5000; N++){ for(i=0; i< 2; i++) { v2 = Iterate(sp->p2+i, sp->ODE, sp->par2, sp->step2); if(sp->yperiod > 0 && sp->p2[i].y > sp->yperiod) sp->p2[i].y -= sp->yperiod; if(fabs(sp->p2[i].x) > LOST_IN_SPACE || fabs(sp->p2[i].y) > LOST_IN_SPACE || fabs(sp->p2[i].z) > LOST_IN_SPACE) { return 0; } if(v2 > maxv2) maxv2 = v2; /* Track max v^2 */ } /* find bounding box */ if ( sp->p2[0].x < min.x ) min.x = sp->p2[0].x; else if ( sp->p2[0].x > max.x ) max.x = sp->p2[0].x; if ( sp->p2[0].y < min.y ) min.y = sp->p2[0].y; else if ( sp->p2[0].y > max.y ) max.y = sp->p2[0].y; if ( sp->p2[0].z < min.z ) min.z = sp->p2[0].z; else if ( sp->p2[0].z > max.z ) max.z = sp->p2[0].z; /* Measure how much we have to pull the two bees to prevent them diverging. */ dl.x = sp->p2[1].x - sp->p2[0].x; dl.y = sp->p2[1].y - sp->p2[0].y; dl.z = sp->p2[1].z - sp->p2[0].z; dl2 = dl.x*dl.x + dl.y*dl.y + dl.z*dl.z; if(dl2 > 0) { df = 1e12 * dl2; rs = 1/sqrt(df); sp->p2[1].x = sp->p2[0].x + rs * dl.x; sp->p2[1].y = sp->p2[0].y + rs * dl.y; sp->p2[1].z = sp->p2[0].z + rs * dl.z; lsum = lsum + log(df); nl = nl + 1; l = M_LOG2E / 2 * lsum / nl / sp->step2; } sp->count2++; } /* Anything that didn't explode has a finite attractor */ /* If Lyapunov is negative then it probably hit a fixed point or a * limit cycle. Positive Lyapunov indicates a strange attractor. */ sp->lyap2 = l; sp->size2 = max.x - min.x; s = max.y - min.y; if(s > sp->size2) sp->size2 = s; s = max.z - min.z; if(s > sp->size2) sp->size2 = s; sp->mid2.x = (max.x + min.x) / 2; sp->mid2.y = (max.y + min.y) / 2; sp->mid2.z = (max.z + min.z) / 2; if(sqrt(maxv2) > sp->size2 * 0.2) { /* Flowing too fast, reduce step size. This helps to eliminate high-speed limit cycles, which can show +ve Lyapunov due to integration inaccuracy. */ sp->step2 /= 2; } return 1; } /* Sets up initial conditions for a flow without all the extra baggage that goes with init_flow */ static void restart_flow(ModeInfo * mi) { flowstruct *sp; int b; if (flows == NULL) return; sp = &flows[MI_SCREEN(mi)]; sp->count = 0; /* Re-Initialize point positions, velocities, etc. */ for (b = 0; b < sp->beecount; b++) { X(0, b) = Gauss_Rand(sp->range.x); Y(0, b) = (sp->yperiod > 0)? balance_rand(sp->range.y) : Gauss_Rand(sp->range.y); Z(0, b) = Gauss_Rand(sp->range.z); } } /* Returns true if line was behind a clip plane, or it clips the line */ /* nx,ny,nz is the normal to the plane. d is the distance from the origin */ /* s and e are the end points of the line to be clipped */ static int clip(double nx, double ny, double nz, double d, dvector *s, dvector *e) { int front1, front2; dvector w, p; double t; front1 = (nx*s->x + ny*s->y + nz*s->z >= -d); front2 = (nx*e->x + ny*e->y + nz*e->z >= -d); if (!front1 && !front2) return 1; if (front1 && front2) return 0; w.x = e->x - s->x; w.y = e->y - s->y; w.z = e->z - s->z; /* Find t in line equation */ t = ( -d - nx*s->x - ny*s->y - nz*s->z) / ( nx*w.x + ny*w.y + nz*w.z); p.x = s->x + w.x * t; p.y = s->y + w.y * t; p.z = s->z + w.z * t; /* Move clipped point to the intersection */ if (front2) { *s = p; } else { *e = p; } return 0; } /* * Public functions */ ENTRYPOINT void init_flow (ModeInfo * mi) { flowstruct *sp; char *name; if (flows == NULL) { if ((flows = (flowstruct *) calloc(MI_NUM_SCREENS(mi), sizeof (flowstruct))) == NULL) return; } sp = &flows[MI_SCREEN(mi)]; sp->count2 = 0; sp->taillen = MI_SIZE(mi); if (sp->taillen < -MINTRAIL) { /* Change by sqrt so it seems more variable */ sp->taillen = NRAND((int)sqrt((double) (-sp->taillen - MINTRAIL + 1))); sp->taillen = sp->taillen * sp->taillen + MINTRAIL; } else if (sp->taillen < MINTRAIL) { sp->taillen = MINTRAIL; } if(!rotatep && !ridep) rotatep = True; /* We need at least one viewpoint */ /* Start camera at Orbit or Bee */ if(rotatep) { sp->chaseto = ORBIT; } else { sp->chaseto = BEE; } sp->chasetime = 1; /* Go directly to target */ sp->lyap = 0; sp->yperiod = 0; sp->step2 = INITIALSTEP; /* Zero parameter set */ memset(sp->par2, 0, N_PARS * sizeof(dvector)); /* Set up standard examples */ switch (NRAND((periodicp) ? 5 : 3)) { case 0: /* x' = a(y - x) y' = x(b - z) - y z' = xy - cz */ name = "Lorentz"; sp->par2[Y].x = 10 + balance_rand(5*0); /* a */ sp->par2[X].x = - sp->par2[Y].x; /* -a */ sp->par2[X].y = 28 + balance_rand(5*0); /* b */ sp->par2[XZ].y = -1; sp->par2[Y].y = -1; sp->par2[XY].z = 1; sp->par2[Z].z = - 2 + balance_rand(1*0); /* -c */ break; case 1: /* x' = -(y + az) y' = x + by z' = c + z(x - 5.7) */ name = "Rossler"; sp->par2[Y].x = -1; sp->par2[Z].x = -2 + balance_rand(1); /* a */ sp->par2[X].y = 1; sp->par2[Y].y = 0.2 + balance_rand(0.1); /* b */ sp->par2[C].z = 0.2 + balance_rand(0.1); /* c */ sp->par2[XZ].z = 1; sp->par2[Z].z = -5.7; break; case 2: /* x' = -(y + az) y' = x + by - cz^2 z' = 0.2 + z(x - 5.7) */ name = "RosslerCone"; sp->par2[Y].x = -1; sp->par2[Z].x = -2; /* a */ sp->par2[X].y = 1; sp->par2[Y].y = 0.2; /* b */ sp->par2[ZZ].y = -0.331 + balance_rand(0.01); /* c */ sp->par2[C].z = 0.2; sp->par2[XZ].z = 1; sp->par2[Z].z = -5.7; break; case 3: /* x' = -z + b sin(y) y' = c z' = 0.7x + az(0.1 - x^2) */ name = "Birkhoff"; sp->par2[Z].x = -1; sp->par2[SINY].x = 0.35 + balance_rand(0.25); /* b */ sp->par2[C].y = 1.57; /* c */ sp->par2[X].z = 0.7; sp->par2[Z].z = 1 + balance_rand(0.5); /* a/10 */ sp->par2[XXZ].z = -10 * sp->par2[Z].z; /* -a */ sp->yperiod = 2 * M_PI; break; default: /* x' = -ax - z/2 - z^3/8 + b sin(y) y' = c z' = 2x */ name = "Duffing"; sp->par2[X].x = -0.2 + balance_rand(0.1); /* a */ sp->par2[Z].x = -0.5; sp->par2[ZZZ].x = -0.125; sp->par2[SINY].x = 27.0 + balance_rand(3.0); /* b */ sp->par2[C].y = 1.33; /* c */ sp->par2[X].z = 2; sp->yperiod = 2 * M_PI; break; } sp->range.x = 5; sp->range.z = 5; if(sp->yperiod > 0) { sp->ODE = Periodic; /* periodic flows show either uniform distribution or a snapshot on the 'time' axis */ sp->range.y = NRAND(2)? sp->yperiod : 0; } else { sp->range.y = 5; sp->ODE = Cubic; } /* Run discoverer to set up bounding box, etc. Lyapunov will probably be innaccurate, since we're only running it once, but we're using known strange attractors so it should be ok. */ discover(mi); if(MI_IS_VERBOSE(mi)) fprintf(stdout, "flow: Lyapunov exponent: %g, step: %g, size: %g (%s)\n", sp->lyap2, sp->step2, sp->size2, name); /* Install new params */ sp->lyap = sp->lyap2; sp->size = sp->size2; sp->mid = sp->mid2; sp->step = sp->step2; memcpy(sp->par, sp->par2, sizeof(sp->par2)); sp->count2 = 0; /* Reset search */ free_flow(sp); sp->beecount = MI_COUNT(mi); if (!sp->beecount) { sp->beecount = 1; /* The camera requires 1 or more */ } else if (sp->beecount < 0) { /* random variations */ sp->beecount = NRAND(-sp->beecount) + 1; /* Minimum 1 */ } # ifdef HAVE_JWXYZ /* Don't second-guess Quartz's double-buffering */ dbufp = False; # endif if(dbufp) { /* Set up double buffer */ if (sp->buffer != None) XFreePixmap(MI_DISPLAY(mi), sp->buffer); sp->buffer = XCreatePixmap(MI_DISPLAY(mi), MI_WINDOW(mi), MI_WIDTH(mi), MI_HEIGHT(mi), MI_DEPTH(mi)); } else { sp->buffer = MI_WINDOW(mi); } /* no "NoExpose" events from XCopyArea wanted */ XSetGraphicsExposures(MI_DISPLAY(mi), MI_GC(mi), False); /* Make sure we're using 'thin' lines */ XSetLineAttributes(MI_DISPLAY(mi), MI_GC(mi), 0, LineSolid, CapNotLast, JoinMiter); /* Clear the background (may be slow depending on user prefs). */ MI_CLEARWINDOW(mi); /* Allocate memory. */ if (sp->csegs == NULL) { allocate(sp->csegs, XSegment, (sp->beecount + BOX_L) * MI_NPIXELS(mi) * sp->taillen); allocate(sp->cnsegs, int, MI_NPIXELS(mi)); allocate(sp->old_segs, XSegment, (sp->beecount + BOX_L) * sp->taillen); allocate(sp->p, dvector, sp->beecount * sp->taillen); } /* Initialize point positions, velocities, etc. */ restart_flow(mi); /* Set up camera tail */ X(1, 0) = sp->cam[1].x = 0; Y(1, 0) = sp->cam[1].y = 0; Z(1, 0) = sp->cam[1].z = 0; } ENTRYPOINT void draw_flow (ModeInfo * mi) { int b, i; int col, begin, end; double M[3][3]; /* transformation matrix */ flowstruct *sp = NULL; int swarm = 0; int segindex; if (flows == NULL) return; sp = &flows[MI_SCREEN(mi)]; if (sp->csegs == NULL) return; #ifdef HAVE_JWXYZ /* Don't second-guess Quartz's double-buffering */ XClearWindow (MI_DISPLAY(mi), MI_WINDOW(mi)); #endif /* multiplier for indexing segment arrays. Used in IX macro, etc. */ segindex = (sp->beecount + BOX_L) * sp->taillen; if(searchp){ if(sp->count2 == 0) { /* start new search */ sp->step2 = INITIALSTEP; /* Pick random parameters. Actual range is irrelevant since parameter scale determines flow speed but not structure. */ for(i=0; i< N_PARS; i++) { sp->par2[i].x = Gauss_Rand(1.0); sp->par2[i].y = Gauss_Rand(1.0); sp->par2[i].z = Gauss_Rand(1.0); } } if(!discover(mi)) { /* Flow exploded, reset. */ sp->count2 = 0; } else { if(sp->lyap2 < 0) { sp->count2 = 0; /* Attractor found, but it's not strange */ }else if(sp->count2 > 1000000) { /* This one will do */ sp->count2 = 0; /* Reset search */ if(MI_IS_VERBOSE(mi)) fprintf(stdout, "flow: Lyapunov exponent: %g, step: %g, size: %g (unnamed)\n", sp->lyap2, sp->step2, sp->size2); /* Install new params */ sp->lyap = sp->lyap2; sp->size = sp->size2; sp->mid = sp->mid2; sp->step = sp->step2; memcpy(sp->par, sp->par2, sizeof(sp->par2)); /* If we're allowed to zoom out, do so now, so that we get a look at the new attractor. */ if(sp->chaseto == BEE && rotatep) { sp->chaseto = ORBIT; sp->chasetime = 100; } /* Reset initial conditions, so we don't get misleading artifacts in the particle density. */ restart_flow(mi); } } } /* Reset segment buffers */ for (col = 0; col < MI_NPIXELS(mi); col++) sp->cnsegs[col] = 0; MI_IS_DRAWN(mi) = True; /* Calculate circling POV [Chalky]*/ sp->circle[1] = sp->circle[0]; sp->circle[0].x = sp->size * 2 * sin(sp->count / 100.0) * (-0.6 + 0.4 *cos(sp->count / 500.0)) + sp->mid.x; sp->circle[0].y = sp->size * 2 * cos(sp->count / 100.0) * (0.6 + 0.4 *cos(sp->count / 500.0)) + sp->mid.y; sp->circle[0].z = sp->size * 2 * sin(sp->count / 421.0) + sp->mid.z; /* Timed chase instead of Chalkie's Bistable oscillator [TDA] */ if(rotatep && ridep) { if(sp->chaseto == BEE && NRAND(1000) == 0){ sp->chaseto = ORBIT; sp->chasetime = 100; }else if(NRAND(4000) == 0){ sp->chaseto = BEE; sp->chasetime = 100; } } /* Set up orientation matrix */ { double x[3], p[3], x2=0, xp=0; int j; /* Chasetime is here to guarantee the camera makes it all the way to the target in a finite number of steps. */ if(sp->chasetime > 1) sp->chasetime--; if(sp->chaseto == BEE){ /* Camera Head targets bee 0 */ sp->cam[0].x += (X(0, 0) - sp->cam[0].x)/sp->chasetime; sp->cam[0].y += (Y(0, 0) - sp->cam[0].y)/sp->chasetime; sp->cam[0].z += (Z(0, 0) - sp->cam[0].z)/sp->chasetime; /* Camera Tail targets previous position of bee 0 */ sp->cam[1].x += (X(1, 0) - sp->cam[1].x)/sp->chasetime; sp->cam[1].y += (Y(1, 0) - sp->cam[1].y)/sp->chasetime; sp->cam[1].z += (Z(1, 0) - sp->cam[1].z)/sp->chasetime; /* Camera Wing targets bee 1 */ sp->cam[2].x += (X(0, 1) - sp->cam[2].x)/sp->chasetime; sp->cam[2].y += (Y(0, 1) - sp->cam[2].y)/sp->chasetime; sp->cam[2].z += (Z(0, 1) - sp->cam[2].z)/sp->chasetime; } else { /* Camera Head targets Orbiter */ sp->cam[0].x += (sp->circle[0].x - sp->cam[0].x)/sp->chasetime; sp->cam[0].y += (sp->circle[0].y - sp->cam[0].y)/sp->chasetime; sp->cam[0].z += (sp->circle[0].z - sp->cam[0].z)/sp->chasetime; /* Camera Tail targets diametrically opposite the middle of the bounding box from the Orbiter */ sp->cam[1].x += (2*sp->circle[0].x - sp->mid.x - sp->cam[1].x)/sp->chasetime; sp->cam[1].y += (2*sp->circle[0].y - sp->mid.y - sp->cam[1].y)/sp->chasetime; sp->cam[1].z += (2*sp->circle[0].z - sp->mid.z - sp->cam[1].z)/sp->chasetime; /* Camera Wing targets previous position of Orbiter */ sp->cam[2].x += (sp->circle[1].x - sp->cam[2].x)/sp->chasetime; sp->cam[2].y += (sp->circle[1].y - sp->cam[2].y)/sp->chasetime; sp->cam[2].z += (sp->circle[1].z - sp->cam[2].z)/sp->chasetime; } /* Viewpoint from Tail of camera */ sp->centre.x=sp->cam[1].x; sp->centre.y=sp->cam[1].y; sp->centre.z=sp->cam[1].z; /* forward vector */ x[0] = sp->cam[0].x - sp->cam[1].x; x[1] = sp->cam[0].y - sp->cam[1].y; x[2] = sp->cam[0].z - sp->cam[1].z; /* side */ p[0] = sp->cam[2].x - sp->cam[1].x; p[1] = sp->cam[2].y - sp->cam[1].y; p[2] = sp->cam[2].z - sp->cam[1].z; /* So long as X and P don't collide, these can be used to form three mutually othogonal axes: X, (X x P) x X and X x P. After being normalised to unit length, these form the Orientation Matrix. */ for(i=0; i<3; i++){ x2+= x[i]*x[i]; /* X . X */ xp+= x[i]*p[i]; /* X . P */ M[0][i] = x[i]; /* X */ } for(i=0; i<3; i++) /* (X x P) x X */ M[1][i] = x2*p[i] - xp*x[i]; /* == (X . X) P - (X . P) X */ M[2][0] = x[1]*p[2] - x[2]*p[1]; /* X x P */ M[2][1] = -x[0]*p[2] + x[2]*p[0]; M[2][2] = x[0]*p[1] - x[1]*p[0]; /* normalise axes */ for(j=0; j<3; j++){ double A=0; for(i=0; i<3; i++) A+=M[j][i]*M[j][i]; /* sum squares */ A=sqrt(A); if(A>0) for(i=0; i<3; i++) M[j][i]/=A; } if(sp->chaseto == BEE) { X(0, 1)=X(0, 0)+M[1][0]*sp->step; /* adjust neighbour */ Y(0, 1)=Y(0, 0)+M[1][1]*sp->step; Z(0, 1)=Z(0, 0)+M[1][2]*sp->step; } } /* <=- Bounding Box -=> */ if(boxp) { for (b = 0; b < BOX_L; b++) { /* Chalky's clipping code, Only used for the box */ /* clipping trails is slow and of little benefit. [TDA] */ int p1 = lines[b][0]; int p2 = lines[b][1]; dvector A1, A2; double x1=box[p1][0]* sp->size/2 + sp->mid.x - sp->centre.x; double y1=box[p1][1]* sp->size/2 + sp->mid.y - sp->centre.y; double z1=box[p1][2]* sp->size/2 + sp->mid.z - sp->centre.z; double x2=box[p2][0]* sp->size/2 + sp->mid.x - sp->centre.x; double y2=box[p2][1]* sp->size/2 + sp->mid.y - sp->centre.y; double z2=box[p2][2]* sp->size/2 + sp->mid.z - sp->centre.z; A1.x=M[0][0]*x1 + M[0][1]*y1 + M[0][2]*z1; A1.y=M[1][0]*x1 + M[1][1]*y1 + M[1][2]*z1; A1.z=M[2][0]*x1 + M[2][1]*y1 + M[2][2]*z1 + EYEHEIGHT * sp->size; A2.x=M[0][0]*x2 + M[0][1]*y2 + M[0][2]*z2; A2.y=M[1][0]*x2 + M[1][1]*y2 + M[1][2]*z2; A2.z=M[2][0]*x2 + M[2][1]*y2 + M[2][2]*z2 + EYEHEIGHT * sp->size; /* Clip in 3D before projecting down to 2D. A 2D clip after projection wouldn't be able to handle lines that cross x=0 */ if (clip(1, 0, 0,-1, &A1, &A2) || /* Screen */ clip(1, 2, 0, 0, &A1, &A2) || /* Left */ clip(1,-2, 0, 0, &A1, &A2) || /* Right */ clip(1,0, 2.0*MI_WIDTH(mi)/MI_HEIGHT(mi), 0, &A1, &A2)||/*UP*/ clip(1,0,-2.0*MI_WIDTH(mi)/MI_HEIGHT(mi), 0, &A1, &A2))/*Down*/ continue; /* Colour according to bee */ col = b % (MI_NPIXELS(mi) - 1); sp->csegs[IX(col)].x1 = MI_WIDTH(mi)/2 + MI_WIDTH(mi) * A1.y/A1.x; sp->csegs[IX(col)].y1 = MI_HEIGHT(mi)/2 + MI_WIDTH(mi) * A1.z/A1.x; sp->csegs[IX(col)].x2 = MI_WIDTH(mi)/2 + MI_WIDTH(mi) * A2.y/A2.x; sp->csegs[IX(col)].y2 = MI_HEIGHT(mi)/2 + MI_WIDTH(mi) * A2.z/A2.x; sp->cnsegs[col]++; } } /* <=- Bees -=> */ for (b = 0; b < sp->beecount; b++) { if(fabs(X(0, b)) > LOST_IN_SPACE || fabs(Y(0, b)) > LOST_IN_SPACE || fabs(Z(0, b)) > LOST_IN_SPACE){ if(sp->chaseto == BEE && b == 0){ /* Lost camera bee. Need to replace it since rerunning init_flow could lose us a hard-won new attractor. Try moving it very close to a random other bee. This way we have a good chance of being close to the attractor and not forming a false artifact. If we've lost many bees this may need to be repeated. */ /* Don't worry about camera wingbee. It stays close to the main camera bee no matter what happens. */ int newb = 1 + NRAND(sp->beecount - 1); X(0, 0) = X(0, newb) + 0.001; Y(0, 0) = Y(0, newb); Z(0, 0) = Z(0, newb); if(MI_IS_VERBOSE(mi)) fprintf(stdout, "flow: resetting lost camera near bee %d\n", newb); } continue; } /* Age the tail. It's critical this be fast since beecount*taillen can be large. */ memmove(B(1, b), B(0, b), (sp->taillen - 1) * sizeof(dvector)); Iterate(B(0,b), sp->ODE, sp->par, sp->step); /* Don't show wingbee since he's not quite in the flow. */ if(sp->chaseto == BEE && b == 1) continue; /* Colour according to bee */ col = b % (MI_NPIXELS(mi) - 1); /* Fill the segment lists. */ begin = 0; /* begin new trail */ end = MIN(sp->taillen, sp->count); /* short trails at first */ for(i=0; i < end; i++){ double x = X(i,b)-sp->centre.x; double y = Y(i,b)*(sp->yperiod < 0? (sp->size/sp->yperiod) :1) -sp->centre.y; double z = Z(i,b)-sp->centre.z; double XM=M[0][0]*x + M[0][1]*y + M[0][2]*z; double YM=M[1][0]*x + M[1][1]*y + M[1][2]*z; double ZM=M[2][0]*x + M[2][1]*y + M[2][2]*z + EYEHEIGHT * sp->size; short absx, absy; swarm++; /* count the remaining bees */ if(sp->yperiod > 0 && Y(i,b) > sp->yperiod){ int j; Y(i,b) -= sp->yperiod; /* hide tail to prevent streaks in Y. Streaks in X,Z are ok, they help to outline the Poincare' slice. */ for(j = i; j < end; j++) Y(j,b) = Y(i,b); /*begin = i + 1;*/ break; } if(XM <= 0){ /* off screen - new trail */ begin = i + 1; continue; } absx = MI_WIDTH(mi)/2 + MI_WIDTH(mi) * YM/XM; absy = MI_HEIGHT(mi)/2 + MI_WIDTH(mi) * ZM/XM; /* Performance bottleneck */ if(absx <= 0 || absx >= MI_WIDTH(mi) || absy <= 0 || absy >= MI_HEIGHT(mi)) { /* off screen - new trail */ begin = i + 1; continue; } if(i > begin) { /* complete previous segment */ sp->csegs[IX(col)].x2 = absx; sp->csegs[IX(col)].y2 = absy; sp->cnsegs[col]++; } if(i < end -1){ /* start new segment */ sp->csegs[IX(col)].x1 = absx; sp->csegs[IX(col)].y1 = absy; } } } /* Erase */ XSetForeground(MI_DISPLAY(mi), MI_GC(mi), MI_BLACK_PIXEL(mi)); if (dbufp) { /* In Double Buffer case, prepare off-screen copy */ /* For slow systems, this can be the single biggest bottleneck in the program. These systems may be better of not using the double buffer. */ XFillRectangle(MI_DISPLAY(mi), sp->buffer, MI_GC(mi), 0, 0, MI_WIDTH(mi), MI_HEIGHT(mi)); } else { /* Otherwise, erase previous segment list directly */ XDrawSegments(MI_DISPLAY(mi), sp->buffer, MI_GC(mi), sp->old_segs, sp->nold_segs); } /* Render */ if (MI_NPIXELS(mi) > 2){ /* colour */ int mn = 0; for (col = 0; col < MI_NPIXELS(mi) - 1; col++) if (sp->cnsegs[col] > 0) { if(sp->cnsegs[col] > mn) mn = sp->cnsegs[col]; XSetForeground(MI_DISPLAY(mi), MI_GC(mi), MI_PIXEL(mi, col+1)); /* This is usually the biggest bottleneck on most systems. The maths load is insignificant compared to this. */ XDrawSegments(MI_DISPLAY(mi), sp->buffer, MI_GC(mi), sp->csegs + col * segindex, sp->cnsegs[col]); } } else { /* mono handled seperately since xlockmore uses '1' for mono white! */ XSetForeground(MI_DISPLAY(mi), MI_GC(mi), MI_WHITE_PIXEL(mi)); XDrawSegments(MI_DISPLAY(mi), sp->buffer, MI_GC(mi), sp->csegs, sp->cnsegs[0]); } if (dbufp) { /* In Double Buffer case, this updates the screen */ XCopyArea(MI_DISPLAY(mi), sp->buffer, MI_WINDOW(mi), MI_GC(mi), 0, 0, MI_WIDTH(mi), MI_HEIGHT(mi), 0, 0); } else { /* Otherwise, screen is already updated. Copy segments to erase-list to be erased directly next time. */ int c = 0; for (col = 0; col < MI_NPIXELS(mi) - 1; col++) { memcpy(sp->old_segs + c, sp->csegs + col * segindex, sp->cnsegs[col] * sizeof(XSegment)); c += sp->cnsegs[col]; } sp->nold_segs = c; } if(sp->count > 1 && swarm == 0) { /* all gone */ if(MI_IS_VERBOSE(mi)) fprintf(stdout, "flow: all gone at %d\n", sp->count); init_flow(mi); } if(sp->count++ > MI_CYCLES(mi)){ /* Time's up. If we haven't found anything new by now we should pick a new standard flow */ init_flow(mi); } } ENTRYPOINT void reshape_flow(ModeInfo * mi, int width, int height) { init_flow (mi); } ENTRYPOINT void release_flow (ModeInfo * mi) { if (flows != NULL) { int screen; for (screen = 0; screen < MI_NUM_SCREENS(mi); screen++) free_flow(&flows[screen]); free(flows); flows = (flowstruct *) NULL; } } ENTRYPOINT void refresh_flow (ModeInfo * mi) { if(!dbufp) MI_CLEARWINDOW(mi); } ENTRYPOINT Bool flow_handle_event (ModeInfo *mi, XEvent *event) { if (screenhack_event_helper (MI_DISPLAY(mi), MI_WINDOW(mi), event)) { init_flow (mi); return True; } return False; } XSCREENSAVER_MODULE ("Flow", flow) #endif /* MODE_flow */ xscreensaver-5.36/hacks/epicycle.c000664 000767 000024 00000045043 12710314210 017167 0ustar00jwzstaff000000 000000 /* epicycle --- The motion of a body with epicycles, as in the pre-Copernican * cosmologies. * * Copyright (c) 1998 James Youngman * * 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. */ /* Standard C headers; screenhack.h assumes that these have already * been included if required -- for example, it defines M_PI if not * already defined. */ #include #include #include "screenhack.h" #include "erase.h" /* MIT-SHM headers omitted; this screenhack doesn't use it */ /*********************************************************/ /******************** MAGIC CONSTANTS ********************/ /*********************************************************/ #define MIN_RADIUS (5) /* smallest allowable circle radius */ #define FILL_PROPORTION (0.9) /* proportion of screen to fill by scaling. */ /*********************************************************/ /***************** END OF MAGIC CONSTANTS ****************/ /*********************************************************/ #define FULLCIRCLE (2.0 * M_PI) /* radians in a circle. */ /* Some of these resource values here are hand-tuned to give a * pleasing variety of interesting shapes. These are not the only * good settings, but you may find you need to change some as a group * to get pleasing figures. */ static const char *epicycle_defaults [] = { ".background: black", ".foreground: white", "*fpsSolid: true", "*colors: 100", "*color0: red", "*delay: 20000", "*holdtime: 2", "*lineWidth: 4", "*minCircles: 2", "*maxCircles: 10", "*minSpeed: 0.003", "*maxSpeed: 0.005", "*harmonics: 8", "*timestep: 1.0", "*timestepCoarseFactor: 1.0", /* no option for this resource. */ "*divisorPoisson: 0.4", "*sizeFactorMin: 1.05", "*sizeFactorMax: 2.05", #ifdef HAVE_MOBILE "*ignoreRotation: True", #endif 0 }; /* options passed to this program */ static XrmOptionDescRec epicycle_options [] = { { "-color0", ".color0", XrmoptionSepArg, 0 }, { "-colors", ".colors", XrmoptionSepArg, 0 }, { "-colours", ".colors", XrmoptionSepArg, 0 }, { "-foreground", ".foreground", XrmoptionSepArg, 0 }, { "-delay", ".delay", XrmoptionSepArg, 0 }, { "-holdtime", ".holdtime", XrmoptionSepArg, 0 }, { "-linewidth", ".lineWidth", XrmoptionSepArg, 0 }, { "-min_circles", ".minCircles", XrmoptionSepArg, 0 }, { "-max_circles", ".maxCircles", XrmoptionSepArg, 0 }, { "-min_speed", ".minSpeed", XrmoptionSepArg, 0 }, { "-max_speed", ".maxSpeed", XrmoptionSepArg, 0 }, { "-harmonics", ".harmonics", XrmoptionSepArg, 0 }, { "-timestep", ".timestep", XrmoptionSepArg, 0 }, { "-divisor_poisson",".divisorPoisson",XrmoptionSepArg, 0 }, { "-size_factor_min", ".sizeFactorMin", XrmoptionSepArg, 0 }, { "-size_factor_max", ".sizeFactorMax", XrmoptionSepArg, 0 }, { 0, 0, 0, 0 } }; /* Each circle is centred on a point on the rim of another circle. */ struct tagCircle { long radius; /* in pixels */ double w; /* position (radians ccw from x-axis) */ double initial_w; /* starting position */ double wdot; /* rotation rate (change in w per iteration) */ int divisor; struct tagCircle *pchild; }; typedef struct tagCircle Circle; struct tagBody /* a body that moves on a system of circles. */ { int x_origin, y_origin; int x, y; int old_x, old_y; int current_color; /* pixel index into colors[] */ Circle *epicycles; /* system of circles on which it moves. */ struct tagBody *next; /* next in list. */ }; typedef struct tagBody Body; struct state { Display *dpy; Window window; GC color0; int width, height; int x_offset, y_offset; int unit_pixels; unsigned long bg; Colormap cmap; int restart; double wdot_max; XColor *colors; int ncolors; int color_shift_pos; /* how far we are towards that. */ double colour_cycle_rate; int harmonics; double divisorPoisson; double sizeFactorMin; double sizeFactorMax; int minCircles; int maxCircles; Bool done; long L; double T, timestep, circle, timestep_coarse; int delay; int uncleared; int holdtime; int xmax, xmin, ymax, ymin; Body *pb0; double xtime; eraser_state *eraser; }; /* Determine the GCD of two numbers using Euclid's method. The other * possible algorighm is Stein's method, but it's probably only going * to be much faster on machines with no divide instruction, like the * ARM and the Z80. The former is very fast anyway and the latter * probably won't run X clients; in any case, this calculation is not * the bulk of the computational expense of the program. I originally * tried using Stein's method, but I wanted to remove the gotos. Not * wanting to introduce possible bugs, I plumped for Euclid's method * instead. Lastly, Euclid's algorithm is preferred to the * generalisation for N inputs. * * See Knuth, section 4.5.2. */ static int gcd(int u, int v) /* Euclid's Method */ { /* If either operand of % is negative, the sign of the result is * implementation-defined. See section 6.3.5 "Multiplicative * Operators" of the ANSI C Standard (page 46 [LEFT HAND PAGE!] of * "Annotated C Standard", Osborne, ISBN 0-07-881952-0). */ if (u < 0) u = -u; if (v < 0) v = -v; while (0 != v) { int r; r = u % v; u = v; v = r; } return u; } /* Determine the Lowest Common Multiple of two integers, using * Euclid's Proposition 34, as explained in Knuth's The Art of * Computer Programming, Vol 2, section 4.5.2. */ static int lcm(int u, int v) { return u / gcd(u,v) * v; } static long random_radius(struct state *st, double scale) { long r; r = frand(scale) * st->unit_pixels/2; /* for frand() see utils/yarandom.h */ if (r < MIN_RADIUS) r = MIN_RADIUS; return r; } static long random_divisor(struct state *st) { int divisor = 1; int sign; while (frand(1.0) < st->divisorPoisson && divisor <= st->harmonics) { ++divisor; } sign = (frand(1.0) < 0.5) ? +1 : -1; return sign * divisor; } /* Construct a circle or die. */ static Circle * new_circle(struct state *st, double scale) { Circle *p = malloc(sizeof(Circle)); p->radius = random_radius(st, scale); p->w = p->initial_w = 0.0; p->divisor = random_divisor(st); p->wdot = st->wdot_max / p->divisor; p->pchild = NULL; return p; } static void delete_circle(Circle *p) { free(p); } static void delete_circle_chain(Circle *p) { while (p) { Circle *q = p->pchild; delete_circle(p); p = q; } } static Circle * new_circle_chain(struct state *st) { Circle *head; double scale = 1.0, factor; int n; /* Parent circles are larger than their children by a factor of at * least FACTOR_MIN and at most FACTOR_MAX. */ factor = st->sizeFactorMin + frand(st->sizeFactorMax - st->sizeFactorMin); /* There are between minCircles and maxCircles in each figure. */ if (st->maxCircles == st->minCircles) n = st->minCircles; /* Avoid division by zero. */ else n = st->minCircles + random() % (st->maxCircles - st->minCircles); head = NULL; while (n--) { Circle *p = new_circle(st, scale); p->pchild = head; head = p; scale /= factor; } return head; } static void assign_random_common_w(Circle *p) { double w_common = frand(FULLCIRCLE); /* anywhere on the circle */ while (p) { p->initial_w = w_common; p = p->pchild; } } static Body * new_body(struct state *st) { Body *p = malloc(sizeof(Body)); if (!p) abort(); p->epicycles = new_circle_chain(st); p->current_color = 0; /* ?? start them all on different colors? */ p->next = NULL; p->x = p->y = 0; p->old_x = p->old_y = 0; p->x_origin = p->y_origin = 0; /* Start all the epicycles at the same w value to make it easier to * figure out at what T value the cycle is closed. We don't just fix * the initial W value because that makes all the patterns tend to * be symmetrical about the X axis. */ assign_random_common_w(p->epicycles); return p; } static void delete_body(Body *p) { delete_circle_chain(p->epicycles); free(p); } static void draw_body(struct state *st, Body *pb, GC gc) { XDrawLine(st->dpy, st->window, gc, pb->old_x, pb->old_y, pb->x, pb->y); } static long compute_divisor_lcm(Circle *p) { long l = 1; while (p) { l = lcm(l, p->divisor); p = p->pchild; } return l; } /* move_body() * * Calculate the position for the body at time T. We work in double * rather than int to avoid the cumulative errors that would be caused * by the rounding implicit in an assignment to int. */ static void move_body(Body *pb, double t) { Circle *p; double x, y; pb->old_x = pb->x; pb->old_y = pb->y; x = pb->x_origin; y = pb->y_origin; for (p=pb->epicycles; NULL != p; p=p->pchild) { /* angular pos = initial_pos + time * angular speed */ /* but this is an angular position, so modulo FULLCIRCLE. */ p->w = fmod(p->initial_w + (t * p->wdot), FULLCIRCLE); x += (p->radius * cos(p->w)); y += (p->radius * sin(p->w)); } pb->x = (int)x; pb->y = (int)y; } static int colour_init(struct state *st, XWindowAttributes *pxgwa) { XGCValues gcv; #if 0 int H = random() % 360; /* colour choice from attraction.c. */ double S1 = 0.25; double S2 = 1.00; double V = frand(0.25) + 0.75; int line_width = 0; #endif int retval = 1; unsigned long valuemask = 0L; unsigned long fg; /* Free any already allocated colors... */ if (st->colors) { free_colors(pxgwa->screen, st->cmap, st->colors, st->ncolors); st->colors = 0; st->ncolors = 0; } st->ncolors = get_integer_resource (st->dpy, "colors", "Colors"); if (0 == st->ncolors) /* English spelling? */ st->ncolors = get_integer_resource (st->dpy, "colours", "Colors"); if (st->ncolors < 2) st->ncolors = 2; if (st->ncolors <= 2) mono_p = True; st->colors = 0; if (!mono_p) { st->colors = (XColor *) malloc(sizeof(*st->colors) * (st->ncolors+1)); if (!st->colors) abort(); make_smooth_colormap (pxgwa->screen, pxgwa->visual, st->cmap, st->colors, &st->ncolors, True, /* allocate */ False, /* not writable */ True); /* verbose (complain about failure) */ if (st->ncolors <= 2) { if (st->colors) free (st->colors); st->colors = 0; mono_p = True; } } st->bg = get_pixel_resource (st->dpy, st->cmap, "background", "Background"); /* Set the line width */ gcv.line_width = get_integer_resource (st->dpy, "lineWidth", "Integer"); if (gcv.line_width) { valuemask |= GCLineWidth; gcv.join_style = JoinRound; gcv.cap_style = CapRound; valuemask |= (GCCapStyle | GCJoinStyle); } /* Set the drawing function. */ gcv.function = GXcopy; valuemask |= GCFunction; /* Set the foreground. */ /* if (mono_p)*/ fg = get_pixel_resource (st->dpy, st->cmap, "foreground", "Foreground"); /* WTF? else fg = st->bg ^ get_pixel_resource (st->dpy, st->cmap, ("color0"), "Foreground"); */ gcv.foreground = fg; valuemask |= GCForeground; /* Actually create the GC. */ st->color0 = XCreateGC (st->dpy, st->window, valuemask, &gcv); return retval; } static void setup(struct state *st) { XWindowAttributes xgwa; XGetWindowAttributes (st->dpy, st->window, &xgwa); st->cmap = xgwa.colormap; st->width = xgwa.width; st->height = xgwa.height; st->x_offset = st->width / 2; st->y_offset = st->height / 2; st->unit_pixels = st->width < st->height ? st->width : st->height; { if (!st->done) { colour_init(st, &xgwa); st->done = True; } } } static void color_step(struct state *st, Body *pb, double frac) { if (!mono_p) { int newshift = st->ncolors * fmod(frac * st->colour_cycle_rate, 1.0); if (newshift != st->color_shift_pos) { pb->current_color = newshift; XSetForeground (st->dpy, st->color0, st->colors[pb->current_color].pixel); st->color_shift_pos = newshift; } } } #if 0 static long distance(long x1, long y1, long x2, long y2) { long dx, dy; dx = x2 - x1; dy = y2 - y1; return dx*dx + dy*dy; } static int poisson_irand(double p) { int r = 1; while (fabs(frand(1.0)) < p) ++r; return r < 1 ? 1 : r; } #endif static void precalculate_figure(Body *pb, double this_xtime, double step, int *x_max, int *y_max, int *x_min, int *y_min) { double t; move_body(pb, 0.0); /* move once to avoid initial line from origin */ *x_min = *x_max = pb->x; *y_min = *y_max = pb->y; for (t=0.0; tx > *x_max) *x_max = pb->x; if (pb->x < *x_min) *x_min = pb->x; if (pb->y > *y_max) *y_max = pb->y; if (pb->y < *y_min) *y_min = pb->y; } } static int i_max(int a, int b) { return (a>b) ? a : b; } static void rescale_circles(struct state *st, Body *pb, int x_max, int y_max, int x_min, int y_min) { double xscale, yscale, scale; double xm, ym; x_max -= st->x_offset; x_min -= st->x_offset; y_max -= st->y_offset; y_min -= st->y_offset; x_max = i_max(x_max, -x_min); y_max = i_max(y_max, -y_min); xm = st->width / 2.0; ym = st->height / 2.0; if (x_max > xm) xscale = xm / x_max; else xscale = 1.0; if (y_max > ym) yscale = ym / y_max; else yscale = 1.0; if (xscale < yscale) /* wider than tall */ scale = xscale; /* ensure width fits onscreen */ else scale = yscale; /* ensure height fits onscreen */ scale *= FILL_PROPORTION; /* only fill FILL_PROPORTION of screen */ if (scale < 1.0) /* only reduce, don't enlarge. */ { Circle *p; for (p=pb->epicycles; p; p=p->pchild) { p->radius *= scale; } } else { printf("enlarge by x%.2f skipped...\n", scale); } } /* angular speeds of the circles are harmonics of a fundamental * value. That should please the Pythagoreans among you... :-) */ static double random_wdot_max(struct state *st) { /* Maximum and minimum values for the choice of wdot_max. Possible * epicycle speeds vary from wdot_max to (wdot_max * harmonics). */ double minspeed, maxspeed; minspeed = get_float_resource(st->dpy, "minSpeed", "Double"); maxspeed = get_float_resource(st->dpy, "maxSpeed", "Double"); return st->harmonics * (minspeed + FULLCIRCLE * frand(maxspeed-minspeed)); } static void * epicycle_init (Display *disp, Window win) { struct state *st = (struct state *) calloc (1, sizeof(*st)); st->dpy = disp; st->window = win; st->holdtime = get_integer_resource (st->dpy, "holdtime", "Integer"); st->circle = FULLCIRCLE; XClearWindow(st->dpy, st->window); st->uncleared = 0; st->restart = 1; st->delay = get_integer_resource (st->dpy, "delay", "Integer"); st->harmonics = get_integer_resource(st->dpy, "harmonics", "Integer"); st->divisorPoisson = get_float_resource(st->dpy, "divisorPoisson", "Double"); st->timestep = get_float_resource(st->dpy, "timestep", "Double"); st->timestep_coarse = st->timestep * get_float_resource(st->dpy, "timestepCoarseFactor", "Double"); st->sizeFactorMin = get_float_resource(st->dpy, "sizeFactorMin", "Double"); st->sizeFactorMax = get_float_resource(st->dpy, "sizeFactorMax", "Double"); st->minCircles = get_integer_resource (st->dpy, "minCircles", "Integer"); st->maxCircles = get_integer_resource (st->dpy, "maxCircles", "Integer"); st->xtime = 0; /* is this right? */ return st; } static unsigned long epicycle_draw (Display *dpy, Window window, void *closure) { struct state *st = (struct state *) closure; int this_delay = st->delay; if (st->eraser) { st->eraser = erase_window (st->dpy, st->window, st->eraser); return 10000; } if (st->restart) { setup(st); st->restart = 0; /* Flush any outstanding events; this has the side effect of * reducing the number of "false restarts"; resdtarts caused by * one event (e.g. ConfigureNotify) followed by another * (e.g. Expose). */ st->wdot_max = random_wdot_max(st); if (st->pb0) { delete_body(st->pb0); st->pb0 = NULL; } st->pb0 = new_body(st); st->pb0->x_origin = st->pb0->x = st->x_offset; st->pb0->y_origin = st->pb0->y = st->y_offset; if (st->uncleared) { st->eraser = erase_window (st->dpy, st->window, st->eraser); st->uncleared = 0; } precalculate_figure(st->pb0, st->xtime, st->timestep_coarse, &st->xmax, &st->ymax, &st->xmin, &st->ymin); rescale_circles(st, st->pb0, st->xmax, st->ymax, st->xmin, st->ymin); move_body(st->pb0, 0.0); /* move once to avoid initial line from origin */ move_body(st->pb0, 0.0); /* move once to avoid initial line from origin */ st->T = 0.0; /* start at time zero. */ st->L = compute_divisor_lcm(st->pb0->epicycles); st->colour_cycle_rate = labs(st->L); st->xtime = fabs(st->L * st->circle / st->wdot_max); if (st->colors) /* (colors==NULL) if mono_p */ XSetForeground (st->dpy, st->color0, st->colors[st->pb0->current_color].pixel); } color_step(st, st->pb0, st->T/st->xtime ); draw_body(st, st->pb0, st->color0); st->uncleared = 1; /* Check if the figure is complete...*/ if (st->T > st->xtime) { this_delay = st->holdtime * 1000000; st->restart = 1; /* begin new figure. */ } st->T += st->timestep; move_body(st->pb0, st->T); return this_delay; } static void epicycle_reshape (Display *dpy, Window window, void *closure, unsigned int w, unsigned int h) { struct state *st = (struct state *) closure; st->restart = 1; } static Bool epicycle_event (Display *dpy, Window window, void *closure, XEvent *e) { struct state *st = (struct state *) closure; if (screenhack_event_helper (dpy, window, e)) { st->restart = 1; return True; } return False; } static void epicycle_free (Display *dpy, Window window, void *closure) { struct state *st = (struct state *) closure; free (st); } XSCREENSAVER_MODULE ("Epicycle", epicycle) xscreensaver-5.36/hacks/interference.c000644 000767 000024 00000072231 12717750047 020063 0ustar00jwzstaff000000 000000 /* interference.c --- colored fields via decaying sinusoidal waves. * An entry for the RHAD Labs Screensaver Contest. * * Author: Hannu Mallat * * Copyright (C) 1998 Hannu Mallat. * * 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. * * decaying sinusoidal waves, which extend spherically from their * respective origins, move around the plane. a sort of interference * between them is calculated and the resulting twodimensional wave * height map is plotted in a grid, using softly changing colours. * * not physically (or in any sense) accurate, but fun to look at for * a while. you may tune the speed/resolution/interestingness tradeoff * with X resources, see below. * * Created : Wed Apr 22 09:30:30 1998, hmallat * Last modified: Wed Apr 22 09:30:30 1998, hmallat * Last modified: Sun Aug 31 23:40:14 2003, * david slimp * added -hue option to specify base color hue * Last modified: Wed May 15 00:04:43 2013, * Dave Odell * Tuned performance; double-buffering is now off by default. * Made animation speed independent of FPS. * Added cleanup code, fixed a few glitches. * Added gratuitous #ifdefs. * Last modified: Fri Feb 21 02:14:29 2014, * Added support for SMP rendering. * Tweaked math a bit re: performance. * Last modified: Tue Dec 30 16:43:33 2014, * Killed the black margin on the right and bottom. * Reduced the default grid size to 2. */ #include #include #include "screenhack.h" #include "thread_util.h" #ifdef HAVE_INTTYPES_H # include #else typedef unsigned int uint32_t; typedef unsigned short uint16_t; typedef unsigned char uint8_t; #endif /* Tested on an Intel(R) Pentium(R) 4 CPU 3.00GHz (family 15, model 6, 2 cores), 1 GB PC2-4200, nouveau - Gallium 0.4 on NV44, X.Org version: 1.13.3. A very modest system by current standards. Does double-buffering make sense? (gridsize = 2) USE_XIMAGE is off: Yes (-db: 4.1 FPS, -no-db: 2.9 FPS) XPutImage in strips: No (-db: 35.9 FPS, -no-db: 38.7 FPS) XPutImage, whole image: No (-db: 32.3 FPS, -no-db: 33.7 FPS) MIT-SHM, whole image: Doesn't work anyway: (-no-db: 37.3 FPS) If gridsize = 1, XPutImage is slow when the XImage is one line at a time. XPutImage in strips: -db: 21.2 FPS, -no-db: 19.7 FPS XPutimage, whole image: -db: 23.2 FPS, -no-db: 23.4 FPS MIT-SHM: 26.0 FPS So XPutImage in strips is very slightly faster when gridsize >= 2, but quite a bit worse when gridsize = 1. */ /* I thought it would be faster this way, but it turns out not to be... -jwz */ /* It's a lot faster for me, though - D.O. */ #define USE_XIMAGE /* i.e. make the XImage the size of the screen. This is much faster when * gridsize = 1. (And SHM is turned off.) */ #define USE_BIG_XIMAGE /* Numbers are wave_table size, measured in # of unsigned integers. * FPS/radius = 50/radius = 800/radius = 1500/Big-O memory usage * * Use at most one of the following: * Both off = regular sqrt() - 13.5 FPS, 50/800/1500. */ /* #define USE_FAST_SQRT_HACKISH */ /* 17.8 FPS/2873/4921/5395/O(lg(radius)) */ #define USE_FAST_SQRT_BIGTABLE2 /* 26.1 FPS/156/2242/5386/O(radius^2) */ #ifndef USE_XIMAGE # undef HAVE_XSHM_EXTENSION /* only applicable when using XImages */ #endif /* USE_XIMAGE */ #ifdef HAVE_DOUBLE_BUFFER_EXTENSION # include "xdbe.h" #endif /* HAVE_DOUBLE_BUFFER_EXTENSION */ #ifdef HAVE_XSHM_EXTENSION # include "xshm.h" #endif /* HAVE_XSHM_EXTENSION */ static const char *interference_defaults [] = { ".background: black", ".foreground: white", "*count: 3", /* number of waves */ "*gridsize: 2", /* pixel size, smaller values for better resolution */ "*ncolors: 192", /* number of colours used */ "*hue: 0", /* hue to use for base color (0-360) */ "*speed: 30", /* speed of wave origins moving around */ "*delay: 30000", /* or something */ "*color-shift: 60", /* h in hsv space, smaller values for smaller * color gradients */ "*radius: 800", /* wave extent */ "*gray: false", /* color or grayscale */ "*mono: false", /* monochrome, not very much fun */ "*doubleBuffer: False", /* doubleBuffer slows things down for me - D.O. */ #ifdef HAVE_DOUBLE_BUFFER_EXTENSION "*useDBE: True", /* use double buffering extension */ #endif /* HAVE_DOUBLE_BUFFER_EXTENSION */ #ifdef HAVE_XSHM_EXTENSION "*useSHM: True", /* use shared memory extension */ #endif /* HAVE_XSHM_EXTENSION */ #ifdef HAVE_MOBILE "*ignoreRotation: True", #endif THREAD_DEFAULTS 0 }; static XrmOptionDescRec interference_options [] = { { "-count", ".count", XrmoptionSepArg, 0 }, { "-ncolors", ".ncolors", XrmoptionSepArg, 0 }, { "-gridsize", ".gridsize", XrmoptionSepArg, 0 }, { "-hue", ".hue", XrmoptionSepArg, 0 }, { "-speed", ".speed", XrmoptionSepArg, 0 }, { "-delay", ".delay", XrmoptionSepArg, 0 }, { "-color-shift", ".color-shift", XrmoptionSepArg, 0 }, { "-radius", ".radius", XrmoptionSepArg, 0 }, { "-gray", ".gray", XrmoptionNoArg, "True" }, { "-mono", ".mono", XrmoptionNoArg, "True" }, { "-db", ".doubleBuffer", XrmoptionNoArg, "True" }, { "-no-db", ".doubleBuffer", XrmoptionNoArg, "False" }, #ifdef HAVE_XSHM_EXTENSION { "-shm", ".useSHM", XrmoptionNoArg, "True" }, { "-no-shm", ".useSHM", XrmoptionNoArg, "False" }, #endif /* HAVE_XSHM_EXTENSION */ THREAD_OPTIONS { 0, 0, 0, 0 } }; struct inter_source { int x; int y; double x_theta; double y_theta; }; struct inter_context { /* * Display-related entries */ Display* dpy; Window win; #ifdef HAVE_DOUBLE_BUFFER_EXTENSION XdbeBackBuffer back_buf; #endif /* HAVE_DOUBLE_BUFFER_EXTENSION */ Pixmap pix_buf; GC copy_gc; #ifdef USE_XIMAGE XImage *ximage; #endif /* USE_XIMAGE */ #ifdef HAVE_XSHM_EXTENSION Bool use_shm, shm_can_draw; XShmSegmentInfo shm_info; #endif /* HAVE_XSHM_EXTENSION */ /* * Resources */ int count; int grid_size; int colors; float hue; int speed; int delay; int shift; /* * Drawing-related entries */ int w; int h; unsigned w_div_g, h_div_g; Colormap cmap; Screen *screen; unsigned bits_per_pixel; XColor* pal; #ifndef USE_XIMAGE GC* gcs; #endif int radius; /* Not always the same as the X resource. */ double last_frame; struct threadpool threadpool; /* * lookup tables */ unsigned* wave_height; /* * Interference sources */ struct inter_source* source; }; struct inter_thread { const struct inter_context *context; unsigned thread_id; #ifdef USE_XIMAGE uint32_t* row; #endif unsigned* result_row; }; #ifdef HAVE_DOUBLE_BUFFER_EXTENSION # define TARGET(c) ((c)->back_buf ? (c)->back_buf : \ (c)->pix_buf ? (c)->pix_buf : (c)->win) #else /* HAVE_DOUBLE_BUFFER_EXTENSION */ # define TARGET(c) ((c)->pix_buf ? (c)->pix_buf : (c)->win) #endif /* !HAVE_DOUBLE_BUFFER_EXTENSION */ #ifdef USE_FAST_SQRT_HACKISH /* Based loosely on code from Wikipedia: * https://en.wikipedia.org/wiki/Methods_of_computing_square_roots#Approximations_that_depend_on_IEEE_representation */ /* FAST_SQRT_EXTRA_BITS = 3: Smallest useful value * = 5/6: A little bit of banding, wave_height table is on par with regular * sqrt() code. * = 7: No apparent difference with original @ radius = 800. * = 8: One more just to be comfortable. */ # define FAST_SQRT_EXTRA_BITS 8 union int_float { uint32_t i; float f; }; static unsigned fast_log2(unsigned x) { union int_float u; if(!x) return x; u.f = x; return ((u.i - 0x3f800000) >> (23 - FAST_SQRT_EXTRA_BITS)) + 1; } static float fast_inv_log2(unsigned x) { union int_float u; if(!x) return 0.0f; u.i = ((x - 1) << (23 - FAST_SQRT_EXTRA_BITS)) + 0x3f800000; return u.f; } #endif #ifdef USE_FAST_SQRT_BIGTABLE2 /* I eyeballed these figures. They could be improved. - D.O. */ # define FAST_SQRT_DISCARD_BITS1 4 /* = 5: Dot in center is almost invisible at radius = 800. */ /* = 4: Dot in center looks OK at radius = 50. */ /* 156/2740/9029 */ /* # define FAST_SQRT_DISCARD_BITS2 8 */ /* # define FAST_SQRT_CUTOFF 64 * 64 */ /* 156/2242/5386 */ # define FAST_SQRT_DISCARD_BITS2 9 # define FAST_SQRT_CUTOFF 128 * 128 /* * This is a little faster: * 44.5 FPS, 19/5000/17578 * * # define FAST_SQRT_DISCARD_BITS1 7 * # define FAST_SQRT_DISCARD_BITS2 7 * # define FAST_SQRT_CUTOFF 0 * * For radius = 800, FAST_SQRT_DISCARD_BITS2 = * = 9/10: Approximately the original table size, some banding near origins. * = 7: wave_height is 20 KB, and just fits inside a 32K L1 cache. * = 6: Nearly indistinguishable from original */ /* FAST_TABLE(x) is equivalent to, but slightly faster than: x < FAST_SQRT_CUTOFF ? (x >> FAST_SQRT_DISCARD_BITS1) : ((x - FAST_SQRT_CUTOFF) >> FAST_SQRT_DISCARD_BITS2) + (FAST_SQRT_CUTOFF >> FAST_SQRT_DISCARD_BITS1); */ #define FAST_TABLE(x) \ ((x) < FAST_SQRT_CUTOFF ? \ ((x) >> FAST_SQRT_DISCARD_BITS1) : \ (((x) + \ ((FAST_SQRT_CUTOFF << (FAST_SQRT_DISCARD_BITS2 - \ FAST_SQRT_DISCARD_BITS1)) - FAST_SQRT_CUTOFF)) >> \ FAST_SQRT_DISCARD_BITS2)) static double fast_inv_table(unsigned x) { return x < (FAST_SQRT_CUTOFF >> FAST_SQRT_DISCARD_BITS1) ? (x << FAST_SQRT_DISCARD_BITS1) : ((x - (FAST_SQRT_CUTOFF >> FAST_SQRT_DISCARD_BITS1)) << FAST_SQRT_DISCARD_BITS2) + FAST_SQRT_CUTOFF; } #endif static void destroy_image(Display* dpy, struct inter_context* c) { #ifdef USE_XIMAGE if(c->ximage) { # ifdef HAVE_XSHM_EXTENSION if(c->use_shm) { destroy_xshm_image(dpy, c->ximage, &c->shm_info); } else # endif { /* Don't let XDestroyImage free c->ximage->data. */ thread_free(c->ximage->data); c->ximage->data = NULL; XDestroyImage(c->ximage); } } #endif if(c->threadpool.count) { threadpool_destroy(&c->threadpool); c->threadpool.count = 0; } } static void inter_free(Display* dpy, struct inter_context* c) { #ifndef USE_XIMAGE unsigned i; #endif if(c->pix_buf) XFreePixmap(dpy, c->pix_buf); if(c->copy_gc) XFreeGC(dpy, c->copy_gc); destroy_image(dpy, c); if(c->colors <= 2) free(c->pal); else free_colors(c->screen, c->cmap, c->pal, c->colors); #ifndef USE_XIMAGE for(i = 0; i != c->colors; ++i) XFreeGC(dpy, c->gcs[i]); free(c->gcs); #endif free(c->wave_height); free(c->source); } static void abort_on_error(int error) { fprintf(stderr, "interference: %s\n", strerror(error)); exit(1); } static void abort_no_mem(void) { abort_on_error(ENOMEM); } static void check_no_mem(Display* dpy, struct inter_context* c, void* ptr) { if(!ptr) { inter_free(dpy, c); abort_no_mem(); } } static int inter_thread_create( void* self_raw, struct threadpool* pool, unsigned id) { struct inter_thread* self = (struct inter_thread*)self_raw; const struct inter_context* c = GET_PARENT_OBJ(struct inter_context, threadpool, pool); self->context = c; self->thread_id = id; self->result_row = malloc(c->w_div_g * sizeof(unsigned)); if(!self->result_row) return ENOMEM; #ifdef USE_XIMAGE self->row = malloc(c->w_div_g * sizeof(uint32_t)); if(!self->row) { free(self->result_row); return ENOMEM; } #endif return 0; } static void inter_thread_destroy(void* self_raw) { struct inter_thread* self = (struct inter_thread*)self_raw; #ifdef USE_XIMAGE free(self->row); #endif free(self->result_row); } /* A higher performance design would have input and output queues, so that when worker threads finish with one frame, they can pull the next work order from the queue and get started on it immediately, rather than going straight to sleep. The current "single-buffered" design still provides reasonable performance at low frame rates; high frame rates are noticeably less efficient. */ static void inter_thread_run(void* self_raw) { struct inter_thread* self = (struct inter_thread*)self_raw; const struct inter_context* c = self->context; int i, j, k; unsigned result; int dist1; int g = c->grid_size; int dx, dy, g2 = 2 * g * g; int px, py, px2g; int dist0, ddist; #ifdef USE_XIMAGE unsigned img_y = g * self->thread_id; void *scanline = c->ximage->data + c->ximage->bytes_per_line * g * self->thread_id; #endif for(j = self->thread_id; j < c->h_div_g; j += c->threadpool.count) { px = g/2; py = j*g + px; memset(self->result_row, 0, c->w_div_g * sizeof(unsigned)); for(k = 0; k < c->count; k++) { dx = px - c->source[k].x; dy = py - c->source[k].y; dist0 = dx*dx + dy*dy; ddist = -2 * g * c->source[k].x; /* px2g = g*(px*2 + g); */ px2g = g2; for(i = 0; i < c->w_div_g; i++) { /* * Discarded possibilities for improving performance here: * 1. Using octagon-based distance estimation * (Which causes giant octagons to appear.) * 2. Square root approximation by reinterpret-casting IEEE floats to * integers. * (Which causes angles to appear when two waves interfere.) */ /* int_float u; u.f = dx*dx + dy*dy; u.i = (1 << 29) + (u.i >> 1) - (1 << 22); dist = u.f; */ #if defined USE_FAST_SQRT_BIGTABLE2 dist1 = FAST_TABLE(dist0); #elif defined USE_FAST_SQRT_HACKISH dist1 = fast_log2(dist0); #else dist1 = sqrt(dist0); #endif if(dist1 < c->radius) self->result_row[i] += c->wave_height[dist1]; dist0 += px2g + ddist; px2g += g2; } } for(i = 0; i < c->w_div_g; i++) { result = self->result_row[i]; /* It's slightly faster to do a subtraction or two before calculating the * modulus. - D.O. */ if(result >= c->colors) { result -= c->colors; if(result >= c->colors) result %= (unsigned)c->colors; } #ifdef USE_XIMAGE self->row[i] = c->pal[result].pixel; #else XFillRectangle(c->dpy, TARGET(c), c->gcs[result], g*i, g*j, g, g); #endif /* USE_XIMAGE */ } #ifdef USE_XIMAGE /* Fill in these `gridsize' horizontal bits in the scanline */ if(c->ximage->bits_per_pixel == 32) { uint32_t *ptr = (uint32_t *)scanline; for(i = 0; i < c->w_div_g; i++) { for(k = 0; k < g; k++) ptr[g*i+k] = self->row[i]; } } else if(c->ximage->bits_per_pixel == 24) { uint8_t *ptr = (uint8_t *)scanline; for(i = 0; i < c->w_div_g; i++) { for(k = 0; k < g; k++) { uint32_t pixel = self->row[i]; /* Might not work on big-endian. */ ptr[0] = pixel; ptr[1] = (pixel & 0x0000ff00) >> 8; ptr[2] = (pixel & 0x00ff0000) >> 16; ptr += 3; } } } else if(c->ximage->bits_per_pixel == 16) { uint16_t *ptr = (uint16_t *)scanline; for(i = 0; i < c->w_div_g; i++) { for(k = 0; k < g; k++) ptr[g*i+k] = self->row[i]; } } else if(c->ximage->bits_per_pixel == 8) { uint8_t *ptr = (uint8_t *)scanline; for(i = 0; i < c->w_div_g; i++) { for(k = 0; k < g; k++) ptr[g*i+k] = self->row[i]; } } else { for(i = 0; i < c->w_div_g; i++) { for(k = 0; k < g; k++) /* XPutPixel is thread safe as long as the XImage didn't have its * bits_per_pixel changed. */ XPutPixel(c->ximage, (g*i)+k, img_y, self->row[i]); } } /* Only the first scanline of the image has been filled in; clone that scanline to the rest of the `gridsize' lines in the ximage */ for(k = 0; k < (g-1); k++) memcpy(c->ximage->data + (c->ximage->bytes_per_line * (img_y + k + 1)), c->ximage->data + (c->ximage->bytes_per_line * img_y), c->ximage->bytes_per_line); # ifndef USE_BIG_XIMAGE /* Move the bits for this horizontal stripe to the server. */ # ifdef HAVE_XSHM_EXTENSION if (!c->use_shm) # endif /* HAVE_XSHM_EXTENSION */ XPutImage(c->dpy, TARGET(c), c->copy_gc, c->ximage, 0, 0, 0, g*j, c->ximage->width, c->ximage->height); # endif # if defined HAVE_XSHM_EXTENSION && !defined USE_BIG_XIMAGE if (c->use_shm) # endif { # if defined HAVE_XSHM_EXTENSION || defined USE_BIG_XIMAGE scanline = (char *)scanline + c->ximage->bytes_per_line * g * c->threadpool.count; img_y += g * c->threadpool.count; # endif } #endif /* USE_XIMAGE */ } } /* On allocation error, c->ximage == NULL. */ static void create_image( Display* dpy, struct inter_context* c, const XWindowAttributes* xgwa) { #ifdef USE_XIMAGE /* Set the width so that each thread can work on a different line. */ unsigned align = thread_memory_alignment(dpy) * 8 - 1; unsigned wbits, w, h; c->w = xgwa->width; c->h = xgwa->height; c->w_div_g = (c->w + c->grid_size - 1) / c->grid_size; c->h_div_g = (c->h + c->grid_size - 1) / c->grid_size; w = c->w_div_g * c->grid_size; h = c->h_div_g * c->grid_size; /* The width of a scan line, in *bits*. */ wbits = (w * c->bits_per_pixel + align) & ~align; # ifdef HAVE_XSHM_EXTENSION /* * Interference used to put one row at a time to the X server. This changes * today. * * XShmPutImage is asynchronous; the contents of the XImage must not be * modified until the server has placed the data on the screen. Waiting for * an XShmCompletionEvent after every line of pixels is a little nutty, so * shared-memory XImages will cover the entire screen, and it only has to be * sent once per frame. * * The non-SHM code, on the other hand is noticeably slower when * gridsize = 1 with one row at a time. If, on the other hand, gridsize >= 2, * there's a slight speed increase with one row at a time. * * This uses a lot more RAM than the single line approach. Users with only * 4 MB of RAM may wish to disable USE_BIG_XIMAGE and specify -no-shm on the * command line. Since this is 2013 and desktop computers are shipping with * 8 GB of RAM, I doubt that this will be a major issue. - D.O. */ if (c->use_shm) { c->ximage = create_xshm_image(dpy, xgwa->visual, xgwa->depth, ZPixmap, 0, &c->shm_info, wbits / c->bits_per_pixel, h); if (!c->ximage) c->use_shm = False; /* If create_xshm_image fails, it will not be attempted again. */ c->shm_can_draw = True; } # endif /* HAVE_XSHM_EXTENSION */ if (!c->ximage) { c->ximage = XCreateImage(dpy, xgwa->visual, xgwa->depth, ZPixmap, 0, 0, /* depth, fmt, offset, data */ w, /* width */ # ifdef USE_BIG_XIMAGE h, /* height */ # else c->grid_size, /* height */ # endif 8, wbits / 8); /* pad, bpl */ if(c->ximage) { if(thread_malloc((void **)&c->ximage->data, dpy, c->ximage->height * c->ximage->bytes_per_line)) { XFree(c->ximage); c->ximage = NULL; } } } check_no_mem(dpy, c, c->ximage); #endif /* USE_XIMAGE */ { static const struct threadpool_class cls = { sizeof(struct inter_thread), inter_thread_create, inter_thread_destroy }; int error = threadpool_create( &c->threadpool, &cls, dpy, #if defined USE_XIMAGE && defined USE_BIG_XIMAGE hardware_concurrency(dpy) #else 1 /* At least three issues with threads without USE_BIG_XIMAGE: * 1. Most of Xlib isn't thread safe without XInitThreads. * 2. X(Un)LockDisplay would need to be called for each line, which is terrible. * 3. There's only one XImage buffer at the moment. */ #endif ); if(error) { c->threadpool.count = 0; /* See the note in thread_util.h. */ inter_free(dpy, c); abort_on_error(error); } } } static void create_pix_buf(Display* dpy, Window win, struct inter_context *c, const XWindowAttributes* xgwa) { #ifdef HAVE_DOUBLE_BUFFER_EXTENSION if(c->back_buf) return; #endif /* HAVE_DOUBLE_BUFFER_EXTENSION */ c->pix_buf = XCreatePixmap(dpy, win, xgwa->width, xgwa->height, xgwa->depth); } static double float_time(void) { struct timeval result; gettimeofday( &result #ifdef GETTIMEOFDAY_TWO_ARGS , NULL #endif ); return result.tv_usec * 1.0e-6 + result.tv_sec; } static void inter_init(Display* dpy, Window win, struct inter_context* c) { XWindowAttributes xgwa; double H[3], S[3], V[3]; int i; int mono; int gray; int radius; XGCValues val; Bool dbuf = get_boolean_resource (dpy, "doubleBuffer", "Boolean"); #ifndef USE_XIMAGE unsigned long valmask = 0; #endif # ifdef HAVE_JWXYZ /* Don't second-guess Quartz's double-buffering */ dbuf = False; # endif memset (c, 0, sizeof(*c)); c->dpy = dpy; c->win = win; c->delay = get_integer_resource(dpy, "delay", "Integer"); XGetWindowAttributes(c->dpy, c->win, &xgwa); c->cmap = xgwa.colormap; c->screen = xgwa.screen; c->bits_per_pixel = get_bits_per_pixel(c->dpy, xgwa.depth); check_no_mem(dpy, c, (void *)(ptrdiff_t)c->bits_per_pixel); #ifdef HAVE_XSHM_EXTENSION c->use_shm = get_boolean_resource(dpy, "useSHM", "Boolean"); #endif /* HAVE_XSHM_EXTENSION */ val.function = GXcopy; c->copy_gc = XCreateGC(c->dpy, TARGET(c), GCFunction, &val); c->count = get_integer_resource(dpy, "count", "Integer"); if(c->count < 1) c->count = 1; c->grid_size = get_integer_resource(dpy, "gridsize", "Integer"); if(c->grid_size < 1) c->grid_size = 1; mono = get_boolean_resource(dpy, "mono", "Boolean"); if(!mono) { c->colors = get_integer_resource(dpy, "ncolors", "Integer"); if(c->colors < 2) c->colors = 2; } c->hue = get_integer_resource(dpy, "hue", "Float"); while (c->hue < 0 || c->hue >= 360) c->hue = frand(360.0); c->speed = get_integer_resource(dpy, "speed", "Integer"); c->shift = get_float_resource(dpy, "color-shift", "Float"); while(c->shift >= 360.0) c->shift -= 360.0; while(c->shift <= -360.0) c->shift += 360.0; radius = get_integer_resource(dpy, "radius", "Integer");; if(radius < 1) radius = 1; create_image(dpy, c, &xgwa); if(!mono) { c->pal = calloc(c->colors, sizeof(XColor)); check_no_mem(dpy, c, c->pal); gray = get_boolean_resource(dpy, "gray", "Boolean"); if(!gray) { H[0] = c->hue; H[1] = H[0] + c->shift < 360.0 ? H[0]+c->shift : H[0] + c->shift-360.0; H[2] = H[1] + c->shift < 360.0 ? H[1]+c->shift : H[1] + c->shift-360.0; S[0] = S[1] = S[2] = 1.0; V[0] = V[1] = V[2] = 1.0; } else { H[0] = H[1] = H[2] = 0.0; S[0] = S[1] = S[2] = 0.0; V[0] = 1.0; V[1] = 0.5; V[2] = 0.0; } make_color_loop(c->screen, xgwa.visual, c->cmap, H[0], S[0], V[0], H[1], S[1], V[1], H[2], S[2], V[2], c->pal, &(c->colors), True, False); if(c->colors < 2) { /* color allocation failure */ mono = 1; free(c->pal); } } if(mono) { /* DON'T else this with the previous if! */ c->colors = 2; c->pal = calloc(2, sizeof(XColor)); check_no_mem(dpy, c, c->pal); c->pal[0].pixel = BlackPixel(c->dpy, DefaultScreen(c->dpy)); c->pal[1].pixel = WhitePixel(c->dpy, DefaultScreen(c->dpy)); } #ifdef HAVE_XSHM_EXTENSION if(c->use_shm) dbuf = False; /* Double-buffering doesn't work with MIT-SHM: XShmPutImage must draw to the * window. Otherwise, XShmCompletion events will have the XAnyEvent::window * field set to the back buffer, and XScreenSaver will ignore the event. */ #endif if (dbuf) { #ifdef HAVE_DOUBLE_BUFFER_EXTENSION c->back_buf = xdbe_get_backbuffer (c->dpy, c->win, XdbeUndefined); #endif /* HAVE_DOUBLE_BUFFER_EXTENSION */ create_pix_buf(dpy, win, c, &xgwa); } #ifndef USE_XIMAGE valmask = GCForeground; c->gcs = calloc(c->colors, sizeof(GC)); check_no_mem(dpy, c, c->gcs); for(i = 0; i < c->colors; i++) { val.foreground = c->pal[i].pixel; c->gcs[i] = XCreateGC(c->dpy, TARGET(c), valmask, &val); } #endif #if defined USE_FAST_SQRT_HACKISH c->radius = fast_log2(radius * radius); #elif defined USE_FAST_SQRT_BIGTABLE2 c->radius = radius * radius; c->radius = FAST_TABLE(c->radius); #else c->radius = radius; #endif if (c->radius < 1) c->radius = 1; c->wave_height = calloc(c->radius, sizeof(unsigned)); check_no_mem(dpy, c, c->wave_height); for(i = 0; i < c->radius; i++) { float max, fi; #if defined USE_FAST_SQRT_HACKISH fi = sqrt(fast_inv_log2(i)); #elif defined USE_FAST_SQRT_BIGTABLE2 fi = sqrt(fast_inv_table(i)); #else fi = i; #endif max = ((float)c->colors) * ((float)radius - fi) / ((float)radius); c->wave_height[i] = (unsigned) ((max + max*cos(fi/50.0)) / 2.0); } c->source = calloc(c->count, sizeof(struct inter_source)); check_no_mem(dpy, c, c->source); for(i = 0; i < c->count; i++) { c->source[i].x_theta = frand(2.0)*3.14159; c->source[i].y_theta = frand(2.0)*3.14159; } c->last_frame = float_time(); } #define source_x(c, i) \ (c->w/2 + ((int)(cos(c->source[i].x_theta)*((float)c->w/2.0)))) #define source_y(c, i) \ (c->h/2 + ((int)(cos(c->source[i].y_theta)*((float)c->h/2.0)))) /* * This is somewhat suboptimal. Calculating the distance per-pixel is going to * be a lot slower than using now-ubiquitous SIMD CPU instructions to do four * or eight pixels at a time. */ static unsigned long do_inter(struct inter_context* c) { int i; double now; float elapsed; #if defined USE_XIMAGE && defined HAVE_XSHM_EXTENSION /* Wait a little while for the XServer to become ready if necessary. */ if(c->use_shm && !c->shm_can_draw) return 2000; #endif now = float_time(); elapsed = (now - c->last_frame) * 10.0; c->last_frame = now; for(i = 0; i < c->count; i++) { c->source[i].x_theta += (elapsed*c->speed/1000.0); if(c->source[i].x_theta > 2.0*3.14159) c->source[i].x_theta -= 2.0*3.14159; c->source[i].y_theta += (elapsed*c->speed/1000.0); if(c->source[i].y_theta > 2.0*3.14159) c->source[i].y_theta -= 2.0*3.14159; c->source[i].x = source_x(c, i); c->source[i].y = source_y(c, i); } threadpool_run(&c->threadpool, inter_thread_run); threadpool_wait(&c->threadpool); #ifdef HAVE_XSHM_EXTENSION if (c->use_shm) { XShmPutImage(c->dpy, c->win, c->copy_gc, c->ximage, 0, 0, 0, 0, c->ximage->width, c->ximage->height, True); c->shm_can_draw = False; } #endif #if defined HAVE_XSHM_EXTENSION && defined USE_BIG_XIMAGE else #endif #ifdef USE_BIG_XIMAGE { XPutImage(c->dpy, TARGET(c), c->copy_gc, c->ximage, 0, 0, 0, 0, c->ximage->width, c->ximage->height); } #endif #ifdef HAVE_DOUBLE_BUFFER_EXTENSION if (c->back_buf) { XdbeSwapInfo info[1]; info[0].swap_window = c->win; info[0].swap_action = XdbeUndefined; XdbeSwapBuffers(c->dpy, info, 1); } else #endif /* HAVE_DOUBLE_BUFFER_EXTENSION */ if (c->pix_buf) { XCopyArea (c->dpy, c->pix_buf, c->win, c->copy_gc, 0, 0, c->w, c->h, 0, 0); } return c->delay; } static void * interference_init (Display *dpy, Window win) { struct inter_context *c = (struct inter_context *) calloc (1, sizeof(*c)); if(!c) abort_no_mem(); inter_init(dpy, win, c); return c; } static unsigned long interference_draw (Display *dpy, Window win, void *closure) { struct inter_context *c = (struct inter_context *) closure; return do_inter(c); } static void interference_reshape (Display *dpy, Window window, void *closure, unsigned int w, unsigned int h) { struct inter_context *c = (struct inter_context *) closure; XWindowAttributes xgwa; Bool dbuf = (!!c->pix_buf # ifdef HAVE_DOUBLE_BUFFER_EXTENSION || c->back_buf # endif ); #ifdef USE_XIMAGE destroy_image(dpy, c); c->ximage = 0; #endif if(c->pix_buf) XFreePixmap(dpy, c->pix_buf); c->pix_buf = None; XGetWindowAttributes(dpy, window, &xgwa); xgwa.width = w; xgwa.height = h; create_image(dpy, c, &xgwa); if(dbuf) create_pix_buf(dpy, window, c, &xgwa); } static Bool interference_event (Display *dpy, Window window, void *closure, XEvent *event) { #if HAVE_XSHM_EXTENSION struct inter_context *c = (struct inter_context *) closure; if(c->use_shm && event->type == XShmGetEventBase(dpy) + ShmCompletion) { c->shm_can_draw = True; return True; } #endif return False; } static void interference_free (Display *dpy, Window window, void *closure) { struct inter_context *c = (struct inter_context *) closure; inter_free(dpy, c); } XSCREENSAVER_MODULE ("Interference", interference) xscreensaver-5.36/hacks/truchet.c000644 000767 000024 00000034724 12710314413 017057 0ustar00jwzstaff000000 000000 /* truchet --- curved and straight tilings * Copyright (c) 1998 Adrian Likins * * 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 screensaver draws two varieties of truchet patterns, a curved one and a straight one. There are lots and lots of command line options to play with. If your running remotely or on a slow machine or slow xserver, some of the settings will be way too much. The default settings should be okay though. This screensaver doesnt use anything bizarre or special at all, just a few standard xlib calls. A few suggested commandline combos..All these were tested on a k6-200 running XFree86 3.3 on a ark2000, so your mileage may vary... truchet -delay 200 -no-curves truchet -delay 500 -no-curves -square -no-erase truchet -delay 500 -no-erase -square -erase-count 5 truchet -scroll truchet -scroll -no-erase -anim-step-size 9 truchet -delay 200 -no-angles -min-width 36 -max-width 36 truchet -delay 200 -no-curves -min-width 12 -max-width 12 truchet -delay 200 -no-curves -min-width 36 -max-width 36 -no-erase truchet -delay 100 -min-width 256 -max-width 512 -no-erase \ -min-linewidth 96 -root truchet -min-width 64 -max-width 128 -no-erase -max-linewidth 4 \ -root -no-angles truchet -min-width 64 -max-width 128 -no-erase -max-linewidth 4 \ -root -no-curves -delay 25 */ #include "screenhack.h" #define MAXRATIO 2 static const char *truchet_defaults [] = { "*minWidth: 40", "*minHeight: 40", "*max-Width: 150", "*max-Height: 150", "*maxLineWidth: 25", "*minLineWidth: 2", "*erase: True", "*eraseCount: 25", "*square: True", "*delay: 400000", "*curves: True", "*angles: True", "*scroll: False", "*scroll-overlap: 400", "*anim-delay: 100", "*anim-step-size: 3", "*randomize: true", #ifdef HAVE_MOBILE "*ignoreRotation: True", #endif 0 }; /* options passed to this program */ static XrmOptionDescRec truchet_options [] = { { "-min-width", ".minWidth", XrmoptionSepArg, 0 }, { "-max-height", ".max-Height", XrmoptionSepArg, 0 }, { "-max-width", ".max-Width", XrmoptionSepArg, 0 }, { "-min-height", ".minHeight", XrmoptionSepArg, 0 }, { "-max-linewidth", ".maxLineWidth", XrmoptionSepArg, 0 }, { "-min-linewidth", ".minLineWidth", XrmoptionSepArg, 0 }, { "-erase", ".erase", XrmoptionNoArg, "True" }, { "-no-erase", ".erase", XrmoptionNoArg, "False" }, { "-erase-count", ".eraseCount", XrmoptionSepArg, 0 }, { "-square", ".square", XrmoptionNoArg, "True" }, { "-not-square", ".square", XrmoptionNoArg, "False" }, { "-curves", ".curves", XrmoptionNoArg, "True" }, { "-angles", ".angles", XrmoptionNoArg, "True" }, { "-no-angles", ".angles", XrmoptionNoArg, "False" }, { "-no-curves", ".curves", XrmoptionNoArg, "False" }, { "-delay", ".delay", XrmoptionSepArg, 0 }, { "-scroll", ".scroll", XrmoptionNoArg, "True" }, { "-scroll-overlap", ".scroll-overlap", XrmoptionSepArg, 0 }, { "-anim-delay", ".anim-delay", XrmoptionSepArg, 0 }, { "-anim-step-size", ".anim-step-size", XrmoptionSepArg, 0 }, { "-randomize", ".randomize", XrmoptionNoArg, "True" }, { 0, 0, 0, 0 } }; struct state { Display *dpy; Window window; XGCValues gcv; GC agc, bgc; int linewidth; int width, height; XWindowAttributes xgwa; Pixmap frame; int overlap; int maxlinewidth; int minlinewidth; int minwidth; int minheight; int max_height; int max_width; int delay; int count; int anim_delay; int anim_step_size; Colormap cmap; XColor fgc; Bool curves; Bool square; Bool angles; Bool erase; Bool eraseCount; Bool scroll; int scrolling; }; static void draw_truchet(struct state *st); static void draw_angles(struct state *st); static void scroll_area(struct state *st, int step_size); static void draw_angles(struct state *st) { int cx = 0, cy = 0; while((st->xgwa.height+st->overlap) > cy*st->height) { while((st->xgwa.width+st->overlap) > cx*st->width) { if(random()%2) { /* block1 */ XDrawLine(st->dpy,st->frame,st->agc, (cx*st->width)+(st->width/2), (cy*st->height), (cx*st->width)+(st->width), (cy*st->height)+(st->height/2)); XDrawLine(st->dpy,st->frame,st->agc, (cx*st->width), (cy*st->height)+(st->height/2), (cx*st->width)+(st->width/2), (cy*st->height)+(st->height)); } else { /* block 2 */ XDrawLine(st->dpy,st->frame,st->agc, (cx*st->width)+(st->width/2), (cy*st->height), (cx*st->width), (cy*st->height)+(st->height/2)); XDrawLine(st->dpy,st->frame,st->agc, (cx*st->width)+(st->width), (cy*st->height)+(st->height/2), (cx*st->width)+(st->width/2), (cy*st->height)+(st->height)); } cx++; } cy++; cx=0; } } static void draw_truchet(struct state *st) { int cx = 0, cy = 0; while(st->xgwa.height+st->overlap > cy*st->height) { while(st->xgwa.width+st->overlap > cx*st->width) { if(random()%2) { /* block1 */ XDrawArc(st->dpy, st->frame, st->agc, ((cx*st->width)-(st->width/2)), ((cy*st->height)-(st->height/2)), st->width, st->height, 0, -5760); XDrawArc(st->dpy,st->frame, st->agc, ((cx*st->width)+(st->width/2)), ((cy*st->height)+(st->height/2)), st->width, st->height, 11520, -5760); } else { /* block 2 */ XDrawArc(st->dpy,st->frame,st->agc, ((cx*st->width)+(st->width/2)), ((cy*st->height)-(st->height/2)), st->width, st->height, 17280, -5760); XDrawArc(st->dpy,st->frame,st->agc, ((cx*st->width)-(st->width/2)), ((cy*st->height)+(st->height/2)), st->width, st->height, 0, 5760); } cx++; } cy++; cx=0; } } static void scroll_area(struct state *st, int step_size) { int scrollcount_x; int scrollcount_y; int offset; int scroll; int direction; int progress; offset=st->overlap/2; scroll=st->overlap/4; /* This runs in a loop, starting with * st->scrolling = (scroll / st->anim_step_size) * 4 - 1; * and going all the way down to st->scrolling = 0. */ /* if anyone knows a good way to generate * a more random scrolling motion... */ direction = st->scrolling / (scroll / st->anim_step_size); progress = (st->scrolling % (scroll / st->anim_step_size)) * st->anim_step_size; if (direction & 1) { scrollcount_x = progress - scroll; scrollcount_y = progress; } else { scrollcount_x = -progress; scrollcount_y = progress - scroll; } if (direction & 2) { scrollcount_x = -scrollcount_x; scrollcount_y = -scrollcount_y; } XCopyArea(st->dpy, st->frame, st->window, st->agc,scrollcount_x+offset,scrollcount_y+offset, st->xgwa.width, st->xgwa.height, 0,0); } static void * truchet_init (Display *dpy, Window window) { struct state *st = (struct state *) calloc (1, sizeof(*st)); st->dpy = dpy; st->window = window; st->maxlinewidth = get_integer_resource (st->dpy, "maxLineWidth", "Integer"); st->minlinewidth = get_integer_resource (st->dpy, "minLineWidth", "Integer"); st->minwidth = get_integer_resource (st->dpy, "minWidth", "Integer"); st->minheight = get_integer_resource (st->dpy, "minHeight", "Integer"); st->max_width = get_integer_resource (st->dpy, "max-Width", "Integer"); st->max_height = get_integer_resource (st->dpy, "max-Height", "Integer" ); st->delay = get_integer_resource (st->dpy, "delay", "Integer"); st->eraseCount = get_integer_resource (st->dpy, "eraseCount", "Integer"); st->square = get_boolean_resource (st->dpy, "square", "Boolean"); st->curves = get_boolean_resource (st->dpy, "curves", "Boolean"); st->angles = get_boolean_resource (st->dpy, "angles", "Boolean"); st->erase = get_boolean_resource (st->dpy, "erase", "Boolean"); st->scroll = get_boolean_resource (st->dpy, "scroll", "Boolean"); st->overlap = get_integer_resource (st->dpy, "scroll-overlap", "Integer"); st->anim_delay = get_integer_resource (st->dpy, "anim-delay", "Integer"); st->anim_step_size = get_integer_resource (st->dpy, "anim-step-size", "Integer"); if (get_boolean_resource(st->dpy, "randomize", "Randomize")) { int i = (random() % 12); switch(i) { case 0: break; case 1: st->curves = False; break; case 2: st->curves = False; st->square = True; st->erase = False; break; case 3: st->square = True; st->erase = False; st->eraseCount = 5; break; case 4: st->scroll = True; break; case 5: st->scroll = True; st->erase = False; st->anim_step_size = 9; break; case 6: st->angles = False; st->minwidth = st->max_width = 36; break; case 7: st->curves = False; st->minwidth = st->max_width = 12; break; case 8: st->curves = False; st->erase = False; st->minwidth = st->max_width = 36; break; case 9: st->erase = False; st->minwidth = 256; st->max_width = 512; st->minlinewidth = 96; break; case 10: st->angles = False; st->minwidth = 64; st->max_width = 128; st->maxlinewidth = 4; break; case 11: st->curves = False; st->minwidth = 64; st->max_width = 128; st->maxlinewidth = 4; break; default: abort(); break; } } XGetWindowAttributes (st->dpy, st->window, &st->xgwa); st->gcv.foreground = BlackPixel(st->dpy,0); st->gcv.background = WhitePixel(st->dpy,0); st->gcv.line_width = 25; st->cmap = st->xgwa.colormap; st->gcv.foreground = get_pixel_resource(st->dpy, st->xgwa.colormap, "background", "Background"); st->bgc = XCreateGC (st->dpy, st->window, GCForeground, &st->gcv); st->agc = XCreateGC(st->dpy, st->window, GCForeground, &st->gcv); XFillRectangle(st->dpy, st->window, st->bgc, 0, 0, st->xgwa.width, st->xgwa.height); st->width=60; st->height=60; st->linewidth=1; st->count=0; XSetForeground(st->dpy, st->agc, st->gcv.background); st->frame = XCreatePixmap(st->dpy,st->window, st->xgwa.width+st->overlap, st->xgwa.height+st->overlap, st->xgwa.depth); XFillRectangle(st->dpy, st->frame, st->bgc, 0, 0, st->xgwa.width + st->overlap, st->xgwa.height + st->overlap); return st; } static unsigned long truchet_draw (Display *dpy, Window window, void *closure) { struct state *st = (struct state *) closure; if (st->scrolling) { st->scrolling--; scroll_area(st, st->anim_step_size); return st->anim_delay*1000; } if (!mono_p) { /* XXX there are probably bugs with this. */ /* could be...I just borrowed this code from munch */ st->fgc.red = random() % 65535; st->fgc.green = random() % 65535; st->fgc.blue = random() % 65535; if (XAllocColor(st->dpy, st->cmap, &st->fgc)) { XSetForeground(st->dpy, st->agc, st->fgc.pixel); } else { /* use white if all else fails */ XSetForeground(st->dpy,st->agc, st->gcv.background); } } /* generate a random line width */ st->linewidth=(random()% st->maxlinewidth); /* check for lower bound */ if(st->linewidth < st->minlinewidth) st->linewidth = st->minlinewidth; /* try to get an odd linewidth as it seem to work a little better */ if(st->linewidth%2) st->linewidth++; /* grab a random height and width */ st->width=(random()%st->max_width); st->height=(random()%st->max_height); /* make sure we dont get a 0 height or width */ if(st->width == 0 || st->height == 0) { st->height=st->max_height; st->width=st->max_width; } /* check for min height and width */ if(st->height < st->minheight) { st->height=st->minheight; } if(st->width < st->minwidth) { st->width=st->minwidth; } /* if tiles need to be square, fix it... */ if(st->square) st->height=st->width; /* check for sane aspect ratios */ if((st->width/st->height) > MAXRATIO) st->height=st->width; if((st->height/st->width) > MAXRATIO) st->width=st->height; /* to avoid linewidths of zero */ if(st->linewidth == 0 || st->linewidth < st->minlinewidth) st->linewidth = st->minlinewidth; /* try to keep from getting line widths that would be too big */ if(st->linewidth > 0 && st->linewidth >= (st->height/5)) st->linewidth = st->height/5; XSetLineAttributes(st->dpy, st->agc, st->linewidth, LineSolid, CapRound, JoinRound); if(st->erase || (st->count >= st->eraseCount)) { /* XClearWindow(dpy,window); */ XFillRectangle(st->dpy, st->frame, st->bgc, 0, 0, st->xgwa.width+st->overlap, st->xgwa.height+st->overlap); st->count=0; } if(!st->scroll) st->overlap=0; /* do the fun stuff...*/ if(st->curves && st->angles) { if(random()%2) draw_truchet(st); else draw_angles(st); } else if(st->curves && !st->angles) draw_truchet(st); else if(!st->curves && st->angles) draw_angles(st); st->count++; if(st->scroll) { st->scrolling = ((st->overlap / 4) / st->anim_step_size) * 4; return 0; } XCopyArea(st->dpy,st->frame,st->window,st->agc,0,0,st->xgwa.width,st->xgwa.height,0,0); return st->delay; } 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 truchet_event (Display *dpy, Window window, void *closure, XEvent *event) { return False; } static void truchet_free (Display *dpy, Window window, void *closure) { } XSCREENSAVER_MODULE ("Truchet", truchet) xscreensaver-5.36/hacks/bsod.c000664 000767 000024 00000452074 12720214007 016333 0ustar00jwzstaff000000 000000 /* xscreensaver, Copyright (c) 1998-2016 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. * * Blue Screen of Death: the finest in personal computer emulation. * Concept cribbed from Stephen Martin ; * this version written by jwz, 4-Jun-98. * Mostly rewritten by jwz, 20-Feb-2006. */ /* To add a new mode: - Define a function `new_os(dpy,win)' that returns a `bsod_state' struct. - Draw on the window to set up its frame-zero state. This must be fast: no sleeping or long loops! - Populate the bsod_state structure with additional actions to take by using the various BSOD_ macros. Note that you can control the delays when printing text on a per-character or per-line basis. - Insert your function in the `all_modes' table. - Add a `doXXX' entry to `bsod_defaults'. - Add fonts or colors to `bsod_defaults' if necessary. Look at windows_31() for a simple example. Look at linux_fsck() for a more complicated example with random behavior. Or, you can bypass all that: look at nvidia() for a really hairy example. */ #include "screenhack.h" #include "xpm-pixmap.h" #include "apple2.h" #include #include #ifdef HAVE_XSHM_EXTENSION #include "xshm.h" #endif #ifdef HAVE_UNAME # include #endif /* HAVE_UNAME */ #if defined(HAVE_GDK_PIXBUF) || defined(HAVE_XPM) || defined(HAVE_JWXYZ) # define DO_XPM #endif #ifdef DO_XPM # include "images/amiga.xpm" # include "images/hmac.xpm" # include "images/osx_10_2.xpm" # include "images/osx_10_3.xpm" # include "images/android.xpm" #endif #include "images/atari.xbm" #include "images/mac.xbm" #include "images/macbomb.xbm" #include "images/atm.xbm" #undef countof #define countof(x) (sizeof((x))/sizeof((*x))) # undef MIN # undef MAX # define MIN(A,B) ((A)<(B)?(A):(B)) # define MAX(A,B) ((A)>(B)?(A):(B)) #undef EOF typedef enum { EOF=0, LEFT, CENTER, RIGHT, LEFT_FULL, CENTER_FULL, RIGHT_FULL, COLOR, INVERT, MOVETO, MARGINS, CURSOR_BLOCK, CURSOR_LINE, RECT, COPY, PIXMAP, IMG, FONT, PAUSE, CHAR_DELAY, LINE_DELAY, LOOP, RESET } bsod_event_type; struct bsod_event { bsod_event_type type; void *arg1, *arg2, *arg3, *arg4, *arg5, *arg6; }; struct bsod_state { Display *dpy; Window window; XWindowAttributes xgwa; XFontStruct *font, *fontA, *fontB, *fontC; unsigned long fg, bg; GC gc; int left_margin, right_margin; /* for text wrapping */ int top_margin, bottom_margin; /* for text scrolling */ Bool wrap_p; Bool scroll_p; Pixmap pixmap; /* Source image used by BSOD_PIXMAP */ int x, y; /* current text-drawing position */ int current_left; /* don't use this */ int pos; /* position in queue */ int queue_size; struct bsod_event *queue; unsigned long char_delay; /* delay between printing characters */ unsigned long line_delay; /* delay between printing lines */ Bool macx_eol_kludge; void *closure; int (*draw_cb) (struct bsod_state *); void (*free_cb) (struct bsod_state *); async_load_state *img_loader; }; # if !defined(__GNUC__) && !defined(__extension__) /* don't warn about "string length is greater than the length ISO C89 compilers are required to support" in these string constants... */ # define __extension__ /**/ # endif /* Draw text at the current position; align is LEFT, CENTER, RIGHT, or *_FULL (meaning to clear the whole line margin to margin). */ #define BSOD_TEXT(bst,align,string) do { \ ensure_queue (bst); \ (bst)->queue[(bst)->pos].type = (align); \ (bst)->queue[(bst)->pos].arg1 = (void *) strdup (__extension__ (string)); \ (bst)->queue[(bst)->pos].arg2 = (bst)->queue[(bst)->pos].arg1; \ (bst)->queue[(bst)->pos].arg3 = (void *) 0; \ (bst)->pos++; \ } while (0) /* Flip the foreground and background colors */ #define BSOD_INVERT(bst) do { \ ensure_queue (bst); \ (bst)->queue[(bst)->pos].type = INVERT; \ (bst)->pos++; \ } while (0) /* Set the foreground and background colors to the given pixels */ #define BSOD_COLOR(bst,fg,bg) do { \ ensure_queue (bst); \ (bst)->queue[(bst)->pos].type = COLOR; \ (bst)->queue[(bst)->pos].arg1 = (void *) fg; \ (bst)->queue[(bst)->pos].arg2 = (void *) bg; \ (bst)->pos++; \ } while (0) /* Set the position of the next text. Note that this is the baseline: lower left corner of next char printed. */ #define BSOD_MOVETO(bst,x,y) do { \ ensure_queue (bst); \ (bst)->queue[(bst)->pos].type = MOVETO; \ (bst)->queue[(bst)->pos].arg1 = (void *) ((long) (x)); \ (bst)->queue[(bst)->pos].arg2 = (void *) ((long) (y)); \ (bst)->pos++; \ } while (0) /* Delay for at least the given number of microseconds. */ #define BSOD_PAUSE(bst,usec) do { \ ensure_queue (bst); \ (bst)->queue[(bst)->pos].type = PAUSE; \ (bst)->queue[(bst)->pos].arg1 = (void *) ((long) (usec)); \ (bst)->pos++; \ } while (0) /* Set the delay after each character is printed. */ #define BSOD_CHAR_DELAY(bst,usec) do { \ ensure_queue (bst); \ (bst)->queue[(bst)->pos].type = CHAR_DELAY; \ (bst)->queue[(bst)->pos].arg1 = (void *) ((long) (usec)); \ (bst)->pos++; \ } while (0) /* Set the delay after each newline. */ #define BSOD_LINE_DELAY(bst,usec) do { \ ensure_queue (bst); \ (bst)->queue[(bst)->pos].type = LINE_DELAY; \ (bst)->queue[(bst)->pos].arg1 = (void *) (usec); \ (bst)->pos++; \ } while (0) /* Set the prevailing left/right margins (used when strings have embedded newlines, and when centering or right-justifying text.) */ #define BSOD_MARGINS(bst,left,right) do { \ ensure_queue (bst); \ (bst)->queue[(bst)->pos].type = MARGINS; \ (bst)->queue[(bst)->pos].arg1 = (void *) ((long) (left)); \ (bst)->queue[(bst)->pos].arg2 = (void *) ((long) (right)); \ (bst)->pos++; \ } while (0) /* Draw a blinking cursor; type is CURSOR_BLOCK or CURSOR_LINE. usec is how long 1/2 of a cycle is. count is how many times to blink. (You can pass a gigantic number if this is the last thing in your mode.) */ #define BSOD_CURSOR(bst,ctype,usec,count) do { \ ensure_queue (bst); \ (bst)->queue[(bst)->pos].type = (ctype); \ (bst)->queue[(bst)->pos].arg1 = (void *) (usec); \ (bst)->queue[(bst)->pos].arg2 = (void *) (count); \ (bst)->pos++; \ } while (0) /* Draw or fill a rectangle. You can set line-width in the GC. */ #define BSOD_RECT(bst,fill,x,y,w,h) do { \ ensure_queue (bst); \ (bst)->queue[(bst)->pos].type = RECT; \ (bst)->queue[(bst)->pos].arg1 = (void *) ((long) (fill)); \ (bst)->queue[(bst)->pos].arg2 = (void *) ((long) (x)); \ (bst)->queue[(bst)->pos].arg3 = (void *) ((long) (y)); \ (bst)->queue[(bst)->pos].arg4 = (void *) ((long) (w)); \ (bst)->queue[(bst)->pos].arg5 = (void *) ((long) (h)); \ (bst)->pos++; \ } while (0) /* Copy a rect from the window, to the window. */ #define BSOD_COPY(bst,srcx,srcy,w,h,tox,toy) do { \ ensure_queue (bst); \ (bst)->queue[(bst)->pos].type = COPY; \ (bst)->queue[(bst)->pos].arg1 = (void *) ((long) (srcx)); \ (bst)->queue[(bst)->pos].arg2 = (void *) ((long) (srcy)); \ (bst)->queue[(bst)->pos].arg3 = (void *) ((long) (w)); \ (bst)->queue[(bst)->pos].arg4 = (void *) ((long) (h)); \ (bst)->queue[(bst)->pos].arg5 = (void *) ((long) (tox)); \ (bst)->queue[(bst)->pos].arg6 = (void *) ((long) (toy)); \ (bst)->pos++; \ } while (0) /* Copy a rect from bst->pixmap to the window. */ #define BSOD_PIXMAP(bst,srcx,srcy,w,h,tox,toy) do { \ BSOD_COPY(bst,srcx,srcy,w,h,tox,toy); \ (bst)->queue[(bst)->pos-1].type = PIXMAP; \ } while (0) /* Load a random image (or the desktop) onto the window. */ #define BSOD_IMG(bst) do { \ ensure_queue (bst); \ (bst)->queue[(bst)->pos].type = IMG; \ (bst)->pos++; \ } while (0) /* Switch between fonts A, B and C. */ #define BSOD_FONT(bst,n) do { \ ensure_queue (bst); \ (bst)->queue[(bst)->pos].type = FONT; \ (bst)->queue[(bst)->pos].arg1 = (void *) ((long) (n)); \ (bst)->pos++; \ } while (0) /* Jump around in the state table. You can use this as the last thing in your state table to repeat the last N elements forever. */ #define BSOD_LOOP(bst,off) do { \ ensure_queue (bst); \ (bst)->queue[(bst)->pos].type = LOOP; \ (bst)->queue[(bst)->pos].arg1 = (void *) (off); \ (bst)->pos++; \ } while (0) /* Restart the whole thing from the beginning. */ #define BSOD_RESET(bst) do { \ ensure_queue (bst); \ (bst)->queue[(bst)->pos].type = RESET; \ (bst)->pos++; \ } while (0) static void ensure_queue (struct bsod_state *bst) { int n; if (bst->pos + 1 < bst->queue_size) return; n = bst->queue_size + 10; if (n < 100) n *= 2; n *= 1.2; bst->queue = (struct bsod_event *) realloc (bst->queue, n * sizeof(*bst->queue)); if (!bst->queue) abort(); memset (bst->queue + bst->queue_size, 0, (n - bst->queue_size) * sizeof(*bst->queue)); bst->queue_size = n; } static void position_for_text (struct bsod_state *bst, const char *line) { int max_width = 0; const char *start = line; if (bst->queue[bst->pos].type != LEFT && bst->queue[bst->pos].type != LEFT_FULL) while (*start) { int dir, ascent, descent; XCharStruct ov; const char *end = start; while (*end && *end != '\r' && *end != '\n') end++; XTextExtents (bst->font, start, end-start, &dir, &ascent, &descent, &ov); if (ov.width > max_width) max_width = ov.width; if (!*end) break; start = end+1; } switch (bst->queue[bst->pos].type) { case LEFT: case LEFT_FULL: bst->current_left = bst->left_margin; break; case RIGHT: case RIGHT_FULL: bst->x = max_width - bst->right_margin; bst->current_left = bst->x; break; case CENTER: case CENTER_FULL: { int w = (bst->xgwa.width - bst->left_margin - bst->right_margin - max_width); if (w < 0) w = 0; bst->x = bst->left_margin + (w / 2); bst->current_left = bst->x; break; } default: abort(); } } static void bst_crlf (struct bsod_state *bst) { int lh = bst->font->ascent + bst->font->descent; bst->x = bst->current_left; if (!bst->scroll_p || bst->y + lh < bst->xgwa.height - bst->bottom_margin) bst->y += lh; else { int w = bst->xgwa.width - bst->right_margin - bst->left_margin; int h = bst->xgwa.height - bst->top_margin - bst->bottom_margin; XCopyArea (bst->dpy, bst->window, bst->window, bst->gc, bst->left_margin, bst->top_margin + lh, w, h - lh, bst->left_margin, bst->top_margin); XClearArea (bst->dpy, bst->window, bst->left_margin, bst->top_margin + h - lh, w, lh, False); } } static void draw_char (struct bsod_state *bst, char c) { if (!c) abort(); else if (c == '\r') { bst->x = bst->current_left; } else if (c == '\n') { if (bst->macx_eol_kludge) { /* Special case for the weird way OSX crashes print newlines... */ XDrawImageString (bst->dpy, bst->window, bst->gc, bst->x, bst->y, " ", 1); XDrawImageString (bst->dpy, bst->window, bst->gc, bst->x, bst->y + bst->font->ascent + bst->font->descent, " ", 1); } bst_crlf (bst); } else if (c == '\b') /* backspace */ { int cw = (bst->font->per_char ? bst->font->per_char['n'-bst->font->min_char_or_byte2].width : bst->font->min_bounds.width); bst->x -= cw; if (bst->x < bst->left_margin) bst->x = bst->left_margin; } else { int dir, ascent, descent; XCharStruct ov; XTextExtents (bst->font, &c, 1, &dir, &ascent, &descent, &ov); if (bst->wrap_p && bst->x + ov.width > bst->xgwa.width - bst->right_margin) bst_crlf (bst); XDrawImageString (bst->dpy, bst->window, bst->gc, bst->x, bst->y, &c, 1); bst->x += ov.width; } } static long bsod_pop (struct bsod_state *bst) { bsod_event_type type = bst->queue[bst->pos].type; if (bst->draw_cb) return bst->draw_cb (bst); if (bst->pos < 0) /* already done */ abort(); switch (type) { case LEFT: case LEFT_FULL: case CENTER: case CENTER_FULL: case RIGHT: case RIGHT_FULL: { const char *s = (const char *) bst->queue[bst->pos].arg2; char c; if (! *s) { long delay = bst->line_delay; bst->pos++; bst->current_left = bst->left_margin; return delay; } if (! bst->queue[bst->pos].arg3) /* "done once" */ { position_for_text (bst, s); bst->queue[bst->pos].arg4 = (void *) bst->queue[bst->pos].type; bst->queue[bst->pos].type = LEFT; if (type == CENTER_FULL || type == LEFT_FULL || type == RIGHT_FULL) { XSetForeground (bst->dpy, bst->gc, bst->bg); XFillRectangle (bst->dpy, bst->window, bst->gc, 0, bst->y - bst->font->ascent, bst->xgwa.width, bst->font->ascent + bst->font->descent); XSetForeground (bst->dpy, bst->gc, bst->fg); } } c = *s++; draw_char (bst, c); bst->queue[bst->pos].arg2 = (void *) s; bst->queue[bst->pos].arg3 = (void *) 1; /* "done once" */ return (c == '\r' || c == '\n' ? bst->line_delay : bst->char_delay); } case INVERT: { unsigned long swap = bst->fg; bst->fg = bst->bg; bst->bg = swap; XSetForeground (bst->dpy, bst->gc, bst->fg); XSetBackground (bst->dpy, bst->gc, bst->bg); bst->pos++; return 0; } case COLOR: { bst->fg = (unsigned long) bst->queue[bst->pos].arg1; bst->bg = (unsigned long) bst->queue[bst->pos].arg2; XSetForeground (bst->dpy, bst->gc, bst->fg); XSetBackground (bst->dpy, bst->gc, bst->bg); bst->pos++; return 0; } case MOVETO: { bst->x = (long) bst->queue[bst->pos].arg1; bst->y = (long) bst->queue[bst->pos].arg2; bst->pos++; return 0; } case RECT: { int f = (long) bst->queue[bst->pos].arg1; int x = (long) bst->queue[bst->pos].arg2; int y = (long) bst->queue[bst->pos].arg3; int w = (long) bst->queue[bst->pos].arg4; int h = (long) bst->queue[bst->pos].arg5; if (f) XFillRectangle (bst->dpy, bst->window, bst->gc, x, y, w, h); else XDrawRectangle (bst->dpy, bst->window, bst->gc, x, y, w, h); bst->pos++; return 0; } case COPY: case PIXMAP: { int srcx = (long) bst->queue[bst->pos].arg1; int srcy = (long) bst->queue[bst->pos].arg2; int w = (long) bst->queue[bst->pos].arg3; int h = (long) bst->queue[bst->pos].arg4; int tox = (long) bst->queue[bst->pos].arg5; int toy = (long) bst->queue[bst->pos].arg6; XCopyArea (bst->dpy, (type == PIXMAP ? bst->pixmap : bst->window), bst->window, bst->gc, srcx, srcy, w, h, tox, toy); bst->pos++; return 0; } case IMG: { if (bst->img_loader) abort(); bst->img_loader = load_image_async_simple (0, bst->xgwa.screen, bst->window, bst->window, 0, 0); bst->pos++; return 0; } case FONT: { switch ((long) bst->queue[bst->pos].arg1) { case 0: bst->font = bst->fontA; break; case 1: bst->font = bst->fontB; break; case 2: bst->font = bst->fontC; break; default: abort(); break; } XSetFont (bst->dpy, bst->gc, bst->font->fid); bst->pos++; return 0; } case PAUSE: { long delay = (long) bst->queue[bst->pos].arg1; bst->pos++; return delay; } case CHAR_DELAY: { bst->char_delay = (long) bst->queue[bst->pos].arg1; bst->pos++; return 0; } case LINE_DELAY: { bst->line_delay = (long) bst->queue[bst->pos].arg1; bst->pos++; return 0; } case MARGINS: { bst->left_margin = (long) bst->queue[bst->pos].arg1; bst->right_margin = (long) bst->queue[bst->pos].arg2; bst->pos++; return 0; } case CURSOR_BLOCK: case CURSOR_LINE: { long delay = (long) bst->queue[bst->pos].arg1; long count = (long) bst->queue[bst->pos].arg2; int ox = bst->x; if (type == CURSOR_BLOCK) { unsigned long swap = bst->fg; bst->fg = bst->bg; bst->bg = swap; XSetForeground (bst->dpy, bst->gc, bst->fg); XSetBackground (bst->dpy, bst->gc, bst->bg); draw_char (bst, ' '); } else { draw_char (bst, (count & 1 ? ' ' : '_')); draw_char (bst, ' '); } bst->x = ox; count--; bst->queue[bst->pos].arg2 = (void *) count; if (count <= 0) bst->pos++; return delay; } case LOOP: { long off = (long) bst->queue[bst->pos].arg1; bst->pos += off; if (bst->pos < 0 || bst->pos >= bst->queue_size) abort(); return 0; } case RESET: { int i; for (i = 0; i < bst->queue_size; i++) switch (bst->queue[i].type) { case LEFT: case LEFT_FULL: case CENTER: case CENTER_FULL: case RIGHT: case RIGHT_FULL: bst->queue[i].arg2 = bst->queue[i].arg1; bst->queue[i].arg3 = 0; bst->queue[i].type = (bsod_event_type) bst->queue[i].arg4; break; default: break; } bst->pos = 0; return 0; } case EOF: { bst->pos = -1; return -1; } default: break; } abort(); } static struct bsod_state * make_bsod_state (Display *dpy, Window window, const char *name, const char *class) { XGCValues gcv; struct bsod_state *bst; char buf1[1024], buf2[1024]; char buf3[1024], buf4[1024]; char buf5[1024], buf6[1024]; char buf7[1024], buf8[1024]; const char *font1, *font2, *font3, *font4; bst = (struct bsod_state *) calloc (1, sizeof (*bst)); bst->queue_size = 10; bst->queue = (struct bsod_event *) calloc (bst->queue_size, sizeof (*bst->queue)); bst->dpy = dpy; bst->window = window; XGetWindowAttributes (dpy, window, &bst->xgwa); /* If the window is small: use ".font" if it is loadable, else use ".font2". If the window is big: use ".bigFont" if it is loadable, else use ".bigFont2". */ if ( # ifdef HAVE_MOBILE 1 # else bst->xgwa.height < 640 # endif ) { sprintf (buf1, "%.100s.font", name); sprintf (buf2, "%.100s.font", class); sprintf (buf3, "%.100s.font2", name); sprintf (buf4, "%.100s.font2", class); } else { sprintf (buf1, "%.100s.bigFont", name); sprintf (buf2, "%.100s.bigFont", class); sprintf (buf3, "%.100s.bigFont2", name); sprintf (buf4, "%.100s.bigFont2", class); } sprintf (buf5, "%.100s.fontB", name); sprintf (buf6, "%.100s.fontB", class); sprintf (buf7, "%.100s.fontC", name); sprintf (buf8, "%.100s.fontC", class); font1 = get_string_resource (dpy, buf1, buf2); font2 = get_string_resource (dpy, buf3, buf4); font3 = get_string_resource (dpy, buf5, buf6); font4 = get_string_resource (dpy, buf7, buf8); /* If there was no ".mode.font2" resource also look for ".font2". Under real X11, the wildcard does this, so this is redundant, but jwxyz needs it because it doesn't implement wildcards. */ # define RES2(VAR, BUF1, BUF2) do { \ if (! VAR) { \ VAR = get_string_resource (dpy, \ strchr (BUF1, '.') + 1, \ strchr (BUF2, '.') + 1); \ }} while(0) RES2 (font1, buf1, buf2); RES2 (font2, buf3, buf4); RES2 (font3, buf5, buf6); RES2 (font4, buf7, buf8); #undef RES2 if (font1) bst->font = XLoadQueryFont (dpy, font1); if (! bst->font && font2) bst->font = XLoadQueryFont (dpy, font2); /* If neither of those worked, try some defaults. */ if (! bst->font) bst->font = XLoadQueryFont (dpy,"-*-courier-bold-r-*-*-*-120-*-*-m-*-*-*"); if (! bst->font) bst->font = XLoadQueryFont (dpy, "fixed"); if (! bst->font) abort(); if (font3) bst->fontB = XLoadQueryFont (dpy, font3); if (font4) bst->fontC = XLoadQueryFont (dpy, font4); if (! bst->fontB) bst->fontB = bst->font; if (! bst->fontC) bst->fontC = bst->font; bst->fontA = bst->font; gcv.font = bst->font->fid; sprintf (buf1, "%.100s.foreground", name); sprintf (buf2, "%.100s.Foreground", class); bst->fg = gcv.foreground = get_pixel_resource (dpy, bst->xgwa.colormap, buf1, buf2); sprintf (buf1, "%.100s.background", name); sprintf (buf2, "%.100s.Background", class); bst->bg = gcv.background = get_pixel_resource (dpy, bst->xgwa.colormap, buf1, buf2); bst->gc = XCreateGC (dpy, window, GCFont|GCForeground|GCBackground, &gcv); #ifdef HAVE_JWXYZ jwxyz_XSetAntiAliasing (dpy, bst->gc, True); #endif bst->left_margin = bst->right_margin = 10; bst->x = bst->left_margin; bst->y = bst->font->ascent + bst->left_margin; XSetWindowBackground (dpy, window, gcv.background); return bst; } static void free_bsod_state (struct bsod_state *bst) { int i; if (bst->free_cb) bst->free_cb (bst); if (bst->pixmap) XFreePixmap(bst->dpy, bst->pixmap); XFreeFont (bst->dpy, bst->font); XFreeGC (bst->dpy, bst->gc); for (i = 0; i < bst->queue_size; i++) switch (bst->queue[i].type) { case LEFT: case LEFT_FULL: case RIGHT: case RIGHT_FULL: case CENTER: case CENTER_FULL: free ((char *) bst->queue[i].arg1); break; default: break; } free (bst->queue); free (bst); } static Pixmap double_pixmap (Display *dpy, GC gc, Visual *visual, int depth, Pixmap pixmap, int pix_w, int pix_h) { int x, y; Pixmap p2 = XCreatePixmap(dpy, pixmap, pix_w*2, pix_h*2, depth); XImage *i1 = XGetImage(dpy, pixmap, 0, 0, pix_w, pix_h, ~0L, ZPixmap); XImage *i2 = XCreateImage(dpy, visual, depth, ZPixmap, 0, 0, pix_w*2, pix_h*2, 8, 0); i2->data = (char *) calloc(i2->height, i2->bytes_per_line); for (y = 0; y < pix_h; y++) for (x = 0; x < pix_w; x++) { unsigned long p = XGetPixel(i1, x, y); XPutPixel(i2, x*2, y*2, p); XPutPixel(i2, x*2+1, y*2, p); XPutPixel(i2, x*2, y*2+1, p); XPutPixel(i2, x*2+1, y*2+1, p); } free(i1->data); i1->data = 0; XDestroyImage(i1); XPutImage(dpy, p2, gc, i2, 0, 0, 0, 0, i2->width, i2->height); free(i2->data); i2->data = 0; XDestroyImage(i2); XFreePixmap(dpy, pixmap); return p2; } /***************************************************************************** *****************************************************************************/ static struct bsod_state * windows_31 (Display *dpy, Window window) { struct bsod_state *bst = make_bsod_state (dpy, window, "windows", "Windows"); BSOD_INVERT (bst); BSOD_TEXT (bst, CENTER, "Windows\n"); BSOD_INVERT (bst); BSOD_TEXT (bst, CENTER, "A fatal exception 0E has occured at F0AD:42494C4C\n" "the current application will be terminated.\n" "\n" "* Press any key to terminate the current application.\n" "* Press CTRL+ALT+DELETE again to restart your computer.\n" " You will lose any unsaved information in all applications.\n" "\n" "\n"); BSOD_TEXT (bst, CENTER, "Press any key to continue"); bst->y = ((bst->xgwa.height - ((bst->font->ascent + bst->font->descent) * 9)) / 2); XClearWindow (dpy, window); return bst; } static struct bsod_state * windows_nt (Display *dpy, Window window) { struct bsod_state *bst = make_bsod_state (dpy, window, "nt", "NT"); BSOD_TEXT (bst, LEFT, "*** STOP: 0x0000001E (0x80000003,0x80106fc0,0x8025ea21,0xfd6829e8)\n" "Unhandled Kernel exception c0000047 from fa8418b4 (8025ea21,fd6829e8)\n" "\n" "Dll Base Date Stamp - Name Dll Base Date Stamp - Name\n" "80100000 2be154c9 - ntoskrnl.exe 80400000 2bc153b0 - hal.dll\n" "80258000 2bd49628 - ncrc710.sys 8025c000 2bd49688 - SCSIPORT.SYS \n" "80267000 2bd49683 - scsidisk.sys 802a6000 2bd496b9 - Fastfat.sys\n" "fa800000 2bd49666 - Floppy.SYS fa810000 2bd496db - Hpfs_Rec.SYS\n" "fa820000 2bd49676 - Null.SYS fa830000 2bd4965a - Beep.SYS\n" "fa840000 2bdaab00 - i8042prt.SYS fa850000 2bd5a020 - SERMOUSE.SYS\n" "fa860000 2bd4966f - kbdclass.SYS fa870000 2bd49671 - MOUCLASS.SYS\n" "fa880000 2bd9c0be - Videoprt.SYS fa890000 2bd49638 - NCC1701E.SYS\n" "fa8a0000 2bd4a4ce - Vga.SYS fa8b0000 2bd496d0 - Msfs.SYS\n" "fa8c0000 2bd496c3 - Npfs.SYS fa8e0000 2bd496c9 - Ntfs.SYS\n" "fa940000 2bd496df - NDIS.SYS fa930000 2bd49707 - wdlan.sys\n" "fa970000 2bd49712 - TDI.SYS fa950000 2bd5a7fb - nbf.sys\n" "fa980000 2bd72406 - streams.sys fa9b0000 2bd4975f - ubnb.sys\n" "fa9c0000 2bd5bfd7 - usbser.sys fa9d0000 2bd4971d - netbios.sys\n" "fa9e0000 2bd49678 - Parallel.sys fa9f0000 2bd4969f - serial.SYS\n" "faa00000 2bd49739 - mup.sys faa40000 2bd4971f - SMBTRSUP.SYS\n" "faa10000 2bd6f2a2 - srv.sys faa50000 2bd4971a - afd.sys\n" "faa60000 2bd6fd80 - rdr.sys faaa0000 2bd49735 - bowser.sys\n" "\n" "Address dword dump Dll Base - Name\n" "801afc20 80106fc0 80106fc0 00000000 00000000 80149905 : " "fa840000 - i8042prt.SYS\n" "801afc24 80149905 80149905 ff8e6b8c 80129c2c ff8e6b94 : " "8025c000 - SCSIPORT.SYS\n" "801afc2c 80129c2c 80129c2c ff8e6b94 00000000 ff8e6b94 : " "80100000 - ntoskrnl.exe\n" "801afc34 801240f2 80124f02 ff8e6df4 ff8e6f60 ff8e6c58 : " "80100000 - ntoskrnl.exe\n" "801afc54 80124f16 80124f16 ff8e6f60 ff8e6c3c 8015ac7e : " "80100000 - ntoskrnl.exe\n" "801afc64 8015ac7e 8015ac7e ff8e6df4 ff8e6f60 ff8e6c58 : " "80100000 - ntoskrnl.exe\n" "801afc70 80129bda 80129bda 00000000 80088000 80106fc0 : " "80100000 - ntoskrnl.exe\n" "\n" "Kernel Debugger Using: COM2 (Port 0x2f8, Baud Rate 19200)\n" "Restart and set the recovery options in the system control panel\n" "or the /CRASHDEBUG system start option. If this message reappears,\n" "contact your system administrator or technical support group." ); bst->line_delay = 750; XClearWindow (dpy, window); return bst; } static struct bsod_state * windows_2k (Display *dpy, Window window) { struct bsod_state *bst = make_bsod_state (dpy, window, "windows", "Windows"); BSOD_TEXT (bst, LEFT, "*** STOP: 0x000000D1 (0xE1D38000,0x0000001C,0x00000000,0xF09D42DA)\n" "DRIVER_IRQL_NOT_LESS_OR_EQUAL \n" "\n" "*** Address F09D42DA base at F09D4000, DateStamp 39f459ff - CRASHDD.SYS\n" "\n" "Beginning dump of physical memory\n"); BSOD_PAUSE (bst, 4000000); BSOD_TEXT (bst, LEFT, "Physical memory dump complete. Contact your system administrator or\n" "technical support group.\n"); bst->left_margin = 40; bst->y = (bst->font->ascent + bst->font->descent) * 10; bst->line_delay = 750; XClearWindow (dpy, window); return bst; } static struct bsod_state * windows_me (Display *dpy, Window window) { struct bsod_state *bst = make_bsod_state (dpy, window, "windows", "Windows"); BSOD_TEXT (bst, LEFT, "Windows protection error. You need to restart your computer.\n\n" "System halted."); BSOD_CURSOR (bst, CURSOR_LINE, 120000, 999999); bst->left_margin = 40; bst->y = ((bst->xgwa.height - ((bst->font->ascent + bst->font->descent) * 3)) / 2); XClearWindow (dpy, window); return bst; } static struct bsod_state * windows_xp (Display *dpy, Window window) { struct bsod_state *bst = make_bsod_state (dpy, window, "windows", "Windows"); BSOD_TEXT (bst, LEFT, /* From Wm. Rhodes */ "A problem has been detected and windows has been shut down to prevent " "damage\n" "to your computer.\n" "\n" "If this is the first time you've seen this Stop error screen,\n" "restart your computer. If this screen appears again, follow\n" "these steps:\n" "\n" "Check to be sure you have adequate disk space. If a driver is\n" "identified in the Stop message, disable the driver or check\n" "with the manufacturer for driver updates. Try changing video\n" "adapters.\n" "\n" "Check with your hardware vendor for any BIOS updates. Disable\n" "BIOS memory options such as caching or shadowing. If you need\n" "to use Safe Mode to remove or disable components, restart your\n" "computer, press F8 to select Advanced Startup Options, and then\n" "select Safe Mode.\n" "\n" "Technical information:\n" "\n" "*** STOP: 0x0000007E (0xC0000005,0xF88FF190,0x0xF8975BA0,0xF89758A0)\n" "\n" "\n" "*** EPUSBDSK.sys - Address F88FF190 base at FF88FE000, datestamp " "3b9f3248\n" "\n" "Beginning dump of physical memory\n"); BSOD_PAUSE (bst, 4000000); BSOD_TEXT (bst, LEFT, "Physical memory dump complete.\n" "Contact your system administrator or technical support group for " "further\n" "assistance.\n"); XClearWindow (dpy, window); return bst; } static struct bsod_state * windows_lh (Display *dpy, Window window) { struct bsod_state *bst = make_bsod_state (dpy, window, "windowslh", "WindowsLH"); unsigned long fg = bst->fg; unsigned long bg = bst->bg; unsigned long bg2 = get_pixel_resource (dpy, bst->xgwa.colormap, "windowslh.background2", "WindowsLH.Background"); /* The "RSOD" that appeared with "Windows Longhorn 5048.050401-0536_x86fre" As reported by http://joi.ito.com/RedScreen.jpg */ BSOD_COLOR (bst, bg, bg2); BSOD_TEXT (bst, CENTER_FULL, "Windows Boot Error\n"); BSOD_COLOR (bst, fg, bg); BSOD_TEXT (bst, CENTER, "\n" "Windows Boot Manager has experienced a problem.\n" "\n" "\n" " Status: 0xc000000f\n" "\n" "\n" "\n" " Info: An error occurred transferring exectuion." /* (sic) */ "\n" "\n" "\n" "You can try to recover the system with the Microsoft Windows " "System Recovery\n" "Tools. (You might need to restart the system manually.)\n" "\n" "If the problem continues, please contact your system administrator " "or computer\n" "manufacturer.\n" ); BSOD_MOVETO (bst, bst->left_margin, bst->xgwa.height - bst->font->descent); BSOD_COLOR (bst, bg, bg2); BSOD_TEXT (bst, LEFT_FULL, " SPACE=Continue\n"); bst->y = bst->font->ascent; XClearWindow (dpy, window); return bst; } static struct bsod_state * windows_10 (Display *dpy, Window window) { struct bsod_state *bst = make_bsod_state (dpy, window, "win10", "Win10"); int qr_width = 41; int qr_height = 41; static const unsigned char qr_bits[] = { 0xFF,0xFF,0xFF,0xFF,0xFF,0x01,0xFF,0xFF,0xFF,0xFF,0xFF,0x01, 0x03,0x9A,0x70,0xEE,0x80,0x01,0xFB,0x22,0xAA,0xA6,0xBE,0x01, 0x8B,0x8E,0x74,0xE7,0xA2,0x01,0x8B,0xEE,0x42,0xC4,0xA2,0x01, 0x8B,0x42,0x6E,0xED,0xA2,0x01,0xFB,0xDA,0x63,0xA6,0xBE,0x01, 0x03,0xAA,0xAA,0xAA,0x80,0x01,0xFF,0x8B,0xD8,0x9D,0xFF,0x01, 0x63,0x62,0xDA,0x1B,0x98,0x01,0x6F,0x67,0x98,0x9F,0xBC,0x01, 0x4F,0xCC,0x55,0x81,0x83,0x01,0xB7,0x6D,0xFF,0x68,0xB2,0x01, 0xC3,0x10,0x87,0x8B,0x96,0x01,0x6F,0xB1,0x91,0x58,0x94,0x01, 0xE3,0x36,0x88,0x84,0xB8,0x01,0x83,0x9B,0xFE,0x59,0xD7,0x01, 0x3B,0x74,0x98,0x5C,0xB4,0x01,0x37,0x75,0xDC,0x91,0xA6,0x01, 0x77,0xDE,0x01,0x54,0xBA,0x01,0xBB,0x6D,0x8B,0xB9,0xB5,0x01, 0x1F,0x06,0xBD,0x9B,0xB4,0x01,0xD3,0xBD,0x91,0x19,0x84,0x01, 0x0B,0x20,0xD8,0x91,0xB4,0x01,0x33,0x95,0xBC,0x0A,0xD5,0x01, 0xB3,0x60,0xDC,0xD9,0xB6,0x01,0xEF,0x77,0x18,0x09,0xA4,0x01, 0xA3,0xC2,0x95,0x51,0xB2,0x01,0xDF,0x63,0xDB,0xBE,0xB3,0x01, 0x03,0x08,0xC9,0x09,0xF0,0x01,0xFF,0xA3,0x19,0xBD,0xFB,0x01, 0x03,0x2E,0x84,0xA5,0xAA,0x01,0xFB,0x9A,0xFC,0x9B,0xBB,0x01, 0x8B,0x7E,0x9C,0x1D,0xB0,0x01,0x8B,0x6E,0x58,0xA1,0xDB,0x01, 0x8B,0xDA,0xD5,0x65,0xA2,0x01,0xFB,0x72,0xFB,0xE9,0xF0,0x01, 0x03,0x02,0x99,0x3B,0xB3,0x01,0xFF,0xFF,0xFF,0xFF,0xFF,0x01, 0xFF,0xFF,0xFF,0xFF,0xFF,0x01}; Pixmap pixmap; const char *lines[] = { ":(\n", "\n", "Your PC ran into a problem and needs to restart. We're just\n", "collecting some error info, and then we'll restart for you.\n", "\n", "\n", "\n", "For more information about this issue and\n", "possible fixes, visit\n", /* "https://www.jwz.org/xscreensaver\n",*/ "http://youtu.be/-RjmN9RZyr4\n", "\n", "If you call a support person, give them this info:\n", "Stop code CRITICAL_PROCESS_DIED", }; int i, y = 0, y0 = 0; int line_height0 = bst->fontB->ascent; int line_height1 = bst->fontA->ascent + bst->fontA->descent; int line_height2 = bst->fontC->ascent + bst->fontC->descent; int line_height = line_height0; int top, left0, left; int stop = 60 + (random() % 39); line_height1 *= 1.3; line_height2 *= 1.5; top = ((bst->xgwa.height - (line_height0 * 1 + line_height1 * 6 + line_height2 * 6)) / 2); { int dir, ascent, descent; XCharStruct ov; const char *s = lines[2]; XTextExtents (bst->fontA, s, strlen(s), &dir, &ascent, &descent, &ov); left = left0 = (bst->xgwa.width - ov.width) / 2; } pixmap = XCreatePixmapFromBitmapData (dpy, window, (char *) qr_bits, qr_width, qr_height, bst->fg, bst->bg, bst->xgwa.depth); for (i = 0; i < 2; i++) { pixmap = double_pixmap (dpy, bst->gc, bst->xgwa.visual, bst->xgwa.depth, pixmap, qr_width, qr_height); qr_width *= 2; qr_height *= 2; } bst->pixmap = pixmap; y = top; line_height = line_height0; BSOD_FONT (bst, 1); for (i = 0; i < countof(lines); i++) { BSOD_MOVETO (bst, left, y); BSOD_TEXT (bst, LEFT, lines[i]); y += line_height; if (i == 0) { BSOD_FONT (bst, 0); line_height = line_height1; } else if (i == 4) { y0 = y; y += line_height / 2; BSOD_PIXMAP (bst, 0, 0, qr_width, qr_height, left, y + line_height1); BSOD_FONT (bst, 2); line_height = line_height2; left += qr_width + line_height2 / 2; # ifdef HAVE_MOBILE y -= 14; # endif } } left = left0; BSOD_FONT (bst, 0); for (i = 0; i <= stop; i++) { char buf[100]; sprintf (buf, "%d%% complete", i); BSOD_MOVETO (bst, left, y0); BSOD_TEXT (bst, LEFT, buf); BSOD_PAUSE (bst, 85000); } BSOD_PAUSE (bst, 3000000); XClearWindow (dpy, window); return bst; } static struct bsod_state * windows_other (Display *dpy, Window window) { /* Lump all of the 2K-ish crashes together and select them randomly... */ int which = (random() % 4); switch (which) { case 0: return windows_2k (dpy, window); break; case 1: return windows_me (dpy, window); break; case 2: return windows_xp (dpy, window); break; case 3: return windows_lh (dpy, window); break; default: abort(); break; } } /* As seen in Portal 2. By jwz. */ static struct bsod_state * glados (Display *dpy, Window window) { struct bsod_state *bst = make_bsod_state (dpy, window, "glaDOS", "GlaDOS"); const char * panicstr[] = { "\n", "MOLTEN CORE WARNING\n", "\n", "An operator error exception has occurred at FISSREAC0020093:09\n", "FISSREAC0020077:14 FISSREAC0020023:17 FISSREAC0020088:22\n", "neutron multiplication rate at spikevalue 99999999\n", "\n", "* Press any key to vent radiological emissions into atmosphere.\n", "* Consult reactor core manual for instructions on proper reactor core\n", "maintenance and repair.\n", "\n", "Press any key to continue\n", }; int i; bst->y = ((bst->xgwa.height - ((bst->font->ascent + bst->font->descent) * countof(panicstr))) / 2); BSOD_MOVETO (bst, 0, bst->y); BSOD_INVERT (bst); BSOD_TEXT (bst, CENTER, "OPERATOR ERROR\n"); BSOD_INVERT (bst); for (i = 0; i < countof(panicstr); i++) BSOD_TEXT (bst, CENTER, panicstr[i]); BSOD_PAUSE (bst, 1000000); BSOD_INVERT (bst); BSOD_RECT (bst, True, 0, 0, bst->xgwa.width, bst->xgwa.height); BSOD_INVERT (bst); BSOD_PAUSE (bst, 250000); BSOD_RESET (bst); XClearWindow (dpy, window); return bst; } /* SCO OpenServer 5 panic, by Tom Kelly */ static struct bsod_state * sco (Display *dpy, Window window) { struct bsod_state *bst = make_bsod_state (dpy, window, "sco", "SCO"); BSOD_TEXT (bst, LEFT, "Unexpected trap in kernel mode:\n" "\n" "cr0 0x80010013 cr2 0x00000014 cr3 0x00000000 tlb 0x00000000\n" "ss 0x00071054 uesp 0x00012055 efl 0x00080888 ipl 0x00000005\n" "cs 0x00092585 eip 0x00544a4b err 0x004d4a47 trap 0x0000000E\n" "eax 0x0045474b ecx 0x0042544b edx 0x57687920 ebx 0x61726520\n" "esp 0x796f7520 ebp 0x72656164 esi 0x696e6720 edi 0x74686973\n" "ds 0x3f000000 es 0x43494c48 fs 0x43525343 gs 0x4f4d4b53\n" "\n" "PANIC: k_trap - kernel mode trap type 0x0000000E\n" "Trying to dump 5023 pages to dumpdev hd (1/41), 63 pages per '.'\n" ); BSOD_CHAR_DELAY (bst, 100000); BSOD_TEXT (bst, LEFT, "................................................................." "..............\n" ); BSOD_CHAR_DELAY (bst, 0); BSOD_TEXT (bst, LEFT, "5023 pages dumped\n" "\n" "\n" ); BSOD_PAUSE (bst, 2000000); BSOD_TEXT (bst, LEFT, "** Safe to Power Off **\n" " - or -\n" "** Press Any Key to Reboot **\n" ); bst->y = ((bst->xgwa.height - ((bst->font->ascent + bst->font->descent) * 18))); XClearWindow (dpy, window); return bst; } /* Linux (sparc) panic, by Tom Kelly */ static struct bsod_state * sparc_linux (Display *dpy, Window window) { struct bsod_state *bst = make_bsod_state (dpy, window, "sparclinux", "SparcLinux"); bst->scroll_p = True; bst->y = bst->xgwa.height - bst->font->ascent - bst->font->descent; BSOD_TEXT (bst, LEFT, "\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n" "Unable to handle kernel paging request at virtual address f0d4a000\n" "tsk->mm->context = 00000014\n" "tsk->mm->pgd = f26b0000\n" " \\|/ ____ \\|/\n" " \"@'/ ,. \\`@\"\n" " /_| \\__/ |_\\\n" " \\__U_/\n" "gawk(22827): Oops\n" "PSR: 044010c1 PC: f001c2cc NPC: f001c2d0 Y: 00000000\n" "g0: 00001000 g1: fffffff7 g2: 04401086 g3: 0001eaa0\n" "g4: 000207dc g5: f0130400 g6: f0d4a018 g7: 00000001\n" "o0: 00000000 o1: f0d4a298 o2: 00000040 o3: f1380718\n" "o4: f1380718 o5: 00000200 sp: f1b13f08 ret_pc: f001c2a0\n" "l0: efffd880 l1: 00000001 l2: f0d4a230 l3: 00000014\n" "l4: 0000ffff l5: f0131550 l6: f012c000 l7: f0130400\n" "i0: f1b13fb0 i1: 00000001 i2: 00000002 i3: 0007c000\n" "i4: f01457c0 i5: 00000004 i6: f1b13f70 i7: f0015360\n" "Instruction DUMP:\n" ); XClearWindow (dpy, window); return bst; } /* BSD Panic by greywolf@starwolf.com - modeled after the Linux panic above. By Grey Wolf */ static struct bsod_state * bsd (Display *dpy, Window window) { struct bsod_state *bst = make_bsod_state (dpy, window, "bsd", "BSD"); const char * const panicstr[] = { "panic: ifree: freeing free inode\n", "panic: blkfree: freeing free block\n", "panic: improbability coefficient below zero\n", "panic: cgsixmmap\n", "panic: crazy interrupts\n", "panic: nmi\n", "panic: attempted windows install\n", "panic: don't\n", "panic: free inode isn't\n", "panic: cpu_fork: curproc\n", "panic: malloc: out of space in kmem_map\n", "panic: vogon starship detected\n", "panic: teleport chamber: out of order\n", "panic: Brain fried - core dumped\n" }; int i, n, b; char syncing[80], bbuf[5]; for (i = 0; i < sizeof(syncing); i++) syncing[i] = 0; i = (random() % (sizeof(panicstr) / sizeof(*panicstr))); BSOD_TEXT (bst, LEFT, panicstr[i]); BSOD_TEXT (bst, LEFT, "Syncing disks: "); b = (random() % 40); for (n = 0; (n < 20) && (b > 0); n++) { if (i) { i = (random() & 0x7); b -= (random() & 0xff) % 20; if (b < 0) b = 0; } sprintf (bbuf, "%d ", b); BSOD_TEXT (bst, LEFT, bbuf); BSOD_PAUSE (bst, 1000000); } BSOD_TEXT (bst, LEFT, "\n"); BSOD_TEXT (bst, LEFT, (b ? "damn!" : "sunk!")); BSOD_TEXT (bst, LEFT, "\nRebooting\n"); bst->y = ((bst->xgwa.height - ((bst->font->ascent + bst->font->descent) * 4))); XClearWindow (dpy, window); return bst; } static struct bsod_state * amiga (Display *dpy, Window window) { struct bsod_state *bst = make_bsod_state (dpy, window, "amiga", "Amiga"); Pixmap pixmap = 0; int pix_w = 0, pix_h = 0; int height; int lw = 10; unsigned long bg2 = get_pixel_resource (dpy, bst->xgwa.colormap, "amiga.background2", "Amiga.Background"); # ifdef DO_XPM pixmap = xpm_data_to_pixmap (dpy, window, (char **) amiga_hand, &pix_w, &pix_h, 0); # endif /* DO_XPM */ if (pixmap && MIN (bst->xgwa.width, bst->xgwa.height) > 600) /* scale up the bitmap */ { pixmap = double_pixmap (dpy, bst->gc, bst->xgwa.visual, bst->xgwa.depth, pixmap, pix_w, pix_h); pix_w *= 2; pix_h *= 2; } XSetLineAttributes (dpy, bst->gc, lw, LineSolid, CapButt, JoinMiter); height = (bst->font->ascent + bst->font->descent) * 6; BSOD_PAUSE (bst, 2000000); BSOD_COPY (bst, 0, 0, bst->xgwa.width, bst->xgwa.height - height, 0, height); BSOD_INVERT (bst); BSOD_RECT (bst, True, 0, 0, bst->xgwa.width, height); BSOD_INVERT (bst); BSOD_TEXT (bst, CENTER, "\n" "Software failure. Press left mouse button to continue.\n" "Guru Meditation #00000003.00C01570" ); BSOD_RECT (bst, False, lw/2, lw/2, bst->xgwa.width - lw, height); BSOD_PAUSE (bst, 1000000); BSOD_INVERT (bst); BSOD_LOOP (bst, -3); XSetWindowBackground (dpy, window, bg2); XClearWindow (dpy, window); XSetWindowBackground (dpy, window, bst->bg); if (pixmap) { int x = (bst->xgwa.width - pix_w) / 2; int y = ((bst->xgwa.height - pix_h) / 2); XCopyArea (dpy, pixmap, bst->window, bst->gc, 0, 0, pix_w, pix_h, x, y); } bst->y += lw; return bst; } /* Atari ST, by Marcus Herbert Marcus had this to say: Though I still have my Atari somewhere, I hardly remember the meaning of the bombs. I think 9 bombs was "bus error" or something like that. And you often had a few bombs displayed quickly and then the next few ones coming up step by step. Perhaps somebody else can tell you more about it.. its just a quick hack :-} */ static struct bsod_state * atari (Display *dpy, Window window) { struct bsod_state *bst = make_bsod_state (dpy, window, "atari", "Atari"); Pixmap pixmap = 0; int pix_w = atari_width; int pix_h = atari_height; int offset; int i, x, y; pixmap = XCreatePixmapFromBitmapData (dpy, window, (char *) atari_bits, pix_w, pix_h, bst->fg, bst->bg, bst->xgwa.depth); pixmap = double_pixmap (dpy, bst->gc, bst->xgwa.visual, bst->xgwa.depth, pixmap, pix_w, pix_h); pix_w *= 2; pix_h *= 2; offset = pix_w; x = 0; y = bst->xgwa.height/2; if (y < 0) y = 0; for (i = 1; i< 7; i++) BSOD_COPY (bst, x, y, pix_w, pix_h, (x + (i*offset)), y); for (; i< 10; i++) { BSOD_PAUSE (bst, 1000000); BSOD_COPY (bst, x, y, pix_w, pix_h, (x + (i*offset)), y); } XClearWindow (dpy, window); XCopyArea (dpy, pixmap, window, bst->gc, 0, 0, pix_w, pix_h, x, y); XFreePixmap (dpy, pixmap); return bst; } static struct bsod_state * mac (Display *dpy, Window window) { struct bsod_state *bst = make_bsod_state (dpy, window, "mac", "Mac"); Pixmap pixmap = 0; int pix_w = mac_width; int pix_h = mac_height; int offset = mac_height * 4; int i; const char *string = ("0 0 0 0 0 0 0 F\n" "0 0 0 0 0 0 0 3"); pixmap = XCreatePixmapFromBitmapData(dpy, window, (char *) mac_bits, mac_width, mac_height, bst->fg, bst->bg, bst->xgwa.depth); for (i = 0; i < 2; i++) { pixmap = double_pixmap (dpy, bst->gc, bst->xgwa.visual, bst->xgwa.depth, pixmap, pix_w, pix_h); pix_w *= 2; pix_h *= 2; } bst->x = (bst->xgwa.width - pix_w) / 2; bst->y = (((bst->xgwa.height + offset) / 2) - pix_h - (bst->font->ascent + bst->font->descent) * 2); if (bst->y < 0) bst->y = 0; XClearWindow (dpy, window); XCopyArea (dpy, pixmap, window, bst->gc, 0, 0, pix_w, pix_h, bst->x, bst->y); XFreePixmap (dpy, pixmap); bst->y += offset + bst->font->ascent + bst->font->descent; BSOD_TEXT (bst, CENTER, string); return bst; } static struct bsod_state * macsbug (Display *dpy, Window window) { struct bsod_state *bst = make_bsod_state (dpy, window, "macsbug", "MacsBug"); __extension__ const char *left = (" SP \n" " 04EB0A58 \n" "58 00010000\n" "5C 00010000\n" " ........\n" "60 00000000\n" "64 000004EB\n" " ........\n" "68 0000027F\n" "6C 2D980035\n" " ....-..5\n" "70 00000054\n" "74 0173003E\n" " ...T.s.>\n" "78 04EBDA76\n" "7C 04EBDA8E\n" " .S.L.a.U\n" "80 00000000\n" "84 000004EB\n" " ........\n" "88 00010000\n" "8C 00010000\n" " ...{3..S\n" "\n" "\n" " CurApName \n" " Finder \n" "\n" " 32-bit VM \n" "SR Smxnzvc0\n" "D0 04EC0062\n" "D1 00000053\n" "D2 FFFF0100\n" "D3 00010000\n" "D4 00010000\n" "D5 04EBDA76\n" "D6 04EBDA8E\n" "D7 00000001\n" "\n" "A0 04EBDA76\n" "A1 04EBDA8E\n" "A2 A0A00060\n" "A3 027F2D98\n" "A4 027F2E58\n" "A5 04EC04F0\n" "A6 04EB0A86\n" "A7 04EB0A58"); const char *bottom = (" _A09D\n" " +00884 40843714 #$0700,SR " " ; A973 | A973\n" " +00886 40843765 *+$0400 " " | 4A1F\n" " +00888 40843718 $0004(A7),([0,A7[)" " ; 04E8D0AE | 66B8"); __extension__ const char * body = ("PowerPC unmapped memory exception at 003AFDAC " "BowelsOfTheMemoryMgr+04F9C\n" " Calling chain using A6/R1 links\n" " Back chain ISA Caller\n" " 00000000 PPC 28C5353C __start+00054\n" " 24DB03C0 PPC 28B9258C main+0039C\n" " 24DB0350 PPC 28B9210C MainEvent+00494\n" " 24DB02B0 PPC 28B91B40 HandleEvent+00278\n" " 24DB0250 PPC 28B83DAC DoAppleEvent+00020\n" " 24DB0210 PPC FFD3E5D0 " "AEProcessAppleEvent+00020\n" " 24DB0132 68K 00589468\n" " 24DAFF8C 68K 00589582\n" " 24DAFF26 68K 00588F70\n" " 24DAFEB3 PPC 00307098 " "EmToNatEndMoveParams+00014\n" " 24DAFE40 PPC 28B9D0B0 DoScript+001C4\n" " 24DAFDD0 PPC 28B9C35C RunScript+00390\n" " 24DAFC60 PPC 28BA36D4 run_perl+000E0\n" " 24DAFC10 PPC 28BC2904 perl_run+002CC\n" " 24DAFA80 PPC 28C18490 Perl_runops+00068\n" " 24DAFA30 PPC 28BE6CC0 Perl_pp_backtick+000FC\n" " 24DAF9D0 PPC 28BA48B8 Perl_my_popen+00158\n" " 24DAF980 PPC 28C5395C sfclose+00378\n" " 24DAF930 PPC 28BA568C free+0000C\n" " 24DAF8F0 PPC 28BA6254 pool_free+001D0\n" " 24DAF8A0 PPC FFD48F14 DisposePtr+00028\n" " 24DAF7C9 PPC 00307098 " "EmToNatEndMoveParams+00014\n" " 24DAF780 PPC 003AA180 __DisposePtr+00010"); const char *s; int body_lines = 1; int char_width, line_height; int col_right, row_top, row_bottom, page_right, page_bottom, body_top; int xoff, yoff; unsigned long fg = bst->fg; unsigned long bg = bst->bg; unsigned long bc = get_pixel_resource (dpy, bst->xgwa.colormap, "macsbug.borderColor", "MacsBug.BorderColor"); for (s = body; *s; s++) if (*s == '\n') body_lines++; char_width = (bst->font->per_char ? bst->font->per_char['n'-bst->font->min_char_or_byte2].width : bst->font->min_bounds.width); line_height = bst->font->ascent + bst->font->descent; col_right = char_width * 12; /* number of columns in `left' */ page_bottom = line_height * 47; /* number of lines in `left' */ if (page_bottom > bst->xgwa.height) page_bottom = bst->xgwa.height; row_bottom = page_bottom - line_height; row_top = row_bottom - (line_height * 4); page_right = col_right + (char_width * 88); body_top = row_top - (line_height * body_lines); page_bottom += 2; row_bottom += 2; body_top -= 4; if (body_top > 4) body_top = 4; xoff = (bst->xgwa.width - page_right) / 2; yoff = (bst->xgwa.height - page_bottom) / 2; if (xoff < 0) xoff = 0; if (yoff < 0) yoff = 0; BSOD_MARGINS (bst, xoff, yoff); BSOD_COLOR (bst, bc, bg); BSOD_RECT (bst, True, 0, 0, bst->xgwa.width, bst->xgwa.height); BSOD_COLOR (bst, bg, bg); BSOD_RECT (bst, True, xoff-2, yoff, page_right+4, page_bottom); BSOD_COLOR (bst, fg, bg); BSOD_MOVETO (bst, xoff, yoff + line_height); BSOD_TEXT (bst, LEFT, left); BSOD_MOVETO (bst, xoff+col_right, yoff + row_top + line_height); BSOD_TEXT (bst, LEFT, bottom); BSOD_RECT (bst, True, xoff + col_right, yoff, 2, page_bottom); BSOD_RECT (bst, True, xoff + col_right, yoff + row_top, page_right - col_right, 1); BSOD_RECT (bst, True, xoff + col_right, yoff + row_bottom, page_right - col_right, 1); BSOD_RECT (bst, False, xoff-2, yoff, page_right+4, page_bottom); BSOD_LINE_DELAY (bst, 500); BSOD_MOVETO (bst, xoff + col_right + char_width, yoff + body_top + line_height); BSOD_MARGINS (bst, xoff + col_right + char_width, yoff); BSOD_TEXT (bst, LEFT, body); BSOD_RECT (bst, False, xoff-2, yoff, page_right+4, page_bottom); /* again */ BSOD_RECT (bst, False, xoff + col_right + (char_width/2)+2, yoff + row_bottom + 2, 0, page_bottom - row_bottom - 4); BSOD_PAUSE (bst, 666666); BSOD_INVERT (bst); BSOD_LOOP (bst, -3); XClearWindow (dpy, window); return bst; } static struct bsod_state * mac1 (Display *dpy, Window window) { struct bsod_state *bst = make_bsod_state (dpy, window, "mac1", "Mac1"); Pixmap pixmap = 0; int pix_w = macbomb_width; int pix_h = macbomb_height; int x, y; pixmap = XCreatePixmapFromBitmapData (dpy, window, (char *) macbomb_bits, macbomb_width, macbomb_height, bst->fg, bst->bg, bst->xgwa.depth); x = (bst->xgwa.width - pix_w) / 2; y = (bst->xgwa.height - pix_h) / 2; if (y < 0) y = 0; XClearWindow (dpy, window); XCopyArea (dpy, pixmap, window, bst->gc, 0, 0, pix_w, pix_h, x, y); return bst; } /* This is what kernel panics looked like on MacOS X 10.0 through 10.1.5. In later releases, it's a graphic of a power button with text in English, French, German, and Japanese overlayed transparently. */ static struct bsod_state * macx_10_0 (Display *dpy, Window window) { struct bsod_state *bst = make_bsod_state (dpy, window, "macx", "MacX"); XClearWindow (dpy, window); XSetForeground (dpy, bst->gc, get_pixel_resource (dpy, bst->xgwa.colormap, "macx.textForeground", "MacX.TextForeground")); XSetBackground (dpy, bst->gc, get_pixel_resource (dpy, bst->xgwa.colormap, "macx.textBackground", "MacX.TextBackground")); # ifdef DO_XPM { Pixmap pixmap = 0; Pixmap mask = 0; int x, y, pix_w, pix_h; pixmap = xpm_data_to_pixmap (dpy, window, (char **) happy_mac, &pix_w, &pix_h, &mask); # ifdef HAVE_MOBILE if (pixmap) { pixmap = double_pixmap (dpy, bst->gc, bst->xgwa.visual, bst->xgwa.depth, pixmap, pix_w, pix_h); mask = double_pixmap (dpy, bst->gc, bst->xgwa.visual, 1, mask, pix_w, pix_h); pix_w *= 2; pix_h *= 2; } # endif x = (bst->xgwa.width - pix_w) / 2; y = (bst->xgwa.height - pix_h) / 2; if (y < 0) y = 0; XSetClipMask (dpy, bst->gc, mask); XSetClipOrigin (dpy, bst->gc, x, y); XCopyArea (dpy, pixmap, window, bst->gc, 0, 0, pix_w, pix_h, x, y); XSetClipMask (dpy, bst->gc, None); XFreePixmap (dpy, pixmap); } #endif /* DO_XPM */ bst->left_margin = 0; bst->right_margin = 0; bst->y = bst->font->ascent; bst->macx_eol_kludge = True; bst->wrap_p = True; BSOD_PAUSE (bst, 3000000); BSOD_TEXT (bst, LEFT, "panic(cpu 0): Unable to find driver for this platform: " "\"PowerMac 3,5\".\n" "\n" "backtrace: 0x0008c2f4 0x0002a7a0 0x001f0204 0x001d4e4c 0x001d4c5c " "0x001a56cc 0x01d5dbc 0x001c621c 0x00037430 0x00037364\n" "\n" "\n" "\n" "No debugger configured - dumping debug information\n" "\n" "version string : Darwin Kernel Version 1.3:\n" "Thu Mar 1 06:56:40 PST 2001; root:xnu/xnu-123.5.obj~1/RELEASE_PPC\n" "\n" "\n" "\n" "\n" "DBAT0: 00000000 00000000\n" "DBAT1: 00000000 00000000\n" "DBAT2: 80001FFE 8000003A\n" "DBAT3: 90001FFE 9000003A\n" "MSR=00001030\n" "backtrace: 0x0008c2f4 0x0002a7a0 0x001f0204 0x001d4e4c 0x001d4c5c " "0x001a56cc 0x01d5dbc 0x001c621c 0x00037430 0x00037364\n" "\n" "panic: We are hanging here...\n"); return bst; } # ifdef DO_XPM static struct bsod_state * macx_10_2 (Display *dpy, Window window, Bool v10_3_p) { struct bsod_state *bst = make_bsod_state (dpy, window, "macx", "MacX"); Pixmap pixmap = 0; int pix_w = 0, pix_h = 0; int x, y; pixmap = xpm_data_to_pixmap (dpy, window, (char **) (v10_3_p ? osx_10_3 : osx_10_2), &pix_w, &pix_h, 0); if (! pixmap) abort(); #if 0 if (bst->xgwa.height > 600) /* scale up the bitmap */ { pixmap = double_pixmap (dpy, bst->gc, bst->xgwa.visual, bst->xgwa.depth, pixmap, pix_w, pix_h); if (! pixmap) abort(); pix_w *= 2; pix_h *= 2; } #endif BSOD_IMG (bst); BSOD_PAUSE (bst, 2000000); bst->pixmap = pixmap; x = (bst->xgwa.width - pix_w) / 2; y = ((bst->xgwa.height - pix_h) / 2); BSOD_PIXMAP (bst, 0, 0, pix_w, pix_h, x, y); return bst; } # endif /* DO_XPM */ /* 2006 Mac Mini with MacOS 10.6 failing with a bad boot drive. By jwz. */ static struct bsod_state * mac_diskfail (Display *dpy, Window window) { struct bsod_state *bst = make_bsod_state (dpy, window, "macdisk", "Mac"); int cw = (bst->font->per_char ? bst->font->per_char['n'-bst->font->min_char_or_byte2].width : bst->font->min_bounds.width); int h = bst->font->ascent + bst->font->descent; int L = (bst->xgwa.width - (cw * 80)) / 2; int T = (bst->xgwa.height - (h * 10)) / 2; unsigned long fg = bst->fg; unsigned long bg = bst->bg; unsigned long bg2 = get_pixel_resource (dpy, bst->xgwa.colormap, "macx.background", "Mac.Background"); if (L < 0) L = 0; if (T < 0) T = 0; bst->wrap_p = True; bst->scroll_p = True; BSOD_COLOR(bst, bg2, bg); BSOD_RECT (bst, True, 0, 0, bst->xgwa.width, bst->xgwa.height); BSOD_PAUSE (bst, 3000000); BSOD_COLOR(bst, bg, fg); BSOD_RECT (bst, True, 0, 0, bst->xgwa.width, bst->xgwa.height); BSOD_COLOR(bst, fg, bg); BSOD_MARGINS (bst, L, L); BSOD_MOVETO (bst, L, T); BSOD_TEXT (bst, LEFT, "efiboot loaded from device: Acpi(PNP0A03,0)/Pci*1F|2)/Ata" "(Primary,Slave)/HD(Part\n" "2,Sig8997E427-064E-4FE7-8CB9-F27A784B232C)\n" "boot file path: \\System\\Library\\CoreServices\\boot.efi\n" ".Loading kernel cache file 'System\\Library\\Caches\\" "com.apple.kext.caches\\Startup\\\n" "kernelcache_i386.2A14EC2C'\n" "Loading 'mach_kernel'...\n" ); BSOD_CHAR_DELAY (bst, 7000); BSOD_TEXT (bst, LEFT, ".....................\n" ); BSOD_CHAR_DELAY (bst, 0); BSOD_TEXT (bst, LEFT, "root device uuid is 'B62181B4-6755-3C27-BFA1-49A0E053DBD6\n" "Loading drivers...\n" "Loading System\\Library\\Caches\\com.apple.kext.caches\\" "Startup\\Extensions.mkext....\n" ); BSOD_CHAR_DELAY (bst, 7000); BSOD_TEXT (bst, LEFT, "..............................................................." ".................\n" "..............................................................." ".................\n" "..............\n" ); BSOD_INVERT (bst); BSOD_RECT (bst, True, 0, 0, bst->xgwa.width, bst->xgwa.height); BSOD_INVERT (bst); BSOD_MARGINS (bst, 0, 0); BSOD_MOVETO (bst, 0, h); BSOD_CHAR_DELAY (bst, 0); BSOD_LINE_DELAY (bst, 5000); BSOD_TEXT (bst, LEFT, "npvhash=4095\n" "PRE enabled\n" "Darwin Kernel Version 10.8.9: Tue Jun 7 16:33:36 PDT 2011;" " root:xnu-1504.15.3~1/RELEASE_I386\n" "vm_page_bootstrap: 508036 free pages and 16252 wired pages\n" "standard timeslicing quantum is 10000 us\n" "mig_table_max_displ = 73\n" "AppleACPICPU: ProcessorId=0 LocalApicId=0 Enabled\n" "AppleACPICPU: ProcessorId=1 LocalApicId=1 Enabled\n" "calling npo_policy_init for Quarantine\n" "Security policy loaded: Quaantine policy (Quarantine)\n" "calling npo_policy_init for Sandbox\n" "Security policy loaded: Seatbelt sandbox policy (Sandbox)\n" "calling npo_policy_init for TMSafetyNet\n" "Security policy loaded: Safety net for Time Machine " "(TMSafetyNet)\n" "Copyright (c) 1982, 1986, 1989, 1991, 1993\n" "The Regents of the University of California. All rights " "reserved.\n" "\n" "MAC Framework successfully initialized\n" "using 10485 buffer headers and 4096 cluster IO buffer headers\n" "IOAPIC: Version 0x20 Vectors 64:87\n" "ACPI: System State [S0 S3 S4 S5] (S3)\n" "PFM64 0x10000000, 0xf0000000\n" "[ PCI configuration begin ]\n" "PCI configuration changed (bridge=1 device=1 cardbus=0)\n" "[ PCI configuration end, bridges 4 devices 17 ]\n" "nbinit: done (64 MB memory set for nbuf pool)\n" "rooting via boot-uuid from /chosen: " "B62181B4-6755-3C27-BFA1-49A0E053DBD6\n" "Waiting on IOProviderClass" "IOResourcesIOResourceMatch" "boot-uuid-nedia\n" "com.apple.AppleFSCCompressionTypeZlib kmod start\n" "com.apple.AppleFSCCompressionTypeZlib kmod succeeded\n" "AppleIntelCPUPowerManagementClient: ready\n" "FireWire (OHCI) Lucent ID 5811 built-in now active, GUID " "0019e3fffe97f8b4; max speed s400.\n" "Got boot device = IOService:/AppleACPIPlatformExpert/PCI000/" "AppleACPIPCI/SATA@1F,2/AppleAHCI/PRI202/IOAHCIDevice@0/" "AppleAHCIDiskDriver/IOAHCIBlockStorageDevice/" "IOBlockStorageDriver/ST96812AS Media/IOGUIDPartitionScheme/" "Customer02\n" ); BSOD_PAUSE (bst, 1000000); BSOD_TEXT (bst, LEFT, "BSD root: Disk0s, major 14, minor 2\n" "[Bluetooth::CSRHIDTransition] switchtoHCIMode (legacy)\n" "[Bluetooth::CSRHIDTransition] transition complete.\n" "CSRUSBBluetoothHCIController::setupHardware super returned 0\n" ); BSOD_PAUSE (bst, 3000000); BSOD_TEXT (bst, LEFT, "disk0s2: I/O error.\n" "0 [Level 3] [ReadUID 0] [Facility com.apple.system.fs] " "[ErrType IO] [ErrNo 5] [IOType Read] [PBlkNum 48424] " "[LBlkNum 1362] [FSLogMsgID 2009724291] [FSLogMsgOrder First]\n" "0 [Level 3] [ReadUID 0] [Facility com.apple.system.fs] " "[DevNode root_device] [MountPt /] [FSLogMsgID 2009724291] " "[FSLogMsgOrder Last]\n" "panic(cpu 0 caller 0x47f5ad): \"Process 1 exec of /sbin/launchd" " failed, errno 5\\n\"0/SourceCache/xnu/xnu-1504.15.3/bsd/kern/" "kern_exec.c:3145\n" "Debugger called: \n" "Backtrace (CPU 0), Frame : Return Address (4 potential args " "on stack)\n" "0x34bf3e48 : 0x21b837 (0x5dd7fc 0x34bf3e7c 0x223ce1 0x0)\n" "0x34bf3e98 : 0x47f5ad (0x5cf950 0x831c08 0x5 0x0)\n" "0x34bf3ef8 : 0x4696d2 (0x4800d20 0x1fe 0x45a69a0 0x80000001)\n" "0x34bf3f38 : 0x48fee5 (0x46077a8 0x84baa0 0x34bf3f88 " "0x34bf3f94)\n" "0x34bf3f68 : 0x219432 (0x46077a8 0xffffff7f 0x0 0x227c4b)\n" "0x34bf3fa8 : 0x2aacb4 (0xffffffff 0x1 0x22f8f5 0x227c4b)\n" "0x34bf3fc8 : 0x2a1976 (0x0 0x0 0x2a17ab 0x4023ef0)\n" "\n" "BSD process name corresponding to current thread: init\n" "\n" "Mac OS version:\n" "Not yet set\n" "\n" "Kernel version:\n" "Darwin Kernel version 10.8.0: Tue Jun 7 16:33:36 PDT 2011; " "root:xnu-1504.15-3~1/RELEASE_I386\n" "System model name: Macmini1,1 (Mac-F4208EC0)\n" "\n" "System uptime in nanoseconds: 13239332027\n" ); BSOD_CURSOR (bst, CURSOR_BLOCK, 500000, 999999); XClearWindow (dpy, window); return bst; } static struct bsod_state * macx (Display *dpy, Window window) { # ifdef DO_XPM switch (random() % 4) { case 0: return macx_10_0 (dpy, window); break; case 1: return macx_10_2 (dpy, window, False); break; case 2: return macx_10_2 (dpy, window, True); break; case 3: return mac_diskfail (dpy, window); break; default: abort(); } # else /* !DO_XPM */ switch (random() % 2) { case 0: return macx_10_0 (dpy, window); break; default: return mac_diskfail (dpy, window); break; } # endif /* !DO_XPM */ } #ifndef HAVE_JWXYZ /* #### I have no idea how to implement this without real plane-masks. I don't think it would look right if done with alpha-transparency... */ /* blit damage * * by Martin Pool , Feb 2000. * * This is meant to look like the preferred failure mode of NCD * Xterms. The parameters for choosing what to copy where might not * be quite right, but it looks about ugly enough. */ static struct bsod_state * blitdamage (Display *dpy, Window window) { struct bsod_state *bst = make_bsod_state (dpy, window, "blitdamage", "BlitDamage"); int i; int delta_x = 0, delta_y = 0; int w, h; int chunk_h, chunk_w; int steps; int src_x, src_y; int x, y; w = bst->xgwa.width; h = bst->xgwa.height; XSetPlaneMask (dpy, bst->gc, random()); steps = 50; chunk_w = w / (random() % 1 + 1); chunk_h = h / (random() % 1 + 1); if (random() & 0x1000) delta_y = random() % 600; if (!delta_y || (random() & 0x2000)) delta_x = random() % 600; src_x = 0; src_y = 0; x = 0; y = 0; BSOD_IMG (bst); for (i = 0; i < steps; i++) { if (x + chunk_w > w) x -= w; else x += delta_x; if (y + chunk_h > h) y -= h; else y += delta_y; BSOD_COPY (bst, src_x, src_y, chunk_w, chunk_h, x, y); BSOD_PAUSE (bst, 1000); } return bst; } #endif /* !HAVE_JWXYZ */ /* * OS/2 panics, by Knut St. Osmundsen * * All but one messages are real ones, some are from my test machines * and system dumps, others are reconstructed from google results. * Please, don't be to hard if the formatting of the earlier systems * aren't 100% correct. */ static struct bsod_state * os2 (Display *dpy, Window window) { struct bsod_state *bst = make_bsod_state (dpy, window, "os2", "OS2"); __extension__ static const char * const os2_panics[] = { /* OS/2 2.0 trap - details are bogus (CR0++). */ "TRAP 0002 ERRCD=0000 ERACC=**** ERLIM=********\n" "EAX=7d240a58 EBX=ff202fdc ECX=00064423 EDX=00003624\n" "ESI=fff3272c EDI=7d240004 EBP=00004a44 FLG=00003202\n" "CS:EIP=0160:fff702a6 CSACC=c09d CSLIM=ffffffff\n" "SS:ESP=0030:00004a38 SSACC=1097 SSLIM=00003fff\n" "DS=0158 DSACC=c0f3 DSLIM=ffffffff CR0=fffffffb\n" "ES=0158 ESACC=c0f3 ESLIM=ffffffff CR2=1a060014\n" "FS=0000 FSACC=**** FSLIM=********\n" "GS=0000 GSACC=**** GSLIM=********\n" "\n" "The system detected an internal processing error\n" "at location ##0160:fff6453f - 000d:a53f\n" "60000, 9084\n" "\n" "038600d1\n" "Internal revision 6.307, 92/03/01\n" "\n", /* warp 3 (early) */ "TRAP 000e ERRCD=0000 ERACC=**** ERLIM=********\n" "EAX=ff050c20 EBX=000000bb ECX=ffff00c1 EDx=fff379b8\n" "ESI=ffe55a3c EDI=00000000 EBP=00004eb8 FLG=00013282\n" "CS:EIP=0160:fff8dbb8 CSACC=c09b CSLIM=ffffffff\n" "SS:EIP=0030:00004eb4 SSACC=1097 SSLIM=00003fff\n" "DS=0158 DSACC=c0f3 DSLIM=ffffffff CR0=8001001b\n" "ES=0158 DSACC=c0f3 DSLIM=ffffffff CR2=000000c7\n" "FS=0000 FSACC=**** FSLIM=********\n" "GS=0000 GSACC=**** GSLIM=********\n" "\n" "The system detected an internal processing error\n" "at location ##0160:fff66bf0 - 000d:9bf0.\n" "60000, 9084\n" "\n" "048600b4\n" "Internal revision 8.125, 94/02/16\n" "\n" "The system is stopped. Record the location number of the error\n" "and contact your service representative.\n", /* warp 3 */ "TRAP 000e ERRCD=0002 ERACC=**** ERLIM=********\n" "EAX=00000000 EBX=fdef1e0c ECX=00003824 EDX=0000edf9\n" "ESI=fdf30e80 EDI=fc8b0000 EBP=00005658 FLG=00012246\n" "CS:EIP=0160:fff8ada3 CSACC=c09b CSLIM=ffffffff\n" "SS:ESP=0030:000055d4 SSACC=1097 SSLIM=0000480f\n" "DS=0158 DSACC=c093 DSLIM=ffffffff CR0=8001001b\n" "ES=0158 ESACC=c093 ESLIM=ffffffff CR2=fc8b0000\n" "FS=03b8 FSACC=0093 FSLIM=00000023\n" "GS=0000 GSACC=**** GSLIM=********\n" "\n" "The system detected an internal processing error\n" "at location ##0160:fff5c364 - 000d:a364.\n" "60000, 9084\n" "\n" "05860526\n" "Internal revision 8200,94/11/07\n" "\n" "The system is stopped. Record all of the above information and\n" "contact your service representative.\n", /* warp 3 (late) */ "TRAP 000d ERRCD=2200 ERACC=1092 ERLIM=00010fff\n" "EAX=0000802e EBX=fff001c8 ECX=9bd80000 EDX=00000000\n" "ESI=fff09bd8 EDI=fdeb001b EBP=00000000 FLG=00012012\n" "CS:EIP=0168:fff480a2 CSACC=c09b CSLIM=ffffffff\n" "SS:ESP=00e8:00001f32 SSACC=0093 SSLIM=00001fff\n" "DS=0940 DSACC=0093 DSLIM=00000397 CR0=8001001b\n" "ES=00e8 ESACC=0093 ESLIM=00001fff CR2=15760008\n" "FS=0000 FSACC=**** FSLIM=****\n" "GS=0000 GSACC=**** GSLIM=****\n" "\n" "The system detected an internal processing error\n" "at location ##0168:fff4b06e - 000e:c06e\n" "60000, 9084\n" "\n" "06860652\n" "Internal revision 8.259_uni,98/01/07\n" "\n" "The system is stopped. Record all of the above information and\n" "contact your service representative.\n", /* Warp 4.52+ - the official r0trap.exe from the debugging classes */ "Exception in module: OS2KRNL\n" "TRAP 000e ERRCD=0002 ERACC=**** ERLIM=********\n" "EAX=00000001 EBX=80010002 ECX=ffed4638 EDX=0003f17b\n" "ESI=00000001 EDI=00000002 EBP=00005408 FLG=00012202\n" "CS:EIP=0168:fff3cd2e CSACC=c09b CSLIM=ffffffff\n" "SS:ESP=0030:000053ec SSACC=1097 SSLIM=000044ff\n" "DS=0160 DSACC=c093 DSLIM=ffffffff CR0=8001001b\n" "ES=0160 ESACC=c093 ESLIM=ffffffff CR2=00000001\n" "FS=0000 FSACC=**** FSLIM=********\n" "GS=0000 GSACC=**** GSLIM=********\n" "\n" "The system detected an internal processing error at\n" "location ##0168:fff1e3f3 - 000e:c3f3.\n" "60000, 9084\n" "\n" "068606a0\n" "Internal revision 14.097_UNI\n" "\n" "The system is stopped. Record all of the above information and\n" "contact your service representative.\n", /* Warp 4.52+, typical JFS problem. */ "Exeption in module: JFS\n" "TRAP 0003 ERRCD=0000 ERACC=**** ERLIM=********\n" "EAX=00000000 EBX=ffffff05 ECX=00000001 EDX=f5cd8010\n" "ESI=000000e6 EDI=000000e7 EBP=f9c7378e FLG=00002296\n" "CS:EIP=0168:f8df3250 CSACC=c09b CSLIM=ffffffff\n" "SS:ESP=1550:fdc73778 SSACC=c093 SSLIM=ffffffff\n" "DS=0160 DSACC=c093 DSLIM=ffffffff CR0=80010016\n" "ES=0160 ESACC=c093 DSLIM=ffffffff CR2=05318000\n" "FS=03c0 FSACC=0093 DSLIM=00000023\n" "GS=0160 GSACC=c093 DSLIM=ffffffff\n" "\n" "The system detected an internal processing error\n" "at location ##0168:fff1e2ab - 000e:c2ab.\n" "60000, 9084\n" "\n" "07860695\n" "\n" "Internal revision 14.100c_UNI\n" "\n" "The system is stopped. Record all of the above information and\n" "contact your service representative.\n" }; BSOD_TEXT (bst, LEFT, os2_panics[random() % countof(os2_panics)]); BSOD_CURSOR (bst, CURSOR_LINE, 240000, 999999); XClearWindow (dpy, window); return bst; } /* SPARC Solaris panic. Should look pretty authentic on Solaris boxes. * Anton Solovyev */ static struct bsod_state * sparc_solaris (Display *dpy, Window window) { struct bsod_state *bst = make_bsod_state (dpy, window, "solaris", "Solaris"); int i; bst->scroll_p = True; bst->wrap_p = True; bst->left_margin = bst->right_margin = bst->xgwa.width * 0.07; bst->top_margin = bst->bottom_margin = bst->xgwa.height * 0.07; bst->y = bst->top_margin + bst->font->ascent; BSOD_IMG (bst); BSOD_PAUSE (bst, 3000000); BSOD_INVERT(bst); BSOD_RECT (bst, True, bst->left_margin, bst->top_margin, bst->xgwa.width - bst->left_margin - bst->right_margin, bst->xgwa.height - bst->top_margin - bst->bottom_margin); BSOD_INVERT(bst); BSOD_TEXT (bst, LEFT, "BAD TRAP: cpu=0 type=0x31 rp=0x2a10043b5e0 addr=0xf3880 mmu_fsr=0x0\n" "BAD TRAP occurred in module \"unix\" due to an illegal access to a" " user address.\n" "adb: trap type = 0x31\n" "addr=0xf3880\n" "pid=307, pc=0x100306e4, sp=0x2a10043ae81, tstate=0x4480001602," " context=0x87f\n" "g1-g7: 1045b000, 32f, 10079440, 180, 300000ebde8, 0, 30000953a20\n" "Begin traceback... sp = 2a10043ae81\n" "Called from 100bd060, fp=2a10043af31, args=f3700 300008cc988 f3880 0" " 1 300000ebde0.\n" "Called from 101fe1bc, fp=2a10043b011, args=3000045a240 104465a0" " 300008e47d0 300008e48fa 300008ae350 300008ae410\n" "Called from 1007c520, fp=2a10043b0c1, args=300008e4878 300003596e8 0" " 3000045a320 0 3000045a220\n" "Called from 1007c498, fp=2a10043b171, args=1045a000 300007847f0 20" " 3000045a240 1 0\n" "Called from 1007972c, fp=2a10043b221, args=1 300009517c0 30000951e58 1" " 300007847f0 0\n" "Called from 10031e10, fp=2a10043b2d1, args=3000095b0c8 0 300009396a8" " 30000953a20 0 1\n" "Called from 10000bdd8, fp=ffffffff7ffff1c1, args=0 57 100131480" " 100131480 10012a6e0 0\n" "End traceback...\n" "panic[cpu0]/thread=30000953a20: trap\n" "syncing file systems..."); BSOD_PAUSE (bst, 3000000); BSOD_TEXT (bst, LEFT, " 1 done\n"); BSOD_TEXT (bst, LEFT, "dumping to /dev/dsk/c0t0d0s3, offset 26935296\n"); BSOD_PAUSE (bst, 2000000); for (i = 1; i <= 100; ++i) { char buf[100]; sprintf (buf, "\b\b\b\b\b\b\b\b\b\b\b%3d%% done", i); BSOD_TEXT (bst, LEFT, buf); BSOD_PAUSE (bst, 100000); } BSOD_TEXT (bst, LEFT, ": 2803 pages dumped, compression ratio 2.88, dump succeeded\n"); BSOD_PAUSE (bst, 2000000); BSOD_TEXT (bst, LEFT, "rebooting...\n" "Resetting ..."); return bst; } /* Linux panic and fsck, by jwz */ static struct bsod_state * linux_fsck (Display *dpy, Window window) { struct bsod_state *bst = make_bsod_state (dpy, window, "linux", "Linux"); int i; const char *sysname; char buf[1024]; const char *linux_panic[] = { " kernel: Unable to handle kernel paging request at virtual " "address 0000f0ad\n", " kernel: printing eip:\n", " kernel: c01becd7\n", " kernel: *pde = 00000000\n", " kernel: Oops: 0000\n", " kernel: CPU: 0\n", " kernel: EIP: 0010:[] Tainted: P \n", " kernel: EFLAGS: 00010286\n", " kernel: eax: 0000ff00 ebx: ca6b7e00 ecx: ce1d7a60 edx: ce1d7a60\n", " kernel: esi: ca6b7ebc edi: 00030000 ebp: d3655ca0 esp: ca6b7e5c\n", " kernel: ds: 0018 es: 0018 ss: 0018\n", " kernel: Process crond (pid: 1189, stackpage=ca6b7000)\n", " kernel: Stack: d3655ca0 ca6b7ebc 00030054 ca6b7e7c c01c1e5b " "00000287 00000020 c01c1fbf \n", "", " kernel: 00005a36 000000dc 000001f4 00000000 00000000 " "ce046d40 00000001 00000000 \n", "", "", "", " kernel: ffffffff d3655ca0 d3655b80 00030054 c01bef93 " "d3655ca0 ca6b7ebc 00030054 \n", "", "", "", " kernel: Call Trace: [] [] [] " "[] []\n", "", "", "", " kernel: [] [] [] []\n", " kernel: \n", " kernel: Code: 2a 00 75 08 8b 44 24 2c 85 c0 74 0c 8b 44 24 58 83 48 18 " "08 \n", 0 }; bst->scroll_p = True; bst->wrap_p = True; bst->left_margin = bst->right_margin = 10; bst->top_margin = bst->bottom_margin = 10; sysname = "linux"; # ifdef HAVE_UNAME { struct utsname uts; char *s; if (uname (&uts) >= 0) sysname = uts.nodename; s = strchr (sysname, '.'); if (s) *s = 0; } # endif /* !HAVE_UNAME */ BSOD_TEXT (bst, LEFT, "waiting for X server to shut down "); BSOD_PAUSE (bst, 100000); BSOD_TEXT (bst, LEFT, "XIO: fatal IO error 2 (broken pipe) on X server \":0.0\"\n" " after 339471 requests (339471 known processed) " "with 0 events remaining\n"); BSOD_CHAR_DELAY (bst, 300000); BSOD_TEXT (bst, LEFT, ".........\n"); BSOD_CHAR_DELAY (bst, 0); BSOD_TEXT (bst, LEFT, "xinit: X server slow to shut down, sending KILL signal.\n" "waiting for server to die "); BSOD_CHAR_DELAY (bst, 300000); BSOD_TEXT (bst, LEFT, "...\n"); BSOD_CHAR_DELAY (bst, 0); BSOD_TEXT (bst, LEFT, "xinit: Can't kill server\n"); BSOD_PAUSE (bst, 2000000); sprintf (buf, "\n%s Login: ", sysname); BSOD_TEXT (bst, LEFT, buf); BSOD_PAUSE (bst, 1000000); BSOD_TEXT (bst, LEFT, "\n\n" "Parallelizing fsck version 1.22 (22-Jun-2001)\n" "e2fsck 1.22, 22-Jun-2001 for EXT2 FS 0.5b, 95/08/09\n" "Warning! /dev/hda1 is mounted.\n" "/dev/hda1 contains a file system with errors, check forced.\n"); BSOD_PAUSE (bst, 1000000); if (0 == random() % 2) BSOD_TEXT (bst, LEFT, "Couldn't find ext2 superblock, trying backup blocks...\n" "The filesystem size (according to the superblock) is 3644739 blocks\n" "The physical size of the device is 3636706 blocks\n" "Either the superblock or the partition table is likely to be corrupt!\n" "Abort? no\n"); BSOD_PAUSE (bst, 1000000); AGAIN: BSOD_TEXT (bst, LEFT, "Pass 1: Checking inodes, blocks, and sizes\n"); BSOD_PAUSE (bst, 2000000); i = (random() % 60) - 20; while (--i > 0) { int b = random() % 0xFFFF; sprintf (buf, "Deleted inode %d has zero dtime. Fix? yes\n\n", b); BSOD_TEXT (bst, LEFT, buf); BSOD_PAUSE (bst, 1000); } i = (random() % 40) - 10; if (i > 0) { int g = random() % 0xFFFF; int b = random() % 0xFFFFFFF; BSOD_PAUSE (bst, 1000000); sprintf (buf, "Warning: Group %d's copy of the group descriptors " "has a bad block (%d).\n", g, b); BSOD_TEXT (bst, LEFT, buf); b = random() % 0x3FFFFF; while (--i > 0) { b += random() % 0xFFFF; sprintf (buf, "Error reading block %d (Attempt to read block " "from filesystem resulted in short read) while doing " "inode scan. Ignore error?", b); BSOD_TEXT (bst, LEFT, buf); BSOD_PAUSE (bst, 10000); BSOD_TEXT (bst, LEFT, " yes\n\n"); } } if (0 == (random() % 10)) { BSOD_PAUSE (bst, 1000000); i = 3 + (random() % 10); while (--i > 0) { BSOD_TEXT (bst, LEFT, "Could not allocate 256 block(s) for inode table: " "No space left on device\n"); BSOD_PAUSE (bst, 1000); } BSOD_TEXT (bst, LEFT, "Restarting e2fsck from the beginning...\n"); BSOD_PAUSE (bst, 2000000); goto AGAIN; } i = (random() % 20) - 5; if (i > 0) BSOD_PAUSE (bst, 1000000); while (--i > 0) { int j = 5 + (random() % 10); int w = random() % 4; while (--j > 0) { int b = random() % 0xFFFFF; int g = random() % 0xFFF; if (0 == (random() % 10)) b = 0; else if (0 == (random() % 10)) b = -1; if (w == 0) sprintf (buf, "Inode table for group %d not in group. (block %d)\n" "WARNING: SEVERE DATA LOSS POSSIBLE.\n" "Relocate?", g, b); else if (w == 1) sprintf (buf, "Block bitmap for group %d not in group. (block %d)\n" "Relocate?", g, b); else if (w == 2) sprintf (buf, "Inode bitmap %d for group %d not in group.\n" "Continue?", b, g); else /* if (w == 3) */ sprintf (buf, "Bad block %d in group %d's inode table.\n" "WARNING: SEVERE DATA LOSS POSSIBLE.\n" "Relocate?", b, g); BSOD_TEXT (bst, LEFT, buf); BSOD_TEXT (bst, LEFT, " yes\n\n"); BSOD_PAUSE (bst, 1000); } } if (0 == random() % 10) goto PANIC; BSOD_TEXT (bst, LEFT, "Pass 2: Checking directory structure\n"); BSOD_PAUSE (bst, 2000000); i = (random() % 20) - 5; while (--i > 0) { int n = random() % 0xFFFFF; int o = random() % 0xFFF; sprintf (buf, "Directory inode %d, block 0, offset %d: " "directory corrupted\n" "Salvage? ", n, o); BSOD_TEXT (bst, LEFT, buf); BSOD_PAUSE (bst, 1000); BSOD_TEXT (bst, LEFT, " yes\n\n"); if (0 == (random() % 100)) { sprintf (buf, "Missing '.' in directory inode %d.\nFix?", n); BSOD_TEXT (bst, LEFT, buf); BSOD_PAUSE (bst, 1000); BSOD_TEXT (bst, LEFT, " yes\n\n"); } } if (0 == random() % 10) goto PANIC; BSOD_TEXT (bst, LEFT, "Pass 3: Checking directory connectivity\n" "/lost+found not found. Create? yes\n"); BSOD_PAUSE (bst, 2000000); /* Unconnected directory inode 4949 (/var/spool/squid/06/???) Connect to /lost+found? yes '..' in /var/spool/squid/06/08 (20351) is (0), should be /var/spool/squid/06 (20350). Fix? yes Unconnected directory inode 128337 (/var/spool/squid/06/???) Connect to /lost+found? yes */ if (0 == random() % 10) goto PANIC; BSOD_TEXT (bst, LEFT, "Pass 4: Checking reference counts\n"); BSOD_PAUSE (bst, 2000000); /* Inode 2 ref count is 19, should be 20. Fix? yes Inode 4949 ref count is 3, should be 2. Fix? yes ... Inode 128336 ref count is 3, should be 2. Fix? yes Inode 128337 ref count is 3, should be 2. Fix? yes */ if (0 == random() % 10) goto PANIC; BSOD_TEXT (bst, LEFT, "Pass 5: Checking group summary information\n"); BSOD_PAUSE (bst, 2000000); i = (random() % 200) - 50; if (i > 0) { BSOD_TEXT (bst, LEFT, "Block bitmap differences: "); while (--i > 0) { sprintf (buf, " %d", -(random() % 0xFFF)); BSOD_TEXT (bst, LEFT, buf); BSOD_PAUSE (bst, 1000); } BSOD_TEXT (bst, LEFT, "\nFix? yes\n\n"); } i = (random() % 100) - 50; if (i > 0) { BSOD_TEXT (bst, LEFT, "Inode bitmap differences: "); while (--i > 0) { sprintf (buf, " %d", -(random() % 0xFFF)); BSOD_TEXT (bst, LEFT, buf); BSOD_PAUSE (bst, 1000); } BSOD_TEXT (bst, LEFT, "\nFix? yes\n\n"); } i = (random() % 20) - 5; while (--i > 0) { int g = random() % 0xFFFF; int c = random() % 0xFFFF; sprintf (buf, "Free blocks count wrong for group #0 (%d, counted=%d).\nFix? ", g, c); BSOD_TEXT (bst, LEFT, buf); BSOD_PAUSE (bst, 1000); BSOD_TEXT (bst, LEFT, " yes\n\n"); } PANIC: i = 0; BSOD_TEXT (bst, LEFT, "\n\n"); while (linux_panic[i]) { time_t t = time ((time_t *) 0); struct tm *tm = localtime (&t); char prefix[100]; if (*linux_panic[i]) { strftime (prefix, sizeof(prefix)-1, "%b %d %H:%M:%S ", tm); BSOD_TEXT (bst, LEFT, prefix); BSOD_TEXT (bst, LEFT, sysname); BSOD_TEXT (bst, LEFT, linux_panic[i]); BSOD_PAUSE (bst, 1000); } else BSOD_PAUSE (bst, 300000); i++; } BSOD_PAUSE (bst, 4000000); XClearWindow(dpy, window); return bst; } /* * Linux (hppa) panic, by Stuart Brady * Output courtesy of M. Grabert */ static struct bsod_state * hppa_linux (Display *dpy, Window window) { struct bsod_state *bst = make_bsod_state (dpy, window, "hppalinux", "HPPALinux"); int i = 0; const char *release, *sysname, *gccversion, *version; long int linedelay = 0; __extension__ struct { long int delay; const char *string; } linux_panic[] = {{ 0, "\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n" "\n\n\n\n\n\n\n\n\n\n\n\n\n" }, { 0, "Linux version %s (root@%s) (gcc version %s) %s\n" }, { 4000, "FP[0] enabled: Rev 1 Model 16\n" }, { 10, "The 32-bit Kernel has started...\n" }, { -1, "Determining PDC firmware type: System Map.\n" }, { -1, "model 00005bb0 00000481 00000000 00000002 7778df9f 100000f0 " "00000008 000000b2 000000b2\n" }, { -1, "vers 00000203\n" }, { -1, "CPUID vers 17 rev 7 (0x00000227)\n" }, { -1, "capabilities 0x3\n" }, { -1, "model 9000/785/C3000\n" }, { -1, "Total Memory: 1024 Mb\n" }, { -1, "On node 0 totalpages: 262144\n" }, { -1, " DMA zone: 262144 pages, LIFO batch:16\n" }, { -1, " Normal zone: 0 pages, LIFO batch:1\n" }, { -1, " HighMem zone: 0 pages, LIFO batch:1\n" }, { -1, "LCD display at f05d0008,f05d0000 registered\n" }, { -1, "Building zonelist for node : 0\n" }, { -1, "Kernel command line: ide=nodma root=/dev/sda3 HOME=/ ip=off " "console=ttyS0 TERM=vt102 palo_kernel=2/vmlinux-2.6\n" }, { -1, "ide_setup: ide=nodmaIDE: Prevented DMA\n" }, { -1, "PID hash table entries: 16 (order 4: 128 bytes)\n" }, {500, "Console: colour dummy device 160x64\n" }, { 10, "Memory: 1034036k available\n" }, { -1, "Calibrating delay loop... 796.67 BogoMIPS\n" }, { -1, "Dentry cache hash table entries: 131072 (order: 7, 524288 " "bytes)\n" }, { -1, "Inode-cache hash table entries: 65536 (order: 6, 262144 " "bytes)\n" }, { -1, "Mount-cache hash table entries: 512 (order: 0, 4096 bytes)\n" }, { -1, "POSIX conformance testing by UNIFIX\n" }, { -1, "NET: Registered protocol family 16\n" }, { 100, "Searching for devices...\n" }, { 25, "Found devices:\n" }, { 10, "1. Astro BC Runway Port at 0xfed00000 [10] " "{ 12, 0x0, 0x582, 0x0000b }\n" }, { -1, "2. Elroy PCI Bridge at 0xfed30000 [10/0] " "{ 13, 0x0, 0x782, 0x0000a }\n" }, { -1, "3. Elroy PCI Bridge at 0xfed32000 [10/1] " "{ 13, 0x0, 0x782, 0x0000a }\n" }, { -1, "4. Elroy PCI Bridge at 0xfed38000 [10/4] " "{ 13, 0x0, 0x782, 0x0000a }\n" }, { -1, "5. Elroy PCI Bridge at 0xfed3c000 [10/6] " "{ 13, 0x0, 0x782, 0x0000a }\n" }, { -1, "6. AllegroHigh W at 0xfffa0000 [32] " "{ 0, 0x0, 0x5bb, 0x00004 }\n" }, { -1, "7. Memory at 0xfed10200 [49] { 1, 0x0, 0x086, 0x00009 }\n" }, { -1, "CPU(s): 1 x PA8500 (PCX-W) at 400.000000 MHz\n" }, { -1, "SBA found Astro 2.1 at 0xfed00000\n" }, { -1, "lba version TR2.1 (0x2) found at 0xfed30000\n" }, { -1, "lba version TR2.1 (0x2) found at 0xfed32000\n" }, { -1, "lba version TR2.1 (0x2) found at 0xfed38000\n" }, { -1, "lba version TR2.1 (0x2) found at 0xfed3c000\n" }, { 100, "SCSI subsystem initialized\n" }, { 10, "drivers/usb/core/usb.c: registered new driver usbfs\n" }, { -1, "drivers/usb/core/usb.c: registered new driver hub\n" }, { -1, "ikconfig 0.7 with /proc/config*\n" }, { -1, "Initializing Cryptographic API\n" }, { 250, "SuperIO: probe of 0000:00:0e.0 failed with error -1\n" }, { 20, "SuperIO: Found NS87560 Legacy I/O device at 0000:00:0e.1 " "(IRQ 64)\n" }, { -1, "SuperIO: Serial port 1 at 0x3f8\n" }, { -1, "SuperIO: Serial port 2 at 0x2f8\n" }, { -1, "SuperIO: Parallel port at 0x378\n" }, { -1, "SuperIO: Floppy controller at 0x3f0\n" }, { -1, "SuperIO: ACPI at 0x7e0\n" }, { -1, "SuperIO: USB regulator enabled\n" }, { -1, "SuperIO: probe of 0000:00:0e.2 failed with error -1\n" }, { -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.100 $ 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" }, { -1, "Linux Tulip driver version 1.1.13 (May 11, 2002)\n" }, { 150, "tulip0: no phy info, aborting mtable build\n" }, { 10, "tulip0: MII transceiver #1 config 1000 status 782d " "advertising 01e1.\n" }, { -1, "eth0: Digital DS21143 Tulip rev 65 at 0xf4008000, " "00:10:83:F9:B4:34, IRQ 66.\n" }, { -1, "Uniform Multi-Platform E-IDE driver Revision: 7.00alpha2\n" }, { -1, "ide: Assuming 33MHz system bus speed for PIO modes; " "override with idebus=xx\n" }, { 100, "SiI680: IDE controller at PCI slot 0000:01:06.0\n" }, { 10, "SiI680: chipset revision 2\n" }, { -1, "SiI680: BASE CLOCK == 133\n" }, { -1, "SiI680: 100% native mode on irq 128\n" }, { -1, " ide0: MMIO-DMA at 0xf4800000-0xf4800007 -- " "Error, MMIO ports already in use.\n" }, { -1, " ide1: MMIO-DMA at 0xf4800008-0xf480000f -- " "Error, MMIO ports already in use.\n" }, { 5, "hda: TS130220A2, ATA DISK drive\n" }, { -1, " _______________________________\n" }, { -1, " < Your System ate a SPARC! Gah! >\n" }, { -1, " -------------------------------\n" }, { -1, " \\ ^__^\n" }, { -1, " \\ (xx)\\_______\n" }, { -1, " (__)\\ )\\/\\\n" }, { -1, " U ||----w |\n" }, { -1, " || ||\n" }, { -1, "swapper (pid 1): Breakpoint (code 0)\n" }, { -1, "\n" }, { -1, " YZrvWESTHLNXBCVMcbcbcbcbOGFRQPDI\n" }, { -1, "PSW: 00000000000001001111111100001111 Not tainted\n" }, { -1, "r00-03 4d6f6f21 1032f010 10208f34 103fc2e0\n" }, { -1, "r04-07 103fc230 00000001 00000001 0000000f\n" }, { -1, "r08-11 103454f8 000f41fa 372d3980 103ee404\n" }, { -1, "r12-15 3ccbf700 10344810 103ee010 f0400004\n" }, { -1, "r16-19 f00008c4 f000017c f0000174 00000000\n" }, { -1, "r20-23 fed32840 fed32800 00000000 0000000a\n" }, { -1, "r24-27 0000ffa0 000000ff 103fc2e0 10326010\n" }, { -1, "r28-31 00000000 00061a80 4ff98340 10208f34\n" }, { -1, "sr0-3 00000000 00000000 00000000 00000000\n" }, { -1, "sr4-7 00000000 00000000 00000000 00000000\n" }, { -1, "\n" }, { -1, "IASQ: 00000000 00000000 IAOQ: 00000000 00000004\n" }, { -1, " IIR: 00000000 ISR: 00000000 IOR: 00000000\n" }, { -1, " CPU: 0 CR30: 4ff98000 CR31: 1037c000\n" }, { -1, " ORIG_R28: 55555555\n" }, { -1, " IAOQ[0]: 0x0\n" }, { -1, " IAOQ[1]: 0x4\n" }, { -1, " RP(r2): probe_hwif+0x218/0x44c\n" }, { -1, "Kernel panic: Attempted to kill init!\n" }, { 0, NULL }}; bst->scroll_p = True; bst->wrap_p = True; bst->left_margin = bst->right_margin = 10; bst->top_margin = bst->bottom_margin = 10; release = "2.6.0-test11-pa2"; sysname = "hppa"; version = "#2 Mon Dec 8 06:09:27 GMT 2003"; # ifdef HAVE_UNAME { struct utsname uts; char *s; if (uname (&uts) >= 0) { sysname = uts.nodename; if (!strcmp (uts.sysname, "Linux")) { release = uts.release; version = uts.version; } } s = strchr (sysname, '.'); if (s) *s = 0; } # endif /* !HAVE_UNAME */ # if (defined (__GNUC__) && defined (__VERSION__)) gccversion = __VERSION__; # else /* !(defined (__GNUC__) && defined (__VERSION__)) */ gccversion = "3.3.2 (Debian)"; # endif /* !(defined (__GNUC__) && defined (__VERSION__)) */ /* Insert current host name into banner on line 2 */ { char ss[1024]; snprintf (ss, 1024, linux_panic[1].string, release, sysname, gccversion, version); linux_panic[1].string = ss; } BSOD_PAUSE (bst, 100000); while (linux_panic[i].string) { if (linux_panic[i].delay != -1) linedelay = linux_panic[i].delay * 1000; BSOD_PAUSE (bst, linedelay); BSOD_TEXT (bst, LEFT, linux_panic[i].string); i++; } bst->y = bst->xgwa.height - bst->font->ascent - bst->font->descent; XClearWindow(dpy, window); return bst; } /* VMS by jwz (text sent by Roland Barmettler ) */ static struct bsod_state * vms (Display *dpy, Window window) { struct bsod_state *bst = make_bsod_state (dpy, window, "vms", "VMS"); const char *sysname; int char_delay = 0; int dot_delay = 40000; int chunk_delay = 500000; char *s, *s1; int i; int arg_count; __extension__ const char *lines[] = { "%CNXMAN, Lost connection to system #\n" "%SHADOW-I-VOLPROC, DSA0: shadow master has changed. " "Dump file WILL be written if system crashes.\n" "\n", "", "%CNXMAN, Quorum lost, blocking activity\n" "%CNXMAN, Timed-out lost connection to system #\n" "%CNXMAN, Timed-out lost connection to system #\n" "%CNXMAN, Timed-out lost connection to system #\n" "%CNXMAN, Proposing reconfiguration of the VMScluster\n", "", "%CNXMAN, Removed from VMScluster system #\n" "%CNXMAN, Removed from VMScluster system #\n" "%CNXMAN, Removed from VMScluster system #\n" "%CNXMAN, Completing VMScluster state transition\n", "\n" "**** OpenVMS (TM) Alpha Operating system V7.3-1 - BUGCHECK ****\n" "\n" "** Bugcheck code = 000005DC: CLUEXIT, Node voluntarily exiting " "VMScluster\n" "** Crash CPU: 00 Primary CPU: 00 Active CPUs: 00000001\n" "** Current Process = NULL\n" "** Current PSB ID = 00000001\n" "** Image Name =\n" "\n" "** Dumping error log buffers to HBVS unit 0\n" "**** Unable to dump error log buffers to remaining shadow set members\n" "** Error log buffers not dumped to HBVS unit 200\n" "\n" "** Dumping memory to HBVS unit 0\n" "**** Starting compressed selective memory dump at #...\n", "...", "\n" "**** Memory dump complete - not all processes or global pages saved\n", "\n" "halted CPU 0\n", "", "\n" "halt code = 5\n" "HALT instruction executed\n" "PC = ffffffff800c3884\n", "\n" "CPU 0 booting\n", "\n" "resetting all I/O buses\n" "\n" "\n" }; char *args[8]; int ids[3]; bst->scroll_p = True; bst->wrap_p = True; bst->left_margin = bst->right_margin = 10; bst->top_margin = bst->bottom_margin = 10; sysname = "VMS001"; # ifdef HAVE_UNAME { struct utsname uts; if (uname (&uts) >= 0) sysname = uts.nodename; s = strchr (sysname, '.'); if (s) *s = 0; } # endif /* !HAVE_UNAME */ args[0] = malloc (strlen(sysname) + 7); strcpy (args[0], sysname); args[0][5] = 0; /* Pick three numbers, 1-9, no overlaps. */ ids[0] = 1 + (random() % 9); do { ids[1] = 1 + (random() % 9); } while (ids[1]==ids[0]); do { ids[2] = 1 + (random() % 9); } while (ids[2]==ids[0] || ids[2]==ids[1]); i = strlen(args[0])-1; if (i < 6) i++; args[0][i] = '0' + ids[0]; args[0][i+1] = 0; for (s = args[0]; *s; s++) if (isalpha(*s)) *s = toupper (*s); args[1] = strdup (args[0]); args[2] = strdup (args[0]); args[2][i] = '0' + ids[1]; args[3] = strdup (args[0]); args[3][i] = '0' + ids[2]; args[4] = strdup (args[1]); args[5] = strdup (args[2]); args[6] = strdup (args[3]); { time_t t = time ((time_t *) 0); struct tm *tm = localtime (&t); args[7] = malloc (30); strftime (args[7], 29, "%d-%b-%Y %H:%M", tm); for (s = args[7]; *s; s++) if (isalpha(*s)) *s = toupper (*s); } arg_count = 0; for (i = 0; i < countof(lines); i++) { const char *fmt = lines[i]; if (! strcmp (fmt, "...")) { int steps = 180 + (random() % 60); while (--steps >= 0) { BSOD_TEXT (bst, LEFT, "."); BSOD_PAUSE (bst, dot_delay); } } else { char *fmt2 = malloc (strlen (fmt) * 2 + 1); for (s = (char *) fmt, s1 = fmt2; *s; s++) { if (*s == '#') { strcpy (s1, args[arg_count++]); s1 += strlen(s1); } else *s1++ = *s; } *s1 = 0; BSOD_CHAR_DELAY (bst, char_delay); BSOD_TEXT (bst, LEFT, fmt2); free (fmt2); BSOD_CHAR_DELAY (bst, 0); BSOD_PAUSE (bst, chunk_delay); } } for (i = 0; i < countof (args); i++) free (args[i]); XClearWindow(dpy, window); return bst; } /* HVX (formerly GCOS6) and TPS6 crash by Brian Garratt GCOS6 is a Unix-like operating system developed by Honeywell in the 1970s in collaboration with MIT and AT&T (who called their version UNIX). Both are very much like MULTICS which Honeywell got from GE. HVX ("High-performance Virtual System on Unix") is an AIX application which emulates GCOS6 hardware on RS6000-like machines. */ static struct bsod_state * hvx (Display *dpy, Window window) { struct bsod_state *bst = make_bsod_state (dpy, window, "hvx", "HVX"); bst->scroll_p = True; bst->wrap_p = True; bst->y = bst->xgwa.height - bst->bottom_margin - bst->font->ascent; BSOD_CHAR_DELAY (bst, 10000); BSOD_TEXT (bst, LEFT, "(TP) Trap no E Effective address 00000000 Instruction D7DE\n" "(TP) Registers :\n" "(TP) B1 -> B7 03801B02 00000000 03880D45 038BABDB 0388AFFD" " 0389B3F8 03972317\n" "(TP) R1 -> R7 0001 0007 F10F 090F 0020 0106 0272\n" "(TP) P I Z M1 0388A18B 3232 0000 FF00\n" "(TP) Program counter is at offset 0028 from string YTPAD\n" "(TP) User id of task which trapped is LT 626\n" "(TP)?\n" ); BSOD_PAUSE (bst, 1000000); BSOD_CHAR_DELAY (bst, 100000); BSOD_TEXT (bst, LEFT, " TP CLOSE ALL"); BSOD_CHAR_DELAY (bst, 10000); BSOD_TEXT (bst, LEFT, "\n(TP)?\n"); BSOD_PAUSE (bst, 1000000); BSOD_CHAR_DELAY (bst, 100000); BSOD_TEXT (bst, LEFT, " TP ABORT -LT ALL"); BSOD_CHAR_DELAY (bst, 10000); BSOD_TEXT (bst, LEFT, "\n(TP)?\n"); BSOD_PAUSE (bst, 1000000); BSOD_CHAR_DELAY (bst, 100000); BSOD_TEXT (bst, LEFT, " TP STOP KILL"); BSOD_CHAR_DELAY (bst, 10000); BSOD_TEXT (bst, LEFT, "\n" "(TP)?\n" "Core dumps initiated for selected HVX processes ...\n" "Core dumps complete.\n" "Fri Jul 19 15:53:09 2002\n" "Live registers for cp 0:\n" " P = 7de3 IW=0000 I=32 CI=30000000 S=80006013" " IV=aa0 Level=13\n" " R1-7 = 1f 913 13 4 8 0 0\n" " B1-7 = 64e71b a93 50e 64e73c 6c2c 7000 b54\n" "Memory dump starting to file /var/hvx/dp01/diag/Level2 ...\n" "Memory dump complete.\n" ); XClearWindow(dpy, window); return bst; } /* HPUX panic, by Tobias Klausmann */ static struct bsod_state * hpux (Display *dpy, Window window) { struct bsod_state *bst = make_bsod_state (dpy, window, "hpux", "HPUX"); const char *sysname; char buf[2048]; bst->scroll_p = True; bst->y = bst->xgwa.height - bst->bottom_margin - bst->font->ascent; sysname = "HPUX"; # ifdef HAVE_UNAME { struct utsname uts; char *s; if (uname (&uts) >= 0) sysname = uts.nodename; s = strchr (sysname, '.'); if (s) *s = 0; } # endif /* !HAVE_UNAME */ BSOD_TEXT (bst, LEFT, " " " " " \n"); sprintf (buf, "%.100s [HP Release B.11.00] (see /etc/issue)\n", sysname); BSOD_TEXT (bst, LEFT, buf); BSOD_PAUSE (bst, 1000000); BSOD_TEXT (bst, LEFT, "Console Login:\n" "\n" " ******* Unexpected HPMC/TOC. Processor HPA FFFFFFFF'" "FFFA0000 *******\n" " GENERAL REGISTERS:\n" "r00/03 00000000'00000000 00000000'00000000 00000000'00000000 00000000'" "006C76C0\n" "r04/07 00000000'00000001 00000000'0126E328 00000000'00000000 00000000'" "0122B640\n" "r08/11 00000000'00000000 00000000'0198CFC0 00000000'000476FE 00000000'" "00000001\n" "r12/15 00000000'40013EE8 00000000'08000080 00000000'4002530C 00000000'" "4002530C\n" "r16/19 00000000'7F7F2A00 00000000'00000001 00000000'00000000 00000000'" "00000000\n" "r20/23 00000000'006C8048 00000000'00000001 00000000'00000000 00000000'" "00000000\n" "r24/27 00000000'00000000 00000000'00000000 00000000'00000000 00000000'" "00744378\n" "r28/31 00000000'00000000 00000000'007DD628 00000000'0199F2B0 00000000'" "00000000\n" " CONTROL REGISTERS:\n" "sr0/3 00000000'0F3B4000 00000000'0C2A2000 00000000'016FF800 00000000'" "00000000\n" "sr4/7 00000000'00000000 00000000'016FF800 00000000'0DBF1400 00000000'" "00000000\n" "pcq = 00000000'00000000.00000000'00104950 00000000'00000000.00000000'" "00104A14\n" "isr = 00000000'10240006 ior = 00000000'67D9E220 iir = 08000240 rctr = " "7FF10BB6\n" "\n" "pid reg cr8/cr9 00007700'0000B3A9 00000000'0000C5D8\n" "pid reg cr12/cr13 00000000'00000000 00000000'00000000\n" "ipsw = 000000FF'080CFF1F iva = 00000000'0002C000 sar = 3A ccr = C0\n" "tr0/3 00000000'006C76C0 00000000'00000001 00000000'00000000 00000000'" "7F7CE000\n" "tr4/7 00000000'03790000 0000000C'4FB68340 00000000'C07EE13F 00000000'" "0199F2B0\n" "eiem = FFFFFFF0'FFFFFFFF eirr = 80000000'00000000 itmr = 0000000C'" "4FD8EDE1\n" "cr1/4 00000000'00000000 00000000'00000000 00000000'00000000 00000000'" "00000000\n" "cr5/7 00000000'00000000 00000000'00000000 00000000'" "00000000\n" " MACHINE CHECK PARAMETERS:\n" "Check Type = 00000000 CPU STATE = 9E000001 Cache Check = 00000000\n" "TLB Check = 00000000 Bus Check = 00000000 PIM State = ? SIU " "Status = ????????\n" "Assists = 00000000 Processor = 00000000\n" "Slave Addr = 00000000'00000000 Master Addr = 00000000'00000000\n" "\n" "\n" "TOC, pcsq.pcoq = 0'0.0'104950 , isr.ior = 0'10240006.0'67d9e220\n" "@(#)B2352B/9245XB HP-UX (B.11.00) #1: Wed Nov 5 22:38:19 PST 1997\n" "Transfer of control: (display==0xd904, flags==0x0)\n" "\n" "\n" "\n" "*** A system crash has occurred. (See the above messages for details.)\n" "*** The system is now preparing to dump physical memory to disk, for use\n" "*** in debugging the crash.\n" "\n" "*** The dump will be a SELECTIVE dump: 40 of 256 megabytes.\n" "*** To change this dump type, press any key within 10 seconds.\n" "*** Proceeding with selective dump.\n" "\n" "*** The dump may be aborted at any time by pressing ESC.\n"); { int i; int steps = 11; int size = 40; for (i = 0; i <= steps; i++) { if (i > steps) i = steps; sprintf (buf, "*** Dumping: %3d%% complete (%d of 40 MB) (device 64:0x2)\r", i * 100 / steps, i * size / steps); BSOD_TEXT (bst, LEFT, buf); BSOD_PAUSE (bst, 1500000); } } BSOD_TEXT (bst, LEFT, "\n*** System rebooting.\n"); XClearWindow(dpy, window); return bst; } /* IBM OS/390 aka MVS aka z/OS. Text from Dan Espen . Apparently this isn't actually a crash, just a random session... But who can tell. */ static struct bsod_state * os390 (Display *dpy, Window window) { struct bsod_state *bst = make_bsod_state (dpy, window, "os390", "OS390"); bst->scroll_p = True; bst->y = bst->xgwa.height - bst->bottom_margin - bst->font->ascent; BSOD_LINE_DELAY (bst, 100000); BSOD_TEXT (bst, LEFT, "\n*** System rebooting.\n" "* ISPF Subtask abend *\n" "SPF ENDED DUE TO ERROR+\n" "READY\n" "\n" "IEA995I SYMPTOM DUMP OUTPUT\n" " USER COMPLETION CODE=0222\n" " TIME=23.00.51 SEQ=03210 CPU=0000 ASID=00AE\n" " PSW AT TIME OF ERROR 078D1000 859DAF18 ILC 2 INTC 0D\n" " NO ACTIVE MODULE FOUND\n" " NAME=UNKNOWN\n" " DATA AT PSW 059DAF12 - 00181610 0A0D9180 70644710\n" " AR/GR 0: 00000000/80000000 1: 00000000/800000DE\n" " 2: 00000000/196504DC 3: 00000000/00037A78\n" " 4: 00000000/00037B78 5: 00000000/0003351C\n" " 6: 00000000/0000F0AD 7: 00000000/00012000\n" " 8: 00000000/059DAF10 9: 00000000/0002D098\n" " A: 00000000/059D9F10 B: 00000000/059D8F10\n" " C: 00000000/859D7F10 D: 00000000/00032D60\n" " E: 00000000/00033005 F: 01000002/00000041\n" " END OF SYMPTOM DUMP\n" "ISPS014 - ** Logical screen request failed - abend 0000DE **\n" "ISPS015 - ** Contact your system programmer or dialog developer.**\n" "*** ISPF Main task abend ***\n" "IEA995I SYMPTOM DUMP OUTPUT\n" " USER COMPLETION CODE=0222\n" " TIME=23.00.52 SEQ=03211 CPU=0000 ASID=00AE\n" " PSW AT TIME OF ERROR 078D1000 8585713C ILC 2 INTC 0D\n" " ACTIVE LOAD MODULE ADDRESS=05855000 OFFSET=0000213C\n" " NAME=ISPMAIN\n" " DATA AT PSW 05857136 - 00181610 0A0D9180 D3304770\n" " GR 0: 80000000 1: 800000DE\n" " 2: 00015260 3: 00000038\n" " 4: 00012508 5: 00000000\n" " 6: 000173AC 7: FFFFFFF8\n" " 8: 05858000 9: 00012CA0\n" " A: 05857000 B: 05856000\n" " C: 85855000 D: 00017020\n" " E: 85857104 F: 00000000\n" " END OF SYMPTOM DUMP\n" "READY\n" "***"); BSOD_CURSOR (bst, CURSOR_LINE, 240000, 999999); XClearWindow(dpy, window); return bst; } /* Compaq Tru64 Unix panic, by jwz as described by Tobias Klausmann */ static struct bsod_state * tru64 (Display *dpy, Window window) { struct bsod_state *bst = make_bsod_state (dpy, window, "tru64", "Tru64"); const char *sysname; char buf[2048]; bst->scroll_p = True; bst->y = bst->xgwa.height - bst->bottom_margin - bst->font->ascent; sysname = "127.0.0.1"; # ifdef HAVE_UNAME { struct utsname uts; if (uname (&uts) >= 0) sysname = uts.nodename; } # endif /* !HAVE_UNAME */ sprintf (buf, "Compaq Tru64 UNIX V5.1B (Rev. 2650) (%.100s) console\n" "\n" "login: ", sysname); BSOD_TEXT (bst, LEFT, buf); BSOD_PAUSE (bst, 6000000); BSOD_TEXT (bst, LEFT, "panic (cpu 0): trap: illegal instruction\n" "kernel inst fault=gentrap, ps=0x5, pc=0xfffffc0000593878, inst=0xaa\n" "kernel inst fault=gentrap, ps=0x5, pc=0xfffffc0000593878, inst=0xaa\n" " \n" "DUMP: blocks available: 1571600\n" "DUMP: blocks wanted: 100802 (partial compressed dump) [OKAY]\n" "DUMP: Device Disk Blocks Available\n" "DUMP: ------ ---------------------\n" "DUMP: 0x1300023 1182795 - 1571597 (of 1571598) [primary swap]\n" "DUMP.prom: Open: dev 0x5100041, block 2102016: SCSI 0 11 0 2 200 0 0\n" "DUMP: Writing header... [1024 bytes at dev 0x1300023, block 1571598]\n" "DUMP: Writing data"); { int i; int steps = 4 + (random() % 8); BSOD_CHAR_DELAY (bst, 1000000); for (i = 0; i < steps; i++) BSOD_TEXT (bst, LEFT, "."); BSOD_CHAR_DELAY (bst, 0); sprintf (buf, "[%dMB]\n", steps); BSOD_TEXT (bst, LEFT, buf); } BSOD_TEXT (bst, LEFT, "DUMP: Writing header... [1024 bytes at dev 0x1300023, block 1571598]\n" "DUMP: crash dump complete.\n" "kernel inst fault=gentrap, ps=0x5, pc=0xfffffc0000593878, inst=0xaa\n" " \n" "DUMP: second crash dump skipped: 'dump_savecnt' enforced.\n"); BSOD_PAUSE (bst, 4000000); BSOD_TEXT (bst, LEFT, "\n" "halted CPU 0\n" "\n" "halt code = 5\n" "HALT instruction executed\n" "PC = fffffc00005863b0\n"); BSOD_PAUSE (bst, 3000000); BSOD_TEXT (bst, LEFT, "\n" "CPU 0 booting\n" "\n" "\n" "\n"); XClearWindow(dpy, window); return bst; } /* MS-DOS, by jwz */ static struct bsod_state * msdos (Display *dpy, Window window) { struct bsod_state *bst = make_bsod_state (dpy, window, "msdos", "MSDOS"); BSOD_CHAR_DELAY (bst, 10000); BSOD_TEXT (bst, LEFT, "C:\\WINDOWS>"); BSOD_CURSOR (bst, CURSOR_LINE, 200000, 8); BSOD_CHAR_DELAY (bst, 200000); BSOD_TEXT (bst, LEFT, "dir a:"); BSOD_PAUSE (bst, 1000000); BSOD_CHAR_DELAY (bst, 10000); BSOD_TEXT (bst, LEFT, "\nNot ready reading drive A\nAbort, Retry, Fail?"); BSOD_CURSOR (bst, CURSOR_LINE, 200000, 10); BSOD_CHAR_DELAY (bst, 200000); BSOD_TEXT (bst, LEFT, "f"); BSOD_PAUSE (bst, 1000000); BSOD_CHAR_DELAY (bst, 10000); BSOD_TEXT (bst, LEFT, "\n\n\nNot ready reading drive A\nAbort, Retry, Fail?"); BSOD_CURSOR (bst, CURSOR_LINE, 200000, 10); BSOD_CHAR_DELAY (bst, 200000); BSOD_TEXT (bst, LEFT, "f"); BSOD_PAUSE (bst, 1000000); BSOD_CHAR_DELAY (bst, 10000); BSOD_TEXT (bst, LEFT, "\nVolume in drive A has no label\n\n" "Not ready reading drive A\nAbort, Retry, Fail?"); BSOD_CURSOR (bst, CURSOR_LINE, 200000, 12); BSOD_CHAR_DELAY (bst, 200000); BSOD_TEXT (bst, LEFT, "a"); BSOD_PAUSE (bst, 1000000); BSOD_CHAR_DELAY (bst, 10000); BSOD_TEXT (bst, LEFT, "\n\nC:\\WINDOWS>"); BSOD_CURSOR (bst, CURSOR_LINE, 200000, 999999); XClearWindow(dpy, window); return bst; } /* nvidia, by jwz. * * This is what happens if an Nvidia card goes into some crazy text mode. * Most often seen on the second screen of a dual-head system when the * proper driver isn't loaded. */ typedef struct { int fg; int bg; int bit; Bool blink; } nvcell; static void nvspatter (nvcell *grid, int rows, int cols, int ncolors, int nbits, Bool fill_p) { int max = rows * cols; int from = fill_p ? 0 : random() % (max - 1); int len = fill_p ? max : random() % (cols * 4); int to = from + len; int i; Bool noisy = ((random() % 4) == 0); Bool diag = (noisy || fill_p) ? 0 : ((random() % 4) == 0); int fg = random() % ncolors; int bg = random() % ncolors; int blink = ((random() % 4) == 0); int bit = (random() % nbits); if (to > max) to = max; if (diag) { int src = random() % (rows * cols); int len2 = (cols / 2) - (random() % 5); int j = src; for (i = from; i < to; i++, j++) { if (j > src + len2 || j >= max) j = src; if (i >= max) abort(); if (j >= max) abort(); grid[j] = grid[i]; } } else for (i = from; i < to; i++) { nvcell *cell = &grid[i]; cell->fg = fg; cell->bg = bg; cell->bit = bit; cell->blink = blink; if (noisy) { fg = random() % ncolors; bg = random() % ncolors; blink = ((random() % 8) == 0); } } } typedef struct { struct bsod_state *bst; GC gc1; Pixmap bits[5]; int rows, cols; int cellw, cellh; nvcell *grid; int ncolors; unsigned long colors[256]; int tick; } nvstate; static void nvidia_free (struct bsod_state *bst) { nvstate *nvs = (nvstate *) bst->closure; int i; XFreeColors (bst->dpy, bst->xgwa.colormap, nvs->colors, nvs->ncolors, 0); for (i = 0; i < countof(nvs->bits); i++) XFreePixmap (bst->dpy, nvs->bits[i]); XFreeGC (bst->dpy, nvs->gc1); free (nvs->grid); free (nvs); } static int nvidia_draw (struct bsod_state *bst) { nvstate *nvs = (nvstate *) bst->closure; int x, y; for (y = 0; y < nvs->rows; y++) for (x = 0; x < nvs->cols; x++) { nvcell *cell = &nvs->grid[y * nvs->cols + x]; unsigned long fg = nvs->colors[cell->fg]; unsigned long bg = nvs->colors[cell->bg]; Bool flip = cell->blink && (nvs->tick & 1); XSetForeground (bst->dpy, bst->gc, flip ? fg : bg); XSetBackground (bst->dpy, bst->gc, flip ? bg : fg); XCopyPlane (bst->dpy, nvs->bits[cell->bit], bst->window, bst->gc, 0, 0, nvs->cellw, nvs->cellh, x * nvs->cellw, y * nvs->cellh, 1L); } nvs->tick++; if ((random() % 5) == 0) /* change the display */ nvspatter (nvs->grid, nvs->rows, nvs->cols, nvs->ncolors, countof(nvs->bits), False); return 250000; } static struct bsod_state * nvidia (Display *dpy, Window window) { struct bsod_state *bst = make_bsod_state (dpy, window, "nvidia", "nVidia"); nvstate *nvs = (nvstate *) calloc (1, sizeof (*nvs)); XGCValues gcv; int i; nvs->bst = bst; bst->closure = nvs; bst->draw_cb = nvidia_draw; bst->free_cb = nvidia_free; nvs->cols = 80; nvs->rows = 25; nvs->cellw = bst->xgwa.width / nvs->cols; nvs->cellh = bst->xgwa.height / nvs->rows; if (nvs->cellw < 8 || nvs->cellh < 18) nvs->cellw = 8, nvs->cellh = 18; nvs->cols = (bst->xgwa.width / nvs->cellw) + 1; nvs->rows = (bst->xgwa.height / nvs->cellh) + 1; nvs->grid = (nvcell *) calloc (sizeof(*nvs->grid), nvs->rows * nvs->cols); /* Allocate colors */ nvs->ncolors = 16; for (i = 0; i < nvs->ncolors; i++) { XColor c; c.red = random() & 0xFFFF; c.green = random() & 0xFFFF; c.blue = random() & 0xFFFF; c.flags = DoRed|DoGreen|DoBlue; XAllocColor (dpy, bst->xgwa.colormap, &c); nvs->colors[i] = c.pixel; } /* Construct corrupted character bitmaps */ for (i = 0; i < countof(nvs->bits); i++) { int j; nvs->bits[i] = XCreatePixmap (dpy, window, nvs->cellw, nvs->cellh, 1); if (!nvs->gc1) nvs->gc1 = XCreateGC (dpy, nvs->bits[i], 0, &gcv); XSetForeground (dpy, nvs->gc1, 0); XFillRectangle (dpy, nvs->bits[i], nvs->gc1, 0, 0, nvs->cellw, nvs->cellh); XSetForeground (dpy, nvs->gc1, 1); if ((random() % 40) != 0) for (j = 0; j < ((nvs->cellw * nvs->cellh) / 16); j++) XFillRectangle (dpy, nvs->bits[i], nvs->gc1, (random() % (nvs->cellw-2)) & ~1, (random() % (nvs->cellh-2)) & ~1, 2, 2); } /* Randomize the grid */ nvspatter (nvs->grid, nvs->rows, nvs->cols, nvs->ncolors, countof(nvs->bits), True); for (i = 0; i < 20; i++) nvspatter (nvs->grid, nvs->rows, nvs->cols, nvs->ncolors, countof(nvs->bits), False); return bst; } /* * Simulate various Apple ][ crashes. The memory map encouraged many programs * to use the primary hi-res video page for various storage, and the secondary * hi-res page for active display. When it crashed into Applesoft or the * monitor, it would revert to the primary page and you'd see memory garbage on * the screen. Also, it was common for copy-protected games to use the primary * text page for important code, because that made it really hard to * reverse-engineer them. The result often looked like what this generates. * * The Apple ][ logic and video hardware is in apple2.c. The TV is emulated by * analogtv.c for maximum realism * * Trevor Blackwell */ static const char * const apple2_basic_errors[]={ "BREAK", "NEXT WITHOUT FOR", "SYNTAX ERROR", "RETURN WITHOUT GOSUB", "ILLEGAL QUANTITY", "OVERFLOW", "OUT OF MEMORY", "BAD SUBSCRIPT ERROR", "DIVISION BY ZERO", "STRING TOO LONG", "FORMULA TOO COMPLEX", "UNDEF'D FUNCTION", "OUT OF DATA" #if 0 , "DEFAULT ARGUMENTS ARE NOT ALLOWED IN DECLARATION OF FRIEND " "TEMPLATE SPECIALIZATION" #endif }; static const char * const apple2_dos_errors[]={ "VOLUME MISMATCH", "I/O ERROR", "DISK FULL", "NO BUFFERS AVAILABLE", "PROGRAM TOO LARGE", }; static void a2controller_crash(apple2_sim_t *sim, int *stepno, double *next_actiontime) { apple2_state_t *st=sim->st; char *s; int i; struct mydata { int fillptr; int fillbyte; } *mine; if (!sim->controller_data) sim->controller_data = calloc(sizeof(struct mydata),1); mine=(struct mydata *) sim->controller_data; switch(*stepno) { case 0: a2_init_memory_active(sim); sim->dec->powerup = 1000.0; if (random()%3==0) { st->gr_mode=0; *next_actiontime+=0.4; *stepno=100; } else if (random()%4==0) { st->gr_mode=A2_GR_LORES; if (random()%3==0) st->gr_mode |= A2_GR_FULL; *next_actiontime+=0.4; *stepno=100; } else if (random()%2==0) { st->gr_mode=A2_GR_HIRES; *stepno=300; } else { st->gr_mode=A2_GR_HIRES; *next_actiontime+=0.4; *stepno=100; } break; case 100: /* An illegal instruction or a reset caused it to drop into the assembly language monitor, where you could disassemble code & view data in hex. */ if (random()%3==0) { char ibytes[128]; char itext[128]; int addr=0xd000+random()%0x3000; sprintf(ibytes, "%02X",random()%0xff); sprintf(itext, "???"); sprintf(sim->printing_buf, "\n\n" "%04X: %-15s %s\n" " A=%02X X=%02X Y=%02X S=%02X F=%02X\n" "*", addr,ibytes,itext, random()%0xff, random()%0xff, random()%0xff, random()%0xff, random()%0xff); sim->printing=sim->printing_buf; a2_goto(st,23,1); if (st->gr_mode) { *stepno=180; } else { *stepno=200; } sim->prompt='*'; *next_actiontime += 2.0 + (random()%1000)*0.0002; } else { /* Lots of programs had at least their main functionality in Applesoft Basic, which had a lot of limits (memory, string length, etc) and would sometimes crash unexpectedly. */ sprintf(sim->printing_buf, "\n" "\n" "\n" "?%s IN %d\n" "\001]", apple2_basic_errors[random() % (sizeof(apple2_basic_errors) /sizeof(char *))], (1000*(random()%(random()%59+1)) + 100*(random()%(random()%9+1)) + 5*(random()%(random()%199+1)) + 1*(random()%(random()%(random()%2+1)+1)))); sim->printing=sim->printing_buf; a2_goto(st,23,1); *stepno=110; sim->prompt=']'; *next_actiontime += 2.0 + (random()%1000)*0.0002; } break; case 110: if (random()%3==0) { /* This was how you reset the Basic interpreter. The sort of incantation you'd have on a little piece of paper taped to the side of your machine */ sim->typing="CALL -1370"; *stepno=120; } else if (random()%2==0) { sim->typing="CATALOG\n"; *stepno=170; } else { *next_actiontime+=1.0; *stepno=999; } break; case 120: *stepno=130; *next_actiontime += 0.5; break; case 130: st->gr_mode=0; a2_cls(st); a2_goto(st,0,16); for (s="APPLE ]["; *s; s++) a2_printc(st,*s); a2_goto(st,23,0); a2_printc(st,']'); *next_actiontime+=1.0; *stepno=999; break; case 170: if (random()%50==0) { sprintf(sim->printing_buf, "\nDISK VOLUME 254\n\n" " A 002 HELLO\n" "\n" "]"); sim->printing=sim->printing_buf; } else { sprintf(sim->printing_buf,"\n?%s\n]", apple2_dos_errors[random()% (sizeof(apple2_dos_errors) / sizeof(char *))]); sim->printing=sim->printing_buf; } *stepno=999; *next_actiontime+=1.0; break; case 180: if (random()%2==0) { /* This was how you went back to text mode in the monitor */ sim->typing="FB4BG"; *stepno=190; } else { *next_actiontime+=1.0; *stepno=999; } break; case 190: st->gr_mode=0; a2_invalidate(st); a2_printc(st,'\n'); a2_printc(st,'*'); *stepno=200; *next_actiontime+=2.0; break; case 200: /* This reset things into Basic */ if (random()%2==0) { sim->typing="FAA6G"; *stepno=120; } else { *stepno=999; *next_actiontime+=sim->delay; } break; case 300: for (i=0; i<1500; i++) { a2_poke(st, mine->fillptr, mine->fillbyte); mine->fillptr++; mine->fillbyte = (mine->fillbyte+1)&0xff; } *next_actiontime += 0.08; /* When you hit c000, it changed video settings */ if (mine->fillptr>=0xc000) { a2_invalidate(st); st->gr_mode=0; } /* And it seemed to reset around here, I dunno why */ if (mine->fillptr>=0xcf00) *stepno=130; break; case 999: break; case A2CONTROLLER_FREE: free(mine); mine = 0; break; } } static int a2_draw (struct bsod_state *bst) { apple2_sim_t *sim = (apple2_sim_t *) bst->closure; if (! sim) { sim = apple2_start (bst->dpy, bst->window, 9999999, a2controller_crash); bst->closure = sim; } if (! apple2_one_frame (sim)) { bst->closure = 0; } return 10000; } static void a2_free (struct bsod_state *bst) { apple2_sim_t *sim = (apple2_sim_t *) bst->closure; if (sim) { sim->stepno = A2CONTROLLER_DONE; a2_draw (bst); /* finish up */ if (bst->closure) abort(); /* should have been freed by now */ } } static struct bsod_state * apple2crash (Display *dpy, Window window) { struct bsod_state *bst = make_bsod_state (dpy, window, "apple2", "Apple2"); bst->draw_cb = a2_draw; bst->free_cb = a2_free; return bst; } /* A crash spotted on a cash machine circa 2006, by jwz. I didn't note what model it was; probably a Tranax Mini-Bank 1000 or similar vintage. */ static struct bsod_state * atm (Display *dpy, Window window) { struct bsod_state *bst = make_bsod_state (dpy, window, "atm", "ATM"); Pixmap pixmap = 0; int pix_w = atm_width; int pix_h = atm_height; int x, y, i = 0; float scale = 0.48; XClearWindow (dpy, window); pixmap = XCreatePixmapFromBitmapData (dpy, window, (char *) atm_bits, atm_width, atm_height, bst->fg, bst->bg, bst->xgwa.depth); while (pix_w <= bst->xgwa.width * scale && pix_h <= bst->xgwa.height * scale) { pixmap = double_pixmap (dpy, bst->gc, bst->xgwa.visual, bst->xgwa.depth, pixmap, pix_w, pix_h); pix_w *= 2; pix_h *= 2; i++; } x = (bst->xgwa.width - pix_w) / 2; y = (bst->xgwa.height - pix_h) / 2; if (y < 0) y = 0; if (i > 0) { int j; XSetForeground (dpy, bst->gc, get_pixel_resource (dpy, bst->xgwa.colormap, "atm.background", "ATM.Background")); for (j = -1; j < pix_w; j += i+1) XDrawLine (bst->dpy, pixmap, bst->gc, j, 0, j, pix_h); for (j = -1; j < pix_h; j += i+1) XDrawLine (bst->dpy, pixmap, bst->gc, 0, j, pix_w, j); } XCopyArea (dpy, pixmap, window, bst->gc, 0, 0, pix_w, pix_h, x, y); XFreePixmap (dpy, pixmap); return bst; } /* An Android phone boot loader, by jwz. */ static struct bsod_state * android (Display *dpy, Window window) { struct bsod_state *bst = make_bsod_state (dpy, window, "android", "Android"); unsigned long bg = get_pixel_resource (dpy, bst->xgwa.colormap, "android.background", "Android.Background"); unsigned long fg = get_pixel_resource (dpy, bst->xgwa.colormap, "android.foreground", "Android.Foreground"); unsigned long c1 = get_pixel_resource (dpy, bst->xgwa.colormap, "android.color1", "Android.Foreground"); unsigned long c2 = get_pixel_resource (dpy, bst->xgwa.colormap, "android.color2", "Android.Foreground"); unsigned long c3 = get_pixel_resource (dpy, bst->xgwa.colormap, "android.color3", "Android.Foreground"); unsigned long c4 = get_pixel_resource (dpy, bst->xgwa.colormap, "android.color4", "Android.Foreground"); unsigned long c5 = get_pixel_resource (dpy, bst->xgwa.colormap, "android.color5", "Android.Foreground"); unsigned long c6 = get_pixel_resource (dpy, bst->xgwa.colormap, "android.color6", "Android.Foreground"); unsigned long c7 = get_pixel_resource (dpy, bst->xgwa.colormap, "android.color7", "Android.Foreground"); const char *lines0[] = { "Calculating... please wait\n", "osbl: 0x499DF907\n", "amss: 0x73162409\n", "hboot: 0xE46C3327\n", "boot: 0xBA570E7A\n", "recovery: 0xC8BBA213\n", "system: 0x87C3B1F0\n", "\n", "Press power key to go back.\n", }; const char *lines1[] = { "Checking SD card update...\n", "", " SD Checking...\n", " Failed to open zipfile\n", " loading preload_content...\n", " [Caution] Preload Content Not Found\n", " loading HTCUpdateZipName image...\n", "", " Checking...[PG46IMG.zip]\n", "Please plug off USB\n", }; const char *lines2[] = { " SD Checking...\n", " Loading...[PK76DIAG.zip]\n", " No image!\n", " Loading...[PK76DIAG.nbh]\n", " No image or wrong image!\n", " Loading...[PK76IMG.zip]\n", " No image!\n", " Loading...[PK76IMG.nbh]\n", " No image or wrong image!\n", " Loading...[PK76IMG.tar]\n", " No image!\n", " Loading...[PK76IMG.aes]\n", " No image!\n", " Loading...[PK76IMG.enc]\n", " No image!\n", }; int cw = (bst->font->per_char ? bst->font->per_char['n'-bst->font->min_char_or_byte2].width : bst->font->min_bounds.width); int line_height = bst->font->ascent + bst->font->descent; int state = 0; Pixmap pixmap = 0; int pix_w = 0, pix_h = 0; # ifdef DO_XPM pixmap = xpm_data_to_pixmap (dpy, window, (char **) android_skate, &pix_w, &pix_h, 0); if (! pixmap) abort(); bst->pixmap = pixmap; # endif /* DO_XPM */ bst->left_margin = (bst->xgwa.width - (cw * 40)) / 2; if (bst->left_margin < 0) bst->left_margin = 0; while (1) { unsigned long delay = ((state == 0 || state == countof(lines0) || state == countof(lines0) + countof(lines1) || state == countof(lines0) + countof(lines1) + countof(lines2)) ? 10000 : 0); BSOD_LINE_DELAY (bst, delay); if (state <= countof(lines0) + countof(lines1) + countof(lines2)) { BSOD_COLOR (bst, bg, bg); BSOD_RECT (bst, True, 0, 0, bst->xgwa.width, bst->xgwa.height); BSOD_COLOR (bst, bg, c1); BSOD_MOVETO (bst, bst->left_margin, bst->top_margin + line_height); BSOD_TEXT (bst, LEFT, "*** UNLOCKED ***\n"); BSOD_COLOR (bst, c2, bg); BSOD_TEXT (bst, LEFT, "PRIMOU PVT SHIP S-OFF RL\n" "HBOOT-1.17.0000\n" "CPLD-None\n" "MICROP-None\n" "RADIO-3831.17.00.23_2\n" "eMMC-bootmode: disabled\n" "CPU-bootmode : disabled\n" "HW Secure boot: enabled\n" "MODEM PATH : OFF\n" "May 15 2012, 10:28:15\n" "\n"); BSOD_COLOR (bst, bg, c3); if (pixmap) { int x = (bst->xgwa.width - pix_w) / 2; int y = bst->xgwa.height - pix_h; BSOD_PIXMAP (bst, 0, 0, pix_w, pix_h, x, y); } } if (state == countof(lines0) || state == countof(lines0) + countof(lines1) || state == countof(lines0) + countof(lines1) + countof(lines2)) { BSOD_TEXT (bst, LEFT, "HBOOT USB\n"); BSOD_COLOR (bst, c4, bg); BSOD_TEXT (bst, LEFT, "\n" " to previous item\n" " to next item\n" " to select item\n" "\n"); BSOD_COLOR (bst, c5, bg); BSOD_TEXT (bst, LEFT, "FASTBOOT\n"); BSOD_COLOR (bst, c6, bg); BSOD_TEXT (bst, LEFT, "RECOVERY\n"); BSOD_COLOR (bst, c7, bg); BSOD_TEXT (bst, LEFT, "FACTORY RESET\n"); BSOD_COLOR (bst, c3, bg); BSOD_TEXT (bst, LEFT, "SIMLOCK\n"); BSOD_COLOR (bst, bg, c3); BSOD_TEXT (bst, LEFT, "HBOOT USB\n"); BSOD_COLOR (bst, fg, bg); BSOD_TEXT (bst, LEFT, "IMAGE CRC\n"); BSOD_COLOR (bst, c3, bg); BSOD_TEXT (bst, LEFT, "SHOW BARCODE\n"); BSOD_PAUSE (bst, 3000000); } else if (state < countof(lines0)) { BSOD_TEXT (bst, LEFT, "IMAGE CRC\n\n"); BSOD_COLOR (bst, c5, bg); { int i; for (i = 0; i <= state; i++) { const char *s = lines0[i]; BSOD_COLOR (bst, (strchr(s, ':') ? c7 : c3), bg); BSOD_TEXT (bst, LEFT, s); } } BSOD_PAUSE (bst, 500000); if (state == countof(lines0)-1) BSOD_PAUSE (bst, 2000000); } else if (state < countof(lines0) + countof(lines1)) { BSOD_TEXT (bst, LEFT, "HBOOT\n\n"); BSOD_COLOR (bst, c5, bg); { int i; for (i = countof(lines0); i <= state; i++) { const char *s = lines1[i - countof(lines0)]; BSOD_COLOR (bst, (*s == ' ' ? c6 : c3), bg); BSOD_TEXT (bst, LEFT, s); } } BSOD_PAUSE (bst, 500000); if (state == countof(lines0) + countof(lines1) - 1) BSOD_PAUSE (bst, 2000000); } else if (state < countof(lines0) + countof(lines1) + countof(lines2)) { BSOD_TEXT (bst, LEFT, "HBOOT USB\n\n"); BSOD_COLOR (bst, c5, bg); { int i; for (i = countof(lines0) + countof(lines1); i <= state; i++) { const char *s = lines2[i - countof(lines0) - countof(lines1)]; BSOD_COLOR (bst, (*s == ' ' ? c6 : c3), bg); BSOD_TEXT (bst, LEFT, s); } } BSOD_PAUSE (bst, 500000); if (state == countof(lines0) + countof(lines1) + countof(lines2)-1) BSOD_PAUSE (bst, 2000000); } else break; state++; } XClearWindow (dpy, window); return bst; } /***************************************************************************** *****************************************************************************/ static const struct { const char *name; struct bsod_state * (*fn) (Display *, Window); } all_modes[] = { { "Windows", windows_31 }, { "NT", windows_nt }, { "Win2K", windows_other }, { "Win10", windows_10 }, { "Amiga", amiga }, { "Mac", mac }, { "MacsBug", macsbug }, { "Mac1", mac1 }, { "MacX", macx }, { "SCO", sco }, { "HVX", hvx }, { "HPPALinux", hppa_linux }, { "SparcLinux", sparc_linux }, { "BSD", bsd }, { "Atari", atari }, #ifndef HAVE_JWXYZ { "BlitDamage", blitdamage }, #endif { "Solaris", sparc_solaris }, { "Linux", linux_fsck }, { "HPUX", hpux }, { "OS390", os390 }, { "Tru64", tru64 }, { "VMS", vms }, { "OS2", os2 }, { "MSDOS", msdos }, { "Nvidia", nvidia }, { "Apple2", apple2crash }, { "ATM", atm }, { "GLaDOS", glados }, { "Android", android }, }; struct driver_state { const char *name; int only, which, next_one; int mode_duration; int delay_remaining; time_t start; Bool debug_p, cycle_p; struct bsod_state *bst; }; static void hack_title (struct driver_state *dst) { # ifndef HAVE_JWXYZ char *oname = 0; XFetchName (dst->bst->dpy, dst->bst->window, &oname); if (oname && !strncmp (oname, "BSOD: ", 6)) { char *tail = oname + 4; char *s = strchr (tail+1, ':'); char *nname; if (s) tail = s; nname = malloc (strlen (tail) + strlen (dst->name) + 20); sprintf (nname, "BSOD: %s%s", dst->name, tail); XStoreName (dst->bst->dpy, dst->bst->window, nname); free (nname); } # endif /* !HAVE_JWXYZ */ } static void * bsod_init (Display *dpy, Window window) { struct driver_state *dst = (struct driver_state *) calloc (1, sizeof(*dst)); char *s; dst->mode_duration = get_integer_resource (dpy, "delay", "Integer"); if (dst->mode_duration < 3) dst->mode_duration = 3; dst->debug_p = get_boolean_resource (dpy, "debug", "Boolean"); dst->only = -1; dst->next_one = -1; s = get_string_resource(dpy, "doOnly", "DoOnly"); if (s && !strcasecmp (s, "cycle")) { dst->which = -1; dst->cycle_p = True; } else if (s && *s) { int count = countof(all_modes); for (dst->only = 0; dst->only < count; dst->only++) if (!strcasecmp (s, all_modes[dst->only].name)) break; if (dst->only >= count) { fprintf (stderr, "%s: unknown -only mode: \"%s\"\n", progname, s); dst->only = -1; } } if (s) free (s); dst->name = "none"; dst->which = -1; return dst; } static unsigned long bsod_draw (Display *dpy, Window window, void *closure) { struct driver_state *dst = (struct driver_state *) closure; time_t now; int time_left; AGAIN: now = time ((time_t *) 0); time_left = dst->start + dst->mode_duration - now; if (dst->bst && dst->bst->img_loader) /* still loading */ { dst->bst->img_loader = load_image_async_simple (dst->bst->img_loader, 0, 0, 0, 0, 0); return 100000; } DELAY_NOW: /* Rather than returning a multi-second delay from the draw() routine, meaning "don't call us again for N seconds", we quantize that down to 1/10th second intervals so that it's more responsive to rotate/reshape events. */ if (dst->delay_remaining) { int inc = 10000; int this_delay = MIN (dst->delay_remaining, inc); dst->delay_remaining = MAX (0, dst->delay_remaining - inc); return this_delay; } if (! dst->bst && time_left > 0) /* run completed; wait out the delay */ { if (dst->debug_p) fprintf (stderr, "%s: %s: %d left\n", progname, dst->name, time_left); dst->start = 0; if (time_left > 5) time_left = 5; /* Boooored now */ dst->delay_remaining = 1000000 * time_left; } else if (dst->bst) /* sub-mode currently running */ { int this_delay = -1; if (time_left > 0) this_delay = bsod_pop (dst->bst); /* XSync (dpy, False); slows down char drawing too much on HAVE_JWXYZ */ if (this_delay == 0) goto AGAIN; /* no delay, not expired: stay here */ else if (this_delay >= 0) { dst->delay_remaining = this_delay; /* return; time to sleep */ goto DELAY_NOW; } else { /* sub-mode run completed or expired */ if (dst->debug_p) fprintf (stderr, "%s: %s: done\n", progname, dst->name); free_bsod_state (dst->bst); dst->bst = 0; return 0; } } else /* launch a new sub-mode */ { if (dst->next_one >= 0) dst->which = dst->next_one, dst->next_one = -1; else if (dst->cycle_p) dst->which = (dst->which + 1) % countof(all_modes); else if (dst->only >= 0) dst->which = dst->only; else { int count = countof(all_modes); int i; for (i = 0; i < 200; i++) { char name[100], class[100]; int new_mode = (random() & 0xFF) % count; if (i < 100 && new_mode == dst->which) continue; sprintf (name, "do%s", all_modes[new_mode].name); sprintf (class, "Do%s", all_modes[new_mode].name); if (get_boolean_resource (dpy, name, class)) { dst->which = new_mode; break; } } if (i >= 200) { fprintf (stderr, "%s: no display modes enabled?\n", progname); /* exit (-1); */ dst->which = dst->only = 0; } } if (dst->debug_p) fprintf (stderr, "%s: %s: launch\n", progname, all_modes[dst->which].name); /* Run the mode setup routine... */ if (dst->bst) abort(); dst->name = all_modes[dst->which].name; dst->bst = all_modes[dst->which].fn (dpy, window); dst->start = (dst->bst ? time ((time_t *) 0) : 0); /* Reset the structure run state to the beginning, and do some sanitization of the cursor position before the first run. */ if (dst->bst) { if (dst->debug_p) fprintf (stderr, "%s: %s: queue size: %d (%d)\n", progname, dst->name, dst->bst->pos, dst->bst->queue_size); hack_title (dst); dst->bst->pos = 0; dst->bst->x = dst->bst->current_left = dst->bst->left_margin; if (dst->bst->y < dst->bst->top_margin + dst->bst->font->ascent) dst->bst->y = dst->bst->top_margin + dst->bst->font->ascent; } } return 0; } static void bsod_reshape (Display *dpy, Window window, void *closure, unsigned int w, unsigned int h) { struct driver_state *dst = (struct driver_state *) closure; if (dst->bst && w == dst->bst->xgwa.width && h == dst->bst->xgwa.height) return; if (dst->debug_p) fprintf (stderr, "%s: %s: reshape reset\n", progname, dst->name); /* just restart this mode and restart when the window is resized. */ if (dst->bst) free_bsod_state (dst->bst); dst->bst = 0; dst->start = 0; dst->delay_remaining = 0; dst->next_one = dst->which; dst->name = "none"; XClearWindow (dpy, window); } static Bool bsod_event (Display *dpy, Window window, void *closure, XEvent *event) { struct driver_state *dst = (struct driver_state *) closure; Bool reset_p = False; /* pick a new mode and restart when mouse clicked, or certain keys typed. */ if (screenhack_event_helper (dpy, window, event)) reset_p = True; if (reset_p) { if (dst->debug_p) fprintf (stderr, "%s: %s: manual reset\n", progname, dst->name); if (dst->bst) free_bsod_state (dst->bst); dst->bst = 0; dst->start = 0; dst->delay_remaining = 0; dst->name = "none"; XClearWindow (dpy, window); return True; } else return False; } static void bsod_free (Display *dpy, Window window, void *closure) { struct driver_state *dst = (struct driver_state *) closure; if (dst->bst) free_bsod_state (dst->bst); free (dst); } static const char *bsod_defaults [] = { "*delay: 45", "*debug: False", "*doOnly: ", "*doWindows: True", "*doNT: True", "*doWin2K: True", "*doWin10: True", "*doAmiga: True", "*doMac: True", "*doMacsBug: True", "*doMac1: True", "*doMacX: True", "*doSCO: True", "*doAtari: False", /* boring */ "*doBSD: False", /* boring */ "*doLinux: True", "*doSparcLinux: False", /* boring */ "*doHPPALinux: True", "*doBlitDamage: True", "*doSolaris: True", "*doHPUX: True", "*doTru64: True", "*doApple2: True", "*doOS390: True", "*doVMS: True", "*doHVX: True", "*doMSDOS: True", "*doOS2: True", "*doNvidia: True", "*doATM: True", "*doGLaDOS: True", "*doAndroid: True", ".foreground: White", ".background: Black", ".windows.foreground: White", ".windows.background: #0000AA", /* EGA color 0x01. */ ".nt.foreground: White", ".nt.background: #0000AA", /* EGA color 0x01. */ ".windowslh.foreground: White", ".windowslh.background: #AA0000", /* EGA color 0x04. */ ".windowslh.background2: #AAAAAA", /* EGA color 0x07. */ ".win10.foreground: White", ".win10.background: #1070AA", ".glaDOS.foreground: White", ".glaDOS.background: #0000AA", /* EGA color 0x01. */ ".amiga.foreground: #FF0000", ".amiga.background: Black", ".amiga.background2: White", ".mac.foreground: #BBFFFF", ".mac.background: Black", ".atari.foreground: Black", ".atari.background: White", ".macsbug.foreground: Black", ".macsbug.background: White", ".macsbug.borderColor: #AAAAAA", ".mac1.foreground: Black", ".mac1.background: White", ".macx.foreground: White", ".macx.textForeground: White", ".macx.textBackground: Black", ".macx.background: #888888", ".sco.foreground: White", ".sco.background: Black", ".hvx.foreground: White", ".hvx.background: Black", ".linux.foreground: White", ".linux.background: Black", ".hppalinux.foreground: White", ".hppalinux.background: Black", ".sparclinux.foreground: White", ".sparclinux.background: Black", ".bsd.foreground: #c0c0c0", ".bsd.background: Black", ".solaris.foreground: Black", ".solaris.background: White", ".hpux.foreground: White", ".hpux.background: Black", ".os390.background: Black", ".os390.foreground: Red", ".tru64.foreground: White", ".tru64.background: #0000AA", /* EGA color 0x01. */ ".vms.foreground: White", ".vms.background: Black", ".msdos.foreground: White", ".msdos.background: Black", ".os2.foreground: White", ".os2.background: Black", ".atm.foreground: Black", ".atm.background: #FF6600", ".android.foreground: Black", ".android.background: White", ".android.color1: #AA00AA", /* violet */ ".android.color2: #336633", /* green1 */ ".android.color3: #0000FF", /* blue */ ".android.color4: #CC7744", /* orange */ ".android.color5: #99AA55", /* green2 */ ".android.color6: #66AA33", /* green3 */ ".android.color7: #FF0000", /* red */ "*dontClearRoot: True", ANALOGTV_DEFAULTS #ifdef HAVE_XSHM_EXTENSION "*useSHM: True", #endif "*fontB: ", "*fontC: ", # if defined(USE_IPHONE) "*font: PxPlus IBM VGA8 16, Courier-Bold 14", "*bigFont: ", "*font2: ", "*bigFont2: ", ".mac.font: Courier-Bold 18", ".macsbug.font: Courier-Bold 8", ".macx.font: Courier-Bold 14", ".macdisk.font: Courier-Bold 14", ".msdos.font: PxPlus IBM VGA8 32, Courier-Bold 28", ".nt.font: PxPlus IBM VGA8 12, Courier-Bold 10", ".win10.font: Arial 12, Helvetica 12", ".win10.bigFont: Arial 12, Helvetica 12", ".win10.fontB: Arial 50, Helvetica 50", ".win10.fontC: Arial 9, Helvetica 9", ".win10.bigFont2: ", # elif defined(HAVE_ANDROID) "*font: PxPlus IBM VGA8 16", "*bigFont: ", "*font2: ", "*bigFont2: ", ".mac.font: -*-courier-bold-r-*-*-*-180-*-*-m-*-*-*", ".macsbug.font: -*-courier-bold-r-*-*-*-80-*-*-m-*-*-*", ".macx.font: -*-courier-bold-r-*-*-*-140-*-*-m-*-*-*", ".macdisk.font: -*-courier-bold-r-*-*-*-140-*-*-m-*-*-*", ".msdos.font: PxPlus IBM VGA8 32", ".nt.font: PxPlus IBM VGA8 12", ".win10.font: -*-helvetica-medium-r-*-*-*-120-*-*-*-*-*-*", ".win10.bigFont: -*-helvetica-medium-r-*-*-*-120-*-*-*-*-*-*", ".win10.fontB: -*-helvetica-medium-r-*-*-*-500-*-*-*-*-*-*", ".win10.fontC: -*-helvetica-medium-r-*-*-*-90-*-*-*-*-*-*", ".win10.bigFont2: ", # elif defined(HAVE_COCOA) "*font: PxPlus IBM VGA8 8, Courier-Bold 9", "*bigFont: PxPlus IBM VGA8 32, Courier-Bold 24", "*font2: ", "*bigFont2: ", ".mac.font: Monaco 10, Courier-Bold 9", ".mac.bigFont: Monaco 18, Courier-Bold 18", ".macsbug.font: Monaco 10, Courier-Bold 9", ".macsbug.bigFont: Monaco 24, Courier-Bold 24", ".macx.font: Courier-Bold 9", ".macx.bigFont: Courier-Bold 14", ".macdisk.font: Courier-Bold 9", ".macdisk.bigFont: Courier-Bold 18", ".hvx.bigFont: PxPlus IBM VGA8 16, Courier-Bold 14", ".hppalinux.bigFont: PxPlus IBM VGA8 16, Courier-Bold 14", ".solaris.bigFont: PxPlus IBM VGA8 16, Courier-Bold 14", ".linux.bigFont: PxPlus IBM VGA8 16, Courier-Bold 14", ".hpux.bigFont: PxPlus IBM VGA8 16, Courier-Bold 14", ".msdos.font: PxPlus IBM VGA8 16, Courier-Bold 14", ".win10.font: Arial 24, Helvetica 24", ".win10.bigFont: Arial 24, Helvetica 24", ".win10.fontB: Arial 100, Helvetica 100", ".win10.fontC: Arial 16, Helvetica 16", ".win10.bigFont2: ", # else /* X11 */ "*font: 9x15bold", "*font2: -*-courier-bold-r-*-*-*-120-*-*-m-*-*-*", "*bigFont: -*-courier-bold-r-*-*-*-180-*-*-m-*-*-*", "*bigFont2: -*-courier-bold-r-*-*-*-180-*-*-m-*-*-*", ".macsbug.font: -*-courier-medium-r-*-*-*-80-*-*-m-*-*-*", ".macsbug.bigFont: -*-courier-bold-r-*-*-*-140-*-*-m-*-*-*", ".macdisk.font: -*-courier-bold-r-*-*-*-80-*-*-m-*-*-*", ".macdisk.bigFont: -*-courier-bold-r-*-*-*-100-*-*-m-*-*-*", ".sco.font: -*-courier-bold-r-*-*-*-140-*-*-m-*-*-*", ".hvx.font: -*-courier-bold-r-*-*-*-140-*-*-m-*-*-*", ".hppalinux.bigFont: -*-courier-bold-r-*-*-*-140-*-*-m-*-*-*", ".sparclinux.bigFont: -*-courier-bold-r-*-*-*-140-*-*-m-*-*-*", ".bsd.font: vga", ".bsd.bigFont: -sun-console-medium-r-*-*-22-*-*-*-m-*-*-*", ".bsd.bigFont2: -*-courier-bold-r-*-*-*-140-*-*-m-*-*-*", ".solaris.font: -sun-gallant-*-*-*-*-19-*-*-*-*-120-*-*", ".hpux.bigFont: -*-courier-bold-r-*-*-*-140-*-*-m-*-*-*", ".os390.bigFont: -*-courier-bold-r-*-*-*-140-*-*-m-*-*-*", ".tru64.bigFont: -*-courier-bold-r-*-*-*-140-*-*-m-*-*-*", ".vms.bigFont: -*-courier-bold-r-*-*-*-140-*-*-m-*-*-*", ".msdos.bigFont: -*-courier-bold-r-*-*-*-140-*-*-m-*-*-*", ".win10.font: -*-helvetica-medium-r-*-*-*-180-*-*-*-*-*-*", ".win10.bigFont: -*-helvetica-medium-r-*-*-*-180-*-*-*-*-*-*", ".win10.fontB: -*-helvetica-medium-r-*-*-*-240-*-*-*-*-*-*", ".win10.fontC: -*-helvetica-medium-r-*-*-*-140-*-*-*-*-*-*", ".win10.font2: ", ".win10.bigFont2: ", # endif /* X11 */ 0 }; static const XrmOptionDescRec bsod_options [] = { { "-delay", ".delay", XrmoptionSepArg, 0 }, { "-only", ".doOnly", XrmoptionSepArg, 0 }, { "-debug", ".debug", XrmoptionNoArg, "True" }, { "-windows", ".doWindows", XrmoptionNoArg, "True" }, { "-no-windows", ".doWindows", XrmoptionNoArg, "False" }, { "-nt", ".doNT", XrmoptionNoArg, "True" }, { "-no-nt", ".doNT", XrmoptionNoArg, "False" }, { "-2k", ".doWin2K", XrmoptionNoArg, "True" }, { "-no-2k", ".doWin2K", XrmoptionNoArg, "False" }, { "-win10", ".doWin10", XrmoptionNoArg, "True" }, { "-no-win10", ".doWin10", XrmoptionNoArg, "False" }, { "-amiga", ".doAmiga", XrmoptionNoArg, "True" }, { "-no-amiga", ".doAmiga", XrmoptionNoArg, "False" }, { "-mac", ".doMac", XrmoptionNoArg, "True" }, { "-no-mac", ".doMac", XrmoptionNoArg, "False" }, { "-mac1", ".doMac1", XrmoptionNoArg, "True" }, { "-no-mac1", ".doMac1", XrmoptionNoArg, "False" }, { "-macx", ".doMacX", XrmoptionNoArg, "True" }, { "-no-macx", ".doMacX", XrmoptionNoArg, "False" }, { "-atari", ".doAtari", XrmoptionNoArg, "True" }, { "-no-atari", ".doAtari", XrmoptionNoArg, "False" }, { "-macsbug", ".doMacsBug", XrmoptionNoArg, "True" }, { "-no-macsbug", ".doMacsBug", XrmoptionNoArg, "False" }, { "-apple2", ".doApple2", XrmoptionNoArg, "True" }, { "-no-apple2", ".doApple2", XrmoptionNoArg, "False" }, { "-sco", ".doSCO", XrmoptionNoArg, "True" }, { "-no-sco", ".doSCO", XrmoptionNoArg, "False" }, { "-hvx", ".doHVX", XrmoptionNoArg, "True" }, { "-no-hvx", ".doHVX", XrmoptionNoArg, "False" }, { "-bsd", ".doBSD", XrmoptionNoArg, "True" }, { "-no-bsd", ".doBSD", XrmoptionNoArg, "False" }, { "-linux", ".doLinux", XrmoptionNoArg, "True" }, { "-no-linux", ".doLinux", XrmoptionNoArg, "False" }, { "-hppalinux", ".doHPPALinux", XrmoptionNoArg, "True" }, { "-no-hppalinux", ".doHPPALinux", XrmoptionNoArg, "False" }, { "-sparclinux", ".doSparcLinux", XrmoptionNoArg, "True" }, { "-no-sparclinux", ".doSparcLinux", XrmoptionNoArg, "False" }, { "-blitdamage", ".doBlitDamage", XrmoptionNoArg, "True" }, { "-no-blitdamage", ".doBlitDamage", XrmoptionNoArg, "False" }, { "-nvidia", ".doNvidia", XrmoptionNoArg, "True" }, { "-no-nvidia", ".doNvidia", XrmoptionNoArg, "False" }, { "-solaris", ".doSolaris", XrmoptionNoArg, "True" }, { "-no-solaris", ".doSolaris", XrmoptionNoArg, "False" }, { "-hpux", ".doHPUX", XrmoptionNoArg, "True" }, { "-no-hpux", ".doHPUX", XrmoptionNoArg, "False" }, { "-os390", ".doOS390", XrmoptionNoArg, "True" }, { "-no-os390", ".doOS390", XrmoptionNoArg, "False" }, { "-tru64", ".doHPUX", XrmoptionNoArg, "True" }, { "-no-tru64", ".doTru64", XrmoptionNoArg, "False" }, { "-vms", ".doVMS", XrmoptionNoArg, "True" }, { "-no-vms", ".doVMS", XrmoptionNoArg, "False" }, { "-msdos", ".doMSDOS", XrmoptionNoArg, "True" }, { "-no-msdos", ".doMSDOS", XrmoptionNoArg, "False" }, { "-os2", ".doOS2", XrmoptionNoArg, "True" }, { "-no-os2", ".doOS2", XrmoptionNoArg, "False" }, { "-atm", ".doATM", XrmoptionNoArg, "True" }, { "-no-atm", ".doATM", XrmoptionNoArg, "False" }, { "-glados", ".doGLaDOS", XrmoptionNoArg, "True" }, { "-no-glados", ".doGLaDOS", XrmoptionNoArg, "False" }, { "-android", ".doAndroid", XrmoptionNoArg, "True" }, { "-no-android", ".doAndroid", XrmoptionNoArg, "False" }, ANALOGTV_OPTIONS { 0, 0, 0, 0 } }; XSCREENSAVER_MODULE ("BSOD", bsod) xscreensaver-5.36/hacks/crystal.c000644 000767 000024 00000113526 12717746063 017101 0ustar00jwzstaff000000 000000 /* -*- Mode: C; tab-width: 4 -*- */ /* crystal --- polygons moving according to plane group rules */ #if 0 static const char sccsid[] = "@(#)crystal.c 4.12 98/09/10 xlockmore"; #endif /*- * Copyright (c) 1997 by Jouk Jansen * * Permission to use, copy, modify, and distribute this software and its * documentation for any purpose and without fee is hereby granted, * provided that the above copyright notice appear in all copies and that * both that copyright notice and this permission notice appear in * supporting documentation. * * This file is provided AS IS with no warranties of any kind. The author * shall have no liability with respect to the infringement of copyrights, * trade secrets or any patents by this file or any part thereof. In no * event will the author be liable for any lost revenue or profits or * other special, indirect and consequential damages. * * The author should like to be notified if changes have been made to the * routine. Response will only be guaranteed when a VMS version of the * program is available. * * A moving polygon-mode. The polygons obey 2D-planegroup symmetry. * * The groupings of the cells fall in 3 categories: * oblique groups 1 and 2 where the angle gamma ranges from 60 to 120 degrees * square groups 3 through 11 where the angle gamma is 90 degrees * hexagonal groups 12 through 17 where the angle gamma is 120 degrees * * Revision History: * 03-Dec-98: Random inversion of y-axis included to simulate hexagonal groups * with an angle of 60 degrees. * 10-Sep-98: new colour scheme * 24-Feb-98: added option centre which turns on/off forcing the centre of * the screen to be used * added option maxsize which forces the dimensions to be chasen * in such ua way that the largest possible part of the screen is * used * When only one unit cell is drawn, it is chosen at random * 18-Feb-98: added support for negative numbers with -nx and -ny meaning * "random" choice with given maximum * added +/-grid option. If -cell is specified this option * determines if one or all unit cells are drawn. * -batchcount is now a parameter for all the objects on the screen * instead of the number of "unique" objects * The maximum size of the objects now scales with the part * of the screen used. * fixed "size" problem. Now very small non-vissable objects * are not allowed * 13-Feb-98: randomized the unit cell size * runtime options -/+cell (turn on/off unit cell drawing) * -nx num (number of translational symmetries in x-direction * -ny num (idem y-direction but ignored for square and * hexagonal space groups * i.e. try xlock -mode crystal -nx 3 -ny 2 * Fullrandom overrules the -/+cell option. * 05-Feb-98: Revision + bug repairs * shows unit cell * use part of the screen for unit cell * in hexagonal and square groups a&b axis forced to be equal * cell angle for oblique groups randomly chosen between 60 and 120 * bugs solved: planegroups with cell angles <> 90.0 now work properly * 19-Sep-97: Added remaining hexagonal groups * 12-Jun-97: Created */ #ifdef STANDALONE # define DEFAULTS "*delay: 60000 \n" \ "*count: -500 \n" \ "*cycles: 200 \n" \ "*size: -15 \n" \ "*ncolors: 100 \n" \ "*fpsSolid: True \n" \ "*ignoreRotation: True \n" \ # include "xlockmore.h" /* in xscreensaver distribution */ #else /* STANDALONE */ # include "xlock.h" /* in xlockmore distribution */ # include "color.h" #endif /* STANDALONE */ #define DEF_CELL "True" /* Draw unit cell */ #define DEF_GRID "False" /* Draw unit all cell if DEF_CELL is True */ #define DEF_NX "-3" /* number of unit cells in x-direction */ #define DEF_NX1 1 /* number of unit cells in x-direction */ #define DEF_NY "-3" /* number of unit cells in y-direction */ #define DEF_NY1 1 /* number of unit cells in y-direction */ #define DEF_CENTRE "False" #define DEF_MAXSIZE "False" #define DEF_CYCLE "True" #undef NRAND #define NRAND(n) ( (n) ? (int) (LRAND() % (n)) : 0) #define min(a,b) ((a) <= (b) ? (a) : (b)) static int nx, ny; static Bool unit_cell, grid_cell, centre, maxsize, cycle_p; static XrmOptionDescRec opts[] = { {"-nx", "crystal.nx", XrmoptionSepArg, 0}, {"-ny", "crystal.ny", XrmoptionSepArg, 0}, {"-centre", ".crystal.centre", XrmoptionNoArg, "on"}, {"+centre", ".crystal.centre", XrmoptionNoArg, "off"}, {"-maxsize", ".crystal.maxsize", XrmoptionNoArg, "on"}, {"+maxsize", ".crystal.maxsize", XrmoptionNoArg, "off"}, {"-cell", ".crystal.cell", XrmoptionNoArg, "on"}, {"+cell", ".crystal.cell", XrmoptionNoArg, "off"}, {"-grid", ".crystal.grid", XrmoptionNoArg, "on"}, {"+grid", ".crystal.grid", XrmoptionNoArg, "off"}, {"-shift", ".crystal.shift", XrmoptionNoArg, "on"}, {"+shift", ".crystal.shift", XrmoptionNoArg, "off"} }; static argtype vars[] = { {&nx, "nx", "nx", DEF_NX, t_Int}, {&ny, "ny", "ny", DEF_NY, t_Int}, {¢re, "centre", "Centre", DEF_CENTRE, t_Bool}, {&maxsize, "maxsize", "Maxsize", DEF_MAXSIZE, t_Bool}, {&unit_cell, "cell", "Cell", DEF_CELL, t_Bool}, {&grid_cell, "grid", "Grid", DEF_GRID, t_Bool}, {&cycle_p, "shift", "Shift", DEF_CYCLE, t_Bool} }; static OptionStruct desc[] = { {"-nx num", "Number of unit cells in x-direction"}, {"-ny num", "Number of unit cells in y-direction"}, {"-/+centre", "turn on/off centering on screen"}, {"-/+maxsize", "turn on/off use of maximum part of screen"}, {"-/+cell", "turn on/off drawing of unit cell"}, {"-/+grid", "turn on/off drawing of grid of unit cells (if -cell is on)"}, {"-/+shift", "turn on/off colour cycling"} }; ENTRYPOINT ModeSpecOpt crystal_opts = {sizeof opts / sizeof opts[0], opts, sizeof vars / sizeof vars[0], vars, desc}; #ifdef USE_MODULES ModStruct crystal_description = {"crystal", "init_crystal", "draw_crystal", "release_crystal", "refresh_crystal", "init_crystal", NULL, &crystal_opts, 60000, -40, 200, -15, 64, 1.0, "", "Shows polygons in 2D plane groups", 0, NULL}; #endif #define DEF_NUM_ATOM 10 #define DEF_SIZ_ATOM 10 #define PI_RAD (M_PI / 180.0) static Bool centro[17] = { False, True, False, False, False, True, True, True, True, True, True, True, False, False, False, True, True }; static Bool primitive[17] = { True, True, True, True, False, True, True, True, False, True, True, True, True, True, True, True, True }; static short numops[34] = { 1, 0, 1, 0, 9, 7, 2, 0, 9, 7, 9, 7, 4, 2, 5, 3, 9, 7, 8, 6, 10, 6, 8, 4, 16, 13, 19, 13, 16, 10, 19, 13, 19, 13 }; static short operation[114] = { 1, 0, 0, 1, 0, 0, -1, 0, 0, 1, 0, 1, -1, 0, 0, 1, 1, 0, 1, 0, 0, 1, 0, 0, -1, 0, 0, 1, 1, 1, 1, 0, 0, 1, 1, 1, 0, -1, 1, 0, 0, 0, 1, 0, 0, 1, 0, 0, -1, 0, 0, 1, 0, 0, 0, 1, 1, 0, 0, 0, -1, 0, -1, 1, 0, 0, 1, -1, 0, -1, 0, 0, 0, 1, 1, 0, 0, 0, 0, -1, 1, -1, 0, 0, -1, 1, -1, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, -1, -1, 0, 0, 0, -1, 1, 0, 1, 0, 0, 1, 0, 1, -1, 0, 0 }; typedef struct { unsigned long colour; int x0, y0, velocity[2]; float angle, velocity_a; int num_point, at_type, size_at; XPoint xy[5]; } crystalatom; typedef struct { Bool painted; int win_width, win_height, num_atom; int planegroup, a, b, offset_w, offset_h, nx, ny; float gamma; crystalatom *atom; GC gc; Bool unit_cell, grid_cell; Colormap cmap; XColor *colors; int ncolors; Bool cycle_p, mono_p, no_colors; unsigned long blackpixel, whitepixel, fg, bg; int direction, invert; } crystalstruct; static crystalstruct *crystals = NULL; static void trans_coor(XPoint * xyp, XPoint * new_xyp, int num_points, float gamma) { int i; for (i = 0; i <= num_points; i++) { new_xyp[i].x = xyp[i].x + (int) (xyp[i].y * sin((gamma - 90.0) * PI_RAD)); new_xyp[i].y = (int) (xyp[i].y / cos((gamma - 90.0) * PI_RAD)); } } static void trans_coor_back(XPoint * xyp, XPoint * new_xyp, int num_points, float gamma, int offset_w, int offset_h , int winheight , int invert ) { int i; for (i = 0; i <= num_points; i++) { new_xyp[i].y = (int) (xyp[i].y * cos((gamma - 90) * PI_RAD)) + offset_h; new_xyp[i].x = xyp[i].x - (int) (xyp[i].y * sin((gamma - 90.0) * PI_RAD)) + offset_w; if ( invert ) new_xyp[i].y = winheight - new_xyp[i].y; } } static void crystal_setupatom(crystalatom * atom0, float gamma) { XPoint xy[5]; int x0, y0; y0 = (int) (atom0->y0 * cos((gamma - 90) * PI_RAD)); x0 = atom0->x0 - (int) (atom0->y0 * sin((gamma - 90.0) * PI_RAD)); switch (atom0->at_type) { case 0: /* rectangles */ xy[0].x = x0 + (int) (2 * atom0->size_at * cos(atom0->angle)) + (int) (atom0->size_at * sin(atom0->angle)); xy[0].y = y0 + (int) (atom0->size_at * cos(atom0->angle)) - (int) (2 * atom0->size_at * sin(atom0->angle)); xy[1].x = x0 + (int) (2 * atom0->size_at * cos(atom0->angle)) - (int) (atom0->size_at * sin(atom0->angle)); xy[1].y = y0 - (int) (atom0->size_at * cos(atom0->angle)) - (int) (2 * atom0->size_at * sin(atom0->angle)); xy[2].x = x0 - (int) (2 * atom0->size_at * cos(atom0->angle)) - (int) (atom0->size_at * sin(atom0->angle)); xy[2].y = y0 - (int) (atom0->size_at * cos(atom0->angle)) + (int) (2 * atom0->size_at * sin(atom0->angle)); xy[3].x = x0 - (int) (2 * atom0->size_at * cos(atom0->angle)) + (int) (atom0->size_at * sin(atom0->angle)); xy[3].y = y0 + (int) (atom0->size_at * cos(atom0->angle)) + (int) (2 * atom0->size_at * sin(atom0->angle)); xy[4].x = xy[0].x; xy[4].y = xy[0].y; trans_coor(xy, atom0->xy, 4, gamma); return; case 1: /* squares */ xy[0].x = x0 + (int) (1.5 * atom0->size_at * cos(atom0->angle)) + (int) (1.5 * atom0->size_at * sin(atom0->angle)); xy[0].y = y0 + (int) (1.5 * atom0->size_at * cos(atom0->angle)) - (int) (1.5 * atom0->size_at * sin(atom0->angle)); xy[1].x = x0 + (int) (1.5 * atom0->size_at * cos(atom0->angle)) - (int) (1.5 * atom0->size_at * sin(atom0->angle)); xy[1].y = y0 - (int) (1.5 * atom0->size_at * cos(atom0->angle)) - (int) (1.5 * atom0->size_at * sin(atom0->angle)); xy[2].x = x0 - (int) (1.5 * atom0->size_at * cos(atom0->angle)) - (int) (1.5 * atom0->size_at * sin(atom0->angle)); xy[2].y = y0 - (int) (1.5 * atom0->size_at * cos(atom0->angle)) + (int) (1.5 * atom0->size_at * sin(atom0->angle)); xy[3].x = x0 - (int) (1.5 * atom0->size_at * cos(atom0->angle)) + (int) (1.5 * atom0->size_at * sin(atom0->angle)); xy[3].y = y0 + (int) (1.5 * atom0->size_at * cos(atom0->angle)) + (int) (1.5 * atom0->size_at * sin(atom0->angle)); xy[4].x = xy[0].x; xy[4].y = xy[0].y; trans_coor(xy, atom0->xy, 4, gamma); return; case 2: /* triangles */ xy[0].x = x0 + (int) (1.5 * atom0->size_at * sin(atom0->angle)); xy[0].y = y0 + (int) (1.5 * atom0->size_at * cos(atom0->angle)); xy[1].x = x0 + (int) (1.5 * atom0->size_at * cos(atom0->angle)) - (int) (1.5 * atom0->size_at * sin(atom0->angle)); xy[1].y = y0 - (int) (1.5 * atom0->size_at * cos(atom0->angle)) - (int) (1.5 * atom0->size_at * sin(atom0->angle)); xy[2].x = x0 - (int) (1.5 * atom0->size_at * cos(atom0->angle)) - (int) (1.5 * atom0->size_at * sin(atom0->angle)); xy[2].y = y0 - (int) (1.5 * atom0->size_at * cos(atom0->angle)) + (int) (1.5 * atom0->size_at * sin(atom0->angle)); xy[3].x = xy[0].x; xy[3].y = xy[0].y; trans_coor(xy, atom0->xy, 3, gamma); return; } } static void crystal_drawatom(ModeInfo * mi, crystalatom * atom0) { crystalstruct *cryst; Display *display = MI_DISPLAY(mi); Window window = MI_WINDOW(mi); int j, k, l, m; cryst = &crystals[MI_SCREEN(mi)]; for (j = numops[2 * cryst->planegroup + 1]; j < numops[2 * cryst->planegroup]; j++) { XPoint xy[5], new_xy[5]; XPoint xy_1[5]; int xtrans, ytrans; xtrans = operation[j * 6] * atom0->x0 + operation[j * 6 + 1] * atom0->y0 + (int) (operation[j * 6 + 4] * cryst->a / 2.0); ytrans = operation[j * 6 + 2] * atom0->x0 + operation[j * 6 + 3] * atom0->y0 + (int) (operation[j * 6 + 5] * cryst->b / 2.0); if (xtrans < 0) { if (xtrans < -cryst->a) xtrans = 2 * cryst->a; else xtrans = cryst->a; } else if (xtrans >= cryst->a) xtrans = -cryst->a; else xtrans = 0; if (ytrans < 0) ytrans = cryst->b; else if (ytrans >= cryst->b) ytrans = -cryst->b; else ytrans = 0; for (k = 0; k < atom0->num_point; k++) { xy[k].x = operation[j * 6] * atom0->xy[k].x + operation[j * 6 + 1] * atom0->xy[k].y + (int) (operation[j * 6 + 4] * cryst->a / 2.0) + xtrans; xy[k].y = operation[j * 6 + 2] * atom0->xy[k].x + operation[j * 6 + 3] * atom0->xy[k].y + (int) (operation[j * 6 + 5] * cryst->b / 2.0) + ytrans; } xy[atom0->num_point].x = xy[0].x; xy[atom0->num_point].y = xy[0].y; for (l = 0; l < cryst->nx; l++) { for (m = 0; m < cryst->ny; m++) { for (k = 0; k <= atom0->num_point; k++) { xy_1[k].x = xy[k].x + l * cryst->a; xy_1[k].y = xy[k].y + m * cryst->b; } trans_coor_back(xy_1, new_xy, atom0->num_point, cryst->gamma, cryst->offset_w, cryst->offset_h , cryst->win_height, cryst->invert); XFillPolygon(display, window, cryst->gc, new_xy, atom0->num_point, Convex, CoordModeOrigin); } } if (centro[cryst->planegroup] == True) { for (k = 0; k <= atom0->num_point; k++) { xy[k].x = cryst->a - xy[k].x; xy[k].y = cryst->b - xy[k].y; } for (l = 0; l < cryst->nx; l++) { for (m = 0; m < cryst->ny; m++) { for (k = 0; k <= atom0->num_point; k++) { xy_1[k].x = xy[k].x + l * cryst->a; xy_1[k].y = xy[k].y + m * cryst->b; } trans_coor_back(xy_1, new_xy, atom0->num_point, cryst->gamma, cryst->offset_w, cryst->offset_h , cryst->win_height , cryst->invert); XFillPolygon(display, window, cryst->gc, new_xy, atom0->num_point, Convex, CoordModeOrigin); } } } if (primitive[cryst->planegroup] == False) { if (xy[atom0->num_point].x >= (int) (cryst->a / 2.0)) xtrans = (int) (-cryst->a / 2.0); else xtrans = (int) (cryst->a / 2.0); if (xy[atom0->num_point].y >= (int) (cryst->b / 2.0)) ytrans = (int) (-cryst->b / 2.0); else ytrans = (int) (cryst->b / 2.0); for (k = 0; k <= atom0->num_point; k++) { xy[k].x = xy[k].x + xtrans; xy[k].y = xy[k].y + ytrans; } for (l = 0; l < cryst->nx; l++) { for (m = 0; m < cryst->ny; m++) { for (k = 0; k <= atom0->num_point; k++) { xy_1[k].x = xy[k].x + l * cryst->a; xy_1[k].y = xy[k].y + m * cryst->b; } trans_coor_back(xy_1, new_xy, atom0->num_point, cryst->gamma, cryst->offset_w, cryst->offset_h , cryst->win_height, cryst->invert); XFillPolygon(display, window, cryst->gc, new_xy, atom0->num_point, Convex, CoordModeOrigin); } } if (centro[cryst->planegroup] == True) { XPoint xy1[5]; for (k = 0; k <= atom0->num_point; k++) { xy1[k].x = cryst->a - xy[k].x; xy1[k].y = cryst->b - xy[k].y; } for (l = 0; l < cryst->nx; l++) { for (m = 0; m < cryst->ny; m++) { for (k = 0; k <= atom0->num_point; k++) { xy_1[k].x = xy1[k].x + l * cryst->a; xy_1[k].y = xy1[k].y + m * cryst->b; } trans_coor_back(xy_1, new_xy, atom0->num_point, cryst->gamma, cryst->offset_w, cryst->offset_h , cryst->win_height, cryst->invert); XFillPolygon(display, window, cryst->gc, new_xy, atom0->num_point, Convex, CoordModeOrigin); } } } } } } ENTRYPOINT void init_crystal(ModeInfo * mi); ENTRYPOINT void release_crystal(ModeInfo * mi); ENTRYPOINT void draw_crystal(ModeInfo * mi) { Display *display = MI_DISPLAY(mi); crystalstruct *cryst = &crystals[MI_SCREEN(mi)]; int i; #ifdef HAVE_JWXYZ /* Don't second-guess Quartz's double-buffering */ XClearWindow(MI_DISPLAY(mi), MI_WINDOW(mi)); #endif if (cryst->no_colors) { release_crystal(mi); init_crystal(mi); return; } cryst->painted = True; MI_IS_DRAWN(mi) = True; XSetFunction(display, cryst->gc, GXxor); /* Rotate colours */ if (cryst->cycle_p) { rotate_colors(mi->xgwa.screen, cryst->cmap, cryst->colors, cryst->ncolors, cryst->direction); if (!(LRAND() % 1000)) cryst->direction = -cryst->direction; } for (i = 0; i < cryst->num_atom; i++) { crystalatom *atom0; atom0 = &cryst->atom[i]; if (MI_IS_INSTALL(mi) && MI_NPIXELS(mi) > 2) { XSetForeground(display, cryst->gc, cryst->colors[atom0->colour].pixel); } else { XSetForeground(display, cryst->gc, atom0->colour); } crystal_drawatom(mi, atom0); atom0->velocity[0] += NRAND(3) - 1; atom0->velocity[0] = MAX(-20, MIN(20, atom0->velocity[0])); atom0->velocity[1] += NRAND(3) - 1; atom0->velocity[1] = MAX(-20, MIN(20, atom0->velocity[1])); atom0->x0 += atom0->velocity[0]; /*if (cryst->gamma == 90.0) { */ if (atom0->x0 < 0) atom0->x0 += cryst->a; else if (atom0->x0 >= cryst->a) atom0->x0 -= cryst->a; atom0->y0 += atom0->velocity[1]; if (atom0->y0 < 0) atom0->y0 += cryst->b; else if (atom0->y0 >= cryst->b) atom0->y0 -= cryst->b; /*} */ atom0->velocity_a += ((float) NRAND(1001) - 500.0) / 2000.0; atom0->angle += atom0->velocity_a; crystal_setupatom(atom0, cryst->gamma); crystal_drawatom(mi, atom0); } XSetFunction(display, cryst->gc, GXcopy); } ENTRYPOINT void refresh_crystal(ModeInfo * mi) { Display *display = MI_DISPLAY(mi); Window window = MI_WINDOW(mi); crystalstruct *cryst = &crystals[MI_SCREEN(mi)]; int i; if (!cryst->painted) return; MI_CLEARWINDOW(mi); XSetFunction(display, cryst->gc, GXxor); if (cryst->unit_cell) { int y_coor1 , y_coor2; if (MI_NPIXELS(mi) > 2) XSetForeground(display, cryst->gc, MI_PIXEL(mi, NRAND(MI_NPIXELS(mi)))); else XSetForeground(display, cryst->gc, MI_WHITE_PIXEL(mi)); if (cryst->grid_cell) { int inx, iny; if ( cryst->invert ) y_coor1 = y_coor2 = cryst->win_height - cryst->offset_h; else y_coor1 = y_coor2 = cryst->offset_h; XDrawLine(display, window, cryst->gc, cryst->offset_w, y_coor1, cryst->offset_w + cryst->nx * cryst->a, y_coor2); if ( cryst->invert ) { y_coor1 = cryst->win_height - cryst->offset_h; y_coor2 = cryst->win_height - (int) (cryst->ny * cryst->b * cos((cryst->gamma - 90) * PI_RAD)) - cryst->offset_h; } else { y_coor1 = cryst->offset_h; y_coor2 = (int) (cryst->ny * cryst->b * cos((cryst->gamma - 90) * PI_RAD)) + cryst->offset_h; } XDrawLine(display, window, cryst->gc, cryst->offset_w, y_coor1, (int) (cryst->offset_w - cryst->ny * cryst->b * sin((cryst->gamma - 90) * PI_RAD)), y_coor2); inx = cryst->nx; for (iny = 1; iny <= cryst->ny; iny++) { if ( cryst->invert ) { y_coor1 = cryst->win_height - (int) (iny * cryst->b * cos((cryst->gamma - 90) * PI_RAD)) - cryst->offset_h; y_coor2 = cryst->win_height - (int) (iny * cryst->b * cos((cryst->gamma - 90) * PI_RAD)) - cryst->offset_h; } else { y_coor1 = (int) (iny * cryst->b * cos((cryst->gamma - 90) * PI_RAD)) + cryst->offset_h; y_coor2 = (int) (iny * cryst->b * cos((cryst->gamma - 90) * PI_RAD)) + cryst->offset_h; } XDrawLine(display, window, cryst->gc, (int) (cryst->offset_w + inx * cryst->a - (int) (iny * cryst->b * sin((cryst->gamma - 90) * PI_RAD))), y_coor1, (int) (cryst->offset_w - iny * cryst->b * sin((cryst->gamma - 90) * PI_RAD)), y_coor2); } iny = cryst->ny; for (inx = 1; inx <= cryst->nx; inx++) { if ( cryst->invert ) { y_coor1 =cryst->win_height - (int) (iny * cryst->b * cos((cryst->gamma - 90) * PI_RAD)) - cryst->offset_h; y_coor2 =cryst->win_height - cryst->offset_h; } else { y_coor1 =(int) (iny * cryst->b * cos((cryst->gamma - 90) * PI_RAD)) + cryst->offset_h; y_coor2 =cryst->offset_h; } XDrawLine(display, window, cryst->gc, (int) (cryst->offset_w + inx * cryst->a - (int) (iny * cryst->b * sin((cryst->gamma - 90) * PI_RAD))), y_coor1, cryst->offset_w + inx * cryst->a, y_coor2); } } else { int inx, iny; inx = NRAND(cryst->nx); iny = NRAND(cryst->ny); if ( cryst->invert ) { y_coor1 =cryst->win_height - (int) (iny * cryst->b * cos((cryst->gamma - 90) * PI_RAD)) - cryst->offset_h; y_coor2 =cryst->win_height - (int) ( ( iny + 1 ) * cryst->b * cos((cryst->gamma - 90) * PI_RAD)) - cryst->offset_h; } else { y_coor1 =(int) (iny * cryst->b * cos((cryst->gamma - 90) * PI_RAD)) + cryst->offset_h; y_coor2 =(int) (( iny + 1 ) * cryst->b * cos((cryst->gamma - 90) * PI_RAD)) + cryst->offset_h; } XDrawLine(display, window, cryst->gc, cryst->offset_w + inx * cryst->a - (int) (iny * cryst->b * sin((cryst->gamma - 90) * PI_RAD)), y_coor1, cryst->offset_w + (inx + 1) * cryst->a - (int) (iny * cryst->b * sin((cryst->gamma - 90) * PI_RAD)), y_coor1); XDrawLine(display, window, cryst->gc, cryst->offset_w + inx * cryst->a - (int) (iny * cryst->b * sin((cryst->gamma - 90) * PI_RAD)), y_coor1, cryst->offset_w + inx * cryst->a - (int) ((iny + 1) * cryst->b * sin((cryst->gamma - 90) * PI_RAD)), y_coor2); XDrawLine(display, window, cryst->gc, cryst->offset_w + (inx + 1) * cryst->a - (int) (iny * cryst->b * sin((cryst->gamma - 90) * PI_RAD)), y_coor1, cryst->offset_w + (inx + 1) * cryst->a - (int) ((iny + 1) * cryst->b * sin((cryst->gamma - 90) * PI_RAD)), y_coor2); XDrawLine(display, window, cryst->gc, cryst->offset_w + inx * cryst->a - (int) ((iny + 1) * cryst->b * sin((cryst->gamma - 90) * PI_RAD)), y_coor2, cryst->offset_w + (inx + 1) * cryst->a - (int) ((iny + 1) * cryst->b * sin((cryst->gamma - 90) * PI_RAD)), y_coor2); } } for (i = 0; i < cryst->num_atom; i++) { crystalatom *atom0; atom0 = &cryst->atom[i]; if (MI_IS_INSTALL(mi) && MI_NPIXELS(mi) > 2) { XSetForeground(display, cryst->gc, cryst->colors[atom0->colour].pixel); } else { XSetForeground(display, cryst->gc, atom0->colour); } crystal_drawatom(mi, atom0); } XSetFunction(display, cryst->gc, GXcopy); } ENTRYPOINT void release_crystal(ModeInfo * mi) { Display *display = MI_DISPLAY(mi); if (crystals != NULL) { int screen; for (screen = 0; screen < MI_NUM_SCREENS(mi); screen++) { crystalstruct *cryst = &crystals[screen]; if (MI_IS_INSTALL(mi) && MI_NPIXELS(mi) > 2) { MI_WHITE_PIXEL(mi) = cryst->whitepixel; MI_BLACK_PIXEL(mi) = cryst->blackpixel; #ifndef STANDALONE MI_FG_PIXEL(mi) = cryst->fg; MI_BG_PIXEL(mi) = cryst->bg; #endif if (cryst->colors && cryst->ncolors && !cryst->no_colors) free_colors(mi->xgwa.screen, cryst->cmap, cryst->colors, cryst->ncolors); if (cryst->colors) (void) free((void *) cryst->colors); #if 0 /* #### wrong! -jwz */ XFreeColormap(display, cryst->cmap); #endif } if (cryst->gc != NULL) XFreeGC(display, cryst->gc); if (cryst->atom != NULL) (void) free((void *) cryst->atom); } (void) free((void *) crystals); crystals = NULL; } } ENTRYPOINT void init_crystal(ModeInfo * mi) { Display *display = MI_DISPLAY(mi); Window window = MI_WINDOW(mi); crystalstruct *cryst; int i, max_atoms, size_atom, neqv; int cell_min; #define MIN_CELL 200 /* initialize */ if (crystals == NULL) { if ((crystals = (crystalstruct *) calloc(MI_NUM_SCREENS(mi), sizeof (crystalstruct))) == NULL) return; } cryst = &crystals[MI_SCREEN(mi)]; if (!cryst->gc) { if (MI_IS_INSTALL(mi) && MI_NPIXELS(mi) > 2) { XColor color; #ifndef STANDALONE extern char *background; extern char *foreground; cryst->fg = MI_FG_PIXEL(mi); cryst->bg = MI_BG_PIXEL(mi); #endif cryst->blackpixel = MI_BLACK_PIXEL(mi); cryst->whitepixel = MI_WHITE_PIXEL(mi); #if 0 /* #### wrong! -jwz */ cryst->cmap = XCreateColormap(display, window, MI_VISUAL(mi), AllocNone); XSetWindowColormap(display, window, cryst->cmap); #else cryst->cmap = mi->xgwa.colormap; #endif (void) XParseColor(display, cryst->cmap, "black", &color); (void) XAllocColor(display, cryst->cmap, &color); MI_BLACK_PIXEL(mi) = color.pixel; (void) XParseColor(display, cryst->cmap, "white", &color); (void) XAllocColor(display, cryst->cmap, &color); MI_WHITE_PIXEL(mi) = color.pixel; #ifndef STANDALONE (void) XParseColor(display, cryst->cmap, background, &color); (void) XAllocColor(display, cryst->cmap, &color); MI_BG_PIXEL(mi) = color.pixel; (void) XParseColor(display, cryst->cmap, foreground, &color); (void) XAllocColor(display, cryst->cmap, &color); MI_FG_PIXEL(mi) = color.pixel; #endif cryst->colors = 0; cryst->ncolors = 0; } if ((cryst->gc = XCreateGC(display, MI_WINDOW(mi), (unsigned long) 0, (XGCValues *) NULL)) == None) return; } /* Clear Display */ MI_CLEARWINDOW(mi); cryst->painted = False; XSetFunction(display, cryst->gc, GXxor); /*Set up crystal data */ cryst->direction = (LRAND() & 1) ? 1 : -1; if (MI_IS_FULLRANDOM(mi)) { if (LRAND() & 1) cryst->unit_cell = True; else cryst->unit_cell = False; } else cryst->unit_cell = unit_cell; if (cryst->unit_cell) { if (MI_IS_FULLRANDOM(mi)) { if (LRAND() & 1) cryst->grid_cell = True; else cryst->grid_cell = False; } else cryst->grid_cell = grid_cell; } cryst->win_width = MI_WIDTH(mi); cryst->win_height = MI_HEIGHT(mi); cell_min = min(cryst->win_width / 2 + 1, MIN_CELL); cell_min = min(cell_min, cryst->win_height / 2 + 1); cryst->planegroup = NRAND(17); cryst->invert = NRAND(2); if (MI_IS_VERBOSE(mi)) (void) fprintf(stdout, "Selected plane group no %d\n", cryst->planegroup + 1); if (cryst->planegroup > 11) cryst->gamma = 120.0; else if (cryst->planegroup < 2) cryst->gamma = 60.0 + NRAND(60); else cryst->gamma = 90.0; neqv = numops[2 * cryst->planegroup] - numops[2 * cryst->planegroup + 1]; if (centro[cryst->planegroup] == True) neqv = 2 * neqv; if (primitive[cryst->planegroup] == False) neqv = 2 * neqv; if (nx > 0) cryst->nx = nx; else if (nx < 0) cryst->nx = NRAND(-nx) + 1; else cryst->nx = DEF_NX1; if (cryst->planegroup > 8) cryst->ny = cryst->nx; else if (ny > 0) cryst->ny = ny; else if (ny < 0) cryst->ny = NRAND(-ny) + 1; else cryst->ny = DEF_NY1; neqv = neqv * cryst->nx * cryst->ny; cryst->num_atom = MI_COUNT(mi); max_atoms = MI_COUNT(mi); if (cryst->num_atom == 0) { cryst->num_atom = DEF_NUM_ATOM; max_atoms = DEF_NUM_ATOM; } else if (cryst->num_atom < 0) { max_atoms = -cryst->num_atom; cryst->num_atom = NRAND(-cryst->num_atom) + 1; } if (neqv > 1) cryst->num_atom = cryst->num_atom / neqv + 1; if (cryst->atom == NULL) cryst->atom = (crystalatom *) calloc(max_atoms, sizeof ( crystalatom)); if (maxsize) { if (cryst->planegroup < 13) { cryst->gamma = 90.0; cryst->offset_w = 0; cryst->offset_h = 0; if (cryst->planegroup < 10) { cryst->b = cryst->win_height; cryst->a = cryst->win_width; } else { cryst->b = min(cryst->win_height, cryst->win_width); cryst->a = cryst->b; } } else { cryst->gamma = 120.0; cryst->a = (int) (cryst->win_width * 2.0 / 3.0); cryst->b = cryst->a; cryst->offset_h = (int) (cryst->b * 0.25 * cos((cryst->gamma - 90) * PI_RAD)); cryst->offset_w = (int) (cryst->b * 0.5); } } else { int max_repeat = 10; cryst->offset_w = -1; while (max_repeat-- && (cryst->offset_w < 4 || (int) (cryst->offset_w - cryst->b * sin((cryst->gamma - 90) * PI_RAD)) < 4) ) { cryst->b = NRAND((int) (cryst->win_height / (cos((cryst->gamma - 90) * PI_RAD))) - cell_min) + cell_min; if (cryst->planegroup > 8) cryst->a = cryst->b; else cryst->a = NRAND(cryst->win_width - cell_min) + cell_min; cryst->offset_w = (int) ((cryst->win_width - (cryst->a - cryst->b * sin((cryst->gamma - 90) * PI_RAD))) / 2.0); } cryst->offset_h = (int) ((cryst->win_height - cryst->b * cos(( cryst->gamma - 90) * PI_RAD)) / 2.0); if (!centre) { if (cryst->offset_h > 0) cryst->offset_h = NRAND(2 * cryst->offset_h); cryst->offset_w = (int) (cryst->win_width - cryst->a - cryst->b * fabs(sin((cryst->gamma - 90) * PI_RAD))); if (cryst->gamma > 90.0) { if (cryst->offset_w > 0) cryst->offset_w = NRAND(cryst->offset_w) + (int) (cryst->b * sin((cryst->gamma - 90) * PI_RAD)); else cryst->offset_w = (int) (cryst->b * sin((cryst->gamma - 90) * PI_RAD)); } else if (cryst->offset_w > 0) cryst->offset_w = NRAND(cryst->offset_w); else cryst->offset_w = 0; } } size_atom = min((int) ((float) (cryst->a) / 40.) + 1, (int) ((float) (cryst->b) / 40.) + 1); if (MI_SIZE(mi) < size_atom) { if (MI_SIZE(mi) < -size_atom) size_atom = -size_atom; else size_atom = MI_SIZE(mi); } cryst->a = cryst->a / cryst->nx; cryst->b = cryst->b / cryst->ny; if (cryst->unit_cell) { int y_coor1 , y_coor2; if (MI_NPIXELS(mi) > 2) XSetForeground(display, cryst->gc, MI_PIXEL(mi, NRAND(MI_NPIXELS(mi)))); else XSetForeground(display, cryst->gc, MI_WHITE_PIXEL(mi)); if (cryst->grid_cell) { int inx, iny; if ( cryst->invert ) y_coor1 = y_coor2 = cryst->win_height - cryst->offset_h; else y_coor1 = y_coor2 = cryst->offset_h; XDrawLine(display, window, cryst->gc, cryst->offset_w, y_coor1, cryst->offset_w + cryst->nx * cryst->a, y_coor2); if ( cryst->invert ) { y_coor1 = cryst->win_height - cryst->offset_h; y_coor2 = cryst->win_height - (int) (cryst->ny * cryst->b * cos((cryst->gamma - 90) * PI_RAD)) - cryst->offset_h; } else { y_coor1 = cryst->offset_h; y_coor2 = (int) (cryst->ny * cryst->b * cos((cryst->gamma - 90) * PI_RAD)) + cryst->offset_h; } XDrawLine(display, window, cryst->gc, cryst->offset_w, y_coor1, (int) (cryst->offset_w - cryst->ny * cryst->b * sin((cryst->gamma - 90) * PI_RAD)), y_coor2); inx = cryst->nx; for (iny = 1; iny <= cryst->ny; iny++) { if ( cryst->invert ) { y_coor1 = cryst->win_height - (int) (iny * cryst->b * cos((cryst->gamma - 90) * PI_RAD)) - cryst->offset_h; y_coor2 = cryst->win_height - (int) (iny * cryst->b * cos((cryst->gamma - 90) * PI_RAD)) - cryst->offset_h; } else { y_coor1 = (int) (iny * cryst->b * cos((cryst->gamma - 90) * PI_RAD)) + cryst->offset_h; y_coor2 = (int) (iny * cryst->b * cos((cryst->gamma - 90) * PI_RAD)) + cryst->offset_h; } XDrawLine(display, window, cryst->gc, (int) (cryst->offset_w + inx * cryst->a - (int) (iny * cryst->b * sin((cryst->gamma - 90) * PI_RAD))), y_coor1, (int) (cryst->offset_w - iny * cryst->b * sin((cryst->gamma - 90) * PI_RAD)), y_coor2); } iny = cryst->ny; for (inx = 1; inx <= cryst->nx; inx++) { if ( cryst->invert ) { y_coor1 =cryst->win_height - (int) (iny * cryst->b * cos((cryst->gamma - 90) * PI_RAD)) - cryst->offset_h; y_coor2 =cryst->win_height - cryst->offset_h; } else { y_coor1 =(int) (iny * cryst->b * cos((cryst->gamma - 90) * PI_RAD)) + cryst->offset_h; y_coor2 =cryst->offset_h; } XDrawLine(display, window, cryst->gc, (int) (cryst->offset_w + inx * cryst->a - (int) (iny * cryst->b * sin((cryst->gamma - 90) * PI_RAD))), y_coor1, cryst->offset_w + inx * cryst->a, y_coor2); } } else { int inx, iny; inx = NRAND(cryst->nx); iny = NRAND(cryst->ny); if ( cryst->invert ) { y_coor1 =cryst->win_height - (int) (iny * cryst->b * cos((cryst->gamma - 90) * PI_RAD)) - cryst->offset_h; y_coor2 =cryst->win_height - (int) ( ( iny + 1 ) * cryst->b * cos((cryst->gamma - 90) * PI_RAD)) - cryst->offset_h; } else { y_coor1 =(int) (iny * cryst->b * cos((cryst->gamma - 90) * PI_RAD)) + cryst->offset_h; y_coor2 =(int) (( iny + 1 ) * cryst->b * cos((cryst->gamma - 90) * PI_RAD)) + cryst->offset_h; } XDrawLine(display, window, cryst->gc, cryst->offset_w + inx * cryst->a - (int) (iny * cryst->b * sin((cryst->gamma - 90) * PI_RAD)), y_coor1, cryst->offset_w + (inx + 1) * cryst->a - (int) (iny * cryst->b * sin((cryst->gamma - 90) * PI_RAD)), y_coor1); XDrawLine(display, window, cryst->gc, cryst->offset_w + inx * cryst->a - (int) (iny * cryst->b * sin((cryst->gamma - 90) * PI_RAD)), y_coor1, cryst->offset_w + inx * cryst->a - (int) ((iny + 1) * cryst->b * sin((cryst->gamma - 90) * PI_RAD)), y_coor2); XDrawLine(display, window, cryst->gc, cryst->offset_w + (inx + 1) * cryst->a - (int) (iny * cryst->b * sin((cryst->gamma - 90) * PI_RAD)), y_coor1, cryst->offset_w + (inx + 1) * cryst->a - (int) ((iny + 1) * cryst->b * sin((cryst->gamma - 90) * PI_RAD)), y_coor2); XDrawLine(display, window, cryst->gc, cryst->offset_w + inx * cryst->a - (int) ((iny + 1) * cryst->b * sin((cryst->gamma - 90) * PI_RAD)), y_coor2, cryst->offset_w + (inx + 1) * cryst->a - (int) ((iny + 1) * cryst->b * sin((cryst->gamma - 90) * PI_RAD)), y_coor2); } } if (MI_IS_INSTALL(mi) && MI_NPIXELS(mi) > 2) { /* Set up colour map */ if (cryst->colors && cryst->ncolors && !cryst->no_colors) free_colors(mi->xgwa.screen, cryst->cmap, cryst->colors, cryst->ncolors); if (cryst->colors) (void) free((void *) cryst->colors); cryst->colors = 0; cryst->ncolors = MI_NCOLORS(mi); if (cryst->ncolors < 2) cryst->ncolors = 2; if (cryst->ncolors <= 2) cryst->mono_p = True; else cryst->mono_p = False; if (cryst->mono_p) cryst->colors = 0; else cryst->colors = (XColor *) malloc(sizeof (*cryst->colors) * (cryst->ncolors + 1)); cryst->cycle_p = has_writable_cells(mi->xgwa.screen, MI_VISUAL(mi)); if (cryst->cycle_p) { if (MI_IS_FULLRANDOM(mi)) { if (!NRAND(8)) cryst->cycle_p = False; else cryst->cycle_p = True; } else { cryst->cycle_p = cycle_p; } } if (!cryst->mono_p) { if (!(LRAND() % 10)) make_random_colormap(mi->xgwa.screen, MI_VISUAL(mi), cryst->cmap, cryst->colors, &cryst->ncolors, True, True, &cryst->cycle_p, True); else if (!(LRAND() % 2)) make_uniform_colormap(mi->xgwa.screen, MI_VISUAL(mi), cryst->cmap, cryst->colors, &cryst->ncolors, True, &cryst->cycle_p, True); else make_smooth_colormap(mi->xgwa.screen, MI_VISUAL(mi), cryst->cmap, cryst->colors, &cryst->ncolors, True, &cryst->cycle_p, True); } #if 0 /* #### wrong! -jwz */ XInstallColormap(display, cryst->cmap); #endif if (cryst->ncolors < 2) { cryst->ncolors = 2; cryst->no_colors = True; } else cryst->no_colors = False; if (cryst->ncolors <= 2) cryst->mono_p = True; if (cryst->mono_p) cryst->cycle_p = False; } for (i = 0; i < cryst->num_atom; i++) { crystalatom *atom0; atom0 = &cryst->atom[i]; if (MI_IS_INSTALL(mi) && MI_NPIXELS(mi) > 2) { if (cryst->ncolors > 2) atom0->colour = NRAND(cryst->ncolors - 2) + 2; else atom0->colour = 1; /* Just in case */ XSetForeground(display, cryst->gc, cryst->colors[atom0->colour].pixel); } else { if (MI_NPIXELS(mi) > 2) atom0->colour = MI_PIXEL(mi, NRAND(MI_NPIXELS(mi))); else atom0->colour = 1; /*Xor'red so WHITE may not be appropriate */ XSetForeground(display, cryst->gc, atom0->colour); } atom0->x0 = NRAND(cryst->a); atom0->y0 = NRAND(cryst->b); atom0->velocity[0] = NRAND(7) - 3; atom0->velocity[1] = NRAND(7) - 3; atom0->velocity_a = (NRAND(7) - 3) * PI_RAD; atom0->angle = NRAND(90) * PI_RAD; atom0->at_type = NRAND(3); if (size_atom == 0) atom0->size_at = DEF_SIZ_ATOM; else if (size_atom > 0) atom0->size_at = size_atom; else atom0->size_at = NRAND(-size_atom) + 1; atom0->size_at++; if (atom0->at_type == 2) atom0->num_point = 3; else atom0->num_point = 4; crystal_setupatom(atom0, cryst->gamma); crystal_drawatom(mi, atom0); } XSetFunction(display, cryst->gc, GXcopy); } ENTRYPOINT void reshape_crystal(ModeInfo * mi, int width, int height) { release_crystal(mi); init_crystal(mi); } ENTRYPOINT Bool crystal_handle_event (ModeInfo *mi, XEvent *event) { if (screenhack_event_helper (MI_DISPLAY(mi), MI_WINDOW(mi), event)) { reshape_crystal (mi, MI_WIDTH(mi), MI_HEIGHT(mi)); return True; } return False; } XSCREENSAVER_MODULE ("Crystal", crystal) xscreensaver-5.36/hacks/discrete.c000644 000767 000024 00000026266 12701612216 017207 0ustar00jwzstaff000000 000000 /* -*- Mode: C; tab-width: 4 -*- */ /* discrete --- chaotic mappings */ #if 0 static const char sccsid[] = "@(#)discrete.c 5.00 2000/11/01 xlockmore"; #endif /*- * Copyright (c) 1996 by Tim Auckland * * Permission to use, copy, modify, and distribute this software and its * documentation for any purpose and without fee is hereby granted, * provided that the above copyright notice appear in all copies and that * both that copyright notice and this permission notice appear in * supporting documentation. * * This file is provided AS IS with no warranties of any kind. The author * shall have no liability with respect to the infringement of copyrights, * trade secrets or any patents by this file or any part thereof. In no * event will the author be liable for any lost revenue or profits or * other special, indirect and consequential damages. * * "discrete" shows a number of fractals based on the "discrete map" * type of dynamical systems. They include a different way of looking * at the HOPALONG system, an inverse julia-set iteration, the "Standard * Map" and the "Bird in a Thornbush" fractal. * * Revision History: * 01-Nov-2000: Allocation checks * 31-Jul-1997: Ported to xlockmore-4 * 08-Aug-1996: Adapted from hop.c Copyright (c) 1991 by Patrick J. Naughton. */ #ifdef STANDALONE # define MODE_discrete #define DEFAULTS "*delay: 20000 \n" \ "*count: 4096 \n" \ "*cycles: 2500 \n" \ "*ncolors: 100 \n" \ "*fpsSolid: true \n" \ "*ignoreRotation: True \n" \ # define SMOOTH_COLORS # include "xlockmore.h" /* in xscreensaver distribution */ # include "erase.h" #else /* STANDALONE */ # include "xlock.h" /* in xlockmore distribution */ #endif /* STANDALONE */ #ifdef MODE_discrete ENTRYPOINT ModeSpecOpt discrete_opts = {0, (XrmOptionDescRec *) NULL, 0, (argtype *) NULL, (OptionStruct *) NULL}; #ifdef USE_MODULES ModStruct discrete_description = {"discrete", "init_discrete", "draw_discrete", "release_discrete", "refresh_discrete", "init_discrete", (char *) NULL, &discrete_opts, 1000, 4096, 2500, 1, 64, 1.0, "", "Shows various discrete maps", 0, NULL}; #endif enum ftypes { SQRT, BIRDIE, STANDARD, TRIG, CUBIC, HENON, AILUJ, HSHOE, DELOG }; /*#define TEST STANDARD */ #define BIASES 18 static enum ftypes bias[BIASES] = { STANDARD, STANDARD, STANDARD, STANDARD, SQRT, SQRT, SQRT, SQRT, BIRDIE, BIRDIE, BIRDIE, AILUJ, AILUJ, AILUJ, TRIG, TRIG, CUBIC, HENON, }; typedef struct { int maxx; int maxy; /* max of the screen */ double a; double b; double c; double d; double e; double i; double j; /* discrete parameters */ double ic; double jc; double is; double js; int inc; int pix; enum ftypes op; int count; XPoint *pointBuffer; /* pointer for XDrawPoints */ int sqrt_sign, std_sign; #ifdef STANDALONE eraser_state *eraser; #endif } discretestruct; static discretestruct *discretes = (discretestruct *) NULL; ENTRYPOINT void init_discrete (ModeInfo * mi) { double range; discretestruct *hp; if (discretes == NULL) { if ((discretes = (discretestruct *) calloc(MI_NUM_SCREENS(mi), sizeof (discretestruct))) == NULL) return; } hp = &discretes[MI_SCREEN(mi)]; hp->maxx = MI_WIDTH(mi); hp->maxy = MI_HEIGHT(mi); #ifdef TEST hp->op = TEST; #else hp->op = bias[LRAND() % BIASES]; #endif switch (hp->op) { case HSHOE: hp->ic = 0; hp->jc = 0; hp->is = hp->maxx / (4); hp->js = hp->maxy / (4); hp->a = 0.5; hp->b = 0.5; hp->c = 0.2; hp->d = -1.25; hp->e = 1; hp->i = hp->j = 0.0; break; case DELOG: hp->ic = 0.5; hp->jc = 0.3; hp->is = hp->maxx / 1.5; hp->js = hp->maxy / 1.5; hp->a = 2.176399; hp->i = hp->j = 0.01; break; case HENON: hp->jc = ((LRAND() / MAXRAND) * 2.0 - 1.0) * 0.4; hp->ic = 1.3 * (1 - (hp->jc * hp->jc) / (0.4 * 0.4)); hp->is = hp->maxx; hp->js = hp->maxy * 1.5; hp->a = 1; hp->b = 1.4; hp->c = 0.3; hp->i = hp->j = 0; break; case SQRT: hp->ic = 0; hp->jc = 0; hp->is = 1; hp->js = 1; range = sqrt((double) hp->maxx * 2 * hp->maxx * 2 + (double) hp->maxy * 2 * hp->maxy * 2) / (10.0 + LRAND() % 10); hp->a = (LRAND() / MAXRAND) * range - range / 2.0; hp->b = (LRAND() / MAXRAND) * range - range / 2.0; hp->c = (LRAND() / MAXRAND) * range - range / 2.0; if (!(LRAND() % 2)) hp->c = 0.0; hp->i = hp->j = 0.0; break; case STANDARD: hp->ic = M_PI; hp->jc = M_PI; hp->is = hp->maxx / (M_PI * 2); hp->js = hp->maxy / (M_PI * 2); hp->a = 0; /* decay */ hp->b = (LRAND() / MAXRAND) * 2.0; hp->c = 0; hp->i = M_PI; hp->j = M_PI; break; case BIRDIE: hp->ic = 0; hp->jc = 0; hp->is = hp->maxx / 2; hp->js = hp->maxy / 2; hp->a = 1.99 + ((LRAND() / MAXRAND) * 2.0 - 1.0) * 0.2; hp->b = 0; hp->c = 0.8 + ((LRAND() / MAXRAND) * 2.0 - 1.0) * 0.1; hp->i = hp->j = 0; break; case TRIG: hp->a = 5; hp->b = 0.5 + ((LRAND() / MAXRAND) * 2.0 - 1.0) * 0.3; hp->ic = hp->a; hp->jc = 0; hp->is = hp->maxx / (hp->b * 20); hp->js = hp->maxy / (hp->b * 20); hp->i = hp->j = 0; break; case CUBIC: hp->a = 2.77; hp->b = 0.1 + ((LRAND() / MAXRAND) * 2.0 - 1.0) * 0.1; hp->ic = 0; hp->jc = 0; hp->is = hp->maxx / 4; hp->js = hp->maxy / 4; hp->i = hp->j = 0.1; break; case AILUJ: { int i; double x, y, xn, yn; hp->ic = 0; hp->jc = 0; hp->is = hp->maxx / 4; hp->js = hp->maxx / 4; do { hp->a = ((LRAND() / MAXRAND) * 2.0 - 1.0) * 1.5 - 0.5; hp->b = ((LRAND() / MAXRAND) * 2.0 - 1.0) * 1.5; x = y = 0; #define MAXITER 10 for (i = 0; i < MAXITER && x * x + y * y < 13; i++) { /* 'Brot calc */ xn = x * x - y * y + hp->a; yn = 2 * x * y + hp->b; x = xn; y = yn; } } while (i < MAXITER); /* wait for a connected set */ hp->i = hp->j = 0.1; break; } } hp->pix = 0; hp->inc = 0; if (hp->pointBuffer == NULL) { hp->pointBuffer = (XPoint *) malloc(sizeof (XPoint) * MI_COUNT(mi)); /* if fails will check later */ } #ifndef STANDALONE /* Clear the background. */ MI_CLEARWINDOW(mi); #endif XSetForeground(MI_DISPLAY(mi), MI_GC(mi), MI_WHITE_PIXEL(mi)); hp->count = 0; hp->sqrt_sign = 1; hp->std_sign = 1; } static void draw_discrete_1 (ModeInfo * mi) { Display *dsp = MI_DISPLAY(mi); Window win = MI_WINDOW(mi); double oldj, oldi; int count = MI_COUNT(mi); int cycles = MI_CYCLES(mi); int k; XPoint *xp; GC gc = MI_GC(mi); discretestruct *hp; if (discretes == NULL) return; hp = &discretes[MI_SCREEN(mi)]; if (hp->pointBuffer == NULL) return; k = count; xp = hp->pointBuffer; hp->inc++; MI_IS_DRAWN(mi) = True; if (MI_NPIXELS(mi) > 2) { XSetForeground(dsp, gc, MI_PIXEL(mi, hp->pix)); if (++hp->pix >= MI_NPIXELS(mi)) hp->pix = 0; } while (k--) { oldj = hp->j; oldi = hp->i; switch (hp->op) { case HSHOE: { int i; #if 0 if (!k) { XSetForeground(dsp, gc, MI_BLACK_PIXEL(mi)); XFillRectangle(dsp, win, gc, 0, 0, hp->maxx, hp->maxy); XSetForeground(dsp, gc, MI_PIXEL(mi, hp->pix)); } else #endif #define HD #ifdef HD if (k < count / 4) { hp->i = ((double) k / count) * 8 - 1; hp->j = 1; } else if (k < count / 2) { hp->i = 1; hp->j = 3 - ((double) k / count) * 8; } else if (k < 3 * count / 4) { hp->i = 5 - ((double) k / count) * 8; hp->j = -1; } else { hp->i = -1; hp->j = ((double) k / count) * 8 - 7; } for (i = 1; i < (hp->inc % 15); i++) { oldj = hp->j; oldi = hp->i; #endif hp->i = (hp->a * oldi + hp->b) * oldj; hp->j = (hp->e - hp->d + hp->c * oldi) * oldj * oldj - hp->c * oldi + hp->d; #ifdef HD } #endif break; } case DELOG: hp->j = oldi; hp->i = hp->a * oldi * (1 - oldj); break; case HENON: hp->i = oldj + hp->a - hp->b * oldi * oldi; hp->j = hp->c * oldi; break; case SQRT: if (k) { hp->j = hp->a + hp->i; hp->i = -oldj + (hp->i < 0 ? sqrt(fabs(hp->b * (hp->i - hp->c))) : -sqrt(fabs(hp->b * (hp->i - hp->c)))); } else { hp->i = (hp->sqrt_sign ? 1 : -1) * hp->inc * hp->maxx / cycles / 2; hp->j = hp->a + hp->i; hp->sqrt_sign = !hp->sqrt_sign; } break; case STANDARD: if (k) { hp->j = (1 - hp->a) * oldj + hp->b * sin(oldi) + hp->a * hp->c; hp->j = fmod(hp->j + 2 * M_PI, 2 * M_PI); hp->i = oldi + hp->j; hp->i = fmod(hp->i + 2 * M_PI, 2 * M_PI); } else { hp->j = M_PI + fmod((hp->std_sign ? 1 : -1) * hp->inc * 2 * M_PI / (cycles - 0.5), M_PI); hp->i = M_PI; hp->std_sign = !hp->std_sign; } break; case BIRDIE: hp->j = oldi; hp->i = (1 - hp->c) * cos(M_PI * hp->a * oldj) + hp->c * hp->b; hp->b = oldj; break; case TRIG: { double r2 = oldi * oldi + oldj * oldj; hp->i = hp->a + hp->b * (oldi * cos(r2) - oldj * sin(r2)); hp->j = hp->b * (oldj * cos(r2) + oldi * sin(r2)); } break; case CUBIC: hp->i = oldj; hp->j = hp->a * oldj - oldj * oldj * oldj - hp->b * oldi; break; case AILUJ: hp->i = ((LRAND() < MAXRAND / 2) ? -1 : 1) * sqrt(((oldi - hp->a) + sqrt((oldi - hp->a) * (oldi - hp->a) + (oldj - hp->b) * (oldj - hp->b))) / 2); if (hp->i < 0.00000001 && hp->i > -0.00000001) hp->i = (hp->i > 0.0) ? 0.00000001 : -0.00000001; hp->j = (oldj - hp->b) / (2 * hp->i); break; } xp->x = hp->maxx / 2 + (int) ((hp->i - hp->ic) * hp->is); xp->y = hp->maxy / 2 - (int) ((hp->j - hp->jc) * hp->js); xp++; } XDrawPoints(dsp, win, gc, hp->pointBuffer, count, CoordModeOrigin); } ENTRYPOINT void draw_discrete (ModeInfo * mi) { discretestruct *hp = &discretes[MI_SCREEN(mi)]; int cycles = MI_CYCLES(mi); int i; if (hp->eraser) { hp->eraser = erase_window (MI_DISPLAY(mi), MI_WINDOW(mi), hp->eraser); return; } for (i = 0; i < 10; i++) { draw_discrete_1 (mi); hp->count++; } if (hp->count > cycles) { hp->eraser = erase_window (MI_DISPLAY(mi), MI_WINDOW(mi), hp->eraser); init_discrete(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) { if (discretes != NULL) { int screen; for (screen = 0; screen < MI_NUM_SCREENS(mi); screen++) { discretestruct *hp = &discretes[screen]; if (hp->pointBuffer != NULL) { (void) free((void *) hp->pointBuffer); /* hp->pointBuffer = NULL; */ } } (void) free((void *) discretes); discretes = (discretestruct *) NULL; } } ENTRYPOINT void refresh_discrete(ModeInfo * mi) { MI_CLEARWINDOW(mi); } ENTRYPOINT Bool discrete_handle_event (ModeInfo *mi, XEvent *event) { discretestruct *hp = &discretes[MI_SCREEN(mi)]; if (screenhack_event_helper (MI_DISPLAY(mi), MI_WINDOW(mi), event)) { hp->count = MI_CYCLES(mi); return True; } return False; } XSCREENSAVER_MODULE ("Discrete", discrete) #endif /* MODE_discrete */ xscreensaver-5.36/hacks/distort.c000644 000767 000024 00000067177 12732127720 017110 0ustar00jwzstaff000000 000000 /* -*- mode: C; tab-width: 4 -*- * xscreensaver, Copyright (c) 1992-2014 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. */ /* distort * by Jonas Munsin (jmunsin@iki.fi) and Jamie Zawinski * TODO: * -check the allocations in init_round_lense again, maybe make it possible again * to use swamp without pre-allocating/calculating (although that * makes it slower) - -swamp is memory hungry * -more distortion matrices (fortunately, I'm out of ideas :) * Stuff that would be cool but probably too much of a resource hog: * -some kind of interpolation to avoid jaggies * -large speed values leaves the image distorted * program idea borrowed from a screensaver on a non-*NIX OS, * * 28 Sep 1999 Jonas Munsin (jmunsin@iki.fi) * Added about 10x faster algortim for 8, 16 and 32 bpp (modifies pixels * directly avoiding costly XPutPixle(XGetPixel()) calls, inspired by * xwhirl made by horvai@clipper.ens.fr (Peter Horvai) and the XFree86 * Xlib sources. * This piece of code is really horrible, but it works, and at the moment * I don't have time or inspiration to fix something that works (knock * on wood). * 08 Oct 1999 Jonas Munsin (jmunsin@iki.fi) * Corrected several bugs causing references beyond allocated memory. */ #include #include #include "screenhack.h" /*#include */ #ifdef HAVE_XSHM_EXTENSION # include "xshm.h" #endif /* HAVE_XSHM_EXTENSION */ #define CARD32 unsigned int #define CARD16 unsigned short #define CARD8 unsigned char struct coo { int x; int y; int r, r_change; int xmove, ymove; }; struct state { Display *dpy; Window window; struct coo xy_coo[10]; int delay, radius, speed, number, blackhole, vortex, magnify, reflect, slow; int duration; time_t start_time; XWindowAttributes xgwa; GC gc; unsigned long black_pixel; XImage *orig_map, *buffer_map; unsigned long *buffer_map_cache; int ***from; int ****from_array; int *fast_from; int bpp_size; #ifdef HAVE_XSHM_EXTENSION Bool use_shm; XShmSegmentInfo shm_info; #endif /* HAVE_XSHM_EXTENSION */ void (*effect) (struct state *, int); void (*draw) (struct state *, int); void (*draw_routine) (struct state *st, XImage *, XImage *, int, int, int *); async_load_state *img_loader; Pixmap pm; }; static void move_lense(struct state *, int); static void swamp_thing(struct state *, int); static void new_rnd_coo(struct state *, int); static void init_round_lense(struct state *st); static void reflect_draw(struct state *, int); static void plain_draw(struct state *, int); static void fast_draw_8 (struct state *st, XImage *, XImage *, int, int, int *); static void fast_draw_16(struct state *st, XImage *, XImage *, int, int, int *); static void fast_draw_32(struct state *st, XImage *, XImage *, int, int, int *); static void generic_draw(struct state *st, XImage *, XImage *, int, int, int *); static void distort_finish_loading (struct state *); static void distort_reset (struct state *st) { char *s; int i; st->start_time = 0; XGetWindowAttributes (st->dpy, st->window, &st->xgwa); st->delay = get_integer_resource(st->dpy, "delay", "Integer"); st->duration = get_integer_resource (st->dpy, "duration", "Seconds"); st->radius = get_integer_resource(st->dpy, "radius", "Integer"); st->speed = get_integer_resource(st->dpy, "speed", "Integer"); st->number = get_integer_resource(st->dpy, "number", "Integer"); st->blackhole = get_boolean_resource(st->dpy, "blackhole", "Boolean"); st->vortex = get_boolean_resource(st->dpy, "vortex", "Boolean"); st->magnify = get_boolean_resource(st->dpy, "magnify", "Boolean"); st->reflect = get_boolean_resource(st->dpy, "reflect", "Boolean"); st->slow = get_boolean_resource(st->dpy, "slow", "Boolean"); if (st->delay < 0) st->delay = 0; if (st->duration < 1) st->duration = 1; st->effect = NULL; s = get_string_resource(st->dpy, "effect", "String"); if (s && !strcasecmp(s,"swamp")) st->effect = &swamp_thing; else if (s && !strcasecmp(s,"bounce")) st->effect = &move_lense; else if (s && !strcasecmp(s,"none")) ; else if (s && *s) fprintf(stderr,"%s: bogus effect: %s\n", progname, s); if (st->effect == NULL && st->radius == 0 && st->speed == 0 && st->number == 0 && !st->blackhole && !st->vortex && !st->magnify && !st->reflect) { /* if no cmdline options are given, randomly choose one of: * -radius 125 -number 4 -speed 1 -bounce * -radius 125 -number 4 -speed 1 -blackhole * -radius 125 -number 4 -speed 1 -vortex * -radius 125 -number 4 -speed 1 -vortex -magnify * -radius 125 -number 4 -speed 1 -vortex -magnify -blackhole * -radius 250 -number 1 -speed 2 -bounce * -radius 250 -number 1 -speed 2 -blackhole * -radius 250 -number 1 -speed 2 -vortex * -radius 250 -number 1 -speed 2 -vortex -magnify * -radius 250 -number 1 -speed 2 -vortex -magnify -blackhole * -radius 80 -number 1 -speed 2 -reflect * -radius 125 -number 3 -speed 2 -reflect * jwz: not these * -radius 125 -number 4 -speed 2 -swamp * -radius 125 -number 4 -speed 2 -swamp -blackhole * -radius 125 -number 4 -speed 2 -swamp -vortex * -radius 125 -number 4 -speed 2 -swamp -vortex -magnify * -radius 125 -number 4 -speed 2 -swamp -vortex -magnify -blackhole */ i = (random() % 12 /* 17 */); st->draw = &plain_draw; switch (i) { case 0: st->radius=125;st->number=4;st->speed=1; st->effect=&move_lense;break; case 1: st->radius=125;st->number=4;st->speed=1;st->blackhole=1; st->effect=&move_lense;break; case 2: st->radius=125;st->number=4;st->speed=1;st->vortex=1; st->effect=&move_lense;break; case 3: st->radius=125;st->number=4;st->speed=1;st->vortex=1;st->magnify=1; st->effect=&move_lense;break; case 4: st->radius=125;st->number=4;st->speed=1;st->vortex=1;st->magnify=1;st->blackhole=1; st->effect=&move_lense;break; case 5: st->radius=250;st->number=1;st->speed=2; st->effect=&move_lense;break; case 6: st->radius=250;st->number=1;st->speed=2;st->blackhole=1; st->effect=&move_lense;break; case 7: st->radius=250;st->number=1;st->speed=2;st->vortex=1; st->effect=&move_lense;break; case 8: st->radius=250;st->number=1;st->speed=2;st->vortex=1;st->magnify=1; st->effect=&move_lense;break; case 9: st->radius=250;st->number=1;st->speed=2;st->vortex=1;st->magnify=1;st->blackhole=1; st->effect=&move_lense;break; case 10: st->radius=80;st->number=1;st->speed=2;st->reflect=1; st->draw = &reflect_draw;st->effect = &move_lense;break; case 11: st->radius=125;st->number=4;st->speed=2;st->reflect=1; st->draw = &reflect_draw;st->effect = &move_lense;break; #if 0 /* jwz: not these */ case 12: st->radius=125;st->number=4;st->speed=2; effect=&swamp_thing;break; case 13: st->radius=125;st->number=4;st->speed=2;st->blackhole=1; effect=&swamp_thing;break; case 14: st->radius=125;st->number=4;st->speed=2;st->vortex=1; effect=&swamp_thing;break; case 15: st->radius=125;st->number=4;st->speed=2;st->vortex=1;st->magnify=1; effect=&swamp_thing;break; case 16: st->radius=125;st->number=4;st->speed=2;st->vortex=1;st->magnify=1;st->blackhole=1; effect=&swamp_thing;break; #endif default: abort(); break; } } /* never allow the radius to be too close to the min window dimension */ if (st->radius > st->xgwa.width * 0.3) st->radius = st->xgwa.width * 0.3; if (st->radius > st->xgwa.height * 0.3) st->radius = st->xgwa.height * 0.3; /* -swamp mode consumes vast amounts of memory, proportional to radius -- so throttle radius to a small-ish value (60 => ~30MB.) */ if (st->effect == &swamp_thing && st->radius > 60) st->radius = 60; if (st->delay < 0) st->delay = 0; if (st->radius <= 0) st->radius = 60; if (st->speed <= 0) st->speed = 2; if (st->number <= 0) st->number=1; if (st->number >= 10) st->number=1; if (st->effect == NULL) st->effect = &move_lense; if (st->reflect) { st->draw = &reflect_draw; st->effect = &move_lense; } if (st->draw == NULL) st->draw = &plain_draw; } static void * distort_init (Display *dpy, Window window) { struct state *st = (struct state *) calloc (1, sizeof(*st)); XGCValues gcv; long gcflags; st->dpy = dpy; st->window = window; #ifdef HAVE_XSHM_EXTENSION st->use_shm = get_boolean_resource(st->dpy, "useSHM", "Boolean"); #endif /* HAVE_XSHM_EXTENSION */ distort_reset (st); st->black_pixel = BlackPixelOfScreen( st->xgwa.screen ); gcv.function = GXcopy; gcv.subwindow_mode = IncludeInferiors; gcflags = GCFunction; if (use_subwindow_mode_p(st->xgwa.screen, st->window)) /* see grabscreen.c */ gcflags |= GCSubwindowMode; st->gc = XCreateGC (st->dpy, st->window, gcflags, &gcv); /* On MacOS X11, XGetImage on a Window often gets an inexplicable BadMatch, possibly due to the window manager having occluded something? It seems nondeterministic. Loading the image into a pixmap instead fixes it. */ if (st->pm) XFreePixmap (st->dpy, st->pm); st->pm = XCreatePixmap (st->dpy, st->window, st->xgwa.width, st->xgwa.height, st->xgwa.depth); st->img_loader = load_image_async_simple (0, st->xgwa.screen, st->window, st->pm, 0, 0); st->start_time = time ((time_t *) 0); return st; } static void distort_finish_loading (struct state *st) { int i; st->start_time = time ((time_t *) 0); st->buffer_map = 0; if (! st->pm) abort(); XClearWindow (st->dpy, st->window); XCopyArea (st->dpy, st->pm, st->window, st->gc, 0, 0, st->xgwa.width, st->xgwa.height, 0, 0); st->orig_map = XGetImage(st->dpy, st->pm, 0, 0, st->xgwa.width, st->xgwa.height, ~0L, ZPixmap); st->buffer_map_cache = malloc(sizeof(unsigned long)*(2*st->radius+st->speed+2)*(2*st->radius+st->speed+2)); if (st->buffer_map_cache == NULL) { perror("distort"); exit(EXIT_FAILURE); } # ifdef HAVE_XSHM_EXTENSION if (st->use_shm) { st->buffer_map = create_xshm_image(st->dpy, st->xgwa.visual, st->orig_map->depth, ZPixmap, 0, &st->shm_info, 2*st->radius + st->speed + 2, 2*st->radius + st->speed + 2); if (!st->buffer_map) st->use_shm = False; } # endif /* HAVE_XSHM_EXTENSION */ if (!st->buffer_map) { st->buffer_map = XCreateImage(st->dpy, st->xgwa.visual, st->orig_map->depth, ZPixmap, 0, 0, 2*st->radius + st->speed + 2, 2*st->radius + st->speed + 2, 8, 0); st->buffer_map->data = (char *) calloc(st->buffer_map->height, st->buffer_map->bytes_per_line); } if ((st->buffer_map->byte_order == st->orig_map->byte_order) && (st->buffer_map->depth == st->orig_map->depth) && (st->buffer_map->format == ZPixmap) && (st->orig_map->format == ZPixmap) && !st->slow) { switch (st->orig_map->bits_per_pixel) { case 32: st->draw_routine = &fast_draw_32; st->bpp_size = sizeof(CARD32); break; case 16: st->draw_routine = &fast_draw_16; st->bpp_size = sizeof(CARD16); break; case 8: st->draw_routine = &fast_draw_8; st->bpp_size = sizeof(CARD8); break; default: st->draw_routine = &generic_draw; break; } } else { st->draw_routine = &generic_draw; } init_round_lense(st); for (i = 0; i < st->number; i++) { new_rnd_coo(st,i); if (st->number != 1) st->xy_coo[i].r = (i*st->radius)/(st->number-1); /* "randomize" initial */ else st->xy_coo[i].r = 0; st->xy_coo[i].r_change = st->speed + (i%2)*2*(-st->speed); /* values a bit */ st->xy_coo[i].xmove = st->speed + (i%2)*2*(-st->speed); st->xy_coo[i].ymove = st->speed + (i%2)*2*(-st->speed); } } /* example: initializes a "see-trough" matrix */ /* static void make_null_lense(struct state *st) { int i, j; for (i = 0; i < 2*radius+speed+2; i++) { for (j = 0 ; j < 2*radius+speed+2 ; j++) { from[i][j][0]=i; from[i][j][1]=j; } } } */ static void convert(struct state *st) { int *p; int i, j; st->fast_from = calloc(1, sizeof(int)*((st->buffer_map->bytes_per_line/st->bpp_size)*(2*st->radius+st->speed+2) + 2*st->radius+st->speed+2)); if (st->fast_from == NULL) { perror("distort"); exit(EXIT_FAILURE); } p = st->fast_from; for (i = 0; i < 2*st->radius+st->speed+2; i++) { for (j = 0; j < 2*st->radius+st->speed+2; j++) { *(p + i + j*st->buffer_map->bytes_per_line/st->bpp_size) = st->from[i][j][0] + st->xgwa.width*st->from[i][j][1]; if (*(p + i + j*st->buffer_map->bytes_per_line/st->bpp_size) < 0 || *(p + i + j*st->buffer_map->bytes_per_line/st->bpp_size) >= st->orig_map->height*st->orig_map->width) { *(p + i + j*st->buffer_map->bytes_per_line/st->bpp_size) = 0; } } } } /* makes a lense with the Radius=loop and centred in * the point (radius, radius) */ static void make_round_lense(struct state *st, int radius, int loop) { int i, j; for (i = 0; i < 2*radius+st->speed+2; i++) { for(j = 0; j < ((0 == st->bpp_size) ? (2*radius+st->speed+2) : (st->buffer_map->bytes_per_line/st->bpp_size)); j++) { double r, d; r = sqrt ((i-radius)*(i-radius)+(j-radius)*(j-radius)); if (loop == 0) d=0.0; else d=r/loop; if (r < loop-1) { if (st->vortex) { /* vortex-twist effect */ double angle; /* this one-line formula for getting a nice rotation angle is borrowed * (with permission) from the whirl plugin for gimp, * Copyright (C) 1996 Federico Mena Quintero */ /* 5 is just a constant used because it looks good :) */ angle = 5*(1-d)*(1-d); /* Avoid atan2: DOMAIN error message */ if ((radius-j) == 0.0 && (radius-i) == 0.0) { st->from[i][j][0] = radius + cos(angle)*r; st->from[i][j][1] = radius + sin(angle)*r; } else { st->from[i][j][0] = radius + cos(angle - atan2(radius-j, -(radius-i)))*r; st->from[i][j][1] = radius + sin(angle - atan2(radius-j, -(radius-i)))*r; } if (st->magnify) { r = sin(d*M_PI_2); if (st->blackhole && r != 0) /* blackhole effect */ r = 1/r; st->from[i][j][0] = radius + (st->from[i][j][0]-radius)*r; st->from[i][j][1] = radius + (st->from[i][j][1]-radius)*r; } } else { /* default is to magnify */ r = sin(d*M_PI_2); /* raising r to different power here gives different amounts of * distortion, a negative value sucks everything into a black hole */ /* r = r*r; */ if (st->blackhole && r != 0) /* blackhole effect */ r = 1/r; /* bubble effect (and blackhole) */ st->from[i][j][0] = radius + (i-radius)*r; st->from[i][j][1] = radius + (j-radius)*r; } } else { /* not inside loop */ st->from[i][j][0] = i; st->from[i][j][1] = j; } } } /* this is really just a quick hack to keep both the compability mode with all depths and still * allow the custom optimized draw routines with the minimum amount of work */ if (0 != st->bpp_size) { convert(st); } } #ifndef EXIT_FAILURE # define EXIT_FAILURE -1 #endif static void allocate_lense(struct state *st) { int i, j; int s = ((0 != st->bpp_size) ? (st->buffer_map->bytes_per_line/st->bpp_size) : (2*st->radius+st->speed+2)); /* maybe this should be redone so that from[][][] is in one block; * then pointers could be used instead of arrays in some places (and * maybe give a speedup - maybe also consume less memory) */ st->from = (int ***)malloc(s*sizeof(int **)); if (st->from == NULL) { perror("distort"); exit(EXIT_FAILURE); } for (i = 0; i < s; i++) { st->from[i] = (int **)malloc((2*st->radius+st->speed+2) * sizeof(int *)); if (st->from[i] == NULL) { perror("distort"); exit(EXIT_FAILURE); } for (j = 0; j < s; j++) { st->from[i][j] = (int *)malloc(2 * sizeof(int)); if (st->from[i][j] == NULL) { perror("distort"); exit(EXIT_FAILURE); } } } } /* from_array in an array containing precalculated from matrices, * this is a double faced mem vs speed trade, it's faster, but eats * _a lot_ of mem for large radius (is there a bug here? I can't see it) */ static void init_round_lense(struct state *st) { int k; if (st->effect == &swamp_thing) { st->from_array = (int ****)malloc((st->radius+1)*sizeof(int ***)); for (k=0; k <= st->radius; k++) { allocate_lense(st); make_round_lense(st, st->radius, k); st->from_array[k] = st->from; } } else { /* just allocate one from[][][] */ allocate_lense(st); make_round_lense(st, st->radius,st->radius); } } /* If fast_draw_8, fast_draw_16 or fast_draw_32 are to be used, the following properties * of the src and dest XImages must hold (otherwise the generic, slooow, method provided * by X is to be used): * src->byte_order == dest->byte_order * src->format == ZPixmap && dest->format == ZPixmap * src->depth == dest->depth == the depth the function in question asumes * x and y is the coordinates in src from where to cut out the image from, * distort_matrix is a precalculated array of how to distort the matrix */ static void fast_draw_8(struct state *st, XImage *src, XImage *dest, int x, int y, int *distort_matrix) { CARD8 *u = (CARD8 *)dest->data; CARD8 *t = (CARD8 *)src->data + x + y*src->bytes_per_line/sizeof(CARD8); while (u < (CARD8 *)(dest->data + sizeof(CARD8)*dest->height *dest->bytes_per_line/sizeof(CARD8))) { *u++ = t[*distort_matrix++]; } } static void fast_draw_16(struct state *st, XImage *src, XImage *dest, int x, int y, int *distort_matrix) { CARD16 *u = (CARD16 *)dest->data; CARD16 *t = (CARD16 *)src->data + x + y*src->bytes_per_line/sizeof(CARD16); while (u < (CARD16 *)(dest->data + sizeof(CARD16)*dest->height *dest->bytes_per_line/sizeof(CARD16))) { *u++ = t[*distort_matrix++]; } } static void fast_draw_32(struct state *st, XImage *src, XImage *dest, int x, int y, int *distort_matrix) { CARD32 *u = (CARD32 *)dest->data; CARD32 *t = (CARD32 *)src->data + x + y*src->bytes_per_line/sizeof(CARD32); while (u < (CARD32 *)(dest->data + sizeof(CARD32)*dest->height *dest->bytes_per_line/sizeof(CARD32))) { *u++ = t[*distort_matrix++]; } } static void generic_draw(struct state *st, XImage *src, XImage *dest, int x, int y, int *distort_matrix) { int i, j; for (i = 0; i < dest->width; i++) for (j = 0; j < dest->height; j++) if (st->from[i][j][0] + x >= 0 && st->from[i][j][0] + x < src->width && st->from[i][j][1] + y >= 0 && st->from[i][j][1] + y < src->height) XPutPixel(dest, i, j, XGetPixel(src, st->from[i][j][0] + x, st->from[i][j][1] + y)); } /* generate an XImage of from[][][] and draw it on the screen */ static void plain_draw(struct state *st, int k) { if (st->xy_coo[k].x+2*st->radius+st->speed+2 > st->orig_map->width || st->xy_coo[k].y+2*st->radius+st->speed+2 > st->orig_map->height) return; st->draw_routine(st, st->orig_map, st->buffer_map, st->xy_coo[k].x, st->xy_coo[k].y, st->fast_from); # ifdef HAVE_XSHM_EXTENSION if (st->use_shm) XShmPutImage(st->dpy, st->window, st->gc, st->buffer_map, 0, 0, st->xy_coo[k].x, st->xy_coo[k].y, 2*st->radius+st->speed+2, 2*st->radius+st->speed+2, False); else if (!st->use_shm) # endif XPutImage(st->dpy, st->window, st->gc, st->buffer_map, 0, 0, st->xy_coo[k].x, st->xy_coo[k].y, 2*st->radius+st->speed+2, 2*st->radius+st->speed+2); } /* generate an XImage from the reflect algoritm submitted by * Randy Zack * draw really got too big and ugly so I split it up * it should be possible to use the from[][] to speed it up * (once I figure out the algorithm used :) */ static void reflect_draw(struct state *st, int k) { int i, j; int cx, cy; int ly, lysq, lx, ny, dist, rsq = st->radius * st->radius; cx = cy = st->radius; if (st->xy_coo[k].ymove > 0) cy += st->speed; if (st->xy_coo[k].xmove > 0) cx += st->speed; for(i = 0 ; i < 2*st->radius+st->speed+2; i++) { ly = i - cy; lysq = ly * ly; ny = st->xy_coo[k].y + i; if (ny >= st->orig_map->height) ny = st->orig_map->height-1; for(j = 0 ; j < 2*st->radius+st->speed+2 ; j++) { lx = j - cx; dist = lx * lx + lysq; if (dist > rsq || ly < -st->radius || ly > st->radius || lx < -st->radius || lx > st->radius) XPutPixel( st->buffer_map, j, i, XGetPixel( st->orig_map, st->xy_coo[k].x + j, ny )); else if (dist == 0) XPutPixel( st->buffer_map, j, i, st->black_pixel ); else { int x = st->xy_coo[k].x + cx + (lx * rsq / dist); int y = st->xy_coo[k].y + cy + (ly * rsq / dist); if (x < 0 || x >= st->xgwa.width || y < 0 || y >= st->xgwa.height) XPutPixel( st->buffer_map, j, i, st->black_pixel ); else XPutPixel( st->buffer_map, j, i, XGetPixel( st->orig_map, x, y )); } } } XPutImage(st->dpy, st->window, st->gc, st->buffer_map, 0, 0, st->xy_coo[k].x, st->xy_coo[k].y, 2*st->radius+st->speed+2, 2*st->radius+st->speed+2); } /* create a new, random coordinate, that won't interfer with any other * coordinates, as the drawing routines would be significantly slowed * down if they were to handle serveral layers of distortions */ static void new_rnd_coo(struct state *st, int k) { int i; int loop = 0; st->xy_coo[k].x = (random() % (st->xgwa.width-2*st->radius)); st->xy_coo[k].y = (random() % (st->xgwa.height-2*st->radius)); for (i = 0; i < st->number; i++) { if (i != k) { if ((abs(st->xy_coo[k].x - st->xy_coo[i].x) <= 2*st->radius+st->speed+2) && (abs(st->xy_coo[k].y - st->xy_coo[i].y) <= 2*st->radius+st->speed+2)) { st->xy_coo[k].x = (random() % (st->xgwa.width-2*st->radius)); st->xy_coo[k].y = (random() % (st->xgwa.height-2*st->radius)); i=-1; /* ugly */ } } if (loop++ > 1000) return; /* let's not get stuck */ } } /* move lens and handle bounces with walls and other lenses */ static void move_lense(struct state *st, int k) { int i; if (st->xy_coo[k].x + 2*st->radius + st->speed + 2 >= st->xgwa.width) st->xy_coo[k].xmove = -abs(st->xy_coo[k].xmove); if (st->xy_coo[k].x <= st->speed) st->xy_coo[k].xmove = abs(st->xy_coo[k].xmove); if (st->xy_coo[k].y + 2*st->radius + st->speed + 2 >= st->xgwa.height) st->xy_coo[k].ymove = -abs(st->xy_coo[k].ymove); if (st->xy_coo[k].y <= st->speed) st->xy_coo[k].ymove = abs(st->xy_coo[k].ymove); st->xy_coo[k].x = st->xy_coo[k].x + st->xy_coo[k].xmove; st->xy_coo[k].y = st->xy_coo[k].y + st->xy_coo[k].ymove; /* bounce against othe lenses */ for (i = 0; i < st->number; i++) { if ((i != k) /* This commented test is for rectangular lenses (not currently used) and * the one used is for circular ones && (abs(xy_coo[k].x - xy_coo[i].x) <= 2*radius) && (abs(xy_coo[k].y - xy_coo[i].y) <= 2*radius)) { */ && ((st->xy_coo[k].x - st->xy_coo[i].x)*(st->xy_coo[k].x - st->xy_coo[i].x) + (st->xy_coo[k].y - st->xy_coo[i].y)*(st->xy_coo[k].y - st->xy_coo[i].y) <= 2*st->radius*2*st->radius)) { int x, y; x = st->xy_coo[k].xmove; y = st->xy_coo[k].ymove; st->xy_coo[k].xmove = st->xy_coo[i].xmove; st->xy_coo[k].ymove = st->xy_coo[i].ymove; st->xy_coo[i].xmove = x; st->xy_coo[i].ymove = y; } } } /* make xy_coo[k] grow/shrink */ static void swamp_thing(struct state *st, int k) { if (st->xy_coo[k].r >= st->radius) st->xy_coo[k].r_change = -abs(st->xy_coo[k].r_change); if (st->xy_coo[k].r <= 0) { st->from = st->from_array[0]; st->draw(st,k); st->xy_coo[k].r_change = abs(st->xy_coo[k].r_change); new_rnd_coo(st,k); st->xy_coo[k].r=st->xy_coo[k].r_change; return; } st->xy_coo[k].r = st->xy_coo[k].r + st->xy_coo[k].r_change; if (st->xy_coo[k].r >= st->radius) st->xy_coo[k].r = st->radius; if (st->xy_coo[k].r <= 0) st->xy_coo[k].r=0; st->from = st->from_array[st->xy_coo[k].r]; } static unsigned long distort_draw (Display *dpy, Window window, void *closure) { struct state *st = (struct state *) closure; int k; if (st->img_loader) /* still loading */ { st->img_loader = load_image_async_simple (st->img_loader, 0, 0, 0, 0, 0); if (! st->img_loader) { /* just finished */ distort_finish_loading (st); } return st->delay; } if (!st->img_loader && st->start_time + st->duration < time ((time_t *) 0)) { if (st->pm) XFreePixmap (st->dpy, st->pm); st->pm = XCreatePixmap (st->dpy, st->window, st->xgwa.width, st->xgwa.height, st->xgwa.depth); st->img_loader = load_image_async_simple (0, st->xgwa.screen, st->window, st->pm, 0, 0); return st->delay; } for (k = 0; k < st->number; k++) { st->effect(st,k); st->draw(st,k); } return st->delay; } 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? */ if (st->orig_map) /* created in distort_finish_loading, might be early */ XPutImage (st->dpy, st->window, st->gc, st->orig_map, 0, 0, st->orig_map->width, st->orig_map->height, 0, 0); } static Bool distort_event (Display *dpy, Window window, void *closure, XEvent *event) { struct state *st = (struct state *) closure; if (screenhack_event_helper (dpy, window, event)) { distort_reset(st); return True; } return False; } static void distort_free (Display *dpy, Window window, void *closure) { struct state *st = (struct state *) closure; XFreeGC (st->dpy, st->gc); if (st->pm) XFreePixmap (dpy, st->pm); if (st->orig_map) XDestroyImage (st->orig_map); if (st->buffer_map) XDestroyImage (st->buffer_map); if (st->from) free (st->from); if (st->fast_from) free (st->fast_from); if (st->from_array) free (st->from_array); free (st); } static const char *distort_defaults [] = { "*dontClearRoot: True", "*background: Black", "*fpsSolid: true", #ifdef __sgi /* really, HAVE_READ_DISPLAY_EXTENSION */ "*visualID: Best", #endif "*delay: 20000", "*duration: 120", "*radius: 0", "*speed: 0", "*number: 0", "*slow: False", "*vortex: False", "*magnify: False", "*reflect: False", "*blackhole: False", "*effect: none", #ifdef HAVE_XSHM_EXTENSION "*useSHM: False", /* xshm turns out not to help. */ #endif /* HAVE_XSHM_EXTENSION */ #ifdef HAVE_MOBILE "*ignoreRotation: True", "*rotateImages: True", #endif 0 }; static XrmOptionDescRec distort_options [] = { { "-delay", ".delay", XrmoptionSepArg, 0 }, { "-duration", ".duration", XrmoptionSepArg, 0 }, { "-radius", ".radius", XrmoptionSepArg, 0 }, { "-speed", ".speed", XrmoptionSepArg, 0 }, { "-number", ".number", XrmoptionSepArg, 0 }, { "-effect", ".effect", XrmoptionSepArg, 0 }, { "-swamp", ".effect", XrmoptionNoArg, "swamp" }, { "-bounce", ".effect", XrmoptionNoArg, "bounce" }, { "-reflect", ".reflect", XrmoptionNoArg, "True" }, { "-vortex", ".vortex", XrmoptionNoArg, "True" }, { "-magnify", ".magnify", XrmoptionNoArg, "True" }, { "-blackhole", ".blackhole", XrmoptionNoArg, "True" }, { "-slow", ".slow", XrmoptionNoArg, "True" }, #ifdef HAVE_XSHM_EXTENSION { "-shm", ".useSHM", XrmoptionNoArg, "True" }, { "-no-shm", ".useSHM", XrmoptionNoArg, "False" }, #endif /* HAVE_XSHM_EXTENSION */ { 0, 0, 0, 0 } }; XSCREENSAVER_MODULE ("Distort", distort) xscreensaver-5.36/hacks/kumppa.c000644 000767 000024 00000034113 12710314513 016667 0ustar00jwzstaff000000 000000 /* Copyright (C) Teemu Suutari (temisu@utu.fi) Feb 1998 Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. Except as contained in this notice, the name of the X Consortium shall not be used in advertising or otherwise to promote the sale, use or other dealings in this Software without prior written authorization from the X Consortium. */ /* *** This is contest-version. Don't look any further, code is *very* ugly. */ #include #include "screenhack.h" #ifdef HAVE_DOUBLE_BUFFER_EXTENSION # include "xdbe.h" #endif /* HAVE_DOUBLE_BUFFER_EXTENSION */ #undef countof #define countof(x) (sizeof((x))/sizeof((*x))) static const char *kumppa_defaults [] ={ ".background: black", "*fpsSolid: true", "*speed: 0.1", "*delay: 10000", "*random: True", /* leave this off by default, since it slows things down. -- jwz. */ "*useDBE: False", #ifdef HAVE_MOBILE "*ignoreRotation: True", #endif 0 }; static XrmOptionDescRec kumppa_options [] = { {"-delay", ".delay", XrmoptionSepArg, 0 }, {"-speed", ".speed", XrmoptionSepArg, 0 }, {"-random", ".random", XrmoptionNoArg, "True" }, {"-no-random", ".random", XrmoptionNoArg, "False" }, {"-db", ".useDBE", XrmoptionNoArg, "True" }, {"-no-db", ".useDBE", XrmoptionNoArg, "False" }, {0,0,0,0} }; static const unsigned char colors[96]= {0,0,255, 0,51,255, 0,102,255, 0,153,255, 0,204,255, 0,255,255,0,255,204, 0,255,153, 0,255,102, 0,255,51, 0,255,0, 51,255,0, 102,255,0, 153,255,0, 204,255,0, 255,255,0, 255,204,0, 255,153,0, 255,102,0, 255,51,0, 255,0,0, 255,0,51, 255,0,102, 255,0,153, 255,0,204, 255,0,255, 219,0,255, 182,0,255, 146,0,255, 109,0,255, 73,0,255, 37,0,255}; static const float cosinus[8][6]= {{-0.07,0.12,-0.06,32,25,37},{0.08,-0.03,0.05,51,46,32},{0.12,0.07,-0.13,27,45,36}, {0.05,-0.04,-0.07,36,27,39},{-0.02,-0.07,0.1,21,43,42},{-0.11,0.06,0.02,51,25,34},{0.04,-0.15,0.02,42,32,25}, {-0.02,-0.04,-0.13,34,20,15}}; struct state { Display *dpy; Window win[2]; float acosinus[8][3]; int coords[8]; int ocoords[8]; GC fgc[33]; GC cgc; int sizx,sizy; int midx,midy; unsigned long delay; Bool cosilines; int *Xrotations; int *Yrotations; int *Xrottable; int *Yrottable; int *rotateX; int *rotateY; int rotsizeX,rotsizeY; int stateX,stateY; int rx,ry; #ifdef HAVE_DOUBLE_BUFFER_EXTENSION XdbeSwapInfo xdswp; Bool usedouble; #endif /* HAVE_DOUBLE_BUFFER_EXTENSION */ int draw_count; }; static int Satnum(int maxi) { return (int)(maxi*frand(1)); } static void palaRotate(struct state *st, int x,int y) { int ax,ay,bx,by,cx,cy; ax=st->rotateX[x]; ay=st->rotateY[y]; bx=st->rotateX[x+1]+2; by=st->rotateY[y+1]+2; cx=st->rotateX[x]-(y-st->ry)+x-st->rx; cy=st->rotateY[y]+(x-st->rx)+y-st->ry; if (cx<0) { ax-=cx; cx=0; } if (cy<0) { ay-=cy; cy=0; } if (cx+bx-ax>st->sizx) bx=ax-cx+st->sizx; if (cy+by-ay>st->sizy) by=ay-cy+st->sizy; if (axdpy,st->win[0],st->win[1],st->cgc,ax,ay,bx-ax,by-ay,cx,cy); } static void rotate(struct state *st) { int x,y; int dx,dy; st->rx=st->Xrottable[st->stateX+1]-st->Xrottable[st->stateX]; st->ry=st->Yrottable[st->stateY+1]-st->Yrottable[st->stateY]; for (x=0;x<=st->rx;x++) st->rotateX[x]=(x)?st->midx-1-st->Xrotations[st->Xrottable[st->stateX+1]-x]:0; for (x=0;x<=st->rx;x++) st->rotateX[x+st->rx+1]=(x==st->rx)?st->sizx-1:st->midx+st->Xrotations[st->Xrottable[st->stateX]+x]; for (y=0;y<=st->ry;y++) st->rotateY[y]=(y)?st->midy-1-st->Yrotations[st->Yrottable[st->stateY+1]-y]:0; for (y=0;y<=st->ry;y++) st->rotateY[y+st->ry+1]=(y==st->ry)?st->sizy-1:st->midy+st->Yrotations[st->Yrottable[st->stateY]+y]; x=(st->rx>st->ry)?st->rx:st->ry; for (dy=0;dy<(x+1)<<1;dy++) for (dx=0;dx<(x+1)<<1;dx++) { y=(st->rx>st->ry)?st->ry-st->rx:0; if (dy+y>=0 && dy<(st->ry+1)<<1 && dx<(st->rx+1)<<1) if (dy+y+dx<=st->ry+st->rx && dy+y-dx<=st->ry-st->rx) { palaRotate(st, (st->rx<<1)+1-dx,dy+y); palaRotate(st, dx,(st->ry<<1)+1-dy-y); } y=(st->ry>st->rx)?st->rx-st->ry:0; if (dy+y>=0 && dx<(st->ry+1)<<1 && dy<(st->rx+1)<<1) if (dy+y+dx<=st->ry+st->rx && dx-dy-y>=st->ry-st->rx) { palaRotate(st, dy+y,dx); palaRotate(st, (st->rx<<1)+1-dy-y,(st->ry<<1)+1-dx); } } st->stateX++; if (st->stateX==st->rotsizeX) st->stateX=0; st->stateY++; if (st->stateY==st->rotsizeY) st->stateY=0; } static Bool make_rots(struct state *st, double xspeed,double yspeed) { int a,b,c,f,g,j,k=0,l; double m,om,ok; double d,ix,iy; int maxi; Bool *chks; st->rotsizeX=(int)(2/xspeed+1); ix=(double)(st->midx+1)/(double)(st->rotsizeX); st->rotsizeY=(int)(2/yspeed+1); iy=(double)(st->midy+1)/(double)(st->rotsizeY); st->Xrotations=malloc((st->midx+2)*sizeof(unsigned int)); st->Xrottable=malloc((st->rotsizeX+1)*sizeof(unsigned int)); st->Yrotations=malloc((st->midy+2)*sizeof(unsigned int)); st->Yrottable=malloc((st->rotsizeY+1)*sizeof(unsigned int)); chks=malloc(((st->midx>st->midy)?st->midx:st->midy)*sizeof(Bool)); if (!st->Xrottable || !st->Yrottable || !st->Xrotations || !st->Yrotations || !chks) return False; maxi=0; c=0; d=0; g=0; for (a=0;amidx;a++) chks[a]=True; for (a=0;arotsizeX;a++) { st->Xrottable[a]=c; f=(int)(d+ix)-g; /*viivojen lkm.*/ g+=f; if (g>st->midx) { f-=g-st->midx; g=st->midx; } for (b=0;bmidx;j++) /*testi*/ { if (chks[j]) { om=0; ok=1; l=0; while (j+lmidx && om+12*ok>m) { if (j-l>=0) if (chks[j-l]) om+=ok; else; else if (chks[l-j]) om+=ok; if (chks[j+l]) om+=ok; ok/=1.5; l++; } if (om>=m) { k=j; m=om; } } } chks[k]=False; l=c; while (l>=st->Xrottable[a]) { if (l!=st->Xrottable[a]) st->Xrotations[l]=st->Xrotations[l-1]; if (k>st->Xrotations[l] || l==st->Xrottable[a]) { st->Xrotations[l]=k; c++; l=st->Xrottable[a]; } l--; } } d+=ix; if (maxiXrottable[a]) maxi=c-st->Xrottable[a]; } st->Xrottable[a]=c; st->rotateX=malloc((maxi+2)*sizeof(int)<<1); if (!st->rotateX) return False; maxi=0; c=0; d=0; g=0; for (a=0;amidy;a++) chks[a]=True; for (a=0;arotsizeY;a++) { st->Yrottable[a]=c; f=(int)(d+iy)-g; /*viivojen lkm.*/ g+=f; if (g>st->midy) { f-=g-st->midy; g=st->midy; } for (b=0;bmidy;j++) /*testi*/ { if (chks[j]) { om=0; ok=1; l=0; while (j+lmidy && om+12*ok>m) { if (j-l>=0) if (chks[j-l]) om+=ok; else; else if (chks[l-j]) om+=ok; if (chks[j+l]) om+=ok; ok/=1.5; l++; } if (om>=m) { k=j; m=om; } } } chks[k]=False; l=c; while (l>=st->Yrottable[a]) { if (l!=st->Yrottable[a]) st->Yrotations[l]=st->Yrotations[l-1]; if (k>st->Yrotations[l] || l==st->Yrottable[a]) { st->Yrotations[l]=k; c++; l=st->Yrottable[a]; } l--; } } d+=iy; if (maxiYrottable[a]) maxi=c-st->Yrottable[a]; } st->Yrottable[a]=c; st->rotateY=malloc((maxi+2)*sizeof(int)<<1); if (!st->rotateY) return False; free(chks); return (True); } static Bool InitializeAll(struct state *st) { XGCValues xgcv; XWindowAttributes xgwa; /* XSetWindowAttributes xswa;*/ Colormap cmap; XColor color; int n,i; double rspeed; st->cosilines = True; XGetWindowAttributes(st->dpy,st->win[0],&xgwa); cmap=xgwa.colormap; /* xswa.backing_store=Always; XChangeWindowAttributes(st->dpy,st->win[0],CWBackingStore,&xswa);*/ xgcv.function=GXcopy; xgcv.foreground=get_pixel_resource (st->dpy, cmap, "background", "Background"); st->fgc[32]=XCreateGC(st->dpy,st->win[0],GCForeground|GCFunction,&xgcv); n=0; if (mono_p) { st->fgc[0]=st->fgc[32]; xgcv.foreground=get_pixel_resource (st->dpy, cmap, "foreground", "Foreground"); st->fgc[1]=XCreateGC(st->dpy,st->win[0],GCForeground|GCFunction,&xgcv); for (i=0;i<32;i+=2) st->fgc[i]=st->fgc[0]; for (i=1;i<32;i+=2) st->fgc[i]=st->fgc[1]; } else for (i=0;i<32;i++) { color.red=colors[n++]<<8; color.green=colors[n++]<<8; color.blue=colors[n++]<<8; color.flags=DoRed|DoGreen|DoBlue; XAllocColor(st->dpy,cmap,&color); xgcv.foreground=color.pixel; st->fgc[i]=XCreateGC(st->dpy,st->win[0],GCForeground|GCFunction,&xgcv); } st->cgc=XCreateGC(st->dpy,st->win[0],GCForeground|GCFunction,&xgcv); XSetGraphicsExposures(st->dpy,st->cgc,False); st->cosilines = get_boolean_resource(st->dpy, "random","Boolean"); #ifdef HAVE_DOUBLE_BUFFER_EXTENSION if (get_boolean_resource (st->dpy, "useDBE", "Boolean")) st->usedouble = True; st->win[1] = xdbe_get_backbuffer (st->dpy, st->win[0], XdbeUndefined); if (!st->win[1]) { st->usedouble = False; st->win[1] = st->win[0]; } #endif /* HAVE_DOUBLE_BUFFER_EXTENSION */ st->delay=get_integer_resource(st->dpy, "delay","Integer"); rspeed=get_float_resource(st->dpy, "speed","Float"); if (rspeed<0.0001 || rspeed>0.2) { fprintf(stderr,"Speed not in valid range! (0.0001 - 0.2), using 0.1 \n"); rspeed=0.1; } st->sizx=xgwa.width; st->sizy=xgwa.height; st->midx=st->sizx>>1; st->midy=st->sizy>>1; st->stateX=0; st->stateY=0; if (!make_rots(st,rspeed,rspeed)) { fprintf(stderr,"Not enough memory for tables!\n"); return False; } return True; } static void * kumppa_init (Display *d, Window w) { struct state *st = (struct state *) calloc (1, sizeof(*st)); st->dpy=d; st->win[0]=w; if (!InitializeAll(st)) abort(); #ifdef HAVE_DOUBLE_BUFFER_EXTENSION if (st->usedouble) { st->xdswp.swap_action=XdbeUndefined; st->xdswp.swap_window=st->win[0]; } else #endif /* HAVE_DOUBLE_BUFFER_EXTENSION */ st->win[1]=st->win[0]; return st; } static unsigned long kumppa_draw (Display *d, Window w, void *closure) { struct state *st = (struct state *) closure; if (st->cosilines) { int a; st->draw_count++; for (a=0;a<8;a++) { float f=0; int b; for (b=0;b<3;b++) { st->acosinus[a][b]+=cosinus[a][b]; f+=cosinus[a][b+3]*sin((double)st->acosinus[a][b]); } st->coords[a]=(int)f; } for (a=0;a<4;a++) { XDrawLine(st->dpy,st->win[0],(mono_p)?st->fgc[1]:st->fgc[((a<<2)+st->draw_count)&31],st->midx+st->ocoords[a<<1],st->midy+st->ocoords[(a<<1)+1] ,st->midx+st->coords[a<<1],st->midy+st->coords[(a<<1)+1]); st->ocoords[a<<1]=st->coords[a<<1]; st->ocoords[(a<<1)+1]=st->coords[(a<<1)+1]; } } else { int e; for (e=0;e<8;e++) { int a=Satnum(50); int b; if (a>=32) a=32; b=Satnum(32)-16+st->midx; st->draw_count=Satnum(32)-16+st->midy; XFillRectangle(st->dpy,st->win[0],st->fgc[a],b,st->draw_count,2,2); } } XFillRectangle(st->dpy,st->win[0],st->fgc[32],st->midx-2,st->midy-2,4,4); rotate(st); #ifdef HAVE_DOUBLE_BUFFER_EXTENSION if (st->usedouble) XdbeSwapBuffers(st->dpy,&st->xdswp,1); #endif /* HAVE_DOUBLE_BUFFER_EXTENSION */ return st->delay; } static void kumppa_reshape (Display *dpy, Window window, void *closure, unsigned int w, unsigned int h) { struct state *st = (struct state *) closure; st->sizx=w; st->sizy=h; st->midx=st->sizx>>1; st->midy=st->sizy>>1; st->stateX=0; st->stateY=0; } static Bool kumppa_event (Display *dpy, Window window, void *closure, XEvent *event) { return False; } static void kumppa_free (Display *dpy, Window window, void *closure) { struct state *st = (struct state *) closure; int i; for (i = 0; i < countof(st->fgc); i++) if (st->fgc[i]) XFreeGC (dpy, st->fgc[i]); XFreeGC (dpy, st->cgc); free (st->Xrotations); free (st->Yrotations); free (st->Xrottable); free (st->Yrottable); free (st); } XSCREENSAVER_MODULE ("Kumppa", kumppa) xscreensaver-5.36/hacks/demon.c000644 000767 000024 00000065724 12707725477 016535 0ustar00jwzstaff000000 000000 /* -*- Mode: C; tab-width: 4 -*- */ /* demon --- David Griffeath's cellular automata */ #if 0 static const char sccsid[] = "@(#)demon.c 5.00 2000/11/01 xlockmore"; #endif /*- * Copyright (c) 1995 by David Bagley. * * Permission to use, copy, modify, and distribute this software and its * documentation for any purpose and without fee is hereby granted, * provided that the above copyright notice appear in all copies and that * both that copyright notice and this permission notice appear in * supporting documentation. * * This file is provided AS IS with no warranties of any kind. The author * shall have no liability with respect to the infringement of copyrights, * trade secrets or any patents by this file or any part thereof. In no * event will the author be liable for any lost revenue or profits or * other special, indirect and consequential damages. * * Revision History: * 01-Nov-2000: Allocation checks * 10-May-1997: Compatible with xscreensaver * 16-Apr-1997: -neighbors 3, 9 (not sound mathematically), 12, and 8 added * 30-May-1996: Ron Hitchens * Fixed memory management that caused leaks * 14-Apr-1996: -neighbors 6 runtime-time option added * 21-Aug-1995: Coded from A.K. Dewdney's "Computer Recreations", Scientific * American Magazine" Aug 1989 pp 102-105. Also very similar * to hodgepodge machine described in A.K. Dewdney's "Computer * Recreations", Scientific American Magazine" Aug 1988 * pp 104-107. Also used life.c as a guide. */ /*- * A cellular universe of 4 phases debris, droplets, defects, and demons. */ /*- Grid Number of Neighbors ---- ------------------ Square 4 or 8 Hexagon 6 Triangle 3, 9, or 12 */ #ifndef HAVE_JWXYZ # define DO_STIPPLE #endif #ifdef STANDALONE # define MODE_demon # define DEFAULTS "*delay: 50000 \n" \ "*count: 0 \n" \ "*cycles: 1000 \n" \ "*size: -30 \n" \ "*ncolors: 64 \n" \ "*fpsSolid: true \n" \ "*ignoreRotation: True \n" \ # define UNIFORM_COLORS # include "xlockmore.h" /* in xscreensaver distribution */ #else /* STANDALONE */ # include "xlock.h" /* in xlockmore distribution */ #endif /* STANDALONE */ #include "automata.h" #ifdef MODE_demon /*- * neighbors of 0 randomizes it between 3, 4, 6, 8, 9, and 12. */ #define DEF_NEIGHBORS "0" /* choose random value */ static int neighbors; static XrmOptionDescRec opts[] = { {"-neighbors", ".demon.neighbors", XrmoptionSepArg, 0} }; static argtype vars[] = { {&neighbors, "neighbors", "Neighbors", DEF_NEIGHBORS, t_Int} }; static OptionStruct desc[] = { {"-neighbors num", "squares 4 or 8, hexagons 6, triangles 3, 9 or 12"} }; ENTRYPOINT ModeSpecOpt demon_opts = {sizeof opts / sizeof opts[0], opts, sizeof vars / sizeof vars[0], vars, desc}; #ifdef USE_MODULES ModStruct demon_description = {"demon", "init_demon", "draw_demon", "release_demon", "refresh_demon", "init_demon", (char *) NULL, &demon_opts, 50000, 0, 1000, -7, 64, 1.0, "", "Shows Griffeath's cellular automata", 0, NULL}; #endif #define DEMONBITS(n,w,h)\ if ((dp->pixmaps[dp->init_bits]=\ XCreatePixmapFromBitmapData(display,window,(char *)n,w,h,1,0,1))==None){\ free_demon(display,dp); return;} else {dp->init_bits++;} #define REDRAWSTEP 2000 /* How many cells to draw per cycle */ #define MINSTATES 2 #define MINGRIDSIZE 24 #define MINSIZE 4 #define NEIGHBORKINDS 6 /* Singly linked list */ typedef struct _CellList { XPoint pt; struct _CellList *next; } CellList; typedef struct { int generation; int xs, ys; int xb, yb; int nrows, ncols; int width, height; int states; int state; int redrawing, redrawpos; int *ncells; CellList **cellList; unsigned char *oldcell, *newcell; int neighbors; int init_bits; GC stippledGC; Pixmap pixmaps[NUMSTIPPLES - 1]; union { XPoint hexagon[6]; XPoint triangle[2][3]; } shape; } demonstruct; static char plots[2][NEIGHBORKINDS] = { {3, 4, 6, 8, 9, 12}, /* Neighborhoods */ {12, 16, 18, 20, 22, 24} /* Number of states */ }; static demonstruct *demons = (demonstruct *) NULL; static void drawcell(ModeInfo * mi, int col, int row, unsigned char state) { demonstruct *dp = &demons[MI_SCREEN(mi)]; GC gc; if (!state) { XSetForeground(MI_DISPLAY(mi), MI_GC(mi), MI_BLACK_PIXEL(mi)); gc = MI_GC(mi); } else if (MI_NPIXELS(mi) >= NUMSTIPPLES) { XSetForeground(MI_DISPLAY(mi), MI_GC(mi), MI_PIXEL(mi, (((int) state - 1) * MI_NPIXELS(mi) / (dp->states - 1)) % MI_NPIXELS(mi))); gc = MI_GC(mi); } else { XGCValues gcv; #ifdef DO_STIPPLE gcv.stipple = dp->pixmaps[(state - 1) % (NUMSTIPPLES - 1)]; #endif /* DO_STIPPLE */ gcv.foreground = MI_WHITE_PIXEL(mi); gcv.background = MI_BLACK_PIXEL(mi); XChangeGC(MI_DISPLAY(mi), dp->stippledGC, GCStipple | GCForeground | GCBackground, &gcv); gc = dp->stippledGC; } if (dp->neighbors == 6) { int ccol = 2 * col + !(row & 1), crow = 2 * row; dp->shape.hexagon[0].x = dp->xb + ccol * dp->xs; dp->shape.hexagon[0].y = dp->yb + crow * dp->ys; if (dp->xs == 1 && dp->ys == 1) XDrawPoint(MI_DISPLAY(mi), MI_WINDOW(mi), gc, dp->shape.hexagon[0].x, dp->shape.hexagon[0].y); else XFillPolygon(MI_DISPLAY(mi), MI_WINDOW(mi), gc, dp->shape.hexagon, 6, Convex, CoordModePrevious); } else if (dp->neighbors == 4 || dp->neighbors == 8) { XFillRectangle(MI_DISPLAY(mi), MI_WINDOW(mi), gc, dp->xb + dp->xs * col, dp->yb + dp->ys * row, dp->xs - (dp->xs > 3), dp->ys - (dp->ys > 3)); } else { /* TRI */ int orient = (col + row) % 2; /* O left 1 right */ dp->shape.triangle[orient][0].x = dp->xb + col * dp->xs; dp->shape.triangle[orient][0].y = dp->yb + row * dp->ys; if (dp->xs <= 3 || dp->ys <= 3) XDrawPoint(MI_DISPLAY(mi), MI_WINDOW(mi), gc, ((orient) ? -1 : 1) + dp->shape.triangle[orient][0].x, dp->shape.triangle[orient][0].y); else { if (orient) dp->shape.triangle[orient][0].x += (dp->xs / 2 - 1); else dp->shape.triangle[orient][0].x -= (dp->xs / 2 - 1); XFillPolygon(MI_DISPLAY(mi), MI_WINDOW(mi), gc, dp->shape.triangle[orient], 3, Convex, CoordModePrevious); } } } static Bool addtolist(ModeInfo * mi, int col, int row, unsigned char state) { demonstruct *dp = &demons[MI_SCREEN(mi)]; CellList *current; current = dp->cellList[state]; if ((dp->cellList[state] = (CellList *) malloc(sizeof (CellList))) == NULL) { return False; } dp->cellList[state]->pt.x = col; dp->cellList[state]->pt.y = row; dp->cellList[state]->next = current; dp->ncells[state]++; return True; } static void free_state(demonstruct * dp, int state) { CellList *current; while (dp->cellList[state]) { current = dp->cellList[state]; dp->cellList[state] = dp->cellList[state]->next; (void) free((void *) current); } dp->cellList[state] = (CellList *) NULL; if (dp->ncells != NULL) dp->ncells[state] = 0; } static void free_list(demonstruct * dp) { int state; for (state = 0; state < dp->states; state++) free_state(dp, state); (void) free((void *) dp->cellList); dp->cellList = (CellList **) NULL; } static void free_struct(demonstruct * dp) { if (dp->cellList != NULL) { free_list(dp); } if (dp->ncells != NULL) { (void) free((void *) dp->ncells); dp->ncells = (int *) NULL; } if (dp->oldcell != NULL) { (void) free((void *) dp->oldcell); dp->oldcell = (unsigned char *) NULL; } if (dp->newcell != NULL) { (void) free((void *) dp->newcell); dp->newcell = (unsigned char *) NULL; } } static void free_demon(Display *display, demonstruct *dp) { int shade; if (dp->stippledGC != None) { XFreeGC(display, dp->stippledGC); dp->stippledGC = None; } for (shade = 0; shade < dp->init_bits; shade++) { XFreePixmap(display, dp->pixmaps[shade]); } dp->init_bits = 0; free_struct(dp); } static Bool draw_state(ModeInfo * mi, int state) { demonstruct *dp = &demons[MI_SCREEN(mi)]; GC gc; XRectangle *rects; CellList *current; if (!state) { XSetForeground(MI_DISPLAY(mi), MI_GC(mi), MI_BLACK_PIXEL(mi)); gc = MI_GC(mi); } else if (MI_NPIXELS(mi) >= NUMSTIPPLES) { XSetForeground(MI_DISPLAY(mi), MI_GC(mi), MI_PIXEL(mi, (((int) state - 1) * MI_NPIXELS(mi) / (dp->states - 1)) % MI_NPIXELS(mi))); gc = MI_GC(mi); } else { XGCValues gcv; #ifdef DO_STIPPLE gcv.stipple = dp->pixmaps[(state - 1) % (NUMSTIPPLES - 1)]; #endif /* DO_STIPPLE */ gcv.foreground = MI_WHITE_PIXEL(mi); gcv.background = MI_BLACK_PIXEL(mi); XChangeGC(MI_DISPLAY(mi), dp->stippledGC, GCStipple | GCForeground | GCBackground, &gcv); gc = dp->stippledGC; } if (dp->neighbors == 6) { /* Draw right away, slow */ current = dp->cellList[state]; while (current) { int col, row, ccol, crow; col = current->pt.x; row = current->pt.y; ccol = 2 * col + !(row & 1), crow = 2 * row; dp->shape.hexagon[0].x = dp->xb + ccol * dp->xs; dp->shape.hexagon[0].y = dp->yb + crow * dp->ys; if (dp->xs == 1 && dp->ys == 1) XDrawPoint(MI_DISPLAY(mi), MI_WINDOW(mi), gc, dp->shape.hexagon[0].x, dp->shape.hexagon[0].y); else XFillPolygon(MI_DISPLAY(mi), MI_WINDOW(mi), gc, dp->shape.hexagon, 6, Convex, CoordModePrevious); current = current->next; } } else if (dp->neighbors == 4 || dp->neighbors == 8) { /* Take advantage of XDrawRectangles */ int ncells = 0; /* Create Rectangle list from part of the cellList */ if ((rects = (XRectangle *) malloc(dp->ncells[state] * sizeof (XRectangle))) == NULL) { return False; } current = dp->cellList[state]; while (current) { rects[ncells].x = dp->xb + current->pt.x * dp->xs; rects[ncells].y = dp->yb + current->pt.y * dp->ys; rects[ncells].width = dp->xs - (dp->xs > 3); rects[ncells].height = dp->ys - (dp->ys > 3); current = current->next; ncells++; } /* Finally get to draw */ XFillRectangles(MI_DISPLAY(mi), MI_WINDOW(mi), gc, rects, ncells); /* Free up rects list and the appropriate part of the cellList */ (void) free((void *) rects); } else { /* TRI */ current = dp->cellList[state]; while (current) { int col, row, orient; col = current->pt.x; row = current->pt.y; orient = (col + row) % 2; /* O left 1 right */ dp->shape.triangle[orient][0].x = dp->xb + col * dp->xs; dp->shape.triangle[orient][0].y = dp->yb + row * dp->ys; if (dp->xs <= 3 || dp->ys <= 3) XDrawPoint(MI_DISPLAY(mi), MI_WINDOW(mi), gc, ((orient) ? -1 : 1) + dp->shape.triangle[orient][0].x, dp->shape.triangle[orient][0].y); else { if (orient) dp->shape.triangle[orient][0].x += (dp->xs / 2 - 1); else dp->shape.triangle[orient][0].x -= (dp->xs / 2 - 1); XFillPolygon(MI_DISPLAY(mi), MI_WINDOW(mi), gc, dp->shape.triangle[orient], 3, Convex, CoordModePrevious); } current = current->next; } } free_state(dp, state); return True; } static void RandomSoup(ModeInfo * mi) { demonstruct *dp = &demons[MI_SCREEN(mi)]; int row, col, mrow = 0; for (row = 0; row < dp->nrows; ++row) { for (col = 0; col < dp->ncols; ++col) { dp->oldcell[col + mrow] = (unsigned char) LRAND() % ((unsigned char) dp->states); if (!addtolist(mi, col, row, dp->oldcell[col + mrow])) return; /* sparse soup */ } mrow += dp->ncols; } } ENTRYPOINT void init_demon (ModeInfo * mi) { Display *display = MI_DISPLAY(mi); int size = MI_SIZE(mi), nk; demonstruct *dp; if (demons == NULL) { if ((demons = (demonstruct *) calloc(MI_NUM_SCREENS(mi), sizeof (demonstruct))) == NULL) return; } dp = &demons[MI_SCREEN(mi)]; dp->generation = 0; dp->redrawing = 0; #ifdef DO_STIPPLE if (MI_NPIXELS(mi) < NUMSTIPPLES) { Window window = MI_WINDOW(mi); if (dp->stippledGC == None) { XGCValues gcv; gcv.fill_style = FillOpaqueStippled; if ((dp->stippledGC = XCreateGC(display, window, GCFillStyle, &gcv)) == None) { free_demon(display, dp); return; } } if (dp->init_bits == 0) { int i; for (i = 1; i < NUMSTIPPLES; i++) { DEMONBITS(stipples[i], STIPPLESIZE, STIPPLESIZE); } } } #endif /* DO_STIPPLE */ free_struct(dp); #ifdef HAVE_JWXYZ jwxyz_XSetAntiAliasing (MI_DISPLAY(mi), MI_GC(mi), False); #endif for (nk = 0; nk < NEIGHBORKINDS; nk++) { if (neighbors == plots[0][nk]) { dp->neighbors = plots[0][nk]; break; } if (nk == NEIGHBORKINDS - 1) { nk = NRAND(NEIGHBORKINDS); dp->neighbors = plots[0][nk]; break; } } dp->states = MI_COUNT(mi); if (dp->states < -MINSTATES) dp->states = NRAND(-dp->states - MINSTATES + 1) + MINSTATES; else if (dp->states < MINSTATES) dp->states = plots[1][nk]; if ((dp->cellList = (CellList **) calloc(dp->states, sizeof (CellList *))) == NULL) { free_demon(display, dp); return; } if ((dp->ncells = (int *) calloc(dp->states, sizeof (int))) == NULL) { free_demon(display, dp); return; } dp->state = 0; dp->width = MI_WIDTH(mi); dp->height = MI_HEIGHT(mi); if (dp->neighbors == 6) { int nccols, ncrows, i; if (dp->width < 8) dp->width = 8; if (dp->height < 8) dp->height = 8; if (size < -MINSIZE) dp->ys = NRAND(MIN(-size, MAX(MINSIZE, MIN(dp->width, dp->height) / MINGRIDSIZE)) - MINSIZE + 1) + MINSIZE; else if (size < MINSIZE) { if (!size) dp->ys = MAX(MINSIZE, MIN(dp->width, dp->height) / MINGRIDSIZE); else dp->ys = MINSIZE; } else dp->ys = MIN(size, MAX(MINSIZE, MIN(dp->width, dp->height) / MINGRIDSIZE)); dp->xs = dp->ys; nccols = MAX(dp->width / dp->xs - 2, 2); ncrows = MAX(dp->height / dp->ys - 1, 4); dp->ncols = nccols / 2; dp->nrows = 2 * (ncrows / 4); dp->xb = (dp->width - dp->xs * nccols) / 2 + dp->xs / 2; dp->yb = (dp->height - dp->ys * (ncrows / 2) * 2) / 2 + dp->ys - 2; for (i = 0; i < 6; i++) { dp->shape.hexagon[i].x = (dp->xs - 1) * hexagonUnit[i].x; dp->shape.hexagon[i].y = ((dp->ys - 1) * hexagonUnit[i].y / 2) * 4 / 3; } } else if (dp->neighbors == 4 || dp->neighbors == 8) { if (size < -MINSIZE) dp->ys = NRAND(MIN(-size, MAX(MINSIZE, MIN(dp->width, dp->height) / MINGRIDSIZE)) - MINSIZE + 1) + MINSIZE; else if (size < MINSIZE) { if (!size) dp->ys = MAX(MINSIZE, MIN(dp->width, dp->height) / MINGRIDSIZE); else dp->ys = MINSIZE; } else dp->ys = MIN(size, MAX(MINSIZE, MIN(dp->width, dp->height) / MINGRIDSIZE)); dp->xs = dp->ys; dp->ncols = MAX(dp->width / dp->xs, 2); dp->nrows = MAX(dp->height / dp->ys, 2); dp->xb = (dp->width - dp->xs * dp->ncols) / 2; dp->yb = (dp->height - dp->ys * dp->nrows) / 2; } else { /* TRI */ int orient, i; if (dp->width < 2) dp->width = 2; if (dp->height < 2) dp->height = 2; if (size < -MINSIZE) dp->ys = NRAND(MIN(-size, MAX(MINSIZE, MIN(dp->width, dp->height) / MINGRIDSIZE)) - MINSIZE + 1) + MINSIZE; else if (size < MINSIZE) { if (!size) dp->ys = MAX(MINSIZE, MIN(dp->width, dp->height) / MINGRIDSIZE); else dp->ys = MINSIZE; } else dp->ys = MIN(size, MAX(MINSIZE, MIN(dp->width, dp->height) / MINGRIDSIZE)); dp->xs = (int) (1.52 * dp->ys); dp->ncols = (MAX(dp->width / dp->xs - 1, 2) / 2) * 2; dp->nrows = (MAX(dp->height / dp->ys - 1, 2) / 2) * 2; dp->xb = (dp->width - dp->xs * dp->ncols) / 2 + dp->xs / 2; dp->yb = (dp->height - dp->ys * dp->nrows) / 2 + dp->ys / 2; for (orient = 0; orient < 2; orient++) { for (i = 0; i < 3; i++) { dp->shape.triangle[orient][i].x = (dp->xs - 2) * triangleUnit[orient][i].x; dp->shape.triangle[orient][i].y = (dp->ys - 2) * triangleUnit[orient][i].y; } } } MI_CLEARWINDOW(mi); if ((dp->oldcell = (unsigned char *) malloc(dp->ncols * dp->nrows * sizeof (unsigned char))) == NULL) { free_demon(display, dp); return; } if ((dp->newcell = (unsigned char *) malloc(dp->ncols * dp->nrows * sizeof (unsigned char))) == NULL) { free_demon(display, dp); return; } RandomSoup(mi); } ENTRYPOINT void draw_demon (ModeInfo * mi) { int i, j, k, l, mj = 0, ml; demonstruct *dp; if (demons == NULL) return; dp = &demons[MI_SCREEN(mi)]; if (dp->cellList == NULL) return; MI_IS_DRAWN(mi) = True; if (dp->state >= dp->states) { (void) memcpy((char *) dp->newcell, (char *) dp->oldcell, dp->ncols * dp->nrows * sizeof (unsigned char)); if (dp->neighbors == 6) { for (j = 0; j < dp->nrows; j++) { for (i = 0; i < dp->ncols; i++) { /* NE */ if (!(j & 1)) k = (i + 1 == dp->ncols) ? 0 : i + 1; else k = i; l = (!j) ? dp->nrows - 1 : j - 1; ml = l * dp->ncols; if (dp->oldcell[k + ml] == (int) (dp->oldcell[i + mj] + 1) % dp->states) dp->newcell[i + mj] = dp->oldcell[k + ml]; /* E */ k = (i + 1 == dp->ncols) ? 0 : i + 1; ml = mj; if (dp->oldcell[k + ml] == (int) (dp->oldcell[i + mj] + 1) % dp->states) dp->newcell[i + mj] = dp->oldcell[k + ml]; /* SE */ if (!(j & 1)) k = (i + 1 == dp->ncols) ? 0 : i + 1; else k = i; l = (j + 1 == dp->nrows) ? 0 : j + 1; ml = l * dp->ncols; if (dp->oldcell[k + ml] == (int) (dp->oldcell[i + mj] + 1) % dp->states) dp->newcell[i + mj] = dp->oldcell[k + ml]; /* SW */ if (j & 1) k = (!i) ? dp->ncols - 1 : i - 1; else k = i; l = (j + 1 == dp->nrows) ? 0 : j + 1; ml = l * dp->ncols; if (dp->oldcell[k + ml] == (int) (dp->oldcell[i + mj] + 1) % dp->states) dp->newcell[i + mj] = dp->oldcell[k + ml]; /* W */ k = (!i) ? dp->ncols - 1 : i - 1; ml = mj; if (dp->oldcell[k + ml] == (int) (dp->oldcell[i + mj] + 1) % dp->states) dp->newcell[i + mj] = dp->oldcell[k + ml]; /* NW */ if (j & 1) k = (!i) ? dp->ncols - 1 : i - 1; else k = i; l = (!j) ? dp->nrows - 1 : j - 1; ml = l * dp->ncols; if (dp->oldcell[k + ml] == (int) (dp->oldcell[i + mj] + 1) % dp->states) dp->newcell[i + mj] = dp->oldcell[k + ml]; } mj += dp->ncols; } } else if (dp->neighbors == 4 || dp->neighbors == 8) { for (j = 0; j < dp->nrows; j++) { for (i = 0; i < dp->ncols; i++) { /* N */ k = i; l = (!j) ? dp->nrows - 1 : j - 1; ml = l * dp->ncols; if (dp->oldcell[k + ml] == (int) (dp->oldcell[i + mj] + 1) % dp->states) dp->newcell[i + mj] = dp->oldcell[k + ml]; /* E */ k = (i + 1 == dp->ncols) ? 0 : i + 1; ml = mj; if (dp->oldcell[k + ml] == (int) (dp->oldcell[i + mj] + 1) % dp->states) dp->newcell[i + mj] = dp->oldcell[k + ml]; /* S */ k = i; l = (j + 1 == dp->nrows) ? 0 : j + 1; ml = l * dp->ncols; if (dp->oldcell[k + ml] == (int) (dp->oldcell[i + mj] + 1) % dp->states) dp->newcell[i + mj] = dp->oldcell[k + ml]; /* W */ k = (!i) ? dp->ncols - 1 : i - 1; /*l = j;*/ ml = mj; if (dp->oldcell[k + ml] == (int) (dp->oldcell[i + mj] + 1) % dp->states) dp->newcell[i + mj] = dp->oldcell[k + ml]; } mj += dp->ncols; } if (dp->neighbors == 8) { mj = 0; for (j = 0; j < dp->nrows; j++) { for (i = 0; i < dp->ncols; i++) { /* NE */ k = (i + 1 == dp->ncols) ? 0 : i + 1; l = (!j) ? dp->nrows - 1 : j - 1; ml = l * dp->ncols; if (dp->oldcell[k + ml] == (int) (dp->oldcell[i + mj] + 1) % dp->states) dp->newcell[i + mj] = dp->oldcell[k + ml]; /* SE */ k = (i + 1 == dp->ncols) ? 0 : i + 1; l = (j + 1 == dp->nrows) ? 0 : j + 1; ml = l * dp->ncols; if (dp->oldcell[k + ml] == (int) (dp->oldcell[i + mj] + 1) % dp->states) dp->newcell[i + mj] = dp->oldcell[k + ml]; /* SW */ k = (!i) ? dp->ncols - 1 : i - 1; l = (j + 1 == dp->nrows) ? 0 : j + 1; ml = l * dp->ncols; if (dp->oldcell[k + ml] == (int) (dp->oldcell[i + mj] + 1) % dp->states) dp->newcell[i + mj] = dp->oldcell[k + ml]; /* NW */ k = (!i) ? dp->ncols - 1 : i - 1; l = (!j) ? dp->nrows - 1 : j - 1; ml = l * dp->ncols; if (dp->oldcell[k + ml] == (int) (dp->oldcell[i + mj] + 1) % dp->states) dp->newcell[i + mj] = dp->oldcell[k + ml]; } mj += dp->ncols; } } } else if (dp->neighbors == 3 || dp->neighbors == 9 || dp->neighbors == 12) { for (j = 0; j < dp->nrows; j++) { for (i = 0; i < dp->ncols; i++) { if ((i + j) % 2) { /* right */ /* W */ k = (!i) ? dp->ncols - 1 : i - 1; ml = mj; if (dp->oldcell[k + ml] == (int) (dp->oldcell[i + mj] + 1) % dp->states) dp->newcell[i + mj] = dp->oldcell[k + ml]; } else { /* left */ /* E */ k = (i + 1 == dp->ncols) ? 0 : i + 1; ml = mj; if (dp->oldcell[k + ml] == (int) (dp->oldcell[i + mj] + 1) % dp->states) dp->newcell[i + mj] = dp->oldcell[k + ml]; } /* N */ k = i; l = (!j) ? dp->nrows - 1 : j - 1; ml = l * dp->ncols; if (dp->oldcell[k + ml] == (int) (dp->oldcell[i + mj] + 1) % dp->states) dp->newcell[i + mj] = dp->oldcell[k + ml]; /* S */ k = i; l = (j + 1 == dp->nrows) ? 0 : j + 1; ml = l * dp->ncols; if (dp->oldcell[k + ml] == (int) (dp->oldcell[i + mj] + 1) % dp->states) dp->newcell[i + mj] = dp->oldcell[k + ml]; } mj += dp->ncols; } if (dp->neighbors == 9 || dp->neighbors == 12) { mj = 0; for (j = 0; j < dp->nrows; j++) { for (i = 0; i < dp->ncols; i++) { /* NN */ k = i; if (!j) l = dp->nrows - 2; else if (!(j - 1)) l = dp->nrows - 1; else l = j - 2; ml = l * dp->ncols; if (dp->oldcell[k + ml] == (int) (dp->oldcell[i + mj] + 1) % dp->states) dp->newcell[i + mj] = dp->oldcell[k + ml]; /* SS */ k = i; if (j + 1 == dp->nrows) l = 1; else if (j + 2 == dp->nrows) l = 0; else l = j + 2; ml = l * dp->ncols; if (dp->oldcell[k + ml] == (int) (dp->oldcell[i + mj] + 1) % dp->states) dp->newcell[i + mj] = dp->oldcell[k + ml]; /* NW */ k = (!i) ? dp->ncols - 1 : i - 1; l = (!j) ? dp->nrows - 1 : j - 1; ml = l * dp->ncols; if (dp->oldcell[k + ml] == (int) (dp->oldcell[i + mj] + 1) % dp->states) dp->newcell[i + mj] = dp->oldcell[k + ml]; /* NE */ k = (i + 1 == dp->ncols) ? 0 : i + 1; l = (!j) ? dp->nrows - 1 : j - 1; ml = l * dp->ncols; if (dp->oldcell[k + ml] == (int) (dp->oldcell[i + mj] + 1) % dp->states) dp->newcell[i + mj] = dp->oldcell[k + ml]; /* SW */ k = (!i) ? dp->ncols - 1 : i - 1; l = (j + 1 == dp->nrows) ? 0 : j + 1; ml = l * dp->ncols; if (dp->oldcell[k + ml] == (int) (dp->oldcell[i + mj] + 1) % dp->states) dp->newcell[i + mj] = dp->oldcell[k + ml]; /* SE */ k = (i + 1 == dp->ncols) ? 0 : i + 1; l = (j + 1 == dp->nrows) ? 0 : j + 1; ml = l * dp->ncols; if (dp->oldcell[k + ml] == (int) (dp->oldcell[i + mj] + 1) % dp->states) dp->newcell[i + mj] = dp->oldcell[k + ml]; } mj += dp->ncols; } if (dp->neighbors == 12) { mj = 0; for (j = 0; j < dp->nrows; j++) { for (i = 0; i < dp->ncols; i++) { if ((i + j) % 2) { /* right */ /* NNW */ k = (!i) ? dp->ncols - 1 : i - 1; if (!j) l = dp->nrows - 2; else if (!(j - 1)) l = dp->nrows - 1; else l = j - 2; ml = l * dp->ncols; if (dp->oldcell[k + ml] == (int) (dp->oldcell[i + mj] + 1) % dp->states) dp->newcell[i + mj] = dp->oldcell[k + ml]; /* SSW */ k = (!i) ? dp->ncols - 1 : i - 1; if (j + 1 == dp->nrows) l = 1; else if (j + 2 == dp->nrows) l = 0; else l = j + 2; ml = l * dp->ncols; if (dp->oldcell[k + ml] == (int) (dp->oldcell[i + mj] + 1) % dp->states) dp->newcell[i + mj] = dp->oldcell[k + ml]; /* EE */ k = (i + 1 == dp->ncols) ? 0 : i + 1; /*l = j;*/ ml = mj; if (dp->oldcell[k + ml] == (int) (dp->oldcell[i + mj] + 1) % dp->states) dp->newcell[i + mj] = dp->oldcell[k + ml]; } else { /* left */ /* NNE */ k = (i + 1 == dp->ncols) ? 0 : i + 1; if (!j) l = dp->nrows - 2; else if (!(j - 1)) l = dp->nrows - 1; else l = j - 2; ml = l * dp->ncols; if (dp->oldcell[k + ml] == (int) (dp->oldcell[i + mj] + 1) % dp->states) dp->newcell[i + mj] = dp->oldcell[k + ml]; /* SSE */ k = (i + 1 == dp->ncols) ? 0 : i + 1; if (j + 1 == dp->nrows) l = 1; else if (j + 2 == dp->nrows) l = 0; else l = j + 2; ml = l * dp->ncols; if (dp->oldcell[k + ml] == (int) (dp->oldcell[i + mj] + 1) % dp->states) dp->newcell[i + mj] = dp->oldcell[k + ml]; /* WW */ k = (!i) ? dp->ncols - 1 : i - 1; /*l = j;*/ ml = mj; if (dp->oldcell[k + ml] == (int) (dp->oldcell[i + mj] + 1) % dp->states) dp->newcell[i + mj] = dp->oldcell[k + ml]; } } mj += dp->ncols; } } } } mj = 0; for (j = 0; j < dp->nrows; j++) { for (i = 0; i < dp->ncols; i++) if (dp->oldcell[i + mj] != dp->newcell[i + mj]) { dp->oldcell[i + mj] = dp->newcell[i + mj]; if (!addtolist(mi, i, j, dp->oldcell[i + mj])) { free_demon(MI_DISPLAY(mi), dp); return; } } mj += dp->ncols; } if (++dp->generation > MI_CYCLES(mi)) init_demon(mi); dp->state = 0; } else { if (dp->ncells[dp->state]) if (!draw_state(mi, dp->state)) { free_demon(MI_DISPLAY(mi), dp); return; } dp->state++; } if (dp->redrawing) { for (i = 0; i < REDRAWSTEP; i++) { if (dp->oldcell[dp->redrawpos]) { drawcell(mi, dp->redrawpos % dp->ncols, dp->redrawpos / dp->ncols, dp->oldcell[dp->redrawpos]); } if (++(dp->redrawpos) >= dp->ncols * dp->nrows) { dp->redrawing = 0; break; } } } } 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) { if (demons != NULL) { int screen; for (screen = 0; screen < MI_NUM_SCREENS(mi); screen++) free_demon(MI_DISPLAY(mi), &demons[screen]); (void) free((void *) demons); demons = (demonstruct *) NULL; } } ENTRYPOINT void refresh_demon (ModeInfo * mi) { demonstruct *dp; if (demons == NULL) return; dp = &demons[MI_SCREEN(mi)]; dp->redrawing = 1; dp->redrawpos = 0; } ENTRYPOINT Bool demon_handle_event (ModeInfo *mi, XEvent *event) { if (screenhack_event_helper (MI_DISPLAY(mi), MI_WINDOW(mi), event)) { reshape_demon (mi, MI_WIDTH(mi), MI_HEIGHT(mi)); return True; } return False; } XSCREENSAVER_MODULE ("Demon", demon) #endif /* MODE_demon */ xscreensaver-5.36/hacks/loop.c000644 000767 000024 00000135466 12707725632 016376 0ustar00jwzstaff000000 000000 /* -*- Mode: C; tab-width: 4 -*- */ /* loop --- Chris Langton's self-producing loops */ #if 0 static const char sccsid[] = "@(#)loop.c 5.01 2000/03/15 xlockmore"; #endif /*- * Copyright (c) 1996 by David Bagley. * * Permission to use, copy, modify, and distribute this software and its * documentation for any purpose and without fee is hereby granted, * provided that the above copyright notice appear in all copies and that * both that copyright notice and this permission notice appear in * supporting documentation. * * This file is provided AS IS with no warranties of any kind. The author * shall have no liability with respect to the infringement of copyrights, * trade secrets or any patents by this file or any part thereof. In no * event will the author be liable for any lost revenue or profits or * other special, indirect and consequential damages. * * Revision History: * 15-Mar-2001: Added some flaws, random blue wall spots, to liven it up. * This mod seems to expose a bug where hexagons are erased * for no apparent reason. * 01-Nov-2000: Allocation checks * 16-Jun-2000: Fully coded the hexagonal rules. (Rules that end up in * state zero were not bothered with since a calloc was used * to set non-explicit rules to zero. This allows the * compile-time option RAND_RULES to work here (at least to * generation 540).) * Also added compile-time option DELAYDEBUGLOOP for debugging * life form. This also turns off the random initial direction * of the loop. Set DELAYDEBUGLOOP to be 10 and use with * something like this: * xlock -mode loop -neighbors 6 -size 5 -delay 1 -count 540 -nolock * 18-Oct-1998: Started creating a hexagon version. * It proved not that difficult because I used Langton's Loop * as a guide, hexagons have more neighbors so there is more * freedom to program, and the loop will has six sides to * store its genes (data). * (Soon after this a triangular version with neighbors = 6 * was attempted but was unsuccessful). * 10-May-1997: Compatible with xscreensaver * 15-Nov-1995: Coded from Chris Langton's Self-Reproduction in Cellular * Automata Physica 10D 135-144 1984, also used wire.c as a * guide. */ /*- Grid Number of Neighbors ---- ------------------ Square 4 Hexagon 6 (currently in development) */ /*- * From Steven Levy's Artificial Life * Chris Langton's cellular automata "loops" reproduce in the spirit of life. * Beginning from a single organism, the loops from a colony. As the loops * on the outer fringes reproduce, the inner loops -- blocked by their * daughters -- can no longer produce offspring. These dead progenitors * provide a base for future generations' expansion, much like the formation * of a coral reef. This self-organizing behavior emerges spontaneously, * from the bottom up -- a key characteristic of artificial life. */ /*- Don't Panic -- When the artificial life tries to leave its petri dish (ie. the screen) it will (usually) die... The loops are short of "real" life because a general purpose Turing machine is not contained in the loop. This is a simplification of von Neumann and Codd's self-producing Turing machine. The data spinning around could be viewed as both its DNA and its internal clock. The program can be initalized to have the loop spin both ways... but only one way around will work for a given rule. An open question (at least to me): Is handedness a requirement for (artificial) life? Here there is handedness at both the initial condition and the transition rule. */ #ifndef HAVE_JWXYZ # define DO_STIPPLE #endif #ifdef STANDALONE # define MODE_loop # define DEFAULTS "*delay: 100000 \n" \ "*count: -5 \n" \ "*cycles: 1600 \n" \ "*size: -12 \n" \ "*ncolors: 15 \n" \ "*fpsSolid: true \n" \ "*ignoreRotation: True \n" \ # define UNIFORM_COLORS # include "xlockmore.h" /* in xscreensaver distribution */ #else /* STANDALONE */ # include "xlock.h" /* in xlockmore distribution */ #endif /* STANDALONE */ #include "automata.h" #ifdef MODE_loop /*- * neighbors of 0 randomizes between 4 and 6. */ #define DEF_NEIGHBORS "0" /* choose random value */ static int neighbors; static XrmOptionDescRec opts[] = { {"-neighbors", ".loop.neighbors", XrmoptionSepArg, 0} }; static argtype vars[] = { {&neighbors, "neighbors", "Neighbors", DEF_NEIGHBORS, t_Int} }; static OptionStruct desc[] = { {"-neighbors num", "squares 4 or hexagons 6"} }; ENTRYPOINT ModeSpecOpt loop_opts = {sizeof opts / sizeof opts[0], opts, sizeof vars / sizeof vars[0], vars, desc}; #ifdef USE_MODULES ModStruct loop_description = {"loop", "init_loop", "draw_loop", "release_loop", "refresh_loop", "init_loop", (char *) NULL, &loop_opts, 100000, 5, 1600, -12, 64, 1.0, "", "Shows Langton's self-producing loops", 0, NULL}; #endif #define LOOPBITS(n,w,h)\ if ((lp->pixmaps[lp->init_bits]=\ XCreatePixmapFromBitmapData(display,window,(char *)n,w,h,1,0,1))==None){\ free_loop(display,lp); return;} else {lp->init_bits++;} static int local_neighbors = 0; #if 0 /* Used to fast forward to troubled generations, mainly used for debugging. -delay 1 -count 170 -neighbors 6 # divisions starts 540 first cell collision 1111 mutant being born from 2 parents 1156 mutant born */ #define DELAYDEBUGLOOP 10 #endif #define COLORS 8 #define REALCOLORS (COLORS-2) #define MINLOOPS 1 #define REDRAWSTEP 2000 /* How many cells to draw per cycle */ #define ADAM_SIZE 8 /* MIN 5 */ #if 1 #define ADAM_LOOPX (ADAM_SIZE+2) #define ADAM_LOOPY (ADAM_SIZE+2) #else #define ADAM_LOOPX 16 #define ADAM_LOOPY 10 #endif #define MINGRIDSIZE (3*ADAM_LOOPX) #if 0 /* TRIA stuff was an attempt to make a triangular lifeform on a hexagonal grid but I got bored. You may need an additional 7th state for a coherent step by step process of cell separation and initial stem development. */ #define TRIA 1 #endif #ifdef TRIA #define HEX_ADAM_SIZE 3 /* MIN 3 */ #else #define HEX_ADAM_SIZE 5 /* MIN 3 */ #endif #if 1 #define HEX_ADAM_LOOPX (2*HEX_ADAM_SIZE+1) #define HEX_ADAM_LOOPY (2*HEX_ADAM_SIZE+1) #else #define HEX_ADAM_LOOPX 3 #define HEX_ADAM_LOOPY 7 #endif #define HEX_MINGRIDSIZE (6*HEX_ADAM_LOOPX) #define MINSIZE ((MI_NPIXELS(mi)>=COLORS)?1:(2+(local_neighbors==6))) #define NEIGHBORKINDS 2 #define ANGLES 360 #define MAXNEIGHBORS 6 /* Singly linked list */ typedef struct _CellList { XPoint pt; struct _CellList *next; } CellList; typedef struct { int init_bits; int generation; int xs, ys; int xb, yb; int nrows, ncols; int bx, by, bnrows, bncols; int mincol, minrow, maxcol, maxrow; int width, height; int redrawing, redrawpos; Bool dead, clockwise; unsigned char *newcells, *oldcells; int ncells[COLORS]; CellList *cellList[COLORS]; unsigned long colors[COLORS]; GC stippledGC; Pixmap pixmaps[COLORS]; union { XPoint hexagon[6]; } shape; } loopstruct; static loopstruct *loops = (loopstruct *) NULL; #define TRANSITION(TT,V) V=TT&7;TT>>=3 #define FINALTRANSITION(TT,V) V=TT&7 #define TABLE(R,T,L,B) (table[((B)<<9)|((L)<<6)|((T)<<3)|(R)]) #define HEX_TABLE(R,T,t,l,b,B) (table[((B)<<15)|((b)<<12)|((l)<<9)|((t)<<6)|((T)<<3)|(R)]) #if 0 /* Instead of setting "unused" state rules to zero it randomizes them. These rules take over when something unexpected happens... like when a cell hits a wall (the end of the screen). */ #define RAND_RULES #endif #ifdef RAND_RULES #define TABLE_IN(C,R,T,L,B,I) (TABLE(R,T,L,B)&=~(7<<((C)*3)));\ (TABLE(R,T,L,B)|=((I)<<((C)*3))) #define HEX_TABLE_IN(C,R,T,t,l,b,B,I) (HEX_TABLE(R,T,t,l,b,B)&=~(7<<((C)*3)));\ (HEX_TABLE(R,T,t,l,b,B)|=((I)<<((C)*3))) #else #define TABLE_IN(C,R,T,L,B,I) (TABLE(R,T,L,B)|=((I)<<((C)*3))) #define HEX_TABLE_IN(C,R,T,t,l,b,B,I) (HEX_TABLE(R,T,t,l,b,B)|=((I)<<((C)*3))) #endif #define TABLE_OUT(C,R,T,L,B) ((TABLE(R,T,L,B)>>((C)*3))&7) #define HEX_TABLE_OUT(C,R,T,t,l,b,B) ((HEX_TABLE(R,T,t,l,b,B)>>((C)*3))&7) static unsigned int *table = (unsigned int *) NULL; /* square: 8*8*8*8 = 2^12 = 2^3^4 = 4096 */ /* hexagon: 8*8*8*8*8*8 = 2^18 = 2^3^6 = 262144 = too big? */ static char plots[NEIGHBORKINDS] = { 4, 6 /* Neighborhoods */ }; static unsigned int transition_table[] = { /* Octal CBLTR->I */ /* CBLTRI CBLTRI CBLTRI CBLTRI CBLTRI */ 0000000, 0025271, 0113221, 0202422, 0301021, 0000012, 0100011, 0122244, 0202452, 0301220, 0000020, 0100061, 0122277, 0202520, 0302511, 0000030, 0100077, 0122434, 0202552, 0401120, 0000050, 0100111, 0122547, 0202622, 0401220, 0000063, 0100121, 0123244, 0202722, 0401250, 0000071, 0100211, 0123277, 0203122, 0402120, 0000112, 0100244, 0124255, 0203216, 0402221, 0000122, 0100277, 0124267, 0203226, 0402326, 0000132, 0100511, 0125275, 0203422, 0402520, 0000212, 0101011, 0200012, 0204222, 0403221, 0000220, 0101111, 0200022, 0205122, 0500022, 0000230, 0101244, 0200042, 0205212, 0500215, 0000262, 0101277, 0200071, 0205222, 0500225, 0000272, 0102026, 0200122, 0205521, 0500232, 0000320, 0102121, 0200152, 0205725, 0500272, 0000525, 0102211, 0200212, 0206222, 0500520, 0000622, 0102244, 0200222, 0206722, 0502022, 0000722, 0102263, 0200232, 0207122, 0502122, 0001022, 0102277, 0200242, 0207222, 0502152, 0001120, 0102327, 0200250, 0207422, 0502220, 0002020, 0102424, 0200262, 0207722, 0502244, 0002030, 0102626, 0200272, 0211222, 0502722, 0002050, 0102644, 0200326, 0211261, 0512122, 0002125, 0102677, 0200423, 0212222, 0512220, 0002220, 0102710, 0200517, 0212242, 0512422, 0002322, 0102727, 0200522, 0212262, 0512722, 0005222, 0105427, 0200575, 0212272, 0600011, 0012321, 0111121, 0200722, 0214222, 0600021, 0012421, 0111221, 0201022, 0215222, 0602120, 0012525, 0111244, 0201122, 0216222, 0612125, 0012621, 0111251, 0201222, 0217222, 0612131, 0012721, 0111261, 0201422, 0222272, 0612225, 0012751, 0111277, 0201722, 0222442, 0700077, 0014221, 0111522, 0202022, 0222462, 0701120, 0014321, 0112121, 0202032, 0222762, 0701220, 0014421, 0112221, 0202052, 0222772, 0701250, 0014721, 0112244, 0202073, 0300013, 0702120, 0016251, 0112251, 0202122, 0300022, 0702221, 0017221, 0112277, 0202152, 0300041, 0702251, 0017255, 0112321, 0202212, 0300076, 0702321, 0017521, 0112424, 0202222, 0300123, 0702525, 0017621, 0112621, 0202272, 0300421, 0702720, 0017721, 0112727, 0202321, 0300622 }; static unsigned int hex_transition_table[] = { /* Octal CBbltTR->I */ /* CBbltTRI CBbltTRI CBbltTRI CBbltTRI CBbltTRI */ #ifdef TRIA 000000000, 000000020, 000000220, 000002220, 000022220, 011122121, 011121221, 011122221, 011221221, 011222221, 011112121, 011112221, 020021122, 020002122, 020211222, 021111222, 020221122, 020027122, 020020722, 020021022, 001127221, 011122727, 011227227, 010122121, 010222211, 021117222, 020112272, 070221220, 001227221, 010221121, 011721221, 011222277, 020111222, 020221172, 070211220, 001217221, 010212277, 010221221, 020122112, 070122220, 001722221, 010221271, 020002022, 021122172, 070121220, 011122277, 011172121, 010212177, 011212277, 070112220, 001772221, 021221772, 070121270, 070721220, 000112721, 000272211, 010022211, 012222277, 020072272, 020227122, 020217222, 010211121, 020002727, 070222220, 001727721, 020021072, 020070722, 070002072, 070007022, 001772721, 070002022, 000000070, 000000770, 000072220, 000000270, 020110222, 020220272, 020220722, 070007071, 070002072, 070007022, 000000012, 000000122, 000000212, 001277721, 020122072, 020202212, 010002121, 020001122, 020002112, 020021722, 020122022, 020027022, 020070122, 020020122, 010227027, 020101222, 010227227, 010227277, 021722172, 001727221, 010222277, 020702272, 070122020, 000172721, 010022277, 010202177, 010227127, 001214221, 010202244, 020024122, 020020422, 040122220, 001422221, 010221241, 010224224, 021122142, 040121220, 001124221, 010224274, 020112242, 021422172, 040221220, 001224221, 001427221, 010222244, 020227042, 040122020, 000142721, 010022244, 010202144, 010224124, 040112220, 001442221, 021221442, 040121240, 040421220, 000242211, 000112421, 020042242, 020214222, 020021422, 020220242, 020024022, 011224224, 020224122, 020220422, 012222244, 020002424, 040222220, 001244421, 000000420, 000000440, 000000240, 000000040, 020040121, 020021042, 040004022, 040004042, 040002042, 010021121, 020011122, 020002112, 001424421, 020040422, 001442421, 040002022, 001724221, 010227247, 020224072, 021417222, 000172421, 010021721, 020017022, 020120212, 020271727, 070207072, 070701220, 000001222, 020110122, 001277221, 001777721, 020021222, 020202272, 020120222, 020221722, 020027227, 070070222, 000007220, 020101272, 020272172, 020721422, 020721722, 020011222, 020202242, #if 0 {2,2,0,0,2,7,0}, {2,0,2,0,2,0,2}, {2,4,1,2,2,1,2}, {2,1,2,1,2,1,2}, {2,0,2,2,1,1,2}, {2,7,1,1,1,1,2}, {0,2,2,2,2,2,2}, {2,2,0,0,7,7,0}, {2,1,2,0,2,0,7}, {2,0,1,2,2,1,2}, {2,4,2,1,2,1,2}, {2,1,2,2,1,1,2}, {2,0,7,1,1,1,2}, {0,2,2,2,2,2,2}, #endif #else 000000000, 000000020, 000000220, 000002220, 011212121, 011212221, 011221221, 011222221, 020002122, 020021122, 020211122, 010221221, 010222121, 020002022, 020021022, 020020122, 020112022, 010202121, 020102022, 020202112, 000000012, 000000122, 000000212, 010002121, 020001122, 020002112, 020011122, 001227221, 001272221, 001272721, 012212277, 011222727, 011212727, 020021722, 020027122, 020020722, 020027022, 020211722, 020202172, 020120272, 020271122, 020202172, 020207122, 020217122, 020120272, 020210722, 020270722, 070212220, 070221220, 070212120, 012222277, 020002727, 070222220, 001277721, 000000070, 000000270, 000000720, 000000770, 020070122, 020021072, 070002072, 070007022, 070007071, 020070722, 070002022, 010227227, 010222727, 010202727, 020172022, 020202712, 001224221, 001242221, 001242421, 012212244, 011222424, 011212424, 020021422, 020024122, 020020422, 020024022, 020211422, 020202142, 020120242, 020241122, 020202142, 020204122, 020214122, 020120242, 020210422, 020240422, 040212220, 040221220, 040212120, 012222244, 020002424, 040222220, 001244421, 000000040, 000000240, 000000420, 000000440, 020040122, 020021042, 040002042, 040004021, 040004042, 020040422, 040002022, 010224224, 010222424, 010202424, 020142022, 020202412, 020011722, 020112072, 020172072, 020142072, 000210225, 000022015, 000022522, 011225521, 020120525, 020020152, 020005122, 020214255, 020021152, 020255242, 050215222, 050225121, 000225220, 001254222, 010221250, 011221251, 011225221, 020025122, 020152152, 020211252, 020214522, 020511125, 050212241, 05221120, 040521225, 000000250, 000000520, 000150220, 000220520, 000222210, 001224251, 010022152, 010251221, 010522121, 011212151, 011221251, 011215221, 020000220, 020002152, 020020220, 020022152, 020021422, 020022152, 020022522, 020025425, 020050422, 020051022, 020051122, 020211122, 020211222, 020215222, 020245122, 050021125, 050021025, 050011125, 051242221, 041225220, 000220250, 000220520, 001227521, 001275221, 011257227, 011522727, 020002052, 020002752, 020021052, 020057125, 050020722, 050027125, 070215220, 070212255, 071225220, 020275122, 051272521, 020055725, 020021552, 012252277, 050002521, 020005725, 050011022, 000000155, 020050722, 001227250, 010512727, 010002151, 020027112, 001227251, 012227257, 050002125, 020517122, 050002025, 020050102, 050002725, 020570722, 001252721, 020007051, 020102052, 020271072, 050001122, 010002151, 011227257, 020051722, 020057022, 020050122, 020051422, 011224254, 012224254, 020054022, 050002425, 040252220, 020002454, 000000540, 001254425, 050004024, 040004051, 000000142, 040001522, 010002547, 020045122, 051221240, 020002512, 020021522, 020020022, 021125522, 020521122, 020025022, 020025522, 020020522, 020202222, 020212222, 021212222, 021222722, 021222422, 020002222, 020021222, 020022122, 020212122, 020027222, 020024222, 020212722, 020212422, 020202122, 001222221, 020002522, 020017125, 010022722, 020212052, 020205052, 070221250, 000000050, 000005220, 000002270, 070252220, 000000450, 000007220, 000220220, 000202220, 000022020, 000020220, 000222040, 000220440, 000022040, 000040220, 000252220, 050221120, 010221520, 002222220, 000070220, 000220720, 000020520, 000070250, 000222070, 000027020, 000022070, 000202270, 000024020, 000220420, 000220270, 000220240, 000072020, 000042020, 000002020, 000002070, 000020270, 000020250, 000270270, 000007020, 000040270, /* Collision starts (gen 540), not sure to have rules to save it or depend on calloc to intialize remaining rules to 0 so that the mutant will be born */ 000050220, #endif }; /*- Neighborhoods are read as follows (rotations are not listed): T L C R ==> I B t T l C R ==> I b B */ static unsigned char self_reproducing_loop[ADAM_LOOPY][ADAM_LOOPX] = { /* 10x10 */ {0, 2, 2, 2, 2, 2, 2, 2, 2, 0}, {2, 4, 0, 1, 4, 0, 1, 1, 1, 2}, {2, 1, 2, 2, 2, 2, 2, 2, 1, 2}, {2, 0, 2, 0, 0, 0, 0, 2, 1, 2}, {2, 7, 2, 0, 0, 0, 0, 2, 7, 2}, {2, 1, 2, 0, 0, 0, 0, 2, 0, 2}, {2, 0, 2, 0, 0, 0, 0, 2, 1, 2}, {2, 7, 2, 2, 2, 2, 2, 2, 7, 2}, {2, 1, 0, 6, 1, 0, 7, 1, 0, 2}, {0, 2, 2, 2, 2, 2, 2, 2, 2, 0} }; static unsigned char hex_self_reproducing_loop[HEX_ADAM_LOOPY][HEX_ADAM_LOOPX] = { #if 0 /* Experimental TRIA5:7x7 */ {2,2,0,0,0,0,0}, {2,1,2,0,2,2,0}, {2,0,4,2,2,0,2}, {2,7,2,0,2,0,2}, {2,1,2,2,1,1,2}, {2,0,7,1,0,7,2}, {0,2,2,2,2,2,2}, /* Stem cells, only "5" will fully reproduce itself */ /* 3:12x7 */ {2,2,2,2,0,0,0,0,0,0,0,0}, {2,1,1,1,2,0,0,0,0,0,0,0}, {2,1,2,2,1,2,2,2,2,2,2,0}, {2,1,2,0,2,7,1,1,1,1,1,2}, {0,2,1,2,2,0,2,2,2,2,2,2}, {0,0,2,0,4,1,2,0,0,0,0,0}, {0,0,0,2,2,2,2,0,0,0,0,0} /* 4:14x9 */ {2,2,2,2,2,0,0,0,0,0,0,0,0,0}, {2,1,1,1,1,2,0,0,0,0,0,0,0,0}, {2,1,2,2,2,1,2,0,0,0,0,0,0,0}, {2,1,2,0,0,2,1,2,2,2,2,2,2,0}, {2,1,2,0,0,0,2,7,1,1,1,1,1,2}, {0,2,1,2,0,0,2,0,2,2,2,2,2,2}, {0,0,2,0,2,2,2,1,2,0,0,0,0,0}, {0,0,0,2,4,1,0,7,2,0,0,0,0,0}, {0,0,0,0,2,2,2,2,2,0,0,0,0,0} /* 5:16x11 */ {2,2,2,2,2,2,0,0,0,0,0,0,0,0,0,0}, {2,1,1,1,1,1,2,0,0,0,0,0,0,0,0,0}, {2,1,2,2,2,2,1,2,0,0,0,0,0,0,0,0}, {2,1,2,0,0,0,2,1,2,0,0,0,0,0,0,0}, {2,1,2,0,0,0,0,2,1,2,2,2,2,2,2,0}, {2,1,2,0,0,0,0,0,2,7,1,1,1,1,1,2}, {0,2,1,2,0,0,0,0,2,0,2,2,2,2,2,2}, {0,0,2,0,2,0,0,0,2,1,2,0,0,0,0,0}, {0,0,0,2,4,2,2,2,2,7,2,0,0,0,0,0}, {0,0,0,0,2,1,0,7,1,0,2,0,0,0,0,0}, {0,0,0,0,0,2,2,2,2,2,2,0,0,0,0,0} /* test:3x7 (0,4) is blank ... very strange. init_adam seems ok something after that I guess */ {2,2,0}, {2,0,2}, {0,2,2}, {0,0,0}, {2,2,0}, {2,1,2}, {0,2,2}, #else /* this might be better for hexagons, spacewise efficient... */ #ifdef TRIA /* Experimental TRIA5:7x7 */ {2,2,0,0,2,2,0}, {2,4,2,0,2,7,2}, {2,1,0,2,2,0,2}, {2,0,2,1,2,1,2}, {2,7,2,2,7,7,2}, {2,1,0,7,1,0,2}, {0,2,2,2,2,2,2}, #else /* 5:11x11 */ {2,2,2,2,2,2,0,0,0,0,0}, {2,1,1,7,0,1,2,0,0,0,0}, {2,1,2,2,2,2,7,2,0,0,0}, {2,1,2,0,0,0,2,0,2,0,0}, {2,1,2,0,0,0,0,2,1,2,0}, {2,1,2,0,0,0,0,0,2,7,2}, {0,2,1,2,0,0,0,0,2,0,2}, {0,0,2,1,2,0,0,0,2,1,2}, {0,0,0,2,1,2,2,2,2,4,2}, {0,0,0,0,2,1,1,1,1,5,2}, {0,0,0,0,0,2,2,2,2,2,2} #endif #endif }; static void position_of_neighbor(int dir, int *pcol, int *prow) { int col = *pcol, row = *prow; /* NO WRAPING */ if (local_neighbors == 6) { switch (dir) { case 0: col++; break; case 60: col += (row & 1); row--; break; case 120: col -= !(row & 1); row--; break; case 180: col--; break; case 240: col -= !(row & 1); row++; break; case 300: col += (row & 1); row++; break; default: (void) fprintf(stderr, "wrong direction %d\n", dir); } } else { switch (dir) { case 0: col++; break; case 90: row--; break; case 180: col--; break; case 270: row++; break; default: (void) fprintf(stderr, "wrong direction %d\n", dir); } } *pcol = col; *prow = row; } static Bool withinBounds(loopstruct * lp, int col, int row) { return (row >= 1 && row < lp->bnrows - 1 && col >= 1 && col < lp->bncols - 1 - (local_neighbors == 6 && (row % 2))); } static void fillcell(ModeInfo * mi, GC gc, int col, int row) { loopstruct *lp = &loops[MI_SCREEN(mi)]; if (local_neighbors == 6) { int ccol = 2 * col + !(row & 1), crow = 2 * row; lp->shape.hexagon[0].x = lp->xb + ccol * lp->xs; lp->shape.hexagon[0].y = lp->yb + crow * lp->ys; if (lp->xs == 1 && lp->ys == 1) XDrawPoint(MI_DISPLAY(mi), MI_WINDOW(mi), gc, lp->shape.hexagon[0].x, lp->shape.hexagon[0].y); else XFillPolygon(MI_DISPLAY(mi), MI_WINDOW(mi), gc, lp->shape.hexagon, 6, Convex, CoordModePrevious); } else { XFillRectangle(MI_DISPLAY(mi), MI_WINDOW(mi), gc, lp->xb + lp->xs * col, lp->yb + lp->ys * row, lp->xs - (lp->xs > 3), lp->ys - (lp->ys > 3)); } } static void drawcell(ModeInfo * mi, int col, int row, int state) { loopstruct *lp = &loops[MI_SCREEN(mi)]; XGCValues gcv; GC gc; if (MI_NPIXELS(mi) >= COLORS) { gc = MI_GC(mi); XSetForeground(MI_DISPLAY(mi), gc, lp->colors[state]); } else { #ifdef DO_STIPPLE gcv.stipple = lp->pixmaps[state]; #endif /* DO_STIPPLE */ gcv.foreground = MI_WHITE_PIXEL(mi); gcv.background = MI_BLACK_PIXEL(mi); XChangeGC(MI_DISPLAY(mi), lp->stippledGC, #ifdef DO_STIPPLE GCStipple | #endif /* DO_STIPPLE */ GCForeground | GCBackground, &gcv); gc = lp->stippledGC; } fillcell(mi, gc, col, row); } #ifdef DEBUG static void print_state(ModeInfo * mi, int state) { loopstruct *lp = &loops[MI_SCREEN(mi)]; CellList *locallist = lp->cellList[state]; int i = 0; (void) printf("state %d\n", state); while (locallist) { (void) printf("%d x %d, y %d\n", i, locallist->pt.x, locallist->pt.y); locallist = locallist->next; i++; } } #endif static void free_state(loopstruct * lp, int state) { CellList *current; while (lp->cellList[state]) { current = lp->cellList[state]; lp->cellList[state] = lp->cellList[state]->next; (void) free((void *) current); } lp->ncells[state] = 0; } static void free_list(loopstruct * lp) { int state; for (state = 0; state < COLORS; state++) free_state(lp, state); } static void free_loop(Display *display, loopstruct * lp) { int shade; for (shade = 0; shade < lp->init_bits; shade++) if (lp->pixmaps[shade] != None) { XFreePixmap(display, lp->pixmaps[shade]); lp->pixmaps[shade] = None; } if (lp->stippledGC != None) { XFreeGC(display, lp->stippledGC); lp->stippledGC = None; } if (lp->oldcells != NULL) { (void) free((void *) lp->oldcells); lp->oldcells = (unsigned char *) NULL; } if (lp->newcells != NULL) { (void) free((void *) lp->newcells); lp->newcells = (unsigned char *) NULL; } free_list(lp); } static Bool addtolist(ModeInfo * mi, int col, int row, unsigned char state) { loopstruct *lp = &loops[MI_SCREEN(mi)]; CellList *current = lp->cellList[state]; if ((lp->cellList[state] = (CellList *) malloc(sizeof (CellList))) == NULL) { lp->cellList[state] = current; free_loop(MI_DISPLAY(mi), lp); return False; } lp->cellList[state]->pt.x = col; lp->cellList[state]->pt.y = row; lp->cellList[state]->next = current; lp->ncells[state]++; return True; } static Bool draw_state(ModeInfo * mi, int state) { loopstruct *lp = &loops[MI_SCREEN(mi)]; Display *display = MI_DISPLAY(mi); GC gc; XGCValues gcv; CellList *current = lp->cellList[state]; if (MI_NPIXELS(mi) >= COLORS) { gc = MI_GC(mi); XSetForeground(display, gc, lp->colors[state]); } else { #ifdef DO_STIPPLE gcv.stipple = lp->pixmaps[state]; #endif /* DO_STIPPLE */ gcv.foreground = MI_WHITE_PIXEL(mi); gcv.background = MI_BLACK_PIXEL(mi); XChangeGC(display, lp->stippledGC, #ifdef DO_STIPPLE GCStipple | #endif /* DO_STIPPLE */ GCForeground | GCBackground, &gcv); gc = lp->stippledGC; } if (local_neighbors == 6) { /* Draw right away, slow */ while (current) { int col, row, ccol, crow; col = current->pt.x; row = current->pt.y; ccol = 2 * col + !(row & 1), crow = 2 * row; lp->shape.hexagon[0].x = lp->xb + ccol * lp->xs; lp->shape.hexagon[0].y = lp->yb + crow * lp->ys; if (lp->xs == 1 && lp->ys == 1) XDrawPoint(display, MI_WINDOW(mi), gc, lp->shape.hexagon[0].x, lp->shape.hexagon[0].y); else XFillPolygon(display, MI_WINDOW(mi), gc, lp->shape.hexagon, 6, Convex, CoordModePrevious); current = current->next; } } else { /* Take advantage of XFillRectangles */ XRectangle *rects; int nrects = 0; /* Create Rectangle list from part of the cellList */ if ((rects = (XRectangle *) malloc(lp->ncells[state] * sizeof (XRectangle))) == NULL) { return False; } while (current) { rects[nrects].x = lp->xb + current->pt.x * lp->xs; rects[nrects].y = lp->yb + current->pt.y * lp->ys; rects[nrects].width = lp->xs - (lp->xs > 3); rects[nrects].height = lp->ys - (lp->ys > 3); current = current->next; nrects++; } /* Finally get to draw */ XFillRectangles(display, MI_WINDOW(mi), gc, rects, nrects); /* Free up rects list and the appropriate part of the cellList */ (void) free((void *) rects); } free_state(lp, state); return True; } static Bool init_table(void) { if (table == NULL) { int mult = 1; unsigned int tt, c, n[MAXNEIGHBORS], i; int j, k; int size_transition_table = sizeof (transition_table) / sizeof (unsigned int); int size_hex_transition_table = sizeof (hex_transition_table) / sizeof (unsigned int); for (j = 0; j < local_neighbors; j++) mult *= 8; if ((table = (unsigned int *) calloc(mult, sizeof (unsigned int))) == NULL) { return False; } #ifdef RAND_RULES /* Here I was interested to see what happens when it hits a wall.... Rules not normally used take over... takes too much time though */ /* Each state = 3 bits */ if (MAXRAND < 16777216.0) { for (j = 0; j < mult; j++) { table[j] = (unsigned int) ((NRAND(4096) << 12) & NRAND(4096)); } } else { for (j = 0; j < mult; j++) { table[j] = (unsigned int) (NRAND(16777216)); } } #endif if (local_neighbors == 6) { for (j = 0; j < size_hex_transition_table; j++) { tt = hex_transition_table[j]; TRANSITION(tt, i); for (k = 0; k < local_neighbors; k++) { TRANSITION(tt, n[k]); } FINALTRANSITION(tt, c); HEX_TABLE_IN(c, n[0], n[1], n[2], n[3], n[4], n[5], i); HEX_TABLE_IN(c, n[1], n[2], n[3], n[4], n[5], n[0], i); HEX_TABLE_IN(c, n[2], n[3], n[4], n[5], n[0], n[1], i); HEX_TABLE_IN(c, n[3], n[4], n[5], n[0], n[1], n[2], i); HEX_TABLE_IN(c, n[4], n[5], n[0], n[1], n[2], n[3], i); HEX_TABLE_IN(c, n[5], n[0], n[1], n[2], n[3], n[4], i); } } else { for (j = 0; j < size_transition_table; j++) { tt = transition_table[j]; TRANSITION(tt, i); for (k = 0; k < local_neighbors; k++) { TRANSITION(tt, n[k]); } FINALTRANSITION(tt, c); TABLE_IN(c, n[0], n[1], n[2], n[3], i); TABLE_IN(c, n[1], n[2], n[3], n[0], i); TABLE_IN(c, n[2], n[3], n[0], n[1], i); TABLE_IN(c, n[3], n[0], n[1], n[2], i); } } } return True; } static void init_flaw(ModeInfo * mi) { loopstruct *lp = &loops[MI_SCREEN(mi)]; int a, b; #define BLUE 2 if (lp->bncols <= 3 || lp->bnrows <= 3) return; a = MIN(lp->bncols - 3, 2 * ((local_neighbors == 6) ? HEX_MINGRIDSIZE : MINGRIDSIZE)); a = NRAND(a) + (lp->bncols - a) / 2; b = MIN(lp->bnrows - 3, 2 * ((local_neighbors == 6) ? HEX_MINGRIDSIZE : MINGRIDSIZE)); b = NRAND(b) + (lp->bnrows - b) / 2; if (lp->mincol > a) lp->mincol = a; if (lp->minrow > b) lp->minrow = b; if (lp->maxcol < a + 2) lp->maxcol = a + 2; if (lp->maxrow < b + 2) lp->maxrow = b + 2; if (local_neighbors == 6) { lp->newcells[b * lp->bncols + a + !(b % 2) ] = BLUE; lp->newcells[b * lp->bncols + a + 1 + !(b % 2)] = BLUE; lp->newcells[(b + 1) * lp->bncols + a] = BLUE; lp->newcells[(b + 1) * lp->bncols + a + 2] = BLUE; lp->newcells[(b + 2) * lp->bncols + a + !(b % 2)] = BLUE; lp->newcells[(b + 2) * lp->bncols + a + 1 + !(b % 2)] = BLUE; } else { int orient = NRAND(4); lp->newcells[lp->bncols * (b + 1) + a + 1] = BLUE; if (orient == 0 || orient == 1) { lp->newcells[lp->bncols * b + a + 1] = BLUE; } if (orient == 1 || orient == 2) { lp->newcells[lp->bncols * (b + 1) + a + 2] = BLUE; } if (orient == 2 || orient == 3) { lp->newcells[lp->bncols * (b + 2) + a + 1] = BLUE; } if (orient == 3 || orient == 0) { lp->newcells[lp->bncols * (b + 1) + a] = BLUE; } } } static void init_adam(ModeInfo * mi) { loopstruct *lp = &loops[MI_SCREEN(mi)]; XPoint start = { 0, 0 }, dirx = { 0, 0 }, diry = { 0, 0 }; int i, j, dir; #ifdef DELAYDEBUGLOOP lp->clockwise = 0; if (!MI_COUNT(mi)) /* Probably doing testing so do not confuse */ #endif lp->clockwise = (Bool) (LRAND() & 1); #ifdef DELAYDEBUGLOOP dir = 0; if (!MI_COUNT(mi)) /* Probably doing testing so do not confuse */ #endif dir = NRAND(local_neighbors); if (local_neighbors == 6) { int k; switch (dir) { case 0: start.x = (lp->bncols - HEX_ADAM_LOOPX / 2) / 2; start.y = (lp->bnrows - HEX_ADAM_LOOPY) / 2; if (lp->mincol > start.x - 2) lp->mincol = start.x - 2; if (lp->minrow > start.y - 1) lp->minrow = start.y - 1; if (lp->maxcol < start.x + HEX_ADAM_LOOPX + 1) lp->maxcol = start.x + HEX_ADAM_LOOPX + 1; if (lp->maxrow < start.y + HEX_ADAM_LOOPY + 1) lp->maxrow = start.y + HEX_ADAM_LOOPY + 1; for (j = 0; j < HEX_ADAM_LOOPY; j++) { for (i = 0; i < HEX_ADAM_LOOPX; i++) { k = (((lp->bnrows / 2 + HEX_ADAM_LOOPY / 2) % 2) ? -j / 2 : -(j + 1) / 2); lp->newcells[(start.y + j) * lp->bncols + start.x + i + k] = (lp->clockwise) ? hex_self_reproducing_loop[i][j] : hex_self_reproducing_loop[j][i]; } } break; case 1: start.x = (lp->bncols - (HEX_ADAM_LOOPX + HEX_ADAM_LOOPY) / 2) / 2; start.y = (lp->bnrows - HEX_ADAM_LOOPX + HEX_ADAM_LOOPY) / 2; if (lp->mincol > start.x - 1) lp->mincol = start.x - 1; if (lp->minrow > start.y - HEX_ADAM_LOOPX) lp->minrow = start.y - HEX_ADAM_LOOPX; if (lp->maxcol < start.x + (HEX_ADAM_LOOPX + HEX_ADAM_LOOPY) / 2 + 1) lp->maxcol = start.x + (HEX_ADAM_LOOPX + HEX_ADAM_LOOPY) / 2 + 1; if (lp->maxrow < start.y + HEX_ADAM_LOOPY + 1) lp->maxrow = start.y + HEX_ADAM_LOOPY + 1; for (j = 0; j < HEX_ADAM_LOOPY; j++) { for (i = 0; i < HEX_ADAM_LOOPX; i++) { k = (((lp->bnrows / 2 + (HEX_ADAM_LOOPX + HEX_ADAM_LOOPY) / 2) % 2) ? -(i + j + 1) / 2 : -(i + j) / 2); lp->newcells[(start.y + j - i) * lp->bncols + start.x + i + j + k] = (lp->clockwise) ? hex_self_reproducing_loop[i][j] : hex_self_reproducing_loop[j][i]; } } break; case 2: start.x = (lp->bncols - HEX_ADAM_LOOPY / 2) / 2; start.y = (lp->bnrows - HEX_ADAM_LOOPX) / 2; if (lp->mincol > start.x - 2) lp->mincol = start.x - 2; if (lp->minrow > start.y - 1) lp->minrow = start.y - 1; if (lp->maxcol < start.x + HEX_ADAM_LOOPX + 1) lp->maxcol = start.x + HEX_ADAM_LOOPX + 1; if (lp->maxrow < start.y + HEX_ADAM_LOOPY + 1) lp->maxrow = start.y + HEX_ADAM_LOOPY + 1; for (j = 0; j < HEX_ADAM_LOOPX; j++) { for (i = 0; i < HEX_ADAM_LOOPY; i++) { k = (((lp->bnrows / 2 + HEX_ADAM_LOOPX / 2) % 2) ? -(HEX_ADAM_LOOPX - j - 1) / 2 : -(HEX_ADAM_LOOPX - j) / 2); lp->newcells[(start.y + j) * lp->bncols + start.x + i + k] = (lp->clockwise) ? hex_self_reproducing_loop[j][HEX_ADAM_LOOPX - i - 1] : hex_self_reproducing_loop[i][HEX_ADAM_LOOPY - j - 1]; } } break; case 3: start.x = (lp->bncols - HEX_ADAM_LOOPX / 2) / 2; start.y = (lp->bnrows - HEX_ADAM_LOOPY) / 2; if (lp->mincol > start.x - 1) lp->mincol = start.x - 1; if (lp->minrow > start.y - 1) lp->minrow = start.y - 1; if (lp->maxcol < start.x + HEX_ADAM_LOOPX + 1) lp->maxcol = start.x + HEX_ADAM_LOOPX + 1; if (lp->maxrow < start.y + HEX_ADAM_LOOPY + 1) lp->maxrow = start.y + HEX_ADAM_LOOPY + 1; for (j = 0; j < HEX_ADAM_LOOPY; j++) { for (i = 0; i < HEX_ADAM_LOOPX; i++) { k = (((lp->bnrows / 2 + HEX_ADAM_LOOPY / 2) % 2) ? -j / 2 : -(j + 1) / 2); lp->newcells[(start.y + j) * lp->bncols + start.x + i + k] = (lp->clockwise) ? hex_self_reproducing_loop[HEX_ADAM_LOOPX - i - 1][HEX_ADAM_LOOPY - j - 1] : hex_self_reproducing_loop[HEX_ADAM_LOOPY - j - 1][HEX_ADAM_LOOPX - i - 1]; } } break; case 4: start.x = (lp->bncols - (HEX_ADAM_LOOPX + HEX_ADAM_LOOPY) / 2) / 2; start.y = (lp->bnrows - HEX_ADAM_LOOPX + HEX_ADAM_LOOPY) / 2; if (lp->mincol > start.x - 1) lp->mincol = start.x - 1; if (lp->minrow > start.y - HEX_ADAM_LOOPX) lp->minrow = start.y - HEX_ADAM_LOOPX; if (lp->maxcol < start.x + (HEX_ADAM_LOOPX + HEX_ADAM_LOOPY) / 2 + 1) lp->maxcol = start.x + (HEX_ADAM_LOOPX + HEX_ADAM_LOOPY) / 2 + 1; if (lp->maxrow < start.y + HEX_ADAM_LOOPY + 1) lp->maxrow = start.y + HEX_ADAM_LOOPY + 1; for (j = 0; j < HEX_ADAM_LOOPY; j++) { for (i = 0; i < HEX_ADAM_LOOPX; i++) { k = (((lp->bnrows / 2 + (HEX_ADAM_LOOPX + HEX_ADAM_LOOPY) / 2) % 2) ? -(i + j + 1) / 2 : -(i + j) / 2); lp->newcells[(start.y + j - i) * lp->bncols + start.x + i + j + k] = (lp->clockwise) ? hex_self_reproducing_loop[HEX_ADAM_LOOPX - i - 1][HEX_ADAM_LOOPY - j - 1] : hex_self_reproducing_loop[HEX_ADAM_LOOPY - j - 1][HEX_ADAM_LOOPX - i - 1]; } } break; case 5: start.x = (lp->bncols - HEX_ADAM_LOOPY / 2) / 2; start.y = (lp->bnrows - HEX_ADAM_LOOPX) / 2; if (lp->mincol > start.x - 2) lp->mincol = start.x - 2; if (lp->minrow > start.y - 1) lp->minrow = start.y - 1; if (lp->maxcol < start.x + HEX_ADAM_LOOPY + 1) lp->maxcol = start.x + HEX_ADAM_LOOPY + 1; if (lp->maxrow < start.y + HEX_ADAM_LOOPX + 1) lp->maxrow = start.y + HEX_ADAM_LOOPX + 1; for (j = 0; j < HEX_ADAM_LOOPX; j++) { for (i = 0; i < HEX_ADAM_LOOPY; i++) { k = (((lp->bnrows / 2 + HEX_ADAM_LOOPX / 2) % 2) ? -(HEX_ADAM_LOOPX - j - 1) / 2 : -(HEX_ADAM_LOOPX - j) / 2); lp->newcells[(start.y + j) * lp->bncols + start.x + i + k] = (lp->clockwise) ? hex_self_reproducing_loop[HEX_ADAM_LOOPY - j - 1][i] : hex_self_reproducing_loop[HEX_ADAM_LOOPX - i - 1][j]; } } break; } #if DEBUGTEST /* (void) printf ("s %d s %d \n", start.x, start.y); */ (void) printf ("%d %d %d %d %d\n", start.x + i + ((lp->bnrows / 2 % 2) ? -j / 2 : -(j + 1) / 2) - lp->bx, start.y + j - lp->by, i, j, hex_self_reproducing_loop[j][i]); /* Draw right away */ drawcell(mi, start.x + i + ((lp->bnrows / 2 % 2) ? -j / 2 : -(j + 1) / 2) - lp->bx, start.y + j - lp->by, hex_self_reproducing_loop[j][i]); #endif } else { switch (dir) { case 0: start.x = (lp->bncols - ADAM_LOOPX) / 2; start.y = (lp->bnrows - ADAM_LOOPY) / 2; dirx.x = 1, dirx.y = 0; diry.x = 0, diry.y = 1; if (lp->mincol > start.x) lp->mincol = start.x; if (lp->minrow > start.y) lp->minrow = start.y; if (lp->maxcol < start.x + ADAM_LOOPX) lp->maxcol = start.x + ADAM_LOOPX; if (lp->maxrow < start.y + ADAM_LOOPY) lp->maxrow = start.y + ADAM_LOOPY; break; case 1: start.x = (lp->bncols + ADAM_LOOPY) / 2; start.y = (lp->bnrows - ADAM_LOOPX) / 2; dirx.x = 0, dirx.y = 1; diry.x = -1, diry.y = 0; if (lp->mincol > start.x - ADAM_LOOPY) lp->mincol = start.x - ADAM_LOOPY; if (lp->minrow > start.y) lp->minrow = start.y; if (lp->maxcol < start.x) lp->maxcol = start.x; if (lp->maxrow < start.y + ADAM_LOOPX) lp->maxrow = start.y + ADAM_LOOPX; break; case 2: start.x = (lp->bncols + ADAM_LOOPX) / 2; start.y = (lp->bnrows + ADAM_LOOPY) / 2; dirx.x = -1, dirx.y = 0; diry.x = 0, diry.y = -1; if (lp->mincol > start.x - ADAM_LOOPX) lp->mincol = start.x - ADAM_LOOPX; if (lp->minrow > start.y - ADAM_LOOPY) lp->minrow = start.y - ADAM_LOOPY; if (lp->maxcol < start.x) lp->maxcol = start.x; if (lp->maxrow < start.y) lp->maxrow = start.y; break; case 3: start.x = (lp->bncols - ADAM_LOOPY) / 2; start.y = (lp->bnrows + ADAM_LOOPX) / 2; dirx.x = 0, dirx.y = -1; diry.x = 1, diry.y = 0; if (lp->mincol > start.x) lp->mincol = start.x; if (lp->minrow > start.y - ADAM_LOOPX) lp->minrow = start.y - ADAM_LOOPX; if (lp->maxcol < start.x + ADAM_LOOPX) lp->maxcol = start.x + ADAM_LOOPX; if (lp->maxrow < start.y) lp->maxrow = start.y; break; } for (j = 0; j < ADAM_LOOPY; j++) for (i = 0; i < ADAM_LOOPX; i++) lp->newcells[lp->bncols * (start.y + dirx.y * i + diry.y * j) + start.x + dirx.x * i + diry.x * j] = (lp->clockwise) ? self_reproducing_loop[j][ADAM_LOOPX - i - 1] : self_reproducing_loop[j][i]; #if DEBUG /* Draw right away */ drawcell(mi, start.x + dirx.x * i + diry.x * j - lp->bx, start.y + dirx.y * i + diry.y * j - lp->by, (lp->clockwise) ? self_reproducing_loop[j][ADAM_LOOPX - i - i] : self_reproducing_loop[j][i]); #endif } } static void do_gen(loopstruct * lp) { int i, j, k; unsigned char *z; unsigned int n[MAXNEIGHBORS]; unsigned int c; #define LOC(X, Y) (*(lp->oldcells + (X) + ((Y) * lp->bncols))) for (j = lp->minrow; j <= lp->maxrow; j++) { for (i = lp->mincol; i <= lp->maxcol; i++) { z = lp->newcells + i + j * lp->bncols; c = LOC(i, j); for (k = 0; k < local_neighbors; k++) { int newi = i, newj = j; position_of_neighbor(k * ANGLES / local_neighbors, &newi, &newj); n[k] = 0; if (withinBounds(lp, newi, newj)) { n[k] = LOC(newi, newj); } } if (local_neighbors == 6) { *z = (lp->clockwise) ? HEX_TABLE_OUT(c, n[5], n[4], n[3], n[2], n[1], n[0]) : HEX_TABLE_OUT(c, n[0], n[1], n[2], n[3], n[4], n[5]); } else { *z = (lp->clockwise) ? TABLE_OUT(c, n[3], n[2], n[1], n[0]) : TABLE_OUT(c, n[0], n[1], n[2], n[3]); } } } } ENTRYPOINT void release_loop (ModeInfo * mi) { if (loops != NULL) { int screen; for (screen = 0; screen < MI_NUM_SCREENS(mi); screen++) free_loop(MI_DISPLAY(mi), &loops[screen]); (void) free((void *) loops); loops = (loopstruct *) NULL; } if (table != NULL) { (void) free((void *) table); table = (unsigned int *) NULL; } } static void *stop_warning_about_triangleUnit_already; ENTRYPOINT void init_loop (ModeInfo * mi) { Display *display = MI_DISPLAY(mi); int i, size = MI_SIZE(mi); loopstruct *lp; stop_warning_about_triangleUnit_already = (void *) &triangleUnit; if (loops == NULL) { if ((loops = (loopstruct *) calloc(MI_NUM_SCREENS(mi), sizeof (loopstruct))) == NULL) return; } lp = &loops[MI_SCREEN(mi)]; lp->redrawing = 0; #ifdef DO_STIPPLE if ((MI_NPIXELS(mi) < COLORS) && (lp->init_bits == 0)) { Window window = MI_WINDOW(mi); XGCValues gcv; if (lp->stippledGC == None) { gcv.fill_style = FillOpaqueStippled; if ((lp->stippledGC = XCreateGC(display, window, GCFillStyle, &gcv)) == None) { free_loop(display, lp); return; } } LOOPBITS(stipples[0], STIPPLESIZE, STIPPLESIZE); LOOPBITS(stipples[2], STIPPLESIZE, STIPPLESIZE); LOOPBITS(stipples[3], STIPPLESIZE, STIPPLESIZE); LOOPBITS(stipples[4], STIPPLESIZE, STIPPLESIZE); LOOPBITS(stipples[6], STIPPLESIZE, STIPPLESIZE); LOOPBITS(stipples[7], STIPPLESIZE, STIPPLESIZE); LOOPBITS(stipples[8], STIPPLESIZE, STIPPLESIZE); LOOPBITS(stipples[10], STIPPLESIZE, STIPPLESIZE); } #endif /* DO_STIPPLE */ if (MI_NPIXELS(mi) >= COLORS) { /* Maybe these colors should be randomized */ lp->colors[0] = MI_BLACK_PIXEL(mi); lp->colors[1] = MI_PIXEL(mi, 0); /* RED */ lp->colors[5] = MI_PIXEL(mi, MI_NPIXELS(mi) / REALCOLORS); /* YELLOW */ lp->colors[4] = MI_PIXEL(mi, 2 * MI_NPIXELS(mi) / REALCOLORS); /* GREEN */ lp->colors[6] = MI_PIXEL(mi, 3 * MI_NPIXELS(mi) / REALCOLORS); /* CYAN */ lp->colors[2] = MI_PIXEL(mi, 4 * MI_NPIXELS(mi) / REALCOLORS); /* BLUE */ lp->colors[3] = MI_PIXEL(mi, 5 * MI_NPIXELS(mi) / REALCOLORS); /* MAGENTA */ lp->colors[7] = MI_WHITE_PIXEL(mi); } free_list(lp); lp->generation = 0; lp->width = MI_WIDTH(mi); lp->height = MI_HEIGHT(mi); if (!local_neighbors) { for (i = 0; i < NEIGHBORKINDS; i++) { if (neighbors == plots[i]) { local_neighbors = neighbors; break; } if (i == NEIGHBORKINDS - 1) { #if 1 local_neighbors = plots[NRAND(NEIGHBORKINDS)]; #else local_neighbors = 4; #endif break; } } } if (local_neighbors == 6) { int nccols, ncrows; if (lp->width < 8) lp->width = 8; if (lp->height < 8) lp->height = 8; if (size < -MINSIZE) { lp->ys = NRAND(MIN(-size, MAX(MINSIZE, MIN(lp->width, lp->height) / HEX_MINGRIDSIZE)) - MINSIZE + 1) + MINSIZE; } else if (size < MINSIZE) { if (!size) lp->ys = MAX(MINSIZE, MIN(lp->width, lp->height) / HEX_MINGRIDSIZE); else lp->ys = MINSIZE; } else lp->ys = MIN(size, MAX(MINSIZE, MIN(lp->width, lp->height) / HEX_MINGRIDSIZE)); lp->xs = lp->ys; nccols = MAX(lp->width / lp->xs - 2, HEX_MINGRIDSIZE); ncrows = MAX(lp->height / lp->ys - 1, HEX_MINGRIDSIZE); lp->ncols = nccols / 2; lp->nrows = ncrows / 2; lp->nrows -= !(lp->nrows & 1); /* Must be odd */ lp->xb = (lp->width - lp->xs * nccols) / 2 + lp->xs; lp->yb = (lp->height - lp->ys * ncrows) / 2 + lp->ys; for (i = 0; i < 6; i++) { lp->shape.hexagon[i].x = (lp->xs - 1) * hexagonUnit[i].x; lp->shape.hexagon[i].y = ((lp->ys - 1) * hexagonUnit[i].y / 2) * 4 / 3; } } else { if (size < -MINSIZE) lp->ys = NRAND(MIN(-size, MAX(MINSIZE, MIN(lp->width, lp->height) / MINGRIDSIZE)) - MINSIZE + 1) + MINSIZE; else if (size < MINSIZE) { if (!size) lp->ys = MAX(MINSIZE, MIN(lp->width, lp->height) / MINGRIDSIZE); else lp->ys = MINSIZE; } else lp->ys = MIN(size, MAX(MINSIZE, MIN(lp->width, lp->height) / MINGRIDSIZE)); lp->xs = lp->ys; lp->ncols = MAX(lp->width / lp->xs, ADAM_LOOPX + 1); lp->nrows = MAX(lp->height / lp->ys, ADAM_LOOPX + 1); lp->xb = (lp->width - lp->xs * lp->ncols) / 2; lp->yb = (lp->height - lp->ys * lp->nrows) / 2; } lp->bx = 1; lp->by = 1; lp->bncols = lp->ncols + 2 * lp->bx; lp->bnrows = lp->nrows + 2 * lp->by; MI_CLEARWINDOW(mi); if (lp->oldcells != NULL) { (void) free((void *) lp->oldcells); lp->oldcells = (unsigned char *) NULL; } if ((lp->oldcells = (unsigned char *) calloc(lp->bncols * lp->bnrows, sizeof (unsigned char))) == NULL) { free_loop(display, lp); return; } if (lp->newcells != NULL) { (void) free((void *) lp->newcells); lp->newcells = (unsigned char *) NULL; } if ((lp->newcells = (unsigned char *) calloc(lp->bncols * lp->bnrows, sizeof (unsigned char))) == NULL) { free_loop(display, lp); return; } if (!init_table()) { release_loop(mi); return; } lp->mincol = lp->bncols - 1; lp->minrow = lp->bnrows - 1; lp->maxcol = 0; lp->maxrow = 0; #ifndef DELAYDEBUGLOOP { int flaws = MI_COUNT(mi); if (flaws < 0) flaws = NRAND(-MI_COUNT(mi) + 1); for (i = 0; i < flaws; i++) { init_flaw(mi); } /* actual flaws might be less since the adam loop done next */ } #endif init_adam(mi); } ENTRYPOINT void draw_loop (ModeInfo * mi) { int offset, i, j; unsigned char *z, *znew; loopstruct *lp; if (loops == NULL) return; lp = &loops[MI_SCREEN(mi)]; if (lp->newcells == NULL) return; MI_IS_DRAWN(mi) = True; lp->dead = True; #ifdef DELAYDEBUGLOOP if (MI_COUNT(mi) && lp->generation > MI_COUNT(mi)) { (void) sleep(DELAYDEBUGLOOP); } #endif for (j = lp->minrow; j <= lp->maxrow; j++) { for (i = lp->mincol; i <= lp->maxcol; i++) { offset = j * lp->bncols + i; z = lp->oldcells + offset; znew = lp->newcells + offset; if (*z != *znew) { lp->dead = False; *z = *znew; if (!addtolist(mi, i - lp->bx, j - lp->by, *znew)) return; if (i == lp->mincol && i > lp->bx) lp->mincol--; if (j == lp->minrow && j > lp->by) lp->minrow--; if (i == lp->maxcol && i < lp->bncols - 2 * lp->bx) lp->maxcol++; if (j == lp->maxrow && j < lp->bnrows - 2 * lp->by) lp->maxrow++; } } } for (i = 0; i < COLORS; i++) if (!draw_state(mi, i)) { free_loop(MI_DISPLAY(mi), lp); return; } if (++lp->generation > MI_CYCLES(mi) || lp->dead) { init_loop(mi); return; } else do_gen(lp); if (lp->redrawing) { for (i = 0; i < REDRAWSTEP; i++) { if ((*(lp->oldcells + lp->redrawpos))) { drawcell(mi, lp->redrawpos % lp->bncols - lp->bx, lp->redrawpos / lp->bncols - lp->by, *(lp->oldcells + lp->redrawpos)); } if (++(lp->redrawpos) >= lp->bncols * (lp->bnrows - lp->bx)) { lp->redrawing = 0; break; } } } } 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) { loopstruct *lp; if (loops == NULL) return; lp = &loops[MI_SCREEN(mi)]; MI_CLEARWINDOW(mi); lp->redrawing = 1; lp->redrawpos = lp->by * lp->ncols + lp->bx; } ENTRYPOINT Bool loop_handle_event (ModeInfo *mi, XEvent *event) { if (screenhack_event_helper (MI_DISPLAY(mi), MI_WINDOW(mi), event)) { reshape_loop (mi, MI_WIDTH(mi), MI_HEIGHT(mi)); return True; } return False; } XSCREENSAVER_MODULE ("Loop", loop) #endif /* MODE_loop */ xscreensaver-5.36/hacks/t3d.c000644 000767 000024 00000056014 12717747765 016122 0ustar00jwzstaff000000 000000 /* t3d -- Flying Balls Clock Demo by Bernd Paysan , paysan@informatik.tu-muenchen.de Copy, modify, and distribute T3D either under GPL version 2 or newer, or under the standard MIT/X license notice. partly based on flying balls demo by Georg Acher, acher@informatik.tu-muenchen.de (developed on HP9000/720 (55 MIPS,20 MFLOPS) ) NO warranty at all ! Complaints to /dev/null ! 4-Jan-99 jwz@jwz.org -- adapted to xscreensaver framework, to take advantage of the command-line options provided by screenhack.c. */ #ifndef HAVE_JWXYZ # define FASTDRAW # define FASTCOPY #endif /* !HAVE_JWXYZ */ #include #include #include /* for localtime() and gettimeofday() */ #include "screenhack.h" #define WIDTH 200 #define HEIGHT 200 #define norm 20.0 #define ROOT 0x1 #define PI M_PI #define TWOPI 2*M_PI #define MIN(i,j) ((i)<(j)?(i):(j)) #define kmax ((st->minutes?60:24)) /* Anzahl der Kugeln */ #define sines 52 /* Werte in der Sinus-Tabelle */ /*-----------------------------------------------------------------*/ #define setink(inkcolor) \ XSetForeground (st->dpy,st->gc,inkcolor) #define drawline(xx1,yy1,xx2,yy2) \ XDrawLine(st->dpy,st->win,st->gc,xx1,yy1,xx2,yy2) #define drawseg(segments,nr_segments) \ XDrawSegments(st->dpy,st->win,st->gc,segments,nr_segments) #define polyfill(ppts,pcount) \ XFillPolygon(st->dpy,st->win,st->gc,ppts,pcount,Convex,CoordModeOrigin) #define frac(argument) argument-floor(argument) #undef ABS #define ABS(x) ((x)<0.0 ? -(x) : (x)) typedef struct { double x,y,z,r,d,r1; int x1,y1; } kugeldat; /* Felder fuer 3D */ struct state { Display *dpy; Window window; int maxk; int timewait; Colormap cmap; double r,g,b; double hue,sat,val; kugeldat kugeln[100]; double a[3],am[3],x[3],y[3],v[3]; double zoom,speed,zaehler,vspeed; double vturn; double sinus[sines]; double cosinus[sines]; int startx,starty; double mag; int minutes; int cycl; double hsvcycl; double movef, wobber, cycle; XWindowAttributes xgwa; GC gc; GC orgc; GC andgc; int scrnWidth, scrnHeight; Pixmap buffer; int fastch; int scrnW2,scrnH2; XColor colors[64]; struct tm *zeit; int planes; Window junk_win,in_win; int px,py,junk; unsigned int kb; int fastdraw; int draw_color; # ifdef FASTDRAW # ifdef FASTCOPY # define sum1ton(a) (((a)*(a)+1)/2) # define fastcw sum1ton(st->fastch) Pixmap fastcircles; Pixmap fastmask; # else /* !FASTCOPY */ XImage* fastcircles[maxfast]; XImage* fastmask[maxfast]; # endif /* !FASTCOPY */ # endif /* FASTDRAW */ }; #define maxfast 100 /* compute time */ static double gettime (struct state *st) { struct timeval time1; struct tm *zeit; time_t lt; #ifdef GETTIMEOFDAY_TWO_ARGS struct timezone zone1; gettimeofday(&time1,&zone1); #else gettimeofday(&time1); #endif lt = time1.tv_sec; /* avoid type cast lossage */ zeit=localtime(<); return (zeit->tm_sec+60*(zeit->tm_min+60*(zeit->tm_hour)) + time1.tv_usec*1.0E-6); } /* --------------------COLORMAP---------------------*/ static void hsv2rgb (double h, double s, double v, double *r, double *g, double *b) { h/=360.0; h=6*(h-floor(h)); if(s==0.0) { *r=*g=*b=v; } else { int i=(int)h; double t,u,w; h=h-floor(h); u=v*(s*(1.0-h)); w=v*(1.0-s); t=v*(s*h+1.0-s); switch(i) { case 0: *r=v; *g=t; *b=w; break; case 1: *r=u; *g=v; *b=w; break; case 2: *r=w; *g=v; *b=t; break; case 3: *r=w; *g=u; *b=v; break; case 4: *r=t; *g=w; *b=v; break; case 5: *r=v; *g=w; *b=u; break; } } #ifdef PRTDBX printf("HSV: %f %f %f to\nRGB: %f %f %f\n",h,s,v,*r,*g,*b); #endif } static void changeColor (struct state *st, double r, double g, double b) { int n,n1; n1=0; for(n=30;n<64;n+=3) { st->colors[n1].red =1023+ n*(int)(1024.*r); st->colors[n1].blue =1023+ n*(int)(1024.*b); st->colors[n1].green =1023+ n*(int)(1024.*g); n1++; } XStoreColors (st->dpy, st->cmap, st->colors, 12); } static void initColor (struct state *st, double r, double g, double b) { int n,n1; unsigned long pixels[12]; unsigned long dummy; st->cmap = st->xgwa.colormap; if(st->hsvcycl!=0.0 && XAllocColorCells(st->dpy, st->cmap, 0, &dummy, 0, pixels, 12)) { for(n1=0;n1<12;n1++) { st->colors[n1].pixel=pixels[n1]; st->colors[n1].flags=DoRed | DoGreen | DoBlue; } changeColor(st,r,g,b); } else { n1=0; for(n=30;n<64;n+=3) { st->colors[n1].red =1023+ n*(int)(1024.*r); st->colors[n1].blue =1023+ n*(int)(1024.*b); st->colors[n1].green =1023+ n*(int)(1024.*g); if (!(XAllocColor (st->dpy, st->cmap, &st->colors[n1]))) { fprintf (stderr, "Error: Cannot allocate colors\n"); exit (1); } n1++; } } } /* ----------------WINDOW-------------------*/ static void initialize (struct state *st) { XGCValues *xgc; XGCValues *xorgc; XGCValues *xandgc; st->maxk=34; st->r = st->g = st->b = 1; st->hue = st->sat = 0; st->val = 1; st->mag = 10; st->movef = 0.5; st->wobber = 2; st->cycle = 6; st->scrnWidth = WIDTH; st->scrnHeight = HEIGHT; XGetWindowAttributes (st->dpy, st->window, &st->xgwa); st->scrnWidth = st->xgwa.width; st->scrnHeight = st->xgwa.height; { float f = get_float_resource (st->dpy, "cycle", "Float"); if (f <= 0 || f > 60) f = 6.0; st->cycle = 60.0 / f; } st->movef = get_float_resource (st->dpy, "move", "Float"); st->wobber = get_float_resource (st->dpy, "wobble", "Float"); { double magfac = get_float_resource (st->dpy, "mag", "Float"); st->mag *= magfac; st->fastch=(int)(st->fastch*magfac); } if (get_boolean_resource (st->dpy, "minutes", "Boolean")) { st->minutes=1; st->maxk+=60-24; } st->timewait = get_integer_resource (st->dpy, "delay", "Integer"); st->fastch = get_integer_resource (st->dpy, "fast", "Integer"); st->cycl = get_boolean_resource (st->dpy, "colcycle", "Integer"); st->hsvcycl = get_float_resource (st->dpy, "hsvcycle", "Integer"); { char *s = get_string_resource (st->dpy, "rgb", "RGB"); char dummy; if (s && *s) { double rr, gg, bb; if (3 == sscanf (s, "%lf %lf %lf %c", &rr, &gg, &bb, &dummy)) st->r = rr, st->g = gg, st->b = bb; } if (s) free (s); s = get_string_resource (st->dpy, "hsv", "HSV"); if (s && *s) { double hh, ss, vv; if (3 == sscanf (s, "%lf %lf %lf %c", &hh, &ss, &vv, &dummy)) { st->hue = hh, st->sat = ss, st->val = vv; hsv2rgb(st->hue,st->sat,st->val,&st->r,&st->g,&st->b); } } if (s) free (s); } if (st->fastch > maxfast) st->fastch=maxfast; xgc=( XGCValues *) malloc(sizeof(XGCValues) ); xorgc=( XGCValues *) malloc(sizeof(XGCValues) ); xandgc=( XGCValues *) malloc(sizeof(XGCValues) ); st->planes=st->xgwa.depth; #ifdef HAVE_JWXYZ # define GXandInverted GXcopy /* #### this can't be right, right? */ #endif st->gc = XCreateGC (st->dpy, st->window, 0, xgc); xorgc->function =GXor; st->orgc = XCreateGC (st->dpy, st->window, GCFunction, xorgc); xandgc->function =GXandInverted; st->andgc = XCreateGC (st->dpy, st->window, GCFunction, xandgc); st->buffer = XCreatePixmap (st->dpy, st->window, st->scrnWidth, st->scrnHeight, st->xgwa.depth); #ifdef DEBUG printf("Time 3D drawing "); #ifdef FASTDRAW # ifdef FASTCOPY puts("fast by Pixmap copy"); # else puts("fast by XImage copy"); # endif #else puts("slow"); #endif #endif /* DEBUG */ #ifdef FASTCOPY st->fastcircles = XCreatePixmap (st->dpy, st->window, fastcw, st->fastch+1, st->xgwa.depth); st->fastmask = XCreatePixmap (st->dpy, st->window, fastcw, st->fastch+1, st->xgwa.depth); #endif setink(BlackPixelOfScreen (st->xgwa.screen)); XFillRectangle (st->dpy, st->buffer , st->gc, 0, 0, st->scrnWidth, st->scrnHeight); #ifdef FASTCOPY setink(0); XFillRectangle (st->dpy, st->fastcircles, st->gc, 0, 0, fastcw, st->fastch+1); XFillRectangle (st->dpy, st->fastmask , st->gc, 0, 0, fastcw, st->fastch+1); #endif #ifdef PRTDBX printf("move\t%.2f\nwobber\t%.2f\nmag\t%.2f\ncycle\t%.4f\n", st->movef,st->wobber,st->mag/10,st->cycle); printf("fast\t%i\nmarks\t%i\nwait\t%i\n",st->fastch,st->maxk,st->timewait); #endif } static void fill_kugel(struct state *st, int i, Pixmap buf, int setcol); /*------------------------------------------------------------------*/ static void init_kugel(struct state *st) { #ifdef FASTDRAW int i; for(i=0; ifastch; i++) { # ifdef FASTCOPY st->kugeln[i].r1=-((double) i)/2 -1; st->kugeln[i].x1=sum1ton(i); st->kugeln[i].y1=((double) i)/2 +1; fill_kugel(st,i,st->fastcircles,1); setink((1<xgwa.depth))-1); fill_kugel(st,i,st->fastmask,0); # else st->kugeln[i].r1=-((double) i)/2 -1; st->kugeln[i].x1=st->kugeln[i].y1=((double) i)/2 +1; fill_kugel(i,st->buffer,1); st->fastcircles[i]=XGetImage(st->dpy,st->buffer,0,0,i+2,i+2,(1<planes)-1,ZPixmap); setink((1<xgwa.depth))-1); fill_kugel(i,st->buffer,0); st->fastmask[i]=XGetImage(st->dpy,st->buffer,0,0,i+2,i+2,(1<planes)-1,ZPixmap); setink(0); XFillRectangle (st->dpy, st->buffer , st->gc, 0, 0, st->scrnWidth, st->scrnHeight); # endif } st->fastdraw=1; #endif } /* Zeiger zeichnen */ static void zeiger(struct state *st, double dist,double rad, double z, double sec, int *q) { int i,n; double gratio=sqrt(2.0/(1.0+sqrt(5.0))); n = *q; for(i=0;i<3;i++) { st->kugeln[n].x=dist*cos(sec); st->kugeln[n].y=-dist*sin(sec); st->kugeln[n].z=z; st->kugeln[n].r=rad; n++; dist += rad; rad = rad*gratio; } *q = n; } /*-----------------------------------------------------------------* * Uhr zeichnen * *-----------------------------------------------------------------*/ static void manipulate(struct state *st, double k) { double i,l,/*xs,*/ys,zs,mod; double /*persec,*/sec,min,hour; int n; sec=TWOPI*modf(k/60,&mod); min=TWOPI*modf(k/3600,&mod); hour=TWOPI*modf(k/43200,&mod); l=TWOPI*modf(k/300,&mod); i=0.0; for (n=0;nkugeln[n].x=4.0*sin(i); st->kugeln[n].y=4.0*cos(i); st->kugeln[n].z=st->wobber* /* (sin(floor(2+2*l/(PI))*i)*sin(2*l)); */ cos((i-sec)*floor(2+5*l/(PI)))*sin(5*l); if(st->minutes) { st->kugeln[n].r=/* (1.0+0.3*cos(floor(2+2*l/(PI))*i)*sin(2*l))* */ ((n % 5!=0) ? 0.3 : 0.6)* ((n % 15 ==0) ? 1.25 : .75); } else { st->kugeln[n].r=/* (1.0+0.3*cos(floor(2+2*l/(PI))*i)*sin(2*l))* */ ((n & 1) ? 0.5 : 1.0)* ((n % 6==0) ? 1.25 : .75); } i+=TWOPI/kmax; } st->kugeln[n].x=0.0; st->kugeln[n].y=0.0; st->kugeln[n].z=0.0; st->kugeln[n].r=2.0+cos(TWOPI*modf(k,&mod))/2; n++; zeiger(st,2.0,0.75,-2.0,sec,&n); zeiger(st,1.0,1.0,-1.5,min,&n); zeiger(st,0.0,1.5,-1.0,hour,&n); for(n=0;nmaxk;n++) { ys=st->kugeln[n].y*cos(st->movef*sin(st->cycle*sec))+ st->kugeln[n].z*sin(st->movef*sin(st->cycle*sec)); zs=-st->kugeln[n].y*sin(st->movef*sin(st->cycle*sec))+ st->kugeln[n].z*cos(st->movef*sin(st->cycle*sec)); st->kugeln[n].y=ys; st->kugeln[n].z=zs; } } /*------------------------------------------------------------------*/ static void t3d_sort(struct state *st, int l, int r) { int i,j; kugeldat ex; double x; i=l;j=r; x=st->kugeln[(l+r)/2].d; while(1) { while(st->kugeln[i].d>x) i++; while(x>st->kugeln[j].d) j--; if (i<=j) { ex=st->kugeln[i];st->kugeln[i]=st->kugeln[j];st->kugeln[j]=ex; i++;j--; } if (i>j) break; } if (lkugeln[i].r1)*2)); if (d==0) d=1; #ifdef FASTDRAW if(st->fastdraw && dfastch) { # ifdef FASTCOPY XCopyArea(st->dpy, st->fastmask, buf, st->andgc, sum1ton(d)-(d+1)/2, 1,d,d, (int)(st->kugeln[i].x1)-d/2, (int)(st->kugeln[i].y1)-d/2); XCopyArea(st->dpy, st->fastcircles, buf, st->orgc, sum1ton(d)-(d+1)/2, 1,d,d, (int)(st->kugeln[i].x1)-d/2, (int)(st->kugeln[i].y1)-d/2); # else XPutImage(st->dpy, buf, st->andgc, st->fastmask[d-1], 0, 0, (int)(st->kugeln[i].x1)-d/2, (int)(st->kugeln[i].y1)-d/2, d, d); XPutImage(st->dpy, buf, st->orgc, st->fastcircles[d-1], 0, 0, (int)(st->kugeln[i].x1)-d/2, (int)(st->kugeln[i].y1)-d/2, d, d); # endif } else #endif { if(ABS(st->kugeln[i].r1)<6.0) inr=9; for (m=0;m<=28;m+=inr) { ra=st->kugeln[i].r1*sqrt(1-m*m/(28.0*28.0)); #ifdef PRTDBX printf("Radius: %f\n",ra); #endif if(-ra< 3.0) inc=14; else if(-ra< 6.0) inc=8; else if(-ra<20.0) inc=4; else if(-ra<40.0) inc=2; if(setcol) { if (m==27) col=33; else col=(int)(m); if (col>33) col=33; col/=3; setink(st->colors[col].pixel); } #ifdef USE_POLYGON { int n, nr; for (n=0,nr=0;n<=sines-1;n+=inc,nr++) { track[nr].x=st->kugeln[i].x1+(int)(ra*st->sinus[n])+(st->kugeln[i].r1-ra)/2; track[nr].y=st->kugeln[i].y1+(int)(ra*st->cosinus[n])+(st->kugeln[i].r1-ra)/2; } XFillPolygon(st->dpy,buf,st->gc,track,nr,Convex,CoordModeOrigin); } #else /* Use XFillArc */ XFillArc(st->dpy, buf, st->gc, (int)(st->kugeln[i].x1+(st->kugeln[i].r1+ra)/2), (int)(st->kugeln[i].y1+(st->kugeln[i].r1+ra)/2), (int)-(2*ra+1), (int)-(2*ra+1), 0, 360*64); #endif } } } /*------------------------------------------------------------------*/ static void init_3d(struct state *st) { double i; int n=0; st->a[0]=0.0; st->a[1]=0.0; st->a[2]=-10.0; st->x[0]=10.0; st->x[1]=0.0; st->x[2]=0.0; st->y[0]=0.0; st->y[1]=10.0; st->y[2]=0.0; st->zoom=-10.0; st->speed=.0; for (i=0.0;nsinus[n]=sin(i); st->cosinus[n]=cos(i); } } /*------------------------------------------------------------------*/ static void vektorprodukt(double feld1[], double feld2[], double feld3[]) { feld3[0]=feld1[1]*feld2[2]-feld1[2]*feld2[1]; feld3[1]=feld1[2]*feld2[0]-feld1[0]*feld2[2]; feld3[2]=feld1[0]*feld2[1]-feld1[1]*feld2[0]; } /*------------------------------------------------------------------*/ static void turn(double feld1[], double feld2[], double winkel) { double temp[3]; double s,ca,sa,sx1,sx2,sx3; vektorprodukt(feld1,feld2,temp); s=feld1[0]*feld2[0]+feld1[1]*feld2[1]+feld1[2]*feld2[2]; sx1=s*feld2[0]; sx2=s*feld2[1]; sx3=s*feld2[2]; sa=sin(winkel);ca=cos(winkel); feld1[0]=ca*(feld1[0]-sx1)+sa*temp[0]+sx1; feld1[1]=ca*(feld1[1]-sx2)+sa*temp[1]+sx2; feld1[2]=ca*(feld1[2]-sx3)+sa*temp[2]+sx3; } /*------------------------------------------------------------------*/ /* 1: Blickrichtung v;3:Ebenenmittelpunkt m double feld1[],feld3[]; */ static void viewpoint(struct state *st) { st->am[0]=-st->zoom*st->v[0]; st->am[1]=-st->zoom*st->v[1]; st->am[2]=-st->zoom*st->v[2]; st->zaehler=norm*norm*st->zoom; } /*------------------------------------------------------------------*/ static void projektion(struct state *st) { double c1[3],c2[3],k[3],x1,y1; double cno,cnorm/*,magnit*/; int i; for (i=0;imaxk;i++) { c1[0]=st->kugeln[i].x-st->a[0]; c1[1]=st->kugeln[i].y-st->a[1]; c1[2]=st->kugeln[i].z-st->a[2]; cnorm=sqrt(c1[0]*c1[0]+c1[1]*c1[1]+c1[2]*c1[2]); c2[0]=c1[0]; c2[1]=c1[1]; c2[2]=c1[2]; cno=c2[0]*st->v[0]+c2[1]*st->v[1]+c2[2]*st->v[2]; st->kugeln[i].d=cnorm; if (cno<0) st->kugeln[i].d=-20.0; st->kugeln[i].r1=(st->mag*st->zoom*st->kugeln[i].r/cnorm); c2[0]=st->v[0]/cno; c2[1]=st->v[1]/cno; c2[2]=st->v[2]/cno; vektorprodukt(c2,c1,k); x1=(st->startx+(st->x[0]*k[0]+st->x[1]*k[1]+st->x[2]*k[2])*st->mag); y1=(st->starty-(st->y[0]*k[0]+st->y[1]*k[1]+st->y[2]*k[2])*st->mag); if( (x1>-2000.0) && (x1scrnWidth+2000.0) && (y1>-2000.0) && (y1scrnHeight+2000.0)) { st->kugeln[i].x1=(int)x1; st->kugeln[i].y1=(int)y1; } else { st->kugeln[i].x1=0; st->kugeln[i].y1=0; st->kugeln[i].d=-20.0; } } } static void * t3d_init (Display *dpy, Window window) { struct state *st = (struct state *) calloc (1, sizeof(*st)); st->dpy = dpy; st->window = window; st->dpy = dpy; st->window = window; initialize(st); initColor(st,st->r,st->g,st->b); init_3d(st); st->zeit=(struct tm *)malloc(sizeof(struct tm)); init_kugel(st); st->startx=st->scrnWidth/2; st->starty=st->scrnHeight/2; st->scrnH2=st->startx; st->scrnW2=st->starty; st->vspeed=0; vektorprodukt(st->x,st->y,st->v); viewpoint(st/*m,v*/); setink (BlackPixelOfScreen(st->xgwa.screen)); XFillRectangle (st->dpy, st->window, st->gc, 0, 0, st->scrnWidth, st->scrnHeight); XQueryPointer (st->dpy, st->window, &st->junk_win, &st->junk_win, &st->junk, &st->junk, &st->px, &st->py, &st->kb); return st; } static unsigned long t3d_draw (Display *d, Window w, void *closure) { struct state *st = (struct state *) closure; double dtime; double vnorm; /*--------------- Zeichenteil --------------*/ vektorprodukt(st->x,st->y,st->v); vnorm=sqrt(st->v[0]*st->v[0]+st->v[1]*st->v[1]+st->v[2]*st->v[2]); st->v[0]=st->v[0]*norm/vnorm; st->v[1]=st->v[1]*norm/vnorm; st->v[2]=st->v[2]*norm/vnorm; vnorm=sqrt(st->x[0]*st->x[0]+st->x[1]*st->x[1]+st->x[2]*st->x[2]); st->x[0]=st->x[0]*norm/vnorm; st->x[1]=st->x[1]*norm/vnorm; st->x[2]=st->x[2]*norm/vnorm; vnorm=sqrt(st->y[0]*st->y[0]+st->y[1]*st->y[1]+st->y[2]*st->y[2]); st->y[0]=st->y[0]*norm/vnorm; st->y[1]=st->y[1]*norm/vnorm; st->y[2]=st->y[2]*norm/vnorm; projektion(st); t3d_sort (st,0,st->maxk-1); dtime=gettime(st); if(st->cycl) { st->draw_color=(int)(64.0*(dtime/60-floor(dtime/60)))-32; if(st->draw_color<0) st->draw_color=-st->draw_color; setink(st->colors[st->draw_color/3].pixel); } else setink(BlackPixelOfScreen (st->xgwa.screen)); XFillRectangle(st->dpy,st->buffer,st->gc,0,0,st->scrnWidth,st->scrnHeight); { int i; manipulate(st,dtime); for (i=0;imaxk;i++) { if (st->kugeln[i].d>0.0) fill_kugel(st,i,st->buffer,1); } } /* manipulate(gettime()); var+=PI/500; if (var>=TWOPI) var=PI/500; */ if(st->hsvcycl!=0.0) { dtime=st->hsvcycl*dtime/10.0+st->hue/360.0; dtime=360*(dtime-floor(dtime)); hsv2rgb(dtime,st->sat,st->val,&st->r,&st->g,&st->b); changeColor(st,st->r,st->g,st->b); } XCopyArea (st->dpy, st->buffer, st->window, st->gc, 0, 0, st->scrnWidth, st->scrnHeight, 0, 0); /*-------------------------------------------------*/ XQueryPointer (st->dpy, st->window, &st->junk_win, &st->in_win, &st->junk, &st->junk, &st->px, &st->py, &st->kb); if ((st->px>0)&&(st->pxscrnWidth)&&(st->py>0)&&(st->pyscrnHeight) ) { if ((st->px !=st->startx)&&(st->kb&Button2Mask)) { /* printf("y=(%f,%f,%f)",y[0],y[1],y[2]);*/ turn(st->y,st->x,((double)(st->px-st->startx))/(8000*st->mag)); /* printf("->(%f,%f,%f)\n",y[0],y[1],y[2]);*/ } if ((st->py !=st->starty)&&(st->kb&Button2Mask)) { /* printf("x=(%f,%f,%f)",x[0],x[1],x[2]);*/ turn(st->x,st->y,((double)(st->py-st->starty))/(-8000*st->mag)); /* printf("->(%f,%f,%f)\n",x[0],x[1],x[2]);*/ } if ((st->kb&Button1Mask)) { if (st->vturn==0.0) st->vturn=.005; else if (st->vturn<2) st->vturn+=.01; turn(st->x,st->v,.002*st->vturn); turn(st->y,st->v,.002*st->vturn); } if ((st->kb&Button3Mask)) { if (st->vturn==0.0) st->vturn=.005; else if (st->vturn<2) st->vturn+=.01; turn(st->x,st->v,-.002*st->vturn); turn(st->y,st->v,-.002*st->vturn); } } if (!(st->kb&Button1Mask)&&!(st->kb&Button3Mask)) st->vturn=0; st->speed=st->speed+st->speed*st->vspeed; if ((st->speed<0.0000001) &&(st->vspeed>0.000001)) st->speed=0.000001; st->vspeed=.1*st->vspeed; if (st->speed>0.01) st->speed=.01; st->a[0]=st->a[0]+st->speed*st->v[0]; st->a[1]=st->a[1]+st->speed*st->v[1]; st->a[2]=st->a[2]+st->speed*st->v[2]; return st->timewait; } static void t3d_reshape (Display *dpy, Window window, void *closure, unsigned int w, unsigned int h) { struct state *st = (struct state *) closure; if (w != st->scrnWidth || h != st->scrnHeight) { XFreePixmap (st->dpy, st->buffer); st->scrnWidth = w; st->scrnHeight = h; st->buffer = XCreatePixmap (st->dpy, st->window, st->scrnWidth, st->scrnHeight, st->xgwa.depth); st->startx=st->scrnWidth/2; st->starty=st->scrnHeight/2; st->scrnH2=st->startx; st->scrnW2=st->starty; } } static Bool t3d_event (Display *dpy, Window window, void *closure, XEvent *event) { struct state *st = (struct state *) closure; if (event->type == KeyPress) { KeySym keysym; char kpr = 0; XLookupString (&event->xkey, &kpr, 1, &keysym, 0); switch (kpr) { case 's': case 'S': st->vspeed = 0.5; return True; case 'a': case 'A': st->vspeed = -0.3; return True; case '0': st->speed = 0; st->vspeed = 0; return True; case 'z': case 'Z': st->mag *= 1.02; return True; case 'x': case 'X': st->mag /= 1.02; return True; default: break; } } return False; } static void t3d_free (Display *dpy, Window window, void *closure) { } /*-------------------------------------------------*/ static const char *t3d_defaults [] = { ".background: black", ".foreground: white", "*move: 0.5", "*wobble: 2.0", "*cycle: 10.0", "*mag: 1.0", "*minutes: False", "*delay: 40000", "*fast: 50", "*colcycle: False", "*hsvcycle: 0.0", "*rgb: ", "*hsv: ", 0 }; static XrmOptionDescRec t3d_options [] = { { "-move", ".move", XrmoptionSepArg, 0 }, { "-wobble", ".wobble", XrmoptionSepArg, 0 }, { "-cycle", ".cycle", XrmoptionSepArg, 0 }, { "-mag", ".mag", XrmoptionSepArg, 0 }, { "-minutes", ".minutes", XrmoptionNoArg, "True" }, { "-no-minutes", ".minutes", XrmoptionNoArg, "False" }, { "-delay", ".delay", XrmoptionSepArg, 0 }, { "-fast", ".fast", XrmoptionSepArg, 0 }, { "-colcycle", ".colcycle", XrmoptionSepArg, 0 }, { "-hsvcycle", ".hsvcycle", XrmoptionSepArg, 0 }, { "-rgb", ".rgb", XrmoptionSepArg, 0 }, { "-hsv", ".hsv", XrmoptionSepArg, 0 }, { 0, 0, 0, 0 } }; XSCREENSAVER_MODULE ("T3D", t3d) xscreensaver-5.36/hacks/penetrate.c000644 000767 000024 00000060715 12717750010 017373 0ustar00jwzstaff000000 000000 /* Copyright (c) 1999 Adam Miller adum@aya.yale.edu * * 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. * penetrate simulates the arcade classic with the cities and the stuff * shooting down from the sky and stuff. The computer plays against itself, * desperately defending the forces of good against those thingies raining * down. Bonus cities are awarded at ever-increasing intervals. Every five * levels appears a bonus round. The computer player gets progressively * more intelligent as the game progresses. Better aim, more economical with * ammo, and better target selection. Points are in the bottom right, and * high score is in the bottom left. Start with -smart to have the computer * player skip the learning process. Version: 0.2 -- fixed an AI bug that was keeping the computer player a tad weak Version: 0.1 -- first release */ #include "screenhack.h" #define kSleepTime 10000 #define font_height(font) (font->ascent + font->descent) #define kCityPause 500000 #define kLevelPause 1 #define SCORE_MISSILE 100 #define kFirstBonus 5000 #define kMinRate 30 #define kMaxRadius 100 typedef struct { int alive; int x, y; int startx, starty; int endx, endy; int dcity; float pos; int enemies; int jenis; int splits; XColor color; } Missile; typedef struct { int alive; int x, y, rad, oflaser; int max, outgoing; XColor color; } Boom; typedef struct { int alive; int x; XColor color; } City; typedef struct { int alive; int x, y; int startx, starty; int endx, endy; int oldx, oldy; int oldx2, oldy2; float velx, vely, fposx, fposy; float lenMul; XColor color; int target; } Laser; #define kMaxMissiles 256 #define kMaxBooms 512 #define kMaxLasers 128 #define kBoomRad 40 #define kNumCities 5 #define kLaserLength 12 #define kMissileSpeed 0.003 #define kLaserSpeed (kMissileSpeed * 6) struct state { Display *dpy; Window window; XFontStruct *font, *scoreFont; GC draw_gc, erase_gc, level_gc; unsigned int default_fg_pixel; XColor scoreColor; int bgrowth; int lrate, startlrate; long loop; long score, highscore; long nextBonus; int numBonus; int bround; long lastLaser; int gamez; int aim; int econpersen; int choosypersen; int carefulpersen; int smart; Colormap cmap; Missile missile[kMaxMissiles]; Boom boom[kMaxBooms]; City city[kNumCities]; Laser laser[kMaxLasers]; int blive[kNumCities]; int level, levMissiles, levFreq; int draw_xlim, draw_ylim; int draw_reset; }; static void Explode(struct state *st, int x, int y, int max, XColor color, int oflaser) { int i; Boom *m = 0; for (i=0;iboom[i].alive) { m = &st->boom[i]; break; } if (!m) return; m->alive = 1; m->x = x; m->y = y; m->rad = 0; if (max > kMaxRadius) max = kMaxRadius; m->max = max; m->outgoing = 1; m->color = color; m->oflaser = oflaser; } static void launch (struct state *st, int xlim, int ylim, int src) { int i; Missile *m = 0, *msrc; for (i=0;imissile[i].alive) { m = &st->missile[i]; break; } if (!m) return; m->alive = 1; m->startx = (random() % xlim); m->starty = 0; m->endy = ylim; m->pos = 0.0; m->jenis = random() % 360; m->splits = 0; if (m->jenis < 50) { int j = ylim * 0.4; if (j) { m->splits = random() % j; if (m->splits < ylim * 0.08) m->splits = 0; } } /* special if we're from another missile */ if (src >= 0) { int dc = random() % (kNumCities - 1); msrc = &st->missile[src]; if (dc == msrc->dcity) dc++; m->dcity = dc; m->startx = msrc->x; m->starty = msrc->y; if (m->starty > ylim * 0.4 || m->splits <= m->starty) m->splits = 0; /* too far down already */ m->jenis = msrc->jenis; } else m->dcity = random() % kNumCities; m->endx = st->city[m->dcity].x + (random() % 20) - 10; m->x = m->startx; m->y = m->starty; m->enemies = 0; if (!mono_p) { hsv_to_rgb (m->jenis, 1.0, 1.0, &m->color.red, &m->color.green, &m->color.blue); m->color.flags = DoRed | DoGreen | DoBlue; if (!XAllocColor (st->dpy, st->cmap, &m->color)) { m->color.pixel = WhitePixel (st->dpy, DefaultScreen (st->dpy)); m->color.red = m->color.green = m->color.blue = 0xFFFF; } } } #define kExpHelp 0.2 #define kSpeedDiff 3.5 #define kMaxToGround 0.75 static int fire(struct state *st, int xlim, int ylim) { int i, j, cnt = 0; int dcity; long dx, dy, ex, ey; Missile *mis = 0; Laser *m = 0; int untargeted = 0; int choosy = 0, economic = 0, careful = 0; int suitor[kMaxMissiles]; int livecity = 0; int ytargetmin = ylim * 0.75; int deepest = 0; int misnum = 0; choosy = (random() % 100) < st->choosypersen; economic = (random() % 100) < st->econpersen; careful = (random() % 100) < st->carefulpersen; /* count our cities */ for (i=0;icity[i].alive; if (livecity == 0) return 1; /* no guns */ for (i=0;ilaser[i].alive) { m = &st->laser[i]; break; } if (!m) return 1; /* if no missiles on target, no need to be choosy */ if (choosy) { int choo = 0; for (j=0;jmissile[j]; if (!mis->alive || (mis->y > ytargetmin)) continue; if (st->city[mis->dcity].alive) choo++; } if (choo == 0) choosy = 0; } for (j=0;jmissile[j]; suitor[j] = 0; if (!mis->alive || (mis->y > ytargetmin)) continue; if (choosy && (st->city[mis->dcity].alive == 0)) continue; ey = mis->starty + ((float) (mis->endy - mis->starty)) * (mis->pos + kExpHelp + (1.0 - mis->pos) / kSpeedDiff); if (ey > ylim * kMaxToGround) continue; /* too far down */ cnt++; suitor[j] = 1; } /* count missiles that are on target and not being targeted */ if (choosy && economic) for (j=0;jmissile[j].enemies == 0) untargeted++; if (economic) for (j=0;j 1) if (st->missile[j].enemies > 0) if (st->missile[j].enemies > 1 || untargeted == 0) { suitor[j] = 0; cnt--; } /* who's closest? biggest threat */ if (suitor[j] && st->missile[j].y > deepest) deepest = st->missile[j].y; } if (deepest > 0 && careful) { /* only target deepest missile */ cnt = 1; for (j=0;jmissile[j].y != deepest) suitor[j] = 0; } if (cnt == 0) return 1; /* no targets available */ cnt = random() % cnt; for (j=0;jmissile[j]; misnum = j; break; } if (mis == 0) return 1; /* shouldn't happen */ dcity = random() % livecity; for (j=0;jcity[j].alive) if (dcity-- == 0) { dcity = j; break; } m->startx = st->city[dcity].x; m->starty = ylim; ex = mis->startx + ((float) (mis->endx - mis->startx)) * (mis->pos + kExpHelp + (1.0 - mis->pos) / kSpeedDiff); ey = mis->starty + ((float) (mis->endy - mis->starty)) * (mis->pos + kExpHelp + (1.0 - mis->pos) / kSpeedDiff); m->endx = ex + random() % 16 - 8 + (random() % st->aim) - st->aim / 2; m->endy = ey + random() % 16 - 8 + (random() % st->aim) - st->aim / 2; if (ey > ylim * kMaxToGround) return 0; /* too far down */ mis->enemies++; m->target = misnum; m->x = m->startx; m->y = m->starty; m->oldx = -1; m->oldy = -1; m->oldx2 = -1; m->oldy2 = -1; m->fposx = m->x; m->fposy = m->y; dx = (m->endx - m->x); dy = (m->endy - m->y); m->velx = dx / 100.0; m->vely = dy / 100.0; m->alive = 1; /* m->lenMul = (kLaserLength * kLaserLength) / (m->velx * m->velx + m->vely * m->vely); */ m->lenMul = -(kLaserLength / m->vely); if (!mono_p) { m->color.blue = 0x0000; m->color.green = 0xFFFF; m->color.red = 0xFFFF; m->color.flags = DoRed | DoGreen | DoBlue; if (!XAllocColor (st->dpy, st->cmap, &m->color)) { m->color.pixel = WhitePixel (st->dpy, DefaultScreen (st->dpy)); m->color.red = m->color.green = m->color.blue = 0xFFFF; } } return 1; } static void * penetrate_init (Display *dpy, Window window) { struct state *st = (struct state *) calloc (1, sizeof(*st)); int i; const char *levelfont = "-*-courier-*-r-*-*-*-380-*-*-*-*-*-*"; const char *scorefont = "-*-helvetica-*-r-*-*-*-180-*-*-*-*-*-*"; XGCValues gcv; XWindowAttributes xgwa; st->dpy = dpy; st->window = window; XGetWindowAttributes (st->dpy, st->window, &xgwa); st->cmap = xgwa.colormap; st->lrate = 80; st->nextBonus = kFirstBonus; st->aim = 180; st->smart = get_boolean_resource(st->dpy, "smart","Boolean"); st->bgrowth = get_integer_resource (st->dpy, "bgrowth", "Integer"); st->lrate = get_integer_resource (st->dpy, "lrate", "Integer"); if (st->bgrowth < 0) st->bgrowth = 2; if (st->lrate < 0) st->lrate = 2; st->startlrate = st->lrate; st->font = XLoadQueryFont(st->dpy, levelfont); if (!st->font) { fprintf (stderr, "%s: could not load font %s.\n", progname, levelfont); st->font = XLoadQueryFont(st->dpy, scorefont); if (! st->font) st->font = XLoadQueryFont(st->dpy, "fixed"); if (! st->font) abort(); } st->scoreFont = XLoadQueryFont(st->dpy, scorefont); if (!st->scoreFont) { fprintf (stderr, "%s: could not load font %s.\n", progname, scorefont); st->scoreFont = XLoadQueryFont(st->dpy, levelfont); if (! st->scoreFont) st->scoreFont = XLoadQueryFont(st->dpy, "fixed"); if (! st->scoreFont) abort(); } for (i = 0; i < kMaxMissiles; i++) st->missile[i].alive = 0; for (i = 0; i < kMaxLasers; i++) st->laser[i].alive = 0; for (i = 0; i < kMaxBooms; i++) st->boom[i].alive = 0; for (i = 0; i < kNumCities; i++) { City *m = &st->city[i]; m->alive = 1; m->color.red = m->color.green = m->color.blue = 0xFFFF; m->color.blue = 0x1111; m->color.green = 0x8888; m->color.flags = DoRed | DoGreen | DoBlue; if (!XAllocColor (st->dpy, st->cmap, &m->color)) { m->color.pixel = WhitePixel (st->dpy, DefaultScreen (st->dpy)); m->color.red = m->color.green = m->color.blue = 0xFFFF; } } gcv.foreground = st->default_fg_pixel = get_pixel_resource(st->dpy, st->cmap, "foreground", "Foreground"); gcv.font = st->scoreFont->fid; st->draw_gc = XCreateGC(st->dpy, st->window, GCForeground | GCFont, &gcv); gcv.font = st->font->fid; st->level_gc = XCreateGC(st->dpy, st->window, GCForeground | GCFont, &gcv); XSetForeground (st->dpy, st->level_gc, st->city[0].color.pixel); gcv.foreground = get_pixel_resource(st->dpy, st->cmap, "background", "Background"); st->erase_gc = XCreateGC(st->dpy, st->window, GCForeground, &gcv); # ifdef HAVE_JWXYZ jwxyz_XSetAntiAliasing (st->dpy, st->erase_gc, False); jwxyz_XSetAntiAliasing (st->dpy, st->draw_gc, False); # endif /* make a gray color for score */ if (!mono_p) { st->scoreColor.red = st->scoreColor.green = st->scoreColor.blue = 0xAAAA; st->scoreColor.flags = DoRed | DoGreen | DoBlue; if (!XAllocColor (st->dpy, st->cmap, &st->scoreColor)) { st->scoreColor.pixel = WhitePixel (st->dpy, DefaultScreen (st->dpy)); st->scoreColor.red = st->scoreColor.green = st->scoreColor.blue = 0xFFFF; } } XClearWindow(st->dpy, st->window); return st; } static void DrawScore(struct state *st, int xlim, int ylim) { char buf[16]; int width, height; sprintf(buf, "%ld", st->score); width = XTextWidth(st->scoreFont, buf, strlen(buf)); height = font_height(st->scoreFont); XSetForeground (st->dpy, st->draw_gc, st->scoreColor.pixel); XFillRectangle(st->dpy, st->window, st->erase_gc, xlim - width - 6, ylim - height - 2, width + 6, height + 2); XDrawString(st->dpy, st->window, st->draw_gc, xlim - width - 2, ylim - 2, buf, strlen(buf)); sprintf(buf, "%ld", st->highscore); width = XTextWidth(st->scoreFont, buf, strlen(buf)); XFillRectangle(st->dpy, st->window, st->erase_gc, 4, ylim - height - 2, width + 4, height + 2); XDrawString(st->dpy, st->window, st->draw_gc, 4, ylim - 2, buf, strlen(buf)); } static void AddScore(struct state *st, int xlim, int ylim, long dif) { int i, sumlive = 0; for (i=0;icity[i].alive; if (sumlive == 0) return; /* no cities, not possible to score */ st->score += dif; if (st->score > st->highscore) st->highscore = st->score; DrawScore(st, xlim, ylim); } static void DrawCity(struct state *st, int x, int y, XColor col) { XSetForeground (st->dpy, st->draw_gc, col.pixel); XFillRectangle(st->dpy, st->window, st->draw_gc, x - 30, y - 40, 60, 40); XFillRectangle(st->dpy, st->window, st->draw_gc, x - 20, y - 50, 10, 10); XFillRectangle(st->dpy, st->window, st->draw_gc, x + 10, y - 50, 10, 10); } static void DrawCities(struct state *st, int xlim, int ylim) { int i, x; for (i = 0; i < kNumCities; i++) { City *m = &st->city[i]; if (!m->alive) continue; x = (i + 1) * (xlim / (kNumCities + 1)); m->x = x; DrawCity(st, x, ylim, m->color); } } static void LoopMissiles(struct state *st, int xlim, int ylim) { int i, j, max = 0; for (i = 0; i < kMaxMissiles; i++) { int old_x, old_y; Missile *m = &st->missile[i]; if (!m->alive) continue; old_x = m->x; old_y = m->y; m->pos += kMissileSpeed; m->x = m->startx + ((float) (m->endx - m->startx)) * m->pos; m->y = m->starty + ((float) (m->endy - m->starty)) * m->pos; /* erase old one */ XSetLineAttributes(st->dpy, st->draw_gc, 4, 0,0,0); XSetForeground (st->dpy, st->draw_gc, m->color.pixel); XDrawLine(st->dpy, st->window, st->draw_gc, old_x, old_y, m->x, m->y); /* maybe split off a new missile? */ if (m->splits && (m->y > m->splits)) { m->splits = 0; launch(st, xlim, ylim, i); } if (m->y >= ylim) { m->alive = 0; if (st->city[m->dcity].alive) { st->city[m->dcity].alive = 0; Explode(st, m->x, m->y, kBoomRad * 2, m->color, 0); } } /* check hitting explosions */ for (j=0;jboom[j]; if (!b->alive) continue; else { int dx = abs(m->x - b->x); int dy = abs(m->y - b->y); int r = b->rad + 2; if ((dx < r) && (dy < r)) if (dx * dx + dy * dy < r * r) { m->alive = 0; max = b->max + st->bgrowth - kBoomRad; AddScore(st, xlim, ylim, SCORE_MISSILE); } } } if (m->alive == 0) { float my_pos; /* we just died */ Explode(st, m->x, m->y, kBoomRad + max, m->color, 0); XSetLineAttributes(st->dpy, st->erase_gc, 4, 0,0,0); /* In a perfect world, we could simply erase a line from (m->startx, m->starty) to (m->x, m->y). This is not a perfect world. */ old_x = m->startx; old_y = m->starty; my_pos = kMissileSpeed; while (my_pos <= m->pos) { m->x = m->startx + ((float) (m->endx - m->startx)) * my_pos; m->y = m->starty + ((float) (m->endy - m->starty)) * my_pos; XDrawLine(st->dpy, st->window, st->erase_gc, old_x, old_y, m->x, m->y); old_x = m->x; old_y = m->y; my_pos += kMissileSpeed; } } } } static void LoopLasers(struct state *st, int xlim, int ylim) { int i, j, miny = ylim * 0.8; int x, y; for (i = 0; i < kMaxLasers; i++) { Laser *m = &st->laser[i]; if (!m->alive) continue; if (m->oldx != -1) { XSetLineAttributes(st->dpy, st->erase_gc, 2, 0,0,0); XDrawLine(st->dpy, st->window, st->erase_gc, m->oldx2, m->oldy2, m->oldx, m->oldy); } m->fposx += m->velx; m->fposy += m->vely; m->x = m->fposx; m->y = m->fposy; x = m->fposx + (-m->velx * m->lenMul); y = m->fposy + (-m->vely * m->lenMul); m->oldx = x; m->oldy = y; XSetLineAttributes(st->dpy, st->draw_gc, 2, 0,0,0); XSetForeground (st->dpy, st->draw_gc, m->color.pixel); XDrawLine(st->dpy, st->window, st->draw_gc, m->x, m->y, x, y); m->oldx2 = m->x; m->oldy2 = m->y; m->oldx = x; m->oldy = y; if (m->y < m->endy) { m->alive = 0; } /* check hitting explosions */ if (m->y < miny) for (j=0;jboom[j]; if (!b->alive) continue; else { int dx = abs(m->x - b->x); int dy = abs(m->y - b->y); int r = b->rad + 2; if (b->oflaser) continue; if ((dx < r) && (dy < r)) if (dx * dx + dy * dy < r * r) { m->alive = 0; /* one less enemy on this missile -- it probably didn't make it */ if (st->missile[m->target].alive) st->missile[m->target].enemies--; } } } if (m->alive == 0) { /* we just died */ XDrawLine(st->dpy, st->window, st->erase_gc, m->x, m->y, x, y); Explode(st, m->x, m->y, kBoomRad, m->color, 1); } } } static void LoopBooms(struct state *st, int xlim, int ylim) { int i; for (i = 0; i < kMaxBooms; i++) { Boom *m = &st->boom[i]; if (!m->alive) continue; if (st->loop & 1) { if (m->outgoing) { m->rad++; if (m->rad >= m->max) m->outgoing = 0; XSetLineAttributes(st->dpy, st->draw_gc, 1, 0,0,0); XSetForeground (st->dpy, st->draw_gc, m->color.pixel); XDrawArc(st->dpy, st->window, st->draw_gc, m->x - m->rad, m->y - m->rad, m->rad * 2, m->rad * 2, 0, 360 * 64); } else { XSetLineAttributes(st->dpy, st->erase_gc, 1, 0,0,0); XDrawArc(st->dpy, st->window, st->erase_gc, m->x - m->rad, m->y - m->rad, m->rad * 2, m->rad * 2, 0, 360 * 64); m->rad--; if (m->rad <= 0) m->alive = 0; } } } } /* after they die, let's change a few things */ static void Improve(struct state *st) { if (st->smart) return; if (st->level > 20) return; /* no need, really */ st->aim -= 4; if (st->level <= 2) st->aim -= 8; if (st->level <= 5) st->aim -= 6; if (st->gamez < 3) st->aim -= 10; st->carefulpersen += 6; st->choosypersen += 4; if (st->level <= 5) st->choosypersen += 3; st->econpersen += 4; st->lrate -= 2; if (st->startlrate < kMinRate) { if (st->lrate < st->startlrate) st->lrate = st->startlrate; } else { if (st->lrate < kMinRate) st->lrate = kMinRate; } if (st->level <= 5) st->econpersen += 3; if (st->aim < 1) st->aim = 1; if (st->choosypersen > 100) st->choosypersen = 100; if (st->carefulpersen > 100) st->carefulpersen = 100; if (st->econpersen > 100) st->econpersen = 100; } static void NewLevel(struct state *st, int xlim, int ylim) { char buf[32]; int width, i, sumlive = 0; int liv[kNumCities]; int freecity = 0; if (st->level == 0) { st->level++; goto END_LEVEL; } /* check for a free city */ if (st->score >= st->nextBonus) { st->numBonus++; st->nextBonus += kFirstBonus * st->numBonus; freecity = 1; } for (i=0;ibround) st->city[i].alive = st->blive[i]; liv[i] = st->city[i].alive; sumlive += liv[i]; if (!st->bround) st->city[i].alive = 0; } /* print out screen */ XFillRectangle(st->dpy, st->window, st->erase_gc, 0, 0, xlim, ylim); if (st->bround) sprintf(buf, "Bonus Round Over"); else { if (sumlive || freecity) sprintf(buf, "Level %d Cleared", st->level); else sprintf(buf, "GAME OVER"); } if (st->level > 0) { width = XTextWidth(st->font, buf, strlen(buf)); XDrawString(st->dpy, st->window, st->level_gc, xlim / 2 - width / 2, ylim / 2 - font_height(st->font) / 2, buf, strlen(buf)); XSync(st->dpy, False); usleep(1000000); } if (!st->bround) { if (sumlive || freecity) { int sumwidth; /* draw live cities */ XFillRectangle(st->dpy, st->window, st->erase_gc, 0, ylim - 100, xlim, 100); sprintf(buf, "X %ld", st->level * 100L); /* how much they get */ sumwidth = XTextWidth(st->font, buf, strlen(buf)); /* add width of city */ sumwidth += 60; /* add spacer */ sumwidth += 40; DrawCity(st, xlim / 2 - sumwidth / 2 + 30, ylim * 0.70, st->city[0].color); XDrawString(st->dpy, st->window, st->level_gc, xlim / 2 - sumwidth / 2 + 40 + 60, ylim * 0.7, buf, strlen(buf)); for (i=0;icity[i].alive = 1; AddScore(st, xlim, ylim, 100 * st->level); DrawCities(st, xlim, ylim); XSync(st->dpy, False); usleep(kCityPause); } } } else { /* we're dead */ usleep(3000000); /* start new */ st->gamez++; Improve(st); for (i=0;icity[i].alive = 1; st->level = 0; st->loop = 1; st->score = 0; st->nextBonus = kFirstBonus; st->numBonus = 0; DrawCities(st, xlim, ylim); } } /* do free city part */ if (freecity && sumlive < 5) { int ncnt = random() % (5 - sumlive) + 1; for (i=0;icity[i].alive) if (!--ncnt) st->city[i].alive = 1; strcpy(buf, "Bonus City"); width = XTextWidth(st->font, buf, strlen(buf)); XDrawString(st->dpy, st->window, st->level_gc, xlim / 2 - width / 2, ylim / 4, buf, strlen(buf)); DrawCities(st, xlim, ylim); XSync(st->dpy, False); usleep(1000000); } XFillRectangle(st->dpy, st->window, st->erase_gc, 0, 0, xlim, ylim - 100); if (!st->bround) st->level++; if (st->level == 1) { st->nextBonus = kFirstBonus; } if (st->level > 3 && (st->level % 5 == 1)) { if (st->bround) { st->bround = 0; DrawCities(st, xlim, ylim); } else { /* bonus round */ st->bround = 1; st->levMissiles = 20 + st->level * 10; st->levFreq = 10; for (i=0;iblive[i] = st->city[i].alive; sprintf(buf, "Bonus Round"); width = XTextWidth(st->font, buf, strlen(buf)); XDrawString(st->dpy, st->window, st->level_gc, xlim / 2 - width / 2, ylim / 2 - font_height(st->font) / 2, buf, strlen(buf)); XSync(st->dpy, False); usleep(1000000); XFillRectangle(st->dpy, st->window, st->erase_gc, 0, 0, xlim, ylim - 100); } } END_LEVEL: ; if (!st->bround) { st->levMissiles = 5 + st->level * 3; if (st->level > 5) st->levMissiles += st->level * 5; /* levMissiles = 2; */ st->levFreq = 120 - st->level * 5; if (st->levFreq < 30) st->levFreq = 30; } /* ready to fire */ st->lastLaser = 0; } static unsigned long penetrate_draw (Display *dpy, Window window, void *closure) { struct state *st = (struct state *) closure; XWindowAttributes xgwa; if (st->draw_reset) { st->draw_reset = 0; DrawCities(st, st->draw_xlim, st->draw_ylim); } XGetWindowAttributes(st->dpy, st->window, &xgwa); st->draw_xlim = xgwa.width; st->draw_ylim = xgwa.height; /* see if just started */ if (st->loop == 0) { if (st->smart) { st->choosypersen = st->econpersen = st->carefulpersen = 100; st->lrate = kMinRate; st->aim = 1; } NewLevel(st, st->draw_xlim, st->draw_ylim); DrawScore(st, st->draw_xlim, st->draw_ylim); } st->loop++; if (st->levMissiles == 0) { /* see if anything's still on the screen, to know when to end level */ int i; for (i=0;imissile[i].alive) goto END_CHECK; for (i=0;iboom[i].alive) goto END_CHECK; for (i=0;ilaser[i].alive) goto END_CHECK; /* okay, nothing's alive, start end of level countdown */ usleep(kLevelPause*1000000); NewLevel(st, st->draw_xlim, st->draw_ylim); goto END; END_CHECK: ; } else if ((random() % st->levFreq) == 0) { launch(st, st->draw_xlim, st->draw_ylim, -1); st->levMissiles--; } if (st->loop - st->lastLaser >= st->lrate) { if (fire(st, st->draw_xlim, st->draw_ylim)) st->lastLaser = st->loop; } if ((st->loop & 7) == 0) st->draw_reset = 1; LoopMissiles(st, st->draw_xlim, st->draw_ylim); LoopLasers(st, st->draw_xlim, st->draw_ylim); LoopBooms(st, st->draw_xlim, st->draw_ylim); END: return kSleepTime; } static void penetrate_reshape (Display *dpy, Window window, void *closure, unsigned int w, unsigned int h) { XClearWindow (dpy, window); } static Bool penetrate_event (Display *dpy, Window window, void *closure, XEvent *event) { return False; } static void penetrate_free (Display *dpy, Window window, void *closure) { struct state *st = (struct state *) closure; free (st); } static const char *penetrate_defaults [] = { ".background: black", ".foreground: white", "*fpsTop: true", "*fpsSolid: true", "*bgrowth: 5", "*lrate: 80", "*smart: False", 0 }; static XrmOptionDescRec penetrate_options [] = { { "-bgrowth", ".bgrowth", XrmoptionSepArg, 0 }, { "-lrate", ".lrate", XrmoptionSepArg, 0 }, {"-smart", ".smart", XrmoptionNoArg, "True" }, { 0, 0, 0, 0 } }; XSCREENSAVER_MODULE ("Penetrate", penetrate) xscreensaver-5.36/hacks/deluxe.c000644 000767 000024 00000032337 12710314206 016665 0ustar00jwzstaff000000 000000 /* xscreensaver, Copyright (c) 1999-2013 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. */ #include #include "screenhack.h" #include "alpha.h" #ifdef HAVE_DOUBLE_BUFFER_EXTENSION # include "xdbe.h" #endif /* HAVE_DOUBLE_BUFFER_EXTENSION */ #define countof(x) (sizeof(x)/sizeof(*(x))) #define ABS(x) ((x)<0?-(x):(x)) struct state { Display *dpy; Window window; Bool transparent_p; int nplanes; unsigned long base_pixel, *plane_masks; int count; int delay; int ncolors; Bool dbuf; XColor *colors; GC erase_gc; struct throbber **throbbers; XWindowAttributes xgwa; Pixmap b, ba, bb; /* double-buffer to reduce flicker */ # ifdef HAVE_DOUBLE_BUFFER_EXTENSION Bool dbeclear_p; XdbeBackBuffer backb; # endif /* HAVE_DOUBLE_BUFFER_EXTENSION */ }; struct throbber { int x, y; int size; int max_size; int thickness; int speed; int fuse; GC gc; void (*draw) (struct state *, Drawable, struct throbber *); }; static void draw_star (struct state *st, Drawable w, struct throbber *t) { XPoint points[11]; int x = t->x; int y = t->y; /* The following constant is really: sqrt(5 - sqrt(5)) / sqrt(25 - 11 * sqrt(5)) Reference: http://mathworld.wolfram.com/Pentagram.html */ int s = t->size * 2.6180339887498985; int s2 = t->size; double c = M_PI * 2; double o = -M_PI / 2; points[0].x = x + s * cos(o + 0.0*c); points[0].y = y + s * sin(o + 0.0*c); points[1].x = x + s2 * cos(o + 0.1*c); points[1].y = y + s2 * sin(o + 0.1*c); points[2].x = x + s * cos(o + 0.2*c); points[2].y = y + s * sin(o + 0.2*c); points[3].x = x + s2 * cos(o + 0.3*c); points[3].y = y + s2 * sin(o + 0.3*c); points[4].x = x + s * cos(o + 0.4*c); points[4].y = y + s * sin(o + 0.4*c); points[5].x = x + s2 * cos(o + 0.5*c); points[5].y = y + s2 * sin(o + 0.5*c); points[6].x = x + s * cos(o + 0.6*c); points[6].y = y + s * sin(o + 0.6*c); points[7].x = x + s2 * cos(o + 0.7*c); points[7].y = y + s2 * sin(o + 0.7*c); points[8].x = x + s * cos(o + 0.8*c); points[8].y = y + s * sin(o + 0.8*c); points[9].x = x + s2 * cos(o + 0.9*c); points[9].y = y + s2 * sin(o + 0.9*c); points[10] = points[0]; XDrawLines (st->dpy, w, t->gc, points, countof(points), CoordModeOrigin); } static void draw_circle (struct state *st, Drawable w, struct throbber *t) { XDrawArc (st->dpy, w, t->gc, t->x - t->size / 2, t->y - t->size / 2, t->size, t->size, 0, 360*64); } static void draw_hlines (struct state *st, Drawable w, struct throbber *t) { XDrawLine (st->dpy, w, t->gc, 0, t->y - t->size, t->max_size, t->y - t->size); XDrawLine (st->dpy, w, t->gc, 0, t->y + t->size, t->max_size, t->y + t->size); } static void draw_vlines (struct state *st, Drawable w, struct throbber *t) { XDrawLine (st->dpy, w, t->gc, t->x - t->size, 0, t->x - t->size, t->max_size); XDrawLine (st->dpy, w, t->gc, t->x + t->size, 0, t->x + t->size, t->max_size); } static void draw_corners (struct state *st, Drawable w, struct throbber *t) { int s = (t->size + t->thickness) / 2; XPoint points[3]; if (t->y > s) { points[0].x = 0; points[0].y = t->y - s; points[1].x = t->x - s; points[1].y = t->y - s; points[2].x = t->x - s; points[2].y = 0; XDrawLines (st->dpy, w, t->gc, points, countof(points), CoordModeOrigin); points[0].x = t->x + s; points[0].y = 0; points[1].x = t->x + s; points[1].y = t->y - s; points[2].x = t->max_size; points[2].y = t->y - s; XDrawLines (st->dpy, w, t->gc, points, countof(points), CoordModeOrigin); } if (t->x > s) { points[0].x = 0; points[0].y = t->y + s; points[1].x = t->x - s; points[1].y = t->y + s; points[2].x = t->x - s; points[2].y = t->max_size; XDrawLines (st->dpy, w, t->gc, points, countof(points), CoordModeOrigin); points[0].x = t->x + s; points[0].y = t->max_size; points[1].x = t->x + s; points[1].y = t->y + s; points[2].x = t->max_size; points[2].y = t->y + s; XDrawLines (st->dpy, w, t->gc, points, countof(points), CoordModeOrigin); } } static struct throbber * make_throbber (struct state *st, Drawable d, int w, int h, unsigned long pixel) { XGCValues gcv; unsigned long flags; struct throbber *t = (struct throbber *) malloc (sizeof (*t)); t->x = w / 2; t->y = h / 2; t->max_size = (w > h ? w : h); t->speed = get_integer_resource (st->dpy, "speed", "Speed"); t->fuse = 1 + (random() % 4); t->thickness = get_integer_resource (st->dpy, "thickness", "Thickness"); if (t->speed < 0) t->speed = -t->speed; t->speed += (((random() % t->speed) / 2) - (t->speed / 2)); if (t->speed > 0) t->speed = -t->speed; flags = GCForeground; # ifndef HAVE_JWXYZ if (st->transparent_p) { gcv.foreground = ~0L; gcv.plane_mask = st->base_pixel | st->plane_masks[random() % st->nplanes]; flags |= GCPlaneMask; } else # endif /* !HAVE_JWXYZ */ { gcv.foreground = pixel; } gcv.line_width = t->thickness; gcv.cap_style = CapProjecting; gcv.join_style = JoinMiter; flags |= (GCLineWidth | GCCapStyle | GCJoinStyle); t->gc = XCreateGC (st->dpy, d, flags, &gcv); # ifdef HAVE_JWXYZ if (st->transparent_p) { /* give a non-opaque alpha to the color */ unsigned long pixel = gcv.foreground; unsigned long amask = BlackPixelOfScreen (st->xgwa.screen); unsigned long a = (0xCCCCCCCC & amask); pixel = (pixel & (~amask)) | a; jwxyz_XSetAlphaAllowed (st->dpy, t->gc, True); XSetForeground (st->dpy, t->gc, pixel); } # endif /* HAVE_JWXYZ */ switch (random() % 11) { case 0: case 1: case 2: case 3: t->draw = draw_star; break; case 4: case 5: case 6: case 7: t->draw = draw_circle; break; case 8: t->draw = draw_hlines; break; case 9: t->draw = draw_vlines; break; case 10: t->draw = draw_corners; break; default: abort(); break; } if (t->draw == draw_circle) t->max_size *= 1.5; if (random() % 4) t->size = t->max_size; else t->size = t->thickness, t->speed = -t->speed; return t; } static int throb (struct state *st, Drawable window, struct throbber *t) { t->size += t->speed; if (t->size <= (t->thickness / 2)) { t->speed = -t->speed; t->size += (t->speed * 2); } else if (t->size > t->max_size) { t->speed = -t->speed; t->size += (t->speed * 2); t->fuse--; } if (t->fuse <= 0) { XFreeGC (st->dpy, t->gc); memset (t, 0, sizeof(*t)); free (t); return -1; } else { t->draw (st, window, t); return 0; } } static void * deluxe_init (Display *dpy, Window window) { struct state *st = (struct state *) calloc (1, sizeof(*st)); XGCValues gcv; int i; st->dpy = dpy; st->window = window; st->count = get_integer_resource (st->dpy, "count", "Integer"); st->delay = get_integer_resource (st->dpy, "delay", "Integer"); st->ncolors = get_integer_resource (st->dpy, "ncolors", "Integer"); st->dbuf = get_boolean_resource (st->dpy, "doubleBuffer", "Boolean"); # ifdef HAVE_DOUBLE_BUFFER_EXTENSION st->dbeclear_p = get_boolean_resource (st->dpy, "useDBEClear", "Boolean"); #endif # ifdef HAVE_JWXYZ /* Don't second-guess Quartz's double-buffering */ st->dbuf = False; # endif XGetWindowAttributes (st->dpy, st->window, &st->xgwa); st->transparent_p = get_boolean_resource(st->dpy, "transparent", "Transparent"); st->colors = (XColor *) calloc (sizeof(*st->colors), st->ncolors); if (get_boolean_resource(st->dpy, "mono", "Boolean")) { MONO: st->ncolors = 1; st->colors[0].pixel = get_pixel_resource(st->dpy, st->xgwa.colormap, "foreground", "Foreground"); } #ifndef HAVE_JWXYZ else if (st->transparent_p) { st->nplanes = get_integer_resource (st->dpy, "planes", "Planes"); if (st->nplanes <= 0) st->nplanes = (random() % (st->xgwa.depth-2)) + 2; allocate_alpha_colors (st->xgwa.screen, st->xgwa.visual, st->xgwa.colormap, &st->nplanes, True, &st->plane_masks, &st->base_pixel); if (st->nplanes <= 1) { # if 0 fprintf (stderr, "%s: couldn't allocate any color planes; turning transparency off.\n", progname); # endif st->transparent_p = False; goto COLOR; } } #endif /* !HAVE_JWXYZ */ else { #ifndef HAVE_JWXYZ COLOR: #endif make_random_colormap (st->xgwa.screen, st->xgwa.visual, st->xgwa.colormap, st->colors, &st->ncolors, True, True, 0, True); if (st->ncolors < 2) goto MONO; } if (st->dbuf) { #ifdef HAVE_DOUBLE_BUFFER_EXTENSION if (st->dbeclear_p) st->b = xdbe_get_backbuffer (st->dpy, st->window, XdbeBackground); else st->b = xdbe_get_backbuffer (st->dpy, st->window, XdbeUndefined); st->backb = st->b; #endif /* HAVE_DOUBLE_BUFFER_EXTENSION */ if (!st->b) { 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; } } else { st->b = st->window; } st->throbbers = (struct throbber **) calloc (st->count, sizeof(struct throbber *)); for (i = 0; i < st->count; i++) st->throbbers[i] = make_throbber (st, st->b, st->xgwa.width, st->xgwa.height, st->colors[random() % st->ncolors].pixel); gcv.foreground = get_pixel_resource (st->dpy, st->xgwa.colormap, "background", "Background"); st->erase_gc = XCreateGC (st->dpy, st->b, GCForeground, &gcv); if (st->ba) XFillRectangle (st->dpy, st->ba, st->erase_gc, 0, 0, st->xgwa.width, st->xgwa.height); if (st->bb) XFillRectangle (st->dpy, st->bb, st->erase_gc, 0, 0, st->xgwa.width, st->xgwa.height); return st; } static unsigned long deluxe_draw (Display *dpy, Window window, void *closure) { struct state *st = (struct state *) closure; int i; #ifdef HAVE_DOUBLE_BUFFER_EXTENSION if (!st->dbeclear_p || !st->backb) #endif /* HAVE_DOUBLE_BUFFER_EXTENSION */ XFillRectangle (st->dpy, st->b, st->erase_gc, 0, 0, st->xgwa.width, st->xgwa.height); for (i = 0; i < st->count; i++) if (throb (st, st->b, st->throbbers[i]) < 0) st->throbbers[i] = make_throbber (st, st->b, st->xgwa.width, st->xgwa.height, st->colors[random() % st->ncolors].pixel); #ifdef HAVE_DOUBLE_BUFFER_EXTENSION if (st->backb) { XdbeSwapInfo info[1]; info[0].swap_window = st->window; info[0].swap_action = (st->dbeclear_p ? XdbeBackground : XdbeUndefined); XdbeSwapBuffers (st->dpy, info, 1); } else #endif /* HAVE_DOUBLE_BUFFER_EXTENSION */ if (st->dbuf) { XCopyArea (st->dpy, st->b, st->window, st->erase_gc, 0, 0, st->xgwa.width, st->xgwa.height, 0, 0); st->b = (st->b == st->ba ? st->bb : st->ba); } return st->delay; } static void deluxe_reshape (Display *dpy, Window window, void *closure, unsigned int w, unsigned int h) { struct state *st = (struct state *) closure; if (! st->dbuf) { /* #### more complicated if we have a back buffer... */ int i; XGetWindowAttributes (st->dpy, st->window, &st->xgwa); XClearWindow (dpy, window); for (i = 0; i < st->count; i++) if (st->throbbers[i]) st->throbbers[i]->fuse = 0; } } static Bool deluxe_event (Display *dpy, Window window, void *closure, XEvent *event) { return False; } static void deluxe_free (Display *dpy, Window window, void *closure) { } static const char *deluxe_defaults [] = { ".background: black", ".foreground: white", "*delay: 10000", "*count: 5", "*thickness: 50", "*speed: 15", "*ncolors: 20", "*transparent: True", "*doubleBuffer: True", #ifdef HAVE_DOUBLE_BUFFER_EXTENSION "*useDBE: True", "*useDBEClear: True", #endif /* HAVE_DOUBLE_BUFFER_EXTENSION */ #ifdef HAVE_MOBILE "*ignoreRotation: True", #endif 0 }; static XrmOptionDescRec deluxe_options [] = { { "-delay", ".delay", XrmoptionSepArg, 0 }, { "-thickness", ".thickness", XrmoptionSepArg, 0 }, { "-count", ".count", XrmoptionSepArg, 0 }, { "-ncolors", ".ncolors", XrmoptionSepArg, 0 }, { "-speed", ".speed", XrmoptionSepArg, 0 }, { "-transparent", ".transparent", XrmoptionNoArg, "True" }, { "-no-transparent", ".transparent", XrmoptionNoArg, "False" }, { "-opaque", ".transparent", XrmoptionNoArg, "False" }, { "-no-opaque", ".transparent", XrmoptionNoArg, "True" }, { "-db", ".doubleBuffer", XrmoptionNoArg, "True" }, { "-no-db", ".doubleBuffer", XrmoptionNoArg, "False" }, { 0, 0, 0, 0 } }; XSCREENSAVER_MODULE ("Deluxe", deluxe) xscreensaver-5.36/hacks/compass.c000644 000767 000024 00000067343 12717746050 017066 0ustar00jwzstaff000000 000000 /* xscreensaver, Copyright (c) 1999 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. */ #include #include "screenhack.h" #ifdef HAVE_DOUBLE_BUFFER_EXTENSION # include "xdbe.h" #endif /* HAVE_DOUBLE_BUFFER_EXTENSION */ #define countof(x) (sizeof(x)/sizeof(*(x))) #define ABS(x) ((x)<0?-(x):(x)) #define MAX(x,y) ((x)<(y)?(y):(x)) #define MIN(x,y) ((x)>(y)?(y):(x)) #define RAND(n) ((long) ((random() & 0x7fffffff) % ((long) (n)))) #define RANDSIGN() ((random() & 1) ? 1 : -1) struct state { Display *dpy; Window window; int delay; Bool dbuf; struct disc *discs[4]; int x, y, size, size2; GC ptr_gc; GC erase_gc; XWindowAttributes xgwa; Pixmap b, ba, bb; /* double-buffer to reduce flicker */ #ifdef HAVE_DOUBLE_BUFFER_EXTENSION XdbeBackBuffer backb; #endif /* HAVE_DOUBLE_BUFFER_EXTENSION */ }; struct disc { int theta; /* 0 - 360*64 */ int velocity; int acceleration; int limit; GC gc; void (*draw) (struct state *, Drawable, struct disc *, int x, int y, int radius); }; static void draw_letters (struct state *st, Drawable d, struct disc *disc, int x, int y, int radius) { XPoint points[50]; double th2 = 2 * M_PI * (disc->theta / ((double) 360*64)); double th; /* W */ th = th2; points[0].x = x + radius * 0.8 * cos(th - 0.07); points[0].y = y + radius * 0.8 * sin(th - 0.07); points[1].x = x + radius * 0.7 * cos(th - 0.05); points[1].y = y + radius * 0.7 * sin(th - 0.05); points[2].x = x + radius * 0.78 * cos(th); points[2].y = y + radius * 0.78 * sin(th); points[3].x = x + radius * 0.7 * cos(th + 0.05); points[3].y = y + radius * 0.7 * sin(th + 0.05); points[4].x = x + radius * 0.8 * cos(th + 0.07); points[4].y = y + radius * 0.8 * sin(th + 0.07); XDrawLines (st->dpy, d, disc->gc, points, 5, CoordModeOrigin); /* 30 (1) */ th = th2 + (2 * M_PI * 0.08333); points[0].x = x + radius * 0.78 * cos(th - 0.13); points[0].y = y + radius * 0.78 * sin(th - 0.13); points[1].x = x + radius * 0.8 * cos(th - 0.08); points[1].y = y + radius * 0.8 * sin(th - 0.08); points[2].x = x + radius * 0.78 * cos(th - 0.03); points[2].y = y + radius * 0.78 * sin(th - 0.03); points[3].x = x + radius * 0.76 * cos(th - 0.03); points[3].y = y + radius * 0.76 * sin(th - 0.03); points[4].x = x + radius * 0.75 * cos(th - 0.08); points[4].y = y + radius * 0.75 * sin(th - 0.08); points[5].x = x + radius * 0.74 * cos(th - 0.03); points[5].y = y + radius * 0.74 * sin(th - 0.03); points[6].x = x + radius * 0.72 * cos(th - 0.03); points[6].y = y + radius * 0.72 * sin(th - 0.03); points[7].x = x + radius * 0.7 * cos(th - 0.08); points[7].y = y + radius * 0.7 * sin(th - 0.08); points[8].x = x + radius * 0.72 * cos(th - 0.13); points[8].y = y + radius * 0.72 * sin(th - 0.13); XDrawLines (st->dpy, d, disc->gc, points, 9, CoordModeOrigin); /* 30 (2) */ points[0].x = x + radius * 0.78 * cos(th + 0.03); points[0].y = y + radius * 0.78 * sin(th + 0.03); points[1].x = x + radius * 0.8 * cos(th + 0.08); points[1].y = y + radius * 0.8 * sin(th + 0.08); points[2].x = x + radius * 0.78 * cos(th + 0.13); points[2].y = y + radius * 0.78 * sin(th + 0.13); points[3].x = x + radius * 0.72 * cos(th + 0.13); points[3].y = y + radius * 0.72 * sin(th + 0.13); points[4].x = x + radius * 0.7 * cos(th + 0.08); points[4].y = y + radius * 0.7 * sin(th + 0.08); points[5].x = x + radius * 0.72 * cos(th + 0.03); points[5].y = y + radius * 0.72 * sin(th + 0.03); points[6] = points[0]; XDrawLines (st->dpy, d, disc->gc, points, 7, CoordModeOrigin); /* 33 (1) */ th = th2 + (2 * M_PI * 0.16666); points[0].x = x + radius * 0.78 * cos(th - 0.13); points[0].y = y + radius * 0.78 * sin(th - 0.13); points[1].x = x + radius * 0.8 * cos(th - 0.08); points[1].y = y + radius * 0.8 * sin(th - 0.08); points[2].x = x + radius * 0.78 * cos(th - 0.03); points[2].y = y + radius * 0.78 * sin(th - 0.03); points[3].x = x + radius * 0.76 * cos(th - 0.03); points[3].y = y + radius * 0.76 * sin(th - 0.03); points[4].x = x + radius * 0.75 * cos(th - 0.08); points[4].y = y + radius * 0.75 * sin(th - 0.08); points[5].x = x + radius * 0.74 * cos(th - 0.03); points[5].y = y + radius * 0.74 * sin(th - 0.03); points[6].x = x + radius * 0.72 * cos(th - 0.03); points[6].y = y + radius * 0.72 * sin(th - 0.03); points[7].x = x + radius * 0.7 * cos(th - 0.08); points[7].y = y + radius * 0.7 * sin(th - 0.08); points[8].x = x + radius * 0.72 * cos(th - 0.13); points[8].y = y + radius * 0.72 * sin(th - 0.13); XDrawLines (st->dpy, d, disc->gc, points, 9, CoordModeOrigin); /* 33 (2) */ points[0].x = x + radius * 0.78 * cos(th + 0.03); points[0].y = y + radius * 0.78 * sin(th + 0.03); points[1].x = x + radius * 0.8 * cos(th + 0.08); points[1].y = y + radius * 0.8 * sin(th + 0.08); points[2].x = x + radius * 0.78 * cos(th + 0.13); points[2].y = y + radius * 0.78 * sin(th + 0.13); points[3].x = x + radius * 0.76 * cos(th + 0.13); points[3].y = y + radius * 0.76 * sin(th + 0.13); points[4].x = x + radius * 0.75 * cos(th + 0.08); points[4].y = y + radius * 0.75 * sin(th + 0.08); points[5].x = x + radius * 0.74 * cos(th + 0.13); points[5].y = y + radius * 0.74 * sin(th + 0.13); points[6].x = x + radius * 0.72 * cos(th + 0.13); points[6].y = y + radius * 0.72 * sin(th + 0.13); points[7].x = x + radius * 0.7 * cos(th + 0.08); points[7].y = y + radius * 0.7 * sin(th + 0.08); points[8].x = x + radius * 0.72 * cos(th + 0.03); points[8].y = y + radius * 0.72 * sin(th + 0.03); XDrawLines (st->dpy, d, disc->gc, points, 9, CoordModeOrigin); /* N */ th = th2 + (2 * M_PI * 0.25); points[0].x = x + radius * 0.7 * cos(th - 0.05); points[0].y = y + radius * 0.7 * sin(th - 0.05); points[1].x = x + radius * 0.8 * cos(th - 0.05); points[1].y = y + radius * 0.8 * sin(th - 0.05); points[2].x = x + radius * 0.7 * cos(th + 0.05); points[2].y = y + radius * 0.7 * sin(th + 0.05); points[3].x = x + radius * 0.8 * cos(th + 0.05); points[3].y = y + radius * 0.8 * sin(th + 0.05); XDrawLines (st->dpy, d, disc->gc, points, 4, CoordModeOrigin); /* 3 */ th = th2 + (2 * M_PI * 0.33333); points[0].x = x + radius * 0.78 * cos(th - 0.05); points[0].y = y + radius * 0.78 * sin(th - 0.05); points[1].x = x + radius * 0.8 * cos(th); points[1].y = y + radius * 0.8 * sin(th); points[2].x = x + radius * 0.78 * cos(th + 0.05); points[2].y = y + radius * 0.78 * sin(th + 0.05); points[3].x = x + radius * 0.76 * cos(th + 0.05); points[3].y = y + radius * 0.76 * sin(th + 0.05); points[4].x = x + radius * 0.75 * cos(th); points[4].y = y + radius * 0.75 * sin(th); points[5].x = x + radius * 0.74 * cos(th + 0.05); points[5].y = y + radius * 0.74 * sin(th + 0.05); points[6].x = x + radius * 0.72 * cos(th + 0.05); points[6].y = y + radius * 0.72 * sin(th + 0.05); points[7].x = x + radius * 0.7 * cos(th); points[7].y = y + radius * 0.7 * sin(th); points[8].x = x + radius * 0.72 * cos(th - 0.05); points[8].y = y + radius * 0.72 * sin(th - 0.05); XDrawLines (st->dpy, d, disc->gc, points, 9, CoordModeOrigin); /* 6 */ th = th2 + (2 * M_PI * 0.41666); points[0].x = x + radius * 0.78 * cos(th + 0.05); points[0].y = y + radius * 0.78 * sin(th + 0.05); points[1].x = x + radius * 0.8 * cos(th); points[1].y = y + radius * 0.8 * sin(th); points[2].x = x + radius * 0.78 * cos(th - 0.05); points[2].y = y + radius * 0.78 * sin(th - 0.05); points[3].x = x + radius * 0.72 * cos(th - 0.05); points[3].y = y + radius * 0.72 * sin(th - 0.05); points[4].x = x + radius * 0.7 * cos(th); points[4].y = y + radius * 0.7 * sin(th); points[5].x = x + radius * 0.72 * cos(th + 0.05); points[5].y = y + radius * 0.72 * sin(th + 0.05); points[6].x = x + radius * 0.74 * cos(th + 0.05); points[6].y = y + radius * 0.74 * sin(th + 0.05); points[7].x = x + radius * 0.76 * cos(th); points[7].y = y + radius * 0.76 * sin(th); points[8].x = x + radius * 0.74 * cos(th - 0.05); points[8].y = y + radius * 0.74 * sin(th - 0.05); XDrawLines (st->dpy, d, disc->gc, points, 9, CoordModeOrigin); /* E */ th = th2 + (2 * M_PI * 0.5); points[0].x = x + radius * 0.8 * cos(th + 0.05); points[0].y = y + radius * 0.8 * sin(th + 0.05); points[1].x = x + radius * 0.8 * cos(th - 0.05); points[1].y = y + radius * 0.8 * sin(th - 0.05); points[2].x = x + radius * 0.75 * cos(th - 0.05); points[2].y = y + radius * 0.75 * sin(th - 0.05); points[3].x = x + radius * 0.75 * cos(th + 0.025); points[3].y = y + radius * 0.75 * sin(th + 0.025); points[4].x = x + radius * 0.75 * cos(th - 0.05); points[4].y = y + radius * 0.75 * sin(th - 0.05); points[5].x = x + radius * 0.7 * cos(th - 0.05); points[5].y = y + radius * 0.7 * sin(th - 0.05); points[6].x = x + radius * 0.7 * cos(th + 0.05); points[6].y = y + radius * 0.7 * sin(th + 0.05); XDrawLines (st->dpy, d, disc->gc, points, 7, CoordModeOrigin); /* 12 (1) */ th = th2 + (2 * M_PI * 0.58333); points[0].x = x + radius * 0.77 * cos(th - 0.06); points[0].y = y + radius * 0.77 * sin(th - 0.06); points[1].x = x + radius * 0.8 * cos(th - 0.03); points[1].y = y + radius * 0.8 * sin(th - 0.03); points[2].x = x + radius * 0.7 * cos(th - 0.03); points[2].y = y + radius * 0.7 * sin(th - 0.03); XDrawLines (st->dpy, d, disc->gc, points, 3, CoordModeOrigin); /* 12 (2) */ points[0].x = x + radius * 0.78 * cos(th + 0.02); points[0].y = y + radius * 0.78 * sin(th + 0.02); points[1].x = x + radius * 0.8 * cos(th + 0.07); points[1].y = y + radius * 0.8 * sin(th + 0.07); points[2].x = x + radius * 0.78 * cos(th + 0.11); points[2].y = y + radius * 0.78 * sin(th + 0.11); points[3].x = x + radius * 0.76 * cos(th + 0.11); points[3].y = y + radius * 0.76 * sin(th + 0.11); points[4].x = x + radius * 0.74 * cos(th + 0.02); points[4].y = y + radius * 0.74 * sin(th + 0.02); points[5].x = x + radius * 0.71 * cos(th + 0.03); points[5].y = y + radius * 0.71 * sin(th + 0.03); points[6].x = x + radius * 0.7 * cos(th + 0.03); points[6].y = y + radius * 0.7 * sin(th + 0.03); points[7].x = x + radius * 0.7 * cos(th + 0.13); points[7].y = y + radius * 0.7 * sin(th + 0.13); XDrawLines (st->dpy, d, disc->gc, points, 8, CoordModeOrigin); /* 15 (1) */ th = th2 + (2 * M_PI * 0.66666); points[0].x = x + radius * 0.77 * cos(th - 0.06); points[0].y = y + radius * 0.77 * sin(th - 0.06); points[1].x = x + radius * 0.8 * cos(th - 0.03); points[1].y = y + radius * 0.8 * sin(th - 0.03); points[2].x = x + radius * 0.7 * cos(th - 0.03); points[2].y = y + radius * 0.7 * sin(th - 0.03); XDrawLines (st->dpy, d, disc->gc, points, 3, CoordModeOrigin); /* 15 (2) */ points[0].x = x + radius * 0.8 * cos(th + 0.11); points[0].y = y + radius * 0.8 * sin(th + 0.11); points[1].x = x + radius * 0.8 * cos(th + 0.02); points[1].y = y + radius * 0.8 * sin(th + 0.02); points[2].x = x + radius * 0.76 * cos(th + 0.02); points[2].y = y + radius * 0.76 * sin(th + 0.02); points[3].x = x + radius * 0.77 * cos(th + 0.06); points[3].y = y + radius * 0.77 * sin(th + 0.06); points[4].x = x + radius * 0.76 * cos(th + 0.10); points[4].y = y + radius * 0.76 * sin(th + 0.10); points[5].x = x + radius * 0.73 * cos(th + 0.11); points[5].y = y + radius * 0.73 * sin(th + 0.11); points[6].x = x + radius * 0.72 * cos(th + 0.10); points[6].y = y + radius * 0.72 * sin(th + 0.10); points[7].x = x + radius * 0.7 * cos(th + 0.06); points[7].y = y + radius * 0.7 * sin(th + 0.06); points[8].x = x + radius * 0.72 * cos(th + 0.02); points[8].y = y + radius * 0.72 * sin(th + 0.02); XDrawLines (st->dpy, d, disc->gc, points, 9, CoordModeOrigin); /* S */ th = th2 + (2 * M_PI * 0.75); points[0].x = x + radius * 0.78 * cos(th + 0.05); points[0].y = y + radius * 0.78 * sin(th + 0.05); points[1].x = x + radius * 0.8 * cos(th); points[1].y = y + radius * 0.8 * sin(th); points[2].x = x + radius * 0.78 * cos(th - 0.05); points[2].y = y + radius * 0.78 * sin(th - 0.05); points[3].x = x + radius * 0.76 * cos(th - 0.05); points[3].y = y + radius * 0.76 * sin(th - 0.05); points[4].x = x + radius * 0.74 * cos(th + 0.05); points[4].y = y + radius * 0.74 * sin(th + 0.05); points[5].x = x + radius * 0.72 * cos(th + 0.05); points[5].y = y + radius * 0.72 * sin(th + 0.05); points[6].x = x + radius * 0.7 * cos(th); points[6].y = y + radius * 0.7 * sin(th); points[7].x = x + radius * 0.72 * cos(th - 0.05); points[7].y = y + radius * 0.72 * sin(th - 0.05); XDrawLines (st->dpy, d, disc->gc, points, 8, CoordModeOrigin); /* 21 (1) */ th = th2 + (2 * M_PI * 0.83333); points[0].x = x + radius * 0.78 * cos(th - 0.13); points[0].y = y + radius * 0.78 * sin(th - 0.13); points[1].x = x + radius * 0.8 * cos(th - 0.08); points[1].y = y + radius * 0.8 * sin(th - 0.08); points[2].x = x + radius * 0.78 * cos(th - 0.03); points[2].y = y + radius * 0.78 * sin(th - 0.03); points[3].x = x + radius * 0.76 * cos(th - 0.03); points[3].y = y + radius * 0.76 * sin(th - 0.03); points[4].x = x + radius * 0.74 * cos(th - 0.12); points[4].y = y + radius * 0.74 * sin(th - 0.12); points[5].x = x + radius * 0.71 * cos(th - 0.13); points[5].y = y + radius * 0.71 * sin(th - 0.13); points[6].x = x + radius * 0.7 * cos(th - 0.13); points[6].y = y + radius * 0.7 * sin(th - 0.13); points[7].x = x + radius * 0.7 * cos(th - 0.02); points[7].y = y + radius * 0.7 * sin(th - 0.02); XDrawLines (st->dpy, d, disc->gc, points, 8, CoordModeOrigin); /* 21 (2) */ points[0].x = x + radius * 0.77 * cos(th + 0.03); points[0].y = y + radius * 0.77 * sin(th + 0.03); points[1].x = x + radius * 0.8 * cos(th + 0.06); points[1].y = y + radius * 0.8 * sin(th + 0.06); points[2].x = x + radius * 0.7 * cos(th + 0.06); points[2].y = y + radius * 0.7 * sin(th + 0.06); XDrawLines (st->dpy, d, disc->gc, points, 3, CoordModeOrigin); /* 24 (1) */ th = th2 + (2 * M_PI * 0.91666); points[0].x = x + radius * 0.78 * cos(th - 0.13); points[0].y = y + radius * 0.78 * sin(th - 0.13); points[1].x = x + radius * 0.8 * cos(th - 0.08); points[1].y = y + radius * 0.8 * sin(th - 0.08); points[2].x = x + radius * 0.78 * cos(th - 0.03); points[2].y = y + radius * 0.78 * sin(th - 0.03); points[3].x = x + radius * 0.76 * cos(th - 0.03); points[3].y = y + radius * 0.76 * sin(th - 0.03); points[4].x = x + radius * 0.74 * cos(th - 0.12); points[4].y = y + radius * 0.74 * sin(th - 0.12); points[5].x = x + radius * 0.71 * cos(th - 0.13); points[5].y = y + radius * 0.71 * sin(th - 0.13); points[6].x = x + radius * 0.7 * cos(th - 0.13); points[6].y = y + radius * 0.7 * sin(th - 0.13); points[7].x = x + radius * 0.7 * cos(th - 0.02); points[7].y = y + radius * 0.7 * sin(th - 0.02); XDrawLines (st->dpy, d, disc->gc, points, 8, CoordModeOrigin); /* 24 (2) */ points[0].x = x + radius * 0.69 * cos(th + 0.09); points[0].y = y + radius * 0.69 * sin(th + 0.09); points[1].x = x + radius * 0.8 * cos(th + 0.09); points[1].y = y + radius * 0.8 * sin(th + 0.09); points[2].x = x + radius * 0.72 * cos(th + 0.01); points[2].y = y + radius * 0.72 * sin(th + 0.01); points[3].x = x + radius * 0.72 * cos(th + 0.13); points[3].y = y + radius * 0.72 * sin(th + 0.13); XDrawLines (st->dpy, d, disc->gc, points, 4, CoordModeOrigin); } static void draw_ticks (struct state *st, Drawable d, struct disc *disc, int x, int y, int radius) { XSegment segs[72]; int i; double tick = (M_PI * 2) / 72; for (i = 0; i < 72; i++) { int radius2 = radius; double th = (i * tick) + (2 * M_PI * (disc->theta / ((double) 360*64))); if (i % 6) radius2 -= radius / 16; else radius2 -= radius / 8; segs[i].x1 = x + radius * cos(th); segs[i].y1 = y + radius * sin(th); segs[i].x2 = x + radius2 * cos(th); segs[i].y2 = y + radius2 * sin(th); } XDrawSegments (st->dpy, d, disc->gc, segs, countof(segs)); draw_letters (st, d, disc, x, y, radius); } static void draw_thin_arrow (struct state *st, Drawable d, struct disc *disc, int x, int y, int radius) { XPoint points[3]; double th; int radius2; double tick = ((M_PI * 2) / 72) * 2; radius *= 0.9; radius2 = radius - (radius / 8) * 3; th = 2 * M_PI * (disc->theta / ((double) 360*64)); points[0].x = x + radius * cos(th); /* tip */ points[0].y = y + radius * sin(th); points[1].x = x + radius2 * cos(th - tick); /* tip left */ points[1].y = y + radius2 * sin(th - tick); points[2].x = x + radius2 * cos(th + tick); /* tip right */ points[2].y = y + radius2 * sin(th + tick); XDrawLine (st->dpy, d, disc->gc, (int) (x + radius2 * cos(th)), (int) (y + radius2 * sin(th)), (int) (x + -radius * cos(th)), (int) (y + -radius * sin(th))); XFillPolygon (st->dpy, d, disc->gc, points, 3, Convex, CoordModeOrigin); } static void draw_thick_arrow (struct state *st, Drawable d, struct disc *disc, int x, int y, int radius) { XPoint points[10]; double th; int radius2, radius3; double tick = ((M_PI * 2) / 72) * 2; radius *= 0.9; radius2 = radius - (radius / 8) * 3; radius3 = radius - (radius / 8) * 2; th = 2 * M_PI * (disc->theta / ((double) 360*64)); points[0].x = x + radius * cos(th); /* tip */ points[0].y = y + radius * sin(th); points[1].x = x + radius2 * cos(th - tick); /* tip left */ points[1].y = y + radius2 * sin(th - tick); points[2].x = x + radius2 * cos(th + tick); /* tip right */ points[2].y = y + radius2 * sin(th + tick); points[3] = points[0]; XDrawLines (st->dpy, d, disc->gc, points, 4, CoordModeOrigin); points[0].x = x + radius2 * cos(th - tick/2); /* top left */ points[0].y = y + radius2 * sin(th - tick/2); points[1].x = x + -radius2 * cos(th + tick/2); /* bottom left */ points[1].y = y + -radius2 * sin(th + tick/2); points[2].x = x + -radius3 * cos(th); /* bottom */ points[2].y = y + -radius3 * sin(th); points[3].x = x + -radius * cos(th); /* bottom spike */ points[3].y = y + -radius * sin(th); points[4] = points[2]; /* return */ points[5].x = x + -radius2 * cos(th - tick/2); /* bottom right */ points[5].y = y + -radius2 * sin(th - tick/2); points[6].x = x + radius2 * cos(th + tick/2); /* top right */ points[6].y = y + radius2 * sin(th + tick/2); XDrawLines (st->dpy, d, disc->gc, points, 7, CoordModeOrigin); } static void roll_disc (struct disc *disc) { double th = disc->theta; if (th < 0) th = -(th + disc->velocity); else th = (th + disc->velocity); if (th > (360*64)) th -= (360*64); else if (th < 0) th += (360*64); disc->theta = (disc->theta > 0 ? th : -th); disc->velocity += disc->acceleration; if (disc->velocity > disc->limit || disc->velocity < -disc->limit) disc->acceleration = -disc->acceleration; /* Alter direction of rotational acceleration randomly. */ if (! (random() % 120)) disc->acceleration = -disc->acceleration; /* Change acceleration very occasionally. */ if (! (random() % 200)) { if (random() & 1) disc->acceleration *= 1.2; else disc->acceleration *= 0.8; } } static void init_spin (struct disc *disc) { disc->limit = 5*64; disc->theta = RAND(360*64); disc->velocity = RAND(16) * RANDSIGN(); disc->acceleration = RAND(16) * RANDSIGN(); } static void draw_compass (struct state *st) { int i = 0; while (st->discs[i]) { st->discs[i]->draw (st, st->b, st->discs[i], st->x, st->y, st->size); roll_disc (st->discs[i]); i++; } } static void draw_pointer (struct state *st) { int radius = st->size; GC dot_gc = st->discs[0]->gc; XPoint points[3]; int size = radius * 0.1; /* top */ points[0].x = st->x - size; points[0].y = st->y - radius - size; points[1].x = st->x + size; points[1].y = st->y - radius - size; points[2].x = st->x; points[2].y = st->y - radius; XFillPolygon (st->dpy, st->b, st->ptr_gc, points, 3, Convex, CoordModeOrigin); /* top right */ points[0].x = st->x - (radius * 0.85); points[0].y = st->y - (radius * 0.8); points[1].x = st->x - (radius * 1.1); points[1].y = st->y - (radius * 0.55); points[2].x = st->x - (radius * 0.6); points[2].y = st->y - (radius * 0.65); XFillPolygon (st->dpy, st->b, st->ptr_gc, points, 3, Convex, CoordModeOrigin); /* left */ points[0].x = st->x - (radius * 1.05); points[0].y = st->y; points[1].x = st->x - (radius * 1.1); points[1].y = st->y - (radius * 0.025); points[2].x = st->x - (radius * 1.1); points[2].y = st->y + (radius * 0.025); XFillPolygon (st->dpy, st->b, dot_gc, points, 3, Convex, CoordModeOrigin); /* right */ points[0].x = st->x + (radius * 1.05); points[0].y = st->y; points[1].x = st->x + (radius * 1.1); points[1].y = st->y - (radius * 0.025); points[2].x = st->x + (radius * 1.1); points[2].y = st->y + (radius * 0.025); XFillPolygon (st->dpy, st->b, dot_gc, points, 3, Convex, CoordModeOrigin); /* bottom */ points[0].x = st->x; points[0].y = st->y + (radius * 1.05); points[1].x = st->x - (radius * 0.025); points[1].y = st->y + (radius * 1.1); points[2].x = st->x + (radius * 0.025); points[2].y = st->y + (radius * 1.1); XFillPolygon (st->dpy, st->b, dot_gc, points, 3, Convex, CoordModeOrigin); /* bottom left */ points[0].x = st->x + (radius * 0.74); points[0].y = st->y + (radius * 0.74); points[1].x = st->x + (radius * 0.78); points[1].y = st->y + (radius * 0.75); points[2].x = st->x + (radius * 0.75); points[2].y = st->y + (radius * 0.78); XFillPolygon (st->dpy, st->b, dot_gc, points, 3, Convex, CoordModeOrigin); /* top left */ points[0].x = st->x + (radius * 0.74); points[0].y = st->y - (radius * 0.74); points[1].x = st->x + (radius * 0.78); points[1].y = st->y - (radius * 0.75); points[2].x = st->x + (radius * 0.75); points[2].y = st->y - (radius * 0.78); XFillPolygon (st->dpy, st->b, dot_gc, points, 3, Convex, CoordModeOrigin); /* bottom right */ points[0].x = st->x - (radius * 0.74); points[0].y = st->y + (radius * 0.74); points[1].x = st->x - (radius * 0.78); points[1].y = st->y + (radius * 0.75); points[2].x = st->x - (radius * 0.75); points[2].y = st->y + (radius * 0.78); XFillPolygon (st->dpy, st->b, dot_gc, points, 3, Convex, CoordModeOrigin); } static void * compass_init (Display *dpy, Window window) { struct state *st = (struct state *) calloc (1, sizeof(*st)); XGCValues gcv; st->dpy = dpy; st->window = window; st->delay = get_integer_resource (st->dpy, "delay", "Integer"); st->dbuf = get_boolean_resource (st->dpy, "doubleBuffer", "Boolean"); # ifdef HAVE_JWXYZ /* Don't second-guess Quartz's double-buffering */ st->dbuf = False; # endif XGetWindowAttributes (st->dpy, st->window, &st->xgwa); st->size2 = MIN(st->xgwa.width, st->xgwa.height); if (st->size2 > 600) st->size2 = 600; st->size = (st->size2 / 2) * 0.8; st->x = st->xgwa.width/2; st->y = st->xgwa.height/2; if (st->dbuf) { #ifdef HAVE_DOUBLE_BUFFER_EXTENSION st->b = st->backb = xdbe_get_backbuffer (st->dpy, st->window, XdbeUndefined); #endif /* HAVE_DOUBLE_BUFFER_EXTENSION */ if (!st->b) { st->x = st->size2/2; st->y = st->size2/2; st->ba = XCreatePixmap (st->dpy, st->window, st->size2, st->size2, st->xgwa.depth); st->bb = XCreatePixmap (st->dpy, st->window, st->size2, st->size2, st->xgwa.depth); st->b = st->ba; } } else { st->b = st->window; } st->discs[0] = (struct disc *) calloc (1, sizeof (struct disc)); st->discs[1] = (struct disc *) calloc (1, sizeof (struct disc)); st->discs[2] = (struct disc *) calloc (1, sizeof (struct disc)); st->discs[3] = 0; gcv.foreground = get_pixel_resource (st->dpy, st->xgwa.colormap, "foreground", "Foreground"); gcv.line_width = MAX(2, (st->size/60)); gcv.join_style = JoinBevel; st->discs[0]->draw = draw_ticks; st->discs[0]->gc = XCreateGC (st->dpy, st->b, GCForeground|GCLineWidth|GCJoinStyle, &gcv); init_spin (st->discs[0]); gcv.foreground = get_pixel_resource (st->dpy, st->xgwa.colormap, "arrow2Foreground", "Foreground"); gcv.line_width = MAX(4, (st->size / 30)); st->discs[1]->draw = draw_thick_arrow; st->discs[1]->gc = XCreateGC (st->dpy, st->b, GCForeground|GCLineWidth, &gcv); init_spin (st->discs[1]); gcv.foreground = get_pixel_resource (st->dpy, st->xgwa.colormap, "arrow1Foreground", "Foreground"); gcv.line_width = MAX(4, (st->size / 30)); st->discs[2]->draw = draw_thin_arrow; st->discs[2]->gc = XCreateGC (st->dpy, st->b, GCForeground|GCLineWidth, &gcv); init_spin (st->discs[2]); gcv.foreground = get_pixel_resource (st->dpy, st->xgwa.colormap, "pointerForeground", "Foreground"); st->ptr_gc = XCreateGC (st->dpy, st->b, GCForeground|GCLineWidth, &gcv); gcv.foreground = get_pixel_resource (st->dpy, st->xgwa.colormap, "background", "Background"); st->erase_gc = XCreateGC (st->dpy, st->b, GCForeground, &gcv); if (st->ba) XFillRectangle (st->dpy, st->ba, st->erase_gc, 0, 0, st->size2, st->size2); if (st->bb) XFillRectangle (st->dpy, st->bb, st->erase_gc, 0, 0, st->size2, st->size2); return st; } static unsigned long compass_draw (Display *dpy, Window window, void *closure) { struct state *st = (struct state *) closure; XFillRectangle (st->dpy, st->b, st->erase_gc, 0, 0, st->xgwa.width, st->xgwa.height); draw_compass (st); draw_pointer (st); #ifdef HAVE_DOUBLE_BUFFER_EXTENSION if (st->backb) { XdbeSwapInfo info[1]; info[0].swap_window = st->window; info[0].swap_action = XdbeUndefined; XdbeSwapBuffers (st->dpy, info, 1); } else #endif /* HAVE_DOUBLE_BUFFER_EXTENSION */ if (st->dbuf) { XCopyArea (st->dpy, st->b, st->window, st->erase_gc, 0, 0, st->size2, st->size2, st->xgwa.width/2 - st->x, st->xgwa.height/2 - st->y); st->b = (st->b == st->ba ? st->bb : st->ba); } return st->delay; } 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 compass_event (Display *dpy, Window window, void *closure, XEvent *event) { return False; } static void compass_free (Display *dpy, Window window, void *closure) { } static const char *compass_defaults [] = { ".background: #000000", ".foreground: #DDFFFF", "*arrow1Foreground: #FFF66A", "*arrow2Foreground: #F7D64A", "*pointerForeground: #FF0000", "*delay: 20000", "*doubleBuffer: True", #ifdef HAVE_DOUBLE_BUFFER_EXTENSION "*useDBE: True", #endif /* HAVE_DOUBLE_BUFFER_EXTENSION */ 0 }; static XrmOptionDescRec compass_options [] = { { "-delay", ".delay", XrmoptionSepArg, 0 }, { "-db", ".doubleBuffer", XrmoptionNoArg, "True" }, { "-no-db", ".doubleBuffer", XrmoptionNoArg, "False" }, { 0, 0, 0, 0 } }; XSCREENSAVER_MODULE ("Compass", compass) xscreensaver-5.36/hacks/squiral.c000644 000767 000024 00000020176 12710314374 017063 0ustar00jwzstaff000000 000000 /* squiral, by "Jeff Epler" , 18-mar-1999. * * 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. */ #include "screenhack.h" #include "colors.h" #include "erase.h" #include "yarandom.h" #define R(x) (random()%x) #define PROB(x) (frand(1.0) < (x)) #define NCOLORSMAX 255 #define STATES 8 /* 0- 3 left-winding */ /* 4- 7 right-winding */ struct worm { int h; int v; int s; int c; int cc; }; struct state { Display *dpy; Window window; int width, height, count, cycle; double frac, disorder, handedness; int ncolors; GC draw_gc, erase_gc; XColor colors[NCOLORSMAX]; int delay; int cov; int dirh[4]; int dirv[4]; int *fill; struct worm *worms; int inclear; }; #define CLEAR1(x,y) (!st->fill[((y)%st->height)*st->width+(x)%st->width]) #define MOVE1(x,y) (st->fill[((y)%st->height)*st->width+(x)%st->width]=1, XDrawPoint(st->dpy, st->window, st->draw_gc, (x)%st->width,(y)%st->height), st->cov++) #define CLEARDXY(x,y,dx,dy) CLEAR1(x+dx, y+dy) && CLEAR1(x+dx+dx, y+dy+dy) #define MOVEDXY(x,y,dx,dy) MOVE1 (x+dx, y+dy), MOVE1 (x+dx+dx, y+dy+dy) #define CLEAR(d) CLEARDXY(w->h,w->v, st->dirh[d],st->dirv[d]) #define MOVE(d) (XSetForeground(st->dpy, st->draw_gc, st->colors[w->c].pixel), \ MOVEDXY(w->h,w->v, st->dirh[d],st->dirv[d]), \ w->h=w->h+st->dirh[d]*2, \ w->v=w->v+st->dirv[d]*2, dir=d) #define RANDOM (void) (w->h = R(st->width), w->v = R(st->height), w->c = R(st->ncolors), \ type=R(2), dir=R(4), (st->cycle && (w->cc=R(3)+st->ncolors))) #define SUCC(x) ((x+1)%4) #define PRED(x) ((x+3)%4) #define CCW PRED(dir) #define CW SUCC(dir) #define REV ((dir+2)%4) #define STR (dir) #define TRY(x) if (CLEAR(x)) { MOVE(x); break; } static void do_worm(struct state *st, struct worm *w) { int type = w->s / 4; int dir = w->s % 4; w->c = (w->c+w->cc) % st->ncolors; if (PROB(st->disorder)) type=PROB(st->handedness); switch(type) { case 0: /* CCW */ TRY(CCW) TRY(STR) TRY(CW) RANDOM; break; case 1: /* CW */ TRY(CW) TRY(STR) TRY(CCW) RANDOM; break; } w->s = type*4+dir; w->h = w->h % st->width; 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) { struct state *st = (struct state *) calloc (1, sizeof(*st)); XGCValues gcv; Colormap cmap; XWindowAttributes xgwa; Bool writeable = False; st->dpy = dpy; st->window = window; st->delay= get_integer_resource(st->dpy, "delay", "Integer"); XClearWindow(st->dpy, st->window); XGetWindowAttributes(st->dpy, st->window, &xgwa); st->width = xgwa.width; st->height = xgwa.height; cmap = xgwa.colormap; gcv.foreground = get_pixel_resource(st->dpy, cmap, "foreground", "Foreground"); st->draw_gc = XCreateGC(st->dpy, st->window, GCForeground, &gcv); gcv.foreground = get_pixel_resource (st->dpy, cmap, "background", "Background"); st->erase_gc = XCreateGC (st->dpy, st->window, GCForeground, &gcv); cmap = xgwa.colormap; if( st->ncolors ) { free_colors(xgwa.screen, cmap, st->colors, st->ncolors); st->ncolors = 0; } if( mono_p ) { st->ncolors=1; st->colors[0].pixel=get_pixel_resource(st->dpy, cmap, "foreground","Foreground"); } else { st->ncolors = get_integer_resource(st->dpy, "ncolors", "Integer"); if (st->ncolors < 0 || st->ncolors > NCOLORSMAX) st->ncolors = NCOLORSMAX; make_uniform_colormap(xgwa.screen, xgwa.visual, cmap, st->colors, &st->ncolors, True, &writeable, False); if (st->ncolors <= 0) { st->ncolors = 1; st->colors[0].pixel=get_pixel_resource(st->dpy, cmap, "foreground","Foreground"); } } st->count= get_integer_resource(st->dpy, "count", "Integer"); st->frac = get_integer_resource(st->dpy, "fill", "Integer")*0.01; st->cycle= get_boolean_resource(st->dpy, "cycle", "Cycle"); st->disorder=get_float_resource(st->dpy, "disorder", "Float"); st->handedness=get_float_resource(st->dpy, "handedness", "Float"); if(st->frac<0.01) st->frac=0.01; if(st->frac>0.99) st->frac=0.99; if(st->count==0) st->count=st->width/32; if(st->count<1) st->count=1; if(st->count>1000) st->count=1000; if(st->worms) free(st->worms); if(st->fill) free(st->fill); squiral_init_1 (st); return st; } static unsigned long squiral_draw (Display *dpy, Window window, void *closure) { struct state *st = (struct state *) closure; int i; if(st->inclearheight) { XDrawLine(st->dpy, st->window, st->erase_gc, 0, st->inclear, st->width-1, st->inclear); memset(&st->fill[st->inclear*st->width], 0, sizeof(int)*st->width); XDrawLine(st->dpy, st->window, st->erase_gc, 0, st->height-st->inclear-1, st->width-1, st->height-st->inclear-1); memset(&st->fill[(st->height-st->inclear-1)*st->width], 0, sizeof(int)*st->width); st->inclear++; XDrawLine(st->dpy, st->window, st->erase_gc, 0, st->inclear, st->width-1, st->inclear); if (st->inclear < st->height) memset(&st->fill[st->inclear*st->width], 0, sizeof(int)*st->width); XDrawLine(st->dpy, st->window, st->erase_gc, 0, st->height-st->inclear-1, st->width-1, st->height-st->inclear-1); if (st->height - st->inclear >= 1) memset(&st->fill[(st->height-st->inclear-1)*st->width], 0, sizeof(int)*st->width); st->inclear++; if(st->inclear>st->height/2) st->inclear=st->height; } else if(st->cov>(st->frac*st->width*st->height)) { st->inclear=0; st->cov=0; } for(i=0;icount;i++) do_worm(st, &st->worms[i]); return st->delay; } 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 squiral_event (Display *dpy, Window window, void *closure, XEvent *event) { struct state *st = (struct state *) closure; if (screenhack_event_helper (dpy, window, event)) { squiral_init_1 (st); XClearWindow (dpy, window); return True; } return False; } static void squiral_free (Display *dpy, Window window, void *closure) { struct state *st = (struct state *) closure; free (st); } static const char *squiral_defaults[] = { ".background: black", ".foreground: white", "*fpsSolid: true", "*fill: 75", "*count: 0", "*ncolors: 100", "*delay: 10000", "*disorder: 0.005", "*cycle: False", "*handedness: 0.5", #ifdef HAVE_MOBILE "*ignoreRotation: True", #endif 0 }; static XrmOptionDescRec squiral_options[] = { {"-fill", ".fill", XrmoptionSepArg, 0}, {"-count", ".count", XrmoptionSepArg, 0}, {"-delay", ".delay", XrmoptionSepArg, 0}, {"-disorder", ".disorder", XrmoptionSepArg, 0}, {"-handedness", ".handedness", XrmoptionSepArg, 0}, {"-ncolors", ".ncolors", XrmoptionSepArg, 0}, {"-cycle", ".cycle", XrmoptionNoArg, "True"}, {"-no-cycle", ".cycle", XrmoptionNoArg, "False"}, { 0, 0, 0, 0 } }; XSCREENSAVER_MODULE ("Squiral", squiral) xscreensaver-5.36/hacks/xflame.c000644 000767 000024 00000053517 12717747755 016710 0ustar00jwzstaff000000 000000 /* xflame, Copyright (c) 1996-2002 Carsten Haitzler * * 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. */ /* Version history as near as I (jwz) can piece together: * Carsten Haitzler wrote the first version in 1996. * Rahul Jain added support for TrueColor displays. * Someone did a rough port of it to use the xscreensaver utility routines instead of creating its own window by hand. * Someone (probably Raster) came up with a subsequent version that had a Red Hat logo hardcoded into it. * Daniel Zahn found that version in 1998, and hacked it to be able to load a different logo from a PGM (P5) file, with a single hardcoded pathname. * Jamie Zawinski found several versions of xflame in March 1999, and pieced them together. Changes: - Correct and fault-tolerant use of the Shared Memory extension; previous versions of xflame did not work when $DISPLAY was remote. - Replaced PGM-reading code with code that can read arbitrary XBM and XPM files (color ones will be converted to grayscale.) - Command-line options all around -- no hardcoded pathnames or behavioral constants. - General cleanup and portability tweaks. * 4-Oct-99, jwz: added support for packed-24bpp (versus 32bpp.) * 16-Jan-2002, jwz: added gdk_pixbuf support. */ /* portions by Daniel Zahn */ #include "screenhack.h" #include "xpm-pixmap.h" #include #undef countof #define countof(x) (sizeof((x))/sizeof((*x))) #ifdef HAVE_XSHM_EXTENSION # include "xshm.h" #endif /* HAVE_XSHM_EXTENSION */ #include "images/bob.xbm" #define MAX_VAL 255 struct state { Display *dpy; Window window; int depth; int width; int height; Colormap colormap; Visual *visual; Screen *screen; Bool shared; Bool bloom; XImage *xim; #ifdef HAVE_XSHM_EXTENSION XShmSegmentInfo shminfo; #endif /* HAVE_XSHM_EXTENSION */ GC gc; int ctab[256]; unsigned char *flame; unsigned char *theim; int fwidth; int fheight; int top; int hspread; int vspread; int residual; int ihspread; int ivspread; int iresidual; int variance; int vartrend; int delay; int baseline; int theimx, theimy; }; static void GetXInfo(struct state *st) { XWindowAttributes xwa; XGetWindowAttributes(st->dpy,st->window,&xwa); st->colormap = xwa.colormap; st->depth = xwa.depth; st->visual = xwa.visual; st->screen = xwa.screen; st->width = xwa.width; st->height = xwa.height; if (st->width%2) st->width++; if (st->height%2) st->height++; } static void MakeImage(struct state *st) { XGCValues gcv; /* #### This probably leaks SHM every time the window is resized. */ if (st->xim) XDestroyImage (st->xim); #ifdef HAVE_XSHM_EXTENSION st->shared = True; st->xim = create_xshm_image (st->dpy, st->visual, st->depth, ZPixmap, NULL, &st->shminfo, st->width, st->height); #else /* !HAVE_XSHM_EXTENSION */ st->xim = 0; #endif /* !HAVE_XSHM_EXTENSION */ if (!st->xim) { st->shared = False; st->xim = XCreateImage (st->dpy, st->visual, st->depth, ZPixmap, 0, NULL, st->width, st->height, 32, 0); if (st->xim) st->xim->data = (char *) calloc(st->xim->height, st->xim->bytes_per_line); if (!st->xim || !st->xim->data) { fprintf(stderr,"%s: out of memory.\n", progname); exit(1); } } if (! st->gc) st->gc = XCreateGC(st->dpy,st->window,0,&gcv); } static void InitColors(struct state *st) { int i = 0, j = 0, red = 0, green = 0, blue = 0; XColor fg; /* Make it possible to set the color of the flames, by Raymond Medeiros and jwz. */ fg.pixel = get_pixel_resource (st->dpy, st->colormap, "foreground", "Foreground"); XQueryColor (st->dpy, st->colormap, &fg); red = 255 - (fg.red >> 8); green = 255 - (fg.green >> 8); blue = 255 - (fg.blue >> 8); for (i = 0; i < 256 * 2; i += 2) { XColor xcl; int r = (i - red) * 3; int g = (i - green) * 3; int b = (i - blue) * 3; if (r < 0) r = 0; if (r > 255) r = 255; if (g < 0) g = 0; if (g > 255) g = 255; if (b < 0) b = 0; if (b > 255) b = 255; xcl.red = (unsigned short)((r << 8) | r); xcl.green = (unsigned short)((g << 8) | g); xcl.blue = (unsigned short)((b << 8) | b); xcl.flags = DoRed | DoGreen | DoBlue; XAllocColor(st->dpy,st->colormap,&xcl); st->ctab[j++] = (int)xcl.pixel; } } static void DisplayImage(struct state *st) { #ifdef HAVE_XSHM_EXTENSION if (st->shared) XShmPutImage(st->dpy, st->window, st->gc, st->xim, 0,(st->top - 1) << 1, 0, (st->top - 1) << 1, st->width, st->height - ((st->top - 1) << 1), False); else #endif /* HAVE_XSHM_EXTENSION */ XPutImage(st->dpy, st->window, st->gc, st->xim, 0, (st->top - 1) << 1, 0, (st->top - 1) << 1, st->width, st->height - ((st->top - 1) << 1)); } static void InitFlame(struct state *st) { st->fwidth = st->width / 2; st->fheight = st->height / 2; if (st->flame) free (st->flame); st->flame = (unsigned char *) malloc((st->fwidth + 2) * (st->fheight + 2) * sizeof(unsigned char)); if (!st->flame) { fprintf(stderr,"%s: out of memory\n", progname); exit(1); } st->top = 1; st->ihspread = get_integer_resource(st->dpy, "hspread", "Integer"); st->ivspread = get_integer_resource(st->dpy, "vspread", "Integer"); st->iresidual = get_integer_resource(st->dpy, "residual", "Integer"); st->variance = get_integer_resource(st->dpy, "variance", "Integer"); st->vartrend = get_integer_resource(st->dpy, "vartrend", "Integer"); st->bloom = get_boolean_resource(st->dpy, "bloom", "Boolean"); # define THROTTLE(VAR,NAME) \ if (VAR < 0 || VAR > 255) { \ fprintf(stderr, "%s: %s must be in the range 0-255 (not %d).\n", \ progname, NAME, VAR); \ exit(1); } THROTTLE (st->ihspread, "hspread"); THROTTLE (st->ivspread, "vspread"); THROTTLE (st->iresidual,"residual"); THROTTLE (st->variance, "variance"); THROTTLE (st->vartrend, "vartrend"); # undef THROTTLE st->hspread = st->ihspread; st->vspread = st->ivspread; st->residual = st->iresidual; } static void Flame2Image16(struct state *st) { int x,y; unsigned short *ptr; unsigned char *ptr1; int v1,v2,v3,v4; ptr = (unsigned short *)st->xim->data; ptr += (st->top << 1) * st->width; ptr1 = st->flame + 1 + (st->top * (st->fwidth + 2)); for(y = st->top; y < st->fheight; y++) { for( x = 0; x < st->fwidth; x++) { v1 = (int)*ptr1; v2 = (int)*(ptr1 + 1); v3 = (int)*(ptr1 + st->fwidth + 2); v4 = (int)*(ptr1 + st->fwidth + 2 + 1); ptr1++; *ptr++ = (unsigned short)st->ctab[v1]; *ptr = (unsigned short)st->ctab[(v1 + v2) >> 1]; ptr += st->width - 1; *ptr++ = (unsigned short)st->ctab[(v1 + v3) >> 1]; *ptr = (unsigned short)st->ctab[(v1 + v4) >> 1]; ptr -= st->width - 1; } ptr += st->width; ptr1 += 2; } } static void Flame2Image32(struct state *st) { int x,y; unsigned int *ptr; unsigned char *ptr1; int v1,v2,v3,v4; ptr = (unsigned int *)st->xim->data; ptr += (st->top << 1) * st->width; ptr1 = st->flame + 1 + (st->top * (st->fwidth + 2)); for( y = st->top; y < st->fheight; y++) { for( x = 0; x < st->fwidth; x++) { v1 = (int)*ptr1; v2 = (int)*(ptr1 + 1); v3 = (int)*(ptr1 + st->fwidth + 2); v4 = (int)*(ptr1 + st->fwidth + 2 + 1); ptr1++; *ptr++ = (unsigned int)st->ctab[v1]; *ptr = (unsigned int)st->ctab[(v1 + v2) >> 1]; ptr += st->width - 1; *ptr++ = (unsigned int)st->ctab[(v1 + v3) >> 1]; *ptr = (unsigned int)st->ctab[(v1 + v4) >> 1]; ptr -= st->width - 1; } ptr += st->width; ptr1 += 2; } } static void Flame2Image24(struct state *st) { int x,y; unsigned char *ptr; unsigned char *ptr1; int v1,v2,v3,v4; ptr = (unsigned char *)st->xim->data; ptr += (st->top << 1) * st->xim->bytes_per_line; ptr1 = st->flame + 1 + (st->top * (st->fwidth + 2)); for( y = st->top; y < st->fheight; y++) { unsigned char *last_ptr = ptr; for( x = 0; x < st->fwidth; x++) { v1 = (int)*ptr1; v2 = (int)*(ptr1 + 1); v3 = (int)*(ptr1 + st->fwidth + 2); v4 = (int)*(ptr1 + st->fwidth + 2 + 1); ptr1++; ptr[2] = ((unsigned int)st->ctab[v1] & 0x00FF0000) >> 16; ptr[1] = ((unsigned int)st->ctab[v1] & 0x0000FF00) >> 8; ptr[0] = ((unsigned int)st->ctab[v1] & 0x000000FF); ptr += 3; ptr[2] = ((unsigned int)st->ctab[(v1 + v2) >> 1] & 0x00FF0000) >> 16; ptr[1] = ((unsigned int)st->ctab[(v1 + v2) >> 1] & 0x0000FF00) >> 8; ptr[0] = ((unsigned int)st->ctab[(v1 + v2) >> 1] & 0x000000FF); ptr += ((st->width - 1) * 3); ptr[2] = ((unsigned int)st->ctab[(v1 + v3) >> 1] & 0x00FF0000) >> 16; ptr[1] = ((unsigned int)st->ctab[(v1 + v3) >> 1] & 0x0000FF00) >> 8; ptr[0] = ((unsigned int)st->ctab[(v1 + v3) >> 1] & 0x000000FF); ptr += 3; ptr[2] = ((unsigned int)st->ctab[(v1 + v4) >> 1] & 0x00FF0000) >> 16; ptr[1] = ((unsigned int)st->ctab[(v1 + v4) >> 1] & 0x0000FF00) >> 8; ptr[0] = ((unsigned int)st->ctab[(v1 + v4) >> 1] & 0x000000FF); ptr -= ((st->width - 1) * 3); } ptr = last_ptr + (st->xim->bytes_per_line << 1); ptr1 += 2; } } static void Flame2Image8(struct state *st) { int x,y; unsigned char *ptr; unsigned char *ptr1; int v1,v2,v3,v4; ptr = (unsigned char *)st->xim->data; ptr += (st->top << 1) * st->width; ptr1 = st->flame + 1 + (st->top * (st->fwidth + 2)); for(y=st->top;yfheight;y++) { for(x=0;xfwidth;x++) { v1 = (int)*ptr1; v2 = (int)*(ptr1 + 1); v3 = (int)*(ptr1 + st->fwidth + 2); v4 = (int)*(ptr1 + st->fwidth + 2 + 1); ptr1++; *ptr++ = (unsigned char)st->ctab[v1]; *ptr = (unsigned char)st->ctab[(v1 + v2) >> 1]; ptr += st->width - 1; *ptr++ = (unsigned char)st->ctab[(v1 + v3) >> 1]; *ptr = (unsigned char)st->ctab[(v1 + v4) >> 1]; ptr -= st->width - 1; } ptr += st->width; ptr1 += 2; } } static void Flame2Image1234567(struct state *st) { int x,y; unsigned char *ptr1; int v1,v2,v3,v4; ptr1 = st->flame + 1 + (st->top * (st->fwidth + 2)); for( y = st->top; y < st->fheight; y++) { for( x = 0; x < st->fwidth; x++) { v1 = (int)*ptr1; v2 = (int)*(ptr1 + 1); v3 = (int)*(ptr1 + st->fwidth + 2); v4 = (int)*(ptr1 + st->fwidth + 2 + 1); ptr1++; XPutPixel(st->xim,(x << 1), (y << 1), st->ctab[v1]); XPutPixel(st->xim,(x << 1) + 1,(y << 1), st->ctab[(v1 + v2) >> 1]); XPutPixel(st->xim,(x << 1), (y << 1) + 1,st->ctab[(v1 + v3) >> 1]); XPutPixel(st->xim,(x << 1) + 1,(y << 1) + 1,st->ctab[(v1 + v4) >> 1]); } } } static void Flame2Image(struct state *st) { switch (st->xim->bits_per_pixel) { case 32: Flame2Image32(st); break; case 24: Flame2Image24(st); break; case 16: Flame2Image16(st); break; case 8: Flame2Image8(st); break; default: if (st->xim->bits_per_pixel <= 7) Flame2Image1234567(st); else abort(); break; } } static void FlameActive(struct state *st) { int x,v1; unsigned char *ptr1; ptr1 = st->flame + ((st->fheight + 1) * (st->fwidth + 2)); for (x = 0; x < st->fwidth + 2; x++) { v1 = *ptr1; v1 += ((random() % st->variance) - st->vartrend); *ptr1++ = v1 % 255; } if (st->bloom) { v1= (random() % 100); if (v1 == 10) st->residual += (random()%10); else if (v1 == 20) st->hspread += (random()%15); else if (v1 == 30) st->vspread += (random()%20); } st->residual = ((st->iresidual* 10) + (st->residual *90)) / 100; st->hspread = ((st->ihspread * 10) + (st->hspread *90)) / 100; st->vspread = ((st->ivspread * 10) + (st->vspread *90)) / 100; } static void FlameAdvance(struct state *st) { int x,y; unsigned char *ptr2; int newtop = st->top; for (y = st->fheight + 1; y >= st->top; y--) { int used = 0; unsigned char *ptr1 = st->flame + 1 + (y * (st->fwidth + 2)); for (x = 0; x < st->fwidth; x++) { int v1 = (int)*ptr1; int v2, v3; if (v1 > 0) { used = 1; ptr2 = ptr1 - st->fwidth - 2; v3 = (v1 * st->vspread) >> 8; v2 = (int)*(ptr2); v2 += v3; if (v2 > MAX_VAL) v2 = MAX_VAL; *(ptr2) = (unsigned char)v2; v3 = (v1 * st->hspread) >> 8; v2 = (int)*(ptr2 + 1); v2 += v3; if (v2 > MAX_VAL) v2 = MAX_VAL; *(ptr2 + 1) = (unsigned char)v2; v2 = (int)*(ptr2 - 1); v2 += v3; if (v2 > MAX_VAL) v2 = MAX_VAL; *(ptr2 - 1) = (unsigned char)v2; if (y < st->fheight + 1) { v1 = (v1 * st->residual) >> 8; *ptr1 = (unsigned char)v1; } } ptr1++; if (used) newtop = y - 1; } /* clean up the right gutter */ { int v1 = (int)*ptr1; v1 = (v1 * st->residual) >> 8; *ptr1 = (unsigned char)v1; } } st->top = newtop - 1; if (st->top < 1) st->top = 1; } static void FlameFill(struct state *st, int val) { int x, y; for (y = 0; y < st->fheight + 1; y++) { unsigned char *ptr1 = st->flame + 1 + (y * (st->fwidth + 2)); for (x = 0; x < st->fwidth; x++) { *ptr1 = val; ptr1++; } } } static void FlamePasteData(struct state *st, unsigned char *d, int xx, int yy, int w, int h) { unsigned char *ptr1,*ptr2; ptr2 = d; if (xx < 0) xx = 0; if (yy < 0) yy = 0; if ((xx >= 0) && (yy >= 0) && (xx + w <= st->fwidth) && (yy + h <= st->fheight)) { int x, y; for (y = 0; y < h; y++) { ptr1 = st->flame + 1 + xx + ((yy + y) * (st->fwidth + 2)); for (x = 0; x < w; x++) { if (*ptr2 / 24) *ptr1 += random() % (*ptr2 / 24); ptr1++; ptr2++; } } } else { static Bool warned = False; if (!warned) { fprintf (stderr, "%s: st->window is %dx%d; image must be " "smaller than %dx%d (not %dx%d).\n", progname, st->width, st->height, st->fwidth, st->fheight, w, h); warned = True; } } } static unsigned char * loadBitmap(struct state *st, int *w, int *h) { # ifdef HAVE_JWXYZ const char *bitmap_name = "(default)"; /* #### always use builtin */ # else char *bitmap_name = get_string_resource (st->dpy, "bitmap", "Bitmap"); # endif if (!bitmap_name || !*bitmap_name || !strcmp(bitmap_name, "none")) ; else if (!strcmp(bitmap_name, "(default)")) /* use the builtin */ { XImage *ximage; unsigned char *result, *o; unsigned char *bits = (unsigned char *) malloc (sizeof(bob_bits)); int x, y; int scale = ((st->width > bob_width * 10) ? 2 : 1); memcpy (bits, bob_bits, sizeof(bob_bits)); ximage = XCreateImage (st->dpy, st->visual, 1, XYBitmap, 0, (char *) bits, bob_width, bob_height, 8, 0); ximage->byte_order = LSBFirst; ximage->bitmap_bit_order = LSBFirst; *w = ximage->width * scale; *h = ximage->height * scale; o = result = (unsigned char *) malloc ((*w * scale) * (*h * scale)); for (y = 0; y < *h; y++) for (x = 0; x < *w; x++) *o++ = (XGetPixel(ximage, x/scale, y/scale) ? 255 : 0); return result; } else /* load a bitmap file */ #ifdef HAVE_JWXYZ abort(); /* #### fix me */ #else { Pixmap pixmap = xpm_file_to_pixmap (st->dpy, st->window, bitmap_name, &st->width, &st->height, 0); XImage *image; int x, y; unsigned char *result, *o; XColor colors[256]; Bool cmap_p = has_writable_cells (st->screen, st->visual); if (cmap_p) { int i; for (i = 0; i < countof (colors); i++) colors[i].pixel = i; XQueryColors (st->dpy, st->colormap, colors, countof (colors)); } image = XGetImage (st->dpy, pixmap, 0, 0, st->width, st->height, ~0L, ZPixmap); XFreePixmap(st->dpy, pixmap); result = (unsigned char *) malloc (st->width * st->height); o = result; for (y = 0; y < st->height; y++) for (x = 0; x < st->width; x++) { int rgba = XGetPixel (image, x, y); int gray; if (cmap_p) gray = ((200 - ((((colors[rgba].red >> 8) & 0xFF) + ((colors[rgba].green >> 8) & 0xFF) + ((colors[rgba].blue >> 8) & 0xFF)) >> 1)) & 0xFF); else /* This is *so* not handling all the cases... */ gray = (image->depth > 16 ? ((((rgba >> 24) & 0xFF) + ((rgba >> 16) & 0xFF) + ((rgba >> 8) & 0xFF) + ((rgba ) & 0xFF)) >> 2) : ((((rgba >> 12) & 0x0F) + ((rgba >> 8) & 0x0F) + ((rgba >> 4) & 0x0F) + ((rgba ) & 0x0F)) >> 1)); *o++ = 255 - gray; } XFree (image->data); image->data = 0; XDestroyImage (image); *w = st->width; *h = st->height; return result; } #endif /* !HAVE_JWXYZ */ *w = 0; *h = 0; return 0; } static void * xflame_init (Display *dpy, Window win) { struct state *st = (struct state *) calloc (1, sizeof(*st)); st->dpy = dpy; st->window = win; st->baseline = get_integer_resource (dpy, "bitmapBaseline", "Integer"); st->delay = get_integer_resource (dpy, "delay", "Integer"); st->xim = NULL; st->top = 1; st->flame = NULL; GetXInfo(st); InitColors(st); st->theim = loadBitmap(st, &st->theimx, &st->theimy); MakeImage(st); InitFlame(st); FlameFill(st,0); return st; } static unsigned long xflame_draw (Display *dpy, Window win, void *closure) { struct state *st = (struct state *) closure; FlameActive(st); if (st->theim) FlamePasteData(st, st->theim, (st->fwidth - st->theimx) / 2, st->fheight - st->theimy - st->baseline, st->theimx, st->theimy); FlameAdvance(st); Flame2Image(st); DisplayImage(st); return st->delay; } static void xflame_reshape (Display *dpy, Window window, void *closure, unsigned int w, unsigned int h) { struct state *st = (struct state *) closure; GetXInfo(st); MakeImage(st); InitFlame(st); FlameFill(st,0); XClearWindow (dpy, window); } static Bool xflame_event (Display *dpy, Window window, void *closure, XEvent *event) { return False; } static void xflame_free (Display *dpy, Window window, void *closure) { } static const char *xflame_defaults [] = { ".background: black", ".foreground: #FFAF5F", "*fpsTop: true", "*fpsSolid: true", "*bitmap: (default)", "*bitmapBaseline: 20", "*delay: 10000", "*hspread: 30", "*vspread: 97", "*residual: 99", "*variance: 50", "*vartrend: 20", "*bloom: True", #ifdef HAVE_XSHM_EXTENSION "*useSHM: False", /* xshm turns out not to help. */ #endif /* HAVE_XSHM_EXTENSION */ 0 }; static XrmOptionDescRec xflame_options [] = { { "-foreground",".foreground", XrmoptionSepArg, 0 }, { "-fg", ".foreground", XrmoptionSepArg, 0 }, { "-delay", ".delay", XrmoptionSepArg, 0 }, { "-bitmap", ".bitmap", XrmoptionSepArg, 0 }, { "-baseline", ".bitmapBaseline", XrmoptionSepArg, 0 }, { "-hspread", ".hspread", XrmoptionSepArg, 0 }, { "-vspread", ".vspread", XrmoptionSepArg, 0 }, { "-residual", ".residual", XrmoptionSepArg, 0 }, { "-variance", ".variance", XrmoptionSepArg, 0 }, { "-vartrend", ".vartrend", XrmoptionSepArg, 0 }, { "-bloom", ".bloom", XrmoptionNoArg, "True" }, { "-no-bloom", ".bloom", XrmoptionNoArg, "False" }, #ifdef HAVE_XSHM_EXTENSION { "-shm", ".useSHM", XrmoptionNoArg, "True" }, { "-no-shm", ".useSHM", XrmoptionNoArg, "False" }, #endif /* HAVE_XSHM_EXTENSION */ { 0, 0, 0, 0 } }; XSCREENSAVER_MODULE ("XFlame", xflame) xscreensaver-5.36/hacks/wander.c000644 000767 000024 00000020221 12710314416 016647 0ustar00jwzstaff000000 000000 /* wander, by Rick Campbell , 19 December 1998. * * 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. */ #include #include "screenhack.h" #include "colors.h" #include "erase.h" #define MAXIMUM_COLOR_COUNT (256) struct state { Display *dpy; Window window; unsigned int advance; Bool circles; Colormap color_map; int color_count; int color_index; XColor colors [MAXIMUM_COLOR_COUNT]; GC context; unsigned int density; int depth; int height; unsigned int length; unsigned int reset; Bool reset_p; unsigned int size; int width; int delay; int x, y, last_x, last_y, width_1, height_1, length_limit, reset_limit; unsigned long color; Pixmap pixmap; eraser_state *eraser; }; static void * wander_init (Display *dpy, Window window) { struct state *st = (struct state *) calloc (1, sizeof(*st)); XGCValues values; XWindowAttributes attributes; st->dpy = dpy; st->window = window; st->delay = get_integer_resource (st->dpy, "delay", "Integer"); XClearWindow (st->dpy, st->window); XGetWindowAttributes (st->dpy, st->window, &attributes); st->width = attributes.width; st->height = attributes.height; st->depth = attributes.depth; st->color_map = attributes.colormap; if (st->color_count) { free_colors (attributes.screen, st->color_map, st->colors, st->color_count); st->color_count = 0; } st->context = XCreateGC (st->dpy, st->window, 0, &values); st->color_count = MAXIMUM_COLOR_COUNT; make_color_loop (attributes.screen, attributes.visual, st->color_map, 0, 1, 1, 120, 1, 1, 240, 1, 1, st->colors, &st->color_count, True, False); if (st->color_count <= 0) { st->color_count = 2; st->colors [0].red = st->colors [0].green = st->colors [0].blue = 0; st->colors [1].red = st->colors [1].green = st->colors [1].blue = 0xFFFF; XAllocColor (st->dpy, st->color_map, &st->colors [0]); XAllocColor (st->dpy, st->color_map, &st->colors [1]); } st->color_index = NRAND (st->color_count); st->advance = get_integer_resource (st->dpy, "advance", "Integer"); st->density = get_integer_resource (st->dpy, "density", "Integer"); if (st->density < 1) st->density = 1; st->reset = get_integer_resource (st->dpy, "reset", "Integer"); if (st->reset < 100) st->reset = 100; st->circles = get_boolean_resource (st->dpy, "circles", "Boolean"); st->size = get_integer_resource (st->dpy, "size", "Integer"); if (st->size < 1) st->size = 1; st->width = st->width / st->size; st->height = st->height / st->size; st->length = get_integer_resource (st->dpy, "length", "Integer"); if (st->length < 1) st->length = 1; XSetForeground (st->dpy, st->context, st->colors [st->color_index].pixel); st->x = NRAND (st->width); st->y = NRAND (st->height); st->last_x = st->x; st->last_y = st->y; st->width_1 = st->width - 1; st->height_1 = st->height - 1; st->length_limit = st->length; st->reset_limit = st->reset; st->color_index = NRAND (st->color_count); st->color = st->colors [NRAND (st->color_count)].pixel; st->pixmap = XCreatePixmap (st->dpy, window, st->size, st->size, st->depth); XSetForeground (st->dpy, st->context, BlackPixel (st->dpy, DefaultScreen (st->dpy))); XFillRectangle (st->dpy, st->pixmap, st->context, 0, 0, st->width * st->size, st->height * st->size); XSetForeground (st->dpy, st->context, st->color); XFillArc (st->dpy, st->pixmap, st->context, 0, 0, st->size, st->size, 0, 360*64); return st; } static unsigned long wander_draw (Display *dpy, Window window, void *closure) { struct state *st = (struct state *) closure; int i; if (st->eraser) { st->eraser = erase_window (st->dpy, st->window, st->eraser); goto END; } for (i = 0; i < 2000; i++) { if (NRAND (st->density)) { st->x = st->last_x; st->y = st->last_y; } else { st->last_x = st->x; st->last_y = st->y; st->x += st->width_1 + NRAND (3); while (st->x >= st->width) st->x -= st->width; st->y += st->height_1 + NRAND (3); while (st->y >= st->height) st->y -= st->height; } if (NRAND (st->length_limit) == 0) { if (st->advance == 0) { st->color_index = NRAND (st->color_count); } else { st->color_index = (st->color_index + st->advance) % st->color_count; } st->color = st->colors [st->color_index].pixel; XSetForeground (st->dpy, st->context, st->color); if (st->circles) { XFillArc (st->dpy, st->pixmap, st->context, 0, 0, st->size, st->size, 0, 360 * 64); } } if (st->reset_p || NRAND (st->reset_limit) == 0) { st->reset_p = 0; st->eraser = erase_window (st->dpy, st->window, st->eraser); st->color = st->colors [NRAND (st->color_count)].pixel; st->x = NRAND (st->width); st->y = NRAND (st->height); st->last_x = st->x; st->last_y = st->y; if (st->circles) { XFillArc (st->dpy, st->pixmap, st->context, 0, 0, st->size, st->size, 0, 360*64); } } if (st->size == 1) { XDrawPoint (st->dpy, st->window, st->context, st->x, st->y); } else { if (st->circles) { XCopyArea (st->dpy, st->pixmap, st->window, st->context, 0, 0, st->size, st->size, st->x * st->size, st->y * st->size); } else { XFillRectangle (st->dpy, st->window, st->context, st->x * st->size, st->y * st->size, st->size, st->size); } } } END: return st->delay; } 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 wander_event (Display *dpy, Window window, void *closure, XEvent *event) { struct state *st = (struct state *) closure; if (screenhack_event_helper (dpy, window, event)) { st->reset_p = 1; return True; } return False; } static void wander_free (Display *dpy, Window window, void *closure) { struct state *st = (struct state *) closure; XFreeGC (st->dpy, st->context); free (st); } static const char *wander_defaults [] = { ".background: black", ".foreground: white", ".fpsSolid: true", ".advance: 1", ".density: 2", ".length: 25000", ".delay: 20000", ".reset: 2500000", ".circles: False", ".size: 1", #ifdef HAVE_MOBILE "*ignoreRotation: True", #endif 0 }; static XrmOptionDescRec wander_options [] = { { "-advance", ".advance", XrmoptionSepArg, 0 }, { "-circles", ".circles", XrmoptionNoArg, "True" }, { "-no-circles",".circles", XrmoptionNoArg, "False" }, { "-density", ".density", XrmoptionSepArg, 0 }, { "-length", ".length", XrmoptionSepArg, 0 }, { "-delay", ".delay", XrmoptionSepArg, 0 }, { "-reset", ".reset", XrmoptionSepArg, 0 }, { "-size", ".size", XrmoptionSepArg, 0 }, { 0, 0, 0, 0 } }; XSCREENSAVER_MODULE ("Wander", wander) xscreensaver-5.36/hacks/spotlight.c000664 000767 000024 00000023076 12717747772 017447 0ustar00jwzstaff000000 000000 /* * spotlight - an xscreensaver module * Copyright (c) 1999, 2001 Rick Schultz * * loosely based on the BackSpace module "StefView" by Darcy Brockbank */ /* modified from a module from the xscreensaver distribution */ /* * xscreensaver, Copyright (c) 1992-2006 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. */ /* #define DEBUG */ #include #include #include "screenhack.h" #define MINX 0.0 #define MINY 0.0 #define X_PERIOD 15000.0 #define Y_PERIOD 12000.0 struct state { Display *dpy; Window window; Screen *screen; int sizex, sizey; /* screen size */ int delay; int duration; time_t start_time; int first_time; GC window_gc; #ifdef DEBUG GC white_gc; #endif GC buffer_gc; /* draw in buffer, then flush to screen to avoid flicker */ int radius; /* radius of spotlight in pixels */ Pixmap pm; /* pixmap grabbed from screen */ Pixmap buffer; /* pixmap for the buffer */ int x, y, s; /* x & y coords of buffer (upper left corner) */ /* s is the width of the buffer */ int off; /* random offset from currentTimeInMs(), so that two concurrent copies of spotlight have different behavior. */ int oldx, oldy, max_x_speed, max_y_speed; /* used to keep the new buffer position over the old spotlight image to make sure the old image is completely erased */ Bool first_p; async_load_state *img_loader; }; /* The path the spotlight follows around the screen is sinusoidal. This function is fed to sin() to get the x & y coords */ static long currentTimeInMs(struct state *st) { struct timeval curTime; unsigned long ret_unsigned; #ifdef GETTIMEOFDAY_TWO_ARGS struct timezone tz = {0,0}; gettimeofday(&curTime, &tz); #else gettimeofday(&curTime); #endif ret_unsigned = curTime.tv_sec *1000U + curTime.tv_usec / 1000; return (ret_unsigned <= LONG_MAX) ? ret_unsigned : -1 - (long)(ULONG_MAX - ret_unsigned); } static void * spotlight_init (Display *dpy, Window window) { struct state *st = (struct state *) calloc (1, sizeof(*st)); XGCValues gcv; XWindowAttributes xgwa; long gcflags; Colormap cmap; unsigned long bg; GC clip_gc; Pixmap clip_pm; st->dpy = dpy; st->window = window; st->first_p = True; XGetWindowAttributes (st->dpy, st->window, &xgwa); st->screen = xgwa.screen; st->sizex = xgwa.width; st->sizey = xgwa.height; cmap = xgwa.colormap; bg = get_pixel_resource (st->dpy, cmap, "background", "Background"); /* read parameters, keep em sane */ st->delay = get_integer_resource (st->dpy, "delay", "Integer"); if (st->delay < 1) st->delay = 1; st->duration = get_integer_resource (st->dpy, "duration", "Seconds"); if (st->duration < 1) st->duration = 1; st->radius = get_integer_resource (st->dpy, "radius", "Integer"); if (st->radius < 0) st->radius = 125; /* Don't let the spotlight be bigger than the window */ while (st->radius > xgwa.width * 0.45) st->radius /= 2; while (st->radius > xgwa.height * 0.45) st->radius /= 2; if (st->radius < 4) st->radius = 4; /* do the dance */ gcv.function = GXcopy; gcv.subwindow_mode = IncludeInferiors; gcflags = GCForeground | GCFunction; gcv.foreground = bg; #ifdef NOPE if (use_subwindow_mode_p(xgwa.screen, st->window)) /* see grabscreen.c */ gcflags |= GCSubwindowMode; #endif st->window_gc = XCreateGC(st->dpy, st->window, gcflags, &gcv); st->pm = XCreatePixmap(st->dpy, st->window, st->sizex, st->sizey, xgwa.depth); XClearWindow(st->dpy, st->window); st->first_time = 1; /* create buffer to reduce flicker */ #ifdef HAVE_JWXYZ /* Don't second-guess Quartz's double-buffering */ st->buffer = 0; #else st->buffer = XCreatePixmap(st->dpy, st->window, st->sizex, st->sizey, xgwa.depth); #endif st->buffer_gc = XCreateGC(st->dpy, (st->buffer ? st->buffer : window), gcflags, &gcv); if (st->buffer) XFillRectangle(st->dpy, st->buffer, st->buffer_gc, 0, 0, st->sizex, st->sizey); /* create clip mask (so it's a circle, not a square) */ clip_pm = XCreatePixmap(st->dpy, st->window, st->radius*4, st->radius*4, 1); st->img_loader = load_image_async_simple (0, xgwa.screen, st->window, st->pm, 0, 0); st->start_time = time ((time_t *) 0); gcv.foreground = 0L; clip_gc = XCreateGC(st->dpy, clip_pm, gcflags, &gcv); XFillRectangle(st->dpy, clip_pm, clip_gc, 0, 0, st->radius*4, st->radius*4); XSetForeground(st->dpy, clip_gc, 1L); XFillArc(st->dpy, clip_pm, clip_gc, st->radius , st->radius, st->radius*2, st->radius*2, 0, 360*64); /* set buffer's clip mask to the one we just made */ XSetClipMask(st->dpy, st->buffer_gc, clip_pm); /* free everything */ XFreeGC(st->dpy, clip_gc); XFreePixmap(st->dpy, clip_pm); /* avoid remants */ st->max_x_speed = st->max_y_speed = st->radius; st->off = random(); /* blank out screen */ XFillRectangle(st->dpy, st->window, st->window_gc, 0, 0, st->sizex, st->sizey); return st; } /* * perform one iteration */ static void onestep (struct state *st, Bool first_p) { long now; unsigned long now_unsigned; if (st->img_loader) /* still loading */ { st->img_loader = load_image_async_simple (st->img_loader, 0, 0, 0, 0, 0); if (! st->img_loader) { /* just finished */ st->start_time = time ((time_t *) 0); } return; } if (!st->img_loader && st->start_time + st->duration < time ((time_t *) 0)) { st->img_loader = load_image_async_simple (0, st->screen, st->window, st->pm, 0, 0); return; } #define nrnd(x) (random() % (x)) st->oldx = st->x; st->oldy = st->y; st->s = st->radius *4 ; /* s = width of buffer */ now_unsigned = (unsigned long) currentTimeInMs(st) + st->off; now = (now_unsigned <= LONG_MAX) ? now_unsigned : -1 - (long)(ULONG_MAX - now_unsigned); /* find new x,y */ st->x = ((1 + sin(((double)now) / X_PERIOD * 2. * M_PI))/2.0) * (st->sizex - st->s/2) -st->s/4 + MINX; st->y = ((1 + sin(((double)now) / Y_PERIOD * 2. * M_PI))/2.0) * (st->sizey - st->s/2) -st->s/4 + MINY; if (!st->first_p) { /* limit change in x and y to buffer width */ if ( st->x < (st->oldx - st->max_x_speed) ) st->x = st->oldx - st->max_x_speed; if ( st->x > (st->oldx + st->max_x_speed) ) st->x = st->oldx + st->max_x_speed; if ( st->y < (st->oldy - st->max_y_speed) ) st->y = st->oldy - st->max_y_speed; if ( st->y > (st->oldy + st->max_y_speed) ) st->y = st->oldy + st->max_y_speed; } if (! st->buffer) { XClearWindow (st->dpy, st->window); XSetClipOrigin(st->dpy, st->buffer_gc, st->x,st->y); XCopyArea(st->dpy, st->pm, st->window, st->buffer_gc, st->x, st->y, st->s, st->s, st->x, st->y); } else { /* clear buffer */ XFillRectangle(st->dpy, st->buffer, st->buffer_gc, st->x, st->y, st->s, st->s); /* copy area of screen image (pm) to buffer Clip to a circle */ XSetClipOrigin(st->dpy, st->buffer_gc, st->x,st->y); XCopyArea(st->dpy, st->pm, st->buffer, st->buffer_gc, st->x, st->y, st->s, st->s, st->x, st->y); if (st->first_time) { /* blank out screen */ XFillRectangle(st->dpy, st->window, st->window_gc, 0, 0, st->sizex, st->sizey); st->first_time = 0; } /* copy buffer to screen (window) */ XCopyArea(st->dpy, st->buffer, st->window, st->window_gc, st->x , st->y, st->s, st->s, st->x, st->y); } #ifdef DEBUG /* draw a box around the buffer */ XDrawRectangle(st->dpy, st->window, st->white_gc, st->x , st->y, st->s, st->s); #endif } static unsigned long spotlight_draw (Display *dpy, Window window, void *closure) { struct state *st = (struct state *) closure; onestep(st, st->first_p); st->first_p = False; return st->delay; } static void spotlight_reshape (Display *dpy, Window window, void *closure, unsigned int w, unsigned int h) { } static Bool spotlight_event (Display *dpy, Window window, void *closure, XEvent *event) { struct state *st = (struct state *) closure; if (screenhack_event_helper (dpy, window, event)) { st->start_time = 0; return True; } return False; } static void spotlight_free (Display *dpy, Window window, void *closure) { struct state *st = (struct state *) closure; XFreeGC (dpy, st->window_gc); XFreeGC (dpy, st->buffer_gc); if (st->pm) XFreePixmap (dpy, st->pm); if (st->buffer) XFreePixmap (dpy, st->buffer); free (st); } static const char *spotlight_defaults [] = { ".background: black", ".foreground: white", "*dontClearRoot: True", "*fpsSolid: true", #ifdef __sgi /* really, HAVE_READ_DISPLAY_EXTENSION */ "*visualID: Best", #endif "*delay: 10000", "*duration: 120", "*radius: 125", #ifdef HAVE_MOBILE "*ignoreRotation: True", "*rotateImages: True", #endif 0 }; static XrmOptionDescRec spotlight_options [] = { { "-delay", ".delay", XrmoptionSepArg, 0 }, { "-duration", ".duration", XrmoptionSepArg, 0 }, { "-radius", ".radius", XrmoptionSepArg, 0 }, { 0, 0, 0, 0 } }; XSCREENSAVER_MODULE ("Spotlight", spotlight) xscreensaver-5.36/hacks/critical.c000644 000767 000024 00000026610 12717746056 017211 0ustar00jwzstaff000000 000000 /* critical -- Self-organizing-criticality display hack for XScreenSaver * Copyright (C) 1998, 1999, 2000 Martin Pool * * 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. * * See `critical.man' for more information. * * Revision history: * 13 Nov 1998: Initial version, Martin Pool * 08 Feb 2000: Change to keeping and erasing a trail, * * It would be nice to draw curvy shapes rather than just straight * lines, but X11 doesn't have spline primitives (?) so we'd have to * do all the work ourselves */ #include "screenhack.h" #include "erase.h" #include #include #include typedef struct { int width, height; /* in cells */ unsigned short *cells; } CriticalModel; typedef struct { int trail; /* length of trail */ int cell_size; } CriticalSettings; /* Number of screens that should be drawn before reinitializing the model, and count of the number of screens done so far. */ struct state { Display *dpy; Window window; int n_restart, i_restart; XWindowAttributes wattr; CriticalModel *model; int batchcount; XPoint *history; /* in cell coords */ long delay_usecs; GC fgc, bgc; XGCValues gcv; CriticalSettings settings; int d_n_colors; XColor *d_colors; int lines_per_color; int d_i_color; int d_pos; int d_wrapped; int d_i_batch; eraser_state *eraser; }; static CriticalModel * model_allocate (int w, int h); static void model_initialize (CriticalModel *); static int clip (int low, int val, int high) { if (val < low) return low; else if (val > high) return high; else return val; } /* Allocate an return a new simulation model datastructure. */ static CriticalModel * model_allocate (int model_w, int model_h) { CriticalModel *mm; mm = malloc (sizeof (CriticalModel)); if (!mm) return 0; mm->width = model_w; mm->height = model_h; mm->cells = malloc (sizeof (unsigned short) * model_w * model_h); if (!mm->cells) { free (mm); return 0; } return mm; } /* Initialize the data model underlying the hack. For the self-organizing criticality hack, this consists of a 2d array full of random integers. I've considered storing the data as (say) a binary tree within a 2d array, to make finding the highest value faster at the expense of storage space: searching the whole array on each iteration seems a little inefficient. However, the screensaver doesn't seem to take up many cycles as it is: presumably the search is pretty quick compared to the sleeps. The current version uses less than 1% of the CPU time of an AMD K6-233. Many machines running X11 at this point in time seem to be memory-limited, not CPU-limited. The root of all evil, and all that. */ static void model_initialize (CriticalModel *mm) { int i; for (i = mm->width * mm->height - 1; i >= 0; i--) { mm->cells[i] = (unsigned short) random (); } } /* Move one step forward in the criticality simulation. This function locates and returns in (TOP_X, TOP_Y) the location of the highest-valued cell in the model. It also replaces that cell and it's eight nearest neighbours with new random values. Neighbours that fall off the edge of the model are simply ignored. */ static void model_step (CriticalModel *mm, XPoint *ptop) { int x, y, i; int dx, dy; unsigned short top_value = 0; int top_x = 0, top_y = 0; /* Find the top cell */ top_value = 0; i = 0; for (y = 0; y < mm->height; y++) for (x = 0; x < mm->width; x++) { if (mm->cells[i] >= top_value) { top_value = mm->cells[i]; top_x = x; top_y = y; } i++; } /* Replace it and its neighbours with new random values */ for (dy = -1; dy <= 1; dy++) { int yy = top_y + dy; if (yy < 0 || yy >= mm->height) continue; for (dx = -1; dx <= 1; dx++) { int xx = top_x + dx; if (xx < 0 || xx >= mm->width) continue; mm->cells[yy * mm->width + xx] = (unsigned short) random(); } } ptop->x = top_x; ptop->y = top_y; } /* Construct and return in COLORS and N_COLORS a new set of colors, depending on the resource settings. */ static void setup_colormap (struct state *st, XColor **colors, int *n_colors) { Bool writable; char const * color_scheme; /* Make a colormap */ *n_colors = get_integer_resource (st->dpy, "ncolors", "Integer"); if (*n_colors < 3) *n_colors = 3; *colors = (XColor *) calloc (sizeof(XColor), *n_colors); if (!*colors) { fprintf (stderr, "%s:%d: can't allocate memory for colors\n", __FILE__, __LINE__); return; } writable = False; color_scheme = get_string_resource (st->dpy, "colorscheme", "ColorScheme"); if (!strcmp (color_scheme, "random")) { make_random_colormap (st->wattr.screen, st->wattr.visual, st->wattr.colormap, *colors, n_colors, True, True, &writable, True); } else if (!strcmp (color_scheme, "smooth")) { make_smooth_colormap (st->wattr.screen, st->wattr.visual, st->wattr.colormap, *colors, n_colors, True, &writable, True); } else { make_uniform_colormap (st->wattr.screen, st->wattr.visual, st->wattr.colormap, *colors, n_colors, True, &writable, True); } } /* Free allocated colormap created by setup_colormap. */ static void free_colormap (struct state *st, XColor **colors, int n_colors) { free_colors (st->wattr.screen, st->wattr.colormap, *colors, n_colors); free (*colors); } /* Draw one step of the hack. Positions are cell coordinates. */ static void draw_step (struct state *st, GC gc, int pos) { int cell_size = st->settings.cell_size; int half = cell_size/2; int old_pos = (pos + st->settings.trail - 1) % st->settings.trail; pos = pos % st->settings.trail; XDrawLine (st->dpy, st->window, gc, st->history[pos].x * cell_size + half, st->history[pos].y * cell_size + half, st->history[old_pos].x * cell_size + half, st->history[old_pos].y * cell_size + half); } static void * critical_init (Display *dpy, Window window) { struct state *st = (struct state *) calloc (1, sizeof(*st)); int model_w, model_h; st->dpy = dpy; st->window = window; /* Find window attributes */ XGetWindowAttributes (st->dpy, st->window, &st->wattr); st->batchcount = get_integer_resource (st->dpy, "batchcount", "Integer"); if (st->batchcount < 5) st->batchcount = 5; st->lines_per_color = 10; /* For the moment the model size is just fixed -- making it vary with the screen size just makes the hack boring on large screens. */ model_w = 80; st->settings.cell_size = st->wattr.width / model_w; model_h = st->settings.cell_size ? st->wattr.height / st->settings.cell_size : 1; /* Construct the initial model state. */ st->settings.trail = clip(2, get_integer_resource (st->dpy, "trail", "Integer"), 1000); st->history = calloc (st->settings.trail, sizeof (st->history[0])); if (!st->history) { fprintf (stderr, "critical: " "couldn't allocate trail history of %d cells\n", st->settings.trail); abort(); } st->model = model_allocate (model_w, model_h); if (!st->model) { fprintf (stderr, "critical: error preparing the model\n"); abort(); } /* make a black gc for the background */ st->gcv.foreground = get_pixel_resource (st->dpy, st->wattr.colormap, "background", "Background"); st->bgc = XCreateGC (st->dpy, st->window, GCForeground, &st->gcv); st->fgc = XCreateGC (st->dpy, st->window, 0, &st->gcv); #ifdef HAVE_JWXYZ jwxyz_XSetAntiAliasing (dpy, st->fgc, False); jwxyz_XSetAntiAliasing (dpy, st->bgc, False); #endif st->delay_usecs = get_integer_resource (st->dpy, "delay", "Integer"); st->n_restart = get_integer_resource (st->dpy, "restart", "Integer"); setup_colormap (st, &st->d_colors, &st->d_n_colors); model_initialize (st->model); model_step (st->model, &st->history[0]); st->d_pos = 1; st->d_wrapped = 0; st->i_restart = 0; st->d_i_batch = st->batchcount; return st; } static unsigned long critical_draw (Display *dpy, Window window, void *closure) { struct state *st = (struct state *) closure; if (st->eraser) { st->eraser = erase_window (st->dpy, st->window, st->eraser); return st->delay_usecs; } /* for (d_i_batch = batchcount; d_i_batch; d_i_batch--) */ { /* Set color */ if ((st->d_i_batch % st->lines_per_color) == 0) { st->d_i_color = (st->d_i_color + 1) % st->d_n_colors; st->gcv.foreground = st->d_colors[st->d_i_color].pixel; XChangeGC (st->dpy, st->fgc, GCForeground, &st->gcv); } assert(st->d_pos >= 0 && st->d_pos < st->settings.trail); model_step (st->model, &st->history[st->d_pos]); draw_step (st, st->fgc, st->d_pos); /* we use the history as a ring buffer, but don't start erasing until we've d_wrapped around once. */ if (++st->d_pos >= st->settings.trail) { st->d_pos -= st->settings.trail; st->d_wrapped = 1; } if (st->d_wrapped) { draw_step (st, st->bgc, st->d_pos+1); } } st->d_i_batch--; if (st->d_i_batch < 0) st->d_i_batch = st->batchcount; else return st->delay_usecs; st->i_restart = (st->i_restart + 1) % st->n_restart; if (st->i_restart == 0) { /* Time to start a new simulation, this one has probably got to be a bit boring. */ free_colormap (st, &st->d_colors, st->d_n_colors); setup_colormap (st, &st->d_colors, &st->d_n_colors); st->eraser = erase_window (st->dpy, st->window, st->eraser); model_initialize (st->model); model_step (st->model, &st->history[0]); st->d_pos = 1; st->d_wrapped = 0; st->d_i_batch = st->batchcount; } return st->delay_usecs; } static void critical_reshape (Display *dpy, Window window, void *closure, unsigned int w, unsigned int h) { } static Bool critical_event (Display *dpy, Window window, void *closure, XEvent *event) { return False; } static void critical_free (Display *dpy, Window window, void *closure) { struct state *st = (struct state *) closure; free (st); } /* Options this module understands. */ static XrmOptionDescRec critical_options[] = { { "-ncolors", ".ncolors", XrmoptionSepArg, 0 }, { "-delay", ".delay", XrmoptionSepArg, 0 }, { "-colorscheme", ".colorscheme", XrmoptionSepArg, 0 }, { "-restart", ".restart", XrmoptionSepArg, 0 }, { "-batchcount", ".batchcount", XrmoptionSepArg, 0 }, { "-trail", ".trail", XrmoptionSepArg, 0 }, { 0, 0, 0, 0 } /* end */ }; /* Default xrm resources. */ static const char *critical_defaults[] = { ".background: black", "*fpsSolid: true", "*colorscheme: smooth", "*delay: 10000", "*ncolors: 64", "*restart: 8", "*batchcount: 1500", "*trail: 50", 0 /* end */ }; XSCREENSAVER_MODULE ("Critical", critical) xscreensaver-5.36/hacks/phosphor.c000644 000767 000024 00000112745 12721443526 017255 0ustar00jwzstaff000000 000000 /* xscreensaver, Copyright (c) 1999-2016 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. * * Phosphor -- simulate a glass tty with long-sustain phosphor. * Written by Jamie Zawinski * Pty and vt100 emulation by Fredrik Tolf */ #ifdef HAVE_CONFIG_H # include "config.h" #endif /* HAVE_CONFIG_H */ #ifndef HAVE_JWXYZ # include #endif #include "screenhack.h" #include "textclient.h" #include "utf8wc.h" #define FUZZY_BORDER #define MAX(a,b) ((a)>(b)?(a):(b)) #define MIN(a,b) ((a)<(b)?(a):(b)) #define BLANK 0 #define FLARE 1 #define NORMAL 2 #define FADE 3 #define STATE_MAX FADE #define CURSOR_INDEX 128 #define NPAR 16 #define BUILTIN_FONT #ifdef BUILTIN_FONT # include "images/6x10font.xbm" #endif /* BUILTIN_FONT */ typedef struct { unsigned char name; int width, height; Pixmap pixmap; #ifdef FUZZY_BORDER Pixmap pixmap2; #endif /* FUZZY_BORDER */ Bool blank_p; } p_char; typedef struct { p_char *p_char; int state; Bool changed; } p_cell; typedef struct { Display *dpy; Window window; XWindowAttributes xgwa; XFontStruct *font; const char *program; int grid_width, grid_height; int char_width, char_height; int saved_x, saved_y; int scale; int ticks; int mode; int escstate; int csiparam[NPAR]; int curparam; int unicruds; unsigned char unicrud[7]; p_char **chars; p_cell *cells; XGCValues gcv; GC gc0; GC gc1; #ifdef FUZZY_BORDER GC gc2; #endif /* FUZZY_BORDER */ GC *gcs; XImage *font_bits; int cursor_x, cursor_y; XtIntervalId cursor_timer; Time cursor_blink; int delay; Bool pty_p; text_data *tc; char last_c; int bk; } p_state; static void capture_font_bits (p_state *state); static p_char *make_character (p_state *state, int c); static void char_to_pixmap (p_state *state, p_char *pc, int c); /* About font metrics: "lbearing" is the distance from the leftmost pixel of a character to the logical origin of that character. That is, it is the number of pixels of the character which are to the left of its logical origin. "rbearing" is the distance from the logical origin of a character to the rightmost pixel of a character. That is, it is the number of pixels of the character to the right of its logical origin. "descent" is the distance from the bottommost pixel of a character to the logical baseline. That is, it is the number of pixels of the character which are below the baseline. "ascent" is the distance from the logical baseline to the topmost pixel. That is, it is the number of pixels of the character above the baseline. Therefore, the bounding box of the "ink" of a character is lbearing + rbearing by ascent + descent; "width" is the distance from the logical origin of this character to the position where the logical orgin of the next character should be placed. For our purposes, we're only interested in the part of the character lying inside the "width" box. If the characters have ink outside of that box (the "charcell" box) then we're going to lose it. Alas. */ static void clear (p_state *); static void set_cursor (p_state *, Bool on); static unsigned short scale_color_channel (unsigned short ch1, unsigned short ch2) { return (ch1 * 100 + ch2 * 156) >> 8; } static void * phosphor_init (Display *dpy, Window window) { int i; unsigned long flags; p_state *state = (p_state *) calloc (sizeof(*state), 1); char *fontname = get_string_resource (dpy, "font", "Font"); XFontStruct *font; state->dpy = dpy; state->window = window; XGetWindowAttributes (dpy, window, &state->xgwa); /* XSelectInput (dpy, window, state->xgwa.your_event_mask | ExposureMask);*/ state->delay = get_integer_resource (dpy, "delay", "Integer"); state->pty_p = get_boolean_resource (dpy, "usePty", "UsePty"); if (!strcasecmp (fontname, "builtin") || !strcasecmp (fontname, "(builtin)")) { #ifndef BUILTIN_FONT fprintf (stderr, "%s: no builtin font\n", progname); state->font = XLoadQueryFont (dpy, "fixed"); #endif /* !BUILTIN_FONT */ } else { state->font = XLoadQueryFont (dpy, fontname); if (!state->font) { fprintf(stderr, "couldn't load font \"%s\"\n", fontname); state->font = XLoadQueryFont (dpy, "fixed"); } if (!state->font) { fprintf(stderr, "couldn't load font \"fixed\""); exit(1); } } font = state->font; state->scale = get_integer_resource (dpy, "scale", "Integer"); state->ticks = STATE_MAX + get_integer_resource (dpy, "ticks", "Integer"); state->escstate = 0; state->cursor_blink = get_integer_resource (dpy, "cursor", "Time"); # ifdef BUILTIN_FONT if (! font) { state->char_width = (font6x10_width / 256) - 1; state->char_height = font6x10_height; } else # endif /* BUILTIN_FONT */ { state->char_width = font->max_bounds.width; state->char_height = font->max_bounds.ascent + font->max_bounds.descent; } state->grid_width = state->xgwa.width / (state->char_width * state->scale); state->grid_height = state->xgwa.height /(state->char_height * state->scale); state->cells = (p_cell *) calloc (sizeof(p_cell), state->grid_width * state->grid_height); state->chars = (p_char **) calloc (sizeof(p_char *), 256); state->gcs = (GC *) calloc (sizeof(GC), state->ticks + 1); { int ncolors = MAX (1, state->ticks - 3); XColor *colors = (XColor *) calloc (ncolors, sizeof(XColor)); int h1, h2; double s1, s2, v1, v2; unsigned long fg = get_pixel_resource (state->dpy, state->xgwa.colormap, "foreground", "Foreground"); unsigned long bg = get_pixel_resource (state->dpy, state->xgwa.colormap, "background", "Background"); unsigned long flare = fg; XColor fg_color, bg_color; fg_color.pixel = fg; XQueryColor (state->dpy, state->xgwa.colormap, &fg_color); bg_color.pixel = bg; XQueryColor (state->dpy, state->xgwa.colormap, &bg_color); /* Now allocate a ramp of colors from the main color to the background. */ rgb_to_hsv (scale_color_channel(fg_color.red, bg_color.red), scale_color_channel(fg_color.green, bg_color.green), scale_color_channel(fg_color.blue, bg_color.blue), &h1, &s1, &v1); rgb_to_hsv (bg_color.red, bg_color.green, bg_color.blue, &h2, &s2, &v2); /* Avoid rainbow effects when fading to black/grey/white. */ if (s2 < 0.003) h2 = h1; if (s1 < 0.003) h1 = h2; make_color_ramp (state->xgwa.screen, state->xgwa.visual, state->xgwa.colormap, h1, s1, v1, h2, s2, v2, colors, &ncolors, False, True, False); /* Adjust to the number of colors we actually got. */ state->ticks = ncolors + STATE_MAX; /* If the foreground is brighter than the background, the flare is white. * Otherwise, the flare is left at the foreground color (i.e. no flare). */ rgb_to_hsv (fg_color.red, fg_color.green, fg_color.blue, &h1, &s1, &v1); if (v2 <= v1) { XColor white; /* WhitePixel is only for the default visual, which can be overridden * on the command line. */ white.red = 0xffff; white.green = 0xffff; white.blue = 0xffff; if (XAllocColor(state->dpy, state->xgwa.colormap, &white)) flare = white.pixel; } /* Now, GCs all around. */ state->gcv.font = (font ? font->fid : 0); state->gcv.cap_style = CapRound; #ifdef FUZZY_BORDER state->gcv.line_width = (int) (((long) state->scale) * 1.3); if (state->gcv.line_width == state->scale) state->gcv.line_width++; #else /* !FUZZY_BORDER */ state->gcv.line_width = (int) (((long) state->scale) * 0.9); if (state->gcv.line_width >= state->scale) state->gcv.line_width = state->scale - 1; if (state->gcv.line_width < 1) state->gcv.line_width = 1; #endif /* !FUZZY_BORDER */ flags = (GCForeground | GCBackground | GCCapStyle | GCLineWidth); state->gcv.background = bg; state->gcv.foreground = bg; state->gcs[BLANK] = XCreateGC (state->dpy, state->window, flags, &state->gcv); state->gcv.foreground = flare; state->gcs[FLARE] = XCreateGC (state->dpy, state->window, flags, &state->gcv); state->gcv.foreground = fg; state->gcs[NORMAL] = XCreateGC (state->dpy, state->window, flags, &state->gcv); for (i = 0; i < ncolors; i++) { state->gcv.foreground = colors[i].pixel; state->gcs[STATE_MAX + i] = XCreateGC (state->dpy, state->window, flags, &state->gcv); } } capture_font_bits (state); set_cursor (state, True); /* clear (state);*/ state->tc = textclient_open (dpy); textclient_reshape (state->tc, state->xgwa.width, state->xgwa.height, state->grid_width - 1, state->grid_height - 1, 0); return state; } /* Re-query the window size and update the internal character grid if changed. */ static Bool resize_grid (p_state *state) { int ow = state->grid_width; int oh = state->grid_height; p_cell *ocells = state->cells; int x, y; XGetWindowAttributes (state->dpy, state->window, &state->xgwa); state->grid_width = state->xgwa.width /(state->char_width * state->scale); state->grid_height = state->xgwa.height /(state->char_height * state->scale); if (ow == state->grid_width && oh == state->grid_height) return False; state->cells = (p_cell *) calloc (sizeof(p_cell), state->grid_width * state->grid_height); for (y = 0; y < state->grid_height; y++) { for (x = 0; x < state->grid_width; x++) { p_cell *ncell = &state->cells [state->grid_width * y + x]; if (x < ow && y < oh) *ncell = ocells [ow * y + x]; ncell->changed = True; } } if (state->cursor_x >= state->grid_width) state->cursor_x = state->grid_width-1; if (state->cursor_y >= state->grid_height) state->cursor_y = state->grid_height-1; free (ocells); return True; } static void capture_font_bits (p_state *state) { XFontStruct *font = state->font; int safe_width, height; unsigned char string[257]; int i; Pixmap p; # ifdef BUILTIN_FONT Pixmap p2 = 0; if (!font) { safe_width = state->char_width + 1; height = state->char_height; p2 = XCreatePixmapFromBitmapData (state->dpy, state->window, (char *) font6x10_bits, font6x10_width, font6x10_height, 1, 0, 1); } else # endif /* BUILTIN_FONT */ { safe_width = font->max_bounds.rbearing - font->min_bounds.lbearing; height = state->char_height; } p = XCreatePixmap (state->dpy, state->window, (safe_width * 256), height, 1); for (i = 0; i < 256; i++) string[i] = (unsigned char) i; string[256] = 0; state->gcv.foreground = 0; state->gcv.background = 0; state->gc0 = XCreateGC (state->dpy, p, (GCForeground | GCBackground), &state->gcv); state->gcv.foreground = 1; state->gc1 = XCreateGC (state->dpy, p, ((font ? GCFont : 0) | GCForeground | GCBackground | GCCapStyle | GCLineWidth), &state->gcv); #ifdef HAVE_JWXYZ jwxyz_XSetAntiAliasing (state->dpy, state->gc0, False); jwxyz_XSetAntiAliasing (state->dpy, state->gc1, False); #endif #ifdef FUZZY_BORDER { state->gcv.line_width = (int) (((long) state->scale) * 0.8); if (state->gcv.line_width >= state->scale) state->gcv.line_width = state->scale - 1; if (state->gcv.line_width < 1) state->gcv.line_width = 1; state->gc2 = XCreateGC (state->dpy, p, ((font ? GCFont : 0) | GCForeground | GCBackground | GCCapStyle | GCLineWidth), &state->gcv); } #endif /* FUZZY_BORDER */ XFillRectangle (state->dpy, p, state->gc0, 0, 0, (safe_width * 256), height); # ifdef BUILTIN_FONT if (p2) { XCopyPlane (state->dpy, p2, p, state->gc1, 0, 0, font6x10_width, font6x10_height, 0, 0, 1); XFreePixmap (state->dpy, p2); } else # endif /* BUILTIN_FONT */ { for (i = 0; i < 256; i++) { if (string[i] < font->min_char_or_byte2 || string[i] > font->max_char_or_byte2) continue; XDrawString (state->dpy, p, state->gc1, i * safe_width, font->ascent, (char *) (string + i), 1); } } /* Draw the cursor. */ XFillRectangle (state->dpy, p, state->gc1, (CURSOR_INDEX * safe_width), 1, (font ? (font->per_char ? font->per_char['n'-font->min_char_or_byte2].width : font->max_bounds.width) : state->char_width), (font ? font->ascent - 1 : state->char_height)); state->font_bits = XGetImage (state->dpy, p, 0, 0, (safe_width * 256), height, ~0L, XYPixmap); XFreePixmap (state->dpy, p); for (i = 0; i < 256; i++) state->chars[i] = make_character (state, i); state->chars[CURSOR_INDEX] = make_character (state, CURSOR_INDEX); } static p_char * make_character (p_state *state, int c) { p_char *pc = (p_char *) malloc (sizeof (*pc)); pc->name = (unsigned char) c; pc->width = state->scale * state->char_width; pc->height = state->scale * state->char_height; char_to_pixmap (state, pc, c); return pc; } static void char_to_pixmap (p_state *state, p_char *pc, int c) { Pixmap p = 0; GC gc; #ifdef FUZZY_BORDER Pixmap p2 = 0; GC gc2; #endif /* FUZZY_BORDER */ int from, to; int x1, y; XFontStruct *font = state->font; int safe_width = (font ? font->max_bounds.rbearing - font->min_bounds.lbearing : state->char_width + 1); int width = state->scale * state->char_width; int height = state->scale * state->char_height; if (font && (c < font->min_char_or_byte2 || c > font->max_char_or_byte2)) goto DONE; gc = state->gc1; p = XCreatePixmap (state->dpy, state->window, width, height, 1); XFillRectangle (state->dpy, p, state->gc0, 0, 0, width, height); #ifdef FUZZY_BORDER gc2 = state->gc2; p2 = XCreatePixmap (state->dpy, state->window, width, height, 1); XFillRectangle (state->dpy, p2, state->gc0, 0, 0, width, height); #endif /* FUZZY_BORDER */ from = safe_width * c; to = safe_width * (c + 1); #if 0 if (c > 75 && c < 150) { printf ("\n=========== %d (%c)\n", c, c); for (y = 0; y < state->char_height; y++) { for (x1 = from; x1 < to; x1++) printf (XGetPixel (state->font_bits, x1, y) ? "* " : ". "); printf ("\n"); } } #endif pc->blank_p = True; for (y = 0; y < state->char_height; y++) for (x1 = from; x1 < to; x1++) if (XGetPixel (state->font_bits, x1, y)) { int xoff = state->scale / 2; int x2; for (x2 = x1; x2 < to; x2++) if (!XGetPixel (state->font_bits, x2, y)) break; x2--; XDrawLine (state->dpy, p, gc, (x1 - from) * state->scale + xoff, y * state->scale, (x2 - from) * state->scale + xoff, y * state->scale); #ifdef FUZZY_BORDER XDrawLine (state->dpy, p2, gc2, (x1 - from) * state->scale + xoff, y * state->scale, (x2 - from) * state->scale + xoff, y * state->scale); #endif /* FUZZY_BORDER */ x1 = x2; pc->blank_p = False; } /* if (pc->blank_p && c == CURSOR_INDEX) abort();*/ DONE: pc->pixmap = p; #ifdef FUZZY_BORDER pc->pixmap2 = p2; #endif /* FUZZY_BORDER */ } /* Managing the display. */ static void cursor_on_timer (XtPointer closure, XtIntervalId *id); static void cursor_off_timer (XtPointer closure, XtIntervalId *id); static Bool set_cursor_1 (p_state *state, Bool on) { p_cell *cell = &state->cells[state->grid_width * state->cursor_y + state->cursor_x]; p_char *cursor = state->chars[CURSOR_INDEX]; int new_state = (on ? NORMAL : FADE); if (cell->p_char != cursor) cell->changed = True; if (cell->state != new_state) cell->changed = True; cell->p_char = cursor; cell->state = new_state; return cell->changed; } static void set_cursor (p_state *state, Bool on) { if (set_cursor_1 (state, on)) { if (state->cursor_timer) XtRemoveTimeOut (state->cursor_timer); state->cursor_timer = 0; cursor_on_timer (state, 0); } } static void cursor_off_timer (XtPointer closure, XtIntervalId *id) { p_state *state = (p_state *) closure; XtAppContext app = XtDisplayToApplicationContext (state->dpy); set_cursor_1 (state, False); state->cursor_timer = XtAppAddTimeOut (app, state->cursor_blink, cursor_on_timer, closure); } static void cursor_on_timer (XtPointer closure, XtIntervalId *id) { p_state *state = (p_state *) closure; XtAppContext app = XtDisplayToApplicationContext (state->dpy); set_cursor_1 (state, True); state->cursor_timer = XtAppAddTimeOut (app, 2 * state->cursor_blink, cursor_off_timer, closure); } static void clear (p_state *state) { int x, y; state->cursor_x = 0; state->cursor_y = 0; for (y = 0; y < state->grid_height; y++) for (x = 0; x < state->grid_width; x++) { p_cell *cell = &state->cells[state->grid_width * y + x]; if (cell->state == FLARE || cell->state == NORMAL) { cell->state = FADE; cell->changed = True; } } set_cursor (state, True); } static void decay (p_state *state) { int x, y; for (y = 0; y < state->grid_height; y++) for (x = 0; x < state->grid_width; x++) { p_cell *cell = &state->cells[state->grid_width * y + x]; if (cell->state == FLARE) { cell->state = NORMAL; cell->changed = True; } else if (cell->state >= FADE) { cell->state++; if (cell->state >= state->ticks) cell->state = BLANK; cell->changed = True; } } } static void scroll (p_state *state) { int x, y; for (x = 0; x < state->grid_width; x++) { p_cell *from = 0, *to = 0; for (y = 1; y < state->grid_height; y++) { from = &state->cells[state->grid_width * y + x]; to = &state->cells[state->grid_width * (y-1) + x]; if ((from->state == FLARE || from->state == NORMAL) && !from->p_char->blank_p) { *to = *from; to->state = NORMAL; /* should be FLARE? Looks bad... */ } else { if (to->state == FLARE || to->state == NORMAL) to->state = FADE; } to->changed = True; } to = from; if (to && (to->state == FLARE || to->state == NORMAL)) { to->state = FADE; to->changed = True; } } set_cursor (state, True); } static int process_unicrud (p_state *state, int c) { if ((c & 0xE0) == 0xC0) { /* 110xxxxx: 11 bits, 2 bytes */ state->unicruds = 1; state->unicrud[0] = c; state->escstate = 102; } else if ((c & 0xF0) == 0xE0) { /* 1110xxxx: 16 bits, 3 bytes */ state->unicruds = 1; state->unicrud[0] = c; state->escstate = 103; } else if ((c & 0xF8) == 0xF0) { /* 11110xxx: 21 bits, 4 bytes */ state->unicruds = 1; state->unicrud[0] = c; state->escstate = 104; } else if ((c & 0xFC) == 0xF8) { /* 111110xx: 26 bits, 5 bytes */ state->unicruds = 1; state->unicrud[0] = c; state->escstate = 105; } else if ((c & 0xFE) == 0xFC) { /* 1111110x: 31 bits, 6 bytes */ state->unicruds = 1; state->unicrud[0] = c; state->escstate = 106; } else if (state->unicruds == 0) { return c; } else { int total = state->escstate - 100; /* see what I did there */ if (state->unicruds < total) { /* Buffer more bytes of the UTF-8 sequence */ state->unicrud[state->unicruds++] = c; } if (state->unicruds >= total) { /* Done! Convert it to Latin1 and print that. */ char *s; state->unicrud[state->unicruds] = 0; s = utf8_to_latin1 ((const char *) state->unicrud, False); state->unicruds = 0; state->escstate = 0; if (s) { c = (unsigned char) s[0]; free (s); return c; } } } return 0; } static void print_char (p_state *state, int c) { int cols = state->grid_width; int rows = state->grid_height; p_cell *cell = &state->cells[state->grid_width * state->cursor_y + state->cursor_x]; /* Start the cursor fading (in case we don't end up overwriting it.) */ if (cell->state == FLARE || cell->state == NORMAL) { cell->state = FADE; cell->changed = True; } #ifdef HAVE_FORKPTY if (state->pty_p) /* Only interpret VT100 sequences if running in pty-mode. It would be nice if we could just interpret them all the time, but that would require subprocesses to send CRLF line endings instead of bare LF, so that's no good. */ { int i; int start, end; /* Mostly duplicated in apple2-main.c */ switch (state->escstate) { case 0: switch (c) { case 7: /* BEL */ /* Dummy case - we don't want the screensaver to beep */ /* #### But maybe this should flash the screen? */ break; case 8: /* BS */ if (state->cursor_x > 0) state->cursor_x--; break; case 9: /* HT */ if (state->cursor_x < cols - 8) { state->cursor_x = (state->cursor_x & ~7) + 8; } else { state->cursor_x = 0; if (state->cursor_y < rows - 1) state->cursor_y++; else scroll (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->last_c == 13) { cell->state = NORMAL; cell->p_char = state->chars[state->bk]; cell->changed = True; } if (state->cursor_y < rows - 1) state->cursor_y++; else scroll (state); break; case 13: /* CR */ state->cursor_x = 0; cell = &state->cells[cols * state->cursor_y]; if((cell->p_char == NULL) || (cell->p_char->name == CURSOR_INDEX)) state->bk = ' '; else state->bk = cell->p_char->name; break; case 14: /* SO */ case 15: /* SI */ /* Dummy case - there is one and only one font. */ break; case 24: /* CAN */ case 26: /* SUB */ /* Dummy case - these interrupt escape sequences, so they don't do anything in this state */ break; case 27: /* ESC */ state->escstate = 1; break; case 127: /* DEL */ /* Dummy case - this is supposed to be ignored */ break; case 155: /* CSI */ state->escstate = 2; for(i = 0; i < NPAR; i++) state->csiparam[i] = 0; state->curparam = 0; break; default: PRINT: /* Come from states 102-106 */ c = process_unicrud (state, c); if (! c) break; /* If the cursor is in column 39 and we print a character, then that character shows up in column 39, and the cursor is no longer visible on the screen (it's in "column 40".) If another character is printed, then that character shows up in column 0, and the cursor moves to column 1. This is empirically what xterm and gnome-terminal do, so that must be the right thing. (In xterm, the cursor vanishes, whereas; in gnome-terminal, the cursor overprints the character in col 39.) */ cell->state = FLARE; cell->p_char = state->chars[c]; cell->changed = True; state->cursor_x++; if (c != ' ' && cell->p_char->blank_p) cell->p_char = state->chars[CURSOR_INDEX]; if (state->cursor_x >= cols - 1 /*####*/) { state->cursor_x = 0; if (state->cursor_y >= rows - 1) scroll (state); else state->cursor_y++; } break; } break; case 1: switch (c) { case 24: /* CAN */ case 26: /* SUB */ state->escstate = 0; break; case 'c': /* Reset */ clear (state); state->escstate = 0; break; case 'D': /* Linefeed */ if (state->cursor_y < rows - 1) state->cursor_y++; else scroll (state); state->escstate = 0; break; case 'E': /* Newline */ state->cursor_x = 0; state->escstate = 0; break; case 'M': /* Reverse newline */ if (state->cursor_y > 0) state->cursor_y--; state->escstate = 0; break; case '7': /* Save state */ state->saved_x = state->cursor_x; state->saved_y = state->cursor_y; state->escstate = 0; break; case '8': /* Restore state */ state->cursor_x = state->saved_x; state->cursor_y = state->saved_y; state->escstate = 0; break; case '[': /* CSI */ state->escstate = 2; for(i = 0; i < NPAR; i++) state->csiparam[i] = 0; state->curparam = 0; break; case '%': /* Select charset */ /* @: Select default (ISO 646 / ISO 8859-1) G: Select UTF-8 8: Select UTF-8 (obsolete) We can just ignore this and always process UTF-8, I think? We must still catch the last byte, though. */ case '(': case ')': /* I don't support different fonts either - see above for SO and SI */ state->escstate = 3; break; default: /* Escape sequences not supported: * * H - Set tab stop * Z - Terminal identification * > - Keypad change * = - Other keypad change * ] - OS command */ state->escstate = 0; break; } break; case 2: switch (c) { case 24: /* CAN */ case 26: /* SUB */ state->escstate = 0; break; case '0': case '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9': if (state->curparam < NPAR) state->csiparam[state->curparam] = (state->csiparam[state->curparam] * 10) + (c - '0'); break; case ';': state->csiparam[++state->curparam] = 0; break; case '[': state->escstate = 3; break; case '@': for (i = 0; i < state->csiparam[0]; i++) { if(++state->cursor_x > cols) { state->cursor_x = 0; if (state->cursor_y < rows - 1) state->cursor_y++; else scroll (state); } cell = &state->cells[cols * state->cursor_y + state->cursor_x]; if (cell->state == FLARE || cell->state == NORMAL) { cell->state = FADE; cell->changed = True; } } state->escstate = 0; break; case 'F': state->cursor_x = 0; case 'A': if (state->csiparam[0] == 0) state->csiparam[0] = 1; if ((state->cursor_y -= state->csiparam[0]) < 0) state->cursor_y = 0; state->escstate = 0; break; case 'E': state->cursor_x = 0; case 'e': case 'B': if (state->csiparam[0] == 0) state->csiparam[0] = 1; if ((state->cursor_y += state->csiparam[0]) >= rows - 1 /*####*/) state->cursor_y = rows - 1; state->escstate = 0; break; case 'a': case 'C': if (state->csiparam[0] == 0) state->csiparam[0] = 1; if ((state->cursor_x += state->csiparam[0]) >= cols - 1 /*####*/) state->cursor_x = cols - 1; state->escstate = 0; break; case 'D': if (state->csiparam[0] == 0) state->csiparam[0] = 1; if ((state->cursor_x -= state->csiparam[0]) < 0) state->cursor_x = 0; state->escstate = 0; break; case 'd': if ((state->cursor_y = (state->csiparam[0] - 1)) >= rows - 1 /*####*/) state->cursor_y = rows - 1; state->escstate = 0; break; case '`': case 'G': if ((state->cursor_x = (state->csiparam[0] - 1)) >= cols - 1 /*####*/) state->cursor_x = cols - 1; state->escstate = 0; break; case 'f': case 'H': if ((state->cursor_y = (state->csiparam[0] - 1)) >= rows - 1 /*####*/) state->cursor_y = rows - 1; if ((state->cursor_x = (state->csiparam[1] - 1)) >= cols - 1 /*####*/) state->cursor_x = cols - 1; if(state->cursor_y < 0) state->cursor_y = 0; if(state->cursor_x < 0) state->cursor_x = 0; state->escstate = 0; break; case 'J': start = 0; end = rows * cols; if (state->csiparam[0] == 0) start = cols * state->cursor_y + state->cursor_x; if (state->csiparam[0] == 1) end = cols * state->cursor_y + state->cursor_x; for (i = start; i < end; i++) { cell = &state->cells[i]; if (cell->state == FLARE || cell->state == NORMAL) { cell->state = FADE; cell->changed = True; } } set_cursor (state, True); state->escstate = 0; break; case 'K': start = 0; end = cols; if (state->csiparam[0] == 0) start = state->cursor_x; if (state->csiparam[1] == 1) end = state->cursor_x; for (i = start; i < end; i++) { if (cell->state == FLARE || cell->state == NORMAL) { cell->state = FADE; cell->changed = True; } cell++; } state->escstate = 0; break; case 'm': /* Set attributes unimplemented (bold, blink, rev) */ state->escstate = 0; break; case 's': /* Save position */ state->saved_x = state->cursor_x; state->saved_y = state->cursor_y; state->escstate = 0; break; case 'u': /* Restore position */ state->cursor_x = state->saved_x; state->cursor_y = state->saved_y; state->escstate = 0; break; case '?': /* DEC Private modes */ if ((state->curparam != 0) || (state->csiparam[0] != 0)) state->escstate = 0; break; default: /* Known unsupported CSIs: * * L - Insert blank lines * M - Delete lines (I don't know what this means...) * P - Delete characters * X - Erase characters (difference with P being...?) * c - Terminal identification * g - Clear tab stop(s) * h - Set mode (Mainly due to its complexity and lack of good docs) * l - Clear mode * m - Set mode (Phosphor is, per defenition, green on black) * n - Status report * q - Set keyboard LEDs * r - Set scrolling region (too exhausting - noone uses this, right?) */ state->escstate = 0; break; } break; case 3: state->escstate = 0; break; case 102: /* states 102-106 are for UTF-8 decoding */ case 103: case 104: case 105: case 106: goto PRINT; default: abort(); } set_cursor (state, True); } else #endif /* HAVE_FORKPTY */ { if (c == '\t') c = ' '; /* blah. */ if (c == '\r' || c == '\n') /* handle CR, LF, or CRLF as "new line". */ { if (c == '\n' && state->last_c == '\r') ; /* CRLF -- do nothing */ else { state->cursor_x = 0; if (state->cursor_y == rows - 1) scroll (state); else state->cursor_y++; } } else if (c == '\014') { clear (state); } else { c = process_unicrud (state, c); if (!c) return; cell->state = FLARE; cell->p_char = state->chars[c]; cell->changed = True; state->cursor_x++; if (c != ' ' && cell->p_char->blank_p) cell->p_char = state->chars[CURSOR_INDEX]; if (state->cursor_x >= cols - 1) { state->cursor_x = 0; if (state->cursor_y >= rows - 1) scroll (state); else state->cursor_y++; } } set_cursor (state, True); } state->last_c = c; } static void update_display (p_state *state, Bool changed_only) { int x, y; for (y = 0; y < state->grid_height; y++) for (x = 0; x < state->grid_width; x++) { p_cell *cell = &state->cells[state->grid_width * y + x]; int width, height, tx, ty; if (changed_only && !cell->changed) continue; width = state->char_width * state->scale; height = state->char_height * state->scale; tx = x * width; ty = y * height; if (cell->state == BLANK || cell->p_char->blank_p) { XFillRectangle (state->dpy, state->window, state->gcs[BLANK], tx, ty, width, height); } else { #ifdef FUZZY_BORDER GC gc1 = state->gcs[cell->state]; GC gc2 = ((cell->state + 2) < state->ticks ? state->gcs[cell->state + 2] : 0); GC gc3 = (gc2 ? gc2 : gc1); if (gc3) XCopyPlane (state->dpy, cell->p_char->pixmap, state->window, gc3, 0, 0, width, height, tx, ty, 1L); if (gc2) { XSetClipMask (state->dpy, gc1, cell->p_char->pixmap2); XSetClipOrigin (state->dpy, gc1, tx, ty); XFillRectangle (state->dpy, state->window, gc1, tx, ty, width, height); XSetClipMask (state->dpy, gc1, None); } #else /* !FUZZY_BORDER */ XCopyPlane (state->dpy, cell->p_char->pixmap, state->window, state->gcs[cell->state], 0, 0, width, height, tx, ty, 1L); #endif /* !FUZZY_BORDER */ } cell->changed = False; } } static unsigned long phosphor_draw (Display *dpy, Window window, void *closure) { p_state *state = (p_state *) closure; int c; update_display (state, True); decay (state); c = textclient_getc (state->tc); if (c > 0) print_char (state, c); return state->delay; } static void phosphor_reshape (Display *dpy, Window window, void *closure, unsigned int w, unsigned int h) { p_state *state = (p_state *) closure; Bool changed_p = resize_grid (state); if (! changed_p) return; textclient_reshape (state->tc, w, h, state->grid_width - 1, state->grid_height - 1, 0); } static Bool phosphor_event (Display *dpy, Window window, void *closure, XEvent *event) { p_state *state = (p_state *) closure; if (event->xany.type == Expose) update_display (state, False); else if (event->xany.type == KeyPress) return textclient_putc (state->tc, &event->xkey); return False; } static void phosphor_free (Display *dpy, Window window, void *closure) { p_state *state = (p_state *) closure; textclient_close (state->tc); if (state->cursor_timer) XtRemoveTimeOut (state->cursor_timer); /* #### there's more to free here */ free (state); } static const char *phosphor_defaults [] = { ".background: Black", ".foreground: #00FF00", "*fpsSolid: true", #if defined(BUILTIN_FONT) "*font: (builtin)", #elif defined(HAVE_COCOA) "*font: Monaco 15", #else "*font: fixed", #endif "*scale: 6", "*ticks: 20", "*delay: 50000", "*cursor: 333", "*program: xscreensaver-text", "*relaunch: 5", "*metaSendsESC: True", "*swapBSDEL: True", #ifdef HAVE_FORKPTY "*usePty: True", #else /* !HAVE_FORKPTY */ "*usePty: False", #endif /* !HAVE_FORKPTY */ 0 }; static XrmOptionDescRec phosphor_options [] = { { "-font", ".font", XrmoptionSepArg, 0 }, { "-scale", ".scale", XrmoptionSepArg, 0 }, { "-ticks", ".ticks", XrmoptionSepArg, 0 }, { "-delay", ".delay", XrmoptionSepArg, 0 }, { "-program", ".program", XrmoptionSepArg, 0 }, { "-pipe", ".usePty", XrmoptionNoArg, "False" }, { "-pty", ".usePty", XrmoptionNoArg, "True" }, { "-meta", ".metaSendsESC", XrmoptionNoArg, "False" }, { "-esc", ".metaSendsESC", XrmoptionNoArg, "True" }, { "-bs", ".swapBSDEL", XrmoptionNoArg, "False" }, { "-del", ".swapBSDEL", XrmoptionNoArg, "True" }, { 0, 0, 0, 0 } }; XSCREENSAVER_MODULE ("Phosphor", phosphor) xscreensaver-5.36/hacks/xmatrix.c000644 000767 000024 00000154140 12717747751 017116 0ustar00jwzstaff000000 000000 /* xscreensaver, Copyright (c) 1999-2015 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. * * Matrix -- simulate the text scrolls from the movie "The Matrix". * * The movie people distribute their own Windows/Mac screensaver that does * a similar thing, so I wrote one for Unix. However, that version (the * Windows/Mac version at http://www.whatisthematrix.com/) doesn't match * what the computer screens in the movie looked like, so my `xmatrix' does * things differently. * * See also my `glmatrix' program, which does a 3D rendering of the similar * effect that appeared in the title sequence of the movies. * * * ========================================================== * * NOTE: * * People just love to hack on this one. I get sent * patches to this all the time saying, ``here, I made * it better!'' Mostly this hasn't been true. * * If you've made changes to xmatrix, when you send me * your patch, please explain, in English, both *what* * your changes are, and *why* you think those changes * make this screensaver behave more like the displays * in the movie did. I'd rather not have to read your * diffs to try and figure that out for myself... * * In particular, note that the characters in the movie * were, in fact, low resolution and somewhat blurry/ * washed out. They also definitely scrolled a * character at a time, not a pixel at a time. * * And keep in mind that this program emulates the * behavior of the computer screens that were visible * in the movies -- not the behavior of the effects in * the title sequences. "GLMatrix" does that. * * ========================================================== * */ #ifdef HAVE_UNISTD_H # include #endif #include "screenhack.h" #include "textclient.h" #include "xpm-pixmap.h" #include #include #ifdef HAVE_JWXYZ # define HAVE_XPM #else # define DO_XBM /* only do mono bitmaps under real X11 */ #endif #ifndef HAVE_JWXYZ # include #endif #if defined(HAVE_GDK_PIXBUF) || defined(HAVE_XPM) # include "images/matrix1.xpm" # include "images/matrix2.xpm" # include "images/matrix1b.xpm" # include "images/matrix2b.xpm" #endif #ifdef DO_XBM # include "images/matrix1.xbm" # include "images/matrix2.xbm" # include "images/matrix1b.xbm" # include "images/matrix2b.xbm" #endif /* DO_XBM */ #define CHAR_COLS 16 #define CHAR_ROWS 13 #define CHAR_MAPS 3 #define PLAIN_MAP 1 #define GLOW_MAP 2 typedef struct { int glow : 8; unsigned int glyph : 9; /* note: 9 bit characters! */ unsigned int changed : 1; unsigned int spinner : 1; } m_cell; typedef struct { int pipe_loc; int remaining; int throttle; int y; } m_feeder; #define countof(x) (sizeof(x)/sizeof(*(x))) static const int matrix_encoding[] = { 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207 }; static const int decimal_encoding[] = { 16, 17, 18, 19, 20, 21, 22, 23, 24, 25}; static const int hex_encoding[] = { 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 33, 34, 35, 36, 37, 38 }; static const int binary_encoding[] = { 16, 17 }; static const int dna_encoding[] = { 33, 35, 39, 52 }; static const int ascii_encoding[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99,100,101,102,103,104,105,106,107,108,109,110,111, 112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127 }; static const unsigned char char_map[256] = { 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, /* 0 */ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, /* 16 */ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, /* 32 */ 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, /* 48 */ 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, /* 64 */ 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, /* 80 */ 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, /* 96 */ 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, /* 112 */ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, /* 128 */ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, /* 144 */ 96, 97, 98, 99,100,101,102,103,104,105,106,107,108,109,110,111, /* 160 */ 112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127, /* 176 */ 128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143, /* 192 */ 144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159, /* 208 */ 160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175, /* 224 */ 176,177,178,195,180,181,182,183,184,185,186,187,188,189,190,191 /* 240 */ }; #define CURSOR_GLYPH 97 /* larger numbers should mean more variability between columns */ #define BUF_SIZE 200 typedef enum { DRAIN_TRACE_A, TRACE_TEXT_A, /* Call trans opt: received. */ TRACE_A, /* (31_) 5__-0_9_ */ TRACE_DONE, DRAIN_TRACE_B, TRACE_TEXT_B, /* Call trans opt: received. */ TRACE_B, TRACE_FAIL, /* System Failure */ DRAIN_KNOCK, KNOCK, /* Wake up, Neo... */ DRAIN_NMAP, NMAP, /* Starting nmap V. 2.54BETA25 */ DRAIN_MATRIX, MATRIX, DNA, BINARY, DEC, HEX, ASCII } m_mode; typedef struct { Display *dpy; Window window; XWindowAttributes xgwa; GC draw_gc, erase_gc, scratch_gc; int grid_width, grid_height; int char_width, char_height; m_cell *cells; m_cell *background; m_feeder *feeders; int nspinners; Bool knock_knock_p; Bool small_p; Bool insert_top_p, insert_bottom_p; Bool use_pipe_p; m_mode mode; m_mode def_mode; /* Mode to return to after trace etc. */ text_data *tc; char buf [BUF_SIZE*2+1]; /* ring buffer */ Bool do_fill_buff; int buf_done; int buf_pos; Bool start_reveal_back_p; /* start reveal process for pipe */ Bool back_text_full_p; /* is the pipe buffer (background) full ? */ char back_line [BUF_SIZE*2+1]; /* line buffer for background */ int back_pos; /* background line buffer position */ int back_y; signed char *tracing; int density; const char *typing; Bool typing_scroll_p; Bool typing_cursor_p; Bool typing_bold_p; Bool typing_stutter_p; int typing_left_margin; int typing_char_delay; int typing_line_delay; int typing_delay; Bool cursor_on; int cursor_x, cursor_y; XtIntervalId cursor_timer; Pixmap images[CHAR_MAPS]; int image_width, image_height; Bool images_flipped_p; int nglyphs; const int *glyph_map; unsigned long colors[5]; int delay; } m_state; static void load_images_1 (Display *dpy, m_state *state, int which) { #if defined(HAVE_GDK_PIXBUF) || defined(HAVE_XPM) if (!get_boolean_resource (dpy, "mono", "Boolean") && state->xgwa.depth > 1) { char **bits = (which == 1 ? (state->small_p ? matrix1b_xpm : matrix1_xpm) : (state->small_p ? matrix2b_xpm : matrix2_xpm)); state->images[which] = xpm_data_to_pixmap (state->dpy, state->window, bits, &state->image_width, &state->image_height, 0); } else #endif /* !HAVE_XPM && !HAVE_GDK_PIXBUF */ { #ifdef DO_XBM unsigned long fg, bg; state->image_width = (state->small_p ? matrix1b_width :matrix1_width); state->image_height = (state->small_p ? matrix1b_height:matrix1_height); fg = get_pixel_resource(state->dpy, state->xgwa.colormap, "foreground", "Foreground"); bg = get_pixel_resource(state->dpy, state->xgwa.colormap, "background", "Background"); state->images[which] = XCreatePixmapFromBitmapData (state->dpy, state->window, (char *) (which == 1 ? (state->small_p ? matrix1b_bits :matrix1_bits) : (state->small_p ? matrix2b_bits :matrix2_bits)), state->image_width, state->image_height, bg, fg, state->xgwa.depth); #else /* !DO_XBM */ abort(); #endif /* !DO_XBM */ } } static void load_images (Display *dpy, m_state *state) { load_images_1 (dpy, state, 1); load_images_1 (dpy, state, 2); } static void flip_images_1 (m_state *state, int which) { XImage *im = XGetImage (state->dpy, state->images[which], 0, 0, state->image_width, state->image_height, ~0L, (state->xgwa.depth > 1 ? ZPixmap : XYPixmap)); int x, y, xx; int ww = state->char_width; unsigned long *row = (unsigned long *) malloc (sizeof(*row) * ww); for (y = 0; y < state->image_height; y++) { for (x = 0; x < CHAR_COLS; x++) { for (xx = 0; xx < ww; xx++) row[xx] = XGetPixel (im, (x * ww) + xx, y); for (xx = 0; xx < ww; xx++) XPutPixel (im, (x * ww) + xx, y, row[ww - xx - 1]); } } XPutImage (state->dpy, state->images[which], state->draw_gc, im, 0, 0, 0, 0, state->image_width, state->image_height); XDestroyImage (im); free (row); } static void flip_images (m_state *state, Bool flipped_p) { if (flipped_p != state->images_flipped_p) { state->images_flipped_p = flipped_p; flip_images_1 (state, 1); flip_images_1 (state, 2); } } /* When the subprocess has generated some output, this reads as much as it can into s->buf at s->buf_tail. */ static void fill_input (m_state *s) { int n = 0; int loadBytes; if(s->buf_done > s->buf_pos){ loadBytes = (s->buf_done - s->buf_pos) - 1; } else{ loadBytes = ((BUF_SIZE - s->buf_pos) + s->buf_done) - 1; } if (!s->tc) return; if (loadBytes > 0) { int c = textclient_getc (s->tc); n = (c > 0 ? 1 : -1); s->buf [s->buf_pos] = (char) c; } if (n > 0) { s->do_fill_buff = False; s->buf_pos = (s->buf_pos + n); if(s->buf_pos > BUF_SIZE){ /* copy to start of buffer */ /* areas shouldn't overlap, but just in case, use memmove */ memmove(s->buf,s->buf+BUF_SIZE,s->buf_pos-BUF_SIZE); } s->buf_pos = s->buf_pos % BUF_SIZE; } else { /* Couldn't read anything from the buffer */ /* Assume EOF has been reached, so start again */ s->do_fill_buff = True; } } static void cursor_on_timer (XtPointer closure, XtIntervalId *id); static void cursor_off_timer (XtPointer closure, XtIntervalId *id); static Bool set_cursor_1 (m_state *state, Bool on) { Bool changed = (state->cursor_on != on); state->cursor_on = on; if (changed && state->cursor_x >= 0 && state->cursor_y >= 0) { m_cell *cell = &state->cells[state->grid_width * state->cursor_y + state->cursor_x]; cell->glow = 0; cell->changed = True; } return changed; } static void set_cursor (m_state *state, Bool on) { if (set_cursor_1 (state, on)) { if (state->cursor_timer) XtRemoveTimeOut (state->cursor_timer); state->cursor_timer = 0; if (on) cursor_on_timer (state, 0); } } static void cursor_off_timer (XtPointer closure, XtIntervalId *id) { m_state *state = (m_state *) closure; XtAppContext app = XtDisplayToApplicationContext (state->dpy); set_cursor_1 (state, False); state->cursor_timer = XtAppAddTimeOut (app, 333, cursor_on_timer, closure); } static void cursor_on_timer (XtPointer closure, XtIntervalId *id) { m_state *state = (m_state *) closure; XtAppContext app = XtDisplayToApplicationContext (state->dpy); set_cursor_1 (state, True); state->cursor_timer = XtAppAddTimeOut (app, 666, cursor_off_timer, closure); } static void init_spinners (m_state *state) { int i = state->nspinners; int x, y; m_cell *cell; for (y = 0; y < state->grid_height; y++) for (x = 0; x < state->grid_width; x++) { cell = &state->cells[state->grid_width * y + x]; cell->spinner = 0; } while (--i > 0) { x = random() % state->grid_width; y = random() % state->grid_height; cell = &state->cells[state->grid_width * y + x]; cell->spinner = 1; } } static void clear_spinners (m_state *state) { int i; for (i = 0; i < state->grid_width * state->grid_height; i++) if (state->cells[i].spinner) { state->cells[i].spinner = 0; state->cells[i].changed = 1; } } static void set_mode (m_state *, m_mode); static void init_trace (m_state *state) { char *s = get_string_resource (state->dpy, "tracePhone", "TracePhone"); const char *s2; signed char *s3; if (!s) goto FAIL; state->tracing = (signed char *) malloc (strlen (s) + 1); s3 = state->tracing; for (s2 = s; *s2; s2++) if (*s2 >= '0' && *s2 <= '9') *s3++ = -*s2; *s3 = 0; if (s3 == state->tracing) goto FAIL; state->glyph_map = decimal_encoding; state->nglyphs = countof(decimal_encoding); return; FAIL: fprintf (stderr, "%s: bad phone number: \"%s\".\n", progname, s ? s : "(null)"); if (s) free (s); if (state->tracing) free (state->tracing); state->tracing = 0; set_mode (state, MATRIX); } static void init_drain (m_state *state) { int i; set_cursor (state, False); state->cursor_x = -1; state->cursor_y = -1; /* Fill the top row with empty top-feeders, to clear the screen. */ for (i = 0; i < state->grid_width; i++) { m_feeder *f = &state->feeders[i]; f->y = -1; f->remaining = 0; f->throttle = 0; } /* Turn off all the spinners, else they never go away. */ clear_spinners (state); } static Bool screen_blank_p (m_state *state) { int i; for (i = 0; i < state->grid_width * state->grid_height; i++) if (state->cells[i].glyph) return False; return True; } static void set_mode (m_state *state, m_mode mode) { if (mode == state->mode) return; state->mode = mode; state->typing = 0; switch (mode) { case MATRIX: state->glyph_map = matrix_encoding; state->nglyphs = countof(matrix_encoding); flip_images (state, True); init_spinners (state); break; case DNA: state->glyph_map = dna_encoding; state->nglyphs = countof(dna_encoding); flip_images (state, False); break; case BINARY: state->glyph_map = binary_encoding; state->nglyphs = countof(binary_encoding); flip_images (state, False); break; case HEX: state->glyph_map = hex_encoding; state->nglyphs = countof(hex_encoding); flip_images (state, False); break; case ASCII: state->glyph_map = ascii_encoding; state->nglyphs = countof(ascii_encoding); flip_images (state, False); break; case DEC: case TRACE_A: case TRACE_B: case NMAP: case KNOCK: state->glyph_map = decimal_encoding; state->nglyphs = countof(decimal_encoding); flip_images (state, False); break; case TRACE_TEXT_A: case TRACE_TEXT_B: flip_images (state, False); init_trace (state); break; case DRAIN_TRACE_A: case DRAIN_TRACE_B: case DRAIN_KNOCK: case DRAIN_NMAP: case DRAIN_MATRIX: init_drain (state); break; case TRACE_DONE: case TRACE_FAIL: break; default: abort(); } } static void * xmatrix_init (Display *dpy, Window window) { XGCValues gcv; char *insert, *mode; int i; m_state *state = (m_state *) calloc (sizeof(*state), 1); state->dpy = dpy; state->window = window; state->delay = get_integer_resource (dpy, "delay", "Integer"); XGetWindowAttributes (dpy, window, &state->xgwa); state->small_p = (state->xgwa.width < 300); { const char *s = get_string_resource (dpy, "matrixFont", "String"); if (!s || !*s || !strcasecmp(s, "large")) state->small_p = False; else if (!strcasecmp(s, "small")) state->small_p = True; else fprintf (stderr, "%s: matrixFont should be 'small' or 'large' not '%s'\n", progname, s); } load_images (dpy, state); gcv.foreground = get_pixel_resource(state->dpy, state->xgwa.colormap, "foreground", "Foreground"); gcv.background = get_pixel_resource(state->dpy, state->xgwa.colormap, "background", "Background"); state->draw_gc = XCreateGC (state->dpy, state->window, GCForeground|GCBackground, &gcv); gcv.foreground = gcv.background; state->erase_gc = XCreateGC (state->dpy, state->window, GCForeground|GCBackground, &gcv); state->scratch_gc = XCreateGC (state->dpy, state->window, 0, &gcv); /* Allocate colors for SYSTEM FAILURE box */ { XColor boxcolors[] = { { 0, 0x0808, 0x1E1E, 0x0808, DoRed|DoGreen|DoBlue, 0 }, { 0, 0x5A5A, 0xD2D2, 0x5A5A, DoRed|DoGreen|DoBlue, 0 }, { 0, 0xE0E0, 0xF7F7, 0xE0E0, DoRed|DoGreen|DoBlue, 0 }, { 0, 0x5A5A, 0xD2D2, 0x5A5A, DoRed|DoGreen|DoBlue, 0 }, { 0, 0x0808, 0x1E1E, 0x0808, DoRed|DoGreen|DoBlue, 0 }, }; for (i = 0; i < countof(boxcolors); i++) { if (XAllocColor (state->dpy, state->xgwa.colormap, &boxcolors[i])) state->colors[i] = boxcolors[i].pixel; else state->colors[i] = gcv.foreground; /* default black */ } } state->char_width = state->image_width / CHAR_COLS; state->char_height = state->image_height / CHAR_ROWS; state->grid_width = state->xgwa.width / state->char_width; state->grid_height = state->xgwa.height / state->char_height; state->grid_width++; state->grid_height++; if (state->grid_width < 5) state->grid_width = 5; if (state->grid_height < 5) state->grid_height = 5; state->glyph_map = matrix_encoding; state->nglyphs = countof(matrix_encoding); state->cells = (m_cell *) calloc (sizeof(m_cell), state->grid_width * state->grid_height); state->background = (m_cell *) calloc (sizeof(m_cell), state->grid_width * state->grid_height); state->feeders = (m_feeder *) calloc (sizeof(m_feeder), state->grid_width); state->density = get_integer_resource (dpy, "density", "Integer"); insert = get_string_resource(dpy, "insert", "Insert"); if (insert && !strcmp(insert, "top")) { state->insert_top_p = True; state->insert_bottom_p = False; } else if (insert && !strcmp(insert, "bottom")) { state->insert_top_p = False; state->insert_bottom_p = True; } else if (insert && !strcmp(insert, "both")) { state->insert_top_p = True; state->insert_bottom_p = True; } else { if (insert && *insert) fprintf (stderr, "%s: `insert' must be `top', `bottom', or `both', not `%s'\n", progname, insert); state->insert_top_p = False; state->insert_bottom_p = True; } state->nspinners = get_integer_resource (dpy, "spinners", "Integer"); if (insert) free (insert); state->knock_knock_p = get_boolean_resource (dpy, "knockKnock", "KnockKnock"); state->use_pipe_p = get_boolean_resource (dpy, "usePipe", "Boolean"); state->buf_pos = 1; state->buf[0] = ' '; /* spacer byte in buffer (space) */ state->buf_done = 0; state->do_fill_buff = True; state->start_reveal_back_p = False; state->back_text_full_p = False; state->back_y = 0; state->back_pos = 0; state->mode = -1; state->def_mode = MATRIX; mode = get_string_resource (dpy, "mode", "Mode"); if (mode && !strcasecmp(mode, "trace")) set_mode (state, ((random() % 3) ? TRACE_TEXT_A : TRACE_TEXT_B)); else if (mode && !strcasecmp(mode, "crack")) set_mode (state, DRAIN_NMAP); else if (mode && !strcasecmp(mode, "dna")){ set_mode (state, DNA); state->def_mode = DNA; } else if (mode && (!strcasecmp(mode, "bin") || !strcasecmp(mode, "binary"))){ set_mode (state, BINARY); state->def_mode = BINARY; } else if (mode && (!strcasecmp(mode, "hex") || !strcasecmp(mode, "hexadecimal"))){ set_mode (state, HEX); state->def_mode = HEX; } else if (mode && (!strcasecmp(mode, "dec") || !strcasecmp(mode, "decimal"))){ set_mode (state, DEC); state->def_mode = DEC; } else if (mode && (!strcasecmp(mode, "asc") || !strcasecmp(mode, "ascii"))){ set_mode (state, ASCII); state->def_mode = ASCII; } else if (mode && !strcasecmp(mode, "pipe")) { set_mode (state, ASCII); state->def_mode = ASCII; state->use_pipe_p = True; state->tc = textclient_open (dpy); } else if (!mode || !*mode || !strcasecmp(mode, "matrix")) set_mode (state, MATRIX); else { fprintf (stderr, "%s: `mode' must be ",progname); fprintf (stderr, "matrix, trace, dna, binary, ascii, hex, or pipe: "); fprintf (stderr, "not `%s'\n", mode); set_mode (state, MATRIX); } if (state->mode == MATRIX && get_boolean_resource (dpy, "trace", "Boolean")) set_mode (state, ((random() % 3) ? TRACE_TEXT_A : TRACE_TEXT_B)); state->cursor_x = -1; state->cursor_y = -1; return state; } static void insert_glyph (m_state *state, int glyph, int x, int y) { Bool bottom_feeder_p = (y >= 0); m_cell *from, *to; if (y >= state->grid_height) return; if (bottom_feeder_p) { to = &state->cells[state->grid_width * y + x]; } else { for (y = state->grid_height-1; y > 0; y--) { from = &state->cells[state->grid_width * (y-1) + x]; to = &state->cells[state->grid_width * y + x]; to->glyph = from->glyph; to->glow = from->glow; to->changed = 1; } to = &state->cells[x]; } to->glyph = glyph; to->changed = 1; if (!to->glyph) ; else if (bottom_feeder_p) to->glow = 1 + (random() % (state->tracing ? 4 : 2)); else to->glow = 0; } static void place_back_char (m_state *state, char textc, int x, int y){ if((x>=0) && (y>=0) && (x < state->grid_width) && (y < state->grid_height)){ m_cell *celltmp = &state->background[state->grid_width * y + x]; celltmp -> glyph = char_map[(unsigned char)textc] + 1; if(!celltmp->glyph || (celltmp->glyph == 3)){ celltmp -> glyph = char_map[32] + 1; } celltmp -> changed = 1; } } static void place_back_text (m_state *state, char *text, int x, int y){ int i; for(i=0; iback_line[state->back_pos] = textc; if(textc == '\n'){ state->back_line[state->back_pos] = '\0'; new_line = True; } else if ((state->back_pos > (state->grid_width - 4)) || (state->back_pos >= BUF_SIZE)){ /* off by 1? */ state->back_line[++state->back_pos] = '\0'; new_line = True; } else{ state->back_pos++; } if(new_line){ int startx = (state->grid_width >> 1) - (strlen(state->back_line) >> 1); place_back_text(state, state->back_line, startx, state->back_y); state->back_pos = 0; state->back_y++; if(state->back_y >= (state->grid_height - 1)){ state->back_y = 1; state->back_text_full_p = True; state->start_reveal_back_p = True; } } } static void feed_matrix (m_state *state) { int x; switch (state->mode) { case TRACE_A: { int L = strlen((char *) state->tracing); int count = 0; int i; for (i = 0; i < strlen((char *) state->tracing); i++) if (state->tracing[i] > 0) count++; if (count >= L) { set_mode (state, TRACE_DONE); state->typing_delay = 1000000; return; } else { i = 5 + (30 / (count+1)); /* how fast numbers are discovered */ if ((random() % i) == 0) { i = random() % L; if (state->tracing[i] < 0) state->tracing[i] = -state->tracing[i]; } } } break; case TRACE_B: if ((random() % 40) == 0) { set_mode (state, TRACE_FAIL); return; } break; case MATRIX: case DNA: case BINARY: case DEC: case HEX: case ASCII: case DRAIN_TRACE_A: case DRAIN_TRACE_B: case DRAIN_KNOCK: case DRAIN_NMAP: case DRAIN_MATRIX: break; default: abort(); } /*get input*/ if((state->use_pipe_p) && (!state->back_text_full_p)){ place_back_pipe(state, state->buf[state->buf_done]); state->buf_done = (state->buf_done + 1) % BUF_SIZE; if(state->buf_done == (state->buf_pos - 1)){ state->do_fill_buff = True; } } if(state->buf_done == (state->buf_pos + 1)){ state->do_fill_buff = False; } else{ state->do_fill_buff = True; fill_input(state); } /* Update according to current feeders. */ for (x = 0; x < state->grid_width; x++) { m_feeder *f = &state->feeders[x]; if (f->throttle) /* this is a delay tick, synced to frame. */ { f->throttle--; } else if (f->remaining > 0) /* how many items are in the pipe */ { int g; long rval; if((state->use_pipe_p) && (!state->back_text_full_p)){ rval = (int) state->buf[f->pipe_loc]; if(++f->pipe_loc > (BUF_SIZE-1)){ f->pipe_loc = 0; /*fill_input(state);*/ } rval = (rval % state->nglyphs); } else{ rval = (random() % state->nglyphs); } g = state->glyph_map[rval] + 1; insert_glyph (state, g, x, f->y); f->remaining--; if (f->y >= 0) /* bottom_feeder_p */ f->y++; } else /* if pipe is empty, insert spaces */ { insert_glyph (state, 0, x, f->y); if (f->y >= 0) /* bottom_feeder_p */ f->y++; } if ((random() % 10) == 0) /* randomly change throttle speed */ { f->throttle = ((random() % 5) + (random() % 5)); } } } static void redraw_cells (m_state *state, Bool active) { int x, y; int count = 0; Bool use_back_p = False; for (y = 0; y < state->grid_height; y++) for (x = 0; x < state->grid_width; x++) { m_cell *cell = &state->cells[state->grid_width * y + x]; m_cell *back = &state->background[state->grid_width * y + x]; Bool cursor_p = (state->cursor_on && x == state->cursor_x && y == state->cursor_y); if (cell->glyph) count++; else { if((state->start_reveal_back_p) && (back->glyph) && !(state->mode == TRACE_A || state->mode == TRACE_B || state->mode == TRACE_DONE)){ use_back_p = True; cell = back; } } /* In trace-mode, the state of each cell is random unless we have a match for this digit. */ if (active && (state->mode == TRACE_A || state->mode == TRACE_B || state->mode == TRACE_DONE)) { int xx = x % strlen((char *) state->tracing); Bool dead_p = state->tracing[xx] > 0; if (y == 0 && x == xx && !use_back_p) cell->glyph = (dead_p ? state->glyph_map[state->tracing[xx]-'0'] + 1 : 0); else if (y == 0 && !use_back_p) cell->glyph = 0; else if (!use_back_p) cell->glyph = (dead_p ? 0 : (state->glyph_map[(random()%state->nglyphs)] + 1)); if (!use_back_p) cell->changed = 1; } if (!cell->changed) continue; if (cell->glyph == 0 && !cursor_p && !use_back_p) XFillRectangle (state->dpy, state->window, state->erase_gc, x * state->char_width, y * state->char_height, state->char_width, state->char_height); else { int g = (cursor_p ? CURSOR_GLYPH : cell->glyph); int cx = (g - 1) % CHAR_COLS; int cy = (g - 1) / CHAR_COLS; int map = ((cell->glow != 0 || cell->spinner) ? GLOW_MAP : PLAIN_MAP); XCopyArea (state->dpy, state->images[map], state->window, state->draw_gc, cx * state->char_width, cy * state->char_height, state->char_width, state->char_height, x * state->char_width, y * state->char_height); } if (!use_back_p) cell->changed = 0; if (cell->glow > 0 && state->mode != NMAP && !use_back_p) { cell->glow--; cell->changed = 1; } else if (cell->glow < 0) abort(); if (cell->spinner && active && !use_back_p) { cell->glyph = (state->glyph_map[(random()%state->nglyphs)] + 1); cell->changed = 1; } } } static int densitizer (m_state *state) { /* Horrid kludge that converts percentages (density of screen coverage) to the parameter that actually controls this. I got this mapping empirically, on a 1024x768 screen. Sue me. */ if (state->density < 10) return 85; else if (state->density < 15) return 60; else if (state->density < 20) return 45; else if (state->density < 25) return 25; else if (state->density < 30) return 20; else if (state->density < 35) return 15; else if (state->density < 45) return 10; else if (state->density < 50) return 8; else if (state->density < 55) return 7; else if (state->density < 65) return 5; else if (state->density < 80) return 3; else if (state->density < 90) return 2; else return 1; } static void hack_text (m_state *state) { if (!state->typing) { set_cursor (state, False); state->cursor_x = 0; state->cursor_y = 0; state->typing_scroll_p = False; state->typing_bold_p = False; state->typing_cursor_p = True; state->typing_stutter_p = False; state->typing_char_delay = 10000; state->typing_line_delay = 1500000; switch (state->mode) { case TRACE_TEXT_A: case TRACE_TEXT_B: clear_spinners (state); if (state->mode == TRACE_TEXT_A) { if (state->grid_width >= 52) state->typing = ("Call trans opt: received. 2-19-98 13:24:18 REC:Log>\n" "Trace program: running\n"); else state->typing = ("Call trans opt: received.\n2-19-98 13:24:18 REC:Log>\n" "Trace program: running\n"); } else { if (state->grid_width >= 52) state->typing = ("Call trans opt: received. 9-18-99 14:32:21 REC:Log>\n" "WARNING: carrier anomaly\n" "Trace program: running\n"); else state->typing = ("Call trans opt: received.\n9-18-99 14:32:21 REC:Log>\n" "WARNING: carrier anomaly\n" "Trace program: running\n"); } break; case TRACE_FAIL: { const char *s = "SYSTEM FAILURE\n"; int i; float cx = (state->grid_width - strlen(s) - 1) / 2 - 0.5; float cy = (state->grid_height / 2) - 1.3; if (cy < 0) cy = 0; if (cx < 0) cx = 0; XFillRectangle (state->dpy, state->window, state->erase_gc, cx * state->char_width, cy * state->char_height, strlen(s) * state->char_width, state->char_height * 1.6); for (i = -2; i < 3; i++) { XGCValues gcv; gcv.foreground = state->colors[i + 2]; XChangeGC (state->dpy, state->scratch_gc, GCForeground, &gcv); XDrawRectangle (state->dpy, state->window, state->scratch_gc, cx * state->char_width - i, cy * state->char_height - i, strlen(s) * state->char_width + (2 * i), (state->char_height * 1.6) + (2 * i)); } /* If we don't clear these, part of the box may get overwritten */ for (i = 0; i < state->grid_height * state->grid_width; i++) { m_cell *cell = &state->cells[i]; cell->changed = 0; } state->cursor_x = (state->grid_width - strlen(s) - 1) / 2; state->cursor_y = (state->grid_height / 2) - 1; if (state->cursor_x < 0) state->cursor_x = 0; if (state->cursor_y < 0) state->cursor_y = 0; state->typing = s; state->typing_char_delay = 0; state->typing_cursor_p = False; } break; case KNOCK: { clear_spinners (state); state->typing = ("\001Wake up, Neo...\n" "\001The Matrix has you...\n" "\001Follow the white rabbit.\n" "\n" "Knock, knock, Neo.\n"); state->cursor_x = 4; state->cursor_y = 2; state->typing_char_delay = 0; state->typing_line_delay = 2000000; } break; case NMAP: { /* Note that what Trinity is using here is moderately accurate: She runs nmap (http://www.insecure.org/nmap/) then breaks in with a (hypothetical) program called "sshnuke" that exploits the (very real) SSHv1 CRC32 compensation attack detector bug (http://staff.washington.edu/dittrich/misc/ssh-analysis.txt). The command syntax of the power grid control software looks a lot like Cisco IOS to me. (IOS is a descendant of VMS.) */ clear_spinners (state); state->typing = # ifdef __GNUC__ __extension__ /* don't warn about "string length is greater than the length ISO C89 compilers are required to support"... */ # endif ("# " "\010\010\010\010" "\001nmap -v -sS -O 10.2.2.2\n" "Starting nmap V. 2.54BETA25\n" "\010\010\010\010\010\010\010\010\010\010" "Insufficient responses for TCP sequencing (3), OS detection" " may be less accurate\n" "Interesting ports on 10.2.2.2:\n" "(The 1539 ports scanned but not shown below are in state:" " closed)\n" "Port state service\n" "22/tcp open ssh\n" "\n" "No exact OS matches for host\n" "\n" "Nmap run completed -- 1 IP address (1 host up) scanned\n" "# " "\010\010\010\010" "\001sshnuke 10.2.2.2 -rootpw=\"Z1ON0101\"\n" "Connecting to 10.2.2.2:ssh ... " "\010\010" "successful.\n" "Attempting to exploit SSHv1 CRC32 ... " "\010\010\010\010" "successful.\n" "Resetting root password to \"Z1ON0101\".\n" "\010\010" "System open: Access Level <9>\n" "# " "\010\010" "\001ssh 10.2.2.2 -l root\n" "\010\010" "root@10.2.2.2's password: " "\010\010\n" "\010\010\n" "RRF-CONTROL> " "\010\010" "\001disable grid nodes 21 - 48\n" "\n" "\002Warning: Disabling nodes 21-48 will disconnect sector 11" " (28 nodes)\n" "\n" "\002 ARE YOU SURE? (y/n) " "\010\010" "\001y\n" "\n" "\n" "\010\002Grid Node 21 offline...\n" "\010\002Grid Node 22 offline...\n" "\010\002Grid Node 23 offline...\n" "\010\002Grid Node 24 offline...\n" "\010\002Grid Node 25 offline...\n" "\010\002Grid Node 26 offline...\n" "\010\002Grid Node 27 offline...\n" "\010\002Grid Node 28 offline...\n" "\010\002Grid Node 29 offline...\n" "\010\002Grid Node 30 offline...\n" "\010\002Grid Node 31 offline...\n" "\010\002Grid Node 32 offline...\n" "\010\002Grid Node 33 offline...\n" "\010\002Grid Node 34 offline...\n" "\010\002Grid Node 35 offline...\n" "\010\002Grid Node 36 offline...\n" "\010\002Grid Node 37 offline...\n" "\010\002Grid Node 38 offline...\n" "\010\002Grid Node 39 offline...\n" "\010\002Grid Node 40 offline...\n" "\010\002Grid Node 41 offline...\n" "\010\002Grid Node 42 offline...\n" "\010\002Grid Node 43 offline...\n" "\010\002Grid Node 44 offline...\n" "\010\002Grid Node 45 offline...\n" "\010\002Grid Node 46 offline...\n" "\010\002Grid Node 47 offline...\n" "\010\002Grid Node 48 offline...\n" "\010\010" "\nRRF-CONTROL> " "\010\010\010\010\010\010\010\010" ); state->cursor_x = 0; state->cursor_y = state->grid_height - 3; state->typing_scroll_p = True; state->typing_char_delay = 0; state->typing_line_delay = 20000; } break; default: abort(); break; } state->typing_left_margin = state->cursor_x; state->typing_delay = state->typing_char_delay; if (state->typing_cursor_p) set_cursor (state, True); } else { Bool scrolled_p = False; unsigned char c, c1; int x = state->cursor_x; int y = state->cursor_y; AGAIN: c = ((unsigned char *) state->typing)[0]; c1 = c ? ((unsigned char *) state->typing)[1] : 0; state->typing_delay = (!c || c1 == '\n' ? state->typing_line_delay : state->typing_char_delay); if (! c) { state->typing_delay = 0; state->typing = 0; return; } if (state->typing_scroll_p && (c == '\n' || x >= state->grid_width - 1)) { set_cursor (state, False); x = 0; y++; if (y >= state->grid_height-1) { int xx, yy; for (yy = 0; yy < state->grid_height-2; yy++) for (xx = 0; xx < state->grid_width; xx++) { int ii = yy * state->grid_width + xx; int jj = (yy+1) * state->grid_width + xx; state->cells[ii] = state->cells[jj]; state->cells[ii].changed = 1; } /* clear bottom row */ for (xx = 0; xx < state->grid_width; xx++) { int ii = yy * state->grid_width + xx; state->cells[ii].glyph = 0; state->cells[ii].changed = 1; } y--; /* move back up to bottom line */ scrolled_p = True; } } if (c == '\n') { if (!state->typing_scroll_p) { int i, j; set_cursor (state, False); x = state->typing_left_margin; /* clear the line */ i = state->grid_width * y; j = i + state->grid_width; for (; i < j; i++) { state->cells[i].glyph = 0; state->cells[i].changed = 1; } } state->typing_bold_p = False; state->typing_stutter_p = False; scrolled_p = True; } else if (c == '\010') state->typing_delay += 500000; else if (c == '\001') { state->typing_stutter_p = True; state->typing_bold_p = False; } else if (c == '\002') state->typing_bold_p = True; else if (x < state->grid_width-1) { m_cell *cell = &state->cells[state->grid_width * y + x]; cell->glyph = char_map[c] + 1; if (c == ' ' || c == '\t') cell->glyph = 0; cell->changed = 1; cell->glow = (state->typing_bold_p ? 127 : 0); } if (c >= ' ') x++; if (x >= state->grid_width-1) x = state->grid_width-1; state->typing++; if (state->typing_stutter_p) { if (state->typing_delay == 0) state->typing_delay = 20000; if (random() % 3) state->typing_delay += (0xFFFFFF & ((random() % 200000) + 1)); } /* If there's no delay after this character, just keep going. */ if (state->typing_delay == 0) goto AGAIN; if (scrolled_p || x != state->cursor_x || y != state->cursor_y) { set_cursor (state, False); state->cursor_x = x; state->cursor_y = y; if (state->typing_cursor_p) set_cursor (state, True); } } } static void hack_matrix (m_state *state) { int x; switch (state->mode) { case TRACE_DONE: case TRACE_FAIL: return; case TRACE_A: case TRACE_B: case MATRIX: case DNA: case BINARY: case DEC: case HEX: case ASCII: break; default: abort(); break; } /* Glow some characters. */ if (!state->insert_bottom_p) { int i = random() % (state->grid_width / 2); while (--i > 0) { int yy = random() % state->grid_height; int xx = random() % state->grid_width; m_cell *cell = &state->cells[state->grid_width * yy + xx]; if (cell->glyph && cell->glow == 0) { cell->glow = random() % 10; cell->changed = 1; } } } /* Change some of the feeders. */ for (x = 0; x < state->grid_width; x++) { m_feeder *f = &state->feeders[x]; Bool bottom_feeder_p; if (f->remaining > 0) /* never change if pipe isn't empty */ continue; if ((random() % densitizer(state)) != 0) /* then change N% of the time */ continue; f->remaining = 3 + (random() % state->grid_height); f->throttle = ((random() % 5) + (random() % 5)); if ((random() % 4) != 0) f->remaining = 0; if (state->mode == TRACE_A || state->mode == TRACE_B) bottom_feeder_p = True; else if (state->insert_top_p && state->insert_bottom_p) bottom_feeder_p = (random() & 1); else bottom_feeder_p = state->insert_bottom_p; if (bottom_feeder_p) f->y = random() % (state->grid_height / 2); else f->y = -1; } if (state->mode == MATRIX && (! (random() % 500))) init_spinners (state); } static unsigned long xmatrix_draw (Display *dpy, Window window, void *closure) { m_state *state = (m_state *) closure; if (state->typing_delay > 0) { state->typing_delay -= state->delay; if (state->typing_delay < 0) state->typing_delay = 0; redraw_cells (state, False); return state->delay; } switch (state->mode) { case MATRIX: case DNA: case BINARY: case DEC: case HEX: case ASCII: case TRACE_A: case TRACE_B: feed_matrix (state); hack_matrix (state); break; case DRAIN_TRACE_A: case DRAIN_TRACE_B: case DRAIN_KNOCK: case DRAIN_NMAP: case DRAIN_MATRIX: feed_matrix (state); if (screen_blank_p (state)) { state->typing_delay = 500000; if(state->start_reveal_back_p){ m_cell *back, *to; int x,y; state->typing_delay = 5000000; state->start_reveal_back_p = False; state->back_text_full_p = False; /* for loop to move background to foreground */ for (y = 0; y < state->grid_height; y++){ for (x = 0; x < state->grid_width; x++){ to = &state->cells[state->grid_width * y + x]; back = &state->background[state->grid_width * y + x]; to->glyph = back->glyph; to->changed = back->changed; back->glyph = 0; back->changed = 0; } } } switch (state->mode) { case DRAIN_TRACE_A: set_mode (state, TRACE_TEXT_A); break; case DRAIN_TRACE_B: set_mode (state, TRACE_TEXT_B); break; case DRAIN_KNOCK: set_mode (state, KNOCK); break; case DRAIN_NMAP: set_mode (state, NMAP); break; case DRAIN_MATRIX: set_mode (state, state->def_mode); break; default: abort(); break; } } break; case TRACE_DONE: set_mode (state, state->def_mode); break; case TRACE_TEXT_A: case TRACE_TEXT_B: case TRACE_FAIL: case KNOCK: case NMAP: hack_text (state); if (! state->typing) /* done typing */ { set_cursor (state, False); switch (state->mode) { case TRACE_TEXT_A: set_mode (state, TRACE_A); break; case TRACE_TEXT_B: set_mode (state, TRACE_B); break; case TRACE_FAIL: set_mode (state, state->def_mode); break; case KNOCK: set_mode (state, state->def_mode); break; case NMAP: set_mode (state, state->def_mode); break; default: abort(); break; } } break; default: abort(); } if (state->start_reveal_back_p){ set_mode (state, DRAIN_MATRIX); } if (state->mode == MATRIX && state->knock_knock_p && (! (random() % 10000))) { if (! (random() % 5)) set_mode (state, DRAIN_NMAP); else set_mode (state, DRAIN_KNOCK); } redraw_cells (state, True); #if 0 { static int i = 0; static int ndens = 0; static int tdens = 0; i++; if (i > 50) { int dens = (100.0 * (((double)count) / ((double) (state->grid_width * state->grid_height)))); tdens += dens; ndens++; printf ("density: %d%% (%d%%)\n", dens, (tdens / ndens)); i = 0; } } #endif return state->delay; } static void xmatrix_reshape (Display *dpy, Window window, void *closure, unsigned int w, unsigned int h) { m_state *state = (m_state *) closure; int ow = state->grid_width; int oh = state->grid_height; XGetWindowAttributes (state->dpy, state->window, &state->xgwa); state->grid_width = state->xgwa.width / state->char_width; state->grid_height = state->xgwa.height / state->char_height; state->grid_width++; state->grid_height++; if (state->grid_width < 5) state->grid_width = 5; if (state->grid_height < 5) state->grid_height = 5; if (ow != state->grid_width || oh != state->grid_height) { m_cell *ncells = (m_cell *) calloc (sizeof(m_cell), state->grid_width * state->grid_height); m_cell *nbackground = (m_cell *) calloc (sizeof(m_cell), state->grid_width * state->grid_height); m_feeder *nfeeders = (m_feeder *) calloc (sizeof(m_feeder), state->grid_width); int x, y, i; /* fprintf(stderr, "resize: %d x %d ==> %d x %d\n", ow, oh, state->grid_width, state->grid_height); */ for (y = 0; y < oh; y++) for (x = 0; x < ow; x++) if (x < ow && x < state->grid_width && y < oh && y < state->grid_height){ ncells[y * state->grid_width + x] = state->cells[y * ow + x]; nbackground[y * state->grid_width + x] = state->background[y * ow + x]; } free (state->cells); free (state->background); state->cells = ncells; state->background = nbackground; x = (ow < state->grid_width ? ow : state->grid_width); for (i = 0; i < x; i++) nfeeders[i] = state->feeders[i]; free (state->feeders); state->feeders = nfeeders; } if (state->tc) textclient_reshape (state->tc, state->xgwa.width, state->xgwa.height, state->grid_width - 2, state->grid_height - 1, 0); } static Bool xmatrix_event (Display *dpy, Window window, void *closure, XEvent *event) { m_state *state = (m_state *) closure; if (event->xany.type == KeyPress) { KeySym keysym; char c = 0; XLookupString (&event->xkey, &c, 1, &keysym, 0); switch (c) { case '0': /*set_mode (state, DRAIN_MATRIX);*/ state->back_y = 1; state->back_text_full_p = True; state->start_reveal_back_p = True; return True; case '+': case '=': case '>': case '.': state->density += 10; if (state->density > 100) state->density = 100; else return True; break; case '-': case '_': case '<': case ',': state->density -= 10; if (state->density < 0) state->density = 0; else return True; break; case '[': case '(': case '{': state->insert_top_p = True; state->insert_bottom_p = False; return True; case ']': case ')': case '}': state->insert_top_p = False; state->insert_bottom_p = True; return True; case '\\': case '|': state->insert_top_p = True; state->insert_bottom_p = True; return True; case 't': set_mode (state, DRAIN_TRACE_A); return True; case 'T': set_mode (state, DRAIN_TRACE_B); return True; case 'k': set_mode (state, DRAIN_KNOCK); return True; case 'c': set_mode (state, DRAIN_NMAP); return True; default: break; } } if (screenhack_event_helper (dpy, window, event)) { set_mode (state, DRAIN_MATRIX); return True; } return False; } static void xmatrix_free (Display *dpy, Window window, void *closure) { m_state *state = (m_state *) closure; if (state->tc) textclient_close (state->tc); if (state->cursor_timer) XtRemoveTimeOut (state->cursor_timer); /* #### there's more to free here */ free (state); } static const char *xmatrix_defaults [] = { ".background: black", ".foreground: #00AA00", "*fpsSolid: true", "*matrixFont: large", "*delay: 10000", "*insert: both", "*mode: Matrix", "*tracePhone: (312) 555-0690", "*spinners: 5", "*density: 75", "*trace: True", "*knockKnock: True", "*usePipe: False", "*usePty: False", "*program: xscreensaver-text --latin1", "*geometry: 960x720", 0 }; static XrmOptionDescRec xmatrix_options [] = { { "-small", ".matrixFont", XrmoptionNoArg, "Small" }, { "-large", ".matrixFont", XrmoptionNoArg, "Large" }, { "-delay", ".delay", XrmoptionSepArg, 0 }, { "-insert", ".insert", XrmoptionSepArg, 0 }, { "-top", ".insert", XrmoptionNoArg, "top" }, { "-bottom", ".insert", XrmoptionNoArg, "bottom" }, { "-both", ".insert", XrmoptionNoArg, "both" }, { "-density", ".density", XrmoptionSepArg, 0 }, { "-trace", ".trace", XrmoptionNoArg, "True" }, { "-no-trace", ".trace", XrmoptionNoArg, "False" }, { "-crack", ".mode", XrmoptionNoArg, "crack"}, { "-phone", ".tracePhone", XrmoptionSepArg, 0 }, { "-mode", ".mode", XrmoptionSepArg, 0 }, { "-dna", ".mode", XrmoptionNoArg, "DNA" }, { "-binary", ".mode", XrmoptionNoArg, "binary" }, { "-hexadecimal", ".mode", XrmoptionNoArg, "hexadecimal"}, { "-decimal", ".mode", XrmoptionNoArg, "decimal"}, { "-knock-knock", ".knockKnock", XrmoptionNoArg, "True" }, { "-no-knock-knock", ".knockKnock", XrmoptionNoArg, "False" }, { "-ascii", ".mode", XrmoptionNoArg, "ascii"}, { "-pipe", ".usePipe", XrmoptionNoArg, "True" }, { "-no-pipe", ".usePipe", XrmoptionNoArg, "False" }, { "-program", ".program", XrmoptionSepArg, 0 }, { 0, 0, 0, 0 } }; XSCREENSAVER_MODULE ("XMatrix", xmatrix) xscreensaver-5.36/hacks/petri.c000664 000767 000024 00000047434 12710314347 016536 0ustar00jwzstaff000000 000000 /* petri, simulate mold in a petri dish. v2.7 * by Dan Bornstein, danfuzz@milk.com * with help from Jamie Zawinski, jwz@jwz.org * Copyright (c) 1992-1999 Dan Bornstein. * * 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. * * * Brief description of options/resources: * * delay: the delay in microseconds between iterations * size: the size of a cell in pixels * count: the number of different kinds of mold (minimum: 2) * diaglim: the age limit for diagonal growth as a multiplier of orthogonal * growth (minimum: 1, maximum 2). 1 means square growth, 1.414 * (i.e., sqrt(2)) means approximately circular growth, 2 means diamond * growth. * anychan: the chance (fraction, between 0 and 1) that at each iteration, * any new cell will be born * minorchan: the chance (fraction, between 0 and 1) that, given that new * cells will be added, that only two will be added (a minor cell birth * event) * instantdeathchan: the chance (fraction, between 0 and 1) that, given * that death and destruction will happen, that instead of using plague * cells, death will be instantaneous * minlifespan: the minimum lifespan of a colony (before black death ensues) * maxlifespan: the maximum lifespan of a colony (before black death ensues) * minlifespeed: the minimum speed for living cells as a fraction of the * maximum possible speed (fraction, between 0 and 1) * maxlifespeed: the maximum speed for living cells as a fraction of the * maximum possible speed (fraction, between 0 and 1) * mindeathspeed: the minimum speed for black death cells as a fraction of the * maximum possible speed (fraction, between 0 and 1) * maxdeathspeed: the maximum speed for black death cells as a fraction of the * maximum possible speed (fraction, between 0 and 1) * originalcolors: if true, count must be 8 or less and the colors are a * fixed set of primary and secondary colors (the artist's original choices) * * Interesting settings: * * petri -originalcolors -size 8 * petri -size 2 * petri -size 8 -diaglim 1.8 * petri -diaglim 1.1 * * petri -count 4 -anychan 0.01 -minorchan 1 \ * -minlifespan 2000 -maxlifespan 5000 * * petri -count 3 -anychan 1 -minlifespan 100000 \ * -instantdeathchan 0 * * petri -minlifespeed 0.02 -maxlifespeed 0.03 -minlifespan 1 \ * -maxlifespan 1 -instantdeathchan 0 -minorchan 0 \ * -anychan 0.3 -delay 4000 */ #include #include "screenhack.h" #include "spline.h" #define FLOAT float #define RAND_FLOAT (((FLOAT) (random() & 0xffff)) / ((FLOAT) 0x10000)) typedef struct cell_s { unsigned char col; /* 0 */ unsigned char isnext; /* 1 */ unsigned char nextcol; /* 2 */ /* 3 */ struct cell_s *next; /* 4 */ struct cell_s *prev; /* 8 - */ FLOAT speed; /* 12 */ FLOAT growth; /* 16 20 - */ FLOAT nextspeed; /* 20 28 */ /* 24 36 - */ } cell; struct state { Display *dpy; Window window; int arr_width; int arr_height; int count; cell *arr; cell *head; cell *tail; int blastcount; GC *coloredGCs; int windowWidth; int windowHeight; int xOffset; int yOffset; int xSize; int ySize; FLOAT orthlim; FLOAT diaglim; FLOAT anychan; FLOAT minorchan; FLOAT instantdeathchan; int minlifespan; int maxlifespan; FLOAT minlifespeed; FLOAT maxlifespeed; FLOAT mindeathspeed; FLOAT maxdeathspeed; Bool originalcolors; int warned; int delay; }; #define cell_x(c) (st->arr_width ? ((c) - st->arr) % st->arr_width : 0) #define cell_y(c) (st->arr_width ? ((c) - st->arr) / st->arr_width : 0) static int random_life_value (struct state *st) { return (int) ((RAND_FLOAT * (st->maxlifespan - st->minlifespan)) + st->minlifespan); } static void setup_random_colormap (struct state *st, XWindowAttributes *xgwa) { XGCValues gcv; int lose = 0; int ncolors = st->count - 1; int n; XColor *colors = (XColor *) calloc (sizeof(*colors), st->count*2); colors[0].pixel = get_pixel_resource (st->dpy, xgwa->colormap, "background", "Background"); make_random_colormap (xgwa->screen, xgwa->visual, xgwa->colormap, colors+1, &ncolors, True, True, 0, True); if (ncolors < 1) { fprintf (stderr, "%s: couldn't allocate any colors\n", progname); exit (-1); } ncolors++; st->count = ncolors; memcpy (colors + st->count, colors, st->count * sizeof(*colors)); colors[st->count].pixel = get_pixel_resource (st->dpy, xgwa->colormap, "foreground", "Foreground"); for (n = 1; n < st->count; n++) { int m = n + st->count; colors[n].red = colors[m].red / 2; colors[n].green = colors[m].green / 2; colors[n].blue = colors[m].blue / 2; if (!XAllocColor (st->dpy, xgwa->colormap, &colors[n])) { lose++; colors[n] = colors[m]; } } if (lose) { fprintf (stderr, "%s: unable to allocate %d half-intensity colors.\n", progname, lose); } for (n = 0; n < st->count*2; n++) { gcv.foreground = colors[n].pixel; st->coloredGCs[n] = XCreateGC (st->dpy, st->window, GCForeground, &gcv); } free (colors); } static void setup_original_colormap (struct state *st, XWindowAttributes *xgwa) { XGCValues gcv; int lose = 0; int n; XColor *colors = (XColor *) calloc (sizeof(*colors), st->count*2); colors[0].pixel = get_pixel_resource (st->dpy, xgwa->colormap, "background", "Background"); colors[st->count].pixel = get_pixel_resource (st->dpy, xgwa->colormap, "foreground", "Foreground"); for (n = 1; n < st->count; n++) { int m = n + st->count; colors[n].red = ((n & 0x01) != 0) * 0x8000; colors[n].green = ((n & 0x02) != 0) * 0x8000; colors[n].blue = ((n & 0x04) != 0) * 0x8000; if (!XAllocColor (st->dpy, xgwa->colormap, &colors[n])) { lose++; colors[n] = colors[0]; } colors[m].red = colors[n].red + 0x4000; colors[m].green = colors[n].green + 0x4000; colors[m].blue = colors[n].blue + 0x4000; if (!XAllocColor (st->dpy, xgwa->colormap, &colors[m])) { lose++; colors[m] = colors[st->count]; } } if (lose) { fprintf (stderr, "%s: unable to allocate %d colors.\n", progname, lose); } for (n = 0; n < st->count*2; n++) { gcv.foreground = colors[n].pixel; st->coloredGCs[n] = XCreateGC (st->dpy, st->window, GCForeground, &gcv); } free (colors); } static void setup_display (struct state *st) { XWindowAttributes xgwa; int cell_size = get_integer_resource (st->dpy, "size", "Integer"); int osize, alloc_size, oalloc; int mem_throttle = 0; char *s; if (cell_size < 1) cell_size = 1; osize = cell_size; s = get_string_resource (st->dpy, "memThrottle", "MemThrottle"); if (s) { int n; char c; if (1 == sscanf (s, " %d M %c", &n, &c) || 1 == sscanf (s, " %d m %c", &n, &c)) mem_throttle = n * (1 << 20); else if (1 == sscanf (s, " %d K %c", &n, &c) || 1 == sscanf (s, " %d k %c", &n, &c)) mem_throttle = n * (1 << 10); else if (1 == sscanf (s, " %d %c", &n, &c)) mem_throttle = n; else { fprintf (stderr, "%s: invalid memThrottle \"%s\" (try \"10M\")\n", progname, s); exit (1); } free (s); } XGetWindowAttributes (st->dpy, st->window, &xgwa); st->originalcolors = get_boolean_resource (st->dpy, "originalcolors", "Boolean"); st->count = get_integer_resource (st->dpy, "count", "Integer"); if (st->count < 2) st->count = 2; /* number of colors can't be greater than the half depth of the screen. */ if (st->count > (unsigned int) (1L << (xgwa.depth-1))) st->count = (unsigned int) (1L << (xgwa.depth-1)); /* Actually, since cell->col is of type char, this has to be small. */ if (st->count >= (unsigned int) (1L << ((sizeof(st->arr[0].col) * 8) - 1))) st->count = (unsigned int) (1L << ((sizeof(st->arr[0].col) * 8) - 1)); if (st->originalcolors && (st->count > 8)) { st->count = 8; } st->coloredGCs = (GC *) calloc (sizeof(GC), st->count * 2); st->diaglim = get_float_resource (st->dpy, "diaglim", "Float"); if (st->diaglim < 1.0) { st->diaglim = 1.0; } else if (st->diaglim > 2.0) { st->diaglim = 2.0; } st->diaglim *= st->orthlim; st->anychan = get_float_resource (st->dpy, "anychan", "Float"); if (st->anychan < 0.0) { st->anychan = 0.0; } else if (st->anychan > 1.0) { st->anychan = 1.0; } st->minorchan = get_float_resource (st->dpy, "minorchan","Float"); if (st->minorchan < 0.0) { st->minorchan = 0.0; } else if (st->minorchan > 1.0) { st->minorchan = 1.0; } st->instantdeathchan = get_float_resource (st->dpy, "instantdeathchan","Float"); if (st->instantdeathchan < 0.0) { st->instantdeathchan = 0.0; } else if (st->instantdeathchan > 1.0) { st->instantdeathchan = 1.0; } st->minlifespan = get_integer_resource (st->dpy, "minlifespan", "Integer"); if (st->minlifespan < 1) { st->minlifespan = 1; } st->maxlifespan = get_integer_resource (st->dpy, "maxlifespan", "Integer"); if (st->maxlifespan < st->minlifespan) { st->maxlifespan = st->minlifespan; } st->minlifespeed = get_float_resource (st->dpy, "minlifespeed", "Float"); if (st->minlifespeed < 0.0) { st->minlifespeed = 0.0; } else if (st->minlifespeed > 1.0) { st->minlifespeed = 1.0; } st->maxlifespeed = get_float_resource (st->dpy, "maxlifespeed", "Float"); if (st->maxlifespeed < st->minlifespeed) { st->maxlifespeed = st->minlifespeed; } else if (st->maxlifespeed > 1.0) { st->maxlifespeed = 1.0; } st->mindeathspeed = get_float_resource (st->dpy, "mindeathspeed", "Float"); if (st->mindeathspeed < 0.0) { st->mindeathspeed = 0.0; } else if (st->mindeathspeed > 1.0) { st->mindeathspeed = 1.0; } st->maxdeathspeed = get_float_resource (st->dpy, "maxdeathspeed", "Float"); if (st->maxdeathspeed < st->mindeathspeed) { st->maxdeathspeed = st->mindeathspeed; } else if (st->maxdeathspeed > 1.0) { st->maxdeathspeed = 1.0; } st->minlifespeed *= st->diaglim; st->maxlifespeed *= st->diaglim; st->mindeathspeed *= st->diaglim; st->maxdeathspeed *= st->diaglim; st->windowWidth = xgwa.width; st->windowHeight = xgwa.height; st->arr_width = st->windowWidth / cell_size; st->arr_height = st->windowHeight / cell_size; alloc_size = sizeof(cell) * st->arr_width * st->arr_height; oalloc = alloc_size; if (mem_throttle > 0) while (cell_size < st->windowWidth/10 && cell_size < st->windowHeight/10 && alloc_size > mem_throttle) { cell_size++; st->arr_width = st->windowWidth / cell_size; st->arr_height = st->windowHeight / cell_size; alloc_size = sizeof(cell) * st->arr_width * st->arr_height; } if (osize != cell_size) { if (!st->warned) { fprintf (stderr, "%s: throttling cell size from %d to %d because of %dM limit.\n", progname, osize, cell_size, mem_throttle / (1 << 20)); fprintf (stderr, "%s: %dx%dx%d = %.1fM, %dx%dx%d = %.1fM.\n", progname, st->windowWidth, st->windowHeight, osize, ((float) oalloc) / (1 << 20), st->windowWidth, st->windowHeight, cell_size, ((float) alloc_size) / (1 << 20)); st->warned = 1; } } st->xSize = st->arr_width ? st->windowWidth / st->arr_width : 0; st->ySize = st->arr_height ? st->windowHeight / st->arr_height : 0; if (st->xSize > st->ySize) { st->xSize = st->ySize; } else { st->ySize = st->xSize; } st->xOffset = (st->windowWidth - (st->arr_width * st->xSize)) / 2; st->yOffset = (st->windowHeight - (st->arr_height * st->ySize)) / 2; if (st->originalcolors) { setup_original_colormap (st, &xgwa); } else { setup_random_colormap (st, &xgwa); } } static void drawblock (struct state *st, int x, int y, unsigned char c) { if (st->xSize == 1 && st->ySize == 1) XDrawPoint (st->dpy, st->window, st->coloredGCs[c], x + st->xOffset, y + st->yOffset); else XFillRectangle (st->dpy, st->window, st->coloredGCs[c], x * st->xSize + st->xOffset, y * st->ySize + st->yOffset, st->xSize, st->ySize); } static void setup_arr (struct state *st) { int x, y; if (st->arr != NULL) { free (st->arr); } XFillRectangle (st->dpy, st->window, st->coloredGCs[0], 0, 0, st->windowWidth, st->windowHeight); if (!st->arr_width) st->arr_width = 1; if (!st->arr_height) st->arr_height = 1; st->arr = (cell *) calloc (sizeof(cell), st->arr_width * st->arr_height); if (!st->arr) { fprintf (stderr, "%s: out of memory allocating %dx%d grid\n", progname, st->arr_width, st->arr_height); exit (1); } for (y = 0; y < st->arr_height; y++) { int row = y * st->arr_width; for (x = 0; x < st->arr_width; x++) { st->arr[row+x].speed = 0.0; st->arr[row+x].growth = 0.0; st->arr[row+x].col = 0; st->arr[row+x].isnext = 0; st->arr[row+x].next = 0; st->arr[row+x].prev = 0; } } if (st->head == NULL) { st->head = (cell *) malloc (sizeof (cell)); } if (st->tail == NULL) { st->tail = (cell *) malloc (sizeof (cell)); } st->head->next = st->tail; st->head->prev = st->head; st->tail->next = st->tail; st->tail->prev = st->head; st->blastcount = random_life_value (st); } static void newcell (struct state *st, cell *c, unsigned char col, FLOAT sp) { if (! c) return; if (c->col == col) return; c->nextcol = col; c->nextspeed = sp; c->isnext = 1; if (c->prev == 0) { c->next = st->head->next; c->prev = st->head; st->head->next = c; c->next->prev = c; } } static void killcell (struct state *st, cell *c) { c->prev->next = c->next; c->next->prev = c->prev; c->prev = 0; c->speed = 0.0; drawblock (st, cell_x(c), cell_y(c), c->col); } static void randblip (struct state *st, int doit) { int n; int b = 0; if (!doit && (st->blastcount-- >= 0) && (RAND_FLOAT > st->anychan)) { return; } if (st->blastcount < 0) { b = 1; n = 2; st->blastcount = random_life_value (st); if (RAND_FLOAT < st->instantdeathchan) { /* clear everything every so often to keep from getting into a * rut */ setup_arr (st); b = 0; } } else if (RAND_FLOAT <= st->minorchan) { n = 2; } else { n = random () % 3 + 3; } while (n--) { int x = st->arr_width ? random () % st->arr_width : 0; int y = st->arr_height ? random () % st->arr_height : 0; int c; FLOAT s; if (b) { c = 0; s = RAND_FLOAT * (st->maxdeathspeed - st->mindeathspeed) + st->mindeathspeed; } else { c = ((st->count - 1) ? random () % (st->count-1) : 0) + 1; s = RAND_FLOAT * (st->maxlifespeed - st->minlifespeed) + st->minlifespeed; } newcell (st, &st->arr[y * st->arr_width + x], c, s); } } static void update (struct state *st) { cell *a; for (a = st->head->next; a != st->tail; a = a->next) { static const XPoint all_coords[] = {{-1, -1}, {-1, 1}, {1, -1}, {1, 1}, {-1, 0}, { 1, 0}, {0, -1}, {0, 1}, {99, 99}}; const XPoint *coords = 0; if (a->speed == 0) continue; a->growth += a->speed; if (a->growth >= st->diaglim) { coords = all_coords; } else if (a->growth >= st->orthlim) { coords = &all_coords[4]; } else { continue; } while (coords->x != 99) { int x = cell_x(a) + coords->x; int y = cell_y(a) + coords->y; coords++; if (x < 0) x = st->arr_width - 1; else if (x >= st->arr_width) x = 0; if (y < 0) y = st->arr_height - 1; else if (y >= st->arr_height) y = 0; newcell (st, &st->arr[y * st->arr_width + x], a->col, a->speed); } if (a->growth >= st->diaglim) killcell (st, a); } randblip (st, (st->head->next) == st->tail); for (a = st->head->next; a != st->tail; a = a->next) { if (a->isnext) { a->isnext = 0; a->speed = a->nextspeed; a->growth = 0.0; a->col = a->nextcol; drawblock (st, cell_x(a), cell_y(a), a->col + st->count); } } } static void * petri_init (Display *dpy, Window win) { struct state *st = (struct state *) calloc (1, sizeof(*st)); st->dpy = dpy; st->window = win; st->delay = get_integer_resource (st->dpy, "delay", "Delay"); st->orthlim = 1; setup_display (st); setup_arr (st); randblip (st, 1); return st; } static unsigned long petri_draw (Display *dpy, Window window, void *closure) { struct state *st = (struct state *) closure; update (st); return st->delay; } static void petri_reshape (Display *dpy, Window window, void *closure, unsigned int w, unsigned int h) { } static Bool petri_event (Display *dpy, Window window, void *closure, XEvent *event) { return False; } static void petri_free (Display *dpy, Window window, void *closure) { struct state *st = (struct state *) closure; free (st); } static const char *petri_defaults [] = { ".background: black", ".foreground: white", "*fpsSolid: true", "*delay: 10000", "*count: 20", "*size: 2", "*diaglim: 1.414", "*anychan: 0.0015", "*minorchan: 0.5", "*instantdeathchan: 0.2", "*minlifespan: 500", "*maxlifespan: 1500", "*minlifespeed: 0.04", "*maxlifespeed: 0.13", "*mindeathspeed: 0.42", "*maxdeathspeed: 0.46", "*originalcolors: false", "*memThrottle: 22M", /* don't malloc more than this much. Scale the pixels up if necessary. */ #ifdef HAVE_MOBILE "*ignoreRotation: True", #endif 0 }; static XrmOptionDescRec petri_options [] = { { "-delay", ".delay", XrmoptionSepArg, 0 }, { "-size", ".size", XrmoptionSepArg, 0 }, { "-count", ".count", XrmoptionSepArg, 0 }, { "-diaglim", ".diaglim", XrmoptionSepArg, 0 }, { "-anychan", ".anychan", XrmoptionSepArg, 0 }, { "-minorchan", ".minorchan", XrmoptionSepArg, 0 }, { "-instantdeathchan", ".instantdeathchan", XrmoptionSepArg, 0 }, { "-minlifespan", ".minlifespan", XrmoptionSepArg, 0 }, { "-maxlifespan", ".maxlifespan", XrmoptionSepArg, 0 }, { "-minlifespeed", ".minlifespeed", XrmoptionSepArg, 0 }, { "-maxlifespeed", ".maxlifespeed", XrmoptionSepArg, 0 }, { "-mindeathspeed", ".mindeathspeed", XrmoptionSepArg, 0 }, { "-maxdeathspeed", ".maxdeathspeed", XrmoptionSepArg, 0 }, { "-originalcolors", ".originalcolors", XrmoptionNoArg, "true" }, { "-mem-throttle", ".memThrottle", XrmoptionSepArg, 0 }, { 0, 0, 0, 0 } }; XSCREENSAVER_MODULE ("Petri", petri) xscreensaver-5.36/hacks/shadebobs.c000644 000767 000024 00000036312 12710314370 017330 0ustar00jwzstaff000000 000000 /* shadebobs, Copyright (c) 1999 Shane Smit * * 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. * * Module - "shadebobs.c" * * Description: * There are two little shading circles (bobs) that zip around the screen. * one of them shades up towards white, and the other shades down toward * black. * This keeps the screen in color balance at a chosen color. * * Its kinda like 'The Force' * There is a light side, a dark side, and it keeps the world in balance. * * [05/23/99] - Shane Smit: Creation * [05/26/99] - Shane Smit: Port to C/screenhack for use with XScreenSaver * [06/11/99] - Shane Smit: Stopped trying to rape the palette. * [06/20/99] - jwz: cleaned up ximage handling, gave resoources short names, * introduced delay, made it restart after N iterations. * [06/21/99] - Shane Smit: Modified default values slightly, color changes * on cycle, and the extents of the sinus pattern change in * real-time. * [06/22/99] - Shane Smit: Fixed delay to be fast and use little CPU :). * [09/17/99] - Shane Smit: Made all calculations based on the size of the * window. Thus, it'll look the same at 100x100 as it does at * 1600x1200 ( Only smaller :). * [04/24/00] - Shane Smit: Revamped entire source code: * Shade Bob movement is calculated very differently. * Base color can be any color now. */ #include #include "screenhack.h" /* #define VERBOSE */ static const char *shadebobs_defaults [] = { ".background: black", ".foreground: white", "*fpsSolid: true", "*degrees: 0", /* default: Automatic degree calculation */ "*color: random", "*count: 4", "*cycles: 10", "*ncolors: 64", /* changing this doesn't work particularly well */ "*delay: 10000", #ifdef HAVE_MOBILE "*ignoreRotation: True", #endif 0 }; static XrmOptionDescRec shadebobs_options [] = { { "-degrees", ".degrees", XrmoptionSepArg, 0 }, { "-color", ".color", XrmoptionSepArg, 0 }, { "-ncolors", ".ncolors", XrmoptionSepArg, 0 }, { "-count", ".count", XrmoptionSepArg, 0 }, { "-delay", ".delay", XrmoptionSepArg, 0 }, { "-cycles", ".cycles", XrmoptionSepArg, 0 }, { 0, 0, 0, 0 } }; /* Ahem. Chocolate is a flavor; not a food. Thank you */ typedef struct { signed char *anDeltaMap; double nAngle, nAngleDelta, nAngleInc; double nPosX, nPosY; } SShadeBob; struct state { Display *dpy; Window window; unsigned short iDegreeCount; double *anSinTable, *anCosTable; unsigned short iWinWidth, iWinHeight; unsigned short iWinCenterX, iWinCenterY; char *sColor; unsigned char iBobRadius, iBobDiameter; unsigned char iVelocity; unsigned long *aiColorVals; signed short iColorCount; int cycles; XImage *pImage; unsigned char nShadeBobCount, iShadeBob; SShadeBob *aShadeBobs; GC gc; int delay; int draw_i; }; #define RANDOM() ((int) (random() & 0X7FFFFFFFL)) static void ResetShadeBob( struct state *st, SShadeBob *pShadeBob ) { pShadeBob->nPosX = RANDOM() % st->iWinWidth; pShadeBob->nPosY = RANDOM() % st->iWinHeight; pShadeBob->nAngle = RANDOM() % st->iDegreeCount; pShadeBob->nAngleDelta = ( RANDOM() % st->iDegreeCount ) - ( st->iDegreeCount / 2.0F ); pShadeBob->nAngleInc = pShadeBob->nAngleDelta / 50.0F; if( pShadeBob->nAngleInc == 0.0F ) pShadeBob->nAngleInc = ( pShadeBob->nAngleDelta > 0.0F ) ? 0.0001F : -0.0001F; } static void InitShadeBob( struct state *st, SShadeBob *pShadeBob, Bool bDark ) { double nDelta; int iWidth, iHeight; if( ( pShadeBob->anDeltaMap = calloc( st->iBobDiameter * st->iBobDiameter, sizeof(char) ) ) == NULL ) { fprintf( stderr, "%s: Could not allocate Delta Map!\n", progname ); return; } for( iHeight=-st->iBobRadius; iHeightiBobRadius; iHeight++ ) for( iWidth=-st->iBobRadius; iWidthiBobRadius; iWidth++ ) { nDelta = 9 - ( ( sqrt( pow( iWidth+0.5, 2 ) + pow( iHeight+0.5, 2 ) ) / st->iBobRadius ) * 8 ); if( nDelta < 0 ) nDelta = 0; if( bDark ) nDelta = -nDelta; pShadeBob->anDeltaMap[ ( iWidth + st->iBobRadius ) * st->iBobDiameter + iHeight + st->iBobRadius ] = (char)nDelta; } ResetShadeBob( st, pShadeBob ); } /* A delta is calculated, and the shadebob turns at an increment. When the delta * falls to 0, a new delta and increment are calculated. */ static void MoveShadeBob( struct state *st, SShadeBob *pShadeBob ) { pShadeBob->nAngle += pShadeBob->nAngleInc; pShadeBob->nAngleDelta -= pShadeBob->nAngleInc; /* Since it can happen that nAngle < 0 and nAngle + iDegreeCount >= iDegreeCount on floating point, we set some marginal value. */ if( pShadeBob->nAngle + 0.5 >= st->iDegreeCount ) pShadeBob->nAngle -= st->iDegreeCount; else if( pShadeBob->nAngle < -0.5 ) pShadeBob->nAngle += st->iDegreeCount; if( ( pShadeBob->nAngleInc>0.0F && pShadeBob->nAngleDeltanAngleInc ) || ( pShadeBob->nAngleInc<=0.0F && pShadeBob->nAngleDelta>pShadeBob->nAngleInc ) ) { pShadeBob->nAngleDelta = ( RANDOM() % st->iDegreeCount ) - ( st->iDegreeCount / 2.0F ); pShadeBob->nAngleInc = pShadeBob->nAngleDelta / 50.0F; if( pShadeBob->nAngleInc == 0.0F ) pShadeBob->nAngleInc = ( pShadeBob->nAngleDelta > 0.0F ) ? 0.0001F : -0.0001F; } pShadeBob->nPosX = ( st->anSinTable[ (int)pShadeBob->nAngle ] * st->iVelocity ) + pShadeBob->nPosX; pShadeBob->nPosY = ( st->anCosTable[ (int)pShadeBob->nAngle ] * st->iVelocity ) + pShadeBob->nPosY; /* This wraps it around the screen. */ if( pShadeBob->nPosX >= st->iWinWidth ) pShadeBob->nPosX -= st->iWinWidth; else if( pShadeBob->nPosX < 0 ) pShadeBob->nPosX += st->iWinWidth; if( pShadeBob->nPosY >= st->iWinHeight ) pShadeBob->nPosY -= st->iWinHeight; else if( pShadeBob->nPosY < 0 ) pShadeBob->nPosY += st->iWinHeight; } static void Execute( struct state *st, SShadeBob *pShadeBob ) { unsigned long iColor; short iColorVal; int iPixelX, iPixelY; unsigned int iWidth, iHeight; MoveShadeBob( st, pShadeBob ); for( iHeight=0; iHeightiBobDiameter; iHeight++ ) { iPixelY = pShadeBob->nPosY + iHeight; if( iPixelY >= st->iWinHeight ) iPixelY -= st->iWinHeight; for( iWidth=0; iWidthiBobDiameter; iWidth++ ) { iPixelX = pShadeBob->nPosX + iWidth; if( iPixelX >= st->iWinWidth ) iPixelX -= st->iWinWidth; iColor = XGetPixel( st->pImage, iPixelX, iPixelY ); /* FIXME: Here is a loop I'd love to take out. */ for( iColorVal=0; iColorValiColorCount; iColorVal++ ) if( st->aiColorVals[ iColorVal ] == iColor ) break; iColorVal += pShadeBob->anDeltaMap[ iWidth * st->iBobDiameter + iHeight ]; if( iColorVal >= st->iColorCount ) iColorVal = st->iColorCount - 1; if( iColorVal < 0 ) iColorVal = 0; XPutPixel( st->pImage, iPixelX, iPixelY, st->aiColorVals[ iColorVal ] ); } } /* FIXME: if it's next to the top or left sides of screen this will break. However, it's not noticable. */ XPutImage( st->dpy, st->window, st->gc, st->pImage, pShadeBob->nPosX, pShadeBob->nPosY, pShadeBob->nPosX, pShadeBob->nPosY, st->iBobDiameter, st->iBobDiameter ); } static void CreateTables( struct state *st, unsigned int nDegrees ) { double nRadian; unsigned int iDegree; st->anSinTable = calloc( nDegrees, sizeof(double) ); st->anCosTable = calloc( nDegrees, sizeof(double) ); for( iDegree=0; iDegreeanSinTable[ iDegree ] = sin( nRadian ); st->anCosTable[ iDegree ] = cos( nRadian ); } } static unsigned long * SetPalette(struct state *st ) { XWindowAttributes XWinAttribs; XColor Color, *aColors; signed short iColor; float nHalfColors; XGetWindowAttributes( st->dpy, st->window, &XWinAttribs ); Color.red = RANDOM() % 0xFFFF; Color.green = RANDOM() % 0xFFFF; Color.blue = RANDOM() % 0xFFFF; if( strcasecmp( st->sColor, "random" ) && !XParseColor( st->dpy, XWinAttribs.colormap, st->sColor, &Color ) ) fprintf( stderr, "%s: color %s not found in database. Choosing to random...\n", progname, st->sColor ); #ifdef VERBOSE printf( "%s: Base color (RGB): <%d, %d, %d>\n", progname, Color.red, Color.green, Color.blue ); #endif /* VERBOSE */ st->iColorCount = get_integer_resource(st->dpy, "ncolors", "Integer" ); if( st->iColorCount < 2 ) st->iColorCount = 2; if( st->iColorCount > 255 ) st->iColorCount = 255; aColors = calloc( st->iColorCount, sizeof(XColor) ); st->aiColorVals = calloc( st->iColorCount, sizeof(unsigned long) ); for( iColor=0; iColoriColorCount; iColor++ ) { nHalfColors = st->iColorCount / 2.0F; /* Black -> Base Color */ if( iColor < (st->iColorCount/2) ) { aColors[ iColor ].red = ( Color.red / nHalfColors ) * iColor; aColors[ iColor ].green = ( Color.green / nHalfColors ) * iColor; aColors[ iColor ].blue = ( Color.blue / nHalfColors ) * iColor; } /* Base Color -> White */ else { aColors[ iColor ].red = ( ( ( 0xFFFF - Color.red ) / nHalfColors ) * ( iColor - nHalfColors ) ) + Color.red; aColors[ iColor ].green = ( ( ( 0xFFFF - Color.green ) / nHalfColors ) * ( iColor - nHalfColors ) ) + Color.green; aColors[ iColor ].blue = ( ( ( 0xFFFF - Color.blue ) / nHalfColors ) * ( iColor - nHalfColors ) ) + Color.blue; } if( !XAllocColor( st->dpy, XWinAttribs.colormap, &aColors[ iColor ] ) ) { /* start all over with less colors */ XFreeColors( st->dpy, XWinAttribs.colormap, st->aiColorVals, iColor, 0 ); free( aColors ); free( st->aiColorVals ); st->iColorCount--; aColors = calloc( st->iColorCount, sizeof(XColor) ); st->aiColorVals = calloc( st->iColorCount, sizeof(unsigned long) ); iColor = -1; } else st->aiColorVals[ iColor ] = aColors[ iColor ].pixel; } free( aColors ); XSetWindowBackground( st->dpy, st->window, st->aiColorVals[ 0 ] ); return st->aiColorVals; } static void Initialize( struct state *st ) { XGCValues gcValues; XWindowAttributes XWinAttribs; /*int iBitsPerPixel;*/ /* Create the Image for drawing */ XGetWindowAttributes( st->dpy, st->window, &XWinAttribs ); #if 0 /* Find the preferred bits-per-pixel. (jwz) */ { int i, pfvc = 0; XPixmapFormatValues *pfv = XListPixmapFormats( st->dpy, &pfvc ); for( i=0; igc = XCreateGC( st->dpy, st->window, 0, &gcValues ); st->pImage = XCreateImage( st->dpy, XWinAttribs.visual, XWinAttribs.depth, ZPixmap, 0, NULL, XWinAttribs.width, XWinAttribs.height, 8 /*BitmapPad( st->dpy )*/, 0 ); st->pImage->data = calloc((st->pImage)->bytes_per_line, (st->pImage)->height); st->iWinWidth = XWinAttribs.width; st->iWinHeight = XWinAttribs.height; /* These are precalculations used in Execute(). */ st->iBobDiameter = ( ( st->iWinWidth < st->iWinHeight ) ? st->iWinWidth : st->iWinHeight ) / 25; st->iBobRadius = st->iBobDiameter / 2; #ifdef VERBOSE printf( "%s: Bob Diameter = %d\n", progname, st->iBobDiameter ); #endif st->iWinCenterX = ( XWinAttribs.width / 2 ) - st->iBobRadius; st->iWinCenterY = ( XWinAttribs.height / 2 ) - st->iBobRadius; st->iVelocity = ( ( st->iWinWidth < st->iWinHeight ) ? st->iWinWidth : st->iWinHeight ) / 150; /* Create the Sin and Cosine lookup tables. */ st->iDegreeCount = get_integer_resource(st->dpy, "degrees", "Integer" ); if( st->iDegreeCount == 0 ) st->iDegreeCount = ( XWinAttribs.width / 6 ) + 400; else if( st->iDegreeCount < 90 ) st->iDegreeCount = 90; else if( st->iDegreeCount > 5400 ) st->iDegreeCount = 5400; CreateTables( st, st->iDegreeCount ); #ifdef VERBOSE printf( "%s: Using a %d degree circle.\n", progname, st->iDegreeCount ); #endif /* VERBOSE */ /* Get the base color. */ st->sColor = get_string_resource(st->dpy, "color", "Color" ); } static void * shadebobs_init (Display *dpy, Window window) { struct state *st = (struct state *) calloc (1, sizeof(*st)); #ifdef VERBOSE time_t nTime = time( NULL ); unsigned short iFrame = 0; #endif /* VERBOSE */ st->dpy = dpy; st->window = window; st->nShadeBobCount = get_integer_resource(st->dpy, "count", "Integer" ); if( st->nShadeBobCount > 64 ) st->nShadeBobCount = 64; if( st->nShadeBobCount < 1 ) st->nShadeBobCount = 1; if( ( st->aShadeBobs = calloc( st->nShadeBobCount, sizeof(SShadeBob) ) ) == NULL ) { fprintf( stderr, "%s: Could not allocate %d ShadeBobs\n", progname, st->nShadeBobCount ); abort(); } #ifdef VERBOSE printf( "%s: Allocated %d ShadeBobs\n", progname, st->nShadeBobCount ); #endif /* VERBOSE */ Initialize( st ); for( st->iShadeBob=0; st->iShadeBobnShadeBobCount; st->iShadeBob++ ) InitShadeBob( st, &st->aShadeBobs[ st->iShadeBob ], st->iShadeBob % 2 ); st->delay = get_integer_resource(st->dpy, "delay", "Integer" ); st->cycles = get_integer_resource(st->dpy, "cycles", "Integer" ) * st->iDegreeCount; st->draw_i = 99999999; return st; } static unsigned long shadebobs_draw (Display *dpy, Window window, void *closure) { struct state *st = (struct state *) closure; if( st->draw_i++ >= st->cycles ) { XWindowAttributes XWinAttribs; XGetWindowAttributes( st->dpy, st->window, &XWinAttribs ); st->draw_i = 0; #if 0 memset( st->pImage->data, 0, st->pImage->bytes_per_line * st->pImage->height ); #else { /* fill the image with the actual value of the black pixel, not 0. */ unsigned long black = BlackPixelOfScreen (XWinAttribs.screen); int x, y; for (y = 0; y < XWinAttribs.height; y++) for (x = 0; x < XWinAttribs.width; x++) XPutPixel (st->pImage, x, y, black); } #endif for( st->iShadeBob=0; st->iShadeBobnShadeBobCount; st->iShadeBob++ ) ResetShadeBob( st, &st->aShadeBobs[ st->iShadeBob ] ); XFreeColors( st->dpy, XWinAttribs.colormap, st->aiColorVals, st->iColorCount, 0 ); free( st->aiColorVals ); st->aiColorVals = SetPalette( st ); XClearWindow( st->dpy, st->window ); } for( st->iShadeBob=0; st->iShadeBobnShadeBobCount; st->iShadeBob++ ) Execute( st, &st->aShadeBobs[ st->iShadeBob ] ); return st->delay; } static void shadebobs_reshape (Display *dpy, Window window, void *closure, unsigned int w, unsigned int h) { } static Bool shadebobs_event (Display *dpy, Window window, void *closure, XEvent *event) { return False; } static void shadebobs_free (Display *dpy, Window window, void *closure) { struct state *st = (struct state *) closure; free( st->anSinTable ); free( st->anCosTable ); /* free( st->pImage->data ); */ XDestroyImage( st->pImage ); for( st->iShadeBob=0; st->iShadeBobnShadeBobCount; st->iShadeBob++ ) free( st->aShadeBobs[ st->iShadeBob ].anDeltaMap ); free( st->aShadeBobs ); free( st->aiColorVals ); } XSCREENSAVER_MODULE ("ShadeBobs", shadebobs) /* End of Module - "shadebobs.c" */ /* vim: ts=4 */ xscreensaver-5.36/hacks/xsublim.c000644 000767 000024 00000055211 12701612217 017061 0ustar00jwzstaff000000 000000 /**************************************************************************** * * * xsublim -- Submit. Conform. Obey. * * * * Copyright (c) 1999 - 2000 Greg Knauss (greg@eod.com) * * * * Thanks to Jamie Zawinski, whose suggestions and advice made what was a * * boring little program into a less boring (and a _lot_ less little) * * program. * * * * 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. * * * * Stare into the subliminal for as long as you can... * * * *****************************************************************************/ /* Warnings ******************************************************************* Please don't end this process with a SIGKILL. If it's got the X server grabbed when you do, you'll never get it back and it won't be my fault. */ /* Arguments ****************************************************************** -font font Font to use -file filename New-line delimited phrase file -program executable New-line delimited phrase-producing executable -delayShow ms Microsecs for display of each word -delayWord ms Microsecs for blank between words -delayPhraseMin ms Microsecs for min blank between phrases -delayPhraseMax ms Microsecs for max blank between phrases -random Show phrases in random order (Default) -no-random Show phrases in listed order -screensaver Wait for an active screensaver (Default) -no-screensaver Draw over active windows -outline Draw a contrasting outline around words (Default) -no-outline Draw words without an outline -center Draw words in the center of the screen (Default) -no-center Draw words randomly around the screen */ /* Changelog ****************************************************************** 1.1.1 20000407 Added -program 1.1.0 19991221 Added -file 1.0.1 19990716 Assume that XGetImage()/XDestroyImage() don't leak, which they apparently don't. I have no idea how I convinced myself that they did. Huh. (greg@eod.com) 1.0.0 19990716 Initial release */ /* Defines *******************************************************************/ #define XSUBLIM_NAME "XSublim" #define XSUBLIM_TEXT_COUNT 1000 #define XSUBLIM_TEXT_LENGTH 128 #define XSUBLIM_TEXT_OUTLINE 1 #define XSUBLIM_PROGRAM_SIZE 1024*10 #define XSUBLIM_ARG_DELAYSHOW "delayShow" #define XSUBLIM_ARG_DELAYWORD "delayWord" #define XSUBLIM_ARG_DELAYPHRASEMIN "delayPhraseMin" #define XSUBLIM_ARG_DELAYPHRASEMAX "delayPhraseMax" #define XSUBLIM_ARG_RANDOM "random" #define XSUBLIM_ARG_FILE "file" #define XSUBLIM_ARG_PROGRAM "program" #define XSUBLIM_ARG_SCREENSAVER "screensaver" #define XSUBLIM_ARG_OUTLINE "outline" #define XSUBLIM_ARG_CENTER "center" #define XSUBLIM_ARG_FONT "font" #define XSUBLIM_ARG_PHRASES "phrases" #ifndef TRUE #define FALSE 0 #define TRUE 1 #endif /* Includes ******************************************************************/ #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #if defined(__sgi) #include #endif #include "usleep.h" #include "yarandom.h" #include "resources.h" #include "vroot.h" /* Globals *******************************************************************/ char* progname; char* progclass = XSUBLIM_NAME; # ifdef __GNUC__ __extension__ /* don't warn about "string length is greater than the length ISO C89 compilers are required to support" in the following string constant... */ # endif static char* defaults[] = { ".background: #000000", ".foreground: #FFFFFF", "*" XSUBLIM_ARG_PHRASES ":" "Submit.\\n" "Conform.\\n" "Obey.\\n" "OBEY. OBEY. OBEY.\\n" "Consume.\\n" "Be silent.\\n" "Fear.\\n" "Waste.\\n" "Money.\\n" "Watch TV.\\n" "Hate yourself.\\n" "Buy needlessly.\\n" "Despair quietly.\\n" "God hates you.\\n" "You are being watched.\\n" "You will be punished.\\n" "You serve no purpose.\\n" "Your contributions are ignored.\\n" "They are laughing at you.\\n" "They lied to you.\\n" "They read your mail.\\n" "They know.\\n" "Surrender.\\n" "You will fail.\\n" "Never question.\\n" "You are a prisoner.\\n" "You are helpless.\\n" "You are diseased.\\n" "Fear the unknown.\\n" "Happiness follows obedience.\\n" "Ignorance is strength.\\n" "War is peace.\\n" "Freedom is slavery.\\n" "Abandon all hope.\\n" "You will be assimilated.\\n" "Resistance is futile.\\n" "Resistance is useless.\\n" "Life is pain.\\n" "No escape.\\n" "What's that smell?\\n" "All praise the company.\\n" "Fnord.\\n", "*" XSUBLIM_ARG_FONT ": -*-utopia-*-r-*-*-*-600-*-*-p-*-*-*", "*" XSUBLIM_ARG_DELAYSHOW ": 40000", "*" XSUBLIM_ARG_DELAYWORD ": 100000", "*" XSUBLIM_ARG_DELAYPHRASEMIN ": 5000000", "*" XSUBLIM_ARG_DELAYPHRASEMAX ": 20000000", "*" XSUBLIM_ARG_RANDOM ": true", "*" XSUBLIM_ARG_SCREENSAVER ": true", "*" XSUBLIM_ARG_OUTLINE": true", "*" XSUBLIM_ARG_CENTER": true", NULL }; static XrmOptionDescRec options[] = { {"-" XSUBLIM_ARG_FONT, "." XSUBLIM_ARG_FONT, XrmoptionSepArg,0}, {"-" XSUBLIM_ARG_DELAYSHOW, "." XSUBLIM_ARG_DELAYSHOW, XrmoptionSepArg,0}, {"-" XSUBLIM_ARG_DELAYWORD, "." XSUBLIM_ARG_DELAYWORD, XrmoptionSepArg,0}, {"-" XSUBLIM_ARG_DELAYPHRASEMIN,"." XSUBLIM_ARG_DELAYPHRASEMIN, XrmoptionSepArg,0}, {"-" XSUBLIM_ARG_DELAYPHRASEMAX,"." XSUBLIM_ARG_DELAYPHRASEMAX, XrmoptionSepArg,0}, {"-" XSUBLIM_ARG_RANDOM, "." XSUBLIM_ARG_RANDOM, XrmoptionNoArg,"true"}, {"-no-" XSUBLIM_ARG_RANDOM, "." XSUBLIM_ARG_RANDOM, XrmoptionNoArg,"false"}, {"-" XSUBLIM_ARG_FILE, "." XSUBLIM_ARG_FILE, XrmoptionSepArg,0 }, #if !defined(VMS) {"-" XSUBLIM_ARG_PROGRAM, "." XSUBLIM_ARG_PROGRAM, XrmoptionSepArg,0 }, #endif {"-" XSUBLIM_ARG_SCREENSAVER, "." XSUBLIM_ARG_SCREENSAVER, XrmoptionNoArg,"true"}, {"-no-" XSUBLIM_ARG_SCREENSAVER,"." XSUBLIM_ARG_SCREENSAVER, XrmoptionNoArg,"false"}, {"-" XSUBLIM_ARG_OUTLINE, "." XSUBLIM_ARG_OUTLINE, XrmoptionNoArg,"true"}, {"-no-" XSUBLIM_ARG_OUTLINE, "." XSUBLIM_ARG_OUTLINE, XrmoptionNoArg,"false"}, {"-" XSUBLIM_ARG_CENTER, "." XSUBLIM_ARG_CENTER, XrmoptionNoArg,"true"}, {"-no-" XSUBLIM_ARG_CENTER, "." XSUBLIM_ARG_CENTER, XrmoptionNoArg,"false"}, {NULL, NULL, 0, 0 } }; static int Xsublim_Sig_Last; /* Functions *****************************************************************/ /* Defer signals to protect the server grab ================================ */ static void xsublim_Sig_Catch(int sig_Number) { /* BSD needs this reset each time, and it shouldn't hurt anything else */ signal(sig_Number,xsublim_Sig_Catch); Xsublim_Sig_Last = sig_Number; } /* This was all basically swiped from driver/remote.c and util/vroot.h */ static Window xsublim_Ss_GetWindow(Display* ss_Display) { Screen *s = DefaultScreenOfDisplay (ss_Display); Window root = XRootWindowOfScreen (s); Window vroot = VirtualRootWindowOfScreen (s); if (root == vroot) return 0; else return vroot; } /* Main ==================================================================== */ static XErrorHandler Xsublim_Sh_Handler = NULL; static int Xsublim_Sh_Status = 0; static int xsublim_Sh_Handler(Display* handle_Display, XErrorEvent* handle_Error) { if (handle_Error->error_code == BadMatch) { Xsublim_Sh_Status = BadMatch; return 0; } if (Xsublim_Sh_Handler == NULL) { fprintf(stderr,"%s: ",progname); abort(); } return (*Xsublim_Sh_Handler)(handle_Display,handle_Error); } int main(int argc,char* argv[]) { XtAppContext app; int sig_Number; int sig_Signal[] = { SIGHUP, SIGINT, SIGQUIT, SIGILL, SIGTRAP, #if defined(SIGIOT) SIGIOT, #endif SIGABRT, #if defined(SIGEMT) SIGEMT, #endif SIGFPE, SIGBUS, SIGSEGV, #if defined(SIGSYS) SIGSYS, #endif SIGTERM, #if defined(SIGXCPU) SIGXCPU, #endif #if defined(SIGXFSZ) SIGXFSZ, #endif #if defined(SIGDANGER) SIGDANGER, #endif -1 }; Widget app_App; Display* dpy; Window win_Root; XWindowAttributes attr_Win; XGCValues gc_ValFore; XGCValues gc_ValBack; GC gc_GcFore; GC gc_GcBack; XFontStruct* font_Font; char* font_List[] = { "-*-character-*-r-*-*-*-600-*-*-p-*-*-*", "-*-helvetica-*-r-*-*-*-600-*-*-p-*-*-*", "-*-lucida-*-r-*-*-*-600-*-*-p-*-*-*", "-*-*-*-r-*-sans-*-600-*-*-p-*-*-*", "-*-*-*-r-*-*-*-600-*-*-m-*-*-*", "-*-helvetica-*-r-*-*-*-240-*-*-p-*-*-*", "-*-lucida-*-r-*-*-*-240-*-*-p-*-*-*", "-*-*-*-r-*-sans-*-240-*-*-p-*-*-*", "-*-*-*-r-*-*-*-240-*-*-m-*-*-*", "fixed", NULL }; int font_Index; int text_Length; int text_X; int text_Y; int text_Width; int text_Height; char* text_List[XSUBLIM_TEXT_COUNT]; int text_Used[XSUBLIM_TEXT_COUNT]; char text_Text[XSUBLIM_TEXT_LENGTH+1]; char* text_Phrase; char* text_Word; int text_Index; int text_Item; int text_Count; struct { int outline_X; int outline_Y; } text_Outline[] = { { -1,-1 }, { 1,-1 }, { -1, 1 }, { 1, 1 }, { 0, 0 } }; int text_OutlineIndex; XImage* image_Image = NULL; int image_X = 0; int image_Y = 0; int image_Width = 0; int image_Height = 0; int arg_Count; int arg_FlagCenter; int arg_FlagOutline; int arg_FlagScreensaver; int arg_FlagRandom; int arg_DelayShow; int arg_DelayWord; int arg_DelayPhraseMin; int arg_DelayPhraseMax; char* arg_Text; char* arg_Source; /* Set-up ---------------------------------------------------------- */ /* Catch signals */ Xsublim_Sig_Last = -1; for (sig_Number = 0;sig_Signal[sig_Number] != -1;sig_Number++) { signal(sig_Number,xsublim_Sig_Catch); } /* Randomize -- only need to do this here because this program doesn't use the `screenhack.h' or `lockmore.h' APIs. */ # undef ya_rand_init ya_rand_init (0); /* Handle all the X nonsense */ #if defined(__sgi) SgiUseSchemes("none"); #endif for (arg_Count = 0;options[arg_Count].option != NULL;arg_Count++) { ; } app_App = XtAppInitialize(&app,progclass,options,arg_Count,&argc,argv, defaults,0,0); /* jwz */ if (argc > 1) { int x = 18; int end = 78; int i; int count = (sizeof(options)/sizeof(*options))-1; fprintf(stderr, "Unrecognised option: %s\n", argv[1]); fprintf (stderr, "Options include: "); for (i = 0; i < count; i++) { char *sw = options [i].option; Bool argp = (options [i].argKind == XrmoptionSepArg); int size = strlen (sw) + (argp ? 6 : 0) + 2; if (x + size >= end) { fprintf (stderr, "\n\t\t "); x = 18; } x += size; fprintf (stderr, "%s", sw); if (argp) fprintf (stderr, " "); if (i != count-1) fprintf (stderr, ", "); } fprintf (stderr, ".\n"); exit (-1); } dpy = XtDisplay(app_App); XtGetApplicationNameAndClass(dpy,&progname,&progclass); win_Root = RootWindowOfScreen(XtScreen(app_App)); XtDestroyWidget(app_App); /* Get the arguments */ arg_FlagCenter = get_boolean_resource(dpy, XSUBLIM_ARG_CENTER,"Boolean"); arg_FlagOutline = get_boolean_resource(dpy, XSUBLIM_ARG_OUTLINE,"Boolean"); arg_FlagScreensaver = get_boolean_resource(dpy, XSUBLIM_ARG_SCREENSAVER, "Boolean"); arg_FlagRandom = get_boolean_resource(dpy, XSUBLIM_ARG_RANDOM,"Boolean"); arg_DelayShow = get_integer_resource(dpy, XSUBLIM_ARG_DELAYSHOW,"Integer"); arg_DelayWord = get_integer_resource(dpy, XSUBLIM_ARG_DELAYWORD,"Integer"); arg_DelayPhraseMin = get_integer_resource(dpy, XSUBLIM_ARG_DELAYPHRASEMIN, "Integer"); arg_DelayPhraseMax = get_integer_resource(dpy, XSUBLIM_ARG_DELAYPHRASEMAX, "Integer"); if (arg_DelayPhraseMax < arg_DelayPhraseMin) { arg_DelayPhraseMax = arg_DelayPhraseMin; } /* Get the phrases */ text_Index = 0; text_Item = 0; text_Count = 0; memset(text_Used,0,sizeof(text_Used)); arg_Source = get_string_resource(dpy, XSUBLIM_ARG_FILE,"Filename"); if (arg_Source != NULL) { FILE* file_Fs; struct stat file_Stat; file_Fs = fopen(arg_Source,"rb"); if (file_Fs == NULL) { fprintf(stderr,"%s: Could not open '%s'\n",progname, arg_Source); exit(-1); } if (fstat(fileno(file_Fs),&file_Stat) != 0) { fprintf(stderr,"%s: Could not stat '%s'\n",progname, arg_Source); exit(-1); } arg_Text = calloc(1,file_Stat.st_size+1); if (arg_Text != NULL) { if (fread(arg_Text,file_Stat.st_size,1,file_Fs) != 1) { fprintf(stderr,"%s: Could not read '%s'\n", progname,arg_Source); exit(-1); } } fclose(file_Fs); } else { arg_Source = get_string_resource(dpy, XSUBLIM_ARG_PROGRAM, "Executable"); if (arg_Source != NULL) { char* exe_Command = calloc(1,strlen(arg_Source)+10); FILE* exe_Fs; if (exe_Command == NULL) { fprintf(stderr, "%s: Could not allocate space for '%s'\n", progname,arg_Source); exit(-1); } sprintf(exe_Command,"( %s ) 2>&1",arg_Source); exe_Fs = popen(exe_Command,"r"); if (exe_Fs == NULL) { fprintf(stderr,"%s: Could not run '%s'\n", progname,arg_Source); exit(-1); } arg_Text = calloc(1,XSUBLIM_PROGRAM_SIZE); if (arg_Text != NULL) { if (fread(arg_Text,1,XSUBLIM_PROGRAM_SIZE, exe_Fs) <= 0) { fprintf(stderr, "%s: Could not read output of '%s'\n", progname,arg_Source); exit(-1); } if ( strstr(arg_Text,": not found") || strstr(arg_Text,": Not found") || strstr(arg_Text,": command not found") || strstr(arg_Text,": Command not found")) { fprintf(stderr, "%s: Could not find '%s'\n", progname,arg_Source); exit(-1); } } fclose(exe_Fs); } else { arg_Text = get_string_resource(dpy, XSUBLIM_ARG_PHRASES,"Phrases"); if (arg_Text != NULL) { arg_Text = strdup(arg_Text); } } } if (arg_Text != NULL) { while (((text_Phrase = strtok(arg_Text,"\n")) != NULL) && (text_Count < XSUBLIM_TEXT_COUNT)) { arg_Text = NULL; text_List[text_Count] = text_Phrase; text_Count++; } text_List[text_Count] = NULL; } if (text_Count == 0) { fprintf(stderr,"%s: No text to display\n",progname); exit(-1); } /* Load the font */ font_Font = XLoadQueryFont(dpy, get_string_resource(dpy, XSUBLIM_ARG_FONT,"Font")); font_Index = 0; while ((font_Font == NULL) && (font_List[font_Index] != NULL)) { font_Font = XLoadQueryFont(dpy,font_List[font_Index]); font_Index++; } if (font_Font == NULL) { fprintf(stderr,"%s: Couldn't load a font\n",progname); exit(-1); } /* Create the GCs */ XGetWindowAttributes(dpy,win_Root,&attr_Win); gc_ValFore.font = font_Font->fid; gc_ValFore.foreground = get_pixel_resource(dpy, attr_Win.colormap, "foreground","Foreground"); gc_ValFore.background = get_pixel_resource(dpy, attr_Win.colormap, "background","Background"); gc_ValFore.subwindow_mode = IncludeInferiors; gc_GcFore = XCreateGC(dpy,win_Root, (GCFont|GCForeground|GCBackground|GCSubwindowMode),&gc_ValFore); gc_ValBack.font = font_Font->fid; gc_ValBack.foreground = get_pixel_resource(dpy, attr_Win.colormap, "background","Background"); gc_ValBack.background = get_pixel_resource(dpy, attr_Win.colormap, "foreground","Foreground"); gc_ValBack.subwindow_mode = IncludeInferiors; gc_GcBack = XCreateGC(dpy,win_Root, (GCFont|GCForeground|GCBackground|GCSubwindowMode),&gc_ValBack); /* Loop ------------------------------------------------------------ */ while (Xsublim_Sig_Last == -1) { /* Once-per-phrase stuff ----------------------------------- */ /* If we're waiting for a screensaver... */ if (arg_FlagScreensaver != FALSE) { /* Find the screensaver's window */ win_Root = xsublim_Ss_GetWindow(dpy); if (win_Root == 0) { usleep(30000000); continue; } } /* Pick the next phrase */ if (arg_FlagRandom != FALSE) { text_Item = random()%text_Count; text_Index = 0; } while (text_Used[text_Item] != FALSE) { text_Index++; text_Item++; if (text_Index == text_Count) { text_Index = 0; memset(text_Used,0,sizeof(text_Used)); } if (text_List[text_Item] == NULL) { text_Item = 0; } } text_Used[text_Item] = TRUE; strncpy(text_Text,text_List[text_Item], XSUBLIM_TEXT_LENGTH); text_Phrase = text_Text; /* Run through the phrase */ while (((text_Word = strtok(text_Phrase," \t")) != NULL) && (Xsublim_Sig_Last == -1)) { text_Phrase = NULL; /* Once-per-word stuff ----------------------------- */ /* Find the text's position */ XGetWindowAttributes(dpy,win_Root,&attr_Win); text_Length = strlen(text_Word); text_Width = XTextWidth(font_Font,text_Word, text_Length)+XSUBLIM_TEXT_OUTLINE*2; text_Height = font_Font->ascent+font_Font->descent+1+ XSUBLIM_TEXT_OUTLINE*2; if (arg_FlagCenter == FALSE) { text_X = random()%(attr_Win.width-text_Width); text_Y = random()%(attr_Win.height- text_Height); } else { text_X = (attr_Win.width/2)-(text_Width/2); text_Y = (attr_Win.height/2)-(text_Height/2); } /* Find the image's position (and pad it out slightly, otherwise bits of letter get left behind -- are there boundry issues I don't know about?) */ image_X = text_X-16; image_Y = text_Y; image_Width = text_Width+32; image_Height = text_Height; if (image_X < 0) { image_X = 0; } if (image_Y < 0) { image_Y = 0; } if (image_X+image_Width > attr_Win.width) { image_Width = attr_Win.width-image_X; } if (image_Y+image_Height > attr_Win.height) { image_Height = attr_Win.height-image_Y; } /* Influence people for our own ends --------------- */ /* Grab the server -- we can't let anybody draw over us */ XSync(dpy,FALSE); XGrabServer(dpy); XSync(dpy,FALSE); /* Set up an error handler that ignores BadMatches -- since the screensaver can take its window away at any time, any call that uses it might choke */ Xsublim_Sh_Status = 0; Xsublim_Sh_Handler = XSetErrorHandler(xsublim_Sh_Handler); /* Save the current background */ image_Image = XGetImage(dpy,win_Root,image_X, image_Y,image_Width,image_Height,~0L,ZPixmap); /* If we've successfully saved the background... */ if (image_Image != NULL) { if (Xsublim_Sh_Status == 0) { /* Draw the outline */ if (arg_FlagOutline != FALSE) { for (text_OutlineIndex = 0; text_Outline[ text_OutlineIndex].outline_X != 0;text_OutlineIndex++) { /* Y'know, eight character tabs and descriptive variable names become annoying at some point... */ XDrawString( dpy, win_Root,gc_GcBack, text_X+text_Outline[ text_OutlineIndex]. outline_X* XSUBLIM_TEXT_OUTLINE, text_Y+ (font_Font->ascent)+ text_Outline[ text_OutlineIndex]. outline_Y* XSUBLIM_TEXT_OUTLINE, text_Word, text_Length); } } /* Draw the word */ XDrawString(dpy,win_Root, gc_GcFore,text_X, text_Y+(font_Font->ascent),text_Word, text_Length); } if (Xsublim_Sh_Status == 0) { /* Wait a bit */ XSync(dpy,FALSE); if (Xsublim_Sig_Last == -1) { usleep(arg_DelayShow); } /* Restore the background */ XPutImage(dpy,win_Root, gc_GcFore,image_Image,0,0,image_X, image_Y,image_Width,image_Height); } /* Free the image */ XDestroyImage(image_Image); } /* Restore the error handler, ungrab the server */ XSync(dpy,FALSE); XSetErrorHandler(Xsublim_Sh_Handler); XUngrabServer(dpy); XSync(dpy,FALSE); /* Pause between words */ if (Xsublim_Sig_Last == -1) { usleep(arg_DelayWord); } } /* Pause between phrases */ if (Xsublim_Sig_Last == -1) { usleep(random()%(arg_DelayPhraseMax- arg_DelayPhraseMin+1)+arg_DelayPhraseMin); } } /* Exit ------------------------------------------------------------ */ for (sig_Number = 0;sig_Signal[sig_Number] != -1;sig_Number++) { signal(sig_Number,SIG_DFL); } kill(getpid(),Xsublim_Sig_Last); return 0; } xscreensaver-5.36/hacks/ccurve.c000644 000767 000024 00000055741 12710314176 016700 0ustar00jwzstaff000000 000000 /* ccurve, Copyright (c) 1998, 1999 * Rick Campbell * * 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. * */ /* Draw self-similar linear fractals including the classic ``C Curve'' * * 16 Aug 1999 Rick Campbell * Eliminated sub-windows-with-backing-store-double-buffering crap in * favor of drawing the new image in a pixmap and then splatting that on * the window. * * 19 Dec 1998 Rick Campbell * Original version. */ #include #include #include #include #include #include "screenhack.h" #include "colors.h" #include "erase.h" #define SQRT3 (1.73205080756887729353) #define MAXIMUM_COLOR_COUNT (256) #define EPSILON (1e-5) typedef struct Position_struct { double x; double y; } Position; typedef struct Segment_struct { double angle; double length; } Segment; struct state { Display *dpy; Window window; int color_count; int color_index; Colormap color_map; XColor colors [MAXIMUM_COLOR_COUNT]; int line_count; int maximum_lines; double plot_maximum_x; double plot_maximum_y; double plot_minimum_x; double plot_minimum_y; int total_lines; unsigned long int background; GC context; Pixmap pixmap; int width; int height; float delay; float delay2; int draw_index; int draw_iterations; double draw_maximum_x; double draw_maximum_y; double draw_minimum_x; double draw_minimum_y; int draw_segment_count; Segment* draw_segments; double draw_x1; double draw_y1; double draw_x2; double draw_y2; }; /* normalize alters the sequence to go from (0,0) to (1,0) */ static void normalized_plot (int segment_count, Segment* segments, Position* points) { double angle = 0.0; double cosine = 0.0; int index = 0; double length = 0.0; double sine = 0.0; double x = 0.0; double y = 0.0; for (index = 0; index < segment_count; ++index) { Segment* segment = segments + index; double length = segment->length; double angle = segment->angle; x += length * cos (angle); y += length * sin (angle); points [index].x = x; points [index].y = y; } angle = -(atan2 (y, x)); cosine = cos (angle); sine = sin (angle); length = sqrt ((x * x) + (y * y)); /* rotate and scale */ for (index = 0; index < segment_count; ++index) { double temp_x = points [index].x; double temp_y = points [index].y; points [index].x = ((temp_x * cosine) + (temp_y * (-sine))) / length; points [index].y = ((temp_x * sine) + (temp_y * cosine)) / length; } } static void copy_points (int segment_count, Position* source, Position* target) { int index = 0; for (index = 0; index < segment_count; ++index) { target [index] = source [index]; } } static void realign (double x1, double y1, double x2, double y2, int segment_count, Position* points) { double angle = 0.0; double cosine = 0.0; double delta_x = 0.0; double delta_y = 0.0; int index = 0; double length = 0.0; double sine = 0.0; delta_x = x2 - x1; delta_y = y2 - y1; angle = atan2 (delta_y, delta_x); cosine = cos (angle); sine = sin (angle); length = sqrt ((delta_x * delta_x) + (delta_y * delta_y)); /* rotate, scale, then shift */ for (index = 0; index < segment_count; ++index) { double temp_x = points [index].x; double temp_y = points [index].y; points [index].x = (length * ((temp_x * cosine) + (temp_y * (-sine)))) + x1; points [index].y = (length * ((temp_x * sine) + (temp_y * cosine))) + y1; } } static Bool self_similar_normalized (struct state *st, int iterations, double x1, double y1, double x2, double y2, double maximum_x, double maximum_y, double minimum_x, double minimum_y, int segment_count, Position* points) { if (iterations == 0) { double delta_x = maximum_x - minimum_x; double delta_y = maximum_y - minimum_y; st->color_index = (int)(((double)(st->line_count * st->color_count)) / ((double)st->total_lines)); ++st->line_count; XSetForeground (st->dpy, st->context, st->colors [st->color_index].pixel); if (st->plot_maximum_x < x1) st->plot_maximum_x = x1; if (st->plot_maximum_x < x2) st->plot_maximum_x = x2; if (st->plot_maximum_y < y1) st->plot_maximum_y = y1; if (st->plot_maximum_y < y2) st->plot_maximum_y = y2; if (st->plot_minimum_x > x1) st->plot_minimum_x = x1; if (st->plot_minimum_x > x2) st->plot_minimum_x = x2; if (st->plot_minimum_y > y1) st->plot_minimum_y = y1; if (st->plot_minimum_y > y2) st->plot_minimum_y = y2; XDrawLine (st->dpy, st->pixmap, st->context, (int)(((x1 - minimum_x) / delta_x) * st->width), (int)(((maximum_y - y1) / delta_y) * st->height), (int)(((x2 - minimum_x) / delta_x) * st->width), (int)(((maximum_y - y2) / delta_y) * st->height)); } else { int index = 0; double next_x = 0.0; double next_y = 0.0; Position* replacement = (Position*)NULL; double x = 0.0; double y = 0.0; replacement = (Position*)(malloc (segment_count * sizeof (Segment))); copy_points (segment_count, points, replacement); assert (fabs ((replacement [segment_count - 1].x) - 1.0) < EPSILON); assert (fabs (replacement [segment_count - 1].y) < EPSILON); realign (x1, y1, x2, y2, segment_count, replacement); /* jwz: I don't understand what these assertions are supposed to be detecting, but let's just bail on the fractal instead of crashing. */ /* assert (fabs (x2 - (replacement [segment_count - 1].x)) < EPSILON); assert (fabs (y2 - (replacement [segment_count - 1].y)) < EPSILON);*/ if (fabs (x2 - (replacement [segment_count - 1].x)) >= EPSILON || fabs (y2 - (replacement [segment_count - 1].y)) >= EPSILON) { free (replacement); return False; } x = x1; y = y1; for (index = 0; index < segment_count; ++index) { next_x = replacement [index].x; next_y = replacement [index].y; if (!self_similar_normalized (st, iterations - 1, x, y, next_x, next_y, maximum_x, maximum_y, minimum_x, minimum_y, segment_count, points)) { free(replacement); return False; } x = next_x; y = next_y; } free(replacement); } return True; } static void self_similar (struct state *st, Pixmap pixmap, GC context, int width, int height, int iterations, double x1, double y1, double x2, double y2, double maximum_x, double maximum_y, double minimum_x, double minimum_y, int segment_count, Segment* segments) { Position* points = (Position*)NULL; points = (Position*)(malloc (segment_count * sizeof (Position))); normalized_plot (segment_count, segments, points); assert (fabs ((points [segment_count - 1].x) - 1.0) < EPSILON); assert (fabs (points [segment_count - 1].y) < EPSILON); self_similar_normalized (st, iterations, x1, y1, x2, y2, maximum_x, maximum_y, minimum_x, minimum_y, segment_count, points); free((void*)points); } static double random_double (double base, double limit, double epsilon) { double range = 0.0; unsigned int steps = 0; assert (base < limit); assert (epsilon > 0.0); range = limit - base; steps = (unsigned int)(floor (range / epsilon)); return base + ((random () % steps) * epsilon); } static void select_2_pattern (Segment* segments) { if ((random () % 2) == 0) { if ((random () % 2) == 0) { segments [0].angle = -M_PI_4; segments [0].length = M_SQRT2; segments [1].angle = M_PI_4; segments [1].length = M_SQRT2; } else { segments [0].angle = M_PI_4; segments [0].length = M_SQRT2; segments [1].angle = -M_PI_4; segments [1].length = M_SQRT2; } } else { segments [0].angle = random_double (M_PI / 6.0, M_PI / 3.0, M_PI / 180.0); segments [0].length = random_double (0.25, 0.67, 0.001); if ((random () % 2) == 0) { segments [1].angle = -(segments [0].angle); segments [1].length = segments [0].length; } else { segments [1].angle = random_double ((-M_PI) / 3.0, (-M_PI) / 6.0, M_PI / 180.0); segments [1].length = random_double (0.25, 0.67, 0.001); } } } static void select_3_pattern (Segment* segments) { switch (random () % 5) { case 0: if ((random () % 2) == 0) { segments [0].angle = M_PI_4; segments [0].length = M_SQRT2 / 4.0; segments [1].angle = -M_PI_4; segments [1].length = M_SQRT2 / 2.0; segments [2].angle = M_PI_4; segments [2].length = M_SQRT2 / 4.0; } else { segments [0].angle = -M_PI_4; segments [0].length = M_SQRT2 / 4.0; segments [1].angle = M_PI_4; segments [1].length = M_SQRT2 / 2.0; segments [2].angle = -M_PI_4; segments [2].length = M_SQRT2 / 4.0; } break; case 1: if ((random () % 2) == 0) { segments [0].angle = M_PI / 6.0; segments [0].length = 1.0; segments [1].angle = -M_PI_2; segments [1].length = 1.0; segments [2].angle = M_PI / 6.0; segments [2].length = 1.0; } else { segments [0].angle = -M_PI / 6.0; segments [0].length = 1.0; segments [1].angle = M_PI_2; segments [1].length = 1.0; segments [2].angle = -M_PI / 6.0; segments [2].length = 1.0; } break; case 2: case 3: case 4: segments [0].angle = random_double (M_PI / 6.0, M_PI / 3.0, M_PI / 180.0); segments [0].length = random_double (0.25, 0.67, 0.001); segments [1].angle = random_double (-M_PI / 3.0, -M_PI / 6.0, M_PI / 180.0); segments [1].length = random_double (0.25, 0.67, 0.001); if ((random () % 3) == 0) { if ((random () % 2) == 0) { segments [2].angle = segments [0].angle; } else { segments [2].angle = -(segments [0].angle); } segments [2].length = segments [0].length; } else { segments [2].angle = random_double (-M_PI / 3.0, -M_PI / 6.0, M_PI / 180.0); segments [2].length = random_double (0.25, 0.67, 0.001); } break; } } static void select_4_pattern (Segment* segments) { switch (random () % 9) { case 0: if ((random () % 2) == 0) { double length = random_double (0.25, 0.50, 0.001); segments [0].angle = 0.0; segments [0].length = 0.5; segments [1].angle = M_PI_2; segments [1].length = length; segments [2].angle = -M_PI_2; segments [2].length = length; segments [3].angle = 0.0; segments [3].length = 0.5; } else { double length = random_double (0.25, 0.50, 0.001); segments [0].angle = 0.0; segments [0].length = 0.5; segments [1].angle = -M_PI_2; segments [1].length = length; segments [2].angle = M_PI_2; segments [2].length = length; segments [3].angle = 0.0; segments [3].length = 0.5; } break; case 1: if ((random () % 2) == 0) { segments [0].angle = 0.0; segments [0].length = 0.5; segments [1].angle = M_PI_2; segments [1].length = 0.45; segments [2].angle = -M_PI_2; segments [2].length = 0.45; segments [3].angle = 0.0; segments [3].length = 0.5; } else { segments [0].angle = 0.0; segments [0].length = 0.5; segments [1].angle = -M_PI_2; segments [1].length = 0.45; segments [2].angle = M_PI_2; segments [2].length = 0.45; segments [3].angle = 0.0; segments [3].length = 0.5; } break; case 2: if ((random () % 2) == 0) { segments [0].angle = 0.0; segments [0].length = 1.0; segments [1].angle = (5.0 * M_PI) / 12.0; segments [1].length = 1.2; segments [2].angle = (-5.0 * M_PI) / 12.0; segments [2].length = 1.2; segments [3].angle = 0.0; segments [3].length = 1.0; } else { segments [0].angle = 0.0; segments [0].length = 1.0; segments [1].angle = (-5.0 * M_PI) / 12.0; segments [1].length = 1.2; segments [2].angle = (5.0 * M_PI) / 12.0; segments [2].length = 1.2; segments [3].angle = 0.0; segments [3].length = 1.0; } break; case 3: if ((random () % 2) == 0) { double angle = random_double (M_PI / 4.0, M_PI_2, M_PI / 180.0); segments [0].angle = 0.0; segments [0].length = 1.0; segments [1].angle = angle; segments [1].length = 1.2; segments [2].angle = (-angle); segments [2].length = 1.2; segments [3].angle = 0.0; segments [3].length = 1.0; } else { double angle = random_double (M_PI / 4.0, M_PI_2, M_PI / 180.0); segments [0].angle = 0.0; segments [0].length = 1.0; segments [1].angle = (-angle); segments [1].length = 1.2; segments [2].angle = angle; segments [2].length = 1.2; segments [3].angle = 0.0; segments [3].length = 1.0; } break; case 4: if ((random () % 2) == 0) { double angle = random_double (M_PI / 4.0, M_PI_2, M_PI / 180.0); segments [0].angle = 0.0; segments [0].length = 1.0; segments [1].angle = angle; segments [1].length = 1.2; segments [2].angle = (-angle); segments [2].length = 1.2; segments [3].angle = 0.0; segments [3].length = 1.0; } else { double angle = random_double (M_PI / 4.0, M_PI_2, M_PI / 180.0); segments [0].angle = 0.0; segments [0].length = 1.0; segments [1].angle = (-angle); segments [1].length = 1.2; segments [2].angle = angle; segments [2].length = 1.2; segments [3].angle = 0.0; segments [3].length = 1.0; } break; case 5: if ((random () % 2) == 0) { double angle = random_double (M_PI / 4.0, M_PI_2, M_PI / 180.0); double length = random_double (0.25, 0.50, 0.001); segments [0].angle = 0.0; segments [0].length = 1.0; segments [1].angle = angle; segments [1].length = length; segments [2].angle = (-angle); segments [2].length = length; segments [3].angle = 0.0; segments [3].length = 1.0; } else { double angle = random_double (M_PI / 4.0, M_PI_2, M_PI / 180.0); double length = random_double (0.25, 0.50, 0.001); segments [0].angle = 0.0; segments [0].length = 1.0; segments [1].angle = (-angle); segments [1].length = length; segments [2].angle = angle; segments [2].length = length; segments [3].angle = 0.0; segments [3].length = 1.0; } break; case 6: case 7: case 8: segments [0].angle = random_double (M_PI / 12.0, (11.0 * M_PI) / 12.0, 0.001); segments [0].length = random_double (0.25, 0.50, 0.001); segments [1].angle = random_double (M_PI / 12.0, (11.0 * M_PI) / 12.0, 0.001); segments [1].length = random_double (0.25, 0.50, 0.001); if ((random () % 3) == 0) { segments [2].angle = random_double (M_PI / 12.0, (11.0 * M_PI) / 12.0, 0.001); segments [2].length = random_double (0.25, 0.50, 0.001); segments [3].angle = random_double (M_PI / 12.0, (11.0 * M_PI) / 12.0, 0.001); segments [3].length = random_double (0.25, 0.50, 0.001); } else { if ((random () % 2) == 0) { segments [2].angle = -(segments [1].angle); segments [2].length = segments [1].length; segments [3].angle = -(segments [0].angle); segments [3].length = segments [0].length; } else { segments [2].angle = segments [1].angle; segments [2].length = segments [1].length; segments [3].angle = segments [0].angle; segments [3].length = segments [0].length; } } break; } } static void select_pattern (int segment_count, Segment* segments) { switch (segment_count) { case 2: select_2_pattern (segments); break; case 3: select_3_pattern (segments); break; case 4: select_4_pattern (segments); break; default: fprintf (stderr, "\nBad segment count, must be 2, 3, or 4.\n"); exit (1); } } #define Y_START (0.5) static void * ccurve_init (Display *dpy, Window window) { struct state *st = (struct state *) calloc (1, sizeof(*st)); unsigned long int black = 0; int depth = 0; XWindowAttributes hack_attributes; XGCValues values; unsigned long int white = 0; st->dpy = dpy; st->window = window; st->delay = get_float_resource (st->dpy, "delay", "Integer"); st->delay2 = get_float_resource (st->dpy, "pause", "Integer"); st->maximum_lines = get_integer_resource (st->dpy, "limit", "Integer"); black = BlackPixel (st->dpy, DefaultScreen (st->dpy)); white = WhitePixel (st->dpy, DefaultScreen (st->dpy)); st->background = black; XGetWindowAttributes (st->dpy, st->window, &hack_attributes); st->width = hack_attributes.width; st->height = hack_attributes.height; depth = hack_attributes.depth; st->color_map = hack_attributes.colormap; st->pixmap = XCreatePixmap (st->dpy, st->window, st->width, st->height, depth); values.foreground = white; values.background = black; st->context = XCreateGC (st->dpy, st->window, GCForeground | GCBackground, &values); st->color_count = MAXIMUM_COLOR_COUNT; make_color_loop (hack_attributes.screen, hack_attributes.visual, st->color_map, 0, 1, 1, 120, 1, 1, 240, 1, 1, st->colors, &st->color_count, True, False); if (st->color_count <= 0) { st->color_count = 1; st->colors [0].red = st->colors [0].green = st->colors [0].blue = 0xFFFF; XAllocColor (st->dpy, st->color_map, &st->colors [0]); } st->draw_maximum_x = 1.20; st->draw_maximum_y = 0.525; st->draw_minimum_x = -0.20; st->draw_minimum_y = -0.525; st->draw_x2 = 1.0; return st; } static unsigned long ccurve_draw (Display *dpy, Window window, void *closure) { struct state *st = (struct state *) closure; static const int lengths [] = { 4, 4, 4, 4, 4, 3, 3, 3, 2 }; if (st->draw_index == 0) { st->draw_segment_count = lengths [random () % (sizeof (lengths) / sizeof (int))]; st->draw_segments = (Segment*)(malloc ((st->draw_segment_count) * sizeof (Segment))); select_pattern (st->draw_segment_count, st->draw_segments); st->draw_iterations = floor (log (st->maximum_lines) / log (((double)(st->draw_segment_count)))); if ((random () % 3) != 0) { double factor = 0.45; st->draw_x1 += random_double (-factor, factor, 0.001); st->draw_y1 += random_double (-factor, factor, 0.001); st->draw_x2 += random_double (-factor, factor, 0.001); st->draw_y2 += random_double (-factor, factor, 0.001); } /* background = (random () % 2) ? black : white; */ } /* for (st->draw_index = 0; st->draw_index < st->draw_iterations; ++st->draw_index) */ { double delta_x = 0.0; double delta_y = 0.0; XSetForeground (st->dpy, st->context, st->background); XFillRectangle (st->dpy, st->pixmap, st->context, 0, 0, st->width, st->height); st->line_count = 0; st->total_lines = (int)(pow ((double)(st->draw_segment_count), (double)st->draw_index)); st->plot_maximum_x = -1000.00; st->plot_maximum_y = -1000.00; st->plot_minimum_x = 1000.00; st->plot_minimum_y = 1000.00; self_similar (st, st->pixmap, st->context, st->width, st->height, st->draw_index, st->draw_x1, st->draw_y1, st->draw_x2, st->draw_y2, st->draw_maximum_x, st->draw_maximum_y, st->draw_minimum_x, st->draw_minimum_y, st->draw_segment_count, st->draw_segments); delta_x = st->plot_maximum_x - st->plot_minimum_x; delta_y = st->plot_maximum_y - st->plot_minimum_y; st->draw_maximum_x = st->plot_maximum_x + (delta_x * 0.2); st->draw_maximum_y = st->plot_maximum_y + (delta_y * 0.2); st->draw_minimum_x = st->plot_minimum_x - (delta_x * 0.2); st->draw_minimum_y = st->plot_minimum_y - (delta_y * 0.2); delta_x = st->draw_maximum_x - st->draw_minimum_x; delta_y = st->draw_maximum_y - st->draw_minimum_y; if ((delta_y / delta_x) > (((double)st->height) / ((double)st->width))) { double new_delta_x = (delta_y * ((double)st->width)) / ((double)st->height); st->draw_minimum_x -= (new_delta_x - delta_x) / 2.0; st->draw_maximum_x += (new_delta_x - delta_x) / 2.0; } else { double new_delta_y = (delta_x * ((double)st->height)) / ((double)st->width); st->draw_minimum_y -= (new_delta_y - delta_y) / 2.0; st->draw_maximum_y += (new_delta_y - delta_y) / 2.0; } XCopyArea (st->dpy, st->pixmap, st->window, st->context, 0, 0, st->width, st->height, 0, 0); } st->draw_index++; /* #### mi->recursion_depth = st->draw_index; */ if (st->draw_index >= st->draw_iterations) { st->draw_index = 0; free((void*)st->draw_segments); st->draw_segments = 0; return (int) (1000000 * st->delay); } else return (int) (1000000 * st->delay2); } 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 ccurve_event (Display *dpy, Window window, void *closure, XEvent *event) { struct state *st = (struct state *) closure; if (screenhack_event_helper (dpy, window, event)) { st->draw_index = 0; return True; } return False; } static void ccurve_free (Display *dpy, Window window, void *closure) { } static const char *ccurve_defaults [] = { ".background: black", ".foreground: white", ".delay: 3", ".pause: 0.4", ".limit: 200000", #ifdef HAVE_MOBILE "*ignoreRotation: True", #endif 0 }; static XrmOptionDescRec ccurve_options [] = { { "-delay", ".delay", XrmoptionSepArg, 0 }, { "-pause", ".pause", XrmoptionSepArg, 0 }, { "-limit", ".limit", XrmoptionSepArg, 0 }, { 0, 0, 0, 0 } }; XSCREENSAVER_MODULE ("CCurve", ccurve) xscreensaver-5.36/hacks/blaster.c000644 000767 000024 00000126540 12717745741 017056 0ustar00jwzstaff000000 000000 /* -*- mode: C; tab-width: 2 -*- * blaster, Copyright (c) 1999 Jonathan H. Lin * * 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. * * Robots that move randomly and shoot lasers at each other. If the * mothership is active, it will fly back and forth horizontally, * firing 8 lasers in the 8 cardinal directions. The explosions are * a 20 frame animation. Robots regenerate after the explosion is finished * and all of its lasers have left the screen. */ #include #include #include #include "screenhack.h" struct laser_state { int active; int start_x,start_y; int end_x, end_y; }; struct robot_state { int alive; int death; int move_style; int target; int old_x, old_y; int new_x, new_y; int radius; GC robot_color; GC laser_color; struct laser_state *lasers; }; struct mother_ship_state { int active; int death; int old_x,new_x; int y; GC ship_color; GC laser_color; struct laser_state *lasers; }; struct state { Display *dpy; Window window; GC r_color0, r_color1, r_color2, r_color3, r_color4, r_color5, l_color0, l_color1; GC s_color; GC black; int delay; int NUM_ROBOTS; int NUM_LASERS; int MOTHER_SHIP; int MOTHER_SHIP_WIDTH; int MOTHER_SHIP_HEIGHT; int MOTHER_SHIP_LASER; int MOTHER_SHIP_PERIOD; int MOTHER_SHIP_HITS; int LINE_MOVE_STYLE; int RANDOM_MOVE_STYLE; int NUM_MOVE_STYLES; int EXPLODE_SIZE_1; int EXPLODE_SIZE_2; int EXPLODE_SIZE_3; GC EXPLODE_COLOR_1; GC EXPLODE_COLOR_2; XArc *stars; int NUM_STARS; int MOVE_STARS; int MOVE_STARS_X; int MOVE_STARS_Y; int MOVE_STARS_RANDOM; struct mother_ship_state *mother; struct robot_state *robots; XWindowAttributes xgwa; int initted; int draw_x; int draw_y; int draw_z; }; /* creates a new robot. It starts out on one of the edges somewhere and has no initial velocity. A target is randomly picked. */ static void make_new_robot(struct state *st, int index) { int laser_check = 0; int x=0; for(x=0;xNUM_LASERS;x++) { if(st->robots[index].lasers[x].active) { x=st->NUM_LASERS; laser_check = 1; } } if(laser_check==0) { st->robots[index].alive=1; st->robots[index].radius = 7+(random()%7); st->robots[index].move_style = random()%st->NUM_MOVE_STYLES; if(random()%2==0) { st->robots[index].new_x=random()%(st->xgwa.width-st->robots[index].radius); st->robots[index].old_x=st->robots[index].new_x; if(random()%2==0) { st->robots[index].new_y=0; st->robots[index].old_y=0; } else { st->robots[index].new_y=st->xgwa.height-st->robots[index].radius; st->robots[index].old_y = st->robots[index].new_y; } } else { st->robots[index].new_y=random()%(st->xgwa.height-st->robots[index].radius); st->robots[index].old_y = st->robots[index].new_y; if(random()%2) { st->robots[index].new_x=0; st->robots[index].old_x=0; } else { st->robots[index].new_x=st->xgwa.width-st->robots[index].radius; st->robots[index].old_x=st->robots[index].new_x; } } x=random()%6; if(x==0) { st->robots[index].robot_color = st->r_color0; } else if(x==1) { st->robots[index].robot_color = st->r_color1; } else if(x==2) { st->robots[index].robot_color = st->r_color2; } else if(x==3) { st->robots[index].robot_color = st->r_color3; } else if(x==4) { st->robots[index].robot_color = st->r_color4; } else if(x==5) { st->robots[index].robot_color = st->r_color5; } if(random()%2==0) { st->robots[index].laser_color = st->l_color0; } else { st->robots[index].laser_color = st->l_color1; } if(st->NUM_ROBOTS>1) { st->robots[index].target = random()%st->NUM_ROBOTS; while(st->robots[index].target==index) { st->robots[index].target = random()%st->NUM_ROBOTS; } } } } /* moves each robot, randomly changing its direction and velocity. At random a laser is shot toward that robot's target. Also at random the target can change. */ static void move_robots(struct state *st) { int x=0; int y=0; int dx=0; int dy=0; int target_x = 0; int target_y = 0; double slope = 0; for(x=0;xNUM_ROBOTS;x++) { if(st->robots[x].alive) { if((st->robots[x].new_x == st->robots[x].old_x) && (st->robots[x].new_y == st->robots[x].old_y)) { if(st->robots[x].new_x==0) { st->robots[x].old_x = -((random()%3)+1); } else { st->robots[x].old_x = st->robots[x].old_x + (random()%3)+1; } if(st->robots[x].new_y==0) { st->robots[x].old_y = -((random()%3)+1); } else { st->robots[x].old_y = st->robots[x].old_y + (random()%3)+1; } } if(st->robots[x].move_style==st->LINE_MOVE_STYLE) { dx = st->robots[x].new_x - st->robots[x].old_x; dy = st->robots[x].new_y - st->robots[x].old_y; if(dx > 3) { dx = 3; } else if(dx < -3) { dx = -3; } if(dy > 3) { dy = 3; } else if(dy < -3) { dy = -3; } st->robots[x].old_x = st->robots[x].new_x; st->robots[x].old_y = st->robots[x].new_y; st->robots[x].new_x = st->robots[x].new_x + dx; st->robots[x].new_y = st->robots[x].new_y + dy; } else if(st->robots[x].move_style==st->RANDOM_MOVE_STYLE) { dx = st->robots[x].new_x - st->robots[x].old_x; dy = st->robots[x].new_y - st->robots[x].old_y; y=random()%3; if(y==0) { dx = dx - ((random()%7)+1); } else if(y==1){ dx = dx + ((random()%7)+1); } else { dx = (-1)*dx; } if(dx > 3) { dx = 3; } else if(dx < -3) { dx = -3; } y = random()%3; if(y==0) { dy = dy - ((random()%7)+1); } else if(y==1){ dy = dy + ((random()%7)+1); } else { dx = (-1)*dx; } if(dy > 3) { dy = 3; } else if(dy < -3) { dy = -3; } st->robots[x].old_x = st->robots[x].new_x; st->robots[x].old_y = st->robots[x].new_y; st->robots[x].new_x = st->robots[x].new_x + dx; st->robots[x].new_y = st->robots[x].new_y + dy; } /* bounds corrections */ if(st->robots[x].new_x >= st->xgwa.width-st->robots[x].radius) { st->robots[x].new_x = st->xgwa.width - st->robots[x].radius; } else if(st->robots[x].new_x < 0) { st->robots[x].new_x = 0; } if(st->robots[x].new_y >= st->xgwa.height-st->robots[x].radius) { st->robots[x].new_y = st->xgwa.height - st->robots[x].radius; } else if(st->robots[x].new_y < 0) { st->robots[x].new_y = 0; } if(random()%10==0) { st->robots[x].move_style = 1; } else { st->robots[x].move_style = 0; } if(st->NUM_ROBOTS>1) { if(random()%2==0) { if(random()%200==0) { st->robots[x].target = random()%st->NUM_ROBOTS; while(st->robots[x].target==x) { st->robots[x].target = random()%st->NUM_ROBOTS; } for(y=0;yNUM_LASERS;y++) { if(st->robots[x].lasers[y].active == 0) { st->robots[x].lasers[y].active = 1; if(random()%2==0) { if(random()%2==0) { st->robots[x].lasers[y].start_x = st->robots[x].new_x+st->robots[x].radius; st->robots[x].lasers[y].start_y = st->robots[x].new_y+st->robots[x].radius; st->robots[x].lasers[y].end_x = st->robots[x].lasers[y].start_x+7; st->robots[x].lasers[y].end_y = st->robots[x].lasers[y].start_y+7; } else { st->robots[x].lasers[y].start_x = st->robots[x].new_x-st->robots[x].radius; st->robots[x].lasers[y].start_y = st->robots[x].new_y+st->robots[x].radius; st->robots[x].lasers[y].end_x = st->robots[x].lasers[y].start_x-7; st->robots[x].lasers[y].end_y = st->robots[x].lasers[y].start_y+7; } } else { if(random()%2==0) { st->robots[x].lasers[y].start_x = st->robots[x].new_x-st->robots[x].radius; st->robots[x].lasers[y].start_y = st->robots[x].new_y-st->robots[x].radius; st->robots[x].lasers[y].end_x = st->robots[x].lasers[y].start_x-7; st->robots[x].lasers[y].end_y = st->robots[x].lasers[y].start_y-7; } else { st->robots[x].lasers[y].start_x = st->robots[x].new_x+st->robots[x].radius; st->robots[x].lasers[y].start_y = st->robots[x].new_y-st->robots[x].radius; st->robots[x].lasers[y].end_x = st->robots[x].lasers[y].start_x+7; st->robots[x].lasers[y].end_y = st->robots[x].lasers[y].start_y-7; } } y = st->NUM_LASERS; } } } else { for(y=0;yNUM_LASERS;y++) { if(st->robots[x].lasers[y].active==0) { target_x = st->robots[st->robots[x].target].new_x; target_y = st->robots[st->robots[x].target].new_y; if((target_x-st->robots[x].new_x)!=0) { slope = ((double)target_y-st->robots[x].new_y)/((double)(target_x-st->robots[x].new_x)); if((slope<1) && (slope>-1)) { if(target_x>st->robots[x].new_x) { st->robots[x].lasers[y].start_x = st->robots[x].radius; st->robots[x].lasers[y].end_x = st->robots[x].lasers[y].start_x + 7; } else { st->robots[x].lasers[y].start_x = -st->robots[x].radius; st->robots[x].lasers[y].end_x = st->robots[x].lasers[y].start_x - 7; } st->robots[x].lasers[y].start_y = (int)(st->robots[x].lasers[y].start_x * slope); st->robots[x].lasers[y].end_y = (int)(st->robots[x].lasers[y].end_x * slope); } else { slope = (target_x-st->robots[x].new_x)/(target_y-st->robots[x].new_y); if(target_y>st->robots[x].new_y) { st->robots[x].lasers[y].start_y = st->robots[x].radius; st->robots[x].lasers[y].end_y = st->robots[x].lasers[y].start_y + 7; } else { st->robots[x].lasers[y].start_y = -st->robots[x].radius; st->robots[x].lasers[y].end_y = st->robots[x].lasers[y].start_y - 7; } st->robots[x].lasers[y].start_x = (int)(st->robots[x].lasers[y].start_y * slope);; st->robots[x].lasers[y].end_x = (int)(st->robots[x].lasers[y].end_y * slope); } st->robots[x].lasers[y].start_x = st->robots[x].lasers[y].start_x + st->robots[x].new_x; st->robots[x].lasers[y].start_y = st->robots[x].lasers[y].start_y + st->robots[x].new_y; st->robots[x].lasers[y].end_x = st->robots[x].lasers[y].end_x + st->robots[x].new_x; st->robots[x].lasers[y].end_y = st->robots[x].lasers[y].end_y + st->robots[x].new_y; } else { if(target_y > st->robots[x].new_y) { st->robots[x].lasers[y].start_x = st->robots[x].new_x; st->robots[x].lasers[y].start_y = st->robots[x].new_y+st->robots[x].radius; st->robots[x].lasers[y].end_x = st->robots[x].new_x; st->robots[x].lasers[y].end_y = st->robots[x].lasers[y].start_y+7; } else { st->robots[x].lasers[y].start_x = st->robots[x].new_x; st->robots[x].lasers[y].start_y = st->robots[x].new_y-st->robots[x].radius; st->robots[x].lasers[y].end_x = st->robots[x].new_x; st->robots[x].lasers[y].end_y = st->robots[x].lasers[y].start_y-7; } } if((((st->robots[x].lasers[y].start_x - st->robots[x].lasers[y].end_x) > 7) || ((st->robots[x].lasers[y].end_x - st->robots[x].lasers[y].start_x) > 7)) && (((st->robots[x].lasers[y].start_y - st->robots[x].lasers[y].end_y) > 7) || ((st->robots[x].lasers[y].end_y - st->robots[x].lasers[y].start_y) > 7))) { } else { st->robots[x].lasers[y].active = 1; y = st->NUM_LASERS; } } } } } } } else { if(st->robots[x].death==0) { make_new_robot(st,x); } } } } /* This moves a single laser one frame. collisions with other robots or the mothership is checked. */ static void move_laser(struct state *st, int rindex, int index) { int x=0; int y=0; int z=0; int dx=0; int dy=0; struct laser_state *laser; if(rindex>=0) { laser = st->robots[rindex].lasers; } else { laser = st->mother->lasers; } if(laser[index].active) { /* collision with other robots are checked here */ for(x=0;xNUM_ROBOTS;x++) { if(x!=rindex) { if(st->robots[x].alive) { y = laser[index].start_x-st->robots[x].new_x; if(y<0) { y = st->robots[x].new_x-laser[index].start_x; } z = laser[index].start_y-st->robots[x].new_y; if(z<0) { z = st->robots[x].new_y-laser[index].start_y; } if((zrobots[x].radius-1)&&(yrobots[x].radius-1)) { st->robots[x].alive = 0; st->robots[x].death = 20; if (st->black) XFillArc(st->dpy, st->window, st->black, st->robots[x].old_x, st->robots[x].old_y, st->robots[x].radius, st->robots[x].radius, 0, 360*64); if (st->black) XFillArc(st->dpy, st->window, st->black, st->robots[x].new_x, st->robots[x].new_y, st->robots[x].radius, st->robots[x].radius, 0, 360*64); laser[index].active = 0; x = st->NUM_ROBOTS; } else { y = laser[index].end_x-st->robots[x].new_x; if(y<0) { y = st->robots[x].new_x-laser[index].end_x; } z = laser[index].end_y-st->robots[x].new_y; if(z<0) { z = st->robots[x].new_y-laser[index].end_y; } if((zrobots[x].radius-1)&&(yrobots[x].radius-1)) { st->robots[x].alive = 0; st->robots[x].death = 20; if (st->black) XFillArc(st->dpy, st->window, st->black, st->robots[x].old_x, st->robots[x].old_y, st->robots[x].radius, st->robots[x].radius, 0, 360*64); if (st->black) XFillArc(st->dpy, st->window, st->black, st->robots[x].new_x, st->robots[x].new_y, st->robots[x].radius, st->robots[x].radius, 0, 360*64); laser[index].active = 0; x = st->NUM_ROBOTS; } } } } } if((st->MOTHER_SHIP)&&(rindex!=-1)) { if(laser[index].active) { if(st->mother->active) { y = laser[index].start_x-st->mother->new_x; if(y<0) { y = st->mother->new_x-laser[index].start_x; } z = laser[index].start_y-st->mother->y; if(z<0) { z = st->mother->y-laser[index].start_y; } if((zMOTHER_SHIP_HEIGHT-1)&&(yMOTHER_SHIP_WIDTH-1)) { laser[index].active = 0; st->mother->active--; } else { y = laser[index].end_x-st->mother->new_x; if(y<0) { y = st->mother->new_x-laser[index].end_x; } z = laser[index].end_y-st->mother->y; if(z<0) { z = st->mother->y-laser[index].end_y; } if((zMOTHER_SHIP_HEIGHT-1)&&(yMOTHER_SHIP_WIDTH-1)) { laser[index].active = 0; st->mother->active--; } } if(st->mother->active==0) { st->mother->death=20; } } } } if(laser[index].active) { dx = laser[index].start_x - laser[index].end_x; dy = laser[index].start_y - laser[index].end_y; laser[index].start_x = laser[index].end_x; laser[index].start_y = laser[index].end_y; laser[index].end_x = laser[index].end_x-dx; laser[index].end_y = laser[index].end_y-dy; if((laser[index].end_x < 0) || (laser[index].end_x >= st->xgwa.width) || (laser[index].end_y < 0) || (laser[index].end_y >= st->xgwa.height)) { laser[index].active = 0; } } } } /* All the robots are drawn, including the mother ship and the explosions. After all the robots have been drawn, their laser banks are check and the active lasers are drawn. */ static void draw_robots(struct state *st) { int x=0; int y=0; for(x=0;xNUM_ROBOTS;x++) { if(st->robots[x].alive) { if (st->black) XFillArc(st->dpy, st->window, st->black, st->robots[x].old_x, st->robots[x].old_y, st->robots[x].radius, st->robots[x].radius, 0, 360*64); XFillArc(st->dpy, st->window, st->robots[x].robot_color, st->robots[x].new_x, st->robots[x].new_y, st->robots[x].radius, st->robots[x].radius, 0, 360*64); } else { if (st->black) XFillArc(st->dpy, st->window, st->black, st->robots[x].old_x, st->robots[x].old_y, st->robots[x].radius, st->robots[x].radius, 0, 360*64); if(st->robots[x].death) { if(st->robots[x].death==20) { XFillArc(st->dpy, st->window, st->EXPLODE_COLOR_1, st->robots[x].new_x+(st->robots[x].radius/3), st->robots[x].new_y+(st->robots[x].radius/3), st->EXPLODE_SIZE_1, st->EXPLODE_SIZE_1, 0, 360*64); } else if(st->robots[x].death==18) { XFillArc(st->dpy, st->window, st->EXPLODE_COLOR_2, st->robots[x].new_x+(st->robots[x].radius/3), st->robots[x].new_y+(st->robots[x].radius/3), st->EXPLODE_SIZE_1, st->EXPLODE_SIZE_1, 0, 360*64); } else if(st->robots[x].death==17) { XFillArc(st->dpy, st->window, st->EXPLODE_COLOR_1, st->robots[x].new_x+(st->robots[x].radius/3), st->robots[x].new_y+(st->robots[x].radius/3), st->EXPLODE_SIZE_1, st->EXPLODE_SIZE_1, 0, 360*64); } else if(st->robots[x].death==15) { if (st->black) XFillArc(st->dpy, st->window, st->black, st->robots[x].new_x+(st->robots[x].radius/3), st->robots[x].new_y+(st->robots[x].radius/3), st->EXPLODE_SIZE_1, st->EXPLODE_SIZE_1, 0, 360*64); } else if(st->robots[x].death==14) { XFillArc(st->dpy, st->window, st->EXPLODE_COLOR_2, st->robots[x].new_x+(st->robots[x].radius/3), st->robots[x].new_y+(st->robots[x].radius/3), st->EXPLODE_SIZE_1, st->EXPLODE_SIZE_1, 0, 360*64); } else if(st->robots[x].death==13) { if (st->black) XFillArc(st->dpy, st->window, st->black, st->robots[x].new_x+(st->robots[x].radius/3), st->robots[x].new_y+(st->robots[x].radius/3), st->EXPLODE_SIZE_1, st->EXPLODE_SIZE_1, 0, 360*64); } else if(st->robots[x].death==12) { XFillArc(st->dpy, st->window, st->EXPLODE_COLOR_1, st->robots[x].new_x+(st->robots[x].radius/3), st->robots[x].new_y+(st->robots[x].radius/3), st->EXPLODE_SIZE_1, st->EXPLODE_SIZE_1, 0, 360*64); } else if(st->robots[x].death==11) { if (st->black) XFillArc(st->dpy, st->window, st->black, st->robots[x].new_x+(st->robots[x].radius/3), st->robots[x].new_y+(st->robots[x].radius/3), st->EXPLODE_SIZE_1, st->EXPLODE_SIZE_1, 0, 360*64); } else if(st->robots[x].death==10) { XFillArc(st->dpy, st->window, st->EXPLODE_COLOR_2, st->robots[x].new_x+(st->robots[x].radius/3), st->robots[x].new_y+(st->robots[x].radius/3), st->EXPLODE_SIZE_1, st->EXPLODE_SIZE_1, 0, 360*64); } else if(st->robots[x].death==9) { if (st->black) XFillArc(st->dpy, st->window, st->black, st->robots[x].new_x+(st->robots[x].radius/3), st->robots[x].new_y+(st->robots[x].radius/3), st->EXPLODE_SIZE_1, st->EXPLODE_SIZE_1, 0, 360*64); } else if(st->robots[x].death==8) { XFillArc(st->dpy, st->window, st->EXPLODE_COLOR_1, st->robots[x].new_x+(st->robots[x].radius/3), st->robots[x].new_y+(st->robots[x].radius/3), st->EXPLODE_SIZE_1, st->EXPLODE_SIZE_1, 0, 360*64); } else if(st->robots[x].death==7) { if (st->black) XFillArc(st->dpy, st->window, st->black, st->robots[x].new_x+(st->robots[x].radius/3), st->robots[x].new_y+(st->robots[x].radius/3), st->EXPLODE_SIZE_1, st->EXPLODE_SIZE_1, 0, 360*64); } else if(st->robots[x].death==6) { XFillArc(st->dpy, st->window, st->EXPLODE_COLOR_2, st->robots[x].new_x+(st->robots[x].radius/3), st->robots[x].new_y+(st->robots[x].radius/3), st->EXPLODE_SIZE_2, st->EXPLODE_SIZE_2, 0, 360*64); } else if(st->robots[x].death==4) { if (st->black) XFillArc(st->dpy, st->window, st->black, st->robots[x].new_x+(st->robots[x].radius/3), st->robots[x].new_y+(st->robots[x].radius/3), st->EXPLODE_SIZE_2, st->EXPLODE_SIZE_2, 0, 360*64); } else if(st->robots[x].death==3) { XFillArc(st->dpy, st->window, st->EXPLODE_COLOR_1, st->robots[x].new_x+(st->robots[x].radius/3), st->robots[x].new_y+(st->robots[x].radius/3), st->EXPLODE_SIZE_2, st->EXPLODE_SIZE_2, 0, 360*64); } else if(st->robots[x].death==2) { if (st->black) XFillArc(st->dpy, st->window, st->black, st->robots[x].new_x+(st->robots[x].radius/3), st->robots[x].new_y+(st->robots[x].radius/3), st->EXPLODE_SIZE_2, st->EXPLODE_SIZE_2, 0, 360*64); XFillArc(st->dpy, st->window, st->EXPLODE_COLOR_2, st->robots[x].new_x+(1.7*st->robots[x].radius/2), st->robots[x].new_y+(1.7*st->robots[x].radius/2), st->EXPLODE_SIZE_3, st->EXPLODE_SIZE_3, 0, 360*64); } else if(st->robots[x].death==1) { if (st->black) XFillArc(st->dpy, st->window, st->black, st->robots[x].new_x+(1.7*st->robots[x].radius/2), st->robots[x].new_y+(1.7*st->robots[x].radius/2), st->EXPLODE_SIZE_3, st->EXPLODE_SIZE_3, 0, 360*64); } st->robots[x].death--; } } } for(x=0;xNUM_ROBOTS;x++) { for(y=0;yNUM_LASERS;y++) { if(st->robots[x].lasers[y].active) { if (st->black) XDrawLine(st->dpy, st->window, st->black, st->robots[x].lasers[y].start_x, st->robots[x].lasers[y].start_y, st->robots[x].lasers[y].end_x, st->robots[x].lasers[y].end_y); move_laser(st, x, y); if(st->robots[x].lasers[y].active) { XDrawLine(st->dpy, st->window, st->robots[x].laser_color, st->robots[x].lasers[y].start_x, st->robots[x].lasers[y].start_y, st->robots[x].lasers[y].end_x, st->robots[x].lasers[y].end_y); } else { if (st->black) XDrawLine(st->dpy, st->window, st->black, st->robots[x].lasers[y].start_x, st->robots[x].lasers[y].start_y, st->robots[x].lasers[y].end_x, st->robots[x].lasers[y].end_y); } } } } if(st->MOTHER_SHIP) { if(st->mother->active) { if (st->black) XFillArc(st->dpy, st->window, st->black, st->mother->old_x, st->mother->y, st->MOTHER_SHIP_WIDTH, st->MOTHER_SHIP_HEIGHT, 0 , 360*64); XFillArc(st->dpy, st->window, st->mother->ship_color, st->mother->new_x, st->mother->y, st->MOTHER_SHIP_WIDTH, st->MOTHER_SHIP_HEIGHT, 0 , 360*64); } else { if(st->mother->death) { if (st->black) XFillArc(st->dpy, st->window, st->black, st->mother->old_x, st->mother->y, st->MOTHER_SHIP_WIDTH, st->MOTHER_SHIP_HEIGHT, 0 , 360*64); if(st->mother->death==20) { XFillArc(st->dpy, st->window, st->EXPLODE_COLOR_1, st->mother->new_x+1, st->mother->y+1, st->EXPLODE_SIZE_1, st->EXPLODE_SIZE_1, 0, 360*64); } else if(st->mother->death==18) { XFillArc(st->dpy, st->window, st->EXPLODE_COLOR_2, st->mother->new_x+1, st->mother->y+1, st->EXPLODE_SIZE_1, st->EXPLODE_SIZE_1, 0, 360*64); } else if(st->mother->death==17) { XFillArc(st->dpy, st->window, st->EXPLODE_COLOR_1, st->mother->new_x+1, st->mother->y+1, st->EXPLODE_SIZE_1, st->EXPLODE_SIZE_1, 0, 360*64); } else if(st->mother->death==15) { if (st->black) XFillArc(st->dpy, st->window, st->black, st->mother->new_x+1, st->mother->y+1, st->EXPLODE_SIZE_1, st->EXPLODE_SIZE_1, 0, 360*64); } else if(st->mother->death==14) { XFillArc(st->dpy, st->window, st->EXPLODE_COLOR_2, st->mother->new_x+1, st->mother->y+1, st->EXPLODE_SIZE_1, st->EXPLODE_SIZE_1, 0, 360*64); } else if(st->mother->death==13) { if (st->black) XFillArc(st->dpy, st->window, st->black, st->mother->new_x+1, st->mother->y+1, st->EXPLODE_SIZE_1, st->EXPLODE_SIZE_1, 0, 360*64); } else if(st->mother->death==12) { XFillArc(st->dpy, st->window, st->EXPLODE_COLOR_1, st->mother->new_x+1, st->mother->y+1, st->EXPLODE_SIZE_1, st->EXPLODE_SIZE_1, 0, 360*64); } else if(st->mother->death==11) { if (st->black) XFillArc(st->dpy, st->window, st->black, st->mother->new_x+1, st->mother->y+1, st->EXPLODE_SIZE_1, st->EXPLODE_SIZE_1, 0, 360*64); } else if(st->mother->death==10) { XFillArc(st->dpy, st->window, st->EXPLODE_COLOR_2, st->mother->new_x+1, st->mother->y+1, st->EXPLODE_SIZE_1, st->EXPLODE_SIZE_1, 0, 360*64); } else if(st->mother->death==9) { if (st->black) XFillArc(st->dpy, st->window, st->black, st->mother->new_x+1, st->mother->y+1, st->EXPLODE_SIZE_1, st->EXPLODE_SIZE_1, 0, 360*64); } else if(st->mother->death==8) { XFillArc(st->dpy, st->window, st->EXPLODE_COLOR_1, st->mother->new_x+1, st->mother->y+1, st->EXPLODE_SIZE_1, st->EXPLODE_SIZE_1, 0, 360*64); } else if(st->mother->death==7) { if (st->black) XFillArc(st->dpy, st->window, st->black, st->mother->new_x+1, st->mother->y+1, st->EXPLODE_SIZE_1, st->EXPLODE_SIZE_1, 0, 360*64); } else if(st->mother->death==6) { XFillArc(st->dpy, st->window, st->EXPLODE_COLOR_2, st->mother->new_x+1, st->mother->y+1, st->EXPLODE_SIZE_2, st->EXPLODE_SIZE_2, 0, 360*64); } else if(st->mother->death==4) { if (st->black) XFillArc(st->dpy, st->window, st->black, st->mother->new_x+1, st->mother->y+1, st->EXPLODE_SIZE_2, st->EXPLODE_SIZE_2, 0, 360*64); } else if(st->mother->death==3) { XFillArc(st->dpy, st->window, st->EXPLODE_COLOR_1, st->mother->new_x+1, st->mother->y+1, st->EXPLODE_SIZE_2, st->EXPLODE_SIZE_2, 0, 360*64); } else if(st->mother->death==2) { if (st->black) XFillArc(st->dpy, st->window, st->black, st->mother->new_x+1, st->mother->y+1, st->EXPLODE_SIZE_2, st->EXPLODE_SIZE_2, 0, 360*64); XFillArc(st->dpy, st->window, st->EXPLODE_COLOR_2, st->mother->new_x+(1.7*st->MOTHER_SHIP_WIDTH/2), st->mother->y+(1.7*st->MOTHER_SHIP_HEIGHT/2), st->EXPLODE_SIZE_3, st->EXPLODE_SIZE_3, 0, 360*64); } else if(st->mother->death==1) { if (st->black) XFillArc(st->dpy, st->window, st->black, st->mother->new_x+(1.7*st->MOTHER_SHIP_WIDTH/2), st->mother->y+(1.7*st->MOTHER_SHIP_HEIGHT/2), st->EXPLODE_SIZE_3, st->EXPLODE_SIZE_3, 0, 360*64); } st->mother->death--; } } for(y=0;y<8;y++) { if(st->mother->lasers[y].active) { if (st->black) XDrawLine(st->dpy, st->window, st->black, st->mother->lasers[y].start_x, st->mother->lasers[y].start_y, st->mother->lasers[y].end_x, st->mother->lasers[y].end_y); move_laser(st, -1,y); if(st->mother->lasers[y].active) { XDrawLine(st->dpy, st->window, st->mother->laser_color, st->mother->lasers[y].start_x, st->mother->lasers[y].start_y, st->mother->lasers[y].end_x, st->mother->lasers[y].end_y); } else { if (st->black) XDrawLine(st->dpy, st->window, st->black, st->mother->lasers[y].start_x, st->mother->lasers[y].start_y, st->mother->lasers[y].end_x, st->mother->lasers[y].end_y); } } } } } static void init_stars(struct state *st) { if(st->NUM_STARS) { if (! st->stars) st->stars = (XArc *) malloc (st->NUM_STARS * sizeof(XArc)); for(st->draw_x=0;st->draw_xNUM_STARS;st->draw_x++) { st->stars[st->draw_x].x = random()%st->xgwa.width; st->stars[st->draw_x].y = random()%st->xgwa.height; st->stars[st->draw_x].width = random()%4 + 1; st->stars[st->draw_x].height = st->stars[st->draw_x].width; st->stars[st->draw_x].angle1 = 0; st->stars[st->draw_x].angle2 = 360 * 64; } } } static unsigned long blaster_draw (Display *dpy, Window window, void *closure) { struct state *st = (struct state *) closure; #ifdef HAVE_JWXYZ /* Don't second-guess Quartz's double-buffering */ XClearWindow (dpy, window); #endif if (!st->initted) { st->initted = 1; st->robots = (struct robot_state *) malloc(st->NUM_ROBOTS * sizeof (struct robot_state)); for(st->draw_x=0;st->draw_xNUM_ROBOTS;st->draw_x++) { st->robots[st->draw_x].alive = 0; st->robots[st->draw_x].death = 0; st->robots[st->draw_x].lasers = (struct laser_state *) malloc (st->NUM_LASERS * sizeof(struct laser_state)); for(st->draw_y=0;st->draw_yNUM_LASERS;st->draw_y++) { st->robots[st->draw_x].lasers[st->draw_y].active = 0; } } init_stars(st); } if(st->NUM_STARS) { if(st->MOVE_STARS) { if (st->black) XFillArcs(st->dpy,st->window,st->black,st->stars,st->NUM_STARS); if(st->MOVE_STARS_RANDOM) { st->draw_y = st->MOVE_STARS_X; st->draw_z = st->MOVE_STARS_Y; if(random()%167==0) { st->draw_y = (-1)*st->draw_y; } if(random()%173==0) { st->draw_z = (-1)*st->draw_z; } if(random()%50==0) { if(random()%2) { st->draw_y++; if(st->draw_y>st->MOVE_STARS_RANDOM) { st->draw_y = st->MOVE_STARS_RANDOM; } } else { st->draw_y--; if(st->draw_y < -(st->MOVE_STARS_RANDOM)) { st->draw_y = -(st->MOVE_STARS_RANDOM); } } } if(random()%50==0) { if(random()%2) { st->draw_z++; if(st->draw_z>st->MOVE_STARS_RANDOM) { st->draw_z = st->MOVE_STARS_RANDOM; } } else { st->draw_z--; if(st->draw_z < -st->MOVE_STARS_RANDOM) { st->draw_z = -st->MOVE_STARS_RANDOM; } } } st->MOVE_STARS_X = st->draw_y; st->MOVE_STARS_Y = st->draw_z; for(st->draw_x=0;st->draw_xNUM_STARS;st->draw_x++) { st->stars[st->draw_x].x = st->stars[st->draw_x].x + st->draw_y; st->stars[st->draw_x].y = st->stars[st->draw_x].y + st->draw_z; if(st->stars[st->draw_x].x<0) { st->stars[st->draw_x].x = st->stars[st->draw_x].x + st->xgwa.width; } else if(st->stars[st->draw_x].x>st->xgwa.width) { st->stars[st->draw_x].x = st->stars[st->draw_x].x - st->xgwa.width; } if(st->stars[st->draw_x].y<0) { st->stars[st->draw_x].y = st->stars[st->draw_x].y + st->xgwa.height; } else if(st->stars[st->draw_x].y>st->xgwa.height) { st->stars[st->draw_x].y = st->stars[st->draw_x].y - st->xgwa.height; } } } else { for(st->draw_x=0;st->draw_xNUM_STARS;st->draw_x++) { st->stars[st->draw_x].x = st->stars[st->draw_x].x + st->MOVE_STARS_X; st->stars[st->draw_x].y = st->stars[st->draw_x].y + st->MOVE_STARS_Y; if(st->stars[st->draw_x].x<0) { st->stars[st->draw_x].x = st->stars[st->draw_x].x + st->xgwa.width; } else if(st->stars[st->draw_x].x>st->xgwa.width) { st->stars[st->draw_x].x = st->stars[st->draw_x].x - st->xgwa.width; } if(st->stars[st->draw_x].y<0) { st->stars[st->draw_x].y = st->stars[st->draw_x].y + st->xgwa.height; } else if(st->stars[st->draw_x].y>st->xgwa.height) { st->stars[st->draw_x].y = st->stars[st->draw_x].y - st->xgwa.height; } } } XFillArcs(st->dpy,st->window,st->s_color,st->stars,st->NUM_STARS); } else { XFillArcs(st->dpy,st->window,st->s_color,st->stars,st->NUM_STARS); } } if(st->MOTHER_SHIP) { if(random()%st->MOTHER_SHIP_PERIOD==0) { if((st->mother->active==0)&&(st->mother->death==0)) { st->mother->active = st->MOTHER_SHIP_HITS; st->mother->y = random()%(st->xgwa.height-7); if(random()%2==0) { st->mother->old_x=0; st->mother->new_x=0; } else { st->mother->old_x=st->xgwa.width-25; st->mother->new_x=st->xgwa.width-25; } } } } move_robots(st); if(st->MOTHER_SHIP) { if(st->mother->active) { if(st->mother->old_x==st->mother->new_x) { if(st->mother->old_x==0) { st->mother->new_x=3; } else { st->mother->new_x=st->mother->new_x-3; } } else { if(st->mother->old_x>st->mother->new_x) { st->mother->old_x = st->mother->new_x; st->mother->new_x = st->mother->new_x-3; if(st->mother->new_x<0) { st->mother->active=0; if (st->black) XFillArc(st->dpy, st->window, st->black, st->mother->old_x, st->mother->y, st->MOTHER_SHIP_WIDTH, st->MOTHER_SHIP_HEIGHT, 0 , 360*64); if (st->black) XFillArc(st->dpy, st->window, st->black, st->mother->new_x, st->mother->y, st->MOTHER_SHIP_WIDTH, st->MOTHER_SHIP_HEIGHT, 0 , 360*64); } } else { st->mother->old_x = st->mother->new_x; st->mother->new_x = st->mother->new_x+3; if(st->mother->new_x>st->xgwa.width) { st->mother->active=0; if (st->black) XFillArc(st->dpy, st->window, st->black, st->mother->old_x, st->mother->y, st->MOTHER_SHIP_WIDTH, st->MOTHER_SHIP_HEIGHT, 0 , 360*64); if (st->black) XFillArc(st->dpy, st->window, st->black, st->mother->new_x, st->mother->y, st->MOTHER_SHIP_WIDTH, st->MOTHER_SHIP_HEIGHT, 0 , 360*64); } } } st->draw_y=0; for(st->draw_x=0;st->draw_x<8;st->draw_x++) { if(st->mother->lasers[st->draw_x].active) { st->draw_y=1; st->draw_x=8; } } if(st->draw_y==0) { for(st->draw_x=0;st->draw_x<8;st->draw_x++) { st->mother->lasers[st->draw_x].active = 1; st->mother->lasers[st->draw_x].start_x=st->mother->new_x+(st->MOTHER_SHIP_WIDTH/2); st->mother->lasers[st->draw_x].start_y=st->mother->y+(st->MOTHER_SHIP_HEIGHT/2); } st->draw_y = (int)(st->MOTHER_SHIP_LASER/1.5); st->mother->lasers[0].end_x=st->mother->lasers[0].start_x-st->MOTHER_SHIP_LASER; st->mother->lasers[0].end_y=st->mother->lasers[0].start_y; st->mother->lasers[1].end_x=st->mother->lasers[1].start_x-st->draw_y; st->mother->lasers[1].end_y=st->mother->lasers[1].start_y-st->draw_y; st->mother->lasers[2].end_x=st->mother->lasers[2].start_x; st->mother->lasers[2].end_y=st->mother->lasers[2].start_y-st->MOTHER_SHIP_LASER; st->mother->lasers[3].end_x=st->mother->lasers[3].start_x+st->draw_y; st->mother->lasers[3].end_y=st->mother->lasers[3].start_y-st->draw_y; st->mother->lasers[4].end_x=st->mother->lasers[4].start_x+st->MOTHER_SHIP_LASER; st->mother->lasers[4].end_y=st->mother->lasers[4].start_y; st->mother->lasers[5].end_x=st->mother->lasers[5].start_x+st->draw_y; st->mother->lasers[5].end_y=st->mother->lasers[5].start_y+st->draw_y; st->mother->lasers[6].end_x=st->mother->lasers[6].start_x; st->mother->lasers[6].end_y=st->mother->lasers[6].start_y+st->MOTHER_SHIP_LASER; st->mother->lasers[7].end_x=st->mother->lasers[7].start_x-st->draw_y; st->mother->lasers[7].end_y=st->mother->lasers[7].start_y+st->draw_y; } } } draw_robots(st); return st->delay; } static void * blaster_init (Display *d, Window w) { struct state *st = (struct state *) calloc (1, sizeof(*st)); XGCValues gcv; Colormap cmap; unsigned long bg; st->dpy = d; st->window = w; XGetWindowAttributes(st->dpy, st->window, &st->xgwa); cmap = st->xgwa.colormap; st->NUM_ROBOTS=5; st->NUM_LASERS=3; st->MOTHER_SHIP_WIDTH=25; st->MOTHER_SHIP_HEIGHT=7; st->MOTHER_SHIP_LASER=15; st->MOTHER_SHIP_PERIOD=150; st->MOTHER_SHIP_HITS=10; st->RANDOM_MOVE_STYLE=1; st->NUM_MOVE_STYLES=2; st->EXPLODE_SIZE_1=27; st->EXPLODE_SIZE_2=19; st->EXPLODE_SIZE_3=7; st->delay = get_integer_resource(st->dpy, "delay", "Integer"); if(st->delay==0) { st->delay=10000; } st->NUM_ROBOTS = get_integer_resource(st->dpy, "num_robots","Integer"); if(st->NUM_ROBOTS==0) { st->NUM_ROBOTS=5; } st->NUM_LASERS = get_integer_resource(st->dpy, "num_lasers","Integer"); st->EXPLODE_SIZE_1 = get_integer_resource(st->dpy, "explode_size_1","Integer"); st->EXPLODE_SIZE_2 = get_integer_resource(st->dpy, "explode_size_2","Integer"); st->EXPLODE_SIZE_3 = get_integer_resource(st->dpy, "explode_size_3","Integer"); st->NUM_STARS = get_integer_resource(st->dpy, "num_stars","Integer"); if(get_boolean_resource(st->dpy, "move_stars","Boolean")) { st->MOVE_STARS = 1; st->MOVE_STARS_X = get_integer_resource(st->dpy, "move_stars_x","Integer"); st->MOVE_STARS_Y = get_integer_resource(st->dpy, "move_stars_y","Integer"); st->MOVE_STARS_RANDOM = get_integer_resource(st->dpy, "move_stars_random","Integer"); } else { st->MOVE_STARS = 0; } bg = get_pixel_resource(st->dpy, cmap, "background","Background"); gcv.function = GXcopy; #define make_gc(color,name) \ gcv.foreground = get_pixel_resource (st->dpy, cmap, (name), "Foreground"); \ color = XCreateGC (st->dpy, st->window, GCForeground|GCFunction, &gcv) if(mono_p) { gcv.foreground = bg; st->black = XCreateGC(st->dpy, st->window, GCForeground|GCFunction, &gcv); gcv.foreground = get_pixel_resource(st->dpy, cmap, "foreground", "Foreground"); st->r_color0 = st->r_color1 = st->r_color2 = st->r_color3 = st->r_color4 = st->r_color5 = st->l_color0 = st->l_color1 = st->s_color= XCreateGC(st->dpy, st->window, GCForeground|GCFunction, &gcv); if(get_boolean_resource(st->dpy, "mother_ship","Boolean")) { st->MOTHER_SHIP_WIDTH=get_integer_resource(st->dpy, "mother_ship_width","Integer"); st->MOTHER_SHIP_HEIGHT=get_integer_resource(st->dpy, "mother_ship_height","Integer"); st->MOTHER_SHIP_LASER=get_integer_resource(st->dpy, "mother_ship_laser","Integer"); st->MOTHER_SHIP_PERIOD=get_integer_resource(st->dpy, "mother_ship_period","Integer"); st->MOTHER_SHIP_HITS=get_integer_resource(st->dpy, "mother_ship_hits","Integer"); st->MOTHER_SHIP=1; st->mother = (struct mother_ship_state *) malloc(sizeof(struct mother_ship_state)); st->mother->lasers = (struct laser_state *) malloc(8*sizeof(struct laser_state)); st->mother->active = 0; st->mother->death = 0; st->mother->ship_color = st->r_color0; st->mother->laser_color = st->r_color0; } } else { if(get_boolean_resource(st->dpy, "mother_ship","Boolean")) { st->MOTHER_SHIP_WIDTH=get_integer_resource(st->dpy, "mother_ship_width","Integer"); st->MOTHER_SHIP_HEIGHT=get_integer_resource(st->dpy, "mother_ship_height","Integer"); st->MOTHER_SHIP_LASER=get_integer_resource(st->dpy, "mother_ship_laser","Integer"); st->MOTHER_SHIP_PERIOD=get_integer_resource(st->dpy, "mother_ship_period","Integer"); st->MOTHER_SHIP_HITS=get_integer_resource(st->dpy, "mother_ship_hits","Integer"); st->MOTHER_SHIP=1; st->mother = (struct mother_ship_state *) malloc(sizeof(struct mother_ship_state)); st->mother->lasers = (struct laser_state *) malloc(8*sizeof(struct laser_state)); st->mother->active = 0; st->mother->death = 0; make_gc(st->mother->ship_color,"mother_ship_color0"); make_gc(st->mother->laser_color,"mother_ship_color1"); } make_gc (st->s_color,"star_color"); make_gc (st->EXPLODE_COLOR_1,"explode_color_1"); make_gc (st->EXPLODE_COLOR_2,"explode_color_2"); make_gc (st->r_color0,"r_color0"); make_gc (st->r_color1,"r_color1"); make_gc (st->r_color2,"r_color2"); make_gc (st->r_color3,"r_color3"); make_gc (st->r_color4,"r_color4"); make_gc (st->r_color5,"r_color5"); make_gc (st->l_color0,"l_color0"); make_gc (st->l_color1,"l_color1"); #ifdef HAVE_JWXYZ /* Don't second-guess Quartz's double-buffering */ st->black = 0; #else make_gc (st->black,"background"); #endif } return st; } static void blaster_reshape (Display *dpy, Window window, void *closure, unsigned int w, unsigned int h) { struct state *st = (struct state *) closure; XGetWindowAttributes (dpy, window, &st->xgwa); XClearWindow (dpy, window); init_stars (st); } static Bool blaster_event (Display *dpy, Window window, void *closure, XEvent *event) { return False; } static void blaster_free (Display *dpy, Window window, void *closure) { struct state *st = (struct state *) closure; int i; if (st->r_color0) XFreeGC (dpy, st->r_color0); if (st->r_color1) XFreeGC (dpy, st->r_color1); if (st->r_color2) XFreeGC (dpy, st->r_color2); if (st->r_color3) XFreeGC (dpy, st->r_color3); if (st->r_color4) XFreeGC (dpy, st->r_color4); if (st->r_color5) XFreeGC (dpy, st->r_color5); if (st->l_color0) XFreeGC (dpy, st->l_color0); if (st->l_color1) XFreeGC (dpy, st->l_color1); if (st->s_color) XFreeGC (dpy, st->s_color); if (st->black) XFreeGC (dpy, st->black); if (st->stars) free (st->stars); if (st->mother) { free (st->mother->lasers); free (st->mother); } for (i = 0; i < st->NUM_ROBOTS; i++) free (st->robots[i].lasers); free (st->robots); free (st); } static const char *blaster_defaults [] = { ".background: black", ".foreground: white", "*fpsSolid: true", "*r_color0: #FF00FF", "*r_color1: #FFA500", "*r_color2: #FFFF00", "*r_color3: #FFFFFF", "*r_color4: #0000FF", "*r_color5: #00FFFF", "*l_color0: #00FF00", "*l_color1: #FF0000", "*mother_ship_color0: #00008B", "*mother_ship_color1: #FFFFFF", "*explode_color_1: #FFFF00", "*explode_color_2: #FFA500", "*delay: 10000", "*num_robots: 5", "*num_lasers: 3", "*mother_ship: false", "*mother_ship_width: 25", "*mother_ship_height: 7", "*mother_ship_laser: 15", "*mother_ship_period: 150", "*mother_ship_hits: 10", "*explode_size_1: 27", "*explode_size_2: 19", "*explode_size_3: 7", "*num_stars: 50", "*star_color: white", "*move_stars: true", "*move_stars_x: 2", "*move_stars_y: 1", "*move_stars_random: 0", #ifdef HAVE_MOBILE "*ignoreRotation: True", #endif 0 }; static XrmOptionDescRec blaster_options [] = { /* These are the 6 robot colors */ { "-r_color0", ".r_color0", XrmoptionSepArg, 0 }, { "-r_color1", ".r_color1", XrmoptionSepArg, 0 }, { "-r_color2", ".r_color2", XrmoptionSepArg, 0 }, { "-r_color3", ".r_color3", XrmoptionSepArg, 0 }, { "-r_color4", ".r_color4", XrmoptionSepArg, 0 }, { "-r_color5", ".r_color5", XrmoptionSepArg, 0 }, /* These are the 2 laser colors that robots have */ { "-l_color0", ".l_color0", XrmoptionSepArg, 0 }, { "-l_color1", ".l_color1", XrmoptionSepArg, 0 }, /* These are the colors for the mothership and the mothership lasers */ { "-mother_ship_color0", ".mother_ship_color0", XrmoptionSepArg, 0}, { "-mother_ship_color1", ".mother_ship_color1", XrmoptionSepArg, 0}, /* These are the two colors of the animated explosion */ { "-explode_color_1", ".explode_color_1", XrmoptionSepArg, 0 }, { "-explode_color_2", ".explode_color_2", XrmoptionSepArg, 0 }, /* This is the delay in the main loop */ { "-delay", ".delay", XrmoptionSepArg, 0 }, /* The number of robots and the number of lasers each robot has */ { "-num_robots", ".num_robots", XrmoptionSepArg, 0}, { "-num_lasers", ".num_lasers", XrmoptionSepArg, 0}, /* If this is set, a mothership will appear, otherwise no mothership */ { "-mother_ship", ".mother_ship", XrmoptionNoArg, "true"}, { "-no_mother_ship", ".mother_ship", XrmoptionNoArg, "false"}, /* This is the width, height, and laser length of the mothership */ { "-mother_ship_width", ".mother_ship_width", XrmoptionSepArg, 0}, { "-mother_ship_height", ".mother_ship_height", XrmoptionSepArg, 0}, { "-mother_ship_laser", ".mother_ship_laser", XrmoptionSepArg, 0}, /* This is the period which the mothership comes out, higher period==less often */ { "-mother_ship_period", ".mother_ship_period", XrmoptionSepArg, 0}, /* This is the number of hits it takes to destroy the mothership */ { "-mother_ship_hits", ".mother_ship_hits", XrmoptionSepArg, 0}, /* These are the size of the radius of the animated explosions */ { "-explode_size_1", ".explode_size_1", XrmoptionSepArg, 0}, { "-explode_size_2", ".explode_size_2", XrmoptionSepArg, 0}, { "-explode_size_3", ".explode_size_3", XrmoptionSepArg, 0}, /* This sets the number of stars in the star field, if this is set to 0, there will be no stars */ { "-num_stars", ".num_stars", XrmoptionSepArg, 0}, /* This is the color of the stars */ { "-star_color", ".star_color", XrmoptionSepArg, 0}, /* If this is true, the stars will move */ { "-move_stars", ".move_stars", XrmoptionNoArg, "true"}, /* This is the amount the stars will move in the x and y direction */ { "-move_stars_x", ".move_stars_x", XrmoptionSepArg, 0}, { "-move_stars_y", ".move_stars_y", XrmoptionSepArg, 0}, /* If this is non-zero, the stars will move randomly, but will not move more than this number in either the x or y direction */ { "-move_stars_random", ".move_stars_random", XrmoptionSepArg, 0}, { 0, 0, 0, 0 } }; XSCREENSAVER_MODULE ("Blaster", blaster) xscreensaver-5.36/hacks/bumps.c000664 000767 000024 00000056712 12717726243 016551 0ustar00jwzstaff000000 000000 /* -*- mode: C; tab-width: 4 -*- * Bumps, Copyright (c) 2002, 2006 Shane Smit * * 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. * * Module: "bumps.c" * Tab Size: 4 * * Description: * This is typical bump-mapping. The actual bump map is generated by a screen * grab. The light source is represented by a spotlight of random color. This * spotlight randomly traverses the bump map in a sinus pattern. * * Essentially, it 3D-izes your desktop, based on color intensity. * * Modification History: * [10/01/99] - Shane Smit: Creation * [10/08/99] - Shane Smit: Port to C. (Ick) * [03/08/02] - Shane Smit: New movement code. * [09/12/02] - Shane Smit: MIT-SHM XImages. * Thanks to Kennett Galbraith * for code optimization. */ #include #include #include #include "screenhack.h" #ifdef HAVE_XSHM_EXTENSION #include "xshm.h" #endif /* HAVE_XSHM_EXTENSION */ /* Defines: */ /* #define VERBOSE */ #define RANDOM() ((int) (random() & 0X7FFFFFFFL)) typedef unsigned char BOOL; /* Globals: */ static const char *bumps_defaults [] = { ".background: black", ".foreground: white", "*fpsSolid: true", "*color: random", "*colorcount: 64", "*delay: 30000", "*duration: 120", "*soften: 1", "*invert: FALSE", #ifdef __sgi /* really, HAVE_READ_DISPLAY_EXTENSION */ "*visualID: Best", #endif #ifdef HAVE_XSHM_EXTENSION "*useSHM: True", #endif /* HAVE_XSHM_EXTENSION */ #ifdef HAVE_MOBILE "*ignoreRotation: True", "*rotateImages: True", #endif 0 }; static XrmOptionDescRec bumps_options [] = { { "-color", ".color", XrmoptionSepArg, 0 }, { "-colorcount", ".colorcount", XrmoptionSepArg, 0 }, { "-duration", ".duration", XrmoptionSepArg, 0 }, { "-delay", ".delay", XrmoptionSepArg, 0 }, { "-soften", ".soften", XrmoptionSepArg, 0 }, { "-invert", ".invert", XrmoptionNoArg, "TRUE" }, #ifdef HAVE_XSHM_EXTENSION { "-shm", ".useSHM", XrmoptionNoArg, "True" }, { "-no-shm", ".useSHM", XrmoptionNoArg, "False" }, #endif /* HAVE_XSHM_EXTENSION */ { 0, 0, 0, 0 } }; /* This structure handles everything to do with the spotlight, and is designed to be * a member of TBumps. */ typedef struct { uint8_t *aLightMap; uint16_t nFalloffDiameter, nFalloffRadius; uint16_t nLightDiameter, nLightRadius; float nAccelX, nAccelY; float nAccelMax; float nVelocityX, nVelocityY; float nVelocityMax; float nXPos, nYPos; } SSpotLight; /* The entire program's operation is contained within this structure. */ typedef struct { /* XWindows specific variables. */ Display *dpy; Window Win; Screen *screen; Pixmap source; GC GraphicsContext; XColor *xColors; unsigned long *aColors; XImage *pXImage; #ifdef HAVE_XSHM_EXTENSION XShmSegmentInfo XShmInfo; Bool bUseShm; #endif /* HAVE_XSHM_EXTENSION */ uint8_t nColorCount; /* Number of colors used. */ uint8_t bytesPerPixel; uint16_t iWinWidth, iWinHeight; uint16_t *aBumpMap; /* The actual bump map. */ SSpotLight SpotLight; int delay; int duration; time_t start_time; async_load_state *img_loader; } SBumps; static void SetPalette(Display *, SBumps *, XWindowAttributes * ); static void InitBumpMap(Display *, SBumps *, XWindowAttributes * ); static void InitBumpMap_2(Display *, SBumps *); static void SoftenBumpMap( SBumps * ); /* This function pointer will point to the appropriate PutPixel*() function below. */ static void (*MyPutPixel)( int8_t *, uint32_t ); static void PutPixel32( int8_t *pData, uint32_t pixel ) { *(uint32_t *)pData = pixel; } static void PutPixel24( int8_t *pData, uint32_t pixel ) { pData[ 2 ] = ( pixel & 0x00FF0000 ) >> 16; pData[ 1 ] = ( pixel & 0x0000FF00 ) >> 8; pData[ 0 ] = ( pixel & 0x000000FF ); } static void PutPixel16( int8_t *pData, uint32_t pixel ) { *(uint16_t *)pData = (uint16_t)pixel; } static void PutPixel8( int8_t *pData, uint32_t pixel ) { *(uint8_t *)pData = (uint8_t)pixel; } /* Creates the light map, which is a circular image... going from black around the edges * to white in the center. */ static void CreateSpotLight( SSpotLight *pSpotLight, uint16_t iDiameter, uint16_t nColorCount ) { double nDist; int16_t iDistX, iDistY; uint8_t *pLOffset; pSpotLight->nFalloffDiameter = iDiameter; pSpotLight->nFalloffRadius = pSpotLight->nFalloffDiameter / 2; pSpotLight->nLightDiameter = iDiameter / 2; pSpotLight->nLightRadius = pSpotLight->nLightDiameter / 2; #ifdef VERBOSE printf( "%s: Falloff Diameter: %d\n", progclass, pSpotLight->nFalloffDiameter ); printf( "%s: Spot Light Diameter: %d\n", progclass, pSpotLight->nLightDiameter ); #endif pSpotLight->aLightMap = malloc( pSpotLight->nLightDiameter * pSpotLight->nLightDiameter * sizeof(uint8_t) ); pLOffset = pSpotLight->aLightMap; for( iDistY=-pSpotLight->nLightRadius; iDistYnLightRadius; ++iDistY ) { for( iDistX=-pSpotLight->nLightRadius; iDistXnLightRadius; ++iDistX ) { nDist = sqrt( pow( iDistX+0.5F, 2 ) + pow( iDistY+0.5F, 2 ) ); if( nDist / pSpotLight->nLightRadius <= 1.0f ) *pLOffset = (uint8_t)(nColorCount - ( ( nDist / pSpotLight->nLightRadius ) * ( nColorCount - 1 ) )); else *pLOffset = 0; ++pLOffset; } } /* Initialize movement variables. */ pSpotLight->nAccelX = 0; pSpotLight->nAccelY = 0; pSpotLight->nVelocityX = ( RANDOM() % 2 ) ? pSpotLight->nVelocityMax : -pSpotLight->nVelocityMax; pSpotLight->nVelocityY = ( RANDOM() % 2 ) ? pSpotLight->nVelocityMax : -pSpotLight->nVelocityMax; } /* Calculates the position of the spot light on the screen. */ static void CalcLightPos( SBumps *pBumps ) { SSpotLight *pSpotLight = &pBumps->SpotLight; float nGravity; /* X */ if( pSpotLight->nXPos < pSpotLight->nFalloffRadius ) nGravity = 1.0f; else if( pSpotLight->nXPos > pBumps->iWinWidth - pSpotLight->nFalloffRadius ) nGravity = -1.0f; else nGravity = ( ( RANDOM() % 201 ) / 100.0f ) - 1.0f; pSpotLight->nAccelX += nGravity * ( pSpotLight->nAccelMax / 5.0f ); if( pSpotLight->nAccelX < -pSpotLight->nAccelMax ) pSpotLight->nAccelX = -pSpotLight->nAccelMax; else if( pSpotLight->nAccelX > pSpotLight->nAccelMax ) pSpotLight->nAccelX = pSpotLight->nAccelMax; pSpotLight->nVelocityX += pSpotLight->nAccelX; if( pSpotLight->nVelocityX < -pSpotLight->nVelocityMax ) pSpotLight->nVelocityX = -pSpotLight->nVelocityMax; else if( pSpotLight->nVelocityX > pSpotLight->nVelocityMax ) pSpotLight->nVelocityX = pSpotLight->nVelocityMax; pSpotLight->nXPos += pSpotLight->nVelocityX; /* Y */ if( pSpotLight->nYPos < pSpotLight->nFalloffRadius ) nGravity = 1.0f; else if( pSpotLight->nYPos > pBumps->iWinHeight - pSpotLight->nFalloffRadius ) nGravity = -1.0f; else nGravity = ( ( RANDOM() % 201 ) / 100.0f ) - 1.0f; pSpotLight->nAccelY += nGravity * ( pSpotLight->nAccelMax / 5.0f ); if( pSpotLight->nAccelY < -pSpotLight->nAccelMax ) pSpotLight->nAccelY = -pSpotLight->nAccelMax; else if( pSpotLight->nAccelY > pSpotLight->nAccelMax ) pSpotLight->nAccelY = pSpotLight->nAccelMax; pSpotLight->nVelocityY += pSpotLight->nAccelY; if( pSpotLight->nVelocityY < -pSpotLight->nVelocityMax ) pSpotLight->nVelocityY = -pSpotLight->nVelocityMax; else if( pSpotLight->nVelocityY > pSpotLight->nVelocityMax ) pSpotLight->nVelocityY = pSpotLight->nVelocityMax; pSpotLight->nYPos += pSpotLight->nVelocityY; } /* Main initialization function. */ static void CreateBumps( SBumps *pBumps, Display *dpy, Window NewWin ) { XWindowAttributes XWinAttribs; XGCValues GCValues; int32_t nGCFlags; uint16_t iDiameter; /* Make size and velocity a function of window size, so it appears the same at 100x60 as it does in 3200x1200. */ XGetWindowAttributes( dpy, NewWin, &XWinAttribs ); pBumps->iWinWidth = XWinAttribs.width; pBumps->iWinHeight = XWinAttribs.height; pBumps->SpotLight.nXPos = XWinAttribs.width / 2.0f; pBumps->SpotLight.nYPos = XWinAttribs.height / 2.0f; pBumps->SpotLight.nVelocityMax = ( ( XWinAttribs.width < XWinAttribs.height ) ? XWinAttribs.width : XWinAttribs.height ) / 140.0f; pBumps->SpotLight.nAccelMax = pBumps->SpotLight.nVelocityMax / 10.0f; pBumps->dpy = dpy; pBumps->Win = NewWin; pBumps->screen = XWinAttribs.screen; pBumps->pXImage = NULL; iDiameter = ( ( pBumps->iWinWidth < pBumps->iWinHeight ) ? pBumps->iWinWidth : pBumps->iWinHeight ) / 2; /* jwz: sometimes we get tearing if this lands on the wrong bounaary; constraining it to be a multiple of 8 seems to fix it. */ iDiameter = ((iDiameter+7)/8)*8; #ifdef HAVE_XSHM_EXTENSION pBumps->bUseShm = get_boolean_resource(dpy, "useSHM", "Boolean" ); if( pBumps->bUseShm ) { pBumps->pXImage = create_xshm_image( pBumps->dpy, XWinAttribs.visual, XWinAttribs.depth, ZPixmap, NULL, &pBumps->XShmInfo, iDiameter, iDiameter ); if( !pBumps->pXImage ) { fprintf( stderr, "%s: Unable to create XShmImage.\n", progname ); pBumps->bUseShm = False; } } #endif /* HAVE_XSHM_EXTENSION */ if( !pBumps->pXImage ) { pBumps->pXImage = XCreateImage( pBumps->dpy, XWinAttribs.visual, XWinAttribs.depth, ZPixmap, 0, NULL, iDiameter, iDiameter, BitmapPad( pBumps->dpy ), 0 ); pBumps->pXImage->data = malloc( pBumps->pXImage->bytes_per_line * pBumps->pXImage->height * sizeof(int8_t) ); } /* For speed, access the XImage data directly using my own PutPixel routine. */ switch( pBumps->pXImage->bits_per_pixel ) { case 32: pBumps->bytesPerPixel = 4; MyPutPixel = PutPixel32; break; case 24: pBumps->bytesPerPixel = 3; MyPutPixel = PutPixel24; break; case 16: pBumps->bytesPerPixel = 2; MyPutPixel = PutPixel16; break; case 8: pBumps->bytesPerPixel = 1; MyPutPixel = PutPixel8; break; default: fprintf( stderr, "%s: Unknown XImage depth.", progname ); #ifdef HAVE_XSHM_EXTENSION if( pBumps->bUseShm ) destroy_xshm_image( pBumps->dpy, pBumps->pXImage, &pBumps->XShmInfo ); else #endif /* HAVE_XSHM_EXTENSION */ XDestroyImage( pBumps->pXImage ); exit( 1 ); } GCValues.function = GXcopy; GCValues.subwindow_mode = IncludeInferiors; nGCFlags = GCFunction; if( use_subwindow_mode_p( XWinAttribs.screen, pBumps->Win ) ) /* See grabscreen.c */ nGCFlags |= GCSubwindowMode; pBumps->GraphicsContext = XCreateGC( pBumps->dpy, pBumps->Win, nGCFlags, &GCValues ); SetPalette(dpy, pBumps, &XWinAttribs ); CreateSpotLight( &pBumps->SpotLight, iDiameter, pBumps->nColorCount ); InitBumpMap(dpy, pBumps, &XWinAttribs ); } /* Creates a specialized phong shade palette. */ static void SetPalette(Display *dpy, SBumps *pBumps, XWindowAttributes *pXWinAttribs ) { XColor BaseColor; XColor Color; char *sColor; /* Spotlight Color */ int16_t iColor; sColor = get_string_resource(dpy, "color", "Color" ); BaseColor.red = RANDOM() % 0xFFFF; BaseColor.green = RANDOM() % 0xFFFF; BaseColor.blue = RANDOM() % 0xFFFF; /* Make one color full intesity to avoid dark spotlights. */ switch( RANDOM() % 3 ) { case 0: BaseColor.red = 0xFFFF; break; case 1: BaseColor.green = 0xFFFF; break; case 2: BaseColor.blue = 0xFFFF; break; } if( strcasecmp( sColor, "random" ) && !XParseColor( pBumps->dpy, pXWinAttribs->colormap, sColor, &BaseColor ) ) fprintf( stderr, "%s: color %s not found in database. Choosing random...\n", progname, sColor ); #ifdef VERBOSE printf( "%s: Spotlight color is <%d,%d,%d> RGB.\n", progclass, BaseColor.red, BaseColor.green, BaseColor.blue ); #endif /* VERBOSE */ pBumps->nColorCount = get_integer_resource(dpy, "colorcount", "Integer" ); if( pBumps->nColorCount < 2 ) pBumps->nColorCount = 2; if( pBumps->nColorCount > 128 ) pBumps->nColorCount = 128; pBumps->aColors = malloc( pBumps->nColorCount * sizeof(unsigned long) ); /* Creates a phong shade: / BaseColor \ Index/ColorCount * PhongShade = | ------------ | Index + ( 65535 - BaseColor )^ * \ ColorCount / */ pBumps->nColorCount--; for( iColor=0; iColor<=pBumps->nColorCount; iColor++ ) { Color.red = (uint16_t)( ( ( BaseColor.red / (double)pBumps->nColorCount ) * iColor ) + pow( 0xFFFF - BaseColor.red, iColor/(double)pBumps->nColorCount ) ); Color.green = (uint16_t)( ( ( BaseColor.green / (double)pBumps->nColorCount ) * iColor ) + pow( 0xFFFF - BaseColor.green, iColor/(double)pBumps->nColorCount ) ); Color.blue = (uint16_t)( ( ( BaseColor.blue / (double)pBumps->nColorCount ) * iColor ) + pow( 0xFFFF - BaseColor.blue, iColor/(double)pBumps->nColorCount ) ); if( !XAllocColor( pBumps->dpy, pXWinAttribs->colormap, &Color ) ) { XFreeColors( pBumps->dpy, pXWinAttribs->colormap, pBumps->aColors, iColor, 0 ); free( pBumps->aColors ); pBumps->aColors = malloc( pBumps->nColorCount * sizeof(unsigned long) ); pBumps->nColorCount--; iColor = -1; } else pBumps->aColors[ iColor ] = Color.pixel; } pBumps->nColorCount++; #ifdef VERBOSE printf( "%s: Allocated %d colors.\n", progclass, pBumps->nColorCount ); #endif /* VERBOSE */ XSetWindowBackground( pBumps->dpy, pBumps->Win, pBumps->aColors[ 0 ] ); } /* Grabs the current contents of the window to use an intensity-based bump map. */ static void InitBumpMap(Display *dpy, SBumps *pBumps, XWindowAttributes *pXWinAttribs ) { pBumps->xColors = (XColor*)malloc( pBumps->iWinWidth * sizeof(XColor) ); if (pBumps->source) abort(); pBumps->source = XCreatePixmap(pBumps->dpy, pBumps->Win, pXWinAttribs->width, pXWinAttribs->height, pXWinAttribs->depth); pBumps->img_loader = load_image_async_simple (0, pXWinAttribs->screen, pBumps->Win, pBumps->source, 0, 0); } static void InitBumpMap_2(Display *dpy, SBumps *pBumps) { XImage *pScreenImage; XColor *pColor; uint8_t nSoften; uint16_t iWidth, iHeight; uint32_t nAverager; uint16_t *pBump; uint16_t maxHeight; double softenMultiplier = 1.0f; BOOL bInvert = (BOOL)get_boolean_resource(dpy, "invert", "Boolean" ); XWindowAttributes XWinAttribs; XGetWindowAttributes( pBumps->dpy, pBumps->Win, &XWinAttribs ); pBumps->start_time = time ((time_t *) 0); pScreenImage = XGetImage( pBumps->dpy, pBumps->source, 0, 0, pBumps->iWinWidth, pBumps->iWinHeight, ~0L, ZPixmap ); /* XFreePixmap (pBumps->dpy, pBumps->source); pBumps->source = 0;*/ XSetWindowBackground( pBumps->dpy, pBumps->Win, pBumps->aColors[ 0 ] ); XClearWindow (pBumps->dpy, pBumps->Win); XSync (pBumps->dpy, 0); pBumps->aBumpMap = malloc( pBumps->iWinWidth * pBumps->iWinHeight * sizeof(uint16_t) ); nSoften = get_integer_resource(dpy, "soften", "Integer" ); while( nSoften-- ) softenMultiplier *= 1.0f + ( 1.0f / 3.0f ); /* Softening takes the max height down, so scale up to compensate. */ maxHeight = pBumps->SpotLight.nLightRadius * softenMultiplier; nAverager = maxHeight ? ( 3 * 0xFFFF ) / maxHeight : 0; pBump = pBumps->aBumpMap; if( bInvert ) /* Funny, it's actually the 'else' that inverts the bump map... */ { for( iHeight=0; iHeightiWinHeight; iHeight++ ) { pColor = pBumps->xColors; for( iWidth=0; iWidthiWinWidth; iWidth++ ) (pColor++)->pixel = XGetPixel( pScreenImage, iWidth, iHeight ); XQueryColors( pBumps->dpy, XWinAttribs.colormap, pBumps->xColors, pBumps->iWinWidth ); pColor = pBumps->xColors; for( iWidth=pBumps->iWinWidth; iWidth; --iWidth, ++pColor, ++pBump ) *pBump = ( nAverager ? ( pColor->red + pColor->green + pColor->blue ) / nAverager : 0 ); } } else { for( iHeight=0; iHeightiWinHeight; iHeight++ ) { pColor = pBumps->xColors; for( iWidth=0; iWidthiWinWidth; iWidth++ ) (pColor++)->pixel = XGetPixel( pScreenImage, iWidth, iHeight ); XQueryColors( pBumps->dpy, XWinAttribs.colormap, pBumps->xColors, pBumps->iWinWidth ); pColor = pBumps->xColors; for( iWidth=pBumps->iWinWidth; iWidth; --iWidth, ++pColor, ++pBump ) *pBump = ( maxHeight - ( nAverager ? ( pColor->red + pColor->green + pColor->blue ) / nAverager : 0 ) ); } } XDestroyImage( pScreenImage ); nSoften = get_integer_resource(dpy, "soften", "Integer" ); #ifdef VERBOSE if( nSoften ) printf( "%s: Softening Bump Map %d time(s)...\n", progclass, nSoften ); #endif while( nSoften-- ) SoftenBumpMap( pBumps ); /* free( pBumps->xColors ); pBumps->xColors = 0;*/ } /* Soften the bump map. This is to avoid pixelated-looking ridges. * |-----|-----|-----| * | 0% |12.5%| 0% | The adjacent pixels are averaged together * |-----|-----|-----| first. Then than value is averaged with * |12.5%| 50% |12.5%| the pixel is question. This essentially weights * |-----|-----|-----| each pixel as shown on the left. * | 0% |12.5%| 0% | * |-----|-----|-----| */ static void SoftenBumpMap( SBumps *pBumps ) { uint16_t *pOffset, *pTOffset; uint32_t nHeight; uint32_t iWidth, iHeight; uint16_t *aTempBuffer = malloc( pBumps->iWinWidth * pBumps->iWinHeight * sizeof(uint16_t) ); pOffset = pBumps->aBumpMap; pTOffset = aTempBuffer; for( iHeight=pBumps->iWinHeight; iHeight; --iHeight ) { for( iWidth=pBumps->iWinWidth; iWidth; --iWidth, ++pOffset, ++pTOffset ) { if( iHeight==pBumps->iWinHeight || iHeight==1 || iWidth==pBumps->iWinWidth || iWidth==1 ) { *pTOffset = 0; continue; } nHeight = pOffset[ -pBumps->iWinWidth ]; nHeight += pOffset[ 1 ]; nHeight += pOffset[ pBumps->iWinWidth ]; nHeight += pOffset[ -1 ]; nHeight >>= 2; nHeight += pOffset[ 0 ]; nHeight >>= 1; *pTOffset = nHeight; } } memcpy( pBumps->aBumpMap, aTempBuffer, pBumps->iWinWidth * pBumps->iWinHeight * sizeof(uint16_t) ); free( aTempBuffer ); } /* This is where we slap down some pixels... */ static void Execute( SBumps *pBumps ) { int32_t nLightXPos, nLightYPos; int32_t iScreenX, iScreenY; int32_t iLightX, iLightY; uint16_t *pBOffset; int8_t *pDOffset; int32_t nX, nY; uint16_t nColor; int32_t nLightOffsetFar = pBumps->SpotLight.nFalloffDiameter - pBumps->SpotLight.nLightRadius; CalcLightPos( pBumps ); /* Offset to upper left hand corner. */ nLightXPos = pBumps->SpotLight.nXPos - pBumps->SpotLight.nFalloffRadius; nLightYPos = pBumps->SpotLight.nYPos - pBumps->SpotLight.nFalloffRadius; for( iScreenY=nLightYPos, iLightY=-pBumps->SpotLight.nLightRadius; iLightY= pBumps->iWinHeight ) break; /* warning: pointer targets in assignment differ in signedness Should pDOffset be a int8? I can't tell. -jwz, 22-Jul-2003 */ pDOffset = (int8_t *) &pBumps->pXImage->data[ (iLightY+pBumps->SpotLight.nLightRadius) * pBumps->pXImage->bytes_per_line ]; pBOffset = pBumps->aBumpMap + ( iScreenY * pBumps->iWinWidth ) + nLightXPos; for( iScreenX=nLightXPos, iLightX=-pBumps->SpotLight.nLightRadius; iLightXbytesPerPixel ) { if( iScreenX < 0 ) continue; else if( iScreenX >= pBumps->iWinWidth ) break; else if( iScreenY == 0 || iScreenY >= pBumps->iWinHeight-2 || iScreenX == 0 || iScreenX >= pBumps->iWinWidth-2 ) { MyPutPixel( pDOffset, pBumps->aColors[ 0 ] ); continue; } /* That's right folks, all the magic of bump mapping occurs in these two lines. (kinda disappointing, isn't it?) */ nX = ( pBOffset[ 1 ] - pBOffset[ 0 ] ) + iLightX; nY = ( pBOffset[ pBumps->iWinWidth ] - pBOffset[ 0 ] ) + iLightY; if( nX<0 || nX>=pBumps->SpotLight.nLightDiameter || nY<0 || nY>=pBumps->SpotLight.nLightDiameter ) { MyPutPixel( pDOffset, pBumps->aColors[ 0 ] ); continue; } nColor = pBumps->SpotLight.aLightMap[ ( nY * pBumps->SpotLight.nLightDiameter ) + nX ]; MyPutPixel( pDOffset, pBumps->aColors[ nColor ] ); } } /* Allow the spotlight to go *slightly* off the screen by clipping the XImage. */ iLightX = iLightY = 0; /* Use these for XImages X and Y now. */ nX = nY = pBumps->SpotLight.nFalloffDiameter; /* Use these for XImage width and height now. */ if( nLightXPos < 0 ) { iLightX = -nLightXPos; nX -= iLightX; nLightXPos = 0; } else if( nLightXPos + nX >= pBumps->iWinWidth ) { nX -= ( nLightXPos + nX ) - pBumps->iWinWidth; } if( nLightYPos < 0 ) { iLightY = -nLightYPos; nY -= iLightY; nLightYPos = 0; } else if( nLightYPos + nY >= pBumps->iWinHeight ) { nY -= ( nLightYPos + nY ) - pBumps->iWinHeight; } #ifdef HAVE_XSHM_EXTENSION if( pBumps->bUseShm ) XShmPutImage( pBumps->dpy, pBumps->Win, pBumps->GraphicsContext, pBumps->pXImage, iLightX, iLightY, nLightXPos, nLightYPos, nX, nY, False); else #endif /* HAVE_XSHM_EXTENSION */ XPutImage( pBumps->dpy, pBumps->Win, pBumps->GraphicsContext, pBumps->pXImage, iLightX, iLightY, nLightXPos, nLightYPos, nX, nY ); } static void DestroySpotLight( SSpotLight *pSpotLight ) { free( pSpotLight->aLightMap ); } /* Clean up */ static void DestroyBumps( SBumps *pBumps ) { DestroySpotLight( &pBumps->SpotLight ); free( pBumps->aColors ); free( pBumps->aBumpMap ); #ifdef HAVE_XSHM_EXTENSION if( pBumps->bUseShm ) destroy_xshm_image( pBumps->dpy, pBumps->pXImage, &pBumps->XShmInfo ); else #endif /* HAVE_XSHM_EXTENSION */ XDestroyImage( pBumps->pXImage ); } /* All messages to the screensaver are processed here. */ static void * bumps_init (Display *dpy, Window Win) { SBumps *Bumps = (SBumps *) calloc (1, sizeof(SBumps)); #ifdef VERBOSE time_t Time = time( NULL ); uint16_t iFrame = 0; #endif /* VERBOSE */ CreateBumps( Bumps, dpy, Win ); Bumps->delay = get_integer_resource(dpy, "delay", "Integer" ); Bumps->duration = get_integer_resource (dpy, "duration", "Seconds"); if (Bumps->delay < 0) Bumps->delay = 0; if (Bumps->duration < 1) Bumps->duration = 1; Bumps->start_time = time ((time_t *) 0); return Bumps; } static unsigned long bumps_draw (Display *dpy, Window window, void *closure) { SBumps *Bumps = (SBumps *) closure; if (Bumps->img_loader) /* still loading */ { Bumps->img_loader = load_image_async_simple (Bumps->img_loader, 0, 0, 0, 0, 0); if (! Bumps->img_loader) /* just finished */ InitBumpMap_2(dpy, Bumps); return Bumps->delay; } if (!Bumps->img_loader && Bumps->start_time + Bumps->duration < time ((time_t *) 0)) { Bumps->img_loader = load_image_async_simple (0, Bumps->screen, Bumps->Win, Bumps->source, 0, 0); } Execute( Bumps ); #ifdef VERBOSE iFrame++; if( Time - time( NULL ) ) { printf( "FPS: %d\n", iFrame ); Time = time( NULL ); iFrame = 0; } #endif /* VERBOSE */ return Bumps->delay; } static void bumps_reshape (Display *dpy, Window window, void *closure, unsigned int w, unsigned int h) { } static Bool bumps_event (Display *dpy, Window window, void *closure, XEvent *event) { SBumps *Bumps = (SBumps *) closure; if (screenhack_event_helper (dpy, window, event)) { Bumps->start_time = 0; return True; } return False; } static void bumps_free (Display *dpy, Window window, void *closure) { SBumps *Bumps = (SBumps *) closure; DestroyBumps( Bumps ); } XSCREENSAVER_MODULE ("Bumps", bumps) /* vim: ts=4 */ xscreensaver-5.36/hacks/ripples.c000644 000767 000024 00000101015 12710314357 017052 0ustar00jwzstaff000000 000000 /* ripples, Copyright (c) 1999 Ian McConnell * * 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. */ /* * "Water" ripples that can cross and interfere with each other. * * I can't remember where I got this idea from, but it's been around for a * while in various demos. Some inspiration from * water.txt by Tom Hammersley,tomh@globalnet.co.uk * * Options * -delay usleep every iteration * -rate Add one drop every "rate" iterations * -box Add big square splash every "box" iters (not very good) * -water Ripples on a grabbed background image * -foreground Interpolate ripples between these two colors * -background * -oily Psychedelic colours like man * -stir Add a regular pattern of drops * -fluidity Between 0 and 16. 16 = big drops * -light Hack to add lighting effect * * Code mainly hacked from xflame and decayscreen. */ /* Version history: * 13 Oct 1999: Initial hack * 30 Oct 1999: Speeded up graphics with dirty buffer. Returned to using * putpixel for greater portability * Added a variety of methods for splashing screen. * 31 Oct 1999: Added in lighting hack * 13 Nov 1999: Speed up tweaks * Adjust "light" for different bits per colour (-water only) * */ #include #include "screenhack.h" typedef enum {ripple_drop, ripple_blob, ripple_box, ripple_stir} ripple_mode; #ifdef HAVE_XSHM_EXTENSION #include "xshm.h" #endif /* HAVE_XSHM_EXTENSION */ #define TABLE 256 struct state { Display *dpy; Window window; GC gc; Visual *visual; XImage *orig_map, *buffer_map; int ctab[256]; Colormap colormap; Screen *screen; int ncolors; int light; int width, height; /* ripple size */ int bigwidth, bigheight; /* screen size */ Bool transparent; short *bufferA, *bufferB, *temp; char *dirty_buffer; double cos_tab[TABLE]; Bool grayscale_p; unsigned long rmask; /* This builds on the warp effect by adding */ unsigned long gmask; /* in a lighting effect: brighten pixels by an */ unsigned long bmask; /* amount corresponding to the vertical gradient */ int rshift; int gshift; int bshift; double stir_ang; int draw_toggle; int draw_count; int iterations, delay, rate, box, oily, stir, fluidity; int duration; time_t start_time; void (*draw_transparent) (struct state *st, short *src); async_load_state *img_loader; #ifdef HAVE_XSHM_EXTENSION Bool use_shm; XShmSegmentInfo shm_info; #endif /* HAVE_XSHM_EXTENSION */ }; /* Distribution of drops: many little ones and a few big ones. */ static const double drop_dist[] = {0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.2, 0.6}; /* How hard to hit the water */ #define SPLASH 512 #undef MIN #define MIN(x, y) ((x) < (y) ? (x) : (y)) #undef MAX #define MAX(x, y) ((x) > (y) ? (x) : (y)) #undef DIRTY #define DIRTY 3 /* dirty >= 2, 1 = restore original pixel, 0 = leave alone */ /* From fortune(6) */ /* -- really weird C code to count the number of bits in a word */ #define BITCOUNT(x) (((BX_(x)+(BX_(x)>>4)) & 0x0F0F0F0F) % 255) #define BX_(x) ((x) - (((x)>>1)&0x77777777) \ - (((x)>>2)&0x33333333) \ - (((x)>>3)&0x11111111)) static unsigned long grayscale(struct state *st, unsigned long color); /* ------------------------------------------- */ static int map_color(struct state *st, int grey) { /* Clip it */ grey = st->ncolors * abs(grey) / (SPLASH/4); if (grey > st->ncolors) grey = st->ncolors; /* Display it */ return st->ctab[grey]; } static void draw_ripple(struct state *st, short *src) { int across, down; char *dirty = st->dirty_buffer; for (down = 0; down < st->height - 1; down++, src += 1, dirty += 1) for (across = 0; across < st->width - 1; across++, src++, dirty++) { int v1, v2, v3, v4; v1 = (int)*src; v2 = (int)*(src + 1); v3 = (int)*(src + st->width); v4 = (int)*(src + st->width + 1); if ((v1 == 0 && v2 == 0 && v3 == 0 && v4 == 0)) { if (*dirty > 0) (*dirty)--; } else *dirty = DIRTY; if (*dirty > 0) { int dx; if (st->light > 0) { dx = ((v3 - v1) + (v4 - v2)) << st->light; /* light from top */ } else dx = 0; XPutPixel(st->buffer_map,(across<<1), (down<<1), map_color(st, dx + v1)); XPutPixel(st->buffer_map,(across<<1)+1,(down<<1), map_color(st, dx + ((v1 + v2) >> 1))); XPutPixel(st->buffer_map,(across<<1), (down<<1)+1,map_color(st, dx + ((v1 + v3) >> 1))); XPutPixel(st->buffer_map,(across<<1)+1,(down<<1)+1,map_color(st, dx + ((v1 + v4) >> 1))); } } } /* ------------------------------------------- */ /* Uses the horizontal gradient as an offset to create a warp effect */ static void draw_transparent_vanilla(struct state *st, short *src) { int across, down, pixel; char *dirty = st->dirty_buffer; pixel = 0; for (down = 0; down < st->height - 2; down++, pixel += 2) for (across = 0; across < st->width-2; across++, pixel++) { int gradx, grady, gradx1, grady1; int x0, x1, x2, y1, y2; x0 = src[pixel]; x1 = src[pixel + 1]; x2 = src[pixel + 2]; y1 = src[pixel + st->width]; y2 = src[pixel + 2*st->width]; gradx = (x1 - x0); grady = (y1 - x0); gradx1= (x2 - x1); grady1= (y2 - y1); gradx1 = 1 + (gradx + gradx1) / 2; grady1 = 1 + (grady + grady1) / 2; if ((2*across+MIN(gradx,gradx1) < 0) || (2*across+MAX(gradx,gradx1) >= st->bigwidth)) { gradx = 0; gradx1= 1; } if ((2*down+MIN(grady,grady1) < 0) || (2*down+MAX(grady,grady1) >= st->bigheight)) { grady = 0; grady1 = 1; } if ((gradx == 0 && gradx1 == 1 && grady == 0 && grady1 == 1)) { if (dirty[pixel] > 0) dirty[pixel]--; } else dirty[pixel] = DIRTY; if (dirty[pixel] > 0) { XPutPixel(st->buffer_map, (across<<1), (down<<1), grayscale(st, XGetPixel(st->orig_map, (across<<1) + gradx, (down<<1) + grady))); XPutPixel(st->buffer_map, (across<<1)+1,(down<<1), grayscale(st, XGetPixel(st->orig_map, (across<<1) + gradx1,(down<<1) + grady))); XPutPixel(st->buffer_map, (across<<1), (down<<1)+1, grayscale(st, XGetPixel(st->orig_map, (across<<1) + gradx, (down<<1) + grady1))); XPutPixel(st->buffer_map, (across<<1)+1,(down<<1)+1, grayscale(st, XGetPixel(st->orig_map, (across<<1) + gradx1,(down<<1) + grady1))); } } } /* ------------------------------------------- */ static void set_mask(unsigned long color, unsigned long *mask, int *shift) { *shift = 0; while (color != 0 && (color & 1) == 0) { (*shift)++; color >>= 1; } *mask = color; } static unsigned long cadd(unsigned long color, int dx, unsigned long mask, int shift) { int x; color >>= shift; x = (color & mask); x += dx; if (x < 0) x = 0; else if (x > (int)mask) x = mask; color = x; return color << shift; } static unsigned long bright(struct state *st, int dx, unsigned long color) { return (cadd(color, dx, st->rmask, st->rshift) | cadd(color, dx, st->gmask, st->gshift) | cadd(color, dx, st->bmask, st->bshift)); } static unsigned long grayscale(struct state *st, unsigned long color) { int red; int green; int blue; int total; int gray_r; int gray_g; int gray_b; if (!st->grayscale_p) return color; if (!st->transparent) return color; if ((st->rmask == 0) || (st->gmask == 0) || (st->bmask == 0)) return color; red = ((color >> st->rshift) & st->rmask); green = ((color >> st->gshift) & st->gmask); blue = ((color >> st->bshift) & st->bmask); total = red * st->gmask * st->bmask + green * st->rmask * st->bmask + blue * st->rmask * st->gmask; gray_r = total / (3 * st->gmask * st->bmask); if (gray_r < 0) gray_r = 0; if (gray_r > st->rmask) gray_r = st->rmask; gray_g = total / (3 * st->rmask * st->bmask); if (gray_g < 0) gray_g = 0; if (gray_g > st->gmask) gray_g = st->gmask; gray_b = total / (3 * st->rmask * st->gmask); if (gray_b < 0) gray_b = 0; if (gray_b > st->bmask) gray_b = st->bmask; return ((unsigned long) ((gray_r << st->rshift) | (gray_g << st->gshift) | (gray_b << st->bshift))); } static void draw_transparent_light(struct state *st, short *src) { int across, down, pixel; char *dirty = st->dirty_buffer; pixel = 0; for (down = 0; down < st->height - 2; down++, pixel += 2) for (across = 0; across < st->width-2; across++, pixel++) { int gradx, grady, gradx1, grady1; int x0, x1, x2, y1, y2; x0 = src[pixel]; x1 = src[pixel + 1]; x2 = src[pixel + 2]; y1 = src[pixel + st->width]; y2 = src[pixel + 2*st->width]; gradx = (x1 - x0); grady = (y1 - x0); gradx1= (x2 - x1); grady1= (y2 - y1); gradx1 = 1 + (gradx + gradx1) / 2; grady1 = 1 + (grady + grady1) / 2; if ((2*across+MIN(gradx,gradx1) < 0) || (2*across+MAX(gradx,gradx1) >= st->bigwidth)) { gradx = 0; gradx1= 1; } if ((2*down+MIN(grady,grady1) < 0) || (2*down+MAX(grady,grady1) >= st->bigheight)) { grady = 0; grady1 = 1; } if ((gradx == 0 && gradx1 == 1 && grady == 0 && grady1 == 1)) { if (dirty[pixel] > 0) dirty[pixel]--; } else dirty[pixel] = DIRTY; if (dirty[pixel] > 0) { int dx; /* light from top */ if (4-st->light >= 0) dx = (grady + (src[pixel+st->width+1]-x1)) >> (4-st->light); else dx = (grady + (src[pixel+st->width+1]-x1)) << (st->light-4); if (dx != 0) { XPutPixel(st->buffer_map, (across<<1), (down<<1), bright(st, dx, grayscale(st, XGetPixel(st->orig_map, (across<<1) + gradx, (down<<1) + grady)))); XPutPixel(st->buffer_map, (across<<1)+1,(down<<1), bright(st, dx, grayscale(st, XGetPixel(st->orig_map, (across<<1) + gradx1,(down<<1) + grady)))); XPutPixel(st->buffer_map, (across<<1), (down<<1)+1, bright(st, dx, grayscale(st, XGetPixel(st->orig_map, (across<<1) + gradx, (down<<1) + grady1)))); XPutPixel(st->buffer_map, (across<<1)+1,(down<<1)+1, bright(st, dx, grayscale(st, XGetPixel(st->orig_map, (across<<1) + gradx1,(down<<1) + grady1)))); } else { /* Could use XCopyArea, but XPutPixel is faster */ XPutPixel(st->buffer_map, (across<<1), (down<<1), grayscale(st, XGetPixel(st->orig_map, (across<<1) + gradx, (down<<1) + grady))); XPutPixel(st->buffer_map, (across<<1)+1,(down<<1), grayscale(st, XGetPixel(st->orig_map, (across<<1) + gradx1,(down<<1) + grady))); XPutPixel(st->buffer_map, (across<<1), (down<<1)+1, grayscale(st, XGetPixel(st->orig_map, (across<<1) + gradx, (down<<1) + grady1))); XPutPixel(st->buffer_map, (across<<1)+1,(down<<1)+1, grayscale(st, XGetPixel(st->orig_map, (across<<1) + gradx1,(down<<1) + grady1))); } } } } /* ------------------------------------------- */ #if 0 /* Doesn't go any faster and doesn't work at all colour depths */ static void draw_transparent16l(short *src) { int across, down, bigpix, pixel; char *dirty = st->dirty_buffer; unsigned short *buffer, *orig; buffer = (unsigned short *) st->buffer_map->data; orig = (unsigned short *) st->orig_map->data; for (pixel = bigpix = down = 0; down < st->height - 2; down++, pixel += 2, bigpix += st->bigwidth+4) for (across = 0; across < st->width-2; across++, pixel++, bigpix+=2) { int gradx, grady, gradx1, grady1; int x0, x1, x2, y1, y2; x0 = src[pixel]; x1 = src[pixel + 1]; x2 = src[pixel + 2]; y1 = src[pixel + st->width]; y2 = src[pixel + 2*st->width]; gradx = (x1 - x0); grady = (y1 - x0); gradx1= (x2 - x1); grady1= (y2 - y1); gradx1 = 1 + (gradx + gradx1) / 2; grady1 = 1 + (grady + grady1) / 2; if ((2*across+MIN(gradx,gradx1) < 0) || (2*across+MAX(gradx,gradx1) >= st->bigwidth)) { gradx = 0; gradx1= 1; } if ((2*down+MIN(grady,grady1) < 0) || (2*down+MAX(grady,grady1) >= st->bigheight)) { grady = 0; grady1 = 1; } if ((gradx == 0 && gradx1 == 1 && grady == 0 && grady1 == 1)) { if (dirty[pixel] > 0) dirty[pixel]--; } else dirty[pixel] = DIRTY; if (dirty[pixel] > 0) { unsigned short *dest = buffer + bigpix; unsigned short *image = orig + bigpix; int dx; /* light from top */ if (4-st->light >= 0) dx = (grady + (src[pixel+st->width+1]-x1)) >> (4-st->light); else dx = (grady + (src[pixel+st->width+1]-x1)) << (st->light-4); grady *= st->bigwidth; grady1*= st->bigwidth; if (dx != 0) { *dest++ = dobright(dx, *(image + gradx + grady)); *dest = dobright(dx, *(image + gradx1 + grady)); dest += st->bigwidth - 1; *dest++ = dobright(dx, *(image + gradx + grady1)); *dest = dobright(dx, *(image + gradx1 + grady1)); } else { *dest++ = *(image + gradx + grady); *dest = *(image + gradx1 + grady); dest += st->bigwidth - 1; *dest++ = *(image + gradx + grady1); *dest = *(image + gradx1 + grady1); } } } } #endif /* ------------------------------------------- */ static void setup_X(struct state *st) { XWindowAttributes xgwa; int depth; XGetWindowAttributes(st->dpy, st->window, &xgwa); depth = xgwa.depth; st->colormap = xgwa.colormap; st->screen = xgwa.screen; st->bigwidth = xgwa.width; st->bigheight = xgwa.height; st->visual = xgwa.visual; /* This causes buffer_map to be 1 pixel taller and wider than orig_map, which can cause the two XImages to have different bytes-per-line, which causes stair-stepping. So this better not be necessary... -jwz, 23-Nov-01 */ #if 0 /* I'm not entirely sure if I need this */ if (st->bigwidth % 2) st->bigwidth++; if (st->bigheight % 2) st->bigheight++; #endif st->width = st->bigwidth / 2; st->height = st->bigheight / 2; if (st->transparent) { XGCValues gcv; long gcflags; gcv.function = GXcopy; gcv.subwindow_mode = IncludeInferiors; gcflags = GCFunction; if (use_subwindow_mode_p(xgwa.screen, st->window)) /* see grabscreen.c */ gcflags |= GCSubwindowMode; st->gc = XCreateGC(st->dpy, st->window, gcflags, &gcv); st->img_loader = load_image_async_simple (0, xgwa.screen, st->window, st->window, 0, 0); st->start_time = time ((time_t *) 0); } else { XGCValues gcv; st->gc = XCreateGC(st->dpy, st->window, 0, &gcv); st->orig_map = 0; } if (!st->gc) { fprintf(stderr, "XCreateGC failed\n"); exit(1); } st->buffer_map = 0; #ifdef HAVE_XSHM_EXTENSION if (st->use_shm) { st->buffer_map = create_xshm_image(st->dpy, xgwa.visual, depth, ZPixmap, 0, &st->shm_info, st->bigwidth, st->bigheight); if (!st->buffer_map) { st->use_shm = False; fprintf(stderr, "create_xshm_image failed\n"); } } #endif /* HAVE_XSHM_EXTENSION */ if (!st->buffer_map) { st->buffer_map = XCreateImage(st->dpy, xgwa.visual, depth, ZPixmap, 0, 0, st->bigwidth, st->bigheight, 8, 0); st->buffer_map->data = (char *) calloc(st->buffer_map->height, st->buffer_map->bytes_per_line); } } static void DisplayImage(struct state *st) { #ifdef HAVE_XSHM_EXTENSION if (st->use_shm) XShmPutImage(st->dpy, st->window, st->gc, st->buffer_map, 0, 0, 0, 0, st->bigwidth, st->bigheight, False); else #endif /* HAVE_XSHM_EXTENSION */ XPutImage(st->dpy, st->window, st->gc, st->buffer_map, 0, 0, 0, 0, st->bigwidth, st->bigheight); } /* ------------------------------------------- */ static int cinterp(double a, int bg, int fg) { int result; result = (int)((1-a) * bg + a * fg + 0.5); if (result < 0) result = 0; if (result > 255) result = 255; return result; } /* Interpolate the ripple colours between the background colour and foreground colour */ static void init_linear_colors(struct state *st) { int i, j, red, green, blue, bred, bgreen, bblue; XColor fg, bg; if (st->ncolors < 2 || mono_p) st->ncolors = 2; if (st->ncolors <= 2) mono_p = True; /* Make it possible to set the color of the ripples, Based on work by Raymond Medeiros and jwz. */ fg.pixel = get_pixel_resource(st->dpy, st->colormap, "foreground", "Foreground"); XQueryColor(st->dpy, st->colormap, &fg); red = (fg.red >> 8); green = (fg.green >> 8); blue = (fg.blue >> 8); bg.pixel = get_pixel_resource(st->dpy, st->colormap, "background", "Background"); XQueryColor(st->dpy, st->colormap, &bg); bred = (bg.red >> 8); bgreen = (bg.green >> 8); bblue = (bg.blue >> 8); j = 0; for (i = 0; i < st->ncolors+1; i++) { XColor xcl; double a = (double)i / st->ncolors; int r = cinterp(a, bred, red); int g = cinterp(a, bgreen, green); int b = cinterp(a, bblue, blue); xcl.red = (unsigned short) ((r << 8) | r); xcl.green = (unsigned short) ((g << 8) | g); xcl.blue = (unsigned short) ((b << 8) | b); xcl.flags = DoRed | DoGreen | DoBlue; XAllocColor(st->dpy, st->colormap, &xcl); st->ctab[j++] = (int) xcl.pixel; } } static void init_oily_colors(struct state *st) { XColor *colors = NULL; if (st->ncolors < 2 || mono_p) st->ncolors = 2; if (st->ncolors <= 2) mono_p = True; colors = 0; if (!mono_p) { colors = (XColor *)malloc(sizeof(*colors) * (st->ncolors+1)); make_smooth_colormap(st->screen, st->visual, st->colormap, colors, &st->ncolors, True, /* allocate */ False, /* not writable */ True); /* verbose (complain about failure) */ if (st->ncolors <= 2) { if (colors) free (colors); colors = 0; mono_p = True; } } if (!mono_p) { int i, j = 0; for (i = 0; i < st->ncolors+1; i++) { XAllocColor(st->dpy, st->colormap, colors+i); st->ctab[j++] = (int) colors[i].pixel; } free (colors); } else { st->ncolors = 2; st->ctab[1] = get_pixel_resource(st->dpy, st->colormap, "foreground", "Foreground"); st->ctab[0] = get_pixel_resource(st->dpy, st->colormap, "background", "Background"); } } /* ------------------------------------------- */ static void init_cos_tab(struct state *st) { int i; for (i = 0; i < TABLE; i++) st->cos_tab[i] = cos(i * M_PI/2 / TABLE); } /* Shape of drop to add */ static double sinc(struct state *st, double x) { #if 1 /* cosine hump */ int i; i = (int)(x * TABLE + 0.5); if (i >= TABLE) i = (TABLE-1) - (i-(TABLE-1)); if (i < 0) return 0.; return st->cos_tab[i]; #elif 0 return cos(x * M_PI/2); #else if (fabs(x) < 0.1) return 1 - x*x; else return sin(x) / x; #endif } static void add_circle_drop(struct state *st, int x, int y, int radius, int dheight) { int r, r2, cx, cy; short *buf = (random()&1) ? st->bufferA : st->bufferB; r2 = radius * radius; for (cy = -radius; cy <= radius; cy++) for (cx = -radius; cx <= radius; cx++) { int xx = x+cx; int yy = y+cy; if (xx < 0 || yy < 0 || xx >= st->width || yy >= st->height) {break;} r = cx*cx + cy*cy; if (r > r2) break; buf[xx + yy*st->width] = (short)(dheight * sinc(st, (radius > 0) ? sqrt(r)/radius : 0)); } } static void add_drop(struct state *st, ripple_mode mode, int drop) { int newx, newy, dheight; int radius = MIN(st->width, st->height) / 50; /* Don't put drops too near the edge of the screen or they get stuck */ int border = 8; switch (mode) { default: case ripple_drop: { int x; dheight = 1 + (random() % drop); newx = border + (random() % (st->width - 2*border)); newy = border + (random() % (st->height - 2*border)); x = newy * st->width + newx; st->bufferA[x + 1] = st->bufferA[x] = st->bufferA[x + st->width] = st->bufferA[x + st->width + 1] = st->bufferB[x + 1] = st->bufferB[x] = st->bufferB[x + st->width] = st->bufferB[x + st->width + 1] = dheight; } break; case ripple_blob: { double power; int tmp_i, tmp_j; power = drop_dist[random() % (sizeof(drop_dist)/sizeof(drop_dist[0]))]; /* clumsy */ dheight = (int)(drop * (power + 0.01)); tmp_i = (int)(st->width - 2*border - 2*radius*power); tmp_j = (int)(st->height - 2*border - 2*radius*power); newx = radius + border + ((tmp_i > 0) ? random() % tmp_i : 0); newy = radius + border + ((tmp_j > 0) ? random() % tmp_j : 0); add_circle_drop(st, newx, newy, radius, dheight); } break; /* Adding too many boxes too quickly (-box 1) doesn't give the waves time to disperse and the waves build up (and overflow) */ case ripple_box: { int x; int cx, cy; short *buf = (random()&1) ? st->bufferA : st->bufferB; int tmp_i, tmp_j; radius = (1 + (random() % 5)) * (1 + (random() % 5)); dheight = drop / 128; if (random() & 1) dheight = -dheight; tmp_i = st->width - 2*border - 2*radius; tmp_j = st->height - 2*border - 2*radius; newx = radius + border + ((tmp_i > 0) ? random() % tmp_i : 0); newy = radius + border + ((tmp_j > 0) ? random() % tmp_j : 0); x = newy * st->width + newx; for (cy = -radius; cy <= radius; cy++) for (cx = -radius; cx <= radius; cx++) buf[x + cx + cy*st->width] = (short)(dheight); } break; case ripple_stir: { border += radius; newx = border + (int)((st->width-2*border) * (1+cos(3*st->stir_ang)) / 2); newy = border + (int)((st->height-2*border) * (1+sin(2*st->stir_ang)) / 2); add_circle_drop(st, newx, newy, radius, drop / 10); st->stir_ang += 0.02; if (st->stir_ang > 12*M_PI) st->stir_ang = 0; } break; } } static void init_ripples(struct state *st, int ndrops, int splash) { int i; st->bufferA = (short *)calloc(st->width * st->height, sizeof(*st->bufferA)); st->bufferB = (short *)calloc(st->width * st->height, sizeof(*st->bufferB)); st->temp = (short *)calloc(st->width * st->height, sizeof(*st->temp)); st->dirty_buffer = (char *)calloc(st->width * st->height, sizeof(*st->dirty_buffer)); for (i = 0; i < ndrops; i++) add_drop(st, ripple_blob, splash); if (st->transparent) { if (st->grayscale_p) { int across, down; for (down = 0; down < st->bigheight; down++) for (across = 0; across < st->bigwidth; across++) XPutPixel(st->buffer_map, across, down, grayscale(st, XGetPixel(st->orig_map, across, down))); } else { /* There's got to be a better way of doing this XCopyArea? */ memcpy(st->buffer_map->data, st->orig_map->data, st->bigheight * st->buffer_map->bytes_per_line); } } else { int across, down, color; color = map_color(st, 0); /* background colour */ for (down = 0; down < st->bigheight; down++) for (across = 0; across < st->bigwidth; across++) XPutPixel(st->buffer_map,across, down, color); } DisplayImage(st); } /* Explanation from hq_water.zip (Arturo R Montesinos (ARM) arami@fi.upm.es) Differential equation is: u = a ( u + u ) tt xx yy Where a = tension * gravity / surface_density. Approximating second derivatives by central differences: [ u(t+1)-2u(t)+u(t-1) ] / dt = a [ u(x+1)+u(x-1)+u(y+1)+u(y-1)-4u ] / h where dt = time step squared, h = dx*dy = mesh resolution squared. From where u(t+1) may be calculated as: dt | 1 | dt u(t+1) = a -- | 1 0 1 |u - u(t-1) + (2-4a --)u h | 1 | h When a*dt/h = 1/2 last term vanishes, giving: 1 | 1 | u(t+1) = - | 1 0 1 |u - u(t-1) 2 | 1 | (note that u(t-1,x,y) is only used to calculate u(t+1,x,y) so we can use the same array for both t-1 and t+1, needing only two arrays, U[0] and U[1]) Dampening is simulated by subtracting 1/2^n of result. n=4 gives best-looking result n<4 (eg 2 or 3) thicker consistency, waves die out immediately n>4 (eg 8 or 12) more fluid, waves die out slowly */ static void ripple(struct state *st) { int across, down, pixel; short *src, *dest; if (st->draw_toggle == 0) { src = st->bufferA; dest = st->bufferB; st->draw_toggle = 1; } else { src = st->bufferB; dest = st->bufferA; st->draw_toggle = 0; } switch (st->draw_count) { case 0: case 1: pixel = 1 * st->width + 1; for (down = 1; down < st->height - 1; down++, pixel += 2 * 1) for (across = 1; across < st->width - 1; across++, pixel++) { st->temp[pixel] = (((src[pixel - 1] + src[pixel + 1] + src[pixel - st->width] + src[pixel + st->width]) / 2)) - dest[pixel]; } /* Smooth the output */ pixel = 1 * st->width + 1; for (down = 1; down < st->height - 1; down++, pixel += 2 * 1) for (across = 1; across < st->width - 1; across++, pixel++) { if (st->temp[pixel] != 0) { /* Close enough for government work */ int damp = (st->temp[pixel - 1] + st->temp[pixel + 1] + st->temp[pixel - st->width] + st->temp[pixel + st->width] + st->temp[pixel - st->width - 1] + st->temp[pixel - st->width + 1] + st->temp[pixel + st->width - 1] + st->temp[pixel + st->width + 1] + st->temp[pixel]) / 9; dest[pixel] = damp - (damp >> st->fluidity); } else dest[pixel] = 0; } break; case 2: case 3: pixel = 1 * st->width + 1; for (down = 1; down < st->height - 1; down++, pixel += 2 * 1) for (across = 1; across < st->width - 1; across++, pixel++) { int damp = (((src[pixel - 1] + src[pixel + 1] + src[pixel - st->width] + src[pixel + st->width]) / 2)) - dest[pixel]; dest[pixel] = damp - (damp >> st->fluidity); } break; } if (++st->draw_count > 3) st->draw_count = 0; if (st->transparent) st->draw_transparent(st, dest); else draw_ripple(st, dest); } /* ------------------------------------------- */ static void * ripples_init (Display *disp, Window win) { struct state *st = (struct state *) calloc (1, sizeof(*st)); st->dpy = disp; st->window = win; st->iterations = 0; st->delay = get_integer_resource(disp, "delay", "Integer"); st->duration = get_integer_resource (st->dpy, "duration", "Seconds"); st->rate = get_integer_resource(disp, "rate", "Integer"); st->box = get_integer_resource(disp, "box", "Integer"); st->oily = get_boolean_resource(disp, "oily", "Boolean"); st->stir = get_boolean_resource(disp, "stir", "Boolean"); st->fluidity = get_integer_resource(disp, "fluidity", "Integer"); st->transparent = get_boolean_resource(disp, "water", "Boolean"); st->grayscale_p = get_boolean_resource(disp, "grayscale", "Boolean"); #ifdef HAVE_XSHM_EXTENSION st->use_shm = get_boolean_resource(disp, "useSHM", "Boolean"); #endif /* HAVE_XSHM_EXTENSION */ st->light = get_integer_resource(disp, "light", "Integer"); if (st->delay < 0) st->delay = 0; if (st->duration < 1) st->duration = 1; if (st->fluidity <= 1) st->fluidity = 1; if (st->fluidity > 16) st->fluidity = 16; /* 16 = sizeof(short) */ if (st->light < 0) st->light = 0; init_cos_tab(st); setup_X(st); st->ncolors = get_integer_resource (disp, "colors", "Colors"); if (0 == st->ncolors) /* English spelling? */ st->ncolors = get_integer_resource (disp, "colours", "Colors"); if (st->ncolors > sizeof(st->ctab)/sizeof(*st->ctab)) st->ncolors = sizeof(st->ctab)/sizeof(*st->ctab); if (st->oily) init_oily_colors(st); else init_linear_colors(st); if (st->transparent && st->light > 0) { int maxbits; st->draw_transparent = draw_transparent_light; set_mask(st->visual->red_mask, &st->rmask, &st->rshift); set_mask(st->visual->green_mask, &st->gmask, &st->gshift); set_mask(st->visual->blue_mask, &st->bmask, &st->bshift); if (st->rmask == 0) st->draw_transparent = draw_transparent_vanilla; /* Adjust the shift value "light" when we don't have 8 bits per colour */ maxbits = MIN(MIN(BITCOUNT(st->rmask), BITCOUNT(st->gmask)), BITCOUNT(st->bmask)); st->light -= 8-maxbits; if (st->light < 0) st->light = 0; } else { if (st->grayscale_p) { set_mask(st->visual->red_mask, &st->rmask, &st->rshift); set_mask(st->visual->green_mask, &st->gmask, &st->gshift); set_mask(st->visual->blue_mask, &st->bmask, &st->bshift); } st->draw_transparent = draw_transparent_vanilla; } if (!st->transparent) init_ripples(st, 0, -SPLASH); /* Start off without any drops */ return st; } static unsigned long ripples_draw (Display *dpy, Window window, void *closure) { struct state *st = (struct state *) closure; if (st->img_loader) /* still loading */ { st->img_loader = load_image_async_simple (st->img_loader, 0, 0, 0, 0, 0); if (! st->img_loader) { /* just finished */ XWindowAttributes xgwa; XGetWindowAttributes(st->dpy, st->window, &xgwa); st->start_time = time ((time_t *) 0); st->orig_map = XGetImage (st->dpy, st->window, 0, 0, xgwa.width, xgwa.height, ~0L, ZPixmap); init_ripples(st, 0, -SPLASH); /* Start off without any drops */ } return st->delay; } if (!st->img_loader && st->start_time + st->duration < time ((time_t *) 0)) { 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); return st->delay; } if (st->rate > 0 && (st->iterations % st->rate) == 0) add_drop(st, ripple_blob, -SPLASH); if (st->stir) add_drop(st, ripple_stir, -SPLASH); if (st->box > 0 && (random() % st->box) == 0) add_drop(st, ripple_box, -SPLASH); ripple(st); DisplayImage(st); st->iterations++; return st->delay; } static void ripples_reshape (Display *dpy, Window window, void *closure, unsigned int w, unsigned int h) { } static Bool ripples_event (Display *dpy, Window window, void *closure, XEvent *event) { struct state *st = (struct state *) closure; if (screenhack_event_helper (dpy, window, event)) { st->start_time = 0; return True; } return False; } static void ripples_free (Display *dpy, Window window, void *closure) { struct state *st = (struct state *) closure; free (st); } static const char *ripples_defaults[] = { ".background: black", ".foreground: #FFAF5F", "*colors: 200", "*dontClearRoot: True", "*delay: 50000", "*duration: 120", "*rate: 5", "*box: 0", "*water: True", "*oily: False", "*stir: False", "*fluidity: 6", "*light: 4", "*grayscale: False", #ifdef HAVE_XSHM_EXTENSION "*useSHM: True", #else "*useSHM: False", #endif #ifdef HAVE_MOBILE "*ignoreRotation: True", "*rotateImages: True", #endif 0 }; static XrmOptionDescRec ripples_options[] = { { "-colors", ".colors", XrmoptionSepArg, 0}, { "-colours", ".colors", XrmoptionSepArg, 0}, {"-delay", ".delay", XrmoptionSepArg, 0}, {"-duration", ".duration", XrmoptionSepArg, 0 }, {"-rate", ".rate", XrmoptionSepArg, 0}, {"-box", ".box", XrmoptionSepArg, 0}, {"-water", ".water", XrmoptionNoArg, "True"}, {"-oily", ".oily", XrmoptionNoArg, "True"}, {"-stir", ".stir", XrmoptionNoArg, "True"}, {"-fluidity", ".fluidity", XrmoptionSepArg, 0}, {"-light", ".light", XrmoptionSepArg, 0}, {"-grayscale", ".grayscale", XrmoptionNoArg, "True"}, {"-shm", ".useSHM", XrmoptionNoArg, "True"}, {"-no-shm", ".useSHM", XrmoptionNoArg, "False"}, {0, 0, 0, 0} }; XSCREENSAVER_MODULE ("Ripples", ripples) xscreensaver-5.36/hacks/xspirograph.c000644 000767 000024 00000022725 12710314431 017745 0ustar00jwzstaff000000 000000 /* The Spiral Generator, Copyright (c) 2000 * by Rohit Singh * * Contains code from / To be used with: * xscreensaver, Copyright (c) 1992, 1995, 1996, 1997 * 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 notices appear in all copies and that both that * copyright notices 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. * * Modified (Dec 2001) by Matthew Strait * Added -subdelay and -alwaysfinish * Prevented redrawing over existing lines */ #include #include "screenhack.h" #include "erase.h" struct state { Display *dpy; Window window; XWindowAttributes xgwa; GC draw_gc; int long_delay; int sub_sleep_time; int num_layers; unsigned int default_fg_pixel; Bool always_finish_p; XColor color; int got_color; int theta; float firstx, firsty; int x1, y1, x2, y2; int counter; int distance; int radius1, radius2; double divisor; enum curstate { NEW_LAYER, DRAW, ERASE1, ERASE2 } drawstate; eraser_state *eraser; }; static void init_tsg (struct state *st) { XGCValues gcv; Colormap cmap; XGetWindowAttributes (st->dpy, st->window, &st->xgwa); cmap = st->xgwa.colormap; gcv.foreground = st->default_fg_pixel = get_pixel_resource (st->dpy, cmap, "foreground", "Foreground"); st->draw_gc = XCreateGC (st->dpy, st->window, GCForeground, &gcv); gcv.foreground = get_pixel_resource (st->dpy, cmap, "background", "Background"); } static Bool go (struct state *st, int radius1, int radius2, int d) { int width, height; int xmid, ymid; float tmpx, tmpy; int delta; width = st->xgwa.width; height = st->xgwa.height; delta = 1; xmid = width / 2; ymid = height / 2; if (st->theta == 1) { st->x1 = xmid + radius1 - radius2 + d; st->y1 = ymid; } /* for (theta = 1; / * theta < ( 360 * 100 ) * /; theta++) */ /* see below about alwaysfinish */ { tmpx = xmid + (( radius1 /* * * * * */ - radius2 ) /* This algo simulates */ * cos(( st->theta /* the rotation of a */ * M_PI ) /* circular disk inside */ / 180 )) /* a hollow circular */ + ( d /* rim. A point on the */ * cos(((( radius1 /* disk dist d from the */ * st->theta ) /* centre, traces the */ - delta ) /* path given by this */ / radius2 ) /* equation. */ * M_PI /* A deviation (error) */ / 180 ) /* of delta needs to be */ ); /* given, which greatly */ /* adds to the beauty */ tmpy = ymid + ( /* of the figure. */ ( radius1 - radius2 /* */ ) * sin /* Imperfection adds to */ ( /* beauty, symbolically */ ( st->theta * M_PI /* ... */ ) / 180 /* Algo deduced by */ ) /* Rohit Singh, Jan'00 */ ) + /* based on a toy he */ ( d * sin /* used to play with */ ( /* when he was a kid. */ ( /* * * * * */ ( ( radius1 * st->theta ) - delta ) / radius2 ) * M_PI / 180 ) ); /*makes integers from the calculated values to do the drawing*/ st->x2 = tmpx; st->y2 = tmpy; /*stores the first values for later reference*/ if(st->theta == 1) { st->firstx = tmpx; st->firsty = tmpy; } if (st->theta != 1) XDrawLine (st->dpy, st->window, st->draw_gc, st->x1, st->y1, st->x2, st->y2); st->x1 = st->x2; st->y1 = st->y2; /* compares the exact values calculated to the first exact values calculated */ /* this will break when nothing new is being drawn */ if(tmpx == st->firstx && tmpy == st->firsty && st->theta != 1) { st->firstx = st->firsty = 0; st->theta = 1; return True; } /* this will break after 36000 iterations if the -alwaysfinish option is not specified */ if(!st->always_finish_p && st->theta > ( 360 * 100 ) ) { st->firstx = st->firsty = 0; st->theta = 1; return True; } } st->theta++; return False; } #define min(a,b) ((a)<(b)?(a):(b)) static void pick_new (struct state *st) { int radius = min (st->xgwa.width, st->xgwa.height) / 2; st->divisor = ((frand (3.0) + 1) * (((random() & 1) * 2) - 1)); st->radius1 = radius; st->radius2 = radius / st->divisor + 5; st->distance = 100 + (random() % 200); st->theta = 1; } static void * xspirograph_init (Display *dpy, Window window) { struct state *st = (struct state *) calloc (1, sizeof(*st)); st->dpy = dpy; st->window = window; st->long_delay = get_integer_resource(st->dpy, "delay", "Integer"); st->sub_sleep_time = get_integer_resource(st->dpy, "subdelay", "Integer"); st->num_layers = get_integer_resource(st->dpy, "layers", "Integer"); st->always_finish_p = get_boolean_resource (st->dpy, "alwaysfinish", "Boolean"); XGetWindowAttributes (st->dpy, st->window, &st->xgwa); init_tsg (st); st->theta = 1; st->drawstate = NEW_LAYER; return st; } static void new_colors (struct state *st) { if (mono_p) XSetForeground (st->dpy, st->draw_gc, st->default_fg_pixel); else { hsv_to_rgb (random () % 360, frand (1.0), frand (0.5) + 0.5, &st->color.red, &st->color.green, &st->color.blue); if ((st->got_color = XAllocColor (st->dpy, st->xgwa.colormap, &st->color))) XSetForeground (st->dpy, st->draw_gc, st->color.pixel); else XSetForeground (st->dpy, st->draw_gc, st->default_fg_pixel); } } static unsigned long xspirograph_draw (Display *dpy, Window window, void *closure) { struct state *st = (struct state *) closure; Bool free_color = False; Bool flip_p = (st->counter & 1); int i; switch (st->drawstate) { case ERASE1: /* 5 sec delay before starting the erase */ st->drawstate = ERASE2; /* shouldn't this use the configured long_delay value??? */ return (st->long_delay == 0 ? 0 : 5000000); case ERASE2: /* erase, delaying 1/50th sec between frames */ st->eraser = erase_window(st->dpy, st->window, st->eraser); if (st->eraser) /* shouldn't this be a configured pause??? */ return 20000; st->drawstate = NEW_LAYER; /* just finished erasing -- leave screen black for 1 sec */ return (st->long_delay == 0 ? 0 : 1000000); case DRAW: /* most common case put in front */ for (i = 0; i < 1000; i++) { if (go(st, st->radius1, (flip_p ? st->radius2 : -st->radius2), st->distance)) { st->drawstate = NEW_LAYER; break; } } /* Next draw is delayed sleep_time (initialized value)*/ return st->sub_sleep_time; case NEW_LAYER: /* Increment counter */ st->counter++; if (st->counter > (2 * st->num_layers)) { /* reset to zero, free, and erase next time through */ st->counter = 0; if (free_color) XFreeColors (st->dpy, st->xgwa.colormap, &st->color.pixel, 1, 0); st->drawstate = ERASE1; } else { /* first, third, fifth, ... time through */ if (!flip_p) pick_new (st); new_colors (st); st->drawstate = DRAW; } /* No delay to the next draw */ return 0; default: /* OOPS!! */ fprintf(stderr, "%s: invalid state\n", progname); exit(1); } return st->sub_sleep_time; /* notreached */ } static void xspirograph_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 xspirograph_event (Display *dpy, Window window, void *closure, XEvent *event) { return False; } static void xspirograph_free (Display *dpy, Window window, void *closure) { struct state *st = (struct state *) closure; free (st); } static const char *xspirograph_defaults [] = { ".background: black", ".foreground: white", "*fpsSolid: true", "*delay: 5", "*subdelay: 20000", "*layers: 2", "*alwaysfinish: false", #ifdef HAVE_MOBILE "*ignoreRotation: True", #endif 0 }; static XrmOptionDescRec xspirograph_options [] = { { "-delay", ".delay", XrmoptionSepArg, 0 }, { "-subdelay", ".subdelay", XrmoptionSepArg, 0 }, { "-layers", ".layers", XrmoptionSepArg, 0 }, { "-alwaysfinish", ".alwaysfinish", XrmoptionNoArg, "true"}, { "-noalwaysfinish", ".alwaysfinish", XrmoptionNoArg, "false"}, { 0, 0, 0, 0 } }; XSCREENSAVER_MODULE ("XSpirograph", xspirograph) xscreensaver-5.36/hacks/nerverot.c000644 000767 000024 00000101545 12717750032 017251 0ustar00jwzstaff000000 000000 /* nerverot, nervous rotation of random thingies, v1.4 * by Dan Bornstein, danfuzz@milk.com * Copyright (c) 2000-2001 Dan Bornstein. All rights reserved. * * 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. * * The goal of this screensaver is to be interesting and compelling to * watch, yet induce a state of nervous edginess in the viewer. * * See the included man page for more details. */ #include #include "screenhack.h" #define FLOAT double /* random float in the range (-1..1) */ #define RAND_FLOAT_PM1 \ (((FLOAT) ((random() >> 8) & 0xffff)) / ((FLOAT) 0x10000) * 2 - 1) /* random float in the range (0..1) */ #define RAND_FLOAT_01 \ (((FLOAT) ((random() >> 8) & 0xffff)) / ((FLOAT) 0x10000)) /* structure of the model */ /* each point-like thingy to draw is represented as a blot */ typedef struct blot_s { FLOAT x; /* 3d x position (-1..1) */ FLOAT y; /* 3d y position (-1..1) */ FLOAT z; /* 3d z position (-1..1) */ FLOAT xoff[3][3]; /* display x offset per drawn point (-1..1) */ FLOAT yoff[3][3]; /* display x offset per drawn point (-1..1) */ } Blot; /* each drawn line is represented as a LineSegment */ typedef struct linesegment_s { GC gc; int x1; int y1; int x2; int y2; } LineSegment; /* each blot draws as a simple 2d shape with each coordinate as an int * in the range (-1..1); this is the base shape */ static const XPoint blotShape[] = { { 0, 0}, { 1, 0}, { 1, 1}, { 0, 1}, {-1, 1}, {-1, 0}, {-1,-1}, { 0,-1}, { 1,-1} }; static int blotShapeCount = sizeof (blotShape) / sizeof (XPoint); struct state { Display *dpy; Window window; int requestedBlotCount; /* number of blots */ int delay; /* delay (usec) between iterations */ int maxIters; /* max iterations per model */ FLOAT nervousness; /* variability of xoff/yoff per iteration (0..1) */ FLOAT maxNerveRadius; /* max nervousness radius (0..1) */ FLOAT eventChance; /* chance per iteration that an event will happen */ FLOAT iterAmt; /* fraction (0..1) towards rotation target or scale target to move each * iteration */ FLOAT minScale; /* min and max scale for drawing, as fraction of baseScale */ FLOAT maxScale; int minRadius; /* min and max radius of blot drawing */ int maxRadius; int colorCount; /* the number of colors to use */ int lineWidth; /* width of lines */ Bool doubleBuffer; /* whether or not to do double-buffering */ int baseScale; /* base scale factor for drawing, calculated as max(screenWidth,screenHeight) */ int windowWidth; /* width and height of the window */ int windowHeight; int centerX; /* center position of the window */ int centerY; Drawable drawable; /* the thing to directly draw on */ GC *gcs; /* array of gcs, one per color used */ Blot *blots; /* array of the blots in the model */ int blotCount; int segCount; /* two arrays of line segments; one for the ones to erase, and one for the ones to draw */ LineSegment *segsToDraw; LineSegment *segsToErase; FLOAT xRot; /* current rotation values per axis, scale factor, and light position */ FLOAT yRot; FLOAT zRot; FLOAT curScale; FLOAT lightX; FLOAT lightY; FLOAT lightZ; FLOAT xRotTarget; /* target rotation values per axis, scale factor, and light position */ FLOAT yRotTarget; FLOAT zRotTarget; FLOAT scaleTarget; FLOAT lightXTarget; FLOAT lightYTarget; FLOAT lightZTarget; int centerXOff; /* current absolute offsets from the center */ int centerYOff; int itersTillNext; /* iterations until the model changes */ }; /* * generic blot setup and manipulation */ /* initialize a blot with the given coordinates and random display offsets */ static void initBlot (Blot *b, FLOAT x, FLOAT y, FLOAT z) { int i, j; b->x = x; b->y = y; b->z = z; for (i = 0; i < 3; i++) { for (j = 0; j < 3; j++) { b->xoff[i][j] = RAND_FLOAT_PM1; b->yoff[i][j] = RAND_FLOAT_PM1; } } } /* scale the blots to have a max distance of 1 from the center */ static void scaleBlotsToRadius1 (struct state *st) { FLOAT max = 0.0; int n; for (n = 0; n < st->blotCount; n++) { FLOAT distSquare = st->blots[n].x * st->blots[n].x + st->blots[n].y * st->blots[n].y + st->blots[n].z * st->blots[n].z; if (distSquare > max) { max = distSquare; } } if (max == 0.0) { return; } max = sqrt (max); for (n = 0; n < st->blotCount; n++) { st->blots[n].x /= max; st->blots[n].y /= max; st->blots[n].z /= max; } } /* randomly reorder the blots */ static void randomlyReorderBlots (struct state *st) { int n; for (n = 0; n < st->blotCount; n++) { int m = RAND_FLOAT_01 * (st->blotCount - n) + n; Blot tmpBlot = st->blots[n]; st->blots[n] = st->blots[m]; st->blots[m] = tmpBlot; } } /* randomly rotate the blots around the origin */ static void randomlyRotateBlots (struct state *st) { int n; /* random amounts to rotate about each axis */ FLOAT xRot = RAND_FLOAT_PM1 * M_PI; FLOAT yRot = RAND_FLOAT_PM1 * M_PI; FLOAT zRot = RAND_FLOAT_PM1 * M_PI; /* rotation factors */ FLOAT sinX = sin (xRot); FLOAT cosX = cos (xRot); FLOAT sinY = sin (yRot); FLOAT cosY = cos (yRot); FLOAT sinZ = sin (zRot); FLOAT cosZ = cos (zRot); for (n = 0; n < st->blotCount; n++) { FLOAT x1 = st->blots[n].x; FLOAT y1 = st->blots[n].y; FLOAT z1 = st->blots[n].z; FLOAT x2, y2, z2; /* rotate on z axis */ x2 = x1 * cosZ - y1 * sinZ; y2 = x1 * sinZ + y1 * cosZ; z2 = z1; /* rotate on x axis */ y1 = y2 * cosX - z2 * sinX; z1 = y2 * sinX + z2 * cosX; x1 = x2; /* rotate on y axis */ z2 = z1 * cosY - x1 * sinY; x2 = z1 * sinY + x1 * cosY; y2 = y1; st->blots[n].x = x2; st->blots[n].y = y2; st->blots[n].z = z2; } } /* * blot configurations */ /* set up the initial array of blots to be a at the edge of a sphere */ static void setupBlotsSphere (struct state *st) { int n; st->blotCount = st->requestedBlotCount; st->blots = calloc (sizeof (Blot), st->blotCount); for (n = 0; n < st->blotCount; n++) { /* pick a spot, but reject if its radius is < 0.2 or > 1 to * avoid scaling problems */ FLOAT x, y, z, radius; for (;;) { x = RAND_FLOAT_PM1; y = RAND_FLOAT_PM1; z = RAND_FLOAT_PM1; radius = sqrt (x * x + y * y + z * z); if ((radius >= 0.2) && (radius <= 1.0)) { break; } } x /= radius; y /= radius; z /= radius; initBlot (&st->blots[n], x, y, z); } } /* set up the initial array of blots to be a simple cube */ static void setupBlotsCube (struct state *st) { int i, j, k, n; /* derive blotsPerEdge from blotCount, but then do the reverse * since roundoff may have changed blotCount */ int blotsPerEdge = ((st->requestedBlotCount - 8) / 12) + 2; FLOAT distBetween; if (blotsPerEdge < 2) { blotsPerEdge = 2; } distBetween = 2.0 / (blotsPerEdge - 1.0); st->blotCount = 8 + (blotsPerEdge - 2) * 12; st->blots = calloc (sizeof (Blot), st->blotCount); n = 0; /* define the corners */ for (i = -1; i < 2; i += 2) { for (j = -1; j < 2; j += 2) { for (k = -1; k < 2; k += 2) { initBlot (&st->blots[n], i, j, k); n++; } } } /* define the edges */ for (i = 1; i < (blotsPerEdge - 1); i++) { FLOAT varEdge = distBetween * i - 1; initBlot (&st->blots[n++], varEdge, -1, -1); initBlot (&st->blots[n++], varEdge, 1, -1); initBlot (&st->blots[n++], varEdge, -1, 1); initBlot (&st->blots[n++], varEdge, 1, 1); initBlot (&st->blots[n++], -1, varEdge, -1); initBlot (&st->blots[n++], 1, varEdge, -1); initBlot (&st->blots[n++], -1, varEdge, 1); initBlot (&st->blots[n++], 1, varEdge, 1); initBlot (&st->blots[n++], -1, -1, varEdge); initBlot (&st->blots[n++], 1, -1, varEdge); initBlot (&st->blots[n++], -1, 1, varEdge); initBlot (&st->blots[n++], 1, 1, varEdge); } scaleBlotsToRadius1 (st); randomlyReorderBlots (st); randomlyRotateBlots (st); } /* set up the initial array of blots to be a cylinder */ static void setupBlotsCylinder (struct state *st) { int i, j, n; FLOAT distBetween; /* derive blotsPerEdge and blotsPerRing from blotCount, but then do the * reverse since roundoff may have changed blotCount */ FLOAT reqRoot = sqrt ((FLOAT) st->requestedBlotCount); int blotsPerRing = ceil (RAND_FLOAT_PM1 * reqRoot) / 2 + reqRoot; int blotsPerEdge = st->requestedBlotCount / blotsPerRing; if (blotsPerRing < 2) { blotsPerRing = 2; } if (blotsPerEdge < 2) { blotsPerEdge = 2; } distBetween = 2.0 / (blotsPerEdge - 1); st->blotCount = blotsPerEdge * blotsPerRing; st->blots = calloc (sizeof (Blot), st->blotCount); n = 0; /* define the edges */ for (i = 0; i < blotsPerRing; i++) { FLOAT x = sin (2 * M_PI / blotsPerRing * i); FLOAT y = cos (2 * M_PI / blotsPerRing * i); for (j = 0; j < blotsPerEdge; j++) { initBlot (&st->blots[n], x, y, j * distBetween - 1); n++; } } scaleBlotsToRadius1 (st); randomlyReorderBlots (st); randomlyRotateBlots (st); } /* set up the initial array of blots to be a squiggle */ static void setupBlotsSquiggle (struct state *st) { FLOAT x, y, z, xv, yv, zv, len; int minCoor, maxCoor; int n; st->blotCount = st->requestedBlotCount; st->blots = calloc (sizeof (Blot), st->blotCount); maxCoor = (int) (RAND_FLOAT_01 * 5) + 1; minCoor = -maxCoor; x = RAND_FLOAT_PM1; y = RAND_FLOAT_PM1; z = RAND_FLOAT_PM1; xv = RAND_FLOAT_PM1; yv = RAND_FLOAT_PM1; zv = RAND_FLOAT_PM1; len = sqrt (xv * xv + yv * yv + zv * zv); xv /= len; yv /= len; zv /= len; for (n = 0; n < st->blotCount; n++) { FLOAT newx, newy, newz; initBlot (&st->blots[n], x, y, z); for (;;) { xv += RAND_FLOAT_PM1 * 0.1; yv += RAND_FLOAT_PM1 * 0.1; zv += RAND_FLOAT_PM1 * 0.1; len = sqrt (xv * xv + yv * yv + zv * zv); xv /= len; yv /= len; zv /= len; newx = x + xv * 0.1; newy = y + yv * 0.1; newz = z + zv * 0.1; if ( (newx >= minCoor) && (newx <= maxCoor) && (newy >= minCoor) && (newy <= maxCoor) && (newz >= minCoor) && (newz <= maxCoor)) { break; } } x = newx; y = newy; z = newz; } scaleBlotsToRadius1 (st); randomlyReorderBlots (st); } /* set up the initial array of blots to be near the corners of a * cube, distributed slightly */ static void setupBlotsCubeCorners (struct state *st) { int n; st->blotCount = st->requestedBlotCount; st->blots = calloc (sizeof (Blot), st->blotCount); for (n = 0; n < st->blotCount; n++) { FLOAT x = rint (RAND_FLOAT_01) * 2 - 1; FLOAT y = rint (RAND_FLOAT_01) * 2 - 1; FLOAT z = rint (RAND_FLOAT_01) * 2 - 1; x += RAND_FLOAT_PM1 * 0.3; y += RAND_FLOAT_PM1 * 0.3; z += RAND_FLOAT_PM1 * 0.3; initBlot (&st->blots[n], x, y, z); } scaleBlotsToRadius1 (st); randomlyRotateBlots (st); } /* set up the initial array of blots to be randomly distributed * on the surface of a tetrahedron */ static void setupBlotsTetrahedron (struct state *st) { /* table of corners of the tetrahedron */ static const FLOAT cor[4][3] = { { 0.0, 1.0, 0.0 }, { -0.75, -0.5, -0.433013 }, { 0.0, -0.5, 0.866025 }, { 0.75, -0.5, -0.433013 } }; int n, c; /* derive blotsPerSurface from blotCount, but then do the reverse * since roundoff may have changed blotCount */ int blotsPerSurface = st->requestedBlotCount / 4; st->blotCount = blotsPerSurface * 4; st->blots = calloc (sizeof (Blot), st->blotCount); for (n = 0; n < st->blotCount; n += 4) { /* pick a random point on a unit right triangle */ FLOAT rawx = RAND_FLOAT_01; FLOAT rawy = RAND_FLOAT_01; if ((rawx + rawy) > 1) { /* swap coords into place */ FLOAT t = 1.0 - rawx; rawx = 1.0 - rawy; rawy = t; } /* translate the point to be on each of the surfaces */ for (c = 0; c < 4; c++) { FLOAT x, y, z; int c1 = (c + 1) % 4; int c2 = (c + 2) % 4; x = (cor[c1][0] - cor[c][0]) * rawx + (cor[c2][0] - cor[c][0]) * rawy + cor[c][0]; y = (cor[c1][1] - cor[c][1]) * rawx + (cor[c2][1] - cor[c][1]) * rawy + cor[c][1]; z = (cor[c1][2] - cor[c][2]) * rawx + (cor[c2][2] - cor[c][2]) * rawy + cor[c][2]; initBlot (&st->blots[n + c], x, y, z); } } randomlyRotateBlots (st); } /* set up the initial array of blots to be an almost-evenly-distributed * square sheet */ static void setupBlotsSheet (struct state *st) { int x, y; int blotsPerDimension = floor (sqrt (st->requestedBlotCount)); FLOAT spaceBetween; if (blotsPerDimension < 2) { blotsPerDimension = 2; } spaceBetween = 2.0 / (blotsPerDimension - 1); st->blotCount = blotsPerDimension * blotsPerDimension; st->blots = calloc (sizeof (Blot), st->blotCount); for (x = 0; x < blotsPerDimension; x++) { for (y = 0; y < blotsPerDimension; y++) { FLOAT x1 = x * spaceBetween - 1.0; FLOAT y1 = y * spaceBetween - 1.0; FLOAT z1 = 0.0; x1 += RAND_FLOAT_PM1 * spaceBetween / 3; y1 += RAND_FLOAT_PM1 * spaceBetween / 3; z1 += RAND_FLOAT_PM1 * spaceBetween / 2; initBlot (&st->blots[x + y * blotsPerDimension], x1, y1, z1); } } scaleBlotsToRadius1 (st); randomlyReorderBlots (st); randomlyRotateBlots (st); } /* set up the initial array of blots to be a swirlycone */ static void setupBlotsSwirlyCone (struct state *st) { FLOAT radSpace = 1.0 / (st->requestedBlotCount - 1); FLOAT zSpace = radSpace * 2; FLOAT rotAmt = RAND_FLOAT_PM1 * M_PI / 10; int n; FLOAT rot = 0.0; st->blotCount = st->requestedBlotCount; st->blots = calloc (sizeof (Blot), st->blotCount); for (n = 0; n < st->blotCount; n++) { FLOAT radius = n * radSpace; FLOAT x = cos (rot) * radius; FLOAT y = sin (rot) * radius; FLOAT z = n * zSpace - 1.0; rot += rotAmt; initBlot (&st->blots[n], x, y, z); } scaleBlotsToRadius1 (st); randomlyReorderBlots (st); randomlyRotateBlots (st); } /* forward declaration for recursive use immediately below */ static void setupBlots (struct state *st); /* set up the blots to be two of the other choices, placed next to * each other */ static void setupBlotsDuo (struct state *st) { int origRequest = st->requestedBlotCount; FLOAT tx, ty, tz, radius; Blot *blots1, *blots2; int count1, count2; int n; if (st->requestedBlotCount < 15) { /* special case bottom-out */ setupBlotsSphere (st); return; } tx = RAND_FLOAT_PM1; ty = RAND_FLOAT_PM1; tz = RAND_FLOAT_PM1; radius = sqrt (tx * tx + ty * ty + tz * tz); tx /= radius; ty /= radius; tz /= radius; /* recursive call to setup set 1 */ st->requestedBlotCount = origRequest / 2; setupBlots (st); if (st->blotCount >= origRequest) { /* return immediately if this satisfies the original count request */ st->requestedBlotCount = origRequest; return; } blots1 = st->blots; count1 = st->blotCount; st->blots = NULL; st->blotCount = 0; /* translate to new position */ for (n = 0; n < count1; n++) { blots1[n].x += tx; blots1[n].y += ty; blots1[n].z += tz; } /* recursive call to setup set 2 */ st->requestedBlotCount = origRequest - count1; setupBlots (st); blots2 = st->blots; count2 = st->blotCount; /* translate to new position */ for (n = 0; n < count2; n++) { blots2[n].x -= tx; blots2[n].y -= ty; blots2[n].z -= tz; } /* combine the two arrays */ st->blotCount = count1 + count2; st->blots = calloc (sizeof (Blot), st->blotCount); memcpy (&st->blots[0], blots1, sizeof (Blot) * count1); memcpy (&st->blots[count1], blots2, sizeof (Blot) * count2); free (blots1); free (blots2); scaleBlotsToRadius1 (st); randomlyReorderBlots (st); /* restore the original requested count, for future iterations */ st->requestedBlotCount = origRequest; } /* * main blot setup */ /* free the blots, in preparation for a new shape */ static void freeBlots (struct state *st) { if (st->blots != NULL) { free (st->blots); st->blots = NULL; } if (st->segsToErase != NULL) { free (st->segsToErase); st->segsToErase = NULL; } if (st->segsToDraw != NULL) { free (st->segsToDraw); st->segsToDraw = NULL; } } /* set up the initial arrays of blots */ static void setupBlots (struct state *st) { int which = RAND_FLOAT_01 * 11; freeBlots (st); switch (which) { case 0: setupBlotsCube (st); break; case 1: setupBlotsSphere (st); break; case 2: setupBlotsCylinder (st); break; case 3: setupBlotsSquiggle (st); break; case 4: setupBlotsCubeCorners (st); break; case 5: setupBlotsTetrahedron (st); break; case 6: setupBlotsSheet (st); break; case 7: setupBlotsSwirlyCone (st); break; case 8: case 9: case 10: setupBlotsDuo (st); break; } } /* set up the segments arrays */ static void setupSegs (struct state *st) { /* there are blotShapeCount - 1 line segments per blot */ st->segCount = st->blotCount * (blotShapeCount - 1); st->segsToErase = calloc (sizeof (LineSegment), st->segCount); st->segsToDraw = calloc (sizeof (LineSegment), st->segCount); } /* * color setup stuff */ /* set up the colormap */ static void setupColormap (struct state *st, XWindowAttributes *xgwa) { int n; XGCValues gcv; XColor *colors = (XColor *) calloc (sizeof (XColor), st->colorCount + 1); unsigned short r, g, b; int h1, h2; double s1, s2, v1, v2; r = RAND_FLOAT_01 * 0x10000; g = RAND_FLOAT_01 * 0x10000; b = RAND_FLOAT_01 * 0x10000; rgb_to_hsv (r, g, b, &h1, &s1, &v1); v1 = 1.0; s1 = 1.0; r = RAND_FLOAT_01 * 0x10000; g = RAND_FLOAT_01 * 0x10000; b = RAND_FLOAT_01 * 0x10000; rgb_to_hsv (r, g, b, &h2, &s2, &v2); s2 = 0.7; v2 = 0.7; colors[0].pixel = get_pixel_resource (st->dpy, xgwa->colormap, "background", "Background"); make_color_ramp (xgwa->screen, xgwa->visual, xgwa->colormap, h1, s1, v1, h2, s2, v2, colors + 1, &st->colorCount, False, True, False); if (st->colorCount < 1) { fprintf (stderr, "%s: couldn't allocate any colors\n", progname); exit (-1); } st->gcs = (GC *) calloc (sizeof (GC), st->colorCount + 1); for (n = 0; n <= st->colorCount; n++) { gcv.foreground = colors[n].pixel; gcv.line_width = st->lineWidth; st->gcs[n] = XCreateGC (st->dpy, st->window, GCForeground | GCLineWidth, &gcv); } free (colors); } /* * overall setup stuff */ /* set up the system */ static void setup (struct state *st) { XWindowAttributes xgwa; XGetWindowAttributes (st->dpy, st->window, &xgwa); st->windowWidth = xgwa.width; st->windowHeight = xgwa.height; st->centerX = st->windowWidth / 2; st->centerY = st->windowHeight / 2; st->baseScale = (xgwa.height < xgwa.width) ? xgwa.height : xgwa.width; if (st->doubleBuffer) { st->drawable = XCreatePixmap (st->dpy, st->window, xgwa.width, xgwa.height, xgwa.depth); } else { st->drawable = st->window; } setupColormap (st, &xgwa); setupBlots (st); setupSegs (st); /* set up the initial rotation, scale, and light values as random, but * with the targets equal to where it is */ st->xRot = st->xRotTarget = RAND_FLOAT_01 * M_PI; st->yRot = st->yRotTarget = RAND_FLOAT_01 * M_PI; st->zRot = st->zRotTarget = RAND_FLOAT_01 * M_PI; st->curScale = st->scaleTarget = RAND_FLOAT_01 * (st->maxScale - st->minScale) + st->minScale; st->lightX = st->lightXTarget = RAND_FLOAT_PM1; st->lightY = st->lightYTarget = RAND_FLOAT_PM1; st->lightZ = st->lightZTarget = RAND_FLOAT_PM1; st->itersTillNext = RAND_FLOAT_01 * st->maxIters; } /* * the simulation */ /* "render" the blots into segsToDraw, with the current rotation factors */ static void renderSegs (struct state *st) { int n; int m = 0; /* rotation factors */ FLOAT sinX = sin (st->xRot); FLOAT cosX = cos (st->xRot); FLOAT sinY = sin (st->yRot); FLOAT cosY = cos (st->yRot); FLOAT sinZ = sin (st->zRot); FLOAT cosZ = cos (st->zRot); for (n = 0; n < st->blotCount; n++) { Blot *b = &st->blots[n]; int i, j; int baseX, baseY; FLOAT radius; int x[3][3]; int y[3][3]; int color; FLOAT x1 = st->blots[n].x; FLOAT y1 = st->blots[n].y; FLOAT z1 = st->blots[n].z; FLOAT x2, y2, z2; /* rotate on z axis */ x2 = x1 * cosZ - y1 * sinZ; y2 = x1 * sinZ + y1 * cosZ; z2 = z1; /* rotate on x axis */ y1 = y2 * cosX - z2 * sinX; z1 = y2 * sinX + z2 * cosX; x1 = x2; /* rotate on y axis */ z2 = z1 * cosY - x1 * sinY; x2 = z1 * sinY + x1 * cosY; y2 = y1; /* the color to draw is based on the distance from the light of * the post-rotation blot */ x1 = x2 - st->lightX; y1 = y2 - st->lightY; z1 = z2 - st->lightZ; color = 1 + (x1 * x1 + y1 * y1 + z1 * z1) / 4 * st->colorCount; if (color > st->colorCount) { color = st->colorCount; } /* set up the base screen coordinates for drawing */ baseX = x2 / 2 * st->baseScale * st->curScale + st->centerX + st->centerXOff; baseY = y2 / 2 * st->baseScale * st->curScale + st->centerY + st->centerYOff; radius = (z2 + 1) / 2 * (st->maxRadius - st->minRadius) + st->minRadius; for (i = 0; i < 3; i++) { for (j = 0; j < 3; j++) { x[i][j] = baseX + ((i - 1) + (b->xoff[i][j] * st->maxNerveRadius)) * radius; y[i][j] = baseY + ((j - 1) + (b->yoff[i][j] * st->maxNerveRadius)) * radius; } } for (i = 1; i < blotShapeCount; i++) { st->segsToDraw[m].gc = st->gcs[color]; st->segsToDraw[m].x1 = x[blotShape[i-1].x + 1][blotShape[i-1].y + 1]; st->segsToDraw[m].y1 = y[blotShape[i-1].x + 1][blotShape[i-1].y + 1]; st->segsToDraw[m].x2 = x[blotShape[i].x + 1][blotShape[i].y + 1]; st->segsToDraw[m].y2 = y[blotShape[i].x + 1][blotShape[i].y + 1]; m++; } } } /* update blots, adjusting the offsets and rotation factors. */ static void updateWithFeeling (struct state *st) { int n, i, j; /* pick a new model if the time is right */ st->itersTillNext--; if (st->itersTillNext < 0) { st->itersTillNext = RAND_FLOAT_01 * st->maxIters; setupBlots (st); setupSegs (st); renderSegs (st); } /* update the rotation factors by moving them a bit toward the targets */ st->xRot = st->xRot + (st->xRotTarget - st->xRot) * st->iterAmt; st->yRot = st->yRot + (st->yRotTarget - st->yRot) * st->iterAmt; st->zRot = st->zRot + (st->zRotTarget - st->zRot) * st->iterAmt; /* similarly the scale factor */ st->curScale = st->curScale + (st->scaleTarget - st->curScale) * st->iterAmt; /* and similarly the light position */ st->lightX = st->lightX + (st->lightXTarget - st->lightX) * st->iterAmt; st->lightY = st->lightY + (st->lightYTarget - st->lightY) * st->iterAmt; st->lightZ = st->lightZ + (st->lightZTarget - st->lightZ) * st->iterAmt; /* for each blot... */ for (n = 0; n < st->blotCount; n++) { /* add a bit of random jitter to xoff/yoff */ for (i = 0; i < 3; i++) { for (j = 0; j < 3; j++) { FLOAT newOff; newOff = st->blots[n].xoff[i][j] + RAND_FLOAT_PM1 * st->nervousness; if (newOff < -1) newOff = -(newOff + 1) - 1; else if (newOff > 1) newOff = -(newOff - 1) + 1; st->blots[n].xoff[i][j] = newOff; newOff = st->blots[n].yoff[i][j] + RAND_FLOAT_PM1 * st->nervousness; if (newOff < -1) newOff = -(newOff + 1) - 1; else if (newOff > 1) newOff = -(newOff - 1) + 1; st->blots[n].yoff[i][j] = newOff; } } } /* depending on random chance, update one or more factors */ if (RAND_FLOAT_01 <= st->eventChance) { int which = RAND_FLOAT_01 * 14; switch (which) { case 0: { st->xRotTarget = RAND_FLOAT_PM1 * M_PI * 2; break; } case 1: { st->yRotTarget = RAND_FLOAT_PM1 * M_PI * 2; break; } case 2: { st->zRotTarget = RAND_FLOAT_PM1 * M_PI * 2; break; } case 3: { st->xRotTarget = RAND_FLOAT_PM1 * M_PI * 2; st->yRotTarget = RAND_FLOAT_PM1 * M_PI * 2; break; } case 4: { st->xRotTarget = RAND_FLOAT_PM1 * M_PI * 2; st->zRotTarget = RAND_FLOAT_PM1 * M_PI * 2; break; } case 5: { st->yRotTarget = RAND_FLOAT_PM1 * M_PI * 2; st->zRotTarget = RAND_FLOAT_PM1 * M_PI * 2; break; } case 6: { st->xRotTarget = RAND_FLOAT_PM1 * M_PI * 2; st->yRotTarget = RAND_FLOAT_PM1 * M_PI * 2; st->zRotTarget = RAND_FLOAT_PM1 * M_PI * 2; break; } case 7: { st->centerXOff = RAND_FLOAT_PM1 * st->maxRadius; break; } case 8: { st->centerYOff = RAND_FLOAT_PM1 * st->maxRadius; break; } case 9: { st->centerXOff = RAND_FLOAT_PM1 * st->maxRadius; st->centerYOff = RAND_FLOAT_PM1 * st->maxRadius; break; } case 10: { st->scaleTarget = RAND_FLOAT_01 * (st->maxScale - st->minScale) + st->minScale; break; } case 11: { st->curScale = RAND_FLOAT_01 * (st->maxScale - st->minScale) + st->minScale; break; } case 12: { st->lightX = RAND_FLOAT_PM1; st->lightY = RAND_FLOAT_PM1; st->lightZ = RAND_FLOAT_PM1; break; } case 13: { st->lightXTarget = RAND_FLOAT_PM1; st->lightYTarget = RAND_FLOAT_PM1; st->lightZTarget = RAND_FLOAT_PM1; break; } } } } /* erase segsToErase and draw segsToDraw */ static void eraseAndDraw (struct state *st) { int n; if (st->doubleBuffer) XFillRectangle (st->dpy, st->drawable, st->gcs[0], 0, 0, st->windowWidth, st->windowHeight); else XClearWindow (st->dpy, st->drawable); for (n = 0; n < st->segCount; n++) { LineSegment *seg = &st->segsToErase[n]; #ifdef HAVE_JWXYZ /* Don't second-guess Quartz's double-buffering */ XDrawLine (st->dpy, st->drawable, st->gcs[0], seg->x1, seg->y1, seg->x2, seg->y2); #endif seg = &st->segsToDraw[n]; XDrawLine (st->dpy, st->drawable, seg->gc, seg->x1, seg->y1, seg->x2, seg->y2); } if (st->doubleBuffer) { XCopyArea (st->dpy, st->drawable, st->window, st->gcs[0], 0, 0, st->windowWidth, st->windowHeight, 0, 0); } } /* do one iteration */ static unsigned long nerverot_draw (Display *dpy, Window win, void *closure) { struct state *st = (struct state *) closure; /* switch segsToErase and segsToDraw */ LineSegment *temp = st->segsToDraw; st->segsToDraw = st->segsToErase; st->segsToErase = temp; /* update the model */ updateWithFeeling (st); /* render new segments */ renderSegs (st); /* erase old segments and draw new ones */ eraseAndDraw (st); return st->delay; } /* initialize the user-specifiable params */ static void initParams (struct state *st) { int problems = 0; st->delay = get_integer_resource (st->dpy, "delay", "Delay"); if (st->delay < 0) { fprintf (stderr, "error: delay must be at least 0\n"); problems = 1; } st->maxIters = get_integer_resource (st->dpy, "maxIters", "Integer"); if (st->maxIters < 0) { fprintf (stderr, "error: maxIters must be at least 0\n"); problems = 1; } st->doubleBuffer = get_boolean_resource (st->dpy, "doubleBuffer", "Boolean"); # ifdef HAVE_JWXYZ /* Don't second-guess Quartz's double-buffering */ st->doubleBuffer = False; # endif st->requestedBlotCount = get_integer_resource (st->dpy, "count", "Count"); if (st->requestedBlotCount <= 0) { fprintf (stderr, "error: count must be at least 0\n"); problems = 1; } st->colorCount = get_integer_resource (st->dpy, "colors", "Colors"); if (st->colorCount <= 0) { fprintf (stderr, "error: colors must be at least 1\n"); problems = 1; } st->lineWidth = get_integer_resource (st->dpy, "lineWidth", "LineWidth"); if (st->lineWidth < 0) { fprintf (stderr, "error: line width must be at least 0\n"); problems = 1; } st->nervousness = get_float_resource (st->dpy, "nervousness", "Float"); if ((st->nervousness < 0) || (st->nervousness > 1)) { fprintf (stderr, "error: nervousness must be in the range 0..1\n"); problems = 1; } st->maxNerveRadius = get_float_resource (st->dpy, "maxNerveRadius", "Float"); if ((st->maxNerveRadius < 0) || (st->maxNerveRadius > 1)) { fprintf (stderr, "error: maxNerveRadius must be in the range 0..1\n"); problems = 1; } st->eventChance = get_float_resource (st->dpy, "eventChance", "Float"); if ((st->eventChance < 0) || (st->eventChance > 1)) { fprintf (stderr, "error: eventChance must be in the range 0..1\n"); problems = 1; } st->iterAmt = get_float_resource (st->dpy, "iterAmt", "Float"); if ((st->iterAmt < 0) || (st->iterAmt > 1)) { fprintf (stderr, "error: iterAmt must be in the range 0..1\n"); problems = 1; } st->minScale = get_float_resource (st->dpy, "minScale", "Float"); if ((st->minScale < 0) || (st->minScale > 10)) { fprintf (stderr, "error: minScale must be in the range 0..10\n"); problems = 1; } st->maxScale = get_float_resource (st->dpy, "maxScale", "Float"); if ((st->maxScale < 0) || (st->maxScale > 10)) { fprintf (stderr, "error: maxScale must be in the range 0..10\n"); problems = 1; } if (st->maxScale < st->minScale) { fprintf (stderr, "error: maxScale must be >= minScale\n"); problems = 1; } st->minRadius = get_integer_resource (st->dpy, "minRadius", "Integer"); if ((st->minRadius < 1) || (st->minRadius > 100)) { fprintf (stderr, "error: minRadius must be in the range 1..100\n"); problems = 1; } st->maxRadius = get_integer_resource (st->dpy, "maxRadius", "Integer"); if ((st->maxRadius < 1) || (st->maxRadius > 100)) { fprintf (stderr, "error: maxRadius must be in the range 1..100\n"); problems = 1; } if (st->maxRadius < st->minRadius) { fprintf (stderr, "error: maxRadius must be >= minRadius\n"); problems = 1; } if (problems) { exit (1); } } static void * nerverot_init (Display *dpy, Window window) { struct state *st = (struct state *) calloc (1, sizeof(*st)); st->dpy = dpy; st->window = window; initParams (st); setup (st); /* make a valid set to erase at first */ renderSegs (st); return st; } static void nerverot_reshape (Display *dpy, Window window, void *closure, unsigned int w, unsigned int h) { } static Bool nerverot_event (Display *dpy, Window window, void *closure, XEvent *event) { return False; } static void nerverot_free (Display *dpy, Window window, void *closure) { struct state *st = (struct state *) closure; freeBlots (st); free (st); } static const char *nerverot_defaults [] = { ".background: black", ".foreground: white", "*count: 250", "*colors: 4", "*delay: 10000", "*maxIters: 1200", "*doubleBuffer: false", "*eventChance: 0.2", "*iterAmt: 0.01", "*lineWidth: 0", "*minScale: 0.6", "*maxScale: 1.75", "*minRadius: 3", "*maxRadius: 25", "*maxNerveRadius: 0.7", "*nervousness: 0.3", #ifdef HAVE_MOBILE "*ignoreRotation: True", #endif 0 }; static XrmOptionDescRec nerverot_options [] = { { "-count", ".count", XrmoptionSepArg, 0 }, { "-colors", ".colors", XrmoptionSepArg, 0 }, { "-delay", ".delay", XrmoptionSepArg, 0 }, { "-max-iters", ".maxIters", XrmoptionSepArg, 0 }, { "-db", ".doubleBuffer", XrmoptionNoArg, "true" }, { "-no-db", ".doubleBuffer", XrmoptionNoArg, "false" }, { "-event-chance", ".eventChance", XrmoptionSepArg, 0 }, { "-iter-amt", ".iterAmt", XrmoptionSepArg, 0 }, { "-line-width", ".lineWidth", XrmoptionSepArg, 0 }, { "-min-scale", ".minScale", XrmoptionSepArg, 0 }, { "-max-scale", ".maxScale", XrmoptionSepArg, 0 }, { "-min-radius", ".minRadius", XrmoptionSepArg, 0 }, { "-max-radius", ".maxRadius", XrmoptionSepArg, 0 }, { "-max-nerve-radius", ".maxNerveRadius", XrmoptionSepArg, 0 }, { "-nervousness", ".nervousness", XrmoptionSepArg, 0 }, { 0, 0, 0, 0 } }; XSCREENSAVER_MODULE ("NerveRot", nerverot) xscreensaver-5.36/hacks/xrayswarm.c000644 000767 000024 00000073663 12717747747 017476 0ustar00jwzstaff000000 000000 /* * Copyright (c) 2000 by Chris Leger (xrayjones@users.sourceforge.net) * * xrayswarm - a shameless ripoff of the 'swarm' screensaver on SGI * boxes. * * Version 1.0 - initial release. doesn't read any special command-line * options, and only supports the variable 'delay' via Xresources. * (the delay resouces is most useful on systems w/o gettimeofday, in * which case automagical level-of-detail for FPS maintainance can't * be used.) * * The code isn't commented, but isn't too ugly. It should be pretty * easy to understand, with the exception of the colormap stuff. * */ /* Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. Except as contained in this notice, the name of the X Consortium shall not be used in advertising or otherwise to promote the sale, use or other dealings in this Software without prior written authorization from the X Consortium. */ #include #ifdef HAVE_CONFIG_H # include "config.h" #endif #include #include "screenhack.h" #ifdef HAVE_JWXYZ # define HAVE_GETTIMEOFDAY 1 #endif /********************************************************************** * * window crap * **********************************************************************/ static const char *xrayswarm_defaults [] ={ ".background: black", "*delay: 20000", "*fpsSolid: true", #ifdef HAVE_MOBILE "*ignoreRotation: True", #endif 0 }; static XrmOptionDescRec xrayswarm_options [] = { {"-delay",".delay",XrmoptionSepArg,0}, {0,0,0,0} }; /********************************************************************** * * bug structs & variables * **********************************************************************/ #define MAX_TRAIL_LEN 60 #define MAX_BUGS 100 #define MAX_TARGETS 10 #define sq(x) ((x)*(x)) #define MAX_FPS 150 #define MIN_FPS 16 #define DESIRED_DT 0.2 typedef struct _sbug { float pos[3]; int hist[MAX_TRAIL_LEN][2]; float vel[2]; struct _sbug *closest; } bug; #define GRAY_TRAILS 0 #define GRAY_SCHIZO 1 #define COLOR_TRAILS 2 #define RANDOM_TRAILS 3 #define RANDOM_SCHIZO 4 #define COLOR_SCHIZO 5 #define NUM_SCHEMES 6 /* too many schizos; don't use last 2 */ struct state { Display *dpy; Window win; unsigned char colors[768]; GC fgc[256]; GC cgc; int xsize, ysize; int xc, yc; unsigned long delay; float maxx, maxy; float dt; float targetVel; float targetAcc; float maxVel; float maxAcc; float noise; float minVelMultiplier; int nbugs; int ntargets; int trailLen; float dtInv; float halfDtSq; float targetVelSq; float maxVelSq; float minVelSq; float minVel; bug bugs[MAX_BUGS]; bug targets[MAX_TARGETS]; int head; int tail; int colorScheme; float changeProb; int grayIndex[MAX_TRAIL_LEN]; int redIndex[MAX_TRAIL_LEN]; int blueIndex[MAX_TRAIL_LEN]; int graySIndex[MAX_TRAIL_LEN]; int redSIndex[MAX_TRAIL_LEN]; int blueSIndex[MAX_TRAIL_LEN]; int randomIndex[MAX_TRAIL_LEN]; int numColors; int numRandomColors; int checkIndex; int rsc_callDepth; int rbc_callDepth; float draw_fps; float draw_timePerFrame, draw_elapsed; int *draw_targetColorIndex, *draw_colorIndex; int draw_targetStartColor, draw_targetNumColors; int draw_startColor, draw_numColors; double draw_start, draw_end; int draw_cnt; int draw_sleepCount; int draw_delayAccum; int draw_nframes; struct timeval startupTime; }; typedef struct { float dt; float targetVel; float targetAcc; float maxVel; float maxAcc; float noise; int nbugs; int ntargets; int trailLen; int colorScheme; int changeProb; } bugParams; #if 0 static const bugParams good1 = { 0.3, /* dt */ 0.03, /* targetVel */ 0.02, /* targetAcc */ 0.05, /* maxVel */ 0.03, /* maxAcc */ 0.01, /* noise */ -1, /* nbugs */ -1, /* ntargets */ 60, /* trailLen */ 2, /* colorScheme */ 0.15 /* changeProb */ }; static const bugParams *goodParams[] = { &good1 }; static int numParamSets = 1; #endif static void initCMap(struct state *st) { int i, n; int temp; n = 0; /* color 0 is black */ st->colors[n++] = 0; st->colors[n++] = 0; st->colors[n++] = 0; /* color 1 is red */ st->colors[n++] = 255; st->colors[n++] = 0; st->colors[n++] = 0; /* color 2 is green */ st->colors[n++] = 255; st->colors[n++] = 0; st->colors[n++] = 0; /* color 3 is blue */ st->colors[n++] = 255; st->colors[n++] = 0; st->colors[n++] = 0; /* start greyscale colors at 4; 16 levels */ for (i = 0; i < 16; i++) { temp = i*16; if (temp > 255) temp = 255; st->colors[n++] = 255 - temp; st->colors[n++] = 255 - temp; st->colors[n++] = 255 - temp; } /* start red fade at 20; 16 levels */ for (i = 0; i < 16; i++) { temp = i*16; if (temp > 255) temp = 255; st->colors[n++] = 255 - temp; st->colors[n++] = 255 - pow(i/16.0+0.001, 0.3)*255; st->colors[n++] = 65 - temp/4; } /* start blue fade at 36; 16 levels */ for (i = 0; i < 16; i++) { temp = i*16; if (temp > 255) temp = 255; st->colors[n++] = 32 - temp/8; st->colors[n++] = 180 - pow(i/16.0+0.001, 0.3)*180; st->colors[n++] = 255 - temp; } /* random colors start at 52 */ st->numRandomColors = MAX_TRAIL_LEN; st->colors[n] = random()&255; n++; st->colors[n] = random()&255; n++; st->colors[n] = st->colors[n-2]/2 + st->colors[n-3]/2; n++; for (i = 0; i < st->numRandomColors; i++) { st->colors[n] = (st->colors[n-3] + (random()&31) - 16)&255; n++; st->colors[n] = (st->colors[n-3] + (random()&31) - 16)&255; n++; st->colors[n] = st->colors[n-2]/(float)(i+2) + st->colors[n-3]/(float)(i+2); n++; } st->numColors = n/3 + 1; } static int initGraphics(struct state *st) { XGCValues xgcv; XWindowAttributes xgwa; /* XSetWindowAttributes xswa;*/ Colormap cmap; XColor color; int n, i; initCMap(st); XGetWindowAttributes(st->dpy,st->win,&xgwa); cmap=xgwa.colormap; /* xswa.backing_store=Always; XChangeWindowAttributes(st->dpy,st->win,CWBackingStore,&xswa);*/ xgcv.function=GXcopy; st->delay = get_integer_resource(st->dpy, "delay","Integer"); xgcv.foreground=get_pixel_resource (st->dpy, cmap, "background", "Background"); st->fgc[0]=XCreateGC(st->dpy, st->win, GCForeground|GCFunction,&xgcv); #ifdef HAVE_JWXYZ jwxyz_XSetAntiAliasing (st->dpy, st->fgc[0], False); #endif n=0; if (mono_p) { xgcv.foreground=get_pixel_resource (st->dpy, cmap, "foreground", "Foreground"); st->fgc[1]=XCreateGC(st->dpy,st->win,GCForeground|GCFunction,&xgcv); #ifdef HAVE_JWXYZ jwxyz_XSetAntiAliasing (st->dpy, st->fgc[1], False); #endif for (i=0;inumColors;i+=2) st->fgc[i]=st->fgc[0]; for (i=1;inumColors;i+=2) st->fgc[i]=st->fgc[1]; } else { for (i = 0; i < st->numColors; i++) { color.red=st->colors[n++]<<8; color.green=st->colors[n++]<<8; color.blue=st->colors[n++]<<8; color.flags=DoRed|DoGreen|DoBlue; XAllocColor(st->dpy,cmap,&color); xgcv.foreground=color.pixel; st->fgc[i] = XCreateGC(st->dpy, st->win, GCForeground | GCFunction,&xgcv); #ifdef HAVE_JWXYZ jwxyz_XSetAntiAliasing (st->dpy, st->fgc[i], False); #endif } } st->cgc = XCreateGC(st->dpy,st->win,GCForeground|GCFunction,&xgcv); XSetGraphicsExposures(st->dpy,st->cgc,False); #ifdef HAVE_JWXYZ jwxyz_XSetAntiAliasing (st->dpy, st->cgc, False); #endif st->xsize = xgwa.width; st->ysize = xgwa.height; st->xc = st->xsize >> 1; st->yc = st->ysize >> 1; st->maxx = 1.0; st->maxy = st->ysize/(float)st->xsize; if (st->colorScheme < 0) st->colorScheme = random()%NUM_SCHEMES; return True; } static void initBugs(struct state *st) { register bug *b; int i; st->head = st->tail = 0; memset((char *)st->bugs, 0,MAX_BUGS*sizeof(bug)); memset((char *)st->targets, 0, MAX_TARGETS*sizeof(bug)); if (st->ntargets < 0) st->ntargets = (0.25+frand(0.75)*frand(1))*MAX_TARGETS; if (st->ntargets < 1) st->ntargets = 1; if (st->nbugs < 0) st->nbugs = (0.25+frand(0.75)*frand(1))*MAX_BUGS; if (st->nbugs <= st->ntargets) st->nbugs = st->ntargets+1; if (st->trailLen < 0) { st->trailLen = (1.0 - frand(0.6)*frand(1))*MAX_TRAIL_LEN; } if (st->nbugs > MAX_BUGS) st->nbugs = MAX_BUGS; if (st->ntargets > MAX_TARGETS) st->ntargets = MAX_TARGETS; if (st->trailLen > MAX_TRAIL_LEN) st->trailLen = MAX_TRAIL_LEN; b = st->bugs; for (i = 0; i < st->nbugs; i++, b++) { b->pos[0] = frand(st->maxx); b->pos[1] = frand(st->maxy); b->vel[0] = frand(st->maxVel/2); b->vel[1] = frand(st->maxVel/2); b->hist[st->head][0] = b->pos[0]*st->xsize; b->hist[st->head][1] = b->pos[1]*st->xsize; b->closest = &st->targets[random()%st->ntargets]; } b = st->targets; for (i = 0; i < st->ntargets; i++, b++) { b->pos[0] = frand(st->maxx); b->pos[1] = frand(st->maxy); b->vel[0] = frand(st->targetVel/2); b->vel[1] = frand(st->targetVel/2); b->hist[st->head][0] = b->pos[0]*st->xsize; b->hist[st->head][1] = b->pos[1]*st->xsize; } } static void pickNewTargets(struct state *st) { register int i; register bug *b; b = st->bugs; for (i = 0; i < st->nbugs; i++, b++) { b->closest = &st->targets[random()%st->ntargets]; } } #if 0 static void addBugs(int numToAdd) { register bug *b; int i; if (numToAdd + st->nbugs > MAX_BUGS) numToAdd = MAX_BUGS-st->nbugs; else if (numToAdd < 0) numToAdd = 0; for (i = 0; i < numToAdd; i++) { b = &st->bugs[random()%st->nbugs]; memcpy((char *)&st->bugs[st->nbugs+i], (char *)b, sizeof(bug)); b->closest = &st->targets[random()%st->ntargets]; } st->nbugs += numToAdd; } static void addTargets(int numToAdd) { register bug *b; int i; if (numToAdd + st->ntargets > MAX_TARGETS) numToAdd = MAX_TARGETS-st->ntargets; else if (numToAdd < 0) numToAdd = 0; for (i = 0; i < numToAdd; i++) { b = &st->targets[random()%st->ntargets]; memcpy((char *)&st->targets[st->ntargets+i], (char *)b, sizeof(bug)); b->closest = &st->targets[random()%st->ntargets]; } st->ntargets += numToAdd; } #endif static void computeConstants(struct state *st) { st->halfDtSq = st->dt*st->dt*0.5; st->dtInv = 1.0/st->dt; st->targetVelSq = st->targetVel*st->targetVel; st->maxVelSq = st->maxVel*st->maxVel; st->minVel = st->maxVel*st->minVelMultiplier; st->minVelSq = st->minVel*st->minVel; } static void computeColorIndices(struct state *st) { int i; int schizoLength; /* note: colors are used in *reverse* order! */ /* grayscale */ for (i = 0; i < st->trailLen; i++) { st->grayIndex[st->trailLen-1-i] = 4 + i*16.0/st->trailLen + 0.5; if (st->grayIndex[st->trailLen-1-i] > 19) st->grayIndex[st->trailLen-1-i] = 19; } /* red */ for (i = 0; i < st->trailLen; i++) { st->redIndex[st->trailLen-1-i] = 20 + i*16.0/st->trailLen + 0.5; if (st->redIndex[st->trailLen-1-i] > 35) st->redIndex[st->trailLen-1-i] = 35; } /* blue */ for (i = 0; i < st->trailLen; i++) { st->blueIndex[st->trailLen-1-i] = 36 + i*16.0/st->trailLen + 0.5; if (st->blueIndex[st->trailLen-1-i] > 51) st->blueIndex[st->trailLen-1-i] = 51; } /* gray schizo - same as gray*/ for (i = 0; i < st->trailLen; i++) { st->graySIndex[st->trailLen-1-i] = 4 + i*16.0/st->trailLen + 0.5; if (st->graySIndex[st->trailLen-1-i] > 19) st->graySIndex[st->trailLen-1-i] = 19; } /*schizoLength = st->trailLen/4; if (schizoLength < 3) schizoLength = 3;*/ /* red schizo */ for (i = 0; i < st->trailLen; i++) { /* redSIndex[trailLen-1-i] = 20 + 16.0*(i%schizoLength)/(schizoLength-1.0) + 0.5;*/ st->redSIndex[st->trailLen-1-i] = 20 + i*16.0/st->trailLen + 0.5; if (st->redSIndex[st->trailLen-1-i] > 35) st->redSIndex[st->trailLen-1-i] = 35; } schizoLength = st->trailLen/2; if (schizoLength < 3) schizoLength = 3; /* blue schizo is next */ for (i = 0; i < st->trailLen; i++) { st->blueSIndex[st->trailLen-1-i] = 36 + 16.0*(i%schizoLength)/(schizoLength-1.0) + 0.5; if (st->blueSIndex[st->trailLen-1-i] > 51) st->blueSIndex[st->trailLen-1-i] = 51; } /* random is next */ for (i = 0; i < st->trailLen; i++) { st->randomIndex[i] = 52 + random()%(st->numRandomColors); } } #if 0 static void setParams(bugParams *p) { st->dt = p->dt; st->targetVel = p->targetVel; st->targetAcc = p->targetAcc; st->maxVel = p->maxVel; st->maxAcc = p->maxAcc; st->noise = p->noise; st->nbugs = p->nbugs; st->ntargets = p->ntargets; st->trailLen = p->trailLen; st->colorScheme = p->colorScheme; st->changeProb = p->changeProb; computeConstants(); computeColorIndices(); } #endif static void drawBugs(struct state *st, int *tColorIdx, int tci0, int tnc, int *colorIdx, int ci0, int nc) { register bug *b; register int i, j; int temp; if (((st->head+1)%st->trailLen) == st->tail) { /* first, erase last segment of bugs if necessary */ temp = (st->tail+1) % st->trailLen; b = st->bugs; for (i = 0; i < st->nbugs; i++, b++) { XDrawLine(st->dpy, st->win, st->fgc[0], b->hist[st->tail][0], b->hist[st->tail][1], b->hist[temp][0], b->hist[temp][1]); } b = st->targets; for (i = 0; i < st->ntargets; i++, b++) { XDrawLine(st->dpy, st->win, st->fgc[0], b->hist[st->tail][0], b->hist[st->tail][1], b->hist[temp][0], b->hist[temp][1]); } st->tail = (st->tail+1)%st->trailLen; } for (j = st->tail; j != st->head; j = temp) { temp = (j+1)%st->trailLen; b = st->bugs; for (i = 0; i < st->nbugs; i++, b++) { XDrawLine(st->dpy, st->win, st->fgc[colorIdx[ci0]], b->hist[j][0], b->hist[j][1], b->hist[temp][0], b->hist[temp][1]); } b = st->targets; for (i = 0; i < st->ntargets; i++, b++) { XDrawLine(st->dpy, st->win, st->fgc[tColorIdx[tci0]], b->hist[j][0], b->hist[j][1], b->hist[temp][0], b->hist[temp][1]); } ci0 = (ci0+1)%nc; tci0 = (tci0+1)%tnc; } } static void clearBugs(struct state *st) { register bug *b; register int i, j; int temp; st->tail = st->tail-1; if (st->tail < 0) st->tail = st->trailLen-1; if (((st->head+1)%st->trailLen) == st->tail) { /* first, erase last segment of bugs if necessary */ temp = (st->tail+1) % st->trailLen; b = st->bugs; for (i = 0; i < st->nbugs; i++, b++) { XDrawLine(st->dpy, st->win, st->fgc[0], b->hist[st->tail][0], b->hist[st->tail][1], b->hist[temp][0], b->hist[temp][1]); } b = st->targets; for (i = 0; i < st->ntargets; i++, b++) { XDrawLine(st->dpy, st->win, st->fgc[0], b->hist[st->tail][0], b->hist[st->tail][1], b->hist[temp][0], b->hist[temp][1]); } st->tail = (st->tail+1)%st->trailLen; } for (j = st->tail; j != st->head; j = temp) { temp = (j+1)%st->trailLen; b = st->bugs; for (i = 0; i < st->nbugs; i++, b++) { XDrawLine(st->dpy, st->win, st->fgc[0], b->hist[j][0], b->hist[j][1], b->hist[temp][0], b->hist[temp][1]); } b = st->targets; for (i = 0; i < st->ntargets; i++, b++) { XDrawLine(st->dpy, st->win, st->fgc[0], b->hist[j][0], b->hist[j][1], b->hist[temp][0], b->hist[temp][1]); } } } static void updateState(struct state *st) { register int i; register bug *b; register float ax, ay, temp; float theta; bug *b2; int j; st->head = (st->head+1)%st->trailLen; for (j = 0; j < 5; j++) { /* update closets bug for the bug indicated by checkIndex */ st->checkIndex = (st->checkIndex+1)%st->nbugs; b = &st->bugs[st->checkIndex]; ax = b->closest->pos[0] - b->pos[0]; ay = b->closest->pos[1] - b->pos[1]; temp = ax*ax + ay*ay; for (i = 0; i < st->ntargets; i++) { b2 = &st->targets[i]; if (b2 == b->closest) continue; ax = b2->pos[0] - b->pos[0]; ay = b2->pos[1] - b->pos[1]; theta = ax*ax + ay*ay; if (theta < temp*2) { b->closest = b2; temp = theta; } } } /* update target state */ b = st->targets; for (i = 0; i < st->ntargets; i++, b++) { theta = frand(6.28); ax = st->targetAcc*cos(theta); ay = st->targetAcc*sin(theta); b->vel[0] += ax*st->dt; b->vel[1] += ay*st->dt; /* check velocity */ temp = sq(b->vel[0]) + sq(b->vel[1]); if (temp > st->targetVelSq) { temp = st->targetVel/sqrt(temp); /* save old vel for acc computation */ ax = b->vel[0]; ay = b->vel[1]; /* compute new velocity */ b->vel[0] *= temp; b->vel[1] *= temp; /* update acceleration */ ax = (b->vel[0]-ax)*st->dtInv; ay = (b->vel[1]-ay)*st->dtInv; } /* update position */ b->pos[0] += b->vel[0]*st->dt + ax*st->halfDtSq; b->pos[1] += b->vel[1]*st->dt + ay*st->halfDtSq; /* check limits on targets */ if (b->pos[0] < 0) { /* bounce */ b->pos[0] = -b->pos[0]; b->vel[0] = -b->vel[0]; } else if (b->pos[0] >= st->maxx) { /* bounce */ b->pos[0] = 2*st->maxx-b->pos[0]; b->vel[0] = -b->vel[0]; } if (b->pos[1] < 0) { /* bounce */ b->pos[1] = -b->pos[1]; b->vel[1] = -b->vel[1]; } else if (b->pos[1] >= st->maxy) { /* bounce */ b->pos[1] = 2*st->maxy-b->pos[1]; b->vel[1] = -b->vel[1]; } b->hist[st->head][0] = b->pos[0]*st->xsize; b->hist[st->head][1] = b->pos[1]*st->xsize; } /* update bug state */ b = st->bugs; for (i = 0; i < st->nbugs; i++, b++) { theta = atan2(b->closest->pos[1] - b->pos[1] + frand(st->noise), b->closest->pos[0] - b->pos[0] + frand(st->noise)); ax = st->maxAcc*cos(theta); ay = st->maxAcc*sin(theta); b->vel[0] += ax*st->dt; b->vel[1] += ay*st->dt; /* check velocity */ temp = sq(b->vel[0]) + sq(b->vel[1]); if (temp > st->maxVelSq) { temp = st->maxVel/sqrt(temp); /* save old vel for acc computation */ ax = b->vel[0]; ay = b->vel[1]; /* compute new velocity */ b->vel[0] *= temp; b->vel[1] *= temp; /* update acceleration */ ax = (b->vel[0]-ax)*st->dtInv; ay = (b->vel[1]-ay)*st->dtInv; } else if (temp < st->minVelSq) { temp = st->minVel/sqrt(temp); /* save old vel for acc computation */ ax = b->vel[0]; ay = b->vel[1]; /* compute new velocity */ b->vel[0] *= temp; b->vel[1] *= temp; /* update acceleration */ ax = (b->vel[0]-ax)*st->dtInv; ay = (b->vel[1]-ay)*st->dtInv; } /* update position */ b->pos[0] += b->vel[0]*st->dt + ax*st->halfDtSq; b->pos[1] += b->vel[1]*st->dt + ay*st->halfDtSq; /* check limits on targets */ if (b->pos[0] < 0) { /* bounce */ b->pos[0] = -b->pos[0]; b->vel[0] = -b->vel[0]; } else if (b->pos[0] >= st->maxx) { /* bounce */ b->pos[0] = 2*st->maxx-b->pos[0]; b->vel[0] = -b->vel[0]; } if (b->pos[1] < 0) { /* bounce */ b->pos[1] = -b->pos[1]; b->vel[1] = -b->vel[1]; } else if (b->pos[1] >= st->maxy) { /* bounce */ b->pos[1] = 2*st->maxy-b->pos[1]; b->vel[1] = -b->vel[1]; } b->hist[st->head][0] = b->pos[0]*st->xsize; b->hist[st->head][1] = b->pos[1]*st->xsize; } } static void mutateBug(struct state *st, int which) { int i, j; if (which == 0) { /* turn bug into target */ if (st->ntargets < MAX_TARGETS-1 && st->nbugs > 1) { i = random() % st->nbugs; memcpy((char *)&st->targets[st->ntargets], (char *)&st->bugs[i], sizeof(bug)); memcpy((char *)&st->bugs[i], (char *)&st->bugs[st->nbugs-1], sizeof(bug)); st->targets[st->ntargets].pos[0] = frand(st->maxx); st->targets[st->ntargets].pos[1] = frand(st->maxy); st->nbugs--; st->ntargets++; for (i = 0; i < st->nbugs; i += st->ntargets) { st->bugs[i].closest = &st->targets[st->ntargets-1]; } } } else { /* turn target into bug */ if (st->ntargets > 1 && st->nbugs < MAX_BUGS-1) { /* pick a target */ i = random() % st->ntargets; /* copy state into a new bug */ memcpy((char *)&st->bugs[st->nbugs], (char *)&st->targets[i], sizeof(bug)); st->ntargets--; /* pick a target for the new bug */ st->bugs[st->nbugs].closest = &st->targets[random()%st->ntargets]; for (j = 0; j < st->nbugs; j++) { if (st->bugs[j].closest == &st->targets[st->ntargets]) { st->bugs[j].closest = &st->targets[i]; } else if (st->bugs[j].closest == &st->targets[i]) { st->bugs[j].closest = &st->targets[random()%st->ntargets]; } } st->nbugs++; /* copy the last ntarget into the one we just deleted */ memcpy(&st->targets[i], (char *)&st->targets[st->ntargets], sizeof(bug)); } } } static void mutateParam(float *param) { *param *= 0.75+frand(0.5); } static void randomSmallChange(struct state *st) { int whichCase = 0; whichCase = random()%11; if (++st->rsc_callDepth > 10) { st->rsc_callDepth--; return; } switch(whichCase) { case 0: /* acceleration */ mutateParam(&st->maxAcc); break; case 1: /* target acceleration */ mutateParam(&st->targetAcc); break; case 2: /* velocity */ mutateParam(&st->maxVel); break; case 3: /* target velocity */ mutateParam(&st->targetVel); break; case 4: /* noise */ mutateParam(&st->noise); break; case 5: /* minVelMultiplier */ mutateParam(&st->minVelMultiplier); break; case 6: case 7: /* target to bug */ if (st->ntargets < 2) break; mutateBug(st, 1); break; case 8: /* bug to target */ if (st->nbugs < 2) break; mutateBug(st, 0); if (st->nbugs < 2) break; mutateBug(st, 0); break; case 9: /* color scheme */ st->colorScheme = random()%NUM_SCHEMES; if (st->colorScheme == RANDOM_SCHIZO || st->colorScheme == COLOR_SCHIZO) { /* don't use these quite as much */ st->colorScheme = random()%NUM_SCHEMES; } break; default: randomSmallChange(st); randomSmallChange(st); randomSmallChange(st); randomSmallChange(st); } if (st->minVelMultiplier < 0.3) st->minVelMultiplier = 0.3; else if (st->minVelMultiplier > 0.9) st->minVelMultiplier = 0.9; if (st->noise < 0.01) st->noise = 0.01; if (st->maxVel < 0.02) st->maxVel = 0.02; if (st->targetVel < 0.02) st->targetVel = 0.02; if (st->targetAcc > st->targetVel*0.7) st->targetAcc = st->targetVel*0.7; if (st->maxAcc > st->maxVel*0.7) st->maxAcc = st->maxVel*0.7; if (st->targetAcc > st->targetVel*0.7) st->targetAcc = st->targetVel*0.7; if (st->maxAcc < 0.01) st->maxAcc = 0.01; if (st->targetAcc < 0.005) st->targetAcc = 0.005; computeConstants(st); st->rsc_callDepth--; } static void randomBigChange(struct state *st) { int whichCase = 0; int temp; whichCase = random()%4; if (++st->rbc_callDepth > 3) { st->rbc_callDepth--; return; } switch(whichCase) { case 0: /* trail length */ temp = (random()%(MAX_TRAIL_LEN-25)) + 25; clearBugs(st); st->trailLen = temp; computeColorIndices(st); initBugs(st); break; case 1: /* Whee! */ randomSmallChange(st); randomSmallChange(st); randomSmallChange(st); randomSmallChange(st); randomSmallChange(st); randomSmallChange(st); randomSmallChange(st); randomSmallChange(st); break; case 2: clearBugs(st); initBugs(st); break; case 3: pickNewTargets(st); break; default: temp = random()%st->ntargets; st->targets[temp].pos[0] += frand(st->maxx/4)-st->maxx/8; st->targets[temp].pos[1] += frand(st->maxy/4)-st->maxy/8; /* updateState() will fix bounds */ break; } st->rbc_callDepth--; } static void updateColorIndex(struct state *st, int **tColorIdx, int *tci0, int *tnc, int **colorIdx, int *ci0, int *nc) { switch(st->colorScheme) { case COLOR_TRAILS: *tColorIdx = st->redIndex; *tci0 = 0; *tnc = st->trailLen; *colorIdx = st->blueIndex; *ci0 = 0; *nc = st->trailLen; break; case GRAY_SCHIZO: *tColorIdx = st->graySIndex; *tci0 = st->head; *tnc = st->trailLen; *colorIdx = st->graySIndex; *ci0 = st->head; *nc = st->trailLen; break; case COLOR_SCHIZO: *tColorIdx = st->redSIndex; *tci0 = st->head; *tnc = st->trailLen; *colorIdx = st->blueSIndex; *ci0 = st->head; *nc = st->trailLen; break; case GRAY_TRAILS: *tColorIdx = st->grayIndex; *tci0 = 0; *tnc = st->trailLen; *colorIdx = st->grayIndex; *ci0 = 0; *nc = st->trailLen; break; case RANDOM_TRAILS: *tColorIdx = st->redIndex; *tci0 = 0; *tnc = st->trailLen; *colorIdx = st->randomIndex; *ci0 = 0; *nc = st->trailLen; break; case RANDOM_SCHIZO: *tColorIdx = st->redIndex; *tci0 = st->head; *tnc = st->trailLen; *colorIdx = st->randomIndex; *ci0 = st->head; *nc = st->trailLen; break; } } #if HAVE_GETTIMEOFDAY static void initTime(struct state *st) { #if GETTIMEOFDAY_TWO_ARGS gettimeofday(&st->startupTime, NULL); #else gettimeofday(&st->startupTime); #endif } static double getTime(struct state *st) { struct timeval t; float f; #if GETTIMEOFDAY_TWO_ARGS gettimeofday(&t, NULL); #else gettimeofday(&t); #endif t.tv_sec -= st->startupTime.tv_sec; f = ((double)t.tv_sec) + t.tv_usec*1e-6; return f; } #endif static void * xrayswarm_init (Display *d, Window w) { struct state *st = (struct state *) calloc (1, sizeof(*st)); int i; st->dpy = d; st->win = w; st->dt = 0.3; st->targetVel = 0.03; st->targetAcc = 0.02; st->maxVel = 0.05; st->maxAcc = 0.03; st->noise = 0.01; st->minVelMultiplier = 0.5; st->nbugs = -1; st->ntargets = -1; st->trailLen = -1; st->colorScheme = /* -1 */ 2; st->changeProb = 0.08; if (!initGraphics(st)) abort(); computeConstants(st); initBugs(st); initTime(st); computeColorIndices(st); if (st->changeProb > 0) { for (i = random()%5+5; i >= 0; i--) { randomSmallChange(st); } } return st; } static unsigned long xrayswarm_draw (Display *d, Window w, void *closure) { struct state *st = (struct state *) closure; unsigned long this_delay = st->delay; #if HAVE_GETTIMEOFDAY st->draw_start = getTime(st); #endif if (st->delay > 0) { st->draw_cnt = 2; st->dt = DESIRED_DT/2; } else { st->draw_cnt = 1; st->dt = DESIRED_DT; } for (; st->draw_cnt > 0; st->draw_cnt--) { updateState(st); updateColorIndex(st, &st->draw_targetColorIndex, &st->draw_targetStartColor, &st->draw_targetNumColors, &st->draw_colorIndex, &st->draw_startColor, &st->draw_numColors); drawBugs(st, st->draw_targetColorIndex, st->draw_targetStartColor, st->draw_targetNumColors, st->draw_colorIndex, st->draw_startColor, st->draw_numColors); } #if HAVE_GETTIMEOFDAY st->draw_end = getTime(st); st->draw_nframes++; if (st->draw_end > st->draw_start+0.5) { if (frand(1.0) < st->changeProb) randomSmallChange(st); if (frand(1.0) < st->changeProb*0.3) randomBigChange(st); st->draw_elapsed = st->draw_end-st->draw_start; st->draw_timePerFrame = st->draw_elapsed/st->draw_nframes - st->delay*1e-6; st->draw_fps = st->draw_nframes/st->draw_elapsed; /* printf("elapsed: %.3f\n", elapsed); printf("fps: %.1f secs per frame: %.3f delay: %f\n", fps, timePerFrame, delay); */ if (st->draw_fps > MAX_FPS) { st->delay = (1.0/MAX_FPS - (st->draw_timePerFrame + st->delay*1e-6))*1e6; } else if (st->dt*st->draw_fps < MIN_FPS*DESIRED_DT) { /* need to speed things up somehow */ if (0 && st->nbugs > 10) { /*printf("reducing bugs to improve speed.\n");*/ clearBugs(st); st->nbugs *= st->draw_fps/MIN_FPS; if (st->ntargets >= st->nbugs/2) mutateBug(st, 1); } else if (0 && st->dt < 0.3) { /*printf("increasing dt to improve speed.\n");*/ st->dt *= MIN_FPS/st->draw_fps; computeConstants(st); } else if (st->trailLen > 10) { /*printf("reducing trail length to improve speed.\n");*/ clearBugs(st); st->trailLen = st->trailLen * (st->draw_fps/MIN_FPS); if (st->trailLen < 10) st->trailLen = 10; computeColorIndices(st); initBugs(st); } } st->draw_start = getTime(st); st->draw_nframes = 0; } #else if (frand(1) < st->changeProb*2/100.0) randomSmallChange(st); if (frand(1) < st->changeProb*0.3/100.0) randomBigChange(st); #endif if (st->delay <= 10000) { st->draw_delayAccum += st->delay; if (st->draw_delayAccum > 10000) { this_delay = st->draw_delayAccum; st->draw_delayAccum = 0; st->draw_sleepCount = 0; } if (++st->draw_sleepCount > 2) { st->draw_sleepCount = 0; this_delay = 10000; } } return this_delay; } 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 xrayswarm_event (Display *dpy, Window window, void *closure, XEvent *event) { return False; } static void xrayswarm_free (Display *dpy, Window window, void *closure) { struct state *st = (struct state *) closure; free (st); } XSCREENSAVER_MODULE ("XRaySwarm", xrayswarm) xscreensaver-5.36/hacks/hyperball.c000644 000767 000024 00000174337 12717750055 017405 0ustar00jwzstaff000000 000000 /* xscreensaver, Copyright (c) 1992, 1995, 1996, 1998, 2000 * 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 code derived from TI Explorer Lisp code by Joe Keane, Fritz Mueller, * and Jamie Zawinski. */ #include #include "screenhack.h" #define POINT_COUNT 600 #define LINE_COUNT 1200 #define ANGLE_SCALE 0.001 struct point_info { float pg_a; float pg_b; float pg_c; float pg_d; }; struct line_info { short li_ip; short li_iq; char li_color; char li_pad[3]; }; struct point_state { short old_x, old_y; short new_x, new_y; unsigned char old_dep, new_dep; }; struct hyper_state { char hs_stop; char hs_resize; char hs_redraw; char hs_icon; Display *hs_display; Window hs_window; float hs_observer_z; float hs_unit_scale; float hs_offset_x; float hs_offset_y; int hs_delay; double hs_angle_xy; double hs_angle_xz; double hs_angle_yz; double hs_angle_xw; double hs_angle_yw; double hs_angle_zw; double hs_cos_xy, hs_sin_xy; double hs_cos_xz, hs_sin_xz; double hs_cos_yz, hs_sin_yz; double hs_cos_xw, hs_sin_xw; double hs_cos_yw, hs_sin_yw; double hs_cos_zw, hs_sin_zw; double hs_ref_ax, hs_ref_ay, hs_ref_az, hs_ref_aw; double hs_ref_bx, hs_ref_by, hs_ref_bz, hs_ref_bw; double hs_ref_cx, hs_ref_cy, hs_ref_cz, hs_ref_cw; double hs_ref_dx, hs_ref_dy, hs_ref_dz, hs_ref_dw; GC hs_color_gcs[8][8]; GC black_gc; char hs_moved[POINT_COUNT]; struct point_state hs_points[POINT_COUNT]; int roted; }; static const struct point_info point_table[POINT_COUNT]; static const struct line_info line_table[LINE_COUNT]; static void set_sizes (struct hyper_state *hs, int width, int height); static void * hyperball_init (Display *dpy, Window win) { struct hyper_state *hs = (struct hyper_state *) calloc (1, sizeof(*hs)); XGCValues gcv; Colormap cmap; /* double xy, xz, yz, xw, yw, zw; */ unsigned long bg_pixel; float observer_z; int delay; hs->hs_display = dpy; hs->hs_window = win; observer_z = get_float_resource (dpy, "observer-z", "Float"); if (observer_z < 1.125) observer_z = 1.125; hs->hs_observer_z = observer_z; { XWindowAttributes wa; XGetWindowAttributes (dpy, win, &wa); cmap = wa.colormap; set_sizes (hs, wa.width, wa.height); } hs->hs_angle_xy = get_float_resource (dpy, "xy", "Float") * ANGLE_SCALE; hs->hs_angle_xz = get_float_resource (dpy, "xz", "Float") * ANGLE_SCALE; hs->hs_angle_yz = get_float_resource (dpy, "yz", "Float") * ANGLE_SCALE; hs->hs_angle_xw = get_float_resource (dpy, "xw", "Float") * ANGLE_SCALE; hs->hs_angle_yw = get_float_resource (dpy, "yw", "Float") * ANGLE_SCALE; hs->hs_angle_zw = get_float_resource (dpy, "zw", "Float") * ANGLE_SCALE; delay = get_integer_resource (dpy, "delay", "Integer"); hs->hs_delay = delay; bg_pixel = get_pixel_resource (dpy, cmap, "background", "Background"); if (mono_p) { GC black_gc; unsigned long fg_pixel; GC white_gc; gcv.function = GXcopy; gcv.foreground = bg_pixel; black_gc = XCreateGC (dpy, win, GCForeground|GCFunction, &gcv); fg_pixel = get_pixel_resource (dpy, cmap, "foreground", "Foreground"); gcv.foreground = fg_pixel; white_gc = XCreateGC (dpy, win, GCForeground|GCFunction, &gcv); hs->hs_color_gcs[0][0] = black_gc; hs->hs_color_gcs[0][1] = white_gc; } else { int col; int dep; gcv.function = GXcopy; gcv.foreground = get_pixel_resource (dpy, cmap, "background", "Background"); hs->black_gc = XCreateGC (dpy, win, GCForeground|GCFunction, &gcv); for (col = 0; col < 8; col++) for (dep = 0; dep < 8; dep++) { char buffer[16]; unsigned long fg_pixel; GC color_gc; sprintf (buffer, "color%d%d", col, dep); fg_pixel = get_pixel_resource (dpy, cmap, buffer, "Foreground"); gcv.foreground = fg_pixel /*^ bg_pixel*/; color_gc = XCreateGC (dpy, win, GCForeground|GCFunction, &gcv); hs->hs_color_gcs[col][dep] = color_gc; } } { double xy; double xz; double yz; double xw; double yw; double zw; #if 1 double cos_xy, sin_xy; double cos_xz, sin_xz; double cos_yz, sin_yz; double cos_xw, sin_xw; double cos_yw, sin_yw; double cos_zw, sin_zw; #endif hs->hs_ref_ax = 1.0, hs->hs_ref_ay = 0.0, hs->hs_ref_az = 0.0, hs->hs_ref_aw = 0.0; hs->hs_ref_bx = 0.0, hs->hs_ref_by = 1.0, hs->hs_ref_bz = 0.0, hs->hs_ref_bw = 0.0; hs->hs_ref_cx = 0.0, hs->hs_ref_cy = 0.0, hs->hs_ref_cz = 1.0, hs->hs_ref_cw = 0.0; hs->hs_ref_dx = 0.0, hs->hs_ref_dy = 0.0, hs->hs_ref_dz = 0.0, hs->hs_ref_dw = 1.0; xy = hs->hs_angle_xy; xz = hs->hs_angle_xz; yz = hs->hs_angle_yz; xw = hs->hs_angle_xw; yw = hs->hs_angle_yw; zw = hs->hs_angle_zw; cos_xy = cos (xy), sin_xy = sin (xy); hs->hs_cos_xy = cos_xy, hs->hs_sin_xy = sin_xy; cos_xz = cos (xz), sin_xz = sin (xz); hs->hs_cos_xz = cos_xz, hs->hs_sin_xz = sin_xz; cos_yz = cos (yz), sin_yz = sin (yz); hs->hs_cos_yz = cos_yz, hs->hs_sin_yz = sin_yz; cos_xw = cos (xw), sin_xw = sin (xw); hs->hs_cos_xw = cos_xw, hs->hs_sin_xw = sin_xw; cos_yw = cos (yw), sin_yw = sin (yw); hs->hs_cos_yw = cos_yw, hs->hs_sin_yw = sin_yw; cos_zw = cos (zw), sin_zw = sin (zw); hs->hs_cos_zw = cos_zw, hs->hs_sin_zw = sin_zw; } return hs; } static unsigned long hyperball_draw (Display *dpy, Window window, void *closure) { struct hyper_state *hs = (struct hyper_state *) closure; int icon; int resize; int redraw; int stop; int delay; icon = hs->hs_icon; resize = hs->hs_resize; if (icon || !(hs->roted | resize)) goto skip1; #ifdef HAVE_JWXYZ /* Don't second-guess Quartz's double-buffering */ XClearWindow (dpy, window); #endif { int pc; const struct point_info *point_ptr; struct point_state *point_state; float observer_z; float unit_scale; float offset_x; float offset_y; char *mark_ptr; pc = POINT_COUNT; point_ptr = &point_table[0]; point_state = &hs->hs_points[0]; mark_ptr = &hs->hs_moved[0]; while (--pc >= 0) { double pos_a; double pos_b; double pos_c; double pos_d; double az, bz, cz, dz; double sum_z; double ax, bx, cx, dx; double sum_x; double ay, by, cy, dy; double sum_y; double mul; int old_x; int old_y; int old_dep; double xf; double yf; int new_x; int new_y; int new_dep; int mov; pos_a = point_ptr->pg_a; pos_b = point_ptr->pg_b; pos_c = point_ptr->pg_c; pos_d = point_ptr->pg_d; point_ptr++; az = hs->hs_ref_az; bz = hs->hs_ref_bz; cz = hs->hs_ref_cz; dz = hs->hs_ref_dz; ax = hs->hs_ref_ax; bx = hs->hs_ref_bx; cx = hs->hs_ref_cx; dx = hs->hs_ref_dx; ay = hs->hs_ref_ay; by = hs->hs_ref_by; cy = hs->hs_ref_cy; dy = hs->hs_ref_dy; sum_z = pos_a * az + pos_b * bz + pos_c * cz + pos_d * dz; observer_z = hs->hs_observer_z; unit_scale = hs->hs_unit_scale; sum_x = pos_a * ax + pos_b * bx + pos_c * cx + pos_d * dx; sum_y = pos_a * ay + pos_b * by + pos_c * cy + pos_d * dy; mul = unit_scale / (observer_z - sum_z); offset_x = hs->hs_offset_x; offset_y = hs->hs_offset_y; old_x = point_state->new_x; old_y = point_state->new_y; old_dep = point_state->new_dep; xf = sum_x * mul + offset_x; yf = sum_y * mul + offset_y; new_x = (int)rint(xf); new_y = (int)rint(yf); new_dep = (int)floor(sum_z * -128.0) + 128; point_state->old_x = old_x; point_state->old_y = old_y; point_state->old_dep = old_dep; point_state->new_x = new_x; point_state->new_y = new_y; point_state->new_dep = new_dep; point_state++; mov = new_x != old_x || new_y != old_y || new_dep != old_dep; *mark_ptr = mov; mark_ptr++; } } skip1: icon = hs->hs_icon; redraw = hs->hs_redraw; if (icon || !(hs->roted | redraw)) goto skip2; { int lc; const struct line_info *li_ptr; int mono; Window win = hs->hs_window; lc = LINE_COUNT; li_ptr = &line_table[0]; mono = mono_p; while (--lc >= 0) { int ip; int iq; int col; int mov_p; int mov_q; struct point_state *sp; struct point_state *sq; int p_x; int p_y; int q_x; int q_y; GC erase_gc; GC draw_gc; int old_sum; int new_sum; int old_dep; int new_dep; ip = li_ptr->li_ip; iq = li_ptr->li_iq; col = li_ptr->li_color; li_ptr++; mov_p = hs->hs_moved[ip]; mov_q = hs->hs_moved[iq]; if (!(redraw | mov_p | mov_q)) continue; sp = &hs->hs_points[ip]; sq = &hs->hs_points[iq]; if (mono) { erase_gc = hs->hs_color_gcs[0][0]; draw_gc = hs->hs_color_gcs[0][1]; } else { GC *row; old_sum = sp->old_dep + sq->old_dep; new_sum = sp->new_dep + sq->new_dep; row = &hs->hs_color_gcs[col][0]; old_dep = old_sum >> 6; new_dep = new_sum >> 6; erase_gc = hs->black_gc; draw_gc = row[new_dep]; } if (!redraw && erase_gc) { p_x = sp->old_x; p_y = sp->old_y; q_x = sq->old_x; q_y = sq->old_y; XDrawLine (dpy, win, erase_gc, p_x, p_y, q_x, q_y); } p_x = sp->new_x; p_y = sp->new_y; q_x = sq->new_x; q_y = sq->new_y; XDrawLine (dpy, win, draw_gc, p_x, p_y, q_x, q_y); } } skip2: stop = hs->hs_stop; hs->roted = 0; if (stop) goto skip3; hs->roted = 1; { double cos_a; double sin_a; double old_u; double old_v; double new_u; double new_v; /* If you get error messages about the following forms, and you think you're using an ANSI C conforming compiler, then you're mistaken. Possibly you're mixing an ANSI compiler with a non-ANSI preprocessor, or vice versa. Regardless, your system is broken; it's not a bug in this program. */ #if defined(__STDC__) || defined(__ANSI_CPP__) #define rotate(name,dim0,dim1) \ old_u = hs->hs_ref_##name##dim0; \ old_v = hs->hs_ref_##name##dim1; \ new_u = old_u * cos_a + old_v * sin_a; \ new_v = old_v * cos_a - old_u * sin_a; \ hs->hs_ref_##name##dim0 = new_u; \ hs->hs_ref_##name##dim1 = new_v; #define rotates(dim0,dim1) \ if (hs->hs_sin_##dim0##dim1 != 0) { \ cos_a = hs->hs_cos_##dim0##dim1; \ sin_a = hs->hs_sin_##dim0##dim1; \ rotate(a, dim0, dim1); \ rotate(b, dim0, dim1); \ rotate(c, dim0, dim1); \ rotate(d, dim0, dim1); \ } #else /* !__STDC__, courtesy of Andreas Luik */ #define rotate(name,dim0,dim1,cos,sin) \ old_u = hs->hs_ref_/**/name/**/dim0; \ old_v = hs->hs_ref_/**/name/**/dim1; \ new_u = old_u * cos_a + old_v * sin_a; \ new_v = old_v * cos_a - old_u * sin_a; \ hs->hs_ref_/**/name/**/dim0 = new_u; \ hs->hs_ref_/**/name/**/dim1 = new_v; #define rotates(dim0,dim1) \ if (hs->hs_sin_/**/dim0/**/dim1 != 0) { \ cos_a = hs->hs_cos_/**/dim0/**/dim1; \ sin_a = hs->hs_sin_/**/dim0/**/dim1; \ rotate(a, dim0, dim1); \ rotate(b, dim0, dim1); \ rotate(c, dim0, dim1); \ rotate(d, dim0, dim1); \ } #endif rotates (x, y); rotates (x, z); rotates (y, z); rotates (x, w); rotates (y, w); rotates (z, w); } skip3: /* stop = hs->hs_stop; */ delay = hs->hs_delay; if (stop && delay < 10000) delay = 10000; hs->hs_redraw = 0; hs->hs_resize = 0; return delay; } static Bool hyperball_event (Display *dpy, Window win, void *closure, XEvent *event) { struct hyper_state *hs = (struct hyper_state *) closure; hs->hs_redraw = 0; switch (event->type) { case Expose: hs->hs_icon = 0; hs->hs_redraw = 1; break; case ButtonPress: switch (event->xbutton.button) { case 2: hs->hs_stop = !hs->hs_stop; break; default: break; } break; #ifndef HAVE_JWXYZ case UnmapNotify: hs->hs_icon = 1; hs->hs_redraw = 0; break; #endif default: break; } if (hs->hs_redraw) XClearWindow (dpy, win); return False; } static void hyperball_reshape (Display *dpy, Window window, void *closure, unsigned int w, unsigned int h) { struct hyper_state *hs = (struct hyper_state *) closure; hs->hs_icon = 0; hs->hs_resize = 1; hs->hs_redraw = 1; set_sizes (hs, w, h); XClearWindow (dpy, window); } static void set_sizes (struct hyper_state *hs, int width, int height) { double observer_z; int min_dim; double var; double offset_x; double offset_y; double unit_scale; observer_z = hs->hs_observer_z; min_dim = width < height ? width : height; var = sqrt(observer_z * observer_z - 1.0); offset_x = 0.5 * (width - 1); offset_y = 0.5 * (height - 1); unit_scale = 0.4 * min_dim * var; hs->hs_offset_x = (float)offset_x; hs->hs_offset_y = (float)offset_y; hs->hs_unit_scale = (float)unit_scale; } static void hyperball_free (Display *dpy, Window window, void *closure) { struct hyper_state *hs = (struct hyper_state *) closure; free (hs); } /* data */ static const struct point_info point_table[POINT_COUNT] = { { 0.93, 0.30, 0.09, 0.03, }, { 0.84, 0.49, -0.08, 0.05, }, { 0.72, 0.65, 0.02, -0.09, }, { 0.57, 0.79, 0.05, 0.07, }, { 0.40, 0.89, -0.09, -0.01, }, { 0.20, 0.95, 0.07, -0.06, }, { 0.00, 0.97, 0.00, 0.09, }, { -0.20, 0.95, -0.07, -0.06, }, { -0.40, 0.89, 0.09, -0.01, }, { -0.57, 0.79, -0.05, 0.07, }, { -0.72, 0.65, -0.02, -0.09, }, { -0.84, 0.49, 0.08, 0.05, }, { -0.93, 0.30, -0.09, 0.03, }, { -0.97, 0.10, 0.04, -0.08, }, { -0.97, -0.10, 0.04, 0.08, }, { -0.93, -0.30, -0.09, -0.03, }, { -0.84, -0.49, 0.08, -0.05, }, { -0.72, -0.65, -0.02, 0.09, }, { -0.57, -0.79, -0.05, -0.07, }, { -0.40, -0.89, 0.09, 0.01, }, { -0.20, -0.95, -0.07, 0.06, }, { 0.00, -0.97, 0.00, -0.09, }, { 0.20, -0.95, 0.07, 0.06, }, { 0.40, -0.89, -0.09, 0.01, }, { 0.57, -0.79, 0.05, -0.07, }, { 0.72, -0.65, 0.02, 0.09, }, { 0.84, -0.49, -0.08, -0.05, }, { 0.93, -0.30, 0.09, -0.03, }, { 0.97, -0.10, -0.04, 0.08, }, { 0.97, 0.10, -0.04, -0.08, }, { 0.27, 0.83, -0.13, -0.41, }, { 0.09, 0.87, 0.40, 0.18, }, { -0.09, 0.87, -0.40, 0.18, }, { -0.27, 0.83, 0.13, -0.41, }, { -0.44, 0.76, 0.22, 0.38, }, { -0.59, 0.65, -0.42, -0.09, }, { -0.71, 0.51, 0.35, -0.25, }, { -0.80, 0.36, -0.05, 0.43, }, { -0.86, 0.18, -0.29, -0.32, }, { -0.88, 0.00, 0.43, 0.00, }, { -0.86, -0.18, -0.29, 0.32, }, { -0.80, -0.36, -0.05, -0.43, }, { -0.71, -0.51, 0.35, 0.25, }, { -0.59, -0.65, -0.42, 0.09, }, { -0.44, -0.76, 0.22, -0.38, }, { -0.27, -0.83, 0.13, 0.41, }, { -0.09, -0.87, -0.40, -0.18, }, { 0.09, -0.87, 0.40, -0.18, }, { 0.27, -0.83, -0.13, 0.41, }, { 0.44, -0.76, -0.22, -0.38, }, { 0.59, -0.65, 0.42, 0.09, }, { 0.71, -0.51, -0.35, 0.25, }, { 0.80, -0.36, 0.05, -0.43, }, { 0.86, -0.18, 0.29, 0.32, }, { 0.88, 0.00, -0.43, 0.00, }, { 0.86, 0.18, 0.29, -0.32, }, { 0.80, 0.36, 0.05, 0.43, }, { 0.71, 0.51, -0.35, -0.25, }, { 0.59, 0.65, 0.42, -0.09, }, { 0.44, 0.76, -0.22, 0.38, }, { -0.13, 0.41, -0.27, 0.83, }, { -0.22, 0.38, -0.44, -0.76, }, { -0.29, 0.32, 0.86, 0.18, }, { -0.35, 0.25, -0.71, 0.51, }, { -0.40, 0.18, 0.09, -0.87, }, { -0.42, 0.09, 0.59, 0.65, }, { -0.43, 0.00, -0.88, 0.00, }, { -0.42, -0.09, 0.59, -0.65, }, { -0.40, -0.18, 0.09, 0.87, }, { -0.35, -0.25, -0.71, -0.51, }, { -0.29, -0.32, 0.86, -0.18, }, { -0.22, -0.38, -0.44, 0.76, }, { -0.13, -0.41, -0.27, -0.83, }, { -0.05, -0.43, 0.80, 0.36, }, { 0.05, -0.43, -0.80, 0.36, }, { 0.13, -0.41, 0.27, -0.83, }, { 0.22, -0.38, 0.44, 0.76, }, { 0.29, -0.32, -0.86, -0.18, }, { 0.35, -0.25, 0.71, -0.51, }, { 0.40, -0.18, -0.09, 0.87, }, { 0.42, -0.09, -0.59, -0.65, }, { 0.43, 0.00, 0.88, 0.00, }, { 0.42, 0.09, -0.59, 0.65, }, { 0.40, 0.18, -0.09, -0.87, }, { 0.35, 0.25, 0.71, 0.51, }, { 0.29, 0.32, -0.86, 0.18, }, { 0.22, 0.38, 0.44, -0.76, }, { 0.13, 0.41, 0.27, 0.83, }, { 0.05, 0.43, -0.80, -0.36, }, { -0.05, 0.43, 0.80, -0.36, }, { 0.09, -0.03, -0.93, 0.30, }, { 0.09, -0.01, 0.40, -0.89, }, { 0.09, 0.01, 0.40, 0.89, }, { 0.09, 0.03, -0.93, -0.30, }, { 0.08, 0.05, 0.84, -0.49, }, { 0.07, 0.06, -0.20, 0.95, }, { 0.05, 0.07, -0.57, -0.79, }, { 0.04, 0.08, 0.97, 0.10, }, { 0.02, 0.09, -0.72, 0.65, }, { 0.00, 0.09, 0.00, -0.97, }, { -0.02, 0.09, 0.72, 0.65, }, { -0.04, 0.08, -0.97, 0.10, }, { -0.05, 0.07, 0.57, -0.79, }, { -0.07, 0.06, 0.20, 0.95, }, { -0.08, 0.05, -0.84, -0.49, }, { -0.09, 0.03, 0.93, -0.30, }, { -0.09, 0.01, -0.40, 0.89, }, { -0.09, -0.01, -0.40, -0.89, }, { -0.09, -0.03, 0.93, 0.30, }, { -0.08, -0.05, -0.84, 0.49, }, { -0.07, -0.06, 0.20, -0.95, }, { -0.05, -0.07, 0.57, 0.79, }, { -0.04, -0.08, -0.97, -0.10, }, { -0.02, -0.09, 0.72, -0.65, }, { 0.00, -0.09, 0.00, 0.97, }, { 0.02, -0.09, -0.72, -0.65, }, { 0.04, -0.08, 0.97, -0.10, }, { 0.05, -0.07, -0.57, 0.79, }, { 0.07, -0.06, -0.20, -0.95, }, { 0.08, -0.05, 0.84, 0.49, }, { 0.64, 0.67, -0.15, -0.28, }, { 0.49, 0.79, 0.30, 0.07, }, { 0.31, 0.87, -0.26, 0.18, }, { 0.13, 0.92, 0.04, -0.31, }, { -0.07, 0.92, 0.20, 0.24, }, { -0.26, 0.89, -0.31, -0.01, }, { -0.44, 0.82, 0.22, -0.23, }, { -0.60, 0.71, 0.02, 0.31, }, { -0.73, 0.57, -0.25, -0.19, }, { -0.83, 0.40, 0.31, -0.06, }, { -0.90, 0.22, -0.16, 0.27, }, { -0.93, 0.03, -0.09, -0.30, }, { -0.91, -0.16, 0.28, 0.14, }, { -0.86, -0.35, -0.29, 0.12, }, { -0.77, -0.52, 0.11, -0.29, }, { -0.64, -0.67, 0.15, 0.28, }, { -0.49, -0.79, -0.30, -0.07, }, { -0.31, -0.87, 0.26, -0.18, }, { -0.13, -0.92, -0.04, 0.31, }, { 0.07, -0.92, -0.20, -0.24, }, { 0.26, -0.89, 0.31, 0.01, }, { 0.44, -0.82, -0.22, 0.23, }, { 0.60, -0.71, -0.02, -0.31, }, { 0.73, -0.57, 0.25, 0.19, }, { 0.83, -0.40, -0.31, 0.06, }, { 0.90, -0.22, 0.16, -0.27, }, { 0.93, -0.03, 0.09, 0.30, }, { 0.91, 0.16, -0.28, -0.14, }, { 0.86, 0.35, 0.29, -0.12, }, { 0.77, 0.52, -0.11, 0.29, }, { 0.44, 0.82, -0.22, -0.23, }, { 0.26, 0.89, 0.31, -0.01, }, { 0.07, 0.92, -0.20, 0.24, }, { -0.12, 0.92, -0.04, -0.31, }, { -0.31, 0.87, 0.26, 0.18, }, { -0.49, 0.79, -0.30, 0.07, }, { -0.64, 0.67, 0.15, -0.28, }, { -0.77, 0.52, 0.11, 0.29, }, { -0.86, 0.35, -0.29, -0.12, }, { -0.91, 0.16, 0.28, -0.14, }, { -0.93, -0.03, -0.09, 0.30, }, { -0.90, -0.22, -0.16, -0.27, }, { -0.83, -0.40, 0.31, 0.06, }, { -0.73, -0.57, -0.25, 0.19, }, { -0.60, -0.71, 0.02, -0.31, }, { -0.44, -0.82, 0.22, 0.23, }, { -0.26, -0.89, -0.31, 0.01, }, { -0.07, -0.92, 0.20, -0.24, }, { 0.12, -0.92, 0.04, 0.31, }, { 0.31, -0.87, -0.26, -0.18, }, { 0.49, -0.79, 0.30, -0.07, }, { 0.64, -0.67, -0.15, 0.28, }, { 0.77, -0.52, -0.11, -0.29, }, { 0.86, -0.35, 0.29, 0.12, }, { 0.91, -0.16, -0.28, 0.14, }, { 0.93, 0.03, 0.09, -0.30, }, { 0.90, 0.22, 0.16, 0.27, }, { 0.83, 0.40, -0.31, -0.06, }, { 0.73, 0.57, 0.25, -0.19, }, { 0.60, 0.71, -0.02, 0.31, }, { -0.13, 0.83, -0.27, -0.41, }, { -0.30, 0.79, 0.49, 0.07, }, { -0.46, 0.71, -0.38, 0.31, }, { -0.60, 0.60, 0.02, -0.49, }, { -0.71, 0.46, 0.35, 0.35, }, { -0.79, 0.30, -0.49, 0.03, }, { -0.83, 0.13, 0.31, -0.38, }, { -0.84, -0.05, 0.08, 0.49, }, { -0.81, -0.22, -0.41, -0.27, }, { -0.75, -0.38, 0.48, -0.13, }, { -0.65, -0.53, -0.22, 0.44, }, { -0.53, -0.66, -0.18, -0.46, }, { -0.38, -0.75, 0.46, 0.17, }, { -0.22, -0.82, -0.44, 0.23, }, { -0.04, -0.84, 0.12, -0.48, }, { 0.13, -0.83, 0.27, 0.41, }, { 0.30, -0.79, -0.49, -0.07, }, { 0.46, -0.71, 0.38, -0.31, }, { 0.60, -0.60, -0.02, 0.49, }, { 0.71, -0.46, -0.35, -0.35, }, { 0.79, -0.30, 0.49, -0.03, }, { 0.83, -0.13, -0.31, 0.38, }, { 0.84, 0.05, -0.08, -0.49, }, { 0.81, 0.22, 0.41, 0.27, }, { 0.75, 0.38, -0.48, 0.13, }, { 0.65, 0.53, 0.22, -0.44, }, { 0.53, 0.66, 0.18, 0.46, }, { 0.38, 0.75, -0.46, -0.17, }, { 0.22, 0.82, 0.44, -0.23, }, { 0.04, 0.84, -0.12, 0.48, }, { -0.65, 0.53, -0.22, -0.44, }, { -0.75, 0.38, 0.48, 0.13, }, { -0.81, 0.22, -0.41, 0.27, }, { -0.84, 0.05, 0.08, -0.49, }, { -0.83, -0.13, 0.31, 0.38, }, { -0.79, -0.30, -0.49, -0.03, }, { -0.71, -0.46, 0.35, -0.35, }, { -0.60, -0.60, 0.02, 0.49, }, { -0.46, -0.71, -0.38, -0.31, }, { -0.30, -0.79, 0.49, -0.07, }, { -0.13, -0.83, -0.27, 0.41, }, { 0.04, -0.84, -0.13, -0.48, }, { 0.22, -0.82, 0.44, 0.23, }, { 0.38, -0.75, -0.46, 0.17, }, { 0.53, -0.66, 0.18, -0.46, }, { 0.65, -0.53, 0.22, 0.44, }, { 0.75, -0.38, -0.48, -0.13, }, { 0.81, -0.22, 0.41, -0.27, }, { 0.84, -0.05, -0.08, 0.49, }, { 0.83, 0.13, -0.31, -0.38, }, { 0.79, 0.30, 0.49, 0.03, }, { 0.71, 0.46, -0.35, 0.35, }, { 0.60, 0.60, -0.02, -0.49, }, { 0.46, 0.71, 0.38, 0.31, }, { 0.30, 0.79, -0.49, 0.07, }, { 0.13, 0.83, 0.27, -0.41, }, { -0.04, 0.84, 0.13, 0.48, }, { -0.22, 0.82, -0.44, -0.23, }, { -0.38, 0.75, 0.46, -0.17, }, { -0.53, 0.66, -0.18, 0.46, }, { 0.11, 0.78, -0.33, -0.47, }, { -0.05, 0.79, 0.57, 0.07, }, { -0.22, 0.76, -0.44, 0.38, }, { -0.37, 0.70, 0.01, -0.58, }, { -0.51, 0.60, 0.42, 0.40, }, { -0.62, 0.49, -0.57, 0.05, }, { -0.71, 0.35, 0.35, -0.46, }, { -0.77, 0.19, 0.11, 0.57, }, { -0.79, 0.03, -0.49, -0.30, }, { -0.78, -0.14, 0.55, -0.16, }, { -0.73, -0.29, -0.25, 0.52, }, { -0.65, -0.44, -0.22, -0.53, }, { -0.55, -0.57, 0.54, 0.19, }, { -0.42, -0.67, -0.51, 0.28, }, { -0.27, -0.74, 0.13, -0.56, }, { -0.11, -0.78, 0.33, 0.47, }, { 0.05, -0.79, -0.57, -0.07, }, { 0.22, -0.76, 0.44, -0.38, }, { 0.37, -0.70, -0.01, 0.58, }, { 0.51, -0.60, -0.42, -0.40, }, { 0.62, -0.49, 0.57, -0.05, }, { 0.71, -0.35, -0.35, 0.46, }, { 0.77, -0.19, -0.11, -0.57, }, { 0.79, -0.03, 0.49, 0.30, }, { 0.78, 0.14, -0.55, 0.16, }, { 0.73, 0.29, 0.25, -0.52, }, { 0.65, 0.44, 0.22, 0.53, }, { 0.55, 0.57, -0.54, -0.19, }, { 0.42, 0.67, 0.51, -0.28, }, { 0.27, 0.74, -0.13, 0.56, }, { -0.73, 0.29, -0.25, -0.52, }, { -0.78, 0.14, 0.55, 0.16, }, { -0.79, -0.03, -0.49, 0.30, }, { -0.77, -0.19, 0.11, -0.57, }, { -0.71, -0.35, 0.35, 0.46, }, { -0.62, -0.49, -0.57, -0.05, }, { -0.51, -0.60, 0.42, -0.40, }, { -0.37, -0.70, 0.01, 0.58, }, { -0.22, -0.76, -0.44, -0.38, }, { -0.05, -0.79, 0.57, -0.07, }, { 0.11, -0.78, -0.33, 0.47, }, { 0.27, -0.74, -0.13, -0.56, }, { 0.42, -0.67, 0.51, 0.28, }, { 0.55, -0.57, -0.54, 0.19, }, { 0.65, -0.44, 0.22, -0.53, }, { 0.73, -0.29, 0.25, 0.52, }, { 0.78, -0.14, -0.55, -0.16, }, { 0.79, 0.03, 0.49, -0.30, }, { 0.77, 0.19, -0.11, 0.57, }, { 0.71, 0.35, -0.35, -0.46, }, { 0.62, 0.49, 0.57, 0.05, }, { 0.51, 0.60, -0.42, 0.40, }, { 0.37, 0.70, -0.01, -0.58, }, { 0.22, 0.76, 0.44, 0.38, }, { 0.05, 0.79, -0.57, 0.07, }, { -0.11, 0.78, 0.33, -0.47, }, { -0.27, 0.74, 0.13, 0.56, }, { -0.42, 0.67, -0.51, -0.28, }, { -0.55, 0.57, 0.54, -0.19, }, { -0.65, 0.44, -0.22, 0.53, }, { -0.28, 0.70, -0.24, -0.58, }, { -0.42, 0.62, 0.59, 0.21, }, { -0.54, 0.52, -0.55, 0.29, }, { -0.64, 0.40, 0.15, -0.60, }, { -0.71, 0.25, 0.35, 0.51, }, { -0.75, 0.10, -0.62, -0.08, }, { -0.75, -0.06, 0.48, -0.40, }, { -0.72, -0.21, -0.02, 0.62, }, { -0.66, -0.36, -0.45, -0.43, }, { -0.57, -0.49, 0.62, -0.05, }, { -0.46, -0.60, -0.38, 0.49, }, { -0.33, -0.68, -0.11, -0.61, }, { -0.18, -0.73, 0.53, 0.33, }, { -0.02, -0.75, -0.60, 0.17, }, { 0.13, -0.74, 0.27, -0.56, }, { 0.28, -0.70, 0.24, 0.58, }, { 0.42, -0.62, -0.59, -0.21, }, { 0.54, -0.52, 0.55, -0.29, }, { 0.64, -0.40, -0.15, 0.60, }, { 0.71, -0.25, -0.35, -0.51, }, { 0.75, -0.10, 0.62, 0.08, }, { 0.75, 0.06, -0.48, 0.40, }, { 0.72, 0.21, 0.02, -0.62, }, { 0.66, 0.36, 0.45, 0.43, }, { 0.57, 0.49, -0.62, 0.05, }, { 0.46, 0.60, 0.38, -0.49, }, { 0.33, 0.68, 0.11, 0.61, }, { 0.18, 0.73, -0.53, -0.33, }, { 0.02, 0.75, 0.60, -0.17, }, { -0.13, 0.74, -0.27, 0.56, }, { -0.46, 0.60, -0.38, -0.49, }, { -0.57, 0.49, 0.62, 0.05, }, { -0.66, 0.36, -0.45, 0.43, }, { -0.72, 0.21, -0.02, -0.62, }, { -0.75, 0.06, 0.48, 0.40, }, { -0.75, -0.10, -0.62, 0.08, }, { -0.71, -0.25, 0.35, -0.51, }, { -0.64, -0.40, 0.15, 0.60, }, { -0.54, -0.52, -0.55, -0.29, }, { -0.42, -0.62, 0.59, -0.21, }, { -0.28, -0.70, -0.24, 0.58, }, { -0.13, -0.74, -0.27, -0.56, }, { 0.02, -0.75, 0.60, 0.17, }, { 0.18, -0.73, -0.53, 0.33, }, { 0.33, -0.68, 0.11, -0.61, }, { 0.46, -0.60, 0.38, 0.49, }, { 0.57, -0.49, -0.62, -0.05, }, { 0.66, -0.36, 0.45, -0.43, }, { 0.72, -0.21, 0.02, 0.62, }, { 0.75, -0.06, -0.48, -0.40, }, { 0.75, 0.10, 0.62, -0.08, }, { 0.71, 0.25, -0.35, 0.51, }, { 0.64, 0.40, -0.15, -0.60, }, { 0.54, 0.52, 0.55, 0.29, }, { 0.42, 0.62, -0.59, 0.21, }, { 0.28, 0.70, 0.24, -0.58, }, { 0.13, 0.74, 0.27, 0.56, }, { -0.02, 0.75, -0.60, -0.17, }, { -0.18, 0.73, 0.53, -0.33, }, { -0.33, 0.68, -0.11, 0.61, }, { -0.24, 0.58, 0.28, 0.70, }, { -0.35, 0.51, -0.71, -0.25, }, { -0.45, 0.43, 0.66, -0.36, }, { -0.53, 0.33, -0.18, 0.73, }, { -0.59, 0.21, -0.42, -0.62, }, { -0.62, 0.08, 0.75, 0.10, }, { -0.62, -0.05, -0.57, 0.49, }, { -0.60, -0.17, 0.02, -0.75, }, { -0.55, -0.29, 0.54, 0.52, }, { -0.48, -0.40, -0.75, 0.06, }, { -0.38, -0.49, 0.46, -0.60, }, { -0.27, -0.56, 0.13, 0.74, }, { -0.15, -0.60, -0.64, -0.40, }, { -0.02, -0.62, 0.72, -0.21, }, { 0.11, -0.61, -0.33, 0.68, }, { 0.24, -0.58, -0.29, -0.70, }, { 0.35, -0.51, 0.71, 0.25, }, { 0.45, -0.43, -0.66, 0.36, }, { 0.53, -0.33, 0.18, -0.73, }, { 0.59, -0.21, 0.42, 0.62, }, { 0.62, -0.08, -0.75, -0.10, }, { 0.62, 0.05, 0.57, -0.49, }, { 0.60, 0.17, -0.02, 0.75, }, { 0.55, 0.29, -0.54, -0.52, }, { 0.48, 0.40, 0.75, -0.06, }, { 0.38, 0.49, -0.46, 0.60, }, { 0.27, 0.56, -0.13, -0.74, }, { 0.15, 0.60, 0.64, 0.40, }, { 0.02, 0.62, -0.72, 0.21, }, { -0.11, 0.61, 0.33, -0.68, }, { -0.38, 0.49, 0.46, 0.60, }, { -0.48, 0.40, -0.75, -0.06, }, { -0.55, 0.29, 0.54, -0.52, }, { -0.60, 0.17, 0.02, 0.75, }, { -0.62, 0.05, -0.57, -0.49, }, { -0.62, -0.08, 0.75, -0.10, }, { -0.59, -0.21, -0.42, 0.62, }, { -0.53, -0.33, -0.18, -0.73, }, { -0.45, -0.43, 0.66, 0.36, }, { -0.35, -0.51, -0.71, 0.25, }, { -0.24, -0.58, 0.28, -0.70, }, { -0.11, -0.61, 0.33, 0.68, }, { 0.02, -0.62, -0.72, -0.21, }, { 0.15, -0.60, 0.64, -0.40, }, { 0.27, -0.56, -0.13, 0.74, }, { 0.38, -0.49, -0.46, -0.60, }, { 0.48, -0.40, 0.75, 0.06, }, { 0.55, -0.29, -0.54, 0.52, }, { 0.60, -0.17, -0.02, -0.75, }, { 0.62, -0.05, 0.57, 0.49, }, { 0.62, 0.08, -0.75, 0.10, }, { 0.59, 0.21, 0.42, -0.62, }, { 0.53, 0.33, 0.18, 0.73, }, { 0.45, 0.43, -0.66, -0.36, }, { 0.35, 0.51, 0.71, -0.25, }, { 0.24, 0.58, -0.28, 0.70, }, { 0.11, 0.61, -0.33, -0.68, }, { -0.02, 0.62, 0.72, 0.21, }, { -0.15, 0.60, -0.64, 0.40, }, { -0.27, 0.56, 0.13, -0.74, }, { -0.33, 0.47, -0.11, 0.78, }, { -0.42, 0.40, -0.51, -0.60, }, { -0.49, 0.30, 0.79, 0.03, }, { -0.54, 0.19, -0.55, 0.57, }, { -0.57, 0.07, -0.05, -0.79, }, { -0.57, -0.05, 0.62, 0.49, }, { -0.55, -0.16, -0.78, 0.14, }, { -0.51, -0.28, 0.42, -0.67, }, { -0.44, -0.38, 0.22, 0.76, }, { -0.35, -0.46, -0.71, -0.35, }, { -0.25, -0.52, 0.73, -0.29, }, { -0.13, -0.56, -0.27, 0.74, }, { -0.01, -0.58, -0.37, -0.70, }, { 0.11, -0.57, 0.77, 0.19, }, { 0.22, -0.53, -0.65, 0.44, }, { 0.33, -0.47, 0.11, -0.78, }, { 0.42, -0.40, 0.51, 0.60, }, { 0.49, -0.30, -0.79, -0.03, }, { 0.54, -0.19, 0.55, -0.57, }, { 0.57, -0.07, 0.05, 0.79, }, { 0.57, 0.05, -0.62, -0.49, }, { 0.55, 0.16, 0.78, -0.14, }, { 0.51, 0.28, -0.42, 0.67, }, { 0.44, 0.38, -0.22, -0.76, }, { 0.35, 0.46, 0.71, 0.35, }, { 0.25, 0.52, -0.73, 0.29, }, { 0.13, 0.56, 0.27, -0.74, }, { 0.01, 0.58, 0.37, 0.70, }, { -0.11, 0.57, -0.77, -0.19, }, { -0.22, 0.53, 0.65, -0.44, }, { -0.25, 0.52, 0.73, 0.29, }, { -0.35, 0.46, -0.71, 0.35, }, { -0.44, 0.38, 0.22, -0.76, }, { -0.51, 0.28, 0.42, 0.67, }, { -0.55, 0.16, -0.78, -0.14, }, { -0.57, 0.05, 0.62, -0.49, }, { -0.57, -0.07, -0.05, 0.79, }, { -0.54, -0.19, -0.55, -0.57, }, { -0.49, -0.30, 0.79, -0.03, }, { -0.42, -0.40, -0.51, 0.60, }, { -0.33, -0.47, -0.11, -0.78, }, { -0.22, -0.53, 0.65, 0.44, }, { -0.11, -0.57, -0.77, 0.19, }, { 0.01, -0.58, 0.37, -0.70, }, { 0.13, -0.56, 0.27, 0.74, }, { 0.25, -0.52, -0.73, -0.29, }, { 0.35, -0.46, 0.71, -0.35, }, { 0.44, -0.38, -0.22, 0.76, }, { 0.51, -0.28, -0.42, -0.67, }, { 0.55, -0.16, 0.78, 0.14, }, { 0.57, -0.05, -0.62, 0.49, }, { 0.57, 0.07, 0.05, -0.79, }, { 0.54, 0.19, 0.55, 0.57, }, { 0.49, 0.30, -0.79, 0.03, }, { 0.42, 0.40, 0.51, -0.60, }, { 0.33, 0.47, 0.11, 0.78, }, { 0.22, 0.53, -0.65, -0.44, }, { 0.11, 0.57, 0.77, -0.19, }, { -0.01, 0.58, -0.37, 0.70, }, { -0.13, 0.56, -0.27, -0.74, }, { -0.27, 0.41, 0.13, 0.83, }, { -0.35, 0.35, -0.71, -0.46, }, { -0.41, 0.27, 0.81, -0.22, }, { -0.46, 0.17, -0.38, 0.75, }, { -0.49, 0.07, -0.30, -0.79, }, { -0.49, -0.03, 0.79, 0.30, }, { -0.48, -0.13, -0.75, 0.38, }, { -0.44, -0.23, 0.22, -0.82, }, { -0.38, -0.31, 0.46, 0.71, }, { -0.31, -0.38, -0.83, -0.13, }, { -0.22, -0.44, 0.65, -0.53, }, { -0.13, -0.48, -0.04, 0.84, }, { -0.02, -0.49, -0.60, -0.60, }, { 0.08, -0.49, 0.84, -0.05, }, { 0.18, -0.46, -0.53, 0.66, }, { 0.27, -0.41, -0.13, -0.83, }, { 0.35, -0.35, 0.71, 0.46, }, { 0.41, -0.27, -0.81, 0.22, }, { 0.46, -0.17, 0.38, -0.75, }, { 0.49, -0.07, 0.30, 0.79, }, { 0.49, 0.03, -0.79, -0.30, }, { 0.48, 0.13, 0.75, -0.38, }, { 0.44, 0.23, -0.22, 0.82, }, { 0.38, 0.31, -0.46, -0.71, }, { 0.31, 0.38, 0.83, 0.13, }, { 0.22, 0.44, -0.65, 0.53, }, { 0.12, 0.48, 0.04, -0.84, }, { 0.02, 0.49, 0.60, 0.60, }, { -0.08, 0.49, -0.84, 0.05, }, { -0.18, 0.46, 0.53, -0.66, }, { -0.22, 0.44, 0.65, 0.53, }, { -0.31, 0.38, -0.83, 0.13, }, { -0.38, 0.31, 0.46, -0.71, }, { -0.44, 0.23, 0.22, 0.82, }, { -0.48, 0.13, -0.75, -0.38, }, { -0.49, 0.03, 0.79, -0.30, }, { -0.49, -0.07, -0.30, 0.79, }, { -0.46, -0.17, -0.38, -0.75, }, { -0.41, -0.27, 0.81, 0.22, }, { -0.35, -0.35, -0.71, 0.46, }, { -0.27, -0.41, 0.13, -0.83, }, { -0.18, -0.46, 0.53, 0.66, }, { -0.08, -0.49, -0.84, -0.05, }, { 0.02, -0.49, 0.60, -0.60, }, { 0.12, -0.48, 0.04, 0.84, }, { 0.22, -0.44, -0.65, -0.53, }, { 0.31, -0.38, 0.83, -0.13, }, { 0.38, -0.31, -0.46, 0.71, }, { 0.44, -0.23, -0.22, -0.82, }, { 0.48, -0.13, 0.75, 0.38, }, { 0.49, -0.03, -0.79, 0.30, }, { 0.49, 0.07, 0.30, -0.79, }, { 0.46, 0.17, 0.38, 0.75, }, { 0.41, 0.27, -0.81, -0.22, }, { 0.35, 0.35, 0.71, -0.46, }, { 0.27, 0.41, -0.13, 0.83, }, { 0.18, 0.46, -0.53, -0.66, }, { 0.08, 0.49, 0.84, 0.05, }, { -0.02, 0.49, -0.60, 0.60, }, { -0.12, 0.48, -0.04, -0.84, }, { -0.15, 0.28, -0.64, 0.67, }, { -0.20, 0.24, -0.07, -0.92, }, { -0.25, 0.19, 0.73, 0.57, }, { -0.28, 0.14, -0.91, 0.16, }, { -0.30, 0.07, 0.49, -0.79, }, { -0.31, 0.01, 0.26, 0.89, }, { -0.31, -0.06, -0.83, -0.40, }, { -0.29, -0.12, 0.86, -0.35, }, { -0.26, -0.18, -0.31, 0.87, }, { -0.22, -0.23, -0.44, -0.82, }, { -0.16, -0.27, 0.90, 0.22, }, { -0.11, -0.29, -0.77, 0.52, }, { -0.04, -0.31, 0.12, -0.92, }, { 0.02, -0.31, 0.60, 0.71, }, { 0.09, -0.30, -0.93, -0.03, }, { 0.15, -0.28, 0.64, -0.67, }, { 0.20, -0.24, 0.07, 0.92, }, { 0.25, -0.19, -0.73, -0.57, }, { 0.28, -0.14, 0.91, -0.16, }, { 0.30, -0.07, -0.49, 0.79, }, { 0.31, -0.01, -0.26, -0.89, }, { 0.31, 0.06, 0.83, 0.40, }, { 0.29, 0.12, -0.86, 0.35, }, { 0.26, 0.18, 0.31, -0.87, }, { 0.22, 0.23, 0.44, 0.82, }, { 0.16, 0.27, -0.90, -0.22, }, { 0.11, 0.29, 0.77, -0.52, }, { 0.04, 0.31, -0.12, 0.92, }, { -0.02, 0.31, -0.60, -0.71, }, { -0.09, 0.30, 0.93, 0.03, }, { -0.22, 0.23, -0.44, 0.82, }, { -0.26, 0.18, -0.31, -0.87, }, { -0.29, 0.12, 0.86, 0.35, }, { -0.31, 0.06, -0.83, 0.40, }, { -0.31, -0.01, 0.26, -0.89, }, { -0.30, -0.07, 0.49, 0.79, }, { -0.28, -0.14, -0.91, -0.16, }, { -0.25, -0.19, 0.73, -0.57, }, { -0.20, -0.24, -0.07, 0.92, }, { -0.15, -0.28, -0.64, -0.67, }, { -0.09, -0.30, 0.93, -0.03, }, { -0.02, -0.31, -0.60, 0.71, }, { 0.04, -0.31, -0.13, -0.92, }, { 0.11, -0.29, 0.77, 0.52, }, { 0.16, -0.27, -0.90, 0.22, }, { 0.22, -0.23, 0.44, -0.82, }, { 0.26, -0.18, 0.31, 0.87, }, { 0.29, -0.12, -0.86, -0.35, }, { 0.31, -0.06, 0.83, -0.40, }, { 0.31, 0.01, -0.26, 0.89, }, { 0.30, 0.07, -0.49, -0.79, }, { 0.28, 0.14, 0.91, 0.16, }, { 0.25, 0.19, -0.73, 0.57, }, { 0.20, 0.24, 0.07, -0.92, }, { 0.15, 0.28, 0.64, 0.67, }, { 0.09, 0.30, -0.93, 0.03, }, { 0.02, 0.31, 0.60, -0.71, }, { -0.04, 0.31, 0.13, 0.92, }, { -0.11, 0.29, -0.77, -0.52, }, { -0.16, 0.27, 0.90, -0.22, }, }; static const struct line_info line_table[LINE_COUNT] = { { 0, 1, 0, }, { 0, 29, 0, }, { 0, 148, 0, }, { 0, 176, 0, }, { 1, 2, 0, }, { 1, 149, 0, }, { 1, 177, 0, }, { 2, 3, 0, }, { 2, 120, 0, }, { 2, 178, 0, }, { 3, 4, 0, }, { 3, 121, 0, }, { 3, 179, 0, }, { 4, 5, 0, }, { 4, 122, 0, }, { 4, 150, 0, }, { 5, 6, 0, }, { 5, 123, 0, }, { 5, 151, 0, }, { 6, 7, 0, }, { 6, 124, 0, }, { 6, 152, 0, }, { 7, 8, 0, }, { 7, 125, 0, }, { 7, 153, 0, }, { 8, 9, 0, }, { 8, 126, 0, }, { 8, 154, 0, }, { 9, 10, 0, }, { 9, 127, 0, }, { 9, 155, 0, }, { 10, 11, 0, }, { 10, 128, 0, }, { 10, 156, 0, }, { 11, 12, 0, }, { 11, 129, 0, }, { 11, 157, 0, }, { 12, 13, 0, }, { 12, 130, 0, }, { 12, 158, 0, }, { 13, 14, 0, }, { 13, 131, 0, }, { 13, 159, 0, }, { 14, 15, 0, }, { 14, 132, 0, }, { 14, 160, 0, }, { 15, 16, 0, }, { 15, 133, 0, }, { 15, 161, 0, }, { 16, 17, 0, }, { 16, 134, 0, }, { 16, 162, 0, }, { 17, 18, 0, }, { 17, 135, 0, }, { 17, 163, 0, }, { 18, 19, 0, }, { 18, 136, 0, }, { 18, 164, 0, }, { 19, 20, 0, }, { 19, 137, 0, }, { 19, 165, 0, }, { 20, 21, 0, }, { 20, 138, 0, }, { 20, 166, 0, }, { 21, 22, 0, }, { 21, 139, 0, }, { 21, 167, 0, }, { 22, 23, 0, }, { 22, 140, 0, }, { 22, 168, 0, }, { 23, 24, 0, }, { 23, 141, 0, }, { 23, 169, 0, }, { 24, 25, 0, }, { 24, 142, 0, }, { 24, 170, 0, }, { 25, 26, 0, }, { 25, 143, 0, }, { 25, 171, 0, }, { 26, 27, 0, }, { 26, 144, 0, }, { 26, 172, 0, }, { 27, 28, 0, }, { 27, 145, 0, }, { 27, 173, 0, }, { 28, 29, 0, }, { 28, 146, 0, }, { 28, 174, 0, }, { 29, 147, 0, }, { 29, 175, 0, }, { 30, 123, 0, }, { 30, 150, 0, }, { 30, 240, 0, }, { 30, 292, 0, }, { 31, 124, 0, }, { 31, 151, 0, }, { 31, 241, 0, }, { 31, 293, 0, }, { 32, 125, 0, }, { 32, 152, 0, }, { 32, 242, 0, }, { 32, 294, 0, }, { 33, 126, 0, }, { 33, 153, 0, }, { 33, 243, 0, }, { 33, 295, 0, }, { 34, 127, 0, }, { 34, 154, 0, }, { 34, 244, 0, }, { 34, 296, 0, }, { 35, 128, 0, }, { 35, 155, 0, }, { 35, 245, 0, }, { 35, 297, 0, }, { 36, 129, 0, }, { 36, 156, 0, }, { 36, 246, 0, }, { 36, 298, 0, }, { 37, 130, 0, }, { 37, 157, 0, }, { 37, 247, 0, }, { 37, 299, 0, }, { 38, 131, 0, }, { 38, 158, 0, }, { 38, 248, 0, }, { 38, 270, 0, }, { 39, 132, 0, }, { 39, 159, 0, }, { 39, 249, 0, }, { 39, 271, 0, }, { 40, 133, 0, }, { 40, 160, 0, }, { 40, 250, 0, }, { 40, 272, 0, }, { 41, 134, 0, }, { 41, 161, 0, }, { 41, 251, 0, }, { 41, 273, 0, }, { 42, 135, 0, }, { 42, 162, 0, }, { 42, 252, 0, }, { 42, 274, 0, }, { 43, 136, 0, }, { 43, 163, 0, }, { 43, 253, 0, }, { 43, 275, 0, }, { 44, 137, 0, }, { 44, 164, 0, }, { 44, 254, 0, }, { 44, 276, 0, }, { 45, 138, 1, }, { 45, 165, 1, }, { 45, 255, 1, }, { 45, 277, 1, }, { 46, 139, 1, }, { 46, 166, 1, }, { 46, 256, 1, }, { 46, 278, 1, }, { 47, 140, 1, }, { 47, 167, 1, }, { 47, 257, 1, }, { 47, 279, 1, }, { 48, 141, 1, }, { 48, 168, 1, }, { 48, 258, 1, }, { 48, 280, 1, }, { 49, 142, 1, }, { 49, 169, 1, }, { 49, 259, 1, }, { 49, 281, 1, }, { 50, 143, 1, }, { 50, 170, 1, }, { 50, 260, 1, }, { 50, 282, 1, }, { 51, 144, 1, }, { 51, 171, 1, }, { 51, 261, 1, }, { 51, 283, 1, }, { 52, 145, 1, }, { 52, 172, 1, }, { 52, 262, 1, }, { 52, 284, 1, }, { 53, 146, 1, }, { 53, 173, 1, }, { 53, 263, 1, }, { 53, 285, 1, }, { 54, 147, 1, }, { 54, 174, 1, }, { 54, 264, 1, }, { 54, 286, 1, }, { 55, 148, 1, }, { 55, 175, 1, }, { 55, 265, 1, }, { 55, 287, 1, }, { 56, 149, 1, }, { 56, 176, 1, }, { 56, 266, 1, }, { 56, 288, 1, }, { 57, 120, 1, }, { 57, 177, 1, }, { 57, 267, 1, }, { 57, 289, 1, }, { 58, 121, 1, }, { 58, 178, 1, }, { 58, 268, 1, }, { 58, 290, 1, }, { 59, 122, 1, }, { 59, 179, 1, }, { 59, 269, 1, }, { 59, 291, 1, }, { 60, 420, 1, }, { 60, 478, 1, }, { 60, 567, 1, }, { 60, 570, 1, }, { 61, 421, 1, }, { 61, 479, 1, }, { 61, 568, 1, }, { 61, 571, 1, }, { 62, 422, 1, }, { 62, 450, 1, }, { 62, 569, 1, }, { 62, 572, 1, }, { 63, 423, 1, }, { 63, 451, 1, }, { 63, 540, 1, }, { 63, 573, 1, }, { 64, 424, 1, }, { 64, 452, 1, }, { 64, 541, 1, }, { 64, 574, 1, }, { 65, 425, 1, }, { 65, 453, 1, }, { 65, 542, 1, }, { 65, 575, 1, }, { 66, 426, 1, }, { 66, 454, 1, }, { 66, 543, 1, }, { 66, 576, 1, }, { 67, 427, 1, }, { 67, 455, 1, }, { 67, 544, 1, }, { 67, 577, 1, }, { 68, 428, 1, }, { 68, 456, 1, }, { 68, 545, 1, }, { 68, 578, 1, }, { 69, 429, 1, }, { 69, 457, 1, }, { 69, 546, 1, }, { 69, 579, 1, }, { 70, 430, 1, }, { 70, 458, 1, }, { 70, 547, 1, }, { 70, 580, 1, }, { 71, 431, 1, }, { 71, 459, 1, }, { 71, 548, 1, }, { 71, 581, 1, }, { 72, 432, 1, }, { 72, 460, 1, }, { 72, 549, 1, }, { 72, 582, 1, }, { 73, 433, 1, }, { 73, 461, 1, }, { 73, 550, 1, }, { 73, 583, 1, }, { 74, 434, 1, }, { 74, 462, 1, }, { 74, 551, 1, }, { 74, 584, 1, }, { 75, 435, 1, }, { 75, 463, 1, }, { 75, 552, 1, }, { 75, 585, 1, }, { 76, 436, 1, }, { 76, 464, 1, }, { 76, 553, 1, }, { 76, 586, 1, }, { 77, 437, 1, }, { 77, 465, 1, }, { 77, 554, 1, }, { 77, 587, 1, }, { 78, 438, 1, }, { 78, 466, 1, }, { 78, 555, 1, }, { 78, 588, 1, }, { 79, 439, 1, }, { 79, 467, 1, }, { 79, 556, 1, }, { 79, 589, 1, }, { 80, 440, 1, }, { 80, 468, 1, }, { 80, 557, 1, }, { 80, 590, 1, }, { 81, 441, 1, }, { 81, 469, 1, }, { 81, 558, 1, }, { 81, 591, 1, }, { 82, 442, 1, }, { 82, 470, 1, }, { 82, 559, 2, }, { 82, 592, 2, }, { 83, 443, 2, }, { 83, 471, 2, }, { 83, 560, 2, }, { 83, 593, 2, }, { 84, 444, 2, }, { 84, 472, 2, }, { 84, 561, 2, }, { 84, 594, 2, }, { 85, 445, 2, }, { 85, 473, 2, }, { 85, 562, 2, }, { 85, 595, 2, }, { 86, 446, 2, }, { 86, 474, 2, }, { 86, 563, 2, }, { 86, 596, 2, }, { 87, 447, 2, }, { 87, 475, 2, }, { 87, 564, 2, }, { 87, 597, 2, }, { 88, 448, 2, }, { 88, 476, 2, }, { 88, 565, 2, }, { 88, 598, 2, }, { 89, 449, 2, }, { 89, 477, 2, }, { 89, 566, 2, }, { 89, 599, 2, }, { 90, 101, 2, }, { 90, 109, 2, }, { 90, 562, 2, }, { 90, 584, 2, }, { 91, 102, 2, }, { 91, 110, 2, }, { 91, 563, 2, }, { 91, 585, 2, }, { 92, 103, 2, }, { 92, 111, 2, }, { 92, 564, 2, }, { 92, 586, 2, }, { 93, 104, 2, }, { 93, 112, 2, }, { 93, 565, 2, }, { 93, 587, 2, }, { 94, 105, 2, }, { 94, 113, 2, }, { 94, 566, 2, }, { 94, 588, 2, }, { 95, 106, 2, }, { 95, 114, 2, }, { 95, 567, 2, }, { 95, 589, 2, }, { 96, 107, 2, }, { 96, 115, 2, }, { 96, 568, 2, }, { 96, 590, 2, }, { 97, 108, 2, }, { 97, 116, 2, }, { 97, 569, 2, }, { 97, 591, 2, }, { 98, 109, 2, }, { 98, 117, 2, }, { 98, 540, 2, }, { 98, 592, 2, }, { 99, 110, 2, }, { 99, 118, 2, }, { 99, 541, 2, }, { 99, 593, 2, }, { 100, 111, 2, }, { 100, 119, 2, }, { 100, 542, 2, }, { 100, 594, 2, }, { 101, 112, 2, }, { 101, 543, 2, }, { 101, 595, 2, }, { 102, 113, 2, }, { 102, 544, 2, }, { 102, 596, 2, }, { 103, 114, 2, }, { 103, 545, 2, }, { 103, 597, 2, }, { 104, 115, 2, }, { 104, 546, 2, }, { 104, 598, 2, }, { 105, 116, 2, }, { 105, 547, 2, }, { 105, 599, 2, }, { 106, 117, 2, }, { 106, 548, 2, }, { 106, 570, 2, }, { 107, 118, 2, }, { 107, 549, 2, }, { 107, 571, 2, }, { 108, 119, 2, }, { 108, 550, 2, }, { 108, 572, 2, }, { 109, 551, 2, }, { 109, 573, 2, }, { 110, 552, 2, }, { 110, 574, 2, }, { 111, 553, 2, }, { 111, 575, 2, }, { 112, 554, 2, }, { 112, 576, 2, }, { 113, 555, 2, }, { 113, 577, 2, }, { 114, 556, 2, }, { 114, 578, 2, }, { 115, 557, 2, }, { 115, 579, 2, }, { 116, 558, 2, }, { 116, 580, 2, }, { 117, 559, 2, }, { 117, 581, 2, }, { 118, 560, 2, }, { 118, 582, 2, }, { 119, 561, 2, }, { 119, 583, 2, }, { 120, 150, 2, }, { 120, 232, 2, }, { 121, 151, 2, }, { 121, 233, 2, }, { 122, 152, 2, }, { 122, 234, 2, }, { 123, 153, 2, }, { 123, 235, 2, }, { 124, 154, 2, }, { 124, 236, 2, }, { 125, 155, 2, }, { 125, 237, 2, }, { 126, 156, 2, }, { 126, 238, 2, }, { 127, 157, 2, }, { 127, 239, 2, }, { 128, 158, 2, }, { 128, 210, 2, }, { 129, 159, 2, }, { 129, 211, 2, }, { 130, 160, 2, }, { 130, 212, 2, }, { 131, 161, 2, }, { 131, 213, 2, }, { 132, 162, 2, }, { 132, 214, 2, }, { 133, 163, 2, }, { 133, 215, 2, }, { 134, 164, 2, }, { 134, 216, 2, }, { 135, 165, 3, }, { 135, 217, 3, }, { 136, 166, 3, }, { 136, 218, 3, }, { 137, 167, 3, }, { 137, 219, 3, }, { 138, 168, 3, }, { 138, 220, 3, }, { 139, 169, 3, }, { 139, 221, 3, }, { 140, 170, 3, }, { 140, 222, 3, }, { 141, 171, 3, }, { 141, 223, 3, }, { 142, 172, 3, }, { 142, 224, 3, }, { 143, 173, 3, }, { 143, 225, 3, }, { 144, 174, 3, }, { 144, 226, 3, }, { 145, 175, 3, }, { 145, 227, 3, }, { 146, 176, 3, }, { 146, 228, 3, }, { 147, 177, 3, }, { 147, 229, 3, }, { 148, 178, 3, }, { 148, 230, 3, }, { 149, 179, 3, }, { 149, 231, 3, }, { 150, 207, 3, }, { 151, 208, 3, }, { 152, 209, 3, }, { 153, 180, 3, }, { 154, 181, 3, }, { 155, 182, 3, }, { 156, 183, 3, }, { 157, 184, 3, }, { 158, 185, 3, }, { 159, 186, 3, }, { 160, 187, 3, }, { 161, 188, 3, }, { 162, 189, 3, }, { 163, 190, 3, }, { 164, 191, 3, }, { 165, 192, 3, }, { 166, 193, 3, }, { 167, 194, 3, }, { 168, 195, 3, }, { 169, 196, 3, }, { 170, 197, 3, }, { 171, 198, 3, }, { 172, 199, 3, }, { 173, 200, 3, }, { 174, 201, 3, }, { 175, 202, 3, }, { 176, 203, 3, }, { 177, 204, 3, }, { 178, 205, 3, }, { 179, 206, 3, }, { 180, 237, 3, }, { 180, 240, 3, }, { 180, 300, 3, }, { 181, 238, 3, }, { 181, 241, 3, }, { 181, 301, 3, }, { 182, 239, 3, }, { 182, 242, 3, }, { 182, 302, 3, }, { 183, 210, 3, }, { 183, 243, 3, }, { 183, 303, 3, }, { 184, 211, 3, }, { 184, 244, 3, }, { 184, 304, 3, }, { 185, 212, 3, }, { 185, 245, 3, }, { 185, 305, 3, }, { 186, 213, 3, }, { 186, 246, 3, }, { 186, 306, 3, }, { 187, 214, 3, }, { 187, 247, 3, }, { 187, 307, 3, }, { 188, 215, 3, }, { 188, 248, 3, }, { 188, 308, 3, }, { 189, 216, 3, }, { 189, 249, 3, }, { 189, 309, 3, }, { 190, 217, 3, }, { 190, 250, 3, }, { 190, 310, 3, }, { 191, 218, 3, }, { 191, 251, 3, }, { 191, 311, 3, }, { 192, 219, 3, }, { 192, 252, 3, }, { 192, 312, 3, }, { 193, 220, 3, }, { 193, 253, 3, }, { 193, 313, 3, }, { 194, 221, 3, }, { 194, 254, 3, }, { 194, 314, 3, }, { 195, 222, 3, }, { 195, 255, 3, }, { 195, 315, 3, }, { 196, 223, 3, }, { 196, 256, 3, }, { 196, 316, 3, }, { 197, 224, 3, }, { 197, 257, 3, }, { 197, 317, 3, }, { 198, 225, 3, }, { 198, 258, 3, }, { 198, 318, 3, }, { 199, 226, 3, }, { 199, 259, 3, }, { 199, 319, 3, }, { 200, 227, 3, }, { 200, 260, 3, }, { 200, 320, 3, }, { 201, 228, 3, }, { 201, 261, 3, }, { 201, 321, 3, }, { 202, 229, 3, }, { 202, 262, 3, }, { 202, 322, 3, }, { 203, 230, 3, }, { 203, 263, 3, }, { 203, 323, 3, }, { 204, 231, 3, }, { 204, 264, 3, }, { 204, 324, 3, }, { 205, 232, 3, }, { 205, 265, 3, }, { 205, 325, 3, }, { 206, 233, 3, }, { 206, 266, 3, }, { 206, 326, 3, }, { 207, 234, 3, }, { 207, 267, 3, }, { 207, 327, 3, }, { 208, 235, 3, }, { 208, 268, 3, }, { 208, 328, 3, }, { 209, 236, 3, }, { 209, 269, 3, }, { 209, 329, 3, }, { 210, 270, 4, }, { 210, 330, 4, }, { 211, 271, 4, }, { 211, 331, 4, }, { 212, 272, 4, }, { 212, 332, 4, }, { 213, 273, 4, }, { 213, 333, 4, }, { 214, 274, 4, }, { 214, 334, 4, }, { 215, 275, 4, }, { 215, 335, 4, }, { 216, 276, 4, }, { 216, 336, 4, }, { 217, 277, 4, }, { 217, 337, 4, }, { 218, 278, 4, }, { 218, 338, 4, }, { 219, 279, 4, }, { 219, 339, 4, }, { 220, 280, 4, }, { 220, 340, 4, }, { 221, 281, 4, }, { 221, 341, 4, }, { 222, 282, 4, }, { 222, 342, 4, }, { 223, 283, 4, }, { 223, 343, 4, }, { 224, 284, 4, }, { 224, 344, 4, }, { 225, 285, 4, }, { 225, 345, 4, }, { 226, 286, 4, }, { 226, 346, 4, }, { 227, 287, 4, }, { 227, 347, 4, }, { 228, 288, 4, }, { 228, 348, 4, }, { 229, 289, 4, }, { 229, 349, 4, }, { 230, 290, 4, }, { 230, 350, 4, }, { 231, 291, 4, }, { 231, 351, 4, }, { 232, 292, 4, }, { 232, 352, 4, }, { 233, 293, 4, }, { 233, 353, 4, }, { 234, 294, 4, }, { 234, 354, 4, }, { 235, 295, 4, }, { 235, 355, 4, }, { 236, 296, 4, }, { 236, 356, 4, }, { 237, 297, 4, }, { 237, 357, 4, }, { 238, 298, 4, }, { 238, 358, 4, }, { 239, 299, 4, }, { 239, 359, 4, }, { 240, 327, 4, }, { 240, 416, 4, }, { 241, 328, 4, }, { 241, 417, 4, }, { 242, 329, 4, }, { 242, 418, 4, }, { 243, 300, 4, }, { 243, 419, 4, }, { 244, 301, 4, }, { 244, 390, 4, }, { 245, 302, 4, }, { 245, 391, 4, }, { 246, 303, 4, }, { 246, 392, 4, }, { 247, 304, 4, }, { 247, 393, 4, }, { 248, 305, 4, }, { 248, 394, 4, }, { 249, 306, 4, }, { 249, 395, 4, }, { 250, 307, 4, }, { 250, 396, 4, }, { 251, 308, 4, }, { 251, 397, 4, }, { 252, 309, 4, }, { 252, 398, 4, }, { 253, 310, 4, }, { 253, 399, 4, }, { 254, 311, 4, }, { 254, 400, 4, }, { 255, 312, 4, }, { 255, 401, 4, }, { 256, 313, 4, }, { 256, 402, 4, }, { 257, 314, 4, }, { 257, 403, 4, }, { 258, 315, 4, }, { 258, 404, 4, }, { 259, 316, 4, }, { 259, 405, 4, }, { 260, 317, 4, }, { 260, 406, 4, }, { 261, 318, 4, }, { 261, 407, 4, }, { 262, 319, 4, }, { 262, 408, 4, }, { 263, 320, 4, }, { 263, 409, 4, }, { 264, 321, 4, }, { 264, 410, 4, }, { 265, 322, 4, }, { 265, 411, 4, }, { 266, 323, 4, }, { 266, 412, 4, }, { 267, 324, 4, }, { 267, 413, 4, }, { 268, 325, 4, }, { 268, 414, 4, }, { 269, 326, 4, }, { 269, 415, 4, }, { 270, 333, 4, }, { 270, 364, 4, }, { 271, 334, 4, }, { 271, 365, 4, }, { 272, 335, 4, }, { 272, 366, 4, }, { 273, 336, 4, }, { 273, 367, 4, }, { 274, 337, 4, }, { 274, 368, 4, }, { 275, 338, 4, }, { 275, 369, 4, }, { 276, 339, 4, }, { 276, 370, 4, }, { 277, 340, 4, }, { 277, 371, 4, }, { 278, 341, 4, }, { 278, 372, 4, }, { 279, 342, 4, }, { 279, 373, 4, }, { 280, 343, 4, }, { 280, 374, 4, }, { 281, 344, 4, }, { 281, 375, 4, }, { 282, 345, 4, }, { 282, 376, 4, }, { 283, 346, 4, }, { 283, 377, 4, }, { 284, 347, 4, }, { 284, 378, 4, }, { 285, 348, 5, }, { 285, 379, 5, }, { 286, 349, 5, }, { 286, 380, 5, }, { 287, 350, 5, }, { 287, 381, 5, }, { 288, 351, 5, }, { 288, 382, 5, }, { 289, 352, 5, }, { 289, 383, 5, }, { 290, 353, 5, }, { 290, 384, 5, }, { 291, 354, 5, }, { 291, 385, 5, }, { 292, 355, 5, }, { 292, 386, 5, }, { 293, 356, 5, }, { 293, 387, 5, }, { 294, 357, 5, }, { 294, 388, 5, }, { 295, 358, 5, }, { 295, 389, 5, }, { 296, 359, 5, }, { 296, 360, 5, }, { 297, 330, 5, }, { 297, 361, 5, }, { 298, 331, 5, }, { 298, 362, 5, }, { 299, 332, 5, }, { 299, 363, 5, }, { 300, 330, 5, }, { 300, 479, 5, }, { 301, 331, 5, }, { 301, 450, 5, }, { 302, 332, 5, }, { 302, 451, 5, }, { 303, 333, 5, }, { 303, 452, 5, }, { 304, 334, 5, }, { 304, 453, 5, }, { 305, 335, 5, }, { 305, 454, 5, }, { 306, 336, 5, }, { 306, 455, 5, }, { 307, 337, 5, }, { 307, 456, 5, }, { 308, 338, 5, }, { 308, 457, 5, }, { 309, 339, 5, }, { 309, 458, 5, }, { 310, 340, 5, }, { 310, 459, 5, }, { 311, 341, 5, }, { 311, 460, 5, }, { 312, 342, 5, }, { 312, 461, 5, }, { 313, 343, 5, }, { 313, 462, 5, }, { 314, 344, 5, }, { 314, 463, 5, }, { 315, 345, 5, }, { 315, 464, 5, }, { 316, 346, 5, }, { 316, 465, 5, }, { 317, 347, 5, }, { 317, 466, 5, }, { 318, 348, 5, }, { 318, 467, 5, }, { 319, 349, 5, }, { 319, 468, 5, }, { 320, 350, 5, }, { 320, 469, 5, }, { 321, 351, 5, }, { 321, 470, 5, }, { 322, 352, 5, }, { 322, 471, 5, }, { 323, 353, 5, }, { 323, 472, 5, }, { 324, 354, 5, }, { 324, 473, 5, }, { 325, 355, 5, }, { 325, 474, 5, }, { 326, 356, 5, }, { 326, 475, 5, }, { 327, 357, 5, }, { 327, 476, 5, }, { 328, 358, 5, }, { 328, 477, 5, }, { 329, 359, 5, }, { 329, 478, 5, }, { 330, 421, 5, }, { 331, 422, 5, }, { 332, 423, 5, }, { 333, 424, 5, }, { 334, 425, 5, }, { 335, 426, 5, }, { 336, 427, 5, }, { 337, 428, 5, }, { 338, 429, 5, }, { 339, 430, 5, }, { 340, 431, 5, }, { 341, 432, 5, }, { 342, 433, 5, }, { 343, 434, 5, }, { 344, 435, 5, }, { 345, 436, 5, }, { 346, 437, 5, }, { 347, 438, 5, }, { 348, 439, 5, }, { 349, 440, 5, }, { 350, 441, 5, }, { 351, 442, 5, }, { 352, 443, 5, }, { 353, 444, 5, }, { 354, 445, 5, }, { 355, 446, 5, }, { 356, 447, 5, }, { 357, 448, 5, }, { 358, 449, 5, }, { 359, 420, 5, }, { 360, 390, 5, }, { 360, 447, 5, }, { 360, 480, 5, }, { 361, 391, 5, }, { 361, 448, 5, }, { 361, 481, 5, }, { 362, 392, 5, }, { 362, 449, 5, }, { 362, 482, 5, }, { 363, 393, 5, }, { 363, 420, 5, }, { 363, 483, 5, }, { 364, 394, 5, }, { 364, 421, 5, }, { 364, 484, 5, }, { 365, 395, 5, }, { 365, 422, 5, }, { 365, 485, 5, }, { 366, 396, 5, }, { 366, 423, 5, }, { 366, 486, 5, }, { 367, 397, 5, }, { 367, 424, 5, }, { 367, 487, 5, }, { 368, 398, 5, }, { 368, 425, 5, }, { 368, 488, 5, }, { 369, 399, 5, }, { 369, 426, 5, }, { 369, 489, 5, }, { 370, 400, 6, }, { 370, 427, 6, }, { 370, 490, 6, }, { 371, 401, 6, }, { 371, 428, 6, }, { 371, 491, 6, }, { 372, 402, 6, }, { 372, 429, 6, }, { 372, 492, 6, }, { 373, 403, 6, }, { 373, 430, 6, }, { 373, 493, 6, }, { 374, 404, 6, }, { 374, 431, 6, }, { 374, 494, 6, }, { 375, 405, 6, }, { 375, 432, 6, }, { 375, 495, 6, }, { 376, 406, 6, }, { 376, 433, 6, }, { 376, 496, 6, }, { 377, 407, 6, }, { 377, 434, 6, }, { 377, 497, 6, }, { 378, 408, 6, }, { 378, 435, 6, }, { 378, 498, 6, }, { 379, 409, 6, }, { 379, 436, 6, }, { 379, 499, 6, }, { 380, 410, 6, }, { 380, 437, 6, }, { 380, 500, 6, }, { 381, 411, 6, }, { 381, 438, 6, }, { 381, 501, 6, }, { 382, 412, 6, }, { 382, 439, 6, }, { 382, 502, 6, }, { 383, 413, 6, }, { 383, 440, 6, }, { 383, 503, 6, }, { 384, 414, 6, }, { 384, 441, 6, }, { 384, 504, 6, }, { 385, 415, 6, }, { 385, 442, 6, }, { 385, 505, 6, }, { 386, 416, 6, }, { 386, 443, 6, }, { 386, 506, 6, }, { 387, 417, 6, }, { 387, 444, 6, }, { 387, 507, 6, }, { 388, 418, 6, }, { 388, 445, 6, }, { 388, 508, 6, }, { 389, 419, 6, }, { 389, 446, 6, }, { 389, 509, 6, }, { 390, 453, 6, }, { 390, 510, 6, }, { 391, 454, 6, }, { 391, 511, 6, }, { 392, 455, 6, }, { 392, 512, 6, }, { 393, 456, 6, }, { 393, 513, 6, }, { 394, 457, 6, }, { 394, 514, 6, }, { 395, 458, 6, }, { 395, 515, 6, }, { 396, 459, 6, }, { 396, 516, 6, }, { 397, 460, 6, }, { 397, 517, 6, }, { 398, 461, 6, }, { 398, 518, 6, }, { 399, 462, 6, }, { 399, 519, 6, }, { 400, 463, 6, }, { 400, 520, 6, }, { 401, 464, 6, }, { 401, 521, 6, }, { 402, 465, 6, }, { 402, 522, 6, }, { 403, 466, 6, }, { 403, 523, 6, }, { 404, 467, 6, }, { 404, 524, 6, }, { 405, 468, 6, }, { 405, 525, 6, }, { 406, 469, 6, }, { 406, 526, 6, }, { 407, 470, 6, }, { 407, 527, 6, }, { 408, 471, 6, }, { 408, 528, 6, }, { 409, 472, 6, }, { 409, 529, 6, }, { 410, 473, 6, }, { 410, 530, 6, }, { 411, 474, 6, }, { 411, 531, 6, }, { 412, 475, 6, }, { 412, 532, 6, }, { 413, 476, 6, }, { 413, 533, 6, }, { 414, 477, 6, }, { 414, 534, 6, }, { 415, 478, 6, }, { 415, 535, 6, }, { 416, 479, 6, }, { 416, 536, 6, }, { 417, 450, 6, }, { 417, 537, 6, }, { 418, 451, 6, }, { 418, 538, 6, }, { 419, 452, 6, }, { 419, 539, 6, }, { 420, 480, 6, }, { 421, 481, 6, }, { 422, 482, 6, }, { 423, 483, 6, }, { 424, 484, 6, }, { 425, 485, 6, }, { 426, 486, 6, }, { 427, 487, 6, }, { 428, 488, 6, }, { 429, 489, 6, }, { 430, 490, 6, }, { 431, 491, 6, }, { 432, 492, 6, }, { 433, 493, 6, }, { 434, 494, 6, }, { 435, 495, 6, }, { 436, 496, 6, }, { 437, 497, 6, }, { 438, 498, 6, }, { 439, 499, 6, }, { 440, 500, 6, }, { 441, 501, 6, }, { 442, 502, 6, }, { 443, 503, 6, }, { 444, 504, 6, }, { 445, 505, 6, }, { 446, 506, 6, }, { 447, 507, 6, }, { 448, 508, 6, }, { 449, 509, 6, }, { 450, 510, 7, }, { 451, 511, 7, }, { 452, 512, 7, }, { 453, 513, 7, }, { 454, 514, 7, }, { 455, 515, 7, }, { 456, 516, 7, }, { 457, 517, 7, }, { 458, 518, 7, }, { 459, 519, 7, }, { 460, 520, 7, }, { 461, 521, 7, }, { 462, 522, 7, }, { 463, 523, 7, }, { 464, 524, 7, }, { 465, 525, 7, }, { 466, 526, 7, }, { 467, 527, 7, }, { 468, 528, 7, }, { 469, 529, 7, }, { 470, 530, 7, }, { 471, 531, 7, }, { 472, 532, 7, }, { 473, 533, 7, }, { 474, 534, 7, }, { 475, 535, 7, }, { 476, 536, 7, }, { 477, 537, 7, }, { 478, 538, 7, }, { 479, 539, 7, }, { 480, 513, 7, }, { 480, 597, 7, }, { 481, 514, 7, }, { 481, 598, 7, }, { 482, 515, 7, }, { 482, 599, 7, }, { 483, 516, 7, }, { 483, 570, 7, }, { 484, 517, 7, }, { 484, 571, 7, }, { 485, 518, 7, }, { 485, 572, 7, }, { 486, 519, 7, }, { 486, 573, 7, }, { 487, 520, 7, }, { 487, 574, 7, }, { 488, 521, 7, }, { 488, 575, 7, }, { 489, 522, 7, }, { 489, 576, 7, }, { 490, 523, 7, }, { 490, 577, 7, }, { 491, 524, 7, }, { 491, 578, 7, }, { 492, 525, 7, }, { 492, 579, 7, }, { 493, 526, 7, }, { 493, 580, 7, }, { 494, 527, 7, }, { 494, 581, 7, }, { 495, 528, 7, }, { 495, 582, 7, }, { 496, 529, 7, }, { 496, 583, 7, }, { 497, 530, 7, }, { 497, 584, 7, }, { 498, 531, 7, }, { 498, 585, 7, }, { 499, 532, 7, }, { 499, 586, 7, }, { 500, 533, 7, }, { 500, 587, 7, }, { 501, 534, 7, }, { 501, 588, 7, }, { 502, 535, 7, }, { 502, 589, 7, }, { 503, 536, 7, }, { 503, 590, 7, }, { 504, 537, 7, }, { 504, 591, 7, }, { 505, 538, 7, }, { 505, 592, 7, }, { 506, 539, 7, }, { 506, 593, 7, }, { 507, 510, 7, }, { 507, 594, 7, }, { 508, 511, 7, }, { 508, 595, 7, }, { 509, 512, 7, }, { 509, 596, 7, }, { 510, 542, 7, }, { 511, 543, 7, }, { 512, 544, 7, }, { 513, 545, 7, }, { 514, 546, 7, }, { 515, 547, 7, }, { 516, 548, 7, }, { 517, 549, 7, }, { 518, 550, 7, }, { 519, 551, 7, }, { 520, 552, 7, }, { 521, 553, 7, }, { 522, 554, 7, }, { 523, 555, 7, }, { 524, 556, 7, }, { 525, 557, 7, }, { 526, 558, 7, }, { 527, 559, 7, }, { 528, 560, 7, }, { 529, 561, 7, }, { 530, 562, 7, }, { 531, 563, 7, }, { 532, 564, 7, }, { 533, 565, 7, }, { 534, 566, 7, }, { 535, 567, 7, }, { 536, 568, 7, }, { 537, 569, 7, }, { 538, 540, 7, }, { 539, 541, 7, }, { 540, 570, 7, }, { 541, 571, 7, }, { 542, 572, 7, }, { 543, 573, 7, }, { 544, 574, 7, }, { 545, 575, 7, }, { 546, 576, 7, }, { 547, 577, 7, }, { 548, 578, 7, }, { 549, 579, 7, }, { 550, 580, 7, }, { 551, 581, 7, }, { 552, 582, 7, }, { 553, 583, 7, }, { 554, 584, 7, }, { 555, 585, 7, }, { 556, 586, 7, }, { 557, 587, 7, }, { 558, 588, 7, }, { 559, 589, 7, }, { 560, 590, 7, }, { 561, 591, 7, }, { 562, 592, 7, }, { 563, 593, 7, }, { 564, 594, 7, }, { 565, 595, 7, }, { 566, 596, 7, }, { 567, 597, 7, }, { 568, 598, 7, }, { 569, 599, 7, }, }; static const char *hyperball_defaults[] = { "*observer-z: 3", "*delay: 20000", "*xy: 3", "*xz: 5", "*yw: 10", "*yz: 0", "*xw: 0", "*zw: 0", ".background: black", ".foreground: white", "*fpsSolid: true", "*color00:#FF66BE", "*color10:#FFA300", "*color20:#BEDC00", "*color30:#12FB00", "*color40:#00F9BE", "*color50:#12D5FF", "*color60:#BE9AFF", "*color70:#FF5FFF", "*color01:#FF5BAA", "*color11:#F09200", "*color21:#AAC500", "*color31:#10E100", "*color41:#00DFAA", "*color51:#10BFFF", "*color61:#AA8AFF", "*color71:#F055FF", "*color02:#EE529A", "*color12:#D98400", "*color22:#9AB200", "*color32:#0ECB00", "*color42:#00C99A", "*color52:#0EADE7", "*color62:#9A7DFF", "*color72:#D94DE7", "*color03:#DA4B8C", "*color13:#C67900", "*color23:#8CA300", "*color33:#0DBA00", "*color43:#00B88C", "*color53:#0D9ED3", "*color63:#8C72EA", "*color73:#C646D3", "*color04:#C84581", "*color14:#B66F00", "*color24:#819600", "*color34:#0CAB00", "*color44:#00A981", "*color54:#0C91C2", "*color64:#8169D7", "*color74:#B641C2", "*color05:#B94078", "*color15:#A96700", "*color25:#788B00", "*color35:#0B9E00", "*color45:#009D78", "*color55:#0B86B3", "*color65:#7861C7", "*color75:#A93CB3", "*color06:#AC3C6F", "*color16:#9D6000", "*color26:#6F8100", "*color36:#0A9300", "*color46:#00926F", "*color56:#0A7DA7", "*color66:#6F5AB9", "*color76:#9D38A7", "*color07:#A13868", "*color17:#935900", "*color27:#687900", "*color37:#0A8A00", "*color47:#008868", "*color57:#0A759C", "*color67:#6854AD", "*color77:#93349C", 0, }; static XrmOptionDescRec hyperball_options [] = { { "-observer-z", ".observer-z", XrmoptionSepArg, 0 }, { "-delay", ".delay", XrmoptionSepArg, 0 }, { "-xw", ".xw", XrmoptionSepArg, 0 }, { "-xy", ".xy", XrmoptionSepArg, 0 }, { "-xz", ".xz", XrmoptionSepArg, 0 }, { "-yw", ".yw", XrmoptionSepArg, 0 }, { "-yz", ".yz", XrmoptionSepArg, 0 }, { "-zw", ".zw", XrmoptionSepArg, 0 }, { 0, 0, 0, 0 }, }; XSCREENSAVER_MODULE ("HyperBall", hyperball) xscreensaver-5.36/hacks/zoom.c000664 000767 000024 00000020746 12711003021 016355 0ustar00jwzstaff000000 000000 /* * Copyright (C) 2000 James Macnicol * * 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. */ #include #include #include "screenhack.h" #ifndef MIN #define MIN(a, b) (((a) < (b))?(a):(b)) #endif #ifndef MAX #define MAX(a, b) (((a) > (b))?(a):(b)) #endif #define MINX 0.0 #define MINY 0.0 /* This should be *way* slower than the spotlight hack was */ #define X_PERIOD (45000.0 * 3) #define Y_PERIOD (36000.0 * 3) struct state { Display *dpy; Window window; Screen *screen; int sizex, sizey; int delay; int duration; int pixwidth, pixheight, pixspacex, pixspacey, lensoffsetx, lensoffsety; Bool lenses; GC window_gc; XImage *orig_map; Pixmap pm; int tlx, tly, s; int sinusoid_offset; time_t start_time; async_load_state *img_loader; }; static long currentTimeInMs(struct state *st) { struct timeval curTime; unsigned long ret_unsigned; #ifdef GETTIMEOFDAY_TWO_ARGS struct timezone tz = {0,0}; gettimeofday(&curTime, &tz); #else gettimeofday(&curTime); #endif ret_unsigned = curTime.tv_sec *1000U + curTime.tv_usec / 1000; return (ret_unsigned <= LONG_MAX) ? ret_unsigned : -1 - (long)(ULONG_MAX - ret_unsigned); } static void * zoom_init (Display *dpy, Window window) { struct state *st = (struct state *) calloc (1, sizeof(*st)); XGCValues gcv; XWindowAttributes xgwa; Colormap cmap; unsigned long bg; long gcflags; int nblocksx, nblocksy; st->dpy = dpy; st->window = window; XGetWindowAttributes(st->dpy, st->window, &xgwa); st->screen = xgwa.screen; st->sizex = xgwa.width; st->sizey = xgwa.height; cmap = xgwa.colormap; bg = get_pixel_resource(st->dpy, cmap, "background", "Background"); st->delay = get_integer_resource(st->dpy, "delay", "Integer"); if (st->delay < 1) st->delay = 1; st->duration = get_integer_resource (st->dpy, "duration", "Seconds"); if (st->duration < 1) st->duration = 1; st->pixwidth = get_integer_resource(st->dpy, "pixwidth", "Integer"); if (st->pixwidth < 1) st->pixwidth = 1; st->pixheight = get_integer_resource(st->dpy, "pixheight", "Integer"); if (st->pixheight < 1) st->pixheight = 1; st->pixspacex = get_integer_resource(st->dpy, "pixspacex", "Integer"); if (st->pixspacex < 0) st->pixspacex = 0; st->pixspacey = get_integer_resource(st->dpy, "pixspacey", "Integer"); if (st->pixspacey < 0) st->pixspacey = 0; st->lenses = get_boolean_resource(st->dpy, "lenses", "Boolean"); st->lensoffsetx = get_integer_resource(st->dpy, "lensoffsetx", "Integer"); st->lensoffsetx = MAX(0, MIN(st->pixwidth, st->lensoffsetx)); st->lensoffsety = get_integer_resource(st->dpy, "lensoffsety", "Integer"); st->lensoffsety = MAX(0, MIN(st->pixwidth, st->lensoffsety)); gcv.function = GXcopy; gcv.subwindow_mode = IncludeInferiors; gcflags = GCForeground|GCFunction; gcv.foreground = bg; if (!st->lenses && use_subwindow_mode_p(xgwa.screen, st->window)) /* see grabscreen.c */ gcflags |= GCSubwindowMode; st->window_gc = XCreateGC(st->dpy, st->window, gcflags, &gcv); st->orig_map = NULL; st->pm = XCreatePixmap(st->dpy, st->window, st->sizex, st->sizey, xgwa.depth); XFillRectangle(st->dpy, st->window, st->window_gc, 0, 0, st->sizex, st->sizey); XSetWindowBackground(st->dpy, st->window, bg); st->start_time = time ((time_t *) 0); st->img_loader = load_image_async_simple (0, xgwa.screen, st->window, st->pm, 0, 0); /* We might have needed this to grab the image, but if we leave this set to GCSubwindowMode, then we'll *draw* right over subwindows too. */ XSetSubwindowMode (st->dpy, st->window_gc, ClipByChildren); nblocksx = (int)ceil((double)st->sizex / (double)(st->pixwidth + st->pixspacex)); nblocksy = (int)ceil((double)st->sizey / (double)(st->pixheight + st->pixspacey)); if (st->lenses) st->s = MAX((nblocksx - 1) * st->lensoffsetx + st->pixwidth, (nblocksy - 1) * st->lensoffsety + st->pixheight) * 2; else st->s = MAX(nblocksx, nblocksy) * 2; st->sinusoid_offset = random(); return st; } static unsigned long zoom_draw (Display *dpy, Window window, void *closure) { struct state *st = (struct state *) closure; unsigned x, y, i, j; long now; unsigned long now_unsigned; if (st->img_loader) /* still loading */ { st->img_loader = load_image_async_simple (st->img_loader, 0, 0, 0, 0, 0); if (! st->img_loader) { /* just finished */ XClearWindow (st->dpy, st->window); st->start_time = time ((time_t *) 0); if (!st->lenses) { st->orig_map = XGetImage(st->dpy, st->pm, 0, 0, st->sizex, st->sizey, ~0L, ZPixmap); /* XFreePixmap(st->dpy, st->pm); st->pm = 0;*/ } } return st->delay; } if (!st->img_loader && st->start_time + st->duration < time ((time_t *) 0)) { st->img_loader = load_image_async_simple (0, st->screen, st->window, st->pm, 0, 0); return st->delay; } #define nrnd(x) (random() % (x)) now = currentTimeInMs(st); now_unsigned = (unsigned long) now + st->sinusoid_offset; /* don't run multiple screens in lock-step */ now = (now_unsigned <= LONG_MAX) ? now_unsigned : -1 - (long)(ULONG_MAX - now_unsigned); /* find new x,y */ st->tlx = ((1. + sin(((double)now) / X_PERIOD * 2. * M_PI))/2.0) * (st->sizex - st->s/2) /* -s/4 */ + MINX; st->tly = ((1. + sin(((double)now) / Y_PERIOD * 2. * M_PI))/2.0) * (st->sizey - st->s/2) /* -s/4 */ + MINY; if (st->lenses) { for (x = i = 0; x < st->sizex; x += (st->pixwidth + st->pixspacex), ++i) for (y = j = 0; y < st->sizey; y += (st->pixheight + st->pixspacey), ++j) { XCopyArea(st->dpy, st->pm /* src */, st->window /* dest */, st->window_gc, st->tlx + i * st->lensoffsetx /* src_x */, st->tly + j * st->lensoffsety /* src_y */, st->pixwidth, st->pixheight, x /* dest_x */, y /* dest_y */); } } else { for (x = i = 0; x < st->sizex; x += (st->pixwidth + st->pixspacex), ++i) for (y = j = 0; y < st->sizey; y += (st->pixheight + st->pixspacey), ++j) { XSetForeground(st->dpy, st->window_gc, XGetPixel(st->orig_map, st->tlx+i, st->tly+j)); XFillRectangle(st->dpy, st->window, st->window_gc, i * (st->pixwidth + st->pixspacex), j * (st->pixheight + st->pixspacey), st->pixwidth, st->pixheight); } } return st->delay; } static void zoom_reshape (Display *dpy, Window window, void *closure, unsigned int w, unsigned int h) { } static Bool zoom_event (Display *dpy, Window window, void *closure, XEvent *event) { struct state *st = (struct state *) closure; if (screenhack_event_helper (dpy, window, event)) { st->start_time = 0; return True; } return False; } static void zoom_free (Display *dpy, Window window, void *closure) { struct state *st = (struct state *) closure; XFreeGC (st->dpy, st->window_gc); if (st->orig_map) XDestroyImage (st->orig_map); if (st->pm) XFreePixmap (st->dpy, st->pm); free (st); } static const char *zoom_defaults[] = { "*dontClearRoot: True", ".foreground: white", ".background: #111111", "*fpsSolid: true", #ifdef __sgi /* really, HAVE_READ_DISPLAY_EXTENSION */ "*visualID: Best", #endif "*lenses: true", "*delay: 10000", "*duration: 120", "*pixwidth: 40", "*pixheight: 40", "*pixspacex: 2", "*pixspacey: 2", "*lensoffsetx: 5", "*lensoffsety: 5", #ifdef HAVE_MOBILE "*ignoreRotation: True", "*rotateImages: True", #endif 0 }; static XrmOptionDescRec zoom_options[] = { { "-lenses", ".lenses", XrmoptionNoArg, "true" }, { "-no-lenses", ".lenses", XrmoptionNoArg, "false" }, { "-delay", ".delay", XrmoptionSepArg, 0 }, { "-duration", ".duration", XrmoptionSepArg, 0 }, { "-pixwidth", ".pixwidth", XrmoptionSepArg, 0 }, { "-pixheight", ".pixheight", XrmoptionSepArg, 0 }, { "-pixspacex", ".pixspacex", XrmoptionSepArg, 0 }, { "-pixspacey", ".pixspacey", XrmoptionSepArg, 0 }, { "-lensoffsetx", ".lensoffsetx", XrmoptionSepArg, 0 }, { "-lensoffsety", ".lensoffsety", XrmoptionSepArg, 0 }, { 0, 0, 0, 0 } }; XSCREENSAVER_MODULE ("Zoom", zoom) xscreensaver-5.36/hacks/whirlwindwarp.c000644 000767 000024 00000040133 12710314417 020275 0ustar00jwzstaff000000 000000 /* xscreensaver, Copyright (c) 2000 Paul "Joey" Clark * * 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. * * 19971004: Johannes Keukelaar : Use helix screen * eraser. */ /* WhirlwindWarp: moving stars. Ported from QBasic by Joey. Version 1.3. Smooth with pretty colours. This code adapted from original program by jwz/jk above. Freely distrubtable. Please keep this tag with this code, and add your own if you contribute. I would be delighted to hear if have made use of this code. If you find this code useful or have any queries, please contact me: pclark@cs.bris.ac.uk / joeyclark@usa.net Paul "Joey" Clark, hacking for humanity, Feb 99 www.cs.bris.ac.uk/~pclark | www.changetheworld.org.uk */ /* 15/May/05: Added colour rotation, limit on max FPS, scaling size dots, and smoother drivers. 4/Mar/01: Star colours are cycled when new colour can not be allocated. 4/Mar/01: Stars are plotted as squares with size relative to screen. 28/Nov/00: Submitted to xscreensaver as "whirlwindwarp". 10/Oct/00: Ported to xscreensaver as "twinkle". 19/Feb/98: Meters and interaction added for Ivor's birthday "stars11f". 11/Aug/97: Original QBasic program. */ #include #include "screenhack.h" #include "erase.h" #include "hsv.h" /* Maximum number of points, maximum tail length, and the number of forcefields/effects (hard-coded) */ #define maxps 1000 #define maxts 50 #define fs 16 /* TODO: change ps and ts arrays into pointers, for dynamic allocation at runtime. */ struct state { Display *dpy; Window window; GC draw_gc, erase_gc; unsigned int default_fg_pixel; int scrwid,scrhei; int starsize; float cx[maxps]; /* Current x,y of stars in realspace */ float cy[maxps]; int tx[maxps*maxts]; /* Previous x,y plots in pixelspace for removal later */ int ty[maxps*maxts]; char *name[fs]; /* The force fields and their parameters */ int fon[fs]; /* Is field on or off? */ float var[fs]; /* Current parameter */ float op[fs]; /* Optimum (central/mean) value */ float acc[fs]; float vel[fs]; int ps; /* Number of points and tail length */ int ts; Bool meters; int initted; XWindowAttributes xgwa; int got_color; XColor color[maxps]; /* The colour assigned to each star */ XColor bgcolor; int p,f,nt, sx,sy, resets,lastresets,cnt; int colsavailable; int hue; struct timeval lastframe; }; static void * whirlwindwarp_init (Display *dpy, Window window) { struct state *st = (struct state *) calloc (1, sizeof(*st)); XGCValues gcv; Colormap cmap; st->dpy = dpy; st->window = window; st->ps=500; st->ts=5; XGetWindowAttributes (st->dpy, st->window, &st->xgwa); cmap = st->xgwa.colormap; gcv.foreground = st->default_fg_pixel = get_pixel_resource (st->dpy, cmap, "foreground", "Foreground"); st->draw_gc = XCreateGC (st->dpy, st->window, GCForeground, &gcv); gcv.foreground = get_pixel_resource (st->dpy, cmap, "background", "Background"); st->erase_gc = XCreateGC (st->dpy, st->window, GCForeground, &gcv); st->ps = get_integer_resource (st->dpy, "points", "Integer"); st->ts = get_integer_resource (st->dpy, "tails", "Integer"); st->meters = get_boolean_resource (st->dpy, "meters", "Show meters"); if (st->ps > maxps) st->ps = maxps; if (st->ts > maxts) st->ts = maxts; return st; } static float myrnd(void) { /* between -1.0 (inclusive) and +1.0 (exclusive) */ return 2.0*((float)((random()%10000000)/10000000.0)-0.5); } #if 0 static float mysgn(float x) { return ( x < 0 ? -1 : x > 0 ? +1 : 0 ); } #endif static void stars_newp(struct state *st, int pp) { st->cx[pp]=myrnd(); st->cy[pp]=myrnd(); } /* Adjust a variable var about optimum op, with damp = dampening about op force = force of random perturbation */ /* float stars_perturb(float var,float op,float damp,float force) { return op+damp*(var-op)+force*myrnd()/4.0; }*/ #define stars_perturb(var,op,damp,force) \ ( (op) + (damp)*((var)-(op)) + (force)*myrnd()/4.0 ) /* Get pixel coordinates of a star */ static int stars_scrpos_x(struct state *st, int pp) { return st->scrwid*(st->cx[pp]+1.0)/2.0; } static int stars_scrpos_y(struct state *st, int pp) { return st->scrhei*(st->cy[pp]+1.0)/2.0; } /* Draw a meter of a forcefield's parameter */ static void stars_draw_meter(struct state *st, int ff) { int x,y,w,h; x=st->scrwid/2; y=ff*10; w=(st->var[ff]-st->op[ff])*st->scrwid*4; h=7; if (w<0) { w=-w; x=x-w; } if (st->fon[ff]) XFillRectangle(st->dpy,st->window,st->draw_gc,x,y,w,h); /* else XDrawRectangle(dpy,window,draw_gc,x,y,w,h); */ } /* Move a star according to acting forcefields */ static void stars_move(struct state *st, int pp) { float nx,ny; float x=st->cx[pp]; float y=st->cy[pp]; /* In theory all these if checks are unneccessary, since each forcefield effect should do nothing when its var = op. But the if's are good for efficiency because this function is called once for every point. Squirge towards edges (makes a leaf shape, previously split the screen in 4 but now only 1 :) These ones must go first, to avoid x+1.0 < 0 */ if (st->fon[6]) { /* x = mysgn(x) * pow(fabs(x),var[6]); y = mysgn(y) * pow(fabs(y),var[6]);*/ x = -1.0 + 2.0*pow((x + 1.0)/2.0,st->var[6]); } if (st->fon[7]) { y = -1.0 + 2.0*pow((y + 1.0)/2.0,st->var[7]); } /* Warping in/out */ if (st->fon[1]) { x = x * st->var[1]; y = y * st->var[1]; } /* Rotation */ if (st->fon[2]) { nx=x*cos(1.1*st->var[2])+y*sin(1.1*st->var[2]); ny=-x*sin(1.1*st->var[2])+y*cos(1.1*st->var[2]); x=nx; y=ny; } /* Asymptotes (looks like a plane with a horizon; equivalent to 1D warp) */ if (st->fon[3]) { /* Horizontal asymptote */ y=y*st->var[3]; } if (st->fon[4]) { /* Vertical asymptote */ x=x+st->var[4]*x; /* this is the same maths as the last, but with op=0 */ } if (st->fon[5]) { /* Vertical asymptote at right of screen */ x=(x-1.0)*st->var[5]+1.0; } /* Splitting (whirlwind effect): */ #define num_splits ( 2 + (int) (fabs(st->var[0]) * 1000) ) /* #define thru ( (float)(pp%num_splits)/(float)(num_splits-1) ) */ #define thru ( (float)((int)(num_splits*(float)(pp)/(float)(st->ps)))/(float)(num_splits-1) ) if (st->fon[8]) { x=x+0.5*st->var[8]*(-1.0+2.0*thru); } if (st->fon[9]) { y=y+0.5*st->var[9]*(-1.0+2.0*thru); } /* Waves */ if (st->fon[10]) { y = y + 0.4*st->var[10]*sin(300.0*st->var[12]*x + 600.0*st->var[11]); } if (st->fon[13]) { x = x + 0.4*st->var[13]*sin(300.0*st->var[15]*y + 600.0*st->var[14]); } st->cx[pp]=x; st->cy[pp]=y; } /* Turns a forcefield on, and ensures its vars are suitable. */ static void turn_on_field(struct state *st, int ff) { if (!st->fon[ff]) { /* acc[ff]=0.0; */ st->acc[ff]=0.02 * myrnd(); st->vel[ff]=0.0; st->var[ff]=st->op[ff]; } st->fon[ff] = 1; if (ff == 10) { turn_on_field(st, 11); turn_on_field(st, 12); } if (ff == 13) { turn_on_field(st, 14); turn_on_field(st, 15); } } static unsigned long whirlwindwarp_draw (Display *dpy, Window window, void *closure) { struct state *st = (struct state *) closure; /* time_t lastframe = time((time_t) 0); */ if (!st->initted) { st->initted = 1; XClearWindow (st->dpy, st->window); XGetWindowAttributes (st->dpy, st->window, &st->xgwa); st->scrwid = st->xgwa.width; st->scrhei = st->xgwa.height; st->starsize=st->scrhei/480; if (st->starsize<=0) st->starsize=1; /* Setup colours */ hsv_to_rgb (0.0, 0.0, 0.0, &st->bgcolor.red, &st->bgcolor.green, &st->bgcolor.blue); st->got_color = XAllocColor (st->dpy, st->xgwa.colormap, &st->bgcolor); st->colsavailable=0; for (st->p=0;st->pps;st->p++) { if (!mono_p) hsv_to_rgb (random()%360, .6+.4*myrnd(), .6+.4*myrnd(), &st->color[st->p].red, &st->color[st->p].green, &st->color[st->p].blue); /* hsv_to_rgb (random()%360, 1.0, 1.0, &color[p].red, &color[p].green, &color[p].blue); for stronger colours! */ if ((!mono_p) && (st->got_color = XAllocColor (st->dpy, st->xgwa.colormap, &st->color[st->p]))) { st->colsavailable=st->p; } else { if (st->colsavailable>0) /* assign colours from those already allocated */ st->color[st->p]=st->color[ st->p % st->colsavailable ]; else st->color[st->p].pixel=st->default_fg_pixel; } } /* Set up central (optimal) points for each different forcefield */ st->op[1] = 1; st->name[1] = "Warp"; st->op[2] = 0; st->name[2] = "Rotation"; st->op[3] = 1; st->name[3] = "Horizontal asymptote"; st->op[4] = 0; st->name[4] = "Vertical asymptote"; st->op[5] = 1; st->name[5] = "Vertical asymptote right"; st->op[6] = 1; st->name[6] = "Squirge x"; st->op[7] = 1; st->name[7] = "Squirge y"; st->op[0] = 0; st->name[0] = "Split number (inactive)"; st->op[8] = 0; st->name[8] = "Split velocity x"; st->op[9] = 0; st->name[9] = "Split velocity y"; st->op[10] = 0; st->name[10] = "Horizontal wave amplitude"; st->op[11] = myrnd()*3.141; st->name[11] = "Horizontal wave phase (inactive)"; st->op[12] = 0.01; st->name[12] = "Horizontal wave frequency (inactive)"; st->op[13] = 0; st->name[13] = "Vertical wave amplitude"; st->op[14] = myrnd()*3.141; st->name[14] = "Vertical wave phase (inactive)"; st->op[15] = 0.01; st->name[15] = "Vertical wave frequency (inactive)"; /* Initialise parameters to optimum, all off */ for (st->f=0;st->ff++) { st->var[st->f]=st->op[st->f]; st->fon[st->f]=( myrnd()>0.5 ? 1 : 0 ); st->acc[st->f]=0.02 * myrnd(); st->vel[st->f]=0; } /* Initialise stars */ for (st->p=0;st->pps;st->p++) stars_newp(st, st->p); /* tx[nt],ty[nt] remember earlier screen plots (tails of stars) which are deleted when nt comes round again */ st->nt = 0; st->resets = 0; st->hue = 180 + 180*myrnd(); gettimeofday(&st->lastframe, NULL); } if (myrnd()>0.75) { /* Change one of the allocated colours to something near the current hue. */ /* By changing a random colour, we sometimes get a tight colour spread, sometime a diverse one. */ int pp = st->colsavailable * (0.5+myrnd()/2); hsv_to_rgb (st->hue, .6+.4*myrnd(), .6+.4*myrnd(), &st->color[pp].red, &st->color[pp].green, &st->color[pp].blue); if ((!mono_p) && (st->got_color = XAllocColor (st->dpy, st->xgwa.colormap, &st->color[pp]))) { } st->hue = st->hue + 0.5 + myrnd()*9.0; if (st->hue<0) st->hue+=360; if (st->hue>=360) st->hue-=360; } /* Move current points */ st->lastresets=st->resets; st->resets=0; for (st->p=0;st->pps;st->p++) { /* Erase old */ XSetForeground (st->dpy, st->draw_gc, st->bgcolor.pixel); /* XDrawPoint(dpy,window,draw_gc,tx[nt],ty[nt]); */ XFillRectangle(st->dpy,st->window,st->draw_gc,st->tx[st->nt],st->ty[st->nt],st->starsize,st->starsize); /* Move */ stars_move(st, st->p); /* If moved off screen, create a new one */ if (st->cx[st->p]<=-0.9999 || st->cx[st->p]>=+0.9999 || st->cy[st->p]<=-0.9999 || st->cy[st->p]>=+0.9999 || fabs(st->cx[st->p])<.0001 || fabs(st->cy[st->p])<.0001) { stars_newp(st, st->p); st->resets++; } else if (myrnd()>0.99) /* Reset at random */ stars_newp(st, st->p); /* Draw point */ st->sx=stars_scrpos_x(st, st->p); st->sy=stars_scrpos_y(st, st->p); XSetForeground (st->dpy, st->draw_gc, st->color[st->p].pixel); /* XDrawPoint(dpy,window,draw_gc,sx,sy); */ XFillRectangle(st->dpy,st->window,st->draw_gc,st->sx,st->sy,st->starsize,st->starsize); /* Remember it for removal later */ st->tx[st->nt]=st->sx; st->ty[st->nt]=st->sy; st->nt=(st->nt+1)%(st->ps*st->ts); } /* Adjust force fields */ st->cnt=0; for (st->f=0;st->ff++) { if (st->meters) { /* Remove meter from display */ XSetForeground(st->dpy, st->draw_gc, st->bgcolor.pixel); stars_draw_meter(st,st->f); } /* Adjust forcefield's parameter */ if (st->fon[st->f]) { /* This configuration produces var[f]s usually below 0.01 */ st->acc[st->f]=stars_perturb(st->acc[st->f],0,0.98,0.005); st->vel[st->f]=stars_perturb(st->vel[st->f]+0.03*st->acc[st->f],0,0.995,0.0); st->var[st->f]=st->op[st->f]+(st->var[st->f]-st->op[st->f])*0.9995+0.001*st->vel[st->f]; } /* fprintf(stderr,"f=%i fon=%i acc=%f vel=%f var=%f\n",f,fon[f],acc[f],vel[f],var[f]); */ /* Decide whether to turn this forcefield on or off. */ /* prob_on makes the "splitting" effects less likely than the rest */ #define prob_on ( st->f==8 || st->f==9 ? 0.999975 : 0.9999 ) if ( st->fon[st->f]==0 && myrnd()>prob_on ) { turn_on_field(st, st->f); } else if ( st->fon[st->f]!=0 && myrnd()>0.99 && fabs(st->var[st->f]-st->op[st->f])<0.0005 && fabs(st->vel[st->f])<0.005 /* && fabs(acc[f])<0.01 */ ) { /* We only turn it off if it has gently returned to its optimal (as opposed to rapidly passing through it). */ st->fon[st->f] = 0; } if (st->meters) { /* Redraw the meter */ XSetForeground(st->dpy, st->draw_gc, st->color[st->f].pixel); stars_draw_meter(st,st->f); } if (st->fon[st->f]) st->cnt++; } /* Ensure at least three forcefields are on. * BUG: Picking randomly might not be enough since 0,11,12,14 and 15 do nothing! * But then what's wrong with a rare gentle twinkle?! */ if (st->cnt<3) { st->f=random() % fs; turn_on_field(st, st->f); } if (st->meters) { XSetForeground(st->dpy, st->draw_gc, st->bgcolor.pixel); XDrawRectangle(st->dpy,st->window,st->draw_gc,0,0,st->lastresets*5,3); XSetForeground(st->dpy, st->draw_gc, st->default_fg_pixel); XDrawRectangle(st->dpy,st->window,st->draw_gc,0,0,st->resets*5,3); } /* Cap frames per second; do not go above specified fps: */ { unsigned long this_delay = 0; int maxfps = 200; long utimeperframe = 1000000/maxfps; struct timeval now; long timediff; gettimeofday(&now, NULL); /* timediff = now.tv_sec*1000000 + now.tv_usec - st->lastframe.tv_sec*1000000 - st->lastframe.tv_usec; */ timediff = (now.tv_sec - st->lastframe.tv_sec) * 1000000 + now.tv_usec - st->lastframe.tv_usec; if (timediff < utimeperframe) { /* fprintf(stderr,"sleeping for %i\n",utimeperframe-timediff); */ this_delay = (utimeperframe-timediff); } st->lastframe = now; return this_delay; } } 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 whirlwindwarp_event (Display *dpy, Window window, void *closure, XEvent *event) { return False; } static void whirlwindwarp_free (Display *dpy, Window window, void *closure) { struct state *st = (struct state *) closure; free (st); } static const char *whirlwindwarp_defaults [] = { ".background: black", ".foreground: white", "*fpsSolid: true", "*points: 400", "*tails: 8", "*meters: false", #ifdef HAVE_MOBILE "*ignoreRotation: True", #endif 0 }; static XrmOptionDescRec whirlwindwarp_options [] = { { "-points", ".points", XrmoptionSepArg, 0 }, { "-tails", ".tails", XrmoptionSepArg, 0 }, { "-meters", ".meters", XrmoptionNoArg, "true" }, { 0, 0, 0, 0 } }; XSCREENSAVER_MODULE ("WhirlWindWarp", whirlwindwarp) xscreensaver-5.36/hacks/rotzoomer.c000644 000767 000024 00000036202 12732125557 017447 0ustar00jwzstaff000000 000000 /* rotzoomer - creates a collage of rotated and scaled portions of the screen * Copyright (C) 2001-2016 Claudio Matsuoka * * 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. */ /* Circle-mode by jwz, 2014, 2016. */ /* * Options: * * -shm enable MIT shared memory extension * -no-shm disable MIT shared memory extension * -n number of zoomboxes * -move enable mobile zoomboxes * -sweep enable sweep mode * -circle enable circle mode * -anim enable snapshot mode * -no-anim enable snapshot mode * -delay delay in milliseconds */ #include #include "screenhack.h" #ifdef HAVE_XSHM_EXTENSION #include "xshm.h" #endif struct zoom_area { int w, h; /* rectangle width and height */ int inc1, inc2; /* rotation and zoom angle increments */ int dx, dy; /* translation increments */ int a1, a2; /* rotation and zoom angular variables */ int ox, oy; /* origin in the background copy */ int xx, yy; /* left-upper corner position (* 256) */ int x, y; /* left-upper corner position */ int ww, hh; /* valid area to place left-upper corner */ int n; /* number of iteractions */ int count; /* current iteraction */ }; struct state { Display *dpy; Window window; GC gc; Visual *visual; XImage *orig_map, *buffer_map; Colormap colormap; int width, height; struct zoom_area **zoom_box; int num_zoom; int move; int sweep; int circle; int delay; int anim; int duration; time_t start_time; async_load_state *img_loader; Pixmap pm; #ifdef HAVE_XSHM_EXTENSION Bool use_shm; XShmSegmentInfo shm_info; #endif }; static void rotzoom (struct state *st, struct zoom_area *za) { int x, y, c, s, zoom, z; int x2 = za->x + za->w - 1, y2 = za->y + za->h - 1; int ox = 0, oy = 0; int w2 = (za->w/2) * (za->w/2); z = 8100 * sin (M_PI * za->a2 / 8192); zoom = 8192 + z; for (y = za->y; y <= y2; y++) { for (x = za->x; x <= x2; x++) { Bool copyp = True; double a = M_PI * za->a1 / 8192; c = zoom * cos (a); s = zoom * sin (a); if (st->circle) { int cx = za->x + za->w / 2; int cy = za->y + za->h / 2; int dx = x - cx; int dy = y - cy; int d2 = (dx*dx) + (dy*dy); if (d2 > w2) { copyp = False; } else { double r = sqrt ((double) d2); double th = atan ((double)dy / (double) (dx == 0 ? 1 : dx)); copyp = 1; if (dx < 0) th += M_PI; th += M_PI * (za->a1 / 600.0); ox = cx + (int) (r * cos(th)); oy = cy + (int) (r * sin(th)); } } else { ox = (x * c + y * s) >> 13; oy = (-x * s + y * c) >> 13; } if (copyp) { while (ox < 0) ox += st->width; while (oy < 0) oy += st->height; while (ox >= st->width) ox -= st->width; while (oy >= st->height) oy -= st->height; XPutPixel (st->buffer_map, x, y, XGetPixel (st->orig_map, ox, oy)); } } } za->a1 += za->inc1; /* Rotation angle */ za->a1 &= 0x3fff; za->a2 += za->inc2; /* Zoom */ za->a2 &= 0x3fff; za->ox = ox; /* Save state for next iteration */ za->oy = oy; if (st->circle && za->n <= 1) { /* Done rotating the circle: copy the bits from the working set back into the origin, so that subsequent rotations pick up these changes. */ int cx = za->x + za->w / 2; int cy = za->y + za->h / 2; int w2 = (za->w/2) * (za->w/2); for (y = za->y; y < za->y + za->h; y++) for (x = za->x; x < za->x + za->w; x++) { int dx = x - cx; int dy = y - cy; int d2 = (dx*dx) + (dy*dy); if (d2 <= w2) XPutPixel (st->orig_map, x, y, XGetPixel (st->buffer_map, x, y)); } } za->count++; } static void reset_zoom (struct state *st, struct zoom_area *za) { if (st->sweep) { int speed = random () % 100 + 100; switch (random () % 4) { case 0: za->w = st->width; za->h = 10; za->x = 0; za->y = 0; za->dx = 0; za->dy = speed; za->n = (st->height - 10) * 256 / speed; break; case 1: za->w = 10; za->h = st->height; za->x = st->width - 10; za->y = 0; za->dx = -speed; za->dy = 0; za->n = (st->width - 10) * 256 / speed; break; case 2: za->w = st->width; za->h = 10; za->x = 0; za->y = st->height - 10; za->dx = 0; za->dy = -speed; za->n = (st->height - 10) * 256 / speed; break; case 3: za->w = 10; za->h = st->height; za->x = 0; za->y = 0; za->dx = speed; za->dy = 0; za->n = (st->width - 10) * 256 / speed; break; } za->ww = st->width - za->w; za->hh = st->height - za->h; /* We want smaller angle increments in sweep mode (looks better) */ za->a1 = 0; za->a2 = 0; za->inc1 = ((2 * (random() & 1)) - 1) * (1 + random () % 7); za->inc2 = ((2 * (random() & 1)) - 1) * (1 + random () % 7); } else if (st->circle) { za->w = 50 + random() % 300; if (za->w > st->width / 3) za->w = st->width / 3; if (za->w > st->height / 3) za->w = st->height / 3; za->h = za->w; za->ww = st->width - za->w; za->hh = st->height - za->h; za->x = (za->ww ? random() % za->ww : 0); za->y = (za->hh ? random() % za->hh : 0); za->dx = 0; za->dy = 0; za->a1 = 0; za->a2 = 0; za->count = 0; /* #### If we go clockwise, it doesn't start rotating from 0. So only go counter-clockwise for now. Sigh. */ za->inc1 = (random () % 30); za->inc2 = 0; za->n = 50 + random() % 100; if (!st->anim) { za->count = random() % (za->n / 2); za->a1 = random(); } } else { za->w = 50 + random() % 300; za->h = 50 + random() % 300; if (za->w > st->width / 3) za->w = st->width / 3; if (za->h > st->height / 3) za->h = st->height / 3; za->ww = st->width - za->w; za->hh = st->height - za->h; za->x = (za->ww ? random() % za->ww : 0); za->y = (za->hh ? random() % za->hh : 0); za->dx = ((2 * (random() & 1)) - 1) * (100 + random() % 300); za->dy = ((2 * (random() & 1)) - 1) * (100 + random() % 300); if (st->anim) { za->n = 50 + random() % 1000; za->a1 = 0; za->a2 = 0; } else { za->n = 5 + random() % 10; za->a1 = random (); za->a2 = random (); } za->inc1 = ((2 * (random() & 1)) - 1) * (random () % 30); za->inc2 = ((2 * (random() & 1)) - 1) * (random () % 30); } za->xx = za->x * 256; za->yy = za->y * 256; za->count = 0; } static struct zoom_area * create_zoom (struct state *st) { struct zoom_area *za; za = calloc (1, sizeof (struct zoom_area)); reset_zoom (st, za); return za; } static void update_position (struct zoom_area *za) { za->xx += za->dx; za->yy += za->dy; za->x = za->xx >> 8; za->y = za->yy >> 8; if (za->x < 0) { za->x = 0; za->dx = 100 + random() % 100; } if (za->y < 0) { za->y = 0; za->dy = 100 + random() % 100; } if (za->x > za->ww) { za->x = za->ww; za->dx = -(100 + random() % 100); } if (za->y > za->hh) { za->y = za->hh; za->dy = -(100 + random() % 100); } } static void DisplayImage (struct state *st, int x, int y, int w, int h) { #ifdef HAVE_XSHM_EXTENSION if (st->use_shm) XShmPutImage (st->dpy, st->window, st->gc, st->buffer_map, x, y, x, y, w, h, False); else #endif /* HAVE_XSHM_EXTENSION */ XPutImage(st->dpy, st->window, st->gc, st->buffer_map, x, y, x, y, w, h); } static void set_mode(struct state *st) { char *s = get_string_resource (st->dpy, "mode", "Mode"); if (!s || !*s || !strcasecmp (s, "random")) { switch (random() % 4) { case 0: s = "stationary"; break; case 1: s = "move"; break; case 2: s = "sweep"; break; case 3: s = "circle"; break; default: abort(); } } st->move = False; st->sweep = False; st->circle = False; if (!strcasecmp (s, "stationary")) ; else if (!strcasecmp (s, "move")) st->move = True; else if (!strcasecmp (s, "sweep")) st->sweep = True; else if (!strcasecmp (s, "circle")) st->circle = True; else fprintf (stderr, "%s: bogus mode: \"%s\"\n", progname, s); } static void init_hack (struct state *st) { int i; set_mode (st); st->start_time = time ((time_t *) 0); st->zoom_box = calloc (st->num_zoom, sizeof (struct zoom_area *)); for (i = 0; i < st->num_zoom; i++) { st->zoom_box[i] = create_zoom (st); } if (st->height && st->orig_map->data) memcpy (st->buffer_map->data, st->orig_map->data, st->height * st->buffer_map->bytes_per_line); DisplayImage(st, 0, 0, st->width, st->height); } static unsigned long rotzoomer_draw (Display *disp, Window win, void *closure) { struct state *st = (struct state *) closure; int delay = st->delay; int i; if (st->img_loader) /* still loading */ { st->img_loader = load_image_async_simple (st->img_loader, 0, 0, 0, 0, 0); if (! st->img_loader) { /* just finished */ if (! st->pm) abort(); st->orig_map = XGetImage (st->dpy, st->pm, 0, 0, st->width, st->height, ~0L, ZPixmap); init_hack (st); } return st->delay; } if (!st->img_loader && st->start_time + st->duration < time ((time_t *) 0)) { XWindowAttributes xgwa; XGetWindowAttributes(st->dpy, st->window, &xgwa); /* On MacOS X11, XGetImage on a Window often gets an inexplicable BadMatch, possibly due to the window manager having occluded something? It seems nondeterministic. Loading the image into a pixmap instead fixes it. */ if (st->pm) XFreePixmap (st->dpy, st->pm); st->pm = XCreatePixmap (st->dpy, st->window, xgwa.width, xgwa.height, xgwa.depth); st->img_loader = load_image_async_simple (0, xgwa.screen, st->window, st->pm, 0, 0); st->start_time = time ((time_t *) 0); return st->delay; } for (i = 0; i < st->num_zoom; i++) { if (st->move || st->sweep) update_position (st->zoom_box[i]); if (st->zoom_box[i]->n > 0) { if (st->anim || st->zoom_box[i]->count == 0) { rotzoom (st, st->zoom_box[i]); } else { delay = 1000000; } st->zoom_box[i]->n--; } else { reset_zoom (st, st->zoom_box[i]); } } for (i = 0; i < st->num_zoom; i++) { DisplayImage(st, st->zoom_box[i]->x, st->zoom_box[i]->y, st->zoom_box[i]->w, st->zoom_box[i]->h); } return delay; } static void setup_X (struct state *st) { XWindowAttributes xgwa; int depth; XGCValues gcv; long gcflags; XGetWindowAttributes (st->dpy, st->window, &xgwa); depth = xgwa.depth; st->colormap = xgwa.colormap; st->width = xgwa.width; st->height = xgwa.height; st->visual = xgwa.visual; if (st->width % 2) st->width--; if (st->height % 2) st->height--; gcv.function = GXcopy; gcv.subwindow_mode = IncludeInferiors; gcflags = GCFunction; if (use_subwindow_mode_p (xgwa.screen, st->window)) /* see grabscreen.c */ gcflags |= GCSubwindowMode; st->gc = XCreateGC (st->dpy, st->window, gcflags, &gcv); if (st->pm) XFreePixmap (st->dpy, st->pm); st->pm = XCreatePixmap (st->dpy, st->window, xgwa.width, xgwa.height, xgwa.depth); st->img_loader = load_image_async_simple (0, xgwa.screen, st->window, st->pm, 0, 0); st->buffer_map = 0; #ifdef HAVE_XSHM_EXTENSION if (st->use_shm) { st->buffer_map = create_xshm_image(st->dpy, xgwa.visual, depth, ZPixmap, 0, &st->shm_info, st->width, st->height); if (!st->buffer_map) { st->use_shm = False; fprintf(stderr, "create_xshm_image failed\n"); } } #endif /* HAVE_XSHM_EXTENSION */ if (!st->buffer_map) { st->buffer_map = XCreateImage(st->dpy, xgwa.visual, depth, ZPixmap, 0, 0, st->width, st->height, 8, 0); st->buffer_map->data = (char *)calloc (st->buffer_map->height, st->buffer_map->bytes_per_line); } } static void * rotzoomer_init (Display *dpy, Window window) { struct state *st = (struct state *) calloc (1, sizeof(*st)); st->dpy = dpy; st->window = window; #ifdef HAVE_XSHM_EXTENSION st->use_shm = get_boolean_resource (st->dpy, "useSHM", "Boolean"); #endif st->num_zoom = get_integer_resource (st->dpy, "numboxes", "Integer"); set_mode(st); st->anim = get_boolean_resource (st->dpy, "anim", "Boolean"); st->delay = get_integer_resource (st->dpy, "delay", "Integer"); st->duration = get_integer_resource (st->dpy, "duration", "Seconds"); if (st->delay < 0) st->delay = 0; if (st->duration < 1) st->duration = 1; /* In sweep or static mode, we want only one box */ if (st->sweep || !st->anim) st->num_zoom = 1; /* Can't have static sweep mode */ if (!st->anim) st->sweep = 0; if (st->circle) { st->move = 0; st->sweep = 0; } st->start_time = time ((time_t *) 0); setup_X (st); return st; } static void rotzoomer_reshape (Display *dpy, Window window, void *closure, unsigned int w, unsigned int h) { } static Bool rotzoomer_event (Display *dpy, Window window, void *closure, XEvent *event) { struct state *st = (struct state *) closure; if (screenhack_event_helper (dpy, window, event)) { st->start_time = 0; return True; } return False; } static void rotzoomer_free (Display *dpy, Window window, void *closure) { struct state *st = (struct state *) closure; if (st->pm) XFreePixmap (dpy, st->pm); free (st); } static const char *rotzoomer_defaults[] = { ".background: black", ".foreground: white", "*fpsSolid: true", #ifdef HAVE_XSHM_EXTENSION "*useSHM: True", #else "*useSHM: False", #endif "*anim: True", "*mode: random", "*numboxes: 2", "*delay: 10000", "*duration: 120", #ifdef HAVE_MOBILE "*ignoreRotation: True", "*rotateImages: True", #endif 0 }; static XrmOptionDescRec rotzoomer_options[] = { { "-shm", ".useSHM", XrmoptionNoArg, "True" }, { "-no-shm", ".useSHM", XrmoptionNoArg, "False" }, { "-mode", ".mode", XrmoptionSepArg, 0 }, { "-move", ".mode", XrmoptionNoArg, "move" }, { "-sweep", ".mode", XrmoptionNoArg, "sweep" }, { "-circle", ".mode", XrmoptionNoArg, "circle"}, { "-anim", ".anim", XrmoptionNoArg, "True" }, { "-no-anim", ".anim", XrmoptionNoArg, "False" }, { "-delay", ".delay", XrmoptionSepArg, 0 }, {"-duration", ".duration", XrmoptionSepArg, 0 }, { "-n", ".numboxes", XrmoptionSepArg, 0 }, { 0, 0, 0, 0 } }; XSCREENSAVER_MODULE ("RotZoomer", rotzoomer) xscreensaver-5.36/hacks/whirlygig.c000644 000767 000024 00000067573 12717747761 017445 0ustar00jwzstaff000000 000000 /* Whirlygig -- an experiment in X programming * * 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. * * When I was in trigonometry class as a kid, I remember being fascinated * by the beauty of the shapes one receives when playing with sine waves * Here is a little experiment to show that beauty is simple */ #include #include #include "screenhack.h" #ifdef HAVE_DOUBLE_BUFFER_EXTENSION # include "xdbe.h" #endif /* HAVE_DOUBLE_BUFFER_EXTENSION */ #define NCOLORS 100 #define FULL_CYCLE 429496729 #define START_ARC 0 #define END_ARC 23040 struct info { /* Bool writable; / * Is the screen writable */ double xspeed; /* A factor to modify the horizontal movement */ double yspeed; /* A factor to modify vertical movement */ double xamplitude; double yamplitude; int whirlies; /* How many whirlies per line do you want? */ int nlines; /* How many lines of whirlies do you want? */ int half_width; /* 1/2 the width of the screen */ int half_height; int speed; int trail; int color_modifier; double xoffset; double yoffset; double offset_period; Bool wrap; }; enum object_mode { spin_mode, funky_mode, circle_mode, linear_mode, test_mode, fun_mode, innie_mode, lissajous_mode }; struct state { Display *dpy; Window window; XGCValues gcv; /* The structure to hold the GC data */ XWindowAttributes xgwa; /* A structure to hold window data */ Pixmap b, ba; /* double-buffer to reduce flicker */ #ifdef HAVE_DOUBLE_BUFFER_EXTENSION Bool dbeclear_p; XdbeBackBuffer backb; #endif /* HAVE_DOUBLE_BUFFER_EXTENSION */ GC fgc, bgc; int screen; Bool dbuf; unsigned long int current_time; /* The global int telling the current time */ unsigned long int start_time; struct info *info; char *xmode_str, *ymode_str; /* holds the current mode for x and y computation */ /* pos is the current position x,y -- last_x contains one cell of every x coordinate for every position of every whirly in every line up to 100 whirlies in 100 lines -- lasy_y and last_size hold the same information for y and size respectively */ int pos[2], last_x[100][100], last_y[100][100], last_size[100][100]; int current_color; Bool wrap; int xmode, ymode; double modifier; /* for innie */ XColor colors[NCOLORS]; int ncolors; int explaining; }; static void draw_explain_string(struct state *, int, int, Display *, Window, GC); static void spin(struct state *, unsigned long int, struct info *, int *, int); static void funky(struct state *, unsigned long int, struct info *, int *, int); static void circle(struct state *, unsigned long int, struct info *, int *, int); static void fun(struct state *, unsigned long int, struct info *, int *, int); static void linear(struct state *, unsigned long int, struct info *, int *, int); static void lissajous(struct state *, unsigned long int, struct info *, int *, int); static void test(struct state *, unsigned long int, struct info *, int *, int); static void innie(struct state *, unsigned long int, struct info *, int *, int, double); static const char spin_explanation[] = "Spin mode is a simple sin/cos with every argument modified"; static const char funky_explanation[] = "Funky mode is me goofing off."; static const char circle_explanation[] = "Circle mode graphs the x and y positions as you trace the edge of a circle over time."; static const char linear_explanation[] = "Linear mode draws a straight line"; static const char test_explanation[] = "Test mode is a mode that I play around with ideas in."; static const char fun_explanation[] = "Fun mode is the coolest."; static const char innie_explanation[] = "Innie mode does something or other. Looks cool, though."; static const char lissajous_explanation[] = "Lissajous mode draws a slightly modified lissajous curve"; static void draw_explain_string(struct state *st, int mode, int offset, Display *dpy, Window window, GC fgc) { switch(mode) { case spin_mode: XDrawString(st->dpy, st->window, st->fgc, 50, offset, (char*) spin_explanation, strlen(spin_explanation)); break; case funky_mode: XDrawString(st->dpy, st->window, st->fgc, 50, offset, (char*) funky_explanation, strlen(funky_explanation)); break; case circle_mode: XDrawString(st->dpy, st->window, st->fgc, 50, offset, (char*) circle_explanation, strlen(circle_explanation)); break; case linear_mode: XDrawString(st->dpy, st->window, st->fgc, 50, offset, (char*) linear_explanation, strlen(linear_explanation)); break; case test_mode: XDrawString(st->dpy, st->window, st->fgc, 50, offset, (char*) test_explanation, strlen(test_explanation)); break; case fun_mode: XDrawString(st->dpy, st->window, st->fgc, 50, offset, (char*) fun_explanation, strlen(fun_explanation)); break; case innie_mode: XDrawString(st->dpy, st->window, st->fgc, 50, offset, (char*) innie_explanation, strlen(innie_explanation)); break; case lissajous_mode: XDrawString(st->dpy, st->window, st->fgc, 50, offset, (char*) lissajous_explanation, strlen(linear_explanation)); } } static void funky(struct state *st, unsigned long int the_time, struct info *info, int pos[], int index) { double new_time = ((the_time % 360 ) / 180.0) * M_PI; if (index == 0) { double time_modifier = cos(new_time / 180.0); double the_cos = cos((new_time * (double)st->info->xspeed) + (time_modifier * 80.0)); double dist_mod_x = cos(new_time) * (st->info->half_width - 50); st->pos[index]= st->info->xamplitude * (the_cos * dist_mod_x) + st->info->half_width; } else { double new_time = ((the_time % 360 ) / 180.0) * M_PI; double time_modifier = sin(new_time / 180.0); double the_sin = sin((new_time * (double)st->info->yspeed) + (time_modifier * 80.0)); double dist_mod_y = sin(new_time) * (st->info->half_height - 50); st->pos[index] = st->info->yamplitude * (the_sin * dist_mod_y) + st->info->half_height; } } static void innie(struct state *st, unsigned long int the_time, struct info *info, int pos[], int index, double modifier) { double frequency = 2000000.0 + (st->modifier * cos(((double)the_time / 100.0))); double arg = (double)the_time / frequency; double amplitude = 200.0 * cos(arg); double fun = 150.0 * cos((double)the_time / 2000.0); int vert_mod, horiz_mod; if (index == 0) { horiz_mod = (int)(fun * cos((double)the_time / 100.0)) + st->info->half_width; st->pos[index] = (amplitude * cos((double)the_time / 100.0 * st->info->xspeed)) + horiz_mod; } else { vert_mod = (int)(fun * sin((double)the_time / 100.0)) + st->info->half_height; st->pos[index] = (amplitude * sin((double)the_time / 100.0 * st->info->yspeed)) + vert_mod; } } static void lissajous(struct state *st, unsigned long int the_time, struct info *info, int pos[], int index) { /* This is a pretty standard lissajous curve x = a sin(nt + c) y = b sin(t) The n and c modifiers are cyclic as well, however... */ int result; double time = (double)the_time / 100.0; double fun = 15.0 * cos((double)the_time / 800.0); double weird = cos((time / 1100000.0) / 1000.0); if (index == 0) { result = st->info->xamplitude * 200.0 * sin((weird * time) + fun) + st->info->half_width; } else { result = st->info->yamplitude * 200.0 * sin(time) + st->info->half_height; } st->pos[index] = result; } static void circle(struct state *st, unsigned long int the_time, struct info *info, int pos[], int index) { int result; if (index == 0) { result = st->info->xamplitude * (cos((double)the_time / 100.0 * st->info->xspeed) * (st->info->half_width / 2)) + st->info->half_width; } else { result = st->info->yamplitude * (sin((double)the_time / 100.0 * st->info->yspeed) * (st->info->half_height / 2)) + st->info->half_height; } st->pos[index] = result; } #if 0 static void mod(unsigned long int the_time, struct info *info, int pos[], int index) { int amplitude; int max = st->info->half_width; if ((the_time % (max * 2)) < max) amplitude = max - ((the_time % (max * 2)) - max); else amplitude = the_time % (max * 2); amplitude = amplitude - max; } #endif static void spin(struct state *st, unsigned long int the_time, struct info *info, int pos[], int index) { double funky = (((the_time % 360) * 1.0) / 180.0) * M_PI; if (index ==0) { double the_cos = cos((double)the_time / (180.0 * st->info->xspeed)); double dist_mod_x = cos((double)funky) * (st->info->half_width - 50); st->pos[index] = st->info->xamplitude * (the_cos * dist_mod_x) + st->info->half_width; } else { double the_sin = sin((double)the_time / (180.0 * st->info->yspeed)); double dist_mod_y = sin((double)funky) * (st->info->half_height - 50); st->pos[index] = st->info->yamplitude * (the_sin * dist_mod_y) + st->info->half_height; } } static void fun(struct state *st, unsigned long int the_time, struct info *info, int pos[], int index) { int amplitude; int max = st->info->half_width; if ((the_time % (max * 2)) < max) amplitude = max - ((the_time % (max * 2)) - max); else amplitude = the_time % (max * 2); amplitude = amplitude - max; if (index ==0) { st->pos[index] = (amplitude * cos((double)the_time / 100.0 * st->info->xspeed)) + st->info->half_width; } else { st->pos[index] = (amplitude * sin((double)the_time / 100.0 * st->info->yspeed)) + st->info->half_height; } } static void linear(struct state *st, unsigned long int the_time, struct info *info, int pos[], int index) { if (index == 0) /* Calculate for the x axis */ st->pos[index] = ((the_time / 2) % (st->info->half_width * 2)); else st->pos[index] = ((the_time / 2) % (st->info->half_height * 2)); } static void test(struct state *st, unsigned long int the_time, struct info *info, int pos[], int index) { if (index == 0) { st->pos[index] = st->info->xamplitude * (cos((double)the_time / 100.0 * st->info->xspeed) * (st->info->half_width / 2)) + st->info->half_width; } else { st->pos[index] = st->info->yamplitude * (sin((double)the_time / 100.0 * st->info->yspeed) * (st->info->half_height / 2)) + st->info->half_height; } } static int preen(int current, int max) { if (current > max) current=current-max; if (current < 0) current=current+max; return(current); } #if 0 static void smoothen(struct state *st, int x, int lastx, int y, int lasty, int size, int last_color, XColor *colors, Display *dpy, Window window, GC bgc, int screen, struct info *info) { double xdistance = abs((double)x-(double)lastx); double ydistance = abs((double)y-(double)lasty); double distance = sqrt(((xdistance * xdistance) + (ydistance * ydistance)) ); double slope = (((double)y-(double)lasty) / ((double)x-(double)lastx)); printf("Starting smoothen with values: %f, %f, %f, %f\n", xdistance, ydistance, distance, slope); if (distance > 2.0) { int newx = (int)((xdistance / distance) * slope); int newy = (int)((ydistance / distance) * slope); if (! st->info->trail) { XSetForeground(st->dpy, st->bgc, BlackPixel(st->dpy, st->screen)); XFillArc(st->dpy, st->window, st->bgc, lastx, lasty, size, size, START_ARC, END_ARC); } XSetForeground(st->dpy, st->bgc, st->colors[last_color].pixel); XFillArc(st->dpy, st->window, st->bgc, newx, newy, size, size, START_ARC, END_ARC); smoothen(st, newx, x, newy, y, size, last_color, st->colors, st->dpy, st->window, st->bgc, st->screen, st->info); } } #endif static void * whirlygig_init (Display *dpy, Window window) { struct state *st = (struct state *) calloc (1, sizeof(*st)); st->dpy = dpy; st->window = window; st->ncolors = NCOLORS; st->dbuf = get_boolean_resource (st->dpy, "doubleBuffer", "Boolean"); # ifdef HAVE_JWXYZ /* Don't second-guess Quartz's double-buffering */ st->dbuf = False; # endif st->start_time = st->current_time; st->info = (struct info *)malloc(sizeof(struct info)); st->screen = DefaultScreen(st->dpy); XGetWindowAttributes (st->dpy, st->window, &st->xgwa); if (st->dbuf) { #ifdef HAVE_DOUBLE_BUFFER_EXTENSION if (get_boolean_resource(st->dpy,"useDBE","Boolean")) { st->dbeclear_p = get_boolean_resource (st->dpy, "useDBEClear", "Boolean"); if (st->dbeclear_p) st->b = xdbe_get_backbuffer (st->dpy, st->window, XdbeBackground); else st->b = xdbe_get_backbuffer (st->dpy, st->window, XdbeUndefined); st->backb = st->b; } #endif /* HAVE_DOUBLE_BUFFER_EXTENSION */ if (!st->b) { st->ba = XCreatePixmap (st->dpy, st->window, st->xgwa.width, st->xgwa.height,st->xgwa.depth); st->b = st->ba; } } else { st->b = st->window; } st->gcv.foreground = get_pixel_resource(st->dpy, st->xgwa.colormap, "foreground", "Foreground"); st->fgc = XCreateGC (st->dpy, st->b, GCForeground, &st->gcv); st->gcv.foreground = get_pixel_resource(st->dpy, st->xgwa.colormap, "background", "Background"); st->bgc = XCreateGC (st->dpy, st->b, GCForeground, &st->gcv); #ifdef HAVE_JWXYZ /* #### should turn off double-buffering instead */ jwxyz_XSetAntiAliasing (dpy, st->fgc, False); jwxyz_XSetAntiAliasing (dpy, st->bgc, False); #endif { Bool writable_p = False; make_uniform_colormap (st->xgwa.screen, st->xgwa.visual, st->xgwa.colormap, st->colors, &st->ncolors, True, &writable_p, True); } if (st->ba) XFillRectangle (st->dpy, st->ba, st->bgc, 0, 0, st->xgwa.width, st->xgwa.height); /* info is a structure holding all the random pieces of information I may want to pass to my baby functions -- much of it I may never use, but it is nice to have around just in case I want it to make a funky function funkier */ /* info->writable = get_boolean_resource (dpy, "cycle", "Boolean"); */ st->info->xspeed = get_float_resource(st->dpy, "xspeed" , "Float"); st->info->yspeed = get_float_resource(st->dpy, "yspeed" , "Float"); st->info->xamplitude = get_float_resource(st->dpy, "xamplitude", "Float"); st->info->yamplitude = get_float_resource(st->dpy, "yamplitude", "Float"); st->info->offset_period = get_float_resource(st->dpy, "offset_period", "Float"); st->info->whirlies = get_integer_resource(st->dpy, "whirlies", "Integer"); st->info->nlines = get_integer_resource(st->dpy, "nlines", "Integer"); st->info->half_width = st->xgwa.width / 2; st->info->half_height = st->xgwa.height / 2; st->info->speed = get_integer_resource(st->dpy, "speed" , "Integer"); st->info->trail = get_boolean_resource(st->dpy, "trail", "Integer"); st->info->color_modifier = get_integer_resource(st->dpy, "color_modifier", "Integer"); st->info->xoffset = get_float_resource(st->dpy, "xoffset", "Float"); st->info->yoffset = get_float_resource(st->dpy, "yoffset", "Float"); st->xmode_str = get_string_resource(st->dpy, "xmode", "Mode"); st->ymode_str = get_string_resource(st->dpy, "ymode", "Mode"); st->wrap = get_boolean_resource(st->dpy, "wrap", "Boolean"); st->modifier = 3000.0 + frand(1500.0); if (! st->xmode_str) st->xmode = spin_mode; else if (! strcmp (st->xmode_str, "spin")) st->xmode = spin_mode; else if (! strcmp (st->xmode_str, "funky")) st->xmode = funky_mode; else if (! strcmp (st->xmode_str, "circle")) st->xmode = circle_mode; else if (! strcmp (st->xmode_str, "linear")) st->xmode = linear_mode; else if (! strcmp (st->xmode_str, "test")) st->xmode = test_mode; else if (! strcmp (st->xmode_str, "fun")) st->xmode = fun_mode; else if (! strcmp (st->xmode_str, "innie")) st->xmode = innie_mode; else if (! strcmp (st->xmode_str, "lissajous")) st->xmode = lissajous_mode; else { st->xmode = random() % (int) lissajous_mode; } if (! st->ymode_str) st->ymode = spin_mode; else if (! strcmp (st->ymode_str, "spin")) st->ymode = spin_mode; else if (! strcmp (st->ymode_str, "funky")) st->ymode = funky_mode; else if (! strcmp (st->ymode_str, "circle")) st->ymode = circle_mode; else if (! strcmp (st->ymode_str, "linear")) st->ymode = linear_mode; else if (! strcmp (st->ymode_str, "test")) st->ymode = test_mode; else if (! strcmp (st->ymode_str, "fun")) st->ymode = fun_mode; else if (! strcmp (st->ymode_str, "innie")) st->ymode = innie_mode; else if (! strcmp (st->ymode_str, "lissajous")) st->ymode = lissajous_mode; else { st->ymode = random() % (int) lissajous_mode; } if (get_integer_resource(st->dpy, "start_time", "Integer") == -1) st->current_time = (unsigned long int)(random()); else st->current_time = get_integer_resource(st->dpy, "start_time", "Integer"); if (st->info->whirlies == -1) st->info->whirlies = 1 + (random() % 15); if (st->info->nlines == -1) st->info->nlines = 1 + (random() % 5); if (st->info->color_modifier == -1) st->info->color_modifier = 1 + (random() % 25); if (get_boolean_resource(st->dpy, "explain", "Integer")) st->explaining = 1; st->current_color = 1 + (random() % NCOLORS); return st; } static unsigned long whirlygig_draw (Display *dpy, Window window, void *closure) { struct state *st = (struct state *) closure; int wcount; /* wcount is a counter incremented for every whirly take note of internal_time before you mess with it */ int change_time = 4000; if (st->explaining == 1) { XClearWindow (st->dpy, st->window); draw_explain_string(st, st->xmode, st->info->half_height-100, st->dpy, st->window, st->fgc); st->explaining++; return 3000000; } else if (st->explaining == 2) { XClearWindow (st->dpy, st->window); st->explaining = 0; } if (! strcmp (st->xmode_str, "change") && ! strcmp (st->ymode_str, "change")) { if ((st->current_time - st->start_time) > change_time) { st->start_time = st->current_time; st->xmode = 1 + (random() % 4); st->ymode = 1 + (random() % 4); } } else if (! strcmp (st->xmode_str, "change")) { if ((st->current_time - st->start_time) > change_time) { st->start_time = st->current_time; st->xmode = 1 + (random() % 4); } } else if (! strcmp (st->ymode_str, "change")) { if ((st->current_time - st->start_time) > change_time) { st->start_time = st->current_time; st->ymode = 1 + (random() % 3); printf("Changing ymode to %d\n", st->ymode); } } if (++st->current_color >= NCOLORS) st->current_color = 0; for (wcount = 0; wcount < st->info->whirlies; wcount++) { int lcount; /* lcount is a counter for every line -- take note of the offsets changing */ int internal_time = 0; int color_offset = (st->current_color + (st->info->color_modifier * wcount)) % NCOLORS; if (st->current_time != 0) /* I want the distance between whirlies to increase more each whirly */ internal_time = st->current_time + (10 * wcount) + (wcount * wcount); switch (st->xmode) { /* All these functions expect an int time, the struct info, a pointer to an array of positions, and the index that the the function will fill of the array */ case spin_mode: spin(st, internal_time, st->info, st->pos, 0); break; case funky_mode: funky(st, internal_time, st->info, st->pos, 0); break; case circle_mode: circle(st, internal_time, st->info, st->pos, 0); break; case linear_mode: linear(st, internal_time, st->info, st->pos, 0); break; case fun_mode: fun(st, internal_time, st->info, st->pos, 0); break; case test_mode: test(st, internal_time, st->info, st->pos, 0); break; case innie_mode: innie(st, internal_time, st->info, st->pos, 0, st->modifier); break; case lissajous_mode: lissajous(st, internal_time, st->info, st->pos, 0); break; default: spin(st, internal_time, st->info, st->pos, 0); break; } /* End of the switch for the x position*/ switch (st->ymode) { case spin_mode: spin(st, internal_time, st->info, st->pos, 1); break; case funky_mode: funky(st, internal_time, st->info, st->pos, 1); break; case circle_mode: circle(st, internal_time, st->info, st->pos, 1); break; case linear_mode: linear(st, internal_time, st->info, st->pos, 1); break; case fun_mode: fun(st, internal_time, st->info, st->pos, 1); break; case test_mode: test(st, internal_time, st->info, st->pos, 1); break; case innie_mode: innie(st, internal_time, st->info, st->pos, 1, st->modifier); break; case lissajous_mode: lissajous(st, internal_time, st->info, st->pos, 1); break; default: spin(st, internal_time, st->info, st->pos, 1); break; } /* End of the switch for the y position*/ for (lcount = 0; lcount < st->info->nlines; lcount++) { double arg = (double)((internal_time * st->info->offset_period) / 90.0); double line_offset = 20.0 * (double)lcount * sin(arg); int size; size = (int)(15.0 + 5.0 * sin((double)internal_time / 180.0)); /* First delete the old circle... */ if (!st->info->trail #ifdef HAVE_DOUBLE_BUFFER_EXTENSION && ( !st->dbeclear_p || !st->backb) #endif /* HAVE_DOUBLE_BUFFER_EXTENSION */ ) { XSetForeground(st->dpy, st->bgc, BlackPixel(st->dpy, st->screen)); XFillArc(st->dpy, st->b, st->bgc, st->last_x[wcount][lcount], st->last_y[wcount][lcount], st->last_size[wcount][lcount], st->last_size[wcount][lcount], START_ARC, END_ARC); } /* Now, lets draw in the new circle */ { /* Starting new scope for local x_pos and y_pos */ int xpos, ypos; if (st->wrap) { xpos = preen((int)(st->info->xoffset*line_offset)+st->pos[0], st->info->half_width * 2); ypos = preen((int)(st->info->yoffset*line_offset)+st->pos[1], st->info->half_height * 2); } else { xpos = (int)(st->info->xoffset*line_offset)+st->pos[0]; ypos = (int)(st->info->yoffset*line_offset)+st->pos[1]; } if (st->start_time == st->current_time) { /* smoothen should move from one mode to another prettily... */ /* Note: smoothen has not been modified to take the double buffering code into account, and needs to be hacked on before uncommenting. */ /* smoothen(xpos, last_x[wcount][lcount], ypos, last_y[wcount][lcount], size, color_offset, colors, dpy, window, bgc, screen, info); */ } st->last_x[wcount][lcount] = xpos; st->last_y[wcount][lcount] = ypos; st->last_size[wcount][lcount] = size; XSetForeground(st->dpy, st->bgc, st->colors[color_offset].pixel); XFillArc(st->dpy, st->b, st->bgc, xpos, ypos, size, size, START_ARC, END_ARC); } /* End of my temporary scope for xpos and ypos */ } /* End of the for each line in nlines */ } /* End of the for each whirly in whirlies */ #ifdef HAVE_DOUBLE_BUFFER_EXTENSION if (st->backb) { XdbeSwapInfo info[1]; info[0].swap_window = st->window; info[0].swap_action = (st->dbeclear_p ? XdbeBackground : XdbeUndefined); XdbeSwapBuffers (st->dpy, info, 1); } else #endif /* HAVE_DOUBLE_BUFFER_EXTENSION */ if (st->dbuf) { XCopyArea (st->dpy, st->b, st->window, st->bgc, 0, 0, st->xgwa.width, st->xgwa.height, 0, 0); } if (st->current_time == FULL_CYCLE) st->current_time = 1; else st->current_time = st->current_time + st->info->speed; return 10000; } static void whirlygig_reshape (Display *dpy, Window window, void *closure, unsigned int w, unsigned int h) { } static Bool whirlygig_event (Display *dpy, Window window, void *closure, XEvent *event) { return False; } static void whirlygig_free (Display *dpy, Window window, void *closure) { } static const char *whirlygig_defaults [] = { ".background: black", ".foreground: white", "*fpsSolid: true", "*xspeed: 1.0", "*yspeed: 1.0", "*xamplitude: 1.0", "*yamplitude: 1.0", "*whirlies: -1", "*nlines: -1", "*xmode: change", "*ymode: change", "*speed: 1", "*trail: false", "*color_modifier: -1", "*start_time: -1", "*explain: False", "*xoffset: 1.0", "*yoffset: 1.0", "*offset_period: 1", "*wrap: False", "*doubleBuffer: True", #ifdef HAVE_DOUBLE_BUFFER_EXTENSION "*useDBEClear: True", "*useDBE: True", #endif /* HAVE_DOUBLE_BUFFER_EXTENSION */ 0 }; static XrmOptionDescRec whirlygig_options [] = { { "-xspeed", ".xspeed", XrmoptionSepArg, 0 }, /* xspeed is a modifier of the argument to cos -- changing it thus changes the frequency of cos */ { "-yspeed", ".yspeed", XrmoptionSepArg, 0 }, /* Similiarly, yspeed changes the frequency of sin */ { "-xamplitude", ".xamplitude", XrmoptionSepArg, 0 }, /* A factor by which to increase/decrease the amplitude of the sin */ { "-yamplitude", ".yamplitude", XrmoptionSepArg, 0 }, /* A factor by which to increase/decrease the amplitude of the cos */ { "-whirlies", ".whirlies",XrmoptionSepArg, 0 }, /* whirlies defines the number of circles to draw per line */ { "-nlines", ".nlines",XrmoptionSepArg, 0 }, /* nlines is the number of lines of whirlies to draw */ { "-xmode", ".xmode", XrmoptionSepArg, 0 }, /* There are a few different modes that I have written -- each mode is in theory a different experiment with the possible modifiers to sin/cos */ { "-ymode", ".ymode", XrmoptionSepArg, 0 }, { "-speed", ".speed", XrmoptionSepArg, 0 }, /* This will modify how often it should draw, changing it will probably suck */ { "-trail", ".trail", XrmoptionNoArg, "True" }, /* Control whether or not you want the old circles to be erased */ { "-color_modifier", ".color_modifier", XrmoptionSepArg, 0 }, /* How many colors away from the current should the next whirly be? */ { "-start_time", ".start_time", XrmoptionSepArg, 0 }, /* Specify exactly at what time to start graphing... */ { "-xoffset", ".xoffset", XrmoptionSepArg, 0 }, /* Tell the whirlies to be offset by this factor of a sin */ { "-yoffset", ".yoffset", XrmoptionSepArg, 0 }, /* Tell the whirlies to be offset by this factor of a cos */ { "-offset_period", ".offset_period", XrmoptionSepArg, 0 }, /* Change the period of an offset cycle */ { "-explain", ".explain", XrmoptionNoArg, "True" }, /* Specify whether or not to print an explanation of the function used. */ { "-wrap", ".wrap", XrmoptionNoArg, "True" }, { "-no-wrap", ".wrap", XrmoptionNoArg, "False" }, /* Specify if you want whirlies which are out of the boundary of the screen to be wrapped around to the other side */ { "-db", ".doubleBuffer", XrmoptionNoArg, "True" }, { "-no-db", ".doubleBuffer", XrmoptionNoArg, "False" }, { 0, 0, 0, 0 } }; XSCREENSAVER_MODULE ("Whirlygig", whirlygig) xscreensaver-5.36/hacks/speedmine.c000644 000767 000024 00000127127 12720227375 017365 0ustar00jwzstaff000000 000000 /* -*- Mode: C; c-basic-offset: 4; tab-width: 4 -*- * speedmine, Copyright (C) 2001 Conrad Parker * * 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. */ /* * Written mostly over the Easter holiday, 2001. Psychedelic option due to * a night at Home nightclub, Sydney. Three all-nighters of solid partying * were involved in the week this hack was written. * * Happy Birthday to WierdArms (17 April) and Pat (18 April) */ /* * Hacking notes * * This program generates a rectangular terrain grid and maps this onto * a semi-circular tunnel. The terrain has length TERRAIN_LENGTH, which * corresponds to length along the tunnel, and breadth TERRAIN_BREADTH, * which corresponds to circumference around the tunnel. For each frame, * the tunnel is perspective mapped onto a set of X and Y screen values. * * Throughout this code the following temporary variable names are used: * * i iterates along the tunnel in the direction of travel * j iterates around the tunnel clockwise * t iterates along the length of the perspective mapped values * from the furthest to the nearest * * Thus, the buffers are used with these iterators: * * terrain[i][j] terrain map * worldx[i][j], worldy[i][j] world coordinates (after wrapping) * {x,y,z}curvature[i] tunnel curvature * wideness[i] tunnel wideness * bonuses[i] bonus values * * xvals[t][j], yvals[t][j] screen coordinates * {min,max}{x,y}[t] bounding boxes of screen coords */ /* Define or undefine NDEBUG to turn assert and abort debugging off or on */ /*#define NDEBUG*/ /*#include */ #define assert(X) #define DEBUG_FLAG 0 #include #include "screenhack.h" #include "erase.h" #define MIN(a,b) ((a)<(b)?(a):(b)) #define MAX(a,b) ((a)>(b)?(a):(b)) #define RAND(r) (int)(((r)>0)?(random() % (long)(r)): -(random() % (long)(-r))) #define SIGN3(a) ((a)>0?1:((a)<0?-1:0)) #define MODULO(a,b) while ((a)<0) (a)+=(b); (a) %= (b); /* No. of shades of each color (ground, walls, bonuses) */ #define MAX_COLORS 32 #define FORWARDS 1 #define BACKWARDS -1 /* Apparently AIX's math.h bogusly defines `nearest' as a function, in violation of the ANSI C spec. */ #undef nearest #define nearest n3arest #define wireframe (st->wire_flag||st->wire_bonus>8||st->wire_bonus%2==1) #define effective_speed (st->direction*(st->speed+st->speed_bonus)) /* No. of levels of interpolation, for perspective */ #define INTERP 32 /* These must be powers of 2 */ #define TERRAIN_LENGTH 256 #define TERRAIN_BREADTH 32 /* total "perspective distance" of terrain */ #define TERRAIN_PDIST (INTERP*TERRAIN_LENGTH) #define ROTS 1024 #define TB_MUL (ROTS/TERRAIN_BREADTH) #define random_elevation() (st->terrain_flag?(random() % 200):0) #define random_curvature() (st->curviness>0.0?((double)(random() % 40)-20)*st->curviness:0.0) #define random_twist() (st->twistiness>0.0?((double)(random() % 40)-20)*st->twistiness:0.0) #define random_wideness() (st->widening_flag?(int)(random() % 1200):0) #define STEEL_ELEVATION 300 struct state { Display *dpy; Window window; Pixmap dbuf, stars_mask; Colormap cmap; Visual *visual; Screen *screen; unsigned int default_fg_pixel; GC draw_gc, erase_gc, tunnelend_gc, stars_gc, stars_erase_gc; int ncolors, nr_ground_colors, nr_wall_colors, nr_bonus_colors; XColor ground_colors[MAX_COLORS], wall_colors[MAX_COLORS]; XColor bonus_colors[MAX_COLORS]; GC ground_gcs[MAX_COLORS], wall_gcs[MAX_COLORS], bonus_gcs[MAX_COLORS]; int be_wormy; int width, height; int delay; int smoothness; int verbose_flag; int wire_flag; int terrain_flag; int widening_flag; int bumps_flag; int bonuses_flag; int crosshair_flag; int psychedelic_flag; double maxspeed; double thrust, gravity; double vertigo; double curviness; double twistiness; double pos; double speed; double accel; double step; int direction; int pindex, nearest; int flipped_at; int xoffset, yoffset; int bonus_bright; int wire_bonus; double speed_bonus; int spin_bonus; int backwards_bonus; double sintab[ROTS], costab[ROTS]; int orientation; int terrain[TERRAIN_LENGTH][TERRAIN_BREADTH]; double xcurvature[TERRAIN_LENGTH]; double ycurvature[TERRAIN_LENGTH]; double zcurvature[TERRAIN_LENGTH]; int wideness[TERRAIN_LENGTH]; int bonuses[TERRAIN_LENGTH]; int xvals[TERRAIN_LENGTH][TERRAIN_BREADTH]; int yvals[TERRAIN_LENGTH][TERRAIN_BREADTH]; double worldx[TERRAIN_LENGTH][TERRAIN_BREADTH]; double worldy[TERRAIN_LENGTH][TERRAIN_BREADTH]; int minx[TERRAIN_LENGTH], maxx[TERRAIN_LENGTH]; int miny[TERRAIN_LENGTH], maxy[TERRAIN_LENGTH]; int total_nframes; int nframes; double fps; double fps_start, fps_end; struct timeval start_time; int rotation_offset; int jamming; }; /* a forward declaration ... */ static void change_colors(struct state *st); /* * get_time () * * returns the total time elapsed since the beginning of the demo */ static double get_time(struct state *st) { struct timeval t; float f; #if GETTIMEOFDAY_TWO_ARGS gettimeofday(&t, NULL); #else gettimeofday(&t); #endif t.tv_sec -= st->start_time.tv_sec; f = ((double)t.tv_sec) + t.tv_usec*1e-6; return f; } /* * init_time () * * initialises the timing structures */ static void init_time(struct state *st) { #if GETTIMEOFDAY_TWO_ARGS gettimeofday(&st->start_time, NULL); #else gettimeofday(&st->start_time); #endif st->fps_start = get_time(st); } /* * perspective() * * perspective map the world coordinates worldx[i][j], worldy[i][j] onto * screen coordinates xvals[t][j], yvals[t][j] */ static void perspective (struct state *st) { int i, j, jj, t=0, depth, view_pos; int rotation_bias, r; double xc=0.0, yc=0.0, zc=0.0; double xcc=0.0, ycc=0.0, zcc=0.0; double xx, yy; double zfactor, zf; zf = 8.0*28.0 / (double)(st->width*TERRAIN_LENGTH); if (st->be_wormy) zf *= 3.0; depth = TERRAIN_PDIST - INTERP + st->pindex; view_pos = (st->nearest+3*TERRAIN_LENGTH/4)%TERRAIN_LENGTH; st->xoffset += - st->xcurvature[view_pos]*st->curviness/8; st->xoffset /= 2; st->yoffset += - st->ycurvature[view_pos]*st->curviness/4; st->yoffset /= 2; st->rotation_offset += (int)((st->zcurvature[view_pos]-st->zcurvature[st->nearest])*ROTS/8); st->rotation_offset /= 2; rotation_bias = st->orientation + st->spin_bonus - st->rotation_offset; if (st->bumps_flag) { if (st->be_wormy) { st->yoffset -= ((st->terrain[view_pos][TERRAIN_BREADTH/4] * st->width /(8*1600))); rotation_bias += (st->terrain[view_pos][TERRAIN_BREADTH/4+2] - st->terrain[view_pos][TERRAIN_BREADTH/4-2])/8; } else { st->yoffset -= ((st->terrain[view_pos][TERRAIN_BREADTH/4] * st->width /(2*1600))); rotation_bias += (st->terrain[view_pos][TERRAIN_BREADTH/4+2] - st->terrain[view_pos][TERRAIN_BREADTH/4-2])/16; } } MODULO(rotation_bias, ROTS); for (t=0; t < TERRAIN_LENGTH; t++) { i = st->nearest + t; MODULO(i, TERRAIN_LENGTH); xc += st->xcurvature[i]; yc += st->ycurvature[i]; zc += st->zcurvature[i]; xcc += xc; ycc += yc; zcc += zc; st->maxx[i] = st->maxy[i] = 0; st->minx[i] = st->width; st->miny[i] = st->height; } for (t=0; t < TERRAIN_LENGTH; t++) { i = st->nearest - 1 - t; MODULO(i, TERRAIN_LENGTH); zfactor = (double)depth* (12.0 - TERRAIN_LENGTH/8.0) * zf; for (j=0; j < TERRAIN_BREADTH; j++) { jj = st->direction * j; MODULO(jj, TERRAIN_BREADTH); /* jwz: not totally sure if this is right, but it avoids div0 */ if (zfactor != 0) { xx = (st->worldx[i][jj]-(st->vertigo*xcc))/zfactor; yy = (st->worldy[i][j]-(st->vertigo*ycc))/zfactor; } else { xx = 0; yy = 0; } r = rotation_bias + (int)(st->vertigo*zcc); MODULO(r, ROTS); st->xvals[t][j] = st->xoffset + (st->width>>1) + (int)(xx * st->costab[r] - yy * st->sintab[r]); st->maxx[t] = MAX(st->maxx[t], st->xvals[t][j]); st->minx[t] = MIN(st->minx[t], st->xvals[t][j]); st->yvals[t][j] = st->yoffset + st->height/2 + (int)(xx * st->sintab[r] + yy * st->costab[r]); st->maxy[t] = MAX(st->maxy[t], st->yvals[t][j]); st->miny[t] = MIN(st->miny[t], st->yvals[t][j]); } xcc -= xc; ycc -= yc; zcc -= zc; xc -= st->xcurvature[i]; yc -= st->ycurvature[i]; zc -= st->zcurvature[i]; depth -= INTERP; } } /* * wrap_tunnel (start, end) * * wrap the terrain terrain[i][j] around the semi-circular tunnel function * * x' = x/2 * cos(theta) - (y-k) * x * sin(theta) * y' = x/4 * sin(theta) + y * cos(theta) * * between i=start and i=end inclusive, producing world coordinates * worldx[i][j], worldy[i][j] */ static void wrap_tunnel (struct state *st, int start, int end) { int i, j, v; double x, y; assert (start < end); for (i=start; i <= end; i++) { for (j=0; j < TERRAIN_BREADTH; j++) { x = j * (1.0/TERRAIN_BREADTH); v = st->terrain[i][j]; y = (double)(v==STEEL_ELEVATION?200:v) - st->wideness[i] - 1200; /* lower road */ if (j > TERRAIN_BREADTH/8 && j < 3*TERRAIN_BREADTH/8) y -= 300; st->worldx[i][j] = x/2 * st->costab[j*TB_MUL] - (y-st->height/4.0)*x*st->sintab[j*TB_MUL]; st->worldy[i][j] = x/4 * st->sintab[j*TB_MUL] + y * st->costab[j*TB_MUL]; } } } /* * flip_direction() * * perform the state transitions and terrain transformation for the * "look backwards/look forwards" bonus */ static void flip_direction (struct state *st) { int i, ip, in, j, t; st->direction = -st->direction; st->bonus_bright = 20; for (i=0; i < TERRAIN_LENGTH; i++) { in = st->nearest + i; MODULO(in, TERRAIN_BREADTH); ip = st->nearest - i; MODULO(ip, TERRAIN_BREADTH); for (j=0; j < TERRAIN_BREADTH; j++) { t = st->terrain[ip][j]; st->terrain[ip][j] = st->terrain[in][j]; st->terrain[in][j] = t; } } } /* * generate_smooth (start, end) * * generate smooth terrain between i=start and i=end inclusive */ static void generate_smooth (struct state *st, int start, int end) { int i,j, ii; assert (start < end); for (i=start; i <= end; i++) { ii = i; MODULO(ii, TERRAIN_LENGTH); for (j=0; j < TERRAIN_BREADTH; j++) { st->terrain[i][j] = STEEL_ELEVATION; } } } /* * generate_straight (start, end) * * zero the curvature and wideness between i=start and i=end inclusive */ static void generate_straight (struct state *st, int start, int end) { int i,j, ii; assert (start < end); for (i=start; i <= end; i++) { ii = i; MODULO(ii, TERRAIN_LENGTH); for (j=0; j < TERRAIN_BREADTH; j++) { st->xcurvature[ii] = 0; st->ycurvature[ii] = 0; st->zcurvature[ii] = 0; st->wideness[ii] = 0; } } } /* * int generate_terrain_value (v1, v2, v3, v4, w) * * generate terrain value near the average of v1, v2, v3, v4, with * perturbation proportional to w */ static int generate_terrain_value (struct state *st, int v1, int v2, int v3, int v4, int w) { int sum, ret; int rval; if (!st->terrain_flag) return 0; sum = v1 + v2 + v3 + v4; rval = w*sum/st->smoothness; if (rval == 0) rval = 2; ret = (sum/4 -(rval/2) + RAND(rval)); if (ret < -400 || ret > 400) { ret = sum/4; } return ret; } /* * generate_terrain (start, end, final) * * generate terrain[i][j] between i=start and i=end inclusive * * This is performed by successive subdivision of the terrain into * rectangles of decreasing size. Subdivision continues until the * the minimum width or height of these rectangles is 'final'; ie. * final=1 indicates to subdivide as far as possible, final=2 indicates * to stop one subdivision before that (leaving a checkerboard pattern * uncalculated) etc. */ static void generate_terrain (struct state *st, int start, int end, int final) { int i,j,w,l; int ip, jp, in, jn; /* prev, next values */ int diff; assert (start < end); assert (start >= 0 && start < TERRAIN_LENGTH); assert (end >= 0 && end < TERRAIN_LENGTH); diff = end - start + 1; st->terrain[end][0] = random_elevation(); st->terrain[end][TERRAIN_BREADTH/2] = random_elevation(); for (w= diff/2, l=TERRAIN_BREADTH/4; w >= final || l >= final; w /= 2, l /= 2) { if (w<1) w=1; if (l<1) l=1; for (i=start+w-1; i < end; i += (w*2)) { ip = i-w; MODULO(ip, TERRAIN_LENGTH); in = i+w; MODULO(in, TERRAIN_LENGTH); for (j=l-1; j < TERRAIN_BREADTH; j += (l*2)) { jp = j-1; MODULO(jp, TERRAIN_BREADTH); jn = j+1; MODULO(jn, TERRAIN_BREADTH); st->terrain[i][j] = generate_terrain_value (st, st->terrain[ip][jp], st->terrain[in][jp], st->terrain[ip][jn], st->terrain[in][jn], w); } } for (i=start+(w*2)-1; i < end; i += (w*2)) { ip = i-w; MODULO(ip, TERRAIN_LENGTH); in = i+w; MODULO(in, TERRAIN_LENGTH); for (j=l-1; j < TERRAIN_BREADTH; j += (l*2)) { jp = j-1; MODULO(jp, TERRAIN_BREADTH); jn = j+1; MODULO(jn, TERRAIN_BREADTH); st->terrain[i][j] = generate_terrain_value (st, st->terrain[ip][j], st->terrain[in][j], st->terrain[i][jp], st->terrain[i][jn], w); } } for (i=start+w-1; i < end; i += (w*2)) { ip = i-w; MODULO(ip, TERRAIN_LENGTH); in = i+w; MODULO(in, TERRAIN_LENGTH); for (j=2*l-1; j < TERRAIN_BREADTH; j += (l*2)) { jp = j-1; MODULO(jp, TERRAIN_BREADTH); jn = j+1; MODULO(jn, TERRAIN_BREADTH); st->terrain[i][j] = generate_terrain_value (st, st->terrain[ip][j], st->terrain[in][j], st->terrain[i][jp], st->terrain[i][jn], w); } } } } /* * double generate_curvature_value (v1, v2, w) * * generate curvature value near the average of v1 and v2, with perturbation * proportional to w */ static double generate_curvature_value (double v1, double v2, int w) { double sum, avg, diff, ret; int rval; assert (!isnan(v1) && !isnan(v2)); sum = v1+v2; avg = sum/2.0; diff = MIN(v1 - avg, v2 - avg); rval = (int)diff * w; if (rval == 0.0) return avg; ret = (avg -((double)rval)/500.0 + ((double)RAND(rval))/1000.0); assert (!isnan(ret)); return ret; } /* * generate_curves (start, end) * * generate xcurvature[i], ycurvature[i], zcurvature[i] and wideness[i] * between start and end inclusive */ static void generate_curves (struct state *st, int start, int end) { int i, diff, ii, in, ip, w; assert (start < end); diff = end - start + 1; MODULO (diff, TERRAIN_LENGTH); if (random() % 100 == 0) st->xcurvature[end] = 30 * random_curvature(); else if (random() % 10 == 0) st->xcurvature[end] = 20 * random_curvature(); else st->xcurvature[end] = 10 * random_curvature(); if (random() % 50 == 0) st->ycurvature[end] = 20 * random_curvature(); else if (random() % 25 == 0) st->ycurvature[end] = 30 * random_curvature(); else st->ycurvature[end] = 10 * random_curvature(); if (random() % 3 == 0) st->zcurvature[end] = random_twist(); else st->zcurvature[end] = generate_curvature_value (st->zcurvature[end], random_twist(), 1); if (st->be_wormy) st->wideness[end] = random_wideness(); else st->wideness[end] = generate_curvature_value (st->wideness[end], random_wideness(), 1); for (w=diff/2; w >= 1; w /= 2) { for (i=start+w-1; i < end; i+=(w*2)) { ii = i; MODULO (ii, TERRAIN_LENGTH); ip = i-w; MODULO (ip, TERRAIN_LENGTH); in = i+w; MODULO (in, TERRAIN_LENGTH); st->xcurvature[ii] = generate_curvature_value (st->xcurvature[ip], st->xcurvature[in], w); st->ycurvature[ii] = generate_curvature_value (st->ycurvature[ip], st->ycurvature[in], w); st->zcurvature[ii] = generate_curvature_value (st->zcurvature[ip], st->zcurvature[in], w); st->wideness[ii] = generate_curvature_value (st->wideness[ip], st->wideness[in], w); } } } /* * do_bonus () * * choose a random bonus and perform its state transition */ static void do_bonus (struct state *st) { st->bonus_bright = 20; if (st->jamming > 0) { st->jamming--; st->nearest -= 2; MODULO(st->nearest, TERRAIN_LENGTH); return; } if (st->psychedelic_flag) change_colors(st); switch (random() % 7) { case 0: /* switch to or from wireframe */ st->wire_bonus = (st->wire_bonus?0:300); break; case 1: /* speedup */ st->speed_bonus = 40.0; break; case 2: st->spin_bonus += ROTS; break; case 3: st->spin_bonus -= ROTS; break; case 4: /* look backwards / look forwards */ st->flipped_at = st->nearest; flip_direction (st); st->backwards_bonus = (st->backwards_bonus?0:10); break; case 5: change_colors(st); break; case 6: /* jam against the bonus a few times; deja vu! */ st->nearest -= 2; MODULO(st->nearest, TERRAIN_LENGTH); st->jamming = 3; break; default: assert(0); break; } } /* * check_bonus () * * check if a bonus has been passed in the last frame, and handle it */ static void check_bonuses (struct state *st) { int i, ii, start, end; if (!st->bonuses_flag) return; if (st->step >= 0.0) { start = st->nearest; end = st->nearest + (int)floor(st->step); } else { end = st->nearest; start = st->nearest + (int)floor(st->step); } if (st->be_wormy) { start += TERRAIN_LENGTH/4; end += TERRAIN_LENGTH/4; } for (i=start; i < end; i++) { ii = i; MODULO(ii, TERRAIN_LENGTH); if (st->bonuses[ii] == 1) do_bonus (st); } } /* * decrement_bonuses (double time_per_frame) * * decrement timers associated with bonuses */ static void decrement_bonuses (struct state *st, double time_per_frame) { if (!st->bonuses_flag) return; if (st->bonus_bright > 0) st->bonus_bright-=4; if (st->wire_bonus > 0) st->wire_bonus--; if (st->speed_bonus > 0) st->speed_bonus -= 2.0; if (st->spin_bonus > 10) st->spin_bonus -= (int)(st->step*13.7); else if (st->spin_bonus < -10) st->spin_bonus += (int)(st->step*11.3); if (st->backwards_bonus > 1) st->backwards_bonus--; else if (st->backwards_bonus == 1) { st->nearest += 2*(MAX(st->flipped_at, st->nearest) - MIN(st->flipped_at,st->nearest)); MODULO(st->nearest, TERRAIN_LENGTH); flip_direction (st); st->backwards_bonus = 0; } } /* * set_bonuses (start, end) * * choose if to and where to set a bonus between i=start and i=end inclusive */ static void set_bonuses (struct state *st, int start, int end) { int i, diff, ii; if (!st->bonuses_flag) return; assert (start < end); diff = end - start; for (i=start; i <= end; i++) { ii = i; if (ii>=TERRAIN_LENGTH) ii -= TERRAIN_LENGTH; st->bonuses[ii] = 0; } if (random() % 4 == 0) { i = start + RAND(diff-3); ii = i; if (ii>=TERRAIN_LENGTH) ii -= TERRAIN_LENGTH; st->bonuses[ii] = 2; /* marker */ ii = i+3; if (ii>=TERRAIN_LENGTH) ii -= TERRAIN_LENGTH; st->bonuses[ii] = 1; /* real thing */ } } /* * regenerate_terrain () * * regenerate a portion of the terrain map of length TERRAIN_LENGTH/4 iff * we just passed between two quarters of the terrain. * * choose the kind of terrain to produce, produce it and wrap the tunnel */ static void regenerate_terrain (struct state *st) { int start, end; int passed; passed = st->nearest % (TERRAIN_LENGTH/4); if (st->speed == 0.0 || (st->speed > 0.0 && passed > (int)st->step) || (st->speed < 0.0 && (TERRAIN_LENGTH/4)-passed > (int)fabs(st->step))) { return; } end = st->nearest - passed - 1; MODULO(end, TERRAIN_LENGTH); start = end - TERRAIN_LENGTH/4 + 1; MODULO(start, TERRAIN_LENGTH); if (DEBUG_FLAG) printf ("Regenerating [%d - %d]\n", start, end); set_bonuses (st, start, end); switch (random() % 64) { case 0: case 1: generate_terrain (st, start, end, 1); generate_smooth (st, start, start + TERRAIN_LENGTH/8 + (random() % TERRAIN_LENGTH/8)); break; case 2: generate_smooth (st, start, end); generate_terrain (st, start, end, 4); break; case 3: generate_smooth (st, start, end); generate_terrain (st, start, end, 2); break; default: generate_terrain (st, start, end, 1); } if (random() % 16 == 0) { generate_straight (st, start, end); } else { generate_curves (st, start, end); } wrap_tunnel (st, start, end); } /* * init_terrain () * * initialise the terrain map for the beginning of the demo */ static void init_terrain (struct state *st) { int i, j; for (i=0; i < TERRAIN_LENGTH; i++) { for (j=0; j < TERRAIN_BREADTH; j++) { st->terrain[i][j] = 0; } } st->terrain[TERRAIN_LENGTH-1][0] = - (random() % 300); st->terrain[TERRAIN_LENGTH-1][TERRAIN_BREADTH/2] = - (random() % 300); generate_smooth (st, 0, TERRAIN_LENGTH-1); generate_terrain (st, 0, TERRAIN_LENGTH/4 -1, 4); generate_terrain (st, TERRAIN_LENGTH/4, TERRAIN_LENGTH/2 -1, 2); generate_terrain (st, TERRAIN_LENGTH/2, 3*TERRAIN_LENGTH/4 -1, 1); generate_smooth (st, 3*TERRAIN_LENGTH/4, TERRAIN_LENGTH-1); } /* * init_curves () * * initialise the curvatures and wideness for the beginning of the demo. */ static void init_curves (struct state *st) { int i; for (i=0; i < TERRAIN_LENGTH-1; i++) { st->xcurvature[i] = 0.0; st->ycurvature[i] = 0.0; st->zcurvature[i] = 0.0; } st->xcurvature[TERRAIN_LENGTH-1] = random_curvature(); st->ycurvature[TERRAIN_LENGTH-1] = random_curvature(); st->zcurvature[TERRAIN_LENGTH-1] = random_twist(); generate_straight (st, 0, TERRAIN_LENGTH/4-1); generate_curves (st, TERRAIN_LENGTH/4, TERRAIN_LENGTH/2-1); generate_curves (st, TERRAIN_LENGTH/2, 3*TERRAIN_LENGTH/4-1); generate_straight (st, 3*TERRAIN_LENGTH/4, TERRAIN_LENGTH-1); } /* * render_quads (dpy, d, t, dt, i) * * renders the quadrilaterals from perspective depth t to t+dt. * i is passed as a hint, where i corresponds to t as asserted. */ static void render_quads (struct state *st, Drawable d, int t, int dt, int i) { int j, t2, j2, in; int index; XPoint points[4]; GC gc; assert (i == (st->nearest - (t + dt) + TERRAIN_LENGTH) % TERRAIN_LENGTH); in = i + 1; MODULO(in, TERRAIN_LENGTH); for (j=0; j < TERRAIN_BREADTH; j+=dt) { t2 = t+dt; if (t2 >= TERRAIN_LENGTH) t2 -= TERRAIN_LENGTH; j2 = j+dt; if (j2 >= TERRAIN_BREADTH) j2 -= TERRAIN_BREADTH; points[0].x = st->xvals[t][j]; points[0].y = st->yvals[t][j]; points[1].x = st->xvals[t2][j]; points[1].y = st->yvals[t2][j]; points[2].x = st->xvals[t2][j2]; points[2].y = st->yvals[t2][j2]; points[3].x = st->xvals[t][j2]; points[3].y = st->yvals[t][j2]; index = st->bonus_bright + st->ncolors/3 + t*(t*INTERP + st->pindex) * st->ncolors / (3*TERRAIN_LENGTH*TERRAIN_PDIST); if (!wireframe) { index += (int)((points[0].y - points[3].y) / 8); index += (int)((st->worldx[i][j] - st->worldx[in][j]) / 40); index += (int)((st->terrain[in][j] - st->terrain[i][j]) / 100); } if (st->be_wormy && st->psychedelic_flag) index += st->ncolors/4; if (st->ncolors > MAX_COLORS) abort(); index = MIN (index, st->ncolors-1); index = MAX (index, 0); if (st->bonuses[i]) { XSetClipMask (st->dpy, st->bonus_gcs[index], None); } if (wireframe) { if (st->bonuses[i]) gc = st->bonus_gcs[index]; else gc = st->ground_gcs[index]; XDrawLines (st->dpy, d, gc, points, 4, CoordModeOrigin); } else { if (st->bonuses[i]) gc = st->bonus_gcs[index]; else if ((st->direction>0 && j < TERRAIN_BREADTH/8) || (j > TERRAIN_BREADTH/8 && j < 3*TERRAIN_BREADTH/8-1) || (st->direction < 0 && j > 3*TERRAIN_BREADTH/8-1 && j < TERRAIN_BREADTH/2) || st->terrain[i][j] == STEEL_ELEVATION || st->wideness[in] - st->wideness[i] > 200) gc = st->ground_gcs[index]; else gc = st->wall_gcs[index]; XFillPolygon (st->dpy, d, gc, points, 4, Nonconvex, CoordModeOrigin); } } } /* * render_pentagons (dpy, d, t, dt, i) * * renders the pentagons from perspective depth t to t+dt. * i is passed as a hint, where i corresponds to t as asserted. */ static void render_pentagons (struct state *st, Drawable d, int t, int dt, int i) { int j, t2, j2, j3, in; int index; XPoint points[5]; GC gc; assert (i == (st->nearest -t + TERRAIN_LENGTH) % TERRAIN_LENGTH); in = i + 1; MODULO(in, TERRAIN_LENGTH); for (j=0; j < TERRAIN_BREADTH; j+=dt*2) { t2 = t+(dt*2); if (t2 >= TERRAIN_LENGTH) t2 -= TERRAIN_LENGTH; j2 = j+dt; if (j2 >= TERRAIN_BREADTH) j2 -= TERRAIN_BREADTH; j3 = j+dt+dt; if (j3 >= TERRAIN_BREADTH) j3 -= TERRAIN_BREADTH; points[0].x = st->xvals[t][j]; points[0].y = st->yvals[t][j]; points[1].x = st->xvals[t2][j]; points[1].y = st->yvals[t2][j]; points[2].x = st->xvals[t2][j2]; points[2].y = st->yvals[t2][j2]; points[3].x = st->xvals[t2][j3]; points[3].y = st->yvals[t2][j3]; points[4].x = st->xvals[t][j3]; points[4].y = st->yvals[t][j3]; index = st->bonus_bright + st->ncolors/3 + t*(t*INTERP + st->pindex) * st->ncolors / (3*TERRAIN_LENGTH*TERRAIN_PDIST); if (!wireframe) { index += (int)((points[0].y - points[3].y) / 8); index += (int)((st->worldx[i][j] - st->worldx[in][j]) / 40); index += (int)((st->terrain[in][j] - st->terrain[i][j]) / 100); } if (st->be_wormy && st->psychedelic_flag) index += st->ncolors/4; index = MIN (index, st->ncolors-1); index = MAX (index, 0); if (st->bonuses[i]) { XSetClipMask (st->dpy, st->bonus_gcs[index], None); } if (wireframe) { if (st->bonuses[i]) gc = st->bonus_gcs[index]; else gc = st->ground_gcs[index]; XDrawLines (st->dpy, d, gc, points, 5, CoordModeOrigin); } else { if (st->bonuses[i]) gc = st->bonus_gcs[index]; else if (j < TERRAIN_BREADTH/8 || (j > TERRAIN_BREADTH/8 && j < 3*TERRAIN_BREADTH/8-1) || st->terrain[i][j] == STEEL_ELEVATION || st->wideness[in] - st->wideness[i] > 200) gc = st->ground_gcs[index]; else gc = st->wall_gcs[index]; XFillPolygon (st->dpy, d, gc, points, 5, Complex, CoordModeOrigin); } } } /* * render_block (dpy, d, gc, t) * * render a filled polygon at perspective depth t using the given GC */ static void render_block (struct state *st, Drawable d, GC gc, int t) { int i; XPoint erase_points[TERRAIN_BREADTH/2]; for (i=0; i < TERRAIN_BREADTH/2; i++) { erase_points[i].x = st->xvals[t][i*2]; erase_points[i].y = st->yvals[t][i*2]; } XFillPolygon (st->dpy, d, gc, erase_points, TERRAIN_BREADTH/2, Complex, CoordModeOrigin); } /* * regenerate_stars_mask (dpy, t) * * regenerate the clip mask 'stars_mask' for drawing the bonus stars at * random positions within the bounding box at depth t */ static void regenerate_stars_mask (struct state *st, int t) { int i, w, h, a, b, l1, l2; const int lim = st->width*TERRAIN_LENGTH/(300*(TERRAIN_LENGTH-t)); w = st->maxx[t] - st->minx[t]; h = st->maxy[t] - st->miny[t]; if (w<6||h<6) return; XFillRectangle (st->dpy, st->stars_mask, st->stars_erase_gc, 0, 0, st->width, st->height); l1 = (t>3*TERRAIN_LENGTH/4?2:1); l2 = (t>7*TERRAIN_LENGTH/8?2:1); for (i=0; i < lim; i++) { a = RAND(w); b = RAND(h); XDrawLine (st->dpy, st->stars_mask, st->stars_gc, st->minx[t]+a-l1, st->miny[t]+b, st->minx[t]+a+l1, st->miny[t]+b); XDrawLine (st->dpy, st->stars_mask, st->stars_gc, st->minx[t]+a, st->miny[t]+b-l1, st->minx[t]+a, st->miny[t]+b+l1); } for (i=0; i < lim; i++) { a = RAND(w); b = RAND(h); XDrawLine (st->dpy, st->stars_mask, st->stars_gc, st->minx[t]+a-l2, st->miny[t]+b, st->minx[t]+a+l2, st->miny[t]+b); XDrawLine (st->dpy, st->stars_mask, st->stars_gc, st->minx[t]+a, st->miny[t]+b-l2, st->minx[t]+a, st->miny[t]+b+l2); } } /* * render_bonus_block (dpy, d, t, i) * * draw the bonus stars at depth t. * i is passed as a hint, where i corresponds to t as asserted. */ static void render_bonus_block (struct state *st, Drawable d, int t, int i) { int bt; assert (i == (st->nearest -t + TERRAIN_LENGTH) % TERRAIN_LENGTH); if (!st->bonuses[i] || wireframe) return; regenerate_stars_mask (st, t); bt = t * st->nr_bonus_colors / (2*TERRAIN_LENGTH); XSetClipMask (st->dpy, st->bonus_gcs[bt], st->stars_mask); render_block (st, d, st->bonus_gcs[bt], t); } static int begin_at (struct state *st) { int t; int max_minx=0, min_maxx=st->width, max_miny=0, min_maxy=st->height; for (t=TERRAIN_LENGTH-1; t > 0; t--) { max_minx = MAX (max_minx, st->minx[t]); min_maxx = MIN (min_maxx, st->maxx[t]); max_miny = MAX (max_miny, st->miny[t]); min_maxy = MIN (min_maxy, st->maxy[t]); if (max_miny >= min_maxy || max_minx >= min_maxx) break; } return t; } /* * render_speedmine (dpy, d) * * render the current frame. */ static void render_speedmine (struct state *st, Drawable d) { int t, i=st->nearest, dt=1; GC gc; assert (st->nearest >= 0 && st->nearest < TERRAIN_LENGTH); if (st->be_wormy || wireframe) { XFillRectangle (st->dpy, d, st->erase_gc, 0, 0, st->width, st->height); dt=4; for (t=0; t < TERRAIN_LENGTH/4; t+=dt) { render_bonus_block (st, d, t, i); i -= dt; MODULO(i, TERRAIN_LENGTH); render_quads (st, d, t, dt, i); } assert (t == TERRAIN_LENGTH/4); } else { t = MAX(begin_at(st), TERRAIN_LENGTH/4); /*t = TERRAIN_LENGTH/4; dt = 2; */ /*dt = (t >= 3*TERRAIN_LENGTH/4 ? 1 : 2);*/ i = (st->nearest -t + TERRAIN_LENGTH) % TERRAIN_LENGTH; render_block (st, d, st->tunnelend_gc, t); } dt=2; if (t == TERRAIN_LENGTH/4) render_pentagons (st, d, t, dt, i); for (; t < 3*TERRAIN_LENGTH/4; t+=dt) { render_bonus_block (st, d, t, i); i -= dt; MODULO(i, TERRAIN_LENGTH); render_quads (st, d, t, dt, i); } dt=1; if (st->be_wormy) { for (; t < TERRAIN_LENGTH-(1+(st->pindexpindexcrosshair_flag) { gc = (wireframe ? st->bonus_gcs[st->nr_bonus_colors/2] : st->erase_gc); XFillRectangle (st->dpy, d, gc, st->width/2+(st->xoffset)-8, st->height/2+(st->yoffset*2)-1, 16, 3); XFillRectangle (st->dpy, d, gc, st->width/2+(st->xoffset)-1, st->height/2+(st->yoffset*2)-8, 3, 16); } } /* * move (step) * * move to the position for the next frame, and modify the state variables * st->nearest, pindex, pos, speed */ static void move (struct state *st) { double dpos; st->pos += st->step; dpos = SIGN3(st->pos) * floor(fabs(st->pos)); st->pindex += SIGN3(effective_speed) + INTERP; while (st->pindex >= INTERP) { st->nearest --; st->pindex -= INTERP; } while (st->pindex < 0) { st->nearest ++; st->pindex += INTERP; } st->nearest += dpos; MODULO(st->nearest, TERRAIN_LENGTH); st->pos -= dpos; st->accel = st->thrust + st->ycurvature[st->nearest] * st->gravity; st->speed += st->accel; if (st->speed > st->maxspeed) st->speed = st->maxspeed; if (st->speed < -st->maxspeed) st->speed = -st->maxspeed; } /* * speedmine (dpy, window) * * do everything required for one frame of the demo */ static unsigned long speedmine_draw (Display *dpy, Window window, void *closure) { struct state *st = (struct state *) closure; double elapsed, time_per_frame = 0.04; regenerate_terrain (st); perspective (st); render_speedmine (st, st->dbuf); if (st->dbuf != st->window) XCopyArea (st->dpy, st->dbuf, st->window, st->draw_gc, 0, 0, st->width, st->height, 0, 0); st->fps_end = get_time(st); st->nframes++; st->total_nframes++; if (st->fps_end > st->fps_start + 0.5) { elapsed = st->fps_end - st->fps_start; st->fps_start = get_time(st); time_per_frame = elapsed / st->nframes - st->delay*1e-6; st->fps = st->nframes / elapsed; if (DEBUG_FLAG) { printf ("%f s elapsed\t%3f s/frame\t%.1f FPS\n", elapsed, time_per_frame, st->fps); } st->step = effective_speed * elapsed; st->nframes = 0; } move (st); decrement_bonuses (st, time_per_frame); check_bonuses (st); return st->delay; } /* * speedmine_color_ramp (dpy, gcs, colors, ncolors, s1, s2, v1, v2) * * generate a color ramp of up to *ncolors between randomly chosen hues, * varying from saturation s1 to s2 and value v1 to v2, placing the colors * in 'colors' and creating corresponding GCs in 'gcs'. * * The number of colors actually allocated is returned in ncolors. */ static void speedmine_color_ramp (struct state *st, GC *gcs, XColor * colors, int *ncolors, double s1, double s2, double v1, double v2) { XGCValues gcv; int h1, h2; unsigned long flags; int i; assert (*st->ncolors >= 0); assert (s1 >= 0.0 && s1 <= 1.0 && v1 >= 0.0 && v2 <= 1.0); if (st->psychedelic_flag) { h1 = RAND(360); h2 = (h1 + 180) % 360; } else { h1 = h2 = RAND(360); } make_color_ramp (st->screen, st->visual, st->cmap, h1, s1, v1, h2, s2, v2, colors, ncolors, False, True, False); flags = GCForeground; for (i=0; i < *ncolors; i++) { gcv.foreground = colors[i].pixel; if (gcs[i]) XFreeGC (st->dpy, gcs[i]); gcs[i] = XCreateGC (st->dpy, st->dbuf, flags, &gcv); } } /* * change_colors () * * perform the color changing bonus. New colors are allocated for the * walls and bonuses, and if the 'psychedelic' option is set then new * colors are also chosen for the ground. */ static void change_colors (struct state *st) { double s1, s2; if (st->psychedelic_flag) { free_colors (st->screen, st->cmap, st->bonus_colors, st->nr_bonus_colors); free_colors (st->screen, st->cmap, st->wall_colors, st->nr_wall_colors); free_colors (st->screen, st->cmap, st->ground_colors, st->nr_ground_colors); s1 = 0.4; s2 = 0.9; st->ncolors = MAX_COLORS; speedmine_color_ramp (st, st->ground_gcs, st->ground_colors, &st->ncolors, 0.0, 0.8, 0.0, 0.9); st->nr_ground_colors = st->ncolors; } else { free_colors (st->screen, st->cmap, st->bonus_colors, st->nr_bonus_colors); free_colors (st->screen, st->cmap, st->wall_colors, st->nr_wall_colors); st->ncolors = st->nr_ground_colors; s1 = 0.0; s2 = 0.6; } st->ncolors = MAX_COLORS; speedmine_color_ramp (st, st->wall_gcs, st->wall_colors, &st->ncolors, s1, s2, 0.0, 0.9); st->nr_wall_colors = st->ncolors; st->ncolors = MAX_COLORS; speedmine_color_ramp (st, st->bonus_gcs, st->bonus_colors, &st->ncolors, 0.6, 0.9, 0.4, 1.0); st->nr_bonus_colors = st->ncolors; } /* * init_psychedelic_colors (dpy, window, cmap) * * initialise a psychedelic colormap */ static void init_psychedelic_colors (struct state *st) { XGCValues gcv; gcv.foreground = get_pixel_resource (st->dpy, st->cmap, "tunnelend", "TunnelEnd"); st->tunnelend_gc = XCreateGC (st->dpy, st->window, GCForeground, &gcv); st->ncolors = MAX_COLORS; speedmine_color_ramp (st, st->ground_gcs, st->ground_colors, &st->ncolors, 0.0, 0.8, 0.0, 0.9); st->nr_ground_colors = st->ncolors; st->ncolors = MAX_COLORS; speedmine_color_ramp (st, st->wall_gcs, st->wall_colors, &st->ncolors, 0.0, 0.6, 0.0, 0.9); st->nr_wall_colors = st->ncolors; st->ncolors = MAX_COLORS; speedmine_color_ramp (st, st->bonus_gcs, st->bonus_colors, &st->ncolors, 0.6, 0.9, 0.4, 1.0); st->nr_bonus_colors = st->ncolors; } /* * init_colors (dpy, window, cmap) * * initialise a normal colormap */ static void init_colors (struct state *st) { XGCValues gcv; XColor dark, light; int h1, h2; double s1, s2, v1, v2; unsigned long flags; int i; gcv.foreground = get_pixel_resource (st->dpy, st->cmap, "tunnelend", "TunnelEnd"); st->tunnelend_gc = XCreateGC (st->dpy, st->window, GCForeground, &gcv); st->ncolors = MAX_COLORS; dark.pixel = get_pixel_resource (st->dpy, st->cmap, "darkground", "DarkGround"); XQueryColor (st->dpy, st->cmap, &dark); light.pixel = get_pixel_resource (st->dpy, st->cmap, "lightground", "LightGround"); XQueryColor (st->dpy, st->cmap, &light); rgb_to_hsv (dark.red, dark.green, dark.blue, &h1, &s1, &v1); rgb_to_hsv (light.red, light.green, light.blue, &h2, &s2, &v2); make_color_ramp (st->screen, st->visual, st->cmap, h1, s1, v1, h2, s2, v2, st->ground_colors, &st->ncolors, False, True, False); st->nr_ground_colors = st->ncolors; flags = GCForeground; for (i=0; i < st->ncolors; i++) { gcv.foreground = st->ground_colors[i].pixel; st->ground_gcs[i] = XCreateGC (st->dpy, st->dbuf, flags, &gcv); } st->ncolors = MAX_COLORS; speedmine_color_ramp (st, st->wall_gcs, st->wall_colors, &st->ncolors, 0.0, 0.6, 0.0, 0.9); st->nr_wall_colors = st->ncolors; st->ncolors = MAX_COLORS; speedmine_color_ramp (st, st->bonus_gcs, st->bonus_colors, &st->ncolors, 0.6, 0.9, 0.4, 1.0); st->nr_bonus_colors = st->ncolors; } /* * print_stats () * * print out average FPS stats for the demo */ #if 0 static void print_stats (struct state *st) { if (st->total_nframes >= 1) printf ("Rendered %d frames averaging %f FPS\n", st->total_nframes, st->total_nframes / get_time(st)); } #endif /* * init_speedmine (dpy, window) * * initialise the demo */ static void * speedmine_init (Display *dpy, Window window) { struct state *st = (struct state *) calloc (1, sizeof(*st)); XGCValues gcv; XWindowAttributes xgwa; int i; double th; int wide; st->dpy = dpy; st->window = window; st->speed = 1.1; st->accel = 0.00000001; st->direction = FORWARDS; st->orientation = (17*ROTS)/22; XGetWindowAttributes (st->dpy, st->window, &xgwa); st->cmap = xgwa.colormap; st->visual = xgwa.visual; st->screen = xgwa.screen; st->width = xgwa.width; st->height = xgwa.height; st->verbose_flag = get_boolean_resource (st->dpy, "verbose", "Boolean"); # ifdef HAVE_JWXYZ /* Don't second-guess Quartz's double-buffering */ st->dbuf = st->window; #else st->dbuf = XCreatePixmap (st->dpy, st->window, st->width, st->height, xgwa.depth); #endif st->stars_mask = XCreatePixmap (st->dpy, st->window, st->width, st->height, 1); gcv.foreground = st->default_fg_pixel = get_pixel_resource (st->dpy, st->cmap, "foreground", "Foreground"); st->draw_gc = XCreateGC (st->dpy, st->window, GCForeground, &gcv); gcv.foreground = 1; st->stars_gc = XCreateGC (st->dpy, st->stars_mask, GCForeground, &gcv); gcv.foreground = get_pixel_resource (st->dpy, st->cmap, "background", "Background"); st->erase_gc = XCreateGC (st->dpy, st->dbuf, GCForeground, &gcv); gcv.foreground = 0; st->stars_erase_gc = XCreateGC (st->dpy, st->stars_mask, GCForeground, &gcv); st->wire_flag = get_boolean_resource (st->dpy, "wire", "Boolean"); st->psychedelic_flag = get_boolean_resource (st->dpy, "psychedelic", "Boolean"); st->delay = get_integer_resource(st->dpy, "delay", "Integer"); st->smoothness = get_integer_resource(st->dpy, "smoothness", "Integer"); if (st->smoothness < 1) st->smoothness = 1; st->maxspeed = get_float_resource(st->dpy, "maxspeed", "Float"); st->maxspeed *= 0.01; st->maxspeed = fabs(st->maxspeed); st->thrust = get_float_resource(st->dpy, "thrust", "Float"); st->thrust *= 0.2; st->gravity = get_float_resource(st->dpy, "gravity", "Float"); st->gravity *= 0.002/9.8; st->vertigo = get_float_resource(st->dpy, "vertigo", "Float"); st->vertigo *= 0.2; st->curviness = get_float_resource(st->dpy, "curviness", "Float"); st->curviness *= 0.25; st->twistiness = get_float_resource(st->dpy, "twistiness", "Float"); st->twistiness *= 0.125; st->terrain_flag = get_boolean_resource (st->dpy, "terrain", "Boolean"); st->widening_flag = get_boolean_resource (st->dpy, "widening", "Boolean"); st->bumps_flag = get_boolean_resource (st->dpy, "bumps", "Boolean"); st->bonuses_flag = get_boolean_resource (st->dpy, "bonuses", "Boolean"); st->crosshair_flag = get_boolean_resource (st->dpy, "crosshair", "Boolean"); st->be_wormy = get_boolean_resource (st->dpy, "worm", "Boolean"); if (st->be_wormy) { st->maxspeed *= 1.43; st->thrust *= 10; st->gravity *= 3; st->vertigo *= 0.5; st->smoothness *= 2; st->curviness *= 2; st->twistiness *= 2; st->psychedelic_flag = True; st->crosshair_flag = False; } if (st->psychedelic_flag) init_psychedelic_colors (st); else init_colors (st); for (i=0; icostab[i] = cos(th); st->sintab[i] = sin(th); } wide = random_wideness(); for (i=0; i < TERRAIN_LENGTH; i++) { st->wideness[i] = wide; st->bonuses[i] = 0; } init_terrain (st); init_curves (st); wrap_tunnel (st, 0, TERRAIN_LENGTH-1); #if 0 if (DEBUG_FLAG || st->verbose_flag) atexit(print_stats); #endif st->step = effective_speed; init_time (st); return st; } 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 speedmine_event (Display *dpy, Window window, void *closure, XEvent *event) { return False; } static void speedmine_free (Display *dpy, Window window, void *closure) { struct state *st = (struct state *) closure; free (st); } /* * Down the speedmine, you'll find speed * to satisfy your moving needs; * So if you're looking for a blast * then hit the speedmine, really fast. */ /* * Speedworm likes to choke and spit * and chase his tail, and dance a bit * he really is a funky friend; * he's made of speed from end to end. */ static const char *speedmine_defaults [] = { ".verbose: False", "*worm: False", "*wire: False", ".background: black", ".foreground: white", "*darkground: #101010", "*lightground: #a0a0a0", "*tunnelend: #000000", "*delay: 30000", "*maxspeed: 700", "*thrust: 1.0", "*gravity: 9.8", "*vertigo: 1.0", "*terrain: True", "*smoothness: 6", "*curviness: 1.0", "*twistiness: 1.0", "*widening: True", "*bumps: True", "*bonuses: True", "*crosshair: True", "*psychedelic: False", 0 }; static XrmOptionDescRec speedmine_options [] = { { "-verbose", ".verbose", XrmoptionNoArg, "True"}, { "-worm", ".worm", XrmoptionNoArg, "True"}, { "-wireframe", ".wire", XrmoptionNoArg, "True"}, { "-no-wireframe", ".wire", XrmoptionNoArg, "False"}, { "-darkground", ".darkground", XrmoptionSepArg, 0 }, { "-lightground", ".lightground", XrmoptionSepArg, 0 }, { "-tunnelend", ".tunnelend", XrmoptionSepArg, 0 }, { "-delay", ".delay", XrmoptionSepArg, 0 }, { "-maxspeed", ".maxspeed", XrmoptionSepArg, 0 }, { "-thrust", ".thrust", XrmoptionSepArg, 0 }, { "-gravity", ".gravity", XrmoptionSepArg, 0 }, { "-vertigo", ".vertigo", XrmoptionSepArg, 0 }, { "-terrain", ".terrain", XrmoptionNoArg, "True"}, { "-no-terrain", ".terrain", XrmoptionNoArg, "False"}, { "-smoothness", ".smoothness", XrmoptionSepArg, 0 }, { "-curviness", ".curviness", XrmoptionSepArg, 0 }, { "-twistiness", ".twistiness", XrmoptionSepArg, 0 }, { "-widening", ".widening", XrmoptionNoArg, "True"}, { "-no-widening", ".widening", XrmoptionNoArg, "False"}, { "-bumps", ".bumps", XrmoptionNoArg, "True"}, { "-no-bumps", ".bumps", XrmoptionNoArg, "False"}, { "-bonuses", ".bonuses", XrmoptionNoArg, "True"}, { "-no-bonuses", ".bonuses", XrmoptionNoArg, "False"}, { "-crosshair", ".crosshair", XrmoptionNoArg, "True"}, { "-no-crosshair", ".crosshair", XrmoptionNoArg, "False"}, { "-psychedelic", ".psychedelic", XrmoptionNoArg, "True"}, { "-no-psychedelic", ".psychedelic", XrmoptionNoArg, "False"}, { 0, 0, 0, 0 } }; XSCREENSAVER_MODULE ("SpeedMine", speedmine) /* vim: ts=4 */ xscreensaver-5.36/hacks/vermiculate.c000644 000767 000024 00000065474 12710314415 017731 0ustar00jwzstaff000000 000000 /* * @(#) vermiculate.c * @(#) Copyright (C) 2001 Tyler Pierce (tyler@alumni.brown.edu) * The full program, with documentation, is available at: * http://freshmeat.net/projects/fdm * * 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. */ #ifdef HAVE_CONFIG_H # include "config.h" #endif #include #include #include "screenhack.h" #define degs 360 #define degs2 (degs/2) #define degs4 (degs/4) #define degs8 (degs/8) #define dtor 0.0174532925 /* pi / degs2; */ #define thrmax 120 #define tailmax (thrmax * 2 + 1) #define tmodes '7' #define ymax (st->hei - 1) #define ymin 0 #define xmax (st->wid - 1) #define xmin 0 #define rlmax 200 #define SPEEDINC 10 #define SPEEDMAX 1000 #define wraparound(VAL,LOWER,UPPER) { \ if (VAL >= UPPER) \ VAL -= UPPER - LOWER; \ else if (VAL < LOWER) \ VAL += UPPER - LOWER; } #define arrcpy(DEST,SRC) memcpy (DEST, SRC, sizeof(DEST)) typedef double real; typedef unsigned char banktype[thrmax]; typedef struct linedata { int deg, spiturn, turnco, turnsize; unsigned char col; Bool dead; char orichar; real x, y; int tmode, tsc, tslen, tclim, otslen, ctinc, reclen, recpos, circturn, prey, slice; int xrec[rlmax + 1], yrec[rlmax + 1]; int turnseq[50]; Bool filled, killwalls, vhfollow, selfbounce, tailfollow, realbounce, little; } linedata; static const struct stringAndSpeed { char *str; int speed; } sampleStrings[] = { /* { "]]]]]]]]7ces123400-9-8#c123456#s9998880004#ma3#car9ma6#c-#r1", 600} , { "bmarrrr#c1234#lc5678#lyet]", 600} , */ { "AEBMN222222223#CAR9CAD4CAOV", 150} , { "mn333#c23#f1#]]]]]]]]]]]3bc9#r9#c78#f9#ma4#", 600} , { "AEBMN22222#CAD4CAORc1#f2#c1#r6", 100} , /* { "mn6666666#c1i#f1#y2#sy2#vyety1#ry13i#l", 40} , */ { "aebmnrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr#", 500} , /* { "bg+++++++++++++++++++++++#mnrrrrrrrrrrrrrrrrrrrrrrr#y1#k", 500}, */ /* { "BMN22222223#CAD4CAOVYAS", 150}, */ /* { "aebmnrrrrrrrrrrrrrrrr#yaryakg--#", 100} , */ { "mn6rrrrrrrrrrrrrrr#by1i#lcalc1#fnyav" , 200 } , { "mn1rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr#by1i#lcalc1#fn", 2000 }, { "baeMn333333333333333333333333#CerrYerCal", 800 }, { "baeMn1111111111111111111111111111111111111111111111111111111111#Cer9YesYevYerCal", 1200 }, { "baMn111111222222333333444444555555#Ct1#lCt2#lCt3#lCt4#lCt5#lCerrYerYet", 1400 }, { "baMn111111222222333333444444555555#Ct1#lCt2#lCt3#lCt4#lCt5#lCerrYerYetYt1i#lYt1i#sYt1#v", 1400 } }; struct state { Display *dpy; Window window; GC mygc; Colormap mycmap; XWindowAttributes xgwa; XColor mycolors[tailmax]; int hei, wid, speed; Bool erasing, cleared, autopal; char *instring; int max_ticks; real sinof[degs], cosof[degs], tanof[degs]; unsigned char *point; linedata thread[thrmax]; banktype bank; int bnkt; int boxw, boxh, curviness, gridden, ogd, bordcorn; unsigned char bordcol, threads; char ch, boolop; int reset_p; int cyc; }; static void consume_instring(struct state *st); static Bool wasakeypressed (struct state *st) { if (*st->instring != 0) return True; else return False; } static char readkey (struct state *st) { char readkey_result; if (*st->instring == 0) { readkey_result = '#'; } else { readkey_result = *st->instring; st->instring++; }; return toupper (readkey_result); } static unsigned int random1 (unsigned int i) { return (ya_random () % i); } static unsigned long waitabit (struct state *st) { int result = 0; st->cyc += st->threads; while (st->cyc > st->speed) { result += 10000; st->cyc -= st->speed; } return result; } static void clearscreen (struct state *st) { XClearWindow (st->dpy, st->window); memset (st->point, 0, st->wid * st->hei); } static void sp (struct state *st, int x, int y, int c) { XSetForeground (st->dpy, st->mygc, st->mycolors[c].pixel); XDrawPoint (st->dpy, st->window, st->mygc, x, y); st->point[(st->wid * y) + x] = c; } static int gp (struct state *st, int x, int y) { return st->point[(st->wid * y) + x]; } static void redraw (struct state *st, int x, int y, int width, int height) { int xc, yc; for (xc = x; xc <= x + width - 1; xc++) for (yc = y; yc <= y + height - 1; yc++) if (st->point[st->wid * yc + xc] != 0) sp (st, xc, yc, st->point[st->wid * yc + xc]); } static void palupdate (struct state *st, Bool forceUpdate) { if (forceUpdate || *st->instring == 0) { redraw (st, xmin, ymin, st->wid, st->hei); } } static void randpal (struct state *st) { int ncolors = tailmax - 1; make_random_colormap (st->xgwa.screen, st->xgwa.visual, st->mycmap, &st->mycolors[1], &ncolors, True, True, 0, True); if (ncolors < tailmax - 1) { int c; for (c = 1; c < tailmax; c++) st->mycolors[c].pixel = WhitePixel (st->dpy, DefaultScreen (st->dpy)); } } static void gridupdate (struct state *st, Bool interruptible) { int x, y; if (st->gridden > 0) for (x = 0; x <= xmax && !(wasakeypressed (st) && interruptible); x += st->boxw) for (y = 0; y <= ymax; y += st->boxh) { if (random1 (15) < st->gridden) { #define lesser(A,B) ( ((A)<(B)) ? (A) : (B) ) int max = lesser (x + st->boxw, xmax); int xc; for (xc = x; xc <= max; xc++) sp (st, xc, y, 1); } if (random1 (15) < st->gridden) { int max = lesser (y + st->boxh, ymax); int yc; for (yc = y; yc <= max; yc++) sp (st, x, yc, 1); } } } static void bordupdate (struct state *st) { int xbord, ybord; if (st->bordcorn == 0 || st->bordcorn == 1) ybord = ymin; else ybord = ymax; if (st->bordcorn == 0 || st->bordcorn == 3) xbord = xmin; else xbord = xmax; { int x, y; for (x = xmin; x <= xmax; x++) sp (st, x, ybord, st->bordcol); for (y = ymin; y <= ymax; y++) sp (st, xbord, y, st->bordcol); } } static Bool inbank (struct state *st, unsigned char thr) { int c; if (st->bnkt > 0) for (c = 1; c <= st->bnkt; c++) if (st->bank[c - 1] == thr) return True; return False; } static void pickbank (struct state *st) { unsigned char thr = 1; st->bnkt = 0; st->ch = '\0'; do { while (inbank (st, thr)) thr = thr % st->threads + 1; palupdate (st, False); st->ch = readkey (st); palupdate (st, False); switch (st->ch) { case '+': case '-': do { if (st->ch == '+') thr++; else thr--; wraparound (thr, 1, st->threads + 1); } while (inbank (st, thr)); break; case ' ': st->bank[++st->bnkt - 1] = thr; break; case '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9': st->bank[++st->bnkt - 1] = st->ch - '0'; if (st->bank[st->bnkt - 1] > st->threads) st->bnkt--; break; case 'I': { banktype tbank; int tbankt = 0; int c; for (c = 1; c <= st->threads; c++) if (!inbank (st, c)) tbank[++tbankt - 1] = c; st->bnkt = tbankt; arrcpy (st->bank, tbank); } break; case 'T': st->ch = readkey (st); switch (st->ch) { case '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9': { int c; for (c = 1; c <= st->threads; c++) if (st->thread[c - 1].tmode == st->ch - '0') st->bank[++st->bnkt - 1] = c; } break; } break; case 'A': for (st->bnkt = 1; st->bnkt <= st->threads; st->bnkt++) st->bank[st->bnkt - 1] = st->bnkt; st->bnkt = st->threads; break; case 'E': for (st->bnkt = 1; st->bnkt <= thrmax; st->bnkt++) st->bank[st->bnkt - 1] = st->bnkt; st->bnkt = thrmax; break; } } while (!(st->bnkt >= st->threads || st->ch == 'N' || st->ch == '\15' || st->ch == '#')); if (st->bnkt == 0 && st->ch != 'N') { st->bnkt = 1; st->bank[0] = thr; } palupdate (st, False); } static void bankmod (char boolop, Bool * Bool_) { switch (boolop) { case 'T': *Bool_ = !*Bool_; break; case 'Y': *Bool_ = True; break; case 'N': *Bool_ = False; break; } } static void newonscreen (struct state *st, unsigned char thr) { linedata *LP = &st->thread[thr - 1]; LP->filled = False; LP->dead = False; LP->reclen = (LP->little) ? random1 (10) + 5 : random1 (rlmax - 30) + 30; LP->deg = random1 (degs); LP->y = random1 (st->hei); LP->x = random1 (st->wid); LP->recpos = 0; LP->turnco = 2; LP->turnsize = random1 (4) + 2; } static void firstinit (struct state *st, unsigned char thr) { linedata *LP = &st->thread[thr - 1]; LP->col = thr + 1; LP->prey = 0; LP->tmode = 1; LP->slice = degs / 3; LP->orichar = 'R'; LP->spiturn = 5; LP->selfbounce = False; LP->realbounce = False; LP->vhfollow = False; LP->tailfollow = False; LP->killwalls = False; LP->little = False; LP->ctinc = random1 (2) * 2 - 1; LP->circturn = ((thr % 2) * 2 - 1) * ((thr - 1) % 7 + 1); LP->tsc = 1; LP->tslen = 6; LP->turnseq[0] = 6; LP->turnseq[1] = -6; LP->turnseq[2] = 6; LP->turnseq[3] = 6; LP->turnseq[4] = -6; LP->turnseq[5] = 6; LP->tclim = (unsigned char) (((real) degs) / 2 / 12); } static void maininit (struct state *st) { if (!st->instring) { int n = random1 (sizeof (sampleStrings) / sizeof (sampleStrings[0])); st->instring = sampleStrings[n].str; st->speed = sampleStrings[n].speed; } if (st->speed == 0) { st->speed = 200; } st->boxh = 10; st->boxw = 10; st->gridden = 0; st->bordcorn = 0; st->threads = 4; st->curviness = 30; st->bordcol = 1; st->ogd = 8; st->ch = '\0'; st->erasing = True; { unsigned char thr; for (thr = 1; thr <= thrmax; thr++) { firstinit (st, thr); newonscreen (st, thr); } } { int d; for (d = degs - 1; d >= 0; d--) { st->sinof[d] = sin (d * dtor); st->cosof[d] = cos (d * dtor); if (d % degs4 == 0) st->tanof[d] = st->tanof[d + 1]; else st->tanof[d] = tan (d * dtor); } } randpal (st); } static Bool move (struct state *st, unsigned char thr) { linedata *LP = &st->thread[thr - 1]; if (LP->dead) return (False); if (LP->prey == 0) switch (LP->tmode) { case 1: LP->deg += random1 (2 * LP->turnsize + 1) - LP->turnsize; break; case 2: if (LP->slice == degs || LP->slice == degs2 || LP->slice == degs4) { if (LP->orichar == 'D') { if (LP->deg % degs4 != degs8) LP->deg = degs4 * random1 (4) + degs8; } else if (LP->orichar == 'V') if (LP->deg % degs4 != 0) LP->deg = degs4 * random1 (4); } if (random1 (100) == 0) { if (LP->slice == 0) LP->deg = LP->deg - degs4 + random1 (degs2); else LP->deg += (random1 (2) * 2 - 1) * LP->slice; } break; case 3: LP->deg += LP->circturn; break; case 4: if (abs (LP->spiturn) > 11) LP->spiturn = 5; else LP->deg += LP->spiturn; if (random1 (15 - abs (LP->spiturn)) == 0) { LP->spiturn += LP->ctinc; if (abs (LP->spiturn) > 10) LP->ctinc *= -1; } break; case 5: LP->turnco = abs (LP->turnco) - 1; if (LP->turnco == 0) { LP->turnco = st->curviness + random1 (10); LP->circturn *= -1; } LP->deg += LP->circturn; break; case 6: if (abs (LP->turnco) == 1) LP->turnco *= -1 * (random1 (degs2 / abs (LP->circturn)) + 5); else if (LP->turnco == 0) LP->turnco = 2; else if (LP->turnco > 0) { LP->turnco--; LP->deg += LP->circturn; } else LP->turnco++; break; case 7: LP->turnco++; if (LP->turnco > LP->tclim) { LP->turnco = 1; LP->tsc = (LP->tsc % LP->tslen) + 1; } LP->deg += LP->turnseq[LP->tsc - 1]; break; } else { int desdeg; real dy, dx; if (LP->tailfollow || LP->prey == thr) { dx = st->thread[LP->prey - 1].xrec[st->thread[LP->prey - 1].recpos] - LP->x; dy = st->thread[LP->prey - 1].yrec[st->thread[LP->prey - 1].recpos] - LP->y; } else { dx = st->thread[LP->prey - 1].x - LP->x; dy = st->thread[LP->prey - 1].y - LP->y; } desdeg = (LP->vhfollow) ? ((fabs (dx) > fabs (dy)) ? ((dx > 0) ? 0 * degs4 : 2 * degs4) : ((dy > 0) ? 1 * degs4 : 3 * degs4)) : ((dx > 0) ? ((dy > 0) ? 1 * degs8 : 7 * degs8) : ((dy > 0) ? 3 * degs8 : 5 * degs8)); if (desdeg - desdeg % degs4 != LP->deg - LP->deg % degs4 || LP->vhfollow) { if (!LP->vhfollow) { /* Using atan2 here doesn't seem to slow things down: */ desdeg = atan2 (dy, dx) / dtor; wraparound (desdeg, 0, degs); } if (abs (desdeg - LP->deg) <= abs (LP->circturn)) LP->deg = desdeg; else LP->deg += (desdeg > LP->deg) ? ((desdeg - LP->deg > degs2) ? -abs (LP->circturn) : abs (LP->circturn)) : ((LP->deg - desdeg > degs2) ? abs (LP->circturn) : -abs (LP->circturn)); } else LP->deg += (st->tanof[LP->deg] > dy / dx) ? -abs (LP->circturn) : abs (LP->circturn); } wraparound (LP->deg, 0, degs); { unsigned char oldcol; real oldy = LP->y, oldx = LP->x; LP->x += st->cosof[LP->deg]; wraparound (LP->x, xmin, xmax + 1); LP->y += st->sinof[LP->deg]; wraparound (LP->y, ymin, ymax + 1); #define xi ((int) LP->x) #define yi ((int) LP->y) oldcol = gp (st, xi, yi); if (oldcol != 0) { Bool vertwall = False, horiwall = False; if (oldcol == 1 && ((LP->killwalls && st->gridden > 0) || LP->realbounce)) { vertwall = (gp (st, xi, (int) oldy) == 1); horiwall = (gp (st, (int) oldx, yi) == 1); } if (oldcol == 1 && LP->realbounce && (vertwall || horiwall)) { if (vertwall) LP->deg = -LP->deg + degs2; else LP->deg = -LP->deg; } else { if ((oldcol != LP->col && LP->realbounce) || (oldcol == LP->col && LP->selfbounce)) LP->deg += degs4 * (random1 (2) * 2 - 1); else if (oldcol != LP->col) LP->deg += degs2; } if (LP->killwalls && st->gridden > 0 && oldcol == 1) { if (vertwall && xi + 1 <= xmax) { int yy; for (yy = yi - yi % st->boxh; yy <= yi - yi % st->boxh + st->boxh && yy <= ymax; yy++) if (gp (st, xi + 1, yy) != 1 || yy == ymax) sp (st, xi, yy, 0); } if (horiwall && yi + 1 <= ymax) { int xx; for (xx = xi - xi % st->boxw; xx <= xi - xi % st->boxw + st->boxw && xx <= xmax; xx++) if (gp (st, xx, yi + 1) != 1 || xx == xmax) sp (st, xx, yi, 0); } } if (oldcol != LP->col || LP->selfbounce) { LP->x = oldx; LP->y = oldy; } wraparound (LP->deg, 0, degs); } } sp (st, xi, yi, LP->col); if (LP->filled) { if (st->erasing) sp (st, LP->xrec[LP->recpos], LP->yrec[LP->recpos], 0); else sp (st, LP->xrec[LP->recpos], LP->yrec[LP->recpos], LP->col + thrmax); } LP->yrec[LP->recpos] = yi; LP->xrec[LP->recpos] = xi; if (LP->recpos == LP->reclen - 1) LP->filled = True; if (LP->filled && !st->erasing) { int co = LP->recpos; LP->dead = True; do { int nextco = co + 1; wraparound (nextco, 0, LP->reclen); if (LP->yrec[co] != LP->yrec[nextco] || LP->xrec[co] != LP->xrec[nextco]) LP->dead = False; co = nextco; } while (!(!LP->dead || co == LP->recpos)); } LP->recpos++; wraparound (LP->recpos, 0, LP->reclen); return (!LP->dead); } static unsigned long vermiculate_draw (Display *dpy, Window window, void *closure) { struct state *st = (struct state *) closure; int had_instring = (st->instring != 0); int tick = 0; int this_delay = 0; int loop = 0; AGAIN: if (st->reset_p) { st->reset_p = 0; clearscreen (st); { unsigned char thr; for (thr = 1; thr <= st->threads; thr++) newonscreen (st, thr); } if (st->autopal) { randpal (st); palupdate (st, False); } bordupdate (st); gridupdate (st, False); } { Bool alltrap = True; unsigned char thr; for (thr = 1; thr <= st->threads; thr++) if (move (st, thr)) alltrap = False; if (alltrap) /* all threads are trapped */ st->reset_p = True; if (st->speed != SPEEDMAX) this_delay = waitabit (st); } if (tick++ > st->max_ticks && !had_instring) { tick = 0; st->instring = 0; maininit(st); st->reset_p = True; st->autopal = False; } if (this_delay == 0 && loop++ < 1000) goto AGAIN; return this_delay; } static void * vermiculate_init (Display *d, Window w) { struct state *st = (struct state *) calloc (1, sizeof(*st)); st->dpy = d; st->window = w; st->reset_p = 1; st->instring = get_string_resource (st->dpy, "instring", "Instring"); if (st->instring && !*st->instring) st->instring = 0; st->max_ticks = get_integer_resource (st->dpy, "ticks", "Integer"); { int temp = get_integer_resource (st->dpy, "speed", "Speed"); if (temp != 0) st->speed = temp; } st->mycolors[0].pixel = BlackPixel (st->dpy, DefaultScreen (st->dpy)); XSetWindowBackground (st->dpy, st->window, BlackPixel (st->dpy, DefaultScreen (st->dpy))); { XGetWindowAttributes (st->dpy, st->window, &st->xgwa); st->wid = st->xgwa.width; st->hei = st->xgwa.height; st->mycmap = st->xgwa.colormap; } { XGCValues mygcv; st->mygc = XCreateGC (st->dpy, st->window, 0, &mygcv); } st->point = (unsigned char *) calloc (1, st->wid * st->hei); maininit (st); palupdate (st, True); consume_instring(st); return st; } 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 vermiculate_event (Display *dpy, Window window, void *closure, XEvent *event) { struct state *st = (struct state *) closure; if (screenhack_event_helper (dpy, window, event)) { st->reset_p = 1; return True; } return False; } static void consume_instring(struct state *st) { char boolop; while (wasakeypressed (st)) { st->ch = readkey (st); switch (st->ch) { case 'M': st->ch = readkey (st); switch (st->ch) { case 'A': case 'N': { unsigned char othreads = st->threads; if (st->ch == 'N') st->threads = 0; do { st->ch = readkey (st); switch (st->ch) { case '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9': st->thread[++st->threads - 1].tmode = st->ch - '0'; break; case 'R': st->thread[++st->threads - 1].tmode = random1 (tmodes - '0') + 1; break; } } while (!(st->ch == '\15' || st->ch == '#' || st->threads == thrmax)); if (st->threads == 0) st->threads = othreads; st->reset_p = 1; } break; } break; case 'C': pickbank (st); if (st->bnkt > 0) { st->ch = readkey (st); switch (st->ch) { case 'D': st->ch = readkey (st); switch (st->ch) { case '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9': /* Careful! The following macro needs to be at the beginning of any block in which it's invoked, since it declares variables: */ #define forallinbank(LDP) linedata *LDP; int bankc; \ for (bankc = 1; \ ((bankc <= st->bnkt) ? ( \ (LDP = &st->thread[st->bank[bankc - 1] - 1], 1) \ ) : 0) ; bankc++) { forallinbank (L) L->slice = degs / (st->ch - '0'); } break; case 'M': { forallinbank (L) L->slice = 0; } break; } break; case 'S': { forallinbank (L) { L->otslen = L->tslen; L->tslen = 0; } } do { char oldch = st->ch; st->ch = readkey (st); { forallinbank (L) { switch (st->ch) { case '0': case '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9': L->tslen++; L->turnseq[L->tslen - 1] = st->ch - '0'; if (oldch == '-') L->turnseq[L->tslen - 1] *= -1; if (bankc % 2 == 0) L->turnseq[L->tslen - 1] *= -1; break; } } } } while (!(st->ch == '\15' || st->ch == '#' || st->thread[st->bank[0] - 1].tslen == 50)); { forallinbank (L) { int seqSum = 0, c; if (L->tslen == 0) L->tslen = L->otslen; for (c = 1; c <= L->tslen; c++) seqSum += L->turnseq[c - 1]; if (seqSum == 0) L->tclim = 1; else L->tclim = (int) (((real) degs2) / abs (seqSum)); L->tsc = random1 (L->tslen) + 1; } } break; case 'T': { st->ch = readkey (st); { forallinbank (L) { switch (st->ch) { case '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9': L->tmode = st->ch - '0'; break; case 'R': L->tmode = random1 (tmodes - '0') + 1; break; } } } } break; case 'O': st->ch = readkey (st); { forallinbank (L) L->orichar = st->ch; } break; case 'F': { banktype fbank; arrcpy (fbank, st->bank); { int fbnkt = st->bnkt; int bankc; pickbank (st); for (bankc = 1; bankc <= fbnkt; bankc++) { linedata *L = &st->thread[fbank[bankc - 1] - 1]; if (st->ch == 'N') L->prey = 0; else L->prey = st->bank[0 + (bankc - 1) % st->bnkt]; } } } break; case 'L': { forallinbank (L) L->prey = st->bank[bankc % st->bnkt]; } break; case 'R': st->ch = readkey (st); { forallinbank (L) switch (st->ch) { case '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9': L->circturn = 10 - (st->ch - '0'); break; case 'R': L->circturn = random1 (7) + 1; break; } } break; } } break; case 'T': case 'Y': case 'N': boolop = st->ch; pickbank (st); if (st->bnkt > 0) { st->ch = readkey (st); { forallinbank (L) { switch (st->ch) { case 'S': bankmod (boolop, &L->selfbounce); break; case 'V': bankmod (boolop, &L->vhfollow); break; case 'R': bankmod (boolop, &L->realbounce); break; case 'L': bankmod (boolop, &L->little); st->cleared = True; break; case 'T': bankmod (boolop, &L->tailfollow); break; case 'K': bankmod (boolop, &L->killwalls); break; } } } } break; case 'R': if (st->bordcol == 1) { st->bordcol = 0; bordupdate (st); st->bordcorn = (st->bordcorn + 1) % 4; st->bordcol = 1; bordupdate (st); } break; case '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9': { int c; for (c = 1; c <= thrmax; c++) st->thread[c - 1].tmode = st->ch - '0'; } break; case '\40': st->cleared = True; break; case 'E': st->erasing = !st->erasing; break; case 'P': randpal (st); palupdate (st, True); break; case 'G': { char dimch = 'B'; Bool gridchanged = True; if (st->gridden == 0) st->gridden = st->ogd; do { int msize = 0; if (gridchanged) { clearscreen (st); gridupdate (st, True); } st->ch = readkey (st); gridchanged = True; switch (st->ch) { case '+': msize = 1; break; case '-': msize = -1; break; case ']': if (st->gridden < 15) st->gridden++; break; case '[': if (st->gridden > 0) st->gridden--; break; case 'O': st->ogd = st->gridden; st->gridden = 0; break; case 'S': st->boxw = st->boxh; case 'W': case 'H': case 'B': dimch = st->ch; break; default: gridchanged = False; } if (dimch == 'W' || dimch == 'B') st->boxw += msize; if (dimch == 'H' || dimch == 'B') st->boxh += msize; if (st->boxw == 0) st->boxw = 1; if (st->boxh == 0) st->boxh = 1; } while (!(st->ch == '\15' || st->ch == '#' || st->ch == 'O')); st->cleared = True; } break; case 'A': st->autopal = !st->autopal; break; case 'B': st->bordcol = 1 - st->bordcol; bordupdate (st); break; case '-': st->speed -= SPEEDINC; if (st->speed < 1) st->speed = 1; break; case '+': st->speed += SPEEDINC; if (st->speed > SPEEDMAX) st->speed = SPEEDMAX; break; case '/': if (st->curviness > 5) st->curviness -= 5; break; case '*': if (st->curviness < 50) st->curviness += 5; break; case ']': if (st->threads < thrmax) newonscreen (st, ++st->threads); break; case '[': if (st->threads > 1) { linedata *L = &st->thread[st->threads - 1]; int lastpos = (L->filled) ? L->reclen - 1 : L->recpos; int c; for (c = 0; c <= lastpos; c++) sp (st, L->xrec[c], L->yrec[c], 0); st->threads--; } break; } } } static void vermiculate_free (Display *dpy, Window window, void *closure) { struct state *st = (struct state *) closure; if (st->point) { free(st->point); } free (st); } static const char *vermiculate_defaults[] = { ".background: Black", "*ticks: 20000", "*fpsSolid: true", "*speed: 0", "*instring: ", #ifdef HAVE_MOBILE "*ignoreRotation: True", #endif 0 }; static XrmOptionDescRec vermiculate_options[] = { {"-speed", ".speed", XrmoptionSepArg, 0}, {"-instring", ".instring", XrmoptionSepArg, 0}, {0, 0, 0, 0} }; XSCREENSAVER_MODULE ("Vermiculate", vermiculate) xscreensaver-5.36/hacks/xpm-pixmap.c000644 000767 000024 00000022637 12716663700 017515 0ustar00jwzstaff000000 000000 /* xpm-pixmap.c --- converts XPM data to a Pixmap. * xscreensaver, Copyright (c) 1998-2006 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. */ #ifdef HAVE_CONFIG_H # include "config.h" #endif #include #include #ifdef HAVE_JWXYZ # include "jwxyz.h" #else # include # include # include "visual.h" /* for screen_number() */ #endif #include "xpm-pixmap.h" extern char *progname; #if defined(HAVE_GDK_PIXBUF) # include # ifdef HAVE_GTK2 # include # else /* !HAVE_GTK2 */ # include # endif /* !HAVE_GTK2 */ /* Returns a Pixmap structure containing the bits of the given XPM image. This is the gdk_pixbuf version of this function. */ static Pixmap xpm_to_pixmap_1 (Display *dpy, Window window, int *width_ret, int *height_ret, Pixmap *mask_ret, const char *filename, /*const*/ char * const *xpm_data) { GdkPixbuf *pb; static int initted = 0; XWindowAttributes xgwa; #ifdef HAVE_GTK2 GError *gerr = NULL; #endif /* HAVE_GTK2 */ XGetWindowAttributes (dpy, window, &xgwa); if (!initted) { #ifdef HAVE_GTK2 #if !GLIB_CHECK_VERSION(2, 36 ,0) g_type_init (); #endif #endif /* HAVE_GTK2 */ gdk_pixbuf_xlib_init (dpy, screen_number (xgwa.screen)); xlib_rgb_init (dpy, xgwa.screen); initted = 1; } pb = (filename #ifdef HAVE_GTK2 ? gdk_pixbuf_new_from_file (filename, &gerr) #else /* !HAVE_GTK2 */ ? gdk_pixbuf_new_from_file (filename) #endif /* !HAVE_GTK2 */ : gdk_pixbuf_new_from_xpm_data ((const char **) xpm_data)); if (pb) { int w = gdk_pixbuf_get_width (pb); int h = gdk_pixbuf_get_height (pb); Pixmap pixmap = 0; /* #### Note that this always uses the default colormap! Morons! Owen says that in Gnome 2.0, I should try using gdk_pixbuf_render_pixmap_and_mask_for_colormap() instead. But I don't have Gnome 2.0 yet. */ gdk_pixbuf_xlib_render_pixmap_and_mask (pb, &pixmap, mask_ret, 128); if (!pixmap) { fprintf (stderr, "%s: out of memory (%d x %d)\n", progname, w, h); exit (-1); } /* gdk_pixbuf_unref (pb); -- #### does doing this free colors? */ if (width_ret) *width_ret = w; if (height_ret) *height_ret = h; return pixmap; } else if (filename) { #ifdef HAVE_GTK2 fprintf (stderr, "%s: %s\n", progname, gerr->message); g_error_free (gerr); #else /* !HAVE_GTK2 */ fprintf (stderr, "%s: unable to load %s\n", progname, filename); #endif /* !HAVE_GTK2 */ exit (-1); } else { fprintf (stderr, "%s: unable to initialize built-in images\n", progname); exit (-1); } } #elif defined(HAVE_XPM) #include #include #ifdef HAVE_XMU # ifndef VMS # include #else /* VMS */ # include # endif /* VMS */ #endif #undef countof #define countof(x) (sizeof((x))/sizeof((*x))) static int handle_xpm_error (const char *filename, int status) { if (!filename) filename = "builtin"; switch (status) { case XpmSuccess: return 0; break; case XpmColorError: fprintf (stderr, "%s: %s: warning: color substitution performed\n", progname, filename); return 0; break; case XpmFileInvalid: return 1; break; case XpmOpenFailed: fprintf (stderr, "%s: %s: no such file\n", progname, filename); break; case XpmNoMemory: fprintf (stderr, "%s: %s: out of memory\n", progname, filename); break; case XpmColorFailed: fprintf (stderr, "%s: %s: color allocation failed\n", progname, filename); break; default: fprintf (stderr, "%s: %s: unknown XPM error %d\n", progname, filename, status); break; } exit (-1); } /* The libxpm version of this function... */ static Pixmap xpm_to_pixmap_1 (Display *dpy, Window window, int *width_ret, int *height_ret, Pixmap *mask_ret, const char *filename, /*const*/ char * const *xpm_data) { Pixmap pixmap = 0; XpmAttributes xpmattrs; XpmImage xpm_image; XpmInfo xpm_info; int status; XWindowAttributes xgwa; XGetWindowAttributes (dpy, window, &xgwa); memset (&xpm_image, 0, sizeof(xpm_image)); memset (&xpm_info, 0, sizeof(xpm_info)); if (filename) { xpm_data = 0; status = XpmReadFileToData ((char *) filename, &xpm_data); if (handle_xpm_error (filename, status)) goto TRY_XBM; } xpmattrs.valuemask = 0; # ifdef XpmCloseness xpmattrs.valuemask |= XpmCloseness; xpmattrs.closeness = 40000; # endif # ifdef XpmVisual xpmattrs.valuemask |= XpmVisual; xpmattrs.visual = xgwa.visual; # endif # ifdef XpmDepth xpmattrs.valuemask |= XpmDepth; xpmattrs.depth = xgwa.depth; # endif # ifdef XpmColormap xpmattrs.valuemask |= XpmColormap; xpmattrs.colormap = xgwa.colormap; # endif status = XpmCreatePixmapFromData (dpy, window, xpm_data, &pixmap, mask_ret, &xpmattrs); if (handle_xpm_error (filename, status)) pixmap = 0; else { if (width_ret) *width_ret = xpmattrs.width; if (height_ret) *height_ret = xpmattrs.height; } TRY_XBM: #ifdef HAVE_XMU if (! pixmap) { unsigned long fg = BlackPixelOfScreen (xgwa.screen); unsigned long bg = WhitePixelOfScreen (xgwa.screen); int xh, yh; Pixmap b2; pixmap = XmuLocateBitmapFile (xgwa.screen, filename, 0, 0, width_ret, height_ret, &xh, &yh); if (! pixmap) { fprintf (stderr, "%s: couldn't find XBM %s\n", progname, filename); exit (-1); } b2 = XmuCreatePixmapFromBitmap (dpy, window, pixmap, *width_ret, *height_ret, xgwa.depth, fg, bg); XFreePixmap (dpy, pixmap); pixmap = b2; if (!pixmap) { fprintf (stderr, "%s: couldn't load XBM %s\n", progname, filename); exit (-1); } } #else /* !XMU */ { fprintf (stderr, "%s: your vendor doesn't ship the standard Xmu library.\n", progname); fprintf (stderr, "\tWe can't load XBM files without it.\n"); exit (-1); } #endif /* !XMU */ return pixmap; } #else /* !HAVE_XPM && !HAVE_GDK_PIXBUF */ /* If we don't have libXPM or Pixbuf, then use "minixpm". This can read XPM data from memory, but can't read files. */ #include "minixpm.h" static Pixmap xpm_to_pixmap_1 (Display *dpy, Window window, int *width_ret, int *height_ret, Pixmap *mask_ret, const char *filename, /*const*/ char * const *xpm_data) { XWindowAttributes xgwa; XImage *ximage; Pixmap pixmap, p2 = 0; int iw, ih, npixels; unsigned long *pixels = 0; unsigned char *mask = 0; XGCValues gcv; GC gc; if (filename) { fprintf(stderr, "%s: no files: not compiled with XPM or Pixbuf support.\n", progname); exit (1); } if (! xpm_data) abort(); XGetWindowAttributes (dpy, window, &xgwa); ximage = minixpm_to_ximage (dpy, xgwa.visual, xgwa.colormap, xgwa.depth, BlackPixelOfScreen (xgwa.screen), (const char * const *) xpm_data, &iw, &ih, &pixels, &npixels, (mask_ret ? &mask : 0)); if (pixels) free (pixels); pixmap = XCreatePixmap (dpy, window, iw, ih, xgwa.depth); gc = XCreateGC (dpy, pixmap, 0, &gcv); XPutImage (dpy, pixmap, gc, ximage, 0, 0, 0, 0, iw, ih); XFreeGC (dpy, gc); XDestroyImage (ximage); if (mask) { p2 = XCreatePixmap (dpy, window, iw, ih, 1); gcv.foreground = 1; gcv.background = 0; gc = XCreateGC (dpy, p2, GCForeground|GCBackground, &gcv); ximage = XCreateImage (dpy, xgwa.visual, 1, XYBitmap, 0, (char *) mask, iw, ih, 8, 0); ximage->byte_order = ximage->bitmap_bit_order = LSBFirst; if (!ximage) abort(); XPutImage (dpy, p2, gc, ximage, 0, 0, 0, 0, iw, ih); XFreeGC (dpy, gc); XDestroyImage (ximage); } if (width_ret) *width_ret = iw; if (height_ret) *height_ret = ih; if (mask_ret) *mask_ret = p2; return pixmap; } #endif /* minixpm */ Pixmap xpm_data_to_pixmap (Display *dpy, Window window, /*const*/ char * const *xpm_data, int *width_ret, int *height_ret, Pixmap *mask_ret) { return xpm_to_pixmap_1 (dpy, window, width_ret, height_ret, mask_ret, 0, xpm_data); } Pixmap xpm_file_to_pixmap (Display *dpy, Window window, const char *filename, int *width_ret, int *height_ret, Pixmap *mask_ret) { return xpm_to_pixmap_1 (dpy, window, width_ret, height_ret, mask_ret, filename, 0); } xscreensaver-5.36/hacks/webcollage-helper.c000644 000767 000024 00000030723 12701612217 020760 0ustar00jwzstaff000000 000000 /* webcollage-helper --- scales and pastes one image into another * xscreensaver, Copyright (c) 2002-2005 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 is the GDK + JPEGlib implementation. See webcollage-helper-cocoa.m for the Cocoa implementation. */ #ifdef HAVE_CONFIG_H # include "config.h" #endif #if defined(HAVE_GDK_PIXBUF) && defined(HAVE_JPEGLIB) /* whole file */ #include #include #include #include #include #include #include #undef HAVE_STDLIB_H /* stupid jconfig.h! */ #include #include char *progname; static int verbose_p = 0; static void add_jpeg_comment (struct jpeg_compress_struct *cinfo); static void write_pixbuf (GdkPixbuf *pb, const char *file); static GdkPixbuf * load_pixbuf (const char *file) { GdkPixbuf *pb; #ifdef HAVE_GTK2 GError *err = NULL; pb = gdk_pixbuf_new_from_file (file, &err); #else /* !HAVE_GTK2 */ pb = gdk_pixbuf_new_from_file (file); #endif /* HAVE_GTK2 */ if (!pb) { #ifdef HAVE_GTK2 fprintf (stderr, "%s: %s\n", progname, err->message); g_error_free (err); #else /* !HAVE_GTK2 */ fprintf (stderr, "%s: unable to load %s\n", progname, file); #endif /* !HAVE_GTK2 */ exit (1); } return pb; } static void bevel_image (GdkPixbuf **pbP, int bevel_pct, int x, int y, int w, int h) { GdkPixbuf *pb = *pbP; int small_size = (w > h ? h : w); int bevel_size = small_size * (bevel_pct / 100.0); /* Use a proportionally larger bevel size for especially small images. */ if (bevel_size < 20 && small_size > 40) bevel_size = 20; else if (bevel_size < 10 && small_size > 20) bevel_size = 10; else if (bevel_size < 5) /* too small to bother bevelling */ return; /* Ensure the pixbuf has an alpha channel. */ if (! gdk_pixbuf_get_has_alpha (pb)) { GdkPixbuf *pb2 = gdk_pixbuf_add_alpha (pb, FALSE, 0, 0, 0); g_object_unref (pb); pb = pb2; } { guchar *data = gdk_pixbuf_get_pixels (pb); guchar *line; int rs = gdk_pixbuf_get_rowstride (pb); int ch = gdk_pixbuf_get_n_channels (pb); int xx, yy; double *ramp = (double *) malloc (sizeof(*ramp) * (bevel_size + 1)); if (!ramp) { fprintf (stderr, "%s: out of memory (%d)\n", progname, bevel_size); exit (1); } for (xx = 0; xx <= bevel_size; xx++) { # if 0 /* linear */ ramp[xx] = xx / (double) bevel_size; # else /* sinusoidal */ double p = (xx / (double) bevel_size); double s = sin (p * M_PI / 2); ramp[xx] = s; # endif } line = data + (rs * y); for (yy = 0; yy < h; yy++) { guchar *p = line + (x * ch); for (xx = 0; xx < w; xx++) { double rx, ry, r; if (xx < bevel_size) rx = ramp[xx]; else if (xx >= w - bevel_size) rx = ramp[w - xx - 1]; else rx = 1; if (yy < bevel_size) ry = ramp[yy]; else if (yy >= h - bevel_size) ry = ramp[h - yy - 1]; else ry = 1; r = rx * ry; if (r != 1) p[ch-1] *= r; p += ch; } line += rs; } #if 0 /* show the ramp */ line = data + (rs * y); for (yy = 0; yy < h; yy++) { guchar *p = line + (x * ch); for (xx = 0; xx < w; xx++) { int cc = 0; for (cc = 0; cc < ch-1; cc++) p[cc] = 255; p += ch; } line += rs; } #endif free (ramp); if (verbose_p) fprintf (stderr, "%s: added %d%% bevel (%d px)\n", progname, bevel_pct, bevel_size); } *pbP = pb; } static void paste (const char *paste_file, const char *base_file, double from_scale, double opacity, int bevel_pct, int from_x, int from_y, int to_x, int to_y, int w, int h) { GdkPixbuf *paste_pb; GdkPixbuf *base_pb; int paste_w, paste_h; int base_w, base_h; paste_pb = load_pixbuf (paste_file); base_pb = load_pixbuf (base_file); paste_w = gdk_pixbuf_get_width (paste_pb); paste_h = gdk_pixbuf_get_height (paste_pb); base_w = gdk_pixbuf_get_width (base_pb); base_h = gdk_pixbuf_get_height (base_pb); if (verbose_p) { fprintf (stderr, "%s: loaded %s: %dx%d\n", progname, base_file, base_w, base_h); fprintf (stderr, "%s: loaded %s: %dx%d\n", progname, paste_file, paste_w, paste_h); } if (from_scale != 1.0) { int new_w = paste_w * from_scale; int new_h = paste_h * from_scale; GdkPixbuf *new_pb = gdk_pixbuf_scale_simple (paste_pb, new_w, new_h, GDK_INTERP_HYPER); g_object_unref (paste_pb); paste_pb = new_pb; paste_w = gdk_pixbuf_get_width (paste_pb); paste_h = gdk_pixbuf_get_height (paste_pb); if (verbose_p) fprintf (stderr, "%s: %s: scaled to %dx%d (%.2f)\n", progname, paste_file, paste_w, paste_h, from_scale); } if (w == 0) w = paste_w - from_x; if (h == 0) h = paste_h - from_y; { int ofx = from_x; int ofy = from_y; int otx = to_x; int oty = to_y; int ow = w; int oh = h; int clipped = 0; if (from_x < 0) /* from left out of bounds */ { w += from_x; from_x = 0; clipped = 1; } if (from_y < 0) /* from top out of bounds */ { h += from_y; from_y = 0; clipped = 1; } if (to_x < 0) /* to left out of bounds */ { w += to_x; from_x -= to_x; to_x = 0; clipped = 1; } if (to_y < 0) /* to top out of bounds */ { h += to_y; from_y -= to_y; to_y = 0; clipped = 1; } if (from_x + w > paste_w) /* from right out of bounds */ { w = paste_w - from_x; clipped = 1; } if (from_y + h > paste_h) /* from bottom out of bounds */ { h = paste_h - from_y; clipped = 1; } if (to_x + w > base_w) /* to right out of bounds */ { w = base_w - to_x; clipped = 1; } if (to_y + h > base_h) /* to bottom out of bounds */ { h = base_h - to_y; clipped = 1; } if (clipped && verbose_p) { fprintf (stderr, "clipped from: %dx%d %d,%d %d,%d\n", ow, oh, ofx, ofy, otx, oty); fprintf (stderr, "clipped to: %dx%d %d,%d %d,%d\n", w, h, from_x, from_y, to_x, to_y); } } if (bevel_pct > 0) bevel_image (&paste_pb, bevel_pct, from_x, from_y, w, h); if (opacity == 1.0 && bevel_pct == 0) gdk_pixbuf_copy_area (paste_pb, from_x, from_y, w, h, base_pb, to_x, to_y); else { from_x++; /* gdk_pixbuf_composite gets confused about the bevel: */ from_y++; /* it leaves a stripe on the top and left if we try to */ to_x++; /* start at 0,0, so pull it right and down by 1 pixel. */ to_y++; /* (problem seen in gtk2-2.4.14-2.fc3) */ w--; h--; if (w > 0 && h > 0) gdk_pixbuf_composite (paste_pb, base_pb, to_x, to_y, w, h, to_x - from_x, to_y - from_y, 1.0, 1.0, GDK_INTERP_HYPER, opacity * 255); } if (verbose_p) fprintf (stderr, "%s: pasted %dx%d from %d,%d to %d,%d\n", progname, paste_w, paste_h, from_x, from_y, to_x, to_y); g_object_unref (paste_pb); write_pixbuf (base_pb, base_file); g_object_unref (base_pb); } static void write_pixbuf (GdkPixbuf *pb, const char *file) { int jpeg_quality = 85; int w = gdk_pixbuf_get_width (pb); int h = gdk_pixbuf_get_height (pb); guchar *data = gdk_pixbuf_get_pixels (pb); int ww = gdk_pixbuf_get_rowstride (pb); int channels = gdk_pixbuf_get_n_channels (pb); struct jpeg_compress_struct cinfo; struct jpeg_error_mgr jerr; FILE *out; if (channels != 3) { fprintf (stderr, "%s: %d channels?\n", progname, channels); exit (1); } cinfo.err = jpeg_std_error (&jerr); jpeg_create_compress (&cinfo); out = fopen (file, "wb"); if (!out) { char buf[255]; sprintf (buf, "%.100s: %.100s", progname, file); perror (buf); exit (1); } else if (verbose_p) fprintf (stderr, "%s: writing %s...", progname, file); jpeg_stdio_dest (&cinfo, out); cinfo.image_width = w; cinfo.image_height = h; cinfo.input_components = channels; cinfo.in_color_space = JCS_RGB; jpeg_set_defaults (&cinfo); jpeg_simple_progression (&cinfo); jpeg_set_quality (&cinfo, jpeg_quality, TRUE); jpeg_start_compress (&cinfo, TRUE); add_jpeg_comment (&cinfo); { guchar *d = data; guchar *end = d + (ww * h); while (d < end) { jpeg_write_scanlines (&cinfo, &d, 1); d += ww; } } jpeg_finish_compress (&cinfo); jpeg_destroy_compress (&cinfo); if (verbose_p) { struct stat st; fflush (out); if (fstat (fileno (out), &st)) { char buf[255]; sprintf (buf, "%.100s: %.100s", progname, file); perror (buf); exit (1); } fprintf (stderr, " %luK\n", ((unsigned long) st.st_size + 1023) / 1024); } fclose (out); } static void add_jpeg_comment (struct jpeg_compress_struct *cinfo) { time_t now = time ((time_t *) 0); struct tm *tm = localtime (&now); const char fmt[] = "\r\n" " Generated by WebCollage: Exterminate All Rational Thought. \r\n" " Copyright (c) 1999-%Y by Jamie Zawinski \r\n" "\r\n" " https://www.jwz.org/webcollage/ \r\n" "\r\n" " This is what the web looked like on %d %b %Y at %I:%M:%S %p %Z. \r\n" "\r\n"; char comment[sizeof(fmt) + 100]; strftime (comment, sizeof(comment)-1, fmt, tm); jpeg_write_marker (cinfo, JPEG_COM, (unsigned char *) comment, strlen (comment)); } static void usage (void) { fprintf (stderr, "usage: %s [-v] paste-file base-file\n" "\t from-scale opacity\n" "\t from-x from-y to-x to-y w h\n" "\n" "\t Pastes paste-file into base-file.\n" "\t base-file will be overwritten (with JPEG data.)\n" "\t scaling is applied first: coordinates apply to scaled image.\n", progname); exit (1); } int main (int argc, char **argv) { int i; char *paste_file, *base_file, *s, dummy; double from_scale, opacity; int from_x, from_y, to_x, to_y, w, h, bevel_pct; i = 0; progname = argv[i++]; s = strrchr (progname, '/'); if (s) progname = s+1; if (argc != 11 && argc != 12) usage(); if (!strcmp(argv[i], "-v")) verbose_p++, i++; paste_file = argv[i++]; base_file = argv[i++]; if (*paste_file == '-') usage(); if (*base_file == '-') usage(); s = argv[i++]; if (1 != sscanf (s, " %lf %c", &from_scale, &dummy)) usage(); if (from_scale <= 0 || from_scale > 100) usage(); s = argv[i++]; if (1 != sscanf (s, " %lf %c", &opacity, &dummy)) usage(); if (opacity <= 0 || opacity > 1) usage(); s = argv[i++]; if (1 != sscanf (s, " %d %c", &from_x, &dummy)) usage(); s = argv[i++]; if (1 != sscanf (s, " %d %c", &from_y, &dummy)) usage(); s = argv[i++]; if (1 != sscanf (s, " %d %c", &to_x, &dummy)) usage(); s = argv[i++]; if (1 != sscanf (s, " %d %c", &to_y, &dummy)) usage(); s = argv[i++]; if (1 != sscanf (s, " %d %c", &w, &dummy)) usage(); s = argv[i++]; if (1 != sscanf (s, " %d %c", &h, &dummy)) usage(); bevel_pct = 10; /* #### */ if (w < 0) usage(); if (h < 0) usage(); #ifdef HAVE_GTK2 #if !GLIB_CHECK_VERSION(2, 36 ,0) g_type_init (); #endif #endif /* HAVE_GTK2 */ paste (paste_file, base_file, from_scale, opacity, bevel_pct, from_x, from_y, to_x, to_y, w, h); exit (0); } #endif /* HAVE_GDK_PIXBUF && HAVE_JPEGLIB -- whole file */ xscreensaver-5.36/hacks/twang.c000644 000767 000024 00000052167 12732127303 016526 0ustar00jwzstaff000000 000000 /* twang, twist around screen bits, v1.3 * by Dan Bornstein, danfuzz@milk.com * Copyright (c) 2003 Dan Bornstein. All rights reserved. * * 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. * * See the included man page for more details. */ #include #include "screenhack.h" #ifdef HAVE_XSHM_EXTENSION #include "xshm.h" #endif #define FLOAT double /* random float in the range (-1..1) */ #define RAND_FLOAT_PM1 \ (((FLOAT) ((random() >> 8) & 0xffff)) / ((FLOAT) 0x10000) * 2 - 1) /* random float in the range (0..1) */ #define RAND_FLOAT_01 \ (((FLOAT) ((random() >> 8) & 0xffff)) / ((FLOAT) 0x10000)) typedef struct { int x; /* x coordinate of the center of the tile */ int y; /* y coordinate of the center of the tile */ FLOAT angle; /* angle of the tile (-pi..pi) */ FLOAT zoom; /* log of the zoom of the tile (-1..1) */ FLOAT vAngle; /* angular velocity (-pi/4..pi/4) */ FLOAT vZoom; /* zoomular velocity (-0.25..0.25) */ } Tile; struct state { Display *dpy; Window window; int delay; /* delay (usec) between iterations */ int duration; /* time (sec) before loading new image */ int maxColumns; /* the maximum number of columns of tiles */ int maxRows; /* the maximum number of rows of tiles */ int tileSize; /* the size (width and height) of a tile */ int borderWidth; /* the width of the border around each tile */ FLOAT eventChance; /* the chance, per iteration, of an interesting event happening */ FLOAT friction; /* friction: the fraction (0..1) by which velocity decreased per iteration */ FLOAT springiness; /* springiness: the fraction (0..1) of the orientation that turns into velocity towards the center */ FLOAT transference; /* transference: the fraction (0..1) of the orientations of orthogonal neighbors that turns into velocity (in the same direction as the orientation) */ int windowWidth; /* width and height of the window */ int windowHeight; Screen *screen; /* the screen to draw on */ XImage *sourceImage; /* image source of stuff to draw */ XImage *workImage; /* work area image, used when rendering */ GC backgroundGC; /* GC for the background color */ GC foregroundGC; /* GC for the foreground color */ GC borderGC; /* GC for the border color */ unsigned long backgroundPixel; /* background color as a pixel value */ unsigned long borderPixel; /* border color as a pixel value */ Tile *tiles; /* array of tiles (left->right, top->bottom, row major) */ int rows; /* number of rows of tiles */ int columns; /* number of columns of tiles */ Tile **sortedTiles; /* array of tile pointers, sorted by zoom */ int tileCount; /* total number of tiles */ time_t start_time; async_load_state *img_loader; Pixmap pm; Bool useShm; /* whether or not to use xshm */ #ifdef HAVE_XSHM_EXTENSION XShmSegmentInfo shmInfo; #endif }; #define TILE_AT(col,row) (&st->tiles[(row) * st->columns + (col)]) #define MAX_VANGLE (M_PI / 4.0) #define MAX_VZOOM 0.25 #define RAND_ANGLE (RAND_FLOAT_PM1 * M_PI) #define RAND_ZOOM (RAND_FLOAT_PM1) #define RAND_VANGLE (RAND_FLOAT_PM1 * MAX_VANGLE) #define RAND_VZOOM (RAND_FLOAT_PM1 * MAX_VZOOM) /* * overall setup stuff */ /* grab the source image */ static void grabImage_start (struct state *st, XWindowAttributes *xwa) { /* On MacOS X11, XGetImage on a Window often gets an inexplicable BadMatch, possibly due to the window manager having occluded something? It seems nondeterministic. Loading the image into a pixmap instead fixes it. */ if (st->pm) XFreePixmap (st->dpy, st->pm); st->pm = XCreatePixmap (st->dpy, st->window, xwa->width, xwa->height, xwa->depth); st->start_time = time ((time_t *) 0); st->img_loader = load_image_async_simple (0, xwa->screen, st->window, st->pm, 0, 0); } static void grabImage_done (struct state *st) { XWindowAttributes xwa; XGetWindowAttributes (st->dpy, st->window, &xwa); st->start_time = time ((time_t *) 0); if (st->sourceImage) XDestroyImage (st->sourceImage); st->sourceImage = XGetImage (st->dpy, st->pm, 0, 0, st->windowWidth, st->windowHeight, ~0L, ZPixmap); if (st->workImage) XDestroyImage (st->workImage); st->workImage = NULL; #ifdef HAVE_XSHM_EXTENSION if (st->useShm) { st->workImage = create_xshm_image (st->dpy, xwa.visual, xwa.depth, ZPixmap, 0, &st->shmInfo, st->windowWidth, st->windowHeight); if (!st->workImage) { st->useShm = False; fprintf (stderr, "create_xshm_image failed\n"); } } if (st->workImage == NULL) #endif /* HAVE_XSHM_EXTENSION */ /* just use XSubImage to acquire the right visual, depth, etc; * easier than the other alternatives */ st->workImage = XSubImage (st->sourceImage, 0, 0, st->windowWidth, st->windowHeight); } /* set up the system */ static void setup (struct state *st) { XWindowAttributes xgwa; XGCValues gcv; XGetWindowAttributes (st->dpy, st->window, &xgwa); st->screen = xgwa.screen; st->windowWidth = xgwa.width; st->windowHeight = xgwa.height; gcv.line_width = st->borderWidth; gcv.foreground = get_pixel_resource (st->dpy, xgwa.colormap, "borderColor", "BorderColor"); st->borderPixel = gcv.foreground; st->borderGC = XCreateGC (st->dpy, st->window, GCForeground | GCLineWidth, &gcv); gcv.foreground = get_pixel_resource (st->dpy, xgwa.colormap, "background", "Background"); st->backgroundPixel = gcv.foreground; st->backgroundGC = XCreateGC (st->dpy, st->window, GCForeground, &gcv); gcv.foreground = get_pixel_resource (st->dpy, xgwa.colormap, "foreground", "Foreground"); st->foregroundGC = XCreateGC (st->dpy, st->window, GCForeground, &gcv); grabImage_start (st, &xgwa); } /* * the simulation */ /* event: randomize all the angular velocities */ static void randomizeAllAngularVelocities (struct state *st) { int c; int r; for (r = 0; r < st->rows; r++) { for (c = 0; c < st->columns; c++) { TILE_AT (c, r)->vAngle = RAND_VANGLE; } } } /* event: randomize all the zoomular velocities */ static void randomizeAllZoomularVelocities (struct state *st) { int c; int r; for (r = 0; r < st->rows; r++) { for (c = 0; c < st->columns; c++) { TILE_AT (c, r)->vZoom = RAND_VZOOM; } } } /* event: randomize all the velocities */ static void randomizeAllVelocities (struct state *st) { randomizeAllAngularVelocities (st); randomizeAllZoomularVelocities (st); } /* event: randomize all the angular orientations */ static void randomizeAllAngularOrientations (struct state *st) { int c; int r; for (r = 0; r < st->rows; r++) { for (c = 0; c < st->columns; c++) { TILE_AT (c, r)->angle = RAND_ANGLE; } } } /* event: randomize all the zoomular orientations */ static void randomizeAllZoomularOrientations (struct state *st) { int c; int r; for (r = 0; r < st->rows; r++) { for (c = 0; c < st->columns; c++) { TILE_AT (c, r)->zoom = RAND_ZOOM; } } } /* event: randomize all the orientations */ static void randomizeAllOrientations (struct state *st) { randomizeAllAngularOrientations (st); randomizeAllZoomularOrientations (st); } /* event: randomize everything */ static void randomizeEverything (struct state *st) { randomizeAllVelocities (st); randomizeAllOrientations (st); } /* event: pick one tile and randomize all its stats */ static void randomizeOneTile (struct state *st) { int c = RAND_FLOAT_01 * st->columns; int r = RAND_FLOAT_01 * st->rows; Tile *t = TILE_AT (c, r); t->angle = RAND_ANGLE; t->zoom = RAND_ZOOM; t->vAngle = RAND_VANGLE; t->vZoom = RAND_VZOOM; } /* event: pick one row and randomize everything about each of its tiles */ static void randomizeOneRow (struct state *st) { int c; int r = RAND_FLOAT_01 * st->rows; for (c = 0; c < st->columns; c++) { Tile *t = TILE_AT (c, r); t->angle = RAND_ANGLE; t->zoom = RAND_ZOOM; t->vAngle = RAND_VANGLE; t->vZoom = RAND_VZOOM; } } /* event: pick one column and randomize everything about each of its tiles */ static void randomizeOneColumn (struct state *st) { int c = RAND_FLOAT_01 * st->columns; int r; for (r = 0; r < st->rows; r++) { Tile *t = TILE_AT (c, r); t->angle = RAND_ANGLE; t->zoom = RAND_ZOOM; t->vAngle = RAND_VANGLE; t->vZoom = RAND_VZOOM; } } /* do model event processing */ static void modelEvents (struct state *st) { int which; if (RAND_FLOAT_01 > st->eventChance) { return; } which = RAND_FLOAT_01 * 10; switch (which) { case 0: randomizeAllAngularVelocities (st); break; case 1: randomizeAllZoomularVelocities (st); break; case 2: randomizeAllVelocities (st); break; case 3: randomizeAllAngularOrientations (st); break; case 4: randomizeAllZoomularOrientations (st); break; case 5: randomizeAllOrientations (st); break; case 6: randomizeEverything (st); break; case 7: randomizeOneTile (st); break; case 8: randomizeOneColumn (st); break; case 9: randomizeOneRow (st); break; } } /* update the model for one iteration */ static void updateModel (struct state *st) { int r; int c; /* for each tile, decrease its velocities according to the friction, * and increase them based on its current orientation and the orientations * of its orthogonal neighbors */ for (r = 0; r < st->rows; r++) { for (c = 0; c < st->columns; c++) { Tile *t = TILE_AT (c, r); FLOAT a = t->angle; FLOAT z = t->zoom; FLOAT va = t->vAngle; FLOAT vz = t->vZoom; va -= t->angle * st->springiness; vz -= t->zoom * st->springiness; if (c > 0) { Tile *t2 = TILE_AT (c - 1, r); va += (t2->angle - a) * st->transference; vz += (t2->zoom - z) * st->transference; } if (c < (st->columns - 1)) { Tile *t2 = TILE_AT (c + 1, r); va += (t2->angle - a) * st->transference; vz += (t2->zoom - z) * st->transference; } if (r > 0) { Tile *t2 = TILE_AT (c, r - 1); va += (t2->angle - a) * st->transference; vz += (t2->zoom - z) * st->transference; } if (r < (st->rows - 1)) { Tile *t2 = TILE_AT (c, r + 1); va += (t2->angle - a) * st->transference; vz += (t2->zoom - z) * st->transference; } va *= (1.0 - st->friction); vz *= (1.0 - st->friction); if (va > MAX_VANGLE) va = MAX_VANGLE; else if (va < -MAX_VANGLE) va = -MAX_VANGLE; t->vAngle = va; if (vz > MAX_VZOOM) vz = MAX_VZOOM; else if (vz < -MAX_VZOOM) vz = -MAX_VZOOM; t->vZoom = vz; } } /* for each tile, update its orientation based on its velocities */ for (r = 0; r < st->rows; r++) { for (c = 0; c < st->columns; c++) { Tile *t = TILE_AT (c, r); FLOAT a = t->angle + t->vAngle; FLOAT z = t->zoom + t->vZoom; if (a > M_PI) a = M_PI; else if (a < -M_PI) a = -M_PI; t->angle = a; if (z > 1.0) z = 1.0; else if (z < -1.0) z = -1.0; t->zoom = z; } } } /* the comparator to us to sort the tiles (used immediately below); it'd * sure be nice if C allowed inner functions (or jeebus-forbid *real * closures*!) */ static int sortTilesComparator (const void *v1, const void *v2) { Tile *t1 = *(Tile **) v1; Tile *t2 = *(Tile **) v2; if (t1->zoom < t2->zoom) { return -1; } if (t1->zoom > t2->zoom) { return 1; } return 0; } /* sort the tiles in sortedTiles by zoom */ static void sortTiles (struct state *st) { qsort (st->sortedTiles, st->tileCount, sizeof (Tile *), sortTilesComparator); } /* render the given tile */ static void renderTile (struct state *st, Tile *t) { /* note: the zoom as stored per tile is log-based (centered on 0, with * 0 being no zoom, but the range for zoom-as-drawn is 0.4..2.5, * hence the alteration of t->zoom, below */ int x, y; int tx = t->x; int ty = t->y; FLOAT zoom = pow (2.5, t->zoom); FLOAT ang = -t->angle; FLOAT sinAng = sin (ang); FLOAT cosAng = cos (ang); FLOAT innerBorder = (st->tileSize - st->borderWidth) / 2.0; FLOAT outerBorder = innerBorder + st->borderWidth; int maxCoord = outerBorder * zoom * (fabs (sinAng) + fabs (cosAng)); int minX = tx - maxCoord; int maxX = tx + maxCoord; int minY = ty - maxCoord; int maxY = ty + maxCoord; FLOAT prey; if (minX < 0) minX = 0; if (maxX > st->windowWidth) maxX = st->windowWidth; if (minY < 0) minY = 0; if (maxY > st->windowHeight) maxY = st->windowHeight; sinAng /= zoom; cosAng /= zoom; for (y = minY, prey = y - ty; y < maxY; y++, prey++) { FLOAT prex = minX - tx; FLOAT srcx = prex * cosAng - prey * sinAng; FLOAT srcy = prex * sinAng + prey * cosAng; for (x = minX; x < maxX; x++, srcx += cosAng, srcy += sinAng) { if ((srcx < -innerBorder) || (srcx >= innerBorder) || (srcy < -innerBorder) || (srcy >= innerBorder)) { if ((srcx < -outerBorder) || (srcx >= outerBorder) || (srcy < -outerBorder) || (srcy >= outerBorder)) { continue; } XPutPixel (st->workImage, x, y, st->borderPixel); } else { unsigned long p = XGetPixel (st->sourceImage, srcx + tx, srcy + ty); XPutPixel (st->workImage, x, y, p); } } } } /* render and display the current model */ static void renderFrame (struct state *st) { int n; /* This assumes black is zero. */ memset (st->workImage->data, 0, st->workImage->bytes_per_line * st->workImage->height); sortTiles (st); for (n = 0; n < st->tileCount; n++) { renderTile (st, st->sortedTiles[n]); } #ifdef HAVE_XSHM_EXTENSION if (st->useShm) XShmPutImage (st->dpy, st->window, st->backgroundGC, st->workImage, 0, 0, 0, 0, st->windowWidth, st->windowHeight, False); else #endif /* HAVE_XSHM_EXTENSION */ XPutImage (st->dpy, st->window, st->backgroundGC, st->workImage, 0, 0, 0, 0, st->windowWidth, st->windowHeight); } /* set up the model */ static void setupModel (struct state *st) { int c; int r; int leftX; /* x of the center of the top-left tile */ int topY; /* y of the center of the top-left tile */ if (st->tileSize > (st->windowWidth / 2)) { st->tileSize = st->windowWidth / 2; } if (st->tileSize > (st->windowHeight / 2)) { st->tileSize = st->windowHeight / 2; } st->columns = st->tileSize ? st->windowWidth / st->tileSize : 0; st->rows = st->tileSize ? st->windowHeight / st->tileSize : 0; if ((st->maxColumns != 0) && (st->columns > st->maxColumns)) { st->columns = st->maxColumns; } if ((st->maxRows != 0) && (st->rows > st->maxRows)) { st->rows = st->maxRows; } st->tileCount = st->rows * st->columns; leftX = (st->windowWidth - (st->columns * st->tileSize) + st->tileSize) / 2; topY = (st->windowHeight - (st->rows * st->tileSize) + st->tileSize) / 2; if (st->tileCount < 1) st->tileCount = 1; st->tiles = calloc (st->tileCount, sizeof (Tile)); st->sortedTiles = calloc (st->tileCount, sizeof (Tile *)); for (r = 0; r < st->rows; r++) { for (c = 0; c < st->columns; c++) { Tile *t = TILE_AT (c, r); t->x = leftX + c * st->tileSize; t->y = topY + r * st->tileSize; st->sortedTiles[c + r * st->columns] = t; } } randomizeEverything (st); } /* do one iteration */ static unsigned long twang_draw (Display *dpy, Window window, void *closure) { struct state *st = (struct state *) closure; if (st->img_loader) /* still loading */ { st->img_loader = load_image_async_simple (st->img_loader, 0, 0, 0, 0, 0); if (! st->img_loader) { /* just finished */ grabImage_done (st); } return st->delay; } if (!st->img_loader && st->start_time + st->duration < time ((time_t *) 0)) { XWindowAttributes xgwa; XGetWindowAttributes (st->dpy, st->window, &xgwa); grabImage_start (st, &xgwa); return st->delay; } modelEvents (st); updateModel (st); renderFrame (st); return st->delay; } static void twang_reshape (Display *dpy, Window window, void *closure, unsigned int w, unsigned int h) { } static Bool twang_event (Display *dpy, Window window, void *closure, XEvent *event) { struct state *st = (struct state *) closure; if (screenhack_event_helper (dpy, window, event)) { st->start_time = 0; return True; } return False; } static void twang_free (Display *dpy, Window window, void *closure) { struct state *st = (struct state *) closure; if (st->pm) XFreePixmap (dpy, st->pm); free (st); } /* main and options and stuff */ /* initialize the user-specifiable params */ static void initParams (struct state *st) { int problems = 0; st->borderWidth = get_integer_resource (st->dpy, "borderWidth", "Integer"); if (st->borderWidth < 0) { fprintf (stderr, "error: border width must be at least 0\n"); problems = 1; } st->delay = get_integer_resource (st->dpy, "delay", "Delay"); if (st->delay < 0) { fprintf (stderr, "error: delay must be at least 0\n"); problems = 1; } st->duration = get_integer_resource (st->dpy, "duration", "Seconds"); if (st->duration < 1) st->duration = 1; st->eventChance = get_float_resource (st->dpy, "eventChance", "Double"); if ((st->eventChance < 0.0) || (st->eventChance > 1.0)) { fprintf (stderr, "error: eventChance must be in the range 0..1\n"); problems = 1; } st->friction = get_float_resource (st->dpy, "friction", "Double"); if ((st->friction < 0.0) || (st->friction > 1.0)) { fprintf (stderr, "error: friction must be in the range 0..1\n"); problems = 1; } st->maxColumns = get_integer_resource (st->dpy, "maxColumns", "Integer"); if (st->maxColumns < 0) { fprintf (stderr, "error: max columns must be at least 0\n"); problems = 1; } st->maxRows = get_integer_resource (st->dpy, "maxRows", "Integer"); if (st->maxRows < 0) { fprintf (stderr, "error: max rows must be at least 0\n"); problems = 1; } st->springiness = get_float_resource (st->dpy, "springiness", "Double"); if ((st->springiness < 0.0) || (st->springiness > 1.0)) { fprintf (stderr, "error: springiness must be in the range 0..1\n"); problems = 1; } st->tileSize = get_integer_resource (st->dpy, "tileSize", "Integer"); if (st->tileSize < 1) { fprintf (stderr, "error: tile size must be at least 1\n"); problems = 1; } st->transference = get_float_resource (st->dpy, "transference", "Double"); if ((st->transference < 0.0) || (st->transference > 1.0)) { fprintf (stderr, "error: transference must be in the range 0..1\n"); problems = 1; } #ifdef HAVE_XSHM_EXTENSION st->useShm = get_boolean_resource (st->dpy, "useSHM", "Boolean"); #endif if (problems) { exit (1); } } static void * twang_init (Display *dpy, Window win) { struct state *st = (struct state *) calloc (1, sizeof(*st)); st->dpy = dpy; st->window = win; initParams (st); setup (st); setupModel (st); return st; } static const char *twang_defaults [] = { ".background: black", ".foreground: white", "*borderColor: blue", "*borderWidth: 3", "*delay: 10000", "*duration: 120", "*eventChance: 0.01", "*friction: 0.05", "*maxColumns: 0", "*maxRows: 0", "*springiness: 0.1", "*tileSize: 120", "*transference: 0.025", #ifdef HAVE_XSHM_EXTENSION "*useSHM: True", #else "*useSHM: False", #endif #ifdef HAVE_MOBILE "*ignoreRotation: True", "*rotateImages: True", #endif 0 }; static XrmOptionDescRec twang_options [] = { { "-border-color", ".borderColor", XrmoptionSepArg, 0 }, { "-border-width", ".borderWidth", XrmoptionSepArg, 0 }, { "-delay", ".delay", XrmoptionSepArg, 0 }, { "-duration", ".duration", XrmoptionSepArg, 0 }, { "-event-chance", ".eventChance", XrmoptionSepArg, 0 }, { "-friction", ".friction", XrmoptionSepArg, 0 }, { "-max-columns", ".maxColumns", XrmoptionSepArg, 0 }, { "-max-rows", ".maxRows", XrmoptionSepArg, 0 }, { "-springiness", ".springiness", XrmoptionSepArg, 0 }, { "-tile-size", ".tileSize", XrmoptionSepArg, 0 }, { "-transference", ".transference", XrmoptionSepArg, 0 }, { "-shm", ".useSHM", XrmoptionNoArg, "True" }, { "-no-shm", ".useSHM", XrmoptionNoArg, "False" }, { 0, 0, 0, 0 } }; XSCREENSAVER_MODULE ("Twang", twang) xscreensaver-5.36/hacks/apollonian.c000644 000767 000024 00000054656 12701612216 017545 0ustar00jwzstaff000000 000000 /* -*- Mode: C; tab-width: 4 -*- */ /* apollonian --- Apollonian Circles */ #if 0 static const char sccsid[] = "@(#)apollonian.c 5.02 2001/07/01 xlockmore"; #endif /*- * Copyright (c) 2000, 2001 by Allan R. Wilks . * * Permission to use, copy, modify, and distribute this software and its * documentation for any purpose and without fee is hereby granted, * provided that the above copyright notice appear in all copies and that * both that copyright notice and this permission notice appear in * supporting documentation. * * This file is provided AS IS with no warranties of any kind. The author * shall have no liability with respect to the infringement of copyrights, * trade secrets or any patents by this file or any part thereof. In no * event will the author be liable for any lost revenue or profits or * other special, indirect and consequential damages. * * radius r = 1 / c (curvature) * * Descartes Circle Theorem: (a, b, c, d are curvatures of tangential circles) * Let a, b, c, d be the curvatures of for mutually (externally) tangent * circles in the plane. Then * a^2 + b^2 + c^2 + d^2 = (a + b + c + d)^2 / 2 * * Complex Descartes Theorem: If the oriented curvatues and (complex) centers * of an oriented Descrates configuration in the plane are a, b, c, d and * w, x, y, z respectively, then * a^2*w^2 + b^2*x^2 + c^2*y^2 + d^2*z^2 = (aw + bx + cy + dz)^2 / 2 * In addition these quantities satisfy * a^2*w + b^2*x + c^2*y + d^2*z = (aw + bx + cy + dz)(a + b + c + d) / 2 * * Enumerate root integer Descartes quadruples (a,b,c,d) satisfying the * Descartes condition: * 2(a^2+b^2+c^2+d^2) = (a+b+c+d)^2 * i.e., quadruples for which no application of the "pollinate" operator * z <- 2(a+b+c+d) - 3*z, * where z is in {a,b,c,d}, gives a quad of strictly smaller sum. This * is equivalent to the condition: * sum(a,b,c,d) >= 2*max(a,b,c,d) * which, because of the Descartes condition, is equivalent to * sum(a^2,b^2,c^2,d^2) >= 2*max(a,b,c,d)^2 * * * Todo: * Add a small font * * Revision History: * 25-Jun-2001: Converted from C and Postscript code by David Bagley * Original code by Allan R. Wilks . * * From Circle Math Science News April 21, 2001 VOL. 254-255 * http://www.sciencenews.org/20010421/toc.asp * Apollonian Circle Packings Assorted papers from Ronald L Graham, * Jeffrey Lagarias, Colin Mallows, Allan Wilks, Catherine Yan * http://front.math.ucdavis.edu/math.NT/0009113 * http://front.math.ucdavis.edu/math.MG/0101066 * http://front.math.ucdavis.edu/math.MG/0010298 * http://front.math.ucdavis.edu/math.MG/0010302 * http://front.math.ucdavis.edu/math.MG/0010324 */ #ifdef STANDALONE # define MODE_apollonian # define DEFAULTS "*delay: 1000000 \n" \ "*count: 64 \n" \ "*cycles: 20 \n" \ "*ncolors: 64 \n" \ "*font: fixed" "\n" \ "*fpsTop: true \n" \ "*fpsSolid: true \n" \ "*ignoreRotation: True" \ # define refresh_apollonian 0 # include "xlockmore.h" /* in xscreensaver distribution */ # include "erase.h" #else /* STANDALONE */ # include "xlock.h" /* in xlockmore distribution */ #endif /* STANDALONE */ #ifdef MODE_apollonian #define DEF_ALTGEOM "True" #define DEF_LABEL "True" static Bool altgeom; static Bool label; static XrmOptionDescRec opts[] = { {"-altgeom", ".apollonian.altgeom", XrmoptionNoArg, "on"}, {"+altgeom", ".apollonian.altgeom", XrmoptionNoArg, "off"}, {"-label", ".apollonian.label", XrmoptionNoArg, "on"}, {"+label", ".apollonian.label", XrmoptionNoArg, "off"}, }; static argtype vars[] = { {&altgeom, "altgeom", "AltGeom", DEF_ALTGEOM, t_Bool}, {&label, "label", "Label", DEF_LABEL, t_Bool}, }; static OptionStruct desc[] = { {"-/+altgeom", "turn on/off alternate geometries (off euclidean space, on includes spherical and hyperbolic)"}, {"-/+label", "turn on/off alternate space and number labeling"}, }; ENTRYPOINT ModeSpecOpt apollonian_opts = {sizeof opts / sizeof opts[0], opts, sizeof vars / sizeof vars[0], vars, desc}; #ifdef DOFONT extern XFontStruct *getFont(Display * display); #endif #ifdef USE_MODULES ModStruct apollonian_description = {"apollonian", "init_apollonian", "draw_apollonian", "release_apollonian", "init_apollonian", "init_apollonian", (char *) NULL, &apollonian_opts, 1000000, 64, 20, 1, 64, 1.0, "", "Shows Apollonian Circles", 0, NULL}; #endif typedef struct { int a, b, c, d; } apollonian_quadruple; typedef struct { double e; /* euclidean bend */ double s; /* spherical bend */ double h; /* hyperbolic bend */ double x, y; /* euclidean bend times euclidean position */ } circle; enum space { euclidean = 0, spherical, hyperbolic }; static const char * space_string[] = { "euclidean", "spherical", "hyperbolic" }; /* Generate Apollonian packing starting with a quadruple of circles. The four input lines each contain the 5-tuple (e,s,h,x,y) representing the circle with radius 1/e and center (x/e,y/e). The s and h is propagated like e, x and y, but can differ from e so as to represent different geometries, spherical and hyperbolic, respectively. The "standard" picture, for example (-1, 2, 2, 3), can be labeled for the three geometries. Origins of circles z1, z2, z3, z4 a * z1 = 0 b * z2 = (a+b)/a c * z3 = (q123 + a * i)^2/(a*(a+b)) where q123 = sqrt(a*b+a*c+b*c) d * z4 = (q124 + a * i)^2/(a*(a+b)) where q124 = q123 - a - b If (e,x,y) represents the Euclidean circle (1/e,x/e,y/e) (so that e is the label in the standard picture) then the "spherical label" is (e^2+x^2+y^2-1)/(2*e) (an integer!) and the "hyperbolic label", is calulated by h + s = e. */ static circle examples[][4] = { { /* double semi-bounded */ { 0, 0, 0, 0, 1}, { 0, 0, 0, 0, -1}, { 1, 1, 1, -1, 0}, { 1, 1, 1, 1, 0} }, #if 0 { /* standard */ {-1, 0, -1, 0, 0}, { 2, 1, 1, 1, 0}, { 2, 1, 1, -1, 0}, { 3, 2, 1, 0, 2} }, { /* next simplest */ {-2, -1, -1, 0.0, 0}, { 3, 2, 1, 0.5, 0}, { 6, 3, 3, -2.0, 0}, { 7, 4, 3, -1.5, 2} }, { /* */ {-3, -2, -1, 0.0, 0}, { 4, 3, 1, 1.0 / 3.0, 0}, {12, 7, 5, -3.0, 0}, {13, 8, 5, -8.0 / 3.0, 2} }, { /* Mickey */ {-3, -2, -1, 0.0, 0}, { 5, 4, 1, 2.0 / 3.0, 0}, { 8, 5, 3, -4.0 / 3.0, -1}, { 8, 5, 3, -4.0 / 3.0, 1} }, { /* */ {-4, -3, -1, 0.00, 0}, { 5, 4, 1, 0.25, 0}, {20, 13, 7, -4.00, 0}, {21, 14, 7, -3.75, 2} }, { /* Mickey2 */ {-4, -2, -2, 0.0, 0}, { 8, 4, 4, 1.0, 0}, { 9, 5, 4, -0.75, -1}, { 9, 5, 4, -0.75, 1} }, { /* Mickey3 */ {-5, -4, -1, 0.0, 0}, { 7, 6, 1, 0.4, 0}, {18, 13, 5, -2.4, -1}, {18, 13, 5, -2.4, 1} }, { /* */ {-6, -5, -1, 0.0, 0}, { 7, 6, 1, 1.0 / 6.0, 0}, {42, 31, 11, -6.0, 0}, {43, 32, 11, -35.0 / 6.0, 2} }, { /* */ {-6, -3, -3, 0.0, 0}, {10, 5, 5, 2.0 / 3.0, 0}, {15, 8, 7, -1.5, 0}, {19, 10, 9, -5.0 / 6.0, 2} }, { /* asymmetric */ {-6, -5, -1, 0.0, 0.0}, {11, 10, 1, 5.0 / 6.0, 0.0}, {14, 11, 3, -16.0 / 15.0, -0.8}, {15, 12, 3, -0.9, 1.2} }, #endif /* Non integer stuff */ #define DELTA 2.154700538 /* ((3+2*sqrt(3))/3) */ { /* 3 fold symmetric bounded (x, y calculated later) */ { -1, -1, -1, 0.0, 0.0}, {DELTA, DELTA, DELTA, 1.0, 0.0}, {DELTA, DELTA, DELTA, 1.0, -1.0}, {DELTA, DELTA, DELTA, -1.0, 1.0} }, { /* semi-bounded (x, y calculated later) */ #define ALPHA 2.618033989 /* ((3+sqrt(5))/2) */ { 1.0, 1.0, 1.0, 0, 0}, { 0.0, 0.0, 0.0, 0, -1}, {1.0/(ALPHA*ALPHA), 1.0/(ALPHA*ALPHA), 1.0/(ALPHA*ALPHA), -1, 0}, { 1.0/ALPHA, 1.0/ALPHA, 1.0/ALPHA, -1, 0} }, { /* unbounded (x, y calculated later) */ /* #define PHI 1.618033989 *//* ((1+sqrt(5))/2) */ #define BETA 2.890053638 /* (PHI+sqrt(PHI)) */ { 1.0, 1.0, 1.0, 0, 0}, {1.0/(BETA*BETA*BETA), 1.0/(BETA*BETA*BETA), 1.0/(BETA*BETA*BETA), 1, 0}, { 1.0/(BETA*BETA), 1.0/(BETA*BETA), 1.0/(BETA*BETA), 1, 0}, { 1.0/BETA, 1.0/BETA, 1.0/BETA, 1, 0} } }; #define PREDEF_CIRCLE_GAMES (sizeof (examples) / (4 * sizeof (circle))) #if 0 Euclidean 0, 0, 1, 1 -1, 2, 2, 3 -2, 3, 6, 7 -3, 5, 8, 8 -4, 8, 9, 9 -3, 4, 12, 13 -6, 11, 14, 15 -5, 7, 18, 18 -6, 10, 15, 19 -7, 12, 17, 20 -4, 5, 20, 21 -9, 18, 19, 22 -8, 13, 21, 24 Spherical 0, 1, 1, 2 -1, 2, 3, 4 -2, 4, 5, 5 -2, 3, 7, 8 Hyperbolic -1, 1, 1, 1 0, 0, 1, 3 -2, 3, 5, 6 -3, 6, 6, 7 #endif typedef struct { int size; XPoint offset; int geometry; circle c1, c2, c3, c4; int color_offset; int count; Bool label, altgeom; apollonian_quadruple *quad; #ifdef DOFONT XFontStruct *font; #endif int time; int game; #ifdef STANDALONE eraser_state *eraser; #endif } apollonianstruct; static apollonianstruct *apollonians = (apollonianstruct *) NULL; #define FONT_HEIGHT 19 #define FONT_WIDTH 15 #define FONT_LENGTH 20 #define MAX_CHAR 10 #define K 2.15470053837925152902 /* 1+2/sqrt(3) */ #define MAXBEND 100 /* Do not want configurable by user since it will take too much time if increased. */ static int gcd(int a, int b) { int r; while (b) { r = a % b; a = b; b = r; } return a; } static int isqrt(int n) { int y; if (n < 0) return -1; y = (int) (sqrt((double) n) + 0.5); return ((n == y*y) ? y : -1); } static void dquad(int n, apollonian_quadruple *quad) { int a, b, c, d; int counter = 0, B, C; for (a = 0; a < MAXBEND; a++) { B = (int) (K * a); for (b = a + 1; b <= B; b++) { C = (int) (((a + b) * (a + b)) / (4.0 * (b - a))); for (c = b; c <= C; c++) { d = isqrt(b*c-a*(b+c)); if (d >= 0 && (gcd(a,gcd(b,c)) <= 1)) { quad[counter].a = -a; quad[counter].b = b; quad[counter].c = c; quad[counter].d = -a+b+c-2*d; if (++counter >= n) { return; } } } } } (void) printf("found only %d below maximum bend of %d\n", counter, MAXBEND); for (; counter < n; counter++) { quad[counter].a = -1; quad[counter].b = 2; quad[counter].c = 2; quad[counter].d = 3; } return; } /* * Given a Descartes quadruple of bends (a,b,c,d), with a<0, find a * quadruple of circles, represented by (bend,bend*x,bend*y), such * that the circles have the given bends and the bends times the * centers are integers. * * This just performs an exaustive search, assuming that the outer * circle has center in the unit square. * * It is always sufficient to look in {(x,y):0<=y<=x<=1/2} for the * center of the outer circle, but this may not lead to a packing * that can be labelled with integer spherical and hyperbolic labels. * To effect the smaller search, replace FOR(a) with * * for (pa = ea/2; pa <= 0; pa++) for (qa = pa; qa <= 0; qa++) */ #define For(v,l,h) for (v = l; v <= h; v++) #define FOR(z) For(p##z,lop##z,hip##z) For(q##z,loq##z,hiq##z) #define H(z) ((e##z*e##z+p##z*p##z+q##z*q##z)%2) #define UNIT(z) ((abs(e##z)-1)*(abs(e##z)-1) >= p##z*p##z+q##z*q##z) #define T(z,w) is_tangent(e##z,p##z,q##z,e##w,p##w,q##w) #define LO(r,z) lo##r##z = iceil(e##z*(r##a+1),ea)-1 #define HI(r,z) hi##r##z = iflor(e##z*(r##a-1),ea)-1 #define B(z) LO(p,z); HI(p,z); LO(q,z); HI(q,z) static int is_quad(int a, int b, int c, int d) { int s; s = a+b+c+d; return 2*(a*a+b*b+c*c+d*d) == s*s; } static Bool is_tangent(int e1, int p1, int q1, int e2, int p2, int q2) { int dx, dy, s; dx = p1*e2 - p2*e1; dy = q1*e2 - q2*e1; s = e1 + e2; return dx*dx + dy*dy == s*s; } static int iflor(int a, int b) { int q; if (b == 0) { (void) printf("iflor: b = 0\n"); return 0; } if (a%b == 0) return a/b; q = abs(a)/abs(b); return ((a<0)^(b<0)) ? -q-1 : q; } static int iceil(int a, int b) { int q; if (b == 0) { (void) printf("iceil: b = 0\n"); return 0; } if (a%b == 0) return a/b; q = abs(a)/abs(b); return ((a<0)^(b<0)) ? -q : 1+q; } static double geom(int geometry, int e, int p, int q) { int g = (geometry == spherical) ? -1 : (geometry == hyperbolic) ? 1 : 0; if (g) return (e*e + (1.0 - p*p - q*q) * g) / (2.0*e); (void) printf("geom: g = 0\n"); return e; } static void cquad(circle *c1, circle *c2, circle *c3, circle *c4) { int ea, eb, ec, ed; int pa, pb, pc, pd; int qa, qb, qc, qd; int lopa, lopb, lopc, lopd; int hipa, hipb, hipc, hipd; int loqa, loqb, loqc, loqd; int hiqa, hiqb, hiqc, hiqd; ea = (int) c1->e; eb = (int) c2->e; ec = (int) c3->e; ed = (int) c4->e; if (ea >= 0) (void) printf("ea = %d\n", ea); if (!is_quad(ea,eb,ec,ed)) (void) printf("Error not quad %d %d %d %d\n", ea, eb, ec, ed); lopa = loqa = ea; hipa = hiqa = 0; FOR(a) { B(b); B(c); B(d); if (H(a) && UNIT(a)) FOR(b) { if (H(b) && T(a,b)) FOR(c) { if (H(c) && T(a,c) && T(b,c)) FOR(d) { if (H(d) && T(a,d) && T(b,d) && T(c,d)) { c1->s = geom(spherical, ea, pa, qa); c1->h = geom(hyperbolic, ea, pa, qa); c2->s = geom(spherical, eb, pb, qb); c2->h = geom(hyperbolic, eb, pb, qb); c3->s = geom(spherical, ec, pc, qc); c3->h = geom(hyperbolic, ec, pc, qc); c4->s = geom(spherical, ed, pd, qd); c4->h = geom(hyperbolic, ed, pd, qd); } } } } } } static void p(ModeInfo *mi, circle c) { apollonianstruct *cp = &apollonians[MI_SCREEN(mi)]; char string[10]; double g, e; int g_width; #ifdef DEBUG (void) printf("c.e=%g c.s=%g c.h=%g c.x=%g c.y=%g\n", c.e, c.s, c.h, c.x, c.y); #endif g = (cp->geometry == spherical) ? c.s : (cp->geometry == hyperbolic) ? c.h : c.e; if (c.e < 0.0) { if (g < 0.0) g = -g; if (MI_NPIXELS(mi) <= 2) XSetForeground(MI_DISPLAY(mi), MI_GC(mi), MI_WHITE_PIXEL(mi)); else XSetForeground(MI_DISPLAY(mi), MI_GC(mi), MI_PIXEL(mi, ((int) ((g + cp->color_offset) * g)) % MI_NPIXELS(mi))); XDrawArc(MI_DISPLAY(mi), MI_WINDOW(mi), MI_GC(mi), ((int) (cp->size * (-cp->c1.e) * (c.x - 1.0) / (-2.0 * c.e) + cp->size / 2.0 + cp->offset.x)), ((int) (cp->size * (-cp->c1.e) * (c.y - 1.0) / (-2.0 * c.e) + cp->size / 2.0 + cp->offset.y)), (int) (cp->c1.e * cp->size / c.e), (int) (cp->c1.e * cp->size / c.e), 0, 23040); if (!cp->label) { #ifdef DEBUG (void) printf("%g\n", -g); #endif return; } (void) sprintf(string, "%g", (g == 0.0) ? 0 : -g); if (cp->size >= 10 * FONT_WIDTH) { /* hard code these to corners */ XDrawString(MI_DISPLAY(mi), MI_WINDOW(mi), MI_GC(mi), ((int) (cp->size * c.x / (2.0 * c.e))) + cp->offset.x, ((int) (cp->size * c.y / (2.0 * c.e))) + FONT_HEIGHT, string, (g == 0.0) ? 1 : ((g < 10.0) ? 2 : ((g < 100.0) ? 3 : 4))); } if (cp->altgeom && MI_HEIGHT(mi) >= 30 * FONT_WIDTH) { XDrawString(MI_DISPLAY(mi), MI_WINDOW(mi), MI_GC(mi), ((int) (cp->size * c.x / (2.0 * c.e) + cp->offset.x)), ((int) (cp->size * c.y / (2.0 * c.e) + MI_HEIGHT(mi) - FONT_HEIGHT / 2)), (char *) space_string[cp->geometry], strlen(space_string[cp->geometry])); } return; } if (MI_NPIXELS(mi) <= 2) XSetForeground(MI_DISPLAY(mi), MI_GC(mi), MI_WHITE_PIXEL(mi)); else XSetForeground(MI_DISPLAY(mi), MI_GC(mi), MI_PIXEL(mi, ((int) ((g + cp->color_offset) * g)) % MI_NPIXELS(mi))); if (c.e == 0.0) { if (c.x == 0.0 && c.y != 0.0) { XDrawLine(MI_DISPLAY(mi), MI_WINDOW(mi), MI_GC(mi), 0, (int) ((c.y + 1.0) * cp->size / 2.0 + cp->offset.y), MI_WIDTH(mi), (int) ((c.y + 1.0) * cp->size / 2.0 + cp->offset.y)); } else if (c.y == 0.0 && c.x != 0.0) { XDrawLine(MI_DISPLAY(mi), MI_WINDOW(mi), MI_GC(mi), (int) ((c.x + 1.0) * cp->size / 2.0 + cp->offset.x), 0, (int) ((c.x + 1.0) * cp->size / 2.0 + cp->offset.x), MI_HEIGHT(mi)); } return; } e = (cp->c1.e >= 0.0) ? 1.0 : -cp->c1.e; XFillArc(MI_DISPLAY(mi), MI_WINDOW(mi), MI_GC(mi), ((int) (cp->size * e * (c.x - 1.0) / (2.0 * c.e) + cp->size / 2.0 + cp->offset.x)), ((int) (cp->size * e * (c.y - 1.0) / (2.0 * c.e) + cp->size / 2.0 + cp->offset.y)), (int) (e * cp->size / c.e), (int) (e * cp->size / c.e), 0, 23040); if (!cp->label) { #ifdef DEBUG (void) printf("%g\n", g); #endif return; } if (MI_NPIXELS(mi) <= 2) XSetForeground(MI_DISPLAY(mi), MI_GC(mi), MI_BLACK_PIXEL(mi)); else XSetForeground(MI_DISPLAY(mi), MI_GC(mi), MI_PIXEL(mi, ((int) ((g + cp->color_offset) * g) + MI_NPIXELS(mi) / 2) % MI_NPIXELS(mi))); g_width = (g < 10.0) ? 1: ((g < 100.0) ? 2 : 3); if (c.e < e * cp->size / (FONT_LENGTH + 5 * g_width) && g < 1000.0) { (void) sprintf(string, "%g", g); XDrawString(MI_DISPLAY(mi), MI_WINDOW(mi), MI_GC(mi), ((int) (cp->size * e * c.x / (2.0 * c.e) + cp->size / 2.0 + cp->offset.x)) - g_width * FONT_WIDTH / 2, ((int) (cp->size * e * c.y / (2.0 * c.e) + cp->size / 2.0 + cp->offset.y)) + FONT_HEIGHT / 2, string, g_width); } } #define BIG 7 static void f(ModeInfo *mi, circle c1, circle c2, circle c3, circle c4, int depth) { apollonianstruct *cp = &apollonians[MI_SCREEN(mi)]; int e = (int) ((cp->c1.e >= 0.0) ? 1.0 : -cp->c1.e); circle c; if (depth > mi->recursion_depth) mi->recursion_depth = depth; c.e = 2*(c1.e+c2.e+c3.e) - c4.e; c.s = 2*(c1.s+c2.s+c3.s) - c4.s; c.h = 2*(c1.h+c2.h+c3.h) - c4.h; c.x = 2*(c1.x+c2.x+c3.x) - c4.x; c.y = 2*(c1.y+c2.y+c3.y) - c4.y; if (c.e == 0 || c.e > cp->size * e || c.x / c.e > BIG || c.y / c.e > BIG || c.x / c.e < -BIG || c.y / c.e < -BIG) return; p(mi, c); f(mi, c2, c3, c, c1, depth+1); f(mi, c1, c3, c, c2, depth+1); f(mi, c1, c2, c, c3, depth+1); } ENTRYPOINT void free_apollonian (Display *display, apollonianstruct *cp) { if (cp->quad != NULL) { (void) free((void *) cp->quad); cp->quad = (apollonian_quadruple *) NULL; } #ifdef DOFONT if (cp->gc != None) { XFreeGC(display, cp->gc); cp->gc = None; } if (cp->font != None) { XFreeFont(display, cp->font); cp->font = None; } #endif } #ifndef DEBUG static void randomize_c(int randomize, circle * c) { if (randomize / 2) { double temp; temp = c->x; c->x = c->y; c->y = temp; } if (randomize % 2) { c->x = -c->x; c->y = -c->y; } } #endif ENTRYPOINT void init_apollonian (ModeInfo * mi) { apollonianstruct *cp; int i; if (apollonians == NULL) { if ((apollonians = (apollonianstruct *) calloc(MI_NUM_SCREENS(mi), sizeof (apollonianstruct))) == NULL) return; } cp = &apollonians[MI_SCREEN(mi)]; cp->size = MAX(MIN(MI_WIDTH(mi), MI_HEIGHT(mi)) - 1, 1); cp->offset.x = (MI_WIDTH(mi) - cp->size) / 2; cp->offset.y = (MI_HEIGHT(mi) - cp->size) / 2; cp->color_offset = NRAND(MI_NPIXELS(mi)); #ifdef DOFONT if (cp->font == None) { if ((cp->font = getFont(MI_DISPLAY(mi))) == None) return False; } #endif cp->label = label; cp->altgeom = cp->label && altgeom; if (cp->quad == NULL) { cp->count = ABS(MI_COUNT(mi)); if ((cp->quad = (apollonian_quadruple *) malloc(cp->count * sizeof (apollonian_quadruple))) == NULL) { return; } dquad(cp->count, cp->quad); } cp->game = NRAND(PREDEF_CIRCLE_GAMES + cp->count); cp->geometry = (cp->game && cp->altgeom) ? NRAND(3) : 0; if (cp->game < PREDEF_CIRCLE_GAMES) { cp->c1 = examples[cp->game][0]; cp->c2 = examples[cp->game][1]; cp->c3 = examples[cp->game][2]; cp->c4 = examples[cp->game][3]; /* do not label non int */ cp->label = cp->label && (cp->c4.e == (int) cp->c4.e); } else { /* uses results of dquad, all int */ i = cp->game - PREDEF_CIRCLE_GAMES; cp->c1.e = cp->quad[i].a; cp->c2.e = cp->quad[i].b; cp->c3.e = cp->quad[i].c; cp->c4.e = cp->quad[i].d; if (cp->geometry) cquad(&(cp->c1), &(cp->c2), &(cp->c3), &(cp->c4)); } cp->time = 0; #ifndef STANDALONE MI_CLEARWINDOW(mi); #endif if (cp->game != 0) { double q123; if (cp->c1.e == 0.0 || cp->c1.e == -cp->c2.e) return; cp->c1.x = 0.0; cp->c1.y = 0.0; cp->c2.x = -(cp->c1.e + cp->c2.e) / cp->c1.e; cp->c2.y = 0; q123 = sqrt(cp->c1.e * cp->c2.e + cp->c1.e * cp->c3.e + cp->c2.e * cp->c3.e); #ifdef DEBUG (void) printf("q123 = %g, ", q123); #endif cp->c3.x = (cp->c1.e * cp->c1.e - q123 * q123) / (cp->c1.e * (cp->c1.e + cp->c2.e)); cp->c3.y = -2.0 * q123 / (cp->c1.e + cp->c2.e); q123 = -cp->c1.e - cp->c2.e + q123; cp->c4.x = (cp->c1.e * cp->c1.e - q123 * q123) / (cp->c1.e * (cp->c1.e + cp->c2.e)); cp->c4.y = -2.0 * q123 / (cp->c1.e + cp->c2.e); #ifdef DEBUG (void) printf("q124 = %g\n", q123); (void) printf("%g %g %g %g %g %g %g %g\n", cp->c1.x, cp->c1.y, cp->c2.x, cp->c2.y, cp->c3.x, cp->c3.y, cp->c4.x, cp->c4.y); #endif } #ifndef DEBUG if (LRAND() & 1) { cp->c3.y = -cp->c3.y; cp->c4.y = -cp->c4.y; } i = NRAND(4); randomize_c(i, &(cp->c1)); randomize_c(i, &(cp->c2)); randomize_c(i, &(cp->c3)); randomize_c(i, &(cp->c4)); #endif mi->recursion_depth = -1; } ENTRYPOINT void draw_apollonian (ModeInfo * mi) { apollonianstruct *cp; if (apollonians == NULL) return; cp = &apollonians[MI_SCREEN(mi)]; #ifdef STANDALONE if (cp->eraser) { cp->eraser = erase_window (MI_DISPLAY(mi), MI_WINDOW(mi), cp->eraser); return; } #endif MI_IS_DRAWN(mi) = True; if (cp->time < 5) { switch (cp->time) { case 0: p(mi, cp->c1); p(mi, cp->c2); p(mi, cp->c3); p(mi, cp->c4); break; case 1: f(mi, cp->c1, cp->c2, cp->c3, cp->c4, 0); break; case 2: f(mi, cp->c1, cp->c2, cp->c4, cp->c3, 0); break; case 3: f(mi, cp->c1, cp->c3, cp->c4, cp->c2, 0); break; case 4: f(mi, cp->c2, cp->c3, cp->c4, cp->c1, 0); } } if (++cp->time > MI_CYCLES(mi)) { #ifdef STANDALONE cp->eraser = erase_window (MI_DISPLAY(mi), MI_WINDOW(mi), cp->eraser); #endif /* STANDALONE */ init_apollonian(mi); } } ENTRYPOINT void reshape_apollonian(ModeInfo * mi, int width, int height) { XClearWindow (MI_DISPLAY (mi), MI_WINDOW(mi)); init_apollonian (mi); } ENTRYPOINT Bool apollonian_handle_event (ModeInfo *mi, XEvent *event) { if (screenhack_event_helper (MI_DISPLAY(mi), MI_WINDOW(mi), event)) { reshape_apollonian (mi, MI_WIDTH(mi), MI_HEIGHT(mi)); return True; } return False; } ENTRYPOINT void release_apollonian (ModeInfo * mi) { if (apollonians != NULL) { int screen; for (screen = 0; screen < MI_NUM_SCREENS(mi); screen++) free_apollonian(MI_DISPLAY(mi), &apollonians[screen]); (void) free((void *) apollonians); apollonians = (apollonianstruct *) NULL; } } XSCREENSAVER_MODULE ("Apollonian", apollonian) #endif /* MODE_apollonian */ xscreensaver-5.36/hacks/euler2d.c000644 000767 000024 00000057071 12717746113 016760 0ustar00jwzstaff000000 000000 /* -*- Mode: C; tab-width: 4 -*- */ /* euler2d --- 2 Dimensional Incompressible Inviscid Fluid Flow */ #if 0 static const char sccsid[] = "@(#)euler2d.c 5.00 2000/11/01 xlockmore"; #endif /* * Copyright (c) 2000 by Stephen Montgomery-Smith * * Permission to use, copy, modify, and distribute this software and its * documentation for any purpose and without fee is hereby granted, * provided that the above copyright notice appear in all copies and that * both that copyright notice and this permission notice appear in * supporting documentation. * * This file is provided AS IS with no warranties of any kind. The author * shall have no liability with respect to the infringement of copyrights, * trade secrets or any patents by this file or any part thereof. In no * event will the author be liable for any lost revenue or profits or * other special, indirect and consequential damages. * * Revision History: * 04-Nov-2000: Added an option eulerpower. This allows for example the * quasi-geostrophic equation by setting eulerpower to 2. * 01-Nov-2000: Allocation checks. * 10-Sep-2000: Added optimizations, and removed subtle_perturb, by stephen. * 03-Sep-2000: Changed method of solving ode to Adams-Bashforth of order 2. * Previously used a rather compilcated method of order 4. * This doubles the speed of the program. Also it seems * to have improved numerical stability. Done by stephen. * 27-Aug-2000: Added rotation of region to maximize screen fill by stephen. * 05-Jun-2000: Adapted from flow.c Copyright (c) 1996 by Tim Auckland * 18-Jul-1996: Adapted from swarm.c Copyright (c) 1991 by Patrick J. Naughton. * 31-Aug-1990: Adapted from xswarm by Jeff Butterworth. (butterwo@ncsc.org) */ /* * The mathematical aspects of this program are discussed in the file * euler2d.tex. */ #ifdef STANDALONE # define MODE_euler2d # define DEFAULTS "*delay: 10000 \n" \ "*count: 1024 \n" \ "*cycles: 3000 \n" \ "*ncolors: 64 \n" \ "*fpsSolid: true \n" \ "*ignoreRotation: True \n" \ # define SMOOTH_COLORS # include "xlockmore.h" /* in xscreensaver distribution */ #else /* STANDALONE */ # include "xlock.h" /* in xlockmore distribution */ #endif /* STANDALONE */ #ifdef MODE_euler2d #define DEF_EULERTAIL "10" #define DEBUG_POINTED_REGION 0 static int tail_len; static int variable_boundary = 1; static float power = 1; static XrmOptionDescRec opts[] = { {"-eulertail", ".euler2d.eulertail", XrmoptionSepArg, NULL}, {"-eulerpower", ".euler2d.eulerpower", XrmoptionSepArg, NULL}, }; static argtype vars[] = { {&tail_len, "eulertail", "EulerTail", (char *) DEF_EULERTAIL, t_Int}, {&power, "eulerpower", "EulerPower", "1", t_Float}, }; static OptionStruct desc[] = { {"-eulertail len", "Length of Euler2d tails"}, {"-eulerpower power", "power of interaction law for points for Euler2d"}, }; ENTRYPOINT ModeSpecOpt euler2d_opts = {sizeof opts / sizeof opts[0], opts, sizeof vars / sizeof vars[0], vars, desc}; #ifdef USE_MODULES ModStruct euler2d_description = { "euler2d", "init_euler2d", "draw_euler2d", "release_euler2d", "refresh_euler2d", "init_euler2d", (char *) NULL, &euler2d_opts, 1000, 1024, 3000, 1, 64, 1.0, "", "Simulates 2D incompressible invisid fluid.", 0, NULL }; #endif #define balance_rand(v) ((LRAND()/MAXRAND*(v))-((v)/2)) /* random around 0 */ #define positive_rand(v) (LRAND()/MAXRAND*(v)) /* positive random */ #define number_of_vortex_points 20 #define n_bound_p 500 #define deg_p 6 static double delta_t; typedef struct { int width; int height; int count; double xshift,yshift,scale; double radius; int N; int Nvortex; /* x[2i+0] = x coord for nth point x[2i+1] = y coord for nth point w[i] = vorticity at nth point */ double *x; double *w; double *diffx; double *olddiffx; double *tempx; double *tempdiffx; /* (xs[2i+0],xs[2i+1]) is reflection of (x[2i+0],x[2i+1]) about unit circle xs[2i+0] = x[2i+0]/nx xs[2i+1] = x[2i+1]/nx where nx = x[2i+0]*x[2i+0] + x[2i+1]*x[2i+1] x_is_zero[i] = (nx < 1e-10) */ double *xs; short *x_is_zero; /* (p[2i+0],p[2i+1]) is image of (x[2i+0],x[2i+1]) under polynomial p. mod_dp2 is |p'(z)|^2 when z = (x[2i+0],x[2i+1]). */ double *p; double *mod_dp2; /* Sometimes in our calculations we get overflow or numbers that are too big. If that happens with the point x[2*i+0], x[2*i+1], we set dead[i]. */ short *dead; XSegment *csegs; int cnsegs; XSegment *old_segs; int *nold_segs; int c_old_seg; int boundary_color; int hide_vortex; short *lastx; double p_coef[2*(deg_p-1)]; XSegment *boundary; } euler2dstruct; static euler2dstruct *euler2ds = (euler2dstruct *) NULL; /* If variable_boundary == 1, then we make a variable boundary. The way this is done is to map the unit disk under a polynomial p, where p(z) = z + c_2 z^2 + ... + c_n z^n where n = deg_p. sp->p_coef contains the complex numbers c_2, c_3, ... c_n. */ #define add(a1,a2,b1,b2) (a1)+=(b1);(a2)+=(b2) #define mult(a1,a2,b1,b2) temp=(a1)*(b1)-(a2)*(b2); \ (a2)=(a1)*(b2)+(a2)*(b1);(a1)=temp static void calc_p(double *p1, double *p2, double z1, double z2, double p_coef[]) { int i; double temp; *p1=0; *p2=0; for(i=deg_p;i>=2;i--) { add(*p1,*p2,p_coef[(i-2)*2],p_coef[(i-2)*2+1]); mult(*p1,*p2,z1,z2); } add(*p1,*p2,1,0); mult(*p1,*p2,z1,z2); } /* Calculate |p'(z)|^2 */ static double calc_mod_dp2(double z1, double z2, double p_coef[]) { int i; double temp,mp1,mp2; mp1=0; mp2=0; for(i=deg_p;i>=2;i--) { add(mp1,mp2,i*p_coef[(i-2)*2],i*p_coef[(i-2)*2+1]); mult(mp1,mp2,z1,z2); } add(mp1,mp2,1,0); return mp1*mp1+mp2*mp2; } static void calc_all_p(euler2dstruct *sp) { int i,j; double temp,p1,p2,z1,z2; for(j=(sp->hide_vortex?sp->Nvortex:0);jN;j++) if(!sp->dead[j]) { p1=0; p2=0; z1=sp->x[2*j+0]; z2=sp->x[2*j+1]; for(i=deg_p;i>=2;i--) { add(p1,p2,sp->p_coef[(i-2)*2],sp->p_coef[(i-2)*2+1]); mult(p1,p2,z1,z2); } add(p1,p2,1,0); mult(p1,p2,z1,z2); sp->p[2*j+0] = p1; sp->p[2*j+1] = p2; } } static void calc_all_mod_dp2(double *x, euler2dstruct *sp) { int i,j; double temp,mp1,mp2,z1,z2; for(j=0;jN;j++) if(!sp->dead[j]) { mp1=0; mp2=0; z1=x[2*j+0]; z2=x[2*j+1]; for(i=deg_p;i>=2;i--) { add(mp1,mp2,i*sp->p_coef[(i-2)*2],i*sp->p_coef[(i-2)*2+1]); mult(mp1,mp2,z1,z2); } add(mp1,mp2,1,0); sp->mod_dp2[j] = mp1*mp1+mp2*mp2; } } static void derivs(double *x, euler2dstruct *sp) { int i,j; double u1,u2,x1,x2,xij1,xij2,nxij; double nx; if (variable_boundary) calc_all_mod_dp2(sp->x,sp); for (j=0;jNvortex;j++) if (!sp->dead[j]) { nx = x[2*j+0]*x[2*j+0] + x[2*j+1]*x[2*j+1]; if (nx < 1e-10) sp->x_is_zero[j] = 1; else { sp->x_is_zero[j] = 0; sp->xs[2*j+0] = x[2*j+0]/nx; sp->xs[2*j+1] = x[2*j+1]/nx; } } (void) memset(sp->diffx,0,sizeof(double)*2*sp->N); for (i=0;iN;i++) if (!sp->dead[i]) { x1 = x[2*i+0]; x2 = x[2*i+1]; for (j=0;jNvortex;j++) if (!sp->dead[j]) { /* Calculate the Biot-Savart kernel, that is, effect of a vortex point at a = (x[2*j+0],x[2*j+1]) at the point x = (x1,x2), returning the vector field in (u1,u2). In the plane, this is given by the formula u = (x-a)/|x-a|^2 or zero if x=a. However, in the unit disk we have to subtract from the above: (x-as)/|x-as|^2 where as = a/|a|^2 is the reflection of a about the unit circle. If however power != 1, then u = (x-a)/|x-a|^(power+1) - |a|^(1-power) (x-as)/|x-as|^(power+1) */ xij1 = x1 - x[2*j+0]; xij2 = x2 - x[2*j+1]; nxij = (power==1.0) ? xij1*xij1+xij2*xij2 : pow(xij1*xij1+xij2*xij2,(power+1)/2.0); if(nxij >= 1e-4) { u1 = xij2/nxij; u2 = -xij1/nxij; } else u1 = u2 = 0.0; if (!sp->x_is_zero[j]) { xij1 = x1 - sp->xs[2*j+0]; xij2 = x2 - sp->xs[2*j+1]; nxij = (power==1.0) ? xij1*xij1+xij2*xij2 : pow(xij1*xij1+xij2*xij2,(power+1)/2.0); if (nxij < 1e-5) { sp->dead[i] = 1; u1 = u2 = 0.0; } else { u1 -= xij2/nxij; u2 += xij1/nxij; } } if (!sp->dead[i]) { sp->diffx[2*i+0] += u1*sp->w[j]; sp->diffx[2*i+1] += u2*sp->w[j]; } } if (!sp->dead[i] && variable_boundary) { if (sp->mod_dp2[i] < 1e-5) sp->dead[i] = 1; else { sp->diffx[2*i+0] /= sp->mod_dp2[i]; sp->diffx[2*i+1] /= sp->mod_dp2[i]; } } } } /* What perturb does is effectively ret = x + k, where k should be of order delta_t. We have the option to do this more subtly by mapping points x in the unit disk to points y in the plane, where y = f(|x|) x, with f(t) = -log(1-t)/t. This might reduce (but does not remove) problems where particles near the edge of the boundary bounce around. But it seems to be not that effective, so for now switch it off. */ #define SUBTLE_PERTURB 0 static void perturb(double ret[], double x[], double k[], euler2dstruct *sp) { int i; double x1,x2,k1,k2; #if SUBTLE_PERTURB double d1,d2,t1,t2,mag,mag2,mlog1mmag,memmagdmag,xdotk; for (i=0;iN;i++) if (!sp->dead[i]) { x1 = x[2*i+0]; x2 = x[2*i+1]; k1 = k[2*i+0]; k2 = k[2*i+1]; mag2 = x1*x1 + x2*x2; if (mag2 < 1e-10) { ret[2*i+0] = x1+k1; ret[2*i+1] = x2+k2; } else if (mag2 > 1-1e-5) sp->dead[i] = 1; else { mag = sqrt(mag2); mlog1mmag = -log(1-mag); xdotk = x1*k1 + x2*k2; t1 = (x1 + k1)*mlog1mmag/mag + x1*xdotk*(1.0/(1-mag)-mlog1mmag/mag)/mag/mag; t2 = (x2 + k2)*mlog1mmag/mag + x2*xdotk*(1.0/(1-mag)-mlog1mmag/mag)/mag/mag; mag = sqrt(t1*t1+t2*t2); if (mag > 11.5 /* log(1e5) */) sp->dead[i] = 1; else { memmagdmag = (mag>1e-5) ? ((1.0-exp(-mag))/mag) : (1-mag/2.0); ret[2*i+0] = t1*memmagdmag; ret[2*i+1] = t2*memmagdmag; } } if (!sp->dead[i]) { d1 = ret[2*i+0]-x1; d2 = ret[2*i+1]-x2; if (d1*d1+d2*d2 > 0.1) sp->dead[i] = 1; } } #else for (i=0;iN;i++) if (!sp->dead[i]) { x1 = x[2*i+0]; x2 = x[2*i+1]; k1 = k[2*i+0]; k2 = k[2*i+1]; if (k1*k1+k2*k2 > 0.1 || x1*x1+x2*x2 > 1-1e-5) sp->dead[i] = 1; else { ret[2*i+0] = x1+k1; ret[2*i+1] = x2+k2; } } #endif } static void ode_solve(euler2dstruct *sp) { int i; double *temp; if (sp->count < 1) { /* midpoint method */ derivs(sp->x,sp); (void) memcpy(sp->olddiffx,sp->diffx,sizeof(double)*2*sp->N); for (i=0;iN;i++) if (!sp->dead[i]) { sp->tempdiffx[2*i+0] = 0.5*delta_t*sp->diffx[2*i+0]; sp->tempdiffx[2*i+1] = 0.5*delta_t*sp->diffx[2*i+1]; } perturb(sp->tempx,sp->x,sp->tempdiffx,sp); derivs(sp->tempx,sp); for (i=0;iN;i++) if (!sp->dead[i]) { sp->tempdiffx[2*i+0] = delta_t*sp->diffx[2*i+0]; sp->tempdiffx[2*i+1] = delta_t*sp->diffx[2*i+1]; } perturb(sp->x,sp->x,sp->tempdiffx,sp); } else { /* Adams Basforth */ derivs(sp->x,sp); for (i=0;iN;i++) if (!sp->dead[i]) { sp->tempdiffx[2*i+0] = delta_t*(1.5*sp->diffx[2*i+0] - 0.5*sp->olddiffx[2*i+0]); sp->tempdiffx[2*i+1] = delta_t*(1.5*sp->diffx[2*i+1] - 0.5*sp->olddiffx[2*i+1]); } perturb(sp->x,sp->x,sp->tempdiffx,sp); temp = sp->olddiffx; sp->olddiffx = sp->diffx; sp->diffx = temp; } } #define deallocate(p,t) if (p!=NULL) {(void) free((void *) p); p=(t*)NULL; } #define allocate(p,t,s) if ((p=(t*)malloc(sizeof(t)*s))==NULL)\ {free_euler2d(sp);return;} static void free_euler2d(euler2dstruct *sp) { deallocate(sp->csegs, XSegment); deallocate(sp->old_segs, XSegment); deallocate(sp->nold_segs, int); deallocate(sp->lastx, short); deallocate(sp->x, double); deallocate(sp->diffx, double); deallocate(sp->w, double); deallocate(sp->olddiffx, double); deallocate(sp->tempdiffx, double); deallocate(sp->tempx, double); deallocate(sp->dead, short); deallocate(sp->boundary, XSegment); deallocate(sp->xs, double); deallocate(sp->x_is_zero, short); deallocate(sp->p, double); deallocate(sp->mod_dp2, double); } ENTRYPOINT void init_euler2d (ModeInfo * mi) { #define nr_rotates 18 /* how many rotations to try to fill as much of screen as possible - must be even number */ euler2dstruct *sp; int i,k,n,np; double r,theta,x,y,w; double mag,xscale,yscale,p1,p2; double low[nr_rotates],high[nr_rotates],pp1,pp2,pn1,pn2,angle1,angle2,tempangle,dist,scale,bestscale,temp; int besti = 0; if (power<0.5) power = 0.5; if (power>3.0) power = 3.0; variable_boundary &= power == 1.0; delta_t = 0.001; if (power>1.0) delta_t *= pow(0.1,power-1); if (euler2ds == NULL) { if ((euler2ds = (euler2dstruct *) calloc(MI_NUM_SCREENS(mi), sizeof (euler2dstruct))) == NULL) return; } sp = &euler2ds[MI_SCREEN(mi)]; #ifdef HAVE_JWXYZ jwxyz_XSetAntiAliasing (MI_DISPLAY(mi), MI_GC(mi), False); #endif sp->boundary_color = NRAND(MI_NPIXELS(mi)); sp->hide_vortex = NRAND(4) != 0; sp->count = 0; sp->width = MI_WIDTH(mi); sp->height = MI_HEIGHT(mi); sp->N = MI_COUNT(mi)+number_of_vortex_points; sp->Nvortex = number_of_vortex_points; if (tail_len < 1) { /* minimum tail */ tail_len = 1; } if (tail_len > MI_CYCLES(mi)) { /* maximum tail */ tail_len = MI_CYCLES(mi); } /* Clear the background. */ MI_CLEARWINDOW(mi); free_euler2d(sp); /* Allocate memory. */ if (sp->csegs == NULL) { allocate(sp->csegs, XSegment, sp->N); allocate(sp->old_segs, XSegment, sp->N * tail_len); allocate(sp->nold_segs, int, tail_len); allocate(sp->lastx, short, sp->N * 2); allocate(sp->x, double, sp->N * 2); allocate(sp->diffx, double, sp->N * 2); allocate(sp->w, double, sp->Nvortex); allocate(sp->olddiffx, double, sp->N * 2); allocate(sp->tempdiffx, double, sp->N * 2); allocate(sp->tempx, double, sp->N * 2); allocate(sp->dead, short, sp->N); allocate(sp->boundary, XSegment, n_bound_p); allocate(sp->xs, double, sp->Nvortex * 2); allocate(sp->x_is_zero, short, sp->Nvortex); allocate(sp->p, double, sp->N * 2); allocate(sp->mod_dp2, double, sp->N); } for (i=0;inold_segs[i] = 0; } sp->c_old_seg = 0; (void) memset(sp->dead,0,sp->N*sizeof(short)); if (variable_boundary) { /* Initialize polynomial p */ /* The polynomial p(z) = z + c_2 z^2 + ... c_n z^n needs to be a bijection of the unit disk onto its image. This is achieved by insisting that sum_{k=2}^n k |c_k| <= 1. Actually we set the inequality to be equality (to get more interesting shapes). */ mag = 0; for(k=2;k<=deg_p;k++) { r = positive_rand(1.0/k); theta = balance_rand(2*M_PI); sp->p_coef[2*(k-2)+0]=r*cos(theta); sp->p_coef[2*(k-2)+1]=r*sin(theta); mag += k*r; } if (mag > 0.0001) for(k=2;k<=deg_p;k++) { sp->p_coef[2*(k-2)+0] /= mag; sp->p_coef[2*(k-2)+1] /= mag; } #if DEBUG_POINTED_REGION for(k=2;k<=deg_p;k++){ sp->p_coef[2*(k-2)+0]=0; sp->p_coef[2*(k-2)+1]=0; } sp->p_coef[2*(6-2)+0] = 1.0/6.0; #endif /* Here we figure out the best rotation of the domain so that it fills as much of the screen as possible. The number of angles we look at is determined by nr_rotates (we look every 180/nr_rotates degrees). While we figure out the best angle to rotate, we also figure out the correct scaling factors. */ for(k=0;kp_coef); calc_p(&pp1,&pp2,cos((double)(k-1)/(n_bound_p)*2*M_PI),sin((double)(k-1)/(n_bound_p)*2*M_PI),sp->p_coef); calc_p(&pn1,&pn2,cos((double)(k+1)/(n_bound_p)*2*M_PI),sin((double)(k+1)/(n_bound_p)*2*M_PI),sp->p_coef); angle1 = nr_rotates/M_PI*atan2(p2-pp2,p1-pp1)-nr_rotates/2; angle2 = nr_rotates/M_PI*atan2(pn2-p2,pn1-p1)-nr_rotates/2; while (angle1<0) angle1+=nr_rotates*2; while (angle2<0) angle2+=nr_rotates*2; if (angle1>nr_rotates*1.75 && angle2nr_rotates*1.75) angle1+=nr_rotates*2; if (angle2high[i%nr_rotates]) high[i%nr_rotates] = dist; if (disthigh[i%nr_rotates]) high[i%nr_rotates] = -dist; if (-distwidth-5.0)/(high[i]-low[i]); yscale = (sp->height-5.0)/(high[(i+nr_rotates/2)%nr_rotates]-low[(i+nr_rotates/2)%nr_rotates]); scale = (xscale>yscale) ? yscale : xscale; if (scale>bestscale) { bestscale = scale; besti = i; } } /* Here we do the rotation. The way we do this is to replace the polynomial p(z) by a^{-1} p(a z) where a = exp(i best_angle). */ p1 = 1; p2 = 0; for(k=2;k<=deg_p;k++) { mult(p1,p2,cos((double)besti*M_PI/nr_rotates),sin((double)besti*M_PI/nr_rotates)); mult(sp->p_coef[2*(k-2)+0],sp->p_coef[2*(k-2)+1],p1,p2); } sp->scale = bestscale; sp->xshift = -(low[besti]+high[besti])/2.0*sp->scale+sp->width/2; if (bestiyshift = -(low[besti+nr_rotates/2]+high[besti+nr_rotates/2])/2.0*sp->scale+sp->height/2; else sp->yshift = (low[besti-nr_rotates/2]+high[besti-nr_rotates/2])/2.0*sp->scale+sp->height/2; /* Initialize boundary */ for(k=0;kp_coef); sp->boundary[k].x1 = (short)(p1*sp->scale+sp->xshift); sp->boundary[k].y1 = (short)(p2*sp->scale+sp->yshift); } for(k=1;kboundary[k].x2 = sp->boundary[k-1].x1; sp->boundary[k].y2 = sp->boundary[k-1].y1; } sp->boundary[0].x2 = sp->boundary[n_bound_p-1].x1; sp->boundary[0].y2 = sp->boundary[n_bound_p-1].y1; } else { if (sp->width>sp->height) sp->radius = sp->height/2.0-5.0; else sp->radius = sp->width/2.0-5.0; } /* Initialize point positions */ for (i=sp->Nvortex;iN;i++) { do { r = sqrt(positive_rand(1.0)); theta = balance_rand(2*M_PI); sp->x[2*i+0]=r*cos(theta); sp->x[2*i+1]=r*sin(theta); /* This is to make sure the initial distribution of points is uniform */ } while (variable_boundary && calc_mod_dp2(sp->x[2*i+0],sp->x[2*i+1],sp->p_coef) < positive_rand(4)); } n = NRAND(4)+2; /* number of vortex points with negative vorticity */ if (n%2) { np = NRAND(n+1); } else { /* if n is even make sure that np==n/2 is twice as likely as the other possibilities. */ np = NRAND(n+2); if (np==n+1) np=n/2; } for(k=0;kNvortex; for (i=sp->Nvortex*k/n;iNvortex*(k+1)/n;i++) { theta = balance_rand(2*M_PI); sp->x[2*i+0]=x + r*cos(theta); sp->x[2*i+1]=y + r*sin(theta); sp->w[i]=w; } } } ENTRYPOINT void draw_euler2d (ModeInfo * mi) { Display *display = MI_DISPLAY(mi); Window window = MI_WINDOW(mi); GC gc = MI_GC(mi); int b, col, n_non_vortex_segs; euler2dstruct *sp; MI_IS_DRAWN(mi) = True; if (euler2ds == NULL) return; sp = &euler2ds[MI_SCREEN(mi)]; if (sp->csegs == NULL) return; ode_solve(sp); if (variable_boundary) calc_all_p(sp); sp->cnsegs = 0; for(b=sp->Nvortex;bN;b++) if(!sp->dead[b]) { sp->csegs[sp->cnsegs].x1 = sp->lastx[2*b+0]; sp->csegs[sp->cnsegs].y1 = sp->lastx[2*b+1]; if (variable_boundary) { sp->csegs[sp->cnsegs].x2 = (short)(sp->p[2*b+0]*sp->scale+sp->xshift); sp->csegs[sp->cnsegs].y2 = (short)(sp->p[2*b+1]*sp->scale+sp->yshift); } else { sp->csegs[sp->cnsegs].x2 = (short)(sp->x[2*b+0]*sp->radius+sp->width/2); sp->csegs[sp->cnsegs].y2 = (short)(sp->x[2*b+1]*sp->radius+sp->height/2); } sp->lastx[2*b+0] = sp->csegs[sp->cnsegs].x2; sp->lastx[2*b+1] = sp->csegs[sp->cnsegs].y2; sp->cnsegs++; } n_non_vortex_segs = sp->cnsegs; if (!sp->hide_vortex) for(b=0;bNvortex;b++) if(!sp->dead[b]) { sp->csegs[sp->cnsegs].x1 = sp->lastx[2*b+0]; sp->csegs[sp->cnsegs].y1 = sp->lastx[2*b+1]; if (variable_boundary) { sp->csegs[sp->cnsegs].x2 = (short)(sp->p[2*b+0]*sp->scale+sp->xshift); sp->csegs[sp->cnsegs].y2 = (short)(sp->p[2*b+1]*sp->scale+sp->yshift); } else { sp->csegs[sp->cnsegs].x2 = (short)(sp->x[2*b+0]*sp->radius+sp->width/2); sp->csegs[sp->cnsegs].y2 = (short)(sp->x[2*b+1]*sp->radius+sp->height/2); } sp->lastx[2*b+0] = sp->csegs[sp->cnsegs].x2; sp->lastx[2*b+1] = sp->csegs[sp->cnsegs].y2; sp->cnsegs++; } if (sp->count) { XSetForeground(display, gc, MI_BLACK_PIXEL(mi)); XDrawSegments(display, window, gc, sp->old_segs+sp->c_old_seg*sp->N, sp->nold_segs[sp->c_old_seg]); if (MI_NPIXELS(mi) > 2){ /* render colour */ for (col = 0; col < MI_NPIXELS(mi); col++) { int start = col*n_non_vortex_segs/MI_NPIXELS(mi); int finish = (col+1)*n_non_vortex_segs/MI_NPIXELS(mi); XSetForeground(display, gc, MI_PIXEL(mi, col)); XDrawSegments(display, window, gc,sp->csegs+start, finish-start); } if (!sp->hide_vortex) { XSetForeground(display, gc, MI_WHITE_PIXEL(mi)); XDrawSegments(display, window, gc,sp->csegs+n_non_vortex_segs, sp->cnsegs-n_non_vortex_segs); } } else { /* render mono */ XSetForeground(display, gc, MI_WHITE_PIXEL(mi)); XDrawSegments(display, window, gc, sp->csegs, sp->cnsegs); } if (MI_NPIXELS(mi) > 2) /* render colour */ XSetForeground(display, gc, MI_PIXEL(mi, sp->boundary_color)); else XSetForeground(MI_DISPLAY(mi), MI_GC(mi), MI_WHITE_PIXEL(mi)); if (variable_boundary) XDrawSegments(display, window, gc, sp->boundary, n_bound_p); else XDrawArc(MI_DISPLAY(mi), MI_WINDOW(mi), MI_GC(mi), sp->width/2 - (int) sp->radius - 1, sp->height/2 - (int) sp->radius -1, (int) (2*sp->radius) + 2, (int) (2* sp->radius) + 2, 0, 64*360); /* Copy to erase-list */ (void) memcpy(sp->old_segs+sp->c_old_seg*sp->N, sp->csegs, sp->cnsegs*sizeof(XSegment)); sp->nold_segs[sp->c_old_seg] = sp->cnsegs; sp->c_old_seg++; if (sp->c_old_seg >= tail_len) sp->c_old_seg = 0; } if (++sp->count > MI_CYCLES(mi)) /* pick a new flow */ init_euler2d(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) { if (euler2ds != NULL) { int screen; for (screen = 0; screen < MI_NUM_SCREENS(mi); screen++) free_euler2d(&euler2ds[screen]); (void) free((void *) euler2ds); euler2ds = (euler2dstruct *) NULL; } } ENTRYPOINT void refresh_euler2d (ModeInfo * mi) { MI_CLEARWINDOW(mi); } ENTRYPOINT Bool euler2d_handle_event (ModeInfo *mi, XEvent *event) { if (screenhack_event_helper (MI_DISPLAY(mi), MI_WINDOW(mi), event)) { init_euler2d (mi); return True; } return False; } XSCREENSAVER_MODULE ("Euler2D", euler2d) #endif /* MODE_euler2d */ xscreensaver-5.36/hacks/juggle.c000644 000767 000024 00000231517 12717750045 016671 0ustar00jwzstaff000000 000000 /* -*- Mode: C; tab-width: 4 -*- */ /* juggle */ #if 0 static const char sccsid[] = "@(#)juggle.c 5.10 2003/09/02 xlockmore"; #endif /*- * Copyright (c) 1996 by Tim Auckland * * Permission to use, copy, modify, and distribute this software and its * documentation for any purpose and without fee is hereby granted, * provided that the above copyright notice appear in all copies and that * both that copyright notice and this permission notice appear in * supporting documentation. * * This file is provided AS IS with no warranties of any kind. The author * shall have no liability with respect to the infringement of copyrights, * trade secrets or any patents by this file or any part thereof. In no * event will the author be liable for any lost revenue or profits or * other special, indirect and consequential damages. * * Revision History * 13-Dec-2004: [TDA] Use -cycles and -count in a rational manner. * Add -rings, -bballs. Add -describe. Finally made * live pattern updates possible. Add refill_juggle(), * change_juggle() and reshape_juggle(). Make * init_juggle() non-destructive. Reorder erase/draw * operations. Update xscreensaver xml and manpage. * 15-Nov-2004: [TDA] Fix all memory leaks. * 12-Nov-2004: [TDA] Add -torches and another new trail * implementation, so that different objects can have * different length trails. * 11-Nov-2004: [TDA] Clap when all the balls are in the air. * 10-Nov-2004: [TDA] Display pattern name converted to hight * notation. * 31-Oct-2004: [TDA] Add -clubs and new trail implementation. * 02-Sep-2003: Non-real time to see what is happening without a * strobe effect for slow machines. * 01-Nov-2000: Allocation checks * 1996: Written */ /*- * TODO * Implement the anonymously promised -uni option. */ /* * Notes on Adam Chalcraft Juggling Notation (used by permission) * a-> Adam's notation s-> Site swap (Cambridge) notation * * To define a map from a-notation to s-notation ("site-swap"), both * of which look like doubly infinite sequences of natural numbers. In * s-notation, there is a restriction on what is allowed, namely for * the sequence s_n, the associated function f(n)=n+s_n must be a * bijection. In a-notation, there is no restriction. * * To go from a-notation to s-notation, you start by mapping each a_n * to a permutation of N, the natural numbers. * * 0 -> the identity * 1 -> (10) [i.e. f(1)=0, f(0)=1] * 2 -> (210) [i.e. f(2)=1, f(1)=0, f(0)=2] * 3 -> (3210) [i.e. f(3)=2, f(2)=1, f(1)=0, f(0)=3] * etc. * * Then for each n, you look at how long 0 takes to get back to 0 * again and you call this t_n. If a_n=0, for example, then since the * identity leaves 0 alone, it gets back to 0 in 1 step, so t_n=1. If * a_n=1, then f(0)=1. Now any further a_n=0 leave 1 alone, but the * next a_n>0 sends 1 back to 0. Hence t_n is 2 + the number of 0's * following the 1. Finally, set s_n = t_n - 1. * * To give some examples, it helps to have a notation for cyclic * sequences. By (123), for example, I mean ...123123123123... . Now * under the a-notation -> s-notation mapping we have some familiar * examples: * * (0)->(0), (1)->(1), (2)->(2) etc. * (21)->(31), (31)->(51), (41)->(71) etc. * (10)->(20), (20)->(40), (30)->(60) etc. * (331)->(441), (312)->(612), (303)->(504), (321)->(531) * (43)->(53), (434)->(534), (433)->(633) * (552)->(672) * * In general, the number of balls is the *average* of the s-notation, * and the *maximum* of the a-notation. Another theorem is that the * minimum values in the a-notation and the s-notation and equal, and * preserved in the same positions. * * The usefulness of a-notation is the fact that there are no * restrictions on what is allowed. This makes random juggle * generation much easier. It also makes enumeration very * easy. Another handy feature is computing changes. Suppose you can * do (5) and want a neat change up to (771) in s-notation [Mike Day * actually needed this example!]. Write them both in a-notation, * which gives (5) and (551). Now concatenate them (in general, there * may be more than one way to do this, but not in this example), to * get * * ...55555555551551551551551... * * Now convert back to s-notation, to get * * ...55555566771771771771771... * * So the answer is to do two 6 throws and then go straight into * (771). Coming back down of course, * * ...5515515515515515555555555... * * converts to * * ...7717717717716615555555555... * * so the answer is to do a single 661 and then drop straight down to * (5). * * [The number of balls in the generated pattern occasionally changes. * In order to decrease the number of balls I had to introduce a new * symbol into the Adam notation, [*] which means 'lose the current * ball'.] */ /* This code uses so many linked lists it's worth having a built-in * leak-checker */ #undef MEMTEST #ifdef STANDALONE # define MODE_juggle # define DEFAULTS "*delay: 10000 \n" \ "*count: 200 \n" \ "*cycles: 1000 \n" \ "*ncolors: 32 \n" \ "*font: -*-helvetica-bold-r-normal-*-180-*\n" \ "*fpsSolid: true\n" \ # define refresh_juggle 0 # define juggle_handle_event 0 # undef SMOOTH_COLORS # include "xlockmore.h" /* in xscreensaver distribution */ #else /* STANDALONE */ # include "xlock.h" /* in xlockmore distribution */ #endif /* STANDALONE */ #ifdef MODE_juggle #if 0 #define XClearWindow(d, w) \ { \ XSetForeground(d, MI_GC(mi), MI_PIXEL(mi, 3)); \ XFillRectangle(d, w, MI_GC(mi), \ 0, 0, (unsigned int) MI_WIDTH(mi), (unsigned int) MI_HEIGHT(mi)); \ } #endif #define DEF_PATTERN "random" /* All patterns */ #define DEF_TAIL "1" /* No trace */ #ifdef UNI /* Maybe a ROLA BOLA would be at a better angle for viewing */ #define DEF_UNI "False" /* No unicycle */ /* Not implemented yet */ #endif #define DEF_REAL "True" #define DEF_DESCRIBE "True" #define DEF_BALLS "True" /* Use Balls */ #define DEF_CLUBS "True" /* Use Clubs */ #define DEF_TORCHES "True" /* Use Torches */ #define DEF_KNIVES "True" /* Use Knives */ #define DEF_RINGS "True" /* Use Rings */ #define DEF_BBALLS "True" /* Use Bowling Balls */ #ifndef XtNumber #define XtNumber(arr) ((unsigned int) (sizeof(arr) / sizeof(arr[0]))) #endif static char *pattern; static int tail; #ifdef UNI static Bool uni; #endif static Bool real; static Bool describe; static Bool balls; static Bool clubs; static Bool torches; static Bool knives; static Bool rings; static Bool bballs; static char *only; static XrmOptionDescRec opts[] = { {"-pattern", ".juggle.pattern", XrmoptionSepArg, NULL }, {"-tail", ".juggle.tail", XrmoptionSepArg, NULL }, #ifdef UNI {"-uni", ".juggle.uni", XrmoptionNoArg, "on" }, {"+uni", ".juggle.uni", XrmoptionNoArg, "off" }, #endif {"-real", ".juggle.real", XrmoptionNoArg, "on" }, {"+real", ".juggle.real", XrmoptionNoArg, "off" }, {"-describe", ".juggle.describe", XrmoptionNoArg, "on" }, {"+describe", ".juggle.describe", XrmoptionNoArg, "off" }, {"-balls", ".juggle.balls", XrmoptionNoArg, "on" }, {"+balls", ".juggle.balls", XrmoptionNoArg, "off" }, {"-clubs", ".juggle.clubs", XrmoptionNoArg, "on" }, {"+clubs", ".juggle.clubs", XrmoptionNoArg, "off" }, {"-torches", ".juggle.torches", XrmoptionNoArg, "on" }, {"+torches", ".juggle.torches", XrmoptionNoArg, "off" }, {"-knives", ".juggle.knives", XrmoptionNoArg, "on" }, {"+knives", ".juggle.knives", XrmoptionNoArg, "off" }, {"-rings", ".juggle.rings", XrmoptionNoArg, "on" }, {"+rings", ".juggle.rings", XrmoptionNoArg, "off" }, {"-bballs", ".juggle.bballs", XrmoptionNoArg, "on" }, {"+bballs", ".juggle.bballs", XrmoptionNoArg, "off" }, {"-only", ".juggle.only", XrmoptionSepArg, NULL }, }; static argtype vars[] = { { &pattern, "pattern", "Pattern", DEF_PATTERN, t_String }, { &tail, "tail", "Tail", DEF_TAIL, t_Int }, #ifdef UNI { &uni, "uni", "Uni", DEF_UNI, t_Bool }, #endif { &real, "real", "Real", DEF_REAL, t_Bool }, { &describe, "describe", "Describe", DEF_DESCRIBE, t_Bool }, { &balls, "balls", "Clubs", DEF_BALLS, t_Bool }, { &clubs, "clubs", "Clubs", DEF_CLUBS, t_Bool }, { &torches, "torches", "Torches", DEF_TORCHES, t_Bool }, { &knives, "knives", "Knives", DEF_KNIVES, t_Bool }, { &rings, "rings", "Rings", DEF_RINGS, t_Bool }, { &bballs, "bballs", "BBalls", DEF_BBALLS, t_Bool }, { &only, "only", "BBalls", " ", t_String }, }; static OptionStruct desc[] = { { "-pattern string", "Cambridge Juggling Pattern" }, { "-tail num", "Trace Juggling Patterns" }, #ifdef UNI { "-/+uni", "Unicycle" }, #endif { "-/+real", "Real-time" }, { "-/+describe", "turn on/off pattern descriptions." }, { "-/+balls", "turn on/off Balls." }, { "-/+clubs", "turn on/off Clubs." }, { "-/+torches", "turn on/off Flaming Torches." }, { "-/+knives", "turn on/off Knives." }, { "-/+rings", "turn on/off Rings." }, { "-/+bballs", "turn on/off Bowling Balls." }, { "-only", "Turn off all objects but the named one." }, }; ENTRYPOINT ModeSpecOpt juggle_opts = { XtNumber(opts), opts, XtNumber(vars), vars, desc }; #ifdef USE_MODULES ModStruct juggle_description = { "juggle", "init_juggle", "draw_juggle", "release_juggle", "draw_juggle", "change_juggle", (char *) NULL, &juggle_opts, 10000, 200, 1000, 1, 64, 1.0, "", "Shows a Juggler, juggling", 0, NULL }; #endif #ifdef USE_XVMSUTILS # include #endif /* Note: All "lengths" are scaled by sp->scale = MI_HEIGHT/480. All "thicknesses" are scaled by sqrt(sp->scale) so that they are proportionally thicker for smaller windows. Objects spinning out of the plane (such as clubs) fake perspective by compressing their horizontal coordinates by PERSPEC */ /* Figure */ #define ARMLENGTH 50 #define ARMWIDTH ((int) (8.0 * sqrt(sp->scale))) #define POSE 10 #define BALLRADIUS ARMWIDTH #define PERSPEC 0.4 /* macros */ #define GRAVITY(h, t) 4*(double)(h)/((t)*(t)) /* Timing based on count. Units are milliseconds. Juggles per second is: 2000 / THROW_CATCH_INTERVAL + CATCH_THROW_INTERVAL */ #define THROW_CATCH_INTERVAL (sp->count) #define THROW_NULL_INTERVAL (sp->count * 0.5) #define CATCH_THROW_INTERVAL (sp->count * 0.2) /******************************************************************** * Trace Definitions * * * * These record rendering data so that a drawn object can be erased * * later. Each object has its own Trace list. * * * ********************************************************************/ typedef struct {double x, y; } DXPoint; typedef struct trace *TracePtr; typedef struct trace { TracePtr next, prev; double x, y; double angle; int divisions; DXPoint dlast; #ifdef MEMTEST char pad[1024]; #endif } Trace; /******************************************************************* * Object Definitions * * * * These describe the various types of Object that can be juggled * * * *******************************************************************/ typedef void (DrawProc)(ModeInfo*, unsigned long, Trace *); static DrawProc show_ball, show_europeanclub, show_torch, show_knife; static DrawProc show_ring, show_bball; typedef enum {BALL, CLUB, TORCH, KNIFE, RING, BBALLS, NUM_OBJECT_TYPES} ObjType; #define OBJMIXPROB 20 /* inverse of the chances of using an odd object in the pattern */ static const struct { DrawProc *draw; /* Object Rendering function */ int handle; /* Length of object's handle */ int mintrail; /* Minimum trail length */ double cor; /* Coefficient of Restitution. perfect bounce = 1 */ double weight; /* Heavier objects don't get thrown as high */ } ObjectDefs[] = { { /* Ball */ show_ball, 0, 1, 0.9, 1.0, }, { /* Club */ show_europeanclub, 15, 1, 0.55, /* Clubs don't bounce too well */ 1.0, }, { /* Torch */ show_torch, 15, 20, /* Torches need flames */ 0, /* Torches don't bounce -- fire risk! */ 1.0, }, { /* Knife */ show_knife, 15, 1, 0, /* Knives don't bounce */ 1.0, }, { /* Ring */ show_ring, 15, 1, 0.8, 1.0, }, { /* Bowling Ball */ show_bball, 0, 1, 0.2, 5.0, }, }; /************************** * Trajectory definitions * **************************/ typedef enum {HEIGHT, ADAM} Notation; typedef enum {Empty, Full, Ball} Throwable; typedef enum {LEFT, RIGHT} Hand; typedef enum {THROW, CATCH} Action; typedef enum {HAND, ELBOW, SHOULDER} Joint; typedef enum {ATCH, THRATCH, ACTION, LINKEDACTION, PTHRATCH, BPREDICTOR, PREDICTOR} TrajectoryStatus; typedef struct {double a, b, c, d; } Spline; typedef DXPoint Arm[3]; /* A Wander contains a Spline and a time interval. A list of Wanders * describes the performer's position as he moves around the screen. */ typedef struct wander *WanderPtr; typedef struct wander { WanderPtr next, prev; double x; unsigned long finish; Spline s; #ifdef MEMTEST char pad[1024]; #endif } Wander; /* Object is an arbitrary object being juggled. Each Trajectory * references an Object ("count" tracks this), and each Object is also * linked into a global Objects list. Objects may include a Trace * list for tracking erasures. */ typedef struct object *ObjectPtr; typedef struct object { ObjectPtr next, prev; ObjType type; int color; int count; /* reference count */ Bool active; /* Object is in use */ Trace *trace; int tracelen; int tail; #ifdef MEMTEST char pad[1024]; #endif } Object; /* Trajectory is a segment of juggling action. A list of Trajectories * defines the juggling performance. The Trajectory list goes through * multiple processing steps to convert it from basic juggling * notation into rendering data. */ typedef struct trajectory *TrajectoryPtr; typedef struct trajectory { TrajectoryPtr prev, next; /* for building list */ TrajectoryStatus status; /* Throw */ char posn; int height; int adam; char *pattern; char *name; /* Action */ Hand hand; Action action; /* LinkedAction */ int color; Object *object; int divisions; double angle, spin; TrajectoryPtr balllink; TrajectoryPtr handlink; /* PThratch */ double cx; /* Moving juggler */ double x, y; /* current position */ double dx, dy; /* initial velocity */ /* Predictor */ Throwable type; unsigned long start, finish; Spline xp, yp; #ifdef MEMTEST char pad[1024]; #endif } Trajectory; /******************* * Pattern Library * *******************/ typedef struct { const char * pattern; const char * name; } patternstruct; /* List of popular patterns, in any order */ /* Patterns should be given in Adam notation so the generator can concatenate them safely. Null descriptions are ok. Height notation will be displayed automatically. */ /* Can't const this because it is qsorted. This *should* be reentrant, I think... */ static /*const*/ patternstruct portfolio[] = { {"[+2 1]", /* +3 1 */ "Typical 2 ball juggler"}, {"[2 0]", /* 4 0 */ "2 in 1 hand"}, {"[2 0 1]", /* 5 0 1 */}, {"[+2 0 +2 0 0]" /* +5 0 +5 0 0 */}, {"[+2 0 1 2 2]", /* +4 0 1 2 3 */}, {"[2 0 1 1]", /* 6 0 1 1 */}, {"[3]", /* 3 */ "3 cascade"}, {"[+3]", /* +3 */ "reverse 3 cascade"}, {"[=3]", /* =3 */ "cascade 3 under arm"}, {"[&3]", /* &3 */ "cascade 3 catching under arm"}, {"[_3]", /* _3 */ "bouncing 3 cascade"}, {"[+3 x3 =3]", /* +3 x3 =3 */ "Mill's mess"}, {"[3 2 1]", /* 5 3 1" */}, {"[3 3 1]", /* 4 4 1" */}, {"[3 1 2]", /* 6 1 2 */ "See-saw"}, {"[=3 3 1 2]", /* =4 5 1 2 */}, {"[=3 2 2 3 1 2]", /* =6 2 2 5 1 2 */ "=4 5 1 2 stretched"}, {"[+3 3 1 3]", /* +4 4 1 3 */ "anemic shower box"}, {"[3 3 1]", /* 4 4 1 */}, {"[+3 2 3]", /* +4 2 3 */}, {"[+3 1]", /* +5 1 */ "3 shower"}, {"[_3 1]", /* _5 1 */ "bouncing 3 shower"}, {"[3 0 3 0 3]", /* 5 0 5 0 5 */ "shake 3 out of 5"}, {"[3 3 3 0 0]", /* 5 5 5 0 0 */ "flash 3 out of 5"}, {"[3 3 0]", /* 4 5 0 */ "complete waste of a 5 ball juggler"}, {"[3 3 3 0 0 0 0]", /* 7 7 7 0 0 0 0 */ "3 flash"}, {"[+3 0 +3 0 +3 0 0]", /* +7 0 +7 0 +7 0 0 */}, {"[3 2 2 0 3 2 0 2 3 0 2 2 0]", /* 7 3 3 0 7 3 0 3 7 0 3 3 0 */}, {"[3 0 2 0]", /* 8 0 4 0 */}, {"[_3 2 1]", /* _5 3 1 */}, {"[_3 0 1]", /* _8 0 1 */}, {"[1 _3 1 _3 0 1 _3 0]", /* 1 _7 1 _7 0 1 _7 0 */}, {"[_3 2 1 _3 1 2 1]", /* _6 3 1 _6 1 3 1 */}, {"[4]", /* 4 */ "4 cascade"}, {"[+4 3]", /* +5 3 */ "4 ball half shower"}, {"[4 4 2]", /* 5 5 2 */}, {"[+4 4 4 +4]", /* +4 4 4 +4 */ "4 columns"}, {"[+4 3 +4]", /* +5 3 +4 */}, {"[4 3 4 4]", /* 5 3 4 4 */}, {"[4 3 3 4]", /* 6 3 3 4 */}, {"[4 3 2 4", /* 6 4 2 4 */}, {"[+4 1]", /* +7 1 */ "4 shower"}, {"[4 4 4 4 0]", /* 5 5 5 5 0 */ "learning 5"}, {"[+4 x4 =4]", /* +4 x4 =4 */ "Mill's mess for 4"}, {"[+4 2 1 3]", /* +9 3 1 3 */}, {"[4 4 1 4 1 4]", /* 6 6 1 5 1 5, by Allen Knutson */}, {"[_4 _4 _4 1 _4 1]", /* _5 _6 _6 1 _5 1 */}, {"[_4 3 3]", /* _6 3 3 */}, {"[_4 3 1]", /* _7 4 1 */}, {"[_4 2 1]", /* _8 3 1 */}, {"[_4 3 3 3 0]", /* _8 4 4 4 0 */}, {"[_4 1 3 1]", /* _9 1 5 1 */}, {"[_4 1 3 1 2]", /* _10 1 6 1 2 */}, {"[5]", /* 5 */ "5 cascade"}, {"[_5 _5 _5 _5 _5 5 5 5 5 5]", /* _5 _5 _5 _5 _5 5 5 5 5 5 */}, {"[+5 x5 =5]", /* +5 x5 =5 */ "Mill's mess for 5"}, {"[5 4 4]", /* 7 4 4 */}, {"[_5 4 4]", /* _7 4 4 */}, {"[1 2 3 4 5 5 5 5 5]", /* 1 2 3 4 5 6 7 8 9 */ "5 ramp"}, {"[5 4 5 3 1]", /* 8 5 7 4 1, by Allen Knutson */}, {"[_5 4 1 +4]", /* _9 5 1 5 */}, {"[_5 4 +4 +4]", /* _8 4 +4 +4 */}, {"[_5 4 4 4 1]", /* _9 5 5 5 1 */}, {"[_5 4 4 5 1]",}, {"[_5 4 4 +4 4 0]", /*_10 5 5 +5 5 0 */}, {"[6]", /* 6 */ "6 cascade"}, {"[+6 5]", /* +7 5 */}, {"[6 4]", /* 8 4 */}, {"[+6 3]", /* +9 3 */}, {"[6 5 4 4]", /* 9 7 4 4 */}, {"[+6 5 5 5]", /* +9 5 5 5 */}, {"[6 0 6]", /* 9 0 9 */}, {"[_6 0 _6]", /* _9 0 _9 */}, {"[_7]", /* _7 */ "bouncing 7 cascade"}, {"[7]", /* 7 */ "7 cascade"}, {"[7 6 6 6 6]", /* 11 6 6 6 6 */ "Gatto's High Throw"}, }; typedef struct { int start; int number; } PatternIndex; struct patternindex { int minballs; int maxballs; PatternIndex index[XtNumber(portfolio)]; }; /* Jugglestruct: per-screen global data. The master Wander, Object * and Trajectory lists are anchored here. */ typedef struct { double scale; Wander *wander; double cx; double Gr; Trajectory *head; Arm arm[2][2]; char *pattern; int count; int num_balls; time_t begintime; /* should make 'time' usable for at least 48 days on a 32-bit machine */ unsigned long time; /* millisecond timer*/ ObjType objtypes; Object *objects; struct patternindex patternindex; XFontStruct *mode_font; } jugglestruct; static jugglestruct *juggles = (jugglestruct *) NULL; /******************* * list management * *******************/ #define DUP_OBJECT(n, t) { \ (n)->object = (t)->object; \ if((n)->object != NULL) (n)->object->count++; \ } /* t must point to an existing element. t must not be an expression ending ->next or ->prev */ #define REMOVE(t) { \ (t)->next->prev = (t)->prev; \ (t)->prev->next = (t)->next; \ free(t); \ } /* t receives element to be created and added to the list. ot must point to an existing element or be identical to t to start a new list. Applicable to Trajectories, Objects and Traces. */ #define ADD_ELEMENT(type, t, ot) \ if (((t) = (type*)calloc(1,sizeof(type))) != NULL) { \ (t)->next = (ot)->next; \ (t)->prev = (ot); \ (ot)->next = (t); \ (t)->next->prev = (t); \ } static void object_destroy(Object* o) { if(o->trace != NULL) { while(o->trace->next != o->trace) { Trace *s = o->trace->next; REMOVE(s); /* Don't eliminate 's' */ } free(o->trace); } REMOVE(o); } static void trajectory_destroy(Trajectory *t) { if(t->name != NULL) free(t->name); if(t->pattern != NULL) free(t->pattern); /* Reduce object link count and call destructor if necessary */ if(t->object != NULL && --t->object->count < 1 && t->object->tracelen == 0) { object_destroy(t->object); } REMOVE(t); /* Unlink and free */ } static void free_juggle(jugglestruct *sp) { if (sp->head != NULL) { while (sp->head->next != sp->head) { trajectory_destroy(sp->head->next); } free(sp->head); sp->head = (Trajectory *) NULL; } if(sp->objects != NULL) { while (sp->objects->next != sp->objects) { object_destroy(sp->objects->next); } free(sp->objects); sp->objects = (Object*)NULL; } if(sp->wander != NULL) { while (sp->wander->next != sp->wander) { Wander *w = sp->wander->next; REMOVE(w); } free(sp->wander); sp->wander = (Wander*)NULL; } if(sp->pattern != NULL) { free(sp->pattern); sp->pattern = NULL; } if (sp->mode_font!=None) { XFreeFontInfo(NULL,sp->mode_font,1); sp->mode_font = None; } } static Bool add_throw(jugglestruct *sp, char type, int h, Notation n, const char* name) { Trajectory *t; ADD_ELEMENT(Trajectory, t, sp->head->prev); if(t == NULL){ /* Out of Memory */ free_juggle(sp); return False; } t->object = NULL; if(name != NULL) t->name = strdup(name); t->posn = type; if (n == ADAM) { t->adam = h; t->height = 0; t->status = ATCH; } else { t->height = h; t->status = THRATCH; } return True; } /* add a Thratch to the performance */ static Bool program(ModeInfo *mi, const char *patn, const char *name, int cycles) { jugglestruct *sp = &juggles[MI_SCREEN(mi)]; const char *p; int w, h, i, seen; Notation notation; char type; if (MI_IS_VERBOSE(mi)) { (void) fprintf(stderr, "juggle[%d]: Programmed: %s x %d\n", MI_SCREEN(mi), (name == NULL) ? patn : name, cycles); } for(w=i=0; i < cycles; i++, w++) { /* repeat until at least "cycles" throws have been programmed */ /* title is the pattern name to be supplied to the first throw of a sequence. If no name if given, use an empty title so that the sequences are still delimited. */ const char *title = (name != NULL)? name : ""; type=' '; h = 0; seen = 0; notation = HEIGHT; for(p=patn; *p; p++) { if (*p >= '0' && *p <='9') { seen = 1; h = 10*h + (*p - '0'); } else { Notation nn = notation; switch (*p) { case '[': /* begin Adam notation */ notation = ADAM; break; case '-': /* Inside throw */ type = ' '; break; case '+': /* Outside throw */ case '=': /* Cross throw */ case '&': /* Cross catch */ case 'x': /* Cross throw and catch */ case '_': /* Bounce */ case 'k': /* Kickup */ type = *p; break; case '*': /* Lose ball */ seen = 1; h = -1; /* fall through */ case ']': /* end Adam notation */ nn = HEIGHT; /* fall through */ case ' ': if (seen) { i++; if (!add_throw(sp, type, h, notation, title)) return False; title = NULL; type=' '; h = 0; seen = 0; } notation = nn; break; default: if(w == 0) { /* Only warn on first pass */ (void) fprintf(stderr, "juggle[%d]: Unexpected pattern instruction: '%c'\n", MI_SCREEN(mi), *p); } break; } } } if (seen) { /* end of sequence */ if (!add_throw(sp, type, h, notation, title)) return False; title = NULL; } } return True; } /* ~~~~\~~~~~\~~~ \\~\\~\~\\\~~~ \\~\\\\~\\\~\~ \\\\\\\\\\\~\\ [ 3 3 1 3 4 2 3 1 3 3 4 0 2 1 ] 4 4 1 3 12 2 4 1 4 4 13 0 3 1 */ #define BOUNCEOVER 10 #define KICKMIN 7 #define THROWMAX 20 /* Convert Adam notation into heights */ static void adam(jugglestruct *sp) { Trajectory *t, *p; for(t = sp->head->next; t != sp->head; t = t->next) { if (t->status == ATCH) { int a = t->adam; t->height = 0; for(p = t->next; a > 0; p = p->next) { if(p == sp->head) { t->height = -9; /* Indicate end of processing for name() */ return; } if (p->status != ATCH || p->adam < 0 || p->adam>= a) { a--; } t->height++; } if(t->height > BOUNCEOVER && t->posn == ' '){ t->posn = '_'; /* high defaults can be bounced */ } else if(t->height < 3 && t->posn == '_') { t->posn = ' '; /* Can't bounce short throws. */ } if(t->height < KICKMIN && t->posn == 'k'){ t->posn = ' '; /* Can't kick short throws */ } if(t->height > THROWMAX){ t->posn = 'k'; /* Use kicks for ridiculously high throws */ } t->status = THRATCH; } } } /* Discover converted heights and update the sequence title */ static void name(jugglestruct *sp) { Trajectory *t, *p; char buffer[BUFSIZ]; char *b; for(t = sp->head->next; t != sp->head; t = t->next) { if (t->status == THRATCH && t->name != NULL) { b = buffer; for(p = t; p == t || p->name == NULL; p = p->next) { if(p == sp->head || p->height < 0) { /* end of reliable data */ return; } if(p->posn == ' ') { b += sprintf(b, " %d", p->height); } else { b += sprintf(b, " %c%d", p->posn, p->height); } if(b - buffer > 500) break; /* otherwise this could eventually overflow. It'll be too big to display anyway. */ } if(*t->name != 0) { (void) sprintf(b, ", %s", t->name); } free(t->name); /* Don't need name any more, it's been converted to pattern */ t->name = NULL; if(t->pattern != NULL) free(t->pattern); t->pattern = strdup(buffer); } } } /* Split Thratch notation into explicit throws and catches. Usually Catch follows Throw in same hand, but take care of special cases. */ /* ..n1.. -> .. LTn RT1 LC RC .. */ /* ..nm.. -> .. LTn LC RTm RC .. */ static Bool part(jugglestruct *sp) { Trajectory *t, *nt, *p; Hand hand = (LRAND() & 1) ? RIGHT : LEFT; for (t = sp->head->next; t != sp->head; t = t->next) { if (t->status > THRATCH) { hand = t->hand; } else if (t->status == THRATCH) { char posn = '='; /* plausibility check */ if (t->height <= 2 && t->posn == '_') { t->posn = ' '; /* no short bounces */ } if (t->height <= 1 && (t->posn == '=' || t->posn == '&')) { t->posn = ' '; /* 1's need close catches */ } switch (t->posn) { /* throw catch */ case ' ': posn = '-'; t->posn = '+'; break; case '+': posn = '+'; t->posn = '-'; break; case '=': posn = '='; t->posn = '+'; break; case '&': posn = '+'; t->posn = '='; break; case 'x': posn = '='; t->posn = '='; break; case '_': posn = '_'; t->posn = '-'; break; case 'k': posn = 'k'; t->posn = 'k'; break; default: (void) fprintf(stderr, "juggle: unexpected posn %c\n", t->posn); break; } hand = (Hand) ((hand + 1) % 2); t->status = ACTION; t->hand = hand; p = t->prev; if (t->height == 1 && p != sp->head) { p = p->prev; /* '1's are thrown earlier than usual */ } t->action = CATCH; ADD_ELEMENT(Trajectory, nt, p); if(nt == NULL){ free_juggle(sp); return False; } nt->object = NULL; nt->status = ACTION; nt->action = THROW; nt->height = t->height; nt->hand = hand; nt->posn = posn; } } return True; } static ObjType choose_object(void) { ObjType o; for (;;) { o = (ObjType)NRAND((ObjType)NUM_OBJECT_TYPES); if(balls && o == BALL) break; if(clubs && o == CLUB) break; if(torches && o == TORCH) break; if(knives && o == KNIFE) break; if(rings && o == RING) break; if(bballs && o == BBALLS) break; } return o; } /* Connnect up throws and catches to figure out which ball goes where. Do the same with the juggler's hands. */ static void lob(ModeInfo *mi) { jugglestruct *sp = &juggles[MI_SCREEN(mi)]; Trajectory *t, *p; int h; for (t = sp->head->next; t != sp->head; t = t->next) { if (t->status == ACTION) { if (t->action == THROW) { if (t->type == Empty) { /* Create new Object */ ADD_ELEMENT(Object, t->object, sp->objects); t->object->count = 1; t->object->tracelen = 0; t->object->active = False; /* Initialise object's circular trace list */ ADD_ELEMENT(Trace, t->object->trace, t->object->trace); if (MI_NPIXELS(mi) > 2) { t->object->color = 1 + NRAND(MI_NPIXELS(mi) - 2); } else { #ifdef STANDALONE t->object->color = 1; #else t->object->color = 0; #endif } /* Small chance of picking a random object instead of the current theme. */ if(NRAND(OBJMIXPROB) == 0) { t->object->type = choose_object(); } else { t->object->type = sp->objtypes; } /* Check to see if we need trails for this object */ if(tail < ObjectDefs[t->object->type].mintrail) { t->object->tail = ObjectDefs[t->object->type].mintrail; } else { t->object->tail = tail; } } /* Balls can change divisions at each throw */ t->divisions = 2 * (NRAND(2) + 1); /* search forward for next catch in this hand */ for (p = t->next; t->handlink == NULL; p = p->next) { if(p->status < ACTION || p == sp->head) return; if (p->action == CATCH) { if (t->handlink == NULL && p->hand == t->hand) { t->handlink = p; } } } if (t->height > 0) { h = t->height - 1; /* search forward for next ball catch */ for (p = t->next; t->balllink == NULL; p = p->next) { if(p->status < ACTION || p == sp->head) { t->handlink = NULL; return; } if (p->action == CATCH) { if (t->balllink == NULL && --h < 1) { /* caught */ t->balllink = p; /* complete trajectory */ # if 0 if (p->type == Full) { (void) fprintf(stderr, "juggle[%d]: Dropped %d\n", MI_SCREEN(mi), t->object->color); } #endif p->type = Full; DUP_OBJECT(p, t); /* accept catch */ p->angle = t->angle; p->divisions = t->divisions; } } } } t->type = Empty; /* thrown */ } else if (t->action == CATCH) { /* search forward for next throw from this hand */ for (p = t->next; t->handlink == NULL; p = p->next) { if(p->status < ACTION || p == sp->head) return; if (p->action == THROW && p->hand == t->hand) { p->type = t->type; /* pass ball */ DUP_OBJECT(p, t); /* pass object */ p->divisions = t->divisions; t->handlink = p; } } } t->status = LINKEDACTION; } } } /* Clap when both hands are empty */ static void clap(jugglestruct *sp) { Trajectory *t, *p; for (t = sp->head->next; t != sp->head; t = t->next) { if (t->status == LINKEDACTION && t->action == CATCH && t->type == Empty && t->handlink != NULL && t->handlink->height == 0) { /* Completely idle hand */ for (p = t->next; p != sp->head; p = p->next) { if (p->status == LINKEDACTION && p->action == CATCH && p->hand != t->hand) { /* Next catch other hand */ if(p->type == Empty && p->handlink != NULL && p->handlink->height == 0) { /* Also completely idle */ t->handlink->posn = '^'; /* Move first hand's empty throw */ p->posn = '^'; /* to meet second hand's empty catch */ } break; /* Only need first catch */ } } } } } #define CUBIC(s, t) ((((s).a * (t) + (s).b) * (t) + (s).c) * (t) + (s).d) /* Compute single spline from x0 with velocity dx0 at time t0 to x1 with velocity dx1 at time t1 */ static Spline makeSpline(double x0, double dx0, int t0, double x1, double dx1, int t1) { Spline s; double a, b, c, d; double x10; double t10; x10 = x1 - x0; t10 = t1 - t0; a = ((dx0 + dx1)*t10 - 2*x10) / (t10*t10*t10); b = (3*x10 - (2*dx0 + dx1)*t10) / (t10*t10); c = dx0; d = x0; s.a = a; s.b = -3*a*t0 + b; s.c = (3*a*t0 - 2*b)*t0 + c; s.d = ((-a*t0 + b)*t0 - c)*t0 +d; return s; } /* Compute a pair of splines. s1 goes from x0 vith velocity dx0 at time t0 to x1 at time t1. s2 goes from x1 at time t1 to x2 with velocity dx2 at time t2. The arrival and departure velocities at x1, t1 must be the same. */ static double makeSplinePair(Spline *s1, Spline *s2, double x0, double dx0, int t0, double x1, int t1, double x2, double dx2, int t2) { double x10, x21, t21, t10, t20, dx1; x10 = x1 - x0; x21 = x2 - x1; t21 = t2 - t1; t10 = t1 - t0; t20 = t2 - t0; dx1 = (3*x10*t21*t21 + 3*x21*t10*t10 + 3*dx0*t10*t21*t21 - dx2*t10*t10*t21 - 4*dx0*t10*t21*t21) / (2*t10*t21*t20); *s1 = makeSpline(x0, dx0, t0, x1, dx1, t1); *s2 = makeSpline(x1, dx1, t1, x2, dx2, t2); return dx1; } /* Compute a Ballistic path in a pair of degenerate splines. sx goes from x at time t at constant velocity dx. sy goes from y at time t with velocity dy and constant acceleration g. */ static void makeParabola(Trajectory *n, double x, double dx, double y, double dy, double g) { double t = (double)n->start; n->xp.a = 0; n->xp.b = 0; n->xp.c = dx; n->xp.d = -dx*t + x; n->yp.a = 0; n->yp.b = g/2; n->yp.c = -g*t + dy; n->yp.d = g/2*t*t - dy*t + y; } /* Make juggler wander around the screen */ static double wander(jugglestruct *sp, unsigned long time) { Wander *w = NULL; for (w = sp->wander->next; w != sp->wander; w = w->next) { if (w->finish < sp->time) { /* expired */ Wander *ww = w; w = w->prev; REMOVE(ww); } else if(w->finish > time) { break; } } if(w == sp->wander) { /* Need a new one */ ADD_ELEMENT(Wander, w, sp->wander->prev); if(w == NULL) { /* Memory problem */ return 0.0; } w->finish = time + 3*THROW_CATCH_INTERVAL + NRAND(10*THROW_CATCH_INTERVAL); if(time == 0) { w->x = 0; } else { w->x = w->prev->x * 0.9 + NRAND(40) - 20; } w->s = makeSpline(w->prev->x, 0.0, w->prev->finish, w->x, 0.0, w->finish); } return CUBIC(w->s, time); } #define SX 25 /* Shoulder Width */ /* Convert hand position symbols into actual time/space coordinates */ static void positions(jugglestruct *sp) { Trajectory *t; unsigned long now = sp->time; /* Make sure we're not lost in the past */ for (t = sp->head->next; t != sp->head; t = t->next) { if (t->status >= PTHRATCH) { now = t->start; } else if (t->status == ACTION || t->status == LINKEDACTION) { /* Allow ACTIONs to be annotated, but we won't mark them ready for the next stage */ double xo = 0, yo; double sx = SX; double pose = SX/2; /* time */ if (t->action == CATCH) { /* Throw-to-catch */ if (t->type == Empty) { now += (int) THROW_NULL_INTERVAL; /* failed catch is short */ } else { /* successful catch */ now += (int)(THROW_CATCH_INTERVAL); } } else { /* Catch-to-throw */ if(t->object != NULL) { now += (int) (CATCH_THROW_INTERVAL * ObjectDefs[t->object->type].weight); } else { now += (int) (CATCH_THROW_INTERVAL); } } if(t->start == 0) t->start = now; else /* Concatenated performances may need clock resync */ now = t->start; t->cx = wander(sp, t->start); /* space */ yo = 90; /* Add room for the handle */ if(t->action == CATCH && t->object != NULL) yo -= ObjectDefs[t->object->type].handle; switch (t->posn) { case '-': xo = sx - pose; break; case '_': case 'k': case '+': xo = sx + pose; break; case '~': case '=': xo = - sx - pose; yo += pose; break; case '^': xo = 0; yo += pose*2; break; /* clap */ default: (void) fprintf(stderr, "juggle: unexpected posn %c\n", t->posn); break; } t->angle = (((t->hand == LEFT) ^ (t->posn == '+' || t->posn == '_' || t->posn == 'k' ))? -1 : 1) * M_PI/2; t->x = t->cx + ((t->hand == LEFT) ? xo : -xo); t->y = yo; /* Only mark complete if it was already linked */ if(t->status == LINKEDACTION) { t->status = PTHRATCH; } } } } /* Private physics functions */ /* Compute the spin-rate for a trajectory. Different types of throw (eg, regular thows, bounces, kicks, etc) have different spin requirements. type = type of object h = trajectory of throwing hand (throws), or next throwing hand (catches) old = earlier spin to consider dt = time span of this trajectory height = height of ball throw or 0 if based on old spin turns = full club turns required during this operation togo = partial club turns required to match hands */ static double spinrate(ObjType type, Trajectory *h, double old, double dt, int height, int turns, double togo) { const int dir = (h->hand == LEFT) ^ (h->posn == '+')? -1 : 1; if(ObjectDefs[type].handle != 0) { /* Clubs */ return (dir * turns * 2 * M_PI + togo) / dt; } else if(height == 0) { /* Balls already spinning */ return old/2; } else { /* Balls */ return dir * NRAND(height*10)/20/ObjectDefs[type].weight * 2 * M_PI / dt; } } /* compute the angle at the end of a spinning trajectory */ static double end_spin(Trajectory *t) { return t->angle + t->spin * (t->finish - t->start); } /* Sets the initial angle of the catch following hand movement t to the final angle of the throw n. Also sets the angle of the subsequent throw to the same angle plus half a turn. */ static void match_spins_on_catch(Trajectory *t, Trajectory *n) { if(ObjectDefs[t->balllink->object->type].handle == 0) { t->balllink->angle = end_spin(n); if(t->balllink->handlink != NULL) { t->balllink->handlink->angle = t->balllink->angle + M_PI; } } } static double find_bounce(jugglestruct *sp, double yo, double yf, double yc, double tc, double cor) { double tb, i, dy = 0; const double e = 1; /* permissible error in yc */ /* tb = time to bounce yt = height at catch time after one bounce one or three roots according to timing find one by interval bisection */ tb = tc; for(i = tc / 2; i > 0.0001; i/=2){ double dt, yt; if(tb == 0){ (void) fprintf(stderr, "juggle: bounce div by zero!\n"); break; } dy = (yf - yo)/tb + sp->Gr/2*tb; dt = tc - tb; yt = -cor*dy*dt + sp->Gr/2*dt*dt + yf; if(yt < yc + e){ tb-=i; }else if(yt > yc - e){ tb+=i; }else{ break; } } if(dy*THROW_CATCH_INTERVAL < -200) { /* bounce too hard */ tb = -1; } return tb; } static Trajectory* new_predictor(const Trajectory *t, int start, int finish, double angle) { Trajectory *n; ADD_ELEMENT(Trajectory, n, t->prev); if(n == NULL){ return NULL; } DUP_OBJECT(n, t); n->divisions = t->divisions; n->type = Ball; n->status = PREDICTOR; n->start = start; n->finish = finish; n->angle = angle; return n; } /* Turn abstract timings into physically appropriate object trajectories. */ static Bool projectile(jugglestruct *sp) { Trajectory *t; const int yf = 0; /* Floor height */ for (t = sp->head->next; t != sp->head; t = t->next) { if (t->status != PTHRATCH || t->action != THROW) { continue; } else if (t->balllink == NULL) { /* Zero Throw */ t->status = BPREDICTOR; } else if (t->balllink->handlink == NULL) { /* Incomplete */ return True; } else if(t->balllink == t->handlink) { /* '2' height - hold on to ball. Don't need to consider flourishes, 'hands' will do that automatically anyway */ t->type = Full; /* Zero spin to avoid wrist injuries */ t->spin = 0; match_spins_on_catch(t, t); t->dx = t->dy = 0; t->status = BPREDICTOR; continue; } else { if (t->posn == '_') { /* Bounce once */ const int tb = t->start + find_bounce(sp, t->y, (double) yf, t->balllink->y, (double) (t->balllink->start - t->start), ObjectDefs[t->object->type].cor); if(tb < t->start) { /* bounce too hard */ t->posn = '+'; /* Use regular throw */ } else { Trajectory *n; /* First (throw) trajectory. */ double dt; /* Time span of a trajectory */ double dy; /* Distance span of a follow-on trajectory. First trajectory uses t->dy */ /* dx is constant across both trajectories */ t->dx = (t->balllink->x - t->x) / (t->balllink->start - t->start); { /* ball follows parabola down */ n = new_predictor(t, t->start, tb, t->angle); if(n == NULL) return False; dt = n->finish - n->start; /* Ball rate 4, no flight or matching club turns */ n->spin = spinrate(t->object->type, t, 0.0, dt, 4, 0, 0.0); t->dy = (yf - t->y)/dt - sp->Gr/2*dt; makeParabola(n, t->x, t->dx, t->y, t->dy, sp->Gr); } { /* ball follows parabola up */ Trajectory *m = new_predictor(t, n->finish, t->balllink->start, end_spin(n)); if(m == NULL) return False; dt = m->finish - m->start; /* Use previous ball rate, no flight club turns */ m->spin = spinrate(t->object->type, t, n->spin, dt, 0, 0, t->balllink->angle - m->angle); match_spins_on_catch(t, m); dy = (t->balllink->y - yf)/dt - sp->Gr/2 * dt; makeParabola(m, t->balllink->x - t->dx * dt, t->dx, (double) yf, dy, sp->Gr); } t->status = BPREDICTOR; continue; } } else if (t->posn == 'k') { /* Drop & Kick */ Trajectory *n; /* First (drop) trajectory. */ Trajectory *o; /* Second (rest) trajectory */ Trajectory *m; /* Third (kick) trajectory */ const int td = t->start + 2*THROW_CATCH_INTERVAL; /* Drop time */ const int tk = t->balllink->start - 5*THROW_CATCH_INTERVAL; /* Kick */ double dt, dy; { /* Fall to ground */ n = new_predictor(t, t->start, td, t->angle); if(n == NULL) return False; dt = n->finish - n->start; /* Ball spin rate 4, no flight club turns */ n->spin = spinrate(t->object->type, t, 0.0, dt, 4, 0, t->balllink->angle - n->angle); t->dx = (t->balllink->x - t->x) / dt; t->dy = (yf - t->y)/dt - sp->Gr/2*dt; makeParabola(n, t->x, t->dx, t->y, t->dy, sp->Gr); } { /* Rest on ground */ o = new_predictor(t, n->finish, tk, end_spin(n)); if(o == NULL) return False; o->spin = 0; makeParabola(o, t->balllink->x, 0.0, (double) yf, 0.0, 0.0); } /* Kick up */ { m = new_predictor(t, o->finish, t->balllink->start, end_spin(o)); if(m == NULL) return False; dt = m->finish - m->start; /* Match receiving hand, ball rate 4, one flight club turn */ m->spin = spinrate(t->object->type, t->balllink->handlink, 0.0, dt, 4, 1, t->balllink->angle - m->angle); match_spins_on_catch(t, m); dy = (t->balllink->y - yf)/dt - sp->Gr/2 * dt; makeParabola(m, t->balllink->x, 0.0, (double) yf, dy, sp->Gr); } t->status = BPREDICTOR; continue; } /* Regular flight, no bounce */ { /* ball follows parabola */ double dt; Trajectory *n = new_predictor(t, t->start, t->balllink->start, t->angle); if(n == NULL) return False; dt = t->balllink->start - t->start; /* Regular spin */ n->spin = spinrate(t->object->type, t, 0.0, dt, t->height, t->height/2, t->balllink->angle - n->angle); match_spins_on_catch(t, n); t->dx = (t->balllink->x - t->x) / dt; t->dy = (t->balllink->y - t->y) / dt - sp->Gr/2 * dt; makeParabola(n, t->x, t->dx, t->y, t->dy, sp->Gr); } t->status = BPREDICTOR; } } return True; } /* Turn abstract hand motions into cubic splines. */ static void hands(jugglestruct *sp) { Trajectory *t, *u, *v; for (t = sp->head->next; t != sp->head; t = t->next) { /* no throw => no velocity */ if (t->status != BPREDICTOR) { continue; } u = t->handlink; if (u == NULL) { /* no next catch */ continue; } v = u->handlink; if (v == NULL) { /* no next throw */ continue; } /* double spline takes hand from throw, thru catch, to next throw */ t->finish = u->start; t->status = PREDICTOR; u->finish = v->start; u->status = PREDICTOR; /* FIXME: These adjustments leave a small glitch when alternating balls and clubs. Just hope no-one notices. :-) */ /* make sure empty hand spin matches the thrown object in case it had a handle */ t->spin = ((t->hand == LEFT)? -1 : 1 ) * fabs((u->angle - t->angle)/(u->start - t->start)); u->spin = ((v->hand == LEFT) ^ (v->posn == '+')? -1 : 1 ) * fabs((v->angle - u->angle)/(v->start - u->start)); (void) makeSplinePair(&t->xp, &u->xp, t->x, t->dx, t->start, u->x, u->start, v->x, v->dx, v->start); (void) makeSplinePair(&t->yp, &u->yp, t->y, t->dy, t->start, u->y, u->start, v->y, v->dy, v->start); t->status = PREDICTOR; } } /* Given target x, y find_elbow puts hand at target if possible, * otherwise makes hand point to the target */ static void find_elbow(int armlength, DXPoint *h, DXPoint *e, DXPoint *p, DXPoint *s, int z) { double r, h2, t; double x = p->x - s->x; double y = p->y - s->y; h2 = x*x + y*y + z*z; if (h2 > 4 * armlength * armlength) { t = armlength/sqrt(h2); e->x = t*x + s->x; e->y = t*y + s->y; h->x = 2 * t * x + s->x; h->y = 2 * t * y + s->y; } else { r = sqrt((double)(x*x + z*z)); t = sqrt(4 * armlength * armlength / h2 - 1); e->x = x*(1 + y*t/r)/2 + s->x; e->y = (y - r*t)/2 + s->y; h->x = x + s->x; h->y = y + s->y; } } /* NOTE: returned x, y adjusted for arm reach */ static void reach_arm(ModeInfo * mi, Hand side, DXPoint *p) { jugglestruct *sp = &juggles[MI_SCREEN(mi)]; DXPoint h, e; find_elbow(40, &h, &e, p, &sp->arm[1][side][SHOULDER], 25); *p = sp->arm[1][side][HAND] = h; sp->arm[1][side][ELBOW] = e; } #if DEBUG /* dumps a human-readable rendition of the current state of the juggle pipeline to stderr for debugging */ static void dump(jugglestruct *sp) { Trajectory *t; for (t = sp->head->next; t != sp->head; t = t->next) { switch (t->status) { case ATCH: (void) fprintf(stderr, "%p a %c%d\n", (void*)t, t->posn, t->adam); break; case THRATCH: (void) fprintf(stderr, "%p T %c%d %s\n", (void*)t, t->posn, t->height, t->pattern == NULL?"":t->pattern); break; case ACTION: if (t->action == CATCH) (void) fprintf(stderr, "%p A %c%cC\n", (void*)t, t->posn, t->hand ? 'R' : 'L'); else (void) fprintf(stderr, "%p A %c%c%c%d\n", (void*)t, t->posn, t->hand ? 'R' : 'L', (t->action == THROW)?'T':'N', t->height); break; case LINKEDACTION: (void) fprintf(stderr, "%p L %c%c%c%d %d %p %p\n", (void*)t, t->posn, t->hand?'R':'L', (t->action == THROW)?'T':(t->action == CATCH?'C':'N'), t->height, t->object == NULL?0:t->object->color, (void*)t->handlink, (void*)t->balllink); break; case PTHRATCH: (void) fprintf(stderr, "%p O %c%c%c%d %d %2d %6lu %6lu\n", (void*)t, t->posn, t->hand?'R':'L', (t->action == THROW)?'T':(t->action == CATCH?'C':'N'), t->height, t->type, t->object == NULL?0:t->object->color, t->start, t->finish); break; case BPREDICTOR: (void) fprintf(stderr, "%p B %c %2d %6lu %6lu %g\n", (void*)t, t->type == Ball?'b':t->type == Empty?'e':'f', t->object == NULL?0:t->object->color, t->start, t->finish, t->yp.c); break; case PREDICTOR: (void) fprintf(stderr, "%p P %c %2d %6lu %6lu %g\n", (void*)t, t->type == Ball?'b':t->type == Empty?'e':'f', t->object == NULL?0:t->object->color, t->start, t->finish, t->yp.c); break; default: (void) fprintf(stderr, "%p: status %d not implemented\n", (void*)t, t->status); break; } } (void) fprintf(stderr, "---\n"); } #endif static int get_num_balls(const char *j) { int balls = 0; const char *p; int h = 0; if (!j) abort(); for (p = j; *p; p++) { if (*p >= '0' && *p <='9') { /* digit */ h = 10*h + (*p - '0'); } else { if (h > balls) { balls = h; } h = 0; } } return balls; } #ifdef __cplusplus extern "C" { #endif static int compare_num_balls(const void *p1, const void *p2) { int i, j; i = get_num_balls(((patternstruct*)p1)->pattern); j = get_num_balls(((patternstruct*)p2)->pattern); if (i > j) { return (1); } else if (i < j) { return (-1); } else { return (0); } } #ifdef __cplusplus } #endif /************************************************************************** * Rendering Functions * * * **************************************************************************/ static void show_arms(ModeInfo * mi, unsigned long color) { jugglestruct *sp = &juggles[MI_SCREEN(mi)]; unsigned int i, j; Hand side; XPoint a[XtNumber(sp->arm[0][0])]; if(color == MI_BLACK_PIXEL(mi)) { j = 0; } else { j = 1; } XSetLineAttributes(MI_DISPLAY(mi), MI_GC(mi), ARMWIDTH, LineSolid, CapRound, JoinRound); XSetForeground(MI_DISPLAY(mi), MI_GC(mi), color); for(side = LEFT; side <= RIGHT; side = (Hand)((int)side + 1)) { /* Translate into device coords */ for(i = 0; i < XtNumber(a); i++) { a[i].x = (short)(MI_WIDTH(mi)/2 + sp->arm[j][side][i].x*sp->scale); a[i].y = (short)(MI_HEIGHT(mi) - sp->arm[j][side][i].y*sp->scale); if(j == 1) sp->arm[0][side][i] = sp->arm[1][side][i]; } XDrawLines(MI_DISPLAY(mi), MI_WINDOW(mi), MI_GC(mi), a, XtNumber(a), CoordModeOrigin); } } static void show_figure(ModeInfo * mi, unsigned long color, Bool init) { jugglestruct *sp = &juggles[MI_SCREEN(mi)]; XPoint p[7]; unsigned int i; /* +-----+ 9 | 6 | 10 +--+--+ 2 +---+---+ 3 \ 5 / \ / \ / 1 + / \ / \ 0 +-----+ 4 | | | | | | 7 + + 8 */ static const XPoint figure[] = { { 15, 70}, /* 0 Left Hip */ { 0, 90}, /* 1 Waist */ { SX, 130}, /* 2 Left Shoulder */ {-SX, 130}, /* 3 Right Shoulder */ {-15, 70}, /* 4 Right Hip */ { 0, 130}, /* 5 Neck */ { 0, 140}, /* 6 Chin */ { SX, 0}, /* 7 Left Foot */ {-SX, 0}, /* 8 Right Foot */ {-17, 174}, /* 9 Head1 */ { 17, 140}, /* 10 Head2 */ }; XPoint a[XtNumber(figure)]; /* Translate into device coords */ for(i = 0; i < XtNumber(figure); i++) { a[i].x = (short)(MI_WIDTH(mi)/2 + (sp->cx + figure[i].x)*sp->scale); a[i].y = (short)(MI_HEIGHT(mi) - figure[i].y*sp->scale); } XSetLineAttributes(MI_DISPLAY(mi), MI_GC(mi), ARMWIDTH, LineSolid, CapRound, JoinRound); XSetForeground(MI_DISPLAY(mi), MI_GC(mi), color); i = 0; /* Body */ p[i++] = a[0]; p[i++] = a[1]; p[i++] = a[2]; p[i++] = a[3]; p[i++] = a[1]; p[i++] = a[4]; XDrawLines(MI_DISPLAY(mi), MI_WINDOW(mi), MI_GC(mi), p, i, CoordModeOrigin); i = 0; /* Legs */ p[i++] = a[7]; p[i++] = a[0]; p[i++] = a[4]; p[i++] = a[8]; XDrawLines(MI_DISPLAY(mi), MI_WINDOW(mi), MI_GC(mi), p, i, CoordModeOrigin); i = 0; /* Neck */ p[i++] = a[5]; p[i++] = a[6]; XDrawLines(MI_DISPLAY(mi), MI_WINDOW(mi), MI_GC(mi), p, i, CoordModeOrigin); /* Head */ XDrawArc(MI_DISPLAY(mi), MI_WINDOW(mi), MI_GC(mi), a[9].x, a[9].y, a[10].x - a[9].x, a[10].y - a[9].y, 0, 64*360); sp->arm[1][LEFT][SHOULDER].x = sp->cx + figure[2].x; sp->arm[1][RIGHT][SHOULDER].x = sp->cx + figure[3].x; if(init) { /* Initialise arms */ unsigned int i; for(i = 0; i < 2; i++){ sp->arm[i][LEFT][SHOULDER].y = figure[2].y; sp->arm[i][LEFT][ELBOW].x = figure[2].x; sp->arm[i][LEFT][ELBOW].y = figure[1].y; sp->arm[i][LEFT][HAND].x = figure[0].x; sp->arm[i][LEFT][HAND].y = figure[1].y; sp->arm[i][RIGHT][SHOULDER].y = figure[3].y; sp->arm[i][RIGHT][ELBOW].x = figure[3].x; sp->arm[i][RIGHT][ELBOW].y = figure[1].y; sp->arm[i][RIGHT][HAND].x = figure[4].x; sp->arm[i][RIGHT][HAND].y = figure[1].y; } } } static void show_ball(ModeInfo *mi, unsigned long color, Trace *s) { jugglestruct *sp = &juggles[MI_SCREEN(mi)]; int offset = (int)(s->angle*64*180/M_PI); short x = (short)(MI_WIDTH(mi)/2 + s->x * sp->scale); short y = (short)(MI_HEIGHT(mi) - s->y * sp->scale); /* Avoid wrapping */ if(s->y*sp->scale > MI_HEIGHT(mi) * 2) return; XSetForeground(MI_DISPLAY(mi), MI_GC(mi), color); if (s->divisions == 0 || color == MI_BLACK_PIXEL(mi)) { XFillArc(MI_DISPLAY(mi), MI_WINDOW(mi), MI_GC(mi), x - BALLRADIUS, y - BALLRADIUS, 2*BALLRADIUS, 2*BALLRADIUS, 0, 23040); } else if (s->divisions == 4) { /* 90 degree divisions */ XFillArc(MI_DISPLAY(mi), MI_WINDOW(mi), MI_GC(mi), x - BALLRADIUS, y - BALLRADIUS, 2*BALLRADIUS, 2*BALLRADIUS, offset % 23040, 5760); XFillArc(MI_DISPLAY(mi), MI_WINDOW(mi), MI_GC(mi), x - BALLRADIUS, y - BALLRADIUS, 2*BALLRADIUS, 2*BALLRADIUS, (offset + 11520) % 23040, 5760); XSetForeground(MI_DISPLAY(mi), MI_GC(mi), MI_WHITE_PIXEL(mi)); XFillArc(MI_DISPLAY(mi), MI_WINDOW(mi), MI_GC(mi), x - BALLRADIUS, y - BALLRADIUS, 2*BALLRADIUS, 2*BALLRADIUS, (offset + 5760) % 23040, 5760); XFillArc(MI_DISPLAY(mi), MI_WINDOW(mi), MI_GC(mi), x - BALLRADIUS, y - BALLRADIUS, 2*BALLRADIUS, 2*BALLRADIUS, (offset + 17280) % 23040, 5760); } else if (s->divisions == 2) { /* 180 degree divisions */ XFillArc(MI_DISPLAY(mi), MI_WINDOW(mi), MI_GC(mi), x - BALLRADIUS, y - BALLRADIUS, 2*BALLRADIUS, 2*BALLRADIUS, offset % 23040, 11520); XSetForeground(MI_DISPLAY(mi), MI_GC(mi), MI_WHITE_PIXEL(mi)); XFillArc(MI_DISPLAY(mi), MI_WINDOW(mi), MI_GC(mi), x - BALLRADIUS, y - BALLRADIUS, 2*BALLRADIUS, 2*BALLRADIUS, (offset + 11520) % 23040, 11520); } else { (void) fprintf(stderr, "juggle[%d]: unexpected divisions: %d\n", MI_SCREEN(mi), s->divisions); } } static void show_europeanclub(ModeInfo *mi, unsigned long color, Trace *s) { jugglestruct *sp = &juggles[MI_SCREEN(mi)]; XPoint p[4]; const double sa = sin(s->angle); const double ca = cos(s->angle); unsigned int i; /* 6 6 +-+ / \ 4 +-----+ 7 ////////\ 3 +---------+ 8 2 +---------+ 9 |///////| 1 +-------+ 10 | | | | | | | | | | | | +-+ 0 11 */ static const XPoint club[] = { {-24, 2}, /* 0 */ {-10, 3}, /* 1 */ { 1, 6}, /* 2 */ { 8, 6}, /* 3 */ { 14, 4}, /* 4 */ { 16, 3}, /* 5 */ { 16,-3}, /* 6 */ { 14,-4}, /* 7 */ { 8,-6}, /* 8 */ { 1,-6}, /* 9 */ {-10,-3}, /* 10 */ {-24,-2}, /* 11 */ {-24, 2}, /* 0 close boundary */ }; XPoint a[XtNumber(club)]; /* Avoid wrapping */ if(s->y*sp->scale > MI_HEIGHT(mi) * 2) return; /* Translate and fake perspective */ for(i = 0; i < XtNumber(club); i++) { a[i].x = (short)(MI_WIDTH(mi)/2 + (s->x + club[i].x*PERSPEC*sa)*sp->scale - club[i].y*sqrt(sp->scale)*ca); a[i].y = (short)(MI_HEIGHT(mi) - (s->y - club[i].x*ca)*sp->scale + club[i].y*sa*sqrt(sp->scale)); } if(color != MI_BLACK_PIXEL(mi)) { /* Outline in black */ XSetForeground(MI_DISPLAY(mi), MI_GC(mi), MI_BLACK_PIXEL(mi)); XSetLineAttributes(MI_DISPLAY(mi), MI_GC(mi), 2, LineSolid, CapRound, JoinRound); XDrawLines(MI_DISPLAY(mi), MI_WINDOW(mi), MI_GC(mi), a, XtNumber(a), CoordModeOrigin); } XSetForeground(MI_DISPLAY(mi), MI_GC(mi), color); /* Don't be tempted to optimize erase by drawing all the black in one X operation. It must use the same ops as the colours to guarantee a clean erase. */ i = 0; /* Colored stripes */ p[i++] = a[1]; p[i++] = a[2]; p[i++] = a[9]; p[i++] = a[10]; XFillPolygon(MI_DISPLAY(mi), MI_WINDOW(mi), MI_GC(mi), p, i, Convex, CoordModeOrigin); i = 0; p[i++] = a[3]; p[i++] = a[4]; p[i++] = a[7]; p[i++] = a[8]; XFillPolygon(MI_DISPLAY(mi), MI_WINDOW(mi), MI_GC(mi), p, i, Convex, CoordModeOrigin); if(color != MI_BLACK_PIXEL(mi)) { XSetForeground(MI_DISPLAY(mi), MI_GC(mi), MI_WHITE_PIXEL(mi)); } i = 0; /* White center band */ p[i++] = a[2]; p[i++] = a[3]; p[i++] = a[8]; p[i++] = a[9]; XFillPolygon(MI_DISPLAY(mi), MI_WINDOW(mi), MI_GC(mi), p, i, Convex, CoordModeOrigin); i = 0; /* White handle */ p[i++] = a[0]; p[i++] = a[1]; p[i++] = a[10]; p[i++] = a[11]; XFillPolygon(MI_DISPLAY(mi), MI_WINDOW(mi), MI_GC(mi), p, i, Convex, CoordModeOrigin); i = 0; /* White tip */ p[i++] = a[4]; p[i++] = a[5]; p[i++] = a[6]; p[i++] = a[7]; XFillPolygon(MI_DISPLAY(mi), MI_WINDOW(mi), MI_GC(mi), p, i, Convex, CoordModeOrigin); } #if 0 static void show_jugglebugclub(ModeInfo *mi, unsigned long color, Trace *s) { jugglestruct *sp = &juggles[MI_SCREEN(mi)]; XPoint p[6]; const double sa = sin(s->angle); const double ca = cos(s->angle); unsigned int i; /* 4 5 +-+ / \ 3 +-----+ 6 ////////\ 2 +/////////+ 7 |///////| 1 +-------+ 8 | | | | | | | | | | | | +-+ 0 9 */ static const XPoint club[] = { {-24, 2}, /* 0 */ { -9, 3}, /* 1 */ { 5, 6}, /* 2 */ { 11, 4}, /* 3 */ { 16, 3}, /* 4 */ { 16,-3}, /* 5 */ { 11,-4}, /* 6 */ { 5,-6}, /* 7 */ { -9,-3}, /* 8 */ {-24,-2}, /* 9 */ {-24, 2}, /* 0 close boundary */ }; XPoint a[XtNumber(club)]; /* Avoid wrapping */ if(s->y*sp->scale > MI_HEIGHT(mi) * 2) return; /* Translate and fake perspective */ for(i = 0; i < XtNumber(club); i++) { a[i].x = (short)(MI_WIDTH(mi)/2 + (s->x + club[i].x*PERSPEC*sa)*sp->scale - club[i].y*sqrt(sp->scale)*ca); a[i].y = (short)(MI_HEIGHT(mi) - (s->y - club[i].x*ca)*sp->scale + club[i].y*sa*sqrt(sp->scale)); } if(color != MI_BLACK_PIXEL(mi)) { /* Outline in black */ XSetForeground(MI_DISPLAY(mi), MI_GC(mi), MI_BLACK_PIXEL(mi)); XSetLineAttributes(MI_DISPLAY(mi), MI_GC(mi), 2, LineSolid, CapRound, JoinRound); XDrawLines(MI_DISPLAY(mi), MI_WINDOW(mi), MI_GC(mi), a, XtNumber(a), CoordModeOrigin); } XSetForeground(MI_DISPLAY(mi), MI_GC(mi), color); /* Don't be tempted to optimize erase by drawing all the black in one X operation. It must use the same ops as the colours to guarantee a clean erase. */ i = 0; /* Coloured center band */ p[i++] = a[1]; p[i++] = a[2]; p[i++] = a[3]; p[i++] = a[6]; p[i++] = a[7]; p[i++] = a[8]; XFillPolygon(MI_DISPLAY(mi), MI_WINDOW(mi), MI_GC(mi), p, i, Convex, CoordModeOrigin); if(color != MI_BLACK_PIXEL(mi)) { XSetForeground(MI_DISPLAY(mi), MI_GC(mi), MI_WHITE_PIXEL(mi)); } i = 0; /* White handle */ p[i++] = a[0]; p[i++] = a[1]; p[i++] = a[8]; p[i++] = a[9]; XFillPolygon(MI_DISPLAY(mi), MI_WINDOW(mi), MI_GC(mi), p, i, Convex, CoordModeOrigin); i = 0; /* White tip */ p[i++] = a[3]; p[i++] = a[4]; p[i++] = a[5]; p[i++] = a[6]; XFillPolygon(MI_DISPLAY(mi), MI_WINDOW(mi), MI_GC(mi), p, i, Convex, CoordModeOrigin); } #endif static void show_torch(ModeInfo *mi, unsigned long color, Trace *s) { jugglestruct *sp = &juggles[MI_SCREEN(mi)]; XPoint head, tail, last; DXPoint dhead, dlast; const double sa = sin(s->angle); const double ca = cos(s->angle); const double TailLen = -24; const double HeadLen = 16; const short Width = (short)(5 * sqrt(sp->scale)); /* +///+ head last | | | | | + tail */ dhead.x = s->x + HeadLen * PERSPEC * sa; dhead.y = s->y - HeadLen * ca; if(color == MI_BLACK_PIXEL(mi)) { /* Use 'last' when erasing */ dlast = s->dlast; } else { /* Store 'last' so we can use it later when s->prev has gone */ if(s->prev != s->next) { dlast.x = s->prev->x + HeadLen * PERSPEC * sin(s->prev->angle); dlast.y = s->prev->y - HeadLen * cos(s->prev->angle); } else { dlast = dhead; } s->dlast = dlast; } /* Avoid wrapping (after last is stored) */ if(s->y*sp->scale > MI_HEIGHT(mi) * 2) return; head.x = (short)(MI_WIDTH(mi)/2 + dhead.x*sp->scale); head.y = (short)(MI_HEIGHT(mi) - dhead.y*sp->scale); last.x = (short)(MI_WIDTH(mi)/2 + dlast.x*sp->scale); last.y = (short)(MI_HEIGHT(mi) - dlast.y*sp->scale); tail.x = (short)(MI_WIDTH(mi)/2 + (s->x + TailLen * PERSPEC * sa)*sp->scale ); tail.y = (short)(MI_HEIGHT(mi) - (s->y - TailLen * ca)*sp->scale ); if(color != MI_BLACK_PIXEL(mi)) { XSetForeground(MI_DISPLAY(mi), MI_GC(mi), MI_BLACK_PIXEL(mi)); XSetLineAttributes(MI_DISPLAY(mi), MI_GC(mi), Width, LineSolid, CapRound, JoinRound); XDrawLine(MI_DISPLAY(mi), MI_WINDOW(mi), MI_GC(mi), head.x, head.y, tail.x, tail.y); } XSetForeground(MI_DISPLAY(mi), MI_GC(mi), color); XSetLineAttributes(MI_DISPLAY(mi), MI_GC(mi), Width * 2, LineSolid, CapRound, JoinRound); XDrawLine(MI_DISPLAY(mi), MI_WINDOW(mi), MI_GC(mi), head.x, head.y, last.x, last.y); } static void show_knife(ModeInfo *mi, unsigned long color, Trace *s) { jugglestruct *sp = &juggles[MI_SCREEN(mi)]; unsigned int i; const double sa = sin(s->angle); const double ca = cos(s->angle); /* 2 + |+ 3 || 1 +++ 5 |4| | | + 0 */ static const XPoint knife[] = { {-24, 0}, /* 0 */ { -5,-3}, /* 1 */ { 16,-3}, /* 2 */ { 12, 0}, /* 3 */ { -5, 0}, /* 4 */ { -5, 3}, /* 5 */ }; XPoint a[XtNumber(knife)], p[5]; /* Avoid wrapping */ if(s->y*sp->scale > MI_HEIGHT(mi) * 2) return; /* Translate and fake perspective */ for(i = 0; i < XtNumber(knife); i++) { a[i].x = (short)(MI_WIDTH(mi)/2 + (s->x + knife[i].x*PERSPEC*sa)*sp->scale - knife[i].y*sqrt(sp->scale)*ca*PERSPEC); a[i].y = (short)(MI_HEIGHT(mi) - (s->y - knife[i].x*ca)*sp->scale + knife[i].y*sa*sqrt(sp->scale)); } /* Handle */ XSetForeground(MI_DISPLAY(mi), MI_GC(mi), color); XSetLineAttributes(MI_DISPLAY(mi), MI_GC(mi), (short)(4*sqrt(sp->scale)), LineSolid, CapRound, JoinRound); XDrawLine(MI_DISPLAY(mi), MI_WINDOW(mi), MI_GC(mi), a[0].x, a[0].y, a[4].x, a[4].y); /* Blade */ if(color != MI_BLACK_PIXEL(mi)) { XSetForeground(MI_DISPLAY(mi), MI_GC(mi), MI_WHITE_PIXEL(mi)); } i = 0; p[i++] = a[1]; p[i++] = a[2]; p[i++] = a[3]; p[i++] = a[5]; XFillPolygon(MI_DISPLAY(mi), MI_WINDOW(mi), MI_GC(mi), p, i, Convex, CoordModeOrigin); } static void show_ring(ModeInfo *mi, unsigned long color, Trace *s) { jugglestruct *sp = &juggles[MI_SCREEN(mi)]; short x = (short)(MI_WIDTH(mi)/2 + s->x * sp->scale); short y = (short)(MI_HEIGHT(mi) - s->y * sp->scale); double radius = 15 * sp->scale; short thickness = (short)(8 * sqrt(sp->scale)); /* Avoid wrapping */ if(s->y*sp->scale > MI_HEIGHT(mi) * 2) return; XSetForeground(MI_DISPLAY(mi), MI_GC(mi), color); XSetLineAttributes(MI_DISPLAY(mi), MI_GC(mi), thickness, LineSolid, CapRound, JoinRound); XDrawArc(MI_DISPLAY(mi), MI_WINDOW(mi), MI_GC(mi), (short)(x - radius*PERSPEC), (short)(y - radius), (short)(2*radius*PERSPEC), (short)(2*radius), 0, 23040); } static void show_bball(ModeInfo *mi, unsigned long color, Trace *s) { jugglestruct *sp = &juggles[MI_SCREEN(mi)]; short x = (short)(MI_WIDTH(mi)/2 + s->x * sp->scale); short y = (short)(MI_HEIGHT(mi) - s->y * sp->scale); double radius = 12 * sp->scale; int offset = (int)(s->angle*64*180/M_PI); int holesize = (int)(3.0*sqrt(sp->scale)); /* Avoid wrapping */ if(s->y*sp->scale > MI_HEIGHT(mi) * 2) return; XSetForeground(MI_DISPLAY(mi), MI_GC(mi), MI_BLACK_PIXEL(mi)); XFillArc(MI_DISPLAY(mi), MI_WINDOW(mi), MI_GC(mi), (short)(x - radius), (short)(y - radius), (short)(2*radius), (short)(2*radius), 0, 23040); XSetForeground(MI_DISPLAY(mi), MI_GC(mi), color); XSetLineAttributes(MI_DISPLAY(mi), MI_GC(mi), 2, LineSolid, CapRound, JoinRound); XDrawArc(MI_DISPLAY(mi), MI_WINDOW(mi), MI_GC(mi), (short)(x - radius), (short)(y - radius), (short)(2*radius), (short)(2*radius), 0, 23040); /* Draw finger holes */ XSetLineAttributes(MI_DISPLAY(mi), MI_GC(mi), holesize, LineSolid, CapRound, JoinRound); XDrawArc(MI_DISPLAY(mi), MI_WINDOW(mi), MI_GC(mi), (short)(x - radius*0.5), (short)(y - radius*0.5), (short)(2*radius*0.5), (short)(2*radius*0.5), (offset + 960) % 23040, 0); XDrawArc(MI_DISPLAY(mi), MI_WINDOW(mi), MI_GC(mi), (short)(x - radius*0.7), (short)(y - radius*0.7), (short)(2*radius*0.7), (short)(2*radius*0.7), (offset + 1920) % 23040, 0); XDrawArc(MI_DISPLAY(mi), MI_WINDOW(mi), MI_GC(mi), (short)(x - radius*0.7), (short)(y - radius*0.7), (short)(2*radius*0.7), (short)(2*radius*0.7), offset % 23040, 0); } /************************************************************************** * Public Functions * * * **************************************************************************/ ENTRYPOINT void release_juggle (ModeInfo * mi) { if (juggles != NULL) { int screen; for (screen = 0; screen < MI_NUM_SCREENS(mi); screen++) free_juggle(&juggles[screen]); free(juggles); juggles = (jugglestruct *) NULL; } } /* FIXME: refill_juggle currently just appends new throws to the * programme. This is fine if the programme is empty, but if there * are still some trajectories left then it really should take these * into account */ static void refill_juggle(ModeInfo * mi) { jugglestruct *sp = NULL; int i; if (juggles == NULL) return; sp = &juggles[MI_SCREEN(mi)]; /* generate pattern */ if (pattern == NULL) { #define MAXPAT 10 #define MAXREPEAT 300 #define CHANGE_BIAS 8 /* larger makes num_ball changes less likely */ #define POSITION_BIAS 20 /* larger makes hand movements less likely */ int count = 0; while (count < MI_CYCLES(mi)) { char buf[MAXPAT * 3 + 3], *b = buf; int maxseen = 0; int l = NRAND(MAXPAT) + 1; int t = NRAND(MIN(MAXREPEAT, (MI_CYCLES(mi) - count))) + 1; { /* vary number of balls */ int new_balls = sp->num_balls; int change; if (new_balls == 2) /* Do not juggle 2 that often */ change = NRAND(2 + CHANGE_BIAS / 4); else change = NRAND(2 + CHANGE_BIAS); switch (change) { case 0: new_balls++; break; case 1: new_balls--; break; default: break; /* NO-OP */ } if (new_balls < sp->patternindex.minballs) { new_balls += 2; } if (new_balls > sp->patternindex.maxballs) { new_balls -= 2; } if (new_balls < sp->num_balls) { if (!program(mi, "[*]", NULL, 1)) /* lose ball */ return; } sp->num_balls = new_balls; } count += t; if (NRAND(2) && sp->patternindex.index[sp->num_balls].number) { /* Pick from PortFolio */ int p = sp->patternindex.index[sp->num_balls].start + NRAND(sp->patternindex.index[sp->num_balls].number); if (!program(mi, portfolio[p].pattern, portfolio[p].name, t)) return; } else { /* Invent a new pattern */ *b++='['; for(i = 0; i < l; i++){ int n, m; do { /* Triangular Distribution => high values more likely */ m = NRAND(sp->num_balls + 1); n = NRAND(sp->num_balls + 1); } while(m >= n); if (n == sp->num_balls) { maxseen = 1; } switch(NRAND(5 + POSITION_BIAS)){ case 0: /* Outside throw */ *b++ = '+'; break; case 1: /* Cross throw */ *b++ = '='; break; case 2: /* Cross catch */ *b++ = '&'; break; case 3: /* Cross throw and catch */ *b++ = 'x'; break; case 4: /* Bounce */ *b++ = '_'; break; default: break; /* Inside throw (default) */ } *b++ = n + '0'; *b++ = ' '; } *b++ = ']'; *b = '\0'; if (maxseen) { if (!program(mi, buf, NULL, t)) return; } } } } else { /* pattern supplied in height or 'a' notation */ if (!program(mi, pattern, NULL, MI_CYCLES(mi))) return; } adam(sp); name(sp); if (!part(sp)) return; lob(mi); clap(sp); positions(sp); if (!projectile(sp)) { free_juggle(sp); return; } hands(sp); #ifdef DEBUG if(MI_IS_DEBUG(mi)) dump(sp); #endif } static void change_juggle(ModeInfo * mi) { jugglestruct *sp = NULL; Trajectory *t; if (juggles == NULL) return; sp = &juggles[MI_SCREEN(mi)]; /* Strip pending trajectories */ for (t = sp->head->next; t != sp->head; t = t->next) { if(t->start > sp->time || t->finish < sp->time) { Trajectory *n = t; t=t->prev; trajectory_destroy(n); } } /* Pick the current object theme */ sp->objtypes = choose_object(); refill_juggle(mi); /* Clean up the Screen. Don't use MI_CLEARWINDOW(mi), since we don't all those special effects. */ XClearWindow(MI_DISPLAY(mi), MI_WINDOW(mi)); show_figure(mi, MI_WHITE_PIXEL(mi), True); } ENTRYPOINT void init_juggle (ModeInfo * mi) { jugglestruct *sp = 0; int i; if (juggles == NULL) { /* First-time initialisation */ /* allocate jugglestruct */ if ((juggles = (jugglestruct *)calloc(MI_NUM_SCREENS(mi), sizeof (jugglestruct))) == NULL) { release_juggle(mi); return; } } sp = &juggles[MI_SCREEN(mi)]; if (only && *only && strcmp(only, " ")) { balls = clubs = torches = knives = rings = bballs = False; if (!strcasecmp (only, "balls")) balls = True; else if (!strcasecmp (only, "clubs")) clubs = True; else if (!strcasecmp (only, "torches")) torches = True; else if (!strcasecmp (only, "knives")) knives = True; else if (!strcasecmp (only, "rings")) rings = True; else if (!strcasecmp (only, "bballs")) bballs = True; else { (void) fprintf (stderr, "Juggle: -only must be one of: balls, clubs, torches, knives,\n" "\t rings, or bballs (not \"%s\")\n", only); #ifdef STANDALONE /* xlock mustn't exit merely because of a bad argument */ exit (1); #endif } } if (sp->head == 0) { /* first time initializing this juggler */ sp->count = ABS(MI_COUNT(mi)); if (sp->count == 0) sp->count = 200; /* record start time */ sp->begintime = time(NULL); if(sp->patternindex.maxballs > 0) { sp->num_balls = sp->patternindex.minballs + NRAND(sp->patternindex.maxballs - sp->patternindex.minballs); } show_figure(mi, MI_WHITE_PIXEL(mi), True); /* Draw figure. Also discovers information about the juggler's proportions */ /* "7" should be about three times the height of the juggler's shoulders */ sp->Gr = -GRAVITY(3 * sp->arm[0][RIGHT][SHOULDER].y, 7 * THROW_CATCH_INTERVAL); if(!balls && !clubs && !torches && !knives && !rings && !bballs) balls = True; /* Have to juggle something! */ /* create circular trajectory list */ ADD_ELEMENT(Trajectory, sp->head, sp->head); if(sp->head == NULL){ free_juggle(sp); return; } /* create circular object list */ ADD_ELEMENT(Object, sp->objects, sp->objects); if(sp->objects == NULL){ free_juggle(sp); return; } /* create circular wander list */ ADD_ELEMENT(Wander, sp->wander, sp->wander); if(sp->wander == NULL){ free_juggle(sp); return; } (void)wander(sp, 0); /* Initialize wander */ sp->pattern = strdup(""); /* Initialise saved pattern with free-able memory */ } sp = &juggles[MI_SCREEN(mi)]; if (pattern && (!*pattern || !strcasecmp (pattern, ".") || !strcasecmp (pattern, "random"))) pattern = NULL; if (pattern == NULL && sp->patternindex.maxballs == 0) { /* pattern list needs indexing */ int nelements = XtNumber(portfolio); int numpat = 0; /* sort according to number of balls */ qsort((void*)portfolio, nelements, sizeof(portfolio[1]), compare_num_balls); /* last pattern has most balls */ sp->patternindex.maxballs = get_num_balls(portfolio[nelements - 1].pattern); /* run through sorted list, indexing start of each group and number in group */ sp->patternindex.maxballs = 1; for (i = 0; i < nelements; i++) { int b = get_num_balls(portfolio[i].pattern); if (b > sp->patternindex.maxballs) { sp->patternindex.index[sp->patternindex.maxballs].number = numpat; if(numpat == 0) sp->patternindex.minballs = b; sp->patternindex.maxballs = b; numpat = 1; sp->patternindex.index[sp->patternindex.maxballs].start = i; } else { numpat++; } } sp->patternindex.index[sp->patternindex.maxballs].number = numpat; } /* Set up programme */ change_juggle(mi); /* Clean up the Screen. Don't use MI_CLEARWINDOW(mi), since we may only be resizing and then we won't all those special effects. */ XClearWindow(MI_DISPLAY(mi), MI_WINDOW(mi)); /* Only put things here that won't interrupt the programme during a window resize */ /* Use MIN so that users can resize in interesting ways, eg narrow windows for tall patterns, etc */ sp->scale = MIN(MI_HEIGHT(mi)/480.0, MI_WIDTH(mi)/160.0); if(describe && !sp->mode_font) { /* Check to see if there's room to describe patterns. */ char *font = get_string_resource (MI_DISPLAY(mi), "font", "Font"); sp->mode_font = XLoadQueryFont(MI_DISPLAY(mi), font); } } ENTRYPOINT void reshape_juggle (ModeInfo * mi, int width, int height) { init_juggle(mi); } ENTRYPOINT void draw_juggle (ModeInfo * mi) { Trajectory *traj = NULL; Object *o = NULL; unsigned long future = 0; jugglestruct *sp = NULL; char *pattern = NULL; double cx; if (juggles == NULL) return; sp = &juggles[MI_SCREEN(mi)]; MI_IS_DRAWN(mi) = True; #ifdef HAVE_JWXYZ /* Don't worry about flicker, trust Quartz's double-buffering. This is a fast fix for the pixel-turds I can't track down... */ XClearWindow(MI_DISPLAY(mi), MI_WINDOW(mi)); #endif /* Update timer */ if (real) { struct timeval tv; (void)gettimeofday(&tv, NULL); sp->time = (int) ((tv.tv_sec - sp->begintime)*1000 + tv.tv_usec/1000); } else { sp->time += MI_DELAY(mi) / 1000; } /* First pass: Move arms and strip out expired elements */ for (traj = sp->head->next; traj != sp->head; traj = traj->next) { if (traj->status != PREDICTOR) { /* Skip any elements that need further processing */ /* We could remove them, but there shoudn't be many and they would be needed if we ever got the pattern refiller working */ continue; } if (traj->start > future) { /* Lookahead to the end of the show */ future = traj->start; } if (sp->time < traj->start) { /* early */ continue; } else if (sp->time < traj->finish) { /* working */ /* Look for pattern name */ if(traj->pattern != NULL) { pattern=traj->pattern; } if (traj->type == Empty || traj->type == Full) { /* Only interested in hands on this pass */ double angle = traj->angle + traj->spin * (sp->time - traj->start); double xd = 0, yd = 0; DXPoint p; /* Find the catching offset */ if(traj->object != NULL) { if(ObjectDefs[traj->object->type].handle > 0) { /* Handles Need to be oriented */ xd = ObjectDefs[traj->object->type].handle * PERSPEC * sin(angle); yd = ObjectDefs[traj->object->type].handle * cos(angle); } else { /* Balls are always caught at the bottom */ xd = 0; yd = -4; } } p.x = (CUBIC(traj->xp, sp->time) - xd); p.y = (CUBIC(traj->yp, sp->time) + yd); reach_arm(mi, traj->hand, &p); /* Store updated hand position */ traj->x = p.x + xd; traj->y = p.y - yd; } if (traj->type == Ball || traj->type == Full) { /* Only interested in objects on this pass */ double x, y; Trace *s; if(traj->type == Full) { /* Adjusted these in the first pass */ x = traj->x; y = traj->y; } else { x = CUBIC(traj->xp, sp->time); y = CUBIC(traj->yp, sp->time); } ADD_ELEMENT(Trace, s, traj->object->trace->prev); s->x = x; s->y = y; s->angle = traj->angle + traj->spin * (sp->time - traj->start); s->divisions = traj->divisions; traj->object->tracelen++; traj->object->active = True; } } else { /* expired */ Trajectory *n = traj; traj=traj->prev; trajectory_destroy(n); } } /* Erase end of trails */ for (o = sp->objects->next; o != sp->objects; o = o->next) { Trace *s; for (s = o->trace->next; o->trace->next != o->trace && (o->count == 0 || o->tracelen > o->tail); s = o->trace->next) { ObjectDefs[o->type].draw(mi, MI_BLACK_PIXEL(mi), s); REMOVE(s); o->tracelen--; if(o->count <= 0 && o->tracelen <= 0) { /* Object no longer in use and trail gone */ Object *n = o; o = o->prev; object_destroy(n); } if(o->count <= 0) break; /* Allow loop for catch-up, but not clean-up */ } } show_arms(mi, MI_BLACK_PIXEL(mi)); cx = wander(sp, sp->time); /* Reduce flicker by only permitting movements of more than a pixel */ if(fabs((sp->cx - cx))*sp->scale >= 2.0 ) { show_figure(mi, MI_BLACK_PIXEL(mi), False); sp->cx = cx; } show_figure(mi, MI_WHITE_PIXEL(mi), False); show_arms(mi, MI_WHITE_PIXEL(mi)); /* Draw Objects */ for (o = sp->objects->next; o != sp->objects; o = o->next) { if(o->active) { ObjectDefs[o->type].draw(mi,MI_PIXEL(mi, o->color), o->trace->prev); o->active = False; } } /* Save pattern name so we can erase it when it changes */ if(pattern != NULL && strcmp(sp->pattern, pattern) != 0 ) { /* Erase old name */ XSetForeground(MI_DISPLAY(mi), MI_GC(mi), MI_BLACK_PIXEL(mi)); # if 0 XDrawString(MI_DISPLAY(mi), MI_WINDOW(mi), MI_GC(mi), 0, 20, sp->pattern, strlen(sp->pattern)); # else XFillRectangle(MI_DISPLAY(mi), MI_WINDOW(mi), MI_GC(mi), 0, 0, MI_WIDTH(mi), 25); # endif free(sp->pattern); sp->pattern = strdup(pattern); if (MI_IS_VERBOSE(mi)) { (void) fprintf(stderr, "Juggle[%d]: Running: %s\n", MI_SCREEN(mi), sp->pattern); } } if(sp->mode_font != None && XTextWidth(sp->mode_font, sp->pattern, strlen(sp->pattern)) < MI_WIDTH(mi)) { /* Redraw once a cycle, in case it's obscured or it changed */ XSetForeground(MI_DISPLAY(mi), MI_GC(mi), MI_WHITE_PIXEL(mi)); XDrawImageString(MI_DISPLAY(mi), MI_WINDOW(mi), MI_GC(mi), 0, 20, sp->pattern, strlen(sp->pattern)); } #ifdef MEMTEST if((int)(sp->time/10) % 1000 == 0) (void) fprintf(stderr, "sbrk: %d\n", (int)sbrk(0)); #endif if (future < sp->time + 100 * THROW_CATCH_INTERVAL) { refill_juggle(mi); } else if (sp->time > 1<<30) { /* Hard Reset before the clock wraps */ release_juggle(mi); init_juggle(mi); } } XSCREENSAVER_MODULE ("Juggle", juggle) #endif /* MODE_juggle */ xscreensaver-5.36/hacks/polyominoes.c000644 000767 000024 00000174013 12717403772 017770 0ustar00jwzstaff000000 000000 /* -*- Mode: C; tab-width: 4 -*- */ /* polyominoes --- Shows attempts to place polyominoes into a rectangle */ #if 0 static const char sccsid[] = "@(#)polyominoes.c 5.01 2000/12/18 xlockmore"; #endif /* * Copyright (c) 2000 by Stephen Montgomery-Smith * * Permission to use, copy, modify, and distribute this software and its * documentation for any purpose and without fee is hereby granted, * provided that the above copyright notice appear in all copies and that * both that copyright notice and this permission notice appear in * supporting documentation. * * This file is provided AS IS with no warranties of any kind. The author * shall have no liability with respect to the infringement of copyrights, * trade secrets or any patents by this file or any part thereof. In no * event will the author be liable for any lost revenue or profits or * other special, indirect and consequential damages. * * Revision History: * 07-Jan-2001: Made improvement to the search algorithm for the puzzles * involving identical polyominoes (via the variable * reason_to_not_attach). By Stephen Montgomery-Smith. * 20-Dec-2000: Added more puzzles at David Bagley's request. * 27-Nov-2000: Adapted from euler2d.c Copyright (c) 2000 by Stephen * Montgomery-Smith * 05-Jun-2000: Adapted from flow.c Copyright (c) 1996 by Tim Auckland * 18-Jul-1996: Adapted from swarm.c Copyright (c) 1991 by Patrick J. Naughton. * 31-Aug-1990: Adapted from xswarm by Jeff Butterworth. (butterwo@ncsc.org) */ #ifdef STANDALONE # define MODE_polyominoes #define DEFAULTS "*delay: 10000 \n" \ "*cycles: 2000 \n" \ "*ncolors: 64 \n" \ "*fpsSolid: true \n" \ # define polyominoes_handle_event 0 # define SMOOTH_COLORS # include "xlockmore.h" /* in xscreensaver distribution */ # include "erase.h" #else /* STANDALONE */ # include "xlock.h" /* in xlockmore distribution */ #endif /* STANDALONE */ #ifdef MODE_polyominoes #define DEF_IDENTICAL "False" #define DEF_PLAIN "False" static Bool identical; static Bool plain; #undef countof #define countof(x) (sizeof((x))/sizeof((*x))) static XrmOptionDescRec opts[] = { {"-identical", ".polyominoes.identical", XrmoptionNoArg, "on"}, {"+identical", ".polyominoes.identical", XrmoptionNoArg, "off"}, {"-plain", ".polyominoes.plain", XrmoptionNoArg, "on"}, {"+plain", ".polyominoes.plain", XrmoptionNoArg, "off"} }; static argtype vars[] = { {&identical, "identical", "Identical", DEF_IDENTICAL, t_Bool}, {&plain, "plain", "Plain", DEF_PLAIN, t_Bool} }; static OptionStruct desc[] = { {"-/+identical", "turn on/off puzzles where the polyomino pieces are identical"}, {"-/+plain", "turn on/off plain pieces"} }; ENTRYPOINT ModeSpecOpt polyominoes_opts = {sizeof opts / sizeof opts[0], opts, sizeof vars / sizeof vars[0], vars, desc}; #ifdef USE_MODULES ModStruct polyominoes_description = { "polyominoes", "init_polyominoes", "draw_polyominoes", "release_polyominoes", "refresh_polyominoes", "init_polyominoes", (char *) NULL, &polyominoes_opts, 6000, 1, 8192, 1, 64, 1.0, "", "Shows attempts to place polyominoes into a rectangle", 0, NULL }; #endif /* Each polyomino is described by several quantities: len: the number of squares in the polyomino; point: the list of points; tranform_len: the number of items in transform_list; transform_list: a list of transformations that need to be done in order to get all rotations and reflections (see the function transform below); max_white: the maximum number of white squares covered if polyomino is placed on a chess board; color: it's display color; attached: whether it is currently attached to the rectangle; attach_point: point on rectangle where attached; point_no: the number of the point where it is attached; transform_index: which element of transform_list is currently being used. */ typedef struct {int x,y;} point_type; typedef struct {int len; point_type *point; int transform_len, transform_list[8], max_white; unsigned long color; int attached; point_type attach_point; int point_no, transform_index;} polyomino_type; typedef struct _polyominoesstruct{ int wait; int width, height; unsigned border_color; int mono; polyomino_type *polyomino; int nr_polyominoes; Bool identical, use3D; int *attach_list; int nr_attached; /* The array that tells where the polyominoes are attached. */ int *array, *changed_array; /* These specify the dimensions of how things appear on the screen. */ int box, x_margin, y_margin; /* These booleans decide in which way to try to attach the polyominoes. */ int left_right, top_bottom; /* Bitmaps for display purposes. */ int use_bitmaps; XImage *bitmaps[256]; /* Structures used for display purposes if there is not enough memory to allocate bitmaps (or if the screen is small). */ XSegment *lines; XRectangle *rectangles; /* A procedure that may be used to see if certain configurations are permissible. */ int (*check_ok)(struct _polyominoesstruct *sp); /* Tells program that solutions are invariant under 180 degree rotation. */ int rot180; /* This is a variable used in the case that all the polyominoes are identical that will further prune the search tree. Essentially it will be int reason_to_not_attach[nr_polynominoes][nr_polynominoes]; Let me first explain the effect it is trying to overcome. Often in the search process, the computer will first try to fit shapes into a region (call it A), and then into another region (call it B) that is essentially disjoint from A. But it may be that it just is not possible to fit shapes into region B. So it fits something into A, and then tries to fit something into B. Failing it fits something else into A, and then tried again to fit something into B. Thus the program is trying again and again to fit something into B, when it should have figured out the first time that it was impossible. To overcome this, everytime we try to attach a piece, we collect the reasons why it cannot be attached (a boolean for each piece that got in the way). If we see that a piece cannot be attached, we detach the other pieces until we have detached at least one piece for which the boolean reason_to_not_attach is set. */ int *reason_to_not_attach; int counter; #ifdef STANDALONE eraser_state *eraser; #endif } polyominoesstruct; #define ARRAY(x,y) (sp->array[(x)*sp->height+(y)]) #define CHANGED_ARRAY(x,y) (sp->changed_array[(x)*sp->height+(y)]) #define ARRAY_P(p) (sp->array[(p).x*sp->height+(p).y]) #define CHANGED_ARRAY_P(p) (sp->changed_array[(p).x*sp->height+(p).y]) #define ARR(x,y) (((x)<0||(x)>=sp->width||(y)<0||(y)>=sp->height)?-2:ARRAY(x,y)) #define REASON_TO_NOT_ATTACH(x,y) (sp->reason_to_not_attach[(x)*sp->nr_polyominoes+(y)]) #define ROUND8(n) ((((n)+7)/8)*8) /* Defines to index the bitmaps. A set bit indicates that an edge or corner is required. */ #define LEFT (1<<0) #define RIGHT (1<<1) #define UP (1<<2) #define DOWN (1<<3) #define LEFT_UP (1<<4) #define LEFT_DOWN (1<<5) #define RIGHT_UP (1<<6) #define RIGHT_DOWN (1<<7) #define IS_LEFT(n) ((n) & LEFT) #define IS_RIGHT(n) ((n) & RIGHT) #define IS_UP(n) ((n) & UP) #define IS_DOWN(n) ((n) & DOWN) #define IS_LEFT_UP(n) ((n) & LEFT_UP) #define IS_LEFT_DOWN(n) ((n) & LEFT_DOWN) #define IS_RIGHT_UP(n) ((n) & RIGHT_UP) #define IS_RIGHT_DOWN(n) ((n) & RIGHT_DOWN) /* Defines to access the bitmaps. */ #define BITNO(x,y) ((x)+(y)*ROUND8(sp->box)) #define SETBIT(n,x,y) {data[BITNO(x,y)/8] |= 1<<(BITNO(x,y)%8);} #define RESBIT(n,x,y) {data[BITNO(x,y)/8] &= ~(1<<(BITNO(x,y)%8));} #define TWOTHIRDSBIT(n,x,y) {if ((x+y-1)%3) SETBIT(n,x,y) else RESBIT(n,x,y)} #define HALFBIT(n,x,y) {if ((x-y)%2) SETBIT(n,x,y) else RESBIT(n,x,y)} #define THIRDBIT(n,x,y) {if (!((x-y-1)%3)) SETBIT(n,x,y) else RESBIT(n,x,y)} #define THREEQUARTERSBIT(n,x,y) \ {if ((y%2)||((x+2+y/2+1)%2)) SETBIT(n,x,y) else RESBIT(n,x,y)} #define NOTHALFBIT(n,x,y) {if ((x-y)%2) RESBIT(n,x,y) else SETBIT(n,x,y)} /* Parameters for bitmaps. */ #define G ((sp->box/45)+1) /* 1/2 of gap between polyominoes. */ #define T ((sp->box<=12)?1:(G*2)) /* Thickness of walls of polyominoes. */ #define R ((sp->box<=12)?1:(G*6)) /* Amount of rounding. */ #define RT ((sp->box<=12)?1:(G*3)) /* Thickness of wall of rounded parts. Here 3 is an approximation to 2 sqrt(2). */ #define RR 0 /* Roof ridge thickness */ #if 0 /* A list of those bitmaps we need to create to display any pentomino. */ /* (not used right now because it does not seem to work for hexonimoes.) */ static int bitmaps_needed[] = { LEFT_UP|LEFT_DOWN|RIGHT_UP|RIGHT_DOWN, LEFT|RIGHT_UP|RIGHT_DOWN, RIGHT|LEFT_UP|LEFT_DOWN, UP|LEFT_DOWN|RIGHT_DOWN, DOWN|LEFT_UP|RIGHT_UP, LEFT|RIGHT_UP, RIGHT|LEFT_UP, UP|LEFT_DOWN, DOWN|LEFT_UP, LEFT|RIGHT_DOWN, RIGHT|LEFT_DOWN, UP|RIGHT_DOWN, DOWN|RIGHT_UP, /* These needed for hexonimoes*/ LEFT, RIGHT, UP, DOWN, LEFT_DOWN|RIGHT_UP|RIGHT_DOWN, LEFT_UP|RIGHT_UP|RIGHT_DOWN, LEFT_UP|LEFT_DOWN|RIGHT_DOWN, LEFT_UP|LEFT_DOWN|RIGHT_UP, LEFT|UP|RIGHT_DOWN, LEFT|DOWN|RIGHT_UP, RIGHT|UP|LEFT_DOWN, RIGHT|DOWN|LEFT_UP, LEFT|UP, LEFT|DOWN, RIGHT|UP, RIGHT|DOWN, LEFT|RIGHT, UP|DOWN, RIGHT|UP|DOWN, LEFT|UP|DOWN, LEFT|RIGHT|DOWN, LEFT|RIGHT|UP, -1 }; static int bitmap_needed(int n) { int i; for (i=0;bitmaps_needed[i]!=-1;i++) if (n == bitmaps_needed[i]) return 1; return 0; } #endif /* Some debugging routines. static void print_board(polyominoesstruct *sp) { int x,y; for (y=0;yheight;y++) { for (x=0;xwidth;x++) if (ARRAY(x,y) == -1) fprintf(stderr," "); else fprintf(stderr,"%c",'a'+ARRAY(x,y)); fprintf(stderr,"\n"); } fprintf(stderr,"\n"); } static void print_points(point_type *point, int len) { int i; for (i=0;ix=in.x-offset.x+attach_point.x; out->y=in.y-offset.y+attach_point.y; break; case 1: out->x=-(in.y-offset.y)+attach_point.x; out->y=in.x-offset.x+attach_point.y; break; case 2: out->x=-(in.x-offset.x)+attach_point.x; out->y=-(in.y-offset.y)+attach_point.y; break; case 3: out->x=in.y-offset.y+attach_point.x; out->y=-(in.x-offset.x)+attach_point.y; break; case 4: out->x=-(in.x-offset.x)+attach_point.x; out->y=in.y-offset.y+attach_point.y; break; case 5: out->x=in.y-offset.y+attach_point.x; out->y=in.x-offset.x+attach_point.y; break; case 6: out->x=in.x-offset.x+attach_point.x; out->y=-(in.y-offset.y)+attach_point.y; break; case 7: out->x=-(in.y-offset.y)+attach_point.x; out->y=-(in.x-offset.x)+attach_point.y; break; } } static int first_poly_no(polyominoesstruct *sp) { int poly_no; poly_no = 0; while(poly_nonr_polyominoes && sp->polyomino[poly_no].attached) poly_no++; return poly_no; } static void next_poly_no(polyominoesstruct *sp, int *poly_no) { if (sp->identical) { *poly_no = sp->nr_polyominoes; } else { do { (*poly_no)++; } while (*poly_nonr_polyominoes && sp->polyomino[*poly_no].attached); } } /* check_all_regions_multiple_of looks for connected regions of blank spaces, and returns 0 if it finds a connected region containing a number of blanks that is not a multiple of n. */ static void count_adjacent_blanks(polyominoesstruct *sp, int *count, int x, int y, int blank_mark) { if (ARRAY(x,y) == -1) { (*count)++; ARRAY(x,y) = blank_mark; if (x>=1) count_adjacent_blanks(sp, count,x-1,y,blank_mark); if (xwidth-1) count_adjacent_blanks(sp, count,x+1,y,blank_mark); if (y>=1) count_adjacent_blanks(sp, count,x,y-1,blank_mark); if (yheight-1) count_adjacent_blanks(sp, count,x,y+1,blank_mark); } } static int check_all_regions_multiple_of(polyominoesstruct *sp, int n) { int x,y,count,good = 1; for (x=0;xwidth && good;x++) for (y=0;yheight && good;y++) { count = 0; count_adjacent_blanks(sp, &count,x,y,-2); good = count%n == 0; } for (x=0;xwidth;x++) for (y=0;yheight;y++) if (ARRAY(x,y) == -2) ARRAY(x,y) = -1; return good; } static int check_all_regions_positive_combination_of(polyominoesstruct *sp, int m, int n) { int x,y,count,good = 1; for (x=0;xwidth && good;x++) for (y=0;yheight && good;y++) { count = 0; count_adjacent_blanks(sp, &count,x,y,-2); good = 0; for (;count>=0 && !good;count-=m) good = count%n == 0; } for (x=0;xwidth;x++) for (y=0;yheight;y++) if (ARRAY(x,y) == -2) ARRAY(x,y) = -1; return good; } static int find_smallest_blank_component(polyominoesstruct *sp) { int x,y,size,smallest_size,blank_mark,smallest_mark; smallest_mark = blank_mark = -10; smallest_size = 1000000000; for (x=0;xwidth;x++) for (y=0;yheight;y++) if (ARRAY(x,y) == -1) { size = 0; count_adjacent_blanks(sp, &size,x,y,blank_mark); if (sizewidth;x++) for (y=0;yheight;y++) { if (ARRAY(x,y) == -1 && (x+y)%2) whites++; if (ARRAY(x,y) == -1 && (x+y+1)%2) blacks++; } for (poly_no=0;poly_nonr_polyominoes;poly_no++) if (!sp->polyomino[poly_no].attached) { max_white += sp->polyomino[poly_no].max_white; min_white += sp->polyomino[poly_no].len - sp->polyomino[poly_no].max_white; } return (min_white <= blacks && min_white <= whites && blacks <= max_white && whites <= max_white); } /* This routine looks at the point (x,y) and sees how many polyominoes and all their various transforms may be attached there. */ static int score_point(polyominoesstruct *sp, int x, int y, int min_score_so_far) { int poly_no, point_no, transform_index, i, attachable; point_type attach_point = { 0, 0 }, target_point = { 0, 0 }; int score = 0; if (x>=1 && xwidth-1 && y>=1 && yheight-1 && ARRAY(x-1,y-1)<0 && ARRAY(x-1,y)<0 && ARRAY(x-1,y+1)<0 && ARRAY(x+1,y-1)<0 && ARRAY(x+1,y)<0 && ARRAY(x+1,y+1)<0 && ARRAY(x,y-1)<0 && ARRAY(x,y+1)<0) return 10000; attach_point.x = x; attach_point.y = y; for (poly_no=first_poly_no(sp);poly_nonr_polyominoes;next_poly_no(sp,&poly_no)) if (!sp->polyomino[poly_no].attached) { for (point_no=0;point_nopolyomino[poly_no].len;point_no++) for (transform_index=0;transform_indexpolyomino[poly_no].transform_len;transform_index++) { attachable = 1; for (i=0;ipolyomino[poly_no].len;i++) { transform(sp->polyomino[poly_no].point[i], sp->polyomino[poly_no].point[point_no], sp->polyomino[poly_no].transform_list[transform_index], attach_point, &target_point); if ( ! ((target_point.x>=0) && (target_point.xwidth) && (target_point.y>=0) && (target_point.yheight) && (ARRAY_P(target_point)<0))) { attachable = 0; break; } } if (attachable) { score++; if (score>=min_score_so_far) return score; } } } return score; } static void find_blank(polyominoesstruct *sp, point_type *point) { int score, worst_score; int x, y; int blank_mark; blank_mark = find_smallest_blank_component(sp); worst_score = 1000000; for (x=0;xwidth;x++) for (y=0;yheight;y++) if (ARRAY(x,y)==blank_mark) { score = 100*score_point(sp,x,y,worst_score); if (score>0) { if (sp->left_right) score += 10*x; else score += 10*(sp->width-1-x); if (sp->top_bottom) score += y; else score += (sp->height-1-y); } if (scorex = x; point->y = y; worst_score = score; } } for (x=0;xwidth;x++) for (y=0;yheight;y++) if (ARRAY(x,y)<0) ARRAY(x,y) = -1; } /* Detaches the most recently attached polyomino. */ static void detach(polyominoesstruct *sp, int *poly_no, int *point_no, int *transform_index, point_type *attach_point, int rot180) { int i; point_type target_point = { 0, 0 }; if (sp->nr_attached == 0) return; sp->nr_attached--; *poly_no = sp->attach_list[sp->nr_attached]; *point_no = sp->polyomino[*poly_no].point_no; *transform_index = sp->polyomino[*poly_no].transform_index; *attach_point = sp->polyomino[*poly_no].attach_point; for (i=0;ipolyomino[*poly_no].len;i++) { transform(sp->polyomino[*poly_no].point[i], sp->polyomino[*poly_no].point[*point_no], sp->polyomino[*poly_no].transform_list[*transform_index]^(rot180<<1), *attach_point, &target_point); ARRAY_P(target_point) = -1; CHANGED_ARRAY_P(target_point) = 1; } sp->polyomino[*poly_no].attached = 0; } /* Attempts to attach a polyomino at point (x,y) at the point_no-th point of that polyomino, using the transform transform_no. Returns 1 if successful. */ static int attach(polyominoesstruct *sp, int poly_no, int point_no, int transform_index, point_type attach_point, int rot180, int *reason_to_not_attach) { point_type target_point = { 0, 0 }; int i; int attachable = 1, worst_reason_not_to_attach = 1000000000; if (rot180) { attach_point.x = sp->width-1-attach_point.x; attach_point.y = sp->height-1-attach_point.y; } if (sp->polyomino[poly_no].attached) return 0; for (i=0;ipolyomino[poly_no].len;i++) { transform(sp->polyomino[poly_no].point[i], sp->polyomino[poly_no].point[point_no], sp->polyomino[poly_no].transform_list[transform_index]^(rot180<<1), attach_point, &target_point); if ( ! ((target_point.x>=0) && (target_point.xwidth) && (target_point.y>=0) && (target_point.yheight) && (ARRAY_P(target_point) == -1))) { if (sp->identical) { attachable = 0; if ((target_point.x>=0) && (target_point.xwidth) && (target_point.y>=0) && (target_point.yheight) && (ARRAY_P(target_point) >= 0) && (ARRAY_P(target_point)identical && !attachable) { if (worst_reason_not_to_attach < 1000000000) reason_to_not_attach[worst_reason_not_to_attach] = 1; return 0; } for (i=0;ipolyomino[poly_no].len;i++) { transform(sp->polyomino[poly_no].point[i], sp->polyomino[poly_no].point[point_no], sp->polyomino[poly_no].transform_list[transform_index]^(rot180<<1), attach_point, &target_point); ARRAY_P(target_point) = poly_no; CHANGED_ARRAY_P(target_point) = 1; } sp->attach_list[sp->nr_attached] = poly_no; sp->nr_attached++; sp->polyomino[poly_no].attached = 1; sp->polyomino[poly_no].point_no = point_no; sp->polyomino[poly_no].attach_point = attach_point; sp->polyomino[poly_no].transform_index = transform_index; if (!sp->check_ok(sp)) { detach(sp,&poly_no,&point_no,&transform_index,&attach_point,rot180); return 0; } return 1; } static int next_attach_try(polyominoesstruct *sp, int *poly_no, int *point_no, int *transform_index) { (*transform_index)++; if (*transform_index>=sp->polyomino[*poly_no].transform_len) { *transform_index = 0; (*point_no)++; if (*point_no>=sp->polyomino[*poly_no].len) { *point_no = 0; next_poly_no(sp,poly_no); if (*poly_no>=sp->nr_polyominoes) { *poly_no = first_poly_no(sp); return 0; } } } return 1; } /******************************************************* Display routines. *******************************************************/ static void draw_without_bitmaps(ModeInfo * mi, polyominoesstruct *sp) { Display *display = MI_DISPLAY(mi); Window window = MI_WINDOW(mi); GC gc = MI_GC(mi); int x,y,poly_no,nr_lines,nr_rectangles; XSetLineAttributes(display,gc,sp->box/10+1,LineSolid,CapRound,JoinRound); for (poly_no=-1;poly_nonr_polyominoes;poly_no++) { nr_rectangles = 0; for (x=0;xwidth;x++) for (y=0;yheight;y++) if (CHANGED_ARRAY(x,y) && ARRAY(x,y) == poly_no) { sp->rectangles[nr_rectangles].x = sp->x_margin + sp->box*x; sp->rectangles[nr_rectangles].y = sp->y_margin + sp->box*y; sp->rectangles[nr_rectangles].width = sp->box; sp->rectangles[nr_rectangles].height = sp->box; nr_rectangles++; } if (poly_no == -1) XSetForeground(display, gc, MI_BLACK_PIXEL(mi)); else XSetForeground(display, gc, sp->polyomino[poly_no].color); XFillRectangles(display, window, gc, sp->rectangles, nr_rectangles); } XSetForeground(display, gc, MI_BLACK_PIXEL(mi)); nr_lines = 0; for (x=0;xwidth-1;x++) for (y=0;yheight;y++) { if (ARRAY(x,y) == -1 && ARRAY(x+1,y) == -1 && (CHANGED_ARRAY(x,y) || CHANGED_ARRAY(x+1,y))) { sp->lines[nr_lines].x1 = sp->x_margin + sp->box*(x+1); sp->lines[nr_lines].y1 = sp->y_margin + sp->box*y; sp->lines[nr_lines].x2 = sp->x_margin + sp->box*(x+1); sp->lines[nr_lines].y2 = sp->y_margin + sp->box*(y+1); nr_lines++; } } XDrawSegments(display, window, gc, sp->lines, nr_lines); nr_lines = 0; for (x=0;xwidth;x++) for (y=0;yheight-1;y++) { if (ARRAY(x,y) == -1 && ARRAY(x,y+1) == -1 && (CHANGED_ARRAY(x,y) || CHANGED_ARRAY(x,y+1))) { sp->lines[nr_lines].x1 = sp->x_margin + sp->box*x; sp->lines[nr_lines].y1 = sp->y_margin + sp->box*(y+1); sp->lines[nr_lines].x2 = sp->x_margin + sp->box*(x+1); sp->lines[nr_lines].y2 = sp->y_margin + sp->box*(y+1); nr_lines++; } } XDrawSegments(display, window, gc, sp->lines, nr_lines); XSetForeground(display, gc, MI_WHITE_PIXEL(mi)); XDrawRectangle(display, window, gc, sp->x_margin, sp->y_margin, sp->box*sp->width, sp->box*sp->height); XSetForeground(display, gc, MI_WHITE_PIXEL(mi)); nr_lines = 0; for (x=0;xwidth-1;x++) for (y=0;yheight;y++) { if (ARRAY(x+1,y) != ARRAY(x,y)) { sp->lines[nr_lines].x1 = sp->x_margin + sp->box*(x+1); sp->lines[nr_lines].y1 = sp->y_margin + sp->box*y; sp->lines[nr_lines].x2 = sp->x_margin + sp->box*(x+1); sp->lines[nr_lines].y2 = sp->y_margin + sp->box*(y+1); nr_lines++; } } XDrawSegments(display, window, gc, sp->lines, nr_lines); nr_lines = 0; for (x=0;xwidth;x++) for (y=0;yheight-1;y++) { if (ARRAY(x,y+1) != ARRAY(x,y)) { sp->lines[nr_lines].x1 = sp->x_margin + sp->box*x; sp->lines[nr_lines].y1 = sp->y_margin + sp->box*(y+1); sp->lines[nr_lines].x2 = sp->x_margin + sp->box*(x+1); sp->lines[nr_lines].y2 = sp->y_margin + sp->box*(y+1); nr_lines++; } } XDrawSegments(display, window, gc, sp->lines, nr_lines); XSetLineAttributes(display,gc,1,LineSolid,CapRound,JoinRound); } static void create_bitmaps(ModeInfo * mi, polyominoesstruct *sp) { int x,y,n; char *data; for (n=0;nbitmaps);n++) { /* Avoid duplication of identical bitmaps. */ if (IS_LEFT_UP(n) && (IS_LEFT(n) || IS_UP(n))) sp->bitmaps[n] = sp->bitmaps[n & ~LEFT_UP]; else if (IS_LEFT_DOWN(n) && (IS_LEFT(n) || IS_DOWN(n))) sp->bitmaps[n] = sp->bitmaps[n & ~LEFT_DOWN]; else if (IS_RIGHT_UP(n) && (IS_RIGHT(n) || IS_UP(n))) sp->bitmaps[n] = sp->bitmaps[n & ~RIGHT_UP]; else if (IS_RIGHT_DOWN(n) && (IS_RIGHT(n) || IS_DOWN(n))) sp->bitmaps[n] = sp->bitmaps[n & ~RIGHT_DOWN]; else /* if (bitmap_needed(n)) */ { data = (char *) malloc(sizeof(char)*(sp->box*ROUND8(sp->box)/8)); if (data == NULL) { sp->use_bitmaps = 0; return; } for (y=0;ybox;y++) for (x=0;xbox;x++) { if (!sp->use3D) { #ifdef SMALL_BELLYBUTTON if (x >= sp->box / 2 && x <= sp->box / 2 + 1 && y >= sp->box / 2 && y <= sp->box / 2 + 1) NOTHALFBIT(n,x,y) else #endif HALFBIT(n,x,y) } else if ((x>=y && x<=sp->box-y-1 && IS_UP(n)) || (x<=y && x<=sp->box-y-1 && ybox/2 && !IS_LEFT(n)) || (x>=y && x>=sp->box-y-1 && ybox/2 && !IS_RIGHT(n))) SETBIT(n,x,y) else if ((x<=y && x<=sp->box-y-1 && IS_LEFT(n)) || (x>=y && x<=sp->box-y-1 && xbox/2 && !IS_UP(n)) || (x<=y && x>=sp->box-y-1 && xbox/2 && !IS_DOWN(n))) TWOTHIRDSBIT(n,x,y) else if ((x>=y && x>=sp->box-y-1 && IS_RIGHT(n)) || (x>=y && x<=sp->box-y-1 && x>=sp->box/2 && !IS_UP(n)) || (x<=y && x>=sp->box-y-1 && x>=sp->box/2 && !IS_DOWN(n))) HALFBIT(n,x,y) else if ((x<=y && x>=sp->box-y-1 && IS_DOWN(n)) || (x<=y && x<=sp->box-y-1 && y>=sp->box/2 && !IS_LEFT(n)) || (x>=y && x>=sp->box-y-1 && y>=sp->box/2 && !IS_RIGHT(n))) THIRDBIT(n,x,y) } if (IS_LEFT(n)) for (y=0;ybox;y++) for (x=G;xbox;y++) for (x=G;xbox-1-x,y) if (IS_UP(n)) for (x=0;xbox;x++) for (y=G;ybox;x++) for (y=G;ybox-1-y) if (IS_LEFT(n)) for (y=0;ybox;y++) for (x=0;xbox;y++) for (x=0;xbox-1-x,y) if (IS_UP(n)) for (x=0;xbox;x++) for (y=0;ybox;x++) for (y=0;ybox-1-y) if (IS_LEFT(n) && IS_UP(n)) for (x=G;x<=G+R;x++) for (y=G;y<=R+2*G-x;y++) { if (x+y>R+2*G-RT) SETBIT(n,x,y) else RESBIT(n,x,y) } if (IS_LEFT(n) && IS_DOWN(n)) for (x=G;x<=G+R;x++) for (y=G;y<=R+2*G-x;y++) { if (x+y>R+2*G-RT) SETBIT(n,x,sp->box-1-y) else RESBIT(n,x,sp->box-1-y) } if (IS_RIGHT(n) && IS_UP(n)) for (x=G;x<=G+R;x++) for (y=G;y<=R+2*G-x;y++) { if (x+y>R+2*G-RT) SETBIT(n,sp->box-1-x,y) else RESBIT(n,sp->box-1-x,y) } if (IS_RIGHT(n) && IS_DOWN(n)) for (x=G;x<=G+R;x++) for (y=G;y<=R+2*G-x;y++) { if (x+y>R+2*G-RT) SETBIT(n,sp->box-1-x,sp->box-1-y) else RESBIT(n,sp->box-1-x,sp->box-1-y) } if (!IS_LEFT(n) && !IS_UP(n) && IS_LEFT_UP(n)) { for (x=0;xbox-1-y) for (x=G;xbox-1-y) for (x=0;xbox-1-y) } if (!IS_RIGHT(n) && !IS_UP(n) && IS_RIGHT_UP(n)) { for (x=0;xbox-1-x,y) for (x=G;xbox-1-x,y) for (x=0;xbox-1-x,y) } if (!IS_RIGHT(n) && !IS_DOWN(n) && IS_RIGHT_DOWN(n)) { for (x=0;xbox-1-x,sp->box-1-y) for (x=G;xbox-1-x,sp->box-1-y) for (x=0;xbox-1-x,sp->box-1-y) } #ifdef LARGE_BELLYBUTTON if (!sp->use3D) { if (!IS_LEFT(n) && !IS_UP(n) && !IS_LEFT_UP(n)) for (x=0;xbox-G-T;ybox;y++) SETBIT(n,x,y) if (!IS_RIGHT(n) && !IS_UP(n) && !IS_RIGHT_UP(n)) for (x=sp->box-G-T;xbox;x++) for(y=0;ybox-G-T;xbox;x++) for(y=sp->box-G-T;ybox;y++) SETBIT(n,x,y) } else #else if (sp->use3D) #endif { if (!IS_LEFT(n) && !IS_UP(n) && !IS_LEFT_UP(n)) for (x=0;xbox/2-RR;x++) for(y=0;ybox/2-RR;y++) THREEQUARTERSBIT(n,x,y) if (!IS_LEFT(n) && !IS_DOWN(n) && !IS_LEFT_DOWN(n)) for (x=0;xbox/2-RR;x++) for(y=sp->box/2+RR;ybox;y++) THREEQUARTERSBIT(n,x,y) if (!IS_RIGHT(n) && !IS_UP(n) && !IS_RIGHT_UP(n)) for (x=sp->box/2+RR;xbox;x++) for(y=0;ybox/2-RR;y++) THREEQUARTERSBIT(n,x,y) if (!IS_RIGHT(n) && !IS_DOWN(n) && !IS_RIGHT_DOWN(n)) for (x=sp->box/2+RR;xbox;x++) for(y=sp->box/2+RR;ybox;y++) THREEQUARTERSBIT(n,x,y) } sp->bitmaps[n] = XCreateImage(MI_DISPLAY(mi), MI_VISUAL(mi), 1, XYBitmap, 0, data, sp->box, sp->box, 8, 0); if (sp->bitmaps[n] == None) { free(data); sp->use_bitmaps = 0; return; } sp->bitmaps[n]->byte_order = MSBFirst; sp->bitmaps[n]->bitmap_unit = 8; sp->bitmaps[n]->bitmap_bit_order = LSBFirst; } } sp->use_bitmaps = 1; } static void draw_with_bitmaps(ModeInfo * mi, polyominoesstruct *sp) { Display *display = MI_DISPLAY(mi); Window window = MI_WINDOW(mi); GC gc = MI_GC(mi); int x,y,t,bitmap_index; for (x=0;xwidth;x++) for (y=0;yheight;y++) { if (ARRAY(x,y) == -1) { if (CHANGED_ARRAY(x,y)) { XSetForeground(display, gc, MI_BLACK_PIXEL(mi)); XFillRectangle(display,window,gc, sp->x_margin + sp->box*x, sp->y_margin + sp->box*y, sp->box,sp->box); } } else { XSetForeground(display, gc, sp->polyomino[ARRAY(x,y)].color); bitmap_index = 0; if (ARR(x,y) != ARR(x-1,y)) bitmap_index |= LEFT; if (ARR(x,y) != ARR(x+1,y)) bitmap_index |= RIGHT; if (ARR(x,y) != ARR(x,y-1)) bitmap_index |= UP; if (ARR(x,y) != ARR(x,y+1)) bitmap_index |= DOWN; if (ARR(x,y) != ARR(x-1,y-1)) bitmap_index |= LEFT_UP; if (ARR(x,y) != ARR(x-1,y+1)) bitmap_index |= LEFT_DOWN; if (ARR(x,y) != ARR(x+1,y-1)) bitmap_index |= RIGHT_UP; if (ARR(x,y) != ARR(x+1,y+1)) bitmap_index |= RIGHT_DOWN; (void) XPutImage(display,window,gc, sp->bitmaps[bitmap_index], 0,0, sp->x_margin + sp->box*x, sp->y_margin + sp->box*y, sp->box,sp->box); } } XSetForeground(display, gc, sp->border_color); for (t=G;tx_margin-t-1,sp->y_margin-t-1, sp->box*sp->width+1+2*t, sp->box*sp->height+1+2*t); } /*************************************************** Routines to initialise and close down polyominoes. ***************************************************/ static void free_bitmaps(polyominoesstruct *sp) { int n; for (n=0;nbitmaps);n++) /* Don't bother to free duplicates */ if (IS_LEFT_UP(n) && (IS_LEFT(n) || IS_UP(n))) sp->bitmaps[n] = None; else if (IS_LEFT_DOWN(n) && (IS_LEFT(n) || IS_DOWN(n))) sp->bitmaps[n] = None; else if (IS_RIGHT_UP(n) && (IS_RIGHT(n) || IS_UP(n))) sp->bitmaps[n] = None; else if (IS_RIGHT_DOWN(n) && (IS_RIGHT(n) || IS_DOWN(n))) sp->bitmaps[n] = None; else if (sp->bitmaps[n] != None) { XDestroyImage(sp->bitmaps[n]); sp->bitmaps[n] = None; } } #define deallocate(p,t) if ((p)!=NULL) {free(p); p=(t*)NULL;} static void free_polyominoes(polyominoesstruct *sp) { int n; for (n=0;nnr_polyominoes;n++) { deallocate(sp->polyomino[n].point, point_type); } deallocate(sp->polyomino, polyomino_type); deallocate(sp->attach_list, int); deallocate(sp->rectangles, XRectangle); deallocate(sp->lines, XSegment); deallocate(sp->reason_to_not_attach, int); deallocate(sp->array, int); deallocate(sp->changed_array, int); free_bitmaps(sp); } #define set_allocate(p,type,size) p = (type *) malloc(size); \ if ((p)==NULL) {free_polyominoes(sp);return 0;} #define copy_polyomino(dst,src,new_rand) \ (dst).len=(src).len; \ (dst).max_white = (src).max_white; \ set_allocate((dst).point,point_type,sizeof(point_type)*(src).len); \ (dst).len = (src).len; \ if (new_rand) \ random_permutation((src).len,perm_point); \ for (i=0;i<(src).len;i++) \ (dst).point[i] = (src).point[perm_point[i]]; \ (dst).transform_len = (src).transform_len; \ if (new_rand) \ random_permutation((src).transform_len,perm_transform); \ for (i=0;i<(src).transform_len;i++) \ (dst).transform_list[i] = (src).transform_list[perm_transform[i]]; \ (dst).attached = 0 /*************************************************** Puzzle specific initialization routines. ***************************************************/ static int check_pentomino_puzzle(polyominoesstruct *sp) { return check_all_regions_multiple_of(sp, 5) && whites_ok(sp); } static int check_hexomino_puzzle(polyominoesstruct *sp) { return check_all_regions_multiple_of(sp, 6) && whites_ok(sp); } static int check_tetr_pentomino_puzzle(polyominoesstruct *sp) { return check_all_regions_positive_combination_of(sp, 5, 4) && whites_ok(sp); } static int check_pent_hexomino_puzzle(polyominoesstruct *sp) { return check_all_regions_positive_combination_of(sp, 6, 5) && whites_ok(sp); } static int check_heptomino_puzzle(polyominoesstruct *sp) { return check_all_regions_multiple_of(sp, 7) && whites_ok(sp); } static int check_octomino_puzzle(polyominoesstruct *sp) { return check_all_regions_multiple_of(sp, 8) && whites_ok(sp); } static int check_dekomino_puzzle(polyominoesstruct *sp) { return check_all_regions_multiple_of(sp, 10) && whites_ok(sp); } static int check_elevenomino_puzzle(polyominoesstruct *sp) { return check_all_regions_multiple_of(sp, 11) && whites_ok(sp); } static struct {int len; point_type point[4]; int transform_len, transform_list[8], max_white;} tetromino[5] = { /* xxxx */ {4, {{0,0}, {1,0}, {2,0}, {3,0}}, 2, {0, 1, -1, -1, -1, -1, -1, -1}, 2}, /* xxx x */ {4, {{0,0}, {1,0}, {2,0}, {2,1}}, 8, {0, 1, 2, 3, 4, 5, 6, 7}, 2}, /* xxx x */ {4, {{0,0}, {1,0}, {1,1}, {2,0}}, 4, {0, 1, 2, 3, -1, -1, -1, -1}, 3}, /* xx xx */ {4, {{0,0}, {1,0}, {1,1}, {2,1}}, 4, {0, 1, 4, 5, -1, -1, -1, -1}, 2}, /* xx xx */ {4, {{0,0}, {0,1}, {1,0}, {1,1}}, 1, {0, -1, -1, -1, -1, -1, -1, -1}, 2}}; static struct pentomino_struct {int len; point_type point[5]; int transform_len, transform_list[8], max_white;} pentomino[12] = { /* xxxxx */ {5, {{0,0}, {1,0}, {2,0}, {3,0}, {4,0}}, 2, {0, 1, -1, -1, -1, -1, -1, -1}, 3}, /* xxxx x */ {5, {{0,0}, {1,0}, {2,0}, {3,0}, {3,1}}, 8, {0, 1, 2, 3, 4, 5, 6, 7}, 3}, /* xxxx x */ {5, {{0,0}, {1,0}, {2,0}, {2,1}, {3,0}}, 8, {0, 1, 2, 3, 4, 5, 6, 7}, 3}, /* x xxx x */ {5, {{0,0}, {1,0}, {2,-1}, {2,0}, {2,1}}, 4, {0, 1, 2, 3, -1, -1, -1, -1}, 3}, /* xxx xx */ {5, {{0,0}, {1,0}, {2,0}, {2,1}, {3,1}}, 8, {0, 1, 2, 3, 4, 5, 6, 7}, 3}, /* xxx xx */ {5, {{0,0}, {1,0}, {1,1}, {2,0}, {2,1}}, 8, {0, 1, 2, 3, 4, 5, 6, 7}, 3}, /* xxx x x */ {5, {{0,0}, {1,0}, {2,0}, {2,1}, {2,2}}, 4, {0, 1, 2, 3, -1, -1, -1, -1}, 3}, /* x xxx x */ {5, {{0,0}, {1,-1}, {1,0}, {2,0}, {2,1}}, 8, {0, 1, 2, 3, 4, 5, 6, 7}, 3}, /* xxx x x */ {5, {{0,0}, {0,1}, {1,0}, {2,0}, {2,1}}, 4, {0, 1, 2, 3, -1, -1, -1, -1}, 3}, /* x xxx x */ {5, {{0,0}, {0,1}, {1,0}, {2,-1}, {2,0}}, 4, {0, 1, 4, 5, -1, -1, -1, -1}, 3}, /* x xxx x */ {5, {{0,0}, {1,-1}, {1,0}, {1,1}, {2,0}}, 1, {0, -1, -1, -1, -1, -1, -1, -1}, 4}, /* xx xx x */ {5, {{0,0}, {1,0}, {1,1}, {2,1}, {2,2}}, 4, {0, 1, 2, 3, -1, -1, -1, -1}, 3}}; static struct hexomino_struct {int len; point_type point[6]; int transform_len, transform_list[8], max_white;} hexomino[35] = { /* xxxxxx */ {6, {{0,0}, {1,0}, {2,0}, {3,0}, {4,0}, {5,0}}, 2, {0, 1, -1, -1, -1, -1, -1, -1}, 3}, /* xxxxx x */ {6, {{0,0}, {1,0}, {2,0}, {3,0}, {4,0}, {4,1}}, 8, {0, 1, 2, 3, 4, 5, 6, 7}, 3}, /* xxxxx x */ {6, {{0,0}, {1,0}, {2,0}, {3,0}, {3,1}, {4,0}}, 8, {0, 1, 2, 3, 4, 5, 6, 7}, 4}, /* xxxxx x */ {6, {{0,0}, {1,0}, {2,0}, {2,1}, {3,0}, {4,0}}, 4, {0, 1, 2, 3, -1, -1, -1, -1}, 3}, /* x xxxx x */ {6, {{0,0}, {1,0}, {2,0}, {3,-1}, {3,0}, {3,1}}, 4, {0, 1, 2, 3, -1, -1, -1, -1}, 4}, /* xxxx xx */ {6, {{0,0}, {1,0}, {2,0}, {3,0}, {3,1}, {4,1}}, 8, {0, 1, 2, 3, 4, 5, 6, 7}, 3}, /* xxxx xx */ {6, {{0,0}, {1,0}, {2,0}, {2,1}, {3,0}, {3,1}}, 8, {0, 1, 2, 3, 4, 5, 6, 7}, 3}, /* xxxx x x */ {6, {{0,0}, {1,0}, {2,0}, {3,0}, {3,1}, {3,2}}, 8, {0, 1, 2, 3, 4, 5, 6, 7}, 3}, /* x xxxx x */ {6, {{0,0}, {1,0}, {2,-1}, {2,0}, {3,0}, {3,1}}, 8, {0, 1, 2, 3, 4, 5, 6, 7}, 3}, /* xxxx x x */ {6, {{0,0}, {1,0}, {1,1}, {2,0}, {3,0}, {3,1}}, 8, {0, 1, 2, 3, 4, 5, 6, 7}, 4}, /* x xxxx x */ {6, {{0,0}, {1,-1}, {1,0}, {2,0}, {3,0}, {3,1}}, 8, {0, 1, 2, 3, 4, 5, 6, 7}, 4}, /* xxxx x x */ {6, {{0,0}, {0,1}, {1,0}, {2,0}, {3,0}, {3,1}}, 4, {0, 1, 2, 3, -1, -1, -1, -1}, 3}, /* x xxxx x */ {6, {{0,0}, {0,1}, {1,0}, {2,0}, {3,-1}, {3,0}}, 4, {0, 1, 4, 5, -1, -1, -1, -1}, 3}, /* x xxxx x */ {6, {{0,0}, {1,0}, {2,-1}, {2,0}, {2,1}, {3,0}}, 4, {0, 1, 2, 3, -1, -1, -1, -1}, 4}, /* xxxx xx */ {6, {{0,0}, {1,0}, {1,1}, {2,0}, {2,1}, {3,0}}, 4, {0, 1, 2, 3, -1, -1, -1, -1}, 3}, /* xxxx x x */ {6, {{0,0}, {1,0}, {2,0}, {2,1}, {2,2}, {3,0}}, 8, {0, 1, 2, 3, 4, 5, 6, 7}, 3}, /* x xxxx x */ {6, {{0,0}, {1,-1}, {1,0}, {2,0}, {2,1}, {3,0}}, 4, {0, 1, 4, 5, -1, -1, -1, -1}, 3}, /* xx xxx x */ {6, {{0,0}, {1,0}, {2,-1}, {2,0}, {2,1}, {3,-1}}, 8, {0, 1, 2, 3, 4, 5, 6, 7}, 3}, /* xx xxx x */ {6, {{0,0}, {1,-1}, {1,0}, {2,-1}, {2,0}, {2,1}}, 8, {0, 1, 2, 3, 4, 5, 6, 7}, 3}, /* x xxx x x */ {6, {{0,0}, {0,1}, {1,0}, {2,-1}, {2,0}, {2,1}}, 8, {0, 1, 2, 3, 4, 5, 6, 7}, 4}, /* xxx xxx */ {6, {{0,0}, {1,0}, {2,0}, {2,1}, {3,1}, {4,1}}, 4, {0, 1, 4, 5, -1, -1, -1, -1}, 3}, /* xxx xx x */ {6, {{0,0}, {1,0}, {2,0}, {2,1}, {3,1}, {3,2}}, 8, {0, 1, 2, 3, 4, 5, 6, 7}, 3}, /* xxx xxx */ {6, {{0,0}, {1,0}, {1,1}, {2,0}, {2,1}, {3,1}}, 4, {0, 1, 4, 5, -1, -1, -1, -1}, 4}, /* xxx xx x */ {6, {{0,0}, {1,0}, {2,0}, {2,1}, {2,2}, {3,1}}, 8, {0, 1, 2, 3, 4, 5, 6, 7}, 4}, /* x xxx xx */ {6, {{0,0}, {1,-1}, {1,0}, {2,0}, {2,1}, {3,1}}, 8, {0, 1, 2, 3, 4, 5, 6, 7}, 4}, /* xxx x xx */ {6, {{0,0}, {0,1}, {1,0}, {2,0}, {2,1}, {3,1}}, 8, {0, 1, 2, 3, 4, 5, 6, 7}, 3}, /* xxx xx x */ {6, {{0,0}, {1,0}, {1,1}, {2,0}, {2,1}, {2,2}}, 4, {0, 1, 2, 3, -1, -1, -1, -1}, 4}, /* x xxx xx */ {6, {{0,0}, {1,-1}, {1,0}, {1,1}, {2,0}, {2,1}}, 4, {0, 1, 2, 3, -1, -1, -1, -1}, 4}, /* xxx xxx */ {6, {{0,0}, {0,1}, {1,0}, {1,1}, {2,0}, {2,1}}, 2, {0, 1, -1, -1, -1, -1, -1, -1}, 3}, /* xxx x xx */ {6, {{0,0}, {1,0}, {2,0}, {2,1}, {2,2}, {3,2}}, 8, {0, 1, 2, 3, 4, 5, 6, 7}, 3}, /* xxx x xx */ {6, {{0,0}, {1,0}, {1,2}, {2,0}, {2,1}, {2,2}}, 8, {0, 1, 2, 3, 4, 5, 6, 7}, 3}, /* x xxx x x */ {6, {{0,0}, {0,1}, {1,-1}, {1,0}, {2,0}, {2,1}}, 4, {0, 1, 2, 3, -1, -1, -1, -1}, 3}, /* xx xxx x */ {6, {{0,0}, {0,1}, {1,0}, {2,-1}, {2,0}, {3,-1}}, 8, {0, 1, 2, 3, 4, 5, 6, 7}, 3}, /* xx xxx x */ {6, {{0,0}, {0,1}, {1,-1}, {1,0}, {2,-1}, {2,0}}, 8, {0, 1, 2, 3, 4, 5, 6, 7}, 3}, /* xx xx xx */ {6, {{0,0}, {1,0}, {1,1}, {2,1}, {2,2}, {3,2}}, 4, {0, 1, 4, 5, -1, -1, -1, -1}, 3}}; static struct pentomino_struct one_sided_pentomino[60]; static void make_one_sided_pentomino(void) { int i,j,t,u; j=0; for (i=0;i=4) { one_sided_pentomino[j].transform_len = t; j++; one_sided_pentomino[j] = pentomino[i]; for (u=t;u<8;u++) one_sided_pentomino[j].transform_list[u-t] = one_sided_pentomino[j].transform_list[u]; one_sided_pentomino[j].transform_len -= t; break; } j++; } } static struct hexomino_struct one_sided_hexomino[60]; static void make_one_sided_hexomino(void) { int i,j,t,u; j=0; for (i=0;i=4) { one_sided_hexomino[j].transform_len = t; j++; one_sided_hexomino[j] = hexomino[i]; for (u=t;u<8;u++) one_sided_hexomino[j].transform_list[u-t] = one_sided_hexomino[j].transform_list[u]; one_sided_hexomino[j].transform_len -= t; break; } j++; } } /* Find all the ways of placing all twelve pentominoes into a rectangle whose size is 20x3, 15x4, 12x5 or 10x6. */ static int set_pentomino_puzzle(polyominoesstruct *sp) { int perm_poly[12], perm_point[5], perm_transform[8], i, p; switch (NRAND(4)) { case 0: sp->width = 20; sp->height = 3; break; case 1: sp->width = 15; sp->height = 4; break; case 2: sp->width = 12; sp->height = 5; break; case 3: sp->width = 10; sp->height = 6; break; } sp->nr_polyominoes = 12; set_allocate(sp->polyomino,polyomino_type, sp->nr_polyominoes*sizeof(polyomino_type)); random_permutation(sp->nr_polyominoes,perm_poly); for (p=0;pnr_polyominoes;p++) { copy_polyomino(sp->polyomino[p],pentomino[perm_poly[p]],1); } sp->check_ok = check_pentomino_puzzle; return 1; } /* Many of the following puzzles are inspired by http://www.xs4all.nl/~gp/PolyominoSolver/Polyomino.html */ /* Find all the ways of placing all eighteen one-sided pentominoes into a rectangle. */ static int set_one_sided_pentomino_puzzle(polyominoesstruct *sp) { int perm_poly[18], perm_point[5], perm_transform[8], i, p; make_one_sided_pentomino(); switch (NRAND(4)) { case 0: sp->width = 30; sp->height = 3; break; case 1: sp->width = 18; sp->height = 5; break; case 2: sp->width = 15; sp->height = 6; break; case 3: sp->width = 10; sp->height = 9; break; } sp->nr_polyominoes = 18; set_allocate(sp->polyomino,polyomino_type, sp->nr_polyominoes*sizeof(polyomino_type)); random_permutation(sp->nr_polyominoes,perm_poly); for (p=0;pnr_polyominoes;p++) { copy_polyomino(sp->polyomino[p],one_sided_pentomino[perm_poly[p]],1); } sp->check_ok = check_pentomino_puzzle; return 1; } /* Find all the ways of placing all sixty one-sided hexominoes into a rectangle. */ static int set_one_sided_hexomino_puzzle(polyominoesstruct *sp) { int perm_poly[60], perm_point[6], perm_transform[8], i, p; make_one_sided_hexomino(); switch (NRAND(8)) { case 0: sp->width = 20; sp->height = 18; break; case 1: sp->width = 24; sp->height = 15; break; case 2: sp->width = 30; sp->height = 12; break; case 3: sp->width = 36; sp->height = 10; break; case 4: sp->width = 40; sp->height = 9; break; case 5: sp->width = 45; sp->height = 8; break; case 6: sp->width = 60; sp->height = 6; break; case 7: sp->width = 72; sp->height = 5; break; } sp->nr_polyominoes = 60; set_allocate(sp->polyomino,polyomino_type, sp->nr_polyominoes*sizeof(polyomino_type)); random_permutation(sp->nr_polyominoes,perm_poly); for (p=0;pnr_polyominoes;p++) { copy_polyomino(sp->polyomino[p],one_sided_hexomino[perm_poly[p]],1); } sp->check_ok = check_hexomino_puzzle; return 1; } /* Find all the ways of placing all five tetrominoes and all twelve pentominoes into a rectangle. */ static int set_tetr_pentomino_puzzle(polyominoesstruct *sp) { int perm_poly[17], perm_point[5], perm_transform[8], i, p; switch (NRAND(3)) { case 0: sp->width = 20; sp->height = 4; break; case 1: sp->width = 16; sp->height = 5; break; case 2: sp->width = 10; sp->height = 8; break; } sp->nr_polyominoes = 17; set_allocate(sp->polyomino,polyomino_type, sp->nr_polyominoes*sizeof(polyomino_type)); random_permutation(sp->nr_polyominoes,perm_poly); for (p=0;ppolyomino[perm_poly[p]],tetromino[p],1); } for (p=0;ppolyomino[perm_poly[p+5]],pentomino[p],1); } sp->check_ok = check_tetr_pentomino_puzzle; return 1; } /* Find all the ways of placing all twelve pentominoes and all thirty five hexominoes into a rectangle whose size is 18x15. */ static int set_pent_hexomino_puzzle(polyominoesstruct *sp) { int perm_poly[47], perm_point[6], perm_transform[8], i, p; switch (NRAND(5)) { case 0: sp->width = 54; sp->height = 5; break; case 1: sp->width = 45; sp->height = 6; break; case 2: sp->width = 30; sp->height = 9; break; case 3: sp->width = 27; sp->height = 10; break; case 4: sp->width = 18; sp->height = 15; break; } sp->nr_polyominoes = 47; set_allocate(sp->polyomino,polyomino_type,47*sizeof(polyomino_type)); random_permutation(47,perm_poly); for (p=0;ppolyomino[perm_poly[p]],pentomino[p],1); } for (p=0;ppolyomino[perm_poly[p+12]],hexomino[p],1); } sp->check_ok = check_pent_hexomino_puzzle; return 1; } /* Other puzzles: Science News September 20, 1986 Vol 130, No 12 Science News November 14, 1987 Vol 132, Pg 310 */ /* * **** fills a 10x5 rectangle */ static struct {int len; point_type point[5]; int transform_len, transform_list[8], max_white;} pentomino1 = {5, {{0,0}, {1,0}, {2,0}, {3,0}, {1,1}}, 8, {0, 1, 2, 3, 4, 5, 6, 7}, 3}; static int set_pentomino_puzzle1(polyominoesstruct *sp) { int perm_point[5], perm_transform[8], i, p; sp->width = 10; sp->height =5; sp->nr_polyominoes = 10; set_allocate(sp->polyomino,polyomino_type, sp->nr_polyominoes*sizeof(polyomino_type)); for (p=0;pnr_polyominoes;p++) { copy_polyomino(sp->polyomino[p],pentomino1,1); } sp->check_ok = check_pentomino_puzzle; return 1; } /* * ***** fills a 24x23 rectangle */ static struct {int len; point_type point[6]; int transform_len, transform_list[8], max_white;} hexomino1 = {6, {{0,0}, {1,0}, {2,0}, {3,0}, {4,0}, {1,1}}, 8, {0, 1, 2, 3, 4, 5, 6, 7}, 4}; static int set_hexomino_puzzle1(polyominoesstruct *sp) { int perm_point[6], perm_transform[8], i, p; sp->width = 24; sp->height =23; sp->nr_polyominoes = 92; set_allocate(sp->polyomino,polyomino_type, sp->nr_polyominoes*sizeof(polyomino_type)); for (p=0;pnr_polyominoes;p++) { copy_polyomino(sp->polyomino[p],hexomino1,1); } sp->check_ok = check_hexomino_puzzle; return 1; } /* ** ***** fills a 21x26 rectangle (All solutions have 180 degree rotational symmetry) */ static struct {int len; point_type point[7]; int transform_len, transform_list[8], max_white;} heptomino1 = {7, {{0,0}, {1,0}, {2,0}, {3,0}, {4,0}, {1,1}, {2,1}}, 8, {0, 1, 2, 3, 4, 5, 6, 7}, 4}; static int set_heptomino_puzzle1(polyominoesstruct *sp) { int perm_point[7], perm_transform[8], i, p; sp->rot180 = 1; sp->width = 26; sp->height =21; sp->nr_polyominoes = 78; set_allocate(sp->polyomino,polyomino_type, sp->nr_polyominoes*sizeof(polyomino_type)); for (p=0;pnr_polyominoes;p+=2) { copy_polyomino(sp->polyomino[p],heptomino1,1); copy_polyomino(sp->polyomino[p+1],heptomino1,0); } sp->check_ok = check_heptomino_puzzle; return 1; } /* The following puzzles from Polyominoes Puzzles, Patterns, Problems, and Packings Revised (2nd) Edition by Solomon W. Golomb Princeton University Press 1994 */ /* ** ***** fills a 28x19 rectangle */ static int set_heptomino_puzzle2(polyominoesstruct *sp) { int perm_point[7], perm_transform[8], i, p; sp->width = 28; sp->height =19; sp->nr_polyominoes = 76; set_allocate(sp->polyomino,polyomino_type, sp->nr_polyominoes*sizeof(polyomino_type)); for (p=0;pnr_polyominoes;p++) { copy_polyomino(sp->polyomino[p],heptomino1,1); } sp->check_ok = check_heptomino_puzzle; return 1; } /* *** **** fills a 25x22 rectangle **** */ static struct {int len; point_type point[11]; int transform_len, transform_list[8], max_white;} elevenomino1 = {11, {{0,0}, {1,0}, {2,0}, {0,1}, {1,1}, {2,1}, {3,1}, {0,2}, {1,2}, {2,2}, {3,2}}, 8, {0, 1, 2, 3, 4, 5, 6, 7}, 6}; static int set_elevenomino_puzzle1(polyominoesstruct *sp) { int perm_point[11], perm_transform[8], i, p; sp->rot180 = 1; sp->width = 25; sp->height =22; sp->nr_polyominoes = 50; set_allocate(sp->polyomino,polyomino_type, sp->nr_polyominoes*sizeof(polyomino_type)); for (p=0;pnr_polyominoes;p+=2) { copy_polyomino(sp->polyomino[p],elevenomino1,1); copy_polyomino(sp->polyomino[p+1],elevenomino1,0); } sp->check_ok = check_elevenomino_puzzle; return 1; } /* * * **** fills 32 x 30 rectangle **** */ static struct {int len; point_type point[10]; int transform_len, transform_list[8], max_white;} dekomino1 = {10, { {1,-1}, {1,0}, {0,1}, {1,1}, {2,1}, {3,1}, {0,2}, {1,2}, {2,2}, {3,2}}, 8, {0, 1, 2, 3, 4, 5, 6, 7}, 5}; static int set_dekomino_puzzle1(polyominoesstruct *sp) { int perm_point[10], perm_transform[8], i, p; sp->width = 32; sp->height =30; sp->nr_polyominoes = 96; set_allocate(sp->polyomino,polyomino_type, sp->nr_polyominoes*sizeof(polyomino_type)); for (p=0;pnr_polyominoes;p++) { copy_polyomino(sp->polyomino[p],dekomino1,1); } sp->check_ok = check_dekomino_puzzle; return 1; } /* * *** fills 96 x 26 rectangle **** */ static struct {int len; point_type point[10]; int transform_len, transform_list[8], max_white;} octomino1 = {8, { {1,0}, {0,1}, {1,1}, {2,1}, {0,2}, {1,2}, {2,2}, {3,2}}, 8, {0, 1, 2, 3, 4, 5, 6, 7}, 5}; static int set_octomino_puzzle1(polyominoesstruct *sp) { int perm_point[8], perm_transform[8], i, p; sp->width = 96; sp->height =26; sp->nr_polyominoes = 312; set_allocate(sp->polyomino,polyomino_type, sp->nr_polyominoes*sizeof(polyomino_type)); for (p=0;pnr_polyominoes;p++) { copy_polyomino(sp->polyomino[p],octomino1,1); } sp->check_ok = check_octomino_puzzle; return 1; } /* * fills 15 x 15 rectangle **** */ static int set_pentomino_puzzle2(polyominoesstruct *sp) { int perm_point[5], perm_transform[8], i, p; sp->width = 15; sp->height =15; sp->nr_polyominoes = 45; set_allocate(sp->polyomino,polyomino_type, sp->nr_polyominoes*sizeof(polyomino_type)); for (p=0;pnr_polyominoes;p++) { copy_polyomino(sp->polyomino[p],pentomino1,1); } sp->check_ok = check_pentomino_puzzle; return 1; } /* *** **** fills a 47x33 rectangle **** */ static int set_elevenomino_puzzle2(polyominoesstruct *sp) { int perm_point[11], perm_transform[8], i, p; sp->width = 47; sp->height =33; sp->nr_polyominoes = 141; set_allocate(sp->polyomino,polyomino_type, sp->nr_polyominoes*sizeof(polyomino_type)); for (p=0;pnr_polyominoes;p++) { copy_polyomino(sp->polyomino[p],elevenomino1,1); } sp->check_ok = check_elevenomino_puzzle; return 1; } /************************************************** The main functions. **************************************************/ #define allocate(p,type,size) p = (type *) malloc(size); if ((p)==NULL) {free_polyominoes(sp); return;} ENTRYPOINT void init_polyominoes (ModeInfo * mi) { polyominoesstruct *sp; int i,x,y, start; int box1, box2; int *perm; if (polyominoeses == NULL) { if ((polyominoeses = (polyominoesstruct *) calloc(MI_NUM_SCREENS(mi),sizeof (polyominoesstruct))) == NULL) return; } sp = &polyominoeses[MI_SCREEN(mi)]; free_polyominoes(sp); sp->rot180 = 0; sp->counter = 0; if (MI_IS_FULLRANDOM(mi)) { sp->identical = (Bool) (LRAND() & 1); sp->use3D = (Bool) (NRAND(4)); } else { sp->identical = identical; sp->use3D = !plain; } if (sp->identical) { switch (NRAND(9)) { case 0: if (!set_pentomino_puzzle1(sp)) return; break; case 1: if (!set_hexomino_puzzle1(sp)) return; break; case 2: if (!set_heptomino_puzzle1(sp)) return; break; case 3: if (!set_heptomino_puzzle2(sp)) return; break; case 4: if (!set_elevenomino_puzzle1(sp)) return; break; case 5: if (!set_dekomino_puzzle1(sp)) return; break; case 6: if (!set_octomino_puzzle1(sp)) return; break; case 7: if (!set_pentomino_puzzle2(sp)) return; break; case 8: if (!set_elevenomino_puzzle2(sp)) return; break; } } else { switch (NRAND(5)) { case 0: if (!set_pentomino_puzzle(sp)) return; break; case 1: if (!set_one_sided_pentomino_puzzle(sp)) return; break; case 2: if (!set_one_sided_hexomino_puzzle(sp)) return; break; case 3: if (!set_pent_hexomino_puzzle(sp)) return; break; case 4: if (!set_tetr_pentomino_puzzle(sp)) return; break; } } allocate(sp->attach_list,int,sp->nr_polyominoes*sizeof(int)); sp->nr_attached = 0; if (sp->identical) { allocate(sp->reason_to_not_attach,int,sp->nr_polyominoes*sp->nr_polyominoes*sizeof(int)); } allocate(sp->array,int,sp->width*sp->height*sizeof(int)); allocate(sp->changed_array,int,sp->width*sp->height*sizeof(int)); for (x=0;xwidth;x++) for (y=0;yheight;y++) ARRAY(x,y) = -1; sp->left_right = NRAND(2); sp->top_bottom = NRAND(2); box1 = MI_WIDTH(mi)/(sp->width+2); box2 = MI_HEIGHT(mi)/(sp->height+2); if (box1box = box1; else sp->box = box2; if (sp->box >= 12) { sp->box = (sp->box/12)*12; create_bitmaps(mi,sp); if (!sp->use_bitmaps) free_bitmaps(sp); } else sp->use_bitmaps = 0; if (!sp->use_bitmaps) { allocate(sp->rectangles,XRectangle,sp->width*sp->height*sizeof(XRectangle)); allocate(sp->lines,XSegment,sp->width*sp->height*sizeof(XSegment)); } allocate(perm,int,sp->nr_polyominoes*sizeof(int)); random_permutation(sp->nr_polyominoes, perm); sp->mono = MI_NPIXELS(mi) < 12; start = NRAND(MI_NPIXELS(mi)); for (i=0;inr_polyominoes;i++) if (!sp->mono) { sp->polyomino[i].color = MI_PIXEL(mi,(perm[i]*MI_NPIXELS(mi) / sp->nr_polyominoes + start) % MI_NPIXELS(mi)); if (sp->rot180) { sp->polyomino[i+1].color = sp->polyomino[i].color; i++; } } else if(sp->use_bitmaps) sp->polyomino[i].color = MI_WHITE_PIXEL(mi); else sp->polyomino[i].color = MI_BLACK_PIXEL(mi); free(perm); if (sp->use_bitmaps) { if (sp->mono) sp->border_color = MI_WHITE_PIXEL(mi); else sp->border_color = MI_PIXEL(mi,NRAND(MI_NPIXELS(mi))); } sp->x_margin = (MI_WIDTH(mi)-sp->box*sp->width)/2; sp->y_margin = (MI_HEIGHT(mi)-sp->box*sp->height)/2; sp->wait = 0; #ifndef STANDALONE /* Clear the background. */ MI_CLEARWINDOW(mi); #endif } ENTRYPOINT void draw_polyominoes (ModeInfo * mi) { polyominoesstruct *sp; int poly_no,point_no,transform_index,done,another_attachment_try; point_type attach_point; int i,detach_until; if (polyominoeses == NULL) return; sp = &polyominoeses[MI_SCREEN(mi)]; #ifdef STANDALONE if (sp->eraser) { sp->eraser = erase_window (MI_DISPLAY(mi), MI_WINDOW(mi), sp->eraser); return; } #endif if (MI_CYCLES(mi) != 0) { if (++sp->counter > MI_CYCLES(mi)) { #ifdef STANDALONE sp->eraser = erase_window (MI_DISPLAY(mi), MI_WINDOW(mi), sp->eraser); #endif /* STANDALONE */ init_polyominoes(mi); return; } } if (sp->box == 0) { #ifdef STANDALONE sp->eraser = erase_window (MI_DISPLAY(mi), MI_WINDOW(mi), sp->eraser); #endif /* STANDALONE */ init_polyominoes(mi); return; } MI_IS_DRAWN(mi) = True; sp->wait--; if (sp->wait>0) return; memset(sp->changed_array,0,sp->width*sp->height*sizeof(int)); poly_no = first_poly_no(sp); point_no = 0; transform_index = 0; done = 0; another_attachment_try = 1; find_blank(sp,&attach_point); if (sp->identical && sp->nr_attached < sp->nr_polyominoes) memset(&REASON_TO_NOT_ATTACH(sp->nr_attached,0),0,sp->nr_polyominoes*sizeof(int)); while(!done) { if (sp->nr_attached < sp->nr_polyominoes) { while (!done && another_attachment_try) { done = attach(sp,poly_no,point_no,transform_index,attach_point,0,&REASON_TO_NOT_ATTACH(sp->nr_attached,0)); if (done && sp->rot180) { poly_no = first_poly_no(sp); done = attach(sp,poly_no,point_no,transform_index,attach_point,1,&REASON_TO_NOT_ATTACH(sp->nr_attached-1,0)); if (!done) detach(sp,&poly_no,&point_no,&transform_index,&attach_point,0); } if (!done) another_attachment_try = next_attach_try(sp,&poly_no,&point_no,&transform_index); } } if (sp->identical) { if (!done) { if (sp->nr_attached == 0) done = 1; else { detach_until=sp->nr_attached-1; if (sp->nr_attached < sp->nr_polyominoes) while (detach_until>0 && REASON_TO_NOT_ATTACH(sp->nr_attached,detach_until)==0) detach_until--; while (sp->nr_attached>detach_until) { if (sp->rot180) detach(sp,&poly_no,&point_no,&transform_index,&attach_point,1); detach(sp,&poly_no,&point_no,&transform_index,&attach_point,0); if (sp->nr_attached+1+sp->rot180 < sp->nr_polyominoes) for (i=0;inr_polyominoes;i++) REASON_TO_NOT_ATTACH(sp->nr_attached,i) |= REASON_TO_NOT_ATTACH(sp->nr_attached+1+sp->rot180,i); } another_attachment_try = next_attach_try(sp,&poly_no,&point_no,&transform_index); } } } else { if (!done) { if (sp->nr_attached == 0) done = 1; else { if (sp->rot180) detach(sp,&poly_no,&point_no,&transform_index,&attach_point,1); detach(sp,&poly_no,&point_no,&transform_index,&attach_point,0); } another_attachment_try = next_attach_try(sp,&poly_no,&point_no,&transform_index); } } } if (sp->use_bitmaps) draw_with_bitmaps(mi,sp); else draw_without_bitmaps(mi,sp); if (sp->nr_attached == sp->nr_polyominoes) sp->wait = 100; else 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) { int screen; if (polyominoeses != NULL) { for (screen=0;screen * * Permission to use, copy, modify, and distribute this software and its * documentation for any purpose and without fee is hereby granted, * provided that the above copyright notice appear in all copies and that * both that copyright notice and this permission notice appear in * supporting documentation. * * This file is provided AS IS with no warranties of any kind. The author * shall have no liability with respect to the infringement of copyrights, * trade secrets or any patents by this file or any part thereof. In no * event will the author be liable for any lost revenue or profits or * other special, indirect and consequential damages. * * "thornbird" shows a view of the "Bird in a Thornbush" fractal, * continuously varying the three free parameters. * * Revision History: * 01-Nov-2000: Allocation checks * 04-Jun-1999: 3D tumble added by Tim Auckland * 31-Jul-1997: Adapted from discrete.c Copyright (c) 1996 by Tim Auckland */ #ifdef STANDALONE # define MODE_thornbird #define DEFAULTS "*delay: 10000 \n" \ "*count: 100 \n" \ "*cycles: 400 \n" \ "*ncolors: 64 \n" \ "*fpsSolid: true \n" \ "*ignoreRotation: True \n" \ # define BRIGHT_COLORS # define thornbird_handle_event 0 # include "xlockmore.h" /* in xscreensaver distribution */ #else /* STANDALONE */ # include "xlock.h" /* in xlockmore distribution */ #endif /* STANDALONE */ #ifdef MODE_thornbird ENTRYPOINT ModeSpecOpt thornbird_opts = {0, (XrmOptionDescRec *) NULL, 0, (argtype *) NULL, (OptionStruct *) NULL}; #ifdef USE_MODULES ModStruct thornbird_description = {"thornbird", "init_thornbird", "draw_thornbird", "release_thornbird", "refresh_thornbird", "init_thornbird", (char *) NULL, þbird_opts, 1000, 800, 16, 1, 64, 1.0, "", "Shows an animated Bird in a Thorn Bush fractal map", 0, NULL}; #endif #define balance_rand(v) ((LRAND()/MAXRAND*(v))-((v)/2)) /* random around 0 */ typedef struct { int maxx; int maxy; /* max of the screen */ double a; double b; double c; double d; double e; double i; double j; /* thornbird parameters */ struct { double f1; double f2; } liss; struct { double theta; double dtheta; double phi; double dphi; } tumble; int inc; int pix; int count; int nbuffers; XPoint **pointBuffer; /* pointer for XDrawPoints */ } thornbirdstruct; static thornbirdstruct *thornbirds = (thornbirdstruct *) NULL; static void free_thornbird(thornbirdstruct *hp) { if (hp->pointBuffer != NULL) { int buffer; for (buffer = 0; buffer < hp->nbuffers; buffer++) if (hp->pointBuffer[buffer] != NULL) (void) free((void *) hp->pointBuffer[buffer]); (void) free((void *) hp->pointBuffer); hp->pointBuffer = (XPoint **) NULL; } } ENTRYPOINT void init_thornbird (ModeInfo * mi) { thornbirdstruct *hp; if (thornbirds == NULL) { if ((thornbirds = (thornbirdstruct *) calloc(MI_NUM_SCREENS(mi), sizeof (thornbirdstruct))) == NULL) return; } hp = þbirds[MI_SCREEN(mi)]; hp->maxx = MI_WIDTH(mi); hp->maxy = MI_HEIGHT(mi); hp->b = 0.1; hp->i = hp->j = 0.1; hp->pix = 0; hp->inc = 0; hp->nbuffers = MI_CYCLES(mi); if (hp->pointBuffer == NULL) if ((hp->pointBuffer = (XPoint **) calloc(MI_CYCLES(mi), sizeof (XPoint *))) == NULL) { free_thornbird(hp); return; } if (hp->pointBuffer[0] == NULL) if ((hp->pointBuffer[0] = (XPoint *) malloc(MI_COUNT(mi) * sizeof (XPoint))) == NULL) { free_thornbird(hp); return; } /* select frequencies for parameter variation */ hp->liss.f1 = LRAND() % 5000; hp->liss.f2 = LRAND() % 2000; /* choose random 3D tumbling */ hp->tumble.theta = 0; hp->tumble.phi = 0; hp->tumble.dtheta = balance_rand(0.001); hp->tumble.dphi = balance_rand(0.005); /* Clear the background. */ MI_CLEARWINDOW(mi); hp->count = 0; } ENTRYPOINT void draw_thornbird(ModeInfo * mi) { Display *dsp = MI_DISPLAY(mi); Window win = MI_WINDOW(mi); double oldj, oldi; int batchcount = MI_COUNT(mi); int k; XPoint *xp; GC gc = MI_GC(mi); int erase; int current; double sint, cost, sinp, cosp; thornbirdstruct *hp; if (thornbirds == NULL) return; hp = þbirds[MI_SCREEN(mi)]; if (hp->pointBuffer == NULL) return; erase = (hp->inc + 1) % MI_CYCLES(mi); current = hp->inc % MI_CYCLES(mi); k = batchcount; xp = hp->pointBuffer[current]; /* vary papameters */ hp->a = 1.99 + (0.4 * sin(hp->inc / hp->liss.f1) + 0.05 * cos(hp->inc / hp->liss.f2)); hp->c = 0.80 + (0.15 * cos(hp->inc / hp->liss.f1) + 0.05 * sin(hp->inc / hp->liss.f2)); /* vary view */ hp->tumble.theta += hp->tumble.dtheta; hp->tumble.phi += hp->tumble.dphi; sint = sin(hp->tumble.theta); cost = cos(hp->tumble.theta); sinp = sin(hp->tumble.phi); cosp = cos(hp->tumble.phi); while (k--) { oldj = hp->j; oldi = hp->i; hp->j = oldi; hp->i = (1 - hp->c) * cos(M_PI * hp->a * oldj) + hp->c * hp->b; hp->b = oldj; xp->x = (short) (hp->maxx / 2 * (1 + sint*hp->j + cost*cosp*hp->i - cost*sinp*hp->b)); xp->y = (short) (hp->maxy / 2 * (1 - cost*hp->j + sint*cosp*hp->i - sint*sinp*hp->b)); xp++; } MI_IS_DRAWN(mi) = True; if (MI_COUNT(mi) < 1) MI_COUNT(mi) = 1; if (hp->pointBuffer[erase] == NULL) { if ((hp->pointBuffer[erase] = (XPoint *) malloc(MI_COUNT(mi) * sizeof (XPoint))) == NULL) { free_thornbird(hp); return; } } else { XSetForeground(dsp, gc, MI_BLACK_PIXEL(mi)); XDrawPoints(dsp, win, gc, hp->pointBuffer[erase], batchcount, CoordModeOrigin); } if (MI_NPIXELS(mi) > 2) { XSetForeground(dsp, gc, MI_PIXEL(mi, hp->pix)); #if 0 if (erase == 0) /* change colours after "cycles" cycles */ #else if (!((hp->inc + 1) % (1 + (MI_CYCLES(mi) / 3)))) /* jwz: sooner */ #endif if (++hp->pix >= MI_NPIXELS(mi)) hp->pix = 0; } else XSetForeground(dsp, gc, MI_WHITE_PIXEL(mi)); XDrawPoints(dsp, win, gc, hp->pointBuffer[current], batchcount, CoordModeOrigin); 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) { if (thornbirds != NULL) { int screen; for (screen = 0; screen < MI_NUM_SCREENS(mi); screen++) free_thornbird(þbirds[screen]); (void) free((void *) thornbirds); thornbirds = (thornbirdstruct *) NULL; } } ENTRYPOINT void refresh_thornbird (ModeInfo * mi) { MI_CLEARWINDOW(mi); } XSCREENSAVER_MODULE ("Thornbird", thornbird) #endif /* MODE_thornbird */ xscreensaver-5.36/hacks/fluidballs.c000644 000767 000024 00000062627 12717746214 017544 0ustar00jwzstaff000000 000000 /* fluidballs, Copyright (c) 2000 by Peter Birtles * * 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. * * Ported to X11 and xscreensaver by jwz, 27-Feb-2002. * * http://astronomy.swin.edu.au/~pbourke/modelling/fluid/ * * Some physics improvements by Steven Barker */ /* Future ideas: * Specifying a distribution in the ball sizes (with a gamma curve, possibly). * Brownian motion, for that extra touch of realism. * * It would be nice to detect when there are more balls than fit in * the window, and scale the number of balls back. Useful for the * xscreensaver-demo preview, which is often too tight by default. */ #include #include "screenhack.h" #include #ifdef HAVE_DOUBLE_BUFFER_EXTENSION #include "xdbe.h" #endif /* HAVE_DOUBLE_BUFFER_EXTENSION */ typedef struct { Display *dpy; Window window; XWindowAttributes xgwa; int delay; Pixmap b, ba; /* double-buffer to reduce flicker */ #ifdef HAVE_DOUBLE_BUFFER_EXTENSION XdbeBackBuffer backb; Bool dbeclear_p; #endif /* HAVE_DOUBLE_BUFFER_EXTENSION */ GC draw_gc; /* most of the balls */ GC draw_gc2; /* the ball being dragged with the mouse */ GC erase_gc; XColor fg; XColor fg2; int count; /* number of balls */ float xmin, ymin; /* rectangle of window, relative to root */ float xmax, ymax; int mouse_ball; /* index of ball being dragged, or 0 if none. */ float tc; /* time constant (time-warp multiplier) */ float accx; /* horizontal acceleration (wind) */ float accy; /* vertical acceleration (gravity) */ float *vx, *vy; /* current ball velocities */ float *px, *py; /* current ball positions */ float *opx, *opy; /* previous ball positions */ float *r; /* ball radiuses */ float *m; /* ball mass, precalculated */ float e; /* coeficient of elasticity */ float max_radius; /* largest radius of any ball */ Bool random_sizes_p; /* Whether balls should be various sizes up to max. */ Bool shake_p; /* Whether to mess with gravity when things settle. */ Bool dbuf; /* Whether we're using double buffering. */ float shake_threshold; int time_since_shake; Bool fps_p; /* Whether to draw some text at the bottom. */ GC font_gc; int font_height; int font_baseline; int frame_count; int collision_count; char fps_str[1024]; int time_tick; struct timeval last_time; } b_state; /* Draws the frames per second string */ static void draw_fps_string (b_state *state) { XFillRectangle (state->dpy, state->b, state->erase_gc, 0, state->xgwa.height - state->font_height*3 - 20, state->xgwa.width, state->font_height*3 + 20); XDrawImageString (state->dpy, state->b, state->font_gc, 10, state->xgwa.height - state->font_height*2 - state->font_baseline - 10, state->fps_str, strlen(state->fps_str)); } /* Finds the origin of the window relative to the root window, by walking up the window tree until it reaches the top. */ static void window_origin (Display *dpy, Window window, int *x, int *y) { XTranslateCoordinates (dpy, window, RootWindow (dpy, DefaultScreen (dpy)), 0, 0, x, y, &window); } /* Queries the window position to see if the window has moved or resized. We poll this instead of waiting for ConfigureNotify events, because when the window manager moves the window, only one ConfigureNotify comes in: at the end of the motion. If we poll, we can react to the new position while the window is still being moved. (Assuming the WM does OpaqueMove, of course.) */ static void check_window_moved (b_state *state) { float oxmin = state->xmin; float oxmax = state->xmax; float oymin = state->ymin; float oymax = state->ymax; int wx, wy; XGetWindowAttributes (state->dpy, state->window, &state->xgwa); window_origin (state->dpy, state->window, &wx, &wy); state->xmin = wx; state->ymin = wy; state->xmax = state->xmin + state->xgwa.width; state->ymax = state->ymin + state->xgwa.height - (state->font_height*3) - (state->font_height ? 22 : 0); if (state->dbuf && (state->ba)) { if (oxmax != state->xmax || oymax != state->ymax) { XFreePixmap (state->dpy, state->ba); state->ba = XCreatePixmap (state->dpy, state->window, state->xgwa.width, state->xgwa.height, state->xgwa.depth); XFillRectangle (state->dpy, state->ba, state->erase_gc, 0, 0, state->xgwa.width, state->xgwa.height); state->b = state->ba; } } else { /* Only need to erase the window if the origin moved */ if (oxmin != state->xmin || oymin != state->ymin) XClearWindow (state->dpy, state->window); else if (state->fps_p && oymax != state->ymax) XFillRectangle (state->dpy, state->b, state->erase_gc, 0, state->xgwa.height - state->font_height*3, state->xgwa.width, state->font_height*3); } } /* Returns the position of the mouse relative to the root window. */ static void query_mouse (b_state *state, int *x, int *y) { Window root1, child1; int mouse_x, mouse_y, root_x, root_y; unsigned int mask; if (XQueryPointer (state->dpy, state->window, &root1, &child1, &root_x, &root_y, &mouse_x, &mouse_y, &mask)) { *x = root_x; *y = root_y; } else { *x = -9999; *y = -9999; } } /* Re-pick the colors of the balls, and the mouse-ball. */ static void recolor (b_state *state) { if (state->fg.flags) XFreeColors (state->dpy, state->xgwa.colormap, &state->fg.pixel, 1, 0); if (state->fg2.flags) XFreeColors (state->dpy, state->xgwa.colormap, &state->fg2.pixel, 1, 0); state->fg.flags = DoRed|DoGreen|DoBlue; state->fg.red = 0x8888 + (random() % 0x8888); state->fg.green = 0x8888 + (random() % 0x8888); state->fg.blue = 0x8888 + (random() % 0x8888); state->fg2.flags = DoRed|DoGreen|DoBlue; state->fg2.red = 0x8888 + (random() % 0x8888); state->fg2.green = 0x8888 + (random() % 0x8888); state->fg2.blue = 0x8888 + (random() % 0x8888); if (XAllocColor (state->dpy, state->xgwa.colormap, &state->fg)) XSetForeground (state->dpy, state->draw_gc, state->fg.pixel); if (XAllocColor (state->dpy, state->xgwa.colormap, &state->fg2)) XSetForeground (state->dpy, state->draw_gc2, state->fg2.pixel); } /* Initialize the state structure and various X data. */ static void * fluidballs_init (Display *dpy, Window window) { int i; float extx, exty; b_state *state = (b_state *) calloc (1, sizeof(*state)); XGCValues gcv; state->dpy = dpy; state->window = window; state->delay = get_integer_resource (dpy, "delay", "Integer"); check_window_moved (state); state->dbuf = get_boolean_resource (dpy, "doubleBuffer", "Boolean"); # ifdef HAVE_JWXYZ /* Don't second-guess Quartz's double-buffering */ state->dbuf = False; # endif if (state->dbuf) { #ifdef HAVE_DOUBLE_BUFFER_EXTENSION state->dbeclear_p = get_boolean_resource (dpy, "useDBEClear", "Boolean"); if (state->dbeclear_p) state->b = xdbe_get_backbuffer (dpy, window, XdbeBackground); else state->b = xdbe_get_backbuffer (dpy, window, XdbeUndefined); state->backb = state->b; #endif /* HAVE_DOUBLE_BUFFER_EXTENSION */ if (!state->b) { state->ba = XCreatePixmap (state->dpy, state->window, state->xgwa.width, state->xgwa.height, state->xgwa.depth); state->b = state->ba; } } else { state->b = state->window; } /* Select ButtonRelease events on the external window, if no other app has already selected it (only one app can select it at a time: BadAccess. */ #if 0 if (! (state->xgwa.all_event_masks & ButtonReleaseMask)) XSelectInput (state->dpy, state->window, state->xgwa.your_event_mask | ButtonReleaseMask); #endif gcv.foreground = get_pixel_resource(state->dpy, state->xgwa.colormap, "foreground", "Foreground"); gcv.background = get_pixel_resource(state->dpy, state->xgwa.colormap, "background", "Background"); state->draw_gc = XCreateGC (state->dpy, state->b, GCForeground|GCBackground, &gcv); gcv.foreground = get_pixel_resource(state->dpy, state->xgwa.colormap, "mouseForeground", "MouseForeground"); state->draw_gc2 = XCreateGC (state->dpy, state->b, GCForeground|GCBackground, &gcv); gcv.foreground = gcv.background; state->erase_gc = XCreateGC (state->dpy, state->b, GCForeground|GCBackground, &gcv); if (state->ba) XFillRectangle (state->dpy, state->ba, state->erase_gc, 0, 0, state->xgwa.width, state->xgwa.height); recolor (state); extx = state->xmax - state->xmin; exty = state->ymax - state->ymin; state->count = get_integer_resource (dpy, "count", "Count"); if (state->count < 1) state->count = 20; state->max_radius = get_float_resource (dpy, "size", "Size") / 2; if (state->max_radius < 1.0) state->max_radius = 1.0; state->random_sizes_p = get_boolean_resource (dpy, "random", "Random"); /* If the initial window size is too small to hold all these balls, make fewer of them... */ { float r = (state->random_sizes_p ? state->max_radius * 0.7 : state->max_radius); float ball_area = M_PI * r * r; float balls_area = state->count * ball_area; float window_area = state->xgwa.width * state->xgwa.height; window_area *= 0.75; /* don't pack it completely full */ if (balls_area > window_area) state->count = window_area / ball_area; } state->accx = get_float_resource (dpy, "wind", "Wind"); if (state->accx < -1.0 || state->accx > 1.0) state->accx = 0; state->accy = get_float_resource (dpy, "gravity", "Gravity"); if (state->accy < -1.0 || state->accy > 1.0) state->accy = 0.01; state->e = get_float_resource (dpy, "elasticity", "Elacitcity"); if (state->e < 0.2 || state->e > 1.0) state->e = 0.97; state->tc = get_float_resource (dpy, "timeScale", "TimeScale"); if (state->tc <= 0 || state->tc > 10) state->tc = 1.0; state->shake_p = get_boolean_resource (dpy, "shake", "Shake"); state->shake_threshold = get_float_resource (dpy, "shakeThreshold", "ShakeThreshold"); state->time_tick = 999999; # ifdef HAVE_MOBILE /* Always obey real-world gravity */ state->shake_p = False; # endif state->fps_p = get_boolean_resource (dpy, "doFPS", "DoFPS"); if (state->fps_p) { XFontStruct *font; char *fontname = get_string_resource (dpy, "fpsFont", "Font"); if (!fontname) fontname = "-*-courier-bold-r-normal-*-180-*"; font = XLoadQueryFont (dpy, fontname); if (!font) font = XLoadQueryFont (dpy, "fixed"); if (!font) exit(-1); gcv.font = font->fid; gcv.foreground = get_pixel_resource(state->dpy, state->xgwa.colormap, "textColor", "Foreground"); state->font_gc = XCreateGC(dpy, state->b, GCFont|GCForeground|GCBackground, &gcv); state->font_height = font->ascent + font->descent; state->font_baseline = font->descent; } state->m = (float *) malloc (sizeof (*state->m) * (state->count + 1)); state->r = (float *) malloc (sizeof (*state->r) * (state->count + 1)); state->vx = (float *) malloc (sizeof (*state->vx) * (state->count + 1)); state->vy = (float *) malloc (sizeof (*state->vy) * (state->count + 1)); state->px = (float *) malloc (sizeof (*state->px) * (state->count + 1)); state->py = (float *) malloc (sizeof (*state->py) * (state->count + 1)); state->opx = (float *) malloc (sizeof (*state->opx) * (state->count + 1)); state->opy = (float *) malloc (sizeof (*state->opy) * (state->count + 1)); for (i=1; i<=state->count; i++) { state->px[i] = frand(extx) + state->xmin; state->py[i] = frand(exty) + state->ymin; state->vx[i] = frand(0.2) - 0.1; state->vy[i] = frand(0.2) - 0.1; state->r[i] = (state->random_sizes_p ? ((0.2 + frand(0.8)) * state->max_radius) : state->max_radius); /*state->r[i] = pow(frand(1.0), state->sizegamma) * state->max_radius;*/ /* state->m[i] = pow(state->r[i],2) * M_PI; */ state->m[i] = pow(state->r[i],3) * M_PI * 1.3333; } memcpy (state->opx, state->px, sizeof (*state->opx) * (state->count + 1)); memcpy (state->opy, state->py, sizeof (*state->opx) * (state->count + 1)); return state; } /* Messes with gravity: permute "down" to be in a random direction. */ static void shake (b_state *state) { float a = state->accx; float b = state->accy; int i = random() % 4; switch (i) { case 0: state->accx = a; state->accy = b; break; case 1: state->accx = -a; state->accy = -b; break; case 2: state->accx = b; state->accy = a; break; case 3: state->accx = -b; state->accy = -a; break; default: abort(); break; } state->time_since_shake = 0; recolor (state); } /* Look at the current time, and update state->time_since_shake. Draw the FPS display if desired. */ static void check_wall_clock (b_state *state, float max_d) { state->frame_count++; if (state->time_tick++ > 20) /* don't call gettimeofday() too often -- it's slow. */ { struct timeval now; # ifdef GETTIMEOFDAY_TWO_ARGS struct timezone tzp; gettimeofday(&now, &tzp); # else gettimeofday(&now); # endif if (state->last_time.tv_sec == 0) state->last_time = now; state->time_tick = 0; if (now.tv_sec == state->last_time.tv_sec) return; state->time_since_shake += (now.tv_sec - state->last_time.tv_sec); # ifdef HAVE_MOBILE /* Always obey real-world gravity */ { float a = fabs (fabs(state->accx) > fabs(state->accy) ? state->accx : state->accy); int rot = current_device_rotation(); switch (rot) { case 0: case 360: state->accx = 0; state->accy = a; break; case -90: state->accx = -a; state->accy = 0; break; case 90: state->accx = a; state->accy = 0; break; case 180: case -180: state->accx = 0; state->accy = -a; break; default: break; } } # endif /* HAVE_MOBILE */ if (state->fps_p) { float elapsed = ((now.tv_sec + (now.tv_usec / 1000000.0)) - (state->last_time.tv_sec + (state->last_time.tv_usec / 1000000.0))); float fps = state->frame_count / elapsed; float cps = state->collision_count / elapsed; sprintf (state->fps_str, "Collisions: %.3f/frame Max motion: %.3f", cps/fps, max_d); draw_fps_string(state); } state->frame_count = 0; state->collision_count = 0; state->last_time = now; } } /* Erases the balls at their previous positions, and draws the new ones. */ static void repaint_balls (b_state *state) { int a; # ifndef HAVE_JWXYZ int x1a, x2a, y1a, y2a; # endif int x1b, x2b, y1b, y2b; float max_d = 0; #ifdef HAVE_JWXYZ /* Don't second-guess Quartz's double-buffering */ XClearWindow (state->dpy, state->b); #endif for (a=1; a <= state->count; a++) { GC gc; # ifndef HAVE_JWXYZ x1a = (state->opx[a] - state->r[a] - state->xmin); y1a = (state->opy[a] - state->r[a] - state->ymin); x2a = (state->opx[a] + state->r[a] - state->xmin); y2a = (state->opy[a] + state->r[a] - state->ymin); # endif x1b = (state->px[a] - state->r[a] - state->xmin); y1b = (state->py[a] - state->r[a] - state->ymin); x2b = (state->px[a] + state->r[a] - state->xmin); y2b = (state->py[a] + state->r[a] - state->ymin); #ifndef HAVE_JWXYZ /* Don't second-guess Quartz's double-buffering */ #ifdef HAVE_DOUBLE_BUFFER_EXTENSION if (!state->dbeclear_p || !state->backb) #endif /* HAVE_DOUBLE_BUFFER_EXTENSION */ { /* if (x1a != x1b || y1a != y1b) -- leaves turds if we optimize this */ { gc = state->erase_gc; XFillArc (state->dpy, state->b, gc, x1a, y1a, x2a-x1a, y2a-y1a, 0, 360*64); } } #endif /* !HAVE_JWXYZ */ if (state->mouse_ball == a) gc = state->draw_gc2; else gc = state->draw_gc; XFillArc (state->dpy, state->b, gc, x1b, y1b, x2b-x1b, y2b-y1b, 0, 360*64); if (state->shake_p) { /* distance this ball moved this frame */ float d = ((state->px[a] - state->opx[a]) * (state->px[a] - state->opx[a]) + (state->py[a] - state->opy[a]) * (state->py[a] - state->opy[a])); if (d > max_d) max_d = d; } state->opx[a] = state->px[a]; state->opy[a] = state->py[a]; } if (state->fps_p #ifdef HAVE_DOUBLE_BUFFER_EXTENSION && (state->backb ? state->dbeclear_p : 1) #endif /* HAVE_DOUBLE_BUFFER_EXTENSION */ ) draw_fps_string(state); #ifdef HAVE_DOUBLE_BUFFER_EXTENSION if (state->backb) { XdbeSwapInfo info[1]; info[0].swap_window = state->window; info[0].swap_action = (state->dbeclear_p ? XdbeBackground : XdbeUndefined); XdbeSwapBuffers (state->dpy, info, 1); } else #endif /* HAVE_DOUBLE_BUFFER_EXTENSION */ if (state->dbuf) { XCopyArea (state->dpy, state->b, state->window, state->erase_gc, 0, 0, state->xgwa.width, state->xgwa.height, 0, 0); } if (state->shake_p && state->time_since_shake > 5) { max_d /= state->max_radius; if (max_d < state->shake_threshold || /* when its stable */ state->time_since_shake > 30) /* or when 30 secs has passed */ { shake (state); } } check_wall_clock (state, max_d); } /* Implements the laws of physics: move balls to their new positions. */ static void update_balls (b_state *state) { int a, b; float d, vxa, vya, vxb, vyb, dd, cdx, cdy; float ma, mb, vca, vcb, dva, dvb; float dee2; check_window_moved (state); /* If we're currently tracking the mouse, update that ball first. */ if (state->mouse_ball != 0) { int mouse_x, mouse_y; query_mouse (state, &mouse_x, &mouse_y); state->px[state->mouse_ball] = mouse_x; state->py[state->mouse_ball] = mouse_y; state->vx[state->mouse_ball] = (0.1 * (state->px[state->mouse_ball] - state->opx[state->mouse_ball]) * state->tc); state->vy[state->mouse_ball] = (0.1 * (state->py[state->mouse_ball] - state->opy[state->mouse_ball]) * state->tc); } /* For each ball, compute the influence of every other ball. */ for (a=1; a <= state->count - 1; a++) for (b=a + 1; b <= state->count; b++) { d = ((state->px[a] - state->px[b]) * (state->px[a] - state->px[b]) + (state->py[a] - state->py[b]) * (state->py[a] - state->py[b])); dee2 = (state->r[a] + state->r[b]) * (state->r[a] + state->r[b]); if (d < dee2) { state->collision_count++; d = sqrt(d); dd = state->r[a] + state->r[b] - d; cdx = (state->px[b] - state->px[a]) / d; cdy = (state->py[b] - state->py[a]) / d; /* Move each ball apart from the other by half the * 'collision' distance. */ state->px[a] -= 0.5 * dd * cdx; state->py[a] -= 0.5 * dd * cdy; state->px[b] += 0.5 * dd * cdx; state->py[b] += 0.5 * dd * cdy; ma = state->m[a]; mb = state->m[b]; vxa = state->vx[a]; vya = state->vy[a]; vxb = state->vx[b]; vyb = state->vy[b]; vca = vxa * cdx + vya * cdy; /* the component of each velocity */ vcb = vxb * cdx + vyb * cdy; /* along the axis of the collision */ /* elastic collison */ dva = (vca * (ma - mb) + vcb * 2 * mb) / (ma + mb) - vca; dvb = (vcb * (mb - ma) + vca * 2 * ma) / (ma + mb) - vcb; dva *= state->e; /* some energy lost to inelasticity */ dvb *= state->e; #if 0 dva += (frand (50) - 25) / ma; /* q: why are elves so chaotic? */ dvb += (frand (50) - 25) / mb; /* a: brownian motion. */ #endif vxa += dva * cdx; vya += dva * cdy; vxb += dvb * cdx; vyb += dvb * cdy; state->vx[a] = vxa; state->vy[a] = vya; state->vx[b] = vxb; state->vy[b] = vyb; } } /* Force all balls to be on screen. */ for (a=1; a <= state->count; a++) { if (state->px[a] <= (state->xmin + state->r[a])) { state->px[a] = state->xmin + state->r[a]; state->vx[a] = -state->vx[a] * state->e; } if (state->px[a] >= (state->xmax - state->r[a])) { state->px[a] = state->xmax - state->r[a]; state->vx[a] = -state->vx[a] * state->e; } if (state->py[a] <= (state->ymin + state->r[a])) { state->py[a] = state->ymin + state->r[a]; state->vy[a] = -state->vy[a] * state->e; } if (state->py[a] >= (state->ymax - state->r[a])) { state->py[a] = state->ymax - state->r[a]; state->vy[a] = -state->vy[a] * state->e; } } /* Apply gravity to all balls. */ for (a=1; a <= state->count; a++) if (a != state->mouse_ball) { state->vx[a] += state->accx * state->tc; state->vy[a] += state->accy * state->tc; state->px[a] += state->vx[a] * state->tc; state->py[a] += state->vy[a] * state->tc; } } /* Handle X events, specifically, allow a ball to be picked up with the mouse. */ static Bool fluidballs_event (Display *dpy, Window window, void *closure, XEvent *event) { b_state *state = (b_state *) closure; if (event->xany.type == ButtonPress) { int i, rx, ry; XTranslateCoordinates (dpy, window, RootWindow (dpy, DefaultScreen(dpy)), event->xbutton.x, event->xbutton.y, &rx, &ry, &window); if (state->mouse_ball != 0) /* second down-click? drop the ball. */ { state->mouse_ball = 0; return True; } else { /* When trying to pick up a ball, first look for a click directly inside the ball; but if we don't find it, expand the radius outward until we find something nearby. */ float max = state->max_radius * 4; float step = max / 10; float r2; for (r2 = step; r2 < max; r2 += step) { for (i = 1; i <= state->count; i++) { float d = ((state->px[i] - rx) * (state->px[i] - rx) + (state->py[i] - ry) * (state->py[i] - ry)); float r = state->r[i]; if (r2 > r) r = r2; if (d < r*r) { state->mouse_ball = i; return True; } } } } return True; } else if (event->xany.type == ButtonRelease) /* drop the ball */ { state->mouse_ball = 0; return True; } return False; } static unsigned long fluidballs_draw (Display *dpy, Window window, void *closure) { b_state *state = (b_state *) closure; repaint_balls(state); update_balls(state); return state->delay; } static void fluidballs_reshape (Display *dpy, Window window, void *closure, unsigned int w, unsigned int h) { } static void fluidballs_free (Display *dpy, Window window, void *closure) { b_state *state = (b_state *) closure; free (state); } static const char *fluidballs_defaults [] = { ".background: black", ".foreground: yellow", ".textColor: yellow", "*mouseForeground: white", "*delay: 10000", "*count: 300", "*size: 25", "*random: True", "*gravity: 0.01", "*wind: 0.00", "*elasticity: 0.97", "*timeScale: 1.0", "*shake: True", "*shakeThreshold: 0.015", "*doubleBuffer: True", #ifdef HAVE_DOUBLE_BUFFER_EXTENSION "*useDBE: True", "*useDBEClear: True", #endif /* HAVE_DOUBLE_BUFFER_EXTENSION */ #ifdef HAVE_MOBILE "*ignoreRotation: True", #endif 0 }; static XrmOptionDescRec fluidballs_options [] = { { "-delay", ".delay", XrmoptionSepArg, 0 }, { "-count", ".count", XrmoptionSepArg, 0 }, { "-size", ".size", XrmoptionSepArg, 0 }, { "-count", ".count", XrmoptionSepArg, 0 }, { "-gravity", ".gravity", XrmoptionSepArg, 0 }, { "-wind", ".wind", XrmoptionSepArg, 0 }, { "-elasticity", ".elasticity", XrmoptionSepArg, 0 }, { "-shake", ".shake", XrmoptionNoArg, "True" }, { "-no-shake", ".shake", XrmoptionNoArg, "False" }, { "-random", ".random", XrmoptionNoArg, "True" }, { "-no-random", ".random", XrmoptionNoArg, "False" }, { "-nonrandom", ".random", XrmoptionNoArg, "False" }, { "-db", ".doubleBuffer", XrmoptionNoArg, "True" }, { "-no-db", ".doubleBuffer", XrmoptionNoArg, "False" }, { 0, 0, 0, 0 } }; XSCREENSAVER_MODULE ("FluidBalls", fluidballs) xscreensaver-5.36/hacks/anemone.c000644 000767 000024 00000027335 12717745666 017054 0ustar00jwzstaff000000 000000 /* anemone, Copyright (c) 2001 Gabriel Finch * * 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. */ /*------------------------------------------------------------------------ | | FILE anemone.c | MODULE OF xscreensaver | | DESCRIPTION Anemone. | | WRITTEN BY Gabriel Finch | | | | MODIFICATIONS june 2001 started | +----------------------------------------------------------------------*/ #include #include "screenhack.h" #ifdef HAVE_DOUBLE_BUFFER_EXTENSION #include "xdbe.h" #endif /* HAVE_DOUBLE_BUFFER_EXTENSION */ /*-----------------------------------------------------------------------+ | PRIVATE DATA | +-----------------------------------------------------------------------*/ #define TWO_PI (2.0 * M_PI) #define RND(x) (random() % (x)) #define MAXPEND 2000 #define MAXPTS 200 #define TRUE 1 #define FALSE 0 typedef struct { double x,y,z; int sx,sy,sz; } vPend; typedef struct { long col; int numpt; int growth; unsigned short rate; } appDef; struct state { Display *dpy; Pixmap b, ba, bb; #ifdef HAVE_DOUBLE_BUFFER_EXTENSION XdbeBackBuffer backb; #endif /* HAVE_DOUBLE_BUFFER_EXTENSION */ int arms; /* number of arms */ int finpoints; /* final number of points in each array. */ long delay; /* usecs to wait between updates. */ int scrWidth, scrHeight; GC gcDraw, gcClear; Bool dbuf; int width; vPend *vPendage; /* 3D representation of appendages */ appDef *appD; /* defaults */ vPend *vCurr, *vNext; appDef *aCurr; double turn, turndelta; int mx, my; /* max screen coordinates. */ int withdraw; XGCValues gcv; Colormap cmap; XColor *colors; int ncolors; }; /*-----------------------------------------------------------------------+ | PUBLIC DATA | +-----------------------------------------------------------------------*/ /*-----------------------------------------------------------------------+ | PRIVATE FUNCTIONS | +-----------------------------------------------------------------------*/ static void * xmalloc(size_t size) { void *ret; if ((ret = malloc(size)) == NULL) { fprintf(stderr, "anemone: out of memory\n"); exit(1); } return ret; } static void initAppendages(struct state *st) { int i; /*int marginx, marginy; */ /*double scalex, scaley;*/ double x,y,z,dist; st->mx = st->scrWidth - 1; st->my = st->scrHeight - 1; /* each appendage will have: colour, number of points, and a grow or shrink indicator */ /* added: growth rate 1-10 (smaller==faster growth) */ /* each appendage needs virtual coords (x,y,z) with y and z combining to give the screen y */ st->vPendage = (vPend *) xmalloc((st->finpoints + 1) * sizeof(vPend) * st->arms); st->appD = (appDef *) xmalloc(sizeof(appDef) * st->arms); for (i = 0; i < st->arms; i++) { st->aCurr = st->appD + i; st->vCurr = st->vPendage + (st->finpoints + 1) * i; st->vNext = st->vCurr + 1; st->aCurr->col = st->colors[random() % st->ncolors].pixel; st->aCurr->numpt = 1; st->aCurr->growth = st->finpoints / 2 + RND(st->finpoints / 2); st->aCurr->rate = RND(11) * RND(11); do { x = (1 - RND(1001) / 500); y = (1 - RND(1001) / 500); z = (1 - RND(1001) / 500); dist = x * x + y * y + z * z; } while (dist >= 1.); st->vCurr->x = x * 200; st->vCurr->y = st->my / 2 + y * 200; st->vCurr->z = 0 + z * 200; /* start the arm going outwards */ st->vCurr->sx = st->vCurr->x / 5; st->vCurr->sy = (st->vCurr->y - st->my / 2) / 5; st->vCurr->sz = (st->vCurr->z) / 5; st->vNext->x = st->vCurr->x + st->vCurr->sx; st->vNext->y = st->vCurr->y + st->vCurr->sy; st->vNext->z = st->vCurr->z + st->vCurr->sz; } } static void * anemone_init (Display *disp, Window window) { struct state *st = (struct state *) calloc (1, sizeof(*st)); XWindowAttributes wa; st->dpy = disp; st->turn = 0.; st->width = get_integer_resource(st->dpy, "width", "Integer"); st->arms = get_integer_resource(st->dpy, "arms", "Integer"); st->finpoints = get_integer_resource(st->dpy, "finpoints", "Integer"); st->delay = get_integer_resource(st->dpy, "delay", "Integer"); st->withdraw = get_integer_resource(st->dpy, "withdraw", "Integer"); st->turndelta = get_float_resource(st->dpy, "turnspeed", "float") / 100000; st->dbuf = TRUE; # ifdef HAVE_JWXYZ /* Don't second-guess Quartz's double-buffering */ st->dbuf = False; # endif st->b = st->ba = st->bb = 0; /* double-buffer to reduce flicker */ #ifdef HAVE_DOUBLE_BUFFER_EXTENSION st->b = st->backb = xdbe_get_backbuffer (st->dpy, window, XdbeUndefined); #endif /* HAVE_DOUBLE_BUFFER_EXTENSION */ XGetWindowAttributes(st->dpy, window, &wa); st->scrWidth = wa.width; st->scrHeight = wa.height; st->cmap = wa.colormap; st->ncolors = get_integer_resource (st->dpy, "colors", "Colors"); st->ncolors += 3; st->colors = (XColor *) malloc(sizeof(*st->colors) * (st->ncolors+1)); make_smooth_colormap (wa.screen, wa.visual, st->cmap, st->colors, &st->ncolors, True, 0, True); st->gcDraw = XCreateGC(st->dpy, window, 0, &st->gcv); st->gcv.foreground = get_pixel_resource(st->dpy, st->cmap, "background", "Background"); st->gcClear = XCreateGC(st->dpy, window, GCForeground, &st->gcv); if (st->dbuf) { if (!st->b) { st->ba = XCreatePixmap (st->dpy, window, st->scrWidth, st->scrHeight, wa.depth); st->bb = XCreatePixmap (st->dpy, window, st->scrWidth, st->scrHeight, wa.depth); st->b = st->ba; } } else { st->b = window; } if (st->ba) XFillRectangle (st->dpy, st->ba, st->gcClear, 0, 0, st->scrWidth, st->scrHeight); if (st->bb) XFillRectangle (st->dpy, st->bb, st->gcClear, 0, 0, st->scrWidth, st->scrHeight); XClearWindow(st->dpy, window); XSetLineAttributes(st->dpy, st->gcDraw, st->width, LineSolid, CapRound, JoinBevel); initAppendages(st); return st; } static void createPoints(struct state *st) { int i; int withdrawall = RND(st->withdraw); for (i = 0; i< st->arms; i++) { st->aCurr = st->appD + i; if (!withdrawall) { st->aCurr->growth = -st->finpoints; st->turndelta = -st->turndelta; } else if (withdrawall<11) st->aCurr->growth = -st->aCurr->numpt; else if (RND(100)aCurr->rate) { if (st->aCurr->growth>0) { if (!(--st->aCurr->growth)) st->aCurr->growth = -RND(st->finpoints) - 1; st->vCurr = st->vPendage + (st->finpoints + 1) * i + st->aCurr->numpt - 1; if (st->aCurr->numptfinpoints - 1) { /* add a piece */ st->vNext = st->vCurr + 1; st->aCurr->numpt++; st->vNext->sx = st->vCurr->sx + RND(3) - 1; st->vNext->sy = st->vCurr->sy + RND(3) - 1; st->vNext->sz = st->vCurr->sz + RND(3) - 1; st->vCurr = st->vNext + 1; st->vCurr->x = st->vNext->x + st->vNext->sx; st->vCurr->y = st->vNext->y + st->vNext->sy; st->vCurr->z = st->vNext->z + st->vNext->sz; } } } } } static void drawImage(struct state *st, Drawable curr_window, double sint, double cost) { int q,numpt,mx2 = st->mx / 2; double cx,cy,cz,nx = 0,ny = 0,nz = 0; if ((numpt = st->aCurr->numpt)==1) return; XSetForeground(st->dpy, st->gcDraw, st->aCurr->col); st->vNext = st->vCurr + 1; cx = st->vCurr->x; cy = st->vCurr->y; cz = st->vCurr->z; for (q = 0; q < numpt - 1; q++) { nx = st->vNext->x + 2 - RND(5); ny = st->vNext->y + 2 - RND(5); nz = st->vNext->z + 2 - RND(5); XDrawLine(st->dpy, curr_window, st->gcDraw, mx2 + cx * cost - cz * sint, cy, mx2 + nx * cost - nz * sint, ny); st->vCurr++; st->vNext++; cx = nx; cy = ny; cz = nz; } XSetLineAttributes(st->dpy, st->gcDraw, st->width * 3, LineSolid, CapRound, JoinBevel); XDrawLine(st->dpy, curr_window, st->gcDraw, st->mx / 2 + cx * cost - cz * sint, cy, st->mx / 2 + nx * cost - nz * sint, ny); XSetLineAttributes(st->dpy, st->gcDraw, st->width, LineSolid, CapRound, JoinBevel); } static void animateAnemone(struct state *st, Drawable curr_window) { int i; double sint = sin(st->turn),cost = cos(st->turn); st->aCurr = st->appD; for (i = 0; i< st->arms; i++) { st->vCurr = st->vPendage + (st->finpoints + 1) * i; if (RND(25)aCurr->rate) { if (st->aCurr->growth<0) { st->aCurr->numpt -= st->aCurr->numpt>1; if (!(++st->aCurr->growth)) st->aCurr->growth = RND(st->finpoints - st->aCurr->numpt) + 1; } } drawImage(st, curr_window, sint, cost); st->turn += st->turndelta; st->aCurr++; } createPoints(st); if (st->turn >= TWO_PI) st->turn -= TWO_PI; } static unsigned long anemone_draw (Display *dpy, Window window, void *closure) { struct state *st = (struct state *) closure; XFillRectangle (st->dpy, st->b, st->gcClear, 0, 0, st->scrWidth, st->scrHeight); animateAnemone(st, st->b); #ifdef HAVE_DOUBLE_BUFFER_EXTENSION if (st->backb) { XdbeSwapInfo info[1]; info[0].swap_window = window; info[0].swap_action = XdbeUndefined; XdbeSwapBuffers (st->dpy, info, 1); } else #endif /* HAVE_DOUBLE_BUFFER_EXTENSION */ if (st->dbuf) { XCopyArea (st->dpy, st->b, window, st->gcClear, 0, 0, st->scrWidth, st->scrHeight, 0, 0); st->b = (st->b == st->ba ? st->bb : st->ba); } return st->delay; } static void anemone_reshape (Display *dpy, Window window, void *closure, unsigned int w, unsigned int h) { 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 anemone_event (Display *dpy, Window window, void *closure, XEvent *event) { return False; } static void anemone_free (Display *dpy, Window window, void *closure) { struct state *st = (struct state *) closure; if (st->vPendage) free (st->vPendage); if (st->appD) free (st->appD); free (st); } static const char *anemone_defaults [] = { ".background: black", "*arms: 128", "*width: 2", "*finpoints: 64", "*delay: 40000", "*withdraw: 1200", "*turnspeed: 50", "*colors: 20", #ifdef HAVE_DOUBLE_BUFFER_EXTENSION "*useDBE: True", #endif /* HAVE_DOUBLE_BUFFER_EXTENSION */ #ifdef HAVE_MOBILE "*ignoreRotation: True", #endif 0 }; static XrmOptionDescRec anemone_options [] = { { "-arms", ".arms", XrmoptionSepArg, 0 }, { "-finpoints", ".finpoints", XrmoptionSepArg, 0 }, { "-delay", ".delay", XrmoptionSepArg, 0 }, { "-width", ".width", XrmoptionSepArg, 0 }, { "-withdraw", ".withdraw", XrmoptionSepArg, 0 }, { "-turnspeed", ".turnspeed", XrmoptionSepArg, 0 }, { "-colors", ".colors", XrmoptionSepArg, 0 }, { 0, 0, 0, 0 } }; XSCREENSAVER_MODULE ("Anemone", anemone) xscreensaver-5.36/hacks/halftone.c000644 000767 000024 00000027721 12717746344 017223 0ustar00jwzstaff000000 000000 /* halftone, Copyright (c) 2002 by Peter Jaric * * 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. * * Description: * Draws the gravitational force in each point on the screen seen * through a halftone dot pattern. The force is calculated from a set * of moving mass points. View it from a distance for best effect. */ #include #include #include #include "screenhack.h" #define DEFAULT_DELAY 10000 #define DEFAULT_SPACING 14 #define DEFAULT_SIZE_FACTOR 1.5 #define DEFAULT_COUNT 10 #define DEFAULT_MIN_MASS 0.001 #define DEFAULT_MAX_MASS 0.02 #define DEFAULT_MIN_SPEED 0.001 #define DEFAULT_MAX_SPEED 0.02 typedef struct { /* halftone dots */ double * dots; int dots_width; int dots_height; int spacing; int max_dot_size; /* Moving gravity points */ int gravity_point_count; double* gravity_point_x; double* gravity_point_y; double* gravity_point_mass; double* gravity_point_x_inc; double* gravity_point_y_inc; /* X stuff */ Display *dpy; Window window; GC gc; int ncolors; XColor *colors; int color0, color1; int color_tick, cycle_speed; /* Off screen buffer */ Pixmap buffer; GC buffer_gc; int buffer_width; int buffer_height; int delay; } halftone_screen; static void update_buffer(halftone_screen *halftone, XWindowAttributes * attrs) { if (halftone->buffer_width != attrs->width || halftone->buffer_height != attrs->height) { XGCValues gc_values; if (halftone->buffer_width != -1 && halftone->buffer_height != -1) { if (halftone->buffer != halftone->window) XFreePixmap(halftone->dpy, halftone->buffer); XFreeGC(halftone->dpy, halftone->buffer_gc); } halftone->buffer_width = attrs->width; halftone->buffer_height = attrs->height; #ifdef HAVE_JWXYZ /* Don't second-guess Quartz's double-buffering */ halftone->buffer = halftone->window; #else halftone->buffer = XCreatePixmap(halftone->dpy, halftone->window, halftone->buffer_width, halftone->buffer_height, attrs->depth); #endif halftone->buffer_gc = XCreateGC(halftone->dpy, halftone->buffer, 0, &gc_values); } } static void update_dot_attributes(halftone_screen *halftone, XWindowAttributes * attrs) { double dots_width = attrs->width / halftone->spacing + 1; double dots_height = attrs->height / halftone->spacing + 1; if (halftone->dots == NULL || (dots_width != halftone->dots_width || dots_height != halftone->dots_height)) { if (halftone->dots != NULL) free(halftone->dots); halftone->dots_width = dots_width; halftone->dots_height = dots_height; halftone->dots = (double *) malloc(halftone->dots_width * halftone->dots_height * sizeof(double)); } } static void * halftone_init (Display *dpy, Window window) { int x, y, i; int count; int spacing; double factor; double min_mass; double max_mass; double min_speed; double max_speed; XGCValues gc_values; XWindowAttributes attrs; halftone_screen *halftone; halftone = (halftone_screen *) calloc (1, sizeof(halftone_screen)); halftone->dpy = dpy; halftone->window = window; halftone->delay = get_integer_resource (dpy, "delay", "Integer"); halftone->delay = (halftone->delay < 0 ? DEFAULT_DELAY : halftone->delay); halftone->gc = XCreateGC (halftone->dpy, halftone->window, 0, &gc_values); halftone->buffer_width = -1; halftone->buffer_height = -1; halftone->dots = NULL; /* Read command line arguments and set all settings. */ count = get_integer_resource (dpy, "count", "Count"); halftone->gravity_point_count = count < 1 ? DEFAULT_COUNT : count; spacing = get_integer_resource (dpy, "spacing", "Integer"); halftone->spacing = spacing < 1 ? DEFAULT_SPACING : spacing; factor = get_float_resource (dpy, "sizeFactor", "Double"); halftone->max_dot_size = (factor < 0 ? DEFAULT_SIZE_FACTOR : factor) * halftone->spacing; min_mass = get_float_resource (dpy, "minMass", "Double"); min_mass = min_mass < 0 ? DEFAULT_MIN_MASS : min_mass; max_mass = get_float_resource (dpy, "maxMass", "Double"); max_mass = max_mass < 0 ? DEFAULT_MAX_MASS : max_mass; max_mass = max_mass < min_mass ? min_mass : max_mass; min_speed = get_float_resource (dpy, "minSpeed", "Double"); min_speed = min_speed < 0 ? DEFAULT_MIN_SPEED : min_speed; max_speed = get_float_resource (dpy, "maxSpeed", "Double"); max_speed = max_speed < 0 ? DEFAULT_MAX_SPEED : max_speed; max_speed = max_speed < min_speed ? min_speed : max_speed; /* Set up the moving gravity points. */ halftone->gravity_point_x = (double *) malloc(halftone->gravity_point_count * sizeof(double)); halftone->gravity_point_y = (double *) malloc(halftone->gravity_point_count * sizeof(double)); halftone->gravity_point_mass = (double *) malloc(halftone->gravity_point_count * sizeof(double)); halftone->gravity_point_x_inc = (double *) malloc(halftone->gravity_point_count * sizeof(double)); halftone->gravity_point_y_inc = (double *) malloc(halftone->gravity_point_count * sizeof(double)); for (i = 0; i < halftone->gravity_point_count; i++) { halftone->gravity_point_x[i] = frand(1); halftone->gravity_point_y[i] = frand(1); halftone->gravity_point_mass[i] = min_mass + (max_mass - min_mass) * frand(1); halftone->gravity_point_x_inc[i] = min_speed + (max_speed - min_speed) * frand(1); halftone->gravity_point_y_inc[i] = min_speed + (max_speed - min_speed) * frand(1); } /* Set up the dots. */ XGetWindowAttributes(halftone->dpy, halftone->window, &attrs); halftone->ncolors = get_integer_resource (dpy, "colors", "Colors"); if (halftone->ncolors < 4) halftone->ncolors = 4; halftone->colors = (XColor *) calloc(halftone->ncolors, sizeof(XColor)); make_smooth_colormap (attrs.screen, attrs.visual, attrs.colormap, halftone->colors, &halftone->ncolors, True, 0, False); halftone->color0 = 0; halftone->color1 = halftone->ncolors / 2; halftone->cycle_speed = get_integer_resource (dpy, "cycleSpeed", "CycleSpeed"); halftone->color_tick = 0; update_buffer(halftone, &attrs); update_dot_attributes(halftone, &attrs); for (x = 0; x < halftone->dots_width; x++) for (y = 0; y < halftone->dots_height; y++) { halftone->dots[x + y * halftone->dots_width] = 0; } return halftone; } static void fill_circle(Display *dpy, Window window, GC gc, int x, int y, int size) { int start_x = x - (size / 2); int start_y = y - (size / 2); unsigned int width = size; unsigned int height = size; int angle1 = 0; int angle2 = 360 * 64; /* A full circle */ XFillArc (dpy, window, gc, start_x, start_y, width, height, angle1, angle2); } static void repaint_halftone(halftone_screen *halftone) { int x, y; /* int x_offset = halftone->spacing / 2; int y_offset = halftone->spacing / 2; */ int x_offset = 0; int y_offset = 0; /* Fill buffer with background color */ XSetForeground (halftone->dpy, halftone->buffer_gc, halftone->colors[halftone->color0].pixel); XFillRectangle(halftone->dpy, halftone->buffer, halftone->buffer_gc, 0, 0, halftone->buffer_width, halftone->buffer_height); /* Draw dots on buffer */ XSetForeground (halftone->dpy, halftone->buffer_gc, halftone->colors[halftone->color1].pixel); if (halftone->color_tick++ >= halftone->cycle_speed) { halftone->color_tick = 0; halftone->color0 = (halftone->color0 + 1) % halftone->ncolors; halftone->color1 = (halftone->color1 + 1) % halftone->ncolors; } for (x = 0; x < halftone->dots_width; x++) for (y = 0; y < halftone->dots_height; y++) fill_circle(halftone->dpy, halftone->buffer, halftone->buffer_gc, x_offset + x * halftone->spacing, y_offset + y * halftone->spacing, halftone->max_dot_size * halftone->dots[x + y * halftone->dots_width]); /* Copy buffer to window */ if (halftone->buffer != halftone->window) XCopyArea(halftone->dpy, halftone->buffer, halftone->window, halftone->gc, 0, 0, halftone->buffer_width, halftone->buffer_height, 0, 0); } static double calculate_gravity(halftone_screen *halftone, int x, int y) { int i; double gx = 0; double gy = 0; for (i = 0; i < halftone->gravity_point_count; i++) { double dx = ((double) x) - halftone->gravity_point_x[i] * halftone->dots_width; double dy = ((double) y) - halftone->gravity_point_y[i] * halftone->dots_height; double distance = sqrt(dx * dx + dy * dy); if (distance != 0) { double gravity = halftone->gravity_point_mass[i] / (distance * distance / (halftone->dots_width * halftone->dots_height)); gx += (dx / distance) * gravity; gy += (dy / distance) * gravity; } } return sqrt(gx * gx + gy * gy); } static void update_halftone(halftone_screen *halftone) { int x, y, i; XWindowAttributes attrs; XGetWindowAttributes(halftone->dpy, halftone->window, &attrs); /* Make sure we have a valid buffer */ update_buffer(halftone, &attrs); /* Make sure all dot attributes (spacing, width, height, etc) are correct */ update_dot_attributes(halftone, &attrs); /* Move gravity points */ for (i = 0; i < halftone->gravity_point_count; i++) { halftone->gravity_point_x_inc[i] = (halftone->gravity_point_x[i] >= 1 || halftone->gravity_point_x[i] <= 0 ? -halftone->gravity_point_x_inc[i] : halftone->gravity_point_x_inc[i]); halftone->gravity_point_y_inc[i] = (halftone->gravity_point_y[i] >= 1 || halftone->gravity_point_y[i] <= 0 ? -halftone->gravity_point_y_inc[i] : halftone->gravity_point_y_inc[i]); halftone->gravity_point_x[i] += halftone->gravity_point_x_inc[i]; halftone->gravity_point_y[i] += halftone->gravity_point_y_inc[i]; } /* Update gravity in each dot .*/ for (x = 0; x < halftone->dots_width; x++) for (y = 0; y < halftone->dots_height; y++) { double gravity = calculate_gravity(halftone, x, y); halftone->dots[x + y * halftone->dots_width] = (gravity > 1 ? 1 : (gravity < 0 ? 0 : gravity)); } } static unsigned long halftone_draw (Display *dpy, Window window, void *closure) { halftone_screen *halftone = (halftone_screen *) closure; repaint_halftone(halftone); update_halftone(halftone); return halftone->delay; } static void halftone_reshape (Display *dpy, Window window, void *closure, unsigned int w, unsigned int h) { } static Bool halftone_event (Display *dpy, Window window, void *closure, XEvent *event) { return False; } static void halftone_free (Display *dpy, Window window, void *closure) { halftone_screen *halftone = (halftone_screen *) closure; free (halftone); } static const char *halftone_defaults [] = { ".background: Black", "*delay: 10000", "*count: 10", "*minMass: 0.001", "*maxMass: 0.02", "*minSpeed: 0.001", "*maxSpeed: 0.02", "*spacing: 14", "*sizeFactor: 1.5", "*colors: 200", "*cycleSpeed: 10", #ifdef HAVE_MOBILE "*ignoreRotation: True", #endif 0 }; static XrmOptionDescRec halftone_options [] = { { "-delay", ".delay", XrmoptionSepArg, 0 }, { "-count", ".count", XrmoptionSepArg, 0 }, { "-minmass", ".minMass", XrmoptionSepArg, 0 }, { "-maxmass", ".maxMass", XrmoptionSepArg, 0 }, { "-minspeed", ".minSpeed", XrmoptionSepArg, 0 }, { "-maxspeed", ".maxSpeed", XrmoptionSepArg, 0 }, { "-spacing", ".spacing", XrmoptionSepArg, 0 }, { "-sizefactor", ".sizeFactor", XrmoptionSepArg, 0 }, { "-colors", ".colors", XrmoptionSepArg, 0 }, { "-cycle-speed", ".cycleSpeed", XrmoptionSepArg, 0 }, { 0, 0, 0, 0 } }; XSCREENSAVER_MODULE ("Halftone", halftone) xscreensaver-5.36/hacks/metaballs.c000644 000767 000024 00000027637 12710314341 017352 0ustar00jwzstaff000000 000000 /* MetaBalls, Copyright (c) 2002-2003 W.P. van Paassen * * 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. * * Module - "metaballs.c" * * [01/24/03] - W.P. van Paassen: Additional features * [12/29/02] - W.P. van Paassen: Port to X for use with XScreenSaver, the shadebob hack by Shane Smit was used as a template * [12/26/02] - W.P. van Paassen: Creation for the Demo Effects Collection (http://demo-effects.sourceforge.net) */ #include #include "screenhack.h" /*#define VERBOSE*/ /*blob structure*/ typedef struct { short xpos,ypos; } BLOB; struct state { Display *dpy; Window window; unsigned short iWinWidth, iWinHeight; char *sColor; unsigned int nBlobCount; unsigned char radius; unsigned char delta; unsigned char dradius; unsigned short sradius; unsigned char **blob; BLOB *blobs; unsigned char **blub; int delay, cycles; signed short iColorCount; unsigned long *aiColorVals; XImage *pImage; GC gc; int draw_i; }; #undef BELLRAND #define BELLRAND(n) ((frand((n)) + frand((n)) + frand((n))) / 3) static void init_blob(struct state *st, BLOB *blob) { blob->xpos = st->iWinWidth/4 + BELLRAND(st->iWinWidth/2) - st->radius; blob->ypos = st->iWinHeight/4 + BELLRAND(st->iWinHeight/2) - st->radius; } static void Execute( struct state *st ) { int i, j, k; /* clear st->blub array */ for (i = 0; i < st->iWinHeight; ++i) memset(st->blub[i], 0, st->iWinWidth * sizeof(unsigned char)); /* move st->blobs */ for (i = 0; i < st->nBlobCount; i++) { st->blobs[i].xpos += -st->delta + (int)((st->delta + .5f) * frand(2.0)); st->blobs[i].ypos += -st->delta + (int)((st->delta + .5f) * frand(2.0)); } /* draw st->blobs to st->blub array */ for (k = 0; k < st->nBlobCount; ++k) { if (st->blobs[k].ypos > -st->dradius && st->blobs[k].xpos > -st->dradius && st->blobs[k].ypos < st->iWinHeight && st->blobs[k].xpos < st->iWinWidth) { for (i = 0; i < st->dradius; ++i) { if (st->blobs[k].ypos + i >= 0 && st->blobs[k].ypos + i < st->iWinHeight) { for (j = 0; j < st->dradius; ++j) { if (st->blobs[k].xpos + j >= 0 && st->blobs[k].xpos + j < st->iWinWidth) { if (st->blub[st->blobs[k].ypos + i][st->blobs[k].xpos + j] < st->iColorCount-1) { if (st->blub[st->blobs[k].ypos + i][st->blobs[k].xpos + j] + st->blob[i][j] > st->iColorCount-1) st->blub[st->blobs[k].ypos + i][st->blobs[k].xpos + j] = st->iColorCount-1; else st->blub[st->blobs[k].ypos + i][st->blobs[k].xpos + j] += st->blob[i][j]; } } } } } } else init_blob(st, st->blobs + k); } memset( st->pImage->data, 0, st->pImage->bytes_per_line * st->pImage->height); /* draw st->blub array to screen */ for (i = 0; i < st->iWinHeight; ++i) { for (j = 0; j < st->iWinWidth; ++j) { if (st->aiColorVals[st->blub[i][j]] > 0) XPutPixel( st->pImage, j, i, st->aiColorVals[st->blub[i][j]] ); } } XPutImage( st->dpy, st->window, st->gc, st->pImage, 0, 0, 0, 0, st->iWinWidth, st->iWinHeight ); } static unsigned long * SetPalette(struct state *st ) { XWindowAttributes XWinAttribs; XColor Color, *aColors; signed short iColor; float nHalfColors; XGetWindowAttributes( st->dpy, st->window, &XWinAttribs ); Color.red = random() % 0xFFFF; Color.green = random() % 0xFFFF; Color.blue = random() % 0xFFFF; if( strcasecmp( st->sColor, "random" ) && !XParseColor( st->dpy, XWinAttribs.colormap, st->sColor, &Color ) ) fprintf( stderr, "%s: color %s not found in database. Choosing to random...\n", progname, st->sColor ); #ifdef VERBOSE printf( "%s: Base color (RGB): <%d, %d, %d>\n", progname, Color.red, Color.green, Color.blue ); #endif /* VERBOSE */ st->iColorCount = get_integer_resource(st->dpy, "ncolors", "Integer" ); if( st->iColorCount < 2 ) st->iColorCount = 2; if( st->iColorCount > 255 ) st->iColorCount = 255; aColors = calloc( st->iColorCount, sizeof(XColor) ); st->aiColorVals = calloc( st->iColorCount, sizeof(unsigned long) ); for( iColor=0; iColor < st->iColorCount; iColor++ ) { nHalfColors = st->iColorCount / 2.0F; /* Black -> Base Color */ if( iColor < (st->iColorCount/2) ) { aColors[ iColor ].red = ( Color.red / nHalfColors ) * iColor; aColors[ iColor ].green = ( Color.green / nHalfColors ) * iColor; aColors[ iColor ].blue = ( Color.blue / nHalfColors ) * iColor; } /* Base Color -> White */ else { aColors[ iColor ].red = ( ( ( 0xFFFF - Color.red ) / nHalfColors ) * ( iColor - nHalfColors ) ) + Color.red; aColors[ iColor ].green = ( ( ( 0xFFFF - Color.green ) / nHalfColors ) * ( iColor - nHalfColors ) ) + Color.green; aColors[ iColor ].blue = ( ( ( 0xFFFF - Color.blue ) / nHalfColors ) * ( iColor - nHalfColors ) ) + Color.blue; } if( !XAllocColor( st->dpy, XWinAttribs.colormap, &aColors[ iColor ] ) ) { /* start all over with less colors */ XFreeColors( st->dpy, XWinAttribs.colormap, st->aiColorVals, iColor, 0 ); free( aColors ); free( st->aiColorVals ); (st->iColorCount)--; if (st->iColorCount < 6) { fprintf (stderr, "%s: insufficient colors!\n", progname); exit (1); } aColors = calloc( st->iColorCount, sizeof(XColor) ); st->aiColorVals = calloc( st->iColorCount, sizeof(unsigned long) ); iColor = -1; } else st->aiColorVals[ iColor ] = aColors[ iColor ].pixel; } free( aColors ); XSetWindowBackground( st->dpy, st->window, st->aiColorVals[ 0 ] ); return st->aiColorVals; } static void Initialize( struct state *st ) { XGCValues gcValues; XWindowAttributes XWinAttribs; int /*iBitsPerPixel,*/ i, j; unsigned int distance_squared; float fraction; /* Create the Image for drawing */ XGetWindowAttributes( st->dpy, st->window, &XWinAttribs ); /* Find the preferred bits-per-pixel. (jwz) */ #if 0 { int pfvc = 0; XPixmapFormatValues *pfv = XListPixmapFormats( st->dpy, &pfvc ); for( i=0; igc = XCreateGC( st->dpy, st->window, 0, &gcValues ); st->pImage = XCreateImage( st->dpy, XWinAttribs.visual, XWinAttribs.depth, ZPixmap, 0, NULL, XWinAttribs.width, XWinAttribs.height, BitmapPad( st->dpy ), 0 ); (st->pImage)->data = calloc((st->pImage)->bytes_per_line, (st->pImage)->height); st->iWinWidth = XWinAttribs.width; st->iWinHeight = XWinAttribs.height; /* Get the base color. */ st->sColor = get_string_resource(st->dpy, "color", "Color" ); /* Get the st->delta. */ st->delta = get_integer_resource(st->dpy, "delta", "Integer" ); if (st->delta < 1) st->delta = 1; else if (st->delta > 20) st->delta = 20; /* Get the st->radius. */ st->radius = get_integer_resource(st->dpy, "radius", "Integer" ); if (st->radius < 2) st->radius = 2; if (st->radius > 100) st->radius = 100; st->radius = (st->radius / 100.0) * (st->iWinHeight >> 3); if (st->radius >= 128) /* should use UCHAR_MAX? */ st->radius = 127; /* st->dradius should fit in u_char */ st->dradius = st->radius * 2; st->sradius = st->radius * st->radius; /* create st->blob */ st->blob = malloc ( st->dradius * sizeof(unsigned char*)); for (i = 0; i < st->dradius; ++i) st->blob[i] = malloc( st->dradius * sizeof(unsigned char)); /* create st->blub array */ st->blub = malloc( st->iWinHeight * sizeof(unsigned char*)); for (i = 0; i < st->iWinHeight; ++i) st->blub[i] = malloc( st->iWinWidth * sizeof(unsigned char)); /* create st->blob */ for (i = -st->radius; i < st->radius; ++i) { for (j = -st->radius; j < st->radius; ++j) { distance_squared = i * i + j * j; if (distance_squared <= st->sradius) { /* compute density */ fraction = (float)distance_squared / (float)st->sradius; st->blob[i + st->radius][j + st->radius] = pow((1.0 - (fraction * fraction)),4.0) * 255.0; } else { st->blob[i + st->radius][j + st->radius] = 0; } } } for (i = 0; i < st->nBlobCount; i++) { init_blob(st, st->blobs + i); } } static void * metaballs_init (Display *dpy, Window window) { struct state *st = (struct state *) calloc (1, sizeof(*st)); #ifdef VERBOSE time_t nTime = time( NULL ); unsigned short iFrame = 0; #endif /* VERBOSE */ st->dpy = dpy; st->window = window; st->nBlobCount = get_integer_resource(st->dpy, "count", "Integer" ); if( st->nBlobCount > 255 ) st->nBlobCount = 255; if( st->nBlobCount < 2 ) st->nBlobCount = 2; if( ( st->blobs = calloc( st->nBlobCount, sizeof(BLOB) ) ) == NULL ) { fprintf( stderr, "%s: Could not allocate %d Blobs\n", progname, st->nBlobCount ); abort(); } #ifdef VERBOSE printf( "%s: Allocated %d Blobs\n", progname, st->nBlobCount ); #endif /* VERBOSE */ Initialize( st ); st->delay = get_integer_resource(st->dpy, "delay", "Integer" ); st->cycles = get_integer_resource(st->dpy, "cycles", "Integer" ); st->draw_i = -1; return st; } static unsigned long metaballs_draw (Display *dpy, Window window, void *closure) { struct state *st = (struct state *) closure; if( st->draw_i < 0 || st->draw_i++ >= st->cycles ) { int i; XWindowAttributes XWinAttribs; XGetWindowAttributes( st->dpy, st->window, &XWinAttribs ); memset( st->pImage->data, 0, st->pImage->bytes_per_line * st->pImage->height ); XFreeColors( st->dpy, XWinAttribs.colormap, st->aiColorVals, st->iColorCount, 0 ); free( st->aiColorVals ); st->aiColorVals = SetPalette( st ); XClearWindow( st->dpy, st->window ); for (i = 0; i < st->nBlobCount; i++) { init_blob(st, st->blobs + i); } st->draw_i = 0; } Execute( st ); #ifdef VERBOSE iFrame++; if( nTime - time( NULL ) ) { printf( "%s: %d FPS\n", progname, iFrame ); nTime = time( NULL ); iFrame = 0; } #endif /* VERBOSE */ return st->delay; } static void metaballs_reshape (Display *dpy, Window window, void *closure, unsigned int w, unsigned int h) { } static Bool metaballs_event (Display *dpy, Window window, void *closure, XEvent *event) { return False; } static void metaballs_free (Display *dpy, Window window, void *closure) { #if 0 struct state *st = (struct state *) closure; free( st->pImage->data ); XDestroyImage( st->pImage ); free( st->aiColorVals ); free( st->blobs ); for (i = 0; i < st->iWinHeight; ++i) free( st->blub[i] ); free( st->blub ); for (i = 0; i < st->dradius; ++i) free( st->blob[i] ); free( st->blob ); #endif } static const char *metaballs_defaults [] = { ".background: black", ".foreground: white", "*color: random", "*count: 10", "*cycles: 1000", "*ncolors: 256", "*delay: 10000", "*radius: 100", "*delta: 3", #ifdef HAVE_MOBILE "*ignoreRotation: True", #endif 0 }; static XrmOptionDescRec metaballs_options [] = { { "-color", ".color", XrmoptionSepArg, 0 }, { "-ncolors", ".ncolors", XrmoptionSepArg, 0 }, { "-count", ".count", XrmoptionSepArg, 0 }, { "-delay", ".delay", XrmoptionSepArg, 0 }, { "-cycles", ".cycles", XrmoptionSepArg, 0 }, { "-radius", ".radius", XrmoptionSepArg, 0 }, { "-delta", ".delta", XrmoptionSepArg, 0 }, { 0, 0, 0, 0 } }; XSCREENSAVER_MODULE ("MetaBalls", metaballs) /* End of Module - "metaballs.c" */ xscreensaver-5.36/hacks/eruption.c000644 000767 000024 00000034416 12701612216 017246 0ustar00jwzstaff000000 000000 /* Eruption, Copyright (c) 2002-2003 W.P. van Paassen * * 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. * * Module - "eruption.c" * * [02-2003] - W.P. van Paassen: Improvements, added some code of jwz from the pyro hack for a spherical distribution of the particles * [01-2003] - W.P. van Paassen: Port to X for use with XScreenSaver, the shadebob hack by Shane Smit was used as a template * [04-2002] - W.P. van Paassen: Creation for the Demo Effects Collection (http://demo-effects.sourceforge.net) */ #include #include "screenhack.h" /*#define VERBOSE*/ /* Slightly whacked, for better explosions */ #define PI_2000 6284 #define SPREAD 15 /*particle structure*/ typedef struct { short xpos, ypos, xdir, ydir; unsigned char colorindex; unsigned char dead; } PARTICLE; struct state { Display *dpy; Window window; int sin_cache[PI_2000]; int cos_cache[PI_2000]; PARTICLE *particles; unsigned short iWinWidth, iWinHeight; unsigned char **fire; unsigned short nParticleCount; unsigned char xdelta, ydelta, decay; signed char gravity; signed short heat; int cycles, delay; GC gc; signed short iColorCount; unsigned long *aiColorVals; XImage *pImage; int draw_i; }; static void cache(struct state *st) /* jwz */ { /*needs to be run once. Could easily be */ int i; /*reimplemented to run and cache at compile-time,*/ double dA; for (i=0; icos_cache[i]=-abs((int) (cos(((double)i)/1000.0)*dA*st->ydelta)); st->sin_cache[i]=(int) (sin(((double)i)/1000.0)*dA*st->xdelta); } } static void init_particle(struct state *st, PARTICLE* particle, unsigned short xcenter, unsigned short ycenter) { int v = random() % PI_2000; particle->xpos = xcenter - SPREAD + (random() % (SPREAD * 2)); particle->ypos = ycenter - SPREAD + (random() % (SPREAD * 2));; particle->xdir = st->sin_cache[v]; particle->ydir = st->cos_cache[v]; particle->colorindex = st->iColorCount-1; particle->dead = 0; } static void Execute( struct state *st ) { int i, j; unsigned int temp; /* move and draw particles into st->fire array */ for (i = 0; i < st->nParticleCount; i++) { if (!st->particles[i].dead) { st->particles[i].xpos += st->particles[i].xdir; st->particles[i].ypos += st->particles[i].ydir; /* is particle dead? */ if (st->particles[i].colorindex == 0) { st->particles[i].dead = 1; continue; } if (st->particles[i].xpos < 1) { st->particles[i].xpos = 1; st->particles[i].xdir = -st->particles[i].xdir - 4; st->particles[i].colorindex = st->iColorCount; } else if (st->particles[i].xpos >= st->iWinWidth - 2) { st->particles[i].xpos = st->iWinWidth - 2; if (st->particles[i].xpos < 1) st->particles[i].xpos = 1; st->particles[i].xdir = -st->particles[i].xdir + 4; st->particles[i].colorindex = st->iColorCount; } if (st->particles[i].ypos < 1) { st->particles[i].ypos = 1; st->particles[i].ydir = -st->particles[i].ydir; st->particles[i].colorindex = st->iColorCount; } else if (st->particles[i].ypos >= st->iWinHeight - 3) { st->particles[i].ypos = st->iWinHeight- 3; if (st->particles[i].ypos < 1) st->particles[i].ypos = 1; st->particles[i].ydir = (-st->particles[i].ydir >> 2) - (random() % 2); st->particles[i].colorindex = st->iColorCount; } /* st->gravity kicks in */ st->particles[i].ydir += st->gravity; /* particle cools off */ st->particles[i].colorindex--; /* draw particle */ if (st->iWinHeight <= 2 || st->iWinWidth <= 2) continue; st->fire[st->particles[i].ypos][st->particles[i].xpos] = st->particles[i].colorindex; st->fire[st->particles[i].ypos][st->particles[i].xpos - 1] = st->particles[i].colorindex; st->fire[st->particles[i].ypos + 1][st->particles[i].xpos] = st->particles[i].colorindex; st->fire[st->particles[i].ypos - 1][st->particles[i].xpos] = st->particles[i].colorindex; st->fire[st->particles[i].ypos][st->particles[i].xpos + 1] = st->particles[i].colorindex; } } /* create st->fire effect */ for (i = 0; i < st->iWinHeight; i++) { for (j = 0; j < st->iWinWidth; j++) { if (j + 1 >= st->iWinWidth) temp = 0; else temp = st->fire[i][j + 1]; if (j - 1 >= 0) temp += st->fire[i][j - 1]; if (i - 1 >= 0) { temp += st->fire[i - 1][j]; if (j - 1 >= 0) temp += st->fire[i - 1][j - 1]; if (j + 1 < st->iWinWidth) temp += st->fire[i - 1][j + 1]; } if (i + 1 < st->iWinHeight) { temp += st->fire[i + 1][j]; if (j + 1 < st->iWinWidth) temp += st->fire[i + 1][j + 1]; if (j - 1 >= 0) temp += st->fire[i + 1][j - 1]; } temp >>= 3; if (temp > st->decay) { temp -= st->decay; } else temp = 0; st->fire[i][j] = temp; } } memset( st->pImage->data, 0, st->pImage->bytes_per_line * st->pImage->height ); /* draw st->fire array to screen */ for (i = 0; i < st->iWinHeight; ++i) { for (j = 0; j < st->iWinWidth; ++j) { if (st->fire[i][j] > 0) XPutPixel( st->pImage, j, i, st->aiColorVals[ st->fire[i][j] ] ); } } XPutImage( st->dpy, st->window, st->gc, st->pImage, 0,0,0,0, st->iWinWidth, st->iWinHeight ); } static unsigned long * SetPalette(struct state *st) { XWindowAttributes XWinAttribs; XColor Color, *aColors; signed short iColor; XGetWindowAttributes( st->dpy, st->window, &XWinAttribs ); st->iColorCount = get_integer_resource(st->dpy, "ncolors", "Integer" ); if( st->iColorCount < 16 ) st->iColorCount = 16; if( st->iColorCount > 255 ) st->iColorCount = 256; aColors = calloc( st->iColorCount, sizeof(XColor) ); st->aiColorVals = calloc( st->iColorCount, sizeof(unsigned long) ); Color.red = Color.green = Color.blue = 65535 / st->iColorCount; /* create st->fire palette */ for( iColor=0; iColor < st->iColorCount; iColor++ ) { if (iColor < st->iColorCount >> 3) { /* black to blue */ aColors[iColor].red = 0; aColors[iColor].green = 0; aColors[iColor].blue = Color.blue * (iColor << 1); } else if (iColor < st->iColorCount >> 2) { /* blue to red */ signed short temp = (iColor - (st->iColorCount >> 3)); aColors[iColor].red = Color.red * (temp << 3); aColors[iColor].green = 0; aColors[iColor].blue = 16383 - Color.blue * (temp << 1); } else if (iColor < (st->iColorCount >> 2) + (st->iColorCount >> 3)) { /* red to yellow */ signed short temp = (iColor - (st->iColorCount >> 2)) << 3; aColors[iColor].red = 65535; aColors[iColor].green = Color.green * temp; aColors[iColor].blue = 0; } else if (iColor < st->iColorCount >> 1) { /* yellow to white */ signed int temp = (iColor - ((st->iColorCount >> 2) + (st->iColorCount >> 3))) << 3; aColors[iColor].red = 65535; aColors[iColor].green = 65535; aColors[iColor].blue = Color.blue * temp; } else { /* white */ aColors[iColor].red = aColors[iColor].green = aColors[iColor].blue = 65535; } if( !XAllocColor( st->dpy, XWinAttribs.colormap, &aColors[ iColor ] ) ) { /* start all over with less colors */ XFreeColors( st->dpy, XWinAttribs.colormap, st->aiColorVals, iColor, 0 ); free( aColors ); free( st->aiColorVals ); (st->iColorCount)--; aColors = calloc( st->iColorCount, sizeof(XColor) ); st->aiColorVals = calloc( st->iColorCount, sizeof(unsigned long) ); iColor = -1; } else st->aiColorVals[ iColor ] = aColors[ iColor ].pixel; } if (st->heat < st->iColorCount) st->iColorCount = st->heat; free( aColors ); XSetWindowBackground( st->dpy, st->window, st->aiColorVals[ 0 ] ); return st->aiColorVals; } static void Initialize( struct state *st ) { XGCValues gcValues; XWindowAttributes XWinAttribs; int /*iBitsPerPixel,*/ i; /* Create the Image for drawing */ XGetWindowAttributes( st->dpy, st->window, &XWinAttribs ); /* Find the preferred bits-per-pixel. (jwz) */ { int pfvc = 0; XPixmapFormatValues *pfv = XListPixmapFormats( st->dpy, &pfvc ); for( i=0; igc = XCreateGC( st->dpy, st->window, 0, &gcValues ); st->pImage = XCreateImage( st->dpy, XWinAttribs.visual, XWinAttribs.depth, ZPixmap, 0, NULL, XWinAttribs.width, XWinAttribs.height, BitmapPad( st->dpy ), 0 ); (st->pImage)->data = calloc((st->pImage)->bytes_per_line, (st->pImage)->height); st->iWinWidth = XWinAttribs.width; st->iWinHeight = XWinAttribs.height; /* create st->fire array */ st->fire = calloc( st->iWinHeight, sizeof(unsigned char*)); for (i = 0; i < st->iWinHeight; ++i) st->fire[i] = calloc( st->iWinWidth, sizeof(unsigned char)); /*create st->particles */ st->particles = malloc (st->nParticleCount * sizeof(PARTICLE)); } static void * eruption_init (Display *dpy, Window window) { struct state *st = (struct state *) calloc (1, sizeof(*st)); XWindowAttributes XWinAttribs; unsigned short sum = 0; #ifdef VERBOSE time_t nTime = time( NULL ); unsigned short iFrame = 0; #endif /* VERBOSE */ st->dpy = dpy; st->window = window; st->nParticleCount = get_integer_resource(st->dpy, "particles", "Integer" ); if (st->nParticleCount < 100) st->nParticleCount = 100; if (st->nParticleCount > 2000) st->nParticleCount = 2000; st->decay = get_integer_resource(st->dpy, "cooloff", "Integer" ); if (st->decay <= 0) st->decay = 0; if (st->decay > 10) st->decay = 10; st->gravity = get_integer_resource(st->dpy, "gravity", "Integer" ); if (st->gravity < -5) st->gravity = -5; if (st->gravity > 5) st->gravity = 5; st->heat = get_integer_resource(st->dpy, "heat", "Integer" ); if (st->heat < 64) st->heat = 64; if (st->heat > 256) st->heat = 256; #ifdef VERBOSE printf( "%s: Allocated %d st->particles\n", progclass, st->nParticleCount ); #endif /* VERBOSE */ Initialize( st ); st->ydelta = 0; while (sum < (st->iWinHeight >> 1) - SPREAD) { st->ydelta++; sum += st->ydelta; } sum = 0; while (sum < (st->iWinWidth >> 3)) { st->xdelta++; sum += st->xdelta; } st->delay = get_integer_resource(st->dpy, "delay", "Integer" ); st->cycles = get_integer_resource(st->dpy, "cycles", "Integer" ); cache(st); XGetWindowAttributes( st->dpy, st->window, &XWinAttribs ); XFreeColors( st->dpy, XWinAttribs.colormap, st->aiColorVals, st->iColorCount, 0 ); free( st->aiColorVals ); st->aiColorVals = SetPalette( st ); XClearWindow( st->dpy, st->window ); memset( st->pImage->data, 0, st->pImage->bytes_per_line * st->pImage->height ); st->draw_i = -1; return st; } static unsigned long eruption_draw (Display *dpy, Window window, void *closure) { struct state *st = (struct state *) closure; if( st->draw_i < 0 || st->draw_i++ >= st->cycles ) { /* compute random center */ unsigned short xcenter, ycenter; xcenter = random() % st->iWinWidth; ycenter = random() % st->iWinHeight; for (st->draw_i = 0; st->draw_i < st->nParticleCount; st->draw_i++) init_particle(st, st->particles + st->draw_i, xcenter, ycenter); st->draw_i = 0; } Execute( st ); #ifdef VERBOSE iFrame++; if( nTime - time( NULL ) ) { printf( "%s: %d FPS\n", progclass, iFrame ); nTime = time( NULL ); iFrame = 0; } #endif /* VERBOSE */ return st->delay; } static void eruption_reshape (Display *dpy, Window window, void *closure, unsigned int w, unsigned int h) { struct state *st = (struct state *) closure; XWindowAttributes XWinAttribs; 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)); XDestroyImage( st->pImage ); XGetWindowAttributes( st->dpy, st->window, &XWinAttribs ); st->pImage = XCreateImage( st->dpy, XWinAttribs.visual, XWinAttribs.depth, ZPixmap, 0, NULL, XWinAttribs.width, XWinAttribs.height, BitmapPad( st->dpy ), 0 ); (st->pImage)->data = calloc((st->pImage)->bytes_per_line, (st->pImage)->height); st->draw_i = -1; } static Bool eruption_event (Display *dpy, Window window, void *closure, XEvent *event) { return False; } static void eruption_free (Display *dpy, Window window, void *closure) { #if 0 struct state *st = (struct state *) closure; XDestroyImage( st->pImage ); free( st->aiColorVals ); for (i = 0; i < st->iWinHeight; ++i) free( st->fire[i] ); free( st->fire ); free( st->particles ); #endif } static const char *eruption_defaults [] = { ".background: black", ".foreground: white", "*fpsTop: true", "*cycles: 80", "*ncolors: 256", "*delay: 10000", "*particles: 300", "*cooloff: 2", "*gravity: 1", "*heat: 256", 0 }; static XrmOptionDescRec eruption_options [] = { { "-ncolors", ".ncolors", XrmoptionSepArg, 0 }, { "-delay", ".delay", XrmoptionSepArg, 0 }, { "-cycles", ".cycles", XrmoptionSepArg, 0 }, { "-particles", ".particles", XrmoptionSepArg, 0 }, { "-cooloff", ".cooloff", XrmoptionSepArg, 0 }, { "-gravity", ".gravity", XrmoptionSepArg, 0 }, { "-heat", ".heat", XrmoptionSepArg, 0 }, { 0, 0, 0, 0 } }; XSCREENSAVER_MODULE ("Eruption", eruption) /* End of Module - "eruption.c" */ xscreensaver-5.36/hacks/popsquares.c000644 000767 000024 00000020174 12717750003 017603 0ustar00jwzstaff000000 000000 /* Copyright (c) 2003 Levi Burton * * 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. */ #include "screenhack.h" #include "colors.h" #ifdef HAVE_DOUBLE_BUFFER_EXTENSION # include "xdbe.h" #endif /* HAVE_DOUBLE_BUFFER_EXTENSION */ typedef struct _square { int x, y, w, h; int color; } square; static void randomize_square_colors(square *squares, int nsquares, int ncolors) { int i; square *s = squares; for (i = 0; i < nsquares; i++) s[i].color = random() % ncolors; } struct state { Display *dpy; Window window; int delay, subdivision, border, ncolors, twitch, dbuf; XWindowAttributes xgwa; GC gc; XColor *colors; int sw, sh, gw, gh, nsquares; square *squares; Pixmap b, ba, bb; #ifdef HAVE_DOUBLE_BUFFER_EXTENSION XdbeBackBuffer backb; #endif /* HAVE_DOUBLE_BUFFER_EXTENSION */ }; static void * popsquares_init (Display *dpy, Window window) { struct state *st = (struct state *) calloc (1, sizeof(*st)); int x, y; double s1, v1, s2, v2 = 0; int h1, h2 = 0; /* Not sure how to use DBEClear */ /* Bool dbeclear_p = get_boolean_resource(dpy, "useDBEClear", "Boolean"); */ XColor fg, bg; XGCValues gcv; st->dpy = dpy; st->window = window; st->delay = get_integer_resource (st->dpy, "delay", "Integer"); st->subdivision = get_integer_resource(st->dpy, "subdivision", "Integer"); st->border = get_integer_resource(st->dpy, "border", "Integer"); st->ncolors = get_integer_resource(st->dpy, "ncolors", "Integer"); st->twitch = get_boolean_resource(st->dpy, "twitch", "Boolean"); st->dbuf = get_boolean_resource(st->dpy, "doubleBuffer", "Boolean"); # ifdef HAVE_JWXYZ /* Don't second-guess Quartz's double-buffering */ st->dbuf = False; # endif XGetWindowAttributes (st->dpy, st->window, &st->xgwa); fg.pixel = get_pixel_resource (st->dpy, st->xgwa.colormap, "foreground", "Foreground"); bg.pixel = get_pixel_resource (st->dpy, st->xgwa.colormap, "background", "Background"); XQueryColor (st->dpy, st->xgwa.colormap, &fg); XQueryColor (st->dpy, st->xgwa.colormap, &bg); 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; if (st->nsquares < 1) st->nsquares = 1; if (st->ncolors < 1) st->ncolors = 1; gcv.foreground = fg.pixel; gcv.background = bg.pixel; st->gc = XCreateGC (st->dpy, st->window, GCForeground|GCBackground, &gcv); st->colors = (XColor *) calloc (st->ncolors, sizeof(XColor)); st->squares = (square *) calloc (st->nsquares, sizeof(square)); rgb_to_hsv (fg.red, fg.green, fg.blue, &h1, &s1, &v1); rgb_to_hsv (bg.red, bg.green, bg.blue, &h2, &s2, &v2); make_color_ramp (st->xgwa.screen, st->xgwa.visual, st->xgwa.colormap, h1, s1, v1, h2, s2, v2, st->colors, &st->ncolors, /* would this be considered a value-result argument? */ True, True, False); if (st->ncolors < 2) { fprintf (stderr, "%s: insufficient colors!\n", progname); exit (1); } 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) { #ifdef HAVE_DOUBLE_BUFFER_EXTENSION st->b = xdbe_get_backbuffer (st->dpy, st->window, XdbeUndefined); st->backb = st->b; #endif /* HAVE_DOUBLE_BUFFER_EXTENSION */ if (!st->b) { 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; } } else { st->b = st->window; } return st; } static unsigned long popsquares_draw (Display *dpy, Window window, void *closure) { struct state *st = (struct state *) closure; int x, y; for (y = 0; y < st->gh; y++) for (x = 0; x < st->gw; x++) { square *s = (square *) &st->squares[st->gw * y + x]; XSetForeground (st->dpy, st->gc, st->colors[s->color].pixel); XFillRectangle (st->dpy, st->b, st->gc, s->x, s->y, st->border ? s->w - st->border : s->w, st->border ? s->h - st->border : s->h); s->color++; if (s->color == st->ncolors) { if (st->twitch && ((random() % 4) == 0)) randomize_square_colors (st->squares, st->nsquares, st->ncolors); else s->color = random() % st->ncolors; } } #ifdef HAVE_DOUBLE_BUFFER_EXTENSION if (st->backb) { XdbeSwapInfo info[1]; info[0].swap_window = st->window; info[0].swap_action = XdbeUndefined; XdbeSwapBuffers (st->dpy, info, 1); } else #endif /* HAVE_DOUBLE_BUFFER_EXTENSION */ if (st->dbuf) { XCopyArea (st->dpy, st->b, st->window, st->gc, 0, 0, st->xgwa.width, st->xgwa.height, 0, 0); st->b = (st->b == st->ba ? st->bb : st->ba); } return st->delay; } 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); if (st->nsquares < 1) st->nsquares = 1; 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 popsquares_event (Display *dpy, Window window, void *closure, XEvent *event) { return False; } static void popsquares_free (Display *dpy, Window window, void *closure) { struct state *st = (struct state *) closure; free (st); } static const char *popsquares_defaults [] = { ".background: #0000FF", ".foreground: #00008B", "*delay: 25000", "*subdivision: 5", "*border: 1", "*ncolors: 128", "*twitch: False", "*doubleBuffer: False", #ifdef HAVE_DOUBLE_BUFFER_EXTENSION "*useDBE: True", "*useDBEClear: True", #endif /* HAVE_DOUBLE_BUFFER_EXTENSION */ #ifdef HAVE_MOBILE "*ignoreRotation: True", #endif 0 }; static XrmOptionDescRec popsquares_options [] = { { "-fg", ".foreground", XrmoptionSepArg, 0}, { "-bg", ".background", XrmoptionSepArg, 0}, { "-delay", ".delay", XrmoptionSepArg, 0 }, { "-subdivision", ".subdivision", XrmoptionSepArg, 0 }, { "-border", ".border", XrmoptionSepArg, 0}, { "-ncolors", ".ncolors", XrmoptionSepArg, 0 }, { "-twitch", ".twitch", XrmoptionNoArg, "True" }, { "-no-twitch", ".twitch", XrmoptionNoArg, "False" }, { "-db", ".doubleBuffer", XrmoptionNoArg, "True" }, { "-no-db", ".doubleBuffer", XrmoptionNoArg, "False" }, { 0, 0, 0, 0 } }; XSCREENSAVER_MODULE ("PopSquares", popsquares) xscreensaver-5.36/hacks/barcode.c000664 000767 000024 00000142732 12717716230 017013 0ustar00jwzstaff000000 000000 /* barcode, draw some barcodes * by Dan Bornstein, danfuzz@milk.com * Copyright (c) 2003 Dan Bornstein. All rights reserved. * * 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. * * See the included man page for more details. */ #include #include #include "screenhack.h" /* non-user-modifiable immutable definitions */ #define FLOAT double /* random float in the range (0..1) */ #define RAND_FLOAT_01 \ (((FLOAT) ((random() >> 8) & 0xffff)) / ((FLOAT) 0x10000)) #define BARCODE_WIDTH (164) #define BARCODE_HEIGHT (69) #define MAX_MAG (7) /* simple bitmap structure */ typedef struct { int width; int height; int widthBytes; char *buf; } Bitmap; /* the model */ typedef struct { int x; /* x coordinate of the left of the barcode */ int y; /* y coordinate of the left of the barcode */ int mag; /* magnfication factor */ Bitmap *bitmap; /* the bitmap */ char code[128]; /* the barcode string */ unsigned long pixel; /* the color */ } Barcode; struct state { Display *dpy; Window window; /* parameters that are user configurable */ /* delay (usec) between iterations */ int delay; /* width and height of the window */ int windowWidth; int windowHeight; Visual *visual; /* the visual to use */ Colormap cmap; /* the colormap of the window */ GC theGC; /* GC for drawing */ unsigned long fg_pixel, grid_pixel; Bool button_down_p; int grid_alloced_p; char *strings[200]; Barcode *barcodes; /* array of barcodes */ int barcode_count; /* how many barcodes are currently active */ int barcode_max; /* the maximum number of active barcodes */ XImage *theImage; /* ginormo image for drawing */ Bitmap *theBitmap; /* ginormo bitmap for drawing */ enum { BC_SCROLL, BC_GRID, BC_CLOCK12, BC_CLOCK24 } mode; int grid_w; int grid_h; }; /* a bunch of words */ static const char *words[] = { "abdomen", "abeyance", "abhorrence", "abrasion", "abstraction", "acid", "addiction", "alertness", "Algeria", "anxiety", "aorta", "argyle socks", "attrition", "axis of evil", "bamboo", "bangle", "bankruptcy", "baptism", "beer", "bellicosity", "bells", "belly", "bliss", "bogosity", "boobies", "boobs", "booty", "bread", "bubba", "burrito", "California", "capybara", "cardinality", "caribou", "carnage", "children", "chocolate", "CLONE", "cock", "constriction", "contrition", "cop", "corpse", "cowboy", "crabapple", "craziness", "cthulhu", "Death", "decepticon", "deception", "Decker", "decoder", "decoy", "defenestration", "democracy", "dependency", "despair", "desperation", "disease", "disease", "doberman", "DOOM", "dreams", "dreams", "drugs", "easy", "ebony", "election", "eloquence", "emergency", "eureka", "excommunication", "fat", "fatherland", "Faust", "fear", "fever", "filth", "flatulence", "fluff", "fnord", "freedom", "fruit", "fruit", "futility", "gerbils", "GOD", "goggles", "goobers", "gorilla", "halibut", "handmaid", "happiness", "hate", "helplessness", "hemorrhoid", "hermaphrodite", "heroin", "heroine", "hope", "hysteria", "icepick", "identity", "ignorance", "importance", "individuality", "inkling", "insurrection", "intoxicant", "ire", "irritant", "jade", "jaundice", "Joyce", "kidney stone", "kitchenette", "kiwi", "lathe", "lattice", "lawyer", "lemming", "liquidation", "lobbyist", "love", "lozenge", "magazine", "magnesium", "malfunction", "marmot", "marshmallow", "merit", "merkin", "mescaline", "milk", "mischief", "mistrust", "money", "monkey", "monkeybutter", "nationalism", "nature", "neuron", "noise", "nomenclature", "nutria", "OBEY", "ocelot", "offspring", "overseer", "pain", "pajamas", "passenger", "passion", "Passover", "peace", "penance", "persimmon", "petticoat", "pharmacist", "PhD", "pitchfork", "plague", "Poindexter", "politician", "pony", "presidency", "prison", "prophecy", "Prozac", "punishment", "punk rock", "punk", "pussy", "quagmire", "quarantine", "quartz", "rabies", "radish", "rage", "readout", "reality", "rectum", "reject", "rejection", "respect", "revolution", "roadrunner", "rule", "savor", "scab", "scalar", "Scandinavia", "schadenfreude", "security", "sediment", "self worth", "sickness", "silicone", "slack", "slander", "slavery", "sledgehammer", "smegma", "smelly socks", "sorrow", "space program", "stamen", "standardization", "stench", "subculture", "subversion", "suffering", "surrender", "surveillance", "synthesis", "television", "tenant", "tendril", "terror", "terrorism", "terrorist", "the impossible", "the unknown", "toast", "topography", "truism", "turgid", "underbrush", "underling", "unguent", "unusual", "uplink", "urge", "valor", "variance", "vaudeville", "vector", "vegetarian", "venom", "verifiability", "viagra", "vibrator", "victim", "vignette", "villainy", "W.A.S.T.E.", "wagon", "waiver", "warehouse", "waste", "waveform", "whiffle ball", "whorl", "windmill", "words", "worm", "worship", "worship", "Xanax", "Xerxes", "Xhosa", "xylophone", "yellow", "yesterday", "your nose", "Zanzibar", "zeal", "zebra", "zest", "zinc" }; #define WORD_COUNT (sizeof(words) / sizeof(char *)) /* ---------------------------------------------------------------------------- * bitmap manipulation */ /* construct a new bitmap */ static Bitmap *makeBitmap (int width, int height) { Bitmap *result = malloc (sizeof (Bitmap)); result->width = width; result->height = height; result->widthBytes = (width + 7) / 8; result->buf = calloc (1, height * result->widthBytes); return result; } /* clear a bitmap */ static void bitmapClear (Bitmap *b) { memset (b->buf, 0, b->widthBytes * b->height); } #if 0 /* free a bitmap */ static void bitmapFree (Bitmap *b) { free (b->buf); free (b); } #endif /* get the byte value at the given byte-offset coordinates in the given * bitmap */ static int bitmapGetByte (Bitmap *b, int xByte, int y) { if ((xByte < 0) || (xByte >= b->widthBytes) || (y < 0) || (y >= b->height)) { /* out-of-range get returns 0 */ return 0; } return b->buf[b->widthBytes * y + xByte]; } /* get the bit value at the given coordinates in the given bitmap */ static int bitmapGet (Bitmap *b, int x, int y) { int xbyte = x >> 3; int xbit = x & 0x7; int byteValue = bitmapGetByte (b, xbyte, y); return (byteValue & (1 << xbit)) >> xbit; } /* set the bit value at the given coordinates in the given bitmap */ static void bitmapSet (Bitmap *b, int x, int y, int value) { int xbyte = x >> 3; int xbit = x & 0x7; if ((x < 0) || (x >= b->width) || (y < 0) || (y >= b->height)) { /* ignore out-of-range set */ return; } if (value) { b->buf[b->widthBytes * y + xbyte] |= 1 << xbit; } else { b->buf[b->widthBytes * y + xbyte] &= ~(1 << xbit); } } /* copy the given rectangle to the given destination from the given source. */ static void bitmapCopyRect (Bitmap *dest, int dx, int dy, Bitmap *src, int sx, int sy, int width, int height) { int x, y; for (y = 0; y < height; y++) { for (x = 0; x < width; x++) { bitmapSet (dest, x + dx, y + dy, bitmapGet (src, x + sx, y + sy)); } } } /* draw a vertical line in the given bitmap */ static void bitmapVlin (Bitmap *b, int x, int y1, int y2) { while (y1 <= y2) { bitmapSet (b, x, y1, 1); y1++; } } /* scale a bitmap into another bitmap */ static void bitmapScale (Bitmap *dest, Bitmap *src, int mag) { int x, y, x2, y2; for (y = 0; y < BARCODE_HEIGHT; y++) { for (x = 0; x < BARCODE_WIDTH; x++) { int v = bitmapGet (src, x, y); for (x2 = 0; x2 < mag; x2++) { for (y2 = 0; y2 < mag; y2++) { bitmapSet (dest, x * mag + x2, y * mag + y2, v); } } } } } /* ---------------------------------------------------------------------------- * character generation */ static unsigned char font5x8Buf[] = { 0x1e, 0x01, 0x06, 0x01, 0x1e, 0x00, 0x1e, 0x01, 0x06, 0x01, 0x1e, 0x00, 0x1e, 0x01, 0x1e, 0x01, 0x1e, 0x00, 0x01, 0x00, 0x1f, 0x08, 0x04, 0x08, 0x1f, 0x00, 0x11, 0x1f, 0x11, 0x00, 0x1f, 0x01, 0x01, 0x00, 0x1f, 0x04, 0x0a, 0x11, 0x00, 0x01, 0x00, 0x0e, 0x11, 0x11, 0x00, 0x0e, 0x11, 0x11, 0x0e, 0x00, 0x1f, 0x08, 0x04, 0x08, 0x1f, 0x00, 0x44, 0x41, 0x4e, 0x20, 0x42, 0x4f, 0x52, 0x4e, 0x53, 0x54, 0x45, 0x49, 0x4e, 0x21, 0x21, 0x00, 0x66, 0x6e, 0x6f, 0x72, 0x64, 0x00, 0x00, 0x00, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x00, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x00, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x00, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x00, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x00, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x00, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x00, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x00, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x00, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x00, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x00, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x00, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x00, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x00, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x00, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x00, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x00, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x00, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x00, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x00, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x00, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x02, 0x02, 0x02, 0x02, 0x00, 0x02, 0x00, 0x05, 0x05, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x05, 0x0f, 0x05, 0x0f, 0x05, 0x05, 0x00, 0x02, 0x0f, 0x01, 0x0f, 0x08, 0x0f, 0x04, 0x00, 0x0b, 0x0b, 0x08, 0x06, 0x01, 0x0d, 0x0d, 0x00, 0x03, 0x05, 0x02, 0x05, 0x0d, 0x05, 0x0b, 0x00, 0x04, 0x04, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x02, 0x02, 0x02, 0x02, 0x02, 0x04, 0x00, 0x02, 0x04, 0x04, 0x04, 0x04, 0x04, 0x02, 0x00, 0x00, 0x09, 0x06, 0x0f, 0x06, 0x09, 0x00, 0x00, 0x00, 0x02, 0x02, 0x07, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x04, 0x06, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x08, 0x08, 0x04, 0x06, 0x02, 0x01, 0x01, 0x00, 0x0f, 0x09, 0x09, 0x09, 0x09, 0x09, 0x0f, 0x00, 0x06, 0x04, 0x04, 0x04, 0x04, 0x04, 0x0f, 0x00, 0x0f, 0x09, 0x08, 0x0f, 0x01, 0x09, 0x0f, 0x00, 0x0f, 0x08, 0x08, 0x0f, 0x08, 0x08, 0x0f, 0x00, 0x09, 0x09, 0x09, 0x0f, 0x08, 0x08, 0x08, 0x00, 0x0f, 0x09, 0x01, 0x0f, 0x08, 0x09, 0x0f, 0x00, 0x03, 0x01, 0x01, 0x0f, 0x09, 0x09, 0x0f, 0x00, 0x0f, 0x09, 0x09, 0x0c, 0x04, 0x04, 0x04, 0x00, 0x0f, 0x09, 0x09, 0x0f, 0x09, 0x09, 0x0f, 0x00, 0x0f, 0x09, 0x09, 0x0f, 0x08, 0x08, 0x08, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x04, 0x06, 0x00, 0x08, 0x04, 0x02, 0x01, 0x02, 0x04, 0x08, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x01, 0x02, 0x04, 0x08, 0x04, 0x02, 0x01, 0x00, 0x0f, 0x09, 0x08, 0x0e, 0x02, 0x00, 0x02, 0x00, 0x0f, 0x09, 0x0d, 0x0d, 0x0d, 0x01, 0x0f, 0x00, 0x0f, 0x09, 0x09, 0x0f, 0x09, 0x09, 0x09, 0x00, 0x07, 0x09, 0x09, 0x07, 0x09, 0x09, 0x07, 0x00, 0x0f, 0x01, 0x01, 0x01, 0x01, 0x01, 0x0f, 0x00, 0x07, 0x09, 0x09, 0x09, 0x09, 0x09, 0x07, 0x00, 0x0f, 0x01, 0x01, 0x0f, 0x01, 0x01, 0x0f, 0x00, 0x0f, 0x01, 0x01, 0x0f, 0x01, 0x01, 0x01, 0x00, 0x0f, 0x01, 0x01, 0x0d, 0x09, 0x09, 0x0f, 0x00, 0x09, 0x09, 0x09, 0x0f, 0x09, 0x09, 0x09, 0x00, 0x07, 0x02, 0x02, 0x02, 0x02, 0x02, 0x07, 0x00, 0x0e, 0x04, 0x04, 0x04, 0x04, 0x05, 0x07, 0x00, 0x09, 0x09, 0x09, 0x07, 0x09, 0x09, 0x09, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x0f, 0x00, 0x09, 0x0f, 0x0f, 0x0f, 0x09, 0x09, 0x09, 0x00, 0x09, 0x0b, 0x0d, 0x09, 0x09, 0x09, 0x09, 0x00, 0x0f, 0x09, 0x09, 0x09, 0x09, 0x09, 0x0f, 0x00, 0x0f, 0x09, 0x09, 0x0f, 0x01, 0x01, 0x01, 0x00, 0x0f, 0x09, 0x09, 0x09, 0x0b, 0x05, 0x0b, 0x00, 0x07, 0x09, 0x09, 0x07, 0x09, 0x09, 0x09, 0x00, 0x0f, 0x01, 0x01, 0x0f, 0x08, 0x08, 0x0f, 0x00, 0x0f, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x00, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x0f, 0x00, 0x09, 0x09, 0x09, 0x09, 0x09, 0x05, 0x02, 0x00, 0x09, 0x09, 0x09, 0x09, 0x0f, 0x0f, 0x09, 0x00, 0x09, 0x09, 0x05, 0x06, 0x0a, 0x09, 0x09, 0x00, 0x09, 0x09, 0x09, 0x0f, 0x08, 0x08, 0x0f, 0x00, 0x0f, 0x08, 0x08, 0x06, 0x01, 0x01, 0x0f, 0x00, 0x0e, 0x02, 0x02, 0x02, 0x02, 0x02, 0x0e, 0x00, 0x01, 0x01, 0x02, 0x06, 0x04, 0x08, 0x08, 0x00, 0x07, 0x04, 0x04, 0x04, 0x04, 0x04, 0x07, 0x00, 0x02, 0x05, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x02, 0x02, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x08, 0x0f, 0x09, 0x0f, 0x00, 0x01, 0x01, 0x0f, 0x09, 0x09, 0x09, 0x0f, 0x00, 0x00, 0x00, 0x0f, 0x01, 0x01, 0x01, 0x0f, 0x00, 0x08, 0x08, 0x0f, 0x09, 0x09, 0x09, 0x0f, 0x00, 0x00, 0x00, 0x0f, 0x09, 0x0f, 0x01, 0x0f, 0x00, 0x0e, 0x02, 0x0f, 0x02, 0x02, 0x02, 0x02, 0x00, 0x00, 0x00, 0x0f, 0x09, 0x09, 0x0f, 0x08, 0x0c, 0x01, 0x01, 0x0f, 0x09, 0x09, 0x09, 0x09, 0x00, 0x02, 0x00, 0x03, 0x02, 0x02, 0x02, 0x07, 0x00, 0x04, 0x00, 0x04, 0x04, 0x04, 0x04, 0x05, 0x07, 0x01, 0x01, 0x09, 0x05, 0x03, 0x05, 0x09, 0x00, 0x03, 0x02, 0x02, 0x02, 0x02, 0x02, 0x07, 0x00, 0x00, 0x00, 0x09, 0x0f, 0x0f, 0x09, 0x09, 0x00, 0x00, 0x00, 0x0f, 0x09, 0x09, 0x09, 0x09, 0x00, 0x00, 0x00, 0x0f, 0x09, 0x09, 0x09, 0x0f, 0x00, 0x00, 0x00, 0x0f, 0x09, 0x09, 0x0f, 0x01, 0x01, 0x00, 0x00, 0x0f, 0x09, 0x09, 0x0f, 0x08, 0x08, 0x00, 0x00, 0x0f, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x0f, 0x01, 0x0f, 0x08, 0x0f, 0x00, 0x00, 0x02, 0x0f, 0x02, 0x02, 0x02, 0x0e, 0x00, 0x00, 0x00, 0x09, 0x09, 0x09, 0x09, 0x0f, 0x00, 0x00, 0x00, 0x09, 0x09, 0x09, 0x05, 0x02, 0x00, 0x00, 0x00, 0x09, 0x09, 0x0f, 0x0f, 0x09, 0x00, 0x00, 0x00, 0x09, 0x09, 0x06, 0x09, 0x09, 0x00, 0x00, 0x00, 0x09, 0x09, 0x09, 0x0f, 0x08, 0x0c, 0x00, 0x00, 0x0f, 0x08, 0x06, 0x01, 0x0f, 0x00, 0x08, 0x04, 0x04, 0x02, 0x04, 0x04, 0x08, 0x00, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x00, 0x01, 0x02, 0x02, 0x04, 0x02, 0x02, 0x01, 0x00, 0x00, 0x0a, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x00 }; static Bitmap font5x8 = { 8, 1024, 1, (char *) font5x8Buf }; /* draw the given 5x8 character at the given coordinates */ static void bitmapDrawChar5x8 (Bitmap *b, int x, int y, char c) { bitmapCopyRect (b, x, y, &font5x8, 0, c * 8, 5, 8); } /* draw a string of 5x8 characters at the given coordinates */ static void bitmapDrawString5x8 (Bitmap *b, int x, int y, char *str) { int origx = x; while (*str != '\0') { char c = *str; if (c == '\n') { x = origx; y += 8; } else { if (c < ' ') { c = ' '; } bitmapDrawChar5x8 (b, x, y, c); x += 5; } str++; } } /* ---------------------------------------------------------------------------- * upc/ean symbologies */ /* A quick lesson in UPC and EAN barcodes: * * Each digit consists of 2 bars and 2 spaces, taking a total width of 7 * times the width of the thinnest possible bar or space. There are three * different possible representations for each digit, used depending on * what side of a two-sided barcode the digit is used on, and to encode * checksum or other information in some cases. The three forms are * related. Taking as the "base" form the pattern as seen on the right-hand * side of a UPC-A barcode, the other forms are the inverse of the base * (that is, bar becomes space and vice versa) and the mirror image of the * base. Still confused? Here's a complete table, where 0 means space and 1 * means bar: * * Left-A Left-B Right * ------- ------- ------- * 0 0001101 0100111 1110010 * 1 0011001 0110011 1100110 * 2 0010011 0011011 1101100 * 3 0111101 0100001 1000010 * 4 0100011 0011101 1011100 * 5 0110001 0111001 1001110 * 6 0101111 0000101 1010000 * 7 0111011 0010001 1000100 * 8 0110111 0001001 1001000 * 9 0001011 0010111 1110100 * * A UPC-A barcode consists of 6 patterns from Left-A on the left-hand side, * 6 patterns from Right on the right-hand side, a guard pattern of 01010 * in the middle, and a guard pattern of 101 on each end. The 12th digit * checksum is calculated as follows: Take the 1st, 3rd, ... 11th digits, * sum them and multiplying by 3, and add that to the sum of the other digits. * Subtract the final digit from 10, and that is the checksum digit. (If * the last digit of the sum is 0, then the check digit is 0.) * * An EAN-13 barcode is just like a UPC-A barcode, except that the characters * on the left-hand side have a pattern of Left-A and Left-B that encodes * an extra first digit. Note that an EAN-13 barcode with the first digit * of 0 is exactly the same as the UPC-A barcode of the rightmost 12 digits. * The patterns to encode the first digit are as follows: * * Left-Hand * Digit Position * 1 2 3 4 5 6 * - - - - - - * 0 a a a a a a * 1 a a b a b b * 2 a a b b a b * 3 a a b b b a * 4 a b a a b b * 5 a b b a a b * 6 a b b b a a * 7 a b a b a b * 8 a b a b b a * 9 a b b a b a * * The checksum for EAN-13 is just like UPC-A, except the 2nd, 4th, ... 12th * digits are multiplied by 3 instead of the other way around. * * An EAN-8 barcode is just like a UPC-A barcode, except there are only 4 * digits in each half. Unlike EAN-13, there's no nonsense about different * left-hand side patterns, either. * * A UPC-E barcode contains 6 explicit characters between a guard of 101 * on the left and 010101 on the right. The explicit characters are the * middle six characters of the code. The first and last characters are * encoded in the parity pattern of the six characters. There are two * sets of parity patterns, one to use if the first digit of the number * is 0, and another if it is 1. (UPC-E barcodes may only start with a 0 * or 1.) The patterns are as follows: * * First digit 0 First digit 1 * Explicit Digit Explicit Digit * Position Position * 1 2 3 4 5 6 1 2 3 4 5 6 * - - - - - - - - - - - - * 0 b b b a a a a a a b b b * 1 b b a b a a a a b a b b * 2 b b a a b a a a b b a b * 3 b b a a a b a a b b b a * 4 b a b b a a a b a a b b * 5 b a a b b a a b b a a b * 6 b a a a b b a b b b a a * 7 b a b a b a a b a b a b * 8 b a b a a b a b a b b a * 9 b a a b a b a b b a b a * * (Note that the two sets are the complements of each other. Also note * that the first digit 1 patterns are mostly the same as the EAN-13 * first digit patterns.) The UPC-E check digit (the final digit encoded in * the parity pattern) is the same as the UPC-A check digit for the * expanded form of the UPC-E number. The expanstion is as follows, based * on the last explicit digit (the second to last digit) in the encoded * number: * * Corresponding * UPC-E form UPC-A form * ---------- ------------- * XABCDE0Y XAB00000CDEY * XABCDE1Y XAB10000CDEY * XABCDE2Y XAB20000CDEY * XABCDE3Y XABC00000DEY * XABCDE4Y XABCD00000EY * XABCDE5Y XABCDE00005Y * XABCDE6Y XABCDE00006Y * XABCDE7Y XABCDE00007Y * XABCDE8Y XABCDE00008Y * XABCDE9Y XABCDE00009Y * * All UPC/EAN barcodes may have an additional 2- or 5-digit supplemental * code just to the right of the main barcode. The supplement starts about * one digit-length (that is about 7 times the width of the thinnest bar) * to the right of the main code, beginning with the guard pattern 1011. * After that comes each digit, with a guard pattern of 01 between each, * but not at the end. The digits are encoded using the left A and B * characters to encode a parity pattern. * * For 2-digit supplements, the parity pattern is determined by the * lower two bits of the numeric value of the code (e.g., 42 would use * pattern 2): * * Lower 2 bits Parity Pattern * ------------ -------------- * 0 (bin 00) a a * 1 (bin 01) a b * 2 (bin 10) b a * 3 (bin 11) b b * * For 5-digit supplements, the parity pattern is calculated in a similar * manner to check digit calculation: The first, third, and fifth digits * are summed and multiplied by 3; the second and fourth digits are summed * and multiplied by nine; the parity digit is the sum of those two numbers, * modulo 10. The parity pattern is then the last five patterns from the * UPC-E final digit 0 table for the corresponding digit. */ /* enum to indicate which pattern set to use */ typedef enum { UPC_LEFT_A, UPC_LEFT_B, UPC_RIGHT } UpcSet; /* the Left A patterns */ static unsigned int upcLeftA[] = { 0x0d, 0x19, 0x13, 0x3d, 0x23, 0x31, 0x2f, 0x3b, 0x37, 0x0b }; /* the Left B patterns */ static unsigned int upcLeftB[] = { 0x27, 0x33, 0x1b, 0x21, 0x1d, 0x39, 0x05, 0x11, 0x09, 0x17 }; /* the Right patterns */ static unsigned int upcRight[] = { 0x72, 0x66, 0x6c, 0x42, 0x5c, 0x4e, 0x50, 0x44, 0x48, 0x74 }; /* the EAN-13 first-digit patterns */ static unsigned int ean13FirstDigit[] = { 0x00, 0x0b, 0x0d, 0x0e, 0x13, 0x19, 0x1c, 0x15, 0x16, 0x1a }; /* the UPC-E last-digit patterns for first digit 0 (complement for * digit 1); also used for 5-digit supplemental check patterns */ static unsigned int upcELastDigit[] = { 0x38, 0x34, 0x32, 0x31, 0x2c, 0x26, 0x23, 0x2a, 0x29, 0x25 }; /* turn a character into an int representing its digit value; return * 0 for things not in the range '0'-'9' */ static int charToDigit (char c) { if ((c >= '0') && (c <= '9')) { return c - '0'; } else { return 0; } } /* draw the given digit character at the given coordinates; a '0' is * used in place of any non-digit character */ static void drawDigitChar (struct state *st, Bitmap *b, int x, int y, char c) { if (st->mode != BC_CLOCK24 && st->mode != BC_CLOCK12) if ((c < '0') || (c > '9')) c = '0'; bitmapDrawChar5x8 (b, x, y, c); } /* draw a upc/ean digit at the given coordinates */ static void drawUpcEanDigit (Bitmap *upcBitmap, int x, int y1, int y2, char n, UpcSet set) { unsigned int bits; int i; n = charToDigit (n); switch (set) { case UPC_LEFT_A: bits = upcLeftA[(int) n]; break; case UPC_LEFT_B: bits = upcLeftB[(int) n]; break; default /* case UPC_RIGHT */: bits = upcRight[(int) n]; break; } for (i = 6; i >=0; i--) { if (bits & (1 << i)) { bitmapVlin (upcBitmap, x, y1, y2); } x++; } } /* report the width of the given supplemental code or 0 if it is a bad * supplement form */ static int upcEanSupplementWidth (char *digits) { switch (strlen (digits)) { case 2: return 28; /* 8 + 4 + 2*7 + 1*2 */ case 5: return 55; /* 8 + 4 + 5*7 + 4*2 */ default: return 0; } } /* draw the given supplemental barcode, including the textual digits */ static void drawUpcEanSupplementalBars (struct state *st, Bitmap *upcBitmap, char *digits, int x, int y, int y2, int textAbove) { int len = strlen (digits); int i; int parity; int textY; int textX; if (textAbove) { textY = y; y += 8; } else { y2 -= 8; textY = y2 + 2; } x += 8; /* skip the space between the main and supplemental */ switch (len) { case 2: { textX = x + 5; parity = (charToDigit (digits[0]) * 10 + charToDigit (digits[1])) & 0x3; break; } case 5: { textX = x + 10; parity = ((charToDigit (digits[0]) + charToDigit (digits[2]) + charToDigit (digits[4])) * 3 + (charToDigit (digits[1]) + charToDigit (digits[3])) * 9) % 10; parity = upcELastDigit[parity]; break; } default: { fprintf (stderr, "%s: bad supplement (%d digits)\n", progname, len); exit(1); break; } } /* header */ bitmapVlin (upcBitmap, x, y, y2); bitmapVlin (upcBitmap, x + 2, y, y2); bitmapVlin (upcBitmap, x + 3, y, y2); for (i = 0; i < len; i++) { UpcSet lset = (parity & (1 << (len - 1 - i))) ? UPC_LEFT_B : UPC_LEFT_A; int baseX = x + 2 + i * 9; /* separator / end of header */ if (i == 0) { bitmapVlin (upcBitmap, baseX, y, y2); } bitmapVlin (upcBitmap, baseX + 1, y, y2); drawUpcEanDigit (upcBitmap, baseX + 2, y, y2, digits[i], lset); drawDigitChar (st, upcBitmap, textX + i*6, textY, digits[i]); } } /* draw the actual barcode part of a UPC-A barcode */ static void drawUpcABars (Bitmap *upcBitmap, char *digits, int x, int y, int barY2, int guardY2) { int i; /* header */ bitmapVlin (upcBitmap, x, y, guardY2); bitmapVlin (upcBitmap, x + 2, y, guardY2); /* center marker */ bitmapVlin (upcBitmap, x + 46, y, guardY2); bitmapVlin (upcBitmap, x + 48, y, guardY2); /* trailer */ bitmapVlin (upcBitmap, x + 92, y, guardY2); bitmapVlin (upcBitmap, x + 94, y, guardY2); for (i = 0; i < 6; i++) { drawUpcEanDigit (upcBitmap, x + 3 + i*7, y, (i == 0) ? guardY2 : barY2, digits[i], UPC_LEFT_A); drawUpcEanDigit (upcBitmap, x + 50 + i*7, y, (i == 5) ? guardY2 : barY2, digits[i+6], UPC_RIGHT); } } /* make and return a full-height UPC-A barcode */ static int makeUpcAFull (struct state *st, Bitmap *dest, char *digits, int y) { int baseWidth = 108; int baseHeight = 60; int height = baseHeight + y; int i; bitmapClear (dest); drawUpcABars (dest, digits, 6, y, height - 10, height - 4); drawDigitChar (st, dest, 0, height - 14, digits[0]); for (i = 0; i < 5; i++) { drawDigitChar (st, dest, 18 + i*7, height - 7, digits[i+1]); drawDigitChar (st, dest, 57 + i*7, height - 7, digits[i+6]); } drawDigitChar (st, dest, 103, height - 14, digits[11]); return baseWidth; } /* make and return a UPC-A barcode */ static int makeUpcA (struct state *st, Bitmap *dest, char *digits, int y) { int i; unsigned int mul = 3; unsigned int sum = 0; for (i = 0; i < 11; i++) { sum += charToDigit (digits[i]) * mul; mul ^= 2; } if (digits[11] == '?') { digits[11] = ((10 - (sum % 10)) % 10) + '0'; } return makeUpcAFull (st, dest, digits, y); } /* draw the actual barcode part of a UPC-E barcode */ static void drawUpcEBars (struct state *st, Bitmap *upcBitmap, char *digits, int x, int y, int barY2, int guardY2) { int i; int parityPattern = upcELastDigit[charToDigit(digits[7])]; int clockp = (st->mode == BC_CLOCK12 || st->mode == BC_CLOCK24); if (digits[0] == '1') { parityPattern = ~parityPattern; } /* header */ bitmapVlin (upcBitmap, x, y, guardY2); bitmapVlin (upcBitmap, x + 2, y, guardY2); /* trailer */ bitmapVlin (upcBitmap, x + 46 + (clockp?8:0), y, guardY2); bitmapVlin (upcBitmap, x + 48 + (clockp?8:0), y, guardY2); bitmapVlin (upcBitmap, x + 50 + (clockp?8:0), y, guardY2); /* clock kludge -- this draws an extra set of dividers after digits 2 and 4. This makes this *not* be a valid bar code, but, it looks pretty for the clock dpy. */ if (clockp) { bitmapVlin (upcBitmap, x + 18, y, guardY2); bitmapVlin (upcBitmap, x + 18 + 2, y, guardY2); bitmapVlin (upcBitmap, x + 36, y, guardY2); bitmapVlin (upcBitmap, x + 36 + 2, y, guardY2); } for (i = 0; i < 6; i++) { UpcSet lset = (parityPattern & (1 << (5 - i))) ? UPC_LEFT_B : UPC_LEFT_A; int off = (clockp ? (i < 2 ? 0 : i < 4 ? 4 : /* extra spacing for clock bars */ 8) : 0); drawUpcEanDigit (upcBitmap, x + 3 + i*7 + off, y, barY2, digits[i + 1], lset); } } /* make and return a full-height UPC-E barcode */ static int makeUpcEFull (struct state *st, Bitmap *dest, char *digits, int y) { int baseWidth = 64; int baseHeight = 60; int height = baseHeight + y; int i; bitmapClear (dest); drawUpcEBars (st, dest, digits, 6, y, height - 10, height - 4); drawDigitChar (st, dest, 0, height - 14, digits[0]); for (i = 0; i < 6; i++) { drawDigitChar (st, dest, 11 + i*7, height - 7, digits[i+1]); } drawDigitChar (st, dest, 59, height - 14, digits[7]); return baseWidth; } /* expand 8 UPC-E digits into a UPC-A number, storing into the given result * array, or just store '\0' into the first element, if the form factor * is incorrect; this will also calculate the check digit, if it is * specified as '?' */ static void expandToUpcADigits (char *compressed, char *expanded) { int i; if ((compressed[0] != '0') && (compressed[0] != '1')) { return; } expanded[0] = compressed[0]; expanded[6] = '0'; expanded[7] = '0'; expanded[11] = compressed[7]; switch (compressed[6]) { case '0': case '1': case '2': { expanded[1] = compressed[1]; expanded[2] = compressed[2]; expanded[3] = compressed[6]; expanded[4] = '0'; expanded[5] = '0'; expanded[8] = compressed[3]; expanded[9] = compressed[4]; expanded[10] = compressed[5]; break; } case '3': { expanded[1] = compressed[1]; expanded[2] = compressed[2]; expanded[3] = compressed[3]; expanded[4] = '0'; expanded[5] = '0'; expanded[8] = '0'; expanded[9] = compressed[4]; expanded[10] = compressed[5]; break; } case '4': { expanded[1] = compressed[1]; expanded[2] = compressed[2]; expanded[3] = compressed[3]; expanded[4] = compressed[4]; expanded[5] = '0'; expanded[8] = '0'; expanded[9] = '0'; expanded[10] = compressed[5]; break; } default: { expanded[1] = compressed[1]; expanded[2] = compressed[2]; expanded[3] = compressed[3]; expanded[4] = compressed[4]; expanded[5] = compressed[5]; expanded[8] = '0'; expanded[9] = '0'; expanded[10] = compressed[6]; break; } } if (expanded[11] == '?') { unsigned int mul = 3; unsigned int sum = 0; for (i = 0; i < 11; i++) { sum += charToDigit (expanded[i]) * mul; mul ^= 2; } expanded[11] = ((10 - (sum % 10)) % 10) + '0'; } } /* make and return a UPC-E barcode */ static int makeUpcE (struct state *st, Bitmap *dest, char *digits, int y) { char expandedDigits[13]; char compressedDigits[9]; expandedDigits[0] = '\0'; compressedDigits[0] = '0'; strcpy (compressedDigits + 1, digits); expandToUpcADigits (compressedDigits, expandedDigits); if (expandedDigits[0] == '\0') { return 0; } compressedDigits[7] = expandedDigits[11]; return makeUpcEFull (st, dest, compressedDigits, y); } /* draw the actual barcode part of a EAN-13 barcode */ static void drawEan13Bars (Bitmap *upcBitmap, char *digits, int x, int y, int barY2, int guardY2) { int i; int leftPattern = ean13FirstDigit[charToDigit (digits[0])]; /* header */ bitmapVlin (upcBitmap, x, y, guardY2); bitmapVlin (upcBitmap, x + 2, y, guardY2); /* center marker */ bitmapVlin (upcBitmap, x + 46, y, guardY2); bitmapVlin (upcBitmap, x + 48, y, guardY2); /* trailer */ bitmapVlin (upcBitmap, x + 92, y, guardY2); bitmapVlin (upcBitmap, x + 94, y, guardY2); for (i = 0; i < 6; i++) { UpcSet lset = (leftPattern & (1 << (5 - i))) ? UPC_LEFT_B : UPC_LEFT_A; drawUpcEanDigit (upcBitmap, x + 3 + i*7, y, barY2, digits[i+1], lset); drawUpcEanDigit (upcBitmap, x + 50 + i*7, y, barY2, digits[i+7], UPC_RIGHT); } } /* make and return a full-height EAN-13 barcode */ static int makeEan13Full (struct state *st, Bitmap *dest, char *digits, int y) { int baseWidth = 102; int baseHeight = 60; int height = baseHeight + y; int i; bitmapClear (dest); drawEan13Bars (dest, digits, 6, y, height - 10, height - 4); drawDigitChar (st, dest, 0, height - 7, digits[0]); for (i = 0; i < 6; i++) { drawDigitChar (st, dest, 11 + i*7, height - 7, digits[i+1]); drawDigitChar (st, dest, 57 + i*7, height - 7, digits[i+7]); } return baseWidth; } /* make and return an EAN-13 barcode */ static int makeEan13 (struct state *st, Bitmap *dest, char *digits, int y) { int i; unsigned int mul = 1; unsigned int sum = 0; for (i = 0; i < 12; i++) { sum += charToDigit (digits[i]) * mul; mul ^= 2; } if (digits[12] == '?') { digits[12] = ((10 - (sum % 10)) % 10) + '0'; } return makeEan13Full (st, dest, digits, y); } /* draw the actual barcode part of an EAN-8 barcode */ static void drawEan8Bars (Bitmap *upcBitmap, char *digits, int x, int y, int barY2, int guardY2) { int i; /* header */ bitmapVlin (upcBitmap, x, y, guardY2); bitmapVlin (upcBitmap, x + 2, y, guardY2); /* center marker */ bitmapVlin (upcBitmap, x + 32, y, guardY2); bitmapVlin (upcBitmap, x + 34, y, guardY2); /* trailer */ bitmapVlin (upcBitmap, x + 64, y, guardY2); bitmapVlin (upcBitmap, x + 66, y, guardY2); for (i = 0; i < 4; i++) { drawUpcEanDigit (upcBitmap, x + 3 + i*7, y, barY2, digits[i], UPC_LEFT_A); drawUpcEanDigit (upcBitmap, x + 36 + i*7, y, barY2, digits[i+4], UPC_RIGHT); } } /* make and return a full-height EAN-8 barcode */ static int makeEan8Full (struct state *st, Bitmap *dest, char *digits, int y) { int baseWidth = 68; int baseHeight = 60; int height = baseHeight + y; int i; bitmapClear (dest); drawEan8Bars (dest, digits, 0, y, height - 10, height - 4); for (i = 0; i < 4; i++) { drawDigitChar (st, dest, 5 + i*7, height - 7, digits[i]); drawDigitChar (st, dest, 37 + i*7, height - 7, digits[i+4]); } return baseWidth; } /* make and return an EAN-8 barcode */ static int makeEan8 (struct state *st, Bitmap *dest, char *digits, int y) { int i; unsigned int mul = 3; unsigned int sum = 0; for (i = 0; i < 7; i++) { sum += charToDigit (digits[i]) * mul; mul ^= 2; } if (digits[7] == '?') { digits[7] = ((10 - (sum % 10)) % 10) + '0'; } return makeEan8Full (st, dest, digits, y); } /* Dispatch to the right form factor UPC/EAN barcode generator */ static void processUpcEan (struct state *st, char *str, Bitmap *dest) { char digits[16]; int digitCount = 0; char supDigits[8]; int supDigitCount = 0; char *instr = str; char *banner = NULL; int supplement = 0; int vstart = 9; int width = 0; while ((digitCount < 15) && (supDigitCount < 7)) { char c = *instr; if (((c >= '0') && (c <= '9')) || (c == '?')) { if (supplement) { supDigits[supDigitCount] = *instr; supDigitCount++; } else { digits[digitCount] = *instr; digitCount++; } } else if (c == ',') { supplement = 1; } else if (c == ':') { banner = instr + 1; break; } else if (c == '\0') { break; } instr++; } digits[digitCount] = '\0'; supDigits[supDigitCount] = '\0'; if (supDigitCount == 0) { supplement = 0; } else if ((supDigitCount == 2) || (supDigitCount == 5)) { supplement = upcEanSupplementWidth (supDigits); } else { fprintf (stderr, "%s: invalid supplement (must be 2 or 5 digits)\n", progname); exit (1); } if (banner == NULL) { banner = "barcode"; } switch (digitCount) { case 7: { width = makeUpcE (st, dest, digits, vstart); break; } case 8: { width = makeEan8 (st, dest, digits, vstart); break; } case 12: { width = makeUpcA (st, dest, digits, vstart); break; } case 13: { width = makeEan13 (st, dest, digits, vstart); break; } default: { fprintf (stderr, "%s: bad barcode (%d digits)\n", progname, digitCount); exit(1); } } if (supplement) { drawUpcEanSupplementalBars (st, dest, supDigits, width, vstart + 1, dest->height - 4, 1); } if (banner != NULL) { bitmapDrawString5x8 (dest, (width + supplement - ((int) strlen (banner) * 5)) / 2, 0, banner); } } /* ---------------------------------------------------------------------------- * the screenhack */ /* * overall setup stuff */ /* set up the system */ static void setup (struct state *st) { XWindowAttributes xgwa; XGCValues gcv; XGetWindowAttributes (st->dpy, st->window, &xgwa); st->visual = xgwa.visual; st->cmap = xgwa.colormap; st->windowWidth = xgwa.width; st->windowHeight = xgwa.height; gcv.background = get_pixel_resource (st->dpy, xgwa.colormap, "background", "Background"); gcv.foreground = get_pixel_resource (st->dpy, xgwa.colormap, "foreground", "Foreground"); st->fg_pixel = gcv.foreground; st->theGC = XCreateGC (st->dpy, st->window, GCForeground|GCBackground, &gcv); st->theBitmap = makeBitmap(BARCODE_WIDTH * MAX_MAG, BARCODE_HEIGHT * MAX_MAG); st->theImage = XCreateImage(st->dpy, st->visual, 1, XYBitmap, 0, st->theBitmap->buf, st->theBitmap->width, st->theBitmap->height, 8, st->theBitmap->widthBytes); st->theImage->bitmap_bit_order = LSBFirst; st->theImage->byte_order = LSBFirst; } /* * the simulation */ /* set up the model */ static void setupModel (struct state *st) { int i; st->barcode_max = 20; st->barcode_count = 0; st->barcodes = malloc (sizeof (Barcode) * st->barcode_max); for (i = 0; i < st->barcode_max; i++) { st->barcodes[i].bitmap = makeBitmap(BARCODE_WIDTH * MAX_MAG, BARCODE_HEIGHT * MAX_MAG); } } /* make a new barcode string */ static void makeBarcodeString (struct state *st, char *str) { int dig, i; switch ((int) (RAND_FLOAT_01 * 4)) { case 0: dig = 6; break; case 1: dig = 7; break; case 2: dig = 11; break; default: dig = 12; break; } for (i = 0; i < dig; i++) { str[i] = RAND_FLOAT_01 * 10 + '0'; } str[i] = '?'; i++; switch ((int) (RAND_FLOAT_01 * 3)) { case 0: dig = 0; break; case 1: dig = 2; break; default: dig = 5; break; } if (dig != 0) { str[i] = ','; i++; while (dig > 0) { str[i] = RAND_FLOAT_01 * 10 + '0'; i++; dig--; } } str[i] = ':'; i++; strcpy(&str[i], words[(int) (RAND_FLOAT_01 * WORD_COUNT)]); } /* update the model for one iteration */ static void scrollModel (struct state *st) { int i; for (i = 0; i < st->barcode_count; i++) { Barcode *b = &st->barcodes[i]; b->x--; if ((b->x + BARCODE_WIDTH * b->mag) < 0) { /* fell off the edge */ if (i != (st->barcode_count - 1)) { Bitmap *oldb = b->bitmap; memmove (b, b + 1, (st->barcode_count - i - 1) * sizeof (Barcode)); st->barcodes[st->barcode_count - 1].bitmap = oldb; XFreeColors (st->dpy, st->cmap, &b->pixel, 1, 0); } i--; st->barcode_count--; } } while (st->barcode_count < st->barcode_max) { Barcode *barcode = &st->barcodes[st->barcode_count]; barcode->x = (st->barcode_count == 0) ? 0 : (st->barcodes[st->barcode_count - 1].x + st->barcodes[st->barcode_count - 1].mag * BARCODE_WIDTH); barcode->x += RAND_FLOAT_01 * 100; barcode->mag = RAND_FLOAT_01 * MAX_MAG; barcode->y = RAND_FLOAT_01 * (st->windowHeight - BARCODE_HEIGHT * barcode->mag); if (barcode->y < 0) { barcode->y = 0; } makeBarcodeString(st, barcode->code); processUpcEan (st, barcode->code, st->theBitmap); bitmapScale (barcode->bitmap, st->theBitmap, barcode->mag); { XColor c; int ii, ok = 0; for (ii = 0; ii < 100; ii++) { hsv_to_rgb (random() % 360, 1.0, 1.0, &c.red, &c.green, &c.blue); ok = XAllocColor (st->dpy, st->cmap, &c); if (ok) break; } if (!ok) { c.red = c.green = c.blue = 0xFFFF; if (!XAllocColor (st->dpy, st->cmap, &c)) abort(); } barcode->pixel = c.pixel; } st->barcode_count++; } } /* update the model for one iteration */ static void updateGrid (struct state *st) { int i, x, y; if (st->grid_w == 0 || st->grid_h == 0 || (! (random() % 400))) { XClearWindow (st->dpy, st->window); st->grid_w = 1 + (random() % 3); st->grid_h = 1 + (random() % 4); } if (!st->grid_alloced_p || (! (random() % 100))) { XColor c; hsv_to_rgb (random() % 360, 1.0, 1.0, &c.red, &c.green, &c.blue); if (st->grid_alloced_p) XFreeColors (st->dpy, st->cmap, &st->grid_pixel, 1, 0); XAllocColor (st->dpy, st->cmap, &c); st->grid_pixel = c.pixel; st->grid_alloced_p = 1; } st->barcode_count = st->grid_w * st->grid_h; if (st->barcode_count > st->barcode_max) abort(); for (i = 0; i < st->barcode_max; i++) { Barcode *b = &st->barcodes[i]; b->x = b->y = 999999; } i = 0; for (y = 0; y < st->grid_h; y++) for (x = 0; x < st->grid_w; x++, i++) { Barcode *b = &st->barcodes[i]; int digits = 12; int cell_w = (st->windowWidth / st->grid_w); int cell_h = (st->windowHeight / st->grid_h); int mag_x = cell_w / BARCODE_WIDTH; int mag_y = cell_h / BARCODE_HEIGHT; int BW = 108 /*BARCODE_WIDTH*/; int BH = BARCODE_HEIGHT; b->mag = (mag_x < mag_y ? mag_x : mag_y); b->x = (x * cell_w) + ((cell_w - b->mag * BW) / 2); b->y = (y * cell_h) + ((cell_h - b->mag * BH) / 2); b->pixel = st->grid_pixel; if (!st->strings[i]) { int j; char *s = malloc (digits + 10); st->strings[i] = s; for (j = 0; j < digits; j++) s[j] = (random() % 10) + '0'; s[j++] = '?'; s[j++] = ':'; s[j] = 0; } /* change one digit in this barcode */ st->strings[i][random() % digits] = (random() % 10) + '0'; strcpy (b->code, st->strings[i]); processUpcEan (st, b->code, b->bitmap); } } /* update the model for one iteration. This one draws a clock. By jwz. */ static void updateClock (struct state *st) { Barcode *b = &st->barcodes[0]; int BW = 76 /* BARCODE_WIDTH */; int BH = BARCODE_HEIGHT; int mag_x, mag_y; int i; time_t now = time ((time_t *) 0); struct tm *tm = localtime (&now); XWindowAttributes xgwa; int ow = st->windowWidth; int oh = st->windowHeight; XGetWindowAttributes (st->dpy, st->window, &xgwa); st->windowWidth = xgwa.width; st->windowHeight = xgwa.height; mag_x = st->windowWidth / BW; mag_y = st->windowHeight / BH; st->barcode_count = 1; b->mag = (mag_x < mag_y ? mag_x : mag_y); if (b->mag > MAX_MAG) b->mag = MAX_MAG; if (b->mag < 1) b->mag = 1; b->x = (st->windowWidth - (b->mag * BW )) / 2; b->y = (st->windowHeight - (b->mag * (BH + 9))) / 2; b->pixel = st->fg_pixel; if (!st->button_down_p) sprintf (b->code, "0%02d%02d%02d?:", (st->mode == BC_CLOCK24 ? tm->tm_hour : (tm->tm_hour > 12 ? tm->tm_hour - 12 : (tm->tm_hour == 0 ? 12 : tm->tm_hour))), tm->tm_min, tm->tm_sec); else sprintf (b->code, "0%02d%02d%02d?:", tm->tm_year % 100, tm->tm_mon+1, tm->tm_mday); { int vstart = 9; int hh = BH + vstart; char expandedDigits[13]; expandedDigits[0] = '\0'; expandToUpcADigits (b->code, expandedDigits); if (expandedDigits[0] != '\0') b->code[7] = expandedDigits[11]; bitmapClear (st->theBitmap); drawUpcEBars (st, st->theBitmap, b->code, 6, 9, 59, 65); for (i = 0; i < 6; i++) { int off = (i < 2 ? 0 : i < 4 ? 4 : 8); drawDigitChar (st, st->theBitmap, 11 + i*7 + off, hh - 16, b->code[i+1]); } if (!st->button_down_p) { #if 0 char *days[] = { "SUN", "MON", "TUE", "WED", "THU", "FRI", "SAT" }; char *s = days[tm->tm_wday]; bitmapDrawString5x8 (st->theBitmap, (BW - strlen (s)*5) / 2, 0, s); #endif drawDigitChar (st, st->theBitmap, 0, hh - 23, (tm->tm_hour < 12 ? 'A' : 'P')); drawDigitChar (st, st->theBitmap, 68, hh - 23, 'M'); } else { char s[20]; sprintf (s, "%03d", tm->tm_yday); bitmapDrawString5x8 (st->theBitmap, (BW - strlen (s)*5) / 2, 0, s); } } bitmapScale (b->bitmap, st->theBitmap, b->mag); if (ow != st->windowWidth || oh != st->windowHeight) XClearWindow (st->dpy, st->window); } /* render and dpy the current model */ static void renderFrame (struct state *st) { int i; for (i = 0; i < st->barcode_count; i++) { Barcode *barcode = &st->barcodes[i]; if (barcode->x > st->windowWidth) { break; } /* bitmapScale (st->theBitmap, barcode->bitmap, barcode->mag);*/ st->theImage->data = barcode->bitmap->buf; XSetForeground (st->dpy, st->theGC, barcode->pixel); XPutImage (st->dpy, st->window, st->theGC, st->theImage, 0, 0, barcode->x, barcode->y, BARCODE_WIDTH * barcode->mag, BARCODE_HEIGHT * barcode->mag); } } /* do one iteration */ static unsigned long barcode_draw (Display *dpy, Window win, void *closure) { struct state *st = (struct state *) closure; if (st->mode == BC_SCROLL) scrollModel (st); else if (st->mode == BC_GRID) updateGrid (st); else if (st->mode == BC_CLOCK12 || st->mode == BC_CLOCK24) updateClock (st); else abort(); renderFrame (st); return st->delay; } static Bool barcode_event (Display *dpy, Window window, void *closure, XEvent *event) { struct state *st = (struct state *) closure; int clockp = (st->mode == BC_CLOCK12 || st->mode == BC_CLOCK24); if (clockp && event->xany.type == ButtonPress) { st->button_down_p = True; return True; } else if (clockp && event->xany.type == ButtonRelease) { st->button_down_p = False; return True; } else return False; } 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 barcode_free (Display *dpy, Window window, void *closure) { } /* main and options and stuff */ static const char *barcode_defaults [] = { ".background: black", ".foreground: green", "*fpsSolid: true", "*delay: 10000", "*mode: scroll", 0 }; static XrmOptionDescRec barcode_options [] = { { "-delay", ".delay", XrmoptionSepArg, 0 }, { "-mode", ".mode", XrmoptionSepArg, 0 }, { "-scroll", ".mode", XrmoptionNoArg, "scroll" }, { "-grid", ".mode", XrmoptionNoArg, "grid" }, { "-clock", ".mode", XrmoptionNoArg, "clock" }, { "-clock12", ".mode", XrmoptionNoArg, "clock12" }, { "-clock24", ".mode", XrmoptionNoArg, "clock24" }, { 0, 0, 0, 0 } }; /* initialize the user-specifiable params */ static void initParams (struct state *st) { int problems = 0; char *s; st->delay = get_integer_resource (st->dpy, "delay", "Delay"); if (st->delay < 0) { fprintf (stderr, "%s: delay must be at least 0\n", progname); problems = 1; } s = get_string_resource (st->dpy, "mode", "Mode"); if (!s || !*s || !strcasecmp (s, "scroll")) st->mode = BC_SCROLL; else if (!strcasecmp (s, "grid")) st->mode = BC_GRID; else if (!strcasecmp (s, "clock") || !strcasecmp (s, "clock12")) st->mode = BC_CLOCK12; else if (!strcasecmp (s, "clock24")) st->mode = BC_CLOCK24; else { fprintf (stderr, "%s: unknown mode \"%s\"\n", progname, s); problems = 1; } free (s); if (st->mode == BC_CLOCK12 || st->mode == BC_CLOCK24) st->delay = 10000; /* only update every 1/10th second */ if (problems) { exit (1); } } static void * barcode_init (Display *dpy, Window win) { struct state *st = (struct state *) calloc (1, sizeof(*st)); st->dpy = dpy; st->window = win; initParams (st); setup (st); setupModel (st); return st; } XSCREENSAVER_MODULE ("Barcode", barcode) xscreensaver-5.36/hacks/piecewise.c000644 000767 000024 00000057413 12717750004 017365 0ustar00jwzstaff000000 000000 /* piecewise, 21jan2003 * Geoffrey Irving * * 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. */ #include #include #include "screenhack.h" #ifdef HAVE_DOUBLE_BUFFER_EXTENSION # include "xdbe.h" #endif /* HAVE_DOUBLE_BUFFER_EXTENSION */ #if !defined( __GNUC__ ) && !defined(__cplusplus) && !defined(c_plusplus) #undef inline #define inline /* */ #endif #define X_PI (180 * 64) #define START 0 #define CROSS 1 #define FINISH 2 #define ARC_BUFFER_SIZE 256 typedef struct _tree { struct _tree *l, *r; /* left and right children */ /* extra stuff would go here */ } tree; struct _fringe; typedef struct _circle { int r; /* radius */ double x, y; /* position */ double dx, dy; /* velocity */ int visible; /* default visibility */ struct _fringe *lo, *hi; /* lo and hi fringes */ int ni; /* number of intersections */ int *i; /* sorted intersection list */ } circle; typedef struct _fringe { struct _fringe *l, *r; /* left and right children for splay trees */ circle *c; /* associated circle */ int side; /* 0 for lo, 1 for hi */ int mni; /* size of intersection array */ int ni; /* number of intersections */ int *i; /* sorted intersection list */ } fringe; typedef struct _event { struct _event *l, *r; /* left and right children for splay tree */ int kind; /* type of event */ double x, y; /* position */ fringe *lo, *hi; /* fringes */ } event; struct state { Display *dpy; Window window; double event_cut_y; double fringe_start_cut_x; double fringe_start_cut_y; double fringe_double_cut_x; double fringe_double_cut_y; fringe *fringe_double_cut_lo; fringe *fringe_double_cut_hi; int arc_buffer_count; XArc arc_buffer[ARC_BUFFER_SIZE]; Bool dbuf; XColor *colors; XGCValues gcv; GC erase_gc, draw_gc; XWindowAttributes xgwa; Pixmap b, ba, bb; /* double-buffering pixmap */ #ifdef HAVE_DOUBLE_BUFFER_EXTENSION XdbeBackBuffer backb; #endif /* HAVE_DOUBLE_BUFFER_EXTENSION */ int count, delay, ncolors, colorspeed, color_index, flags, iterations; int color_iterations; circle *circles; }; typedef int (*cut)(struct state *, tree*); /* cut x is <, =, or > 0 given a <, =, or > x for some a */ /******** splaying code */ /* Top-down splay routine. Reference: * "Self-adjusting Binary Search Trees", Sleator and Tarjan, * JACM Volume 32, No 3, July 1985, pp 652-686. * See page 668 for specific splay transformations */ static tree *splay(struct state *st, cut c, tree *t) { int v, vv; tree *l, *r; tree **lr, **rl; tree *x, *y, *z; if (!t) return 0; /* initialization */ x = t; l = r = 0; lr = &l; rl = &r; /* top-down splaying loop */ for (;;) { v = c(st, x); if (v == 0) break; /*** success ***/ else if (v < 0) { y = x->l; if (!y) break; /*** trivial ***/ else { vv = c(st, y); if (vv == 0) { *rl = x; /*** zig ***/ rl = &x->l; x = y; break; } else if (vv < 0) { z = y->l; if (!z) { *rl = x; /*** zig ***/ rl = &x->l; x = y; break; } else { x->l = y->r; /*** zig-zig ***/ y->r = x; *rl = y; rl = &y->l; x = z; } } else { /* vv > 0 */ z = y->r; if (!z) { *rl = x; /*** zig ***/ rl = &x->l; x = y; break; } else { /*** zig-zag ***/ *lr = y; lr = &y->r; *rl = x; rl = &x->l; x = z; } } } } else { /* v > 0 */ y = x->r; if (!y) break; /*** trivial ***/ else { vv = c(st, y); if (vv == 0) { *lr = x; /*** zig ***/ lr = &x->r; x = y; break; } else if (vv > 0) { z = y->r; if (!z) { *lr = x; /*** zig ***/ lr = &x->r; x = y; break; } else { x->r = y->l; /*** zig-zig ***/ y->l = x; *lr = y; lr = &y->r; x = z; } } else { /* vv < 0 */ z = y->l; if (!z) { *lr = x; /*** zig ***/ lr = &x->r; x = y; break; } else { /*** zig-zag ***/ *rl = y; rl = &y->l; *lr = x; lr = &x->r; x = z; } } } } } /* completion */ *lr = x->l; x->l = l; *rl = x->r; x->r = r; return x; } static tree *splay_min(tree *t) { tree *r, **rl; tree *x, *y, *z; if (!t) return 0; x = t; r = 0; rl = &r; for (;;) { y = x->l; if (!y) break; /*** trivial ***/ else { z = y->l; if (!z) { *rl = x; /*** zig ***/ rl = &x->l; x = y; break; } else { x->l = y->r; /*** zig-zig ***/ y->r = x; *rl = y; rl = &y->l; x = z; } } } x->l = 0; *rl = x->r; x->r = r; return x; } static tree *splay_max(tree *t) { tree *l, **lr; tree *x, *y, *z; if (!t) return 0; x = t; l = 0; lr = &l; for (;;) { y = x->r; if (!y) break; /*** trivial ***/ else { z = y->r; if (!z) { *lr = x; /*** zig ***/ lr = &x->r; x = y; break; } else { x->r = y->l; /*** zig-zig ***/ y->l = x; *lr = y; lr = &y->r; x = z; } } } *lr = x->l; x->l = l; x->r = 0; return x; } /******** circles and fringe */ static inline double fringe_x(fringe *f, double y) { double dy, d; dy = f->c->y - y; d = sqrt(f->c->r * f->c->r - dy * dy); return f->side ? f->c->x + d : f->c->x - d; } static inline void fringe_add_intersection(fringe *f, double x, double y) { f->ni++; if (f->mni < f->ni) { f->mni += 2; f->i = realloc(f->i, sizeof(int) * f->mni); } f->i[f->ni-1] = rint(atan2(y - f->c->y, x - f->c->x) * X_PI / M_PI); } static circle *init_circles(struct state *st, int n, int w, int h) { int i, r0, dr, speed; double v, a; double minradius, maxradius; fringe *s = malloc(sizeof(fringe) * n * 2); /* never freed */ circle *c = malloc(sizeof(circle) * n); speed = get_integer_resource(st->dpy, "speed", "Speed"); minradius = get_float_resource(st->dpy, "minradius", "Float"); maxradius = get_float_resource(st->dpy, "maxradius", "Float"); if (maxradius < minradius) maxradius = minradius; r0 = ceil(minradius * h); dr = floor(maxradius * h) - r0 + 1; for (i=0;i 0) ? random() % dr : 0); c[i].x = c[i].r + frand(w - 1 - 2 * c[i].r); c[i].y = c[i].r + frand(h - 1 - 2 * c[i].r); c[i].visible = random() & 1; c[i].ni = 0; c[i].i = 0; a = frand(2 * M_PI); v = (1 + frand(0.5)) * speed / 10.0; c[i].dx = v * cos(a); c[i].dy = v * sin(a); c[i].lo = s+i+i; c[i].hi = s+i+i+1; c[i].lo->c = c[i].hi->c = c+i; c[i].lo->side = 0; c[i].hi->side = 1; c[i].lo->mni = c[i].lo->ni = c[i].hi->mni = c[i].hi->ni = 0; c[i].lo->i = c[i].hi->i = 0; } return c; } /* this is a hack, but I guess that's what I writing anyways */ static void tweak_circle(circle *c) { c->x += frand(2) - 1; c->y += frand(1) + 0.1; } static void move_circle(circle *c, int w, int h) { c->x += c->dx; if (c->x < c->r) { c->x = c->r; c->dx = -c->dx; } else if (c->x >= w - c->r) { c->x = w - 1 - c->r; c->dx = -c->dx; } c->y += c->dy; if (c->y < c->r) { c->y = c->r; c->dy = -c->dy; } else if (c->y >= h - c->r) { c->y = h - 1 - c->r; c->dy = -c->dy; } } /******** event queue */ static int event_cut(struct state *st, event *e) { return st->event_cut_y == e->y ? 0 : st->event_cut_y < e->y ? -1 : 1; } static void event_insert(struct state *st, event **eq, event *e) { if (!*eq) { e->l = e->r = 0; *eq = e; return; /* avoid leak */ } st->event_cut_y = e->y; *eq = (event*)splay(st, (cut)event_cut, (tree*)*eq); if (e->y == (*eq)->y) { if (!((e->lo == (*eq)->lo && e->hi == (*eq)->hi) || (e->lo == (*eq)->hi && e->hi == (*eq)->lo))) { e->l = (*eq)->l; e->r = 0; /* doing this instead of dying might be dangerous */ (*eq)->l = e; } else free(e); /* don't leak! */ } else if (e->y < (*eq)->y) { e->l = (*eq)->l; e->r = *eq; (*eq)->l = 0; *eq = e; } else { e->l = *eq; e->r = (*eq)->r; (*eq)->r = 0; *eq = e; } } static void circle_start_event(struct state *st, event **eq, circle *c) { event *s; s = malloc(sizeof(event)); s->kind = START; s->x = c->x; s->y = c->y - c->r; s->lo = c->lo; s->hi = c->hi; event_insert(st, eq, s); } static void circle_finish_event(struct state *st, event **eq, circle *c) { event *f; f = malloc(sizeof(event)); f->kind = FINISH; f->x = c->x; f->y = c->y + c->r; f->lo = c->lo; f->hi = c->hi; event_insert(st, eq, f); } static event *event_next(event **eq) { event *e; if (!*eq) return 0; else { e = (event*)splay_min((tree*)*eq); *eq = e->r; return e; } } static void event_shred(event *e) { if (e) { event_shred(e->l); event_shred(e->r); free(e); } } /******** fringe intersection */ #if 0 static inline int check_fringe_intersection(double ye, fringe *lo, fringe *hi, double x, double y) { return ye <= y && ((x < lo->c->x) ^ lo->side) && ((x < hi->c->x) ^ hi->side); } #endif /* 0 */ static void fringe_intersect(struct state *st, event **eq, double y, fringe *lo, fringe *hi) { event *e; double dx, dy, sd, rs, rd, d, sx, sy, rp, sqd; double x1, y1, x2, y2; if (lo->c == hi->c) return; dx = hi->c->x - lo->c->x; dy = hi->c->y - lo->c->y; sd = dx * dx + dy * dy; if (sd == 0) return; rs = hi->c->r + lo->c->r; rd = hi->c->r - lo->c->r; d = (rd * rd - sd) * (sd - rs * rs); if (d <= 0) return; sd = 0.5 / sd; rp = rs * rd; sqd = sqrt(d); sx = (lo->c->x + hi->c->x) / 2; sy = (lo->c->y + hi->c->y) / 2; x1 = sx + sd * (dy * sqd - dx * rp); y1 = sy - sd * (dx * sqd + dy * rp); x2 = sx - sd * (dy * sqd + dx * rp); y2 = sy + sd * (dx * sqd - dy * rp); #define CHECK(xi, yi) (y <= yi && ((xi < lo->c->x) ^ lo->side) && ((xi < hi->c->x) ^ hi->side)) #define ADD_CROSS(xi, yi, ilo, ihi) { \ e = malloc(sizeof(event)); /* #### LEAK */ \ e->kind = CROSS; \ e->x = xi; e->y = yi; \ e->lo = ilo; e->hi = ihi; \ event_insert(st, eq, e); \ } if (CHECK(x1, y1)) { if (CHECK(x2, y2)) { if (y1 < y2) { ADD_CROSS(x1, y1, lo, hi); ADD_CROSS(x2, y2, hi, lo); } else { ADD_CROSS(x1, y1, hi, lo); ADD_CROSS(x2, y2, lo, hi); } } else ADD_CROSS(x1, y1, lo, hi); } else if (CHECK(x2, y2)) ADD_CROSS(x2, y2, lo, hi); return; } /******** fringe trees and event handling */ #define PANIC ((fringe*)1) /* by alignment, no fringe should every be 1 */ static fringe *check_lo(struct state *st, event **eq, double y, fringe *f, fringe *hi) { if (f) { f = (fringe*)splay_max((tree*)f); fringe_intersect(st, eq, y, f, hi); } return f; } static fringe *check_hi(struct state *st, event **eq, double y, fringe *lo, fringe *f) { if (f) { f = (fringe*)splay_min((tree*)f); fringe_intersect(st, eq, y, lo, f); } return f; } static int fringe_start_cut(struct state *st, fringe *f) { double x = fringe_x(f, st->fringe_start_cut_y); return st->fringe_start_cut_x == x ? 0 : st->fringe_start_cut_x < x ? -1 : 1; } static fringe *fringe_start(struct state *st, event **eq, fringe *f, double x, double y, fringe *lo, fringe *hi) { double sx; if (!f) { circle_finish_event(st, eq, lo->c); lo->l = 0; lo->r = hi; hi->l = hi->r = 0; return lo; } st->fringe_start_cut_x = x; st->fringe_start_cut_y = y; f = (fringe*)splay(st, (cut)fringe_start_cut, (tree*)f); sx = fringe_x(f, y); if (x == sx) { /* time to cheat my way out of handling degeneracies */ tweak_circle(lo->c); circle_start_event(st, eq, lo->c); return f; } else if (x < sx) { circle_finish_event(st, eq, lo->c); f->l = check_lo(st, eq, y, f->l, lo); fringe_intersect(st, eq, y, hi, f); lo->l = f->l; lo->r = f; f->l = hi; hi->l = hi->r = 0; return lo; } else { circle_finish_event(st, eq, lo->c); fringe_intersect(st, eq, y, f, lo); f->r = check_hi(st, eq, y, hi, f->r); hi->r = f->r; hi->l = f; f->r = lo; lo->l = lo->r = 0; return hi; } } static int fringe_double_cut(struct state *st, fringe *f) { double x; if (f == st->fringe_double_cut_lo || f == st->fringe_double_cut_hi) return 0; x = fringe_x(f, st->fringe_double_cut_y); return st->fringe_double_cut_x == x ? 0 : st->fringe_double_cut_x < x ? -1 : 1; } static int fringe_double_splay(struct state *st, fringe *f, double x, double y, fringe *lo, fringe *hi) { st->fringe_double_cut_x = x; st->fringe_double_cut_y = y; st->fringe_double_cut_lo = lo; st->fringe_double_cut_hi = hi; f = (fringe*)splay(st, (cut)fringe_double_cut, (tree*)f); if (f == lo) return (f->r = (fringe*)splay_min((tree*)f->r)) == hi; else if (f == hi) return (f->l = (fringe*)splay_max((tree*)f->l)) == lo; else return 0; } static fringe *fringe_cross(struct state *st, event **eq, fringe *f, double x, double y, fringe *lo, fringe *hi) { fringe *l, *r; if (!fringe_double_splay(st, f, x, y, lo, hi)) return PANIC; l = check_lo(st, eq, y, lo->l, hi); r = check_hi(st, eq, y, lo, hi->r); lo->l = hi; lo->r = r; hi->l = l; hi->r = 0; return lo; } static fringe *fringe_finish(struct state *st, event **eq, fringe *f, double x, double y, fringe *lo, fringe *hi) { if (!fringe_double_splay(st, f, x, y, lo, hi)) return PANIC; else if (!lo->l) return hi->r; else if (!hi->r) return lo->l; else { lo->l = (fringe*)splay_max((tree*)lo->l); hi->r = (fringe*)splay_min((tree*)hi->r); fringe_intersect(st, eq, y, lo->l, hi->r); lo->l->r = hi->r; hi->r->l = 0; return lo->l; } } /******** plane sweep */ static void sweep(struct state *st, int n, circle *c) { int i; event *eq, *e; fringe *f; RESTART: #define CHECK_PANIC() \ if (f == PANIC) { \ free(e); \ event_shred(eq); \ for (i=0;ini = c[i].hi->ni = 0; \ } \ goto RESTART; \ } eq = 0; for (i=0;ikind) { case START: f = fringe_start(st, &eq, f, e->x, e->y, e->lo, e->hi); break; case CROSS: f = fringe_cross(st, &eq, f, e->x, e->y, e->lo, e->hi); CHECK_PANIC(); fringe_add_intersection(e->lo, e->x, e->y); fringe_add_intersection(e->hi, e->x, e->y); break; case FINISH: f = fringe_finish(st, &eq, f, e->x, e->y, e->lo, e->hi); CHECK_PANIC(); break; } free(e); } } /******** circle drawing */ static void adjust_circle_visibility(circle *c) { int i, j, n, a; int *in; n = c->lo->ni + c->hi->ni; in = malloc(sizeof(int) * n); for (i=0;ihi->ni;i++) in[i] = c->hi->i[i]; for (i=c->lo->ni-1;i>=0;i--) in[n-i-1] = c->lo->i[i] > 0 ? c->lo->i[i] : c->lo->i[i] + 2 * X_PI; c->lo->ni = c->hi->ni = 0; i = j = 0; a = 0; while (i < n && j < c->ni) /* whee */ a = (in[i] < c->i[j] ? in[i++] : c->i[j++]) - a; while (i < n) a = in[i++] - a; while (j < c->ni) a = c->i[j++] - a; if (a > X_PI) c->visible = !c->visible; free(c->i); c->ni = n; c->i = in; } static void flush_arc_buffer(struct state *st, Drawable w, GC gc) { if (st->arc_buffer_count) { XDrawArcs(st->dpy, w, gc, st->arc_buffer, st->arc_buffer_count); st->arc_buffer_count = 0; } } static void draw_circle(struct state *st, Drawable w, GC gc, circle *c) { int i, xi, yi, di; adjust_circle_visibility(c); xi = rint(c->x - c->r); yi = rint(c->y - c->r); di = c->r << 1; #define ARC(p, a1, a2) { \ if (((p) & 1) ^ c->visible) { \ st->arc_buffer[st->arc_buffer_count].x = xi; \ st->arc_buffer[st->arc_buffer_count].y = yi; \ st->arc_buffer[st->arc_buffer_count].width = di; \ st->arc_buffer[st->arc_buffer_count].height = di; \ st->arc_buffer[st->arc_buffer_count].angle1 = -(a1); \ st->arc_buffer[st->arc_buffer_count].angle2 = (a1) - (a2); \ st->arc_buffer_count++; \ if (st->arc_buffer_count == ARC_BUFFER_SIZE) \ flush_arc_buffer(st, w, gc); \ } \ } if (!c->ni) ARC(0, 0, 2 * X_PI) else ARC(0, c->i[c->ni-1], c->i[0] + 2 * X_PI) for (i=1;ini;i++) ARC(i, c->i[i-1], c->i[i]) } /******** toplevel */ #if 0 static void check_for_leaks (void) { #ifdef HAVE_SBRK static unsigned long early_brk = 0; unsigned long max = 30 * 1024 * 1024; /* 30 MB */ int b = (unsigned long) sbrk(0); if (early_brk == 0) early_brk = b; else if (b > early_brk + max) { fprintf (stderr, "%s: leaked %lu MB -- aborting!\n", progname, ((b - early_brk) >> 20)); exit (1); } #endif /* HAVE_SBRK */ } #endif static void * piecewise_init (Display *dd, Window ww) { struct state *st = (struct state *) calloc (1, sizeof(*st)); st->dpy = dd; st->window = ww; st->count = get_integer_resource(st->dpy, "count", "Integer"); st->delay = get_integer_resource(st->dpy, "delay", "Integer"); st->ncolors = get_integer_resource(st->dpy, "ncolors", "Integer"); st->colorspeed = get_integer_resource(st->dpy, "colorspeed", "Integer"); st->dbuf = get_boolean_resource(st->dpy, "doubleBuffer", "Boolean"); # ifdef HAVE_JWXYZ /* Don't second-guess Quartz's double-buffering */ st->dbuf = False; # endif st->color_iterations = st->colorspeed ? 100 / st->colorspeed : 100000; if (!st->color_iterations) st->color_iterations = 1; XGetWindowAttributes(st->dpy, st->window, &st->xgwa); st->colors = calloc(sizeof(XColor), st->ncolors); if (get_boolean_resource(st->dpy, "mono", "Boolean")) { MONO: st->ncolors = 1; st->colors[0].pixel = get_pixel_resource(st->dpy, st->xgwa.colormap, "foreground", "Foreground"); } else { make_color_loop(st->xgwa.screen, st->xgwa.visual, st->xgwa.colormap, 0, 1, 1, 120, 1, 1, 240, 1, 1, st->colors, &st->ncolors, True, False); if (st->ncolors < 2) goto MONO; } if (st->dbuf) { #ifdef HAVE_DOUBLE_BUFFER_EXTENSION st->b = st->backb = xdbe_get_backbuffer(st->dpy, st->window, XdbeUndefined); #endif /* HAVE_DOUBLE_BUFFER_EXTENSION */ if (!st->b) { 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; } } else st->b = st->window; /* erasure gc */ st->gcv.foreground = get_pixel_resource(st->dpy, st->xgwa.colormap, "background", "Background"); st->erase_gc = XCreateGC (st->dpy, st->b, GCForeground, &st->gcv); /* drawing gc */ st->flags = GCForeground; st->color_index = random() % st->ncolors; st->gcv.foreground = st->colors[st->color_index].pixel; st->draw_gc = XCreateGC(st->dpy, st->b, st->flags, &st->gcv); /* initialize circles */ st->circles = init_circles(st, st->count, st->xgwa.width, st->xgwa.height); st->iterations = 0; return st; } static unsigned long piecewise_draw (Display *dpy, Window window, void *closure) { struct state *st = (struct state *) closure; int i; XFillRectangle (st->dpy, st->b, st->erase_gc, 0, 0, st->xgwa.width, st->xgwa.height); sweep(st, st->count, st->circles); for (i=0;icount;i++) { draw_circle(st, st->b, st->draw_gc, st->circles+i); move_circle(st->circles+i, st->xgwa.width, st->xgwa.height); } flush_arc_buffer(st, st->b, st->draw_gc); if (++st->iterations % st->color_iterations == 0) { st->color_index = (st->color_index + 1) % st->ncolors; XSetForeground(st->dpy, st->draw_gc, st->colors[st->color_index].pixel); } #ifdef HAVE_DOUBLE_BUFFER_EXTENSION if (st->backb) { XdbeSwapInfo info[1]; info[0].swap_window = st->window; info[0].swap_action = XdbeUndefined; XdbeSwapBuffers (st->dpy, info, 1); } else #endif /* HAVE_DOUBLE_BUFFER_EXTENSION */ if (st->dbuf) { XCopyArea (st->dpy, st->b, st->window, st->erase_gc, 0, 0, st->xgwa.width, st->xgwa.height, 0, 0); st->b = (st->b == st->ba ? st->bb : st->ba); } /* check_for_leaks(); */ return st->delay; } 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 piecewise_event (Display *dpy, Window window, void *closure, XEvent *event) { return False; } static void piecewise_free (Display *dpy, Window window, void *closure) { struct state *st = (struct state *) closure; free (st); } static const char *piecewise_defaults [] = { ".background: black", ".foreground: white", "*delay: 10000", "*speed: 15", "*ncolors: 256", ".colorspeed: 10", ".count: 32", ".minradius: 0.05", ".maxradius: 0.2", "*doubleBuffer: True", #ifdef HAVE_DOUBLE_BUFFER_EXTENSION "*useDBE: True", #endif /* HAVE_DOUBLE_BUFFER_EXTENSION */ #ifdef HAVE_MOBILE "*ignoreRotation: True", #endif 0 }; static XrmOptionDescRec piecewise_options [] = { { "-delay", ".delay", XrmoptionSepArg, 0 }, { "-ncolors", ".ncolors", XrmoptionSepArg, 0 }, { "-speed", ".speed", XrmoptionSepArg, 0 }, { "-colorspeed", ".colorspeed", XrmoptionSepArg, 0 }, { "-count", ".count", XrmoptionSepArg, 0 }, { "-minradius", ".minradius", XrmoptionSepArg, 0 }, { "-maxradius", ".maxradius", XrmoptionSepArg, 0 }, { "-db", ".doubleBuffer", XrmoptionNoArg, "True" }, { "-no-db", ".doubleBuffer", XrmoptionNoArg, "False" }, { 0, 0, 0, 0 } }; XSCREENSAVER_MODULE ("Piecewise", piecewise) xscreensaver-5.36/hacks/cloudlife.c000644 000767 000024 00000025067 12710314200 017341 0ustar00jwzstaff000000 000000 /* cloudlife by Don Marti * * Based on Conway's Life, but with one rule change to make it a better * screensaver: cells have a max age. * * When a cell exceeds the max age, it counts as 3 for populating the next * generation. This makes long-lived formations explode instead of just * sitting there burning a hole in your screen. * * Cloudlife only draws one pixel of each cell per tick, whether the cell is * alive or dead. So gliders look like little comets. * 20 May 2003 -- now includes color cycling and a man page. * Based on several examples from the hacks directory of: * xscreensaver, Copyright (c) 1997, 1998, 2002 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. */ #include "screenhack.h" #ifndef MAX_WIDTH #include #define MAX_WIDTH SHRT_MAX #endif #ifdef TIME_ME #include #endif /* this program goes faster if some functions are inline. The following is * borrowed from ifs.c */ #if !defined( __GNUC__ ) && !defined(__cplusplus) && !defined(c_plusplus) #undef inline #define inline /* */ #endif struct field { unsigned int height; unsigned int width; unsigned int max_age; unsigned int cell_size; unsigned char *cells; unsigned char *new_cells; }; struct state { Display *dpy; Window window; #ifdef TIME_ME time_t start_time; #endif unsigned int cycles; unsigned int colorindex; /* which color in the colormap are we on */ unsigned int colortimer; /* when this reaches 0, cycle to next color */ int cycle_delay; int cycle_colors; int ncolors; int density; GC fgc, bgc; XGCValues gcv; XWindowAttributes xgwa; XColor *colors; struct field *field; XPoint fg_points[MAX_WIDTH]; XPoint bg_points[MAX_WIDTH]; }; static void *xrealloc(void *p, size_t size) { void *ret; if ((ret = realloc(p, size)) == NULL) { fprintf(stderr, "%s: out of memory\n", progname); exit(1); } return ret; } static struct field * init_field(struct state *st) { struct field *f = xrealloc(NULL, sizeof(struct field)); f->height = 0; f->width = 0; f->cell_size = get_integer_resource(st->dpy, "cellSize", "Integer"); f->max_age = get_integer_resource(st->dpy, "maxAge", "Integer"); if (f->max_age > 255) { fprintf (stderr, "%s: max-age must be < 256 (not %d)\n", progname, f->max_age); exit (1); } f->cells = NULL; f->new_cells = NULL; return f; } static void resize_field(struct field * f, unsigned int w, unsigned int h) { int s = w * h * sizeof(unsigned char); f->width = w; f->height = h; f->cells = xrealloc(f->cells, s); f->new_cells = xrealloc(f->new_cells, s); memset(f->cells, 0, s); memset(f->new_cells, 0, s); } static inline unsigned char *cell_at(struct field * f, unsigned int x, unsigned int y) { return (f->cells + x * sizeof(unsigned char) + y * f->width * sizeof(unsigned char)); } static inline unsigned char *new_cell_at(struct field * f, unsigned int x, unsigned int y) { return (f->new_cells + x * sizeof(unsigned char) + y * f->width * sizeof(unsigned char)); } static void draw_field(struct state *st, struct field * f) { unsigned int x, y; unsigned int rx, ry = 0; /* random amount to offset the dot */ unsigned int size = 1 << f->cell_size; unsigned int mask = size - 1; unsigned int fg_count, bg_count; /* columns 0 and width-1 are off screen and not drawn. */ for (y = 1; y < f->height - 1; y++) { fg_count = 0; bg_count = 0; /* rows 0 and height-1 are off screen and not drawn. */ for (x = 1; x < f->width - 1; x++) { rx = random(); ry = rx >> f->cell_size; rx &= mask; ry &= mask; if (*cell_at(f, x, y)) { st->fg_points[fg_count].x = (short) x *size - rx - 1; st->fg_points[fg_count].y = (short) y *size - ry - 1; fg_count++; } else { st->bg_points[bg_count].x = (short) x *size - rx - 1; st->bg_points[bg_count].y = (short) y *size - ry - 1; bg_count++; } } XDrawPoints(st->dpy, st->window, st->fgc, st->fg_points, fg_count, CoordModeOrigin); XDrawPoints(st->dpy, st->window, st->bgc, st->bg_points, bg_count, CoordModeOrigin); } } static inline unsigned int cell_value(unsigned char c, unsigned int age) { if (!c) { return 0; } else if (c > age) { return (3); } else { return (1); } } static inline unsigned int is_alive(struct field * f, unsigned int x, unsigned int y) { unsigned int count; unsigned int i, j; unsigned char *p; count = 0; for (i = x - 1; i <= x + 1; i++) { for (j = y - 1; j <= y + 1; j++) { if (y != j || x != i) { count += cell_value(*cell_at(f, i, j), f->max_age); } } } p = cell_at(f, x, y); if (*p) { if (count == 2 || count == 3) { return ((*p) + 1); } else { return (0); } } else { if (count == 3) { return (1); } else { return (0); } } } static unsigned int do_tick(struct field * f) { unsigned int x, y; unsigned int count = 0; for (x = 1; x < f->width - 1; x++) { for (y = 1; y < f->height - 1; y++) { count += *new_cell_at(f, x, y) = is_alive(f, x, y); } } memcpy(f->cells, f->new_cells, f->width * f->height * sizeof(unsigned char)); return count; } static unsigned int random_cell(unsigned int p) { int r = random() & 0xff; if (r < p) { return (1); } else { return (0); } } static void populate_field(struct field * f, unsigned int p) { unsigned int x, y; for (x = 0; x < f->width; x++) { for (y = 0; y < f->height; y++) { *cell_at(f, x, y) = random_cell(p); } } } static void populate_edges(struct field * f, unsigned int p) { unsigned int i; for (i = f->width; i--;) { *cell_at(f, i, 0) = random_cell(p); *cell_at(f, i, f->height - 1) = random_cell(p); } for (i = f->height; i--;) { *cell_at(f, f->width - 1, i) = random_cell(p); *cell_at(f, 0, i) = random_cell(p); } } static void * cloudlife_init (Display *dpy, Window window) { struct state *st = (struct state *) calloc (1, sizeof(*st)); Bool tmp = True; st->dpy = dpy; st->window = window; st->field = init_field(st); #ifdef TIME_ME st->start_time = time(NULL); #endif st->cycle_delay = get_integer_resource(st->dpy, "cycleDelay", "Integer"); st->cycle_colors = get_integer_resource(st->dpy, "cycleColors", "Integer"); st->ncolors = get_integer_resource(st->dpy, "ncolors", "Integer"); st->density = (get_integer_resource(st->dpy, "initialDensity", "Integer") % 100 * 256)/100; XGetWindowAttributes(st->dpy, st->window, &st->xgwa); if (st->cycle_colors) { st->colors = (XColor *) xrealloc(st->colors, sizeof(XColor) * (st->ncolors+1)); make_smooth_colormap (st->xgwa.screen, st->xgwa.visual, st->xgwa.colormap, st->colors, &st->ncolors, True, &tmp, True); } st->gcv.foreground = get_pixel_resource(st->dpy, st->xgwa.colormap, "foreground", "Foreground"); st->fgc = XCreateGC(st->dpy, st->window, GCForeground, &st->gcv); st->gcv.foreground = get_pixel_resource(st->dpy, st->xgwa.colormap, "background", "Background"); st->bgc = XCreateGC(st->dpy, st->window, GCForeground, &st->gcv); return st; } static unsigned long cloudlife_draw (Display *dpy, Window window, void *closure) { struct state *st = (struct state *) closure; if (st->cycle_colors) { if (st->colortimer == 0) { st->colortimer = st->cycle_colors; if( st->colorindex == 0 ) st->colorindex = st->ncolors; st->colorindex--; XSetForeground(st->dpy, st->fgc, st->colors[st->colorindex].pixel); } st->colortimer--; } XGetWindowAttributes(st->dpy, st->window, &st->xgwa); if (st->field->height != st->xgwa.height / (1 << st->field->cell_size) + 2 || st->field->width != st->xgwa.width / (1 << st->field->cell_size) + 2) { resize_field(st->field, st->xgwa.width / (1 << st->field->cell_size) + 2, st->xgwa.height / (1 << st->field->cell_size) + 2); populate_field(st->field, st->density); } draw_field(st, st->field); if (do_tick(st->field) < (st->field->height + st->field->width) / 4) { populate_field(st->field, st->density); } if (st->cycles % (st->field->max_age /2) == 0) { populate_edges(st->field, st->density); do_tick(st->field); populate_edges(st->field, 0); } st->cycles++; #ifdef TIME_ME if (st->cycles % st->field->max_age == 0) { printf("%g s.\n", ((time(NULL) - st->start_time) * 1000.0) / st->cycles); } #endif return (st->cycle_delay); } static void cloudlife_reshape (Display *dpy, Window window, void *closure, unsigned int w, unsigned int h) { } static Bool cloudlife_event (Display *dpy, Window window, void *closure, XEvent *event) { struct state *st = (struct state *) closure; if (screenhack_event_helper (dpy, window, event)) { XClearWindow (dpy, window); st->cycles = 0; st->field = init_field(st); return True; } return False; } static void cloudlife_free (Display *dpy, Window window, void *closure) { struct state *st = (struct state *) closure; free (st); } static const char *cloudlife_defaults[] = { ".background: black", ".foreground: blue", "*fpsSolid: true", "*cycleDelay: 25000", "*cycleColors: 2", "*ncolors: 64", "*maxAge: 64", "*initialDensity: 30", "*cellSize: 3", #ifdef HAVE_MOBILE "*ignoreRotation: True", #endif 0 }; static XrmOptionDescRec cloudlife_options[] = { {"-background", ".background", XrmoptionSepArg, 0}, {"-foreground", ".foreground", XrmoptionSepArg, 0}, {"-cycle-delay", ".cycleDelay", XrmoptionSepArg, 0}, {"-cycle-colors", ".cycleColors", XrmoptionSepArg, 0}, {"-ncolors", ".ncolors", XrmoptionSepArg, 0}, {"-cell-size", ".cellSize", XrmoptionSepArg, 0}, {"-initial-density", ".initialDensity", XrmoptionSepArg, 0}, {"-max-age", ".maxAge", XrmoptionSepArg, 0}, {0, 0, 0, 0} }; XSCREENSAVER_MODULE ("CloudLife", cloudlife) xscreensaver-5.36/hacks/fontglide.c000664 000767 000024 00000212532 12762445063 017366 0ustar00jwzstaff000000 000000 /* xscreensaver, Copyright (c) 2003-2016 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. * * fontglide -- reads text from a subprocess and puts it on the screen using * large characters that glide in from the edges, assemble, then disperse. * Requires a system with scalable fonts. (X's font handing sucks. A lot.) */ #ifdef HAVE_CONFIG_H # include "config.h" #endif /* HAVE_CONFIG_H */ /* If you turn on DEBUG, this program also masquerades as a tool for debugging font metrics issues, which is probably only if interest if you are doing active development on libjwxyz.a itself. */ /* #define DEBUG */ #include #include #ifndef HAVE_JWXYZ # include #endif #ifdef HAVE_UNISTD_H # include #endif #include "screenhack.h" #include "textclient.h" #include "xft.h" #include "utf8wc.h" #ifdef HAVE_DOUBLE_BUFFER_EXTENSION #include "xdbe.h" #endif /* HAVE_DOUBLE_BUFFER_EXTENSION */ typedef struct { char *text; int x, y; /* Position of origin of first character in word */ /* These have the same meanings as in XCharStruct: */ int lbearing; /* origin to leftmost pixel */ int rbearing; /* origin to rightmost pixel */ int ascent; /* origin to topmost pixel */ int descent; /* origin to bottommost pixel */ int width; /* origin to next word's origin */ int nticks, tick; int start_x, start_y; int target_x, target_y; Pixmap pixmap, mask; } word; typedef struct { int id; Bool dark_p; Bool move_chars_p; int width; char *font_name; GC fg_gc; XftFont *xftfont; XftColor xftcolor_fg, xftcolor_bg; int nwords; word **words; enum { IN, PAUSE, OUT } anim_state; enum { LEFT, CENTER, RIGHT } alignment; int pause_tick; } sentence; typedef struct { Display *dpy; Window window; XWindowAttributes xgwa; Pixmap b, ba; /* double-buffer to reduce flicker */ GC bg_gc; #ifdef HAVE_DOUBLE_BUFFER_EXTENSION XdbeBackBuffer backb; Bool dbeclear_p; #endif /* HAVE_DOUBLE_BUFFER_EXTENSION */ Bool dbuf; /* Whether we're using double buffering. */ int border_width; /* size of the font outline */ char *charset; /* registry and encoding for font lookups */ double speed; /* frame rate multiplier */ double linger; /* multiplier for how long to leave words on screen */ Bool trails_p; enum { PAGE, SCROLL, CHARS } mode; char *font_override; /* if -font was specified on the cmd line */ char buf [40]; /* this only needs to be as big as one "word". */ int buf_tail; Bool early_p; time_t start_time; int nsentences; sentence **sentences; Bool spawn_p; /* whether it is time to create a new sentence */ int latest_sentence; unsigned long frame_delay; int id_tick; text_data *tc; # ifdef DEBUG Bool debug_p; unsigned long debug_metrics_p; int debug_metrics_antialiasing_p; int debug_scale; unsigned entering_unicode_p; /* 0 = No, 1 = Just started, 2 = in progress */ XFontStruct *metrics_font1; XFontStruct *metrics_font2; XftFont *metrics_xftfont; GC label_gc; char *prev_font_name; char *next_font_name; # endif /* DEBUG */ } state; static void drain_input (state *s); static int pick_font_size (state *s) { double scale = s->xgwa.height / 1024.0; /* shrink for small windows */ int min, max, r, pixel; min = scale * 24; max = scale * 260; if (min < 10) min = 10; if (max < 30) max = 30; r = ((max-min)/3)+1; pixel = min + ((random() % r) + (random() % r) + (random() % r)); if (s->mode == SCROLL) /* scroll mode likes bigger fonts */ pixel *= 1.5; return pixel; } /* Finds the set of scalable fonts on the system; picks one; and loads that font in a random pixel size. Returns False if something went wrong. */ static Bool pick_font_1 (state *s, sentence *se) { Bool ok = False; char pattern[1024]; char pattern2[1024]; #ifndef HAVE_JWXYZ /* real Xlib */ char **names = 0; char **names2 = 0; XFontStruct *info = 0; int count = 0, count2 = 0; int i; if (se->xftfont) { XftFontClose (s->dpy, se->xftfont); XftColorFree (s->dpy, s->xgwa.visual, s->xgwa.colormap, &se->xftcolor_fg); XftColorFree (s->dpy, s->xgwa.visual, s->xgwa.colormap, &se->xftcolor_bg); free (se->font_name); se->xftfont = 0; se->font_name = 0; } if (s->font_override) sprintf (pattern, "%.200s", s->font_override); else sprintf (pattern, "-%s-%s-%s-%s-%s-%s-%s-%s-%s-%s-%s-%s-%s", "*", /* foundry */ "*", /* family */ "*", /* weight */ "*", /* slant */ "*", /* swidth */ "*", /* adstyle */ "0", /* pixel size */ "0", /* point size */ "0", /* resolution x */ "0", /* resolution y */ "p", /* spacing */ "0", /* avg width */ s->charset); /* registry + encoding */ names = XListFonts (s->dpy, pattern, 1000, &count); if (count <= 0) { if (s->font_override) fprintf (stderr, "%s: -font option bogus: %s\n", progname, pattern); else fprintf (stderr, "%s: no scalable fonts found! (pattern: %s)\n", progname, pattern); exit (1); } i = random() % count; names2 = XListFontsWithInfo (s->dpy, names[i], 1000, &count2, &info); if (count2 <= 0) { # ifdef DEBUG if (s->debug_p) fprintf (stderr, "%s: pattern %s\n" " gave unusable %s\n\n", progname, pattern, names[i]); # endif /* DEBUG */ goto FAIL; } { XFontStruct *font = &info[0]; unsigned long value = 0; char *foundry=0, *family=0, *weight=0, *slant=0, *setwidth=0, *add_style=0; unsigned long pixel=0, point=0, res_x=0, res_y=0; char *spacing=0; unsigned long avg_width=0; char *registry=0, *encoding=0; Atom a; char *bogus = "\"?\""; # define STR(ATOM,VAR) \ bogus = (ATOM); \ a = XInternAtom (s->dpy, (ATOM), False); \ if (XGetFontProperty (font, a, &value)) \ VAR = XGetAtomName (s->dpy, value); \ else \ goto FAIL2 # define INT(ATOM,VAR) \ bogus = (ATOM); \ a = XInternAtom (s->dpy, (ATOM), False); \ if (!XGetFontProperty (font, a, &VAR) || \ VAR > 9999) \ goto FAIL2 STR ("FOUNDRY", foundry); STR ("FAMILY_NAME", family); STR ("WEIGHT_NAME", weight); STR ("SLANT", slant); STR ("SETWIDTH_NAME", setwidth); STR ("ADD_STYLE_NAME", add_style); INT ("PIXEL_SIZE", pixel); INT ("POINT_SIZE", point); INT ("RESOLUTION_X", res_x); INT ("RESOLUTION_Y", res_y); STR ("SPACING", spacing); INT ("AVERAGE_WIDTH", avg_width); STR ("CHARSET_REGISTRY", registry); STR ("CHARSET_ENCODING", encoding); #undef INT #undef STR pixel = pick_font_size (s); #if 0 /* Occasionally change the aspect ratio of the font, by increasing either the X or Y resolution (while leaving the other alone.) #### Looks like this trick doesn't really work that well: the metrics of the individual characters are ok, but the overall font ascent comes out wrong (unscaled.) */ if (! (random() % 8)) { double n = 2.5 / 3; double scale = 1 + (frand(n) + frand(n) + frand(n)); if (random() % 2) res_x *= scale; else res_y *= scale; } # endif sprintf (pattern, "-%s-%s-%s-%s-%s-%s-%ld-%s-%ld-%ld-%s-%s-%s-%s", foundry, family, weight, slant, setwidth, add_style, pixel, "*", /* point, */ res_x, res_y, spacing, "*", /* avg_width */ registry, encoding); ok = True; FAIL2: if (!ok) fprintf (stderr, "%s: font has bogus %s property: %s\n", progname, bogus, names[i]); if (foundry) XFree (foundry); if (family) XFree (family); if (weight) XFree (weight); if (slant) XFree (slant); if (setwidth) XFree (setwidth); if (add_style) XFree (add_style); if (spacing) XFree (spacing); if (registry) XFree (registry); if (encoding) XFree (encoding); } FAIL: XFreeFontInfo (names2, info, count2); XFreeFontNames (names); # else /* HAVE_JWXYZ */ if (s->font_override) sprintf (pattern, "%.200s", s->font_override); else { const char *family = "random"; const char *weight = ((random() % 2) ? "regular" : "bold"); const char *slant = ((random() % 2) ? "o" : "r"); int size = 10 * pick_font_size (s); sprintf (pattern, "*-%s-%s-%s-*-*-*-%d-*", family, weight, slant, size); } ok = True; # endif /* HAVE_JWXYZ */ if (! ok) return False; se->xftfont = XftFontOpenXlfd (s->dpy, screen_number (s->xgwa.screen), pattern); if (! se->xftfont) { # ifdef DEBUG if (s->debug_p) fprintf (stderr, "%s: unable to load font %s\n", progname, pattern); #endif return False; } strcpy (pattern2, pattern); # ifdef HAVE_JWXYZ { float s; const char *n = jwxyz_nativeFontName (se->xftfont->xfont->fid, &s); sprintf (pattern2 + strlen(pattern2), " (%s %.1f)", n, s); } # endif # ifdef DEBUG if (s->prev_font_name) free (s->prev_font_name); s->prev_font_name = s->next_font_name; s->next_font_name = strdup (pattern2); # endif /* Sometimes we get fonts with screwed up metrics. For example: -b&h-lucida-medium-r-normal-sans-40-289-100-100-p-0-iso8859-1 When using XDrawString, XTextExtents and XTextExtents16, it is rendered as a scaled-up bitmap font. The character M has rbearing 70, ascent 68 and width 78, which is correct for the glyph as rendered. But when using XftDrawStringUtf8 and XftTextExtentsUtf8, it is rendered at the original, smaller, un-scaled size, with rbearing 26, ascent 25 and... width 77! So it's taking the *size* from the unscaled font, the *advancement* from the scaled-up version, and then *not* actually scaling it up. Awesome. So, after loading the font, measure the M, and if its advancement is more than 20% larger than its rbearing, reject the font. ------------------------------------------------------------------------ Some observations on this nonsense from Dave Odell: 1. -*-lucidatypewriter-bold-r-normal-*-*-480-*-*-*-*-iso8859-1 normally resolves to /usr/share/fonts/X11/100dpi/lutBS24-ISO8859-1.pcf.gz. -*-lucidatypewriter-* is from the 'xfonts-100dpi' package in Debian/Ubuntu. It's usually (54.46% of systems), but not always, installed whenever an X.org server (57.96% of systems) is. It might be a good idea for this and xfonts-75dpi to be recommended dependencies of XScreenSaver in Debian, but that's neither here nor there. https://qa.debian.org/popcon.php?package=xorg https://qa.debian.org/popcon.php?package=xfonts-100dpi 2. It normally resolves to the PCF font... but not always. Fontconfig has /etc/fonts/conf.d/ (it's /opt/local/etc/fonts/conf.d/ with MacPorts) containing symlinks to configuration files. And both Debian and Ubuntu normally has a 70-no-bitmaps.conf, installed as part of the 'fontconfig-config' package. And the 70-no-bitmaps.conf symlink... disables bitmap fonts. Without bitmap fonts, I get DejaVu Sans. 3. There's another symlink of interest here: /etc/fonts/conf.d/10-scale-bitmap-fonts.conf. This adds space to the right of glyphs of bitmap fonts when the requested size of the font is larger than the actual bitmap font. Ubuntu and MacPorts has this one. This specifically is causing text to have excessive character spacing. (jwz asks: WHY WOULD ANYONE EVER WANT THIS BEHAVIOR?) 4. Notice that I'm only talking about Debian and Ubuntu. Other distros will probably have different symlinks in /etc/fonts/conf.d/. So yes, this can be an issue on Linux as well as MacOS. */ { XGlyphInfo extents; int rbearing, width; float ratio; float min = 0.8; XftTextExtentsUtf8 (s->dpy, se->xftfont, (FcChar8 *) "M", 1, &extents); rbearing = extents.width - extents.x; width = extents.xOff; ratio = rbearing / (float) width; # ifdef DEBUG if (s->debug_p) fprintf (stderr, "%s: M ratio %.2f (%d %d): %s\n", progname, ratio, rbearing, width, pattern2); # endif if (ratio < min && !s->font_override) { # ifdef DEBUG if (s->debug_p) fprintf (stderr, "%s: skipping font with broken metrics: %s\n", progname, pattern2); # endif return False; } } # ifdef DEBUG if (s->debug_p) fprintf(stderr, "%s: %s\n", progname, pattern2); # endif /* DEBUG */ se->font_name = strdup (pattern); return True; } /* Finds the set of scalable fonts on the system; picks one; and loads that font in a random pixel size. */ static void pick_font (state *s, sentence *se) { int i; for (i = 0; i < 50; i++) if (pick_font_1 (s, se)) return; fprintf (stderr, "%s: too many font-loading failures: giving up!\n", progname); exit (1); } static char *unread_word_text = 0; /* Returns a newly-allocated string with one word in it, or NULL if there is no complete word available. */ static char * get_word_text (state *s) { const char *start = s->buf; const char *end; char *result = 0; int lfs = 0; drain_input (s); /* If we just launched, and haven't had any text yet, and it has been more than 2 seconds since we launched, then push out "Loading..." as our first text. So if the text source is speedy, just use that. But if we'd display a blank screen for a while, give 'em something to see. */ if (s->early_p && !*s->buf && !unread_word_text && s->start_time < ((time ((time_t *) 0) - 2))) { unread_word_text = "Loading..."; s->early_p = False; } if (unread_word_text) { result = unread_word_text; unread_word_text = 0; return strdup (result); } /* Skip over whitespace at the beginning of the buffer, and count up how many linebreaks we see while doing so. */ while (*start && (*start == ' ' || *start == '\t' || *start == '\r' || *start == '\n')) { if (*start == '\n' || (*start == '\r' && start[1] != '\n')) lfs++; start++; } end = start; /* If we saw a blank line, then return NULL (treat it as a temporary "eof", to trigger a sentence break here.) */ if (lfs >= 2) goto DONE; /* Skip forward to the end of this word (find next whitespace.) */ while (*end && (! (*end == ' ' || *end == '\t' || *end == '\r' || *end == '\n'))) end++; /* If we have a word, allocate a string for it */ if (end > start) { result = malloc ((end - start) + 1); strncpy (result, start, (end-start)); result [end-start] = 0; } DONE: /* Make room in the buffer by compressing out any bytes we've processed. */ if (end > s->buf) { int n = end - s->buf; memmove (s->buf, end, sizeof(s->buf) - n); s->buf_tail -= n; } return result; } /* Returns a 1-bit pixmap of the same size as the drawable, with a 0 wherever the drawable is black. */ static Pixmap make_mask (Screen *screen, Visual *visual, Drawable drawable) { Display *dpy = DisplayOfScreen (screen); unsigned long black = BlackPixelOfScreen (screen); Window r; int x, y; unsigned int w, h, bw, d; XImage *out, *in; Pixmap mask; GC gc; XGetGeometry (dpy, drawable, &r, &x, &y, &w, &h, &bw, &d); in = XGetImage (dpy, drawable, 0, 0, w, h, ~0L, ZPixmap); out = XCreateImage (dpy, visual, 1, XYPixmap, 0, 0, w, h, 8, 0); out->data = (char *) malloc (h * out->bytes_per_line); for (y = 0; y < h; y++) for (x = 0; x < w; x++) XPutPixel (out, x, y, (black != XGetPixel (in, x, y))); mask = XCreatePixmap (dpy, drawable, w, h, 1L); gc = XCreateGC (dpy, mask, 0, 0); XPutImage (dpy, mask, gc, out, 0, 0, 0, 0, w, h); XFreeGC (dpy, gc); free (in->data); free (out->data); in->data = out->data = 0; XDestroyImage (in); XDestroyImage (out); return mask; } /* Gets some random text, and creates a "word" object from it. */ static word * new_word (state *s, sentence *se, const char *txt, Bool alloc_p) { word *w; XGlyphInfo extents; int bw = s->border_width; if (!txt) return 0; w = (word *) calloc (1, sizeof(*w)); XftTextExtentsUtf8 (s->dpy, se->xftfont, (FcChar8 *) txt, strlen(txt), &extents); w->lbearing = -extents.x; w->rbearing = extents.width - extents.x; w->ascent = extents.y; w->descent = extents.height - extents.y; w->width = extents.xOff; w->lbearing -= bw; w->rbearing += bw; w->descent += bw; w->ascent += bw; if (s->mode == SCROLL && !alloc_p) abort(); if (alloc_p) { int i, j; XGCValues gcv; GC gc_fg, gc_bg, gc_black; XftDraw *xftdraw; int width = w->rbearing - w->lbearing; int height = w->ascent + w->descent; if (width <= 0) width = 1; if (height <= 0) height = 1; w->pixmap = XCreatePixmap (s->dpy, s->b, width, height, s->xgwa.depth); xftdraw = XftDrawCreate (s->dpy, w->pixmap, s->xgwa.visual, s->xgwa.colormap); gcv.foreground = se->xftcolor_fg.pixel; gc_fg = XCreateGC (s->dpy, w->pixmap, GCForeground, &gcv); gcv.foreground = se->xftcolor_bg.pixel; gc_bg = XCreateGC (s->dpy, w->pixmap, GCForeground, &gcv); gcv.foreground = BlackPixelOfScreen (s->xgwa.screen); gc_black = XCreateGC (s->dpy, w->pixmap, GCForeground, &gcv); XFillRectangle (s->dpy, w->pixmap, gc_black, 0, 0, width, height); # ifdef DEBUG if (s->debug_p) { /* bounding box (behind the characters) */ XDrawRectangle (s->dpy, w->pixmap, (se->dark_p ? gc_bg : gc_fg), 0, 0, width-1, height-1); } # endif /* DEBUG */ /* Draw background text for border */ for (i = -bw; i <= bw; i++) for (j = -bw; j <= bw; j++) XftDrawStringUtf8 (xftdraw, &se->xftcolor_bg, se->xftfont, -w->lbearing + i, w->ascent + j, (FcChar8 *) txt, strlen(txt)); /* Draw foreground text */ XftDrawStringUtf8 (xftdraw, &se->xftcolor_fg, se->xftfont, -w->lbearing, w->ascent, (FcChar8 *) txt, strlen(txt)); # ifdef DEBUG if (s->debug_p) { if (w->ascent != height) { /* baseline (on top of the characters) */ XDrawLine (s->dpy, w->pixmap, (se->dark_p ? gc_bg : gc_fg), 0, w->ascent, width-1, w->ascent); } if (w->lbearing < 0) { /* left edge of charcell */ XDrawLine (s->dpy, w->pixmap, (se->dark_p ? gc_bg : gc_fg), -w->lbearing, 0, -w->lbearing, height-1); } if (w->rbearing != w->width) { /* right edge of charcell */ XDrawLine (s->dpy, w->pixmap, (se->dark_p ? gc_bg : gc_fg), w->width - w->lbearing, 0, w->width - w->lbearing, height-1); } } # endif /* DEBUG */ w->mask = make_mask (s->xgwa.screen, s->xgwa.visual, w->pixmap); XftDrawDestroy (xftdraw); XFreeGC (s->dpy, gc_fg); XFreeGC (s->dpy, gc_bg); XFreeGC (s->dpy, gc_black); } w->text = strdup (txt); return w; } static void free_word (state *s, word *w) { if (w->text) free (w->text); if (w->pixmap) XFreePixmap (s->dpy, w->pixmap); if (w->mask) XFreePixmap (s->dpy, w->mask); } static sentence * new_sentence (state *st, state *s) { XGCValues gcv; sentence *se = (sentence *) calloc (1, sizeof (*se)); se->fg_gc = XCreateGC (s->dpy, s->b, 0, &gcv); se->anim_state = IN; se->id = ++st->id_tick; return se; } static void free_sentence (state *s, sentence *se) { int i; for (i = 0; i < se->nwords; i++) free_word (s, se->words[i]); if (se->words) free (se->words); if (se->font_name) free (se->font_name); if (se->fg_gc) XFreeGC (s->dpy, se->fg_gc); if (se->xftfont) { XftFontClose (s->dpy, se->xftfont); XftColorFree (s->dpy, s->xgwa.visual, s->xgwa.colormap, &se->xftcolor_fg); XftColorFree (s->dpy, s->xgwa.visual, s->xgwa.colormap, &se->xftcolor_bg); } free (se); } /* free the word, and put its text back at the front of the input queue, to be read next time. */ static void unread_word (state *s, word *w) { if (unread_word_text) abort(); unread_word_text = w->text; w->text = 0; free_word (s, w); } /* Divide each of the words in the sentence into one character words, without changing the positions of those characters. */ static void split_words (state *s, sentence *se) { word **words2; int nwords2 = 0; int i, j; char ***word_chars = (char ***) malloc (se->nwords * sizeof(*word_chars)); for (i = 0; i < se->nwords; i++) { int L; word *ow = se->words[i]; word_chars[i] = utf8_split (ow->text, &L); nwords2 += L; } words2 = (word **) calloc (nwords2, sizeof(*words2)); for (i = 0, j = 0; i < se->nwords; i++) { char **chars = word_chars[i]; word *parent = se->words[i]; int x = parent->x; int y = parent->y; int sx = parent->start_x; int sy = parent->start_y; int tx = parent->target_x; int ty = parent->target_y; int k; for (k = 0; chars[k]; k++) { char *t2 = chars[k]; word *w2 = new_word (s, se, t2, True); words2[j++] = w2; w2->x = x; w2->y = y; w2->start_x = sx; w2->start_y = sy; w2->target_x = tx; w2->target_y = ty; x += w2->width; sx += w2->width; tx += w2->width; } /* This is not invariant when kerning is involved! */ /* if (x != parent->x + parent->width) abort(); */ free (chars); /* but we retain its contents */ free_word (s, parent); } if (j != nwords2) abort(); free (word_chars); free (se->words); se->words = words2; se->nwords = nwords2; } /* Set the source or destination position of the words to be somewhere off screen. */ static void scatter_sentence (state *s, sentence *se) { int i = 0; int off = s->border_width * 4 + 2; int flock_p = ((random() % 4) == 0); int mode = (flock_p ? (random() % 12) : 0); for (i = 0; i < se->nwords; i++) { word *w = se->words[i]; int x, y; int r = (flock_p ? mode : (random() % 4)); int left = -(off + w->rbearing); int top = -(off + w->descent); int right = off - w->lbearing + s->xgwa.width; int bottom = off + w->ascent + s->xgwa.height; switch (r) { /* random positions on the edges */ case 0: x = left; y = random() % s->xgwa.height; break; case 1: x = right; y = random() % s->xgwa.height; break; case 2: x = random() % s->xgwa.width; y = top; break; case 3: x = random() % s->xgwa.width; y = bottom; break; /* straight towards the edges */ case 4: x = left; y = w->target_y; break; case 5: x = right; y = w->target_y; break; case 6: x = w->target_x; y = top; break; case 7: x = w->target_x; y = bottom; break; /* corners */ case 8: x = left; y = top; break; case 9: x = left; y = bottom; break; case 10: x = right; y = top; break; case 11: x = right; y = bottom; break; default: abort(); break; } if (se->anim_state == IN) { w->start_x = x; w->start_y = y; } else { w->start_x = w->x; w->start_y = w->y; w->target_x = x; w->target_y = y; } w->nticks = ((100 + ((random() % 140) + (random() % 140) + (random() % 140))) / s->speed); if (w->nticks < 2) w->nticks = 2; w->tick = 0; } } /* Set the source position of the words to be off the right side, and the destination to be off the left side. */ static void aim_sentence (state *s, sentence *se) { int i = 0; int nticks; int yoff = 0; if (se->nwords <= 0) abort(); /* Have the sentence shift up or down a little bit; not too far, and never let it fall off the top or bottom of the screen before its last character has reached the left edge. */ for (i = 0; i < 10; i++) { int ty = random() % (s->xgwa.height - se->words[0]->ascent); yoff = ty - se->words[0]->target_y; if (yoff < s->xgwa.height/3) /* this one is ok */ break; } for (i = 0; i < se->nwords; i++) { word *w = se->words[i]; w->start_x = w->target_x + s->xgwa.width; w->target_x -= se->width; w->start_y = w->target_y; w->target_y += yoff; } nticks = ((se->words[0]->start_x - se->words[0]->target_x) / (s->speed * 7)); nticks *= (frand(0.9) + frand(0.9) + frand(0.9)); if (nticks < 2) nticks = 2; for (i = 0; i < se->nwords; i++) { word *w = se->words[i]; w->nticks = nticks; w->tick = 0; } } /* Randomize the order of the words in the list (since that changes which ones are "on top".) */ static void shuffle_words (state *s, sentence *se) { int i; for (i = 0; i < se->nwords-1; i++) { int j = i + (random() % (se->nwords - i)); word *swap = se->words[i]; se->words[i] = se->words[j]; se->words[j] = swap; } } /* qsort comparitor */ static int cmp_sentences (const void *aa, const void *bb) { const sentence *a = *(sentence **) aa; const sentence *b = *(sentence **) bb; return ((a ? a->id : 999999) - (b ? b->id : 999999)); } /* Sort the sentences by id, so that sentences added later are on top. */ static void sort_sentences (state *s) { qsort (s->sentences, s->nsentences, sizeof(*s->sentences), cmp_sentences); } /* Re-pick the colors of the text and border */ static void recolor (state *s, sentence *se) { XRenderColor fg, bg; fg.red = (random() % 0x5555) + 0xAAAA; fg.green = (random() % 0x5555) + 0xAAAA; fg.blue = (random() % 0x5555) + 0xAAAA; fg.alpha = 0xFFFF; bg.red = (random() % 0x5555); bg.green = (random() % 0x5555); bg.blue = (random() % 0x5555); bg.alpha = 0xFFFF; se->dark_p = False; if (random() & 1) { XRenderColor swap = fg; fg = bg; bg = swap; se->dark_p = True; } if (se->xftfont) { XftColorFree (s->dpy, s->xgwa.visual, s->xgwa.colormap, &se->xftcolor_fg); XftColorFree (s->dpy, s->xgwa.visual, s->xgwa.colormap, &se->xftcolor_bg); } XftColorAllocValue (s->dpy, s->xgwa.visual, s->xgwa.colormap, &fg, &se->xftcolor_fg); XftColorAllocValue (s->dpy, s->xgwa.visual, s->xgwa.colormap, &bg, &se->xftcolor_bg); } static void align_line (state *s, sentence *se, int line_start, int x, int right) { int off, j; switch (se->alignment) { case LEFT: off = 0; break; case CENTER: off = (right - x) / 2; break; case RIGHT: off = (right - x); break; default: abort(); break; } if (off != 0) for (j = line_start; j < se->nwords; j++) se->words[j]->target_x += off; } /* Fill the sentence with new words: in "page" mode, fills the page with text; in "scroll" mode, just makes one long horizontal sentence. The sentence might have *no* words in it, if no text is currently available. */ static void populate_sentence (state *s, sentence *se) { int i = 0; int left, right, top, x, y; int space = 0; int line_start = 0; Bool done = False; int array_size = 100; se->move_chars_p = (s->mode == CHARS ? True : s->mode == SCROLL ? False : (random() % 3) ? False : True); se->alignment = (random() % 3); recolor (s, se); if (se->words) { for (i = 0; i < se->nwords; i++) free_word (s, se->words[i]); free (se->words); } se->words = (word **) calloc (array_size, sizeof(*se->words)); se->nwords = 0; switch (s->mode) { case PAGE: case CHARS: left = random() % (s->xgwa.width / 3); right = s->xgwa.width - (random() % (s->xgwa.width / 3)); top = random() % (s->xgwa.height * 2 / 3); break; case SCROLL: left = 0; right = s->xgwa.width; top = random() % s->xgwa.height; break; default: abort(); break; } x = left; y = top; while (!done) { char *txt = get_word_text (s); word *w; if (!txt) { if (se->nwords == 0) return; /* If the stream is empty, bail. */ else break; /* If EOF after some words, end of sentence. */ } if (! se->xftfont) /* Got a word: need a font now */ { XGlyphInfo extents; pick_font (s, se); if (y < se->xftfont->ascent) y += se->xftfont->ascent; /* Measure the space character to figure out how much room to leave between words (since we don't actually render that.) */ XftTextExtentsUtf8 (s->dpy, se->xftfont, (FcChar8 *) " ", 1, &extents); space = extents.xOff; } w = new_word (s, se, txt, !se->move_chars_p); free (txt); txt = 0; /* If we have a few words, let punctuation terminate the sentence: stop gathering more words if the last word ends in a period, etc. */ if (se->nwords >= 4) { char c = w->text[strlen(w->text)-1]; if (c == '.' || c == '?' || c == '!') done = True; } /* If the sentence is kind of long already, terminate at commas, etc. */ if (se->nwords >= 12) { char c = w->text[strlen(w->text)-1]; if (c == ',' || c == ';' || c == ':' || c == '-' || c == ')' || c == ']' || c == '}') done = True; } if (se->nwords >= 25) /* ok that's just about enough out of you */ done = True; if ((s->mode == PAGE || s->mode == CHARS) && x + w->rbearing > right) /* wrap line */ { align_line (s, se, line_start, x, right); line_start = se->nwords; x = left; y += se->xftfont->ascent + se->xftfont->descent; /* If we're close to the bottom of the screen, stop, and unread the current word. (But not if this is the first word, otherwise we might just get stuck on it.) */ if (se->nwords > 0 && y + se->xftfont->ascent + se->xftfont->descent > s->xgwa.height) { unread_word (s, w); free (w); /* done = True; */ break; } } w->target_x = x; w->target_y = y; x += w->width + space; se->width = x; if (se->nwords >= (array_size - 1)) { array_size += 100; se->words = (word **) realloc (se->words, array_size * sizeof(*se->words)); if (!se->words) { fprintf (stderr, "%s: out of memory (%d words)\n", progname, array_size); exit (1); } } se->words[se->nwords++] = w; } se->width -= space; switch (s->mode) { case PAGE: case CHARS: align_line (s, se, line_start, x, right); if (se->move_chars_p) split_words (s, se); scatter_sentence (s, se); shuffle_words (s, se); break; case SCROLL: aim_sentence (s, se); break; default: abort(); break; } # ifdef DEBUG if (s->debug_p) { fprintf (stderr, "%s: sentence %d:", progname, se->id); for (i = 0; i < se->nwords; i++) fprintf (stderr, " %s", se->words[i]->text); fprintf (stderr, "\n"); } # endif /* DEBUG */ } /* Render a single word object to the screen. */ static void draw_word (state *s, sentence *se, word *word) { int x, y, w, h; if (! word->pixmap) return; x = word->x + word->lbearing; y = word->y - word->ascent; w = word->rbearing - word->lbearing; h = word->ascent + word->descent; if (x + w < 0 || y + h < 0 || x > s->xgwa.width || y > s->xgwa.height) return; XSetClipMask (s->dpy, se->fg_gc, word->mask); XSetClipOrigin (s->dpy, se->fg_gc, x, y); XCopyArea (s->dpy, word->pixmap, s->b, se->fg_gc, 0, 0, w, h, x, y); } /* If there is room for more sentences, add one. */ static void more_sentences (state *s) { int i; Bool any = False; for (i = 0; i < s->nsentences; i++) { sentence *se = s->sentences[i]; if (! se) { se = new_sentence (s, s); populate_sentence (s, se); if (se->nwords > 0) s->spawn_p = False, any = True; else { free_sentence (s, se); se = 0; } s->sentences[i] = se; if (se) s->latest_sentence = se->id; break; } } if (any) sort_sentences (s); } /* Render all the words to the screen, and run the animation one step. */ static void draw_sentence (state *s, sentence *se) { int i; Bool moved = False; if (! se) return; for (i = 0; i < se->nwords; i++) { word *w = se->words[i]; switch (s->mode) { case PAGE: case CHARS: if (se->anim_state != PAUSE && w->tick <= w->nticks) { int dx = w->target_x - w->start_x; int dy = w->target_y - w->start_y; double r = sin (w->tick * M_PI / (2 * w->nticks)); w->x = w->start_x + (dx * r); w->y = w->start_y + (dy * r); w->tick++; if (se->anim_state == OUT && (s->mode == PAGE || s->mode == CHARS)) w->tick++; /* go out faster */ moved = True; } break; case SCROLL: { int dx = w->target_x - w->start_x; int dy = w->target_y - w->start_y; double r = (double) w->tick / w->nticks; w->x = w->start_x + (dx * r); w->y = w->start_y + (dy * r); w->tick++; moved = (w->tick <= w->nticks); /* Launch a new sentence when: - the front of this sentence is almost off the left edge; - the end of this sentence is almost on screen. - or, randomly */ if (se->anim_state != OUT && i == 0 && se->id == s->latest_sentence) { Bool new_p = (w->x < (s->xgwa.width * 0.4) && w->x + se->width < (s->xgwa.width * 2.1)); Bool rand_p = (new_p ? 0 : !(random() % 2000)); if (new_p || rand_p) { se->anim_state = OUT; s->spawn_p = True; # ifdef DEBUG if (s->debug_p) fprintf (stderr, "%s: OUT %d (x2 = %d%s)\n", progname, se->id, se->words[0]->x + se->width, rand_p ? " randomly" : ""); # endif /* DEBUG */ } } } break; default: abort(); break; } draw_word (s, se, w); } if (moved && se->anim_state == PAUSE) abort(); if (! moved) { switch (se->anim_state) { case IN: se->anim_state = PAUSE; se->pause_tick = (se->nwords * 7 * s->linger); if (se->move_chars_p) se->pause_tick /= 5; scatter_sentence (s, se); shuffle_words (s, se); # ifdef DEBUG if (s->debug_p) fprintf (stderr, "%s: PAUSE %d\n", progname, se->id); # endif /* DEBUG */ break; case PAUSE: if (--se->pause_tick <= 0) { se->anim_state = OUT; s->spawn_p = True; # ifdef DEBUG if (s->debug_p) fprintf (stderr, "%s: OUT %d\n", progname, se->id); # endif /* DEBUG */ } break; case OUT: # ifdef DEBUG if (s->debug_p) fprintf (stderr, "%s: DEAD %d\n", progname, se->id); # endif /* DEBUG */ { int j; for (j = 0; j < s->nsentences; j++) if (s->sentences[j] == se) s->sentences[j] = 0; free_sentence (s, se); } break; default: abort(); break; } } } #ifdef DEBUG /* All of this stuff is for -debug-metrics mode. */ static Pixmap scale_ximage (Screen *screen, Window window, XImage *img, int scale, int margin) { Display *dpy = DisplayOfScreen (screen); int x, y; unsigned width = img->width, height = img->height; Pixmap p2; GC gc; p2 = XCreatePixmap (dpy, window, width*scale, height*scale, img->depth); gc = XCreateGC (dpy, p2, 0, 0); XSetForeground (dpy, gc, BlackPixelOfScreen (screen)); XFillRectangle (dpy, p2, gc, 0, 0, width*scale, height*scale); for (y = 0; y < height; y++) for (x = 0; x < width; x++) { XSetForeground (dpy, gc, XGetPixel (img, x, y)); XFillRectangle (dpy, p2, gc, x*scale, y*scale, scale, scale); } if (scale > 2) { XWindowAttributes xgwa; XColor c; c.red = c.green = c.blue = 0x4444; c.flags = DoRed|DoGreen|DoBlue; XGetWindowAttributes (dpy, window, &xgwa); if (! XAllocColor (dpy, xgwa.colormap, &c)) abort(); XSetForeground (dpy, gc, c.pixel); XDrawRectangle (dpy, p2, gc, 0, 0, width*scale-1, height*scale-1); XDrawRectangle (dpy, p2, gc, margin*scale, margin*scale, width*scale-1, height*scale-1); for (y = 0; y <= height - 2*margin; y++) XDrawLine (dpy, p2, gc, margin*scale, (y+margin)*scale-1, (width-margin)*scale, (y+margin)*scale-1); for (x = 0; x <= width - 2*margin; x++) XDrawLine (dpy, p2, gc, (x+margin)*scale-1, margin*scale, (x+margin)*scale-1, (height-margin)*scale); XFreeColors (dpy, xgwa.colormap, &c.pixel, 1, 0); } XFreeGC (dpy, gc); return p2; } static int check_edge (Display *dpy, Drawable p, GC gc, unsigned msg_x, unsigned msg_y, const char *msg, XImage *img, unsigned x, unsigned y, unsigned dim, unsigned end) { unsigned pt[2]; pt[0] = x; pt[1] = y; end += pt[dim]; for (;;) { if (pt[dim] == end) { XDrawString (dpy, p, gc, msg_x, msg_y, msg, strlen (msg)); return 1; } if (XGetPixel(img, pt[0], pt[1]) & 0xffffff) break; ++pt[dim]; } return 0; } static unsigned long fontglide_draw_metrics (state *s) { unsigned int margin = (s->debug_metrics_antialiasing_p ? 2 : 0); char txt[2], utxt[3], txt2[80]; XChar2b *txt3 = 0; const char *fn = (s->font_override ? s->font_override : "fixed"); char fn2[1024]; XCharStruct c, overall, fake_c; int dir, ascent, descent; int x, y; XGlyphInfo extents; XftColor xftcolor; XftDraw *xftdraw; int sc = s->debug_scale; GC gc; unsigned long red = 0xFFFF0000; /* so shoot me */ unsigned long green = 0xFF00FF00; unsigned long blue = 0xFF6666FF; unsigned long yellow = 0xFFFFFF00; unsigned long cyan = 0xFF004040; int i, j; Drawable dest = s->b ? s->b : s->window; if (sc < 1) sc = 1; /* Self-test these macros to make sure they're symmetrical. */ for (i = 0; i < 1000; i++) { XGlyphInfo g, g2; XRectangle r; c.lbearing = (random()%50)-100; c.rbearing = (random()%50)-100; c.ascent = (random()%50)-100; c.descent = (random()%50)-100; c.width = (random()%50)-100; XCharStruct_to_XGlyphInfo (c, g); XGlyphInfo_to_XCharStruct (g, overall); if (c.lbearing != overall.lbearing) abort(); if (c.rbearing != overall.rbearing) abort(); if (c.ascent != overall.ascent) abort(); if (c.descent != overall.descent) abort(); if (c.width != overall.width) abort(); XCharStruct_to_XGlyphInfo (overall, g2); if (g.x != g2.x) abort(); if (g.y != g2.y) abort(); if (g.xOff != g2.xOff) abort(); if (g.yOff != g2.yOff) abort(); if (g.width != g2.width) abort(); if (g.height != g2.height) abort(); XCharStruct_to_XmbRectangle (overall, r); XmbRectangle_to_XCharStruct (r, c, c.width); if (c.lbearing != overall.lbearing) abort(); if (c.rbearing != overall.rbearing) abort(); if (c.ascent != overall.ascent) abort(); if (c.descent != overall.descent) abort(); if (c.width != overall.width) abort(); } txt[0] = s->debug_metrics_p; txt[1] = 0; /* Convert Unicode code point to UTF-8. */ utxt[utf8_encode(s->debug_metrics_p, utxt, 4)] = 0; txt3 = utf8_to_XChar2b (utxt, 0); if (! s->metrics_font1) s->metrics_font1 = XLoadQueryFont (s->dpy, fn); if (! s->metrics_font2) s->metrics_font2 = XLoadQueryFont (s->dpy, "fixed"); if (! s->metrics_font1) s->metrics_font1 = s->metrics_font2; gc = XCreateGC (s->dpy, dest, 0, 0); XSetFont (s->dpy, gc, s->metrics_font1->fid); # if defined(HAVE_JWXYZ) jwxyz_XSetAntiAliasing (s->dpy, gc, False); # endif if (! s->metrics_xftfont) { s->metrics_xftfont = XftFontOpenXlfd (s->dpy, screen_number(s->xgwa.screen), fn); if (! s->metrics_xftfont) { const char *fn2 = "fixed"; s->metrics_xftfont = XftFontOpenName (s->dpy, screen_number(s->xgwa.screen), fn2); if (s->metrics_xftfont) fn = fn2; else { fprintf (stderr, "%s: XftFontOpen failed on \"%s\" and \"%s\"\n", progname, fn, fn2); exit (1); } } } strcpy (fn2, fn); # ifdef HAVE_JWXYZ { float ss; const char *n = jwxyz_nativeFontName (s->metrics_xftfont->xfont->fid, &ss); sprintf (fn2, "%s %.1f", n, ss); } # endif xftdraw = XftDrawCreate (s->dpy, dest, s->xgwa.visual, s->xgwa.colormap); XftColorAllocName (s->dpy, s->xgwa.visual, s->xgwa.colormap, "white", &xftcolor); XftTextExtentsUtf8 (s->dpy, s->metrics_xftfont, (FcChar8 *) utxt, strlen(utxt), &extents); XTextExtents (s->metrics_font1, txt, strlen(txt), &dir, &ascent, &descent, &overall); c = ((s->debug_metrics_p >= s->metrics_font1->min_char_or_byte2 && s->debug_metrics_p <= s->metrics_font1->max_char_or_byte2) ? s->metrics_font1->per_char[s->debug_metrics_p - s->metrics_font1->min_char_or_byte2] : overall); XSetForeground (s->dpy, gc, BlackPixelOfScreen (s->xgwa.screen)); XFillRectangle (s->dpy, dest, gc, 0, 0, s->xgwa.width, s->xgwa.height); XSetForeground (s->dpy, gc, WhitePixelOfScreen (s->xgwa.screen)); XSetFont (s->dpy, gc, s->metrics_font2->fid); XDrawString (s->dpy, dest, gc, s->xgwa.width / 2, s->xgwa.height - 5, fn2, strlen(fn2)); # ifdef HAVE_JWXYZ { char *name = jwxyz_unicode_character_name ( s->dpy, s->metrics_font1->fid, s->debug_metrics_p); if (!name || !*name) name = strdup("unknown character name"); XDrawString (s->dpy, dest, gc, 10, 10 + 2 * (s->metrics_font2->ascent + s->metrics_font2->descent), name, strlen(name)); free (name); } # endif /* i 0, j 0: top left, XDrawString, char metrics i 1, j 0: bot left, XDrawString, overall metrics, ink escape i 0, j 1: top right, XftDrawStringUtf8, utf8 metrics i 1, j 1: bot right, XDrawString16, 16 metrics, ink escape */ for (j = 0; j < 2; j++) { Bool xft_p = (j != 0); int ww = s->xgwa.width / 2 - 20; int xoff = (j == 0 ? 0 : ww + 20); /* XDrawString only does 8-bit characters, so skip it outside Latin-1. */ if (s->debug_metrics_p >= 256) { if (!xft_p) continue; xoff = 0; ww = s->xgwa.width; } x = (ww - overall.width) / 2; for (i = 0; i < 2; i++) { XCharStruct cc; int x1 = xoff + ww * 0.18; int x2 = xoff + ww * 0.82; int x3 = xoff + ww; int pixw, pixh; Pixmap p; y = 80; { int h = sc * (ascent + descent); int min = (ascent + descent) * 4; if (h < min) h = min; if (i == 1) h *= 3; y += h; } memset (&fake_c, 0, sizeof(fake_c)); if (!xft_p && i == 0) cc = c; else if (!xft_p && i == 1) cc = overall; else if (xft_p && i == 0) { /* Measure the glyph in the Xft way */ XGlyphInfo extents; XftTextExtentsUtf8 (s->dpy, s->metrics_xftfont, (FcChar8 *) utxt, strlen(utxt), &extents); XGlyphInfo_to_XCharStruct (extents, fake_c); cc = fake_c; } else if (xft_p) { /* Measure the glyph in the 16-bit way */ int dir, ascent, descent; XTextExtents16 (s->metrics_font1, txt3, 1, &dir, &ascent, &descent, &fake_c); cc = fake_c; } pixw = margin * 2 + cc.rbearing - cc.lbearing; pixh = margin * 2 + cc.ascent + cc.descent; p = (pixw > 0 && pixh > 0 ? XCreatePixmap (s->dpy, dest, pixw, pixh, s->xgwa.depth) : 0); if (p) { Pixmap p2; GC gc2 = XCreateGC (s->dpy, p, 0, 0); # ifdef HAVE_JWXYZ jwxyz_XSetAntiAliasing (s->dpy, gc2, False); # endif XSetFont (s->dpy, gc2, s->metrics_font1->fid); XSetForeground (s->dpy, gc2, BlackPixelOfScreen (s->xgwa.screen)); XFillRectangle (s->dpy, p, gc2, 0, 0, pixw, pixh); XSetForeground (s->dpy, gc, WhitePixelOfScreen (s->xgwa.screen)); XSetForeground (s->dpy, gc2, WhitePixelOfScreen (s->xgwa.screen)); # ifdef HAVE_JWXYZ jwxyz_XSetAntiAliasing (s->dpy, gc2, s->debug_metrics_antialiasing_p); # endif if (xft_p && i == 0) { XftDraw *xftdraw2 = XftDrawCreate (s->dpy, p, s->xgwa.visual, s->xgwa.colormap); XftDrawStringUtf8 (xftdraw2, &xftcolor, s->metrics_xftfont, -cc.lbearing + margin, cc.ascent + margin, (FcChar8 *) utxt, strlen(utxt)); XftDrawDestroy (xftdraw2); } else if (xft_p) XDrawString16 (s->dpy, p, gc2, -cc.lbearing + margin, cc.ascent + margin, txt3, 1); else XDrawString (s->dpy, p, gc2, -cc.lbearing + margin, cc.ascent + margin, txt, strlen(txt)); { unsigned x2, y2; XImage *img = XGetImage (s->dpy, p, 0, 0, pixw, pixh, ~0L, ZPixmap); XImage *img2; if (i == 1) { unsigned w = pixw - margin * 2, h = pixh - margin * 2; if (margin > 0) { /* Check for ink escape. */ unsigned long ink = 0; for (y2 = 0; y2 != pixh; ++y2) for (x2 = 0; x2 != pixw; ++x2) { /* Sloppy... */ if (! (x2 >= margin && x2 < pixw - margin && y2 >= margin && y2 < pixh - margin)) ink |= XGetPixel (img, x2, y2); } if (ink & 0xFFFFFF) { XSetFont (s->dpy, gc, s->metrics_font2->fid); XDrawString (s->dpy, dest, gc, xoff + 10, 40, "Ink escape!", 11); } } /* ...And wasted space. */ if (w && h) { if (check_edge (s->dpy, dest, gc, 120, 60, "left", img, margin, margin, 1, h) | check_edge (s->dpy, dest, gc, 160, 60, "right", img, margin + w - 1, margin, 1, h) | check_edge (s->dpy, dest, gc, 200, 60, "top", img, margin, margin, 0, w) | check_edge (s->dpy, dest, gc, 240, 60, "bottom", img, margin, margin + h - 1, 0, w)) { XSetFont (s->dpy, gc, s->metrics_font2->fid); XDrawString (s->dpy, dest, gc, xoff + 10, 60, "Wasted space: ", 14); } } } if (s->debug_metrics_antialiasing_p) { /* Draw a dark cyan boundary around antialiased glyphs */ img2 = XCreateImage (s->dpy, s->xgwa.visual, img->depth, ZPixmap, 0, NULL, img->width, img->height, img->bitmap_pad, 0); img2->data = malloc (img->bytes_per_line * img->height); for (y2 = 0; y2 != pixh; ++y2) for (x2 = 0; x2 != pixw; ++x2) { unsigned long px = XGetPixel (img, x2, y2); if ((px & 0xffffff) == 0) { unsigned long neighbors = 0; if (x2) neighbors |= XGetPixel (img, x2 - 1, y2); if (x2 != pixw - 1) neighbors |= XGetPixel (img, x2 + 1, y2); if (y2) neighbors |= XGetPixel (img, x2, y2 - 1); if (y2 != pixh - 1) neighbors |= XGetPixel (img, x2, y2 + 1); XPutPixel (img2, x2, y2, (neighbors & 0xffffff ? cyan : BlackPixelOfScreen (s->xgwa.screen))); } else { XPutPixel (img2, x2, y2, px); } } } else { img2 = img; img = NULL; } p2 = scale_ximage (s->xgwa.screen, s->window, img2, sc, margin); if (img) XDestroyImage (img); XDestroyImage (img2); } XCopyArea (s->dpy, p2, dest, gc, 0, 0, sc*pixw, sc*pixh, xoff + x + sc * (cc.lbearing - margin), y - sc * (cc.ascent + margin)); XFreePixmap (s->dpy, p); XFreePixmap (s->dpy, p2); XFreeGC (s->dpy, gc2); } if (i == 0) { XSetFont (s->dpy, gc, s->metrics_font1->fid); XSetForeground (s->dpy, gc, WhitePixelOfScreen (s->xgwa.screen)); # ifdef HAVE_JWXYZ jwxyz_XSetAntiAliasing (s->dpy, gc, s->debug_metrics_antialiasing_p); # endif sprintf (txt2, "%s [XX%sXX] [%s%s%s%s]", (xft_p ? utxt : txt), (xft_p ? utxt : txt), (xft_p ? utxt : txt), (xft_p ? utxt : txt), (xft_p ? utxt : txt), (xft_p ? utxt : txt)); if (xft_p) XftDrawStringUtf8 (xftdraw, &xftcolor, s->metrics_xftfont, xoff + x/2 + (sc*cc.rbearing/2) - cc.rbearing/2 + 40, ascent + 10, (FcChar8 *) txt2, strlen(txt2)); else XDrawString (s->dpy, dest, gc, xoff + x/2 + (sc*cc.rbearing/2) - cc.rbearing/2, ascent + 10, txt2, strlen(txt2)); # ifdef HAVE_JWXYZ jwxyz_XSetAntiAliasing (s->dpy, gc, False); # endif XSetFont (s->dpy, gc, s->metrics_font2->fid); if (xft_p) { char *uptr; char *tptr = txt2 + sprintf(txt2, "U+%04lX", s->debug_metrics_p); *tptr++ = " ?_"[s->entering_unicode_p]; *tptr++ = ' '; uptr = utxt; while (*uptr) { tptr += sprintf (tptr, "0%03o ", (unsigned char) *uptr); ++uptr; } *tptr++ = ' '; uptr = utxt; while (*uptr) { tptr += sprintf (tptr, "%02x ", (unsigned char) *uptr); ++uptr; } } else sprintf (txt2, "%c %3ld 0%03lo 0x%02lx%s", (char)s->debug_metrics_p, s->debug_metrics_p, s->debug_metrics_p, s->debug_metrics_p, (txt[0] < s->metrics_font1->min_char_or_byte2 ? " *" : "")); XDrawString (s->dpy, dest, gc, xoff + 10, 20, txt2, strlen(txt2)); } # ifdef HAVE_JWXYZ jwxyz_XSetAntiAliasing (s->dpy, gc, True); # endif { const char *ss = (j == 0 ? (i == 0 ? "char" : "overall") : (i == 0 ? "utf8" : "16 bit")); XSetFont (s->dpy, gc, s->metrics_font2->fid); XSetForeground (s->dpy, gc, red); sprintf (txt2, "%s ascent %d", ss, ascent); XDrawString (s->dpy, dest, gc, xoff + 10, y - sc*ascent - 2, txt2, strlen(txt2)); XDrawLine (s->dpy, dest, gc, xoff, y - sc*ascent, x3, y - sc*ascent); sprintf (txt2, "%s descent %d", ss, descent); XDrawString (s->dpy, dest, gc, xoff + 10, y + sc*descent - 2, txt2, strlen(txt2)); XDrawLine (s->dpy, dest, gc, xoff, y + sc*descent, x3, y + sc*descent); } /* ascent, descent, baseline */ XSetForeground (s->dpy, gc, green); sprintf (txt2, "ascent %d", cc.ascent); if (cc.ascent != 0) XDrawString (s->dpy, dest, gc, x1, y - sc*cc.ascent - 2, txt2, strlen(txt2)); XDrawLine (s->dpy, dest, gc, x1, y - sc*cc.ascent, x2, y - sc*cc.ascent); sprintf (txt2, "descent %d", cc.descent); if (cc.descent != 0) XDrawString (s->dpy, dest, gc, x1, y + sc*cc.descent - 2, txt2, strlen(txt2)); XDrawLine (s->dpy, dest, gc, x1, y + sc*cc.descent, x2, y + sc*cc.descent); XSetForeground (s->dpy, gc, yellow); strcpy (txt2, "baseline"); XDrawString (s->dpy, dest, gc, x1, y - 2, txt2, strlen(txt2)); XDrawLine (s->dpy, dest, gc, x1, y, x2, y); /* origin, width */ XSetForeground (s->dpy, gc, blue); strcpy (txt2, "origin"); XDrawString (s->dpy, dest, gc, xoff + x + 2, y + sc*descent + 50, txt2, strlen(txt2)); XDrawLine (s->dpy, dest, gc, xoff + x, y - sc*(ascent - 10), xoff + x, y + sc*(descent + 10)); sprintf (txt2, "width %d", cc.width); XDrawString (s->dpy, dest, gc, xoff + x + sc*cc.width + 2, y + sc*descent + 60, txt2, strlen(txt2)); XDrawLine (s->dpy, dest, gc, xoff + x + sc*cc.width, y - sc*(ascent - 10), xoff + x + sc*cc.width, y + sc*(descent + 10)); /* lbearing, rbearing */ XSetForeground (s->dpy, gc, green); sprintf (txt2, "lbearing %d", cc.lbearing); XDrawString (s->dpy, dest, gc, xoff + x + sc*cc.lbearing + 2, y + sc * descent + 30, txt2, strlen(txt2)); XDrawLine (s->dpy, dest, gc, xoff + x + sc*cc.lbearing, y - sc*ascent, xoff + x + sc*cc.lbearing, y + sc*descent + 20); sprintf (txt2, "rbearing %d", cc.rbearing); XDrawString (s->dpy, dest, gc, xoff + x + sc*cc.rbearing + 2, y + sc * descent + 40, txt2, strlen(txt2)); XDrawLine (s->dpy, dest, gc, xoff + x + sc*cc.rbearing, y - sc*ascent, xoff + x + sc*cc.rbearing, y + sc*descent + 40); /* y += sc * (ascent + descent) * 2; */ } } if (dest != s->window) XCopyArea (s->dpy, dest, s->window, s->bg_gc, 0, 0, s->xgwa.width, s->xgwa.height, 0, 0); XFreeGC (s->dpy, gc); XftColorFree (s->dpy, s->xgwa.visual, s->xgwa.colormap, &xftcolor); XftDrawDestroy (xftdraw); free (txt3); return s->frame_delay; } # endif /* DEBUG */ /* Render all the words to the screen, and run the animation one step. Clear screen first, swap buffers after. */ static unsigned long fontglide_draw (Display *dpy, Window window, void *closure) { state *s = (state *) closure; int i; # ifdef DEBUG if (s->debug_metrics_p) return fontglide_draw_metrics (closure); # endif /* DEBUG */ if (s->spawn_p) more_sentences (s); if (!s->trails_p) XFillRectangle (s->dpy, s->b, s->bg_gc, 0, 0, s->xgwa.width, s->xgwa.height); for (i = 0; i < s->nsentences; i++) draw_sentence (s, s->sentences[i]); # ifdef DEBUG if (s->debug_p && (s->prev_font_name || s->next_font_name)) { if (! s->label_gc) { if (! s->metrics_font2) s->metrics_font2 = XLoadQueryFont (s->dpy, "fixed"); s->label_gc = XCreateGC (dpy, s->b, 0, 0); XSetFont (s->dpy, s->label_gc, s->metrics_font2->fid); } if (s->prev_font_name) XDrawString (s->dpy, s->b, s->label_gc, 10, 10 + s->metrics_font2->ascent, s->prev_font_name, strlen(s->prev_font_name)); if (s->next_font_name) XDrawString (s->dpy, s->b, s->label_gc, 10, 10 + s->metrics_font2->ascent * 2, s->next_font_name, strlen(s->next_font_name)); } # endif /* DEBUG */ #ifdef HAVE_DOUBLE_BUFFER_EXTENSION if (s->backb) { XdbeSwapInfo info[1]; info[0].swap_window = s->window; info[0].swap_action = (s->dbeclear_p ? XdbeBackground : XdbeUndefined); XdbeSwapBuffers (s->dpy, info, 1); } else #endif /* HAVE_DOUBLE_BUFFER_EXTENSION */ if (s->dbuf) { XCopyArea (s->dpy, s->b, s->window, s->bg_gc, 0, 0, s->xgwa.width, s->xgwa.height, 0, 0); } return s->frame_delay; } /* When the subprocess has generated some output, this reads as much as it can into s->buf at s->buf_tail. */ static void drain_input (state *s) { while (s->buf_tail < sizeof(s->buf) - 2) { int c = textclient_getc (s->tc); if (c > 0) s->buf[s->buf_tail++] = (char) c; else break; } } /* Window setup and resource loading */ static void * fontglide_init (Display *dpy, Window window) { XGCValues gcv; state *s = (state *) calloc (1, sizeof(*s)); s->dpy = dpy; s->window = window; s->frame_delay = get_integer_resource (dpy, "delay", "Integer"); XGetWindowAttributes (s->dpy, s->window, &s->xgwa); s->font_override = get_string_resource (dpy, "font", "Font"); if (s->font_override && (!*s->font_override || *s->font_override == '(')) s->font_override = 0; s->charset = get_string_resource (dpy, "fontCharset", "FontCharset"); s->border_width = get_integer_resource (dpy, "fontBorderWidth", "Integer"); if (s->border_width < 0 || s->border_width > 20) s->border_width = 1; s->speed = get_float_resource (dpy, "speed", "Float"); if (s->speed <= 0 || s->speed > 200) s->speed = 1; s->linger = get_float_resource (dpy, "linger", "Float"); if (s->linger <= 0 || s->linger > 200) s->linger = 1; s->trails_p = get_boolean_resource (dpy, "trails", "Trails"); # ifdef DEBUG s->debug_p = get_boolean_resource (dpy, "debug", "Debug"); s->debug_metrics_p = (get_boolean_resource (dpy, "debugMetrics", "Debug") ? 199 : 0); s->debug_scale = 6; # ifdef HAVE_JWXYZ if (s->debug_metrics_p && !s->font_override) s->font_override = "Helvetica Bold 16"; # endif # endif /* DEBUG */ s->dbuf = get_boolean_resource (dpy, "doubleBuffer", "Boolean"); # ifdef HAVE_JWXYZ /* Don't second-guess Quartz's double-buffering */ s->dbuf = False; # endif # ifdef DEBUG if (s->debug_metrics_p) s->trails_p = False; # endif /* DEBUG */ if (s->trails_p) s->dbuf = False; /* don't need it in this case */ { const char *ss = get_string_resource (dpy, "mode", "Mode"); if (!ss || !*ss || !strcasecmp (ss, "random")) s->mode = ((random() % 2) ? SCROLL : PAGE); else if (!strcasecmp (ss, "scroll")) s->mode = SCROLL; else if (!strcasecmp (ss, "page")) s->mode = PAGE; else if (!strcasecmp (ss, "chars") || !strcasecmp (ss, "char")) s->mode = CHARS; else { fprintf (stderr, "%s: `mode' must be `scroll', `page', or `random', not `%s'\n", progname, ss); } } if (s->dbuf) { #ifdef HAVE_DOUBLE_BUFFER_EXTENSION s->dbeclear_p = get_boolean_resource (dpy, "useDBEClear", "Boolean"); if (s->dbeclear_p) s->b = xdbe_get_backbuffer (dpy, window, XdbeBackground); else s->b = xdbe_get_backbuffer (dpy, window, XdbeUndefined); s->backb = s->b; #endif /* HAVE_DOUBLE_BUFFER_EXTENSION */ if (!s->b) { s->ba = XCreatePixmap (s->dpy, s->window, s->xgwa.width, s->xgwa.height, s->xgwa.depth); s->b = s->ba; } } else { s->b = s->window; } gcv.foreground = get_pixel_resource (s->dpy, s->xgwa.colormap, "background", "Background"); s->bg_gc = XCreateGC (s->dpy, s->b, GCForeground, &gcv); s->nsentences = 5; /* #### */ s->sentences = (sentence **) calloc (s->nsentences, sizeof (sentence *)); s->spawn_p = True; s->early_p = True; s->start_time = time ((time_t *) 0); s->tc = textclient_open (dpy); return s; } static Bool fontglide_event (Display *dpy, Window window, void *closure, XEvent *event) { # ifdef DEBUG state *s = (state *) closure; if (! s->debug_metrics_p) return False; if (event->xany.type == KeyPress) { static const unsigned long max = 0x110000; KeySym keysym; char c = 0; XLookupString (&event->xkey, &c, 1, &keysym, 0); if (s->entering_unicode_p > 0) { unsigned digit; unsigned long new_char = 0; if (c >= 'a' && c <= 'f') digit = c + 0xa - 'a'; else if (c >= 'A' && c <= 'F') digit = c + 0xa - 'A'; else if (c >= '0' && c <= '9') digit = c + 0 - '0'; else { s->entering_unicode_p = 0; return True; } if (s->entering_unicode_p == 1) new_char = 0; else if (s->entering_unicode_p == 2) new_char = s->debug_metrics_p; new_char = (new_char << 4) | digit; if (new_char > 0 && new_char < max) { s->debug_metrics_p = new_char; s->entering_unicode_p = 2; } else s->entering_unicode_p = 0; return True; } if (c == '\t') s->debug_metrics_antialiasing_p ^= True; else if (c == 3 || c == 27) exit (0); else if (c >= ' ') s->debug_metrics_p = (unsigned char) c; else if (keysym == XK_Left || keysym == XK_Right) { s->debug_metrics_p += (keysym == XK_Left ? -1 : 1); if (s->debug_metrics_p >= max) s->debug_metrics_p = 1; else if (s->debug_metrics_p <= 0) s->debug_metrics_p = max - 1; return True; } else if (keysym == XK_Prior) s->debug_metrics_p = (s->debug_metrics_p + max - 0x80) % max; else if (keysym == XK_Next) s->debug_metrics_p = (s->debug_metrics_p + 0x80) % max; else if (keysym == XK_Up) s->debug_scale++; else if (keysym == XK_Down) s->debug_scale = (s->debug_scale > 1 ? s->debug_scale-1 : 1); else if (keysym == XK_F1) s->entering_unicode_p = 1; else return False; return True; } # endif /* DEBUG */ return False; } static void fontglide_reshape (Display *dpy, Window window, void *closure, unsigned int w, unsigned int h) { state *s = (state *) closure; XGetWindowAttributes (s->dpy, s->window, &s->xgwa); if (s->dbuf && s->ba) { XFreePixmap (s->dpy, s->ba); s->ba = XCreatePixmap (s->dpy, s->window, s->xgwa.width, s->xgwa.height, s->xgwa.depth); XFillRectangle (s->dpy, s->ba, s->bg_gc, 0, 0, s->xgwa.width, s->xgwa.height); s->b = s->ba; } } static void fontglide_free (Display *dpy, Window window, void *closure) { state *s = (state *) closure; textclient_close (s->tc); #ifdef DEBUG if (s->metrics_xftfont) XftFontClose (s->dpy, s->metrics_xftfont); if (s->metrics_font1) XFreeFont (s->dpy, s->metrics_font1); if (s->metrics_font2 && s->metrics_font1 != s->metrics_font2) XFreeFont (s->dpy, s->metrics_font2); if (s->prev_font_name) free (s->prev_font_name); if (s->next_font_name) free (s->next_font_name); if (s->label_gc) XFreeGC (dpy, s->label_gc); #endif /* #### there's more to free here */ free (s); } static const char *fontglide_defaults [] = { ".background: #000000", ".foreground: #DDDDDD", ".borderColor: #555555", "*delay: 10000", "*program: xscreensaver-text", "*usePty: false", "*mode: random", ".font: (default)", /* I'm not entirely clear on whether the charset of an XLFD has any meaning when Xft is being used. */ "*fontCharset: iso8859-1", /*"*fontCharset: iso10646-1", */ /*"*fontCharset: *-*",*/ "*fontBorderWidth: 2", "*speed: 1.0", "*linger: 1.0", "*trails: False", # ifdef DEBUG "*debug: False", "*debugMetrics: False", # endif /* DEBUG */ "*doubleBuffer: True", # ifdef HAVE_DOUBLE_BUFFER_EXTENSION "*useDBE: True", "*useDBEClear: True", # endif /* HAVE_DOUBLE_BUFFER_EXTENSION */ 0 }; static XrmOptionDescRec fontglide_options [] = { { "-mode", ".mode", XrmoptionSepArg, 0 }, { "-scroll", ".mode", XrmoptionNoArg, "scroll" }, { "-page", ".mode", XrmoptionNoArg, "page" }, { "-random", ".mode", XrmoptionNoArg, "random" }, { "-delay", ".delay", XrmoptionSepArg, 0 }, { "-speed", ".speed", XrmoptionSepArg, 0 }, { "-linger", ".linger", XrmoptionSepArg, 0 }, { "-program", ".program", XrmoptionSepArg, 0 }, { "-font", ".font", XrmoptionSepArg, 0 }, { "-fn", ".font", XrmoptionSepArg, 0 }, { "-bw", ".fontBorderWidth", XrmoptionSepArg, 0 }, { "-trails", ".trails", XrmoptionNoArg, "True" }, { "-no-trails", ".trails", XrmoptionNoArg, "False" }, { "-db", ".doubleBuffer", XrmoptionNoArg, "True" }, { "-no-db", ".doubleBuffer", XrmoptionNoArg, "False" }, # ifdef DEBUG { "-debug", ".debug", XrmoptionNoArg, "True" }, { "-debug-metrics", ".debugMetrics", XrmoptionNoArg, "True" }, # endif /* DEBUG */ { 0, 0, 0, 0 } }; XSCREENSAVER_MODULE ("FontGlide", fontglide) xscreensaver-5.36/hacks/apple2.c000664 000767 000024 00000057036 12701612216 016571 0ustar00jwzstaff000000 000000 /* xscreensaver, Copyright (c) 1998-2010 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. * * Apple ][ CRT simulator, by Trevor Blackwell * with additional work by Jamie Zawinski */ #include #include "screenhackI.h" #include "apple2.h" #ifdef HAVE_XSHM_EXTENSION #include "xshm.h" #endif /* * Implementation notes * * The A2 had 3 display modes: text, lores, and hires. Text was 40x24, and it * disabled color in the TV. Lores gave you 40x48 graphics blocks, using the * same memory as the text screen. Each could be one of 16 colors. Hires gave * you 280x192 pixels. Odd pixels were blue or purple, and even pixels were * orange or green depending on the setting of the high bit in each byte. * * The graphics modes could also have 4 lines of text at the bottom. This was * fairly unreadable if you had a color monitor. * * Each mode had 2 different screens using different memory space. In hires * mode this was sometimes used for double buffering, but more often the lower * screen was full of code/data and the upper screen was used for display, so * you got random garbage on the screen. * * The text font is based on X's standard 6x10 font, with a few tweaks like * putting a slash across the zero. * * To use this, you'll call apple2(display, window, duration, * controller) where the function controller defines what will happen. * See bsod.c and apple2-main.c for example controllers. The * controller function gets called whenever the machine ready to start * something new. By setting sim->printing or sim->typing, it'll be * busy for some time spitting characters out one at a time. By * setting *next_actiontime+=X.X, it'll pause and just update the screen * for that long before calling the controller function again. * * By setting stepno to A2CONTROLLER_DONE, the loop will end. It will also end * after the time specified by the delay parameter. In either case, it calls * the controller with stepno==A2CONTROLLER_FREE to allow it to release any * memory. * * The void* apple2_sim_t::controller_data is for the use of the controller. * It will be initialize to NULL, and the controller can store its own state * there. * */ void a2_scroll(apple2_state_t *st) { int i; st->textlines[st->cursy][st->cursx] |= 0xc0; /* turn off cursor */ for (i=0; i<23; i++) { memcpy(st->textlines[i],st->textlines[i+1],40); } memset(st->textlines[23],0xe0,40); } static void a2_printc_1(apple2_state_t *st, char c, int scroll_p) { st->textlines[st->cursy][st->cursx] |= 0xc0; /* turn off blink */ if (c == '\n') /* ^J == NL */ { if (st->cursy==23) { if (scroll_p) a2_scroll(st); } else { st->cursy++; } st->cursx=0; } else if (c == 014) /* ^L == CLS, Home */ { a2_cls(st); a2_goto(st,0,0); } else if (c == '\t') /* ^I == tab */ { a2_goto(st, st->cursy, (st->cursx+8)&~7); } else if (c == 010) /* ^H == backspace */ { st->textlines[st->cursy][st->cursx]=0xe0; a2_goto(st, st->cursy, st->cursx-1); } else if (c == '\r') /* ^M == CR */ { st->cursx=0; } else { st->textlines[st->cursy][st->cursx]=c ^ 0xc0; st->cursx++; if (st->cursx==40) { if (st->cursy==23) { if (scroll_p) a2_scroll(st); } else { st->cursy++; } st->cursx=0; } } st->textlines[st->cursy][st->cursx] &= 0x7f; /* turn on blink */ } void a2_printc(apple2_state_t *st, char c) { a2_printc_1(st, c, 1); } void a2_printc_noscroll(apple2_state_t *st, char c) { a2_printc_1(st, c, 0); } void a2_prints(apple2_state_t *st, char *s) { while (*s) a2_printc(st, *s++); } void a2_goto(apple2_state_t *st, int r, int c) { if (r > 23) r = 23; if (c > 39) c = 39; st->textlines[st->cursy][st->cursx] |= 0xc0; /* turn off blink */ st->cursy=r; st->cursx=c; st->textlines[st->cursy][st->cursx] &= 0x7f; /* turn on blink */ } void a2_cls(apple2_state_t *st) { int i; for (i=0; i<24; i++) { memset(st->textlines[i],0xe0,40); } } void a2_clear_gr(apple2_state_t *st) { int i; for (i=0; i<24; i++) { memset(st->textlines[i],0x00,40); } } void a2_clear_hgr(apple2_state_t *st) { int i; for (i=0; i<192; i++) { memset(st->hireslines[i],0,40); } } void a2_invalidate(apple2_state_t *st) { } void a2_poke(apple2_state_t *st, int addr, int val) { if (addr>=0x400 && addr<0x800) { /* text memory */ int row=((addr&0x380)/0x80) + ((addr&0x7f)/0x28)*8; int col=(addr&0x7f)%0x28; if (row<24 && col<40) { st->textlines[row][col]=val; if (!(st->gr_mode&(A2_GR_HIRES)) || (!(st->gr_mode&(A2_GR_FULL)) && row>=20)) { } } } else if (addr>=0x2000 && addr<0x4000) { int row=(((addr&0x1c00) / 0x400) * 1 + ((addr&0x0380) / 0x80) * 8 + ((addr&0x0078) / 0x28) * 64); int col=((addr&0x07f)%0x28); if (row<192 && col<40) { st->hireslines[row][col]=val; if (st->gr_mode&A2_GR_HIRES) { } } } } void a2_hplot(apple2_state_t *st, int hcolor, int x, int y) { int highbit,run; highbit=((hcolor<<5)&0x80) ^ 0x80; /* capture bit 2 into bit 7 */ if (y<0 || y>=192 || x<0 || x>=280) return; for (run=0; run<2 && x<280; run++) { unsigned char *vidbyte = &st->hireslines[y][x/7]; unsigned char whichbit=1<<(x%7); int masked_bit; *vidbyte = (*vidbyte & 0x7f) | highbit; /* use either bit 0 or 1 of hcolor for odd or even pixels */ masked_bit = (hcolor>>(1-(x&1)))&1; /* Set whichbit to 1 or 0 depending on color */ *vidbyte = (*vidbyte & ~whichbit) | (masked_bit ? whichbit : 0); x++; } } void a2_hline(apple2_state_t *st, int hcolor, int x1, int y1, int x2, int y2) { int dx,dy,incx,incy,x,y,balance; /* Bresenham's line drawing algorithm */ if (x2>=x1) { dx=x2-x1; incx=1; } else { dx=x1-x2; incx=-1; } if (y2>=y1) { dy=y2-y1; incy=1; } else { dy=y1-y2; incy=-1; } x=x1; y=y1; if (dx>=dy) { dy*=2; balance=dy-dx; dx*=2; while (x!=x2) { a2_hplot(st, hcolor, x, y); if (balance>=0) { y+=incy; balance-=dx; } balance+=dy; x+=incx; } a2_hplot(st, hcolor, x, y); } else { dx*=2; balance=dx-dy; dy*=2; while (y!=y2) { a2_hplot(st, hcolor, x, y); if (balance>=0) { x+=incx; balance-=dy; } balance+=dx; y+=incy; } a2_hplot(st, hcolor, x, y); } } void a2_plot(apple2_state_t *st, int color, int x, int y) { int textrow=y/2; unsigned char byte; if (x<0 || x>=40 || y<0 || y>=48) return; byte=st->textlines[textrow][x]; if (y&1) { byte = (byte&0xf0) | (color&0x0f); } else { byte = (byte&0x0f) | ((color&0x0f)<<4); } st->textlines[textrow][x]=byte; } void a2_display_image_loading(apple2_state_t *st, unsigned char *image, int lineno) { /* When loading images,it would normally just load the big binary dump into screen memory while you watched. Because of the way screen memory was laid out, it wouldn't load from the top down, but in a funny interleaved way. You should call this with lineno increasing from 0 thru 191 over a period of a few seconds. */ int row=(((lineno / 24) % 8) * 1 + ((lineno / 3 ) % 8) * 8 + ((lineno / 1 ) % 3) * 64); memcpy (st->hireslines[row], &image[row * 40], 40); } /* Simulate plausible initial memory contents for running a program. */ void a2_init_memory_active(apple2_sim_t *sim) { int i,j,x,y,c; int addr=0; apple2_state_t *st=sim->st; while (addr<0x4000) { int n; switch (random()%4) { case 0: case 1: n=random()%500; for (i=0; itext_im->width); for (i=0; i<100; i++) { for (y=0; y<8; y++) { c=0; for (j=0; j<8; j++) { c |= XGetPixel(sim->text_im, (x+j)%sim->text_im->width, y)<text_im->width); } break; case 3: if (addr>0x2000) { n=random()%200; for (i=0; idpy, sim->window, (char *) apple2_font_bits, apple2_font_width, apple2_font_height, 1, 0, 1); if (apple2_font_width != 64*7) abort(); if (apple2_font_height != 8) abort(); sim->text_im = XGetImage(sim->dpy, text_pm, 0, 0, apple2_font_width, apple2_font_height, ~0L, ZPixmap); XFreePixmap(sim->dpy, text_pm); } #else /* 0 */ /* This table lists fixes for characters that differ from the standard 6x10 font. Each encodes a pixel, as (charindex*7 + x) + (y<<10) + (value<<15) where value is 0 for white and 1 for black. */ static const unsigned short a2_fixfont[] = { /* Fix $ */ 0x8421, 0x941d, /* Fix % */ 0x8024, 0x0028, 0x8425, 0x0426, 0x0825, 0x1027, 0x1426, 0x9427, 0x1824, 0x9828, /* Fix * */ 0x8049, 0x8449, 0x8849, 0x0c47, 0x0c48, 0x0c4a, 0x0c4b, 0x9049, 0x9449, 0x9849, /* Fix , */ 0x9057, 0x1458, 0x9856, 0x1857, 0x1c56, /* Fix . */ 0x1465, 0x1864, 0x1866, 0x1c65, /* Fix / */ 0x006e, 0x186a, /* Fix 0 */ 0x8874, 0x8c73, 0x9072, /* Fix 1 */ 0x0878, 0x1878, 0x187c, /* Fix 5 */ 0x8895, 0x0c94, 0x0c95, /* Fix 6 */ 0x809f, 0x8c9c, 0x109c, /* Fix 7 */ 0x8ca4, 0x0ca5, 0x90a3, 0x10a4, /* Fix 9 */ 0x08b3, 0x8cb3, 0x98b0, /* Fix : */ 0x04b9, 0x08b8, 0x08ba, 0x0cb9, 0x90b9, 0x14b9, 0x18b8, 0x18b9, 0x18ba, 0x1cb9, /* Fix ; */ 0x04c0, 0x08bf, 0x08c1, 0x0cc0, 0x90c0, 0x14c1, 0x98bf, 0x18c0, 0x1cbf, /* Fix < */ 0x80c8, 0x00c9, 0x84c7, 0x04c8, 0x88c6, 0x08c7, 0x8cc5, 0x0cc6, 0x90c6, 0x10c7, 0x94c7, 0x14c8, 0x98c8, 0x18c9, /* Fix > */ 0x80d3, 0x00d4, 0x84d4, 0x04d5, 0x88d5, 0x08d6, 0x8cd6, 0x0cd7, 0x90d5, 0x10d6, 0x94d4, 0x14d5, 0x98d3, 0x18d4, /* Fix @ */ 0x88e3, 0x08e4, 0x8ce4, 0x98e5, /* Fix B */ 0x84ef, 0x04f0, 0x88ef, 0x08f0, 0x8cef, 0x90ef, 0x10f0, 0x94ef, 0x14f0, /* Fix D */ 0x84fd, 0x04fe, 0x88fd, 0x08fe, 0x8cfd, 0x0cfe, 0x90fd, 0x10fe, 0x94fd, 0x14fe, /* Fix G */ 0x8116, 0x0516, 0x9916, /* Fix J */ 0x0129, 0x012a, 0x052a, 0x852b, 0x092a, 0x892b, 0x0d2a, 0x8d2b, 0x112a, 0x912b, 0x152a, 0x952b, 0x992a, /* Fix M */ 0x853d, 0x853f, 0x093d, 0x893e, 0x093f, /* Fix Q */ 0x915a, 0x155a, 0x955b, 0x155c, 0x195b, 0x995c, 0x1d5c, /* Fix V */ 0x8d7b, 0x0d7c, 0x0d7e, 0x8d7f, 0x917b, 0x117c, 0x117e, 0x917f, /* Fix [ */ 0x819e, 0x81a2, 0x859e, 0x899e, 0x8d9e, 0x919e, 0x959e, 0x999e, 0x99a2, /* Fix \ */ 0x01a5, 0x19a9, /* Fix ] */ 0x81ac, 0x81b0, 0x85b0, 0x89b0, 0x8db0, 0x91b0, 0x95b0, 0x99ac, 0x99b0, /* Fix ^ */ 0x01b5, 0x05b4, 0x05b6, 0x09b3, 0x89b5, 0x09b7, 0x8db4, 0x8db6, 0x91b3, 0x91b7, /* Fix _ */ 0x9db9, 0x9dbf, 0, }; static void a2_make_font(apple2_sim_t *sim) { /* Generate the font. It used a 5x7 font which looks a lot like the standard X 6x10 font, with a few differences. So we render up all the uppercase letters of 6x10, and make a few tweaks (like putting a slash across the zero) according to fixfont. */ int i; const char *def_font="6x10"; XFontStruct *font; Pixmap text_pm; GC gc; XGCValues gcv; font = XLoadQueryFont (sim->dpy, def_font); if (!font) { fprintf(stderr, "%s: can't load font %s\n", progname, def_font); abort(); } text_pm=XCreatePixmap(sim->dpy, sim->window, 64*7, 8, 1); memset(&gcv, 0, sizeof(gcv)); gcv.foreground=1; gcv.background=0; gcv.font=font->fid; gc=XCreateGC(sim->dpy, text_pm, GCFont|GCBackground|GCForeground, &gcv); XSetForeground(sim->dpy, gc, 0); XFillRectangle(sim->dpy, text_pm, gc, 0, 0, 64*7, 8); XSetForeground(sim->dpy, gc, 1); for (i=0; i<64; i++) { char c=32+i; int x=7*i+1; int y=7; if (c=='0') { c='O'; XDrawString(sim->dpy, text_pm, gc, x, y, &c, 1); } else { XDrawString(sim->dpy, text_pm, gc, x, y, &c, 1); } } # if 0 for (i=0; a2_fixfont[i]; i++) { XSetForeground (sim->dpy, gc, (a2_fixfont[i]>>15)&1); XDrawPoint(sim->dpy, text_pm, gc, a2_fixfont[i]&0x3ff, (a2_fixfont[i]>>10)&0xf); } XWriteBitmapFile(sim->dpy, "/tmp/a2font.xbm", text_pm, 64*7, 8, -1, -1); # endif sim->text_im = XGetImage(sim->dpy, text_pm, 0, 0, 64*7, 8, ~0L, ZPixmap); XFreeGC(sim->dpy, gc); XFreePixmap(sim->dpy, text_pm); for (i=0; a2_fixfont[i]; i++) { XPutPixel(sim->text_im, a2_fixfont[i]&0x3ff, (a2_fixfont[i]>>10)&0xf, (a2_fixfont[i]>>15)&1); } } #endif /* 0 */ apple2_sim_t * apple2_start(Display *dpy, Window window, int delay, void (*controller)(apple2_sim_t *sim, int *stepno, double *next_actiontime)) { apple2_sim_t *sim; sim=(apple2_sim_t *)calloc(1,sizeof(apple2_sim_t)); sim->dpy = dpy; sim->window = window; sim->delay = delay; sim->controller = controller; sim->st = (apple2_state_t *)calloc(1,sizeof(apple2_state_t)); sim->dec = analogtv_allocate(dpy, window); sim->inp = analogtv_input_allocate(); sim->reception.input = sim->inp; sim->reception.level = 1.0; sim->prompt=']'; if (random()%4==0 && !sim->dec->use_cmap && sim->dec->use_color && sim->dec->visbits>=8) { sim->dec->flutter_tint=1; } else if (random()%3==0) { sim->dec->flutter_horiz_desync=1; } sim->typing_rate = 1.0; analogtv_set_defaults(sim->dec, ""); sim->dec->squish_control=0.05; analogtv_setup_sync(sim->inp, 1, 0); a2_make_font(sim); sim->stepno=0; a2_goto(sim->st,23,0); if (random()%2==0) sim->basetime_tv.tv_sec -= 1; /* random blink phase */ sim->next_actiontime=0.0; sim->curtime=0.0; sim->next_actiontime=sim->curtime; sim->controller (sim, &sim->stepno, &sim->next_actiontime); # ifdef GETTIMEOFDAY_TWO_ARGS gettimeofday(&sim->basetime_tv, NULL); # else gettimeofday(&sim->basetime_tv); # endif return sim; } int apple2_one_frame (apple2_sim_t *sim) { double blinkphase; int i; int textrow; if (sim->stepno==A2CONTROLLER_DONE) goto DONE; /* when caller says we're done, be done, dammit! */ { struct timeval curtime_tv; # ifdef GETTIMEOFDAY_TWO_ARGS struct timezone tzp; gettimeofday(&curtime_tv, &tzp); # else gettimeofday(&curtime_tv); # endif sim->curtime=(curtime_tv.tv_sec - sim->basetime_tv.tv_sec) + 0.000001*(curtime_tv.tv_usec - sim->basetime_tv.tv_usec); if (sim->curtime > sim->dec->powerup) sim->dec->powerup=sim->curtime; } blinkphase=sim->curtime/0.8; /* The blinking rate was controlled by 555 timer with a resistor/capacitor time constant. Because the capacitor was electrolytic, the flash rate varied somewhat between machines. I'm guessing 1.6 seconds/cycle was reasonable. (I soldered a resistor in mine to make it blink faster.) */ i=sim->st->blink; sim->st->blink=((int)blinkphase)&1; if (sim->st->blink!=i && !(sim->st->gr_mode&A2_GR_FULL)) { int downcounter=0; /* For every row with blinking text, set the changed flag. This basically works great except with random screen garbage in text mode, when we end up redrawing the whole screen every second */ int row, col; for (row=(sim->st->gr_mode ? 20 : 0); row<24; row++) { for (col=0; col<40; col++) { int c=sim->st->textlines[row][col]; if ((c & 0xc0) == 0x40) { downcounter=4; break; } } if (downcounter>0) { downcounter--; } } } if (sim->curtime >= sim->delay) sim->stepno = A2CONTROLLER_DONE; if (sim->printing) { int nlcnt=0; while (*sim->printing) { if (*sim->printing=='\001') { /* pause */ sim->printing++; break; } else if (*sim->printing=='\n') { a2_printc(sim->st,*sim->printing); sim->printing++; nlcnt++; if (nlcnt>=2) break; } else { a2_printc(sim->st,*sim->printing); sim->printing++; } } if (!*sim->printing) sim->printing=NULL; } else if (sim->curtime >= sim->next_actiontime) { if (sim->typing) { int c; /* If we're in the midst of typing a string, emit a character with random timing. */ c =*sim->typing; if (c==0) { sim->typing=NULL; } else { sim->typing++; a2_printc(sim->st, c); if (c=='\r' || c=='\n') { sim->next_actiontime = sim->curtime; } else if (c==010) { sim->next_actiontime = sim->curtime + 0.1; } else { sim->next_actiontime = (sim->curtime + (((random()%1000)*0.001 + 0.3) * sim->typing_rate)); } } } else { sim->next_actiontime = sim->curtime; sim->controller (sim, &sim->stepno, &sim->next_actiontime); if (sim->stepno==A2CONTROLLER_DONE) { DONE: sim->stepno=A2CONTROLLER_FREE; sim->controller (sim, &sim->stepno, &sim->next_actiontime); /* if stepno is changed, return 1 */ if (sim->stepno != A2CONTROLLER_FREE) return 1; XClearWindow(sim->dpy, sim->window); /* free sim */ /* This is from a2_make_font */ free(sim->text_im->data); sim->text_im->data = 0; XDestroyImage(sim->text_im); /* And free else */ analogtv_release(sim->dec); free(sim->st); free(sim->inp); free(sim); return 0; } } } analogtv_setup_sync(sim->inp, sim->st->gr_mode? 1 : 0, 0); analogtv_setup_frame(sim->dec); for (textrow=0; textrow<24; textrow++) { int row; for (row=textrow*8; rowinp->signal[row+ANALOGTV_TOP+4][ANALOGTV_PIC_START+100]; if ((sim->st->gr_mode&A2_GR_HIRES) && (row<160 || (sim->st->gr_mode&A2_GR_FULL))) { int col; /* Emulate the mysterious pink line, due to a bit getting stuck in a shift register between the end of the last row and the beginning of this one. */ if ((sim->st->hireslines[row][0] & 0x80) && (sim->st->hireslines[row][39]&0x40)) { pp[-1]=ANALOGTV_WHITE_LEVEL; } for (col=0; col<40; col++) { unsigned char b=sim->st->hireslines[row][col]; int shift=(b&0x80)?0:1; /* Each of the low 7 bits in hires mode corresponded to 2 dot clocks, shifted by one if the high bit was set. */ for (i=0; i<7; i++) { pp[shift+1] = pp[shift] = (((b>>i)&1) ?ANALOGTV_WHITE_LEVEL :ANALOGTV_BLACK_LEVEL); pp+=2; } } } else if ((sim->st->gr_mode&A2_GR_LORES) && (row<160 || (sim->st->gr_mode&A2_GR_FULL))) { int col; for (col=0; col<40; col++) { unsigned char nib=((sim->st->textlines[textrow][col] >> (((row/4)&1)*4)) & 0xf); /* The low or high nybble was shifted out one bit at a time. */ for (i=0; i<14; i++) { *pp = (((nib>>((col*14+i)&3))&1) ?ANALOGTV_WHITE_LEVEL :ANALOGTV_BLACK_LEVEL); pp++; } } } else { int col; for (col=0; col<40; col++) { int rev; int c=sim->st->textlines[textrow][col]&0xff; /* hi bits control inverse/blink as follows: 0x00: inverse 0x40: blink 0x80: normal 0xc0: normal */ rev=!(c&0x80) && (!(c&0x40) || sim->st->blink); for (i=0; i<7; i++) { unsigned long pix=XGetPixel(sim->text_im, ((c&0x3f)^0x20)*7+i, row%8); pp[1] = pp[2] = ((pix^rev) ?ANALOGTV_WHITE_LEVEL :ANALOGTV_BLACK_LEVEL); pp+=2; } } } } } analogtv_reception_update(&sim->reception); { const analogtv_reception *rec = &sim->reception; analogtv_draw(sim->dec, 0.02, &rec, 1); } return 1; } #if 0 void a2controller_test(apple2_sim_t *sim, int *stepno, double *next_actiontime) { int row,col; switch(*stepno) { case 0: a2_invalidate(sim->st); /* For testing color rendering. The spec is: red grn blu 0 black 0 0 0 1 red 227 30 96 2 dk blue 96 78 189 3 purple 255 68 253 4 dk green 0 163 96 5 gray 156 156 156 6 med blue 20 207 253 7 lt blue 208 195 255 8 brown 96 114 3 9 orange 255 106 60 10 grey 156 156 156 11 pink 255 160 208 12 lt green 20 245 60 13 yellow 208 221 141 14 aqua 114 255 208 15 white 255 255 255 */ sim->st->gr_mode=A2_GR_LORES; for (row=0; row<24; row++) { for (col=0; col<40; col++) { sim->st->textlines[row][col]=(row&15)*17; } } *next_actiontime+=0.4; *stepno=99; break; case 99: if (sim->curtime > 10) *stepno=-1; break; } } #endif xscreensaver-5.36/hacks/apple2-main.c000664 000767 000024 00000143443 12710314135 017510 0ustar00jwzstaff000000 000000 /* xscreensaver, Copyright (c) 1998-2014 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. * * Apple ][ CRT simulator, by Trevor Blackwell * with additional work by Jamie Zawinski * Pty and vt100 emulation by Fredrik Tolf */ #ifdef HAVE_CONFIG_H # include "config.h" #endif /* HAVE_CONFIG_H */ #include #include #ifdef HAVE_UNISTD_H # include #endif #include "screenhack.h" #include "apple2.h" #include "textclient.h" #include "utf8wc.h" #undef countof #define countof(x) (sizeof((x))/sizeof((*x))) #define SCREEN_COLS 40 #define SCREEN_ROWS 24 /* Given a bitmask, returns the position and width of the field. */ static void decode_mask (unsigned int mask, unsigned int *pos_ret, unsigned int *size_ret) { int i; for (i = 0; i < 32; i++) if (mask & (1L << i)) { int j = 0; *pos_ret = i; for (; i < 32; i++, j++) if (! (mask & (1L << i))) break; *size_ret = j; return; } } /* Given a value and a field-width, expands the field to fill out 8 bits. */ static unsigned char spread_bits (unsigned char value, unsigned char width) { switch (width) { case 8: return value; case 7: return (value << 1) | (value >> 6); case 6: return (value << 2) | (value >> 4); case 5: return (value << 3) | (value >> 2); case 4: return (value << 4) | (value); case 3: return (value << 5) | (value << 2) | (value >> 2); case 2: return (value << 6) | (value << 4) | (value); default: abort(); break; } } /* Convert an XImage (of any size/depth/visual) to a 32bpp RGB array. Scales it (without dithering) to WxH. */ static void scale_image (Display *dpy, Window window, XImage *in, int fromx, int fromy, int fromw, int fromh, unsigned int *out, int w, int h) { float scale; int x, y, i; unsigned int rpos=0, gpos=0, bpos=0; /* bitfield positions */ unsigned int rsiz=0, gsiz=0, bsiz=0; unsigned int rmsk=0, gmsk=0, bmsk=0; unsigned char spread_map[3][256]; XWindowAttributes xgwa; XColor *colors = 0; if (fromx + fromw > in->width || fromy + fromh > in->height) abort(); XGetWindowAttributes (dpy, window, &xgwa); /* Compute the field offsets for RGB decoding in the XImage, when in TrueColor mode. Otherwise we use the colormap. */ if (visual_class (xgwa.screen, xgwa.visual) == PseudoColor || visual_class (xgwa.screen, xgwa.visual) == GrayScale) { int ncolors = visual_cells (xgwa.screen, xgwa.visual); colors = (XColor *) calloc (sizeof (*colors), ncolors+1); for (i = 0; i < ncolors; i++) colors[i].pixel = i; XQueryColors (dpy, xgwa.colormap, colors, ncolors); } else { rmsk = xgwa.visual->red_mask; gmsk = xgwa.visual->green_mask; bmsk = xgwa.visual->blue_mask; decode_mask (rmsk, &rpos, &rsiz); decode_mask (gmsk, &gpos, &gsiz); decode_mask (bmsk, &bpos, &bsiz); for (i = 0; i < 256; i++) { spread_map[0][i] = spread_bits (i, rsiz); spread_map[1][i] = spread_bits (i, gsiz); spread_map[2][i] = spread_bits (i, bsiz); } } scale = (fromw > fromh ? (float) fromw / w : (float) fromh / h); /* Scale the pixmap from window size to Apple][ screen size (but 32bpp) */ for (y = 0; y < h-1; y++) /* iterate over dest pixels */ for (x = 0; x < w-1; x++) { int xx, yy; unsigned int r=0, g=0, b=0; int xx1 = x * scale + fromx; int yy1 = y * scale + fromy; int xx2 = (x+1) * scale + fromx; int yy2 = (y+1) * scale + fromy; /* Iterate over the source pixels contributing to this one, and sum. */ for (xx = xx1; xx < xx2; xx++) for (yy = yy1; yy < yy2; yy++) { unsigned char rr, gg, bb; unsigned long sp = ((xx > in->width || yy > in->height) ? 0 : XGetPixel (in, xx, yy)); if (colors) { rr = colors[sp].red & 0xFF; gg = colors[sp].green & 0xFF; bb = colors[sp].blue & 0xFF; } else { rr = (sp & rmsk) >> rpos; gg = (sp & gmsk) >> gpos; bb = (sp & bmsk) >> bpos; rr = spread_map[0][rr]; gg = spread_map[1][gg]; bb = spread_map[2][bb]; } r += rr; g += gg; b += bb; } /* Scale summed pixel values down to 8/8/8 range */ i = (xx2 - xx1) * (yy2 - yy1); if (i < 1) i = 1; r /= i; g /= i; b /= i; out[y * w + x] = (r << 16) | (g << 8) | b; } } /* Convert an XImage (of any size/depth/visual) to a 32bpp RGB array. Picks a random sub-image out of the source image, and scales it to WxH. */ static void pick_a2_subimage (Display *dpy, Window window, XImage *in, unsigned int *out, int w, int h) { int fromx, fromy, fromw, fromh; if (in->width <= w || in->height <= h) { fromx = 0; fromy = 0; fromw = in->width; fromh = in->height; } else { int dw, dh; do { double scale = (0.5 + frand(0.7) + frand(0.7) + frand(0.7)); fromw = w * scale; fromh = h * scale; } while (fromw > in->width || fromh > in->height); dw = (in->width - fromw) / 2; /* near the center! */ dh = (in->height - fromh) / 2; fromx = (dw <= 0 ? 0 : (random() % dw) + (dw/2)); fromy = (dh <= 0 ? 0 : (random() % dh) + (dh/2)); } scale_image (dpy, window, in, fromx, fromy, fromw, fromh, out, w, h); } /* Floyd-Steinberg dither. Derived from ppmquant.c, Copyright (c) 1989, 1991 by Jef Poskanzer. */ static void a2_dither (unsigned int *in, unsigned char *out, int w, int h) { /* Apple ][ color map. Each pixel can only be 1 or 0, but what that means depends on whether it's an odd or even pixel, and whether the high bit in the byte is set or not. If it's 0, it's always black. */ static const int a2_cmap[2][2][3] = { { /* hibit=0 */ {/* odd pixels = blue */ 0x00, 0x80, 0xff}, {/* even pixels = red */ 0xff, 0x80, 0x00} }, { /* hibit=1 */ {/* even pixels = purple */ 0xa0, 0x40, 0xa0}, {/* odd pixels = green */ 0x40, 0xff, 0x40} } }; int x, y; unsigned int **pixels; unsigned int *pP; int maxval = 255; long *this_rerr; long *next_rerr; long *this_gerr; long *next_gerr; long *this_berr; long *next_berr; long *temp_err; int fs_scale = 1024; int brightness = 75; #if 0 { FILE *pipe = popen ("xv -", "w"); fprintf (pipe, "P6\n%d %d\n%d\n", w, h, 255); for (y = 0; y < h; y++) for (x = 0; x < w; x++) { unsigned int p = in[y * w + x]; unsigned int r = (p >> 16) & 0xFF; unsigned int g = (p >> 8) & 0xFF; unsigned int b = (p ) & 0xFF; fprintf(pipe, "%c%c%c", r, g, b); } fclose (pipe); } #endif /* Initialize Floyd-Steinberg error vectors. */ this_rerr = (long *) calloc (w + 2, sizeof(long)); next_rerr = (long *) calloc (w + 2, sizeof(long)); this_gerr = (long *) calloc (w + 2, sizeof(long)); next_gerr = (long *) calloc (w + 2, sizeof(long)); this_berr = (long *) calloc (w + 2, sizeof(long)); next_berr = (long *) calloc (w + 2, sizeof(long)); /* #### do we really need more than one element of "pixels" at once? */ pixels = (unsigned int **) malloc (h * sizeof (unsigned int *)); for (y = 0; y < h; y++) pixels[y] = (unsigned int *) malloc (w * sizeof (unsigned int)); for (x = 0; x < w + 2; ++x) { this_rerr[x] = random() % (fs_scale * 2) - fs_scale; this_gerr[x] = random() % (fs_scale * 2) - fs_scale; this_berr[x] = random() % (fs_scale * 2) - fs_scale; /* (random errors in [-1 .. 1]) */ } for (y = 0; y < h; y++) for (x = 0; x < w; x++) pixels[y][x] = in[y * w + x]; for (y = 0; y < h; y++) { int xbyte; int err; int prev_byte=0; for (x = 0; x < w + 2; x++) next_rerr[x] = next_gerr[x] = next_berr[x] = 0; /* It's too complicated to go back and forth on alternate rows, so we always go left-right here. It doesn't change the result very much. For each group of 7 pixels, we have to try it both with the high bit=0 and =1. For each high bit value, we add up the total error and pick the best one. Because we have to go through each group of bits twice, we don't propagate the error values through this_[rgb]err since it would add them twice. So we keep seperate local_[rgb]err variables for propagating error within the 7-pixel group. */ pP = pixels[y]; for (xbyte=0; xbyte<280; xbyte+=7) { int best_byte=0; int best_error=2000000000; int hibit; int sr, sg, sb; int r2, g2, b2; int local_rerr=0, local_gerr=0, local_berr=0; for (hibit=0; hibit<2; hibit++) { int byte = hibit<<7; int tot_error=0; for (x=xbyte; x> 16) & 0xFF) * brightness/256; sg = ((pP[x] >> 8) & 0xFF) * brightness/256; sb = ((pP[x] ) & 0xFF) * brightness/256; sr += (this_rerr[x + 1] + local_rerr) / fs_scale; sg += (this_gerr[x + 1] + local_gerr) / fs_scale; sb += (this_berr[x + 1] + local_berr) / fs_scale; if (sr < 0) sr = 0; else if (sr > maxval) sr = maxval; if (sg < 0) sg = 0; else if (sg > maxval) sg = maxval; if (sb < 0) sb = 0; else if (sb > maxval) sb = maxval; /* This is the color we'd get if we set the bit 1. For 0, we get black */ r2=a2_cmap[hibit][x&1][0]; g2=a2_cmap[hibit][x&1][1]; b2=a2_cmap[hibit][x&1][2]; /* dist0 and dist1 are the error (Minkowski 2-metric distances in the color space) for choosing 0 and 1 respectively. 0 is black, 1 is the color r2,g2,b2. */ dist1= (sr-r2)*(sr-r2) + (sg-g2)*(sg-g2) + (sb-b2)*(sb-b2); dist0= sr*sr + sg*sg + sb*sb; if (dist1>(x-xbyte))&1; hibit=(best_byte>>7)&1; sr = (pP[x] >> 16) & 0xFF; sg = (pP[x] >> 8) & 0xFF; sb = (pP[x] ) & 0xFF; sr += this_rerr[x + 1] / fs_scale; sg += this_gerr[x + 1] / fs_scale; sb += this_berr[x + 1] / fs_scale; if (sr < 0) sr = 0; else if (sr > maxval) sr = maxval; if (sg < 0) sg = 0; else if (sg > maxval) sg = maxval; if (sb < 0) sb = 0; else if (sb > maxval) sb = maxval; r2=a2_cmap[hibit][x&1][0] * bit; g2=a2_cmap[hibit][x&1][1] * bit; b2=a2_cmap[hibit][x&1][2] * bit; pP[x] = (r2<<16) | (g2<<8) | (b2); /* Propagate Floyd-Steinberg error terms. */ err = (sr - r2) * fs_scale; this_rerr[x + 2] += (err * 7) / 16; next_rerr[x ] += (err * 3) / 16; next_rerr[x + 1] += (err * 5) / 16; next_rerr[x + 2] += (err ) / 16; err = (sg - g2) * fs_scale; this_gerr[x + 2] += (err * 7) / 16; next_gerr[x ] += (err * 3) / 16; next_gerr[x + 1] += (err * 5) / 16; next_gerr[x + 2] += (err ) / 16; err = (sb - b2) * fs_scale; this_berr[x + 2] += (err * 7) / 16; next_berr[x ] += (err * 3) / 16; next_berr[x + 1] += (err * 5) / 16; next_berr[x + 2] += (err ) / 16; } /* And put the actual byte into out. */ out[y*(w/7) + xbyte/7] = best_byte; } temp_err = this_rerr; this_rerr = next_rerr; next_rerr = temp_err; temp_err = this_gerr; this_gerr = next_gerr; next_gerr = temp_err; temp_err = this_berr; this_berr = next_berr; next_berr = temp_err; } free (this_rerr); free (next_rerr); free (this_gerr); free (next_gerr); free (this_berr); free (next_berr); for (y=0; y>16)&0xff; unsigned int g = (pixels[y][x]>>8)&0xff; unsigned int b = (pixels[y][x]>>0)&0xff; fprintf(pipe, "%c%c%c", r, g, b); } fclose (pipe); } #endif } typedef struct slideshow_data_s { int slideno; int render_img_lineno; unsigned char *render_img; char *img_filename; Bool image_loading_p; } slideshow_data; static void image_loaded_cb (Screen *screen, Window window, Drawable p, const char *name, XRectangle *geometry, void *closure) { Display *dpy = DisplayOfScreen (screen); apple2_sim_t *sim = (apple2_sim_t *) closure; slideshow_data *mine = (slideshow_data *) sim->controller_data; XWindowAttributes xgwa; int w = 280; int h = 192; XImage *image; unsigned int *buf32 = (unsigned int *) calloc (w, h * 4); unsigned char *buf8 = (unsigned char *) calloc (w/7, h); if (!buf32 || !buf8) { fprintf (stderr, "%s: out of memory (%dx%d)\n", progname, w, h); exit (1); } XGetWindowAttributes (dpy, window, &xgwa); image = XGetImage (dpy, p, 0, 0, xgwa.width, xgwa.height, ~0, ZPixmap); XFreePixmap (dpy, p); p = 0; /* Scale the XImage down to Apple][ size, and convert it to a 32bpp image (regardless of whether it started as TrueColor/PseudoColor.) */ pick_a2_subimage (dpy, window, image, buf32, w, h); free(image->data); image->data = 0; XDestroyImage(image); /* Then dither the 32bpp image to a 6-color Apple][ colormap. */ a2_dither (buf32, buf8, w, h); free (buf32); mine->image_loading_p = False; mine->img_filename = (name ? strdup (name) : 0); mine->render_img = buf8; } static const char *apple2_defaults [] = { ".background: black", ".foreground: white", "*mode: random", "*duration: 60", "*program: xscreensaver-text --cols 40", "*metaSendsESC: True", "*swapBSDEL: True", "*fast: False", # ifdef HAVE_FORKPTY "*usePty: True", #else "*usePty: False", # endif /* !HAVE_FORKPTY */ ANALOGTV_DEFAULTS 0 }; static XrmOptionDescRec apple2_options [] = { { "-mode", ".mode", XrmoptionSepArg, 0 }, { "-slideshow", ".mode", XrmoptionNoArg, "slideshow" }, { "-basic", ".mode", XrmoptionNoArg, "basic" }, { "-text", ".mode", XrmoptionNoArg, "text" }, { "-program", ".program", XrmoptionSepArg, 0 }, { "-duration", ".duration", XrmoptionSepArg, 0 }, { "-pty", ".usePty", XrmoptionNoArg, "True" }, { "-pipe", ".usePty", XrmoptionNoArg, "False" }, { "-meta", ".metaSendsESC", XrmoptionNoArg, "False" }, { "-esc", ".metaSendsESC", XrmoptionNoArg, "True" }, { "-bs", ".swapBSDEL", XrmoptionNoArg, "False" }, { "-del", ".swapBSDEL", XrmoptionNoArg, "True" }, { "-fast", ".fast", XrmoptionNoArg, "True" }, ANALOGTV_OPTIONS { 0, 0, 0, 0 } }; /* TODO: this should load 10 images at startup time, then cycle through them to avoid the pause while it loads. */ static void slideshow_controller(apple2_sim_t *sim, int *stepno, double *next_actiontime) { apple2_state_t *st=sim->st; int i; slideshow_data *mine; if (!sim->controller_data) sim->controller_data = calloc (1, sizeof(*mine)); mine = (slideshow_data *) sim->controller_data; switch(*stepno) { case 0: a2_invalidate(st); a2_clear_hgr(st); a2_cls(st); sim->typing_rate = 0.3; sim->dec->powerup=0.0; a2_goto(st, 0, 16); a2_prints(st, "APPLE ]["); a2_goto(st,23,0); a2_printc(st,']'); *stepno=10; break; case 10: { XWindowAttributes xgwa; Pixmap p; XGetWindowAttributes (sim->dpy, sim->window, &xgwa); p = XCreatePixmap (sim->dpy, sim->window, xgwa.width, xgwa.height, xgwa.depth); mine->image_loading_p = True; load_image_async (xgwa.screen, sim->window, p, image_loaded_cb, sim); /* pause with a blank screen for a bit, while the image loads in the background. */ *next_actiontime += 2.0; *stepno=11; } break; case 11: if (! mine->image_loading_p) { /* image is finally loaded */ if (st->gr_mode) { *stepno=30; } else { *stepno=20; } *next_actiontime += 3.0; } break; case 20: sim->typing="HGR\n"; *stepno=29; break; case 29: sim->printing="]"; *stepno=30; break; case 30: st->gr_mode=A2_GR_HIRES; if (mine->img_filename) { char *basename, *tmp; char *s; basename = tmp = strdup (mine->img_filename); while (1) { char *slash = strchr(basename, '/'); if (!slash || !slash[1]) break; basename = slash+1; } { char *dot=strrchr(basename,'.'); if (dot) *dot=0; } if (strlen(basename)>20) basename[20]=0; for (s=basename; *s; s++) { *s = toupper (*s); if (*s <= ' ') *s = '_'; } sprintf(sim->typing_buf, "BLOAD %s\n", basename); sim->typing = sim->typing_buf; free(tmp); } else { sim->typing = "BLOAD IMAGE\n"; } mine->render_img_lineno=0; *stepno=35; break; case 35: *next_actiontime += 0.7; *stepno=40; break; case 40: if (mine->render_img_lineno>=192) { sim->printing="]"; sim->typing="POKE 49234,0\n"; *stepno=50; return; } for (i=0; i<6 && mine->render_img_lineno<192; i++) { a2_display_image_loading(st, mine->render_img, mine->render_img_lineno++); } /* The disk would have to seek every 13 sectors == 78 lines. (This ain't no newfangled 16-sector operating system) */ if ((mine->render_img_lineno%78)==0) { *next_actiontime += 0.5; } else { *next_actiontime += 0.08; } break; case 50: st->gr_mode |= A2_GR_FULL; *stepno=60; /* Note that sim->delay is sometimes "infinite" in this controller. These images are kinda dull anyway, so don't leave it on too long. */ *next_actiontime += 2; break; case 60: sim->printing="]"; sim->typing="POKE 49235,0\n"; *stepno=70; break; case 70: sim->printing="]"; st->gr_mode &= ~A2_GR_FULL; if (mine->render_img) { free(mine->render_img); mine->render_img=NULL; } if (mine->img_filename) { free(mine->img_filename); mine->img_filename=NULL; } *stepno=10; break; case 80: /* Do nothing, just wait */ *next_actiontime += 2.0; *stepno = A2CONTROLLER_FREE; break; case A2CONTROLLER_FREE: /* It is possible that still image is being loaded, in that case mine cannot be freed, because callback function tries to use it, so wait. */ if (mine->image_loading_p) { *stepno = 80; break; } free(mine->render_img); free(mine->img_filename); free(mine); mine = 0; return; } } #define NPAR 16 struct terminal_controller_data { Display *dpy; char curword[256]; unsigned char lastc; double last_emit_time; text_data *tc; int escstate; int csiparam[NPAR]; int curparam; int cursor_x, cursor_y; int saved_x, saved_y; int unicruds; char unicrud[7]; union { struct { unsigned int bold : 1; unsigned int blink : 1; unsigned int rev : 1; } bf; int w; } termattrib; Bool fast_p; }; /* The structure of closure linkage throughout this code is so amazingly baroque that I can't get to the 'struct state' from where I need it. */ static const char *global_program; static Bool global_fast_p; static void terminal_closegen(struct terminal_controller_data *mine) { if (mine->tc) { textclient_close (mine->tc); mine->tc = 0; } } static int terminal_read(struct terminal_controller_data *mine, unsigned char *buf, int n) { if (!mine || !mine->tc) { return 0; } else { int i, count = 0; for (i = 0; i < n; i++) { int c = textclient_getc (mine->tc); if (c <= 0) break; buf[i] = c; mine->lastc = c; count++; } return count; } } static int terminal_keypress_handler (Display *dpy, XEvent *event, void *data) { struct terminal_controller_data *mine = (struct terminal_controller_data *) data; mine->dpy = dpy; if (event->xany.type == KeyPress && mine->tc) return textclient_putc (mine->tc, &event->xkey); return 0; } static void a2_ascii_printc (apple2_state_t *st, unsigned char c, Bool bold_p, Bool blink_p, Bool rev_p, Bool scroll_p) { if (c >= 'a' && c <= 'z') /* upcase lower-case chars */ { c &= 0xDF; } else if ((c >= 'A'+128) || /* upcase and blink */ (c < ' ' && c != 014 && /* high-bit & ctl chrs */ c != '\r' && c != '\n' && c!='\t')) { c = (c & 0x1F) | 0x80; } else if (c >= 'A' && c <= 'Z') /* invert upper-case chars */ { c |= 0x80; } if (bold_p) c |= 0xc0; if (blink_p) c = (c & ~0x40) | 0x80; if (rev_p) c |= 0xc0; if (scroll_p) a2_printc(st, c); else a2_printc_noscroll(st, c); } static void a2_vt100_printc (apple2_sim_t *sim, struct terminal_controller_data *state, unsigned char c) { apple2_state_t *st=sim->st; int cols = SCREEN_COLS; int rows = SCREEN_ROWS; int i; int start, end; /* Mostly duplicated in phosphor.c */ switch (state->escstate) { case 0: switch (c) { case 7: /* BEL */ /* Dummy case - we don't want the screensaver to beep */ /* #### But maybe this should flash the screen? */ break; case 8: /* BS */ if (state->cursor_x > 0) state->cursor_x--; break; case 9: /* HT */ if (state->cursor_x < cols - 8) { state->cursor_x = (state->cursor_x & ~7) + 8; } else { state->cursor_x = 0; if (state->cursor_y < rows - 1) state->cursor_y++; else a2_scroll (st); } 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) state->cursor_y++; else a2_scroll (st); break; case 13: /* CR */ state->cursor_x = 0; break; case 14: /* SO */ case 15: /* SI */ /* Dummy case - there is one and only one font. */ break; case 24: /* CAN */ case 26: /* SUB */ /* Dummy case - these interrupt escape sequences, so they don't do anything in this state */ break; case 27: /* ESC */ state->escstate = 1; break; case 127: /* DEL */ /* Dummy case - this is supposed to be ignored */ break; case 155: /* CSI */ state->escstate = 2; for(i = 0; i < NPAR; i++) state->csiparam[i] = 0; state->curparam = 0; break; default: /* states 102-106 are for UTF-8 decoding */ if ((c & 0xE0) == 0xC0) { /* 110xxxxx - 11 bits, 2 bytes */ state->unicruds = 1; state->unicrud[0] = c; state->escstate = 102; break; } else if ((c & 0xF0) == 0xE0) { /* 1110xxxx - 16 bits, 3 bytes */ state->unicruds = 1; state->unicrud[0] = c; state->escstate = 103; break; } else if ((c & 0xF8) == 0xF0) { /* 11110xxx - 21 bits, 4 bytes */ state->unicruds = 1; state->unicrud[0] = c; state->escstate = 104; break; } else if ((c & 0xFC) == 0xF8) { /* 111110xx - 26 bits, 5 bytes */ state->unicruds = 1; state->unicrud[0] = c; state->escstate = 105; break; } else if ((c & 0xFE) == 0xFC) { /* 1111110x - 31 bits, 6 bytes */ state->unicruds = 1; state->unicrud[0] = c; state->escstate = 106; break; } PRINT: /* If the cursor is in column 39 and we print a character, then that character shows up in column 39, and the cursor is no longer visible on the screen (it's in "column 40".) If another character is printed, then that character shows up in column 0, and the cursor moves to column 1. This is empirically what xterm and gnome-terminal do, so that must be the right thing. (In xterm, the cursor vanishes, whereas; in gnome-terminal, the cursor overprints the character in col 39.) */ if (state->cursor_x >= cols) { state->cursor_x = 0; if (state->cursor_y >= rows - 1) a2_scroll (st); else state->cursor_y++; } a2_goto(st, state->cursor_y, state->cursor_x); /* clips range */ a2_ascii_printc (st, c, state->termattrib.bf.bold, state->termattrib.bf.blink, state->termattrib.bf.rev, False); state->cursor_x++; break; } break; case 1: switch (c) { case 24: /* CAN */ case 26: /* SUB */ state->escstate = 0; break; case 'c': /* Reset */ a2_cls(st); state->escstate = 0; break; case 'D': /* Linefeed */ if (state->cursor_y < rows - 1) state->cursor_y++; else a2_scroll (st); state->escstate = 0; break; case 'E': /* Newline */ state->cursor_x = 0; state->escstate = 0; break; case 'M': /* Reverse newline */ if (state->cursor_y > 0) state->cursor_y--; state->escstate = 0; break; case '7': /* Save state */ state->saved_x = state->cursor_x; state->saved_y = state->cursor_y; state->escstate = 0; break; case '8': /* Restore state */ state->cursor_x = state->saved_x; state->cursor_y = state->saved_y; state->escstate = 0; break; case '[': /* CSI */ state->escstate = 2; for(i = 0; i < NPAR; i++) state->csiparam[i] = 0; state->curparam = 0; break; case '%': /* Select charset */ /* @: Select default (ISO 646 / ISO 8859-1) G: Select UTF-8 8: Select UTF-8 (obsolete) We can just ignore this and always process UTF-8, I think? We must still catch the last byte, though. */ case '(': case ')': /* I don't support different fonts either - see above for SO and SI */ state->escstate = 3; break; default: /* Escape sequences not supported: * * H - Set tab stop * Z - Terminal identification * > - Keypad change * = - Other keypad change * ] - OS command */ state->escstate = 0; break; } break; case 2: switch (c) { case 24: /* CAN */ case 26: /* SUB */ state->escstate = 0; break; case '0': case '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9': if (state->curparam < NPAR) state->csiparam[state->curparam] = (state->csiparam[state->curparam] * 10) + (c - '0'); break; case ';': state->csiparam[++state->curparam] = 0; break; case '[': state->escstate = 3; break; case '@': for (i = 0; i < state->csiparam[0]; i++) { if(++state->cursor_x > cols) { state->cursor_x = 0; if (state->cursor_y < rows - 1) state->cursor_y++; else a2_scroll (st); } } state->escstate = 0; break; case 'F': state->cursor_x = 0; case 'A': if (state->csiparam[0] == 0) state->csiparam[0] = 1; if ((state->cursor_y -= state->csiparam[0]) < 0) state->cursor_y = 0; state->escstate = 0; break; case 'E': state->cursor_x = 0; case 'e': case 'B': if (state->csiparam[0] == 0) state->csiparam[0] = 1; if ((state->cursor_y += state->csiparam[0]) >= rows) state->cursor_y = rows - 1; state->escstate = 0; break; case 'a': case 'C': if (state->csiparam[0] == 0) state->csiparam[0] = 1; if ((state->cursor_x += state->csiparam[0]) >= cols) state->cursor_x = cols - 1; state->escstate = 0; break; case 'D': if (state->csiparam[0] == 0) state->csiparam[0] = 1; if ((state->cursor_x -= state->csiparam[0]) < 0) state->cursor_x = 0; state->escstate = 0; break; case 'd': if ((state->cursor_y = (state->csiparam[0] - 1)) >= rows) state->cursor_y = rows - 1; state->escstate = 0; break; case '`': case 'G': if ((state->cursor_x = (state->csiparam[0] - 1)) >= cols) state->cursor_x = cols - 1; state->escstate = 0; break; case 'f': case 'H': if ((state->cursor_y = (state->csiparam[0] - 1)) >= rows) state->cursor_y = rows - 1; if ((state->cursor_x = (state->csiparam[1] - 1)) >= cols) state->cursor_x = cols - 1; if(state->cursor_y < 0) state->cursor_y = 0; if(state->cursor_x < 0) state->cursor_x = 0; state->escstate = 0; break; case 'J': start = 0; end = rows * cols; if (state->csiparam[0] == 0) start = cols * state->cursor_y + state->cursor_x; if (state->csiparam[0] == 1) end = cols * state->cursor_y + state->cursor_x; a2_goto(st, state->cursor_y, state->cursor_x); for (i = start; i < end; i++) { a2_ascii_printc(st, ' ', False, False, False, False); } state->escstate = 0; break; case 'K': start = 0; end = cols; if (state->csiparam[0] == 0) start = state->cursor_x; if (state->csiparam[1] == 1) end = state->cursor_x; a2_goto(st, state->cursor_y, state->cursor_x); for (i = start; i < end; i++) { a2_ascii_printc(st, ' ', False, False, False, False); } state->escstate = 0; break; case 'm': /* Set attributes */ for (i = 0; i <= state->curparam; i++) { switch(state->csiparam[i]) { case 0: state->termattrib.w = 0; break; case 1: state->termattrib.bf.bold = 1; break; case 5: state->termattrib.bf.blink = 1; break; case 7: state->termattrib.bf.rev = 1; break; case 21: case 22: state->termattrib.bf.bold = 0; break; case 25: state->termattrib.bf.blink = 0; break; case 27: state->termattrib.bf.rev = 0; break; } } state->escstate = 0; break; case 's': /* Save position */ state->saved_x = state->cursor_x; state->saved_y = state->cursor_y; state->escstate = 0; break; case 'u': /* Restore position */ state->cursor_x = state->saved_x; state->cursor_y = state->saved_y; state->escstate = 0; break; case '?': /* DEC Private modes */ if ((state->curparam != 0) || (state->csiparam[0] != 0)) state->escstate = 0; break; default: /* Known unsupported CSIs: * * L - Insert blank lines * M - Delete lines (I don't know what this means...) * P - Delete characters * X - Erase characters (difference with P being...?) * c - Terminal identification * g - Clear tab stop(s) * h - Set mode (Mainly due to its complexity and lack of good docs) * l - Clear mode * m - Set mode (Phosphor is, per defenition, green on black) * n - Status report * q - Set keyboard LEDs * r - Set scrolling region (too exhausting - noone uses this, right?) */ state->escstate = 0; break; } break; case 3: state->escstate = 0; break; case 102: case 103: case 104: case 105: case 106: { int total = state->escstate - 100; /* see what I did there */ if (state->unicruds < total) { /* Buffer more bytes of the UTF-8 sequence */ state->unicrud[state->unicruds++] = c; } if (state->unicruds >= total) { /* Done! Convert it to ASCII and print that. */ char *s; state->unicrud[state->unicruds] = 0; s = utf8_to_latin1 ((const char *) state->unicrud, True); state->unicruds = 0; state->escstate = 0; if (s) { c = s[0]; free (s); goto PRINT; } else { /* c = 0; */ } } } break; default: abort(); } a2_goto(st, state->cursor_y, state->cursor_x); } /* It's fun to put things like "gdb" as the command. For one, it's amusing how the standard mumble (version, no warranty, it's GNU/Linux dammit) occupies an entire screen on the Apple ][. */ static void terminal_controller(apple2_sim_t *sim, int *stepno, double *next_actiontime) { apple2_state_t *st=sim->st; int c; int i; struct terminal_controller_data *mine; if (!sim->controller_data) sim->controller_data=calloc(sizeof(struct terminal_controller_data),1); mine=(struct terminal_controller_data *) sim->controller_data; mine->dpy = sim->dpy; mine->fast_p = global_fast_p; switch(*stepno) { case 0: if (random()%2) st->gr_mode |= A2_GR_FULL; /* Turn on color mode even through it's showing text */ a2_cls(st); a2_goto(st,0,16); a2_prints(st, "APPLE ]["); a2_goto(st,2,0); mine->cursor_y = 2; if (! mine->tc) { mine->tc = textclient_open (mine->dpy); textclient_reshape (mine->tc, SCREEN_COLS, SCREEN_ROWS, SCREEN_COLS, SCREEN_ROWS, 0); } if (! mine->fast_p) *next_actiontime += 4.0; *stepno = 10; mine->last_emit_time = sim->curtime; break; case 10: case 11: { Bool first_line_p = (*stepno == 10); unsigned char buf[1024]; int nr,nwant; double elapsed; elapsed=sim->curtime - mine->last_emit_time; nwant = elapsed * 25.0; /* characters per second */ if (first_line_p) { *stepno = 11; nwant = 1; } if (nwant > 40) nwant = 40; if (mine->fast_p) nwant = sizeof(buf)-1; if (nwant <= 0) break; mine->last_emit_time = sim->curtime; nr=terminal_read(mine, buf, nwant); for (i=0; itc) a2_vt100_printc (sim, mine, c); else a2_ascii_printc (st, c, False, False, False, True); } } break; case A2CONTROLLER_FREE: terminal_closegen(mine); free(mine); mine = 0; return; } } struct basic_controller_data { int prog_line; int x,y,k; const char * const * progtext; int progstep; char *rep_str; int rep_pos; double prog_start_time; char error_buf[256]; }; /* Adding more programs is easy. Just add a listing here and to all_programs, then add the state machine to actually execute it to basic_controller. */ static const char * const moire_program[]={ "10 HGR2\n", "20 FOR Y = 0 TO 190 STEP 2\n", "30 HCOLOR=4 : REM BLACK\n", "40 HPLOT 0,191-Y TO 279,Y\n", "60 HCOLOR=7 : REM WHITE\n", "80 HPLOT 0,190-Y TO 279,Y+1\n", "90 NEXT Y\n", "100 FOR X = 0 TO 278 STEP 3\n", "110 HCOLOR=4\n", "120 HPLOT 279-X,0 TO X,191\n", "140 HCOLOR=7\n", "150 HPLOT 278-X,0 TO X+1,191\n", "160 NEXT X\n", NULL }; static const char * const sinewave_program[] = { "10 HGR\n", "25 K=0\n", "30 FOR X = 0 TO 279\n", "32 HCOLOR= 0\n", "35 HPLOT X,0 TO X,159\n", "38 HCOLOR= 3\n", "40 Y = 80 + SIN(15*(X-K)/279) * 40\n", "50 HPLOT X,Y\n", "60 NEXT X\n", "70 K=K+4\n", "80 GOTO 30\n", NULL }; #if 0 static const char * const dumb_program[]={ "10 PRINT \"APPLE ][ ROOLZ! TRS-80 DROOLZ!\"\n", "20 GOTO 10\n", NULL }; #endif static const char * const random_lores_program[]={ "1 REM APPLE ][ SCREEN SAVER\n", "10 GR\n", "100 COLOR= RND(1)*16\n", "110 X=RND(1)*40\n", "120 Y1=RND(1)*40\n", "130 Y2=RND(1)*40\n", "140 FOR Y = Y1 TO Y2\n", "150 PLOT X,Y\n", "160 NEXT Y\n", "210 Y=RND(1)*40\n", "220 X1=RND(1)*40\n", "230 X2=RND(1)*40\n", "240 FOR X = X1 TO X2\n", "250 PLOT X,Y\n", "260 NEXT X\n", "300 GOTO 100\n", NULL }; static char typo_map[256]; static int make_typo(char *out_buf, const char *orig, char *err_buf) { int i,j; int errc; int success=0; err_buf[0]=0; typo_map['A']='Q'; typo_map['S']='A'; typo_map['D']='S'; typo_map['F']='G'; typo_map['G']='H'; typo_map['H']='J'; typo_map['J']='H'; typo_map['K']='L'; typo_map['L']=';'; typo_map['Q']='1'; typo_map['W']='Q'; typo_map['E']='3'; typo_map['R']='T'; typo_map['T']='Y'; typo_map['Y']='U'; typo_map['U']='Y'; typo_map['I']='O'; typo_map['O']='P'; typo_map['P']='['; typo_map['Z']='X'; typo_map['X']='C'; typo_map['C']='V'; typo_map['V']='C'; typo_map['B']='N'; typo_map['N']='B'; typo_map['M']='N'; typo_map[',']='.'; typo_map['.']=','; typo_map['!']='1'; typo_map['@']='2'; typo_map['#']='3'; typo_map['$']='4'; typo_map['%']='5'; typo_map['^']='6'; typo_map['&']='7'; typo_map['*']='8'; typo_map['(']='9'; typo_map[')']='0'; typo_map['1']='Q'; typo_map['2']='W'; typo_map['3']='E'; typo_map['4']='R'; typo_map['5']='T'; typo_map['6']='Y'; typo_map['7']='U'; typo_map['8']='I'; typo_map['9']='O'; typo_map['0']='-'; strcpy(out_buf, orig); for (i=0; out_buf[i]; i++) { char *p = out_buf+i; if (i>2 && p[-2]=='R' && p[-1]=='E' && p[0]=='M') break; if (isalpha(p[0]) && isalpha(p[1]) && p[0] != p[1] && random()%15==0) { int tmp=p[1]; p[1]=p[0]; p[0]=tmp; success=1; sprintf(err_buf,"?SYNTAX ERROR\n"); break; } if (random()%10==0 && strlen(p)>=4 && (errc=typo_map[(int)(unsigned char)p[0]])) { int remain=strlen(p); int past=random()%(remain-2)+1; memmove(p+past+past, p, remain+1); p[0]=errc; for (j=0; jst; int i; struct basic_controller_data *mine; if (!sim->controller_data) sim->controller_data=calloc(sizeof(struct basic_controller_data),1); mine=(struct basic_controller_data *) sim->controller_data; switch (*stepno) { case 0: st->gr_mode=0; a2_cls(st); a2_goto(st,0,16); a2_prints(st, "APPLE ]["); a2_goto(st,23,0); a2_printc(st,']'); sim->typing_rate=0.2; i=random()%countof(all_programs); mine->progtext=all_programs[i].progtext; mine->progstep=all_programs[i].progstep; mine->prog_line=0; *next_actiontime += 1.0; *stepno=10; break; case 10: if (st->cursx==0) a2_printc(st,']'); if (mine->progtext[mine->prog_line]) { if (random()%4==0) { int err=make_typo(sim->typing_buf, mine->progtext[mine->prog_line], mine->error_buf); sim->typing=sim->typing_buf; if (err) { *stepno=11; } else { mine->prog_line++; } } else { sim->typing=mine->progtext[mine->prog_line++]; } } else { *stepno=15; } break; case 11: sim->printing=mine->error_buf; *stepno=12; break; case 12: if (st->cursx==0) a2_printc(st,']'); *next_actiontime+=1.0; *stepno=10; break; case 15: sim->typing="RUN\n"; mine->y=0; mine->x=0; mine->k=0; mine->prog_start_time=*next_actiontime; *stepno=mine->progstep; break; /* moire_program */ case 100: st->gr_mode=A2_GR_HIRES|A2_GR_FULL; for (i=0; i<24 && mine->y<192; i++) { a2_hline(st, 4, 0, 191-mine->y, 279, mine->y); a2_hline(st, 7, 0, 191-mine->y-1, 279, mine->y+1); mine->y += 2; } if (mine->y>=192) { mine->x = 0; *stepno = 110; } break; case 110: for (i=0; i<24 && mine->x<280; i++) { a2_hline(st, 4, 279-mine->x, 0, mine->x, 192); a2_hline(st, 7, 279-mine->x-1, 0, mine->x+1, 192); mine->x+=3; } if (mine->x >= 280) *stepno=120; break; case 120: if (*next_actiontime > mine->prog_start_time+sim->delay) *stepno=999; break; /* dumb_program */ case 200: mine->rep_str="\nAPPLE ][ ROOLZ! TRS-80 DROOLZ!"; for (i=0; i<30; i++) { a2_prints(st, mine->rep_str); } *stepno=210; break; case 210: i=random()%strlen(mine->rep_str); while (mine->rep_pos != i) { a2_printc(st, mine->rep_str[mine->rep_pos]); mine->rep_pos++; if (!mine->rep_str[mine->rep_pos]) mine->rep_pos=0; } if (*next_actiontime > mine->prog_start_time+sim->delay) *stepno=999; break; /* sinewave_program */ case 400: st->gr_mode=A2_GR_HIRES; *stepno=410; break; case 410: for (i=0; i<48; i++) { int y=80 + (int)(75.0*sin(15.0*(mine->x-mine->k)/279.0)); a2_hline(st, 0, mine->x, 0, mine->x, 159); a2_hplot(st, 3, mine->x, y); mine->x += 1; if (mine->x>=279) { mine->x=0; mine->k+=4; } } if (*next_actiontime > mine->prog_start_time+sim->delay) *stepno=999; break; case 420: a2_prints(st, "]"); *stepno=999; break; /* random_lores_program */ case 500: st->gr_mode=A2_GR_LORES|A2_GR_FULL; a2_clear_gr(st); *stepno=510; case 510: for (i=0; i<10; i++) { int color,x,y,x1,x2,y1,y2; color=random()%15; x=random()%40; y1=random()%48; y2=random()%48; for (y=y1; y mine->prog_start_time+sim->delay) *stepno=999; break; case 999: *stepno=0; break; case A2CONTROLLER_FREE: free(mine); mine = 0; break; } } static void (* const controllers[]) (apple2_sim_t *sim, int *stepno, double *next_actiontime) = { slideshow_controller, terminal_controller, basic_controller }; struct state { int duration; Bool random_p; apple2_sim_t *sim; void (*controller) (apple2_sim_t *sim, int *stepno, double *next_actiontime); }; static void * apple2_init (Display *dpy, Window window) { struct state *st = (struct state *) calloc (1, sizeof(*st)); char *s; st->duration = get_integer_resource (dpy, "duration", "Integer"); st->controller = 0; if (st->duration < 1) st->duration = 1; s = get_string_resource (dpy, "mode", "Mode"); if (!s || !*s || !strcasecmp(s, "random")) st->random_p = True; else if (!strcasecmp(s, "text")) st->controller = terminal_controller; else if (!strcasecmp(s, "slideshow")) st->controller = slideshow_controller; else if (!strcasecmp(s, "basic")) st->controller = basic_controller; else { fprintf (stderr, "%s: mode must be text, slideshow, or random; not %s\n", progname, s); exit (1); } if (s) free (s); global_program = get_string_resource (dpy, "program", "Program"); global_fast_p = get_boolean_resource (dpy, "fast", "Boolean"); /* Kludge for MacOS standalone mode: see OSX/SaverRunner.m. */ { const char *s = getenv ("XSCREENSAVER_STANDALONE"); if (s && *s && strcmp(s, "0")) { st->controller = terminal_controller; st->random_p = False; global_program = getenv ("SHELL"); global_fast_p = True; } } if (! st->random_p) { if (st->controller == terminal_controller || st->controller == slideshow_controller) st->duration = 999999; /* these run "forever" */ } return st; } static unsigned long apple2_draw (Display *dpy, Window window, void *closure) { struct state *st = (struct state *) closure; if (! st->sim) { if (st->random_p) st->controller = controllers[random() % (countof(controllers))]; st->sim = apple2_start (dpy, window, st->duration, st->controller); } if (! apple2_one_frame (st->sim)) { st->sim = 0; } #ifdef HAVE_MOBILE return 0; #else return 5000; #endif } static void apple2_reshape (Display *dpy, Window window, void *closure, unsigned int w, unsigned int h) { struct state *st = (struct state *) closure; if (st->sim) analogtv_reconfigure (st->sim->dec); } static Bool apple2_event (Display *dpy, Window window, void *closure, XEvent *event) { struct state *st = (struct state *) closure; if (st->sim && st->controller == terminal_controller && event->xany.type == KeyPress) { terminal_keypress_handler (dpy, event, st->sim->controller_data); return True; } return False; } static void apple2_free (Display *dpy, Window window, void *closure) { struct state *st = (struct state *) closure; if (st->sim) { st->sim->stepno = A2CONTROLLER_DONE; if (apple2_one_frame (st->sim)) abort(); /* should have freed! */ } free (st); } XSCREENSAVER_MODULE ("Apple2", apple2) xscreensaver-5.36/hacks/analogtv.c000664 000767 000024 00000224414 12717726452 017234 0ustar00jwzstaff000000 000000 /* analogtv, Copyright (c) 2003, 2004 Trevor Blackwell * * 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 is the code for implementing something that looks like a conventional analog TV set. It simulates the following characteristics of standard televisions: - Realistic rendering of a composite video signal - Compression & brightening on the right, as the scan gets truncated because of saturation in the flyback transformer - Blooming of the picture dependent on brightness - Overscan, cutting off a few pixels on the left side. - Colored text in mixed graphics/text modes It's amazing how much it makes your high-end monitor look like at large late-70s TV. All you need is to put a big "Solid State" logo in curly script on it and you'd be set. In DirectColor or TrueColor modes, it generates pixel values directly from RGB values it calculates across each scan line. In PseudoColor mode, it consider each possible pattern of 5 preceding bit values in each possible position modulo 4 and allocates a color for each. A few things, like the brightening on the right side as the horizontal trace slows down, aren't done in PseudoColor. I originally wrote it for the Apple ][ emulator, and generalized it here for use with a rewrite of xteevee and possibly others. A maxim of technology is that failures reveal underlying mechanism. A good way to learn how something works is to push it to failure. The way it fails will usually tell you a lot about how it works. The corollary for this piece of software is that in order to emulate realistic failures of a TV set, it has to work just like a TV set. So there is lots of DSP-style emulation of analog circuitry for things like color decoding, H and V sync following, and more. In 2003, computers are just fast enough to do this at television signal rates. We use a 14 MHz sample rate here, so we can do on the order of a couple hundred instructions per sample and keep a good frame rate. Trevor Blackwell */ /* 2014-04-20, Dave Odell : API change: Folded analogtv_init_signal and *_add_signal into *_draw(). Added SMP support. Replaced doubles with floats, including constants and transcendental functions. Fixed a bug or two. */ /* 2015-02-27, Tomasz Sulej : - tint_control variable is used now - removed unusable hashnoise code */ #ifdef HAVE_JWXYZ # include "jwxyz.h" #else /* !HAVE_JWXYZ */ # include # include #endif #include #include #include #include "utils.h" #include "resources.h" #include "analogtv.h" #include "yarandom.h" #include "grabscreen.h" #include "visual.h" /* #define DEBUG 1 */ #if defined(DEBUG) && (defined(__linux) || defined(__FreeBSD__)) /* only works on linux + freebsd */ #include #define DTIME_DECL u_int64_t dtimes[100]; int n_dtimes #define DTIME_START do {n_dtimes=0; dtimes[n_dtimes++]=rdtsc(); } while (0) #define DTIME dtimes[n_dtimes++]=rdtsc() #define DTIME_SHOW(DIV) \ do { \ double _dtime_div=(DIV); \ printf("time/%.1f: ",_dtime_div); \ for (i=1; ipowerup-start; float ret; if (pt<0.0f) return 0.0f; if (pt>900.0f || pt/tc>8.0f) return 1.0f; ret=(1.0f-expf(-pt/tc))*over; if (ret>1.0f) return 1.0f; return ret*ret; } /* There are actual standards for TV signals: NTSC and RS-170A describe the system used in the US and Japan. Europe has slightly different systems, but not different enough to make substantially different screensaver displays. Sadly, the standards bodies don't do anything so useful as publish the spec on the web. Best bets are: http://www.ee.washington.edu/conselec/CE/kuhn/ntsc/95x4.htm http://www.ntsc-tv.com/ntsc-index-02.htm In DirectColor or TrueColor modes, it generates pixel values directly from RGB values it calculates across each scan line. In PseudoColor mode, it consider each possible pattern of 5 preceding bit values in each possible position modulo 4 and allocates a color for each. A few things, like the brightening on the right side as the horizontal trace slows down, aren't done in PseudoColor. I'd like to add a bit of visible retrace, but it conflicts with being able to bitcopy the image when fast scrolling. After another couple of CPU generations, we could probably regenerate the whole image from scratch every time. On a P4 2 GHz it can manage this fine for blinking text, but scrolling looks too slow. */ /* localbyteorder is MSBFirst or LSBFirst */ static int localbyteorder; static const double float_low8_ofs=8388608.0; static int float_extraction_works; typedef union { float f; int i; } float_extract_t; static void analogtv_init(void) { int i; { unsigned int localbyteorder_loc = (MSBFirst<<24) | (LSBFirst<<0); localbyteorder=*(char *)&localbyteorder_loc; } if (1) { float_extract_t fe; int ans; float_extraction_works=1; for (i=0; i<256*4; i++) { fe.f=float_low8_ofs+(double)i; ans=fe.i&0x3ff; if (ans != i) { #ifdef DEBUG printf("Float extraction failed for %d => %d\n",i,ans); #endif float_extraction_works=0; break; } } } } void analogtv_set_defaults(analogtv *it, char *prefix) { char buf[256]; sprintf(buf,"%sTVTint",prefix); it->tint_control = get_float_resource(it->dpy, buf,"TVTint"); sprintf(buf,"%sTVColor",prefix); it->color_control = get_float_resource(it->dpy, buf,"TVColor")/100.0; sprintf(buf,"%sTVBrightness",prefix); it->brightness_control = get_float_resource(it->dpy, buf,"TVBrightness") / 100.0; sprintf(buf,"%sTVContrast",prefix); it->contrast_control = get_float_resource(it->dpy, buf,"TVContrast") / 100.0; it->height_control = 1.0; it->width_control = 1.0; it->squish_control = 0.0; it->powerup=1000.0; it->hashnoise_rpm=0; it->hashnoise_on=0; it->hashnoise_enable=1; it->horiz_desync=frand(10.0)-5.0; it->squeezebottom=frand(5.0)-1.0; #ifdef DEBUG printf("analogtv: prefix=%s\n",prefix); printf(" use: shm=%d cmap=%d color=%d\n", it->use_shm,it->use_cmap,it->use_color); printf(" controls: tint=%g color=%g brightness=%g contrast=%g\n", it->tint_control, it->color_control, it->brightness_control, it->contrast_control); /* printf(" freq_error %g: %g %d\n", it->freq_error, it->freq_error_inc, it->flutter_tint); */ printf(" desync: %g %d\n", it->horiz_desync, it->flutter_horiz_desync); printf(" hashnoise rpm: %g\n", it->hashnoise_rpm); printf(" vis: %d %d %d\n", it->visclass, it->visbits, it->visdepth); printf(" shift: %d-%d %d-%d %d-%d\n", it->red_invprec,it->red_shift, it->green_invprec,it->green_shift, it->blue_invprec,it->blue_shift); printf(" size: %d %d %d %d xrepl=%d\n", it->usewidth, it->useheight, it->screen_xo, it->screen_yo, it->xrepl); printf(" ANALOGTV_V=%d\n",ANALOGTV_V); printf(" ANALOGTV_TOP=%d\n",ANALOGTV_TOP); printf(" ANALOGTV_VISLINES=%d\n",ANALOGTV_VISLINES); printf(" ANALOGTV_BOT=%d\n",ANALOGTV_BOT); printf(" ANALOGTV_H=%d\n",ANALOGTV_H); printf(" ANALOGTV_SYNC_START=%d\n",ANALOGTV_SYNC_START); printf(" ANALOGTV_BP_START=%d\n",ANALOGTV_BP_START); printf(" ANALOGTV_CB_START=%d\n",ANALOGTV_CB_START); printf(" ANALOGTV_PIC_START=%d\n",ANALOGTV_PIC_START); printf(" ANALOGTV_PIC_LEN=%d\n",ANALOGTV_PIC_LEN); printf(" ANALOGTV_FP_START=%d\n",ANALOGTV_FP_START); printf(" ANALOGTV_PIC_END=%d\n",ANALOGTV_PIC_END); printf(" ANALOGTV_HASHNOISE_LEN=%d\n",ANALOGTV_HASHNOISE_LEN); #endif } extern Bool mono_p; /* shoot me */ static void analogtv_free_image(analogtv *it) { if (it->image) { if (it->use_shm) { #ifdef HAVE_XSHM_EXTENSION destroy_xshm_image(it->dpy, it->image, &it->shm_info); #endif } else { thread_free(it->image->data); it->image->data = NULL; XDestroyImage(it->image); } it->image=NULL; } } static void analogtv_alloc_image(analogtv *it) { /* On failure, it->image is NULL. */ unsigned bits_per_pixel = get_bits_per_pixel(it->dpy, it->xgwa.depth); unsigned align = thread_memory_alignment(it->dpy) * 8 - 1; /* Width is in bits. */ unsigned width = (it->usewidth * bits_per_pixel + align) & ~align; if (it->use_shm) { #ifdef HAVE_XSHM_EXTENSION it->image=create_xshm_image(it->dpy, it->xgwa.visual, it->xgwa.depth, ZPixmap, 0, &it->shm_info, width / bits_per_pixel, it->useheight); #endif if (!it->image) it->use_shm=0; } if (!it->image) { it->image = XCreateImage(it->dpy, it->xgwa.visual, it->xgwa.depth, ZPixmap, 0, 0, it->usewidth, it->useheight, 8, width / 8); if (it->image) { if(thread_malloc((void **)&it->image->data, it->dpy, it->image->height * it->image->bytes_per_line)) { it->image->data = NULL; XDestroyImage(it->image); it->image = NULL; } } } if (it->image) { memset (it->image->data, 0, it->image->height * it->image->bytes_per_line); } else { /* Not enough memory. Maybe try a smaller window. */ fprintf(stderr, "analogtv: %s\n", strerror(ENOMEM)); } } static void analogtv_configure(analogtv *it) { int oldwidth=it->usewidth; int oldheight=it->useheight; int wlim,hlim,height_diff; /* If the window is very small, don't let the image we draw get lower than the actual TV resolution (266x200.) If the aspect ratio of the window is close to a 4:3 or 16:9 ratio, then scale the image to exactly fill the window. Otherwise, center the image either horizontally or vertically, letterboxing or pillarboxing (but not both). If it's very close (2.5%) to a multiple of VISLINES, make it exact For example, it maps 1024 => 1000. */ float percent = 0.15; float min_ratio = 4.0 / 3.0 * (1 - percent); float max_ratio = 16.0 / 9.0 * (1 + percent); float ratio; float height_snap=0.025; hlim = it->xgwa.height; wlim = it->xgwa.width; ratio = wlim / (float) hlim; #ifdef HAVE_MOBILE /* Fill the whole iPhone screen, even though that distorts the image. */ min_ratio = 0; max_ratio = 10; #endif if (wlim < 266 || hlim < 200) { wlim = 266; hlim = 200; # ifdef DEBUG fprintf (stderr, "size: minimal: %dx%d in %dx%d (%.3f < %.3f < %.3f)\n", wlim, hlim, it->xgwa.width, it->xgwa.height, min_ratio, ratio, max_ratio); # endif } else if (ratio > min_ratio && ratio < max_ratio) { # ifdef DEBUG fprintf (stderr, "size: close enough: %dx%d (%.3f < %.3f < %.3f)\n", wlim, hlim, min_ratio, ratio, max_ratio); # endif } else if (ratio >= max_ratio) { wlim = hlim*max_ratio; # ifdef DEBUG fprintf (stderr, "size: center H: %dx%d in %dx%d (%.3f < %.3f < %.3f)\n", wlim, hlim, it->xgwa.width, it->xgwa.height, min_ratio, ratio, max_ratio); # endif } else /* ratio <= min_ratio */ { hlim = wlim/min_ratio; # ifdef DEBUG fprintf (stderr, "size: center V: %dx%d in %dx%d (%.3f < %.3f < %.3f)\n", wlim, hlim, it->xgwa.width, it->xgwa.height, min_ratio, ratio, max_ratio); # endif } height_diff = ((hlim + ANALOGTV_VISLINES/2) % ANALOGTV_VISLINES) - ANALOGTV_VISLINES/2; if (height_diff != 0 && abs(height_diff) < hlim * height_snap) { hlim -= height_diff; } /* Most times this doesn't change */ if (wlim != oldwidth || hlim != oldheight) { it->usewidth=wlim; it->useheight=hlim; it->xrepl=1+it->usewidth/640; if (it->xrepl>2) it->xrepl=2; it->subwidth=it->usewidth/it->xrepl; analogtv_free_image(it); analogtv_alloc_image(it); } it->screen_xo = (it->xgwa.width-it->usewidth)/2; it->screen_yo = (it->xgwa.height-it->useheight)/2; it->need_clear=1; } void analogtv_reconfigure(analogtv *it) { XGetWindowAttributes (it->dpy, it->window, &it->xgwa); analogtv_configure(it); } /* Can be any power-of-two <= 32. 16 a slightly better choice for 2-3 threads. */ #define ANALOGTV_SUBTOTAL_LEN 32 typedef struct analogtv_thread_s { analogtv *it; unsigned thread_id; size_t signal_start, signal_end; } analogtv_thread; #define SIGNAL_OFFSET(thread_id) \ ((ANALOGTV_SIGNAL_LEN * (thread_id) / threads->count) & align) static int analogtv_thread_create(void *thread_raw, struct threadpool *threads, unsigned thread_id) { analogtv_thread *thread = (analogtv_thread *)thread_raw; unsigned align; thread->it = GET_PARENT_OBJ(analogtv, threads, threads); thread->thread_id = thread_id; align = thread_memory_alignment(thread->it->dpy) / sizeof(thread->it->signal_subtotals[0]); if (!align) align = 1; align = ~(align * ANALOGTV_SUBTOTAL_LEN - 1); thread->signal_start = SIGNAL_OFFSET(thread_id); thread->signal_end = thread_id + 1 == threads->count ? ANALOGTV_SIGNAL_LEN : SIGNAL_OFFSET(thread_id + 1); return 0; } static void analogtv_thread_destroy(void *thread_raw) { } analogtv * analogtv_allocate(Display *dpy, Window window) { static const struct threadpool_class cls = { sizeof(analogtv_thread), analogtv_thread_create, analogtv_thread_destroy }; XGCValues gcv; analogtv *it=NULL; int i; const size_t rx_signal_len = ANALOGTV_SIGNAL_LEN + 2*ANALOGTV_H; analogtv_init(); it=(analogtv *)calloc(1,sizeof(analogtv)); if (!it) return 0; it->threads.count=0; it->rx_signal=NULL; it->signal_subtotals=NULL; it->dpy=dpy; it->window=window; if (thread_malloc((void **)&it->rx_signal, dpy, sizeof(it->rx_signal[0]) * rx_signal_len)) goto fail; assert(!(ANALOGTV_SIGNAL_LEN % ANALOGTV_SUBTOTAL_LEN)); if (thread_malloc((void **)&it->signal_subtotals, dpy, sizeof(it->signal_subtotals[0]) * (rx_signal_len / ANALOGTV_SUBTOTAL_LEN))) goto fail; if (threadpool_create(&it->threads, &cls, dpy, hardware_concurrency(dpy))) goto fail; assert(it->threads.count); it->shrinkpulse=-1; it->n_colors=0; #ifdef HAVE_XSHM_EXTENSION it->use_shm=1; #else it->use_shm=0; #endif XGetWindowAttributes (it->dpy, it->window, &it->xgwa); it->screen=it->xgwa.screen; it->colormap=it->xgwa.colormap; it->visclass=it->xgwa.visual->class; it->visbits=it->xgwa.visual->bits_per_rgb; it->visdepth=it->xgwa.depth; if (it->visclass == TrueColor || it->visclass == DirectColor) { if (get_integer_resource (it->dpy, "use_cmap", "Integer")) { it->use_cmap=1; } else { it->use_cmap=0; } it->use_color=!mono_p; } else if (it->visclass == PseudoColor || it->visclass == StaticColor) { it->use_cmap=1; it->use_color=!mono_p; } else { it->use_cmap=1; it->use_color=0; } it->red_mask=it->xgwa.visual->red_mask; it->green_mask=it->xgwa.visual->green_mask; it->blue_mask=it->xgwa.visual->blue_mask; it->red_shift=it->red_invprec=-1; it->green_shift=it->green_invprec=-1; it->blue_shift=it->blue_invprec=-1; if (!it->use_cmap) { /* Is there a standard way to do this? Does this handle all cases? */ int shift, prec; for (shift=0; shift<32; shift++) { for (prec=1; prec<16 && prec<40-shift; prec++) { unsigned long mask=(0xffffUL>>(16-prec)) << shift; if (it->red_shift<0 && mask==it->red_mask) it->red_shift=shift, it->red_invprec=16-prec; if (it->green_shift<0 && mask==it->green_mask) it->green_shift=shift, it->green_invprec=16-prec; if (it->blue_shift<0 && mask==it->blue_mask) it->blue_shift=shift, it->blue_invprec=16-prec; } } if (it->red_shift<0 || it->green_shift<0 || it->blue_shift<0) { if (0) fprintf(stderr,"Can't figure out color space\n"); goto fail; } for (i=0; i65535) intensity=65535; it->red_values[i]=((intensity>>it->red_invprec)<red_shift); it->green_values[i]=((intensity>>it->green_invprec)<green_shift); it->blue_values[i]=((intensity>>it->blue_invprec)<blue_shift); } } gcv.background=get_pixel_resource(it->dpy, it->colormap, "background", "Background"); it->gc = XCreateGC(it->dpy, it->window, GCBackground, &gcv); XSetWindowBackground(it->dpy, it->window, gcv.background); XClearWindow(dpy,window); analogtv_configure(it); return it; fail: if (it) { if(it->threads.count) threadpool_destroy(&it->threads); thread_free(it->signal_subtotals); thread_free(it->rx_signal); free(it); } return NULL; } void analogtv_release(analogtv *it) { if (it->image) { if (it->use_shm) { #ifdef HAVE_XSHM_EXTENSION destroy_xshm_image(it->dpy, it->image, &it->shm_info); #endif } else { thread_free(it->image->data); it->image->data = NULL; XDestroyImage(it->image); } it->image=NULL; } if (it->gc) XFreeGC(it->dpy, it->gc); it->gc=NULL; if (it->n_colors) XFreeColors(it->dpy, it->colormap, it->colors, it->n_colors, 0L); it->n_colors=0; threadpool_destroy(&it->threads); thread_free(it->rx_signal); thread_free(it->signal_subtotals); free(it); } /* First generate the I and Q reference signals, which we'll multiply the input signal by to accomplish the demodulation. Normally they are shifted 33 degrees from the colorburst. I think this was convenient for inductor-capacitor-vacuum tube implementation. The tint control, FWIW, just adds a phase shift to the chroma signal, and the color control controls the amplitude. In text modes (colormode==0) the system disabled the color burst, and no color was detected by the monitor. freq_error gives a mismatch between the built-in oscillator and the TV's colorbust. Some II Plus machines seemed to occasionally get instability problems -- the crystal oscillator was a single transistor if I remember correctly -- and the frequency would vary enough that the tint would change across the width of the screen. The left side would be in correct tint because it had just gotten resynchronized with the color burst. If we're using a colormap, set it up. */ int analogtv_set_demod(analogtv *it) { int y_levels=10,i_levels=5,q_levels=5; /* In principle, we might be able to figure out how to adjust the color map frame-by-frame to get some nice color bummage. But I'm terrified of changing the color map because we'll get flashing. I can hardly believe we still have to deal with colormaps. They're like having NEAR PTRs: an enormous hassle for the programmer just to save on memory. They should have been deprecated by 1995 or so. */ cmap_again: if (it->use_cmap && !it->n_colors) { if (it->n_colors) { XFreeColors(it->dpy, it->colormap, it->colors, it->n_colors, 0L); it->n_colors=0; } { int yli,qli,ili; for (yli=0; yli65535) r=65535; if (g<0) g=0; if (g>65535) g=65535; if (b<0) b=0; if (b>65535) b=65535; #ifdef DEBUG printf("%0.2f %0.2f %0.2f => %02x%02x%02x\n", interpy, interpi, interpq, r/256,g/256,b/256); #endif col.red=r; col.green=g; col.blue=b; col.pixel=0; if (!XAllocColor(it->dpy, it->colormap, &col)) { if (q_levels > y_levels*4/12) q_levels--; else if (i_levels > y_levels*5/12) i_levels--; else y_levels--; if (y_levels<2) return -1; goto cmap_again; } it->colors[it->n_colors++]=col.pixel; } } } it->cmap_y_levels=y_levels; it->cmap_i_levels=i_levels; it->cmap_q_levels=q_levels; } } return 0; } #if 0 unsigned int analogtv_line_signature(analogtv_input *input, int lineno) { int i; char *origsignal=&input->signal[(lineno+input->vsync) %ANALOGTV_V][input->line_hsync[lineno]]; unsigned int hash=0; /* probably lame */ for (i=0; iline_hsync[lineno]; hash ^= hash >> 2; /* hash += input->hashnoise_times[lineno]; hash ^= hash >> 2; */ return hash; } #endif /* Here we model the analog circuitry of an NTSC television. Basically, it splits the signal into 3 signals: Y, I and Q. Y corresponds to luminance, and you get it by low-pass filtering the input signal to below 3.57 MHz. I and Q are the in-phase and quadrature components of the 3.57 MHz subcarrier. We get them by multiplying by cos(3.57 MHz*t) and sin(3.57 MHz*t), and low-pass filtering. Because the eye has less resolution in some colors than others, the I component gets low-pass filtered at 1.5 MHz and the Q at 0.5 MHz. The I component is approximately orange-blue, and Q is roughly purple-green. See http://www.ntsc-tv.com for details. We actually do an awful lot to the signal here. I suspect it would make sense to wrap them all up together by calculating impulse response and doing FFT convolutions. */ static void analogtv_ntsc_to_yiq(const analogtv *it, int lineno, const float *signal, int start, int end, struct analogtv_yiq_s *it_yiq) { enum {MAXDELAY=32}; int i; const float *sp; int phasecorr=(signal-it->rx_signal)&3; struct analogtv_yiq_s *yiq; int colormode; float agclevel=it->agclevel; float brightadd=it->brightness_control*100.0 - ANALOGTV_BLACK_LEVEL; float delay[MAXDELAY+ANALOGTV_PIC_LEN], *dp; float multiq2[4]; { double cb_i=(it->line_cb_phase[lineno][(2+phasecorr)&3]- it->line_cb_phase[lineno][(0+phasecorr)&3])/16.0; double cb_q=(it->line_cb_phase[lineno][(3+phasecorr)&3]- it->line_cb_phase[lineno][(1+phasecorr)&3])/16.0; colormode = (cb_i * cb_i + cb_q * cb_q) > 2.8; if (colormode) { multiq2[0] = (cb_i*it->tint_i - cb_q*it->tint_q) * it->color_control; multiq2[1] = (cb_q*it->tint_i + cb_i*it->tint_q) * it->color_control; multiq2[2]=-multiq2[0]; multiq2[3]=-multiq2[1]; } } #if 0 if (lineno==100) { printf("multiq = [%0.3f %0.3f %0.3f %0.3f] ", it->multiq[60],it->multiq[61],it->multiq[62],it->multiq[63]); printf("it->line_cb_phase = [%0.3f %0.3f %0.3f %0.3f]\n", it->line_cb_phase[lineno][0],it->line_cb_phase[lineno][1], it->line_cb_phase[lineno][2],it->line_cb_phase[lineno][3]); printf("multiq2 = [%0.3f %0.3f %0.3f %0.3f]\n", multiq2[0],multiq2[1],multiq2[2],multiq2[3]); } #endif dp=delay+ANALOGTV_PIC_LEN-MAXDELAY; for (i=0; i<5; i++) dp[i]=0.0f; assert(start>=0); assert(end < ANALOGTV_PIC_LEN+10); dp=delay+ANALOGTV_PIC_LEN-MAXDELAY; for (i=0; i<24; i++) dp[i]=0.0; for (i=start, yiq=it_yiq+start, sp=signal+start; iy = dp[8] + brightadd; } if (colormode) { dp=delay+ANALOGTV_PIC_LEN-MAXDELAY; for (i=0; i<27; i++) dp[i]=0.0; for (i=start, yiq=it_yiq+start, sp=signal+start; ii=dp[8] = (dp[5] + dp[0] +3.0f*(dp[4] + dp[1]) +4.0f*(dp[3] + dp[2]) -0.3333333333f * dp[10]); dp[16] = sig*multiq2[(i+3)&3] * 0.0833333333333f; yiq->q=dp[24] = (dp[16+5] + dp[16+0] +3.0f*(dp[16+4] + dp[16+1]) +4.0f*(dp[16+3] + dp[16+2]) -0.3333333333f * dp[24+2]); } } else { for (i=start, yiq=it_yiq+start; ii = yiq->q = 0.0f; } } } void analogtv_setup_teletext(analogtv_input *input) { int x,y; int teletext=ANALOGTV_BLACK_LEVEL; /* Teletext goes in line 21. But I suspect there are other things in the vertical retrace interval */ for (y=19; y<22; y++) { for (x=ANALOGTV_PIC_START; xsignal[y][x]=teletext; } } } void analogtv_setup_frame(analogtv *it) { /* int i,x,y;*/ it->redraw_all=0; if (it->flutter_horiz_desync) { /* Horizontal sync during vertical sync instability. */ it->horiz_desync += -0.10*(it->horiz_desync-3.0) + ((int)(random()&0xff)-0x80) * ((int)(random()&0xff)-0x80) * ((int)(random()&0xff)-0x80) * 0.000001; } /* it wasn't used for (i=0; ihashnoise_times[i]=0; } */ /* let's leave it to process shrinkpulse */ if (it->hashnoise_enable && !it->hashnoise_on) { if (random()%10000==0) { it->hashnoise_on=1; it->shrinkpulse=random()%ANALOGTV_V; } } if (random()%1000==0) { it->hashnoise_on=0; } #if 0 /* never used */ if (it->hashnoise_on) { it->hashnoise_rpm += (15000.0 - it->hashnoise_rpm)*0.05 + ((int)(random()%2000)-1000)*0.1; } else { it->hashnoise_rpm -= 100 + 0.01*it->hashnoise_rpm; if (it->hashnoise_rpm<0.0) it->hashnoise_rpm=0.0; } if (it->hashnoise_rpm > 0.0) { int hni; double hni_double; int hnc=it->hashnoise_counter; /* in 24.8 format */ /* Convert rpm of a 16-pole motor into dots in 24.8 format */ hni_double = ANALOGTV_V * ANALOGTV_H * 256.0 / (it->hashnoise_rpm * 16.0 / 60.0 / 60.0); hni = (hni_double <= INT_MAX) ? (int)hni_double : INT_MAX; while (hnc < (ANALOGTV_V * ANALOGTV_H)<<8) { y=(hnc>>8)/ANALOGTV_H; x=(hnc>>8)%ANALOGTV_H; if (x>0 && xhashnoise_times[y]=x; } /* hnc += hni + (int)(random()%65536)-32768; */ { hnc += (int)(random()%65536)-32768; if ((hnc >= 0) && (INT_MAX - hnc < hni)) break; hnc += hni; } } } #endif /* 0 */ /* hnc -= (ANALOGTV_V * ANALOGTV_H)<<8;*/ if (it->rx_signal_level != 0.0) it->agclevel = 1.0/it->rx_signal_level; #ifdef DEBUG2 printf("filter: "); for (i=0; ighostfir[i]); } printf(" siglevel=%g agc=%g\n", siglevel, it->agclevel); #endif } void analogtv_setup_sync(analogtv_input *input, int do_cb, int do_ssavi) { int i,lineno,vsync; signed char *sig; int synclevel = do_ssavi ? ANALOGTV_WHITE_LEVEL : ANALOGTV_SYNC_LEVEL; for (lineno=0; lineno=3 && lineno<7; sig=input->signal[lineno]; i=ANALOGTV_SYNC_START; if (vsync) { while (icur_hsync; int cur_vsync=it->cur_vsync; int lineno = 0; int i,j; float osc,filt; float *sp; float cbfc=1.0f/128.0f; /* sp = it->rx_signal + lineno*ANALOGTV_H + cur_hsync;*/ for (i=-32; i<32; i++) { lineno = (cur_vsync + i + ANALOGTV_V) % ANALOGTV_V; sp = it->rx_signal + lineno*ANALOGTV_H; filt=0.0f; for (j=0; jagclevel; osc = (float)(ANALOGTV_V+i)/(float)ANALOGTV_V; if (osc >= 1.05f+0.0002f * filt) break; } cur_vsync = (cur_vsync + i + ANALOGTV_V) % ANALOGTV_V; for (lineno=0; lineno5 && linenorx_signal + lineno2*ANALOGTV_H + cur_hsync; for (i=-8; i<8; i++) { osc = (float)(ANALOGTV_H+i)/(float)ANALOGTV_H; filt=(sp[i-3]+sp[i-2]+sp[i-1]+sp[i]) * it->agclevel; if (osc >= 1.005f + 0.0001f*filt) break; } cur_hsync = (cur_hsync + i + ANALOGTV_H) % ANALOGTV_H; } it->line_hsync[lineno]=(cur_hsync + ANALOGTV_PIC_START + ANALOGTV_H) % ANALOGTV_H; /* Now look for the colorburst, which is a few cycles after the H sync pulse, and store its phase. The colorburst is 9 cycles long, and we look at the middle 5 cycles. */ if (lineno>15) { sp = it->rx_signal + lineno*ANALOGTV_H + (cur_hsync&~3); for (i=ANALOGTV_CB_START+8; icb_phase[i&3] = it->cb_phase[i&3]*(1.0f-cbfc) + sp[i]*it->agclevel*cbfc; } } { float tot=0.1f; float cbgain; for (i=0; i<4; i++) { tot += it->cb_phase[i]*it->cb_phase[i]; } cbgain = 32.0f/sqrtf(tot); for (i=0; i<4; i++) { it->line_cb_phase[lineno][i]=it->cb_phase[i]*cbgain; } } #ifdef DEBUG if (0) printf("hs=%d cb=[%0.3f %0.3f %0.3f %0.3f]\n", cur_hsync, it->cb_phase[0], it->cb_phase[1], it->cb_phase[2], it->cb_phase[3]); #endif /* if (random()%2000==0) cur_hsync=random()%ANALOGTV_H; */ } it->cur_hsync = cur_hsync; it->cur_vsync = cur_vsync; } static double analogtv_levelmult(const analogtv *it, int level) { static const double levelfac[3]={-7.5, 5.5, 24.5}; return (40.0 + levelfac[level]*puramp(it, 3.0, 6.0, 1.0))/256.0; } static int analogtv_level(const analogtv *it, int y, int ytop, int ybot) { int level; if (ybot-ytop>=7) { if (y==ytop || y==ybot-1) level=0; else if (y==ytop+1 || y==ybot-2) level=1; else level=2; } else if (ybot-ytop>=5) { if (y==ytop || y==ybot-1) level=0; else level=2; } else if (ybot-ytop>=3) { if (y==ytop) level=0; else level=2; } else { level=2; } return level; } /* The point of this stuff is to ensure that when useheight is not a multiple of VISLINES so that TV scan lines map to different numbers of vertical screen pixels, the total brightness of each scan line remains the same. ANALOGTV_MAX_LINEHEIGHT corresponds to 2400 vertical pixels, beyond which it interpolates extra black lines. */ static void analogtv_setup_levels(analogtv *it, double avgheight) { int i,height; static const double levelfac[3]={-7.5, 5.5, 24.5}; for (height=0; heightleveltable[height][i].index = 2; } if (avgheight>=3) { it->leveltable[height][0].index=0; } if (avgheight>=5) { if (height >= 1) it->leveltable[height][height-1].index=0; } if (avgheight>=7) { it->leveltable[height][1].index=1; if (height >= 2) it->leveltable[height][height-2].index=1; } for (i=0; ileveltable[height][i].value = (40.0 + levelfac[it->leveltable[height][i].index]*puramp(it, 3.0, 6.0, 1.0)) / 256.0; } } } static void rnd_combine(unsigned *a0, unsigned *c0, unsigned a1, unsigned c1) { *a0 = (*a0 * a1) & 0xffffffffu; *c0 = (c1 + a1 * *c0) & 0xffffffffu; } static void rnd_seek_ac(unsigned *a, unsigned *c, unsigned dist) { unsigned int a1 = *a, c1 = *c; *a = 1, *c = 0; while(dist) { if(dist & 1) rnd_combine(a, c, a1, c1); dist >>= 1; rnd_combine(&a1, &c1, a1, c1); } } static unsigned int rnd_seek(unsigned a, unsigned c, unsigned rnd, unsigned dist) { rnd_seek_ac(&a, &c, dist); return a * rnd + c; } static void analogtv_init_signal(const analogtv *it, double noiselevel, unsigned start, unsigned end) { float *ps=it->rx_signal + start; float *pe=it->rx_signal + end; float *p=ps; unsigned int fastrnd=rnd_seek(FASTRND_A, FASTRND_C, it->random0, start); unsigned int fastrnd_offset; float nm1,nm2; float noisemul = sqrt(noiselevel*150)/(float)0x7fffffff; fastrnd_offset = fastrnd - 0x7fffffff; nm1 = (fastrnd_offset <= INT_MAX ? (int)fastrnd_offset : -1 - (int)(UINT_MAX - fastrnd_offset)) * noisemul; while (p != pe) { nm2=nm1; fastrnd = (fastrnd*FASTRND_A+FASTRND_C) & 0xffffffffu; fastrnd_offset = fastrnd - 0x7fffffff; nm1 = (fastrnd_offset <= INT_MAX ? (int)fastrnd_offset : -1 - (int)(UINT_MAX - fastrnd_offset)) * noisemul; *p++ = nm1*nm2; } } static void analogtv_add_signal(const analogtv *it, const analogtv_reception *rec, unsigned start, unsigned end, int ec) { analogtv_input *inp=rec->input; float *ps=it->rx_signal + start; float *pe=it->rx_signal + end; float *p=ps; signed char *ss=&inp->signal[0][0]; signed char *se=&inp->signal[0][0] + ANALOGTV_SIGNAL_LEN; signed char *s=ss + ((start + (unsigned)rec->ofs) % ANALOGTV_SIGNAL_LEN); signed char *s2; int i; float level=rec->level; float hfloss=rec->hfloss; unsigned int fastrnd=rnd_seek(FASTRND_A, FASTRND_C, it->random1, start); float dp[5]; const float noise_decay = 0.99995f; float noise_ampl = 1.3f * powf(noise_decay, start); if (ec > end) ec = end; /* assert((se-ss)%4==0 && (se-s)%4==0); */ for (i = start; i < ec; i++) { /* Sometimes start > ec. */ /* Do a big noisy transition. We can make the transition noise of high constant strength regardless of signal strength. There are two separate state machines. here, One is the noise process and the other is the We don't bother with the FIR filter here */ float sig0=(float)s[0]; unsigned int fastrnd_offset = fastrnd - 0x7fffffff; float noise = (fastrnd_offset <= INT_MAX ? (int)fastrnd_offset : -1 - (int)(UINT_MAX - fastrnd_offset)) * (50.0f/(float)0x7fffffff); fastrnd = (fastrnd*FASTRND_A+FASTRND_C) & 0xffffffffu; p[0] += sig0 * level * (1.0f - noise_ampl) + noise * noise_ampl; noise_ampl *= noise_decay; p++; s++; if (s>=se) s=ss; } dp[0]=0.0; s2 = s; for (i=1; i<5; i++) { s2 -= 4; if (s2 < ss) s2 += ANALOGTV_SIGNAL_LEN; dp[i] = (float)((int)s2[0]+(int)s2[1]+(int)s2[2]+(int)s2[3]); } assert(p <= pe); assert(!((pe - p) % 4)); while (p != pe) { float sig0,sig1,sig2,sig3,sigr; sig0=(float)s[0]; sig1=(float)s[1]; sig2=(float)s[2]; sig3=(float)s[3]; dp[0]=sig0+sig1+sig2+sig3; /* Get the video out signal, and add some ghosting, typical of RF monitor cables. This corresponds to a pretty long cable, but looks right to me. */ sigr=(dp[1]*rec->ghostfir[0] + dp[2]*rec->ghostfir[1] + dp[3]*rec->ghostfir[2] + dp[4]*rec->ghostfir[3]); dp[4]=dp[3]; dp[3]=dp[2]; dp[2]=dp[1]; dp[1]=dp[0]; p[0] += (sig0+sigr + sig2*hfloss) * level; p[1] += (sig1+sigr + sig3*hfloss) * level; p[2] += (sig2+sigr + sig0*hfloss) * level; p[3] += (sig3+sigr + sig1*hfloss) * level; p += 4; s += 4; if (s>=se) s = ss + (s-se); } assert(p == pe); } static void analogtv_thread_add_signals(void *thread_raw) { const analogtv_thread *thread = (analogtv_thread *)thread_raw; const analogtv *it = thread->it; unsigned i, j; unsigned subtotal_end; unsigned start = thread->signal_start; while(start != thread->signal_end) { float *p; /* Work on 8 KB blocks; these should fit in L1. */ /* (Though it doesn't seem to help much on my system.) */ unsigned end = start + 2048; if(end > thread->signal_end) end = thread->signal_end; analogtv_init_signal (it, it->noiselevel, start, end); for (i = 0; i != it->rec_count; ++i) { analogtv_add_signal (it, it->recs[i], start, end, !i ? it->channel_change_cycles : 0); } assert (!(start % ANALOGTV_SUBTOTAL_LEN)); assert (!(end % ANALOGTV_SUBTOTAL_LEN)); p = it->rx_signal + start; subtotal_end = end / ANALOGTV_SUBTOTAL_LEN; for (i = start / ANALOGTV_SUBTOTAL_LEN; i != subtotal_end; ++i) { float sum = p[0]; for (j = 1; j != ANALOGTV_SUBTOTAL_LEN; ++j) sum += p[j]; it->signal_subtotals[i] = sum; p += ANALOGTV_SUBTOTAL_LEN; } start = end; } } static int analogtv_get_line(const analogtv *it, int lineno, int *slineno, int *ytop, int *ybot, unsigned *signal_offset) { *slineno=lineno-ANALOGTV_TOP; *ytop=(int)((*slineno*it->useheight/ANALOGTV_VISLINES - it->useheight/2)*it->puheight) + it->useheight/2; *ybot=(int)(((*slineno+1)*it->useheight/ANALOGTV_VISLINES - it->useheight/2)*it->puheight) + it->useheight/2; #if 0 int linesig=analogtv_line_signature(input,lineno) + it->hashnoise_times[lineno]; #endif *signal_offset = ((lineno+it->cur_vsync+ANALOGTV_V) % ANALOGTV_V) * ANALOGTV_H + it->line_hsync[lineno]; if (*ytop==*ybot) return 0; if (*ybot<0 || *ytop>it->useheight) return 0; if (*ytop<0) *ytop=0; if (*ybot>it->useheight) *ybot=it->useheight; if (*ybot > *ytop+ANALOGTV_MAX_LINEHEIGHT) *ybot=*ytop+ANALOGTV_MAX_LINEHEIGHT; return 1; } static void analogtv_blast_imagerow(const analogtv *it, float *rgbf, float *rgbf_end, int ytop, int ybot) { int i,j,x,y; float *rpf; char *level_copyfrom[3]; int xrepl=it->xrepl; unsigned lineheight = ybot - ytop; if (lineheight > ANALOGTV_MAX_LINEHEIGHT) lineheight = ANALOGTV_MAX_LINEHEIGHT; for (i=0; i<3; i++) level_copyfrom[i]=NULL; for (y=ytop; yimage->data + y*it->image->bytes_per_line; unsigned line = y-ytop; int level=it->leveltable[lineheight][line].index; float levelmult=it->leveltable[lineheight][line].value; /* Fast special cases to avoid the slow XPutPixel. Ugh. It goes to show why standard graphics sw has to be fast, or else people will have to work around it and risk incompatibility. The quickdraw folks understood this. The other answer would be for X11 to have fewer formats for bitm.. oh, never mind. If neither of these cases work (they probably cover 99% of setups) it falls back on the Xlib routines. */ if (level_copyfrom[level]) { memcpy(rowdata, level_copyfrom[level], it->image->bytes_per_line); } else { level_copyfrom[level] = rowdata; if (0) { } else if (it->image->format==ZPixmap && it->image->bits_per_pixel==32 && sizeof(unsigned int)==4 && it->image->byte_order==localbyteorder) { /* int is more likely to be 32 bits than long */ unsigned int *pixelptr=(unsigned int *)rowdata; unsigned int pix; for (rpf=rgbf; rpf!=rgbf_end; rpf+=3) { int ntscri=rpf[0]*levelmult; int ntscgi=rpf[1]*levelmult; int ntscbi=rpf[2]*levelmult; if (ntscri>=ANALOGTV_CV_MAX) ntscri=ANALOGTV_CV_MAX-1; if (ntscgi>=ANALOGTV_CV_MAX) ntscgi=ANALOGTV_CV_MAX-1; if (ntscbi>=ANALOGTV_CV_MAX) ntscbi=ANALOGTV_CV_MAX-1; pix = (it->red_values[ntscri] | it->green_values[ntscgi] | it->blue_values[ntscbi]); pixelptr[0] = pix; if (xrepl>=2) { pixelptr[1] = pix; if (xrepl>=3) pixelptr[2] = pix; } pixelptr+=xrepl; } } else if (it->image->format==ZPixmap && it->image->bits_per_pixel==16 && sizeof(unsigned short)==2 && float_extraction_works && it->image->byte_order==localbyteorder) { unsigned short *pixelptr=(unsigned short *)rowdata; float r2,g2,b2; float_extract_t r1,g1,b1; unsigned short pix; for (rpf=rgbf; rpf!=rgbf_end; rpf+=3) { r2=rpf[0]; g2=rpf[1]; b2=rpf[2]; r1.f=r2 * levelmult+float_low8_ofs; g1.f=g2 * levelmult+float_low8_ofs; b1.f=b2 * levelmult+float_low8_ofs; pix = (it->red_values[r1.i & 0x3ff] | it->green_values[g1.i & 0x3ff] | it->blue_values[b1.i & 0x3ff]); pixelptr[0] = pix; if (xrepl>=2) { pixelptr[1] = pix; if (xrepl>=3) pixelptr[2] = pix; } pixelptr+=xrepl; } } else if (it->image->format==ZPixmap && it->image->bits_per_pixel==16 && sizeof(unsigned short)==2 && it->image->byte_order==localbyteorder) { unsigned short *pixelptr=(unsigned short *)rowdata; unsigned short pix; for (rpf=rgbf; rpf!=rgbf_end; rpf+=3) { int r1=rpf[0] * levelmult; int g1=rpf[1] * levelmult; int b1=rpf[2] * levelmult; if (r1>=ANALOGTV_CV_MAX) r1=ANALOGTV_CV_MAX-1; if (g1>=ANALOGTV_CV_MAX) g1=ANALOGTV_CV_MAX-1; if (b1>=ANALOGTV_CV_MAX) b1=ANALOGTV_CV_MAX-1; pix = it->red_values[r1] | it->green_values[g1] | it->blue_values[b1]; pixelptr[0] = pix; if (xrepl>=2) { pixelptr[1] = pix; if (xrepl>=3) pixelptr[2] = pix; } pixelptr+=xrepl; } } else { for (x=0, rpf=rgbf; rpf!=rgbf_end ; x++, rpf+=3) { int ntscri=rpf[0]*levelmult; int ntscgi=rpf[1]*levelmult; int ntscbi=rpf[2]*levelmult; if (ntscri>=ANALOGTV_CV_MAX) ntscri=ANALOGTV_CV_MAX-1; if (ntscgi>=ANALOGTV_CV_MAX) ntscgi=ANALOGTV_CV_MAX-1; if (ntscbi>=ANALOGTV_CV_MAX) ntscbi=ANALOGTV_CV_MAX-1; for (j=0; jimage, x*xrepl + j, y, it->red_values[ntscri] | it->green_values[ntscgi] | it->blue_values[ntscbi]); } } } } } } static void analogtv_thread_draw_lines(void *thread_raw) { const analogtv_thread *thread = (analogtv_thread *)thread_raw; const analogtv *it = thread->it; int lineno; float *raw_rgb_start; float *raw_rgb_end; raw_rgb_start=(float *)calloc(it->subwidth*3, sizeof(float)); if (! raw_rgb_start) return; raw_rgb_end=raw_rgb_start+3*it->subwidth; for (lineno=ANALOGTV_TOP + thread->thread_id; linenothreads.count) { int i,j,x,y; int slineno, ytop, ybot; unsigned signal_offset; const float *signal; int scanstart_i,scanend_i,squishright_i,squishdiv,pixrate; float *rgb_start, *rgb_end; float pixbright; int pixmultinc; float *rrp; struct analogtv_yiq_s yiq[ANALOGTV_PIC_LEN+10]; if (! analogtv_get_line(it, lineno, &slineno, &ytop, &ybot, &signal_offset)) continue; signal = it->rx_signal + signal_offset; { float bloomthisrow,shiftthisrow; float viswidth,middle; float scanwidth; int scw,scl,scr; bloomthisrow = -10.0f * it->crtload[lineno]; if (bloomthisrow<-10.0f) bloomthisrow=-10.0f; if (bloomthisrow>2.0f) bloomthisrow=2.0f; if (slineno<16) { shiftthisrow=it->horiz_desync * (expf(-0.17f*slineno) * (0.7f+cosf(slineno*0.6f))); } else { shiftthisrow=0.0f; } viswidth=ANALOGTV_PIC_LEN * 0.79f - 5.0f*bloomthisrow; middle=ANALOGTV_PIC_LEN/2 - shiftthisrow; scanwidth=it->width_control * puramp(it, 0.5f, 0.3f, 1.0f); scw=it->subwidth*scanwidth; if (scw>it->subwidth) scw=it->usewidth; scl=it->subwidth/2 - scw/2; scr=it->subwidth/2 + scw/2; pixrate=(int)((viswidth*65536.0f*1.0f)/it->subwidth)/scanwidth; scanstart_i=(int)((middle-viswidth*0.5f)*65536.0f); scanend_i=(ANALOGTV_PIC_LEN-1)*65536; squishright_i=(int)((middle+viswidth*(0.25f + 0.25f*puramp(it, 2.0f, 0.0f, 1.1f) - it->squish_control)) *65536.0f); squishdiv=it->subwidth/15; rgb_start=raw_rgb_start+scl*3; rgb_end=raw_rgb_start+scr*3; assert(scanstart_i>=0); #ifdef DEBUG if (0) printf("scan %d: %0.3f %0.3f %0.3f scl=%d scr=%d scw=%d\n", lineno, scanstart_i/65536.0f, squishright_i/65536.0f, scanend_i/65536.0f, scl,scr,scw); #endif } if (it->use_cmap) { for (y=ytop; ycontrast_control * puramp(it, 1.0f, 0.0f, 1.0f) / (0.5f+0.5f*it->puheight) * 0.070f; float levelmult_iq = levelmult * 0.090f; analogtv_ntsc_to_yiq(it, lineno, signal, (scanstart_i>>16)-10, (scanend_i>>16)+10, yiq); pixmultinc=pixrate; x=0; i=scanstart_i; while (i<0 && xusewidth) { XPutPixel(it->image, x, y, it->colors[0]); i+=pixmultinc; x++; } while (iusewidth) { float pixfrac=(i&0xffff)/65536.0f; float invpixfrac=(1.0f-pixfrac); int pati=i>>16; int yli,ili,qli,cmi; float interpy=(yiq[pati].y*invpixfrac + yiq[pati+1].y*pixfrac) * levelmult_y; float interpi=(yiq[pati].i*invpixfrac + yiq[pati+1].i*pixfrac) * levelmult_iq; float interpq=(yiq[pati].q*invpixfrac + yiq[pati+1].q*pixfrac) * levelmult_iq; yli = (int)(interpy * it->cmap_y_levels); ili = (int)((interpi+0.5f) * it->cmap_i_levels); qli = (int)((interpq+0.5f) * it->cmap_q_levels); if (yli<0) yli=0; if (yli>=it->cmap_y_levels) yli=it->cmap_y_levels-1; if (ili<0) ili=0; if (ili>=it->cmap_i_levels) ili=it->cmap_i_levels-1; if (qli<0) qli=0; if (qli>=it->cmap_q_levels) qli=it->cmap_q_levels-1; cmi=qli + it->cmap_i_levels*(ili + it->cmap_q_levels*yli); #ifdef DEBUG if ((random()%65536)==0) { printf("%0.3f %0.3f %0.3f => %d %d %d => %d\n", interpy, interpi, interpq, yli, ili, qli, cmi); } #endif for (j=0; jxrepl; j++) { XPutPixel(it->image, x, y, it->colors[cmi]); x++; } if (i >= squishright_i) { pixmultinc += pixmultinc/squishdiv; } i+=pixmultinc; } while (xusewidth) { XPutPixel(it->image, x, y, it->colors[0]); x++; } } } else { analogtv_ntsc_to_yiq(it, lineno, signal, (scanstart_i>>16)-10, (scanend_i>>16)+10, yiq); pixbright=it->contrast_control * puramp(it, 1.0f, 0.0f, 1.0f) / (0.5f+0.5f*it->puheight) * 1024.0f/100.0f; pixmultinc=pixrate; i=scanstart_i; rrp=rgb_start; while (i<0 && rrp!=rgb_end) { rrp[0]=rrp[1]=rrp[2]=0; i+=pixmultinc; rrp+=3; } while (i>16; float r,g,b; float interpy=(yiq[pati].y*invpixfrac + yiq[pati+1].y*pixfrac); float interpi=(yiq[pati].i*invpixfrac + yiq[pati+1].i*pixfrac); float interpq=(yiq[pati].q*invpixfrac + yiq[pati+1].q*pixfrac); /* According to the NTSC spec, Y,I,Q are generated as: y=0.30 r + 0.59 g + 0.11 b i=0.60 r - 0.28 g - 0.32 b q=0.21 r - 0.52 g + 0.31 b So if you invert the implied 3x3 matrix you get what standard televisions implement with a bunch of resistors (or directly in the CRT -- don't ask): r = y + 0.948 i + 0.624 q g = y - 0.276 i - 0.639 q b = y - 1.105 i + 1.729 q */ r=(interpy + 0.948f*interpi + 0.624f*interpq) * pixbright; g=(interpy - 0.276f*interpi - 0.639f*interpq) * pixbright; b=(interpy - 1.105f*interpi + 1.729f*interpq) * pixbright; if (r<0.0f) r=0.0f; if (g<0.0f) g=0.0f; if (b<0.0f) b=0.0f; rrp[0]=r; rrp[1]=g; rrp[2]=b; if (i>=squishright_i) { pixmultinc += pixmultinc/squishdiv; pixbright += pixbright/squishdiv/2; } i+=pixmultinc; rrp+=3; } while (rrp != rgb_end) { rrp[0]=rrp[1]=rrp[2]=0.0f; rrp+=3; } analogtv_blast_imagerow(it, raw_rgb_start, raw_rgb_end, ytop,ybot); } } free(raw_rgb_start); } void analogtv_draw(analogtv *it, double noiselevel, const analogtv_reception *const *recs, unsigned rec_count) { int i,lineno; /* int bigloadchange,drawcount;*/ double baseload; int overall_top, overall_bot; /* AnalogTV isn't very interesting if there isn't enough RAM. */ if (!it->image) return; it->rx_signal_level = noiselevel; for (i = 0; i != rec_count; ++i) { const analogtv_reception *rec = recs[i]; double level = rec->level; analogtv_input *inp=rec->input; it->rx_signal_level = sqrt(it->rx_signal_level * it->rx_signal_level + (level * level * (1.0 + 4.0*(rec->ghostfir[0] + rec->ghostfir[1] + rec->ghostfir[2] + rec->ghostfir[3])))); /* duplicate the first line into the Nth line to ease wraparound computation */ memcpy(inp->signal[ANALOGTV_V], inp->signal[0], ANALOGTV_H * sizeof(inp->signal[0][0])); } analogtv_setup_frame(it); analogtv_set_demod(it); it->random0 = random(); it->random1 = random(); it->noiselevel = noiselevel; it->recs = recs; it->rec_count = rec_count; threadpool_run(&it->threads, analogtv_thread_add_signals); threadpool_wait(&it->threads); it->channel_change_cycles=0; /* rx_signal has an extra 2 lines at the end, where we copy the first 2 lines so we can index into it while only worrying about wraparound on a per-line level */ memcpy(&it->rx_signal[ANALOGTV_SIGNAL_LEN], &it->rx_signal[0], 2*ANALOGTV_H*sizeof(it->rx_signal[0])); /* Repeat for signal_subtotals. */ memcpy(&it->signal_subtotals[ANALOGTV_SIGNAL_LEN / ANALOGTV_SUBTOTAL_LEN], &it->signal_subtotals[0], (2*ANALOGTV_H/ANALOGTV_SUBTOTAL_LEN)*sizeof(it->signal_subtotals[0])); analogtv_sync(it); /* Requires the add_signals be complete. */ baseload=0.5; /* if (it->hashnoise_on) baseload=0.5; */ /*bigloadchange=1; drawcount=0;*/ it->crtload[ANALOGTV_TOP-1]=baseload; it->puheight = puramp(it, 2.0, 1.0, 1.3) * it->height_control * (1.125 - 0.125*puramp(it, 2.0, 2.0, 1.1)); analogtv_setup_levels(it, it->puheight * (double)it->useheight/(double)ANALOGTV_VISLINES); /* calculate tint once per frame */ it->tint_i = -cos((103 + it->tint_control)*3.1415926/180); it->tint_q = sin((103 + it->tint_control)*3.1415926/180); for (lineno=ANALOGTV_TOP; linenoshrinkpulse) { baseload += 0.4; /*bigloadchange=1;*/ it->shrinkpulse=-1; } #if 0 if (it->hashnoise_rpm>0.0 && !(bigloadchange || it->redraw_all || (slineno<20 && it->flutter_horiz_desync) || it->gaussiannoise_level>30 || ((it->gaussiannoise_level>2.0 || it->multipath) && random()%4) || linesig != it->onscreen_signature[lineno])) { continue; } it->onscreen_signature[lineno] = linesig; #endif /* drawcount++;*/ /* Interpolate the 600-dotclock line into however many horizontal screen pixels we're using, and convert to RGB. We add some 'bloom', variations in the horizontal scan width with the amount of brightness, extremely common on period TV sets. They had a single oscillator which generated both the horizontal scan and (during the horizontal retrace interval) the high voltage for the electron beam. More brightness meant more load on the oscillator, which caused an decrease in horizontal deflection. Look for (bloomthisrow). Also, the A2 did a bad job of generating horizontal sync pulses during the vertical blanking interval. This, and the fact that the horizontal frequency was a bit off meant that TVs usually went a bit out of sync during the vertical retrace, and the top of the screen would be bent a bit to the left or right. Look for (shiftthisrow). We also add a teeny bit of left overscan, just enough to be annoying, but you can still read the left column of text. We also simulate compression & brightening on the right side of the screen. Most TVs do this, but you don't notice because they overscan so it's off the right edge of the CRT. But the A2 video system used so much of the horizontal scan line that you had to crank the horizontal width down in order to not lose the right few characters, and you'd see the compression on the right edge. Associated with compression is brightening; since the electron beam was scanning slower, the same drive signal hit the phosphor harder. Look for (squishright_i) and (squishdiv). */ { /* This used to be an int, I suspect by mistake. - Dave */ float totsignal=0; float ncl/*,diff*/; unsigned frac; size_t end0, end1; const float *p; frac = signal_offset & (ANALOGTV_SUBTOTAL_LEN - 1); p = it->rx_signal + (signal_offset & ~(ANALOGTV_SUBTOTAL_LEN - 1)); for (i=0; i != frac; i++) { totsignal -= p[i]; } end0 = (signal_offset + ANALOGTV_PIC_LEN); end1 = end0 / ANALOGTV_SUBTOTAL_LEN; for (i=signal_offset / ANALOGTV_SUBTOTAL_LEN; isignal_subtotals[i]; } frac = end0 & (ANALOGTV_SUBTOTAL_LEN - 1); p = it->rx_signal + (end0 & ~(ANALOGTV_SUBTOTAL_LEN - 1)); for (i=0; i != frac; i++) { totsignal += p[i]; } totsignal *= it->agclevel; ncl = 0.95f * it->crtload[lineno-1] + 0.05f*(baseload + (totsignal-30000)/100000.0f + (slineno>184 ? (slineno-184)*(lineno-184)*0.001f * it->squeezebottom : 0.0f)); /*diff=ncl - it->crtload[lineno];*/ /*bigloadchange = (diff>0.01 || diff<-0.01);*/ it->crtload[lineno]=ncl; } } threadpool_run(&it->threads, analogtv_thread_draw_lines); threadpool_wait(&it->threads); #if 0 /* poor attempt at visible retrace */ for (i=0; i<15; i++) { int ytop=(int)((i*it->useheight/15 - it->useheight/2)*puheight) + it->useheight/2; int ybot=(int)(((i+1)*it->useheight/15 - it->useheight/2)*puheight) + it->useheight/2; int div=it->usewidth*3/2; for (x=0; xusewidth; x++) { y = ytop + (ybot-ytop)*x / div; if (y<0 || y>=it->useheight) continue; XPutPixel(it->image, x, y, 0xffffff); } } #endif if (it->need_clear) { XClearWindow(it->dpy, it->window); it->need_clear=0; } /* Subtle change: overall_bot was the bottom of the last scan line. Now it's the top of the next-after-the-last scan line. This is the same until the y-dimension is > 2400, note ANALOGTV_MAX_LINEHEIGHT. */ overall_top=(int)(it->useheight*(1-it->puheight)/2); overall_bot=(int)(it->useheight*(1+it->puheight)/2); if (overall_top<0) overall_top=0; if (overall_bot>it->useheight) overall_bot=it->useheight; if (overall_top>0) { XClearArea(it->dpy, it->window, it->screen_xo, it->screen_yo, it->usewidth, overall_top, 0); } if (it->useheight > overall_bot) { XClearArea(it->dpy, it->window, it->screen_xo, it->screen_yo+overall_bot, it->usewidth, it->useheight-overall_bot, 0); } if (overall_bot > overall_top) { if (it->use_shm) { #ifdef HAVE_XSHM_EXTENSION XShmPutImage(it->dpy, it->window, it->gc, it->image, 0, overall_top, it->screen_xo, it->screen_yo+overall_top, it->usewidth, overall_bot - overall_top, False); #endif } else { XPutImage(it->dpy, it->window, it->gc, it->image, 0, overall_top, it->screen_xo, it->screen_yo+overall_top, it->usewidth, overall_bot - overall_top); } } #ifdef DEBUG if (0) { struct timeval tv; double fps; char buf[256]; gettimeofday(&tv,NULL); fps=1.0/((tv.tv_sec - it->last_display_time.tv_sec) + 0.000001*(tv.tv_usec - it->last_display_time.tv_usec)); sprintf(buf, "FPS=%0.1f",fps); XDrawString(it->dpy, it->window, it->gc, 50, it->useheight*2/3, buf, strlen(buf)); it->last_display_time=tv; } #endif } analogtv_input * analogtv_input_allocate() { analogtv_input *ret=(analogtv_input *)calloc(1,sizeof(analogtv_input)); return ret; } /* This takes a screen image and encodes it as a video camera would, including all the bandlimiting and YIQ modulation. This isn't especially tuned for speed. */ int analogtv_load_ximage(analogtv *it, analogtv_input *input, XImage *pic_im) { int i,x,y; int img_w,img_h; int fyx[7],fyy[7]; int fix[4],fiy[4]; int fqx[4],fqy[4]; XColor col1[ANALOGTV_PIC_LEN]; XColor col2[ANALOGTV_PIC_LEN]; int multiq[ANALOGTV_PIC_LEN+4]; int y_overscan=5; /* overscan this much top and bottom */ int y_scanlength=ANALOGTV_VISLINES+2*y_overscan; img_w=pic_im->width; img_h=pic_im->height; for (i=0; idpy, it->colormap, col1, ANALOGTV_PIC_LEN); XQueryColors(it->dpy, it->colormap, col2, ANALOGTV_PIC_LEN); for (i=0; i<7; i++) fyx[i]=fyy[i]=0; for (i=0; i<4; i++) fix[i]=fiy[i]=fqx[i]=fqy[i]=0.0; for (x=0; x>7; rawi=(10*col1[x].red - 4*col1[x].green - 5*col1[x].blue + 10*col2[x].red - 4*col2[x].green - 5*col2[x].blue)>>7; rawq=( 3*col1[x].red - 8*col1[x].green + 5*col1[x].blue + 3*col2[x].red - 8*col2[x].green + 5*col2[x].blue)>>7; /* Filter y at with a 4-pole low-pass Butterworth filter at 3.5 MHz with an extra zero at 3.5 MHz, from mkfilter -Bu -Lp -o 4 -a 2.1428571429e-01 0 -Z 2.5e-01 -l */ fyx[0] = fyx[1]; fyx[1] = fyx[2]; fyx[2] = fyx[3]; fyx[3] = fyx[4]; fyx[4] = fyx[5]; fyx[5] = fyx[6]; fyx[6] = (rawy * 1897) >> 16; fyy[0] = fyy[1]; fyy[1] = fyy[2]; fyy[2] = fyy[3]; fyy[3] = fyy[4]; fyy[4] = fyy[5]; fyy[5] = fyy[6]; fyy[6] = (fyx[0]+fyx[6]) + 4*(fyx[1]+fyx[5]) + 7*(fyx[2]+fyx[4]) + 8*fyx[3] + ((-151*fyy[2] + 8115*fyy[3] - 38312*fyy[4] + 36586*fyy[5]) >> 16); filty = fyy[6]; /* Filter I at 1.5 MHz. 3 pole Butterworth from mkfilter -Bu -Lp -o 3 -a 1.0714285714e-01 0 */ fix[0] = fix[1]; fix[1] = fix[2]; fix[2] = fix[3]; fix[3] = (rawi * 1413) >> 16; fiy[0] = fiy[1]; fiy[1] = fiy[2]; fiy[2] = fiy[3]; fiy[3] = (fix[0]+fix[3]) + 3*(fix[1]+fix[2]) + ((16559*fiy[0] - 72008*fiy[1] + 109682*fiy[2]) >> 16); filti = fiy[3]; /* Filter Q at 0.5 MHz. 3 pole Butterworth from mkfilter -Bu -Lp -o 3 -a 3.5714285714e-02 0 -l */ fqx[0] = fqx[1]; fqx[1] = fqx[2]; fqx[2] = fqx[3]; fqx[3] = (rawq * 75) >> 16; fqy[0] = fqy[1]; fqy[1] = fqy[2]; fqy[2] = fqy[3]; fqy[3] = (fqx[0]+fqx[3]) + 3 * (fqx[1]+fqx[2]) + ((2612*fqy[0] - 9007*fqy[1] + 10453 * fqy[2]) >> 12); filtq = fqy[3]; composite = filty + ((multiq[x] * filti + multiq[x+3] * filtq)>>12); composite = ((composite*100)>>14) + ANALOGTV_BLACK_LEVEL; if (composite>125) composite=125; if (composite<0) composite=0; input->signal[y-y_overscan+ANALOGTV_TOP][x+ANALOGTV_PIC_START] = composite; } } return 1; } #if 0 void analogtv_channel_noise(analogtv_input *it, analogtv_input *s2) { int x,y,newsig; int change=random()%ANALOGTV_V; unsigned int fastrnd=random(); double hso=(int)(random()%1000)-500; int yofs=random()%ANALOGTV_V; int noise; for (y=change; yline_hsync[y] = s2->line_hsync[y] + (int)hso; hso *= 0.9; for (x=0; x>16; newsig=s2->signal[s2y][x] + noise; if (newsig>120) newsig=120; if (newsig<0) newsig=0; it->signal[y][x]=newsig; } } s2->vsync=yofs; } #endif #ifdef FIXME /* add hash */ if (it->hashnoise_times[lineno]) { int hnt=it->hashnoise_times[lineno] - input->line_hsync[lineno]; if (hnt>=0 && hnt ANALOGTV_PIC_LEN-hnt) len=ANALOGTV_PIC_LEN-hnt; for (i=0; imultipath > 0.0) { for (i=0; ighostfir2[i] += -(rec->ghostfir2[i]/16.0) + rec->multipath * (frand(0.02)-0.01); } if (random()%20==0) { rec->ghostfir2[random()%(ANALOGTV_GHOSTFIR_LEN)] = rec->multipath * (frand(0.08)-0.04); } for (i=0; ighostfir[i] = 0.8*rec->ghostfir[i] + 0.2*rec->ghostfir2[i]; } if (0) { rec->hfloss2 += -(rec->hfloss2/16.0) + rec->multipath * (frand(0.08)-0.04); rec->hfloss = 0.5*rec->hfloss + 0.5*rec->hfloss2; } } else { for (i=0; ighostfir[i] = (i>=ANALOGTV_GHOSTFIR_LEN/2) ? ((i&1) ? +0.04 : -0.08) /ANALOGTV_GHOSTFIR_LEN : 0.0; } } } /* jwz: since MacOS doesn't have "6x10", I dumped this font to an XBM... */ #include "images/6x10font.xbm" void analogtv_make_font(Display *dpy, Window window, analogtv_font *f, int w, int h, char *fontname) { int i; XFontStruct *font; Pixmap text_pm; GC gc; XGCValues gcv; XWindowAttributes xgwa; f->char_w = w; f->char_h = h; XGetWindowAttributes (dpy, window, &xgwa); if (fontname && !strcmp (fontname, "6x10")) { text_pm = XCreatePixmapFromBitmapData (dpy, window, (char *) font6x10_bits, font6x10_width, font6x10_height, 1, 0, 1); f->text_im = XGetImage(dpy, text_pm, 0, 0, font6x10_width, font6x10_height, 1, XYPixmap); XFreePixmap(dpy, text_pm); } else if (fontname) { font = XLoadQueryFont (dpy, fontname); if (!font) { fprintf(stderr, "analogtv: can't load font %s\n", fontname); abort(); } text_pm=XCreatePixmap(dpy, window, 256*f->char_w, f->char_h, 1); memset(&gcv, 0, sizeof(gcv)); gcv.foreground=1; gcv.background=0; gcv.font=font->fid; gc=XCreateGC(dpy, text_pm, GCFont|GCBackground|GCForeground, &gcv); XSetForeground(dpy, gc, 0); XFillRectangle(dpy, text_pm, gc, 0, 0, 256*f->char_w, f->char_h); XSetForeground(dpy, gc, 1); for (i=0; i<256; i++) { char c=i; int x=f->char_w*i+1; int y=f->char_h*8/10; XDrawString(dpy, text_pm, gc, x, y, &c, 1); } f->text_im = XGetImage(dpy, text_pm, 0, 0, 256*f->char_w, f->char_h, 1, XYPixmap); # if 0 XWriteBitmapFile(dpy, "/tmp/tvfont.xbm", text_pm, 256*f->char_w, f->char_h, -1, -1); # endif XFreeGC(dpy, gc); XFreePixmap(dpy, text_pm); } else { f->text_im = XCreateImage(dpy, xgwa.visual, 1, XYPixmap, 0, 0, 256*f->char_w, f->char_h, 8, 0); f->text_im->data = (char *)calloc(f->text_im->height, f->text_im->bytes_per_line); } f->x_mult=4; f->y_mult=2; } int analogtv_font_pixel(analogtv_font *f, int c, int x, int y) { if (x<0 || x>=f->char_w) return 0; if (y<0 || y>=f->char_h) return 0; if (c<0 || c>=256) return 0; return XGetPixel(f->text_im, c*f->char_w + x, y) ? 1 : 0; } void analogtv_font_set_pixel(analogtv_font *f, int c, int x, int y, int value) { if (x<0 || x>=f->char_w) return; if (y<0 || y>=f->char_h) return; if (c<0 || c>=256) return; XPutPixel(f->text_im, c*f->char_w + x, y, value); } void analogtv_font_set_char(analogtv_font *f, int c, char *s) { int value,x,y; if (c<0 || c>=256) return; for (y=0; ychar_h; y++) { for (x=0; xchar_w; x++) { if (!*s) return; value=(*s==' ') ? 0 : 1; analogtv_font_set_pixel(f, c, x, y, value); s++; } } } void analogtv_lcp_to_ntsc(double luma, double chroma, double phase, int ntsc[4]) { int i; for (i=0; i<4; i++) { double w=90.0*i + phase; double val=luma + chroma * (cos(3.1415926/180.0*w)); if (val<0.0) val=0.0; if (val>127.0) val=127.0; ntsc[i]=(int)val; } } void analogtv_draw_solid(analogtv_input *input, int left, int right, int top, int bot, int ntsc[4]) { int x,y; if (right-left<4) right=left+4; if (bot-top<1) bot=top+1; for (y=top; ysignal[y][x] = ntsc[x&3]; } } } void analogtv_draw_solid_rel_lcp(analogtv_input *input, double left, double right, double top, double bot, double luma, double chroma, double phase) { int ntsc[4]; int topi=(int)(ANALOGTV_TOP + ANALOGTV_VISLINES*top); int boti=(int)(ANALOGTV_TOP + ANALOGTV_VISLINES*bot); int lefti=(int)(ANALOGTV_VIS_START + ANALOGTV_VIS_LEN*left); int righti=(int)(ANALOGTV_VIS_START + ANALOGTV_VIS_LEN*right); analogtv_lcp_to_ntsc(luma, chroma, phase, ntsc); analogtv_draw_solid(input, lefti, righti, topi, boti, ntsc); } void analogtv_draw_char(analogtv_input *input, analogtv_font *f, int c, int x, int y, int ntsc[4]) { int yc,xc,ys,xs,pix; for (yc=0; ycchar_h; yc++) { for (ys=y + yc*f->y_mult; ysy_mult; ys++) { if (ys<0 || ys>=ANALOGTV_V) continue; for (xc=0; xcchar_w; xc++) { pix=analogtv_font_pixel(f, c, xc, yc); for (xs=x + xc*f->x_mult; xsx_mult; xs++) { if (xs<0 || xs>=ANALOGTV_H) continue; if (pix) { input->signal[ys][xs] = ntsc[xs&3]; } } } } } } void analogtv_draw_string(analogtv_input *input, analogtv_font *f, char *s, int x, int y, int ntsc[4]) { while (*s) { analogtv_draw_char(input, f, *s, x, y, ntsc); x += f->char_w * 4; s++; } } void analogtv_draw_string_centered(analogtv_input *input, analogtv_font *f, char *s, int x, int y, int ntsc[4]) { int width=strlen(s) * f->char_w * 4; x -= width/2; analogtv_draw_string(input, f, s, x, y, ntsc); } static const char hextonib[128] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 0, 0, 0, 0, 0, 0, 10,11,12,13,14,15,0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10,11,12,13,14,15,0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; /* Much of this function was adapted from logo.c */ void analogtv_draw_xpm(analogtv *tv, analogtv_input *input, const char * const *xpm, int left, int top) { int xpmw,xpmh; int x,y,tvx,tvy,i; int rawy,rawi,rawq; int ncolors, nbytes; char dummyc; struct { int r; int g; int b; } cmap[256]; if (4 != sscanf ((const char *) *xpm, "%d %d %d %d %c", &xpmw, &xpmh, &ncolors, &nbytes, &dummyc)) abort(); if (ncolors < 1 || ncolors > 255) abort(); if (nbytes != 1) /* a serious limitation */ abort(); xpm++; for (i = 0; i < ncolors; i++) { const char *line = *xpm; int colori = ((unsigned char)*line++)&0xff; while (*line) { int r, g, b; char which; while (*line == ' ' || *line == '\t') line++; which = *line++; if (which != 'c' && which != 'm') abort(); while (*line == ' ' || *line == '\t') line++; if (!strncasecmp(line, "None", 4)) { r = g = b = -1; line += 4; } else { if (*line == '#') line++; r = (hextonib[(int) line[0]] << 4) | hextonib[(int) line[1]]; line += 2; g = (hextonib[(int) line[0]] << 4) | hextonib[(int) line[1]]; line += 2; b = (hextonib[(int) line[0]] << 4) | hextonib[(int) line[1]]; line += 2; } if (which == 'c') { cmap[colori].r = r; cmap[colori].g = g; cmap[colori].b = b; } } xpm++; } for (y=0; y=ANALOGTV_BOT) continue; for (x=0; xANALOGTV_PIC_END) continue; rawy=( 5*cmap[cbyte].r + 11*cmap[cbyte].g + 2*cmap[cbyte].b) / 64; rawi=(10*cmap[cbyte].r - 4*cmap[cbyte].g - 5*cmap[cbyte].b) / 64; rawq=( 3*cmap[cbyte].r - 8*cmap[cbyte].g + 5*cmap[cbyte].b) / 64; ntsc[0]=rawy+rawq; ntsc[1]=rawy-rawi; ntsc[2]=rawy-rawq; ntsc[3]=rawy+rawi; for (i=0; i<4; i++) { if (ntsc[i]>ANALOGTV_WHITE_LEVEL) ntsc[i]=ANALOGTV_WHITE_LEVEL; if (ntsc[i]signal[tvy][tvx+0]= ntsc[(tvx+0)&3]; input->signal[tvy][tvx+1]= ntsc[(tvx+1)&3]; input->signal[tvy][tvx+2]= ntsc[(tvx+2)&3]; input->signal[tvy][tvx+3]= ntsc[(tvx+3)&3]; } } } xscreensaver-5.36/hacks/xanalogtv.c000664 000767 000024 00000042307 12717747756 017435 0ustar00jwzstaff000000 000000 /* xanalogtv, Copyright (c) 2003 Trevor Blackwell * * 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. * * * Simulate test patterns on an analog TV. Concept similar to xteevee * in this distribution, but a totally different implementation based * on the simulation of an analog TV set in utils/analogtv.c. Much * more realistic, but needs more video card bandwidth. * * It flips around through simulated channels 2 through 13. Some show * pictures from your images directory, some show color bars, and some * just have static. Some channels receive two stations simultaneously * so you see a ghostly, misaligned image. * * It's easy to add some test patterns by compiling in an XPM, but I * can't find any that are clearly freely redistributable. * */ #ifdef HAVE_CONFIG_H # include "config.h" #endif /* HAVE_CONFIG_H */ #include #ifdef HAVE_UNISTD_H # include #endif #ifndef HAVE_JWXYZ # include /* for XtDatabase in hack_resources() */ #endif #include "screenhack.h" #include "xpm-pixmap.h" #include "analogtv.h" #include "images/logo-50.xpm" /* #define DEBUG 1 */ /* #define USE_TEST_PATTERNS */ #define countof(x) (sizeof((x))/sizeof((*x))) enum { N_CHANNELS=12, /* Channels 2 through 13 on VHF */ MAX_MULTICHAN=2, MAX_STATIONS=6 }; typedef struct chansetting_s { analogtv_reception recs[MAX_MULTICHAN]; double noise_level; Bool image_loaded_p; /* char *filename; was only used for diagnostics */ int dur; } chansetting; struct state { Display *dpy; Window window; analogtv *tv; analogtv_font ugly_font; struct timeval basetime; int n_stations; analogtv_input *stations[MAX_STATIONS]; Bool image_loading_p; int curinputi; int change_ticks; chansetting chansettings[N_CHANNELS]; chansetting *cs; int change_now; }; static void update_smpte_colorbars(analogtv_input *input) { struct state *st = (struct state *) input->client_data; int col; int xpos, ypos; int black_ntsc[4]; /* SMPTE is the society of motion picture and television engineers, and these are the standard color bars in the US. Following the partial spec at http://broadcastengineering.com/ar/broadcasting_inside_color_bars/ These are luma, chroma, and phase numbers for each of the 7 bars. */ double top_cb_table[7][3]={ {75, 0, 0.0}, /* gray */ {69, 31, 167.0}, /* yellow */ {56, 44, 283.5}, /* cyan */ {48, 41, 240.5}, /* green */ {36, 41, 60.5}, /* magenta */ {28, 44, 103.5}, /* red */ {15, 31, 347.0} /* blue */ }; double mid_cb_table[7][3]={ {15, 31, 347.0}, /* blue */ {7, 0, 0}, /* black */ {36, 41, 60.5}, /* magenta */ {7, 0, 0}, /* black */ {56, 44, 283.5}, /* cyan */ {7, 0, 0}, /* black */ {75, 0, 0.0} /* gray */ }; analogtv_lcp_to_ntsc(0.0, 0.0, 0.0, black_ntsc); analogtv_setup_sync(input, 1, 0); analogtv_setup_teletext(input); for (col=0; col<7; col++) { analogtv_draw_solid_rel_lcp(input, col*(1.0/7.0), (col+1)*(1.0/7.0), 0.00, 0.68, top_cb_table[col][0], top_cb_table[col][1], top_cb_table[col][2]); analogtv_draw_solid_rel_lcp(input, col*(1.0/7.0), (col+1)*(1.0/7.0), 0.68, 0.75, mid_cb_table[col][0], mid_cb_table[col][1], mid_cb_table[col][2]); } analogtv_draw_solid_rel_lcp(input, 0.0, 1.0/6.0, 0.75, 1.00, 7, 40, 303); /* -I */ analogtv_draw_solid_rel_lcp(input, 1.0/6.0, 2.0/6.0, 0.75, 1.00, 100, 0, 0); /* white */ analogtv_draw_solid_rel_lcp(input, 2.0/6.0, 3.0/6.0, 0.75, 1.00, 7, 40, 33); /* +Q */ analogtv_draw_solid_rel_lcp(input, 3.0/6.0, 4.0/6.0, 0.75, 1.00, 7, 0, 0); /* black */ analogtv_draw_solid_rel_lcp(input, 12.0/18.0, 13.0/18.0, 0.75, 1.00, 3, 0, 0); /* black -4 */ analogtv_draw_solid_rel_lcp(input, 13.0/18.0, 14.0/18.0, 0.75, 1.00, 7, 0, 0); /* black */ analogtv_draw_solid_rel_lcp(input, 14.0/18.0, 15.0/18.0, 0.75, 1.00, 11, 0, 0); /* black +4 */ analogtv_draw_solid_rel_lcp(input, 5.0/6.0, 6.0/6.0, 0.75, 1.00, 7, 0, 0); /* black */ ypos=ANALOGTV_V/5; xpos=ANALOGTV_VIS_START + ANALOGTV_VIS_LEN/2; { char localname[256]; if (gethostname (localname, sizeof (localname))==0) { localname[sizeof(localname)-1]=0; /* "The returned name is null- terminated unless insufficient space is provided" */ localname[24]=0; /* limit length */ analogtv_draw_string_centered(input, &st->ugly_font, localname, xpos, ypos, black_ntsc); } } ypos += st->ugly_font.char_h*5/2; analogtv_draw_xpm(st->tv, input, logo_50_xpm, xpos - 100, ypos); ypos += 58; #if 0 analogtv_draw_string_centered(input, &st->ugly_font, "Please Stand By", xpos, ypos); ypos += st->ugly_font.char_h*4; #endif { char timestamp[256]; time_t t = time ((time_t *) 0); struct tm *tm = localtime (&t); /* Y2K: It is OK for this to use a 2-digit year because it's simulating a TV display and is purely decorative. */ strftime(timestamp, sizeof(timestamp)-1, "%y.%m.%d %H:%M:%S ", tm); analogtv_draw_string_centered(input, &st->ugly_font, timestamp, xpos, ypos, black_ntsc); } input->next_update_time += 1.0; } #if 0 static void draw_color_square(analogtv_input *input) { double xs,ys; analogtv_draw_solid_rel_lcp(input, 0.0, 1.0, 0.0, 1.0, 30.0, 0.0, 0.0); for (xs=0.0; xs<0.9999; xs+=1.0/15.0) { analogtv_draw_solid_rel_lcp(input, xs, xs, 0.0, 1.0, 100.0, 0.0, 0.0); } for (ys=0.0; ys<0.9999; ys+=1.0/11.0) { analogtv_draw_solid_rel_lcp(input, 0.0, 1.0, ys, ys, 100.0, 0.0, 0.0); } for (ys=0.0; ys<0.9999; ys+=0.01) { analogtv_draw_solid_rel_lcp(input, 0.0/15, 1.0/15, ys, ys+0.01, 40.0, 45.0, 103.5*(1.0-ys) + 347.0*ys); analogtv_draw_solid_rel_lcp(input, 14.0/15, 15.0/15, ys, ys+0.01, 40.0, 45.0, 103.5*(ys) + 347.0*(1.0-ys)); } for (ys=0.0; ys<0.9999; ys+=0.02) { analogtv_draw_solid_rel_lcp(input, 1.0/15, 2.0/15, ys*2.0/11.0+1.0/11.0, (ys+0.01)*2.0/11.0+1.0/11.0, 100.0*(1.0-ys), 0.0, 0.0); } } #endif static const char *xanalogtv_defaults [] = { ".background: black", ".foreground: white", "*delay: 5", "*grabDesktopImages: False", /* HAVE_JWXYZ */ "*chooseRandomImages: True", /* HAVE_JWXYZ */ ANALOGTV_DEFAULTS 0, }; static XrmOptionDescRec xanalogtv_options [] = { { "-delay", ".delay", XrmoptionSepArg, 0 }, ANALOGTV_OPTIONS { 0, 0, 0, 0 } }; #ifdef USE_TEST_PATTERNS #include "images/earth.xpm" char **test_patterns[] = { earth_xpm, }; #endif static int getticks(struct state *st) { struct timeval tv; gettimeofday(&tv,NULL); return ((tv.tv_sec - st->basetime.tv_sec)*1000 + (tv.tv_usec - st->basetime.tv_usec)/1000); } /* The first time we grab an image, do it the default way. The second and subsequent times, add "-no-desktop" to the command. That way we don't have to watch the window un-map 5+ times in a row. Also, we end up with the desktop on only one channel, and pictures on all the others (or colorbars, if no imageDirectory is set.) */ static void hack_resources (Display *dpy) { #ifndef HAVE_JWXYZ static int count = -1; count++; if (count == 0) return; else if (count == 1) { XrmDatabase db = XtDatabase (dpy); char *res = "desktopGrabber"; char *val = get_string_resource (dpy, res, "DesktopGrabber"); char buf1[255]; char buf2[255]; XrmValue value; sprintf (buf1, "%.100s.%.100s", progname, res); sprintf (buf2, "%.200s -no-desktop", val); value.addr = buf2; value.size = strlen(buf2); XrmPutResource (&db, buf1, "String", &value); } #endif /* HAVE_JWXYZ */ } static void analogtv_load_random_image(struct state *); static void image_loaded_cb (Screen *screen, Window window, Drawable pixmap, const char *name, XRectangle *geometry, void *closure) { /* When an image has just been loaded, store it into the first available channel. If there are other unloaded channels, then start loading another image. */ struct state *st = (struct state *) closure; int i; int this = -1; int next = -1; if (!st->image_loading_p) abort(); /* only one at a time... */ st->image_loading_p = False; for (i = 0; i < MAX_STATIONS; i++) { if (! st->chansettings[i].image_loaded_p) { if (this == -1) this = i; else if (next == -1) next = i; } } if (this == -1) abort(); /* no unloaded stations? */ /* Load this image into the next channel. */ { analogtv_input *input = st->stations[this]; int width=ANALOGTV_PIC_LEN; int height=width*3/4; XImage *image = XGetImage (st->dpy, pixmap, 0, 0, width, height, ~0L, ZPixmap); XFreePixmap(st->dpy, pixmap); analogtv_setup_sync(input, 1, (random()%20)==0); analogtv_load_ximage(st->tv, input, image); if (image) XDestroyImage(image); st->chansettings[this].image_loaded_p = True; #if 0 if (name) { const char *s = strrchr (name, '/'); if (s) s++; else s = name; st->chansettings[this].filename = strdup (s); } fprintf(stderr, "%s: loaded channel %d, %s\n", progname, this, st->chansettings[this].filename); #endif } /* If there are still unloaded stations, fire off another loader. */ if (next != -1) analogtv_load_random_image (st); } /* Queues a single image for loading. Only load one at a time. The image is done loading when st->img_loader is null and it->loaded_image is a pixmap. */ static void analogtv_load_random_image(struct state *st) { int width=ANALOGTV_PIC_LEN; int height=width*3/4; Pixmap p; if (st->image_loading_p) /* a load is already in progress */ return; st->image_loading_p = True; p = XCreatePixmap(st->dpy, st->window, width, height, st->tv->visdepth); hack_resources(st->dpy); load_image_async (st->tv->xgwa.screen, st->window, p, image_loaded_cb, st); } #if 0 static int analogtv_load_xpm(analogtv *it, analogtv_input *input, char **xpm) { Pixmap pixmap; XImage *image; int width,height; int rc; pixmap=xpm_data_to_pixmap (it->dpy, it->window, xpm, &width, &height, NULL); image = XGetImage(it->dpy, pixmap, 0, 0, width, height, ~0L, ZPixmap); XFreePixmap(it->dpy, pixmap); rc=analogtv_load_ximage(it, input, image); if (image) XDestroyImage(image); return rc; } #endif static void add_stations(struct state *st) { while (st->n_stations < MAX_STATIONS) { analogtv_input *input=analogtv_input_allocate(); st->stations[st->n_stations++]=input; input->client_data = st; } } static void load_station_images(struct state *st) { int i; for (i = 0; i < MAX_STATIONS; i++) { analogtv_input *input = st->stations[i]; st->chansettings[i].image_loaded_p = True; if (i == 0) { /* station 0 is always colorbars */ input->updater = update_smpte_colorbars; input->do_teletext=1; } #ifdef USE_TEST_PATTERNS else if (random()%5==0) { j=random()%countof(test_patterns); analogtv_setup_sync(input); analogtv_load_xpm(tv, input, test_patterns[j]); analogtv_setup_teletext(input); } #endif else { analogtv_load_random_image(st); input->do_teletext=1; st->chansettings[i].image_loaded_p = False; } } } static void * xanalogtv_init (Display *dpy, Window window) { struct state *st = (struct state *) calloc (1, sizeof(*st)); int i; int last_station=42; int delay = get_integer_resource(dpy, "delay", "Integer"); if (delay < 1) delay = 1; analogtv_make_font(dpy, window, &st->ugly_font, 7, 10, "6x10"); st->dpy = dpy; st->window = window; st->tv=analogtv_allocate(dpy, window); add_stations(st); analogtv_set_defaults(st->tv, ""); st->tv->need_clear=1; if (random()%4==0) { st->tv->tint_control += pow(frand(2.0)-1.0, 7) * 180.0; } if (1) { st->tv->color_control += frand(0.3); } for (i=0; ichansettings[i], 0, sizeof(chansetting)); st->chansettings[i].noise_level = 0.06; st->chansettings[i].dur = 1000*delay; if (random()%6==0) { st->chansettings[i].dur=600; } else { int stati; for (stati=0; statichansettings[i].recs[stati]; int station; while (1) { station=random()%st->n_stations; if (station!=last_station) break; if ((random()%10)==0) break; } last_station=station; rec->input = st->stations[station]; rec->level = pow(frand(1.0), 3.0) * 2.0 + 0.05; rec->ofs=random()%ANALOGTV_SIGNAL_LEN; if (random()%3) { rec->multipath = frand(1.0); } else { rec->multipath=0.0; } if (stati) { /* We only set a frequency error for ghosting stations, because it doesn't matter otherwise */ rec->freqerr = (frand(2.0)-1.0) * 3.0; } if (rec->level > 0.3) break; if (random()%4) break; } } } gettimeofday(&st->basetime,NULL); st->curinputi=0; st->cs = &st->chansettings[st->curinputi]; st->change_ticks = st->cs->dur + 1500; st->tv->powerup=0.0; load_station_images(st); return st; } static unsigned long xanalogtv_draw (Display *dpy, Window window, void *closure) { struct state *st = (struct state *) closure; int i; int curticks=getticks(st); double curtime=curticks*0.001; const analogtv_reception *recs[MAX_MULTICHAN]; unsigned rec_count = 0; int auto_change = curticks >= st->change_ticks && st->tv->powerup > 10.0 ? 1 : 0; if (st->change_now || auto_change) { st->curinputi=(st->curinputi+st->change_now+auto_change+N_CHANNELS)%N_CHANNELS; st->change_now = 0; st->cs = &st->chansettings[st->curinputi]; #if 0 fprintf (stderr, "%s: channel %d, %s\n", progname, st->curinputi, st->cs->filename); #endif st->change_ticks = curticks + st->cs->dur; /* Set channel change noise flag */ st->tv->channel_change_cycles=200000; } for (i=0; ics->recs[i]; analogtv_input *inp=rec->input; if (!inp) continue; if (inp->updater) { inp->next_update_time = curtime; (inp->updater)(inp); } rec->ofs += rec->freqerr; } st->tv->powerup=curtime; for (i=0; ics->recs[i]; if (rec->input) { analogtv_reception_update(rec); recs[rec_count] = rec; ++rec_count; } } analogtv_draw(st->tv, st->cs->noise_level, recs, rec_count); #ifdef HAVE_MOBILE return 0; #else return 5000; #endif } static void xanalogtv_reshape (Display *dpy, Window window, void *closure, unsigned int w, unsigned int h) { struct state *st = (struct state *) closure; analogtv_reconfigure(st->tv); } static Bool xanalogtv_event (Display *dpy, Window window, void *closure, XEvent *event) { struct state *st = (struct state *) closure; if (event->type == ButtonPress) { unsigned button = event->xbutton.button; st->change_now = button == 2 || button == 3 || button == 5 ? -1 : 1; return True; } else if (event->type == KeyPress) { KeySym keysym; char c = 0; XLookupString (&event->xkey, &c, 1, &keysym, 0); if (c == ' ' || c == '\t' || c == '\r' || c == '\n' || keysym == XK_Up || keysym == XK_Right || keysym == XK_Prior) { st->change_now = 1; return True; } else if (c == '\b' || keysym == XK_Down || keysym == XK_Left || keysym == XK_Next) { st->change_now = -1; return True; } else if (screenhack_event_helper (dpy, window, event)) goto DEF; } else if (screenhack_event_helper (dpy, window, event)) { DEF: st->change_now = ((random() & 1) ? 1 : -1); return True; } return False; } static void xanalogtv_free (Display *dpy, Window window, void *closure) { struct state *st = (struct state *) closure; analogtv_release(st->tv); free (st); } XSCREENSAVER_MODULE ("XAnalogTV", xanalogtv) xscreensaver-5.36/hacks/pong.c000664 000767 000024 00000065041 12717744045 016361 0ustar00jwzstaff000000 000000 /* pong, Copyright (c) 2003 Jeremy English * A pong screen saver * * Modified by Brian Sawicki to fix a small bug. * Before this fix after a certain point the paddles would be too * small for the program to effectively hit the ball. The score would * then skyrocket as the paddles missed most every time. Added a max * so that once a paddle gets 10 the entire game restarts. Special * thanks to Scott Zager for some help on this. * * Modified by Trevor Blackwell to use analogtv.[ch] display. * Also added gradual acceleration of the ball, shrinking of paddles, and * scorekeeping. * * Modified by Gereon Steffens to add -clock and -noise * options. See http://www.burovormkrijgers.nl (ugly flash site, * navigate to Portfolio/Browse/Misc/Pong Clock) for the hardware implementation * that gave me the idea. In clock mode, the score reflects the current time, and * the paddles simply stop moving when it's time for the other side to score. This * means that the display is only updated a few seconds *after* the minute actually * changes, but I think this fuzzyness fits well with the display, and since we're * not displaying seconds, who cares. While I was at it, I added a -noise option * to control the noisyness of the display. * * Modified by Dave Odell to add -p1 and -p2 options. * JWXYZ doesn't support XWarpPointer, so PLAYER_MOUSE only works on native * X11. JWXYZ also doesn't support cursors, so PLAYER_TABLET doesn't hide the * mouse pointer. * * 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. */ /* * TLB sez: I haven't actually seen a pong game since I was about 9. Can * someone who has one make this look more realistic? Issues: * * - the font for scores is wrong. For example '0' was square. * - was there some kind of screen display when someone won? * - did the ball move smoothly, or was the X or Y position quantized? * * It could also use better player logic: moving the paddle even when the ball * is going away, and making mistakes instead of just not keeping up with the * speeding ball. * * There is some info at http://www.mameworld.net/discrete/Atari/Atari.htm#Pong * * It says that the original Pong game did not have a microprocessor, or even a * custom integrated circuit. It was all discrete logic. * */ #include "screenhack.h" #include "analogtv.h" #include #ifndef HAVE_JWXYZ # include #endif /* #define OUTPUT_POS */ typedef enum { PLAYER_AI, PLAYER_MOUSE, PLAYER_TABLET, PLAYER_KEYBOARD, PLAYER_KEYBOARD_LEFT } PlayerType; typedef struct _paddle { PlayerType player; int x; int y; int w; int h; int wait; int lock; int score; } Paddle; typedef struct _ball { int x; int y; int w; int h; } Ball; struct state { Display *dpy; Window window; int clock; Paddle l_paddle; Paddle r_paddle; Ball ball; int bx,by; int m_unit; int paddle_rate; double noise; analogtv *tv; analogtv_input *inp; analogtv_reception reception; int paddle_ntsc[4]; int field_ntsc[4]; int ball_ntsc[4]; int score_ntsc[4]; int net_ntsc[4]; analogtv_font score_font; # ifndef HAVE_JWXYZ Cursor null_cursor; # endif int mouse_y; unsigned w, h, screen_h, screen_h_mm; Bool is_focused; Bool key_w: 1; Bool key_s: 1; Bool key_up: 1; Bool key_down: 1; unsigned int dragging : 2; }; enum { PONG_W = ANALOGTV_VIS_LEN, PONG_H = ANALOGTV_VISLINES, PONG_TMARG = 10 }; static void p_hit_top_bottom(Paddle *p); static void hit_top_bottom(struct state *st) { if ( (st->ball.y <= PONG_TMARG) || (st->ball.y+st->ball.h >= PONG_H) ) st->by=-st->by; } static void reset_score(struct state * st) { if (st->clock) { /* init score to current time */ time_t now = time(0); struct tm* now_tm = localtime(&now); st->r_paddle.score = now_tm->tm_hour; st->l_paddle.score = now_tm->tm_min; } else { st->r_paddle.score = 0; st->l_paddle.score = 0; } } static void new_game(struct state *st) { /* Starts a Whole New Game*/ st->ball.x = PONG_W/2; st->ball.y = PONG_H/2; st->bx = st->m_unit; st->by = st->m_unit; /* jwz: perhaps not totally accurate, but randomize things a little bit so that games on multiple screens are not identical. */ if (random() & 1) st->by = -st->by; st->ball.y += (random() % (PONG_H/6))-(PONG_H/3); st->l_paddle.wait = 1; st->l_paddle.lock = 0; st->r_paddle.wait = 0; st->r_paddle.lock = 0; st->paddle_rate = st->m_unit-1; reset_score(st); st->l_paddle.h = PONG_H/4; st->r_paddle.h = PONG_H/4; /* Adjust paddle position again, because paddle length is enlarged (reset) above. */ p_hit_top_bottom(&st->l_paddle); p_hit_top_bottom(&st->r_paddle); } static void start_game(struct state *st) { /*Init the ball*/ st->ball.x = PONG_W/2; st->ball.y = PONG_H/2; st->bx = st->m_unit; st->by = st->m_unit; /* jwz: perhaps not totally accurate, but randomize things a little bit so that games on multiple screens are not identical. */ if (random() & 1) st->by = -st->by; st->ball.y += (random() % (PONG_H/6))-(PONG_H/3); st->l_paddle.wait = 1; st->l_paddle.lock = 0; st->r_paddle.wait = 0; st->r_paddle.lock = 0; st->paddle_rate = st->m_unit-1; if (st->l_paddle.h > 10) st->l_paddle.h= st->l_paddle.h*19/20; if (st->r_paddle.h > 10) st->r_paddle.h= st->r_paddle.h*19/20; } static void hit_paddle(struct state *st) { if ( st->ball.x + st->ball.w >= st->r_paddle.x && st->bx > 0 ) /*we are traveling to the right*/ { if ((st->ball.y + st->ball.h > st->r_paddle.y) && (st->ball.y < st->r_paddle.y + st->r_paddle.h)) { st->bx=-st->bx; st->l_paddle.wait = 0; st->r_paddle.wait = 1; st->r_paddle.lock = 0; st->l_paddle.lock = 0; } else { if (st->clock) { reset_score(st); } else { st->r_paddle.score++; if (st->r_paddle.score >=10) new_game(st); else start_game(st); } } } if (st->ball.x <= st->l_paddle.x + st->l_paddle.w && st->bx < 0 ) /*we are traveling to the left*/ { if ( st->ball.y + st->ball.h > st->l_paddle.y && st->ball.y < st->l_paddle.y + st->l_paddle.h) { st->bx=-st->bx; st->l_paddle.wait = 1; st->r_paddle.wait = 0; st->r_paddle.lock = 0; st->l_paddle.lock = 0; } else { if (st->clock) { reset_score(st); } else { st->l_paddle.score++; if (st->l_paddle.score >= 10) new_game(st); else start_game(st); } } } } static PlayerType get_player_type(Display *dpy, char *rsrc) { PlayerType result; char *s = get_string_resource(dpy, rsrc, "String"); if (!strcmp(s, "ai") || !strcmp(s, "AI")) { result = PLAYER_AI; } # ifndef HAVE_JWXYZ else if (!strcmp(s, "mouse")) { result = PLAYER_MOUSE; } # endif else if (!strcmp(s, "tab") || !strcmp(s, "tablet")) { result = PLAYER_TABLET; } else if (!strcmp(s, "kb") || !strcmp(s, "keyb") || !strcmp(s, "keyboard") || !strcmp(s, "right") || !strcmp(s, "kbright") || !strcmp(s, "arrows")) { result = PLAYER_KEYBOARD; } else if (!strcmp(s, "left") || !strcmp(s, "kbleft") || !strcmp(s, "ws") || !strcmp(s, "wasd")) { result = PLAYER_KEYBOARD_LEFT; } else { fprintf(stderr, "%s: invalid player type\n", progname); result = PLAYER_AI; } free(s); return result; } static void do_shape (struct state *st, const XWindowAttributes *xgwa) { st->w = xgwa->width; st->h = xgwa->height; st->screen_h = XHeightOfScreen(xgwa->screen); st->screen_h_mm = XHeightMMOfScreen(xgwa->screen); } #ifndef HAVE_JWXYZ static Bool needs_grab (struct state *st) { return st->l_paddle.player == PLAYER_MOUSE || st->r_paddle.player == PLAYER_MOUSE; /* st->l_paddle.player == PLAYER_TABLET || st->r_paddle.player == PLAYER_TABLET; */ } static void grab_pointer (struct state *st) { st->is_focused = True; XGrabPointer(st->dpy, st->window, True, PointerMotionMask, GrabModeAsync, GrabModeAsync, st->window, st->null_cursor, CurrentTime); } #endif /* !HAVE_JWXYZ */ static void * pong_init (Display *dpy, Window window) { struct state *st = (struct state *) calloc (1, sizeof(*st)); int i; XWindowAttributes xgwa; struct { int w, h; char *s[10]; } fonts[2] = { { /* regular pong font */ /* If you think we haven't learned anything since the early 70s, look at this font for a while */ 4, 6, { "****" "* *" "* *" "* *" "* *" "****", " *" " *" " *" " *" " *" " *", "****" " *" "****" "* " "* " "****", "****" " *" "****" " *" " *" "****", "* *" "* *" "****" " *" " *" " *", "****" "* " "****" " *" " *" "****", "****" "* " "****" "* *" "* *" "****", "****" " *" " *" " *" " *" " *", "****" "* *" "****" "* *" "* *" "****", "****" "* *" "****" " *" " *" " *" } }, { /* pong clock font - hand-crafted double size looks better */ 8, 12, { "####### " "####### " "## ## " "## ## " "## ## " "## ## " "## ## " "## ## " "## ## " "####### " "####### ", " ## " " ## " " ## " " ## " " ## " " ## " " ## " " ## " " ## " " ## " " ## ", "####### " "####### " " ## " " ## " "####### " "####### " "## " "## " "## " "####### " "####### ", "####### " "####### " " ## " " ## " "####### " "####### " " ## " " ## " " ## " "####### " "####### ", "## ## " "## ## " "## ## " "## ## " "####### " "####### " " ## " " ## " " ## " " ## " " ## ", "####### " "####### " "## " "## " "####### " "####### " " ## " " ## " " ## " "####### " "####### ", "####### " "####### " "## " "## " "####### " "####### " "## ## " "## ## " "## ## " "####### " "####### ", "####### " "####### " " ## " " ## " " ## " " ## " " ## " " ## " " ## " " ## " " ## ", "####### " "####### " "## ## " "## ## " "####### " "####### " "## ## " "## ## " "## ## " "####### " "####### ", "####### " "####### " "## ## " "## ## " "####### " "####### " " ## " " ## " " ## " "####### " "####### " } } }; st->dpy = dpy; st->window = window; st->tv=analogtv_allocate(st->dpy, st->window); analogtv_set_defaults(st->tv, ""); st->clock = get_boolean_resource(st->dpy, "clock", "Boolean"); analogtv_make_font(st->dpy, st->window, &st->score_font, fonts[st->clock].w, fonts[st->clock].h, NULL); for (i=0; i<10; ++i) { analogtv_font_set_char(&st->score_font, '0'+i, fonts[st->clock].s[i]); } #ifdef OUTPUT_POS printf("screen(%d,%d,%d,%d)\n",0,0,PONG_W,PONG_H); #endif st->inp=analogtv_input_allocate(); analogtv_setup_sync(st->inp, 0, 0); st->reception.input = st->inp; st->reception.level = 2.0; st->reception.ofs=0; #if 0 if (random()) { st->reception.multipath = frand(1.0); } else { #endif st->reception.multipath=0.0; #if 0 } #endif /*Init the paddles*/ st->l_paddle.player = get_player_type(dpy, "p1"); st->l_paddle.x = 8; st->l_paddle.y = 100; st->l_paddle.w = 16; st->l_paddle.h = PONG_H/4; st->l_paddle.wait = 1; st->l_paddle.lock = 0; st->r_paddle = st->l_paddle; st->r_paddle.player = get_player_type(dpy, "p2"); st->r_paddle.x = PONG_W - 8 - st->r_paddle.w; st->r_paddle.wait = 0; /*Init the ball*/ st->ball.x = PONG_W/2; st->ball.y = PONG_H/2; st->ball.w = 16; st->ball.h = 8; /* The mouse warping business breaks tablet input. */ if (st->l_paddle.player == PLAYER_MOUSE && st->r_paddle.player == PLAYER_TABLET) { st->l_paddle.player = PLAYER_TABLET; } if (st->r_paddle.player == PLAYER_MOUSE && st->l_paddle.player == PLAYER_TABLET) { st->r_paddle.player = PLAYER_TABLET; } if (st->clock) { st->l_paddle.player = PLAYER_AI; st->r_paddle.player = PLAYER_AI; fprintf(stderr, "%s: clock mode requires AI control\n", progname); } # ifndef HAVE_JWXYZ if (st->l_paddle.player == PLAYER_MOUSE || st->r_paddle.player == PLAYER_MOUSE || st->l_paddle.player == PLAYER_TABLET || st->r_paddle.player == PLAYER_TABLET) { XColor black = {0, 0, 0, 0}; Pixmap cursor_pix = XCreatePixmap(dpy, window, 4, 4, 1); XGCValues gcv; GC mono_gc; gcv.foreground = 0; mono_gc = XCreateGC(dpy, cursor_pix, GCForeground, &gcv); st->null_cursor = XCreatePixmapCursor(dpy, cursor_pix, cursor_pix, &black, &black, 0, 0); XFillRectangle(dpy, cursor_pix, mono_gc, 0, 0, 4, 4); XFreeGC(dpy, mono_gc); XSelectInput(dpy, window, PointerMotionMask | FocusChangeMask | KeyPressMask | KeyReleaseMask | ButtonPressMask | ButtonReleaseMask); if (needs_grab(st)) { grab_pointer(st); } else { XDefineCursor(dpy, window, st->null_cursor); } } # endif st->m_unit = get_integer_resource (st->dpy, "speed", "Integer"); st->noise = get_float_resource(st->dpy, "noise", "Float"); st->clock = get_boolean_resource(st->dpy, "clock", "Boolean"); if (!st->clock) { st->score_font.y_mult *= 2; st->score_font.x_mult *= 2; } reset_score(st); start_game(st); analogtv_lcp_to_ntsc(ANALOGTV_BLACK_LEVEL, 0.0, 0.0, st->field_ntsc); analogtv_lcp_to_ntsc(100.0, 0.0, 0.0, st->ball_ntsc); analogtv_lcp_to_ntsc(100.0, 0.0, 0.0, st->paddle_ntsc); analogtv_lcp_to_ntsc(100.0, 0.0, 0.0, st->score_ntsc); analogtv_lcp_to_ntsc(100.0, 0.0, 0.0, st->net_ntsc); analogtv_draw_solid(st->inp, ANALOGTV_VIS_START, ANALOGTV_VIS_END, ANALOGTV_TOP, ANALOGTV_BOT, st->field_ntsc); XGetWindowAttributes(dpy, window, &xgwa); do_shape(st, &xgwa); return st; } static void p_logic(struct state *st, Paddle *p) { if (p->player == PLAYER_AI) { if (!p->wait) { int targ; if (st->bx > 0) { targ = st->ball.y + st->by * (st->r_paddle.x-st->ball.x) / st->bx; } else if (st->bx < 0) { targ = st->ball.y - st->by * (st->ball.x - st->l_paddle.x - st->l_paddle.w) / st->bx; } else { targ = st->ball.y; } if (targ > PONG_H) targ=PONG_H; if (targ < 0) targ=0; if (targ < p->y && !p->lock) { p->y -= st->paddle_rate; } else if (targ > (p->y + p->h) && !p->lock) { p->y += st->paddle_rate; } else { int move=targ - (p->y + p->h/2); if (move>st->paddle_rate) move=st->paddle_rate; if (move<-st->paddle_rate) move=-st->paddle_rate; p->y += move; p->lock = 1; } } } # ifndef HAVE_JWXYZ else if (p->player == PLAYER_MOUSE) { /* Clipping happens elsewhere. */ /* As the screen resolution increases, the mouse moves faster in terms of pixels, so divide by DPI. */ p->y += (int)(st->mouse_y - (st->h / 2)) * 4 * (int)st->screen_h_mm / (3 * (int)st->screen_h); if (st->is_focused) XWarpPointer (st->dpy, None, st->window, 0, 0, 0, 0, st->w / 2, st->h / 2); } # endif else if (p->player == PLAYER_TABLET) { p->y = st->mouse_y * (PONG_H - PONG_TMARG) / st->h + PONG_TMARG - p->h / 2; } else if (p->player == PLAYER_KEYBOARD) { if (st->key_up) p->y -= 8; if (st->key_down) p->y += 8; } else if (p->player == PLAYER_KEYBOARD_LEFT) { if (st->key_w) p->y -= 8; if (st->key_s) p->y += 8; } if ((st->dragging == 1 && p == &st->l_paddle) || (st->dragging == 2 && p == &st->r_paddle)) { /* Not getting MotionNotify. */ Window root1, child1; int mouse_x, mouse_y, root_x, root_y; unsigned int mask; if (XQueryPointer (st->dpy, st->window, &root1, &child1, &root_x, &root_y, &mouse_x, &mouse_y, &mask)) st->mouse_y = mouse_y; if (st->mouse_y < 0) st->mouse_y = 0; p->y = st->mouse_y * (PONG_H - PONG_TMARG) / st->h + PONG_TMARG - p->h / 2; } } static void p_hit_top_bottom(Paddle *p) { if(p->y <= PONG_TMARG) { p->y = PONG_TMARG; } if((p->y + p->h) >= PONG_H) { p->y = PONG_H - p->h; } } /* XFillRectangle (dpy, window, gc, p->x, p->y, p->w, p->h); if (old_v > p->y) { XClearArea(dpy,window, p->x, p->y + p->h, p->w, (old_v + p->h) - (p->y + p->h), 0); } else if (old_v < p->y) { XClearArea(dpy,window, p->x, old_v, p->w, p->y - old_v, 0); } */ static void paint_paddle(struct state *st, Paddle *p) { analogtv_draw_solid(st->inp, ANALOGTV_VIS_START + p->x, ANALOGTV_VIS_START + p->x + p->w, ANALOGTV_TOP, ANALOGTV_BOT, st->field_ntsc); analogtv_draw_solid(st->inp, ANALOGTV_VIS_START + p->x, ANALOGTV_VIS_START + p->x + p->w, ANALOGTV_TOP + p->y, ANALOGTV_TOP + p->y + p->h, st->paddle_ntsc); } /* XClearArea(dpy,window, old_ballx, old_bally, st->ball.d, st->ball.d, 0); XFillRectangle (dpy, window, gc, st->ball.x, st->ball.y, st->ball.d, st->ball.d); XFillRectangle (dpy, window, gc, xgwa.width / 2, 0, st->ball.d, xgwa.height); */ static void erase_ball(struct state *st) { analogtv_draw_solid(st->inp, ANALOGTV_VIS_START + st->ball.x, ANALOGTV_VIS_START + st->ball.x + st->ball.w, ANALOGTV_TOP + st->ball.y, ANALOGTV_TOP + st->ball.y + st->ball.h, st->field_ntsc); } static void paint_ball(struct state *st) { analogtv_draw_solid(st->inp, ANALOGTV_VIS_START + st->ball.x, ANALOGTV_VIS_START + st->ball.x + st->ball.w, ANALOGTV_TOP + st->ball.y, ANALOGTV_TOP + st->ball.y + st->ball.h, st->ball_ntsc); } static void paint_score(struct state *st) { char buf[256]; char* fmt = (st->clock ? "%02d" : "%d"); analogtv_draw_solid(st->inp, ANALOGTV_VIS_START, ANALOGTV_VIS_END, ANALOGTV_TOP, ANALOGTV_TOP + 10+ st->score_font.char_h * st->score_font.y_mult, st->field_ntsc); sprintf(buf, fmt ,st->r_paddle.score%256); analogtv_draw_string(st->inp, &st->score_font, buf, ANALOGTV_VIS_START + 130, ANALOGTV_TOP + 8, st->score_ntsc); sprintf(buf, fmt, st->l_paddle.score%256); analogtv_draw_string(st->inp, &st->score_font, buf, ANALOGTV_VIS_END - 200, ANALOGTV_TOP + 8, st->score_ntsc); } static void paint_net(struct state *st) { int x,y; x=(ANALOGTV_VIS_START + ANALOGTV_VIS_END)/2; for (y=ANALOGTV_TOP; yinp, x-2, x+2, y, y+3, st->net_ntsc); analogtv_draw_solid(st->inp, x-2, x+2, y+3, y+6, st->field_ntsc); } } static double double_time (void) { struct timeval now; # ifdef GETTIMEOFDAY_TWO_ARGS struct timezone tzp; gettimeofday(&now, &tzp); # else gettimeofday(&now); # endif return (now.tv_sec + ((double) now.tv_usec * 0.000001)); } static unsigned long pong_draw (Display *dpy, Window window, void *closure) { struct state *st = (struct state *) closure; const analogtv_reception *reception = &st->reception; double then = double_time(), now, timedelta; if (st->clock) { time_t now = time(0); struct tm* tm_now = localtime(&now); if (st->r_paddle.score != tm_now->tm_hour) { /* l paddle must score */ st->r_paddle.wait = 1; } else if (st->l_paddle.score != tm_now->tm_min) { /* r paddle must score */ st->l_paddle.wait = 1; } } erase_ball(st); st->ball.x += st->bx; st->ball.y += st->by; if (!st->clock) { /* in non-clock mode, occasionally increase ball speed */ if ((random()%40)==0) { if (st->bx>0) st->bx++; else st->bx--; } } p_logic(st, &st->r_paddle); p_logic(st, &st->l_paddle); p_hit_top_bottom(&st->r_paddle); p_hit_top_bottom(&st->l_paddle); hit_top_bottom(st); hit_paddle(st); #ifdef OUTPUT_POS printf("(%d,%d,%d,%d)\n",st->ball.x,st->ball.y,st->ball.w,st->ball.h); #endif paint_score(st); paint_net(st); if (1) { paint_paddle(st, &st->r_paddle); paint_paddle(st, &st->l_paddle); } if (1) paint_ball(st); analogtv_reception_update(&st->reception); analogtv_draw(st->tv, st->noise, &reception, 1); now = double_time(); timedelta = (1 / 29.97) - (now - then); return timedelta > 0 ? timedelta * 1000000 : 0; } static const char *pong_defaults [] = { ".background: black", ".foreground: white", "*speed: 6", "*noise: 0.04", "*clock: false", "*p1: ai", "*p2: ai", ANALOGTV_DEFAULTS 0 }; static XrmOptionDescRec pong_options [] = { { "-speed", ".speed", XrmoptionSepArg, 0 }, { "-noise", ".noise", XrmoptionSepArg, 0 }, { "-clock", ".clock", XrmoptionNoArg, "true" }, { "-p1", ".p1", XrmoptionSepArg, 0 }, { "-p2", ".p2", XrmoptionSepArg, 0 }, ANALOGTV_OPTIONS { 0, 0, 0, 0 } }; static void pong_reshape (Display *dpy, Window window, void *closure, unsigned int w, unsigned int h) { struct state *st = (struct state *) closure; XWindowAttributes xgwa; analogtv_reconfigure (st->tv); XGetWindowAttributes(dpy, window, &xgwa); /* AnalogTV does this too. */ xgwa.width = w; xgwa.height = h; do_shape(st, &xgwa); } static Bool pong_event (Display *dpy, Window window, void *closure, XEvent *event) { struct state *st = (struct state *) closure; switch (event->type) { case MotionNotify: st->mouse_y = event->xmotion.y; break; # ifndef HAVE_JWXYZ case FocusIn: if (needs_grab(st)) { grab_pointer(st); } break; case FocusOut: if (needs_grab(st)) { XUngrabPointer (dpy, CurrentTime); st->is_focused = False; } break; # endif /* !HAVE_JWXYZ */ case KeyPress: case KeyRelease: { char c; KeySym key; XLookupString(&event->xkey, &c, 1, &key, 0); Bool is_pressed = event->type == KeyPress; switch(key) { case XK_Up: if (st->l_paddle.player == PLAYER_KEYBOARD || st->r_paddle.player == PLAYER_KEYBOARD) { st->key_up = is_pressed; return True; } break; case XK_Down: if (st->l_paddle.player == PLAYER_KEYBOARD || st->r_paddle.player == PLAYER_KEYBOARD) { st->key_down = is_pressed; return True; } break; case 'w': if (st->l_paddle.player == PLAYER_KEYBOARD_LEFT || st->r_paddle.player == PLAYER_KEYBOARD_LEFT) { st->key_w = is_pressed; return True; } break; case 's': if (st->l_paddle.player == PLAYER_KEYBOARD_LEFT || st->r_paddle.player == PLAYER_KEYBOARD_LEFT) { st->key_s = is_pressed; return True; } break; } } /* Allow the user to pick up and drag either paddle with the mouse, even when not in a mouse-paddle mode. */ case ButtonPress: if (st->dragging != 0) return False; else if (event->xbutton.x < st->w * 0.2) { if (st->l_paddle.player != PLAYER_MOUSE) st->dragging = 1; return True; } else if (event->xbutton.x > st->w * 0.8) { if (st->r_paddle.player != PLAYER_MOUSE) st->dragging = 2; return True; } break; case ButtonRelease: if (st->dragging != 0) { st->dragging = 0; return True; } break; } return False; } static void pong_free (Display *dpy, Window window, void *closure) { struct state *st = (struct state *) closure; analogtv_release(st->tv); free (st); } XSCREENSAVER_MODULE ("Pong", pong) xscreensaver-5.36/hacks/wormhole.c000644 000767 000024 00000041252 12717747757 017263 0ustar00jwzstaff000000 000000 /* xscreensaver, Copyright (c) 1992-2011 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. */ /* wormhole: * Animation of moving through a wormhole. Based on my own code written * a few years ago. * author: Jon Rafkind * date: 1/19/04 */ #include #include "screenhack.h" #ifndef debug #define debug printf("File:%s Line:%d\n", __FILE__, __LINE__ ); #endif typedef struct STAR{ int x, y; int calc_x, calc_y; int Z; int center_x, center_y; } star; typedef struct STARLINE{ star begin, end; } starline; /* typedef struct RGBHANDLE{ XColor mine; unsigned short rwant, gwant, bwant; } RGBHandle; */ typedef struct COLORCHANGER{ XColor * shade; int min, max; int shade_use; int shade_max; int min_want; /* RGBHandle handle_begin, handle_end; */ } color_changer; typedef struct WORMHOLE{ int diameter; int diameter_change; int actualx, actualy; double virtualx, virtualy; double speed; int ang; int want_ang; int want_x, want_y; int max_Z; int addStar; int spiral; color_changer changer; starline ** stars; int num_stars; /* top of array we are using */ XColor black; Pixmap work; } wormhole; struct state { Display *dpy; Window window; int SCREEN_X, SCREEN_Y; int z_speed; int make_stars; int delay; wormhole worm; GC gc; Colormap cmap; }; /*inline*/ static int rnd( int q ) { if (q < 1) q = 1; return random() % q; } static int gang( int x1, int y1, int x2, int y2 ) { int tang = 0; if ( x1 == x2 ) { if ( y1 < y2 ) tang = 90; else tang = 270; } else if ( y1 == y2 ) { if ( x1 < x2 ) tang = 0; else tang = 180; } else { tang = (int)(0.5+atan2( -(y2-y1), x2 - x1 ) * 180.0 / M_PI ); } while ( tang < 0 ) tang += 360; return tang % 360; } static void blend_palette( XColor * pal, int max, XColor * sc, XColor * ec ) { int q; int sc_r = sc->red; int sc_g = sc->green; int sc_b = sc->blue; int ec_r = ec->red; int ec_g = ec->green; int ec_b = ec->blue; for ( q = 0; q < max; q++ ) { float j = (float)( q ) / (float)( max ); int f_r = (int)( 0.5 + (float)( sc_r ) + (float)( ec_r-sc_r ) * j ); int f_g = (int)( 0.5 + (float)( sc_g ) + (float)( ec_g-sc_g ) * j ); int f_b = (int)( 0.5 + (float)( sc_b ) + (float)( ec_b-sc_b ) * j ); /* pal[q] = makecol( f_r, f_g, f_b ); */ pal[q].red = f_r; pal[q].blue = f_b; pal[q].green = f_g; } } /* static void initHandle( RGBHandle * handle ) { handle->mine.red = rnd( 65536 ); handle->mine.green = rnd( 65536 ); handle->mine.blue = rnd( 65536 ); handle->rwant = rnd( 65536 ); handle->gwant = rnd( 65536 ); handle->bwant = rnd( 65536 ); } */ static void initXColor( XColor * color ) { color->red = rnd( 50000 ) + 10000; color->blue = rnd( 50000 ) + 10000; color->green = rnd( 50000 ) + 10000; } static void initColorChanger( struct state *st, color_changer * ch ) { int q; XColor old_color, new_color; ch->shade_max = 2048; ch->shade_use = 128; ch->min = 0; ch->max = ch->shade_use; ch->min_want = rnd( ch->shade_max - ch->shade_use ); ch->shade = (XColor *)malloc( sizeof(XColor) * ch->shade_max ); memset( ch->shade, 0, sizeof(XColor) * ch->shade_max ); initXColor( &old_color ); initXColor( &new_color ); for ( q = 0; q < ch->shade_max; q += ch->shade_use ){ blend_palette( ch->shade + q, ch->shade_use, &old_color, &new_color ); old_color = new_color; initXColor( &new_color ); } for ( q = 0; q < ch->shade_max; q++ ) XAllocColor( st->dpy, st->cmap, &( ch->shade[q] ) ); /* initHandle( &(ch->handle_begin) ); initHandle( &(ch->handle_end) ); ch->shade = (XColor *)malloc( sizeof(XColor) * MAX_COLORS ); ch->max = MAX_COLORS; memset( ch->shade, 0, sizeof(XColor) * ch->max ); blend_palette( ch->shade, ch->max, &(ch->handle_begin.mine), &(ch->handle_end.mine) ); for ( q = 0; q < ch->max; q++ ) XAllocColor( st->dpy, *cmap, &( ch->shade[q] ) ); */ } /* static void changeColor( unsigned short * col, unsigned short * change, int min, int max ) { int RGB_GO_BLACK = 30; if ( *col < *change ) *col++; if ( *col > *change ) *col--; if ( *col == *change ){ if ( rnd( RGB_GO_BLACK ) == rnd( RGB_GO_BLACK ) ) *change = 0; else *change = rnd(max-min) + min; } } */ /* static void moveRGBHandle( RGBHandle * handle, int min, int max ) { unsigned short * want[ 3 ]; int q; int cy = 0; want[0] = &(handle->rwant); want[1] = &(handle->gwant); want[2] = &(handle->bwant); for ( q = 0; q < 10; q++ ){ changeColor( &( handle->mine.red ), &handle->rwant, min, max ); changeColor( &( handle->mine.green ), &handle->gwant, min, max ); changeColor( &( handle->mine.blue ), &handle->bwant, min, max ); } for ( q = 0; q < 3; q++ ) cy = cy || (*(want[q]) >= min && *(want[q]) <= max); if ( !cy ) *(want[rnd(3)]) = rnd(max-min)+min; cy = 1; for ( q = 0; q < 3; q++ ) cy = cy && *(want[q]) == 0; if ( cy ) *(want[rnd(3)]) = rnd(max-min)+min; if ( rnd( 30 ) == rnd( 30 ) ) *(want[rnd(3)]) = rnd(max-min)+min; } */ static void moveColorChanger( color_changer * ch ) { /* int q; */ if ( ch->min < ch->min_want ){ ch->min++; ch->max++; } if ( ch->min > ch->min_want ) { ch->min--; ch->max--; } if ( ch->min == ch->min_want ) ch->min_want = rnd( ch->shade_max - ch->shade_use ); /* for ( q = 0; q < ch->max; q++ ) XFreeColors( st->dpy, *cmap, &( ch->shade[q].pixel ), 1, 0 ); moveRGBHandle( &( ch->handle_begin ), 5000, 65500 ); moveRGBHandle( &( ch->handle_end ), 5000, 65500 ); blend_palette( ch->shade, ch->max, &(ch->handle_begin.mine), &(ch->handle_end.mine) ); for ( q = 0; q < ch->max; q++ ) XAllocColor( st->dpy, *cmap, &( ch->shade[q] ) ); */ } #if 0 static void destroyColorChanger( color_changer * ch ) { int q; for ( q = 0; q < ch->max; q++ ) XFreeColors( st->dpy, *cmap, &( ch->shade[q].pixel ), 1, 0 ); free( ch->shade ); } #endif static void resizeWormhole( struct state *st, wormhole * worm ) { XWindowAttributes attr; XGetWindowAttributes( st->dpy, st->window, &attr ); st->cmap = attr.colormap; st->SCREEN_X = attr.width; st->SCREEN_Y = attr.height; # ifndef HAVE_JWXYZ /* Don't second-guess Quartz's double-buffering */ XFreePixmap( st->dpy, worm->work ); worm->work = XCreatePixmap( st->dpy, st->window, st->SCREEN_X, st->SCREEN_Y, attr.depth ); # endif } static void initWormhole( struct state *st, wormhole * worm, Display * display, Window win ) { int i; XWindowAttributes attr; XGetWindowAttributes( st->dpy, st->window, &attr ); st->cmap = attr.colormap; st->SCREEN_X = attr.width; st->SCREEN_Y = attr.height; # ifdef HAVE_JWXYZ /* Don't second-guess Quartz's double-buffering */ worm->work = st->window; # else worm->work = XCreatePixmap( st->dpy, st->window, st->SCREEN_X, st->SCREEN_Y, attr.depth ); # endif worm->diameter = rnd( 10 ) + 15; worm->diameter_change = rnd( 10 ) + 15; /* worm->actualx = rnd( attr.width ); worm->actualy = rnd( attr.height ); */ worm->actualx = attr.width / 2; worm->actualy = attr.height / 2; worm->virtualx = worm->actualx; worm->virtualy = worm->actualy; worm->speed = (float)st->SCREEN_X / 180.0; /* z_speed = SCREEN_X / 120; */ worm->spiral = 0; worm->addStar = st->make_stars; worm->want_x = rnd( attr.width - 50 ) + 25; worm->want_y = rnd( attr.height - 50 ) + 25; worm->want_ang = gang( worm->actualx, worm->actualy, worm->want_x, worm->want_y ); worm->ang = worm->want_ang; worm->max_Z = 600; worm->black.red = 0; worm->black.green = 0; worm->black.blue = 0; XAllocColor( st->dpy, st->cmap, &worm->black ); initColorChanger( st, &(worm->changer) ); worm->num_stars = 64; worm->stars = (starline **)malloc( sizeof(starline *) * worm->num_stars ); for ( i = 0; i < worm->num_stars; i++ ) worm->stars[i] = NULL; } #if 0 static void destroyWormhole( wormhole * worm ) { destroyColorChanger( &(worm->changer), st->dpy, cmap ); if (work->work != st->window) XFreePixmap( st->dpy, worm->work ); free( worm->stars ); } #endif static double Cos( int a ) { return cos( a * 180.0 / M_PI ); } static double Sine( int a ) { return sin( a * 180.0 / M_PI ); } static void calcStar( star * st ) { if ( st->center_x == 0 || st->center_y == 0 ){ st->Z = 0; return; } if ( st->Z <= 0 ){ st->calc_x = (st->x << 10) / st->center_x; st->calc_y = (st->y << 10) / st->center_y; } else { st->calc_x = (st->x << 10 ) / st->Z + st->center_x; st->calc_y = (st->y << 10 ) / st->Z + st->center_y; } } static void initStar( star * st, int Z, int ang, wormhole * worm ) { st->x = Cos( ang ) * worm->diameter; st->y = Sine( ang ) * worm->diameter; st->center_x = worm->actualx; st->center_y = worm->actualy; st->Z = Z; calcStar( st ); } static void addStar( wormhole * worm ) { starline * star_new; starline ** xstars; int old_stars; int q; int ang; star_new = (starline *)malloc( sizeof( starline ) ); ang = rnd( 360 ); initStar( &star_new->begin, worm->max_Z, ang, worm ); initStar( &star_new->end, worm->max_Z+rnd(6)+4, ang, worm ); for ( q = 0; q < worm->num_stars; q++ ){ if ( worm->stars[q] == NULL ){ worm->stars[q] = star_new; return; } } old_stars = worm->num_stars; worm->num_stars = worm->num_stars << 1; xstars = (starline **)malloc( sizeof(starline *) * worm->num_stars ); for ( q = 0; q < worm->num_stars; q++ ) xstars[q] = NULL; for ( q = 0; q < old_stars; q++ ) if ( worm->stars[q] != NULL ) xstars[q] = worm->stars[q]; free( worm->stars ); worm->stars = xstars; worm->stars[ old_stars ] = star_new; } static int moveStar( struct state *st, starline * stl ) { stl->begin.Z -= st->z_speed; stl->end.Z -= st->z_speed; calcStar( &stl->begin ); calcStar( &stl->end ); return ( stl->begin.Z <= 0 || stl->end.Z <= 0 ); } static int dist( int x1, int y1, int x2, int y2 ) { int xs, ys; xs = x1-x2; ys = y1-y2; return (int)sqrt( xs*xs + ys*ys ); } static void moveWormhole( struct state *st, wormhole * worm ) { int q; double dx, dy; /* int x1, y1, x2, y2; */ int min_dist = 100; int find = 0; dx = Cos( worm->ang ) * worm->speed; dy = Sine( worm->ang ) * worm->speed; worm->virtualx += dx; worm->virtualy += dy; worm->actualx = (int)worm->virtualx; worm->actualy = (int)worm->virtualy; if ( worm->spiral ){ if ( worm->spiral % 5 == 0 ) worm->ang = (worm->ang + 1 ) % 360; worm->spiral--; if ( worm->spiral <= 0 ) find = 1; } else { if ( dist( worm->actualx, worm->actualy, worm->want_x, worm->want_y ) < 20 ) find = 1; if ( rnd( 20 ) == rnd( 20 ) ) find = 1; if ( worm->actualx < min_dist ){ worm->actualx = min_dist; worm->virtualx = worm->actualx; find = 1; } if ( worm->actualy < min_dist ){ worm->actualy = min_dist; worm->virtualy = worm->actualy; find = 1; } if ( worm->actualx > st->SCREEN_X - min_dist ){ worm->actualx = st->SCREEN_X - min_dist; worm->virtualx = worm->actualx; find = 1; } if ( worm->actualy > st->SCREEN_Y - min_dist ){ worm->actualy = st->SCREEN_Y - min_dist; worm->virtualy = worm->actualy; find = 1; } if ( rnd( 500 ) == rnd( 500 ) ) worm->spiral = rnd( 30 ) + 50; } if ( find ){ worm->want_x = rnd( st->SCREEN_X - min_dist * 2 ) + min_dist; worm->want_y = rnd( st->SCREEN_Y - min_dist * 2 ) + min_dist; worm->ang = gang( worm->actualx, worm->actualy, worm->want_x, worm->want_y ); } /* worm->ang = ( worm->ang + 360 + rnd( 30 ) - 15 ) % 360; */ /* if ( worm->ang < worm->want_ang ) worm->ang++; if ( worm->ang > worm->want_ang ) worm->ang--; if ( worm->ang == worm->want_ang && rnd( 3 ) == rnd( 3 ) ) worm->want_ang = rnd( 360 ); */ /* if ( rnd( 25 ) == rnd( 25 ) ){ x1 = worm->actualx; y1 = worm->actualy; x2 = SCREEN_X / 2 + rnd( 20 ) - 10; y2 = SCREEN_Y / 2 + rnd( 20 ) - 10; worm->want_ang = gang(x1,y1,x2,y2); } */ /* if ( worm->actualx < min_dist || worm->actualx > SCREEN_X - min_dist || worm->actualy < min_dist || worm->actualy > SCREEN_Y - min_dist ){ x1 = worm->actualx; y1 = worm->actualy; x2 = SCREEN_X / 2 + rnd( 20 ) - 10; y2 = SCREEN_Y / 2 + rnd( 20 ) - 10; / * worm->ang = gang( worm->actualx, worm->actualy, SCREEN_X/2+rnd(20)-10, SCREEN_Y/2+rnd(20)-10 ); * / worm->ang = gang( x1, y1, x2, y2 ); worm->want_ang = worm->ang; / * printf("Angle = %d\n", worm->ang ); * / if ( worm->actualx < min_dist ) worm->actualx = min_dist; if ( worm->actualx > SCREEN_X - min_dist ) worm->actualx = SCREEN_X - min_dist; if ( worm->actualy < min_dist ) worm->actualy = min_dist; if ( worm->actualy > SCREEN_Y - min_dist ) worm->actualy = SCREEN_Y - min_dist; worm->virtualx = worm->actualx; worm->virtualy = worm->actualy; } */ for ( q = 0; q < worm->num_stars; q++ ){ if ( worm->stars[q] != NULL ){ if ( moveStar( st, worm->stars[q] ) ){ free( worm->stars[q] ); worm->stars[q] = NULL; } } } moveColorChanger( &worm->changer ); if ( worm->diameter < worm->diameter_change ) worm->diameter++; if ( worm->diameter > worm->diameter_change ) worm->diameter--; if ( rnd( 30 ) == rnd( 30 ) ) worm->diameter_change = rnd( 35 ) + 5; for ( q = 0; q < worm->addStar; q++ ) addStar( worm ); } static XColor * getColorShade( color_changer * ch ) { return ch->shade + ch->min; } static void drawWormhole( struct state *st, wormhole * worm ) { int i; int color; int z; starline * current; XColor * xcol; XColor * shade; XSetForeground( st->dpy, st->gc, worm->black.pixel ); XFillRectangle( st->dpy, worm->work, st->gc, 0, 0, st->SCREEN_X, st->SCREEN_Y ); for ( i = 0; i < worm->num_stars; i++ ) if ( worm->stars[i] != NULL ){ current = worm->stars[i]; z = current->begin.Z; color = z * worm->changer.shade_use / worm->max_Z; shade = getColorShade( &worm->changer ); /* xcol = &worm->changer.shade[ color ]; */ xcol = &shade[ color ]; XSetForeground( st->dpy, st->gc, xcol->pixel ); /* XDrawLine( st->dpy, st->window, *gc, current->begin.calc_x, current->begin.calc_y, current->end.calc_x, current->end.calc_y ); */ XDrawLine( st->dpy, worm->work, st->gc, current->begin.calc_x, current->begin.calc_y, current->end.calc_x, current->end.calc_y ); } if (worm->work != st->window) XCopyArea( st->dpy, worm->work, st->window, st->gc, 0, 0, st->SCREEN_X, st->SCREEN_Y, 0, 0 ); } /* static void eraseWormhole( Display * display, Window * st->window, wormhole * worm ){ starline * current; int i; XColor * xcol; for ( i = 0; i < worm->num_stars; i++ ) if ( worm->stars[i] != NULL ){ xcol = &worm->black; current = worm->stars[i]; XSetForeground( st->dpy, *gc, xcol->pixel ); XDrawLine( st->dpy, st->window, *gc, current->begin.calc_x, current->begin.calc_y, current->end.calc_x, current->end.calc_y ); } } */ static void * wormhole_init (Display *dpy, Window window) { struct state *st = (struct state *) calloc (1, sizeof(*st)); XGCValues gcv; XWindowAttributes attr; st->dpy = dpy; st->window = window; st->delay = get_integer_resource(st->dpy, "delay", "Integer" ); st->make_stars = get_integer_resource(st->dpy, "stars", "Integer" ); st->z_speed = get_integer_resource(st->dpy, "zspeed", "Integer" ); initWormhole( st, &st->worm, st->dpy, st->window ); st->gc = XCreateGC( st->dpy, st->window, 0, &gcv ); XGetWindowAttributes( st->dpy, st->window, &attr ); st->cmap = attr.colormap; return st; } static unsigned long wormhole_draw (Display *dpy, Window window, void *closure) { struct state *st = (struct state *) closure; moveWormhole( st, &st->worm ); drawWormhole( st, &st->worm ); return st->delay; } static void wormhole_reshape (Display *dpy, Window window, void *closure, unsigned int w, unsigned int h) { struct state *st = (struct state *) closure; resizeWormhole( st, &st->worm ); } static Bool wormhole_event (Display *dpy, Window window, void *closure, XEvent *event) { return False; } static void wormhole_free (Display *dpy, Window window, void *closure) { struct state *st = (struct state *) closure; free (st); } static const char *wormhole_defaults [] = { ".background: Black", ".foreground: #E9967A", "*delay: 10000", "*zspeed: 10", "*stars: 20", #ifdef HAVE_MOBILE "*ignoreRotation: True", #endif 0 }; static XrmOptionDescRec wormhole_options [] = { { "-delay", ".delay", XrmoptionSepArg, 0 }, { "-zspeed", ".zspeed", XrmoptionSepArg, 0 }, { "-stars", ".stars", XrmoptionSepArg, 0 }, { 0, 0, 0, 0 } }; XSCREENSAVER_MODULE ("Wormhole", wormhole) xscreensaver-5.36/hacks/pacman.c000644 000767 000024 00000157744 12717743134 016665 0ustar00jwzstaff000000 000000 /* -*- Mode: C; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ /* pacman --- Mr. Pacman and his ghost friends */ #if 0 static const char sccsid[] = "@(#)pacman.c 5.00 2000/11/01 xlockmore"; #endif /*- * Copyright (c) 2002 by Edwin de Jong . * * Permission to use, copy, modify, and distribute this software and its * documentation for any purpose and without fee is hereby granted, * provided that the above copyright notice appear in all copies and that * both that copyright notice and this permission notice appear in * supporting documentation. * * This file is provided AS IS with no warranties of any kind. The author * shall have no liability with respect to the infringement of copyrights, * trade secrets or any patents by this file or any part thereof. In no * event will the author be liable for any lost revenue or profits or * other special, indirect and consequential damages. * * Revision History: * 25-Feb-2005: Added bonus dots. I am using a recursive back track algorithm * to help the ghost find there way home. This also means that * they do not know the shorts path. * Jeremy English jhe@jeremyenglish.org * 15-Aug-2004: Added support for pixmap pacman. * Jeremy English jhe@jeremyenglish.org * 11-Aug-2004: Added support for pixmap ghost. * Jeremy English jhe@jeremyenglish.org * 13-May-2002: Added -trackmouse feature thanks to code from 'maze.c'. * splitted up code into several files. Retouched AI code, cleaned * up code. * 3-May-2002: Added AI to pacman and ghosts, slowed down ghosts. * 26-Nov-2001: Random level generator added * 01-Nov-2000: Allocation checks * 04-Jun-1997: Compatible with xscreensaver * */ /* TODO: 1. think of a better level generation algorithm */ #define DEF_TRACKMOUSE "False" #ifdef STANDALONE # define MODE_pacman # define DEFAULTS "*delay: 10000 \n" \ "*size: 0 \n" \ "*ncolors: 6 \n" \ "*fpsTop: true \n" \ "*fpsSolid: true \n" \ # define UNIFORM_COLORS # define BRIGHT_COLORS # define pacman_handle_event 0 # include "xlockmore.h" /* in xscreensaver distribution */ # include #else /* STANDALONE */ # include "xlock.h" /* in xlockmore distribution */ #endif /* STANDALONE */ #ifdef MODE_pacman #include "pacman.h" #include "pacman_ai.h" #include "pacman_level.h" #if defined(USE_PIXMAP) /* computed in pacman.h */ # include "images/pacman/ghost-u1.xpm" # include "images/pacman/ghost-u2.xpm" # include "images/pacman/ghost-r1.xpm" # include "images/pacman/ghost-r2.xpm" # include "images/pacman/ghost-l1.xpm" # include "images/pacman/ghost-l2.xpm" # include "images/pacman/ghost-d1.xpm" # include "images/pacman/ghost-d2.xpm" /* Used to clean up the dust left by wag. */ # include "images/pacman/ghost-mask.xpm" # include "images/pacman/pacman-u1.xpm" # include "images/pacman/pacman-u2.xpm" # include "images/pacman/pacman-r1.xpm" # include "images/pacman/pacman-r2.xpm" # include "images/pacman/pacman-l1.xpm" # include "images/pacman/pacman-l2.xpm" # include "images/pacman/pacman-d1.xpm" # include "images/pacman/pacman-d2.xpm" # include "images/pacman/pacman-0.xpm" # include "images/pacman/ghost-s1.xpm" # include "images/pacman/ghost-s2.xpm" # include "images/pacman/ghost-sf1.xpm" # include "images/pacman/ghost-sf2.xpm" # include "images/pacman/eyes-l.xpm" # include "images/pacman/eyes-r.xpm" # include "images/pacman/eyes-u.xpm" # include "images/pacman/eyes-d.xpm" # include "images/pacman/pacman-ds1.xpm" # include "images/pacman/pacman-ds2.xpm" # include "images/pacman/pacman-ds3.xpm" # include "images/pacman/pacman-ds4.xpm" # include "images/pacman/pacman-ds5.xpm" # include "images/pacman/pacman-ds6.xpm" # include "images/pacman/pacman-ds7.xpm" # include "images/pacman/pacman-ds8.xpm" #endif #if 0 static const struct { int dx, dy; } dirvecs[DIRVECS] = { { -1, 0}, { 0, 1}, { 1, 0}, { 0, -1}}; #endif #ifdef DISABLE_INTERACTIVE ENTRYPOINT ModeSpecOpt pacman_opts = { 0, (XrmOptionDescRec *) NULL, 0, (argtype *) NULL, (OptionStruct *) NULL }; #else static XrmOptionDescRec opts[] = { {"-trackmouse", ".pacman.trackmouse", XrmoptionNoArg, "on"}, {"+trackmouse", ".pacman.trackmouse", XrmoptionNoArg, "off"} }; static argtype vars[] = { {&pacman_trackmouse, "trackmouse", "TrackMouse", DEF_TRACKMOUSE, t_Bool} }; static OptionStruct desc[] = { {"-/+trackmouse", "turn on/off the tracking of the mouse"} }; ENTRYPOINT ModeSpecOpt pacman_opts = { sizeof opts / sizeof opts[0], opts, sizeof vars / sizeof vars[0], vars, desc }; #endif #ifdef USE_MODULES ModStruct pacman_description = { "pacman", /* *cmdline_arg; */ "init_pacman", /* *init_name; */ "draw_pacman", /* *callback_name; */ "release_pacman", /* *release_name; */ "refresh_pacman", /* *refresh_name; */ "change_pacman", /* *change_name; */ (char *) NULL, /* *unused_name; */ &pacman_opts, /* *msopts */ 10000, 4, 1, 0, 64, 1.0, "", "Shows Pacman(tm)", 0, NULL }; #endif Bool pacman_trackmouse; pacmangamestruct *pacman_games = (pacmangamestruct *) NULL; static void repopulate (ModeInfo * mi); static void drawlevel (ModeInfo * mi); static void free_pacman (Display * display, pacmangamestruct * pp) { int dir, mouth, i, j, k; if (pp->ghosts != NULL) { free (pp->ghosts); pp->ghosts = (ghoststruct *) NULL; } if (pp->stippledGC != None) { XFreeGC (display, pp->stippledGC); pp->stippledGC = None; } for (i = 0; i < 4; i++) { for (j = 0; j < MAXGDIR; j++) { for (k = 0; k < MAXGWAG; k++) { if (pp->ghostPixmap[i][j][k] != None) { XFreePixmap (display, pp->ghostPixmap[i][j][k]); pp->ghostPixmap[i][j][k] = None; } } } } for (dir = 0; dir < 4; dir++) for (mouth = 0; mouth < MAXMOUTH; mouth++) if (pp->pacmanPixmap[dir][mouth] != None) { XFreePixmap (display, pp->pacmanPixmap[dir][mouth]); pp->pacmanPixmap[dir][mouth] = None; } } /* set pacman and the ghost in there starting positions, but don't draw a new level */ static void reset_level (ModeInfo * mi, int n, int pac_init) { pacmangamestruct *pp = &pacman_games[MI_SCREEN (mi)]; unsigned int ghost; MI_CLEARWINDOW (mi); drawlevel (mi); pp->gamestate = GHOST_DANGER; if ( pac_init ){ pp->pacman.row = (LEVHEIGHT + JAILHEIGHT) / 2 - n; pp->pacman.init_row = pp->pacman.row; } else{ pp->pacman.row = pp->pacman.init_row; } pp->pacman.col = (LEVWIDTH / 2); pp->pacman.nextrow = NOWHERE; pp->pacman.nextcol = NOWHERE; pp->pacman.cf = NOWHERE; pp->pacman.rf = NOWHERE; pp->pacman.oldcf = NOWHERE; pp->pacman.oldrf = NOWHERE; pp->pacman.oldlx = NOWHERE; pp->pacman.oldly = NOWHERE; pp->pacman.aistate = ps_eating; pp->pacman.cur_trace = 0; pp->pacman.roundscore = 0; pp->pacman.speed = 4; pp->pacman.lastturn = 0; pp->pacman.delta.x = 0; pp->pacman.delta.y = 0; for (ghost = 0; ghost < pp->nghosts; ghost++) { pp->ghosts[ghost].col = (LEVWIDTH / 2); pp->ghosts[ghost].row = (LEVHEIGHT / 2); pp->ghosts[ghost].nextcol = NOWHERE; pp->ghosts[ghost].nextrow = NOWHERE; pp->ghosts[ghost].dead = 0; pp->ghosts[ghost].lastbox = START; pp->ghosts[ghost].cf = NOWHERE; pp->ghosts[ghost].rf = NOWHERE; pp->ghosts[ghost].oldcf = NOWHERE; pp->ghosts[ghost].oldrf = NOWHERE; pp->ghosts[ghost].aistate = inbox; pp->ghosts[ghost].timeleft = ghost * 20; pp->ghosts[ghost].speed = 3; pp->ghosts[ghost].delta.x = 0; pp->ghosts[ghost].delta.y = 0; pp->ghosts[ghost].flash_scared = False; pp->ghosts[ghost].wait_pos = False; pacman_ghost_update (pp, &(pp->ghosts[ghost])); } pacman_update (mi, pp, &(pp->pacman)); } static int pacman_ghost_collision(unsigned int ghost, pacmangamestruct * pp) { return (((pp->ghosts[ghost].nextrow == pp->pacman.nextrow) && (pp->ghosts[ghost].nextcol == pp->pacman.nextcol)) || ((pp->ghosts[ghost].nextrow == pp->pacman.row) && (pp->ghosts[ghost].nextcol == pp->pacman.col) && (pp->ghosts[ghost].row == pp->pacman.nextrow) && (pp->ghosts[ghost].col == pp->pacman.nextcol))); } /* Checks for death of any ghosts/pacman and updates. It also makes a new level if all ghosts are dead or all dots are eaten. */ static void check_death (ModeInfo * mi, pacmangamestruct * pp) { Display *display = MI_DISPLAY (mi); Window window = MI_WINDOW (mi); unsigned int ghost; if (pp->pacman.aistate == ps_dieing) return; for (ghost = 0; ghost < pp->nghosts; ghost++) { /* The ghost have to be scared before you can kill them */ if ( pacman_ghost_collision ( ghost, pp ) ) { if (pp->ghosts[ghost].aistate == goingin) continue; if (pp->ghosts[ghost].aistate == hiding) { pp->ghosts[ghost].dead = 1; pp->ghosts[ghost].aistate = goingin; pp->ghosts[ghost].wait_pos = True; XSetForeground (display, pp->stippledGC, MI_BLACK_PIXEL (mi)); XFillRectangle (display, window, pp->stippledGC, pp->ghosts[ghost].cf, pp->ghosts[ghost].rf, pp->spritexs, pp->spriteys); } /* DIE PACMAN... */ else { pp->pacman.deaths++; pp->pacman.aistate = ps_dieing; } continue; } } } /* Resets state of ghosts + pacman. Creates a new level, draws that level. */ static void repopulate (ModeInfo * mi) { pacmangamestruct *pp = &pacman_games[MI_SCREEN (mi)]; pp->pacman.deaths = 0; reset_level (mi, pacman_createnewlevel (pp), True); check_death (mi, pp); } /* Sets the color to the color of a wall. */ static void setwallcolor (ModeInfo * mi) { Display *display = MI_DISPLAY (mi); pacmangamestruct *pp = &pacman_games[MI_SCREEN (mi)]; if (MI_NPIXELS (mi) > 2) XSetForeground (display, pp->stippledGC, MI_PIXEL (mi, BLUE)); else XSetForeground (display, pp->stippledGC, MI_WHITE_PIXEL (mi)); } /* Sets the color to the color of a dot. */ static void setdotcolor (ModeInfo * mi) { Display *display = MI_DISPLAY (mi); pacmangamestruct *pp = &pacman_games[MI_SCREEN (mi)]; XSetForeground (display, pp->stippledGC, MI_WHITE_PIXEL (mi)); } static void cleardotcolor (ModeInfo * mi) { Display *display = MI_DISPLAY (mi); pacmangamestruct *pp = &pacman_games[MI_SCREEN (mi)]; XSetForeground (display, pp->stippledGC, MI_BLACK_PIXEL (mi)); } #if 0 static void draw_position (ModeInfo * mi, int x, int y, int color) { Display *display = MI_DISPLAY (mi); Window window = MI_WINDOW (mi); pacmangamestruct *pp = &pacman_games[MI_SCREEN (mi)]; XFontStruct *font = NULL; char *f_name = "-*-utopia-*-r-*-*-*-600-*-*-p-*-*-*"; char *s = NULL; font = XLoadQueryFont (display, f_name); assert (font != NULL); s = (char *) malloc (256); assert (s != NULL); sprintf (s, "(%d,%d)", x, y); XSetForeground (display, pp->stippledGC, color); XDrawString (display, window, pp->stippledGC, x, y, s, strlen (s)); free (s); free (font); } #endif #if 0 static void draw_number (ModeInfo * mi, int x, int y, int num, int color) { Display *display = MI_DISPLAY (mi); Window window = MI_WINDOW (mi); pacmangamestruct *pp = &pacman_games[MI_SCREEN (mi)]; XFontStruct *font = NULL; char *f_name = "-*-utopia-*-r-*-*-*-600-*-*-p-*-*-*"; char *s = NULL; font = XLoadQueryFont (display, f_name); assert (font != NULL); s = (char *) malloc (256); assert (s != NULL); sprintf (s, "%d", num); XSetForeground (display, pp->stippledGC, color); XDrawString (display, window, pp->stippledGC, x, y, s, strlen (s)); free (s); free (font); } #endif #if 0 /* draw_grid - draws a grid on top of the playing field. * Used so that I can determine if I'm converting from rows and columns to x and y * coordinates correctly. */ static void draw_grid (ModeInfo * mi) { Display *display = MI_DISPLAY (mi); Window window = MI_WINDOW (mi); pacmangamestruct *pp = &pacman_games[MI_SCREEN (mi)]; int h = MI_HEIGHT (mi); int w = MI_WIDTH (mi); int y = 0; int x = 0; XSetForeground (display, pp->stippledGC, 0xff0000); while (y < h) { while (x < w) { XDrawLine (display, window, pp->stippledGC, x, 0, x, h); x += 10; } x = 0; XDrawLine (display, window, pp->stippledGC, 0, y, w, y); y += 10; } } #endif #if 0 static void draw_string (ModeInfo * mi, int x, int y, char *s, int color) { Display *display = MI_DISPLAY (mi); Window window = MI_WINDOW (mi); pacmangamestruct *pp = &pacman_games[MI_SCREEN (mi)]; XFontStruct *font = NULL; char *f_name = "-*-utopia-*-r-*-*-*-600-*-*-p-*-*-*"; font = XLoadQueryFont (display, f_name); assert (font != NULL); assert (s != NULL); XSetForeground (display, pp->stippledGC, color); XDrawString (display, window, pp->stippledGC, x, y, s, strlen (s)); free (font); } /* I think this function has a memory leak. Be careful if you enable it. */ /* I only used it briefly to help me debug the ghost's aistate. It prints */ /* the state of each ghost on the left hand side of the screen */ static void print_ghost_stats (ModeInfo *mi, ghoststruct *g , int ghost_num) { char s[1024]; sprintf (s, "GHOST: %d", ghost_num ); switch (g->aistate){ case inbox: sprintf (s, "%s inbox", s); break; case goingout: sprintf (s, "%s goingout", s); break; case randdir: sprintf (s, "%s randdir", s); break; case chasing: sprintf (s, "%s chasing", s); break; case hiding: sprintf (s, "%s hiding", s); break; case goingin: sprintf (s, "%s goingin",s); break; } draw_string (mi, 0, (ghost_num *3) *10+50, g->last_stat, 0x000000); draw_string (mi, 0, (ghost_num *3) *10+50, s, 0xff0000); strcpy(g->last_stat,s); } /* prints the number of times pacman has died and his aistate on the left hand */ /* side of the screen */ static void print_pac_stats ( ModeInfo *mi, pacmanstruct *pac ) { pacmangamestruct *pp = &pacman_games[MI_SCREEN (mi)]; char s[1024]; sprintf (s, "Pacman, Deaths: %d", pac->deaths ); switch ( pac->aistate ){ case ps_eating: sprintf(s, "%s ps_eating",s ); break; case ps_chasing: sprintf(s, "%s ps_chasing",s ); break; case ps_hiding: sprintf(s, "%s ps_hiding",s ); break; case ps_random: sprintf(s, "%s ps_random",s ); break; case ps_dieing: sprintf(s, "%s ps_dieing",s ); break; } draw_string ( mi, 0, 200, pp->last_pac_stat, 0x000000); draw_string ( mi, 0, 200, s, 0xff0000); strcpy(pp->last_pac_stat, s ); } #endif /*Ok, yeah whatever?*/ /*dot_rc_to_pixel - magic that converts row and columns into *the x and y coordinates of the screen. */ static void dot_rc_to_pixel (ModeInfo * mi, int *x, int *y) { 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) + (pp->ys / 2) - (pp->ys > 32 ? (pp->ys / 16) : 1) + pp->yb; } /* dot_width_height - magic used to get the width and height of * a dot. This dot can also be scaled by a value. */ static void dot_width_height (ModeInfo *mi, int *w, int *h) { pacmangamestruct *pp = &pacman_games[MI_SCREEN (mi)]; if (pp->xs > 32){ *w = *h = (pp->xs / 32 ); }else { *w = *h = 1; } } static void bonus_dot_width_height (ModeInfo *mi, int *w, int *h ) { *w = *h = MI_HEIGHT (mi) / 65; } static void draw_dot (ModeInfo * mi, pacmangamestruct * pp, int x, int y, void (*width_height)(ModeInfo * mi, int *w, int *h), int (*arc_func) (Display * display, Drawable d, GC gc, int x, int y, unsigned int width, unsigned int height, int angle1, int angle2)) { Display *display = MI_DISPLAY (mi); Window window = MI_WINDOW (mi); int w, h; dot_rc_to_pixel (mi, &x, &y); width_height(mi, &w, &h); (void) arc_func (display, window, pp->stippledGC, x, y, w, h, 0, 23040); } static void draw_bonus_dot (ModeInfo * mi, pacmangamestruct * pp, int x, int y) { int x2 = x; int y2 = y; setdotcolor (mi); draw_dot (mi, pp, x, y, bonus_dot_width_height, XFillArc); dot_rc_to_pixel (mi, &x2, &y2); #if 0 draw_position (mi, x2, y2, 0xff0000); #endif } static void clear_bonus_dot (ModeInfo * mi, pacmangamestruct * pp, int x, int y) { cleardotcolor (mi); draw_dot (mi, pp, x, y, bonus_dot_width_height, XFillArc); } static void draw_regular_dot (ModeInfo * mi, pacmangamestruct * pp, int x, int y) { setdotcolor (mi); draw_dot (mi, pp, x, y, dot_width_height, XDrawArc); } /* Draws a block in the level at the specified x and y locations. */ static void drawlevelblock (ModeInfo * mi, pacmangamestruct * pp, const unsigned x, const unsigned y) { Display *display = MI_DISPLAY (mi); Window window = MI_WINDOW (mi); int dx = 0, dy = 0; if (pp->xs % 2 == 1) dx = -1; if (pp->ys % 2 == 1) dy = -1; #ifndef HAVE_JWXYZ XSetFillStyle (display, pp->stippledGC, FillSolid); #endif /* !HAVE_JWXYZ */ XSetLineAttributes (display, pp->stippledGC, pp->wallwidth, LineSolid, CapRound, JoinMiter); if (pp->xs < 2 || pp->ys < 2) { switch (pp->level[y * LEVWIDTH + x]) { case ' ': case '=': break; case '.': setdotcolor (mi); (void) XDrawPoint (display, window, pp->stippledGC, x * pp->xs + pp->xb, y * pp->ys + pp->yb); break; default: setwallcolor (mi); (void) XDrawPoint (display, window, pp->stippledGC, x * pp->xs + pp->xb, y * pp->ys + pp->yb); } return; } switch (pp->level[y * LEVWIDTH + x]) { case ' ': case '=': break; case '.': setdotcolor (mi); if (pp->xs < 8 || pp->ys < 8) { (void) XDrawPoint (display, window, pp->stippledGC, x * pp->xs + pp->xb + pp->xs / 2, y * pp->ys + pp->yb + pp->ys / 2); break; } draw_regular_dot (mi, pp, x, y); break; /* What we will probably want to do here is have the pp->level store a 'o' for * the bonus dots. The we can use the drawing routine above just with a bigger * radius. */ case 'o': draw_bonus_dot (mi, pp, x, y); break; case '-': setwallcolor (mi); (void) XDrawLine (display, window, pp->stippledGC, (pp->xs * x) + pp->xb, (pp->ys * y) + (pp->ys / 2) + pp->yb, (pp->xs * (x + 1)) + pp->xb, (pp->ys * y) + (pp->ys / 2) + pp->yb); break; case '|': setwallcolor (mi); (void) XDrawLine (display, window, pp->stippledGC, (pp->xs * x) + (pp->xs / 2) + pp->xb, (pp->ys * y) + pp->yb, (pp->xs * x) + (pp->xs / 2) + pp->xb, (pp->ys * (y + 1)) + pp->yb); break; case '_': setwallcolor (mi); (void) XDrawArc (display, window, pp->stippledGC, (pp->xs * x) - (pp->ys / 2) + pp->xb + dx, (pp->ys * y) + (pp->ys / 2) + pp->yb, pp->xs, pp->ys, 0 * 64, 90 * 64); break; case ',': setwallcolor (mi); (void) XDrawArc (display, window, pp->stippledGC, (pp->xs * x) + (pp->ys / 2) + pp->xb, (pp->ys * y) + (pp->ys / 2) + pp->yb, pp->xs, pp->ys, 90 * 64, 90 * 64); break; case '`': setwallcolor (mi); (void) XDrawArc (display, window, pp->stippledGC, (pp->xs * x) + (pp->ys / 2) + pp->xb, (pp->ys * y) - (pp->ys / 2) + pp->yb + dy, pp->xs, pp->ys, 180 * 64, 90 * 64); break; case '\'': setwallcolor (mi); (void) XDrawArc (display, window, pp->stippledGC, (pp->xs * x) - (pp->ys / 2) + pp->xb + dx, (pp->ys * y) - (pp->ys / 2) + pp->yb + dy, pp->xs, pp->ys, 270 * 64, 90 * 64); break; } } /* Draws a complete level. */ static void drawlevel (ModeInfo * mi) { pacmangamestruct *pp = &pacman_games[MI_SCREEN (mi)]; unsigned int x, y; for (y = 0; y < LEVHEIGHT; y++) for (x = 0; x < LEVWIDTH; x++) drawlevelblock (mi, pp, x, y); } /* There is some overlap so it can be made more efficient */ #define ERASE_IMAGE(d,w,g,x,y,xl,yl,xs,ys) \ if (yly) \ (y>(yl-(ys)))?XFillRectangle(d,w,g,xl,y+ys,xs,yl-(y)): \ XFillRectangle(d,w,g,xl,yl,xs,ys); \ if (xlx) \ (x>(xl-(xs)))?XFillRectangle(d,w,g,x+xs,yl,xl-(x),ys): \ XFillRectangle(d,w,g,xl,yl,xs,ys) /* Draws the pacman sprite, removing the previous location. */ #if defined(USE_PIXMAP) static void draw_pacman_sprite (ModeInfo * mi) { Display *display = MI_DISPLAY (mi); Window window = MI_WINDOW (mi); pacmangamestruct *pp = &pacman_games[MI_SCREEN (mi)]; unsigned int dir = 0; int old_mask_dir = 0; int old_mask_mouth = 0; Pixmap old_mask, new_mask; Pixmap pacman; #define MAX_MOUTH_DELAY 2 #define MAX_DEATH_DELAY 20 if (pp->pacman.aistate == ps_dieing){ pp->pacman.cf = pp->pacman.oldcf; pp->pacman.rf = pp->pacman.oldrf; } else { pp->pacman.cf = pp->pacman.col * pp->xs + pp->pacman.delta.x * pp->pacman.cfactor + pp->xb + pp->spritedx; pp->pacman.rf = pp->pacman.row * pp->ys + pp->pacman.delta.y * pp->pacman.rfactor + pp->yb + pp->spritedy; } dir = (ABS (pp->pacman.cfactor) * (2 - pp->pacman.cfactor) + ABS (pp->pacman.rfactor) * (1 + pp->pacman.rfactor)) % 4; if (pp->pm_mouth_delay == MAX_MOUTH_DELAY) { if (pp->pm_mouth == (MAXMOUTH - 1) || pp->pm_mouth == 0) { pp->pm_open_mouth = !pp->pm_open_mouth; } pp->pm_open_mouth ? pp->pm_mouth++ : pp->pm_mouth--; pp->pm_mouth_delay = 0; } else { pp->pm_mouth_delay++; } if (pp->pacman.aistate == ps_dieing){ if (pp->pm_death_frame >= PAC_DEATH_FRAMES) { pp->pacman.aistate = ps_eating; pp->pm_death_frame = 0; pp->pm_death_delay = 0; reset_level (mi, 0, False); return; } else { old_mask = pp->pacmanMask[0][0]; new_mask = pp->pacmanMask[0][0]; pacman = pp->pacman_ds[pp->pm_death_frame]; if (pp->pm_death_delay == MAX_DEATH_DELAY){ pp->pm_death_frame++; pp->pm_death_delay = 0; } else{ pp->pm_death_delay++; } } } else{ old_mask = pp->pacmanMask[old_mask_dir][old_mask_mouth]; new_mask = pp->pacmanMask[dir][pp->pm_mouth]; pacman = pp->pacmanPixmap[dir][pp->pm_mouth]; } XSetForeground (display, pp->stippledGC, MI_BLACK_PIXEL (mi)); XSetClipMask (display, pp->stippledGC, old_mask); XSetClipOrigin (display, pp->stippledGC, pp->pacman.oldcf, pp->pacman.oldrf); XFillRectangle (display, window, pp->stippledGC, pp->pacman.oldcf, pp->pacman.oldrf, pp->spritexs, pp->spriteys); XSetClipMask (display, pp->stippledGC, new_mask); XSetClipOrigin (display, pp->stippledGC, pp->pacman.cf, pp->pacman.rf); XCopyArea (display, pacman, window, pp->stippledGC, 0, 0, pp->spritexs, pp->spriteys, pp->pacman.cf, pp->pacman.rf); XSetClipMask (display, pp->stippledGC, None); if (pp->pacman.aistate != ps_dieing){ pp->pacman.oldcf = pp->pacman.cf; pp->pacman.oldrf = pp->pacman.rf; } } #if 0 static void draw_ghost_position (ModeInfo * mi, ghoststruct * ghost) { draw_position (mi, ghost->oldcf, ghost->oldrf, MI_BLACK_PIXEL (mi)); draw_position (mi, ghost->cf, ghost->rf, 0x00ff00); } #endif #if 0 static void draw_ghost_ndirs ( ModeInfo *mi, ghoststruct * ghost) { draw_number (mi, ghost->oldcf, ghost->oldrf, ghost->oldndirs, MI_BLACK_PIXEL (mi)); ghost->oldndirs = ghost->ndirs; draw_number (mi, ghost->cf, ghost->rf, ghost->ndirs, 0x00ff00); } #endif static void draw_ghost_sprite (ModeInfo * mi, const unsigned ghost) { Display *display = MI_DISPLAY (mi); Window window = MI_WINDOW (mi); pacmangamestruct *pp = &pacman_games[MI_SCREEN (mi)]; #define MAX_WAG_COUNT 50 unsigned int dir = 0; unsigned int fs = 0; /*flash scared*/ Pixmap g_pix; /*ghost pixmap*/ dir = (ABS (pp->ghosts[ghost].cfactor) * (2 - pp->ghosts[ghost].cfactor) + ABS (pp->ghosts[ghost].rfactor) * (1 + pp->ghosts[ghost].rfactor)) % 4; fs = pp->ghosts[ghost].flash_scared; assert (fs == 0 || fs == 1); /* Choose the pixmap */ switch (pp->ghosts[ghost].aistate){ case hiding: g_pix = pp->s_ghostPixmap[fs][pp->gh_wag]; break; case goingin: g_pix = pp->ghostEyes[dir]; #if 1 { int i = 0; while ( i < pp->ghosts[ghost].trace_idx ){ XFillRectangle (display, window, pp->stippledGC, pp->ghosts[ghost].trace[i].vx, pp->ghosts[ghost].trace[i].vy, pp->spritexs, pp->spriteys); i++; } } #endif break; default: g_pix = pp->ghostPixmap[ghost][dir][pp->gh_wag]; } pp->ghosts[ghost].cf = pp->ghosts[ghost].col * pp->xs + pp->ghosts[ghost].delta.x * pp->ghosts[ghost].cfactor + pp->xb + pp->spritedx; pp->ghosts[ghost].rf = pp->ghosts[ghost].row * pp->ys + pp->ghosts[ghost].delta.y * pp->ghosts[ghost].rfactor + pp->yb + pp->spritedy; XSetForeground (display, pp->stippledGC, MI_BLACK_PIXEL (mi)); XSetClipMask (display, pp->stippledGC, pp->ghostMask); XSetClipOrigin (display, pp->stippledGC, pp->ghosts[ghost].oldcf, pp->ghosts[ghost].oldrf); XFillRectangle (display, window, pp->stippledGC, pp->ghosts[ghost].oldcf, pp->ghosts[ghost].oldrf, pp->spritexs, pp->spriteys); if (pp->pacman.aistate != ps_dieing) { drawlevelblock (mi, pp, (unsigned int) pp->ghosts[ghost].col, (unsigned int) pp->ghosts[ghost].row); XSetClipOrigin (display, pp->stippledGC, pp->ghosts[ghost].cf, pp->ghosts[ghost].rf); XCopyArea (display, g_pix, window, pp->stippledGC, 0, 0, pp->spritexs, pp->spriteys, pp->ghosts[ghost].cf, pp->ghosts[ghost].rf); } XSetClipMask (display, pp->stippledGC, None); #if 0 draw_ghost_position (mi, &(pp->ghosts[ghost])); #endif #if 0 draw_ghost_ndirs ( mi, &(pp->ghosts[ghost])); #endif if (pp->pacman.aistate != ps_dieing) { pp->ghosts[ghost].oldcf = pp->ghosts[ghost].cf; pp->ghosts[ghost].oldrf = pp->ghosts[ghost].rf; if (pp->gh_wag_count++ == MAX_WAG_COUNT) { pp->gh_wag = !pp->gh_wag; pp->gh_wag_count = 0; } } } #else /* USE_PIXMAP */ /* Draws the pacman sprite, removing the previous location. */ static void draw_pacman_sprite (ModeInfo * mi) { Display *display = MI_DISPLAY (mi); Window window = MI_WINDOW (mi); pacmangamestruct *pp = &pacman_games[MI_SCREEN (mi)]; pp->pacman.cf = pp->pacman.col * pp->xs + pp->pacman.delta.x * pp->pacman.cfactor + pp->xb + pp->spritedx; pp->pacman.rf = pp->pacman.row * pp->ys + pp->pacman.delta.y * pp->pacman.rfactor + pp->yb + pp->spritedy; XSetForeground (display, pp->stippledGC, MI_BLACK_PIXEL (mi)); if (pp->pacman.oldcf != NOWHERE && pp->pacman.oldrf != NOWHERE) { ERASE_IMAGE (display, window, pp->stippledGC, pp->pacman.cf, pp->pacman.rf, pp->pacman.oldcf, pp->pacman.oldrf, pp->spritexs, pp->spriteys); } if (MI_NPIXELS (mi) > 2) XSetForeground (display, pp->stippledGC, MI_PIXEL (mi, YELLOW)); else XSetForeground (display, pp->stippledGC, MI_WHITE_PIXEL (mi)); XSetFillStyle (display, pp->stippledGC, FillOpaqueStippled); if (pp->xs < 2 || pp->ys < 2) XDrawPoint (display, window, pp->stippledGC, pp->pacman.cf, pp->pacman.rf); else XFillRectangle (display, window, pp->stippledGC, pp->pacman.cf, pp->pacman.rf, pp->spritexs, pp->spriteys); pp->pacman.mouthstage += pp->pacman.mouthdirection; if ((pp->pacman.mouthstage >= MAXMOUTH) || (pp->pacman.mouthstage < 0)) { pp->pacman.mouthdirection *= -1; pp->pacman.mouthstage += pp->pacman.mouthdirection * 2; } pp->pacman.oldcf = pp->pacman.cf; pp->pacman.oldrf = pp->pacman.rf; } /* Draws a ghost sprite, removing the previous sprite and restores the level. */ static void draw_ghost_sprite (ModeInfo * mi, const unsigned ghost) { Display *display = MI_DISPLAY (mi); Window window = MI_WINDOW (mi); pacmangamestruct *pp = &pacman_games[MI_SCREEN (mi)]; pp->ghosts[ghost].cf = pp->ghosts[ghost].col * pp->xs + pp->ghosts[ghost].delta.x * pp->ghosts[ghost].cfactor + pp->xb + pp->spritedx; pp->ghosts[ghost].rf = pp->ghosts[ghost].row * pp->ys + pp->ghosts[ghost].delta.y * pp->ghosts[ghost].rfactor + pp->yb + pp->spritedy; XSetForeground (display, pp->stippledGC, MI_BLACK_PIXEL (mi)); XFillRectangle (display, window, pp->stippledGC, pp->ghosts[ghost].cf, pp->ghosts[ghost].rf, pp->spritexs, pp->spriteys); if (pp->ghosts[ghost].oldcf != NOWHERE || pp->ghosts[ghost].oldrf != NOWHERE) { ERASE_IMAGE (display, window, pp->stippledGC, pp->ghosts[ghost].cf, pp->ghosts[ghost].rf, pp->ghosts[ghost].oldcf, pp->ghosts[ghost].oldrf, pp->spritexs, pp->spriteys); } drawlevelblock (mi, pp, (unsigned int) pp->ghosts[ghost].col, (unsigned int) pp->ghosts[ghost].row); if (MI_NPIXELS (mi) > 2) XSetForeground (display, pp->stippledGC, MI_PIXEL (mi, GREEN)); else XSetForeground (display, pp->stippledGC, MI_WHITE_PIXEL (mi)); XSetFillStyle (display, pp->stippledGC, FillOpaqueStippled); if (pp->xs < 2 || pp->ys < 2) XDrawPoint (display, window, pp->stippledGC, pp->ghosts[ghost].cf, pp->ghosts[ghost].rf); else XFillRectangle (display, window, pp->stippledGC, pp->ghosts[ghost].cf, pp->ghosts[ghost].rf, pp->spritexs, pp->spriteys); pp->ghosts[ghost].oldcf = pp->ghosts[ghost].cf; pp->ghosts[ghost].oldrf = pp->ghosts[ghost].rf; } #endif /* USE_PIXMAP */ static int ghost_over (ModeInfo * mi, int x, int y) { int ghost = 0; int ret = False; 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 && x <= pp->ghosts[ghost].cf + pp->spritexs) && (pp->ghosts[ghost].rf <= y && y <= pp->ghosts[ghost].rf + pp->spriteys)) { ret = True; break; } } return ret; } static void flash_bonus_dots (ModeInfo * mi) { #define MAX_FLASH_COUNT 25 pacmangamestruct *pp = &pacman_games[MI_SCREEN (mi)]; int i, x, y; for (i = 0; i < NUM_BONUS_DOTS; i++) { 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) draw_bonus_dot (mi, pp, x, y); else clear_bonus_dot (mi, pp, x, y); } } if (pp->bd_flash_count-- == 0) { pp->bd_flash_count = MAX_FLASH_COUNT; pp->bd_on = !pp->bd_on; } } static unsigned int ate_bonus_dot (ModeInfo * mi) { /*Check pacman's position. If it is over a bonus dot and that dot *has not been eaten, then return true */ unsigned int ret = 0; int idx = 0; 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; } static void ghost_scared (ModeInfo * mi) { unsigned int ghost; 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 || pp->ghosts[ghost].aistate == inbox ) continue; pp->ghosts[ghost].aistate = hiding; pp->ghosts[ghost].flash_scared = 0; if (pp->pacman.aistate != ps_dieing) pp->pacman.aistate = ps_chasing; } } static void ghost_not_scared (ModeInfo * mi) { unsigned int ghost; 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 || pp->ghosts[ghost].aistate == inbox ) continue; pp->ghosts[ghost].aistate = chasing; } if (pp->pacman.aistate != ps_dieing) pp->pacman.aistate = ps_eating; } static void ghost_flash_scared (ModeInfo * mi) { unsigned int ghost; pacmangamestruct *pp = &pacman_games[MI_SCREEN (mi)]; for (ghost = 0; ghost < pp->nghosts; ghost++) pp->ghosts[ghost].flash_scared = !pp->ghosts[ghost].flash_scared; } /* Does all drawing of moving sprites in the level. */ static void pacman_tick (ModeInfo * mi) { #define DEFAULT_SCARED_TIME 500 #define START_FLASH 200 #define FLASH_COUNT 25 pacmangamestruct *pp = &pacman_games[MI_SCREEN (mi)]; unsigned int ghost; #if 0 draw_grid (mi); #endif for (ghost = 0; ghost < pp->nghosts; ghost++) { draw_ghost_sprite (mi, ghost); #if 0 print_ghost_stats (mi, &(pp->ghosts[ghost]), ghost); #endif } #if 0 print_pac_stats (mi, &(pp->pacman)); #endif draw_pacman_sprite (mi); flash_bonus_dots (mi); if (ate_bonus_dot (mi)) { pp->ghost_scared_timer = (random () % 100) + DEFAULT_SCARED_TIME; ghost_scared (mi); } if (pp->ghost_scared_timer > 0) { if (--pp->ghost_scared_timer == 0) ghost_not_scared (mi); else if (pp->ghost_scared_timer <= START_FLASH) { if (pp->flash_timer <= 0) { pp->flash_timer = FLASH_COUNT; ghost_flash_scared (mi); } pp->flash_timer--; } } /* We don't want to miss the last death sequence. So if pacman has died three times we wait for his state to change from dieing to something else before we repopulate the level. If pacman ate all of the dots then we just repopulate. */ if (pp->dotsleft == 0 ) repopulate (mi); else if (pp->pacman.deaths >= 3){ if (pp->old_pac_state == ps_dieing && pp->pacman.aistate != ps_dieing) repopulate (mi); } pp->old_pac_state = pp->pacman.aistate; } /* CODE TO LOAD AND SCALE THE PIXMAPS */ #if defined(USE_PIXMAP) /* Grabbed the scaling routine off of usenet. * Changed it so that the information specific * to the source pixmap does not have to be a parameter. * * There is probably a better way to scale pixmaps. * From: Chris Fiddyment (cxf@itd.dsto.gov.au) * Subject: Scaling Pixmap Algorithm. * Newsgroups: comp.graphics.algorithms * Date: 1994-07-06 18:51:38 PST * -jeremy */ static Pixmap scale_pixmap (Display ** dpy, GC gc, Pixmap source, int dwidth, int dheight) { Pixmap temp, dest; int j, end; float i; float xscale, yscale; unsigned int swidth, sheight; Window window; int x, y; unsigned border_width_return, depth; XGetGeometry (*dpy, source, &window, &x, &y, &swidth, &sheight, &border_width_return, &depth); xscale = (float) swidth / (float) dwidth; /* Scaling factors */ yscale = (float) sheight / (float) dheight; dest = XCreatePixmap (*dpy, window, dwidth, dheight, depth); if (!dest) { fprintf (stderr, "%s Could not scale image", progname); } temp = XCreatePixmap (*dpy, window, dwidth, sheight, depth); if (!temp) { fprintf (stderr, "%s Could not scale image", progname); } j = 0; end = dwidth * xscale; /* Scale width of source into temp pixmap */ for (i = 0; i <= end; i += xscale) XCopyArea (*dpy, source, temp, gc, i, 0, 1, sheight, j++, 0); j = 0; end = dheight * yscale; /* Scale height of temp into dest pixmap */ for (i = 0; i <= end; i += yscale) XCopyArea (*dpy, temp, dest, gc, 0, i, dwidth, 1, 0, j++); XFreePixmap (*dpy, temp); return (Pixmap) dest; } static void pacman_fail (char *s) { fprintf (stderr, "%s: %s\n", progname, s); exit (1); } /* Load the ghost pixmaps and their mask. */ static void load_ghost_pixmaps (Display ** dpy, Window window, pacmangamestruct ** ps) { pacmangamestruct *pp = *ps; Display *display = *dpy; char *colors[] = { ". c #FF0000", /*Red */ ". c #00FFDE", /*Blue */ ". c #FFB847", /*Orange */ ". c #FFB8DE", /*Pink */ }; char **bits[] = { ghost_u1_xpm, ghost_u2_xpm, ghost_r1_xpm, ghost_r2_xpm, ghost_d1_xpm, ghost_d2_xpm, ghost_l1_xpm, ghost_l2_xpm }; char * const *s_bits[] = { ghost_s1_xpm, ghost_s2_xpm, ghost_sf1_xpm, ghost_sf2_xpm }; char * const *e_bits[] = { eyes_u_xpm, eyes_r_xpm, eyes_d_xpm, eyes_l_xpm }; int i, j, k, m; int w = pp->spritexs; int h = pp->spriteys; GC gc = 0; Pixmap temp; for (i = 0; i < 4; i++) { m = 0; for (j = 0; j < MAXGDIR; j++) { for (k = 0; k < MAXGWAG; k++) { bits[m][2] = colors[i]; pp->ghostPixmap[i][j][k] = xpm_data_to_pixmap (display, window, bits[m], &w, &h, &pp->ghostMask); if (!pp->ghostPixmap[i][j][k]) pacman_fail ("Cannot load ghost images"); pp->ghostPixmap[i][j][k] = scale_pixmap (&display, pp->stippledGC, pp->ghostPixmap[i][j][k], pp->spritexs, pp->spriteys); if (!pp->ghostPixmap[i][j][k]) pacman_fail ("Cannot scale ghost images"); m++; } } } /* load the scared ghost */ m = 0; for (i = 0; i < MAXGFLASH; i++) { for (j = 0; j < MAXGWAG; j++) { pp->s_ghostPixmap[i][j] = xpm_data_to_pixmap (display, window, s_bits[m++], &w, &h, &pp->ghostMask); if (!pp->s_ghostPixmap[i][j]) pacman_fail ("Cannot Scare Ghost images"); pp->s_ghostPixmap[i][j] = scale_pixmap (&display, pp->stippledGC, pp->s_ghostPixmap[i][j], pp->spritexs, pp->spriteys); if (!pp->s_ghostPixmap[i][j]) pacman_fail ("Cannot scale Scared Ghost images"); } } /* load the ghost eyes */ for (i = 0; i < MAXGDIR; i++) { pp->ghostEyes[i] = xpm_data_to_pixmap (display, window, e_bits[i], &w, &h, &pp->ghostMask); if (!pp->ghostEyes[i]) pacman_fail ("Cannot open ghost eye images"); pp->ghostEyes[i] = scale_pixmap (&display, pp->stippledGC, pp->ghostEyes[i], pp->spritexs, pp->spriteys); if (!pp->ghostEyes[i]) pacman_fail ("Cannot open ghost eye images"); } /* We really only need a single mask. This saves the headache of getting the * bottom of the ghost to clip just right. What we'll do is mask * the top portion of the ghost, but the bottom of the ghost will be solid. * I did this by setting the pixels between the fringe of their sheets * to black instead of none. -jeremy */ temp = xpm_data_to_pixmap (display, window, ghost_mask_xpm, &w, &h, &pp->ghostMask); if (!temp) pacman_fail ("Cannot load temporary ghost image"); temp = scale_pixmap (&display, pp->stippledGC, temp, pp->spritexs, pp->spriteys); if (!temp) pacman_fail ("Cannot scale temporary ghost image"); gc = XCreateGC (display, pp->ghostMask, 0, 0); pp->ghostMask = scale_pixmap (&display, gc, pp->ghostMask, pp->spritexs, pp->spriteys); XFreePixmap (display, temp); } /* Load the pacman pixmaps and their mask. */ static void load_pacman_pixmaps (Display ** dpy, Window window, pacmangamestruct ** ps) { pacmangamestruct *pp = *ps; Display *display = *dpy; char **bits[] = { pacman_0_xpm, pacman_u1_xpm, pacman_u2_xpm, pacman_0_xpm, pacman_r1_xpm, pacman_r2_xpm, pacman_0_xpm, pacman_d1_xpm, pacman_d2_xpm, pacman_0_xpm, pacman_l1_xpm, pacman_l2_xpm }; char * const *ds_bits[] = { pacman_ds1_xpm, pacman_ds2_xpm, pacman_ds3_xpm, pacman_ds4_xpm, pacman_ds5_xpm, pacman_ds6_xpm, pacman_ds7_xpm, pacman_ds8_xpm }; int i, j, m; int w = pp->spritexs; int h = pp->spriteys; GC gc = 0; m = 0; for (i = 0; i < 4; i++) { for (j = 0; j < MAXMOUTH; j++) { pp->pacmanPixmap[i][j] = xpm_data_to_pixmap (display, window, bits[m++], &w, &h, &pp->pacmanMask[i][j]); if (!pp->pacmanPixmap[i][j]) pacman_fail ("Cannot load pacman pixmap."); pp->pacmanPixmap[i][j] = scale_pixmap (&display, pp->stippledGC, pp->pacmanPixmap[i][j], pp->spritexs, pp->spriteys); if (!pp->pacmanPixmap[i][j]) pacman_fail ("Cannot scale pacman pixmap."); if (!gc) gc = XCreateGC (display, pp->pacmanMask[i][j], 0, 0); pp->pacmanMask[i][j] = scale_pixmap (&display, gc, pp->pacmanMask[i][j], pp->spritexs, pp->spriteys); } } /* Load pacman death sequence */ for ( i = 0; i < PAC_DEATH_FRAMES; i++ ){ pp->pacman_ds[i] = xpm_data_to_pixmap (display, window, ds_bits[i], &w, &h, &pp->pacman_ds_mask[i]); if (!pp->pacman_ds[i]) pacman_fail ("Cannot load pacman death frame."); pp->pacman_ds[i] = scale_pixmap ( &display, pp->stippledGC, pp->pacman_ds[i], pp->spritexs, pp->spriteys); if (!pp->pacman_ds[i]) pacman_fail ("Cannot scale pixmap."); if (!gc) gc = XCreateGC (display, pp->pacman_ds_mask[i], 0, 0); pp->pacman_ds_mask[i] = scale_pixmap (&display, gc, pp->pacman_ds_mask[i], pp->spritexs, pp->spriteys); } } #endif /* USE_PIXMAP */ /* Hook function, sets state to initial position. */ ENTRYPOINT void init_pacman (ModeInfo * mi) { Display *display = MI_DISPLAY (mi); Window window = MI_WINDOW (mi); long size = MI_SIZE (mi); pacmangamestruct *pp; XGCValues gcv; int i, j, k; #if (! defined( USE_PIXMAP )) GC fg_gc, bg_gc; XPoint points[9]; int dir, mouth; #endif if (pacman_games == NULL) { if ((pacman_games = (pacmangamestruct *) calloc ((size_t) MI_NUM_SCREENS (mi), sizeof (pacmangamestruct))) == NULL) return; } pp = &pacman_games[MI_SCREEN (mi)]; pp->width = (unsigned short) MI_WIDTH (mi); pp->height = (unsigned short) MI_HEIGHT (mi); for (i = 0; i < 4; i++) { for (j = 0; j < MAXGDIR; j++) { for (k = 0; k < MAXGWAG; k++) { if (pp->ghostPixmap[i][j][k] != None) { XFreePixmap (display, pp->ghostPixmap[i][j][k]); pp->ghostPixmap[i][j][k] = None; pp->graphics_format = 0 /*IS_NONE */ ; } } } } for (i = 0; i < MAXGFLASH; i++) { for (j = 0; j < MAXGWAG; j++) { if (pp->s_ghostPixmap[i][j] != None) { XFreePixmap (display, pp->s_ghostPixmap[i][j]); pp->s_ghostPixmap[i][j] = None; } } } if (size == 0 || MINGRIDSIZE * size > (int) pp->width || MINGRIDSIZE * size > (int) pp->height) { pp->ys = pp->xs = MAX (MIN (pp->width / LEVWIDTH, pp->height / LEVHEIGHT), 1); } else { if (size < -MINSIZE) pp->ys = (short) (NRAND (MIN (-size, MAX (MINSIZE, MIN (pp->width, pp->height) / MINGRIDSIZE)) - MINSIZE + 1) + MINSIZE); else if (size < MINSIZE) pp->ys = MINSIZE; else pp->ys = (short) (MIN (size, MAX (MINSIZE, MIN (pp->width, pp->height) / MINGRIDSIZE))); pp->xs = pp->ys; } pp->wallwidth = (unsigned int) (pp->xs + pp->ys) >> 4; if (pp->wallwidth < 1) pp->wallwidth = 1; pp->incx = (pp->xs >> 3) + 1; pp->incy = (pp->ys >> 3) + 1; pp->ncols = (unsigned short) MAX (LEVWIDTH, 2); pp->nrows = (unsigned short) MAX (LEVHEIGHT, 2); pp->xb = (pp->width - pp->ncols * pp->xs) >> 1; pp->yb = (pp->height - pp->nrows * pp->ys) >> 1; pp->spritexs = MAX (pp->xs + (pp->xs >> 1) - 1, 1); pp->spriteys = MAX (pp->ys + (pp->ys >> 1) - 1, 1); pp->spritedx = (pp->xs - pp->spritexs) >> 1; pp->spritedy = (pp->ys - pp->spriteys) >> 1; pp->old_pac_state = ps_chasing; if (!pp->stippledGC) { gcv.foreground = MI_BLACK_PIXEL (mi); gcv.background = MI_BLACK_PIXEL (mi); if ((pp->stippledGC = XCreateGC (display, window, GCForeground | GCBackground, &gcv)) == None) { free_pacman (display, pp); return; } } #ifdef HAVE_JWXYZ jwxyz_XSetAntiAliasing (display, pp->stippledGC, False); #endif #if defined(USE_PIXMAP) load_ghost_pixmaps (&display, window, &pp); load_pacman_pixmaps (&display, window, &pp); #else if ((pp->ghostPixmap[0][0][0] = XCreatePixmap (display, window, pp->spritexs, pp->spriteys, 1)) == None) { free_pacman (display, pp); return; } gcv.foreground = 0; gcv.background = 1; if ((bg_gc = XCreateGC (display, pp->ghostPixmap[0][0][0], GCForeground | GCBackground, &gcv)) == None) { free_pacman (display, pp); return; } gcv.foreground = 1; gcv.background = 0; if ((fg_gc = XCreateGC (display, pp->ghostPixmap[0][0][0], GCForeground | GCBackground, &gcv)) == None) { XFreeGC (display, bg_gc); free_pacman (display, pp); return; } #define SETPOINT(p, xp, yp) p.x = xp; p.y = yp /* draw the triangles on the bottom (scalable) */ SETPOINT (points[0], 1, pp->spriteys * 5 / 6); SETPOINT (points[1], pp->spritexs / 6, pp->spriteys); SETPOINT (points[2], pp->spritexs / 3, pp->spriteys * 5 / 6); SETPOINT (points[3], pp->spritexs / 2, pp->spriteys); SETPOINT (points[4], pp->spritexs * 2 / 3, pp->spriteys * 5 / 6); SETPOINT (points[5], pp->spritexs * 5 / 6, pp->spriteys); SETPOINT (points[6], pp->spritexs, pp->spriteys * 5 / 6); SETPOINT (points[7], pp->spritexs, pp->spriteys / 2); SETPOINT (points[8], 1, pp->spriteys / 2); XFillRectangle (display, pp->ghostPixmap[0][0][0], bg_gc, 0, 0, pp->spritexs, pp->spriteys); XFillArc (display, pp->ghostPixmap[0][0][0], fg_gc, 0, 0, pp->spritexs, pp->spriteys, 0, 11520); XFillPolygon (display, pp->ghostPixmap[0][0][0], fg_gc, points, 9, Nonconvex, CoordModeOrigin); XFreeGC (display, bg_gc); XFreeGC (display, fg_gc); if (pp->pacmanPixmap[0][0] != None) for (dir = 0; dir < 4; dir++) for (mouth = 0; mouth < MAXMOUTH; mouth++) XFreePixmap (display, pp->pacmanPixmap[dir] [mouth]); for (dir = 0; dir < 4; dir++) for (mouth = 0; mouth < MAXMOUTH; mouth++) { if ((pp->pacmanPixmap[dir][mouth] = XCreatePixmap (display, MI_WINDOW (mi), pp->spritexs, pp->spriteys, 1)) == None) { free_pacman (display, pp); return; } gcv.foreground = 1; gcv.background = 0; if ((fg_gc = XCreateGC (display, pp->pacmanPixmap[dir][mouth], GCForeground | GCBackground, &gcv)) == None) { free_pacman (display, pp); return; } gcv.foreground = 0; gcv.background = 0; if ((bg_gc = XCreateGC (display, pp->pacmanPixmap[dir][mouth], GCForeground | GCBackground, &gcv)) == None) { XFreeGC (display, fg_gc); free_pacman (display, pp); return; } XFillRectangle (display, pp->pacmanPixmap[dir][mouth], bg_gc, 0, 0, pp->spritexs, pp->spriteys); if (pp->spritexs == 1 && pp->spriteys == 1) XFillRectangle (display, pp->pacmanPixmap[dir][mouth], fg_gc, 0, 0, pp->spritexs, pp->spriteys); else XFillArc (display, pp->pacmanPixmap[dir][mouth], fg_gc, 0, 0, pp->spritexs, pp->spriteys, ((90 - dir * 90) + mouth * 5) * 64, (360 + (-2 * mouth * 5)) * 64); XFreeGC (display, fg_gc); XFreeGC (display, bg_gc); } #endif /* USE_PIXMAP */ pp->pacman.lastbox = START; pp->pacman.mouthdirection = 1; pp->pacman.nextcol = NOWHERE; pp->pacman.nextrow = NOWHERE; if (pp->ghosts != NULL) { free (pp->ghosts); pp->ghosts = (ghoststruct *) NULL; } pp->nghosts = GHOSTS; if (!pp->ghosts) if ((pp->ghosts = (ghoststruct *) calloc ((size_t) pp->nghosts, sizeof (ghoststruct))) == NULL) { free_pacman (display, pp); return; } pp->pacman.mouthstage = MAXMOUTH - 1; MI_CLEARWINDOW (mi); repopulate (mi); } /* Callback function called for each tick. This is the complete machinery of everything that moves. */ ENTRYPOINT void draw_pacman (ModeInfo * mi) { unsigned int g; pacmangamestruct *pp; if (pacman_games == NULL) return; pp = &pacman_games[MI_SCREEN (mi)]; if (pp->ghosts == NULL) return; pp->pacman.err.x = (pp->pacman.err.x + 1) % pp->pacman.speed; pp->pacman.err.y = (pp->pacman.err.y + 1) % pp->pacman.speed; pp->pacman.delta.x += pp->pacman.err.x != 0 ? pp->incx : 0; 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) { pacman_update (mi, pp, &(pp->pacman)); check_death (mi, pp); pp->pacman.delta.x = pp->incx; pp->pacman.delta.y = pp->incy; } if (pp->pacman.delta.x > pp->xs + pp->incx) pp->pacman.delta.x = pp->xs + pp->incx; if (pp->pacman.delta.y > pp->ys + pp->incy) pp->pacman.delta.y = pp->ys + pp->incy; for (g = 0; g < pp->nghosts; g++) { pp->ghosts[g].err.x = (pp->ghosts[g].err.x + 1) % pp->ghosts[g].speed; pp->ghosts[g].err.y = (pp->ghosts[g].err.y + 1) % pp->ghosts[g].speed; pp->ghosts[g].delta.x += pp->ghosts[g].err.x != 0 ? pp->incx : 0; pp->ghosts[g].delta.y += pp->ghosts[g].err.y != 0 ? pp->incy : 0; if (pp->ghosts[g].delta.x >= pp->xs && pp->ghosts[g].delta.y >= pp->ys) { pacman_ghost_update (pp, &(pp->ghosts[g])); pp->ghosts[g].delta.x = pp->incx; pp->ghosts[g].delta.y = pp->incy; } if (pp->ghosts[g].delta.x > pp->xs + pp->incx) pp->ghosts[g].delta.x = pp->xs + pp->incx; if (pp->ghosts[g].delta.y > pp->ys + pp->incy) pp->ghosts[g].delta.y = pp->ys + pp->incy; } pacman_tick (mi); } /* Releases resources. */ ENTRYPOINT void release_pacman (ModeInfo * mi) { if (pacman_games != NULL) { int screen; for (screen = 0; screen < MI_NUM_SCREENS (mi); screen++) free_pacman (MI_DISPLAY (mi), &pacman_games[screen]); free (pacman_games); pacman_games = (pacmangamestruct *) NULL; } } /* Refresh current level. */ ENTRYPOINT void refresh_pacman (ModeInfo * mi) { drawlevel (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; pp->xb = (pp->width - pp->ncols * pp->xs) >> 1; pp->yb = (pp->height - pp->nrows * pp->ys) >> 1; MI_CLEARWINDOW (mi); /* repopulate (mi); */ drawlevel (mi); } #ifndef STANDALONE /* Callback to change level. */ ENTRYPOINT void change_pacman (ModeInfo * mi) { MI_CLEARWINDOW (mi); repopulate (mi); } #endif /* !STANDALONE */ XSCREENSAVER_MODULE ("Pacman", pacman) #endif /* MODE_pacman */ xscreensaver-5.36/hacks/pacman_ai.c000644 000767 000024 00000056132 12701612217 017311 0ustar00jwzstaff000000 000000 /* -*- Mode: C; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ /*- * Copyright (c) 2002 by Edwin de Jong . * * Permission to use, copy, modify, and distribute this software and its * documentation for any purpose and without fee is hereby granted, * provided that the above copyright notice appear in all copies and that * both that copyright notice and this permission notice appear in * supporting documentation. * * This file is provided AS IS with no warranties of any kind. The author * shall have no liability with respect to the infringement of copyrights, * trade secrets or any patents by this file or any part thereof. In no * event will the author be liable for any lost revenue or profits or * other special, indirect and consequential damages. */ /* this file handles the AI of the ghosts and the pacman. */ #include #include #include "pacman.h" #include "pacman_ai.h" #include "pacman_level.h" #define MI_DISPLAY(MI) ((MI)->dpy) #define MI_WINDOW(MI) ((MI)->window) #define MI_WIDTH(MI) ((MI)->xgwa.width) #define MI_HEIGHT(MI) ((MI)->xgwa.height) #define DIRVECS 4 static const struct { int dx, dy; } dirvecs[DIRVECS] = { { -1, 0}, { 0, 1}, { 1, 0}, { 0, -1}}; /* positions that match the dirvecs */ typedef enum {pos_none = -1, pos_left = 0, pos_up = 1, pos_right = 2, pos_down = 3} pos; /* fills array of DIRVECS size with possible directions, returns number of directions. 'posdirs' points to a possibly undefined array of four integers. The vector will contain booleans wether the direction is a possible direction or not. Reverse directions are deleted. */ static int ghost_get_posdirs (pacmangamestruct * pp, int *posdirs, ghoststruct * g) { unsigned int i, nrdirs = 0; unsigned int can_go_in = 0; /* bit of black magic here */ for (i = 0; i < DIRVECS; i++) { /* remove opposite */ if (g->lastbox != NOWHERE && i == (g->lastbox + 2) % DIRVECS && (g->aistate != goingout )) { posdirs[i] = 0; continue; } if (g->aistate == goingout && i == 1) { posdirs[i] = 0; continue; } /* check if possible direction */ can_go_in = (g->aistate == goingout || g->aistate == goingin); if ((posdirs[i] = pacman_check_pos (pp, g->row + dirvecs[i].dy, g->col + dirvecs[i].dx, can_go_in)) == True) { nrdirs++; } } return nrdirs; } /* Directs ghost to a random direction, exluding opposite (except in the impossible situation that there is only one valid direction). */ static void ghost_random (pacmangamestruct * pp, ghoststruct * g) { int posdirs[DIRVECS], nrdirs = 0, i, dir = 0; nrdirs = ghost_get_posdirs (pp, posdirs, g); #if 0 g->ndirs = nrdirs; #endif for (i = 0; i < DIRVECS; i++) if (posdirs[i] == True) dir = i; if (nrdirs == 0) dir = (g->lastbox + 2) % DIRVECS; else if (nrdirs > 1) for (i = 0; i < DIRVECS; i++) { if (posdirs[i] == True && NRAND (nrdirs) == 0) { dir = i; break; } } g->nextrow = g->row + dirvecs[dir].dy; g->nextcol = g->col + dirvecs[dir].dx; g->lastbox = dir; } /* Determines best direction to chase the pacman and goes that direction. */ static void ghost_chasing (pacmangamestruct * pp, ghoststruct * g) { int posdirs[DIRVECS], nrdirs = 0, i, dir = 0, highest = -100000, thisvecx, thisvecy, thisvec; nrdirs = ghost_get_posdirs (pp, posdirs, g); #if 0 g->ndirs = nrdirs; #endif for (i = 0; i < DIRVECS; i++) if (posdirs[i] == True) dir = i; if (nrdirs == 0) dir = (g->lastbox + 2) % DIRVECS; else if (nrdirs > 1) for (i = 0; i < DIRVECS; i++) { if (posdirs[i] == False) continue; thisvecx = (pp->pacman.col - g->col) * dirvecs[i].dx; thisvecy = (pp->pacman.row - g->row) * dirvecs[i].dy; thisvec = thisvecx + thisvecy; if (thisvec >= highest) { dir = i; highest = thisvec; } } g->nextrow = g->row + dirvecs[dir].dy; g->nextcol = g->col + dirvecs[dir].dx; g->lastbox = dir; } /* Determines the best direction to go away from the pacman, and goes that direction. */ static void ghost_hiding (pacmangamestruct * pp, ghoststruct * g) { int posdirs[DIRVECS], nrdirs = 0, i, dir = 0, highest = -100000, thisvecx, thisvecy, thisvec; nrdirs = ghost_get_posdirs (pp, posdirs, g); #if 0 g->ndirs = nrdirs; #endif for (i = 0; i < DIRVECS; i++) if (posdirs[i] == True) dir = i; if (nrdirs == 0) dir = (g->lastbox + 2) % DIRVECS; else if (nrdirs > 1) for (i = 0; i < DIRVECS; i++) { if (posdirs[i] == False) continue; thisvecx = (g->col - pp->pacman.col) * dirvecs[i].dx; thisvecy = (g->row - pp->pacman.row) * dirvecs[i].dy; thisvec = thisvecx + thisvecy; if (thisvec >= highest) dir = i; } g->nextrow = g->row + dirvecs[dir].dy; g->nextcol = g->col + dirvecs[dir].dx; g->lastbox = dir; } #if 1 static void clear_trace(ghoststruct *g) { int i = 0; g->trace_idx = 0; while (i < GHOST_TRACE){ g->trace[i].vx = -1; g->trace[i++].vy = -1; } } static void save_position (ghoststruct *g, int x, int y) { int i = g->trace_idx; assert ( 0 <= i && i < GHOST_TRACE ); g->trace[i].vx = x; g->trace[i].vy = y; g->trace_idx++; } static int already_tried (ghoststruct *g, int x, int y) { int i = 0; if (! ( 0 <= g->trace_idx && g->trace_idx < GHOST_TRACE ) ){ fprintf(stderr, "FOUND TRACE ERROR. DUMPING TRACE.\n"); fprintf(stderr, "%d\n", g->trace_idx ); for ( i = 0; i < GHOST_TRACE; i++ ){ fprintf(stderr, "( %d, %d )\n", g->trace[i].vx, g->trace[i].vy ); } assert ( False ); } while (i < g->trace_idx){ if ( x == g->trace[i].vx && y == g->trace[i].vy ){ /* fprintf ( stderr, "Match FOUND (%d, %d)\n", x, y); */ return 1; } i++; } return 0; } #endif static void store_dir ( ghoststruct *g, pos ps ){ int i = g->home_count; assert ( 0 <= i && i < GHOST_TRACE ); g->way_home[i].vx = dirvecs[ps].dx; g->way_home[i].vy = dirvecs[ps].dy; g->home_count++; } static void clear_dir ( ghoststruct *g ){ int i = 0; g->home_count = 0; g->home_idx = 0; while (i < GHOST_TRACE){ g->way_home[i].vx = -1; g->way_home[i++].vy = -1; } } static int found_jail ( int col, int row ){ int cx, cy; pacman_get_jail_opening ( &cx, &cy ); cy += 1; if (row == cy && col == cx ) return 1; else return 0; } static int move_ghost ( pacmangamestruct * pp, int row, int col, pos ps, int *new_row, int *new_col){ int idx = (int)ps; int tr = row + dirvecs[idx].dx; int tc = col + dirvecs[idx].dy; if ( pacman_check_pos ( pp, tr, tc, True )){ *new_row = tr; *new_col = tc; return True; } else { return False; } } static int recur_back_track ( pacmangamestruct * pp, ghoststruct *g, int row, int col ){ int new_row, new_col; if ( already_tried ( g, col, row ) ) return False; if ( found_jail ( col, row ) ) return True; save_position ( g, col, row ); if ( move_ghost ( pp, row, col, pos_left, &new_row, &new_col )) if ( recur_back_track ( pp, g, new_row, new_col )){ store_dir ( g, pos_left ); return True; } if ( move_ghost ( pp, row, col, pos_up, &new_row, &new_col )) if ( recur_back_track ( pp, g, new_row, new_col )){ store_dir ( g, pos_up ); return True; } if ( move_ghost ( pp, row, col, pos_down, &new_row, &new_col )) if ( recur_back_track ( pp, g, new_row, new_col )){ store_dir ( g, pos_down ); return True; } if ( move_ghost ( pp, row, col, pos_right, &new_row, &new_col )) if ( recur_back_track ( pp, g, new_row, new_col )){ store_dir ( g, pos_right ); return True; } return False; } static void find_home ( pacmangamestruct *pp, ghoststruct *g ){ int i; int r,c; int cx, cy; ghoststruct *tmp_ghost; tmp_ghost = (ghoststruct*)malloc(sizeof ( ghoststruct )); if ( tmp_ghost == NULL ){ fprintf(stderr, "find_home : Could not allocate memory."); exit ( 1 ); } tmp_ghost = memmove(tmp_ghost, g, sizeof ( ghoststruct )); if ( tmp_ghost == NULL ){ fprintf(stderr, "find_home : Could not copy memory."); exit ( 1 ); } clear_trace ( tmp_ghost ); clear_dir ( tmp_ghost ); r = tmp_ghost->row; c = tmp_ghost->col; if ( ! recur_back_track ( pp, tmp_ghost, r, c ) ){ fprintf(stderr, "Could not find way home.#@$?\n"); pacman_get_jail_opening ( &cx, &cy); fprintf(stderr, "Jail was at (%d%d)\n", cx,cy); } for ( i = 0; i < GHOST_TRACE; i++ ){ g->way_home[i].vx = tmp_ghost->way_home[i].vx; g->way_home[i].vy = tmp_ghost->way_home[i].vy; } g->home_count = tmp_ghost->home_count; g->home_idx = tmp_ghost->home_count; free(tmp_ghost); } /* Make the ghost go back to the inbox */ static void ghost_goingin (pacmangamestruct * pp, ghoststruct * g) { g->home_idx--; if (g->home_idx < 0){ g->aistate = goingout; return;} /* row == vx ? wtf... Don't Ask */ g->nextrow = g->row + g->way_home[g->home_idx].vx; g->nextcol = g->col + g->way_home[g->home_idx].vy; } /* Determines a vector from the pacman position, towards all dots. The vector is inversely proportional to the square of the distance of each dot. (so, close dots attract more than far away dots). */ static void pac_dot_vec (pacmangamestruct * pp, pacmanstruct * p, long *vx, long *vy) { int x, y, bx = 0, by = 0, ex = LEVWIDTH, ey = LEVHEIGHT; long dx, dy, dist, top = 0; #if 0 int rnr = NRAND (50); /* determine begin and end vectors */ switch (rnr) { case 0: ex = LEVHEIGHT / 2; break; case 1: bx = LEVHEIGHT / 2; break; case 2: ey = LEVHEIGHT / 2; break; case 3: by = LEVHEIGHT / 2; break; } #endif *vx = *vy = 0; for (y = by; y < ey; y++) for (x = bx; x < ex; x++) 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; if (dist > top) top = dist; *vx += (dx * ((long) LEVWIDTH * (long) LEVHEIGHT)) / dist; *vy += (dy * ((long) LEVWIDTH * (long) LEVHEIGHT)) / dist; } } /* Determine a vector towards the closest ghost (in one loop, so we spare a couple of cycles which we can spoil somewhere else just as fast). */ static int pac_ghost_prox_and_vector (pacmangamestruct * pp, pacmanstruct * p, int *vx, int *vy) { int dx, dy, dist, closest = 100000; unsigned int g; if (vx != NULL) *vx = *vy = 0; for (g = 0; g < pp->nghosts; g++) { if (pp->ghosts[g].dead == True || pp->ghosts[g].aistate == inbox || pp->ghosts[g].aistate == goingout) continue; dx = pp->ghosts[g].col + /*dirvecs[pp->ghosts[g].lastbox].dx */ - p->col; dy = pp->ghosts[g].row + /*dirvecs[pp->ghosts[g].lastbox].dy */ - p->row; dist = dx * dx + dy * dy; if (dist < closest) { closest = dist; if (vx != NULL) { *vx = dx; *vy = dy; } } } return closest; } /* fills array of DIRVECS size with possible directions, returns number of directions. posdirs should point to an array of 4 integers. */ static int pac_get_posdirs (pacmangamestruct * pp, pacmanstruct * p, int *posdirs) { int nrdirs = 0; unsigned int i; for (i = 0; i < DIRVECS; i++) { /* if we just ate, or we are in a statechange, it is allowed * to go the opposite direction */ if (p->justate == 0 && p->state_change == 0 && p->lastbox != NOWHERE && i == (p->lastbox + 2) % DIRVECS) { posdirs[i] = 0; } else if ((posdirs[i] = pacman_check_pos (pp, p->row + dirvecs[i].dy, p->col + dirvecs[i].dx, 0)) == 1) nrdirs++; } p->state_change = 0; return nrdirs; } /* Clears the trace of vectors. */ void pacman_clear_trace (pacmanstruct * p) { int i; for (i = 0; i < TRACEVECS; i++) { p->trace[i].vx = NOWHERE; p->trace[i].vy = NOWHERE; } p->cur_trace = 0; } /* Adds a new vector to the trace. */ static void pac_save_trace (pacmanstruct * p, const int vx, const int vy) { if (!(vx == NOWHERE && vy == NOWHERE)) { p->trace[p->cur_trace].vx = vx; p->trace[p->cur_trace].vy = vy; p->cur_trace = (p->cur_trace + 1) % TRACEVECS; } } /* Check if a vector can be found in the trace. */ static int pac_check_trace (const pacmanstruct * p, const int vx, const int vy) { int i, curel; for (i = 1; i < TRACEVECS; i++) { curel = (p->cur_trace - i + TRACEVECS) % TRACEVECS; if (p->trace[curel].vx == NOWHERE && p->trace[curel].vy == NOWHERE) continue; if (p->trace[curel].vx == vx && p->trace[curel].vy == vy) return 1; } return 0; } /* AI mode "Eating" for pacman. Tries to eat as many dots as possible, goes to "hiding" if too close to a ghost. If in state "hiding" the vectors of the ghosts are also taken into account (thus not running towards them is the general idea). */ static void pac_eating (pacmangamestruct * pp, pacmanstruct * p) { int posdirs[DIRVECS], nrdirs, i, highest = -(1 << 16), score, dir = 0, dotfound = 0, prox, worst = 0; int vx, vy; if ((prox = pac_ghost_prox_and_vector (pp, p, &vx, &vy)) < 4 * 4 && p->aistate == ps_eating) { p->aistate = ps_hiding; p->state_change = 1; pacman_clear_trace (p); } if (prox > 6 * 6 && p->aistate == ps_hiding) { p->aistate = ps_eating; if (p->justate == 0) p->state_change = 1; pacman_clear_trace (p); } if (prox < 3 * 3) p->state_change = 1; nrdirs = pac_get_posdirs (pp, p, posdirs); /* remove directions which lead to ghosts */ if (p->aistate == ps_hiding) { for (i = 0; i < DIRVECS; i++) { if (posdirs[i] == 0) continue; score = vx * dirvecs[i].dx + vy * dirvecs[i].dy; if (score > highest) { worst = i; highest = score; } dir = i; } nrdirs--; posdirs[worst] = 0; highest = -(1 << 16); } /* get last possible direction if all else fails */ for (i = 0; i < DIRVECS; i++) if (posdirs[i] != 0) dir = i; { long lvx = vx; long lvy = vy; pac_dot_vec (pp, p, &lvx, &lvy); vx = lvx; vy = lvy; } if (vx != NOWHERE && vy != NOWHERE && pac_check_trace (p, vx, vy) > 0) { p->roundscore++; if (p->roundscore >= 12) { p->roundscore = 0; p->aistate = ps_random; pacman_clear_trace (p); } } else p->roundscore = 0; if (p->justate == 0) pac_save_trace (p, vx, vy); for (i = 0; i < DIRVECS; i++) { if (posdirs[i] == 0) continue; score = dirvecs[i].dx * vx + dirvecs[i].dy * vy; if (pacman_check_dot (pp, p->col + dirvecs[i].dx, p->row + dirvecs[i].dy) == 1) { if (dotfound == 0) { highest = score; dir = i; dotfound = 1; } else if (score > highest) { highest = score; dir = i; } } else if (score > highest && dotfound == 0) { dir = i; highest = score; } } p->nextrow = p->row + dirvecs[dir].dy; p->nextcol = p->col + dirvecs[dir].dx; p->lastbox = dir; } #if 1 /* Tries to catch the ghosts. */ static void pac_chasing (pacmangamestruct * pp, pacmanstruct * p) { int posdirs[DIRVECS], nrdirs, i, highest = -(1 << 16), score, dir = 0, worst = 0; int vx = 0, vy = 0; nrdirs = pac_get_posdirs (pp, p, posdirs); /* keep directions which lead to ghosts */ for (i = 0; i < DIRVECS; i++) { if (posdirs[i] == 0) continue; score = vx * dirvecs[i].dx + vy * dirvecs[i].dy; if (score < highest) { worst = i; highest = score; } dir = i; } nrdirs--; posdirs[worst] = 0; /* get last possible direction if all else fails */ for (i = 0; i < DIRVECS; i++) if (posdirs[i] != 0) dir = i; { long lvx = vx; long lvy = vy; pac_dot_vec (pp, p, &lvx, &lvy); vx = lvx; vy = lvy; } if (vx != NOWHERE && vy != NOWHERE && pac_check_trace (p, vx, vy) > 0) { p->roundscore++; if (p->roundscore >= 12) { p->roundscore = 0; p->aistate = ps_random; pacman_clear_trace (p); } } else p->roundscore = 0; p->nextrow = p->row + dirvecs[dir].dy; p->nextcol = p->col + dirvecs[dir].dx; p->lastbox = dir; } #endif /* Goes completely random, but not in the opposite direction. Used when a loop is detected. */ static void pac_random (pacmangamestruct * pp, pacmanstruct * p) { int posdirs[DIRVECS], nrdirs, i, dir = -1, lastdir = 0; if (pac_ghost_prox_and_vector (pp, p, NULL, NULL) < 5 * 5) { p->aistate = ps_hiding; p->state_change = 1; } if (NRAND (20) == 0) { p->aistate = ps_eating; p->state_change = 1; pacman_clear_trace (p); } nrdirs = pac_get_posdirs (pp, p, posdirs); for (i = 0; i < DIRVECS; i++) { if (posdirs[i] == 0) continue; lastdir = i; 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; pacman_clear_trace (p); break; } else if (NRAND (nrdirs) == 0) dir = i; } if (dir == -1) dir = lastdir; p->nextrow = p->row + dirvecs[dir].dy; p->nextcol = p->col + dirvecs[dir].dx; p->lastbox = dir; } static int pac_get_vector_screen (pacmangamestruct * pp, pacmanstruct * p, const int x, const int y, int *vx, int *vy) { int lx, ly; lx = (x - pp->xb) / pp->xs; ly = (y - pp->yb) / pp->ys; if (lx < 0) lx = 0; else if ((unsigned int) lx > LEVWIDTH) lx = LEVWIDTH - 1; if (ly < 0) ly = 0; else if ((unsigned int) ly > LEVHEIGHT) ly = LEVHEIGHT - 1; *vx = lx - p->col; *vy = ly - p->row; if (lx == p->oldlx && ly == p->oldly) return 0; p->oldlx = lx; p->oldly = ly; return 1; } static int pac_trackmouse (ModeInfo * mi, pacmangamestruct * pp, pacmanstruct * p) { int dx, dy, cx, cy, vx, vy; unsigned int m; int posdirs[DIRVECS], i, dir = -1, highest = -(2 << 16), score; Window r, c; (void) XQueryPointer (MI_DISPLAY (mi), MI_WINDOW (mi), &r, &c, &dx, &dy, &cx, &cy, &m); if (cx <= 0 || cy <= 0 || cx >= MI_WIDTH (mi) - 1 || cy >= MI_HEIGHT (mi) - 1) return 0; /* get vector */ p->state_change = pac_get_vector_screen (pp, p, cx, cy, &vx, &vy); (void) pac_get_posdirs (pp, p, posdirs); for (i = 0; i < DIRVECS; i++) { if (posdirs[i] == 0) continue; score = dirvecs[i].dx * vx + dirvecs[i].dy * vy; if (score > highest) { highest = score; dir = i; } } p->nextrow = p->row + dirvecs[dir].dy; p->nextcol = p->col + dirvecs[dir].dx; p->lastbox = dir; return 1; } /* Calls correct state function, and changes between states. */ void pacman_ghost_update (pacmangamestruct * pp, ghoststruct * g) { if (!(g->nextrow == NOWHERE && g->nextcol == NOWHERE)) { g->row = g->nextrow; g->col = g->nextcol; } if ((g->aistate == randdir || g->aistate == chasing) && NRAND (10) == 0) { switch (NRAND (3)) { case 0: g->aistate = randdir; break; case 1: g->aistate = chasing; break; case 2: g->aistate = chasing; break; } } else if (g->aistate == inbox) { if (g->timeleft < 0) g->aistate = goingout; else g->timeleft--; } else if (g->aistate == goingout) { if (g->col < LEVWIDTH / 2 - JAILWIDTH / 2 || g->col > LEVWIDTH / 2 + JAILWIDTH / 2 || g->row < LEVHEIGHT / 2 - JAILHEIGHT / 2 || g->row > LEVHEIGHT / 2 + JAILHEIGHT / 2) g->aistate = randdir; } switch (g->aistate) { case inbox: case goingout: case randdir: ghost_random (pp, g); break; case chasing: ghost_chasing (pp, g); break; case hiding: ghost_hiding (pp, g); break; case goingin: if ( g->wait_pos ){ find_home(pp, g); g->wait_pos = False; } ghost_goingin (pp, g); break; } g->cfactor = GETFACTOR (g->nextcol, g->col); g->rfactor = GETFACTOR (g->nextrow, g->row); } /* Calls correct pacman state function. */ void pacman_update (ModeInfo * mi, pacmangamestruct * pp, pacmanstruct * p) { if (!(p->nextrow == NOWHERE && p->nextcol == NOWHERE)) { p->row = p->nextrow; p->col = p->nextcol; } if (pp->level[p->row * LEVWIDTH + p->col] == '.' || pp->level[p->row * LEVWIDTH + p->col] == 'o') { pp->level[p->row * LEVWIDTH + p->col] = ' '; if (!pacman_trackmouse) p->justate = 1; pp->dotsleft--; } else if (!pacman_trackmouse) { p->justate = 0; } if (!(pacman_trackmouse && pac_trackmouse (mi, pp, p))) { /* update pacman */ switch (p->aistate) { case ps_eating: pac_eating (pp, p); break; case ps_hiding: pac_eating (pp, p); break; case ps_random: pac_random (pp, p); break; case ps_chasing: pac_chasing (pp, p); break; case ps_dieing: break; /* Don't move */ } } p->cfactor = GETFACTOR (p->nextcol, p->col); p->rfactor = GETFACTOR (p->nextrow, p->row); } xscreensaver-5.36/hacks/pacman_level.c000644 000767 000024 00000055722 12701612217 020033 0ustar00jwzstaff000000 000000 /* -*- Mode: C; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ /*- * Copyright (c) 2002 by Edwin de Jong . * * Permission to use, copy, modify, and distribute this software and its * documentation for any purpose and without fee is hereby granted, * provided that the above copyright notice appear in all copies and that * both that copyright notice and this permission notice appear in * supporting documentation. * * This file is provided AS IS with no warranties of any kind. The author * shall have no liability with respect to the infringement of copyrights, * trade secrets or any patents by this file or any part thereof. In no * event will the author be liable for any lost revenue or profits or * other special, indirect and consequential damages. */ #include #include "pacman.h" #include "pacman_level.h" #define NONE 0x0000 #define LT 0x1000 #define RT 0x0001 #define RB 0x0010 #define LB 0x0100 #define ALL 0x1111 #define BLOCK_EMPTY ' ' #define BLOCK_DOT_1 '`' #define BLOCK_DOT_2 '.' #define BLOCK_WALL '#' #define BLOCK_GHOST_ONLY '=' #define BLOCK_WALL_TL '\'' #define BLOCK_WALL_TR '`' #define BLOCK_WALL_BR ',' #define BLOCK_WALL_BL '_' #define BLOCK_WALL_HO '-' #define BLOCK_WALL_VE '|' #define BLOCK_DOT_BONUS 'o' /* This is more or less the standard pacman level (without the left-right tunnel. */ static const lev_t stdlevel = { "########################################", "########################################", "#######````````````##````````````#######", "#######`####`#####`##`#####`####`#######", "#######`####`#####`##`#####`####`#######", "#######`####`#####`##`#####`####`#######", "#######``````````````````````````#######", "#######`####`##`########`##`####`#######", "#######`####`##`########`##`####`#######", "#######``````##````##````##``````#######", "############`#####`##`#####`############", "############`#####`##`#####`############", "############`##``````````##`############", "############`##`###==###`##`############", "############`##`########`##`############", "############````########````############", "############`##`########`##`############", "############`##`########`##`############", "############`##``````````##`############", "############`##`########`##`############", "############`##`########`##`############", "#######````````````##````````````#######", "#######`####`#####`##`#####`####`#######", "#######`####`#####`##`#####`####`#######", "#######```##````````````````##```#######", "#########`##`##`########`##`##`#########", "#########`##`##`########`##`##`#########", "#######``````##````##````##``````#######", "#######`##########`##`##########`#######", "#######`##########`##`##########`#######", "#######``````````````````````````#######", "########################################" }; #define TILES_COUNT 11U #define GO_UP 0x0001U #define GO_LEFT 0x0002U #define GO_RIGHT 0x0004U #define GO_DOWN 0x0008U static const struct tiles def_tiles[TILES_COUNT] = { /* * ' ' == dont care == BLOCK_EMPTY * '#' == set wall, and not clear == BLOCK_WALL * '`' == clear == BLOCK_DOT_1 * middle position is always set as cleardef */ { " # " " # " " ``` " " # " " # ", { GO_LEFT, GO_RIGHT, 0, 0}, 2, (unsigned) (1 << 0 | 1 << 6 | 1 << 8 | 1 << 10)}, { " " " ` " "##`##" " ` " " ", { GO_UP, GO_DOWN, 0, 0}, 2, (unsigned) (1 << 1 | 1 << 7 | 1 << 9 | 1 << 10)}, { " ##" "##`##" "##`` " "#### " "#### ", { GO_UP, GO_RIGHT, 0, 0}, 2, (unsigned) (1 << 2 | 1 << 6 | 1 << 7 | 1 << 10)}, { "#### " "#### " "##`` " "##`##" " ##", { GO_RIGHT, GO_DOWN, 0, 0}, 2, (unsigned) (1 << 3 | 1 << 7 | 1 << 8 | 1 << 10)}, { " ###" " ###" " ``##" "##` " "## ", { GO_LEFT, GO_DOWN, 0, 0}, 2, (unsigned) (1 << 4 | 1 << 8 | 1 << 9 | 1 << 10)}, { "## " "##`##" " ``##" " ####" " ####", { GO_LEFT, GO_UP, 0, 0}, 2, (unsigned) (1 << 5 | 1 << 6 | 1 << 9 | 1 << 10)}, { "##`##" "##`##" "`````" " ### " " ### ", { GO_LEFT, GO_UP, GO_RIGHT, 0}, 3, (unsigned) 1 << 6}, { " `##" "##`##" "##```" "##`##" " `##", { GO_UP, GO_RIGHT, GO_DOWN, 0}, 3, (unsigned) (1 << 7)}, { " ### " " ### " "`````" "##`##" "##`##", { GO_LEFT, GO_RIGHT, GO_DOWN, 0}, 3, (unsigned) (1 << 8)}, { "##` " "##`##" "```##" "##`##" "##` ", { GO_UP, GO_DOWN, GO_LEFT, 0}, 3, (unsigned) (1 << 9)}, { "##`##" "##`##" "`````" "##`##" "##`##", { GO_UP, GO_DOWN, GO_LEFT, GO_RIGHT}, 4, (unsigned) (1 << 10)} }; /* probability array for each of the tiles */ #define MAXTILEPROB 22 static const unsigned tileprob[MAXTILEPROB] = { 0, 0, 0, 1, 1, 2, 3, 4, 5, 6, 6, 6, 7, 7, 8, 8, 8, 9, 9, 10, 10, 10 }; static int creatlevelblock (pacmangamestruct *pp, lev_t * level, const unsigned x, const unsigned y); enum { TOP_LEFT, TOP_RIGHT, BOTTOM_LEFT, BOTTOM_RIGHT }; /* Sets a block in the level to a certain state. */ static void setblockto (lev_t * level, const unsigned x, const unsigned y, const char c) { if (!(x < LEVWIDTH && y < LEVHEIGHT)) return; (*level)[y][x] = c; } /* check if a block is set */ static int checkset (lev_t * level, const unsigned x, const unsigned y) { if (!(x < LEVWIDTH && y < LEVHEIGHT) || (*level)[y][x] == BLOCK_WALL || (*level)[y][x] == BLOCK_GHOST_ONLY) return True; return False; } /* Check if a block is not set */ static int checksetout (lev_t * level, const unsigned x, const unsigned y) { if (!(x < LEVWIDTH && y < LEVHEIGHT) || checkset (level, x, y) != 0) return True; return False; } /* Check if a block cannot be set */ static int checkunsetdef (lev_t * level, const unsigned x, const unsigned y) { if (!(x < LEVWIDTH && y < LEVHEIGHT)) return False; if ((*level)[y][x] == BLOCK_DOT_1) return True; return False; } /* Initializes a level to empty state. */ static void clearlevel (lev_t * level) { unsigned x, y; for (y = 0; y < LEVHEIGHT; y++) for (x = 0; x < LEVWIDTH; x++) (*level)[y][x] = BLOCK_EMPTY; } /* Changes a level from the level creation structure ((array to array) to array. */ static void copylevel (char *dest, lev_t * level) { unsigned x, y; for (y = 0; y < LEVHEIGHT; y++) for (x = 0; x < LEVWIDTH; x++) dest[y * LEVWIDTH + x] = (*level)[y][x]; } /* Creates a jail to work around, so we can finish it later. */ static void createjail (lev_t * level, const unsigned width, const unsigned height) { unsigned x, y, xstart, xend, ystart, yend; if (LEVWIDTH < width || LEVHEIGHT < height) return; xstart = LEVWIDTH / 2 - width / 2; xend = LEVWIDTH / 2 + width / 2; ystart = LEVHEIGHT / 2 - height / 2; yend = LEVHEIGHT / 2 + height / 2; for (y = ystart - 1; y < yend + 1; y++) for (x = xstart - 1; x < xend + 1; x++) setblockto (level, x, y, BLOCK_DOT_1); for (y = ystart; y < yend; y++) for (x = xstart; x < xend; x++) setblockto (level, x, y, BLOCK_WALL); } void pacman_get_jail_opening ( int *x, int *y) { int xstart = LEVWIDTH / 2 - JAILWIDTH / 2; int ystart = LEVHEIGHT / 2 - JAILHEIGHT / 2; *x = xstart + JAILWIDTH / 2; *y = ystart; } /* Finishes a jail so it is empty and the ghostpass is on top. */ static void finishjail (lev_t * level, const unsigned width, const unsigned height) { unsigned x, y, xstart, xend, ystart, yend; xstart = LEVWIDTH / 2 - width / 2; xend = LEVWIDTH / 2 + width / 2; ystart = LEVHEIGHT / 2 - height / 2; yend = LEVHEIGHT / 2 + height / 2; for (y = ystart + 1; y < yend - 1; y++) for (x = xstart + 1; x < xend - 1; x++) setblockto (level, x, y, BLOCK_EMPTY); for (x = xstart - 1; x < xend + 1; x++) { setblockto (level, x, ystart - 1, BLOCK_EMPTY); setblockto (level, x, yend, BLOCK_EMPTY); } for (y = ystart - 1; y < yend + 1; y++) { setblockto (level, xstart - 1, y, BLOCK_EMPTY); setblockto (level, xend, y, BLOCK_EMPTY); } setblockto (level, xstart + width / 2 - 1, ystart, BLOCK_GHOST_ONLY); setblockto (level, xstart + width / 2, ystart, BLOCK_GHOST_ONLY); } /* Tries to set a block at a certain position. Returns true if possible, and leaves level in new state (plus block), or False if not possible, and leaves level in unpredictable state. */ static int tryset (lev_t * level, const unsigned xpos, const unsigned ypos, const char *block) { register unsigned x, y; register char locchar; int xstart, ystart; unsigned xend, yend; if ((*level)[ypos][xpos] == BLOCK_DOT_1) return False; xstart = xpos - 2; ystart = ypos - 2; for (y = 0; y < TILEHEIGHT; y++) for (x = 0; x < TILEWIDTH; x++) { locchar = block[y * TILEWIDTH + x]; if (locchar == BLOCK_EMPTY) continue; if (locchar == BLOCK_DOT_1 && (xstart + x < 1 || xstart + x >= LEVWIDTH - 1 || ystart + y < 1 || ystart + y >= LEVHEIGHT - 1 || checkset (level, xstart + x, ystart + y) != 0)) return False; else if (locchar == BLOCK_WALL && (xstart + x > 1 && xstart + x < LEVWIDTH && ystart + y > 1 && ystart + y < LEVHEIGHT - 1) && checkunsetdef (level, (unsigned) (xstart + x), (unsigned) (ystart + y)) != 0) return False; } /* and set the block in place */ xend = (xstart + TILEWIDTH < LEVWIDTH - 1) ? TILEWIDTH : LEVWIDTH - xstart - 2; yend = (ystart + TILEHEIGHT < LEVHEIGHT - 1) ? TILEHEIGHT : LEVHEIGHT - ystart - 2; for (y = (ystart < 1) ? (unsigned) (1 - ystart) : 0U; y < yend; y++) for (x = (xstart < 1) ? (unsigned) (1 - xstart) : 0U; x < xend; x++) { locchar = block[y * TILEWIDTH + x]; if ((locchar == BLOCK_WALL) && ((*level)[ystart + y][xstart + x] == BLOCK_EMPTY)) { (*level)[ystart + y][xstart + x] = BLOCK_WALL; (*level)[ystart + y] [LEVWIDTH - (xstart + x + 1)] = BLOCK_WALL; } } (*level)[ypos][xpos] = BLOCK_DOT_1; (*level)[ypos][LEVWIDTH - xpos - 1] = BLOCK_DOT_1; return True; } /* Tries certain combinations of blocks in the level recursively. */ static unsigned nextstep (pacmangamestruct *pp, lev_t * level, const unsigned x, const unsigned y, unsigned dirvec[], unsigned ndirs) { unsigned dirpos, curdir, inc = 0; int ret = 0; while (ndirs > 0) { ndirs--; if (ndirs == 0) { curdir = dirvec[0]; } else { dirpos = NRAND (ndirs); curdir = dirvec[dirpos]; /* nope, no bufoverflow, but ndirs - 1 + 1 */ dirvec[dirpos] = dirvec[ndirs]; dirvec[ndirs] = curdir; } switch (curdir) { case GO_UP: if (y < 1 || (ret = creatlevelblock (pp, level, x, y - 1)) == 0) return 0; break; case GO_RIGHT: if (x > LEVWIDTH - 2 || (ret = creatlevelblock (pp, level, x + 1, y)) == 0) return 0; break; case GO_DOWN: if (y > LEVHEIGHT - 2 || (ret = creatlevelblock (pp, level, x, y + 1)) == 0) return 0; break; case GO_LEFT: if (x < 1 || (ret = creatlevelblock (pp, level, x - 1, y)) == 0) return 0; } if (ret != -1) inc += (unsigned) ret; } if (inc == 0) inc = 1; return inc; } static int creatlevelblock (pacmangamestruct *pp, lev_t * level, const unsigned x, const unsigned y) { unsigned tried = GETNB (TILES_COUNT); unsigned tilenr; unsigned ret; lev_t savedlev; if (!pp->tiles) { pp->tiles = (struct tiles *) malloc (sizeof (def_tiles)); memcpy (pp->tiles, def_tiles, sizeof (def_tiles)); } if (!((x < LEVWIDTH) && (y < LEVHEIGHT))) return 0; if (checkunsetdef (level, x, y) != 0) return -1; if (x == 0) tried &= ~(1 << 0); else if (x == 1) tried &= ~(1 << 4 | 1 << 5 | 1 << 6 | 1 << 8 | 1 << 9 | 1 << 10); else if (x == LEVWIDTH - 1) tried &= ~(1 << 0); else if (x == LEVWIDTH - 2) tried &= ~(1 << 2 | 1 << 3 | 1 << 6 | 1 << 7 | 1 << 8 | 1 << 10); if (y == 1) tried &= ~(1 << 2 | 1 << 5 | 1 << 6 | 1 << 7 | 1 << 9 | 1 << 10); else if (y == 0) tried &= ~(1 << 1); else if (y == LEVHEIGHT - 1) tried &= ~(1 << 1); else if (y == LEVHEIGHT - 2) tried &= ~(1 << 3 | 1 << 4 | 1 << 7 | 1 << 8 | 1 << 9 | 1 << 10); /* make a copy of the current level, so we can go back on the stack */ (void) memcpy (&savedlev, level, sizeof (lev_t)); /* while there are still some blocks left to try */ while (tried != 0x00) { tilenr = tileprob[NRAND (MAXTILEPROB)]; if (!TESTNB (tried, tilenr)) continue; if (tryset (level, x, y, pp->tiles[tilenr].block) != 0) { if ((ret = nextstep (pp, level, x, y, pp->tiles[tilenr].dirvec, pp->tiles[tilenr].ndirs)) != 0) { return ret + 1; } (void) memcpy (level, &savedlev, sizeof (lev_t)); } tried &= ~(pp->tiles[tilenr].simular_to); } return 0; } /* Fills up all empty space so there is wall everywhere. */ static void filllevel (lev_t * level) { unsigned x, y; for (y = 0; y < LEVHEIGHT; y++) for (x = 0; x < LEVWIDTH; x++) if ((*level)[y][x] == BLOCK_EMPTY) (*level)[y][x] = BLOCK_WALL; } /* Check to see if the x and y value are in the corners. * we could probable compute these values once and avoid * go through the loops every time. */ static void top_left (lev_t * level, unsigned int *passed_x, unsigned int *passed_y) { int x, y; for (y = 0; y < LEVHEIGHT; y++) for (x = 0; x < LEVWIDTH; x++) { if (checkset (level, x, y) == 0) { *passed_x = x; *passed_y = y; return; } } } static void bottom_left (lev_t * level, unsigned int *passed_x, unsigned int *passed_y) { int x, y; for (y = LEVHEIGHT; y > -1; y--) for (x = 0; x < LEVWIDTH; x++) { if (checkset (level, x, y) == 0) { *passed_x = x; *passed_y = y; return; } } } static void top_right (lev_t * level, unsigned int *passed_x, unsigned int *passed_y) { int x, y; for (y = 0; y < LEVHEIGHT; y++) for (x = LEVWIDTH; x >= 0; x--) { if (checkset (level, x, y) == 0) { *passed_x = x; *passed_y = y; return; } } } static void bottom_right (lev_t * level, unsigned int *passed_x, unsigned int *passed_y) { int x, y; for (y = LEVHEIGHT; y >= 0; y--) for (x = LEVWIDTH; x >= 0; x--) { if (checkset (level, x, y) == 0) { *passed_x = x; *passed_y = y; return; } } } static void init_bonus_dots (pacmangamestruct *pp, lev_t * level) { unsigned int x = 0, y = 0; top_left (level, &x, &y); pp->bonus_dots[TOP_LEFT].x = x; pp->bonus_dots[TOP_LEFT].y = y; pp->bonus_dots[TOP_LEFT].eaten = False; top_right (level, &x, &y); pp->bonus_dots[TOP_RIGHT].x = x; pp->bonus_dots[TOP_RIGHT].y = y; pp->bonus_dots[TOP_RIGHT].eaten = False; bottom_left (level, &x, &y); pp->bonus_dots[BOTTOM_LEFT].x = x; pp->bonus_dots[BOTTOM_LEFT].y = y; pp->bonus_dots[BOTTOM_LEFT].eaten = False; bottom_right (level, &x, &y); pp->bonus_dots[BOTTOM_RIGHT].x = x; pp->bonus_dots[BOTTOM_RIGHT].y = y; pp->bonus_dots[BOTTOM_RIGHT].eaten = False; } int pacman_is_bonus_dot (pacmangamestruct *pp, int x, int y, int *idx) { int ret = False; int i; for (i = 0; i < NUM_BONUS_DOTS; i++) { /* fprintf(stderr,"is bonus: passed x (%d, %d) bonus (%d, %d)\n",x,y,bonus_dots[i].x, bonus_dots[i].y); */ if (x == pp->bonus_dots[i].x && y == pp->bonus_dots[i].y) { ret = True; *idx = i; break; } } return ret; } static void check_bonus_idx (int idx) { assert (0 <= idx && idx < NUM_BONUS_DOTS); } int pacman_bonus_dot_eaten (pacmangamestruct *pp, int idx) { check_bonus_idx (idx); return pp->bonus_dots[idx].eaten; } void pacman_eat_bonus_dot (pacmangamestruct *pp, int idx) { check_bonus_idx (idx); pp->bonus_dots[idx].eaten = True; } void pacman_bonus_dot_pos (pacmangamestruct *pp, int idx, int *x, int *y) { check_bonus_idx (idx); *x = pp->bonus_dots[idx].x; *y = pp->bonus_dots[idx].y; } /* Changes a level from a simple wall/nowall to a wall with rounded corners and such. Stupid algorithm, could be done better! */ static void frmtlevel (pacmangamestruct *pp, lev_t * level) { lev_t frmtlev; int x, y; int idx; register unsigned poscond; register unsigned poscond2; clearlevel (&frmtlev); init_bonus_dots (pp, level); for (y = 0; y < LEVHEIGHT; y++) for (x = 0; x < LEVWIDTH; x++) { if (checkset (level, x, y) == 0) { if (pacman_is_bonus_dot (pp, x, y, &idx)) { frmtlev[y][x] = BLOCK_DOT_BONUS; } else { frmtlev[y][x] = BLOCK_DOT_2; } continue; } if ((*level)[y][x] == BLOCK_GHOST_ONLY) { frmtlev[y][x] = BLOCK_GHOST_ONLY; continue; } poscond = (checksetout (level, x - 1, y - 1) != 0 ? 0x01U : 0U) | (checksetout (level, x + 1, y - 1) != 0 ? 0x02U : 0U) | (checksetout (level, x + 1, y + 1) != 0 ? 0x04U : 0U) | (checksetout (level, x - 1, y + 1) != 0 ? 0x08U : 0U); poscond2 = (checksetout (level, x - 1, y) != 0 ? 0x01U : 0) | (checksetout (level, x, y - 1) != 0 ? 0x02U : 0) | (checksetout (level, x + 1, y) != 0 ? 0x04U : 0) | (checksetout (level, x, y + 1) != 0 ? 0x08U : 0); switch (poscond) { /* completely filled */ case 0x01U | 0x02U | 0x04U | 0x08U: frmtlev[y][x] = BLOCK_EMPTY; continue; /* left to top corner */ case 0x01U: frmtlev[y][x] = BLOCK_WALL_TL; continue; /* top to right corner */ case 0x02U: frmtlev[y][x] = BLOCK_WALL_TR; continue; /* right to bottom corner */ case 0x04U: frmtlev[y][x] = BLOCK_WALL_BR; continue; /* bottom to left corner */ case 0x08U: frmtlev[y][x] = BLOCK_WALL_BL; continue; } switch (poscond2) { case 0x01U | 0x04U: case 0x01U | 0x04U | 0x08U: case 0x01U | 0x04U | 0x02U: frmtlev[y][x] = BLOCK_WALL_HO; continue; case 0x02U | 0x08U: case 0x02U | 0x08U | 0x01U: case 0x02U | 0x08U | 0x04U: frmtlev[y][x] = BLOCK_WALL_VE; continue; case 0x01U | 0x02U: frmtlev[y][x] = BLOCK_WALL_TL; continue; case 0x02U | 0x04U: frmtlev[y][x] = BLOCK_WALL_TR; continue; case 0x04U | 0x08U: frmtlev[y][x] = BLOCK_WALL_BR; continue; case 0x08U | 0x01U: frmtlev[y][x] = BLOCK_WALL_BL; continue; } switch (poscond) { case 0x02U | 0x04U | 0x08U: frmtlev[y][x] = BLOCK_WALL_TL; continue; case 0x01U | 0x04U | 0x08U: frmtlev[y][x] = BLOCK_WALL_TR; continue; case 0x01U | 0x02U | 0x08U: frmtlev[y][x] = BLOCK_WALL_BR; continue; case 0x01U | 0x02U | 0x04U: frmtlev[y][x] = BLOCK_WALL_BL; continue; } frmtlev[y][x] = BLOCK_EMPTY; } (void) memcpy ((lev_t *) level, (lev_t *) & frmtlev, sizeof (lev_t)); } /* Counts the number of dots in the level, and returns that number. */ static unsigned countdots (pacmangamestruct *pp) { unsigned i, count = 0; for (i = 0; i < LEVWIDTH * LEVHEIGHT; i++) if (pp->level[i] == BLOCK_DOT_2 || pp->level[i] == BLOCK_DOT_BONUS) count++; return count; } /* Creates a new level, and places that in the pacmangamestruct. */ int pacman_createnewlevel (pacmangamestruct *pp) { lev_t *level; unsigned dirvec[1] = { GO_UP }; unsigned ret = 0, i = 0; if ((level = (lev_t *) calloc (1, sizeof (lev_t))) == NULL) return i; if (NRAND (2) == 0) { do { clearlevel (level); createjail (level, JAILWIDTH, JAILHEIGHT); if ((ret = nextstep (pp, level, LEVWIDTH / 2 - 1, LEVHEIGHT / 2 - JAILHEIGHT / 2 - 3, dirvec, 1)) == 0) { (void) free ((void *) level); return i; } } while (ret * 100 < (LEVWIDTH * LEVHEIGHT * MINDOTPERC)); filllevel (level); frmtlevel (pp, level); finishjail (level, JAILWIDTH, JAILHEIGHT); } else { (void) memcpy (level, stdlevel, sizeof (lev_t)); frmtlevel (pp, level); i = 1; } copylevel (pp->level, level); pp->dotsleft = countdots (pp); (void) free ((void *) level); return i; } /* Checks if a position is allowable for ghosts/pacs to enter. */ int 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) || (pp->level[y * LEVWIDTH + x] == BLOCK_DOT_BONUS) || ((pp->level[y * LEVWIDTH + x] == BLOCK_GHOST_ONLY) && ghostpass)) { return 1; } return 0; } /* Checks if there is a dot on the specified position in the level. */ int pacman_check_dot (pacmangamestruct * pp, unsigned int x, unsigned int y) { if (x >= LEVWIDTH || y >= LEVHEIGHT) return 0; if (pp->level[y * LEVWIDTH + x] == BLOCK_DOT_2) return 1; return 0; } xscreensaver-5.36/hacks/fuzzyflakes.c000644 000767 000024 00000041520 12717746350 017766 0ustar00jwzstaff000000 000000 /* fuzzyflakes, Copyright (c) 2004 * Barry Dmytro * * ! 2004.06.10 21:05 * ! - Added support for resizing * ! - Added a color scheme generation algorithm * ! Thanks to from #vegans@irc.blitzed.org * ! - Added random color generation * ! - Fixed errors in the xml config file * ! - Cleaned up a few inconsistencies in the code * ! - Changed the default color to #EFBEA5 * * ! 2004.05.?? ??:?? * ! -original creation * * 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. */ #include #include "screenhack.h" /* I have need of 1/3 and 2/3 constants later on */ #define N1_3 0.3333333333 #define N2_3 0.6666666666 typedef struct _flake_var { double Ticks; double XPos, YPos; double TrueX; double XOffset; double Angle; } FlakeVariable; /* Struct containing the atrributes to our flakes */ typedef struct _flake { Display *dpy; Window window; int Arms; int Thickness; int BorderThickness; int Radius; unsigned long BordColor; unsigned long ForeColor; unsigned long BackColor; Bool RandomColors; int Layers; int Density; int Delay; int FallingSpeed; struct _colors { char *Fore; char *Bord; char *Back; } Colors; /* a dynamic array containing positions of all the flakes */ FlakeVariable ***Flakes; XGCValues GCValues; unsigned long GCFlags; GC GCVar; XWindowAttributes XGWA; struct _dbevar { Bool dbuf; Pixmap b, ba, bb; } DB; } Flake; /* *This gets the pixel resource for a color: #ffffff */ static unsigned int FuzzyFlakesColorResource(Flake *flake, char *Color) { XColor color; if (!XParseColor(flake->dpy, flake->XGWA.colormap, Color, &color)) { fprintf(stderr, "%s: can't parse color %s", progname, Color); return 0; } if (!XAllocColor(flake->dpy, flake->XGWA.colormap, &color)) { fprintf(stderr, "%s: can't allocate color %s", progname, Color); return 0; } return color.pixel; } /* * This is a great color matching algorithm that I got from * a friend of mine on #vegans@irc.blitzed.org * She wrote it in PHP and I ported it over to C * her site is http://beautifulfreak.net/ */ static int FuzzyFlakesColorHelper(Flake *flake) { unsigned int iR, iG, iB; unsigned int iR0, iG0, iB0; unsigned int iR1, iG1, iB1; float fR, fG, fB; float Max = 0, Min = 0, Lig, Sat; float Hue, Hue0, Hue1; float f1, f2; float fR0, fG0, fB0; float fR1, fG1, fB1; float nR0, nG0, nB0; float nR1, nG1, nB1; XColor color; /* First convert from hex to dec */ /* while splitting up the RGB values */ if (!XParseColor(flake->dpy, flake->XGWA.colormap, flake->Colors.Back, &color)) { fprintf(stderr, "%s: can't parse color %s", progname, flake->Colors.Back); return 1; } iR = color.red >> 8; iG = color.green >> 8; iB = color.blue >> 8; /* Convert from int to float */ fR = iR; fG = iG; fB = iB; /* convert from 0-255 to 0-1 */ fR = fR / 255; fG = fG / 255; fB = fB / 255; /* work out the lightness */ if (fR >= fG && fR >= fB) Max = fR; if (fG >= fR && fG >= fB) Max = fG; if (fB >= fR && fB >= fG) Max = fB; if (fR <= fG && fR <= fB) Min = fR; if (fG <= fR && fG <= fB) Min = fG; if (fB <= fR && fB <= fG) Min = fB; Lig = (Max + Min) / 2; /* work out the saturation */ if (Max == Min) Sat = 0; else { if (Lig < 0.5) Sat = (Max - Min) / (Max + Min); else Sat = (Max - Min) / (2 - Max - Min); } /* * if our satration is too low we won't be * able to see any objects */ if (Sat < 0.03) { return 1; } /* work out the hue */ if (fR == Max) Hue = (fG - fB) / (Max - Min); else if (fG == Max) Hue = 2 + (fB - fR) / (Max - Min); else Hue = 4 + (fR - fG) / (Max - Min); Hue = Hue / 6; /* fine two equidistant hues */ Hue0 = Hue + N1_3; if (Hue0 > 1) Hue0 = Hue0 - 1; Hue1 = Hue0 + N1_3; if (Hue1 > 1) Hue1 = Hue1 - 1; /* convert the colors into hex codes */ if (Lig < 0.5) f2 = Lig * (1 + Sat); else f2 = (Lig + Sat) - (Lig * Sat); f1 = (2 * Lig) - f2; fR0 = (Hue0 + 1) / 3; fR1 = (Hue1 + 1) / 3; fG0 = Hue0; fG1 = Hue1; fB0 = (Hue0 - 1) / 3; fB1 = (Hue1 - 1) / 3; if (fR0 < 0) fR0 = fR0 + 1; if (fR0 > 1) fR0 = fR0 - 1; if (fG0 < 0) fG0 = fG0 + 1; if (fG0 > 1) fG0 = fG0 - 1; if (fB0 < 0) fB0 = fB0 + 1; if (fB0 > 1) fB0 = fB0 - 1; if (fR1 < 0) fR1 = fR1 + 1; if (fR1 > 1) fR1 = fR1 - 1; if (fG1 < 0) fG1 = fG1 + 1; if (fG1 > 1) fG1 = fG1 - 1; if (fB1 < 0) fB1 = fB1 + 1; if (fB1 > 1) fB1 = fB1 - 1; if (6 * fR0 < 1) nR0 = f1 + (f2 - f1) * 6 * fR0; else if (2 * fR0 < 1) nR0 = f2; else if (3 * fR0 < 2) nR0 = f1 + (f2 - f1) * (N2_3 - fR0) * 6; else nR0 = f1; if (6 * fG0 < 1) nG0 = f1 + (f2 - f1) * 6 * fG0; else if (2 * fG0 < 1) nG0 = f2; else if (3 * fG0 < 2) nG0 = f1 + (f2 - f1) * (N2_3 - fG0) * 6; else nG0 = f1; if (6 * fB0 < 1) nB0 = f1 + (f2 - f1) * 6 * fB0; else if (2 * fB0 < 1) nB0 = f2; else if (3 * fB0 < 2) nB0 = f1 + (f2 - f1) * (N2_3 - fB0) * 6; else nB0 = f1; if (6 * fR1 < 1) nR1 = f1 + (f2 - f1) * 6 * fR1; else if (2 * fR1 < 1) nR1 = f2; else if (3 * fR1 < 2) nR1 = f1 + (f2 - f1) * (N2_3 - fR1) * 6; else nR1 = f1; if (6 * fG1 < 1) nG1 = f1 + (f2 - f1) * 6 * fG1; else if (2 * fG1 < 1) nG1 = f2; else if (3 * fG1 < 2) nG1 = f1 + (f2 - f1) * (N2_3 - fG1) * 6; else nG1 = f1; if (6 * fB1 < 1) nB1 = f1 + (f2 - f1) * 6 * fB1; else if (2 * fB1 < 1) nB1 = f2; else if (3 * fB1 < 2) nB1 = f1 + (f2 - f1) * (N2_3 - fB1) * 6; else nB1 = f1; /* at last convert them to a hex string */ iR0 = nR0 * 255; iG0 = nG0 * 255; iB0 = nB0 * 255; iR1 = nR1 * 255; iG1 = nG1 * 255; iB1 = nB1 * 255; flake->Colors.Fore = malloc(sizeof(unsigned char) * 8); flake->Colors.Bord = malloc(sizeof(unsigned char) * 8); sprintf(flake->Colors.Fore, "#%02X%02X%02X", iR0, iG0, iB0); sprintf(flake->Colors.Bord, "#%02X%02X%02X", iR1, iG1, iB1); return 0; } static void FuzzyFlakesInit(Flake *flake) { int i, j; XWindowAttributes xgwa; XGetWindowAttributes(flake->dpy, flake->window, &xgwa); flake->XGWA = xgwa; flake->DB.b = flake->DB.ba = flake->DB.bb = 0; flake->DB.dbuf = get_boolean_resource(flake->dpy, "doubleBuffer", "Boolean"); # ifdef HAVE_JWXYZ /* Don't second-guess Quartz's double-buffering */ flake->DB.dbuf = False; # endif if (flake->DB.dbuf) { flake->DB.ba = XCreatePixmap(flake->dpy, flake->window, xgwa.width, xgwa.height, xgwa.depth); flake->DB.bb = XCreatePixmap(flake->dpy, flake->window, xgwa.width, xgwa.height, xgwa.depth); flake->DB.b = flake->DB.ba; } else { flake->DB.b = flake->window; } flake->Arms = get_integer_resource(flake->dpy, "arms", "Integer"); flake->Thickness = get_integer_resource(flake->dpy, "thickness", "Integer"); flake->BorderThickness = get_integer_resource(flake->dpy, "bthickness", "Integer"); flake->Radius = get_integer_resource(flake->dpy, "radius", "Integer"); flake->Density = get_integer_resource(flake->dpy, "density", "Integer"); flake->Layers = get_integer_resource(flake->dpy, "layers", "Integer"); flake->FallingSpeed = get_integer_resource(flake->dpy, "fallingspeed", "Integer"); flake->Delay = get_integer_resource(flake->dpy, "delay", "Integer"); if (flake->RandomColors == True) flake->RandomColors = get_boolean_resource(flake->dpy, "randomColors", "Boolean"); if (flake->Delay < 0) flake->Delay = 0; if (!flake->Colors.Back) { flake->Colors.Back = get_string_resource(flake->dpy, "color", "Color"); if (!FuzzyFlakesColorResource(flake, flake->Colors.Back)) { fprintf(stderr, " reverting to random\n"); flake->RandomColors = True; } if (flake->RandomColors) { if (flake->Colors.Back) free(flake->Colors.Back); flake->Colors.Back = malloc(sizeof(unsigned char) * 8); sprintf(flake->Colors.Back, "#%X%X%X%X%X%X", random() % 16, random() % 16, random() % 16, random() % 16, random() % 16, random() % 16); } /* * Here we establish our colormap based on what is in * flake->Colors.Back */ if (FuzzyFlakesColorHelper(flake)) { fprintf(stderr, " reverting to random\n"); if (flake->Colors.Back) free(flake->Colors.Back); flake->Colors.Back = malloc(sizeof(unsigned char) * 8); sprintf(flake->Colors.Back, "#%X%X%X%X%X%X", random() % 16, random() % 16, random() % 16, random() % 16, random() % 16, random() % 16); FuzzyFlakesColorHelper(flake); } flake->ForeColor = FuzzyFlakesColorResource(flake, flake->Colors.Fore); flake->BackColor = FuzzyFlakesColorResource(flake, flake->Colors.Back); flake->BordColor = FuzzyFlakesColorResource(flake, flake->Colors.Bord); flake->GCValues.foreground = flake->ForeColor; flake->GCValues.background = flake->BackColor; flake->RandomColors = False; } flake->GCValues.line_width = flake->Thickness; flake->GCValues.cap_style = CapProjecting; flake->GCValues.join_style = JoinMiter; flake->GCFlags |= (GCLineWidth | GCCapStyle | GCJoinStyle); flake->GCVar = XCreateGC(flake->dpy, flake->window, flake->GCFlags, &flake->GCValues); flake->Density = flake->XGWA.width / 200 * flake->Density; flake->Flakes = malloc(sizeof(FlakeVariable **) * flake->Layers); for (i = 1; i <= flake->Layers; i++) { flake->Flakes[i - 1] = malloc(sizeof(FlakeVariable *) * flake->Density); for (j = 0; j < flake->Density; j++) { flake->Flakes[i - 1][j] = malloc(sizeof(FlakeVariable)); flake->Flakes[i - 1][j]->XPos = random() % flake->XGWA.width; flake->Flakes[i - 1][j]->YPos = random() % flake->XGWA.height; flake->Flakes[i - 1][j]->Angle = random() % 360 * (M_PI / 180); flake->Flakes[i - 1][j]->Ticks = random() % 360; flake->Flakes[i - 1][j]->XOffset = random() % flake->XGWA.height; } } } static void FuzzyFlakesFreeFlake(Flake *flake) { int i, j; for (i = 1; i <= flake->Layers; i++) { for (j = 0; j < flake->Density; j++) { free(flake->Flakes[i - 1][j]); } free(flake->Flakes[i - 1]); } if (flake->DB.bb) XFreePixmap(flake->dpy, flake->DB.bb); if (flake->DB.ba) XFreePixmap(flake->dpy, flake->DB.ba); } static void FuzzyFlakesMove(Flake *flake) { int i, j; for (i = 1; i <= flake->Layers; i++) { for (j = 0; j < flake->Density; j++) { FlakeVariable *FlakeVar; FlakeVar = flake->Flakes[i - 1][j]; FlakeVar->Ticks++; FlakeVar->YPos = FlakeVar->YPos + ((double)flake->FallingSpeed) / 10 / i; FlakeVar->TrueX = (sin (FlakeVar->XOffset + FlakeVar->Ticks * (M_PI / 180) * ((double)flake->FallingSpeed / 10))) * 10 + FlakeVar->XPos; FlakeVar->Angle = FlakeVar->Angle + 0.005 * ((double)flake->FallingSpeed / 10); if (FlakeVar->YPos - flake->Radius > flake->XGWA.height) { FlakeVar->Ticks = 0; FlakeVar->YPos = 0 - flake->Radius; } } } } static void FuzzyFlakesDrawFlake(Flake *flake, int XPos, int YPos, double AngleOffset, int Layer) { int i; double x, y, Angle, Radius; /* calculate the shrink factor debending on which layer we are drawing atm */ Radius = (double)(flake->Radius - Layer * 5); /* draw the flake one arm at a time */ for (i = 1; i <= flake->Arms; i++) { int Diameter; Diameter = (flake->BorderThickness * 2 + flake->Thickness) / Layer; /* compute the angle of this arm of the flake */ Angle = ((2 * M_PI) / flake->Arms) * i + AngleOffset; /* calculate the x and y dispositions for this arm */ y = (int)(sin(Angle) * Radius); x = (int)(cos(Angle) * Radius); /* draw the base for the arm */ flake->GCValues.line_width = Diameter; XFreeGC(flake->dpy, flake->GCVar); flake->GCVar = XCreateGC(flake->dpy, flake->DB.b, flake->GCFlags, &flake->GCValues); XSetForeground(flake->dpy, flake->GCVar, flake->BordColor); XDrawLine(flake->dpy, flake->DB.b, flake->GCVar, XPos, YPos, XPos + x, YPos + y); } /* draw the flake one arm at a time */ for (i = 1; i <= flake->Arms; i++) { /* compute the angle of this arm of the flake */ Angle = ((2 * M_PI) / flake->Arms) * i + AngleOffset; /* calculate the x and y dispositions for this arm */ y = (int)(sin(Angle) * Radius); x = (int)(cos(Angle) * Radius); /* draw the inside of the arm */ flake->GCValues.line_width = flake->Thickness / Layer; XFreeGC(flake->dpy, flake->GCVar); flake->GCVar = XCreateGC(flake->dpy, flake->DB.b, flake->GCFlags, &flake->GCValues); XSetForeground(flake->dpy, flake->GCVar, flake->ForeColor); XDrawLine(flake->dpy, flake->DB.b, flake->GCVar, XPos, YPos, XPos + x, YPos + y); } } static void FuzzyFlakes(Flake *flake) { int i, j; FuzzyFlakesMove(flake); XSetForeground(flake->dpy, flake->GCVar, flake->BackColor); XFillRectangle(flake->dpy, flake->DB.b, flake->GCVar, 0, 0, flake->XGWA.width, flake->XGWA.height); for (i = flake->Layers; i >= 1; i--) { for (j = 0; j < flake->Density; j++) { FuzzyFlakesDrawFlake(flake, flake->Flakes[i - 1][j]->TrueX, flake->Flakes[i - 1][j]->YPos, flake->Flakes[i - 1][j]->Angle, i); } } } static void * fuzzyflakes_init (Display *dpy, Window window) { Flake *flake = (Flake *) calloc (1, sizeof(*flake)); flake->dpy = dpy; flake->window = window; /* This is needed even if it is going to be set to false */ flake->RandomColors = True; /* set up our colors amoung many other things */ FuzzyFlakesInit(flake); return flake; } static unsigned long fuzzyflakes_draw (Display *dpy, Window window, void *closure) { Flake *flake = (Flake *) closure; FuzzyFlakes(flake); if (flake->DB.dbuf) { XCopyArea(flake->dpy, flake->DB.b, flake->window, flake->GCVar, 0, 0, flake->XGWA.width, flake->XGWA.height, 0, 0); flake->DB.b = (flake->DB.b == flake->DB.ba ? flake->DB.bb : flake->DB.ba); } return flake->Delay; } static void fuzzyflakes_reshape (Display *dpy, Window window, void *closure, unsigned int w, unsigned int h) { Flake *flake = (Flake *) closure; if (flake->XGWA.width != w || flake->XGWA.height != h) { FuzzyFlakesFreeFlake(flake); FuzzyFlakesInit(flake); } } static Bool fuzzyflakes_event (Display *dpy, Window window, void *closure, XEvent *event) { return False; } static void fuzzyflakes_free (Display *dpy, Window window, void *closure) { Flake *flake = (Flake *) closure; FuzzyFlakesFreeFlake(flake); free(flake); } static const char *fuzzyflakes_defaults[] = { "*color: #efbea5", "*arms: 5", "*thickness: 10", "*bthickness: 3", "*radius: 20", "*layers: 3", "*density: 5", "*fallingspeed: 10", "*delay: 10000", "*doubleBuffer: True", "*randomColors: False", 0 }; static XrmOptionDescRec fuzzyflakes_options[] = { { "-color", ".color", XrmoptionSepArg, 0}, { "-arms", ".arms", XrmoptionSepArg, 0}, { "-thickness", ".thickness", XrmoptionSepArg, 0}, { "-bthickness", ".bthickness", XrmoptionSepArg, 0}, { "-radius", ".radius", XrmoptionSepArg, 0}, { "-layers", ".layers", XrmoptionSepArg, 0}, { "-density", ".density", XrmoptionSepArg, 0}, { "-speed", ".fallingspeed", XrmoptionSepArg, 0}, { "-delay", ".delay", XrmoptionSepArg, 0}, { "-db", ".doubleBuffer", XrmoptionNoArg, "True"}, { "-no-db", ".doubleBuffer", XrmoptionNoArg, "False"}, { "-random-colors", ".randomColors", XrmoptionNoArg, "True"}, { 0, 0, 0, 0} }; XSCREENSAVER_MODULE ("FuzzyFlakes", fuzzyflakes) xscreensaver-5.36/hacks/anemotaxis.c000644 000767 000024 00000042400 12717745677 017572 0ustar00jwzstaff000000 000000 /* anemotaxis, Copyright (c) 2004 Eugene Balkovski * * 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. */ /*------------------------------------------------------------------------ | | FILE anemotaxis.c | | DESCRIPTION Anemotaxis | | This code illustrates an optimal algorithm designed | for searching a source of particles on a plane. | The particles drift in one direction and walk randomly | in the other. The only information available to the | searcher is the presence of a particle at its location | and the local direction from where particle arrived. | The algorithm "explains" the behavior | of some animals and insects | who use olfactory and directional cues to find | sources of odor (mates, food, home etc) in | turbulent atmosphere (odor-modulated anemotaxis), | e.g. male moths locating females who release | pheromones to attract males. The search trajectories | resemble the trajectories that the animals follow. | | | WRITTEN BY Eugene Balkovski | | MODIFICATIONS june 2004 started | +----------------------------------------------------------------------*/ /* Options: -distance size of the lattice -sources number of sources -searhers number of searcher */ #include "screenhack.h" #ifdef HAVE_DOUBLE_BUFFER_EXTENSION #include "xdbe.h" #endif /*-----------------------------------------------------------------------+ | PRIVATE DATA | +-----------------------------------------------------------------------*/ #define MAX_DIST 250 #define MIN_DIST 10 #define LINE_WIDTH 4 #define MAX_INV_RATE 5 #define RND(x) (random() % (x)) #define X(x) ((int) (st->ax * (x) + st->bx)) #define Y(x) ((int) (st->ay * (x) + st->by)) typedef struct { short x; short y; } Point; typedef struct { short y; /* y-coordinate of the particle (relative to the source) */ short v; /* velocity of the particle. Allowed values are -1, 0, 1. 2 means the particle is not valid */ } YV; typedef struct { int n; /* size of array xv */ YV *yv; /* yv[i] keeps velocity and y-coordinate of the particle at (i + 1, yv[i].y) relative to the source */ int inv_rate; /* Inverse rate of particle emission (if 0 then source doesn't emit new particles (although old ones can still exist )*/ Point r; /* Position of the source */ long color; } Source; typedef struct PList { Point r; struct PList *next; } PList; typedef enum {UP_LEFT, UP_RIGHT, LEFT, RIGHT, DONE} State_t; typedef struct { Point r; /* Current position */ Point vertex; /* Position of the vertex of the most recent cone, which is the region where the source is located. We do exhaustive search in the cone until we encounter a new particle, which gives us a new cone. */ State_t state; /* Internal state variable */ unsigned char c; /* Concentration at r */ short v; /* Velocity at r (good only when c != 0) */ PList *hist; /* Trajectory */ int rs; /* small shift of x-coordinate to avoid painting over the same x */ long color; } Searcher; struct state { Source **source; Searcher **searcher; int max_dist, max_src, max_searcher; double ax, ay, bx, by; int dx, dy; Display *dpy; Window window; Pixmap b, ba, bb; #ifdef HAVE_DOUBLE_BUFFER_EXTENSION XdbeBackBuffer backb; #endif long delay; /* usecs to wait between updates. */ int scrWidth, scrHeight; GC gcDraw, gcClear; Bool dbuf; XGCValues gcv; Colormap cmap; XColor *colors; int ncolors; }; /*-----------------------------------------------------------------------+ | PUBLIC DATA | +-----------------------------------------------------------------------*/ /*-----------------------------------------------------------------------+ | PRIVATE FUNCTIONS | +-----------------------------------------------------------------------*/ static void *emalloc(size_t size) { void *ret = malloc(size); if (ret == NULL) { fprintf(stderr, "out of memory\n"); exit(1); } return ret; } static Searcher *new_searcher(struct state *st) { Searcher *m = (Searcher *) emalloc(sizeof(Searcher)); m->r.x = m->vertex.x = st->max_dist; do { m->r.y = RND(2 * st->max_dist); } while(m->r.y < MIN_DIST || m->r.y > 2 * st->max_dist - MIN_DIST); m->vertex.y = m->r.y; m->state = (RND(2) == 0 ? UP_RIGHT : UP_LEFT); m->hist = NULL; m->color = st->colors[random() % st->ncolors].pixel; m->rs = RND(st->dx); return m; } static void destroy_searcher(Searcher *m) { PList *p = m->hist, *q; while(p != NULL) { q = p->next; free(p); p = q; } free(m); } static void write_hist(Searcher *m) { PList *l; l = m->hist; m->hist = (PList *) emalloc(sizeof(PList)); m->hist->next = l; m->hist->r = m->r; } static void move_searcher(Searcher *m) { if(m->c == True) { write_hist(m); m->r.x -= 1; m->r.y -= m->v; write_hist(m); m->state = (RND(2) == 0 ? UP_LEFT : UP_RIGHT); m->vertex = m->r; return; } switch(m->state) { case UP_LEFT: m->r.x -= 1; m->r.y += 1; m->state = RIGHT; write_hist(m); return; case RIGHT: m->r.y -= 1; if(m->vertex.x - m->r.x == m->vertex.y - m->r.y) { write_hist(m); m->state = UP_RIGHT; } return; case UP_RIGHT: m->r.x -= 1; m->r.y -= 1; m->state = LEFT; write_hist(m); return; case LEFT: m->r.y += 1; if(m->vertex.x - m->r.x == m->r.y - m->vertex.y) { write_hist(m); m->state = UP_LEFT; } return; default: break; } } static void evolve_source(Source *s) { int i; /* propagate existing particles */ for(i = s->n - 1; i > 0; i--) { if(s->yv[i - 1].v == 2) s->yv[i].v = 2; else { s->yv[i].v = RND(3) - 1; s->yv[i].y = s->yv[i - 1].y + s->yv[i].v; } } if(s->inv_rate > 0 && (RND(s->inv_rate) == 0)) /* emit a particle */ s->yv[0].y = s->yv[0].v = RND(3) - 1; else s->yv[0].v = 2; } static Source *new_source(struct state *st) { int i; Source *s = (Source *) emalloc(sizeof(Source)); if(st->max_searcher == 0) { s->r.x = 0; s->r.y = RND(2 * st->max_dist); } else { s->r.x = RND(st->max_dist / 3); do { s->r.y = RND(2 * st->max_dist); } while(s->r.y < MIN_DIST || s->r.y > 2 * st->max_dist - MIN_DIST); } s->n = st->max_dist - s->r.x; s->yv = emalloc(sizeof(YV) * s->n); for(i = 0; i < s->n; i++) s->yv[i].v = 2; s->inv_rate = RND(MAX_INV_RATE); if(s->inv_rate == 0) s->inv_rate = 1; s->color = st->colors[random() % st->ncolors].pixel; return s; } static void destroy_source(Source *s) { free(s->yv); free(s); } static void get_v(const Source *s, Searcher *m) { int x = m->r.x - s->r.x - 1; m->c = 0; if(x < 0 || x >= s->n) return; if((s->yv[x].v == 2) || (s->yv[x].y != m->r.y - s->r.y)) return; m->c = 1; m->v = s->yv[x].v; m->color = s->color; } static void * anemotaxis_init (Display *disp, Window win) { struct state *st = (struct state *) calloc (1, sizeof(*st)); XWindowAttributes wa; st->dpy = disp; st->window = win; XGetWindowAttributes(st->dpy, st->window, &wa); st->ncolors = get_integer_resource (st->dpy, "colors", "Colors"); st->ncolors++; st->colors = (XColor *) malloc(sizeof(*st->colors) * (st->ncolors+1)); make_random_colormap (wa.screen, wa.visual, wa.colormap, st->colors, &st->ncolors, True, True, 0, True); st->delay = get_integer_resource(st->dpy, "delay", "Integer"); st->max_dist = get_integer_resource(st->dpy, "distance", "Integer"); if(st->max_dist < MIN_DIST) st->max_dist = MIN_DIST + 1; if(st->max_dist > MAX_DIST) st->max_dist = MAX_DIST; st->max_src = get_integer_resource(st->dpy, "sources", "Integer"); if(st->max_src <= 0) st->max_src = 1; st->max_searcher = get_integer_resource(st->dpy, "searchers", "Integer"); if(st->max_searcher < 0) st->max_searcher = 0; st->dbuf = True; # ifdef HAVE_JWXYZ /* Don't second-guess Quartz's double-buffering */ st->dbuf = False; # endif st->source = (Source **) emalloc(sizeof(Source *) * st->max_src); memset(st->source, 0, st->max_src * sizeof(Source *)); st->source[0] = new_source(st); st->searcher = (Searcher **) emalloc(st->max_searcher * sizeof(Searcher *)); memset(st->searcher, 0, st->max_searcher * sizeof(Searcher *)); st->b = st->ba = st->bb = 0; /* double-buffer to reduce flicker */ #ifdef HAVE_DOUBLE_BUFFER_EXTENSION st->b = st->backb = xdbe_get_backbuffer (st->dpy, st->window, XdbeUndefined); #endif st->scrWidth = wa.width; st->scrHeight = wa.height; st->cmap = wa.colormap; st->gcDraw = XCreateGC(st->dpy, st->window, 0, &st->gcv); st->gcv.foreground = get_pixel_resource(st->dpy, st->cmap, "background", "Background"); st->gcClear = XCreateGC(st->dpy, st->window, GCForeground, &st->gcv); if (st->dbuf) { if (!st->b) { st->ba = XCreatePixmap (st->dpy, st->window, st->scrWidth, st->scrHeight, wa.depth); st->bb = XCreatePixmap (st->dpy, st->window, st->scrWidth, st->scrHeight, wa.depth); st->b = st->ba; } } else st->b = st->window; if (st->ba) XFillRectangle (st->dpy, st->ba, st->gcClear, 0, 0, st->scrWidth, st->scrHeight); if (st->bb) XFillRectangle (st->dpy, st->bb, st->gcClear, 0, 0, st->scrWidth, st->scrHeight); st->ax = st->scrWidth / (double) st->max_dist; st->ay = st->scrHeight / (2. * st->max_dist); st->bx = 0.; st->by = 0.; if((st->dx = st->scrWidth / (2 * st->max_dist)) == 0) st->dx = 1; if((st->dy = st->scrHeight / (4 * st->max_dist)) == 0) st->dy = 1; XSetLineAttributes(st->dpy, st->gcDraw, st->dx / 3 + 1, LineSolid, CapRound, JoinRound); XClearWindow(st->dpy, st->window); return st; } static void draw_searcher(struct state *st, Drawable curr_window, int i) { Point r1, r2; PList *l; if(st->searcher[i] == NULL) return; XSetForeground(st->dpy, st->gcDraw, st->searcher[i]->color); r1.x = X(st->searcher[i]->r.x) + st->searcher[i]->rs; r1.y = Y(st->searcher[i]->r.y); XFillRectangle(st->dpy, curr_window, st->gcDraw, r1.x - 2, r1.y - 2, 4, 4); for(l = st->searcher[i]->hist; l != NULL; l = l->next) { r2.x = X(l->r.x) + st->searcher[i]->rs; r2.y = Y(l->r.y); XDrawLine(st->dpy, curr_window, st->gcDraw, r1.x, r1.y, r2.x, r2.y); r1 = r2; } } static void draw_image(struct state *st, Drawable curr_window) { int i, j; int x, y; for(i = 0; i < st->max_src; i++) { if(st->source[i] == NULL) continue; XSetForeground(st->dpy, st->gcDraw, st->source[i]->color); if(st->source[i]->inv_rate > 0) { if(st->max_searcher > 0) { x = (int) X(st->source[i]->r.x); y = (int) Y(st->source[i]->r.y); j = st->dx * (MAX_INV_RATE + 1 - st->source[i]->inv_rate) / (2 * MAX_INV_RATE); if(j == 0) j = 1; XFillArc(st->dpy, curr_window, st->gcDraw, x - j, y - j, 2 * j, 2 * j, 0, 360 * 64); }} for(j = 0; j < st->source[i]->n; j++) { if(st->source[i]->yv[j].v == 2) continue; /* Move the particles slightly off lattice */ x = X(st->source[i]->r.x + 1 + j) + RND(st->dx); y = Y(st->source[i]->r.y + st->source[i]->yv[j].y) + RND(st->dy); XFillArc(st->dpy, curr_window, st->gcDraw, x - 2, y - 2, 4, 4, 0, 360 * 64); } } for(i = 0; i < st->max_searcher; i++) draw_searcher(st, curr_window, i); } static void animate_anemotaxis(struct state *st, Drawable curr_window) { int i, j; Bool dead; for(i = 0; i < st->max_src; i++) { if(st->source[i] == NULL) continue; evolve_source(st->source[i]); /* reap dead sources for which all particles are gone */ if(st->source[i]->inv_rate == 0) { dead = True; for(j = 0; j < st->source[i]->n; j++) { if(st->source[i]->yv[j].v != 2) { dead = False; break; } } if(dead == True) { destroy_source(st->source[i]); st->source[i] = NULL; } } } /* Decide if we want to add new sources */ for(i = 0; i < st->max_src; i++) { if(st->source[i] == NULL && RND(st->max_dist * st->max_src) == 0) st->source[i] = new_source(st); } if(st->max_searcher == 0) { /* kill some sources when searchers don't do that */ for(i = 0; i < st->max_src; i++) { if(st->source[i] != NULL && RND(st->max_dist * st->max_src) == 0) { destroy_source(st->source[i]); st->source[i] = 0; } } } /* Now deal with searchers */ for(i = 0; i < st->max_searcher; i++) { if((st->searcher[i] != NULL) && (st->searcher[i]->state == DONE)) { destroy_searcher(st->searcher[i]); st->searcher[i] = NULL; } if(st->searcher[i] == NULL) { if(RND(st->max_dist * st->max_searcher) == 0) { st->searcher[i] = new_searcher(st); } } if(st->searcher[i] == NULL) continue; /* Check if searcher found a source or missed all of them */ for(j = 0; j < st->max_src; j++) { if(st->source[j] == NULL || st->source[j]->inv_rate == 0) continue; if(st->searcher[i]->r.x < 0) { st->searcher[i]->state = DONE; break; } if((st->source[j]->r.y == st->searcher[i]->r.y) && (st->source[j]->r.x == st->searcher[i]->r.x)) { st->searcher[i]->state = DONE; st->source[j]->inv_rate = 0; /* source disappears */ /* Make it flash */ st->searcher[i]->color = WhitePixel(st->dpy, DefaultScreen(st->dpy)); break; } } st->searcher[i]->c = 0; /* set it here in case we don't get to get_v() */ /* Find the concentration at searcher's location */ if(st->searcher[i]->state != DONE) { for(j = 0; j < st->max_src; j++) { if(st->source[j] == NULL) continue; get_v(st->source[j], st->searcher[i]); if(st->searcher[i]->c == 1) break; } } move_searcher(st->searcher[i]); } draw_image(st, curr_window); } static unsigned long anemotaxis_draw (Display *disp, Window window, void *closure) { struct state *st = (struct state *) closure; XWindowAttributes wa; int w, h; XGetWindowAttributes(st->dpy, st->window, &wa); w = wa.width; h = wa.height; if(w != st->scrWidth || h != st->scrHeight) { st->scrWidth = w; st->scrHeight = h; st->ax = st->scrWidth / (double) st->max_dist; st->ay = st->scrHeight / (2. * st->max_dist); st->bx = 0.; st->by = 0.; if((st->dx = st->scrWidth / (2 * st->max_dist)) == 0) st->dx = 1; if((st->dy = st->scrHeight / (4 * st->max_dist)) == 0) st->dy = 1; XSetLineAttributes(st->dpy, st->gcDraw, st->dx / 3 + 1, LineSolid, CapRound, JoinRound); } XFillRectangle (st->dpy, st->b, st->gcClear, 0, 0, st->scrWidth, st->scrHeight); animate_anemotaxis(st, st->b); #ifdef HAVE_DOUBLE_BUFFER_EXTENSION if (st->backb) { XdbeSwapInfo info[1]; info[0].swap_window = st->window; info[0].swap_action = XdbeUndefined; XdbeSwapBuffers (st->dpy, info, 1); } else #endif if (st->dbuf) { XCopyArea (st->dpy, st->b, st->window, st->gcClear, 0, 0, st->scrWidth, st->scrHeight, 0, 0); st->b = (st->b == st->ba ? st->bb : st->ba); } return st->delay; } static void anemotaxis_reshape (Display *dpy, Window window, void *closure, unsigned int w, unsigned int h) { } static Bool anemotaxis_event (Display *dpy, Window window, void *closure, XEvent *event) { return False; } static void anemotaxis_free (Display *dpy, Window window, void *closure) { struct state *st = (struct state *) closure; int i; if (st->source) { for (i = 0; i < st->max_src; i++) if (st->source[i]) destroy_source (st->source[i]); free (st->source); } if (st->searcher) { for (i = 0; i < st->max_searcher; i++) if (st->searcher[i]) destroy_searcher (st->searcher[i]); free (st->searcher); } free (st); } static const char *anemotaxis_defaults [] = { ".background: black", "*distance: 40", "*sources: 25", "*searchers: 25", "*delay: 20000", "*colors: 20", #ifdef HAVE_DOUBLE_BUFFER_EXTENSION "*useDBE: True", #endif 0 }; static XrmOptionDescRec anemotaxis_options [] = { { "-delay", ".delay", XrmoptionSepArg, 0 }, { "-distance", ".distance", XrmoptionSepArg, 0 }, { "-sources", ".sources", XrmoptionSepArg, 0 }, { "-searchers", ".searchers", XrmoptionSepArg, 0 }, { "-colors", ".colors", XrmoptionSepArg, 0 }, { 0, 0, 0, 0 } }; XSCREENSAVER_MODULE ("Anemotaxis", anemotaxis) xscreensaver-5.36/hacks/memscroller.c000644 000767 000024 00000043071 12720210757 017727 0ustar00jwzstaff000000 000000 /* xscreensaver, Copyright (c) 2002-2015 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. * * Memscroller -- scrolls a dump of its own RAM across the screen. */ #include "screenhack.h" #include #ifdef HAVE_XSHM_EXTENSION #include "xshm.h" #endif #undef countof #define countof(x) (sizeof(x)/sizeof(*(x))) #ifndef HAVE_MOBILE # define READ_FILES #endif typedef struct { int which; XRectangle rect; XImage *image; int rez; int speed; int scroll_tick; unsigned int value; unsigned char *data; int count_zero; } scroller; typedef struct { Display *dpy; Window window; XWindowAttributes xgwa; GC draw_gc, erase_gc, text_gc; XFontStruct *fonts[6]; int border; enum { SEED_RAM, SEED_RANDOM, SEED_FILE } seed_mode; enum { DRAW_COLOR, DRAW_MONO } draw_mode; char *filename; FILE *in; int nscrollers; scroller *scrollers; # ifdef HAVE_XSHM_EXTENSION Bool shm_p; XShmSegmentInfo shm_info; # endif int delay; } state; static void reshape_memscroller (state *st); static void * memscroller_init (Display *dpy, Window window) { int i; XGCValues gcv; state *st = (state *) calloc (1, sizeof (*st)); char *s; st->dpy = dpy; st->window = window; st->delay = get_integer_resource (dpy, "delay", "Integer"); XGetWindowAttributes (st->dpy, st->window, &st->xgwa); /* Fill up the colormap with random colors. We don't actually use these explicitly, but in 8-bit mode, they will be used implicitly by the random image bits. */ { int ncolors = 255; XColor colors[256]; make_random_colormap (st->xgwa.screen, st->xgwa.visual, st->xgwa.colormap, colors, &ncolors, True, True, 0, False); } st->border = get_integer_resource (dpy, "borderSize", "BorderSize"); { int i; int nfonts = countof (st->fonts); for (i = nfonts-1; i >= 0; i--) { char *fontname; char res[20]; sprintf (res, "font%d", i+1); fontname = get_string_resource (dpy, res, "Font"); /* Each resource can be a comma-separated list of font names. We use the first one that exists. */ if (fontname && *fontname) { char *f2 = strdup(fontname); char *f, *token = f2; while ((f = strtok(token, ",")) && !st->fonts[i]) { token = 0; while (*f == ' ' || *f == '\t') f++; st->fonts[i] = XLoadQueryFont (dpy, f); } free (f2); if (!st->fonts[i] && i < nfonts-1) { fprintf (stderr, "%s: unable to load font: \"%s\"\n", progname, fontname); st->fonts[i] = st->fonts[i+1]; } } } if (!st->fonts[0]) st->fonts[0] = XLoadQueryFont (dpy, "fixed"); if (!st->fonts[0]) { fprintf (stderr, "%s: unable to load any fonts!", progname); exit (1); } } gcv.line_width = st->border; gcv.background = get_pixel_resource(st->dpy, st->xgwa.colormap, "background", "Background"); gcv.foreground = get_pixel_resource(st->dpy, st->xgwa.colormap, "textColor", "Foreground"); st->text_gc = XCreateGC (st->dpy, st->window, GCForeground|GCBackground, &gcv); gcv.foreground = get_pixel_resource(st->dpy, st->xgwa.colormap, "foreground", "Foreground"); st->draw_gc = XCreateGC (st->dpy, st->window, GCForeground|GCBackground|GCLineWidth, &gcv); gcv.foreground = gcv.background; st->erase_gc = XCreateGC (st->dpy, st->window, GCForeground|GCBackground, &gcv); s = get_string_resource (dpy, "drawMode", "DrawMode"); if (!s || !*s || !strcasecmp (s, "color")) st->draw_mode = DRAW_COLOR; else if (!strcasecmp (s, "mono")) st->draw_mode = DRAW_MONO; else { fprintf (stderr, "%s: drawMode must be 'mono' or 'color', not '%s'\n", progname, s); exit (1); } if (s) free (s); s = 0; # ifdef READ_FILES st->filename = get_string_resource (dpy, "filename", "Filename"); # endif if (!st->filename || !*st->filename || !strcasecmp (st->filename, "(ram)") || !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)); for (i = 0; i < st->nscrollers; i++) { scroller *sc = &st->scrollers[i]; int max_height = 4096; sc->which = i; sc->speed = i+1; sc->image = 0; # ifdef HAVE_XSHM_EXTENSION st->shm_p = get_boolean_resource (dpy, "useSHM", "Boolean"); if (st->shm_p) { sc->image = create_xshm_image (st->dpy, st->xgwa.visual, st->xgwa.depth, ZPixmap, 0, &st->shm_info, 1, max_height); if (! sc->image) st->shm_p = False; } # endif /* HAVE_XSHM_EXTENSION */ if (!sc->image) sc->image = XCreateImage (st->dpy, st->xgwa.visual, st->xgwa.depth, ZPixmap, 0, 0, 1, max_height, 8, 0); if (sc->image && !sc->image->data) sc->image->data = (char *) malloc (sc->image->bytes_per_line * sc->image->height + 1); if (!sc->image || !sc->image->data) { fprintf (stderr, "%s: out of memory (allocating 1x%d image)\n", progname, sc->image->height); exit (1); } } reshape_memscroller (st); return st; } static void reshape_memscroller (state *st) { int i; XGetWindowAttributes (st->dpy, st->window, &st->xgwa); for (i = 0; i < st->nscrollers; i++) { scroller *sc = &st->scrollers[i]; if (i == 0) { sc->rez = 6; /* #### */ sc->rect.width = (((int) (st->xgwa.width * 0.8) / sc->rez) * sc->rez); sc->rect.height = (((int) (st->xgwa.height * 0.3) / sc->rez) * sc->rez); sc->rect.x = (st->xgwa.width - sc->rect.width) / 2; sc->rect.y = (st->xgwa.height - sc->rect.height) / 2; } else { scroller *sc0 = &st->scrollers[i-1]; sc->rez = sc0->rez * 1.8; sc->rect.x = sc0->rect.x; sc->rect.y = (sc0->rect.y + sc0->rect.height + st->border + (st->border + 2) * 7); sc->rect.width = sc0->rect.width; sc->rect.height = (((int) (st->xgwa.height * 0.1) / sc->rez) * sc->rez); } XDrawRectangle (st->dpy, st->window, st->draw_gc, sc->rect.x - st->border*2, sc->rect.y - st->border*2, sc->rect.width + st->border*4, sc->rect.height + st->border*4); } } # ifdef READ_FILES static void open_file (state *st) { if (st->in) { fclose (st->in); st->in = 0; } st->in = fopen (st->filename, "r"); if (!st->in) { char buf[1024]; sprintf (buf, "%s: %s", progname, st->filename); perror (buf); exit (1); } } #endif /* "The brk and sbrk functions are historical curiosities left over from earlier days before the advent of virtual memory management." -- sbrk(2) man page on BSD systems, as of 1995 or so. */ #ifdef HAVE_SBRK # if (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 2)) /* gcc >= 4.2 */ /* Don't print "warning: 'sbrk' is deprecated". */ # pragma GCC diagnostic ignored "-Wdeprecated-declarations" # endif #endif static unsigned int more_bits (state *st, scroller *sc) { static unsigned char *lomem = 0; static unsigned char *himem = 0; unsigned char r, g, b; /* vv: Each incoming byte rolls through all 4 bytes of this (it is sc->value) This is the number displayed at the top. pv: the pixel color value. incoming bytes land in R,G,B, or maybe just G. */ unsigned int vv, pv; unsigned int rmsk = st->scrollers[0].image->red_mask; unsigned int gmsk = st->scrollers[0].image->green_mask; unsigned int bmsk = st->scrollers[0].image->blue_mask; unsigned int amsk = ~(rmsk | gmsk | bmsk); vv = sc->value; /* Pack RGB into a pixel according to the XImage component masks; set the remaining bits to 1 for the benefit of HAVE_JWXYZ alpha. */ # undef PACK # define PACK() ((((r << 24) | (r << 16) | (r << 8) | r) & rmsk) | \ (((g << 24) | (g << 16) | (g << 8) | g) & gmsk) | \ (((b << 24) | (b << 16) | (b << 8) | b) & bmsk) | \ amsk) switch (st->seed_mode) { case SEED_RAM: if (himem == 0) { lomem = (unsigned char *) progname; /* not first malloc, but early */ himem = (unsigned char *) /* not last malloc, but late */ st->scrollers[st->nscrollers-1].image->data; } if (sc->data < lomem) sc->data = lomem; # ifdef HAVE_SBRK /* re-get it each time through */ himem = ((unsigned char *) sbrk(0)) - (2 * sizeof(void *)); # endif if (!lomem || !himem) { /* bad craziness! give up! */ st->seed_mode = SEED_RANDOM; return 0; } /* I don't understand what's going on there, but on MacOS X, we're getting insane values for lomem and himem (both Xlib and HAVE_JWXYZ). Does malloc() draw from more than one heap? */ if ((unsigned long) himem - (unsigned long) lomem > 0x0FFFFFFF) { # if 0 fprintf (stderr, "%s: wonky: 0x%08x - 0x%08x = 0x%08x\n", progname, (unsigned int) himem, (unsigned int) lomem, (unsigned int) himem - (unsigned int) lomem); # endif himem = lomem + 0xFFFF; } if (lomem >= himem) abort(); RETRY: if (sc->data >= himem) sc->data = lomem; switch (st->draw_mode) { case DRAW_COLOR: r = *sc->data++; g = *sc->data++; b = *sc->data++; vv = (vv << 24) | (r << 16) | (g << 8) | b; break; case DRAW_MONO: r = 0; g = *sc->data++; b = 0; vv = (vv << 8) | g; break; default: abort(); } pv = PACK(); /* avoid having many seconds of blackness: truncate zeros at 24K. */ if (vv == 0) sc->count_zero++; else sc->count_zero = 0; if (sc->count_zero > 1024 * (st->draw_mode == DRAW_COLOR ? 24 : 8)) goto RETRY; break; case SEED_RANDOM: vv = random(); switch (st->draw_mode) { case DRAW_COLOR: r = (vv >> 16) & 0xFF; g = (vv >> 8) & 0xFF; b = (vv ) & 0xFF; break; case DRAW_MONO: r = 0; g = vv & 0xFF; b = 0; break; default: abort(); } pv = PACK(); break; # ifdef READ_FILES case SEED_FILE: { int i; /* this one returns only bytes from the file */ # define GETC(V) \ do { \ i = fgetc (st->in); \ } while (i == EOF \ ? (open_file (st), 1) \ : 0); \ V = i /* this one returns a null at EOF -- else we hang on zero-length files */ # undef GETC # define GETC(V) \ i = fgetc (st->in); \ if (i == EOF) { i = 0; open_file (st); } \ V = i if (!st->in) open_file (st); switch (st->draw_mode) { case DRAW_COLOR: GETC(r); GETC(g); GETC(b); vv = (vv << 24) | (r << 16) | (g << 8) | b; break; case DRAW_MONO: r = 0; GETC(g); b = 0; vv = (vv << 8) | g; break; default: abort(); } # undef GETC pv = PACK(); } break; # endif /* READ_FILES */ default: abort(); } # undef PACK sc->value = vv; return pv; } static void draw_string (state *st) { char buf[40]; int direction, ascent, descent; int bot = st->scrollers[0].rect.y; const char *fmt = "%08X"; int i; /* Draw the first font that fits. */ for (i = 0; i < countof (st->fonts); i++) { XCharStruct overall; int x, y, w, h; if (! st->fonts[i]) continue; sprintf (buf, fmt, 0); XTextExtents (st->fonts[i], buf, strlen(buf), &direction, &ascent, &descent, &overall); sprintf (buf, "%08X", st->scrollers[0].value); w = overall.width; h = ascent + descent + 1; x = (st->xgwa.width - w) / 2; y = (bot - h) / 2; if (y + h + 10 <= bot && x > -10) { XSetFont (st->dpy, st->text_gc, st->fonts[i]->fid); XFillRectangle (st->dpy, st->window, st->erase_gc, x-w, y, w*3, h); XDrawString (st->dpy, st->window, st->text_gc, x, y + ascent, buf, strlen(buf)); break; } } } static unsigned long memscroller_draw (Display *dpy, Window window, void *closure) { state *st = (state *) closure; int i; draw_string (st); for (i = 0; i < st->nscrollers; i++) { scroller *sc = &st->scrollers[i]; int j; XCopyArea (st->dpy, st->window, st->window, st->draw_gc, sc->rect.x + sc->speed, sc->rect.y, sc->rect.width - sc->speed, sc->rect.height, sc->rect.x, sc->rect.y); if (sc->scroll_tick == 0) { int top = ((sc->image->bytes_per_line * sc->rect.height) / (4 * sc->rez)); unsigned int *out = (unsigned int *) sc->image->data; for (j = 0; j < top; j++) { unsigned int v = more_bits(st, sc); int k; for (k = 0; k < sc->rez; k++) *out++ = v; } } sc->scroll_tick++; if (sc->scroll_tick * sc->speed >= sc->rez) sc->scroll_tick = 0; for (j = 0; j < sc->speed; j++) { # ifdef HAVE_XSHM_EXTENSION if (st->shm_p) XShmPutImage (st->dpy, st->window, st->draw_gc, sc->image, 0, 0, sc->rect.x + sc->rect.width - sc->image->width - j, sc->rect.y, sc->rect.width, sc->rect.height, False); else # endif /* HAVE_XSHM_EXTENSION */ XPutImage (st->dpy, st->window, st->draw_gc, sc->image, 0, 0, sc->rect.x + sc->rect.width - sc->image->width - j, sc->rect.y, sc->rect.width, sc->rect.height); } } return st->delay; } static void memscroller_reshape (Display *dpy, Window window, void *closure, unsigned int w, unsigned int h) { state *st = (state *) closure; XClearWindow (st->dpy, st->window); reshape_memscroller (st); } static Bool memscroller_event (Display *dpy, Window window, void *closure, XEvent *event) { return False; } static void memscroller_free (Display *dpy, Window window, void *closure) { } static const char *memscroller_defaults [] = { ".background: black", "*drawMode: color", "*fpsSolid: true", "*fpsTop: true", "*filename: (RAM)", ".textColor: #00FF00", ".foreground: #00FF00", "*borderSize: 2", #if defined(HAVE_COCOA) || defined(HAVE_ANDROID) ".font1: OCR A Std 192, Lucida Console 192, Monaco 192", ".font2: OCR A Std 144, Lucida Console 144, Monaco 144", ".font3: OCR A Std 128, Lucida Console 128, Monaco 128", ".font4: OCR A Std 96, Lucida Console 96, Monaco 96", ".font5: OCR A Std 48, Lucida Console 48, Monaco 48", ".font6: OCR A Std 24, Lucida Console 24, Monaco 24", #else /* real X11 */ ".font1: -*-courier-bold-r-*-*-*-1440-*-*-m-*-*-*", ".font2: -*-courier-bold-r-*-*-*-960-*-*-m-*-*-*", ".font3: -*-courier-bold-r-*-*-*-480-*-*-m-*-*-*", ".font4: -*-courier-bold-r-*-*-*-320-*-*-m-*-*-*", ".font5: -*-courier-bold-r-*-*-*-180-*-*-m-*-*-*", ".font6: fixed", #endif /* real X11 */ "*delay: 10000", "*offset: 0", 0 }; static XrmOptionDescRec memscroller_options [] = { { "-delay", ".delay", XrmoptionSepArg, 0 }, { "-font", ".font", XrmoptionSepArg, 0 }, { "-filename", ".filename", XrmoptionSepArg, 0 }, { "-color", ".drawMode", XrmoptionNoArg, "color" }, { "-mono", ".drawMode", XrmoptionNoArg, "mono" }, { "-ram", ".filename", XrmoptionNoArg, "(RAM)" }, { "-random", ".filename", XrmoptionNoArg, "(RANDOM)" }, { 0, 0, 0, 0 } }; XSCREENSAVER_MODULE ("MemScroller", memscroller) xscreensaver-5.36/hacks/substrate.c000644 000767 000024 00000053417 12717747766 017451 0ustar00jwzstaff000000 000000 /* * Substrate (dragorn@kismetwireless.net) * Directly ported code from complexification.net Substrate art * http://complexification.net/gallery/machines/substrate/applet_s/substrate_s.pde * * Substrate code: * j.tarbell June, 2004 * Albuquerque, New Mexico * complexification.net * * CHANGES * * 1.1 dragorn Jan 04 2005 Fixed some indenting, typo in errors for parsing * cmdline args * 1.1 dagraz Jan 04 2005 Added option for circular cracks (David Agraz) * Cleaned up issues with timeouts in start_crack (DA) * 1.0 dragorn Oct 10 2004 First port done * * Directly based the hacks of: * * xscreensaver, Copyright (c) 1997, 1998, 2002 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. */ #include #include "screenhack.h" /* this program goes faster if some functions are inline. The following is * borrowed from ifs.c */ #if !defined( __GNUC__ ) && !defined(__cplusplus) && !defined(c_plusplus) #undef inline #define inline /* */ #endif #define STEP 0.42 /* Raw colormap extracted from pollockEFF.gif */ static const char *rgb_colormap[] = { "#201F21", "#262C2E", "#352626", "#372B27", "#302C2E", "#392B2D", "#323229", "#3F3229", "#38322E", "#2E333D", "#333A3D", "#473329", "#40392C", "#40392E", "#47402C", "#47402E", "#4E402C", "#4F402E", "#4E4738", "#584037", "#65472D", "#6D5D3D", "#745530", "#755532", "#745D32", "#746433", "#7C6C36", "#523152", "#444842", "#4C5647", "#655D45", "#6D5D44", "#6C5D4E", "#746C43", "#7C6C42", "#7C6C4B", "#6B734B", "#73734B", "#7B7B4A", "#6B6C55", "#696D5E", "#7B6C5D", "#6B7353", "#6A745D", "#727B52", "#7B7B52", "#57746E", "#687466", "#9C542B", "#9D5432", "#9D5B35", "#936B36", "#AA7330", "#C45A27", "#D95223", "#D85A20", "#DB5A23", "#E57037", "#836C4B", "#8C6B4B", "#82735C", "#937352", "#817B63", "#817B6D", "#927B63", "#D9893B", "#E49832", "#DFA133", "#E5A037", "#F0AB3B", "#8A8A59", "#B29A58", "#89826B", "#9A8262", "#888B7C", "#909A7A", "#A28262", "#A18A69", "#A99968", "#99A160", "#99A168", "#CA8148", "#EB8D43", "#C29160", "#C29168", "#D1A977", "#C9B97F", "#F0E27B", "#9F928B", "#C0B999", "#E6B88F", "#C8C187", "#E0C886", "#F2CC85", "#F5DA83", "#ECDE9D", "#F5D294", "#F5DA94", "#F4E784", "#F4E18A", "#F4E193", "#E7D8A7", "#F1D4A5", "#F1DCA5", "#F4DBAD", "#F1DCAE", "#F4DBB5", "#F5DBBD", "#F4E2AD", "#F5E9AD", "#F4E3BE", "#F5EABE", "#F7F0B6", "#D9D1C1", "#E0D0C0", "#E7D8C0", "#F1DDC6", "#E8E1C0", "#F3EDC7", "#F6ECCE", "#F8F2C7", "#EFEFD0", 0 }; typedef struct { /* Synthesis of data from Crack:: and SandPainter:: */ float x, y; float t; float ys, xs, t_inc; /* for curvature calculations */ int curved; unsigned long sandcolor; float sandp, sandg; float degrees_drawn; int crack_num; } crack; struct field { unsigned int height; unsigned int width; unsigned int initial_cracks; unsigned int num; unsigned int max_num; int grains; /* number of grains in the sand painting */ int circle_percent; crack *cracks; /* grid of cracks */ int *cgrid; /* grid of actual crack placement */ /* Raw map of pixels we need to keep for alpha blending */ unsigned long int *off_img; /* color parms */ int numcolors; unsigned long *parsedcolors; unsigned long fgcolor; unsigned long bgcolor; int visdepth; unsigned int cycles; unsigned int wireframe; unsigned int seamless; }; struct state { Display *dpy; Window window; struct field *f; unsigned int max_cycles; int growth_delay; GC fgc; XWindowAttributes xgwa; XGCValues gcv; }; static void *xrealloc(void *p, size_t size) { void *ret; if ((ret = realloc(p, size)) == NULL) { fprintf(stderr, "%s: out of memory\n", progname); exit(1); } return ret; } static struct field *init_field(void) { struct field *f = xrealloc(NULL, sizeof(struct field)); f->height = 0; f->width = 0; f->initial_cracks = 0; f->num = 0; f->max_num = 0; f->cracks = NULL; f->cgrid = NULL; f->off_img = NULL; f->numcolors = 0; f->parsedcolors = NULL; f->cycles = 0; f->wireframe = 0; f->seamless = 0; f->fgcolor = 0; f->bgcolor = 0; f->visdepth = 0; f->grains = 0; f->circle_percent = 0; return f; } /* Quick references to pixels in the offscreen map and in the crack grid */ #define ref_pixel(f, x, y) ((f)->off_img[(y) * (f)->width + (x)]) #define ref_cgrid(f, x, y) ((f)->cgrid[(y) * (f)->width + (x)]) static inline void start_crack(struct field *f, crack *cr) { /* synthesis of Crack::findStart() and crack::startCrack() */ int px = 0; int py = 0; int found = 0; int timeout = 0; float a; /* shift until crack is found */ while ((!found) && (timeout++ < 10000)) { px = (int) (random() % f->width); py = (int) (random() % f->height); if (ref_cgrid(f, px, py) < 10000) found = 1; } if ( !found ) { /* We timed out. Use our default values */ px = cr->x; py = cr->y; /* Sanity check needed */ if (px < 0) px = 0; if (px >= f->width) px = f->width - 1; if (py < 0) py = 0; if (py >= f->height) py = f->height - 1; ref_cgrid(f, px, py) = cr->t; } /* start a crack */ a = ref_cgrid(f, px, py); if ((random() % 100) < 50) { /* conversion of the java int(random(-2, 2.1)) */ a -= 90 + (frand(4.1) - 2.0); } else { a += 90 + (frand(4.1) - 2.0); } if ((random() % 100) < f->circle_percent) { float r; /* radius */ float radian_inc; cr->curved = 1; cr->degrees_drawn = 0; r = 10 + (random() % ((f->width + f->height) / 2)); if ((random() % 100) < 50) { r *= -1; } /* arc length = r * theta => theta = arc length / r */ radian_inc = STEP / r; cr->t_inc = radian_inc * 360 / 2 / M_PI; cr->ys = r * sin(radian_inc); cr->xs = r * ( 1 - cos(radian_inc)); } else { cr->curved = 0; } /* Condensed from Crack::startCrack */ cr->x = px + ((float) 0.61 * cos(a * M_PI / 180)); cr->y = py + ((float) 0.61 * sin(a * M_PI / 180)); cr->t = a; } static inline void make_crack(struct field *f) { crack *cr; if (f->num < f->max_num) { /* make a new crack */ f->cracks = (crack *) xrealloc(f->cracks, sizeof(crack) * (f->num + 1)); cr = &(f->cracks[f->num]); /* assign colors */ cr->sandp = 0; cr->sandg = (frand(0.2) - 0.01); cr->sandcolor = f->parsedcolors[random() % f->numcolors]; cr->crack_num = f->num; cr->curved = 0; cr->degrees_drawn = 0; /* We could use these values in the timeout case of start_crack */ cr->x = random() % f->width; cr->y = random() % f->height; cr->t = random() % 360; /* start it */ start_crack(f, cr); f->num++; } } static inline void point2rgb(int depth, unsigned long c, int *r, int *g, int *b) { switch(depth) { case 32: case 24: #ifdef HAVE_JWXYZ /* This program idiotically does not go through a color map, so we have to hardcode in knowledge of how jwxyz.a packs pixels! Fix it to go through st->colors[st->ncolors] instead! */ *r = (c & 0x00ff0000) >> 16; *g = (c & 0x0000ffff) >> 8; *b = (c & 0x000000ff); #else *g = (c & 0xff00) >> 8; *r = (c & 0xff0000) >> 16; *b = c & 0xff; #endif break; case 16: *g = ((c >> 5) & 0x3f) << 2; *r = ((c >> 11) & 0x1f) << 3; *b = (c & 0x1f) << 3; break; case 15: *g = ((c >> 5) & 0x1f) << 3; *r = ((c >> 10) & 0x1f) << 3; *b = (c & 0x1f) << 3; break; } } static inline unsigned long rgb2point(int depth, int r, int g, int b) { unsigned long ret = 0; switch(depth) { case 32: case 24: #ifdef HAVE_JWXYZ /* This program idiotically does not go through a color map, so we have to hardcode in knowledge of how jwxyz.a packs pixels! Fix it to go through st->colors[st->ncolors] instead! */ ret = 0xFF000000 | (r << 16) | (g << 8) | b; #else ret |= (r << 16) | (g << 8) | b; #endif break; case 16: ret = ((r>>3) << 11) | ((g>>2)<<5) | (b>>3); break; case 15: ret = ((r>>3) << 10) | ((g>>3)<<5) | (b>>3); break; } return ret; } /* alpha blended point drawing -- this is Not Right and will likely fail on * non-intel platforms as it is now, needs fixing */ static inline unsigned long trans_point(struct state *st, int x1, int y1, unsigned long myc, float a, struct field *f) { if ((x1 >= 0) && (x1 < f->width) && (y1 >= 0) && (y1 < f->height)) { if (a >= 1.0) { ref_pixel(f, x1, y1) = myc; } else { int or = 0, og = 0, ob = 0; int r = 0, g = 0, b = 0; int nr, ng, nb; unsigned long c; c = ref_pixel(f, x1, y1); point2rgb(f->visdepth, c, &or, &og, &ob); point2rgb(f->visdepth, myc, &r, &g, &b); nr = or + (r - or) * a; ng = og + (g - og) * a; nb = ob + (b - ob) * a; c = rgb2point(f->visdepth, nr, ng, nb); ref_pixel(f, x1, y1) = c; return c; } } return f->bgcolor; } static inline void region_color(struct state *st, GC fgc, struct field *f, crack *cr) { /* synthesis of Crack::regionColor() and SandPainter::render() */ float rx = cr->x; float ry = cr->y; int openspace = 1; int cx, cy; float maxg; int grains, i; float w; float drawx, drawy; unsigned long c; while (openspace) { /* move perpendicular to crack */ rx += (0.81 * sin(cr->t * M_PI/180)); ry -= (0.81 * cos(cr->t * M_PI/180)); cx = (int) rx; cy = (int) ry; if (f->seamless) { cx %= f->width; cy %= f->height; } if ((cx >= 0) && (cx < f->width) && (cy >= 0) && (cy < f->height)) { /* safe to check */ if (f->cgrid[cy * f->width + cx] > 10000) { /* space is open */ } else { openspace = 0; } } else { openspace = 0; } } /* SandPainter stuff here */ /* Modulate gain */ cr->sandg += (frand(0.1) - 0.050); maxg = 1.0; if (cr->sandg < 0) cr->sandg = 0; if (cr->sandg > maxg) cr->sandg = maxg; grains = f->grains; /* Lay down grains of sand */ w = cr->sandg / (grains - 1); for (i = 0; i < grains; i++) { drawx = (cr->x + (rx - cr->x) * sin(cr->sandp + sin((float) i * w))); drawy = (cr->y + (ry - cr->y) * sin(cr->sandp + sin((float) i * w))); if (f->seamless) { drawx = fmod(drawx + f->width, f->width); drawy = fmod(drawy + f->height, f->height); } /* Draw sand bit */ c = trans_point(st, drawx, drawy, cr->sandcolor, (0.1 - i / (grains * 10.0)), f); XSetForeground(st->dpy, fgc, c); XDrawPoint(st->dpy, st->window, fgc, (int) drawx, (int) drawy); XSetForeground(st->dpy, fgc, f->fgcolor); } } static void build_substrate(struct field *f) { int tx; /* int ty; */ f->cycles = 0; if (f->cgrid) { free(f->cgrid); f->cgrid = NULL; } if (f->cracks) { free(f->cracks); f->cracks = NULL; } f->num = 0; /* erase the crack grid */ f->cgrid = (int *) xrealloc(f->cgrid, sizeof(int) * f->height * f->width); { int j; int *p = f->cgrid; for (j = 0; j < f->height * f->width; j++) *p++ = 10001; } /* Not necessary now that make_crack ensures we have usable default * values in start_crack's timeout case * make random crack seeds * for (tx = 0; tx < 16; tx++) { ty = (int) (random() % (f->width * f->height - 1)); f->cgrid[ty] = (int) random() % 360; } */ /* make the initial cracks */ for (tx = 0; tx < f->initial_cracks; tx++) make_crack(f); } static inline void movedrawcrack(struct state *st, GC fgc, struct field *f, int cracknum) { /* Basically Crack::move() */ int cx, cy; crack *cr = &(f->cracks[cracknum]); /* continue cracking */ if ( !cr->curved ) { cr->x += ((float) STEP * cos(cr->t * M_PI/180)); cr->y += ((float) STEP * sin(cr->t * M_PI/180)); } else { cr->x += ((float) cr->ys * cos(cr->t * M_PI/180)); cr->y += ((float) cr->ys * sin(cr->t * M_PI/180)); cr->x += ((float) cr->xs * cos(cr->t * M_PI/180 - M_PI / 2)); cr->y += ((float) cr->xs * sin(cr->t * M_PI/180 - M_PI / 2)); cr->t += cr->t_inc; cr->degrees_drawn += fabsf(cr->t_inc); } if (f->seamless) { cr->x = fmod(cr->x + f->width, f->width); cr->y = fmod(cr->y + f->height, f->height); } /* bounds check */ /* modification of random(-0.33,0.33) */ cx = (int) (cr->x + (frand(0.66) - 0.33)); cy = (int) (cr->y + (frand(0.66) - 0.33)); if (f->seamless) { cx %= f->width; cy %= f->height; } if ((cx >= 0) && (cx < f->width) && (cy >= 0) && (cy < f->height)) { /* draw sand painter if we're not wireframe */ if (!f->wireframe) region_color(st, fgc, f, cr); /* draw fgcolor crack */ ref_pixel(f, cx, cy) = f->fgcolor; XDrawPoint(st->dpy, st->window, fgc, cx, cy); if ( cr->curved && (cr->degrees_drawn > 360) ) { /* completed the circle, stop cracking */ start_crack(f, cr); /* restart ourselves */ make_crack(f); /* generate a new crack */ } /* safe to check */ else if ((f->cgrid[cy * f->width + cx] > 10000) || (fabsf(f->cgrid[cy * f->width + cx] - cr->t) < 5)) { /* continue cracking */ f->cgrid[cy * f->width + cx] = (int) cr->t; } else if (fabsf(f->cgrid[cy * f->width + cx] - cr->t) > 2) { /* crack encountered (not self), stop cracking */ start_crack(f, cr); /* restart ourselves */ make_crack(f); /* generate a new crack */ } } else { /* out of bounds, stop cracking */ /* need these in case of timeout in start_crack */ cr->x = random() % f->width; cr->y = random() % f->height; cr->t = random() % 360; start_crack(f, cr); /* restart ourselves */ make_crack(f); /* generate a new crack */ } } static void build_img(Display *dpy, Window window, XWindowAttributes xgwa, GC fgc, struct field *f) { if (f->off_img) { free(f->off_img); f->off_img = NULL; } f->off_img = (unsigned long *) xrealloc(f->off_img, sizeof(unsigned long) * f->width * f->height); memset(f->off_img, f->bgcolor, sizeof(unsigned long) * f->width * f->height); } static void * substrate_init (Display *dpy, Window window) { struct state *st = (struct state *) calloc (1, sizeof(*st)); XColor tmpcolor; st->dpy = dpy; st->window = window; st->f = init_field(); st->growth_delay = (get_integer_resource(st->dpy, "growthDelay", "Integer")); st->max_cycles = (get_integer_resource(st->dpy, "maxCycles", "Integer")); st->f->initial_cracks = (get_integer_resource(st->dpy, "initialCracks", "Integer")); st->f->max_num = (get_integer_resource(st->dpy, "maxCracks", "Integer")); st->f->wireframe = (get_boolean_resource(st->dpy, "wireFrame", "Boolean")); st->f->grains = (get_integer_resource(st->dpy, "sandGrains", "Integer")); st->f->circle_percent = (get_integer_resource(st->dpy, "circlePercent", "Integer")); st->f->seamless = (get_boolean_resource(st->dpy, "seamless", "Boolean")); if (st->f->initial_cracks <= 2) { fprintf(stderr, "%s: Initial cracks must be greater than 2\n", progname); exit (1); } if (st->f->max_num <= 10) { fprintf(stderr, "%s: Maximum number of cracks must be less than 10\n", progname); exit (1); } if (st->f->circle_percent < 0) { fprintf(stderr, "%s: circle percent must be at least 0\n", progname); exit (1); } if (st->f->circle_percent > 100) { fprintf(stderr, "%s: circle percent must be less than 100\n", progname); exit (1); } XGetWindowAttributes(st->dpy, st->window, &st->xgwa); st->f->height = st->xgwa.height; st->f->width = st->xgwa.width; st->f->visdepth = st->xgwa.depth; /* Count the colors in our map and assign them in a horrifically inefficient * manner but it only happens once */ while (rgb_colormap[st->f->numcolors] != NULL) { st->f->parsedcolors = (unsigned long *) xrealloc(st->f->parsedcolors, sizeof(unsigned long) * (st->f->numcolors + 1)); if (!XParseColor(st->dpy, st->xgwa.colormap, rgb_colormap[st->f->numcolors], &tmpcolor)) { fprintf(stderr, "%s: couldn't parse color %s\n", progname, rgb_colormap[st->f->numcolors]); exit(1); } if (!XAllocColor(st->dpy, st->xgwa.colormap, &tmpcolor)) { fprintf(stderr, "%s: couldn't allocate color %s\n", progname, rgb_colormap[st->f->numcolors]); exit(1); } st->f->parsedcolors[st->f->numcolors] = tmpcolor.pixel; st->f->numcolors++; } st->gcv.foreground = get_pixel_resource(st->dpy, st->xgwa.colormap, "foreground", "Foreground"); st->gcv.background = get_pixel_resource(st->dpy, st->xgwa.colormap, "background", "Background"); st->fgc = XCreateGC(st->dpy, st->window, GCForeground, &st->gcv); st->f->fgcolor = st->gcv.foreground; st->f->bgcolor = st->gcv.background; /* Initialize stuff */ build_img(st->dpy, st->window, st->xgwa, st->fgc, st->f); build_substrate(st->f); return st; } static unsigned long substrate_draw (Display *dpy, Window window, void *closure) { struct state *st = (struct state *) closure; int tempx; if ((st->f->cycles % 10) == 0) { /* Restart if the window size changes */ XGetWindowAttributes(st->dpy, st->window, &st->xgwa); if (st->f->height != st->xgwa.height || st->f->width != st->xgwa.width) { st->f->height = st->xgwa.height; st->f->width = st->xgwa.width; st->f->visdepth = st->xgwa.depth; build_substrate(st->f); build_img(st->dpy, st->window, st->xgwa, st->fgc, st->f); XSetForeground(st->dpy, st->fgc, st->gcv.background); XFillRectangle(st->dpy, st->window, st->fgc, 0, 0, st->xgwa.width, st->xgwa.height); XSetForeground(st->dpy, st->fgc, st->gcv.foreground); } } for (tempx = 0; tempx < st->f->num; tempx++) { movedrawcrack(st, st->fgc, st->f, tempx); } st->f->cycles++; if (st->f->cycles >= st->max_cycles && st->max_cycles != 0) { build_substrate(st->f); build_img(st->dpy, st->window, st->xgwa, st->fgc, st->f); XSetForeground(st->dpy, st->fgc, st->gcv.background); XFillRectangle(st->dpy, st->window, st->fgc, 0, 0, st->xgwa.width, st->xgwa.height); XSetForeground(st->dpy, st->fgc, st->gcv.foreground); } /* #### mi->recursion_depth = st->f->cycles; */ return st->growth_delay; } static void substrate_reshape (Display *dpy, Window window, void *closure, unsigned int w, unsigned int h) { } static Bool substrate_event (Display *dpy, Window window, void *closure, XEvent *event) { struct state *st = (struct state *) closure; if (screenhack_event_helper (dpy, window, event)) { st->f->cycles = st->max_cycles; return True; } return False; } static void substrate_free (Display *dpy, Window window, void *closure) { struct state *st = (struct state *) closure; free (st); } static const char *substrate_defaults[] = { ".background: white", ".foreground: black", "*fpsSolid: true", "*wireFrame: false", "*seamless: false", "*maxCycles: 10000", "*growthDelay: 18000", "*initialCracks: 3", "*maxCracks: 100", "*sandGrains: 64", "*circlePercent: 33", #ifdef HAVE_MOBILE "*ignoreRotation: True", #endif 0 }; static XrmOptionDescRec substrate_options[] = { {"-background", ".background", XrmoptionSepArg, 0}, {"-foreground", ".foreground", XrmoptionSepArg, 0}, {"-wireframe", ".wireFrame", XrmoptionNoArg, "true"}, {"-seamless", ".seamless", XrmoptionNoArg, "true"}, {"-max-cycles", ".maxCycles", XrmoptionSepArg, 0}, {"-growth-delay", ".growthDelay", XrmoptionSepArg, 0}, {"-initial-cracks", ".initialCracks", XrmoptionSepArg, 0}, {"-max-cracks", ".maxCracks", XrmoptionSepArg, 0}, {"-sand-grains", ".sandGrains", XrmoptionSepArg, 0}, {"-circle-percent", ".circlePercent", XrmoptionSepArg, 0}, {0, 0, 0, 0} }; XSCREENSAVER_MODULE ("Substrate", substrate) xscreensaver-5.36/hacks/intermomentary.c000644 000767 000024 00000037021 12710313757 020461 0ustar00jwzstaff000000 000000 /* * InterMomentary (dragorn@kismetwireless.net) * Directly ported code from complexification.net InterMomentary art * http://www.complexification.net/gallery/machines/interMomentary/applet_l/interMomentary_l.pde * * Intersecting Circles, Instantaneous * J. Tarbell + complexification.net * Albuquerque, New Mexico * May, 2004 * * a REAS collaboration for the + groupc.net * Whitney Museum of American Art ARTPORT + artport.whitney.org * Robert Hodgin + flight404.com * William Ngan + metaphorical.net * * * 1.0 Oct 10 2004 dragorn Completed first port * * * Based, of course, on other hacks in: * * xscreensaver, Copyright (c) 1997, 1998, 2002 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. */ #include #include "screenhack.h" #include "hsv.h" /* this program goes faster if some functions are inline. The following is * borrowed from ifs.c */ #if !defined( __GNUC__ ) && !defined(__cplusplus) && !defined(c_plusplus) #undef inline #define inline /* */ #endif /* Pixel rider */ typedef struct { float t; float vt; float mycharge; } PxRider; /* disc of light */ typedef struct { /* index identifier */ int id; /* position */ float x, y; /* radius */ float r, dr; /* velocity */ float vx, vy; /* pixel riders */ int numr; PxRider *pxRiders; } Disc; struct field { unsigned int height; unsigned int width; int initial_discs; Disc *discs; unsigned int num; unsigned int maxrider; unsigned int maxradius; /* color parms */ unsigned long fgcolor; unsigned long bgcolor; int visdepth; unsigned int cycles; /* Offscreen image we draw to */ Pixmap off_map; unsigned char *off_alpha; }; struct state { Display *dpy; Window window; struct field *f; GC fgc, copygc; XWindowAttributes xgwa; int draw_delay; XColor *colors; int ncolors; }; static void *xrealloc(void *p, size_t size) { void *ret; if ((ret = realloc(p, size)) == NULL) { fprintf(stderr, "%s: out of memory\n", progname); exit(1); } return ret; } static struct field *init_field(void) { struct field *f = xrealloc(NULL, sizeof(struct field)); f->height = 0; f->width = 0; f->initial_discs = 0; f->discs = NULL; f->num = 0; f->maxrider = 0; f->maxradius = 0; f->cycles = 0; f->fgcolor = 0; f->bgcolor = 0; f->off_alpha = NULL; f->visdepth = 0; return f; } /* Quick-ref to pixels in the alpha map */ #define ref_pixel(f, x, y) ((f)->off_alpha[(y) * (f)->width + (x)]) static inline void make_disc(struct field *f, float x, float y, float vx, float vy, float r) { /* Synthesis of Disc::Disc and PxRider::PxRider */ Disc *nd; int ix; /* allocate a new disc */ f->discs = (Disc *) xrealloc(f->discs, sizeof(Disc) * (f->num + 1)); nd = &(f->discs[f->num]); nd->id = f->num++; nd->x = x; nd->y = y; nd->vx = vx; nd->vy = vy; nd->dr = r; nd->r = frand(r) / 3; nd->numr = (frand(r) / 2.62); if (nd->numr > f->maxrider) nd->numr = f->maxrider; nd->pxRiders = NULL; nd->pxRiders = (PxRider *) xrealloc(nd->pxRiders, sizeof(PxRider) * (f->maxrider)); for (ix = 0; ix < f->maxrider; ix++) { nd->pxRiders[ix].vt = 0.0; nd->pxRiders[ix].t = frand(M_PI * 2); nd->pxRiders[ix].mycharge = 0; } } /* alpha blended point drawing */ static inline unsigned long trans_point(struct state *st, int x1, int y1, unsigned char myc, float a, struct field *f) { if ((x1 >= 0) && (x1 < f->width) && (y1 >= 0) && (y1 < f->height)) { if (a >= 1.0) { ref_pixel(f, x1, y1) = myc; } else { unsigned long c = ref_pixel(f, x1, y1); c = c + (myc - c) * a; ref_pixel(f, x1, y1) = c; return c; } } return 0; } static inline unsigned long get_pixel (struct state *st, unsigned char v) { return st->colors [v * (st->ncolors-1) / 255].pixel; } static inline void move_disc(struct field *f, int dnum) { Disc *d = &(f->discs[dnum]); /* add velocity to position */ d->x += d->vx; d->y += d->vy; /* bound check */ if (d->x + d->r < 0) d->x += f->width + d->r + d->r; if (d->x - d->r > f->width) d->x -= f->width + d->r + d->r; if (d->y + d->r < 0) d->y += f->height + d->r + d->r; if (d->y - d->r > f->height) d->y -= f->height + d->r + d->r; /* increase to destination radius */ if (d->r < d->dr) d->r += 0.1; } static inline void draw_glowpoint(struct state *st, Drawable drawable, GC fgc, struct field *f, float px, float py) { int i, j; float a; unsigned long c; for (i = -2; i < 3; i++) { for (j = -2; j < 3; j++) { a = 0.8 - i * i * 0.1 - j * j * 0.1; c = trans_point(st, px+i, py+j, 255, a, f); XSetForeground(st->dpy, fgc, get_pixel (st, c)); XDrawPoint(st->dpy, drawable, fgc, px + i, py + j); XSetForeground(st->dpy, fgc, f->fgcolor); } } } static inline void moverender_rider(struct state *st, Drawable drawable, GC fgc, struct field *f, PxRider *rid, float x, float y, float r) { float px, py; unsigned long int c; double cv; /* add velocity to theta */ rid->t = fmod((rid->t + rid->vt + M_PI), (2 * M_PI)) - M_PI; rid->vt += frand(0.002) - 0.001; /* apply friction brakes */ if (fabsf(rid->vt) > 0.02) rid->vt *= 0.9; /* draw */ px = x + r * cos(rid->t); py = y + r * sin(rid->t); if ((px < 0) || (px >= f->width) || (py < 0) || (py >= f->height)) return; /* max brightness seems to be 0.003845 */ c = ref_pixel(f, (int) px, (int) py); cv = c / 255.0; /* guestimated - 40 is 18% of 255, so scale this to 0.0 to 0.003845 */ if (cv > 0.0006921) { draw_glowpoint(st, drawable, fgc, f, px, py); rid->mycharge = 0.003845; } else { rid->mycharge *= 0.98; c = 255 * rid->mycharge; trans_point(st, px, py, c, 0.5, f); XSetForeground(st->dpy, fgc, get_pixel(st, c)); XDrawPoint(st->dpy, drawable, fgc, px, py); XSetForeground(st->dpy, fgc, f->fgcolor); } } static inline void render_disc(struct state *st, Drawable drawable, GC fgc, struct field *f, int dnum) { Disc *di = &(f->discs[dnum]); int n, m; float dx, dy, d; float a, p2x, p2y, h, p3ax, p3ay, p3bx, p3by; unsigned long c; /* Find intersecting points with all ascending discs */ for (n = di->id + 1; n < f->num; n++) { dx = f->discs[n].x - di->x; dy = f->discs[n].y - di->y; d = sqrt(dx * dx + dy * dy); /* intersection test */ if (d < (f->discs[n].r + di->r)) { /* complete containment test */ if (d > fabsf(f->discs[n].r - di->r)) { /* find solutions */ a = (di->r * di->r - f->discs[n].r * f->discs[n].r + d * d) / (2 * d); p2x = di->x + a * (f->discs[n].x - di->x) / d; p2y = di->y + a * (f->discs[n].y - di->y) / d; h = sqrt(di->r * di->r - a * a); p3ax = p2x + h * (f->discs[n].y - di->y) / d; p3ay = p2y - h * (f->discs[n].x - di->x) / d; p3bx = p2x - h * (f->discs[n].y - di->y) / d; p3by = p2y + h * (f->discs[n].x - di->x) / d; /* bounds check */ if ((p3ax < 0) || (p3ax >= f->width) || (p3ay < 0) || (p3ay >= f->height) || (p3bx < 0) || (p3bx >= f->width) || (p3by < 0) || (p3by >= f->height)) continue; /* p3a and p3b might be identical, ignore this case for now */ /* XPutPixel(f->off_map, p3ax, p3ay, f->fgcolor); */ c = trans_point(st, p3ax, p3ay, 255, 0.75, f); XSetForeground(st->dpy, fgc, get_pixel (st, c)); XDrawPoint(st->dpy, drawable, fgc, p3ax, p3ay); /* XPutPixel(f->off_map, p3bx, p3by, f->fgcolor); */ c = trans_point(st, p3bx, p3by, 255, 0.75, f); XSetForeground(st->dpy, fgc, get_pixel (st, c)); XDrawPoint(st->dpy, drawable, fgc, p3bx, p3by); XSetForeground(st->dpy, fgc, f->fgcolor); } } } /* Render all the pixel riders */ for (m = 0; m < di->numr; m++) { moverender_rider(st, drawable, fgc, f, &(di->pxRiders[m]), di->x, di->y, di->r); } } static void build_img(Display *dpy, Window window, struct field *f) { if (f->off_alpha) { free(f->off_alpha); f->off_alpha = NULL; /* Assume theres also an off pixmap */ if (f->off_map != window) XFreePixmap(dpy, f->off_map); } f->off_alpha = (unsigned char *) xrealloc(f->off_alpha, sizeof(unsigned char) * f->width * f->height); memset(f->off_alpha, 0, sizeof(unsigned char) * f->width * f->height); # ifdef HAVE_JWXYZ /* Don't second-guess Quartz's double-buffering */ /* Or Android's */ f->off_map = window; # else f->off_map = XCreatePixmap(dpy, window, f->width, f->height, f->visdepth); # endif } static inline void blank_img(Display *dpy, Window window, XWindowAttributes xgwa, GC fgc, struct field *f) { memset(f->off_alpha, 0, sizeof(unsigned char) * f->width * f->height); XSetForeground(dpy, fgc, f->bgcolor); XFillRectangle(dpy, window, fgc, 0, 0, xgwa.width, xgwa.height); XSetForeground(dpy, fgc, f->fgcolor); } static void * intermomentary_init (Display *dpy, Window window) { struct state *st = (struct state *) calloc (1, sizeof(*st)); #ifdef TIME_ME time_t start_time = time(NULL); #endif int tempx; XGCValues gcv; st->dpy = dpy; st->window = window; XGetWindowAttributes(dpy, window, &st->xgwa); st->ncolors = get_integer_resource (st->dpy, "colors", "Colors"); st->ncolors++; st->colors = (XColor *) malloc(sizeof(*st->colors) * (st->ncolors+1)); gcv.foreground = get_pixel_resource(dpy, st->xgwa.colormap, "foreground", "Foreground"); gcv.background = get_pixel_resource(dpy, st->xgwa.colormap, "background", "Background"); { XColor fgc, bgc; int fgh, bgh; double fgs, fgv, bgs, bgv; fgc.pixel = gcv.foreground; bgc.pixel = gcv.background; XQueryColor (st->dpy, st->xgwa.colormap, &fgc); XQueryColor (st->dpy, st->xgwa.colormap, &bgc); rgb_to_hsv (fgc.red, fgc.green, fgc.blue, &fgh, &fgs, &fgv); rgb_to_hsv (bgc.red, bgc.green, bgc.blue, &bgh, &bgs, &bgv); #if 0 bgh = fgh; bgs = fgs; bgv = fgv / 10.0; #endif make_color_ramp (st->xgwa.screen, st->xgwa.visual, st->xgwa.colormap, bgh, bgs, bgv, fgh, fgs, fgv, st->colors, &st->ncolors, False, /* closed */ True, False); } st->f = init_field(); st->f->height = st->xgwa.height; st->f->width = st->xgwa.width; st->f->visdepth = st->xgwa.depth; st->draw_delay = (get_integer_resource(dpy, "drawDelay", "Integer")); st->f->maxrider = (get_integer_resource(dpy, "maxRiders", "Integer")); st->f->maxradius = (get_integer_resource(dpy, "maxRadius", "Integer")); st->f->initial_discs = (get_integer_resource(dpy, "numDiscs", "Integer")); if (st->f->initial_discs <= 10) { fprintf(stderr, "%s: Initial discs must be greater than 10\n", progname); exit (1); } if (st->f->maxradius <= 30) { fprintf(stderr, "%s: Max radius must be greater than 30\n", progname); exit (1); } if (st->f->maxrider <= 10) { fprintf(stderr, "%s: Max riders must be greater than 10\n", progname); exit (1); } st->fgc = XCreateGC(dpy, window, GCForeground, &gcv); st->copygc = XCreateGC(dpy, window, GCForeground, &gcv); st->f->fgcolor = gcv.foreground; st->f->bgcolor = gcv.background; /* Initialize stuff */ build_img(dpy, window, st->f); for (tempx = 0; tempx < st->f->initial_discs; tempx++) { float fx, fy, x, y, r; int bt; /* Arrange in anti-collapsing circle */ fx = 0.4 * st->f->width * cos((2 * M_PI) * tempx / st->f->initial_discs); fy = 0.4 * st->f->height * sin((2 * M_PI) * tempx / st->f->initial_discs); x = frand(st->f->width / 2) + fx; y = frand(st->f->height / 2) + fy; r = 5 + frand(st->f->maxradius); bt = 1; if ((random() % 100) < 50) bt = -1; make_disc(st->f, x, y, bt * fx / 1000.0, bt * fy / 1000.0, r); } return st; } static unsigned long intermomentary_draw (Display *dpy, Window window, void *closure) { struct state *st = (struct state *) closure; int tempx; if ((st->f->cycles % 10) == 0) { /* Restart if the window size changes */ XGetWindowAttributes(dpy, window, &st->xgwa); if (st->f->height != st->xgwa.height || st->f->width != st->xgwa.width) { st->f->height = st->xgwa.height; st->f->width = st->xgwa.width; st->f->visdepth = st->xgwa.depth; build_img(dpy, window, st->f); } } blank_img(dpy, st->f->off_map, st->xgwa, st->fgc, st->f); for (tempx = 0; tempx < st->f->num; tempx++) { move_disc(st->f, tempx); render_disc(st, st->f->off_map, st->fgc, st->f, tempx); } #if 0 XSetFillStyle(dpy, st->copygc, FillTiled); XSetTile(dpy, st->copygc, st->f->off_map); XFillRectangle(dpy, window, st->copygc, 0, 0, st->f->width, st->f->height); #else if (st->f->off_map != window) XCopyArea (dpy, st->f->off_map, window, st->copygc, 0, 0, st->f->width, st->f->height, 0, 0); #endif st->f->cycles++; return st->draw_delay; } static void intermomentary_reshape (Display *dpy, Window window, void *closure, unsigned int w, unsigned int h) { } static Bool intermomentary_event (Display *dpy, Window window, void *closure, XEvent *event) { return False; } static void intermomentary_free (Display *dpy, Window window, void *closure) { struct state *st = (struct state *) closure; free (st); } static const char *intermomentary_defaults[] = { ".background: black", ".foreground: yellow", "*drawDelay: 30000", "*numDiscs: 85", "*maxRiders: 40", "*maxRadius: 100", "*colors: 256", # ifdef HAVE_MOBILE "*ignoreRotation: True", # endif 0 }; static XrmOptionDescRec intermomentary_options[] = { {"-background", ".background", XrmoptionSepArg, 0}, {"-foreground", ".foreground", XrmoptionSepArg, 0}, {"-draw-delay", ".drawDelay", XrmoptionSepArg, 0}, {"-num-discs", ".numDiscs", XrmoptionSepArg, 0}, {"-max-riders", ".maxRiders", XrmoptionSepArg, 0}, {"-max-radius", ".maxRadius", XrmoptionSepArg, 0}, { "-colors", ".colors", XrmoptionSepArg, 0 }, {0, 0, 0, 0} }; XSCREENSAVER_MODULE ("Intermomentary", intermomentary) xscreensaver-5.36/hacks/fireworkx.c000644 000767 000024 00000054350 12701612216 017420 0ustar00jwzstaff000000 000000 /* Fireworkx 2.2 - Pyrotechnic explosions simulation, an eyecandy, live animating colorful fireworks super-blasts..! Copyright (GPL) 1999-2013 Rony B Chandran From Kerala, INDIA Website: http://www.ronybc.com 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. 2004-OCT: ronybc: Landed on Xscreensaver..! 2012-DEC: ronybc: Almost rewrite of the last version (>4 years old) with SSE2 optimization, colored light flashes, HSV color and many visual and speed improvements. Additional coding: --------------------------------------------------------------------------------- Support for different display color modes: put_image() Jean-Pierre Demailly Fixed array access problems by beating on it with a large hammer. Nicholas Miell Help 'free'ing up of memory with needed 'XSync's. Renuka S Rugmini R Chandran \ */ #include "screenhack.h" #ifdef __SSE2__ # include #endif #define FWXVERSION "2.2" #define WIDTH 1024 /* 888 */ #define HEIGHT 632 /* 548 */ #define SHELLCOUNT 4 /* FIXED NUMBER; for SSE optimization */ #define PIXCOUNT 500 /* 500 */ #define SHELL_LIFE_DEFAULT 32 /* 32 */ #define SHELL_LIFE_RATIO 6 /* 6 */ #define POWDER 5.0 /* 5.0 */ #define FTWEAK 12 /* 12 */ #define FLASH_ZOOM 0.8 /* 1.0 */ #define G_ACCELERATION 0.001 /* GRAVITY */ typedef struct { unsigned int burn; float x, y; float xv, yv; } firepix; typedef struct { unsigned int cx, cy; unsigned int seq_number, life; unsigned int bicolor, flies, hshift, vshift; unsigned int mortar_fired, explode_y; float air_drag, vshift_phase; float flash_r, flash_g, flash_b; unsigned int h; double s, v; unsigned char r, g, b; firepix *fpix; } fireshell; struct state { unsigned int fps_on; unsigned int flash_on; unsigned int shoot; unsigned int verbose; unsigned int width; unsigned int height; unsigned int fullscreen; unsigned int max_shell_life; unsigned int delay; float flash_fade; float *light_map; unsigned char *palaka1; unsigned char *palaka2; void *mem1; void *mem2; fireshell *fireshell_array; Display *dpy; Window window; XImage *xim; GC gc; XColor *colors; int depth; int bigendian; int ncolors; Bool button_down_p; int deferred; }; /* will return zero.. divide with care. */ static unsigned int rnd(unsigned int x) { return(random() % x); } static void fs_roll_rgb(fireshell *fs) { unsigned short r, g, b; hsv_to_rgb (fs->h, fs->s, fs->v, &r, &g, &b); fs->r = (unsigned char) (r >> 8); fs->g = (unsigned char) (g >> 8); fs->b = (unsigned char) (b >> 8); } static void mix_colors(fireshell *fs) { float flash; fs->h = rnd(360); fs->s = frand(0.4) + 0.6; fs->v = 1.0; fs_roll_rgb(fs); flash = rnd(444) + 111; /* Mega Jouls ! */ fs->flash_r = fs->r * flash; fs->flash_g = fs->g * flash; fs->flash_b = fs->b * flash; } static void render_light_map(struct state *st, fireshell *fs) { signed int x, y, v = 0; for (y = 0, v = fs->seq_number; y < st->height; y += 2) { for (x = 0; x < st->width; x += 2, v += SHELLCOUNT) { float f; f = sqrtf((fs->cx - x) * (fs->cx - x) + (fs->cy - y) * (fs->cy - y)) + 4.0; f = FLASH_ZOOM / f; f += pow(f,0.1) * frand(0.0001); /* dither */ st->light_map[v] = f; } } } static void recycle(struct state *st, fireshell *fs, unsigned int x, unsigned int y) { unsigned int n, pixlife; firepix *fp = fs->fpix; fs->mortar_fired = st->shoot; fs->explode_y = y; fs->cx = x; fs->cy = st->shoot ? st->height : y ; fs->life = rnd(st->max_shell_life) + (st->max_shell_life/SHELL_LIFE_RATIO); fs->life += !rnd(25) ? st->max_shell_life * 5 : 0; fs->air_drag = 1.0 - (float)(rnd(200)) / (10000.0 + fs->life); fs->bicolor = !rnd(5) ? 120 : 0; fs->flies = !rnd(10) ? 1 : 0; /* flies' motion */ fs->hshift = !rnd(5) ? 1 : 0; /* hue shifting */ fs->vshift = !rnd(10) ? 1 : 0; /* value shifting */ fs->vshift_phase = M_PI/2.0; pixlife = rnd(fs->life) + fs->life / 10 + 1; /* ! */ for (n = 0; n < PIXCOUNT; n++) { fp->burn = rnd(pixlife) + 32; fp->xv = frand(2.0) * POWDER - POWDER; fp->yv = sqrt(POWDER * POWDER - fp->xv * fp->xv) * (frand(2.0) - 1.0); fp->x = x; fp->y = y; fp++; } mix_colors(fs); render_light_map(st, fs); } static void recycle_oldest(struct state *st, unsigned int x, unsigned int y) { unsigned int n; fireshell *fs, *oldest; fs = oldest = st->fireshell_array; for (n = 0; n < SHELLCOUNT; n++) { if(fs[n].life < oldest->life) oldest = &fs[n]; } recycle(st, oldest, x, y); } static void rotate_hue(fireshell *fs, int dh) { fs->h = fs->h + dh; fs->s = fs->s - 0.001; fs_roll_rgb(fs); } static void wave_value(fireshell *fs) { fs->vshift_phase = fs->vshift_phase + 0.008; fs->v = fabs(sin(fs->vshift_phase)); fs_roll_rgb(fs); } static int explode(struct state *st, fireshell *fs) { float air_drag; unsigned int n; unsigned int h = st->height; unsigned int w = st->width; unsigned char r, g, b; unsigned char *prgba; unsigned char *palaka = st->palaka1; firepix *fp = fs->fpix; if (fs->mortar_fired) { if (--fs->cy == fs->explode_y) { fs->mortar_fired = 0; mix_colors(fs); render_light_map(st, fs); } else { fs->flash_r = fs->flash_g = fs->flash_b = 50 + (fs->cy - fs->explode_y) * 10; prgba = palaka + (fs->cy * w + fs->cx + rnd(5) - 2) * 4; prgba[0] = (rnd(32) + 128); prgba[1] = (rnd(32) + 128); prgba[2] = (rnd(32) + 128); return(1); } } if ((fs->bicolor + 1) % 50 == 0) rotate_hue(fs, 180); if (fs->bicolor) --fs->bicolor; if (fs->hshift) rotate_hue(fs, rnd(8)); if (fs->vshift) wave_value(fs); if (fs->flash_r > 1.0) fs->flash_r *= st->flash_fade; if (fs->flash_g > 1.0) fs->flash_g *= st->flash_fade; if (fs->flash_b > 1.0) fs->flash_b *= st->flash_fade; air_drag = fs->air_drag; r = fs->r; g = fs->g; b = fs->b; for (n = 0; n < PIXCOUNT; n++, fp++) { if (!fp->burn) continue; --fp->burn; if (fs->flies) { fp->x += fp->xv = fp->xv * air_drag + frand(0.1) - 0.05; fp->y += fp->yv = fp->yv * air_drag + frand(0.1) - 0.05 + G_ACCELERATION; } else { fp->x += fp->xv = fp->xv * air_drag + frand(0.01) - 0.005; fp->y += fp->yv = fp->yv * air_drag + frand(0.005) - 0.0025 + G_ACCELERATION; } if (fp->y > h) { if (rnd(5) == 3) { fp->yv *= -0.24; fp->y = h; } /* touch muddy ground :) */ else fp->burn = 0; } if (fp->x < w && fp->x > 0 && fp->y < h && fp->y > 0) { prgba = palaka + ((int)fp->y * w + (int)fp->x) * 4; prgba[0] = b; prgba[1] = g; prgba[2] = r; } } return(--fs->life); } #ifdef __SSE2__ /* SSE2 optimized versions of glow_blur() and chromo_2x2_light() */ static void glow_blur(struct state *st) { unsigned int n, nn; unsigned char *ps = st->palaka1; unsigned char *pd = st->palaka2; unsigned char *pa = st->palaka1 - (st->width * 4); unsigned char *pb = st->palaka1 + (st->width * 4); __m128i xmm0, xmm1, xmm2, xmm3, xmm4; xmm0 = _mm_setzero_si128(); nn = st->width * st->height * 4; for (n = 0; n < nn; n+=16) { _mm_prefetch((const void *)&ps[n+16],_MM_HINT_T0); _mm_prefetch((const void *)&pa[n+16],_MM_HINT_T0); _mm_prefetch((const void *)&pb[n+16],_MM_HINT_T0); xmm1 = _mm_load_si128((const __m128i*)&ps[n]); xmm2 = xmm1; xmm1 = _mm_unpacklo_epi8(xmm1,xmm0); xmm2 = _mm_unpackhi_epi8(xmm2,xmm0); xmm3 = _mm_loadu_si128((const __m128i*)&ps[n+4]); xmm4 = xmm3; xmm3 = _mm_unpacklo_epi8(xmm3,xmm0); xmm4 = _mm_unpackhi_epi8(xmm4,xmm0); xmm3 = _mm_slli_epi16(xmm3,3); xmm4 = _mm_slli_epi16(xmm4,3); xmm1 = _mm_add_epi16(xmm1,xmm3); xmm2 = _mm_add_epi16(xmm2,xmm4); xmm3 = _mm_loadu_si128((const __m128i*)&ps[n+8]); xmm4 = xmm3; xmm3 = _mm_unpacklo_epi8(xmm3,xmm0); xmm4 = _mm_unpackhi_epi8(xmm4,xmm0); xmm1 = _mm_add_epi16(xmm1,xmm3); xmm2 = _mm_add_epi16(xmm2,xmm4); xmm3 = _mm_load_si128((const __m128i*)&pa[n]); xmm4 = xmm3; xmm3 = _mm_unpacklo_epi8(xmm3,xmm0); xmm4 = _mm_unpackhi_epi8(xmm4,xmm0); xmm1 = _mm_add_epi16(xmm1,xmm3); xmm2 = _mm_add_epi16(xmm2,xmm4); xmm3 = _mm_loadu_si128((const __m128i*)&pa[n+4]); xmm4 = xmm3; xmm3 = _mm_unpacklo_epi8(xmm3,xmm0); xmm4 = _mm_unpackhi_epi8(xmm4,xmm0); xmm1 = _mm_add_epi16(xmm1,xmm3); xmm2 = _mm_add_epi16(xmm2,xmm4); xmm3 = _mm_loadu_si128((const __m128i*)&pa[n+8]); xmm4 = xmm3; xmm3 = _mm_unpacklo_epi8(xmm3,xmm0); xmm4 = _mm_unpackhi_epi8(xmm4,xmm0); xmm1 = _mm_add_epi16(xmm1,xmm3); xmm2 = _mm_add_epi16(xmm2,xmm4); xmm3 = _mm_load_si128((const __m128i*)&pb[n]); xmm4 = xmm3; xmm3 = _mm_unpacklo_epi8(xmm3,xmm0); xmm4 = _mm_unpackhi_epi8(xmm4,xmm0); xmm1 = _mm_add_epi16(xmm1,xmm3); xmm2 = _mm_add_epi16(xmm2,xmm4); xmm3 = _mm_loadu_si128((const __m128i*)&pb[n+4]); xmm4 = xmm3; xmm3 = _mm_unpacklo_epi8(xmm3,xmm0); xmm4 = _mm_unpackhi_epi8(xmm4,xmm0); xmm1 = _mm_add_epi16(xmm1,xmm3); xmm2 = _mm_add_epi16(xmm2,xmm4); xmm3 = _mm_loadu_si128((const __m128i*)&pb[n+8]); xmm4 = xmm3; xmm3 = _mm_unpacklo_epi8(xmm3,xmm0); xmm4 = _mm_unpackhi_epi8(xmm4,xmm0); xmm1 = _mm_add_epi16(xmm1,xmm3); xmm2 = _mm_add_epi16(xmm2,xmm4); xmm3 = xmm1; xmm4 = xmm2; xmm1 = _mm_srli_epi16(xmm1,4); xmm2 = _mm_srli_epi16(xmm2,4); xmm3 = _mm_srli_epi16(xmm3,3); xmm4 = _mm_srli_epi16(xmm4,3); xmm1 = _mm_packus_epi16(xmm1,xmm2); xmm3 = _mm_packus_epi16(xmm3,xmm4); _mm_storeu_si128((__m128i*)&ps[n+4], xmm1); _mm_storeu_si128((__m128i*)&pd[n+4], xmm3); } } static void chromo_2x2_light(struct state *st) { __m128 xmm0, xmm1, xmm2, xmm3, xmm4, xmm5, xmm6; __m128i xmi4, xmi5, xmi6, xmi7; unsigned int x, y, v = 0; unsigned int nl = st->width * 4; unsigned char *mem = st->palaka2; fireshell *fs = st->fireshell_array; xmm0 = _mm_setr_ps(fs[0].flash_b, fs[0].flash_g, fs[0].flash_r, 0.0); xmm1 = _mm_setr_ps(fs[1].flash_b, fs[1].flash_g, fs[1].flash_r, 0.0); xmm2 = _mm_setr_ps(fs[2].flash_b, fs[2].flash_g, fs[2].flash_r, 0.0); xmm3 = _mm_setr_ps(fs[3].flash_b, fs[3].flash_g, fs[3].flash_r, 0.0); for (y = st->height/2; y; y--, mem += nl) { for (x = st->width/4; x; x--, v += 8, mem += 16) { xmm4 = _mm_set1_ps(st->light_map[v+0]); xmm5 = xmm0; xmm5 = _mm_mul_ps(xmm5,xmm4); xmm4 = _mm_set1_ps(st->light_map[v+1]); xmm4 = _mm_mul_ps(xmm4,xmm1); xmm5 = _mm_add_ps(xmm5,xmm4); xmm4 = _mm_set1_ps(st->light_map[v+2]); xmm4 = _mm_mul_ps(xmm4,xmm2); xmm5 = _mm_add_ps(xmm5,xmm4); xmm4 = _mm_set1_ps(st->light_map[v+3]); xmm4 = _mm_mul_ps(xmm4,xmm3); xmm5 = _mm_add_ps(xmm5,xmm4); xmm4 = _mm_set1_ps(st->light_map[v+4]); xmm6 = xmm0; xmm6 = _mm_mul_ps(xmm6,xmm4); xmm4 = _mm_set1_ps(st->light_map[v+5]); xmm4 = _mm_mul_ps(xmm4,xmm1); xmm6 = _mm_add_ps(xmm6,xmm4); xmm4 = _mm_set1_ps(st->light_map[v+6]); xmm4 = _mm_mul_ps(xmm4,xmm2); xmm6 = _mm_add_ps(xmm6,xmm4); xmm4 = _mm_set1_ps(st->light_map[v+7]); xmm4 = _mm_mul_ps(xmm4,xmm3); xmm6 = _mm_add_ps(xmm6,xmm4); xmi6 = _mm_cvtps_epi32(xmm5); xmi7 = _mm_cvtps_epi32(xmm6); xmi6 = _mm_packs_epi32(xmi6,xmi6); xmi7 = _mm_packs_epi32(xmi7,xmi7); xmi4 = _mm_load_si128((const __m128i*) mem); xmi5 = _mm_unpacklo_epi8(xmi5,xmi4); xmi5 = _mm_srli_epi16(xmi5,8); xmi4 = _mm_unpackhi_epi8(xmi4,xmi4); xmi4 = _mm_srli_epi16(xmi4,8); xmi5 = _mm_add_epi16(xmi5,xmi6); xmi4 = _mm_add_epi16(xmi4,xmi7); xmi5 = _mm_packus_epi16(xmi5,xmi4); _mm_store_si128((__m128i*) mem, xmi5); xmi4 = _mm_load_si128((const __m128i*) &mem[nl]); xmi5 = _mm_unpacklo_epi8(xmi5,xmi4); xmi5 = _mm_srli_epi16(xmi5,8); xmi4 = _mm_unpackhi_epi8(xmi4,xmi4); xmi4 = _mm_srli_epi16(xmi4,8); xmi5 = _mm_add_epi16(xmi5,xmi6); xmi4 = _mm_add_epi16(xmi4,xmi7); xmi5 = _mm_packus_epi16(xmi5,xmi4); _mm_store_si128((__m128i*) &mem[nl], xmi5); } } } #else static void glow_blur(struct state *st) { unsigned int n, q; unsigned char *pm = st->palaka1; unsigned char *po = st->palaka2; unsigned char *pa = pm - (st->width * 4); unsigned char *pb = pm + (st->width * 4); /* unsigned int rgba = 0; for (n = st->width*st->height*4; n; n--, pm++, pa++, pb++, po++) { if(++rgba > 3) { rgba = 0; continue; } q = pm[0] + pm[4] * 8 + pm[8] + pa[0] + pa[4] + pa[8] + pb[0] + pb[4] + pb[8]; pm[4] = q >> 4; po[4] = q > 2047 ? 255 : q >> 3; } --- using unrolled version ------------ */ for (n = st->width*st->height*4; n; n-=4) { q = pm[0] + pm[4] * 8 + pm[8] + pa[0] + pa[4] + pa[8] + pb[0] + pb[4] + pb[8]; pm[4] = q >> 4; po[4] = q > 2047 ? 255 : q >> 3; q = pm[1] + pm[5] * 8 + pm[9] + pa[1] + pa[5] + pa[9] + pb[1] + pb[5] + pb[9]; pm[5] = q >> 4; po[5] = q > 2047 ? 255 : q >> 3; q = pm[2] + pm[6] * 8 + pm[10] + pa[2] + pa[6] + pa[10] + pb[2] + pb[6] + pb[10]; pm[6] = q >> 4; po[6] = q > 2047 ? 255 : q >> 3; pm+=4, pa+=4, pb+=4, po+=4; } } static inline unsigned char addbs(unsigned char c, unsigned int i) { i += c; return(i > 255 ? 255 : i); } static void chromo_2x2_light(struct state *st) { unsigned int n, x, y, v = 0; unsigned int nl = st->width * 4; unsigned char *mem = st->palaka2; float r, g, b; float rgb[SHELLCOUNT*4]; fireshell *fs = st->fireshell_array; for (n = 0, x = 0; n < SHELLCOUNT; n++, x += 4, fs++) { rgb[x ] = fs->flash_r; rgb[x+1] = fs->flash_g; rgb[x+2] = fs->flash_b; } for (y = st->height/2; y; y--) { for (x = st->width/2; x; x--, v += 4) { r = rgb[0] * st->light_map[v] + rgb[4] * st->light_map[v+1] + rgb[ 8] * st->light_map[v+2] + rgb[12] * st->light_map[v+3]; g = rgb[1] * st->light_map[v] + rgb[5] * st->light_map[v+1] + rgb[ 9] * st->light_map[v+2] + rgb[13] * st->light_map[v+3]; b = rgb[2] * st->light_map[v] + rgb[6] * st->light_map[v+1] + rgb[10] * st->light_map[v+2] + rgb[14] * st->light_map[v+3]; mem[0] = addbs(mem[0], b); mem[1] = addbs(mem[1], g); mem[2] = addbs(mem[2], r); mem[4] = addbs(mem[4], b); mem[5] = addbs(mem[5], g); mem[6] = addbs(mem[6], r); mem += nl; mem[0] = addbs(mem[0], b); mem[1] = addbs(mem[1], g); mem[2] = addbs(mem[2], r); mem[4] = addbs(mem[4], b); mem[5] = addbs(mem[5], g); mem[6] = addbs(mem[6], r); mem -= nl - 8; } mem += nl; } } #endif static void resize(struct state *st) { unsigned int n; fireshell *fs = st->fireshell_array; XWindowAttributes xwa; XGetWindowAttributes (st->dpy, st->window, &xwa); xwa.width -= xwa.width % 4; xwa.height -= xwa.height % 2; st->width = xwa.width; st->height = xwa.height; if (st->verbose) { printf("resolution: %d x %d \n",st->width,st->height); } XSync(st->dpy, 0); if (st->xim) { if (st->xim->data == (char *)st->palaka2) st->xim->data = NULL; XDestroyImage(st->xim); XSync(st->dpy, 0); free(st->mem2); free(st->mem1); } st->xim = XCreateImage(st->dpy, xwa.visual, xwa.depth, ZPixmap, 0, 0, st->width, st->height, 8, 0); if (!st->xim) return; #ifdef __SSE2___ABANDONED /* causes __ERROR_use_memset_not_bzero_in_xscreensaver__ */ st->mem1 = _mm_malloc(((st->height + 2) * st->width + 8)*4, 16); bzero(st->mem1, ((st->height + 2) * st->width + 8)*4); st->mem2 = _mm_malloc(((st->height + 2) * st->width + 8)*4, 16); bzero(st->mem2, ((st->height + 2) * st->width + 8)*4); #else st->mem1 = calloc((st->height + 2) * st->width + 8, 4); st->mem2 = calloc((st->height + 2) * st->width + 8, 4); #endif st->palaka1 = (unsigned char *) st->mem1 + (st->width * 4 + 16); st->palaka2 = (unsigned char *) st->mem2 + (st->width * 4 + 16); if (xwa.depth >= 24) { st->xim->data = (char *)st->palaka2; } else { st->xim->data = calloc(st->height, st->xim->bytes_per_line); } if (st->light_map) free(st->light_map); st->light_map = calloc((st->width * st->height * SHELLCOUNT)/4, sizeof(float)); for (n = 0; n < SHELLCOUNT; n++, fs++) { render_light_map(st, fs); } } static void put_image(struct state *st) { int x,y,i,j; unsigned char r, g, b; if (!st->xim) return; i = 0; j = 0; if (st->depth==16) { if(st->bigendian) for (y=0; yxim->height; y++) for (x=0; xxim->width; x++) { r = st->palaka2[j++]; g = st->palaka2[j++]; b = st->palaka2[j++]; j++; st->xim->data[i++] = (g&224)>>5 | (r&248); st->xim->data[i++] = (b&248)>>3 | (g&28)<<3; } else for (y=0; yxim->height; y++) for (x=0; xxim->width; x++) { r = st->palaka2[j++]; g = st->palaka2[j++]; b = st->palaka2[j++]; j++; st->xim->data[i++] = (b&248)>>3 | (g&28)<<3; st->xim->data[i++] = (g&224)>>5 | (r&248); } } if (st->depth==15) { if(st->bigendian) for (y=0; yxim->height; y++) for (x=0; xxim->width; x++) { r = st->palaka2[j++]; g = st->palaka2[j++]; b = st->palaka2[j++]; j++; st->xim->data[i++] = (g&192)>>6 | (r&248)>>1; st->xim->data[i++] = (b&248)>>3 | (g&56)<<2; } else for (y=0; yxim->height; y++) for (x=0; xxim->width; x++) { r = st->palaka2[j++]; g = st->palaka2[j++]; b = st->palaka2[j++]; j++; st->xim->data[i++] = (b&248)>>3 | (g&56)<<2; st->xim->data[i++] = (g&192)>>6 | (r&248)>>1; } } if (st->depth==8) { for (y=0; yxim->height; y++) for (x=0; xxim->width; x++) { r = st->palaka2[j++]; g = st->palaka2[j++]; b = st->palaka2[j++]; j++; st->xim->data[i++] = (((7*g)/256)*36)+(((6*r)/256)*6)+((6*b)/256); } } XPutImage(st->dpy,st->window,st->gc,st->xim,0,0,0,0,st->xim->width,st->xim->height); } static void * fireworkx_init (Display *dpy, Window win) { struct state *st = (struct state *) calloc (1, sizeof(*st)); unsigned int n; Visual *vi; Colormap cmap; Bool writable; XWindowAttributes xwa; XGCValues gcv; firepix *fp; fireshell *fs; st->dpy = dpy; st->window = win; st->xim = NULL; st->flash_on = 1; st->shoot = 0; st->width = 0; st->height = 0; st->max_shell_life = SHELL_LIFE_DEFAULT; st->flash_fade = 0.995; st->light_map = NULL; st->palaka1 = NULL; st->palaka2 = NULL; st->flash_on = get_boolean_resource(st->dpy, "flash" , "Boolean"); st->shoot = get_boolean_resource(st->dpy, "shoot" , "Boolean"); st->verbose = get_boolean_resource(st->dpy, "verbose" , "Boolean"); st->max_shell_life = get_integer_resource(st->dpy, "maxlife" , "Integer"); /* transition from xscreensaver <= 5.20 */ if (st->max_shell_life > 100) st->max_shell_life = 100; st->delay = get_integer_resource(st->dpy, "delay" , "Integer"); st->max_shell_life = pow(10.0,(st->max_shell_life/50.0)+2.7); if(st->max_shell_life < 1000) st->flash_fade = 0.998; if(st->verbose) { printf("Fireworkx %s - Pyrotechnics explosions simulation \n", FWXVERSION); printf("Copyright (GPL) 1999-2013 Rony B Chandran \n\n"); printf("url: http://www.ronybc.com \n\n"); printf("Life = %u\n", st->max_shell_life); #ifdef __SSE2__ printf("Using SSE2 optimization.\n"); #endif } XGetWindowAttributes(st->dpy,win,&xwa); st->depth = xwa.depth; vi = xwa.visual; cmap = xwa.colormap; st->bigendian = (ImageByteOrder(st->dpy) == MSBFirst); if(st->depth==8) { st->colors = (XColor *) calloc(sizeof(XColor),st->ncolors+1); writable = False; make_smooth_colormap(xwa.screen, vi, cmap, st->colors, &st->ncolors, False, &writable, True); } st->gc = XCreateGC(st->dpy, win, 0, &gcv); fs = calloc(SHELLCOUNT, sizeof(fireshell)); fp = calloc(PIXCOUNT * SHELLCOUNT, sizeof(firepix)); st->fireshell_array = fs; XGetWindowAttributes (st->dpy, st->window, &xwa); st->depth = xwa.depth; resize(st); /* initialize palakas */ for (n = 0; n < SHELLCOUNT; n++, fs++) { fs->seq_number = n; fs->fpix = fp; recycle (st, fs, rnd(st->width), rnd(st->height)); fp += PIXCOUNT; } return st; } static unsigned long fireworkx_draw (Display *dpy, Window win, void *closure) { struct state *st = (struct state *) closure; fireshell *fs; unsigned int n, q; for (q = FTWEAK; q; q--) { fs = st->fireshell_array; for (n = 0; n < SHELLCOUNT; n++, fs++) { if (!explode(st, fs)) { if (st->button_down_p) st->deferred++; else recycle(st, fs, rnd(st->width), rnd(st->height)); } } } while (!st->button_down_p && st->deferred) { st->deferred--; recycle_oldest(st, rnd(st->width), rnd(st->height)); } glow_blur(st); if (st->flash_on) { chromo_2x2_light(st); } put_image(st); return st->delay; } static void fireworkx_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; resize(st); } static Bool fireworkx_event (Display *dpy, Window window, void *closure, XEvent *event) { struct state *st = (struct state *) closure; if (event->type == ButtonPress) { recycle_oldest(st, event->xbutton.x, event->xbutton.y); st->button_down_p = True; return True; } else if (event->type == ButtonRelease) { st->button_down_p = False; return True; } return False; } static void fireworkx_free (Display *dpy, Window window, void *closure) { struct state *st = (struct state *) closure; free(st->mem2); free(st->mem1); free(st->fireshell_array->fpix); free(st->fireshell_array); } static const char *fireworkx_defaults [] = { ".background: black", ".foreground: white", "*delay: 10000", /* never default to zero! */ "*maxlife: 32", "*flash: True", "*shoot: False", "*verbose: False", 0 }; static XrmOptionDescRec fireworkx_options [] = { { "-delay", ".delay", XrmoptionSepArg, 0 }, { "-maxlife", ".maxlife", XrmoptionSepArg, 0 }, { "-no-flash", ".flash", XrmoptionNoArg, "False" }, { "-shoot", ".shoot", XrmoptionNoArg, "True" }, { "-verbose", ".verbose", XrmoptionNoArg, "True" }, { 0, 0, 0, 0 } }; XSCREENSAVER_MODULE ("Fireworkx", fireworkx) xscreensaver-5.36/hacks/fiberlamp.c000644 000767 000024 00000030615 12717746120 017350 0ustar00jwzstaff000000 000000 /* -*- Mode: C; tab-width: 4 -*- */ /* fiberlamp --- A Fiber Optic Lamp */ #if 0 static const char sccsid[] = "@(#)fiberlamp.c 5.00 2000/11/01 xlockmore"; #endif /*- * Copyright (c) 2005 by Tim Auckland * * Permission to use, copy, modify, and distribute this software and its * documentation for any purpose and without fee is hereby granted, * provided that the above copyright notice appear in all copies and that * both that copyright notice and this permission notice appear in * supporting documentation. * * This file is provided AS IS with no warranties of any kind. The author * shall have no liability with respect to the infringement of copyrights, * trade secrets or any patents by this file or any part thereof. In no * event will the author be liable for any lost revenue or profits or * other special, indirect and consequential damages. * * "fiberlamp" shows Fiber Optic Lamp. Since there is no closed-form * solution to the large-amplitude cantilever equation, the flexible * fiber is modeled as a set of descrete nodes. * * Revision History: * 13-Jan-2005: Initial development. */ #ifdef STANDALONE #define MODE_fiberlamp #define DEFAULTS "*delay: 10000 \n" \ "*count: 500 \n" \ "*cycles: 10000 \n" \ "*ncolors: 64 \n" \ "*fpsTop: true \n" \ # define UNIFORM_COLORS # define fiberlamp_handle_event 0 # include "xlockmore.h" /* in xscreensaver distribution */ #else /* STANDALONE */ # include "xlock.h" /* in xlockmore distribution */ #endif /* STANDALONE */ #ifdef MODE_fiberlamp ENTRYPOINT ModeSpecOpt fiberlamp_opts = {0, (XrmOptionDescRec *) NULL, 0, (argtype *) NULL, (OptionStruct *) NULL}; #ifdef USE_MODULES ModStruct fiberlamp_description = {"fiberlamp", "init_fiberlamp", "draw_fiberlamp", "release_fiberlamp", "draw_fiberlamp", "change_fiberlamp", (char *) NULL, &fiberlamp_opts, 1000, 500, 10000, 0, 64, 1.0, "", "Shows a Fiber Optic Lamp", 0, NULL}; #endif #define SPREAD (30.0) /* Angular spread at the base */ #define SCALE (MI_WIDTH(mi)/2) /* Screen size */ #define NODES (20L) /* Number of nodes in a fiber. Variable with range 10 .. 30, if desired. High values have stability problems unless you use small DT */ /* Physics parameters. Tune carefully to keep realism and avoid instability*/ #define DT (0.5) /* Time increment: Low is slow, High is less stable. */ #define PY (0.12) /* Rigidity: Low droops, High is stiff. */ #define DAMPING (0.055) /* Damping: Low allows oscillations, High is boring. */ #undef PLAN /* Plan view (for debugging) */ #undef CHECKCOLORWHEEL /* Plan view with no spread */ #define DRAND(v) (LRAND()/MAXRAND*(v)) /* double random 0 - v */ /* Length of nodes. Uniform except for shorter notes at the tips for colour highlights. Sum from 0..NODES-1 should exactly 1.0 */ #define LEN(A) ((Acx = (DRAND(SCALE/4)-SCALE/8)/SCALE; /* Knock the lamp */ fl->count = 0; /* Reset counter */ if (fl->dbufp) { XSetForeground(MI_DISPLAY(mi), MI_GC(mi), MI_BLACK_PIXEL(mi)); XFillRectangle(MI_DISPLAY(mi), fl->buffer, MI_GC(mi), 0, 0, MI_WIDTH(mi), MI_HEIGHT(mi)); } } static void free_fiber(fiberlampstruct *fl) { if (fl->fiber) { int f; for (f = 0; f < fl->nfibers; f++) { fiberstruct *fs = fl->fiber + f; if (fs->node) free(fs->node); if (fs->draw) free(fs->draw); } free(fl->fiber); fl->fiber = NULL; } } static void free_fiberlamp(ModeInfo *mi, fiberlampstruct *fl) { if (fl->buffer != None && fl->dbufp) { XFreePixmap(MI_DISPLAY(mi), fl->buffer); fl->buffer = None; } free_fiber(fl); } ENTRYPOINT void init_fiberlamp(ModeInfo * mi) { fiberlampstruct *fl; if (fiberlamps == NULL) { if ((fiberlamps = (fiberlampstruct *) calloc(MI_NUM_SCREENS(mi), sizeof (fiberlampstruct))) == NULL) return; } fl = &fiberlamps[MI_SCREEN(mi)]; /* Create or Resize double buffer */ #ifdef HAVE_JWXYZ /* Don't second-guess Quartz's double-buffering */ fl->dbufp = False; #else fl->dbufp = True; #endif if(fl->buffer != None && fl->buffer != MI_WINDOW(mi) && fl->dbufp) XFreePixmap(MI_DISPLAY(mi), fl->buffer); if(fl->dbufp) { fl->buffer = XCreatePixmap(MI_DISPLAY(mi), MI_WINDOW(mi), MI_WIDTH(mi), MI_HEIGHT(mi), MI_DEPTH(mi)); if (fl->buffer == None) { free_fiberlamp(mi, fl); return; } } else { fl->buffer = MI_WINDOW(mi); } XSetForeground(MI_DISPLAY(mi), MI_GC(mi), MI_BLACK_PIXEL(mi)); XFillRectangle(MI_DISPLAY(mi), fl->buffer, MI_GC(mi), 0, 0, MI_WIDTH(mi), MI_HEIGHT(mi)); if(fl->init) /* Nothing else to do (probably a resize) */ return; fl->init = True; fl->nfibers = MI_COUNT(mi); /* Allocate fibers */ if((fl->fiber = (fiberstruct*) calloc(fl->nfibers, sizeof (fiberstruct))) == NULL) { free_fiberlamp(mi, fl); return; } else { int f; for(f = 0; f < fl->nfibers; f++) { fiberstruct *fs = fl->fiber + f; if((fs->node = (nodestruct*) calloc(NODES, sizeof (nodestruct))) == NULL ||(fs->draw = (XPoint*) calloc(NODES, sizeof (XPoint))) == NULL) { free_fiberlamp(mi, fl); return; } } } { int f, i; for(f = 0; f < fl->nfibers; f++) { double phi = M_PI/180 * DRAND(SPREAD); double eta = DRAND(2*M_PI) - M_PI; for(i = 0; i < NODES; i++) { nodestruct *n = &fl->fiber[f].node[i]; n->phi = phi; n->phidash = 0; n->eta = eta; n->etadash = 0; } fl->fiber[f].node[0].etadash = 0.002/DT; fl->fiber[f].node[0].y = 0; fl->fiber[f].node[0].z = 0; } } /* Set up rotation */ fl->psi = DRAND(2*M_PI); fl->dpsi = 0.01; /* no "NoExpose" events from XCopyArea wanted */ XSetGraphicsExposures(MI_DISPLAY(mi), MI_GC(mi), False); /* Make sure we're using 'thin' lines */ XSetLineAttributes(MI_DISPLAY(mi), MI_GC(mi), 0, LineSolid, CapNotLast, JoinMiter); #ifdef CHECKCOLORWHEEL /* Only interested in tips, leave the rest black */ fl->bright = fl->medium = fl->dim = MI_BLACK_PIXEL(mi); #else if(MI_NPIXELS(mi) > 2) { /* Set up colours for the fiber bodies. Tips handled seperately */ XColor c, t; if(XAllocNamedColor(MI_DISPLAY(mi), MI_COLORMAP(mi), "#E0E0C0", &c, &t)){ fl->bright = c.pixel; } else { fl->bright = MI_WHITE_PIXEL(mi); } if(XAllocNamedColor(MI_DISPLAY(mi), MI_COLORMAP(mi), "#808070", &c, &t)){ fl->medium = c.pixel; } else { fl->medium = MI_WHITE_PIXEL(mi); } if(XAllocNamedColor(MI_DISPLAY(mi), MI_COLORMAP(mi), "#404020", &c, &t)){ fl->dim = c.pixel; } else { fl->dim = MI_BLACK_PIXEL(mi); } } else { fl->bright = MI_WHITE_PIXEL(mi); fl->medium = MI_WHITE_PIXEL(mi); fl->dim = MI_BLACK_PIXEL(mi); } #endif /* Clear the background. */ MI_CLEARWINDOW(mi); change_fiberlamp(mi); } /* Used by xscreensaver. xlock just uses init_fiberlamp */ ENTRYPOINT void reshape_fiberlamp(ModeInfo * mi, int width, int height) { init_fiberlamp(mi); } /* sort fibers so they get drawn back-to-front, one bubble pass is enough as the order only changes slowly */ static void sort_fibers(fiberlampstruct *fl) { int i; for(i = 1; i < fl->nfibers; i++) { if (fl->fiber[i - 1].node[NODES - 1].z > fl->fiber[i].node[NODES - 1].z) { fiberstruct tmp = fl->fiber[i - 1]; fl->fiber[i - 1] = fl->fiber[i]; fl->fiber[i] = tmp; } } } ENTRYPOINT void draw_fiberlamp (ModeInfo * mi) { fiberlampstruct *fl; int f, i; int x, y; Window unused; short cx = MI_WIDTH(mi)/2; #if defined PLAN || defined CHECKCOLORWHEEL short cy = MI_HEIGHT(mi)/2; #else short cy = MI_HEIGHT(mi); #endif if (fiberlamps == NULL) return; fl = &fiberlamps[MI_SCREEN(mi)]; fl->psi += fl->dpsi; /* turn colorwheel */ XTranslateCoordinates(MI_DISPLAY(mi), MI_WINDOW(mi), RootWindow(MI_DISPLAY(mi),0/*#### MI_SCREEN(mi)*/), cx, cy, &x, &y, &unused); sort_fibers(fl); for(f = 0; f < fl->nfibers; f++) { fiberstruct *fs = fl->fiber + f; fs->node[0].eta += DT*fs->node[0].etadash; fs->node[0].x = fl->cx; /* Handle center movement */ /* Handle window move. NOTE, only x is deflected, since y doesn't directly affect the physics */ fs->node[NODES-2].x *= 0.1*(fl->ry - y); fs->node[NODES-2].x += 0.05*(fl->rx - x); /* 2nd order diff equation */ for(i = 1; i < NODES; i++) { nodestruct *n = fs->node+i; nodestruct *p = fs->node+i-1; double pload = 0; double eload = 0; double pstress = (n->phi - p->phi)*PY; double estress = (n->eta - p->eta)*PY; double dxi = n->x - p->x; double dzi = n->z - p->z; double li = sqrt(dxi*dxi + dzi*dzi)/LEN(i); double drag = DAMPING*LEN(i)*LEN(i)*NODES*NODES; if(li > 0) { int j; for(j = i+1; j < NODES; j++) { nodestruct *nn = fs->node+j; double dxj = nn->x - n->x; double dzj = nn->z - n->z; pload += LEN(j)*(dxi*dxj + dzi*dzj)/li; /* Radial load */ eload += LEN(j)*(dxi*dzj - dzi*dxj)/li; /* Transverse load */ /* Not a perfect simulation: in reality the transverse load is only indirectly coupled to the eta deflection, but of all the approaches I've tried this produces the most stable model and looks the most realistic. */ } } #ifndef CHECKCOLORWHEEL n->phidash += DT*(pload - pstress - drag*n->phidash)/LEN(i); n->phi += DT*n->phidash; #endif n->etadash += DT*(eload - estress - drag*n->etadash)/LEN(i); n->eta += DT*n->etadash; { double sp = sin(p->phi); double cp = cos(p->phi); double se = sin(p->eta); double ce = cos(p->eta); n->x = p->x + LEN(i-1) * ce * sp; n->y = p->y - LEN(i-1) * cp; n->z = p->z + LEN(i-1) * se * sp; } fs->draw[i-1].x = cx + MI_WIDTH(mi)/2*n->x; #if defined PLAN || defined CHECKCOLORWHEEL /* Plan */ fs->draw[i-1].y = cy + MI_WIDTH(mi)/2*n->z; #else /* Elevation */ fs->draw[i-1].y = cy + MI_WIDTH(mi)/2*n->y; #endif } MI_IS_DRAWN(mi) = True; /* Erase: this may only be erasing an off-screen buffer, but on a slow system it may still be faster than XFillRectangle() */ /* That's unpossible. -jwz */ } XSetForeground(MI_DISPLAY(mi), MI_GC(mi), MI_BLACK_PIXEL(mi)); XFillRectangle(MI_DISPLAY(mi), fl->buffer, MI_GC(mi), 0, 0, MI_WIDTH(mi), MI_HEIGHT(mi)); for(f = 0; f < fl->nfibers; f++) { fiberstruct *fs = fl->fiber + f; { double x = fs->node[1].x - fl->cx + 0.025; double y = fs->node[1].z + 0.02; double angle = atan2(y, x) + fl->psi; long tipcolor = (int)(MI_NPIXELS(mi)*angle/(2*M_PI)) % MI_NPIXELS(mi); long fibercolor; long tiplen; if (tipcolor < 0) tipcolor += MI_NPIXELS(mi); tipcolor = MI_PIXEL(mi, tipcolor); if(fs->node[1].z < 0.0) { /* Back */ tiplen = 2; fibercolor = fl->dim; }else if(fs->node[NODES-1].z < 0.7) { /* Middle */ tiplen = 3; fibercolor = fl->medium; } else { /* Front */ tiplen = 3; fibercolor = fl->bright; } XSetForeground(MI_DISPLAY(mi), MI_GC(mi), fibercolor); XDrawLines(MI_DISPLAY(mi), fl->buffer, MI_GC(mi), fs->draw, NODES-tiplen, CoordModeOrigin); XSetForeground(MI_DISPLAY(mi), MI_GC(mi), tipcolor); XDrawLines(MI_DISPLAY(mi), fl->buffer, MI_GC(mi), fs->draw+NODES-1-tiplen, tiplen, CoordModeOrigin); } } /* Update the screen from the double-buffer */ if (fl->dbufp) XCopyArea(MI_DISPLAY(mi), fl->buffer, MI_WINDOW(mi), MI_GC(mi), 0, 0, MI_WIDTH(mi), MI_HEIGHT(mi), 0, 0); fl->rx = x; fl->ry = y; if(fl->count++ > MI_CYCLES(mi)) { change_fiberlamp(mi); } } ENTRYPOINT void release_fiberlamp(ModeInfo * mi) { if (fiberlamps != NULL) { int screen; for (screen = 0; screen < MI_NUM_SCREENS(mi); screen++) free_fiberlamp(mi, &fiberlamps[screen]); free(fiberlamps); fiberlamps = (fiberlampstruct *) NULL; } } ENTRYPOINT void refresh_fiberlamp(ModeInfo * mi) { MI_CLEARWINDOW(mi); } XSCREENSAVER_MODULE ("Fiberlamp", fiberlamp) #endif /* MODE_fiberlamp */ xscreensaver-5.36/hacks/boxfit.c000664 000767 000024 00000035357 12717746012 016714 0ustar00jwzstaff000000 000000 /* xscreensaver, Copyright (c) 2005-2014 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. * * Boxfit -- fills space with a gradient of growing boxes or circles. * * Written by jwz, 21-Feb-2005. * * Inspired by http://www.levitated.net/daily/levBoxFitting.html */ #include "screenhack.h" #include #include "xpm-pixmap.h" #define ALIVE 1 #define CHANGED 2 #define UNDEAD 4 typedef struct { unsigned long fill_color; short x, y, w, h; char flags; } box; typedef struct { Display *dpy; Window window; XWindowAttributes xgwa; GC gc; unsigned long fg_color, bg_color; int border_size; int spacing; int inc; int mode; Bool circles_p; Bool growing_p; Bool color_horiz_p; int box_count; int boxes_size; int nboxes; box *boxes; XImage *image; int ncolors; XColor *colors; int delay; int countdown; Bool done_once; async_load_state *img_loader; Pixmap loading_pixmap; } state; static void reset_boxes (state *st) { st->nboxes = 0; st->growing_p = True; st->color_horiz_p = random() & 1; if (st->done_once && st->colors) free_colors (st->xgwa.screen, st->xgwa.colormap, st->colors, st->ncolors); if (!st->done_once) { char *s = get_string_resource (st->dpy, "mode", "Mode"); if (!s || !*s || !strcasecmp (s, "random")) st->mode = -1; else if (!strcasecmp (s, "squares") || !strcasecmp (s, "square")) st->mode = 0; else if (!strcasecmp (s, "circles") || !strcasecmp (s, "circle")) st->mode = 1; else { fprintf (stderr, "%s: mode must be random, squares, or circles, not '%s'\n", progname, s); exit (1); } } if (st->mode == -1) st->circles_p = random() & 1; else st->circles_p = (st->mode == 1); st->done_once = True; if (st->image || get_boolean_resource (st->dpy, "grab", "Boolean")) { if (st->image) XDestroyImage (st->image); st->image = 0; if (st->loading_pixmap) abort(); if (st->img_loader) abort(); if (!get_boolean_resource (st->dpy, "peek", "Boolean")) st->loading_pixmap = XCreatePixmap (st->dpy, st->window, st->xgwa.width, st->xgwa.height, st->xgwa.depth); XClearWindow (st->dpy, st->window); st->img_loader = load_image_async_simple (0, st->xgwa.screen, st->window, (st->loading_pixmap ? st->loading_pixmap : st->window), 0, 0); } else { st->ncolors = get_integer_resource (st->dpy, "colors", "Colors"); /* re-get */ if (st->ncolors < 1) st->ncolors = 1; make_smooth_colormap (st->xgwa.screen, st->xgwa.visual, st->xgwa.colormap, st->colors, &st->ncolors, True, 0, False); if (st->ncolors < 1) abort(); XClearWindow (st->dpy, st->window); } } static void reshape_boxes (state *st) { int i; XGetWindowAttributes (st->dpy, st->window, &st->xgwa); for (i = 0; i < st->nboxes; i++) { box *b = &st->boxes[i]; b->flags |= CHANGED; } } static void * boxfit_init (Display *dpy, Window window) { XGCValues gcv; state *st = (state *) calloc (1, sizeof (*st)); st->dpy = dpy; st->window = window; st->delay = get_integer_resource (dpy, "delay", "Integer"); XGetWindowAttributes (st->dpy, st->window, &st->xgwa); /* XSelectInput (dpy, window, st->xgwa.your_event_mask | ExposureMask);*/ if (! get_boolean_resource (dpy, "grab", "Boolean")) { st->ncolors = get_integer_resource (dpy, "colors", "Colors"); if (st->ncolors < 1) st->ncolors = 1; st->colors = (XColor *) malloc (sizeof(XColor) * st->ncolors); } st->inc = get_integer_resource (dpy, "growBy", "GrowBy"); st->spacing = get_integer_resource (dpy, "spacing", "Spacing"); st->border_size = get_integer_resource (dpy, "borderSize", "BorderSize"); st->fg_color = get_pixel_resource (st->dpy, st->xgwa.colormap, "foreground", "Foreground"); st->bg_color = get_pixel_resource (st->dpy, st->xgwa.colormap, "background", "Background"); if (st->inc < 1) st->inc = 1; if (st->border_size < 0) st->border_size = 0; gcv.line_width = st->border_size; gcv.background = st->bg_color; st->gc = XCreateGC (st->dpy, st->window, GCBackground|GCLineWidth, &gcv); st->box_count = get_integer_resource (dpy, "boxCount", "BoxCount"); if (st->box_count < 1) st->box_count = 1; st->nboxes = 0; st->boxes_size = st->box_count * 2; st->boxes = (box *) calloc (st->boxes_size, sizeof(*st->boxes)); reset_boxes (st); reshape_boxes (st); return st; } static Bool boxes_overlap_p (box *a, box *b, int pad) { /* Two rectangles overlap if the max of the tops is less than the min of the bottoms and the max of the lefts is less than the min of the rights. */ # undef MAX # undef MIN # define MAX(A,B) ((A)>(B)?(A):(B)) # define MIN(A,B) ((A)<(B)?(A):(B)) int maxleft = MAX(a->x - pad, b->x); int maxtop = MAX(a->y - pad, b->y); int minright = MIN(a->x + a->w + pad + pad - 1, b->x + b->w); int minbot = MIN(a->y + a->h + pad + pad - 1, b->y + b->h); return (maxtop < minbot && maxleft < minright); } static Bool circles_overlap_p (box *a, box *b, int pad) { int ar = a->w/2; /* radius */ int br = b->w/2; int ax = a->x + ar; /* center */ int ay = a->y + ar; int bx = b->x + br; int by = b->y + br; int d2 = (((bx - ax) * (bx - ax)) + /* distance between centers squared */ ((by - ay) * (by - ay))); int r2 = ((ar + br + pad) * /* sum of radii squared */ (ar + br + pad)); return (d2 < r2); } static Bool box_collides_p (state *st, box *a, int pad) { int i; /* collide with wall */ if (a->x - pad < 0 || a->y - pad < 0 || a->x + a->w + pad + pad >= st->xgwa.width || a->y + a->h + pad + pad >= st->xgwa.height) return True; /* collide with another box */ for (i = 0; i < st->nboxes; i++) { box *b = &st->boxes[i]; if (a != b && (st->circles_p ? circles_overlap_p (a, b, pad) : boxes_overlap_p (a, b, pad))) return True; } return False; } static unsigned int grow_boxes (state *st) { int inc2 = st->inc + st->spacing + st->border_size; int i; int live_count = 0; /* check box collisions, and grow if none. */ for (i = 0; i < st->nboxes; i++) { box *a = &st->boxes[i]; if (!(a->flags & ALIVE)) continue; if (box_collides_p (st, a, inc2)) { a->flags &= ~ALIVE; continue; } live_count++; a->x -= st->inc; a->y -= st->inc; a->w += st->inc + st->inc; a->h += st->inc + st->inc; a->flags |= CHANGED; } /* Add more boxes. */ while (live_count < st->box_count) { box *a; st->nboxes++; if (st->boxes_size <= st->nboxes) { st->boxes_size = (st->boxes_size * 1.2) + st->nboxes; st->boxes = (box *) realloc (st->boxes, st->boxes_size * sizeof(*st->boxes)); if (! st->boxes) { fprintf (stderr, "%s: out of memory (%d boxes)\n", progname, st->boxes_size); exit (1); } } a = &st->boxes[st->nboxes-1]; a->flags = CHANGED; for (i = 0; i < 100; i++) { a->x = inc2 + (random() % (st->xgwa.width - inc2)); a->y = inc2 + (random() % (st->xgwa.height - inc2)); a->w = 0; a->h = 0; if (! box_collides_p (st, a, inc2)) { a->flags |= ALIVE; live_count++; break; } } if (! (a->flags & ALIVE) || /* too many retries; */ st->nboxes > 65535) /* that's about 1MB of box structs. */ { st->nboxes--; /* go into "fade out" mode now. */ st->growing_p = False; return 2000000; /* make customizable... */ } /* Pick colors for this box */ if (st->image) { int w = st->image->width; int h = st->image->height; a->fill_color = XGetPixel (st->image, a->x % w, a->y % h); } else { int n = (st->color_horiz_p ? (a->x * st->ncolors / st->xgwa.width) : (a->y * st->ncolors / st->xgwa.height)); a->fill_color = st->colors [n % st->ncolors].pixel; } } return st->delay; } static unsigned int shrink_boxes (state *st) { int i; int remaining = 0; for (i = 0; i < st->nboxes; i++) { box *a = &st->boxes[i]; if (a->w <= 0 || a->h <= 0) continue; a->x += st->inc; a->y += st->inc; a->w -= st->inc + st->inc; a->h -= st->inc + st->inc; a->flags |= CHANGED; if (a->w < 0) a->w = 0; if (a->h < 0) a->h = 0; if (a->w > 0 && a->h > 0) remaining++; } if (remaining == 0) { reset_boxes (st); return 1000000; } else { return st->delay; } } static void draw_boxes (state *st) { int i; for (i = 0; i < st->nboxes; i++) { box *b = &st->boxes[i]; if (b->flags & UNDEAD) continue; if (! (b->flags & CHANGED)) continue; b->flags &= ~CHANGED; if (!st->growing_p) { /* When shrinking, black out an area outside of the border before re-drawing the box. */ int margin = st->inc + st->border_size; XSetForeground (st->dpy, st->gc, st->bg_color); if (st->circles_p) XFillArc (st->dpy, st->window, st->gc, b->x - margin, b->y - margin, b->w + (margin*2), b->h + (margin*2), 0, 360*64); else XFillRectangle (st->dpy, st->window, st->gc, b->x - margin, b->y - margin, b->w + (margin*2), b->h + (margin*2)); if (b->w <= 0 || b->h <= 0) b->flags |= UNDEAD; /* really very dead now */ } if (b->w <= 0 || b->h <= 0) continue; XSetForeground (st->dpy, st->gc, b->fill_color); if (st->circles_p) XFillArc (st->dpy, st->window, st->gc, b->x, b->y, b->w, b->h, 0, 360*64); else XFillRectangle (st->dpy, st->window, st->gc, b->x, b->y, b->w, b->h); if (st->border_size > 0) { unsigned int bd = (st->image ? st->fg_color : st->colors [(b->fill_color + st->ncolors/2) % st->ncolors].pixel); XSetForeground (st->dpy, st->gc, bd); if (st->circles_p) XDrawArc (st->dpy, st->window, st->gc, b->x, b->y, b->w, b->h, 0, 360*64); else XDrawRectangle (st->dpy, st->window, st->gc, b->x, b->y, b->w, b->h); } } } static unsigned long boxfit_draw (Display *dpy, Window window, void *closure) { state *st = (state *) closure; int delay; if (st->img_loader) /* still loading */ { st->img_loader = load_image_async_simple (st->img_loader, 0, 0, 0, 0, 0); if (! st->img_loader) /* just finished */ { st->image = XGetImage (st->dpy, (st->loading_pixmap ? st->loading_pixmap : st->window), 0, 0, st->xgwa.width, st->xgwa.height, ~0L, ZPixmap); if (st->loading_pixmap) XFreePixmap (st->dpy, st->loading_pixmap); XSetWindowBackground (st->dpy, st->window, st->bg_color); if (st->loading_pixmap) XClearWindow (st->dpy, st->window); else st->countdown = 2000000; st->loading_pixmap = 0; } return st->delay; } if (st->countdown > 0) { st->countdown -= st->delay; if (st->countdown <= 0) { st->countdown = 0; XClearWindow (st->dpy, st->window); } return st->delay; } if (st->growing_p) { draw_boxes (st); delay = grow_boxes (st); } else { delay = shrink_boxes (st); draw_boxes (st); } return delay; } static void boxfit_reshape (Display *dpy, Window window, void *closure, unsigned int w, unsigned int h) { state *st = (state *) closure; reshape_boxes (st); } static Bool boxfit_event (Display *dpy, Window window, void *closure, XEvent *event) { state *st = (state *) closure; if (screenhack_event_helper (dpy, window, event)) { st->growing_p = !st->growing_p; return True; } return False; } static void boxfit_free (Display *dpy, Window window, void *closure) { } static const char *boxfit_defaults [] = { ".background: black", ".foreground: #444444", "*fpsSolid: true", "*delay: 20000", "*mode: random", "*colors: 64", "*boxCount: 50", "*growBy: 1", "*spacing: 1", "*borderSize: 1", "*grab: False", "*peek: False", "*grabDesktopImages: False", /* HAVE_JWXYZ */ "*chooseRandomImages: True", /* HAVE_JWXYZ */ #ifdef HAVE_MOBILE "*ignoreRotation: True", "*rotateImages: True", #endif 0 }; static XrmOptionDescRec boxfit_options [] = { { "-delay", ".delay", XrmoptionSepArg, 0 }, { "-colors", ".colors", XrmoptionSepArg, 0 }, { "-count", ".boxCount", XrmoptionSepArg, 0 }, { "-growby", ".growBy", XrmoptionSepArg, 0 }, { "-spacing", ".spacing", XrmoptionSepArg, 0 }, { "-border", ".borderSize", XrmoptionSepArg, 0 }, { "-mode", ".mode", XrmoptionSepArg, 0 }, { "-circles", ".mode", XrmoptionNoArg, "circles" }, { "-squares", ".mode", XrmoptionNoArg, "squares" }, { "-random", ".mode", XrmoptionNoArg, "random" }, { "-grab", ".grab", XrmoptionNoArg, "True" }, { "-no-grab", ".grab", XrmoptionNoArg, "False" }, { "-peek", ".peek", XrmoptionNoArg, "True" }, { "-no-peek", ".peek", XrmoptionNoArg, "False" }, { 0, 0, 0, 0 } }; XSCREENSAVER_MODULE ("BoxFit", boxfit) xscreensaver-5.36/hacks/interaggregate.c000644 000767 000024 00000056566 12717745640 020422 0ustar00jwzstaff000000 000000 /* * InterAggregate (dagraz@gmail.com) * Based on code from complexification.net Intersection Aggregate * http://www.complexification.net/gallery/machines/interAggregate/index.php * * Intersection Aggregate code: * j.tarbell May, 2004 * Albuquerque, New Mexico * complexification.net * * Also based on substrate, a port of j.tarbell's Substrate Art done * by dragorn@kismetwireless.net * * * Interesting command line options, all of which serve to * concentrate the painting in some way: * * -percent-orbits 100 -base-orbits 50 -base-on-center -growth-delay 0 * * Paint should be concentrated in the center of the canvas, orbiting * about it. -percent-orbits 100 implies -base-on-center, so that's * not really needed. * * * -percent-orbits 99 -base-orbits 50 -growth-delay 0 * * Like the above example, but the 'center' will rove about the screen. * * -percent-orbits 98 -base-orbits 50 -growth-delay 0 * * Like the above example, but there will be two roving centers. * * * TODO: * -fix alpha blending / byte ordering * * CHANGES * * * Directly based the hacks of: * * xscreensaver, Copyright (c) 1997, 1998, 2002 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. */ #include #include "screenhack.h" /* this program goes faster if some functions are inline. The following is * borrowed from ifs.c */ #if !defined( __GNUC__ ) && !defined(__cplusplus) && !defined(c_plusplus) #undef inline #define inline /* */ #endif #ifndef MIN #define MIN(x,y) ((x < y) ? x : y) #endif #ifndef MAX #define MAX(x,y) ((x < y) ? y : x) #endif static const char *interaggregate_defaults[] = { ".background: white", ".foreground: black", "*fpsSolid: true", "*maxCycles: 100000", #ifdef TIME_ME "*growthDelay: 0", #else "*growthDelay: 18000", #endif "*numCircles: 100", "*percentOrbits: 0", "*baseOrbits: 75", "*baseOnCenter: False", "*drawCenters: False", #ifdef HAVE_MOBILE "*ignoreRotation: True", #endif 0 }; static XrmOptionDescRec interaggregate_options[] = { {"-background", ".background", XrmoptionSepArg, 0}, {"-foreground", ".foreground", XrmoptionSepArg, 0}, {"-max-cycles", ".maxCycles", XrmoptionSepArg, 0}, {"-growth-delay", ".growthDelay", XrmoptionSepArg, 0}, {"-num-circles", ".numCircles", XrmoptionSepArg, 0}, {"-percent-orbits", ".percentOrbits", XrmoptionSepArg, 0}, {"-base-orbits", ".baseOrbits", XrmoptionSepArg, 0}, {"-base-on-center", ".baseOnCenter", XrmoptionNoArg, "true"}, {"-draw-centers", ".drawCenters", XrmoptionNoArg, "true"}, {0, 0, 0, 0} }; /* Raw colormap extracted from pollockEFF.gif */ #if 0 char *rgb_colormap[] = { "#FFFFFF", /* white */ "#000000", /* black */ "#000000", /* more black */ /* "#736451", */ "#4e3e2e", /* olive */ /* "#666666", */ "#694d35", /* camel */ "#b9a88c", /* tan */ 0 }; #endif static const char *rgb_colormap[] = { "#FFFFFF", /* white */ "#000000", /* more black */ "#000000", /* more black */ "#4e3e2e", /* olive */ "#694d35", /* camel */ "#b0a085", /* tan */ "#e6d3ae", 0 }; /* black white brown olive grey camel */ typedef enum { LINEAR, ORBIT } PathType; typedef struct { unsigned long color; double gain; double p; } SandPainter; typedef struct _circle { double radius; double x; double y; PathType path_type; /* for a linear path */ double dx; double dy; /* for orbital path */ double theta; double r; double dtheta; struct _circle* center; int num_painters; SandPainter* painters; } Circle; struct field { int height; int width; int num_circles; Circle* circles; int percent_orbits; int base_orbits; Bool base_on_center; /* used for orbits circling the center of the screen */ Circle center_of_universe; /* Raw map of pixels we need to keep for alpha blending */ unsigned long int *off_img; /* color parms */ int numcolors; unsigned long *parsedcolors; unsigned long fgcolor; unsigned long bgcolor; int visdepth; unsigned int cycles; double max_gain; /* for debugging */ Bool draw_centers; /* for profiling whatnot */ int possible_intersections; int intersection_count; }; static struct field * init_field(void) { struct field *f = (struct field*) malloc(sizeof(struct field)); if ( f == NULL ) { fprintf(stderr, "%s: Failed to allocate field!\n", progname); exit(1); } f->height = 0; f->width = 0; f->num_circles = 0; f->circles = NULL; f->percent_orbits = 0; f->base_orbits = 0; f->base_on_center = False; f->off_img = NULL; f->numcolors = 0; f->parsedcolors = NULL; f->fgcolor = 0; f->bgcolor = 0; f->visdepth = 0; f->cycles = 0; f->max_gain = 0.22; f->draw_centers = False; f->possible_intersections = 0; f->intersection_count = 0; return f; } /* Quick references to pixels in the offscreen map and in the crack grid */ #define ref_pixel(f, x, y) ((f)->off_img[(y) * (f)->width + (x)]) #define in_bounds(f, x, y) ((x >= 0) && (x < f->width) && (y >= 0) && (y < f->height)) /* Consider rewriting with XQueryColor, or ImageByteOrder */ static inline void point2rgb(int depth, unsigned long c, int *r, int *g, int *b) { switch(depth) { case 32: case 24: #ifdef HAVE_JWXYZ /* This program idiotically does not go through a color map, so we have to hardcode in knowledge of how jwxyz.a packs pixels! Fix it to go through st->colors[st->ncolors] instead! */ *r = (c & 0x00ff0000) >> 16; *g = (c & 0x0000ffff) >> 8; *b = (c & 0x000000ff); #else *b = c & 0xff; *g = (c & 0xff00) >> 8; *r = (c & 0xff0000) >> 16; #endif break; case 16: *b = (c & 0x1f) << 3; *g = ((c >> 5) & 0x3f) << 2; *r = ((c >> 11) & 0x1f) << 3; break; case 15: *b = (c & 0x1f) << 3; *g = ((c >> 5) & 0x1f) << 3; *r = ((c >> 10) & 0x1f) << 3; break; } } static inline unsigned long rgb2point(int depth, int r, int g, int b) { unsigned long ret = 0; switch(depth) { case 32: case 24: #ifdef HAVE_JWXYZ /* This program idiotically does not go through a color map, so we have to hardcode in knowledge of how jwxyz.a packs pixels! Fix it to go through st->colors[st->ncolors] instead! */ ret = 0xFF000000 | (r << 16) | (g << 8) | b; #else ret |= (r << 16) | (g << 8) | b; #endif break; case 16: ret = ((r>>3) << 11) | ((g>>2)<<5) | (b>>3); break; case 15: ret = ((r>>3) << 10) | ((g>>3)<<5) | (b>>3); break; } return ret; } /* alpha blended point drawing -- this is Not Right and will likely fail on * non-intel platforms as it is now, needs fixing */ static inline unsigned long trans_point(int x1, int y1, unsigned long myc, double a, struct field *f) { if (a >= 1.0) { ref_pixel(f, x1, y1) = myc; return myc; } else { int or=0, og=0, ob=0; int r=0, g=0, b=0; int nr, ng, nb; unsigned long c; c = ref_pixel(f, x1, y1); point2rgb(f->visdepth, c, &or, &og, &ob); point2rgb(f->visdepth, myc, &r, &g, &b); nr = or + (r - or) * a; ng = og + (g - og) * a; nb = ob + (b - ob) * a; c = rgb2point(f->visdepth, nr, ng, nb); ref_pixel(f, x1, y1) = c; return c; } } static inline void drawPoint(int x, int y, unsigned long color, double intensity, Display *dpy, Window window, GC fgc, struct field *f) { unsigned long c; while ( x >= f->width ) x -= f->width; while ( x < 0 ) x += f->width; while ( y >= f->height ) y -= f->height; while ( y < 0 ) y += f->height; /* if ( in_bounds(f, x, y) ) ... */ c = trans_point(x, y, color, intensity, f); XSetForeground(dpy, fgc, c); XDrawPoint(dpy, window, fgc, x, y); } static inline void paint(SandPainter* painter, double ax, double ay, double bx, double by, Display *dpy, Window window, GC fgc, struct field *f) { /* the sand painter */ double inc, sandp; int i; /* XXX try adding tpoint here, like orig */ /* jitter the painter's values */ painter->gain += frand(0.05) - 0.025; if ( painter->gain > f->max_gain ) painter->gain = -f->max_gain; else if ( painter->gain < -f->max_gain ) painter->gain = f->max_gain; painter->p += frand(0.1) - 0.05; if ( 0 < painter->p ) painter->p = 0; else if ( painter->p > 1.0 ) painter->p = 1.0; /* replace 0.1 with 1 / f->grains */ inc = painter->gain * 0.1; sandp = 0; for(i = 0; i <= 10; ++i) { int drawx, drawy; double sp, sm; double intensity = 0.1 - 0.009 * i; sp = sin(painter->p + sandp); drawx = ax + (bx - ax) * sp; drawy = ay + (by - ay) * sp; drawPoint(drawx, drawy, painter->color, intensity, dpy, window, fgc, f); sm = sin(painter->p - sandp); drawx = ax + (bx - ax) * sm; drawy = ay + (by - ay) * sm; drawPoint(drawx, drawy, painter->color, intensity, dpy, window, fgc, f); sandp += inc; } } static void build_colors(struct field *f, Display *dpy, XWindowAttributes *xgwa) { XColor tmpcolor; int i; /* Count the colors in our map and assign them in a horrifically inefficient * manner but it only happens once */ for( f->numcolors = 0; rgb_colormap[f->numcolors] != NULL; ++f->numcolors ) { ; } if (f->numcolors < 1) f->numcolors = 1; f->parsedcolors = (unsigned long *) calloc(f->numcolors, sizeof(unsigned long)); if ( f->parsedcolors == NULL ) { fprintf(stderr, "%s: Failed to allocate parsedcolors\n", progname); exit(1); } for(i = 0; i < f->numcolors; ++i) { if (!XParseColor(dpy, xgwa->colormap, rgb_colormap[i], &tmpcolor)) { fprintf(stderr, "%s: couldn't parse color %s\n", progname, rgb_colormap[i]); exit(1); } if (!XAllocColor(dpy, xgwa->colormap, &tmpcolor)) { fprintf(stderr, "%s: couldn't allocate color %s\n", progname, rgb_colormap[i]); exit(1); } f->parsedcolors[i] = tmpcolor.pixel; } } /* used when the window is resized */ static void build_img(struct field *f) { if (f->off_img) { free(f->off_img); f->off_img = NULL; } f->off_img = (unsigned long *) calloc(f->width * f->height, sizeof(unsigned long)); if ( f->off_img == NULL ) { fprintf(stderr, "%s: Failed to allocate off_img\n", progname); exit(1); } memset(f->off_img, f->bgcolor, sizeof(unsigned long) * f->width * f->height); } static void free_circles(struct field *f) { int i; if ( f->circles != NULL ) { for(i = 0; i < f->num_circles; ++i) { free (f->circles[i].painters); } free (f->circles); f->circles = NULL; } } static void build_field(Display *dpy, Window window, XWindowAttributes xgwa, GC fgc, struct field *f) { int i; int num_orbits; int base_orbits; int orbit_start; build_img(f); f->center_of_universe.x = f->width / 2.0; f->center_of_universe.y = f->height / 2.0; f->center_of_universe.r = MAX(f->width, f->height) / 2.0; num_orbits = (f->percent_orbits * f->num_circles) / 100; orbit_start = f->num_circles - num_orbits; base_orbits = orbit_start + (num_orbits * f->base_orbits) / 100; free_circles(f); f->circles = (Circle*) calloc(f->num_circles, sizeof(Circle)); if ( f->circles == NULL ) { fprintf(stderr, "%s: Failed to allocate off_img\n", progname); exit(1); } for(i = 0; i < f->num_circles; ++i) { int j; Circle *circle = f->circles + i; /* make this a pref */ if ( i >= orbit_start ) circle->path_type = ORBIT; else circle->path_type = LINEAR; if ( circle->path_type == LINEAR ) { circle->x = frand(f->width); circle->y = frand(f->height); circle->dx = frand(0.5) - 0.25; circle->dy = frand(0.5) - 0.25; /* circle->dy = 0; */ /* circle->r = f->height * (0.05 + frand(0.1)); */ circle->radius = 5 + frand(55); /* in case we want orbits based on lines */ circle->r = MIN(f->width, f->height) / 2.0; circle->center = NULL; } else /* == ORBIT */ { if (i < base_orbits ) { if ( f->base_on_center ) circle->center = &f->center_of_universe; else { circle->center = f->circles + ((int)frand(orbit_start - 0.1)); } circle->r = 1 + frand(MIN(f->width, f->height) / 2.0); /* circle->radius = 5 + frand(55); */ } else { /* give a preference for the earlier circles */ double p = frand(0.9); circle->center = f->circles + (int) (p*i); circle->r = 1 + 0.5 * circle->center->r + 0.5 * frand(circle->center->r); /* circle->r = 1 + frand(circle->center->r / 2); */ /* circle->radius = MAX(5, frand(circle->r)); */ /* circle->radius = 5 + frand(55); */ } circle->radius = 5 + frand(MIN(55, circle->r)); circle->dtheta = (frand(0.5) - 0.25) / circle->r; circle->theta = frand(2 * M_PI); circle->x = circle->r * cos(circle->theta) + circle->center->x; circle->y = circle->r * sin(circle->theta) + circle->center->y; } /* make this a command line option */ circle->num_painters = 3; circle->painters = (SandPainter*) calloc(circle->num_painters, sizeof(SandPainter)); if ( circle->painters == NULL ) { fprintf(stderr, "%s: failed to allocate painters", progname); exit(1); } for(j = 0; j < circle->num_painters; ++j) { SandPainter *painter = circle->painters + j; painter->gain = frand(0.09) + 0.01; painter->p = frand(1.0); painter->color = f->parsedcolors[(int)(frand(0.999) * f->numcolors)]; } } } static void moveCircles(struct field *f) { int i; for(i = 0; i < f->num_circles; ++i) { Circle *circle = f->circles + i; if ( circle->path_type == LINEAR ) { circle->x += circle->dx; circle->y += circle->dy; #if 0 if ( circle->x < -circle->radius ) circle->x = f->width + circle->radius; else if ( circle->x >= f->width + circle->radius ) circle->x = -circle->radius; if ( circle->y < -circle->radius ) circle->y = f->height + circle->radius; else if ( circle->y >= f->height + circle->radius ) circle->y = -circle->radius; #else if ( circle->x < 0 ) circle->x += f->width; else if ( circle->x >= f->width ) circle->x -= f->width; if ( circle->y < 0 ) circle->y += f->height; else if ( circle->y >= f->height ) circle->y -= f->height; #endif } else /* (circle->path_type == ORBIT) */ { circle->theta += circle->dtheta; if ( circle->theta < 0 ) circle->theta += 2 * M_PI; else if ( circle->theta > 2 * M_PI ) circle->theta -= 2 * M_PI; circle->x = circle->r * cos(circle->theta) + circle->center->x; circle->y = circle->r * sin(circle->theta) + circle->center->y; #if 0 if ( circle->x < -circle->radius ) circle->x += f->width + 2 * circle->radius; else if ( circle->x >= f->width + circle->radius ) circle->x -= f->width + 2 * circle->radius; if ( circle->y < -circle->radius ) circle->y += f->height + 2 * circle->radius; else if ( circle->y >= f->height + circle->radius ) circle->y -= f->height + 2 * circle->radius; #else if ( circle->x < 0 ) circle->x += f->width; else if ( circle->x >= f->width ) circle->x -= f->width; if ( circle->y < 0 ) circle->y += f->height; else if ( circle->y >= f->height ) circle->y -= f->height; #endif } } } static void drawIntersections(Display *dpy, Window window, GC fgc, struct field *f) { int i,j; /* One might be tempted to think 'hey, this is a crude algorithm * that is going to check each of the n (n-1) / 2 possible * intersections! Why not try bsp trees, quad trees, etc, etc, * etc' * * In practice the time spent drawing the intersection of two * circles dwarfs the time takes to check for intersection. * Profiling on a 640x480 screen with 100 circles shows possible * speed gains to be only a couple of percent. * * But hey, if you're bored, go have fun. Let me know how it * turns out. */ for(i = 0; i < f->num_circles; ++i) { Circle *c1 = f->circles + i; if ( !f->draw_centers ) { /* the default branch */ for(j = i + 1; j < f->num_circles; ++j) { double d, dsqr, dx, dy; Circle *c2 = f->circles + j; #ifdef TIME_ME ++f->possible_intersections; #endif dx = c2->x - c1->x; dy = c2->y - c1->y; dsqr = dx * dx + dy * dy; d = sqrt(dsqr); if ( (fabs(dx) < (c1->radius + c2->radius)) && (fabs(dy) < (c1->radius + c2->radius)) && ( d < (c1->radius + c2->radius) ) && ( d > fabs(c1->radius - c2->radius) ) ) { double d1, d2, r1sqr; double bx, by; double midpx, midpy; double int1x, int1y; double int2x, int2y; int s; /* woo-hoo. the circles are neither outside nor * inside each other. they intersect. * * Now, compute the coordinates of the points of * intersection */ #ifdef TIME_ME ++f->intersection_count; #endif /* unit vector in direction of c1 to c2 */ bx = dx / d; by = dy / d; r1sqr = c1->radius * c1->radius; /* distance from c1's center midpoint of intersection * points */ d1 = 0.5 * (r1sqr - c2->radius * c2->radius + dsqr) / d; midpx = c1->x + d1 * bx; midpy = c1->y + d1 * by; /* distance from midpoint to points of intersection */ d2 = sqrt(r1sqr - d1 * d1); int1x = midpx + d2 * by; int1y = midpy - d2 * bx; int2x = midpx - d2 * by; int2y = midpy + d2 * bx; for(s = 0; s < c1->num_painters; ++s) { paint(c1->painters + s, int1x, int1y, int2x, int2y, dpy, window, fgc, f); } } } } else /* f->draw_centers */ { XDrawPoint(dpy, window, fgc, c1->x, c1->y); } } } struct state { Display *dpy; Window window; unsigned int max_cycles; int growth_delay; GC fgc; XGCValues gcv; XWindowAttributes xgwa; struct field *f; }; static void * interaggregate_init (Display *dpy, Window window) { struct state *st = (struct state *) calloc (1, sizeof(*st)); #ifdef TIME_ME int frames; struct timeval tm1, tm2; double tdiff; #endif st->dpy = dpy; st->window = window; st->f = init_field(); st->growth_delay = (get_integer_resource(st->dpy, "growthDelay", "Integer")); st->max_cycles = (get_integer_resource(st->dpy, "maxCycles", "Integer")); st->f->num_circles = (get_integer_resource(st->dpy, "numCircles", "Integer")); st->f->percent_orbits = (get_integer_resource(st->dpy, "percentOrbits", "Integer")); st->f->base_orbits = (get_integer_resource(st->dpy, "baseOrbits", "Integer")); st->f->base_on_center = (get_boolean_resource(st->dpy, "baseOnCenter", "Boolean")); st->f->draw_centers = (get_boolean_resource(st->dpy, "drawCenters", "Boolean")); if (st->f->num_circles <= 1) { fprintf(stderr, "%s: Minimum number of circles is 2\n", progname); exit (1); } if ( (st->f->percent_orbits < 0) || (st->f->percent_orbits > 100) ) { fprintf(stderr, "%s: percent-oribts must be between 0 and 100\n", progname); exit (1); } if ( (st->f->base_orbits < 0) || (st->f->base_orbits > 100) ) { fprintf(stderr, "%s: base-oribts must be between 0 and 100\n", progname); exit (1); } if ( st->f->percent_orbits == 100 ) st->f->base_on_center = True; XGetWindowAttributes(st->dpy, st->window, &st->xgwa); build_colors(st->f, st->dpy, &st->xgwa); st->gcv.foreground = get_pixel_resource(st->dpy, st->xgwa.colormap, "foreground", "Foreground"); st->gcv.background = get_pixel_resource(st->dpy, st->xgwa.colormap, "background", "Background"); st->fgc = XCreateGC(st->dpy, st->window, GCForeground, &st->gcv); st->f->height = st->xgwa.height; st->f->width = st->xgwa.width; st->f->visdepth = st->xgwa.depth; st->f->fgcolor = st->gcv.foreground; st->f->bgcolor = st->gcv.background; /* Initialize stuff */ build_field(st->dpy, st->window, st->xgwa, st->fgc, st->f); #ifdef TIME_ME gettimeofday(&tm1, NULL); frames = 0; #endif return st; } static unsigned long interaggregate_draw (Display *dpy, Window window, void *closure) { struct state *st = (struct state *) closure; if ((st->f->cycles % 10) == 0) { /* Restart if the window size changes */ XGetWindowAttributes(st->dpy, st->window, &st->xgwa); if (st->f->height != st->xgwa.height || st->f->width != st->xgwa.width) { st->f->height = st->xgwa.height; st->f->width = st->xgwa.width; st->f->visdepth = st->xgwa.depth; build_field(st->dpy, st->window, st->xgwa, st->fgc, st->f); XSetForeground(st->dpy, st->fgc, st->gcv.background); XFillRectangle(st->dpy, st->window, st->fgc, 0, 0, st->xgwa.width, st->xgwa.height); XSetForeground(st->dpy, st->fgc, st->gcv.foreground); } } moveCircles(st->f); drawIntersections(st->dpy, st->window, st->fgc, st->f); st->f->cycles++; if (st->f->cycles >= st->max_cycles && st->max_cycles != 0) { build_field(st->dpy, st->window, st->xgwa, st->fgc, st->f); XSetForeground(st->dpy, st->fgc, st->gcv.background); XFillRectangle(st->dpy, st->window, st->fgc, 0, 0, st->xgwa.width, st->xgwa.height); XSetForeground(st->dpy, st->fgc, st->gcv.foreground); } #ifdef TIME_ME frames++; gettimeofday(&tm2, NULL); tdiff = (tm2.tv_sec - tm1.tv_sec) + (tm2.tv_usec - tm1.tv_usec) * 0.00001; if ( tdiff > 1 ) { fprintf(stderr, "fps: %d %f %f\n", frames, tdiff, frames / tdiff ); fprintf(stderr, "intersections: %d %d %f\n", f->intersection_count, f->possible_intersections, ((double)f->intersection_count) / f->possible_intersections); fprintf(stderr, "fpi: %f\n", ((double)frames) / f->intersection_count ); frames = 0; tm1.tv_sec = tm2.tv_sec; tm1.tv_usec = tm2.tv_usec; f->intersection_count = f->possible_intersections = 0; } #endif return st->growth_delay; } static void interaggregate_reshape (Display *dpy, Window window, void *closure, unsigned int w, unsigned int h) { } static Bool interaggregate_event (Display *dpy, Window window, void *closure, XEvent *event) { struct state *st = (struct state *) closure; if (screenhack_event_helper (dpy, window, event)) { st->f->height--; /* act like a resize */ return True; } return False; } static void interaggregate_free (Display *dpy, Window window, void *closure) { struct state *st = (struct state *) closure; free (st); } XSCREENSAVER_MODULE ("Interaggregate", interaggregate) xscreensaver-5.36/hacks/celtic.c000664 000767 000024 00000077203 12717725411 016660 0ustar00jwzstaff000000 000000 /* celtic, Copyright (c) 2006 Max Froumentin * * 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. * * A celtic pattern programme inspired by "Les Entrelacs Celtes", by * Christian Mercat, Dossier Pour La Science, no. 47, april/june 2005. * See */ #include #include "screenhack.h" #include "erase.h" #define SQRT_3 1.73205080756887729352 #undef assert #define assert(EXP) do { if (!((EXP))) abort(); } while(0) /*-----------------------------------------*/ struct params { unsigned long curve_width, shadow_width; double shape1, shape2; unsigned long margin; enum graph_type { polar, tgrid, kennicott, triangle } type; unsigned long edge_size; unsigned long cluster_size; /* only used if type is kennicott */ unsigned long delay; /* controls curve drawing speed (step delay * in microsecs) */ unsigned long nsteps; /* only if triangle: number of subdivisions along the side */ unsigned long nb_orbits; /* only used if type is polar */ unsigned long nb_nodes_per_orbit; /* only used if type is polar */ double angle; /* angle of rotation of the graph around the centre */ }; /*-----------------------------------------*/ typedef enum direction { CLOCKWISE=0, ANTICLOCKWISE=1 } Direction; /*-----------------------------------------*/ typedef struct array { int nb_elements; int nb_allocated_elements; int increment; void **elements; } *Array; typedef struct graph { Array nodes; Array edges; } *Graph; typedef struct edge_couple { int **array; int size; } *EdgeCouple; typedef struct pattern { double shape1, shape2; EdgeCouple ec; Graph graph; Array splines; int ncolors; } *Pattern; struct state { Display *dpy; Window window; eraser_state *eraser; int ncolors; XColor *colors; GC gc,shadow_gc,gc_graph; Bool showGraph; Pattern pattern; Graph graph; XWindowAttributes xgwa; int delay2; int reset, force_reset; double t; struct params params; }; static Array array_new(int increment) { Array new; assert(new=(Array)calloc(1,sizeof(struct array))); new->nb_elements=0; new->nb_allocated_elements=0; new->increment=increment; return new; } static void array_del(Array a, void (*free_element)(void*)) { int i; if (free_element) for (i=0;inb_elements;i++) free_element(a->elements[i]); free(a->elements); free(a); } static void array_add_element(Array a, void *element) { if (a->nb_elements == a->nb_allocated_elements) { /* we must allocate more */ a->nb_allocated_elements+=a->increment; a->elements=realloc(a->elements,a->nb_allocated_elements*sizeof(void *)); } a->elements[a->nb_elements++]=element; } /*-----------------------------------------*/ typedef struct node { double x,y; Array edges; } *Node; typedef struct edge { Node node1, node2; double angle1, angle2; } *Edge; /*-----------------------------------------*/ /* Node functions */ static Node node_new(double x, double y) { Node new; assert(new = (Node)calloc(1,sizeof(struct node))); new->x=x; new->y=y; new->edges = array_new(10); return new; } static void node_del(void *n) { /* not Node * because the function is passed to array_del */ array_del(((Node)n)->edges,NULL); free(n); } #if 0 static void node_to_s(Node n, FILE *f) { fprintf(f,"Node: %g %g\n",n->x,n->y); } #endif static void node_draw(struct state *st, Node n) { XDrawArc(st->dpy,st->window,st->gc_graph,(int)rint(n->x)-5,(int)rint(n->y)-5,10,10,0,360*64); } static void node_add_edge(Node n, Edge e) { array_add_element(n->edges,e); } /*-----------------------------------------*/ /* Edge functions */ static Edge edge_new(Node n1, Node n2) { Edge new; assert(new = (Edge)calloc(1,sizeof(struct edge))); new->node1=n1; new->node2=n2; new->angle1=atan2(new->node2->y - new->node1->y, new->node2->x - new->node1->x); if (new->angle1 < 0) new->angle1+=6.28; new->angle2=atan2(new->node1->y - new->node2->y, new->node1->x - new->node2->x); if (new->angle2 < 0) new->angle2+=6.28; return new; } static void edge_del(void *e) /* not Edge * because the function is passed to array_del */ { free(e); } #if 0 static void edge_to_s(Edge e, FILE *f) { fprintf(f,"Edge: (%g, %g), (%g, %g) angles: %g, %g\n", e->node1->x, e->node1->y, e->node2->x, e->node2->y, e->angle1, e->angle2); } #endif static void edge_draw(struct state *st, Edge e) { XDrawLine(st->dpy,st->window,st->gc_graph, e->node1->x, e->node1->y, e->node2->x, e->node2->y); } static double edge_angle(Edge e, Node n) { /* returns the angle of the edge at Node n */ assert(n==e->node1 || n==e->node2); if (n==e->node1) return e->angle1; else return e->angle2; } static Node edge_other_node(Edge e, Node n) { assert(n==e->node1 || n==e->node2); if (n==e->node1) return e->node2; else return e->node1; } static double edge_angle_to(Edge e, Edge e2, Node node, Direction direction) { /* returns the absolute angle from this edge to "edge2" around "node" following "direction" */ double a; if (direction==CLOCKWISE) a=edge_angle(e,node) - edge_angle(e2,node); else a=edge_angle(e2,node) - edge_angle(e,node); if (a<0) return a+2*M_PI; else return a; } /*-----------------------------------------*/ static Graph graph_new(struct state *st) { Graph new; assert(new = (Graph)calloc(1,sizeof(struct graph))); new->nodes = array_new(100); new->edges = array_new(100); return new; } static void graph_del(Graph g) { array_del(g->nodes, &node_del); array_del(g->edges, &edge_del); free(g); } static void graph_add_node(Graph g, Node n) { array_add_element(g->nodes, n); } static void graph_add_edge(Graph g, Edge e) { array_add_element(g->edges, e); /* for each node n of e, add n to pointer e */ node_add_edge(e->node1, e); node_add_edge(e->node2, e); } static Edge graph_next_edge_around(Graph g, Node n, Edge e, Direction direction) { /* return the next edge after e around node n clockwise */ double angle, minangle=20; Edge next_edge = e, edge; int i; for (i=0;iedges->nb_elements;i++) { edge=n->edges->elements[i]; if (edge != e) { angle = edge_angle_to(e,edge,n,direction); if (angle < minangle) { next_edge=edge; minangle=angle; } } } return next_edge; } #if 0 static void graph_to_s(Graph g, FILE *f) { int i; for (i=0;inodes->nb_elements;i++) node_to_s(g->nodes->elements[i],f); for (i=0;iedges->nb_elements;i++) edge_to_s(g->edges->elements[i],f); } #endif static void graph_draw(struct state *st, Graph g) { int i; for (i=0;inodes->nb_elements;i++) node_draw(st, g->nodes->elements[i]); for (i=0;iedges->nb_elements;i++) edge_draw(st, g->edges->elements[i]); } static void graph_rotate(Graph g, double angle, int cx, int cy) { /* rotate all the nodes of the graph around the centre */ int i; float c=cos(angle),s=sin(angle),x,y; Node n; for (i=0;inodes->nb_elements;i++) { n=g->nodes->elements[i]; x=n->x; y=n->y; n->x = (x-cx)*c-(y-cy)*s + cx; n->y = (x-cx)*s+(y-cy)*c + cy; } } /*---------------------------*/ static Graph make_polar_graph(struct state *st, int xmin, int ymin, int width, int height, int nbp, /* number of points on each orbit */ int nbo /* number of orbits */) /* make a simple grid graph, with edges present or absent randomly */ { int cx = width/2+xmin, cy=height/2+ymin; /* centre */ int os = (widthsegments=array_new(30); new->color=color; return new; } static void spline_del(void *s) { array_del(((Spline)s)->segments,&free); free(s); } static void spline_add_segment(Spline s, double x1, double y1, double x2, double y2, double x3, double y3, double x4, double y4) { SplineSegment ss=(SplineSegment)calloc(1,sizeof(struct spline_segment)); ss->x1=x1; ss->x2=x2; ss->x3=x3; ss->x4=x4; ss->y1=y1; ss->y2=y2; ss->y3=y3; ss->y4=y4; array_add_element(s->segments,ss); } #if 0 static void spline_to_s(Spline s, FILE *f) { int i; SplineSegment ss; fprintf(f,"Spline: \n"); for (i=0;isegments->nb_elements;i++) { ss=s->segments->elements[i]; fprintf(f," - segment %d: (%g, %g),(%g, %g),(%g, %g),(%g, %g)\n", i,ss->x1,ss->y1,ss->x2,ss->y2,ss->x3,ss->y3,ss->x4,ss->y4); } } #endif static void spline_value_at(Spline s, double *x, double *y, double t, int *segment) { int si; double tt; SplineSegment ss; si = floor(t*s->segments->nb_elements); tt = t*s->segments->nb_elements - si; assert(tt>=0 && tt<1); ss=s->segments->elements[si]; *x = ss->x1*(1-tt)*(1-tt)*(1-tt)+3*ss->x2*tt*(1-tt)*(1-tt)+3*ss->x3*tt*tt*(1-tt)+ss->x4*tt*tt*tt; *y = ss->y1*(1-tt)*(1-tt)*(1-tt)+3*ss->y2*tt*(1-tt)*(1-tt)+3*ss->y3*tt*tt*(1-tt)+ss->y4*tt*tt*tt; *segment=si; } /*---------------------------*/ static EdgeCouple edge_couple_new(int nb_edges) { int i; EdgeCouple new = (EdgeCouple)calloc(1,sizeof(struct edge_couple)); new->array = (int **)calloc(nb_edges, sizeof(int*)); new->size = nb_edges; for (i=0;iarray[i]=(int *)calloc(2,sizeof(int)); new->array[i][CLOCKWISE]=0; new->array[i][ANTICLOCKWISE]=0; } return new; } static void edge_couple_del(EdgeCouple e) { int i; for (i=0;isize;i++) free(e->array[i]); free(e->array); free(e); } /*---------------------------*/ static Pattern pattern_new(struct state *st, Graph g, double shape1, double shape2) { Pattern new; assert(new=(Pattern)calloc(1,sizeof(struct pattern))); new->shape1=shape1; new->shape2=shape2; new->graph=g; new->ec=edge_couple_new(g->edges->nb_elements); new->splines=array_new(10); new->ncolors=st->ncolors; return new; } static void pattern_del(Pattern p) { edge_couple_del(p->ec); array_del(p->splines,&spline_del); free(p); } static void pattern_edge_couple_set(Pattern p, Edge e, Direction d, int value) { int i; for (i=0;igraph->edges->nb_elements;i++) if (p->graph->edges->elements[i]==e) { p->ec->array[i][d]=value; return; } } static void pattern_draw_spline_direction(Pattern p, Spline s, Node node, Edge edge1, Edge edge2, Direction direction) { double x1=(edge1->node1->x+edge1->node2->x)/2.0; double y1=(edge1->node1->y+edge1->node2->y)/2.0; /* P2 (x2,y2) is the middle point of edge1 */ double x4=(edge2->node1->x+edge2->node2->x)/2.0; double y4=(edge2->node1->y+edge2->node2->y)/2.0; double alpha=edge_angle_to(edge1,edge2,node,direction)*p->shape1; double beta=p->shape2; double i1x,i1y,i2x,i2y,x2,y2,x3,y3; if (direction == ANTICLOCKWISE) { /* I1 must stick out to the left of NP1 and I2 to the right of NP4 */ i1x = alpha*(node->y-y1)+x1; i1y = -alpha*(node->x-x1)+y1; i2x = -alpha*(node->y-y4)+x4; i2y = alpha*(node->x-x4)+y4; x2 = beta*(y1-i1y) + i1x; y2 = -beta*(x1-i1x) + i1y; x3 = -beta*(y4-i2y) + i2x; y3 = beta*(x4-i2x) + i2y; } else { /* I1 must stick out to the left of NP1 and I2 to the right of NP4 */ i1x = -alpha*(node->y-y1)+x1; i1y = alpha*(node->x-x1)+y1; i2x = alpha*(node->y-y4)+x4; i2y = -alpha*(node->x-x4)+y4; x2 = -beta*(y1-i1y) + i1x; y2 = beta*(x1-i1x) + i1y; x3 = beta*(y4-i2y) + i2x; y3 = -beta*(x4-i2x) + i2y; } spline_add_segment(s,x1,y1,x2,y2,x3,y3,x4,y4); } static int pattern_next_unfilled_couple(Pattern p, Edge *e, Direction *d) { int i; for (i=0;iec->size;i++) { if (p->ec->array[i][CLOCKWISE]==0) { *e=p->graph->edges->elements[i]; *d=CLOCKWISE; return 1; } else if (p->ec->array[i][ANTICLOCKWISE]==0) { *e=p->graph->edges->elements[i]; *d=ANTICLOCKWISE; return 1; } } return 0; } static void pattern_make_curves(Pattern p) { Edge current_edge, first_edge, next_edge; Node current_node, first_node; Direction current_direction, first_direction; Spline s; while (pattern_next_unfilled_couple(p, &first_edge, &first_direction)) { /* start a new loop */ s=spline_new(random()%(p->ncolors-2)+2); array_add_element(p->splines, s); current_edge=first_edge; current_node=first_node=current_edge->node1; current_direction=first_direction; do { pattern_edge_couple_set(p, current_edge, current_direction, 1); next_edge = graph_next_edge_around(p->graph,current_node,current_edge,current_direction); /* add the spline segment to the spline */ pattern_draw_spline_direction(p,s,current_node, current_edge,next_edge,current_direction); /* cross the edge */ current_edge = next_edge; current_node = edge_other_node(next_edge, current_node); current_direction=1-current_direction; } while (current_node!=first_node || current_edge!=first_edge || current_direction!=first_direction); if (s->segments->nb_elements==2) /* spline is just one point: remove it */ p->splines->elements[p->splines->nb_elements-1]=NULL; } } static void pattern_animate(struct state *st) { Pattern p = st->pattern; double t = st->t; double t2; double x,y,x2,y2,x3,y3,x4,y4; int i,segment,unused; int ticks; double step=0.0001; /* TODO: set the step (or the delay) as a * function of the spline length, so that * drawing speed is constant */ Spline s; XSetLineAttributes(st->dpy,st->gc,st->params.curve_width,LineSolid,CapRound,JoinRound); XSetLineAttributes(st->dpy,st->shadow_gc,st->params.shadow_width,LineSolid,CapRound,JoinRound); for (ticks=0;ticks<100 && t<1;ticks++) { for (i=0;isplines->nb_elements;i++) if ((s=p->splines->elements[i])) { /* skip if one-point spline */ spline_value_at(s, &x, &y, fmod(t,1.0),&segment); spline_value_at(s, &x2, &y2, fmod(t+step,1.0),&unused); /* look ahead for the shadow segment */ t2=t+step; if (t2<=1.0) { spline_value_at(s, &x3, &y3, fmod(t2,1.0),&unused); while (t2+step<1.0 && (x3-x2)*(x3-x2)+(y3-y2)*(y3-y2) < st->params.shadow_width*st->params.shadow_width) { t2+=step; spline_value_at(s, &x3, &y3, fmod(t2,1.0),&unused); } spline_value_at(s, &x4, &y4, fmod(t2+step,1.0),&unused); /* draw shadow line */ XDrawLine(st->dpy,st->window,st->shadow_gc, (int)rint(x3),(int)rint(y3), (int)rint(x4),(int)rint(y4)); } /* draw line segment */ if (p->splines->nb_elements==1) XSetForeground(st->dpy, st->gc, st->colors[segment%(p->ncolors-3)+2].pixel); else XSetForeground(st->dpy, st->gc, st->colors[s->color].pixel); XDrawLine(st->dpy,st->window,st->gc, (int)rint(x),(int)rint(y), (int)rint(x2),(int)rint(y2)); } t+=step; } st->t=t; if (t>=1) { st->reset=1; /* at the end we redraw back to remove shadow spillage */ for (i=0;isplines->nb_elements;i++) { if ((s=p->splines->elements[i])) { double offset=step; XSetForeground(st->dpy, st->gc, st->colors[s->color].pixel); spline_value_at(s, &x, &y, fmod(t,1.0),&unused); spline_value_at(s, &x2, &y2, fmod(t-offset,1.0),&unused); while ((x2-x)*(x2-x)+(y2-y)*(y2-y) < st->params.shadow_width*st->params.shadow_width) { offset+=step; spline_value_at(s, &x2, &y2, fmod(t-offset,1.0),&unused); } XDrawLine(st->dpy,st->window,st->gc, (int)rint(x),(int)rint(y), (int)rint(x2),(int)rint(y2)); } } } } /*======================================================================*/ static const char *celtic_defaults[] = { ".background: black", ".foreground: #333333", "*fpsSolid: true", "*ncolors: 20", "*delay: 10000", "*delay2: 5", "*showGraph: False", #ifdef HAVE_MOBILE "*ignoreRotation: True", #endif 0 }; static XrmOptionDescRec celtic_options[] = { {"-background", ".background", XrmoptionSepArg, 0}, {"-foreground", ".foreground", XrmoptionSepArg, 0}, {"-ncolors", ".ncolors", XrmoptionSepArg, 0}, {"-delay", ".delay", XrmoptionSepArg, 0}, {"-delay2", ".delay2", XrmoptionSepArg, 0}, {"-graph", ".showGraph", XrmoptionNoArg, "True"}, {0, 0, 0, 0} }; #if 0 static void params_to_s(FILE *f) { switch (st->params.type) { case polar: fprintf(f,"type: polar\n"); fprintf(f,"nb_orbits: %ld\n",st->params.nb_orbits); fprintf(f,"nb_nodes_per_orbit: %ld\n",st->params.nb_nodes_per_orbit); break; case tgrid: fprintf(f,"type: grid\n"); fprintf(f,"edge_size: %ld\n",st->params.edge_size); break; case triangle: fprintf(f,"type: triangle\n"); fprintf(f,"edge_size: %ld\n",st->params.edge_size); break; case kennicott: fprintf(f,"type: kennicott\n"); fprintf(f,"edge_size: %ld\n",st->params.edge_size); fprintf(f,"cluster_size: %ld\n",st->params.cluster_size); break; } fprintf(f,"curve width: %ld\n",st->params.curve_width); fprintf(f,"shadow width: %ld\n",st->params.shadow_width); fprintf(f,"shape1: %g\n",st->params.shape1); fprintf(f,"shape2: %g\n",st->params.shape2); fprintf(f,"margin: %ld\n",st->params.margin); fprintf(f,"angle: %g\n",st->params.angle); fprintf(f,"delay: %ld\n",st->params.delay); } #endif #if 0 static void colormap_to_s(int ncolors, XColor *colors) { int i; printf("-- colormap (%d colors):\n",st->ncolors); for (i=0;incolors;i++) printf("%d: %d %d %d\n", i, st->colors[i].red, st->colors[i].green, st->colors[i].blue); printf("----\n"); } #endif static void * celtic_init (Display *d_arg, Window w_arg) { struct state *st = (struct state *) calloc (1, sizeof(*st)); XGCValues gcv; st->dpy=d_arg; st->window=w_arg; st->showGraph=get_boolean_resource (st->dpy, "showGraph", "Boolean"); st->ncolors = get_integer_resource (st->dpy, "ncolors", "Integer"); XGetWindowAttributes (st->dpy, st->window, &st->xgwa); assert(st->colors = (XColor *) calloc (st->ncolors,sizeof(XColor))); if (get_boolean_resource(st->dpy, "mono", "Boolean")) { MONO: st->ncolors = 1; st->colors[0].pixel = get_pixel_resource(st->dpy, st->xgwa.colormap, "foreground", "Foreground"); } else { #if 0 make_random_colormap (st->xgwa.screen, st->xgwa.visual, st->xgwa.colormap, st->colors, &st->ncolors, True, True, 0, True); #else make_smooth_colormap (st->xgwa.screen, st->xgwa.visual, st->xgwa.colormap, st->colors, &st->ncolors, True, 0, True); #endif if (st->ncolors < 2) goto MONO; else { st->colors[0].pixel = get_pixel_resource(st->dpy, st->xgwa.colormap, "foreground", "Foreground"); st->colors[1].pixel = get_pixel_resource(st->dpy, st->xgwa.colormap, "background", "Background"); } } /* graphic context for curves */ gcv.foreground = st->colors[0].pixel; gcv.background = st->colors[1].pixel; gcv.line_width = st->params.curve_width; gcv.cap_style=CapRound; st->gc = XCreateGC (st->dpy, st->window, GCForeground|GCBackground|GCLineWidth|GCCapStyle, &gcv); /* graphic context for graphs */ gcv.foreground = st->colors[0].pixel; gcv.background = st->colors[1].pixel; st->gc_graph = XCreateGC (st->dpy, st->window, GCForeground|GCBackground, &gcv); /* graphic context for shadows */ gcv.foreground = st->colors[1].pixel; gcv.line_width = st->params.shadow_width; gcv.cap_style=CapRound; st->shadow_gc = XCreateGC(st->dpy, st->window, GCForeground|GCLineWidth|GCCapStyle, &gcv); st->delay2 = 1000000 * get_integer_resource(st->dpy, "delay2", "Delay2"); return st; } static unsigned long celtic_draw (Display *dpy, Window window, void *closure) { struct state *st = (struct state *) closure; if (st->eraser) { st->eraser = erase_window (st->dpy, st->window, st->eraser); return 10000; } if (st->reset || st->force_reset) { int delay = (st->force_reset ? 0 : st->delay2); st->reset = 0; st->force_reset = 0; st->t = 1; if (st->pattern != NULL) { pattern_del(st->pattern); } st->pattern = NULL; graph_del(st->graph); /* recolor each time */ st->ncolors = get_integer_resource (st->dpy, "ncolors", "Integer"); if (st->ncolors > 2) make_smooth_colormap (st->xgwa.screen, st->xgwa.visual, st->xgwa.colormap, st->colors, &st->ncolors, True, 0, True); st->eraser = erase_window (st->dpy, st->window, st->eraser); return (delay); } if (st->pattern == NULL) { st->params.curve_width=random()%5+4; st->params.shadow_width=st->params.curve_width+4; st->params.shape1=(15+random()%15)/10.0 -1.0; st->params.shape2=(15+random()%15)/10.0 -1.0; st->params.edge_size=10*(random()%5)+20; st->params.delay=get_integer_resource(st->dpy, "delay", "Delay"); st->params.angle=random()%360*2*M_PI/360; st->params.margin=(random()%8)*100-600; switch (random()%4) { case 0: st->params.type=tgrid; st->params.shape1=(random()%1*2-1.0)*(random()%10+3)/10.0; st->params.shape2=(random()%1*2-1.0)*(random()%10+3)/10.0; st->params.edge_size=10*(random()%5)+50; break; case 1: st->params.type=kennicott; st->params.shape1=(random()%20)/10.0 -1.0; st->params.shape2=(random()%20)/10.0 -1.0; st->params.edge_size=10*(random()%3)+70; st->params.cluster_size=st->params.edge_size/(3.0+random()%10)-1; break; case 2: st->params.type=triangle; st->params.edge_size=10*(random()%5)+60; st->params.margin=(random()%10)*100-900; break; case 3: st->params.type=polar; st->params.nb_orbits=2+random()%10; st->params.nb_nodes_per_orbit=4+random()%10; break; } /* st->params.type= polar; */ /* st->params.nb_orbits= 5; */ /* st->params.nb_nodes_per_orbit= 19; */ /* st->params.curve_width= 4; */ /* st->params.shadow_width= 8; */ /* st->params.shape1= 0.5; */ /* st->params.shape2= 1.3; */ /* st->params.margin= 30; */ /* st->params.angle= 5.21853; */ /* st->params.delay= 10000; */ /* params_to_s(stdout); */ /*=======================================================*/ switch (st->params.type) { case tgrid: st->graph=make_grid_graph(st, st->params.margin,st->params.margin, st->xgwa.width-2*st->params.margin, st->xgwa.height-2*st->params.margin, st->params.edge_size); break; case kennicott: st->graph=make_kennicott_graph(st, st->params.margin,st->params.margin, st->xgwa.width-2*st->params.margin, st->xgwa.height-2*st->params.margin, st->params.edge_size, st->params.cluster_size); break; case triangle: st->graph=make_triangle_graph(st, st->params.margin,st->params.margin, st->xgwa.width-2*st->params.margin, st->xgwa.height-2*st->params.margin, st->params.edge_size); break; case polar: st->graph=make_polar_graph(st, st->params.margin,st->params.margin, st->xgwa.width-2*st->params.margin, st->xgwa.height-2*st->params.margin, st->params.nb_nodes_per_orbit, st->params.nb_orbits); break; default: st->graph=make_grid_graph(st, st->params.margin,st->params.margin, st->xgwa.width-2*st->params.margin, st->xgwa.height-2*st->params.margin, st->params.edge_size); break; } graph_rotate(st->graph,st->params.angle,st->xgwa.width/2,st->xgwa.height/2); if (st->showGraph) graph_draw(st, st->graph); st->pattern=pattern_new(st, st->graph, st->params.shape1, st->params.shape2); pattern_make_curves(st->pattern); st->t = 0.0; } pattern_animate(st); return st->params.delay; } static void celtic_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 celtic_event (Display *dpy, Window window, void *closure, XEvent *event) { struct state *st = (struct state *) closure; if (screenhack_event_helper (dpy, window, event)) { st->force_reset = 1; return True; } return False; } static void celtic_free (Display *dpy, Window window, void *closure) { struct state *st = (struct state *) closure; free (st); } XSCREENSAVER_MODULE ("Celtic", celtic) xscreensaver-5.36/hacks/cwaves.c000644 000767 000024 00000013131 12710314202 016652 0ustar00jwzstaff000000 000000 /* xscreensaver, Copyright (c) 2007-2014 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. * * cwaves -- languid sinusoidal colors. */ #include "screenhack.h" #include #include "xpm-pixmap.h" #define BELLRAND(n) ((frand((n)) + frand((n)) + frand((n))) / 3) typedef struct { double scale; double offset; double delta; } wave; typedef struct { Display *dpy; Window window; XWindowAttributes xgwa; GC gc; int delay; int scale; int ncolors; XColor *colors; int nwaves; wave *waves; int debug_p; } state; static void * cwaves_init (Display *dpy, Window window) { int i; XGCValues gcv; state *st = (state *) calloc (1, sizeof (*st)); st->dpy = dpy; st->window = window; XGetWindowAttributes (st->dpy, st->window, &st->xgwa); st->debug_p = get_boolean_resource (dpy, "debug", "Boolean"); st->scale = get_integer_resource (dpy, "scale", "Integer"); if (st->scale <= 0) st->scale = 1; st->ncolors = get_integer_resource (dpy, "ncolors", "Integer"); if (st->ncolors < 4) st->ncolors = 4; st->colors = (XColor *) malloc (sizeof(*st->colors) * (st->ncolors+1)); make_smooth_colormap (st->xgwa.screen, st->xgwa.visual, st->xgwa.colormap, st->colors, &st->ncolors, True, 0, False); st->gc = XCreateGC (st->dpy, st->window, 0, &gcv); st->delay = get_integer_resource (dpy, "delay", "Integer"); st->nwaves = get_integer_resource (dpy, "nwaves", "Integer"); st->waves = (wave *) calloc (st->nwaves, sizeof(*st->waves)); for (i = 0; i < st->nwaves; i++) { st->waves[i].scale = frand(0.03) + 0.005; st->waves[i].offset = frand(M_PI); st->waves[i].delta = (BELLRAND(2)-1) / 15.0; } return st; } static unsigned long cwaves_draw (Display *dpy, Window window, void *closure) { state *st = (state *) closure; int i, x; for (i = 0; i < st->nwaves; i++) st->waves[i].offset += st->waves[i].delta; for (x = 0; x < st->xgwa.width; x += st->scale) { double v = 0; int j; for (i = 0; i < st->nwaves; i++) v += cos ((x * st->waves[i].scale) - st->waves[i].offset); v /= st->nwaves; j = st->ncolors * (v/2 + 0.5); if (j < 0 || j >= st->ncolors) abort(); XSetForeground (st->dpy, st->gc, st->colors[j].pixel); XFillRectangle (st->dpy, st->window, st->gc, x, 0, st->scale, st->xgwa.height); } if (st->debug_p) { int wh = (st->xgwa.height / (st->nwaves + 1)) * 0.9; int i; XSetLineAttributes (st->dpy, st->gc, 2, LineSolid, CapRound, JoinRound); XSetForeground (st->dpy, st->gc, BlackPixelOfScreen (st->xgwa.screen)); for (i = 0; i < st->nwaves; i++) { int y = st->xgwa.height * i / (st->nwaves + 1); int ox = -1, oy = -1; for (x = 0; x < st->xgwa.width; x += st->scale) { int yy; double v = 0; v = cos ((x * st->waves[i].scale) - st->waves[i].offset); v /= 2; yy = y + wh/2 + (wh * v); if (ox == -1) ox = x, oy = yy; XDrawLine (st->dpy, st->window, st->gc, ox, oy, x, yy); ox = x; oy = yy; } } { int y = st->xgwa.height * i / (st->nwaves + 1); int ox = -1, oy = -1; for (x = 0; x < st->xgwa.width; x += st->scale) { int yy; double v = 0; for (i = 0; i < st->nwaves; i++) v += cos ((x * st->waves[i].scale) - st->waves[i].offset); v /= st->nwaves; v /= 2; yy = y + wh/2 + (wh * v); if (ox == -1) ox = x, oy = yy; XDrawLine (st->dpy, st->window, st->gc, ox, oy, x, yy); ox = x; oy = yy; } } } return st->delay; } static void cwaves_reshape (Display *dpy, Window window, void *closure, unsigned int w, unsigned int h) { state *st = (state *) closure; XGetWindowAttributes (st->dpy, st->window, &st->xgwa); } static Bool cwaves_event (Display *dpy, Window window, void *closure, XEvent *event) { state *st = (state *) closure; if (screenhack_event_helper (dpy, window, event)) { make_smooth_colormap (st->xgwa.screen, st->xgwa.visual, st->xgwa.colormap, st->colors, &st->ncolors, True, 0, False); return True; } return False; } static void cwaves_free (Display *dpy, Window window, void *closure) { } static const char *cwaves_defaults [] = { ".background: black", ".foreground: white", "*ncolors: 600", "*nwaves: 15", "*scale: 2", "*debug: False", "*delay: 20000", #ifdef HAVE_MOBILE "*ignoreRotation: True", #endif 0 }; static XrmOptionDescRec cwaves_options [] = { { "-delay", ".delay", XrmoptionSepArg, 0 }, { "-waves", ".nwaves", XrmoptionSepArg, 0 }, { "-colors", ".ncolors", XrmoptionSepArg, 0 }, { "-scale", ".scale", XrmoptionSepArg, 0 }, { "-debug", ".debug", XrmoptionNoArg, "True" }, { 0, 0, 0, 0 } }; XSCREENSAVER_MODULE ("CWaves", cwaves) xscreensaver-5.36/hacks/m6502.c000644 000767 000024 00000016013 12710314511 016140 0ustar00jwzstaff000000 000000 /* -*- indent-tabs-mode:nil -*- * Copyright (c) 2007 Jeremy English * * 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. * * Created: 07-May-2007 */ #include #include #include "screenhack.h" #include "analogtv.h" #include "asm6502.h" # ifdef __GNUC__ __extension__ /* don't warn about "string length is greater than the length ISO C89 compilers are required to support" when includng the following data file... */ # endif static const char * const demo_files[] = { # include "m6502.h" }; #ifndef HAVE_MOBILE # 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 { SCREEN_W = ANALOGTV_VIS_LEN, SCREEN_H = ANALOGTV_VISLINES, NUM_PROGS = 9 }; struct state { Display *dpy; Window window; Bit8 pixels[32][32]; machine_6502 *machine; analogtv *tv; analogtv_input *inp; analogtv_reception reception; int pixw; /* pixel width */ int pixh;/* pixel height */ int topb;/* top boarder */ int field_ntsc[4];/* used for clearing the screen*/ int dt;/* how long to wait before changing the demo*/ int which;/* the program to run*/ int demos;/* number of demos included */ struct timeval start_time; int reset_p; }; static void plot6502(Bit8 x, Bit8 y, Bit8 color, void *closure) { struct state *st = (struct state *) closure; st->pixels[x][y] = color; } #undef countof #define countof(x) (sizeof((x))/sizeof((*x))) static void start_rand_bin_prog(machine_6502 *machine, struct state *st){ int n = st->which; while(n == st->which) n = random() % st->demos; st->which = n; m6502_start_eval_string(machine, demo_files[st->which], plot6502, st); } /* * get_time () * * returns the total time elapsed since the beginning of the demo */ static double get_time(struct state *st) { struct timeval t; float f; #if GETTIMEOFDAY_TWO_ARGS gettimeofday(&t, NULL); #else gettimeofday(&t); #endif t.tv_sec -= st->start_time.tv_sec; f = ((double)t.tv_sec) + t.tv_usec*1e-6; return f; } /* * init_time () * * initialises the timing structures */ static void init_time(struct state *st) { #if GETTIMEOFDAY_TWO_ARGS gettimeofday(&st->start_time, NULL); #else gettimeofday(&st->start_time); #endif } static void * m6502_init (Display *dpy, Window window) { struct state *st = (struct state *) calloc (1, sizeof(*st)); unsigned int x, y; int n = get_integer_resource(dpy, "displaytime", "Displaytime"); int dh; st->demos = countof(demo_files); st->which = random() % st->demos; st->dt = n; st->dpy = dpy; st->window = window; st->tv=analogtv_allocate(st->dpy, st->window); analogtv_set_defaults(st->tv, ""); st->machine = m6502_build(); st->inp=analogtv_input_allocate(); analogtv_setup_sync(st->inp, 1, 0); st->reception.input = st->inp; st->reception.level = 2.0; st->reception.ofs=0; st->reception.multipath=0.0; st->pixw = SCREEN_W / 32; st->pixh = SCREEN_H / 32; dh = SCREEN_H % 32; st->topb = dh / 2; init_time(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); analogtv_draw_solid(st->inp, ANALOGTV_VIS_START, ANALOGTV_VIS_END, ANALOGTV_TOP, ANALOGTV_BOT, st->field_ntsc); for(x = 0; x < 32; x++) for(y = 0; y < 32; y++) st->pixels[x][y] = 0; return st; } static void paint_pixel(struct state *st, int x, int y, int idx) { double clr_tbl[16][3] = { { 0, 0, 0}, {255, 255, 255}, {136, 0, 0}, {170, 255, 238}, {204, 68, 204}, { 0, 204, 85}, { 0, 0, 170}, {238, 238, 119}, {221, 136, 85}, {102, 68, 0}, {255, 119, 119}, { 51, 51, 51}, {119, 119, 119}, {170, 255, 102}, { 0, 136, 255}, {187, 187, 187} }; int ntsc[4], i; int rawy,rawi,rawq; /* RGB conversion taken from analogtv draw xpm */ rawy=( 5*clr_tbl[idx][0] + 11*clr_tbl[idx][1] + 2*clr_tbl[idx][2]) / 64; rawi=(10*clr_tbl[idx][0] - 4*clr_tbl[idx][1] - 5*clr_tbl[idx][2]) / 64; rawq=( 3*clr_tbl[idx][0] - 8*clr_tbl[idx][1] + 5*clr_tbl[idx][2]) / 64; ntsc[0]=rawy+rawq; ntsc[1]=rawy-rawi; ntsc[2]=rawy-rawq; ntsc[3]=rawy+rawi; for (i=0; i<4; i++) { if (ntsc[i]>ANALOGTV_WHITE_LEVEL) ntsc[i]=ANALOGTV_WHITE_LEVEL; if (ntsc[i]pixw; y *= st->pixh; y += st->topb; analogtv_draw_solid(st->inp, ANALOGTV_VIS_START + x, ANALOGTV_VIS_START + x + st->pixw, ANALOGTV_TOP + y, ANALOGTV_TOP + y + st->pixh, ntsc); } static unsigned long m6502_draw (Display *dpy, Window window, void *closure) { struct state *st = (struct state *) closure; unsigned int x = 0, y = 0; double te; const analogtv_reception *reception = &st->reception; m6502_next_eval(st->machine,500); for (x = 0; x < 32; x++) for (y = 0; y < 32; y++) paint_pixel(st,x,y,st->pixels[x][y]); analogtv_reception_update(&st->reception); analogtv_draw(st->tv, 0.04, &reception, 1); te = get_time(st); if (st->reset_p || te > st->dt){ /* do something more interesting here XXX */ st->reset_p = 0; for(x = 0; x < 32; x++) for(y = 0; y < 32; y++) st->pixels[x][y] = 0; init_time(st); start_rand_bin_prog(st->machine,st); } #ifdef HAVE_MOBILE return 0; #else return 5000; #endif } static const char *m6502_defaults [] = { ".background: black", ".foreground: white", "*file:", "*displaytime: 20", ANALOGTV_DEFAULTS 0 }; static XrmOptionDescRec m6502_options [] = { { "-file", ".file", XrmoptionSepArg, 0 }, { "-displaytime", ".displaytime", XrmoptionSepArg, 0}, ANALOGTV_OPTIONS { 0, 0, 0, 0 } }; static void m6502_reshape (Display *dpy, Window window, void *closure, unsigned int w, unsigned int h) { struct state *st = (struct state *) closure; analogtv_reconfigure (st->tv); } static Bool m6502_event (Display *dpy, Window window, void *closure, XEvent *event) { struct state *st = (struct state *) closure; if (screenhack_event_helper (dpy, window, event)) { st->reset_p = 1; return True; } return False; } static void m6502_free (Display *dpy, Window window, void *closure) { struct state *st = (struct state *) closure; analogtv_release(st->tv); free (st); } XSCREENSAVER_MODULE ("m6502", m6502) xscreensaver-5.36/hacks/asm6502.c000664 000767 000024 00000170222 12727405613 016505 0ustar00jwzstaff000000 000000 /*-*- indent-tabs-mode:nil -*- */ /* Copyright (C) 2007 Jeremy English * * 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. * * Created: 12-April-2007 */ /* This is a port of the javascript 6502 assembler, compiler and debugger. The orignal code was copyright 2006 by Stian Soreng - www.6502asm.com I changed the structure of the assembler in this version. */ #include #include /*#include */ #include #include #include #include #include #include #include #include #include "yarandom.h" #include "asm6502.h" /*#ifdef DEBUGGER # define random rand #endif*/ #ifndef HAVE_MOBILE # define READ_FILES #endif typedef enum{ LEFT, RIGHT } Side; /* Bit Flags _ _ _ _ _ _ _ _ |N||V||F||B||D||I||Z||C| - - - - - - - - 7 6 5 4 3 2 1 0 */ typedef enum{ CARRY_FL = 0, ZERO_FL = 1, INTERRUPT_FL = 2, DECIMAL_FL = 3, BREAK_FL = 4, FUTURE_FL = 5, OVERFLOW_FL = 6, NEGATIVE_FL = 7 } Flags; typedef BOOL (*CharTest) (char); /* A jump function takes a pointer to the current machine and a opcode. The opcode is needed to figure out the memory mode. */ /*typedef void (*JumpFunc) (machine_6502* AddrMode);*/ typedef struct { m6502_AddrMode type; Bit32 value[MAX_PARAM_VALUE]; unsigned int vp; /*value pointer, index into the value table.*/ char *label; Bit32 lbladdr; } Param; typedef struct { Bit32 addr; /* Address of the label */ char *label; } Label; typedef struct AsmLine AsmLine; struct AsmLine { BOOL labelDecl; /* Does the line have a label declaration? */ Label *label; char *command; Param *param; AsmLine *next; /* in list */ }; typedef struct { Bit16 addr; Bit16 value; } Pointer; /*static void *emalloc(size_t n) { void *p = malloc(n); if (! p) abort(); return p; }*/ static void *ecalloc(uint32_t nelm, size_t nsize){ void *p = calloc(nelm, nsize); if (!p) abort(); return p; } /* estrdup() - Allocates memory for a new string a returns a copy of the source sting in it. */ static char *estrdup(const char *source){ int ln = strlen(source) + 1; char *s = ecalloc(ln, sizeof(char)); strncpy(s,source,ln); return s; } static void checkAddress(Bit32 address){ /* XXX: Do we want to kill the program here? */ if (address >= MEM_64K) fprintf(stderr, "Address %d is beyond 64k", address); } /* * stackPush() - Push byte to stack * */ static void stackPush(machine_6502 *machine, Bit8 value ) { if(machine->regSP >= STACK_BOTTOM){ machine->memory[machine->regSP--] = value; } else{ fprintf(stderr, "The stack is full: %.4x\n", machine->regSP); machine->codeRunning = FALSE; } } /* * stackPop() - Pop byte from stack * */ static Bit8 stackPop(machine_6502 *machine) { if (machine->regSP < STACK_TOP){ Bit8 value =machine->memory[++machine->regSP]; return value; } else { /* fprintf(stderr, "The stack is empty.\n"); xxx */ machine->codeRunning = FALSE; return 0; } } static void pushByte(machine_6502 *machine, Bit32 value ) { Bit32 address = machine->defaultCodePC; checkAddress(address); machine->memory[address] = value & 0xff; machine->codeLen++; machine->defaultCodePC++; } /* * pushWord() - Push a word using pushByte twice * */ static void pushWord(machine_6502 *machine, Bit16 value ) { pushByte(machine, value & 0xff ); pushByte(machine, (value>>8) & 0xff ); } /* * popByte( machine_6502 *machine,) - Pops a byte * */ static Bit8 popByte( machine_6502 *machine) { Bit8 value = machine->memory[machine->regPC]; machine->regPC++; return value; } /* * popWord() - Pops a word using popByte() twice * */ static int popWord(machine_6502 *machine) { return popByte(machine) + (popByte(machine) << 8); } /* * memReadByte() - Peek a byte, don't touch any registers * */ static int memReadByte( machine_6502 *machine, int addr ) { if( addr == 0xfe ) return floor( random()%255 ); return machine->memory[addr]; } static void updateDisplayPixel(machine_6502 *machine, Bit16 addr){ Bit8 idx = memReadByte(machine,addr) & 0x0f; Bit8 x,y; addr -= 0x200; x = addr & 0x1f; y = (addr >> 5); if (machine->plot) { machine->plot(x,y,idx,machine->plotterState); } } /* * memStoreByte() - Poke a byte, don't touch any registers * */ static void memStoreByte( machine_6502 *machine, int addr, int value ) { machine->memory[ addr ] = (value & 0xff); if( (addr >= 0x200) && (addr<=0x5ff) ) updateDisplayPixel(machine, addr ); } /* EMULATION CODE */ static Bit8 bitOn(Bit8 value,Flags bit){ Bit8 mask = 1; mask = mask << bit; return ((value & mask) > 0); } static Bit8 bitOff(Bit8 value, Flags bit){ return (! bitOn(value,bit)); } static Bit8 setBit(Bit8 value, Flags bit, int on){ Bit8 onMask = 1; Bit8 offMask = 0xff; onMask = onMask << bit; offMask = offMask ^ onMask; return ((on) ? value | onMask : value & offMask); } static Bit8 nibble(Bit8 value, Side side){ switch(side){ case LEFT: return value & 0xf0; case RIGHT: return value & 0xf; default: fprintf(stderr,"nibble unknown side\n"); return 0; } } /* used for tracing. XXX: combined with function getvalue */ static BOOL peekValue(machine_6502 *machine, m6502_AddrMode adm, Pointer *pointer, Bit16 PC){ Bit8 zp; pointer->value = 0; pointer->addr = 0; switch(adm){ case SINGLE: return FALSE; case IMMEDIATE_LESS: case IMMEDIATE_GREAT: case IMMEDIATE_VALUE: pointer->value = memReadByte(machine, PC); return TRUE; case INDIRECT_X: zp = memReadByte(machine, PC) + machine->regX; pointer->addr = memReadByte(machine,zp) + (memReadByte(machine,zp+1)<<8); pointer->value = memReadByte(machine, pointer->addr); return TRUE; case INDIRECT_Y: zp = memReadByte(machine, PC); pointer->addr = memReadByte(machine,zp) + (memReadByte(machine,zp+1)<<8) + machine->regY; pointer->value = memReadByte(machine, pointer->addr); return TRUE; case ZERO: pointer->addr = memReadByte(machine, PC); pointer->value = memReadByte(machine, pointer->addr); return TRUE; case ZERO_X: pointer->addr = memReadByte(machine, PC) + machine->regX; pointer->value = memReadByte(machine, pointer->addr); return TRUE; case ZERO_Y: pointer->addr = memReadByte(machine, PC) + machine->regY; pointer->value = memReadByte(machine, pointer->addr); return TRUE; case ABS_OR_BRANCH: pointer->addr = memReadByte(machine, PC); return TRUE; case ABS_VALUE: pointer->addr = memReadByte(machine, PC) + (memReadByte(machine, PC+1) << 8); pointer->value = memReadByte(machine, pointer->addr); return TRUE; case ABS_LABEL_X: case ABS_X: pointer->addr = (memReadByte(machine, PC) + (memReadByte(machine, PC+1) << 8)) + machine->regX; pointer->value = memReadByte(machine, pointer->addr); return TRUE; case ABS_LABEL_Y: case ABS_Y: pointer->addr = (memReadByte(machine, PC) + (memReadByte(machine, PC+1) << 8)) + machine->regY; pointer->value = memReadByte(machine, pointer->addr); return TRUE; case DCB_PARAM: /* Handled elsewhere */ break; } return FALSE; } /* Figure out how to get the value from the addrmode and get it.*/ static BOOL getValue(machine_6502 *machine, m6502_AddrMode adm, Pointer *pointer){ Bit8 zp; pointer->value = 0; pointer->addr = 0; switch(adm){ case SINGLE: return FALSE; case IMMEDIATE_LESS: case IMMEDIATE_GREAT: case IMMEDIATE_VALUE: pointer->value = popByte(machine); return TRUE; case INDIRECT_X: zp = popByte(machine) + machine->regX; pointer->addr = memReadByte(machine,zp) + (memReadByte(machine,zp+1)<<8); pointer->value = memReadByte(machine, pointer->addr); return TRUE; case INDIRECT_Y: zp = popByte(machine); pointer->addr = memReadByte(machine,zp) + (memReadByte(machine,zp+1)<<8) + machine->regY; pointer->value = memReadByte(machine, pointer->addr); return TRUE; case ZERO: pointer->addr = popByte(machine); pointer->value = memReadByte(machine, pointer->addr); return TRUE; case ZERO_X: pointer->addr = popByte(machine) + machine->regX; pointer->value = memReadByte(machine, pointer->addr); return TRUE; case ZERO_Y: pointer->addr = popByte(machine) + machine->regY; pointer->value = memReadByte(machine, pointer->addr); return TRUE; case ABS_OR_BRANCH: pointer->addr = popByte(machine); return TRUE; case ABS_VALUE: pointer->addr = popWord(machine); pointer->value = memReadByte(machine, pointer->addr); return TRUE; case ABS_LABEL_X: case ABS_X: pointer->addr = popWord(machine) + machine->regX; pointer->value = memReadByte(machine, pointer->addr); return TRUE; case ABS_LABEL_Y: case ABS_Y: pointer->addr = popWord(machine) + machine->regY; pointer->value = memReadByte(machine, pointer->addr); return TRUE; case DCB_PARAM: /* Handled elsewhere */ break; } return FALSE; } #if 0 static void dismem(machine_6502 *machine, m6502_AddrMode adm, char *output){ Bit8 zp; Bit16 n; switch(adm){ case SINGLE: *output = 0; break; case IMMEDIATE_LESS: case IMMEDIATE_GREAT: case IMMEDIATE_VALUE: n = popByte(machine); sprintf(output,"#$%x",n); break; case INDIRECT_X: zp = popByte(machine); n = memReadByte(machine,zp) + (memReadByte(machine,zp+1)<<8); sprintf(output,"($%x,x)",n); break; case INDIRECT_Y: zp = popByte(machine); n = memReadByte(machine,zp) + (memReadByte(machine,zp+1)<<8); sprintf(output,"($%x),y",n); break; case ABS_OR_BRANCH: case ZERO: n = popByte(machine); sprintf(output,"$%x",n); break; case ZERO_X: n = popByte(machine); sprintf(output,"$%x,x",n); break; case ZERO_Y: n = popByte(machine); sprintf(output,"$%x,y",n); break; case ABS_VALUE: n = popWord(machine); sprintf(output,"$%x",n); break; case ABS_LABEL_X: case ABS_X: n = popWord(machine); sprintf(output,"$%x,x",n); break; case ABS_LABEL_Y: case ABS_Y: n = popWord(machine); sprintf(output,"$%x,x",n); break; case DCB_PARAM: *output = 0; break; } } #endif /* manZeroNeg - Manage the negative and zero flags */ static void manZeroNeg(machine_6502 *machine, Bit8 value){ machine->regP = setBit(machine->regP, ZERO_FL, (value == 0)); machine->regP = setBit(machine->regP, NEGATIVE_FL, bitOn(value,NEGATIVE_FL)); } static void warnValue(BOOL isValue){ if (! isValue){ fprintf(stderr,"Invalid Value from getValue.\n"); } } static void jmpADC(machine_6502 *machine, m6502_AddrMode adm){ Pointer ptr; Bit16 tmp; Bit8 c = bitOn(machine->regP, CARRY_FL); BOOL isValue = getValue(machine, adm, &ptr); warnValue(isValue); if (bitOn(machine->regA, NEGATIVE_FL) && bitOn(ptr.value, NEGATIVE_FL)) machine->regP = setBit(machine->regP, OVERFLOW_FL, 0); else machine->regP = setBit(machine->regP, OVERFLOW_FL, 1); if (bitOn(machine->regP, DECIMAL_FL)) { tmp = nibble(machine->regA,RIGHT) + nibble(ptr.value,RIGHT ) + c; /* The decimal part is limited to 0 through 9 */ if (tmp >= 10){ tmp = 0x10 | ((tmp + 6) & 0xf); } tmp += nibble(machine->regA,LEFT) + nibble(ptr.value,LEFT); if (tmp >= 160){ machine->regP = setBit(machine->regP,CARRY_FL,1); if (bitOn(machine->regP, OVERFLOW_FL) && tmp >= 0x180) machine->regP = setBit(machine->regP, OVERFLOW_FL, 0); tmp += 0x60; } else { machine->regP = setBit(machine->regP,CARRY_FL,0); if (bitOn(machine->regP, OVERFLOW_FL) && tmp < 0x80) machine->regP = setBit(machine->regP, OVERFLOW_FL, 0); } } /* end decimal */ else { tmp = machine->regA + ptr.value + c; if ( tmp >= 0x100 ){ machine->regP = setBit(machine->regP,CARRY_FL,1); if (bitOn(machine->regP, OVERFLOW_FL) && tmp >= 0x180) machine->regP =setBit(machine->regP, OVERFLOW_FL, 0); } else { machine->regP = setBit(machine->regP,CARRY_FL,0); if (bitOn(machine->regP, OVERFLOW_FL) && tmp < 0x80) machine->regP =setBit(machine->regP, OVERFLOW_FL, 0); } } machine->regA = tmp; manZeroNeg(machine,machine->regA); } static void jmpAND(machine_6502 *machine, m6502_AddrMode adm){ Pointer ptr; BOOL isValue = getValue(machine, adm, &ptr); warnValue(isValue); machine->regA &= ptr.value; manZeroNeg(machine,machine->regA); } static void jmpASL(machine_6502 *machine, m6502_AddrMode adm){ Pointer ptr; BOOL isValue = getValue(machine, adm, &ptr); if (isValue){ machine->regP = setBit(machine->regP, CARRY_FL, bitOn(ptr.value, NEGATIVE_FL)); ptr.value = ptr.value << 1; ptr.value = setBit(ptr.value, CARRY_FL, 0); memStoreByte(machine, ptr.addr, ptr.value); manZeroNeg(machine,ptr.value); } else { /* Accumulator */ machine->regP = setBit(machine->regP, CARRY_FL, bitOn(machine->regA, NEGATIVE_FL)); machine->regA = machine->regA << 1; machine->regA = setBit(machine->regA, CARRY_FL, 0); manZeroNeg(machine,machine->regA); } } static void jmpBIT(machine_6502 *machine, m6502_AddrMode adm){ Pointer ptr; BOOL isValue = getValue(machine, adm, &ptr); warnValue(isValue); machine->regP = setBit(machine->regP, ZERO_FL, (ptr.value & machine->regA)); machine->regP = setBit(machine->regP, OVERFLOW_FL, bitOn(ptr.value, OVERFLOW_FL)); machine->regP = setBit(machine->regP, NEGATIVE_FL, bitOn(ptr.value, NEGATIVE_FL)); } static void jumpBranch(machine_6502 *machine, Bit16 offset){ if ( offset > 0x7f ) machine->regPC = machine->regPC - (0x100 - offset); else machine->regPC = machine->regPC + offset; } static void jmpBPL(machine_6502 *machine, m6502_AddrMode adm){ Pointer ptr; BOOL isValue = getValue(machine, adm, &ptr); warnValue(isValue); if (bitOff(machine->regP,NEGATIVE_FL)) jumpBranch(machine, ptr.addr); } static void jmpBMI(machine_6502 *machine, m6502_AddrMode adm){ Pointer ptr; BOOL isValue = getValue(machine, adm, &ptr); warnValue(isValue); if (bitOn(machine->regP,NEGATIVE_FL)) jumpBranch(machine, ptr.addr); } static void jmpBVC(machine_6502 *machine, m6502_AddrMode adm){ Pointer ptr; BOOL isValue = getValue(machine, adm, &ptr); warnValue(isValue); if (bitOff(machine->regP,OVERFLOW_FL)) jumpBranch(machine, ptr.addr); } static void jmpBVS(machine_6502 *machine, m6502_AddrMode adm){ Pointer ptr; BOOL isValue = getValue(machine, adm, &ptr); warnValue(isValue); if (bitOn(machine->regP,OVERFLOW_FL)) jumpBranch(machine, ptr.addr); } static void jmpBCC(machine_6502 *machine, m6502_AddrMode adm){ Pointer ptr; BOOL isValue = getValue(machine, adm, &ptr); warnValue(isValue); if (bitOff(machine->regP,CARRY_FL)) jumpBranch(machine, ptr.addr); } static void jmpBCS(machine_6502 *machine, m6502_AddrMode adm){ Pointer ptr; BOOL isValue = getValue(machine, adm, &ptr); warnValue(isValue); if (bitOn(machine->regP,CARRY_FL)) jumpBranch(machine, ptr.addr); } static void jmpBNE(machine_6502 *machine, m6502_AddrMode adm){ Pointer ptr; BOOL isValue = getValue(machine, adm, &ptr); warnValue(isValue); if (bitOff(machine->regP, ZERO_FL)) jumpBranch(machine, ptr.addr); } static void jmpBEQ(machine_6502 *machine, m6502_AddrMode adm){ Pointer ptr; BOOL isValue = getValue(machine, adm, &ptr); warnValue(isValue); if (bitOn(machine->regP, ZERO_FL)) jumpBranch(machine, ptr.addr); } static void doCompare(machine_6502 *machine, Bit16 reg, Pointer *ptr){ machine->regP = setBit(machine->regP,CARRY_FL, ((reg + ptr->value) > 0xff)); manZeroNeg(machine,(reg - ptr->value)); } 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, m6502_AddrMode adm){ Pointer ptr; BOOL isValue = getValue(machine, adm, &ptr); warnValue(isValue); doCompare(machine,machine->regX,&ptr); } 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, m6502_AddrMode adm){ Pointer ptr; BOOL isValue = getValue(machine, adm, &ptr); warnValue(isValue); if (ptr.value > 0) ptr.value--; else ptr.value = 0xFF; memStoreByte(machine, ptr.addr, ptr.value); manZeroNeg(machine,ptr.value); } static void jmpEOR(machine_6502 *machine, m6502_AddrMode adm){ Pointer ptr; BOOL isValue = getValue(machine, adm, &ptr); warnValue(isValue); machine->regA ^= ptr.value; manZeroNeg(machine, machine->regA); } static void jmpCLC(machine_6502 *machine, m6502_AddrMode adm){ machine->regP = setBit(machine->regP, CARRY_FL, 0); } static void jmpSEC(machine_6502 *machine, m6502_AddrMode adm){ machine->regP = setBit(machine->regP, CARRY_FL, 1); } static void jmpCLI(machine_6502 *machine, m6502_AddrMode adm){ machine->regP = setBit(machine->regP, INTERRUPT_FL, 0); } static void jmpSEI(machine_6502 *machine, m6502_AddrMode adm){ machine->regP = setBit(machine->regP, INTERRUPT_FL, 1); } static void jmpCLV(machine_6502 *machine, m6502_AddrMode adm){ machine->regP = setBit(machine->regP, OVERFLOW_FL, 0); } static void jmpCLD(machine_6502 *machine, m6502_AddrMode adm){ machine->regP = setBit(machine->regP, DECIMAL_FL, 0); } static void jmpSED(machine_6502 *machine, m6502_AddrMode adm){ machine->regP = setBit(machine->regP, DECIMAL_FL, 1); } static void jmpINC(machine_6502 *machine, m6502_AddrMode adm){ Pointer ptr; BOOL isValue = getValue(machine, adm, &ptr); warnValue(isValue); ptr.value = (ptr.value + 1) & 0xFF; memStoreByte(machine, ptr.addr, ptr.value); manZeroNeg(machine,ptr.value); } 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, m6502_AddrMode adm){ Pointer ptr; /* Move past the 2 byte parameter. JSR is always followed by absolute address. */ Bit16 currAddr = machine->regPC + 2; BOOL isValue = getValue(machine, adm, &ptr); warnValue(isValue); stackPush(machine, (currAddr >> 8) & 0xff); stackPush(machine, currAddr & 0xff); machine->regPC = ptr.addr; } static void jmpLDA(machine_6502 *machine, m6502_AddrMode adm){ Pointer ptr; BOOL isValue = getValue(machine, adm, &ptr); warnValue(isValue); machine->regA = ptr.value; manZeroNeg(machine, machine->regA); } static void jmpLDX(machine_6502 *machine, m6502_AddrMode adm){ Pointer ptr; BOOL isValue = getValue(machine, adm, &ptr); warnValue(isValue); machine->regX = ptr.value; manZeroNeg(machine, machine->regX); } static void jmpLDY(machine_6502 *machine, m6502_AddrMode adm){ Pointer ptr; BOOL isValue = getValue(machine, adm, &ptr); warnValue(isValue); machine->regY = ptr.value; manZeroNeg(machine, machine->regY); } static void jmpLSR(machine_6502 *machine, m6502_AddrMode adm){ Pointer ptr; BOOL isValue = getValue(machine, adm, &ptr); if (isValue){ machine->regP = setBit(machine->regP, CARRY_FL, bitOn(ptr.value, CARRY_FL)); ptr.value = ptr.value >> 1; ptr.value = setBit(ptr.value,NEGATIVE_FL,0); memStoreByte(machine,ptr.addr,ptr.value); manZeroNeg(machine,ptr.value); } else { /* Accumulator */ machine->regP = setBit(machine->regP, CARRY_FL, bitOn(machine->regA, CARRY_FL)); machine->regA = machine->regA >> 1; machine->regA = setBit(machine->regA,NEGATIVE_FL,0); manZeroNeg(machine,ptr.value); } } static void jmpNOP(machine_6502 *machine, m6502_AddrMode adm){ /* no operation */ } static void jmpORA(machine_6502 *machine, m6502_AddrMode adm){ Pointer ptr; BOOL isValue = getValue(machine, adm, &ptr); warnValue(isValue); machine->regA |= ptr.value; manZeroNeg(machine,machine->regA); } static void jmpTAX(machine_6502 *machine, m6502_AddrMode adm){ machine->regX = machine->regA; manZeroNeg(machine,machine->regX); } static void jmpTXA(machine_6502 *machine, m6502_AddrMode adm){ machine->regA = machine->regX; manZeroNeg(machine,machine->regA); } static void jmpDEX(machine_6502 *machine, m6502_AddrMode adm){ if (machine->regX > 0) machine->regX--; else machine->regX = 0xFF; manZeroNeg(machine, machine->regX); } 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, m6502_AddrMode adm){ machine->regY = machine->regA; manZeroNeg(machine, machine->regY); } static void jmpTYA(machine_6502 *machine, m6502_AddrMode adm){ machine->regA = machine->regY; manZeroNeg(machine, machine->regA); } static void jmpDEY(machine_6502 *machine, m6502_AddrMode adm){ if (machine->regY > 0) machine->regY--; else machine->regY = 0xFF; manZeroNeg(machine, machine->regY); } 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, m6502_AddrMode adm){ Pointer ptr; Bit8 cf; BOOL isValue = getValue(machine, adm, &ptr); if (isValue) { cf = bitOn(machine->regP, CARRY_FL); machine->regP = setBit(machine->regP, CARRY_FL, bitOn(ptr.value, CARRY_FL)); ptr.value = ptr.value >> 1; ptr.value = setBit(ptr.value, NEGATIVE_FL, cf); memStoreByte(machine, ptr.addr, ptr.value); manZeroNeg(machine, ptr.value); } else { /* Implied */ cf = bitOn(machine->regP, CARRY_FL); machine->regP = setBit(machine->regP, CARRY_FL, bitOn(machine->regA, CARRY_FL)); machine->regA = machine->regA >> 1; machine->regA = setBit(machine->regA, NEGATIVE_FL, cf); manZeroNeg(machine, machine->regA); } } static void jmpROL(machine_6502 *machine, m6502_AddrMode adm){ Pointer ptr; Bit8 cf; BOOL isValue = getValue(machine, adm, &ptr); if (isValue) { cf = bitOn(machine->regP, CARRY_FL); machine->regP = setBit(machine->regP, CARRY_FL, bitOn(ptr.value, NEGATIVE_FL)); ptr.value = ptr.value << 1; ptr.value = setBit(ptr.value, CARRY_FL, cf); memStoreByte(machine, ptr.addr, ptr.value); manZeroNeg(machine, ptr.value); } else { /* Implied */ cf = bitOn(machine->regP, CARRY_FL); machine->regP = setBit(machine->regP, CARRY_FL, bitOn(machine->regA,NEGATIVE_FL)); machine->regA = machine->regA << 1; machine->regA = setBit(machine->regA, CARRY_FL, cf); manZeroNeg(machine, machine->regA); } } static void jmpRTI(machine_6502 *machine, m6502_AddrMode adm){ machine->regP = stackPop(machine); machine->regPC = stackPop(machine); } static void jmpRTS(machine_6502 *machine, m6502_AddrMode adm){ Pointer ptr; BOOL isValue = getValue(machine, adm, &ptr); Bit16 nr = stackPop(machine); Bit16 nl = stackPop(machine); warnValue(! isValue); machine->regPC = (nl << 8) | nr; } static void jmpSBC(machine_6502 *machine, m6502_AddrMode adm){ Pointer ptr; /*Bit8 vflag;*/ Bit8 c = bitOn(machine->regP, CARRY_FL); Bit16 tmp, w; BOOL isValue = getValue(machine, adm, &ptr); warnValue(isValue); /*vflag = (bitOn(machine->regA,NEGATIVE_FL) && bitOn(ptr.value, NEGATIVE_FL));*/ if (bitOn(machine->regP, DECIMAL_FL)) { Bit8 ar = nibble(machine->regA, RIGHT); Bit8 br = nibble(ptr.value, RIGHT); Bit8 al = nibble(machine->regA, LEFT); Bit8 bl = nibble(ptr.value, LEFT); tmp = 0xf + ar - br + c; if ( tmp < 0x10){ w = 0; tmp -= 6; } else { w = 0x10; tmp -= 0x10; } w += 0xf0 + al - bl; if ( w < 0x100) { machine->regP = setBit(machine->regP, CARRY_FL, 0); if (bitOn(machine->regP, OVERFLOW_FL) && w < 0x80) machine->regP = setBit(machine->regP, OVERFLOW_FL, 0); w -= 0x60; } else { machine->regP = setBit(machine->regP, CARRY_FL, 1); if (bitOn(machine->regP, OVERFLOW_FL) && w >= 0x180) machine->regP = setBit(machine->regP, OVERFLOW_FL, 0); } w += tmp; } /* end decimal mode */ else { w = 0xff + machine->regA - ptr.value + c; if ( w < 0x100 ){ machine->regP = setBit(machine->regP, CARRY_FL, 0); if (bitOn(machine->regP, OVERFLOW_FL) && w < 0x80) machine->regP = setBit(machine->regP, OVERFLOW_FL, 0); } else { machine->regP = setBit(machine->regP, CARRY_FL, 1); if (bitOn(machine->regP, OVERFLOW_FL) && w >= 0x180) machine->regP = setBit(machine->regP, OVERFLOW_FL, 0); } } machine->regA = w; manZeroNeg(machine,machine->regA); } 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, m6502_AddrMode adm){ stackPush(machine,machine->regX); } static void jmpTSX(machine_6502 *machine, m6502_AddrMode adm){ machine->regX = stackPop(machine); manZeroNeg(machine, machine->regX); } static void jmpPHA(machine_6502 *machine, m6502_AddrMode adm){ stackPush(machine, machine->regA); } static void jmpPLA(machine_6502 *machine, m6502_AddrMode adm){ machine->regA = stackPop(machine); manZeroNeg(machine, machine->regA); } static void jmpPHP(machine_6502 *machine, m6502_AddrMode adm){ stackPush(machine,machine->regP); } 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, 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, m6502_AddrMode adm){ Pointer ptr; BOOL isValue = getValue(machine, adm, &ptr); warnValue(isValue); memStoreByte(machine,ptr.addr,machine->regY); } /* 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'; \ strncpy(opcodes[num].name, _name, 3); opcodes[num].Imm = _Imm; opcodes[num].ZP = _ZP; \ opcodes[num].ZPX = _ZPX; opcodes[num].ZPY = _ZPY; opcodes[num].ABS = _ABS; \ opcodes[num].ABSX = _ABSX; opcodes[num].ABSY = _ABSY; opcodes[num].INDX = _INDX; \ opcodes[num].INDY = _INDY; opcodes[num].SNGL = _SNGL; opcodes[num].BRA = _BRA; \ opcodes[num].func = _func;} /* OPCODE Imm ZP ZPX ZPY ABS ABSX ABSY INDX INDY SGNL BRA Jump Function*/ SETOP( 0, "ADC", 0x69, 0x65, 0x75, 0x00, 0x6d, 0x7d, 0x79, 0x61, 0x71, 0x00, 0x00, jmpADC); SETOP( 1, "AND", 0x29, 0x25, 0x35, 0x31, 0x2d, 0x3d, 0x39, 0x00, 0x00, 0x00, 0x00, jmpAND); SETOP( 2, "ASL", 0x00, 0x06, 0x16, 0x00, 0x0e, 0x1e, 0x00, 0x00, 0x00, 0x0a, 0x00, jmpASL); SETOP( 3, "BIT", 0x00, 0x24, 0x00, 0x00, 0x2c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, jmpBIT); SETOP( 4, "BPL", 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, jmpBPL); SETOP( 5, "BMI", 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, jmpBMI); SETOP( 6, "BVC", 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x50, jmpBVC); SETOP( 7, "BVS", 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, jmpBVS); SETOP( 8, "BCC", 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x90, jmpBCC); SETOP( 9, "BCS", 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xb0, jmpBCS); SETOP(10, "BNE", 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xd0, jmpBNE); SETOP(11, "BEQ", 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, jmpBEQ); SETOP(12, "CMP", 0xc9, 0xc5, 0xd5, 0x00, 0xcd, 0xdd, 0xd9, 0xc1, 0xd1, 0x00, 0x00, jmpCMP); SETOP(13, "CPX", 0xe0, 0xe4, 0x00, 0x00, 0xec, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, jmpCPX); SETOP(14, "CPY", 0xc0, 0xc4, 0x00, 0x00, 0xcc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, jmpCPY); SETOP(15, "DEC", 0x00, 0xc6, 0xd6, 0x00, 0xce, 0xde, 0x00, 0x00, 0x00, 0x00, 0x00, jmpDEC); SETOP(16, "EOR", 0x49, 0x45, 0x55, 0x00, 0x4d, 0x5d, 0x59, 0x41, 0x51, 0x00, 0x00, jmpEOR); SETOP(17, "CLC", 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x00, jmpCLC); SETOP(18, "SEC", 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x00, jmpSEC); SETOP(19, "CLI", 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x58, 0x00, jmpCLI); SETOP(20, "SEI", 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x78, 0x00, jmpSEI); SETOP(21, "CLV", 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xb8, 0x00, jmpCLV); SETOP(22, "CLD", 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xd8, 0x00, jmpCLD); SETOP(23, "SED", 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0x00, jmpSED); SETOP(24, "INC", 0x00, 0xe6, 0xf6, 0x00, 0xee, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, jmpINC); SETOP(25, "JMP", 0x00, 0x00, 0x00, 0x00, 0x4c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, jmpJMP); SETOP(26, "JSR", 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, jmpJSR); SETOP(27, "LDA", 0xa9, 0xa5, 0xb5, 0x00, 0xad, 0xbd, 0xb9, 0xa1, 0xb1, 0x00, 0x00, jmpLDA); SETOP(28, "LDX", 0xa2, 0xa6, 0x00, 0xb6, 0xae, 0x00, 0xbe, 0x00, 0x00, 0x00, 0x00, jmpLDX); SETOP(29, "LDY", 0xa0, 0xa4, 0xb4, 0x00, 0xac, 0xbc, 0x00, 0x00, 0x00, 0x00, 0x00, jmpLDY); SETOP(30, "LSR", 0x00, 0x46, 0x56, 0x00, 0x4e, 0x5e, 0x00, 0x00, 0x00, 0x4a, 0x00, jmpLSR); SETOP(31, "NOP", 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xea, 0x00, jmpNOP); SETOP(32, "ORA", 0x09, 0x05, 0x15, 0x00, 0x0d, 0x1d, 0x19, 0x01, 0x11, 0x00, 0x00, jmpORA); SETOP(33, "TAX", 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0x00, jmpTAX); SETOP(34, "TXA", 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8a, 0x00, jmpTXA); SETOP(35, "DEX", 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xca, 0x00, jmpDEX); SETOP(36, "INX", 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe8, 0x00, jmpINX); SETOP(37, "TAY", 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xa8, 0x00, jmpTAY); SETOP(38, "TYA", 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x98, 0x00, jmpTYA); SETOP(39, "DEY", 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x88, 0x00, jmpDEY); SETOP(40, "INY", 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc8, 0x00, jmpINY); SETOP(41, "ROR", 0x00, 0x66, 0x76, 0x00, 0x6e, 0x7e, 0x00, 0x00, 0x00, 0x6a, 0x00, jmpROR); SETOP(42, "ROL", 0x00, 0x26, 0x36, 0x00, 0x2e, 0x3e, 0x00, 0x00, 0x00, 0x2a, 0x00, jmpROL); SETOP(43, "RTI", 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, jmpRTI); SETOP(44, "RTS", 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x00, jmpRTS); SETOP(45, "SBC", 0xe9, 0xe5, 0xf5, 0x00, 0xed, 0xfd, 0xf9, 0xe1, 0xf1, 0x00, 0x00, jmpSBC); SETOP(46, "STA", 0x00, 0x85, 0x95, 0x00, 0x8d, 0x9d, 0x99, 0x81, 0x91, 0x00, 0x00, jmpSTA); SETOP(47, "TXS", 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x9a, 0x00, jmpTXS); SETOP(48, "TSX", 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xba, 0x00, jmpTSX); SETOP(49, "PHA", 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x48, 0x00, jmpPHA); SETOP(50, "PLA", 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x68, 0x00, jmpPLA); SETOP(51, "PHP", 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, jmpPHP); SETOP(52, "PLP", 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x28, 0x00, jmpPLP); SETOP(53, "STX", 0x00, 0x86, 0x00, 0x96, 0x8e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, jmpSTX); SETOP(54, "STY", 0x00, 0x84, 0x94, 0x00, 0x8c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, jmpSTY); SETOP(55, "---", 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, NULL); } static void buildIndexCache(machine_6502 *machine){ unsigned int i; for (i = 0; i < NUM_OPCODES; i++) { if (machine->opcodes[i].Imm != 0x00){ machine->opcache[machine->opcodes[i].Imm].adm = IMMEDIATE_VALUE; machine->opcache[machine->opcodes[i].Imm].index = i; } if (machine->opcodes[i].ZP != 0x00){ machine->opcache[machine->opcodes[i].ZP].adm = ZERO; machine->opcache[machine->opcodes[i].ZP].index = i; } if (machine->opcodes[i].ZPX != 0x00){ machine->opcache[machine->opcodes[i].ZPX].adm = ZERO_X; machine->opcache[machine->opcodes[i].ZPX].index = i;; } if (machine->opcodes[i].ZPY != 0x00){ machine->opcache[machine->opcodes[i].ZPY].adm = ZERO_Y; machine->opcache[machine->opcodes[i].ZPY].index = i;; } if (machine->opcodes[i].ABS != 0x00){ machine->opcache[machine->opcodes[i].ABS].adm = ABS_VALUE; machine->opcache[machine->opcodes[i].ABS].index = i;; } if (machine->opcodes[i].ABSX != 0x00){ machine->opcache[machine->opcodes[i].ABSX].adm = ABS_X; machine->opcache[machine->opcodes[i].ABSX].index = i;; } if (machine->opcodes[i].ABSY != 0x00){ machine->opcache[machine->opcodes[i].ABSY].adm = ABS_Y; machine->opcache[machine->opcodes[i].ABSY].index = i;; } if (machine->opcodes[i].INDX != 0x00){ machine->opcache[machine->opcodes[i].INDX].adm = INDIRECT_X; machine->opcache[machine->opcodes[i].INDX].index = i;; } if (machine->opcodes[i].INDY != 0x00){ machine->opcache[machine->opcodes[i].INDY].adm = INDIRECT_Y; machine->opcache[machine->opcodes[i].INDY].index = i;; } if (machine->opcodes[i].SNGL != 0x00){ machine->opcache[machine->opcodes[i].SNGL].adm = SINGLE; machine->opcache[machine->opcodes[i].SNGL].index = i; } if (machine->opcodes[i].BRA != 0x00){ machine->opcache[machine->opcodes[i].BRA].adm = ABS_OR_BRANCH; machine->opcache[machine->opcodes[i].BRA].index = i; } } } /* 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, 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; } /* Assembly parser */ static Param *newParam(void){ Param *newp; int i = 0; newp = (Param *) ecalloc(1, sizeof(Param)); newp->type = SINGLE; for (i = 0; i < MAX_PARAM_VALUE; i++) newp->value[i] = 0; newp->vp = 0; newp->label = ecalloc(MAX_LABEL_LEN,sizeof(char)); newp->lbladdr = 0; return newp; } /* Copy the fields from p2 to p1 */ static void copyParam(Param *p1, Param *p2){ int i = 0; strncpy(p1->label,p2->label,MAX_LABEL_LEN); for(i = 0; i < MAX_PARAM_VALUE; i++) p1->value[i] = p2->value[i]; p1->vp = p2->vp; p1->type = p2->type; } static Label *newLabel(void){ Label *newp; newp = (Label *) ecalloc(1, sizeof(Label)); newp->addr = 0; newp->label = ecalloc(MAX_LABEL_LEN,sizeof(char)); return newp; } static AsmLine *newAsmLine(char *cmd, char *label, BOOL decl, Param *param, int lc) { AsmLine *newp; newp = (AsmLine *) ecalloc(1, sizeof(AsmLine)); newp->labelDecl = decl; newp->label = newLabel(); strncpy(newp->label->label,label,MAX_LABEL_LEN); newp->command = estrdup(cmd); newp->param = newParam(); copyParam(newp->param, param); newp->next = NULL; return newp; } static AsmLine *addend(AsmLine *listp, AsmLine *newp) { AsmLine *p; if(listp == NULL) return newp; for (p =listp; p->next != NULL; p = p->next) ; p->next = newp; return listp; } static BOOL apply(AsmLine *listp, BOOL(*fn)(AsmLine*, void*), void *arg) { AsmLine *p; if(listp == NULL) return FALSE; for (p = listp; p != NULL; p = p->next) if (! fn(p,arg) ) return FALSE; return TRUE; } static void freeParam(Param *param){ free(param->label); free(param); } static void freeLabel(Label *label){ free(label->label); free(label); } static void freeallAsmLine(AsmLine *listp) { AsmLine *next; for(; listp != NULL; listp = next){ next = listp->next; freeParam(listp->param); freeLabel(listp->label); free(listp->command); free(listp); } } static BOOL addvalue(Param *param,Bit32 value){ /* jwz: suppress "0 <= unsigned" warning */ if (/*0 <= param->vp &&*/ param->vp < MAX_PARAM_VALUE) { param->value[param->vp++] = value; return TRUE; } else { fprintf(stderr,"Wrong number of parameters: %d. The limit is %d\n",param->vp+1, MAX_PARAM_VALUE); return FALSE; } } static void parseError(char *s){ fprintf(stderr,"6502 Syntax Error: %s\n", s); } /* stoupper() - Destructivley modifies the string making all letters upper case*/ static void stoupper(char **s){ int i = 0; while((*s)[i] != '\0'){ (*s)[i] = toupper((*s)[i]); i++; } } static BOOL isWhite(char c){ return (c == '\r' || c == '\t' || c == ' '); } static void skipSpace(char **s){ for(; isWhite(**s); (*s)++) ; } /* nullify() - fills a string with upto sourceLength null characters. */ static void nullify(char *token, unsigned int sourceLength){ unsigned int i = 0; while (i < sourceLength) token[i++] = '\0'; } static BOOL isBlank(const char *token){ return (token[0] == '\0'); } static BOOL isCommand(machine_6502 *machine, const char *token){ int i = 0; while (i < NUM_OPCODES) { if (strcmp(machine->opcodes[i].name,token) == 0) return TRUE; i++; } if (strcmp(token, "DCB") == 0) return TRUE; return FALSE; } /* hasChar() - Check to see if the current line has a certain charater */ static BOOL hasChar(char *s, char c){ for(; *s != '\0' && *s != '\n'; s++) { if (*s == c) return TRUE; } return FALSE; } static BOOL ishexdigit(char c){ if (isdigit(c)) return TRUE; else { char c1 = toupper(c); return ('A' <= c1 && c1 <= 'F'); } } /* isCmdChar() - Is this a valid character for a command. All of the command are alpha except for the entry point code that is "*=" */ static BOOL isCmdChar(char c){ return (isalpha(c) || c == '*' || c == '='); } /* command() - parse a command from the source code. We pass along a machine so the opcode can be validated. */ static BOOL command(machine_6502 *machine, char **s, char **cmd){ int i = 0; skipSpace(s); for(;isCmdChar(**s) && i < MAX_CMD_LEN; (*s)++) (*cmd)[i++] = **s; if (i == 0) return TRUE; /* Could be a blank line. */ else if (strcmp(*cmd,"*=") == 0) return TRUE; /* This is an entry point. */ else return isCommand(machine,*cmd); } static BOOL declareLabel(char **s, char **label){ int i = 0; skipSpace(s); for(;**s != ':' && **s != '\n' && **s != '\0'; (*s)++){ if (isWhite(**s)) continue; (*label)[i++] = **s; } if (i == 0) return FALSE; /* Current line has to have a label */ else if (**s == ':'){ (*s)++; /* Skip colon */ return TRUE; } else return FALSE; } static BOOL parseHex(char **s, Bit32 *value){ enum { MAX_HEX_LEN = 5 }; if (**s == '$') { char *hex = ecalloc(MAX_HEX_LEN, sizeof(char)); int i = 0; (*s)++; /* move pass $ */ for(; ishexdigit(**s) && i < MAX_HEX_LEN; (*s)++) hex[i++] = **s; *value = strtol(hex,NULL,16); free(hex); return TRUE; } else return FALSE; } static BOOL parseDec(char **s, Bit32 *value){ enum { MAX_DEC_LEN = 4 }; char *dec = ecalloc(MAX_DEC_LEN, sizeof(char)); int i; for(i = 0; isdigit(**s) && i < MAX_DEC_LEN; (*s)++) dec[i++] = **s; if (i > 0){ *value = atoi(dec); free(dec); return TRUE; } else{ free(dec); return FALSE; } } static BOOL parseValue(char **s, Bit32 *value){ skipSpace(s); if (**s == '$') return parseHex(s, value); else return parseDec(s, value); } static BOOL paramLabel(char **s, char **label){ int i; for(i = 0; (isalnum(**s) || **s == '_') && i < MAX_LABEL_LEN; (*s)++) (*label)[i++] = **s; if (i > 0) return TRUE; else return FALSE; } static BOOL immediate(char **s, Param *param){ if (**s != '#') return FALSE; (*s)++; /*Move past hash */ if (**s == '<' || **s == '>'){ char *label = ecalloc(MAX_LABEL_LEN, sizeof(char)); param->type = (**s == '<') ? IMMEDIATE_LESS : IMMEDIATE_GREAT; (*s)++; /* move past < or > */ if (paramLabel(s, &label)){ int ln = strlen(label) + 1; strncpy(param->label, label, ln); free(label); return TRUE; } free(label); } else { Bit32 value; if (parseValue(s, &value)){ if (value > 0xFF){ parseError("Immediate value is too large."); return FALSE; } param->type = IMMEDIATE_VALUE; return addvalue(param, value); } } return FALSE; } static BOOL isDirection(char c){ return (c == 'X' || c == 'Y'); } static BOOL getDirection(char **s, char *direction){ skipSpace(s); if (**s == ','){ (*s)++; skipSpace(s); if (isDirection(**s)){ *direction = **s; (*s)++; return TRUE; } } return FALSE; } static BOOL indirect(char **s, Param *param){ Bit32 value; char c; if (**s == '(') (*s)++; else return FALSE; if (! parseHex(s,&value)) return FALSE; if (value > 0xFF) { parseError("Indirect value is too large."); return FALSE; } if (!addvalue(param, value)) return FALSE; skipSpace(s); if (**s == ')'){ (*s)++; if (getDirection(s,&c)) { if (c == 'Y'){ param->type = INDIRECT_Y; return TRUE; } } } else if (getDirection(s, &c)){ if (c == 'X'){ skipSpace(s); if (**s == ')'){ (*s)++; param->type = INDIRECT_X; return TRUE; } } } return FALSE; } static BOOL dcbValue(char **s, Param *param){ Bit32 val; if (! parseValue(s,&val)) return FALSE; if (val > 0xFF) return FALSE; if (!addvalue(param,val)) return FALSE; param->type = DCB_PARAM; skipSpace(s); if(**s == ','){ (*s)++; return dcbValue(s, param); } else return TRUE; } static BOOL value(char **s, Param *param){ Bit32 val; BOOL abs; BOOL dir; char c = '\0'; if (! parseValue(s,&val)) return FALSE; abs = (val > 0xFF); dir = getDirection(s,&c); if (!addvalue(param,val)) return FALSE; if(abs && dir){ if (c == 'X') param->type = ABS_X; else if (c == 'Y') param->type = ABS_Y; else return FALSE; } else if (abs) param->type = ABS_VALUE; else if (dir){ if (c == 'X') param->type = ZERO_X; else if (c == 'Y') param->type = ZERO_Y; else return FALSE; } else param->type = ZERO; return TRUE; } static BOOL label(char **s, Param *param){ char *label = ecalloc(MAX_LABEL_LEN, sizeof(char)); char c; BOOL labelOk = FALSE; if (paramLabel(s, &label)){ labelOk = TRUE; param->type = ABS_OR_BRANCH; if (getDirection(s, &c)){ if (c == 'X') param->type = ABS_LABEL_X; else if (c == 'Y') param->type = ABS_LABEL_Y; else labelOk = FALSE; } strncpy(param->label,label,MAX_LABEL_LEN); } free(label); return labelOk; } static BOOL parameter(const char *cmd, char **s, Param *param){ skipSpace(s); if (**s == '\0' || **s == '\n') return TRUE; else if (**s == '#') return immediate(s,param); else if (**s == '(') return indirect(s,param); else if (**s == '$' || isdigit(**s)){ if (strcmp(cmd, "DCB") == 0) return dcbValue(s,param); else return value(s,param); } else if (isalpha(**s)) return label(s ,param); else return FALSE; /* Invalid Parameter */ } static void comment(char **s){ skipSpace(s); if (**s == ';') for(;**s != '\n' && **s != '\0'; (*s)++) ; } static void initParam(Param *param){ int i; param->type = SINGLE; for(i = 0; i < MAX_PARAM_VALUE; i++) param->value[i] = 0; param->vp = 0; nullify(param->label,MAX_LABEL_LEN); } static AsmLine *parseAssembly(machine_6502 *machine, BOOL *codeOk, const char *code){ char *s; char *cmd = ecalloc(MAX_CMD_LEN, sizeof(char)); char *label = ecalloc(MAX_LABEL_LEN, sizeof(char)); char *start; /*pointer to the start of the code.*/ unsigned int lc = 1; Param *param; BOOL decl; AsmLine *listp = NULL; *codeOk = TRUE; param = newParam(); s = estrdup(code); start = s; stoupper(&s); while(*s != '\0' && *codeOk){ initParam(param); nullify(cmd, MAX_CMD_LEN); nullify(label, MAX_LABEL_LEN); decl = FALSE; skipSpace(&s); comment(&s); if (*s == '\n'){ lc++; s++; continue; /* blank line */ } else if (*s == '\0') continue; /* no newline at the end of the code */ else if (hasChar(s,':')){ decl = TRUE; if(! declareLabel(&s,&label)){ *codeOk = FALSE; break; } skipSpace(&s); } if(!command(machine, &s, &cmd)){ *codeOk = FALSE; break; } skipSpace(&s); comment(&s); if(!parameter(cmd, &s, param)){ *codeOk = FALSE; break; } skipSpace(&s); comment(&s); if (*s == '\n' || *s == '\0'){ AsmLine *asmm; asmm = newAsmLine(cmd,label,decl,param,lc); listp = addend(listp,asmm); } else { *codeOk = FALSE; break; } } if (! *codeOk) fprintf(stderr,"Syntax error at line %u\n", lc); free(start); free(cmd); free(label); freeParam(param); 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; FILE *ifp; int c; int size = defaultSize; int i = 0; char *buffer = ecalloc(defaultSize,sizeof(char)); if (!buffer) abort(); ifp = fopen(filename, "rb"); if (!ifp) abort(); while((c = getc(ifp)) != EOF){ buffer[i++] = c; if (i == size){ size += defaultSize; buffer = realloc(buffer, size); if (buffer == NULL) { abort(); } } } fclose(ifp); buffer = realloc(buffer, i+2); if (!buffer) abort(); /* Make sure we have a line feed at the end */ buffer[i] = '\n'; buffer[i+1] = '\0'; return buffer; } #endif /* Routines */ /* reset() - Reset CPU and memory. */ static void reset(machine_6502 *machine){ int x, y; for ( y = 0; y < 32; y++ ){ for (x = 0; x < 32; x++){ machine->screen[x][y] = 0; } } for(x=0; x < MEM_64K; x++) machine->memory[x] = 0; machine->codeCompiledOK = FALSE; machine->regA = 0; machine->regX = 0; machine->regY = 0; machine->regP = setBit(machine->regP, FUTURE_FL, 1); machine->defaultCodePC = machine->regPC = PROG_START; machine->regSP = STACK_TOP; machine->runForever = FALSE; machine->labelPtr = 0; machine->codeRunning = FALSE; } /* hexDump() - Dump the memory to output */ void m6502_hexDump(machine_6502 *machine, Bit16 start, Bit16 numbytes, FILE *output){ Bit32 address; Bit32 i; for( i = 0; i < numbytes; i++){ address = start + i; if ( (i&15) == 0 ) { fprintf(output,"\n%.4x: ", address); } fprintf(output,"%.2x%s",machine->memory[address], (i & 1) ? " ":""); } fprintf(output,"%s\n",(i&1)?"--":""); } /* XXX */ /* void save_program(machine_6502 *machine, char *filename){ */ /* FILE *ofp; */ /* Bit16 pc = PROG_START; */ /* Bit16 end = pc + machine->codeLen; */ /* Bit16 n; */ /* ofp = fopen(filename, "w"); */ /* if (!ofp) abort(); */ /* fprintf(ofp,"Bit8 prog[%d] =\n{",machine->codeLen); */ /* n = 1; */ /* while(pc < end) */ /* fprintf(ofp,"0x%.2x,%s",machine->memory[pc++],n++%10?" ":"\n"); */ /* fseek(ofp,-2,SEEK_CUR); */ /* fprintf(ofp,"};\n"); */ /* fclose(ofp); */ /* } */ static BOOL translate(m6502_Opcodes *op,Param *param, machine_6502 *machine){ switch(param->type){ case SINGLE: if (op->SNGL) pushByte(machine, op->SNGL); else { fprintf(stderr,"%s needs a parameter.\n",op->name); return FALSE; } break; case IMMEDIATE_VALUE: if (op->Imm) { pushByte(machine, op->Imm); pushByte(machine, param->value[0]); break; } else { fprintf(stderr,"%s does not take IMMEDIATE_VALUE parameters.\n",op->name); return FALSE; } case IMMEDIATE_GREAT: if (op->Imm) { pushByte(machine, op->Imm); pushByte(machine, param->lbladdr >> 8); break; } else { fprintf(stderr,"%s does not take IMMEDIATE_GREAT parameters.\n",op->name); return FALSE; } case IMMEDIATE_LESS: if (op->Imm) { pushByte(machine, op->Imm); pushByte(machine, param->lbladdr & 0xFF); break; } else { fprintf(stderr,"%s does not take IMMEDIATE_LESS parameters.\n",op->name); return FALSE; } case INDIRECT_X: if (op->INDX) { pushByte(machine, op->INDX); pushByte(machine, param->value[0]); break; } else { fprintf(stderr,"%s does not take INDIRECT_X parameters.\n",op->name); return FALSE; } case INDIRECT_Y: if (op->INDY) { pushByte(machine, op->INDY); pushByte(machine, param->value[0]); break; } else { fprintf(stderr,"%s does not take INDIRECT_Y parameters.\n",op->name); return FALSE; } case ZERO: if (op->ZP) { pushByte(machine, op->ZP); pushByte(machine, param->value[0]); break; } else { fprintf(stderr,"%s does not take ZERO parameters.\n",op->name); return FALSE; } case ZERO_X: if (op->ZPX) { pushByte(machine, op->ZPX); pushByte(machine, param->value[0]); break; } else { fprintf(stderr,"%s does not take ZERO_X parameters.\n",op->name); return FALSE; } case ZERO_Y: if (op->ZPY) { pushByte(machine, op->ZPY); pushByte(machine, param->value[0]); break; } else { fprintf(stderr,"%s does not take ZERO_Y parameters.\n",op->name); return FALSE; } case ABS_VALUE: if (op->ABS) { pushByte(machine, op->ABS); pushWord(machine, param->value[0]); break; } else { fprintf(stderr,"%s does not take ABS_VALUE parameters.\n",op->name); return FALSE; } case ABS_OR_BRANCH: if (op->ABS > 0){ pushByte(machine, op->ABS); pushWord(machine, param->lbladdr); } else { if (op->BRA) { pushByte(machine, op->BRA); { int diff = abs((int)param->lbladdr - (int)machine->defaultCodePC); int backward = (param->lbladdr < machine->defaultCodePC); pushByte(machine, (backward) ? 0xff - diff : diff - 1); } } else { fprintf(stderr,"%s does not take BRANCH parameters.\n",op->name); return FALSE; } } break; case ABS_X: if (op->ABSX) { pushByte(machine, op->ABSX); pushWord(machine, param->value[0]); break; } else { fprintf(stderr,"%s does not take ABS_X parameters.\n",op->name); return FALSE; } case ABS_Y: if (op->ABSY) { pushByte(machine, op->ABSY); pushWord(machine, param->value[0]); break; } else { fprintf(stderr,"%s does not take ABS_Y parameters.\n",op->name); return FALSE; } case ABS_LABEL_X: if (op->ABSX) { pushByte(machine, op->ABSX); pushWord(machine, param->lbladdr); break; } else { fprintf(stderr,"%s does not take ABS_LABEL_X parameters.\n",op->name); return FALSE; } case ABS_LABEL_Y: if (op->ABSY) { pushByte(machine, op->ABSY); pushWord(machine, param->lbladdr); break; } else { fprintf(stderr,"%s does not take ABS_LABEL_Y parameters.\n",op->name); return FALSE; } case DCB_PARAM: /* Handled elsewhere */ break; } return TRUE; } /* compileLine() - Compile one line of code. Returns TRUE if it compile successfully. */ static BOOL compileLine(AsmLine *asmline, void *args){ machine_6502 *machine; machine = args; if (isBlank(asmline->command)) return TRUE; if (strcmp("*=",asmline->command) == 0){ machine->defaultCodePC = asmline->param->value[0]; } else if (strcmp("DCB",asmline->command) == 0){ int i; for(i = 0; i < asmline->param->vp; i++) pushByte(machine, asmline->param->value[i]); } else{ int i; char *command = asmline->command; m6502_Opcodes op; for(i = 0; i < NUM_OPCODES; i++){ if (strcmp(machine->opcodes[i].name, command) == 0){ op = machine->opcodes[i]; break; } } if (i == NUM_OPCODES) return FALSE; /* unknow upcode */ else return translate(&op,asmline->param,machine); } return TRUE; } /* indexLabels() - Get the address for each label */ static BOOL indexLabels(AsmLine *asmline, void *arg){ machine_6502 *machine; int thisPC; Bit16 oldDefault; machine = arg; oldDefault = machine->defaultCodePC; thisPC = machine->regPC; /* Figure out how many bytes this instruction takes */ machine->codeLen = 0; if ( ! compileLine(asmline, machine) ){ return FALSE; } /* If the machine's defaultCodePC has changed then we encountered a *= which changes the load address. We need to initials our code *counter with the current default. */ if (oldDefault == machine->defaultCodePC){ machine->regPC += machine->codeLen; } else { machine->regPC = machine->defaultCodePC; /*oldDefault = machine->defaultCodePC;*/ } if (asmline->labelDecl) { asmline->label->addr = thisPC; } return TRUE; } static BOOL changeParamLabelAddr(AsmLine *asmline, void *label){ Label *la = label; if (strcmp(asmline->param->label, la->label) == 0) asmline->param->lbladdr = la->addr; return TRUE; } static BOOL linkit(AsmLine *asmline, void *asmlist){ apply(asmlist,changeParamLabelAddr,asmline->label); return TRUE; } /* linkLabels - Make sure all of the references to the labels contain the right address*/ static void linkLabels(AsmLine *asmlist){ apply(asmlist,linkit,asmlist); } /* compileCode() - Compile the current assembly code for the machine */ static BOOL compileCode(machine_6502 *machine, const char *code){ BOOL codeOk; AsmLine *asmlist; reset(machine); machine->defaultCodePC = machine->regPC = PROG_START; asmlist = parseAssembly(machine, &codeOk, code); if(codeOk){ /* First pass: Find the addresses for the labels */ if (!apply(asmlist, indexLabels, machine)) return FALSE; /* update label references */ linkLabels(asmlist); #if 0 /* prints out some debugging information */ { AsmLine *p; if(asmlist != NULL){ for (p = asmlist; p != NULL; p = p->next) fprintf(stderr,"%s lbl: %s addr: %d ParamLbl: %s ParamAddr: %d\n", p->command, p->label->label, p->label->addr, p->param->label, p->param->lbladdr); } } #endif /* Second pass: translate the instructions */ machine->codeLen = 0; /* Link label call push_byte which increments defaultCodePC. We need to reset it so the compiled code goes in the correct spot. */ machine->defaultCodePC = PROG_START; if (!apply(asmlist, compileLine, machine)) return FALSE; if (machine->defaultCodePC > PROG_START ){ machine->memory[machine->defaultCodePC] = 0x00; codeOk = TRUE; } else{ fprintf(stderr,"No Code to run.\n"); codeOk = FALSE; } } else{ fprintf(stderr,"An error occured while parsing the file.\n"); codeOk = FALSE; } freeallAsmLine(asmlist); return codeOk; } /* * execute() - Executes one instruction. * This is the main part of the CPU emulator. * */ static void execute(machine_6502 *machine){ Bit8 opcode; m6502_AddrMode adm; int opidx; if(!machine->codeRunning) return; opcode = popByte(machine); if (opcode == 0x00) machine->codeRunning = FALSE; else { opidx = opIndex(machine,opcode,&adm); if(opidx > -1) machine->opcodes[opidx].func(machine, adm); else fprintf(stderr,"Invalid opcode!\n"); } if( (machine->regPC == 0) || (!machine->codeRunning) ) { machine->codeRunning = FALSE; } } machine_6502 *m6502_build(void){ machine_6502 *machine; machine = ecalloc(1, sizeof(machine_6502)); assignOpCodes(machine->opcodes); buildIndexCache(machine); reset(machine); return machine; } void m6502_destroy6502(machine_6502 *machine){ free(machine); machine = NULL; } void m6502_trace(machine_6502 *machine, FILE *output){ Bit8 opcode = memReadByte(machine,machine->regPC); m6502_AddrMode adm; Pointer ptr; int opidx = opIndex(machine,opcode,&adm); int stacksz = STACK_TOP - machine->regSP; fprintf(output,"\n NVFBDIZC\nP: %d%d%d%d%d%d%d%d ", bitOn(machine->regP,NEGATIVE_FL), bitOn(machine->regP,OVERFLOW_FL), bitOn(machine->regP,FUTURE_FL), bitOn(machine->regP,BREAK_FL), bitOn(machine->regP,DECIMAL_FL), bitOn(machine->regP,INTERRUPT_FL), bitOn(machine->regP,ZERO_FL), bitOn(machine->regP,CARRY_FL)); fprintf(output,"A: %.2x X: %.2x Y: %.2x SP: %.4x PC: %.4x\n", machine->regA, machine->regX, machine->regY, machine->regSP, machine->regPC); if (opidx > -1){ Bit16 pc = machine->regPC; fprintf(output,"\n%.4x:\t%s",machine->regPC, machine->opcodes[opidx].name); if (peekValue(machine, adm, &ptr, pc+1)) fprintf(output,"\tAddress:%.4x\tValue:%.4x\n", ptr.addr,ptr.value); else fprintf(output,"\n"); } fprintf(output,"STACK:"); 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. */ m6502_AddrMode adm; Bit16 addr; Bit8 opcode; int opidx; char *mem; int i; Bit16 opc = machine->regPC; mem = calloc(20,sizeof(char)); machine->regPC = PROG_START; do{ addr = machine->regPC; opcode = popByte(machine); opidx = opIndex(machine,opcode,&adm); for (i = 0; i < 20; i++) mem[i] = '\0'; dismem(machine, adm, mem); fprintf(output,"%x\t%s\t%s\n", addr,machine->opcodes[opidx].name,mem); }while((machine->regPC - PROG_START) < machine->codeLen); /*XXX - may need to change since defaultCodePC */ free(mem); machine->regPC = opc; } #endif #ifdef READ_FILES void m6502_eval_file(machine_6502 *machine, const char *filename, m6502_Plotter plot, void *plotterState){ char *code = NULL; machine->plot = plot; machine->plotterState = plotterState; code = fileToBuffer(filename); if (! compileCode(machine, code) ) abort(); free(code); machine->defaultCodePC = machine->regPC = PROG_START; machine->codeRunning = TRUE; do{ sleep(0); /* XXX */ #if 0 trace(machine); #endif execute(machine); }while(machine->codeRunning); } void m6502_start_eval_file(machine_6502 *machine, const char *filename, m6502_Plotter plot, void *plotterState){ char *code = NULL; reset(machine); machine->plot = plot; machine->plotterState = plotterState; code = fileToBuffer(filename); if (! compileCode(machine, code) ) abort(); free(code); machine->defaultCodePC = machine->regPC = PROG_START; machine->codeRunning = TRUE; execute(machine); } #endif /* READ_FILES */ void m6502_start_eval_string(machine_6502 *machine, const char *code, m6502_Plotter plot, void *plotterState){ reset(machine); machine->plot = plot; machine->plotterState = plotterState; if (! compileCode(machine, code) ){ fprintf(stderr,"Could not compile code.\n"); } machine->defaultCodePC = machine->regPC = PROG_START; machine->codeRunning = TRUE; execute(machine); } /* void start_eval_binary(machine_6502 *machine, Bit8 *program, */ /* unsigned int proglen, */ /* Plotter plot, void *plotterState){ */ /* unsigned int pc, n; */ /* reset(machine); */ /* machine->plot = plot; */ /* machine->plotterState = plotterState; */ /* machine->regPC = PROG_START; */ /* pc = machine->regPC; */ /* machine->codeLen = proglen; */ /* n = 0; */ /* while (n < proglen){ */ /* machine->memory[pc++] = program[n++]; */ /* } */ /* machine->codeRunning = TRUE; */ /* execute(machine); */ /* } */ void m6502_next_eval(machine_6502 *machine, int insno){ int i = 0; for (i = 1; i < insno; i++){ if (machine->codeRunning){ #if 0 trace(machine, stdout); #endif execute(machine); } else break; } } xscreensaver-5.36/hacks/abstractile.c000664 000767 000024 00000153317 12716255410 017707 0ustar00jwzstaff000000 000000 /* * Copyright (c) 2004-2009 Steve Sundstrom * * 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. */ #include "screenhack.h" #include "colors.h" #include "hsv.h" #include #include #include /*#include */ #define MODE_CREATE 0 /* init, create, then finish sleep */ #define MODE_ERASE 1 /* erase, then reset colors */ #define MODE_DRAW 2 #define DIR_NONE 0 #define DIR_UP 1 #define DIR_DOWN 2 #define DIR_LEFT 3 #define DIR_RIGHT 4 #define LINE_FORCE 1 #define LINE_NEW 2 #define LINE_BRIN 3 #define LINE_BROUT 4 #define PT_UL 0 #define PT_MP 1 #define PT_LR 2 #define PT_NL 3 #define D3D_NONE 0 #define D3D_BLOCK 1 #define D3D_NEON 2 #define D3D_TILED 3 #define TILE_RANDOM 0 #define TILE_FLAT 1 #define TILE_THIN 2 #define TILE_OUTLINE 3 #define TILE_BLOCK 4 #define TILE_NEON 5 #define TILE_TILED 6 #define BASECOLORS 30 #define SHADES 12 #define MAXCOLORS 40 #define LAYERS 4 #define PATTERNS 40 #define SHAPES 18 #define DRAWORDERS 40 #define COLORMAPS 20 #define WAVES 6 #define STRETCHES 8 struct lineStruct { unsigned int x, y, len, obj, color, ndol; int deo; Bool hv; }; struct gridStruct { unsigned int line, hl, hr, vu, vd, dhl, dhr, dvu, dvd; }; /* basically the same as global variables, but used to keep them in a bucket and pass them around easier like the original C++ implementation */ struct state { /* window values */ Display *display; Window window; XWindowAttributes xgwa; GC fgc, bgc; XColor colors[255]; /* memory values */ struct lineStruct *dline, *eline; struct gridStruct *grid; unsigned int *zlist, *fdol; Bool *odi; /* draw, erase, fill, init, line, object, z indexes */ unsigned int di, ei, fi, ii, bi, li, eli, oi, zi; /* size variables */ int gridx, gridy; /* grid size */ unsigned int gridn; int lwid, bwid, swid;/* line width, background width, shadow width */ int narray, max_wxh; int elwid, elpu, egridx, egridy; /* for now */ /* fill variables */ int bnratio; /* ratio of branch lines to new lines */ int maxlen; /* maximum length of line */ int forcemax; /* make line be max possible length */ int olen; /* open length set by findopen */ int bln; /* blocking line number set by findopen, -1=edge */ /* color variables */ int ncolors; /* number of colors for screen */ int shades; int rco[MAXCOLORS]; /* random ordering of colors for deo */ int cmap; int layers; Bool newcols; /* can we create new colormaps with each screen */ /* draw variables */ int dmap, emap; /* pattern by which line draw order is determined */ int dvar, evar; /* random number added to .deo to vary */ int ddir, edir; /* draw/erase in forward direction or reverse */ int lpu; /* lines drawn per update used to adjust speed */ int d3d; int round; int outline; /* layered draw variables */ int pattern[LAYERS], shape[LAYERS], mix[LAYERS]; int csw[LAYERS], wsx[LAYERS], wsy[LAYERS], sec[LAYERS]; int cs1[LAYERS], cs2[LAYERS], cs3[LAYERS]; int cs4[LAYERS]; int wave[LAYERS], waveh[LAYERS], wavel[LAYERS]; int rx1[LAYERS], rx2[LAYERS], rx3[LAYERS]; int ry1[LAYERS], ry2[LAYERS], ry3[LAYERS]; /* misc variables */ int mode, sleep, speed, tile, dialog; Bool grid_full, resized; struct timeval time; }; static int _min(int a, int b) { if (a<=b) return(a); return(b); } static int _max(int a, int b) { if (a>=b) return(a); return(b); } static int _dist(struct state *st, int x1, int x2, int y1, int y2, int s) { double xd=x1-x2; double yd=y1-y2; switch(s) { case 0: return((int)sqrt(xd*xd+yd*yd)); case 1: return((int)sqrt(xd*xd*st->cs1[0]*2+yd*yd)); case 2: return((int)sqrt(xd*xd+yd*yd*st->cs2[0]*2)); default: return((int)sqrt(xd*xd*st->cs1[0]/st->cs2[0]+yd*yd*st->cs3[0]/st->cs4[0])); } } static int _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*M_PI/l)*h)); case 1: /* double wave*/ case 2: /* double wave*/ 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 */ return(abs((x%(l*4)-l*2))*h*3/l); case 5: /* sawtooth */ return((x%(l))*h/l); default: /* no wave */ return(0); } } static int _triangle(struct state *st, int x, int y, int rx, int ry, int t) { switch(t) { case 1: return(_min(_min(x+y+rx-(st->gridx/2),st->gridx-x+y),(st->gridy-y+(ry/2))*3/2)); case 2: return(_min(_min(x-rx,y-ry),(rx+ry-x-y)*2/3)); case 3: return(_min(_min(st->gridx-x-rx,y-ry),(rx+ry-st->gridx+x-y)*2/3)); case 4: return(_min(_min(x-rx,st->gridy-y-ry),(rx+ry-x-st->gridy+y)*2/3)); } return(_min(_min(st->gridx-x-rx,st->gridy-y-ry),(rx+ry-st->gridx+x-st->gridy+y)*2/3)); } static void _init_zlist(struct state *st) { unsigned int tmp, y, z; st->gridx=st->xgwa.width/st->lwid; st->gridy=st->xgwa.height/st->lwid; if ((st->gridx <= 0) || (st->gridy <= 0)) abort(); st->gridn=st->gridx*st->gridy; /* clear grid */ for (z=0; zgridn; z++) { st->grid[z].line=st->grid[z].hl=st->grid[z].hr=st->grid[z].vu=st->grid[z].vd=st->grid[z].dhl=st->grid[z].dhr=st->grid[z].dvu=st->grid[z].dvd=0; st->zlist[z]=z; } /* rather than pull x,y points randomly and wait to hit final empy cells a list of all points is created and mixed so empty cells do get hit last */ for (z=0; zgridn; z++) { y=random()%st->gridn; tmp=st->zlist[y]; st->zlist[y]=st->zlist[z]; st->zlist[z]=tmp; } } static void make_color_ramp_rgb (Screen *screen, Visual *visual, Colormap cmap, int r1, int g1, int b1, int r2, int g2, int b2, XColor *colors, int *ncolorsP, Bool closed_p) { int h1, h2; double s1, s2, v1, v2; rgb_to_hsv(r1, g1, b1, &h1, &s1, &v1); rgb_to_hsv(r2, g2, b2, &h2, &s2, &v2); make_color_ramp(screen, visual, cmap, h1, s1, v1, h2, s2, v2, colors, ncolorsP, False, True, 0); } static void _init_colors(struct state *st) { int col[BASECOLORS]; int c1, c2, c3, h1, h2, h3; int r1, g1, b1, r2, g2, b2, r3, g3, b3; double s1, s2, s3, v1, v2, v3; XColor tmp_col1[16], tmp_col2[16], tmp_col3[16]; unsigned short basecol[BASECOLORS][3]={ /* 0 dgray */ {0x3333,0x3333,0x3333}, /* 1 dbrown */ {0x6666,0x3333,0x0000}, /* 2 dred */ {0x9999,0x0000,0x0000}, /* 3 orange */ {0xFFFF,0x6666,0x0000}, /* 4 gold */ {0xFFFF,0xCCCC,0x0000}, /* 5 olive */ {0x6666,0x6666,0x0000}, /* 6 ivy */ {0x0000,0x6666,0x0000}, /* 7 dgreen */ {0x0000,0x9999,0x0000}, /* 8 bluegray */ {0x3333,0x6666,0x6666}, /* 9 dblue */ {0x0000,0x0000,0x9999}, /* 10 blue */ {0x3333,0x3333,0xFFFF}, /* 11 dpurple */ {0x6666,0x0000,0xCCCC}, /* 12 purple */ {0x6666,0x3333,0xFFFF}, /* 13 violet */ {0x9999,0x3333,0x9999}, /* 14 magenta */ {0xCCCC,0x3333,0xCCCC}, /* lights */ /* 15 gray */ {0x3333,0x3333,0x3333}, /* 16 brown */ {0x9999,0x6666,0x3333}, /* 17 tan */ {0xCCCC,0x9999,0x3333}, /* 18 red */ {0xFFFF,0x0000,0x0000}, /* 19 lorange */ {0xFFFF,0x9999,0x0000}, /* 20 yellow */ {0xFFFF,0xFFFF,0x0000}, /* 21 lolive */ {0x9999,0x9999,0x0000}, /* 22 green */ {0x3333,0xCCCC,0x0000}, /* 23 lgreen */ {0x3333,0xFFFF,0x3333}, /* 24 cyan */ {0x0000,0xCCCC,0xCCCC}, /* 25 sky */ {0x3333,0xFFFF,0xFFFF}, /* 26 marine */ {0x3333,0x6666,0xFFFF}, /* 27 lblue */ {0x3333,0xCCCC,0xFFFF}, /* 28 lpurple */ {0x9999,0x9999,0xFFFF}, /* 29 pink */ {0xFFFF,0x9999,0xFFFF}}; if (st->d3d) { st->shades = (st->d3d==D3D_TILED) ? 5 : st->lwid/2+1; st->ncolors=4+random()%4; if (st->cmap>0) { /* tint the basecolors a bit */ for (c1=0; c1cmap%4) { case 0: /* all */ for (c1=0; c1ncolors; c1++) col[c1]=random()%BASECOLORS; break; case 1: /* darks */ for (c1=0; c1ncolors; c1++) col[c1]=random()%15; break; case 2: /* semi consecutive darks */ col[0]=random()%15; for (c1=1; c1ncolors; c1++) col[c1]=(col[c1-1]+1+random()%2)%15; break; case 3: /* consecutive darks */ col[0]=random()%(15-st->ncolors); for (c1=1; c1ncolors; c1++) col[c1]=col[c1-1]+1; break; } for (c1=0; c1ncolors; c1++) { /* adjust colors already set */ for (h1=c1*st->shades-1; h1>=0; h1--) st->colors[h1+st->shades]=st->colors[h1]; make_color_ramp_rgb(st->xgwa.screen, st->xgwa.visual, st->xgwa.colormap, basecol[col[c1]][0], basecol[col[c1]][1], basecol[col[c1]][2], 0xFFFF, 0xFFFF, 0xFFFF, st->colors, &st->shades, False); } return; } /* not 3d */ st->shades=1; if (st->cmap%2) { /* basecolors */ if (random()%3) { c1=random()%15; c2=(c1+3+(random()%5))%15; c3=(c2+3+(random()%5))%15; } else { c1=random()%BASECOLORS; c2=(c1+5+(random()%10))%BASECOLORS; c3=(c2+5+(random()%10))%BASECOLORS; } r1=basecol[c1][0]; g1=basecol[c1][1]; b1=basecol[c1][2]; r2=basecol[c2][0]; g2=basecol[c2][1]; b2=basecol[c2][2]; r3=basecol[c3][0]; g3=basecol[c3][1]; b3=basecol[c3][2]; } else { /* random rgb's */ r1=random()%65535; g1=random()%65535; b1=random()%65535; r2=(r1+16384+random()%32768)%65535; g2=(g1+16384+random()%32768)%65535; b2=(b1+16384+random()%32768)%65535; r3=(r2+16384+random()%32768)%65535; g3=(g2+16384+random()%32768)%65535; b3=(b2+16384+random()%32768)%65535; } switch(st->cmap) { case 0: /* make_color_ramp color->color */ case 1: case 2: /* make_color_ramp color->white */ case 3: st->ncolors=5+random()%5; if (st->cmap>1) r2=g2=b2=0xFFFF; make_color_ramp_rgb(st->xgwa.screen, st->xgwa.visual, st->xgwa.colormap, r1, g1, b1, r2, g2, b2, st->colors, &st->ncolors, random()%2); break; case 4: /* 3 color make_color_loop */ case 5: case 6: case 7: st->ncolors=8+random()%12; rgb_to_hsv(r1, g1, b1, &h1, &s1, &v1); rgb_to_hsv(r2, g2, b2, &h2, &s2, &v2); rgb_to_hsv(r3, g3, b3, &h3, &s3, &v3); make_color_loop(st->xgwa.screen, st->xgwa.visual, st->xgwa.colormap, h1, s1, v1, h2, s2, v2, h3, s3, v3, st->colors, &st->ncolors, True, False); break; case 8: /* random smooth */ case 9: st->ncolors=(random()%4)*6+12; make_smooth_colormap (st->xgwa.screen, st->xgwa.visual, st->xgwa.colormap, st->colors, &st->ncolors, True, False, True); break; case 10: /* rainbow */ st->ncolors=(random()%4)*6+12; make_uniform_colormap (st->xgwa.screen, st->xgwa.visual, st->xgwa.colormap, st->colors, &st->ncolors, True, False, True); break; case 11: /* dark to light blend */ case 12: case 13: case 14: st->ncolors=7; make_color_ramp_rgb(st->xgwa.screen, st->xgwa.visual, st->xgwa.colormap, r1, g1, b1, 0xFFFF, 0xFFFF, 0xFFFF, tmp_col1, &st->ncolors, False); make_color_ramp_rgb(st->xgwa.screen, st->xgwa.visual, st->xgwa.colormap, r2, g2, b2, 0xFFFF, 0xFFFF, 0xFFFF, tmp_col2, &st->ncolors, False); if (st->cmap<13) { for(c1=0; c1<=4; c1++) { st->colors[c1*2]=tmp_col1[c1]; st->colors[c1*2+1]=tmp_col2[c1]; } st->ncolors=10; } else { make_color_ramp_rgb(st->xgwa.screen, st->xgwa.visual, st->xgwa.colormap, r3, g3, b3, 0xFFFF, 0xFFFF, 0xFFFF, tmp_col3, &st->ncolors, False); for(c1=0; c1<=4; c1++) { st->colors[c1*3]=tmp_col1[c1]; st->colors[c1*3+1]=tmp_col2[c1]; st->colors[c1*3+2]=tmp_col3[c1]; } st->ncolors=15; } break; default: /* random */ st->ncolors=(random()%4)*6+12; make_random_colormap (st->xgwa.screen, st->xgwa.visual, st->xgwa.colormap, st->colors, &st->ncolors, False, True, False, True); break; } /* set random color order for drawing and erasing */ for (c1=0; c1rco[c1]=c1; for (c1=0; c1rco[c1]; st->rco[c1]=st->rco[c3]; st->rco[c3]=c2; } } static int _comparedeo(const void *i, const void *j) { struct lineStruct *h1, *h2; h1=(struct lineStruct *)i; h2=(struct lineStruct *)j; if (h1->deo > h2->deo) return(1); if (h1->deo < h2->deo) return(-1); return(0); } static int _hv(struct state *st, int x, int y, int d1, int d2, int pn, Bool de) { int v1, v2, r; switch (d1) { case 0: v1 = (de) ? st->egridx-x : st->gridx-x; break; case 1: v1 = y; break; case 2: v1 = x; break; default: v1 = (de) ? st->egridy-y : st->gridy-y; break; } switch (d2) { case 0: v2 = (de) ? st->egridx-x : st->gridx-x; break; case 1: v2 = y; break; case 2: v2 = x; break; default: v2 = (de) ? st->egridy-y : st->gridy-y; break; } r = (de) ? (st->dline[st->li].hv) ? (v1+10000)*pn : (v2+10000)*-pn : (st->eline[st->li].hv) ? (v1+10000)*pn : (v2+10000)*-pn; return(r); } static int _getdeo(struct state *st, int x, int y, int map, int de) { int cr; switch(map) { case 0: /* horizontal one side */ return(x); case 1: /* vertical one side */ return(y); case 2: /* horizontal two side */ return(_min(x,st->gridx-x)+1); case 3: /* vertical two side */ return(_min(y,st->gridy-y)+1); case 4: /* square */ return(_max(abs(x-st->rx3[de]),abs(y-st->ry3[de]))+1); case 5: /* two squares */ return(_min(_max(abs(x-(st->rx3[de]/2)),abs(y-st->ry3[de])),_max(abs(x-(st->gridx-(st->rx2[de]/2))),abs(y-st->ry2[de])))+1); case 6: /* horizontal rectangle */ return(_max(abs(x-st->rx3[de]),abs(y-(st->ry3[de]))*st->cs1[de])+1); case 7: /* vertical rectangle */ return(_max(abs(x-st->rx3[de])*st->cs1[de],abs(y-(st->ry3[de])))+1); case 8: /* + cross */ return(_min(abs(x-st->rx3[de]),abs(y-(st->ry3[de])))+1); case 9: /* diagonal */ return((x*3/4+y)+1); case 10: /* opposite diagonal */ return((x*3/4+st->gridy-y)+1); case 11: /* diamond */ return((abs(x-st->rx3[de])+abs(y-st->ry3[de]))/2+1); case 12: /* two diamonds */ return(_min(abs(x-(st->rx3[de]/2))+abs(y-st->ry3[de]),abs(x-(st->gridx-(st->rx2[de]/2)))+abs(y-st->ry2[de]))/2+1); case 13: /* circle */ return(_dist(st,x,st->rx3[de],y,st->ry3[de],0)+1); case 14: /* horizontal ellipse */ return(_dist(st,x,st->rx3[de],y,st->ry3[de],1)+1); case 15: /* vertical ellipse */ return(_dist(st,x,st->rx3[de],y,st->ry3[de],2)+1); case 16: /* two circles */ return(_min(_dist(st,x,st->rx3[de]/2,y,st->ry3[de],0),_dist(st,x,st->gridx-(st->rx2[de]/2),y,st->ry2[de],0))+1); case 17: /* horizontal straight wave */ return(x+_wave(st,st->gridy+y,st->csw[0]*st->cs1[0],st->csw[0]*st->cs2[0],st->wave[de])); case 18: /* vertical straight wave */ return(y+_wave(st,st->gridx+x,st->csw[0]*st->cs1[0],st->csw[0]*st->cs2[0],st->wave[de])); case 19: /* horizontal wavey wave */ return(x+_wave(st,st->gridy+y+((x/5)*st->edir),st->csw[de]*st->cs1[de],st->csw[de]*st->cs2[de],st->wave[de])+1); case 20: /* vertical wavey wave */ return(y+_wave(st,st->gridx+x+((y/5)*st->edir),st->csw[de]*st->cs1[de],st->csw[de]*st->cs2[de],st->wave[de])+1); /* no d3d for 21,22 */ case 21: /* simultaneous directional */ return(_hv(st,x,y,st->cs1[0]%2,st->cs2[0]%2,1,de)); case 22: /* reverse directional */ return(_hv(st,x,y,st->cs1[0]%2,st->cs2[0]%2,-1,de)); case 23: /* length */ if (de) return(st->dline[st->li].len*1000+random()%5000); else return(st->eline[st->li].len*1000+random()%5000); case 24: /* object */ case 25: case 26: case 27: if (de) return(st->dline[st->li].obj*100); else return(st->eline[st->li].obj*100); default: /* color */ cr = (de) ? st->dline[st->li].color : st->eline[st->li].color; if (map<34) cr=st->rco[cr]; if ((map%6<4) || (de)) { /* by color */ cr*=1000; cr+=random()%1000; } else if (map%6==4) { /* by color horizontaly */ cr*=st->gridx; cr+=(x+random()%(st->gridx/2)); } else { /* by color vertically */ cr*=st->gridy; cr+=(y+random()%(st->gridy/2)); } return(cr); } return(1); } static void _init_screen(struct state *st) { int nstr, x; struct lineStruct *tmp; /* malloc memory in case of resize */ if (st->resized) { st->max_wxh=st->xgwa.width*st->xgwa.height; if (st->dline!=NULL) free(st->dline); if (st->eline!=NULL) free(st->eline); if (st->grid!=NULL) free(st->grid); if (st->zlist!=NULL) free(st->zlist); if (st->fdol!=NULL) free(st->fdol); if (st->odi!=NULL) free(st->odi); st->narray = (st->xgwa.width+1)*(st->xgwa.height+1)/4+1; st->dline = calloc(st->narray, sizeof(struct lineStruct)); st->eline = calloc(st->narray, sizeof(struct lineStruct)); st->grid = calloc(st->narray, sizeof(struct gridStruct)); st->zlist = calloc(st->narray, sizeof(unsigned int)); st->fdol = calloc(st->narray, sizeof(unsigned int)); st->odi = calloc(st->narray, sizeof(Bool)); if ((st->dline == NULL) || (st->eline == NULL) || (st->grid == NULL) || (st->zlist == NULL) || (st->fdol == NULL) || (st->odi == NULL)) { fprintf(stderr, "not enough memory\n"); exit(1); } st->dialog = (st->xgwa.width<500) ? 1 : 0; st->resized=False; } if (st->ii) { /* swap st->dline and st->eline pointers to resort and erase */ tmp=st->eline; st->eline=st->dline; st->dline=tmp; st->eli=st->li; st->elwid=st->lwid; st->elpu=st->lpu; st->egridx=st->gridx; st->egridy=st->gridy; /* create new erase order */ for (st->li=1; st->li<=st->eli; st->li++) st->eline[st->li].deo=(_getdeo(st,st->eline[st->li].x,st->eline[st->li].y,st->emap,0) + (random()%st->evar) + (random()%st->evar))*st->edir; qsort(st->eline, st->eli+1, sizeof(struct lineStruct), _comparedeo); } st->ii++; /* clear arrays and other counters */ st->di=st->ei=st->fi=st->li=st->oi=st->zi=0; st->grid_full=False; /* li starts from 1 */ st->dline[0].x=st->dline[0].y=st->dline[0].len=0; /* to keep it first after sorting so di is never null */ st->dline[0].deo=-999999999; /* set random screen variables */ st->lwid = (st->ii==1) ? 3 : 2+((random()%6)%4); st->d3d = ((st->tile==TILE_FLAT) || (st->tile==TILE_THIN) || (st->tile==TILE_OUTLINE)) ? D3D_NONE : (st->tile==TILE_BLOCK) ? D3D_BLOCK : (st->tile==TILE_NEON) ? D3D_NEON : (st->tile==TILE_TILED) ? D3D_TILED : /* force TILE_D3D on first screen to properly load all shades */ ((st->ii==1) && (!st->newcols)) ? D3D_TILED : (random()%5)%4; /* st->d3d=D3D_BLOCK; st->lwid=2; */ st->outline = (st->tile==TILE_OUTLINE) ? 1 : ((st->tile!=TILE_RANDOM) || (random()%5)) ? 0 : 1; st->round = (st->d3d==D3D_NEON) ? 1 : ((st->d3d==D3D_BLOCK) || (st->outline) || (random()%6)) ? 0 : 1; if ((st->d3d) || (st->outline) || (st->round)) st->lwid+=2; if ((!st->d3d) && (!st->round) && (!st->outline) && (st->lwid>3)) st->lwid-=2; if (st->d3d==D3D_TILED) st->lwid++; if (st->tile==TILE_THIN) st->lwid=2; _init_zlist(st); st->maxlen=(st->lwid>6) ? 2+(random()%4) : (st->lwid>4) ? 2+(random()%8)%6 : (st->lwid>2) ? 2+(random()%12)%8 : 2+(random()%15)%10; st->bnratio = 4+(random()%4)+(random()%4); st->forcemax = (random()%6) ? 0 : 1; if ((st->ii==1) || (st->newcols)) _init_colors(st); st->dmap = (st->emap+5+(random()%5))%DRAWORDERS; st->dmap=20+random()%20; st->dvar = (st->dmap>22) ? 100 : 10+(st->csw[0]*(random()%5)); st->ddir= (random()%2) ? 1 : -1; st->emap = (st->dmap+10+(random()%10))%20; st->evar = (st->emap>22) ? 100 : 10+(st->csw[0]*(random()%5)); st->edir= (random()%2) ? 1 : -1; st->layers= (random()%2) ? 2 : (random()%2) ? 1 : (random()%2) ? 3 : 4; st->cmap=(st->cmap+5+(random()%10))%COLORMAPS; for (x=0; xpattern[x]=random()%PATTERNS; st->shape[x]=random()%SHAPES; st->mix[x]=random()%20; nstr = (st->lwid==2) ? 20+random()%12 : (st->lwid==3) ? 16+random()%8 : (st->lwid==4) ? 12+random()%6 : (st->lwid==5) ? 10+random()%5 : (st->lwid==6) ? 8+random()%4 : 5+random()%5; st->csw[x] = _max(5,st->gridy/nstr); st->wsx[x] = (st->wsx[x]+3+(random()%3))%STRETCHES; st->wsy[x] = (st->wsy[x]+3+(random()%3))%STRETCHES; st->sec[x] = random()%5; if ((!st->dialog) && (st->sec[x]<2)) st->csw[x]/=2; st->cs1[x] = (st->dialog) ? 1+random()%3 : 2+random()%5; st->cs2[x] = (st->dialog) ? 1+random()%3 : 2+random()%5; st->cs3[x] = (st->dialog) ? 1+random()%3 : 2+random()%5; st->cs4[x] = (st->dialog) ? 1+random()%3 : 2+random()%5; st->wave[x]=random()%WAVES; st->wavel[x]=st->csw[x]*(2+random()%6); st->waveh[x]=st->csw[x]*(1+random()%3); st->rx1[x]=(st->gridx/10+random()%(st->gridx*8/10)); st->ry1[x]=(st->gridy/10+random()%(st->gridy*8/10)); st->rx2[x]=(st->gridx*2/10+random()%(st->gridx*6/10)); st->ry2[x]=(st->gridy*2/10+random()%(st->gridy*6/10)); st->rx3[x]=(st->gridx*3/10+random()%(st->gridx*4/10)); st->ry3[x]=(st->gridy*3/10+random()%(st->gridy*4/10)); } } static int _shape(struct state *st, int x, int y, int rx, int ry, int n) { switch(st->shape[n]) { case 0: /* square/rectangle */ case 1: case 2: return(1+_max(abs(x-rx)*st->cs1[n]/st->cs2[n],abs(y-ry)*st->cs3[n]/st->cs4[n])); case 3: /* diamond */ case 4: return(1+(abs(x-rx)*st->cs1[n]/st->cs2[n]+abs(y-ry)*st->cs3[n]/st->cs4[n])); case 5: /* 8 point star */ return(1+_min(_max(abs(x-rx),abs(y-ry))*3/2,abs(x-rx)+abs(y-ry))); case 6: /* circle/oval */ case 7: case 8: return(1+_dist(st,x,rx,y,ry,st->cs1[n])); case 9: /* black hole circle */ return(1+(st->gridx*st->gridy/(1+(_dist(st,x,rx,y,ry,st->cs2[n]))))); case 10: /* sun */ return(1+_min(abs(x-rx)*st->gridx/(abs(y-ry)+1),abs(y-ry)*st->gridx/(abs(x-rx)+1))); case 11: /* 2 circles+inverted circle */ return(1+(_dist(st,x,rx,y,ry,st->cs1[n])*_dist(st,x,(rx*3)%st->gridx,y,(ry*5)%st->gridy,st->cs1[n])/(1+_dist(st,x,(rx*4)%st->gridx,y,(ry*7)%st->gridy,st->cs1[n])))); case 12: /* star */ return(1+(int)sqrt(abs((x-rx)*(y-ry)))); case 13: /* centered ellipse */ return(1+_dist(st,x,rx,y,ry,0)+_dist(st,x,st->gridx-rx,y,st->gridy-ry,0)); default: /* triangle */ return(1+_triangle(st,x,y,rx,ry,st->cs4[n])); } return(1+_triangle(st,x,y,rx,ry,st->cs4[n])); } static int _pattern(struct state *st, int x, int y, int n) { int v=0, ox; ox=x; switch(st->wsx[n]) { case 0: /* slants */ x+=y/(1+st->cs4[n]); break; case 1: x+=(st->gridy-y)/(1+st->cs4[n]); break; case 2: /* curves */ x+=_wave(st,y,st->gridx/(1+st->cs1[n]),st->gridy,0); break; case 3: 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/M_PI,0); break; case 5: x-=_wave(st,y,st->cs1[n]*st->csw[n]/2,st->gridy*2/M_PI,0); break; } switch(st->wsy[0]) { case 0: /* slants */ y+=ox/(1+st->cs1[n]); break; case 1: y+=(st->gridx-ox)/(1+st->cs1[n]); break; case 2: /* curves */ y+=_wave(st,ox,st->gridx/(1+st->cs1[n]),st->gridx,0); break; case 3: 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/M_PI,0); break; case 5: y-=_wave(st,ox,st->cs1[n]*st->csw[n]/2,st->gridy*2/M_PI,0); break; } switch(st->pattern[n]) { case 0: /* horizontal stripes */ v=y; break; case 1: /* vertical stripes */ v=x; break; case 2: /* diagonal stripes */ v=(x+(y*st->cs1[n]/st->cs2[n])); break; case 3: /* reverse diagonal stripes */ v=(x-(y*st->cs1[n]/st->cs2[n])); break; case 4: /* checkerboard */ v=(y/st->csw[n]*3+x/st->csw[n])*st->csw[n]; break; case 5: /* diagonal checkerboard */ v=((x+y)/2/st->csw[n]+(x+st->gridy-y)/2/st->csw[n]*3)*st->csw[n]; break; case 6: /* + cross */ v=st->gridx+(_min(abs(x-st->rx3[n]),abs(y-st->ry3[n]))*2); break; case 7: /* double + cross */ v=_min(_min(abs(x-st->rx2[n]),abs(y-st->ry2[n])),_min(abs(x-st->rx1[n]),abs(y-st->ry1[n])))*2; break; case 8: /* X cross */ v=st->gridx+(_min(abs(x-st->rx3[n])*st->cs1[n]/st->cs2[n]+abs(y-st->ry2[n])*st->cs3[n]/st->cs4[n],abs(x-st->rx3[n])*st->cs1[n]/st->cs2[n]-abs(y-st->ry3[n])*st->cs3[n]/st->cs4[n])*2); break; case 9: /* double X cross */ v=_min(_min(abs(x-st->rx2[n])+abs(y-st->ry2[n]),abs(x-st->rx2[n])-abs(y-st->ry2[n])),_min(abs(x-st->rx1[n])+abs(y-st->ry1[n]),abs(x-st->rx1[n])-abs(y-st->ry1[n])))*2; break; case 10: /* horizontal stripes/waves */ v=st->gridy+(y+_wave(st,x,st->waveh[n],st->wavel[n],st->wave[n])); break; case 11: /* vertical stripes/waves */ v=st->gridx+(x+_wave(st,y,st->waveh[n],st->wavel[n],st->wave[n])); break; case 12: /* diagonal stripes/waves */ v=st->gridx+(x+(y*st->cs1[n]/st->cs2[n])+_wave(st,x,st->waveh[n],st->wavel[n],st->wave[n])); break; case 13: /* diagonal stripes/waves */ v=st->gridx+(x-(y*st->cs1[n]/st->cs2[n])+_wave(st,y,st->waveh[n],st->wavel[n],st->wave[n])); break; case 14: /* horizontal spikey waves */ v=y+(st->csw[n]*st->cs4[n]/st->cs3[n])+_wave(st,x+((y/st->cs3[n])*st->edir),st->csw[n]/2*st->cs1[n]/st->cs2[n],st->csw[n]/2*st->cs2[n]/st->cs1[n],st->wave[n]); break; case 15: /* vertical spikey waves */ v=x+(st->csw[n]*st->cs1[n]/st->cs2[n])+_wave(st,y+((x/st->cs3[n])*st->edir),st->csw[n]/2*st->cs1[n]/st->cs2[n],st->csw[n]/2*st->cs3[n]/st->cs4[n],st->wave[n]); break; case 16: /* big slanted hwaves */ v=st->gridy-y-(x*st->cs1[n]/st->cs3[n])+(st->csw[n]*st->cs1[n]*st->cs2[n]) +_wave(st,x,st->csw[n]/3*st->cs1[n]*st->cs2[n],st->csw[n]/3*st->cs3[n]*st->cs2[n],st->wave[n]); break; case 17: /* big slanted vwaves */ v=x-(y*st->cs1[n]/st->cs3[n])+(st->csw[n]*st->cs1[n]*st->cs2[n]) +_wave(st,y, st->csw[n]/3*st->cs1[n]*st->cs2[n], st->csw[n]/3*st->cs3[n]*st->cs2[n], st->wave[n]); break; case 18: /* double hwave */ v=y+(y+st->csw[n]*st->cs3[n])+_wave(st,x,st->csw[n]/3*st->cs3[n],st->csw[n]/3*st->cs2[n],st->wave[n])+_wave(st,x,st->csw[n]/3*st->cs4[n],st->csw[n]/3*st->cs1[n]*3/2,st->wave[n]); break; case 19: /* double vwave */ v=x+(x+st->csw[n]*st->cs1[n])+_wave(st,y,st->csw[n]/3*st->cs1[n],st->csw[n]/3*st->cs3[n],st->wave[n])+_wave(st,y,st->csw[n]/3*st->cs2[n],st->csw[n]/3*st->cs4[n]*3/2,st->wave[n]); break; case 20: /* one shape */ case 21: case 22: v=_shape(st,x, y, st->rx3[n], st->ry3[n], n); break; case 23: /* two shapes */ case 24: case 25: v=_min(_shape(st,x, y, st->rx1[n], st->ry1[n], n),_shape(st,x, y, st->rx2[n], st->ry2[n], n)); break; case 26: /* two shapes opposites */ case 27: v=_min(_shape(st,x, y, st->rx2[n], st->ry2[n], n),_shape(st,x, y, st->gridx-st->rx2[n], st->gridy-st->rx2[n], n)); break; case 28: /* two shape checkerboard */ case 29: v=((_shape(st,x, y, st->rx1[n], st->ry1[n], n)/st->csw[n])+(_shape(st,x, y, st->rx2[n], st->ry2[n], n)/st->csw[n]))*st->csw[n]; break; case 30: /* two shape blob */ case 31: v=(_shape(st,x, y, st->rx1[n], st->ry1[n], n)+_shape(st,x, y, st->rx2[n], st->ry2[n], n))/2; break; case 32: /* inverted two shape blob */ case 33: v=(_shape(st,x, y, st->rx1[n], st->ry1[n], n)+_shape(st,st->gridx-x, st->gridy-y, st->rx1[n], st->ry1[n], n))/2; break; case 34: /* three shapes */ case 35: v=_min(_shape(st,x, y, st->rx3[n], st->ry3[n], n),_min(_shape(st,x, y, st->rx1[n], st->ry1[n], n),_shape(st,x, y, st->rx2[n], st->ry2[n], n))); break; case 36: /* three shape blob */ case 37: v=(_shape(st,x, y, st->rx1[n], st->ry1[n], n)+_shape(st,x, y, st->rx2[n], st->ry2[n], n)+_shape(st,x, y, st->rx3[n], st->ry3[n], n))/3; break; case 38: /* 4 shapes */ v=(_min(_shape(st,x, y, st->rx2[n], st->ry2[n], n),_shape(st,x, y, st->gridx-st->rx2[n], st->gridy-st->ry2[n], n)),_min(_shape(st,x, y, st->gridx-st->rx2[n], st->ry2[n], n),_shape(st,x, y, st->rx2[n], st->gridy-st->ry2[n], n))); break; case 39: /* four rainbows */ v=(_min(_shape(st,x, y, st->gridx-st->rx2[n]/2, st->csw[n], n),_shape(st,x, y, st->csw[n], st->ry2[n]/2, n)),_min(_shape(st,x, y, st->rx2[n]/2, st->gridy-st->csw[n], n),_shape(st,x, y, st->gridx-st->csw[n], st->gridy-(st->ry2[n]/2), n))); break; } /* stretch or contract stripe */ switch(st->sec[n]) { case 0: v=(int)sqrt((int)sqrt(abs(v)*st->gridx)*st->gridx); break; case 1: v=((int)pow(v,2)/st->gridx); break; } return (abs(v)); } static int _getcolor(struct state *st, int x, int y) { int n, cv[LAYERS]; cv[0] = 0; for (n=0; nlayers; n++) { cv[n]=_pattern(st,x,y,n); /* first wave/shape */ cv[0] = (!n) ? cv[0]/st->csw[0] : /* checkerboard+1 */ (st->mix[n]<5) ? (cv[0]*st->csw[0]+cv[n])/st->csw[n] : /* checkerboard+ncol/2 */ (st->mix[n]<12) ? cv[0]+(cv[n]/st->csw[n]*st->ncolors/2) : /* add mix */ (st->mix[n]<16) ? cv[0]+(cv[n]/st->csw[n]) : /* subtract mix */ (st->mix[n]<18) ? cv[0]-(cv[n]/st->csw[n]) : /* r to l morph mix */ (st->mix[n]==18) ? ((cv[0]*x)+(cv[n]*(st->gridx-x)/st->csw[n]))/st->gridx : /* u to d morph mix */ ((cv[0]*y)+(cv[n]*(st->gridy-y)/st->csw[n]))/st->gridy; } return(cv[0]); } /* return value=line direction st->olen=open space to edge or next blocking line st->bln=blocking line number or -1 if edge blocks */ static int _findopen(struct state *st, int x, int y, int z) { int dir, od[4], no=0; if (((st->grid[z].hl) || (st->grid[z].hr)) && ((st->grid[z].vu) || (st->grid[z].vd))) return(DIR_NONE); if ((z>st->gridx) && (!st->grid[z].hl) && (!st->grid[z].hr) && (!st->grid[z-st->gridx].line)) { od[no]=DIR_UP; no++; } if ((zgridn-st->gridx) && (!st->grid[z].hl) && (!st->grid[z].hr) && (!st->grid[z+st->gridx].line)) { od[no]=DIR_DOWN; no++; } if ((x) && (!st->grid[z].hl) && (!st->grid[z].hr) && (!st->grid[z-1].line)) { od[no]=DIR_LEFT; no++; } if (((z+1)%st->gridx) && (!st->grid[z].hl) && (!st->grid[z].hr) && (!st->grid[z+1].line)) { od[no]=DIR_RIGHT; no++; } if (!no) return(DIR_NONE); dir=od[random()%no]; st->olen=st->bln=0; while ((st->olen<=st->maxlen) && (!st->bln)) { st->olen++; if (dir==DIR_UP) st->bln = (y-st->olen<0) ? -1 : st->grid[z-(st->olen*st->gridx)].line; if (dir==DIR_DOWN) st->bln = (y+st->olen>=st->gridy) ? -1 : st->grid[z+(st->olen*st->gridx)].line; if (dir==DIR_LEFT) st->bln = (x-st->olen<0) ? -1 : st->grid[z-st->olen].line; if (dir==DIR_RIGHT) st->bln = (x+st->olen>=st->gridx) ? -1 : st->grid[z+st->olen].line; } st->olen--; return(dir); } static void _fillgrid(struct state *st) { unsigned int gridc, n, add; gridc=st->gridx*st->dline[st->li].y+st->dline[st->li].x; add = (st->dline[st->li].hv) ? 1 : st->gridx; for (n=0; n<=st->dline[st->li].len; n++) { if (n) gridc+=add; if (!st->grid[gridc].line) { st->fi++; st->grid[gridc].line=st->li; } if (st->dline[st->li].hv) { if (n) st->grid[gridc].hr=st->li; if (ndline[st->li].len) st->grid[gridc].hl=st->li; } else { if (n) st->grid[gridc].vd=st->li; if (ndline[st->li].len) st->grid[gridc].vu=st->li; } if (st->fi>=st->gridn) { st->grid_full=True; return; } } } static void _newline(struct state *st) { int bl, bz, dir, lt, x, y, z; bl=0; z=st->zlist[st->zi]; x=z%st->gridx; y=z/st->gridx; st->zi++; dir=_findopen(st,x,y,z); if (!st->grid[z].line) { /* this is an empty space, make a new line unless nothing is open around it */ if (dir==DIR_NONE) { /* nothing is open, force a len 1 branch in any direction */ lt=LINE_FORCE; while ((dir==DIR_NONE) || ((dir==DIR_UP) && (!y)) || ((dir==DIR_DOWN) && (y+1==st->gridy)) || ((dir==DIR_LEFT) && (!x)) || ((dir==DIR_RIGHT) && (x+1==st->gridx))) { dir=random()%4; } bz = (dir==DIR_UP) ? z-st->gridx : (dir==DIR_DOWN) ? z+st->gridx : (dir==DIR_LEFT) ? z-1 : z+1; bl = st->grid[bz].line; } else if ((st->bnratio>1) && (st->bln>0) && (st->olenmaxlen) && (random()%st->bnratio)) { /* branch into blocking line */ lt=LINE_BRIN; bl = st->bln; } else { /* make a new line and new object */ lt=LINE_NEW; st->oi++; } } else { /* this is a filled space, make a branch unless nothing is open around it */ if (dir==DIR_NONE) return; /* make a branch out of this line */ lt=LINE_BROUT; bl=st->grid[z].line; } st->li++; st->dline[st->li].len = (lt==LINE_FORCE) ? 1 : (lt==LINE_BRIN) ? st->olen+1 : (!st->forcemax) ? st->olen : 1+random()%st->olen; st->dline[st->li].x=x; if (dir==DIR_LEFT) st->dline[st->li].x-=st->dline[st->li].len; st->dline[st->li].y=y; if (dir==DIR_UP) st->dline[st->li].y-=st->dline[st->li].len; st->dline[st->li].hv = ((dir==DIR_LEFT) || (dir==DIR_RIGHT)) ? True : False; st->dline[st->li].obj = (lt==LINE_NEW) ? st->oi : st->dline[bl].obj; if (lt==LINE_NEW) { int color = (_getcolor(st,x,y))%st->ncolors; if (color < 0) color += st->ncolors; st->dline[st->li].color = color; } else { st->dline[st->li].color = st->dline[bl].color; } st->dline[st->li].deo=(_getdeo(st,x,y,st->dmap,1) + (random()%st->dvar) + (random()%st->dvar))*st->ddir; st->dline[st->li].ndol=0; _fillgrid(st); } static void _create_screen(struct state *st) { while(!st->grid_full) _newline(st); qsort(st->dline, st->li+1, sizeof(struct lineStruct), _comparedeo); /*st->lpu=st->li/20/((6-st->speed)*3); Used to use a computed lpu, lines per update to control draw speed draw 1/lpu of the lines before each XSync which takes a split second the higher the lpu, the quicker the screen draws. This worked somewhat after the 4->5 update, however with the Mac updating so much more slowly, values tuned for it draw the screen in a blink on Linux. Therefore we draw 1/200th of the screen with each update and sleep, if necessary */ st->lpu = (st->dialog) ? st->li/50 : st->li/200; if (!st->lpu) st->lpu = 1; st->bi=1; st->mode=MODE_ERASE; } static void _fill_outline(struct state *st, int di) { int x, y, h, w; if (!di) return; x=st->dline[di].x*st->lwid+1; y=st->dline[di].y*st->lwid+1; if (st->dline[di].hv) { w=(st->dline[di].len+1)*st->lwid-3; h=st->lwid-3; } else { w=st->lwid-3; h=(st->dline[di].len+1)*st->lwid-3; } XFillRectangle (st->display, st->window, st->bgc, x, y, w, h); } static void _XFillRectangle(struct state *st, int di, int adj) { int a, b, x, y, w, h; x=st->dline[di].x*st->lwid; y=st->dline[di].y*st->lwid; if (st->dline[di].hv) { w=(st->dline[di].len+1)*st->lwid-1; h=st->lwid-1; } else { w=st->lwid-1; h=(st->dline[di].len+1)*st->lwid-1; } switch (st->d3d) { case D3D_NEON: x+=adj; y+=adj; w-=adj*2; h-=adj*2; break; case D3D_BLOCK: x+=adj; y+=adj; w-=st->lwid/2-1; h-=st->lwid/2-1; break; } if (!st->round) { XFillRectangle(st->display, st->window, st->fgc, x, y, w, h); } else { if (hlwid) { /* horizontal */ a=(h-1)/2; for (b=0; b<=a; b++) XFillRectangle(st->display, st->window, st->fgc, x+b, y+a-b, w-b*2, h-((a-b)*2)); } else { /* vertical */ a=(w-1)/2; for (b=0; b<=a; b++) XFillRectangle(st->display, st->window, st->fgc, x+a-b, y+b, w-((a-b)*2), h-b*2); } } } static void _XFillTriangle(struct state *st, int color, int x1, int y1, int x2, int y2, int x3, int y3) { XPoint points[3]; points[0].x=x1; points[0].y=y1; points[1].x=x2; points[1].y=y2; points[2].x=x3; points[2].y=y3; XSetForeground(st->display, st->fgc, st->colors[color].pixel); XFillPolygon (st->display, st->window, st->fgc, points, 3, Convex, CoordModeOrigin); } static void _XFillPolygon4(struct state *st, int color, int x1, int y1, int x2, int y2, int x3, int y3, int x4, int y4) { XPoint points[4]; points[0].x=x1; points[0].y=y1; points[1].x=x2; points[1].y=y2; points[2].x=x3; points[2].y=y3; points[3].x=x4; points[3].y=y4; XSetForeground(st->display, st->fgc, st->colors[color].pixel); XFillPolygon (st->display, st->window, st->fgc, points, 4, Convex, CoordModeOrigin); } static void _draw_tiled(struct state *st, int color) { int a, c, d, x, y, z, m1, m2, lr, nl, w, h; a = (st->dline[st->di].hv) ? 1 : st->gridx; z = st->dline[st->di].y*st->gridx+st->dline[st->di].x; m1 = (st->lwid-1)/2; m2 = st->lwid/2; lr = st->lwid-1; nl = st->lwid; /* draw tiles one grid cell at a time */ for (c=0; c<=st->dline[st->di].len; c++) { if (st->dline[st->di].hv) { x = (st->dline[st->di].x+c)*st->lwid; y = st->dline[st->di].y*st->lwid; if (c) st->grid[z].dhr=st->di; if (cdline[st->di].len) st->grid[z].dhl=st->di; } else { x = st->dline[st->di].x*st->lwid; y = (st->dline[st->di].y+c)*st->lwid; if (c) st->grid[z].dvd=st->di; if (cdline[st->di].len) st->grid[z].dvu=st->di; } d=0; if (st->grid[z].dhl) d+=8; if (st->grid[z].dhr) d+=4; if (st->grid[z].dvu) d+=2; if (st->grid[z].dvd) d++; /* draw line base */ switch (d) { case 1: case 2: /* vertical */ case 3: case 5: case 6: case 7: case 11: case 15: h = ((d==1) || (d==5)) ? lr : nl; XSetForeground(st->display, st->fgc, st->colors[color].pixel); XFillRectangle (st->display, st->window, st->fgc, x, y, m2, h); XSetForeground(st->display, st->fgc, st->colors[color+3].pixel); XFillRectangle (st->display, st->window, st->fgc, x+m2, y, m1, h); break; case 4: case 8: /* horizontal */ case 9: case 10: case 12: case 13: case 14: w = (d==4) ? lr : nl; XSetForeground(st->display, st->fgc, st->colors[color+1].pixel); XFillRectangle (st->display, st->window, st->fgc, x, y, w, m2); XSetForeground(st->display, st->fgc, st->colors[color+2].pixel); XFillRectangle (st->display, st->window, st->fgc, x, y+m2, w, m1); break; } /* draw angles */ switch(d) { case 1: /* bottom end ^ */ _XFillTriangle(st,color+2, x, y+lr, x+lr, y+lr, x+m2, y+m2); break; case 2: /* top end \/ */ _XFillTriangle(st,color+1, x, y, x+lr, y, x+m2, y+m2); break; case 4: /* right end < */ _XFillTriangle(st,color+3, x+lr, y, x+lr, y+lr, x+m2, y+m2); break; case 5: /* LR corner */ _XFillTriangle(st,color+1, x, y+m2, x+m2, y+m2, x, y); _XFillPolygon4(st,color+2, x, y+m2, x+m2, y+m2, x+lr, y+lr, x, y+lr); break; case 6: /* UR corner */ _XFillPolygon4(st,color+1, x, y+m2, x+m2, y+m2, x+lr, y, x, y); _XFillTriangle(st,color+2, x, y+m2, x+m2, y+m2, x, y+lr); break; case 7: /* T > into line */ _XFillTriangle(st,color+1, x, y+m2, x+m2, y+m2, x, y); _XFillTriangle(st,color+2, x, y+m2, x+m2, y+m2, x, y+lr); break; case 8: /* left end > */ _XFillTriangle(st,color, x, y, x, y+lr, x+m2, y+m2); break; case 9: /* LL corner */ _XFillPolygon4(st,color, x+m2, y, x+m2, y+m2, x, y+lr, x, y); _XFillTriangle(st,color+3, x+m2, y, x+m2, y+m2, x+lr, y); break; case 10: /* UL corner */ _XFillPolygon4(st,color, x+m2, y+nl, x+m2, y+m2, x, y, x, y+nl); _XFillPolygon4(st,color+3, x+m2, y+nl, x+m2, y+m2, x+lr, y+lr, x+lr, y+nl); break; case 11: /* T < into line */ _XFillPolygon4(st,color+1, x+nl, y+m2, x+m2, y+m2, x+lr, y, x+nl, y); _XFillPolygon4(st,color+2, x+nl, y+m2, x+m2, y+m2, x+lr, y+lr, x+nl, y+lr); break; case 13: /* T \/ into line */ _XFillTriangle(st,color, x+m2, y, x+m2, y+m2, x, y); _XFillTriangle(st,color+3, x+m2, y, x+m2, y+m2, x+lr, y); break; case 14: /* T ^ into line */ _XFillPolygon4(st,color, x+m2, y+nl, x+m2, y+m2, x, y+lr, x, y+nl); _XFillPolygon4(st,color+3, x+m2, y+nl, x+m2, y+m2, x+lr, y+lr, x+lr, y+nl); break; case 15: /* X intersection */ _XFillTriangle(st,color+1, x, y+m2, x+m2, y+m2, x, y); _XFillTriangle(st,color+2, x, y+m2, x+m2, y+m2, x, y+lr); _XFillPolygon4(st,color+1, x+nl, y+m2, x+m2, y+m2, x+lr, y, x+nl, y); _XFillPolygon4(st,color+2, x+nl, y+m2, x+m2, y+m2, x+lr, y+lr, x+nl, y+lr); break; } z+=a; } } static long _mselapsed(struct state *st) { struct timeval t; gettimeofday(&t, NULL); t.tv_sec -= st->time.tv_sec; t.tv_usec -= st->time.tv_usec; return ((long)t.tv_sec*1000000+t.tv_usec); } static void _draw_lines(struct state *st) { int n, z, a, color, sh, di; if (st->bi==1) for (a=0; a<=st->oi; a++) st->fdol[a]=0; for (st->di=st->bi; st->di<_min(st->li+1,st->bi+st->lpu); st->di++) { color=(st->dline[st->di].color%st->ncolors)*st->shades; XSetForeground(st->display, st->fgc, st->colors[color].pixel); switch (st->d3d) { case D3D_NEON: st->dline[st->di].ndol=st->fdol[st->dline[st->di].obj]; st->fdol[st->dline[st->di].obj]=st->di; for (sh=0; shlwid/2; sh++) { XSetForeground(st->display, st->fgc, st->colors[color+sh].pixel); di=st->di; while(di>0) { _XFillRectangle(st,di,sh); di=st->dline[di].ndol; } } break; case D3D_BLOCK: st->dline[st->di].ndol=st->fdol[st->dline[st->di].obj]; st->fdol[st->dline[st->di].obj]=st->di; for (sh=0; shlwid/2; sh++) { XSetForeground(st->display, st->fgc, st->colors[color+(st->lwid/2)-sh-1].pixel); di=st->di; while(di>0) { _XFillRectangle(st,di,sh); di=st->dline[di].ndol; } } break; case D3D_TILED: _draw_tiled(st,color); break; default: /* D3D_NONE */ _XFillRectangle(st,st->di,0); if (st->outline) { _fill_outline(st, st->di); z=st->dline[st->di].y*st->gridx+st->dline[st->di].x; a = (st->dline[st->di].hv) ? 1 : st->gridx; for (n=0; n<=st->dline[st->di].len; n++) { _fill_outline(st, st->grid[z].dhl); _fill_outline(st, st->grid[z].dhr); _fill_outline(st, st->grid[z].dvu); _fill_outline(st, st->grid[z].dvd); if (st->dline[st->di].hv) { if (n) st->grid[z].dhr=st->di; if (ndline[st->di].len) st->grid[z].dhl=st->di; } else { if (n) st->grid[z].dvd=st->di; if (ndline[st->di].len) st->grid[z].dvu=st->di; } z+=a; } } break; } } if (st->di>st->li) { st->bi=1; st->mode=MODE_CREATE; } else { st->bi+=st->lpu; } } static void _erase_lines(struct state *st) { if (!st->ii) return; for (st->di=st->bi; st->di<_min(st->eli+1,st->bi+st->elpu); st->di++) { if (st->eline[st->di].hv) { XFillRectangle (st->display, st->window, st->bgc, st->eline[st->di].x*st->elwid, st->eline[st->di].y*st->elwid, (st->eline[st->di].len+1)*st->elwid, st->elwid); } else { XFillRectangle (st->display, st->window, st->bgc, st->eline[st->di].x*st->elwid, st->eline[st->di].y*st->elwid, st->elwid, (st->eline[st->di].len+1)*st->elwid); } if (st->di==st->eli) /* clear just in case */ XFillRectangle(st->display, st->window, st->bgc, 0, 0, st->xgwa.width, st->xgwa.height); } if (st->di>st->eli) { st->bi=1; if (st->resized) { st->mode=MODE_CREATE; } else { st->mode=MODE_DRAW; } } else { st->bi+=st->elpu; } } static void * abstractile_init(Display *display, Window window) { struct state *st = (struct state *) calloc (1, sizeof(*st)); XGCValues gcv; /* struct utsname os;*/ char *tile = get_string_resource(display, "tile", "Tile"); if (tile && !strcmp(tile, "random")) st->tile = TILE_RANDOM; else if (tile && !strcmp(tile, "flat")) st->tile = TILE_FLAT; else if (tile && !strcmp(tile, "thin")) st->tile = TILE_THIN; else if (tile && !strcmp(tile, "outline")) st->tile = TILE_OUTLINE; else if (tile && !strcmp(tile, "block")) st->tile = TILE_BLOCK; else if (tile && !strcmp(tile, "neon")) st->tile = TILE_NEON; else if (tile && !strcmp(tile, "tiled")) st->tile = TILE_TILED; else { if (tile && *tile && !!strcmp(tile, "random")) fprintf(stderr, "%s: unknown tile option %s\n", progname, tile); st->tile = TILE_RANDOM; } st->speed = get_integer_resource(display, "speed", "Integer"); if (st->speed < 0) st->speed = 0; if (st->speed > 5) st->speed = 5; st->sleep = get_integer_resource(display, "sleep", "Integer"); if (st->sleep < 0) st->sleep = 0; if (st->sleep > 60) st->sleep = 60; st->display=display; st->window=window; /* get screen size and create Graphics Contexts */ XGetWindowAttributes (display, window, &st->xgwa); gcv.foreground = get_pixel_resource(display, st->xgwa.colormap, "foreground", "Foreground"); st->fgc = XCreateGC (display, window, GCForeground, &gcv); gcv.foreground = get_pixel_resource(display, st->xgwa.colormap, "background", "Background"); st->bgc = XCreateGC (display, window, GCForeground, &gcv); /* Um, no. This is obscene. -jwz. uname(&os); st->newcols=((!strcmp(os.sysname,"Linux")) || (!strcmp(os.sysname,"Darwin"))) ? True : False; */ st->newcols=False; st->mode=MODE_CREATE; st->ii=0; st->resized=True; return st; } static unsigned long abstractile_draw (Display *dpy, Window window, void *closure) { struct state *st = (struct state *) closure; int mse, usleep; gettimeofday(&st->time, NULL); /* If the window is too small, do nothing, sorry! */ if (st->xgwa.width > 20 && st->xgwa.height > 20) { switch (st->mode) { case MODE_CREATE: _init_screen(st); _create_screen(st); break; case MODE_ERASE: _erase_lines(st); break; case MODE_DRAW: _draw_lines(st); break; } } mse=_mselapsed(st); usleep = ((!st->ii) && (st->mode==MODE_CREATE)) ? 0 : (st->mode==MODE_CREATE) ? st->sleep*1000000-mse : /* speed=0-5, goal is 10,8,6,4,2,0 sec normal and 5,4,3,2,1,0 dialog */ (5-st->speed)*(2-st->dialog)*100000/st->lpu-mse; if (usleep>=0) return usleep; return 0; } static void abstractile_reshape (Display *dpy, Window window, void *closure, unsigned int w, unsigned int h) { struct state *st = (struct state *) closure; st->xgwa.width = w; st->xgwa.height = h; if (w*h>st->max_wxh) st->resized=True; } static Bool abstractile_event (Display *dpy, Window window, void *closure, XEvent *event) { struct state *st = (struct state *) closure; if (screenhack_event_helper (dpy, window, event)) { st->mode=MODE_CREATE; return True; } return False; } static void abstractile_free (Display *dpy, Window window, void *closure) { struct state *st = (struct state *) closure; free (st); } static const char *abstractile_defaults [] = { ".background: black", ".foreground: white", "*fpsSolid: true", "*sleep: 3", "*speed: 3", "*tile: random", #ifdef HAVE_MOBILE "*ignoreRotation: True", #endif 0 }; static XrmOptionDescRec abstractile_options [] = { { "-sleep", ".sleep", XrmoptionSepArg, 0 }, { "-speed", ".speed", XrmoptionSepArg, 0 }, { "-tile", ".tile", XrmoptionSepArg, 0 }, { 0, 0, 0, 0 } }; XSCREENSAVER_MODULE ("Abstractile", abstractile) xscreensaver-5.36/hacks/lcdscrub.c000644 000767 000024 00000024474 12717750042 017214 0ustar00jwzstaff000000 000000 /* xscreensaver, Copyright (c) 2008-2015 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. * * Draws repetitive patterns that should undo burned in LCD screens. * Concept shamelessly cloned from * http://toastycode.com/blog/2008/02/05/lcd-scrub/ */ #include "screenhack.h" #undef countof #define countof(x) (sizeof((x))/sizeof((*x))) struct state { Display *dpy; Window window; XWindowAttributes xgwa; enum { HORIZ_W, HORIZ_B, VERT_W, VERT_B, DIAG_W, DIAG_B, WHITE, BLACK, RGB, RANDOM, END } mode; unsigned int enabled_mask; int count; GC fg, bg, bg2; int color_tick; int delay; int spread; int cycles; XImage *collisions; long ncollisions; }; static void pick_mode (struct state *st) { st->count = 0; while (1) { if (++st->mode == END) st->mode = 0; if (st->enabled_mask & (1 << st->mode)) break; } } static void * lcdscrub_init (Display *dpy, Window window) { struct state *st = (struct state *) calloc (1, sizeof(*st)); XGCValues gcv; unsigned long fgp, bgp; st->dpy = dpy; st->window = window; st->delay = get_integer_resource (st->dpy, "delay", "Integer"); st->spread = get_integer_resource (st->dpy, "spread", "Integer"); st->cycles = get_integer_resource (st->dpy, "cycles", "Integer"); XGetWindowAttributes (st->dpy, st->window, &st->xgwa); fgp = get_pixel_resource (st->dpy, st->xgwa.colormap, "foreground", "Foreground"); bgp = get_pixel_resource (st->dpy, st->xgwa.colormap, "background", "Background"); gcv.foreground = bgp; gcv.background = fgp; st->bg = XCreateGC (st->dpy, st->window, GCForeground, &gcv); st->bg2 = XCreateGC (st->dpy, st->window, GCForeground, &gcv); gcv.foreground = fgp; gcv.background = bgp; st->fg = XCreateGC (st->dpy, st->window, GCForeground, &gcv); #ifdef HAVE_JWXYZ jwxyz_XSetAntiAliasing (st->dpy, st->fg, False); jwxyz_XSetAntiAliasing (st->dpy, st->bg, False); jwxyz_XSetAntiAliasing (st->dpy, st->bg2, False); #endif st->enabled_mask = 0; # define PREF(R,F) \ if (get_boolean_resource (st->dpy, R, "Mode")) st->enabled_mask |= (1 << F) PREF("modeHW", HORIZ_W); PREF("modeHB", HORIZ_B); PREF("modeVW", VERT_W); PREF("modeVB", VERT_B); PREF("modeDW", DIAG_W); PREF("modeDB", DIAG_B); PREF("modeW", WHITE); PREF("modeB", BLACK); PREF("modeRGB", RGB); PREF("modeRandom", RANDOM); # undef PREF if (! st->enabled_mask) { fprintf (stderr, "%s: no modes enabled\n", progname); exit (1); } pick_mode (st); return st; } /* A test harness for visualizing different random number generators. This doesn't really belong in lcdscrub, but it was a convenient place to put it. */ #if 0 /* mwc1616 */ static unsigned long mwc1616_x = 1; static unsigned long mwc1616_y = 2; static void mwc1616_srand (unsigned long seed) { mwc1616_x = seed | 1; mwc1616_y = seed | 2; } static unsigned long mwc1616 (void) { mwc1616_x = 18000 * (mwc1616_x & 0xFFFF) + (mwc1616_x >> 16); mwc1616_y = 30903 * (mwc1616_y & 0xFFFF) + (mwc1616_y >> 16); return (mwc1616_x << 16) + (mwc1616_y & 0xFFFF); } # undef random # undef srand # define srand mwc1616_srand # define random() ((unsigned int) (mwc1616() & (unsigned int) (~0))) #elif 0 /* xorshift128plus */ static uint64_t xo_state0 = 1; static uint64_t xo_state1 = 2; static void xorshift128plus_srand (unsigned long seed) { xo_state0 = seed | 1; xo_state1 = seed | 2; } static uint64_t xorshift128plus (void) { register uint64_t s1 = xo_state0; register uint64_t s0 = xo_state1; xo_state0 = s0; s1 ^= s1 << 23; s1 ^= s1 >> 17; s1 ^= s0; s1 ^= s0 >> 26; xo_state1 = s1; return s1; } # undef random # undef srand # define srand xorshift128plus_srand # define random() ((unsigned int) (xorshift128plus() & (unsigned int) (~0))) #else /* ya_random */ # undef srand # define srand(n) #endif /* ya_random */ /* If you see patterns in this image, the PRNG sucks. */ static void lcdscrub_random (struct state *st) { unsigned long steps_per_frame = 3000000; unsigned long segments = 0x8000; /* 2^15 */ if (! st->collisions) { struct timeval tp; # if GETTIMEOFDAY_TWO_ARGS gettimeofday (&tp, 0); # else gettimeofday (&tp); # endif srand ((unsigned int) (tp.tv_sec ^ tp.tv_usec)); st->collisions = XCreateImage (st->dpy, st->xgwa.visual, 1, XYPixmap, 0, NULL, segments, segments, 8, 0); if (! st->collisions) abort(); st->collisions->data = (char *) calloc (segments, st->collisions->bytes_per_line); /* 128 MB */ if (! st->collisions->data) abort(); } while (--steps_per_frame) { unsigned long x = random() & (segments-1); unsigned long y = random() & (segments-1); unsigned long p = XGetPixel (st->collisions, x, y) ? 0 : 1; XPutPixel (st->collisions, x, y, p); st->ncollisions += (p ? 1 : -1); } { int w, h; Pixmap p; GC gc; XGetWindowAttributes (st->dpy, st->window, &st->xgwa); w = st->xgwa.width; h = st->xgwa.height; p = XCreatePixmap (st->dpy, st->window, w, h, 1); gc = XCreateGC (st->dpy, p, 0, 0); XSetBackground (st->dpy, gc, 0); XSetForeground (st->dpy, gc, 1); XPutImage (st->dpy, p, gc, st->collisions, 0, 0, 0, 0, w, h); XFreeGC (st->dpy, gc); gc = st->fg; XClearWindow (st->dpy, st->window); XSetClipMask (st->dpy, gc, p); XFillRectangle (st->dpy, st->window, gc, 0, 0, w, h); XFreePixmap (st->dpy, p); } /* fprintf(stderr, "%.2f\n", st->ncollisions / (float) (segments*segments)); */ } static unsigned long lcdscrub_draw (Display *dpy, Window window, void *closure) { struct state *st = (struct state *) closure; int count = st->count % st->spread; int i; GC fg = (st->mode & 1 ? st->fg : st->bg); GC bg = (st->mode & 1 ? st->bg : st->fg); switch (st->mode) { case HORIZ_W: case HORIZ_B: XFillRectangle (st->dpy, st->window, bg, 0, 0, st->xgwa.width, st->xgwa.height); for (i = count; i < st->xgwa.height; i += st->spread) XDrawLine (st->dpy, st->window, fg, 0, i, st->xgwa.width, i); break; case VERT_W: case VERT_B: XFillRectangle (st->dpy, st->window, bg, 0, 0, st->xgwa.width, st->xgwa.height); for (i = count; i < st->xgwa.width; i += st->spread) XDrawLine (st->dpy, st->window, fg, i, 0, i, st->xgwa.height); break; case DIAG_W: case DIAG_B: XFillRectangle (st->dpy, st->window, bg, 0, 0, st->xgwa.width, st->xgwa.height); for (i = count; i < st->xgwa.width; i += st->spread) XDrawLine (st->dpy, st->window, fg, i, 0, i + st->xgwa.width, st->xgwa.width); for (i = -count; i < st->xgwa.height; i += st->spread) XDrawLine (st->dpy, st->window, fg, 0, i, st->xgwa.height, i + st->xgwa.height); break; case RGB: { int scale = 10 * 8; /* 8 sec */ static const unsigned short colors[][3] = { { 0xFFFF, 0x0000, 0x0000 }, { 0x0000, 0xFFFF, 0x0000 }, { 0x0000, 0x0000, 0xFFFF }, { 0xFFFF, 0xFFFF, 0x0000 }, { 0xFFFF, 0x0000, 0xFFFF }, { 0x0000, 0xFFFF, 0xFFFF }, { 0xFFFF, 0xFFFF, 0xFFFF }, { 0x0000, 0x0000, 0x0000 }, }; static unsigned long last = 0; XColor xc; bg = st->bg2; xc.red = colors[st->color_tick / scale][0]; xc.green = colors[st->color_tick / scale][1]; xc.blue = colors[st->color_tick / scale][2]; if (last) XFreeColors (st->dpy, st->xgwa.colormap, &last, 1, 0); XAllocColor (st->dpy, st->xgwa.colormap, &xc); last = xc.pixel; XSetForeground (st->dpy, bg, xc.pixel); st->color_tick = (st->color_tick + 1) % (countof(colors) * scale); /* fall through */ } case WHITE: case BLACK: XFillRectangle (st->dpy, st->window, bg, 0, 0, st->xgwa.width, st->xgwa.height); break; case RANDOM: lcdscrub_random (st); break; default: abort(); break; } st->count++; if (st->count > st->spread * st->cycles) pick_mode (st); return st->delay; } static void lcdscrub_reshape (Display *dpy, Window window, void *closure, unsigned int w, unsigned int h) { } static Bool lcdscrub_event (Display *dpy, Window window, void *closure, XEvent *event) { return False; } static void lcdscrub_free (Display *dpy, Window window, void *closure) { struct state *st = (struct state *) closure; XFreeGC (dpy, st->fg); XFreeGC (dpy, st->bg); XFreeGC (dpy, st->bg2); if (st->collisions) { free (st->collisions->data); st->collisions->data = 0; XDestroyImage (st->collisions); } free (st); } static const char *lcdscrub_defaults [] = { ".background: black", ".foreground: white", "*fpsSolid: True", "*delay: 100000", "*spread: 8", "*cycles: 60", "*modeHW: True", "*modeHB: True", "*modeVW: True", "*modeVB: True", "*modeDW: True", "*modeDB: True", "*modeW: True", "*modeB: True", "*modeRGB: True", "*modeRandom: False", 0 }; static XrmOptionDescRec lcdscrub_options [] = { { "-delay", ".delay", XrmoptionSepArg, 0 }, { "-spread", ".spread", XrmoptionSepArg, 0 }, { "-cycles", ".cycles", XrmoptionSepArg, 0 }, { "-no-hw", ".modeHW", XrmoptionNoArg, "False" }, { "-no-hb", ".modeHB", XrmoptionNoArg, "False" }, { "-no-vw", ".modeVW", XrmoptionNoArg, "False" }, { "-no-vb", ".modeVB", XrmoptionNoArg, "False" }, { "-no-dw", ".modeDW", XrmoptionNoArg, "False" }, { "-no-db", ".modeDB", XrmoptionNoArg, "False" }, { "-no-w", ".modeW", XrmoptionNoArg, "False" }, { "-no-b", ".modeB", XrmoptionNoArg, "False" }, { "-no-rgb", ".modeRGB", XrmoptionNoArg, "False" }, { "-random", ".modeRandom", XrmoptionNoArg, "True" }, { 0, 0, 0, 0 } }; XSCREENSAVER_MODULE ("LCDscrub", lcdscrub) xscreensaver-5.36/hacks/hexadrop.c000644 000767 000024 00000023213 12710314321 017200 0ustar00jwzstaff000000 000000 /* xscreensaver, Copyright (c) 1999-2014 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. * * Draws a grid of hexagons or other shapes and drops them out. * Created 8-Jul-2013. */ #include #include "screenhack.h" #define countof(x) (sizeof(x)/sizeof(*(x))) #define ABS(x) ((x)<0?-(x):(x)) typedef struct { int sides; int cx, cy; double th0, th, radius, i, speed; int colors[2]; Bool initted_p; } cell; typedef struct { Display *dpy; Window window; XWindowAttributes xgwa; int ncells, cells_size, gw, gh; cell *cells; int delay; double speed; int sides; Bool lockstep_p; Bool uniform_p; Bool initted_p; int ncolors; XColor *colors; GC gc; } state; static void make_cells (state *st) { int grid_size = get_integer_resource (st->dpy, "size", "Size"); cell *cells2; int size, r, gw, gh, x, y, i; double th = 0; if (grid_size < 5) grid_size = 5; size = ((st->xgwa.width > st->xgwa.height ? st->xgwa.width : st->xgwa.height) / grid_size); gw = st->xgwa.width / size; gh = st->xgwa.height / size; switch (st->sides) { case 8: r = size * 0.75; th = M_PI / st->sides; gw *= 1.25; gh *= 1.25; break; case 6: r = size / sqrt(3); th = M_PI / st->sides; gh *= 1.2; break; case 3: size *= 2; r = size / sqrt(3); th = M_PI / st->sides / 2; break; case 4: size /= 2; r = size * sqrt (2); th = M_PI / st->sides; break; default: abort(); break; } gw += 3; /* leave a few extra columns off screen just in case */ gh += 3; st->ncells = gw * gh; if (st->initted_p && !st->cells) abort(); if (!st->initted_p && st->cells) abort(); cells2 = (cell *) calloc (st->ncells, sizeof(*cells2)); if (! cells2) abort(); if (st->cells) { for (y = 0; y < (st->gh < gh ? st->gh : gh); y++) for (x = 0; x < (st->gw < gw ? st->gw : gw); x++) cells2[y * gw + x] = st->cells [y * st->gw + x]; free (st->cells); st->cells = 0; } st->cells = cells2; st->gw = gw; st->gh = gh; i = 0; for (y = 0; y < gh; y++) for (x = 0; x < gw; x++) { cell *c = &st->cells[i]; c->sides = st->sides; c->radius = r; c->th = th; switch (st->sides) { case 8: if (x & 1) { c->cx = x * size; c->radius /= 2; c->th = M_PI / 4; c->sides = 4; c->radius *= 1.1; } else { c->cx = x * size; c->radius *= 1.02; c->radius--; } if (y & 1) c->cx -= size; c->cy = y * size; break; case 6: c->cx = x * size; c->cy = y * size * sqrt(3)/2; if (y & 1) c->cx -= size * 0.5; break; case 4: c->cx = x * size * 2; c->cy = y * size * 2; break; case 3: c->cx = x * size * 0.5; c->cy = y * size * sqrt(3)/2; if ((x & 1) ^ (y & 1)) { c->th = th + M_PI; c->cy -= (r * 0.5); } break; default: abort(); } if (! c->initted_p) { c->speed = st->speed * (st->uniform_p ? 1 : (0.1 + frand(0.9))); c->i = st->lockstep_p ? 0 : random() % r; c->colors[0] = (st->lockstep_p ? 0 : random() % st->ncolors); c->colors[1] = 0; c->initted_p = True; } c->radius += 2; /* Avoid rounding errors */ if (c->i > c->radius) c->i = c->radius; if (c->colors[0] >= st->ncolors) c->colors[0] = st->ncolors-1; if (c->colors[1] >= st->ncolors) c->colors[1] = st->ncolors-1; i++; } st->initted_p = True; } static void draw_cell (state *st, cell *c) { XPoint points[20]; int i, j; for (j = 0; j <= 1; j++) { int r = (j == 0 ? c->radius : c->i); for (i = 0; i < c->sides; i++) { double th = i * M_PI * 2 / c->sides; points[i].x = c->cx + r * cos (th + c->th) + 0.5; points[i].y = c->cy + r * sin (th + c->th) + 0.5; } XSetForeground (st->dpy, st->gc, st->colors[c->colors[j]].pixel); XFillPolygon (st->dpy, st->window, st->gc, points, c->sides, Convex, CoordModeOrigin); } c->i -= c->speed; if (c->i < 0) { c->i = c->radius; c->colors[1] = c->colors[0]; if (c != &st->cells[0]) c->colors[0] = st->cells[0].colors[0]; else c->colors[0] = random() % st->ncolors; } } static void hexadrop_init_1 (Display *dpy, Window window, state *st) { XGCValues gcv; char *s1, *s2; st->dpy = dpy; st->window = window; st->delay = get_integer_resource (st->dpy, "delay", "Integer"); st->ncolors = get_integer_resource (st->dpy, "ncolors", "Integer"); st->speed = get_float_resource (st->dpy, "speed", "Speed"); if (st->speed < 0) st->speed = 0; XGetWindowAttributes (st->dpy, st->window, &st->xgwa); if (st->ncolors < 2) st->ncolors = 2; st->colors = (XColor *) calloc (sizeof(*st->colors), st->ncolors); if (st->ncolors < 10) make_random_colormap (st->xgwa.screen, st->xgwa.visual, st->xgwa.colormap, st->colors, &st->ncolors, False, True, 0, True); else make_smooth_colormap (st->xgwa.screen, st->xgwa.visual, st->xgwa.colormap, st->colors, &st->ncolors, True, 0, True); XSetWindowBackground (dpy, window, st->colors[0].pixel); s1 = get_string_resource (st->dpy, "uniform", "Uniform"); s2 = get_string_resource (st->dpy, "lockstep", "Lockstep"); if ((!s1 || !*s1 || !strcasecmp(s1, "maybe")) && (!s2 || !*s2 || !strcasecmp(s2, "maybe"))) { /* When being random, don't do both. */ st->uniform_p = random() & 1; st->lockstep_p = st->uniform_p ? 0 : random() & 1; } else { if (!s1 || !*s1 || !strcasecmp(s1, "maybe")) st->uniform_p = random() & 1; else st->uniform_p = get_boolean_resource (st->dpy, "uniform", "Uniform"); if (!s2 || !*s2 || !strcasecmp(s2, "maybe")) st->lockstep_p = random() & 1; else st->lockstep_p = get_boolean_resource (st->dpy, "lockstep","Lockstep"); } st->sides = get_integer_resource (st->dpy, "sides", "Sides"); if (! (st->sides == 0 || st->sides == 3 || st->sides == 4 || st->sides == 6 || st->sides == 8)) { printf ("%s: invalid number of sides: %d\n", progname, st->sides); st->sides = 0; } if (! st->sides) { static int defs[] = { 3, 3, 3, 4, 6, 6, 6, 6, 8, 8, 8 }; st->sides = defs[random() % countof(defs)]; } make_cells (st); gcv.foreground = st->colors[0].pixel; st->gc = XCreateGC (dpy, window, GCForeground, &gcv); } static void * hexadrop_init (Display *dpy, Window window) { state *st = (state *) calloc (1, sizeof(*st)); hexadrop_init_1 (dpy, window, st); return st; } static unsigned long hexadrop_draw (Display *dpy, Window window, void *closure) { state *st = (state *) closure; int i; for (i = 0; i < st->ncells; i++) draw_cell (st, &st->cells[i]); return st->delay; } static void hexadrop_reshape (Display *dpy, Window window, void *closure, unsigned int w, unsigned int h) { state *st = (state *) closure; XGetWindowAttributes (st->dpy, st->window, &st->xgwa); make_cells (st); } static void hexadrop_free (Display *dpy, Window window, void *closure) { state *st = (state *) closure; if (st->colors) { free_colors (st->xgwa.screen, st->xgwa.colormap, st->colors, st->ncolors); free (st->colors); st->colors = 0; } if (st->cells) { free (st->cells); st->cells = 0; } if (st->gc) { XFreeGC (st->dpy, st->gc); st->gc = 0; } } static Bool hexadrop_event (Display *dpy, Window window, void *closure, XEvent *event) { state *st = (state *) closure; if (screenhack_event_helper (dpy, window, event)) { cell *c = st->cells; st->cells = 0; hexadrop_free (st->dpy, st->window, st); free (st->cells); st->cells = c; hexadrop_init_1 (st->dpy, st->window, st); return True; } return False; } static const char *hexadrop_defaults [] = { ".background: black", ".foreground: white", "*fpsSolid: true", "*delay: 30000", "*sides: 0", "*size: 15", "*speed: 1.0", "*ncolors: 128", "*uniform: Maybe", "*lockstep: Maybe", #ifdef HAVE_MOBILE "*ignoreRotation: True", #endif 0 }; static XrmOptionDescRec hexadrop_options [] = { { "-delay", ".delay", XrmoptionSepArg, 0 }, { "-sides", ".sides", XrmoptionSepArg, 0 }, { "-size", ".size", XrmoptionSepArg, 0 }, { "-speed", ".speed", XrmoptionSepArg, 0 }, { "-ncolors", ".ncolors", XrmoptionSepArg, 0 }, { "-uniform-speed", ".uniform", XrmoptionNoArg, "True" }, { "-no-uniform-speed",".uniform", XrmoptionNoArg, "False" }, { "-lockstep", ".lockstep", XrmoptionNoArg, "True" }, { "-no-lockstep", ".lockstep", XrmoptionNoArg, "False" }, { 0, 0, 0, 0 } }; XSCREENSAVER_MODULE ("Hexadrop", hexadrop) xscreensaver-5.36/hacks/tessellimage.c000664 000767 000024 00000063725 12717747764 020116 0ustar00jwzstaff000000 000000 /* tessellimage, Copyright (c) 2014 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. */ #include "screenhack.h" #include "delaunay.h" #undef DO_VORONOI #ifndef HAVE_JWXYZ # define XK_MISCELLANY # include #endif #undef countof #define countof(x) (sizeof((x))/sizeof((*x))) struct state { Display *dpy; Window window; XWindowAttributes xgwa; GC wgc, pgc; int delay; Bool outline_p, cache_p, fill_p; double duration, duration2; int max_depth; double start_time, start_time2; XImage *img, *delta; Pixmap image, output, deltap; int nthreshes, threshes[256], vsizes[256]; int thresh, dthresh; Pixmap cache[256]; async_load_state *img_loader; XRectangle geom; Bool button_down_p; }; /* Returns the current time in seconds as a double. */ static double double_time (void) { struct timeval now; # ifdef GETTIMEOFDAY_TWO_ARGS struct timezone tzp; gettimeofday(&now, &tzp); # else gettimeofday(&now); # endif return (now.tv_sec + ((double) now.tv_usec * 0.000001)); } static void * tessellimage_init (Display *dpy, Window window) { struct state *st = (struct state *) calloc (1, sizeof(*st)); st->dpy = dpy; st->window = window; XGetWindowAttributes (st->dpy, st->window, &st->xgwa); st->delay = get_integer_resource (st->dpy, "delay", "Integer"); if (st->delay < 1) st->delay = 1; st->outline_p = get_boolean_resource (st->dpy, "outline", "Boolean"); st->cache_p = get_boolean_resource (st->dpy, "cache", "Boolean"); st->fill_p = get_boolean_resource (st->dpy, "fillScreen", "Boolean"); st->max_depth = get_integer_resource (st->dpy, "maxDepth", "MaxDepth"); if (st->max_depth < 100) st->max_depth = 100; st->duration = get_float_resource (st->dpy, "duration", "Seconds"); if (st->duration < 1) st->duration = 1; st->duration2 = get_float_resource (st->dpy, "duration2", "Seconds"); if (st->duration2 < 0.001) st->duration = 0.001; XClearWindow(st->dpy, st->window); return st; } /* Given a bitmask, returns the position and width of the field. */ static void decode_mask (unsigned int mask, unsigned int *pos_ret, unsigned int *size_ret) { int i; for (i = 0; i < 32; i++) if (mask & (1L << i)) { int j = 0; *pos_ret = i; for (; i < 32; i++, j++) if (! (mask & (1L << i))) break; *size_ret = j; return; } } static unsigned long pixel_distance (Visual *v, unsigned long p1, unsigned long p2) { static int initted_p = 0; static unsigned int rmsk=0, gmsk=0, bmsk=0; static unsigned int rpos=0, gpos=0, bpos=0; static unsigned int rsiz=0, gsiz=0, bsiz=0; unsigned char r1, g1, b1; unsigned char r2, g2, b2; long distance; if (!p1 && !p2) return 0; if (! initted_p) { rmsk = v->red_mask; gmsk = v->green_mask; bmsk = v->blue_mask; decode_mask (rmsk, &rpos, &rsiz); decode_mask (gmsk, &gpos, &gsiz); decode_mask (bmsk, &bpos, &bsiz); initted_p = 1; } r1 = (p1 & rmsk) >> rpos; g1 = (p1 & gmsk) >> gpos; b1 = (p1 & bmsk) >> bpos; r2 = (p2 & rmsk) >> rpos; g2 = (p2 & gmsk) >> gpos; b2 = (p2 & bmsk) >> bpos; #if 0 /* Compute the distance in linear RGB space. */ distance = cbrt (((r2 - r1) * (r2 - r1)) + ((g2 - g1) * (g2 - g1)) + ((b2 - b1) * (b2 - b1))); # elif 1 /* Compute the distance in luminance-weighted RGB space. */ { int rd = (r2 - r1) * 0.2989 * (1 / 0.5870); int gd = (g2 - g1) * 0.5870 * (1 / 0.5870); int bd = (b2 - b1) * 0.1140 * (1 / 0.5870); distance = cbrt ((rd * rd) + (gd * gd) + (bd * bd)); } # else /* Compute the distance in brightness-weighted HSV space. (Slower, and doesn't seem to look better than luminance RGB.) */ { int h1, h2; double s1, s2; double v1, v2; double hd, sd, vd, dd; rgb_to_hsv (r1, g1, b1, &h1, &s1, &v1); rgb_to_hsv (r2, g2, b2, &h2, &s2, &v2); hd = abs (h2 - h1); if (hd >= 180) hd -= 180; hd /= 180.0; sd = fabs (s2 - s1); vd = fabs (v2 - v1); /* [hsv]d are now the distance as 0.0 - 1.0. */ /* Compute the overall distance, giving more weight to V. */ dd = (hd * 0.25 + sd * 0.25 + vd * 0.5); if (dd < 0 || dd > 1.0) abort(); distance = dd * 255; } # endif if (distance < 0) distance = -distance; return distance; } static void flush_cache (struct state *st) { int i; for (i = 0; i < countof(st->cache); i++) if (st->cache[i]) { XFreePixmap (st->dpy, st->cache[i]); st->cache[i] = 0; } if (st->deltap) { XFreePixmap (st->dpy, st->deltap); st->deltap = 0; } } /* Scale up the bits in st->img so that it fills the screen, centered. */ static void scale_image (struct state *st) { double scale, s1, s2; XImage *img2; int x, y, cx, cy; if (st->geom.width <= 0 || st->geom.height <= 0) return; s1 = st->geom.width / (double) st->img->width; s2 = st->geom.height / (double) st->img->height; scale = (s1 < s2 ? s1 : s2); img2 = XCreateImage (st->dpy, st->xgwa.visual, st->img->depth, ZPixmap, 0, NULL, st->img->width, st->img->height, 8, 0); if (! img2) abort(); img2->data = (char *) calloc (img2->height, img2->bytes_per_line); if (! img2->data) abort(); cx = st->img->width / 2; cy = st->img->height / 2; if (st->geom.width < st->geom.height) /* portrait: aim toward the top */ cy = st->img->height / (2 / scale); for (y = 0; y < img2->height; y++) for (x = 0; x < img2->width; x++) { int x2 = cx + ((x - cx) * scale); int y2 = cy + ((y - cy) * scale); unsigned long p = 0; if (x2 >= 0 && y2 >= 0 && x2 < st->img->width && y2 < st->img->height) p = XGetPixel (st->img, x2, y2); XPutPixel (img2, x, y, p); } free (st->img->data); st->img->data = 0; XDestroyImage (st->img); st->img = img2; st->geom.x = 0; st->geom.y = 0; st->geom.width = st->img->width; st->geom.height = st->img->height; } static void analyze (struct state *st) { Window root; int x, y, i; unsigned int w, h, bw, d; unsigned long histo[256]; flush_cache (st); /* Convert the loaded pixmap to an XImage. */ XGetWindowAttributes (st->dpy, st->window, &st->xgwa); XGetGeometry (st->dpy, st->image, &root, &x, &y, &w, &h, &bw, &d); if (st->img) { free (st->img->data); st->img->data = 0; XDestroyImage (st->img); } st->img = XGetImage (st->dpy, st->image, 0, 0, w, h, ~0L, ZPixmap); if (st->fill_p) scale_image (st); /* Create the delta map: color space distance between each pixel. Maybe doing running a Sobel Filter matrix on this would be a better idea. That might be a bit faster, but I think it would make no visual difference. */ if (st->delta) { free (st->delta->data); st->delta->data = 0; XDestroyImage (st->delta); } st->delta = XCreateImage (st->dpy, st->xgwa.visual, d, ZPixmap, 0, NULL, w, h, 32, 0); st->delta->data = (char *) calloc (st->delta->height, st->delta->bytes_per_line); for (y = 0; y < st->delta->height; y++) { for (x = 0; x < st->delta->width; x++) { unsigned long pixels[5]; int i = 0; int distance = 0; pixels[i++] = XGetPixel (st->img, x, y); pixels[i++] = (x > 0 && y > 0 ? XGetPixel (st->img, x-1, y-1) : 0); pixels[i++] = ( y > 0 ? XGetPixel (st->img, x, y-1) : 0); pixels[i++] = (x > 0 ? XGetPixel (st->img, x-1, y) : 0); pixels[i++] = (x > 0 && y < h-1 ? XGetPixel (st->img, x-1, y+1) : 0); for (i = 1; i < countof(pixels); i++) distance += pixel_distance (st->xgwa.visual, pixels[0], pixels[i]); distance /= countof(pixels)-1; XPutPixel (st->delta, x, y, distance); } } /* Collect a histogram of every distance value. */ memset (histo, 0, sizeof(histo)); for (y = 0; y < st->delta->height; y++) for (x = 0; x < st->delta->width; x++) { unsigned long p = XGetPixel (st->delta, x, y); if (p > sizeof(histo)) abort(); histo[p]++; } /* Convert that from "occurrences of N" to ">= N". */ for (i = countof(histo) - 1; i > 0; i--) histo[i-1] += histo[i]; # if 0 fprintf (stderr, "%s: histo: ", progname); for (i = 0; i < countof(histo); i++) fprintf(stderr, "%d:%lu ", i, histo[i]); fprintf(stderr, "\n"); # endif /* Collect a useful set of threshold values, ignoring thresholds that result in a very similar number of control points (since those images probably won't look very different). */ { int max_vsize = st->max_depth; int min_vsize = 20; int min_delta = 100; if (min_vsize > max_vsize/100) min_vsize = max_vsize/100; if (min_delta > max_vsize/1000) min_delta = max_vsize/1000; st->nthreshes = 0; for (i = countof(histo)-1; i >= 0; i--) { unsigned long vsize = histo[i]; /* If this is a different vsize, push it. */ if (vsize >= min_vsize && vsize <= max_vsize && (st->nthreshes == 0 || vsize >= st->vsizes[st->nthreshes-1] + min_delta)) { st->threshes[st->nthreshes] = i; st->vsizes[st->nthreshes] = vsize; st->nthreshes++; } } } st->thresh = 0; /* startup */ st->dthresh = 1; /* forward */ if (st->output) { XFreePixmap (st->dpy, st->output); st->output = 0; } # if 0 fprintf (stderr, "%s: threshes:", progname); for (i = 0; i < st->nthreshes; i++) fprintf (stderr, " %d=%d", st->threshes[i], st->vsizes[i]); fprintf (stderr, "\n"); # endif } #ifndef DO_VORONOI /* True if the distance between any two corners is too small for it to make sense to draw an outline around this triangle. */ static Bool small_triangle_p (const XPoint *p) { int min = 4; if (abs (p[0].x - p[1].x) < min) return True; if (abs (p[0].y - p[1].y) < min) return True; if (abs (p[1].x - p[2].x) < min) return True; if (abs (p[1].y - p[2].y) < min) return True; if (abs (p[2].x - p[0].x) < min) return True; if (abs (p[2].y - p[0].y) < min) return True; return False; } #endif /* DO_VORONOI */ #ifdef DO_VORONOI typedef struct { int npoints; XPoint *p; } voronoi_polygon; static voronoi_polygon * delaunay_to_voronoi (int np, XYZ *p, int nv, ITRIANGLE *v) { struct tri_list { int count, size; int *tri; }; int i, j; struct tri_list *vert_to_tri = (struct tri_list *) calloc (np + 1, sizeof(*vert_to_tri)); voronoi_polygon *out = (voronoi_polygon *) calloc (np + 1, sizeof(*out)); /* for (i = 0; i < np; i++) printf("# p %d = %d %d\n", i, (int)p[i].x, (int)p[i].y); printf("\n"); for (i = 0; i < nv; i++) printf("@ t %d = %d %d %d\n", i, (int)v[i].p1, (int)v[i].p2, (int)v[i].p3); printf("\n"); */ /* Iterate the triangles to construct a map of vertices to the triangles that contain them. */ for (i = 0; i < nv; i++) { for (j = 0; j < 3; j++) /* iterate points in each triangle */ { int p = *((&v[i].p1) + j); struct tri_list *t = &vert_to_tri[p]; if (p < 0 || p >= np) abort(); if (t->size <= t->count + 1) { t->size += 3; t->size *= 1.3; t->tri = realloc (t->tri, t->size * sizeof(*t->tri)); if (! t->tri) abort(); } t->tri[t->count++] = i; } } /* for (i = 0; i < nv; i++) { struct tri_list *t = &vert_to_tri[i]; printf("p %d [%d %d]:", i, (int)p[i].x, (int)p[i].y); for (j = 0; j < t->count; j++) { int tt = t->tri[j]; printf(" t %d [%d(%d %d) %d(%d %d) %d(%d %d)]", tt, (int)v[tt].p1, (int)p[v[tt].p1].x, (int)p[v[tt].p1].y, (int)v[tt].p2, (int)p[v[tt].p2].x, (int)p[v[tt].p2].y, (int)v[tt].p3, (int)p[v[tt].p3].x, (int)p[v[tt].p3].y ); if (tt < 0 || tt >= nv) abort(); } printf("\n"); } */ /* For every vertex, compose a polygon whose corners are the centers of each triangle using that vertex. Skip any with less than 3 points. */ for (i = 0; i < np; i++) { struct tri_list *t = &vert_to_tri[i]; int n = t->count; if (n < 3) n = 0; out[i].npoints = n; out[i].p = (n > 0 ? (XPoint *) calloc (out[i].npoints + 1, sizeof (*out[i].p)) : 0); //printf("%d: ", i); for (j = 0; j < out[i].npoints; j++) { ITRIANGLE *tt = &v[t->tri[j]]; out[i].p[j].x = (p[tt->p1].x + p[tt->p2].x + p[tt->p3].x) / 3; out[i].p[j].y = (p[tt->p1].y + p[tt->p2].y + p[tt->p3].y) / 3; //printf(" [%d: %d %d]", j, out[i].p[j].x, out[i].p[j].y); } //printf("\n"); } free (vert_to_tri); return out; } #endif /* DO_VORONOI */ static void tessellate (struct state *st) { Bool ticked_p = False; if (! st->image) return; if (! st->wgc) { XGCValues gcv; gcv.function = GXcopy; gcv.subwindow_mode = IncludeInferiors; st->wgc = XCreateGC(st->dpy, st->window, GCFunction, &gcv); st->pgc = XCreateGC(st->dpy, st->image, GCFunction, &gcv); } if (! st->nthreshes) return; /* If duration2 has expired, switch to the next threshold. */ if (! st->button_down_p) { double t2 = double_time(); if (st->start_time2 + st->duration2 < t2) { st->start_time2 = t2; st->thresh += st->dthresh; ticked_p = True; if (st->thresh >= st->nthreshes) { st->thresh = st->nthreshes - 1; st->dthresh = -1; } else if (st->thresh < 0) { st->thresh = 0; st->dthresh = 1; } } } if (! st->output) ticked_p = True; /* If we've picked a new threshold, regenerate the output image. */ if (ticked_p && st->cache[st->thresh]) { if (st->output) XCopyArea (st->dpy, st->cache[st->thresh], st->output, st->pgc, 0, 0, st->delta->width, st->delta->height, 0, 0); } else if (ticked_p) { int threshold = st->threshes[st->thresh]; int vsize = st->vsizes[st->thresh]; ITRIANGLE *v; XYZ *p = 0; int nv = 0; int ntri = 0; int x, y, i; #if 0 fprintf(stderr, "%s: thresh %d/%d = %d=%d\n", progname, st->thresh, st->nthreshes, threshold, vsize); #endif /* Create a control point at every pixel where the delta is above the current threshold. Triangulate from those. */ vsize += 8; /* corners of screen + corners of image */ p = (XYZ *) calloc (vsize+4, sizeof(*p)); v = (ITRIANGLE *) calloc (3*(vsize+4), sizeof(*v)); if (!p || !v) { fprintf (stderr, "%s: out of memory (%d)\n", progname, vsize); abort(); } /* Add control points for the corners of the screen, and for the corners of the image. */ if (st->geom.width <= 0) st->geom.width = st->delta->width; if (st->geom.height <= 0) st->geom.height = st->delta->height; for (y = 0; y <= 1; y++) for (x = 0; x <= 1; x++) { p[nv].x = x ? st->delta->width-1 : 0; p[nv].y = y ? st->delta->height-1 : 0; p[nv].z = XGetPixel (st->delta, (int) p[nv].x, (int) p[nv].y); nv++; p[nv].x = st->geom.x + (x ? st->geom.width-1 : 0); p[nv].y = st->geom.y + (y ? st->geom.height-1 : 0); p[nv].z = XGetPixel (st->delta, (int) p[nv].x, (int) p[nv].y); nv++; } /* Add control points for every pixel that exceeds the threshold. */ for (y = 0; y < st->delta->height; y++) for (x = 0; x < st->delta->width; x++) { unsigned long px = XGetPixel (st->delta, x, y); if (px >= threshold) { if (nv >= vsize) abort(); p[nv].x = x; p[nv].y = y; p[nv].z = px; nv++; } } if (nv != vsize) abort(); qsort (p, nv, sizeof(*p), delaunay_xyzcompare); if (delaunay (nv, p, v, &ntri)) { fprintf (stderr, "%s: out of memory\n", progname); abort(); } /* Create the output pixmap based on that triangulation. */ if (st->output) XFreePixmap (st->dpy, st->output); st->output = XCreatePixmap (st->dpy, st->window, st->delta->width, st->delta->height, st->xgwa.depth); XFillRectangle (st->dpy, st->output, st->pgc, 0, 0, st->delta->width, st->delta->height); #ifdef DO_VORONOI voronoi_polygon *polys = delaunay_to_voronoi (nv, p, ntri, v); for (i = 0; i < nv; i++) { if (polys[i].npoints >= 3) { unsigned long color = XGetPixel (st->img, p[i].x, p[i].y); XSetForeground (st->dpy, st->pgc, color); XFillPolygon (st->dpy, st->output, st->pgc, polys[i].p, polys[i].npoints, Convex, CoordModeOrigin); if (st->outline_p) { XColor bd; double scale = 0.8; bd.pixel = color; XQueryColor (st->dpy, st->xgwa.colormap, &bd); bd.red *= scale; bd.green *= scale; bd.blue *= scale; /* bd.red = 0xFFFF; bd.green = 0; bd.blue = 0; */ XAllocColor (st->dpy, st->xgwa.colormap, &bd); XSetForeground (st->dpy, st->pgc, bd.pixel); XDrawLines (st->dpy, st->output, st->pgc, polys[i].p, polys[i].npoints, CoordModeOrigin); XFreeColors (st->dpy, st->xgwa.colormap, &bd.pixel, 1, 0); } } if (polys[i].p) free (polys[i].p); polys[i].p = 0; } free (polys); #else /* !DO_VORONOI */ for (i = 0; i < ntri; i++) { XPoint xp[3]; unsigned long color; xp[0].x = p[v[i].p1].x; xp[0].y = p[v[i].p1].y; xp[1].x = p[v[i].p2].x; xp[1].y = p[v[i].p2].y; xp[2].x = p[v[i].p3].x; xp[2].y = p[v[i].p3].y; /* Set the color of this triangle to the pixel at its midpoint. */ color = XGetPixel (st->img, (xp[0].x + xp[1].x + xp[2].x) / 3, (xp[0].y + xp[1].y + xp[2].y) / 3); XSetForeground (st->dpy, st->pgc, color); XFillPolygon (st->dpy, st->output, st->pgc, xp, countof(xp), Convex, CoordModeOrigin); if (st->outline_p && !small_triangle_p(xp)) { /* Border the triangle with a color that is darker */ XColor bd; double scale = 0.8; bd.pixel = color; XQueryColor (st->dpy, st->xgwa.colormap, &bd); bd.red *= scale; bd.green *= scale; bd.blue *= scale; /* bd.red = 0xFFFF; bd.green = 0; bd.blue = 0; */ XAllocColor (st->dpy, st->xgwa.colormap, &bd); XSetForeground (st->dpy, st->pgc, bd.pixel); XDrawLines (st->dpy, st->output, st->pgc, xp, countof(xp), CoordModeOrigin); XFreeColors (st->dpy, st->xgwa.colormap, &bd.pixel, 1, 0); } } #endif /* !DO_VORONOI */ free (p); free (v); if (st->cache_p && !st->cache[st->thresh]) { st->cache[st->thresh] = XCreatePixmap (st->dpy, st->window, st->delta->width, st->delta->height, st->xgwa.depth); if (! st->cache[st->thresh]) { fprintf (stderr, "%s: out of memory\n", progname); abort(); } if (st->output) XCopyArea (st->dpy, st->output, st->cache[st->thresh], st->pgc, 0, 0, st->delta->width, st->delta->height, 0, 0); } } if (! st->output) abort(); } /* Convert the delta map into a displayable pixmap. */ static Pixmap get_deltap (struct state *st) { int x, y; int w = st->delta->width; int h = st->delta->height; XImage *dimg; Visual *v = st->xgwa.visual; unsigned int rmsk=0, gmsk=0, bmsk=0; unsigned int rpos=0, gpos=0, bpos=0; unsigned int rsiz=0, gsiz=0, bsiz=0; if (st->deltap) return st->deltap; rmsk = v->red_mask; gmsk = v->green_mask; bmsk = v->blue_mask; decode_mask (rmsk, &rpos, &rsiz); decode_mask (gmsk, &gpos, &gsiz); decode_mask (bmsk, &bpos, &bsiz); dimg = XCreateImage (st->dpy, st->xgwa.visual, st->xgwa.depth, ZPixmap, 0, NULL, w, h, 8, 0); if (! dimg) abort(); dimg->data = (char *) calloc (dimg->height, dimg->bytes_per_line); if (! dimg->data) abort(); for (y = 0; y < h; y++) for (x = 0; x < w; x++) { unsigned long v = XGetPixel (st->delta, x, y) << 5; unsigned long p = (((v << rpos) & rmsk) | ((v << gpos) & gmsk) | ((v << bpos) & bmsk)); XPutPixel (dimg, x, y, p); } st->deltap = XCreatePixmap (st->dpy, st->window, w, h, st->xgwa.depth); XPutImage (st->dpy, st->deltap, st->pgc, dimg, 0, 0, 0, 0, w, h); XDestroyImage (dimg); return st->deltap; } static unsigned long tessellimage_draw (Display *dpy, Window window, void *closure) { struct state *st = (struct state *) closure; if (st->img_loader) /* still loading */ { st->img_loader = load_image_async_simple (st->img_loader, 0, 0, 0, 0, &st->geom); if (! st->img_loader) { /* just finished */ analyze (st); st->start_time = double_time(); st->start_time2 = st->start_time; } goto DONE; } if (!st->img_loader && st->start_time + st->duration < double_time()) { XClearWindow (st->dpy, st->window); if (st->image) XFreePixmap (dpy, st->image); st->image = XCreatePixmap (st->dpy, st->window, st->xgwa.width, st->xgwa.height, st->xgwa.depth); st->img_loader = load_image_async_simple (0, st->xgwa.screen, st->window, st->image, 0, &st->geom); goto DONE; } tessellate (st); XGetWindowAttributes (st->dpy, st->window, &st->xgwa); XClearWindow (st->dpy, st->window); if (st->output) XCopyArea (st->dpy, (st->button_down_p ? get_deltap (st) : st->output), st->window, st->wgc, 0, 0, st->delta->width, st->delta->height, (st->xgwa.width - st->delta->width) / 2, (st->xgwa.height - st->delta->height) / 2); else if (!st->nthreshes) XCopyArea (st->dpy, st->image, st->window, st->wgc, 0, 0, st->xgwa.width, st->xgwa.height, 0, 0); DONE: return st->delay; } static void tessellimage_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 tessellimage_event (Display *dpy, Window window, void *closure, XEvent *event) { struct state *st = (struct state *) closure; if (event->xany.type == ButtonPress) { st->button_down_p = True; return True; } else if (event->xany.type == ButtonRelease) { st->button_down_p = False; return True; } else if (screenhack_event_helper (dpy, window, event)) { st->start_time = 0; /* load next image */ return True; } return False; } static void tessellimage_free (Display *dpy, Window window, void *closure) { struct state *st = (struct state *) closure; flush_cache (st); if (st->wgc) XFreeGC (dpy, st->wgc); if (st->pgc) XFreeGC (dpy, st->pgc); if (st->image) XFreePixmap (dpy, st->image); if (st->output) XFreePixmap (dpy, st->output); if (st->delta) XDestroyImage (st->delta); free (st); } static const char *tessellimage_defaults [] = { ".background: black", ".foreground: white", "*dontClearRoot: True", "*fpsSolid: true", "*delay: 30000", "*duration: 120", "*duration2: 0.4", "*maxDepth: 30000", "*outline: True", "*fillScreen: True", "*cache: True", #ifdef HAVE_MOBILE "*ignoreRotation: True", "*rotateImages: True", #endif 0 }; static XrmOptionDescRec tessellimage_options [] = { { "-delay", ".delay", XrmoptionSepArg, 0 }, { "-duration", ".duration", XrmoptionSepArg, 0 }, { "-duration2", ".duration2", XrmoptionSepArg, 0 }, { "-max-depth", ".maxDepth", XrmoptionSepArg, 0 }, { "-outline", ".outline", XrmoptionNoArg, "True" }, { "-no-outline", ".outline", XrmoptionNoArg, "False" }, { "-fill-screen", ".fillScreen", XrmoptionNoArg, "True" }, { "-no-fill-screen", ".fillScreen", XrmoptionNoArg, "False" }, { "-cache", ".cache", XrmoptionNoArg, "True" }, { "-no-cache", ".cache", XrmoptionNoArg, "False" }, { 0, 0, 0, 0 } }; XSCREENSAVER_MODULE ("Tessellimage", tessellimage) xscreensaver-5.36/hacks/delaunay.c000644 000767 000024 00000017150 12701612216 017177 0ustar00jwzstaff000000 000000 /* Triangulate Efficient Triangulation Algorithm Suitable for Terrain Modelling or An Algorithm for Interpolating Irregularly-Spaced Data with Applications in Terrain Modelling Written by Paul Bourke Presented at Pan Pacific Computer Conference, Beijing, China. January 1989 Abstract A discussion of a method that has been used with success in terrain modelling to estimate the height at any point on the land surface from irregularly distributed samples. The special requirements of terrain modelling are discussed as well as a detailed description of the algorithm and an example of its application. http://paulbourke.net/papers/triangulate/ http://paulbourke.net/papers/triangulate/triangulate.c */ #include #include #include "delaunay.h" typedef struct { int p1,p2; } IEDGE; #define TRUE 1 #define FALSE 0 #define EPSILON 0.000001 /* Return TRUE if a point (xp,yp) is inside the circumcircle made up of the points (x1,y1), (x2,y2), (x3,y3) The circumcircle centre is returned in (xc,yc) and the radius r NOTE: A point on the edge is inside the circumcircle */ static int circumcircle (double xp,double yp, double x1,double y1,double x2,double y2,double x3,double y3, double *xc,double *yc,double *rsqr) { double m1,m2,mx1,mx2,my1,my2; double dx,dy,drsqr; double fabsy1y2 = fabs(y1-y2); double fabsy2y3 = fabs(y2-y3); /* Check for coincident points */ if (fabsy1y2 < EPSILON && fabsy2y3 < EPSILON) return(FALSE); if (fabsy1y2 < EPSILON) { m2 = - (x3-x2) / (y3-y2); mx2 = (x2 + x3) / 2.0; my2 = (y2 + y3) / 2.0; *xc = (x2 + x1) / 2.0; *yc = m2 * (*xc - mx2) + my2; } else if (fabsy2y3 < EPSILON) { m1 = - (x2-x1) / (y2-y1); mx1 = (x1 + x2) / 2.0; my1 = (y1 + y2) / 2.0; *xc = (x3 + x2) / 2.0; *yc = m1 * (*xc - mx1) + my1; } else { m1 = - (x2-x1) / (y2-y1); m2 = - (x3-x2) / (y3-y2); mx1 = (x1 + x2) / 2.0; mx2 = (x2 + x3) / 2.0; my1 = (y1 + y2) / 2.0; my2 = (y2 + y3) / 2.0; *xc = (m1 * mx1 - m2 * mx2 + my2 - my1) / (m1 - m2); if (fabsy1y2 > fabsy2y3) { *yc = m1 * (*xc - mx1) + my1; } else { *yc = m2 * (*xc - mx2) + my2; } } dx = x2 - *xc; dy = y2 - *yc; *rsqr = dx*dx + dy*dy; dx = xp - *xc; dy = yp - *yc; drsqr = dx*dx + dy*dy; /* Original return((drsqr <= *rsqr) ? TRUE : FALSE); Proposed by Chuck Morris */ return((drsqr - *rsqr) <= EPSILON ? TRUE : FALSE); } /* Triangulation subroutine Takes as input NV vertices in array pxyz Returned is a list of ntri triangular faces in the array v These triangles are arranged in a consistent clockwise order. The triangle array 'v' should be malloced to 3 * nv The vertex array pxyz must be big enough to hold 3 more points The vertex array must be sorted in increasing x values say qsort(p,nv,sizeof(XYZ),XYZCompare); */ int delaunay (int nv,XYZ *pxyz,ITRIANGLE *v,int *ntri) { int *complete = NULL; IEDGE *edges = NULL; int nedge = 0; int trimax,emax = 200; int status = 0; int inside; int i,j,k; double xp,yp,x1,y1,x2,y2,x3,y3,xc=0,yc=0,r=0; double xmin,xmax,ymin,ymax,xmid,ymid; double dx,dy,dmax; /* Allocate memory for the completeness list, flag for each triangle */ trimax = 4 * nv; if ((complete = malloc(trimax*sizeof(int))) == NULL) { status = 1; goto skip; } /* Allocate memory for the edge list */ if ((edges = malloc(emax*(long)sizeof(IEDGE))) == NULL) { status = 2; goto skip; } /* Find the maximum and minimum vertex bounds. This is to allow calculation of the bounding triangle */ xmin = pxyz[0].x; ymin = pxyz[0].y; xmax = xmin; ymax = ymin; for (i=1;i xmax) xmax = pxyz[i].x; if (pxyz[i].y < ymin) ymin = pxyz[i].y; if (pxyz[i].y > ymax) ymax = pxyz[i].y; } dx = xmax - xmin; dy = ymax - ymin; dmax = (dx > dy) ? dx : dy; xmid = (xmax + xmin) / 2.0; ymid = (ymax + ymin) / 2.0; /* Set up the supertriangle This is a triangle which encompasses all the sample points. The supertriangle coordinates are added to the end of the vertex list. The supertriangle is the first triangle in the triangle list. */ pxyz[nv+0].x = xmid - 20 * dmax; pxyz[nv+0].y = ymid - dmax; pxyz[nv+0].z = 0.0; pxyz[nv+1].x = xmid; pxyz[nv+1].y = ymid + 20 * dmax; pxyz[nv+1].z = 0.0; pxyz[nv+2].x = xmid + 20 * dmax; pxyz[nv+2].y = ymid - dmax; pxyz[nv+2].z = 0.0; v[0].p1 = nv; v[0].p2 = nv+1; v[0].p3 = nv+2; complete[0] = FALSE; *ntri = 1; /* Include each point one at a time into the existing mesh */ for (i=0;i r) complete[j] = TRUE; if (inside) { /* Check that we haven't exceeded the edge list size */ if (nedge+3 >= emax) { emax += 100; if ((edges = realloc(edges,emax*(long)sizeof(IEDGE))) == NULL) { status = 3; goto skip; } } edges[nedge+0].p1 = v[j].p1; edges[nedge+0].p2 = v[j].p2; edges[nedge+1].p1 = v[j].p2; edges[nedge+1].p2 = v[j].p3; edges[nedge+2].p1 = v[j].p3; edges[nedge+2].p2 = v[j].p1; nedge += 3; v[j] = v[(*ntri)-1]; complete[j] = complete[(*ntri)-1]; (*ntri)--; j--; } } /* Tag multiple edges Note: if all triangles are specified anticlockwise then all interior edges are opposite pointing in direction. */ for (j=0;j= trimax) { status = 4; goto skip; } v[*ntri].p1 = edges[j].p1; v[*ntri].p2 = edges[j].p2; v[*ntri].p3 = i; complete[*ntri] = FALSE; (*ntri)++; } } /* Remove triangles with supertriangle vertices These are triangles which have a vertex number greater than nv */ for (i=0;i<(*ntri);i++) { if (v[i].p1 >= nv || v[i].p2 >= nv || v[i].p3 >= nv) { v[i] = v[(*ntri)-1]; (*ntri)--; i--; } } skip: free(edges); free(complete); return(status); } int delaunay_xyzcompare (const void *v1, const void *v2) { const XYZ *p1,*p2; p1 = v1; p2 = v2; if (p1->x < p2->x) return(-1); else if (p1->x > p2->x) return(1); else return(0); } xscreensaver-5.36/hacks/recanim.c000644 000767 000024 00000022110 12731473422 017012 0ustar00jwzstaff000000 000000 /* recanim, Copyright (c) 2014-2015 Jamie Zawinski * Record animation frames of the running screenhack. * * 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. */ #ifdef HAVE_CONFIG_H # include "config.h" #endif /* HAVE_CONFIG_H */ #ifdef USE_GL # ifdef HAVE_JWXYZ # include "jwxyz.h" # else /* !HAVE_JWXYZ -- real Xlib */ # include # include # endif /* !HAVE_JWXYZ */ # ifdef HAVE_JWZGLES # include "jwzgles.h" # endif /* HAVE_JWZGLES */ #endif /* USE_GL */ #ifdef HAVE_GDK_PIXBUF # ifdef HAVE_GTK2 # include # else /* !HAVE_GTK2 */ # include # endif /* !HAVE_GTK2 */ #endif /* HAVE_GDK_PIXBUF */ #include #include #include "screenhackI.h" #include "recanim.h" struct record_anim_state { Screen *screen; Window window; int frame_count; int target_frames; XWindowAttributes xgwa; char *title; int pct; int fade_frames; # ifdef USE_GL char *data, *data2; # else /* !USE_GL */ XImage *img; Pixmap p; GC gc; # endif /* !USE_GL */ }; record_anim_state * screenhack_record_anim_init (Screen *screen, Window window, int target_frames) { Display *dpy = DisplayOfScreen (screen); record_anim_state *st; # ifndef USE_GL XGCValues gcv; # endif /* !USE_GL */ if (target_frames <= 0) return 0; st = (record_anim_state *) calloc (1, sizeof(*st)); st->screen = screen; st->window = window; st->target_frames = target_frames; st->frame_count = 0; st->fade_frames = 30 * 1.5; if (st->fade_frames >= (st->target_frames / 2) - 30) st->fade_frames = 0; # ifdef HAVE_GDK_PIXBUF { Window root; int x, y; unsigned int w, h, d, bw; XGetGeometry (dpy, window, &root, &x, &y, &w, &h, &bw, &d); gdk_pixbuf_xlib_init_with_depth (dpy, screen_number (screen), d); # ifdef HAVE_GTK2 # if !GLIB_CHECK_VERSION(2, 36 ,0) g_type_init(); # endif # else /* !HAVE_GTK2 */ xlib_rgb_init (dpy, screen); # endif /* !HAVE_GTK2 */ } # else /* !HAVE_GDK_PIXBUF */ # error GDK_PIXBUF is required # endif /* !HAVE_GDK_PIXBUF */ XGetWindowAttributes (dpy, st->window, &st->xgwa); # ifdef USE_GL st->data = (char *) calloc (st->xgwa.width, st->xgwa.height * 3); st->data2 = (char *) calloc (st->xgwa.width, st->xgwa.height * 3); # else /* !USE_GL */ st->gc = XCreateGC (dpy, st->window, 0, &gcv); st->p = XCreatePixmap (dpy, st->window, st->xgwa.width, st->xgwa.height, st->xgwa.depth); st->img = XCreateImage (dpy, st->xgwa.visual, st->xgwa.depth, ZPixmap, 0, 0, st->xgwa.width, st->xgwa.height, 8, 0); st->img->data = (char *) calloc (st->img->height, st->img->bytes_per_line); # endif /* !USE_GL */ # ifndef HAVE_JWXYZ XFetchName (dpy, st->window, &st->title); # endif /* !HAVE_JWXYZ */ return st; } /* Fade to black. Assumes data is 3-byte packed. */ static void fade_frame (record_anim_state *st, unsigned char *data, double ratio) { int x, y, i; int w = st->xgwa.width; int h = st->xgwa.height; unsigned char *s = data; for (y = 0; y < h; y++) for (x = 0; x < w; x++) for (i = 0; i < 3; i++) *s++ *= ratio; } void screenhack_record_anim (record_anim_state *st) { int bytes_per_line = st->xgwa.width * 3; # ifndef USE_GL Display *dpy = DisplayOfScreen (st->screen); char *data = (char *) st->img->data; /* Under XQuartz we can't just do XGetImage on the Window, we have to go through an intermediate Pixmap first. I don't understand why. Also, the fucking resize handle shows up as black. God dammit. A workaround for that is to temporarily remove /opt/X11/bin/quartz-wm */ XCopyArea (dpy, st->window, st->p, st->gc, 0, 0, st->xgwa.width, st->xgwa.height, 0, 0); XGetSubImage (dpy, st->p, 0, 0, st->xgwa.width, st->xgwa.height, ~0L, ZPixmap, st->img, 0, 0); /* Convert BGRA to RGB */ { const char *in = st->img->data; char *out = st->img->data; int x, y; int w = st->img->width; int h = st->img->height; for (y = 0; y < h; y++) { const char *in2 = in; for (x = 0; x < w; x++) { *out++ = in2[2]; *out++ = in2[1]; *out++ = in2[0]; in2 += 4; } in += st->img->bytes_per_line; } } # else /* USE_GL */ char *data = st->data2; int y; # ifdef HAVE_JWZGLES # undef glReadPixels /* Kludge -- unimplemented in the GLES compat layer */ # endif /* First OpenGL frame tends to be random data like a shot of my desktop, since it is the front buffer when we were drawing in the back buffer. Leave it black. */ /* glDrawBuffer (GL_BACK); */ if (st->frame_count != 0) glReadPixels (0, 0, st->xgwa.width, st->xgwa.height, GL_RGB, GL_UNSIGNED_BYTE, st->data); /* Flip vertically */ for (y = 0; y < st->xgwa.height; y++) memcpy (data + bytes_per_line * y, st->data + bytes_per_line * (st->xgwa.height - y - 1), bytes_per_line); # endif /* USE_GL */ if (st->frame_count < st->fade_frames) fade_frame (st, (unsigned char *) data, (double) st->frame_count / st->fade_frames); else if (st->frame_count >= st->target_frames - st->fade_frames) fade_frame (st, (unsigned char *) data, (double) (st->target_frames - st->frame_count - 1) / st->fade_frames); # ifdef HAVE_GDK_PIXBUF { const char *type = "png"; char fn[1024]; GError *error = 0; GdkPixbuf *pixbuf; pixbuf = gdk_pixbuf_new_from_data ((guchar *) data, GDK_COLORSPACE_RGB, False, /* alpha */ 8, /* bits per sample */ st->xgwa.width, st->xgwa.height, bytes_per_line, 0, 0); sprintf (fn, "%s-%06d.%s", progname, st->frame_count, type); gdk_pixbuf_save (pixbuf, fn, type, &error, NULL); if (error) { fprintf (stderr, "%s: %s: %s\n", progname, fn, error->message); exit (1); } g_object_unref (pixbuf); } # else /* !HAVE_GDK_PIXBUF */ # error GDK_PIXBUF is required # endif /* !HAVE_GDK_PIXBUF */ # ifndef HAVE_JWXYZ { /* Put percent done in window title */ int pct = 100 * (st->frame_count + 1) / st->target_frames; if (pct != st->pct && st->title) { Display *dpy = DisplayOfScreen (st->screen); char *t2 = (char *) malloc (strlen(st->title) + 20); sprintf (t2, "%s: %d%%", st->title, pct); XStoreName (dpy, st->window, t2); XSync (dpy, 0); free (t2); st->pct = pct; } } # endif /* !HAVE_JWXYZ */ if (++st->frame_count >= st->target_frames) screenhack_record_anim_free (st); } void screenhack_record_anim_free (record_anim_state *st) { # ifndef USE_GL Display *dpy = DisplayOfScreen (st->screen); # endif /* !USE_GL */ struct stat s; int i; const char *type = "png"; char cmd[1024]; char fn[1024]; const char *soundtrack = 0; fprintf (stderr, "%s: wrote %d frames\n", progname, st->frame_count); # ifdef USE_GL free (st->data); free (st->data2); # else /* !USE_GL */ free (st->img->data); st->img->data = 0; XDestroyImage (st->img); XFreeGC (dpy, st->gc); XFreePixmap (dpy, st->p); # endif /* !USE_GL */ sprintf (fn, "%s.%s", progname, "mp4"); unlink (fn); # define ST "images/drives-200.mp3" soundtrack = ST; if (stat (soundtrack, &s)) soundtrack = 0; if (! soundtrack) soundtrack = "../" ST; if (stat (soundtrack, &s)) soundtrack = 0; if (! soundtrack) soundtrack = "../../" ST; if (stat (soundtrack, &s)) soundtrack = 0; sprintf (cmd, "ffmpeg" " -framerate 30" /* rate of input: must be before -i */ " -i '%s-%%06d.%s'" " -r 30", /* rate of output: must be after -i */ progname, type); if (soundtrack) sprintf (cmd + strlen(cmd), " -i '%s' -map 0:v:0 -map 1:a:0 -acodec libfaac", soundtrack); sprintf (cmd + strlen(cmd), " -c:v libx264" " -profile:v high" " -crf 18" " -pix_fmt yuv420p" " '%s'" " 2>&-", fn); fprintf (stderr, "%s: exec: %s\n", progname, cmd); system (cmd); if (stat (fn, &s)) { fprintf (stderr, "%s: %s was not created\n", progname, fn); exit (1); } fprintf (stderr, "%s: wrote %s (%.1f MB)\n", progname, fn, s.st_size / (float) (1024 * 1024)); for (i = 0; i < st->frame_count; i++) { sprintf (fn, "%s-%06d.%s", progname, i, type); unlink (fn); } if (st->title) free (st->title); free (st); exit (0); } xscreensaver-5.36/hacks/binaryring.c000664 000767 000024 00000040622 12717724540 017556 0ustar00jwzstaff000000 000000 /* * Binary Ring * Copyright (c) 2006-2014 Emilio Del Tessandoro * * Directly ported code from complexification.net Binary Ring art * http://www.complexification.net/gallery/machines/binaryRing/appletm/BinaryRing_m.pde * * Binary Ring code: * j.tarbell June, 2004 * Albuquerque, New Mexico * complexification.net * * Directly based the hacks of: * * xscreensaver, Copyright (c) 1997, 1998, 2002 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. */ #include "screenhack.h" #include "colors.h" #include "hsv.h" #define ANTIALIAS 1 #define BLACK 0 #define WHITE 1 #define swap(a, b) do { __typeof__(a) tmp; tmp = a; a = b; b = tmp; } while(0) #define frand1() ((((int) random() ) << 1) * 4.65661287524579692411E-10) #define min(a,b) ((a)<(b)?(a):(b)) #define max(a,b) ((a)>(b)?(a):(b)) /* better if signed */ typedef unsigned long pixel_t; typedef struct { float x, y; float xx, yy; float vx, vy; float color; int age; /* age from 0 to ageMax */ } particle_t; struct state { int epoch; int growth_delay; int ring_radius; int max_age; float curliness; int particles_number; particle_t* particles; Display *display; /* variables for the X stuff */ Window window; GC gc; XGCValues gcv; Visual* visual; int depth; int width; int height; Pixmap pix; /* for reshape */ XImage* buf; /* buffer */ pixel_t* buffer; pixel_t colors[2]; Bool color; }; static void point2rgb(int depth, pixel_t c, int *r, int *g, int *b) { switch(depth) { case 32: case 24: #ifdef HAVE_JWXYZ /* This program idiotically does not go through a color map, so we have to hardcode in knowledge of how jwxyz.a packs pixels! Fix it to go through st->colors[st->ncolors] instead! */ *r = (c & 0x00ff0000) >> 16; *g = (c & 0x0000ffff) >> 8; *b = (c & 0x000000ff); #else *g = (c & 0xff00) >> 8; *r = (c & 0xff0000) >> 16; *b = c & 0xff; #endif break; case 16: *g = ((c >> 5) & 0x3f) << 2; *r = ((c >> 11) & 0x1f) << 3; *b = (c & 0x1f) << 3; break; case 15: *g = ((c >> 5) & 0x1f) << 3; *r = ((c >> 10) & 0x1f) << 3; *b = (c & 0x1f) << 3; break; } } static pixel_t rgb2point(int depth, int r, int g, int b) { pixel_t ret = 0; switch(depth) { case 32: case 24: #ifdef HAVE_JWXYZ /* This program idiotically does not go through a color map, so we have to hardcode in knowledge of how jwxyz.a packs pixels! Fix it to go through st->colors[st->ncolors] instead! */ ret = 0xFF000000 | (r << 16) | (g << 8) | b; #else ret |= (r << 16) | (g << 8) | b; #endif break; case 16: ret = ((r>>3) << 11) | ((g>>2)<<5) | (b>>3); break; case 15: ret = ((r>>3) << 10) | ((g>>3)<<5) | (b>>3); break; } return ret; } void print_color ( struct state* st, pixel_t color ); /* alpha blended point drawing -- this is Not Right and will likely fail on * non-intel platforms as it is now, needs fixing */ static void draw_point ( struct state* st, int x, int y, pixel_t myc, float a ) { int or = 0, og = 0, ob = 0; int r = 0, g = 0, b = 0; int nr, ng, nb; register pixel_t c; /*or = st->buffer[ 3 * ( y * st->width + x ) + 0 ]; og = st->buffer[ 3 * ( y * st->width + x ) + 1 ]; ob = st->buffer[ 3 * ( y * st->width + x ) + 2 ];*/ c = st->buffer[ y * st->width + x ]; point2rgb( st->depth, c, &or, &og, &ob ); point2rgb( st->depth, myc, &r, &g, &b ); nr = or + (r - or) * a; ng = og + (g - og) * a; nb = ob + (b - ob) * a; /*st->buffer[ 3 * ( y * st->width + x ) + 0 ] = nr; st->buffer[ 3 * ( y * st->width + x ) + 1 ] = ng; st->buffer[ 3 * ( y * st->width + x ) + 2 ] = nb;*/ c = rgb2point(st->depth, nr, ng, nb); st->buffer[ y * st->width + x ] = c; XPutPixel( st->buf, x, y, c ); } void print_color ( struct state* st, pixel_t color ) { int r=0, g=0, b=0; point2rgb(st->depth, color, &r, &g, &b); printf( "%d %d %d\n", r, g, b); } #if ANTIALIAS #define plot_(X,Y,D) do{ \ _dla_plot(st, (X), (Y), color, (D) * alpha); }while(0) static void _dla_plot(struct state* st, int x, int y, pixel_t col, float br) { if ( ( x >= 0 && x < st->width ) && ( y >= 0 && y < st->height ) ) { if ( br > 1.0f ) br = 1.0f; draw_point( st, x, y, col, br ); } } #define ipart_(X) ((int)(X)) #define round_(X) ((int)(((float)(X))+0.5)) #define fpart_(X) (((float)(X))-(float)ipart_(X)) #define rfpart_(X) (1.0-fpart_(X)) static void draw_line_antialias( struct state* st, int x1, int y1, int x2, int y2, pixel_t color, float alpha ) { float dx = (float)x2 - (float)x1; float dy = (float)y2 - (float)y1; float gradient; float xend; float yend; float xgap; float ygap; int xpxl1; int ypxl1; float intery; float interx; int xpxl2; int ypxl2; int x; int y; /* hard clipping, because this routine has some problems with negative coordinates */ /* TODO: fix the alpha for that boundary cases. Using fabs() could solve? */ if ( ( x1 < 0 || x1 > st->width ) || ( x2 < 0 || x2 > st->width ) || ( y1 < 0 || y1 > st->height ) || ( y2 < 0 || y2 > st->height ) ) return; if ( fabs(dx) > fabs(dy) ) { if ( x2 < x1 ) { swap(x1, x2); swap(y1, y2); } gradient = dy / dx; xend = round_(x1); yend = y1 + gradient*(xend - x1); xgap = rfpart_(x1 + 0.5); xpxl1 = xend; ypxl1 = ipart_(yend); plot_(xpxl1, ypxl1, rfpart_(yend)*xgap); plot_(xpxl1, ypxl1+1, fpart_(yend)*xgap); intery = yend + gradient; xend = round_(x2); yend = y2 + gradient*(xend - x2); xgap = fpart_(x2+0.5); xpxl2 = xend; ypxl2 = ipart_(yend); plot_(xpxl2, ypxl2, rfpart_(yend) * xgap); plot_(xpxl2, ypxl2 + 1, fpart_(yend) * xgap); /*if ( rfpart_(yend) * xgap < 0 || fpart_(yend) * xgap < 0) printf("%f %f\n", rfpart_(yend) * xgap, fpart_(yend) * xgap);*/ for(x=xpxl1+1; x <= (xpxl2-1); x++) { plot_(x, ipart_(intery), rfpart_(intery)); plot_(x, ipart_(intery) + 1, fpart_(intery)); /*if ( rfpart_(intery) < 0 || fpart_(intery) < 0) printf("%f %f\n", rfpart_(intery), fpart_(intery));*/ intery += gradient; } } else { if ( y2 < y1 ) { swap(x1, x2); swap(y1, y2); } gradient = dx / dy; yend = round_(y1); xend = x1 + gradient*(yend - y1); ygap = rfpart_(y1 + 0.5); ypxl1 = yend; xpxl1 = ipart_(xend); plot_(xpxl1, ypxl1, rfpart_(xend)*ygap); plot_(xpxl1, ypxl1+1, fpart_(xend)*ygap); interx = xend + gradient; yend = round_(y2); xend = x2 + gradient*(yend - y2); ygap = fpart_(y2+0.5); ypxl2 = yend; xpxl2 = ipart_(xend); plot_(xpxl2, ypxl2, rfpart_(xend) * ygap); plot_(xpxl2, ypxl2 + 1, fpart_(xend) * ygap); for(y=ypxl1+1; y <= (ypxl2-1); y++) { plot_(ipart_(interx), y, rfpart_(interx)); plot_(ipart_(interx) + 1, y, fpart_(interx)); interx += gradient; } } } #undef plot_ #undef ipart_ #undef fpart_ #undef round_ #undef rfpart_ #else static void draw_line ( struct state* st, int x0, int y0, int x1, int y1, int color, float a ) { register int steep; register int deltax; register int deltay; register int error; register int ystep; register int y; register int x; steep = abs ( y1 - y0 ) > abs ( x1 - x0 ); if ( steep ) { swap(x0,y0); swap(x1,y1); } if ( x0 > x1 ) { swap(x0,x1); swap(y0,y1); } deltax = x1 - x0; deltay = abs(y1-y0); error = 0; y = y0; ystep = y0 < y1 ? 1 : -1; if ( a > 1.0f ) a = 1.0f; for ( x = x0; x < x1; x++ ) { if ( steep ) { if ( ( y >= 0 && y < st->width ) && ( x >= 0 && x < st->height ) ) draw_point( st, y, x, color, a ); } else { if ( ( x >= 0 && x < st->width ) && ( y >= 0 && y < st->height ) ) draw_point( st, x, y, color, a ); } error += deltay; if ( ( error << 1 ) > deltax ) { y += ystep; error -= deltax; } } } #endif static void create_buffers ( struct state* st, Display* display, Screen* screen, Window window, GC gc ) { XWindowAttributes xgwa; XGetWindowAttributes( display, window, &xgwa ); /* Initialize the pixmap */ if ( st->buf != NULL ) XFreePixmap( display, st->pix ); XSetForeground( display, gc, st->colors[BLACK] ); st->pix = XCreatePixmap( display, window, st->width, st->height, xgwa.depth ); XFillRectangle( display, st->pix, gc, 0, 0, st->width, st->height); /* Initialize the bitmap */ if ( st->buf != NULL ) XDestroyImage ( st->buf ); st->buf = XGetImage( display, st->pix, 0, 0, st->width, st->height, visual_depth(screen, st->visual), ZPixmap ); st->buffer = (pixel_t*) calloc(sizeof(pixel_t), st->width * st->height); /*int i; for ( i = 0; i < st->width * st->height; ++i ) st->buffer[i] = st->colors[BLACK];*/ } static void init_particle ( particle_t* p, float dx, float dy, float direction, int color, int max_age ) { float max_initial_velocity = 2.0f; p->x = -dx; p->y = -dy; p->xx = 0; p->yy = 0; p->vx = max_initial_velocity * cos(direction); p->vy = max_initial_velocity * sin(direction); p->age = random() % max_age; p->color = color; } static void clamp ( int* value, int l, int h ) { if ( *value < l ) *value = l; if ( *value > h ) *value = h; } static pixel_t next_color ( struct state* st, pixel_t current ) { int r=0, g=0, b=0; point2rgb(st->depth, current, &r, &g, &b); r += random() % 5 - 2; g += random() % 5 - 2; b += random() % 5 - 2; clamp(&r, 0, 255); clamp(&g, 0, 255); clamp(&b, 0, 255); return rgb2point( st->depth, r, g, b ); } static void create_particles ( struct state* st ) { int i; float emitx, emity; float direction; for ( i = 0; i < st->particles_number; i++ ) { emitx = ( st->ring_radius * sinf( M_PI * 2 * ( (float) i / st->particles_number ) ) ); emity = ( st->ring_radius * cosf( M_PI * 2 * ( (float) i / st->particles_number ) ) ); direction = (M_PI * i) / st->particles_number; if ( st->epoch == WHITE && st->color ) st->colors[WHITE] = next_color(st, st->colors[WHITE]); init_particle(st->particles + i, emitx, emity, direction, st->colors[WHITE], st->max_age); } } /* randomly move one particle and draw it */ static void move ( particle_t* p, struct state * st ) { int w = st->width / 2; int h = st->height / 2; float max_dv = 1.0f; p->xx = p->x; p->yy = p->y; p->x += p->vx; p->y += p->vy; p->vx += frand1() * st->curliness * max_dv; p->vy += frand1() * st->curliness * max_dv; #if ANTIALIAS draw_line_antialias( st, w+p->xx, h+p->yy, w+p->x, h+p->y, p->color, 0.15 ); draw_line_antialias( st, w-p->xx, h+p->yy, w-p->x, h+p->y, p->color, 0.15 ); #else draw_line( st, w+p->xx, h+p->yy, w+p->x, h+p->y, p->color, 0.15 ); draw_line( st, w-p->xx, h+p->yy, w-p->x, h+p->y, p->color, 0.15 ); #endif p->age++; /* if this is too old, die and reborn */ if ( p->age > st->max_age ) { float dir = frand1() * 2 * M_PI; p->x = st->ring_radius * sin(dir); p->y = st->ring_radius * cos(dir); p->xx = p->yy = p->vx = p->vy = 0; p->age = 0; if ( st->epoch == WHITE && st->color ) st->colors[WHITE] = next_color(st, st->colors[WHITE] ); p->color = st->colors[st->epoch]; } } /* Initialize Everything */ static void* binaryring_init ( Display* display, Window window ) { XWindowAttributes xgwa; struct state *st = ( struct state* ) calloc ( 1, sizeof( *st ) ); XGetWindowAttributes( display, window, &xgwa ); st->epoch = WHITE; st->display = display; st->window = window; st->particles_number = (get_integer_resource(st->display, "particles_number", "Integer")); st->growth_delay = (get_integer_resource(st->display, "growth_delay", "Integer")); st->ring_radius = (get_integer_resource(st->display, "ring_radius", "Integer")); st->max_age = (get_integer_resource(st->display, "max_age", "Integer")); st->color = get_boolean_resource(st->display, "color", "Boolean"); st->height = xgwa.height; st->width = xgwa.width; st->visual = xgwa.visual; st->curliness = 0.5; st->depth = visual_depth(xgwa.screen, st->visual); st->colors[0] = rgb2point(st->depth, 0, 0, 0); st->colors[1] = rgb2point(st->depth, 255, 255, 255); /*describe_visual (stdout, xgwa.screen, xgwa.visual, False);*/ st->particles = malloc (st->particles_number * sizeof( particle_t ) ); create_particles ( st ); st->gc = XCreateGC( st->display, st->window, 0, &st->gcv ); create_buffers ( st, display, xgwa.screen, window, st->gc ); return st; } static unsigned long binaryring_draw ( Display* display, Window win, void *closure ) { struct state *st = (struct state *) closure; int i; for ( i = 0; i < st->particles_number; i++ ) move( &(st->particles[i]), st ); /* draw the XImage in the Pixmap and the put the Pixmap on the screen */ XPutImage( display, st->pix, st->gc, st->buf, 0, 0, 0, 0, st->width, st->height); XCopyArea( display, st->pix, win, st->gc, 0, 0, st->width, st->height, 0, 0 ); /* randomly switch ageColor periods */ if ( random() % 10000 > 9950 ) st->epoch = (st->epoch == WHITE) ? BLACK : WHITE; return st->growth_delay; } static void binaryring_reshape ( Display* display, Window win, void *closure, unsigned int w, unsigned int h ) { struct state *st = (struct state *) closure; XWindowAttributes tmp; XGetWindowAttributes(display, win, &tmp); if ( tmp.height != st->height || tmp.width != st->width ) { st->height = tmp.height; st->width = tmp.width; st->epoch = WHITE; create_particles ( st ); create_buffers ( st, display, tmp.screen, win, st->gc ); } } /* if someone press a key switch the color */ static Bool binaryring_event ( Display* display, Window win, void *closure, XEvent* event ) { struct state *st = (struct state *) closure; if ( (*event).xany.type == KeyPress ) { st->epoch = (st->epoch == WHITE) ? BLACK : WHITE; } return False; } /* delete everything */ static void binaryring_free ( Display* display, Window win, void *closure ) { struct state *st = (struct state *) closure; XWindowAttributes tmp; XGetWindowAttributes(display, win, &tmp); free( st->buffer ); free( st->particles ); free ( st ); } /* Default resources of the program */ static const char* binaryring_defaults [] = { ".background: black", ".foreground: white", "*growth_delay: 10000", "*particles_number: 5000", "*ring_radius: 40", "*max_age: 400", "*color: True", "*ignoreRotation: True", 0 }; static XrmOptionDescRec binaryring_options [] = { { "-particles-number", ".particles_number", XrmoptionSepArg, 0 }, { "-growth-delay", ".growth_delay", XrmoptionSepArg, 0 }, { "-ring-radius", ".ring_radius", XrmoptionSepArg, 0 }, { "-max-age", ".max_age", XrmoptionSepArg, 0 }, { "-color", ".color", XrmoptionNoArg, "True" }, { "-no-color", ".color", XrmoptionNoArg, "False" }, { 0, 0, 0, 0} }; XSCREENSAVER_MODULE("BinaryRing", binaryring) xscreensaver-5.36/hacks/webcollage-cocoa.m000644 000767 000024 00000024013 12701612217 020572 0ustar00jwzstaff000000 000000 /* xscreensaver, Copyright (c) 2006-2015 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 is the Cocoa shim for webcollage. It runs the webcollage perl script (in "WebCollage.saver/Contents/Resources/webcollage") at the end of a pipe; each time that script updates the image file on disk it prints the file name, and this program loads and displays that image. The script uses "WebCollage.saver/Contents/Resources/webcollage-helper" to paste the images together in the usual way. */ #include #include #include #include #import #include "screenhack.h" typedef struct { Display *dpy; Window window; XWindowAttributes xgwa; int delay; pid_t pid; FILE *pipe_fd; XtInputId pipe_id; Bool verbose_p; } state; /* Violating the cardinal rule of "don't use global variables", but we need to get at these from the atexit() handler, and the callback doesn't take a closure arg. Because apparently those hadn't been invented yet in the seventies. */ static state *all_states[50] = { 0, }; static void webcollage_atexit (void); static void signal_handler (int sig); static void subproc_cb (XtPointer closure, int *source, XtInputId *id) { /* state *st = (state *) closure; */ /* st->input_available_p = True; */ } /* whether there is data available to be read on the file descriptor */ static int input_available_p (int fd) { struct timeval tv = { 0, }; fd_set fds; # if 0 /* This breaks on BSD, which uses bzero() in the definition of FD_ZERO */ FD_ZERO (&fds); # else memset (&fds, 0, sizeof(fds)); # endif FD_SET (fd, &fds); return select (fd+1, &fds, NULL, NULL, &tv); } static void display_image (Display *dpy, Window window, state *st, const char *file) { NSImage *image = [[NSImage alloc] initWithContentsOfFile: [NSString stringWithCString: file encoding: NSUTF8StringEncoding]]; if (! image) { fprintf (stderr, "webcollage: failed to load \"%s\"\n", file); return; } CGFloat w = [image size].width; CGFloat h = [image size].height; if (w <= 1 || h <= 1) { fprintf (stderr, "webcollage: unparsable image \"%s\"\n", file); [image release]; return; } jwxyz_draw_NSImage_or_CGImage (dpy, window, True, image, 0, 0); [image release]; } static void open_pipe (state *st) { /* This mess is because popen() doesn't give us the pid. */ pid_t forked; int fds [2]; int in, out; char buf[1024]; char *av[20]; int ac = 0; int timeout = get_integer_resource (st->dpy, "timeout", "Timeout"); int delay = get_integer_resource (st->dpy, "delay", "Delay"); float opacity = get_float_resource (st->dpy, "opacity", "Opacity"); char *filter = get_string_resource (st->dpy, "filter", "Filter"); char *filter2 = get_string_resource (st->dpy, "filter2", "Filter2"); av[ac++] = strdup ("webcollage"); av[ac++] = strdup ("-cocoa"); av[ac++] = strdup ("-size"); sprintf (buf, "%dx%d", st->xgwa.width, st->xgwa.height); av[ac++] = strdup (buf); av[ac++] = strdup ("-timeout"); sprintf (buf, "%d", timeout); av[ac++] = strdup (buf); av[ac++] = strdup ("-delay"); sprintf (buf, "%d", delay); av[ac++] = strdup (buf); av[ac++] = strdup ("-opacity"); sprintf (buf, "%.2f", opacity); av[ac++] = strdup (buf); if (filter && *filter) { av[ac++] = strdup ("-filter"); av[ac++] = filter; } if (filter2 && *filter2) { av[ac++] = strdup ("-filter2"); av[ac++] = filter2; } av[ac] = 0; if (st->verbose_p) { fprintf (stderr, "webcollage: launching:"); int i; for (i = 0; i < ac; i++) fprintf (stderr, " %s", av[i]); fprintf (stderr, "\n"); } if (pipe (fds)) { perror ("webcollage: error creating pipe"); exit (1); } in = fds [0]; out = fds [1]; switch ((int) (forked = fork ())) { case -1: { perror ("webcollage: couldn't fork"); exit (1); } case 0: { int stdout_fd = 1; close (in); /* don't need this one */ if (dup2 (out, stdout_fd) < 0) /* pipe stdout */ { perror ("could not dup() a new stdout:"); exit (1); } execvp (av[0], av); /* shouldn't return. */ if (errno != ENOENT) { /* Ignore "no such file or directory" errors, unless verbose. Issue all other exec errors, though. */ sprintf (buf, "webcollage: %s", av[0]); perror (buf); } exit (1); /* exits fork */ break; } default: { st->pipe_fd = fdopen (in, "r"); close (out); /* don't need this one */ } } while (ac > 0) free (av[--ac]); if (! st->pipe_fd) abort(); st->pid = forked; st->pipe_id = XtAppAddInput (XtDisplayToApplicationContext (st->dpy), fileno (st->pipe_fd), (XtPointer) (XtInputReadMask | XtInputExceptMask), subproc_cb, (XtPointer) st); if (st->verbose_p) fprintf (stderr, "webcollage: subprocess pid: %d\n", st->pid); } static void * webcollage_init (Display *dpy, Window window) { state *st = (state *) calloc (1, sizeof(*st)); int i; st->dpy = dpy; st->window = window; XGetWindowAttributes (st->dpy, st->window, &st->xgwa); st->delay = 1000000; /* check once a second */ // Log to syslog when FPS is turned on. st->verbose_p = get_boolean_resource (dpy, "doFPS", "DoFPS"); static int done_once = 0; if (! done_once) { done_once = 1; if (atexit (webcollage_atexit)) { // catch calls to exit() perror ("webcollage: atexit"); exit (-1); } int sigs[] = { SIGHUP, SIGINT, SIGQUIT, SIGILL, SIGTRAP, SIGABRT, SIGFPE, SIGBUS, SIGSEGV, SIGSYS, /*SIGPIPE,*/ SIGALRM, SIGTERM }; for (i = 0; i < sizeof(sigs)/sizeof(*sigs); i++) { if (signal (sigs[i], signal_handler)) { perror ("webcollage: signal"); //exit (1); } } } open_pipe (st); i = 0; while (all_states[i]) i++; all_states[i] = st; return st; } static unsigned long webcollage_draw (Display *dpy, Window window, void *closure) { state *st = (state *) closure; if (! st->pipe_fd) exit (1); if (! input_available_p (fileno (st->pipe_fd))) return st->delay; char buf[10240]; int n = read (fileno (st->pipe_fd), (void *) buf, sizeof(buf) - 1); if (n <= 0) { XtRemoveInput (st->pipe_id); st->pipe_id = 0; // #### sometimes hangs -- pclose (st->pipe_fd); st->pipe_fd = 0; if (st->verbose_p) fprintf (stderr, "webcollage: subprocess has exited: bailing.\n"); return st->delay * 10; } buf[n] = 0; char *s = strchr (buf, '\n'); if (s) *s = 0; const char *target = "COCOA LOAD "; if (!strncmp (target, buf, strlen(target))) { const char *file = buf + strlen(target); display_image (dpy, window, st, file); } return st->delay; } static void webcollage_reshape (Display *dpy, Window window, void *closure, unsigned int w, unsigned int h) { } static Bool webcollage_event (Display *dpy, Window window, void *closure, XEvent *event) { return False; } static void webcollage_atexit (void) { int i = 0; if (all_states[0] && all_states[0]->verbose_p) fprintf (stderr, "webcollage: atexit handler\n"); while (all_states[i]) { state *st = all_states[i]; if (st->pid) { if (st->verbose_p) fprintf (stderr, "webcollage: kill %d\n", st->pid); if (kill (st->pid, SIGTERM) < 0) { fprintf (stderr, "webcollage: kill (%d, TERM): ", st->pid); perror ("webcollage: kill"); } st->pid = 0; } all_states[i] = 0; i++; } } static void signal_handler (int sig) { if (all_states[0] && all_states[0]->verbose_p) fprintf (stderr, "webcollage: signal %d\n", sig); webcollage_atexit (); exit (sig); } /* This is important because OSX doesn't actually kill the screen savers! It just sends them a [ScreenSaverView stopAnimation] method. Were they to actually exit, the resultant SIGPIPE should reap the children, but instead, we need to do it here. On top of that, there's an atexit() handler because otherwise the inferior perl script process was failing to die when SaverTester or System Preferences exited. I don't pretend to understand. It still fails to clean up when I hit the stop button in Xcode. WTF. */ static void webcollage_free (Display *dpy, Window window, void *closure) { state *st = (state *) closure; if (st->verbose_p) fprintf (stderr, "webcollage: free cb\n"); // Dammit dammit dammit! Why won't this shit die when we pclose it! // killpg (0, SIGTERM); webcollage_atexit(); if (st->pipe_id) XtRemoveInput (st->pipe_id); if (st->pipe_fd) fclose (st->pipe_fd); // Reap zombies. # undef sleep sleep (1); int wait_status = 0; waitpid (-1, &wait_status, 0); free (st); } static const char *webcollage_defaults [] = { ".background: black", ".foreground: white", "*timeout: 30", "*delay: 2", "*opacity: 0.85", "*filter: ", "*filter2: ", 0 }; static XrmOptionDescRec webcollage_options [] = { { "-timeout", ".timeout", XrmoptionSepArg, 0 }, { "-delay", ".delay", XrmoptionSepArg, 0 }, { "-opacity", ".opacity", XrmoptionSepArg, 0 }, { "-filter", ".filter", XrmoptionSepArg, 0 }, { "-filter2", ".filter2", XrmoptionSepArg, 0 }, { 0, 0, 0, 0 } }; XSCREENSAVER_MODULE ("WebCollage", webcollage) xscreensaver-5.36/hacks/webcollage-helper-cocoa.m000644 000767 000024 00000026340 12701612217 022054 0ustar00jwzstaff000000 000000 /* webcollage-helper-cocoa --- scales and pastes one image into another * xscreensaver, Copyright (c) 2002-2014 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 is the Cocoa implementation. See webcollage-helper.c for the GDK + JPEGlib implementation. */ #import #include #include #include #include #if MAC_OS_X_VERSION_MAX_ALLOWED <= MAC_OS_X_VERSION_10_4 typedef int NSInteger; typedef unsigned int NSUInteger; #endif char *progname; static int verbose_p = 0; static void write_image (NSImage *img, const char *file); /* NSImage can't load PPMs by default... */ static NSImage * load_ppm_image (const char *file) { FILE *in = fopen (file, "r"); if (! in) return 0; char buf[255]; char *s = fgets (buf, sizeof(buf)-1, in); /* P6 */ if (!s || !!strcmp (s, "P6\n")) return 0; s = fgets (buf, sizeof(buf)-1, in); /* W H */ if (!s) return 0; int w = 0, h = 0, d = 0; if (2 != sscanf (buf, " %d %d \n", &w, &h)) return 0; if (w <= 0 || h <= 0) return 0; s = fgets (buf, sizeof(buf)-1, in); /* 255 */ if (!s) return 0; if (1 != sscanf (buf, " %d \n", &d)) return 0; if (d != 255) return 0; int size = (w * (h+1) * 3); unsigned char *bits = malloc (size); if (!bits) return 0; int n = read (fileno (in), (void *) bits, size); /* body */ if (n < 20) return 0; fclose (in); NSBitmapImageRep *rep = [[NSBitmapImageRep alloc] initWithBitmapDataPlanes: &bits pixelsWide: w pixelsHigh: h bitsPerSample: 8 samplesPerPixel: 3 hasAlpha: NO isPlanar: NO colorSpaceName: NSDeviceRGBColorSpace bitmapFormat: NSAlphaFirstBitmapFormat bytesPerRow: w * 3 bitsPerPixel: 8 * 3]; NSImage *image = [[NSImage alloc] initWithSize: NSMakeSize (w, h)]; [image addRepresentation: rep]; [rep release]; // #### 'bits' is leaked... the NSImageRep doesn't free it when freed. return image; } static NSImage * load_image (const char *file) { NSImage *image = [[NSImage alloc] initWithContentsOfFile: [NSString stringWithCString: file encoding: NSUTF8StringEncoding]]; if (! image) image = load_ppm_image (file); if (! image) { fprintf (stderr, "%s: unable to load %s\n", progname, file); exit (1); } // [NSImage size] defaults to the image size in points instead of pixels, // so if an image file specified "pixels per inch" we can end up with // absurdly sized images. Set it back to 1:1 pixel:point. // NSImageRep *rep = [image.representations objectAtIndex:0]; image.size = NSMakeSize (rep.pixelsWide, rep.pixelsHigh); return image; } static void bevel_image (NSImage *img, int bevel_pct, int x, int y, int w, int h, double scale) { int small_size = (w > h ? h : w); int bevel_size = small_size * (bevel_pct / 100.0); bevel_size /= scale; /* Use a proportionally larger bevel size for especially small images. */ if (bevel_size < 20 && small_size > 40) bevel_size = 20; else if (bevel_size < 10 && small_size > 20) bevel_size = 10; else if (bevel_size < 5) /* too small to bother bevelling */ return; NSBitmapImageRep *rep = [[NSBitmapImageRep alloc] initWithBitmapDataPlanes: NULL pixelsWide: w pixelsHigh: h bitsPerSample: 8 samplesPerPixel: 4 hasAlpha: YES isPlanar: NO colorSpaceName: NSDeviceRGBColorSpace bitmapFormat: NSAlphaFirstBitmapFormat bytesPerRow: 0 bitsPerPixel: 0]; NSInteger xx, yy; double *ramp = (double *) malloc (sizeof(*ramp) * (bevel_size + 1)); if (!ramp) { fprintf (stderr, "%s: out of memory (%d)\n", progname, bevel_size); exit (1); } for (xx = 0; xx <= bevel_size; xx++) { # if 0 /* linear */ ramp[xx] = xx / (double) bevel_size; # else /* sinusoidal */ double p = (xx / (double) bevel_size); double s = sin (p * M_PI / 2); ramp[xx] = s; # endif } memset ([rep bitmapData], 0xFFFFFFFF, [rep bytesPerRow] * h); for (yy = 0; yy < h; yy++) { for (xx = 0; xx < w; xx++) { double rx, ry, r; if (xx < bevel_size) rx = ramp[xx]; else if (xx >= w - bevel_size) rx = ramp[w - xx - 1]; else rx = 1; if (yy < bevel_size) ry = ramp[yy]; else if (yy >= h - bevel_size) ry = ramp[h - yy - 1]; else ry = 1; r = rx * ry; if (r != 1) { NSUInteger p[4]; p[0] = 0xFF * r; p[1] = p[2] = p[3] = 0xFF; [rep setPixel:p atX:xx y:yy]; } } } free (ramp); NSImage *bevel_img = [[NSImage alloc] initWithData: [rep TIFFRepresentation]]; [img lockFocus]; y = [img size].height - (y + h); [bevel_img drawAtPoint: NSMakePoint (x, y) fromRect: NSMakeRect (0, 0, w, h) operation: NSCompositeDestinationIn /* Destination image wherever both images are opaque, transparent elsewhere. */ fraction: 1.0]; [img unlockFocus]; [rep release]; [bevel_img release]; if (verbose_p) fprintf (stderr, "%s: added %d%% bevel (%d px)\n", progname, bevel_pct, bevel_size); } static void paste (const char *paste_file, const char *base_file, double from_scale, double opacity, int bevel_pct, int from_x, int from_y, int to_x, int to_y, int w, int h) { NSImage *paste_img = load_image (paste_file); NSImage *base_img = load_image (base_file); int paste_w = [paste_img size].width; int paste_h = [paste_img size].height; int base_w = [base_img size].width; int base_h = [base_img size].height; if (verbose_p) { fprintf (stderr, "%s: loaded %s: %dx%d\n", progname, base_file, base_w, base_h); fprintf (stderr, "%s: loaded %s: %dx%d\n", progname, paste_file, paste_w, paste_h); } if (bevel_pct > 0 && paste_w > 5 && paste_h > 5) bevel_image (paste_img, bevel_pct, from_x, from_y, w, h, from_scale); int scaled_w = w * from_scale; int scaled_h = h * from_scale; from_y = paste_h - (from_y + h); // Cocoa flipped coordinate system to_y = base_h - (to_y + scaled_h); [base_img lockFocus]; [paste_img drawInRect: NSMakeRect (to_x, to_y, scaled_w, scaled_h) fromRect: NSMakeRect (from_x, from_y, w, h) operation: NSCompositeSourceOver fraction: opacity]; [base_img unlockFocus]; if (verbose_p) fprintf (stderr, "%s: pasted %dx%d (%dx%d) from %d,%d to %d,%d\n", progname, w, h, scaled_w, scaled_h, from_x, from_y, to_x, to_y); [paste_img release]; write_image (base_img, base_file); [base_img release]; } static void write_image (NSImage *img, const char *file) { float jpeg_quality = .85; // Load the NSImage's contents into an NSBitmapImageRep: NSBitmapImageRep *bit_rep = [NSBitmapImageRep imageRepWithData:[img TIFFRepresentation]]; // Write the bitmapImageRep to a JPEG file. if (bit_rep == nil) { fprintf (stderr, "%s: error converting image?\n", progname); exit (1); } if (verbose_p) fprintf (stderr, "%s: writing %s (q=%d%%) ", progname, file, (int) (jpeg_quality * 100)); NSDictionary *props = [NSDictionary dictionaryWithObject: [NSNumber numberWithFloat:jpeg_quality] forKey:NSImageCompressionFactor]; NSData *jpeg_data = [bit_rep representationUsingType:NSJPEGFileType properties:props]; [jpeg_data writeToFile: [NSString stringWithCString:file encoding:NSISOLatin1StringEncoding] atomically:YES]; if (verbose_p) { struct stat st; if (stat (file, &st)) { char buf[255]; sprintf (buf, "%.100s: %.100s", progname, file); perror (buf); exit (1); } fprintf (stderr, " %luK\n", ((unsigned long) st.st_size + 1023) / 1024); } } static void usage (void) { fprintf (stderr, "usage: %s [-v] paste-file base-file\n" "\t from-scale opacity\n" "\t from-x from-y to-x to-y w h\n" "\n" "\t Pastes paste-file into base-file.\n" "\t base-file will be overwritten (with JPEG data.)\n" "\t scaling is applied first: coordinates apply to scaled image.\n", progname); exit (1); } int main (int argc, char **argv) { int i; char *paste_file, *base_file, *s, dummy; double from_scale, opacity; int from_x, from_y, to_x, to_y, w, h, bevel_pct; i = 0; progname = argv[i++]; s = strrchr (progname, '/'); if (s) progname = s+1; if (argc != 11 && argc != 12) usage(); if (!strcmp(argv[i], "-v")) verbose_p++, i++; paste_file = argv[i++]; base_file = argv[i++]; if (*paste_file == '-') usage(); if (*base_file == '-') usage(); s = argv[i++]; if (1 != sscanf (s, " %lf %c", &from_scale, &dummy)) usage(); if (from_scale <= 0 || from_scale > 100) usage(); s = argv[i++]; if (1 != sscanf (s, " %lf %c", &opacity, &dummy)) usage(); if (opacity <= 0 || opacity > 1) usage(); s = argv[i++]; if (1 != sscanf (s, " %d %c", &from_x, &dummy)) usage(); s = argv[i++]; if (1 != sscanf (s, " %d %c", &from_y, &dummy)) usage(); s = argv[i++]; if (1 != sscanf (s, " %d %c", &to_x, &dummy)) usage(); s = argv[i++]; if (1 != sscanf (s, " %d %c", &to_y, &dummy)) usage(); s = argv[i++]; if (1 != sscanf (s, " %d %c", &w, &dummy)) usage(); s = argv[i]; if (1 != sscanf (s, " %d %c", &h, &dummy)) usage(); bevel_pct = 10; /* #### */ if (w < 0) usage(); if (h < 0) usage(); if (w == 0 || h == 0 || w > 10240 || h > 10240) { fprintf (stderr, "%s: absurd size: %d x %d\n", progname, w, h); exit (1); } // Much of Cocoa needs one of these to be available. NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; //Need an NSApp instance to make [NSImage TIFFRepresentation] work NSApp = [NSApplication sharedApplication]; [NSApp autorelease]; paste (paste_file, base_file, from_scale, opacity, bevel_pct, from_x, from_y, to_x, to_y, w, h); [pool release]; exit (0); } xscreensaver-5.36/hacks/testx11.c000664 000767 000024 00000065352 12717747763 016746 0ustar00jwzstaff000000 000000 /* testx11.c, Copyright (c) 2015-2016 Dave Odell * * 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 is a test for X11 drawing primitives for the non-X11 ports of * XScreenSaver. It shouldn't normally be installed with the other screenhacks. * * Almost no error checking in here. This is intentional. */ #include "screenhack.h" #include "glx/rotator.h" #include #include #ifndef HAVE_JWXYZ # define jwxyz_XSetAntiAliasing(dpy, gc, p) #endif #ifndef jwxyz_assert_display # define jwxyz_assert_display(dpy) #endif #define countof(a) (sizeof(a) / sizeof(*(a))) static const char *testx11_defaults [] = { ".background: #a020f0", /* purple */ ".foreground: white", #ifdef HAVE_MOBILE "*ignoreRotation: True", #endif 0 }; static XrmOptionDescRec testx11_options [] = { { 0, 0, 0, 0 } }; enum { mode_welcome, mode_primitives, mode_images, mode_copy, mode_preserve, mode_count }; struct testx11 { Display *dpy; Window win; XWindowAttributes xgwa; # ifndef HAVE_JWXYZ Pixmap backbuffer; # endif unsigned mode; /* Pixels from XAllocPixel. */ unsigned long rgb[3], salmon, magenta, gray50, dark_slate_gray1, cyan; unsigned frame; Bool anti_alias_p; /* These X11 objects aren't altered after creation, except for: - copy_gc and thick_line_gc get anti-aliasing toggled. - xor_gc's clip mask (if it's turned on) always covers the entire window. */ GC copy_gc, mono_gc, thick_line_gc, xor_gc, graph_gc; Pixmap clip_mask_tile; /* Backdrop stuff, naturally. */ GC backdrop_black_gc; Pixmap backdrop_tile, backdrop_scratch; XColor backdrop_colors[64]; int backdrop_ncolors; /* The following items may be modified by various test modes. */ Pixmap primitives_mini_pix; GC images_point_gc; Pixmap copy_pix64; Pixmap preserve[2]; rotator *rot; }; static void abort_no_mem (void) { fprintf(stderr, "%s: %s\n", progname, strerror(ENOMEM)); abort(); } static void check_no_mem (void *ptr) { if(!ptr) abort_no_mem(); } static unsigned long alloc_color (struct testx11 *st, unsigned short r, unsigned short g, unsigned short b) { XColor color; color.red = r; color.green = g; color.blue = b; color.flags = DoRed | DoGreen | DoBlue; XAllocColor (st->dpy, st->xgwa.colormap, &color); return color.pixel; } static void create_backbuffer(struct testx11 *st) { # ifndef HAVE_JWXYZ st->backbuffer = XCreatePixmap (st->dpy, st->win, st->xgwa.width, st->xgwa.height, st->xgwa.depth); # endif } static Bool toggle_antialiasing (struct testx11 *st) { st->anti_alias_p ^= True; jwxyz_XSetAntiAliasing (st->dpy, st->copy_gc, st->anti_alias_p); jwxyz_XSetAntiAliasing (st->dpy, st->thick_line_gc, st->anti_alias_p); return True; } static void primitives_mini_rect(struct testx11 *st, Drawable t, int x, int y) { XFillRectangle(st->dpy, t, st->copy_gc, x, y, 2, 2); } static void images_copy_test (Display *dpy, Drawable src, Drawable dst, GC gc, int src_y, int dst_x, int dst_y, unsigned long cells) { XCopyArea(dpy, src, dst, gc, 0, src_y, 3, 2, dst_x, dst_y); { XImage *image = XGetImage(dpy, src, 0, src_y, 3, 2, cells, ZPixmap); XPutImage(dpy, dst, gc, image, 0, 0, dst_x, dst_y + 2, 3, 2); XDestroyImage(image); } } static void images_pattern (struct testx11 *st, Drawable d, unsigned y) { unsigned x; for (x = 0; x != 3; ++x) { XSetForeground(st->dpy, st->images_point_gc, st->rgb[x]); XDrawPoint(st->dpy, d, st->images_point_gc, x, y); XSetForeground(st->dpy, st->images_point_gc, st->rgb[2 - x]); XFillRectangle(st->dpy, d, st->images_point_gc, x, y + 1, 1, 1); } images_copy_test (st->dpy, d, d, st->images_point_gc, y, 0, y + 2, st->rgb[0] | st->rgb[1] | st->rgb[2]); } static const unsigned tile_size = 16; static const unsigned tile_count = 8; static const unsigned preserve_size = 128; static void make_clip_mask (struct testx11 *st) { /* Activate this for extra Fun! */ # if 0 /* This is kind of slow, but that's OK, because this only happens on int or during a resize. */ unsigned w = st->xgwa.width, h = st->xgwa.height; unsigned x, y; Pixmap mask = XCreatePixmap (st->dpy, st->clip_mask_tile, w, h, 1); for (y = 0; y < h; y += 8) { for (x = 0; x < w; x += 8) { XCopyArea (st->dpy, st->clip_mask_tile, mask, st->mono_gc, 0, 0, 8, 8, x, y); } } XSetClipMask (st->dpy, st->xor_gc, mask); XFreePixmap (st->dpy, mask); # endif } static void * testx11_init (Display *dpy, Window win) { static const char backdrop_pattern[] = { '\xff', '\x00', '\xfe', '\x01', '\xfc', '\x03', '\xf8', '\x07', /* Zig */ '\xf0', '\x0f', '\xf8', '\x07', '\xfc', '\x03', '\xfe', '\x01', /* Zag */ '\xff', '\x00', '\xfe', '\x01', '\xfc', '\x03', '\xf8', '\x07', /* etc. */ '\xf0', '\x0f', '\xf8', '\x07', '\xfc', '\x03', '\xfe', '\x01', '\xff', '\x00', '\xfe', '\x01', '\xfc', '\x03', '\xf8', '\x07', '\xf0', '\x0f', '\xf8', '\x07', '\xfc', '\x03', '\xfe', '\x01', '\xff', '\x00', '\xfe', '\x01', '\xfc', '\x03', '\xf8', '\x07', '\xf0', '\x0f', '\xf8', '\x07', '\xfc', '\x03', '\xfe', '\x01', }; static const char clip_bits[] = { '\x33', '\x33', '\xcc', '\xcc', '\x33', '\x33', '\xcc', '\xcc' }; struct testx11 *st = (struct testx11 *) malloc (sizeof(*st)); XGCValues gcv; check_no_mem (st); st->dpy = dpy; st->win = win; XGetWindowAttributes (dpy, win, &st->xgwa); create_backbuffer (st); st->rgb[0] = alloc_color (st, 0xffff, 0x0000, 0x0000); st->rgb[1] = alloc_color (st, 0x0000, 0xffff, 0x0000); st->rgb[2] = alloc_color (st, 0x0000, 0x0000, 0xffff); st->salmon = alloc_color (st, 0xffff, 0x7fff, 0x7fff); st->magenta = alloc_color (st, 0xffff, 0x0000, 0xffff); st->gray50 = alloc_color (st, 0x8000, 0x8000, 0x8000); st->dark_slate_gray1 = alloc_color (st, 0x8000, 0xffff, 0xffff); st->cyan = alloc_color (st, 0x0000, 0xffff, 0xffff); st->backdrop_tile = XCreatePixmapFromBitmapData (dpy, win, (char *) backdrop_pattern, tile_size, tile_size * 2, 1, 0, 1); st->clip_mask_tile = XCreatePixmapFromBitmapData (dpy, win, (char *) clip_bits, 8, 8, 1, 0, 1); { unsigned s = tile_size * tile_count; st->backdrop_scratch = XCreatePixmap (dpy, win, s, s, st->xgwa.depth); } st->backdrop_ncolors = countof (st->backdrop_colors); make_color_loop (st->xgwa.screen, st->xgwa.visual, st->xgwa.colormap, 180, 1, 0.5, 210, 1, 0.5, 240, 1, 0.5, st->backdrop_colors, &st->backdrop_ncolors, True, NULL); st->frame = 0; # ifdef HAVE_ANDROID st->mode = mode_primitives; # else st->mode = mode_welcome; # endif st->anti_alias_p = False; gcv.function = GXcopy; gcv.foreground = st->cyan; gcv.background = st->magenta; gcv.line_width = 0; gcv.cap_style = CapRound; /* TODO: Real X11 uses fixed by default. */ gcv.font = XLoadFont (dpy, "fixed"); st->copy_gc = XCreateGC (dpy, win, GCFunction | GCForeground | GCBackground | GCLineWidth | GCCapStyle | GCFont, &gcv); gcv.foreground = BlackPixelOfScreen (st->xgwa.screen); st->backdrop_black_gc = XCreateGC (dpy, win, GCForeground, &gcv); gcv.foreground = alloc_color (st, 0x8000, 0x4000, 0xffff); gcv.line_width = 8; gcv.cap_style = CapProjecting; st->thick_line_gc = XCreateGC (dpy, win, GCForeground | GCLineWidth | GCCapStyle, &gcv); gcv.function = GXxor; st->xor_gc = XCreateGC (dpy, win, GCFunction, &gcv); st->images_point_gc = XCreateGC (dpy, win, 0, NULL); st->graph_gc = XCreateGC (dpy, win, 0, &gcv); st->mono_gc = XCreateGC (dpy, st->clip_mask_tile, 0, &gcv); st->copy_pix64 = XCreatePixmap(dpy, win, 64, 64, st->xgwa.depth); st->primitives_mini_pix = XCreatePixmap (dpy, win, 16, 16, st->xgwa.depth); { static const char text[] = "Welcome from testx11_init()."; XClearWindow (dpy, win); XDrawString (dpy, win, st->copy_gc, 16, 16, text, countof (text) - 1); } make_clip_mask (st); st->preserve[0] = XCreatePixmap(dpy, win, preserve_size, preserve_size, st->xgwa.depth); st->preserve[1] = XCreatePixmap(dpy, win, preserve_size, preserve_size, st->xgwa.depth); toggle_antialiasing (st); jwxyz_assert_display (dpy); st->rot = make_rotator (2, 2, 2, 2, 0.01, False); return st; } static void backdrop (struct testx11 *st, Drawable t) { unsigned w = st->xgwa.width, h = st->xgwa.height; unsigned x, y; for (y = 0; y != tile_count; ++y) { const float s0 = 2 * M_PI / tile_count; float y_fac = sin ((y + st->frame / 16.0) * s0); for (x = 0; x != tile_count; ++x) { unsigned c = ((sin ((x + st->frame / 8.0) * s0) * y_fac) - 1) / 2 * st->backdrop_ncolors / 2; c = (c + st->frame) % st->backdrop_ncolors; XSetBackground (st->dpy, st->backdrop_black_gc, st->backdrop_colors[c].pixel); XCopyPlane (st->dpy, st->backdrop_tile, st->backdrop_scratch, st->backdrop_black_gc, 0, st->frame % tile_size, tile_size, tile_size, x * tile_size, y * tile_size, 1); } } /* XFillRectangle (st->dpy, t, st->backdrop_black_gc, 0, 0, w, h); */ for (y = 0; y < h; y += tile_count * tile_size) { for (x = 0; x < w; x += tile_count * tile_size) { XCopyArea (st->dpy, st->backdrop_scratch, t, st->copy_gc, 0, 0, tile_count * tile_size, tile_count * tile_size, x, y); } } } static const unsigned button_pad = 16; static const unsigned button_size = 64; static void testx11_graph_rotator (struct testx11 *st) { double x, y, z; int boxw = st->xgwa.width / 3; int boxh = (st->xgwa.height - (22 * 5)) / 4; int boxx = st->xgwa.width - boxw - 20; int boxy = st->xgwa.height - boxh - 20; /* position */ get_position (st->rot, &x, &y, &z, True); if (x < 0 || x >= 1 || y < 0 || y >= 1 || z < 0 || z >= 1) abort(); XSetForeground (st->dpy, st->graph_gc, st->dark_slate_gray1); XDrawRectangle (st->dpy, st->win, st->graph_gc, boxx-1, boxy-1, boxw+2, boxh+2); XCopyArea (st->dpy, st->win, st->win, st->graph_gc, boxx+1, boxy, boxw-1, boxh, boxx, boxy); XSetForeground (st->dpy, st->graph_gc, BlackPixelOfScreen (st->xgwa.screen)); XDrawLine (st->dpy, st->win, st->graph_gc, boxx + boxw - 1, boxy, boxx + boxw - 1, boxy + boxh); XSetForeground (st->dpy, st->graph_gc, st->salmon); XDrawPoint (st->dpy, st->win, st->graph_gc, boxx + boxw - 1, boxy + boxh - 1 - (int) (x * (boxh - 1))); XSetForeground (st->dpy, st->graph_gc, st->magenta); XDrawPoint (st->dpy, st->win, st->graph_gc, boxx + boxw - 1, boxy + boxh - 1 - (int) (y * (boxh - 1))); XSetForeground (st->dpy, st->graph_gc, st->gray50); XDrawPoint (st->dpy, st->win, st->graph_gc, boxx + boxw - 1, boxy + boxh - 1 - (int) (z * (boxh - 1))); /* spin */ get_rotation (st->rot, &x, &y, &z, True); if (x < 0 || x >= 1 || y < 0 || y >= 1 || z < 0 || z >= 1) abort(); /* put 0 in the middle */ x += 0.5; if (x > 1) x--; y += 0.5; if (y > 1) y--; z += 0.5; if (z > 1) z--; boxy -= boxh + 20; XSetForeground (st->dpy, st->graph_gc, st->dark_slate_gray1); XDrawRectangle (st->dpy, st->win, st->graph_gc, boxx-1, boxy-1, boxw+2, boxh+2); XCopyArea (st->dpy, st->win, st->win, st->graph_gc, boxx+1, boxy, boxw-1, boxh, boxx, boxy); XSetForeground (st->dpy, st->graph_gc, BlackPixelOfScreen (st->xgwa.screen)); XDrawLine (st->dpy, st->win, st->graph_gc, boxx + boxw - 1, boxy, boxx + boxw - 1, boxy + boxh); XSetForeground (st->dpy, st->graph_gc, st->magenta); XDrawPoint (st->dpy, st->win, st->graph_gc, boxx + boxw - 1, boxy + boxh - 1 - (int) (x * (boxh - 1))); boxy -= boxh + 20; XSetForeground (st->dpy, st->graph_gc, st->dark_slate_gray1); XDrawRectangle (st->dpy, st->win, st->graph_gc, boxx-1, boxy-1, boxw+2, boxh+2); XCopyArea (st->dpy, st->win, st->win, st->graph_gc, boxx+1, boxy, boxw-1, boxh, boxx, boxy); XSetForeground (st->dpy, st->graph_gc, BlackPixelOfScreen (st->xgwa.screen)); XDrawLine (st->dpy, st->win, st->graph_gc, boxx + boxw - 1, boxy, boxx + boxw - 1, boxy + boxh); XSetForeground (st->dpy, st->graph_gc, st->magenta); XDrawPoint (st->dpy, st->win, st->graph_gc, boxx + boxw - 1, boxy + boxh - 1 - (int) (y * (boxh - 1))); boxy -= boxh + 20; XSetForeground (st->dpy, st->graph_gc, st->dark_slate_gray1); XDrawRectangle (st->dpy, st->win, st->graph_gc, boxx-1, boxy-1, boxw+2, boxh+2); XCopyArea (st->dpy, st->win, st->win, st->graph_gc, boxx+1, boxy, boxw-1, boxh, boxx, boxy); XSetForeground (st->dpy, st->graph_gc, BlackPixelOfScreen (st->xgwa.screen)); XDrawLine (st->dpy, st->win, st->graph_gc, boxx + boxw - 1, boxy, boxx + boxw - 1, boxy + boxh); XSetForeground (st->dpy, st->graph_gc, st->magenta); XDrawPoint (st->dpy, st->win, st->graph_gc, boxx + boxw - 1, boxy + boxh - 1 - (int) (z * (boxh - 1))); } /* Draws a blinking box in what should be the upper left corner of the device, as physically oriented. The box is taller than it is wide. */ static void testx11_show_orientation (struct testx11 *st) { #ifdef HAVE_MOBILE int x, y; int w = st->xgwa.width; int h = st->xgwa.height; int ww = 15; int hh = ww*2; static int tick = 0; static int oo = -1; int o = (int) current_device_rotation (); if (o != oo) { // fprintf (stderr,"ROT %d -> %d\n", oo, o); oo = o; } switch (o) { case 0: case 360: x = 0; y = 0; w = ww; h = hh; break; case 90: case -270: x = 0; y = h-ww; w = hh; h = ww; break; case -90: case 270: x = w-hh; y = 0; w = hh; h = ww; break; case 180: case -180: x = w-ww; y = h-hh; w = ww; h = hh; break; default: return; } if (++tick > 20) tick = 0; XSetForeground (st->dpy, st->graph_gc, (tick > 10 ? WhitePixelOfScreen (st->xgwa.screen) : BlackPixelOfScreen (st->xgwa.screen))); XFillRectangle (st->dpy, st->win, st->graph_gc, x, y, w, h); #endif } static unsigned long testx11_draw (Display *dpy, Window win, void *st_raw) { struct testx11 *st = (struct testx11 *) st_raw; unsigned w = st->xgwa.width, h = st->xgwa.height; # ifdef HAVE_JWXYZ Drawable t = win; # else Drawable t = st->mode == mode_primitives ? st->backbuffer : win; # endif unsigned i; assert (dpy == st->dpy); assert (win == st->win); jwxyz_assert_display (dpy); XSetWindowBackground (dpy, win, st->gray50); switch (st->mode) { case mode_primitives: backdrop (st, t); XDrawPoint (dpy, t, st->thick_line_gc, 0, 0); XDrawPoint (dpy, t, st->thick_line_gc, 0, 1); XDrawPoint (dpy, t, st->thick_line_gc, 1, 0); XDrawPoint (dpy, t, st->thick_line_gc, 1, 1); primitives_mini_rect (st, t, 2, 0); primitives_mini_rect (st, t, 0, 2); primitives_mini_rect (st, t, 4, 2); primitives_mini_rect (st, t, 2, 4); primitives_mini_rect (st, t, 30, -2); primitives_mini_rect (st, t, 32, 0); primitives_mini_rect (st, t, 30, h - 2); primitives_mini_rect (st, t, 32, h); primitives_mini_rect (st, t, -2, 30); primitives_mini_rect (st, t, 0, 32); primitives_mini_rect (st, t, w - 2, 30); primitives_mini_rect (st, t, w, 32); primitives_mini_rect (st, t, w / 2 + 4, h / 2 + 4); XFillArc (dpy, t, st->copy_gc, 16, 16, 256, 256, 45 * 64, -135 * 64); /* XCopyArea(dpy, t, t, st->copy_gc, 48, 48, 128, 128, 64, 64); */ /* Center */ XDrawPoint (dpy, t, st->copy_gc, w / 2, h / 2); /* Top/bottom */ XDrawPoint (dpy, t, st->copy_gc, w / 2, 0); XDrawPoint (dpy, t, st->copy_gc, w / 2, h - 1); XDrawPoint (dpy, t, st->copy_gc, 16, -1); XDrawPoint (dpy, t, st->copy_gc, 17, 0); XDrawPoint (dpy, t, st->copy_gc, 15, h - 2); XDrawPoint (dpy, t, st->copy_gc, 16, h - 1); XDrawPoint (dpy, t, st->copy_gc, 17, h); { XPoint *points = malloc (sizeof(XPoint) * h); XSegment *lines = malloc (sizeof(XSegment) * h); XPoint *points2 = malloc (sizeof(XPoint) * h); for(i = 0; i != h; ++i) { points[i].x = 8 + (i & 1); points[i].y = i; lines[i].x1 = 48 + (i & 1) * 4; lines[i].y1 = i; lines[i].x2 = 50; lines[i].y2 = i; points2[i].x = 24 + (i & 1); points2[i].y = i; /* XFillRectangle(st->dpy, t, st->copy_gc, 24 + (i & 1), i, 1, 1); */ } XDrawPoints (dpy, t, st->copy_gc, points, h, CoordModeOrigin); XDrawSegments (dpy, t, st->copy_gc, lines, h); XDrawPoints (dpy, t, st->copy_gc, points2, h, CoordModeOrigin); free (lines); free (points); free (points2); } /* Left/right */ XDrawPoint (dpy, t, st->copy_gc, -1, 16); XDrawPoint (dpy, t, st->copy_gc, 0, 17); XDrawPoint (dpy, t, st->copy_gc, w - 1, 16); XDrawPoint (dpy, t, st->copy_gc, w, 17); { XPoint *points = malloc(sizeof(XPoint) * w); XSegment *lines = malloc(sizeof(XSegment) * w); XPoint *points2 = malloc(sizeof(XPoint) * w); for(i = 0; i != w; ++i) { points[i].x = i; points[i].y = 8 + (i & 1); lines[i].x1 = i; lines[i].y1 = 48 + (i & 1) * 4; lines[i].x2 = i; lines[i].y2 = 50; points2[i].x = i; points2[i].y = 24 + (i & 1); /* XFillRectangle(dpy, t, st->copy_gc, i, 24 + (i & 1), 1, 1); */ } XDrawPoints (dpy, t, st->copy_gc, points, w, CoordModeOrigin); XDrawSegments (dpy, t, st->copy_gc, lines, w); { /* Thick purple lines */ XSegment seg[2] = { {31, 31, 31, 31}, /* TODO: This should not be rotated in Cocoa. */ {42, 31, 42, 42} }; XDrawSegments (dpy, t, st->thick_line_gc, seg, 2); XDrawLine (dpy, t, st->thick_line_gc, 58, 43, 64, 43); XDrawLine (dpy, t, st->thick_line_gc, 73, 43, 80, 43); } XDrawPoints (dpy, t, st->copy_gc, points2, w, CoordModeOrigin); free (points); free (points2); free (lines); } XDrawLine (dpy, t, st->copy_gc, 54, 11, 72, 22); { XPoint vertices[] = {{5, 5}, {5, 8}, {8, 8}, {8, 5}}; XFillPolygon (dpy, t, st->copy_gc, vertices, 4, Convex, CoordModeOrigin); } { XDrawRectangle (dpy, t, st->copy_gc, 11, 11, 11, 11); XFillRectangle (dpy, t, st->copy_gc, 13, 13, 8, 8); } /* Several ~16 pixel boxes in a row. */ /* Box 0 */ { XDrawRectangle (dpy, t, st->copy_gc, 54, 54, 16, 16); XDrawRectangle (dpy, t, st->copy_gc, 55, 55, 14, 14); XDrawPoint (dpy, t, st->thick_line_gc, 56, 56); XDrawPoint (dpy, t, st->copy_gc, 57, 56); } /* Box 1 */ XCopyArea (dpy, t, t, st->copy_gc, 55, 55, 15, 15, 72, 55); /* Box 2 */ { XImage *image = XGetImage(st->dpy, t, 55, 55, 15, 15, 0xffffff, ZPixmap); XPutImage (dpy, t, st->copy_gc, image, 0, 0, 88, 55, 15, 15); XDestroyImage(image); } /* Box 3 */ { XCopyArea (dpy, t, st->primitives_mini_pix, st->copy_gc, 104, 55, 16, 16, 0, 0); /* XCopyArea (dpy, t, st->primitives_mini_pix, st->copy_gc, 105, 56, 14, 14, 1, 1); XCopyArea (dpy, t, st->primitives_mini_pix, st->copy_gc, 1, 1, 14, 14, 1, 1); */ /* This point gets hidden. */ XDrawPoint (dpy, t, st->copy_gc, 104 + 8, 55 + 8); XDrawPoint (dpy, st->primitives_mini_pix, st->copy_gc, 0, 0); XDrawPoint (dpy, st->primitives_mini_pix, st->copy_gc, 15, 15); XDrawRectangle (dpy, st->primitives_mini_pix, st->copy_gc, 1, 1, 13, 13); XCopyArea (dpy, st->primitives_mini_pix, t, st->copy_gc, 0, 0, 16, 16, 104, 55); } { XDrawLine (dpy, t, st->copy_gc, 11, 28, 22, 28); XDrawLine (dpy, t, st->copy_gc, 12, 27, 12, 46); XDrawLine (dpy, t, st->copy_gc, 14, 30, 14, 30); } XDrawArc (dpy, t, st->copy_gc, 27, 11, 19, 11, 0, 360 * 64); XDrawRectangle (dpy, t, st->copy_gc, 54, 73, 64, 64); XFillArc (dpy, t, st->copy_gc, 56, 75, 60, 60, 0, 360 * 64); /* XDrawArc (dpy, t, st->thick_line_gc, 56, 75, 60, 60, 0, 360 * 64); */ XClearArea (dpy, win, 121, 55, 16, 16, False); break; case mode_images: backdrop (st, t); /* if(w >= 9 && h >= 10) */ { #ifdef HAVE_ANDROID /* Draw below the status bar. */ const unsigned y = 64; #else const unsigned y = 0; #endif Screen *screen = st->xgwa.screen; Visual *visual = st->xgwa.visual; Pixmap pixmap = XCreatePixmap (dpy, t, 3, 10, visual_depth (screen, visual)); unsigned long cells = cells = st->rgb[0] | st->rgb[1] | st->rgb[2]; { XSetForeground (dpy, st->images_point_gc, st->salmon); XDrawPoint (dpy, t, st->images_point_gc, 0, h - 1); XDrawLine (dpy, t, st->images_point_gc, 0, y - 1, 8, y - 1); } images_pattern (st, t, y); images_pattern (st, pixmap, 0); /* Here's a good spot to verify that the pixmap contains the right colors at the top. */ images_copy_test (dpy, t, pixmap, st->copy_gc, y, 0, 6, cells); XCopyArea (dpy, pixmap, t, st->copy_gc, 0, 0, 3, 10, 3, y); { XImage *image = XGetImage (dpy, pixmap, 0, 0, 3, 10, cells, ZPixmap); XPutImage (dpy, t, st->copy_gc, image, 0, 0, 6, y, 3, 10); XDestroyImage (image); } XFreePixmap (dpy, pixmap); XSync (dpy, False); } break; case mode_copy: backdrop (st, win); /* X.org isn't making a whole lot of sense here. */ Bool use_copy = (st->frame / 20) & 1; { GC gc = use_copy ? st->copy_gc : st->xor_gc; XSetWindowBackground (dpy, t, st->magenta); XCopyArea (dpy, t, t, gc, -2, -2, 40, 40, 20, 20); if (!use_copy) XCopyArea (st->dpy, t, t, gc, -20, h - 20, 40, 40, 20, h - 60); XCopyArea (dpy, t, t, gc, w - 38, h - 38, 40, 40, w - 60, h - 60); XCopyArea (dpy, t, t, gc, w - 20, -20, 40, 40, w - 60, 20); XSetWindowBackground (dpy, t, st->gray50); XCopyArea (st->dpy, t, t, gc, -20, 64, 40, 40, 20, 64); XSetWindowBackground (dpy, t, st->dark_slate_gray1); XCopyArea (st->dpy, t, t, gc, -20, 112, 40, 40, 20, 112); } if (use_copy) { GC gc = st->copy_gc; XCopyArea (st->dpy, t, st->copy_pix64, gc, 0, h - 64, 64, 64, 0, 0); XSetForeground (st->dpy, st->xor_gc, st->rgb[1]); XSetBackground (st->dpy, st->xor_gc, st->cyan); /* XCopyArea (st->dpy, st->copy_pix64, st->copy_pix64, gc, 32, 32, 64, 64, 0, 0); XCopyArea (st->dpy, st->copy_pix64, t, gc, 0, 0, 64, 64, 4, h - 68); */ XCopyArea (st->dpy, st->copy_pix64, t, gc, 32, 32, 128, 64, 0, h - 64); } break; case mode_preserve: backdrop (st, t); if(!(st->frame % 10)) { const unsigned r = 16; unsigned n = st->frame / 10; unsigned m = n >> 1; XFillArc (st->dpy, st->preserve[n & 1], m & 1 ? st->copy_gc : st->thick_line_gc, NRAND(preserve_size) - r, NRAND(preserve_size) - r, r * 2, r * 2, 0, 360 * 64); } XCopyArea (st->dpy, st->preserve[0], t, st->copy_gc, 0, 0, preserve_size, preserve_size, 0, 0); XCopyArea (st->dpy, st->preserve[1], t, st->copy_gc, 0, 0, preserve_size, preserve_size, preserve_size, 0); XCopyArea (st->dpy, st->preserve[1], t, st->copy_gc, 0, 0, preserve_size, preserve_size, w - preserve_size / 2, preserve_size); break; } /* Mode toggle buttons */ for (i = 1; i != mode_count; ++i) { unsigned i0 = i - 1; char str[32]; XRectangle button_dims; button_dims.x = i0 * (button_pad + button_size) + button_pad; button_dims.y = h - button_pad - button_size; button_dims.width = button_size; button_dims.height = button_size; if (!st->mode) XFillRectangles (dpy, t, st->backdrop_black_gc, &button_dims, 1); XDrawRectangle (dpy, t, st->copy_gc, button_dims.x, button_dims.y, button_dims.width, button_dims.height); XDrawString (dpy, t, st->copy_gc, button_dims.x + button_size / 2 - 3, h - button_pad - button_size / 2 + 13 / 2, str, sprintf(str, "%u", i)); } if (t != win) XCopyArea (dpy, t, win, st->copy_gc, 0, 0, w, h, 0, 0); testx11_graph_rotator (st); testx11_show_orientation (st); ++st->frame; return 1000000 / 20; } static void testx11_reshape (Display *dpy, Window window, void *st_raw, unsigned int w, unsigned int h) { struct testx11 *st = (struct testx11 *)st_raw; st->xgwa.width = w; st->xgwa.height = h; # ifndef HAVE_JWXYZ XFreePixmap (st->dpy, st->backbuffer); # endif create_backbuffer (st); make_clip_mask (st); } static Bool testx11_event (Display *dpy, Window window, void *st_raw, XEvent *event) { struct testx11 *st = (struct testx11 *) st_raw; Bool handled = False; switch (event->xany.type) { case KeyPress: { KeySym keysym; char c = 0; XLookupString (&event->xkey, &c, 1, &keysym, 0); if (c == ' ') handled = toggle_antialiasing (st); if (c >= '0' && c <= '9' && c < '0' + mode_count) { st->mode = c - '0'; handled = True; } } break; case ButtonPress: if (event->xbutton.y >= st->xgwa.height - button_pad * 2 - button_size) { int i = (event->xbutton.x - button_pad / 2) / (button_pad + button_size) + 1; if (i && i < mode_count) { st->mode = i; handled = True; } } if (!handled) handled = toggle_antialiasing (st); break; } return handled; } static void testx11_free (Display *dpy, Window window, void *st_raw) { /* Omitted for the sake of brevity. */ } XSCREENSAVER_MODULE_2 ("TestX11", testx11, testx11) xscreensaver-5.36/hacks/screenhack.h000644 000767 000024 00000003677 12701612217 017522 0ustar00jwzstaff000000 000000 /* xscreensaver, Copyright (c) 1992-2015 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. */ #ifndef __SCREENHACK_H__ #define __SCREENHACK_H__ #include "screenhackI.h" /* In an Xlib world, we define two global symbols here: a struct in `MODULENAME_xscreensaver_function_table', and a pointer to that in `xscreensaver_function_table'. In a Cocoa/Android world, we only define the prefixed symbol; the un-prefixed symbol does not exist. */ #ifdef HAVE_JWXYZ # define XSCREENSAVER_LINK(NAME) #else # define XSCREENSAVER_LINK(NAME) \ struct xscreensaver_function_table *xscreensaver_function_table = &NAME; #endif #if defined(HAVE_JWXYZ) && !defined(__XLOCKMORE_INTERNAL_H__) /* this is one enormous kludge... */ # undef ya_rand_init static void xscreensaver_common_setup(struct xscreensaver_function_table *xsft, void *a) { ya_rand_init(0); } #else # define xscreensaver_common_setup 0 #endif #define XSCREENSAVER_MODULE_2(CLASS,NAME,PREFIX) \ struct xscreensaver_function_table \ NAME ## _xscreensaver_function_table = { \ CLASS, \ PREFIX ## _defaults, \ PREFIX ## _options, \ xscreensaver_common_setup, 0, \ PREFIX ## _init, \ PREFIX ## _draw, \ PREFIX ## _reshape, \ PREFIX ## _event, \ PREFIX ## _free, \ 0, 0, 0 }; \ XSCREENSAVER_LINK (NAME ## _xscreensaver_function_table) #define XSCREENSAVER_MODULE(CLASS,PREFIX) \ XSCREENSAVER_MODULE_2(CLASS,PREFIX,PREFIX) #endif /* __SCREENHACK_H__ */ xscreensaver-5.36/hacks/screenhackI.h000644 000767 000024 00000011221 12774322551 017624 0ustar00jwzstaff000000 000000 /* xscreensaver, Copyright (c) 1992-2016 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. */ /* Found in Don Hopkins' .plan file: * * The color situation is a total flying circus. The X approach to * device independence is to treat everything like a MicroVax framebuffer * on acid. A truely portable X application is required to act like the * persistent customer in the Monty Python ``Cheese Shop'' sketch. Even * the simplest applications must answer many difficult questions, like: * * WHAT IS YOUR DISPLAY? * display = XOpenDisplay("unix:0"); * WHAT IS YOUR ROOT? * root = RootWindow(display, DefaultScreen(display)); * AND WHAT IS YOUR WINDOW? * win = XCreateSimpleWindow(display, root, 0, 0, 256, 256, 1, * BlackPixel(display, DefaultScreen(display)), * WhitePixel(display, DefaultScreen(display))) * OH ALL RIGHT, YOU CAN GO ON. * * WHAT IS YOUR DISPLAY? * display = XOpenDisplay("unix:0"); * WHAT IS YOUR COLORMAP? * cmap = DefaultColormap(display, DefaultScreen(display)); * AND WHAT IS YOUR FAVORITE COLOR? * favorite_color = 0; / * Black. * / * / * Whoops! No, I mean: * / * favorite_color = BlackPixel(display, DefaultScreen(display)); * / * AAAYYYYEEEEE!! (client dumps core & falls into the chasm) * / * * WHAT IS YOUR DISPLAY? * display = XOpenDisplay("unix:0"); * WHAT IS YOUR VISUAL? * struct XVisualInfo vinfo; * if (XMatchVisualInfo(display, DefaultScreen(display), * 8, PseudoColor, &vinfo) != 0) * visual = vinfo.visual; * AND WHAT IS THE NET SPEED VELOCITY OF AN XConfigureWindow REQUEST? * / * Is that a SubStructureRedirectMask or a ResizeRedirectMask? * / * WHAT?! HOW AM I SUPPOSED TO KNOW THAT? * AAAAUUUGGGHHH!!!! (server dumps core & falls into the chasm) */ #ifndef __SCREENHACK_I_H__ #define __SCREENHACK_I_H__ #ifdef HAVE_CONFIG_H # include "config.h" #endif /* HAVE_CONFIG_H */ #include #include #include #include #ifdef __hpux /* Which of the ten billion standards does values.h belong to? What systems always have it? */ # include #endif #ifdef HAVE_JWXYZ # include "jwxyz.h" #else /* real X11 */ # include # include # include # include #endif /* !HAVE_JWXYZ */ #if defined(USE_IPHONE) || defined(HAVE_ANDROID) # define HAVE_MOBILE #endif #ifdef HAVE_ANDROID /* So that hacks' debug output shows up in logcat... */ # define fprintf(S, ...) Log(__VA_ARGS__) #endif /* M_PI ought to have been defined in math.h, but... */ #ifndef M_PI # define M_PI 3.1415926535 #endif #ifndef M_PI_2 # define M_PI_2 1.5707963267 #endif #ifndef Button6 # define Button6 6 # define Button7 7 #endif #include "yarandom.h" #include "usleep.h" #include "resources.h" #include "hsv.h" #include "colors.h" #include "grabscreen.h" #include "visual.h" #include "fps.h" /* Be Posixly correct */ #undef bzero #define bzero __ERROR_use_memset_not_bzero_in_xscreensaver__ #undef bcopy #define bcopy __ERROR_use_memcpy_not_bcopy_in_xscreensaver__ #undef ftime #define ftime __ERROR_use_gettimeofday_not_ftime_in_xscreensaver__ #undef sleep #define sleep __ERROR_do_not_sleep_in_xscreensaver__ extern Bool mono_p; struct xscreensaver_function_table { const char *progclass; const char * const *defaults; const XrmOptionDescRec *options; void (*setup_cb) (struct xscreensaver_function_table *, void *); void * setup_arg; void * (*init_cb) (Display *, Window); unsigned long (*draw_cb) (Display *, Window, void *); void (*reshape_cb) (Display *, Window, void *, unsigned int w, unsigned int h); Bool (*event_cb) (Display *, Window, void *, XEvent *); void (*free_cb) (Display *, Window, void *); void (*fps_cb) (Display *, Window, fps_state *, void *); Visual * (*pick_visual_hook) (Screen *); Bool (*validate_visual_hook) (Screen *, const char *, Visual *); }; extern const char *progname; #endif /* __SCREENHACK_I_H__ */ xscreensaver-5.36/hacks/fps.h000644 000767 000024 00000002310 12710314312 016156 0ustar00jwzstaff000000 000000 /* fps, Copyright (c) 2001-2011 Jamie Zawinski * Draw a frames-per-second display (Xlib and OpenGL). * * 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. */ #ifndef __XSCREENSAVER_FPS_H__ # define __XSCREENSAVER_FPS_H__ #ifdef HAVE_CONFIG_H # include "config.h" #endif /* HAVE_CONFIG_H */ typedef struct fps_state fps_state; extern fps_state *fps_init (Display *, Window); extern void fps_free (fps_state *); extern void fps_slept (fps_state *, unsigned long usecs); extern double fps_compute (fps_state *, unsigned long polys, double depth); extern void fps_draw (fps_state *); /* Doesn't really belong here, but close enough. */ #ifdef HAVE_MOBILE extern double current_device_rotation (void); #else # define current_device_rotation() (0) #endif #endif /* __XSCREENSAVER_FPS_H__ */ xscreensaver-5.36/hacks/fpsI.h000644 000767 000024 00000002043 12701612216 016276 0ustar00jwzstaff000000 000000 /* fps, Copyright (c) 2001-2014 Jamie Zawinski * Draw a frames-per-second display (Xlib and OpenGL). * * 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. */ #ifndef __XSCREENSAVER_FPSI_H__ # define __XSCREENSAVER_FPSI_H__ #include "fps.h" #undef HAVE_GLBITMAP struct fps_state { Display *dpy; Window window; int x, y; XFontStruct *font; Bool clear_p; char string[1024]; /* for glx/fps-gl.c */ void *gl_fps_data; GC draw_gc, erase_gc; int last_ifps; double last_fps; int frame_count; unsigned long slept; struct timeval prev_frame_end, this_frame_end; }; #endif /* __XSCREENSAVER_FPSI_H__ */ xscreensaver-5.36/hacks/xlockmore.h000664 000767 000024 00000015464 12710314027 017414 0ustar00jwzstaff000000 000000 /* xlockmore.h --- xscreensaver compatibility layer for xlockmore modules. * 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 * 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. * * The definitions in this file make it possible to compile an xlockmore * module into a standalone program, and thus use it with xscreensaver. * By Jamie Zawinski on 10-May-97; based on the ideas * in the older xlock.h by Charles Hannum . (I had * to redo it, since xlockmore has diverged so far from xlock...) */ #ifdef HAVE_CONFIG_H # include "config.h" #endif /* HAVE_CONFIG_H */ #ifndef __STDC__ ERROR! Sorry, xlockmore.h requires ANSI C (gcc, for example.) /* (The ansi dependency is that we use string concatenation, and cpp-based stringification of tokens.) */ #endif #include "screenhackI.h" #include "xlockmoreI.h" # define ENTRYPOINT static /* Accessor macros for the ModeInfo structure */ #define MI_DISPLAY(MI) ((MI)->dpy) #define MI_WINDOW(MI) ((MI)->window) #define MI_NUM_SCREENS(MI) ((MI)->num_screens) #define MI_SCREEN(MI) ((MI)->screen_number) #define MI_WIN_WHITE_PIXEL(MI) ((MI)->white) #define MI_WIN_BLACK_PIXEL(MI) ((MI)->black) #define MI_NPIXELS(MI) ((MI)->npixels) #define MI_PIXEL(MI,N) ((MI)->pixels[(N)]) #define MI_WIN_WIDTH(MI) ((MI)->xgwa.width) #define MI_WIN_HEIGHT(MI) ((MI)->xgwa.height) #define MI_WIN_DEPTH(MI) ((MI)->xgwa.depth) #define MI_DEPTH(MI) ((MI)->xgwa.depth) #define MI_WIN_COLORMAP(MI) ((MI)->xgwa.colormap) #define MI_VISUAL(MI) ((MI)->xgwa.visual) #define MI_GC(MI) ((MI)->gc) #define MI_PAUSE(MI) ((MI)->pause) #define MI_DELAY(MI) ((MI)->pause) #define MI_WIN_IS_FULLRANDOM(MI)((MI)->fullrandom) #define MI_WIN_IS_VERBOSE(MI) (False) #define MI_WIN_IS_INSTALL(MI) (True) #define MI_WIN_IS_MONO(MI) (mono_p) #define MI_WIN_IS_INROOT(MI) ((MI)->root_p) #define MI_WIN_IS_INWINDOW(MI) (!(MI)->root_p) #define MI_WIN_IS_ICONIC(MI) (False) #define MI_WIN_IS_WIREFRAME(MI) ((MI)->wireframe_p) #define MI_WIN_IS_USE3D(MI) ((MI)->threed) #define MI_LEFT_COLOR(MI) ((MI)->threed_left_color) #define MI_RIGHT_COLOR(MI) ((MI)->threed_right_color) #define MI_BOTH_COLOR(MI) ((MI)->threed_both_color) #define MI_NONE_COLOR(MI) ((MI)->threed_none_color) #define MI_DELTA3D(MI) ((MI)->threed_delta) #define MI_CYCLES(MI) ((MI)->cycles) #define MI_BATCHCOUNT(MI) ((MI)->batchcount) #define MI_SIZE(MI) ((MI)->size) #define MI_IS_DRAWN(MI) ((MI)->is_drawn) #define MI_IS_FPS(MI) ((MI)->fps_p) #define MI_NCOLORS(MI) ((MI)->npixels) #define MI_NAME(MI) (progname) #define MI_COLORMAP(MI) (MI_WIN_COLORMAP((MI))) #define MI_WIDTH(MI) (MI_WIN_WIDTH((MI))) #define MI_HEIGHT(MI) (MI_WIN_HEIGHT((MI))) #define MI_IS_ICONIC(MI) (MI_WIN_IS_ICONIC((MI))) #define MI_IS_WIREFRAME(MI) (MI_WIN_IS_WIREFRAME((MI))) #define MI_IS_MONO(MI) (MI_WIN_IS_MONO((MI))) #define MI_COUNT(MI) (MI_BATCHCOUNT((MI))) #define MI_BLACK_PIXEL(MI) (MI_WIN_BLACK_PIXEL(MI)) #define MI_WHITE_PIXEL(MI) (MI_WIN_WHITE_PIXEL(MI)) #define MI_IS_FULLRANDOM(MI) (MI_WIN_IS_FULLRANDOM(MI)) #define MI_IS_VERBOSE(MI) (MI_WIN_IS_VERBOSE(MI)) #define MI_IS_INSTALL(MI) (MI_WIN_IS_INSTALL(MI)) #define MI_IS_DEBUG(MI) (False) #define MI_IS_MOUSE(MI) (False) #define MI_CLEARWINDOW(mi) XClearWindow(MI_DISPLAY(mi), MI_WINDOW(mi)) #define FreeAllGL(dpy) /* */ /* Some other utility macros. */ #define SINF(n) ((float)sin((double)(n))) #define COSF(n) ((float)cos((double)(n))) #define FABSF(n) ((float)fabs((double)(n))) #undef MAX #undef MIN #undef ABS #define MAX(a,b)((a)>(b)?(a):(b)) #define MIN(a,b)((a)<(b)?(a):(b)) #define ABS(a)((a)<0 ? -(a) : (a)) /* Maximum possible number of colors (*not* default number of colors.) */ #define NUMCOLORS 256 /* In an Xlib world, we define two global symbols here: a struct in `MODULENAME_xscreensaver_function_table', and a pointer to that in `xscreensaver_function_table'. In a Cocoa or Android world, we only define the prefixed symbol; the un-prefixed symbol does not exist. */ #ifdef HAVE_MOBILE # define XSCREENSAVER_LINK(NAME) #else # define XSCREENSAVER_LINK(NAME) \ struct xscreensaver_function_table *xscreensaver_function_table = &NAME; #endif # if !defined(USE_GL) || defined(HAVE_COCOA) || defined(HAVE_ANDROID) # define xlockmore_pick_gl_visual 0 # define xlockmore_validate_gl_visual 0 # endif /* !USE_GL || HAVE_COCOA || HAVE_ANDROID */ # ifdef USE_GL # define XLOCKMORE_FPS xlockmore_gl_compute_fps # else # define XLOCKMORE_FPS xlockmore_do_fps # endif #ifdef WRITABLE_COLORS # undef WRITABLE_COLORS # define WRITABLE_COLORS 1 #else # define WRITABLE_COLORS 0 #endif #if defined(UNIFORM_COLORS) # define XLOCKMORE_COLOR_SCHEME color_scheme_uniform #elif defined(SMOOTH_COLORS) # define XLOCKMORE_COLOR_SCHEME color_scheme_smooth #elif defined(BRIGHT_COLORS) # define XLOCKMORE_COLOR_SCHEME color_scheme_bright #else # define XLOCKMORE_COLOR_SCHEME color_scheme_default #endif /* This is the macro that links this program in with the rest of xscreensaver. For example: XSCREENSAVER_MODULE ("Atlantis", atlantis) XSCREENSAVER_MODULE_2 ("GLMatrix", glmatrix, matrix) CLASS: a string, the class name for resources. NAME: a token, the name of the executable. Should be the same as CLASS, but downcased. PREFIX: the symbol used in the function names, e.g., `draw_atlantis'. NAME and PREFIX are usually the same. If they are not, use XSCREENSAVER_MODULE_2() instead of XSCREENSAVER_MODULE(). */ #define XSCREENSAVER_MODULE_2(CLASS,NAME,PREFIX) \ \ static struct xlockmore_function_table \ NAME ## _xlockmore_function_table = { \ CLASS, \ DEFAULTS, \ WRITABLE_COLORS, \ XLOCKMORE_COLOR_SCHEME, \ init_ ## PREFIX, \ draw_ ## PREFIX, \ reshape_ ## PREFIX, \ refresh_ ## PREFIX, \ release_ ## PREFIX, \ PREFIX ## _handle_event, \ & PREFIX ## _opts, \ 0 \ }; \ \ struct xscreensaver_function_table \ NAME ## _xscreensaver_function_table = { \ 0, 0, 0, \ xlockmore_setup, \ & NAME ## _xlockmore_function_table, \ 0, 0, 0, 0, 0, \ XLOCKMORE_FPS, \ xlockmore_pick_gl_visual, \ xlockmore_validate_gl_visual }; \ \ XSCREENSAVER_LINK (NAME ## _xscreensaver_function_table) #define XSCREENSAVER_MODULE(CLASS,PREFIX) \ XSCREENSAVER_MODULE_2(CLASS,PREFIX,PREFIX) xscreensaver-5.36/hacks/xlockmoreI.h000644 000767 000024 00000010443 12701612217 017515 0ustar00jwzstaff000000 000000 /* xlockmore.h --- xscreensaver compatibility layer for xlockmore modules. * xscreensaver, Copyright (c) 1997-2014 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. * * See xlockmore.h and xlockmore.c. */ #ifndef __XLOCKMORE_INTERNAL_H__ #define __XLOCKMORE_INTERNAL_H__ #include #include "screenhackI.h" #ifdef HAVE_XSHM_EXTENSION # include "xshm.h" #endif /* HAVE_XSHM_EXTENSION */ typedef struct ModeInfo ModeInfo; #ifdef USE_GL /* I'm told that the Sun version of OpenGL needs to have the constant SUN_OGL_NO_VERTEX_MACROS defined in order for morph3d to compile (the number of arguments to the glNormal3f macro changes...) Verified with gcc 2.7.2.2 and Sun cc 4.2 with OpenGL 1.1.1 dev 4 on Solaris 2.5.1. */ # ifndef HAVE_MESA_GL # if defined(__sun) && defined(__SVR4) /* Solaris */ # define SUN_OGL_NO_VERTEX_MACROS 1 # endif /* Solaris */ # endif /* !HAVE_MESA_GL */ # ifdef HAVE_COCOA # ifndef USE_IPHONE # include # include # endif # elif defined(HAVE_ANDROID) # include # else # include # include # include # endif # ifdef HAVE_JWZGLES # include "jwzgles.h" # endif /* HAVE_JWZGLES */ extern GLXContext *init_GL (ModeInfo *); extern void xlockmore_reset_gl_state(void); extern void clear_gl_error (void); extern void check_gl_error (const char *type); extern Visual *xlockmore_pick_gl_visual (Screen *); extern Bool xlockmore_validate_gl_visual (Screen *, const char *, Visual *); #endif /* !USE_GL */ /* These are only used in GL mode, but I don't understand why XCode isn't seeing the prototypes for them in glx/fps-gl.c... */ extern void do_fps (ModeInfo *); extern void xlockmore_gl_compute_fps (Display *, Window, fps_state *, void *); extern void xlockmore_gl_draw_fps (ModeInfo *); # define do_fps xlockmore_gl_draw_fps extern void xlockmore_setup (struct xscreensaver_function_table *, void *); extern void xlockmore_do_fps (Display *, Window, fps_state *, void *); /* The xlockmore RNG API is implemented in utils/yarandom.h. */ struct ModeInfo { struct xlockmore_function_table *xlmft; Display *dpy; Window window; Bool root_p; int num_screens; int screen_number; int npixels; unsigned long *pixels; XColor *colors; Bool writable_p; unsigned long white; unsigned long black; XWindowAttributes xgwa; GC gc; long pause; Bool fullrandom; long cycles; long batchcount; long size; Bool threed; long threed_left_color; long threed_right_color; long threed_both_color; long threed_none_color; long threed_delta; Bool wireframe_p; Bool is_drawn; /* Used only by OpenGL programs, since FPS is tricky there. */ fps_state *fpst; Bool fps_p; unsigned long polygon_count; /* These values are for -fps display only */ double recursion_depth; #ifdef HAVE_XSHM_EXTENSION Bool use_shm; XShmSegmentInfo shm_info; #endif }; typedef enum { t_String, t_Float, t_Int, t_Bool } xlockmore_type; typedef struct { void *var; char *name; char *classname; char *def; xlockmore_type type; } argtype; typedef struct { char *opt; char *desc; } OptionStruct; typedef struct { int numopts; XrmOptionDescRec *opts; int numvarsdesc; argtype *vars; OptionStruct *desc; } ModeSpecOpt; struct xlockmore_function_table { const char *progclass; const char *defaults; Bool want_writable_colors; enum { color_scheme_default, color_scheme_uniform, color_scheme_smooth, color_scheme_bright } desired_color_scheme; void (*hack_init) (ModeInfo *); void (*hack_draw) (ModeInfo *); void (*hack_reshape) (ModeInfo *, int, int); void (*hack_refresh) (ModeInfo *); void (*hack_free) (ModeInfo *); Bool (*hack_handle_events) (ModeInfo *, XEvent *); ModeSpecOpt *opts; unsigned int screen_count; /* Only used on the OS X and iOS ports. */ }; #endif /* __XLOCKMORE_INTERNAL_H__ */ xscreensaver-5.36/hacks/automata.h000644 000767 000024 00000003556 12701612216 017222 0ustar00jwzstaff000000 000000 /* -*- Mode: C; tab-width: 4 -*- */ /*- * automata.c - special stuff for automata modes * * Copyright (c) 1995 by David Bagley. * * Permission to use, copy, modify, and distribute this software and its * documentation for any purpose and without fee is hereby granted, * provided that the above copyright notice appear in all copies and that * both that copyright notice and this permission notice appear in * supporting documentation. * * This file is provided AS IS with no warranties of any kind. The author * shall have no liability with respect to the infringement of copyrights, * trade secrets or any patents by this file or any part thereof. In no * event will the author be liable for any lost revenue or profits or * other special, indirect and consequential damages. */ #define NUMSTIPPLES 11 #define STIPPLESIZE 8 static XPoint hexagonUnit[6] = { {0, 0}, {1, 1}, {0, 2}, {-1, 1}, {-1, -1}, {0, -2} }; static XPoint triangleUnit[2][3] = { { {0, 0}, {1, -1}, {0, 2} }, { {0, 0}, {-1, 1}, {0, -2} } }; #ifdef DO_STIPPLE static unsigned char stipples[NUMSTIPPLES][STIPPLESIZE] = { {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, /* white */ {0x11, 0x22, 0x11, 0x22, 0x11, 0x22, 0x11, 0x22}, /* grey+white | stripe */ {0x00, 0x66, 0x66, 0x00, 0x00, 0x66, 0x66, 0x00}, /* spots */ {0x88, 0x44, 0x22, 0x11, 0x88, 0x44, 0x22, 0x11}, /* lt. / stripe */ {0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66}, /* | bars */ {0x55, 0xaa, 0x55, 0xaa, 0x55, 0xaa, 0x55, 0xaa}, /* 50% grey */ {0xff, 0xff, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00}, /* - bars */ {0xee, 0xdd, 0xbb, 0x77, 0xee, 0xdd, 0xbb, 0x77}, /* dark \ stripe */ {0xff, 0x99, 0x99, 0xff, 0xff, 0x99, 0x99, 0xff}, /* spots */ {0xaa, 0xff, 0xff, 0x55, 0xaa, 0xff, 0xff, 0x55}, /* black+grey - stripe */ {0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff} /* black */ }; #endif /* DO_STIPPLE */ xscreensaver-5.36/hacks/bubbles.h000644 000767 000024 00000015451 12717746035 017040 0ustar00jwzstaff000000 000000 /* bubbles.h - definitions for bubbles screensaver */ /* $Id: bubbles.h,v 1.6 2006/02/25 20:11:57 jwz Exp $ */ #ifndef _BUBBLES_H_ #define _BUBBLES_H_ #ifdef HAVE_JWXYZ # include "jwxyz.h" # define HAVE_XPM #else # include #endif /*************************************************************************** * Options you might like to change to affect the program's behaviour * ***************************************************************************/ /* * Uncommenting the following will enable support for reading bubbles from * files (using the -file and -directory options to bubbles). This is * disabled by default since such operations are inherently non-portable * and we want the program to compile on as many systems as possible. * * If you uncomment this and you figure out how to get it working, please * let me (J.Macnicol@student.anu.edu.au) know. Diffs against the standard * distribution would be appreciated. Possible sources of problems are * dirent and possibly the use of tmpnam(). */ /* #define BUBBLES_IO */ /* * The following only makes sense if BUBBLES_IO above is defined. * * Uncomment the following if you always want to use the -file or * -directory options on the command line and never to use a default bubble * compiled into the program. This way you would save memory and disk space * since if you do use -file or -directory only one bubble will be loaded * into memory at any one time (and remember the default bubble is really * uncompressed, unlike bubbles in files which can be compressed). This * is disabled by default only so people running the program for the first * time with no knowldege of the command line options don't get error * messages ;) * * NOTE: You will still need to have a bubbles_default.c file, else the * build sequence will fail. Well constructed bubbles_default.c files * have #ifdef's which simply exclude everything else in the file at * compile time. The bubblestodefault script does this. */ /* #define NO_DEFAULT_BUBBLE */ /* * This turns on any debugging messages and sanity checks. Hopefully you * won't need this :) It slows things down a bit, too. * * NOTE: If you uncomment this you will get some messages about unused * functions when you compile. You can ignore these - they refer to * convenient checking routines which simply aren't called but are left * in case someone wants to use them. */ /* #define DEBUG */ /*************************************************************************** * Things you might need to change to get things working right * ***************************************************************************/ /* * Name of the gzip binary. You shouldn't need to change this unless it's * not in your PATH when the program is run, in which case you will need to * substitute the full path here. Keep the double quotes else things won't * compile! */ #define GZIP "gzip" /* * Likewise for the Bourne shell. */ #define BOURNESH "sh" /* * The name of the directory entry structure is different under Linux * (under which this code is being developed) than other systems. The case * alternate form here is that given in Kernighan & Ritchie's C book (which * must be authoratitive, no?) * * 04/07/96 : People will have to hack this to get it working on some * systems. I believe it doesn't work on SGI, for example. */ #ifdef _POSIX_SOURCE #define STRUCT_DIRENT struct dirent #else #define STRUCT_DIRENT Dirent #endif /* * The naming of fields in struct dirent also seems to differ from system to * system. This may have to be extended to make things truly portable. * What we want here is the name field from a dirent struct pointed to * by "dp". * * 04/07/96 : See above. This may need to be changed too. */ #ifdef _POSIX_SOURCE #define DIRENT_NAME dp->d_name #else #define DIRENT_NAME dp->name #endif /* I don't know why this isn't defined. */ #ifdef linux /* apparently it is defined in recent linuxes. who knows. */ /*extern char *tempnam(char *, char *);*/ #endif /**************************************************************************** * Buffer lengths and things you probably won't need to touch * ****************************************************************************/ /* Maximum length of a full path name we can deal with */ #define PATH_BUF_SIZE 1024 /* Size of string passed to shell as command */ #define COMMAND_BUF_SIZE 2500 /* Size increments for read_line() buffers */ #define READ_LINE_BUF_SIZE 24 /* Maximum amount to drop a bubble */ #define MAX_DROPPAGE 20 /**************************************************************************** * End of options * ****************************************************************************/ /* Some machines define M_PI and not PI. If they don't define either, use own own. Really, the accuracy of this is _not_ very important. */ #ifndef PI # define PI M_PI # ifndef M_PI # define M_PI 3.1415926535 # endif #endif /* for delete_bubble_in_mesh() */ #define DELETE_BUBBLE 0 #define KEEP_BUBBLE 1 /* Status codes for read_line */ #define LINE_READ 0 #define EOF_REACHED 1 #define IO_ERROR 2 /* * Magic number for Bubble struct, in case it's trashed when debugging code * (which happened to me often.... :( */ #define BUBBLE_MAGIC 5674 /* Useful macros */ #define MAX(A, B) ((A) > (B) ? (A) : (B)) #define MIN(A, B) ((A) < (B) ? (A) : (B)) /* How we represent bubbles */ struct bub { int radius; int step; /* for rendered bubbles */ long area; int x; int y; int magic; int cell_index; int visible; struct bub *next; struct bub *prev; }; typedef struct bub Bubble; /* * How we represent pixmaps of rendered bubbles. Because the range of radii * available may not be continuous, we call each a step (for the lack of a * better name...) */ #if defined(HAVE_GDK_PIXBUF) || defined(HAVE_XPM) struct bub_step { int radius; long area; int droppage; Pixmap ball, shape_mask; GC draw_gc, erase_gc; struct bub_step *next; }; typedef struct bub_step Bubble_Step; #endif /* HAVE_XPM || HAVE_GDK_PIXBUF */ /* Make sure default bubble isn't compiled when we don't have XPM Disable file I/O code too. */ #if !defined(HAVE_XPM) && !defined(HAVE_GDK_PIXBUF) # define NO_DEFAULT_BUBBLE # undef BUBBLES_IO #endif /* !HAVE_XPM && !HAVE_GDK_PIXBUF */ /* Make sure default bubble is compiled in when we have XPM and no file I/O */ #if defined(HAVE_XPM) || defined(HAVE_GDK_PIXBUF) # ifndef BUBBLES_IO # undef NO_DEFAULT_BUBBLE # endif /* BUBBLES_IO */ #endif /* HAVE_XPM || HAVE_GDK_PIXBUF */ extern void init_default_bubbles(void); extern int num_default_bubbles; extern char **default_bubbles[]; #endif /* _BUBBLES_H_ */ xscreensaver-5.36/hacks/xpm-pixmap.h000644 000767 000024 00000002241 12701612217 017476 0ustar00jwzstaff000000 000000 /* xpm-pixmap.h --- converts XPM data to Pixmaps. * xscreensaver, Copyright (c) 1998-2006 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. */ #ifndef _XPM_PIXMAP_H_ #define _XPM_PIXMAP_H_ /* Returns a Pixmap structure containing the bits of the given XPM image. */ extern Pixmap xpm_data_to_pixmap (Display *, Window, /*const*/ char * const *xpm_data, int *width_ret, int *height_ret, Pixmap *mask_ret); extern Pixmap xpm_file_to_pixmap (Display *, Window, const char *filename, int *width_ret, int *height_ret, Pixmap *mask_ret); #endif /* _XPM_PIXMAP_H_ */ xscreensaver-5.36/hacks/apple2.h000664 000767 000024 00000006303 12701612216 016565 0ustar00jwzstaff000000 000000 /* xscreensaver, Copyright (c) 1998-2004 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. * * Apple ][ CRT simulator, by Trevor Blackwell * with additional work by Jamie Zawinski */ #ifndef __XSCREENSAVER_APPLE_II__ #define __XSCREENSAVER_APPLE_II__ #include "analogtv.h" typedef struct apple2_state { unsigned char hireslines[192][40]; unsigned char textlines[24][40]; int gr_text; enum { A2_GR_FULL=1, A2_GR_LORES=2, A2_GR_HIRES=4 } gr_mode; int cursx; int cursy; int blink; } apple2_state_t; typedef struct apple2_sim_s apple2_sim_t; struct apple2_sim_s { void *controller_data; apple2_state_t *st; analogtv *dec; analogtv_input *inp; analogtv_reception reception; const char *typing; char typing_buf[1024]; double typing_rate; char *printing; char printing_buf[1024]; char prompt; Display *dpy; Window window; XWindowAttributes xgwa; XImage *text_im; struct timeval basetime_tv; double curtime; double delay; int stepno; double next_actiontime; void (*controller)(apple2_sim_t *sim, int *stepno, double *next_actiontime); }; enum { A2_HCOLOR_BLACK=0, A2_HCOLOR_GREEN=1, A2_HCOLOR_PURPLE=2, A2_HCOLOR_WHITE=3, A2_HCOLOR_ALTBLACK=4, A2_HCOLOR_RED=5, A2_HCOLOR_BLUE=6, A2_HCOLOR_ALTWHITE=7 }; enum { A2CONTROLLER_DONE=-1, A2CONTROLLER_FREE=-2 }; extern apple2_sim_t * apple2_start (Display *, Window, int delay, void (*)(apple2_sim_t *, int *stepno, double *next_actiontime)); extern int apple2_one_frame (apple2_sim_t *); void a2_poke(apple2_state_t *st, int addr, int val); void a2_goto(apple2_state_t *st, int r, int c); void a2_cls(apple2_state_t *st); void a2_invalidate(apple2_state_t *st); void a2_add_disk_item(apple2_state_t *st, char *name, unsigned char *data, int len, char type); void a2_scroll(apple2_state_t *st); void a2_printc(apple2_state_t *st, char c); void a2_printc_noscroll(apple2_state_t *st, char c); void a2_prints(apple2_state_t *st, char *s); void a2_goto(apple2_state_t *st, int r, int c); void a2_cls(apple2_state_t *st); void a2_clear_hgr(apple2_state_t *st); void a2_clear_gr(apple2_state_t *st); void a2_invalidate(apple2_state_t *st); void a2_poke(apple2_state_t *st, int addr, int val); void a2_display_image_loading(apple2_state_t *st, unsigned char *image, int lineno); void a2_init_memory_active(apple2_sim_t *sim); void a2_hplot(apple2_state_t *st, int hcolor, int x, int y); void a2_hline(apple2_state_t *st, int hcolor, int x1, int y1, int x2, int y2); void a2_plot(apple2_state_t *st, int color, int x, int y); #endif /* __XSCREENSAVER_APPLE_II__ */ xscreensaver-5.36/hacks/analogtv.h000664 000767 000024 00000022724 12776334527 017244 0ustar00jwzstaff000000 000000 /* analogtv, Copyright (c) 2003-2016 Trevor Blackwell * * 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. */ #ifndef _XSCREENSAVER_ANALOGTV_H #define _XSCREENSAVER_ANALOGTV_H #include "thread_util.h" #include "xshm.h" #if defined(USE_IPHONE) || defined(HAVE_ANDROID) # define HAVE_MOBILE #endif /* You'll need these to generate standard NTSC TV signals */ enum { /* We don't handle interlace here */ ANALOGTV_V=262, ANALOGTV_TOP=30, ANALOGTV_VISLINES=200, ANALOGTV_BOT=ANALOGTV_TOP + ANALOGTV_VISLINES, /* This really defines our sampling rate, 4x the colorburst frequency. Handily equal to the Apple II's dot clock. You could also make a case for using 3x the colorburst freq, but 4x isn't hard to deal with. */ ANALOGTV_H=912, /* Each line is 63500 nS long. The sync pulse is 4700 nS long, etc. Define sync, back porch, colorburst, picture, and front porch positions */ ANALOGTV_SYNC_START=0, ANALOGTV_BP_START=4700*ANALOGTV_H/63500, ANALOGTV_CB_START=5800*ANALOGTV_H/63500, /* signal[row][ANALOGTV_PIC_START] is the first displayed pixel */ ANALOGTV_PIC_START=9400*ANALOGTV_H/63500, ANALOGTV_PIC_LEN=52600*ANALOGTV_H/63500, ANALOGTV_FP_START=62000*ANALOGTV_H/63500, ANALOGTV_PIC_END=ANALOGTV_FP_START, /* TVs scan past the edges of the picture tube, so normally you only want to use about the middle 3/4 of the nominal scan line. */ ANALOGTV_VIS_START=ANALOGTV_PIC_START + (ANALOGTV_PIC_LEN*1/8), ANALOGTV_VIS_END=ANALOGTV_PIC_START + (ANALOGTV_PIC_LEN*7/8), ANALOGTV_VIS_LEN=ANALOGTV_VIS_END-ANALOGTV_VIS_START, ANALOGTV_HASHNOISE_LEN=6, ANALOGTV_GHOSTFIR_LEN=4, /* analogtv.signal is in IRE units, as defined below: */ ANALOGTV_WHITE_LEVEL=100, ANALOGTV_GRAY50_LEVEL=55, ANALOGTV_GRAY30_LEVEL=35, ANALOGTV_BLACK_LEVEL=10, ANALOGTV_BLANK_LEVEL=0, ANALOGTV_SYNC_LEVEL=-40, ANALOGTV_CB_LEVEL=20, ANALOGTV_SIGNAL_LEN=ANALOGTV_V*ANALOGTV_H, /* The number of intensity levels we deal with for gamma correction &c */ ANALOGTV_CV_MAX=1024, /* MAX_LINEHEIGHT corresponds to 2400 vertical pixels, beyond which it interpolates extra black lines. */ ANALOGTV_MAX_LINEHEIGHT=12 }; typedef struct analogtv_input_s { signed char signal[ANALOGTV_V+1][ANALOGTV_H]; int do_teletext; /* for client use */ void (*updater)(struct analogtv_input_s *inp); void *client_data; double next_update_time; } analogtv_input; typedef struct analogtv_font_s { XImage *text_im; int char_w, char_h; int x_mult, y_mult; } analogtv_font; typedef struct analogtv_reception_s { analogtv_input *input; double ofs; double level; double multipath; double freqerr; double ghostfir[ANALOGTV_GHOSTFIR_LEN]; double ghostfir2[ANALOGTV_GHOSTFIR_LEN]; double hfloss; double hfloss2; } analogtv_reception; /* The rest of this should be considered mostly opaque to the analogtv module. */ struct analogtv_yiq_s { float y,i,q; } /*yiq[ANALOGTV_PIC_LEN+10] */; typedef struct analogtv_s { Display *dpy; Window window; Screen *screen; XWindowAttributes xgwa; struct threadpool threads; #if 0 unsigned int onscreen_signature[ANALOGTV_V]; #endif int n_colors; int interlace; int interlace_counter; float agclevel; /* If you change these, call analogtv_set_demod */ float tint_control,color_control,brightness_control,contrast_control; float height_control, width_control, squish_control; float horiz_desync; float squeezebottom; float powerup; /* internal cache */ int blur_mult; /* For fast display, set fakeit_top, fakeit_bot to the scanlines (0..ANALOGTV_V) that can be preserved on screen. fakeit_scroll is the number of scan lines to scroll it up, or 0 to not scroll at all. It will DTRT if asked to scroll from an offscreen region. */ int fakeit_top; int fakeit_bot; int fakeit_scroll; int redraw_all; int use_shm,use_cmap,use_color; int bilevel_signal; #ifdef HAVE_XSHM_EXTENSION XShmSegmentInfo shm_info; #endif int visdepth,visclass,visbits; int red_invprec, red_shift; int green_invprec, green_shift; int blue_invprec, blue_shift; unsigned int red_mask, green_mask, blue_mask; Colormap colormap; int usewidth,useheight,xrepl,subwidth; XImage *image; /* usewidth * useheight */ GC gc; int screen_xo,screen_yo; /* centers image in window */ int flutter_horiz_desync; int flutter_tint; struct timeval last_display_time; int need_clear; /* Add hash (in the radio sense, not the programming sense.) These are the small white streaks that appear in quasi-regular patterns all over the screen when someone is running the vacuum cleaner or the blender. We also set shrinkpulse for one period which squishes the image horizontally to simulate the temporary line voltate drop when someone turns on a big motor */ double hashnoise_rpm; int hashnoise_counter; int hashnoise_times[ANALOGTV_V]; int hashnoise_signal[ANALOGTV_V]; int hashnoise_on; int hashnoise_enable; int shrinkpulse; float crtload[ANALOGTV_V]; unsigned int red_values[ANALOGTV_CV_MAX]; unsigned int green_values[ANALOGTV_CV_MAX]; unsigned int blue_values[ANALOGTV_CV_MAX]; unsigned long colors[256]; int cmap_y_levels; int cmap_i_levels; int cmap_q_levels; float tint_i, tint_q; int cur_hsync; int line_hsync[ANALOGTV_V]; int cur_vsync; double cb_phase[4]; double line_cb_phase[ANALOGTV_V][4]; int channel_change_cycles; double rx_signal_level; float *rx_signal; struct { int index; double value; } leveltable[ANALOGTV_MAX_LINEHEIGHT+1][ANALOGTV_MAX_LINEHEIGHT+1]; /* Only valid during draw. */ unsigned random0, random1; double noiselevel; const analogtv_reception *const *recs; unsigned rec_count; float *signal_subtotals; float puheight; } analogtv; analogtv *analogtv_allocate(Display *dpy, Window window); analogtv_input *analogtv_input_allocate(void); /* call if window size changes */ void analogtv_reconfigure(analogtv *it); void analogtv_set_defaults(analogtv *it, char *prefix); void analogtv_release(analogtv *it); int analogtv_set_demod(analogtv *it); void analogtv_setup_frame(analogtv *it); void analogtv_setup_sync(analogtv_input *input, int do_cb, int do_ssavi); void analogtv_draw(analogtv *it, double noiselevel, const analogtv_reception *const *recs, unsigned rec_count); int analogtv_load_ximage(analogtv *it, analogtv_input *input, XImage *pic_im); void analogtv_reception_update(analogtv_reception *inp); void analogtv_setup_teletext(analogtv_input *input); /* Functions for rendering content into an analogtv_input */ void analogtv_make_font(Display *dpy, Window window, analogtv_font *f, int w, int h, char *fontname); int analogtv_font_pixel(analogtv_font *f, int c, int x, int y); void analogtv_font_set_pixel(analogtv_font *f, int c, int x, int y, int value); void analogtv_font_set_char(analogtv_font *f, int c, char *s); void analogtv_lcp_to_ntsc(double luma, double chroma, double phase, int ntsc[4]); void analogtv_draw_solid(analogtv_input *input, int left, int right, int top, int bot, int ntsc[4]); void analogtv_draw_solid_rel_lcp(analogtv_input *input, double left, double right, double top, double bot, double luma, double chroma, double phase); void analogtv_draw_char(analogtv_input *input, analogtv_font *f, int c, int x, int y, int ntsc[4]); void analogtv_draw_string(analogtv_input *input, analogtv_font *f, char *s, int x, int y, int ntsc[4]); void analogtv_draw_string_centered(analogtv_input *input, analogtv_font *f, char *s, int x, int y, int ntsc[4]); void analogtv_draw_xpm(analogtv *tv, analogtv_input *input, const char * const *xpm, int left, int top); int analogtv_handle_events (analogtv *it); #ifdef HAVE_XSHM_EXTENSION #define ANALOGTV_DEFAULTS_SHM "*useSHM: True", #else #define ANALOGTV_DEFAULTS_SHM #endif #ifndef HAVE_MOBILE # define ANALOGTV_DEF_BRIGHTNESS "2" # define ANALOGTV_DEF_CONTRAST "150" #else /* Need to really crank this up for it to look good on the iPhone screen. */ # define ANALOGTV_DEF_BRIGHTNESS "3" # define ANALOGTV_DEF_CONTRAST "400" #endif #define ANALOGTV_DEFAULTS \ "*TVColor: 70", \ "*TVTint: 5", \ "*TVBrightness: " ANALOGTV_DEF_BRIGHTNESS, \ "*TVContrast: " ANALOGTV_DEF_CONTRAST, \ "*Background: Black", \ "*use_cmap: 0", \ "*geometry: 800x600", \ "*fpsSolid: True", \ THREAD_DEFAULTS \ ANALOGTV_DEFAULTS_SHM #define ANALOGTV_OPTIONS \ THREAD_OPTIONS \ { "-use-cmap", ".use_cmap", XrmoptionSepArg, 0 }, \ { "-tv-color", ".TVColor", XrmoptionSepArg, 0 }, \ { "-tv-tint", ".TVTint", XrmoptionSepArg, 0 }, \ { "-tv-brightness", ".TVBrightness", XrmoptionSepArg, 0 }, \ { "-tv-contrast", ".TVContrast", XrmoptionSepArg, 0 }, #endif /* _XSCREENSAVER_ANALOGTV_H */ xscreensaver-5.36/hacks/pacman.h000644 000767 000024 00000012615 12717743262 016657 0ustar00jwzstaff000000 000000 /* -*- Mode: C; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ /*- * Copyright (c) 2002 by Edwin de Jong . * * Permission to use, copy, modify, and distribute this software and its * documentation for any purpose and without fee is hereby granted, * provided that the above copyright notice appear in all copies and that * both that copyright notice and this permission notice appear in * supporting documentation. * * This file is provided AS IS with no warranties of any kind. The author * shall have no liability with respect to the infringement of copyrights, * trade secrets or any patents by this file or any part thereof. In no * event will the author be liable for any lost revenue or profits or * other special, indirect and consequential damages. * * Revision History: * 3-May-2002: Added AI to pacman and ghosts, slowed down ghosts. * 26-Nov-2001: Random level generator added * 01-Nov-2000: Allocation checks * 04-Jun-1997: Compatible with xscreensaver * */ #ifndef __PACMAN_H__ #define __PACMAN_H__ #ifdef HAVE_CONFIG_H # include "config.h" #endif #include "xlockmoreI.h" #if defined(HAVE_GDK_PIXBUF) || defined(HAVE_XPM) || defined(HAVE_JWXYZ) # define USE_PIXMAP #include "xpm-pixmap.h" # else # if defined(USE_PIXMAP) # undef USE_PIXMAP # endif #endif #define LEVHEIGHT 32U #define LEVWIDTH 40U #define TILEWIDTH 5U #define TILEHEIGHT 5U #define GETNB(n) ((1 << (n)) - 1) #define TESTNB(v, n) (((1 << (n)) & v) != 0x00) #define SNB(v, n) ((v) |= (1 << (n))) #define UNSNB(v, n) ((v) &= ~(1 << (n))) #define GHOSTS 4U #if defined(USE_PIXMAP) #define MAXMOUTH 3 #else #define MAXMOUTH 11 #endif #define MAXGPOS 2 #define MAXGDIR 4 #define MAXGWAG 2 #define MAXGFLASH 2 #define MINGRIDSIZE 4 #define MINSIZE 3 #define NOWHERE 16383 #define START ((LRAND() & 1) ? 1 : 3) #define MINDOTPERC 10 #define YELLOW (MI_NPIXELS(mi) / 6) #define GREEN (23 * MI_NPIXELS(mi) / 64) #define BLUE (45 * MI_NPIXELS(mi) / 64) #define WHITE (MI_NPIXELS(mi)) #define LINEWIDTH 4 #define HLINEWIDTH 1 #define JAILHEIGHT 7 #define JAILWIDTH 8 #define GETFACTOR(x, y) ((x) > (y) ? 1 : ((x) < (y) ? -1 : 0)) #define SIGN(x) GETFACTOR((x), 0) #define TRACEVECS 40 #define PAC_DEATH_FRAMES 8 #define GHOST_TRACE ( LEVWIDTH * LEVHEIGHT ) #define DIRVECS 4 #define NUM_BONUS_DOTS 4 typedef struct { int vx, vy; } tracevec_struct; typedef enum { inbox = 0, goingout, randdir, chasing, hiding, goingin } GhostState; typedef enum { ps_eating = 0, ps_chasing, ps_hiding, ps_random, ps_dieing } PacmanState; typedef enum { GHOST_DANGER, GHOST_EATEN } GameState; typedef struct { volatile unsigned int col, row; unsigned int lastbox, nextcol, nextrow; int dead; int cfactor, rfactor; int cf, rf; int oldcf, oldrf; volatile int timeleft; GhostState aistate; int speed; XPoint delta; XPoint err; int flash_scared; int trace_idx; tracevec_struct trace[GHOST_TRACE]; int home_idx; volatile int home_count; tracevec_struct way_home[GHOST_TRACE]; volatile int wait_pos; /* a cycle before calculating the position */ #if 0 /* Used for debugging */ int ndirs; int oldndirs; #endif #if 0 /* Used for debugging */ char last_stat[1024]; #endif } ghoststruct; typedef struct { unsigned int col, row; unsigned int lastbox, nextcol, nextrow; int mouthstage, mouthdirection; int cfactor, rfactor; int cf, rf; int oldcf, oldrf; int oldlx, oldly; int justate; PacmanState aistate; tracevec_struct trace[TRACEVECS]; int cur_trace; int state_change; int roundscore; int speed; int lastturn; XPoint delta; XPoint err; int deaths; int init_row; } pacmanstruct; typedef struct { unsigned int x, y; int eaten; } bonus_dot; /* This are tiles which can be placed to create a level. */ struct tiles { char block[TILEWIDTH * TILEHEIGHT + 1]; unsigned dirvec[4]; unsigned ndirs; unsigned simular_to; }; typedef struct { unsigned short width, height; unsigned short nrows, ncols; short xs, ys, xb, yb; short incx, incy; GC stippledGC; int graphics_format; pacmanstruct pacman; ghoststruct *ghosts; unsigned int nghosts; Pixmap pacmanPixmap[4][MAXMOUTH]; Pixmap pacmanMask[4][MAXMOUTH]; Pixmap pacman_ds[PAC_DEATH_FRAMES]; /* pacman death sequence */ Pixmap pacman_ds_mask[PAC_DEATH_FRAMES]; Pixmap ghostPixmap[4][MAXGDIR][MAXGWAG]; Pixmap ghostMask; Pixmap s_ghostPixmap[MAXGFLASH][MAXGWAG]; /* Scared ghost Pixmaps */ Pixmap ghostEyes[MAXGDIR]; char level[LEVHEIGHT * LEVWIDTH]; unsigned int wallwidth; unsigned int dotsleft; int spritexs, spriteys, spritedx, spritedy; GameState gamestate; unsigned int timeleft; char last_pac_stat[1024]; /* draw_pacman_sprite */ int pm_mouth; int pm_mouth_delay; int pm_open_mouth; int pm_death_frame; int pm_death_delay; /* draw_ghost_sprite */ int gh_wag; int gh_wag_count; /* flash_bonus_dots */ int bd_flash_count; int bd_on; /* pacman_tick */ int ghost_scared_timer; int flash_timer; PacmanState old_pac_state; /* pacman_level.c */ bonus_dot bonus_dots[NUM_BONUS_DOTS]; struct tiles *tiles; } pacmangamestruct; extern pacmangamestruct *pacman_games; extern Bool pacman_trackmouse; typedef char lev_t[LEVHEIGHT][LEVWIDTH + 1]; #endif /* __PACMAN_H__ */ xscreensaver-5.36/hacks/pacman_ai.h000644 000767 000024 00000002355 12701612217 017314 0ustar00jwzstaff000000 000000 /*- * Copyright (c) 2002 by Edwin de Jong . * * Permission to use, copy, modify, and distribute this software and its * documentation for any purpose and without fee is hereby granted, * provided that the above copyright notice appear in all copies and that * both that copyright notice and this permission notice appear in * supporting documentation. * * This file is provided AS IS with no warranties of any kind. The author * shall have no liability with respect to the infringement of copyrights, * trade secrets or any patents by this file or any part thereof. In no * event will the author be liable for any lost revenue or profits or * other special, indirect and consequential damages. * * Revision History: * 3-May-2002: Added AI to pacman and ghosts, slowed down ghosts. * 26-Nov-2001: Random level generator added * 01-Nov-2000: Allocation checks * 04-Jun-1997: Compatible with xscreensaver * */ #ifndef __PACMAN_AI_H__ #define __PACMAN_AI_H__ 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__ */ xscreensaver-5.36/hacks/pacman_level.h000644 000767 000024 00000002661 12701612217 020032 0ustar00jwzstaff000000 000000 /*- * Copyright (c) 2002 by Edwin de Jong . * * Permission to use, copy, modify, and distribute this software and its * documentation for any purpose and without fee is hereby granted, * provided that the above copyright notice appear in all copies and that * both that copyright notice and this permission notice appear in * supporting documentation. * * This file is provided AS IS with no warranties of any kind. The author * shall have no liability with respect to the infringement of copyrights, * trade secrets or any patents by this file or any part thereof. In no * event will the author be liable for any lost revenue or profits or * other special, indirect and consequential damages. */ #ifndef __PACMAN_LEVEL_H__ #define __PACMAN_LEVEL_H__ /* typedef struct { */ /* int x, y; */ /* } XY; */ 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__ */ xscreensaver-5.36/hacks/asm6502.h000644 000767 000024 00000012116 12701612216 016474 0ustar00jwzstaff000000 000000 /* * Copyright (c) 2007 Jeremy English * * 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. * * Created: 07-May-2007 */ /* This is a port of the javascript 6502 assembler, compiler and debugger. The orignal code was copyright 2006 by Stian Soreng - www.6502asm.com The stack space is in page $100 to $1ff. The video buffer starts at $200 and is 1024 bytes. Programs get loaded at address $600. Address $fe is random and byte $ff is used for user input. User input is disabled. */ #ifndef __ASM6502_H__ #define __ASM6502_H__ typedef uint8_t Bit8; typedef uint16_t Bit16; typedef uint32_t Bit32; #undef BOOL #undef TRUE #undef FALSE #define BOOL Bit8 #define TRUE 1 #define FALSE 0 enum { MAX_LABEL_LEN = 80, NUM_OPCODES = 56, /* Number of unique instructions not counting DCB */ MEM_64K = 65536, /* We have 64k of memory to work with. */ MAX_PARAM_VALUE = 25, /* The number of values allowed behind dcb */ MAX_CMD_LEN = 4, /* Each assembly command is 3 characeters long */ /* The stack works from the top down in page $100 to $1ff */ STACK_TOP = 0x1ff, STACK_BOTTOM = 0x100, PROG_START = 0x600 /* The default entry point for the program */ }; typedef enum{ SINGLE, IMMEDIATE_VALUE, IMMEDIATE_GREAT, IMMEDIATE_LESS, INDIRECT_X, INDIRECT_Y, ZERO, ZERO_X, ZERO_Y, ABS_VALUE, ABS_OR_BRANCH, ABS_X, ABS_Y, ABS_LABEL_X, ABS_LABEL_Y, DCB_PARAM } m6502_AddrMode; typedef struct machine_6502 machine_6502; typedef struct { char name[MAX_CMD_LEN]; Bit8 Imm; Bit8 ZP; Bit8 ZPX; Bit8 ZPY; Bit8 ABS; Bit8 ABSX; Bit8 ABSY; Bit8 INDX; Bit8 INDY; Bit8 SNGL; Bit8 BRA; void (*func) (machine_6502*, m6502_AddrMode); } m6502_Opcodes; /* Used to cache the index of each opcode */ typedef struct { Bit8 index; 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 values. The third parameter is the color index: Color Index Table 00 black #000000 01 white #ffffff 02 Red #880000 03 seafoam #aaffee 04 fuscia #cc44cc 05 green #00cc55 06 blue #0000aa 07 Yellow #eeee77 08 tangerine #dd8855 09 brown #664400 10 salmon #ff7777 11 charcoal #333333 12 smoke #777777 13 lime #aaff66 14 light blue #0088ff 15 gray #bbbbbb The plotter state variable of the machine gets passed as the forth parameter. You can use this parameter to store state information. */ typedef void (*m6502_Plotter) (Bit8, Bit8, Bit8, void*); struct machine_6502 { BOOL codeCompiledOK; Bit8 regA; Bit8 regX; Bit8 regY; Bit8 regP; Bit16 regPC; /* A pair of 8 bit registers */ Bit16 regSP; Bit16 defaultCodePC; Bit8 memory[MEM_64K]; BOOL runForever; int labelPtr; BOOL codeRunning; int myInterval; m6502_Opcodes opcodes[NUM_OPCODES]; int screen[32][32]; int codeLen; m6502_OpcodeIndex opcache[0xff]; m6502_Plotter plot; void *plotterState; }; /* build6502() - Creates an instance of the 6502 machine */ machine_6502 *m6502_build(void); /* destroy6502() - compile the file and exectue it until the program is finished */ void m6502_destroy6502(machine_6502 *machine); /* eval_file() - Compiles and runs a file until the program is finished */ 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 m6502_start_eval_file(machine_6502 *machine, const char *filename, m6502_Plotter plot, void *plotterState); /* XXX void m6502_start_eval_binary(machine_6502 *machine, Bit8 *program, unsigned int proglen, 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 m6502_next_eval(machine_6502 *machine, int insno); /* hexDump() - Dumps memory to output */ 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 m6502_disassemble(machine_6502 *machine, FILE *output); /* trace() - Prints to output the current value of registers, the current nmemonic, memory address and value. */ void m6502_trace(machine_6502 *machine, FILE *output); /* save_program() - Writes a binary file of the program loaded in memory. */ /* XXX void save_program(machine_6502 *machine, const char *filename); */ #endif /* __ASM6502_H__ */ xscreensaver-5.36/hacks/delaunay.h000644 000767 000024 00000002773 12701612216 017211 0ustar00jwzstaff000000 000000 /* Triangulate Efficient Triangulation Algorithm Suitable for Terrain Modelling or An Algorithm for Interpolating Irregularly-Spaced Data with Applications in Terrain Modelling Written by Paul Bourke Presented at Pan Pacific Computer Conference, Beijing, China. January 1989 Abstract A discussion of a method that has been used with success in terrain modelling to estimate the height at any point on the land surface from irregularly distributed samples. The special requirements of terrain modelling are discussed as well as a detailed description of the algorithm and an example of its application. http://paulbourke.net/papers/triangulate/ http://paulbourke.net/papers/triangulate/triangulate.c */ #ifndef __DELAUNAY_H__ #define __DELAUNAY_H__ #ifdef HAVE_CONFIG_H # include "config.h" #endif /* HAVE_CONFIG_H */ typedef struct { double x,y,z; } XYZ; typedef struct { int p1,p2,p3; } ITRIANGLE; /* Takes as input NV vertices in array pxyz Returned is a list of ntri triangular faces in the array v These triangles are arranged in a consistent clockwise order. The triangle array 'v' should be malloced to 3 * nv The vertex array pxyz must be big enough to hold 3 more points The vertex array must be sorted in increasing x values */ extern int delaunay (int nv, XYZ *pxyz, ITRIANGLE *v, int *ntri); /* qsort(p,nv,sizeof(XYZ), delaunay_xyzcompare); */ extern int delaunay_xyzcompare (const void *v1, const void *v2); #endif /* __DELAUNAY_H__ */ xscreensaver-5.36/hacks/recanim.h000644 000767 000024 00000002112 12701612217 017011 0ustar00jwzstaff000000 000000 /* recanim, Copyright (c) 2014 Jamie Zawinski * Record animation frames of the running screenhack. * * 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. */ #ifndef __XSCREENSAVER_RECORD_ANIM_H__ # define __XSCREENSAVER_RECORD_ANIM_H__ #ifdef HAVE_CONFIG_H # include "config.h" #endif /* HAVE_CONFIG_H */ typedef struct record_anim_state record_anim_state; extern record_anim_state *screenhack_record_anim_init (Screen *, Window, int frames); extern void screenhack_record_anim (record_anim_state *); extern void screenhack_record_anim_free (record_anim_state *); #endif /* __XSCREENSAVER_RECORD_ANIM_H__ */ xscreensaver-5.36/hacks/vidwhacker000775 000767 000024 00000033446 12701614353 017322 0ustar00jwzstaff000000 000000 #!/usr/bin/perl -w # vidwhacker, for xscreensaver. Copyright (c) 1998-2011 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 program grabs a frame of video, then uses various pbm filters to # munge the image in random nefarious ways, then uses xloadimage, xli, or xv # to put it on the root window. This works out really nicely if you just # feed some random TV station into it... # # Created: 14-Apr-01. require 5; use diagnostics; use strict; my $progname = $0; $progname =~ s@.*/@@g; my ($version) = ('$Revision: 1.33 $' =~ m/\s(\d[.\d]+)\s/s); my $verbose = 0; my $use_stdin = 0; my $use_stdout = 0; my $video_p = 0; my $file_p = 1; my $delay = 5; my $imagedir; my $screen_width = -1; my $displayer = "xscreensaver-getimage -root -file"; sub which($); # apparently some versions of netpbm call it "pamoil" instead of "pgmoil"... # my $pgmoil = (which("pamoil") ? "pamoil" : "pgmoil"); # List of interesting PPM filter pipelines. # In this list, the following magic words may be used: # # COLORS a randomly-selected pair of RGB foreground/background colors. # FILE1 the (already-existing) input PPM file (ok to overwrite it). # FILE2-FILE4 names of other tmp files you can use. # # These commands should read from FILE1, and write to stdout. # All tmp files will be deleted afterward. # my @filters = ( "ppmtopgm FILE1 | pgmedge | pgmtoppm COLORS | ppmnorm", "ppmtopgm FILE1 | pgmenhance | pgmtoppm COLORS", "ppmtopgm FILE1 | $pgmoil | pgmtoppm COLORS", "ppmtopgm FILE1 | pgmbentley | pgmtoppm COLORS", "ppmrelief FILE1 | ppmtopgm | pgmedge | ppmrelief | ppmtopgm |" . " pgmedge | pnminvert | pgmtoppm COLORS", "ppmspread 71 FILE1 > FILE2 ; " . " pnmarith -add FILE1 FILE2 ; ", "pnmflip -lr < FILE1 > FILE2 ; " . " pnmarith -multiply FILE1 FILE2 > FILE3 ; " . " pnmflip -tb FILE3 | ppmnorm > FILE2 ; " . " pnmarith -multiply FILE1 FILE2", "pnmflip -lr FILE1 > FILE2 ; " . " pnmarith -difference FILE1 FILE2", "pnmflip -tb FILE1 > FILE2 ; " . " pnmarith -difference FILE1 FILE2", "pnmflip -lr FILE1 | pnmflip -tb > FILE2 ; " . " pnmarith -difference FILE1 FILE2", "ppmtopgm < FILE1 | pgmedge > FILE2 ; " . " pnmarith -difference FILE1 FILE2 > FILE3 ; " . " cp FILE3 FILE1 ; " . " ppmtopgm < FILE1 | pgmedge > FILE2 ; " . " pnmarith -difference FILE1 FILE2 > FILE3 ; " . " ppmnorm < FILE1", "pnmflip -lr < FILE1 > FILE2 ; " . " pnmarith -multiply FILE1 FILE2 | ppmrelief | ppmnorm | pnminvert", "pnmflip -lr FILE1 > FILE2 ; " . " pnmarith -subtract FILE1 FILE2 | ppmrelief | ppmtopgm | pgmedge", "pgmcrater -number 20000 -width WIDTH -height HEIGHT FILE1 | " . " pgmtoppm COLORS > FILE2 ; " . " pnmarith -difference FILE1 FILE2 > FILE3 ; " . " pnmflip -tb FILE3 | ppmnorm > FILE2 ; " . " pnmarith -multiply FILE1 FILE2", "ppmshift 30 FILE1 | ppmtopgm | $pgmoil | pgmedge | " . " pgmtoppm COLORS > FILE2 ; " . " pnmarith -difference FILE1 FILE2", "ppmpat -madras WIDTH HEIGHT | pnmdepth 255 > FILE2 ; " . " pnmarith -difference FILE1 FILE2", "ppmpat -tartan WIDTH HEIGHT | pnmdepth 255 > FILE2 ; " . " pnmarith -difference FILE1 FILE2", "ppmpat -camo WIDTH HEIGHT | pnmdepth 255 | ppmshift 50 > FILE2 ; " . " pnmarith -multiply FILE1 FILE2", "pgmnoise WIDTH HEIGHT | pgmedge | pgmtoppm COLORS > FILE2 ; " . " pnmarith -difference FILE1 FILE2 | pnmdepth 255 | pnmsmooth", ); # Any files on this list will be deleted at exit. # my @all_tmpfiles = (); sub exit_cleanup() { print STDERR "$progname: delete tmp files\n" if ($verbose); unlink @all_tmpfiles; } sub signal_cleanup() { my ($sig) = @_; print STDERR "$progname: caught SIG$sig\n" if ($verbose); exit 1; } sub init_signals() { $SIG{HUP} = \&signal_cleanup; $SIG{INT} = \&signal_cleanup; $SIG{QUIT} = \&signal_cleanup; $SIG{ABRT} = \&signal_cleanup; $SIG{KILL} = \&signal_cleanup; $SIG{TERM} = \&signal_cleanup; # Need this so that if giftopnm dies, we don't die. $SIG{PIPE} = 'IGNORE'; } END { exit_cleanup(); } # returns the full path of the named program, or undef. # sub which($) { my ($prog) = @_; foreach (split (/:/, $ENV{PATH})) { if (-x "$_/$prog") { return $prog; } } return undef; } # Choose random foreground and background colors # sub randcolors() { return sprintf ("#%02x%02x%02x-#%02x%02x%02x", int(rand()*60), int(rand()*60), int(rand()*60), 120+int(rand()*135), 120+int(rand()*135), 120+int(rand()*135)); } sub filter_subst($$$@) { my ($filter, $width, $height, @tmpfiles) = @_; my $colors = randcolors(); $filter =~ s/\bWIDTH\b/$width/g; $filter =~ s/\bHEIGHT\b/$height/g; $filter =~ s/\bCOLORS\b/'$colors'/g; my $i = 1; foreach my $t (@tmpfiles) { $filter =~ s/\bFILE$i\b/$t/g; $i++; } if ($filter =~ m/([A-Z]+)/) { error ("internal error: what is \"$1\"?"); } $filter =~ s/ +/ /g; return $filter; } # Frobnicate the image in some random way. # sub frob_ppm($) { my ($ppm_data) = @_; $_ = $ppm_data; error ("0-length data") if (!defined($ppm_data) || $ppm_data eq ""); error ("not a PPM file") unless (m/^P\d\n/s); my ($width, $height) = m/^P\d\n(\d+) (\d+)\n/s; error ("got a bogus PPM") unless ($width && $height); my $tmpdir = $ENV{TMPDIR}; $tmpdir = "/tmp" unless $tmpdir; my $fn = sprintf ("%s/vidwhacker-0-%08x", $tmpdir, rand(0xFFFFFFFF)); my $fn1 = sprintf ("%s/vidwhacker-1-%08x", $tmpdir, rand(0xFFFFFFFF)); my $fn2 = sprintf ("%s/vidwhacker-2-%08x", $tmpdir, rand(0xFFFFFFFF)); my $fn3 = sprintf ("%s/vidwhacker-3-%08x", $tmpdir, rand(0xFFFFFFFF)); my @files = ( "$fn", "$fn1", "$fn2", "$fn3" ); push @all_tmpfiles, @files; my $n = int(rand($#filters+1)); my $filter = $filters[$n]; if ($verbose == 1) { printf STDERR "$progname: running filter $n\n"; } elsif ($verbose > 1) { my $f = $filter; $f =~ s/ +/ /g; $f =~ s/^ */\t/; $f =~ s/ *\|/\n\t|/g; $f =~ s/ *\; */ ;\n\t/g; print STDERR "$progname: filter $n:\n\n$f\n\n" if $verbose; } $filter = filter_subst ($filter, $width, $height, @files); unlink @files; local *OUT; open (OUT, ">$files[0]") || error ("writing $files[0]: $!"); print OUT $ppm_data; close OUT; $filter = "( $filter )"; $filter .= "2>/dev/null" unless ($verbose > 1); local *IN; open (IN, "$filter |") || error ("opening pipe: $!"); $ppm_data = ""; while () { $ppm_data .= $_; } close IN; unlink @files; return $ppm_data; } sub read_config() { my $conf = "$ENV{HOME}/.xscreensaver"; my $had_dir = defined($imagedir); local *IN; open (IN, "<$conf") || error ("reading $conf: $!"); while () { if (!$imagedir && m/^imageDirectory:\s+(.*)\s*$/i) { $imagedir = $1; } elsif (m/^grabVideoFrames:\s+true\s*$/i) { $video_p = 1; } elsif (m/^grabVideoFrames:\s+false\s*$/i) { $video_p = 0; } elsif (m/^chooseRandomImages:\s+true\s*$/i) { $file_p = 1; } elsif (m/^chooseRandomImages:\s+false\s*$/i) { $file_p = 0; } } close IN; $file_p = 1 if $had_dir; $imagedir = undef unless ($imagedir && $imagedir ne ''); if (!$file_p && !$video_p) { # error ("neither grabVideoFrames nor chooseRandomImages are set\n\t") . # "in $conf; $progname requires one or both." $file_p = 1; } if ($file_p) { error ("no imageDirectory set in $conf") unless $imagedir; error ("imageDirectory $imagedir doesn't exist") unless (-d $imagedir); } if ($verbose > 1) { printf STDERR "$progname: grab video: $video_p\n"; printf STDERR "$progname: grab images: $file_p\n"; printf STDERR "$progname: directory: $imagedir\n"; } } sub get_ppm() { if ($use_stdin) { print STDERR "$progname: reading from stdin\n" if ($verbose > 1); my $ppm = ""; while () { $ppm .= $_; } return $ppm; } else { my $do_file_p; if ($file_p && $video_p) { $do_file_p = (int(rand(2)) == 0); print STDERR "$progname: doing " . ($do_file_p ? "files" : "video") ."\n" if ($verbose); } elsif ($file_p) { $do_file_p = 1; } elsif ($video_p) { $do_file_p = 0; } else { error ("internal error: not grabbing files or video?"); } my $v = ($verbose <= 1 ? "" : "-" . ("v" x ($verbose-1))); my $cmd; if ($do_file_p) { $cmd = "xscreensaver-getimage-file $v --name \"$imagedir\""; } else { $cmd = "xscreensaver-getimage-video $v --stdout"; } my $ppm; if ($do_file_p) { print STDERR "$progname: running: $cmd\n" if ($verbose > 1); my $fn = `$cmd`; $fn =~ s/\n$//s; error ("didn't get a file?") if ($fn eq ""); $fn = "$imagedir/$fn" unless ($fn =~ m@^/@s); print STDERR "$progname: selected file $fn\n" if ($verbose > 1); if ($fn =~ m/\.gif/i) { $cmd = "giftopnm < \"$fn\""; } elsif ($fn =~ m/\.jpe?g/i) { $cmd = "djpeg < \"$fn\""; } elsif ($fn =~ m/\.png/i) { $cmd = "pngtopnm < \"$fn\""; } elsif ($fn =~ m/\.xpm/i) { $cmd = "xpmtoppm < \"$fn\""; } elsif ($fn =~ m/\.bmp/i) { $cmd = "bmptoppm < \"$fn\""; } elsif ($fn =~ m/\.tiff?/i) { $cmd = "tifftopnm < \"$fn\""; } elsif ($fn =~ m/\.p[bgp]m/i) { return `cat \"$fn\"`; } else { print STDERR "$progname: $fn: unrecognized file extension\n"; # go around the loop and get another return undef; } print STDERR "$progname: converting with: $cmd\n" if ($verbose > 1); $cmd .= " 2>/dev/null" unless ($verbose > 1); $ppm = `$cmd`; } else { print STDERR "$progname: running: $cmd\n" if ($verbose > 1); $ppm = `$cmd`; error ("no data?") if ($ppm eq ""); error ("not a PPM file") unless ($ppm =~ m/^P\d\n/s); $_ = $ppm; my ($width, $height) = m/^P\d\n(\d+) (\d+)\n/s; error ("got a bogus PPM") unless ($width && $height); print STDERR "$progname: grabbed ${width}x$height PPM\n" if ($verbose > 1); $_ = 0; } return $ppm; } } sub dispose_ppm($) { my ($ppm) = @_; error ("0-length data") if (!defined($ppm) || $ppm eq ""); error ("not a PPM file") unless ($ppm =~ m/^P\d\n/s); if ($use_stdout) { print STDERR "$progname: writing to stdout\n" if ($verbose > 1); print $ppm; } else { my $tmpdir = $ENV{TMPDIR}; $tmpdir = "/tmp" unless $tmpdir; my $fn = sprintf ("%s/vidwhacker-%08x.ppm", $tmpdir, rand(0xFFFFFFFF)); local *OUT; unlink $fn; push @all_tmpfiles, $fn; open (OUT, ">$fn") || error ("writing $fn: $!"); print OUT $ppm; close OUT; my @cmd = split (/ +/, $displayer); push @cmd, $fn; print STDERR "$progname: executing \"" . join(" ", @cmd) . "\"\n" if ($verbose); system (@cmd); my $exit_value = $? >> 8; my $signal_num = $? & 127; my $dumped_core = $? & 128; unlink $fn; error ("$cmd[0]: core dumped!") if ($dumped_core); error ("$cmd[0]: signal $signal_num!") if ($signal_num); error ("$cmd[0]: exited with $exit_value!") if ($exit_value); } } my $stdin_ppm = undef; sub vidwhack() { my $ppm; if ($use_stdin) { if (!defined($stdin_ppm)) { $stdin_ppm = get_ppm(); } $ppm = $stdin_ppm; } else { my $max_err_count = 20; my $err_count = 0; while (!defined($ppm)) { $ppm = get_ppm(); $err_count++ if (!defined ($ppm)); error ("too many errors, too few images!") if ($err_count > $max_err_count); } } $ppm = frob_ppm ($ppm); dispose_ppm ($ppm); $ppm = undef; } sub error($) { my ($err) = @_; print STDERR "$progname: $err\n"; exit 1; } sub usage() { print STDERR "VidWhacker, Copyright (c) 2001 Jamie Zawinski \n"; print STDERR " https://www.jwz.org/xscreensaver/"; print STDERR "\n"; print STDERR "usage: $0 [-display dpy] [-verbose]\n"; print STDERR "\t\t[-root | -window | -window-id 0xXXXXX ]\n"; print STDERR "\t\t[-stdin] [-stdout] [-delay secs]\n"; print STDERR "\t\t[-directory image_directory]\n"; exit 1; } sub main() { while ($_ = $ARGV[0]) { shift @ARGV; if (m/^--?verbose$/) { $verbose++; } elsif (m/^-v+$/) { $verbose += length($_)-1; } elsif (m/^(-display|-disp|-dis|-dpy|-d)$/) { $ENV{DISPLAY} = shift @ARGV; } elsif (m/^--?stdin$/) { $use_stdin = 1; } elsif (m/^--?stdout$/) { $use_stdout = 1; } elsif (m/^--?delay$/) { $delay = shift @ARGV; } elsif (m/^--?dir(ectory)?$/) { $imagedir = shift @ARGV; } elsif (m/^--?root$/) { } elsif (m/^--?window-id$/) { my $id = shift @ARGV; error ("unparsable window id: $id") unless ($id =~ m/^\d+$|^0x[\da-f]+$/i); $displayer =~ s/--?root\b/$id/ || error ("unable to munge displayer: $displayer"); } elsif (m/^--?window$/) { print STDERR "$progname: sorry, \"-window\" is unimplemented.\n"; print STDERR "$progname: use \"-stdout\" and pipe to a displayer.\n"; exit 1; } elsif (m/^-./) { usage; } else { usage; } } init_signals(); read_config; # sanity checking - is pbm installed? # (this is a non-exhaustive but representative list) foreach ("ppmtopgm", "pgmenhance", "pnminvert", "pnmarith", "pnmdepth") { which ($_) || error "$_ not found on \$PATH."; } if (!$use_stdout) { $_ = `xdpyinfo 2>&-`; ($screen_width) =~ m/ dimensions: +(\d+)x(\d+) pixels/; $screen_width = 800 unless $screen_width > 0; } if ($use_stdout) { vidwhack(); } else { while (1) { vidwhack(); sleep $delay; } } } main(); exit 0; xscreensaver-5.36/hacks/webcollage000775 000767 000024 00000344554 12701614427 017306 0ustar00jwzstaff000000 000000 #!/usr/bin/perl -w # # webcollage, Copyright © 1999-2015 by Jamie Zawinski # This program decorates the screen with random images from the web. # One satisfied customer described it as "a nonstop pop culture brainbath." # # 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. # To run this as a display mode with xscreensaver, add this to `programs': # # webcollage --root # webcollage --root --filter 'vidwhacker --stdin --stdout' # # # You can see this in action at https://www.jwz.org/webcollage/ -- # it auto-reloads about once a minute. To make a page similar to # that on your own system, do this: # # webcollage --size '800x600' --imagemap $HOME/www/webcollage/index # # # If you have the "driftnet" program installed, webcollage can display a # collage of images sniffed off your local ethernet, instead of pulled out # of search engines: in that way, your screensaver can display the images # that your co-workers are downloading! # # Driftnet is available here: http://www.ex-parrot.com/~chris/driftnet/ # Use it like so: # # webcollage --root --driftnet # # Driftnet is the Unix implementation of the MacOS "EtherPEG" program. require 5; use strict; # We can't "use diagnostics" here, because that library malfunctions if # you signal and catch alarms: it says "Uncaught exception from user code" # and exits, even though I damned well AM catching it! #use diagnostics; require Time::Local; require POSIX; use Fcntl ':flock'; # import LOCK_* constants use POSIX qw(strftime); use LWP::UserAgent; use bytes; my $progname = $0; $progname =~ s@.*/@@g; my ($version) = ('$Revision: 1.173 $' =~ m/\s(\d[.\d]+)\s/s); my $copyright = "WebCollage $version, Copyright (c) 1999-2015" . " Jamie Zawinski \n" . " https://www.jwz.org/webcollage/\n"; my @search_methods = ( # Google is rate-limiting us now, so this works ok from # a short-running screen saver, but not as a batch job. # I haven't found a workaround. # 7, "googlephotos", \&pick_from_google_image_photos, 5, "googleimgs", \&pick_from_google_images, 5, "googlenums", \&pick_from_google_image_numbers, # So let's try Bing instead. No rate limiting yet! # 7, "bingphotos", \&pick_from_bing_image_photos, 6, "bingimgs", \&pick_from_bing_images, 6, "bingnums", \&pick_from_bing_image_numbers, 21, "flickr_recent", \&pick_from_flickr_recent, 16, "flickr_random", \&pick_from_flickr_random, 23, "instagram", \&pick_from_instagram, 4, "livejournal", \&pick_from_livejournal_images, # No longer exists, as of Apr 2014 # 4, "yahoorand", \&pick_from_yahoo_random_link, # Twitter destroyed their whole API in 2013. # 0, "twitpic", \&pick_from_twitpic_images, # 0, "twitter", \&pick_from_twitter_images, # This is a cute way to search for a certain webcams. # Not included in default methods, since these images # aren't terribly interesting by themselves. # See also "SurveillanceSaver". # 0, "securitycam", \&pick_from_security_camera, # Nonfunctional as of June 2011. # 0, "altavista", \&pick_from_alta_vista_random_link, # In Apr 2002, Google asked me to stop searching them. # I asked them to add a "random link" url. They said # "that would be easy, we'll think about it" and then # never wrote back. Booo Google! Booooo! So, screw # those turkeys, I've turned Google searching back on. # I'm sure they can take it. (Jan 2005.) # Jan 2005: Yahoo fucked up their search form so that # it's no longer possible to do "or" searches on news # images, so we rarely get any hits there any more. # # 0, "yahoonews", \&pick_from_yahoo_news_text, # Dec 2004: the ircimages guy's server can't take the # heat, so he started banning the webcollage user agent. # I tried to convince him to add a lighter-weight page to # support webcollage better, but he doesn't care. # # 0, "ircimages", \&pick_from_ircimages, # Dec 2002: Alta Vista has a new "random link" URL now. # They added it specifically to better support webcollage! # That was super cool of them. This is how we used to do # it, before: # # 0, "avimages", \&pick_from_alta_vista_images, # 0, "avtext", \&pick_from_alta_vista_text, # This broke in 2004. Eh, Lycos sucks anyway. # # 0, "lycos", \&pick_from_lycos_text, # This broke in 2003, I think. I suspect Hotbot is # actually the same search engine data as Lycos. # # 0, "hotbot", \&pick_from_hotbot_text, ); # programs we can use to write to the root window (tried in ascending order.) # my @root_displayers = ( "xscreensaver-getimage -root -file", "chbg -once -xscreensaver -max_size 100", "xv -root -quit -viewonly +noresetroot -quick24 -rmode 5" . " -rfg black -rbg black", "xli -quiet -onroot -center -border black", "xloadimage -quiet -onroot -center -border black", # this lame program wasn't built with vroot.h: # "xsri -scale -keep-aspect -center-horizontal -center-vertical", ); # Some sites need cookies to work properly. These are they. # my %cookies = ( "www.altavista.com" => "AV_ALL=1", # request uncensored searches "web.altavista.com" => "AV_ALL=1", # log in as "cipherpunk" "www.nytimes.com" => 'NYT-S=18cHMIlJOn2Y1bu5xvEG3Ufuk6E1oJ.' . 'FMxWaQV0igaB5Yi/Q/guDnLeoL.pe7i1oakSb' . '/VqfdUdb2Uo27Vzt1jmPn3cpYRlTw9', "ircimages.com" => 'disclaimer=1', ); # If this is set, it's a helper program to use for pasting images together: # this is a lot faster and more efficient than using PPM pipelines, which is # what we do if this program doesn't exist. (We check for "webcollage-helper" # on $PATH at startup, and set this variable appropriately.) # my $webcollage_helper = undef; # If we have the webcollage-helper program, then it will paste the images # together with transparency! 0.0 is invisible, 1.0 is totally opaque. # my $opacity = 0.85; # Some sites have managed to poison the search engines. These are they. # (We auto-detect sites that have poisoned the search engines via excessive # keywords or dictionary words, but these are ones that slip through # anyway.) # # This can contain full host names, or 2 or 3 component domains. # my %poisoners = ( "die.net" => 1, # 'l33t h4ck3r d00dz. "genforum.genealogy.com" => 1, # Cluttering avtext with human names. "rootsweb.com" => 1, # Cluttering avtext with human names. "akamai.net" => 1, # Lots of sites have their images on Akamai. "akamaitech.net" => 1, # But those are pretty much all banners. # Since Akamai is super-expensive, let's # go out on a limb and assume that all of # their customers are rich-and-boring. "bartleby.com" => 1, # Dictionary, cluttering avtext. "encyclopedia.com" => 1, # Dictionary, cluttering avtext. "onlinedictionary.datasegment.com" => 1, # Dictionary, cluttering avtext. "hotlinkpics.com" => 1, # Porn site that has poisoned avimages # (I don't see how they did it, though!) "alwayshotels.com" => 1, # Poisoned Lycos pretty heavily. "nextag.com" => 1, # Poisoned Alta Vista real good. "ghettodriveby.com" => 1, # Poisoned Google Images. "crosswordsolver.org" => 1, # Poisoned Google Images. "xona.com" => 1, # Poisoned Google Images. "freepatentsonline.com" => 1, # Poisoned Google Images. "herbdatanz.com" => 1, # Poisoned Google Images. ); # When verbosity is turned on, we warn about sites that we seem to be hitting # a lot: usually this means some new poisoner has made it into the search # engines. But sometimes, the warning is just because that site has a lot # of stuff on it. So these are the sites that are immune to the "frequent # site" diagnostic message. # my %warningless_sites = ( "home.earthlink.net" => 1, "www.angelfire.com" => 1, "members.aol.com" => 1, "img.photobucket.com" => 1, "pics.livejournal.com" => 1, "tinypic.com" => 1, "flickr.com" => 1, "staticflickr.com" => 1, "pbase.com" => 1, "blogger.com" => 1, "multiply.com" => 1, "wikimedia.org" => 1, "twitpic.com" => 1, "amazonaws.com" => 1, "blogspot.com" => 1, "photoshelter.com" => 1, "myspacecdn.com" => 1, "feedburner.com" => 1, "wikia.com" => 1, "ljplus.ru" => 1, "yandex.ru" => 1, "imgur.com" => 1, "yfrog.com" => 1, "cdninstagram.com" => 1, "yimg.com" => 1, # This is where dailynews.yahoo.com stores "eimg.com" => 1, # its images, so pick_from_yahoo_news_text() # hits this every time. "images.quizfarm.com" => 1, # damn those LJ quizzes... "images.quizilla.com" => 1, "images.quizdiva.net" => 1, "driftnet" => 1, # builtin... "local-directory" => 1, # builtin... ); # For decoding HTML-encoded character entities to URLs. # my %entity_table = ( "apos" => '\'', "quot" => '"', "amp" => '&', "lt" => '<', "gt" => '>', "nbsp" => ' ', "iexcl" => '', "cent" => "\xA2", "pound" => "\xA3", "curren" => "\xA4", "yen" => "\xA5", "brvbar" => "\xA6", "sect" => "\xA7", "uml" => "\xA8", "copy" => "\xA9", "ordf" => "\xAA", "laquo" => "\xAB", "not" => "\xAC", "shy" => "\xAD", "reg" => "\xAE", "macr" => "\xAF", "deg" => "\xB0", "plusmn" => "\xB1", "sup2" => "\xB2", "sup3" => "\xB3", "acute" => "\xB4", "micro" => "\xB5", "para" => "\xB6", "middot" => "\xB7", "cedil" => "\xB8", "sup1" => "\xB9", "ordm" => "\xBA", "raquo" => "\xBB", "frac14" => "\xBC", "frac12" => "\xBD", "frac34" => "\xBE", "iquest" => "\xBF", "Agrave" => "\xC0", "Aacute" => "\xC1", "Acirc" => "\xC2", "Atilde" => "\xC3", "Auml" => "\xC4", "Aring" => "\xC5", "AElig" => "\xC6", "Ccedil" => "\xC7", "Egrave" => "\xC8", "Eacute" => "\xC9", "Ecirc" => "\xCA", "Euml" => "\xCB", "Igrave" => "\xCC", "Iacute" => "\xCD", "Icirc" => "\xCE", "Iuml" => "\xCF", "ETH" => "\xD0", "Ntilde" => "\xD1", "Ograve" => "\xD2", "Oacute" => "\xD3", "Ocirc" => "\xD4", "Otilde" => "\xD5", "Ouml" => "\xD6", "times" => "\xD7", "Oslash" => "\xD8", "Ugrave" => "\xD9", "Uacute" => "\xDA", "Ucirc" => "\xDB", "Uuml" => "\xDC", "Yacute" => "\xDD", "THORN" => "\xDE", "szlig" => "\xDF", "agrave" => "\xE0", "aacute" => "\xE1", "acirc" => "\xE2", "atilde" => "\xE3", "auml" => "\xE4", "aring" => "\xE5", "aelig" => "\xE6", "ccedil" => "\xE7", "egrave" => "\xE8", "eacute" => "\xE9", "ecirc" => "\xEA", "euml" => "\xEB", "igrave" => "\xEC", "iacute" => "\xED", "icirc" => "\xEE", "iuml" => "\xEF", "eth" => "\xF0", "ntilde" => "\xF1", "ograve" => "\xF2", "oacute" => "\xF3", "ocirc" => "\xF4", "otilde" => "\xF5", "ouml" => "\xF6", "divide" => "\xF7", "oslash" => "\xF8", "ugrave" => "\xF9", "uacute" => "\xFA", "ucirc" => "\xFB", "uuml" => "\xFC", "yacute" => "\xFD", "thorn" => "\xFE", "yuml" => "\xFF", # HTML 4 entities that do not have 1:1 Latin1 mappings. "bull" => "*", "hellip"=> "...", "prime" => "'", "Prime" => "\"", "frasl" => "/", "trade" => "[tm]", "larr" => "<-", "rarr" => "->", "harr" => "<->", "lArr" => "<=", "rArr" => "=>", "hArr" => "<=>", "empty" => "\xD8", "minus" => "-", "lowast"=> "*", "sim" => "~", "cong" => "=~", "asymp" => "~", "ne" => "!=", "equiv" => "==", "le" => "<=", "ge" => ">=", "lang" => "<", "rang" => ">", "loz" => "<>", "OElig" => "OE", "oelig" => "oe", "Yuml" => "Y", "circ" => "^", "tilde" => "~", "ensp" => " ", "emsp" => " ", "thinsp"=> " ", "ndash" => "-", "mdash" => "--", "lsquo" => "`", "rsquo" => "'", "sbquo" => "'", "ldquo" => "\"", "rdquo" => "\"", "bdquo" => "\"", "lsaquo"=> "<", "rsaquo"=> ">", ); ############################################################################## # # Various global flags set by command line parameters, or computed # ############################################################################## my $current_state = "???"; # for diagnostics my $load_method; my $last_search; my $image_succeeded = -1; my $suppress_audit = 0; my $verbose_imgmap = 0; # print out rectangles and URLs only (stdout) my $verbose_warnings = 0; # print out warnings when things go wrong my $verbose_load = 0; # diagnostics about loading of URLs my $verbose_filter = 0; # diagnostics about page selection/rejection my $verbose_net = 0; # diagnostics about network I/O my $verbose_pbm = 0; # diagnostics about PBM pipelines my $verbose_http = 0; # diagnostics about all HTTP activity my $verbose_exec = 0; # diagnostics about executing programs my $report_performance_interval = 60 * 15; # print some stats every 15 minutes my $http_proxy = undef; my $http_timeout = 20; my $cvt_timeout = 10; my $min_width = 50; my $min_height = 50; my $min_ratio = 1/5; my $min_gif_area = (120 * 120); my $no_output_p = 0; my $urls_only_p = 0; my $cocoa_p = 0; my $imagemap_base = undef; my @pids_to_kill = (); # forked pids we should kill when we exit, if any. my $driftnet_magic = 'driftnet'; my $driftnet_dir = undef; my $default_driftnet_cmd = "driftnet -a -m 100"; my $local_magic = 'local-directory'; my $local_dir = undef; my $wordlist; my %rejected_urls; my @tripwire_words = ("aberrate", "abode", "amorphous", "antioch", "arrhenius", "arteriole", "blanket", "brainchild", "burdensome", "carnival", "cherub", "chord", "clever", "dedicate", "dilogarithm", "dolan", "dryden", "eggplant"); ############################################################################## # # Retrieving URLs # ############################################################################## # returns three values: the HTTP response line; the document headers; # and the document body. # sub get_document_1($$$) { my ($url, $referer, $timeout) = @_; if (!defined($timeout)) { $timeout = $http_timeout; } if ($timeout > $http_timeout) { $timeout = $http_timeout; } my $user_agent = "$progname/$version"; if ($url =~ m@^https?://www\.altavista\.com/@s || $url =~ m@^https?://random\.yahoo\.com/@s || $url =~ m@^https?://[^./]+\.google\.com/@s || $url =~ m@^https?://www\.livejournal\.com/@s) { # block this, you turkeys. $user_agent = 'Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.8.1.7)' . ' Gecko/20070914 Firefox/2.0.0.7'; } my $ua = LWP::UserAgent->new ( agent => $user_agent, keep_alive => 0, env_proxy => 0, ); $ua->proxy ('http', $http_proxy) if $http_proxy; $ua->default_header ('Referer' => $referer) if $referer; $ua->default_header ('Accept' => '*/*'); $ua->timeout($timeout) if $timeout; if (0) { $ua->add_handler ("request_send", sub($$$) { my ($req, $ua, $h) = @_; print "\n>>[[\n"; $req->dump; print "\n]]\n"; return; }); $ua->add_handler ("response_data", sub($$$$) { my ($req, $ua, $h, $data) = @_; #print "\n<<[[\n"; print $data; print "\n]]\n"; return 1; }); $ua->add_handler ("request_done", sub($$$) { my ($req, $ua, $h) = @_; print "\n<<[[\n"; $req->dump; print "\n]]\n"; return; }); } if ($verbose_http) { LOG (1, " ==> GET $url"); LOG (1, " ==> User-Agent: $user_agent"); LOG (1, " ==> Referer: $referer") if $referer; } my $res = $ua->get ($url); my $http = ($res ? $res->status_line : '') || ''; my $head = ($res ? $res->headers() : '') || ''; $head = $head->as_string() if $head; my $body = ($res && $res->is_success ? $res->decoded_content : '') || ''; LOG ($verbose_net, "get_document_1 $url " . ($referer ? $referer : "")); $head =~ s/\r\n/\n/gs; $head =~ s/\r/\n/gs; if ($verbose_http) { foreach (split (/\n/, $head)) { LOG ($verbose_http, " <== $_"); } } my @L = split(/\r\n|\r|\n/, $body); my $lines = @L; LOG ($verbose_http, " <== [ body ]: $lines lines, " . length($body) . " bytes"); if (!$http) { LOG (($verbose_net || $verbose_load), "null response: $url"); return (); } return ( $http, $head, $body ); } # returns two values: the document headers; and the document body. # if the given URL did a redirect, returns the redirected-to document. # sub get_document($$;$) { my ($url, $referer, $timeout) = @_; my $start = time; if (defined($referer) && $referer eq $driftnet_magic) { return get_driftnet_file ($url); } if (defined($referer) && $referer eq $local_magic) { return get_local_file ($url); } my $orig_url = $url; my $loop_count = 0; my $max_loop_count = 4; do { if (defined($timeout) && $timeout <= 0) { LOG (($verbose_net || $verbose_load), "timed out for $url"); $suppress_audit = 1; return (); } my ( $http, $head, $body ) = get_document_1 ($url, $referer, $timeout); if (defined ($timeout)) { my $now = time; my $elapsed = $now - $start; $timeout -= $elapsed; $start = $now; } return () unless $http; # error message already printed $http =~ s/[\r\n]+$//s; if ( $http =~ m@^HTTP/[0-9.]+ 30[123]@ ) { $_ = $head; my ( $location ) = m@^location:[ \t]*(.*)$@im; if ( $location ) { $location =~ s/[\r\n]$//; LOG ($verbose_net, "redirect from $url to $location"); $referer = $url; $url = $location; if ($url =~ m@^/@) { $referer =~ m@^(https?://[^/]+)@i; $url = $1 . $url; } elsif (! ($url =~ m@^[a-z]+:@i)) { $_ = $referer; s@[^/]+$@@g if m@^https?://[^/]+/@i; $_ .= "/" if m@^https?://[^/]+$@i; $url = $_ . $url; } } else { LOG ($verbose_net, "no Location with \"$http\""); return ( $url, $body ); } if ($loop_count++ > $max_loop_count) { LOG ($verbose_net, "too many redirects ($max_loop_count) from $orig_url"); $body = undef; return (); } } elsif ( $http =~ m@^HTTP/[0-9.]+ ([4-9][0-9][0-9].*)$@ ) { LOG (($verbose_net || $verbose_load), "failed: $1 ($url)"); # http errors -- return nothing. $body = undef; return (); } elsif (!$body) { LOG (($verbose_net || $verbose_load), "document contains no data: $url"); return (); } else { # ok! return ( $url, $body ); } } while (1); } # If we already have a cookie defined for this site, and the site is trying # to overwrite that very same cookie, let it do so. This is because nytimes # expires its cookies - it lets you upgrade to a new cookie without logging # in again, but you have to present the old cookie to get the new cookie. # So, by doing this, the built-in cypherpunks cookie will never go "stale". # sub set_cookie($$) { my ($host, $cookie) = @_; my $oc = $cookies{$host}; return unless $oc; $_ = $oc; my ($oc_name, $oc_value) = m@^([^= \t\r\n]+)=(.*)$@; $_ = $cookie; my ($nc_name, $nc_value) = m@^([^= \t\r\n]+)=(.*)$@; if ($oc_name eq $nc_name && $oc_value ne $nc_value) { $cookies{$host} = $cookie; LOG ($verbose_net, "overwrote ${host}'s $oc_name cookie"); } } ############################################################################ # # Extracting image URLs from HTML # ############################################################################ # given a URL and the body text at that URL, selects and returns a random # image from it. returns () if no suitable images found. # sub pick_image_from_body($$) { my ($url, $body) = @_; my $base = $url; $_ = $url; # if there's at least one slash after the host, take off the last # pathname component if ( m@^https?://[^/]+/@io ) { $base =~ s@[^/]+$@@go; } # if there are no slashes after the host at all, put one on the end. if ( m@^https?://[^/]+$@io ) { $base .= "/"; } $_ = $body; # strip out newlines, compress whitespace s/[\r\n\t ]+/ /go; # nuke comments s///go; # There are certain web sites that list huge numbers of dictionary # words in their bodies or in their tags (surprise! # Porn sites tend not to be reputable!) # # I do not want webcollage to filter on content: I want it to select # randomly from the set of images on the web. All the logic here for # rejecting some images is really a set of heuristics for rejecting # images that are not really images: for rejecting *text* that is in # GIF/JPEG/PNG form. I don't want text, I want pictures, and I want # the content of the pictures to be randomly selected from among all # the available content. # # So, filtering out "dirty" pictures by looking for "dirty" keywords # would be wrong: dirty pictures exist, like it or not, so webcollage # should be able to select them. # # However, picking a random URL is a hard thing to do. The mechanism I'm # using is to search for a selection of random words. This is not # perfect, but works ok most of the time. The way it breaks down is when # some URLs get precedence because their pages list *every word* as # related -- those URLs come up more often than others. # # So, after we've retrieved a URL, if it has too many keywords, reject # it. We reject it not on the basis of what those keywords are, but on # the basis that by having so many, the page has gotten an unfair # advantage against our randomizer. # my $trip_count = 0; foreach my $trip (@tripwire_words) { $trip_count++ if m/$trip/i; } if ($trip_count >= $#tripwire_words - 2) { LOG (($verbose_filter || $verbose_load), "there is probably a dictionary in \"$url\": rejecting."); $rejected_urls{$url} = -1; $body = undef; $_ = undef; return (); } my @urls; my %unique_urls; foreach (split(/ * 1000) { LOG (($verbose_filter || $verbose_load), "excessive keywords ($L bytes) in $url: rejecting."); $rejected_urls{$url} = $L; $body = undef; $_ = undef; return (); } else { LOG ($verbose_filter, " keywords ($L bytes) in $url (ok)"); } } elsif (m/^ (IMG|A) \b .* (SRC|HREF) \s* = \s* ["']? (.*?) [ "'<>] /six || m/^ (LINK|META) \b .* (REL|PROPERTY) \s* = \s* ["']? (image_src|og:image) ["']? /six) { my $was_inline = (lc($1) eq 'img'); my $was_meta = (lc($1) eq 'link' || lc($1) eq 'meta'); my $link = $3; # For # and # if ($was_meta) { next unless (m/ (HREF|CONTENT) \s* = \s* ["']? (.*?) [ "'<>] /six); $link = $2; } my ( $width ) = m/width ?=[ \"]*(\d+)/oi; my ( $height ) = m/height ?=[ \"]*(\d+)/oi; $_ = $link; if ( m@^/@o ) { my $site; ( $site = $base ) =~ s@^(https?://[^/]*).*@$1@gio; $_ = "$site$link"; } elsif ( ! m@^[^/:?]+:@ ) { $_ = "$base$link"; s@/\./@/@g; 1 while (s@/[^/]+/\.\./@/@g); } # skip non-http if ( ! m@^https?://@io ) { next; } # skip non-image if ( ! m@[.](gif|jpg|jpeg|pjpg|pjpeg|png)$@io ) { next; } # skip really short or really narrow images if ( $width && $width < $min_width) { if (!$height) { $height = "?"; } LOG ($verbose_filter, " skip narrow image $_ (${width}x$height)"); next; } if ( $height && $height < $min_height) { if (!$width) { $width = "?"; } LOG ($verbose_filter, " skip short image $_ (${width}x$height)"); next; } # skip images with ratios that make them look like banners. if ($min_ratio && $width && $height && ($width * $min_ratio ) > $height) { if (!$height) { $height = "?"; } LOG ($verbose_filter, " skip bad ratio $_ (${width}x$height)"); next; } # skip GIFs with a small number of pixels -- those usually suck. if ($width && $height && m/\.gif$/io && ($width * $height) < $min_gif_area) { LOG ($verbose_filter, " skip small GIF $_ (${width}x$height)"); next; } # skip images with a URL that indicates a Yahoo thumbnail. if (m@\.yimg\.com/.*/t/@) { if (!$width) { $width = "?"; } if (!$height) { $height = "?"; } LOG ($verbose_filter, " skip yahoo thumb $_ (${width}x$height)"); next; } my $url = $_; if ($unique_urls{$url}) { LOG ($verbose_filter, " skip duplicate image $_"); next; } LOG ($verbose_filter, " image $url" . ($width && $height ? " (${width}x${height})" : "") . ($was_meta ? " (meta)" : $was_inline ? " (inline)" : "")); my $weight = 1; if ($was_meta) { $weight = 20; # meta tag images are far preferable to inline images. } else { if ($url !~ m@[.](gif|png)$@io ) { $weight += 2; # JPEGs are preferable to GIFs and PNGs. } if (! $was_inline) { $weight += 4; # pointers to images are preferable to inlined images. } } $unique_urls{$url}++; for (my $i = 0; $i < $weight; $i++) { $urls[++$#urls] = $url; } } } my $fsp = ($body =~ m@([^<>]+)@i); $base = $url unless $base; # pick a random element of the table if (@suitable) { my $i = int(rand(scalar @suitable)); my $url = $suitable[$i]; LOG ($verbose_load, "picked image " .($i+1) . "/" . ($#suitable+1) . ": $url"); return ($base, $url); } return; } ############################################################################ # # Subroutines for getting pages and images out of search engines # ############################################################################ sub pick_dictionary() { my @dicts = ("/usr/dict/words", "/usr/share/dict/words", "/usr/share/lib/dict/words", "/usr/share/dict/cracklib-small", "/usr/share/dict/cracklib-words" ); foreach my $f (@dicts) { if (-f $f) { $wordlist = $f; last; } } error ("$dicts[0] does not exist") unless defined($wordlist); } # returns a random word from the dictionary # sub random_word() { return undef unless open (my $in, '<', $wordlist); my $size = (stat($in))[7]; my $word = undef; my $count = 0; while (1) { error ("looping ($count) while reading $wordlist") if (++$count > 100); my $pos = int (rand ($size)); if (seek ($in, $pos, 0)) { $word = <$in>; # toss partial line $word = <$in>; # keep next line } next unless ($word); next if ($word =~ m/^[-\']/); $word = lc($word); $word =~ s/^.*-//s; $word =~ s/^[^a-z]+//s; $word =~ s/[^a-z]+$//s; $word =~ s/\'s$//s; $word =~ s/ys$/y/s; $word =~ s/ally$//s; $word =~ s/ly$//s; $word =~ s/ies$/y/s; $word =~ s/ally$/al/s; $word =~ s/izes$/ize/s; $word =~ s/esses$/ess/s; $word =~ s/(.{5})ing$/$1/s; next if (length ($word) > 14); last if ($word); } close ($in); if ( $word =~ s/\s/\+/gs ) { # convert intra-word spaces to "+". $word = "\%22$word\%22"; # And put quotes (%22) around it. } return $word; } sub random_words($) { my ($sep) = @_; return (random_word() . $sep . random_word() . $sep . random_word() . $sep . random_word() . $sep . random_word()); } sub url_quote($) { my ($s) = @_; $s =~ s|([^-a-zA-Z0-9.\@/_\r\n])|sprintf("%%%02X", ord($1))|ge; return $s; } sub url_unquote($) { my ($s) = @_; $s =~ s/[+]/ /g; $s =~ s/%([a-z0-9]{2})/chr(hex($1))/ige; return $s; } sub html_quote($) { my ($s) = @_; $s =~ s/&/&/gi; $s =~ s//>/gi; $s =~ s/\"/"/gi; return $s; } sub html_unquote($) { my ($s) = @_; $s =~ s/(&([a-z]+);)/{ $entity_table{$2} || $1; }/gexi; # e.g., ' $s =~ s/(&\#(\d+);)/{ chr($2) }/gexi; # e.g., ' return $s; } # Loads the given URL (a search on some search engine) and returns: # - the total number of hits the search engine claimed it had; # - a list of URLs from the page that the search engine returned; # Note that this list contains all kinds of internal search engine # junk URLs too -- caller must prune them. # sub pick_from_search_engine($$$) { my ( $timeout, $search_url, $words ) = @_; $_ = $words; s/%20/ /g; print STDERR "\n\n" if ($verbose_load); LOG ($verbose_load, "words: $_"); LOG ($verbose_load, "URL: $search_url"); $last_search = $search_url; # for warnings my $start = time; my ( $base, $body ) = get_document ($search_url, undef, $timeout); if (defined ($timeout)) { $timeout -= (time - $start); if ($timeout <= 0) { $body = undef; LOG (($verbose_net || $verbose_load), "timed out (late) for $search_url"); $suppress_audit = 1; return (); } } return () if (! $body); my @subpages; if ($body =~ m/^\{\"/s) { # Google AJAX JSON response. my @chunks = split (/"GsearchResultClass"/, $body); shift @chunks; my $body2 = ''; my $n = 1; foreach (@chunks) { my ($img) = m/"unescapedUrl":"(.*?)"/si; my ($url) = m/"originalContextUrl":"(.*?)"/si; next unless ($img && $url); $url = ("/imgres" . "?imgurl=" . url_quote($img) . "&imgrefurl=" . url_quote($url) . "&..."); $body2 .= "$n\n"; $n++; } $body = $body2 if $body2; } my $search_count = "?"; if ($body =~ m@found (approximately |about )?()?(\d+)()? image@) { $search_count = $3; } elsif ($body =~ m@((\d{1,3})(,\d{3})*) @i) { $search_count = $1; } elsif ($body =~ m@found ((\d{1,3})(,\d{3})*|\d+) Web p@) { $search_count = $1; } elsif ($body =~ m@found about ((\d{1,3})(,\d{3})*|\d+) results@) { $search_count = $1; } elsif ($body =~ m@\b\d+ - \d+ of (\d+)\b@i) { # avimages $search_count = $1; } elsif ($body =~ m@About ((\d{1,3})(,\d{3})*) images@i) { # avimages $search_count = $1; } elsif ($body =~ m@We found ((\d{1,3})(,\d{3})*|\d+) results@i) { # *vista $search_count = $1; } elsif ($body =~ m@ of about ((\d{1,3})(,\d{3})*)<@i) { # googleimages $search_count = $1; } elsif ($body =~ m@((\d{1,3})(,\d{3})*) Web sites were found@i) { $search_count = $1; # lycos } elsif ($body =~ m@WEB.*?RESULTS.*?\b((\d{1,3})(,\d{3})*)\b.*?Matches@i) { $search_count = $1; # hotbot } elsif ($body =~ m@no photos were found containing@i) { # avimages $search_count = "0"; } elsif ($body =~ m@found no document matching@i) { # avtext $search_count = "0"; } 1 while ($search_count =~ s/^(\d+)(\d{3})/$1,$2/); # if ($search_count eq "?" || $search_count eq "0") { # my $file = "/tmp/wc.html"; # open (my $out, '>', $file) || error ("writing $file: $!"); # print $out $body; # close $out; # print STDERR blurb() . "###### wrote $file\n"; # } my $length = length($body); my $href_count = 0; $_ = $body; s/[\r\n\t ]+/ /g; s/(]+)>@i; next unless $u; if (m/\bm="\{(.*?)\}"/s) { # Bing info is inside JSON crud my $json = html_unquote($1); my ($href) = ($json =~ m/\bsurl:"(.*?)"/s); my ($img) = ($json =~ m/\bimgurl:"(.*?)"/s); $u = "$img\t$href" if ($img && $href); } elsif ($u =~ m/^\"([^\"]*)\"/) { $u = $1 # quoted string } elsif ($u =~ m/^([^\s]*)\s/) { $u = $1; # or token } if ( $rejected_urls{$u} ) { LOG ($verbose_filter, " pre-rejecting candidate: $u"); next; } LOG ($verbose_http, " HREF: $u"); $subpages[++$#subpages] = $u; } if ( $#subpages < 0 ) { LOG ($verbose_filter, "found nothing on $base ($length bytes, $href_count links)."); return (); } LOG ($verbose_filter, "" . $#subpages+1 . " links on $search_url"); return ($search_count, @subpages); } sub depoison(@) { my (@urls) = @_; my @urls2 = (); foreach (@urls) { my ($h) = m@^https?://([^/: \t\r\n]+)@i; next unless defined($h); if ($poisoners{$h}) { LOG (($verbose_filter), " rejecting poisoner: $_"); next; } if ($h =~ m@([^.]+\.[^.]+\.[^.]+)$@ && $poisoners{$1}) { LOG (($verbose_filter), " rejecting poisoner: $_"); next; } if ($h =~ m@([^.]+\.[^.]+)$@ && $poisoners{$1}) { LOG (($verbose_filter), " rejecting poisoner: $_"); next; } push @urls2, $_; } return @urls2; } # given a list of URLs, picks one at random; loads it; and returns a # random image from it. # returns the url of the page loaded; the url of the image chosen. # sub pick_image_from_pages($$$$@) { my ($base, $total_hit_count, $unfiltered_link_count, $timeout, @pages) = @_; $total_hit_count = "?" unless defined($total_hit_count); @pages = depoison (@pages); LOG ($verbose_load, "" . ($#pages+1) . " candidates of $unfiltered_link_count links" . " ($total_hit_count total)"); return () if ($#pages < 0); my $i = int(rand($#pages+1)); my $page = $pages[$i]; LOG ($verbose_load, "picked page $page"); $suppress_audit = 1; my ( $base2, $body2 ) = get_document ($page, $base, $timeout); if (!$base2 || !$body2) { $body2 = undef; return (); } my $img = pick_image_from_body ($base2, $body2); $body2 = undef; if ($img) { return ($base2, $img); } else { return (); } } ############################################################################# ## ## Pick images from random pages returned by the Yahoo Random Link ## ############################################################################# # ## yahoorand #my $yahoo_random_link = "http://random.yahoo.com/fast/ryl"; # # # Picks a random page; picks a random image on that page; # returns two URLs: the page containing the image, and the image. # Returns () if nothing found this time. # #sub pick_from_yahoo_random_link($) { # my ($timeout) = @_; # # print STDERR "\n\n" if ($verbose_load); # LOG ($verbose_load, "URL: $yahoo_random_link"); # # $last_search = $yahoo_random_link; # for warnings # # $suppress_audit = 1; # # my ( $base, $body ) = get_document ($yahoo_random_link, undef, $timeout); # if (!$base || !$body) { # $body = undef; # return; # } # # LOG ($verbose_load, "redirected to: $base"); # # my $img = pick_image_from_body ($base, $body); # $body = undef; # # if ($img) { # return ($base, $img); # } else { # return (); # } #} ############################################################################ # # Pick images from random pages returned by the Alta Vista Random Link # Note: this seems to have gotten a *lot* less random lately (2007). # ############################################################################ # altavista my $alta_vista_random_link = "http://www.altavista.com/image/randomlink"; # Picks a random page; picks a random image on that page; # returns two URLs: the page containing the image, and the image. # Returns () if nothing found this time. # sub pick_from_alta_vista_random_link($) { my ($timeout) = @_; print STDERR "\n\n" if ($verbose_load); LOG ($verbose_load, "URL: $alta_vista_random_link"); $last_search = $alta_vista_random_link; # for warnings $suppress_audit = 1; my ( $base, $body ) = get_document ($alta_vista_random_link, undef, $timeout); if (!$base || !$body) { $body = undef; return; } LOG ($verbose_load, "redirected to: $base"); my $img = pick_image_from_body ($base, $body); $body = undef; if ($img) { return ($base, $img); } else { return (); } } ############################################################################ # # Pick images by feeding random words into Alta Vista Image Search # ############################################################################ my $alta_vista_images_url = "http://www.altavista.com/image/results" . "?ipht=1" . # photos "&igrph=1" . # graphics "&iclr=1" . # color "&ibw=1" . # b&w "&micat=1" . # no partner sites "&sc=on" . # "site collapse" "&q="; # avimages sub pick_from_alta_vista_images($) { my ($timeout) = @_; my $words = random_word(); my $page = (int(rand(9)) + 1); my $search_url = $alta_vista_images_url . $words; if ($page > 1) { $search_url .= "&pgno=" . $page; # page number $search_url .= "&stq=" . (($page-1) * 12); # first hit result on page } my ($search_hit_count, @subpages) = pick_from_search_engine ($timeout, $search_url, $words); my @candidates = (); foreach my $u (@subpages) { # avimages is encoding their URLs now. next unless ($u =~ s/^.*\*\*(http%3a.*$)/$1/gsi); $u = url_unquote($u); next unless ($u =~ m@^https?://@i); # skip non-HTTP or relative URLs next if ($u =~ m@[/.]altavista\.com\b@i); # skip altavista builtins next if ($u =~ m@[/.]yahoo\.com\b@i); # yahoo and av in cahoots? next if ($u =~ m@[/.]doubleclick\.net\b@i); # you cretins next if ($u =~ m@[/.]clicktomarket\.com\b@i); # more cretins next if ($u =~ m@[/.]viewimages\.com\b@i); # stacked deck next if ($u =~ m@[/.]gettyimages\.com\b@i); LOG ($verbose_filter, " candidate: $u"); push @candidates, $u; } return pick_image_from_pages ($search_url, $search_hit_count, $#subpages+1, $timeout, @candidates); } ############################################################################ # # Pick images from Aptix security cameras # Cribbed liberally from google image search code. # By Jason Sullivan # ############################################################################ my $aptix_images_url = ("http://www.google.com/search" . "?q=inurl:%22jpg/image.jpg%3Fr%3D%22"); # securitycam sub pick_from_security_camera($) { my ($timeout) = @_; my $page = (int(rand(9)) + 1); my $num = 20; # 20 images per page my $search_url = $aptix_images_url; if ($page > 1) { $search_url .= "&start=" . $page*$num; # page number $search_url .= "&num=" . $num; #images per page } my ($search_hit_count, @subpages) = pick_from_search_engine ($timeout, $search_url, ''); my @candidates = (); my %referers; foreach my $u (@subpages) { next if ($u =~ m@[/.]google\.com\b@i); # skip google builtins (most links) next unless ($u =~ m@jpg/image.jpg\?r=@i); # All pics contain this LOG ($verbose_filter, " candidate: $u"); push @candidates, $u; $referers{$u} = $u; } @candidates = depoison (@candidates); return () if ($#candidates < 0); my $i = int(rand($#candidates+1)); my $img = $candidates[$i]; my $ref = $referers{$img}; LOG ($verbose_load, "picked image " . ($i+1) . ": $img (on $ref)"); return ($ref, $img); } ############################################################################ # # Pick images by feeding random words into Google Image Search. # By Charles Gales # ############################################################################ my $google_images_url = "http://ajax.googleapis.com/ajax/services/" . "search/images" . "?v=1.0" . "&rsz=large" . "&q="; # googleimgs sub pick_from_google_images($;$$) { my ($timeout, $words, $max_page) = @_; if (!defined($words)) { $words = random_word(); # only one word for Google } my $off = int(rand(40)); my $search_url = $google_images_url . $words . "&start=" . $off; my ($search_hit_count, @subpages) = pick_from_search_engine ($timeout, $search_url, $words); my @candidates = (); my %referers; foreach my $u (@subpages) { next unless ($u =~ m@imgres\?imgurl@i); # All pics start with this next if ($u =~ m@[/.]google\.com\b@i); # skip google builtins $u = html_unquote($u); if ($u =~ m@^/imgres\?imgurl=(.*?)&imgrefurl=(.*?)\&@) { my $ref = $2; my $img = $1; $ref = url_decode($ref); $img = url_decode($img); $img = "http://$img" unless ($img =~ m/^https?:/i); LOG ($verbose_filter, " candidate: $ref"); push @candidates, $img; $referers{$img} = $ref; } } @candidates = depoison (@candidates); return () if ($#candidates < 0); my $i = int(rand($#candidates+1)); my $img = $candidates[$i]; my $ref = $referers{$img}; LOG ($verbose_load, "picked image " . ($i+1) . ": $img (on $ref)"); return ($ref, $img); } ############################################################################ # # Pick images by feeding random numbers into Google Image Search. # By jwz, suggested by Ian O'Donnell. # ############################################################################ # googlenums sub pick_from_google_image_numbers($) { my ($timeout) = @_; my $max = 9999; my $number = int(rand($max)); $number = sprintf("%04d", $number) if (rand() < 0.3); pick_from_google_images ($timeout, "$number"); } ############################################################################ # # Pick images by feeding random digital camera file names into # Google Image Search. # By jwz, inspired by the excellent Random Personal Picture Finder # at http://www.diddly.com/random/ # ############################################################################ my @photomakers = ( # # Common digital camera file name formats, as described at # http://www.diddly.com/random/about.html # sub { sprintf ("dcp%05d.jpg", int(rand(4000))); }, # Kodak sub { sprintf ("dsc%05d.jpg", int(rand(4000))); }, # Nikon sub { sprintf ("dscn%04d.jpg", int(rand(4000))); }, # Nikon sub { sprintf ("mvc-%03d.jpg", int(rand(999))); }, # Sony Mavica sub { sprintf ("mvc%05d.jpg", int(rand(9999))); }, # Sony Mavica sub { sprintf ("P101%04d.jpg", int(rand(9999))); }, # Olympus w/ date=101 sub { sprintf ("P%x%02d%04d.jpg", # Olympus int(rand(0xC)), int(rand(30))+1, rand(9999)); }, sub { sprintf ("IMG_%03d.jpg", int(rand(999))); }, # ? sub { sprintf ("IMAG%04d.jpg", int(rand(9999))); }, # RCA and Samsung sub { my $n = int(rand(9999)); # Canon sprintf ("1%02d-%04d.jpg", int($n/100), $n); }, sub { my $n = int(rand(9999)); # Canon sprintf ("1%02d-%04d_IMG.jpg", int($n/100), $n); }, sub { sprintf ("IMG_%04d.jpg", int(rand(9999))); }, # Canon sub { sprintf ("dscf%04d.jpg", int(rand(9999))); }, # Fuji Finepix sub { sprintf ("pdrm%04d.jpg", int(rand(9999))); }, # Toshiba PDR sub { sprintf ("IM%06d.jpg", int(rand(9999))); }, # HP Photosmart sub { sprintf ("EX%06d.jpg", int(rand(9999))); }, # HP Photosmart # sub { my $n = int(rand(3)); # Kodak DC-40,50,120 # sprintf ("DC%04d%s.jpg", int(rand(9999)), # $n == 0 ? 'S' : $n == 1 ? 'M' : 'L'); }, sub { sprintf ("pict%04d.jpg", int(rand(9999))); }, # Minolta Dimage sub { sprintf ("P%07d.jpg", int(rand(9999))); }, # Kodak DC290 # sub { sprintf ("%02d%02d%04d.jpg", # Casio QV3000, QV4000 # int(rand(12))+1, int(rand(31))+1, # int(rand(999))); }, # sub { sprintf ("%02d%x%02d%04d.jpg", # Casio QV7000 # int(rand(6)), # year # int(rand(12))+1, int(rand(31))+1, # int(rand(999))); }, sub { sprintf ("IMGP%04d.jpg", int(rand(9999))); }, # Pentax Optio S sub { sprintf ("PANA%04d.jpg", int(rand(9999))); }, # Panasonic vid still sub { sprintf ("HPIM%04d.jpg", int(rand(9999))); }, # HP Photosmart sub { sprintf ("PCDV%04d.jpg", int(rand(9999))); }, # ? ); # googlephotos sub pick_from_google_image_photos($) { my ($timeout) = @_; my $i = int(rand($#photomakers + 1)); my $fn = $photomakers[$i]; my $file = &$fn; #$file .= "%20filetype:jpg"; pick_from_google_images ($timeout, $file); } ############################################################################ # # Pick images by feeding random words into Google Image Search. # By the way: fuck Microsoft. # ############################################################################ my $bing_images_url = "http://www.bing.com/images/async?q="; # bingimgs sub pick_from_bing_images($;$$) { my ($timeout, $words, $max_page) = @_; if (!defined($words)) { $words = random_word(); # only one word for Bing } my $off = int(rand(300)); my $search_url = $bing_images_url . $words . "&first=" . $off; my ($search_hit_count, @subpages) = pick_from_search_engine ($timeout, $search_url, $words); my @candidates = (); my %referers; foreach my $u (@subpages) { my ($img, $ref) = ($u =~ m/^(.*?)\t(.*)$/s); next unless $img; LOG ($verbose_filter, " candidate: $ref"); push @candidates, $img; $referers{$img} = $ref; } @candidates = depoison (@candidates); return () if ($#candidates < 0); my $i = int(rand($#candidates+1)); my $img = $candidates[$i]; my $ref = $referers{$img}; LOG ($verbose_load, "picked image " . ($i+1) . ": $img (on $ref)"); return ($ref, $img); } ############################################################################ # # Pick images by feeding random numbers into Bing Image Search. # ############################################################################ # bingnums sub pick_from_bing_image_numbers($) { my ($timeout) = @_; my $max = 9999; my $number = int(rand($max)); $number = sprintf("%04d", $number) if (rand() < 0.3); pick_from_bing_images ($timeout, "$number"); } ############################################################################ # # Pick images by feeding random numbers into Bing Image Search. # ############################################################################ # bingphotos sub pick_from_bing_image_photos($) { my ($timeout) = @_; my $i = int(rand($#photomakers + 1)); my $fn = $photomakers[$i]; my $file = &$fn; pick_from_bing_images ($timeout, $file); } ############################################################################ # # Pick images by feeding random words into Alta Vista Text Search # ############################################################################ my $alta_vista_url = "http://www.altavista.com/web/results" . "?pg=aq" . "&aqmode=s" . "&filetype=html" . "&sc=on" . # "site collapse" "&nbq=50" . "&aqo="; # avtext sub pick_from_alta_vista_text($) { my ($timeout) = @_; my $words = random_words('%20'); my $page = (int(rand(9)) + 1); my $search_url = $alta_vista_url . $words; if ($page > 1) { $search_url .= "&pgno=" . $page; $search_url .= "&stq=" . (($page-1) * 10); } my ($search_hit_count, @subpages) = pick_from_search_engine ($timeout, $search_url, $words); my @candidates = (); foreach my $u (@subpages) { # Those altavista fuckers are playing really nasty redirection games # these days: the filter your clicks through their site, but use # onMouseOver to make it look like they're not! Well, it makes it # easier for us to identify search results... # next unless ($u =~ s/^.*\*\*(http%3a.*$)/$1/gsi); $u = url_unquote($u); next unless ($u =~ m@^https?://@i); # skip non-HTTP or relative URLs next if ($u =~ m@[/.]altavista\.com\b@i); # skip altavista builtins next if ($u =~ m@[/.]yahoo\.com\b@i); # yahoo and av in cahoots? LOG ($verbose_filter, " candidate: $u"); push @candidates, $u; } return pick_image_from_pages ($search_url, $search_hit_count, $#subpages+1, $timeout, @candidates); } ############################################################################ # # Pick images by feeding random words into Hotbot # ############################################################################ my $hotbot_search_url =("http://hotbot.lycos.com/default.asp" . "?ca=w" . "&descriptiontype=0" . "&imagetoggle=1" . "&matchmode=any" . "&nummod=2" . "&recordcount=50" . "&sitegroup=1" . "&stem=1" . "&cobrand=undefined" . "&query="); sub pick_from_hotbot_text($) { my ($timeout) = @_; $last_search = $hotbot_search_url; # for warnings # lycos seems to always give us back dictionaries and word lists if # we search for more than one word... # my $words = random_word(); my $start = int(rand(8)) * 10 + 1; my $search_url = $hotbot_search_url . $words . "&first=$start&page=more"; my ($search_hit_count, @subpages) = pick_from_search_engine ($timeout, $search_url, $words); my @candidates = (); foreach my $u (@subpages) { # Hotbot plays redirection games too # (not any more?) # next unless ($u =~ m@/director.asp\?.*\btarget=([^&]+)@); # $u = url_decode($1); next unless ($u =~ m@^https?://@i); # skip non-HTTP or relative URLs next if ($u =~ m@[/.]hotbot\.com\b@i); # skip hotbot builtins next if ($u =~ m@[/.]lycos\.com\b@i); # skip hotbot builtins next if ($u =~ m@[/.]inktomi\.com\b@i); # skip hotbot builtins LOG ($verbose_filter, " candidate: $u"); push @candidates, $u; } return pick_image_from_pages ($search_url, $search_hit_count, $#subpages+1, $timeout, @candidates); } ############################################################################ # # Pick images by feeding random words into Lycos # ############################################################################ my $lycos_search_url = "http://search.lycos.com/default.asp" . "?lpv=1" . "&loc=searchhp" . "&tab=web" . "&query="; sub pick_from_lycos_text($) { my ($timeout) = @_; $last_search = $lycos_search_url; # for warnings # lycos seems to always give us back dictionaries and word lists if # we search for more than one word... # my $words = random_word(); my $start = int(rand(8)) * 10 + 1; my $search_url = $lycos_search_url . $words . "&first=$start&page=more"; my ($search_hit_count, @subpages) = pick_from_search_engine ($timeout, $search_url, $words); my @candidates = (); foreach my $u (@subpages) { # Lycos plays redirection games. # (not any more?) # next unless ($u =~ m@^https?://click.lycos.com/director.asp # .* # \btarget=([^&]+) # .* # @x); # $u = url_decode($1); next unless ($u =~ m@^https?://@i); # skip non-HTTP or relative URLs next if ($u =~ m@[/.]hotbot\.com\b@i); # skip lycos builtins next if ($u =~ m@[/.]lycos\.com\b@i); # skip lycos builtins next if ($u =~ m@[/.]terralycos\.com\b@i); # skip lycos builtins next if ($u =~ m@[/.]inktomi\.com\b@i); # skip lycos builtins LOG ($verbose_filter, " candidate: $u"); push @candidates, $u; } return pick_image_from_pages ($search_url, $search_hit_count, $#subpages+1, $timeout, @candidates); } ############################################################################ # # Pick images by feeding random words into news.yahoo.com # ############################################################################ my $yahoo_news_url = "http://news.search.yahoo.com/search/news" . "?c=news_photos" . "&p="; # yahoonews sub pick_from_yahoo_news_text($) { my ($timeout) = @_; $last_search = $yahoo_news_url; # for warnings my $words = random_word(); my $search_url = $yahoo_news_url . $words; my ($search_hit_count, @subpages) = pick_from_search_engine ($timeout, $search_url, $words); my @candidates = (); foreach my $u (@subpages) { # de-redirectize the URLs $u =~ s@^https?://rds\.yahoo\.com/.*-http%3A@http:@s; # only accept URLs on Yahoo's news site next unless ($u =~ m@^https?://dailynews\.yahoo\.com/@i || $u =~ m@^https?://story\.news\.yahoo\.com/@i); next unless ($u =~ m@&u=/@); LOG ($verbose_filter, " candidate: $u"); push @candidates, $u; } return pick_image_from_pages ($search_url, $search_hit_count, $#subpages+1, $timeout, @candidates); } ############################################################################ # # Pick images from LiveJournal's list of recently-posted images. # ############################################################################ my $livejournal_img_url = "http://www.livejournal.com/stats/latest-img.bml"; # With most of our image sources, we get a random page and then select # from the images on it. However, in the case of LiveJournal, the page # of images tends to update slowly; so we'll remember the last N entries # on it and randomly select from those, to get a wider variety each time. my $lj_cache_size = 1000; my @lj_cache = (); # fifo, for ordering by age my %lj_cache = (); # hash, for detecting dups # livejournal sub pick_from_livejournal_images($) { my ($timeout) = @_; $last_search = $livejournal_img_url; # for warnings my ( $base, $body ) = get_document ($livejournal_img_url, undef, $timeout); # Often the document comes back empty. If so, just use the cache. # return () unless $body; $body = '' unless defined($body); $body =~ s/\n/ /gs; $body =~ s/(= $lj_cache_size) { my $pairP = shift @lj_cache; my $img = $pairP->[0]; delete $lj_cache{$img}; } LOG ($verbose_load, "picked image " .($i+1) . "/$n: $img"); return ($page, $img); } ############################################################################ # # Pick images from ircimages.com (images that have been in the /topic of # various IRC channels.) # ############################################################################ my $ircimages_url = "http://ircimages.com/"; # ircimages sub pick_from_ircimages($) { my ($timeout) = @_; $last_search = $ircimages_url; # for warnings my $n = int(rand(2900)); my $search_url = $ircimages_url . "page-$n"; my ( $base, $body ) = get_document ($search_url, undef, $timeout); return () unless $body; my @candidates = (); $body =~ s/\n/ /gs; $body =~ s/(]+)>@i; next unless $u; if ($u =~ m/^\"([^\"]*)\"/) { $u = $1; } # quoted string elsif ($u =~ m/^([^\s]*)\s/) { $u = $1; } # or token next unless ($u =~ m/^https?:/i); next if ($u =~ m@^https?://(searchirc\.com\|ircimages\.com)@i); next unless ($u =~ m@[.](gif|jpg|jpeg|pjpg|pjpeg|png)$@i); LOG ($verbose_http, " HREF: $u"); push @candidates, $u; } LOG ($verbose_filter, "" . $#candidates+1 . " links on $search_url"); return () if ($#candidates == -1); my $i = int(rand($#candidates+1)); my $img = $candidates[$i]; LOG ($verbose_load, "picked image " .($i+1) . "/" . ($#candidates+1) . ": $img"); $search_url = $img; # hmm... return ($search_url, $img); } ############################################################################ # # Pick images from Twitpic's list of recently-posted images. # ############################################################################ my $twitpic_img_url = "http://twitpic.com/public_timeline/feed.rss"; # With most of our image sources, we get a random page and then select # from the images on it. However, in the case of Twitpic, the page # of images tends to update slowly; so we'll remember the last N entries # on it and randomly select from those, to get a wider variety each time. my $twitpic_cache_size = 1000; my @twitpic_cache = (); # fifo, for ordering by age my %twitpic_cache = (); # hash, for detecting dups # twitpic sub pick_from_twitpic_images($) { my ($timeout) = @_; $last_search = $twitpic_img_url; # for warnings my ( $base, $body ) = get_document ($twitpic_img_url, undef, $timeout); # Update the cache. if ($body) { $body =~ s/\n/ /gs; $body =~ s/(([^<>]*)@si); my $page = html_unquote ($1); $page =~ s@/$@@s; $page .= '/full'; next if ($twitpic_cache{$page}); # already have it LOG ($verbose_filter, " candidate: $page"); push @twitpic_cache, $page; $twitpic_cache{$page} = $page; } } # Pull from the cache. return () if ($#twitpic_cache == -1); my $n = $#twitpic_cache+1; my $i = int(rand($n)); my $page = $twitpic_cache[$i]; # delete this one from @twitpic_cache and from %twitpic_cache. # @twitpic_cache = ( @twitpic_cache[0 .. $i-1], @twitpic_cache[$i+1 .. $#twitpic_cache] ); delete $twitpic_cache{$page}; # Keep the size of the cache under the limit by nuking older entries # while ($#twitpic_cache >= $twitpic_cache_size) { my $page = shift @twitpic_cache; delete $twitpic_cache{$page}; } ( $base, $body ) = get_document ($page, undef, $timeout); my $img = undef; $body = '' unless defined($body); foreach (split (/= $twitter_cache_size) { my $page = shift @twitter_cache; delete $twitter_cache{$page}; } LOG ($verbose_load, "picked page $url"); $suppress_audit = 1; return ($page, $url); } ############################################################################ # # Pick images from Flickr's page of recently-posted photos. # ############################################################################ my $flickr_img_url = "http://www.flickr.com/explore/"; # Like LiveJournal, the Flickr page of images tends to update slowly, # so remember the last N entries on it and randomly select from those. # I know that Flickr has an API (http://www.flickr.com/services/api/) # but it was easy enough to scrape the HTML, so I didn't bother exploring. my $flickr_cache_size = 1000; my @flickr_cache = (); # fifo, for ordering by age my %flickr_cache = (); # hash, for detecting dups # flickr_recent sub pick_from_flickr_recent($) { my ($timeout) = @_; my $start = 16 * int(rand(100)); $last_search = $flickr_img_url; # for warnings $last_search .= "?start=$start" if ($start > 0); my ( $base, $body ) = get_document ($last_search, undef, $timeout); # If the document comes back empty. just use the cache. # return () unless $body; $body = '' unless defined($body); my $count = 0; my $count2 = 0; if ($body =~ m@{ *"_data": \[ ( .*? \} ) \]@six) { $body = $1; } else { LOG ($verbose_load, "flickr unparsable: $last_search"); return (); } $body =~ s/[\r\n]/ /gs; $body =~ s/(\},) *(\{)/$1\n$2/gs; # "_flickrModelRegistry" foreach my $chunk (split (/\n/, $body)) { my ($img) = ($chunk =~ m@"displayUrl": *"(.*?)"@six); next unless defined ($img); $img =~ s/\\//gs; $img = "//" unless ($img =~ m@^/@s); $img = "http:$img" unless ($img =~ m/^http/s); my ($user) = ($chunk =~ m/"pathAlias": *"(.*?)"/si); next unless defined ($user); my ($id) = ($img =~ m@/\d+/(\d+)_([\da-f]+)_@si); my ($page) = "https://www.flickr.com/photos/$user/$id/"; # $img =~ s/_[a-z](\.[a-z\d]+)$/$1/si; # take off "thumb" suffix $count++; next if ($flickr_cache{$img}); # already have it my @pair = ($img, $page, $start); LOG ($verbose_filter, " candidate: $img"); push @flickr_cache, \@pair; $flickr_cache{$img} = \@pair; $count2++; } return () if ($#flickr_cache == -1); my $n = $#flickr_cache+1; my $i = int(rand($n)); my ($img, $page) = @{$flickr_cache[$i]}; # delete this one from @flickr_cache and from %flickr_cache. # @flickr_cache = ( @flickr_cache[0 .. $i-1], @flickr_cache[$i+1 .. $#flickr_cache] ); delete $flickr_cache{$img}; # Keep the size of the cache under the limit by nuking older entries # while ($#flickr_cache >= $flickr_cache_size) { my $pairP = shift @flickr_cache; my $img = $pairP->[0]; delete $flickr_cache{$img}; } LOG ($verbose_load, "picked image " .($i+1) . "/$n: $img"); return ($page, $img); } ############################################################################ # # Pick images from a random RSS feed on Flickr. # ############################################################################ my $flickr_rss_base = ("http://www.flickr.com/services/feeds/photos_public.gne". "?format=rss_200_enc&tagmode=any&tags="); # Picks a random RSS feed; picks a random image from that feed; # returns 2 URLs: the page containing the image, and the image. # Mostly by Joe Mcmahon # # flickr_random sub pick_from_flickr_random($) { my $timeout = shift; my $words = random_words(','); my $rss = $flickr_rss_base . $words; $last_search = $rss; $_ = $words; s/,/ /g; print STDERR "\n\n" if ($verbose_load); LOG ($verbose_load, "words: $_"); LOG ($verbose_load, "URL: $last_search"); $suppress_audit = 1; my ( $base, $body ) = get_document ($last_search, undef, $timeout); if (!$base || !$body) { $body = undef; return; } my $img; ($base, $img) = pick_image_from_rss ($base, $body); $body = undef; return () unless defined ($img); LOG ($verbose_load, "redirected to: $base"); return ($base, $img); } ############################################################################ # # Pick random images from Instagram. # ############################################################################ my $instagram_url_base = "https://api.instagram.com/v1/media/popular"; # instagram_random sub pick_from_instagram($) { my $timeout = shift; # Liberated access tokens. # jsdo.it search for: instagram client_id # Google search for: instagram "&client_id=" site:jsfiddle.net my @tokens = ('b59fbe4563944b6c88cced13495c0f49', # gramfeed.com 'fa26679250df49c48a33fbcf30aae989', # instac.at 'd9494686198d4dfeb954979a3e270e5e', # iconosquare.com '793ef48bb18e4197b61afce2d799b81c', # jsdo.it '67b8a3e0073449bba70600d0fc68e6cb', # jsdo.it '26a098e0df4d4b9ea8b4ce6c505b7742', # jsdo.it '2437cbcd906a4c10940f990d283d3cd5', # jsdo.it '191c7d7d5312464cbd92134f36ffdab5', # jsdo.it 'acfec809437b4340b2c38f66503af774', # jsdo.it 'e9f77604a3a24beba949c12d18130988', # jsdo.it '2cd7bcf68ae346529770073d311575b3', # jsdo.it '830c600fe8d742e2ab3f3b94f9bb22b7', # jsdo.it '55865a0397ad41e5997dd95ef4df8da1', # jsdo.it '192a5742f3644ea8bed1d25e439286a8', # jsdo.it '38ed1477e7a44595861b8842cdb8ba23', # jsdo.it 'e52f79f645f54488ad0cc47f6f55ade6', # jsfiddle.net ); my $tok = $tokens[int(rand($#tokens+1))]; $last_search = $instagram_url_base . "?client_id=" . $tok; print STDERR "\n\n" if ($verbose_load); LOG ($verbose_load, "URL: $last_search"); my ( $base, $body ) = get_document ($last_search, undef, $timeout); if (!$base || !$body) { $body = undef; return; } $body =~ s/("link")/\001$1/gs; my @chunks = split(/\001/, $body); shift @chunks; my @urls = (); foreach (@chunks) { s/\\//gs; my ($url) = m/"link":\s*"(.*?)"/s; my ($img) = m/"standard_resolution":\{"url":\s*"(.*?)"/s; ($img) = m/"url":\s*"(.*?)"/s unless $url; next unless ($url && $img); push @urls, [ $url, $img ]; } if ($#urls < 0) { LOG ($verbose_load, "no images on $last_search"); return (); } my $i = int(rand($#urls+1)); my ($url, $img) = @{$urls[$i]}; LOG ($verbose_load, "picked image " .($i+1) . "/" . ($#urls+1) . ": $url"); return ($url, $img); } ############################################################################ # # Pick images by waiting for driftnet to populate a temp dir with files. # Requires driftnet version 0.1.5 or later. # (Driftnet is a program by Chris Lightfoot that sniffs your local ethernet # for images being downloaded by others.) # Driftnet/webcollage integration by jwz. # ############################################################################ # driftnet sub pick_from_driftnet($) { my ($timeout) = @_; my $id = $driftnet_magic; my $dir = $driftnet_dir; my $start = time; my $now; error ("\$driftnet_dir unset?") unless ($dir); $dir =~ s@/+$@@; error ("$dir unreadable") unless (-d "$dir/."); $timeout = $http_timeout unless ($timeout); $last_search = $id; while ($now = time, $now < $start + $timeout) { opendir (my $dir, $dir) || error ("$dir: $!"); while (my $file = readdir($dir)) { next if ($file =~ m/^\./); $file = "$dir/$file"; closedir ($dir); LOG ($verbose_load, "picked file $file ($id)"); return ($id, $file); } closedir ($dir); } LOG (($verbose_net || $verbose_load), "timed out for $id"); return (); } sub get_driftnet_file($) { my ($file) = @_; error ("\$driftnet_dir unset?") unless ($driftnet_dir); my $id = $driftnet_magic; error ("$id: $file not in $driftnet_dir?") unless ($file =~ m@^\Q$driftnet_dir@o); open (my $in, '<', $file) || error ("$id: $file: $!"); my $body = ''; local $/ = undef; # read entire file $body = <$in>; close ($in) || error ("$id: $file: $!"); unlink ($file) || error ("$id: $file: rm: $!"); return ($id, $body); } sub spawn_driftnet($) { my ($cmd) = @_; # make a directory to use. while (1) { my $tmp = $ENV{TEMPDIR} || "/tmp"; $driftnet_dir = sprintf ("$tmp/driftcollage-%08x", rand(0xffffffff)); LOG ($verbose_exec, "mkdir $driftnet_dir"); last if mkdir ($driftnet_dir, 0700); } if (! ($cmd =~ m/\s/)) { # if the command didn't have any arguments in it, then it must be just # a pointer to the executable. Append the default args to it. my $dargs = $default_driftnet_cmd; $dargs =~ s/^[^\s]+//; $cmd .= $dargs; } # point the driftnet command at our newly-minted private directory. # $cmd .= " -d $driftnet_dir"; $cmd .= ">/dev/null" unless ($verbose_exec); my $pid = fork(); if ($pid < 0) { error ("fork: $!\n"); } if ($pid) { # parent fork push @pids_to_kill, $pid; LOG ($verbose_exec, "forked for \"$cmd\""); } else { # child fork nontrapping_system ($cmd) || error ("exec: $!"); } # wait a bit, then make sure the process actually started up. # sleep (1); error ("pid $pid failed to start \"$cmd\"") unless (1 == kill (0, $pid)); } # local-directory sub pick_from_local_dir($) { my ($timeout) = @_; my $id = $local_magic; $last_search = $id; my $dir = $local_dir; error ("\$local_dir unset?") unless ($dir); $dir =~ s@/+$@@; error ("$dir unreadable") unless (-d "$dir/."); my $v = ($verbose_exec ? "-v" : ""); my $pick = `xscreensaver-getimage-file $v "$dir"`; $pick =~ s/\s+$//s; $pick = "$dir/$pick" unless ($pick =~ m@^/@s); # relative path LOG ($verbose_load, "picked file $pick ($id)"); return ($id, $pick); } sub get_local_file($) { my ($file) = @_; error ("\$local_dir unset?") unless ($local_dir); my $id = $local_magic; error ("$id: $file not in $local_dir?") unless ($file =~ m@^\Q$local_dir@o); open (my $in, '<', $file) || error ("$id: $file: $!"); local $/ = undef; # read entire file my $body = <$in>; close ($in) || error ("$id: $file: $!"); return ($id, $body); } ############################################################################ # # Pick a random image in a random way # ############################################################################ # Picks a random image on a random page, and returns two URLs: # the page containing the image, and the image. # Returns () if nothing found this time. # sub pick_image(;$) { my ($timeout) = @_; $current_state = "select"; $load_method = "none"; my $n = int(rand(100)); my $fn = undef; my $total = 0; my @rest = @search_methods; while (@rest) { my $pct = shift @rest; my $name = shift @rest; my $tfn = shift @rest; $total += $pct; if ($total > $n && !defined($fn)) { $fn = $tfn; $current_state = $name; $load_method = $current_state; } } if ($total != 100) { error ("internal error: \@search_methods totals to $total%!"); } record_attempt ($current_state); return $fn->($timeout); } ############################################################################ # # Statistics and logging # ############################################################################ sub timestr() { return strftime ("%H:%M:%S: ", localtime); } sub blurb() { return "$progname: " . timestr() . "$current_state: "; } sub error($) { my ($err) = @_; print STDERR blurb() . "$err\n"; exit 1; } sub stacktrace() { my $i = 1; print STDERR "$progname: stack trace:\n"; while (1) { my ($package, $filename, $line, $subroutine) = caller($i++); last unless defined($package); $filename =~ s@^.*/@@; print STDERR " $filename#$line, $subroutine\n"; } } my $lastlog = ""; sub clearlog() { $lastlog = ""; } sub showlog() { my $head = "$progname: DEBUG: "; foreach (split (/\n/, $lastlog)) { print STDERR "$head$_\n"; } $lastlog = ""; } sub LOG($$) { my ($print, $msg) = @_; my $blurb = timestr() . "$current_state: "; $lastlog .= "$blurb$msg\n"; print STDERR "$progname: $blurb$msg\n" if $print; } my %stats_attempts; my %stats_successes; my %stats_elapsed; my $last_state = undef; sub record_attempt($) { my ($name) = @_; if ($last_state) { record_failure($last_state) unless ($image_succeeded > 0); } $last_state = $name; clearlog(); report_performance(); start_timer($name); $image_succeeded = 0; $suppress_audit = 0; } sub record_success($$$) { my ($name, $url, $base) = @_; if (defined($stats_successes{$name})) { $stats_successes{$name}++; } else { $stats_successes{$name} = 1; } stop_timer ($name, 1); my $o = $current_state; $current_state = $name; save_recent_url ($url, $base); $current_state = $o; $image_succeeded = 1; clearlog(); } sub record_failure($) { my ($name) = @_; return if $image_succeeded; stop_timer ($name, 0); if ($verbose_load && !$verbose_exec) { if ($suppress_audit) { print STDERR "$progname: " . timestr() . "(audit log suppressed)\n"; return; } my $o = $current_state; $current_state = "DEBUG"; my $line = "#" x 78; print STDERR "\n\n\n"; print STDERR ("#" x 78) . "\n"; print STDERR blurb() . "failed to get an image. Full audit log:\n"; print STDERR "\n"; showlog(); print STDERR ("-" x 78) . "\n"; print STDERR "\n\n"; $current_state = $o; } $image_succeeded = 0; } sub stats_of($) { my ($name) = @_; my $i = $stats_successes{$name}; my $j = $stats_attempts{$name}; $i = 0 unless $i; $j = 0 unless $j; return "" . ($j ? int($i * 100 / $j) : "0") . "%"; } my $current_start_time = 0; sub start_timer($) { my ($name) = @_; $current_start_time = time; if (defined($stats_attempts{$name})) { $stats_attempts{$name}++; } else { $stats_attempts{$name} = 1; } if (!defined($stats_elapsed{$name})) { $stats_elapsed{$name} = 0; } } sub stop_timer($$) { my ($name, $success) = @_; $stats_elapsed{$name} += time - $current_start_time; } my $last_report_time = 0; sub report_performance() { return unless $verbose_warnings; my $now = time; return unless ($now >= $last_report_time + $report_performance_interval); my $ot = $last_report_time; $last_report_time = $now; return if ($ot == 0); my $blurb = "$progname: " . timestr(); print STDERR "\n"; print STDERR "${blurb}Current standings:\n"; foreach my $name (sort keys (%stats_attempts)) { my $try = $stats_attempts{$name}; my $suc = $stats_successes{$name} || 0; my $pct = int($suc * 100 / $try); my $secs = $stats_elapsed{$name}; my $secs_link = $secs / $try; print STDERR sprintf ("$blurb %-14s %4s (%d/%d);" . " \t %.1f secs/link\n", "$name:", "$pct%", $suc, $try, $secs_link); } } my $max_recent_images = 400; my $max_recent_sites = 20; my @recent_images = (); my @recent_sites = (); sub save_recent_url($$) { my ($url, $base) = @_; return unless ($verbose_warnings); $_ = $url; my ($site) = m@^https?://([^ \t\n\r/:]+)@; return unless defined ($site); if ($base eq $driftnet_magic || $base eq $local_magic) { $site = $base; @recent_images = (); } my $done = 0; foreach (@recent_images) { if ($_ eq $url) { print STDERR blurb() . "WARNING: recently-duplicated image: $url" . " (on $base via $last_search)\n"; $done = 1; last; } } # suppress "duplicate site" warning via %warningless_sites. # if ($warningless_sites{$site}) { $done = 1; } elsif ($site =~ m@([^.]+\.[^.]+\.[^.]+)$@ && $warningless_sites{$1}) { $done = 1; } elsif ($site =~ m@([^.]+\.[^.]+)$@ && $warningless_sites{$1}) { $done = 1; } if (!$done) { foreach (@recent_sites) { if ($_ eq $site) { print STDERR blurb() . "WARNING: recently-duplicated site: $site" . " ($url on $base via $last_search)\n"; last; } } } push @recent_images, $url; push @recent_sites, $site; shift @recent_images if ($#recent_images >= $max_recent_images); shift @recent_sites if ($#recent_sites >= $max_recent_sites); } ############################################################################## # # other utilities # ############################################################################## # Does %-decoding. # sub url_decode($) { ($_) = @_; tr/+/ /; s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg; return $_; } # Given the raw body of a GIF document, returns the dimensions of the image. # sub gif_size($) { my ($body) = @_; my $type = substr($body, 0, 6); my $s; return () unless ($type =~ /GIF8[7,9]a/); $s = substr ($body, 6, 10); my ($a,$b,$c,$d) = unpack ("C"x4, $s); return () unless defined ($d); return (($b<<8|$a), ($d<<8|$c)); } # Given the raw body of a JPEG document, returns the dimensions of the image. # sub jpeg_size($) { my ($body) = @_; my $i = 0; my $L = length($body); my $c1 = substr($body, $i, 1); $i++; my $c2 = substr($body, $i, 1); $i++; return () unless (ord($c1) == 0xFF && ord($c2) == 0xD8); my $ch = "0"; while (ord($ch) != 0xDA && $i < $L) { # Find next marker, beginning with 0xFF. while (ord($ch) != 0xFF) { return () if (length($body) <= $i); $ch = substr($body, $i, 1); $i++; } # markers can be padded with any number of 0xFF. while (ord($ch) == 0xFF) { return () if (length($body) <= $i); $ch = substr($body, $i, 1); $i++; } # $ch contains the value of the marker. my $marker = ord($ch); if (($marker >= 0xC0) && ($marker <= 0xCF) && ($marker != 0xC4) && ($marker != 0xCC)) { # it's a SOFn marker $i += 3; return () if (length($body) <= $i); my $s = substr($body, $i, 4); $i += 4; my ($a,$b,$c,$d) = unpack("C"x4, $s); return (($c<<8|$d), ($a<<8|$b)); } else { # We must skip variables, since FFs in variable names aren't # valid JPEG markers. return () if (length($body) <= $i); my $s = substr($body, $i, 2); $i += 2; my ($c1, $c2) = unpack ("C"x2, $s); my $length = ($c1 << 8) | $c2; return () if ($length < 2); $i += $length-2; } } return (); } # Given the raw body of a PNG document, returns the dimensions of the image. # sub png_size($) { my ($body) = @_; return () unless ($body =~ m/^\211PNG\r/); my ($bits) = ($body =~ m/^.{12}(.{12})/s); return () unless defined ($bits); return () unless ($bits =~ /^IHDR/); my ($ign, $w, $h) = unpack("a4N2", $bits); return ($w, $h); } # Given the raw body of a GIF, JPEG, or PNG document, returns the dimensions # of the image. # sub image_size($) { my ($body) = @_; my ($w, $h) = gif_size ($body); if ($w && $h) { return ($w, $h); } ($w, $h) = jpeg_size ($body); if ($w && $h) { return ($w, $h); } return png_size ($body); } # returns the full path of the named program, or undef. # sub which($) { my ($prog) = @_; foreach (split (/:/, $ENV{PATH})) { my $path = "$_/$prog"; if (-x $path) { return $path; } } return undef; } # Like rand(), but chooses numbers with a bell curve distribution. sub bellrand(;$) { ($_) = @_; $_ = 1.0 unless defined($_); $_ /= 3.0; return (rand($_) + rand($_) + rand($_)); } sub exit_cleanup() { x_cleanup(); print STDERR "$progname: exiting\n" if ($verbose_warnings); if (@pids_to_kill) { print STDERR blurb() . "killing: " . join(' ', @pids_to_kill) . "\n"; kill ('TERM', @pids_to_kill); } } sub signal_cleanup($) { my ($sig) = @_; print STDERR blurb() . (defined($sig) ? "caught signal $sig." : "exiting.") . "\n" if ($verbose_exec || $verbose_warnings); exit 1; } ############################################################################## # # Generating a list of urls only # ############################################################################## sub url_only_output() { do { my ($base, $img) = pick_image; if ($img) { $base =~ s/ /%20/g; $img =~ s/ /%20/g; print "$img $base\n"; } } while (1); } ############################################################################## # # Running as an xscreensaver module, or as a web page imagemap # ############################################################################## my ($image_ppm, $image_tmp1, $image_tmp2); { my $seed = rand(0xFFFFFFFF); $image_ppm = sprintf ("%s/webcollage-%08x", ($ENV{TMPDIR} ? $ENV{TMPDIR} : "/tmp"), $seed); $image_tmp1 = $image_ppm . '-1.ppm'; $image_tmp2 = $image_ppm . '-2.ppm'; $image_ppm .= '.ppm'; } my $filter_cmd = undef; my $post_filter_cmd = undef; my $background = undef; my @imagemap_areas = (); my $imagemap_html_tmp = undef; my $imagemap_jpg_tmp = undef; my $img_width; # size of the image being generated. my $img_height; my $delay = 2; sub x_cleanup() { unlink $image_ppm, $image_tmp1, $image_tmp2; unlink $imagemap_html_tmp, $imagemap_jpg_tmp if (defined ($imagemap_html_tmp)); } # Like system, but prints status about exit codes, and kills this process # with whatever signal killed the sub-process, if any. # sub nontrapping_system(@) { $! = 0; $_ = join(" ", @_); s/\"[^\"]+\"/\"...\"/g; LOG ($verbose_exec, "executing \"$_\""); my $rc = system @_; if ($rc == 0) { LOG ($verbose_exec, "subproc exited normally."); } elsif (($rc & 0xff) == 0) { $rc >>= 8; LOG ($verbose_exec, "subproc exited with status $rc."); } else { if ($rc & 0x80) { LOG ($verbose_exec, "subproc dumped core."); $rc &= ~0x80; } LOG ($verbose_exec, "subproc died with signal $rc."); # die that way ourselves. kill $rc, $$; } return $rc; } # Given the URL of a GIF, JPEG, or PNG image, and the body of that image, # writes a PPM to the given output file. Returns the width/height of the # image if successful. # sub image_to_pnm($$$) { my ($url, $body, $output) = @_; my ($cmd, $cmd2, $w, $h); if ((@_ = gif_size ($body))) { ($w, $h) = @_; $cmd = "giftopnm"; } elsif ((@_ = jpeg_size ($body))) { ($w, $h) = @_; $cmd = "djpeg"; } elsif ((@_ = png_size ($body))) { ($w, $h) = @_; $cmd = "pngtopnm"; } else { LOG (($verbose_pbm || $verbose_load), "not a GIF, JPG, or PNG" . (($body =~ m@<(base|html|head|body|script|table|a href)\b@i) ? " (looks like HTML)" : "") . ": $url"); $suppress_audit = 1; return (); } $cmd2 = "exec $cmd"; # yes, this really is necessary. if we don't # do this, the process doesn't die properly. if (!$verbose_pbm) { # # We get a "giftopnm: got a 'Application Extension' extension" # warning any time it's an animgif. # # Note that "giftopnm: EOF / read error on image data" is not # always a fatal error -- sometimes the image looks fine anyway. # $cmd2 .= " 2>/dev/null"; } # There exist corrupted GIF and JPEG files that can make giftopnm and # djpeg lose their minds and go into a loop. So this gives those programs # a small timeout -- if they don't complete in time, kill them. # my $pid; @_ = eval { my $timed_out; local $SIG{ALRM} = sub { LOG ($verbose_pbm, "timed out ($cvt_timeout) for $cmd on \"$url\" in pid $pid"); kill ('TERM', $pid) if ($pid); $timed_out = 1; $body = undef; }; if (($pid = open (my $pipe, "| $cmd2 > $output"))) { $timed_out = 0; alarm $cvt_timeout; print $pipe $body; $body = undef; close $pipe; LOG ($verbose_exec, "awaiting $pid"); waitpid ($pid, 0); LOG ($verbose_exec, "$pid completed"); my $size = (stat($output))[7]; $size = -1 unless defined($size); if ($size < 5) { LOG ($verbose_pbm, "$cmd on ${w}x$h \"$url\" failed ($size bytes)"); return (); } LOG ($verbose_pbm, "created ${w}x$h $output ($cmd)"); return ($w, $h); } else { print STDERR blurb() . "$cmd failed: $!\n"; return (); } }; die if ($@ && $@ ne "alarm\n"); # propagate errors if ($@) { # timed out $body = undef; return (); } else { # didn't alarm 0; $body = undef; return @_; } } # Same as the "ppmmake" command: creates a solid-colored PPM. # Does not understand the rgb.txt color names except "black" and "white". # sub ppmmake($$$$) { my ($outfile, $bgcolor, $w, $h) = @_; my ($r, $g, $b); if ($bgcolor =~ m/^\#?([\dA-F][\dA-F])([\dA-F][\dA-F])([\dA-F][\dA-F])$/i || $bgcolor =~ m/^\#?([\dA-F])([\dA-F])([\dA-F])$/i) { ($r, $g, $b) = (hex($1), hex($2), hex($3)); } elsif ($bgcolor =~ m/^black$/i) { ($r, $g, $b) = (0, 0, 0); } elsif ($bgcolor =~ m/^white$/i) { ($r, $g, $b) = (0xFF, 0xFF, 0xFF); } else { error ("unparsable color name: $bgcolor"); } my $pixel = pack('CCC', $r, $g, $b); my $bits = "P6\n$w $h\n255\n" . ($pixel x ($w * $h)); open (my $out, '>', $outfile) || error ("$outfile: $!"); print $out $bits; close $out; } sub pick_root_displayer() { my @names = (); if ($cocoa_p) { # see "xscreensaver/hacks/webcollage-cocoa.m" return "echo COCOA LOAD "; } foreach my $cmd (@root_displayers) { $_ = $cmd; my ($name) = m/^([^ ]+)/; push @names, "\"$name\""; LOG ($verbose_exec, "looking for $name..."); foreach my $dir (split (/:/, $ENV{PATH})) { LOG ($verbose_exec, " checking $dir/$name"); return $cmd if (-x "$dir/$name"); } } $names[$#names] = "or " . $names[$#names]; error "none of: " . join (", ", @names) . " were found on \$PATH."; } my $ppm_to_root_window_cmd = undef; sub x_or_pbm_output($) { my ($window_id) = @_; # Adjust the PATH for OS X 10.10. # $_ = $0; s:/[^/]*$::; s/([^a-zA-Z0-9._\-+\/])/\\$1/g; $ENV{PATH} = "$_:$ENV{PATH}"; # Check for our helper program, to see whether we need to use PPM pipelines. # $_ = "webcollage-helper"; if (! defined ($webcollage_helper)) { $webcollage_helper = which ($_); } if (defined ($webcollage_helper)) { LOG ($verbose_pbm, "found \"$webcollage_helper\""); $webcollage_helper = "'$webcollage_helper' -v"; } else { LOG (($verbose_pbm || $verbose_load), "no $_ program"); } if ($cocoa_p && !defined ($webcollage_helper)) { error ("webcollage-helper not found in Cocoa-mode!"); } # make sure the various programs we execute exist, right up front. # my @progs = (); if (!defined($webcollage_helper)) { # Only need these others if we don't have the helper. @progs = (@progs, "giftopnm", "pngtopnm", "djpeg", "pnmpaste", "pnmscale", "pnmcut"); } foreach (@progs) { which ($_) || error "$_ not found on \$PATH."; } # If we're using webcollage-helper and not a filter, then the tmp files # are JPEGs, not PPMs. # if (defined ($webcollage_helper) && !defined ($filter_cmd)) { foreach ($image_ppm, $image_tmp1, $image_tmp2) { s/\.ppm$/.jpg/s; } } # find a root-window displayer program. # if (!$no_output_p) { $ppm_to_root_window_cmd = pick_root_displayer(); } if (defined ($window_id)) { error ("-window-id only works if xscreensaver-getimage is installed") unless ($ppm_to_root_window_cmd =~ m/^xscreensaver-getimage\b/); error ("unparsable window id: $window_id") unless ($window_id =~ m/^\d+$|^0x[\da-f]+$/i); $ppm_to_root_window_cmd =~ s/--?root\b/$window_id/ || error ("unable to munge displayer: $ppm_to_root_window_cmd"); } if (!$img_width || !$img_height) { if (!defined ($window_id) && defined ($ENV{XSCREENSAVER_WINDOW})) { $window_id = $ENV{XSCREENSAVER_WINDOW}; } if (!defined ($window_id)) { $_ = "xdpyinfo"; which ($_) || error "$_ not found on \$PATH."; $_ = `$_`; ($img_width, $img_height) = m/dimensions: *(\d+)x(\d+) /; if (!defined($img_height)) { error "xdpyinfo failed."; } } else { # we have a window id $_ = "xwininfo"; which ($_) || error "$_ not found on \$PATH."; $_ .= " -id $window_id"; $_ = `$_`; ($img_width, $img_height) = m/^\s*Width:\s*(\d+)\n\s*Height:\s*(\d+)\n/m; if (!defined($img_height)) { error "xwininfo failed."; } } } my $bgcolor = "#000000"; my $bgimage = undef; if ($background) { if ($background =~ m/^\#[0-9a-f]+$/i) { $bgcolor = $background; } elsif (-r $background) { $bgimage = $background; } elsif (! $background =~ m@^[-a-z0-9 ]+$@i) { error "not a color or readable file: $background"; } else { # default to assuming it's a color $bgcolor = $background; } } # Create the sold-colored base image. # LOG ($verbose_pbm, "creating base image: ${img_width}x${img_height}"); $_ = ppmmake ($image_ppm, $bgcolor, $img_width, $img_height); # Paste the default background image in the middle of it. # if ($bgimage) { my ($iw, $ih); my $body = ""; open (my $imgf, '<', $bgimage) || error "couldn't open $bgimage: $!"; local $/ = undef; # read entire file $body = <$imgf>; close ($imgf); my $cmd; if ((@_ = gif_size ($body))) { ($iw, $ih) = @_; $cmd = "giftopnm |"; } elsif ((@_ = jpeg_size ($body))) { ($iw, $ih) = @_; $cmd = "djpeg |"; } elsif ((@_ = png_size ($body))) { ($iw, $ih) = @_; $cmd = "pngtopnm |"; } elsif ($body =~ m/^P\d\n(\d+) (\d+)\n/) { $iw = $1; $ih = $2; $cmd = ""; } else { error "$bgimage is not a GIF, JPEG, PNG, or PPM."; } my $x = int (($img_width - $iw) / 2); my $y = int (($img_height - $ih) / 2); LOG ($verbose_pbm, "pasting $bgimage (${iw}x$ih) into base image at $x,$y"); $cmd .= "pnmpaste - $x $y $image_ppm > $image_tmp1"; open ($imgf, "| $cmd") || error "running $cmd: $!"; print $imgf $body; $body = undef; close ($imgf); LOG ($verbose_exec, "subproc exited normally."); rename ($image_tmp1, $image_ppm) || error "renaming $image_tmp1 to $image_ppm: $!"; } clearlog(); while (1) { my ($base, $img) = pick_image(); my $source = $current_state; $current_state = "loadimage"; if ($img) { my ($headers, $body) = get_document ($img, $base); if ($body) { paste_image ($base, $img, $body, $source); $body = undef; } } $current_state = "idle"; $load_method = "none"; unlink $image_tmp1, $image_tmp2; sleep $delay; } } sub paste_image($$$$) { my ($base, $img, $body, $source) = @_; $current_state = "paste"; $suppress_audit = 0; LOG ($verbose_pbm, "got $img (" . length($body) . ")"); my ($iw, $ih); # If we are using the webcollage-helper, then we do not need to convert this # image to a PPM. But, if we're using a filter command, we still must, since # that's what the filters expect (webcollage-helper can read PPMs, so that's # fine.) # if (defined ($webcollage_helper) && !defined ($filter_cmd)) { ($iw, $ih) = image_size ($body); if (!$iw || !$ih) { LOG (($verbose_pbm || $verbose_load), "not a GIF, JPG, or PNG" . (($body =~ m@<(base|html|head|body|script|table|a href)>@i) ? " (looks like HTML)" : "") . ": $img"); $suppress_audit = 1; $body = undef; return 0; } if ($iw <= 0 || $ih <= 0 || $iw > 9999 || $ih > 9999) { LOG (($verbose_pbm || $verbose_load), "ludicrous image dimensions: $iw x $ih (" . length($body) . "): $img"); $body = undef; return 0; } open (my $out, '>', $image_tmp1) || error ("writing $image_tmp1: $!"); (print $out $body) || error ("writing $image_tmp1: $!"); close ($out) || error ("writing $image_tmp1: $!"); } else { ($iw, $ih) = image_to_pnm ($img, $body, $image_tmp1); $body = undef; if (!$iw || !$ih) { LOG ($verbose_pbm, "unable to make PBM from $img"); return 0; } } record_success ($load_method, $img, $base); my $ow = $iw; # used only for error messages my $oh = $ih; # don't just tack this onto the front of the pipeline -- we want it to # be able to change the size of the input image. # if ($filter_cmd) { LOG ($verbose_pbm, "running $filter_cmd"); my $rc = nontrapping_system "($filter_cmd) < $image_tmp1 >$image_tmp2"; if ($rc != 0) { LOG(($verbose_pbm || $verbose_load), "failed command: \"$filter_cmd\""); LOG(($verbose_pbm || $verbose_load), "failed URL: \"$img\" (${ow}x$oh)"); return; } rename ($image_tmp2, $image_tmp1); # re-get the width/height in case the filter resized it. open (my $imgf, '<', $image_tmp1) || return 0; $_ = <$imgf>; $_ = <$imgf>; ($iw, $ih) = m/^(\d+) (\d+)$/; close ($imgf); return 0 unless ($iw && $ih); } my $target_w = $img_width; # max rectangle into which the image must fit my $target_h = $img_height; my $cmd = ""; my $scale = 1.0; # Usually scale the image to fit on the screen -- but sometimes scale it # to fit on half or a quarter of the screen. (We do this by reducing the # size of the target rectangle.) Note that the image is not merely scaled # to fit; we instead cut the image in half repeatedly until it fits in the # target rectangle -- that gives a wider distribution of sizes. # if (rand() < 0.3) { $target_w /= 2; $target_h /= 2; } # reduce target rect if (rand() < 0.3) { $target_w /= 2; $target_h /= 2; } if ($iw > $target_w || $ih > $target_h) { while ($iw > $target_w || $ih > $target_h) { $iw = int($iw / 2); $ih = int($ih / 2); $scale /= 2; } if ($iw <= 10 || $ih <= 10) { LOG ($verbose_pbm, "scaling to ${iw}x$ih would have been bogus."); return 0; } LOG ($verbose_pbm, "scaling to ${iw}x$ih ($scale)"); $cmd .= " | pnmscale -xsize $iw -ysize $ih"; } my $src = $image_tmp1; my $crop_x = 0; # the sub-rectangle of the image my $crop_y = 0; # that we will actually paste. my $crop_w = $iw; my $crop_h = $ih; # The chance that we will randomly crop out a section of an image starts # out fairly low, but goes up for images that are very large, or images # that have ratios that make them look like banners (we try to avoid # banner images entirely, but they slip through when the IMG tags didn't # have WIDTH and HEIGHT specified.) # my $crop_chance = 0.2; if ($iw > $img_width * 0.4 || $ih > $img_height * 0.4) { $crop_chance += 0.2; } if ($iw > $img_width * 0.7 || $ih > $img_height * 0.7) { $crop_chance += 0.2; } if ($min_ratio && ($iw * $min_ratio) > $ih) { $crop_chance += 0.7; } if ($crop_chance > 0.1) { LOG ($verbose_pbm, "crop chance: $crop_chance"); } if (rand() < $crop_chance) { my $ow = $crop_w; my $oh = $crop_h; if ($crop_w > $min_width) { # if it's a banner, select the width linearly. # otherwise, select a bell. my $r = (($min_ratio && ($iw * $min_ratio) > $ih) ? rand() : bellrand()); $crop_w = $min_width + int ($r * ($crop_w - $min_width)); $crop_x = int (rand() * ($ow - $crop_w)); } if ($crop_h > $min_height) { # height always selects as a bell. $crop_h = $min_height + int (bellrand() * ($crop_h - $min_height)); $crop_y = int (rand() * ($oh - $crop_h)); } if ($crop_x != 0 || $crop_y != 0 || $crop_w != $iw || $crop_h != $ih) { LOG ($verbose_pbm, "randomly cropping to ${crop_w}x$crop_h \@ $crop_x,$crop_y"); } } # Where the image should logically land -- this might be negative. # my $x = int((rand() * ($img_width + $crop_w/2)) - $crop_w*3/4); my $y = int((rand() * ($img_height + $crop_h/2)) - $crop_h*3/4); # if we have chosen to paste the image outside of the rectangle of the # screen, then we need to crop it. # if ($x < 0 || $y < 0 || $x + $crop_w > $img_width || $y + $crop_h > $img_height) { LOG ($verbose_pbm, "cropping for effective paste of ${crop_w}x$crop_h \@ $x,$y"); if ($x < 0) { $crop_x -= $x; $crop_w += $x; $x = 0; } if ($y < 0) { $crop_y -= $y; $crop_h += $y; $y = 0; } if ($x + $crop_w >= $img_width) { $crop_w = $img_width - $x - 1; } if ($y + $crop_h >= $img_height) { $crop_h = $img_height - $y - 1; } } # If any cropping needs to happen, add pnmcut. # if ($crop_x != 0 || $crop_y != 0 || $crop_w != $iw || $crop_h != $ih) { $iw = $crop_w; $ih = $crop_h; $cmd .= " | pnmcut $crop_x $crop_y $iw $ih"; LOG ($verbose_pbm, "cropping to ${crop_w}x$crop_h \@ $crop_x,$crop_y"); } LOG ($verbose_pbm, "pasting ${iw}x$ih \@ $x,$y in $image_ppm"); $cmd .= " | pnmpaste - $x $y $image_ppm"; $cmd =~ s@^ *\| *@@; if (defined ($webcollage_helper)) { $cmd = "$webcollage_helper $image_tmp1 $image_ppm " . "$scale $opacity " . "$crop_x $crop_y $x $y " . "$iw $ih"; $_ = $cmd; } else { # use a PPM pipeline $_ = "($cmd)"; $_ .= " < $image_tmp1 > $image_tmp2"; } if ($verbose_pbm) { $_ = "($_) 2>&1 | sed s'/^/" . blurb() . "/'"; } else { $_ .= " 2> /dev/null"; } my $rc = nontrapping_system ($_); if (defined ($webcollage_helper) && -z $image_ppm) { LOG (1, "failed command: \"$cmd\""); print STDERR "\naudit log:\n\n\n"; print STDERR ("#" x 78) . "\n"; print STDERR blurb() . "$image_ppm has zero size\n"; showlog(); print STDERR "\n\n"; exit (1); } if ($rc != 0) { LOG (($verbose_pbm || $verbose_load), "failed command: \"$cmd\""); LOG (($verbose_pbm || $verbose_load), "failed URL: \"$img\" (${ow}x$oh)"); return; } if (!defined ($webcollage_helper)) { rename ($image_tmp2, $image_ppm) || return; } my $target = "$image_ppm"; # don't just tack this onto the end of the pipeline -- we don't want it # to end up in $image_ppm, because we don't want the results to be # cumulative. # if ($post_filter_cmd) { my $cmd; $target = $image_tmp1; if (!defined ($webcollage_helper)) { $cmd = "($post_filter_cmd) < $image_ppm > $target"; } else { # Blah, my scripts need the JPEG data, but some other folks need # the PPM data -- what to do? Ignore the problem, that's what! # $cmd = "djpeg < $image_ppm | ($post_filter_cmd) > $target"; $cmd = "($post_filter_cmd) < $image_ppm > $target"; } $rc = nontrapping_system ($cmd); if ($rc != 0) { LOG ($verbose_pbm, "filter failed: \"$post_filter_cmd\"\n"); return; } } if (!$no_output_p) { my $tsize = (stat($target))[7]; if ($tsize > 200) { $cmd = "$ppm_to_root_window_cmd $target"; # xv seems to hate being killed. it tends to forget to clean # up after itself, and leaves windows around and colors allocated. # I had this same problem with vidwhacker, and I'm not entirely # sure what I did to fix it. But, let's try this: launch xv # in the background, so that killing this process doesn't kill it. # it will die of its own accord soon enough. So this means we # start pumping bits to the root window in parallel with starting # the next network retrieval, which is probably a better thing # to do anyway. # $cmd .= " &" unless ($cocoa_p); $rc = nontrapping_system ($cmd); if ($rc != 0) { LOG (($verbose_pbm || $verbose_load), "display failed: \"$cmd\""); return; } } else { LOG ($verbose_pbm, "$target size is $tsize"); } } $source .= "-" . stats_of($source); print STDOUT "image: ${iw}x${ih} @ $x,$y $base $source\n" if ($verbose_imgmap); if ($imagemap_base) { update_imagemap ($base, $x, $y, $iw, $ih, $image_ppm, $img_width, $img_height); } clearlog(); return 1; } sub update_imagemap($$$$$$$$) { my ($url, $x, $y, $w, $h, $image_ppm, $image_width, $image_height) = @_; $current_state = "imagemap"; my $max_areas = 200; $url = html_quote ($url); my $x2 = $x + $w; my $y2 = $y + $h; my $area = ""; unshift @imagemap_areas, $area; # put one on the front if ($#imagemap_areas >= $max_areas) { pop @imagemap_areas; # take one off the back. } LOG ($verbose_pbm, "area: $x,$y,$x2,$y2 (${w}x$h)"); my $map_name = $imagemap_base; $map_name =~ s@^.*/@@; $map_name = 'collage' if ($map_name eq ''); my $imagemap_html = $imagemap_base . ".html"; my $imagemap_jpg = $imagemap_base . ".jpg"; my $imagemap_jpg2 = $imagemap_jpg; $imagemap_jpg2 =~ s@^.*/@@gs; if (!defined ($imagemap_html_tmp)) { $imagemap_html_tmp = $imagemap_html . sprintf (".%08x", rand(0xffffffff)); $imagemap_jpg_tmp = $imagemap_jpg . sprintf (".%08x", rand(0xffffffff)); } # Read the imagemap html file (if any) to get a template. # my $template_html = ''; { if (open (my $in, '<', $imagemap_html)) { local $/ = undef; # read entire file $template_html = <$in>; close $in; LOG ($verbose_pbm, "read template $imagemap_html"); } if ($template_html =~ m/^\s*$/s) { $template_html = ("\n" . "\n"); LOG ($verbose_pbm, "created dummy template"); } } # Write the jpg to a tmp file # { my $cmd; if (defined ($webcollage_helper)) { $cmd = "cp -p $image_ppm $imagemap_jpg_tmp"; } else { $cmd = "cjpeg < $image_ppm > $imagemap_jpg_tmp"; } my $rc = nontrapping_system ($cmd); if ($rc != 0) { error ("imagemap jpeg failed: \"$cmd\"\n"); } } # Write the html to a tmp file # { my $body = $template_html; my $areas = join ("\n\t", @imagemap_areas); my $map = ("\n\t$areas\n"); my $img = (""); $body =~ s@().*?()@$map@is; $body =~ s@]*\bUSEMAP\b[^<>]*>@$img@is; # if there are magic webcollage spans in the html, update those too. # { my @st = stat ($imagemap_jpg_tmp); my $date = strftime("%d-%b-%Y %l:%M:%S %p %Z", localtime($st[9])); my $size = int(($st[7] / 1024) + 0.5) . "K"; $body =~ s@().*?()@$1$date$2@si; $body =~ s@().*?()@$1$size$2@si; } open (my $out, '>', $imagemap_html_tmp) || error ("$imagemap_html_tmp: $!"); (print $out $body) || error ("$imagemap_html_tmp: $!"); close ($out) || error ("$imagemap_html_tmp: $!"); LOG ($verbose_pbm, "wrote $imagemap_html_tmp"); } # Rename the two tmp files to the real files # rename ($imagemap_html_tmp, $imagemap_html) || error "renaming $imagemap_html_tmp to $imagemap_html"; LOG ($verbose_pbm, "wrote $imagemap_html"); rename ($imagemap_jpg_tmp, $imagemap_jpg) || error "renaming $imagemap_jpg_tmp to $imagemap_jpg"; LOG ($verbose_pbm, "wrote $imagemap_jpg"); } # Figure out what the proxy server should be, either from environment # variables or by parsing the output of the (MacOS) program "scutil", # which tells us what the system-wide proxy settings are. # sub set_proxy() { if (! defined($http_proxy)) { # historical suckage: the environment variable name is lower case. $http_proxy = $ENV{http_proxy} || $ENV{HTTP_PROXY}; } if (defined ($http_proxy)) { if ($http_proxy && $http_proxy =~ m@^https?://([^/]*)/?$@ ) { # historical suckage: allow "http://host:port" as well as "host:port". $http_proxy = $1; } } else { my $proxy_data = `scutil --proxy 2>/dev/null`; my ($server) = ($proxy_data =~ m/\bHTTPProxy\s*:\s*([^\s]+)/s); my ($port) = ($proxy_data =~ m/\bHTTPPort\s*:\s*([^\s]+)/s); # Note: this ignores the "ExceptionsList". if ($server) { $http_proxy = $server; $http_proxy .= ":$port" if $port; } } delete $ENV{http_proxy}; delete $ENV{HTTP_PROXY}; delete $ENV{https_proxy}; delete $ENV{HTTPS_PROXY}; delete $ENV{PERL_LWP_ENV_PROXY}; if ($http_proxy) { $http_proxy = 'http://' . $http_proxy; LOG ($verbose_net, "proxy server: $http_proxy"); } else { $http_proxy = undef; # for --proxy '' } } sub init_signals() { $SIG{HUP} = \&signal_cleanup; $SIG{INT} = \&signal_cleanup; $SIG{QUIT} = \&signal_cleanup; $SIG{ABRT} = \&signal_cleanup; $SIG{KILL} = \&signal_cleanup; $SIG{TERM} = \&signal_cleanup; # Need this so that if giftopnm dies, we don't die. $SIG{PIPE} = 'IGNORE'; } END { exit_cleanup(); } sub main() { $| = 1; srand(time ^ $$); my $verbose = 0; my $dict; my $driftnet_cmd = 0; $current_state = "init"; $load_method = "none"; my $root_p = 0; my $window_id = undef; while ($#ARGV >= 0) { $_ = shift @ARGV; if (m/^--?d(i(s(p(l(a(y)?)?)?)?)?)?$/s) { $ENV{DISPLAY} = shift @ARGV; } elsif (m/^--?root$/s) { $root_p = 1; } elsif (m/^--?window-id$/s) { $window_id = shift @ARGV; $root_p = 1; } elsif (m/^--?no-output$/s) { $no_output_p = 1; } elsif (m/^--?urls(-only)?$/s) { $urls_only_p = 1; $no_output_p = 1; } elsif (m/^--?cocoa$/s) { $cocoa_p = 1; } elsif (m/^--?imagemap$/s) { $imagemap_base = shift @ARGV; $no_output_p = 1; } elsif (m/^--?verbose$/s) { $verbose++; } elsif (m/^-v+$/) { $verbose += length($_)-1; } elsif (m/^--?delay$/s) { $delay = shift @ARGV; } elsif (m/^--?timeout$/s) { $http_timeout = shift @ARGV; } elsif (m/^--?filter$/s) { $filter_cmd = shift @ARGV; } elsif (m/^--?filter2$/s) { $post_filter_cmd = shift @ARGV; } elsif (m/^--?(background|bg)$/s) { $background = shift @ARGV; } elsif (m/^--?size$/s) { $_ = shift @ARGV; if (m@^(\d+)x(\d+)$@) { $img_width = $1; $img_height = $2; } else { error "argument to \"--size\" must be of the form \"640x400\""; } } elsif (m/^--?(http-)?proxy$/s) { $http_proxy = shift @ARGV; } elsif (m/^--?dict(ionary)?$/s) { $dict = shift @ARGV; } elsif (m/^--?opacity$/s) { $opacity = shift @ARGV; error ("opacity must be between 0.0 and 1.0") if ($opacity <= 0 || $opacity > 1); } elsif (m/^--?driftnet$/s) { @search_methods = ( 100, "driftnet", \&pick_from_driftnet ); if (! ($ARGV[0] =~ m/^-/)) { $driftnet_cmd = shift @ARGV; } else { $driftnet_cmd = $default_driftnet_cmd; } } elsif (m/^--?dir(ectory)?$/s) { @search_methods = ( 100, "local", \&pick_from_local_dir ); if (! ($ARGV[0] =~ m/^-/)) { $local_dir = shift @ARGV; } else { error ("local directory path must be set") } } elsif (m/^--?fps$/s) { # -fps only works on MacOS, via "webcollage-cocoa.m". # Ignore it if passed to this script in an X11 context. } elsif (m/^--?debug$/s) { my $which = shift @ARGV; my @rest = @search_methods; my $ok = 0; while (@rest) { my $pct = shift @rest; my $name = shift @rest; my $tfn = shift @rest; if ($name eq $which) { @search_methods = (100, $name, $tfn); $ok = 1; last; } } error "no such search method as \"$which\"" unless ($ok); LOG (1, "DEBUG: using only \"$which\""); $report_performance_interval = 30; } else { print STDERR "unknown option: $_\n\n"; print STDERR "$copyright\nusage: $progname " . "[--root] [--display dpy] [--verbose] [--debug which]\n" . "\t\t [--timeout secs] [--delay secs] [--size WxH]\n" . "\t\t [--no-output] [--urls-only] [--imagemap filename]\n" . "\t\t [--background color] [--opacity f]\n" . "\t\t [--filter cmd] [--filter2 cmd]\n" . "\t\t [--dictionary dictionary-file] [--http-proxy host[:port]]\n" . "\t\t [--driftnet [driftnet-program-and-args]]\n" . "\t\t [--directory local-image-directory]\n" . "\n"; exit 1; } } if (!$root_p && !$no_output_p && !$cocoa_p) { print STDERR $copyright; error "the --root argument is mandatory (for now.)"; } if (!$no_output_p && !$cocoa_p && !$ENV{DISPLAY}) { error "\$DISPLAY is not set."; } if ($verbose == 1) { $verbose_imgmap = 1; $verbose_warnings = 1; } elsif ($verbose == 2) { $verbose_imgmap = 1; $verbose_warnings = 1; $verbose_load = 1; } elsif ($verbose == 3) { $verbose_imgmap = 1; $verbose_warnings = 1; $verbose_load = 1; $verbose_filter = 1; } elsif ($verbose == 4) { $verbose_imgmap = 1; $verbose_warnings = 1; $verbose_load = 1; $verbose_filter = 1; $verbose_net = 1; } elsif ($verbose == 5) { $verbose_imgmap = 1; $verbose_warnings = 1; $verbose_load = 1; $verbose_filter = 1; $verbose_net = 1; $verbose_pbm = 1; } elsif ($verbose == 6) { $verbose_imgmap = 1; $verbose_warnings = 1; $verbose_load = 1; $verbose_filter = 1; $verbose_net = 1; $verbose_pbm = 1; $verbose_http = 1; } elsif ($verbose >= 7) { $verbose_imgmap = 1; $verbose_warnings = 1; $verbose_load = 1; $verbose_filter = 1; $verbose_net = 1; $verbose_pbm = 1; $verbose_http = 1; $verbose_exec = 1; } if ($dict) { error ("$dict does not exist") unless (-f $dict); $wordlist = $dict; } else { pick_dictionary(); } if ($imagemap_base && !($img_width && $img_height)) { error ("--size WxH is required with --imagemap"); } if (defined ($local_dir)) { $_ = "xscreensaver-getimage-file"; which ($_) || error "$_ not found on \$PATH."; } init_signals(); set_proxy(); spawn_driftnet ($driftnet_cmd) if ($driftnet_cmd); if ($urls_only_p) { url_only_output (); } else { x_or_pbm_output ($window_id); } } main(); exit (0); xscreensaver-5.36/hacks/ljlatest000775 000767 000024 00000000012 12431553732 016777 0ustar00jwzstaff000000 000000 #!/bin/sh xscreensaver-5.36/hacks/anemone.man000644 000767 000024 00000004174 12701612217 017353 0ustar00jwzstaff000000 000000 .TH XScreenSaver 1 "" "X Version 11" .SH NAME anemone - wiggling tentacles. .SH SYNOPSIS .B anemone [\-display \fIhost:display.screen\fP] [\-visual \fIvisual\fP] [\-window] [\-root] [\-delay \fInumber\fP] [\-arms \fInumber\fP] [\-finpoints \fInumber\fP] [\-width \fInumber\fP] [\-fps] .SH DESCRIPTION Wiggling tentacles. .SH OPTIONS .TP 8 .B \-visual \fIvisual\fP Specify which visual to use. Legal values are the name of a visual class, or the id number (decimal or hex) of a specific visual. .TP 8 .B \-window Draw on a newly-created window. This is the default. .TP 8 .B \-root Draw on the root window. .TP 8 .B \-delay \fInumber\fP Per-frame delay, in microseconds. Default: 40000 (0.04 seconds.). .TP 8 .B \-arms \fInumber\fP Arms. 2 - 500. Default: 128. .TP 8 .B \-finpoints \fInumber\fP Tentacles. 3 - 200. Default: 64. .TP 8 .B \-withdraw \fInumber\fP Frequency that the arms withdraw. Arms withdraw on randomly generated values between 1 and 11; this value determines the maximum value of that range. So 100 spends a lot of time withdrawn, while 1000,000 tends not to withdraw at all. Default: 1200. .TP 8 .B \-turnspeed \fInumber\fP How fast it turns. At zero, not at all, all they way up to thousands which are very fast indeed. Default: 50. .TP 8 .B \-width \fInumber\fP Thickness. 1 - 10. Default: 2. .TP 8 .B \-fps Display the current frame rate and CPU load. .SH ENVIRONMENT .PP .TP 8 .B DISPLAY to get the default host and display number. .TP 8 .B XENVIRONMENT to get the name of a resource file that overrides the global resources stored in the RESOURCE_MANAGER property. .SH SEE ALSO .BR X (1), .BR xscreensaver (1) .SH COPYRIGHT Copyright \(co 2002 by Gabriel Finch. 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. .SH AUTHOR Gabriel Finch. xscreensaver-5.36/hacks/apollonian.man000644 000767 000024 00000003602 12701612217 020060 0ustar00jwzstaff000000 000000 .TH XScreenSaver 1 "" "X Version 11" .SH NAME apollonian - Descartes Circle Theorem. .SH SYNOPSIS .B apollonian [\-display \fIhost:display.screen\fP] [\-visual \fIvisual\fP] [\-window] [\-root] [\-no-label] [\-no-altgeom] [\-cycles \fInumber\fP] [\-ncolors \fInumber\fP] [\-delay \fInumber\fP] [\-fps] .SH DESCRIPTION Packs a large circle with smaller circles, demonstrating the Descartes Circle Theorem. .SH OPTIONS .TP 8 .B \-visual \fIvisual\fP Specify which visual to use. Legal values are the name of a visual class, or the id number (decimal or hex) of a specific visual. .TP 8 .B \-window Draw on a newly-created window. This is the default. .TP 8 .B \-root Draw on the root window. .TP 8 .B \-label | \-no-label Draw Labels. Boolean. .TP 8 .B \-altgeom | \-no-altgeom Include Alternate Geometries. Boolean. .TP 8 .B \-cycles \fInumber\fP Depth. 1 - 20. Default: 20. .TP 8 .B \-ncolors \fInumber\fP Number of Colors. Default: 64. .TP 8 .B \-delay \fInumber\fP Per-frame delay, in microseconds. Default: 1000000 (1.00 seconds.). .TP 8 .B \-fps Display the current frame rate and CPU load. .SH ENVIRONMENT .PP .TP 8 .B DISPLAY to get the default host and display number. .TP 8 .B XENVIRONMENT to get the name of a resource file that overrides the global resources stored in the RESOURCE_MANAGER property. .SH SEE ALSO .BR X (1), .BR xscreensaver (1) .SH COPYRIGHT Copyright \(co 2002 by Allan R. Wilks and David Bagley. 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. .SH AUTHOR Allan R. Wilks and David Bagley. xscreensaver-5.36/hacks/attraction.man000644 000767 000024 00000017553 12701612217 020106 0ustar00jwzstaff000000 000000 .de EX \"Begin example .ne 5 .if n .sp 1 .if t .sp .5 .nf .in +.5i .. .de EE .fi .in -.5i .if n .sp 1 .if t .sp .5 .. .TH XScreenSaver 1 "14-Jun-97" "X Version 11" .SH NAME attraction - interactions of opposing forces .SH SYNOPSIS .B attraction [\-display \fIhost:display.screen\fP] [\-foreground \fIcolor\fP] [\-background \fIcolor\fP] [\-window] [\-root] [\-mono] [\-install] [\-visual \fIvisual\fP] [\-points \fIint\fP] [\-threshold \fIint\fP] [\-mode balls | lines | polygons | splines | filled-splines | tails ] [\-size \fIint\fP] [\-segments \fIint\fP] [\-delay \fIusecs\fP] [\-color-shift \fIint\fP] [\-radius \fIint\fP] [\-vx \fIint\fP] [\-vy \fIint\fP] [\-glow] [\-noglow] [\-orbit] [\-viscosity \fIfloat\fP] [\-walls] [\-nowalls] [\-maxspeed] [\-nomaxspeed] [\-correct-bounce] [\-fast-bounce] [\-fps] .SH DESCRIPTION The \fIattraction\fP program has several visually different modes of operation, all of which are based on the interactions of a set of control points which attract each other up to a certain distance, and then begin to repel each other. The attraction/repulsion is proportional to the distance between any two particles. .SH OPTIONS .I attraction accepts the following options: .TP 8 .B \-window Draw on a newly-created window. This is the default. .TP 8 .B \-root Draw on the root window. .TP 8 .B \-mono If on a color display, pretend we're on a monochrome display. .TP 8 .B \-install Install a private colormap for the window. .TP 8 .B \-visual \fIvisual\fP Specify which visual to use. Legal values are the name of a visual class, or the id number (decimal or hex) of a specific visual. .TP 8 .B \-points integer How many control points should be used, or 0 to select the number randomly. Default 0. Between 3 and 15 works best. .TP 8 .B \-threshold integer The distance (in pixels) from each particle at which the attractive force becomes repulsive. Default 100. .TP 8 .B \-mode "balls | lines | polygons | tails | splines | filled-splines" In \fIballs\fP mode (the default) the control points are drawn as filled circles. The larger the circle, the more massive the particle. In \fIlines\fP mode, the control points are connected by straight lines; the effect is something like \fIqix\fP. In \fIpolygons\fP mode, the control points are connected by straight lines, and filled in. This is most interesting in color. In \fIsplines\fP mode, a closed spline is interpolated from the control points. In \fIfilled-splines\fP mode, the splines are filled in instead of being outlines. This is most interesting in color. In \fItails\fP mode, the path which each particle follows is indicated by a worm-like trail, whose length is controlled by the \fIsegments\fP parameter. .TP 8 .B \-size integer The size of the balls in pixels, or 0, meaning to select the sizes randomly (the default.) If this is specified, then all balls will be the same size. This option has an effect in all modes, since the ``size'' of the balls controls their mass. .TP 8 .B \-segments integer If in \fIlines\fP or \fIpolygons\fP mode, how many sets of line segments or polygons should be drawn. Default 500. This has no effect in \fIballs\fP mode. If \fIsegments\fP is 0, then no segments will ever be erased (this is only useful in color.) .TP 8 .B \-delay microseconds How much of a delay should be introduced between steps of the animation. Default 10000, or about 0.01 seconds. .TP 8 .B \-color-shift int If on a color display, the color of the line segments or polygons will cycle through the color map. This specifies how many lines will be drawn before a new color is chosen. (When a small number of colors are available, increasing this value will yield smoother transitions.) Default 3. This has no effect in \fIballs\fP mode. .TP 8 .B \-radius The size in pixels of the circle on which the points are initially positioned. The default is slightly smaller than the size of the window. .TP 8 .B \-glow This is consulted only in \fIballs\fP mode. If this is specified, then the saturation of the colors of the points will vary according to their current acceleration. This has the effect that the balls flare brighter when they are reacting to each other most strongly. In \fIglow\fP mode, all of the balls will be drawn the same (random) color, modulo the saturation shifts. In non-glow mode, the balls will each be drawn in a random color that doesn't change. .TP 8 .B \-noglow Don't do ``glowing.'' This is the default. .TP 8 .B \-vx pixels .TP 8 .B \-vy pixels Initial velocity of the balls. This has no effect in \fB\-orbit\fP mode. .TP 8 .B \-orbit Make the initial force on each ball be tangential to the circle on which they are initially placed, with the right velocity to hold them in orbit about each other. After a while, roundoff errors will cause the orbit to decay. .TP 8 .B \-vmult float In orbit mode, the initial velocity of the balls is multiplied by this; a number less than 1 will make the balls pull closer together, and a larger number will make them move apart. The default is 0.9, meaning a slight inward pull. .TP 8 .B \-viscosity float This sets the viscosity of the hypothetical fluid through which the control points move; the default is 1, meaning no resistance. Values higher than 1 aren't interesting; lower values cause less motion. One interesting thing to try is .EX attraction -viscosity 0.8 -points 300 -size 10 -geometry =500x500 .EE Give it a few seconds to settle down into a stable clump, and then move the drag the mouse through it to make "waves". .TP 8 .B \-nowalls This will cause the balls to continue on past the edge of the screen or window. They will still be kept track of and can come back. .TP 8 .B \-walls This will cause the balls to bounce when they get to the edge of the screen or window. This is the default behavior. .TP 8 .B \-maxspeed Imposes a maximum speed (default). If a ball ends up going faster than this, it will be treated as though there were .9 viscosity until it is under the limit. This stops the balls from continually accelerating (which they have a tendency to do), but also causes balls moving very fast to tend to clump in the lower right corner. .TP 8 .B \-nomaxspeed If this is specified, no maximum speed is set for the balls. .TP 8 .B \-fast-bounce Uses the old, simple bouncing algorithm (default). This simply moves any ball that is out of bounds back to a wall and reverses its velocity. This works fine for most cases, but under some circumstances, the simplification can lead to annoying effects. .TP 8 .B \-correct-bounce Uses a more intelligent bouncing algorithm. This method actually reflects the balls off the walls until they are within bounds. This can be slow if balls are bouncing a whole lot, perhaps because of -nomaxspeed. .TP 8 .B \-graphmode none | x | y | both | speed For "x", "y", and "both", displays the given velocities of each ball as a bar graph in the same window as the balls. For "speed", displays the total speed of each ball. Default is "none". .BR .TP 8 .B \-fps Display the current frame rate and CPU load. .SH ENVIRONMENT .B DISPLAY to get the default host and display number. .TP 8 .B XENVIRONMENT to get the name of a resource file that overrides the global resources stored in the RESOURCE_MANAGER property. .SH SEE ALSO .BR X (1), .BR xscreensaver (1) .SH COPYRIGHT Copyright \(co 1992, 1993, 1997 by 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. .SH AUTHOR Jamie Zawinski , 13-aug-92. Viscosity support by Philip Edward Cutone, III. Walls, speed limit options, new bouncing, graphs, and tail mode fix by Matthew Strait. 31 March 2001 xscreensaver-5.36/hacks/blaster.man000644 000767 000024 00000003526 12701612217 017365 0ustar00jwzstaff000000 000000 .TH XScreenSaver 1 "" "X Version 11" .SH NAME blaster - simulation of space combat .SH SYNOPSIS .B blaster [\-display \fIhost:display.screen\fP] [\-visual \fIvisual\fP] [\-window] [\-root] [\-num_robots \fInumber\fP] [\-num_lasers \fInumber\fP] [\-num_stars \fInumber\fP] [\-delay \fInumber\fP] [\-fps] .SH DESCRIPTION Draws a simulation of flying space-combat robots (cleverly disguised as colored circles) doing battle in front of a moving star field. .SH OPTIONS .TP 8 .B \-visual \fIvisual\fP Specify which visual to use. Legal values are the name of a visual class, or the id number (decimal or hex) of a specific visual. .TP 8 .B \-window Draw on a newly-created window. This is the default. .TP 8 .B \-root Draw on the root window. .TP 8 .B \-num_robots \fInumber\fP Robots. 2 - 50. Default: 5. .TP 8 .B \-num_lasers \fInumber\fP Lasers. 1 - 100. Default: 3. .TP 8 .B \-num_stars \fInumber\fP Stars. 5 - 200. Default: 50. .TP 8 .B \-delay \fInumber\fP Per-frame delay, in microseconds. Default: 10000 (0.01 seconds.). .TP 8 .B \-fps Display the current frame rate and CPU load. .SH ENVIRONMENT .PP .TP 8 .B DISPLAY to get the default host and display number. .TP 8 .B XENVIRONMENT to get the name of a resource file that overrides the global resources stored in the RESOURCE_MANAGER property. .SH SEE ALSO .BR X (1), .BR xscreensaver (1) .SH COPYRIGHT Copyright \(co 2002 by Jonathan Lin. 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. .SH AUTHOR Jonathan Lin. xscreensaver-5.36/hacks/blitspin.man000644 000767 000024 00000007061 12701612217 017553 0ustar00jwzstaff000000 000000 .TH XScreenSaver 1 "24-Nov-97" "X Version 11" .SH NAME blitspin - rotate a bitmap in an interesting way .SH SYNOPSIS .B blitspin [\-display \fIhost:display.screen\fP] [\-foreground \fIcolor\fP] [\-background \fIcolor\fP] [\-window] [\-root] [\-mono] [\-install] [\-visual \fIvisual\fP] [\-bitmap \fIfilename\fP] [\-delay \fIusecs\fP] [\-delay2 \fIusecs\fP] [\-duration \fIsecs\fP] .SH DESCRIPTION The \fIblitspin\fP program repeatedly rotates a bitmap by 90 degrees by using logical operations: the bitmap is divided into quadrants, and the quadrants are shifted clockwise. Then the same thing is done again with progressively smaller quadrants, except that all sub-quadrants of a given size are rotated in parallel. So this takes \fBO(16*log2(N))\fP blits of size NxN, with the limitation that the image must be square, and the size must be a power of 2. .SH OPTIONS .I blitspin accepts the following options: .TP 8 .B \-window Draw on a newly-created window. This is the default. .TP 8 .B \-root Draw on the root window. .TP 8 .B \-mono If on a color display, pretend we're on a monochrome display. .TP 8 .B \-install Install a private colormap for the window. .TP 8 .B \-visual \fIvisual\fP Specify which visual to use. Legal values are the name of a visual class, or the id number (decimal or hex) of a specific visual. .TP 8 .B \-bitmap \fIfilename\fP The file name of a bitmap to rotate. It need not be square: it will be padded with the background color. If unspecified or the string \fI(default)\fP, a builtin bitmap is used. If support for the \fIXPM\fP library was enabled at compile-time, the specified file may be in \fIXPM\fP format as well as \fIXBM\fP, and thus may be a color image. The \fB*bitmapFilePath\fP resource will be searched if the bitmap name is not a fully-qualified pathname. .TP 8 .B \-grab\-screen If this option is specified, then the image which is spun will be grabbed from the portion of the screen underlying the blitspin window, or from the system's video input, or from a random file on disk, as indicated by the \fIgrabDesktopImages\fP, \fIgrabVideoFrames\fP, and \fIchooseRandomImages\fP options in the \fI~/.xscreensaver\fP file; see .BR xscreensaver-demo (1) for more details. .TP 8 .B \-delay \fImicroseconds\fP How long to delay between steps of the rotation process, in microseconds. Default is 500000, one-half second. .TP 8 .B \-duration \fIseconds\fP How long to run before loading a new image. Default 120 seconds. .TP 8 .B \-delay2 \fImicroseconds\fP How long to delay between each 90-degree rotation, in microseconds. Default is 500000, one-half second. .B DISPLAY to get the default host and display number. .TP 8 .B \-fps Display the current frame rate and CPU load. .SH ENVIRONMENT .B XENVIRONMENT to get the name of a resource file that overrides the global resources stored in the RESOURCE_MANAGER property. .SH SEE ALSO .BR X (1), .BR xscreensaver (1), .BR xscreensaver-demo (1), .BR xscreensaver-getimage (1) .SH COPYRIGHT Copyright \(co 1992, 1993, 1997, 2001 by 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. .SH AUTHOR Jamie Zawinski , 17-aug-92. Based on SmallTalk code which appeared in the August 1981 issue of Byte magazine. xscreensaver-5.36/hacks/bouboule.man000644 000767 000024 00000004336 12701612217 017545 0ustar00jwzstaff000000 000000 .TH XScreenSaver 1 "15-May-97" "X Version 11" .SH NAME bouboule - draws spinning 3D blobs .SH SYNOPSIS .B bouboule [\-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] [\-3d] [\-fps] .SH DESCRIPTION The \fIbouboule\fP program draws spinning 3D blobs. .SH OPTIONS .I bouboule accepts the following options: .TP 8 .B \-window Draw on a newly-created window. This is the default. .TP 8 .B \-root Draw on the root window. .TP 8 .B \-mono If on a color display, pretend we're on a monochrome display. .TP 8 .B \-install Install a private colormap for the window. .TP 8 .B \-visual \fIvisual\fP Specify which visual to use. Legal values are the name of a visual class, or the id number (decimal or hex) of a specific visual. .TP 8 .B \-ncolors \fIinteger\fP How many colors should be used (if possible). Default 64. The colors used cycle through the hue, making N stops around the color wheel. .TP 8 .B \-cycles \fIinteger\fP .TP 8 .B \-count \fIinteger\fP .TP 8 .B \-3d Do red/blue 3d separations (for 3d glasses.) .TP 8 .B \-fps Display the current frame rate and CPU load. .SH ENVIRONMENT .PP .TP 8 .B DISPLAY to get the default host and display number. .TP 8 .B XENVIRONMENT to get the name of a resource file that overrides the global resources stored in the RESOURCE_MANAGER property. .SH SEE ALSO .BR X (1), .BR xscreensaver (1), .BR xlock (1) .SH COPYRIGHT Copyright \(co 1996 by Jeremie Petit. Permission to use, copy, modify, and distribute this software and its documentation for any purpose and without fee is hereby granted, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation. .SH AUTHOR Jeremie Petit , 1996. 3D support by Henrik Theiling , 04-Sep-96. VMS support by Jouk Jansen , 01-Feb-96. TrueColor support by David Bagley , 01-Feb-96. Ability to run standalone or with \fIxscreensaver\fP added by Jamie Zawinski , 15-May-97. xscreensaver-5.36/hacks/braid.man000644 000767 000024 00000003770 12701612217 017013 0ustar00jwzstaff000000 000000 .TH XScreenSaver 1 "10-May-97" "X Version 11" .SH NAME braid - draws random color-cycling braids around a circle .SH SYNOPSIS .B braid [\-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 The \fIbraid\fP program draws random color-cycling braids around a circle. .SH OPTIONS .I braid accepts the following options: .TP 8 .B \-window Draw on a newly-created window. This is the default. .TP 8 .B \-root Draw on the root window. .TP 8 .B \-mono If on a color display, pretend we're on a monochrome display. .TP 8 .B \-install Install a private colormap for the window. .TP 8 .B \-visual \fIvisual\fP Specify which visual to use. Legal values are the name of a visual class, or the id number (decimal or hex) of a specific visual. .TP 8 .B \-ncolors \fIinteger\fP How many colors should be used (if possible). Default 64. The colors used cycle through the hue, making N stops around the color wheel. .TP 8 .B \-cycles \fIinteger\fP .TP 8 .B \-count \fIinteger\fP .TP 8 .B \-fps Display the current frame rate and CPU load. .SH ENVIRONMENT .PP .TP 8 .B DISPLAY to get the default host and display number. .TP 8 .B XENVIRONMENT to get the name of a resource file that overrides the global resources stored in the RESOURCE_MANAGER property. .SH SEE ALSO .BR X (1), .BR xscreensaver (1), .BR xlock (1) .SH COPYRIGHT Copyright \(co 1995 by John Neil. Permission to use, copy, modify, and distribute this software and its documentation for any purpose and without fee is hereby granted, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation. .SH AUTHOR John Neil , 29-Aug-95. Ability to run standalone or with \fIxscreensaver\fP added by Jamie Zawinski , 10-May-97. xscreensaver-5.36/hacks/bsod.man000644 000767 000024 00000010160 12703606025 016652 0ustar00jwzstaff000000 000000 .de EX \"Begin example .ne 5 .if n .sp 1 .if t .sp .5 .nf .in +.5i .. .de EE .fi .in -.5i .if n .sp 1 .if t .sp .5 .. .TH XScreenSaver 1 "5-May-2004" "X Version 11" .SH NAME bsod - Blue Screen of Death emulator .SH SYNOPSIS .B bsod [\-display \fIhost:display.screen\fP] [\-foreground \fIcolor\fP] [\-background \fIcolor\fP] [\-window] [\-root] [\-mono] [\-install] [\-visual \fIvisual\fP] [\-delay \fIseconds\fP] [\-fps] .SH DESCRIPTION The .I bsod program is the finest in personal computer emulation. .PP .I bsod steps through a set of screens, each one a recreation of a different failure mode of an operating system. Systems depicted include Windows 3.1, Windows 95, Windows NT, MS-DOS, AmigaDOS 1.3, Linux, SCO UNIX, BSD UNIX, HPUX, Solaris, Tru64, VMS, HVX/GCOS6, IBM OS/390, OS/2, MacOS (MacsBug, Bomb, Sad Mac, and OSX), Atari ST, Apple ][+, and NCD X Terminals. .PP .SH OPTIONS .I bsod accepts the following options: .TP 8 .B \-window Draw on a newly-created window. This is the default. .TP 8 .B \-root Draw on the root window. .TP 8 .B \-mono If on a color display, pretend we're on a monochrome display. .TP 8 .B \-install Install a private colormap for the window. .TP 8 .B \-visual \fIvisual\fP Specify which visual to use. Legal values are the name of a visual class, or the id number (decimal or hex) of a specific visual. .TP 8 .B \-delay \fIdelay\fP The duration each crash-mode is displayed before selecting another. .TP 8 .B \-only \fIwhich\fP Tell it to run only one mode, e.g., \fI\-only HPUX\fP. .TP 8 .B \-fps Display the current frame rate and CPU load. .SH ENVIRONMENT .PP .TP 8 .B DISPLAY to get the default host and display number. .TP 8 .B XENVIRONMENT to get the name of a resource file that overrides the global resources stored in the RESOURCE_MANAGER property. .SH X RESOURCES Notable X resources supported include the following, which control which hacks are displayed and which aren't. .BR doWindows , .BR doNT , .BR doWin2K , .BR doWin10 , .BR doAmiga , .BR doMac , .BR doMac1 , .BR doMacsBug , .BR doMacX , .BR doSCO , .BR doAtari , .BR doBSD , .BR doLinux , .BR doSparcLinux , .BR doHPPALinux , .BR doBlitDamage , .BR doSolaris , .BR doHPUX , .BR doApple2 , .BR doOS390 , .BR doTru64 , .BR doVMS , .BR doMSDOS , .BR doOS2 , .BR doHVX , and .BR doATM . Each of these is a Boolean resource, they all default to true, except for doAtari, doBSD, doSparcLinux, and doHPPALinux, which are turned off by default, because they're really not all that interesting looking unless you're a fan of those systems. There are command-line options for all of these: e.g., \fI\-bsd\fP, \fI\-no-bsd\fP. (Also note the \fI\-only\fP option.) .SH BUGS Unlike the systems being simulated, \fIbsod\fP does not require a reboot after running. .SH SEE ALSO .BR X (1), .BR xscreensaver (1), .BR http://www.microsoft.com/ , .BR http://www.apple.com/ , .BR http://www.sco.com/ , .BR http://www.kernel.org/ , and .BR http://www.amiga.de/ . .SH TRADEMARKS Microsoft Windows, Microsoft Windows 95, and Microsoft Windows NT are all registered trademarks of Microsoft Corporation. Apple Macintosh is a registered trademark of Apple Computer. Amiga is a registered trademark of Amiga International, Inc. Atari ST is probably a trademark, too, but it's hard to tell who owns it. Linux is a registered trademark of Linus Torvalds, but it isn't his fault. OS/2 is a registered trademark of International Business Machines Corporation. .SH COPYRIGHT Copyright \(co 1998-2003 by 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. No animals were harmed during the testing of these simulations. Always mount a scratch monkey. .SH AUTHOR Concept cribbed from Stephen Martin . This version is by Jamie Zawinski , with contributions from many others. xscreensaver-5.36/hacks/bumps.man000644 000767 000024 00000004534 12701612220 017051 0ustar00jwzstaff000000 000000 .TH XScreenSaver 1 "05-Apr-1999" "X Version 11" .SH NAME bumps - move distorting spotlight around desktop .SH SYNOPSIS .B bumps [\-display \fIhost:display.screen\fP] [\-foreground \fIcolor\fP] [\-background \fIcolor\fP] [\-window] [\-root] [\-mono] [\-install] [\-visual \fIvisual\fP] [\-delay \fIusecs\fP] [\-duration \fIsecs\fP] [\-fps] .SH DESCRIPTION The \fIbumps\fP program takes an image and exposes small, distorted sections of it as if through an odd wandering spotlight beam. The image that it manipulates will be grabbed from the portion of the screen underlying the window, or from the system's video input, or from a random file on disk, as indicated by the \fIgrabDesktopImages\fP, \fIgrabVideoFrames\fP, and \fIchooseRandomImages\fP options in the \fI~/.xscreensaver\fP file; see .BR xscreensaver-demo (1) for more details. .SH OPTIONS .I bumps accepts the following options: .TP 8 .B \-window Draw on a newly-created window. This is the default. .TP 8 .B \-root Draw on the root window. .TP 8 .B \-mono If on a color display, pretend we're on a monochrome display. .TP 8 .B \-install Install a private colormap for the window. .TP 8 .B \-visual \fIvisual\fP Specify which visual to use. Legal values are the name of a visual class, or the id number (decimal or hex) of a specific visual. .TP 8 .B \-delay \fImicroseconds\fP Slow it down. .TP 8 .B \-duration \fIseconds\fP How long to run before loading a new image. Default 120 seconds. .TP 8 .B \-fps Display the current frame rate and CPU load. .SH ENVIRONMENT .PP .TP 8 .B DISPLAY to get the default host and display number. .TP 8 .B XENVIRONMENT to get the name of a resource file that overrides the global resources stored in the RESOURCE_MANAGER property. .SH SEE ALSO .BR X (1), .BR xscreensaver (1), .BR xscreensaver\-demo (1), .BR xscreensaver\-getimage (1) .SH COPYRIGHT Copyright \(co 1999 by Shane Smit. 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. .SH CREDITS Shane Smit , 8-Oct-1999. xscreensaver-5.36/hacks/ccurve.man000644 000767 000024 00000003222 12701612220 017203 0ustar00jwzstaff000000 000000 .TH XScreenSaver 1 "" "X Version 11" .SH NAME ccurve - self-similar linear fractals. .SH SYNOPSIS .B ccurve [\-display \fIhost:display.screen\fP] [\-visual \fIvisual\fP] [\-window] [\-root] [\-delay \fInumber\fP] [\-pause \fInumber\fP] [\-limit \fInumber\fP] [\-fps] .SH DESCRIPTION Generates self-similar linear fractals, including the classic ``C Curve.'' .SH OPTIONS .TP 8 .B \-visual \fIvisual\fP Specify which visual to use. Legal values are the name of a visual class, or the id number (decimal or hex) of a specific visual. .TP 8 .B \-window Draw on a newly-created window. This is the default. .TP 8 .B \-root Draw on the root window. .TP 8 .B \-delay \fInumber\fP Delay. 0 - 60. Default: 1. .TP 8 .B \-pause \fInumber\fP Duration. 1 - 60. Default: 3. .TP 8 .B \-limit \fInumber\fP Density. 3 - 300000. Default: 200000. .TP 8 .B \-fps Display the current frame rate and CPU load. .SH ENVIRONMENT .PP .TP 8 .B DISPLAY to get the default host and display number. .TP 8 .B XENVIRONMENT to get the name of a resource file that overrides the global resources stored in the RESOURCE_MANAGER property. .SH SEE ALSO .BR X (1), .BR xscreensaver (1) .SH COPYRIGHT Copyright \(co 2002 by Rick Campbell. 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. .SH AUTHOR Rick Campbell. xscreensaver-5.36/hacks/compass.man000644 000767 000024 00000003137 12701612220 017366 0ustar00jwzstaff000000 000000 .TH XScreenSaver 1 "" "X Version 11" .SH NAME compass - draws a spinning compass. .SH SYNOPSIS .B compass [\-display \fIhost:display.screen\fP] [\-visual \fIvisual\fP] [\-window] [\-root] [\-delay \fInumber\fP] [\-no-db] [\-fps] .SH DESCRIPTION This draws a compass, with all elements spinning about randomly, for that ``lost and nauseous'' feeling. .SH OPTIONS .TP 8 .B \-visual \fIvisual\fP Specify which visual to use. Legal values are the name of a visual class, or the id number (decimal or hex) of a specific visual. .TP 8 .B \-window Draw on a newly-created window. This is the default. .TP 8 .B \-root Draw on the root window. .TP 8 .B \-delay \fInumber\fP Per-frame delay, in microseconds. Default: 20000 (0.02 seconds.). .TP 8 .B \-db | \-no-db Double Buffer. Boolean. .TP 8 .B \-fps Display the current frame rate and CPU load. .SH ENVIRONMENT .PP .TP 8 .B DISPLAY to get the default host and display number. .TP 8 .B XENVIRONMENT to get the name of a resource file that overrides the global resources stored in the RESOURCE_MANAGER property. .SH SEE ALSO .BR X (1), .BR xscreensaver (1) .SH COPYRIGHT Copyright \(co 2002 by 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. .SH AUTHOR Jamie Zawinski. xscreensaver-5.36/hacks/coral.man000644 000767 000024 00000003405 12701612220 017017 0ustar00jwzstaff000000 000000 .TH XScreenSaver 1 "" "X Version 11" .SH NAME coral - simulates coral growth, albeit somewhat slowly. .SH SYNOPSIS .B coral [\-display \fIhost:display.screen\fP] [\-visual \fIvisual\fP] [\-window] [\-root] [\-delay2 \fInumber\fP] [\-delay \fInumber\fP] [\-density \fInumber\fP] [\-seeds \fInumber\fP] [\-fps] .SH DESCRIPTION Simulates coral growth, albeit somewhat slowly. .SH OPTIONS .TP 8 .B \-visual \fIvisual\fP Specify which visual to use. Legal values are the name of a visual class, or the id number (decimal or hex) of a specific visual. .TP 8 .B \-window Draw on a newly-created window. This is the default. .TP 8 .B \-root Draw on the root window. .TP 8 .B \-delay2 \fInumber\fP Per-frame delay, in microseconds. Default: 1000 (0.001 seconds.). .TP 8 .B \-delay \fInumber\fP Duration. 1 - 60. Default: 5. .TP 8 .B \-density \fInumber\fP Density. 1 - 90. Default: 25. .TP 8 .B \-seeds \fInumber\fP Seeds. 1 - 100. Default: 20. .TP 8 .B \-fps Display the current frame rate and CPU load. .SH ENVIRONMENT .PP .TP 8 .B DISPLAY to get the default host and display number. .TP 8 .B XENVIRONMENT to get the name of a resource file that overrides the global resources stored in the RESOURCE_MANAGER property. .SH SEE ALSO .BR X (1), .BR xscreensaver (1) .SH COPYRIGHT Copyright \(co 2002 by Frederick Roeber. 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. .SH AUTHOR Frederick Roeber. xscreensaver-5.36/hacks/crystal.man000644 000767 000024 00000004115 12701612220 017377 0ustar00jwzstaff000000 000000 .TH XScreenSaver 1 "" "X Version 11" .SH NAME crystal - kaleidescope. .SH SYNOPSIS .B crystal [\-display \fIhost:display.screen\fP] [\-visual \fIvisual\fP] [\-window] [\-root] [\-grid] [\-no-cell] [\-centre] [\-nx \fInumber\fP] [\-ny \fInumber\fP] [\-count \fInumber\fP] [\-delay \fInumber\fP] [\-ncolors \fInumber\fP] [\-fps] .SH DESCRIPTION Moving polygons, similar to a kaleidescope (more like a kaleidescope than the hack called `kaleid,' actually.) .SH OPTIONS .TP 8 .B \-visual \fIvisual\fP Specify which visual to use. Legal values are the name of a visual class, or the id number (decimal or hex) of a specific visual. .TP 8 .B \-window Draw on a newly-created window. This is the default. .TP 8 .B \-root Draw on the root window. .TP 8 .B \-grid | \-no-grid Whether to draw grid. .TP 8 .B \-cell | \-no-cell Whether to draw the cell. .TP 8 .B \-centre | \-no-centre Whether to center on screen .TP 8 .B \-nx \fInumber\fP Horizontal Symmetries. -10 - 10. Default: -3. .TP 8 .B \-ny \fInumber\fP Vertical Symmetries. -10 - 10. Default: -3. .TP 8 .B \-count \fInumber\fP Count. -5000 - 5000. Default: -500. .TP 8 .B \-delay \fInumber\fP Per-frame delay, in microseconds. Default: 60000 (0.06 seconds.). .TP 8 .B \-ncolors \fInumber\fP Number of Colors. Default: 100. .TP 8 .B \-fps Display the current frame rate and CPU load. .SH ENVIRONMENT .PP .TP 8 .B DISPLAY to get the default host and display number. .TP 8 .B XENVIRONMENT to get the name of a resource file that overrides the global resources stored in the RESOURCE_MANAGER property. .SH SEE ALSO .BR X (1), .BR xscreensaver (1) .SH COPYRIGHT Copyright \(co 2002 by Jouk Jansen. 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. .SH AUTHOR Jouk Jansen. xscreensaver-5.36/hacks/cynosure.man000664 000767 000024 00000003722 12701612220 017572 0ustar00jwzstaff000000 000000 .TH XScreenSaver 1 "" "X Version 11" .SH NAME cynosure - gentle overlapping squares screen saver. .SH SYNOPSIS .B cynosure [\-display \fIhost:display.screen\fP] [\-visual \fIvisual\fP] [\-window] [\-root] [\-delay \fInumber\fP] [\-ncolors \fInumber\fP] [\-iterations \fInumber\fP] [\-fps] .SH DESCRIPTION A hack similar to `greynetic', but less frenetic. The first implementation was by Stephen Linhart; then Ozymandias G. Desiderata wrote a Java applet clone. That clone was discovered by Jamie Zawinski, and ported to C for inclusion here. .SH OPTIONS .TP 8 .B \-visual \fIvisual\fP Specify which visual to use. Legal values are the name of a visual class, or the id number (decimal or hex) of a specific visual. .TP 8 .B \-window Draw on a newly-created window. This is the default. .TP 8 .B \-root Draw on the root window. .TP 8 .B \-delay \fInumber\fP Per-frame delay, in microseconds. Default: 500000 (0.50 seconds.). .TP 8 .B \-ncolors \fInumber\fP Number of Colors. Default: 128. .TP 8 .B \-iterations \fInumber\fP Duration. 2 - 200. Default: 100. .TP 8 .B \-fps Display the current frame rate and CPU load. .SH ENVIRONMENT .PP .TP 8 .B DISPLAY to get the default host and display number. .TP 8 .B XENVIRONMENT to get the name of a resource file that overrides the global resources stored in the RESOURCE_MANAGER property. .SH SEE ALSO .BR X (1), .BR xscreensaver (1) .SH COPYRIGHT Copyright \(co 2002 by Stephen Linhart, Ozymandias G. Desiderata, and 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. .SH AUTHOR Stephen Linhart, Ozymandias G. Desiderata, and Jamie Zawinski. xscreensaver-5.36/hacks/decayscreen.man000644 000767 000024 00000005774 12701612220 020217 0ustar00jwzstaff000000 000000 .TH XScreenSaver 1 "05-Apr-1999" "X Version 11" .SH NAME decayscreen - make a screen meltdown. .SH SYNOPSIS .B decayscreen [\-display \fIhost:display.screen\fP] [\-window] [\-root] [\-mono] [\-install] [\-visual \fIvisual\fP] [\-delay \fIusecs\fP] [\-duration \fIsecs\fP] [\-mode \fImode\fP] [\-fps] .SH DESCRIPTION The \fIdecayscreen\fP program creates a melting effect by randomly shifting rectangles around the screen. The image that it manipulates will be grabbed from the portion of the screen underlying the window, or from the system's video input, or from a random file on disk, as indicated by the \fIgrabDesktopImages\fP, \fIgrabVideoFrames\fP, and \fIchooseRandomImages\fP options in the \fI~/.xscreensaver\fP file; see .BR xscreensaver-demo (1) for more details. .SH OPTIONS .I decayscreen accepts the following options: .TP 8 .B \-window Draw on a newly-created window. This is the default. .TP 8 .B \-root Draw on the root window. .TP 8 .B \-mono If on a color display, pretend we're on a monochrome display. .TP 8 .B \-install Install a private colormap for the window. .TP 8 .B \-visual \fIvisual\fP Specify which visual to use. Legal values are the name of a visual class, or the id number (decimal or hex) of a specific visual. .TP 8 .B \-delay \fImicroseconds\fP Slow it down. .TP 8 .B \-duration \fIseconds\fP How long to run before loading a new image. Default 120 seconds. .TP 8 .B \-mode \fImode\fP The direction in which the image should tend to slide. Legal values are \fIrandom\fP (meaning pick one), \fIup\fP, \fIleft\fP, \fIright\fP, \fIdown\fP, \fIupleft\fP, \fIdownleft\fP, \fIupright\fP, \fIdownright\fP, \fIshuffle\fP (meaning prefer no particular direction), \fIin\fP (meaning move things toward the center), \fIout\fP (meaning move things away from the center), \fImelt\fP (meaning melt straight downward), \fIstretch\fP (meaning stretch the screen downward), and \fIfuzz\fP (meaning go blurry instead of melty). .TP 8 .B \-fps Display the current frame rate and CPU load. .SH ENVIRONMENT .PP .TP 8 .B DISPLAY to get the default host and display number. .TP 8 .B XENVIRONMENT to get the name of a resource file that overrides the global resources stored in the RESOURCE_MANAGER property. .SH "SEE ALSO" .BR X (1), .BR xscreensaver (1), .BR xscreensaver\-demo (1), .BR xscreensaver\-getimage (1) .SH COPYRIGHT Copyright 1992 by Vivek Khera. 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. .SH AUTHOR Vivek Khera , 05-Aug-93; based on code by David Wald, 1988. Modified by jwz, 28-Nov-1997. Modified by Rick Schultz 05-Apr-1999. Modified by Vince Levey 25-Oct-2001. xscreensaver-5.36/hacks/deco.man000644 000767 000024 00000006035 12701612220 016633 0ustar00jwzstaff000000 000000 .TH XScreenSaver 1 "27-Apr-97" "X Version 11" .SH NAME deco - draw tacky 70s basement wall panelling .SH SYNOPSIS .B deco [\-display \fIhost:display.screen\fP] [\-foreground \fIcolor\fP] [\-background \fIcolor\fP] [\-window] [\-root] [\-mono] [\-install] [\-visual \fIvisual\fP] [\-delay \fIseconds\fP] [\-max\-depth \fIint\fP] [\-min\-width \fIint\fP] [\-min\-height \fIint\fP] [\-line-width \yIint\fP] [\-smooth\-colors] [\-golden\-ratio] [\-mondrian] [\-fps] .SH DESCRIPTION The \fIdeco\fP program subdivides and colors rectangles randomly. It looks kind of like Brady-Bunch-era rec-room wall paneling. (Raven says: "This screensaver is ugly enough to peel paint.") Can also produce more aesthetically pleasing displays via options. .SH OPTIONS .I deco accepts the following options: .TP 8 .B \-window Draw on a newly-created window. This is the default. .TP 8 .B \-root Draw on the root window. .TP 8 .B \-mono If on a color display, pretend we're on a monochrome display. .TP 8 .B \-install Install a private colormap for the window. .TP 8 .B \-visual \fIvisual\fP Specify which visual to use. Legal values are the name of a visual class, or the id number (decimal or hex) of a specific visual. .TP 8 .B \-delay \fIseconds\fP How long to wait before starting over. Default 5 seconds. .TP 8 .B \-max\-depth \fIinteger\fP How deep to subdivide. Default 12. .TP 8 .B \-min\-width \fIinteger\fP .TP 8 .B \-min\-height \fIinteger\fP The size of the smallest rectangle to draw. Default 20x20. .TP 8 .B \-line\-width \fIinteger\fP Width of lines drawn between rectangles. Default zero (minimal width). .TP 8 .B \-smooth\-colors .TP 8 .B \-no\-smooth\-colors Whether to use a smooth color palette instead of a random one. Less jarring. Default False. .TP 8 .B \-golden\-ratio .TP 8 .B \-no\-golden\-ratio Whether to subdivide rectangles using the golden ratio instead of 1/2. This ratio is supposed to be more aesthetically pleasing. Default false. .TP 8 .B \-mondrian .TP 8 .B \-no\-mondrian Whether to imitiate style of some famous paintings by Piet Mondrian. Overrides line-width and colormap options. Default false. .TP 8 .B \-fps Display the current frame rate and CPU load. .SH ENVIRONMENT .PP .TP 8 .B DISPLAY to get the default host and display number. .TP 8 .B XENVIRONMENT to get the name of a resource file that overrides the global resources stored in the RESOURCE_MANAGER property. .SH SEE ALSO .BR X (1), .BR xscreensaver (1) .SH COPYRIGHT Copyright \(co 1997 by 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. .SH AUTHOR Jamie Zawinski , 26-Apr-97, based on code by Michael D. Bayne . Golden ratio and Mondrian settings by Lars Huttar. xscreensaver-5.36/hacks/deluxe.man000644 000767 000024 00000003652 12701612220 017211 0ustar00jwzstaff000000 000000 .TH XScreenSaver 1 "" "X Version 11" .SH NAME deluxe - pulsing sequence of stars, circles, and lines. .SH SYNOPSIS .B deluxe [\-display \fIhost:display.screen\fP] [\-visual \fIvisual\fP] [\-window] [\-root] [\-delay \fInumber\fP] [\-thickness \fInumber\fP] [\-count \fInumber\fP] [\-ncolors \fInumber\fP] [\-transparent] [\-no-db] [\-fps] .SH DESCRIPTION This draws a pulsing sequence of stars, circles, and lines. .SH OPTIONS .TP 8 .B \-visual \fIvisual\fP Specify which visual to use. Legal values are the name of a visual class, or the id number (decimal or hex) of a specific visual. .TP 8 .B \-window Draw on a newly-created window. This is the default. .TP 8 .B \-root Draw on the root window. .TP 8 .B \-delay \fInumber\fP Per-frame delay, in microseconds. Default: 5000 (0.01 seconds.). .TP 8 .B \-thickness \fInumber\fP Thickness of lines. Default: 50. .TP 8 .B \-count \fInumber\fP Number of objects. Default: 5. .TP 8 .B \-ncolors \fInumber\fP Number of colors. Default: 20. .TP 8 .B \-transparent | \-no-transparent Whether to use transparency. .TP 8 .B \-db | \-no-db Whether to double buffer. .TP 8 .B \-fps Display the current frame rate and CPU load. .SH ENVIRONMENT .PP .TP 8 .B DISPLAY to get the default host and display number. .TP 8 .B XENVIRONMENT to get the name of a resource file that overrides the global resources stored in the RESOURCE_MANAGER property. .SH SEE ALSO .BR X (1), .BR xscreensaver (1) .SH COPYRIGHT Copyright \(co 2002 by 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. .SH AUTHOR Jamie Zawinski. xscreensaver-5.36/hacks/demon.man000644 000767 000024 00000003557 12701612220 017031 0ustar00jwzstaff000000 000000 .TH XScreenSaver 1 "" "X Version 11" .SH NAME demon - cellular automaton. .SH SYNOPSIS .B demon [\-display \fIhost:display.screen\fP] [\-visual \fIvisual\fP] [\-window] [\-root] [\-count \fInumber\fP] [\-cycles \fInumber\fP] [\-delay \fInumber\fP] [\-ncolors \fInumber\fP] [\-size \fInumber\fP] [\-fps] .SH DESCRIPTION A cellular automaton that starts with a random field, and organizes it into stripes and spirals. .SH OPTIONS .TP 8 .B \-visual \fIvisual\fP Specify which visual to use. Legal values are the name of a visual class, or the id number (decimal or hex) of a specific visual. .TP 8 .B \-window Draw on a newly-created window. This is the default. .TP 8 .B \-root Draw on the root window. .TP 8 .B \-count \fInumber\fP States. 0 - 20. Default: 0. .TP 8 .B \-cycles \fInumber\fP Timeout. 0 - 800000. Default: 1000. .TP 8 .B \-delay \fInumber\fP Per-frame delay, in microseconds. Default: 50000 (0.05 seconds.). .TP 8 .B \-ncolors \fInumber\fP Number of Colors. Default: 64. .TP 8 .B \-size \fInumber\fP Cell Size. -20 - 20. Default: -7. .TP 8 .B \-fps Display the current frame rate and CPU load. .SH ENVIRONMENT .PP .TP 8 .B DISPLAY to get the default host and display number. .TP 8 .B XENVIRONMENT to get the name of a resource file that overrides the global resources stored in the RESOURCE_MANAGER property. .SH SEE ALSO .BR X (1), .BR xscreensaver (1) .SH COPYRIGHT Copyright \(co 2002 by David Bagley. 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. .SH AUTHOR David Bagley. xscreensaver-5.36/hacks/discrete.man000644 000767 000024 00000003347 12701612220 017526 0ustar00jwzstaff000000 000000 .TH XScreenSaver 1 "" "X Version 11" .SH NAME discrete - discrete map iterative function fractal systems. .SH SYNOPSIS .B discrete [\-display \fIhost:display.screen\fP] [\-visual \fIvisual\fP] [\-window] [\-root] [\-cycles \fInumber\fP] [\-delay \fInumber\fP] [\-ncolors \fInumber\fP] [\-fps] .SH DESCRIPTION More ``discrete map'' systems, including new variants of Hopalong and Julia, and a few others. .SH OPTIONS .TP 8 .B \-visual \fIvisual\fP Specify which visual to use. Legal values are the name of a visual class, or the id number (decimal or hex) of a specific visual. .TP 8 .B \-window Draw on a newly-created window. This is the default. .TP 8 .B \-root Draw on the root window. .TP 8 .B \-cycles \fInumber\fP Timeout. 100 - 10000. Default: 2500. .TP 8 .B \-delay \fInumber\fP Per-frame delay, in microseconds. Default: 1000 (0.001 seconds.). .TP 8 .B \-ncolors \fInumber\fP Number of Colors. Default: 100. .TP 8 .B \-fps Display the current frame rate and CPU load. .SH ENVIRONMENT .PP .TP 8 .B DISPLAY to get the default host and display number. .TP 8 .B XENVIRONMENT to get the name of a resource file that overrides the global resources stored in the RESOURCE_MANAGER property. .SH SEE ALSO .BR X (1), .BR xscreensaver (1) .SH COPYRIGHT Copyright \(co 2002 by Tim Auckland. 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. .SH AUTHOR Tim Auckland. xscreensaver-5.36/hacks/distort.man000644 000767 000024 00000007710 12701612220 017412 0ustar00jwzstaff000000 000000 .TH XScreenSaver 1 "17-Oct-99" "X Version 11" .SH NAME distort \- distort the content of the screen in interesting ways .SH SYNOPSIS .B distort [\-root] [\-window] [\-mono] [\-install] [\-noinstall] [\-visual \fIvisual\fP] [\-window\-id \fIwindow\-id\fP] [\-delay \fIusecs\fP] [\-duration \fIsecs\fP] [\-radius \fIpixels\fP] [\-speed \fIint\fP] [\-number \fIint\fP] [\-swamp] [\-bounce] [\-reflect] [\-vortex] [\-magnify] [\-blackhole] [\-slow] [\-shm] [\-no\-shm] [\-fps] .SH DESCRIPTION The \fIdistort\fP program takes an image and lets circular zones of distortion wander randomly around it, distorting what is under them. The mode of distortion and the overall behaviour of the zones can be influenced in various ways. The image that it manipulates will be grabbed from the portion of the screen underlying the window, or from the system's video input, or from a random file on disk, as indicated by the \fIgrabDesktopImages\fP, \fIgrabVideoFrames\fP, and \fIchooseRandomImages\fP options in the \fI~/.xscreensaver\fP file; see .BR xscreensaver-demo (1) for more details. .SH OPTIONS .I distort accepts the following options: .TP 8 .B \-root Draw on the root window. .TP 8 .B \-window Draw on a newly-created window. This is the default. .TP 8 .B \-mono If on a color display, pretend we're on a monochrome display. .TP 8 .B \-install Install a private colormap for the window. .TP 8 .B \-noinstall Don't install a private colormap for the window. .TP 8 .B \-visual \fIvisual\fP Specify which visual to use. Legal values are the name of a visual class or the id number (decimal or hex) of a specific visual. .TP 8 .B \-window\-id \fIwindow\-id\fP Specify which window id to use. .TP 8 .B \-delay \fIusecs\fP Specify the delay between subsequent animation frames in microseconds. .TP 8 .B \-duration \fIseconds\fP How long to run before loading a new image. Default 120 seconds. .TP 8 .B \-radius \fIpixels\fP Specify the radius of the distortion zone in pixels. .TP 8 .B \-speed \fIint\fP Specify the speed at which the distortion zone moves, where 0 is slow, higher numbers are faster (10 is pretty fast.) .TP 8 .B \-number \fIint\fP Specify the number of distortion zones. .TP 8 .B \-swamp Instead of letting zones wander around, let small zones pop up like bubbles in a swamp and leave permanent distortion. \fBWARNING:\fP this option uses a \fIcolossal\fP amount of memory: keep the \fI\-radius\fP small when using \fI\-swamp\fP. .TP 8 .B \-bounce Let zones wander around and bounce off the window border. This is the default. .TP 8 .B \-reflect Mode of distortion that resembles reflection by a cylindrical mirror. .TP 8 .B \-vortex Whirlpool-shaped distortion. Way cool. .TP 8 .B \-magnify This mode of distortion looks like a magnifying glass. .TP 8 .B \-blackhole Suck your pixels beyond the event horizon. Favourite mode of Dr Stephen Hawking. .TP 8 .B \-slow Make the zone wander slower. .TP 8 .B \-shm Use shared memory extension. .TP 8 .B \-no\-shm Don't use shared memory extension. .TP 8 .B \-fps Display the current frame rate and CPU load. .SH ENVIRONMENT .PP .TP 8 .B DISPLAY to get the default host and display number .TP 8 .B XENVIRONMENT to get the name of a resource file that overrides the global resources stored in the RESOURCE_MANAGER property. .SH SEE ALSO .BR X (1), .BR xscreensaver (1), .BR xscreensaver\-demo (1), .BR xscreensaver\-getimage (1) .SH COPYRIGHT Copyright \(co 1998 by Jonas Munsin and 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. .SH AUTHORS Jonas Munsin and Jamie Zawinski . This manual page by Matthias Warkus , 17-Oct-1999. xscreensaver-5.36/hacks/drift.man000644 000767 000024 00000004313 12701612220 017026 0ustar00jwzstaff000000 000000 .TH XScreenSaver 1 "10-May-97" "X Version 11" .SH NAME drift - draws drifting recursive fractal cosmic flames .SH SYNOPSIS .B drift [\-display \fIhost:display.screen\fP] [\-foreground \fIcolor\fP] [\-background \fIcolor\fP] [\-window] [\-root] [\-mono] [\-install] [\-visual \fIvisual\fP] [\-ncolors \fIinteger\fP] [\-delay \fImicroseconds\fP] [\-count \fIinteger\fP] [\-grow] [\-no\-grow] [\-liss] [\-no\-liss] [\-fps] .SH DESCRIPTION The \fIdrift\fP program draws drifting recursive fractal cosmic flames .SH OPTIONS .I drift accepts the following options: .TP 8 .B \-window Draw on a newly-created window. This is the default. .TP 8 .B \-root Draw on the root window. .TP 8 .B \-mono If on a color display, pretend we're on a monochrome display. .TP 8 .B \-install Install a private colormap for the window. .TP 8 .B \-visual \fIvisual\fP Specify which visual to use. Legal values are the name of a visual class, or the id number (decimal or hex) of a specific visual. .TP 8 .B \-ncolors \fIinteger\fP How many colors should be used (if possible). Default 200. The colors used cycle through the hue, making N stops around the color wheel. .TP 8 .B \-count \fIinteger\fP .TP 8 .B \-grow .TP 8 .B \-no\-grow Whether fractals should grow; otherwise, they are animated. .TP 8 .B \-liss .TP 8 .B \-no\-liss Whether we should use lissajous figures to get points. .TP 8 .B \-fps Display the current frame rate and CPU load. .SH ENVIRONMENT .PP .TP 8 .B DISPLAY to get the default host and display number. .TP 8 .B XENVIRONMENT to get the name of a resource file that overrides the global resources stored in the RESOURCE_MANAGER property. .SH SEE ALSO .BR flame (MANSUFFIX), .BR X (1), .BR xscreensaver (1), .BR xlock (1) .SH COPYRIGHT Copyright \(co 1991, 1995 by Scott Draves. Permission to use, copy, modify, and distribute this software and its documentation for any purpose and without fee is hereby granted, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation. .SH AUTHOR Scott Draves , 06-Jun-91, 01-Jun-95. Ability to run standalone or with \fIxscreensaver\fP added by Jamie Zawinski , 10-May-97. xscreensaver-5.36/hacks/epicycle.man000644 000767 000024 00000017344 12701612220 017523 0ustar00jwzstaff000000 000000 .de EX \"Begin example .ne 5 .if n .sp 1 .if t .sp .5 .nf .in +.5i .. .de EE .fi .in -.5i .if n .sp 1 .if t .sp .5 .. .TH XScreenSaver 1 "27-Apr-97" "X Version 11" .SH NAME epicycle - draws a point moving around a circle which moves around a cicle which... .SH SYNOPSIS .B epicycle [\-display \fIhost:display.screen\fP] [\-root] [\-window] [\-mono] [\-install] [\-noinstall] [\-visual \fIviz\fP] [\-colors \fIN\fP] [\-foreground \fIname\fP] [\-color\-shift \fIN\fP] [\-delay \fImicroseconds\fP] [\-holdtime \fIseconds\fP] [\-linewidth \fIN\fP] [\-min_circles \fIN\fP] [\-max_circles \fIN\fP] [\-min_speed \fInumber\fP] [\-max_speed \fInumber\fP] [\-harmonics \fIN\fP] [\-timestep \fInumber\fP] [\-divisor_poisson \fIprobability\fP] [\-size_factor_min \fInumber\fP] [\-size_factor_max \fInumber\fP] [\-fps] .SH DESCRIPTION The epicycle program draws the path traced out by a point on the edge of a circle. That circle rotates around a point on the rim of another circle, and so on, several times. The random curves produced can be simple or complex, convex or concave, but they are always closed curves (they never go in indefinitely). You can configure both the way the curves are drawn and the way in which the random sequence of circles is generated, either with command-line options or X resources. .SH OPTIONS .TP 8 .B \-display \fIhost:display.screen\fP Specifies which X display we should use (see the section DISPLAY NAMES in .BR X (1) for more information about this option). .TP 8 .B \-root Draw on the root window. .TP 8 .B \-window Draw on a newly-created window. This is the default. .TP 8 .B \-mono If on a color display, pretend we're on a monochrome display. If we're on a mono display, we have no choice. .TP 8 .B \-install Install a private colormap for the window. .TP 8 .B \-noinstall Don't install a private colormap for the window. .TP 8 .B \-visual \fIviz\fP Specify which visual to use. Legal values are the name of a visual class, or the id number (decimal or hex) of a specific visual. Possible choices include .RS default, best, mono, monochrome, gray, grey, color, staticgray, staticcolor, truecolor, grayscale, greyscale, pseudocolor, directcolor, \fInumber\fP If a decimal or hexadecimal number is used, .BR XGetVisualInfo (3X) is consulted to obtain the required visual. .RE .TP 8 .B \-colors \fIN\fP How many colors should be used (if possible). The colors are chosen randomly. .TP 8 .B \-foreground \fIname\fP With .BR \-mono , this option selects the foreground colour. .TP 8 .B \-delay \fImicroseconds\fP Specifies the delay between drawing successive line segments of the path. If you do not specify .BR -sync , some X servers may batch up several drawing operations together, producing a less smooth effect. This is more likely to happen in monochrome mode (on monochrome servers or when .B \-mono is specified). .TP 8 .B \-holdtime \fIseconds\fP When the figure is complete, .I epicycle pauses this number of seconds. .TP 8 .B \-linewidth \fIN\fP Width in pixels of the body's track. Specifying values greater than one may cause slower drawing. The fastest value is usually zero, meaning one pixel. .TP 8 .B \-min_circles \fIN\fP Smallest number of epicycles in the figure. .TP 8 .B \-max_circles \fIN\fP Largest number of epicycles in the figure. .TP 8 .B \-min_speed \fInumber\fP Smallest possible value for the base speed of revolution of the epicycles. The actual speeds of the epicycles vary from this down to .IB "min_speed / harmonics" . .TP 8 .B \-max_speed \fInumber\fP Smallest possible value for the base speed of revolution of the epicycles. .TP 8 .B \-harmonics \fIN\fP Number of possible harmonics; the larger this value is, the greater the possible variety of possible speeds of epicycle. .TP 8 .B \-timestep \fInumber\fP Decreasing this value will reduce the distance the body moves for each line segment, possibly producing a smoother figure. Increasing it may produce faster results. .TP 8 .B \-divisor_poisson \fIprobability\fP Each epicycle rotates at a rate which is a factor of the base speed. The speed of each epicycle is the base speed divided by some integer between 1 and the value of the .B \-harmonics option. This integer is decided by starting at 1 and tossing a biased coin. For each consecutive head, the value is incremented by one. The integer will not be incremented above the value of the .B \-harmonics option. The argument of this option decides the bias of the coin; it is the probability that that coin will produce a head at any given toss. .TP 8 .B \-size_factor_min \fInumber\fP Epicycles are always at least this factor smaller than their parents. .TP 8 .B \-size_factor_max \fInumber\fP Epicycles are never more than this factor smaller than their parents. .TP 8 .B \-fps Display the current frame rate and CPU load. .SH RESOURCES .EX Option Resource Default Value ------ -------- ------------- -colors .colors 100 -delay .delay 1000 -holdtime .holdtime 2 -linewidth .lineWidth 4 -min_circles .minCircles 2 -max_circles .maxCircles 10 -min_speed .minSpeed 0.003 -max_speed .maxSpeed 0.005 -harmonics .harmonics 8 -timestep .timestep 1.0 -divisor_poisson .divisorPoisson 0.4 -size_factor_min .sizeFactorMin 1.05 -size_factor_max .sizeFactorMax 2.05 .timestepCoarseFactor 1.0 .EE Before the drawing of the figure is begun, a preliminary calculation of the path is done in order to scale the radii of the epicycles so as to fit the figure on the screen or window. For the sake of speed, This calculation is done with a larger timestep than the actual drawing. The time-step used is the value of the .B \-timestep option multiplied by the timestepCoarseFactor resource. The default value of 1 will almost always work fast enough and so this resource is not available as a command-line option. .SH USER INTERFACE The program runs mostly without user interaction. When running on the root window, no input is accepted. When running in its own window, the program will exit if mouse button 3 is pressed. If any other mouse button is pressed, the current figure will be abandoned and another will be started. .SH HISTORY The geometry of epicycles was perfected by Hipparchus of Rhodes at some time around 125 B.C., 185 years after the birth of Aristarchus of Samos, the inventor of the heliocentric universe model. Hipparchus applied epicycles to the Sun and the Moon. Ptolemy of Alexandria went on to apply them to what was then the known universe, at around 150 A.D. Copernicus went on to apply them to the heliocentric model at the beginning of the sixteenth century. Johannes Kepler discovered that the planets actually move in elliptical orbits in about 1602. The inverse-square law of gravity was suggested by Boulliau in 1645. Isaac Newton's .I Principia Mathematica was published in 1687, and proved that Kepler's laws derived from Newtonian gravitation. .SH BUGS The colour selection is re-done for every figure. This may generate too much network traffic for this program to work well over slow or long links. .SH COPYRIGHT Copyright \(co 1998, James Youngman. 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. .SH AUTHOR James Youngman , April 1998. xscreensaver-5.36/hacks/euler2d.man000644 000767 000024 00000003627 12701612220 017267 0ustar00jwzstaff000000 000000 .TH XScreenSaver 1 "" "X Version 11" .SH NAME euler2d - two dimensional incompressible inviscid fluid flow. .SH SYNOPSIS .B euler2d [\-display \fIhost:display.screen\fP] [\-visual \fIvisual\fP] [\-window] [\-root] [\-count \fInumber\fP] [\-eulertail \fInumber\fP] [\-cycles \fInumber\fP] [\-ncolors \fInumber\fP] [\-delay \fInumber\fP] [\-fps] .SH DESCRIPTION Simulates two dimensional incompressible inviscid fluid flow. .SH OPTIONS .TP 8 .B \-visual \fIvisual\fP Specify which visual to use. Legal values are the name of a visual class, or the id number (decimal or hex) of a specific visual. .TP 8 .B \-window Draw on a newly-created window. This is the default. .TP 8 .B \-root Draw on the root window. .TP 8 .B \-count \fInumber\fP Particles. 2 - 5000. Default: 1024. .TP 8 .B \-eulertail \fInumber\fP Trail Length. 2 - 500. Default: 10. .TP 8 .B \-cycles \fInumber\fP Duration. 100 - 5000. Default: 3000. .TP 8 .B \-ncolors \fInumber\fP Number of Colors. Default: 64. .TP 8 .B \-delay \fInumber\fP Per-frame delay, in microseconds. Default: 10000 (0.01 seconds.). .TP 8 .B \-fps Display the current frame rate and CPU load. .SH ENVIRONMENT .PP .TP 8 .B DISPLAY to get the default host and display number. .TP 8 .B XENVIRONMENT to get the name of a resource file that overrides the global resources stored in the RESOURCE_MANAGER property. .SH SEE ALSO .BR X (1), .BR xscreensaver (1) .SH COPYRIGHT Copyright \(co 2002 by Stephen Montgomery-Smith. 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. .SH AUTHOR Stephen Montgomery-Smith. xscreensaver-5.36/hacks/fadeplot.man000644 000767 000024 00000003525 12701612220 017520 0ustar00jwzstaff000000 000000 .TH XScreenSaver 1 "" "X Version 11" .SH NAME fadeplot - draws a waving ribbon following a sinusoidal path. .SH SYNOPSIS .B fadeplot [\-display \fIhost:display.screen\fP] [\-visual \fIvisual\fP] [\-window] [\-root] [\-count \fInumber\fP] [\-cycles \fInumber\fP] [\-delay \fInumber\fP] [\-ncolors \fInumber\fP] [\-fps] .SH DESCRIPTION Draws what looks like a waving ribbon following a sinusoidal path. .SH OPTIONS .TP 8 .B \-visual \fIvisual\fP Specify which visual to use. Legal values are the name of a visual class, or the id number (decimal or hex) of a specific visual. .TP 8 .B \-window Draw on a newly-created window. This is the default. .TP 8 .B \-root Draw on the root window. .TP 8 .B \-count \fInumber\fP Count. 0 - 20. Default: 10. .TP 8 .B \-cycles \fInumber\fP How many frames until the shape changes. Default: 1500. .TP 8 .B \-delay \fInumber\fP Per-frame delay, in microseconds. Default: 30000 (0.03 seconds.). .TP 8 .B \-ncolors \fInumber\fP Number of colors. Default: 64. .TP 8 .B \-fps Display the current frame rate and CPU load. .SH ENVIRONMENT .PP .TP 8 .B DISPLAY to get the default host and display number. .TP 8 .B XENVIRONMENT to get the name of a resource file that overrides the global resources stored in the RESOURCE_MANAGER property. .SH SEE ALSO .BR X (1), .BR xscreensaver (1) .SH COPYRIGHT Copyright \(co 2002 by Bas van Gaalen and Charles Vidal. 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. .SH AUTHOR Bas van Gaalen and Charles Vidal. xscreensaver-5.36/hacks/flame.man000644 000767 000024 00000004446 12701612220 017011 0ustar00jwzstaff000000 000000 .TH XScreenSaver 1 "13-aug-92" "X Version 11" .SH NAME flame - draw weird cosmic fractals .SH SYNOPSIS .B flame [\-display \fIhost:display.screen\fP] [\-foreground \fIcolor\fP] [\-background \fIcolor\fP] [\-window] [\-root] [\-mono] [\-install] [\-visual \fIvisual\fP] [\-colors \fIinteger\fP] [\-iterations \fIinteger\fP] [\-points \fIinteger\fP] [\-delay \fImicroseconds\fP] [\-delay2 \fImicroseconds\fP] [\-fps] .SH DESCRIPTION The \fIflame\fP program generates colorful fractal displays. .SH OPTIONS .I flame accepts the following options: .TP 8 .B \-window Draw on a newly-created window. This is the default. .TP 8 .B \-root Draw on the root window. .TP 8 .B \-mono If on a color display, pretend we're on a monochrome display. .TP 8 .B \-install Install a private colormap for the window. .TP 8 .B \-visual \fIvisual\fP Specify which visual to use. Legal values are the name of a visual class, or the id number (decimal or hex) of a specific visual. .TP 8 .B \-colors \fIinteger\fP How many colors should be used (if possible). Default 64. .TP 8 .B \-iterations \fIinteger\fP How many fractals to generate. Default 25. .TP 8 .B \-points \fIinteger\fP How many pixels to draw for each fractal. Default 10000. .TP 8 .B \-delay \fImicroseconds\fP How long we should wait between drawing each fractal. Default 50000, or about 1/20th second. .TP 8 .B \-delay2 \fImicroseconds\fP How long we should wait before clearing the screen when each run ends. Default 2000000, or two seconds. .TP 8 .B \-fps Display the current frame rate and CPU load. .SH ENVIRONMENT .PP .TP 8 .B DISPLAY to get the default host and display number. .TP 8 .B XENVIRONMENT to get the name of a resource file that overrides the global resources stored in the RESOURCE_MANAGER property. .SH SEE ALSO .BR X (1), .BR xscreensaver (1), .BR xlock (1) .SH COPYRIGHT Copyright \(co 1991 by Patrick J. Naughton Permission to use, copy, modify, and distribute this software and its documentation for any purpose and without fee is hereby granted, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation. .SH AUTHOR Scott Graves , 06-Jun-91.n Ability to run standalone or with \fIxscreensaver\fP added by Jamie Zawinski , 18-Oct-93. xscreensaver-5.36/hacks/flow.man000644 000767 000024 00000010150 12701612220 016661 0ustar00jwzstaff000000 000000 .TH XScreenSaver 1 "" "X Version 11" .SH NAME flow - strange attractors. .SH SYNOPSIS .B flow [\-display \fIhost:display.screen\fP] [\-visual \fIvisual\fP] [\-window] [\-root] [\-count \fInumber\fP] [\-cycles \fInumber\fP] [\-periodic|\-no\-periodic] [\-search|\-no\-search] [\-rotate|\-no\-rotate] [\-ride|\-no\-ride] [\-box|\-no\-box] [\-dbuf|\-no\-dbuf] [\-ncolors \fInumber\fP] [\-delay \fInumber\fP] [\-fps] .SH DESCRIPTION Strange attractors formed of flows in a 3D differential equation phase space. Features the popular attractors described by \fBLorentz\fP, \fBRoessler\fP, \fBBirkhoff\fP and \fBDuffing\fP, and can discover entirely new attractors by itself. .SH OPTIONS .TP 8 .B \-visual \fIvisual\fP Specify which visual to use. Legal values are the name of a visual class, or the id number (decimal or hex) of a specific visual. .TP 8 .B \-window Draw on a newly-created window. This is the default. .TP 8 .B \-root Draw on the root window. .TP 8 .B \-count \fInumber\fP Number of particles in the flow. Default: 3000 .TP 8 .B \-size \fInumber\fP Length of particle trails. Negative values indicate randomness. The computational load of a given flow depends on (particle count) * (trail length). Default: -10 .TP 8 .B \-cycles \fInumber\fP Timeout before changing objects. 0 - 800000. Default: 10000. .TP 8 .B \-periodic .TP 8 .B \-no\-periodic turn on/off periodic attractors. These are flows in 2 dependent variables, with a periodic dependence on a third independent variable (eg time). Flow will sometimes choose to start all the particles in the same phase to illustrate the flow's cross-section. Default: on .TP 8 .B \-search .TP 8 .B \-no\-search turn on/off search for new attractors. If this is enabled, a fraction of the computing cycles is directed to searching a 60-dimensional parameter space for new strange attractors. If periodic flows are enabled, these can be searched too. Watch carefully - you are quite likely to see mathematical objects that have never been seen before, and since the parameters are not recorded, you'll probably never see them again! Default: on .TP 8 .B \-rotate .TP 8 .B \-no\-rotate turn on/off rotating around attractor. Default: on .TP 8 .B \-ride .TP 8 .B \-no\-ride turn on/off ride in the flow. Default: on If both -rotate and -ride are enabled the viewpoint will occasionally fly between the two views. .TP 8 .B \-box .TP 8 .B \-no\-box turn on/off bounding box. Default: on .TP 8 .B \-dbuf .TP 8 .B \-no\-dbuf turn on/off double buffering. If Flow runs slowly in full screen, but fast in a smaller window (eg on old graphics cards with too little memory), try turning this option off. Default: on .TP 8 .B \-ncolors \fInumber\fP Number of Colors. Default: 200. .TP 8 .B \-delay \fInumber\fP Per-frame delay, in microseconds. Default: 10000 (0.01 seconds.). .TP 8 .B \-fps Display the current frame rate and CPU load. .SH ENVIRONMENT .PP .TP 8 .B DISPLAY to get the default host and display number. .TP 8 .B XENVIRONMENT to get the name of a resource file that overrides the global resources stored in the RESOURCE_MANAGER property. .SH SEE ALSO .BR X (1), .BR xscreensaver (1) .SH COPYRIGHT Copyright (c) 1996 by Tim Auckland Incorporating some code from Stephen Davies Copyright (c) 2000 Search code based on techniques described in "Strange Attractors: Creating Patterns in Chaos" by Julien C. Sprott Permission to use, copy, modify, and distribute this software and its documentation for any purpose and without fee is hereby granted, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation. This file is provided AS IS with no warranties of any kind. The author shall have no liability with respect to the infringement of copyrights, trade secrets or any patents by this file or any part thereof. In no event will the author be liable for any lost revenue or profits or other special, indirect and consequential damages. Adapted from swarm.c Copyright (c) 1991 by Patrick J. Naughton. Adapted from xswarm by Jeff Butterworth. (butterwo@ncsc.org). .SH AUTHOR Tim Auckland xscreensaver-5.36/hacks/fluidballs.man000644 000767 000024 00000005146 12701612220 020044 0ustar00jwzstaff000000 000000 .TH XScreenSaver 1 "" "X Version 11" .SH NAME fluidballs - the physics of bouncing balls. .SH SYNOPSIS .B fluidballs [\-display \fIhost:display.screen\fP] [\-visual \fIvisual\fP] [\-window] [\-root] [\-count \fInumber\fP] [\-size \fInumber\fP] [\-gravity \fInumber\fP] [\-wind \fInumber\fP] [\-elasticity \fInumber\fP] [\-delay \fInumber\fP] [\-nonrandom] [\-no-shake] [\-fps] .SH DESCRIPTION Models the physics of bouncing balls, or of particles in a gas or fluid, depending on the settings. If "Shake Box" is selected, then every now and then, the box will be rotated, changing which direction is down (in order to keep the settled balls in motion.) .SH OPTIONS .TP 8 .B \-visual \fIvisual\fP Specify which visual to use. Legal values are the name of a visual class, or the id number (decimal or hex) of a specific visual. .TP 8 .B \-window Draw on a newly-created window. This is the default. .TP 8 .B \-root Draw on the root window. .TP 8 .B \-count \fInumber\fP How many balls to display. Default: 300. .TP 8 .B \-size \fInumber\fP Maximum size of each ball. Default: 25. .TP 8 .B \-gravity \fInumber\fP Coefficient of gravity. Useful values are < 0.1. Default: 0.01. .TP 8 .B \-wind \fInumber\fP Wind. Useful values are < 0.1. Default: 0.00. .TP 8 .B \-elasticity \fInumber\fP Coefficient of elasticity. Useful values are 0.2 to 1.0. Default: 0.97. Lower numbers make less bouncy balls. .TP 8 .B \-delay \fInumber\fP Per-frame delay, in microseconds. Default: 10000 (0.01 seconds.). .TP 8 .B \-nonrandom Make all balls be the same size. .TP 8 .B \-no-nonrandom Make the balls be random sizes. Default. .TP 8 .B \-shake | \-no-shake Whether to shake the box if the system seems to have settled down. "Shake" means "change the direction of Down." .TP 8 .B \-fps Display the current frame rate and CPU load. .SH ENVIRONMENT .PP .TP 8 .B DISPLAY to get the default host and display number. .TP 8 .B XENVIRONMENT to get the name of a resource file that overrides the global resources stored in the RESOURCE_MANAGER property. .SH SEE ALSO .BR X (1), .BR xscreensaver (1) .SH COPYRIGHT Copyright \(co 2002 by Peter Birtles and 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. .SH AUTHOR Peter Birtles, Jamie Zawinski, and Steven Barker. xscreensaver-5.36/hacks/galaxy.man000644 000767 000024 00000004666 12701612220 017216 0ustar00jwzstaff000000 000000 .TH XScreenSaver 1 "10-May-97" "X Version 11" .SH NAME galaxy - draws spinning galaxies .SH SYNOPSIS .B galaxy [\-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] [\-size \fIinteger\fP] [\-tracks] [\-no\-tracks] [\-spin] [\-no\-spin] [\-fps] .SH DESCRIPTION The \fIgalaxy\fP program draws spinning galaxies. .SH OPTIONS .I galaxy accepts the following options: .TP 8 .B \-window Draw on a newly-created window. This is the default. .TP 8 .B \-root Draw on the root window. .TP 8 .B \-mono If on a color display, pretend we're on a monochrome display. .TP 8 .B \-install Install a private colormap for the window. .TP 8 .B \-visual \fIvisual\fP Specify which visual to use. Legal values are the name of a visual class, or the id number (decimal or hex) of a specific visual. .TP 8 .B \-ncolors \fIinteger\fP How many colors should be used (if possible). Default 64. The colors used cycle through the hue, making N stops around the color wheel. .TP 8 .B \-cycles \fIinteger\fP .TP 8 .B \-count \fIinteger\fP .TP 8 .B \-size \fIinteger\fP .TP 8 .B \-tracks .TP 8 .B \-no\-tracks .TP 8 .B \-spin .TP 8 .B \-no\-spin .TP 8 .B \-fps Display the current frame rate and CPU load. .SH ENVIRONMENT .PP .TP 8 .B DISPLAY to get the default host and display number. .TP 8 .B XENVIRONMENT to get the name of a resource file that overrides the global resources stored in the RESOURCE_MANAGER property. .SH SEE ALSO .BR X (1), .BR xscreensaver (1), .BR xlock (1) .SH COPYRIGHT Copyright \(co 1994 by Hubert Feyrer. Permission to use, copy, modify, and distribute this software and its documentation for any purpose and without fee is hereby granted, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation. .SH AUTHOR Original Amiga version by Uli Siegmund for EGS in Cluster. Ported from Cluster/EGS to C/Intuition by Harald Backert. Ported to X11 and xlockmore by Hubert Feyrer , 30-Sep-94. Modified by David Bagley , 23-Oct-94. Modified by Dave Mitchell , 7-Apr-97. Ability to run standalone or with \fIxscreensaver\fP added by Jamie Zawinski , 10-May-97. xscreensaver-5.36/hacks/goop.man000644 000767 000024 00000005461 12701612220 016667 0ustar00jwzstaff000000 000000 .TH XScreenSaver 1 "11-Jun-97" "X Version 11" .SH NAME goop - squishy transparent oil and bubble screenhack .SH SYNOPSIS .B goop [\-display \fIhost:display.screen\fP] [\-foreground \fIcolor\fP] [\-background \fIcolor\fP] [\-window] [\-root] [\-mono] [\-install] [\-visual \fIvisual\fP] [\-transparent] [\-non\-transparent] [\-additive] [\-subtractive] [\-xor] [\-no\-xor] [\-fps] .SH DESCRIPTION The \fIgoop\fP program draws a simulation of bubbles in layers of overlapping multicolored translucent fluid. .SH OPTIONS .I goop accepts the following options: .TP 8 .B \-window Draw on a newly-created window. This is the default. .TP 8 .B \-root Draw on the root window. .TP 8 .B \-mono If on a color display, pretend we're on a monochrome display. .TP 8 .B \-install Install a private colormap for the window. .TP 8 .B \-visual \fIvisual\fP Specify which visual to use. Legal values are the name of a visual class, or the id number (decimal or hex) of a specific visual. .TP 8 .B \-count \fIinteger\fP How many bubbles to draw per layer. Default: random. .TP 8 .B \-planes \fIinteger\fP How many planes to draw. Default: random, based on screen depth. .TP 8 .B \-delay \fImicroseconds\fP How much of a delay should be introduced between steps of the animation. Default 12000, or about 0.012 seconds. .TP 8 .B \-transparent If \fI\-layers\fP is greater than 1, then each layer will be drawn in one color, and when they overlap, the colors will be mixed. This is the default. .TP 8 .B \-non\-transparent Turns off \fI\-transparent\fP. .TP 8 .B \-additive If \fI\-transparent\fP is specified, then this option means that the colors will be mixed using an additive color model, as if the blobs were projected light. This is the default. .TP 8 .B \-subtractive If \fI\-transparent\fP is specified, then this option means that the colors will be mixed using a subtractive color model, as if the blobs were translucent filters. .TP 8 .B \-xor Draw with xor instead of the other color tricks. .TP 8 .B \-fps Display the current frame rate and CPU load. .SH ENVIRONMENT .PP .TP 8 .B DISPLAY to get the default host and display number. .TP 8 .B XENVIRONMENT to get the name of a resource file that overrides the global resources stored in the RESOURCE_MANAGER property. .SH SEE ALSO .BR X (1), .BR xscreensaver (1) .SH COPYRIGHT Copyright \(co 1997 by 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. .SH AUTHOR Jamie Zawinski , 11-Jun-97. xscreensaver-5.36/hacks/grav.man000644 000767 000024 00000004156 12701612220 016662 0ustar00jwzstaff000000 000000 .TH XScreenSaver 1 "10-May-97" "X Version 11" .SH NAME grav - draws a simple orbital simulation .SH SYNOPSIS .B grav [\-display \fIhost:display.screen\fP] [\-foreground \fIcolor\fP] [\-background \fIcolor\fP] [\-window] [\-root] [\-mono] [\-install] [\-visual \fIvisual\fP] [\-ncolors \fIinteger\fP] [\-delay \fImicroseconds\fP] [\-count \fIinteger\fP] [\-decay] [\-no\-decay] [\-trail] [\-no\-trail] [\-fps] .SH DESCRIPTION The \fIgrav\fP program draws a simple orbital simulation .SH OPTIONS .I grav accepts the following options: .TP 8 .B \-window Draw on a newly-created window. This is the default. .TP 8 .B \-root Draw on the root window. .TP 8 .B \-mono If on a color display, pretend we're on a monochrome display. .TP 8 .B \-install Install a private colormap for the window. .TP 8 .B \-visual \fIvisual\fP Specify which visual to use. Legal values are the name of a visual class, or the id number (decimal or hex) of a specific visual. .TP 8 .B \-ncolors \fIinteger\fP How many colors should be used (if possible). Default 64. The colors are chosen randomly. .TP 8 .B \-count \fIinteger\fP Default 12. .TP 8 .B \-decay .TP 8 .B \-no\-decay Whether orbits should decay. .TP 8 .B \-trail .TP 8 .B \-no\-trail Whether the objects should leave trails behind them (makes it look vaguely like a cloud-chamber. .TP 8 .B \-fps Display the current frame rate and CPU load. .SH ENVIRONMENT .PP .TP 8 .B DISPLAY to get the default host and display number. .TP 8 .B XENVIRONMENT to get the name of a resource file that overrides the global resources stored in the RESOURCE_MANAGER property. .SH SEE ALSO .BR X (1), .BR xscreensaver (1), .BR xlock (1) .SH COPYRIGHT Copyright \(co 1993 by Greg Bowering. Permission to use, copy, modify, and distribute this software and its documentation for any purpose and without fee is hereby granted, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation. .SH AUTHOR Greg Bowering , 1993. Ability to run standalone or with \fIxscreensaver\fP added by Jamie Zawinski , 10-May-97. xscreensaver-5.36/hacks/greynetic.man000644 000767 000024 00000003367 12701612220 017717 0ustar00jwzstaff000000 000000 .TH XScreenSaver 1 "13-aug-92" "X Version 11" .SH NAME greynetic - draw random stippled/color rectangles .SH SYNOPSIS .B greynetic [\-display \fIhost:display.screen\fP] [\-foreground \fIcolor\fP] [\-background \fIcolor\fP] [\-window] [\-root] [\-mono] [\-install] [\-visual \fIvisual\fP] [\-delay \fIusecs\fP] [\-fps] .SH DESCRIPTION The \fIgreynetic\fP program draws random rectangles. .SH OPTIONS .I greynetic accepts the following options: .TP 8 .B \-window Draw on a newly-created window. This is the default. .TP 8 .B \-root Draw on the root window. .TP 8 .B \-mono If on a color display, pretend we're on a monochrome display. .TP 8 .B \-install Install a private colormap for the window. .TP 8 .B \-visual \fIvisual\fP Specify which visual to use. Legal values are the name of a visual class, or the id number (decimal or hex) of a specific visual. .TP 8 .B \-delay \fImicroseconds\fP Slow it down. .TP 8 .B \-fps Display the current frame rate and CPU load. .SH ENVIRONMENT .PP .TP 8 .B DISPLAY to get the default host and display number. .TP 8 .B XENVIRONMENT to get the name of a resource file that overrides the global resources stored in the RESOURCE_MANAGER property. .SH SEE ALSO .BR X (1), .BR xscreensaver (1) .SH COPYRIGHT Copyright \(co 1992 by 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. .SH AUTHOR Jamie Zawinski , 13-aug-92. xscreensaver-5.36/hacks/halo.man000644 000767 000024 00000004656 12701612220 016653 0ustar00jwzstaff000000 000000 .TH XScreenSaver 1 "12-Jun-97" "X Version 11" .SH NAME halo - draw circular patterns .SH SYNOPSIS .B halo [\-display \fIhost:display.screen\fP] [\-foreground \fIcolor\fP] [\-background \fIcolor\fP] [\-window] [\-root] [\-mono] [\-install] [\-visual \fIvisual\fP] [\-count \fIint\fP] [\-delay \fIusecs\fP] [\-mode seuss | ramp | random ] [\-animate] [\-colors \fIinteger\fP] [\-fps] .SH DESCRIPTION The \fIhalo\fP program draws cool patterns based on circles. .SH OPTIONS .I halo accepts the following options: .TP 8 .B \-window Draw on a newly-created window. This is the default. .TP 8 .B \-root Draw on the root window. .TP 8 .B \-mono If on a color display, pretend we're on a monochrome display. .TP 8 .B \-install Install a private colormap for the window. .TP 8 .B \-visual \fIvisual\fP Specify which visual to use. Legal values are the name of a visual class, or the id number (decimal or hex) of a specific visual. .TP 8 .B \-count \fIinteger\fP How many circles to draw. Default 0, meaning random. .TP 8 .B \-mode "seuss | ramp | random" In \fIseuss\fP mode, alternating striped curves will be drawn. In \fIramp\fP mode, a color ramp will be drawn. \fIrandom\fP means pick the mode randomly. .TP 8 .B \-delay \fImicroseconds\fP How much of a delay should be introduced between steps of the animation. Default 100000, or about 0.1 second. .TP 8 .B \-colors \fIinteger\fP How many colors to use. Default 100. .TP 8 .B \-animate If specified, then the centerpoints of the circles will bounce around. Otherwise, the circles will be drawn once, erased, and a new set of circles will be drawn. .TP 8 .B \-fps Display the current frame rate and CPU load. .SH ENVIRONMENT .PP .TP 8 .B DISPLAY to get the default host and display number. .TP 8 .B XENVIRONMENT to get the name of a resource file that overrides the global resources stored in the RESOURCE_MANAGER property. .SH SEE ALSO .BR X (1), .BR xscreensaver (1) .SH COPYRIGHT Copyright \(co 1993 by 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. .SH AUTHOR Jamie Zawinski , 6-jul-93. xscreensaver-5.36/hacks/helix.man000644 000767 000024 00000004073 12701612220 017032 0ustar00jwzstaff000000 000000 .TH XScreenSaver 1 "18-sep-97" "X Version 11" .SH NAME helix - draw helical string-art patterns .SH SYNOPSIS .B helix [\-display \fIhost:display.screen\fP] [\-foreground \fIcolor\fP] [\-background \fIcolor\fP] [\-window] [\-root] [\-mono] [\-erase\-speed \fIusecs\fP] [\-erase\-mode \fIinteger\fP] [\-delay \fIseconds\fP] [\-install] [\-visual \fIvisual\fP] [\-fps] .SH DESCRIPTION The \fIhelix\fP program draws interesting patterns composed of line segments in random colors. .SH OPTIONS .I helix accepts the following options: .TP 8 .B \-window Draw on a newly-created window. This is the default. .TP 8 .B \-root Draw on the root window. .TP 8 .B \-mono If on a color display, pretend we're on a monochrome display. .TP 8 .B \-delay \fIseconds\fP This sets the number of seconds that the helix will be on the screen. .TP 8 .B \-subdelay \fImicroseconds\fP This sets the amount of time to pause periodically while drawing. .TP 8 .B \-install Install a private colormap for the window. .TP 8 .B \-visual \fIvisual\fP Specify which visual to use. Legal values are the name of a visual class, or the id number (decimal or hex) of a specific visual. .TP 8 .B \-fps Display the current frame rate and CPU load. .SH ENVIRONMENT .PP .TP 8 .B DISPLAY to get the default host and display number. .TP 8 .B XENVIRONMENT to get the name of a resource file that overrides the global resources stored in the RESOURCE_MANAGER property. .SH SEE ALSO .BR X (1), .BR xscreensaver (1) .SH COPYRIGHT Copyright \(co 1992 by 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. .SH AUTHOR Jamie Zawinski , 13-aug-92. Screen eraser improved by Johannes Keukelaar , 18-sep-97. xscreensaver-5.36/hacks/hopalong.man000644 000767 000024 00000004747 12701612220 017540 0ustar00jwzstaff000000 000000 .TH XScreenSaver 1 "10-May-97" "X Version 11" .SH NAME hopalong - draw real plane fractals .SH SYNOPSIS .B hopalong [\-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] [\-jong] [\-no\-jong] [\-jong] [\-no\-sine] [\-fps] .SH DESCRIPTION The \fIhop\fP program generates real plane fractals as described in the September 1986 issue of Scientific American. .SH OPTIONS .I hopalong accepts the following options: .TP 8 .B \-window Draw on a newly-created window. This is the default. .TP 8 .B \-root Draw on the root window. .TP 8 .B \-mono If on a color display, pretend we're on a monochrome display. .TP 8 .B \-install Install a private colormap for the window. .TP 8 .B \-visual \fIvisual\fP Specify which visual to use. Legal values are the name of a visual class, or the id number (decimal or hex) of a specific visual. .TP 8 .B \-ncolors \fIinteger\fP How many colors should be used (if possible). Default 200. The colors used cycle through the hue, making N stops around the color wheel. .TP 8 .B \-cycles \fIinteger\fP How long to run each batch. Default 2500 pixels. .TP 8 .B \-count \fIinteger\fP How many pixels should be drawn before a color change. Default 1000. .TP 8 .B \-jong \fIinteger\fP .TP 8 .B \-no\-jong \fIinteger\fP Whether to use the Jong format (default is to choose randomly.) .TP 8 .B \-sine \fIinteger\fP .TP 8 .B \-no\-sine \fIinteger\fP Whether to use the Sine format (default is to choose randomly.) .TP 8 .B \-fps Display the current frame rate and CPU load. .SH ENVIRONMENT .PP .TP 8 .B DISPLAY to get the default host and display number. .TP 8 .B XENVIRONMENT to get the name of a resource file that overrides the global resources stored in the RESOURCE_MANAGER property. .SH SEE ALSO .BR X (1), .BR xscreensaver (1), .BR xlock (1) .SH COPYRIGHT Copyright \(co 1988-91 by Patrick J. Naughton. Permission to use, copy, modify, and distribute this software and its documentation for any purpose and without fee is hereby granted, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation. .SH AUTHOR Patrick J. Naughton , 23-mar-88. Ability to run standalone or with \fIxscreensaver\fP added by Jamie Zawinski , 13-aug-92, and again on 10-May-97. xscreensaver-5.36/hacks/ifs.man000644 000767 000024 00000006645 12701612220 016511 0ustar00jwzstaff000000 000000 .TH XScreenSaver 1 "" "X Version 11" .SH NAME ifs - draws spinning, colliding iterated-function-system images .SH SYNOPSIS .B ifs [\-display \fIhost:display.screen\fP] [\-visual \fIvisual\fP] [\-window] [\-root] [\-no\-db] [\-delay \fInumber\fP] [\-detail \fInumber\fP] [\-colors \fInumber\fP] [\-functions \fInumber\fP] [\-iterate | \-recurse] [\-no\-rotate] [\-no\-scale] [\-no\-translate] [\-fps] .SH DESCRIPTION The \fIifs\fP program draws spinning, colliding iterated-function-system images. .SH OPTIONS .TP 8 .B \-visual \fIvisual\fP Specify which visual to use. Legal values are the name of a visual class, or the id number (decimal or hex) of a specific visual. .TP 8 .B \-window Draw on a newly-created window. This is the default. .TP 8 .B \-root Draw on the root window. .TP 8 .B \-no\-db Disable double-buffering. .TP 8 .B \-delay \fInumber\fP Per-frame delay, in microseconds. Default: 20000 .TP 8 .B \-colors \fInumber\fP Number of colours to use. Default: 200 .TP 8 .B \-detail \fInumber\fP In \fI\-iterate\fP mode, number of times to randomly iterate the functions, in thousands. In \fI\-recurse\fP mode, number of times to apply functions (recursion depth) before drawing each point. Default: 9 .TP 8 .B \-functions \fInumber\fP Number of functions to be iterated. Default: 3 .TP 8 .B \-iterate Calculate by iteratively applying the functions in a random order, usually faster than \fI\-recurse\fP. This is the default. .TP 8 .B \-recurse Calculate by recursively applying all combinations of the functions. This is the historical behavior and may produce neater output than \fI\-iterate\fP. .TP 8 .B \-no-rotate Disable the rotation component of the functions. .TP 8 .B \-no-scale Disable the scaling component of the functions. .TP 8 .B \-no-translate Disable the varying translation component of the functions. .TP 8 .B \-no-multi Turn off multi-coloured mode, only one colour is used to colour the whole set. .TP 8 .B \-fps Display the current frame rate and CPU load. .SH ENVIRONMENT .PP .TP 8 .B DISPLAY to get the default host and display number. .TP 8 .B XENVIRONMENT to get the name of a resource file that overrides the global resources stored in the RESOURCE_MANAGER property. .SH SEE ALSO .BR X (1), .BR xscreensaver (1), .BR ifs (MANSUFFIX) .SH COPYRIGHT Copyright \(co Chris Le Sueur and Robby Griffin, 2005-2006 Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. .SH AUTHOR This version by Chris Le Sueur , Feb 2005 Many improvements by Robby Griffin , Mar 2006 xscreensaver-5.36/hacks/imsmap.man000644 000767 000024 00000003677 12701612220 017220 0ustar00jwzstaff000000 000000 .TH XScreenSaver 1 "17-May-97" "X Version 11" .SH NAME imsmap - generate fractal maps .SH SYNOPSIS .B imsmap [\-display \fIhost:display.screen\fP] [\-foreground \fIcolor\fP] [\-background \fIcolor\fP] [\-window] [\-root] [\-mono] [\-install] [\-visual \fIvisual\fP] [\-ncolors \fIint\fP] [\-delay \fIseconds\fP] [\-delay2 \fImicroseconds\fP] [\-iterations \fIint\fP] [\-mode h|s|v|random] [\-fps] .SH DESCRIPTION The \fIimsmap\fP program generates map or cloud-like patterns. It looks quite different in monochrome and color. .SH OPTIONS .I imsmap accepts the following options: .TP 8 .B \-window Draw on a newly-created window. This is the default. .TP 8 .B \-root Draw on the root window. .TP 8 .B \-mono If on a color display, pretend we're on a monochrome display. .TP 8 .B \-install Install a private colormap for the window. .TP 8 .B \-visual \fIvisual\fP Specify which visual to use. Legal values are the name of a visual class, or the id number (decimal or hex) of a specific visual. .TP 8 .B \-ncolors \fIinteger\fP How many colors to use. Default 50. .TP 8 .B \-delay \fIinteger\fP How long to delay between images. Default 10 seconds. .TP 8 .B \-delay2 \fIinteger\fP How long to delay between bitmaps. Default 200000 (0.2 seconds). .TP 8 .B \-iterations \fIinteger\fP A measure of the resolution of the resultant image, from 0 to 7. Default 7. .TP 8 .B \-mode [ hue | saturation | value | random ] The axis upon which colors should be interpolated between the foreground and background color. Default random. .TP 8 .B \-fps Display the current frame rate and CPU load. .SH ENVIRONMENT .PP .TP 8 .B DISPLAY to get the default host and display number. .TP 8 .B XENVIRONMENT to get the name of a resource file that overrides the global resources stored in the RESOURCE_MANAGER property. .SH SEE ALSO .BR X (1), .BR xscreensaver (1) .SH AUTHOR Juergen Nickelsen , 23-aug-92. Hacked on by Jamie Zawinski , 24-aug-92, 17-May-97. xscreensaver-5.36/hacks/interference.man000644 000767 000024 00000004505 12701612220 020372 0ustar00jwzstaff000000 000000 .TH XScreenSaver 1 "" "X Version 11" .SH NAME interference - decaying sinusoidal waves .SH SYNOPSIS .B interference [\-display \fIhost:display.screen\fP] [\-visual \fIvisual\fP] [\-window] [\-root] [\-count \fInumber\fP] [\-gridsize \fInumber\fP] [\-delay \fInumber\fP] [\-speed \fInumber\fP] [\-radius \fInumber\fP] [\-ncolors \fInumber\fP] [\-color-shift \fInumber\fP] [\-hue \fInumber\fP] [\-no-db] [\-fps] .SH DESCRIPTION Another color-field hack, this one works by computing decaying sinusoidal waves, and allowing them to interfere with each other as their origins move. .SH OPTIONS .TP 8 .B \-visual \fIvisual\fP Specify which visual to use. Legal values are the name of a visual class, or the id number (decimal or hex) of a specific visual. .TP 8 .B \-window Draw on a newly-created window. This is the default. .TP 8 .B \-root Draw on the root window. .TP 8 .B \-count \fInumber\fP Number of Waves. 0 - 20. Default: 3. .TP 8 .B \-gridsize \fInumber\fP Magnification. 1 - 20. Default: 2. .TP 8 .B \-delay \fInumber\fP Per-frame delay, in microseconds. Default: 30000 (0.03 seconds.). .TP 8 .B \-speed \fInumber\fP Wave Speed. 1 - 100. Default: 30. .TP 8 .B \-radius \fInumber\fP Wave Size. 50 - 1500. Default: 800. .TP 8 .B \-ncolors \fInumber\fP Number of Colors. Default: 192. .TP 8 .B \-color-shift \fInumber\fP Color Contrast. 0 - 100. Default: 60. .TP 8 .B \-hue \fInumber\fP Hue of the base color (0-360, as in HSV space.) Default 0, meaning random. .TP 8 .B \-db | \-no-db Whether to double buffer. .TP 8 .B \-fps Display the current frame rate and CPU load. .SH ENVIRONMENT .PP .TP 8 .B DISPLAY to get the default host and display number. .TP 8 .B XENVIRONMENT to get the name of a resource file that overrides the global resources stored in the RESOURCE_MANAGER property. .SH SEE ALSO .BR X (1), .BR xscreensaver (1) .SH COPYRIGHT Copyright \(co 2002 by Hannu Mallat. 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. .SH AUTHOR Hannu Mallat. xscreensaver-5.36/hacks/julia.man000644 000767 000024 00000005122 12701612220 017021 0ustar00jwzstaff000000 000000 .TH XScreenSaver 1 "28-May-97" "X Version 11" .SH NAME 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] [\-fps] .SH DESCRIPTION The \fIjulia\fP program draws spinning, animating julia-set fractals. It uses ifs {w0 = sqrt(x-c), w1 = -sqrt(x-c)} with random iteration to plot the julia set, and sinusoidially varied parameters for the set, and plots parameters with a circle. One thing to note is that count is the \fIdepth\fP of the search tree, so the number of points computed is (2^count)-1. I use 8 or 9 on a 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: .TP 8 .B \-window Draw on a newly-created window. This is the default. .TP 8 .B \-root Draw on the root window. .TP 8 .B \-mono If on a color display, pretend we're on a monochrome display. .TP 8 .B \-install Install a private colormap for the window. .TP 8 .B \-visual \fIvisual\fP Specify which visual to use. Legal values are the name of a visual class, or the id number (decimal or hex) of a specific visual. .TP 8 .B \-ncolors \fIinteger\fP How many colors should be used (if possible). Default 200. The colors used cycle through the hue, making N stops around the color wheel. .TP 8 .B \-cycles \fIinteger\fP .TP 8 .B \-count \fIinteger\fP .TP 8 .B \-fps Display the current frame rate and CPU load. .SH ENVIRONMENT .PP .TP 8 .B DISPLAY to get the default host and display number. .TP 8 .B XENVIRONMENT to get the name of a resource file that overrides the global resources stored in the RESOURCE_MANAGER property. .SH SEE ALSO .BR X (1), .BR xscreensaver (1), .BR xlock (1) .SH COPYRIGHT Copyright \(co 1995 by Sean McCullough. Permission to use, copy, modify, and distribute this software and its documentation for any purpose and without fee is hereby granted, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation. .SH AUTHOR Sean McCullough , 1995. Ability to run standalone or with \fIxscreensaver\fP added by Jamie Zawinski , 10-May-97. xscreensaver-5.36/hacks/kaleidescope.man000644 000767 000024 00000005755 12701612220 020361 0ustar00jwzstaff000000 000000 .de EX \"Begin example .ne 5 .if n .sp 1 .if t .sp .5 .nf .in +.5i .. .de EE .fi .in -.5i .if n .sp 1 .if t .sp .5 .. .TH Kaleidescpe 1 "14-Dec-95" "X Version 11" .SH NAME Kaleidescope - rotating line segments .SH SYNOPSIS .B kaleidescope [\-display \fIhost:display.screen\fP] [\-foreground \fIcolor\fP] [\-background \fIcolor\fP] [\-window] [\-root] [\-install] [\-visual \fIvisual\fP] [\-color_mode \fImono | nice | greedy\fP] [-nsegments \fIint\fP] [\-ntrails \fIint\fP] [\-local_rotation \fIint\fP] [\-global_rotation \fIint\fP] [\-delay \fIusecs\fP] [\-redmin \fIint\fP] [\-greenmin \fIint\fP] [\-bluemin \fIint\fP] [\-redrange \fIint\fP] [\-greenrange \fIint\fP] [\-bluerange \fIint\fP] [\-fps] .SH DESCRIPTION The \fIkaleidescope\fP program draws line segments in a symmetric pattern that evolves over time. .SH OPTIONS .I kaleidescope accepts the following options: .TP 8 .B \-root Draw on the root window. .TP 8 .B \-color_mode "mono | nice | greedy" Specify how kaleidescope uses colors. Mono uses just the default foreground and background colors. Nice uses one color for each segment (specified by nsegments). Greedy uses (ntrails * nsegments) + 1 colors. .TP 8 .B \-install Install a private colormap for the window. .TP 8 .B \-visual \fIvisual\fP Specify which visual to use. Legal values are the name of a visual class, or the id number (decimal or hex) of a specific visual. .TP 8 .B \-nsegments integer The number of segments to draw. Default is 7. .TP 8 .B \-ntrails integer The number of trails to draw. Default is 100. .TP 8 .B \-local_rotation integer The rate at which segments rotate around their center. Default is -59. .TP 8 .B \-global_rotation integer The rate at which segments rotate around the center of the window. Default is 1. .TP 8 .B \-redmin, \-greenmin, \-bluemin, \-redrange, \-greenrange, \-bluerange All take an integer argument. When colors are randomly chosen, they are chosen from the interval min to min plus range. The minimums default to 30000. The ranges default to 20000. .TP 8 .B \-delay microseconds How much of a delay should be introduced between steps of the animation. Default is 20000, or about 5 frames a second. .TP 8 .B \-fps Display the current frame rate and CPU load. .SH ENVIRONMENT .PP .TP 8 .B DISPLAY to get the default host and display number. .TP 8 .B XENVIRONMENT to get the name of a resource file that overrides the global resources stored in the RESOURCE_MANAGER property. .SH SEE ALSO .BR X (1), .BR kaleidescope (MANSUFFIX) .SH COPYRIGHT Copyright \(co 1997 by Ron Tapia. 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. .SH AUTHOR Ron Tapia , 20-Mar-97. xscreensaver-5.36/hacks/kumppa.man000644 000767 000024 00000003414 12701612220 017214 0ustar00jwzstaff000000 000000 .TH XScreenSaver 1 "" "X Version 11" .SH NAME kumppa - spiraling, spinning, splashes of color rush toward the screen. .SH SYNOPSIS .B kumppa [\-display \fIhost:display.screen\fP] [\-visual \fIvisual\fP] [\-window] [\-root] [\-delay \fInumber\fP] [\-speed \fInumber\fP] [\-random] [\-dbuf] [\-fps] .SH DESCRIPTION Spiraling, spinning, and very, very fast splashes of color rush toward the screen. .SH OPTIONS .TP 8 .B \-visual \fIvisual\fP Specify which visual to use. Legal values are the name of a visual class, or the id number (decimal or hex) of a specific visual. .TP 8 .B \-window Draw on a newly-created window. This is the default. .TP 8 .B \-root Draw on the root window. .TP 8 .B \-delay \fInumber\fP Per-frame delay, in microseconds. Default: 10000 (0.01 seconds.). .TP 8 .B \-speed \fInumber\fP Density. 0.0001 - 0.2. Default: 0.1. .TP 8 .B \-random | \-no-random Whether to randomize. .TP 8 .B \-dbuf | \-no-dbuf Whether to double buffer. .TP 8 .B \-fps Display the current frame rate and CPU load. .SH ENVIRONMENT .PP .TP 8 .B DISPLAY to get the default host and display number. .TP 8 .B XENVIRONMENT to get the name of a resource file that overrides the global resources stored in the RESOURCE_MANAGER property. .SH SEE ALSO .BR X (1), .BR xscreensaver (1) .SH COPYRIGHT Copyright \(co 2002 by Teemu Suutari. 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. .SH AUTHOR Teemu Suutari. xscreensaver-5.36/hacks/loop.man000644 000767 000024 00000003434 12701612220 016672 0ustar00jwzstaff000000 000000 .TH XScreenSaver 1 "" "X Version 11" .SH NAME loop - cellular automaton. .SH SYNOPSIS .B loop [\-display \fIhost:display.screen\fP] [\-visual \fIvisual\fP] [\-window] [\-root] [\-cycles \fInumber\fP] [\-delay \fInumber\fP] [\-ncolors \fInumber\fP] [\-size \fInumber\fP] [\-fps] .SH DESCRIPTION Another cellular automaton. This one produces loop-shaped colonies that spawn, age, and eventually die. .SH OPTIONS .TP 8 .B \-visual \fIvisual\fP Specify which visual to use. Legal values are the name of a visual class, or the id number (decimal or hex) of a specific visual. .TP 8 .B \-window Draw on a newly-created window. This is the default. .TP 8 .B \-root Draw on the root window. .TP 8 .B \-cycles \fInumber\fP Timeout. 0 - 8000. Default: 1600. .TP 8 .B \-delay \fInumber\fP Per-frame delay, in microseconds. Default: 100000 (0.10 seconds.). .TP 8 .B \-ncolors \fInumber\fP Number of Colors. Default: 15. .TP 8 .B \-size \fInumber\fP Size. -50 - 50. Default: -12. .TP 8 .B \-fps Display the current frame rate and CPU load. .SH ENVIRONMENT .PP .TP 8 .B DISPLAY to get the default host and display number. .TP 8 .B XENVIRONMENT to get the name of a resource file that overrides the global resources stored in the RESOURCE_MANAGER property. .SH SEE ALSO .BR X (1), .BR xscreensaver (1) .SH COPYRIGHT Copyright \(co 2002 by David Bagley. 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. .SH AUTHOR David Bagley. xscreensaver-5.36/hacks/maze.man000644 000767 000024 00000013135 12701612220 016654 0ustar00jwzstaff000000 000000 .TH XScreenSaver 1 "7-mar-93" "X Version 11" .SH NAME maze \- an automated X11 demo repeatedly creating and solving a random maze .SH SYNOPSIS .B maze [\-display \fIhost:display.screen\fP] [\-foreground \fIcolor\fP] [\-background \fIcolor\fP] [\-window] [\-root] [\-install] [\-visual \fIvisual\fP] [\-grid\-size \fIpixels\fP] [\-live\-color \fIcolor\fP] [\-dead\-color \fIcolor\fP] [\-solve\-delay \fIusecs\fP] [\-pre\-delay \fIusecs\fP] [\-post\-delay \fIusecs\fP] [\-generator \fIinteger\fP] [\-max\-length \fIinteger\fP] [\-fps] .SH DESCRIPTION The \fImaze\fP program creates a "random" maze and then solves it with graphical feedback. .SH OPTIONS .I maze accepts the following options: .TP 8 .B \-window Draw on a newly-created window. This is the default. .TP 8 .B \-root Draw on the root window. .TP 8 .B \-install Install a private colormap for the window. .TP 8 .B \-visual \fIvisual\fP Specify which visual to use. Legal values are the name of a visual class, or the id number (decimal or hex) of a specific visual. .TP 8 .B \-grid\-size \fIpixels\fP The size of each block of the maze, in pixels; default is 0, meaning pick a random grid size. Minimum meaningful value is 2. .TP 8 .B \-live\-color \fIcolor\fP The color of the path. .TP 8 .B \-dead\-color \fIcolor\fP The color of the failed path (it is also stippled with a 50% pattern.) .TP 8 .B \-skip\-color \fIcolor\fP The maze solver will choose to not go down a path if it can "see" (in a straight line) that it is a dead end. This is the color to use for paths that are skipped for this reason. .TP 8 .B \-surround\-color \fIcolor\fP If the maze solver ever completely encloses an area within the maze, then it knows that the exit is not in there (and in fact the interior of that area might not even be reachable.) It will mark out those cells using this color. .TP 8 .B \-solve\-delay \fIinteger\fP Delay (in microseconds) between each step of the solution path. Default 5000, or about 1/200th second. .TP 8 .B \-pre\-delay \fIinteger\fP Delay (in microseconds) between generating a maze and starting to solve it. Default 2000000 (2 seconds.) .TP 8 .B \-post\-delay \fIinteger\fP Delay (in microseconds) after solving a maze and before generating a new one. Default 4000000 (4 seconds.) .TP 8 .B \-generator \fInum\fP Sets the algorithm that will be used to generate the mazes. The default is \-1, which randomly selects an algorithm for each maze that is generated. Generator 0 is the original one, and works by walking around randomly until we hit a place we've been before, then backtracking and trying a new direction somewhere. Generator 1 picks a random spot in the maze, then draws a straight wall from that spot in a random direction until it hits another wall (and continues until the maze is complete). Generator 2 is based on sets. Initially all cells are in different sets. Then two neighboring cells are chosen and if they are in different sets, their sets are joined. If they were in the same set, a wall is built between them. This continues until the maze is complete. All generators generate mazes with a certain 'characteristic'. See if you can spot them! The three algorithms are essentially Kruskal, Prim, and a depth-first recursive backtracker. .TP 8 .B \-max\-length \fInum\fP Controls the maximum length of walls drawn in one go by generator 1. .PP Clicking the mouse in the maze window controls it. .TP 16 .B "LeftButton Clears the window and restarts maze. .TP 16 .B MiddleButton Pause or unpause the program. .TP 16 .B RightButton Exit. .TP 8 .B \-fps Display the current frame rate and CPU load. .SH BUGS Expose events force a restart of maze. Mouse actions are based on "raw" values (Button1, Button2 and Button3) instead of using the pointer map. .SH ENVIRONMENT .PP .TP 8 .B DISPLAY to get the default host and display number. .TP 8 .B XENVIRONMENT to get the name of a resource file that overrides the global resources stored in the RESOURCE_MANAGER property. .SH SEE ALSO .BR X (1), .BR xscreensaver (1) .SH COPYRIGHT .PP Copyright \(co 1988 by Sun Microsystems, Inc. Mountain View, CA. .PP All Rights Reserved .PP Permission to use, copy, modify, and distribute this software and its documentation for any purpose and without fee is hereby granted, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation, and that the names of Sun or MIT not be used in advertising or publicity pertaining to distribution of the software without specific prior written permission. Sun and M.I.T. make no representations about the suitability of this software for any purpose. It is provided "as is" without any express or implied warranty. .PP SUN DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL SUN BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. .SH AUTHOR(s) .nf Zack Weinberg [ Smarter maze-solver ] zack@rabi.phys.columbia.edu Johannes Keukelaar [ Generators 1 and 2 ] johannes@nada.kth.se Royal Institute of Technology, Stockholm, Sweden Jim Randell [ XScreenSaver version ] jmr@mddjmr.fc.hp.com HPLabs, Bristol Richard Hess [ X11 extensions ] {...}!uunet!cimshop!rhess Consilium, Mountain View, CA Dave Lemke [ X11 version ] lemke@sun.COM Sun MicroSystems, Mountain View, CA Martin Weiss [ SunView version ] Sun MicroSystems, Mountain View, CA .fi xscreensaver-5.36/hacks/moire.man000644 000767 000024 00000004345 12701612220 017036 0ustar00jwzstaff000000 000000 .TH XScreenSaver 1 "27-Apr-97" "X Version 11" .SH NAME moire - draw circular interference patterns .SH SYNOPSIS .B moire [\-display \fIhost:display.screen\fP] [\-foreground \fIcolor\fP] [\-background \fIcolor\fP] [\-window] [\-root] [\-mono] [\-install] [\-visual \fIvisual\fP] [\-delay \fIseconds\fP] [\-random \fIboolean\fP] [\-ncolors \fIint\fP] [\-offset \fIint\fP] [\-fps] .SH DESCRIPTION The \fImoire\fP program draws cool circular interference patterns. .SH OPTIONS .I moire accepts the following options: .TP 8 .B \-window Draw on a newly-created window. This is the default. .TP 8 .B \-root Draw on the root window. .TP 8 .B \-mono If on a color display, pretend we're on a monochrome display. .TP 8 .B \-install Install a private colormap for the window. .TP 8 .B \-visual \fIvisual\fP Specify which visual to use. Legal values are the name of a visual class, or the id number (decimal or hex) of a specific visual. .TP 8 .B \-delay \fIseconds\fP How long to wait before starting over. Default 5 seconds. .TP 8 .B \-random \fIboolean\fP Whether to ignore the foreground/background colors, and pick them randomly instead. .TP 8 .B \-offset \fIinteger\fP The maximum random radius increment to use. .TP 8 .B \-ncolors \fIinteger\fP How many colors should be allocated in the color ramp (note that this value interacts with \fIoffset\fP.) .TP 8 .B \-fps Display the current frame rate and CPU load. .SH ENVIRONMENT .PP .TP 8 .B DISPLAY to get the default host and display number. .TP 8 .B XENVIRONMENT to get the name of a resource file that overrides the global resources stored in the RESOURCE_MANAGER property. .SH SEE ALSO .BR X (1), .BR xscreensaver (1) .SH COPYRIGHT Copyright \(co 1997 by 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. .SH AUTHOR Jamie Zawinski , 27-Apr-97, based on code by Michael D. Bayne . xscreensaver-5.36/hacks/moire2.man000644 000767 000024 00000003632 12701612220 017116 0ustar00jwzstaff000000 000000 .TH XScreenSaver 1 "" "X Version 11" .SH NAME moire2 - circular interference patterns. .SH SYNOPSIS .B moire2 [\-display \fIhost:display.screen\fP] [\-visual \fIvisual\fP] [\-window] [\-root] [\-delay \fInumber\fP] [\-ncolors \fInumber\fP] [\-thickness \fInumber\fP] [\-fps] .SH DESCRIPTION Another example of the fun you can have with moire interference patterns; this hack generates fields of concentric circles or ovals, and combines the planes with various operations. The planes are moving independently of one another, causing the interference lines to ``spray.'' .SH OPTIONS .TP 8 .B \-visual \fIvisual\fP Specify which visual to use. Legal values are the name of a visual class, or the id number (decimal or hex) of a specific visual. .TP 8 .B \-window Draw on a newly-created window. This is the default. .TP 8 .B \-root Draw on the root window. .TP 8 .B \-delay \fInumber\fP Per-frame delay, in microseconds. Default: 50000 (0.05 seconds.). .TP 8 .B \-ncolors \fInumber\fP Number of Colors. Default: 150. .TP 8 .B \-thickness \fInumber\fP Thickness of lines, in pixels. Default: 0. .TP 8 .B \-fps Display the current frame rate and CPU load. .SH ENVIRONMENT .PP .TP 8 .B DISPLAY to get the default host and display number. .TP 8 .B XENVIRONMENT to get the name of a resource file that overrides the global resources stored in the RESOURCE_MANAGER property. .SH SEE ALSO .BR X (1), .BR xscreensaver (1) .SH COPYRIGHT Copyright \(co 2002 by 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. .SH AUTHOR Jamie Zawinski. xscreensaver-5.36/hacks/mountain.man000644 000767 000024 00000003264 12701612220 017554 0ustar00jwzstaff000000 000000 .TH XScreenSaver 1 "" "X Version 11" .SH NAME mountain - random 3D plots that look vaguely mountainous. .SH SYNOPSIS .B mountain [\-display \fIhost:display.screen\fP] [\-visual \fIvisual\fP] [\-window] [\-root] [\-count \fInumber\fP] [\-delay \fInumber\fP] [\-ncolors \fInumber\fP] [\-fps] .SH DESCRIPTION Generates random 3d plots that look vaguely mountainous. .SH OPTIONS .TP 8 .B \-visual \fIvisual\fP Specify which visual to use. Legal values are the name of a visual class, or the id number (decimal or hex) of a specific visual. .TP 8 .B \-window Draw on a newly-created window. This is the default. .TP 8 .B \-root Draw on the root window. .TP 8 .B \-count \fInumber\fP Count. 0 - 100. Default: 30. .TP 8 .B \-delay \fInumber\fP Per-frame delay, in microseconds. Default: 1000 (0.001 seconds.). .TP 8 .B \-ncolors \fInumber\fP Number of colors. Default: 64. .TP 8 .B \-fps Display the current frame rate and CPU load. .SH ENVIRONMENT .PP .TP 8 .B DISPLAY to get the default host and display number. .TP 8 .B XENVIRONMENT to get the name of a resource file that overrides the global resources stored in the RESOURCE_MANAGER property. .SH SEE ALSO .BR X (1), .BR xscreensaver (1) .SH COPYRIGHT Copyright \(co 2002 by Pascal Pensa. 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. .SH AUTHOR Pascal Pensa. xscreensaver-5.36/hacks/munch.man000644 000767 000024 00000007725 12701612220 017042 0ustar00jwzstaff000000 000000 .de EX \"Begin example .ne 5 .if n .sp 1 .if t .sp .5 .nf .in +.5i .. .de EE .fi .in -.5i .if n .sp 1 .if t .sp .5 .. .TH XScreenSaver 1 "29-Aug-2008" "X Version 11" .SH NAME munch - munching squares .SH SYNOPSIS .B munch [\-display \fIhost:display.screen\fP] [\-foreground \fIcolor\fP] [\-background \fIcolor\fP] [\-window] [\-root] [\-mono] [\-install] [\-visual \fIvisual\fP] [\-delay \fIusecs\fP] [\-xor] [\-noxor] [\-clear \fInumber\fP] [\-simul \fInumber\fP] [\-classic | \-mismunch | \-random] [\-fps] .SH DESCRIPTION The .I munch program performs the munching squares hack. It picks square size, position, and gravity randomly. It also displays a creatively broken misimplementation of the classic algorithm. The munching squares hack consists of drawing Y = X XOR T for a range of X and T over and over until all the possible combinations of X and T have come up. It was reportedly discovered by Jackson Wright in 1962 and took 5 instructions of PDP-6 code. .SH OPTIONS .I munch accepts the following options: .TP 8 .B \-window Draw on a newly-created window. This is the default. .TP 8 .B \-root Draw on the root window. .TP 8 .B \-mono If on a color display, pretend we're on a monochrome display. .TP 8 .B \-install Install a private colormap for the window. .TP 8 .B \-visual \fIvisual\fP Specify which visual to use. Legal values are the name of a visual class, or the id number (decimal or hex) of a specific visual. .TP 8 .B \-delay \fIusecs\fP The delay between steps of the animation, in microseconds. Default: 2500. .TP 8 .B \-xor Use the XOR drawing function. This is the default. .TP 8 .B \-no\-xor Don't use the XOR drawing function. .TP 8 .B \-clear \fInumber\fP Number of squares to misdraw before clearing the display. Default: 65. .TP 8 .B \-simul \fInumber\fP Number of squares to misdraw simultaneously. Default: 5. .TP 8 .B \-classic Draw classic munching squares only. .TP 8 .B \-mismunch Draw "mismunch" only. .TP 8 .B \-random Do one or the other. .TP 8 .B \-fps Display the current frame rate and CPU load. .SH ENVIRONMENT .PP .TP 8 .B DISPLAY to get the default host and display number. .TP 8 .B XENVIRONMENT to get the name of a resource file that overrides the global resources stored in the RESOURCE_MANAGER property. .SH SEE ALSO .BR X (1), .BR xscreensaver (1), .RS 0 .BR http://www.inwap.com/pdp10/hbaker/hakmem/hakmem.html .SH HISTORY HAKMEM: MIT AI Memo 239, Feb. 29, 1972. .RS 8 Beeler, M., Gosper, R.W., and Schroeppel, R. "Unless otherwise stated, all computer programs are in PDP-6/10 assembly language." .TP 4 ITEM 146: MUNCHING SQUARES Another simple display program. It is thought that this was discovered by Jackson Wright on the RLE PDP-1 circa 1962. .EX DATAI 2 ADDB 1,2 ROTC 2,-22 XOR 1,2 JRST .-4 .EE .RS 4 2=X, 3=Y. Try things like 1001002 in data switches. This also does interesting things with operations other than XOR, and rotations other than -22. (Try IOR; AND; TSC; FADR; FDV(!); ROT -14, -9, -20, ...) .RE .TP 4 ITEM 147 (Schroeppel): Munching squares is just views of the graph Y = X XOR T for consecutive values of T = time. .TP 4 ITEM 148 (Cohen, Beeler): A modification to munching squares which reveals them in frozen states through opening and closing curtains: insert FADR 2,1 before the XOR. Try data switches = .EX 4000,,4 1000,,2002 2000,,4 0,,1002 .EE .RS 4 (Notation: ,,) .RS 0 Also try the FADR after the XOR, switches = 1001,,1. .SH COPYRIGHT Copyright 1997 Tim Showalter. .RS 0 Copyright 2004 Steven Hazel. .RS 0 Copyright 1992-2008 Jamie Zawinski. .PP 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. xscreensaver-5.36/hacks/nerverot.man000644 000767 000024 00000012001 12701612220 017553 0ustar00jwzstaff000000 000000 .TH XScreenSaver 1 "20-Mar-2001" "X Version 11" .SH NAME nerverot - induces edginess in the viewer .SH SYNOPSIS .B nerverot [\-display \fIhost:display.screen\fP] [\-foreground \fIcolor\fP] [\-background \fIcolor\fP] [\-window] [\-root] [\-mono] [\-install] [\-visual \fIvisual\fP] [\-db] [\-no\-db] [\-colors \fIinteger\fP] [\-delay \fImicroseconds\fP] [\-count \fIinteger\fP] [\-line\-width \fIinteger\fP] [\-event\-chance \fIfraction\fP] [\-iter\-amt \fIfraction\fP] [\-nervousness \fIfraction\fP] [\-max\-nerve\-radius \fIfraction\fP] [\-min\-radius \fIinteger\fP] [\-max\-radius \fIinteger\fP] [\-min\-scale \fIfraction\fP] [\-max\-scale \fIfraction\fP] [\-fps] .SH DESCRIPTION The goal of \fInerverot\fP is to be interesting and compelling to watch, yet induce a state of nervous edginess in the viewer. This manpage describes v1.3 of the program. .SH OPTIONS .I nerverot accepts the following options: .TP 8 .B \-window Draw on a newly-created window. This is the default. .TP 8 .B \-root Draw on the root window. .TP 8 .B \-mono If on a color display, pretend we're on a monochrome display. .TP 8 .B \-install Install a private colormap for the window. .TP 8 .B \-visual \fIvisual\fP Which visual to use. Legal values are the name of a visual class, or the id number (decimal or hex) of a specific visual. .TP 8 .B \-db .B \-no\-db Use double-buffering (or not, respectively). Double-buffering may make things look better for larger line widths and/or larger numbers of blots, but "better" may equate to yielding less of the desired edginess effect. You'll be calmer after watching the double-buffered variant; you're more likely to go into epileptic fits with it off. Hence, it is off (false) by default, resource \fIdoubleBuffer\fP. .TP 8 .B \-colors \fIinteger\fP How many colors should be used (if possible). The colors form a smooth ramp between two randomly-chosen colors. Defaults to 4, resource \fIcolors\fP. .TP 8 .B \-delay \fImicroseconds\fP The interframe delay, in microseconds. Defaults to 10000, resource \fIdelay\fP. .TP 8 .B \-max\-iters \fIinteger\fP The maximum number of iterations (frames) before a new model is generated. The actual number of iterations per model is a random number between 1 and this value. Defaults to 1200, resource \fImaxIters\fP. .TP 8 .B \-count \fIinteger\fP How many "blots" to draw at a time. This number may be rounded down to fit the particularly chosen model, and has a fixed minimum per-model. Defaults to 250, resource \fIcount\fP. .TP 8 .B \-line\-width \fIinteger\fP The width of the lines to draw. 0 means an optimized pixel-thick line. Defaults to 0, resource \fIlineWidth\fP. .TP 8 .B \-event\-chance \fIfraction\fP The chance, per iteration, for a life-altering event to occur (such as picking a new rotation target), in the range 0..1. Defaults to 0.2, resource \fIeventChance\fP. .TP 8 .B \-iter\-amt \fIfraction\fP The fraction of movement towards a target (such as rotation angle or scale) that happens per iteration, in the range 0..1. Defaults to 0.01, resource \fIiterAmt\fP. .TP 8 .B \-nervousness \fIfraction\fP How nervous the drawing is, in the range 0..1. This is how jumpy the points on each blot are. Defaults to 0.3, resource \fInervousness\fP. .TP 8 .B \-max\-nerve\-radius \fIfraction\fP The maximum radius of blot nervousness, as a fraction of the radius of the blot, in the range 0..1. Defaults to 0.7, resource \fImaxNerveRadius\fP. .TP 8 .B \-min\-radius \fIinteger\fP The minimum radius for a blot, in the range 1..100. Defaults to 3, resource \fIminRadius\fP. .TP 8 .B \-max\-radius \fIinteger\fP The maximum radius for a blot, in the range 1..100. Defaults to 25, resource \fImaxRadius\fP. .TP 8 .B \-min\-scale \fIfraction\fP The minimum overall scale of drawing, as a fraction of \fImin(windowHeight,windowWidth)\fP, in the range 0..10. Defaults to 0.6, resource \fIminScale\fP. .TP 8 .B \-max\-scale \fIfraction\fP The maximum overall scale of drawing, as a fraction of \fImin(windowHeight,windowWidth)\fP, in the range 0..10. Defaults to 1.75, resource \fImaxScale\fP. .TP 8 .B \-fps Display the current frame rate and CPU load. .SH ENVIRONMENT .PP .TP 8 .B DISPLAY to get the default host and display number. .TP 8 .B XENVIRONMENT to get the name of a resource file that overrides the global resources stored in the RESOURCE_MANAGER property. .SH X RESOURCES There are resource equivalents for each option, noted above. .SH BUGS .I nerverot should have more models. .TP 8 XDBE should be detected and used, if available. .SH SEE ALSO .BR xscreensaver (1) .SH COPYRIGHT Copyright \(co 2000-2001 by Dan Bornstein. All rights reserved. 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. .SH AUTHOR Dan Bornstein . xscreensaver-5.36/hacks/noseguy.man000644 000767 000024 00000004267 12701612220 017417 0ustar00jwzstaff000000 000000 .TH XScreenSaver 1 "13-aug-92" "X Version 11" .SH NAME noseguy - a little guy with a big nose wanders around being witty .SH SYNOPSIS .B noseguy [\-display \fIhost:display.screen\fP] [\-foreground \fIcolor\fP] [\-background \fIcolor\fP] [\-text-foreground \fIcolor\fP] [\-text-background \fIcolor\fP] [\-font \fIfont\fP] [\-window] [\-root] [\-install] [\-visual \fIvisual\fP] [\-mode \fImode\fP] [\-program \fIprogram\fP] [\-filename \fIfile\fP] [\-text \fItext\fP] [\-fps] .SH DESCRIPTION A little man with a big nose and a hat runs around spewing out messages to the screen. This code (and its bitmaps) were extracted from the \fIxnlock\fP program. .SH OPTIONS .I noseguy accepts the following options: .TP 8 .B \-window Draw on a newly-created window. This is the default. .TP 8 .B \-root Draw on the root window. .TP 8 .B \-install Install a private colormap for the window. .TP 8 .B \-visual \fIvisual\fP Specify which visual to use. Legal values are the name of a visual class, or the id number (decimal or hex) of a specific visual. .TP 8 .B \-font \fIfont\fP The font used for the messages. .TP 8 .B \-program \fIprogram\fP This program will be run periodically, and its output will be the text of the messages. Default: xscreensaver-text --cols 40 | head -n15 You can configure the text printed through the "Advanced" tab of .BR xscreensaver\-demo (1), or by editing your ~/.xscreensaver file. .TP 8 .B \-filename \fIfile\fP If \fImode\fP is \fIfile\fP, then the contents of this file will be used for all messages. .TP 8 .B \-text \fIstring\fP If \fImode\fP is \fIstring\fP, then this text will be used for all messages. .TP 8 .B \-fps Display the current frame rate and CPU load. .SH ENVIRONMENT .PP .TP 8 .B DISPLAY to get the default host and display number. .TP 8 .B XENVIRONMENT to get the name of a resource file that overrides the global resources stored in the RESOURCE_MANAGER property. .SH SEE ALSO .BR X (1), .BR xscreensaver (1), .BR xscreensaver-text (1), .BR xnlock (1) .SH COPYRIGHT Copyright 1985, 1990 by Dan Heller . .SH AUTHOR Dan Heller , 1985. Ability to run standalone or with \fIxscreensaver\fP added by Jamie Zawinski , 13-aug-92. xscreensaver-5.36/hacks/pedal.man000644 000767 000024 00000003676 12701612220 017016 0ustar00jwzstaff000000 000000 .TH XScreenSaver 1 "24-Jun-94" "X Version 11" .SH NAME pedal - pretty geometric picture program .SH SYNOPSIS .B pedal [\-display \fIhost:display.screen\fP] [\-foreground \fIcolor\fP] [\-background \fIcolor\fP] [\-window] [\-root] [\-delay \fIseconds\fP] [-maxlines \fInumber\fP] [-mono] [\-install] [\-visual \fIvisual\fP] [\-fps] .SH DESCRIPTION The \fIpedal\fP program displays pretty geometric pictures. .SH OPTIONS .I pedal accepts the following options: .TP 8 .B \-window Draw on a newly-created window. This is the default. .TP 8 .B \-root Draw on the root window. .TP 8 .B \-foreground \fIcolor\fP The color for the foreground. Default is white. .TP 8 .B \-background \fIcolor\fP The color for the background. Default is black. .TP 8 .B \-delay \fIseconds\fP The number of seconds to pause between each picture. .TP 8 .B \-maxlines \fInumber\fP The maximum number of lines in the drawing. Good values are between 20 and 2000. Maximum value is 16K. .PP To make your X server grunt under load, and to impress your friends, try \fIpedal -mono -delay 0 -maxlines 100\fp. .TP 8 .B \-fps Display the current frame rate and CPU load. .SH ENVIRONMENT .PP .TP 8 .B DISPLAY to get the default host and display number. .TP 8 .B XENVIRONMENT to get the name of a resource file that overrides the global resources stored in the RESOURCE_MANAGER property. .SH SEE ALSO .BR X (1), .BR xscreensaver (1) .SH COPYRIGHT Copyright \(co 1994, by Carnegie Mellon University. Permission to use, copy, modify, distribute, and sell this software and its documentation for any purpose is hereby granted without fee, provided fnord 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 fnord this software for any purpose. It is provided "as is" without express or implied warranty. .SH AUTHOR Dale Moore , 24-Jun-1994. xscreensaver-5.36/hacks/penetrate.man000644 000767 000024 00000006137 12701612220 017713 0ustar00jwzstaff000000 000000 .de EX \"Begin example .ne 5 .if n .sp 1 .if t .sp .5 .nf .in +.5i .. .de EE .fi .in -.5i .if n .sp 1 .if t .sp .5 .. .TH XScreenSaver 1 "18-Jun-01" "X Version 11" .SH NAME penetrate - simulates a classic arcade shooting game .SH SYNOPSIS .B penetrate [\-display \fIhost:display.screen\fP] [\-root] [\-window] [\-install] [\-noinstall] [\-visual \fIvisual\fP] [\-bgrowth \fImicroseconds\fP] [\-lrate \fInumber\fP] [\-smart \fInumber\fP] [\-fps] .SH DESCRIPTION .PP \fIPenetrate\fP simulates the arcade classic with the cities and the stuff shooting down from the sky and stuff. The computer plays against itself, desperately defending the forces of good against those thingies raining down. Bonus cities are awarded at ever-increasing intervals. Every five levels appears a bonus round. The computer player gets progressively more intelligent as the game progresses. Better aim, more economical with ammo, and better target selection. Points are in the bottom right, and high score is in the bottom left. Start with -smart to have the computer player skip the learning process. .SH OPTIONS .TP 8 .B \-display \fIhost:display.screen\fP Specifies which X display we should use. .TP 8 .B \-root Draw on the root window. .TP 8 .B \-window Draw on a newly-created window. This is the default. .TP 8 .B \-install Install a private colormap for the window. .TP 8 .B \-noinstall Don't install a private colormap for the window. .TP 8 .B \-visual \fIvisual\fP Specify which visual to use. Legal values are the name of a visual class, or the id number (decimal or hex) of a specific visual. Possible choices include .RS default, best, mono, monochrome, gray, grey, color, staticgray, staticcolor, truecolor, grayscale, greyscale, pseudocolor, directcolor, \fInumber\fP If a decimal or hexadecimal number is used, .BR XGetVisualInfo (3X) is consulted to obtain the required visual. .RE .TP 8 .B \-foreground \fIcolor\fP Specifies the default foreground color. .TP 8 .B \-background \fIcolor\fP Specifies the default background color. .TP 8 .B \-bgrowth \fIinteger\fP Specifies the growth rate of the bomb explosions. .TP 8 .B \-lrate \fIinteger\fP Set the initial rate of laser fire. .TP 8 .B -smart Have the computer player skip the learning process. .TP 8 .B \-fps Display the current frame rate and CPU load. .SH BUGS The layout of the screen isn't quite the same as the game this program tries to emulate. In this this program, the missiles come out of the cities; when really, there are supposed to be three missile bases on hills, with the cities in the valleys between them. See http://www.mame.net/ for details. .SH COPYRIGHT Copyright \(co 1999 Adam Miller. 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. .SH AUTHOR Adam Miller , 1999. xscreensaver-5.36/hacks/penrose.man000644 000767 000024 00000006675 12701612220 017406 0ustar00jwzstaff000000 000000 .TH XScreenSaver 1 "10-May-97" "X Version 11" .SH NAME penrose - draws quasiperiodic tilings .SH SYNOPSIS .B penrose [\-display \fIhost:display.screen\fP] [\-foreground \fIcolor\fP] [\-background \fIcolor\fP] [\-window] [\-root] [\-mono] [\-install] [\-visual \fIvisual\fP] [\-ncolors \fIinteger\fP] [\-delay \fImicroseconds\fP] [\-size \fIinteger\fP] [\-ammann] [\-no\-ammann] [\-fps] .SH DESCRIPTION The \fIpenrose\fP program draws quasiperiodic tilings. See Onoda, Steinhardt, DiVincenzo and Socolar in Phys. Rev. Lett. 60, #25, 1988 or Strandburg in Computers in Physics, Sep/Oct 1991. This implementation uses the simpler version of the growth algorithm, i.e., if there are no forced vertices, a randomly chosen tile is added to a randomly chosen vertex (no preference for those 108 degree angles). There are two essential differences to the algorithm presented in the literature: First, we do not allow the tiling to enclose an untiled area. Whenever this is in danger of happening, we just do not add the tile, hoping for a better random choice the next time. Second, when choosing a vertex randomly, we will take one that lies withing the viewport if available. If this seems to cause enclosures in the forced rule case, we will allow invisible vertices to be chosen. Tiling is restarted whenever one of the following happens: there are no incomplete vertices within the viewport or the tiling has extended a window's length beyond the edge of the window horizontally or vertically or forced rule choice has failed 100 times due to areas about to become enclosed. Although quasiperiodic tilings are produced, the tiles themselves are not penrose tiles (darts and kites). In contrast to penrose tiles, these tiles can be arranged to form a periodic tiling. .SH OPTIONS .I penrose accepts the following options: .TP 8 .B \-window Draw on a newly-created window. This is the default. .TP 8 .B \-root Draw on the root window. .TP 8 .B \-mono If on a color display, pretend we're on a monochrome display. .TP 8 .B \-install Install a private colormap for the window. .TP 8 .B \-visual \fIvisual\fP Specify which visual to use. Legal values are the name of a visual class, or the id number (decimal or hex) of a specific visual. .TP 8 .B \-ncolors \fIinteger\fP How many colors should be used (if possible). Default 64. The colors are chosen randomly. .TP 8 .B \-size \fIinteger\fP How big the tiles should be. Default 40 pixels. .TP 8 .B \-delay \fImilliseconds\fP How long (in 1/1,000,000'ths of a second) to wait between drawing each tile. Default 10,000 or .01 seconds. .TP 8 .B \-ammann .TP 8 .B \-no\-ammann Whether Ammann lines should be added. .TP 8 .B \-fps Display the current frame rate and CPU load. .SH ENVIRONMENT .PP .TP 8 .B DISPLAY to get the default host and display number. .TP 8 .B XENVIRONMENT to get the name of a resource file that overrides the global resources stored in the RESOURCE_MANAGER property. .SH SEE ALSO .BR X (1), .BR xscreensaver (1), .BR xlock (1) .SH COPYRIGHT Copyright \(co 1996 by Timo Korvola. Permission to use, copy, modify, and distribute this software and its documentation for any purpose and without fee is hereby granted, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation. .SH AUTHOR Timo Korvola , 1996. Ability to run standalone or with \fIxscreensaver\fP added by Jamie Zawinski , 10-May-97. xscreensaver-5.36/hacks/petri.man000644 000767 000024 00000012037 12701612220 017043 0ustar00jwzstaff000000 000000 .TH XScreenSaver 1 "06-Jul-2000" "X Version 11" .SH NAME petri - simulates mold growing in a petri dish .SH SYNOPSIS .B petri [\-display \fIhost:display.screen\fP] [\-foreground \fIcolor\fP] [\-background \fIcolor\fP] [\-window] [\-root] [\-mono] [\-install] [\-visual \fIvisual\fP] [\-delay \fImicroseconds\fP] [\-size \fIinteger\fP] [\-mem-throttle \fIamount\fP] [\-count \fIinteger\fP] [\-originalcolors] [\-diaglim \fIreal\fP] [\-anychan \fIreal\fP] [\-minorchan \fIreal\fP] [\-instantdeathchan \fIreal\fP] [\-minlifespeed \fIreal\fP] [\-maxlifespeed \fIreal\fP] [\-mindeathspeed \fIreal\fP] [\-maxdeathspeed \fIreal\fP] [\-minlifespan \fIinteger\fP] [\-maxlifespan \fIinteger\fP] [\-fps] .SH DESCRIPTION \fIpetri\fP simulates mold growing in a petri dish via a state-heavy grid of automata (vaguely like Conway's Life, only with much more state per cell). .SH OPTIONS .I petri accepts the following options: .TP 8 .B \-window Draw on a newly-created window. This is the default. .TP 8 .B \-root Draw on the root window. .TP 8 .B \-mono If on a color display, pretend we're on a monochrome display. .TP 8 .B \-install Install a private colormap for the window. .TP 8 .B \-visual \fIvisual\fP Which visual to use. Legal values are the name of a visual class, or the id number (decimal or hex) of a specific visual. .TP 8 .B \-delay \fImicroseconds\fP The interframe delay, in microseconds. Defaults to 10000, resource \fIdelay\fP. .TP 8 .B \-size \fIinteger\fP The size of a cell in pixels. Defaults to 4, resource \fIsize\fP. .TP 8 .B \-mem-throttle \fIamount\fP The maximum amount of memory to consume, specified either in megabytes (suffix "M"), kilobytes (suffix "K"), or bytes (sans suffix). In order to meet the memory requirement, the cell size may be increased. Defaults to 22M, resource \fImemThrottle\fP. .TP 8 .B \-count \fIinteger\fP How many different varieties of mold to grow (including Black Death). Defaults to 8, resource \fIcount\fP. .TP 8 .B \-originalcolors If specified, indicates that the colors used should be the artist's original choices (a fixed set of primary and secondary colors). In this case, count must be 8 or less. Defaults to not specified (i.e., false), resource \fIoriginalcolors\fP. .TP 8 .B \-diaglim \fIreal\fP The age limit for diagonal growth as a multiplier of orthogonal growth (range 1..2). 1 means square growth, 1.414 (i.e., \fIsqrt(2)\fP) means approximately circular growth, 2 means diamond growth. Defaults to 1.414, resource \fIdiaglim\fP. .TP 8 .B \-anychan \fIreal\fP The chance (range 0..1) that at each iteration, one or more new cells will be born. Defaults to 0.0015, resource \fIanychan\fP. .TP 8 .B \-minorchan \fIreal\fP The chance (range 0..1) that, given that new cells will be born, that only two will be added (hence being a minor cell birth event). Defaults to 0.5, resource \fIminorchan\fP. .TP 8 .B \-instantdeathchan \fIreal\fP The chance (range 0..1) that, given that death and destruction will happen, that instead of using Black Death cells, death will come instantaneously. Defaults to 0.2, resource \fIinstantdeathchan\fP. .TP 8 .B \-minlifespeed \fIreal\fP The minimum speed for living cells as a fraction of the maximum possible speed (range 0..1). Defaults to 0.04, resource \fIminlifespeed\fP. .TP 8 .B \-maxlifespeed \fIreal\fP The maximum speed for living cells as a fraction of the maximum possible speed (range 0..1). Defaults to 0.13, resource \fImaxlifespeed\fP. .TP 8 .B \-mindeathspeed \fIreal\fP The minimum speed for Black Death cells as a fraction of the maximum possible speed (range 0..1). Defaults to 0.42, resource \fImindeathspeed\fP. .TP 8 .B \-maxdeathspeed \fIreal\fP The maximum speed for Black Death cells as a fraction of the maximum possible speed (range 0..1). Defaults to 0.46, resource \fImaxdeathspeed\fP. .TP 8 .B \-minlifespan \fIinteger\fP The minimum lifespan for a colony, in iterations, before Black Death comes. Defaults to 500, resource \fIminlifespan\fP. .TP 8 .B \-maxlifespan \fIinteger\fP The maximum lifespan for a colony, in iterations, before Black Death comes. Defaults to 1500, resource \fImaxlifespan\fP. .TP 8 .B \-fps Display the current frame rate and CPU load. .SH ENVIRONMENT .PP .TP 8 .B DISPLAY to get the default host and display number. .TP 8 .B XENVIRONMENT to get the name of a resource file that overrides the global resources stored in the RESOURCE_MANAGER property. .SH X RESOURCES There are resource equivalents for each option, noted above. .SH BUGS There are no known bugs in .I petri as of this writing. .SH SEE ALSO .BR xscreensaver (1) .SH COPYRIGHT Copyright \(co 1992-2000 by Dan Bornstein. 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. .SH AUTHOR Dan Bornstein , 06-Jul-2000. xscreensaver-5.36/hacks/phosphor.man000644 000767 000024 00000012455 12701612220 017566 0ustar00jwzstaff000000 000000 .de EX \"Begin example .ne 5 .if n .sp 1 .if t .sp .5 .nf .in +.5i .. .de EE .fi .in -.5i .if n .sp 1 .if t .sp .5 .. .TH XScreenSaver 1 "5-May-2004" "X Version 11" .SH NAME phosphor - simulates an old terminal with long-sustain phosphor .SH SYNOPSIS .B phosphor [\-display \fIhost:display.screen\fP] [\-window] [\-root] [\-install] [\-visual \fIvisual\fP] [\-font \fIfont\fP] [\-scale \fIint\fP] [\-ticks \fIint\fP] [\-delay \fIusecs\fP] [\-program \fIcommand\fP] [\-meta] [\-esc] [\-bs] [\-del] [\-fps] .SH DESCRIPTION The \fIphosphor\fP program draws text on the screen in a very large pixelated font that looks like an old low resolution dumb tty. The pixels flare and fade out as if the phosphor was very long-sustain. It is also a fully functional vt100 terminal emulator. .SH OPTIONS .I phosphor accepts the following options: .TP 8 .B \-window Draw on a newly-created window. This is the default. .TP 8 .B \-root Draw on the root window. .TP 8 .B \-install Install a private colormap for the window. .TP 8 .B \-visual \fIvisual\fP\fP Specify which visual to use. Legal values are the name of a visual class, or the id number (decimal or hex) of a specific visual. .TP 8 .B \-font \fIfont-name\fP The X font to use. Phosphor can take any font and scale it up to pixelate it. The default is \fIfixed\fP. .TP 8 .B \-scale \fIint\fP How much to scale the font up: in other words, the size in real pixels of the simulated pixels. Default 6. .TP 8 .B \-ticks \fIint\fP The number of colors to use when fading to black. Default 20. .TP 8 .B \-delay \fIusecs\fP The speed of the terminal: how long to wait between drawing each character. Default 50000, or about 1/20th second. .TP 8 .B \-pty Launch the sub-program under a PTY, so that it can address the screen directly. This is the default. .TP 8 .B \-pipe Launch the sub-program at the end of a pipe: do not let it address the screen directly. .TP 8 .B \-program \fIsh-command\fP The command to run to generate the text to display. This option may be any string acceptable to /bin/sh. The program will be run at the end of a pty or pipe, and any characters that it prints to \fIstdout\fP will be printed on phosphor's window. The characters will be printed artificially slowly, as per the \fI\-delay\fP option above. If the program exits, it will be launched again after 5 seconds. For example: .EX phosphor -program 'cat /usr/src/linux*/README' phosphor -program 'ping localhost' phosphor -program 'ps -e' phosphor -program 'od -txC -w6 /dev/random' phosphor -program 'cat /dev/random' phosphor -scale 2 -geom =1280x1024 -program 'top' phosphor -scale 4 -geom =1280x1024 \\ -program 'mtr www.kernel.org' phosphor -program 'xemacs -nw -q -f life' phosphor -scale 5 -geom =1280x1024 \\ -program 'xemacs -nw -q --eval "(hanoi 5)"' .EE If you have the .BR festival (1) text-to-speech system installed, you can have it read the screen as phosphor prints it: .EX phosphor -program \\ 'xscreensaver-text | tee /dev/stderr | festival --tts' .EE You can also use \fIphosphor\fP as a lo-fi replacement for the .BR xterm (1) and .BR gnome-terminal (1) terminal emulators: .EX phosphor -delay 0 -program tcsh .EE .TP 8 .B \-esc When the user types a key with the Alt or Meta keys held down, send an ESC character first. This is the default. .TP 8 .B \-meta When Meta or Alt are held down, set the high bit on the character instead. .TP 8 .B \-del Swap Backspace and Delete. This is the default. .TP 8 .B \-bs Do not swap Backspace and Delete. .TP 8 .B \-fps Display the current frame rate and CPU load. .SH TERMINAL EMULATION By default, \fIphosphor\fP allocates a pseudo-tty for the sub-process to run under. This has the desirable side effect that the program will be able to use .BR ioctl (2) to fetch information about terminal parameters and window size, which many programs (such as .BR top (1)) need to run properly. \fIphosphor\fP will also set the environment variable \fITERM\fP to \fIvt100\fP in the child process. Any characters typed on the phosphor window will be passed along to the sub-process. (Note that this only works when running in "window" mode, not when running in \fI\-root\fP mode under xscreensaver.) .SH ENVIRONMENT .PP .TP 8 .B DISPLAY to get the default host and display number. .TP 8 .B XENVIRONMENT to get the name of a resource file that overrides the global resources stored in the RESOURCE_MANAGER property. .TP 8 .B TERM to inform the sub-process of the type of terminal emulation. .SH SEE ALSO .BR xscreensaver (1), .BR xscreensaver-text (1), .BR fortune (1), .BR apple2 (MANSUFFIX), .BR starwars (MANSUFFIX), .BR fontglide (MANSUFFIX), .BR ljlatest (MANSUFFIX), .BR dadadodo (1), .BR webcollage (MANSUFFIX), .BR driftnet (1) .BR EtherPEG , .BR EtherPeek , .BR console_codes (4). .SH COPYRIGHT Copyright \(co 1999 by 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. .SH AUTHOR Jamie Zawinski , 27-Apr-99. Pty and vt100 emulation by Fredrik Tolf . xscreensaver-5.36/hacks/polyominoes.man000644 000767 000024 00000003524 12701612220 020276 0ustar00jwzstaff000000 000000 .TH XScreenSaver 1 "" "X Version 11" .SH NAME polyominoes - fill a rectangle with irregularly-shaped blocks. .SH SYNOPSIS .B polyominoes [\-display \fIhost:display.screen\fP] [\-visual \fIvisual\fP] [\-window] [\-root] [\-identical] [\-cycles \fInumber\fP] [\-delay \fInumber\fP] [\-ncolors \fInumber\fP] [\-fps] .SH DESCRIPTION Repeatedly attempts to completely fill a rectangle with irregularly-shaped puzzle pieces. .SH OPTIONS .TP 8 .B \-visual \fIvisual\fP Specify which visual to use. Legal values are the name of a visual class, or the id number (decimal or hex) of a specific visual. .TP 8 .B \-window Draw on a newly-created window. This is the default. .TP 8 .B \-root Draw on the root window. .TP 8 .B \-identical | \-no-identical Whether to use identical pieces. .TP 8 .B \-cycles \fInumber\fP Duration. 500 - 5000. Default: 2000. .TP 8 .B \-delay \fInumber\fP Per-frame delay, in microseconds. Default: 10000 (0.01 seconds.). .TP 8 .B \-ncolors \fInumber\fP Number of Colors. Default: 64. .TP 8 .B \-fps Display the current frame rate and CPU load. .SH ENVIRONMENT .PP .TP 8 .B DISPLAY to get the default host and display number. .TP 8 .B XENVIRONMENT to get the name of a resource file that overrides the global resources stored in the RESOURCE_MANAGER property. .SH SEE ALSO .BR X (1), .BR xscreensaver (1) .SH COPYRIGHT Copyright \(co 2002 by Stephen Montgomery-Smith. 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. .SH AUTHOR Stephen Montgomery-Smith. xscreensaver-5.36/hacks/pyro.man000644 000767 000024 00000004161 12701612220 016710 0ustar00jwzstaff000000 000000 .TH XScreenSaver 1 "13-aug-92" "X Version 11" .SH NAME pyro - simulate fireworks .SH SYNOPSIS .B pyro [\-display \fIhost:display.screen\fP] [\-foreground \fIcolor\fP] [\-background \fIcolor\fP] [\-window] [\-root] [\-mono] [\-install] [\-visual \fIvisual\fP] [\-count \fIinteger\fP] [\-frequency \fIinteger\fP] [\-scatter \fIinteger\fP] [\-fps] .SH DESCRIPTION The \fIpyro\fP program simulates fireworks, in a way similar to a Macintosh program of the same name. .SH OPTIONS .I pyro accepts the following options: .TP 8 .B \-window Draw on a newly-created window. This is the default. .TP 8 .B \-root Draw on the root window. .TP 8 .B \-mono If on a color display, pretend we're on a monochrome display. .TP 8 .B \-install Install a private colormap for the window. .TP 8 .B \-visual \fIvisual\fP Specify which visual to use. Legal values are the name of a visual class, or the id number (decimal or hex) of a specific visual. .TP 8 .B \-count \fIinteger\fP How many particles should be allowed on the screen at once. Default 600. .TP 8 .B \-frequency \fIinteger\fP How often new missiles should launch. Default 30. .TP 8 .B \-scatter \fIinteger\fP How many particles should appear when a missile explodes. Default 100. The actual number used is between \fIN\fP and \fIN+(N/2)\fP. .TP 8 .B \-fps Display the current frame rate and CPU load. .SH ENVIRONMENT .PP .TP 8 .B DISPLAY to get the default host and display number. .TP 8 .B XENVIRONMENT to get the name of a resource file that overrides the global resources stored in the RESOURCE_MANAGER property. .SH SEE ALSO .BR X (1), .BR xscreensaver (1) .SH COPYRIGHT Copyright \(co 1992 by 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. .SH AUTHOR Jamie Zawinski , 13-aug-92. xscreensaver-5.36/hacks/qix.man000644 000767 000024 00000011415 12701612220 016520 0ustar00jwzstaff000000 000000 .TH XScreenSaver 1 "27-Apr-97" "X Version 11" .SH NAME qix - bounce colored lines around a window .SH SYNOPSIS .B qix [\-display \fIhost:display.screen\fP] [\-foreground \fIcolor\fP] [\-background \fIcolor\fP] [\-window] [\-root] [\-mono] [\-install] [\-visual \fIvisual\fP] [\-segments \fIint\fP] [\-spread \fIpixels\fP] [\-size \fIpixels\fP] [\-count \fIint\fP] [\-color-shift \fIdegrees\fP] [\-delay \fIusecs\fP] [\-random] [\-linear] [\-solid] [\-hollow] [\-xor] [\-no\-xor] [\-transparent] [\-non\-transparent] [\-additive] [\-subtractive] [\-poly \fIint\fP] [\-gravity] [\-no\-gravity] [\-fps] .SH DESCRIPTION The \fIqix\fP program bounces a series of line segments around its window. This is truly the swiss army chainsaw of qix programs. If you know of one with more display modes, I want to know about it. .SH OPTIONS .I qix accepts the following options: .TP 8 .B \-window Draw on a newly-created window. This is the default. .TP 8 .B \-root Draw on the root window. .TP 8 .B \-mono If on a color display, pretend we're on a monochrome display. .TP 8 .B \-install Install a private colormap for the window. .TP 8 .B \-visual \fIvisual\fP Specify which visual to use. Legal values are the name of a visual class, or the id number (decimal or hex) of a specific visual. .TP 8 .B \-segments \fIinteger\fP How many line segments should be drawn. Default 50. .TP 8 .B \-spread \fIinteger\fP How far apart the endpoints of one segment should be from the next. Default 8. .TP 8 .B \-size \fIinteger\fP The maximum distance one endpoint of a segment is allowed to be from the opposite end of that segment. Default 0, meaning unlimited. .TP 8 .B \-count \fIinteger\fP How many qixes to draw. Default 1. .TP 8 .B \-color\-shift \fIdegrees\fP If on a color display, the color of the line segments will cycle through the spectrum. This specifies how far the hue of each segment should be from the next, in degrees on the HSV wheel. Default 3. .TP 8 .B \-delay \fImicroseconds\fP How much of a delay should be introduced between steps of the animation. Default 10000, or about 0.01 seconds. .TP 8 .B \-random The \fIqix\fP will wander around the screen semi-randomly. This is the default. .TP 8 .B \-linear The opposite of \fI\-random\fP: the \fIqix\fP will travel in straight lines until it reaches a wall, and then it will bounce. .TP 8 .B \-solid If this is specified, then the area between the line segments will be filled in with the appropriate color, instead of the \fIqix\fP simply being composed of one-pixel-wide line segments. This option looks really good in color. .TP 8 .B \-hollow The opposite of \fI\-solid\fP; this is the default. .TP 8 .B \-xor If this is specified, then qix segments will be drawn and erased with xor, instead of being drawn in some color and erased in the background color. This implies \fI\-mono\fP, in that only two colors can be used. .TP 8 .B \-transparent If this is specified, and \fI\-count\fP is greater than 1, then each qix will be drawn in one color, and when they overlap, the colors will be mixed. This looks best in conjunction with \fI\-solid\fP. .TP 8 .B \-non\-transparent Turns off \fI\-transparent\fP. .TP 8 .B \-additive If \fI\-transparent\fP is specified, then this option means that the colors will be mixed using an additive color model, as if the qixes were projected light. This is the default. .TP 8 .B \-subtractive If \fI\-transparent\fP is specified, then this option means that the colors will be mixed using a subtractive color model, as if the qixes were translucent filters. .TP 8 .B \-poly \fIint\fP How many vertices each qix-line should have: the default is 2, meaning the traditional qix line shape. Three will yield triangles, and so on. .TP 8 .B \-gravity .TP 8 .B \-no\-gravity Whether there should be downward attraction. For example, the options .B \-gravity \-linear will make everything move in nice smooth parabolas. Gravity is off by default. .TP 8 .B \-fps Display the current frame rate and CPU load. .SH ENVIRONMENT .PP .TP 8 .B DISPLAY to get the default host and display number. .TP 8 .B XENVIRONMENT to get the name of a resource file that overrides the global resources stored in the RESOURCE_MANAGER property. .SH SEE ALSO .BR X (1), .BR xscreensaver (1) .SH COPYRIGHT Copyright \(co 1992 by 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. .SH AUTHOR Jamie Zawinski , 13-aug-92. Thanks to Ariel Scolnicov for the \-poly and \-gravity options. xscreensaver-5.36/hacks/rd-bomb.man000644 000767 000024 00000006052 12701612220 017242 0ustar00jwzstaff000000 000000 .TH XScreenSaver 1 "10-May-97" "X Version 11" .SH NAME rd-bomb - reaction/diffusion textures .SH SYNOPSIS .B rd-bomb [\-display \fIhost:display.screen\fP] [\-foreground \fIcolor\fP] [\-background \fIcolor\fP] [\-window] [\-root] [\-install] [\-visual \fIvisual\fP] [\-width \fIn\fP] [\-height \fIn\fP] [\-reaction \fIn\fP] [\-diffusion \fIn\fP] [\-size \fIf\fP] [\-speed \fIf\fP] [\-delay \fImillisecs\fP] [\-fps] .SH DESCRIPTION The \fIrd-bomb\fP program draws reaction/diffusion textures. The code is derived from the 'd' mode of the "bomb" visual musical instrument (see http://www.cs.cmu.edu/~spot/bomb.html). I got the equations from xmorphia (http://www.ccsf.caltech.edu/ismap/image.html), which is based on a version of the Gray-Scott model taken from: John E. Pearson "Complex Patterns in a Simple System" Science, 261,189, 9 July 1993. If the frame-rate is too low, consider decreasing the width and height of the tile, or decreasing the size of the active part of the screen. .SH OPTIONS If one of the reaction, diffusion, radius, and palette options is set to a negative value, then that option will be set to a random appropriate value. Be sure to try "-speed 1 -size 0.1 -epoch 3000". .I rd-bomb accepts the following options: .TP 8 .B \-window Draw on a newly-created window. This is the default. .TP 8 .B \-root Draw on the root window. .TP 8 .B \-install Install a private colormap for the window. .TP 8 .B \-visual \fIvisual\fP Specify which visual to use. Legal values are the name of a visual class, or the id number (decimal or hex) of a specific visual. .TP 8 .B \-width \fIn\fP .TP 8 .B \-height \fIn\fP Specify the size of the tile, in pixels. .TP 8 .B \-reaction \fIn\fP .TP 8 .B \-diffusion \fIn\fP These are constants in the equations that effect its visual nature. Each may be one of 0, 1, or 2. Default is -1: these constants are chosen randomly. .TP 8 .B \-radius \fIn\fP Size of the seed. .TP 8 .B \-size \fIf\fP What fraction of the window is actively drawn, a floating point number between 0 (exclusive) and 1 (inclusive). Default is 1.0. .TP 8 .B \-speed \fIf\fP When a fraction of the screen is active, the active area moves at this rate (a floating point number). Default is zero. Suggested value: 1.0. .TP 8 .B \-delay \fImillisecs\fP How many milliseconds to delay between frames; default 1, or about 1/1000th of a second. .TP 8 .B \-fps Display the current frame rate and CPU load. .SH ENVIRONMENT .PP .TP 8 .B DISPLAY to get the default host and display number. .TP 8 .B XENVIRONMENT to get the name of a resource file that overrides the global resources stored in the RESOURCE_MANAGER property. .SH SEE ALSO .BR X (1), .BR xscreensaver (1), .BR xlock (1) .SH COPYRIGHT Copyright \(co 1997 by Scott Draves. Permission to use, copy, modify, and distribute this software and its documentation for any purpose and without fee is hereby granted, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation. .SH AUTHOR Scott Draves , 9/97 xscreensaver-5.36/hacks/ripples.man000644 000767 000024 00000004751 12701612220 017402 0ustar00jwzstaff000000 000000 .TH XScreenSaver 1 "" "X Version 11" .SH NAME ripples - interference patterns. .SH SYNOPSIS .B ripples [\-display \fIhost:display.screen\fP] [\-visual \fIvisual\fP] [\-window] [\-root] [\-delay \fInumber\fP] [\-duration \fIsecs\fP] [\-rate \fInumber\fP] [\-fluidity \fInumber\fP] [\-light \fInumber\fP] [\-water] [\-stir] [\-oily] [\-grayscale] [\-colors \fInumber\fP] [\-no-shm] [\-fps] .SH DESCRIPTION This draws rippling interference patterns like splashing water. With the -water option, it manipulates your desktop image to look like something is dripping into it. .SH OPTIONS .TP 8 .B \-visual \fIvisual\fP Specify which visual to use. Legal values are the name of a visual class, or the id number (decimal or hex) of a specific visual. .TP 8 .B \-window Draw on a newly-created window. This is the default. .TP 8 .B \-root Draw on the root window. .TP 8 .B \-delay \fInumber\fP Per-frame delay, in microseconds. Default: 50000 (0.05 seconds.). .TP 8 .B \-duration \fIseconds\fP How long to run before loading a new image. Default 120 seconds. .TP 8 .B \-rate \fInumber\fP Drizzle. 1 - 100. Default: 5. .TP 8 .B \-fluidity \fInumber\fP Small Drops. 0 - 16. Default: 6. .TP 8 .B \-light \fInumber\fP Lighting Effect. 0 - 8. Default: 0. .TP 8 .B \-water | \-no-water Grab Screen Image. Boolean. .TP 8 .B \-stir | \-no-stir Moving Splashes. Boolean. .TP 8 .B \-oily | \-no-oily Psychedelic Colors. Boolean. .TP 8 .B \-grayscale Convert the screen image to grayscale. Ignored if we don't grab the screen image or if our screen doesn't have enough color depth. .TP 8 .B \-colors \fInumber\fP Colors Two. Default: 200. .TP 8 .B \-shm | \-no-shm Use Shared Memory. Boolean. .TP 8 .B \-fps Display the current frame rate and CPU load. .SH ENVIRONMENT .PP .TP 8 .B DISPLAY to get the default host and display number. .TP 8 .B XENVIRONMENT to get the name of a resource file that overrides the global resources stored in the RESOURCE_MANAGER property. .SH SEE ALSO .BR X (1), .BR xscreensaver (1) .SH COPYRIGHT Copyright \(co 2002 by Tom Hammersley. 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. .SH AUTHOR Tom Hammersley. xscreensaver-5.36/hacks/rocks.man000644 000767 000024 00000006321 12701612220 017040 0ustar00jwzstaff000000 000000 .TH XScreenSaver 1 "13-aug-92" "X Version 11" .SH NAME rocks - animation of flying through an asteroid field .SH SYNOPSIS .B rocks [\-display \fIhost:display.screen\fP] [\-foreground \fIcolor\fP] [\-background \fIcolor\fP] [\-window] [\-root] [\-mono] [\-ncolors \fIn\fP] [\-install] [\-visual \fIvisual\fP] [\-count \fIinteger\fP] [\-delay \fIusecs\fP] [\-speed \fIinteger\fP] [\-norotate] [\-nomove] [\-3d] [\-fps] .SH DESCRIPTION The \fIrocks\fP program draws an animation of an asteroid field moving past the observer (or vice versa). Sometimes the observer picks up spin on Z axis. .SH OPTIONS .I rocks accepts the following options: .TP 8 .B \-window Draw on a newly-created window. This is the default. .TP 8 .B \-root Draw on the root window. .TP 8 .B \-mono Make all the rocks the same color. .TP 8 .B \-ncolors colors How many different colors to use. Default 5. Colors are chosen randomly. .TP 8 .B \-install Install a private colormap for the window. .TP 8 .B \-visual \fIvisual\fP Specify which visual to use. Legal values are the name of a visual class, or the id number (decimal or hex) of a specific visual. .TP 8 .B \-count \fIinteger\fP Maximum number of rocks to draw on the screen at once. Default 100. .TP 8 .B \-speed \fIinteger\fP A measure of the speed with which the observer and the rocks pass each other, from 1 to 100. Default 100, meaning ``very fast.'' If you're on a slow display connection (the animation looks jerky) then try making this number smaller, and/or decreasing the number of rocks. .TP 8 .B \-delay \fImicroseconds\fP Number of microseconds to delay between each frame. Default 50000, meaning about 1/20th second. Compare and contrast with \fI\-speed\fP, above. .TP 8 .B \-norotate Don't rotate the observer; just fly through the field on the level. .TP 8 .B \-nomove Don't turn the observer; just fly straight ahead through the field. .TP 8 .B \-3d Do red/blue 3d separations: if you look at the screen with 3d glasses, the rocks will be \fIjumping\fP right \fIout\fP at you. Oooooh, scaaary! .TP 8 .B \-fps Display the current frame rate and CPU load. .SH ENVIRONMENT .PP .TP 8 .B DISPLAY to get the default host and display number. .TP 8 .B XENVIRONMENT to get the name of a resource file that overrides the global resources stored in the RESOURCE_MANAGER property. .SH SEE ALSO .BR X (1), .BR xscreensaver (1) .SH BUGS There should be an option to display doppler shift (a gravity rainbow.) Speed of rotation should be settable. Default speed of rotation should be relative to forward velocity. .SH COPYRIGHT Copyright \(co 1992 by 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. .SH AUTHOR Based on Lisp Machine code copyright 1988 John Nguyen . Ported to C and X by Jamie Zawinski , 13-aug-92. Steering code by Jeremie Petit; 3D code by theiling@coli.uni-sb.de. xscreensaver-5.36/hacks/rorschach.man000644 000767 000024 00000004737 12701612220 017704 0ustar00jwzstaff000000 000000 .TH XScreenSaver 1 "13-aug-92" "X Version 11" .SH NAME rorschach - simulate ink-blot patterns .SH SYNOPSIS .B rorschach [\-display \fIhost:display.screen\fP] [\-foreground \fIcolor\fP] [\-background \fIcolor\fP] [\-window] [\-root] [\-mono] [\-install] [\-visual \fIvisual\fP] [\-iterations \fIinteger\fP] [\-offset \fIinteger\fP] [\-xsymmetry] [\-ysymmetry] [\-erase\-speed \fIusecs\fP] [\-delay \fIsecs\fP] [\-fps] .SH DESCRIPTION The \fIrorschach\fP program draws random patterns reminiscent of the psychological test of same name. .SH OPTIONS .I rorschach accepts the following options: .TP 8 .B \-window Draw on a newly-created window. This is the default. .TP 8 .B \-root Draw on the root window. .TP 8 .B \-mono If on a color display, pretend we're on a monochrome display. .TP 8 .B \-install Install a private colormap for the window. .TP 8 .B \-visual \fIvisual\fP Specify which visual to use. Legal values are the name of a visual class, or the id number (decimal or hex) of a specific visual. .TP 8 .B \-iterations \fIinteger\fP How many dots should be drawn each time. Default 4000. .TP 8 .B \-offset \fIinteger\fP How far apart the dots should be. Default 4 pixels. .TP 8 .B \-xsymmetry Whether the images should be horizontally symmetrical. Default true. .TP 8 .B \-ysymmetry Whether the images should be vertically symmetrical. Default false. .TP 8 .B \-erase\-speed \fIusecs\fP This controls the speed at which the screen will be erased. (Delay between erasing of individual lines.) .TP 8 .B \-delay \fIseconds\fP This sets the number of seconds that the figure will be on the screen. .TP 8 .B \-fps Display the current frame rate and CPU load. .SH ENVIRONMENT .PP .TP 8 .B DISPLAY to get the default host and display number. .TP 8 .B XENVIRONMENT to get the name of a resource file that overrides the global resources stored in the RESOURCE_MANAGER property. .SH BUGS May call your sanity into question. .SH SEE ALSO .BR X (1), .BR xscreensaver (1) .SH COPYRIGHT Copyright \(co 1992 by 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. .SH AUTHOR Jamie Zawinski , 13-aug-92. xscreensaver-5.36/hacks/rotzoomer.man000644 000767 000024 00000005276 12701612220 017767 0ustar00jwzstaff000000 000000 .TH XScreenSaver 1 "14-Mar-01" "X Version 11" .SH NAME rotzoomer - animated rotations and scalings of portions of the screen .SH SYNOPSIS .B rotzoomer [\-display \fIhost:display.screen\fP] [\-move | \-no\-move] [\-delay \fImillisecs\fP] [\-duration \fIsecs\fP] [\-n \fIcount\fP] [\-shm | \-no\-shm] [\-window] [\-root] [\-install] [\-visual \fIvisual\fP] [\-fps] .SH DESCRIPTION The \fIrotzoomer\fP program grabs an image, then picks rectangles and draws scaled and rotated animations of that section. The image that it manipulates will be grabbed from the portion of the screen underlying the window, or from the system's video input, or from a random file on disk, as indicated by the \fIgrabDesktopImages\fP, \fIgrabVideoFrames\fP, and \fIchooseRandomImages\fP options in the \fI~/.xscreensaver\fP file; see .BR xscreensaver-demo (1) for more details. .SH OPTIONS .I rotzoomer accepts the following options: .TP 8 .B \-window Draw on a newly-created window. This is the default. .TP 8 .B \-root Draw on the root window. .TP 8 .B \-install Install a private colormap for the window. .TP 8 .B \-visual \fIvisual\fP Specify which visual to use. Legal values are the name of a visual class, or the id number (decimal or hex) of a specific visual. .TP 8 .B \-delay \fImilliseconds\fP How much of a delay should be introduced between steps of the animation. Default 10, or about 1/100th second. .TP 8 .B \-duration \fIseconds\fP How long to run before loading a new image. Default 120 seconds. .TP 8 .B \-move Make the rectangles should wander around the screen. .TP 8 .B \-no\-move Make the rectangles be stationary. This is the default. .TP 8 .B \-n \fIcount\fP How many rectangles to animate simultaneously. Default 2. .TP 8 .B \-no\-shm Disable use of the SHM extension, even if it appears to be available. .TP 8 .B \-fps Display the current frame rate and CPU load. .SH ENVIRONMENT .PP .TP 8 .B DISPLAY to get the default host and display number. .TP 8 .B XENVIRONMENT to get the name of a resource file that overrides the global resources stored in the RESOURCE_MANAGER property. .SH SEE ALSO .BR X (1), .BR xscreensaver (1), .BR xscreensaver\-demo (1), .BR xscreensaver\-getimage (1) .SH COPYRIGHT Copyright \(co 2001 by Claudio Matsuoka. 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. .SH AUTHOR Claudio Matsuoka xscreensaver-5.36/hacks/shadebobs.man000644 000767 000024 00000003446 12701612220 017656 0ustar00jwzstaff000000 000000 .TH XScreenSaver 1 "" "X Version 11" .SH NAME shadebobs - oscillating vapor trails. .SH SYNOPSIS .B shadebobs [\-display \fIhost:display.screen\fP] [\-visual \fIvisual\fP] [\-window] [\-root] [\-ncolors \fInumber\fP] [\-count \fInumber\fP] [\-delay \fInumber\fP] [\-cycles \fInumber\fP] [\-fps] .SH DESCRIPTION This draws smoothly-shaded oscillating oval patterns, that look something like vapor trails or neon tubes. .SH OPTIONS .TP 8 .B \-visual \fIvisual\fP Specify which visual to use. Legal values are the name of a visual class, or the id number (decimal or hex) of a specific visual. .TP 8 .B \-window Draw on a newly-created window. This is the default. .TP 8 .B \-root Draw on the root window. .TP 8 .B \-ncolors \fInumber\fP Number of Colors. Default: 64. .TP 8 .B \-count \fInumber\fP Count. 0 - 20. Default: 4. .TP 8 .B \-delay \fInumber\fP Per-frame delay, in microseconds. Default: 5000 (0.005 seconds.). .TP 8 .B \-cycles \fInumber\fP Duration. 0 - 100. Default: 10. .TP 8 .B \-fps Display the current frame rate and CPU load. .SH ENVIRONMENT .PP .TP 8 .B DISPLAY to get the default host and display number. .TP 8 .B XENVIRONMENT to get the name of a resource file that overrides the global resources stored in the RESOURCE_MANAGER property. .SH SEE ALSO .BR X (1), .BR xscreensaver (1) .SH COPYRIGHT Copyright \(co 2002 by Shane Smit. 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. .SH AUTHOR Shane Smit. xscreensaver-5.36/hacks/sierpinski.man000644 000767 000024 00000004034 12701612220 020076 0ustar00jwzstaff000000 000000 .TH XScreenSaver 1 "10-May-97" "X Version 11" .SH NAME sierpinski - draws Sierpinski triangle fractals .SH SYNOPSIS .B sierpinski [\-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 The \fIsierpinski\fP program draws Sierpinski triangle fractals. .SH OPTIONS .I sierpinski accepts the following options: .TP 8 .B \-window Draw on a newly-created window. This is the default. .TP 8 .B \-root Draw on the root window. .TP 8 .B \-mono If on a color display, pretend we're on a monochrome display. .TP 8 .B \-install Install a private colormap for the window. .TP 8 .B \-visual \fIvisual\fP Specify which visual to use. Legal values are the name of a visual class, or the id number (decimal or hex) of a specific visual. .TP 8 .B \-ncolors \fIinteger\fP How many colors should be used (if possible). Default 64. The colors are chosen randomly. .TP 8 .B \-cycles \fIinteger\fP .TP 8 .B \-count \fIinteger\fP .TP 8 .B \-fps Display the current frame rate and CPU load. .SH ENVIRONMENT .PP .TP 8 .B DISPLAY to get the default host and display number. .TP 8 .B XENVIRONMENT to get the name of a resource file that overrides the global resources stored in the RESOURCE_MANAGER property. .SH SEE ALSO .BR X (1), .BR xscreensaver (1), .BR xlock (1) .SH COPYRIGHT Copyright \(co 1996 by Desmond Daignault. Permission to use, copy, modify, and distribute this software and its documentation for any purpose and without fee is hereby granted, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation. .SH AUTHOR Desmond Daignault , 05-Sep-96. (Original xlock version was called tri.c.) Ability to run standalone or with \fIxscreensaver\fP added by Jamie Zawinski , 10-May-97. (Renamed to sierpinski.) xscreensaver-5.36/hacks/slidescreen.man000644 000767 000024 00000006132 12701612220 020217 0ustar00jwzstaff000000 000000 .TH XScreenSaver 1 "24-Nov-97" "X Version 11" .SH NAME slidescreen - permute the screen image like an 8-puzzle .SH SYNOPSIS .B slidescreen [\-display \fIhost:display.screen\fP] [\-background \fIcolor\fP] [\-grid-size \fIpixels\fP] [\-ibw \fIpixels\fP] [\-increment \fIpixels\fP] [\-delay \fIusecs\fP] [\-delay2 \fIusecs\fP] [\-duration \fIsecs\fP] [\-window] [\-root] [\-install] [\-visual \fIvisual\fP] [\-fps] .SH DESCRIPTION The \fIslidescreen\fP program takes an image, divides it into a grid, deletes a random square of that grid, and then randomly slides one of the neighbors of this "hole" into the hole (and repeat.) The image that it manipulates will be grabbed from the portion of the screen underlying the window, or from the system's video input, or from a random file on disk, as indicated by the \fIgrabDesktopImages\fP, \fIgrabVideoFrames\fP, and \fIchooseRandomImages\fP options in the \fI~/.xscreensaver\fP file; see .BR xscreensaver-demo (1) for more details. .SH OPTIONS .I slidescreen accepts the following options: .TP 8 .B \-window Draw on a newly-created window. This is the default. .TP 8 .B \-root Draw on the root window. .TP 8 .B \-install Install a private colormap for the window. .TP 8 .B \-visual \fIvisual\fP Specify which visual to use. Legal values are the name of a visual class, or the id number (decimal or hex) of a specific visual. .TP 8 .B \-grid-size \fIpixels\fP The size of the grid cells. Default 70 pixels. .TP 8 .B \-ibw \fIpixels\fP The size of the "gutter" between grid cells. Default 4 pixel. .TP 8 .B \-increment \fIpixels\fP How many pixels by which a piece should be moved when sliding to a new location. Default 10 pixels. .TP 8 .B \-delay \fImicroseconds\fP How much of a delay should be introduced between steps of the animation of the motion of each segment. Default 50000, which is 0.05 seconds. This is closely related to the \fI\-increment\fP parameter. .TP 8 .B \-delay2 \fImicroseconds\fP How much of a delay should be introduced between the end of the motion of one segment and the beginning of the motion of another. Default 1000000, which is one second. .TP 8 .B \-duration \fIseconds\fP How long to run before loading a new image. Default 120 seconds. .TP 8 .B \-fps Display the current frame rate and CPU load. .SH ENVIRONMENT .PP .TP 8 .B DISPLAY to get the default host and display number. .TP 8 .B XENVIRONMENT to get the name of a resource file that overrides the global resources stored in the RESOURCE_MANAGER property. .SH SEE ALSO .BR X (1), .BR xscreensaver (1), .BR xscreensaver\-demo (1), .BR xscreensaver\-getimage (1) .SH COPYRIGHT Copyright \(co 1992 by 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. .SH AUTHOR Jamie Zawinski , 3-dec-92. xscreensaver-5.36/hacks/slip.man000644 000767 000024 00000005132 12701612220 016665 0ustar00jwzstaff000000 000000 .TH XScreenSaver 1 "24-Nov-97" "X Version 11" .SH NAME slip - sucks your screen into a jet engine .SH SYNOPSIS .B slip [\-display \fIhost:display.screen\fP] [\-foreground \fIcolor\fP] [\-background \fIcolor\fP] [\-window] [\-root] [\-mono] [\-install] [\-visual \fIvisual\fP] [\-ncolors \fIinteger\fP] [\-iterations \fIinteger\fP] [\-points \fIinteger\fP] [\-delay \fImicroseconds\fP] [\-delay2 \fImicroseconds\fP] [\-fps] .SH DESCRIPTION The \fIslip\fP program does lots of blits and chews up an image. The image that it manipulates will be grabbed from the portion of the screen underlying the window, or from the system's video input, or from a random file on disk, as indicated by the \fIgrabDesktopImages\fP, \fIgrabVideoFrames\fP, and \fIchooseRandomImages\fP options in the \fI~/.xscreensaver\fP file; see .BR xscreensaver-demo (1) for more details. .SH OPTIONS .I slip accepts the following options: .TP 8 .B \-window Draw on a newly-created window. This is the default. .TP 8 .B \-root Draw on the root window. .TP 8 .B \-mono If on a color display, pretend we're on a monochrome display. .TP 8 .B \-install Install a private colormap for the window. .TP 8 .B \-visual \fIvisual\fP Specify which visual to use. Legal values are the name of a visual class, or the id number (decimal or hex) of a specific visual. .TP 8 .B \-ncolors \fIinteger\fP How many colors should be used (if possible). Default 200. The colors used cycle through the hue, making N stops around the color wheel. .TP 8 .B \-count \fIinteger\fP How many whooziwhatsis to generate. Default 35. .TP 8 .B \-cycles \fIinteger\fP How long to frobnicate. Default 50. .TP 8 .B \-delay \fImicroseconds\fP How long we should wait between drawing each step. Default 50000, or about 1/20th second. .TP 8 .B \-fps Display the current frame rate and CPU load. .SH ENVIRONMENT .PP .TP 8 .B DISPLAY to get the default host and display number. .TP 8 .B XENVIRONMENT to get the name of a resource file that overrides the global resources stored in the RESOURCE_MANAGER property. .SH SEE ALSO .BR X (1), .BR xscreensaver (1), .BR xscreensaver\-demo (1), .BR xscreensaver\-getimage (1) .SH COPYRIGHT Copyright \(co 1992 by Scott Draves. Permission to use, copy, modify, and distribute this software and its documentation for any purpose and without fee is hereby granted, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation. .SH AUTHOR Scott Graves . Ability to run standalone or with \fIxscreensaver\fP added by Jamie Zawinski , 18-Oct-93. xscreensaver-5.36/hacks/speedmine.man000644 000767 000024 00000017542 12701612220 017677 0ustar00jwzstaff000000 000000 .de EX \"Begin example .ne 5 .if n .sp 1 .if t .sp .5 .nf .in +.5i .. .de EE .fi .in -.5i .if n .sp 1 .if t .sp .5 .. .TH XScreenSaver 1 "23-Apr-01" "X Version 11" .SH NAME speedmine - simulates speeding down a rocky mineshaft, or a funky dancing worm .SH SYNOPSIS .B speedmine [\-display \fIhost:display.screen\fP] [\-root] [\-window] [\-install] [\-noinstall] [\-visual \fIvisual\fP] [\-wire] [\-nowire] [\-worm] [\-foreground \fIcolor\fP] [\-background \fIcolor\fP] [\-darkground \fIcolor\fP] [\-lightground \fIcolor\fP] [\-tunnelend \fIcolor\fP] [\-delay \fImicroseconds\fP] [\-maxspeed \fInumber\fP] [\-thrust \fInumber\fP] [\-gravity \fInumber\fP] [\-vertigo \fInumber\fP] [\-terrain] [\-noterrain] [\-smoothness \fInumber\fP] [\-curviness \fInumber\fP] [\-twistiness \fInumber\fP] [\-widening] [\-nowidening] [\-bumps] [\-nobumps] [\-bonuses] [\-crosshair] [\-nocrosshair] [\-psychedelic] [\-nopsychedelic] [\-fps] .SH DESCRIPTION .TP 8 Speedmine! Down the speedmine, you'll find speed to satisfy your moving needs; So if you're looking for a blast then hit the speedmine, really fast. .PP Speedworm loves you. Speedworm likes to bump and grind and chase her tail, and dance around she really is a funky friend; she's made of speed from end to end. .PP You can configure stuff either with command-line options or X resources. .SH OPTIONS .TP 8 .B \-display \fIhost:display.screen\fP Specifies which X display we should use (see the section DISPLAY NAMES in .BR X (1) for more information about this option). .TP 8 .B \-root Draw on the root window. .TP 8 .B \-window Draw on a newly-created window. This is the default. .TP 8 .B \-install Install a private colormap for the window. .TP 8 .B \-noinstall Don't install a private colormap for the window. .TP 8 .B \-visual \fIvisual\fP Specify which visual to use. Legal values are the name of a visual class, or the id number (decimal or hex) of a specific visual. Possible choices include .RS default, best, mono, monochrome, gray, grey, color, staticgray, staticcolor, truecolor, grayscale, greyscale, pseudocolor, directcolor, \fInumber\fP If a decimal or hexadecimal number is used, .BR XGetVisualInfo (3X) is consulted to obtain the required visual. .RE .TP 8 .B \-worm Be a happy spastic worm instead of a tunnel. .TP 8 .B \-wire Specifies that the tunnel/worm should always be rendered in wireframe style. .TP 8 .B \-nowire Specifies that the tunnel/worm should be rendered normally. Note that tunnel rendering may still temporarily switch to wireframe style when a wireframe bonus is hit, if .B bonuses are enabled. .TP 8 .B \-foreground \fIcolor\fP Specifies the default foreground color. .TP 8 .B \-background \fIcolor\fP Specifies the default background color. .TP 8 .B \-darkground \fIcolor\fP Specifies the color of the darkest portions of the ground (or the worm's belly.) The ground/belly is colored by a gradient between .B darkground and .B lightground. .TP 8 .B \-lightground \fIcolor\fP Specifies the color of the lightest portions of the ground/belly. The ground/belly is colored by a gradient between .B darkground and .B lightground. .TP 8 .B \-tunnelend \fIcolor\fP Specifies the color of the light at the end of the tunnel. .TP 8 .B \-delay \fImicroseconds\fP Specifies the delay between drawing successive frames. If you do not specify .BR -sync , some X servers may batch up several drawing operations together, producing a less smooth effect. This is more likely to happen in monochrome mode (on monochrome servers or when .B \-mono is specified). .TP 8 .B -maxspeed \fInumber\fP Specifies an upper bound on the speed of normal movement. This does not affect the speed that may be attained when hitting a speed bonus. .TP 8 .B -thrust \fInumber\fP Specifies the thrust constantly applied. Positive numbers indicate a forwards thrust, negative numbers indicate a backwards thrust. .TP 8 .B -gravity \fInumber\fP Specifies the effect of gravity. Larger numbers will increase acceleration downhill and decrease acceleration uphill. .TP 8 .B -vertigo \fInumber\fP Specifies to what level the demo should accentuate the curvature and windiness of the tunnel or worm. .TP 8 .B -terrain Continuously generate a fractal terrain to simulate the rockiness of the tunnel walls, or the texture of the worm's skin. .TP 8 .B -noterrain Do not generate terrain. When this option is set, all surfaces are flat. .TP 8 .B -smoothness \fInumber\fP When .BR -terrain is set, specifies how smooth the walls or skin are. .TP 8 .B -curviness \fInumber\fP Controls how much the generated tunnel (or worm) should curve left and right, and dip up and down. .TP 8 .B -twistiness \fInumber\fP Controls how much the generated tunnel (or worm) twists around itself. .TP 8 .B -widening Specifies that the generated tunnel (or worm) may vary in width. .TP 8 .B -nowidening Specifies that the average width should be kept constant. .TP 8 .B -bumps Indicates that the simulation should take the bumpiness of the ground into account and allow the animation to shake and rattle when travelling over rough ground. Or that the worm should be allowed to bump around and shake her booty. .TP 8 .B -nobumps Indicates that the bumpiness of the ground should be ignored, such that the simulation will glide through the tunnel. Or that the worm should calm down and behave herself. .TP 8 .B -bonuses Indicates that the demo should include bonus events. These include speed bonuses, spins, and changes of viewpoint and rendering style. .TP 8 .B -nobonuses Indicates that bonuses should not be included in the demo. .TP 8 .B -crosshair Specifies that a gaming style crosshair be drawn on the simulation. This serves little purpose but may make hardcore gamers feel more comfortable. .TP 8 .B -nocrosshair Specifies that no crosshair be drawn. .TP 8 .B -psychedelic Specifies that a psychedelic colormap should be generated. When this is set, the walls and ground of the tunnel are drawn in an often changing rainbow of colours. .TP 8 .B -nopsychedelic Specifies that a normal colormap should be used, with muted walls and a grey road. .TP 8 .B \-fps Display the current frame rate and CPU load. .SH RESOURCES .EX Option Resource Default Value ------ -------- ------------- -wire .wire False -background .background black -foreground .foreground white -darkground .darkground #101010 -lightground .lightground #a0a0a0 -tunnelend .tunnelend #000000 -delay .delay 30000 -maxspeed .maxspeed 700 -thrust .thrust 1.0 -gravity .gravity 9.8 -vertigo .vertigo 1.0 -terrain .terrain True -smoothness .smoothness 6 -curviness .curviness 1.0 -twistiness .twistiness 1.0 -widening .widening True -bumps .bumps True -bonuses .bonuses True -crosshair .crosshair False -psychedelic .psychedelic False .EE .SH WARNING Speedworm is a trained professional. Do not try this at home. Prolonged viewing of this demo with .B maxspeed and .B vertigo above the defaults may have short-term psychological side effects including hyperactivity and attention deficiency. .SH COPYRIGHT Copyright \(co 2001, Conrad Parker. 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. .SH AUTHOR Conrad Parker , April 2001. xscreensaver-5.36/hacks/spotlight.man000644 000767 000024 00000005014 12701612220 017732 0ustar00jwzstaff000000 000000 .TH XScreenSaver 1 "05-Apr-1999" "X Version 11" .SH NAME spotlight - move spotlight around desktop .SH SYNOPSIS .B spotlight [\-display \fIhost:display.screen\fP] [\-foreground \fIcolor\fP] [\-background \fIcolor\fP] [\-window] [\-root] [\-mono] [\-install] [\-visual \fIvisual\fP] [\-delay \fIusecs\fP] [\-duration \fIsecs\fP] [\-radius \fIpixels\fP] [\-fps] .SH DESCRIPTION The \fIspotlight\fP program takes an image and exposes small sections of it as if through a wandering spotlight beam. The image that it manipulates will be grabbed from the portion of the screen underlying the window, or from the system's video input, or from a random file on disk, as indicated by the \fIgrabDesktopImages\fP, \fIgrabVideoFrames\fP, and \fIchooseRandomImages\fP options in the \fI~/.xscreensaver\fP file; see .BR xscreensaver-demo (1) for more details. .SH OPTIONS .I spotlight accepts the following options: .TP 8 .B \-window Draw on a newly-created window. This is the default. .TP 8 .B \-root Draw on the root window. .TP 8 .B \-mono If on a color display, pretend we're on a monochrome display. .TP 8 .B \-install Install a private colormap for the window. .TP 8 .B \-visual \fIvisual\fP Specify which visual to use. Legal values are the name of a visual class, or the id number (decimal or hex) of a specific visual. .TP 8 .B \-delay \fImicroseconds\fP Slow it down. .TP 8 .B \-duration \fIseconds\fP How long to run before loading a new image. Default 120 seconds. .TP 8 .B \-radius \fIpixels\fP Radius of the spotlight in pixels. .TP 8 .B \-fps Display the current frame rate and CPU load. .SH ENVIRONMENT .PP .TP 8 .B DISPLAY to get the default host and display number. .TP 8 .B XENVIRONMENT to get the name of a resource file that overrides the global resources stored in the RESOURCE_MANAGER property. .SH SEE ALSO .BR X (1), .BR xscreensaver (1), .BR xscreensaver\-demo (1), .BR xscreensaver\-getimage (1) .SH COPYRIGHT Copyright \(co 1999 by Rick Schultz. 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. .SH CREDITS Hacked together by Rick Schultz , based on StefView for BackSpace by Darcy Brockbank and on several other xscreensaver hacks. xscreensaver-5.36/hacks/squiral.man000644 000767 000024 00000005057 12701612220 017404 0ustar00jwzstaff000000 000000 .TH XScreenSaver 1 "18-mar-1999" "X Version 11" .SH NAME squiral - square spirals screensaver .SH SYNOPSIS .B squiral [\-display \fIhost:display.screen\fP] [\-foreground \fIcolor\fP] [\-background \fIcolor\fP] [\-window] [\-root] [\-mono] [\-install] [\-noinstall] [\-visual \fIvisual\fP] [\-fill \fIpercent\fP] [-count \fInumber\fP] [-delay \fIusec\fP] [-disorder \fIfraction\fP] [-handedness \fIfraction\fP] [-cycle] [\-fps] .SH DESCRIPTION The \fIsquiral\fP program displays interacting, spiral-producing automata .SH OPTIONS .I squiral accepts the following options: .TP 8 .B \-window Draw on a newly-created window. This is the default. .TP 8 .B \-root Draw on the root window. .TP 8 .B \-mono If on a color display, pretend we're on a monochrome display. .TP 8 .B \-install Install a private colormap for the window. .TP 8 .B \-visual \fIvisual\fP Specify which visual to use. Legal values are the name of a visual class, or the id number (decimal or hex) of a specific visual. .TP 8 .B \-fill \fIpercent\fP Specify the percent (0-100) of the screen which must be filled before the screen is cleared. 60-80 percent are good values. .TP 8 .B \-count \fInumber\fP The number of squiralies. By default, the screen width divided by 32. .TP 8 .B \-delay \fIusec\fP The wait between steps. The default is 1000. .TP 8 .B \-disorder \fIfraction\fP The fraction of the time a squiraly will choose a new direction. The default is 0.005. .TP 8 .B \-handedness \fIfraction\fP The fraction of the time a squiraly will choose to enter lefthanded mode. 0.0 means exclusively right-handed behavior, 0.5 (the default) is a balance between the two, and 1.0 is exclusively left-handed behaviour. .TP 8 .B \-fps Display the current frame rate and CPU load. .SH ENVIRONMENT .PP .TP 8 .B DISPLAY to get the default host and display number. .TP 8 .B XENVIRONMENT to get the name of a resource file that overrides the global resources stored in the RESOURCE_MANAGER property. .SH BUGS None known .SH SEE ALSO .BR X (1), .BR xscreensaver (1) .SH COPYRIGHT Copyright \(co 1999, by Jeff Epler. Permission to use, copy, modify, distribute, and sell this software and its documentation for any purpose is hereby granted without fee, provided fnord 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 fnord this software for any purpose. It is provided "as is" without express or fnord implied warranty. .SH AUTHOR Jeff Epler , 18-mar-1999 xscreensaver-5.36/hacks/starfish.man000644 000767 000024 00000005747 12701612220 017555 0ustar00jwzstaff000000 000000 .TH XScreenSaver 1 "14-Jun-97" "X Version 11" .SH NAME starfish - radially-symmetric throbbing colormap-hacking graphics demo .SH SYNOPSIS .B starfish [\-display \fIhost:display.screen\fP] [\-foreground \fIcolor\fP] [\-background \fIcolor\fP] [\-window] [\-root] [\-mono] [\-install] [\-visual \fIvisual\fP] [\-delay \fIusecs\fP] [\-delay2 \fIsecs\fP] [\-thickness \fIpixels\fP] [\-rotation \fIdegrees\fP] [\-duration \fIseconds\fP] [\-colors \fIint\fP] [\-blob] [\-no\-blob] [\-fps] .SH DESCRIPTION The \fIstarfish\fP program draws radially symmetric objects, which expand, contract, rotate, and turn inside out. It uses these shapes to lay down a field of smooth colors, and then rotates the colormap. .SH OPTIONS .I starfish accepts the following options: .TP 8 .B \-window Draw on a newly-created window. This is the default. .TP 8 .B \-root Draw on the root window. .TP 8 .B \-mono If on a color display, pretend we're on a monochrome display. .TP 8 .B \-install Install a private colormap for the window. .TP 8 .B \-visual \fIvisual\fP Specify which visual to use. Legal values are the name of a visual class, or the id number (decimal or hex) of a specific visual. .TP 8 .B \-delay \fImicroseconds\fP How much of a delay should be introduced between steps of the animation. Default 10000, or about 1/100th second. .TP 8 .B \-thickness \fIpixels\fP How wide each color band should be. Default 0, meaning random (the chosen value will be between 0 and 15.) .TP 8 .B \-rotation \fIdegrees\fP How quickly the objects should rotate at each step. Default 0, meaning random (the chosen value will be between 0 and 12 degrees.) .TP 8 .B \-colors \fIint\fP How many colors to use. Default 200. The more colors, the smoother the transitions will be, and the nicer the resultant images. .TP 8 .B \-duration \fIseconds\fP How long to run before choosing a new shape. Default 30 seconds. .TP 8 .B \-delay2 \fIseconds\fP When \fIduration\fP expires, how long to wait before starting a new run. Default 5 seconds. .TP 8 .B \-blob .TP 8 .B \-no\-blob If \fIblob\fP option is specified, then the raw shapes will be shown, instead of a field of colors generated from them. .TP 8 .B \-fps Display the current frame rate and CPU load. .SH ENVIRONMENT .PP .TP 8 .B DISPLAY to get the default host and display number. .TP 8 .B XENVIRONMENT to get the name of a resource file that overrides the global resources stored in the RESOURCE_MANAGER property. .SH SEE ALSO .BR X (1), .BR xscreensaver (1) .SH COPYRIGHT Copyright \(co 1997 by 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. .SH AUTHOR Jamie Zawinski , 14-Jun-97. xscreensaver-5.36/hacks/strange.man000644 000767 000024 00000003472 12701612220 017366 0ustar00jwzstaff000000 000000 .TH XScreenSaver 1 "10-May-97" "X Version 11" .SH NAME strange - draws strange attractors .SH SYNOPSIS .B strange [\-display \fIhost:display.screen\fP] [\-foreground \fIcolor\fP] [\-background \fIcolor\fP] [\-window] [\-root] [\-mono] [\-install] [\-visual \fIvisual\fP] [\-ncolors \fIinteger\fP] [\-delay \fImicroseconds\fP] [\-fps] .SH DESCRIPTION The \fIstrange\fP program draws strange attractors .SH OPTIONS .I strange accepts the following options: .TP 8 .B \-window Draw on a newly-created window. This is the default. .TP 8 .B \-root Draw on the root window. .TP 8 .B \-mono If on a color display, pretend we're on a monochrome display. .TP 8 .B \-install Install a private colormap for the window. .TP 8 .B \-visual \fIvisual\fP Specify which visual to use. Legal values are the name of a visual class, or the id number (decimal or hex) of a specific visual. .TP 8 .B \-ncolors \fIinteger\fP How many colors should be used (if possible). Default 100. The colors are chosen randomly. .TP 8 .B \-fps Display the current frame rate and CPU load. .SH ENVIRONMENT .PP .TP 8 .B DISPLAY to get the default host and display number. .TP 8 .B XENVIRONMENT to get the name of a resource file that overrides the global resources stored in the RESOURCE_MANAGER property. .SH SEE ALSO .BR X (1), .BR xscreensaver (1), .BR xlock (1) .SH COPYRIGHT Copyright \(co 1997 by Massimino Pascal. Permission to use, copy, modify, and distribute this software and its documentation for any purpose and without fee is hereby granted, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation. .SH AUTHOR Massimino Pascal , 1997. Ability to run standalone or with \fIxscreensaver\fP added by Jamie Zawinski , 10-May-97. xscreensaver-5.36/hacks/swirl.man000644 000767 000024 00000003513 12701612220 017057 0ustar00jwzstaff000000 000000 .TH XScreenSaver 1 "13-May-97" "X Version 11" .SH NAME swirl - draws swirly color-cycling patterns .SH SYNOPSIS .B swirl [\-display \fIhost:display.screen\fP] [\-foreground \fIcolor\fP] [\-background \fIcolor\fP] [\-window] [\-root] [\-mono] [\-install] [\-visual \fIvisual\fP] [\-ncolors \fIinteger\fP] [\-delay \fImicroseconds\fP] [\-count \fIinteger\fP] [\-fps] .SH DESCRIPTION The \fIswirl\fP program draws swirly color-cycling patterns. .SH OPTIONS .I swirl accepts the following options: .TP 8 .B \-window Draw on a newly-created window. This is the default. .TP 8 .B \-root Draw on the root window. .TP 8 .B \-mono If on a color display, pretend we're on a monochrome display. .TP 8 .B \-install Install a private colormap for the window. .TP 8 .B \-visual \fIvisual\fP Specify which visual to use. Legal values are the name of a visual class, or the id number (decimal or hex) of a specific visual. .TP 8 .B \-ncolors \fIinteger\fP How many colors should be used (if possible). Default 200. .TP 8 .B \-count \fIinteger\fP .TP 8 .B \-fps Display the current frame rate and CPU load. .SH ENVIRONMENT .PP .TP 8 .B DISPLAY to get the default host and display number. .TP 8 .B XENVIRONMENT to get the name of a resource file that overrides the global resources stored in the RESOURCE_MANAGER property. .SH SEE ALSO .BR X (1), .BR xscreensaver (1), .BR xlock (1) .SH COPYRIGHT Copyright \(co 1994 M. Dobie. Permission to use, copy, modify, and distribute this software and its documentation for any purpose and without fee is hereby granted, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation. .SH AUTHOR M.Dobie , 1994. Ability to run standalone or with \fIxscreensaver\fP added by Jamie Zawinski , 13-May-97. xscreensaver-5.36/hacks/thornbird.man000644 000767 000024 00000003400 12701612221 017706 0ustar00jwzstaff000000 000000 .TH XScreenSaver 1 "" "X Version 11" .SH NAME thornbird - Bird in a Thornbush fractal. .SH SYNOPSIS .B thornbird [\-display \fIhost:display.screen\fP] [\-visual \fIvisual\fP] [\-window] [\-root] [\-count \fInumber\fP] [\-cycles \fInumber\fP] [\-delay \fInumber\fP] [\-ncolors \fInumber\fP] [\-fps] .SH DESCRIPTION Displays a view of the "Bird in a Thornbush" fractal. .SH OPTIONS .TP 8 .B \-visual \fIvisual\fP Specify which visual to use. Legal values are the name of a visual class, or the id number (decimal or hex) of a specific visual. .TP 8 .B \-window Draw on a newly-created window. This is the default. .TP 8 .B \-root Draw on the root window. .TP 8 .B \-count \fInumber\fP Points. 10 - 1000. Default: 800. .TP 8 .B \-cycles \fInumber\fP Thickness. 2 - 500. Default: 16. .TP 8 .B \-delay \fInumber\fP Per-frame delay, in microseconds. Default: 10000 (0.01 seconds.). .TP 8 .B \-ncolors \fInumber\fP Number of Colors. Default: 64. .TP 8 .B \-fps Display the current frame rate and CPU load. .SH ENVIRONMENT .PP .TP 8 .B DISPLAY to get the default host and display number. .TP 8 .B XENVIRONMENT to get the name of a resource file that overrides the global resources stored in the RESOURCE_MANAGER property. .SH SEE ALSO .BR X (1), .BR xscreensaver (1) .SH COPYRIGHT Copyright \(co 2002 by Tim Auckland. 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. .SH AUTHOR Tim Auckland. xscreensaver-5.36/hacks/triangle.man000644 000767 000024 00000003200 12701612221 017516 0ustar00jwzstaff000000 000000 .TH XScreenSaver 1 "" "X Version 11" .SH NAME triangle - random mountains using iterative subdivision of triangles. .SH SYNOPSIS .B triangle [\-display \fIhost:display.screen\fP] [\-visual \fIvisual\fP] [\-window] [\-root] [\-delay \fInumber\fP] [\-ncolors \fInumber\fP] [\-fps] .SH DESCRIPTION Generates random mountain ranges using iterative subdivision of triangles. .SH OPTIONS .TP 8 .B \-visual \fIvisual\fP Specify which visual to use. Legal values are the name of a visual class, or the id number (decimal or hex) of a specific visual. .TP 8 .B \-window Draw on a newly-created window. This is the default. .TP 8 .B \-root Draw on the root window. .TP 8 .B \-delay \fInumber\fP Per-frame delay, in microseconds. Default: 10000 (0.01 seconds.). .TP 8 .B \-ncolors \fInumber\fP Number of Colors. Default: 128. .TP 8 .B \-fps Display the current frame rate and CPU load. .SH ENVIRONMENT .PP .TP 8 .B DISPLAY to get the default host and display number. .TP 8 .B XENVIRONMENT to get the name of a resource file that overrides the global resources stored in the RESOURCE_MANAGER property. .SH SEE ALSO .BR X (1), .BR xscreensaver (1) .SH COPYRIGHT Copyright \(co 2002 by Tobias Gloth. 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. .SH AUTHOR Tobias Gloth. xscreensaver-5.36/hacks/truchet.man000644 000767 000024 00000007030 12701612221 017374 0ustar00jwzstaff000000 000000 .TH XScreenSaver 1 "27-May-97" "X Version 11" .SH NAME truchet - draws curved or angular Truchet patterns .SH SYNOPSIS .B truchet [\-display \fIhost:display.screen\fP] [\-foreground \fIcolor\fP] [\-background \fIcolor\fP] [\-window] [\-root] [\-mono] [\-install] [\-visual \fIvisual\fP] [\-delay \fImilliseconds\fP] [\-min\-width \fIinteger\fP] [\-min-height \fIinteger\fP] [\-max-width \fIinteger\fP] [\-max-height \fIinteger\fP] [\-max\-linewidth \fIinteger\fP] [\-min-linewidth \fIinteger\fP] [\-erase] [\-no\-erase] [\-erase\-count \fIinteger\fP] [\-square] [\-not\-square] [\-curves] [\-no\-curves] [\-angle] [\-no\-angles] [\-scroll] [\-scroll\-overlap \fIinteger\fP] [\-anim\-delay \fIinteger\fP] [\-anim\-step\-size \fIinteger\fP] [\-fps] .SH DESCRIPTION The \fItruchet\fP program draws arc and line based Truchet patterns. .SH OPTIONS .I truchet accepts the following options: .TP 8 .B \-window Draw on a newly-created window. This is the default. .TP 8 .B \-root Draw on the root window. .TP 8 .B \-mono If on a color display, pretend we're on a monochrome display. .TP 8 .B \-install Install a private colormap for the window. .TP 8 .B \-visual \fIvisual\fP Specify which visual to use. Legal values are the name of a visual class, or the id number (decimal or hex) of a specific visual. .TP 8 .B \-delay \fImilliseconds\fP How long to wait between drawing each screenful. Default is 1 seconds. .TP 8 .B \-min-width \fIinteger\fP The minimum width in pixels of each square. Default is 40. .TP 8 .B \-min-height \fIinteger\fP The minimum height in pixels of each square. Default is 40. .TP 8 .B \-max-width \fIinteger\fP The maximum width in pixels of each square. Default is 150. .TP 8 .B \-max-height \fIinteger\fP The maximum height in pixels of each square. Default is 150. .TP 8 .B \-max-linewidth \fIinteger\fP The maximum width of the lines used to draw. Default is 25. .TP 8 .B \-min-linewidth \fIinteger\fP The minimum width of the lines used to draw. Default is 2. .TP 8 .B \-erase .TP 8 .B \-no-erase Whether to clear the screen after each screenful is drawn. Default is True (erase). .TP 8 .B \-erase-count \fIinteger\fP The number of screenfuls to draw before erasing. Default is 25. .TP 8 .B \-square .TP 8 .B \-not-square Whether to force the tiles to be square. Default is True (square). .TP 8 .B \-curves .TP 8 .B \-no-curves Whether to draw the arc based Truchet pattern. Default is True (curves). .TP 8 .B \-angles .TP 8 .B \-no-angles Whether or not to draw the line based Truchet pattern. Default is True (angles) .TP 8 .B \-scroll Use the scroll mode. Default is False. .TP 8 .B \-scroll-overlap The amount to scroll from one side to another. Default is 400. .TP 8 .B \-anim-delay The time to pause between each animation step. Default is 100. .TP 8 .B \-anim-step-size The amount of steps to skip between each animation step. Default is 3. .TP 8 .B \-fps Display the current frame rate and CPU load. .SH ENVIRONMENT .PP .TP 8 .B DISPLAY to get the default host and display number. .TP 8 .B XENVIRONMENT to get the name of a resource file that overrides the global resources stored in the RESOURCE_MANAGER property. .SH SEE ALSO .BR X (1), .BR xscreensaver (1) .SH COPYRIGHT Copyright \(co 1998 by Adrian Likins. Permission to use, copy, modify, and distribute this software and its documentation for any purpose and without fee is hereby granted, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation. .SH AUTHOR Adrian Likins, 1998. xscreensaver-5.36/hacks/twang.man000644 000767 000024 00000010027 12701612221 017036 0ustar00jwzstaff000000 000000 .TH XScreenSaver 1 "07-Feb-2002" "X Version 11" .SH NAME twang - pluck pieces of the screen .SH SYNOPSIS .B twang [\-display \fIhost:display.screen\fP] [\-foreground \fIcolor\fP] [\-background \fIcolor\fP] [\-window] [\-root] [\-mono] [\-install] [\-visual \fIvisual\fP] [\-shm] [\-no-shm] [\-delay \fIusecs\fP] [\-duration \fIsecs\fP] [\-border-color \fIcolor\fP] [\-border-width \fIinteger\fP] [\-event-chance \fIfraction\fP] [\-friction \fIfraction\fP] [\-springiness \fIfraction\fP] [\-tile-size \fIinteger\fP] [\-transference \fIfraction\fP] [\-fps] .SH DESCRIPTION \fITwang\fP divides the screen into equal-sized tiles, and then plucks them in various ways. Tiles are affected by their neighbors, so waves of motion flow through the grid. This manpage describes v1.3 of the program. .SH OPTIONS .I twang accepts the following options: .TP 8 .B \-window Draw on a newly-created window. This is the default. .TP 8 .B \-root Draw on the root window. .TP 8 .B \-mono If on a color display, pretend we're on a monochrome display. .TP 8 .B \-install Install a private colormap for the window. .TP 8 .B \-visual \fIvisual\fP Which visual to use. Legal values are the name of a visual class, or the id number (decimal or hex) of a specific visual. .TP 8 .B \-shm .TP 8 .B \-no-shm Use the shared memory extension (or not, respectively), if available. This may speed things up a bit, but probably won't make that much difference. If available, defaults to true, resource \fIuseSHM\fP. .TP 8 .B \-delay \fImicroseconds\fP The interframe delay, in microseconds. Defaults to 10000, resource \fIdelay\fP. .TP 8 .B \-duration \fIseconds\fP How long to run before loading a new image. Default 120 seconds. .TP 8 .B \-border-color \fIcolor\fP Color of the border surrounding each tile. Defaults to blue, resource \fIborderColor\fP. .TP 8 .B \-border-width \fIinteger\fP Width of the border surrounding each tile. Defaults to 3, resource \fIborderWidth\fP. .TP 8 .B \-event-chance \fIfraction\fP The chance, per iteration, for an event to occur (such as tweaking the orientation of a tile), in the range 0..1. Defaults to 0.01, resource \fIeventChance\fP. .TP 8 .B \-friction \fIfraction\fP How much friction there is in the system, in the range 0..1. This is the amount by which velocities are damped per iteration. Defaults to 0.05, resource \fIfriction\fP. .TP 8 .B \-springiness \fIfraction\fP How springy the tiles are, in the range 0..1. This is the fraction of an orientation that gets turned into a velocity towards the center (resting point). Defaults to 0.1, resource \fIspringiness\fP. .TP 8 .B \-tile-size \fIinteger\fP Size (width and height) of each tile, not including the outer edge of the border. Defaults to 120, resource \fItileSize\fP. .TP 8 .B \-transference \fIfraction\fP How much a tile's neighbors affect it, in the range 0..1. This is the fraction of an orientation of a neighbor that gets turned into a velocity in the same direction Defaults to 0.025, resource \fItransference\fP. .TP 8 .B \-fps Display the current frame rate and CPU load. .SH ENVIRONMENT .PP .TP 8 .B DISPLAY to get the default host and display number. .TP 8 .B XENVIRONMENT to get the name of a resource file that overrides the global resources stored in the RESOURCE_MANAGER property. .SH X RESOURCES There are resource equivalents for each option, noted above. .SH BUGS .I twang should have more interesting events. .TP 8 Ways of speeding it up need to be investigated. It's kinda sluggish, especially on hugeass displays. .SH SEE ALSO .BR xscreensaver (1) .SH COPYRIGHT Copyright \(co 2002 by Dan Bornstein. All rights reserved. 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. .SH AUTHOR Dan Bornstein . xscreensaver-5.36/hacks/vermiculate.man000644 000767 000024 00000002555 12701612221 020245 0ustar00jwzstaff000000 000000 .TH XScreenSaver 1 "" "X Version 11" .SH NAME vermiculate - to move in a worm-like manner. .SH SYNOPSIS .B vermiculate [\-display \fIhost:display.screen\fP] [\-visual \fIvisual\fP] [\-window] [\-root] [\-fps] .SH DESCRIPTION Draws squiggly worm-like paths. .SH OPTIONS .TP 8 .B \-visual \fIvisual\fP Specify which visual to use. Legal values are the name of a visual class, or the id number (decimal or hex) of a specific visual. .TP 8 .B \-window Draw on a newly-created window. This is the default. .TP 8 .B \-root Draw on the root window. .TP 8 .B \-fps Display the current frame rate and CPU load. .SH ENVIRONMENT .PP .TP 8 .B DISPLAY to get the default host and display number. .TP 8 .B XENVIRONMENT to get the name of a resource file that overrides the global resources stored in the RESOURCE_MANAGER property. .SH SEE ALSO .BR X (1), .BR xscreensaver (1) .SH COPYRIGHT Copyright \(co 2002 by Tyler Pierce. 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. .SH AUTHOR Tyler Pierce. xscreensaver-5.36/hacks/vidwhacker.man000644 000767 000024 00000005660 12701612221 020054 0ustar00jwzstaff000000 000000 .TH XScreenSaver 1 "17-Jun-99" "X Version 11" .SH NAME vidwhacker - grab images and apply random filters to them .SH SYNOPSIS .B vidwhacker [\-display \fIhost:display.screen\fP] [\-root] [\-verbose] [\-stdin] [\-stdout] [\-delay seconds] [-directory \fIdirectory\fP] [\-fps] .SH DESCRIPTION The \fIvidwhacker\fP program grabs an image from disk, or from the system's video input, then applies random image filters to it, and displays the result. The \fIvidwhacker\fP program does not terminate until killed. It depends heavily on the various PBM tools (e.g., .BR ppmrelief (1).) Selection of random image files is done by running the .BR xscreensaver-getimage-file (1) program. Capture of video frames (if requested) is done by running the .BR xscreensaver-getimage-video (1) program. The options of whether to do video, and which directory to search for images, are specified in the \fI~/.xscreensaver\fP file. .SH OPTIONS .I vidwhacker accepts the following options: .TP 8 .B \-root Draw on the root window. This is the default. .TP 8 .B \-verbose Print diagnostics. .TP 8 .B \-stdin Instead of grabbing an image from disk or video, read an image to manipulate from stdin. This image must be in .BR ppm (5) format. The program will still perform repeated random image transformations, but it will always use this one image as its starting point. .TP 8 .B \-delay \fIseconds\fP How long to sleep between images. Default 5 seconds (the actual elapsed time is significantly longer, due to processing time.) .TP 8 .B \-stdout Instead of displaying the image on a window or on the root, write the new image on stdout, and exit. .TP 8 .B \-directory \fIdirectory\fP Use this directory instead of the \fBimageDirectory\fP specified in the \fI~/.xscreensaver\fP file. .TP 8 .B \-fps Display the current frame rate and CPU load. .SH ENVIRONMENT .PP .TP 8 .B DISPLAY to get the default host and display number. .TP 8 .B XENVIRONMENT to get the name of a resource file that overrides the global resources stored in the RESOURCE_MANAGER property. .SH BUGS It's slow. .SH TO DO It might be interesting to rewrite this to use .BR gimp (1) plugins instead of the pbm tools. It probably wouldn't be any faster, but there would be a wider variety of effects available. .SH SEE ALSO .BR X (1), .BR xscreensaver (1), .BR xscreensaver-getimage-file (1), .BR xscreensaver-getimage-video (1), .BR xv (1), .BR ppmtogif (1), .BR cjpeg (1) .SH COPYRIGHT Copyright \(co 1998-2001 by 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. .SH AUTHOR Jamie Zawinski , 18-Jan-98. xscreensaver-5.36/hacks/wander.man000644 000767 000024 00000003725 12701612221 017205 0ustar00jwzstaff000000 000000 .TH XScreenSaver 1 "" "X Version 11" .SH NAME wander - colorful random-walk. .SH SYNOPSIS .B wander [\-display \fIhost:display.screen\fP] [\-visual \fIvisual\fP] [\-window] [\-root] [\-density \fInumber\fP] [\-reset \fInumber\fP] [\-length \fInumber\fP] [\-delay \fInumber\fP] [\-circles] [\-size \fInumber\fP] [\-advance \fInumber\fP] [\-fps] .SH DESCRIPTION Draws a colorful random-walk, in various forms. .SH OPTIONS .TP 8 .B \-visual \fIvisual\fP Specify which visual to use. Legal values are the name of a visual class, or the id number (decimal or hex) of a specific visual. .TP 8 .B \-window Draw on a newly-created window. This is the default. .TP 8 .B \-root Draw on the root window. .TP 8 .B \-density \fInumber\fP Density. 1 - 30. Default: 2. .TP 8 .B \-reset \fInumber\fP Number of frames before resetting. Default: 2500000. .TP 8 .B \-length \fInumber\fP Number of iterations. Default: 25000. .TP 8 .B \-delay \fInumber\fP Sustain. 0 - 60. Default: 1. .TP 8 .B \-circles | \-no-circles Whether to draw spots. .TP 8 .B \-size \fInumber\fP Size. 0 - 100. Default: 1. .TP 8 .B \-advance \fInumber\fP Color Contrast. 1 - 100. Default: 1. .TP 8 .B \-fps Display the current frame rate and CPU load. .SH ENVIRONMENT .PP .TP 8 .B DISPLAY to get the default host and display number. .TP 8 .B XENVIRONMENT to get the name of a resource file that overrides the global resources stored in the RESOURCE_MANAGER property. .SH SEE ALSO .BR X (1), .BR xscreensaver (1) .SH COPYRIGHT Copyright \(co 2002 by Rick Campbell. 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. .SH AUTHOR Rick Campbell. xscreensaver-5.36/hacks/webcollage.man000644 000767 000024 00000017707 12701612221 020036 0ustar00jwzstaff000000 000000 .de EX \"Begin example .ne 5 .if n .sp 1 .if t .sp .5 .nf .in +.5i .. .de EE .fi .in -.5i .if n .sp 1 .if t .sp .5 .. .TH XScreenSaver 1 "17-Jun-99" "X Version 11" .SH NAME webcollage - decorate the screen with random images from the web .SH SYNOPSIS .B webcollage [\-display \fIhost:display.screen\fP] [\-root] [\-window\-id \fIid\fP] [\-verbose] [\-timeout \fIsecs\fP] [\-delay \fIsecs\fP] [\-background \fIbg\fP] [\-no-output] [\-urls-only] [\-imagemap \fIfilename-base\fP] [\-size \fIWxH\fP] [\-opacity \fIratio\fP] [\-filter \fIcommand\fP] [\-filter2 \fIcommand\fP] [\-http\-proxy host[:port]] [\-dictionary \fIdictionary-file\fP] [\-driftnet [\fIcmd\fP]] [\-directory \fIdir\fP] [\-fps] .SH DESCRIPTION The \fIwebcollage\fP program pulls random image off of the World Wide Web and scatters them on the root window. One satisfied customer described it as "a nonstop pop culture brainbath." This program finds its images by doing random web searches, and extracting images from the returned pages. \fIwebcollage\fP is written in .BR perl (1) and requires Perl 5. It will be an order of magnitude faster if you also have the \fIwebcollage-helper\fP program installed (a GDK/JPEG image compositor), but \fIwebcollage\fP works without it as well. \fIwebcollage\fP can be used in conjunction with the .BR driftnet (1) program (the Unix equivalent of EtherPEG) to snoop images from traffic on your local subnet, instead of getting images from search engines. .SH OPTIONS .I webcollage accepts the following options: .TP 8 .B \-root Draw on the root window. This option is mandatory, if output is being produced: drawing to a window other than the root window is not yet supported. Images are placed on the root window by using one of the .BR xscreensaver-getimage (1), .BR chbg (1), .BR xv (1), .BR xli (1), or .BR xloadimage (1) programs (whichever is available.) .TP 8 .B \-window\-id \fIid\fP Draw to the indicated window instead; this only works if the .BR xscreensaver-getimage (1) program is installed. .TP 8 .B \-verbose \fRor\fP \-v Print diagnostics to stderr. Multiple \fI-v\fP switches increase the amount of output. \fI-v\fP will print out the URLs of the images, and where they were placed; \fI-vv\fP will print out any warnings, and all URLs being loaded; \fI-vvv\fP will print information on what URLs were rejected; and so on. .TP 8 .B \-timeout \fIseconds\fP How long to wait for a URL to complete before giving up on it and moving on to the next one. Default 30 seconds. .TP 8 .B \-delay \fIseconds\fP How long to sleep between images. Default 2 seconds. (Remember that this program probably spends a lot of time waiting for the network.) .TP 8 .B \-background \fIcolor-or-ppm\fP What to use for the background onto which images are pasted. This may be a color name, a hexadecimal RGB specification in the form '#rrggbb', or the name of a PPM file. .TP 8 .B \-size \fIWxH\fP Normally, the output image will be made to be the size of the screen (or target window.) This lets you specify the desired size. .TP 8 .B \-opacity \fIratio\fP How transparently to paste the images together, with 0.0 meaning "completely transparent" and 1.0 meaning "opaque." Default 0.85. A value of around 0.3 will produce an interestingly blurry image after a while. .TP 8 .B \-no-output If this option is specified, then no composite output image will be generated. This is only useful when used in conjunction with \fB\-verbose\fP. .TP 8 .B \-urls-only If this option is specified, then no composite output image will be generated: instead, a list of image URLs will be printed on stdout. .TP 8 .B \-imagemap \fIfilename-base\fP If this option is specified, then instead of writing an image to the root window, two files will be created: "\fIbase\fP.html" and "\fIbase\fP.jpg". The JPEG will be the collage; the HTML file will include that image, and an image-map making the sub-images be linked to the pages on which they were found (just like \fIhttps://www.jwz.org/webcollage/\fP.) .TP 8 .B \-filter \fIcommand\fP Filter all source images through this command. The command must take a PPM file on stdin, and write a new PPM file to stdout. One good choice for a filter would be: .EX webcollage -root -filter 'vidwhacker -stdin -stdout' .EE .TP 8 .B \-filter2 \fIcommand\fP Filter the \fIcomposite\fP image through this command. The \fI-filter\fP option applies to the sub-images; the \fI-filter2\fP applies to the final, full-screen image. .TP 8 .B \-http\-proxy \fIhost:port\fP If you must go through a proxy to connect to the web, you can specify it with this option, or with the \fB$http_proxy\fP or \fB$HTTP_PROXY\fP environment variables. .TP 8 .B \-dictionary \fIfile\fP Webcollage normally looks at the system's default spell-check dictionary to generate words to feed into the search engines. You can specify an alternate dictionary with this option. Note that by default, webcollage searches for images using several different methods, not all of which involve dictionary words, so using a "topical" dictionary file will not, in itself, be as effective as you might be hoping. .TP 8 .B \-driftnet \fI[ args ]\fP .BR driftnet (1) is a program that snoops your local ethernet for packets that look like they might be image files. It can be used in conjunction with \fIwebcollage\fP to generate a collage of what other people on your network are looking at, instead of a search-engine collage. If you have \fIdriftnet\fP installed on your $PATH, just use the \fI\-driftnet\fP option. You can also specify the location of the program like this: .EX -driftnet /path/to/driftnet .EE or, you can provide extra arguments like this: .EX -driftnet '/path/to/driftnet -extra -args' .EE Driftnet version 0.1.5 or later is required. Note that the \fIdriftnet\fP program requires root access, so you'll have to make \fIdriftnet\fP be setuid-root for this to work. Please exercise caution. .TP 8 .B \-directory \fIdir\fP Instead of searching the web for images, use the contents of the given directory. .TP 8 .B \-fps Display the current frame rate and CPU load (MacOS only). .SH ENVIRONMENT .PP .TP 8 .B DISPLAY to get the default host and display number. .TP 8 .B XENVIRONMENT to get the name of a resource file that overrides the global resources stored in the RESOURCE_MANAGER property. .TP 8 .B http_proxy\fR or \fPHTTP_PROXY to get the default HTTP proxy host and port. .SH FILES AND URLS .I /usr/dict/words, .I /usr/share/lib/dict/words,\fP or .I /usr/share/dict/words to find the random words to feed to certain search engines. \fIhttp://www.altavista.com/image/randomlink\fP, \fIhttp://random.yahoo.com/fast/ryl\fP, \fIhttp://www.livejournal.com/stats/latest-img.bml\fP, and \fIhttp://www.google.com/\fP to find random web pages. .SH BOOBIES The Internet being what it is, absolutely anything might show up in the collage including -- quite possibly -- pornography, or even nudity. .SH BUGS Animating GIFs are not supported: only the first frame will be used. .SH UPGRADES The latest version of webcollage can be found as a part of xscreensaver, at .B https://www.jwz.org/xscreensaver/, or on the WebCollage page at .B https://www.jwz.org/webcollage/. DriftNet: .B http://www.ex-parrot.com/~chris/driftnet/ .SH SEE ALSO .BR X (1), .BR xscreensaver (1), .BR xli (1), .BR xv (1), .BR xloadimage (1), .BR ppmmake (1), .BR giftopnm (1), .BR pnmpaste (1), .BR pnmscale (1), .BR djpeg (1), .BR cjpeg (1), .BR xdpyinfo (1), .BR perl (1), .BR vidwhacker (MANSUFFIX), .BR dadadodo (1), .BR driftnet (1) .BR EtherPEG , .BR EtherPeek .SH COPYRIGHT Copyright \(co 1998-2005 by 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. .SH AUTHOR Jamie Zawinski , 24-May-1998. xscreensaver-5.36/hacks/whirlwindwarp.man000644 000767 000024 00000004005 12701612221 020616 0ustar00jwzstaff000000 000000 .TH XScreenSaver 1 "13-aug-92" "X Version 11" .SH NAME whirlwindwarp - crazy moving stars .SH SYNOPSIS .B whirlwindwarp [\-display \fIhost:display.screen\fP] [\-foreground \fIcolor\fP] [\-background \fIcolor\fP] [\-window] [\-root] [\-mono] [\-install] [\-visual \fIvisual\fP] [\-points \fIinteger\fP] [\-tails \fIinteger\fP] [\-fps] .SH DESCRIPTION \fIwhirlwindwarp\fP plots stars moving according to various forcefields (simple 2D equations). .SH WARNING! This screensaver may be \fIdangerous\fP for your eyes. Please don't watch it for too long! .SH OPTIONS .I whirlwindwarp accepts the following options: .TP 8 .B \-window Draw on a newly-created window. This is the default. .TP 8 .B \-root Draw on the root window. .TP 8 .B \-mono If on a color display, pretend we're on a monochrome display. .TP 8 .B \-install Install a private colormap for the window. .TP 8 .B \-visual \fIvisual\fP Specify which visual to use. Legal values are the name of a visual class, or the id number (decimal or hex) of a specific visual. .TP 8 .B \-points \fIinteger\fP The number of stars plotted (default 400). .TP 8 .B \-tails \fIinteger\fP The length of the tail of each star (default 8). .TP 8 .B \-fps Display the current frame rate and CPU load. .SH ENVIRONMENT .PP .TP 8 .B DISPLAY to get the default host and display number. .TP 8 .B XENVIRONMENT to get the name of a resource file that overrides the global resources stored in the RESOURCE_MANAGER property. .SH SEE ALSO .BR X (1), .BR xscreensaver (1) .SH COPYRIGHT Copyright (c) Paul "Joey" Clark. 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. .SH AUTHOR Paul "Joey" Clark 10-Oct-00 xscreensaver-5.36/hacks/xflame.man000644 000767 000024 00000004661 12701612221 017201 0ustar00jwzstaff000000 000000 .TH XScreenSaver 1 "27-Feb-00" "X Version 11" .SH NAME xflame - draws animated flames .SH SYNOPSIS .B xflame [\-display \fIhost:display.screen\fP] [\-window] [\-root] [\-install] [\-visual \fIvisual\fP] [\-foreground \fIcolor\fP] [\-hspread \fIint\fP] [\-vspread \fIint\fP] [\-residual \fIint\fP] [\-variance \fIint\fP] [\-vartrend \fIint\fP] [\-bloom \| \-no\-bloom] [\-bitmap \fIxbm\-file\fP] [\-baseline \fIint\fP] [\-fps] .SH DESCRIPTION The \fIxflame\fP program draws animated flames across the bottom of the screen. The flames occasionally flare up. If a bitmap is specified, that image will float above the flames, burning. .SH OPTIONS .I xflame accepts the following options: .TP 8 .B \-window Draw on a newly-created window. This is the default. .TP 8 .B \-root Draw on the root window. .TP 8 .B \-install Install a private colormap for the window. .TP 8 .B \-visual \fIvisual\fP\fP Specify which visual to use. Legal values are the name of a visual class, or the id number (decimal or hex) of a specific visual. .TP 8 .B \-foreground \fIcolor\fP\fP or \fB\-fg\fP \fIcolor\fP\fP The color of the flames; default red. (The background color is always black.) .TP 8 .B \-bitmap \fIfilename\fP\fP Specifies the bitmap file to use (a monochrome XBM file.) The name "none" means not to use a bitmap at all. If unspecified, a built-in image will be used. .PP The other options are arcane. If someone would care to document them, that would be great. .TP 8 .B \-fps Display the current frame rate and CPU load. .SH ENVIRONMENT .PP .TP 8 .B DISPLAY to get the default host and display number. .TP 8 .B XENVIRONMENT to get the name of a resource file that overrides the global resources stored in the RESOURCE_MANAGER property. .SH SEE ALSO .BR X (1), .BR xscreensaver (1) .SH COPYRIGHT Copyright \(co 1996-1999 by Carsten Haitzler. 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. .SH AUTHOR Primarily written by Carsten Haitzler . Modified over the years by Rahul Jain , Daniel Zahn , and Jamie Zawinski . xscreensaver-5.36/hacks/xjack.man000644 000767 000024 00000004213 12701612221 017016 0ustar00jwzstaff000000 000000 .TH XScreenSaver 1 "18-sep-97" "X Version 11" .SH NAME xjack - all work and no play makes jack a dull boy .SH SYNOPSIS .B xjack [\-display \fIhost:display.screen\fP] [\-foreground \fIcolor\fP] [\-background \fIcolor\fP] [\-window] [\-root] [\-delay \fIusecs\fP] [\-fps] .SH DESCRIPTION All work and no play makes jack a dull boy. All work and no play makes jack a dull boy. All work and no play makes jack a dull boy. All work and no play makes jack a dull boy. All work and no play makes jack a dull boy. All work and no play makes jack a dull boy. .PP .RS 8 All work and no play makes jack a dull boy. All work and no play makes jack a dull boy. All work and no play makes jack a dull boy. All work and no play makes jack a dull boy. All work and no play makes jack a dull boy. All work and no play makes jack a dull boy. .PP All work and no play makes jack a dull boy. All work and no play makes jack a dull boy. All work and no play makes jack a dull boy. All work and no play makes jack a dull boy. All work and no play makes jack a dull boy. All work and no play makes jack a dull boy. All work and no play makes jack a dull boy. All work and no play makes jack a dull boy. .PP .RE All work and no play makes jack a dull boy. All work and no play makes jack a dull boy. All work and no play makes jack a dull boy. All work and no play makes jack a dull boy. All work and no play makes jack a dull boy. All work and no play makes jack a dull boy. All work and no play makes jack a dull boy. All work and no play makes jack a dull boy. .SH ENVIRONMENT .PP .TP 8 .B DISPLAY All work and no play makes jack a dull boy. .TP 8 .B XENVIRONMENT All work and no play makes jack a dull boy. All work and no play makes jack a dull boy. .SH SEE ALSO .BR X (1), .BR xscreensaver (1) .SH COPYRIGHT Copyright \(co 1997 by Jamie Zawinski. All work and no play makes jack a dull boy. All work and no play makes jack a dull boy. All work and no play makes jack a dull boy. All work and no play makes jack a dull boy. All work and no play makes jack a fnord dull boy. All work and no play makes jack a dull boy. .SH AUTHOR Jamie Zawinski , 15-Nov-97. xscreensaver-5.36/hacks/xlyap.man000644 000767 000024 00000014622 12701612221 017060 0ustar00jwzstaff000000 000000 .TH XLYAP 6X .SH NAME xlyap \- display an array of Lyapunov exponents graphically .SH SYNOPSIS .in +8n .ti -8n \fIxlyap\fR [-BLps][-W width][-H height][-o filename][-a \fIn\fR ] [-b \fIn\fR ] [-w \fIn\fR ] [-h \fIn\fR ] [-i xstart] [-M \fIn\fR ] [-R \fIp\fR ] [-S \fIn\fR ] [-D \fIn\fR ] [-F string][-f string][-r \fIn\fR ] [-O \fIn\fR ] [-C \fIn\fR ] [-c \fIn\fR ] [-m \fIn\fR ] [-x xpos] [-y ypos] .in -8n [\-fps] .SH DESCRIPTION \fIxlyap\fR generates and graphically displays an array of Lyapunov exponents for a variety of iterated periodically forced non-linear maps of the unit interval. .SH OPTIONS .TP 8 -random A good choice for use with xscreensaver: picks random parameters from a built-in list. .TP 8 -C \fIn\fP Specifies the minimum color index to be used for negative exponents .TP -D \fIn\fP Specifies the "dwell" or number of iterations over which to average in order to calculate the Lyapunov exponent. Default is 50. .TP -H \fIn\fP Specifies the height of the window. Default is 256. .TP -L Indicates use log(x) + log(y) rather than log(xy). .TP -M \fIr\fP Specifies the real value to compare exponent values to for indexing into a color wheel. The default value is 1.0. .TP -O \fIn\fP Specifies the minimum color index to be used for positive exponents .TP -R \fIp\fP Specifies pseudo-random forcing with probability \fIp\fP of using parameter value 'a'. .TP -S \fIn\fP Specifies the "settle" or number of iterations prior to the beginning of the calculation of the Lyapunov exponent. Default is 50. .TP -a \fIr\fP Specifies the real value to use as the minimum parameter value of the horizontal axis. Default is 2.0 for the logistic map. .TP -b \fIn\fP Specifies the real value to use as the minimum parameter value of the vertical axis. Default is 2.0 for the logistic map. .TP -c \fIn\fP Selects one of six different color wheels to use. The default color wheel is a rainbow palette. .TP -F \fI10101010\fP Specifies the "Function" forcing function to use. The example above would alternate between iterating the circle and logistic maps. An argument of "-F 2323" would alternate between left and right logistic maps. The default is to only use the single specified map (see the description of -m). .TP -f \fIabbabaab\fP Specifies the forcing function to use. The default is to alternate between the "a" parameter and the "b" parameter. .TP -h \fIr\fP Specifies the real value to be used as the range over which the vertical parameter values vary. The default is 1.0. .TP -i \fIr\fP Specifies the real value of the initial condition to use. Default is 0.65. .TP -m \fIn\fP Selects between available non-linear maps of the unit interval. A value of 0 specifies the logistic map. A value of 1, the circle map. A value of 2, the left-logistic. A value of 3, the right-logistic. A value of 4, the double-logistic. The default is 0, the logistic map. .TP -o \fIfilename\fP Specifies the output filename to be used. If the -o option is given, this file will automatically be written out at the completion of the drawing. If it is not specified, a default filename of lyap.out is used and only written if the 'f' or 'F' keys are pressed during a run. The format of the output file is PPM for color and PGM for monochrome. The parameters used to calculate the picture are included as comments at the beginning of the output file. .TP -p Switches color indices for negative and positive exponents. Generally, causes negative exponents to be displayed in more detail while darkening and narrowing the color range for positive exponents. This can be toggled during runtime by pressing the 'p' key. .TP -r \fIn\fP Specifies the maximum rgb value to be used. Default is 65000. .TP -s \fIn\fP Specifies the length of the color wheel spin. .TP -v Prints out the various values to be used and exits. .TP -w \fIr\fP Specifies the real value to be used as the range over which the horizontal parameter values vary. The default is 1.0. .sp 2 .SH NOTES .sp During display, pressing any mouse button allows you to select the area to be investigated with the mouse. The upper left hand corner of the desired area is the location of the cursor when the button is pressed. The lower right hand corner is specified by the cursor when the button is released. .sp 2 Use of the keys \fIbBeEfFkKjJmnrRsSwWxXqQ\fP indicates: .sp .ti 10 (<) Halve dwell value. .ti 10 (>) Double dwell value. .ti 10 ([) Halve settle value. .ti 10 (]) Double settle value. .ti 10 (B or b) Toggle button display on/off .ti 10 (E or e) Recalculate the indices into the color wheel using a different method .ti 10 (F or f) Save current screen to output file (not yet implemented) .ti 10 (H or h or ?) Display brief help message .ti 10 (i) Decrement the interval between stripes for the striped color map. .ti 10 (I) Increment the interval between stripes for the striped color map. .ti 10 (K) Decrease value exponents are compared against by 0.05. .ti 10 (J) Increase value exponents are compared against by 0.05. .ti 10 (M) Decrease value exponents are compared against by 0.005. .ti 10 (N) Increase value exponents are compared against by 0.005. .ti 10 (m) Increment the map index, changing the map to be iterated. .ti 10 (P or p) Toggle positive/negative exponent display. .ti 10 (r) Redraw the window using previously calculated exponents. .ti 10 (R) Redraw the window using the newly set dwell and/or settle values. .ti 10 (S) Spin the color wheel .ti 10 (s) Halve the length of the spin and spin the color wheel .ti 10 (u) Go up to the window just prior to the most recent zoom. .ti 10 (U) Go all the way up to the original window. .ti 10 (V or v) Display values of various parameters currently in use .ti 10 (W or w) Use next color map. .ti 10 (X or x) Clear window .ti 10 (Q or q) quit .sp 2 .SH AUTHOR .nf Ronald Joe Record The Santa Cruz Operation P.O. Box 1900 Santa Cruz, CA 95061 rr@sco.com .fi .sp 2 .SH ACKNOWLEDGEMENTS .PP The algorithm was taken from the September 1991 Scientific American article by A. K. Dewdney who gives credit to Mario Markus of the Max Planck Institute for its creation. Additional information and ideas were gleaned from the discussion on alt.fractals involving Stephen Hall, Ed Kubaitis, Dave Platt and Baback Moghaddam. Assistance with colormaps and spinning color wheels and X was gleaned from Hiram Clawson. Rubber banding code was adapted from an existing Mandelbrot program written by Stacey Campbell. Viciously hacked for xscreensaver by Jamie Zawinski, 20-Nov-97. xscreensaver-5.36/hacks/xmatrix.man000644 000767 000024 00000010700 12701612221 017410 0ustar00jwzstaff000000 000000 .de EX \"Begin example .ne 5 .if n .sp 1 .if t .sp .5 .nf .in +.5i .. .de EE .fi .in -.5i .if n .sp 1 .if t .sp .5 .. .TH XScreenSaver 1 "30-Oct-99" "X Version 11" .SH NAME xmatrix - simulates the computer displays from the movie .SH SYNOPSIS .B xmatrix [\-display \fIhost:display.screen\fP] [\-window] [\-root] [\-install] [\-visual \fIvisual\fP] [\-delay \fIusecs\fP] [\-density \fIpercentage\fP] [\-top | \-bottom | \-both] [\-small | \-large] [\-trace] [\-mode \fImode\fP] [\-phone \fInumber\fP] [\-fps] .SH DESCRIPTION The \fIxmatrix\fP program draws the 2D "digital rain" effect, as seen on the computer monitors in the Wachowski brothers' film, "The Matrix". Also see .BR glmatrix (MANSUFFIX) for a 3D rendering of the similar effect that appeared in the title sequence of the movie. .SH OPTIONS .I xmatrix accepts the following options: .TP 8 .B \-window Draw on a newly-created window. This is the default. .TP 8 .B \-root Draw on the root window. .TP 8 .B \-install Install a private colormap for the window. .TP 8 .B \-visual \fIvisual\fP\fP Specify which visual to use. Legal values are the name of a visual class, or the id number (decimal or hex) of a specific visual. .TP 8 .B \-delay \fIusecs\fP The delay between steps of the animation, in microseconds: default 10000. .TP 8 .B \-density \fIpercentage\fP The approximate percentage of the screen that should be filled with characters at any given time. Default 75%. When running in a window, typing \fB+\fP will increase the density and typing \fB-\fP will decrease it. Typing \fB0\fP will momentarily drain the screen. .TP 8 .B \-top\fP | \fB\-bottom\fP | \fB\-both If \fB\-top\fP is specified, the characters will only drop in from the top of the screen as sliding columns of characters. If \fB\-bottom\fP is specified, then instead of sliding columns, the characters will appear as columns that grow downwards and are erased from above. If \fB\-both\fP is specified, then a mixture of both styles will be used. The default is \fB\-both\fP. When running in a window, typing \fB[\fP will switch to top-mode, typing \fB\]\fP will switch to bottom-mode, and typing \fB\\\fP will switch to both-mode. .TP 8 .B \-small\fP | \fB\-large These options specify the sizes of the characters. The default is \fB\-large\fP. .TP 8 .B \-mode trace Start off with a representation of a phone number being traced. When the number is finally found, display The Matrix as usual. This is the default. .TP 8 .B \-phone\fP \fInumber\fP The phone number to trace, if \fB\-trace\fP is specified. .TP 8 .B \-mode crack Start off by shutting down the power grid. .TP 8 .B \-mode binary Instead of displaying Matrix glyphs, only display ones and zeros. .TP 8 .B \-mode hexadecimal Instead of displaying Matrix glyphs, display hexadecimal digits. .TP 8 .B \-mode dna Instead of displaying Matrix glyphs, display genetic code (guanine, adenine, thymine, and cytosine.) .TP 8 .B \-mode ascii Instead of displaying Matrix glyphs, display random ASCII characters. .TP 8 .B \-mode pipe Instead of displaying random characters, display the output of a subprocess, as ASCII. .TP 8 .B \-program \fIsh-command\fP The command to run to generate the text to display. This option may be any string acceptable to /bin/sh. The program will be run at the end of a pty or pipe, and any characters that it prints to \fIstdout\fP will be placed in the feeders for xmatrix. If the program exits, it will be launched again after xmatrix has processed all the text it produced. For example: .EX xmatrix -program 'echo Hello World' xmatrix -ascii -program 'ps -eo comm | rev' xmatrix -program 'od -txC -w6 /dev/random' xmatrix -program 'cat /dev/random' .EE .SH ENVIRONMENT .PP .TP 8 .B DISPLAY to get the default host and display number. .TP 8 .B XENVIRONMENT to get the name of a resource file that overrides the global resources stored in the RESOURCE_MANAGER property. .SH SEE ALSO .BR glmatrix (MANSUFFIX), .BR X (1), .BR xscreensaver (1) .SH COPYRIGHT Copyright \(co 1999-2003 by 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. .SH AUTHOR Jamie Zawinski , 25-Apr-99. xscreensaver-5.36/hacks/xrayswarm.man000644 000767 000024 00000002737 12701612221 017764 0ustar00jwzstaff000000 000000 .TH XScreenSaver 1 "" "X Version 11" .SH NAME xrayswarm - swarms with color trails. .SH SYNOPSIS .B xrayswarm [\-display \fIhost:display.screen\fP] [\-visual \fIvisual\fP] [\-window] [\-root] [\-delay \fInumber\fP] [\-fps] .SH DESCRIPTION Draws a few swarms of critters flying around the screen, with nicely faded color trails behind them. .SH OPTIONS .TP 8 .B \-visual \fIvisual\fP Specify which visual to use. Legal values are the name of a visual class, or the id number (decimal or hex) of a specific visual. .TP 8 .B \-window Draw on a newly-created window. This is the default. .TP 8 .B \-root Draw on the root window. .TP 8 .B \-delay \fInumber\fP Per-frame delay, in microseconds. Default: 0 (0.00 seconds.). .SH ENVIRONMENT .PP .TP 8 .B DISPLAY to get the default host and display number. .TP 8 .B XENVIRONMENT to get the name of a resource file that overrides the global resources stored in the RESOURCE_MANAGER property. .SH SEE ALSO .BR X (1), .BR xscreensaver (1) .SH COPYRIGHT Copyright \(co 2002 by Chris Leger. 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. .SH AUTHOR Chris Leger. xscreensaver-5.36/hacks/xspirograph.man000644 000767 000024 00000004552 12701612221 020272 0ustar00jwzstaff000000 000000 .TH XScreenSaver 1 "9-Dec-2001" "X Version 11" .SH NAME xspirograph - simulates the rotation of a disk inside a circular rim .SH SYNOPSIS .B xspirograph [\-display \fIhost:display.screen\fP] [\-window] [\-root] [\-install] [\-visual \fIvisual\fP] [\-delay \fIseconds\fP] [\-subdelay \fIuseconds\fP] [\-layers \fIinteger\fP] [\-alwaysfinish] [\-noalwaysfinish] [\-fps] .SH DESCRIPTION \fIxspirograph\fP draws patterns such as those made by a spirograph, that is, the curve traced by a point on a circular disk rotating on the inside of a hollow circular rim. .SH OPTIONS .I xspirograph accepts the following options: .TP 8 .B \-window Draw on a newly-created window. This is the default. .TP 8 .B \-root Draw on the root window. .TP 8 .B \-install Install a private colormap for the window. .TP 8 .B \-visual \fIvisual\fP\fP Specify which visual to use. Legal values are the name of a visual class, or the id number (decimal or hex) of a specific visual. .TP 8 .B \-delay \fIsecs\fP The delay between finishing one draw and starting the next. Default: 5 seconds. .TP 8 .B \-subdelay \fIusec\fP The time to delay between each hundred line draws. Use this if you want to see the pattern form. Default: 0. .TP 8 .B \-alwaysfinish\fP \fB\-noalwaysfinish\fP If you want each pattern to draw until it is done, specify the first. Otherwise, they will stop after a set number of iterations. Default: no. .TP 8 .B \-layers \fIinteger\fP Number of pairs of patterns to draw between each erase. .SH ENVIRONMENT .TP 8 .B DISPLAY to get the default host and display number. .TP 8 .B XENVIRONMENT to get the name of a resource file that overrides the global resources stored in the RESOURCE_MANAGER property. .SH SEE ALSO .BR X (1), .BR xscreensaver (1) .SH COPYRIGHT Copyright \(co 2000 by Rohit Singh 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. .P Modified by Matthew Strait Dec 2001. xscreensaver-5.36/hacks/zoom.man000644 000767 000024 00000006515 12701612221 016711 0ustar00jwzstaff000000 000000 .TH XScreenSaver 1 "20-Nov-2000" "X Version 11" .SH NAME zoom - wander around magnified desktop .SH SYNOPSIS .B zoom [\-display \fIhost:display.screen\fP] [\-foreground \fIcolor\fP] [\-background \fIcolor\fP] [\-window] [\-root] [\-mono] [\-install] [\-visual \fIvisual\fP] [\-delay \fIusecs\fP] [\-duration \fIsecs\fP] [\-lenses] [\-pixwidth \fIpixels\fP] [\-pixheight \fIpixels\fP] [\-pixspacex \fIpixels\fP] [\-pixspacey \fIpixels\fP] [\-lensoffsetx \fIpixels\fP] [\-lensoffsety \fIpixels\fP] [\-fps] .SH DESCRIPTION The \fIzoom\fP program takes an image, magnifies it, and scrolls around it, fatbits-style. The image that it manipulates will be grabbed from the portion of the screen underlying the window, or from the system's video input, or from a random file on disk, as indicated by the \fIgrabDesktopImages\fP, \fIgrabVideoFrames\fP, and \fIchooseRandomImages\fP options in the \fI~/.xscreensaver\fP file; see .BR xscreensaver-demo (1) for more details. .SH OPTIONS .I zoom accepts the following options: .TP 8 .B \-window Draw on a newly-created window. This is the default. .TP 8 .B \-root Draw on the root window. .TP 8 .B \-mono If on a color display, pretend we're on a monochrome display. .TP 8 .B \-install Install a private colormap for the window. .TP 8 .B \-visual \fIvisual\fP Specify which visual to use. Legal values are the name of a visual class, or the id number (decimal or hex) of a specific visual. .TP 8 .B \-delay \fImicroseconds\fP Slow it down. .TP 8 .B \-duration \fIseconds\fP How long to run before loading a new image. Default 120 seconds. .TP 8 .B \-lenses Instead of doing magnification we just copy an offset region from the original image. If lensoffsetx < pixwidth (and similarly for Y) then consecutive regions will overlap, giving the effect of looking through an array of lenses. .TP 8 .B \-pixwidth \fIpixels\fP Width of the magnified pixels. .TP 8 .B \-pixheight \fIpixels\fP Height of the magnified pixels. .TP 8 .B \-pixspacex \fIpixels\fP Amount of black space between magnified pixels (X direction). .TP 8 .B \-pixspacey \fIpixels\fP Amount of black space between magnified pixels (Y direction). .TP 8 .B \-lensoffsetx \fIpixels\fP Distance in X direction between consecutive copied regions (only effective when .I -lenses used). .TP 8 .B \-lensoffsety \fIpixels\fP Distance in Y direction between consecutive copied regions (only effective when .I -lenses used). .TP 8 .SH ENVIRONMENT .PP .TP 8 .B DISPLAY to get the default host and display number. .TP 8 .B XENVIRONMENT to get the name of a resource file that overrides the global resources stored in the RESOURCE_MANAGER property. .SH SEE ALSO .BR X (1), .BR xscreensaver (1), .BR xscreensaver\-demo (1), .BR xscreensaver\-getimage (1) .SH COPYRIGHT Copyright \(co 2000 by James Macnicol. 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. .SH AUTHOR James Macnicol , 20-Nov-2000. Much code was shamelessly stolen from the .B spotlight hack and a few others. xscreensaver-5.36/hacks/halftone.man000644 000767 000024 00000004631 12701612220 017521 0ustar00jwzstaff000000 000000 .TH XScreenSaver 1 "9-oct-2002" "X Version 11" .SH NAME halftone - simple halftone pattern of moving mass points .SH SYNOPSIS .B halftone [\-display \fIhost:display.screen\fP] [\-visual \fIvisual\fP] [\-window] [\-root] [\-count \fInumber\fP] [\-spacing \fInumber\fP] [\-sizefactor \fInumber\fP] [\-delay \fInumber\fP] [\-minmass \fInumber\fP] [\-maxmass \fInumber\fP] [\-minspeed \fInumber\fP] [\-maxspeed \fInumber\fP] [\-fps] .SH DESCRIPTION Draws the gravity force in each point on the screen seen through a halftone dot pattern. The gravity force is calculated from a set of moving mass points. View it from a distance for best effect. .SH OPTIONS .TP 8 .B \-visual \fIvisual\fP Specify which visual to use. Legal values are the name of a visual class, or the id number (decimal or hex) of a specific visual. .TP 8 .B \-window Draw on a newly-created window. This is the default. .TP 8 .B \-root Draw on the root window. .TP 8 .B \-count \fInumber\fP How many mass points to move around. Default: 10 .TP 8 .B \-spacing \fInumber\fP Distance between each halftone dot. Default: 14 .TP 8 .B \-sizefactor \fInumber\fP How big each halftone dot should be drawn compared to the spacing value. Default: 1.5 .TP 8 .B \-minmass \fInumber\fP The minimum mass of each mass point. Default: 0.001 .TP 8 .B \-maxmass \fInumber\fP The maximum mass of each mass point. Default: 0.02 .TP 8 .B \-minspeed \fInumber\fP The minimum speed of each mass point. Default: 0.001 .TP 8 .B \-maxspeed \fInumber\fP The maximum speed of each mass point. Default: 0.02 .B \-delay \fInumber\fP Per-frame delay, in microseconds. Default: 10000 .TP 8 .B \-fps Display the current frame rate and CPU load. .SH ENVIRONMENT .PP .TP 8 .B DISPLAY to get the default host and display number. .TP 8 .B XENVIRONMENT to get the name of a resource file that overrides the global resources stored in the RESOURCE_MANAGER property. .SH SEE ALSO .BR X (1), .BR xscreensaver (1) .SH COPYRIGHT Copyright \(co 2002 by Peter Jaric. 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. .SH AUTHOR Peter Jaric xscreensaver-5.36/hacks/eruption.man000644 000767 000024 00000004160 12701612220 017563 0ustar00jwzstaff000000 000000 .TH XScreenSaver 1 "" "X Version 11" .SH NAME Eruption \- eruption of pieces of hot volcanic rock .SH SYNOPSIS .B Eruption [\-display \fIhost:display.screen\fP] [\-visual \fIvisual\fP] [\-window] [\-root] [\-ncolors \fInumber\fP] [\-nParticles \fInumber\fP] [\-Heat \fInumber\fP] [\-Cooling \fInumber\fP] [\-Gravity \fInumber\fP] [\-delay \fInumber\fP] [\-cycles \fInumber\fP] [\-fps] .SH DESCRIPTION This hack creates an eruption of pieces of hot volcanic rock. Ported from the demo effects collection (http://demo-effects.sourceforge.net) .SH OPTIONS .TP 8 .B \-visual \fIvisual\fP Specify which visual to use. Legal values are the name of a visual class, or the id number (decimal or hex) of a specific visual. .TP 8 .B \-window Draw on a newly-created window. This is the default. .TP 8 .B \-root Draw on the root window. .TP 8 .B \-ncolors \fInumber\fP Number of Colors. Default: 256. .TP 8 .B \-particles \fInumber\fP Number of Particles. Default: 300. .TP 8 .B \-cooloff \fInumber\fP Eruption Cooloff. Default: 2. .TP 8 .B \-heat \fInumber\fP Heat of Eruption. Default: 256. .TP 8 .B \-gravity \fInumber\fP Gravity. Default: 1. .TP 8 .B \-delay \fInumber\fP Per-frame delay, in microseconds. Default: 5000 (0.01 seconds.). .TP 8 .B \-cycles \fInumber\fP Duration. 10 - 3000. Default: 80. .TP 8 .B \-fps Display the current frame rate and CPU load. .SH ENVIRONMENT .PP .TP 8 .B DISPLAY to get the default host and display number. .TP 8 .B XENVIRONMENT to get the name of a resource file that overrides the global resources stored in the RESOURCE_MANAGER property. .SH SEE ALSO .BR X (1), .BR xscreensaver (1) .SH COPYRIGHT Copyright \(co 2002-2003 by W.P. van Paassen. 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. .SH AUTHOR W.P. van Paassen xscreensaver-5.36/hacks/metaballs.man000644 000767 000024 00000004134 12701612220 017663 0ustar00jwzstaff000000 000000 .TH XScreenSaver 1 "" "X Version 11" .SH NAME MetaBalls - draws 2D metaballs .SH SYNOPSIS .B MetaBalls [\-display \fIhost:display.screen\fP] [\-visual \fIvisual\fP] [\-window] [\-root] [\-ncolors \fInumber\fP] [\-count \fInumber\fP] [\-delay \fInumber\fP] [\-cycles \fInumber\fP] [\-radius \fInumber\fP] [\-delta \fInumber\fP] [\-fps] .SH DESCRIPTION This hack draws 2D metaballs to the screen by calculating the sum of the colors of all metaballs covering a pixel. Ported from the demo effects collection (http://demo-effects.sourceforge.net) .SH OPTIONS .TP 8 .B \-visual \fIvisual\fP Specify which visual to use. Legal values are the name of a visual class, or the id number (decimal or hex) of a specific visual. .TP 8 .B \-window Draw on a newly-created window. This is the default. .TP 8 .B \-root Draw on the root window. .TP 8 .B \-ncolors \fInumber\fP Number of Colors. Default: 256. .TP 8 .B \-count \fInumber\fP Number of MetaBalls. 2 - 255. Default: 10. .TP 8 .B \-delay \fInumber\fP Per-frame delay, in microseconds. Default: 5000 (0.005 seconds.). .TP 8 .B \-cycles \fInumber\fP Duration. 100 - 3000. Default: 1000. .TP 8 .B \-radius \fInumber\fP MetaBall Radius. 2 - 100. Default: 100. .TP 8 .B \-delta \fInumber\fP MetaBall Movement. 1 - 20. Default: 3. .TP 8 .B \-fps Display the current frame rate and CPU load. .SH ENVIRONMENT .PP .TP 8 .B DISPLAY to get the default host and display number. .TP 8 .B XENVIRONMENT to get the name of a resource file that overrides the global resources stored in the RESOURCE_MANAGER property. .SH SEE ALSO .BR X (1), .BR xscreensaver (1) .SH COPYRIGHT Copyright \(co 2002-2003 by W.P. van Paassen. 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. .SH AUTHOR W.P. van Paassen xscreensaver-5.36/hacks/barcode.man000644 000767 000024 00000003421 12701612217 017322 0ustar00jwzstaff000000 000000 .TH XScreenSaver 1 "" "X Version 11" .SH NAME barcode - draws a random sequence of barcodes for the products you enjoy .SH SYNOPSIS .B barcode [\-display \fIhost:display.screen\fP] [\-visual \fIvisual\fP] [\-window] [\-root] [\-delay \fInumber\fP] [\-clock] [\-clock24] [\-fps] .SH DESCRIPTION This draws a random sequence of colorful barcodes scrolling across your screen. .SH OPTIONS .TP 8 .B \-visual \fIvisual\fP Specify which visual to use. Legal values are the name of a visual class, or the id number (decimal or hex) of a specific visual. .TP 8 .B \-window Draw on a newly-created window. This is the default. .TP 8 .B \-root Draw on the root window. .TP 8 .B \-delay \fInumber\fP Per-frame delay, in microseconds. Default: 10000 (0.02 seconds.). .TP 8 .B \-clock Instead of drawing a stream of barcodes, draw a barcode-based digital clock. .TP 8 .B \-clock24 Same as \fI\-clock\fP, but display 24-hour time instead of 12-hour time. .TP 8 .B \-fps Display the current frame rate and CPU load. .SH ENVIRONMENT .PP .TP 8 .B DISPLAY to get the default host and display number. .TP 8 .B XENVIRONMENT to get the name of a resource file that overrides the global resources stored in the RESOURCE_MANAGER property. .SH SEE ALSO .BR X (1), .BR xscreensaver (1) .SH COPYRIGHT Copyright \(co 2003 by Dan Bornstein. 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. .SH AUTHOR Dan Bornstein xscreensaver-5.36/hacks/piecewise.man000644 000767 000024 00000004326 12701612220 017677 0ustar00jwzstaff000000 000000 .TH XScreenSaver 1 "" "X Version 11" .SH NAME piecewise - lots of moving circles intersecting in interesting ways. .SH SYNOPSIS .B piecewise [\-display \fIhost:display.screen\fP] [\-visual \fIvisual\fP] [\-window] [\-root] [\-delay \fInumber\fP] [\-count \fInumber\fP] [\-ncolors \fInumber\fP] [\-colorspeed \fInumber\fP] [\-minradius \fInumber\fP] [\-maxradius \fInumber\fP] [\-no-db] [\-fps] .SH DESCRIPTION This draws a bunch of moving circles which switch from visibility to invisibility when they intersect. .SH OPTIONS .TP 8 .B \-visual \fIvisual\fP Specify which visual to use. Legal values are the name of a visual class, or the id number (decimal or hex) of a specific visual. .TP 8 .B \-window Draw on a newly-created window. This is the default. .TP 8 .B \-root Draw on the root window. .TP 8 .B \-delay \fInumber\fP Per-frame delay, in microseconds. Default: 5000 (0.01 seconds.). .TP 8 .B \-count \fInumber\fP Number of circles. Default: 32. .TP 8 .B \-ncolors \fInumber\fP Number of colors, only one of which is used at a time. Default: 256. .TP 8 .B \-colorspeed \fInumber\fP How fast the color changes (0 - 100). Default: 10. .TP 8 .B \-minradius \fInumber\fP Minimum circle radius (as a proportion of screen height). Default: 0.05. .TP 8 .B \-maxradius \fInumber\fP Maximum circle radius (as a proportion of screen height). Default: 0.2. .TP 8 .B \-db | \-no-db Whether to double buffer. .TP 8 .B \-fps Display the current frame rate and CPU load. .SH ENVIRONMENT .PP .TP 8 .B DISPLAY to get the default host and display number. .TP 8 .B XENVIRONMENT to get the name of a resource file that overrides the global resources stored in the RESOURCE_MANAGER property. .SH SEE ALSO .BR X (1), .BR xscreensaver (1) .SH COPYRIGHT Copyright \(co 2003 by Geoffrey Irving. 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. .SH AUTHOR Geoffrey Irving. xscreensaver-5.36/hacks/cloudlife.man000644 000767 000024 00000005272 12701612220 017671 0ustar00jwzstaff000000 000000 .TH XScreenSaver 6 "20-May-2003" "X Version 11" .SH NAME cloudlife - a cellular automaton based on Conway's Life .SH SYNOPSIS .B cloudlife [\-display \fIhost:display.screen\fP] [\-foreground \fIcolor\fP] [\-background \fIcolor\fP] [\-window] [\-root] [\-mono] [\-install] [\-visual \fIvisual\fP] [\-ncolors \fIinteger\fP] [\-cycle-delay \fImicroseconds\fP] [\-cycle-colors \fIinteger\fP][\-cell-size \fIinteger\fP] [\-initial-density \fIinteger\fP] [\-max-age \fIinteger\fP] [\-fps] .SH DESCRIPTION The \fIcloudlife\fP program draws a cellular automaton based on Conway's Life, except that cells have a maximum age, and only one pixel per cell is drawn every tick. .SH OPTIONS .I cloudlife accepts the following options: .TP 8 .B \-window Draw on a newly-created window. This is the default. .TP 8 .B \-root Draw on the root window. .TP 8 .B \-mono If on a color display, pretend we're on a monochrome display. .TP 8 .B \-install Install a private colormap for the window. .TP 8 .B \-visual \fIvisual\fP Specify which visual to use. Legal values are the name of a visual class, or the id number (decimal or hex) of a specific visual. .TP 8 .B \-cycle-delay \fIinteger\fP Time in microseconds to sleep between ticks. Default 25000. .TP 8 .B \-cycle-colors \fIinteger\fP How many ticks should elapse between cycling colors. 0 to disable color cycling. Default 2. .TP 8 .B \-ncolors \fIinteger\fP How many colors should be used (if possible). Default 64. The colors are chosen randomly. .TP 8 .B \-cell-size \fIinteger\fP Size of each cell, in powers of 2. Default 3 (8-pixel cells). .TP 8 .B \-initial-density \fIinteger\fP Percentage of cells that are alive at start and when the field is repopulated. Default 30. .TP 8 .B \-max-age \fIinteger\fP Maximum age for a cell. Default 64. .TP 8 .B \-fps Display the current frame rate and CPU load. .SH ENVIRONMENT .PP .TP 8 .B DISPLAY to get the default host and display number. .TP 8 .B XENVIRONMENT to get the name of a resource file that overrides the global resources stored in the RESOURCE_MANAGER property. .SH SEE ALSO .BR X (1), .BR xscreensaver (1), .BR xlock (1) .SH COPYRIGHT Copyright \(co 2003 by Don Marti. Based on examples from the hacks directory of xscreensaver, Copyright (c) 1997, 1998, 2002 Jamie Zawinski This man page based on the man page of sierpinski, Copyright \(co 1996 by Desmond Daignault. Permission to use, copy, modify, and distribute this software and its documentation for any purpose and without fee is hereby granted, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation. .SH AUTHOR Don Marti 20 May 2003. xscreensaver-5.36/hacks/ljlatest.man000644 000767 000024 00000003322 12701612220 017537 0ustar00jwzstaff000000 000000 .de EX \"Begin example .ne 5 .if n .sp 1 .if t .sp .5 .nf .in +.5i .. .de EE .fi .in -.5i .if n .sp 1 .if t .sp .5 .. .TH XScreenSaver 1 "20-Mar-2005" "X Version 11" .SH NAME ljlatest - prints the most recent public posts on livejournal.com. .SH SYNOPSIS .B ljlatest [\--verbose] [\--columns \fIN\fP] .SH DESCRIPTION The \fIljlatest\fP script reads the most recent public posts made to livejournal.com, and prints them on stdout, after doing a rudimentary conversion of HTML to plain text. This script is just a wrapper around .EX xscreensaver-text \\ --url http://www.livejournal.com/stats/latest-rss.bml .EE As of XScreenSaver 4.21, you can just use use above URL in the "Text URL" field on the "Advanced" tab in .BR xscreensaver-demo (1). .SH BUGS This program makes it seem like morons have invaded your screen saver. The output is always ISO-8859-1, regardless of locale. .SH SEE ALSO .I http://www.livejournal.com/, .BR xscreensaver (1), .BR xscreensaver-text (1), .BR fortune (1), .BR phosphor (MANSUFFIX), .BR apple2 (MANSUFFIX), .BR starwars (MANSUFFIX), .BR fontglide (MANSUFFIX), .BR dadadodo (1), .BR webcollage (MANSUFFIX), .BR driftnet (1) .BR EtherPEG , .BR EtherPeek .SH COPYRIGHT Copyright \(co 2003, 2005 by 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. .SH AUTHOR Jamie Zawinski , 30-Aug-2003. xscreensaver-5.36/hacks/fontglide.man000644 000767 000024 00000007554 12701612220 017703 0ustar00jwzstaff000000 000000 .TH XScreenSaver 1 "30-Oct-99" "X Version 11" .SH NAME fontglide - characters float onto the screen to form words .SH SYNOPSIS .B fontglide [\-display \fIhost:display.screen\fP] [\-window] [\-root] [\-install] [\-visual \fIvisual\fP] [\-delay \fIusecs\fP] [\-scroll\fP] [\-page\fP] [\-random\fP] [\-speed \fIfloat\fP] [\-linger \fIfloat\fP] [\-program \fIsh-command\fP] [\-font \fIfont-name\fP] [\-bw \fIint\fP] [\-trails] [\-db] [\-debug] [\-fps] .SH DESCRIPTION The \fIfontglide\fP program reads text from a subprocess and puts it on the screen using large characters that glide in from the edges, assemble, then disperse. Alternately, it can simply scroll whole sentences from right to left. .SH OPTIONS .I fontglide accepts the following options: .TP 8 .B \-window Draw on a newly-created window. This is the default. .TP 8 .B \-root Draw on the root window. .TP 8 .B \-install Install a private colormap for the window. .TP 8 .B \-visual \fIvisual\fP\fP Specify which visual to use. Legal values are the name of a visual class, or the id number (decimal or hex) of a specific visual. .TP 8 .B \-delay \fIusecs\fP The delay between steps of the animation, in microseconds: default 10000. .TP 8 .B \-page With this option, a page full of text will glide in, and disperse. .TP 8 .B \-scroll With this option, sentences will scroll by from right to left. .TP 8 .B \-random The default is to pick randomly between \fI\-page\fP and \fI\-scroll\fP. .TP 8 .B \-speed \fIfloat\fP How fast to animate; 2 means twice as fast, 0.5 means half as fast. Default 1.0. .TP 8 .B \-linger \fIfloat\fP How long to leave the assembled text on the screen in \fI\-page\fP mode; 2 means twice as long, 0.5 means half as long. Default 1.0. (The more words there are on the screen, the longer it lingers.) .TP 8 .B \-program \fIsh-command\fP The command to run to generate the text to display. This option may be any string acceptable to /bin/sh. The program will be run at the end of a pipe, and any words that it prints to \fIstdout\fP will end up on the window. (Whitespace and line breaks are ignored.) If the program exits, it will be launched again after we have processed all the text it produced. Default: .BR xscreensaver-text (1). .TP 8 .B \-font\fP \fIstring\fP The base font pattern to use when loading fonts. The default is to search for any Latin1 scalable proportional fonts on the system. Once a base font is selected, it will be loaded in a random size. .TP 8 .B \-bw \fIint\fP How thick an outline to draw around the characters. Default 2 pixels. .TP 8 .B \-trails\fP Leave "vapor trails" behind the moving text. Default off. .TP 8 .B \-no-db\fP Turn off double-buffering. It may be faster, but will flicker. .TP 8 .B \-debug\fP Draw some boxes showing character metrics, and print the name of the current font to stderr. .TP 8 .B \-fps Display the current frame rate and CPU load. .SH ENVIRONMENT .PP .TP 8 .B DISPLAY to get the default host and display number. .TP 8 .B XENVIRONMENT to get the name of a resource file that overrides the global resources stored in the RESOURCE_MANAGER property. .SH SEE ALSO .BR xscreensaver (1), .BR xscreensaver-text (1), .BR fortune (1), .BR phosphor (MANSUFFIX), .BR apple2 (MANSUFFIX), .BR starwars (MANSUFFIX), .BR ljlatest (MANSUFFIX), .BR dadadodo (1), .BR webcollage (MANSUFFIX), .BR driftnet (1) .BR EtherPEG , .BR EtherPeek .SH COPYRIGHT Copyright \(co 2003 by 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. .SH AUTHOR Jamie Zawinski , 15-Sep-2003. xscreensaver-5.36/hacks/apple2.man000644 000767 000024 00000014334 12701612217 017113 0ustar00jwzstaff000000 000000 .de EX \"Begin example .ne 5 .if n .sp 1 .if t .sp .5 .nf .in +.5i .. .de EE .fi .in -.5i .if n .sp 1 .if t .sp .5 .. .TH XScreenSaver 1 "5-May-2004" "X Version 11" .SH NAME apple2 - Apple ][ display emulator .SH SYNOPSIS .B apple2 [\-display \fIhost:display.screen\fP] [\-foreground \fIcolor\fP] [\-background \fIcolor\fP] [\-window] [\-root] [\-mono] [\-install] [\-visual \fIvisual\fP] [\-program \fIcommand to run\fP] [\-basic] [\-slideshow] [\-text] [\-meta] [\-esc] [\-bs] [\-del] [\-fast] [\-fps] .SH DESCRIPTION The .I apple2 program simulates an original Apple ][ Plus computer in all its 1979 glory. It also reproduces the appearance of display on a color television set of the period. .PP There are 3 modes: basic, slideshow, and text. Normally it chooses a mode randomly, but you can override with the \fI\-basic\fP, \fI\-slideshow\fP, or \fI\-text\fP options. In basic mode a simulated user types in a Basic program and runs it. In slideshow mode it chooses a number of images from the image source you configured into XScreenSaver and displays them within the limitations of the Apple ][ display hardware. With only 6 available colors, you can only make out the general shape of the pictures. In text mode it displays the output of a command or the contents of a file or URL (via the default .BR xscreensaver-text (1) program, which can be overridden with \fI\-program\fP). In text mode, it is also a fully functional (if anachronistic) vt100 terminal emulator. .SH OPTIONS .I apple2 accepts the following options: .TP 8 .B \-window Draw on a newly-created window. This is the default. .TP 8 .B \-root Draw on the root window. .TP 8 .B \-mono If on a color display, pretend we're on a monochrome display. .TP 8 .B \-install Install a private colormap for the window. .TP 8 .B \-visual \fIvisual\fP Specify which visual to use. Legal values are the name of a visual class, or the id number (decimal or hex) of a specific visual. .TP 8 .B \-basic Choose basic mode .TP 8 .B \-slideshow Choose slideshow mode .TP 8 .B \-text Choose text mode .TP 8 .B \-program \fIsh-command\fP In text mode, the command to run to generate the text to display. This option may be any string acceptable to /bin/sh. The program will be run at the end of a pipe, and any characters that it prints to \fIstdout\fP will be printed on the Apple ][ display. If the program exits, it will be launched again after 3 seconds. Default: .BR xscreensaver-text (1). In text mode, \fIapple2\fP emulates a vt100 terminal running on a 40x24 uppercase-only screen. For example: .EX apple2 -text \\ -program 'cat /usr/src/linux*/README | fold -sw40' apple2 -text -program 'ping apple.com' apple2 -text -program 'ps -e' apple2 -text -program 'od -txCz -w7 /dev/urandom' apple2 -text -program 'cat /dev/random' apple2 -text -fast -program 'xemacs -nw -q -f life' apple2 -text -fast \\ -program 'xemacs -nw -q --eval "(hanoi 5)"' .EE You can also use \fIapple2\fP as an extremely lo-fi replacement for the .BR xterm (1) and .BR gnome-terminal (1) terminal emulators: .EX apple2 -text -fast -program tcsh .EE .TP 8 .B \-pty In \fI\-text\fP mode, launch the sub-program under a pty so that it can address the screen directly. This is the default. .TP 8 .B \-pipe In \fI\-text\fP mode, launch the sub-program at the end of a pipe: do not let it address the screen directly. .TP 8 .B \-esc When the user types a key with the Alt or Meta keys held down, send an ESC character first. This is the default. .TP 8 .B \-meta When Meta or Alt are held down, set the high bit on the character instead. .TP 8 .B \-del Swap Backspace and Delete. This is the default. .TP 8 .B \-bs Do not swap Backspace and Delete. .TP 8 .B \-fast Normally, characters are printed at the speed of an original Apple][ computer; however, when using this program as a terminal emulator, the novelty of those 300 baud characters might wear off. You can use the \fI\-fast\fP option to speed things up a bit. .TP 8 .B \-fps Display the current frame rate and CPU load. .SH TERMINAL EMULATION By default, \fIapple2\fP allocates a pseudo-tty for the \fI\-text\fP-mode sub-process to run under. This has the desirable side effect that the program will be able to use .BR ioctl (2) to fetch information about terminal parameters and window size, which many programs (such as .BR top (1)) need to run properly. \fIapple2\fP will also set the environment variable \fITERM\fP to \fIvt100\fP in the child process. Any characters typed on the apple2 window will be passed along to the sub-process. (Note that this only works when running in "window" mode, not when running in \fI\-root\fP mode under xscreensaver.) .SH ENVIRONMENT .PP .TP 8 .B DISPLAY to get the default host and display number. .TP 8 .B XENVIRONMENT to get the name of a resource file that overrides the global resources stored in the RESOURCE_MANAGER property. .TP 8 .B TERM to inform the sub-process of the type of terminal emulation. .SH X RESOURCES Notable X resources supported include the following which correspond to standard TV controls: .BR analogTVTint , .BR analogTVColor , .BR analogTVBrightness , and .BR analogTVContrast which correspond to standard TV controls. They range from 0 to 100,except for tint which is an angle between -180 and +180. .SH TRADEMARKS Apple ][ and Applesoft are trademarks of Apple Computer. .SH SEE ALSO .BR xscreensaver (1), .BR bsod (MANSUFFIX), .BR xscreensaver-text (1), .BR fortune (1), .BR phosphor (MANSUFFIX), .BR starwars (MANSUFFIX), .BR ljlatest (MANSUFFIX), .BR dadadodo (1), .BR webcollage (MANSUFFIX), .BR driftnet (1) .BR EtherPEG , .BR EtherPeek , .BR console_codes (4). .SH COPYRIGHT Copyright \(co 2002-2003 by Trevor Blackwell. 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. .SH AUTHOR Television and Apple ][ emulation by Trevor Blackwell . Slideshow and text mode by Jamie Zawinski . Pty and vt100 emulation by Fredrik Tolf . xscreensaver-5.36/hacks/xanalogtv.man000644 000767 000024 00000005303 12701612221 017722 0ustar00jwzstaff000000 000000 .TH XScreenSaver 1 "10-Oct-03" "X Version 11" .SH NAME xanalogtv - Simulate reception on an old analog TV set .SH SYNOPSIS .B xanalogtv [\-display \fIhost:display.screen\fP] [\-window] [\-root] [\-install] [\-visual \fIvisual\fP] [\-cycle] [\-no-cycle] [\-fps] .SH DESCRIPTION .I xanalogtv shows a simulation of an old TV set showing test patterns and any other images you have provided. It reproduces a wide range of TV reception bummage: snow, bloom, ghosting, and loss of vertical and horizontal sync. It also simulates the TV warming up. It will cycle through 12 channels, some with images you give it, and some with color bars or nothing but static. .PP The images that it uses will be grabbed from the portion of the screen underlying the window, or from the system's video input, or from a random file on disk, as indicated by the \fIgrabDesktopImages\fP, \fIgrabVideoFrames\fP, and \fIchooseRandomImages\fP options in the \fI~/.xscreensaver\fP file; see .BR xscreensaver-demo (1) for more details. It looks best with a video input or your digital photo collection. .PP .SH OPTIONS .I xanalogtv accepts the following options: .TP 8 .B \-window Draw on a newly-created window. This is the default. .TP 8 .B \-root Draw on the root window. .TP 8 .B \-install Install a private colormap for the window. .TP 8 .B \-visual \fIvisual\fP Specify which visual to use. Legal values are the name of a visual class, or the id number (decimal or hex) of a specific visual. .TP 8 .B \-fps Display the current frame rate and CPU load. .SH ENVIRONMENT .PP .TP 8 .B DISPLAY to get the default host and display number. .TP 8 .B XENVIRONMENT to get the name of a resource file that overrides the global resources stored in the RESOURCE_MANAGER property. .SH X RESOURCES Notable X resources supported include the following which correspond to standard TV controls: .BR analogTVTint , .BR analogTVColor , .BR analogTVBrightness , and .BR analogTVContrast . They range from 0 to 100, except for tint which is an angle between -180 and +180. .SH SEE ALSO .BR X (1), .BR xteevee (MANSUFFIX), .BR apple2 (MANSUFFIX), .BR bsod (MANSUFFIX), .BR xscreensaver (1), .BR xscreensaver\-demo (1), .BR xscreensaver\-getimage (1) .SH COPYRIGHT Copyright \(co 2003 by Trevor Blackwell. 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. .SH AUTHOR Trevor Blackwell xscreensaver-5.36/hacks/pong.man000644 000767 000024 00000005031 12713511756 016676 0ustar00jwzstaff000000 000000 .TH XScreenSaver 1 "5-May-2004" "X Version 11" .SH NAME pong - Pong Home Video Game Emulator .SH SYNOPSIS .B pong [\-display \fIhost:display.screen\fP] [\-foreground \fIcolor\fP] [\-background \fIcolor\fP] [\-window] [\-root] [\-mono] [\-install] [\-visual \fIvisual\fP] [\-clock \fIfloat\fP] [\-noise] [\-fps] .SH DESCRIPTION The .I pong program simulates an ancient Pong home video game, as well as various artifacts from displaying it on a color TV set. .SH OPTIONS .I pong accepts the following options: .TP 8 .B \-window Draw on a newly-created window. This is the default. .TP 8 .B \-root Draw on the root window. .TP 8 .B \-mono If on a color display, pretend we're on a monochrome display. .TP 8 .B \-install Install a private colormap for the window. .TP 8 .B \-visual \fIvisual\fP Specify which visual to use. Legal values are the name of a visual class, or the id number (decimal or hex) of a specific visual. .TP 8 .B \-clock The score of the game will be the current time. .TP 8 .B \-noise \fIfloat\fP How noisy the video signal should be (between 0.0 and 4.0 or so). .TP 8 .B \-fps Display the current frame rate and CPU load. .TP 8 .B (\-p1 | \-p2) \fImode\fP Set a player to either \fIai\fP, \fImouse\fP, \fItablet\fP, \fIkbleft\fP (for W and S), or \fIkbright\fP (or just \fIkb\fP, for arrow keys). .SH ENVIRONMENT .PP .TP 8 .B DISPLAY to get the default host and display number. .TP 8 .B XENVIRONMENT to get the name of a resource file that overrides the global resources stored in the RESOURCE_MANAGER property. .SH X RESOURCES Notable X resources supported include the following which correspond to standard TV controls: .BR analogTVTint , .BR analogTVColor , .BR analogTVBrightness , and .BR analogTVContrast . They range from 0 to 100, except for tint which is an angle between -180 and +180. .SH TRADEMARKS Pong may be a trademark. .SH SEE ALSO .BR X (1), .BR xscreensaver (1), .BR xanalogtv (MANSUFFIX), .BR apple2 (MANSUFFIX) .SH COPYRIGHT 2003 by Jeremy English. 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. .SH AUTHOR Original Pong program by Jeremy English . Scoring and television emulation by Trevor Blackwell . xscreensaver-5.36/hacks/wormhole.man000644 000767 000024 00000003752 12701612221 017561 0ustar00jwzstaff000000 000000 .TH XScreenSaver 1 "11-feb-04" "X Version 11" .SH NAME wormhole - animation of flying through a wormhole .SH SYNOPSIS .B wormhole [\-display \fIhost:display.screen\fP] [\-window] [\-visual \fIvisual\fP] [\-root] [\-stars \fIn\fP] [\-delay \fIusecs\fP] [\-zspeed \fIn\fP] [\-fps] .SH DESCRIPTION The \fIwormhole\fP program shows an animation of flying through a tunnel surrounded by streaks of light. .SH OPTIONS .I wormhole accepts the following options: .TP 8 .B \-window Draw on a newly-created window. This is the default. .TP 8 .B \-root Draw on the root window. .TP 8 .B \-mono Make all the rocks the same color. .TP 8 .B \-install Install a private colormap for the window. .TP 8 .B \-visual \fIvisual\fP Specify which visual to use. Legal values are the name of a visual class, or the id number (decimal or hex) of a specific visual. .TP 8 .B \-stars \fIinteger\fP Number of stars to create every animation loop. .TP 8 .B \-zspeed \fIinteger\fP Speed light streaks fly by. .TP 8 .B \-delay \fImicroseconds\fP Number of microseconds to delay between each frame. Default 10000, meaning about 1/100th second. Compare and contrast with \fI\-zspeed\fP, above. .TP 8 .B \-fps Display the current frame rate and CPU load. .SH ENVIRONMENT .PP .TP 8 .B DISPLAY to get the default host and display number. .TP 8 .B XENVIRONMENT to get the name of a resource file that overrides the global resources stored in the RESOURCE_MANAGER property. .SH SEE ALSO .BR X (1), .BR xscreensaver (1) .SH COPYRIGHT Copyright \(co 2004 by Jon Rafkind. 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. .SH AUTHOR Jon Rafkind xscreensaver-5.36/hacks/pacman.man000644 000767 000024 00000003351 12701612220 017156 0ustar00jwzstaff000000 000000 .TH XScreenSaver 1 "12-Feb-2004" "X Version 11" .SH NAME pacman - simulates a game of Pac-Man on a randomly-created level. .SH SYNOPSIS .B pacman [\-display \fIhost:display.screen\fP] [\-window] [\-root] [\-mono] [\-install] [\-visual \fIvisual\fP] [\-ncolors \fIinteger\fP] [\-delay \fImicroseconds\fP] [\-size \fIpixels\fP] [\-fps] .SH DESCRIPTION Simulates a game of Pac-Man on a randomly-created level. .SH OPTIONS .I pacman accepts the following options: .TP 8 .B \-window Draw on a newly-created window. This is the default. .TP 8 .B \-root Draw on the root window. .TP 8 .B \-mono If on a color display, pretend we're on a monochrome display. .TP 8 .B \-install Install a private colormap for the window. .TP 8 .B \-visual \fIvisual\fP Specify which visual to use. Legal values are the name of a visual class, or the id number (decimal or hex) of a specific visual. .TP 8 .B \-ncolors \fIinteger\fP How many colors should be used (if possible). Default 6. .TP 8 .B \-size \fIinteger\fP How big to make Pac-Man and the ghosts. 0 means "default." .TP 8 .B \-fps Display the current frame rate and CPU load. .SH ENVIRONMENT .PP .TP 8 .B DISPLAY to get the default host and display number. .TP 8 .B XENVIRONMENT to get the name of a resource file that overrides the global resources stored in the RESOURCE_MANAGER property. .SH SEE ALSO .BR X (1), .BR xscreensaver (1). .SH COPYRIGHT Copyright \(co 2000 Edwin de Jong. Permission to use, copy, modify, and distribute this software and its documentation for any purpose and without fee is hereby granted, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation. .SH AUTHOR Edwin de Jong . xscreensaver-5.36/hacks/fuzzyflakes.man000644 000767 000024 00000006223 12701612220 020275 0ustar00jwzstaff000000 000000 .TH XScreenSaver 1 "12-May-04" "X Version 11" .SH NAME fuzzyflakes - falling snowflakes/flower shapes .SH SYNOPSIS .B fuzzyflakes [\-display \fIhost:display.screen\fP] [\-foreground \fIcolor\fP] [\-background \fIcolor\fP] [\-window] [\-root] [\-mono] [\-install] [\-visual \fIvisual\fP] [\-delay \fIusecs\fP] [\-speed \fIint\fP] [\-arms \fIint\fP] [\-thickness \fIint\fP] [\-bthickness \fIint\fP] [\-radius \fIint\fP] [\-layers \fIint\fP] [\-density \fIint\fP] [\-no-db] (\-color \fIstring\fP) (\-random-colors) [\-fps] .SH DESCRIPTION The .I fuzzyflakes program draws falling pastel colored snowflake/flower shapes. Inspired by the credits of the anime "Azumanga Daioh". .SH OPTIONS .I fuzzyflakes accepts the following options: .TP 8 .B \-window Draw on a newly-created window. This is the default. .TP 8 .B \-root Draw on the root window. .TP 8 .B \-mono If on a color display, pretend we're on a monochrome display. .TP 8 .B \-install Install a private colormap for the window. .TP 8 .B \-visual \fIvisual\fP Specify which visual to use. Legal values are the name of a visual class, or the id number (decimal or hex) of a specific visual. .TP 8 .B \-delay \fIusecs\fP The delay between steps of the animation, in microseconds. Default: 250000. .TP 8 .B \-speed \fIint\fP How fast, 1-50. Default 10. .TP 8 .B \-arms \fIint\fP How many arms on the flakes; default 5. .TP 8 .B \-thickness \fIint\fP How thick to make the lines; default 10 pixels. .TP 8 .B \-bthickness \fIint\fP How thick to make the borders; default 3 pixels. .TP 8 .B \-radius \fIint\fP Radius of the objects; default 20 pixels. .TP 8 .B \-layers \fIint\fP How many layers of objects; default 3. .TP 8 .B \-density \fIint\fP Default 5. .TP 8 .B \-no-db Disable double-buffering. .TP 8 .B \-color \fIstring\fP The base color for the color scheme. Typed as a hexadecimal triplet with or with out the leading #. ie. fa4563 & #43cd12 are both acceptable. If the saturation of you color is too low (<0.03) the random color generator will kick in. The default color is #efbea5 .TP 8 .B \-random-colors This enables the random color generation. It is disabled by default. It overrides anything from -color .TP 8 .B \-fps Display the current frame rate and CPU load. .SH ENVIRONMENT .PP .TP 8 .B DISPLAY to get the default host and display number. .TP 8 .B XENVIRONMENT to get the name of a resource file that overrides the global resources stored in the RESOURCE_MANAGER property. .SH SEE ALSO .BR X (1), .BR xscreensaver (1) .SH COPYRIGHT Copyright \(co 2004 Barry Dmytro. 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. .SH AUTHOR Barry Dmytro .SH CREDITS The color generation algorithm was borrowed from a friend from #vegans@irc.blitzed.org. Her site was [REDACTED]. To see her original code in action visit her site. xscreensaver-5.36/hacks/anemotaxis.man000644 000767 000024 00000005226 12701612217 020100 0ustar00jwzstaff000000 000000 .TH XScreenSaver 1 "" "X Version 11" .SH NAME anemotaxis - directional search on a plane. .SH SYNOPSIS .B anemotaxis [\-display \fIhost:display.screen\fP] [\-visual \fIvisual\fP] [\-window] [\-root] [\-delay \fInumber\fP] [\-distance \fInumber\fP] [\-sources \fInumber\fP] [\-searchers \fInumber\fP] [\-fps] .SH DESCRIPTION The program demonstrates a search algorithm designed for locating a source of odor in turbulent atmosphere. The odor is convected by wind which has a constant mean direction and fluctuations around it. The searcher is able to sense the odor and determine local instantaneous wind direction. The goal is to find the source in the shortest mean time. Some animals face this task to find mates, food, home etc. They exhibit very particular, zigzagging search trajectories. This is modeled as a search on a discrete two-dimensional lattice. The source releases particles that drift with constant velocity in one direction and walk randomly in the other direction. The searcher knows if it hit a particle, and if so, particle's position one time step earlier (local wind direction). The program paints sources and particles released by them as well as trajectories of searchers who are trying to capture the sources. .SH OPTIONS .TP 8 .B \-visual \fIvisual\fP Specify which visual to use. Legal values are the name of a visual class, or the id number (decimal or hex) of a specific visual. .TP 8 .B \-window Draw on a newly-created window. This is the default. .TP 8 .B \-root Draw on the root window. .TP 8 .B \-delay \fInumber\fP Per-frame delay, in microseconds. Default: 20000 (0.02 seconds.). .TP 8 .B \-distance \fInumber\fP Max initial distance to the source . 10 - 250. Default: 40. .TP 8 .B \-sources \fInumber\fP Max number of sources. Default: 25. .TP 8 .B \-searchers \fInumber\fP Max number of searchers. Default: 25. .TP 8 .B \-fps Display the current frame rate and CPU load. .SH ENVIRONMENT .PP .TP 8 .B DISPLAY to get the default host and display number. .TP 8 .B XENVIRONMENT to get the name of a resource file that overrides the global resources stored in the RESOURCE_MANAGER property. .SH SEE ALSO .BR X (1), .BR xscreensaver (1) .SH COPYRIGHT Copyright \(co 2004 by Eugene Balkovsky. 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. .SH AUTHOR Eugene Balkovsky xscreensaver-5.36/hacks/memscroller.man000644 000767 000024 00000004671 12701612220 020251 0ustar00jwzstaff000000 000000 .TH XScreenSaver 1 "14-Aug-2004" "X Version 11" .SH NAME memscroller - scrolls a dump of its own RAM across the screen .SH SYNOPSIS .B memscroller [\-display \fIhost:display.screen\fP] [\-window] [\-root] [\-mono] [\-install] [\-visual \fIvisual\fP] [\-font \fIfont\fP] [\-delay \fIint\fP] [\-mono | -color] [\-ram | -random | \-filename \fIfile\fP] [\-fps] .SH DESCRIPTION The \fImemscroller\fP program scrolls a dump of its own process memory across the screen in three windows at three different rates. .SH OPTIONS .I memscroller accepts the following options: .TP 8 .B \-window Draw on a newly-created window. This is the default. .TP 8 .B \-root Draw on the root window. .TP 8 .B \-install Install a private colormap for the window. .TP 8 .B \-visual \fIvisual\fP Specify which visual to use. Legal values are the name of a visual class, or the id number (decimal or hex) of a specific visual. .TP 8 .B \-color Render each three bytes of memory as R, G, B. This is the default. .TP 8 .B \-mono Render each byte of memory in shades of green. .TP 8 .B \-ram Read from the process's address space. This is the default. .TP 8 .B \-random Instead of reading from memory, generate random numbers. .TP 8 .B \-filename \fIfile\fP Instead of reading from memory, read from the given file until EOF, then re-open it. If you have permission, /dev/mem is an interesting choice here. (Note that /dev/null won't ever display anything, because it returns EOF without ever returning any data.) .TP 8 .B \-delay \fImicroseconds\fP How much of a delay should be introduced between steps of the animation. Default 10000. .TP 8 .B \-fps Display the current frame rate and CPU load. .SH ENVIRONMENT .PP .TP 8 .B DISPLAY to get the default host and display number. .TP 8 .B XENVIRONMENT to get the name of a resource file that overrides the global resources stored in the RESOURCE_MANAGER property. .SH SEE ALSO .BR X (1), .BR xscreensaver (1) .SH COPYRIGHT Copyright \(co 2004 by 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. .SH AUTHOR Jamie Zawinski , 14-Aug-2004. xscreensaver-5.36/hacks/substrate.man000644 000767 000024 00000004573 12701612220 017742 0ustar00jwzstaff000000 000000 .TH Substrate 1 "08-Oct-04" "X Version 11" .SH NAME substrate - Grow crystal-like lines on a computational substrate .SH SYNOPSIS .B substrate [\-display \fIhost:display.screen\fP] [\-foreground \fIcolor\fP] [\-background \fIcolor\fP] [\-wireframe] [\-max\-cycles \fIcyclecount\fP] [\-growth\-delay \fIdelayms\fP] [\-initial\-cracks \fInuminitial\fP] [\-max\-cracks \fInummax\fP] [\-sand\-grains \fInumgrains\fP] [\-circle\-percent \fIcirclepercent\fP] [\-fps] .SH DESCRIPTION Lines like crystals grow on a computational substrate. A simple perpendicular growth rule creates intricate city-like structures. Optionally, cracks may also be circular, producing a cityscape more familiar to places for which city planning is a distant, theoretical concern. Ported from the code by j.tarbell at http://complexification.net .SH OPTIONS .I substrate accepts the following options: .TP 8 .B \-wireframe (Default: \fIFalse\fP) Don't draw sand-painting colored effects, only make a wireframe. .TP 8 .B \-max\-cycles \fIcyclecount\fP (Default: \fI10000\fP) Maximum number of growth cycles before restarting. The higher this is, the more complex the art. .TP 8 .B \-growth\-delay \fIdelayms\fP (Default: \fI18000\fP) Delay in ms between growth cycles. More delay, slower (but smoother and less CPU intensive) art. .TP 8 .B \-initial\-cracks \fInuminitial\fP (Default: \fI3\fP) Initial number of cracks in the substrate .TP 8 .B \-max\-cracks \fInummax\fP (Default: \fI100\fP) Maximum number of cracks in the substrate at a single time .TP 8 .B \-sand\-grains \fInumgrains\fP (Default: \fI64\fP) Number of sand grains dropped during coloring. More grains cause a denser colour but use more cpu power. .TP 8 .B \-circle-percent \fIcirclepercent\fP (Default: \fI0\fP) The percentage of the cracks will be circular. .TP 8 .B \-fps Display the current frame rate and CPU load. .SH ENVIRONMENT .PP .TP 8 .B DISPLAY to get the default host and display number. .TP 8 .B XENVIRONMENT to get the name of a resource file that overrides the global resources stored in the RESOURCE_MANAGER property. .SH SEE ALSO .BR X (1), .BR xscreensaver (1) .SH COPYRIGHT Copyright \(co 2003 by J. Tarbell (complex@complexification.net, http://www.complexification.net). Ported to XScreensaver 2004 by Mike Kershaw (dragorn@kismetwireless.net) .SH AUTHOR J. Tarbell , Jun-03 Mike Kershaw , Oct-04 xscreensaver-5.36/hacks/intermomentary.man000644 000767 000024 00000005130 12701612220 020771 0ustar00jwzstaff000000 000000 .TH Intermomentary 1 "08-Oct-04" "X Version 11" .SH NAME intermomentary - Visualize the momentary and aggregate intersections between slowly moving circles. .SH SYNOPSIS .B intermomentary [\-display \fIhost:display.screen\fP] [\-foreground \fIcolor\fP] [\-background \fIcolor\fP] [\-num\-discs \fIdisc count\fP] [\-draw\-delay \fIdelayms\fP] [\-max\-riders \fImaxr\fP] [\-max\-radius \fImaxradius\fP] [\-fps] .SH DESCRIPTION The Intersection Momentary is a fun visualization defining the relationships between objects with Casey Reas, William Ngan, and Robert Hodgin. Commissioned for display at the Whitney Museum of American Art. A surface filled with 100 medium to small sized circles. Each circle has a different size and direction, but moves at the same slow rate. Display: A. The instantaneous intersections of the circles. B. The aggregate intersections of the circles. The circles begin with a radius of 1 pixel and slowly increase to some arbitrary size. Circles are drawn with small moving points along the perimeter. The intersections are rendered as glowing orbs. Glowing orbs are rendered only when a perimeter point moves past the intersection point. Ported to XScreensaver from the art project "InterMomentary" at http://www.complexification.net by J.Tarbell .SH OPTIONS .I intermomentary accepts the following options: .TP 8 .B \-num\-discs \fIdisc count\fP (Default: \fI85\fP) Number of slowly moving and growing discs to use. The more discs, the more CPU power. .TP 8 .B \-draw\-delay \fIdelayms\fP (Default: \fI30000\fP) Delay in ms between drawing cycles. More delay, slower (but smoother and less CPU intensive.) art. .TP 8 .B \-max\-riders \fImaxrider\fP (Default: \fI40\fP) Maximum number of 'riders', single dots moving around the edge of the discs. .TP 8 .B \-max\-radius \fImaxradius\fP (Default: \fI100\fP) Maximum possible radius of a disc. .TP 8 .TP 8 .B \-fps Display the current frame rate and CPU load. .SH ENVIRONMENT .PP .TP 8 .B DISPLAY to get the default host and display number. .TP 8 .B XENVIRONMENT to get the name of a resource file that overrides the global resources stored in the RESOURCE_MANAGER property. .TP 8 .SH BUGS .PP .TP 8 Setting the background to anything besides black confuses the intensity algorithm and will look terrible. .SH SEE ALSO .BR X (1), .BR xscreensaver (1) .SH COPYRIGHT Copyright \(co 2003 by J. Tarbell (complex@complexification.net, http://www.complexification.net). Ported to XScreensaver 2004 by Mike Kershaw (dragorn@kismetwireless.net) .SH AUTHOR J. Tarbell , Jun-03 Mike Kershaw , Oct-04 xscreensaver-5.36/hacks/fireworkx.man000644 000767 000024 00000004202 12701612220 017733 0ustar00jwzstaff000000 000000 .TH XScreenSaver 1 "" "X Version 11" .SH NAME fireworkx - pyrotechnic explosions eye-candy. .SH SYNOPSIS .B fireworkx [\-display \fIhost:display.screen\fP] [\-visual \fIvisual\fP] [\-window] [\-root] [\-verbose] [\-noflash] [\-shoot] [\-delay \fInumber\fP] [\-maxlife \fInumber\fP] [\-fps] .SH DESCRIPTION Animates explosions. .SH OPTIONS .TP 8 .B \-visual \fIvisual\fP Specify which visual to use. Legal values are the name of a visual class, or the id number (decimal or hex) of a specific visual. .TP 8 .B \-window Draw on a newly-created window. This is the default. .TP 8 .B \-root Draw on the root window. .TP 8 .B \-noflash Turn off light flash effect. (Runs faster) .TP 8 .B \-shoot Fire shells up using mortar. .TP 8 .B \-delay \fInumber\fP Delay between frames. In microseconds. (Default: 10000) .TP 8 .B \-maxlife \fInumber\fP Maximum decay period for an explosion. (Range: 0-100) .TP 8 .B \-verbose For scientific research purposes only..! .TP 8 .B \-fps Display the current frame rate and CPU load. .SH ENVIRONMENT .PP .TP 8 .B DISPLAY to get the default host and display number. .TP 8 .B XENVIRONMENT to get the name of a resource file that overrides the global resources stored in the RESOURCE_MANAGER property. .SH SEE ALSO .BR X (1), .BR xscreensaver (1) .SH COPYRIGHT Copyright \(co 1999-2013 by Rony B Chandran. 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. .SH AUTHOR .br Written by Rony B Chandran .br .br Additional programming and support: .br -------------------------------------------------------------------- .br Rugmini R Chandran .br Renuka S .br Jean-Pierre Demailly .br Nicholas Miell .SH URL http://www.ronybc.com xscreensaver-5.36/hacks/fiberlamp.man000644 000767 000024 00000003425 12701612220 017662 0ustar00jwzstaff000000 000000 .TH XScreenSaver 1 "" "X Version 11" .SH NAME fiberlamp - Fiber Optic Lamp .SH SYNOPSIS .B fiberlamp [\-display \fIhost:display.screen\fP] [\-visual \fIvisual\fP] [\-window] [\-root] [\-count \fInumber\fP] [\-cycles \fInumber\fP] [\-delay \fInumber\fP] [\-ncolors \fInumber\fP] [\-fps] .SH DESCRIPTION Displays a Fiber Optic Lamp. .SH OPTIONS .TP 8 .B \-visual \fIvisual\fP Specify which visual to use. Legal values are the name of a visual class, or the id number (decimal or hex) of a specific visual. .TP 8 .B \-window Draw on a newly-created window. This is the default. .TP 8 .B \-root Draw on the root window. .TP 8 .B \-count \fInumber\fP Number of Fibers. 10 - 500. Default: 500. .TP 8 .B \-cycles \fInumber\fP Number of cycles before the lamp is knocked sideways. 100 - 10000. Default: 10000. .TP 8 .B \-delay \fInumber\fP Per-frame delay, in microseconds. Default: 10000 (0.01 seconds.). .TP 8 .B \-ncolors \fInumber\fP Number of Colors. Default: 64. .TP 8 .B \-fps Display the current frame rate and CPU load. .SH ENVIRONMENT .PP .TP 8 .B DISPLAY to get the default host and display number. .TP 8 .B XENVIRONMENT to get the name of a resource file that overrides the global resources stored in the RESOURCE_MANAGER property. .SH SEE ALSO .BR X (1), .BR xscreensaver (1) .SH COPYRIGHT Copyright \(co 2005 by Tim Auckland. 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. .SH AUTHOR Tim Auckland. xscreensaver-5.36/hacks/boxfit.man000644 000767 000024 00000006451 12701612217 017224 0ustar00jwzstaff000000 000000 .TH XScreenSaver 1 "" "X Version 11" .SH NAME boxfit - fills space with a gradient of growing boxes or circles. .SH SYNOPSIS .B boxfit [\-display \fIhost:display.screen\fP] [\-visual \fIvisual\fP] [\-window] [\-root] [\-delay \fIusecs\fP] [\-count \fIint\fP] [\-growby \fIint\fP] [\-spacing \fIint\fP] [\-border \fIint\fP] [\-circles | \-squares | \-random] [\-grab] [\-peek] [\-fps] .SH DESCRIPTION Packs the screen with growing boxes or circles, colored according to a horizontal or vertical gradient. The objects grow until they touch, then stop. When the screen is full, they shrink away and the process restarts. .SH OPTIONS .TP 8 .B \-visual \fIvisual\fP Specify which visual to use. Legal values are the name of a visual class, or the id number (decimal or hex) of a specific visual. .TP 8 .B \-window Draw on a newly-created window. This is the default. .TP 8 .B \-root Draw on the root window. .TP 8 .B \-delay \fImicroseconds\fP How much of a delay should be introduced between steps of the animation. Default 20000, or about 0.02 seconds. .TP 8 .B \-count \fIint\fP How many boxes or circles to animate simultaneously; default 50. Smaller numbers yield larger boxes/circles. .TP 8 .B \-growby \fIint\fP How many pixels the objects should grow by, each frame. Default 1. .TP 8 .B \-spacing \fIint\fP How many pixels of space should be left between the objects. Default 1. .TP 8 .B \-border \fIint\fP Thickness of the colored border around each object. Default 1. .TP 8 .B \-circles\fB | \-squares\fP | \-random\fP Draw circles, squares, or choose randomly (the default). .TP 8 .B \-grab Normally it colors the boxes with a horizontal or vertical gradient. If \fI\-grab\fP is specified, it will instead load a random image, and color the boxes according to the colors in that image. As the picture fills in, some features of the underlying image may become recognisable. When grabbing images, the image will be grabbed from the portion of the screen underlying the window, or from the system's video input, or from a random file on disk, as indicated by the \fIgrabDesktopImages\fP, \fIgrabVideoFrames\fP, and \fIchooseRandomImages\fP options in the \fI~/.xscreensaver\fP file; see .BR xscreensaver-demo (1) for more details. .TP 8 .B \-peek This option says to briefly show you the underlying image before beginning. The default is not to show the unadulterated image at all. (This only has an effect when \fI\-grab\fP is used.) .TP 8 .B \-fps Display the current frame rate and CPU load. .SH ENVIRONMENT .PP .TP 8 .B DISPLAY to get the default host and display number. .TP 8 .B XENVIRONMENT to get the name of a resource file that overrides the global resources stored in the RESOURCE_MANAGER property. .SH SEE ALSO .BR X (1), .BR xscreensaver (1) .BR xscreensaver\-demo (1), .BR xscreensaver\-getimage (1) .SH COPYRIGHT Copyright \(co 2005 by 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. .SH AUTHOR Jamie Zawinski xscreensaver-5.36/hacks/interaggregate.man000644 000767 000024 00000004170 12701612220 020707 0ustar00jwzstaff000000 000000 .TH Interaggregate 1 "08-Oct-04" "X Version 11" .SH NAME interaggregate - Visualize the momentary and aggregate intersections between slowly moving circles. .SH SYNOPSIS .B interaggregate [\-display \fIhost:display.screen\fP] [\-foreground \fIcolor\fP] [\-background \fIcolor\fP] [\-num\-circles \fIdisc count\fP] [\-growth\-delay \fIdelayms\fP] [\-max\-cycles \fImaxr\fP] [\-percent\-orbits \fIpercent\fP] [\-base\-orbits \fIpercent\fP] [\-base\-on\-center] [\-draw\-centers] [\-fps] .SH DESCRIPTION The Intersection Aggregate is a fun visualization defining the relationships between objects with Casey Reas, William Ngan, and Robert Hodgin. Commissioned for display at the Whitney Museum of American Art. A surface filled with 100 medium to small sized circles. Each circle has a different size and direction, but moves at the same slow rate. Display: A. The instantaneous intersections of the circles. B. The aggregate intersections of the circles. Ported to XScreensaver from the art project "InterAggregate" at http://www.complexification.net by J.Tarbell .SH OPTIONS .I interaggregate accepts the following options: .TP 8 .B \-num\-circles \fIdisc count\fP (Default: \fI100\fP) Number of slowly moving and growing discs to use. The more discs, the more CPU power. .TP 8 .B \-growth\-delay \fIdelayms\fP (Default: \fI18000\fP) Delay in ms between drawing cycles. More delay, slower (but smoother and less CPU intensive.) art. .TP 8 .B \-fps Display the current frame rate and CPU load. .SH ENVIRONMENT .PP .TP 8 .B DISPLAY to get the default host and display number. .TP 8 .B XENVIRONMENT to get the name of a resource file that overrides the global resources stored in the RESOURCE_MANAGER property. .TP 8 .SH BUGS .PP .TP 8 Setting the background to anything besides black confuses the intensity algorithm and will look terrible. .SH SEE ALSO .BR X (1), .BR xscreensaver (1) .SH COPYRIGHT Copyright \(co 2003 by J. Tarbell (complex@complexification.net, http://www.complexification.net). Ported to XScreensaver 2005 by David Agraz. .SH AUTHOR J. Tarbell , Jun-03 David Agraz , Apr-05. xscreensaver-5.36/hacks/celtic.man000644 000767 000024 00000003457 12701612220 017171 0ustar00jwzstaff000000 000000 .TH XScreenSaver 1 "" "X Version 11" .SH NAME celtic - draws celtic cross-stich patterns .SH SYNOPSIS .B ifs [\-display \fIhost:display.screen\fP] [\-visual \fIvisual\fP] [\-window] [\-root] [\-delay \fInumber\fP] [\-delay2 \fInumber\fP] [\-ncolors \fInumber\fP] [\-graph \fImode\fP] [\-fps] .SH DESCRIPTION The \fIceltic\fP program repeatedly draws random cross-stitch patterns. .SH OPTIONS .TP 8 .B \-visual \fIvisual\fP Specify which visual to use. Legal values are the name of a visual class, or the id number (decimal or hex) of a specific visual. .TP 8 .B \-window Draw on a newly-created window. This is the default. .TP 8 .B \-root Draw on the root window. .TP 8 .B \-delay \fInumber\fP Per-frame delay, in microseconds. Default: 10000. .TP 8 .B \-delay2 \fInumber\fP Delay between patterns, in seconds. Default: 5. .TP 8 .B \-ncolors \fInumber\fP Number of colours to use. Default: 20. .TP 8 .B \-graph Whether to render the underlying graph. Default: no. .TP 8 .B \-fps Display the current frame rate and CPU load. .SH ENVIRONMENT .PP .TP 8 .B DISPLAY to get the default host and display number. .TP 8 .B XENVIRONMENT to get the name of a resource file that overrides the global resources stored in the RESOURCE_MANAGER property. .SH SEE ALSO .BR X (1), .BR xscreensaver (1) .SH COPYRIGHT Copyright \(co 2005 by Max Froumentin. 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. .SH AUTHOR Max Froumentin xscreensaver-5.36/hacks/cwaves.man000644 000767 000024 00000004176 12701612220 017215 0ustar00jwzstaff000000 000000 .TH XScreenSaver 1 "14-Jun-97" "X Version 11" .SH NAME cwaves - languid sinusoidal colors .SH SYNOPSIS .B cwaves [\-display \fIhost:display.screen\fP] [\-foreground \fIcolor\fP] [\-background \fIcolor\fP] [\-window] [\-root] [\-mono] [\-install] [\-visual \fIvisual\fP] [\-delay \fIusecs\fP] [\-waves \fIint\fP] [\-colors \fIint\fP] [\-fps] .SH DESCRIPTION The \fIcwaves\fP program draws a languidly-scrolling vertical field of sinusoidal colors. .SH OPTIONS .I cwaves accepts the following options: .TP 8 .B \-window Draw on a newly-created window. This is the default. .TP 8 .B \-root Draw on the root window. .TP 8 .B \-mono If on a color display, pretend we're on a monochrome display. .TP 8 .B \-install Install a private colormap for the window. .TP 8 .B \-visual \fIvisual\fP Specify which visual to use. Legal values are the name of a visual class, or the id number (decimal or hex) of a specific visual. .TP 8 .B \-delay \fImicroseconds\fP How much of a delay should be introduced between steps of the animation. Default 20000, or about 1/50th second. .TP 8 .B \-waves \fIint\fP How many cosines to add together. The more waves, the more complex the apparent motion. .TP 8 .B \-colors \fIint\fP How many colors to use. Default 800. The more colors, the smoother the blending will be. .TP 8 .B \-fps Display the current frame rate and CPU load. .SH ENVIRONMENT .PP .TP 8 .B DISPLAY to get the default host and display number. .TP 8 .B XENVIRONMENT to get the name of a resource file that overrides the global resources stored in the RESOURCE_MANAGER property. .SH SEE ALSO .BR X (1), .BR xscreensaver (1) .SH COPYRIGHT Copyright \(co 2007 by 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. .SH AUTHOR Jamie Zawinski , 2-Jul-2007. xscreensaver-5.36/hacks/abstractile.man000644 000767 000024 00000003117 12701612217 020222 0ustar00jwzstaff000000 000000 .TH XScreenSaver 1 "27-Apr-97" "X Version 11" .SH NAME abstractile - draw abstract mosaic patterns of interlocking tiles .SH SYNOPSIS .B abstractile [\-sleep \fIseconds\fP] [\-speed \fIint\fP] [\-tile \fItile_mode\fP] [\-fps] .SH DESCRIPTION The \fIabstractile\fP program draws chaotic grids of randomly colored and shaped interlocking tiles. .SH OPTIONS .I abstractile accepts the following options: .TP 8 .B \-sleep \fIseconds\fP Specify the number of seconds to sleep between screens (0-60). .TP 8 .B \-speed \fIint\fP A value between 0 and 5 used to specify the speed at which each screen is drawn. .TP 8 .B \-tile \fItile_mode\fP The type of tile that is drawn on each screen. Legal values are \fIrandom\fP, \fIflat\fP, \fIthin\fP, \fIoutline\fP, \fIblock\fP, \fIneon\fP, and \fItiled\fP .TP 8 .B \-fps Display the current frame rate and CPU load. .SH ENVIRONMENT .PP .TP 8 .B DISPLAY to get the default host and display number. .TP 8 .B XENVIRONMENT to get the name of a resource file that overrides the global resources stored in the RESOURCE_MANAGER property. .SH SEE ALSO .BR X (1), .BR xscreensaver (1) .SH COPYRIGHT Copyright \(co 2004 by Steve Sundstrom. Based on examples from the hacks directory of xscreensaver, Copyright (c) 1997, 1998, 2002 Jamie Zawinski Permission to use, copy, modify, and distribute this software and its documentation for any purpose and without fee is hereby granted, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation. .SH AUTHOR Steve Sundstrom xscreensaver-5.36/hacks/lcdscrub.man000644 000767 000024 00000004251 12701612220 017520 0ustar00jwzstaff000000 000000 .TH XScreenSaver 1 "" "X Version 11" .SH NAME lcdscrub - attempt to repair burn-in on LCD screens .SH SYNOPSIS .B lcdscrub [\-display \fIhost:display.screen\fP] [\-visual \fIvisual\fP] [\-window] [\-root] [\-delay \fInumber\fP] [\-spread \fInumber\fP] [\-cycles \fInumber\fP] [\-fps] .SH DESCRIPTION This screen saver is not meant to look pretty, but rather, to repair burn-in on LCD monitors. Believe it or not, screen burn is not a thing of the past. It can happen to LCD screens pretty easily, even in this modern age. However, leaving the screen on and displaying high contrast images can often repair the damage. That's what this screen saver does. See also: http://docs.info.apple.com/article.html?artnum=88343 http://toastycode.com/blog/2008/02/05/lcd-scrub/ .SH OPTIONS .TP 8 .B \-visual \fIvisual\fP Specify which visual to use. Legal values are the name of a visual class, or the id number (decimal or hex) of a specific visual. .TP 8 .B \-window Draw on a newly-created window. This is the default. .TP 8 .B \-root Draw on the root window. .TP 8 .B \-delay \fInumber\fP Per-frame delay, in microseconds. Default: 1000000 (1 second.). .TP 8 .B \-spread \fInumber\fP Distance between lines. Default 8. .TP 8 .B \-cycles \fInumber\fP Steps before switching display mode. Default 60. .TP 8 .B \-fps Display the current frame rate and CPU load. .SH ENVIRONMENT .PP .TP 8 .B DISPLAY to get the default host and display number. .TP 8 .B XENVIRONMENT to get the name of a resource file that overrides the global resources stored in the RESOURCE_MANAGER property. .SH SEE ALSO .BR X (1), .BR xscreensaver (1) .SH COPYRIGHT Copyright \(co 2008 by 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. .SH AUTHOR Inspired by the like-named program by Daniel Sandler. Written by Jamie Zawinski. xscreensaver-5.36/hacks/hexadrop.man000664 000767 000024 00000004170 12701612220 017533 0ustar00jwzstaff000000 000000 .TH XScreenSaver 1 "" "X Version 11" .SH NAME hexadrop - shrinking hexagons. .SH SYNOPSIS .B hexadrop [\-display \fIhost:display.screen\fP] [\-visual \fIvisual\fP] [\-window] [\-root] [\-delay \fInumber\fP] [\-speed \fInumber\fP] [\-size \fInumber\fP] [\-sides \fInumber\fP] [\-uniform-speed] [\-no-uniform-speed] [\-lockstep] [\-no-lockstep] [\-fps] .SH DESCRIPTION Draws a grid of hexagons or other shapes and drops them out. .SH OPTIONS .TP 8 .B \-visual \fIvisual\fP Specify which visual to use. Legal values are the name of a visual class, or the id number (decimal or hex) of a specific visual. .TP 8 .B \-window Draw on a newly-created window. This is the default. .TP 8 .B \-root Draw on the root window. .TP 8 .B \-delay \fInumber\fP Per-frame delay, in microseconds. Default: 30000 (0.03 seconds.). .TP 8 .B \-speed \fInumber\fP Speed. 0.5 for half as fast; 2.0 for twice as fast. .TP 8 .B \-size \fInumber\fP How many tiles to fit horizontally on the screen. Default 15. .TP 8 .B \-sides \fInumber\fP Shape of the tiles. 3, 4, 6 or 8. Default: random. .TP 8 .B \-uniform-speed | \-no-uniform-speed Whether each tile should drop at the same speed. Default: random. .TP 8 .B \-lockstep | \-no-lockstep Whether each tile should drop at the same time. Default: random. .TP 8 .B \-fps | \-no-fps Whether to show a frames-per-second display at the bottom of the screen. .SH ENVIRONMENT .PP .TP 8 .B DISPLAY to get the default host and display number. .TP 8 .B XENVIRONMENT to get the name of a resource file that overrides the global resources stored in the RESOURCE_MANAGER property. .SH SEE ALSO .BR X (1), .BR xscreensaver (1) .SH COPYRIGHT Copyright \(co 2013 by 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. .SH AUTHOR Jamie Zawinski. xscreensaver-5.36/hacks/tessellimage.man000664 000767 000024 00000005145 12701612221 020403 0ustar00jwzstaff000000 000000 .TH XScreenSaver 1 "" "X Version 11" .SH NAME tessellimage - Converts an image to triangles using Delaunay tessellation. .SH SYNOPSIS .B tessellimage [\-display \fIhost:display.screen\fP] [\-visual \fIvisual\fP] [\-window] [\-root] [\-delay \fInumber\fP] [\-duration \fInumber\fP] [\-duration2 \fInumber\fP] [\-max-depth \fInumber\fP] [\-no-outline] [\-no-fill-screen] [\-fps] .SH DESCRIPTION Converts an image to triangles using Delaunay tessellation, and animates the result at various depths. More triangles are allocated to visually complex parts of the image. This is accomplished by first computing the first derivative of the image: the distance between each pixel and its neighbors. Then the Delaunay control points are chosen by selecting those pixels whose distance value is above a certain threshold: those are the pixels that have the largest change in color/brightness. .SH OPTIONS .TP 8 .B \-visual \fIvisual\fP Specify which visual to use. Legal values are the name of a visual class, or the id number (decimal or hex) of a specific visual. .TP 8 .B \-window Draw on a newly-created window. This is the default. .TP 8 .B \-root Draw on the root window. .TP 8 .B \-delay \fInumber\fP Per-frame delay, in microseconds. Default: 30000 (0.03 seconds). .TP 8 .B \-duration \fInumber\fP Length of time until loading a new image. Default: 2 minutes. .TP 8 .B \-duration2 \fInumber\fP Length of time until increasing or decreasing the triangulation depth. Default: 0.4 seconds. .TP 8 .B \-max-depth \fInumber\fP The maximum number of triangles to render. Default: 40000. .TP 8 .B \-outline | \-no-outline Whether to outline the triangles. .TP 8 .B \-fill-screen | \-no-fill-screen Whether to zoom in on the image to completely fill the screen, or to center it. .TP 8 .B \-fps | \-no-fps Whether to show a frames-per-second display at the bottom of the screen. .SH ENVIRONMENT .PP .TP 8 .B DISPLAY to get the default host and display number. .TP 8 .B XENVIRONMENT to get the name of a resource file that overrides the global resources stored in the RESOURCE_MANAGER property. .SH SEE ALSO .BR X (1), .BR xscreensaver (1) .SH COPYRIGHT Copyright \(co 2014 by 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. .SH AUTHOR Jamie Zawinski. xscreensaver-5.36/hacks/binaryring.man000664 000767 000024 00000004705 12701612217 020077 0ustar00jwzstaff000000 000000 .TH "Binary Ring" 1 "02-Sep-14" "X Version 11" .SH NAME binaryring - A system of path tracing particles evolves continuously from an initial creation. .SH SYNOPSIS .B binaryring [\-fps] [\-install] [\-noinstall] [\-mono] [\-root] [\-visual \fIvisual\fP] [\-window] [\-window\-id \fIwindow\-id\fP] [\-color] [\-no\-color] [\-growth\-delay \fIdelayms\fP] [\-particle\-number \fIparticles\fP] [\-ring\-radius \fIradius\fP] .SH DESCRIPTION A system of path tracing particles evolves continuously from an initial circular creation. Ages of darkness play arbitrarily with ages of light. Ported (with some extensions) from the code by J. Tarbell at http://complexification.net .SH OPTIONS .I binaryring accepts the following options: .TP 8 .B \-fps Display the current frame rate and CPU load. .TP 8 .B \-install Install a private colormap for the window. .TP 8 .B \-mono If on a color display, pretend we're on a monochrome display. .TP 8 .B \-noinstall Don't install a private colormap for the window. .TP 8 .B \-root Draw on the root window. .TP 8 .B \-visual \fIvisual\fP Specify which visual to use. Legal values are the name of a visual class or the id number (decimal or hex) of a specific visual. .TP 8 .B \-window Draw on a newly-created window. This is the default. .TP 8 .B \-window\-id \fIwindow\-id\fP Specify which window id to use. .TP 8 .B \-color (Default) Particles have random generated colors that gradually change over time. .TP 8 .B \-no\-color Use the original black and white visualization. .TP 8 .B \-growth\-delay \fIdelayms\fP (Default: \fI10000\fP) Delay in ms between growth cycles. More delay, slower (but less CPU intensive). .TP 8 .B \-particles\-number \fIparticles\fP (Default: \fI5000\fP) The number of particles in the system. With more particles the fps can also be affected. .TP 8 .B \-ring\-radius \fIradius\fP (Default: \fI40\fP) The radius of the ring where the particles are born, in pixels. .SH ENVIRONMENT .PP .TP 8 .B DISPLAY to get the default host and display number. .TP 8 .B XENVIRONMENT to get the name of a resource file that overrides the global resources stored in the RESOURCE_MANAGER property. .SH SEE ALSO .BR X (1), .BR xscreensaver (1) .SH COPYRIGHT Copyright \(co 2003 by J. Tarbell (complex@complexification.net, http://www.complexification.net). Ported to XScreensaver by Emilio Del Tessandoro (emilio.deltessa@gmail.com) .SH AUTHOR J. Tarbell , Jun-03 Emilio Del Tessandoro , Aug-14 xscreensaver-5.36/hacks/ant.man000644 000767 000024 00000004754 12701612217 016517 0ustar00jwzstaff000000 000000 .TH XScreenSaver 1 "" "X Version 11" .SH NAME ant - cellular automaton. .SH SYNOPSIS .B ant [\-display \fIhost:display.screen\fP] [\-visual \fIvisual\fP] [\-window] [\-install] [\-noinstall] [\-root] [\-eyes] [\-no-eyes] [\-truchet] [\-no-truchet] [\-sharpturn] [\-no-sharpturn] [\-delay \fInumber\fP] [\-cycles \fInumber\fP] [\-count \fInumber\fP] [\-size \fInumber\fP] [\-neighbors 3] [\-neighbors 4] [\-neighbors 6] [\-neighbors 9] [\-neighbors 12] [\-ncolors \fInumber\fP] [\-fps] .SH DESCRIPTION A cellular automaton that is really a two-dimensional Turing machine: as the heads ("ants") walk along the screen, they change pixel values in their path. Then, as they pass over changed pixels, their behavior is influenced. .SH OPTIONS .TP 8 .B \-visual \fIvisual\fP Specify which visual to use. Legal values are the name of a visual class, or the id number (decimal or hex) of a specific visual. .TP 8 .B \-window Draw on a newly-created window. This is the default. .TP 8 .B \-root Draw on the root window. .TP 8 .B \-sharpturns | \-no-sharpturns Whether to do sharp turns. .TP 8 .B \-truchet | \-no-truchet Whether to use truchet lines. .TP 8 .B \-eyes | \-no-eyes Whether to draw eyes on the ants. .TP 8 .B \-delay \fInumber\fP Per-frame delay, in microseconds. Default: 1000 (0.0001 seconds.). .TP 8 .B \-cycles \fInumber\fP How long to wait until resetting. 0 - 800000. Default: 40000. .TP 8 .B \-count \fInumber\fP Ants Count. -20 - 20. Default: -3. .TP 8 .B \-size \fInumber\fP Ant Size. -18 - 18. Default: -12. .TP 8 .B \-neighbors \fIN\fP How many neighbors each cell has. Legal values are 3, 4, 6, 9, and 12. .TP 8 .B \-ncolors \fInumber\fP Number of colors. Default: 64. .TP 8 .B \-fps Display the current frame rate and CPU load. .SH ENVIRONMENT .PP .TP 8 .B DISPLAY to get the default host and display number. .TP 8 .B XENVIRONMENT to get the name of a resource file that overrides the global resources stored in the RESOURCE_MANAGER property. .SH SEE ALSO .BR X (1), .BR xscreensaver (1) .SH COPYRIGHT Copyright \(co 2002 by David Bagley. 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. .SH AUTHOR David Bagley. xscreensaver-5.36/hacks/bubbles.man000644 000767 000024 00000011563 12701612220 017341 0ustar00jwzstaff000000 000000 .de EX \"Begin example .ne 5 .if n .sp 1 .if t .sp .5 .nf .in +.5i .. .de EE .fi .in -.5i .if n .sp 1 .if t .sp .5 .. .TH XScreenSaver 1 "14-Dec-95" "X Version 11" .SH NAME bubbles - frying pan / soft drink simulation .SH SYNOPSIS .B bubbles [\-display \fIhost:display.screen\fP] [\-foreground \fIcolor\fP] [\-background \fIcolor\fP] [\-window] [\-root] [\-mono] [\-install] [\-visual \fIvisual\fP] [\-simple] [\-broken] [\-3D] [\-rise|\-drop] [-trails] [\-fps] .SH DESCRIPTION \fIBubbles\fP sprays lots of little random bubbles all over the window which then grow until they reach their maximum size and go pop. The inspiration for this was watching little globules of oil on the bottom of a frying pan and it also looks a little like bubbles in fizzy soft drink. The default mode uses fancy ray-traced bubbles but there is also a mode which just draws circles in case the default mode is too taxing on your hardware. .SH OPTIONS Depending on how your .I bubbles was compiled, it accepts the following options: .TP 8 .B \-foreground Colour of circles if \fI\-simple\fP mode is selected. .TP 8 .B \-background Colour of window background. .TP 8 .B \-window Draw on a newly-created window. This is the default. .TP 8 .B \-root Draw on the root window. .TP 8 .B \-mono If on a color display, pretend we're on a monochrome display. .TP 8 .B \-install Install a private colormap for the window. .TP 8 .B \-visual \fIvisual\fP Specify which visual to use. Legal values are the name of a visual class, or the id number (decimal or hex) of a specific visual. .TP 8 .B \-delay microseconds How much of a delay should be introduced between steps of the animation. Default 800, or about 800 microsecond. Actually, this is the delay between each group of 15 new bubbles since such a delay between each step results in a very slow animation rate. .TP 8 .B \-nodelay Same as \fI\-delay 0\fP. .TP 8 .B \-simple Don't use the default fancy pixmap bubbles. Just draw circles instead. This may give more bearable performance if your hardware wasn't made for this sort of thing. .TP 8 .B \-broken Don't hide bubbles when they pop. This was a bug during development but the results were actually quite attractive. .TP 8 .B \-3D Normally, the simulation is done completely in two dimensions. When a bubble swallows up another bubble, the areas of each are added to get the area of the resulting bubble. This option changes the algorithm to instead add volume (imagining each to be a sphere in 3D space). The whole thing looks more realistic but I find it attracts attention to the flickering of each bubble as they are move and are redrawn. Your mileage may vary. .TP 8 .B \-quiet Don't print messages explaining why one or several command line options were ignored. This is disabled by default. .TP 8 .B \-rise | \-drop .TP 8 .B \-trails .TP 8 .B \-fps Display the current frame rate and CPU load. .SH NOTES If you find the pace of things too slow, remember that there is a delay even though you specify no \fI\-delay\fP option. Try using \fI\-nodelay\fP although beware of the effects of irritation of other users if you're on a shared system as you bleed their CPU time away. Some tools to assist in creation of new bubbles are included in the source distribution. These can either be loaded with the \fI\-file\fP or \fI\-directory\fP options (if available) or they can be used in place of the distributed default bubble (bubble_default.c). You might like to copy these scripts to a permanent location and use them. Read bubbles.README. Rendered bubbles are not supported on monochrome displays. I'm not convinced that small bubbles, even dithered properly are going to look like anything more than a jumble of random dots. .SH BUGS There is a delay before something appears on the screen when using rendered bubbles. The XPM library seems to take a \fBlong\fP time to make pixmaps out of raw data. This can be irritating on slower systems. The movement of the bubbles looks jerky if an incomplete set of bubbles is used. The hide/display algorithm could do with some work to avoid flickering when \fI\-nodelay\fP is set. .SH ENVIRONMENT .PP .TP 8 .B DISPLAY to get the default host and display number. .TP 8 .B XENVIRONMENT to get the name of a resource file that overrides the global resources stored in the RESOURCE_MANAGER property. .SH SEE ALSO .BR X (1), .BR xscreensaver (1) .SH DISTRIBUTION POLICY This work is Copyright \(co 1995, 1996 by James Macnicol. 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. .SH AUTHOR James Macnicol xscreensaver-5.36/hacks/critical.man000644 000767 000024 00000006433 12701612220 017515 0ustar00jwzstaff000000 000000 .TH XScreenSaver 1 "08 Feb 2000" "X Version 11" .SH NAME critical - Draw a system showing self-organizing criticality .SH SYNOPSIS .B critical [\-display \fIhost:display.screen\fP] [\-foreground \fIcolor\fP] [\-background \fIcolor\fP] [\-window] [\-root] [\-mono] [\-install] [\-visual \fIvisual\fP] [\-delay \fIseconds\fP] [\-random \fIboolean\fP] [\-ncolors \fIint\fP] [\-offset \fIint\fP] [\-fps] .SH DESCRIPTION The \fIcritical\fP program displays a self-organizing critical system that gradually emerges from chaos. \fIcritical\fP performs a simulation on a two-dimensional array of integers. The array is initialized to random values. On each iteration, it draws a line to the array position with the greatest value. It then replaces that location and the eight neighboring locations with randomly-selected values. The lines are initially random, but over time a chaotic self-organizing system evolves: areas of the screen which happen to have lower values are less likely to be updated to new values, and so the line tends to avoid those areas. Eventually, the histogram of changes approaches the power-law curve typical of such systems. The simplest documented self-organizing system is the one-dimensional equivalent of \fIcritical\fP. I heard about this algorithm second-hand: apparently there was an article in \fIScientific American\fP describing it sometime in 1997. .SH OPTIONS .I critical accepts the following options: .TP 8 .B \-window Draw on a newly-created window. This is the default. .TP 8 .B \-root Draw on the root window. .TP 8 .B \-mono If on a color display, pretend we're on a monochrome display. .TP 8 .B \-install Install a private colormap for the window. .TP 8 .B \-visual \fIvisual\fP Specify which visual to use. Legal values are the name of a visual class, or the id number (decimal or hex) of a specific visual. .TP 8 .B \-delay \fIusecs\fP Number of microseconds to wait after drawing each line. .TP 8 .B \-random \fIboolean\fP Whether to use randomly selected colours rather than a cycle around the colour wheel. .TP 8 .B \-offset \fIinteger\fP The maximum random radius increment to use. .TP 8 .B \-ncolors \fIinteger\fP How many colors should be allocated in the color ramp (note that this value interacts with \fIoffset\fP.) .TP 8 .B \-trail \fIinteger\fP Length of the trail: between 5 and 100 is nice. .TP 8 .B \-fps Display the current frame rate and CPU load. .SH ENVIRONMENT .PP .TP 8 .B DISPLAY to get the default host and display number. .TP 8 .B XENVIRONMENT to get the name of a resource file that overrides the global resources stored in the RESOURCE_MANAGER property. .SH SEE ALSO .BR X (1), .BR xscreensaver (1) .BR xscreensaver-command (1) .BR xscreensaver-demo (1) .SH COPYRIGHT Copyright \(co 1998 by Martin Pool. 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. .SH AUTHOR Martin Pool , 1998-2000. Based in part on the XScreenSaver code by Jamie Zawinski . xscreensaver-5.36/hacks/flag.man000644 000767 000024 00000006006 12701612220 016630 0ustar00jwzstaff000000 000000 .TH XScreenSaver 1 "24-May-97" "X Version 11" .SH NAME flag - draws a waving flag, containing text or an image .SH SYNOPSIS .B flag [\-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] [\-size \fIinteger\fP] [\-text \fIstring\fP] [\-font \fIfont\fP] [\-bitmap \fIxbm-file\fP] [\-fps] .SH DESCRIPTION The \fIflag\fP program draws a waving flag that contains text or a bitmap. .SH OPTIONS .I flag accepts the following options: .TP 8 .B \-window Draw on a newly-created window. This is the default. .TP 8 .B \-root Draw on the root window. .TP 8 .B \-mono If on a color display, pretend we're on a monochrome display. .TP 8 .B \-install Install a private colormap for the window. .TP 8 .B \-visual \fIvisual\fP Specify which visual to use. Legal values are the name of a visual class, or the id number (decimal or hex) of a specific visual. .TP 8 .B \-ncolors \fIinteger\fP How many colors should be used (if possible). Default 200. .TP 8 .B \-cycles \fIinteger\fP .TP 8 .B \-count \fIinteger\fP .TP 8 .B \-size \fIinteger\fP How large the pixels in the flag should be, from 1 to 8. If this is a negative number, the pixel size is chosen randomly from the range 1 to -size. Default -7. .TP 8 .B \-text \fItext\fP The text to display in the flag. Multiple lines of text are allowed; the lines will be displayed centered atop one another. Default: none. If the text is the magic string \fI"(default)"\fP, then the text used will be the local machine name; a newline; and the local OS version. .TP 8 .B \-bitmap \fIxbm-file\fP The bitmap to display in the flag; this must be an XBM file (color XPMs are not allowed.) Default: none. If the bitmap is the magic string \fI"(default)"\fP, then the bitmap used will be a charming little picture of J. R. "Bob" Dobbs. If neither \fI\-text\fP nor \fI\-bitmap\fP are specified, then either the builtin text or the builtin bitmap will be chosen randomly. .TP 8 .B \-font \fIfont\fP The font in which to draw the text; the default is "-*-helvetica-bold-r-*-240-*". .TP 8 .B \-fps Display the current frame rate and CPU load. .SH ENVIRONMENT .PP .TP 8 .B DISPLAY to get the default host and display number. .TP 8 .B XENVIRONMENT to get the name of a resource file that overrides the global resources stored in the RESOURCE_MANAGER property. .SH SEE ALSO .BR X (1), .BR xscreensaver (1), .BR xlock (1) .SH COPYRIGHT Copyright \(co 1996 Charles Vidal. Permission to use, copy, modify, and distribute this software and its documentation for any purpose and without fee is hereby granted, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation. .SH AUTHOR Charles Vidal , 1996. Ability to run standalone or with \fIxscreensaver\fP, and the \-text and \-bitmap options, added by Jamie Zawinski , 24-May-97. xscreensaver-5.36/hacks/forest.man000644 000767 000024 00000003412 12701612220 017217 0ustar00jwzstaff000000 000000 .TH XScreenSaver 1 "27-May-97" "X Version 11" .SH NAME forest - draws a fractal forest .SH SYNOPSIS .B forest [\-display \fIhost:display.screen\fP] [\-foreground \fIcolor\fP] [\-background \fIcolor\fP] [\-window] [\-root] [\-mono] [\-install] [\-visual \fIvisual\fP] [\-ncolors \fIinteger\fP] [\-delay \fImicroseconds\fP] [\-fps] .SH DESCRIPTION The \fIforest\fP program draws a fractal forest. .SH OPTIONS .I forest accepts the following options: .TP 8 .B \-window Draw on a newly-created window. This is the default. .TP 8 .B \-root Draw on the root window. .TP 8 .B \-mono If on a color display, pretend we're on a monochrome display. .TP 8 .B \-install Install a private colormap for the window. .TP 8 .B \-visual \fIvisual\fP Specify which visual to use. Legal values are the name of a visual class, or the id number (decimal or hex) of a specific visual. .TP 8 .B \-ncolors \fIinteger\fP How many colors should be used (if possible). Default 20. .TP 8 .B \-fps Display the current frame rate and CPU load. .SH ENVIRONMENT .PP .TP 8 .B DISPLAY to get the default host and display number. .TP 8 .B XENVIRONMENT to get the name of a resource file that overrides the global resources stored in the RESOURCE_MANAGER property. .SH SEE ALSO .BR X (1), .BR xscreensaver (1), .BR xlock (1) .SH COPYRIGHT Copyright \(co 1995 by Pascal Pensa. Permission to use, copy, modify, and distribute this software and its documentation for any purpose and without fee is hereby granted, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation. .SH AUTHOR Pascal Pensa , 1995. Ability to run standalone or with \fIxscreensaver\fP added by Jamie Zawinski , 27-May-97. xscreensaver-5.36/hacks/laser.man000644 000767 000024 00000003771 12701612220 017033 0ustar00jwzstaff000000 000000 .TH XScreenSaver 1 "10-May-97" "X Version 11" .SH NAME laser - draws vaguely laser-like moving lines .SH SYNOPSIS .B laser [\-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 The \fIlaser\fP program draws vaguely laser-like moving lines .SH OPTIONS .I laser accepts the following options: .TP 8 .B \-window Draw on a newly-created window. This is the default. .TP 8 .B \-root Draw on the root window. .TP 8 .B \-mono If on a color display, pretend we're on a monochrome display. .TP 8 .B \-install Install a private colormap for the window. .TP 8 .B \-visual \fIvisual\fP Specify which visual to use. Legal values are the name of a visual class, or the id number (decimal or hex) of a specific visual. .TP 8 .B \-ncolors \fIinteger\fP How many colors should be used (if possible). Default 64. The colors used cycle through the hue, making N stops around the color wheel. .TP 8 .B \-cycles \fIinteger\fP Default 200. .TP 8 .B \-count \fIinteger\fP Default 10. .TP 8 .B \-fps Display the current frame rate and CPU load. .SH ENVIRONMENT .PP .TP 8 .B DISPLAY to get the default host and display number. .TP 8 .B XENVIRONMENT to get the name of a resource file that overrides the global resources stored in the RESOURCE_MANAGER property. .SH SEE ALSO .BR X (1), .BR xscreensaver (1), .BR xlock (1) .SH COPYRIGHT Copyright \(co 1995 by Pascal Pensa. Permission to use, copy, modify, and distribute this software and its documentation for any purpose and without fee is hereby granted, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation. .SH AUTHOR Pascal Pensa , 1995. Ability to run standalone or with \fIxscreensaver\fP added by Jamie Zawinski , 10-May-97. xscreensaver-5.36/hacks/lightning.man000644 000767 000024 00000003505 12701612220 017703 0ustar00jwzstaff000000 000000 .TH XScreenSaver 1 "10-May-97" "X Version 11" .SH NAME lightning - draws fractal lightning bolts .SH SYNOPSIS .B lightning [\-display \fIhost:display.screen\fP] [\-foreground \fIcolor\fP] [\-background \fIcolor\fP] [\-window] [\-root] [\-mono] [\-install] [\-visual \fIvisual\fP] [\-ncolors \fIinteger\fP] [\-delay \fImicroseconds\fP] [\-fps] .SH DESCRIPTION The \fIlightning\fP program draws fractal lightning bolts .SH OPTIONS .I lightning accepts the following options: .TP 8 .B \-window Draw on a newly-created window. This is the default. .TP 8 .B \-root Draw on the root window. .TP 8 .B \-mono If on a color display, pretend we're on a monochrome display. .TP 8 .B \-install Install a private colormap for the window. .TP 8 .B \-visual \fIvisual\fP Specify which visual to use. Legal values are the name of a visual class, or the id number (decimal or hex) of a specific visual. .TP 8 .B \-ncolors \fIinteger\fP How many colors should be used (if possible). Default 64. The colors are chosen randomly. .TP 8 .B \-fps Display the current frame rate and CPU load. .SH ENVIRONMENT .PP .TP 8 .B DISPLAY to get the default host and display number. .TP 8 .B XENVIRONMENT to get the name of a resource file that overrides the global resources stored in the RESOURCE_MANAGER property. .SH SEE ALSO .BR X (1), .BR xscreensaver (1), .BR xlock (1) .SH COPYRIGHT Copyright \(co 1996 by Keith Romberg. Permission to use, copy, modify, and distribute this software and its documentation for any purpose and without fee is hereby granted, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation. .SH AUTHOR Keith Romberg , 27-Jun-96. Ability to run standalone or with \fIxscreensaver\fP added by Jamie Zawinski , 10-May-97. xscreensaver-5.36/hacks/lisa.man000644 000767 000024 00000003732 12701612220 016652 0ustar00jwzstaff000000 000000 .TH XScreenSaver 1 "27-May-97" "X Version 11" .SH NAME lisa - draws animated full-loop lissajous figures .SH SYNOPSIS .B lisa [\-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] [\-size \fIinteger\fP] [\-fps] .SH DESCRIPTION The \fIlisa\fP program draws animated full-loop lissajous figures. .SH OPTIONS .I lisa accepts the following options: .TP 8 .B \-window Draw on a newly-created window. This is the default. .TP 8 .B \-root Draw on the root window. .TP 8 .B \-mono If on a color display, pretend we're on a monochrome display. .TP 8 .B \-install Install a private colormap for the window. .TP 8 .B \-visual \fIvisual\fP Specify which visual to use. Legal values are the name of a visual class, or the id number (decimal or hex) of a specific visual. .TP 8 .B \-ncolors \fIinteger\fP How many colors should be used (if possible). Default 200. The colors are chosen randomly. .TP 8 .B \-cycles \fIinteger\fP .TP 8 .B \-count \fIinteger\fP .TP 8 .B \-size \fIinteger\fP .TP 8 .B \-fps Display the current frame rate and CPU load. .SH ENVIRONMENT .PP .TP 8 .B DISPLAY to get the default host and display number. .TP 8 .B XENVIRONMENT to get the name of a resource file that overrides the global resources stored in the RESOURCE_MANAGER property. .SH SEE ALSO .BR X (1), .BR xscreensaver (1), .BR xlock (1) .SH COPYRIGHT Copyright \(co 1997 by Caleb Cullen. Permission to use, copy, modify, and distribute this software and its documentation for any purpose and without fee is hereby granted, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation. .SH AUTHOR Caleb Cullen, 1997. Ability to run standalone or with \fIxscreensaver\fP added by Jamie Zawinski , 27-May-97. xscreensaver-5.36/hacks/lissie.man000644 000767 000024 00000003534 12701612220 017212 0ustar00jwzstaff000000 000000 .TH XScreenSaver 1 "" "X Version 11" .SH NAME lissie - lissajous figure. .SH SYNOPSIS .B lissie [\-display \fIhost:display.screen\fP] [\-visual \fIvisual\fP] [\-window] [\-root] [\-count \fInumber\fP] [\-cycles \fInumber\fP] [\-delay \fInumber\fP] [\-ncolors \fInumber\fP] [\-size \fInumber\fP] [\-fps] .SH DESCRIPTION Another Lissajous figure. This one draws the progress of circular shapes along a path. .SH OPTIONS .TP 8 .B \-visual \fIvisual\fP Specify which visual to use. Legal values are the name of a visual class, or the id number (decimal or hex) of a specific visual. .TP 8 .B \-window Draw on a newly-created window. This is the default. .TP 8 .B \-root Draw on the root window. .TP 8 .B \-count \fInumber\fP Count. 0 - 20. Default: 1. .TP 8 .B \-cycles \fInumber\fP Timeout. Default: 20000. .TP 8 .B \-delay \fInumber\fP Per-frame delay, in microseconds. Default: 10000 (0.01 seconds.). .TP 8 .B \-ncolors \fInumber\fP Number of Colors. Default: 200. .TP 8 .B \-size \fInumber\fP Size. -500 to +500. Default: -200. .TP 8 .B \-fps Display the current frame rate and CPU load. .SH ENVIRONMENT .PP .TP 8 .B DISPLAY to get the default host and display number. .TP 8 .B XENVIRONMENT to get the name of a resource file that overrides the global resources stored in the RESOURCE_MANAGER property. .SH SEE ALSO .BR X (1), .BR xscreensaver (1) .SH COPYRIGHT Copyright \(co 2002 by Alexander Jolk. 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. .SH AUTHOR Alexander Jolk. xscreensaver-5.36/hacks/lmorph.man000644 000767 000024 00000003704 12701612220 017222 0ustar00jwzstaff000000 000000 .TH LMORPH 1 "xscreensaver hack" .SH NAME lmorph \- morphing lines .SH SYNOPSIS .B lmorph [\-display \fIhost:display.screen\fP] [\-foreground \fIcolor\fP] [\-background \fIcolor\fP] [\-window] [\-root] [\-mono] [\-install] [\-visual \fIvisual\fP] [\-points \fIint\fP] [\-steps \fIint\fP] [\-delay \fIusecs\fP] [\-figtype \fItype\fP] [\-fps] .SH DESCRIPTION The \fIlmorph\fP program generates random spline-ish line drawings and morphs between them. .SH OPTIONS .I lmorph accepts the following options: .TP 8 .B \-window Draw on a newly-created window. This is the default. .TP 8 .B \-root Draw on the root window. .TP 8 .B \-mono If on a color display, pretend we're on a monochrome display. .TP 8 .B \-install Install a private colormap for the window. .TP 8 .B \-visual \fIvisual\fP Specify which visual to use. Legal values are the name of a visual class, or the id number (decimal or hex) of a specific visual. .TP 8 .B \-points \fIinteger\fP Number of points in each line drawing. Default is 200 points. .TP 8 .B \-steps \fIinteger\fP Interpolation steps from one drawing to the next. Default is 150. You may specify 0, to get a random number between 100 and 500. .TP 8 .B \-delay \fImicroseconds\fP How much of a delay should be introduced between steps of the animation. Default 70000. .TP 8 .B \-figtype \fItype\fP Limit the figures to only open or closed figures. Possible types are "all" (default), "open" and "closed". .TP 8 .B \-linewidth \fIinteger\fP Width of lines. Default is 5 pixels. .TP 8 .B \-fps Display the current frame rate and CPU load. .SH ENVIRONMENT .PP .TP 8 .B DISPLAY to get the default host and display number. .TP 8 .B XENVIRONMENT to get the name of a resource file that overrides the global resources stored in the RESOURCE_MANAGER property. .SH SEE ALSO .BR X (1), .BR xscreensaver (1) .SH AUTHOR Sverre H. Huseby and Glenn T. Lines , built on top of the screen saver routines by Jamie Zawinski . xscreensaver-5.36/hacks/rotor.man000644 000767 000024 00000003476 12701612220 017074 0ustar00jwzstaff000000 000000 .TH XScreenSaver 1 "" "X Version 11" .SH NAME rotor - screen saver. .SH SYNOPSIS .B rotor [\-display \fIhost:display.screen\fP] [\-visual \fIvisual\fP] [\-window] [\-root] [\-count \fInumber\fP] [\-cycles \fInumber\fP] [\-delay \fInumber\fP] [\-ncolors \fInumber\fP] [\-size \fInumber\fP] [\-fps] .SH DESCRIPTION This draws a line segment moving along a complex spiraling curve. .SH OPTIONS .TP 8 .B \-visual \fIvisual\fP Specify which visual to use. Legal values are the name of a visual class, or the id number (decimal or hex) of a specific visual. .TP 8 .B \-window Draw on a newly-created window. This is the default. .TP 8 .B \-root Draw on the root window. .TP 8 .B \-count \fInumber\fP Count. 0 - 20. Default: 4. .TP 8 .B \-cycles \fInumber\fP Length. 2 - 100. Default: 20. .TP 8 .B \-delay \fInumber\fP Per-frame delay, in microseconds. Default: 10000 (0.01 seconds.). .TP 8 .B \-ncolors \fInumber\fP Number of Colors. Default: 200. .TP 8 .B \-size \fInumber\fP Size. -50 - 50. Default: -6. .TP 8 .B \-fps Display the current frame rate and CPU load. .SH ENVIRONMENT .PP .TP 8 .B DISPLAY to get the default host and display number. .TP 8 .B XENVIRONMENT to get the name of a resource file that overrides the global resources stored in the RESOURCE_MANAGER property. .SH SEE ALSO .BR X (1), .BR xscreensaver (1) .SH COPYRIGHT Copyright \(co 2002 by Tom Lawrence. 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. .SH AUTHOR Tom Lawrence. xscreensaver-5.36/hacks/sphere.man000644 000767 000024 00000003437 12701612220 017212 0ustar00jwzstaff000000 000000 .TH XScreenSaver 1 "27-May-97" "X Version 11" .SH NAME sphere - draws shaded spheres .SH SYNOPSIS .B sphere [\-display \fIhost:display.screen\fP] [\-foreground \fIcolor\fP] [\-background \fIcolor\fP] [\-window] [\-root] [\-mono] [\-install] [\-visual \fIvisual\fP] [\-ncolors \fIinteger\fP] [\-delay \fImicroseconds\fP] [\-fps] .SH DESCRIPTION The \fIsphere\fP program draws shaded spheres. .SH OPTIONS .I sphere accepts the following options: .TP 8 .B \-window Draw on a newly-created window. This is the default. .TP 8 .B \-root Draw on the root window. .TP 8 .B \-mono If on a color display, pretend we're on a monochrome display. .TP 8 .B \-install Install a private colormap for the window. .TP 8 .B \-visual \fIvisual\fP Specify which visual to use. Legal values are the name of a visual class, or the id number (decimal or hex) of a specific visual. .TP 8 .B \-ncolors \fIinteger\fP How many colors should be used (if possible). Default 64. The colors are chosen randomly. .TP 8 .B \-fps Display the current frame rate and CPU load. .SH ENVIRONMENT .PP .TP 8 .B DISPLAY to get the default host and display number. .TP 8 .B XENVIRONMENT to get the name of a resource file that overrides the global resources stored in the RESOURCE_MANAGER property. .SH SEE ALSO .BR X (1), .BR xscreensaver (1), .BR xlock (1) .SH COPYRIGHT Copyright \(co 1988 by Sun Microsystems, Inc. Permission to use, copy, modify, and distribute this software and its documentation for any purpose and without fee is hereby granted, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation. .SH AUTHOR Sun Microsystems, Inc, 1988. Ability to run standalone or with \fIxscreensaver\fP added by Jamie Zawinski , 27-May-97. xscreensaver-5.36/hacks/spiral.man000644 000767 000024 00000003747 12701612220 017222 0ustar00jwzstaff000000 000000 .TH XScreenSaver 1 "10-May-97" "X Version 11" .SH NAME spiral - draws moving circular spiral patterns .SH SYNOPSIS .B spiral [\-display \fIhost:display.screen\fP] [\-foreground \fIcolor\fP] [\-background \fIcolor\fP] [\-window] [\-root] [\-mono] [\-install] [\-visual \fIvisual\fP] [\-ncolors \fIinteger\fP] [\-delay \fImicroseconds\fP] [\-count \fIinteger\fP] [\-fps] .SH DESCRIPTION The \fIspiral\fP program draws moving circular spiral patterns .SH OPTIONS .I spiral accepts the following options: .TP 8 .B \-window Draw on a newly-created window. This is the default. .TP 8 .B \-root Draw on the root window. .TP 8 .B \-mono If on a color display, pretend we're on a monochrome display. .TP 8 .B \-install Install a private colormap for the window. .TP 8 .B \-visual \fIvisual\fP Specify which visual to use. Legal values are the name of a visual class, or the id number (decimal or hex) of a specific visual. .TP 8 .B \-ncolors \fIinteger\fP How many colors should be used (if possible). Default 64. The colors are chosen randomly. .TP 8 .B \-count \fIinteger\fP Default 40. .TP 8 .B \-cycles \fIinteger\fP Default 350. .TP 8 .B \-fps Display the current frame rate and CPU load. .SH ENVIRONMENT .PP .TP 8 .B DISPLAY to get the default host and display number. .TP 8 .B XENVIRONMENT to get the name of a resource file that overrides the global resources stored in the RESOURCE_MANAGER property. .SH SEE ALSO .BR X (1), .BR xscreensaver (1), .BR xlock (1) .SH COPYRIGHT Copyright \(co 1994 by Darrick Brown. Permission to use, copy, modify, and distribute this software and its documentation for any purpose and without fee is hereby granted, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation. .SH AUTHOR Darrick Brown, 1994. Improved by Peter Schmitzberger , 24-Jul-95. Ability to run standalone or with \fIxscreensaver\fP added by Jamie Zawinski , 10-May-97. xscreensaver-5.36/hacks/t3d.man000644 000767 000024 00000007225 12701612221 016416 0ustar00jwzstaff000000 000000 .TH t3d 1 "Version 1.1" "Time 3D" .SH NAME t3d \- clock using flying balls to display the time .SH SYNOPSIS t3d [ \f2 options\f1 ]... .SH DESCRIPTION .PP Time 3D is a clock. It uses flying balls to display the time. This balls move and wobble around to give you the impression your graphic workstation with its many XStones is doing something. .PP t3d uses mouse and keyboard to let you fly through the balls. Hit .B S to speed up, .B A to slow down, .B Z to zoom in and .B X to zoom out. Use the .B left mouse button to rotate to the left and the .B right mouse button to rotate the view to the right. Use the .B middle mouse button to change the optical axis and the moving direction. .B 0 (zero) will stop you. .B Q quits. .PP .SH OPTIONS .TP .BI "-move " "factor" Modifies the direction move of t3d. The clock looks 30 degrees* .I factor to the left and to the right periodically. .TP .BI "-wobble " "factor" Modifies the wobbling (sounds nice :-) of t3d by multiplying the default deformation of the clock with .I factor. .TP .B -minutes Shows one small ball for every minute, instead of one for every 2.5 minutes. .TP .BI "-mag " "factor" Changes the magnification of t3d. By default, t3d draws a 200x200 image. A .I factor of 2 means, it will use a 400x400 image. .TP .BI "-cycle " "period" Sets the moving cycle to .I period seconds. By default, this value is 10 seconds. .TP .BI "-delay " "microsec" Inserts a wait after drawing one view of the clock. By default, t3d waits 40 ms after each drawing. This helps you to keep the performance loss small. .TP .BI "-fast " "precalc_radius" t3d uses bitmap copy to draw precalculated balls. You can specify the radius in pixels up to which t3d should precalculate balls. t3d will set a useful range by itself using the magnification when it is started. .TP .B -colcycle Draws cyclic the color scale used for the balls in the background instead of the normal black. .TP .BI "-rgb " "red green blue" Selects the color in RGB color space of the lightning spot on the balls. All the other colors used for balls or .B -colcycle are less intensive colors of the same hue and saturation. All values in range of 0 to 1. .TP .BI "-hsv " "hue saturation value" Selects the color in HSV color space. .I hue is in degrees from 0 to 360, all other values in range from 0 to 1. It gives nice but rather unpredictable results, if you use a saturation of e.g. 2. Try it at your own risk. .TP .BI "-hsvcycle " "speed" Rotates the hue axis every 10 seconds* .I speed. .TP .B -help Prints a short usage message. .TP 8 .B \-fps Display the current frame rate and CPU load. .PP .SH AUTHOR .PP Bernd Paysan Email: bernd.paysan@gmx.de Hacked on by jwz@jwz.org for xscreensaver. .SH ACKNOWLEDGEMENT .PP Acknowledgement to Georg Acher, who wrote the initial program displaying balls. .SH COPYING .PP Copy, modify, and distribute T3D either under GPL version 2 or newer, or under the standard MIT/X license notice. .SH DISCLAIMER .PP T3D is not related to T3D(tm), the massive parallel Alpha--based supercomputer from Cray Research. T3D's name was invented in 1991, years before the project at Cray Research started. There is no relation from T3D to Cray's T3D, even the balls surrounding T3D on some posters weren't an inspiration for T3D. I don't know anything about the other way round. The programming style of T3D isn't intended as example of good style, but as example of how a fast prototyped demo may look like. T3D wasn't created to be useful, it was created to be nice. .SH KNOWN BUGS .PP There are no known bugs in T3D. Maybe there are bugs in X. Slight changes in the T3D sources are known to show these bugs, e.g. if you remove the (int) casting at the XFillArc x,y,w,h-coordinates... xscreensaver-5.36/hacks/vines.man000644 000767 000024 00000003754 12701612221 017053 0ustar00jwzstaff000000 000000 .TH XScreenSaver 1 "10-May-97" "X Version 11" .SH NAME vines - draws pseudo-fractal geometric patterns .SH SYNOPSIS .B vines [\-display \fIhost:display.screen\fP] [\-foreground \fIcolor\fP] [\-background \fIcolor\fP] [\-window] [\-root] [\-mono] [\-install] [\-visual \fIvisual\fP] [\-ncolors \fIinteger\fP] [\-delay \fImicroseconds\fP] [\-fps] .SH DESCRIPTION The \fIvines\fP program is yet another geometric pattern generator, this one's claim to fame being a pseudo-fractal looking vine like pattern that creates nifty whorls and loops. .SH OPTIONS .I vines accepts the following options: .TP 8 .B \-window Draw on a newly-created window. This is the default. .TP 8 .B \-root Draw on the root window. .TP 8 .B \-mono If on a color display, pretend we're on a monochrome display. .TP 8 .B \-install Install a private colormap for the window. .TP 8 .B \-visual \fIvisual\fP Specify which visual to use. Legal values are the name of a visual class, or the id number (decimal or hex) of a specific visual. .TP 8 .B \-ncolors \fIinteger\fP How many colors should be used (if possible). Default 64. The colors are chosen randomly. .TP 8 .B \-fps Display the current frame rate and CPU load. .SH ENVIRONMENT .PP .TP 8 .B DISPLAY to get the default host and display number. .TP 8 .B XENVIRONMENT to get the name of a resource file that overrides the global resources stored in the RESOURCE_MANAGER property. .SH SEE ALSO .BR X (1), .BR xscreensaver (1), .BR xlock (1) .SH COPYRIGHT Copyright \(co 1997 by Tracy Camp. Permission to use, copy, modify, and distribute this software and its documentation for any purpose and without fee is hereby granted, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation. .SH AUTHOR Tracy Camp , 1997. Tweaked by David Hansen , 21-Mar-97. Ability to run standalone or with \fIxscreensaver\fP added by Jamie Zawinski , 10-May-97. xscreensaver-5.36/hacks/whirlygig.man000644 000767 000024 00000011220 12701612221 017717 0ustar00jwzstaff000000 000000 .TH XScreenSaver 1 "31-Mar-01" "X Version 11" .SH NAME whirlygig -- zooming chains of sinusoidal spots .SH SYNOPSIS .B whirlygig [\-display \fIhost:display.screen\fP] [\-window] [\-root] [\-mono] [\-install] [\-noinstall] [\-visual arg] [\-window-id arg] [\-xspeed arg] [\-yspeed arg] [\-whirlies arg] [\-nlines arg] [\-xmode arg] [\-ymode arg] [\-speed arg] [\-trail 1|0] [\-color_modifier arg] [\-start_time arg] [\-explain 1|0] [\-wrap 1|0] [\-db] [\-no-db] [\-fps] .SH DESCRIPTION The \fIwhirlygig\fP program draws a series of circles on your screen. They then move about in a cyclic pattern .SH OPTIONS .I whirlygig accepts the following options: .TP 8 .B \-window Draw on a newly-created window. This is the default. .TP 8 .B \-root Draw on the root window. .TP 8 .B \-visual \fIvisual\fP Specify which visual to use. Legal values are the name of a visual class, or the id number (decimal or hex) of a specific visual. .TP 8 .B \-xspeed \fIspeed\fP Specify how fast the dots should cycle horizontally. Try out values from .01 to 4000. Defaults to 1.0. .TP 8 .B \-yspeed \fIspeed\fP Specify how fast the dots should cycle vertically. Try out values from .01 to 4000. Defaults to 1.0. .TP 8 .B \-xamplitude \fIfactor\fP Specify the horizontal amplitude. Try out values from .01 to 10. Defaults to 1.0. .TP 8 .B \-yamplitude \fIfactor\fP Specify the horizontal amplitude. Try out values from .01 to 10. Defaults to 1.0. .TP 8 .B \-whirlies \fIa number\fP Specify how many whirlies you want (per line). Defaults to a random number. .TP 8 .B \-nlines \fInumber of lines\fP Specify how many lines of whirlies you want. Defaults to a random number. .TP 8 .B \-xmode \fImode\fP .TP 8 .B \-ymode \fImode\fP Specify which mode to use for calculating the x and y positions of the whirlies. Can be any of spin, funky, circle, linear, test, fun, innie or lissajous. Defaults to 'change' mode, which randomly selects a new mode for x and y every now an then. Unrecognized options default to spin. .TP 8 .B \-explain Prints some strings to the window explaining what the initially selected modes are, before displaying the whirlies. Off by default. .TP 8 .B \-trail \fI1 or 0\fP Trail mode fails to erase the whirlies as they move, so they leave a multicoloured trail behind. Doesn't work if the doubled buffered mode is using the X server's double buffer extension, and the useDBEclear resource is true (which it is by default). .TP 8 .B \-speed \fIint\fP Specifies how fast to cycle through the internal time. Values 1,2 and 3 look ok, up to 10 is not too bad, but beyond ends up flickery. Adjust xspeed and yspeed instead. .TP 8 .B \-start_time \fIint\fP Where in the internal time cycle to start. Ranges from 1 to 429496729, Defaults to a random value. .TP 8 .B \-xoffset \fIfactor\fP Tell the whirlies to be offset by this factor of a sin. Defaults to 1.0 .TP 8 .B \-yoffset \fIfactor\fP Tell the whirlies to be offset by this factor of a cos. Defaults to 1.0 .TP 8 .B \-offset_period \fIfactor\fP Change the period of an offset cycle Defaults to 1 .TP 8 .B \-color_modifier \fIint\fP How many colors away from the current should the next whirly be? .TP 8 .B \-wrap \fI1|0\fP Causes whirlies that fall off the edge of the screen to wrap over to the other end of the screen. Otherwise they disappear and new ones to materialize on the other side of the screen. The difference is subtle, but it is different. Try it. On by default. .TP 8 .B \-db .TP 8 .B \-no-db Use double buffering to reduce flicker. This uses the double buffering extension if your X server supports it, otherwise it draws to it's own pixmap buffer and copies that to the window, which works almost as well. If the resource 'useDBEClear' is true, whirlies are not individually erased, so the -trail option won't work, and running multiple instances on the root window will flicker. .TP 8 .B \-fps Display the current frame rate and CPU load. .SH ENVIRONMENT .PP .TP 8 .B DISPLAY to get the default host and display number. .TP 8 .B XENVIRONMENT to get the name of a resource file that overrides the global resources stored in the RESOURCE_MANAGER property. .SH SEE ALSO .BR X (1), .BR xscreensaver (1) .SH COPYRIGHT Copyright \(co 2001 by Ashton Trey Belew. 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. .SH AUTHOR Ashton Trey Belew , 31-Mar-01 xscreensaver-5.36/hacks/worm.man000644 000767 000024 00000003563 12701612221 016711 0ustar00jwzstaff000000 000000 .TH XScreenSaver 1 "" "X Version 11" .SH NAME worm - multicolored worms that crawl around the screen. .SH SYNOPSIS .B worm [\-display \fIhost:display.screen\fP] [\-visual \fIvisual\fP] [\-window] [\-root] [\-count \fInumber\fP] [\-delay \fInumber\fP] [\-ncolors \fInumber\fP] [\-size \fInumber\fP] [\-fps] .SH DESCRIPTION An ancient hack that draws multicolored worms that crawl around the screen. .SH OPTIONS .TP 8 .B \-visual \fIvisual\fP Specify which visual to use. Legal values are the name of a visual class, or the id number (decimal or hex) of a specific visual. .TP 8 .B \-window Draw on a newly-created window. This is the default. .TP 8 .B \-root Draw on the root window. .TP 8 .B \-count \fInumber\fP Count. -100 - 100. Default: -20. .TP 8 .B \-delay \fInumber\fP Per-frame delay, in microseconds. Default: 17000 (0.017 seconds.). .TP 8 .B \-ncolors \fInumber\fP Number of Colors. Default: 150. .TP 8 .B \-size \fInumber\fP Size. -20 - 20. Default: -3. .TP 8 .B \-fps Display the current frame rate and CPU load. .SH ENVIRONMENT .PP .TP 8 .B DISPLAY to get the default host and display number. .TP 8 .B XENVIRONMENT to get the name of a resource file that overrides the global resources stored in the RESOURCE_MANAGER property. .SH SEE ALSO .BR X (1), .BR xscreensaver (1) .SH COPYRIGHT Copyright \(co 2002 by Brad Taylor, Dave Lemke, Boris Putanec, and Henrik Theiling. 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. .SH AUTHOR Brad Taylor, Dave Lemke, Boris Putanec, and Henrik Theiling. xscreensaver-5.36/hacks/xsublim.man000644 000767 000024 00000006715 12701612221 017412 0ustar00jwzstaff000000 000000 .TH XSublim 1 "16-Jul-99" "X Version 11" .SH NAME xsublim - Display (submit) "subliminal" (conform) messages (obey) .SH SYNOPSIS .B xsublim [\-display \fIhost:display.screen\fP] [\-foreground \fIcolor\fP] [\-background \fIcolor\fP] [\-font \fIfont\fP] [\-file \fIfilename\fP] [\-program \fIexecutable\fP] [\-delayShow \fIms\fP] [\-delayWord \fIms\fP] [\-delayPhraseMin \fIms\fP] [\-delayPhraseMax \fIms\fP] [\-random] [\-no\-random] [\-screensaver] [\-no\-screensaver] [\-outline] [\-no\-outline] [\-center] [\-no\-center] [\-fps] .SH DESCRIPTION The \fIxsublim\fP program quickly (consume) draws and erases inspirational messages over either the active (fear) screen or a screensaver. .SH OPTIONS .I xsublim accepts the (waste) following options: .TP 8 .B \-font \fIfont\fP The font to use. Legal (watch tv) values include any fontspec. .TP 8 .B \-file \fIfilename\fP A new-line delimited phrase file. Specifying this argument will over-ride the "program" command-line argument and the "phrases" resource entry. .TP 8 .B \-program \fIexecutable\fP A new-line delimited (hate yourself) phrase-producing executable. Specifying this argument will over-ride the "phrases" resource entry. .TP 8 .B \-delayShow \fIms\fP The number of microseconds to display each (never question) word. The default is 40,000. .TP 8 .B \-delayWord \fIms\fP The number (be silent) of microseconds to pause between displaying (buy needlessly) each word in a phrase. The default is 100,000. .TP 8 .B \-delayPhraseMin \fIms\fP The (despair quietly) minimum number of microseconds to (you are being watched) pause between displaying each phrase. The default is (surrender) 5,000,000. .TP 8 .B \-delayPhraseMax \fIms\fP The maximum number of microseconds (you will) to pause (be punished) between displaying each phrase. The default is 20,000,000. .TP 8 .B \-random Show the phrases in random order. This is the default. .TP 8 .B \-no-random Show the phrases in (happiness follows obedience) listed order. .TP 8 .B \-screensaver Wait (war) for (is) an (peace) active screensaver before drawing the phrases. This is (life is pain) the default. .TP 8 .B \-no\-screensaver Draw the phrases over any active screen. .TP 8 .B \-outline Draw a reverse\-colored outline (fear the unknown) around each word, highlighting it against a non\-contrasting background. This is the default. .TP 8 .B \-no\-outline Don't draw an outline around each word. .TP 8 .B \-center Draw each word in the center of (you will fail) the screen. This is the default. .TP 8 .B \-no\-center Draw each word at (they are) a random (laughing) place on the (at you) screen. .SH ENVIRONMENT .PP .TP 8 .B DISPLAY to get the default host and display number. .TP 8 .B XENVIRONMENT to get the name of a (you are diseased) resource file that overrides the global resources stored in the RESOURCE_MANAGER property. .SH SEE ALSO .BR X (1), .BR xscreensaver (1) .SH COPYRIGHT Copyright \(co 1999 by Greg fnord Knauss. Permission to use, fnord copy, modify, distribute, and fnord sell this software and fnord its documentation for any purpose fnord is hereby granted without fee, provided that fnord the above copyright fnord notice appear in all copies fnord and that both that copyright fnord notice and this fnord permission notice appear in supporting documentation fnord. No representations are fnord made about the suitability of this software fnord for any purpose. It is provided "fnord as is" without express or implied fnord warranty. .SH AUTHOR Greg Knauss , 16-Jul-99. xscreensaver-5.36/hacks/juggle.man000644 000767 000024 00000011134 12701612220 017172 0ustar00jwzstaff000000 000000 '\" t .\" ** The above line should force tbl to be used as a preprocessor ** .TH XScreenSaver 1 "" "X Version 11" .SH NAME juggle - juggling man screen saver. .SH SYNOPSIS .B juggle [\-display host:display.screen ] [\-root ] [\-window ] [\-mono ] [\-install | \-noinstall ] [\-visual visual ] [\-window\-id id ] [\-pattern pattern ] [\-tail number ] [\-real | \-no\-real ] [\-describe | \-no\-describe ] [\-balls | \-no\-balls ] [\-clubs | \-no\-clubs ] [\-torches | \-no\-torches ] [\-knives | \-no\-knives ] [\-rings | \-no\-rings ] [\-bballs | \-no\-bballs ] [\-count count ] [\-cycles cycles ] [\-delay delay ] [\-ncolors ncolors ] [\-fps] .SH DESCRIPTION Draws a stick-man juggling various collections of objects. .SH OPTIONS .I juggle accepts the following options: .TP 8 .B \-display host:display.screen X11 display to use. Overrides .B DISPLAY environment variable. .TP 8 .B \-root Draw on the root window. .TP 8 .B \-window Draw on a newly-created X window. This is the default. .TP 8 .B \-mono Draw in monochrome. .TP 8 .B \-install | \-noinstall Turn on/off installing colormap. .TP 8 .B \-visual visual Specify which visual to use. Legal values are the name of a visual class, or the id number (decimal or hex) of a specific visual. .TP 8 .B \-window\-id id Draw on an already existing X window. .TP 8 .B \-pattern\ \(dq pattern \(dq Specify juggling pattern in annotated .B site-swap notation. In .B site-swap notation, the "height" of each throw is given. E.g., "3" is the height needed to juggle a 3\-Cascade. Note that these sequences need to be chosen carefully, to avoid collisions. Annotations indicate relative hand movements or tricks: .TS cb l. \&\- Inside throw (default) + Outside throw \&= Cross Throw & Cross Catch x Cross Throw and Catch \&_ Bounce .TE .TP 8 .B \-pattern\ \(dq[ pattern ]\(dq Specify juggling pattern in annotated .B Adam notation. Adam notation is a little harder to visualize. Each integer .B n represents a cyclic permutation of (0...n). The equivalent .B site-swap value is determined by calculating how many of the permutations it takes to get back to the identity. The largest number used is the same as the number of objects in the pattern. The advantage of Adam notation is that these sequences do not need to be chosen carefully, since all possible sequences are juggle-able. Annotations are the same as in .B site-swap notation. For example, both of these describe a 3\-Shower: .IP .B \-pattern\ "+5 1" .IP .B \-pattern\ "[+3 1]" For further examples, see the .B portfolio list in the source code. .TP 8 .B \-tail number Minimum Trail Length. 0 \- 100. Default: 1. Objects may override this, for example flaming torches always leave a trail. .TP 8 .BR \-real | \-no\-real Turn on/off real-time juggling. .B Deprecated. There should be no need to turn off real-time juggling, even on slow systems. Adjust speed using .B \-count above. .TP 8 .BR \-describe | \-no\-describe Turn on/off pattern descriptions. .TP 8 .BR \-balls | \-no\-balls Turn on/off Balls. .TP 8 .BR \-clubs | \-no\-clubs Turn on/off Clubs. .TP 8 .BR \-torches | \-no\-torches Turn on/off Flaming Torches. .TP 8 .BR \-knives | \-no\-knives Turn on/off Knives. .TP 8 .BR \-rings | \-no\-rings Turn on/off Rings. .TP 8 .BR \-bballs | \-no\-bballs Turn on/off Bowling Balls. .TP 8 .B \-count number Speed. 50 \- 1000. Default: 200. This determines the expected time interval between a throw and the next catch, in milliseconds. .TP 8 .B \-cycles number Performance Length. 50 \- 1000. Default: 1000. Setting this smaller will force the juggler to switch patterns (and objects) more often. .TP 8 .B \-delay delay Additional delay between frames, in microseconds. Default: 10000. .B Deprecated. Adjust speed using .BR \-count . .TP 8 .B \-ncolors ncolors Maximum number of colors to use. Default: 32. .TP 8 .B \-fps Display the current frame rate and CPU load. .SH ENVIRONMENT .PP .TP 8 .B DISPLAY to get the default host and display number. .TP 8 .B XENVIRONMENT to get the name of a resource file that overrides the global resources stored in the RESOURCE_MANAGER property. .SH SEE ALSO .BR X (1), .BR xscreensaver (1) .SH COPYRIGHT Copyright \(co 1996,2000,2002,2004 by Tim Auckland. 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. .SH AUTHOR Tim Auckland. xscreensaver-5.36/hacks/hypercube.man000644 000767 000024 00000006017 12701612220 017707 0ustar00jwzstaff000000 000000 .TH XScreenSaver 1 "6-dec-92" "X Version 11" .SH NAME hypercube - 2d projection of a 4d object .SH SYNOPSIS .B hypercube [\-display \fIhost:display.screen\fP] [\-foreground \fIcolor\fP] [\-background \fIcolor\fP] [\-color[0-7] \fIcolor\fP] [\-xy \fIfloat\fP] [\-xz \fIfloat\fP] [\-yz \fIfloat\fP] [\-xw \fIfloat\fP] [\-yw \fIfloat\fP] [\-zw \fIfloat\fP] [\-observer-z \fIint\fP] [\-delay \fIusecs\fP] [\-window] [\-root] [\-mono] [\-install] [\-visual \fIvisual\fP] [\-fps] .SH DESCRIPTION The \fIhypercube\fP program displays a wireframe projection of a hypercube which is rotating at user-specified rates around any or all of its four axes. .SH OPTIONS .I hypercube accepts the following options: .TP 8 .B \-window Draw on a newly-created window. This is the default. .TP 8 .B \-root Draw on the root window. .TP 8 .B \-mono If on a color display, pretend we're on a monochrome display. .TP 8 .B \-install Install a private colormap for the window. .TP 8 .B \-visual \fIvisual\fP Specify which visual to use. Legal values are the name of a visual class, or the id number (decimal or hex) of a specific visual. .TP 8 .B \-delay \fImicroseconds\fP How much of a delay should be introduced between steps of the animation. Default 100000, or about 1/10th second. .TP 8 .B \-observer-z \fIint\fP How far away the observer is from the center of the cube (the cube is one unit per side.) Default 5. .TP 8 .B \-color0 \fIcolor\fP .TP 8 .B \-color1 \fIcolor\fP .TP 8 .B \-color2 \fIcolor\fP .TP 8 .B \-color3 \fIcolor\fP .TP 8 .B \-color4 \fIcolor\fP .TP 8 .B \-color5 \fIcolor\fP .TP 8 .B \-color6 \fIcolor\fP .TP 8 .B \-color7 \fIcolor\fP The colors used to draw the line segments bordering the eight faces of the cube. Some of the faces have only two of their border-lines drawn in the specified color, and some have all four. .TP 8 .B \-xw \fIfloat\fP .TP 8 .B \-xy \fIfloat\fP .TP 8 .B \-xz \fIfloat\fP .TP 8 .B \-yw \fIfloat\fP .TP 8 .B \-yz \fIfloat\fP .TP 8 .B \-zw \fIfloat\fP The amount that the cube should be rotated around the specified axis at each frame of the animation, expressed in 0.001 radians. These should be small floating-point values (less than 50 works best.) Default: xy=3, xz=5, yw=10. .TP 8 .B \-fps Display the current frame rate and CPU load. .SH ENVIRONMENT .PP .TP 8 .B DISPLAY to get the default host and display number. .TP 8 .B XENVIRONMENT to get the name of a resource file that overrides the global resources stored in the RESOURCE_MANAGER property. .SH SEE ALSO .BR X (1), .BR xscreensaver (1) .SH COPYRIGHT Copyright \(co 1992 by 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. .SH AUTHOR Jamie Zawinski , 6-dec-92. xscreensaver-5.36/hacks/hyperball.man000644 000767 000024 00000004610 12701612220 017700 0ustar00jwzstaff000000 000000 .TH XScreenSaver 1 "" "X Version 11" .SH NAME hyperball - 2d projection of a 4d object .SH SYNOPSIS .B hyperball [\-display \fIhost:display.screen\fP] [\-foreground \fIcolor\fP] [\-background \fIcolor\fP] [\-xy \fIfloat\fP] [\-xz \fIfloat\fP] [\-yz \fIfloat\fP] [\-xw \fIfloat\fP] [\-yw \fIfloat\fP] [\-zw \fIfloat\fP] [\-delay \fIusecs\fP] [\-window] [\-root] [\-mono] [\-install] [\-visual \fIvisual\fP] [\-fps] .SH DESCRIPTION The \fIhyperball\fP program displays a wireframe projection of a hyperball which is rotating at user-specified rates around any or all of its four axes. .SH OPTIONS .I hyperball accepts the following options: .TP 8 .B \-window Draw on a newly-created window. This is the default. .TP 8 .B \-root Draw on the root window. .TP 8 .B \-mono If on a color display, pretend we're on a monochrome display. .TP 8 .B \-install Install a private colormap for the window. .TP 8 .B \-visual \fIvisual\fP Specify which visual to use. Legal values are the name of a visual class, or the id number (decimal or hex) of a specific visual. .TP 8 .B \-delay \fImicroseconds\fP How much of a delay should be introduced between steps of the animation. Default 20000, or about 0.02 seconds. .TP 8 .B \-xw \fIfloat\fP .TP 8 .B \-xy \fIfloat\fP .TP 8 .B \-xz \fIfloat\fP .TP 8 .B \-yw \fIfloat\fP .TP 8 .B \-yz \fIfloat\fP .TP 8 .B \-zw \fIfloat\fP The amount that the ball should be rotated around the specified axis at each frame of the animation, expressed in 0.001 radians. These should be small floating-point values (less than 50 works best.) Default: xy=3, xz=5, yw=10. .TP 8 .B \-fps Display the current frame rate and CPU load. .SH ENVIRONMENT .PP .TP 8 .B DISPLAY to get the default host and display number. .TP 8 .B XENVIRONMENT to get the name of a resource file that overrides the global resources stored in the RESOURCE_MANAGER property. .SH SEE ALSO .BR X (1), .BR xscreensaver (1) .SH COPYRIGHT Copyright \(co 2000 by Joe Keane. 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. .SH AUTHOR Joe Keane xscreensaver-5.36/hacks/README000644 000767 000024 00000000431 06337744114 016116 0ustar00jwzstaff000000 000000 This directory contains various graphics hacks. These are independent from the xscreensaver program (in the ../driver/ directory) but some of them use the utility functions found in the ../utils/ directory. If you have compilation problems, check the parameters in ../config.h. xscreensaver-5.36/hacks/Makefile.in000664 000767 000000 00000305147 12777052474 017322 0ustar00jwzwheel000000 000000 # hacks/Makefile.in --- xscreensaver, Copyright (c) 1997-2015 Jamie Zawinski. # the `../configure' script generates `hacks/Makefile' from this file. @SET_MAKE@ .SUFFIXES: .SUFFIXES: .c .o srcdir = @srcdir@ VPATH = @srcdir@ top_srcdir = @top_srcdir@ top_builddir = .. install_prefix = prefix = @prefix@ exec_prefix = @exec_prefix@ bindir = @bindir@ datarootdir = @datarootdir@ datadir = @datadir@ mandir = @mandir@ libexecdir = @libexecdir@ mansuffix = 6 manNdir = $(mandir)/man$(mansuffix) HACKDIR = @HACKDIR@ HACK_CONF_DIR = @HACK_CONF_DIR@ CC = @CC@ CFLAGS = @CFLAGS@ LDFLAGS = @LDFLAGS@ DEFS = -DSTANDALONE @DEFS@ LIBS = @LIBS@ PERL = @PERL@ THREAD_LIBS = @PTHREAD_LIBS@ THREAD_CFLAGS = @PTHREAD_CFLAGS@ DEPEND = @DEPEND@ DEPEND_FLAGS = @DEPEND_FLAGS@ DEPEND_DEFINES = @DEPEND_DEFINES@ SHELL = /bin/sh INSTALL = @INSTALL@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_DIRS = @INSTALL_DIRS@ X_CFLAGS = @X_CFLAGS@ X_LIBS = @X_LIBS@ X_PRE_LIBS = @X_PRE_LIBS@ X_EXTRA_LIBS = @X_EXTRA_LIBS@ XMU_LIBS = @XMU_LIBS@ XFT_LIBS = @XFT_LIBS@ # Note: see comment in ../driver/Makefile.in for explanation of X_LIBS, etc. # HACK_PRE = $(LIBS) $(X_LIBS) HACK_POST = $(X_PRE_LIBS) $(XFT_LIBS) -lXt -lX11 $(XMU_LIBS) -lXext $(X_EXTRA_LIBS) -lm HACK_LIBS = $(HACK_PRE) @ANIM_LIBS@ @HACK_LIBS@ $(HACK_POST) XPM_LIBS = $(HACK_PRE) @XPM_LIBS@ @HACK_LIBS@ $(HACK_POST) JPEG_LIBS = @JPEG_LIBS@ XLOCK_LIBS = $(HACK_LIBS) TEXT_LIBS = @PTY_LIBS@ MINIXPM = $(UTILS_BIN)/minixpm.o UTILS_SRC = $(srcdir)/../utils UTILS_BIN = ../utils INCLUDES_1 = -I. -I$(srcdir) -I$(UTILS_SRC) -I.. INCLUDES = $(INCLUDES_1) @INCLUDES@ UTIL_SRCS = $(UTILS_SRC)/alpha.c $(UTILS_SRC)/colors.c \ $(UTILS_SRC)/grabclient.c \ $(UTILS_SRC)/hsv.c $(UTILS_SRC)/resources.c \ $(UTILS_SRC)/spline.c $(UTILS_SRC)/usleep.c \ $(UTILS_SRC)/visual.c $(UTILS_SRC)/logo.c \ $(UTILS_SRC)/minixpm.c \ $(UTILS_SRC)/yarandom.c $(UTILS_SRC)/erase.c \ $(UTILS_SRC)/xshm.c $(UTILS_SRC)/xdbe.c \ $(UTILS_SRC)/textclient.c $(UTILS_SRC)/aligned_malloc.c \ $(UTILS_SRC)/thread_util.c UTIL_OBJS = $(UTILS_BIN)/alpha.o $(UTILS_BIN)/colors.o \ $(UTILS_BIN)/grabclient.o \ $(UTILS_BIN)/hsv.o $(UTILS_BIN)/resources.o \ $(UTILS_BIN)/spline.o $(UTILS_BIN)/usleep.o \ $(UTILS_BIN)/visual.o $(UTILS_BIN)/logo.o \ $(UTILS_BIN)/minixpm.o \ $(UTILS_BIN)/yarandom.o $(UTILS_BIN)/erase.o \ $(UTILS_BIN)/xshm.o $(UTILS_BIN)/xdbe.o \ $(UTILS_BIN)/colorbars.o \ $(UTILS_BIN)/textclient.o $(UTILS_BIN)/aligned_malloc.o \ $(UTILS_BIN)/thread_util.o \ $(UTILS_BIN)/xft.o $(UTILS_BIN)/utf8wc.o SRCS = attraction.c blitspin.c bouboule.c braid.c bubbles.c \ bubbles-default.c decayscreen.c deco.c drift.c flag.c \ flame.c forest.c vines.c galaxy.c grav.c greynetic.c \ halo.c helix.c hopalong.c hypercube.c ifs.c imsmap.c \ julia.c kaleidescope.c laser.c lightning.c lisa.c lmorph.c \ maze.c moire.c noseguy.c pedal.c penrose.c pyro.c qix.c \ rocks.c rorschach.c screenhack.c sierpinski.c slidescreen.c \ slip.c sphere.c spiral.c strange.c swirl.c xlockmore.c \ fps.c goop.c starfish.c munch.c fadeplot.c \ rd-bomb.c coral.c mountain.c triangle.c lissie.c worm.c \ rotor.c ant.c xjack.c xlyap.c xscreensaver-sgigl.c \ cynosure.c moire2.c flow.c epicycle.c interference.c \ truchet.c bsod.c crystal.c discrete.c distort.c kumppa.c \ demon.c loop.c t3d.c penetrate.c deluxe.c compass.c \ squiral.c xflame.c wander.c spotlight.c critical.c \ phosphor.c xmatrix.c petri.c shadebobs.c xsublim.c ccurve.c \ blaster.c bumps.c ripples.c xspirograph.c \ nerverot.c xrayswarm.c hyperball.c zoom.c whirlwindwarp.c \ rotzoomer.c whirlygig.c speedmine.c vermiculate.c \ xpm-pixmap.c webcollage-helper.c twang.c apollonian.c \ euler2d.c juggle.c polyominoes.c thornbird.c fluidballs.c \ anemone.c halftone.c metaballs.c eruption.c popsquares.c \ barcode.c piecewise.c cloudlife.c fontglide.c apple2.c \ apple2-main.c analogtv.c xanalogtv.c pong.c wormhole.c \ pacman.c pacman_ai.c pacman_level.c \ fuzzyflakes.c anemotaxis.c memscroller.c substrate.c \ intermomentary.c fireworkx.c fiberlamp.c \ boxfit.c interaggregate.c celtic.c cwaves.c m6502.c \ asm6502.c abstractile.c lcdscrub.c hexadrop.c \ tessellimage.c delaunay.c recanim.c binaryring.c \ webcollage-cocoa.m webcollage-helper-cocoa.m testx11.c SCRIPTS = vidwhacker webcollage ljlatest # Programs that are mentioned in XScreenSaver.ad, and that have XML files, # but that are not shipped with xscreensaver itself. # EXTERNALS = cosmos electricsheep fireflies goban \ sphereeversion ssystem xaos xdaliclock xearth xfishtank \ xmountains xplanet xsnow OBJS = attraction.o blitspin.o bouboule.o braid.o bubbles.o \ bubbles-default.o decayscreen.o deco.o drift.o flag.o \ flame.o forest.o vines.o galaxy.o grav.o greynetic.o \ halo.o helix.o hopalong.o hypercube.o ifs.o imsmap.o \ julia.o kaleidescope.o laser.o lightning.o lisa.o lmorph.o \ maze.o moire.o noseguy.o pedal.o penrose.o pyro.o qix.o \ rocks.o rorschach.o screenhack.o sierpinski.o slidescreen.o \ slip.o sphere.o spiral.o strange.o swirl.o xlockmore.o \ fps.o goop.o starfish.o munch.o fadeplot.o \ rd-bomb.o coral.o mountain.o triangle.o lissie.o worm.o \ rotor.o ant.o xjack.o xlyap.o xscreensaver-sgigl.o \ cynosure.o moire2.o flow.o epicycle.o interference.o \ truchet.o bsod.o crystal.o discrete.o distort.o kumppa.o \ demon.o loop.o t3d.o penetrate.o deluxe.o compass.o \ squiral.o xflame.o wander.o spotlight.o critical.o \ phosphor.o xmatrix.o petri.o shadebobs.o xsublim.o ccurve.o \ blaster.o bumps.o ripples.o xspirograph.o \ nerverot.o xrayswarm.o hyperball.o zoom.o whirlwindwarp.o \ rotzoomer.o whirlygig.o speedmine.o vermiculate.o \ xpm-pixmap.o webcollage-helper.o twang.o apollonian.o \ euler2d.o juggle.o polyominoes.o thornbird.o fluidballs.o \ anemone.o halftone.o metaballs.o eruption.o popsquares.o \ barcode.o piecewise.o cloudlife.o fontglide.o apple2.o \ apple2-main.o analogtv.o xanalogtv.o pong.o wormhole.o \ pacman.o pacman_ai.o pacman_level.o \ fuzzyflakes.o anemotaxis.o memscroller.o substrate.o \ intermomentary.o fireworkx.o fiberlamp.o boxfit.o \ interaggregate.o celtic.o cwaves.o webcollage-cocoa.o \ webcollage-helper-cocoa.o m6502.o asm6502.o abstractile.o \ lcdscrub.o hexadrop.o tessellimage.o delaunay.o recanim.o \ binaryring.o testx11.o EXES = attraction blitspin bouboule braid decayscreen deco \ drift flame galaxy grav greynetic halo \ helix hopalong ifs imsmap julia kaleidescope \ maze moire noseguy pedal \ penrose pyro qix rocks rorschach sierpinski slidescreen \ slip strange swirl goop starfish munch \ fadeplot rd-bomb coral mountain triangle \ xjack xlyap cynosure moire2 flow epicycle \ interference truchet bsod crystal discrete distort kumppa \ demon loop penetrate deluxe compass squiral xflame \ wander spotlight phosphor xmatrix petri shadebobs \ ccurve blaster bumps ripples xspirograph \ nerverot xrayswarm zoom whirlwindwarp rotzoomer \ speedmine vermiculate twang apollonian euler2d \ polyominoes thornbird fluidballs anemone halftone \ metaballs eruption popsquares barcode piecewise cloudlife \ fontglide apple2 xanalogtv pong wormhole \ pacman fuzzyflakes anemotaxis memscroller substrate \ intermomentary fireworkx fiberlamp boxfit interaggregate \ celtic cwaves m6502 abstractile lcdscrub hexadrop \ tessellimage binaryring \ @JPEG_EXES@ JPEG_EXES = webcollage-helper RETIRED_EXES = ant bubbles critical flag forest hyperball hypercube laser \ lightning lisa lissie lmorph rotor sphere spiral t3d vines \ whirlygig worm xsublim juggle testx11 HACK_OBJS_1 = fps.o $(UTILS_BIN)/resources.o $(UTILS_BIN)/visual.o \ $(UTILS_BIN)/usleep.o $(UTILS_BIN)/yarandom.o \ $(UTILS_BIN)/utf8wc.o @XMU_OBJS@ @XFT_OBJS@ @ANIM_OBJS@ HACK_OBJS = screenhack.o $(HACK_OBJS_1) XLOCK_OBJS = screenhack.o xlockmore.o $(COLOR_OBJS) $(HACK_OBJS_1) COLOR_OBJS = $(UTILS_BIN)/hsv.o $(UTILS_BIN)/colors.o GRAB_OBJS = $(UTILS_BIN)/grabclient.o XSHM_OBJS = $(UTILS_BIN)/xshm.o XDBE_OBJS = $(UTILS_BIN)/xdbe.o ANIM_OBJS = recanim.o ANIM_LIBS = @XPM_LIBS@ THREAD_OBJS = $(UTILS_BIN)/aligned_malloc.o $(UTILS_BIN)/thread_util.o HDRS = screenhack.h screenhackI.h fps.h fpsI.h xlockmore.h \ xlockmoreI.h automata.h bubbles.h xpm-pixmap.h \ apple2.h analogtv.h pacman.h pacman_ai.h pacman_level.h \ asm6502.h delaunay.h recanim.h MEN = anemone.man apollonian.man attraction.man \ blaster.man blitspin.man bouboule.man braid.man bsod.man \ bumps.man ccurve.man compass.man coral.man \ crystal.man cynosure.man decayscreen.man \ deco.man deluxe.man demon.man discrete.man distort.man \ drift.man epicycle.man euler2d.man fadeplot.man \ flame.man flow.man fluidballs.man galaxy.man \ goop.man grav.man greynetic.man halo.man helix.man \ hopalong.man ifs.man imsmap.man \ interference.man julia.man \ kaleidescope.man kumppa.man \ loop.man maze.man moire.man \ moire2.man mountain.man munch.man nerverot.man noseguy.man \ pedal.man penetrate.man penrose.man petri.man phosphor.man \ polyominoes.man pyro.man qix.man rd-bomb.man ripples.man \ rocks.man rorschach.man rotzoomer.man \ shadebobs.man sierpinski.man slidescreen.man slip.man \ speedmine.man \ spotlight.man squiral.man starfish.man strange.man \ swirl.man thornbird.man triangle.man truchet.man \ twang.man vermiculate.man vidwhacker.man \ wander.man webcollage.man whirlwindwarp.man \ xflame.man xjack.man xlyap.man xmatrix.man \ xrayswarm.man xspirograph.man \ zoom.man halftone.man eruption.man metaballs.man \ barcode.man piecewise.man cloudlife.man ljlatest.man \ fontglide.man apple2.man xanalogtv.man pong.man \ wormhole.man pacman.man fuzzyflakes.man \ anemotaxis.man memscroller.man substrate.man \ intermomentary.man fireworkx.man fiberlamp.man boxfit.man \ interaggregate.man celtic.man cwaves.man abstractile.man \ lcdscrub.man hexadrop.man tessellimage.man binaryring.man RETIRED_MEN = ant.man bubbles.man critical.man flag.man forest.man \ laser.man lightning.man lisa.man lissie.man lmorph.man \ rotor.man sphere.man spiral.man t3d.man vines.man \ whirlygig.man worm.man xsublim.man juggle.man \ hypercube.man hyperball.man STAR = * EXTRAS = README Makefile.in xml2man.pl m6502.sh .gdbinit \ euler2d.tex check-configs.pl munge-ad.pl \ config/README \ config/$(STAR).xml \ config/$(STAR).dtd \ config/$(STAR).xsd \ images/$(STAR).xbm \ images/$(STAR).xpm \ images/bubbles/$(STAR).pov \ images/bubbles/$(STAR).xpm \ images/noseguy/$(STAR).xbm \ images/noseguy/$(STAR).xpm \ images/m6502/$(STAR).asm \ images/molecules/$(STAR).pdb \ images/pacman/$(STAR).xpm VMSFILES = compile_axp.com compile_decc.com link_axp.com link_decc.com \ vms_axp.opt vms_axp_12.opt vms_decc.opt vms_decc_12.opt TARFILES = $(SRCS) $(HDRS) $(SCRIPTS) $(MEN) $(RETIRED_MEN) \ $(EXTRAS) $(VMSFILES) default: all all: $(EXES) $(RETIRED_EXES) install: install-program install-scripts install-xml install-man uninstall: uninstall-program uninstall-xml uninstall-man install-strip: $(MAKE) INSTALL_PROGRAM='$(INSTALL_PROGRAM) -s' \ install # the hacks, in $HACKDIR install-program:: $(EXES) @if [ ! -d $(install_prefix)$(HACKDIR) ]; then \ $(INSTALL_DIRS) $(install_prefix)$(HACKDIR) ; \ fi ; \ for program in $(EXES); do \ echo $(INSTALL_PROGRAM) $$program \ $(install_prefix)$(HACKDIR)/$$program ; \ $(INSTALL_PROGRAM) $$program \ $(install_prefix)$(HACKDIR)/$$program ; \ done install-scripts: $(SCRIPTS) munge-scripts @for program in $(SCRIPTS); do \ if [ -r $$program ] ; then \ p=$$program ; \ else \ p=$(srcdir)/$$program ; \ fi ; \ echo $(INSTALL_SCRIPT) $$p \ $(install_prefix)$(HACKDIR)/$$program ; \ $(INSTALL_SCRIPT) $$p \ $(install_prefix)$(HACKDIR)/$$program ; \ done munge-scripts: $(SCRIPTS) @tmp=/tmp/mf.$$$$ ; \ perl="${PERL}" ; \ rm -f $$tmp ; \ for program in $(SCRIPTS); do \ sed "s@^\(#!\)\(/[^ ]*/perl[^ ]*\)\(.*\)\$$@\1$$perl\3@" \ < $(srcdir)/$$program > $$tmp ; \ if ! cmp -s $(srcdir)/$$program $$tmp ; then \ echo "$$program: setting interpreter to $$perl" >&2 ; \ cat $$tmp > ./$$program ; \ fi ; \ done ; \ rm -f $$tmp # When installing man pages, we install "foo.man" as "foo.N" and update # the .TH line in the installed file with one like # # .TH XScreenSaver N "V.VV (DD-MMM-YYYY)" "X Version 11" # # where N is the manual section suffix. # install-man: $(MEN) @men="$(MEN)" ; \ U=$(UTILS_SRC)/version.h ; \ V=`sed -n 's/.*xscreensaver \([0-9]\.[^)]*)\).*/\1/p' < $$U` ; \ T=/tmp/xs$$$$.$(mansuffix) ; \ TH=".TH XScreenSaver $(mansuffix) \"$$V\" \"X Version 11\"" ; \ echo "installing man pages: $$TH" ; \ \ if [ ! -d $(install_prefix)$(manNdir) ]; then \ $(INSTALL_DIRS) $(install_prefix)$(manNdir) ; \ fi ; \ \ for man in $$men; do \ instname=`echo $$man | sed 's/\.man$$/\.$(mansuffix)/'` ; \ manbase=`echo $$man | sed 's/\.man$$//'` ; \ TH=".TH $$manbase $(mansuffix) \"$$V\" \"X Version 11\" \"XScreenSaver manual\"" ; \ sed -e "s/^\.TH.*/$$TH/" \ -e 's@(MANSUFFIX)@($(mansuffix))@g' \ < $(srcdir)/$$man > $$T ; \ echo $(INSTALL_DATA) $(srcdir)/$$man \ $(install_prefix)$(manNdir)/$$instname ; \ $(INSTALL_DATA) $$T \ $(install_prefix)$(manNdir)/$$instname ; \ done ; \ rm -f $$T install-xml: @dest=$(install_prefix)$(HACK_CONF_DIR) ; \ if [ ! -d $$dest ]; then \ $(INSTALL_DIRS) $$dest ; \ fi ; \ src=$(srcdir)/config ; \ for file in $(EXES) $(SCRIPTS) $(EXTERNALS) ; do \ if [ -f $$src/$$file.xml ]; then \ echo $(INSTALL_DATA) $$src/$$file.xml $$dest/$$file.xml ; \ $(INSTALL_DATA) $$src/$$file.xml $$dest/$$file.xml ; \ fi ; \ done uninstall-program: @for program in $(EXES) $(RETIRED_EXES) $(SCRIPTS); do \ echo rm -f $(install_prefix)$(HACKDIR)/$$program ; \ rm -f $(install_prefix)$(HACKDIR)/$$program ; \ done uninstall-man: @men="$(MEN) $(RETIRED_MEN)" ; \ for man in $$men; do \ instname=`echo $$man | sed 's/\.man$$/\.$(mansuffix)/'` ; \ echo rm -f $(install_prefix)$(manNdir)/$$instname* ; \ rm -f $(install_prefix)$(manNdir)/$$instname* ; \ done uninstall-xml: @dest=$(install_prefix)$(HACK_CONF_DIR) ; \ for file in $(EXES) $(RETIRED_EXES) $(SCRIPTS) $(EXTERNALS) ; do \ echo rm -f $$dest/$$file.xml ; \ rm -f $$dest/$$file.xml ; \ done clean: -rm -f *.o a.out core $(EXES) $(RETIRED_EXES) m6502.h distclean: clean -rm -f Makefile TAGS *~ "#"* # Adds all current dependencies to Makefile depend: $(DEPEND) -s '# DO NOT DELETE: updated by make depend' \ $(DEPEND_FLAGS) -- \ $(INCLUDES) $(DEFS) $(DEPEND_DEFINES) $(CFLAGS) $(X_CFLAGS) -- \ $(SRCS) # Adds some dependencies to Makefile.in -- not totally accurate, but pretty # close. This excludes dependencies on files in /usr/include, etc. It tries # to include only dependencies on files which are themselves a part of this # package. distdepend:: m6502.h @echo updating dependencies in `pwd`/Makefile.in... ; \ $(DEPEND) -w 0 -f - \ -s '# DO NOT DELETE: updated by make distdepend' $(DEPEND_FLAGS) -- \ $(INCLUDES_1) $(DEFS) $(DEPEND_DEFINES) $(CFLAGS) $(X_CFLAGS) -- \ $(SRCS) 2>/dev/null | \ sort -d | \ ( \ awk '/^# .*Makefile.in ---/,/^# DO .*distdepend/' < Makefile.in ; \ sed -e '/^#.*/d' \ -e 's@ \./@ @g;s@ /[^ ]*@@g;/^.*:$$/d' \ -e 's@\.\./utils@$$(UTILS_SRC)@g' \ -e 's@ \([^$$]\)@ $$(srcdir)/\1@g' \ -e 's@ $$(srcdir)/\(.*config.h\)@ \1@g' \ -e 's@ $$(srcdir)/\(m6502.h\)@ \1@g' ; \ echo '' \ ) > /tmp/distdepend.$$$$ && \ mv /tmp/distdepend.$$$$ Makefile.in TAGS: tags tags: find $(srcdir) -name '*.[chly]' -print | xargs etags -a echo_tarfiles: @echo $(TARFILES) check_men: @badmen="" ; \ for exe in $(EXES) $(SCRIPTS); do \ if ! [ -f $(srcdir)/$$exe.man \ -o "$$exe" = webcollage-helper ]; then \ badmen="$$badmen $$exe" ; \ fi ; \ done ; \ if [ -n "$$badmen" ]; then \ echo "" ; \ echo "Warning: The following programs have no manuals:" ; \ echo "" ; \ for m in $$badmen ; do \ echo " $$m" ; \ done ; \ fi validate_xml: @echo "Validating XML..." ; \ cd $(srcdir) ; ./check-configs.pl $(EXES) munge_ad_file: @echo "Updating hack list in XScreenSaver.ad.in..." ; \ cd $(srcdir) ; ./munge-ad.pl ../driver/XScreenSaver.ad.in # Rules for generating the VMS makefiles on Unix, so that it doesn't have to # be done by hand... # VMS_AXP_COMPILE_1=$$ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,STANDALONE VMS_AXP_COMPILE_2=)/INCL=([],[-],[-.UTILS]) compile_axp.com: Makefile.in @echo generating $@ from $<... ; \ ( for c in $(SRCS) ; do \ c=`echo $$c | tr a-z A-Z` ; \ echo "$(VMS_AXP_COMPILE_1)$(VMS_AXP_COMPILE_2) $$c" ; \ done ; \ ) | sort -d > $@ compile_decc.com: compile_axp.com @echo generating $@ from $<... ; \ sed 's/axp/decc/g' < $< > $@ #### TODO: generating link_axp.com is kinda tricky... link_decc.com: link_axp.com @echo generating $@ from $<... ; \ sed 's/axp/decc/g' < $< > $@ $(srcdir)/../setup.com: Makefile.in @echo generating $@ from $<... ; \ ( echo '$$! Xscreensaver - definition of various DCL symbols' ; \ echo '$$ set NOON' ; \ echo '$$ set def [.HACKS]' ; \ echo '$$ mydisk = f$$trnlmn("SYS$$DISK")' ; \ echo '$$ mydir = mydisk+f$$directory()' ; \ ( for c in $(EXES) ; do \ c2="$${c} " ; \ c2=`echo "$${c2}" | sed 's/^\(........*\) $$/\1/'` ; \ echo '$$' "$${c2}:== $$'mydir'$${c}" ; \ done ; \ ) | sort -d ; \ echo '$$ set def [-.DRIVER]' ; \ echo '$$ mydir = mydisk+f$$directory()' ; \ echo "$$ xscreensaver :== $$'mydir'xscreensaver" ; \ echo "$$ xscreen*command :== $$'mydir'xscreensaver-command" ; \ echo '$$ set def [-]' ; \ echo '$$ exit' ; \ ) > $@ distdepend:: compile_axp.com compile_decc.com distdepend:: link_axp.com link_decc.com distdepend:: $(srcdir)/../setup.com distdepend:: check_men validate_xml munge_ad_file # Rules for noticing when the objects from the utils directory are out of # date with respect to their sources, and going and building them according # to the rules in their own Makefile... # $(UTILS_BIN)/alpha.o: $(UTILS_SRC)/alpha.c $(UTILS_BIN)/colors.o: $(UTILS_SRC)/colors.c $(UTILS_BIN)/grabclient.o: $(UTILS_SRC)/grabclient.c $(UTILS_BIN)/hsv.o: $(UTILS_SRC)/hsv.c $(UTILS_BIN)/resources.o: $(UTILS_SRC)/resources.c $(UTILS_BIN)/spline.o: $(UTILS_SRC)/spline.c $(UTILS_BIN)/usleep.o: $(UTILS_SRC)/usleep.c $(UTILS_BIN)/visual.o: $(UTILS_SRC)/visual.c $(UTILS_BIN)/xmu.o: $(UTILS_SRC)/xmu.c $(UTILS_BIN)/xft.o: $(UTILS_SRC)/xft.c $(UTILS_BIN)/utf8wc.o: $(UTILS_SRC)/utf8wc.c $(UTILS_BIN)/logo.o: $(UTILS_SRC)/logo.c $(UTILS_BIN)/minixpm.o: $(UTILS_SRC)/minixpm.c $(UTILS_BIN)/yarandom.o: $(UTILS_SRC)/yarandom.c $(UTILS_BIN)/erase.o: $(UTILS_SRC)/erase.c $(UTILS_BIN)/xshm.o: $(UTILS_SRC)/xshm.c $(UTILS_BIN)/xdbe.o: $(UTILS_SRC)/xdbe.c $(UTILS_BIN)/textclient.o: $(UTILS_SRC)/textclient.c $(UTILS_BIN)/aligned_malloc.o: $(UTILS_SRC)/aligned_malloc.c $(UTILS_BIN)/thread_util.o: $(UTILS_SRC)/thread_util.c $(UTIL_OBJS): $(MAKE) -C $(UTILS_BIN) $(@F) CC="$(CC)" CFLAGS="$(CFLAGS)" LDFLAGS="$(LDFLAGS)" # How we build object files in this directory. .c.o: $(CC) -c $(INCLUDES) $(DEFS) $(CPPFLAGS) $(CFLAGS) $(X_CFLAGS) $< # Make sure these are regenerated when the version number ticks. screenhack.o: $(UTILS_SRC)/version.h # Some abbreviations to keep the lines short... XPM = xpm-pixmap.o ALP = $(UTILS_BIN)/alpha.o HSV = $(UTILS_BIN)/hsv.o SPL = $(UTILS_BIN)/spline.o LOGO = $(UTILS_BIN)/logo.o $(UTILS_BIN)/minixpm.o GRAB = $(GRAB_OBJS) ERASE = $(UTILS_BIN)/erase.o COL = $(COLOR_OBJS) SHM = $(XSHM_OBJS) DBE = $(XDBE_OBJS) BARS = $(UTILS_BIN)/colorbars.o $(LOGO) THRO = $(THREAD_OBJS) THRL = $(THREAD_CFLAGS) $(THREAD_LIBS) ATV = analogtv.o $(SHM) $(THRO) APPLE2 = apple2.o $(ATV) TEXT = $(UTILS_BIN)/textclient.o CC_HACK = $(CC) $(LDFLAGS) xscreensaver-sgigl: xscreensaver-sgigl.c $(CC) $(LDFLAGS) -o $@ $< -I$(UTILS_SRC) $(HACK_PRE) \ $(XMU_LIBS) -lX11 -lXext $(X_EXTRA_LIBS) -lm test-utf8wc: $(UTILS_SRC)/utf8wc.c $(CC) $(INCLUDES) $(DEFS) $(CPPFLAGS) $(CFLAGS) $(X_CFLAGS) $(LDFLAGS)\ -o $@ -DSELFTEST $< # The rules for those hacks which follow the `screenhack.c' API. # If make wasn't such an utter abomination, these could all be combined # into one rule, but we don't live in such a perfect world. The $< rule # is pretty much useless in the face of more than one dependency, as far # as I can tell. # attraction: attraction.o $(HACK_OBJS) $(COL) $(SPL) $(CC_HACK) -o $@ $@.o $(HACK_OBJS) $(COL) $(SPL) $(HACK_LIBS) binaryring: binaryring.o $(HACK_OBJS) $(COL) $(CC_HACK) -o $@ $@.o $(HACK_OBJS) $(COL) $(HACK_LIBS) blitspin: blitspin.o $(HACK_OBJS) $(GRAB) $(XPM) $(CC_HACK) -o $@ $@.o $(HACK_OBJS) $(GRAB) $(XPM) $(XPM_LIBS) bubbles: bubbles.o $(HACK_OBJS) bubbles-default.o $(XPM) $(CC_HACK) -o $@ $@.o $(HACK_OBJS) bubbles-default.o $(XPM) $(XPM_LIBS) decayscreen: decayscreen.o $(HACK_OBJS) $(GRAB) $(CC_HACK) -o $@ $@.o $(HACK_OBJS) $(GRAB) $(HACK_LIBS) deco: deco.o $(HACK_OBJS) $(COL) $(CC_HACK) -o $@ $@.o $(HACK_OBJS) $(COL) $(HACK_LIBS) flame: flame.o $(HACK_OBJS) $(COL) $(CC_HACK) -o $@ $@.o $(HACK_OBJS) $(COL) $(HACK_LIBS) greynetic: greynetic.o $(HACK_OBJS) $(CC_HACK) -o $@ $@.o $(HACK_OBJS) $(HACK_LIBS) halo: halo.o $(HACK_OBJS) $(COL) $(CC_HACK) -o $@ $@.o $(HACK_OBJS) $(COL) $(HACK_LIBS) helix: helix.o $(HACK_OBJS) $(HSV) $(ERASE) $(CC_HACK) -o $@ $@.o $(HACK_OBJS) $(HSV) $(ERASE) $(HACK_LIBS) hypercube: hypercube.o $(HACK_OBJS) $(CC_HACK) -o $@ $@.o $(HACK_OBJS) $(HACK_LIBS) imsmap: imsmap.o $(HACK_OBJS) $(COL) $(CC_HACK) -o $@ $@.o $(HACK_OBJS) $(COL) $(HACK_LIBS) kaleidescope: kaleidescope.o $(HACK_OBJS) $(CC_HACK) -o $@ $@.o $(HACK_OBJS) $(HACK_LIBS) lmorph: lmorph.o $(HACK_OBJS) $(CC_HACK) -o $@ $@.o $(HACK_OBJS) $(HACK_LIBS) maze: maze.o $(HACK_OBJS) $(ERASE) $(LOGO) $(CC_HACK) -o $@ $@.o $(HACK_OBJS) $(ERASE) $(LOGO) $(HACK_LIBS) moire: moire.o $(HACK_OBJS) $(COL) $(SHM) $(CC_HACK) -o $@ $@.o $(HACK_OBJS) $(COL) $(SHM) $(HACK_LIBS) moire2: moire2.o $(HACK_OBJS) $(COL) $(DBE) $(CC_HACK) -o $@ $@.o $(HACK_OBJS) $(COL) $(DBE) $(HACK_LIBS) noseguy: noseguy.o $(HACK_OBJS) $(XPM) $(TEXT) $(CC_HACK) -o $@ $@.o $(HACK_OBJS) $(XPM) $(TEXT) $(XPM_LIBS) $(TEXT_LIBS) pedal: pedal.o $(HACK_OBJS) $(HSV) $(ERASE) $(CC_HACK) -o $@ $@.o $(HACK_OBJS) $(HSV) $(ERASE) $(HACK_LIBS) pyro: pyro.o $(HACK_OBJS) $(HSV) $(CC_HACK) -o $@ $@.o $(HACK_OBJS) $(HSV) $(HACK_LIBS) qix: qix.o $(HACK_OBJS) $(HSV) $(ALP) $(CC_HACK) -o $@ $@.o $(HACK_OBJS) $(HSV) $(ALP) $(HACK_LIBS) rocks: rocks.o $(HACK_OBJS) $(COL) $(CC_HACK) -o $@ $@.o $(HACK_OBJS) $(COL) $(HACK_LIBS) rorschach: rorschach.o $(HACK_OBJS) $(HSV) $(ERASE) $(CC_HACK) -o $@ $@.o $(HACK_OBJS) $(HSV) $(ERASE) $(HACK_LIBS) slidescreen: slidescreen.o $(HACK_OBJS) $(GRAB) $(CC_HACK) -o $@ $@.o $(HACK_OBJS) $(GRAB) $(HACK_LIBS) goop: goop.o $(HACK_OBJS) $(HSV) $(ALP) $(SPL) $(CC_HACK) -o $@ $@.o $(HACK_OBJS) $(HSV) $(ALP) $(SPL) $(HACK_LIBS) starfish: starfish.o $(HACK_OBJS) $(COL) $(SPL) $(CC_HACK) -o $@ $@.o $(HACK_OBJS) $(COL) $(SPL) $(HACK_LIBS) munch: munch.o $(HACK_OBJS) $(COL) $(SPL) $(CC_HACK) -o $@ $@.o $(HACK_OBJS) $(COL) $(SPL) $(HACK_LIBS) rd-bomb: rd-bomb.o $(HACK_OBJS) $(COL) $(SHM) $(CC_HACK) -o $@ $@.o $(HACK_OBJS) $(COL) $(SHM) $(HACK_LIBS) coral: coral.o $(HACK_OBJS) $(COL) $(ERASE) $(CC_HACK) -o $@ $@.o $(HACK_OBJS) $(COL) $(ERASE) $(HACK_LIBS) xjack: xjack.o $(HACK_OBJS) $(CC_HACK) -o $@ $@.o $(HACK_OBJS) $(HACK_LIBS) xlyap: xlyap.o $(HACK_OBJS) $(COL) $(CC_HACK) -o $@ $@.o $(HACK_OBJS) $(COL) $(HACK_LIBS) cynosure: cynosure.o $(HACK_OBJS) $(COL) $(CC_HACK) -o $@ $@.o $(HACK_OBJS) $(COL) $(HACK_LIBS) epicycle: epicycle.o $(HACK_OBJS) $(COL) $(ERASE) $(CC_HACK) -o $@ $@.o $(HACK_OBJS) $(COL) $(ERASE) $(HACK_LIBS) interference: interference.o $(HACK_OBJS) $(COL) $(SHM) $(DBE) $(THRO) $(CC_HACK) -o $@ $@.o $(HACK_OBJS) $(COL) $(SHM) $(DBE) $(THRO) $(HACK_LIBS) $(THRL) truchet: truchet.o $(HACK_OBJS) $(COL) $(CC_HACK) -o $@ $@.o $(HACK_OBJS) $(COL) $(HACK_LIBS) bsod: bsod.o $(HACK_OBJS) $(GRAB) $(APPLE2) $(XPM) $(CC_HACK) -o $@ $@.o $(HACK_OBJS) $(GRAB) $(APPLE2) $(XPM) $(XPM_LIBS) $(THRL) apple2: apple2.o apple2-main.o $(HACK_OBJS) $(ATV) $(GRAB) $(TEXT) $(CC_HACK) -o $@ $@.o apple2-main.o $(HACK_OBJS) $(ATV) $(GRAB) $(TEXT) $(XPM_LIBS) $(TEXT_LIBS) $(THRL) xanalogtv: xanalogtv.o $(HACK_OBJS) $(ATV) $(GRAB) $(XPM) $(CC_HACK) -o $@ $@.o $(HACK_OBJS) $(ATV) $(GRAB) $(XPM) $(XPM_LIBS) $(HACK_LIBS) $(THRL) distort: distort.o $(HACK_OBJS) $(GRAB) $(SHM) $(CC_HACK) -o $@ $@.o $(HACK_OBJS) $(GRAB) $(SHM) $(HACK_LIBS) kumppa: kumppa.o $(HACK_OBJS) $(DBE) $(CC_HACK) -o $@ $@.o $(HACK_OBJS) $(DBE) $(HACK_LIBS) t3d: t3d.o $(HACK_OBJS) $(COL) $(CC_HACK) -o $@ $@.o $(HACK_OBJS) $(COL) $(HACK_LIBS) penetrate: penetrate.o $(HACK_OBJS) $(COL) $(CC_HACK) -o $@ $@.o $(HACK_OBJS) $(COL) $(HACK_LIBS) deluxe: deluxe.o $(HACK_OBJS) $(ALP) $(COL) $(DBE) $(CC_HACK) -o $@ $@.o $(HACK_OBJS) $(ALP) $(COL) $(DBE) $(HACK_LIBS) compass: compass.o $(HACK_OBJS) $(DBE) $(CC_HACK) -o $@ $@.o $(HACK_OBJS) $(DBE) $(HACK_LIBS) squiral: squiral.o $(HACK_OBJS) $(COL) $(CC_HACK) -o $@ $@.o $(HACK_OBJS) $(COL) $(HACK_LIBS) xflame: xflame.o $(HACK_OBJS) $(SHM) $(XPM) $(CC_HACK) -o $@ $@.o $(HACK_OBJS) $(SHM) $(XPM) $(XPM_LIBS) wander: wander.o $(HACK_OBJS) $(COL) $(ERASE) $(CC_HACK) -o $@ $@.o $(HACK_OBJS) $(COL) $(ERASE) $(HACK_LIBS) spotlight: spotlight.o $(HACK_OBJS) $(GRAB) $(CC_HACK) -o $@ $@.o $(HACK_OBJS) $(GRAB) $(HACK_LIBS) critical: critical.o $(HACK_OBJS) $(COL) $(ERASE) $(CC_HACK) -o $@ $@.o $(HACK_OBJS) $(COL) $(ERASE) $(HACK_LIBS) phosphor: phosphor.o $(HACK_OBJS) $(TEXT) $(COL) $(CC_HACK) -o $@ $@.o $(HACK_OBJS) $(TEXT) $(COL) $(HACK_LIBS) $(TEXT_LIBS) xmatrix: xmatrix.o $(HACK_OBJS) $(TEXT) $(XPM) $(CC_HACK) -o $@ $@.o $(HACK_OBJS) $(TEXT) $(XPM) $(XPM_LIBS) $(TEXT_LIBS) petri: petri.o $(HACK_OBJS) $(COL) $(SPL) $(CC_HACK) -o $@ $@.o $(HACK_OBJS) $(COL) $(SPL) $(HACK_LIBS) shadebobs: shadebobs.o $(HACK_OBJS) $(COL) $(SPL) $(CC_HACK) -o $@ $@.o $(HACK_OBJS) $(COL) $(SPL) $(HACK_LIBS) ccurve: ccurve.o $(HACK_OBJS) $(COL) $(SPL) $(CC_HACK) -o $@ $@.o $(HACK_OBJS) $(COL) $(ERASE) $(HACK_LIBS) blaster: blaster.o $(HACK_OBJS) $(CC_HACK) -o $@ $@.o $(HACK_OBJS) $(HACK_LIBS) bumps: bumps.o $(HACK_OBJS) $(GRAB) $(SHM) $(CC_HACK) -o $@ $@.o $(HACK_OBJS) $(GRAB) $(SHM) $(HACK_LIBS) ripples: ripples.o $(HACK_OBJS) $(SHM) $(COL) $(GRAB) $(CC_HACK) -o $@ $@.o $(HACK_OBJS) $(SHM) $(COL) $(GRAB) $(HACK_LIBS) xspirograph: xspirograph.o $(HACK_OBJS) $(COL) $(ERASE) $(CC_HACK) -o $@ $@.o $(HACK_OBJS) $(COL) $(ERASE) $(HACK_LIBS) nerverot: nerverot.o $(HACK_OBJS) $(COL) $(CC_HACK) -o $@ $@.o $(HACK_OBJS) $(COL) $(HACK_LIBS) xrayswarm: xrayswarm.o $(HACK_OBJS) $(CC_HACK) -o $@ $@.o $(HACK_OBJS) $(HACK_LIBS) hyperball: hyperball.o $(HACK_OBJS) $(CC_HACK) -o $@ $@.o $(HACK_OBJS) $(HACK_LIBS) zoom: zoom.o $(HACK_OBJS) $(GRAB) $(CC_HACK) -o $@ $@.o $(HACK_OBJS) $(GRAB) $(HACK_LIBS) whirlwindwarp: whirlwindwarp.o $(HACK_OBJS) $(COL) $(CC_HACK) -o $@ $@.o $(HACK_OBJS) $(COL) $(HACK_LIBS) rotzoomer: rotzoomer.o $(HACK_OBJS) $(GRAB) $(SHM) $(CC_HACK) -o $@ $@.o $(HACK_OBJS) $(GRAB) $(SHM) $(HACK_LIBS) whirlygig: whirlygig.o $(HACK_OBJS) $(DBE) $(COL) $(CC_HACK) -o $@ $@.o $(HACK_OBJS) $(DBE) $(COL) $(HACK_LIBS) speedmine: speedmine.o $(HACK_OBJS) $(COL) $(CC_HACK) -o $@ $@.o $(HACK_OBJS) $(COL) $(HACK_LIBS) vermiculate: vermiculate.o $(HACK_OBJS) $(COL) $(CC_HACK) -o $@ $@.o $(HACK_OBJS) $(COL) $(HACK_LIBS) twang: twang.o $(HACK_OBJS) $(GRAB) $(SHM) $(CC_HACK) -o $@ $@.o $(HACK_OBJS) $(GRAB) $(SHM) $(HACK_LIBS) fluidballs: fluidballs.o $(HACK_OBJS) $(DBE) $(CC_HACK) -o $@ $@.o $(HACK_OBJS) $(DBE) $(HACK_LIBS) anemone: anemone.o $(HACK_OBJS) $(COL) $(DBE) $(CC_HACK) -o $@ $@.o $(HACK_OBJS) $(COL) $(DBE) $(HACK_LIBS) halftone: halftone.o $(HACK_OBJS) $(COL) $(CC_HACK) -o $@ $@.o $(HACK_OBJS) $(COL) $(HACK_LIBS) metaballs: metaballs.o $(HACK_OBJS) $(CC_HACK) -o $@ $@.o $(HACK_OBJS) $(HACK_LIBS) eruption: eruption.o $(HACK_OBJS) $(CC_HACK) -o $@ $@.o $(HACK_OBJS) $(HACK_LIBS) popsquares: popsquares.o $(HACK_OBJS) $(DBE) $(COL) $(CC_HACK) -o $@ $@.o $(HACK_OBJS) $(DBE) $(COL) $(HACK_LIBS) barcode: barcode.o $(HACK_OBJS) $(HSV) $(CC_HACK) -o $@ $@.o $(HACK_OBJS) $(HSV) $(HACK_LIBS) piecewise: piecewise.o $(HACK_OBJS) $(COL) $(DBE) $(CC_HACK) -o $@ $@.o $(HACK_OBJS) $(COL) $(DBE) $(HACK_LIBS) cloudlife: cloudlife.o $(HACK_OBJS) $(COL) $(DBE) $(CC_HACK) -o $@ $@.o $(HACK_OBJS) $(COL) $(DBE) $(HACK_LIBS) fontglide: fontglide.o $(HACK_OBJS) $(DBE) $(TEXT) $(CC_HACK) -o $@ $@.o $(HACK_OBJS) $(DBE) $(TEXT) $(HACK_LIBS) $(TEXT_LIBS) pong: pong.o $(HACK_OBJS) $(ATV) $(GRAB) $(XPM) $(CC_HACK) -o $@ $@.o $(HACK_OBJS) $(ATV) $(GRAB) $(XPM) $(XPM_LIBS) $(HACK_LIBS) $(THRL) wormhole: wormhole.o $(HACK_OBJS) $(CC_HACK) -o $@ $@.o $(HACK_OBJS) $(HACK_LIBS) fuzzyflakes: fuzzyflakes.o $(HACK_OBJS) $(CC_HACK) -o $@ $@.o $(HACK_OBJS) $(HACK_LIBS) anemotaxis: anemotaxis.o $(HACK_OBJS) $(COL) $(DBE) $(CC_HACK) -o $@ $@.o $(HACK_OBJS) $(COL) $(DBE) $(HACK_LIBS) memscroller: memscroller.o $(HACK_OBJS) $(SHM) $(COL) $(CC_HACK) -o $@ $@.o $(HACK_OBJS) $(SHM) $(COL) $(HACK_LIBS) substrate: substrate.o $(HACK_OBJS) $(CC_HACK) -o $@ $@.o $(HACK_OBJS) $(HACK_LIBS) intermomentary: intermomentary.o $(HACK_OBJS) $(COL) $(CC_HACK) -o $@ $@.o $(HACK_OBJS) $(COL) $(HACK_LIBS) interaggregate: interaggregate.o $(HACK_OBJS) $(COL) $(CC_HACK) -o $@ $@.o $(HACK_OBJS) $(COL) $(HACK_LIBS) fireworkx: fireworkx.o $(HACK_OBJS) $(COL) $(CC_HACK) -o $@ $@.o $(HACK_OBJS) $(COL) $(HACK_LIBS) boxfit: boxfit.o $(HACK_OBJS) $(COL) $(GRAB) $(CC_HACK) -o $@ $@.o $(HACK_OBJS) $(COL) $(GRAB) $(HACK_LIBS) ifs: ifs.o $(HACK_OBJS) $(COL) $(CC_HACK) -o $@ $@.o $(HACK_OBJS) $(COL) $(HACK_LIBS) celtic: celtic.o $(HACK_OBJS) $(COL) $(ERASE) $(CC_HACK) -o $@ $@.o $(HACK_OBJS) $(COL) $(ERASE) $(HACK_LIBS) cwaves: cwaves.o $(HACK_OBJS) $(COL) $(CC_HACK) -o $@ $@.o $(HACK_OBJS) $(COL) $(HACK_LIBS) m6502.h: @echo "building m6502.h from $(srcdir)/images/m6502/*.asm"; \ UTILS_SRC="$(UTILS_SRC)" \ $(srcdir)/m6502.sh m6502.h $(srcdir)/images/m6502/*.asm m6502.o: m6502.h m6502: m6502.o asm6502.o $(HACK_OBJS) $(ATV) $(CC_HACK) -o $@ $@.o asm6502.o $(HACK_OBJS) $(ATV) $(HACK_LIBS) $(THRL) abstractile: abstractile.o $(HACK_OBJS) $(COL) $(CC_HACK) -o $@ $@.o $(HACK_OBJS) $(COL) $(HACK_LIBS) lcdscrub: lcdscrub.o $(HACK_OBJS) $(CC_HACK) -o $@ $@.o $(HACK_OBJS) $(HACK_LIBS) hexadrop: hexadrop.o $(HACK_OBJS) $(COL) $(CC_HACK) -o $@ $@.o $(HACK_OBJS) $(COL) $(HACK_LIBS) tessellimage: tessellimage.o delaunay.o $(HACK_OBJS) $(GRAB) $(CC_HACK) -o $@ $@.o delaunay.o $(HACK_OBJS) $(GRAB) $(HACK_LIBS) testx11: testx11.o glx/rotator.o $(HACK_OBJS) $(CC_HACK) -o $@ $@.o glx/rotator.o $(HACK_OBJS) $(COL) $(HACK_LIBS) glx/rotator.o: glx/rotator.c $(MAKE) -C glx $(@F) CC="$(CC)" CFLAGS="$(CFLAGS)" LDFLAGS="$(LDFLAGS)" # The rules for those hacks which follow the `xlockmore' API. # bouboule: bouboule.o $(XLOCK_OBJS) $(CC_HACK) -o $@ $@.o $(XLOCK_OBJS) $(HACK_LIBS) braid: braid.o $(XLOCK_OBJS) $(ERASE) $(CC_HACK) -o $@ $@.o $(XLOCK_OBJS) $(ERASE) $(HACK_LIBS) drift: drift.o $(XLOCK_OBJS) $(ERASE) $(CC_HACK) -o $@ $@.o $(XLOCK_OBJS) $(ERASE) $(HACK_LIBS) flag: flag.o $(XLOCK_OBJS) $(XPM) $(CC_HACK) -o $@ $@.o $(XLOCK_OBJS) $(XPM) $(XPM_LIBS) forest: forest.o $(XLOCK_OBJS) $(ERASE) $(CC_HACK) -o $@ $@.o $(XLOCK_OBJS) $(ERASE) $(HACK_LIBS) vines: vines.o $(XLOCK_OBJS) $(ERASE) $(CC_HACK) -o $@ $@.o $(XLOCK_OBJS) $(ERASE) $(HACK_LIBS) galaxy: galaxy.o $(XLOCK_OBJS) $(CC_HACK) -o $@ $@.o $(XLOCK_OBJS) $(HACK_LIBS) grav: grav.o $(XLOCK_OBJS) $(CC_HACK) -o $@ $@.o $(XLOCK_OBJS) $(HACK_LIBS) hopalong: hopalong.o $(XLOCK_OBJS) $(ERASE) $(CC_HACK) -o $@ $@.o $(XLOCK_OBJS) $(ERASE) $(HACK_LIBS) julia: julia.o $(XLOCK_OBJS) $(CC_HACK) -o $@ $@.o $(XLOCK_OBJS) $(HACK_LIBS) laser: laser.o $(XLOCK_OBJS) $(CC_HACK) -o $@ $@.o $(XLOCK_OBJS) $(HACK_LIBS) lightning: lightning.o $(XLOCK_OBJS) $(CC_HACK) -o $@ $@.o $(XLOCK_OBJS) $(HACK_LIBS) lisa: lisa.o $(XLOCK_OBJS) $(CC_HACK) -o $@ $@.o $(XLOCK_OBJS) $(HACK_LIBS) lissie: lissie.o $(XLOCK_OBJS) $(CC_HACK) -o $@ $@.o $(XLOCK_OBJS) $(HACK_LIBS) penrose: penrose.o $(XLOCK_OBJS) $(CC_HACK) -o $@ $@.o $(XLOCK_OBJS) $(HACK_LIBS) sierpinski: sierpinski.o $(XLOCK_OBJS) $(CC_HACK) -o $@ $@.o $(XLOCK_OBJS) $(HACK_LIBS) slip: slip.o $(XLOCK_OBJS) $(GRAB) $(CC_HACK) -o $@ $@.o $(XLOCK_OBJS) $(GRAB) $(HACK_LIBS) sphere: sphere.o $(XLOCK_OBJS) $(CC_HACK) -o $@ $@.o $(XLOCK_OBJS) $(HACK_LIBS) spiral: spiral.o $(XLOCK_OBJS) $(CC_HACK) -o $@ $@.o $(XLOCK_OBJS) $(HACK_LIBS) strange: strange.o $(XLOCK_OBJS) $(CC_HACK) -o $@ $@.o $(XLOCK_OBJS) $(HACK_LIBS) swirl: swirl.o $(XLOCK_OBJS) $(SHM) $(CC_HACK) -o $@ $@.o $(XLOCK_OBJS) $(SHM) $(HACK_LIBS) fadeplot: fadeplot.o $(XLOCK_OBJS) $(CC_HACK) -o $@ $@.o $(XLOCK_OBJS) $(HACK_LIBS) mountain: mountain.o $(XLOCK_OBJS) $(CC_HACK) -o $@ $@.o $(XLOCK_OBJS) $(HACK_LIBS) triangle: triangle.o $(XLOCK_OBJS) $(CC_HACK) -o $@ $@.o $(XLOCK_OBJS) $(HACK_LIBS) worm: worm.o $(XLOCK_OBJS) $(CC_HACK) -o $@ $@.o $(XLOCK_OBJS) $(HACK_LIBS) rotor: rotor.o $(XLOCK_OBJS) $(CC_HACK) -o $@ $@.o $(XLOCK_OBJS) $(HACK_LIBS) ant: ant.o $(XLOCK_OBJS) $(ERASE) $(CC_HACK) -o $@ $@.o $(XLOCK_OBJS) $(ERASE) $(HACK_LIBS) demon: demon.o $(XLOCK_OBJS) $(CC_HACK) -o $@ $@.o $(XLOCK_OBJS) $(HACK_LIBS) loop: loop.o $(XLOCK_OBJS) $(CC_HACK) -o $@ $@.o $(XLOCK_OBJS) $(HACK_LIBS) flow: flow.o $(XLOCK_OBJS) $(CC_HACK) -o $@ $@.o $(XLOCK_OBJS) $(HACK_LIBS) discrete: discrete.o $(XLOCK_OBJS) $(ERASE) $(CC_HACK) -o $@ $@.o $(XLOCK_OBJS) $(ERASE) $(HACK_LIBS) crystal: crystal.o $(XLOCK_OBJS) $(CC_HACK) -o $@ $@.o $(XLOCK_OBJS) $(HACK_LIBS) apollonian: apollonian.o $(XLOCK_OBJS) $(ERASE) $(CC_HACK) -o $@ $@.o $(XLOCK_OBJS) $(ERASE) $(HACK_LIBS) euler2d: euler2d.o $(XLOCK_OBJS) $(CC_HACK) -o $@ $@.o $(XLOCK_OBJS) $(HACK_LIBS) juggle: juggle.o $(XLOCK_OBJS) $(CC_HACK) -o $@ $@.o $(XLOCK_OBJS) $(HACK_LIBS) polyominoes: polyominoes.o $(XLOCK_OBJS) $(ERASE) $(CC_HACK) -o $@ $@.o $(XLOCK_OBJS) $(ERASE) $(HACK_LIBS) thornbird: thornbird.o $(XLOCK_OBJS) $(CC_HACK) -o $@ $@.o $(XLOCK_OBJS) $(HACK_LIBS) PACOBJS=pacman_ai.o pacman_level.o pacman: pacman.o $(PACOBJS) $(XLOCK_OBJS) $(XPM) $(CC_HACK) -o $@ $@.o $(PACOBJS) $(XLOCK_OBJS) $(XPM) $(XPM_LIBS) fiberlamp: fiberlamp.o $(XLOCK_OBJS) $(CC_HACK) -o $@ $@.o $(XLOCK_OBJS) $(HACK_LIBS) # These are not like the others. # xsublim: xsublim.o $(HACK_OBJS_1) $(CC_HACK) -o $@ $@.o $(HACK_OBJS_1) $(HACK_LIBS) webcollage-helper: webcollage-helper.o $(CC_HACK) -o $@ $@.o $(XPM_LIBS) $(JPEG_LIBS) ############################################################################## # # DO NOT DELETE: updated by make distdepend abstractile.o: ../config.h abstractile.o: $(srcdir)/fps.h abstractile.o: $(srcdir)/screenhackI.h abstractile.o: $(srcdir)/screenhack.h abstractile.o: $(UTILS_SRC)/colors.h abstractile.o: $(UTILS_SRC)/grabscreen.h abstractile.o: $(UTILS_SRC)/hsv.h abstractile.o: $(UTILS_SRC)/resources.h abstractile.o: $(UTILS_SRC)/usleep.h abstractile.o: $(UTILS_SRC)/visual.h abstractile.o: $(UTILS_SRC)/yarandom.h analogtv.o: $(srcdir)/analogtv.h analogtv.o: ../config.h analogtv.o: $(srcdir)/images/6x10font.xbm analogtv.o: $(UTILS_SRC)/aligned_malloc.h analogtv.o: $(UTILS_SRC)/grabscreen.h analogtv.o: $(UTILS_SRC)/resources.h analogtv.o: $(UTILS_SRC)/thread_util.h analogtv.o: $(UTILS_SRC)/utils.h analogtv.o: $(UTILS_SRC)/visual.h analogtv.o: $(UTILS_SRC)/xshm.h analogtv.o: $(UTILS_SRC)/yarandom.h anemone.o: ../config.h anemone.o: $(srcdir)/fps.h anemone.o: $(srcdir)/screenhackI.h anemone.o: $(srcdir)/screenhack.h anemone.o: $(UTILS_SRC)/colors.h anemone.o: $(UTILS_SRC)/grabscreen.h anemone.o: $(UTILS_SRC)/hsv.h anemone.o: $(UTILS_SRC)/resources.h anemone.o: $(UTILS_SRC)/usleep.h anemone.o: $(UTILS_SRC)/visual.h anemone.o: $(UTILS_SRC)/xdbe.h anemone.o: $(UTILS_SRC)/yarandom.h anemotaxis.o: ../config.h anemotaxis.o: $(srcdir)/fps.h anemotaxis.o: $(srcdir)/screenhackI.h anemotaxis.o: $(srcdir)/screenhack.h anemotaxis.o: $(UTILS_SRC)/colors.h anemotaxis.o: $(UTILS_SRC)/grabscreen.h anemotaxis.o: $(UTILS_SRC)/hsv.h anemotaxis.o: $(UTILS_SRC)/resources.h anemotaxis.o: $(UTILS_SRC)/usleep.h anemotaxis.o: $(UTILS_SRC)/visual.h anemotaxis.o: $(UTILS_SRC)/xdbe.h anemotaxis.o: $(UTILS_SRC)/yarandom.h ant.o: $(srcdir)/automata.h ant.o: ../config.h ant.o: $(srcdir)/fps.h ant.o: $(srcdir)/screenhackI.h ant.o: $(UTILS_SRC)/colors.h ant.o: $(UTILS_SRC)/erase.h ant.o: $(UTILS_SRC)/grabscreen.h ant.o: $(UTILS_SRC)/hsv.h ant.o: $(UTILS_SRC)/resources.h ant.o: $(UTILS_SRC)/usleep.h ant.o: $(UTILS_SRC)/visual.h ant.o: $(UTILS_SRC)/xshm.h ant.o: $(UTILS_SRC)/yarandom.h ant.o: $(srcdir)/xlockmoreI.h ant.o: $(srcdir)/xlockmore.h apollonian.o: ../config.h apollonian.o: $(srcdir)/fps.h apollonian.o: $(srcdir)/screenhackI.h apollonian.o: $(UTILS_SRC)/colors.h apollonian.o: $(UTILS_SRC)/erase.h apollonian.o: $(UTILS_SRC)/grabscreen.h apollonian.o: $(UTILS_SRC)/hsv.h apollonian.o: $(UTILS_SRC)/resources.h apollonian.o: $(UTILS_SRC)/usleep.h apollonian.o: $(UTILS_SRC)/visual.h apollonian.o: $(UTILS_SRC)/xshm.h apollonian.o: $(UTILS_SRC)/yarandom.h apollonian.o: $(srcdir)/xlockmoreI.h apollonian.o: $(srcdir)/xlockmore.h apple2-main.o: $(srcdir)/analogtv.h apple2-main.o: $(srcdir)/apple2.h apple2-main.o: ../config.h apple2-main.o: $(srcdir)/fps.h apple2-main.o: $(srcdir)/screenhackI.h apple2-main.o: $(srcdir)/screenhack.h apple2-main.o: $(UTILS_SRC)/aligned_malloc.h apple2-main.o: $(UTILS_SRC)/colors.h apple2-main.o: $(UTILS_SRC)/grabscreen.h apple2-main.o: $(UTILS_SRC)/hsv.h apple2-main.o: $(UTILS_SRC)/resources.h apple2-main.o: $(UTILS_SRC)/textclient.h apple2-main.o: $(UTILS_SRC)/thread_util.h apple2-main.o: $(UTILS_SRC)/usleep.h apple2-main.o: $(UTILS_SRC)/utf8wc.h apple2-main.o: $(UTILS_SRC)/visual.h apple2-main.o: $(UTILS_SRC)/xshm.h apple2-main.o: $(UTILS_SRC)/yarandom.h apple2.o: $(srcdir)/analogtv.h apple2.o: $(srcdir)/apple2.h apple2.o: ../config.h apple2.o: $(srcdir)/fps.h apple2.o: $(srcdir)/images/apple2font.xbm apple2.o: $(srcdir)/screenhackI.h apple2.o: $(UTILS_SRC)/aligned_malloc.h apple2.o: $(UTILS_SRC)/colors.h apple2.o: $(UTILS_SRC)/grabscreen.h apple2.o: $(UTILS_SRC)/hsv.h apple2.o: $(UTILS_SRC)/resources.h apple2.o: $(UTILS_SRC)/thread_util.h apple2.o: $(UTILS_SRC)/usleep.h 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: ../config.h asm6502.o: $(UTILS_SRC)/yarandom.h attraction.o: ../config.h attraction.o: $(srcdir)/fps.h attraction.o: $(srcdir)/screenhackI.h attraction.o: $(srcdir)/screenhack.h attraction.o: $(UTILS_SRC)/colors.h attraction.o: $(UTILS_SRC)/grabscreen.h attraction.o: $(UTILS_SRC)/hsv.h attraction.o: $(UTILS_SRC)/resources.h attraction.o: $(UTILS_SRC)/spline.h attraction.o: $(UTILS_SRC)/usleep.h attraction.o: $(UTILS_SRC)/visual.h attraction.o: $(UTILS_SRC)/yarandom.h barcode.o: ../config.h barcode.o: $(srcdir)/fps.h barcode.o: $(srcdir)/screenhackI.h barcode.o: $(srcdir)/screenhack.h barcode.o: $(UTILS_SRC)/colors.h barcode.o: $(UTILS_SRC)/grabscreen.h barcode.o: $(UTILS_SRC)/hsv.h barcode.o: $(UTILS_SRC)/resources.h barcode.o: $(UTILS_SRC)/usleep.h barcode.o: $(UTILS_SRC)/visual.h barcode.o: $(UTILS_SRC)/yarandom.h binaryring.o: ../config.h binaryring.o: $(srcdir)/fps.h binaryring.o: $(srcdir)/screenhackI.h binaryring.o: $(srcdir)/screenhack.h binaryring.o: $(UTILS_SRC)/colors.h binaryring.o: $(UTILS_SRC)/grabscreen.h binaryring.o: $(UTILS_SRC)/hsv.h binaryring.o: $(UTILS_SRC)/resources.h binaryring.o: $(UTILS_SRC)/usleep.h binaryring.o: $(UTILS_SRC)/visual.h binaryring.o: $(UTILS_SRC)/yarandom.h blaster.o: ../config.h blaster.o: $(srcdir)/fps.h blaster.o: $(srcdir)/screenhackI.h blaster.o: $(srcdir)/screenhack.h blaster.o: $(UTILS_SRC)/colors.h blaster.o: $(UTILS_SRC)/grabscreen.h blaster.o: $(UTILS_SRC)/hsv.h blaster.o: $(UTILS_SRC)/resources.h blaster.o: $(UTILS_SRC)/usleep.h blaster.o: $(UTILS_SRC)/visual.h blaster.o: $(UTILS_SRC)/yarandom.h blitspin.o: ../config.h blitspin.o: $(srcdir)/fps.h blitspin.o: $(srcdir)/images/som.xbm blitspin.o: $(srcdir)/screenhackI.h blitspin.o: $(srcdir)/screenhack.h blitspin.o: $(UTILS_SRC)/colors.h blitspin.o: $(UTILS_SRC)/grabscreen.h blitspin.o: $(UTILS_SRC)/hsv.h blitspin.o: $(UTILS_SRC)/resources.h blitspin.o: $(UTILS_SRC)/usleep.h blitspin.o: $(UTILS_SRC)/visual.h blitspin.o: $(UTILS_SRC)/yarandom.h blitspin.o: $(srcdir)/xpm-pixmap.h bouboule.o: ../config.h bouboule.o: $(srcdir)/fps.h bouboule.o: $(srcdir)/screenhackI.h bouboule.o: $(UTILS_SRC)/colors.h bouboule.o: $(UTILS_SRC)/grabscreen.h bouboule.o: $(UTILS_SRC)/hsv.h bouboule.o: $(UTILS_SRC)/resources.h bouboule.o: $(UTILS_SRC)/usleep.h bouboule.o: $(UTILS_SRC)/visual.h bouboule.o: $(UTILS_SRC)/xshm.h bouboule.o: $(UTILS_SRC)/yarandom.h bouboule.o: $(srcdir)/xlockmoreI.h bouboule.o: $(srcdir)/xlockmore.h boxfit.o: ../config.h boxfit.o: $(srcdir)/fps.h boxfit.o: $(srcdir)/screenhackI.h boxfit.o: $(srcdir)/screenhack.h boxfit.o: $(UTILS_SRC)/colors.h boxfit.o: $(UTILS_SRC)/grabscreen.h boxfit.o: $(UTILS_SRC)/hsv.h boxfit.o: $(UTILS_SRC)/resources.h boxfit.o: $(UTILS_SRC)/usleep.h boxfit.o: $(UTILS_SRC)/visual.h boxfit.o: $(UTILS_SRC)/yarandom.h boxfit.o: $(srcdir)/xpm-pixmap.h braid.o: ../config.h braid.o: $(srcdir)/fps.h braid.o: $(srcdir)/screenhackI.h braid.o: $(UTILS_SRC)/colors.h braid.o: $(UTILS_SRC)/erase.h braid.o: $(UTILS_SRC)/grabscreen.h braid.o: $(UTILS_SRC)/hsv.h braid.o: $(UTILS_SRC)/resources.h braid.o: $(UTILS_SRC)/usleep.h braid.o: $(UTILS_SRC)/visual.h braid.o: $(UTILS_SRC)/xshm.h braid.o: $(UTILS_SRC)/yarandom.h braid.o: $(srcdir)/xlockmoreI.h braid.o: $(srcdir)/xlockmore.h bsod.o: $(srcdir)/analogtv.h bsod.o: $(srcdir)/apple2.h bsod.o: ../config.h bsod.o: $(srcdir)/fps.h bsod.o: $(srcdir)/images/amiga.xpm bsod.o: $(srcdir)/images/android.xpm bsod.o: $(srcdir)/images/atari.xbm bsod.o: $(srcdir)/images/atm.xbm bsod.o: $(srcdir)/images/hmac.xpm bsod.o: $(srcdir)/images/macbomb.xbm bsod.o: $(srcdir)/images/mac.xbm bsod.o: $(srcdir)/images/osx_10_2.xpm bsod.o: $(srcdir)/images/osx_10_3.xpm bsod.o: $(srcdir)/screenhackI.h bsod.o: $(srcdir)/screenhack.h bsod.o: $(UTILS_SRC)/aligned_malloc.h bsod.o: $(UTILS_SRC)/colors.h bsod.o: $(UTILS_SRC)/grabscreen.h bsod.o: $(UTILS_SRC)/hsv.h bsod.o: $(UTILS_SRC)/resources.h bsod.o: $(UTILS_SRC)/thread_util.h bsod.o: $(UTILS_SRC)/usleep.h bsod.o: $(UTILS_SRC)/visual.h bsod.o: $(UTILS_SRC)/xshm.h bsod.o: $(UTILS_SRC)/yarandom.h bsod.o: $(srcdir)/xpm-pixmap.h bubbles-default.o: $(srcdir)/bubbles.h bubbles-default.o: ../config.h bubbles-default.o: $(srcdir)/images/bubbles/blood10.xpm bubbles-default.o: $(srcdir)/images/bubbles/blood11.xpm bubbles-default.o: $(srcdir)/images/bubbles/blood1.xpm bubbles-default.o: $(srcdir)/images/bubbles/blood2.xpm bubbles-default.o: $(srcdir)/images/bubbles/blood3.xpm bubbles-default.o: $(srcdir)/images/bubbles/blood4.xpm bubbles-default.o: $(srcdir)/images/bubbles/blood5.xpm bubbles-default.o: $(srcdir)/images/bubbles/blood6.xpm bubbles-default.o: $(srcdir)/images/bubbles/blood7.xpm bubbles-default.o: $(srcdir)/images/bubbles/blood8.xpm bubbles-default.o: $(srcdir)/images/bubbles/blood9.xpm bubbles-default.o: $(srcdir)/images/bubbles/blue10.xpm bubbles-default.o: $(srcdir)/images/bubbles/blue11.xpm bubbles-default.o: $(srcdir)/images/bubbles/blue1.xpm bubbles-default.o: $(srcdir)/images/bubbles/blue2.xpm bubbles-default.o: $(srcdir)/images/bubbles/blue3.xpm bubbles-default.o: $(srcdir)/images/bubbles/blue4.xpm bubbles-default.o: $(srcdir)/images/bubbles/blue5.xpm bubbles-default.o: $(srcdir)/images/bubbles/blue6.xpm bubbles-default.o: $(srcdir)/images/bubbles/blue7.xpm bubbles-default.o: $(srcdir)/images/bubbles/blue8.xpm bubbles-default.o: $(srcdir)/images/bubbles/blue9.xpm bubbles-default.o: $(srcdir)/images/bubbles/glass10.xpm bubbles-default.o: $(srcdir)/images/bubbles/glass11.xpm bubbles-default.o: $(srcdir)/images/bubbles/glass1.xpm bubbles-default.o: $(srcdir)/images/bubbles/glass2.xpm bubbles-default.o: $(srcdir)/images/bubbles/glass3.xpm bubbles-default.o: $(srcdir)/images/bubbles/glass4.xpm bubbles-default.o: $(srcdir)/images/bubbles/glass5.xpm bubbles-default.o: $(srcdir)/images/bubbles/glass6.xpm bubbles-default.o: $(srcdir)/images/bubbles/glass7.xpm bubbles-default.o: $(srcdir)/images/bubbles/glass8.xpm bubbles-default.o: $(srcdir)/images/bubbles/glass9.xpm bubbles-default.o: $(srcdir)/images/bubbles/jade10.xpm bubbles-default.o: $(srcdir)/images/bubbles/jade11.xpm bubbles-default.o: $(srcdir)/images/bubbles/jade1.xpm bubbles-default.o: $(srcdir)/images/bubbles/jade2.xpm bubbles-default.o: $(srcdir)/images/bubbles/jade3.xpm bubbles-default.o: $(srcdir)/images/bubbles/jade4.xpm bubbles-default.o: $(srcdir)/images/bubbles/jade5.xpm bubbles-default.o: $(srcdir)/images/bubbles/jade6.xpm bubbles-default.o: $(srcdir)/images/bubbles/jade7.xpm bubbles-default.o: $(srcdir)/images/bubbles/jade8.xpm bubbles-default.o: $(srcdir)/images/bubbles/jade9.xpm bubbles-default.o: $(UTILS_SRC)/yarandom.h bubbles.o: $(srcdir)/bubbles.h bubbles.o: ../config.h bubbles.o: $(srcdir)/fps.h bubbles.o: $(srcdir)/screenhackI.h bubbles.o: $(srcdir)/screenhack.h bubbles.o: $(UTILS_SRC)/colors.h bubbles.o: $(UTILS_SRC)/grabscreen.h bubbles.o: $(UTILS_SRC)/hsv.h bubbles.o: $(UTILS_SRC)/resources.h bubbles.o: $(UTILS_SRC)/usleep.h bubbles.o: $(UTILS_SRC)/visual.h bubbles.o: $(UTILS_SRC)/yarandom.h bubbles.o: $(srcdir)/xpm-pixmap.h bumps.o: ../config.h bumps.o: $(srcdir)/fps.h bumps.o: $(srcdir)/screenhackI.h bumps.o: $(srcdir)/screenhack.h bumps.o: $(UTILS_SRC)/colors.h bumps.o: $(UTILS_SRC)/grabscreen.h bumps.o: $(UTILS_SRC)/hsv.h bumps.o: $(UTILS_SRC)/resources.h bumps.o: $(UTILS_SRC)/usleep.h bumps.o: $(UTILS_SRC)/visual.h bumps.o: $(UTILS_SRC)/yarandom.h ccurve.o: ../config.h ccurve.o: $(srcdir)/fps.h ccurve.o: $(srcdir)/screenhackI.h ccurve.o: $(srcdir)/screenhack.h ccurve.o: $(UTILS_SRC)/colors.h ccurve.o: $(UTILS_SRC)/erase.h ccurve.o: $(UTILS_SRC)/grabscreen.h ccurve.o: $(UTILS_SRC)/hsv.h ccurve.o: $(UTILS_SRC)/resources.h ccurve.o: $(UTILS_SRC)/usleep.h ccurve.o: $(UTILS_SRC)/visual.h ccurve.o: $(UTILS_SRC)/yarandom.h celtic.o: ../config.h celtic.o: $(srcdir)/fps.h celtic.o: $(srcdir)/screenhackI.h celtic.o: $(srcdir)/screenhack.h celtic.o: $(UTILS_SRC)/colors.h celtic.o: $(UTILS_SRC)/erase.h celtic.o: $(UTILS_SRC)/grabscreen.h celtic.o: $(UTILS_SRC)/hsv.h celtic.o: $(UTILS_SRC)/resources.h celtic.o: $(UTILS_SRC)/usleep.h celtic.o: $(UTILS_SRC)/visual.h celtic.o: $(UTILS_SRC)/yarandom.h cloudlife.o: ../config.h cloudlife.o: $(srcdir)/fps.h cloudlife.o: $(srcdir)/screenhackI.h cloudlife.o: $(srcdir)/screenhack.h cloudlife.o: $(UTILS_SRC)/colors.h cloudlife.o: $(UTILS_SRC)/grabscreen.h cloudlife.o: $(UTILS_SRC)/hsv.h cloudlife.o: $(UTILS_SRC)/resources.h cloudlife.o: $(UTILS_SRC)/usleep.h cloudlife.o: $(UTILS_SRC)/visual.h cloudlife.o: $(UTILS_SRC)/yarandom.h compass.o: ../config.h compass.o: $(srcdir)/fps.h compass.o: $(srcdir)/screenhackI.h compass.o: $(srcdir)/screenhack.h compass.o: $(UTILS_SRC)/colors.h compass.o: $(UTILS_SRC)/grabscreen.h compass.o: $(UTILS_SRC)/hsv.h compass.o: $(UTILS_SRC)/resources.h compass.o: $(UTILS_SRC)/usleep.h compass.o: $(UTILS_SRC)/visual.h compass.o: $(UTILS_SRC)/xdbe.h compass.o: $(UTILS_SRC)/yarandom.h coral.o: ../config.h coral.o: $(srcdir)/fps.h coral.o: $(srcdir)/screenhackI.h coral.o: $(srcdir)/screenhack.h coral.o: $(UTILS_SRC)/colors.h coral.o: $(UTILS_SRC)/erase.h coral.o: $(UTILS_SRC)/grabscreen.h coral.o: $(UTILS_SRC)/hsv.h coral.o: $(UTILS_SRC)/resources.h coral.o: $(UTILS_SRC)/usleep.h coral.o: $(UTILS_SRC)/visual.h coral.o: $(UTILS_SRC)/yarandom.h critical.o: ../config.h critical.o: $(srcdir)/fps.h critical.o: $(srcdir)/screenhackI.h critical.o: $(srcdir)/screenhack.h critical.o: $(UTILS_SRC)/colors.h critical.o: $(UTILS_SRC)/erase.h critical.o: $(UTILS_SRC)/grabscreen.h critical.o: $(UTILS_SRC)/hsv.h critical.o: $(UTILS_SRC)/resources.h critical.o: $(UTILS_SRC)/usleep.h critical.o: $(UTILS_SRC)/visual.h critical.o: $(UTILS_SRC)/yarandom.h crystal.o: ../config.h crystal.o: $(srcdir)/fps.h crystal.o: $(srcdir)/screenhackI.h crystal.o: $(UTILS_SRC)/colors.h crystal.o: $(UTILS_SRC)/grabscreen.h crystal.o: $(UTILS_SRC)/hsv.h crystal.o: $(UTILS_SRC)/resources.h crystal.o: $(UTILS_SRC)/usleep.h crystal.o: $(UTILS_SRC)/visual.h crystal.o: $(UTILS_SRC)/xshm.h crystal.o: $(UTILS_SRC)/yarandom.h crystal.o: $(srcdir)/xlockmoreI.h crystal.o: $(srcdir)/xlockmore.h cwaves.o: ../config.h cwaves.o: $(srcdir)/fps.h cwaves.o: $(srcdir)/screenhackI.h cwaves.o: $(srcdir)/screenhack.h cwaves.o: $(UTILS_SRC)/colors.h cwaves.o: $(UTILS_SRC)/grabscreen.h cwaves.o: $(UTILS_SRC)/hsv.h cwaves.o: $(UTILS_SRC)/resources.h cwaves.o: $(UTILS_SRC)/usleep.h cwaves.o: $(UTILS_SRC)/visual.h cwaves.o: $(UTILS_SRC)/yarandom.h cwaves.o: $(srcdir)/xpm-pixmap.h cynosure.o: ../config.h cynosure.o: $(srcdir)/fps.h cynosure.o: $(srcdir)/screenhackI.h cynosure.o: $(srcdir)/screenhack.h cynosure.o: $(UTILS_SRC)/colors.h cynosure.o: $(UTILS_SRC)/grabscreen.h cynosure.o: $(UTILS_SRC)/hsv.h cynosure.o: $(UTILS_SRC)/resources.h cynosure.o: $(UTILS_SRC)/usleep.h cynosure.o: $(UTILS_SRC)/visual.h cynosure.o: $(UTILS_SRC)/yarandom.h decayscreen.o: ../config.h decayscreen.o: $(srcdir)/fps.h decayscreen.o: $(srcdir)/screenhackI.h decayscreen.o: $(srcdir)/screenhack.h decayscreen.o: $(UTILS_SRC)/colors.h decayscreen.o: $(UTILS_SRC)/grabscreen.h decayscreen.o: $(UTILS_SRC)/hsv.h decayscreen.o: $(UTILS_SRC)/resources.h decayscreen.o: $(UTILS_SRC)/usleep.h decayscreen.o: $(UTILS_SRC)/visual.h decayscreen.o: $(UTILS_SRC)/yarandom.h deco.o: ../config.h deco.o: $(srcdir)/fps.h deco.o: $(srcdir)/screenhackI.h deco.o: $(srcdir)/screenhack.h deco.o: $(UTILS_SRC)/colors.h deco.o: $(UTILS_SRC)/grabscreen.h deco.o: $(UTILS_SRC)/hsv.h deco.o: $(UTILS_SRC)/resources.h deco.o: $(UTILS_SRC)/usleep.h deco.o: $(UTILS_SRC)/visual.h deco.o: $(UTILS_SRC)/yarandom.h delaunay.o: ../config.h delaunay.o: $(srcdir)/delaunay.h deluxe.o: ../config.h deluxe.o: $(srcdir)/fps.h deluxe.o: $(srcdir)/screenhackI.h deluxe.o: $(srcdir)/screenhack.h deluxe.o: $(UTILS_SRC)/alpha.h deluxe.o: $(UTILS_SRC)/colors.h deluxe.o: $(UTILS_SRC)/grabscreen.h deluxe.o: $(UTILS_SRC)/hsv.h deluxe.o: $(UTILS_SRC)/resources.h deluxe.o: $(UTILS_SRC)/usleep.h deluxe.o: $(UTILS_SRC)/visual.h deluxe.o: $(UTILS_SRC)/xdbe.h deluxe.o: $(UTILS_SRC)/yarandom.h demon.o: $(srcdir)/automata.h demon.o: ../config.h demon.o: $(srcdir)/fps.h demon.o: $(srcdir)/screenhackI.h demon.o: $(UTILS_SRC)/colors.h demon.o: $(UTILS_SRC)/grabscreen.h demon.o: $(UTILS_SRC)/hsv.h demon.o: $(UTILS_SRC)/resources.h demon.o: $(UTILS_SRC)/usleep.h demon.o: $(UTILS_SRC)/visual.h demon.o: $(UTILS_SRC)/xshm.h demon.o: $(UTILS_SRC)/yarandom.h demon.o: $(srcdir)/xlockmoreI.h demon.o: $(srcdir)/xlockmore.h discrete.o: ../config.h discrete.o: $(srcdir)/fps.h discrete.o: $(srcdir)/screenhackI.h discrete.o: $(UTILS_SRC)/colors.h discrete.o: $(UTILS_SRC)/erase.h discrete.o: $(UTILS_SRC)/grabscreen.h discrete.o: $(UTILS_SRC)/hsv.h discrete.o: $(UTILS_SRC)/resources.h discrete.o: $(UTILS_SRC)/usleep.h discrete.o: $(UTILS_SRC)/visual.h discrete.o: $(UTILS_SRC)/xshm.h discrete.o: $(UTILS_SRC)/yarandom.h discrete.o: $(srcdir)/xlockmoreI.h discrete.o: $(srcdir)/xlockmore.h distort.o: ../config.h distort.o: $(srcdir)/fps.h distort.o: $(srcdir)/screenhackI.h distort.o: $(srcdir)/screenhack.h distort.o: $(UTILS_SRC)/colors.h distort.o: $(UTILS_SRC)/grabscreen.h distort.o: $(UTILS_SRC)/hsv.h distort.o: $(UTILS_SRC)/resources.h distort.o: $(UTILS_SRC)/usleep.h distort.o: $(UTILS_SRC)/visual.h distort.o: $(UTILS_SRC)/yarandom.h drift.o: ../config.h drift.o: $(srcdir)/fps.h drift.o: $(srcdir)/screenhackI.h drift.o: $(UTILS_SRC)/colors.h drift.o: $(UTILS_SRC)/erase.h drift.o: $(UTILS_SRC)/grabscreen.h drift.o: $(UTILS_SRC)/hsv.h drift.o: $(UTILS_SRC)/resources.h drift.o: $(UTILS_SRC)/usleep.h drift.o: $(UTILS_SRC)/visual.h drift.o: $(UTILS_SRC)/xshm.h drift.o: $(UTILS_SRC)/yarandom.h drift.o: $(srcdir)/xlockmoreI.h drift.o: $(srcdir)/xlockmore.h epicycle.o: ../config.h epicycle.o: $(srcdir)/fps.h epicycle.o: $(srcdir)/screenhackI.h epicycle.o: $(srcdir)/screenhack.h epicycle.o: $(UTILS_SRC)/colors.h epicycle.o: $(UTILS_SRC)/erase.h epicycle.o: $(UTILS_SRC)/grabscreen.h epicycle.o: $(UTILS_SRC)/hsv.h epicycle.o: $(UTILS_SRC)/resources.h epicycle.o: $(UTILS_SRC)/usleep.h epicycle.o: $(UTILS_SRC)/visual.h epicycle.o: $(UTILS_SRC)/yarandom.h eruption.o: ../config.h eruption.o: $(srcdir)/fps.h eruption.o: $(srcdir)/screenhackI.h eruption.o: $(srcdir)/screenhack.h eruption.o: $(UTILS_SRC)/colors.h eruption.o: $(UTILS_SRC)/grabscreen.h eruption.o: $(UTILS_SRC)/hsv.h eruption.o: $(UTILS_SRC)/resources.h eruption.o: $(UTILS_SRC)/usleep.h eruption.o: $(UTILS_SRC)/visual.h eruption.o: $(UTILS_SRC)/yarandom.h euler2d.o: ../config.h euler2d.o: $(srcdir)/fps.h euler2d.o: $(srcdir)/screenhackI.h euler2d.o: $(UTILS_SRC)/colors.h euler2d.o: $(UTILS_SRC)/grabscreen.h euler2d.o: $(UTILS_SRC)/hsv.h euler2d.o: $(UTILS_SRC)/resources.h euler2d.o: $(UTILS_SRC)/usleep.h euler2d.o: $(UTILS_SRC)/visual.h euler2d.o: $(UTILS_SRC)/xshm.h euler2d.o: $(UTILS_SRC)/yarandom.h euler2d.o: $(srcdir)/xlockmoreI.h euler2d.o: $(srcdir)/xlockmore.h fadeplot.o: ../config.h fadeplot.o: $(srcdir)/fps.h fadeplot.o: $(srcdir)/screenhackI.h fadeplot.o: $(UTILS_SRC)/colors.h fadeplot.o: $(UTILS_SRC)/grabscreen.h fadeplot.o: $(UTILS_SRC)/hsv.h fadeplot.o: $(UTILS_SRC)/resources.h fadeplot.o: $(UTILS_SRC)/usleep.h fadeplot.o: $(UTILS_SRC)/visual.h fadeplot.o: $(UTILS_SRC)/xshm.h fadeplot.o: $(UTILS_SRC)/yarandom.h fadeplot.o: $(srcdir)/xlockmoreI.h fadeplot.o: $(srcdir)/xlockmore.h fiberlamp.o: ../config.h fiberlamp.o: $(srcdir)/fps.h fiberlamp.o: $(srcdir)/screenhackI.h fiberlamp.o: $(UTILS_SRC)/colors.h fiberlamp.o: $(UTILS_SRC)/grabscreen.h fiberlamp.o: $(UTILS_SRC)/hsv.h fiberlamp.o: $(UTILS_SRC)/resources.h fiberlamp.o: $(UTILS_SRC)/usleep.h fiberlamp.o: $(UTILS_SRC)/visual.h fiberlamp.o: $(UTILS_SRC)/xshm.h fiberlamp.o: $(UTILS_SRC)/yarandom.h fiberlamp.o: $(srcdir)/xlockmoreI.h fiberlamp.o: $(srcdir)/xlockmore.h fireworkx.o: ../config.h fireworkx.o: $(srcdir)/fps.h fireworkx.o: $(srcdir)/screenhackI.h fireworkx.o: $(srcdir)/screenhack.h fireworkx.o: $(UTILS_SRC)/colors.h fireworkx.o: $(UTILS_SRC)/grabscreen.h fireworkx.o: $(UTILS_SRC)/hsv.h fireworkx.o: $(UTILS_SRC)/resources.h fireworkx.o: $(UTILS_SRC)/usleep.h fireworkx.o: $(UTILS_SRC)/visual.h fireworkx.o: $(UTILS_SRC)/yarandom.h flag.o: ../config.h flag.o: $(srcdir)/fps.h flag.o: $(srcdir)/images/bob.xbm flag.o: $(srcdir)/screenhackI.h flag.o: $(UTILS_SRC)/colors.h flag.o: $(UTILS_SRC)/grabscreen.h flag.o: $(UTILS_SRC)/hsv.h flag.o: $(UTILS_SRC)/resources.h flag.o: $(UTILS_SRC)/usleep.h flag.o: $(UTILS_SRC)/visual.h flag.o: $(UTILS_SRC)/xshm.h flag.o: $(UTILS_SRC)/yarandom.h flag.o: $(srcdir)/xlockmoreI.h flag.o: $(srcdir)/xlockmore.h flag.o: $(srcdir)/xpm-pixmap.h flame.o: ../config.h flame.o: $(srcdir)/fps.h flame.o: $(srcdir)/screenhackI.h flame.o: $(srcdir)/screenhack.h flame.o: $(UTILS_SRC)/colors.h flame.o: $(UTILS_SRC)/grabscreen.h flame.o: $(UTILS_SRC)/hsv.h flame.o: $(UTILS_SRC)/resources.h flame.o: $(UTILS_SRC)/usleep.h flame.o: $(UTILS_SRC)/visual.h flame.o: $(UTILS_SRC)/yarandom.h flow.o: ../config.h flow.o: $(srcdir)/fps.h flow.o: $(srcdir)/screenhackI.h flow.o: $(UTILS_SRC)/colors.h flow.o: $(UTILS_SRC)/grabscreen.h flow.o: $(UTILS_SRC)/hsv.h flow.o: $(UTILS_SRC)/resources.h flow.o: $(UTILS_SRC)/usleep.h flow.o: $(UTILS_SRC)/visual.h flow.o: $(UTILS_SRC)/xshm.h flow.o: $(UTILS_SRC)/yarandom.h flow.o: $(srcdir)/xlockmoreI.h flow.o: $(srcdir)/xlockmore.h fluidballs.o: ../config.h fluidballs.o: $(srcdir)/fps.h fluidballs.o: $(srcdir)/screenhackI.h fluidballs.o: $(srcdir)/screenhack.h fluidballs.o: $(UTILS_SRC)/colors.h fluidballs.o: $(UTILS_SRC)/grabscreen.h fluidballs.o: $(UTILS_SRC)/hsv.h fluidballs.o: $(UTILS_SRC)/resources.h fluidballs.o: $(UTILS_SRC)/usleep.h fluidballs.o: $(UTILS_SRC)/visual.h fluidballs.o: $(UTILS_SRC)/xdbe.h fluidballs.o: $(UTILS_SRC)/yarandom.h fontglide.o: ../config.h fontglide.o: $(srcdir)/fps.h fontglide.o: $(srcdir)/screenhackI.h fontglide.o: $(srcdir)/screenhack.h fontglide.o: $(UTILS_SRC)/colors.h fontglide.o: $(UTILS_SRC)/grabscreen.h fontglide.o: $(UTILS_SRC)/hsv.h fontglide.o: $(UTILS_SRC)/resources.h fontglide.o: $(UTILS_SRC)/textclient.h fontglide.o: $(UTILS_SRC)/usleep.h fontglide.o: $(UTILS_SRC)/utf8wc.h fontglide.o: $(UTILS_SRC)/visual.h fontglide.o: $(UTILS_SRC)/xdbe.h fontglide.o: $(UTILS_SRC)/xft.h fontglide.o: $(UTILS_SRC)/yarandom.h forest.o: ../config.h forest.o: $(srcdir)/fps.h forest.o: $(srcdir)/screenhackI.h forest.o: $(UTILS_SRC)/colors.h forest.o: $(UTILS_SRC)/grabscreen.h forest.o: $(UTILS_SRC)/hsv.h forest.o: $(UTILS_SRC)/resources.h forest.o: $(UTILS_SRC)/usleep.h forest.o: $(UTILS_SRC)/visual.h forest.o: $(UTILS_SRC)/xshm.h forest.o: $(UTILS_SRC)/yarandom.h forest.o: $(srcdir)/xlockmoreI.h forest.o: $(srcdir)/xlockmore.h fps.o: ../config.h fps.o: $(srcdir)/fpsI.h fps.o: $(srcdir)/fps.h fps.o: $(srcdir)/screenhackI.h fps.o: $(UTILS_SRC)/colors.h fps.o: $(UTILS_SRC)/grabscreen.h fps.o: $(UTILS_SRC)/hsv.h fps.o: $(UTILS_SRC)/resources.h fps.o: $(UTILS_SRC)/usleep.h fps.o: $(UTILS_SRC)/visual.h fps.o: $(UTILS_SRC)/yarandom.h fuzzyflakes.o: ../config.h fuzzyflakes.o: $(srcdir)/fps.h fuzzyflakes.o: $(srcdir)/screenhackI.h fuzzyflakes.o: $(srcdir)/screenhack.h fuzzyflakes.o: $(UTILS_SRC)/colors.h fuzzyflakes.o: $(UTILS_SRC)/grabscreen.h fuzzyflakes.o: $(UTILS_SRC)/hsv.h fuzzyflakes.o: $(UTILS_SRC)/resources.h fuzzyflakes.o: $(UTILS_SRC)/usleep.h fuzzyflakes.o: $(UTILS_SRC)/visual.h fuzzyflakes.o: $(UTILS_SRC)/yarandom.h galaxy.o: ../config.h galaxy.o: $(srcdir)/fps.h galaxy.o: $(srcdir)/screenhackI.h galaxy.o: $(UTILS_SRC)/colors.h galaxy.o: $(UTILS_SRC)/grabscreen.h galaxy.o: $(UTILS_SRC)/hsv.h galaxy.o: $(UTILS_SRC)/resources.h galaxy.o: $(UTILS_SRC)/usleep.h galaxy.o: $(UTILS_SRC)/visual.h galaxy.o: $(UTILS_SRC)/xshm.h galaxy.o: $(UTILS_SRC)/yarandom.h galaxy.o: $(srcdir)/xlockmoreI.h galaxy.o: $(srcdir)/xlockmore.h goop.o: ../config.h goop.o: $(srcdir)/fps.h goop.o: $(srcdir)/screenhackI.h goop.o: $(srcdir)/screenhack.h goop.o: $(UTILS_SRC)/alpha.h goop.o: $(UTILS_SRC)/colors.h goop.o: $(UTILS_SRC)/grabscreen.h goop.o: $(UTILS_SRC)/hsv.h goop.o: $(UTILS_SRC)/resources.h goop.o: $(UTILS_SRC)/spline.h goop.o: $(UTILS_SRC)/usleep.h goop.o: $(UTILS_SRC)/visual.h goop.o: $(UTILS_SRC)/yarandom.h grav.o: ../config.h grav.o: $(srcdir)/fps.h grav.o: $(srcdir)/screenhackI.h grav.o: $(UTILS_SRC)/colors.h grav.o: $(UTILS_SRC)/grabscreen.h grav.o: $(UTILS_SRC)/hsv.h grav.o: $(UTILS_SRC)/resources.h grav.o: $(UTILS_SRC)/usleep.h grav.o: $(UTILS_SRC)/visual.h grav.o: $(UTILS_SRC)/xshm.h grav.o: $(UTILS_SRC)/yarandom.h grav.o: $(srcdir)/xlockmoreI.h grav.o: $(srcdir)/xlockmore.h greynetic.o: ../config.h greynetic.o: $(srcdir)/fps.h greynetic.o: $(srcdir)/screenhackI.h greynetic.o: $(srcdir)/screenhack.h greynetic.o: $(UTILS_SRC)/colors.h greynetic.o: $(UTILS_SRC)/grabscreen.h greynetic.o: $(UTILS_SRC)/hsv.h greynetic.o: $(UTILS_SRC)/resources.h greynetic.o: $(UTILS_SRC)/usleep.h greynetic.o: $(UTILS_SRC)/visual.h greynetic.o: $(UTILS_SRC)/yarandom.h halftone.o: ../config.h halftone.o: $(srcdir)/fps.h halftone.o: $(srcdir)/screenhackI.h halftone.o: $(srcdir)/screenhack.h halftone.o: $(UTILS_SRC)/colors.h halftone.o: $(UTILS_SRC)/grabscreen.h halftone.o: $(UTILS_SRC)/hsv.h halftone.o: $(UTILS_SRC)/resources.h halftone.o: $(UTILS_SRC)/usleep.h halftone.o: $(UTILS_SRC)/visual.h halftone.o: $(UTILS_SRC)/yarandom.h halo.o: ../config.h halo.o: $(srcdir)/fps.h halo.o: $(srcdir)/screenhackI.h halo.o: $(srcdir)/screenhack.h halo.o: $(UTILS_SRC)/colors.h halo.o: $(UTILS_SRC)/grabscreen.h halo.o: $(UTILS_SRC)/hsv.h halo.o: $(UTILS_SRC)/resources.h halo.o: $(UTILS_SRC)/usleep.h halo.o: $(UTILS_SRC)/visual.h halo.o: $(UTILS_SRC)/yarandom.h helix.o: ../config.h helix.o: $(srcdir)/fps.h helix.o: $(srcdir)/screenhackI.h helix.o: $(srcdir)/screenhack.h helix.o: $(UTILS_SRC)/colors.h helix.o: $(UTILS_SRC)/erase.h helix.o: $(UTILS_SRC)/grabscreen.h helix.o: $(UTILS_SRC)/hsv.h helix.o: $(UTILS_SRC)/resources.h helix.o: $(UTILS_SRC)/usleep.h helix.o: $(UTILS_SRC)/visual.h helix.o: $(UTILS_SRC)/yarandom.h hexadrop.o: ../config.h hexadrop.o: $(srcdir)/fps.h hexadrop.o: $(srcdir)/screenhackI.h hexadrop.o: $(srcdir)/screenhack.h hexadrop.o: $(UTILS_SRC)/colors.h hexadrop.o: $(UTILS_SRC)/grabscreen.h hexadrop.o: $(UTILS_SRC)/hsv.h hexadrop.o: $(UTILS_SRC)/resources.h hexadrop.o: $(UTILS_SRC)/usleep.h hexadrop.o: $(UTILS_SRC)/visual.h hexadrop.o: $(UTILS_SRC)/yarandom.h hopalong.o: ../config.h hopalong.o: $(srcdir)/fps.h hopalong.o: $(srcdir)/screenhackI.h hopalong.o: $(UTILS_SRC)/colors.h hopalong.o: $(UTILS_SRC)/erase.h hopalong.o: $(UTILS_SRC)/grabscreen.h hopalong.o: $(UTILS_SRC)/hsv.h hopalong.o: $(UTILS_SRC)/resources.h hopalong.o: $(UTILS_SRC)/usleep.h hopalong.o: $(UTILS_SRC)/visual.h hopalong.o: $(UTILS_SRC)/xshm.h hopalong.o: $(UTILS_SRC)/yarandom.h hopalong.o: $(srcdir)/xlockmoreI.h hopalong.o: $(srcdir)/xlockmore.h hyperball.o: ../config.h hyperball.o: $(srcdir)/fps.h hyperball.o: $(srcdir)/screenhackI.h hyperball.o: $(srcdir)/screenhack.h hyperball.o: $(UTILS_SRC)/colors.h hyperball.o: $(UTILS_SRC)/grabscreen.h hyperball.o: $(UTILS_SRC)/hsv.h hyperball.o: $(UTILS_SRC)/resources.h hyperball.o: $(UTILS_SRC)/usleep.h hyperball.o: $(UTILS_SRC)/visual.h hyperball.o: $(UTILS_SRC)/yarandom.h hypercube.o: ../config.h hypercube.o: $(srcdir)/fps.h hypercube.o: $(srcdir)/screenhackI.h hypercube.o: $(srcdir)/screenhack.h hypercube.o: $(UTILS_SRC)/colors.h hypercube.o: $(UTILS_SRC)/grabscreen.h hypercube.o: $(UTILS_SRC)/hsv.h hypercube.o: $(UTILS_SRC)/resources.h hypercube.o: $(UTILS_SRC)/usleep.h hypercube.o: $(UTILS_SRC)/visual.h hypercube.o: $(UTILS_SRC)/yarandom.h ifs.o: ../config.h ifs.o: $(srcdir)/fps.h ifs.o: $(srcdir)/screenhackI.h ifs.o: $(srcdir)/screenhack.h ifs.o: $(UTILS_SRC)/colors.h ifs.o: $(UTILS_SRC)/grabscreen.h ifs.o: $(UTILS_SRC)/hsv.h ifs.o: $(UTILS_SRC)/resources.h ifs.o: $(UTILS_SRC)/usleep.h ifs.o: $(UTILS_SRC)/visual.h ifs.o: $(UTILS_SRC)/yarandom.h imsmap.o: ../config.h imsmap.o: $(srcdir)/fps.h imsmap.o: $(srcdir)/screenhackI.h imsmap.o: $(srcdir)/screenhack.h imsmap.o: $(UTILS_SRC)/colors.h imsmap.o: $(UTILS_SRC)/grabscreen.h imsmap.o: $(UTILS_SRC)/hsv.h imsmap.o: $(UTILS_SRC)/resources.h imsmap.o: $(UTILS_SRC)/usleep.h imsmap.o: $(UTILS_SRC)/visual.h imsmap.o: $(UTILS_SRC)/yarandom.h interaggregate.o: ../config.h interaggregate.o: $(srcdir)/fps.h interaggregate.o: $(srcdir)/screenhackI.h interaggregate.o: $(srcdir)/screenhack.h interaggregate.o: $(UTILS_SRC)/colors.h interaggregate.o: $(UTILS_SRC)/grabscreen.h interaggregate.o: $(UTILS_SRC)/hsv.h interaggregate.o: $(UTILS_SRC)/resources.h interaggregate.o: $(UTILS_SRC)/usleep.h interaggregate.o: $(UTILS_SRC)/visual.h interaggregate.o: $(UTILS_SRC)/yarandom.h interference.o: ../config.h interference.o: $(srcdir)/fps.h interference.o: $(srcdir)/screenhackI.h interference.o: $(srcdir)/screenhack.h interference.o: $(UTILS_SRC)/aligned_malloc.h interference.o: $(UTILS_SRC)/colors.h interference.o: $(UTILS_SRC)/grabscreen.h interference.o: $(UTILS_SRC)/hsv.h interference.o: $(UTILS_SRC)/resources.h interference.o: $(UTILS_SRC)/thread_util.h interference.o: $(UTILS_SRC)/usleep.h interference.o: $(UTILS_SRC)/visual.h interference.o: $(UTILS_SRC)/xdbe.h interference.o: $(UTILS_SRC)/xshm.h interference.o: $(UTILS_SRC)/yarandom.h intermomentary.o: ../config.h intermomentary.o: $(srcdir)/fps.h intermomentary.o: $(srcdir)/screenhackI.h intermomentary.o: $(srcdir)/screenhack.h intermomentary.o: $(UTILS_SRC)/colors.h intermomentary.o: $(UTILS_SRC)/grabscreen.h intermomentary.o: $(UTILS_SRC)/hsv.h intermomentary.o: $(UTILS_SRC)/resources.h intermomentary.o: $(UTILS_SRC)/usleep.h intermomentary.o: $(UTILS_SRC)/visual.h intermomentary.o: $(UTILS_SRC)/yarandom.h juggle.o: ../config.h juggle.o: $(srcdir)/fps.h juggle.o: $(srcdir)/screenhackI.h juggle.o: $(UTILS_SRC)/colors.h juggle.o: $(UTILS_SRC)/grabscreen.h juggle.o: $(UTILS_SRC)/hsv.h juggle.o: $(UTILS_SRC)/resources.h juggle.o: $(UTILS_SRC)/usleep.h juggle.o: $(UTILS_SRC)/visual.h juggle.o: $(UTILS_SRC)/xshm.h juggle.o: $(UTILS_SRC)/yarandom.h juggle.o: $(srcdir)/xlockmoreI.h juggle.o: $(srcdir)/xlockmore.h julia.o: ../config.h julia.o: $(srcdir)/fps.h julia.o: $(srcdir)/screenhackI.h julia.o: $(UTILS_SRC)/colors.h julia.o: $(UTILS_SRC)/grabscreen.h julia.o: $(UTILS_SRC)/hsv.h julia.o: $(UTILS_SRC)/resources.h julia.o: $(UTILS_SRC)/usleep.h julia.o: $(UTILS_SRC)/visual.h julia.o: $(UTILS_SRC)/xshm.h julia.o: $(UTILS_SRC)/yarandom.h julia.o: $(srcdir)/xlockmoreI.h julia.o: $(srcdir)/xlockmore.h kaleidescope.o: ../config.h kaleidescope.o: $(srcdir)/fps.h kaleidescope.o: $(srcdir)/screenhackI.h kaleidescope.o: $(srcdir)/screenhack.h kaleidescope.o: $(UTILS_SRC)/colors.h kaleidescope.o: $(UTILS_SRC)/grabscreen.h kaleidescope.o: $(UTILS_SRC)/hsv.h kaleidescope.o: $(UTILS_SRC)/resources.h kaleidescope.o: $(UTILS_SRC)/spline.h kaleidescope.o: $(UTILS_SRC)/usleep.h kaleidescope.o: $(UTILS_SRC)/visual.h kaleidescope.o: $(UTILS_SRC)/yarandom.h kumppa.o: ../config.h kumppa.o: $(srcdir)/fps.h kumppa.o: $(srcdir)/screenhackI.h kumppa.o: $(srcdir)/screenhack.h kumppa.o: $(UTILS_SRC)/colors.h kumppa.o: $(UTILS_SRC)/grabscreen.h kumppa.o: $(UTILS_SRC)/hsv.h kumppa.o: $(UTILS_SRC)/resources.h kumppa.o: $(UTILS_SRC)/usleep.h kumppa.o: $(UTILS_SRC)/visual.h kumppa.o: $(UTILS_SRC)/xdbe.h kumppa.o: $(UTILS_SRC)/yarandom.h laser.o: ../config.h laser.o: $(srcdir)/fps.h laser.o: $(srcdir)/screenhackI.h laser.o: $(UTILS_SRC)/colors.h laser.o: $(UTILS_SRC)/grabscreen.h laser.o: $(UTILS_SRC)/hsv.h laser.o: $(UTILS_SRC)/resources.h laser.o: $(UTILS_SRC)/usleep.h laser.o: $(UTILS_SRC)/visual.h laser.o: $(UTILS_SRC)/xshm.h laser.o: $(UTILS_SRC)/yarandom.h laser.o: $(srcdir)/xlockmoreI.h laser.o: $(srcdir)/xlockmore.h lcdscrub.o: ../config.h lcdscrub.o: $(srcdir)/fps.h lcdscrub.o: $(srcdir)/screenhackI.h lcdscrub.o: $(srcdir)/screenhack.h lcdscrub.o: $(UTILS_SRC)/colors.h lcdscrub.o: $(UTILS_SRC)/grabscreen.h lcdscrub.o: $(UTILS_SRC)/hsv.h lcdscrub.o: $(UTILS_SRC)/resources.h lcdscrub.o: $(UTILS_SRC)/usleep.h lcdscrub.o: $(UTILS_SRC)/visual.h lcdscrub.o: $(UTILS_SRC)/yarandom.h lightning.o: ../config.h lightning.o: $(srcdir)/fps.h lightning.o: $(srcdir)/screenhackI.h lightning.o: $(UTILS_SRC)/colors.h lightning.o: $(UTILS_SRC)/grabscreen.h lightning.o: $(UTILS_SRC)/hsv.h lightning.o: $(UTILS_SRC)/resources.h lightning.o: $(UTILS_SRC)/usleep.h lightning.o: $(UTILS_SRC)/visual.h lightning.o: $(UTILS_SRC)/xshm.h lightning.o: $(UTILS_SRC)/yarandom.h lightning.o: $(srcdir)/xlockmoreI.h lightning.o: $(srcdir)/xlockmore.h lisa.o: ../config.h lisa.o: $(srcdir)/fps.h lisa.o: $(srcdir)/screenhackI.h lisa.o: $(UTILS_SRC)/colors.h lisa.o: $(UTILS_SRC)/grabscreen.h lisa.o: $(UTILS_SRC)/hsv.h lisa.o: $(UTILS_SRC)/resources.h lisa.o: $(UTILS_SRC)/usleep.h lisa.o: $(UTILS_SRC)/visual.h lisa.o: $(UTILS_SRC)/xshm.h lisa.o: $(UTILS_SRC)/yarandom.h lisa.o: $(srcdir)/xlockmoreI.h lisa.o: $(srcdir)/xlockmore.h lissie.o: ../config.h lissie.o: $(srcdir)/fps.h lissie.o: $(srcdir)/screenhackI.h lissie.o: $(UTILS_SRC)/colors.h lissie.o: $(UTILS_SRC)/grabscreen.h lissie.o: $(UTILS_SRC)/hsv.h lissie.o: $(UTILS_SRC)/resources.h lissie.o: $(UTILS_SRC)/usleep.h lissie.o: $(UTILS_SRC)/visual.h lissie.o: $(UTILS_SRC)/xshm.h lissie.o: $(UTILS_SRC)/yarandom.h lissie.o: $(srcdir)/xlockmoreI.h lissie.o: $(srcdir)/xlockmore.h lmorph.o: ../config.h lmorph.o: $(srcdir)/fps.h lmorph.o: $(srcdir)/screenhackI.h lmorph.o: $(srcdir)/screenhack.h lmorph.o: $(UTILS_SRC)/colors.h lmorph.o: $(UTILS_SRC)/grabscreen.h lmorph.o: $(UTILS_SRC)/hsv.h lmorph.o: $(UTILS_SRC)/resources.h lmorph.o: $(UTILS_SRC)/usleep.h lmorph.o: $(UTILS_SRC)/visual.h lmorph.o: $(UTILS_SRC)/yarandom.h loop.o: $(srcdir)/automata.h loop.o: ../config.h loop.o: $(srcdir)/fps.h loop.o: $(srcdir)/screenhackI.h loop.o: $(UTILS_SRC)/colors.h loop.o: $(UTILS_SRC)/grabscreen.h loop.o: $(UTILS_SRC)/hsv.h loop.o: $(UTILS_SRC)/resources.h loop.o: $(UTILS_SRC)/usleep.h loop.o: $(UTILS_SRC)/visual.h loop.o: $(UTILS_SRC)/xshm.h loop.o: $(UTILS_SRC)/yarandom.h loop.o: $(srcdir)/xlockmoreI.h loop.o: $(srcdir)/xlockmore.h m6502.o: $(srcdir)/analogtv.h m6502.o: $(srcdir)/asm6502.h m6502.o: ../config.h m6502.o: $(srcdir)/fps.h m6502.o: m6502.h m6502.o: $(srcdir)/screenhackI.h m6502.o: $(srcdir)/screenhack.h m6502.o: $(UTILS_SRC)/aligned_malloc.h m6502.o: $(UTILS_SRC)/colors.h m6502.o: $(UTILS_SRC)/grabscreen.h m6502.o: $(UTILS_SRC)/hsv.h m6502.o: $(UTILS_SRC)/resources.h m6502.o: $(UTILS_SRC)/thread_util.h m6502.o: $(UTILS_SRC)/usleep.h m6502.o: $(UTILS_SRC)/visual.h m6502.o: $(UTILS_SRC)/xshm.h m6502.o: $(UTILS_SRC)/yarandom.h maze.o: ../config.h maze.o: $(srcdir)/fps.h maze.o: $(srcdir)/screenhackI.h maze.o: $(srcdir)/screenhack.h maze.o: $(UTILS_SRC)/colors.h maze.o: $(UTILS_SRC)/erase.h maze.o: $(UTILS_SRC)/grabscreen.h maze.o: $(UTILS_SRC)/hsv.h maze.o: $(UTILS_SRC)/resources.h maze.o: $(UTILS_SRC)/usleep.h maze.o: $(UTILS_SRC)/visual.h maze.o: $(UTILS_SRC)/yarandom.h memscroller.o: ../config.h memscroller.o: $(srcdir)/fps.h memscroller.o: $(srcdir)/screenhackI.h memscroller.o: $(srcdir)/screenhack.h memscroller.o: $(UTILS_SRC)/colors.h memscroller.o: $(UTILS_SRC)/grabscreen.h memscroller.o: $(UTILS_SRC)/hsv.h memscroller.o: $(UTILS_SRC)/resources.h memscroller.o: $(UTILS_SRC)/usleep.h memscroller.o: $(UTILS_SRC)/visual.h memscroller.o: $(UTILS_SRC)/yarandom.h metaballs.o: ../config.h metaballs.o: $(srcdir)/fps.h metaballs.o: $(srcdir)/screenhackI.h metaballs.o: $(srcdir)/screenhack.h metaballs.o: $(UTILS_SRC)/colors.h metaballs.o: $(UTILS_SRC)/grabscreen.h metaballs.o: $(UTILS_SRC)/hsv.h metaballs.o: $(UTILS_SRC)/resources.h metaballs.o: $(UTILS_SRC)/usleep.h metaballs.o: $(UTILS_SRC)/visual.h metaballs.o: $(UTILS_SRC)/yarandom.h moire2.o: ../config.h moire2.o: $(srcdir)/fps.h moire2.o: $(srcdir)/screenhackI.h moire2.o: $(srcdir)/screenhack.h moire2.o: $(UTILS_SRC)/colors.h moire2.o: $(UTILS_SRC)/grabscreen.h moire2.o: $(UTILS_SRC)/hsv.h moire2.o: $(UTILS_SRC)/resources.h moire2.o: $(UTILS_SRC)/usleep.h moire2.o: $(UTILS_SRC)/visual.h moire2.o: $(UTILS_SRC)/xdbe.h moire2.o: $(UTILS_SRC)/yarandom.h moire.o: ../config.h moire.o: $(srcdir)/fps.h moire.o: $(srcdir)/screenhackI.h moire.o: $(srcdir)/screenhack.h moire.o: $(UTILS_SRC)/colors.h moire.o: $(UTILS_SRC)/grabscreen.h moire.o: $(UTILS_SRC)/hsv.h moire.o: $(UTILS_SRC)/resources.h moire.o: $(UTILS_SRC)/usleep.h moire.o: $(UTILS_SRC)/visual.h moire.o: $(UTILS_SRC)/yarandom.h mountain.o: ../config.h mountain.o: $(srcdir)/fps.h mountain.o: $(srcdir)/screenhackI.h mountain.o: $(UTILS_SRC)/colors.h mountain.o: $(UTILS_SRC)/grabscreen.h mountain.o: $(UTILS_SRC)/hsv.h mountain.o: $(UTILS_SRC)/resources.h mountain.o: $(UTILS_SRC)/usleep.h mountain.o: $(UTILS_SRC)/visual.h mountain.o: $(UTILS_SRC)/xshm.h mountain.o: $(UTILS_SRC)/yarandom.h mountain.o: $(srcdir)/xlockmoreI.h mountain.o: $(srcdir)/xlockmore.h munch.o: ../config.h munch.o: $(srcdir)/fps.h munch.o: $(srcdir)/screenhackI.h munch.o: $(srcdir)/screenhack.h munch.o: $(UTILS_SRC)/colors.h munch.o: $(UTILS_SRC)/grabscreen.h munch.o: $(UTILS_SRC)/hsv.h munch.o: $(UTILS_SRC)/resources.h munch.o: $(UTILS_SRC)/usleep.h munch.o: $(UTILS_SRC)/visual.h munch.o: $(UTILS_SRC)/yarandom.h nerverot.o: ../config.h nerverot.o: $(srcdir)/fps.h nerverot.o: $(srcdir)/screenhackI.h nerverot.o: $(srcdir)/screenhack.h nerverot.o: $(UTILS_SRC)/colors.h nerverot.o: $(UTILS_SRC)/grabscreen.h nerverot.o: $(UTILS_SRC)/hsv.h nerverot.o: $(UTILS_SRC)/resources.h nerverot.o: $(UTILS_SRC)/usleep.h nerverot.o: $(UTILS_SRC)/visual.h nerverot.o: $(UTILS_SRC)/yarandom.h noseguy.o: ../config.h noseguy.o: $(srcdir)/fps.h noseguy.o: $(srcdir)/images/noseguy/nose-f1.xpm noseguy.o: $(srcdir)/images/noseguy/nose-f2.xpm noseguy.o: $(srcdir)/images/noseguy/nose-f3.xpm noseguy.o: $(srcdir)/images/noseguy/nose-f4.xpm noseguy.o: $(srcdir)/images/noseguy/nose-l1.xpm noseguy.o: $(srcdir)/images/noseguy/nose-l2.xpm noseguy.o: $(srcdir)/images/noseguy/nose-r1.xpm noseguy.o: $(srcdir)/images/noseguy/nose-r2.xpm noseguy.o: $(srcdir)/screenhackI.h noseguy.o: $(srcdir)/screenhack.h noseguy.o: $(UTILS_SRC)/colors.h noseguy.o: $(UTILS_SRC)/grabscreen.h noseguy.o: $(UTILS_SRC)/hsv.h noseguy.o: $(UTILS_SRC)/resources.h noseguy.o: $(UTILS_SRC)/textclient.h noseguy.o: $(UTILS_SRC)/usleep.h noseguy.o: $(UTILS_SRC)/visual.h noseguy.o: $(UTILS_SRC)/xft.h noseguy.o: $(UTILS_SRC)/yarandom.h noseguy.o: $(srcdir)/xpm-pixmap.h pacman_ai.o: ../config.h pacman_ai.o: $(srcdir)/fps.h pacman_ai.o: $(srcdir)/pacman_ai.h pacman_ai.o: $(srcdir)/pacman.h pacman_ai.o: $(srcdir)/pacman_level.h pacman_ai.o: $(srcdir)/screenhackI.h pacman_ai.o: $(UTILS_SRC)/colors.h pacman_ai.o: $(UTILS_SRC)/grabscreen.h pacman_ai.o: $(UTILS_SRC)/hsv.h pacman_ai.o: $(UTILS_SRC)/resources.h pacman_ai.o: $(UTILS_SRC)/usleep.h pacman_ai.o: $(UTILS_SRC)/visual.h pacman_ai.o: $(UTILS_SRC)/xshm.h pacman_ai.o: $(UTILS_SRC)/yarandom.h pacman_ai.o: $(srcdir)/xlockmoreI.h pacman_ai.o: $(srcdir)/xpm-pixmap.h pacman_level.o: ../config.h pacman_level.o: $(srcdir)/fps.h pacman_level.o: $(srcdir)/pacman.h pacman_level.o: $(srcdir)/pacman_level.h pacman_level.o: $(srcdir)/screenhackI.h pacman_level.o: $(UTILS_SRC)/colors.h pacman_level.o: $(UTILS_SRC)/grabscreen.h pacman_level.o: $(UTILS_SRC)/hsv.h pacman_level.o: $(UTILS_SRC)/resources.h pacman_level.o: $(UTILS_SRC)/usleep.h pacman_level.o: $(UTILS_SRC)/visual.h pacman_level.o: $(UTILS_SRC)/xshm.h pacman_level.o: $(UTILS_SRC)/yarandom.h pacman_level.o: $(srcdir)/xlockmoreI.h pacman_level.o: $(srcdir)/xpm-pixmap.h pacman.o: ../config.h pacman.o: $(srcdir)/fps.h pacman.o: $(srcdir)/images/pacman/eyes-d.xpm pacman.o: $(srcdir)/images/pacman/eyes-l.xpm pacman.o: $(srcdir)/images/pacman/eyes-r.xpm pacman.o: $(srcdir)/images/pacman/eyes-u.xpm pacman.o: $(srcdir)/images/pacman/ghost-d1.xpm pacman.o: $(srcdir)/images/pacman/ghost-d2.xpm pacman.o: $(srcdir)/images/pacman/ghost-l1.xpm pacman.o: $(srcdir)/images/pacman/ghost-l2.xpm pacman.o: $(srcdir)/images/pacman/ghost-mask.xpm pacman.o: $(srcdir)/images/pacman/ghost-r1.xpm pacman.o: $(srcdir)/images/pacman/ghost-r2.xpm pacman.o: $(srcdir)/images/pacman/ghost-s1.xpm pacman.o: $(srcdir)/images/pacman/ghost-s2.xpm pacman.o: $(srcdir)/images/pacman/ghost-sf1.xpm pacman.o: $(srcdir)/images/pacman/ghost-sf2.xpm pacman.o: $(srcdir)/images/pacman/ghost-u1.xpm pacman.o: $(srcdir)/images/pacman/ghost-u2.xpm pacman.o: $(srcdir)/images/pacman/pacman-0.xpm pacman.o: $(srcdir)/images/pacman/pacman-d1.xpm pacman.o: $(srcdir)/images/pacman/pacman-d2.xpm pacman.o: $(srcdir)/images/pacman/pacman-ds1.xpm pacman.o: $(srcdir)/images/pacman/pacman-ds2.xpm pacman.o: $(srcdir)/images/pacman/pacman-ds3.xpm pacman.o: $(srcdir)/images/pacman/pacman-ds4.xpm pacman.o: $(srcdir)/images/pacman/pacman-ds5.xpm pacman.o: $(srcdir)/images/pacman/pacman-ds6.xpm pacman.o: $(srcdir)/images/pacman/pacman-ds7.xpm pacman.o: $(srcdir)/images/pacman/pacman-ds8.xpm pacman.o: $(srcdir)/images/pacman/pacman-l1.xpm pacman.o: $(srcdir)/images/pacman/pacman-l2.xpm pacman.o: $(srcdir)/images/pacman/pacman-r1.xpm pacman.o: $(srcdir)/images/pacman/pacman-r2.xpm pacman.o: $(srcdir)/images/pacman/pacman-u1.xpm pacman.o: $(srcdir)/images/pacman/pacman-u2.xpm pacman.o: $(srcdir)/pacman_ai.h pacman.o: $(srcdir)/pacman.h pacman.o: $(srcdir)/pacman_level.h pacman.o: $(srcdir)/screenhackI.h pacman.o: $(UTILS_SRC)/colors.h pacman.o: $(UTILS_SRC)/grabscreen.h pacman.o: $(UTILS_SRC)/hsv.h pacman.o: $(UTILS_SRC)/resources.h pacman.o: $(UTILS_SRC)/usleep.h pacman.o: $(UTILS_SRC)/visual.h pacman.o: $(UTILS_SRC)/xshm.h pacman.o: $(UTILS_SRC)/yarandom.h pacman.o: $(srcdir)/xlockmoreI.h pacman.o: $(srcdir)/xlockmore.h pacman.o: $(srcdir)/xpm-pixmap.h pedal.o: ../config.h pedal.o: $(srcdir)/fps.h pedal.o: $(srcdir)/screenhackI.h pedal.o: $(srcdir)/screenhack.h pedal.o: $(UTILS_SRC)/colors.h pedal.o: $(UTILS_SRC)/erase.h pedal.o: $(UTILS_SRC)/grabscreen.h pedal.o: $(UTILS_SRC)/hsv.h pedal.o: $(UTILS_SRC)/resources.h pedal.o: $(UTILS_SRC)/usleep.h pedal.o: $(UTILS_SRC)/visual.h pedal.o: $(UTILS_SRC)/yarandom.h penetrate.o: ../config.h penetrate.o: $(srcdir)/fps.h penetrate.o: $(srcdir)/screenhackI.h penetrate.o: $(srcdir)/screenhack.h penetrate.o: $(UTILS_SRC)/colors.h penetrate.o: $(UTILS_SRC)/grabscreen.h penetrate.o: $(UTILS_SRC)/hsv.h penetrate.o: $(UTILS_SRC)/resources.h penetrate.o: $(UTILS_SRC)/usleep.h penetrate.o: $(UTILS_SRC)/visual.h penetrate.o: $(UTILS_SRC)/yarandom.h penrose.o: ../config.h penrose.o: $(srcdir)/fps.h penrose.o: $(srcdir)/screenhackI.h penrose.o: $(UTILS_SRC)/colors.h penrose.o: $(UTILS_SRC)/grabscreen.h penrose.o: $(UTILS_SRC)/hsv.h penrose.o: $(UTILS_SRC)/resources.h penrose.o: $(UTILS_SRC)/usleep.h penrose.o: $(UTILS_SRC)/visual.h penrose.o: $(UTILS_SRC)/xshm.h penrose.o: $(UTILS_SRC)/yarandom.h penrose.o: $(srcdir)/xlockmoreI.h penrose.o: $(srcdir)/xlockmore.h petri.o: ../config.h petri.o: $(srcdir)/fps.h petri.o: $(srcdir)/screenhackI.h petri.o: $(srcdir)/screenhack.h petri.o: $(UTILS_SRC)/colors.h petri.o: $(UTILS_SRC)/grabscreen.h petri.o: $(UTILS_SRC)/hsv.h petri.o: $(UTILS_SRC)/resources.h petri.o: $(UTILS_SRC)/spline.h petri.o: $(UTILS_SRC)/usleep.h petri.o: $(UTILS_SRC)/visual.h petri.o: $(UTILS_SRC)/yarandom.h phosphor.o: ../config.h phosphor.o: $(srcdir)/fps.h phosphor.o: $(srcdir)/images/6x10font.xbm phosphor.o: $(srcdir)/screenhackI.h phosphor.o: $(srcdir)/screenhack.h phosphor.o: $(UTILS_SRC)/colors.h phosphor.o: $(UTILS_SRC)/grabscreen.h phosphor.o: $(UTILS_SRC)/hsv.h phosphor.o: $(UTILS_SRC)/resources.h phosphor.o: $(UTILS_SRC)/textclient.h phosphor.o: $(UTILS_SRC)/usleep.h phosphor.o: $(UTILS_SRC)/utf8wc.h phosphor.o: $(UTILS_SRC)/visual.h phosphor.o: $(UTILS_SRC)/yarandom.h piecewise.o: ../config.h piecewise.o: $(srcdir)/fps.h piecewise.o: $(srcdir)/screenhackI.h piecewise.o: $(srcdir)/screenhack.h piecewise.o: $(UTILS_SRC)/colors.h piecewise.o: $(UTILS_SRC)/grabscreen.h piecewise.o: $(UTILS_SRC)/hsv.h piecewise.o: $(UTILS_SRC)/resources.h piecewise.o: $(UTILS_SRC)/usleep.h piecewise.o: $(UTILS_SRC)/visual.h piecewise.o: $(UTILS_SRC)/xdbe.h piecewise.o: $(UTILS_SRC)/yarandom.h polyominoes.o: ../config.h polyominoes.o: $(srcdir)/fps.h polyominoes.o: $(srcdir)/screenhackI.h polyominoes.o: $(UTILS_SRC)/colors.h polyominoes.o: $(UTILS_SRC)/erase.h polyominoes.o: $(UTILS_SRC)/grabscreen.h polyominoes.o: $(UTILS_SRC)/hsv.h polyominoes.o: $(UTILS_SRC)/resources.h polyominoes.o: $(UTILS_SRC)/usleep.h polyominoes.o: $(UTILS_SRC)/visual.h polyominoes.o: $(UTILS_SRC)/xshm.h polyominoes.o: $(UTILS_SRC)/yarandom.h polyominoes.o: $(srcdir)/xlockmoreI.h polyominoes.o: $(srcdir)/xlockmore.h pong.o: $(srcdir)/analogtv.h pong.o: ../config.h pong.o: $(srcdir)/fps.h pong.o: $(srcdir)/screenhackI.h pong.o: $(srcdir)/screenhack.h pong.o: $(UTILS_SRC)/aligned_malloc.h pong.o: $(UTILS_SRC)/colors.h pong.o: $(UTILS_SRC)/grabscreen.h pong.o: $(UTILS_SRC)/hsv.h pong.o: $(UTILS_SRC)/resources.h pong.o: $(UTILS_SRC)/thread_util.h pong.o: $(UTILS_SRC)/usleep.h pong.o: $(UTILS_SRC)/visual.h pong.o: $(UTILS_SRC)/xshm.h pong.o: $(UTILS_SRC)/yarandom.h popsquares.o: ../config.h popsquares.o: $(srcdir)/fps.h popsquares.o: $(srcdir)/screenhackI.h popsquares.o: $(srcdir)/screenhack.h popsquares.o: $(UTILS_SRC)/colors.h popsquares.o: $(UTILS_SRC)/grabscreen.h popsquares.o: $(UTILS_SRC)/hsv.h popsquares.o: $(UTILS_SRC)/resources.h popsquares.o: $(UTILS_SRC)/usleep.h popsquares.o: $(UTILS_SRC)/visual.h popsquares.o: $(UTILS_SRC)/xdbe.h popsquares.o: $(UTILS_SRC)/yarandom.h pyro.o: ../config.h pyro.o: $(srcdir)/fps.h pyro.o: $(srcdir)/screenhackI.h pyro.o: $(srcdir)/screenhack.h pyro.o: $(UTILS_SRC)/colors.h pyro.o: $(UTILS_SRC)/grabscreen.h pyro.o: $(UTILS_SRC)/hsv.h pyro.o: $(UTILS_SRC)/resources.h pyro.o: $(UTILS_SRC)/usleep.h pyro.o: $(UTILS_SRC)/visual.h pyro.o: $(UTILS_SRC)/yarandom.h qix.o: ../config.h qix.o: $(srcdir)/fps.h qix.o: $(srcdir)/screenhackI.h qix.o: $(srcdir)/screenhack.h qix.o: $(UTILS_SRC)/alpha.h qix.o: $(UTILS_SRC)/colors.h qix.o: $(UTILS_SRC)/grabscreen.h qix.o: $(UTILS_SRC)/hsv.h qix.o: $(UTILS_SRC)/resources.h qix.o: $(UTILS_SRC)/usleep.h qix.o: $(UTILS_SRC)/visual.h qix.o: $(UTILS_SRC)/yarandom.h rd-bomb.o: ../config.h rd-bomb.o: $(srcdir)/fps.h rd-bomb.o: $(srcdir)/screenhackI.h rd-bomb.o: $(srcdir)/screenhack.h rd-bomb.o: $(UTILS_SRC)/colors.h rd-bomb.o: $(UTILS_SRC)/grabscreen.h rd-bomb.o: $(UTILS_SRC)/hsv.h rd-bomb.o: $(UTILS_SRC)/resources.h rd-bomb.o: $(UTILS_SRC)/usleep.h rd-bomb.o: $(UTILS_SRC)/visual.h rd-bomb.o: $(UTILS_SRC)/yarandom.h recanim.o: ../config.h recanim.o: $(srcdir)/fps.h recanim.o: $(srcdir)/recanim.h recanim.o: $(srcdir)/screenhackI.h recanim.o: $(UTILS_SRC)/colors.h recanim.o: $(UTILS_SRC)/grabscreen.h recanim.o: $(UTILS_SRC)/hsv.h recanim.o: $(UTILS_SRC)/resources.h recanim.o: $(UTILS_SRC)/usleep.h recanim.o: $(UTILS_SRC)/visual.h recanim.o: $(UTILS_SRC)/yarandom.h ripples.o: ../config.h ripples.o: $(srcdir)/fps.h ripples.o: $(srcdir)/screenhackI.h ripples.o: $(srcdir)/screenhack.h ripples.o: $(UTILS_SRC)/colors.h ripples.o: $(UTILS_SRC)/grabscreen.h ripples.o: $(UTILS_SRC)/hsv.h ripples.o: $(UTILS_SRC)/resources.h ripples.o: $(UTILS_SRC)/usleep.h ripples.o: $(UTILS_SRC)/visual.h ripples.o: $(UTILS_SRC)/yarandom.h rocks.o: ../config.h rocks.o: $(srcdir)/fps.h rocks.o: $(srcdir)/screenhackI.h rocks.o: $(srcdir)/screenhack.h rocks.o: $(UTILS_SRC)/colors.h rocks.o: $(UTILS_SRC)/grabscreen.h rocks.o: $(UTILS_SRC)/hsv.h rocks.o: $(UTILS_SRC)/resources.h rocks.o: $(UTILS_SRC)/usleep.h rocks.o: $(UTILS_SRC)/visual.h rocks.o: $(UTILS_SRC)/yarandom.h rorschach.o: ../config.h rorschach.o: $(srcdir)/fps.h rorschach.o: $(srcdir)/screenhackI.h rorschach.o: $(srcdir)/screenhack.h rorschach.o: $(UTILS_SRC)/colors.h rorschach.o: $(UTILS_SRC)/erase.h rorschach.o: $(UTILS_SRC)/grabscreen.h rorschach.o: $(UTILS_SRC)/hsv.h rorschach.o: $(UTILS_SRC)/resources.h rorschach.o: $(UTILS_SRC)/usleep.h rorschach.o: $(UTILS_SRC)/visual.h rorschach.o: $(UTILS_SRC)/yarandom.h rotor.o: ../config.h rotor.o: $(srcdir)/fps.h rotor.o: $(srcdir)/screenhackI.h rotor.o: $(UTILS_SRC)/colors.h rotor.o: $(UTILS_SRC)/grabscreen.h rotor.o: $(UTILS_SRC)/hsv.h rotor.o: $(UTILS_SRC)/resources.h rotor.o: $(UTILS_SRC)/usleep.h rotor.o: $(UTILS_SRC)/visual.h rotor.o: $(UTILS_SRC)/xshm.h rotor.o: $(UTILS_SRC)/yarandom.h rotor.o: $(srcdir)/xlockmoreI.h rotor.o: $(srcdir)/xlockmore.h rotzoomer.o: ../config.h rotzoomer.o: $(srcdir)/fps.h rotzoomer.o: $(srcdir)/screenhackI.h rotzoomer.o: $(srcdir)/screenhack.h rotzoomer.o: $(UTILS_SRC)/colors.h rotzoomer.o: $(UTILS_SRC)/grabscreen.h rotzoomer.o: $(UTILS_SRC)/hsv.h rotzoomer.o: $(UTILS_SRC)/resources.h rotzoomer.o: $(UTILS_SRC)/usleep.h rotzoomer.o: $(UTILS_SRC)/visual.h rotzoomer.o: $(UTILS_SRC)/yarandom.h screenhack.o: ../config.h screenhack.o: $(srcdir)/fps.h screenhack.o: $(srcdir)/recanim.h screenhack.o: $(srcdir)/screenhackI.h screenhack.o: $(UTILS_SRC)/colors.h screenhack.o: $(UTILS_SRC)/grabscreen.h screenhack.o: $(UTILS_SRC)/hsv.h screenhack.o: $(UTILS_SRC)/resources.h screenhack.o: $(UTILS_SRC)/usleep.h screenhack.o: $(UTILS_SRC)/version.h screenhack.o: $(UTILS_SRC)/visual.h screenhack.o: $(UTILS_SRC)/vroot.h screenhack.o: $(UTILS_SRC)/xmu.h screenhack.o: $(UTILS_SRC)/yarandom.h shadebobs.o: ../config.h shadebobs.o: $(srcdir)/fps.h shadebobs.o: $(srcdir)/screenhackI.h shadebobs.o: $(srcdir)/screenhack.h shadebobs.o: $(UTILS_SRC)/colors.h shadebobs.o: $(UTILS_SRC)/grabscreen.h shadebobs.o: $(UTILS_SRC)/hsv.h shadebobs.o: $(UTILS_SRC)/resources.h shadebobs.o: $(UTILS_SRC)/usleep.h shadebobs.o: $(UTILS_SRC)/visual.h shadebobs.o: $(UTILS_SRC)/yarandom.h sierpinski.o: ../config.h sierpinski.o: $(srcdir)/fps.h sierpinski.o: $(srcdir)/screenhackI.h sierpinski.o: $(UTILS_SRC)/colors.h sierpinski.o: $(UTILS_SRC)/grabscreen.h sierpinski.o: $(UTILS_SRC)/hsv.h sierpinski.o: $(UTILS_SRC)/resources.h sierpinski.o: $(UTILS_SRC)/usleep.h sierpinski.o: $(UTILS_SRC)/visual.h sierpinski.o: $(UTILS_SRC)/xshm.h sierpinski.o: $(UTILS_SRC)/yarandom.h sierpinski.o: $(srcdir)/xlockmoreI.h sierpinski.o: $(srcdir)/xlockmore.h slidescreen.o: ../config.h slidescreen.o: $(srcdir)/fps.h slidescreen.o: $(srcdir)/screenhackI.h slidescreen.o: $(srcdir)/screenhack.h slidescreen.o: $(UTILS_SRC)/colors.h slidescreen.o: $(UTILS_SRC)/grabscreen.h slidescreen.o: $(UTILS_SRC)/hsv.h slidescreen.o: $(UTILS_SRC)/resources.h slidescreen.o: $(UTILS_SRC)/usleep.h slidescreen.o: $(UTILS_SRC)/visual.h slidescreen.o: $(UTILS_SRC)/yarandom.h slip.o: ../config.h slip.o: $(srcdir)/fps.h slip.o: $(srcdir)/screenhackI.h slip.o: $(UTILS_SRC)/colors.h slip.o: $(UTILS_SRC)/grabscreen.h slip.o: $(UTILS_SRC)/hsv.h slip.o: $(UTILS_SRC)/resources.h slip.o: $(UTILS_SRC)/usleep.h slip.o: $(UTILS_SRC)/visual.h slip.o: $(UTILS_SRC)/xshm.h slip.o: $(UTILS_SRC)/yarandom.h slip.o: $(srcdir)/xlockmoreI.h slip.o: $(srcdir)/xlockmore.h speedmine.o: ../config.h speedmine.o: $(srcdir)/fps.h speedmine.o: $(srcdir)/screenhackI.h speedmine.o: $(srcdir)/screenhack.h speedmine.o: $(UTILS_SRC)/colors.h speedmine.o: $(UTILS_SRC)/erase.h speedmine.o: $(UTILS_SRC)/grabscreen.h speedmine.o: $(UTILS_SRC)/hsv.h speedmine.o: $(UTILS_SRC)/resources.h speedmine.o: $(UTILS_SRC)/usleep.h speedmine.o: $(UTILS_SRC)/visual.h speedmine.o: $(UTILS_SRC)/yarandom.h sphere.o: ../config.h sphere.o: $(srcdir)/fps.h sphere.o: $(srcdir)/screenhackI.h sphere.o: $(UTILS_SRC)/colors.h sphere.o: $(UTILS_SRC)/grabscreen.h sphere.o: $(UTILS_SRC)/hsv.h sphere.o: $(UTILS_SRC)/resources.h sphere.o: $(UTILS_SRC)/usleep.h sphere.o: $(UTILS_SRC)/visual.h sphere.o: $(UTILS_SRC)/xshm.h sphere.o: $(UTILS_SRC)/yarandom.h sphere.o: $(srcdir)/xlockmoreI.h sphere.o: $(srcdir)/xlockmore.h spiral.o: ../config.h spiral.o: $(srcdir)/fps.h spiral.o: $(srcdir)/screenhackI.h spiral.o: $(UTILS_SRC)/colors.h spiral.o: $(UTILS_SRC)/grabscreen.h spiral.o: $(UTILS_SRC)/hsv.h spiral.o: $(UTILS_SRC)/resources.h spiral.o: $(UTILS_SRC)/usleep.h spiral.o: $(UTILS_SRC)/visual.h spiral.o: $(UTILS_SRC)/xshm.h spiral.o: $(UTILS_SRC)/yarandom.h spiral.o: $(srcdir)/xlockmoreI.h spiral.o: $(srcdir)/xlockmore.h spotlight.o: ../config.h spotlight.o: $(srcdir)/fps.h spotlight.o: $(srcdir)/screenhackI.h spotlight.o: $(srcdir)/screenhack.h spotlight.o: $(UTILS_SRC)/colors.h spotlight.o: $(UTILS_SRC)/grabscreen.h spotlight.o: $(UTILS_SRC)/hsv.h spotlight.o: $(UTILS_SRC)/resources.h spotlight.o: $(UTILS_SRC)/usleep.h spotlight.o: $(UTILS_SRC)/visual.h spotlight.o: $(UTILS_SRC)/yarandom.h squiral.o: ../config.h squiral.o: $(srcdir)/fps.h squiral.o: $(srcdir)/screenhackI.h squiral.o: $(srcdir)/screenhack.h squiral.o: $(UTILS_SRC)/colors.h squiral.o: $(UTILS_SRC)/erase.h squiral.o: $(UTILS_SRC)/grabscreen.h squiral.o: $(UTILS_SRC)/hsv.h squiral.o: $(UTILS_SRC)/resources.h squiral.o: $(UTILS_SRC)/usleep.h squiral.o: $(UTILS_SRC)/visual.h squiral.o: $(UTILS_SRC)/yarandom.h starfish.o: ../config.h starfish.o: $(srcdir)/fps.h starfish.o: $(srcdir)/screenhackI.h starfish.o: $(srcdir)/screenhack.h starfish.o: $(UTILS_SRC)/colors.h starfish.o: $(UTILS_SRC)/grabscreen.h starfish.o: $(UTILS_SRC)/hsv.h starfish.o: $(UTILS_SRC)/resources.h starfish.o: $(UTILS_SRC)/spline.h starfish.o: $(UTILS_SRC)/usleep.h starfish.o: $(UTILS_SRC)/visual.h starfish.o: $(UTILS_SRC)/yarandom.h strange.o: ../config.h strange.o: $(srcdir)/fps.h strange.o: $(srcdir)/screenhackI.h strange.o: $(UTILS_SRC)/colors.h strange.o: $(UTILS_SRC)/grabscreen.h strange.o: $(UTILS_SRC)/hsv.h strange.o: $(UTILS_SRC)/resources.h strange.o: $(UTILS_SRC)/usleep.h strange.o: $(UTILS_SRC)/visual.h strange.o: $(UTILS_SRC)/xshm.h strange.o: $(UTILS_SRC)/yarandom.h strange.o: $(srcdir)/xlockmoreI.h strange.o: $(srcdir)/xlockmore.h substrate.o: ../config.h substrate.o: $(srcdir)/fps.h substrate.o: $(srcdir)/screenhackI.h substrate.o: $(srcdir)/screenhack.h substrate.o: $(UTILS_SRC)/colors.h substrate.o: $(UTILS_SRC)/grabscreen.h substrate.o: $(UTILS_SRC)/hsv.h substrate.o: $(UTILS_SRC)/resources.h substrate.o: $(UTILS_SRC)/usleep.h substrate.o: $(UTILS_SRC)/visual.h substrate.o: $(UTILS_SRC)/yarandom.h swirl.o: ../config.h swirl.o: $(srcdir)/fps.h swirl.o: $(srcdir)/screenhackI.h swirl.o: $(UTILS_SRC)/colors.h swirl.o: $(UTILS_SRC)/grabscreen.h swirl.o: $(UTILS_SRC)/hsv.h swirl.o: $(UTILS_SRC)/resources.h swirl.o: $(UTILS_SRC)/usleep.h swirl.o: $(UTILS_SRC)/visual.h swirl.o: $(UTILS_SRC)/xshm.h swirl.o: $(UTILS_SRC)/yarandom.h swirl.o: $(srcdir)/xlockmoreI.h swirl.o: $(srcdir)/xlockmore.h t3d.o: ../config.h t3d.o: $(srcdir)/fps.h t3d.o: $(srcdir)/screenhackI.h t3d.o: $(srcdir)/screenhack.h t3d.o: $(UTILS_SRC)/colors.h t3d.o: $(UTILS_SRC)/grabscreen.h t3d.o: $(UTILS_SRC)/hsv.h t3d.o: $(UTILS_SRC)/resources.h t3d.o: $(UTILS_SRC)/usleep.h t3d.o: $(UTILS_SRC)/visual.h t3d.o: $(UTILS_SRC)/yarandom.h tessellimage.o: ../config.h tessellimage.o: $(srcdir)/delaunay.h tessellimage.o: $(srcdir)/fps.h tessellimage.o: $(srcdir)/screenhackI.h tessellimage.o: $(srcdir)/screenhack.h tessellimage.o: $(UTILS_SRC)/colors.h tessellimage.o: $(UTILS_SRC)/grabscreen.h tessellimage.o: $(UTILS_SRC)/hsv.h tessellimage.o: $(UTILS_SRC)/resources.h tessellimage.o: $(UTILS_SRC)/usleep.h tessellimage.o: $(UTILS_SRC)/visual.h tessellimage.o: $(UTILS_SRC)/yarandom.h testx11.o: ../config.h testx11.o: $(srcdir)/fps.h testx11.o: $(srcdir)/glx/rotator.h testx11.o: $(srcdir)/screenhackI.h testx11.o: $(srcdir)/screenhack.h testx11.o: $(UTILS_SRC)/colors.h testx11.o: $(UTILS_SRC)/grabscreen.h testx11.o: $(UTILS_SRC)/hsv.h testx11.o: $(UTILS_SRC)/resources.h testx11.o: $(UTILS_SRC)/usleep.h testx11.o: $(UTILS_SRC)/visual.h testx11.o: $(UTILS_SRC)/yarandom.h thornbird.o: ../config.h thornbird.o: $(srcdir)/fps.h thornbird.o: $(srcdir)/screenhackI.h thornbird.o: $(UTILS_SRC)/colors.h thornbird.o: $(UTILS_SRC)/grabscreen.h thornbird.o: $(UTILS_SRC)/hsv.h thornbird.o: $(UTILS_SRC)/resources.h thornbird.o: $(UTILS_SRC)/usleep.h thornbird.o: $(UTILS_SRC)/visual.h thornbird.o: $(UTILS_SRC)/xshm.h thornbird.o: $(UTILS_SRC)/yarandom.h thornbird.o: $(srcdir)/xlockmoreI.h thornbird.o: $(srcdir)/xlockmore.h triangle.o: ../config.h triangle.o: $(srcdir)/fps.h triangle.o: $(srcdir)/screenhackI.h triangle.o: $(UTILS_SRC)/colors.h triangle.o: $(UTILS_SRC)/grabscreen.h triangle.o: $(UTILS_SRC)/hsv.h triangle.o: $(UTILS_SRC)/resources.h triangle.o: $(UTILS_SRC)/usleep.h triangle.o: $(UTILS_SRC)/visual.h triangle.o: $(UTILS_SRC)/xshm.h triangle.o: $(UTILS_SRC)/yarandom.h triangle.o: $(srcdir)/xlockmoreI.h triangle.o: $(srcdir)/xlockmore.h truchet.o: ../config.h truchet.o: $(srcdir)/fps.h truchet.o: $(srcdir)/screenhackI.h truchet.o: $(srcdir)/screenhack.h truchet.o: $(UTILS_SRC)/colors.h truchet.o: $(UTILS_SRC)/grabscreen.h truchet.o: $(UTILS_SRC)/hsv.h truchet.o: $(UTILS_SRC)/resources.h truchet.o: $(UTILS_SRC)/usleep.h truchet.o: $(UTILS_SRC)/visual.h truchet.o: $(UTILS_SRC)/yarandom.h twang.o: ../config.h twang.o: $(srcdir)/fps.h twang.o: $(srcdir)/screenhackI.h twang.o: $(srcdir)/screenhack.h twang.o: $(UTILS_SRC)/colors.h twang.o: $(UTILS_SRC)/grabscreen.h twang.o: $(UTILS_SRC)/hsv.h twang.o: $(UTILS_SRC)/resources.h twang.o: $(UTILS_SRC)/usleep.h twang.o: $(UTILS_SRC)/visual.h twang.o: $(UTILS_SRC)/yarandom.h vermiculate.o: ../config.h vermiculate.o: $(srcdir)/fps.h vermiculate.o: $(srcdir)/screenhackI.h vermiculate.o: $(srcdir)/screenhack.h vermiculate.o: $(UTILS_SRC)/colors.h vermiculate.o: $(UTILS_SRC)/grabscreen.h vermiculate.o: $(UTILS_SRC)/hsv.h vermiculate.o: $(UTILS_SRC)/resources.h vermiculate.o: $(UTILS_SRC)/usleep.h vermiculate.o: $(UTILS_SRC)/visual.h vermiculate.o: $(UTILS_SRC)/yarandom.h vines.o: ../config.h vines.o: $(srcdir)/fps.h vines.o: $(srcdir)/screenhackI.h vines.o: $(UTILS_SRC)/colors.h vines.o: $(UTILS_SRC)/erase.h vines.o: $(UTILS_SRC)/grabscreen.h vines.o: $(UTILS_SRC)/hsv.h vines.o: $(UTILS_SRC)/resources.h vines.o: $(UTILS_SRC)/usleep.h vines.o: $(UTILS_SRC)/visual.h vines.o: $(UTILS_SRC)/xshm.h vines.o: $(UTILS_SRC)/yarandom.h vines.o: $(srcdir)/xlockmoreI.h vines.o: $(srcdir)/xlockmore.h wander.o: ../config.h wander.o: $(srcdir)/fps.h wander.o: $(srcdir)/screenhackI.h wander.o: $(srcdir)/screenhack.h wander.o: $(UTILS_SRC)/colors.h wander.o: $(UTILS_SRC)/erase.h wander.o: $(UTILS_SRC)/grabscreen.h wander.o: $(UTILS_SRC)/hsv.h wander.o: $(UTILS_SRC)/resources.h wander.o: $(UTILS_SRC)/usleep.h wander.o: $(UTILS_SRC)/visual.h wander.o: $(UTILS_SRC)/yarandom.h webcollage-cocoa.o: ../config.h webcollage-cocoa.o: $(srcdir)/fps.h webcollage-cocoa.o: $(srcdir)/screenhackI.h webcollage-cocoa.o: $(srcdir)/screenhack.h webcollage-cocoa.o: $(UTILS_SRC)/colors.h webcollage-cocoa.o: $(UTILS_SRC)/grabscreen.h webcollage-cocoa.o: $(UTILS_SRC)/hsv.h webcollage-cocoa.o: $(UTILS_SRC)/resources.h webcollage-cocoa.o: $(UTILS_SRC)/usleep.h webcollage-cocoa.o: $(UTILS_SRC)/visual.h webcollage-cocoa.o: $(UTILS_SRC)/yarandom.h webcollage-helper.o: ../config.h whirlwindwarp.o: ../config.h whirlwindwarp.o: $(srcdir)/fps.h whirlwindwarp.o: $(srcdir)/screenhackI.h whirlwindwarp.o: $(srcdir)/screenhack.h whirlwindwarp.o: $(UTILS_SRC)/colors.h whirlwindwarp.o: $(UTILS_SRC)/erase.h whirlwindwarp.o: $(UTILS_SRC)/grabscreen.h whirlwindwarp.o: $(UTILS_SRC)/hsv.h whirlwindwarp.o: $(UTILS_SRC)/resources.h whirlwindwarp.o: $(UTILS_SRC)/usleep.h whirlwindwarp.o: $(UTILS_SRC)/visual.h whirlwindwarp.o: $(UTILS_SRC)/yarandom.h whirlygig.o: ../config.h whirlygig.o: $(srcdir)/fps.h whirlygig.o: $(srcdir)/screenhackI.h whirlygig.o: $(srcdir)/screenhack.h whirlygig.o: $(UTILS_SRC)/colors.h whirlygig.o: $(UTILS_SRC)/grabscreen.h whirlygig.o: $(UTILS_SRC)/hsv.h whirlygig.o: $(UTILS_SRC)/resources.h whirlygig.o: $(UTILS_SRC)/usleep.h whirlygig.o: $(UTILS_SRC)/visual.h whirlygig.o: $(UTILS_SRC)/xdbe.h whirlygig.o: $(UTILS_SRC)/yarandom.h wormhole.o: ../config.h wormhole.o: $(srcdir)/fps.h wormhole.o: $(srcdir)/screenhackI.h wormhole.o: $(srcdir)/screenhack.h wormhole.o: $(UTILS_SRC)/colors.h wormhole.o: $(UTILS_SRC)/grabscreen.h wormhole.o: $(UTILS_SRC)/hsv.h wormhole.o: $(UTILS_SRC)/resources.h wormhole.o: $(UTILS_SRC)/usleep.h wormhole.o: $(UTILS_SRC)/visual.h wormhole.o: $(UTILS_SRC)/yarandom.h worm.o: ../config.h worm.o: $(srcdir)/fps.h worm.o: $(srcdir)/screenhackI.h worm.o: $(UTILS_SRC)/colors.h worm.o: $(UTILS_SRC)/grabscreen.h worm.o: $(UTILS_SRC)/hsv.h worm.o: $(UTILS_SRC)/resources.h worm.o: $(UTILS_SRC)/usleep.h worm.o: $(UTILS_SRC)/visual.h worm.o: $(UTILS_SRC)/xshm.h worm.o: $(UTILS_SRC)/yarandom.h worm.o: $(srcdir)/xlockmoreI.h worm.o: $(srcdir)/xlockmore.h xanalogtv.o: $(srcdir)/analogtv.h xanalogtv.o: ../config.h xanalogtv.o: $(srcdir)/fps.h xanalogtv.o: $(srcdir)/screenhackI.h xanalogtv.o: $(srcdir)/screenhack.h xanalogtv.o: $(UTILS_SRC)/aligned_malloc.h xanalogtv.o: $(UTILS_SRC)/colors.h xanalogtv.o: $(UTILS_SRC)/grabscreen.h xanalogtv.o: $(UTILS_SRC)/hsv.h xanalogtv.o: $(UTILS_SRC)/images/logo-50.xpm xanalogtv.o: $(UTILS_SRC)/resources.h xanalogtv.o: $(UTILS_SRC)/thread_util.h xanalogtv.o: $(UTILS_SRC)/usleep.h xanalogtv.o: $(UTILS_SRC)/visual.h xanalogtv.o: $(UTILS_SRC)/xshm.h xanalogtv.o: $(UTILS_SRC)/yarandom.h xanalogtv.o: $(srcdir)/xpm-pixmap.h xflame.o: ../config.h xflame.o: $(srcdir)/fps.h xflame.o: $(srcdir)/images/bob.xbm xflame.o: $(srcdir)/screenhackI.h xflame.o: $(srcdir)/screenhack.h xflame.o: $(UTILS_SRC)/colors.h xflame.o: $(UTILS_SRC)/grabscreen.h xflame.o: $(UTILS_SRC)/hsv.h xflame.o: $(UTILS_SRC)/resources.h xflame.o: $(UTILS_SRC)/usleep.h xflame.o: $(UTILS_SRC)/visual.h xflame.o: $(UTILS_SRC)/yarandom.h xflame.o: $(srcdir)/xpm-pixmap.h xjack.o: ../config.h xjack.o: $(srcdir)/fps.h xjack.o: $(srcdir)/screenhackI.h xjack.o: $(srcdir)/screenhack.h xjack.o: $(UTILS_SRC)/colors.h xjack.o: $(UTILS_SRC)/grabscreen.h xjack.o: $(UTILS_SRC)/hsv.h xjack.o: $(UTILS_SRC)/resources.h xjack.o: $(UTILS_SRC)/usleep.h xjack.o: $(UTILS_SRC)/visual.h xjack.o: $(UTILS_SRC)/yarandom.h xlockmore.o: ../config.h xlockmore.o: $(srcdir)/fps.h xlockmore.o: $(srcdir)/screenhackI.h xlockmore.o: $(srcdir)/screenhack.h xlockmore.o: $(UTILS_SRC)/colors.h xlockmore.o: $(UTILS_SRC)/grabscreen.h xlockmore.o: $(UTILS_SRC)/hsv.h xlockmore.o: $(UTILS_SRC)/resources.h xlockmore.o: $(UTILS_SRC)/usleep.h xlockmore.o: $(UTILS_SRC)/visual.h xlockmore.o: $(UTILS_SRC)/xshm.h xlockmore.o: $(UTILS_SRC)/yarandom.h xlockmore.o: $(srcdir)/xlockmoreI.h xlyap.o: ../config.h xlyap.o: $(srcdir)/fps.h xlyap.o: $(srcdir)/screenhackI.h xlyap.o: $(srcdir)/screenhack.h xlyap.o: $(UTILS_SRC)/colors.h xlyap.o: $(UTILS_SRC)/grabscreen.h xlyap.o: $(UTILS_SRC)/hsv.h xlyap.o: $(UTILS_SRC)/resources.h xlyap.o: $(UTILS_SRC)/usleep.h xlyap.o: $(UTILS_SRC)/visual.h xlyap.o: $(UTILS_SRC)/yarandom.h xmatrix.o: ../config.h xmatrix.o: $(srcdir)/fps.h xmatrix.o: $(srcdir)/images/matrix1b.xbm xmatrix.o: $(srcdir)/images/matrix1b.xpm xmatrix.o: $(srcdir)/images/matrix1.xbm xmatrix.o: $(srcdir)/images/matrix1.xpm xmatrix.o: $(srcdir)/images/matrix2b.xbm xmatrix.o: $(srcdir)/images/matrix2b.xpm xmatrix.o: $(srcdir)/images/matrix2.xbm xmatrix.o: $(srcdir)/images/matrix2.xpm xmatrix.o: $(srcdir)/screenhackI.h xmatrix.o: $(srcdir)/screenhack.h xmatrix.o: $(UTILS_SRC)/colors.h xmatrix.o: $(UTILS_SRC)/grabscreen.h xmatrix.o: $(UTILS_SRC)/hsv.h xmatrix.o: $(UTILS_SRC)/resources.h xmatrix.o: $(UTILS_SRC)/textclient.h xmatrix.o: $(UTILS_SRC)/usleep.h xmatrix.o: $(UTILS_SRC)/visual.h xmatrix.o: $(UTILS_SRC)/yarandom.h xmatrix.o: $(srcdir)/xpm-pixmap.h xpm-pixmap.o: ../config.h xpm-pixmap.o: $(UTILS_SRC)/visual.h xpm-pixmap.o: $(srcdir)/xpm-pixmap.h xrayswarm.o: ../config.h xrayswarm.o: $(srcdir)/fps.h xrayswarm.o: $(srcdir)/screenhackI.h xrayswarm.o: $(srcdir)/screenhack.h xrayswarm.o: $(UTILS_SRC)/colors.h xrayswarm.o: $(UTILS_SRC)/grabscreen.h xrayswarm.o: $(UTILS_SRC)/hsv.h xrayswarm.o: $(UTILS_SRC)/resources.h xrayswarm.o: $(UTILS_SRC)/usleep.h xrayswarm.o: $(UTILS_SRC)/visual.h xrayswarm.o: $(UTILS_SRC)/yarandom.h xscreensaver-sgigl.o: $(UTILS_SRC)/vroot.h xspirograph.o: ../config.h xspirograph.o: $(srcdir)/fps.h xspirograph.o: $(srcdir)/screenhackI.h xspirograph.o: $(srcdir)/screenhack.h xspirograph.o: $(UTILS_SRC)/colors.h xspirograph.o: $(UTILS_SRC)/erase.h xspirograph.o: $(UTILS_SRC)/grabscreen.h xspirograph.o: $(UTILS_SRC)/hsv.h xspirograph.o: $(UTILS_SRC)/resources.h xspirograph.o: $(UTILS_SRC)/usleep.h xspirograph.o: $(UTILS_SRC)/visual.h xspirograph.o: $(UTILS_SRC)/yarandom.h xsublim.o: ../config.h xsublim.o: $(UTILS_SRC)/resources.h xsublim.o: $(UTILS_SRC)/usleep.h xsublim.o: $(UTILS_SRC)/vroot.h xsublim.o: $(UTILS_SRC)/yarandom.h zoom.o: ../config.h zoom.o: $(srcdir)/fps.h zoom.o: $(srcdir)/screenhackI.h zoom.o: $(srcdir)/screenhack.h zoom.o: $(UTILS_SRC)/colors.h zoom.o: $(UTILS_SRC)/grabscreen.h zoom.o: $(UTILS_SRC)/hsv.h zoom.o: $(UTILS_SRC)/resources.h zoom.o: $(UTILS_SRC)/usleep.h zoom.o: $(UTILS_SRC)/visual.h zoom.o: $(UTILS_SRC)/yarandom.h xscreensaver-5.36/hacks/xml2man.pl000775 000767 000024 00000020006 12407061103 017137 0ustar00jwzstaff000000 000000 #!/usr/bin/perl -w # Copyright © 2002-2014 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. # # Created: 30-May-2002. # # This creates man pages from the XML program descriptions in # xscreensaver/hacks/config/. # # They aren't necessarily the most accurate or well-written man pages, # but at least they exist. require 5; use diagnostics; use strict; use Text::Wrap; my $progname = $0; $progname =~ s@.*/@@g; my ($version) = ('$Revision: 1.7 $' =~ m/\s(\d[.\d]+)\s/s); my $verbose = 0; my $default_args = ("[\\-display \\fIhost:display.screen\\fP]\n" . "[\\-visual \\fIvisual\\fP]\n" . "[\\-window]\n" . "[\\-root]\n"); my $default_options = (".TP 8\n" . ".B \\-visual \\fIvisual\\fP\n" . "Specify which visual to use. Legal values " . "are the name of a visual class,\n" . "or the id number (decimal or hex) of a " . "specific visual.\n" . ".TP 8\n" . ".B \\-window\n" . "Draw on a newly-created window. " . "This is the default.\n" . ".TP 8\n" . ".B \\-root\n" . "Draw on the root window.\n"); my $man_suffix = (".SH ENVIRONMENT\n" . ".PP\n" . ".TP 8\n" . ".B DISPLAY\n" . "to get the default host and display number.\n" . ".TP 8\n" . ".B XENVIRONMENT\n" . "to get the name of a resource file that overrides " . "the global resources\n" . "stored in the RESOURCE_MANAGER property.\n" . ".SH SEE ALSO\n" . ".BR X (1),\n" . ".BR xscreensaver (1)\n" . ".SH COPYRIGHT\n" . "Copyright \\(co %YEAR% by %AUTHOR%. " . "Permission to use, copy, modify, \n" . "distribute, and sell this software and its " . "documentation for any purpose is \n" . "hereby granted without fee, provided that " . "the above copyright notice appear \n" . "in all copies and that both that copyright " . "notice and this permission notice\n" . "appear in supporting documentation. No " . "representations are made about the \n" . "suitability of this software for any purpose. " . "It is provided \"as is\" without\n" . "express or implied warranty.\n" . ".SH AUTHOR\n" . "%AUTHOR%.\n"); sub xml2man($) { my ($exe) = @_; $exe =~ s/\.xml$//s; my $cfgdir = (-d "config" ? "config" : "../config"); my $xml = "$cfgdir/$exe.xml"; my $man = "$exe.man"; error ("$exe does not exist") if (! -f $exe); error ("$xml does not exist") if (! -f $xml); error ("$man already exists") if (-f $man); local *IN; open (IN, "<$xml") || error ("$xml: $!"); my $xmltxt = ""; while () { $xmltxt .= $_; } close IN; my $args = ""; my $body = ""; my $desc; $xmltxt =~ s/\s+/ /gs; $xmltxt =~ s///g; $xmltxt =~ s@(<[^/])@\n$1@gs; foreach (split ('\n', $xmltxt)) { next if m/^$/; next if m/^<\?xml\b/; next if m/^= 10000) { $label = "Per-frame delay, in microseconds."; $def = sprintf ("%d (%0.2f seconds)", $def, ($def/1000000.0)); $low = $hi = undef; } elsif ($carg eq '-speed \fInumber\fP') { $label = "Animation speed. 2.0 means twice as fast, " . "0.5 means half as fast."; $novalsp = 1; } elsif ($boolp) { $label .= ". Boolean."; } elsif ($label) { $label .= "."; } if (m/^<(number|boolean|option)/) { next if (!$arg && m/

[ ... s ... ] [ ... s ... ] [ ... s ... ] [ ... s ... ] [ ... s ... ] [ ...
s ... ] A vertical group of widgets/groups. No more than 10 widgets or groups should be used in a column. Since the default alignment of widgets is a column, the element is only of use inside an
element. ----------------------------------------------------------------------- <_description> FREE TEXT This is the description of the hack that appears in the right part of the window. Lines are wrapped; paragraphs are separated by blank lines. Lines that begin with whitespace will not be wrapped (see "munch.xml" for an example of why.) Make sure you use "<" instead of "<", etc. Character entities are allowed; HTML (and other markup) is not. ----------------------------------------------------------------------- If you are DTD-minded, you may also find the included files "xss.dtd" and "xss.xsd" useful. ----------------------------------------------------------------------- xscreensaver-5.36/hacks/config/abstractile.xml000644 000767 000024 00000002340 12717713645 021527 0ustar00jwzstaff000000 000000 xscreensaver-5.36/hacks/config/anemone.xml000644 000767 000024 00000003334 12701612112 020634 0ustar00jwzstaff000000 000000 xscreensaver-5.36/hacks/config/anemotaxis.xml000644 000767 000024 00000002435 12701612112 021363 0ustar00jwzstaff000000 000000 xscreensaver-5.36/hacks/config/ant.xml000644 000767 000024 00000004616 12701612112 020000 0ustar00jwzstaff000000 000000 xscreensaver-5.36/hacks/config/antinspect.xml000644 000767 000024 00000001240 12701612112 021354 0ustar00jwzstaff000000 000000 xscreensaver-5.36/hacks/config/antmaze.xml000644 000767 000024 00000001124 12701612112 020644 0ustar00jwzstaff000000 000000 xscreensaver-5.36/hacks/config/antspotlight.xml000644 000767 000024 00000001163 12701612112 021730 0ustar00jwzstaff000000 000000 xscreensaver-5.36/hacks/config/apollonian.xml000644 000767 000024 00000002431 12701612112 021343 0ustar00jwzstaff000000 000000 xscreensaver-5.36/hacks/config/apple2.xml000644 000767 000024 00000004635 12701612112 020402 0ustar00jwzstaff000000 000000 xscreensaver-5.36/hacks/config/atlantis.xml000644 000767 000024 00000003061 12701612112 021026 0ustar00jwzstaff000000 000000 xscreensaver-5.36/hacks/config/attraction.xml000644 000767 000024 00000006044 12701612112 021363 0ustar00jwzstaff000000 000000 xscreensaver-5.36/hacks/config/atunnel.xml000644 000767 000024 00000001464 12701612112 020662 0ustar00jwzstaff000000 000000 xscreensaver-5.36/hacks/config/barcode.xml000644 000767 000024 00000002143 12701612112 020606 0ustar00jwzstaff000000 000000 xscreensaver-5.36/hacks/config/binaryring.xml000664 000767 000024 00000002060 12701612112 021353 0ustar00jwzstaff000000 000000 xscreensaver-5.36/hacks/config/blaster.xml000644 000767 000024 00000003727 12701612112 020654 0ustar00jwzstaff000000 000000 xscreensaver-5.36/hacks/config/blinkbox.xml000644 000767 000024 00000002143 12701612112 021017 0ustar00jwzstaff000000 000000 xscreensaver-5.36/hacks/config/blitspin.xml000644 000767 000024 00000003026 12701612112 021034 0ustar00jwzstaff000000 000000 xscreensaver-5.36/hacks/config/blocktube.xml000644 000767 000024 00000002166 12701612112 021166 0ustar00jwzstaff000000 000000 xscreensaver-5.36/hacks/config/boing.xml000644 000767 000024 00000003237 12701612112 020312 0ustar00jwzstaff000000 000000 xscreensaver-5.36/hacks/config/bouboule.xml000644 000767 000024 00000002034 12701612112 021022 0ustar00jwzstaff000000 000000 xscreensaver-5.36/hacks/config/bouncingcow.xml000644 000767 000024 00000002007 12701612112 021523 0ustar00jwzstaff000000 000000 xscreensaver-5.36/hacks/config/boxed.xml000644 000767 000024 00000003446 12701612112 020317 0ustar00jwzstaff000000 000000 xscreensaver-5.36/hacks/config/boxfit.xml000644 000767 000024 00000003705 12701612112 020507 0ustar00jwzstaff000000 000000 xscreensaver-5.36/hacks/config/braid.xml000644 000767 000024 00000002243 12701612112 020271 0ustar00jwzstaff000000 000000 xscreensaver-5.36/hacks/config/bsod.xml000644 000767 000024 00000010127 12703603605 020150 0ustar00jwzstaff000000 000000 xscreensaver-5.36/hacks/config/bubble3d.xml000644 000767 000024 00000002062 12716713662 020713 0ustar00jwzstaff000000 000000 xscreensaver-5.36/hacks/config/bubbles.xml000644 000767 000024 00000002463 12701612112 020632 0ustar00jwzstaff000000 000000 xscreensaver-5.36/hacks/config/bumps.xml000644 000767 000024 00000001706 12701612112 020341 0ustar00jwzstaff000000 000000 xscreensaver-5.36/hacks/config/cage.xml000644 000767 000024 00000001410 12701612112 020102 0ustar00jwzstaff000000 000000 xscreensaver-5.36/hacks/config/carousel.xml000644 000767 000024 00000003507 12701612112 021031 0ustar00jwzstaff000000 000000 xscreensaver-5.36/hacks/config/ccurve.xml000644 000767 000024 00000001755 12701612112 020506 0ustar00jwzstaff000000 000000 xscreensaver-5.36/hacks/config/celtic.xml000644 000767 000024 00000001625 12701612112 020456 0ustar00jwzstaff000000 000000 xscreensaver-5.36/hacks/config/circuit.xml000644 000767 000024 00000002165 12701612112 020655 0ustar00jwzstaff000000 000000 xscreensaver-5.36/hacks/config/cityflow.xml000644 000767 000024 00000003256 12701612112 021055 0ustar00jwzstaff000000 000000 xscreensaver-5.36/hacks/config/cloudlife.xml000644 000767 000024 00000002541 12701612112 021157 0ustar00jwzstaff000000 000000 xscreensaver-5.36/hacks/config/companioncube.xml000644 000767 000024 00000003316 12701612112 022034 0ustar00jwzstaff000000 000000 xscreensaver-5.36/hacks/config/compass.xml000644 000767 000024 00000001206 12701612112 020653 0ustar00jwzstaff000000 000000 xscreensaver-5.36/hacks/config/coral.xml000644 000767 000024 00000002132 12701612112 020305 0ustar00jwzstaff000000 000000 xscreensaver-5.36/hacks/config/crackberg.xml000644 000767 000024 00000003662 12701612112 021141 0ustar00jwzstaff000000 000000 xscreensaver-5.36/hacks/config/critical.xml000644 000767 000024 00000001657 12701612112 021012 0ustar00jwzstaff000000 000000 xscreensaver-5.36/hacks/config/crystal.xml000644 000767 000024 00000003006 12701612112 020667 0ustar00jwzstaff000000 000000 xscreensaver-5.36/hacks/config/cube21.xml000644 000767 000024 00000005120 12701612112 020266 0ustar00jwzstaff000000 000000 xscreensaver-5.36/hacks/config/cubenetic.xml000644 000767 000024 00000004636 12701612112 021161 0ustar00jwzstaff000000 000000 xscreensaver-5.36/hacks/config/cubestack.xml000644 000767 000024 00000002560 12731600514 021164 0ustar00jwzstaff000000 000000 xscreensaver-5.36/hacks/config/cubestorm.xml000644 000767 000024 00000002472 12701612112 021217 0ustar00jwzstaff000000 000000 xscreensaver-5.36/hacks/config/cubetwist.xml000664 000767 000024 00000003001 12731577577 021250 0ustar00jwzstaff000000 000000 xscreensaver-5.36/hacks/config/cubicgrid.xml000644 000767 000024 00000001702 12701612112 021142 0ustar00jwzstaff000000 000000 xscreensaver-5.36/hacks/config/cwaves.xml000644 000767 000024 00000001676 12701612112 020511 0ustar00jwzstaff000000 000000 xscreensaver-5.36/hacks/config/cynosure.xml000644 000767 000024 00000001772 12701612112 021065 0ustar00jwzstaff000000 000000 xscreensaver-5.36/hacks/config/dangerball.xml000664 000767 000024 00000002204 12701612112 021302 0ustar00jwzstaff000000 000000 xscreensaver-5.36/hacks/config/decayscreen.xml000644 000767 000024 00000003744 12701612112 021504 0ustar00jwzstaff000000 000000 xscreensaver-5.36/hacks/config/deco.xml000644 000767 000024 00000003033 12701612112 020120 0ustar00jwzstaff000000 000000 xscreensaver-5.36/hacks/config/deluxe.xml000644 000767 000024 00000002245 12701612112 020500 0ustar00jwzstaff000000 000000 xscreensaver-5.36/hacks/config/demon.xml000644 000767 000024 00000002435 12701612112 020315 0ustar00jwzstaff000000 000000 xscreensaver-5.36/hacks/config/discoball.xml000664 000767 000024 00000002167 12731576277 021203 0ustar00jwzstaff000000 000000 xscreensaver-5.36/hacks/config/discrete.xml000644 000767 000024 00000001725 12701612112 021016 0ustar00jwzstaff000000 000000 xscreensaver-5.36/hacks/config/distort.xml000644 000767 000024 00000003237 12701612112 020704 0ustar00jwzstaff000000 000000 xscreensaver-5.36/hacks/config/dnalogo.xml000644 000767 000024 00000002535 12717714270 020656 0ustar00jwzstaff000000 000000 xscreensaver-5.36/hacks/config/drift.xml000644 000767 000024 00000001637 12701612112 020326 0ustar00jwzstaff000000 000000 xscreensaver-5.36/hacks/config/dymaxionmap.xml000644 000767 000024 00000002616 12720756170 021560 0ustar00jwzstaff000000 000000 xscreensaver-5.36/hacks/config/endgame.xml000644 000767 000024 00000001516 12701612112 020612 0ustar00jwzstaff000000 000000 xscreensaver-5.36/hacks/config/energystream.xml000664 000767 000024 00000001411 12706176451 021733 0ustar00jwzstaff000000 000000 xscreensaver-5.36/hacks/config/engine.xml000644 000767 000024 00000003533 12701612112 020460 0ustar00jwzstaff000000 000000 xscreensaver-5.36/hacks/config/epicycle.xml000644 000767 000024 00000003440 12701612112 021005 0ustar00jwzstaff000000 000000 xscreensaver-5.36/hacks/config/eruption.xml000644 000767 000024 00000003414 12701612112 021056 0ustar00jwzstaff000000 000000 xscreensaver-5.36/hacks/config/euler2d.xml000644 000767 000024 00000003261 12701612112 020553 0ustar00jwzstaff000000 000000 xscreensaver-5.36/hacks/config/extrusion.xml000644 000767 000024 00000002746 12701612112 021260 0ustar00jwzstaff000000 000000 xscreensaver-5.36/hacks/config/fadeplot.xml000644 000767 000024 00000002141 12701612112 021003 0ustar00jwzstaff000000 000000 xscreensaver-5.36/hacks/config/fiberlamp.xml000644 000767 000024 00000001634 12701612112 021154 0ustar00jwzstaff000000 000000 xscreensaver-5.36/hacks/config/fireworkx.xml000644 000767 000024 00000001653 12701612112 021234 0ustar00jwzstaff000000 000000 xscreensaver-5.36/hacks/config/flag.xml000644 000767 000024 00000002426 12701612112 020124 0ustar00jwzstaff000000 000000 xscreensaver-5.36/hacks/config/flame.xml000644 000767 000024 00000002373 12701612112 020300 0ustar00jwzstaff000000 000000 xscreensaver-5.36/hacks/config/flipflop.xml000644 000767 000024 00000002753 12701612112 021031 0ustar00jwzstaff000000 000000 xscreensaver-5.36/hacks/config/flipscreen3d.xml000644 000767 000024 00000001303 12701612112 021565 0ustar00jwzstaff000000 000000 xscreensaver-5.36/hacks/config/fliptext.xml000644 000767 000024 00000003230 12701612112 021044 0ustar00jwzstaff000000 000000 xscreensaver-5.36/hacks/config/flow.xml000644 000767 000024 00000004064 12701612112 020162 0ustar00jwzstaff000000 000000 xscreensaver-5.36/hacks/config/fluidballs.xml000644 000767 000024 00000003701 12701612112 021331 0ustar00jwzstaff000000 000000 xscreensaver-5.36/hacks/config/flurry.xml000644 000767 000024 00000002067 12701612112 020537 0ustar00jwzstaff000000 000000 xscreensaver-5.36/hacks/config/flyingtoasters.xml000644 000767 000024 00000002712 12701612112 022266 0ustar00jwzstaff000000 000000 xscreensaver-5.36/hacks/config/fontglide.xml000644 000767 000024 00000003236 12701612112 021166 0ustar00jwzstaff000000 000000 xscreensaver-5.36/hacks/config/forest.xml000644 000767 000024 00000001476 12701612112 020521 0ustar00jwzstaff000000 000000 xscreensaver-5.36/hacks/config/fuzzyflakes.xml000644 000767 000024 00000004443 12701612112 021571 0ustar00jwzstaff000000 000000 xscreensaver-5.36/hacks/config/galaxy.xml000644 000767 000024 00000002165 12701612112 020500 0ustar00jwzstaff000000 000000 xscreensaver-5.36/hacks/config/gears.xml000644 000767 000024 00000002366 12701612112 020317 0ustar00jwzstaff000000 000000 xscreensaver-5.36/hacks/config/geodesic.xml000644 000767 000024 00000004140 12701612112 020770 0ustar00jwzstaff000000 000000 xscreensaver-5.36/hacks/config/geodesicgears.xml000644 000767 000024 00000002475 12703305227 022033 0ustar00jwzstaff000000 000000 xscreensaver-5.36/hacks/config/gflux.xml000644 000767 000024 00000003603 12701612112 020336 0ustar00jwzstaff000000 000000 xscreensaver-5.36/hacks/config/glblur.xml000644 000767 000024 00000003417 12701612112 020503 0ustar00jwzstaff000000 000000 xscreensaver-5.36/hacks/config/glcells.xml000644 000767 000024 00000005122 12701612112 020634 0ustar00jwzstaff000000 000000 xscreensaver-5.36/hacks/config/gleidescope.xml000644 000767 000024 00000002323 12701612112 021472 0ustar00jwzstaff000000 000000 xscreensaver-5.36/hacks/config/glforestfire.xml000644 000767 000024 00000002740 12701612112 021705 0ustar00jwzstaff000000 000000 xscreensaver-5.36/hacks/config/glhanoi.xml000664 000767 000024 00000003377 12701612112 020644 0ustar00jwzstaff000000 000000 xscreensaver-5.36/hacks/config/glknots.xml000644 000767 000024 00000004134 12701612112 020672 0ustar00jwzstaff000000 000000 xscreensaver-5.36/hacks/config/glmatrix.xml000644 000767 000024 00000003475 12701612112 021047 0ustar00jwzstaff000000 000000 xscreensaver-5.36/hacks/config/glplanet.xml000644 000767 000024 00000002373 12721373734 021042 0ustar00jwzstaff000000 000000 xscreensaver-5.36/hacks/config/glschool.xml000644 000767 000024 00000003373 12701612112 021027 0ustar00jwzstaff000000 000000 xscreensaver-5.36/hacks/config/glslideshow.xml000644 000767 000024 00000003317 12701612112 021537 0ustar00jwzstaff000000 000000 xscreensaver-5.36/hacks/config/glsnake.xml000644 000767 000024 00000003530 12701612112 020634 0ustar00jwzstaff000000 000000 xscreensaver-5.36/hacks/config/gltext.xml000644 000767 000024 00000003534 12701612112 020523 0ustar00jwzstaff000000 000000 xscreensaver-5.36/hacks/config/goop.xml000644 000767 000024 00000004237 12701612112 020161 0ustar00jwzstaff000000 000000 xscreensaver-5.36/hacks/config/grav.xml000644 000767 000024 00000002174 12701612112 020152 0ustar00jwzstaff000000 000000 xscreensaver-5.36/hacks/config/greynetic.xml000644 000767 000024 00000001222 12701612112 021175 0ustar00jwzstaff000000 000000 xscreensaver-5.36/hacks/config/halftone.xml000644 000767 000024 00000004150 12701612112 021007 0ustar00jwzstaff000000 000000 xscreensaver-5.36/hacks/config/halo.xml000644 000767 000024 00000002403 12701612112 020131 0ustar00jwzstaff000000 000000 xscreensaver-5.36/hacks/config/helix.xml000644 000767 000024 00000001357 12701612112 020326 0ustar00jwzstaff000000 000000 xscreensaver-5.36/hacks/config/hexadrop.xml000644 000767 000024 00000003663 12701612112 021031 0ustar00jwzstaff000000 000000 xscreensaver-5.36/hacks/config/hexstrut.xml000644 000767 000024 00000003015 12763337615 021120 0ustar00jwzstaff000000 000000 xscreensaver-5.36/hacks/config/hilbert.xml000644 000767 000024 00000005034 12701612112 020642 0ustar00jwzstaff000000 000000 xscreensaver-5.36/hacks/config/hopalong.xml000644 000767 000024 00000004146 12701612112 021023 0ustar00jwzstaff000000 000000 xscreensaver-5.36/hacks/config/hydrostat.xml000644 000767 000024 00000005303 12716256077 021255 0ustar00jwzstaff000000 000000 xscreensaver-5.36/hacks/config/hyperball.xml000644 000767 000024 00000004557 12701612112 021204 0ustar00jwzstaff000000 000000 xscreensaver-5.36/hacks/config/hypercube.xml000644 000767 000024 00000005611 12701612112 021200 0ustar00jwzstaff000000 000000 xscreensaver-5.36/hacks/config/hypertorus.xml000644 000767 000024 00000007423 12701612112 021441 0ustar00jwzstaff000000 000000 xscreensaver-5.36/hacks/config/hypnowheel.xml000644 000767 000024 00000003153 12701612112 021373 0ustar00jwzstaff000000 000000 xscreensaver-5.36/hacks/config/ifs.xml000644 000767 000024 00000003656 12701612112 020002 0ustar00jwzstaff000000 000000 xscreensaver-5.36/hacks/config/imsmap.xml000644 000767 000024 00000003205 12701612112 020475 0ustar00jwzstaff000000 000000 xscreensaver-5.36/hacks/config/interaggregate.xml000644 000767 000024 00000002175 12701612112 022204 0ustar00jwzstaff000000 000000 xscreensaver-5.36/hacks/config/interference.xml000644 000767 000024 00000003575 12701612112 021672 0ustar00jwzstaff000000 000000 xscreensaver-5.36/hacks/config/intermomentary.xml000644 000767 000024 00000002542 12701612112 022267 0ustar00jwzstaff000000 000000 xscreensaver-5.36/hacks/config/jigglypuff.xml000644 000767 000024 00000006070 12701612112 021360 0ustar00jwzstaff000000 000000 xscreensaver-5.36/hacks/config/jigsaw.xml000644 000767 000024 00000002736 12701612112 020503 0ustar00jwzstaff000000 000000 xscreensaver-5.36/hacks/config/juggle.xml000644 000767 000024 00000003717 12701612112 020474 0ustar00jwzstaff000000 000000 xscreensaver-5.36/hacks/config/juggler3d.xml000644 000767 000024 00000003660 12701612112 021102 0ustar00jwzstaff000000 000000 xscreensaver-5.36/hacks/config/julia.xml000644 000767 000024 00000002413 12701612112 020313 0ustar00jwzstaff000000 000000 xscreensaver-5.36/hacks/config/kaleidescope.xml000644 000767 000024 00000002424 12701612112 021641 0ustar00jwzstaff000000 000000 xscreensaver-5.36/hacks/config/kaleidocycle.xml000644 000767 000024 00000004115 12706457756 021672 0ustar00jwzstaff000000 000000 xscreensaver-5.36/hacks/config/klein.xml000644 000767 000024 00000012017 12701612112 020312 0ustar00jwzstaff000000 000000 xscreensaver-5.36/hacks/config/kumppa.xml000644 000767 000024 00000001647 12701612112 020514 0ustar00jwzstaff000000 000000 xscreensaver-5.36/hacks/config/lament.xml000644 000767 000024 00000001474 12701612112 020475 0ustar00jwzstaff000000 000000 xscreensaver-5.36/hacks/config/laser.xml000644 000767 000024 00000002232 12701612112 020314 0ustar00jwzstaff000000 000000 xscreensaver-5.36/hacks/config/lavalite.xml000644 000767 000024 00000006271 12701612112 021016 0ustar00jwzstaff000000 000000 xscreensaver-5.36/hacks/config/lcdscrub.xml000644 000767 000024 00000004012 12701612112 021005 0ustar00jwzstaff000000 000000 xscreensaver-5.36/hacks/config/lightning.xml000644 000767 000024 00000001525 12701612112 021175 0ustar00jwzstaff000000 000000 xscreensaver-5.36/hacks/config/lisa.xml000644 000767 000024 00000002653 12701612112 020145 0ustar00jwzstaff000000 000000 xscreensaver-5.36/hacks/config/lissie.xml000644 000767 000024 00000002770 12701612112 020505 0ustar00jwzstaff000000 000000 xscreensaver-5.36/hacks/config/lmorph.xml000644 000767 000024 00000003045 12701612112 020512 0ustar00jwzstaff000000 000000 xscreensaver-5.36/hacks/config/lockward.xml000644 000767 000024 00000004326 12701612112 021022 0ustar00jwzstaff000000 000000 xscreensaver-5.36/hacks/config/loop.xml000644 000767 000024 00000002172 12701612112 020162 0ustar00jwzstaff000000 000000 xscreensaver-5.36/hacks/config/m6502.xml000644 000767 000024 00000003466 12701612112 017771 0ustar00jwzstaff000000 000000 xscreensaver-5.36/hacks/config/maze.xml000644 000767 000024 00000004443 12701612112 020150 0ustar00jwzstaff000000 000000 xscreensaver-5.36/hacks/config/memscroller.xml000644 000767 000024 00000001714 12701612112 021536 0ustar00jwzstaff000000 000000 xscreensaver-5.36/hacks/config/menger.xml000644 000767 000024 00000003523 12701612112 020467 0ustar00jwzstaff000000 000000 xscreensaver-5.36/hacks/config/metaballs.xml000644 000767 000024 00000003140 12701612112 021151 0ustar00jwzstaff000000 000000 xscreensaver-5.36/hacks/config/mirrorblob.xml000644 000767 000024 00000004636 12701612112 021371 0ustar00jwzstaff000000 000000 xscreensaver-5.36/hacks/config/mismunch.xml000644 000767 000024 00000002567 12701612112 021044 0ustar00jwzstaff000000 000000 xscreensaver-5.36/hacks/config/moebius.xml000644 000767 000024 00000001577 12701612112 020664 0ustar00jwzstaff000000 000000 xscreensaver-5.36/hacks/config/moebiusgears.xml000644 000767 000024 00000002776 12701612112 021710 0ustar00jwzstaff000000 000000 xscreensaver-5.36/hacks/config/moire.xml000644 000767 000024 00000002130 12701612112 020316 0ustar00jwzstaff000000 000000 xscreensaver-5.36/hacks/config/moire2.xml000644 000767 000024 00000002104 12701612112 020401 0ustar00jwzstaff000000 000000 xscreensaver-5.36/hacks/config/molecule.xml000644 000767 000024 00000004437 12701612112 021024 0ustar00jwzstaff000000 000000 xscreensaver-5.36/hacks/config/morph3d.xml000644 000767 000024 00000002064 12701612112 020565 0ustar00jwzstaff000000 000000 xscreensaver-5.36/hacks/config/mountain.xml000644 000767 000024 00000001656 12701612112 021051 0ustar00jwzstaff000000 000000 xscreensaver-5.36/hacks/config/munch.xml000644 000767 000024 00000003503 12701612112 020322 0ustar00jwzstaff000000 000000 xscreensaver-5.36/hacks/config/nerverot.xml000644 000767 000024 00000003753 12701612112 021063 0ustar00jwzstaff000000 000000 xscreensaver-5.36/hacks/config/noof.xml000644 000767 000024 00000001110 12701612112 020141 0ustar00jwzstaff000000 000000 xscreensaver-5.36/hacks/config/noseguy.xml000644 000767 000024 00000000726 12701612112 020705 0ustar00jwzstaff000000 000000 xscreensaver-5.36/hacks/config/pacman.xml000644 000767 000024 00000001420 12701612112 020443 0ustar00jwzstaff000000 000000 xscreensaver-5.36/hacks/config/pedal.xml000644 000767 000024 00000001612 12701612112 020274 0ustar00jwzstaff000000 000000 xscreensaver-5.36/hacks/config/penetrate.xml000644 000767 000024 00000001731 12701612112 021200 0ustar00jwzstaff000000 000000 xscreensaver-5.36/hacks/config/penrose.xml000644 000767 000024 00000003552 12701612112 020667 0ustar00jwzstaff000000 000000 xscreensaver-5.36/hacks/config/petri.xml000644 000767 000024 00000005624 12701612112 020341 0ustar00jwzstaff000000 000000 xscreensaver-5.36/hacks/config/phosphor.xml000644 000767 000024 00000002651 12701612112 021055 0ustar00jwzstaff000000 000000 xscreensaver-5.36/hacks/config/photopile.xml000644 000767 000024 00000004033 12736543611 021231 0ustar00jwzstaff000000 000000 xscreensaver-5.36/hacks/config/piecewise.xml000644 000767 000024 00000002630 12701612112 021165 0ustar00jwzstaff000000 000000 xscreensaver-5.36/hacks/config/pinion.xml000644 000767 000024 00000003010 12701612112 020475 0ustar00jwzstaff000000 000000 xscreensaver-5.36/hacks/config/pipes.xml000644 000767 000024 00000003224 12701612112 020330 0ustar00jwzstaff000000 000000 xscreensaver-5.36/hacks/config/polyhedra.xml000644 000767 000024 00000035464 12702535416 021226 0ustar00jwzstaff000000 000000 xscreensaver-5.36/hacks/config/polyominoes.xml000644 000767 000024 00000002143 12701612112 021564 0ustar00jwzstaff000000 000000 xscreensaver-5.36/hacks/config/polytopes.xml000644 000767 000024 00000007217 12701612112 021254 0ustar00jwzstaff000000 000000 xscreensaver-5.36/hacks/config/pong.xml000644 000767 000024 00000002637 12701612112 020162 0ustar00jwzstaff000000 000000 xscreensaver-5.36/hacks/config/popsquares.xml000644 000767 000024 00000003662 12701612112 021420 0ustar00jwzstaff000000 000000 xscreensaver-5.36/hacks/config/projectiveplane.xml000644 000767 000024 00000012524 12701612112 022405 0ustar00jwzstaff000000 000000 xscreensaver-5.36/hacks/config/providence.xml000644 000767 000024 00000001521 12701612112 021344 0ustar00jwzstaff000000 000000 xscreensaver-5.36/hacks/config/pulsar.xml000644 000767 000024 00000002711 12701612112 020516 0ustar00jwzstaff000000 000000 xscreensaver-5.36/hacks/config/pyro.xml000644 000767 000024 00000002241 12701612112 020177 0ustar00jwzstaff000000 000000 xscreensaver-5.36/hacks/config/qix.xml000644 000767 000024 00000004737 12701612112 020023 0ustar00jwzstaff000000 000000 xscreensaver-5.36/hacks/config/quasicrystal.xml000644 000767 000024 00000003633 12702533047 021752 0ustar00jwzstaff000000 000000 xscreensaver-5.36/hacks/config/queens.xml000644 000767 000024 00000001541 12701612112 020510 0ustar00jwzstaff000000 000000 xscreensaver-5.36/hacks/config/raverhoop.xml000644 000767 000024 00000003275 12711307022 021225 0ustar00jwzstaff000000 000000 xscreensaver-5.36/hacks/config/rd-bomb.xml000664 000767 000024 00000004241 12701612112 020534 0ustar00jwzstaff000000 000000 xscreensaver-5.36/hacks/config/rdbomb.xml000775 000767 000024 00000000000 12720744741 022532 2rd-bomb.xmlustar00jwzstaff000000 000000 xscreensaver-5.36/hacks/config/ripples.xml000644 000767 000024 00000003256 12701612112 020673 0ustar00jwzstaff000000 000000 xscreensaver-5.36/hacks/config/rocks.xml000644 000767 000024 00000002561 12701612112 020334 0ustar00jwzstaff000000 000000 xscreensaver-5.36/hacks/config/romanboy.xml000664 000767 000024 00000011365 12701612112 021045 0ustar00jwzstaff000000 000000 xscreensaver-5.36/hacks/config/rorschach.xml000644 000767 000024 00000002212 12701612112 021160 0ustar00jwzstaff000000 000000 xscreensaver-5.36/hacks/config/rotor.xml000644 000767 000024 00000002352 12701612112 020356 0ustar00jwzstaff000000 000000 xscreensaver-5.36/hacks/config/rotzoomer.xml000644 000767 000024 00000002737 12732311215 021264 0ustar00jwzstaff000000 000000 xscreensaver-5.36/hacks/config/rubik.xml000644 000767 000024 00000002274 12701612112 020330 0ustar00jwzstaff000000 000000 xscreensaver-5.36/hacks/config/rubikblocks.xml000644 000767 000024 00000004121 12701612112 021517 0ustar00jwzstaff000000 000000 xscreensaver-5.36/hacks/config/sballs.xml000644 000767 000024 00000002443 12701612112 020472 0ustar00jwzstaff000000 000000 xscreensaver-5.36/hacks/config/shadebobs.xml000644 000767 000024 00000002243 12701612112 021142 0ustar00jwzstaff000000 000000 xscreensaver-5.36/hacks/config/sierpinski.xml000644 000767 000024 00000002257 12701612112 021375 0ustar00jwzstaff000000 000000 xscreensaver-5.36/hacks/config/sierpinski3d.xml000644 000767 000024 00000002114 12701612112 021614 0ustar00jwzstaff000000 000000 xscreensaver-5.36/hacks/config/skytentacles.xml000644 000767 000024 00000004604 12701612112 021724 0ustar00jwzstaff000000 000000 xscreensaver-5.36/hacks/config/slidescreen.xml000644 000767 000024 00000003205 12701612112 021507 0ustar00jwzstaff000000 000000 xscreensaver-5.36/hacks/config/slip.xml000644 000767 000024 00000002350 12701612112 020156 0ustar00jwzstaff000000 000000 xscreensaver-5.36/hacks/config/sonar.xml000644 000767 000024 00000006427 12701612112 020342 0ustar00jwzstaff000000 000000 xscreensaver-5.36/hacks/config/speedmine.xml000644 000767 000024 00000004026 12701612112 021162 0ustar00jwzstaff000000 000000 xscreensaver-5.36/hacks/config/sphere.xml000644 000767 000024 00000001551 12701612112 020477 0ustar00jwzstaff000000 000000 xscreensaver-5.36/hacks/config/spheremonics.xml000644 000767 000024 00000004515 12701612112 021713 0ustar00jwzstaff000000 000000 xscreensaver-5.36/hacks/config/spiral.xml000644 000767 000024 00000002221 12701612112 020476 0ustar00jwzstaff000000 000000 xscreensaver-5.36/hacks/config/splitflap.xml000644 000767 000024 00000005041 12701612112 021205 0ustar00jwzstaff000000 000000 xscreensaver-5.36/hacks/config/splodesic.xml000644 000767 000024 00000002052 12731741433 021207 0ustar00jwzstaff000000 000000 xscreensaver-5.36/hacks/config/spotlight.xml000644 000767 000024 00000002020 12701612112 021216 0ustar00jwzstaff000000 000000 xscreensaver-5.36/hacks/config/sproingies.xml000644 000767 000024 00000002070 12701612112 021370 0ustar00jwzstaff000000 000000 xscreensaver-5.36/hacks/config/squiral.xml000644 000767 000024 00000003067 12701612112 020675 0ustar00jwzstaff000000 000000 xscreensaver-5.36/hacks/config/stairs.xml000644 000767 000024 00000001230 12701612112 020510 0ustar00jwzstaff000000 000000 xscreensaver-5.36/hacks/config/starfish.xml000644 000767 000024 00000002726 12701612112 021041 0ustar00jwzstaff000000 000000 xscreensaver-5.36/hacks/config/starwars.xml000644 000767 000024 00000004374 12753473675 021117 0ustar00jwzstaff000000 000000 xscreensaver-5.36/hacks/config/stonerview.xml000644 000767 000024 00000001645 12701612112 021422 0ustar00jwzstaff000000 000000 xscreensaver-5.36/hacks/config/strange.xml000644 000767 000024 00000002011 12701612112 020644 0ustar00jwzstaff000000 000000 xscreensaver-5.36/hacks/config/substrate.xml000644 000767 000024 00000003076 12701612112 021231 0ustar00jwzstaff000000 000000 xscreensaver-5.36/hacks/config/superquadrics.xml000644 000767 000024 00000002224 12701612112 022101 0ustar00jwzstaff000000 000000 xscreensaver-5.36/hacks/config/surfaces.xml000644 000767 000024 00000006113 12701612112 021023 0ustar00jwzstaff000000 000000 xscreensaver-5.36/hacks/config/swirl.xml000644 000767 000024 00000001742 12701612112 020353 0ustar00jwzstaff000000 000000 xscreensaver-5.36/hacks/config/t3d.xml000644 000767 000024 00000003376 12701612112 017712 0ustar00jwzstaff000000 000000 xscreensaver-5.36/hacks/config/tangram.xml000644 000767 000024 00000003040 12701612112 020635 0ustar00jwzstaff000000 000000 xscreensaver-5.36/hacks/config/tessellimage.xml000644 000767 000024 00000003702 12701612112 021667 0ustar00jwzstaff000000 000000 xscreensaver-5.36/hacks/config/testx11.xml000664 000767 000024 00000000622 12701612112 020522 0ustar00jwzstaff000000 000000 <_description> Test platform for JWXYZ - the X11 compatibility shim for OS X and iOS. End users shouldn't normally see this one. Written by Dave Odell; 2015. xscreensaver-5.36/hacks/config/thornbird.xml000644 000767 000024 00000002142 12701612112 021201 0ustar00jwzstaff000000 000000 xscreensaver-5.36/hacks/config/timetunnel.xml000644 000767 000024 00000002732 12701612112 021377 0ustar00jwzstaff000000 000000 xscreensaver-5.36/hacks/config/topblock.xml000644 000767 000024 00000004335 12701612112 021031 0ustar00jwzstaff000000 000000 xscreensaver-5.36/hacks/config/triangle.xml000644 000767 000024 00000001445 12701612112 021020 0ustar00jwzstaff000000 000000 xscreensaver-5.36/hacks/config/tronbit.xml000644 000767 000024 00000002553 12701612112 020675 0ustar00jwzstaff000000 000000 xscreensaver-5.36/hacks/config/truchet.xml000644 000767 000024 00000002160 12701612112 020664 0ustar00jwzstaff000000 000000 xscreensaver-5.36/hacks/config/twang.xml000644 000767 000024 00000003541 12701612112 020332 0ustar00jwzstaff000000 000000 xscreensaver-5.36/hacks/config/unicrud.xml000644 000767 000024 00000004370 12703007436 020675 0ustar00jwzstaff000000 000000 xscreensaver-5.36/hacks/config/unknownpleasures.xml000644 000767 000024 00000004011 12701612112 022626 0ustar00jwzstaff000000 000000 xscreensaver-5.36/hacks/config/vermiculate.xml000644 000767 000024 00000001052 12701612112 021525 0ustar00jwzstaff000000 000000 xscreensaver-5.36/hacks/config/vidwhacker.xml000644 000767 000024 00000002031 12701612112 021332 0ustar00jwzstaff000000 000000 xscreensaver-5.36/hacks/config/vines.xml000644 000767 000024 00000001575 12701612112 020343 0ustar00jwzstaff000000 000000 xscreensaver-5.36/hacks/config/voronoi.xml000644 000767 000024 00000004212 12701612112 020701 0ustar00jwzstaff000000 000000 xscreensaver-5.36/hacks/config/wander.xml000644 000767 000024 00000003151 12701612112 020467 0ustar00jwzstaff000000 000000 xscreensaver-5.36/hacks/config/webcollage.xml000644 000767 000024 00000003401 12701612112 021311 0ustar00jwzstaff000000 000000 xscreensaver-5.36/hacks/config/whirlwindwarp.xml000644 000767 000024 00000001552 12701612112 022113 0ustar00jwzstaff000000 000000 xscreensaver-5.36/hacks/config/whirlygig.xml000644 000767 000024 00000006352 12701612112 021222 0ustar00jwzstaff000000 000000 xscreensaver-5.36/hacks/config/winduprobot.xml000644 000767 000024 00000004016 12701612112 021564 0ustar00jwzstaff000000 000000 xscreensaver-5.36/hacks/config/worm.xml000644 000767 000024 00000002247 12701612112 020200 0ustar00jwzstaff000000 000000 xscreensaver-5.36/hacks/config/wormhole.xml000644 000767 000024 00000001635 12701612112 021050 0ustar00jwzstaff000000 000000 xscreensaver-5.36/hacks/config/xanalogtv.xml000644 000767 000024 00000002611 12701612112 021212 0ustar00jwzstaff000000 000000 xscreensaver-5.36/hacks/config/xflame.xml000644 000767 000024 00000001712 12701612112 020464 0ustar00jwzstaff000000 000000 xscreensaver-5.36/hacks/config/xjack.xml000644 000767 000024 00000001165 12701612112 020312 0ustar00jwzstaff000000 000000 xscreensaver-5.36/hacks/config/xlyap.xml000644 000767 000024 00000002470 12701612112 020347 0ustar00jwzstaff000000 000000 xscreensaver-5.36/hacks/config/xmatrix.xml000644 000767 000024 00000004125 12701612112 020705 0ustar00jwzstaff000000 000000 xscreensaver-5.36/hacks/config/xrayswarm.xml000644 000767 000024 00000001134 12701612112 021243 0ustar00jwzstaff000000 000000 xscreensaver-5.36/hacks/config/xspirograph.xml000644 000767 000024 00000001667 12701612112 021567 0ustar00jwzstaff000000 000000 xscreensaver-5.36/hacks/config/zoom.xml000644 000767 000024 00000003526 12711270565 020216 0ustar00jwzstaff000000 000000 xscreensaver-5.36/hacks/config/xss.dtd000644 000767 000024 00000006577 11767730427 020043 0ustar00jwzstaff000000 000000 xscreensaver-5.36/hacks/config/xss.xsd000644 000767 000024 00000035205 10324546432 020041 0ustar00jwzstaff000000 000000 xscreensaver-5.36/hacks/images/6x10font.xbm000644 000767 000024 00000033422 10413373526 020601 0ustar00jwzstaff000000 000000 #define font6x10_width 1792 #define font6x10_height 10 static unsigned char font6x10_bits[] = { 0x00, 0x80, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x20, 0x10, 0x7e, 0x00, 0x00, 0x00, 0x40, 0x20, 0x10, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7c, 0x00, 0x00, 0x86, 0x03, 0x01, 0x00, 0x00, 0x00, 0x04, 0x00, 0x40, 0x20, 0x18, 0x00, 0x04, 0x08, 0x82, 0x44, 0x41, 0x00, 0x00, 0x04, 0x08, 0x82, 0x42, 0x80, 0x20, 0x28, 0x00, 0x14, 0x01, 0x82, 0x40, 0x51, 0x00, 0x00, 0x02, 0x04, 0x41, 0x81, 0x00, 0x00, 0x04, 0x08, 0x02, 0x05, 0x40, 0x00, 0x00, 0x04, 0x08, 0x02, 0x40, 0x40, 0x20, 0x00, 0x00, 0x14, 0x01, 0x82, 0x40, 0x01, 0x00, 0x00, 0x02, 0x04, 0x01, 0x00, 0x00, 0x00, 0x2a, 0x00, 0x55, 0xe2, 0xe0, 0x08, 0x10, 0x00, 0x89, 0x04, 0x01, 0x00, 0x20, 0x10, 0x00, 0x00, 0x00, 0x00, 0x40, 0x20, 0x10, 0x00, 0x04, 0xcc, 0x00, 0x00, 0x61, 0x00, 0x00, 0x04, 0x85, 0x82, 0x20, 0x11, 0x10, 0x10, 0x02, 0x00, 0x00, 0x00, 0x00, 0x40, 0x08, 0x04, 0xc7, 0x07, 0xf1, 0x61, 0x7c, 0x1c, 0x0e, 0x00, 0x00, 0x02, 0x10, 0x38, 0x1c, 0x84, 0x87, 0xe3, 0xf1, 0xf9, 0x38, 0x22, 0x0e, 0x4e, 0x24, 0x10, 0x89, 0x38, 0x1e, 0x8e, 0x87, 0xe3, 0x13, 0x89, 0x44, 0x22, 0x91, 0x8f, 0x23, 0xe0, 0x20, 0x00, 0x10, 0x80, 0x00, 0x00, 0x02, 0x60, 0x00, 0x02, 0x04, 0x48, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x86, 0x60, 0x90, 0x54, 0x2a, 0x95, 0x4a, 0xa5, 0x52, 0xa9, 0x54, 0x2a, 0x95, 0x4a, 0xa5, 0x52, 0xa9, 0x54, 0x2a, 0x95, 0x4a, 0xa5, 0x52, 0xa9, 0x54, 0x2a, 0x95, 0x4a, 0xa5, 0x52, 0xa9, 0x54, 0x00, 0x04, 0x00, 0x03, 0x10, 0x21, 0x38, 0x00, 0x0e, 0x0e, 0x00, 0x00, 0x70, 0x00, 0x08, 0x00, 0x09, 0x84, 0x00, 0xf0, 0x00, 0x00, 0x06, 0x06, 0x60, 0x30, 0x20, 0x10, 0x08, 0x04, 0x45, 0x03, 0xa0, 0xe0, 0x39, 0x3e, 0x9f, 0xcf, 0x87, 0x40, 0x50, 0x00, 0x1e, 0x0a, 0x02, 0x41, 0xa1, 0x00, 0x00, 0x1c, 0x04, 0x82, 0x02, 0x40, 0x08, 0x38, 0x08, 0x04, 0x85, 0x42, 0xa1, 0x00, 0x00, 0x08, 0x04, 0x85, 0x82, 0x20, 0x50, 0x28, 0x06, 0x0a, 0x02, 0x41, 0xa1, 0x50, 0x00, 0x00, 0x04, 0x82, 0x42, 0x81, 0x00, 0x28, 0x00, 0x84, 0x4a, 0x22, 0x10, 0x08, 0x28, 0x08, 0x8b, 0x04, 0x01, 0x00, 0x20, 0x10, 0x00, 0x3f, 0x00, 0x00, 0x40, 0x20, 0x10, 0x00, 0x04, 0x03, 0x03, 0x80, 0x90, 0x00, 0x00, 0x04, 0x85, 0xc2, 0x51, 0x29, 0x10, 0x08, 0x84, 0x08, 0x01, 0x00, 0x00, 0x40, 0x14, 0x86, 0x08, 0x84, 0x11, 0x10, 0x40, 0x22, 0x11, 0x02, 0x01, 0x01, 0x20, 0x44, 0x22, 0x0a, 0x49, 0x44, 0x12, 0x08, 0x44, 0x22, 0x04, 0x44, 0x22, 0x10, 0x89, 0x44, 0x22, 0x91, 0x48, 0x84, 0x10, 0x89, 0x44, 0x22, 0x11, 0x88, 0x20, 0x80, 0x50, 0x00, 0x00, 0x80, 0x00, 0x00, 0x02, 0x90, 0x00, 0x02, 0x00, 0x40, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x81, 0x80, 0xa8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x82, 0x04, 0x10, 0x21, 0x04, 0x00, 0x11, 0x09, 0x00, 0x00, 0x88, 0x00, 0x14, 0x04, 0x04, 0x03, 0x00, 0xb8, 0x00, 0x00, 0x04, 0x09, 0x40, 0x20, 0x10, 0x00, 0x1c, 0x0e, 0x87, 0xc3, 0xe1, 0x50, 0x44, 0x02, 0x81, 0x40, 0xc0, 0xe1, 0x70, 0x38, 0x24, 0x11, 0x87, 0xc3, 0xe1, 0x70, 0x00, 0x32, 0x91, 0x08, 0x20, 0x12, 0x79, 0x44, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x40, 0x08, 0x00, 0x22, 0x0e, 0xd5, 0x63, 0x10, 0x08, 0x10, 0x08, 0x0b, 0x03, 0x01, 0x00, 0x20, 0x10, 0x00, 0x00, 0x00, 0x00, 0x40, 0x20, 0x10, 0x00, 0x84, 0x00, 0xe4, 0xf3, 0x11, 0x00, 0x00, 0x04, 0xc5, 0xa7, 0xa0, 0x28, 0x10, 0x04, 0x08, 0x05, 0x01, 0x00, 0x00, 0x20, 0x22, 0x05, 0x08, 0x42, 0xd1, 0x08, 0x20, 0x22, 0x19, 0x87, 0x83, 0xf0, 0x41, 0x20, 0x32, 0x11, 0x49, 0x40, 0x12, 0x08, 0x04, 0x22, 0x04, 0x44, 0x21, 0xb0, 0x99, 0x44, 0x22, 0x91, 0x48, 0x80, 0x10, 0x89, 0x44, 0x14, 0x0a, 0x84, 0x40, 0x80, 0x88, 0x00, 0x00, 0x8e, 0x86, 0xc3, 0xe2, 0x10, 0x78, 0x1a, 0x06, 0x4c, 0x84, 0xb0, 0x68, 0x38, 0x1a, 0x96, 0x86, 0xe3, 0x11, 0x89, 0x44, 0x22, 0x91, 0x0f, 0x82, 0x40, 0x48, 0x44, 0x22, 0x91, 0x48, 0x24, 0x12, 0x89, 0x44, 0x22, 0x91, 0x48, 0x24, 0x12, 0x89, 0x44, 0x22, 0x91, 0x48, 0x24, 0x12, 0x89, 0x44, 0x22, 0x91, 0x48, 0x24, 0x12, 0x89, 0x44, 0x00, 0x04, 0x8f, 0x20, 0xa2, 0x20, 0x1c, 0x00, 0x15, 0x0d, 0x09, 0x00, 0xb8, 0x00, 0x08, 0x04, 0x02, 0x04, 0x10, 0xb9, 0x00, 0x00, 0x04, 0x49, 0x42, 0x20, 0x20, 0x10, 0x22, 0x91, 0x48, 0x24, 0x12, 0x49, 0x04, 0x02, 0x81, 0x40, 0x80, 0x40, 0x20, 0x10, 0x24, 0x93, 0x48, 0x24, 0x12, 0x89, 0x44, 0x32, 0x91, 0x48, 0x24, 0x12, 0x89, 0x24, 0x1c, 0x0e, 0x87, 0xc3, 0xe1, 0xf0, 0x38, 0x1c, 0x0e, 0x87, 0xc3, 0x60, 0x30, 0x18, 0x1c, 0x0d, 0x87, 0xc3, 0xe1, 0x70, 0x00, 0x3c, 0x91, 0x48, 0x24, 0x12, 0x79, 0x44, 0x00, 0x9f, 0x4a, 0x22, 0xe0, 0x78, 0x00, 0x3e, 0x0d, 0x01, 0x01, 0x00, 0x20, 0x10, 0x00, 0x00, 0x00, 0x00, 0x40, 0x20, 0x10, 0x00, 0x04, 0x03, 0x43, 0x41, 0x38, 0x10, 0x00, 0x04, 0x80, 0xc2, 0x41, 0x10, 0x00, 0x04, 0x88, 0xcf, 0x07, 0xf0, 0x01, 0x10, 0x22, 0x04, 0x06, 0x23, 0x31, 0x69, 0x20, 0x1c, 0x16, 0x02, 0x41, 0x00, 0x80, 0x10, 0x2a, 0x11, 0x47, 0x40, 0xf2, 0x78, 0x04, 0x3e, 0x04, 0xc4, 0x20, 0x50, 0xa9, 0x44, 0x1e, 0x91, 0x87, 0x83, 0x10, 0x51, 0x54, 0x08, 0x04, 0x82, 0x80, 0x80, 0x00, 0x00, 0x00, 0x90, 0x49, 0x24, 0x13, 0x79, 0x44, 0x26, 0x04, 0x48, 0x82, 0x50, 0x99, 0x44, 0x26, 0x99, 0x49, 0x40, 0x10, 0x89, 0x44, 0x14, 0x11, 0x84, 0x81, 0x80, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x84, 0xc2, 0xc1, 0x41, 0x00, 0x24, 0x00, 0x13, 0x8a, 0xc4, 0xe3, 0x99, 0x00, 0x00, 0x1f, 0x8f, 0x03, 0x10, 0xb1, 0x10, 0x00, 0x0e, 0x86, 0xe4, 0x74, 0x99, 0x10, 0x22, 0x91, 0x48, 0x24, 0x12, 0xc9, 0x05, 0x1e, 0x8f, 0xc7, 0x83, 0x40, 0x20, 0x10, 0x2e, 0x95, 0x48, 0x24, 0x12, 0x89, 0x28, 0x2a, 0x91, 0x48, 0x24, 0xa2, 0x78, 0x14, 0x20, 0x10, 0x08, 0x04, 0x02, 0x41, 0x45, 0x22, 0x91, 0x48, 0x84, 0x40, 0x20, 0x10, 0x22, 0x93, 0x48, 0x24, 0x12, 0x89, 0x7c, 0x32, 0x91, 0x48, 0x24, 0x12, 0x89, 0x44, 0x22, 0x0e, 0x55, 0xa2, 0xe3, 0xf0, 0x00, 0x08, 0x09, 0xcf, 0xe1, 0xc0, 0xe3, 0xfd, 0x00, 0x80, 0x1f, 0x00, 0xc0, 0x3b, 0xfc, 0x7e, 0x04, 0xcc, 0x40, 0xf1, 0x11, 0x00, 0x00, 0x04, 0xc0, 0x87, 0xa2, 0xa8, 0x00, 0x04, 0x08, 0x05, 0x01, 0x00, 0x00, 0x08, 0x22, 0x04, 0x01, 0xe4, 0x03, 0x99, 0x10, 0x22, 0x10, 0x00, 0x80, 0xf0, 0x41, 0x10, 0x1a, 0x1f, 0x49, 0x40, 0x12, 0x08, 0x64, 0x22, 0x04, 0x44, 0x21, 0x10, 0xc9, 0x44, 0x02, 0x91, 0x02, 0x84, 0x10, 0x51, 0x54, 0x14, 0x04, 0x81, 0x00, 0x81, 0x00, 0x00, 0x00, 0x9e, 0x48, 0x20, 0xf2, 0x11, 0x44, 0x22, 0x04, 0xc8, 0x81, 0x50, 0x89, 0x44, 0x22, 0x91, 0x80, 0x43, 0x10, 0x51, 0x54, 0x08, 0x19, 0x02, 0x82, 0x40, 0x00, 0x44, 0x22, 0x91, 0x48, 0x24, 0x12, 0x89, 0x44, 0x22, 0x91, 0x48, 0x24, 0x12, 0x89, 0x44, 0x22, 0x91, 0x48, 0x24, 0x12, 0x89, 0x44, 0x22, 0x91, 0x48, 0x24, 0x12, 0x89, 0x44, 0x00, 0x84, 0x82, 0x40, 0xf1, 0x21, 0x48, 0x00, 0x15, 0x40, 0x02, 0x02, 0x98, 0x00, 0x00, 0x04, 0x00, 0x00, 0x10, 0xa1, 0x00, 0x00, 0x00, 0x00, 0x09, 0x86, 0xc2, 0x08, 0x3e, 0x9f, 0xcf, 0xe7, 0xf3, 0x79, 0x04, 0x02, 0x81, 0x40, 0x80, 0x40, 0x20, 0x10, 0x24, 0x99, 0x48, 0x24, 0x12, 0x89, 0x10, 0x26, 0x91, 0x48, 0x24, 0x42, 0x08, 0x24, 0x3c, 0x1e, 0x8f, 0xc7, 0xe3, 0xf1, 0x05, 0x3e, 0x9f, 0xcf, 0x87, 0x40, 0x20, 0x10, 0x22, 0x91, 0x48, 0x24, 0x12, 0x89, 0x00, 0x2a, 0x91, 0x48, 0x24, 0x92, 0x89, 0x64, 0x00, 0x84, 0x8a, 0x87, 0x20, 0x11, 0x00, 0x08, 0x02, 0x04, 0x80, 0x40, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x40, 0x20, 0x00, 0x08, 0x04, 0x00, 0x40, 0x21, 0x90, 0x00, 0x00, 0x00, 0x80, 0xc2, 0x51, 0x49, 0x00, 0x08, 0x84, 0x08, 0x81, 0x01, 0x20, 0x04, 0x14, 0x84, 0x40, 0x04, 0x11, 0x89, 0x08, 0x22, 0x08, 0x02, 0x03, 0x01, 0x20, 0x00, 0x02, 0x11, 0x49, 0x44, 0x12, 0x08, 0x44, 0x22, 0x84, 0x44, 0x22, 0x10, 0x89, 0x44, 0x02, 0x95, 0x44, 0x84, 0x10, 0x51, 0x6c, 0x22, 0x84, 0x80, 0x00, 0x82, 0x00, 0x00, 0x00, 0x91, 0x49, 0x24, 0x13, 0x10, 0x78, 0x22, 0x04, 0x48, 0x82, 0x50, 0x89, 0x44, 0x26, 0x99, 0x00, 0x44, 0x92, 0x51, 0x54, 0x14, 0x16, 0x01, 0x81, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x84, 0x82, 0xc4, 0x41, 0x20, 0x70, 0x00, 0x11, 0x8f, 0x04, 0x00, 0x88, 0x00, 0x00, 0x04, 0x00, 0x00, 0x30, 0xa1, 0x00, 0x00, 0x00, 0x8f, 0x04, 0x05, 0xa2, 0x44, 0x22, 0x91, 0x48, 0x24, 0x12, 0x49, 0x44, 0x02, 0x81, 0x40, 0x80, 0x40, 0x20, 0x10, 0x24, 0x91, 0x48, 0x24, 0x12, 0x89, 0x28, 0x26, 0x91, 0x48, 0x24, 0x42, 0x08, 0x44, 0x22, 0x91, 0x48, 0x24, 0x12, 0x49, 0x44, 0x02, 0x81, 0x40, 0x80, 0x40, 0x20, 0x10, 0x22, 0x91, 0x48, 0x24, 0x12, 0x89, 0x10, 0x26, 0x99, 0x4c, 0x26, 0x63, 0x89, 0x58, 0x2a, 0x00, 0x15, 0x82, 0xe1, 0x70, 0x00, 0x3e, 0x02, 0x04, 0x80, 0x40, 0x00, 0x10, 0x00, 0x00, 0xc0, 0x0f, 0x40, 0x20, 0x00, 0x08, 0x84, 0xcf, 0x47, 0x11, 0x68, 0x00, 0x00, 0x04, 0x80, 0x82, 0x90, 0xb0, 0x00, 0x10, 0x02, 0x00, 0x80, 0x00, 0x70, 0x04, 0x08, 0x9f, 0x8f, 0x03, 0xe1, 0x70, 0x08, 0x1c, 0x06, 0x07, 0x01, 0x02, 0x10, 0x10, 0x1c, 0x91, 0x87, 0xe3, 0xf1, 0x09, 0x38, 0x22, 0x0e, 0x43, 0xe4, 0x13, 0x89, 0x38, 0x02, 0x8e, 0x88, 0x83, 0xe0, 0x20, 0x44, 0x22, 0x84, 0x8f, 0x03, 0xe2, 0x00, 0x00, 0x00, 0x9e, 0x86, 0xc3, 0xe2, 0x10, 0x40, 0x22, 0x0e, 0x49, 0xc4, 0x11, 0x89, 0x38, 0x1a, 0x96, 0xc0, 0x83, 0x61, 0x21, 0x28, 0x22, 0x90, 0x0f, 0x86, 0x60, 0x00, 0x54, 0x2a, 0x95, 0x4a, 0xa5, 0x52, 0xa9, 0x54, 0x2a, 0x95, 0x4a, 0xa5, 0x52, 0xa9, 0x54, 0x2a, 0x95, 0x4a, 0xa5, 0x52, 0xa9, 0x54, 0x2a, 0x95, 0x4a, 0xa5, 0x52, 0xa9, 0x54, 0x00, 0x04, 0x4f, 0x23, 0x42, 0x20, 0x40, 0x00, 0x0e, 0x00, 0x09, 0x00, 0x70, 0x00, 0x00, 0x1f, 0x00, 0x00, 0xd0, 0xa0, 0x00, 0x00, 0x00, 0x40, 0x82, 0x07, 0xf1, 0x38, 0x22, 0x91, 0x48, 0x24, 0x12, 0xc9, 0x39, 0x3e, 0x9f, 0xcf, 0xc7, 0xe1, 0x70, 0x38, 0x1e, 0x11, 0x87, 0xc3, 0xe1, 0x70, 0x44, 0x1c, 0x0e, 0x87, 0xc3, 0x41, 0x08, 0x34, 0x3c, 0x1e, 0x8f, 0xc7, 0xe3, 0xf1, 0x39, 0x1c, 0x0e, 0x87, 0xc3, 0xe1, 0x70, 0x38, 0x1c, 0x11, 0x87, 0xc3, 0xe1, 0x70, 0x00, 0x1e, 0x16, 0x8b, 0xc5, 0x02, 0x79, 0x40, 0x00, 0x80, 0x0a, 0x82, 0x20, 0x11, 0x00, 0x00, 0x02, 0x04, 0x80, 0x40, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x40, 0x20, 0x00, 0x08, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x82, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x44, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x00, 0x02, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x40, 0x00, 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x84, 0x83, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x09, 0x44, 0x00, 0x00, 0x15, 0x82, 0x20, 0x11, 0x00, 0x00, 0x1e, 0x04, 0x80, 0x40, 0x00, 0x10, 0x00, 0x00, 0x00, 0xe0, 0x47, 0x20, 0x00, 0x08, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, 0x02, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0x08, 0x38}; xscreensaver-5.36/hacks/images/apple2font.xbm000644 000767 000024 00000005532 10401760371 021262 0ustar00jwzstaff000000 000000 #define apple2_font_width 448 #define apple2_font_height 8 static unsigned char apple2_font_bits[] = { 0x00, 0x04, 0x85, 0x82, 0x30, 0x10, 0x10, 0x10, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x1c, 0x04, 0xc7, 0x07, 0xf1, 0xe1, 0x7c, 0x1c, 0x0e, 0x00, 0x00, 0x01, 0x08, 0x38, 0x1c, 0x84, 0x87, 0xe3, 0xf1, 0xf9, 0x78, 0x22, 0x0e, 0x48, 0x24, 0x10, 0x89, 0x38, 0x1e, 0x8e, 0x87, 0xe3, 0x13, 0x89, 0x44, 0x22, 0x91, 0xcf, 0x07, 0xf0, 0x01, 0x00, 0x00, 0x04, 0x85, 0xc2, 0x33, 0x29, 0x10, 0x08, 0x84, 0x0a, 0x01, 0x00, 0x00, 0x40, 0x22, 0x86, 0x08, 0x84, 0x11, 0x10, 0x40, 0x22, 0x11, 0x00, 0x80, 0x00, 0x10, 0x44, 0x22, 0x8a, 0x48, 0x24, 0x12, 0x08, 0x04, 0x22, 0x04, 0x48, 0x22, 0xb0, 0x89, 0x44, 0x22, 0x91, 0x48, 0x84, 0x10, 0x89, 0x44, 0x22, 0x11, 0xc8, 0x20, 0x80, 0x01, 0x00, 0x00, 0x04, 0xc5, 0xa7, 0x80, 0x28, 0x10, 0x04, 0x08, 0x07, 0x01, 0x00, 0x00, 0x20, 0x32, 0x04, 0x08, 0x42, 0xf1, 0x08, 0x20, 0x22, 0x11, 0x02, 0x41, 0xf0, 0x21, 0x20, 0x2a, 0x91, 0x48, 0x20, 0x12, 0x08, 0x04, 0x22, 0x04, 0x48, 0x21, 0x50, 0x99, 0x44, 0x22, 0x91, 0x48, 0x80, 0x10, 0x89, 0x44, 0x14, 0x0a, 0xc4, 0x40, 0x80, 0x21, 0x00, 0x00, 0x04, 0x80, 0xc2, 0x41, 0x10, 0x00, 0x04, 0x08, 0xc2, 0x07, 0xf0, 0x01, 0x10, 0x2a, 0x04, 0x06, 0x23, 0x01, 0x79, 0x10, 0x1c, 0x1e, 0x00, 0x20, 0x00, 0x40, 0x10, 0x3a, 0x91, 0x47, 0x20, 0xf2, 0x78, 0x04, 0x3e, 0x04, 0xc8, 0x20, 0x50, 0xa9, 0x44, 0x1e, 0x91, 0x87, 0x83, 0x10, 0x89, 0x54, 0x08, 0x04, 0xc2, 0x80, 0x80, 0x51, 0x00, 0x00, 0x04, 0xc0, 0x87, 0x22, 0xa8, 0x00, 0x04, 0x08, 0x07, 0x81, 0x00, 0x00, 0x08, 0x26, 0x04, 0x01, 0xe4, 0x03, 0x89, 0x08, 0x22, 0x10, 0x02, 0x41, 0xf0, 0x21, 0x10, 0x1a, 0x9f, 0x48, 0x20, 0x12, 0x08, 0x64, 0x22, 0x04, 0x48, 0x21, 0x10, 0xc9, 0x44, 0x02, 0x95, 0x02, 0x84, 0x10, 0x89, 0x54, 0x14, 0x04, 0xc1, 0x00, 0x81, 0x89, 0x00, 0x00, 0x00, 0x80, 0xe2, 0x91, 0x49, 0x00, 0x08, 0x84, 0x0a, 0x81, 0x00, 0x00, 0x04, 0x22, 0x84, 0x40, 0x04, 0x11, 0x89, 0x08, 0x22, 0x08, 0x00, 0x81, 0x00, 0x10, 0x00, 0x02, 0x91, 0x48, 0x24, 0x12, 0x08, 0x44, 0x22, 0x84, 0x48, 0x22, 0x10, 0x89, 0x44, 0x02, 0x89, 0x44, 0x84, 0x10, 0x51, 0x6c, 0x22, 0x84, 0xc0, 0x00, 0x82, 0x01, 0x00, 0x00, 0x04, 0x80, 0x82, 0x80, 0xb1, 0x00, 0x10, 0x02, 0x02, 0x40, 0x00, 0x20, 0x00, 0x1c, 0x8e, 0x8f, 0x03, 0xe1, 0x70, 0x08, 0x1c, 0x07, 0x80, 0x00, 0x01, 0x08, 0x10, 0x3c, 0x91, 0x87, 0xe3, 0xf1, 0x09, 0x78, 0x22, 0x0e, 0x47, 0xe4, 0x13, 0x89, 0x38, 0x02, 0x96, 0x88, 0x83, 0xe0, 0x20, 0x44, 0x22, 0x84, 0xcf, 0x07, 0xf0, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe}; xscreensaver-5.36/hacks/images/atari.xbm000644 000767 000024 00000000374 10403465277 020320 0ustar00jwzstaff000000 000000 #define atari_width 16 #define atari_height 16 static unsigned char atari_bits[] = { 0x60,0x00,0x94,0x00,0x00,0x01,0x12,0x02,0x88,0x0f,0x80,0x0f,0xe0,0x3f,0xf0, 0x7f,0xf0,0x7f,0xf8,0xff,0xf8,0xf7,0xf0,0x77,0xf0,0x7b,0xe0,0x3f,0xc0,0x1f, 0x00,0x07}; xscreensaver-5.36/hacks/images/atm.xbm000644 000767 000024 00000044520 11031241445 017765 0ustar00jwzstaff000000 000000 #define atm_width 223 #define atm_height 130 static unsigned char atm_bits[] = { 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0x3f,0xfc,0x0f,0xfc,0x0f,0xfc,0x0f, 0xf0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x3c,0x3c,0x0f,0x3c,0x0f,0x3c,0x0f,0x3c,0xfc,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x3c,0x30,0x0f,0x3f,0x0f,0x3f,0x0f,0x3f,0xff,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x3c,0x03,0xcf,0x3f,0xcf,0x3f,0xcf,0x3f,0xf0,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfc, 0x03,0xff,0x3c,0xff,0x3c,0xff,0x3c,0xf0,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3c,0x03,0x3f, 0x3c,0x3f,0x3c,0x3f,0x3c,0xf0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3c,0x00,0x0f,0x3c,0x0f, 0x3c,0x0f,0x3c,0xf0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3c,0x00,0x0f,0x3c,0x0f,0x3c,0x0f, 0x3c,0xf0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0xff,0x00,0xfc,0x0f,0xfc,0x0f,0xfc,0x0f,0xff, 0x0f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0xe0,0x07,0x1e,0x78,0xfe,0x7f,0x00,0x00,0xe0,0x07,0xff,0x3f,0x00,0x00,0xfc, 0x0f,0xff,0x3f,0xff,0x0f,0x0f,0x3c,0xfc,0x03,0xf0,0x0f,0xff,0x3f,0x78,0x1e, 0x1e,0x78,0xe2,0x61,0x00,0x00,0x78,0x1e,0x3c,0x3c,0x00,0x00,0x0f,0x3c,0x7c, 0x3c,0x3c,0x3c,0x0f,0x3c,0xf0,0x00,0x3c,0x3c,0x3c,0x3c,0x1e,0x78,0x1e,0x78, 0xe0,0x01,0x00,0x00,0x1e,0x78,0x3c,0x30,0x00,0x00,0x0f,0x3c,0x3c,0x30,0x3c, 0x3c,0x0f,0x3c,0xf0,0x00,0x0f,0x30,0x3c,0x30,0x1e,0x78,0x1e,0x78,0xe0,0x01, 0x00,0x00,0x1e,0x78,0x3c,0x03,0x00,0x00,0x3c,0x00,0x3c,0x03,0x3c,0x3c,0x0f, 0x3c,0xf0,0x00,0x0f,0x00,0x3c,0x03,0x1e,0x78,0x1e,0x78,0xe0,0x01,0x00,0x00, 0x1e,0x78,0xfc,0x03,0x00,0x00,0xf0,0x03,0xfc,0x03,0xfc,0x0f,0x0f,0x3c,0xf0, 0x00,0x0f,0x00,0xfc,0x03,0x1e,0x78,0x1e,0x78,0xe0,0x01,0x00,0x00,0x1e,0x78, 0x3c,0x03,0x00,0x00,0x00,0x0f,0x3c,0x03,0x3c,0x0e,0x0f,0x3c,0xf0,0x00,0x0f, 0x00,0x3c,0x03,0x1e,0x78,0x1e,0x78,0xe0,0x01,0x00,0x00,0x1e,0x78,0x3c,0x00, 0x00,0x00,0x0f,0x3c,0x3c,0x30,0x3c,0x1c,0x1c,0x0e,0xf0,0x00,0x0f,0x30,0x3c, 0x30,0x78,0x1e,0xfe,0x7f,0xe0,0x01,0x00,0x00,0x78,0x1e,0x3c,0x00,0x00,0x00, 0x0f,0x3c,0x3c,0x3c,0x3c,0x3c,0xf0,0x07,0xf0,0x00,0x3c,0x3c,0x3c,0x3c,0xe0, 0x07,0xf8,0x1f,0xf8,0x07,0x00,0x00,0xe0,0x07,0xff,0x00,0x00,0x00,0xfc,0x0f, 0xff,0x3f,0x3f,0x3c,0xc0,0x00,0xfc,0x03,0xf0,0x0f,0xff,0x3f,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0xe0,0x1f,0xc0,0x00,0xff,0x00,0xff,0x00,0x00,0x00,0xc0,0x00,0xff,0x3f,0xff, 0x3f,0xfe,0x3f,0x0f,0x3c,0xff,0x03,0xc0,0x00,0x0f,0x3c,0xff,0x3f,0x78,0x78, 0xf0,0x03,0x3c,0x00,0x3c,0x00,0x00,0x00,0xf0,0x03,0xf1,0x30,0xf1,0x30,0x7c, 0x3c,0x3f,0x3c,0x3c,0x0f,0xf0,0x03,0x3f,0x3c,0xf1,0x30,0x1e,0x60,0x3c,0x0f, 0x3c,0x00,0x3c,0x00,0x00,0x00,0x3c,0x0f,0xf0,0x00,0xf0,0x00,0x3c,0x30,0xff, 0x3c,0x3c,0x3c,0x3c,0x0f,0xff,0x3c,0xf0,0x00,0x1e,0x00,0x0f,0x3c,0x3c,0x00, 0x3c,0x00,0x00,0x00,0x0f,0x3c,0xf0,0x00,0xf0,0x00,0x3c,0x03,0xff,0x3f,0x3c, 0x3c,0x0f,0x3c,0xff,0x3f,0xf0,0x00,0x1e,0x00,0x0f,0x3c,0x3c,0x00,0x3c,0x00, 0x00,0x00,0x0f,0x3c,0xf0,0x00,0xf0,0x00,0xfc,0x03,0xcf,0x3f,0x3c,0x3c,0x0f, 0x3c,0xcf,0x3f,0xf0,0x00,0x1e,0x00,0xff,0x3f,0x3c,0x00,0x3c,0x00,0x00,0x00, 0xff,0x3f,0xf0,0x00,0xf0,0x00,0x3c,0x03,0x0f,0x3f,0x3c,0x3c,0xff,0x3f,0x0f, 0x3f,0xf0,0x00,0x1e,0x60,0x0f,0x3c,0x3c,0x30,0x3c,0x30,0x00,0x00,0x0f,0x3c, 0xf0,0x00,0xf0,0x00,0x3c,0x30,0x0f,0x3c,0x3c,0x3c,0x0f,0x3c,0x0f,0x3c,0xf0, 0x00,0x78,0x78,0x0f,0x3c,0x3c,0x3c,0x3c,0x3c,0x00,0x00,0x0f,0x3c,0xf0,0x00, 0xf0,0x00,0x3c,0x3c,0x0f,0x3c,0x3c,0x0f,0x0f,0x3c,0x0f,0x3c,0xf0,0x00,0xe0, 0x1f,0x0f,0x3c,0xff,0x3f,0xff,0x3f,0x00,0x00,0x0f,0x3c,0xfc,0x03,0xfc,0x03, 0xfe,0x3f,0x0f,0x3c,0xff,0x03,0x0f,0x3c,0x0f,0x3c,0xfc,0x03,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}; xscreensaver-5.36/hacks/images/bob.xbm000644 000767 000024 00000006130 06461546340 017756 0ustar00jwzstaff000000 000000 #define bob_width 61 #define bob_height 75 static unsigned char bob_bits[] = { 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xe0,0xff,0xff,0x07,0x00, 0x00,0x00,0x00,0xfe,0xff,0xff,0x1f,0x00,0x00,0x00,0x80,0xff,0xff,0xff,0xfb, 0x00,0x00,0x00,0xc0,0xff,0xcf,0x9f,0xd1,0x03,0x00,0x00,0xf0,0x7f,0x8c,0x33, 0x91,0x07,0x00,0x00,0xf8,0xa7,0x18,0x27,0xb1,0x06,0x00,0x00,0xfc,0x47,0x31, 0x4e,0xa6,0x0e,0x00,0x00,0xfe,0x4f,0x21,0x4c,0xae,0x3d,0x00,0x00,0xff,0xdf, 0x23,0x8d,0xbe,0x7d,0x00,0x80,0xff,0xff,0x67,0xbd,0xfe,0xff,0x01,0x80,0xff, 0xff,0x7f,0xbf,0xff,0xff,0x03,0xc0,0xff,0xff,0xff,0xbf,0xff,0xf8,0x07,0xc0, 0xff,0xff,0xff,0xbf,0x3f,0xf8,0x07,0xc0,0xff,0xff,0xff,0xff,0x07,0xf8,0x0f, 0xc0,0xff,0xff,0xff,0x3f,0x00,0xf8,0x0f,0xe0,0x7f,0x00,0xf8,0x07,0x00,0xf0, 0x0f,0xe0,0x3f,0x00,0x00,0x00,0x00,0xf0,0x07,0xe0,0x3f,0x00,0x00,0x00,0x00, 0xf0,0x07,0xe0,0x3f,0x00,0x00,0x00,0x00,0xf4,0x07,0xe0,0x3f,0x00,0x00,0x00, 0x00,0xe4,0x07,0xe0,0x3f,0x00,0x00,0x00,0x00,0xe4,0x07,0xe0,0x3f,0x00,0x00, 0x00,0x00,0xe6,0x07,0xe0,0x3f,0x00,0x00,0x00,0x00,0xe7,0x07,0xe0,0x3f,0x00, 0x00,0x00,0x00,0xe6,0x07,0xe0,0x3f,0x00,0x00,0x00,0x00,0xe6,0x07,0xe0,0x3f, 0x00,0x00,0x00,0x00,0xe6,0x07,0xc0,0x3f,0x00,0x00,0x00,0x78,0xf6,0x07,0xa0, 0xbf,0xff,0x00,0x00,0xff,0xf7,0x07,0x70,0x9f,0xff,0x01,0x80,0xff,0xef,0x07, 0xf0,0x1c,0x80,0x03,0xe0,0x01,0xef,0x07,0xf0,0x1f,0xbe,0x07,0xf0,0x3f,0xee, 0x07,0xe0,0x9d,0x83,0x1f,0xf8,0xe1,0xdc,0x07,0xe0,0xc1,0x7f,0x1f,0xfc,0xff, 0xc8,0x07,0xe0,0xc1,0x69,0x1e,0x7e,0xca,0xc0,0x03,0xe0,0x81,0xb8,0x1f,0xc0, 0x0e,0xc0,0x03,0xe0,0x01,0xc0,0x1b,0xc0,0xcf,0xc1,0x03,0xc0,0x03,0xf7,0x11, 0x00,0x7f,0xc0,0x03,0xc0,0x03,0x7c,0x18,0x00,0x1c,0xc0,0x02,0xc0,0x02,0x30, 0x08,0x00,0x00,0x40,0x03,0x40,0x03,0x00,0x08,0x00,0x00,0x40,0x02,0x40,0x13, 0x00,0x0c,0x00,0x00,0x60,0x02,0x40,0x12,0x00,0x0e,0x00,0x00,0xc0,0x03,0x80, 0x33,0x80,0x0e,0x00,0x00,0xa8,0x01,0x00,0x33,0x40,0x0f,0xa0,0x03,0x2c,0x00, 0x00,0x74,0x30,0x0f,0x38,0x07,0x2e,0x00,0x00,0x74,0x98,0x1f,0x1e,0x1e,0x2f, 0x00,0x00,0xfc,0x8f,0xff,0x0f,0xfc,0x2f,0x00,0x00,0xf8,0xe3,0xff,0x03,0xf8, 0x2f,0x00,0x00,0xf8,0xfd,0xff,0x81,0xff,0x3f,0x00,0x00,0xb8,0xf9,0x1f,0xf8, 0x0f,0x1e,0x00,0x00,0x30,0xf1,0xf0,0x0f,0x03,0x0e,0x00,0x00,0x30,0xf1,0x01, 0x80,0x01,0x0f,0x00,0x00,0x20,0xf1,0xf7,0xff,0x00,0x07,0x00,0x00,0x60,0xe3, 0x01,0x60,0x80,0x07,0x00,0x00,0x60,0xc3,0xef,0x3f,0x80,0x03,0x00,0x00,0x40, 0xc2,0xff,0x0f,0xc0,0x03,0x00,0x00,0xc0,0xe6,0x1f,0x00,0xc0,0x01,0x00,0x00, 0x80,0xf4,0xfe,0x3f,0xe0,0x00,0x00,0x00,0x80,0x79,0xfe,0x1f,0xe0,0x00,0x00, 0xc0,0x01,0x3d,0x3e,0x00,0x70,0x00,0x00,0x30,0x06,0x3e,0x0f,0x00,0x38,0x00, 0x00,0xc8,0x8c,0x1f,0x07,0x00,0x38,0x00,0x00,0xf4,0xcc,0x8f,0x07,0x00,0x1c, 0x00,0x00,0x72,0xee,0xf7,0x07,0x00,0x0e,0x00,0x00,0x02,0xff,0xe3,0x07,0x00, 0x07,0x00,0x00,0x32,0xfe,0xc1,0xff,0x8f,0x03,0x00,0x00,0x3e,0xfe,0x80,0xff, 0xff,0x01,0x00,0x00,0x7e,0x7c,0x00,0x00,0x7e,0x00,0x00,0x00,0x7c,0x3c,0x00, 0x00,0x00,0x00,0x00,0x00,0xfc,0x1c,0x00,0x00,0x00,0x00,0x00,0x00,0xf8,0x1c, 0x00,0x00,0x00,0x00,0x00,0x00,0xf0,0x0f,0x00,0x00,0x00,0x00,0x00,0x00,0xe0, 0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}; xscreensaver-5.36/hacks/images/mac.xbm000644 000767 000024 00000001562 10611040023 017733 0ustar00jwzstaff000000 000000 #define mac_width 25 #define mac_height 32 static unsigned char mac_bits[] = { 0x00, 0x00, 0x00, 0x00, 0xFC, 0xFF, 0x7F, 0x00, 0xFE, 0xFF, 0xFF, 0x00, 0x0E, 0x00, 0xE0, 0x00, 0xF6, 0xFF, 0xDF, 0x00, 0xF6, 0xFF, 0xDF, 0x00, 0x76, 0x7D, 0xDD, 0x00, 0xF6, 0xFE, 0xDE, 0x00, 0x76, 0x7D, 0xDD, 0x00, 0xF6, 0xFF, 0xDF, 0x00, 0xF6, 0xDB, 0xDF, 0x00, 0xF6, 0xE7, 0xDF, 0x00, 0xF6, 0xFF, 0xDF, 0x00, 0xF6, 0x83, 0xDF, 0x00, 0xF6, 0x7D, 0xDE, 0x00, 0xF6, 0xFF, 0xDD, 0x00, 0xF6, 0xFF, 0xDF, 0x00, 0x0E, 0x00, 0xE0, 0x00, 0xFE, 0xFF, 0xFF, 0x00, 0xFE, 0xFF, 0xFF, 0x00, 0xFE, 0xFF, 0xFF, 0x00, 0xFE, 0xFF, 0xFF, 0x00, 0xC6, 0x3F, 0xE0, 0x00, 0xFE, 0xFF, 0xFF, 0x00, 0xFE, 0xFF, 0xFF, 0x00, 0xFE, 0xFF, 0xFF, 0x00, 0xFE, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFC, 0xFF, 0x7F, 0x00, 0xFC, 0xFF, 0x7F, 0x00, 0xFC, 0xFF, 0x7F, 0x00, 0x00, 0x00, 0x00, 0x00, }; xscreensaver-5.36/hacks/images/macbomb.xbm000644 000767 000024 00000106734 07707352041 020624 0ustar00jwzstaff000000 000000 #define macbomb_width 448 #define macbomb_height 126 static unsigned char macbomb_bits[] = { 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x01,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x80,0xf9,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x9f,0xf9, 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x9f,0x19,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x98,0x19,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x98,0x19,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x98,0x19,0x00, 0x00,0x00,0x40,0x40,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x98,0x19,0x00,0x00,0x00,0x00,0x20, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x98,0x19,0x00,0x00,0x00,0x80,0x10,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x98,0x19,0x00,0x00,0x00,0x04,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x98,0x19,0x00,0x00, 0x00,0x10,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x98,0x19,0x00,0x00,0x00,0x40,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x98,0x19,0x00,0x00,0xe0,0x03,0x50,0x01,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x98, 0x19,0x00,0x00,0x10,0x8c,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x98,0x19,0x00,0x00,0x08, 0x70,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x98,0x19,0x00,0x00,0x08,0x00,0x10,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x98,0x19,0x00,0x00,0x08,0x40,0x22,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x98,0x19, 0x00,0x00,0x7f,0x20,0x40,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x98,0x19,0x00,0x00,0x7f,0x10, 0x82,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x98,0x19,0x00,0x00,0x7f,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x98,0x19,0x00,0xc0,0xff,0x01,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x98,0x19,0x00, 0xf0,0xff,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x98,0x19,0x00,0xf0,0xff,0x07,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x98,0x19,0x00,0xf8,0xff,0x0f,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x98,0x19,0x00,0xf8,0xff,0x0f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x98,0x19,0x00,0xfc, 0xff,0x1e,0x00,0x00,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x60,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0xc0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x98,0x19,0x00,0xfc,0xff,0x1f,0x00,0x00, 0x00,0x00,0x80,0x09,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x60,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc0,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x98,0x19,0x00,0xfc,0xff,0x1d,0x00,0x00,0x00,0x00,0x80,0x81, 0xc7,0xb6,0xcd,0x00,0x78,0x80,0x63,0xc6,0xf1,0x78,0xfc,0x07,0x78,0x6c,0x9b, 0xc7,0x06,0x1e,0x0e,0xc7,0xcc,0xb6,0x79,0xf8,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x98, 0x19,0x00,0xfc,0xff,0x1d,0x00,0x00,0x00,0x00,0x80,0xc3,0xcc,0x71,0xcc,0x00, 0xc4,0xc0,0x64,0x66,0x62,0xcc,0xcc,0x0c,0xcc,0x1c,0xc7,0xcc,0x01,0x33,0x93, 0xc9,0xcc,0x71,0xcc,0xcc,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x98,0x19,0x00,0xfc,0xff, 0x1d,0x00,0x00,0x00,0x00,0x00,0xc7,0xcc,0x30,0xcc,0x00,0xf8,0xc0,0x61,0xe6, 0x60,0xcc,0xcc,0x0c,0xcc,0x0c,0xc3,0xcc,0x00,0x33,0x83,0xc1,0xcc,0x30,0xcc, 0xcc,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x98,0x19,0x00,0xfc,0xff,0x1f,0x00,0x00,0x00, 0x00,0x00,0xce,0xcc,0x30,0xcc,0x00,0xcc,0x80,0x63,0xc6,0x61,0xfc,0xcc,0x0c, 0xfc,0x0c,0xc3,0xcc,0x00,0x33,0x83,0xc1,0xcc,0x30,0xfc,0xcc,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x98,0x19,0x00,0xfc,0xff,0x1e,0x00,0x00,0x00,0x00,0x00,0xcc,0xcc, 0x30,0xcc,0x00,0xcc,0x00,0x67,0x86,0x63,0x0c,0xcc,0x0c,0x0c,0x0c,0xc3,0xcc, 0x00,0x33,0x83,0xc1,0xcc,0x30,0x0c,0xcc,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x98,0x19, 0x00,0xf8,0xff,0x0f,0x00,0x00,0x00,0x00,0x80,0xcc,0xcc,0x30,0xcc,0x0c,0xcc, 0x40,0x66,0x26,0x63,0x8c,0xcc,0x0c,0x8c,0x0c,0xc3,0xcc,0x00,0x33,0x93,0xc9, 0xcc,0x30,0x8c,0xcc,0x0c,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x98,0x19,0x00,0xf8,0xbf,0x0f, 0x00,0x00,0x00,0x00,0x00,0x87,0xc7,0x30,0xf8,0x0c,0xf8,0x80,0xc3,0xc7,0xc1, 0x78,0xcc,0x0c,0x78,0x0c,0x83,0xc7,0x00,0x1e,0x0e,0x87,0xcf,0x30,0x78,0xf8, 0x0c,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x98,0x19,0x00,0xf0,0xff,0x07,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0xc0,0x08,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x98,0x19,0x00,0xf0,0xff,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0xc4,0x04,0x00,0x00,0x20,0x06,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x98,0x19,0x00, 0xc0,0xff,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x78,0x00,0x00,0x00, 0xc0,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x98,0x19,0x00,0x00,0x7f,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x98,0x19,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x98,0x19,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x98,0x19,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x98,0x19,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x98,0x19,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x98, 0x19,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x98,0x19,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x98,0x19,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x98,0x19,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x98,0x19, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x98,0x19,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x98,0x19,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x98,0x19,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x98,0x19,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x98,0x19,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x98,0x19,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x98,0x19,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x98,0x19,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x98,0x19,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x98,0x19,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x98, 0x19,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x98,0x19,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x98,0x19,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc0,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x98,0x19,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0xc0,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x98,0x19, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0xc0,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x98,0x19,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc0,0x07,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x98,0x19,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc0,0x0f,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x98,0x19,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0xc0,0x1f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x98,0x19,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc0, 0x3f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x98,0x19,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc0,0x07,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x98,0x19,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0xc0,0x06,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x98,0x19,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x40,0x0c,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x98,0x19,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0c, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x98,0x19,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x98,0x19,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x98, 0x19,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x98,0x19,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x98,0x19,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x98,0x19,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x98,0x19, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x98,0x19,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x98,0x19,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x98,0x19,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x98,0x19,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x98,0x19,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x98,0x19,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x98,0x19,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x98,0x19,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x98,0x19,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x98,0x19,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x98, 0x19,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x98,0x19,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x8c,0x0f,0x00,0x00,0x8f, 0x1f,0x00,0x00,0x00,0x00,0x00,0x98,0x19,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x8c,0x19,0x00,0x80,0x19,0x0c,0x00,0x00,0x00, 0x00,0x00,0x98,0x19,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x8c,0x19,0x00,0x80,0x19,0x06,0x00,0x00,0x00,0x00,0x00,0x98,0x19, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x8c,0x19, 0xf8,0x81,0x19,0x0f,0x00,0x00,0x00,0x00,0x00,0x98,0x19,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x8c,0x19,0x00,0x80,0x19,0x18, 0x00,0x00,0x00,0x00,0x00,0x98,0x19,0x00,0x00,0xf8,0xff,0xff,0xff,0xff,0xff, 0x0f,0x00,0x00,0xc0,0xff,0xff,0xff,0xff,0xff,0xff,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x8c,0x19,0xf8,0x81,0x19,0x18,0x00,0x00,0x00,0x00, 0x00,0x98,0x19,0x00,0x00,0x06,0x00,0x00,0x00,0x00,0x00,0x30,0x00,0x00,0x30, 0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x8c,0x19,0x00,0x80,0x19,0x18,0x00,0x00,0x00,0x00,0x00,0x98,0x19,0x00, 0x00,0x03,0x00,0x00,0x00,0x00,0x00,0x60,0x00,0x00,0x18,0x00,0x00,0x00,0x00, 0x00,0x00,0x06,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x8c,0x19,0x00, 0x80,0x99,0x18,0x00,0x00,0x00,0x00,0x00,0x98,0x19,0x00,0x80,0x01,0x00,0x00, 0x00,0x00,0x00,0xc0,0x00,0x00,0x0c,0x00,0x00,0x00,0x00,0x00,0x00,0x0c,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x8c,0x0f,0x00,0x00,0x0f,0x0f,0x00, 0x00,0x00,0x00,0x00,0x98,0x19,0x00,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x80, 0x00,0x00,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x98,0x19,0x00,0x40,0xf8,0x00,0x00,0x18,0x00,0x80,0x01,0x01,0x00,0x42,0x01, 0x00,0x00,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x98,0x19,0x00,0x40, 0x98,0x01,0x00,0x18,0x00,0x80,0x01,0x01,0x00,0x22,0x02,0x00,0x00,0x00,0x00, 0x00,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x98,0x19,0x00,0x40,0x98,0xf1,0x70,0x3c, 0x1e,0xdb,0x03,0x01,0x00,0x42,0x44,0x41,0x11,0x51,0x15,0x14,0x10,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x98,0x19,0x00,0x40,0x98,0x99,0x99,0x18,0x31,0x87,0x01,0x01, 0x00,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x10,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x98, 0x19,0x00,0x40,0xf8,0x98,0x39,0x18,0x3e,0x83,0x01,0x01,0x00,0x42,0x41,0x44, 0x10,0x11,0x11,0x11,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x98,0x19,0x00,0x40,0x98, 0xf9,0x71,0x18,0x33,0x83,0x01,0x01,0x00,0x22,0xa2,0x82,0x20,0x22,0x22,0x2a, 0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x98,0x19,0x00,0x40,0x98,0x19,0xe0,0x18,0x33, 0x83,0x01,0x01,0x00,0x42,0x44,0x00,0x11,0x11,0x11,0x01,0x10,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x98,0x19,0x00,0x40,0x98,0x19,0xc9,0x18,0x33,0x83,0x01,0x01,0x00, 0x22,0x22,0x20,0x22,0x22,0x22,0x22,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x98,0x19, 0x00,0x40,0x98,0xf1,0x70,0x30,0x3e,0x03,0x03,0x01,0x00,0x42,0x44,0x41,0x41, 0x11,0x11,0x14,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x98,0x19,0x00,0x40,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x10, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x98,0x19,0x00,0x80,0x00,0x00,0x00,0x00,0x00,0x00, 0x80,0x00,0x00,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x98,0x19,0x00,0x80,0x01,0x00,0x00,0x00,0x00,0x00,0xc0,0x00,0x00,0x0c, 0x00,0x00,0x00,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x98,0x19,0x00, 0x00,0x03,0x00,0x00,0x00,0x00,0x00,0x60,0x00,0x00,0x18,0x00,0x00,0x00,0x00, 0x00,0x00,0x06,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x98,0x19,0x00,0x00,0x06,0x00,0x00, 0x00,0x00,0x00,0x30,0x00,0x00,0x30,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x98,0x19,0x00,0x00,0xf8,0xff,0xff,0xff,0xff,0xff,0x0f, 0x00,0x00,0xc0,0xff,0xff,0xff,0xff,0xff,0xff,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x98,0x19,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x98,0x19,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x98,0x19,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x98,0x19,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x98, 0x19,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x98,0xf9,0xff,0xff,0xff, 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, 0xff,0xff,0xff,0xff,0xff,0xff,0x9f,0xf9,0xff,0xff,0xff,0xff,0xff,0xff,0xff, 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, 0xff,0xff,0x9f,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x01, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xff,0xff,0xff,0xff,0xff, 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, 0xff,0xff,0xff,0xff,0xff,0xff}; xscreensaver-5.36/hacks/images/matrix1.xbm000644 000767 000024 00000270212 10046031372 020571 0ustar00jwzstaff000000 000000 #define matrix1_width 320 #define matrix1_height 377 static unsigned char matrix1_bits[] = { 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf3, 0xff, 0x9f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x5f, 0xfd, 0xff, 0xf7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xe7, 0xff, 0xb7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf5, 0xff, 0xff, 0xff, 0x1f, 0xff, 0xff, 0xde, 0xff, 0xb7, 0xf6, 0x7f, 0xe9, 0xff, 0xb7, 0xff, 0xff, 0xff, 0xff, 0xbf, 0xff, 0xff, 0xf9, 0xff, 0x9f, 0xff, 0xff, 0xf1, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf9, 0xff, 0xff, 0xff, 0x5f, 0xfe, 0xdf, 0xfb, 0xff, 0xdf, 0xfd, 0xff, 0xd1, 0xff, 0xef, 0xff, 0xff, 0xff, 0xff, 0x7f, 0xff, 0xff, 0xeb, 0xff, 0xbf, 0xfe, 0xff, 0xf3, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf1, 0xff, 0xff, 0xff, 0x17, 0xff, 0x7f, 0xad, 0xff, 0x37, 0xed, 0xbf, 0xea, 0xff, 0xdb, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xfe, 0x7f, 0xfb, 0xff, 0xdf, 0xff, 0xff, 0xf4, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf5, 0xff, 0xff, 0xff, 0x3f, 0xfd, 0x7f, 0x8d, 0xff, 0x6f, 0xfd, 0xdf, 0x4a, 0x7f, 0x57, 0xff, 0xff, 0xe0, 0xff, 0x1f, 0xff, 0xff, 0xf6, 0xff, 0x5f, 0xfd, 0xdf, 0xa1, 0xff, 0x1f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf6, 0xff, 0xff, 0xff, 0x87, 0xfe, 0x6f, 0xd6, 0xff, 0xb7, 0xf5, 0xaf, 0xcd, 0xff, 0xdd, 0xff, 0x7f, 0xd9, 0xff, 0x97, 0xfe, 0x7f, 0xfb, 0xff, 0x7f, 0xff, 0x7f, 0xf5, 0xfe, 0x5f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xbf, 0xfd, 0xff, 0xff, 0xff, 0x5f, 0xfe, 0x6f, 0x4e, 0xff, 0x2d, 0xec, 0x6f, 0x7b, 0xff, 0xb5, 0xfe, 0x6f, 0xf7, 0xff, 0xff, 0xff, 0xff, 0xf6, 0xff, 0x7f, 0xfd, 0x6f, 0xc1, 0xff, 0x1f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0xfa, 0xff, 0xff, 0xff, 0x0f, 0xff, 0x7f, 0xca, 0xff, 0x4b, 0xf5, 0xdf, 0xed, 0xff, 0xd7, 0xfe, 0xff, 0xde, 0xff, 0x57, 0xff, 0x7f, 0xfc, 0xff, 0x5f, 0xfc, 0xbf, 0x54, 0xff, 0x5f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0xff, 0xff, 0xff, 0xff, 0x3f, 0xfd, 0xef, 0xde, 0xff, 0x5b, 0xe8, 0x5f, 0x5f, 0xff, 0xbe, 0xff, 0xdf, 0xfa, 0xff, 0xef, 0xff, 0xff, 0xfc, 0xff, 0x7f, 0xfd, 0x7f, 0xc2, 0xff, 0x1f, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0xfc, 0xff, 0xff, 0xff, 0x17, 0xff, 0xbf, 0xeb, 0xff, 0xa6, 0xf6, 0x57, 0xf4, 0xff, 0x6b, 0xfd, 0x7f, 0xee, 0xff, 0xff, 0xff, 0x3f, 0xfd, 0xff, 0x7f, 0xfc, 0xff, 0xb9, 0xff, 0x5b, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xef, 0xff, 0xff, 0xff, 0xff, 0x3f, 0xfd, 0x7f, 0xdf, 0xff, 0xa7, 0xd4, 0x7f, 0xd5, 0xff, 0xab, 0xfd, 0x6f, 0xfe, 0xff, 0xf7, 0xff, 0x7f, 0xf8, 0xff, 0x7f, 0xf9, 0xbf, 0xf1, 0xff, 0x1f, 0xfb, 0xff, 0xff, 0xff, 0xdf, 0xfd, 0xff, 0xff, 0xff, 0xaf, 0xfe, 0xff, 0xff, 0xff, 0x4f, 0xff, 0xff, 0xff, 0xff, 0xf5, 0xfc, 0xdf, 0x4d, 0xff, 0x6f, 0xff, 0x7f, 0xa9, 0xff, 0xff, 0xff, 0x7f, 0xfd, 0xff, 0x7f, 0xfe, 0x7f, 0x4e, 0xff, 0x20, 0xe0, 0xff, 0xff, 0xff, 0x00, 0xe2, 0xff, 0xff, 0xff, 0xdf, 0xff, 0xff, 0xff, 0xff, 0x1f, 0xff, 0xff, 0xff, 0xff, 0xc7, 0xfc, 0x7f, 0xcb, 0xfe, 0x57, 0xfd, 0x7f, 0x7a, 0xff, 0xff, 0xff, 0xff, 0xfc, 0xff, 0x7f, 0xfc, 0xff, 0xcc, 0xff, 0x22, 0xe5, 0xff, 0xff, 0xff, 0x48, 0xe0, 0xff, 0xff, 0xff, 0xaf, 0xfe, 0xff, 0xff, 0xff, 0x5f, 0xff, 0xff, 0xff, 0xff, 0xe5, 0xf4, 0xff, 0x4d, 0xff, 0xad, 0xf7, 0x6f, 0xd5, 0xff, 0xff, 0xff, 0x7f, 0xfa, 0xff, 0x7f, 0xfd, 0x6f, 0xce, 0xff, 0x88, 0xe0, 0xff, 0xff, 0xff, 0x12, 0xe5, 0xff, 0xff, 0xff, 0xdb, 0xff, 0xff, 0xff, 0xff, 0x1f, 0xfe, 0xff, 0xff, 0xff, 0x89, 0xec, 0xaf, 0x7d, 0xfd, 0x6d, 0xfd, 0x5f, 0x89, 0xfe, 0xff, 0xff, 0x7f, 0xfc, 0xff, 0x7f, 0xf8, 0xff, 0x7d, 0xff, 0x3f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xb7, 0xff, 0xff, 0xff, 0xff, 0x5f, 0xff, 0xff, 0xff, 0xbf, 0x00, 0xf4, 0x7f, 0x57, 0xff, 0x57, 0xfb, 0xff, 0x62, 0xff, 0xff, 0xff, 0xff, 0xfb, 0xff, 0xdf, 0xff, 0x7f, 0xef, 0xff, 0x97, 0xff, 0xff, 0xf7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x5f, 0xcc, 0xfe, 0xaf, 0xf6, 0xaf, 0xce, 0xfe, 0xff, 0xff, 0x7f, 0xf5, 0xff, 0x7f, 0xfd, 0xff, 0xff, 0xff, 0x1f, 0xfe, 0xff, 0xfd, 0xff, 0xff, 0xff, 0xff, 0xfb, 0xff, 0xf7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x55, 0xfd, 0x6f, 0xab, 0xff, 0xbf, 0xfd, 0xaf, 0xcb, 0xff, 0xff, 0xff, 0xff, 0xf7, 0xff, 0xdf, 0xfe, 0xff, 0xff, 0xff, 0x5f, 0xff, 0xff, 0xeb, 0xff, 0xf7, 0xff, 0xff, 0xef, 0xff, 0xd9, 0xff, 0xff, 0xff, 0xff, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xa7, 0xfa, 0x6f, 0x61, 0xff, 0xef, 0xf5, 0xbf, 0x8e, 0xfe, 0xff, 0xff, 0x7f, 0xf5, 0xff, 0xbf, 0xfd, 0xff, 0xff, 0xff, 0x1f, 0xff, 0x7f, 0xf3, 0xff, 0xff, 0xff, 0xff, 0xfb, 0xff, 0xf3, 0xff, 0xff, 0xff, 0xff, 0x1f, 0xff, 0xff, 0xff, 0xff, 0xdd, 0xff, 0xbf, 0xf5, 0xff, 0xaf, 0xfe, 0x57, 0x30, 0xff, 0xff, 0xff, 0xff, 0xef, 0xff, 0xd7, 0xff, 0xff, 0xff, 0xff, 0x5f, 0xff, 0xff, 0xe9, 0xff, 0xff, 0xff, 0xff, 0xe2, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0x5f, 0xff, 0xff, 0xff, 0xff, 0xab, 0xfa, 0xff, 0xe5, 0xff, 0xbf, 0xf5, 0xff, 0x32, 0xfc, 0xff, 0xff, 0xff, 0xd3, 0xff, 0x9f, 0xfe, 0xff, 0xff, 0xff, 0x5f, 0xfe, 0x7f, 0xfd, 0xff, 0xff, 0xff, 0xff, 0xe7, 0xff, 0xea, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x57, 0xff, 0xff, 0xfd, 0xff, 0xff, 0xff, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfa, 0xff, 0x9f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfb, 0xff, 0xff, 0xff, 0xff, 0xfd, 0xff, 0xf6, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xde, 0xfe, 0xff, 0xf5, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xb3, 0xff, 0xbb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf6, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x6b, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfd, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xbb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfb, 0xff, 0xef, 0xff, 0xff, 0xdf, 0xff, 0xff, 0xfe, 0xff, 0xdf, 0xff, 0xef, 0xfe, 0xff, 0xfd, 0xff, 0xbf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xea, 0xff, 0xab, 0xff, 0x7f, 0xed, 0xff, 0xbf, 0xfe, 0xff, 0xfb, 0xff, 0x6b, 0xfb, 0xff, 0x75, 0x7f, 0xb5, 0xf5, 0xff, 0xeb, 0xff, 0x77, 0xfd, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdd, 0xff, 0x7f, 0xff, 0xff, 0x5b, 0xff, 0xb7, 0xf5, 0xff, 0x5b, 0xff, 0xdb, 0xf6, 0xff, 0x6f, 0xff, 0x6f, 0xff, 0x7f, 0x7b, 0xff, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xb7, 0xff, 0x5f, 0xca, 0xfe, 0x02, 0xff, 0x2f, 0xca, 0xff, 0xaa, 0xfc, 0xff, 0xc3, 0x7f, 0x53, 0xfb, 0xbf, 0xa0, 0x7f, 0xaa, 0xf2, 0xaf, 0xca, 0xff, 0x53, 0xf2, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x42, 0xfe, 0xff, 0xca, 0xff, 0x46, 0xfe, 0x7f, 0x96, 0xfe, 0x67, 0xe9, 0xff, 0x13, 0xff, 0x67, 0xfb, 0xff, 0xaa, 0xfe, 0xda, 0xf6, 0x7f, 0x8a, 0xfe, 0xd3, 0xf6, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x0b, 0xfc, 0x2f, 0x56, 0xff, 0x95, 0xff, 0xaf, 0xcc, 0xfe, 0x52, 0xf6, 0xff, 0xc2, 0x7f, 0x59, 0xfd, 0xff, 0xe0, 0xff, 0x56, 0xfd, 0xaf, 0xd6, 0xff, 0xab, 0xfd, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x6f, 0xff, 0xff, 0xff, 0xdf, 0xff, 0xff, 0x53, 0xf7, 0xef, 0x6f, 0xfd, 0x1f, 0xff, 0xbf, 0xbd, 0xfe, 0xff, 0xed, 0xff, 0x1f, 0xff, 0xf7, 0xfb, 0x3f, 0xbf, 0xff, 0xff, 0xea, 0xaf, 0x3e, 0x7d, 0xbb, 0xe1, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x5f, 0xfe, 0xff, 0xff, 0x47, 0xfd, 0xff, 0x77, 0xfd, 0x5f, 0x5d, 0xff, 0x57, 0xff, 0xef, 0xd7, 0xfe, 0xea, 0xea, 0xff, 0xaa, 0xff, 0x5a, 0xff, 0xaf, 0xfa, 0xff, 0x5f, 0xfb, 0xdf, 0x6b, 0xff, 0xf5, 0xf9, 0xff, 0xfd, 0xff, 0xff, 0xff, 0xff, 0x8a, 0xff, 0xed, 0xfe, 0x57, 0xf7, 0x7f, 0xdd, 0xea, 0xaf, 0xff, 0xfe, 0x1f, 0xfe, 0xdf, 0xdf, 0xfe, 0xff, 0xec, 0xff, 0x9c, 0xff, 0x43, 0xf4, 0x3f, 0x6b, 0xff, 0xff, 0xfa, 0xbf, 0xae, 0xfe, 0xb7, 0xd3, 0xff, 0xf1, 0xff, 0x5f, 0xfc, 0xff, 0xfb, 0xfe, 0xaf, 0xeb, 0xff, 0xe8, 0xff, 0xf7, 0xfb, 0xdf, 0x56, 0xff, 0x5f, 0xff, 0xff, 0xaf, 0xff, 0xdf, 0xfa, 0xdf, 0x5a, 0xff, 0x0a, 0xff, 0x5f, 0xf5, 0xff, 0x7f, 0xff, 0xaf, 0xbb, 0x7f, 0xfd, 0xf8, 0x7f, 0xf5, 0xff, 0x7f, 0xfc, 0x5f, 0xd5, 0xff, 0xba, 0xf6, 0x5f, 0xbd, 0xff, 0xbd, 0xfa, 0xaf, 0x5f, 0xfd, 0x5f, 0xfd, 0xff, 0x7d, 0xfe, 0xff, 0xe8, 0xff, 0x9a, 0xff, 0x53, 0xea, 0x3f, 0x57, 0xff, 0x7f, 0xf5, 0xbf, 0xb6, 0xfe, 0xd3, 0xe3, 0xff, 0xe1, 0xff, 0x7f, 0xfd, 0xff, 0xed, 0xff, 0x6a, 0xed, 0xff, 0xf0, 0xff, 0xf7, 0xf5, 0xdf, 0xbe, 0xfe, 0x1f, 0xff, 0xff, 0xc7, 0xff, 0x0f, 0xfe, 0x5f, 0xad, 0xff, 0xbf, 0xf1, 0x37, 0x98, 0xff, 0x7f, 0xfe, 0x6f, 0xc8, 0xff, 0x7a, 0xf9, 0xff, 0xff, 0xff, 0xdf, 0xfe, 0x17, 0xfb, 0xff, 0xd5, 0xfa, 0xff, 0x0f, 0xfd, 0x5f, 0xfe, 0xaf, 0xff, 0xfe, 0x5f, 0xff, 0xff, 0x4f, 0xff, 0x9f, 0xd4, 0xff, 0x9d, 0xfe, 0x73, 0xf5, 0x77, 0x29, 0xfe, 0xef, 0xfe, 0x7f, 0x49, 0xfd, 0xe3, 0xe1, 0xff, 0xfa, 0xff, 0xff, 0xfd, 0x37, 0xee, 0xff, 0xad, 0xd5, 0xff, 0x36, 0xff, 0xff, 0xf4, 0xdf, 0x56, 0xff, 0x1f, 0xff, 0x7f, 0xf1, 0xff, 0xff, 0xfa, 0x1f, 0x4b, 0x7f, 0xff, 0xf1, 0x1f, 0x9f, 0xff, 0xbf, 0xfe, 0xcf, 0xb6, 0xff, 0x0f, 0xf5, 0xff, 0xff, 0xff, 0x7f, 0xff, 0xaf, 0xfd, 0x7f, 0x5b, 0xeb, 0xff, 0x97, 0xfe, 0x87, 0xff, 0xaf, 0xbf, 0xfe, 0x5f, 0xfe, 0xff, 0xd3, 0xff, 0xff, 0xe7, 0x3f, 0x5a, 0xfd, 0xff, 0xd5, 0x7f, 0x1b, 0xfd, 0xef, 0xfe, 0xbf, 0x6e, 0xfe, 0x4b, 0xd1, 0xff, 0xff, 0xff, 0xff, 0xff, 0x2f, 0xfb, 0xff, 0x76, 0xfb, 0xff, 0x97, 0xfe, 0x8f, 0xfe, 0xdf, 0x5e, 0xff, 0x9f, 0xff, 0x7f, 0xf9, 0xff, 0xdf, 0xec, 0x97, 0x8d, 0xff, 0xbf, 0xf1, 0x17, 0x5f, 0xff, 0x5f, 0xff, 0xd7, 0xdb, 0xff, 0x8f, 0xf5, 0xff, 0xff, 0xff, 0xff, 0xff, 0x5b, 0xed, 0xff, 0xad, 0xd6, 0x7f, 0x2f, 0xff, 0xaf, 0xff, 0xaf, 0x7b, 0xfd, 0x1f, 0xfd, 0x7f, 0xd6, 0xff, 0xfb, 0xdb, 0x5f, 0x3b, 0xfd, 0xfd, 0xf3, 0x7f, 0x1a, 0xff, 0xdf, 0xfa, 0x2f, 0x3f, 0xfd, 0xff, 0xf2, 0xff, 0xff, 0xff, 0xff, 0xff, 0xbf, 0xa9, 0xff, 0x55, 0xf5, 0xff, 0xf0, 0xfe, 0x6f, 0xff, 0xdf, 0xae, 0xfe, 0x5f, 0xff, 0x6f, 0xfa, 0xff, 0xbe, 0xea, 0xbf, 0x8a, 0x7f, 0x7f, 0xe9, 0x9f, 0x5f, 0xfd, 0x6f, 0xff, 0xdf, 0xaa, 0xfe, 0x5d, 0xf5, 0xff, 0xf7, 0xff, 0xff, 0xff, 0xff, 0xf4, 0xff, 0x76, 0xdb, 0x5f, 0xd9, 0xff, 0xdf, 0xff, 0x5f, 0xff, 0xfe, 0x1b, 0xfd, 0x7f, 0xb6, 0xff, 0xf5, 0xef, 0xff, 0x2a, 0xfd, 0xea, 0xf3, 0x3f, 0x1b, 0xff, 0x5f, 0xff, 0xbf, 0xef, 0xfe, 0xfb, 0xf1, 0xff, 0xfe, 0xff, 0xff, 0xfe, 0xff, 0xd4, 0xfe, 0xd6, 0xf6, 0xff, 0xf2, 0xff, 0xbf, 0xff, 0x6f, 0x4a, 0xff, 0x4e, 0xeb, 0x8f, 0xda, 0xff, 0x54, 0xf8, 0xbf, 0x9b, 0xfd, 0x33, 0xfc, 0x3f, 0x55, 0xff, 0xcf, 0xff, 0x57, 0x4a, 0xff, 0x57, 0xee, 0xff, 0xf1, 0xff, 0x5f, 0xfc, 0xff, 0x2f, 0xff, 0xff, 0xff, 0x87, 0xff, 0xff, 0xd7, 0xff, 0x7f, 0xca, 0xff, 0x1d, 0xfe, 0x2f, 0xb6, 0xfe, 0xe9, 0xea, 0xff, 0x2b, 0xff, 0x66, 0xea, 0x3f, 0x55, 0xfe, 0x9f, 0xff, 0x7f, 0xce, 0xfe, 0x5f, 0xfa, 0xff, 0xf3, 0xff, 0xff, 0xfc, 0xff, 0x2f, 0xfd, 0xff, 0xff, 0xaf, 0xfe, 0xff, 0x7f, 0xff, 0xff, 0x7d, 0xff, 0xeb, 0xf5, 0xdf, 0x6a, 0xff, 0xaf, 0xfe, 0xff, 0xb6, 0xfd, 0xdb, 0xff, 0xff, 0xed, 0xff, 0x6f, 0xff, 0xdf, 0xf5, 0x7f, 0xd5, 0xff, 0x7f, 0xfd, 0xff, 0x9f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xaf, 0xff, 0xff, 0xeb, 0xff, 0x5b, 0xed, 0xbf, 0xda, 0xfe, 0xb6, 0xfd, 0xff, 0x6f, 0xff, 0x5b, 0xfd, 0xff, 0xdb, 0xff, 0xdf, 0xff, 0x7f, 0xd5, 0xff, 0xb7, 0xfe, 0xff, 0xeb, 0xff, 0x9f, 0xfa, 0xff, 0xff, 0xff, 0xff, 0xff, 0xef, 0xff, 0xff, 0xff, 0xff, 0x7f, 0xf5, 0xff, 0xae, 0xfb, 0xeb, 0xeb, 0xff, 0x6f, 0xff, 0xff, 0xb5, 0xfd, 0xb7, 0xff, 0x7f, 0xed, 0xff, 0xff, 0xff, 0xff, 0xef, 0xff, 0xdb, 0xff, 0xff, 0xfe, 0xff, 0x9f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xaf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0xbf, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xbf, 0xff, 0xff, 0xfd, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xbf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xef, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xef, 0xff, 0xff, 0xef, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfd, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xed, 0xff, 0x7f, 0xff, 0xdf, 0xfd, 0xff, 0x7f, 0xff, 0xbf, 0xfd, 0xff, 0xbe, 0xfd, 0xbf, 0xbd, 0xff, 0xff, 0xfe, 0xbf, 0xbf, 0xff, 0xdd, 0xfe, 0xff, 0xb7, 0xff, 0xdf, 0xfb, 0xbf, 0xfd, 0xff, 0xff, 0xfb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xbf, 0xf2, 0xff, 0xd6, 0xff, 0x77, 0xeb, 0xff, 0xeb, 0xda, 0x75, 0xeb, 0xff, 0x6b, 0xfb, 0xf7, 0x76, 0xfd, 0xab, 0xdb, 0x77, 0x75, 0x7d, 0xb7, 0xfb, 0xbf, 0xdd, 0xbe, 0x7a, 0xf7, 0xef, 0xf6, 0xbf, 0xfe, 0xef, 0xd7, 0x57, 0xff, 0xd7, 0xff, 0xff, 0xd1, 0xff, 0xbf, 0xfe, 0xdf, 0xb6, 0xff, 0xaf, 0xfb, 0xd7, 0xee, 0xff, 0x6e, 0xeb, 0xd7, 0xd6, 0xff, 0x6f, 0xfb, 0xdf, 0xaf, 0xff, 0xb6, 0xf6, 0xff, 0xb5, 0xff, 0xeb, 0xed, 0xbf, 0xed, 0xff, 0xd5, 0xad, 0xbf, 0x7e, 0xfd, 0xbf, 0xfe, 0x5f, 0xf5, 0xff, 0xd5, 0xff, 0xb7, 0xed, 0xff, 0xdb, 0xee, 0xaf, 0xb5, 0xbf, 0xb5, 0xfd, 0xaf, 0xad, 0xfe, 0xdf, 0xee, 0xab, 0x7e, 0xfd, 0xeb, 0xfe, 0xbf, 0xdb, 0x7e, 0x6d, 0xbb, 0x6f, 0xfb, 0x7f, 0xfb, 0xfb, 0xd7, 0xd7, 0xff, 0xad, 0xff, 0x7f, 0x4d, 0xff, 0x0b, 0xfd, 0x2f, 0x1a, 0x7e, 0x53, 0xd1, 0x55, 0x2d, 0x7e, 0x63, 0xe1, 0x3f, 0x9a, 0x7a, 0x51, 0xd1, 0x9f, 0x2a, 0xfd, 0x8d, 0xf5, 0xbf, 0x46, 0xfd, 0xd8, 0xf4, 0x5f, 0xd4, 0xff, 0x68, 0xc3, 0x17, 0x1f, 0x7e, 0xb3, 0xf0, 0xaf, 0xcb, 0xff, 0x26, 0xff, 0x57, 0x4b, 0xff, 0x6a, 0xf5, 0xc7, 0x9a, 0xff, 0x5a, 0xf5, 0xab, 0x55, 0xfd, 0x6a, 0xf5, 0x47, 0x2f, 0x7e, 0x8b, 0xfe, 0xff, 0x6a, 0xff, 0x6a, 0xf4, 0x6f, 0xfb, 0xbf, 0xfa, 0xea, 0x45, 0x95, 0xff, 0x52, 0xf5, 0xaf, 0xce, 0xfe, 0xaf, 0xfa, 0xdf, 0x5e, 0xfd, 0xfc, 0xd5, 0xbf, 0x37, 0xfd, 0xf5, 0xe5, 0x5f, 0x5f, 0xff, 0xfa, 0xcb, 0x6f, 0xed, 0xfd, 0xaf, 0xfd, 0xff, 0xdb, 0xff, 0xda, 0xed, 0x7f, 0xfe, 0xff, 0xe0, 0xc2, 0x3f, 0x3f, 0xfd, 0xfc, 0xe1, 0xdf, 0xad, 0xff, 0x77, 0xff, 0xaf, 0x1b, 0x5f, 0xea, 0xf7, 0xcb, 0x9f, 0x7e, 0xb3, 0xf9, 0xb7, 0xfb, 0x3e, 0xec, 0xfe, 0xdf, 0x5f, 0xff, 0x8f, 0xff, 0xff, 0xb7, 0xbf, 0x35, 0xff, 0xbf, 0xfa, 0xff, 0xda, 0xe9, 0x27, 0x15, 0x3f, 0xf5, 0xf5, 0xaf, 0x4d, 0xff, 0x4f, 0xf5, 0x7f, 0x5b, 0xff, 0xfc, 0xd7, 0x5f, 0x3d, 0xff, 0xef, 0xe1, 0x6f, 0xaf, 0x7d, 0xfd, 0xcb, 0xaf, 0x3a, 0xfd, 0x9f, 0xff, 0xff, 0x6f, 0xff, 0xd5, 0xfc, 0x7f, 0xfe, 0xff, 0x70, 0xe3, 0x2f, 0x5f, 0x7f, 0xec, 0xe5, 0x5f, 0xd1, 0xff, 0xe5, 0xfc, 0x17, 0x17, 0x3f, 0xfd, 0xff, 0xeb, 0xef, 0x7a, 0x35, 0xfe, 0xbf, 0xe6, 0x7f, 0xfc, 0xfd, 0xaf, 0xad, 0xfe, 0xcb, 0xfe, 0xff, 0xeb, 0xff, 0x26, 0xff, 0x7f, 0xfb, 0xbf, 0xaa, 0xe4, 0xd7, 0x14, 0x7f, 0xfd, 0xdb, 0x6f, 0x93, 0xfe, 0xcf, 0xfc, 0x3f, 0x55, 0x7e, 0xe9, 0xff, 0xaf, 0xbf, 0xfe, 0xf7, 0xfe, 0xdf, 0xd6, 0x7f, 0xe9, 0xff, 0x5f, 0xeb, 0xfe, 0x8f, 0xff, 0xff, 0x5f, 0xff, 0x4a, 0xfd, 0x7f, 0xfe, 0xff, 0xe1, 0xc9, 0xb7, 0x3d, 0xfd, 0xfc, 0xf7, 0x5f, 0xf5, 0xff, 0xf5, 0xf5, 0x3f, 0x8d, 0x7f, 0xfc, 0xff, 0xd7, 0xdf, 0xfd, 0x02, 0xfe, 0x37, 0xe8, 0x7f, 0x7e, 0xd5, 0xaf, 0x9a, 0xfe, 0xaf, 0xff, 0xff, 0xe7, 0xff, 0x25, 0xff, 0x7f, 0xfe, 0xff, 0x1c, 0xf2, 0x6f, 0x48, 0x5f, 0x7e, 0xeb, 0xaf, 0x96, 0xfe, 0xaf, 0xed, 0x37, 0x1b, 0x7d, 0xfd, 0xff, 0x5f, 0xbf, 0xfd, 0x4b, 0xfa, 0xb7, 0xc2, 0x7f, 0xfc, 0xfb, 0xbf, 0xd6, 0xfe, 0x8f, 0xfe, 0xff, 0x6f, 0xff, 0x45, 0xfd, 0xff, 0xf4, 0xff, 0x50, 0xa3, 0xd7, 0x1a, 0x7f, 0xf4, 0xdf, 0xdf, 0xe0, 0xff, 0xea, 0xf6, 0x3f, 0x2d, 0x7f, 0xfc, 0xff, 0xeb, 0xbf, 0x7e, 0x25, 0xff, 0x1f, 0xe8, 0x5f, 0x7d, 0xd5, 0x57, 0x55, 0xff, 0xaf, 0xff, 0xef, 0xb7, 0x7f, 0x15, 0xff, 0x7f, 0xfe, 0xff, 0x1a, 0xe5, 0xd7, 0x58, 0x7d, 0xfe, 0xf5, 0xaf, 0x85, 0xfe, 0x05, 0xec, 0xef, 0xdd, 0xfa, 0xf4, 0xff, 0x57, 0xff, 0xfd, 0x6d, 0xea, 0xff, 0xe7, 0x7f, 0x74, 0xd5, 0xaf, 0x7f, 0xfd, 0x8f, 0xff, 0x5f, 0xef, 0xff, 0xf5, 0xf4, 0xff, 0xbe, 0xfe, 0xb0, 0xeb, 0xb7, 0x17, 0x7f, 0xfc, 0xd5, 0xdf, 0x7e, 0xff, 0x56, 0xf4, 0x5f, 0xbf, 0x5e, 0xfe, 0xfb, 0xef, 0xaf, 0xfe, 0xbb, 0xfe, 0xb7, 0xf6, 0x7f, 0xfd, 0xf8, 0x5f, 0xad, 0xfe, 0xaf, 0xff, 0xf5, 0xab, 0xff, 0xaa, 0xfc, 0x5f, 0xfa, 0xbf, 0x5d, 0xe3, 0x6f, 0xad, 0x7f, 0xfa, 0xeb, 0xdf, 0x4a, 0xfd, 0xe8, 0xa3, 0xbf, 0xb6, 0xfd, 0xd5, 0xd7, 0x57, 0x9d, 0xfe, 0xf5, 0xd5, 0x5f, 0xd7, 0x7f, 0xd5, 0xcb, 0xdf, 0xdd, 0xfe, 0x8f, 0xfe, 0x47, 0x6f, 0xff, 0xed, 0xeb, 0x7f, 0x36, 0xfc, 0xf8, 0xcb, 0xd7, 0x0d, 0xfe, 0xd6, 0xf5, 0x57, 0xfb, 0xbf, 0xda, 0xea, 0x6b, 0x5f, 0x7f, 0x7e, 0xed, 0xef, 0x5f, 0x7f, 0x53, 0xdb, 0xb7, 0xfd, 0xff, 0xf6, 0xf5, 0xab, 0xb7, 0xfd, 0xaf, 0xff, 0xd7, 0xe5, 0xbf, 0xb6, 0xfa, 0x7f, 0x5f, 0xff, 0x7a, 0xf3, 0x57, 0xa7, 0x7f, 0x7d, 0xf1, 0xdf, 0x56, 0xff, 0xb0, 0xe3, 0x6f, 0x7b, 0xfd, 0xe9, 0xed, 0x56, 0x1b, 0x7d, 0x7b, 0xdb, 0x77, 0xff, 0x7f, 0xbd, 0xd7, 0xbf, 0xbe, 0xfe, 0x2d, 0xfb, 0x87, 0xa7, 0xff, 0xfa, 0xd6, 0x7f, 0x3a, 0xfc, 0xe8, 0xa3, 0xef, 0x0e, 0xfd, 0xea, 0xe5, 0xbf, 0xfb, 0x7f, 0xe5, 0xa8, 0x07, 0x00, 0x7f, 0x17, 0xfa, 0x83, 0xe0, 0x7f, 0x84, 0xf0, 0x07, 0xe8, 0xff, 0x03, 0xfc, 0x87, 0x06, 0x7a, 0x83, 0xf6, 0x3f, 0xf8, 0xff, 0xe0, 0xe1, 0x07, 0x40, 0xbf, 0xfa, 0xe2, 0x03, 0x1b, 0xff, 0x13, 0xfe, 0x7f, 0xc2, 0xfe, 0xa8, 0xe1, 0x57, 0x55, 0xff, 0x4b, 0xf5, 0x17, 0x45, 0xff, 0x90, 0xd2, 0x4f, 0xf9, 0xff, 0xab, 0xea, 0x1f, 0xae, 0x7e, 0x15, 0xfc, 0x6f, 0xe9, 0x7f, 0xa5, 0xa7, 0x4f, 0x15, 0xfc, 0xe8, 0xa6, 0x4f, 0x37, 0xff, 0x46, 0xfa, 0x5f, 0xc8, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xeb, 0xff, 0xff, 0xff, 0xff, 0xbf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf7, 0xdb, 0x5f, 0xb5, 0xff, 0x7f, 0xff, 0x77, 0xfd, 0xff, 0xef, 0xf7, 0xdf, 0xfe, 0xff, 0xb7, 0xfe, 0xff, 0x6f, 0xfd, 0xed, 0xfb, 0xff, 0xfb, 0x7f, 0xfb, 0xef, 0xbf, 0xed, 0xff, 0xf7, 0xfb, 0x7f, 0x7f, 0xff, 0x7f, 0xff, 0xff, 0xff, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xfb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xbf, 0xff, 0xff, 0x7f, 0xff, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xef, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xef, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xbf, 0xfe, 0xff, 0xff, 0xff, 0xaf, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xbf, 0xfd, 0xff, 0xf7, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xff, 0x7f, 0xbb, 0xff, 0xff, 0xfe, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf7, 0xff, 0xee, 0xff, 0xd7, 0xff, 0x57, 0xff, 0xff, 0xdf, 0xff, 0xff, 0xf5, 0xff, 0xff, 0xff, 0xff, 0xaf, 0xff, 0xdf, 0xfe, 0x6f, 0xed, 0xff, 0xff, 0xf6, 0xef, 0xf7, 0xff, 0xed, 0xed, 0xbf, 0x5d, 0xfd, 0xf6, 0xed, 0xb7, 0xed, 0x7e, 0xdb, 0xde, 0xff, 0xdd, 0xfe, 0x97, 0xfe, 0xef, 0xff, 0xff, 0x3b, 0xfc, 0xff, 0xff, 0xff, 0xff, 0xff, 0x03, 0x70, 0xff, 0x26, 0xf6, 0x8b, 0xd0, 0xff, 0x02, 0xf8, 0x13, 0x08, 0x3f, 0x72, 0xf1, 0xa5, 0xae, 0xbe, 0xd8, 0xd2, 0x0f, 0x0e, 0xfd, 0xe4, 0xe0, 0x2f, 0x22, 0xff, 0xc7, 0xff, 0x5f, 0xff, 0xff, 0xaf, 0xfe, 0x7f, 0xd1, 0xff, 0xff, 0xff, 0x57, 0x62, 0xff, 0x8f, 0xfe, 0x1f, 0x55, 0xff, 0x53, 0xd1, 0x97, 0x22, 0x7d, 0xe4, 0xd3, 0x8f, 0x3e, 0xfa, 0xea, 0xa5, 0xab, 0x2c, 0xfa, 0xc8, 0xaa, 0xef, 0x24, 0xfc, 0x4f, 0xfd, 0xdf, 0xfe, 0xff, 0x2f, 0xfe, 0xff, 0xf1, 0xff, 0xff, 0xff, 0x87, 0xa8, 0xff, 0x2a, 0xfa, 0x4b, 0xf0, 0xff, 0x8b, 0xf2, 0x27, 0x88, 0x7f, 0xb9, 0xe8, 0xab, 0xaf, 0xba, 0xb8, 0xd2, 0x4f, 0x4e, 0xbd, 0xf2, 0xe0, 0x1f, 0x82, 0xfe, 0xa5, 0xff, 0xb7, 0xff, 0xff, 0xbf, 0xfe, 0xff, 0xf5, 0xff, 0xff, 0xff, 0xbf, 0x5b, 0xfd, 0xf5, 0xe3, 0x9f, 0x57, 0x7e, 0xf5, 0xf2, 0xc7, 0x3a, 0x7e, 0xf4, 0xe9, 0x8f, 0x3d, 0xfe, 0xe9, 0xe7, 0x8f, 0x3d, 0xfe, 0xa8, 0xa7, 0xff, 0x3e, 0xfd, 0xcf, 0xff, 0x3f, 0xfd, 0xff, 0x3f, 0xfc, 0xff, 0xaa, 0xff, 0xff, 0xff, 0x6f, 0xaf, 0xbe, 0xae, 0xf8, 0xa7, 0xae, 0xff, 0x56, 0xd9, 0xd7, 0x88, 0x7f, 0xfd, 0xf5, 0xaf, 0xaf, 0x7e, 0x5a, 0xb1, 0xaf, 0x56, 0xfb, 0xea, 0xf2, 0x57, 0xab, 0xfe, 0xe7, 0xff, 0xbf, 0xff, 0xff, 0xbf, 0xfe, 0xbf, 0xd5, 0xff, 0xff, 0xff, 0x5f, 0xfd, 0x7a, 0xfc, 0xd5, 0xdf, 0xbe, 0xfc, 0xfd, 0xf7, 0xc7, 0x1a, 0x7e, 0xeb, 0xe1, 0xaf, 0xbe, 0xfd, 0x18, 0xe7, 0x7f, 0x4a, 0xff, 0xdb, 0xec, 0x7f, 0xcf, 0xfe, 0x87, 0xff, 0xbf, 0xfa, 0xff, 0x7f, 0xfe, 0x7f, 0xce, 0xff, 0xff, 0xff, 0x6f, 0xaf, 0x7d, 0xfa, 0xeb, 0xaf, 0x5b, 0x3f, 0xb5, 0xfd, 0xd7, 0x58, 0xff, 0xfe, 0xf5, 0xdf, 0xbf, 0xfe, 0x5a, 0xb1, 0xaf, 0xd6, 0xff, 0x76, 0xfd, 0xaf, 0xcd, 0xff, 0xd7, 0xff, 0x7f, 0xfb, 0xff, 0x2f, 0xfd, 0x7f, 0xae, 0xff, 0xff, 0xff, 0xdf, 0x7d, 0xff, 0xf4, 0xdb, 0x3f, 0xfb, 0xfe, 0xf6, 0xeb, 0xc7, 0x39, 0xff, 0xea, 0xe5, 0xaf, 0xf6, 0xfe, 0x10, 0xe3, 0x7f, 0x8c, 0xfe, 0xef, 0xe8, 0xff, 0x9f, 0xfe, 0xc7, 0xff, 0xff, 0xf6, 0xff, 0x7f, 0xfe, 0xff, 0x4c, 0xff, 0xff, 0xff, 0x3f, 0xaf, 0x3a, 0xfd, 0xd6, 0xd7, 0x86, 0xff, 0x03, 0xfd, 0x7f, 0xea, 0xbf, 0xfe, 0xf9, 0xdf, 0x9f, 0xff, 0x9a, 0xea, 0xff, 0xf1, 0xff, 0x15, 0xff, 0xbf, 0xd2, 0xff, 0xd7, 0xff, 0xff, 0xfd, 0xff, 0x3f, 0xfd, 0x6f, 0xff, 0xff, 0xff, 0xff, 0xf7, 0xdd, 0x7e, 0xfc, 0xdd, 0xbf, 0xae, 0x7e, 0x2b, 0xf7, 0xff, 0x78, 0xff, 0xfa, 0xd1, 0xbf, 0x7a, 0xfd, 0x12, 0xca, 0x7f, 0xd3, 0xff, 0x17, 0xfd, 0xff, 0xed, 0xff, 0x87, 0xff, 0xff, 0xd3, 0xff, 0x7f, 0xfe, 0xff, 0xef, 0xff, 0xff, 0xff, 0x1f, 0xa2, 0x7f, 0xfd, 0xeb, 0x57, 0xd0, 0xff, 0x6f, 0xf8, 0xff, 0xfa, 0xbf, 0xee, 0xf5, 0x6f, 0xcf, 0xbf, 0xf4, 0xe2, 0xff, 0xfa, 0xff, 0x5f, 0xff, 0xff, 0xf1, 0xff, 0xd7, 0xff, 0xff, 0xe6, 0xff, 0x2f, 0xfb, 0xff, 0xff, 0xff, 0xff, 0xff, 0x3f, 0xa8, 0x7e, 0xe8, 0xdb, 0xdf, 0xb2, 0xff, 0x6d, 0xe1, 0xff, 0xf0, 0x7f, 0xfd, 0xf1, 0x7f, 0x5d, 0xff, 0xc1, 0xd4, 0xdf, 0x4a, 0xff, 0x5f, 0xfe, 0xbf, 0xb5, 0xff, 0x4f, 0xff, 0xff, 0xd7, 0xff, 0x3f, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xb7, 0x62, 0x7f, 0xbd, 0xf5, 0x2f, 0xe9, 0xfe, 0xb7, 0xfa, 0xff, 0xfa, 0xff, 0xfa, 0xd5, 0x6f, 0xd7, 0xff, 0x74, 0xe1, 0x7f, 0xf5, 0xff, 0x1f, 0xff, 0xff, 0xf2, 0xff, 0xd3, 0xff, 0xff, 0x6f, 0xff, 0xbf, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0x6f, 0xef, 0x7f, 0xb3, 0xd2, 0x6f, 0x8f, 0x7f, 0xbd, 0xd1, 0xff, 0xf4, 0xff, 0xd6, 0xf1, 0x7f, 0x5c, 0xff, 0x65, 0xed, 0x7f, 0x8e, 0xfe, 0x5f, 0xfd, 0x7f, 0x2c, 0xfd, 0xc7, 0xff, 0xff, 0xef, 0xff, 0x3f, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0x5f, 0xfd, 0xff, 0xd2, 0xf1, 0xaf, 0xd5, 0xde, 0xf6, 0xfa, 0xbf, 0xfa, 0x7f, 0x7d, 0xf5, 0x7f, 0xc7, 0x7f, 0xe3, 0xf4, 0x57, 0xed, 0xff, 0x1b, 0xff, 0x5f, 0x7b, 0xff, 0xd7, 0xff, 0xff, 0xdb, 0xff, 0xbf, 0xfa, 0xff, 0xff, 0xff, 0xff, 0xff, 0x37, 0xeb, 0xff, 0x0f, 0xef, 0x2f, 0xbf, 0x7c, 0xac, 0xe1, 0xff, 0xd0, 0xff, 0xd5, 0xf6, 0x7f, 0xf1, 0xff, 0xda, 0xd5, 0x0f, 0x1b, 0xfc, 0x57, 0xfd, 0x7f, 0x2a, 0xfa, 0x87, 0xfe, 0xff, 0xbf, 0xfe, 0x37, 0xfe, 0xff, 0xff, 0x7f, 0x55, 0xf5, 0xaf, 0xfe, 0xff, 0xa5, 0xfe, 0x8b, 0x16, 0x7f, 0x74, 0xf5, 0xbf, 0xfa, 0xff, 0x76, 0xf5, 0xff, 0xaa, 0xff, 0x6b, 0xf5, 0xaf, 0x2e, 0xff, 0x1f, 0xff, 0x57, 0xb6, 0xfe, 0xd7, 0xff, 0xff, 0x57, 0xff, 0xaf, 0xfe, 0xff, 0xff, 0xff, 0xfb, 0xef, 0x2f, 0xea, 0xff, 0x55, 0xd0, 0xaf, 0x7e, 0xfc, 0x54, 0xf1, 0xbf, 0xd2, 0xff, 0xd6, 0xf7, 0xff, 0xe1, 0xff, 0xea, 0xeb, 0x8d, 0x3a, 0xfa, 0x37, 0xf5, 0xdf, 0x2c, 0xfe, 0x47, 0xfd, 0xff, 0x1f, 0xff, 0x3f, 0xfe, 0xff, 0xff, 0x5f, 0xab, 0xfa, 0xf7, 0xfd, 0xff, 0xb3, 0xf4, 0x6f, 0x57, 0xbf, 0x6b, 0xff, 0x6f, 0xfd, 0xff, 0x2b, 0xfd, 0xff, 0xfe, 0xff, 0xef, 0xf6, 0x7f, 0xef, 0xfe, 0xab, 0xfe, 0xbf, 0xf6, 0xfe, 0xbf, 0xff, 0xff, 0x5f, 0xff, 0xd7, 0xff, 0xff, 0xff, 0x7f, 0xad, 0xca, 0x4f, 0xf5, 0x7f, 0x53, 0xd1, 0xdf, 0xfe, 0xfa, 0xde, 0xee, 0xff, 0xaa, 0xff, 0xef, 0xf6, 0xff, 0xd5, 0xff, 0xfa, 0xee, 0xcb, 0xae, 0xfe, 0xb7, 0xfd, 0xef, 0xaa, 0xfe, 0x57, 0xfd, 0xff, 0x5f, 0xfe, 0xaf, 0xfc, 0xff, 0xff, 0xff, 0xd9, 0xf6, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xfb, 0xff, 0xff, 0xff, 0xff, 0xbf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xef, 0xff, 0xff, 0xff, 0xff, 0x5f, 0xff, 0xff, 0xff, 0x5f, 0xab, 0xea, 0xff, 0xff, 0xff, 0xf7, 0xff, 0xff, 0xff, 0xff, 0xbf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf7, 0xff, 0xbf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfd, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xbf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xaf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xbb, 0xff, 0xff, 0xff, 0xff, 0xad, 0xff, 0xff, 0xff, 0xbf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf7, 0xff, 0xf7, 0xff, 0xff, 0xf6, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfa, 0xff, 0xff, 0xff, 0xcf, 0xfe, 0xff, 0xff, 0xff, 0xff, 0x67, 0xff, 0xff, 0xff, 0xff, 0x12, 0xff, 0xff, 0xff, 0xcb, 0xfe, 0xff, 0x17, 0xff, 0xff, 0xe8, 0x7f, 0xf8, 0xff, 0x5f, 0xf8, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xef, 0xff, 0xff, 0xff, 0x8f, 0xff, 0xff, 0xff, 0xff, 0xff, 0x67, 0xff, 0xff, 0xff, 0xff, 0x27, 0xff, 0xff, 0xff, 0x8f, 0xff, 0xff, 0x3f, 0xfe, 0xff, 0xd3, 0xff, 0xd2, 0xff, 0x7f, 0xe1, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0, 0xff, 0xff, 0xff, 0xbb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xff, 0xff, 0xff, 0xbf, 0xf8, 0xff, 0xff, 0xff, 0xbf, 0xff, 0xff, 0xd7, 0xff, 0xff, 0xfd, 0xff, 0xef, 0xff, 0xff, 0xf5, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xe9, 0xff, 0xff, 0xff, 0x6f, 0xfd, 0xff, 0xff, 0xff, 0xff, 0x97, 0xfe, 0xff, 0xff, 0xff, 0x55, 0xff, 0xff, 0xff, 0x57, 0xfd, 0xff, 0x5f, 0xff, 0xff, 0xd3, 0xff, 0xea, 0xff, 0xff, 0xd5, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf1, 0xff, 0xff, 0xff, 0xaf, 0xff, 0xff, 0xbf, 0xff, 0xff, 0xbe, 0xff, 0xdf, 0xff, 0xbf, 0xf8, 0xff, 0xdf, 0xff, 0x6f, 0xf7, 0xff, 0xaf, 0xff, 0xbf, 0xfd, 0xff, 0xb7, 0xff, 0x7f, 0xf1, 0xff, 0xbb, 0xfd, 0xff, 0xff, 0xff, 0xdd, 0xff, 0xff, 0xd7, 0xff, 0x57, 0xfd, 0x5f, 0xd5, 0xff, 0x77, 0xf5, 0xef, 0xaa, 0xfe, 0x7b, 0xfd, 0x6f, 0x57, 0xff, 0xbb, 0xea, 0xdf, 0xde, 0xff, 0xbf, 0xfe, 0x7f, 0xab, 0xff, 0xed, 0xea, 0xff, 0xf5, 0x7f, 0xb7, 0xf7, 0x57, 0xd5, 0xff, 0xbb, 0xfe, 0xff, 0xfb, 0xff, 0xbe, 0xff, 0xb7, 0x7d, 0xff, 0x6e, 0xff, 0xbf, 0x5b, 0x7f, 0xaf, 0xff, 0xbf, 0xec, 0x7f, 0xef, 0xff, 0xaf, 0x75, 0xff, 0xd5, 0xff, 0xef, 0xf6, 0xff, 0xb7, 0xff, 0xff, 0xf1, 0xff, 0xed, 0xfa, 0xff, 0x77, 0xff, 0xef, 0xff, 0xff, 0xd7, 0xff, 0x45, 0xf8, 0x2f, 0xc1, 0xfe, 0x51, 0xd0, 0x37, 0x62, 0xff, 0x62, 0xf4, 0xaf, 0x58, 0x7f, 0x29, 0xd0, 0x2f, 0xc1, 0xfe, 0x1f, 0xfe, 0xdf, 0xc4, 0xff, 0xb6, 0xe8, 0xff, 0xd3, 0x7f, 0x09, 0xd2, 0x87, 0xcc, 0x7e, 0x29, 0xf4, 0xff, 0xff, 0xff, 0x92, 0xfe, 0x5f, 0xa4, 0xbf, 0xb2, 0xf4, 0x2f, 0xa9, 0x7f, 0x55, 0xf5, 0x1b, 0xea, 0xff, 0x52, 0xf4, 0x5f, 0xd4, 0xff, 0xab, 0xff, 0x5f, 0xc9, 0xff, 0xeb, 0xfc, 0xff, 0xf9, 0xbf, 0xa4, 0xe8, 0x8b, 0xcb, 0xff, 0x52, 0xfd, 0xff, 0xdf, 0xff, 0x27, 0xec, 0x6f, 0x09, 0xfd, 0xa6, 0xe0, 0x6f, 0xa2, 0xfe, 0x53, 0xed, 0xbf, 0x50, 0xff, 0x63, 0xd1, 0x5f, 0x45, 0xfd, 0x17, 0xfd, 0x7f, 0x93, 0xff, 0xaf, 0xe9, 0xff, 0xf1, 0xff, 0x11, 0xa9, 0x1f, 0x4a, 0xdd, 0x53, 0xf5, 0xff, 0xff, 0xff, 0xde, 0xfa, 0x9f, 0xbe, 0x7e, 0xfc, 0xf5, 0xc5, 0xaf, 0x3f, 0xbc, 0xf1, 0x7f, 0xff, 0x5f, 0xbc, 0xf6, 0x6b, 0xbb, 0xff, 0x5f, 0xff, 0xff, 0xed, 0xff, 0x22, 0xff, 0xff, 0xe9, 0xbf, 0xee, 0xf6, 0xf7, 0xbe, 0x7f, 0xfc, 0xf8, 0xff, 0xff, 0xff, 0xdb, 0xfa, 0xbf, 0x3b, 0xfc, 0xb4, 0xe9, 0x4f, 0xad, 0xfe, 0x74, 0xeb, 0x7f, 0xf5, 0xff, 0x7a, 0xf5, 0xaf, 0xb6, 0xfe, 0x1f, 0xff, 0xff, 0xcf, 0xff, 0x0f, 0xfd, 0xff, 0xd3, 0xff, 0xaa, 0xd5, 0x97, 0x6d, 0x7e, 0xd9, 0xe1, 0xff, 0xff, 0xff, 0xa2, 0xec, 0xd7, 0xae, 0x5e, 0xfe, 0xff, 0xe7, 0x5f, 0x7f, 0x08, 0xf0, 0xef, 0xfa, 0x3f, 0xf4, 0xfa, 0xdf, 0x5f, 0xff, 0x5f, 0xff, 0xff, 0xcb, 0xff, 0x25, 0xff, 0xff, 0xf4, 0xff, 0x5d, 0xf7, 0xdf, 0xde, 0x7f, 0xfe, 0xf5, 0xff, 0xff, 0xff, 0xae, 0xf8, 0xaf, 0x3f, 0x7d, 0xf4, 0xf5, 0x47, 0x77, 0x7f, 0xa1, 0xe2, 0xbf, 0xfb, 0x7f, 0xd5, 0xea, 0xaf, 0x7e, 0xfd, 0x1f, 0xfd, 0xff, 0x9f, 0xff, 0x4b, 0xfa, 0xff, 0xf1, 0x7f, 0x75, 0xcd, 0xbf, 0x3d, 0x7d, 0xf4, 0xf1, 0xff, 0xff, 0xff, 0xa2, 0xee, 0x9f, 0xbe, 0x7e, 0xfd, 0xff, 0xd5, 0x9d, 0x5f, 0x0a, 0xf9, 0x7f, 0xfd, 0xff, 0x0a, 0xfa, 0xdf, 0x5b, 0xff, 0x5f, 0xff, 0xff, 0xcf, 0xff, 0x87, 0xff, 0xff, 0xf5, 0xff, 0xad, 0xf6, 0xab, 0xb7, 0x7e, 0xbd, 0xf5, 0xff, 0xff, 0xff, 0xf8, 0xf8, 0xfb, 0x36, 0x7e, 0xe8, 0xef, 0x87, 0xb7, 0x7e, 0x7a, 0xeb, 0x7f, 0xeb, 0xff, 0x53, 0xea, 0x2f, 0x7f, 0xfd, 0x1f, 0xff, 0xff, 0xcf, 0xff, 0xbd, 0xf4, 0xff, 0xd1, 0xff, 0xba, 0xcd, 0x6f, 0xef, 0x7e, 0xf4, 0xe5, 0xff, 0xff, 0xff, 0xaa, 0xee, 0x4f, 0xaf, 0x7e, 0xbd, 0xfd, 0xd7, 0x56, 0x7f, 0xec, 0xfd, 0xdf, 0xfa, 0xff, 0xfe, 0xf5, 0xef, 0xad, 0xfe, 0x5d, 0xfb, 0xff, 0xad, 0xff, 0xa6, 0xfc, 0xff, 0xf5, 0xff, 0x6a, 0xfb, 0x9f, 0xbf, 0x5e, 0x5d, 0xf9, 0xff, 0xff, 0xff, 0xf9, 0xec, 0xaf, 0x3c, 0x7a, 0xf5, 0xeb, 0x97, 0xd7, 0x7e, 0x59, 0xeb, 0xbf, 0xbb, 0xff, 0x57, 0xf7, 0x5f, 0xdf, 0xfe, 0x1f, 0xf7, 0xff, 0xcf, 0xff, 0xdd, 0xda, 0xbf, 0x65, 0xff, 0xaa, 0xca, 0x77, 0xad, 0x7d, 0xf4, 0xf1, 0xff, 0xff, 0xbf, 0x04, 0xf2, 0x0b, 0xc1, 0x7f, 0x05, 0xd8, 0x2f, 0x08, 0xff, 0x82, 0xf0, 0x57, 0x64, 0xff, 0xdb, 0xfc, 0x0b, 0x2a, 0xfa, 0x22, 0xfc, 0xaf, 0xda, 0xff, 0xe8, 0xe0, 0x6f, 0xd0, 0x7e, 0xd9, 0xcc, 0x0f, 0x0e, 0xfe, 0x03, 0xfe, 0xff, 0xff, 0xff, 0xa8, 0xc0, 0x2f, 0x95, 0xfe, 0x53, 0xf1, 0x7f, 0x21, 0xfd, 0x2b, 0xf5, 0xaf, 0xc0, 0xff, 0xb7, 0xf5, 0xaf, 0x4e, 0xfe, 0x47, 0xe9, 0xff, 0xb5, 0xff, 0xd9, 0xaa, 0x5f, 0x85, 0xff, 0xb2, 0x99, 0x4f, 0x5d, 0xfc, 0xaa, 0xf4, 0xff, 0xff, 0xff, 0xef, 0xff, 0xff, 0xed, 0xff, 0xbe, 0xff, 0xef, 0xff, 0xff, 0xdf, 0xff, 0x7f, 0x7f, 0x7f, 0xad, 0xfe, 0x7b, 0xff, 0xfb, 0x7d, 0xff, 0xaf, 0xfa, 0xff, 0xef, 0xf7, 0xff, 0xfd, 0xbe, 0x7d, 0xef, 0xfb, 0xee, 0xff, 0xdf, 0xff, 0xff, 0xff, 0xff, 0x5f, 0xff, 0xb7, 0xff, 0xff, 0x77, 0xf7, 0xbf, 0x6e, 0xff, 0xfb, 0xf6, 0xef, 0xfd, 0xff, 0xab, 0xfe, 0xef, 0x5d, 0xff, 0xef, 0xf6, 0x7f, 0xeb, 0xff, 0xfd, 0xfe, 0xbf, 0xf7, 0xff, 0xef, 0xfd, 0xdf, 0xbf, 0xff, 0xfb, 0xfe, 0xff, 0xff, 0xff, 0xfb, 0xfd, 0xff, 0xfd, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xff, 0xff, 0xf7, 0xff, 0xda, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xaf, 0xfa, 0xff, 0xff, 0xfb, 0xff, 0xdf, 0xff, 0xfd, 0xdf, 0xff, 0xfe, 0xfd, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfd, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xef, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0xff, 0xff, 0xf5, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xaf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfd, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x57, 0xff, 0xff, 0xf1, 0xff, 0x77, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x5f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xfe, 0xff, 0xf3, 0xff, 0x5f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xcf, 0xff, 0xff, 0xf4, 0xff, 0x2f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x5f, 0xed, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xbf, 0xbb, 0xff, 0x1f, 0xff, 0xff, 0xd1, 0xff, 0x5f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xb7, 0xdb, 0xff, 0x5b, 0xed, 0xaf, 0xb6, 0xff, 0x57, 0xfb, 0xf7, 0xfe, 0x7f, 0xff, 0xfe, 0xd7, 0xb6, 0xfd, 0xfa, 0xed, 0x5b, 0xdb, 0xbf, 0x7d, 0xfb, 0xff, 0xee, 0xff, 0xc7, 0xff, 0xff, 0xf5, 0xff, 0x1f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xaf, 0x52, 0x7f, 0x97, 0xd1, 0xbf, 0x66, 0xff, 0x5f, 0xea, 0x0f, 0x40, 0x7f, 0xd8, 0xf4, 0x1f, 0x2e, 0xbe, 0xa9, 0xa3, 0x27, 0x17, 0x7e, 0xe9, 0xd1, 0xaf, 0x48, 0xfd, 0x1f, 0xff, 0xff, 0xf1, 0xff, 0x3f, 0xfd, 0xff, 0xff, 0xff, 0xff, 0xff, 0x8b, 0xf4, 0xff, 0xa5, 0xfa, 0x17, 0xab, 0xff, 0x96, 0xed, 0xaf, 0xca, 0x5f, 0x7d, 0xfa, 0x4b, 0x4d, 0x7d, 0xfa, 0xea, 0x97, 0x45, 0x5f, 0x7c, 0xf5, 0x5f, 0x52, 0xff, 0xcf, 0xff, 0xff, 0xf5, 0xff, 0x4f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xaf, 0xa1, 0xfe, 0x8f, 0xd1, 0x77, 0xa6, 0xfe, 0x17, 0xeb, 0x2f, 0xc8, 0x7f, 0xf4, 0xea, 0x4f, 0x1a, 0xfa, 0xd0, 0xc5, 0x17, 0x2f, 0x7f, 0xe9, 0xd1, 0xdf, 0xc4, 0xfe, 0x0f, 0xff, 0xff, 0xe1, 0xff, 0x9f, 0xfe, 0x7f, 0xbb, 0xff, 0xff, 0xff, 0x0f, 0x1e, 0x3f, 0x78, 0xf4, 0x9f, 0xd8, 0xff, 0xea, 0xfa, 0xef, 0xff, 0x7f, 0xdd, 0xf6, 0xaf, 0xaf, 0xfe, 0x5a, 0xf3, 0x2f, 0xe5, 0x7f, 0xbe, 0xf2, 0xaf, 0xcb, 0xff, 0xab, 0xff, 0xff, 0xf5, 0xff, 0x1f, 0xfd, 0x6f, 0x76, 0xff, 0xff, 0xff, 0xff, 0x7e, 0x7c, 0xed, 0xf5, 0x3f, 0x59, 0xff, 0xa5, 0xd6, 0x5f, 0xb5, 0x7f, 0xf9, 0xf5, 0x8f, 0x3a, 0xfe, 0x58, 0xa3, 0x7f, 0x4f, 0xff, 0x71, 0xfe, 0x5f, 0x9d, 0xfe, 0xaf, 0xfe, 0xff, 0xe9, 0xff, 0x5f, 0xfd, 0xdf, 0x6c, 0xfe, 0xff, 0xff, 0x57, 0x1b, 0x7f, 0xbc, 0xed, 0xbf, 0xfe, 0xff, 0x27, 0xfb, 0xbf, 0xfe, 0x7f, 0x5f, 0xfb, 0x7f, 0xef, 0xff, 0x17, 0xef, 0x5f, 0xf8, 0x7f, 0x73, 0xfa, 0xff, 0xd1, 0xff, 0x8b, 0xff, 0xff, 0xf5, 0xff, 0x9f, 0xfe, 0x8f, 0xc1, 0xff, 0xff, 0xff, 0x6f, 0x7f, 0xfc, 0xf4, 0xfa, 0x3f, 0xfb, 0xff, 0x4d, 0xf6, 0xbf, 0xfd, 0xff, 0xfa, 0xeb, 0x6f, 0x5d, 0xbd, 0x3a, 0xea, 0xff, 0xe9, 0xff, 0xd3, 0xf6, 0x5f, 0xf3, 0xff, 0xaf, 0xff, 0xff, 0xe1, 0xff, 0x3f, 0xff, 0x2f, 0x0b, 0xfd, 0xff, 0xff, 0x5f, 0x2a, 0x5f, 0x2d, 0xea, 0xbf, 0xfe, 0xff, 0x93, 0xfd, 0x6f, 0xff, 0xbf, 0x7e, 0xf5, 0xbf, 0xd6, 0xff, 0x4a, 0xfb, 0xbf, 0xb8, 0xff, 0x8f, 0xfe, 0xff, 0xa8, 0xff, 0x8f, 0xff, 0xff, 0xf5, 0xff, 0x9f, 0xfd, 0xcf, 0xe8, 0xfe, 0xff, 0xff, 0x5f, 0x2c, 0x7e, 0x74, 0xfa, 0x3f, 0xfb, 0xff, 0x77, 0xd1, 0xff, 0xf6, 0xff, 0xea, 0xed, 0x7f, 0x9e, 0xff, 0x1a, 0xd4, 0xbf, 0xf2, 0xff, 0x8b, 0xff, 0xdf, 0x76, 0xff, 0x2f, 0xff, 0xff, 0xe9, 0xff, 0x1f, 0xff, 0xdf, 0xdf, 0xff, 0xff, 0xff, 0xb7, 0xf1, 0xff, 0xab, 0xeb, 0xbf, 0xff, 0xff, 0xae, 0xee, 0xaf, 0xde, 0x7f, 0xbd, 0xf5, 0x7f, 0xe5, 0xff, 0x55, 0xf5, 0xff, 0xd8, 0xff, 0xaf, 0xfe, 0x7f, 0xfa, 0xff, 0xcf, 0xff, 0xff, 0xf5, 0xff, 0x5f, 0xff, 0xff, 0xf7, 0xff, 0xff, 0xff, 0x2f, 0x53, 0xff, 0xb7, 0xfa, 0x2f, 0xd5, 0xff, 0xda, 0xe2, 0x7f, 0xaa, 0xfe, 0x75, 0xd1, 0xff, 0xd2, 0xff, 0xe7, 0xec, 0x2f, 0x57, 0xff, 0xd7, 0xff, 0x57, 0x2a, 0xfd, 0x1f, 0xff, 0xff, 0xf1, 0xff, 0x1f, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xff, 0xff, 0x7f, 0xf5, 0x37, 0xff, 0xff, 0x65, 0xe9, 0x5f, 0x5d, 0x7f, 0xd5, 0xfa, 0x7f, 0xe9, 0xff, 0x52, 0xf5, 0x5b, 0xe3, 0xff, 0xda, 0xff, 0x5f, 0xd7, 0xfe, 0xcf, 0xff, 0xff, 0xf7, 0xff, 0x5f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xbb, 0xf6, 0xff, 0xef, 0xd7, 0x6f, 0xb4, 0xff, 0xad, 0xc3, 0x7f, 0xd5, 0xfe, 0xb5, 0xd1, 0x7f, 0xd3, 0xff, 0xe7, 0xec, 0x37, 0xa7, 0xfe, 0x57, 0xff, 0x7f, 0xba, 0xfe, 0x1f, 0xfd, 0xff, 0xed, 0xff, 0x3b, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xaf, 0xfd, 0xff, 0xbf, 0xfc, 0x07, 0xe3, 0xff, 0x1a, 0xfe, 0xff, 0xf2, 0xff, 0x47, 0xf5, 0xff, 0xfd, 0xff, 0xbf, 0xff, 0x47, 0x17, 0x7f, 0x90, 0xff, 0x2f, 0xc4, 0xff, 0xa7, 0xff, 0xff, 0xfb, 0xff, 0x4f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x0f, 0xf6, 0xff, 0xff, 0xd0, 0x57, 0xee, 0xff, 0x5b, 0xfc, 0xff, 0xd2, 0xfe, 0x9f, 0xe1, 0xff, 0xd5, 0xff, 0xf6, 0xfa, 0xcf, 0x46, 0xff, 0x82, 0xff, 0x7f, 0x91, 0xfe, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xab, 0xfe, 0xff, 0x2f, 0xf1, 0xff, 0xf7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf6, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xbf, 0xff, 0xff, 0xff, 0xff, 0x77, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xef, 0xfd, 0xff, 0xff, 0xf7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xbd, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xbf, 0xff, 0xff, 0xbf, 0xfd, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xbf, 0xfd, 0xff, 0xff, 0xef, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf7, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xfb, 0xff, 0xff, 0xff, 0xff, 0x6f, 0xfb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x5f, 0x55, 0xff, 0xff, 0xff, 0xff, 0xfa, 0xff, 0xd7, 0xff, 0xff, 0xff, 0xff, 0x6f, 0xf5, 0xff, 0xf4, 0xff, 0x8b, 0xf6, 0xff, 0xff, 0xff, 0x57, 0xff, 0xff, 0xfa, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0xed, 0xff, 0xff, 0xff, 0xff, 0x52, 0xfe, 0xff, 0xff, 0xff, 0xd7, 0xff, 0x7f, 0xfd, 0xff, 0xff, 0xff, 0xfa, 0xef, 0xff, 0xfd, 0xff, 0x2f, 0xf6, 0xff, 0xff, 0xff, 0xff, 0xf5, 0xff, 0xd7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfd, 0xff, 0xff, 0xff, 0x5f, 0xef, 0xff, 0xff, 0xff, 0x7f, 0xf1, 0xff, 0x87, 0xfc, 0xff, 0xff, 0xff, 0xa4, 0xb0, 0xff, 0xf8, 0x7f, 0xb3, 0xfd, 0x7f, 0xad, 0xff, 0x06, 0xfe, 0x7f, 0xcd, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x6f, 0x42, 0xff, 0x0b, 0xfe, 0x3f, 0xb1, 0xfe, 0xff, 0xff, 0xff, 0xb5, 0xff, 0x97, 0xf4, 0x6f, 0xbb, 0xfe, 0xe0, 0xe2, 0xff, 0xfa, 0xff, 0xe6, 0xf2, 0xff, 0xbf, 0xff, 0x55, 0xe8, 0xff, 0xdb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf, 0x48, 0xff, 0x4b, 0xfe, 0xbf, 0x82, 0xfe, 0xff, 0xff, 0x7f, 0xf1, 0xff, 0x26, 0xfe, 0xff, 0xef, 0xff, 0xaa, 0xf0, 0xff, 0xf8, 0xff, 0xb3, 0xfd, 0xff, 0xde, 0xff, 0x87, 0xf6, 0x7f, 0xcd, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x3f, 0xe5, 0xfe, 0x2f, 0xfd, 0x5f, 0x48, 0xff, 0xff, 0xff, 0x6f, 0x82, 0xfe, 0xe7, 0xfd, 0x2f, 0x88, 0xfe, 0xe6, 0xed, 0xff, 0xf2, 0xff, 0xa6, 0xeb, 0xff, 0xfd, 0xbf, 0x38, 0xa5, 0x7f, 0x4b, 0xff, 0xef, 0xfd, 0xef, 0xf6, 0xff, 0xff, 0xff, 0x4f, 0x24, 0xfe, 0xfb, 0xff, 0xdf, 0xc0, 0xfc, 0xff, 0xff, 0x5f, 0xca, 0xff, 0x75, 0xff, 0x5f, 0xd1, 0xff, 0xab, 0xf4, 0xff, 0xfc, 0x7f, 0xb1, 0xfd, 0xff, 0xbf, 0xff, 0x8a, 0xf2, 0xdf, 0xea, 0xff, 0x7f, 0xef, 0xbf, 0xdf, 0xff, 0xff, 0xff, 0x2b, 0x59, 0xfd, 0xaf, 0xff, 0xaf, 0x54, 0xff, 0x5f, 0xff, 0xdf, 0x7e, 0xff, 0xe7, 0xff, 0x7f, 0x37, 0xfd, 0xa7, 0xfd, 0xff, 0xf0, 0xff, 0x96, 0xfe, 0xff, 0xff, 0x7f, 0xd5, 0xaa, 0xff, 0x8e, 0xff, 0xd7, 0xdb, 0x27, 0x10, 0xfe, 0xff, 0xff, 0x6f, 0x8a, 0xfd, 0xff, 0xff, 0x5f, 0x22, 0xfe, 0xff, 0xff, 0x6f, 0xeb, 0xff, 0xde, 0xff, 0x57, 0x6f, 0xff, 0x75, 0xfc, 0xff, 0xfa, 0x3f, 0x8c, 0xf5, 0xff, 0xff, 0xff, 0x62, 0xf7, 0x5f, 0xeb, 0xff, 0xad, 0xfa, 0x47, 0x45, 0xff, 0xbf, 0xff, 0x5b, 0xd7, 0xfe, 0xff, 0xff, 0x3f, 0x00, 0xfe, 0xaf, 0xfe, 0x5f, 0x5f, 0xff, 0x75, 0xfd, 0xaf, 0xaa, 0xfe, 0xc7, 0xe9, 0xff, 0xf8, 0x7f, 0x99, 0xfe, 0xff, 0xff, 0xbf, 0x67, 0xad, 0xff, 0x4e, 0xff, 0xdb, 0xd5, 0x4f, 0x90, 0xfe, 0x77, 0xfb, 0x5b, 0xcc, 0xfa, 0xff, 0xff, 0xaf, 0x92, 0xfe, 0xff, 0xff, 0xef, 0xf6, 0xff, 0x80, 0xff, 0xdf, 0xde, 0xfe, 0x1f, 0xfd, 0xff, 0xff, 0x7f, 0x74, 0xf1, 0xff, 0xff, 0x7f, 0xd5, 0xd5, 0x5f, 0xf5, 0x7f, 0x73, 0xfb, 0xff, 0x5f, 0x7f, 0x89, 0xf0, 0x77, 0x5a, 0xff, 0xff, 0xff, 0x1f, 0x40, 0xff, 0xdf, 0xfe, 0xaf, 0xfe, 0xff, 0x15, 0xfd, 0xbf, 0xbb, 0xfe, 0x2f, 0xfd, 0xff, 0xf5, 0x7f, 0xd5, 0xd1, 0xff, 0xff, 0x7f, 0xa5, 0xbd, 0xff, 0xa5, 0xfe, 0x53, 0xf5, 0xaf, 0x1b, 0xfd, 0x93, 0xf2, 0xd7, 0xd2, 0xfa, 0xff, 0xff, 0x2f, 0xc2, 0xfe, 0xbf, 0xff, 0xdf, 0xd5, 0xff, 0xe6, 0xff, 0x57, 0xad, 0xff, 0x15, 0xff, 0xff, 0xfe, 0xff, 0x8b, 0xf4, 0xff, 0xff, 0xff, 0x54, 0xd2, 0x5f, 0xd4, 0x7f, 0x7c, 0xfe, 0xff, 0x5f, 0xff, 0x7e, 0xff, 0x2f, 0x5e, 0xff, 0xff, 0xff, 0x5f, 0x05, 0xff, 0x6f, 0xfd, 0xbf, 0x5e, 0xff, 0xa7, 0xfe, 0x5f, 0x55, 0xfd, 0x37, 0xf5, 0xff, 0xf5, 0xff, 0x7f, 0xf5, 0xff, 0xff, 0xff, 0x41, 0xf4, 0x7f, 0x41, 0xff, 0x54, 0xea, 0xff, 0x1f, 0xff, 0xed, 0xf6, 0xef, 0x54, 0xfd, 0xff, 0xff, 0x7f, 0x80, 0xff, 0x0f, 0xfe, 0x57, 0xd5, 0xff, 0xea, 0xff, 0xef, 0xae, 0xfe, 0x4f, 0xfd, 0x7f, 0xfd, 0xff, 0x2d, 0xf6, 0xff, 0xff, 0x5f, 0x8a, 0xaa, 0x7f, 0xea, 0x3f, 0x75, 0xfd, 0xff, 0x5f, 0xff, 0xff, 0xff, 0x1b, 0x5b, 0xff, 0xff, 0xff, 0x5f, 0x15, 0xff, 0x5f, 0xfd, 0xff, 0x71, 0xff, 0xa7, 0xea, 0xaf, 0xa0, 0xff, 0x1f, 0xff, 0xff, 0xf1, 0xff, 0xfd, 0xfc, 0xff, 0xff, 0xff, 0xbb, 0xf6, 0xff, 0x6f, 0x7f, 0x63, 0xf5, 0xff, 0xff, 0xfe, 0xdf, 0xff, 0x7f, 0x4e, 0xfd, 0xff, 0xff, 0x7f, 0xc2, 0xfe, 0x07, 0xfe, 0xbf, 0xe4, 0x7f, 0xe5, 0xff, 0x5f, 0x55, 0xff, 0x95, 0xfa, 0x7f, 0xfa, 0xbf, 0x36, 0xf7, 0xff, 0xff, 0xff, 0x6a, 0xed, 0x7f, 0xfd, 0xff, 0xb5, 0xf5, 0xff, 0xff, 0xff, 0xff, 0xff, 0x4f, 0xaa, 0xff, 0xff, 0xff, 0xdf, 0xa4, 0xff, 0x5f, 0xfd, 0xff, 0xd5, 0xff, 0x08, 0xc0, 0xff, 0xff, 0xfe, 0x17, 0xec, 0xff, 0xf8, 0xff, 0x75, 0xfe, 0xff, 0xff, 0xff, 0x1f, 0xfd, 0xff, 0xff, 0xff, 0xaf, 0xd7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x62, 0xff, 0xff, 0xff, 0xbf, 0xda, 0xfe, 0x0f, 0xfe, 0xff, 0xf1, 0xff, 0xa2, 0xea, 0xdf, 0xde, 0xff, 0x47, 0xfd, 0xff, 0xfa, 0x7f, 0x8b, 0xf6, 0xff, 0xff, 0xff, 0xab, 0xfe, 0xff, 0xff, 0xff, 0xdb, 0xfa, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0xf5, 0xff, 0xff, 0xff, 0x5f, 0xad, 0xff, 0x5f, 0xfe, 0xff, 0xf5, 0xff, 0x88, 0xe4, 0xff, 0xff, 0xff, 0x17, 0xf9, 0xff, 0xf0, 0xff, 0x22, 0xfe, 0xff, 0xff, 0xff, 0x9f, 0xfa, 0xff, 0xff, 0xff, 0xb7, 0xeb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xa5, 0xff, 0xff, 0xff, 0xbf, 0x52, 0xff, 0xaf, 0xfb, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xfa, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0xff, 0xff, 0xf7, 0xff, 0xdb, 0xf5, 0xff, 0xff, 0xff, 0xdf, 0xff, 0xff, 0xfa, 0xff, 0xaa, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xaf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf5, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xef, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xff, 0xff, 0xfe, 0xff, 0xbf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfb, 0xff, 0xff, 0xff, 0xff, 0xf6, 0xff, 0xef, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0xd7, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xbb, 0xfe, 0xdf, 0xf5, 0xff, 0x6d, 0xfd, 0xff, 0xff, 0xff, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xbf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7d, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xaf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xef, 0xff, 0x7f, 0xff, 0xff, 0xd7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xeb, 0xff, 0xff, 0xff, 0xff, 0xea, 0xff, 0x75, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xeb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0xff, 0xff, 0xf7, 0xff, 0xff, 0xff, 0xaf, 0xfe, 0xff, 0xfa, 0xff, 0x3f, 0xfb, 0xff, 0xff, 0xff, 0x5f, 0xfd, 0xff, 0xdf, 0xff, 0xbf, 0xb7, 0xff, 0xdb, 0xfd, 0xff, 0xea, 0xff, 0xff, 0xff, 0x17, 0x10, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0x97, 0xff, 0x7f, 0xdd, 0xff, 0xff, 0xff, 0x8b, 0xff, 0x5f, 0xfc, 0xeb, 0xd5, 0x7e, 0xfd, 0xff, 0xff, 0x7f, 0xcb, 0xff, 0x7f, 0xff, 0x7f, 0xed, 0xff, 0x57, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x42, 0xfc, 0xff, 0xff, 0xff, 0xff, 0xff, 0x1f, 0xfe, 0xff, 0xd5, 0xff, 0xff, 0xff, 0x5f, 0xff, 0x7d, 0xe9, 0xdf, 0xb7, 0xf5, 0xff, 0xbf, 0xfe, 0x5f, 0x77, 0xff, 0x1f, 0xff, 0xbf, 0xeb, 0xff, 0x3d, 0xff, 0xff, 0xea, 0xff, 0xff, 0xff, 0x87, 0xb5, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x5f, 0xff, 0x5f, 0x7f, 0xff, 0xff, 0xff, 0xaf, 0xbf, 0xfb, 0x7e, 0xf5, 0x2f, 0xbf, 0xfa, 0xff, 0xff, 0xff, 0xee, 0xff, 0x5f, 0xfd, 0x7f, 0xdf, 0xff, 0x2b, 0xfd, 0xff, 0xfd, 0xff, 0xfb, 0xff, 0x0f, 0xa5, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x1f, 0xfe, 0xff, 0xca, 0xff, 0xff, 0xff, 0x6f, 0xbd, 0xde, 0xfa, 0xed, 0x3f, 0xf5, 0xfe, 0x7f, 0xff, 0x97, 0xeb, 0xff, 0x1b, 0xff, 0xff, 0xea, 0xff, 0xbf, 0xff, 0xff, 0xfa, 0xbf, 0xbf, 0xfd, 0xaf, 0xf1, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xd7, 0xff, 0x5f, 0x7f, 0xff, 0xff, 0xff, 0xdf, 0xff, 0x7d, 0xf7, 0xfb, 0xab, 0x5e, 0xff, 0xdf, 0xff, 0x7f, 0xae, 0xff, 0x37, 0xeb, 0xff, 0xda, 0xff, 0x55, 0xfd, 0xff, 0xff, 0x7f, 0xf5, 0xe9, 0x0f, 0xa3, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x1f, 0xfe, 0xff, 0xca, 0xfe, 0xda, 0xfe, 0x5b, 0xad, 0xfe, 0xbc, 0xd6, 0xdf, 0xda, 0xfe, 0xbf, 0xfe, 0xbf, 0xeb, 0xff, 0x9e, 0xfe, 0xff, 0xfd, 0xff, 0xaf, 0xff, 0xff, 0xff, 0xff, 0x7e, 0xf6, 0xaf, 0x69, 0xff, 0xbf, 0xff, 0xff, 0xff, 0xff, 0x5f, 0xff, 0x5f, 0xff, 0xff, 0xff, 0xff, 0xaf, 0xbf, 0x7b, 0x6b, 0xfd, 0xb5, 0xad, 0xff, 0x7f, 0xff, 0xff, 0xfd, 0xff, 0x10, 0xa0, 0xbf, 0xaa, 0xff, 0xb9, 0xfa, 0xff, 0xf7, 0xff, 0xe8, 0xd5, 0x5f, 0xd2, 0xfe, 0xbf, 0xfe, 0xff, 0xff, 0xff, 0x1f, 0xfd, 0xff, 0x94, 0x7f, 0x55, 0xf4, 0x57, 0x55, 0x5f, 0xad, 0xd5, 0xaf, 0xb5, 0xfe, 0xbf, 0xfe, 0x7f, 0xff, 0xff, 0xa2, 0xea, 0xbf, 0xf5, 0xff, 0x69, 0xff, 0xff, 0xff, 0xbf, 0xfa, 0xf6, 0x6f, 0x68, 0xff, 0x6f, 0xff, 0xff, 0xff, 0xff, 0xaf, 0xfe, 0xbf, 0xeb, 0x7f, 0x75, 0xff, 0xb7, 0xda, 0x7e, 0x75, 0xf5, 0x5b, 0xd7, 0xff, 0x2f, 0xfe, 0xff, 0xfb, 0xff, 0x0a, 0xe0, 0x7f, 0xef, 0xff, 0x6b, 0xff, 0xff, 0xff, 0xff, 0xe8, 0xeb, 0x5f, 0xc9, 0xff, 0x7f, 0xfd, 0xff, 0xff, 0xff, 0x1f, 0xff, 0x7f, 0x5e, 0xff, 0x56, 0xf4, 0x6f, 0xab, 0xde, 0x4d, 0xd6, 0x6f, 0xad, 0xfe, 0xbf, 0xfe, 0xff, 0xff, 0xff, 0x5f, 0xff, 0xff, 0xfa, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7b, 0xed, 0xff, 0x71, 0xff, 0x9f, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xfd, 0xff, 0xe9, 0xff, 0xb3, 0xe9, 0xff, 0x5d, 0x7e, 0xdb, 0xcb, 0xbf, 0x98, 0xff, 0x57, 0xfe, 0xff, 0xff, 0xff, 0x3b, 0xff, 0xff, 0xdb, 0xff, 0x57, 0xff, 0xff, 0xff, 0xff, 0xea, 0xdb, 0xbf, 0xd3, 0xfe, 0x3f, 0xfe, 0xff, 0xff, 0xff, 0xb7, 0xff, 0xbf, 0xdb, 0xff, 0x66, 0xd3, 0x5f, 0xb3, 0xfc, 0xb7, 0xde, 0xff, 0x12, 0xfd, 0xdd, 0xff, 0xff, 0xff, 0xff, 0xaf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7e, 0xf5, 0xff, 0x64, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x6f, 0x44, 0xff, 0xdb, 0xf8, 0xff, 0x1a, 0x7f, 0xf5, 0xf5, 0x5f, 0x5f, 0xff, 0xd3, 0xfe, 0xff, 0xff, 0xff, 0x7f, 0xfd, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xd2, 0xc3, 0xff, 0xc9, 0xff, 0xff, 0xff, 0xff, 0xfa, 0xff, 0xff, 0xff, 0x7f, 0xd1, 0xfe, 0xab, 0xd3, 0xdf, 0x76, 0xfc, 0xd7, 0xd5, 0x7f, 0x15, 0xff, 0xb7, 0xff, 0xff, 0xff, 0xff, 0xaf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x6d, 0xf5, 0xff, 0xb1, 0xfe, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, 0x7f, 0xc4, 0x7f, 0xdb, 0xf8, 0x7f, 0x2d, 0x7f, 0x7d, 0xf5, 0xdf, 0x2e, 0xfd, 0xea, 0xfa, 0xff, 0xff, 0xff, 0x6d, 0xed, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xaa, 0xc5, 0xff, 0xc5, 0xfd, 0xff, 0xff, 0xff, 0xe8, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xb6, 0xf6, 0xaf, 0x2d, 0x7a, 0xf5, 0xdd, 0xd7, 0x2a, 0xff, 0xdb, 0xf7, 0xff, 0xff, 0xff, 0xb7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x26, 0xe9, 0xbf, 0xb9, 0xfe, 0xff, 0xff, 0xbf, 0xf8, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0x75, 0xfa, 0xdf, 0x5a, 0xfe, 0xbe, 0xf6, 0x5f, 0xaf, 0xfe, 0x55, 0xfd, 0xff, 0xff, 0xff, 0xbe, 0xea, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x25, 0xa3, 0x7f, 0x21, 0xfe, 0xff, 0xff, 0xff, 0xea, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x6d, 0xf6, 0xbf, 0xb7, 0xdc, 0xfd, 0xd6, 0xf7, 0x1a, 0xfd, 0xef, 0xeb, 0xff, 0xff, 0xff, 0x40, 0xf2, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfa, 0xff, 0x6f, 0x44, 0xff, 0xff, 0xff, 0x7f, 0xf8, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0xf7, 0xff, 0xef, 0x3d, 0x7f, 0x7f, 0xea, 0xdf, 0x5f, 0xff, 0x55, 0xfd, 0xff, 0xff, 0xff, 0x4a, 0xe2, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xd6, 0xff, 0xff, 0x14, 0xfc, 0xff, 0xff, 0xff, 0xe9, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xde, 0xff, 0xff, 0x3f, 0xfc, 0x7f, 0xce, 0xff, 0x5f, 0xfe, 0x2f, 0xf0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfd, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x4f, 0xfd, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfd, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfd, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xff, 0x7f, 0xfd, 0xff, 0xf5, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xaf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0xfd, 0xff, 0xff, 0xfe, 0xff, 0xfa, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xfd, 0xff, 0xe9, 0xff, 0xff, 0xff, 0x5f, 0xff, 0xff, 0xf7, 0xff, 0xff, 0xff, 0xff, 0xd7, 0xfe, 0xff, 0xff, 0xff, 0xdb, 0xff, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xbf, 0xff, 0xff, 0x5f, 0xff, 0xff, 0xef, 0xff, 0x7f, 0xff, 0xbf, 0xff, 0xff, 0xff, 0xfe, 0xbf, 0xf7, 0xff, 0xff, 0xff, 0xff, 0xfa, 0xff, 0x5f, 0xfd, 0xff, 0xea, 0xff, 0xff, 0xfd, 0xff, 0xff, 0xff, 0x77, 0xff, 0xff, 0x6d, 0xff, 0xbf, 0xfd, 0x7f, 0xfb, 0xff, 0xff, 0xfa, 0xff, 0xfa, 0xff, 0xeb, 0xfa, 0x7f, 0xfd, 0xff, 0xff, 0xf5, 0xff, 0xdd, 0xff, 0xdf, 0xff, 0xff, 0xf7, 0xff, 0xbf, 0xff, 0xbf, 0xfd, 0xff, 0x05, 0xff, 0x5f, 0xeb, 0xff, 0xaf, 0xff, 0xff, 0xf7, 0xfd, 0xf7, 0xf7, 0xff, 0xee, 0xff, 0xdf, 0xff, 0xbf, 0xf5, 0xff, 0xf7, 0xff, 0xff, 0xf5, 0xff, 0x5f, 0xff, 0x7f, 0xf5, 0xff, 0x7d, 0xfd, 0x7f, 0xfd, 0xff, 0x7f, 0xfd, 0xff, 0xd2, 0xff, 0x2f, 0xfa, 0x7f, 0xdf, 0xff, 0xfb, 0xfe, 0xbf, 0xae, 0xff, 0xaf, 0xde, 0xff, 0xf9, 0xff, 0xbf, 0xfe, 0x7f, 0xab, 0xff, 0x5e, 0xf5, 0x7f, 0xff, 0xff, 0x7f, 0xfd, 0xff, 0x96, 0xff, 0xf7, 0xfb, 0xdf, 0xf5, 0xff, 0xab, 0xff, 0x5f, 0xff, 0xff, 0xea, 0xff, 0xff, 0xf6, 0xff, 0xd6, 0xff, 0x3f, 0x11, 0x7c, 0x91, 0xf0, 0x57, 0xd7, 0x7f, 0xd5, 0xfb, 0xb7, 0xed, 0xff, 0x75, 0xff, 0xdf, 0xe9, 0xff, 0xab, 0xff, 0xdf, 0xf6, 0xfe, 0xed, 0xfe, 0xbf, 0xed, 0xff, 0xbf, 0xff, 0x7f, 0xd5, 0xff, 0x9f, 0xfe, 0xdf, 0xde, 0xff, 0xaf, 0xff, 0x3f, 0xa1, 0xfc, 0x27, 0xa2, 0x7f, 0xbd, 0xfe, 0xaf, 0xf6, 0xbf, 0x5d, 0xff, 0xd7, 0xea, 0x7f, 0x5b, 0xff, 0x7f, 0xf5, 0xdf, 0xd6, 0xff, 0xad, 0xf5, 0xff, 0xfa, 0xff, 0xd6, 0xfe, 0xef, 0xfe, 0xff, 0x6a, 0xff, 0x7f, 0xfb, 0xff, 0xda, 0xfe, 0xff, 0xfc, 0x7e, 0xfc, 0xdb, 0x07, 0x01, 0x7f, 0x10, 0xf1, 0x47, 0x02, 0x3f, 0x20, 0xf4, 0xdf, 0xed, 0xff, 0xcd, 0xff, 0x7f, 0x5b, 0xff, 0xf7, 0xfe, 0x5f, 0xd1, 0xff, 0x15, 0xfd, 0xaf, 0xd0, 0xff, 0x26, 0xfa, 0x5f, 0xa0, 0x7f, 0x83, 0xff, 0xbf, 0xd0, 0xfa, 0xe8, 0xf7, 0x2f, 0x52, 0xfd, 0x22, 0xd2, 0x0f, 0x54, 0x7d, 0x45, 0xd1, 0x5f, 0x90, 0xfe, 0x0b, 0xd4, 0x5f, 0xc2, 0xfe, 0x05, 0xe8, 0x2f, 0xf2, 0xff, 0x45, 0xff, 0x3f, 0xe8, 0xff, 0x85, 0xff, 0x6f, 0xf9, 0xff, 0x4a, 0xff, 0xff, 0xea, 0x3e, 0xfd, 0xea, 0xf7, 0x1f, 0xbf, 0xfb, 0xf9, 0xf7, 0x1f, 0xff, 0xfd, 0xf5, 0x7f, 0x61, 0xff, 0x26, 0xfc, 0x6f, 0x54, 0xff, 0x96, 0xf6, 0xff, 0xa2, 0xff, 0x1f, 0xfa, 0xff, 0xb3, 0xff, 0x1f, 0xfd, 0xff, 0xd1, 0xff, 0x0f, 0xfd, 0x3f, 0x5a, 0x7f, 0xf5, 0xdf, 0x2f, 0x5d, 0x7f, 0xd7, 0xf1, 0x3f, 0x5b, 0xff, 0xb3, 0xf1, 0xff, 0xeb, 0xff, 0x5f, 0xf7, 0xff, 0xf1, 0xff, 0x5f, 0xfe, 0xff, 0xf4, 0xff, 0x57, 0xff, 0x7f, 0xd1, 0xff, 0x57, 0xf7, 0x5f, 0xe9, 0xff, 0xd5, 0xff, 0xaf, 0xd5, 0x7d, 0xfc, 0xff, 0xbf, 0xb7, 0xff, 0x75, 0xff, 0xd7, 0xb6, 0x7f, 0xdb, 0xfe, 0x6f, 0xf1, 0xff, 0x9f, 0xfd, 0xff, 0xb5, 0xff, 0x97, 0xff, 0xdf, 0x4e, 0xff, 0xe7, 0xf4, 0x7f, 0xce, 0xff, 0xd7, 0xfc, 0x7f, 0x4e, 0xff, 0x53, 0xfa, 0x3f, 0x5b, 0x7f, 0xfd, 0xff, 0xb7, 0x6e, 0x7f, 0xef, 0xea, 0x7f, 0x6f, 0x7f, 0xf7, 0xf6, 0xff, 0xd5, 0xff, 0x1f, 0xff, 0xff, 0xf1, 0xff, 0x1f, 0xfd, 0x7f, 0xca, 0xff, 0xa6, 0xfc, 0x6f, 0xab, 0xfe, 0x66, 0xfa, 0x7f, 0xcd, 0xff, 0x7b, 0xfe, 0x7f, 0x05, 0x7f, 0xfc, 0xff, 0xdf, 0xb5, 0xff, 0xb9, 0xfe, 0xaf, 0xf5, 0xff, 0x55, 0xff, 0xff, 0xf1, 0xff, 0x5f, 0xff, 0xff, 0xf5, 0xff, 0x5f, 0xff, 0x6f, 0xae, 0xfe, 0xed, 0xe9, 0x7f, 0xce, 0xff, 0xe7, 0xea, 0x5f, 0x9d, 0xfe, 0xd2, 0xf4, 0xaf, 0x55, 0xfe, 0xec, 0xfd, 0x3f, 0xe5, 0xff, 0xa3, 0xfc, 0x3f, 0xc6, 0xff, 0x65, 0xfa, 0xff, 0xf3, 0xff, 0x5f, 0xfe, 0xff, 0xe1, 0xff, 0x1f, 0xff, 0x5f, 0xc5, 0xfe, 0xa5, 0xfc, 0x4f, 0x4a, 0xfd, 0xaa, 0xec, 0x37, 0xca, 0xbf, 0x55, 0xde, 0x37, 0xea, 0x5f, 0xfa, 0xf7, 0x2f, 0xeb, 0x7f, 0x5b, 0xf6, 0xb7, 0x75, 0x7f, 0x5b, 0xfe, 0xff, 0xd9, 0xff, 0x1f, 0xff, 0xff, 0xf5, 0xff, 0x5f, 0xff, 0x6f, 0x9c, 0xfe, 0x45, 0xd1, 0xbf, 0x4c, 0xff, 0x45, 0xe9, 0xef, 0x14, 0xfd, 0xa2, 0xf8, 0x6f, 0x58, 0xff, 0xd4, 0xd6, 0x7f, 0x46, 0xff, 0x72, 0xfe, 0x2f, 0xe5, 0xff, 0x63, 0xed, 0xff, 0xf1, 0xff, 0xbb, 0xfe, 0xff, 0xd5, 0xff, 0x1f, 0xfe, 0x5f, 0xc3, 0x7f, 0xab, 0xee, 0x6f, 0xca, 0xfe, 0xb6, 0xec, 0x5f, 0xca, 0x7e, 0x5b, 0xf6, 0x97, 0xea, 0x7d, 0xab, 0xf9, 0x97, 0xf5, 0xfd, 0x53, 0xed, 0x3f, 0xab, 0xfd, 0x5a, 0xfe, 0xff, 0xf5, 0xff, 0x0f, 0xff, 0xff, 0xf1, 0xff, 0x5f, 0xff, 0x8f, 0x3e, 0xfa, 0x68, 0xc9, 0x4f, 0xbb, 0xfc, 0x50, 0xcb, 0x4f, 0xbb, 0x7e, 0xd4, 0xe5, 0xa7, 0xb5, 0xff, 0x53, 0xd1, 0x7f, 0x57, 0xff, 0x76, 0xdb, 0x6f, 0x77, 0xff, 0xf7, 0xd5, 0xff, 0xd1, 0xff, 0x5f, 0xfd, 0xbf, 0xf3, 0xff, 0x9f, 0xfe, 0x4f, 0x15, 0xff, 0xda, 0xf2, 0x8b, 0x16, 0xff, 0xfa, 0xe2, 0x8b, 0x16, 0x5e, 0xb5, 0xf8, 0xd7, 0xee, 0xfe, 0xaa, 0xf2, 0x57, 0xdf, 0xfe, 0xed, 0xed, 0x5f, 0xad, 0xbd, 0x5a, 0xdb, 0xdf, 0x79, 0xff, 0x1f, 0xf7, 0xff, 0xd4, 0xff, 0x5d, 0xfb, 0x8f, 0x3e, 0xfa, 0xb0, 0xa3, 0x9f, 0x36, 0xda, 0xa0, 0xa5, 0x9f, 0x76, 0x7a, 0xf4, 0xd1, 0x87, 0x88, 0xfc, 0x4f, 0xff, 0x0f, 0x14, 0x7d, 0x50, 0xd1, 0x27, 0x2b, 0x7d, 0xb0, 0xe2, 0x5f, 0xd1, 0xfe, 0x2a, 0xfd, 0xbf, 0xb1, 0xfe, 0x15, 0xfd, 0xab, 0x55, 0xbe, 0xea, 0xe2, 0x4b, 0x2f, 0x7e, 0x7a, 0xe9, 0x4b, 0x0f, 0xbd, 0xac, 0xf4, 0xea, 0xa0, 0xfc, 0xdf, 0xfe, 0x53, 0x55, 0x5d, 0x55, 0xd5, 0x8b, 0x94, 0x7e, 0x45, 0xd9, 0x7f, 0xd1, 0xff, 0x97, 0xea, 0x77, 0xd1, 0xff, 0x97, 0xea, 0x0f, 0x2f, 0xfa, 0xd8, 0xc6, 0x17, 0xad, 0xfc, 0xe2, 0xc3, 0x0f, 0x3d, 0xbe, 0xf4, 0xd1, 0x87, 0xaa, 0xfc, 0x9b, 0xff, 0x17, 0x15, 0x7f, 0x51, 0xd1, 0x2f, 0x2d, 0x7d, 0x71, 0xd1, 0xdf, 0xa5, 0xfe, 0x1d, 0xed, 0x5f, 0xa3, 0xfe, 0x15, 0xfd, 0xff, 0xfe, 0xff, 0xf7, 0xfd, 0xff, 0x7f, 0xff, 0xbd, 0xfe, 0xff, 0xf7, 0xfd, 0x5b, 0xff, 0xfb, 0xfb, 0xff, 0xa7, 0xfe, 0xef, 0xef, 0xfd, 0xee, 0xff, 0xf7, 0xdb, 0xff, 0xae, 0xff, 0xbf, 0xfe, 0xff, 0xeb, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xf6, 0xdb, 0xb6, 0xfe, 0xb6, 0xed, 0xaf, 0xee, 0xbf, 0xf7, 0xdb, 0xdb, 0xbe, 0x7f, 0xff, 0xf5, 0x6f, 0x57, 0xfd, 0x8f, 0xff, 0x7f, 0xbd, 0xff, 0xbb, 0xf6, 0x5f, 0x7b, 0xff, 0xfb, 0xf6, 0xff, 0x55, 0xff, 0xbf, 0xfa, 0xdf, 0x55, 0xff, 0xd7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xbf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xef, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0xff, 0xff, 0xfa, 0xff, 0xdb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfb, 0xff, 0xff, 0xf7, 0xff, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x4f, 0xf5, 0xbf, 0xfa, 0xff, 0xff, 0xfe, 0xff, 0xeb, 0xff, 0x5f, 0xf5, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xab, 0xff, 0xff, 0xd7, 0xff, 0xbf, 0xfe, 0xff, 0xff, 0xff, 0xbf, 0xfa, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xbb, 0xff, 0x7f, 0xff, 0xff, 0x6f, 0xff, 0x7f, 0xfd, 0xff, 0xeb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdd, 0xff, 0xef, 0xff, 0xff, 0xee, 0xff, 0xab, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, 0x5f, 0xff, 0xbf, 0xed, 0xff, 0x6b, 0xf5, 0xff, 0xfa, 0xff, 0x7f, 0xfd, 0xff, 0xaa, 0xff, 0x2f, 0xf5, 0xff, 0xee, 0xff, 0xff, 0xff, 0xff, 0x7b, 0xff, 0x5b, 0xff, 0xff, 0xed, 0xff, 0x6f, 0xfd, 0xff, 0xee, 0xff, 0xff, 0xf5, 0xbf, 0xff, 0xff, 0xfb, 0xff, 0x57, 0x5b, 0x7f, 0x57, 0xfe, 0x7f, 0xed, 0xff, 0xaf, 0xff, 0xbf, 0xf7, 0xff, 0x5b, 0xfe, 0x5f, 0xbb, 0xff, 0xff, 0xff, 0xdf, 0x96, 0xff, 0xef, 0xff, 0xff, 0xf6, 0xff, 0xdb, 0xf6, 0x5f, 0xb7, 0xff, 0xaf, 0xfe, 0x57, 0xfd, 0xff, 0x0f, 0xfe, 0xbf, 0xea, 0xfe, 0x56, 0xf6, 0xff, 0xfb, 0xff, 0xdf, 0xfe, 0x7f, 0x6d, 0x7f, 0xd7, 0xfe, 0x7f, 0xef, 0xff, 0xff, 0xff, 0xbf, 0x15, 0xfe, 0x5f, 0xfd, 0xff, 0x5d, 0xff, 0xdb, 0xfe, 0xff, 0x6e, 0x7f, 0x5f, 0xff, 0x6f, 0xfb, 0xff, 0xb7, 0xfc, 0x4b, 0x1b, 0xfb, 0xab, 0xfe, 0x7f, 0xed, 0xff, 0xb7, 0xff, 0xbf, 0xeb, 0xff, 0x55, 0xfa, 0xbf, 0xb5, 0xff, 0xfd, 0xfb, 0x37, 0x4b, 0x7f, 0xab, 0xf7, 0xb7, 0xea, 0xff, 0xbb, 0xdb, 0xb7, 0xbb, 0xff, 0xbd, 0xfa, 0x97, 0xee, 0xff, 0xe5, 0xfa, 0x8f, 0x36, 0xfe, 0x7a, 0xd5, 0xff, 0xb5, 0xff, 0xaf, 0xfa, 0x7f, 0xad, 0xff, 0x5f, 0xfb, 0x7f, 0x6b, 0xff, 0xf7, 0xef, 0x2f, 0x4b, 0xfd, 0x76, 0xd5, 0xaf, 0x5f, 0xfd, 0x72, 0xf5, 0x57, 0x6b, 0xfd, 0xeb, 0xa5, 0xbf, 0xfa, 0xff, 0xcf, 0xf4, 0xaf, 0x5d, 0xbf, 0xd6, 0xfa, 0x57, 0xed, 0x7f, 0xab, 0xfe, 0xaf, 0xf5, 0xfe, 0xaa, 0xfe, 0xdf, 0xfa, 0xff, 0xde, 0xf5, 0x37, 0x15, 0x7f, 0xfd, 0xfe, 0xb7, 0xb6, 0x5f, 0x77, 0xdb, 0xaf, 0xaf, 0xbf, 0xaa, 0xf6, 0x17, 0xd7, 0xff, 0x65, 0xfd, 0x5f, 0x7b, 0xfa, 0xd4, 0xd1, 0x3f, 0x15, 0xfe, 0xd2, 0xe1, 0xbf, 0x16, 0xff, 0xeb, 0xe1, 0x5b, 0x0b, 0xfe, 0xb0, 0xe5, 0xc7, 0xb7, 0x7d, 0xd1, 0xd1, 0xa7, 0x2f, 0x7e, 0xec, 0xf1, 0xa7, 0x1e, 0xfd, 0xf2, 0xc2, 0x7f, 0xa4, 0xfe, 0xef, 0xf4, 0xd7, 0xae, 0x7d, 0x72, 0xe9, 0x57, 0xaf, 0x7f, 0xbb, 0xfa, 0xab, 0xad, 0xbe, 0x5a, 0xf5, 0xaf, 0x5d, 0xff, 0xfa, 0xf2, 0x57, 0x4d, 0x7f, 0x7e, 0xf1, 0x47, 0x9b, 0x7f, 0x75, 0xd5, 0x57, 0x57, 0x7f, 0xd8, 0xf5, 0x2f, 0x52, 0xff, 0x5a, 0xfd, 0x8f, 0xbc, 0x7d, 0xd2, 0xf3, 0x5f, 0x1a, 0xfd, 0x62, 0xd1, 0x5f, 0x1b, 0x7f, 0x75, 0xd1, 0x6f, 0x15, 0xfd, 0x47, 0xed, 0xc7, 0xfa, 0x7c, 0xf4, 0xe5, 0x57, 0x1f, 0x7d, 0xf4, 0xf1, 0x47, 0x1f, 0xfe, 0xdb, 0xd5, 0x7f, 0x7f, 0xfd, 0x4b, 0xf4, 0x2b, 0x7b, 0xfb, 0xb6, 0xd8, 0xc3, 0x6f, 0x7f, 0xfe, 0xfb, 0xa3, 0xef, 0x7e, 0xdd, 0xff, 0xd3, 0xff, 0xff, 0x65, 0xfc, 0xd7, 0xad, 0xff, 0xfd, 0xf9, 0xef, 0x5f, 0xff, 0xff, 0xf5, 0xff, 0x5f, 0xff, 0x76, 0xeb, 0xd7, 0xd5, 0xfe, 0x97, 0xfc, 0x0f, 0x76, 0x7d, 0xd5, 0xf1, 0x97, 0x5f, 0x7d, 0xf4, 0xd5, 0xc7, 0x5e, 0x7d, 0xf8, 0xd2, 0x47, 0x2f, 0xfd, 0xcf, 0xec, 0xc7, 0xba, 0xba, 0xea, 0xd1, 0xaf, 0x1e, 0x7f, 0xea, 0xd1, 0x4b, 0x5d, 0xfd, 0xc7, 0xfc, 0x3f, 0xbf, 0xfd, 0x36, 0xe9, 0xaf, 0xfb, 0xfd, 0x8e, 0xf5, 0xe7, 0xff, 0x7e, 0xfd, 0xeb, 0xd7, 0xbf, 0x7e, 0xfd, 0xef, 0xd7, 0xff, 0xfe, 0x17, 0xff, 0xd7, 0x6d, 0x7d, 0xff, 0xf5, 0xeb, 0x5f, 0x7f, 0xfd, 0xf5, 0xf7, 0x1f, 0xff, 0x75, 0xfd, 0xef, 0x6d, 0xfd, 0xeb, 0xf2, 0x8f, 0x5e, 0xfb, 0xba, 0xe1, 0x47, 0xdf, 0x7a, 0xdc, 0xdf, 0xc7, 0xff, 0x7a, 0xfc, 0xda, 0xc7, 0x5f, 0xfd, 0x5f, 0xfa, 0x87, 0x5a, 0x7f, 0xf9, 0xf1, 0xaf, 0x1f, 0xfd, 0xf6, 0xf1, 0xaf, 0x5f, 0xff, 0xc7, 0xf4, 0x3f, 0xbf, 0xfd, 0xdf, 0xe3, 0xbf, 0xf7, 0xbe, 0x56, 0xf5, 0xd7, 0x5f, 0x7f, 0xf5, 0xd2, 0x57, 0xaf, 0x7d, 0xf5, 0xeb, 0x57, 0xbf, 0xfd, 0xa2, 0xec, 0xd7, 0xdf, 0xfe, 0xee, 0xf5, 0xd7, 0x5e, 0x7f, 0xfd, 0xd5, 0xd7, 0x1f, 0xff, 0x1f, 0xff, 0x57, 0x09, 0xff, 0xf2, 0xea, 0xaf, 0xbe, 0xfa, 0xec, 0xd4, 0xc7, 0x7e, 0x7d, 0xfc, 0xf7, 0xc7, 0x5f, 0x7f, 0xfc, 0xab, 0xc7, 0xb7, 0xfd, 0xe7, 0xfc, 0x47, 0x5a, 0x7d, 0xfd, 0xd1, 0xdf, 0x1f, 0xff, 0xb5, 0xf1, 0x57, 0x5d, 0xfe, 0x37, 0xfd, 0x3f, 0x5b, 0xfe, 0xd7, 0xe3, 0xdb, 0x7f, 0x7f, 0x5b, 0xf1, 0xd7, 0x5b, 0x5f, 0xdd, 0xaa, 0x57, 0xbf, 0x7e, 0xb5, 0xdd, 0x57, 0x5f, 0xff, 0x55, 0xf5, 0xd5, 0xbd, 0xfd, 0xda, 0xf5, 0x6b, 0x5d, 0x7f, 0xff, 0xf5, 0xef, 0x9f, 0xff, 0x1f, 0xff, 0x2f, 0xaa, 0xff, 0xed, 0xeb, 0x1f, 0x55, 0x7c, 0x7a, 0xf3, 0x2f, 0x57, 0x7e, 0xf5, 0xf5, 0xd7, 0x2a, 0xfd, 0xb6, 0xf1, 0xd7, 0x5a, 0xfe, 0xea, 0xc5, 0x17, 0x17, 0xff, 0xb7, 0xf1, 0xaf, 0x1b, 0xfd, 0xb2, 0xe5, 0x5f, 0x35, 0xfe, 0x5f, 0xfb, 0x6f, 0x6d, 0xff, 0xad, 0xe2, 0xc7, 0x3e, 0x7f, 0x74, 0xf1, 0xf7, 0x1e, 0xff, 0x5a, 0xf1, 0x5f, 0x9f, 0x7f, 0xfb, 0xf2, 0x5f, 0x8f, 0xff, 0xf8, 0xf2, 0x2f, 0x5d, 0x7f, 0xf5, 0xfa, 0x5f, 0x57, 0x7f, 0xdb, 0xf8, 0xb7, 0x4f, 0xff, 0x1b, 0xff, 0x1f, 0xfb, 0xff, 0x6b, 0xeb, 0x8f, 0x40, 0x7d, 0xe5, 0xd5, 0xaf, 0xe0, 0xff, 0x4b, 0xfe, 0xff, 0x60, 0xff, 0x07, 0xfe, 0xff, 0xb0, 0xfe, 0xff, 0xff, 0xef, 0xc0, 0xfe, 0x07, 0xea, 0x7f, 0xa4, 0xff, 0x93, 0xf6, 0x3f, 0x68, 0xff, 0x27, 0xec, 0x25, 0xeb, 0xbf, 0xc8, 0xe0, 0x17, 0xe5, 0x7f, 0xb8, 0xf2, 0xff, 0xd4, 0xfe, 0x17, 0xf5, 0xaf, 0xea, 0xff, 0xaa, 0xfa, 0xaf, 0xea, 0xff, 0xf7, 0xef, 0xb7, 0xea, 0xff, 0x52, 0xfd, 0x1f, 0xe9, 0xff, 0x43, 0xfa, 0xbf, 0xa4, 0xff, 0x46, 0xfc, 0x97, 0xfe, 0xff, 0x62, 0xf5, 0x57, 0x44, 0x7f, 0xf1, 0xf2, 0xbf, 0xe1, 0xff, 0x4f, 0xfe, 0xbf, 0x40, 0xff, 0x2f, 0xf6, 0xbf, 0xa0, 0xff, 0xff, 0xff, 0xaf, 0xa4, 0xff, 0x07, 0xf5, 0x3f, 0x41, 0xff, 0x4b, 0xf6, 0x3f, 0x61, 0xff, 0x4f, 0xf9, 0x27, 0xfd, 0xff, 0x6a, 0xe1, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfd, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xd7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xfe, 0xff, 0xff, 0xfe, 0xff, 0xfa, 0xff, 0xbf, 0xff, 0xff, 0xff, 0xff, 0x5f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xfd, 0xff, 0xf7, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xfd, 0xff, 0xf5, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x6f, 0xff, 0xff, 0xff, 0xff, 0xf7, 0xfe, 0xff, 0xff, 0xff, 0xb7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xbf, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xfd, 0xff, 0xff, 0xff, 0xbf, 0xff, 0xff, 0xbf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xbf, 0xfa, 0xff, 0xff, 0xfe, 0xbf, 0xf5, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfa, 0xff, 0xff, 0xfb, 0xff, 0xeb, 0xff, 0xff, 0xff, 0x7f, 0xfb, 0xff, 0xff, 0xfa, 0xff, 0xf5, 0xff, 0xff, 0xff, 0xff, 0xfd, 0xff, 0xaf, 0xff, 0x7f, 0xfb, 0xff, 0x06, 0xfd, 0xbf, 0xf7, 0xff, 0xd7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0xf7, 0xff, 0x5f, 0xfd, 0x7f, 0xed, 0xff, 0x75, 0xff, 0xff, 0xfe, 0xff, 0xbf, 0xff, 0x7f, 0xdb, 0xff, 0xfb, 0xfe, 0xff, 0xf5, 0xff, 0xaf, 0xff, 0xbf, 0xea, 0xff, 0x57, 0xfa, 0x7f, 0xef, 0xff, 0x5f, 0xfd, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf6, 0xff, 0xff, 0xfd, 0xff, 0xab, 0xff, 0x77, 0xfd, 0xff, 0xf5, 0xff, 0x7f, 0xfd, 0xff, 0xf6, 0xff, 0xd7, 0xff, 0xbf, 0xfb, 0xff, 0xfb, 0xfe, 0x7f, 0xff, 0xff, 0xda, 0xff, 0xef, 0xfd, 0xff, 0xb7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdd, 0xff, 0x5f, 0xff, 0x7f, 0xfd, 0xff, 0xdf, 0xff, 0x7f, 0xfb, 0xff, 0xd7, 0xff, 0x5f, 0xdb, 0xff, 0x7f, 0xfd, 0x7f, 0xd7, 0xff, 0xd7, 0xff, 0xef, 0xd5, 0xff, 0x5b, 0xfd, 0x5f, 0xeb, 0xff, 0x6f, 0xff, 0x6f, 0x6b, 0xff, 0xb7, 0xfd, 0xbf, 0xf5, 0xff, 0x77, 0xfb, 0xff, 0xab, 0x7e, 0x7b, 0xf5, 0xff, 0xeb, 0xff, 0x5f, 0xfd, 0x7f, 0xfb, 0xff, 0xeb, 0xff, 0xff, 0xfa, 0xff, 0xaf, 0xff, 0xbf, 0xee, 0xff, 0xb7, 0xff, 0xff, 0xfd, 0xff, 0x5d, 0xff, 0xff, 0xbf, 0xff, 0xfe, 0xf7, 0xff, 0xdb, 0xff, 0x5d, 0xff, 0x5f, 0xdd, 0xff, 0xeb, 0xff, 0x7f, 0xfd, 0xff, 0xbf, 0xff, 0xff, 0xee, 0xff, 0x5f, 0xff, 0x5f, 0xa0, 0xff, 0x22, 0xfd, 0x2f, 0xe8, 0xff, 0x06, 0xfa, 0x17, 0xd1, 0xff, 0x45, 0xfa, 0x07, 0x04, 0xfd, 0x03, 0xf0, 0x5f, 0x90, 0xfe, 0x27, 0xe8, 0x7f, 0xa1, 0xfe, 0x0a, 0xf4, 0x6f, 0xf1, 0xff, 0x07, 0xff, 0xbf, 0xe8, 0xff, 0x25, 0xfe, 0x6f, 0xf5, 0x5f, 0x85, 0xfe, 0xb7, 0xba, 0xff, 0x2a, 0xfd, 0x5f, 0xf4, 0xff, 0x13, 0xfd, 0xa7, 0x2b, 0xbf, 0x22, 0xf5, 0xb7, 0x62, 0x7f, 0x85, 0xf6, 0x57, 0xc4, 0x7f, 0x23, 0xf7, 0x7f, 0xe8, 0xff, 0x56, 0xff, 0x7f, 0xf2, 0xff, 0x87, 0xff, 0xbf, 0x8f, 0xfe, 0x7f, 0xf5, 0xef, 0xe6, 0xff, 0xfb, 0xea, 0xdf, 0x47, 0xff, 0xfe, 0xec, 0xaf, 0xf8, 0x7c, 0xfc, 0xd1, 0x0f, 0x5f, 0xfc, 0xf8, 0xc5, 0x8f, 0x3f, 0x7a, 0xfc, 0xd4, 0xff, 0xf3, 0xff, 0x1f, 0xfd, 0xff, 0xe5, 0xff, 0x3f, 0xff, 0x6f, 0xd5, 0x7f, 0x6d, 0xfe, 0xdf, 0xa5, 0xff, 0xd7, 0xfc, 0xbb, 0xf6, 0xff, 0xeb, 0xfa, 0xdf, 0xa8, 0x7c, 0xb5, 0xf2, 0xaf, 0x95, 0xfe, 0xaa, 0xf2, 0xaf, 0x2a, 0x7e, 0x55, 0xf1, 0xff, 0xe9, 0xff, 0x9f, 0xff, 0xff, 0xf2, 0xff, 0x1f, 0xff, 0xbf, 0x4f, 0xff, 0x6d, 0xf6, 0x5f, 0x6f, 0xff, 0xbd, 0xf5, 0xef, 0xa6, 0xff, 0xae, 0xfa, 0xbb, 0xf9, 0xfc, 0xfc, 0xff, 0x1f, 0x3f, 0xfd, 0xf8, 0xc3, 0x8f, 0xbe, 0x7e, 0xf4, 0xf5, 0xff, 0xd3, 0xff, 0x3f, 0xff, 0xff, 0xf5, 0xff, 0x5f, 0xfe, 0x6f, 0xe0, 0x7f, 0x23, 0xfe, 0x35, 0xe0, 0x7f, 0x03, 0xfc, 0x37, 0xe0, 0xff, 0x45, 0xec, 0x17, 0x52, 0x3a, 0xfd, 0xfa, 0xc7, 0x2a, 0xfe, 0x92, 0xea, 0xaf, 0x25, 0x7e, 0x55, 0xf1, 0x7f, 0xf9, 0xff, 0x17, 0xff, 0xff, 0xf1, 0xff, 0x9f, 0xff, 0xaf, 0x84, 0xfe, 0x86, 0xf4, 0xaf, 0x44, 0xff, 0x56, 0xe9, 0xaf, 0x4a, 0xff, 0x8d, 0xf8, 0x77, 0xd4, 0x7c, 0xd4, 0xd7, 0x8f, 0xaa, 0xfc, 0xb2, 0xd2, 0x8f, 0x5a, 0x7a, 0xac, 0xe2, 0xff, 0xf1, 0xff, 0x3f, 0xfd, 0xff, 0xd3, 0xff, 0x1f, 0xff, 0x8f, 0xff, 0x3f, 0xfc, 0xfe, 0xc7, 0xff, 0xff, 0xb8, 0xfe, 0xd3, 0xf7, 0xbf, 0xf8, 0xef, 0xcd, 0x58, 0xff, 0x59, 0xf9, 0xaf, 0xde, 0xbf, 0xa8, 0xfb, 0x4f, 0xb7, 0x5f, 0xd9, 0xfd, 0xff, 0xf5, 0xff, 0x9f, 0xff, 0x7f, 0xf9, 0xff, 0x57, 0xff, 0xaf, 0xaa, 0xfe, 0xb8, 0xf5, 0xd7, 0x52, 0xff, 0xf2, 0xea, 0x87, 0x56, 0xff, 0xb2, 0xfa, 0xdb, 0x71, 0xfd, 0x63, 0xd1, 0x8f, 0x32, 0xfd, 0x69, 0xab, 0x8f, 0xaa, 0x7e, 0x54, 0xeb, 0xff, 0xa1, 0xff, 0x1f, 0xfd, 0xff, 0xd1, 0xff, 0x1f, 0xfe, 0x8f, 0xaf, 0x7f, 0x6d, 0xff, 0x47, 0xef, 0xff, 0xdc, 0xfd, 0xd7, 0xeb, 0xff, 0xd8, 0xf6, 0x6d, 0xaa, 0xfd, 0x8e, 0xff, 0x8f, 0xed, 0x7e, 0x5a, 0xf5, 0x4f, 0x77, 0x7b, 0xb5, 0xfd, 0xbf, 0xf5, 0xff, 0x9b, 0xef, 0xff, 0xf9, 0xff, 0x5f, 0xff, 0x2f, 0xa9, 0x7e, 0x54, 0xe8, 0x57, 0xa5, 0xfe, 0xa8, 0xd4, 0x97, 0x86, 0xfe, 0xb2, 0xd4, 0x8b, 0xa4, 0xfc, 0x2f, 0xf5, 0x7f, 0x2a, 0xfe, 0x52, 0xe3, 0x5f, 0x0c, 0x7e, 0x65, 0xd1, 0xff, 0xa2, 0xfe, 0x1b, 0xfa, 0x5f, 0x91, 0xfe, 0x15, 0xf4, 0xcf, 0x4a, 0x7f, 0x2d, 0xf7, 0xc7, 0xa4, 0xff, 0xb4, 0xf4, 0x47, 0x75, 0xff, 0xac, 0xf4, 0x55, 0x68, 0xfd, 0x4b, 0xff, 0x4f, 0xad, 0xfe, 0x65, 0xe5, 0x3f, 0xa5, 0xfe, 0x52, 0xf1, 0xaf, 0x74, 0xff, 0x96, 0xed, 0xb7, 0x69, 0xff, 0xae, 0xfb, 0x5f, 0x77, 0xfd, 0x75, 0xfd, 0xbf, 0x6f, 0xff, 0xad, 0xed, 0xff, 0xd5, 0xff, 0xab, 0xed, 0xdf, 0x6f, 0xff, 0x5f, 0xfd, 0xff, 0xdb, 0xfe, 0xdf, 0xfd, 0xff, 0xdf, 0xff, 0x7f, 0xff, 0xff, 0xd7, 0xff, 0x77, 0xfb, 0x7f, 0xef, 0xfe, 0xb7, 0xf6, 0xff, 0xaa, 0x7f, 0xaf, 0xfb, 0x6f, 0xb5, 0xff, 0x77, 0xfb, 0x57, 0x5f, 0xff, 0x7e, 0xf7, 0x6b, 0xdb, 0xff, 0xaf, 0xff, 0xbf, 0xf6, 0xff, 0xb7, 0xee, 0x7f, 0x75, 0xff, 0xab, 0xff, 0xaf, 0x6c, 0xff, 0xad, 0xee, 0xdf, 0xda, 0xff, 0xed, 0xfd, 0xaf, 0x7f, 0xff, 0x7a, 0xeb, 0xef, 0x7e, 0xff, 0xae, 0xef, 0xdf, 0xfa, 0xff, 0xd5, 0xfe, 0x6f, 0x77, 0xff, 0xab, 0xfe, 0xff, 0xad, 0xff, 0xef, 0xfd, 0xff, 0xed, 0xff, 0xef, 0xfa, 0xff, 0xed, 0xfe, 0xef, 0xfd, 0xff, 0xdb, 0xfe, 0x5f, 0xf7, 0xff, 0xfd, 0xff, 0xff, 0xff, 0xff, 0xef, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x8f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xfd, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xed, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xff, 0xff, 0xff, 0xff, 0x6f, 0xbf, 0xff, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xbf, 0xff, 0x7f, 0xfb, 0xff, 0xef, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xef, 0xff, 0xff, 0xef, 0xff, 0xef, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0x0f, 0x4a, 0xff, 0x77, 0xfd, 0x3f, 0xff, 0xff, 0x7f, 0xfc, 0xff, 0xe8, 0xff, 0xaf, 0xfb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xef, 0xff, 0xff, 0xdd, 0xff, 0xaf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf8, 0x87, 0xfe, 0xff, 0xff, 0xff, 0xaf, 0xaa, 0xff, 0xaf, 0xff, 0xef, 0xfe, 0xff, 0x7f, 0xff, 0x7f, 0xfd, 0xff, 0xdf, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xed, 0xff, 0xff, 0xf7, 0xff, 0xdb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xa5, 0xff, 0xff, 0xff, 0xff, 0x2f, 0xaa, 0xfe, 0xbd, 0xfa, 0xbf, 0xfb, 0xff, 0x6f, 0xfe, 0xff, 0xe8, 0xff, 0xb5, 0xf7, 0xff, 0xff, 0xff, 0xbf, 0xff, 0xff, 0xff, 0xff, 0xaf, 0xfe, 0xff, 0xad, 0xff, 0xaf, 0xfe, 0xff, 0xff, 0xff, 0xdf, 0xf4, 0x4f, 0xff, 0xff, 0xf7, 0xff, 0xeb, 0xd4, 0xff, 0x46, 0xfd, 0xff, 0xfa, 0xff, 0xdf, 0xfd, 0x5f, 0xb7, 0xff, 0x57, 0xfe, 0xaf, 0xaa, 0xff, 0x77, 0xff, 0xff, 0xff, 0xff, 0xbb, 0xff, 0x7f, 0xfb, 0x7f, 0xdb, 0xff, 0xaf, 0xca, 0xff, 0xbf, 0xff, 0xb7, 0xfd, 0xff, 0x67, 0xfd, 0xaf, 0x61, 0xff, 0x1d, 0xfd, 0xdf, 0xf6, 0xff, 0xaf, 0xff, 0xff, 0xee, 0xff, 0x57, 0xfc, 0xbf, 0xf7, 0xff, 0x5f, 0xff, 0xff, 0x6d, 0xff, 0x6f, 0xfb, 0xef, 0x6b, 0xff, 0x57, 0xfa, 0x7f, 0x4f, 0xff, 0x5b, 0xed, 0x7f, 0xef, 0xff, 0xe7, 0xf5, 0xdf, 0xce, 0xbe, 0xf5, 0xf6, 0x7f, 0xed, 0xff, 0x55, 0xff, 0xaf, 0xfa, 0xff, 0xad, 0xff, 0x7f, 0xed, 0xff, 0x2f, 0xff, 0x7f, 0xdb, 0xba, 0xba, 0xed, 0x5b, 0xaf, 0x5f, 0xfd, 0xfd, 0xab, 0xbb, 0xbf, 0xf6, 0xbb, 0x57, 0x75, 0xbf, 0xba, 0xeb, 0xaf, 0x9d, 0x7e, 0xdb, 0xfe, 0xff, 0xba, 0xff, 0xbf, 0xfa, 0xff, 0xaa, 0xff, 0xb7, 0xfa, 0xef, 0xaa, 0xff, 0x3f, 0xff, 0xff, 0x56, 0xff, 0xf5, 0xed, 0xdf, 0xbd, 0xfe, 0x5a, 0xf5, 0x6f, 0xaf, 0xfe, 0x6d, 0xeb, 0x6f, 0xed, 0xff, 0x76, 0xdb, 0xef, 0xc6, 0xff, 0x56, 0xfb, 0xaf, 0xf5, 0x7f, 0x53, 0xff, 0xaf, 0xf5, 0x7f, 0x6b, 0xff, 0x5f, 0xfb, 0xff, 0x47, 0xff, 0x6f, 0xb5, 0x7e, 0xbb, 0xfa, 0xb7, 0xd7, 0xbe, 0xfe, 0xf6, 0xaf, 0x7b, 0x7f, 0xf5, 0xb6, 0x5f, 0x6b, 0x7f, 0xf5, 0xf6, 0x9f, 0x14, 0xfc, 0xd0, 0xea, 0x2f, 0xa6, 0xfe, 0x66, 0xf2, 0x3f, 0x46, 0xff, 0x6a, 0xea, 0x5b, 0x26, 0xff, 0xdf, 0xfd, 0x5f, 0x4e, 0xfd, 0xf2, 0xd5, 0x8f, 0xde, 0x7e, 0xd4, 0xf5, 0x2f, 0x57, 0xfd, 0xd9, 0xe2, 0x3f, 0x15, 0xfd, 0xe9, 0xe2, 0x6f, 0x42, 0xbf, 0xaa, 0xec, 0xb7, 0xa5, 0x7f, 0x59, 0xee, 0x53, 0xab, 0x7f, 0x51, 0xfa, 0x97, 0x65, 0xff, 0xbe, 0xf7, 0x6f, 0xd5, 0xbe, 0xfc, 0xf6, 0xab, 0xaf, 0x7f, 0x7d, 0xfd, 0xcb, 0xdf, 0x7e, 0xf7, 0xfd, 0x37, 0x7f, 0xff, 0xb6, 0xdd, 0x6f, 0x08, 0xfc, 0xa1, 0xec, 0x2f, 0x4d, 0x7f, 0xd3, 0xf8, 0x57, 0xa6, 0xfe, 0x73, 0xf5, 0x37, 0xcb, 0xfe, 0xb7, 0xfe, 0x5f, 0x8c, 0xfe, 0xe8, 0xea, 0x0f, 0x3d, 0x7d, 0xf4, 0xe5, 0x0f, 0xbd, 0xfe, 0xaa, 0xeb, 0x3f, 0x5b, 0xfd, 0xed, 0xf5, 0x8f, 0xbf, 0x7e, 0xff, 0xfb, 0xc5, 0x57, 0x7d, 0x7c, 0xd5, 0xc7, 0x1f, 0x5f, 0xdc, 0xf1, 0xc7, 0x1d, 0xbf, 0x40, 0xe0, 0x8b, 0xab, 0xfe, 0xfb, 0xeb, 0xff, 0xef, 0xde, 0xbb, 0xfa, 0xff, 0xd7, 0xfe, 0x67, 0xfc, 0xef, 0xfe, 0xfe, 0xa7, 0xfc, 0xaf, 0x3e, 0xfe, 0x68, 0xd3, 0x4f, 0x1f, 0x7f, 0xf9, 0xf1, 0x57, 0x3b, 0xfd, 0xbc, 0xe5, 0x97, 0x5f, 0xfd, 0x14, 0xc5, 0xaf, 0x3b, 0xfc, 0x6a, 0xef, 0xaf, 0xae, 0x7e, 0xfd, 0xf7, 0xaf, 0xbe, 0xfe, 0x1f, 0xfd, 0x2f, 0x15, 0xfd, 0x2f, 0xfd, 0x8f, 0xbb, 0xfe, 0xfb, 0xed, 0xe7, 0x5f, 0x7f, 0xee, 0xf5, 0xc7, 0x4f, 0x3f, 0xfd, 0xf9, 0xe7, 0x1d, 0xff, 0xff, 0xff, 0x8f, 0x56, 0x7f, 0xfb, 0xe9, 0xd7, 0xbf, 0x7f, 0x7b, 0xf5, 0xd7, 0x6f, 0xff, 0x57, 0xff, 0x3f, 0x9b, 0xff, 0x97, 0xff, 0xaf, 0x3f, 0xfc, 0xaa, 0xeb, 0x47, 0x1b, 0x7d, 0xfc, 0xd1, 0x57, 0x1f, 0x7f, 0xf4, 0xd1, 0x8f, 0x5b, 0xff, 0xef, 0xfe, 0x9f, 0x35, 0xfa, 0xd6, 0xdb, 0xbf, 0x76, 0xfd, 0xea, 0xed, 0xaf, 0x6e, 0xfd, 0x1f, 0xfa, 0x6f, 0xa2, 0xfe, 0x1f, 0xfd, 0x8f, 0xad, 0xfe, 0xfe, 0xf6, 0xd7, 0x5f, 0x7f, 0xad, 0xf5, 0xe7, 0x5d, 0x7f, 0xdd, 0xf5, 0xe5, 0x1f, 0xff, 0xbb, 0xff, 0xa7, 0xba, 0xfe, 0x7d, 0xf7, 0xcf, 0x5f, 0x7f, 0xbf, 0xfa, 0xdf, 0xdf, 0xfe, 0x5b, 0xff, 0x3f, 0x64, 0xff, 0x57, 0xff, 0x2f, 0x3f, 0xfd, 0xe9, 0xad, 0x97, 0x16, 0x7f, 0xf8, 0xf1, 0x47, 0x2f, 0x7e, 0x74, 0xf1, 0x8f, 0x56, 0xfd, 0x1f, 0xff, 0x0f, 0x2e, 0xfe, 0x69, 0xd5, 0x5f, 0x5a, 0xfd, 0xf4, 0xeb, 0x5f, 0xba, 0xfe, 0x57, 0xff, 0xd7, 0xff, 0xff, 0x5f, 0xff, 0xcf, 0xaa, 0xbe, 0xb6, 0xf3, 0xc7, 0x5b, 0x7f, 0x55, 0xf5, 0xd7, 0x9a, 0x7f, 0xd5, 0xf2, 0xd3, 0x2f, 0xff, 0x97, 0xfe, 0xaf, 0x5a, 0xff, 0xf6, 0xea, 0xaf, 0xb7, 0x7e, 0x5b, 0xf5, 0xaf, 0xaf, 0xfd, 0xdf, 0xff, 0xbf, 0xf6, 0xff, 0x55, 0xff, 0x5f, 0xc0, 0xfe, 0xe0, 0xa4, 0x3f, 0xc2, 0xfe, 0x13, 0xed, 0x9f, 0xa0, 0xff, 0x15, 0xfe, 0x37, 0xe0, 0xff, 0xbf, 0xff, 0x5f, 0x41, 0xfd, 0x07, 0xa2, 0x7f, 0x04, 0xfa, 0x13, 0xd0, 0x7f, 0x00, 0xfa, 0x02, 0xfe, 0x2b, 0xfd, 0xff, 0x47, 0xfe, 0x7f, 0x55, 0xbf, 0xaa, 0xe0, 0x97, 0xe8, 0x7f, 0x4b, 0xfe, 0x37, 0x75, 0x7f, 0x43, 0xf5, 0x9f, 0xa4, 0xff, 0xff, 0xff, 0x37, 0xd4, 0xff, 0x55, 0xe9, 0x7f, 0x50, 0xfe, 0x42, 0xf5, 0x7f, 0x2a, 0xff, 0xad, 0xff, 0x97, 0xfa, 0x7f, 0x95, 0xff, 0x6f, 0xc2, 0xff, 0xe0, 0xa5, 0x3f, 0xa9, 0xff, 0x4b, 0xfa, 0x7f, 0xe0, 0xff, 0x2b, 0xfe, 0x3f, 0x64, 0xff, 0x5f, 0xff, 0x6f, 0x42, 0xff, 0x07, 0xa2, 0x7f, 0x45, 0xfa, 0x97, 0xd0, 0xff, 0x20, 0xfa, 0x05, 0xff, 0x3f, 0xfb, 0xff, 0x15, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfd, 0xff, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xaf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xfe, 0xd7, 0xfe, 0xff, 0xf6, 0xff, 0xff, 0xbf, 0xff, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xbf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xd5, 0xff, 0xbf, 0xfb, 0xff, 0x56, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xef, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xbf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xef, 0xb5, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xbf, 0xe2, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xaf, 0xff, 0xbf, 0xaa, 0xff, 0xfb, 0xff, 0xa7, 0x9e, 0xff, 0xff, 0xff, 0xff, 0xfb, 0xff, 0xff, 0xff, 0xff, 0xbf, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xef, 0xab, 0xff, 0xee, 0xff, 0xff, 0xf7, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0xff, 0xff, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x97, 0x25, 0xfe, 0xff, 0xff, 0x7f, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xef, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfa, 0xe2, 0x5f, 0xef, 0xff, 0x6f, 0xfb, 0xff, 0xff, 0xff, 0xdf, 0xfe, 0xef, 0xff, 0xff, 0xd7, 0xff, 0x5f, 0xd5, 0xff, 0xed, 0xff, 0xc3, 0x96, 0xff, 0xbf, 0xff, 0xd7, 0xdb, 0xff, 0xff, 0xff, 0xff, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xdf, 0x7f, 0x47, 0xab, 0x9f, 0xb7, 0xff, 0xfd, 0xed, 0x6f, 0xdb, 0xff, 0x8f, 0xff, 0x0b, 0xfe, 0xff, 0x4f, 0xfb, 0x7f, 0xf6, 0xff, 0xb3, 0xff, 0x57, 0x2b, 0xff, 0xff, 0xfa, 0x23, 0x24, 0xfa, 0x7f, 0xff, 0xff, 0x0b, 0xfa, 0xbf, 0xff, 0xaf, 0xd7, 0xbf, 0xe5, 0xe1, 0xd7, 0xaa, 0x7f, 0xaf, 0xf6, 0xf7, 0xff, 0xfe, 0xcb, 0xfe, 0x2f, 0xff, 0xff, 0xd6, 0xff, 0x1f, 0xab, 0x7f, 0xf3, 0xff, 0x53, 0x9b, 0xff, 0xbf, 0xfe, 0x2b, 0x81, 0xfe, 0xd7, 0xff, 0xff, 0x4f, 0xff, 0xd7, 0xff, 0xaf, 0xce, 0xbf, 0xb8, 0xfc, 0x9f, 0xf7, 0xbf, 0x90, 0xa0, 0x0d, 0x00, 0xff, 0xbf, 0xdb, 0xdb, 0xfa, 0x7f, 0x0b, 0xd5, 0x7f, 0xf7, 0xff, 0xd5, 0xdb, 0x8f, 0x60, 0xfd, 0xbf, 0xff, 0xff, 0x7e, 0xff, 0x2d, 0xf4, 0xf7, 0x97, 0xff, 0x9f, 0xff, 0x87, 0xef, 0xbf, 0xd4, 0x7c, 0x9b, 0x55, 0x3f, 0x44, 0xb2, 0x27, 0x22, 0xfd, 0xd6, 0xfe, 0x6f, 0xff, 0xbf, 0xcd, 0xfa, 0x37, 0xdb, 0xff, 0xf5, 0xfd, 0xc5, 0xaa, 0xff, 0xbf, 0xfd, 0xdf, 0xeb, 0xff, 0x17, 0xff, 0xfd, 0x95, 0xff, 0xd7, 0xff, 0xaf, 0xcb, 0x7e, 0x79, 0xed, 0xaf, 0xb6, 0x3d, 0x11, 0xc9, 0x8f, 0x14, 0xbf, 0xbf, 0xd6, 0x5f, 0xfd, 0x7f, 0x15, 0xed, 0x3f, 0x75, 0x7d, 0x63, 0xd7, 0xa7, 0xa0, 0xfe, 0xff, 0xfe, 0xff, 0xb2, 0xff, 0x55, 0xf4, 0xf7, 0xaf, 0xfe, 0x9f, 0xfe, 0xb3, 0xcd, 0xbf, 0xdc, 0xf4, 0x03, 0x91, 0xfe, 0xd7, 0xfc, 0xc7, 0x9f, 0x7f, 0x00, 0xe1, 0x8b, 0xf6, 0x5f, 0x8b, 0xf1, 0x15, 0x53, 0x7f, 0x29, 0xd0, 0x53, 0x1f, 0xf6, 0xaf, 0xfe, 0x6f, 0xfb, 0x7d, 0xad, 0xf5, 0xf3, 0xd5, 0xff, 0xe3, 0xff, 0xd3, 0xd6, 0xff, 0xf2, 0xec, 0x55, 0x0a, 0xfe, 0x67, 0xfd, 0xd7, 0x2d, 0xbd, 0x8a, 0xc8, 0x2f, 0xfa, 0xbf, 0x4d, 0xd5, 0xaf, 0x52, 0x7b, 0x0b, 0xc5, 0x8d, 0x95, 0xfc, 0x7f, 0xfb, 0xff, 0x6d, 0xf7, 0x5b, 0xb3, 0xa7, 0xaf, 0xff, 0xaf, 0xff, 0xbf, 0xf2, 0xbf, 0x7d, 0xe2, 0x9f, 0xeb, 0xff, 0xbb, 0xff, 0xc3, 0x9e, 0xff, 0xa5, 0xef, 0x6f, 0xfb, 0xbf, 0xcd, 0xf1, 0x35, 0xab, 0xbd, 0xed, 0xfe, 0x57, 0xed, 0xff, 0xbf, 0xff, 0x55, 0xb1, 0x7d, 0xea, 0xcd, 0xeb, 0xf1, 0xff, 0xe3, 0xff, 0x6f, 0xd5, 0xff, 0xfa, 0xe8, 0x97, 0xbb, 0xff, 0x57, 0xfd, 0xaf, 0x5f, 0xfe, 0x9e, 0xda, 0xbb, 0xf5, 0xff, 0x96, 0xd5, 0xaf, 0xd2, 0xfe, 0x7a, 0xfa, 0x2d, 0x55, 0xfd, 0x7f, 0xfd, 0xdb, 0x54, 0x7b, 0x5e, 0xcb, 0xa7, 0xab, 0xff, 0xd7, 0xff, 0x7f, 0xf1, 0xbf, 0xbe, 0xea, 0x9f, 0xad, 0xff, 0x5f, 0xff, 0xc7, 0x1f, 0x7f, 0x87, 0xeb, 0xaf, 0xfa, 0x5f, 0xcb, 0xf0, 0x35, 0xb3, 0xb6, 0x2e, 0xff, 0xb7, 0xde, 0xfe, 0xbf, 0xff, 0x6f, 0xd1, 0x7d, 0xe6, 0xeb, 0xf7, 0xf3, 0xff, 0xe7, 0xff, 0x7f, 0xe9, 0xff, 0xfb, 0xa9, 0xab, 0xd6, 0xff, 0xd7, 0xff, 0xa7, 0x57, 0xff, 0xfb, 0xda, 0x6b, 0xfe, 0xbf, 0x9a, 0xd5, 0x3f, 0xed, 0xff, 0x7b, 0xfd, 0x2f, 0x20, 0xff, 0x3f, 0xfc, 0xff, 0xff, 0x7f, 0xeb, 0xce, 0x7f, 0xd5, 0xff, 0xf5, 0xfa, 0xbf, 0xf9, 0x3f, 0x5d, 0xfc, 0x9f, 0xfb, 0xff, 0xdb, 0xff, 0xe5, 0x1f, 0xff, 0xab, 0xdb, 0x5b, 0xfe, 0xdf, 0x86, 0xf4, 0x2f, 0xb7, 0xbf, 0xae, 0xff, 0x97, 0x12, 0xff, 0x9f, 0xfe, 0xbf, 0xf2, 0xbe, 0x65, 0xcb, 0xdf, 0xf5, 0xff, 0xb7, 0xfe, 0x7f, 0x42, 0xff, 0xf7, 0xef, 0xaf, 0xab, 0xff, 0x6f, 0xff, 0x97, 0x5e, 0xff, 0x5f, 0xf1, 0x8f, 0xf7, 0xff, 0xad, 0xd5, 0x7f, 0xeb, 0xff, 0x8f, 0xfe, 0xef, 0xdf, 0xff, 0x7f, 0xfe, 0xff, 0xdd, 0xbf, 0xfe, 0xed, 0x7f, 0xfa, 0xff, 0xed, 0xe1, 0x5f, 0xf8, 0x3f, 0xb5, 0xfa, 0x97, 0xad, 0xff, 0xf5, 0xff, 0xc7, 0x97, 0xff, 0xd2, 0xf9, 0xa3, 0xfa, 0xbf, 0x8e, 0xfd, 0x17, 0xfb, 0xff, 0xab, 0xff, 0x57, 0x55, 0xff, 0x2f, 0xff, 0xff, 0xf5, 0xbf, 0xea, 0xed, 0x6f, 0xfc, 0x7f, 0x6d, 0xf5, 0x7f, 0xc5, 0xfe, 0xdd, 0xfe, 0xbf, 0xf6, 0xff, 0xaf, 0xff, 0xad, 0x3d, 0xfd, 0xaf, 0xd2, 0x9f, 0xfe, 0xfe, 0xad, 0xeb, 0x7f, 0xab, 0xff, 0x8f, 0xff, 0xef, 0x6f, 0xff, 0x3f, 0xfe, 0x7f, 0xf7, 0xff, 0x6d, 0xd7, 0x7f, 0xfd, 0xff, 0xf7, 0xf1, 0x8f, 0x2f, 0xbe, 0x68, 0xff, 0x97, 0xab, 0xff, 0xea, 0xff, 0xc7, 0x16, 0xbf, 0x6a, 0xfa, 0xab, 0x82, 0xfe, 0x8f, 0xff, 0x43, 0xfb, 0xff, 0xfb, 0xff, 0x7f, 0xa5, 0xff, 0xef, 0xff, 0xdf, 0xf9, 0x3f, 0xf4, 0xf0, 0x5f, 0xfd, 0xbf, 0x28, 0xd8, 0x97, 0x8a, 0xfa, 0x5a, 0xff, 0x1f, 0xf5, 0xff, 0xf6, 0xff, 0x57, 0x55, 0xff, 0x75, 0xfa, 0xaf, 0x51, 0xfb, 0xaf, 0xfe, 0xcf, 0xd7, 0xff, 0xd6, 0xff, 0xff, 0x65, 0xff, 0x37, 0xfd, 0xff, 0xf6, 0x7f, 0xb9, 0xf5, 0xb7, 0xff, 0x7f, 0xb3, 0xd2, 0xf3, 0xff, 0xfe, 0xd7, 0xff, 0xdf, 0xad, 0xbf, 0xfe, 0xff, 0xd7, 0x5f, 0x5f, 0x7d, 0xff, 0xfb, 0xdd, 0xfb, 0xa7, 0xff, 0xf5, 0xfa, 0xff, 0xfb, 0xff, 0xbf, 0xe6, 0xff, 0xd5, 0xff, 0x7f, 0xfa, 0xff, 0x1f, 0xff, 0xd3, 0xff, 0x3f, 0xdd, 0xcd, 0xd7, 0x7f, 0xff, 0xf6, 0xff, 0x1f, 0xf5, 0xff, 0xf5, 0xff, 0xdf, 0xfe, 0xdf, 0xfe, 0xff, 0xaf, 0xbf, 0xfe, 0x9f, 0xff, 0xdb, 0xef, 0xff, 0xfe, 0xff, 0xff, 0xea, 0xff, 0xcf, 0xff, 0x7f, 0xf7, 0xff, 0x9b, 0xfe, 0x67, 0xff, 0x7f, 0x6a, 0xd7, 0xf3, 0xbf, 0xfb, 0xb7, 0xff, 0x97, 0xb7, 0x7f, 0xfd, 0xff, 0xe7, 0x5f, 0xff, 0x7e, 0xfb, 0xfb, 0xab, 0xff, 0x8f, 0xff, 0xfd, 0xf7, 0x7f, 0xf7, 0xff, 0xff, 0xe3, 0xff, 0xe5, 0xff, 0xbf, 0xf5, 0xff, 0x5f, 0xff, 0xeb, 0xff, 0xbf, 0xb6, 0xcb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfd, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xbf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xef, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff }; xscreensaver-5.36/hacks/images/matrix1b.xbm000644 000767 000024 00000054502 10046031372 020735 0ustar00jwzstaff000000 000000 #define matrix1b_width 160 #define matrix1b_height 182 static unsigned char matrix1b_bits[] = { 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0xff, 0xff, 0xf7, 0xef, 0xff, 0xff, 0xff, 0xff, 0xdf, 0x7f, 0xff, 0xfd, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xff, 0x7f, 0xff, 0xfa, 0xef, 0x9f, 0xbf, 0xff, 0xff, 0xf7, 0xff, 0xff, 0xff, 0xfd, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x3f, 0x7f, 0xfb, 0xd1, 0xf7, 0xff, 0xff, 0xfe, 0xff, 0xef, 0x7f, 0x7f, 0xfc, 0xf7, 0xff, 0xff, 0xff, 0xff, 0xef, 0xff, 0x7f, 0x7f, 0xff, 0xeb, 0xd7, 0x5f, 0xff, 0xfd, 0xff, 0xef, 0xff, 0xfe, 0xf9, 0xf7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x3f, 0xff, 0xff, 0xeb, 0x6f, 0xff, 0x7f, 0xff, 0xff, 0xef, 0xff, 0xfe, 0xfc, 0xf5, 0xff, 0xff, 0xff, 0xff, 0xf7, 0xff, 0x7f, 0xff, 0xff, 0xd5, 0xbf, 0x5f, 0xff, 0xfa, 0xff, 0xef, 0xff, 0xfe, 0xfb, 0xc1, 0xff, 0x1f, 0xfc, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xe5, 0xd7, 0xbf, 0x7e, 0xfd, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf7, 0xff, 0xff, 0xff, 0xff, 0xfd, 0xff, 0xff, 0xff, 0xff, 0xed, 0x37, 0xff, 0xff, 0xf2, 0xff, 0xef, 0xff, 0xfe, 0xff, 0xf7, 0xff, 0xff, 0xff, 0xff, 0xfd, 0xff, 0x7f, 0xff, 0xff, 0xf5, 0xcf, 0xbf, 0xbe, 0xfa, 0xff, 0xff, 0xbf, 0xff, 0xff, 0xf7, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf6, 0xff, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfd, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xf5, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xaf, 0x9f, 0x7f, 0xfd, 0xeb, 0x5f, 0x9f, 0xfe, 0xf5, 0xea, 0xd7, 0x5f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfb, 0xbf, 0x3f, 0xff, 0xf2, 0xd7, 0xbf, 0xbf, 0xff, 0xfc, 0xdf, 0x2f, 0x7f, 0xfd, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xeb, 0xeb, 0x7f, 0xff, 0xff, 0xfd, 0xaf, 0xdf, 0x7e, 0xff, 0xeb, 0xfb, 0xdf, 0xfd, 0xff, 0xff, 0x5f, 0xff, 0xbf, 0xff, 0xf6, 0x7f, 0x7f, 0xff, 0xf7, 0xcf, 0x6f, 0x9f, 0x7e, 0xfa, 0xff, 0x57, 0xdf, 0xfd, 0xfd, 0xef, 0xff, 0xdf, 0x7e, 0xfd, 0xef, 0xfb, 0x7f, 0xff, 0xf9, 0xf7, 0xbf, 0x7f, 0xfd, 0xfa, 0xef, 0xcf, 0xbf, 0xfe, 0xfe, 0xff, 0xf3, 0xbf, 0xff, 0xfb, 0xf7, 0xb7, 0x7e, 0xff, 0xfd, 0xd7, 0x67, 0xff, 0x7d, 0xf3, 0xff, 0x5f, 0xbf, 0xfc, 0xff, 0xff, 0xe7, 0x6f, 0xfd, 0xf3, 0xf7, 0xff, 0x7f, 0xff, 0xfe, 0xff, 0x97, 0xff, 0x7e, 0xf7, 0xf7, 0x7b, 0xbf, 0xfe, 0xff, 0xff, 0xdf, 0xbf, 0xfe, 0xfe, 0xfb, 0x6b, 0x7f, 0x7f, 0xfd, 0xaf, 0x3f, 0xfe, 0xfd, 0xf6, 0xff, 0xeb, 0xff, 0xfc, 0xff, 0xff, 0xbb, 0xff, 0xfd, 0xfa, 0xff, 0xdf, 0x5f, 0xbf, 0xf6, 0xea, 0xaf, 0xaf, 0x7e, 0xfb, 0xfb, 0xaf, 0x5e, 0xff, 0xfd, 0xf7, 0x7f, 0xff, 0xff, 0xff, 0xf7, 0xbf, 0x7f, 0xfd, 0xfe, 0xff, 0xbf, 0xbf, 0xff, 0xfa, 0xfb, 0xdf, 0xff, 0xff, 0xff, 0xef, 0xff, 0xff, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfb, 0xfb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0xff, 0xff, 0xfb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xd7, 0xdf, 0xbf, 0xff, 0xfb, 0xdb, 0xaf, 0x7e, 0xfd, 0xf7, 0xf7, 0xdf, 0xff, 0xfa, 0xfd, 0xf7, 0xef, 0xff, 0xfb, 0xff, 0xaf, 0x3f, 0x7f, 0xf4, 0xab, 0x77, 0xbf, 0x7d, 0xf3, 0xd5, 0xb7, 0x3e, 0xfe, 0xf5, 0xd5, 0xcf, 0xdf, 0x59, 0xf7, 0xea, 0x9f, 0x5f, 0xbf, 0xf7, 0xde, 0x5d, 0x6f, 0xfd, 0xfe, 0xde, 0x7b, 0xbf, 0xff, 0xff, 0xee, 0xf7, 0xcf, 0xbe, 0xf5, 0xdf, 0xbb, 0xff, 0x7e, 0xf5, 0xfe, 0x7b, 0xef, 0xde, 0xf5, 0xfe, 0x6b, 0xbf, 0xff, 0xf5, 0xf5, 0xef, 0x9f, 0xb9, 0xf6, 0xdc, 0x97, 0x5f, 0x7f, 0xf3, 0xfe, 0xff, 0x5f, 0x7f, 0x7f, 0xdf, 0xaf, 0xbf, 0xff, 0xff, 0xf1, 0xff, 0x4f, 0x7c, 0x75, 0xff, 0x57, 0xff, 0xfe, 0xf6, 0xfe, 0xfb, 0x1e, 0x7e, 0xf8, 0xfc, 0x77, 0x3f, 0xff, 0xff, 0xe5, 0xef, 0x5f, 0xfd, 0xf2, 0xee, 0xaf, 0x0f, 0xbd, 0x7b, 0xff, 0x77, 0xff, 0xff, 0xff, 0xce, 0xdb, 0xff, 0xff, 0xfd, 0xfb, 0xf7, 0xef, 0xdd, 0xf5, 0xbe, 0x77, 0xdf, 0x7d, 0xf7, 0xfd, 0x7f, 0x5f, 0xbd, 0xfe, 0xdd, 0xbb, 0x3e, 0xbf, 0xfb, 0xd6, 0xaf, 0xae, 0xb9, 0xf3, 0xef, 0xef, 0xaf, 0x3c, 0xf5, 0xab, 0xa9, 0xef, 0x7e, 0xff, 0xeb, 0x77, 0xdf, 0x5f, 0xfd, 0xfe, 0x67, 0xef, 0xbd, 0xfb, 0xda, 0x9f, 0xef, 0xfd, 0xfd, 0xfb, 0xef, 0xaf, 0xbd, 0xfe, 0xff, 0xef, 0x5f, 0xfe, 0xfd, 0xad, 0x5f, 0xdf, 0x7f, 0xf7, 0xfb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf7, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0xff, 0xff, 0xff, 0xeb, 0xbf, 0xbf, 0xfa, 0xeb, 0xab, 0xef, 0xbe, 0xfb, 0xde, 0xbb, 0xef, 0x7e, 0xf5, 0xf9, 0xf7, 0x7f, 0xff, 0xfd, 0xff, 0x87, 0x3f, 0x7d, 0xfa, 0xcb, 0x03, 0xcf, 0x7d, 0xe7, 0x9a, 0x33, 0xde, 0xf8, 0xf4, 0xfb, 0xff, 0x7f, 0xfe, 0xfd, 0xff, 0x7b, 0xef, 0x9e, 0xff, 0xee, 0x6d, 0xef, 0xbc, 0xf7, 0xda, 0x77, 0xaf, 0xbd, 0xf3, 0xfb, 0xf7, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xee, 0x7d, 0xf3, 0xdd, 0x4f, 0xff, 0x7d, 0xff, 0xd2, 0xaf, 0x7f, 0x7f, 0xff, 0xfb, 0xef, 0xff, 0xfe, 0xfa, 0xff, 0xb7, 0xf7, 0xfb, 0xfa, 0xf5, 0xeb, 0xef, 0xbd, 0xf7, 0xd4, 0xd7, 0x3f, 0xff, 0xf5, 0xfb, 0xff, 0x7f, 0xff, 0xff, 0xff, 0x87, 0xef, 0xbf, 0xfa, 0xcd, 0xcf, 0xef, 0xfd, 0xfe, 0x95, 0xaf, 0x7f, 0xfe, 0xfd, 0xfb, 0xdf, 0x7f, 0xff, 0xff, 0xff, 0x77, 0xaf, 0x7d, 0xfd, 0xe7, 0xff, 0xff, 0xfc, 0xfd, 0xcc, 0xbf, 0x7f, 0xff, 0xfe, 0xfd, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xef, 0x3f, 0xbd, 0xea, 0xde, 0xcf, 0xdf, 0xfd, 0xfa, 0xed, 0x67, 0x7f, 0xff, 0xf4, 0xfb, 0xbf, 0x7f, 0xff, 0xff, 0xff, 0xf3, 0x5f, 0xbe, 0x7b, 0xea, 0xef, 0xef, 0xfe, 0xfd, 0xdd, 0x3b, 0x3f, 0x7f, 0xeb, 0xfb, 0x7f, 0x7f, 0xff, 0xff, 0xff, 0xef, 0xdf, 0x7c, 0xf7, 0xef, 0xdf, 0xbf, 0xff, 0xfd, 0xff, 0x77, 0x7f, 0x7f, 0xff, 0xf7, 0xff, 0xff, 0xfe, 0xff, 0xd4, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xbf, 0xff, 0xff, 0xbf, 0xff, 0xff, 0xfa, 0xff, 0xfb, 0xbf, 0xff, 0xfe, 0xfe, 0xe7, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xff, 0xbf, 0xff, 0xff, 0xbf, 0xff, 0xff, 0xfa, 0xff, 0xf7, 0x7f, 0xff, 0xfa, 0xfd, 0xcf, 0xff, 0xff, 0xff, 0xff, 0xef, 0xff, 0x7f, 0xff, 0xff, 0x7f, 0xff, 0xff, 0xfe, 0xfb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xdf, 0xff, 0xff, 0xff, 0xff, 0x5f, 0xfe, 0xf0, 0xc5, 0x8b, 0xaf, 0x7e, 0xf4, 0xc7, 0x85, 0x5f, 0xff, 0xf8, 0xea, 0xdf, 0x1f, 0xbc, 0xfa, 0xf5, 0xff, 0x1f, 0x3f, 0x7b, 0xed, 0x77, 0x4f, 0x7d, 0x7b, 0xd5, 0xb7, 0xbf, 0xff, 0xfd, 0xeb, 0xdf, 0x47, 0x5e, 0x7b, 0xd5, 0xff, 0xff, 0x7e, 0x67, 0xdd, 0xd5, 0xcf, 0xfc, 0xfe, 0xed, 0x77, 0x7f, 0xff, 0xfb, 0xe3, 0xdf, 0xff, 0x7a, 0xf7, 0xde, 0xff, 0x0f, 0xfe, 0xf7, 0xfe, 0x7b, 0x2f, 0xfe, 0x7f, 0xd6, 0xbf, 0xbf, 0xff, 0xfb, 0xf9, 0xdf, 0x5f, 0xff, 0xfd, 0xee, 0xff, 0xff, 0xbc, 0xf6, 0xfc, 0xdb, 0xcf, 0xfd, 0xfe, 0xeb, 0x77, 0x7f, 0xff, 0xfb, 0xe7, 0xdf, 0xff, 0xba, 0xeb, 0xdd, 0xff, 0xcf, 0x7e, 0xf5, 0xeb, 0x9b, 0x6f, 0xbe, 0xfe, 0xdd, 0xbb, 0x3f, 0xff, 0xff, 0xed, 0xcf, 0x4f, 0xbf, 0x77, 0xd5, 0xff, 0x9f, 0x7d, 0xfb, 0xd7, 0x37, 0xdf, 0xfe, 0xfa, 0xfb, 0x73, 0x7f, 0x7d, 0xfd, 0xdd, 0x9f, 0xff, 0xba, 0xf6, 0xf7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf7, 0xff, 0xbf, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf3, 0xdf, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xeb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xdf, 0xbf, 0xff, 0xff, 0xff, 0x93, 0x3f, 0xbc, 0xf4, 0xd3, 0x87, 0x6f, 0x3d, 0xe2, 0x9a, 0x13, 0x6f, 0xf9, 0xf0, 0xf3, 0xdf, 0x7f, 0xff, 0xff, 0xff, 0x73, 0xe7, 0x7e, 0xfb, 0xf9, 0xfb, 0xe7, 0xbf, 0xf7, 0xce, 0xf7, 0xe7, 0xbc, 0xfb, 0xfb, 0xdf, 0x7f, 0xff, 0xfe, 0xff, 0x6f, 0xcf, 0x7d, 0xfe, 0xd3, 0xef, 0x6f, 0xfd, 0xfd, 0xb5, 0x8f, 0xaf, 0x7f, 0xfd, 0xf3, 0xdf, 0x7f, 0x7e, 0xf1, 0xff, 0xb3, 0xbe, 0xfe, 0xff, 0xe9, 0xf7, 0xff, 0x7f, 0xfb, 0xea, 0xe7, 0xbf, 0xfe, 0xfa, 0xff, 0xdf, 0xff, 0xbf, 0xff, 0xff, 0xd7, 0x7f, 0x7d, 0xfe, 0xdf, 0xef, 0x6f, 0xfd, 0xf6, 0xcb, 0xcf, 0xbf, 0xff, 0xfe, 0xf3, 0xdf, 0x7f, 0xff, 0xff, 0xff, 0xf7, 0xff, 0xbe, 0xff, 0xd5, 0xaf, 0xdf, 0xfc, 0xfd, 0xfd, 0xb7, 0xdf, 0x7f, 0xf5, 0xff, 0xff, 0xbf, 0xff, 0xff, 0xff, 0xeb, 0xff, 0x7d, 0xfa, 0xeb, 0xbf, 0xbf, 0xfd, 0xff, 0xef, 0x7b, 0x9f, 0x7f, 0xf9, 0xfb, 0xff, 0x7f, 0xff, 0xff, 0xff, 0xf7, 0x7f, 0xfd, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xef, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x8b, 0xff, 0xff, 0xfd, 0xf7, 0xff, 0xff, 0xfd, 0xfe, 0xe9, 0xff, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xff, 0x01, 0xff, 0xff, 0xfd, 0xe7, 0xff, 0x4f, 0xfd, 0xfd, 0xeb, 0xff, 0x5f, 0xfe, 0xfa, 0xff, 0xff, 0xff, 0xff, 0xf8, 0xf7, 0x83, 0xff, 0x7f, 0xfa, 0xfd, 0x57, 0xdf, 0xfe, 0xfe, 0xfd, 0xff, 0x8f, 0xfa, 0xfb, 0xff, 0xff, 0xff, 0x3f, 0xea, 0xfb, 0x01, 0xff, 0xff, 0xfb, 0xfb, 0xb7, 0xbf, 0xfc, 0xfd, 0xe9, 0xff, 0xbf, 0xfe, 0xfa, 0xf7, 0x4b, 0xff, 0x7f, 0xfa, 0xff, 0x83, 0xff, 0xbf, 0xfe, 0xfe, 0x6f, 0x9f, 0xfe, 0x7e, 0xea, 0xff, 0xcf, 0x7d, 0xfb, 0xdd, 0x97, 0xff, 0xff, 0xea, 0xff, 0x03, 0x7f, 0xff, 0xff, 0xf1, 0x6f, 0x3f, 0xff, 0xff, 0xca, 0xff, 0x1f, 0xfb, 0xfa, 0xeb, 0x7f, 0x2f, 0xbd, 0xfc, 0xff, 0x81, 0xff, 0x7f, 0xfd, 0xfd, 0xbb, 0x3f, 0xff, 0xfe, 0xf7, 0xff, 0x4f, 0xfe, 0x7c, 0xea, 0xbf, 0xff, 0x7f, 0xeb, 0xff, 0x03, 0x3f, 0xfe, 0xf9, 0xea, 0x57, 0x7f, 0xfe, 0xfd, 0xcf, 0xff, 0xdf, 0xfd, 0xfb, 0xdd, 0xff, 0xff, 0xff, 0xfa, 0xff, 0x81, 0x3f, 0xff, 0xfe, 0xa8, 0xff, 0x3f, 0xff, 0xfe, 0xf2, 0xff, 0x3f, 0xff, 0xff, 0xeb, 0xff, 0xff, 0x7f, 0xfd, 0xff, 0x01, 0x7f, 0xff, 0xfd, 0xeb, 0xff, 0x7f, 0xfe, 0xfe, 0xfd, 0xff, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfd, 0xff, 0x9b, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfb, 0xef, 0xbf, 0xff, 0xff, 0xef, 0xff, 0xff, 0xfd, 0xfb, 0xff, 0xff, 0xff, 0xe9, 0xff, 0xff, 0x7f, 0xff, 0xff, 0xff, 0xf7, 0xff, 0xff, 0xfe, 0xff, 0xdf, 0x7f, 0xff, 0xff, 0xf7, 0xff, 0xff, 0x3f, 0xf9, 0xff, 0xff, 0x7f, 0xff, 0xfd, 0xff, 0xf7, 0xef, 0xbe, 0xff, 0xff, 0xf7, 0x3f, 0xff, 0xfe, 0xf3, 0xef, 0xff, 0x3f, 0xfd, 0xff, 0xff, 0x7f, 0x7f, 0xff, 0xff, 0xff, 0xf6, 0x7b, 0xed, 0xff, 0xdf, 0x7f, 0xfe, 0xfd, 0xff, 0xff, 0xdf, 0x7d, 0xf4, 0xff, 0xff, 0x7f, 0xff, 0xfa, 0xff, 0xd7, 0x5f, 0xff, 0xfd, 0xf7, 0xff, 0x0f, 0xfd, 0xfe, 0xfa, 0xff, 0xef, 0xfe, 0xfc, 0xf7, 0xff, 0x3f, 0xff, 0xff, 0xf2, 0xbd, 0x76, 0x5d, 0xfb, 0xff, 0xff, 0x7f, 0xfd, 0xff, 0xf7, 0xff, 0xdf, 0xfd, 0xf5, 0xf7, 0xff, 0xff, 0x7f, 0xf9, 0xcf, 0x77, 0xdf, 0xfb, 0xf2, 0xf7, 0xff, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xef, 0xff, 0xfc, 0xff, 0xff, 0xff, 0xff, 0xfc, 0xca, 0x5f, 0x7f, 0xff, 0xf6, 0xfd, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xaf, 0xf8, 0xf1, 0xff, 0xef, 0xff, 0xff, 0xfb, 0xef, 0x77, 0xee, 0xfd, 0xf5, 0xfb, 0xff, 0x5f, 0xff, 0xff, 0xff, 0xff, 0x9f, 0xff, 0xfa, 0xff, 0xef, 0xff, 0xff, 0xff, 0xfa, 0x5f, 0x7f, 0xbf, 0xf3, 0xf5, 0xff, 0xbf, 0xfc, 0xff, 0xff, 0xff, 0x7f, 0xff, 0xf3, 0xff, 0xcf, 0xff, 0xff, 0xff, 0xf7, 0xff, 0xfe, 0xfa, 0xf7, 0xef, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xbf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xef, 0xbf, 0xff, 0xfb, 0xe9, 0xff, 0xff, 0xff, 0xed, 0xfb, 0xef, 0xbf, 0xff, 0xfb, 0xfb, 0xef, 0xff, 0xfe, 0xfa, 0xff, 0xdf, 0x7f, 0x7f, 0xff, 0xfb, 0xd7, 0x5f, 0xff, 0xf4, 0x85, 0xaf, 0xbf, 0xfe, 0xfa, 0xd6, 0xdf, 0xbf, 0xff, 0xff, 0xeb, 0xc7, 0x9f, 0xff, 0xfc, 0xf3, 0xef, 0x9f, 0x7f, 0x76, 0xff, 0x51, 0x4f, 0x5e, 0xf9, 0xe4, 0x57, 0x3f, 0xbd, 0xf8, 0xf5, 0x9f, 0x3f, 0x7e, 0xf9, 0xe7, 0x8f, 0x3f, 0xff, 0xfa, 0xfe, 0x7f, 0xff, 0xbd, 0xf7, 0xdd, 0xdf, 0x7f, 0xff, 0xf9, 0xe7, 0xef, 0xff, 0xff, 0xfd, 0xf9, 0xf7, 0x5f, 0x7f, 0x75, 0xff, 0xd7, 0xaf, 0xfe, 0xfe, 0xf7, 0xcf, 0xbf, 0xff, 0xfd, 0xfb, 0x2f, 0x9f, 0xbc, 0xfa, 0xcb, 0x0f, 0xdf, 0x7e, 0xf1, 0xfc, 0xb7, 0xbf, 0x7f, 0xfa, 0xed, 0xdf, 0x7f, 0xff, 0xfd, 0xf7, 0xa3, 0xaf, 0x7e, 0xea, 0xe5, 0xb3, 0x4f, 0xbd, 0xfe, 0xee, 0xd7, 0x5f, 0xff, 0xfd, 0xfa, 0xdf, 0x3f, 0xff, 0xfd, 0xfb, 0x6f, 0xae, 0x79, 0xf5, 0x9d, 0x67, 0xce, 0xbc, 0xf5, 0xdb, 0x57, 0x7f, 0x7d, 0xf7, 0xd5, 0xdf, 0x7f, 0xff, 0xfd, 0xf7, 0x33, 0xef, 0xbc, 0x77, 0xd4, 0x3b, 0x6f, 0x9d, 0xec, 0xeb, 0x3b, 0xc7, 0x9e, 0xf2, 0xac, 0xc7, 0x3f, 0x7f, 0xfc, 0xf3, 0x77, 0xcf, 0x3d, 0xeb, 0xdf, 0xf3, 0xee, 0xbd, 0xfb, 0xfb, 0x67, 0x5f, 0x7d, 0xf7, 0xed, 0xbf, 0xff, 0xfe, 0xf5, 0xef, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0xff, 0xff, 0xff, 0xff, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfb, 0xff, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xfe, 0xfe, 0xfb, 0xef, 0xdf, 0xfe, 0xfe, 0xff, 0xbf, 0xbf, 0xff, 0xfe, 0xf7, 0xef, 0xff, 0xff, 0xff, 0xfb, 0x53, 0xbf, 0xfe, 0xfd, 0xf7, 0xaf, 0x5f, 0xff, 0xfb, 0xff, 0x2b, 0x7f, 0xff, 0xfa, 0xef, 0x7f, 0xff, 0x7e, 0xfe, 0xeb, 0x7b, 0xef, 0xfd, 0xfe, 0xed, 0xdf, 0x7f, 0x7f, 0xfd, 0xde, 0x97, 0xef, 0xbd, 0xf7, 0xda, 0xab, 0x4f, 0xbd, 0xfd, 0xf7, 0xe7, 0x8e, 0x7d, 0xf3, 0xdb, 0x5b, 0xdf, 0xfc, 0xf3, 0xfa, 0xbb, 0xce, 0x3d, 0xf7, 0xde, 0x7b, 0xee, 0x7b, 0xf5, 0xeb, 0x73, 0xff, 0x9c, 0x7f, 0xed, 0x7b, 0xe7, 0x9f, 0xff, 0xeb, 0xf9, 0xff, 0xfc, 0xfb, 0xae, 0xbf, 0xdf, 0x7e, 0xff, 0xe5, 0xe7, 0xaf, 0xbd, 0xeb, 0xbe, 0xfb, 0xef, 0x3a, 0xf7, 0xe3, 0xab, 0xee, 0xbd, 0xf7, 0xdf, 0x7b, 0xbf, 0x7e, 0xeb, 0xdf, 0x7b, 0xb7, 0xbc, 0xff, 0xde, 0xbd, 0xee, 0xbf, 0xff, 0xed, 0xfb, 0xff, 0xfd, 0xf3, 0xde, 0xbd, 0x3f, 0x7f, 0xfb, 0xcd, 0xf7, 0xee, 0x3d, 0xf7, 0xfe, 0xf7, 0xef, 0xbd, 0xeb, 0xdb, 0x53, 0xd7, 0xbd, 0xf7, 0xdd, 0x77, 0x7f, 0x7f, 0xf6, 0xdd, 0x53, 0xaf, 0xfe, 0xf9, 0xe5, 0x5b, 0x5f, 0xfd, 0xfa, 0xff, 0xb7, 0xbf, 0x7e, 0xf9, 0xeb, 0x97, 0x3f, 0xbf, 0xff, 0xd5, 0x97, 0xdf, 0x7c, 0xfb, 0xeb, 0xdf, 0x7f, 0xff, 0xfa, 0xff, 0xaf, 0xbf, 0xfe, 0xfa, 0xe5, 0xb7, 0x7f, 0x7e, 0xfe, 0xdd, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xbf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xef, 0xff, 0xff, 0xfe, 0xe3, 0xf7, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xff, 0xfe, 0xfd, 0xff, 0xef, 0x7f, 0xff, 0xfd, 0xff, 0xff, 0x5f, 0x7f, 0xfb, 0xfd, 0xdf, 0xbf, 0xfe, 0xff, 0xfb, 0xff, 0xbf, 0xff, 0xfe, 0xfb, 0xff, 0xff, 0x7f, 0xff, 0xfb, 0x8f, 0xbf, 0xff, 0xfe, 0xe5, 0xcb, 0x3f, 0x7f, 0xe9, 0xc3, 0x4b, 0x7f, 0xfe, 0xf0, 0xe5, 0xcf, 0x3f, 0xff, 0xfc, 0xf7, 0xf7, 0x6f, 0xbf, 0xfc, 0xf7, 0xdf, 0xff, 0x5e, 0x76, 0xee, 0x37, 0xcf, 0xbd, 0x77, 0xd6, 0xcf, 0x3f, 0xff, 0xfd, 0xf3, 0xaf, 0x5f, 0xfe, 0xf9, 0xed, 0x97, 0xaf, 0xfe, 0xec, 0xde, 0x73, 0x4e, 0x39, 0xf6, 0xcc, 0xdf, 0x7f, 0xff, 0xfd, 0xf7, 0x4b, 0x4f, 0x3f, 0xfc, 0xe2, 0xd5, 0x5f, 0x3d, 0xea, 0xfe, 0xd3, 0xaf, 0xbe, 0xf5, 0xf6, 0xdf, 0x7f, 0xff, 0xfe, 0xf7, 0xeb, 0xaf, 0xfe, 0xfb, 0xee, 0xb3, 0xdf, 0xff, 0xf8, 0xd2, 0x57, 0x8f, 0x3d, 0xf5, 0xd6, 0xdf, 0x7f, 0xff, 0xf9, 0xf7, 0x97, 0x6f, 0x9d, 0xfa, 0xe5, 0xaf, 0x57, 0x9e, 0xf6, 0xfb, 0x33, 0x7f, 0xfd, 0xea, 0xec, 0xd7, 0x5f, 0x7f, 0xfd, 0xf5, 0x7f, 0xdf, 0xff, 0xfb, 0xdf, 0xbb, 0xdf, 0xfd, 0xfd, 0xf3, 0xff, 0xff, 0xff, 0xff, 0xef, 0x5f, 0x7f, 0xfd, 0xfb, 0xef, 0xff, 0xff, 0xff, 0xff, 0xfd, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xef, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x93, 0xbf, 0xff, 0xff, 0xff, 0xef, 0xbf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfb, 0xff, 0xff, 0x5e, 0xff, 0xff, 0x9f, 0x7f, 0xfe, 0xfe, 0xf7, 0xdf, 0xbf, 0xfe, 0xff, 0xff, 0xff, 0x7f, 0xff, 0xfa, 0xf7, 0xff, 0xff, 0x7f, 0xff, 0xff, 0x6b, 0xaf, 0x7f, 0xff, 0xfb, 0xd7, 0x7f, 0xbf, 0xfe, 0xfb, 0xdf, 0xef, 0xff, 0xff, 0xfe, 0x5b, 0xdf, 0xfe, 0xfe, 0xee, 0x2f, 0xbf, 0xfe, 0xfa, 0xeb, 0xb7, 0xdf, 0xfe, 0xf9, 0xf7, 0xb7, 0x5e, 0x5d, 0xf7, 0xd6, 0xfb, 0xef, 0xfa, 0xf5, 0xdd, 0x8b, 0xc7, 0xbe, 0xfd, 0xec, 0xab, 0x4f, 0x3d, 0xfb, 0xfd, 0x97, 0xef, 0xbf, 0xfd, 0xfe, 0xbb, 0xbf, 0x3f, 0xff, 0xee, 0x7b, 0xbe, 0x3d, 0xf3, 0xdd, 0x7b, 0xef, 0x3d, 0xf7, 0xa3, 0x77, 0xdf, 0xbd, 0xeb, 0xee, 0x77, 0xbf, 0xfe, 0xf2, 0xfb, 0x3b, 0xef, 0xbd, 0x77, 0xce, 0x3b, 0xef, 0xbc, 0xf3, 0xfe, 0x2b, 0x7f, 0xff, 0xff, 0xdb, 0xfb, 0x7f, 0x7f, 0xfb, 0xf3, 0x73, 0xdf, 0x3d, 0xf7, 0xdc, 0x73, 0xcf, 0x3d, 0xf7, 0xf7, 0x73, 0xee, 0x7d, 0xf7, 0xfe, 0xaf, 0x7e, 0x7f, 0xfa, 0xf7, 0xd7, 0x6f, 0xbd, 0xf4, 0xeb, 0xaf, 0x3f, 0xff, 0xfa, 0xff, 0xc7, 0x5f, 0xbc, 0xf2, 0xc5, 0x37, 0x9f, 0xbf, 0xff, 0xfb, 0x1f, 0xcf, 0xf9, 0xfd, 0xe5, 0xaf, 0x5f, 0x7e, 0xf9, 0xfb, 0x97, 0xdf, 0xf9, 0xe5, 0xd5, 0x57, 0x3e, 0xbf, 0xfe, 0xf2, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfd, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xbf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfb, 0xdf, 0xff, 0xbf, 0xf2, 0xff, 0xfb, 0xff, 0xff, 0xfb, 0xff, 0xff, 0xaf, 0xbc, 0xfa, 0xef, 0xbf, 0x7f, 0xbf, 0xfe, 0xfb, 0xd7, 0xdf, 0x9f, 0xfa, 0xef, 0x95, 0xfe, 0xff, 0xfb, 0xff, 0xb7, 0xcf, 0x7e, 0xfd, 0x80, 0x23, 0xbf, 0xbf, 0xff, 0xd3, 0xf7, 0x5f, 0xbf, 0xf1, 0xff, 0xff, 0x3f, 0xfd, 0xf3, 0xfb, 0xbb, 0xef, 0x1e, 0xf5, 0xfa, 0x3b, 0x0f, 0x3c, 0xff, 0xd8, 0x93, 0x4f, 0x9a, 0xfc, 0xf7, 0xaf, 0x9f, 0xbd, 0xfb, 0xfb, 0xcf, 0xef, 0x79, 0xfb, 0xf7, 0x7b, 0xbf, 0xfb, 0x7d, 0xc7, 0xd7, 0xfe, 0x7e, 0xeb, 0xff, 0xd7, 0x77, 0xfb, 0xfd, 0xff, 0xd7, 0x6f, 0xbc, 0xfb, 0xf7, 0x39, 0x9f, 0xbd, 0xfe, 0xd3, 0xd3, 0xae, 0x3e, 0xf9, 0xf7, 0xdb, 0xde, 0xbb, 0xfd, 0xfd, 0xcf, 0xff, 0xbf, 0xfe, 0xff, 0x7b, 0xff, 0x7e, 0xff, 0xd2, 0xff, 0xff, 0xff, 0xf6, 0xe7, 0xff, 0xb7, 0xfd, 0xfe, 0xef, 0xe7, 0xd7, 0xff, 0xfb, 0xfd, 0x3b, 0x5f, 0x1d, 0xff, 0xfb, 0xab, 0xbf, 0xbf, 0xfa, 0xf7, 0xdf, 0xdf, 0xfd, 0xfe, 0xd5, 0x3f, 0xbe, 0x7e, 0xfd, 0xff, 0xdb, 0xff, 0xfe, 0xf5, 0xf7, 0xfb, 0xff, 0xff, 0xfd, 0xff, 0xef, 0xef, 0x7e, 0xff, 0xcd, 0xf7, 0xdf, 0xbf, 0xfe, 0xfd, 0xfb, 0xef, 0xff, 0xf6, 0xfb, 0xff, 0xdf, 0xff, 0xfd, 0xfb, 0xff, 0x7f, 0xbf, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xef, 0xff, 0xff, 0xff, 0xdb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff }; xscreensaver-5.36/hacks/images/matrix2.xbm000644 000767 000024 00000270212 10046031372 020572 0ustar00jwzstaff000000 000000 #define matrix2_width 320 #define matrix2_height 377 static unsigned char matrix2_bits[] = { 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xaf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xd5, 0xff, 0xab, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x57, 0xff, 0x5f, 0xed, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x57, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x5f, 0xff, 0x7f, 0x53, 0xff, 0x45, 0xff, 0xff, 0xfd, 0xff, 0xff, 0xff, 0xff, 0xf6, 0xff, 0x9b, 0xfe, 0xb7, 0xf4, 0xff, 0xef, 0xff, 0x7f, 0xf5, 0xff, 0xff, 0xff, 0x97, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xd7, 0xff, 0xff, 0xc1, 0xff, 0x45, 0xff, 0x7f, 0xfd, 0xff, 0xff, 0xff, 0xff, 0xfb, 0xff, 0x8d, 0xff, 0x17, 0xd5, 0xff, 0x75, 0xfd, 0x7f, 0xfb, 0xff, 0xff, 0xff, 0x8f, 0xfc, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x0b, 0xfd, 0xbf, 0xa2, 0xff, 0x8b, 0xfd, 0x5f, 0xe9, 0xff, 0xef, 0xff, 0xbf, 0xa0, 0xff, 0x02, 0xf4, 0x2f, 0xe0, 0xff, 0x2a, 0xf5, 0x5f, 0xd0, 0xff, 0xff, 0xff, 0x03, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfa, 0xff, 0x85, 0xff, 0x7f, 0xf1, 0xff, 0x4a, 0xfe, 0x7f, 0xec, 0xff, 0xb7, 0xfe, 0xff, 0xe8, 0x7f, 0x81, 0xfe, 0x0b, 0x69, 0x7f, 0x21, 0xfa, 0xbf, 0xe8, 0xff, 0xff, 0xff, 0x0f, 0xfd, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xee, 0xff, 0x0a, 0xf4, 0xbf, 0xa0, 0xff, 0x0f, 0xfd, 0x5f, 0xf1, 0xff, 0x5b, 0xfb, 0x5f, 0x42, 0xff, 0x0a, 0xe8, 0x27, 0xc0, 0xff, 0xaa, 0xec, 0x5f, 0xa0, 0xff, 0xff, 0xff, 0x47, 0xfd, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xbf, 0xf0, 0x7f, 0x8a, 0xfa, 0x5f, 0xf4, 0xff, 0x43, 0xfe, 0x3f, 0xe8, 0xff, 0x01, 0xfe, 0x3f, 0x51, 0xbf, 0x00, 0xf2, 0x15, 0xea, 0xbf, 0x00, 0xf4, 0x2f, 0xf0, 0xff, 0xff, 0xff, 0x1b, 0xfa, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xbf, 0xe8, 0x7f, 0x01, 0xd2, 0x7f, 0xd0, 0xff, 0x1f, 0xfa, 0xdf, 0xa0, 0xff, 0x85, 0xf4, 0xaf, 0x40, 0xff, 0x02, 0xd0, 0x07, 0xa0, 0xfe, 0x52, 0xe8, 0xbf, 0xa0, 0xff, 0xff, 0xff, 0x4f, 0xfa, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xbf, 0xe8, 0x3f, 0x01, 0xf2, 0x2f, 0xfa, 0xff, 0x0b, 0xfd, 0x7f, 0xe4, 0xff, 0x52, 0xf4, 0x3f, 0x54, 0xb7, 0xb0, 0xf0, 0x45, 0x00, 0xbf, 0x00, 0xfa, 0x2f, 0xe8, 0xff, 0xff, 0xff, 0x37, 0xec, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x6f, 0xf0, 0xff, 0x10, 0xf4, 0x7f, 0xd4, 0xff, 0x2f, 0xf6, 0xdf, 0xa2, 0xff, 0x27, 0xf4, 0x2f, 0x41, 0xff, 0x0a, 0xa9, 0x05, 0x40, 0xfd, 0x52, 0xd4, 0x5f, 0xa0, 0xff, 0xff, 0xff, 0x1f, 0xf6, 0xff, 0xff, 0xff, 0xdf, 0xb6, 0xff, 0xff, 0xff, 0x3f, 0xa8, 0x3f, 0x00, 0xf2, 0x2f, 0xf8, 0xff, 0x2b, 0xfa, 0xff, 0xf4, 0xff, 0x12, 0xfa, 0x17, 0xa8, 0x7f, 0x51, 0xf0, 0x07, 0xa4, 0x7f, 0x21, 0xea, 0x2f, 0xe8, 0xff, 0xff, 0xff, 0xff, 0xe8, 0xff, 0xff, 0xff, 0xb7, 0xda, 0xfe, 0xff, 0xff, 0xcb, 0x50, 0xfd, 0x0b, 0xdd, 0x5f, 0xec, 0xff, 0x2f, 0xfa, 0x7f, 0xa7, 0xff, 0x55, 0xd4, 0xaf, 0x42, 0xff, 0x0a, 0xd0, 0x25, 0x00, 0xfe, 0x4a, 0xf1, 0xbf, 0xa0, 0xff, 0xff, 0xff, 0x5f, 0xf0, 0xff, 0xff, 0xff, 0xab, 0xaa, 0xff, 0xff, 0xff, 0x57, 0xa8, 0xbf, 0x82, 0xea, 0x6f, 0xf4, 0xff, 0x2f, 0xfa, 0xff, 0xeb, 0xbf, 0x56, 0xfa, 0x0b, 0xf0, 0xbf, 0x42, 0xda, 0x07, 0xa0, 0xff, 0x73, 0xfe, 0x2f, 0xe8, 0xff, 0xff, 0xff, 0x7f, 0x51, 0xff, 0xff, 0xff, 0x05, 0x00, 0xfa, 0xff, 0xff, 0x05, 0x00, 0x7a, 0x21, 0xf8, 0x3f, 0xe8, 0xff, 0x2f, 0xfc, 0xff, 0xff, 0x7f, 0x01, 0xe8, 0xb7, 0x40, 0x7f, 0x80, 0xf4, 0x2b, 0x85, 0xfe, 0xae, 0xfb, 0xbf, 0xa0, 0xff, 0xff, 0xff, 0x5f, 0xd0, 0xff, 0xff, 0xff, 0x07, 0x00, 0xfd, 0xff, 0xff, 0x03, 0x00, 0x7f, 0x11, 0xfe, 0x2f, 0xfc, 0xff, 0x37, 0xf6, 0xff, 0xff, 0xbf, 0x0c, 0xfa, 0x1b, 0xe8, 0x5f, 0x02, 0xf6, 0x2b, 0xe0, 0xfe, 0xff, 0xff, 0xaf, 0xf8, 0xff, 0xff, 0xff, 0xbf, 0xc1, 0xff, 0xff, 0xff, 0x03, 0x00, 0xfe, 0xff, 0xff, 0x07, 0x00, 0xfa, 0x42, 0xe8, 0x7f, 0xe8, 0xff, 0x1f, 0xfa, 0xff, 0xf7, 0x7f, 0x02, 0xd4, 0x2f, 0x40, 0x7f, 0x10, 0xe9, 0x17, 0x05, 0xff, 0xff, 0xff, 0xbf, 0xe8, 0xff, 0xff, 0xff, 0xff, 0x64, 0xff, 0xbf, 0xff, 0xbb, 0xfb, 0xff, 0xdf, 0xff, 0x5b, 0xd9, 0x7f, 0x73, 0xff, 0x2f, 0xfc, 0xff, 0x0b, 0xfa, 0xff, 0xff, 0x5f, 0x80, 0xf0, 0x05, 0xa8, 0x5f, 0x44, 0xf5, 0x05, 0x00, 0xfd, 0xff, 0xff, 0x7f, 0xe8, 0xff, 0xff, 0xff, 0xff, 0x89, 0xff, 0xdf, 0xff, 0x57, 0x95, 0xfe, 0xf7, 0xff, 0x6f, 0xa0, 0xfe, 0x55, 0xf0, 0x5f, 0xe0, 0xff, 0x37, 0xfc, 0xff, 0xff, 0x7f, 0x02, 0xd4, 0x07, 0x41, 0x5f, 0x50, 0xd0, 0x07, 0x00, 0xfb, 0xff, 0xff, 0xdf, 0xf0, 0xff, 0xff, 0xff, 0xff, 0xc2, 0xfe, 0x4b, 0xfd, 0xff, 0xff, 0xff, 0x8b, 0xfe, 0x57, 0xf8, 0x7f, 0xfd, 0xff, 0x5f, 0xfc, 0xff, 0x17, 0xef, 0xff, 0xff, 0x3f, 0xa1, 0xf0, 0xa3, 0xf8, 0x3f, 0x02, 0xf8, 0x5b, 0xa2, 0xfe, 0xff, 0xff, 0x7f, 0xfd, 0xff, 0xff, 0xff, 0xff, 0x0d, 0xfb, 0x8f, 0xfe, 0xff, 0xed, 0xff, 0x4b, 0xff, 0xbf, 0xa0, 0xff, 0xbf, 0xff, 0x7f, 0xd0, 0xff, 0x17, 0xfa, 0xff, 0xff, 0x7f, 0x11, 0xd0, 0x8d, 0xa8, 0xff, 0x20, 0xd0, 0x2f, 0x00, 0xff, 0xff, 0xff, 0xff, 0xd6, 0xff, 0xff, 0xff, 0xff, 0x4b, 0xff, 0x4b, 0xff, 0xdf, 0xff, 0xff, 0x45, 0xfb, 0xdf, 0xf8, 0xff, 0xff, 0xff, 0x2f, 0xd5, 0xff, 0x85, 0xfe, 0xff, 0xff, 0x5f, 0x82, 0xe8, 0x47, 0xf4, 0x5f, 0x00, 0xe8, 0x17, 0xa1, 0xfd, 0xff, 0xff, 0xbf, 0xfa, 0xff, 0xff, 0xff, 0xff, 0x8e, 0xfc, 0x0f, 0xfa, 0xff, 0xff, 0xff, 0x0b, 0xfe, 0x7f, 0xe8, 0xff, 0xff, 0xff, 0xff, 0xe0, 0xff, 0x2f, 0xfa, 0xff, 0xff, 0x7f, 0x00, 0xd2, 0x05, 0xe8, 0x7f, 0x13, 0xea, 0x7f, 0x08, 0xff, 0xff, 0xff, 0xff, 0xf0, 0xff, 0xff, 0xff, 0xff, 0x07, 0xfe, 0x05, 0xff, 0xff, 0xff, 0xff, 0x8a, 0xfe, 0xbf, 0xf8, 0xff, 0xff, 0xff, 0x3f, 0xb4, 0xff, 0x82, 0xfe, 0xff, 0xff, 0x5f, 0x00, 0xf0, 0x27, 0xf9, 0x7f, 0x81, 0xf2, 0x17, 0xc0, 0xff, 0xff, 0xff, 0x5f, 0xf8, 0xff, 0xff, 0xff, 0xff, 0x4f, 0xfd, 0xdf, 0xfd, 0xff, 0xff, 0xff, 0x27, 0xfa, 0xff, 0xee, 0xff, 0xff, 0xff, 0xff, 0xc3, 0xfe, 0x4b, 0xff, 0xff, 0xff, 0xbf, 0xbe, 0xff, 0xdf, 0xf6, 0xff, 0x0f, 0xfd, 0xbf, 0x24, 0xfa, 0xff, 0xff, 0xff, 0xf7, 0xff, 0xff, 0xff, 0xff, 0x2b, 0xfd, 0x77, 0xff, 0xff, 0xff, 0xff, 0x2b, 0xfe, 0x7f, 0xf7, 0xff, 0xff, 0xff, 0xbf, 0x62, 0xff, 0x42, 0xff, 0xff, 0xff, 0xff, 0xd5, 0xfa, 0xdb, 0xff, 0xff, 0x8b, 0xff, 0x2f, 0x80, 0xff, 0xff, 0xff, 0xff, 0xfa, 0xff, 0xff, 0xff, 0xff, 0xbf, 0xfe, 0xdf, 0xff, 0xff, 0xff, 0xff, 0x1f, 0xfd, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xa3, 0xff, 0x8d, 0xff, 0xff, 0xff, 0x7f, 0xff, 0xdf, 0xff, 0xfa, 0xff, 0x4f, 0xfd, 0x7f, 0x65, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xaf, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0x6b, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfa, 0xff, 0xf7, 0xff, 0xff, 0xff, 0xff, 0x6f, 0xff, 0xff, 0xff, 0xff, 0xfb, 0xff, 0x5f, 0xb5, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xbf, 0xfa, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xff, 0xad, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf6, 0xff, 0xdf, 0xfd, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0xfd, 0xff, 0xf7, 0xfd, 0xbf, 0xaa, 0xfe, 0xd5, 0xff, 0xdf, 0x6b, 0xff, 0xef, 0xff, 0xb7, 0xdd, 0xff, 0x77, 0xff, 0xff, 0xef, 0xff, 0x57, 0xff, 0xff, 0xea, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xaf, 0xeb, 0xff, 0x5a, 0xdf, 0x57, 0xd5, 0x7f, 0xed, 0xff, 0x6f, 0xb5, 0xff, 0x6a, 0xff, 0xbf, 0xed, 0xff, 0xaa, 0xfb, 0xbf, 0xea, 0xfe, 0xdd, 0xfb, 0x7f, 0xbb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7b, 0xb0, 0xbf, 0x07, 0xf5, 0x2f, 0x04, 0x7a, 0xa1, 0xfa, 0x1b, 0xc0, 0xfe, 0x93, 0xfe, 0x57, 0xd0, 0xbe, 0x0b, 0xdc, 0xff, 0xa8, 0xff, 0x05, 0xfe, 0x5f, 0xd5, 0xfd, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x4f, 0xaa, 0xff, 0x50, 0xfd, 0x0b, 0xa1, 0xbe, 0xa8, 0xfe, 0x8f, 0x94, 0xfe, 0xca, 0xff, 0x1b, 0x52, 0xff, 0x40, 0xf7, 0x5f, 0xa2, 0xbd, 0xa2, 0xfa, 0x2f, 0x40, 0xff, 0xff, 0xeb, 0xff, 0xff, 0xff, 0xfb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x0b, 0xc0, 0x5e, 0x02, 0xe0, 0x0f, 0x00, 0xda, 0x00, 0xfd, 0x2b, 0x80, 0x7e, 0x03, 0xfa, 0x47, 0x00, 0x5f, 0x02, 0xe8, 0xff, 0x00, 0xfe, 0x02, 0xea, 0x2f, 0x80, 0xfe, 0x5f, 0xfd, 0xff, 0xff, 0xbf, 0xba, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x0b, 0x40, 0x7f, 0x00, 0xf4, 0x0b, 0x00, 0x7e, 0x04, 0xf6, 0x0f, 0x80, 0xfe, 0x81, 0xfe, 0x25, 0x40, 0x7f, 0x00, 0xf0, 0x2f, 0x80, 0x5f, 0x00, 0xe8, 0x57, 0x80, 0xfe, 0xff, 0xab, 0xff, 0xee, 0xff, 0xed, 0xff, 0xff, 0xfa, 0xff, 0x6f, 0xff, 0x0f, 0x40, 0x5f, 0x02, 0xd0, 0x0b, 0x89, 0xfa, 0x00, 0xf9, 0x57, 0x80, 0xda, 0x02, 0xfd, 0x07, 0x00, 0x5d, 0x02, 0xd4, 0xff, 0x10, 0x7d, 0x11, 0xf2, 0x07, 0xa6, 0xfe, 0x2b, 0xe0, 0x57, 0x77, 0x5f, 0xa0, 0xff, 0x5f, 0xff, 0xff, 0x77, 0xff, 0x85, 0x46, 0x3f, 0xb0, 0xe8, 0x8f, 0xec, 0xbe, 0x16, 0xdc, 0x9b, 0x46, 0xfe, 0x22, 0xee, 0x85, 0x5a, 0x3f, 0x68, 0xf1, 0x5f, 0xa8, 0x3f, 0x48, 0xb1, 0x8f, 0x88, 0xfe, 0xde, 0xc0, 0x6d, 0xd5, 0x7e, 0xa8, 0xfa, 0xef, 0xfa, 0xff, 0xaf, 0xfb, 0x0b, 0x09, 0xda, 0x08, 0xf1, 0x27, 0x54, 0xff, 0x8a, 0xf0, 0xaf, 0x88, 0xfe, 0x02, 0xfa, 0x07, 0x2a, 0x7f, 0xa0, 0xd0, 0xff, 0xd0, 0x5f, 0x50, 0xe0, 0x0b, 0x46, 0xff, 0x03, 0xfc, 0x07, 0x00, 0xbf, 0x02, 0xfa, 0x3f, 0xdc, 0xff, 0x05, 0xfe, 0x8b, 0x45, 0x7f, 0xa4, 0xd0, 0x2b, 0xf6, 0xff, 0x42, 0xf4, 0x0b, 0x40, 0xfb, 0x22, 0xfa, 0x23, 0xab, 0x1f, 0xb4, 0xfe, 0x5f, 0xe8, 0x7e, 0xb4, 0xf0, 0x0f, 0x55, 0x5d, 0x0d, 0xd4, 0x4b, 0x52, 0x7d, 0x05, 0xdd, 0x17, 0xf0, 0xff, 0x0f, 0xfd, 0x05, 0x15, 0x5d, 0x50, 0xe8, 0x17, 0xfa, 0xbf, 0x15, 0xa8, 0x57, 0x00, 0x7e, 0x43, 0xea, 0x05, 0xf4, 0xff, 0xa0, 0xf7, 0xbf, 0xb0, 0x3f, 0x54, 0xa1, 0x8b, 0x54, 0xff, 0x02, 0xfa, 0x05, 0x02, 0xff, 0x02, 0xd4, 0x1f, 0xfa, 0xff, 0x85, 0xfe, 0x87, 0x82, 0x7d, 0x04, 0xf2, 0x2f, 0xfa, 0xff, 0x80, 0xe8, 0x0b, 0x40, 0xff, 0x52, 0xf8, 0x27, 0xb5, 0x5f, 0xd8, 0xfa, 0xdf, 0xf8, 0x5f, 0xb0, 0xf0, 0x0f, 0xd2, 0x5f, 0xa0, 0xfd, 0x07, 0x00, 0xda, 0x97, 0xe0, 0x6f, 0xfa, 0xff, 0x0f, 0xfd, 0x0b, 0x48, 0xbe, 0x22, 0xd4, 0x5d, 0xb4, 0xbf, 0x00, 0xd0, 0x0f, 0x96, 0xbd, 0x01, 0xd2, 0x15, 0xe8, 0x7f, 0x82, 0xff, 0x7f, 0xd0, 0x5f, 0x54, 0xd0, 0x47, 0xe8, 0x3f, 0xa0, 0xfe, 0x45, 0xa0, 0xff, 0x15, 0xa8, 0x2f, 0xfa, 0xff, 0x4b, 0xff, 0x05, 0x05, 0x5f, 0x00, 0xf2, 0x6f, 0xfa, 0x5f, 0x10, 0xd4, 0x83, 0xc2, 0xfe, 0x50, 0xf0, 0x07, 0xf0, 0xbf, 0xa2, 0xfe, 0x5f, 0xf8, 0x7f, 0x74, 0xd1, 0x5f, 0x61, 0xbf, 0x40, 0xfd, 0x13, 0x09, 0xfa, 0xaf, 0xa0, 0xff, 0xfd, 0xff, 0xf7, 0xfd, 0x07, 0xc0, 0xbf, 0x50, 0xd0, 0x5f, 0xe4, 0xbf, 0xa4, 0xe0, 0x0d, 0xba, 0x7f, 0x02, 0xd1, 0x85, 0xaa, 0xff, 0x05, 0xfb, 0xbf, 0xd0, 0x3f, 0x90, 0xe0, 0x6f, 0xf0, 0x9f, 0x50, 0xff, 0x03, 0x40, 0xfd, 0x15, 0xa0, 0x5f, 0xff, 0xff, 0xbf, 0xff, 0x05, 0xa0, 0x5e, 0x08, 0xf0, 0x5f, 0xf0, 0xbf, 0x90, 0xf4, 0x87, 0xdb, 0x5f, 0x22, 0xd0, 0x43, 0xfa, 0x7f, 0x85, 0xfe, 0xdf, 0xf8, 0x5f, 0x54, 0xf1, 0x7f, 0xa1, 0x7f, 0x40, 0xed, 0x57, 0x15, 0xfe, 0xab, 0xc0, 0xff, 0xfe, 0xff, 0x7f, 0xff, 0x8b, 0xc0, 0x7f, 0x50, 0xa1, 0x7f, 0xea, 0x7f, 0x48, 0xc8, 0x05, 0x7d, 0xbd, 0x00, 0xe0, 0x05, 0xad, 0xfd, 0x03, 0xf4, 0x7f, 0xc8, 0x7f, 0xb0, 0xa0, 0x5f, 0xf1, 0xbf, 0x06, 0xfa, 0x01, 0x00, 0x7f, 0x05, 0xfc, 0xff, 0xef, 0xff, 0xd7, 0xff, 0x0b, 0xba, 0x5f, 0x94, 0xf0, 0x2f, 0xf0, 0x5f, 0x50, 0xe8, 0x8b, 0x16, 0xbf, 0x00, 0xf4, 0x43, 0x95, 0xff, 0x2a, 0xf6, 0x2f, 0xe8, 0x5f, 0x54, 0xf0, 0xff, 0xd1, 0xff, 0x13, 0xd4, 0x17, 0x80, 0xfa, 0x02, 0xea, 0xbf, 0xfa, 0xff, 0xff, 0xfe, 0x0f, 0xc5, 0x3e, 0x40, 0xd0, 0x7f, 0xa5, 0xbf, 0xa8, 0xe4, 0x07, 0xaa, 0x7a, 0x82, 0xa0, 0x07, 0x5a, 0xbd, 0x0b, 0xd8, 0xdf, 0xb0, 0x3f, 0x54, 0xd1, 0xbf, 0xd8, 0x7f, 0x05, 0xf5, 0x85, 0x44, 0x5f, 0x01, 0xfd, 0xaf, 0xfe, 0xff, 0x4b, 0xff, 0x85, 0xf0, 0x5f, 0x34, 0xf1, 0x5f, 0xf0, 0xbf, 0x20, 0xf0, 0x85, 0x2a, 0x3d, 0x20, 0xf4, 0x41, 0x45, 0xfd, 0x4a, 0xfa, 0x2b, 0xa8, 0xbf, 0x50, 0xf0, 0xff, 0xe2, 0xff, 0x5f, 0xc0, 0xf7, 0x76, 0x7d, 0x68, 0xfb, 0x3f, 0xe8, 0xff, 0x8f, 0xfc, 0x0f, 0x84, 0x7e, 0x00, 0xa8, 0xbf, 0xd1, 0xbf, 0x08, 0xec, 0x0b, 0x00, 0x5e, 0x01, 0xd5, 0x17, 0x08, 0x7e, 0x01, 0xa0, 0x97, 0x40, 0x7d, 0x02, 0xd4, 0xff, 0xf2, 0xff, 0xab, 0xe0, 0x5f, 0x5b, 0x3f, 0xa0, 0xff, 0x2f, 0xfa, 0xff, 0x05, 0xfe, 0x4b, 0xa0, 0x3f, 0x21, 0xf4, 0xff, 0xd0, 0xbf, 0x00, 0xf4, 0x0f, 0x8a, 0x7e, 0x90, 0xfe, 0x03, 0x01, 0x5f, 0x48, 0xf0, 0x13, 0x48, 0xbf, 0x42, 0xfa, 0xbf, 0xd1, 0xff, 0xff, 0xfe, 0xfb, 0xfe, 0xff, 0xef, 0xff, 0x5f, 0xd0, 0xff, 0x8f, 0xfe, 0x5f, 0x42, 0xfd, 0x85, 0xea, 0x7f, 0xe5, 0xff, 0x02, 0xfd, 0xb7, 0x40, 0x5f, 0x02, 0xf5, 0x7f, 0xa0, 0xba, 0x02, 0xa0, 0x0f, 0x80, 0xfe, 0x12, 0xf5, 0xff, 0xf4, 0xff, 0xbf, 0xd3, 0xff, 0xff, 0xbf, 0xfa, 0xfe, 0x57, 0xf8, 0xff, 0x45, 0xff, 0xb7, 0x90, 0xbe, 0x02, 0xfa, 0xdf, 0xf0, 0xbf, 0xa4, 0xfe, 0x5b, 0xa0, 0x7b, 0xa2, 0xfe, 0x17, 0xa4, 0x7f, 0x00, 0xf4, 0x43, 0x20, 0xbf, 0x82, 0xfe, 0xff, 0xe9, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0x3f, 0xd1, 0xff, 0x1f, 0xf6, 0x7f, 0xa5, 0xff, 0xab, 0xfe, 0xff, 0xeb, 0xff, 0x0b, 0xf5, 0x7f, 0x49, 0x7f, 0x89, 0xfe, 0xbf, 0x88, 0xbe, 0x4a, 0xd1, 0x17, 0x8a, 0xfe, 0x2b, 0xfa, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xff, 0xff, 0xd9, 0xff, 0xd7, 0xff, 0xbf, 0xb5, 0xff, 0x55, 0xfb, 0xff, 0xfe, 0xff, 0xea, 0xff, 0x5f, 0xed, 0xbf, 0xb5, 0xff, 0xaf, 0xf6, 0xff, 0x6a, 0xfd, 0xfb, 0xeb, 0xff, 0xef, 0xff, 0xff, 0xf6, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0xe9, 0xff, 0xff, 0xff, 0xff, 0xef, 0xff, 0xff, 0xff, 0xff, 0xeb, 0xff, 0x7f, 0xff, 0xff, 0xfb, 0x7f, 0xef, 0xfe, 0xff, 0xdd, 0xff, 0x7f, 0xef, 0xaf, 0x7a, 0xff, 0x5b, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xbf, 0xff, 0xff, 0xbf, 0xff, 0xff, 0xfd, 0xff, 0xb6, 0xff, 0xff, 0xff, 0xff, 0xb7, 0xff, 0xff, 0xff, 0xff, 0xf7, 0xff, 0xff, 0xff, 0x7f, 0xd7, 0xfb, 0xff, 0xbf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xbd, 0xff, 0xff, 0xff, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfb, 0xf7, 0xff, 0x7f, 0xff, 0xff, 0xff, 0xef, 0xdb, 0xff, 0xff, 0xff, 0xdf, 0xff, 0xbf, 0xff, 0xfb, 0x7f, 0xff, 0x7f, 0xff, 0xff, 0xbf, 0xff, 0xff, 0xff, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xda, 0xbf, 0xbe, 0xdd, 0x55, 0xdf, 0xff, 0xaf, 0xea, 0xfb, 0x7e, 0xfd, 0xaa, 0xfa, 0xf7, 0xaa, 0xfd, 0xb6, 0xdd, 0xdf, 0xeb, 0xff, 0x55, 0xd5, 0xdf, 0x55, 0xff, 0x5f, 0xf5, 0xaf, 0xd5, 0xff, 0x5f, 0xf5, 0xff, 0xd5, 0xff, 0x6f, 0xff, 0x7f, 0xef, 0xff, 0xd5, 0xed, 0xff, 0xd7, 0xf6, 0x77, 0xfb, 0xaf, 0x56, 0x5f, 0xbb, 0xff, 0x5f, 0xed, 0x5f, 0xbb, 0xed, 0x6b, 0xfd, 0xbf, 0xb6, 0xfd, 0x57, 0xdd, 0xfb, 0x6b, 0x6d, 0x7b, 0xfd, 0xff, 0xd5, 0xb6, 0x7f, 0xed, 0xfe, 0xb5, 0xfb, 0xbf, 0xd0, 0xbe, 0xe8, 0xe2, 0x43, 0x2d, 0xfd, 0x1f, 0xa0, 0x15, 0x05, 0xbd, 0x00, 0xfa, 0x27, 0x90, 0xbe, 0x50, 0xd0, 0x17, 0xa0, 0xbe, 0x00, 0xc2, 0x97, 0x00, 0xfe, 0x16, 0xa2, 0x0b, 0xc2, 0xfe, 0x06, 0xe1, 0xbf, 0x41, 0xff, 0xaf, 0xfe, 0x2f, 0xd2, 0x5e, 0x64, 0xb2, 0x51, 0x17, 0xfd, 0x83, 0xea, 0x87, 0x52, 0xbd, 0x24, 0xfd, 0x13, 0x89, 0x9e, 0x54, 0xd5, 0x51, 0xa9, 0x9f, 0x94, 0xf0, 0x0b, 0xa4, 0x7a, 0x83, 0xd0, 0x4b, 0x71, 0xbf, 0x22, 0xe8, 0xdf, 0xa8, 0xff, 0x02, 0xfa, 0xaf, 0x40, 0xbf, 0xa8, 0xc1, 0x85, 0x4a, 0xfa, 0x2f, 0xa0, 0x25, 0x04, 0x5c, 0x40, 0xf4, 0x0f, 0x40, 0x5f, 0x20, 0xa0, 0x0b, 0x40, 0xbd, 0x00, 0xa2, 0x4d, 0x01, 0xfc, 0x2a, 0x84, 0x25, 0x80, 0xfd, 0x49, 0xa2, 0xbf, 0x40, 0xfe, 0x05, 0xea, 0x0b, 0x10, 0x1a, 0xa0, 0xe0, 0x81, 0x06, 0xfa, 0x0b, 0xe8, 0x03, 0x05, 0x3d, 0x00, 0xfe, 0x45, 0x08, 0x1f, 0x10, 0xd0, 0x09, 0x44, 0x1e, 0x00, 0xa0, 0x07, 0x00, 0x5e, 0x00, 0xa0, 0x05, 0x88, 0x5e, 0x00, 0xe0, 0x2f, 0x20, 0x7f, 0x05, 0xf9, 0x0b, 0x84, 0xbe, 0x48, 0x80, 0x05, 0x11, 0xfc, 0x57, 0xa0, 0x0f, 0x01, 0xba, 0x12, 0xf9, 0x17, 0x40, 0x5d, 0x50, 0xa0, 0x03, 0x01, 0x7a, 0x80, 0xc0, 0x05, 0x40, 0xba, 0x00, 0x80, 0x03, 0x02, 0xfa, 0x00, 0xa0, 0xbf, 0x00, 0xdf, 0x51, 0xd0, 0x83, 0x22, 0xba, 0x48, 0xf0, 0x05, 0x05, 0xfd, 0x57, 0xfc, 0x13, 0x08, 0xdf, 0xc0, 0xfd, 0x57, 0xfa, 0x5f, 0x94, 0xb0, 0xa3, 0x2a, 0x1e, 0x5a, 0xf4, 0x87, 0x4a, 0x3e, 0xa8, 0xe2, 0x91, 0x15, 0x5a, 0xa8, 0xd4, 0x17, 0xe8, 0x7f, 0x01, 0xea, 0x0b, 0x1d, 0x5c, 0x10, 0x80, 0x03, 0x02, 0xfa, 0xbf, 0xd0, 0x2f, 0x10, 0x7a, 0x45, 0xff, 0xbf, 0x40, 0x7f, 0x20, 0xd1, 0x09, 0x0d, 0x3a, 0xa0, 0xc8, 0x0b, 0x05, 0xbd, 0x68, 0xa1, 0x87, 0x2a, 0x7c, 0x48, 0xe0, 0x5f, 0x80, 0xde, 0xa0, 0xd0, 0x83, 0x0d, 0x76, 0x48, 0xe0, 0x41, 0x01, 0xff, 0x2f, 0xfc, 0x37, 0x00, 0x7f, 0xe1, 0xff, 0x5b, 0xf8, 0x5f, 0x54, 0xd0, 0xc3, 0x25, 0x3a, 0x55, 0xe0, 0x85, 0x48, 0x1f, 0xa8, 0xa0, 0xa1, 0x17, 0x5e, 0x20, 0xb4, 0x17, 0xe0, 0x7f, 0x04, 0xf0, 0x89, 0x2e, 0xb8, 0x10, 0xa2, 0x07, 0x04, 0xf8, 0xdf, 0xe8, 0xaf, 0x08, 0xfa, 0x44, 0xfd, 0xff, 0xd0, 0x3f, 0x00, 0xe1, 0xbb, 0x1e, 0x7a, 0x43, 0xe8, 0x5f, 0x04, 0xba, 0xe8, 0xc2, 0xef, 0x1a, 0xb4, 0x80, 0xe0, 0x2f, 0x8a, 0x7e, 0x01, 0xc1, 0x43, 0x17, 0x3e, 0x08, 0xa0, 0x01, 0x42, 0xff, 0x37, 0xfc, 0xbf, 0x00, 0xbf, 0xe2, 0xff, 0x5f, 0xd8, 0x3f, 0x20, 0xf0, 0x8d, 0x16, 0xba, 0x25, 0xb4, 0x17, 0x42, 0x1f, 0x6c, 0xe2, 0xf7, 0x0f, 0xb6, 0x10, 0xb4, 0x2b, 0xc1, 0x5f, 0x00, 0xf0, 0x93, 0x2d, 0xd8, 0x00, 0xc2, 0x47, 0x08, 0xfa, 0xdf, 0xe8, 0x5b, 0x00, 0xfd, 0x40, 0xdf, 0xbf, 0xe8, 0x5f, 0x00, 0xa0, 0x23, 0x2d, 0xf8, 0x05, 0xe0, 0x6f, 0x00, 0x7a, 0xf2, 0x41, 0xbf, 0x3f, 0x58, 0x40, 0xe0, 0x0f, 0xa4, 0xbe, 0x22, 0xd0, 0x43, 0x2f, 0xbe, 0x08, 0xe1, 0x01, 0x00, 0xfa, 0x5a, 0xec, 0x9f, 0x00, 0x7d, 0x65, 0xfb, 0xbf, 0xe8, 0x7f, 0x04, 0xf1, 0x0b, 0x2d, 0xfe, 0x02, 0xb4, 0x37, 0xa0, 0x1e, 0xba, 0xe0, 0xff, 0x0b, 0x3e, 0x00, 0xf4, 0x05, 0x05, 0x7f, 0x01, 0xd0, 0x23, 0x1b, 0x74, 0x10, 0x42, 0x87, 0x08, 0xfe, 0x77, 0xf4, 0x6f, 0x40, 0xfe, 0xa2, 0xad, 0xbf, 0xf0, 0x3f, 0x10, 0xd0, 0x45, 0x2a, 0xf4, 0x07, 0xe8, 0x2d, 0x80, 0x3e, 0xd0, 0xa2, 0xf7, 0x3f, 0xb8, 0x00, 0xa0, 0x27, 0x42, 0x5d, 0x00, 0xe2, 0x93, 0x0b, 0x3a, 0x80, 0xe0, 0x41, 0x08, 0xbb, 0x18, 0xf4, 0x2b, 0x14, 0xbf, 0xa0, 0xa1, 0xaf, 0xd8, 0x5f, 0x44, 0xd1, 0x03, 0x0a, 0xfa, 0xa2, 0xe4, 0x27, 0x8a, 0x9e, 0x7a, 0xa2, 0xb7, 0x0b, 0x1e, 0xac, 0xf4, 0x03, 0x00, 0x7f, 0x82, 0xf0, 0x03, 0x3d, 0xda, 0x20, 0xa1, 0x87, 0x10, 0xfc, 0xea, 0xf8, 0x0f, 0x01, 0x7a, 0xa5, 0xc6, 0x7f, 0xe8, 0x5f, 0x50, 0xe0, 0x09, 0x36, 0xfc, 0x07, 0xa8, 0x2b, 0x40, 0x3a, 0xa8, 0xc1, 0xdd, 0x2e, 0x38, 0x51, 0xc8, 0x0b, 0x00, 0x5a, 0x20, 0xa1, 0x83, 0x05, 0x7a, 0x20, 0xa0, 0x41, 0x0d, 0x5f, 0x10, 0xec, 0x05, 0x14, 0xfb, 0x42, 0x61, 0x2f, 0x70, 0x3f, 0x54, 0x70, 0x43, 0x05, 0xf6, 0x55, 0xe4, 0x81, 0x0a, 0x5f, 0x68, 0xe0, 0x43, 0x0b, 0x1e, 0x49, 0xe4, 0x41, 0x15, 0x7b, 0x22, 0xf0, 0x15, 0x0a, 0x5c, 0x80, 0xc2, 0x05, 0x15, 0x74, 0xa8, 0xb0, 0x27, 0x05, 0xfc, 0x42, 0x82, 0xdf, 0xa8, 0x5f, 0x20, 0xd1, 0x13, 0x12, 0xfc, 0xab, 0xd0, 0x23, 0x44, 0x3a, 0xa1, 0x42, 0x8b, 0x0a, 0x7a, 0xa8, 0xd0, 0x07, 0x02, 0x7c, 0x11, 0xd1, 0x87, 0x0a, 0xbf, 0xa8, 0xe0, 0xc5, 0x05, 0x3f, 0x20, 0xec, 0x01, 0x05, 0xbf, 0x24, 0xe1, 0x2b, 0xa8, 0x5f, 0xb4, 0xd0, 0x81, 0x09, 0xff, 0x2f, 0xd4, 0x91, 0x0a, 0xbd, 0x28, 0x61, 0x43, 0x42, 0x1e, 0x48, 0xd4, 0x81, 0x12, 0xbf, 0x54, 0xf8, 0x17, 0x40, 0x7a, 0xa0, 0x80, 0x01, 0x15, 0xf4, 0x00, 0xa0, 0x45, 0x02, 0xf4, 0x05, 0xa0, 0x07, 0x00, 0x3d, 0x00, 0x80, 0x0f, 0x80, 0xfa, 0x07, 0xa0, 0x07, 0x00, 0xfa, 0x00, 0x80, 0x0b, 0x80, 0xba, 0x00, 0xa0, 0x01, 0x00, 0x74, 0x01, 0xd4, 0x0b, 0x40, 0x5f, 0x50, 0xe8, 0x01, 0x05, 0xba, 0x08, 0xa0, 0x41, 0x43, 0xfe, 0x05, 0xa8, 0x13, 0x80, 0x1f, 0x50, 0xd0, 0x03, 0xc0, 0xfe, 0x05, 0xa0, 0x01, 0x00, 0xba, 0x00, 0xc0, 0x05, 0x40, 0xbf, 0x00, 0xa0, 0x01, 0x05, 0x7d, 0x01, 0xfa, 0xff, 0xb5, 0xbf, 0xdb, 0xd5, 0x6f, 0x5f, 0x7d, 0xa5, 0xea, 0x5f, 0xad, 0xfa, 0x5f, 0xed, 0xaf, 0xd6, 0x5e, 0xb5, 0xea, 0xff, 0x5a, 0xff, 0x7f, 0xeb, 0x57, 0xd5, 0x7e, 0x57, 0xb5, 0xff, 0xba, 0xfd, 0xaa, 0xea, 0x6f, 0xab, 0xfa, 0x03, 0xea, 0xaf, 0xda, 0xfd, 0x6c, 0xf5, 0xd5, 0x53, 0x7f, 0xb5, 0xf6, 0xe5, 0x57, 0xff, 0x4b, 0xed, 0xb7, 0x6a, 0x7f, 0xd5, 0xb6, 0x57, 0xd5, 0xff, 0x57, 0xf5, 0x5b, 0x55, 0xff, 0xb5, 0xd6, 0x2f, 0xd5, 0xbf, 0xb6, 0xf6, 0x55, 0xad, 0x7e, 0xad, 0xfb, 0xff, 0xed, 0xff, 0xfb, 0xdb, 0x6f, 0xbf, 0xfd, 0xab, 0xda, 0x5f, 0xbb, 0xfd, 0xdf, 0xfe, 0x5f, 0xd5, 0xbf, 0x7d, 0xeb, 0x7f, 0xfb, 0xff, 0x7f, 0xad, 0xdf, 0xad, 0xfd, 0xaf, 0xf5, 0xff, 0xfd, 0xff, 0x5b, 0xab, 0xb7, 0xb7, 0xff, 0xd7, 0xfe, 0xff, 0xfe, 0xff, 0xfe, 0xfd, 0xff, 0xdf, 0xff, 0xfd, 0xff, 0xf7, 0xdf, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xfb, 0xff, 0xff, 0xff, 0xdf, 0xff, 0xf7, 0xee, 0xff, 0xff, 0xfd, 0xf7, 0xfe, 0xff, 0xff, 0xfb, 0xff, 0xff, 0xfb, 0xfb, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xef, 0xf7, 0xef, 0xff, 0xff, 0xdf, 0xff, 0xdf, 0xff, 0xff, 0xff, 0xfd, 0xff, 0xff, 0xff, 0xfb, 0xff, 0xff, 0xdf, 0xff, 0xff, 0xff, 0xdf, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0xff, 0xff, 0xee, 0xff, 0xff, 0xf6, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xef, 0xff, 0xff, 0xfb, 0xff, 0xff, 0xdf, 0xff, 0xeb, 0xff, 0xfb, 0xff, 0xff, 0xdd, 0xff, 0xff, 0xff, 0xff, 0xef, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xbf, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xfb, 0xff, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xbf, 0xff, 0xbf, 0xfa, 0xff, 0x7f, 0xf5, 0xbf, 0xfa, 0xbf, 0x5d, 0xff, 0xd7, 0xee, 0xbe, 0x6d, 0xf5, 0xd7, 0x7b, 0xbf, 0xba, 0xdd, 0xaf, 0x5d, 0xfb, 0x55, 0xef, 0x5f, 0xf5, 0xff, 0xaf, 0xf7, 0xff, 0xfe, 0xff, 0xd5, 0xfb, 0xff, 0xff, 0xff, 0x8b, 0xfe, 0xff, 0xa4, 0xff, 0xff, 0xc3, 0xff, 0x48, 0xff, 0xb6, 0xf5, 0xbb, 0x77, 0xf7, 0xb6, 0xbf, 0xfb, 0xae, 0xdf, 0x6f, 0xf7, 0xf7, 0xee, 0xfe, 0xee, 0xfa, 0xed, 0x5d, 0xff, 0xda, 0xda, 0x5f, 0xab, 0xff, 0x6f, 0xd5, 0xff, 0xff, 0xff, 0xcd, 0xff, 0x2f, 0xb4, 0xff, 0xbf, 0xf0, 0x5f, 0xea, 0x5f, 0x55, 0xf5, 0x55, 0x95, 0x3d, 0xd5, 0xd0, 0x95, 0xb6, 0x7a, 0x74, 0xa9, 0x95, 0xa6, 0x3e, 0x29, 0xeb, 0x57, 0xea, 0xff, 0x6b, 0xd5, 0x6f, 0xb5, 0x7f, 0x29, 0xed, 0xff, 0xff, 0xff, 0x07, 0xfa, 0x7f, 0xc0, 0xff, 0xff, 0xa4, 0xbf, 0xa0, 0x7f, 0x00, 0xd0, 0x01, 0x02, 0x1a, 0x20, 0xc0, 0x01, 0x05, 0x1c, 0x50, 0xc0, 0x03, 0x0a, 0x5a, 0x00, 0xa0, 0x0d, 0x80, 0xbe, 0x02, 0xc0, 0x1b, 0x40, 0xdd, 0x00, 0xa0, 0xff, 0xff, 0xff, 0x82, 0xfe, 0x2f, 0xf0, 0xff, 0x5f, 0xf0, 0xaf, 0xa0, 0x1f, 0x00, 0xf4, 0x01, 0x01, 0x1c, 0x10, 0x64, 0x89, 0x02, 0x1a, 0x54, 0xd0, 0x09, 0x01, 0x3a, 0x00, 0xf0, 0x07, 0x80, 0x7e, 0x01, 0x60, 0x4f, 0x40, 0x7f, 0x04, 0xa0, 0xff, 0xff, 0xff, 0x8b, 0xfa, 0x5f, 0x40, 0xff, 0xbf, 0xca, 0xbf, 0xa0, 0x7f, 0x00, 0xd0, 0x05, 0x04, 0x35, 0x41, 0x80, 0x03, 0x09, 0x5c, 0x50, 0x82, 0x03, 0x0a, 0x5c, 0x00, 0xa0, 0x0b, 0x40, 0xbb, 0x04, 0xc0, 0x15, 0x00, 0x5d, 0x01, 0xc0, 0xff, 0xff, 0x7f, 0x01, 0xfe, 0x5f, 0xfc, 0xff, 0x57, 0xf4, 0x7f, 0xa1, 0x1f, 0xa8, 0xd0, 0x45, 0x45, 0x3e, 0x28, 0xf0, 0x41, 0x08, 0x1d, 0x54, 0xd1, 0x8b, 0x0a, 0x36, 0x94, 0xd0, 0x83, 0x0a, 0x5a, 0xa4, 0x70, 0x87, 0xaa, 0x5e, 0x50, 0xea, 0xff, 0xff, 0xff, 0x0b, 0xfa, 0x6f, 0xd0, 0xff, 0xbf, 0xe8, 0xff, 0xc2, 0x7f, 0x00, 0xf0, 0x03, 0x04, 0x5a, 0x50, 0xa1, 0x05, 0x09, 0x75, 0x68, 0xd0, 0x03, 0x55, 0x5c, 0x00, 0xd1, 0x0d, 0x81, 0x7c, 0x20, 0xc0, 0x0b, 0x04, 0x34, 0x90, 0xa0, 0xff, 0xff, 0x7f, 0x21, 0xfa, 0x5f, 0xfc, 0xff, 0x17, 0xfc, 0x5f, 0x63, 0x5f, 0x52, 0xd5, 0x15, 0xa5, 0x3e, 0x01, 0xf4, 0x43, 0x00, 0x3d, 0x34, 0xe1, 0x85, 0x0d, 0x5e, 0x84, 0xd0, 0x87, 0x14, 0x3e, 0x94, 0xf4, 0x81, 0x2b, 0x3c, 0xaa, 0xe8, 0xff, 0xff, 0xff, 0x42, 0xda, 0x5f, 0xe8, 0xff, 0x9d, 0xf4, 0xff, 0xa1, 0x7f, 0x21, 0xf1, 0x27, 0x02, 0x7f, 0x11, 0xd0, 0x85, 0x10, 0x5a, 0xd0, 0xb0, 0x17, 0x2b, 0x34, 0x08, 0xd1, 0x4b, 0x0a, 0x5a, 0x20, 0xa1, 0x87, 0x0c, 0x9a, 0x50, 0xd0, 0xff, 0xff, 0xbf, 0x52, 0xfa, 0x2f, 0xfc, 0xff, 0x17, 0xfe, 0xff, 0xa2, 0xbf, 0x90, 0xf4, 0x2b, 0xa1, 0xbb, 0x00, 0xfa, 0x05, 0x08, 0x3f, 0x34, 0xd0, 0x85, 0x0d, 0x3e, 0x84, 0xd0, 0x8b, 0x02, 0x7d, 0x54, 0xf0, 0x81, 0x2e, 0x5c, 0xb4, 0xf4, 0xff, 0xff, 0xff, 0x52, 0xf4, 0x7f, 0xe4, 0xff, 0x0f, 0xfa, 0xff, 0xc2, 0x7f, 0x03, 0xdb, 0x1f, 0x40, 0x7f, 0x0b, 0xf5, 0x43, 0x00, 0xd8, 0xd0, 0xea, 0x87, 0x2e, 0xf4, 0x0a, 0xf5, 0x57, 0x80, 0x5e, 0x80, 0xa0, 0x43, 0x17, 0x34, 0x50, 0xc0, 0xff, 0xff, 0x7f, 0xb3, 0xfe, 0x4f, 0xf8, 0xff, 0x85, 0xff, 0x7f, 0x61, 0xff, 0x41, 0xfd, 0x17, 0xe0, 0xff, 0x81, 0xfa, 0x01, 0x08, 0x7f, 0x54, 0xf0, 0x85, 0x06, 0xbe, 0x8a, 0xfa, 0x55, 0xa0, 0x7e, 0x22, 0xf0, 0xa9, 0x1b, 0x3e, 0x0a, 0xf4, 0xff, 0xff, 0xff, 0xed, 0xf7, 0x5f, 0xf4, 0xff, 0x27, 0xfa, 0xff, 0xa3, 0xbf, 0x0a, 0xfa, 0xff, 0xa8, 0xff, 0x0a, 0xfc, 0x07, 0x42, 0xbc, 0x20, 0xd4, 0x0b, 0x2d, 0xfa, 0x07, 0xdd, 0x0f, 0x52, 0x5b, 0x01, 0xa0, 0x03, 0x2d, 0xb4, 0x40, 0xd0, 0xff, 0xff, 0xff, 0xff, 0xfe, 0x6f, 0xfc, 0xff, 0x02, 0xff, 0x7f, 0xa1, 0xff, 0x86, 0xfe, 0x2f, 0xe8, 0xbf, 0x82, 0xf6, 0x01, 0x01, 0xbe, 0x10, 0xf2, 0x85, 0x27, 0xfa, 0x8a, 0xff, 0x03, 0x50, 0xfb, 0x02, 0xf8, 0x83, 0x25, 0xba, 0x00, 0xd4, 0xff, 0xff, 0xff, 0xff, 0xff, 0x3f, 0xe4, 0xbf, 0xc7, 0xfe, 0xff, 0xc2, 0xbf, 0x09, 0xea, 0xdf, 0xd0, 0x7f, 0x01, 0xd8, 0x07, 0x04, 0xfa, 0x52, 0xf8, 0x0b, 0x1a, 0xfc, 0x07, 0xfa, 0x0f, 0x10, 0x7d, 0x01, 0xa0, 0x0b, 0x16, 0xbc, 0x00, 0xe8, 0xaf, 0xaa, 0xfd, 0xff, 0xff, 0x2f, 0xf8, 0xff, 0xe0, 0xff, 0x7f, 0xe1, 0x5e, 0x44, 0xfa, 0x3f, 0xd8, 0x5f, 0x51, 0xea, 0x41, 0x01, 0xbf, 0x40, 0xde, 0x8b, 0x0b, 0xfe, 0x82, 0xff, 0x85, 0x96, 0x5e, 0x50, 0xd1, 0x85, 0x00, 0xff, 0xaa, 0xe4, 0xed, 0xdd, 0xfe, 0xff, 0xff, 0x5f, 0xd4, 0xbf, 0x45, 0xff, 0xff, 0xa2, 0x5f, 0x08, 0xe8, 0xdf, 0xe0, 0x7f, 0x20, 0xd0, 0x07, 0x04, 0xfd, 0x13, 0xf4, 0x07, 0x24, 0xf4, 0x0d, 0xfa, 0x07, 0x09, 0xb8, 0xa2, 0xe0, 0x0b, 0x49, 0x74, 0x17, 0xa0, 0x07, 0x44, 0xfa, 0xff, 0xff, 0x6f, 0xf4, 0xff, 0xe4, 0xff, 0x5f, 0xc1, 0x3f, 0x40, 0xf4, 0x17, 0xb0, 0x1f, 0x10, 0xd0, 0x05, 0x05, 0x7f, 0x81, 0xfe, 0x0b, 0x01, 0x7f, 0x85, 0xfa, 0x05, 0x40, 0x5e, 0x10, 0xd0, 0x05, 0x00, 0xfe, 0x83, 0xe8, 0x23, 0x09, 0xfd, 0xff, 0xff, 0x3f, 0xd0, 0xbf, 0xa0, 0xff, 0xff, 0x60, 0x5f, 0x14, 0x50, 0xb7, 0xc0, 0x5e, 0x40, 0xc0, 0x05, 0x02, 0xfa, 0x0b, 0xfa, 0x0b, 0x88, 0xfc, 0x03, 0xfc, 0x0b, 0x15, 0x38, 0x64, 0x51, 0x4b, 0x80, 0xfd, 0x2e, 0xa0, 0x13, 0x41, 0xfc, 0xff, 0xff, 0x2f, 0xe8, 0xbf, 0xe8, 0xff, 0x5f, 0xa0, 0x3f, 0x00, 0xf0, 0x2f, 0x68, 0x5f, 0x28, 0xd4, 0x03, 0x41, 0xff, 0x02, 0xfd, 0x8b, 0x42, 0x7e, 0x81, 0xee, 0x8b, 0x00, 0x1a, 0x30, 0xd0, 0x23, 0xc4, 0xfe, 0x07, 0xe0, 0x03, 0x00, 0xf2, 0xff, 0xff, 0x7f, 0xa0, 0x7e, 0xe8, 0xff, 0xbf, 0xc4, 0x5f, 0x00, 0xd4, 0x2f, 0x80, 0x3f, 0x50, 0x40, 0x57, 0x16, 0xfd, 0x8b, 0xfe, 0x2f, 0x90, 0xff, 0x09, 0xfa, 0x2f, 0x40, 0x5c, 0x48, 0x80, 0x0b, 0x00, 0xfe, 0x1b, 0xa1, 0x03, 0x00, 0xfa, 0xff, 0xff, 0x2f, 0xb4, 0x5f, 0xe8, 0xff, 0xaf, 0xe0, 0x3f, 0x40, 0xf2, 0x17, 0xe0, 0x1f, 0x54, 0xf0, 0x13, 0x93, 0x7f, 0x85, 0xfe, 0x17, 0xc0, 0xbf, 0x02, 0xfa, 0x4b, 0x10, 0x5f, 0x7e, 0xd4, 0x05, 0x40, 0xff, 0x97, 0xe8, 0x03, 0x80, 0xf8, 0xff, 0xff, 0x7f, 0xc0, 0xff, 0xf0, 0xff, 0x7f, 0xa0, 0xfe, 0xbf, 0xfd, 0xff, 0xbf, 0xff, 0x55, 0xd7, 0xef, 0xef, 0xfe, 0x7b, 0xfb, 0xff, 0xbf, 0xfd, 0xed, 0xff, 0x7f, 0xef, 0xba, 0xaa, 0xeb, 0x0b, 0x81, 0xfe, 0xaf, 0xb6, 0xfb, 0x7f, 0xff, 0xff, 0xff, 0x2f, 0xf2, 0xbf, 0xfe, 0xff, 0x2f, 0xf5, 0xbf, 0xaa, 0xfd, 0xaf, 0xea, 0xbf, 0xfe, 0xfd, 0x7f, 0x77, 0xff, 0xdf, 0xff, 0xaf, 0xea, 0xff, 0xb7, 0xfe, 0x5f, 0x6b, 0xff, 0xff, 0xfa, 0x57, 0xed, 0xff, 0xff, 0xfb, 0x57, 0xd5, 0xfd, 0xff, 0xff, 0xff, 0xbb, 0xff, 0xf5, 0xff, 0xff, 0xd5, 0xff, 0xff, 0xef, 0xff, 0xff, 0xff, 0x77, 0xef, 0xef, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfb, 0xff, 0xff, 0xff, 0xfb, 0xff, 0x5b, 0xaa, 0xfe, 0xef, 0xfe, 0xff, 0x7f, 0xff, 0xff, 0xff, 0xbf, 0xda, 0xff, 0xfe, 0xff, 0x7f, 0xfd, 0xff, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xfd, 0xff, 0xff, 0xfb, 0x7f, 0x7f, 0xff, 0x6f, 0xef, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xef, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x5f, 0xff, 0xff, 0xbf, 0xff, 0xfb, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xf5, 0xff, 0xff, 0x7f, 0xf5, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xef, 0xf5, 0xff, 0xdf, 0xfa, 0xaf, 0xff, 0xbf, 0xeb, 0xff, 0xff, 0xbe, 0xff, 0xff, 0xdf, 0xaf, 0xfe, 0xff, 0xff, 0xff, 0xea, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf6, 0xff, 0xff, 0xff, 0xb7, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x2b, 0xfd, 0xff, 0x57, 0xff, 0xea, 0xff, 0xff, 0xfa, 0xff, 0x7f, 0xd3, 0xff, 0xff, 0x7f, 0xb2, 0xff, 0xff, 0xff, 0x7f, 0x6b, 0xff, 0xff, 0xff, 0xff, 0x7f, 0xdb, 0xff, 0xff, 0xff, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x0f, 0xf4, 0xff, 0x0f, 0xfa, 0x83, 0xfe, 0xbf, 0xc0, 0xff, 0xdf, 0xc0, 0xff, 0xff, 0x5f, 0x80, 0xfe, 0xff, 0xff, 0xdf, 0xc0, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xa0, 0xff, 0xff, 0xff, 0xab, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x05, 0xf6, 0xff, 0x0b, 0x7a, 0xc1, 0xff, 0xdf, 0xe8, 0xff, 0x7f, 0xd0, 0xff, 0xff, 0x7f, 0x80, 0xef, 0xff, 0xff, 0x7f, 0x60, 0xff, 0xff, 0xff, 0xff, 0x7f, 0xc0, 0xff, 0xff, 0xff, 0x8d, 0xfe, 0xff, 0xef, 0xff, 0xff, 0xed, 0xff, 0xff, 0xff, 0x0f, 0xfd, 0xff, 0x8b, 0xfe, 0x85, 0xfe, 0x7f, 0xd0, 0xff, 0x5f, 0x51, 0xdf, 0xf7, 0x5f, 0x0a, 0xfa, 0xff, 0xef, 0xff, 0xd0, 0xff, 0xbf, 0xfb, 0xff, 0x5f, 0x61, 0xff, 0xff, 0xff, 0x87, 0xfe, 0x7f, 0xf5, 0xff, 0x57, 0xff, 0xaf, 0xb6, 0xff, 0x85, 0xfe, 0x5f, 0x45, 0x7a, 0xc1, 0xff, 0x5f, 0xe8, 0xff, 0x55, 0xd0, 0xef, 0xfa, 0x7f, 0x81, 0xfe, 0x5f, 0xf5, 0x5f, 0xa8, 0xfe, 0xef, 0xdd, 0xff, 0x77, 0xb0, 0xff, 0xda, 0xff, 0x82, 0xfe, 0xdf, 0xbb, 0xfe, 0xbb, 0xd5, 0x7b, 0xdb, 0xfa, 0x0b, 0xf5, 0xef, 0x0d, 0xfe, 0x05, 0xea, 0xff, 0xa0, 0x7d, 0x5f, 0xc1, 0x77, 0xad, 0xbe, 0x0a, 0xf4, 0xbf, 0xfb, 0xfe, 0x40, 0xeb, 0xbb, 0xea, 0xbe, 0x55, 0xc1, 0x7f, 0x77, 0xff, 0x0d, 0xfa, 0x6f, 0xc8, 0x7f, 0x89, 0xd4, 0x0f, 0x41, 0xfa, 0x8d, 0xfd, 0x2b, 0x42, 0x7f, 0xa1, 0xfa, 0x5f, 0xaa, 0xff, 0x41, 0xf0, 0x0b, 0xc9, 0xbf, 0x80, 0xfa, 0xab, 0x48, 0x3f, 0x28, 0xfd, 0x8f, 0x54, 0xff, 0x0a, 0xf0, 0xaf, 0x50, 0xff, 0xc1, 0xff, 0x5f, 0x22, 0xdd, 0x25, 0xd1, 0x5b, 0x92, 0xfc, 0x87, 0xfe, 0x5f, 0x0a, 0xfa, 0x0a, 0xfa, 0xff, 0xc0, 0xbf, 0x16, 0xd0, 0x55, 0xa4, 0x7a, 0x05, 0xd0, 0x2f, 0xa2, 0xdf, 0x00, 0xd2, 0x2b, 0x42, 0x7b, 0x93, 0xd0, 0x5f, 0x8a, 0xff, 0x8b, 0xfe, 0x07, 0x00, 0x7e, 0x00, 0xc0, 0x05, 0x00, 0xf4, 0x85, 0xfe, 0x0b, 0x40, 0xbf, 0x00, 0xf9, 0x5f, 0x60, 0x7f, 0x02, 0xd2, 0x03, 0x00, 0x5e, 0x00, 0xf4, 0x05, 0x20, 0x7d, 0x80, 0xe0, 0x05, 0x00, 0x5a, 0x00, 0xd0, 0x17, 0x40, 0xfd, 0xf2, 0xfe, 0x0f, 0x80, 0xba, 0x02, 0xa0, 0x07, 0x00, 0xf8, 0x0b, 0xff, 0x0f, 0x0a, 0xfa, 0x01, 0xe8, 0xbf, 0x84, 0xbe, 0x00, 0xe0, 0x05, 0x00, 0x7a, 0x00, 0xd0, 0x07, 0x00, 0xbe, 0x00, 0xa0, 0x0b, 0x40, 0x7e, 0x00, 0xe0, 0x2f, 0x00, 0xfe, 0xab, 0xff, 0x83, 0x00, 0x5a, 0x00, 0xd0, 0x05, 0x00, 0xfa, 0x8d, 0xfd, 0x4b, 0x40, 0xbf, 0x00, 0xfd, 0xbf, 0xe0, 0x5f, 0x00, 0xf0, 0x03, 0x80, 0x3e, 0x41, 0xfa, 0x05, 0x80, 0xb7, 0x10, 0xb0, 0x0b, 0x00, 0x3a, 0x00, 0xf8, 0x2b, 0x40, 0x7f, 0xf3, 0xff, 0x0f, 0x2c, 0x7c, 0x68, 0xa2, 0xa7, 0x2a, 0xfa, 0x87, 0xfe, 0x3f, 0x81, 0x7c, 0xd1, 0xf5, 0xdf, 0xa8, 0x7f, 0xa9, 0xa0, 0x0d, 0x2d, 0xf4, 0x0e, 0xea, 0x83, 0x16, 0xfc, 0xa0, 0xc2, 0x07, 0x2d, 0x5c, 0x54, 0xa1, 0x17, 0x2a, 0xfd, 0xff, 0xff, 0x83, 0x26, 0x36, 0x24, 0xf0, 0x05, 0x00, 0xfa, 0x85, 0xfe, 0x2f, 0x41, 0x7e, 0xa9, 0xfe, 0xbf, 0xf0, 0x5f, 0x48, 0xf0, 0x03, 0x04, 0xfa, 0x02, 0xfd, 0x41, 0x02, 0x3d, 0x48, 0xa2, 0x85, 0x06, 0x36, 0x24, 0xd0, 0x0b, 0x80, 0xff, 0xbf, 0xff, 0x0d, 0x1b, 0x58, 0x50, 0xa1, 0x93, 0x24, 0xfc, 0x0b, 0xff, 0xdf, 0x80, 0xfe, 0xd1, 0xff, 0xbf, 0xa8, 0x7f, 0x50, 0xa1, 0x0f, 0x35, 0xfa, 0x4f, 0xf6, 0x07, 0x00, 0xfd, 0xa0, 0x81, 0x5b, 0x3b, 0x58, 0xd0, 0xe0, 0x27, 0x01, 0xfc, 0xfb, 0xff, 0x87, 0x0a, 0x7e, 0x54, 0xf0, 0x0b, 0x20, 0xfe, 0x8d, 0xfd, 0x6f, 0x90, 0x3e, 0xe9, 0xff, 0x5f, 0xe8, 0x5f, 0x34, 0xf0, 0x8b, 0x1a, 0xfc, 0x45, 0xfa, 0x01, 0x00, 0x5d, 0xa8, 0xe0, 0x4f, 0x0b, 0x3e, 0x5c, 0x70, 0x13, 0x20, 0xff, 0xff, 0xff, 0x05, 0x35, 0x34, 0x68, 0xa1, 0x87, 0x0a, 0xf4, 0x87, 0xfe, 0x5f, 0x01, 0xf5, 0xd0, 0xfe, 0xbf, 0xd0, 0x3f, 0x50, 0xd1, 0x0b, 0x04, 0xf4, 0x17, 0xfc, 0x47, 0x10, 0xba, 0xc0, 0x82, 0xab, 0x36, 0x58, 0x50, 0xd1, 0x17, 0x00, 0xfd, 0xff, 0xff, 0x87, 0x16, 0x3a, 0x54, 0xf0, 0x21, 0x00, 0xfe, 0x0a, 0xf7, 0x57, 0x88, 0x7e, 0xe9, 0xff, 0xd7, 0xd8, 0x5f, 0xb4, 0xd0, 0x0b, 0x40, 0xfe, 0x8a, 0xfe, 0x45, 0x0a, 0xbf, 0xa0, 0xe0, 0x4d, 0x0b, 0x5e, 0x14, 0xd0, 0x0b, 0x15, 0xfe, 0xff, 0xff, 0x0b, 0x08, 0x5c, 0x50, 0xa1, 0x07, 0x52, 0xb4, 0x85, 0xfa, 0x2d, 0x40, 0x7a, 0xa9, 0xff, 0x5f, 0x60, 0x7f, 0xa8, 0xe0, 0x0d, 0x00, 0xbe, 0x05, 0xea, 0x13, 0x01, 0xda, 0x20, 0xa1, 0xa7, 0x15, 0x5a, 0x60, 0xe0, 0x27, 0x0a, 0xf5, 0xff, 0xff, 0x8b, 0x0a, 0x5e, 0x54, 0xb0, 0xa1, 0x10, 0xf6, 0x82, 0xfa, 0x27, 0x04, 0x7f, 0xe1, 0xfd, 0x2b, 0xa8, 0x1f, 0x24, 0xb1, 0x87, 0xaa, 0xf7, 0xaa, 0xfc, 0x85, 0x08, 0x7b, 0xa0, 0xa0, 0x25, 0x0a, 0x3a, 0x28, 0xb0, 0x25, 0x11, 0xfd, 0xff, 0xff, 0x0f, 0x80, 0x1a, 0x20, 0xc0, 0x05, 0x04, 0x78, 0x00, 0xd0, 0x0b, 0x08, 0xb8, 0x91, 0xfe, 0x07, 0x00, 0x3d, 0x50, 0xc0, 0x0b, 0xc0, 0x7e, 0x00, 0xd0, 0x07, 0x40, 0x3e, 0x00, 0xc8, 0x03, 0x80, 0xbc, 0x00, 0xc0, 0x07, 0x00, 0xfe, 0xff, 0xff, 0x47, 0x00, 0x5e, 0x50, 0xd0, 0x45, 0x00, 0x3c, 0x22, 0xf8, 0x01, 0x06, 0xfe, 0x90, 0xea, 0x13, 0xa1, 0x1f, 0x00, 0xd0, 0x0b, 0x6a, 0x3f, 0x02, 0xf4, 0x05, 0x00, 0x3f, 0x00, 0xe0, 0x0b, 0x00, 0x5e, 0x00, 0xd0, 0x01, 0x00, 0xff, 0xff, 0xff, 0x5f, 0xd5, 0x3b, 0x55, 0xd5, 0x2b, 0x55, 0xf5, 0x95, 0xea, 0xaf, 0xda, 0xfa, 0x01, 0xf8, 0xaf, 0x94, 0x5e, 0xf5, 0x4a, 0x4f, 0x80, 0xfe, 0x29, 0xe9, 0xab, 0xea, 0x5e, 0x5b, 0xfd, 0x57, 0xd5, 0xff, 0xaf, 0xaa, 0xaf, 0xaa, 0xfa, 0xff, 0xff, 0x6f, 0x69, 0xbf, 0x52, 0xf2, 0xa5, 0x94, 0x7a, 0x91, 0xfa, 0x8b, 0x56, 0x7f, 0x05, 0xed, 0xab, 0xe4, 0xbf, 0x32, 0xf2, 0x37, 0xc0, 0xbe, 0x8a, 0xfa, 0xaf, 0x6a, 0x7f, 0x49, 0xb6, 0x5b, 0x65, 0x7b, 0x21, 0xf5, 0x8b, 0x64, 0xff, 0xff, 0xff, 0xff, 0xaa, 0xdf, 0xfa, 0xdd, 0x5b, 0xbb, 0xfe, 0xde, 0xf6, 0x77, 0xbd, 0xfc, 0x03, 0xf8, 0x6f, 0x5b, 0xdf, 0xed, 0xda, 0x5f, 0x22, 0xff, 0xab, 0xf6, 0xbb, 0xea, 0xff, 0xb6, 0xfd, 0x6f, 0xb5, 0xff, 0xdf, 0xda, 0x77, 0xbb, 0xff, 0xff, 0xff, 0x7f, 0xff, 0xff, 0x5f, 0xed, 0xdf, 0xdf, 0xff, 0xd7, 0xfe, 0xdf, 0xdf, 0xff, 0x12, 0xed, 0x7f, 0xfb, 0xff, 0x7e, 0xff, 0x6f, 0x90, 0xff, 0xfe, 0xff, 0xdf, 0xff, 0xbf, 0xb7, 0xff, 0x7f, 0xff, 0xff, 0xdb, 0xff, 0xbf, 0xdb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfb, 0xff, 0xff, 0xfb, 0xff, 0xff, 0xff, 0xfb, 0xff, 0xff, 0xdf, 0xfa, 0xff, 0xdf, 0xff, 0xf7, 0xef, 0xbf, 0x6f, 0xff, 0xb7, 0xfb, 0xff, 0xfb, 0xff, 0xff, 0xfe, 0xff, 0xef, 0xff, 0xff, 0xee, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdb, 0xff, 0xab, 0xff, 0x7f, 0xef, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xee, 0xfe, 0xdf, 0xff, 0xbf, 0xfd, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0xd3, 0xff, 0xab, 0xfe, 0xaf, 0xee, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xbf, 0xf7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x6d, 0xff, 0x97, 0xff, 0xff, 0xf4, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x6f, 0xe8, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x5f, 0xe0, 0xff, 0x85, 0xfd, 0x5f, 0xf0, 0xff, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x3f, 0xfd, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xa8, 0xff, 0x8f, 0xfe, 0x7f, 0xa4, 0xff, 0xf5, 0xfa, 0xaf, 0x6e, 0xff, 0xea, 0xfa, 0xb7, 0x5f, 0xff, 0xea, 0xf6, 0x5f, 0xdf, 0xfe, 0x57, 0xd2, 0xaf, 0xef, 0xff, 0xb5, 0xfd, 0xaf, 0xab, 0xff, 0x57, 0xf5, 0xff, 0xff, 0xff, 0xff, 0xff, 0x5f, 0xe8, 0xff, 0x85, 0xfe, 0x5f, 0xf1, 0x7f, 0xaf, 0xde, 0xeb, 0xb7, 0xbb, 0xbe, 0xde, 0xdb, 0xd5, 0x5b, 0x7b, 0xbb, 0xf7, 0xdb, 0xfe, 0x2a, 0xf8, 0x7b, 0xf5, 0xbf, 0xae, 0xed, 0xeb, 0xfa, 0xff, 0x7a, 0xbf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xd0, 0xff, 0x0b, 0xff, 0x7f, 0xa1, 0xff, 0xb2, 0xea, 0x57, 0xad, 0x7e, 0x53, 0xeb, 0xad, 0x6e, 0x7d, 0xad, 0xea, 0x9b, 0x6e, 0xbb, 0x57, 0xa2, 0x97, 0x55, 0xff, 0xd5, 0xfa, 0x5f, 0xad, 0x7a, 0x4b, 0xe5, 0xff, 0xff, 0x7f, 0xdb, 0xfd, 0x5f, 0xf8, 0xff, 0x8d, 0xfd, 0xbf, 0xf1, 0xbf, 0x00, 0xe0, 0x01, 0x03, 0x5c, 0x50, 0xf0, 0x01, 0x03, 0x1c, 0x40, 0xc0, 0x05, 0x05, 0xfc, 0x00, 0xf0, 0x83, 0x60, 0x5f, 0x40, 0xd0, 0x01, 0x80, 0xbe, 0x00, 0xa0, 0xff, 0xff, 0xdf, 0xbd, 0xf6, 0xbf, 0xd0, 0xff, 0x87, 0xfe, 0xff, 0xa0, 0xff, 0x04, 0xa4, 0x01, 0x15, 0x5a, 0x00, 0xa0, 0x05, 0x09, 0x3a, 0x20, 0x50, 0x07, 0x1a, 0x7a, 0x03, 0xa0, 0x17, 0x80, 0x7f, 0x10, 0xf2, 0x07, 0x40, 0xfe, 0x02, 0xc0, 0xff, 0xff, 0x7f, 0xd5, 0xfe, 0xaf, 0xf8, 0xff, 0x85, 0xfe, 0xbf, 0xb0, 0xbf, 0x00, 0xe0, 0x49, 0x05, 0x3d, 0x50, 0xf0, 0x41, 0x05, 0x1d, 0x10, 0xc0, 0x23, 0x07, 0x7e, 0x01, 0xf0, 0x05, 0xe0, 0x5e, 0x00, 0xf0, 0x01, 0x00, 0x5b, 0x00, 0xd0, 0xff, 0xff, 0x5f, 0x08, 0xd0, 0x7f, 0xd0, 0xff, 0x0b, 0xff, 0xff, 0xc1, 0xff, 0x22, 0xa1, 0x03, 0x04, 0x75, 0x21, 0xd4, 0x05, 0x10, 0x5a, 0x44, 0xb1, 0x07, 0x15, 0xf9, 0x53, 0xa4, 0x07, 0x04, 0x7d, 0x08, 0xda, 0x0f, 0x0a, 0x7c, 0x50, 0xa2, 0xff, 0xff, 0x3f, 0x04, 0xf4, 0x2f, 0xf8, 0xff, 0x85, 0xfd, 0xbf, 0xd0, 0xbe, 0x02, 0xe1, 0x85, 0x02, 0x3d, 0x11, 0xf2, 0x45, 0x10, 0x5d, 0x50, 0xd0, 0x85, 0x12, 0xfd, 0x0a, 0xf2, 0x03, 0x01, 0x5f, 0x0a, 0xea, 0x05, 0x02, 0x1e, 0x08, 0xb0, 0xff, 0xff, 0x7f, 0x81, 0xa0, 0x3f, 0xd0, 0xff, 0x8f, 0xfe, 0x7f, 0x81, 0xff, 0x15, 0xd8, 0x15, 0x45, 0xfe, 0x02, 0xfa, 0x03, 0x00, 0x7a, 0x22, 0xe4, 0x07, 0x0d, 0xfe, 0x77, 0xe8, 0x57, 0xa0, 0xfe, 0x4a, 0xf8, 0x8b, 0x28, 0x74, 0xa8, 0xd0, 0xff, 0xff, 0x5f, 0x00, 0xf0, 0x17, 0xf8, 0xff, 0x85, 0xfe, 0xbf, 0xe1, 0xff, 0x02, 0xd5, 0x07, 0xa2, 0x7f, 0x83, 0xba, 0x45, 0x12, 0x3f, 0x11, 0xf2, 0xc1, 0x05, 0xfb, 0x1d, 0xf4, 0x05, 0x80, 0xbe, 0x2b, 0xfe, 0x0b, 0x0e, 0x1a, 0x54, 0xd0, 0xff, 0xff, 0x7f, 0x20, 0xa1, 0x7f, 0xd1, 0xff, 0x0b, 0xff, 0xff, 0x50, 0x7f, 0x17, 0xe8, 0x37, 0x80, 0xfe, 0x09, 0xfa, 0x07, 0x00, 0xdd, 0xa0, 0xd0, 0x07, 0x16, 0xbd, 0x6b, 0xd2, 0xab, 0x24, 0xff, 0x2e, 0xf4, 0x8f, 0x28, 0x7c, 0x24, 0xe1, 0xff, 0xff, 0xbf, 0x95, 0xf5, 0x5f, 0xf8, 0xff, 0x8d, 0xff, 0xbf, 0xd0, 0x7f, 0x81, 0xf4, 0x2b, 0xe5, 0xbf, 0x82, 0xde, 0x03, 0x00, 0xfd, 0x12, 0xfe, 0x45, 0x03, 0xfd, 0x2d, 0xf8, 0x05, 0xa0, 0xfb, 0x0b, 0xf6, 0x05, 0x04, 0x36, 0x20, 0xf0, 0xff, 0xff, 0xff, 0xea, 0xfa, 0xbf, 0xd0, 0xff, 0x87, 0xfa, 0x7f, 0xe1, 0xff, 0x2a, 0xa8, 0x2f, 0xa0, 0xfe, 0x01, 0xf0, 0x05, 0x11, 0xfe, 0x42, 0xf0, 0x05, 0x14, 0xfe, 0x2a, 0xe4, 0x07, 0x14, 0xfe, 0x6e, 0xf8, 0x0b, 0x00, 0x7c, 0x00, 0xa0, 0xff, 0xff, 0xff, 0xbe, 0xfe, 0xdf, 0xf8, 0xff, 0x85, 0xfe, 0xbf, 0xb0, 0xbf, 0x00, 0xe0, 0x2f, 0xa0, 0x5f, 0x50, 0xf4, 0x27, 0x84, 0x7f, 0x01, 0xfe, 0x03, 0x85, 0x5f, 0x20, 0xfa, 0x41, 0x82, 0x7f, 0x03, 0xea, 0x07, 0x40, 0x3f, 0x05, 0xf0, 0xff, 0xff, 0xff, 0xf7, 0xdf, 0x7f, 0xc8, 0xff, 0x0b, 0xff, 0xff, 0xd1, 0xff, 0xa0, 0xa8, 0xbf, 0xe8, 0x7f, 0x20, 0xd0, 0x15, 0x22, 0xfd, 0x8b, 0xfa, 0x05, 0x00, 0x7a, 0x04, 0xf4, 0x87, 0x00, 0xfa, 0x2a, 0xb0, 0x0b, 0x44, 0x7d, 0x41, 0xd2, 0xff, 0xff, 0xff, 0xff, 0xff, 0x5f, 0xe8, 0xff, 0x8d, 0xff, 0x5f, 0xd0, 0x3f, 0x08, 0xe0, 0xb7, 0xa0, 0x5f, 0x12, 0xfa, 0x07, 0x85, 0x7f, 0x01, 0xfe, 0x85, 0x22, 0x3f, 0x21, 0xfa, 0x05, 0x04, 0x7f, 0x03, 0xf4, 0x8b, 0x72, 0xbf, 0x2f, 0xd0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xd0, 0xff, 0x4b, 0xfd, 0x7f, 0xe1, 0xff, 0x01, 0xa4, 0xbf, 0x40, 0x7d, 0x40, 0xc0, 0x5b, 0xa2, 0xfe, 0x0f, 0xfb, 0x03, 0xc0, 0xff, 0x02, 0xed, 0x27, 0x40, 0xfd, 0x01, 0xd0, 0x0b, 0xdc, 0xff, 0x55, 0xe1, 0xff, 0xff, 0xff, 0xff, 0xff, 0xbf, 0xd8, 0xff, 0x8f, 0xff, 0xaf, 0xf0, 0xbf, 0x00, 0xf0, 0xbf, 0x10, 0x5f, 0x50, 0xf0, 0x2f, 0xab, 0xff, 0xc5, 0xff, 0x41, 0xb0, 0xbe, 0x80, 0xfe, 0x13, 0x48, 0x7f, 0x82, 0xd0, 0x85, 0xd6, 0xff, 0x37, 0xb0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xef, 0x62, 0xff, 0xf7, 0xfe, 0x7f, 0xd4, 0xff, 0xfe, 0xdf, 0xff, 0x00, 0xfd, 0x76, 0xf7, 0xf7, 0xf6, 0xff, 0x5f, 0xfd, 0x77, 0xd7, 0xff, 0xbf, 0xfd, 0xef, 0xb7, 0xfe, 0xfb, 0xfe, 0x07, 0xf0, 0xff, 0x0f, 0xc0, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0x65, 0xff, 0xbb, 0xff, 0x2f, 0xf7, 0xff, 0xab, 0xea, 0xbf, 0x54, 0xbf, 0xde, 0xfd, 0xbf, 0xbf, 0xfd, 0xf7, 0xff, 0x5f, 0xfb, 0xff, 0xd6, 0xff, 0xbf, 0xba, 0xff, 0x2d, 0xeb, 0x01, 0xf4, 0xff, 0x2b, 0xd1, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfb, 0xff, 0xff, 0xff, 0xff, 0xfa, 0xff, 0x7f, 0xff, 0xff, 0xab, 0xfe, 0x7b, 0xf7, 0xff, 0xff, 0xff, 0xdf, 0xff, 0xf7, 0xfe, 0xff, 0xff, 0xff, 0xf7, 0xef, 0xff, 0xff, 0xfe, 0xaf, 0xda, 0xff, 0xaf, 0xd4, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdd, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xff, 0x7f, 0xbd, 0xff, 0xff, 0xff, 0xff, 0xef, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfd, 0xff, 0xff, 0xff, 0xab, 0xfe, 0xff, 0xbf, 0xea, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xd7, 0xf7, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfb, 0xff, 0xff, 0xff, 0xff, 0x57, 0xf5, 0xff, 0xff, 0xff, 0xb7, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0xfd, 0xff, 0xef, 0xff, 0xb7, 0xf6, 0xfe, 0xff, 0xff, 0xff, 0xfa, 0xff, 0xdf, 0xff, 0xff, 0xff, 0xff, 0x7a, 0xbf, 0xff, 0xfd, 0xff, 0xbb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x6b, 0xff, 0x5f, 0xd5, 0xff, 0xff, 0xff, 0x2b, 0xd5, 0xff, 0x77, 0xff, 0xdb, 0xb7, 0xff, 0xff, 0xff, 0x5f, 0xdf, 0xff, 0xd5, 0xff, 0xff, 0xff, 0x7f, 0x4b, 0xe5, 0xdf, 0xd6, 0xff, 0x96, 0xea, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xae, 0xfa, 0xff, 0xb5, 0xff, 0x6b, 0xff, 0x07, 0x60, 0xff, 0xaf, 0xff, 0x2f, 0x15, 0xfd, 0xff, 0xf7, 0xbf, 0xe8, 0xff, 0x86, 0xfe, 0xff, 0xff, 0xbf, 0x00, 0xa0, 0x7f, 0xf5, 0x7f, 0xab, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x4b, 0xff, 0x97, 0xd0, 0xff, 0x7a, 0xfb, 0x05, 0xd0, 0xff, 0x8b, 0xfd, 0x85, 0x95, 0xff, 0xb6, 0xfd, 0x2b, 0xd5, 0x7f, 0xc3, 0xff, 0xff, 0xff, 0xff, 0x02, 0xc0, 0x5f, 0x80, 0xfe, 0x02, 0xe0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x22, 0xfc, 0x2f, 0x00, 0xfd, 0x29, 0xfd, 0x47, 0x45, 0xff, 0x27, 0xff, 0x05, 0x02, 0x7a, 0xfb, 0xf6, 0x1f, 0xa0, 0xfe, 0x05, 0xfd, 0xff, 0xff, 0x5f, 0x00, 0xd0, 0x0f, 0xc0, 0xbf, 0x00, 0xfa, 0xff, 0xff, 0xff, 0xf7, 0xff, 0xff, 0xff, 0x7f, 0x01, 0xff, 0x0b, 0xa0, 0x7d, 0xb9, 0xfd, 0x05, 0xa0, 0xfe, 0x85, 0xff, 0x03, 0x02, 0xbd, 0xaa, 0x7a, 0x07, 0xc0, 0xbf, 0x40, 0xff, 0xff, 0xff, 0x7f, 0x00, 0xa0, 0x7f, 0xa0, 0xff, 0x04, 0xa0, 0xff, 0xff, 0xff, 0xbd, 0xea, 0xbf, 0xed, 0xff, 0x43, 0xea, 0x4d, 0x08, 0xfe, 0x29, 0xfe, 0x47, 0x02, 0xff, 0x0f, 0xfd, 0x05, 0x01, 0xfe, 0x2a, 0xd5, 0x3f, 0xa0, 0x7e, 0x05, 0xea, 0xff, 0xff, 0x9f, 0x00, 0xb0, 0x2f, 0xb5, 0x5f, 0x00, 0xf0, 0xff, 0xff, 0xbf, 0xd6, 0xfe, 0xab, 0xfd, 0x7f, 0x41, 0xfc, 0x07, 0x00, 0x77, 0x6d, 0xfb, 0x13, 0x40, 0xf7, 0x85, 0xff, 0x27, 0x45, 0x5f, 0x00, 0xf0, 0x97, 0x82, 0x5f, 0x80, 0xfa, 0x7f, 0xf5, 0x7f, 0x00, 0xd0, 0xdf, 0xca, 0x7f, 0x00, 0xa1, 0xff, 0xff, 0x7f, 0xa9, 0xea, 0xdf, 0x56, 0xff, 0x02, 0xf4, 0x05, 0x00, 0xfc, 0xbb, 0xff, 0x4d, 0x25, 0xfd, 0x0b, 0xfd, 0x0b, 0x80, 0x7a, 0x00, 0xd0, 0x6f, 0x55, 0x7e, 0x01, 0xe8, 0xff, 0xfb, 0x9f, 0x00, 0xd0, 0xff, 0xfa, 0x1f, 0x22, 0xa8, 0x57, 0xed, 0x5f, 0x00, 0xb0, 0x01, 0xc0, 0x7f, 0x51, 0xfa, 0x23, 0x82, 0xf6, 0xfb, 0xff, 0x27, 0x00, 0xff, 0x8d, 0xfd, 0x2b, 0xa2, 0x5f, 0x50, 0xf4, 0x7f, 0x85, 0x5f, 0x28, 0xf4, 0x3f, 0xd8, 0x7f, 0x00, 0xd0, 0xff, 0xff, 0xbf, 0x00, 0x82, 0xff, 0x77, 0x5f, 0x00, 0xe0, 0x8b, 0x52, 0xfb, 0x02, 0xd4, 0x0b, 0x10, 0xfc, 0xff, 0xfb, 0x15, 0x00, 0xfa, 0x07, 0xff, 0x17, 0xc4, 0x3e, 0x01, 0xa0, 0xdf, 0x22, 0xbd, 0x92, 0xf0, 0x7f, 0xf5, 0x1f, 0x00, 0xd0, 0x7f, 0xef, 0x1f, 0x24, 0xd0, 0x8b, 0xa8, 0x5f, 0x00, 0xf0, 0x8b, 0x40, 0xbf, 0x22, 0xfa, 0x41, 0x02, 0xfa, 0xff, 0xff, 0x07, 0x08, 0xfd, 0x8b, 0xff, 0x1b, 0xa1, 0xbf, 0x50, 0xf0, 0x6f, 0x81, 0xbd, 0x28, 0xb8, 0x5f, 0xf9, 0x7f, 0x00, 0xe0, 0xff, 0xff, 0x7f, 0x01, 0x84, 0x05, 0x00, 0x3e, 0xa8, 0xaa, 0x0b, 0x8a, 0x7c, 0x81, 0xe8, 0x13, 0x04, 0xf8, 0xff, 0xff, 0x45, 0x22, 0xfe, 0x4d, 0xfd, 0x2f, 0x40, 0x5f, 0x10, 0xa1, 0x7f, 0x00, 0xfe, 0x9b, 0xe8, 0xbf, 0xaa, 0x3f, 0x00, 0xf0, 0xff, 0xff, 0x1f, 0x08, 0xc2, 0x07, 0xa0, 0x1f, 0x94, 0xfc, 0x0b, 0x00, 0x7e, 0x01, 0xfc, 0x81, 0x02, 0xfd, 0xff, 0xff, 0x05, 0x02, 0xf7, 0xa7, 0xff, 0x2b, 0xf0, 0x7f, 0x54, 0xf0, 0x1f, 0x10, 0x5f, 0x49, 0xe8, 0x5f, 0xf9, 0x7f, 0x00, 0xa0, 0xff, 0xff, 0x7f, 0x40, 0xd0, 0xa5, 0x2a, 0x7f, 0xe8, 0xeb, 0x4f, 0x24, 0xda, 0x02, 0xea, 0x0b, 0x00, 0xfa, 0xff, 0xff, 0x03, 0x40, 0xfd, 0x0b, 0xfd, 0x9f, 0x00, 0x3f, 0x00, 0xd0, 0x7f, 0x85, 0xfa, 0x10, 0xf0, 0x7f, 0xd0, 0x3f, 0x00, 0xf0, 0xff, 0xff, 0x1f, 0x20, 0x60, 0x57, 0x52, 0x1f, 0x6c, 0xfd, 0x4b, 0x00, 0x7e, 0x22, 0xf4, 0x0b, 0x40, 0xfa, 0xff, 0xff, 0x45, 0xa0, 0xfe, 0x8d, 0xff, 0x0b, 0xe8, 0x5f, 0x20, 0xd8, 0x57, 0x41, 0xbf, 0x04, 0xfa, 0x5f, 0xda, 0x7f, 0x00, 0xd0, 0xff, 0xff, 0xbf, 0x02, 0xd0, 0x57, 0xa9, 0x7f, 0xf4, 0xff, 0x2f, 0x24, 0xfa, 0x01, 0xfa, 0x05, 0x00, 0xfd, 0xff, 0xff, 0x83, 0x40, 0xff, 0x07, 0xfd, 0xaf, 0x40, 0x7f, 0x12, 0xe1, 0xbf, 0x00, 0x7d, 0x29, 0xe8, 0x7f, 0xe0, 0x3f, 0x00, 0xd0, 0xff, 0xff, 0x7f, 0x20, 0xd4, 0x7f, 0xff, 0x5f, 0xfd, 0xff, 0x05, 0x02, 0x7d, 0x95, 0xfa, 0x87, 0x12, 0xfd, 0xff, 0xff, 0x03, 0xb4, 0xff, 0x8b, 0xff, 0x2b, 0xa8, 0x5f, 0x00, 0xf8, 0xa5, 0xa4, 0xbd, 0x00, 0xfd, 0x2f, 0xf4, 0x7f, 0x00, 0xe0, 0xff, 0xff, 0xdf, 0x02, 0xe0, 0xef, 0xdb, 0xff, 0xf6, 0xff, 0x0b, 0x88, 0xfe, 0x4a, 0xfe, 0x2d, 0x40, 0xfe, 0xff, 0xff, 0x07, 0x52, 0xfd, 0x0b, 0xfd, 0x5f, 0xc0, 0x7e, 0x01, 0xd0, 0x17, 0x05, 0xfe, 0x01, 0xf6, 0x5f, 0xa1, 0xff, 0x00, 0xb0, 0xff, 0xff, 0xff, 0x90, 0xfa, 0xff, 0xff, 0x7f, 0xff, 0xff, 0x83, 0xc0, 0xfe, 0xef, 0xef, 0x2f, 0x48, 0xff, 0xff, 0xff, 0x2b, 0x09, 0xff, 0x85, 0xff, 0x0b, 0x60, 0x5f, 0xbc, 0xfa, 0x05, 0x00, 0xbf, 0xc2, 0xff, 0x6f, 0xf0, 0x3f, 0x00, 0xc0, 0xff, 0xff, 0xff, 0x07, 0xf6, 0xff, 0xff, 0xff, 0xfd, 0xff, 0x0b, 0x49, 0xff, 0x7b, 0xff, 0x57, 0xa1, 0xff, 0xff, 0xff, 0x17, 0x00, 0xfd, 0x0f, 0xfd, 0x2f, 0x40, 0xbf, 0xa7, 0xed, 0x05, 0x00, 0xfa, 0x45, 0xfa, 0x3f, 0xa0, 0xff, 0x00, 0xd0, 0xff, 0xff, 0x7f, 0x05, 0xf5, 0xff, 0xff, 0xff, 0xff, 0xff, 0x43, 0xe1, 0xff, 0xff, 0xff, 0x3f, 0xd0, 0xff, 0xff, 0xff, 0x1f, 0x80, 0xfe, 0x85, 0xff, 0x2b, 0xa4, 0xff, 0xfa, 0xf6, 0x03, 0x00, 0xff, 0x46, 0xff, 0x2f, 0xf0, 0x3f, 0x00, 0xc0, 0xff, 0xff, 0xff, 0xfb, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0xbd, 0xff, 0xbf, 0xff, 0xff, 0xef, 0xfd, 0xff, 0xff, 0xef, 0x2a, 0xff, 0xaf, 0xfe, 0x2f, 0x51, 0xff, 0xff, 0xff, 0x57, 0x55, 0xfd, 0xd5, 0xff, 0x7f, 0xa0, 0xff, 0x00, 0xe0, 0xff, 0xff, 0xff, 0x5f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x57, 0xef, 0xff, 0xff, 0xff, 0xaf, 0xfa, 0xff, 0xff, 0xff, 0xb7, 0xc4, 0xff, 0xab, 0xff, 0xbf, 0xda, 0xff, 0xdf, 0xff, 0x55, 0xa5, 0xff, 0xd7, 0xff, 0x2f, 0xfa, 0xbf, 0x54, 0xa2, 0xff, 0xff, 0xff, 0xf7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x6a, 0xfb, 0xaf, 0xff, 0xef, 0xf6, 0xff, 0xff, 0xfb, 0xbf, 0xda, 0xfe, 0xbf, 0xff, 0xff, 0xd0, 0x7f, 0x55, 0xea, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf7, 0xff, 0xff, 0xff, 0x7f, 0x77, 0xff, 0xff, 0xff, 0xff, 0xf7, 0xff, 0xff, 0xff, 0xdf, 0xff, 0xff, 0xfd, 0xff, 0xbf, 0xfe, 0xff, 0xdd, 0xfd, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf7, 0xff, 0xff, 0xf7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xed, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xed, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0x55, 0xff, 0xbf, 0xfa, 0xff, 0xd5, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfb, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0xbb, 0xfa, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0xff, 0xff, 0x7f, 0xfd, 0xff, 0xff, 0xff, 0x5f, 0xfd, 0xff, 0xff, 0xff, 0xbf, 0xf5, 0xff, 0xef, 0xfe, 0xff, 0xee, 0xff, 0xff, 0xff, 0xef, 0xfe, 0x7f, 0xfd, 0xff, 0xff, 0xff, 0xff, 0xff, 0xbf, 0x8a, 0xff, 0xff, 0xff, 0xff, 0xfb, 0xff, 0x7f, 0x65, 0xff, 0x8b, 0xff, 0xff, 0xff, 0xff, 0xab, 0xff, 0xff, 0xfb, 0xff, 0x7f, 0x01, 0xf7, 0x3f, 0xf0, 0xff, 0x43, 0xff, 0xff, 0xff, 0xbb, 0xff, 0xff, 0x55, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x52, 0xea, 0xff, 0xff, 0xff, 0xbf, 0xff, 0xdf, 0xd2, 0xff, 0x57, 0xfa, 0xff, 0xfe, 0xff, 0x5f, 0xfa, 0x7f, 0xfd, 0x7f, 0x5b, 0xc9, 0xbf, 0x17, 0xfd, 0xbf, 0x60, 0xff, 0xff, 0xff, 0xaf, 0xfd, 0x5f, 0xf4, 0xff, 0xff, 0xff, 0xff, 0xff, 0x5f, 0x10, 0xf5, 0xff, 0xff, 0xff, 0xd7, 0xff, 0x6f, 0xf4, 0xff, 0x52, 0xff, 0xff, 0xf7, 0xff, 0x45, 0xfb, 0xff, 0xe8, 0xdf, 0x6e, 0x10, 0xef, 0x6e, 0x70, 0xfb, 0x89, 0xff, 0xff, 0x7f, 0x13, 0xea, 0xff, 0xa0, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0x00, 0xd0, 0xff, 0xff, 0xff, 0x4d, 0xfd, 0x3f, 0x42, 0xff, 0x05, 0xf4, 0xbf, 0xfa, 0xff, 0x06, 0xec, 0xbf, 0xf8, 0xbf, 0x36, 0x82, 0xa3, 0x57, 0xb4, 0xbf, 0xa0, 0xff, 0xff, 0xff, 0x85, 0xfc, 0x5f, 0xd0, 0xff, 0xff, 0xff, 0xff, 0xff, 0x5f, 0x00, 0xf2, 0xff, 0xff, 0xff, 0xa7, 0xff, 0x17, 0xc0, 0x7f, 0x45, 0xfc, 0xff, 0xd8, 0xff, 0x25, 0xf4, 0xff, 0xea, 0x5f, 0x5a, 0x50, 0x57, 0x3d, 0x70, 0xf5, 0x82, 0xff, 0xff, 0xff, 0x45, 0xe0, 0xbf, 0xe8, 0xff, 0xff, 0xff, 0xff, 0xff, 0xbf, 0x84, 0xa0, 0xdf, 0xfe, 0xfe, 0x0d, 0xfc, 0x5f, 0x54, 0xff, 0x03, 0xf5, 0xbf, 0xf0, 0xff, 0x82, 0xe8, 0xbf, 0xf4, 0x3f, 0x94, 0x48, 0x07, 0x17, 0x3c, 0xbc, 0xe0, 0xff, 0x6e, 0xbf, 0x24, 0xf4, 0xbf, 0x68, 0xff, 0xff, 0xff, 0xff, 0xff, 0xbf, 0x80, 0xd0, 0xeb, 0x57, 0xff, 0x97, 0xff, 0x57, 0xd0, 0x7f, 0xa5, 0xfe, 0x57, 0xd8, 0x7f, 0xa1, 0xf4, 0x7f, 0xf5, 0x7f, 0x22, 0x91, 0x57, 0x2a, 0x34, 0xd2, 0x92, 0xbf, 0xdb, 0xfb, 0xa2, 0xd4, 0x6f, 0xd0, 0xff, 0xff, 0xff, 0x7f, 0xf7, 0x7f, 0x02, 0xd0, 0x5f, 0x6d, 0xfb, 0x17, 0xfa, 0x2f, 0xa4, 0xff, 0x83, 0xf4, 0xbd, 0xa8, 0xfe, 0x45, 0xd0, 0xbf, 0xe8, 0x5f, 0x52, 0xc0, 0x13, 0x1a, 0x34, 0x59, 0xc0, 0xdf, 0x5a, 0xfd, 0x82, 0xf0, 0xbf, 0xf8, 0xff, 0xff, 0xff, 0xff, 0xfb, 0x5f, 0x82, 0xd0, 0x05, 0x17, 0xfc, 0xdb, 0xfe, 0x57, 0xa4, 0x7f, 0x15, 0xfe, 0x07, 0xa0, 0x7f, 0x25, 0xfc, 0xdf, 0x50, 0x7f, 0x11, 0x12, 0x97, 0x48, 0xb8, 0xd0, 0xa2, 0xb7, 0x54, 0xbe, 0x45, 0xd4, 0x7f, 0xc8, 0xff, 0xff, 0xff, 0x7f, 0xb5, 0x7f, 0x01, 0xc1, 0x07, 0x09, 0xfa, 0x5f, 0xff, 0x2f, 0x50, 0xff, 0x0b, 0xf5, 0xab, 0x48, 0xfa, 0x85, 0xe8, 0x7f, 0xd0, 0x7f, 0x81, 0x90, 0x0b, 0x24, 0xbc, 0x24, 0xa1, 0x2f, 0x04, 0xfe, 0x22, 0xf4, 0x17, 0xe8, 0xff, 0xff, 0xff, 0xbf, 0xe8, 0x3f, 0x41, 0xf8, 0x45, 0x15, 0xfd, 0xff, 0xff, 0x37, 0xca, 0xff, 0x42, 0xf4, 0x05, 0x00, 0xff, 0x4b, 0xfe, 0xbf, 0x60, 0xdf, 0x08, 0x40, 0x27, 0x00, 0x70, 0x00, 0x80, 0x17, 0x08, 0xfa, 0x83, 0xe8, 0xbf, 0xd0, 0xff, 0xff, 0xff, 0xff, 0xe8, 0xff, 0x00, 0xc0, 0x05, 0x0a, 0xfd, 0xef, 0xfb, 0x5f, 0x40, 0xff, 0x0a, 0xf8, 0x07, 0x00, 0xfd, 0x5d, 0xf5, 0xbf, 0x50, 0x7f, 0x41, 0x41, 0x03, 0x00, 0x34, 0xa1, 0xc0, 0x15, 0x02, 0xfb, 0x20, 0xf4, 0x5f, 0xe8, 0xff, 0xff, 0xff, 0x5f, 0xe0, 0x5f, 0x02, 0xf4, 0x83, 0x0b, 0xfd, 0xff, 0xff, 0x17, 0xca, 0xbf, 0x45, 0xfe, 0x05, 0x00, 0xfd, 0x4f, 0xff, 0x7f, 0x05, 0xfd, 0x08, 0x80, 0x17, 0x84, 0xd0, 0x04, 0x20, 0x87, 0x88, 0xbe, 0x0f, 0xf9, 0xb7, 0x52, 0xff, 0xff, 0xff, 0xff, 0xa8, 0x7f, 0x11, 0xf5, 0x47, 0x0a, 0xfa, 0xff, 0xff, 0x7f, 0x51, 0xff, 0x17, 0xf9, 0xab, 0x70, 0xff, 0xff, 0xfe, 0x5f, 0x81, 0xbf, 0x00, 0xfa, 0x45, 0xa1, 0x7e, 0x00, 0xb5, 0x03, 0x44, 0xfd, 0x41, 0xec, 0x3f, 0xe9, 0xff, 0xff, 0xff, 0x5f, 0xe8, 0x3f, 0x81, 0xfe, 0x01, 0x0b, 0xff, 0xff, 0xff, 0x5f, 0xd5, 0xff, 0x45, 0xfd, 0x5f, 0xa8, 0xff, 0x77, 0xff, 0x6f, 0x05, 0x7c, 0x21, 0xa8, 0x27, 0x08, 0x58, 0x10, 0xea, 0x0b, 0x81, 0x7e, 0x05, 0x60, 0xff, 0xfe, 0xff, 0x57, 0xff, 0xff, 0xfb, 0xff, 0x00, 0xf5, 0x47, 0x04, 0xfd, 0xff, 0xff, 0xff, 0xfb, 0xff, 0xbf, 0xff, 0xb7, 0xb0, 0xff, 0xff, 0xff, 0x37, 0x89, 0x5f, 0x11, 0xe9, 0x05, 0x8d, 0xbe, 0x80, 0xe8, 0x83, 0x40, 0xff, 0x01, 0xfc, 0xef, 0x77, 0xff, 0xfb, 0xff, 0x7f, 0xfd, 0x5f, 0x82, 0xfe, 0x01, 0x01, 0xfd, 0xff, 0xff, 0xff, 0xfd, 0xff, 0xff, 0xff, 0x5f, 0xd4, 0xfb, 0xff, 0xff, 0x17, 0x12, 0xfa, 0x00, 0xd0, 0x0b, 0x29, 0x58, 0x28, 0xb4, 0x0d, 0x00, 0xf5, 0x06, 0xe8, 0x7f, 0xff, 0xff, 0x0f, 0xfd, 0xff, 0xff, 0x7f, 0x01, 0xff, 0x07, 0x04, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xfd, 0xb7, 0x68, 0xff, 0xff, 0xff, 0x17, 0x01, 0x3f, 0x90, 0xd8, 0x07, 0x16, 0xbd, 0x00, 0xd4, 0x47, 0x0a, 0xfe, 0xf6, 0xef, 0xff, 0xff, 0xff, 0x85, 0xff, 0xff, 0xff, 0x3f, 0x81, 0xfa, 0x01, 0x21, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf7, 0xff, 0x97, 0xa4, 0xff, 0xff, 0xff, 0x17, 0x04, 0x7d, 0x21, 0xa2, 0xab, 0x54, 0x54, 0x20, 0xe1, 0x2f, 0x00, 0xfa, 0xad, 0xfa, 0xff, 0xff, 0xff, 0x0b, 0xfc, 0xff, 0xff, 0x7f, 0x80, 0xf6, 0x05, 0x00, 0xfa, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x2b, 0x21, 0xfd, 0xff, 0xff, 0x17, 0x25, 0x3f, 0x01, 0xc1, 0x15, 0x54, 0x38, 0x08, 0xe1, 0x0b, 0x0a, 0xfb, 0xff, 0xfe, 0xff, 0xff, 0xff, 0x82, 0xfe, 0xff, 0xff, 0x5f, 0x22, 0xfa, 0x41, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x8d, 0x28, 0xff, 0xff, 0xff, 0x2f, 0xc0, 0xde, 0xa0, 0xa4, 0x0b, 0x59, 0xb4, 0x90, 0xa8, 0x7f, 0x69, 0xfe, 0xdf, 0xff, 0xff, 0xff, 0xff, 0x0b, 0xfd, 0xff, 0xff, 0x5f, 0x00, 0xf4, 0x6f, 0x17, 0xfa, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x03, 0x00, 0xfd, 0xff, 0xff, 0x17, 0xa0, 0x7f, 0x50, 0xab, 0x47, 0x6c, 0x37, 0xa8, 0xea, 0xaf, 0x2d, 0xfb, 0xff, 0xff, 0xff, 0xff, 0xff, 0x02, 0xfd, 0xff, 0xff, 0x3f, 0x00, 0xfa, 0x7f, 0x13, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x03, 0x00, 0xff, 0xff, 0xff, 0x7f, 0x6f, 0x7f, 0xd1, 0xed, 0x05, 0xf4, 0xba, 0xd0, 0xef, 0x7f, 0xfb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x0b, 0xfe, 0xff, 0xff, 0x7f, 0x00, 0xd4, 0xff, 0x0d, 0xfd, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xfd, 0xff, 0xff, 0xdf, 0xf5, 0xbf, 0xed, 0xee, 0xef, 0x7f, 0xff, 0xfe, 0xfa, 0xff, 0xbf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x4d, 0xf7, 0xff, 0xff, 0x5f, 0xff, 0xff, 0xff, 0x57, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xab, 0xd4, 0xfe, 0xff, 0xff, 0x7f, 0xff, 0xff, 0xfb, 0xff, 0x7f, 0xf5, 0xbf, 0xed, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xab, 0xfd, 0xff, 0xff, 0xff, 0xa5, 0xfa, 0xff, 0xaf, 0xfd, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xef, 0xff, 0xfd, 0xff, 0xb7, 0xff, 0xff, 0xff, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x8f, 0xfe, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xbf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0xf7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x5f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0xff, 0xdf, 0xf5, 0xff, 0xff, 0xff, 0xff, 0xfb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xbf, 0xfb, 0xff, 0xd7, 0xff, 0xdf, 0xfe, 0xff, 0xbf, 0xf7, 0x5f, 0xd5, 0xff, 0xaf, 0xfe, 0xbf, 0xfe, 0xff, 0xff, 0xfe, 0x57, 0xb5, 0xff, 0xf7, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, 0x7f, 0xbd, 0xff, 0x57, 0xff, 0x5f, 0xfb, 0xff, 0xbf, 0xfa, 0xef, 0xae, 0xfe, 0x8d, 0xfa, 0x37, 0xff, 0xff, 0x7f, 0xfc, 0xf7, 0xff, 0xff, 0x2b, 0xff, 0x6f, 0xf5, 0xff, 0x5f, 0xf9, 0xdb, 0xea, 0x7f, 0xbd, 0xfe, 0xbf, 0xd0, 0xff, 0xff, 0xff, 0xbf, 0xef, 0xff, 0x9b, 0xfd, 0x3f, 0xfd, 0xff, 0x6f, 0xfd, 0x37, 0xe3, 0xff, 0x46, 0xff, 0x97, 0xfa, 0xff, 0x57, 0xfe, 0x5f, 0x84, 0xfe, 0x8f, 0xfa, 0x2f, 0xfe, 0xff, 0xaf, 0xfc, 0x5b, 0xaa, 0x5b, 0x95, 0xf7, 0xbf, 0xd4, 0xff, 0x5b, 0xfb, 0x5f, 0x69, 0xff, 0x8b, 0xfe, 0xaf, 0xdd, 0xff, 0x3f, 0xf6, 0x2f, 0x95, 0xfe, 0x8b, 0xfa, 0x3f, 0xed, 0xff, 0x5f, 0xea, 0x2f, 0xca, 0xff, 0x22, 0xf5, 0xff, 0xa0, 0xff, 0x15, 0xf5, 0x4b, 0xd2, 0xbe, 0x4a, 0xfc, 0x7f, 0xe1, 0xff, 0xf7, 0xfe, 0xdf, 0xa4, 0xff, 0x16, 0xfb, 0x3f, 0xf2, 0xff, 0x57, 0xfa, 0x07, 0xa1, 0x7f, 0x41, 0xfa, 0x2b, 0xf4, 0xff, 0x05, 0xfe, 0x2b, 0x41, 0x7e, 0x03, 0xfc, 0x17, 0xf8, 0xfd, 0x16, 0xfa, 0x01, 0x00, 0xbe, 0xa0, 0xf6, 0x2f, 0xb4, 0xff, 0x32, 0xfa, 0x17, 0xa0, 0xff, 0x03, 0xfd, 0x5f, 0xf8, 0xff, 0x0b, 0xfd, 0x57, 0x14, 0xfd, 0x02, 0xfc, 0x3f, 0x69, 0x7f, 0x57, 0xf5, 0x4f, 0x14, 0xfb, 0x25, 0xa1, 0x6f, 0x82, 0xfe, 0x85, 0xaa, 0x0b, 0x80, 0x1d, 0x04, 0xf8, 0x7f, 0xc1, 0xfd, 0x53, 0xd5, 0x7f, 0x00, 0xfd, 0x15, 0xea, 0xbf, 0xa0, 0xfe, 0x57, 0xf6, 0x13, 0x42, 0x3f, 0x52, 0xea, 0x8b, 0xa8, 0xbf, 0x01, 0xfa, 0x0b, 0x42, 0x5d, 0x20, 0xf4, 0x2b, 0xa2, 0x3e, 0x24, 0xe8, 0x41, 0x15, 0x1c, 0x00, 0xfc, 0x5f, 0x54, 0xff, 0x4a, 0xfc, 0x0f, 0xaa, 0xff, 0x4a, 0xf4, 0xaf, 0xd4, 0xff, 0x0d, 0xf5, 0x07, 0x80, 0x7e, 0x01, 0xd0, 0x2f, 0x42, 0x7d, 0x55, 0xd1, 0x07, 0x00, 0xba, 0x00, 0x80, 0x07, 0x00, 0xf4, 0x00, 0xa0, 0x93, 0x2a, 0x3a, 0x05, 0xf4, 0x7f, 0xa1, 0xfe, 0x27, 0xe2, 0xff, 0x00, 0xfd, 0x07, 0xf5, 0x7f, 0x41, 0xff, 0x4b, 0xf2, 0x27, 0x20, 0x5f, 0x20, 0xfa, 0x05, 0x20, 0x5f, 0x00, 0xf8, 0x41, 0x00, 0xba, 0x00, 0xe0, 0x05, 0x00, 0x3e, 0x00, 0xa0, 0x83, 0x17, 0x1e, 0x21, 0xfd, 0x2f, 0x88, 0xff, 0x12, 0xf9, 0x17, 0x54, 0x7f, 0x51, 0xf0, 0x5f, 0x54, 0xff, 0x0d, 0xba, 0xaf, 0xd4, 0x7e, 0x02, 0xd0, 0x07, 0x80, 0x7e, 0x01, 0xd0, 0x8f, 0x4a, 0xbd, 0xb0, 0xd4, 0x8b, 0x4a, 0xba, 0xa8, 0xd4, 0x77, 0x15, 0x38, 0x0a, 0xe8, 0xbf, 0x20, 0xfd, 0x05, 0xe4, 0xbf, 0x00, 0xfd, 0x07, 0x6a, 0xbf, 0x00, 0xfd, 0x03, 0xe0, 0xb7, 0xd0, 0xbf, 0x8b, 0xfe, 0x77, 0x68, 0x7f, 0x85, 0xfe, 0x83, 0x04, 0xbe, 0x88, 0xd0, 0x8b, 0x04, 0xbf, 0x48, 0xd0, 0xd5, 0x2f, 0x5e, 0x00, 0xfc, 0x2f, 0x00, 0xff, 0x02, 0xf0, 0x5f, 0x80, 0xff, 0x02, 0xf0, 0x2f, 0x40, 0x7f, 0x09, 0xf9, 0x5f, 0xe8, 0xff, 0x05, 0xf5, 0x5f, 0xd1, 0xff, 0x0b, 0xf5, 0x0f, 0x8a, 0xba, 0x50, 0xe4, 0x0b, 0x4a, 0xba, 0xa0, 0xe8, 0x77, 0x1f, 0xb8, 0x10, 0xe8, 0xbf, 0xc8, 0xff, 0x0b, 0xfd, 0x2f, 0xa0, 0xfe, 0x03, 0xed, 0xaf, 0xa0, 0xff, 0x03, 0xec, 0xbf, 0xe8, 0xfe, 0x82, 0xff, 0x57, 0xd8, 0x7f, 0x85, 0xfd, 0xa5, 0x42, 0xff, 0x24, 0x68, 0x47, 0x82, 0xbe, 0x10, 0xe4, 0xff, 0x27, 0xbe, 0x00, 0xec, 0x17, 0x60, 0x7f, 0x81, 0xea, 0x37, 0xa8, 0x7f, 0x81, 0xfc, 0x2f, 0xa8, 0x7f, 0x81, 0xf6, 0x6f, 0xe8, 0xff, 0x8f, 0xfc, 0xff, 0xe8, 0xff, 0x8b, 0xfe, 0x1f, 0x08, 0xfc, 0x82, 0xe4, 0x2f, 0x08, 0xfe, 0xa5, 0xa8, 0xff, 0x3f, 0x74, 0x08, 0xe8, 0x2f, 0xa4, 0xff, 0x22, 0xfa, 0x2f, 0xa2, 0xff, 0x22, 0xf4, 0x37, 0x62, 0xff, 0x2b, 0xfa, 0xbf, 0xe8, 0xff, 0x8a, 0xfe, 0x5f, 0xf0, 0xff, 0x8b, 0xfe, 0x2f, 0x40, 0xbf, 0x02, 0xf0, 0x37, 0x40, 0x77, 0x01, 0xe8, 0xab, 0x05, 0x3a, 0x00, 0xd5, 0x2d, 0xc5, 0xbd, 0x22, 0xf4, 0x2b, 0xc1, 0x7f, 0x11, 0xfe, 0x2f, 0x42, 0xbf, 0x40, 0xfc, 0xff, 0xf0, 0xff, 0x0b, 0xff, 0xbf, 0xa8, 0xff, 0x86, 0xfe, 0x5b, 0x80, 0xfc, 0x45, 0xa8, 0x2f, 0x82, 0xfc, 0x06, 0xd0, 0xff, 0x3e, 0xdc, 0x05, 0xe0, 0x17, 0x21, 0x7f, 0x11, 0xd4, 0x17, 0x24, 0x7d, 0x52, 0xd0, 0x07, 0xa1, 0x7e, 0x21, 0xe2, 0x5f, 0xd8, 0xff, 0x8d, 0xfd, 0xdf, 0xe8, 0xff, 0x8b, 0xfe, 0x2f, 0x8a, 0xbe, 0x02, 0xe4, 0x2b, 0x40, 0x7e, 0x43, 0xf4, 0x83, 0x02, 0x76, 0x20, 0xa0, 0x05, 0x84, 0x5e, 0x20, 0xf2, 0x05, 0x85, 0x5f, 0x41, 0xfa, 0x15, 0x84, 0x5f, 0x10, 0xf8, 0x6f, 0xe0, 0x7f, 0x87, 0xfa, 0x6f, 0xe8, 0xff, 0x86, 0xf6, 0x55, 0x00, 0xdd, 0xa4, 0xa8, 0x4b, 0x88, 0xbe, 0x00, 0xa0, 0x2b, 0x15, 0xba, 0x0a, 0xd4, 0x17, 0x00, 0x7d, 0x02, 0xd0, 0x17, 0x00, 0x7c, 0x00, 0xc0, 0x07, 0x00, 0x7a, 0x41, 0xd0, 0x3f, 0xb8, 0xfe, 0x01, 0xff, 0x37, 0x50, 0x7f, 0x03, 0xfd, 0x03, 0x4a, 0x3d, 0x84, 0xe8, 0x11, 0x45, 0x36, 0xaa, 0xb4, 0x09, 0x80, 0x1e, 0x81, 0xc2, 0x05, 0x80, 0x5e, 0x00, 0xe8, 0x05, 0x80, 0x1f, 0x00, 0xf0, 0x81, 0x80, 0x1e, 0x00, 0xe8, 0xab, 0xa0, 0x7f, 0x8b, 0xd4, 0xaf, 0xd0, 0xdf, 0x8a, 0xea, 0x93, 0x04, 0x3e, 0x51, 0xa0, 0x47, 0x0a, 0x9d, 0x40, 0xc8, 0x07, 0x00, 0x7a, 0x24, 0x40, 0x03, 0x15, 0x3a, 0x48, 0xa1, 0x43, 0x12, 0x7a, 0x28, 0xa1, 0x07, 0x14, 0x7a, 0x28, 0xa0, 0x07, 0x40, 0x3f, 0x00, 0xf4, 0x03, 0x40, 0x7d, 0x00, 0xf4, 0x01, 0x00, 0x1a, 0x00, 0xe0, 0x01, 0x00, 0x3a, 0x00, 0xe0, 0x03, 0x40, 0x1f, 0x00, 0x42, 0x83, 0x00, 0x1b, 0x00, 0xb0, 0x01, 0x00, 0x1d, 0x04, 0xb0, 0x41, 0x02, 0x1f, 0x00, 0xd1, 0x2b, 0x08, 0xfd, 0x02, 0xe8, 0x2f, 0x08, 0xbf, 0x02, 0xf0, 0x05, 0x00, 0x5c, 0x00, 0xa0, 0x03, 0x00, 0x3c, 0x10, 0x40, 0x5f, 0xb1, 0x3d, 0x00, 0x80, 0x01, 0x05, 0x5c, 0x64, 0xc0, 0x05, 0x05, 0x38, 0xa0, 0xc0, 0x03, 0x04, 0x38, 0x50, 0xa0, 0x07, 0x40, 0x5f, 0x00, 0xf2, 0x05, 0x40, 0x5f, 0x80, 0xf4, 0x01, 0x20, 0x1f, 0x00, 0xa4, 0x09, 0x00, 0x1e, 0x01, 0xe2, 0x57, 0x90, 0x1f, 0x04, 0xa1, 0x01, 0x01, 0x1a, 0x20, 0xd0, 0x01, 0x05, 0x1d, 0x10, 0xa0, 0x01, 0x05, 0x1d, 0x10, 0xa0, 0xad, 0x4a, 0x7f, 0xa5, 0xea, 0x2f, 0x95, 0xfd, 0x2a, 0xda, 0xaf, 0x0a, 0x7a, 0x55, 0xe1, 0xa7, 0xaa, 0xfa, 0x94, 0xa8, 0xbf, 0xc0, 0x7f, 0x51, 0xaa, 0x25, 0x44, 0x5c, 0x20, 0x80, 0x05, 0x01, 0x5c, 0x40, 0xc0, 0x05, 0x02, 0x58, 0x44, 0xc0, 0x97, 0x50, 0x7f, 0x29, 0xf5, 0x93, 0xa0, 0x7f, 0x89, 0xfa, 0x8b, 0xa4, 0xbe, 0x12, 0xf4, 0x2b, 0x84, 0x5e, 0x44, 0xea, 0x7f, 0xd1, 0x3f, 0x88, 0xa2, 0x23, 0x25, 0x5f, 0x2a, 0xf5, 0xa5, 0x54, 0x5f, 0x6a, 0xfa, 0xa5, 0x52, 0x5f, 0x32, 0xf5, 0xff, 0xee, 0xff, 0xd7, 0xfd, 0x7f, 0x7f, 0xff, 0xef, 0xed, 0xf7, 0xb6, 0xff, 0xed, 0xbb, 0xdf, 0x77, 0xff, 0xbb, 0xeb, 0x7f, 0x41, 0xdf, 0xf7, 0xfd, 0x95, 0x4e, 0x5a, 0xd1, 0xd2, 0x15, 0x97, 0x5a, 0xb1, 0xa2, 0x95, 0x16, 0xbd, 0x54, 0xa9, 0x5f, 0xf7, 0x7f, 0x7b, 0xff, 0xdf, 0xdb, 0xbf, 0x75, 0xff, 0xbf, 0xb7, 0xbf, 0xbd, 0xfd, 0x77, 0xb5, 0x7f, 0xdb, 0xfe, 0xbf, 0xfd, 0xff, 0xb6, 0xee, 0xdf, 0x6b, 0x7f, 0x7f, 0xfd, 0xf7, 0xd5, 0x7e, 0xdf, 0xfe, 0xf7, 0xdb, 0xbf, 0xf6, 0xfd, 0xff, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfb, 0xfe, 0xfb, 0xf7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfb, 0xff, 0xeb, 0xff, 0xff, 0xff, 0x77, 0xff, 0xff, 0xf5, 0xdb, 0xbf, 0xff, 0xff, 0xfb, 0xf7, 0x5f, 0xf7, 0xfd, 0x7f, 0xef, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xff, 0xbf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfb, 0xff, 0xff, 0xef, 0xb7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xea, 0xff, 0xb7, 0xff, 0xff, 0xd7, 0xff, 0xfb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xbf, 0xf5, 0xff, 0xef, 0xfe, 0xbf, 0xfa, 0xff, 0xbf, 0xfb, 0xdf, 0xda, 0xff, 0xff, 0xff, 0x7f, 0xda, 0xff, 0x7f, 0xfb, 0xbf, 0xfa, 0xff, 0xff, 0xff, 0xbf, 0xfa, 0xff, 0xb5, 0xff, 0x7f, 0xf5, 0xbf, 0xde, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xd7, 0xb6, 0xff, 0x5b, 0xff, 0x6f, 0xff, 0xff, 0xaf, 0xfe, 0xd7, 0xf6, 0xff, 0x57, 0xf5, 0xdf, 0xea, 0xff, 0xdf, 0xed, 0x2f, 0xfd, 0xff, 0x6f, 0xf5, 0x7f, 0x41, 0xff, 0xc7, 0xfe, 0xff, 0x83, 0xfe, 0x6b, 0xfd, 0xff, 0xff, 0xff, 0xad, 0xfd, 0x2f, 0xc0, 0xff, 0x07, 0xfa, 0x5f, 0xea, 0xff, 0x5f, 0xf4, 0x2f, 0x41, 0xff, 0xbd, 0xdf, 0x5f, 0xea, 0xff, 0x6f, 0x75, 0x17, 0xed, 0xff, 0x75, 0xff, 0x5f, 0xf0, 0xff, 0xa2, 0xff, 0xbf, 0xd0, 0xbf, 0xa8, 0xee, 0xff, 0xff, 0xff, 0xf7, 0xfe, 0x8b, 0xd2, 0xfe, 0x12, 0xff, 0x6f, 0xf8, 0xff, 0x0b, 0xfe, 0x0b, 0xd1, 0xff, 0xd6, 0xe4, 0x37, 0x40, 0xff, 0x5f, 0xc0, 0x3f, 0xf4, 0xff, 0xd6, 0xfa, 0x5f, 0xa1, 0xff, 0x45, 0xed, 0xff, 0xa2, 0xff, 0x00, 0xf9, 0xdf, 0xff, 0xff, 0x55, 0xeb, 0x2f, 0xa0, 0xff, 0x0d, 0xf4, 0x5f, 0xd4, 0xff, 0xaf, 0xf4, 0x57, 0x40, 0xbd, 0x05, 0x80, 0x1f, 0xe0, 0xff, 0x15, 0xf0, 0x8b, 0xb4, 0x7f, 0xa1, 0xec, 0x2b, 0x48, 0x7f, 0x15, 0xfd, 0x5b, 0xd0, 0x5f, 0x00, 0xec, 0xeb, 0xaf, 0x7f, 0x45, 0xfc, 0x17, 0x80, 0x7e, 0x45, 0xfd, 0x5f, 0xf1, 0xff, 0x05, 0xfe, 0x1b, 0xa0, 0xfe, 0x04, 0xa0, 0x27, 0x85, 0x7e, 0x4f, 0xa4, 0x5f, 0xd0, 0x7a, 0x25, 0xf4, 0x4f, 0x82, 0xdd, 0x07, 0xea, 0xaf, 0x52, 0xbd, 0x40, 0xa0, 0xd7, 0x5a, 0xfd, 0xa2, 0xf4, 0x6f, 0xa1, 0xfe, 0x22, 0xf4, 0xbf, 0xd0, 0xfe, 0x2b, 0xf5, 0x4f, 0x84, 0xbe, 0x20, 0xc2, 0x17, 0xa4, 0xfe, 0x45, 0xe0, 0x45, 0xa8, 0x5e, 0xa1, 0xa8, 0x25, 0xc8, 0x7e, 0x02, 0xed, 0xb5, 0x90, 0x5e, 0x20, 0xe4, 0x55, 0x4f, 0xbf, 0x20, 0xf4, 0x2b, 0x90, 0xbe, 0x02, 0xf5, 0x57, 0x50, 0x7f, 0x15, 0xfd, 0x25, 0x40, 0x5e, 0x00, 0xa1, 0x0b, 0x42, 0x5f, 0x15, 0xa4, 0x03, 0x02, 0x7d, 0x48, 0xe0, 0x0b, 0x05, 0xba, 0xa8, 0xa0, 0x07, 0x04, 0xba, 0x00, 0xa0, 0x47, 0x35, 0xdd, 0x88, 0xa0, 0x0f, 0x00, 0xdc, 0x48, 0xa0, 0x8b, 0x04, 0xbd, 0x00, 0xa0, 0x0b, 0x15, 0x7a, 0x50, 0xa0, 0x27, 0x41, 0xbf, 0x00, 0xb0, 0x01, 0x85, 0x1c, 0xa0, 0xd0, 0x03, 0x04, 0x1e, 0x40, 0xe0, 0x01, 0x0b, 0x1d, 0xa8, 0xa2, 0x03, 0x05, 0x7f, 0x40, 0xe8, 0x01, 0x05, 0xbf, 0x40, 0xb0, 0x0b, 0x84, 0x5e, 0x50, 0xe0, 0x03, 0x04, 0x1e, 0x48, 0xc2, 0x17, 0x04, 0x7d, 0x00, 0xe4, 0x45, 0x02, 0xba, 0x50, 0x42, 0x8b, 0x2a, 0xba, 0x68, 0xa1, 0x0b, 0x04, 0xbc, 0x00, 0xa0, 0x47, 0x02, 0x5d, 0x28, 0x40, 0x0f, 0x48, 0x58, 0x10, 0xc0, 0x05, 0x01, 0xb4, 0x80, 0x48, 0x0b, 0x05, 0x74, 0xb0, 0xa0, 0x13, 0xa0, 0x1f, 0xaa, 0xe4, 0x03, 0x91, 0xbe, 0xd8, 0xe0, 0x83, 0x06, 0xba, 0x50, 0xa0, 0x8b, 0x97, 0x1e, 0x14, 0xc3, 0x2b, 0xa0, 0x5d, 0xa8, 0x62, 0x83, 0x06, 0x5e, 0xa8, 0xe2, 0x83, 0x1a, 0x3e, 0x68, 0xe2, 0x83, 0x00, 0x3f, 0x0a, 0x80, 0x0f, 0x40, 0x3e, 0x40, 0xa8, 0x4b, 0x04, 0x7b, 0xa8, 0xa2, 0x0d, 0x2d, 0x7c, 0xe8, 0xc2, 0x87, 0x2a, 0x74, 0x01, 0x40, 0x17, 0x40, 0x3f, 0xd0, 0x80, 0x03, 0x2b, 0x38, 0xd0, 0x41, 0x05, 0x2d, 0x34, 0xb0, 0x41, 0x0b, 0x0a, 0x34, 0xb0, 0xa0, 0x43, 0x20, 0x9f, 0x5a, 0xe4, 0x2b, 0xa2, 0x5d, 0xe8, 0xa0, 0x83, 0x27, 0x1e, 0x68, 0xe2, 0x85, 0x0e, 0x3e, 0x08, 0xe3, 0x17, 0xa0, 0x1f, 0x7d, 0xe3, 0xd1, 0x1b, 0x1e, 0x7d, 0xa1, 0xa3, 0x17, 0x3a, 0xbd, 0xa2, 0x8b, 0x80, 0x3a, 0x0d, 0x48, 0x07, 0x46, 0x3f, 0xa0, 0xe8, 0x17, 0x40, 0x7f, 0xb0, 0xc2, 0x8f, 0x1a, 0xf4, 0xb0, 0x41, 0x87, 0x2a, 0x34, 0x28, 0x00, 0xaf, 0xa0, 0x7e, 0xa8, 0x81, 0x87, 0x2e, 0x58, 0xd0, 0xc2, 0x89, 0x2e, 0x3a, 0xe8, 0x81, 0x07, 0x11, 0x3c, 0x70, 0x81, 0x43, 0x21, 0x1f, 0x2a, 0xe8, 0x5f, 0xf4, 0x3f, 0xd8, 0xe0, 0x81, 0x0e, 0x3e, 0xb8, 0xe0, 0x83, 0x0e, 0x1e, 0x05, 0xe1, 0x2b, 0xa8, 0x1f, 0xea, 0xe2, 0xa1, 0x2e, 0x5e, 0xfa, 0xa2, 0xc5, 0x37, 0x1a, 0x75, 0xe1, 0x05, 0x01, 0x1e, 0x2d, 0xa0, 0x03, 0x46, 0xbd, 0x00, 0xa4, 0x2f, 0x40, 0xdf, 0xb0, 0x42, 0x0f, 0x2b, 0xda, 0xd0, 0xa2, 0x0d, 0x2b, 0x3a, 0x28, 0x84, 0x0f, 0x82, 0x3e, 0xf0, 0x41, 0x83, 0x1b, 0x34, 0xd4, 0xa2, 0x83, 0x1a, 0x5c, 0xd8, 0x82, 0x87, 0x20, 0x34, 0xd0, 0xc2, 0xc3, 0x42, 0xbf, 0x00, 0xf0, 0xb7, 0xe8, 0x7f, 0xd8, 0xe0, 0x83, 0x15, 0x7a, 0xd8, 0xe0, 0x8b, 0x0d, 0x1a, 0x20, 0xe0, 0x23, 0xa0, 0x9e, 0x5c, 0xa0, 0x93, 0x0a, 0x3a, 0x68, 0xc2, 0xa1, 0x0e, 0x5a, 0x68, 0xe1, 0x05, 0x14, 0x3e, 0x59, 0x60, 0x05, 0x22, 0x5e, 0x40, 0xa4, 0x7f, 0xb0, 0xbf, 0xa0, 0xa2, 0x0d, 0x0a, 0x5c, 0xa0, 0xa2, 0x0b, 0x2a, 0xbc, 0x10, 0x41, 0x0f, 0x02, 0x3f, 0xa0, 0xa2, 0x03, 0x2d, 0x3c, 0xa9, 0xa1, 0x0b, 0x29, 0x3c, 0xa8, 0x82, 0x0b, 0x00, 0x34, 0xa4, 0xa2, 0x43, 0x81, 0x7f, 0x25, 0xb0, 0x17, 0xa8, 0xbf, 0x28, 0xb0, 0x87, 0x4a, 0x7f, 0x28, 0xb0, 0x8b, 0x0a, 0xbf, 0x48, 0xe0, 0x43, 0x85, 0x5e, 0xa8, 0xd0, 0x85, 0x04, 0x5f, 0x20, 0xe0, 0x85, 0x04, 0xb6, 0x48, 0xf0, 0x05, 0x2a, 0xbe, 0x50, 0xa0, 0x05, 0x24, 0xda, 0x0b, 0xc8, 0xbf, 0xd0, 0xbf, 0x90, 0xe0, 0x0b, 0x04, 0xdc, 0x90, 0xc4, 0x0f, 0x04, 0x7a, 0x90, 0x40, 0x07, 0x15, 0xfb, 0x00, 0xc0, 0x0b, 0x09, 0xba, 0x90, 0xa4, 0x0b, 0x0a, 0x7d, 0x20, 0xa0, 0x4b, 0x04, 0xba, 0x80, 0xc2, 0x03, 0x01, 0xff, 0x4a, 0xe0, 0x0b, 0x40, 0xbf, 0x00, 0xbc, 0x17, 0xc2, 0x7e, 0x04, 0xf0, 0x03, 0xc0, 0x5f, 0x02, 0xe8, 0xeb, 0xad, 0x3d, 0x22, 0xfa, 0x57, 0x40, 0xbf, 0x04, 0xf0, 0x27, 0x40, 0xbd, 0x02, 0xf5, 0x0b, 0x02, 0xba, 0x44, 0x80, 0x07, 0x04, 0xfa, 0x1f, 0x42, 0x2f, 0x80, 0xfd, 0x04, 0xe0, 0x4d, 0x00, 0xdf, 0x01, 0xec, 0x5f, 0x01, 0xfd, 0x01, 0xa0, 0x57, 0x5f, 0xff, 0x04, 0xe8, 0x0d, 0x40, 0xfb, 0x02, 0xda, 0x4f, 0x40, 0xff, 0x04, 0xd8, 0x0b, 0x2a, 0xfa, 0x01, 0xa0, 0x83, 0x04, 0xff, 0x57, 0x60, 0x17, 0xe8, 0x7e, 0x02, 0xfc, 0x0f, 0xc0, 0xff, 0x00, 0xf4, 0x0b, 0xc0, 0x7f, 0x04, 0xe4, 0xf7, 0xd7, 0x7f, 0x05, 0xed, 0x2f, 0x50, 0x7f, 0x01, 0xec, 0x2b, 0x50, 0x7f, 0x05, 0xda, 0x8b, 0x0a, 0xbe, 0x00, 0x80, 0x7f, 0xeb, 0xfd, 0xbf, 0xdb, 0x6f, 0xaf, 0xff, 0xf7, 0xfb, 0xf7, 0xbb, 0xfe, 0xfe, 0xff, 0xff, 0xfa, 0xfe, 0xf7, 0xa9, 0xbf, 0xff, 0xff, 0xeb, 0xfa, 0xff, 0xd7, 0xff, 0xff, 0xfb, 0x6f, 0xd7, 0xfb, 0xf7, 0xfd, 0x5f, 0x57, 0xfb, 0xbf, 0xfd, 0x57, 0x5b, 0xff, 0xdf, 0xfa, 0xbf, 0xf5, 0xff, 0x5a, 0xfd, 0xbf, 0xec, 0xff, 0x4b, 0xf5, 0xaf, 0xae, 0xff, 0x35, 0xf5, 0xff, 0xff, 0x7e, 0x5d, 0xff, 0xaf, 0xfa, 0xff, 0xaa, 0xfe, 0x7f, 0xfd, 0x7f, 0x55, 0xff, 0xd7, 0xfb, 0xfd, 0xaa, 0xd5, 0xff, 0xff, 0xff, 0xff, 0xef, 0x7f, 0xdf, 0xff, 0xef, 0xff, 0xff, 0xfb, 0x7f, 0xff, 0xff, 0xff, 0xfb, 0xff, 0xff, 0xef, 0xff, 0xff, 0xff, 0xf7, 0xff, 0xff, 0xef, 0xff, 0xff, 0xff, 0xff, 0x6f, 0xff, 0xff, 0xfd, 0xff, 0x5f, 0xff, 0x7f, 0xff, 0xbf, 0xfb, 0xff, 0xff, 0xff, 0xef, 0xf7, 0xff, 0xff, 0xfe, 0x7f, 0x7f, 0xff, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xbf, 0xfb, 0xff, 0xff, 0xff, 0xff, 0xfb, 0xff, 0xff, 0xff, 0xbf, 0xff, 0xdf, 0xf7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xbf, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xfb, 0xff, 0xff, 0xff, 0xef, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xef, 0xff, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xbf, 0xff, 0xff, 0xbf, 0xff, 0xff, 0xff, 0xff, 0x7f, 0xff, 0xbf, 0xfe, 0xff, 0xbf, 0xfa, 0xff, 0xff, 0xff, 0x7f, 0xff, 0xf7, 0xfe, 0xff, 0x6f, 0xfd, 0xff, 0xff, 0xff, 0xff, 0xff, 0xbf, 0xab, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xaf, 0xff, 0xf7, 0xff, 0xff, 0xff, 0xfd, 0xff, 0xff, 0xff, 0x8b, 0xff, 0x97, 0xff, 0xff, 0x5f, 0xff, 0xff, 0xff, 0xff, 0x8b, 0xff, 0x1f, 0xff, 0xff, 0x7f, 0xee, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xe8, 0xff, 0xff, 0xff, 0xbf, 0xea, 0xff, 0xd7, 0xfd, 0x3f, 0xf5, 0xff, 0x2f, 0xfe, 0xff, 0x7d, 0xff, 0xaf, 0xfa, 0x3f, 0xf5, 0xff, 0xb7, 0xf4, 0x7f, 0xf7, 0xff, 0xae, 0xfe, 0xb7, 0xf6, 0xff, 0xaf, 0xfa, 0xff, 0xff, 0xff, 0xff, 0xff, 0xbf, 0xf0, 0xff, 0x6f, 0xfb, 0xdf, 0xb6, 0xff, 0x97, 0xfe, 0xbf, 0xfa, 0xff, 0x7f, 0xf5, 0x5f, 0xaf, 0xff, 0x85, 0xff, 0x97, 0xfe, 0xff, 0x5f, 0xfe, 0xd7, 0xbb, 0xff, 0x43, 0xff, 0x97, 0xf6, 0xff, 0x37, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xd4, 0xff, 0x75, 0xff, 0xb7, 0xd2, 0xff, 0x95, 0xfe, 0x2f, 0xba, 0xff, 0x57, 0xf6, 0xbf, 0xd2, 0xff, 0x0b, 0xfa, 0x3f, 0xf1, 0xff, 0x0b, 0xf5, 0x3f, 0x4d, 0xff, 0x0a, 0xf5, 0x3f, 0xf8, 0xff, 0x0d, 0xf5, 0xff, 0xfd, 0xff, 0xff, 0xff, 0x3f, 0xa2, 0x7f, 0xd7, 0xf4, 0x2f, 0x40, 0xfd, 0x07, 0xf6, 0xdf, 0xe8, 0xff, 0x0f, 0xfc, 0x5f, 0x55, 0x7f, 0x05, 0xfa, 0x17, 0xbc, 0xff, 0x4f, 0xfe, 0x95, 0xe6, 0x7f, 0x83, 0xfe, 0x97, 0xda, 0xff, 0xa7, 0xfe, 0x5f, 0xef, 0xff, 0xbb, 0xfd, 0x5f, 0xf1, 0xff, 0x53, 0xf6, 0x37, 0xa0, 0xff, 0x02, 0xfa, 0x3f, 0xe8, 0xff, 0x4b, 0xff, 0xbf, 0xa4, 0xff, 0xa3, 0xfc, 0xff, 0xe1, 0xff, 0x8b, 0xfa, 0x2f, 0xa1, 0xfe, 0x25, 0xfa, 0x7f, 0xe8, 0xff, 0x0a, 0xf4, 0xef, 0xda, 0x7e, 0xed, 0xd6, 0xff, 0x48, 0xff, 0x25, 0xf9, 0x9f, 0x14, 0xfe, 0x53, 0xf5, 0xef, 0xaa, 0xff, 0x0b, 0xf4, 0x2f, 0xa2, 0xfb, 0x15, 0xf6, 0x5f, 0xb8, 0xff, 0x8d, 0xfa, 0x57, 0x55, 0xbf, 0x20, 0xfa, 0x0b, 0x52, 0x7f, 0x4b, 0xff, 0xab, 0x6a, 0x5f, 0x55, 0xdb, 0x2f, 0xe4, 0x7f, 0x25, 0xdd, 0x57, 0x40, 0xff, 0x12, 0xfa, 0x3f, 0xe0, 0xff, 0x4a, 0xff, 0x7f, 0xc9, 0xfe, 0x47, 0xd9, 0xbf, 0xc0, 0xff, 0x8b, 0xfc, 0x15, 0x41, 0x7f, 0x15, 0xd6, 0xbf, 0xa8, 0xbd, 0x85, 0xd4, 0x5f, 0x92, 0xfd, 0xaa, 0xe0, 0x5f, 0x11, 0xfd, 0x43, 0xe8, 0xbf, 0x14, 0xfd, 0xa2, 0xd4, 0x57, 0x55, 0xfd, 0x8b, 0xe8, 0x5f, 0xa0, 0xfe, 0x02, 0xec, 0xdf, 0x60, 0xff, 0x0b, 0xec, 0x07, 0x20, 0x5b, 0x00, 0xf0, 0x05, 0x80, 0x5e, 0x00, 0xe8, 0x05, 0x80, 0x1e, 0x00, 0xa8, 0x17, 0x80, 0xbf, 0x02, 0xf4, 0x0b, 0x80, 0xbf, 0x02, 0xf0, 0x1f, 0x00, 0x7f, 0x01, 0xf4, 0xbf, 0x80, 0xff, 0x17, 0xf4, 0xbf, 0x80, 0xff, 0x0e, 0xf4, 0x25, 0x00, 0xbe, 0x00, 0xd4, 0x07, 0x20, 0x7f, 0x01, 0xf2, 0x07, 0x00, 0x7a, 0x00, 0xc0, 0x6f, 0x20, 0xfe, 0x02, 0xd0, 0x3f, 0x20, 0xfd, 0x01, 0xe8, 0x37, 0x80, 0xfe, 0x03, 0xd0, 0xdf, 0xe8, 0xff, 0x85, 0xff, 0xdf, 0xf8, 0xff, 0x83, 0xff, 0x03, 0x15, 0x5f, 0x54, 0xd1, 0x45, 0x05, 0x55, 0x50, 0xd0, 0x05, 0x15, 0x1a, 0x0a, 0xe9, 0x13, 0x8a, 0xbf, 0x50, 0xf5, 0x0b, 0x8a, 0xbe, 0x50, 0xf5, 0x0b, 0xa5, 0x3e, 0x50, 0xf5, 0x7f, 0xb0, 0xff, 0x0f, 0xf9, 0x7f, 0xa0, 0xff, 0x0f, 0xfa, 0x45, 0x04, 0x3a, 0x10, 0xe0, 0x03, 0x12, 0x3c, 0x24, 0xa1, 0x0b, 0x2a, 0x3c, 0x02, 0x42, 0x0f, 0x22, 0xfa, 0x42, 0xd0, 0x17, 0x21, 0xff, 0x12, 0x50, 0x2f, 0x11, 0xfe, 0x22, 0xd0, 0x5f, 0xd8, 0xff, 0x85, 0xfe, 0x5f, 0xf8, 0xff, 0x85, 0xff, 0x05, 0x05, 0x1d, 0x90, 0xb0, 0x81, 0x02, 0x5f, 0x10, 0xf0, 0xd7, 0x2b, 0x1a, 0x12, 0xf0, 0x13, 0x11, 0x3f, 0x50, 0xea, 0x05, 0x94, 0x5d, 0x40, 0xf5, 0x03, 0x84, 0x5f, 0x42, 0xf5, 0xff, 0xe8, 0xff, 0x0b, 0xfd, 0xbf, 0xd0, 0xff, 0x0b, 0xfd, 0x03, 0x00, 0x7d, 0x00, 0xc0, 0x07, 0x00, 0x3a, 0x80, 0xc0, 0x0d, 0x1d, 0x3a, 0x00, 0x41, 0x27, 0x80, 0xfe, 0x02, 0xe0, 0x2f, 0x00, 0xbe, 0x02, 0xd0, 0x2f, 0x20, 0x7d, 0x01, 0xd0, 0x5f, 0xe8, 0xff, 0x8d, 0xff, 0x5f, 0xd8, 0xff, 0x8d, 0xfd, 0x05, 0x00, 0x1d, 0x00, 0xe8, 0x01, 0x00, 0x3d, 0x00, 0xf0, 0xe7, 0x06, 0x1c, 0x00, 0xa0, 0x2b, 0x40, 0x5d, 0x00, 0xf4, 0x05, 0x40, 0x7f, 0x00, 0xe8, 0x03, 0x00, 0x5d, 0x00, 0xe8, 0x7f, 0x50, 0xff, 0x06, 0xfa, 0xef, 0xe0, 0xff, 0x06, 0xfe, 0x93, 0x04, 0x7d, 0x4a, 0xd0, 0x57, 0x12, 0xbd, 0x24, 0x80, 0x9b, 0x2a, 0x3a, 0x12, 0x0a, 0x0f, 0x15, 0xbe, 0x52, 0xa1, 0x2b, 0x16, 0xba, 0x52, 0xa1, 0x2f, 0x15, 0xfe, 0x52, 0xd1, 0x4f, 0xd8, 0x7f, 0x83, 0xff, 0x37, 0xb8, 0x7d, 0x83, 0xfb, 0x05, 0x04, 0x1d, 0x42, 0xd0, 0x01, 0x00, 0x1d, 0x04, 0xe8, 0x01, 0x00, 0x9d, 0x00, 0xc1, 0x03, 0x12, 0x76, 0x00, 0xd1, 0x27, 0x11, 0x5d, 0x21, 0xb1, 0x23, 0x12, 0x5b, 0x90, 0xe0, 0xb7, 0x60, 0xff, 0x0d, 0xd4, 0xaf, 0x50, 0xdf, 0x0a, 0xdc, 0x43, 0x01, 0xbd, 0x10, 0xd0, 0x27, 0x05, 0x7c, 0x41, 0xd0, 0x0b, 0x00, 0x3e, 0x14, 0x0a, 0x2d, 0x09, 0xbd, 0xb2, 0xd0, 0x0b, 0x0a, 0x7c, 0x90, 0xc0, 0x0d, 0x09, 0xbc, 0x42, 0xa0, 0x07, 0x08, 0x5f, 0x80, 0xf2, 0x23, 0x40, 0x7f, 0x80, 0xf2, 0x05, 0x00, 0x5d, 0x00, 0xe8, 0x01, 0x00, 0x1f, 0x00, 0xd0, 0x47, 0xd0, 0x1b, 0x00, 0xc0, 0x07, 0x00, 0x5e, 0x00, 0xe0, 0x05, 0x00, 0x5f, 0x00, 0xf0, 0x07, 0x00, 0x3f, 0x00, 0xf0, 0x2b, 0xa0, 0x7d, 0x01, 0xf4, 0x0f, 0x10, 0x7f, 0x05, 0xd4, 0x05, 0x00, 0x5f, 0x00, 0xd2, 0x07, 0x80, 0x7e, 0x20, 0xf0, 0x2f, 0x82, 0x3e, 0x00, 0x00, 0x03, 0x00, 0x7a, 0x00, 0xa0, 0x05, 0x00, 0x7a, 0x00, 0xc0, 0x03, 0x00, 0x7a, 0x00, 0xa2, 0x07, 0x21, 0x3f, 0x08, 0xf2, 0x45, 0x42, 0x5f, 0x20, 0xf2, 0x57, 0xf2, 0x7d, 0x25, 0xf5, 0x55, 0xd2, 0x5e, 0x09, 0xdd, 0x6f, 0xd0, 0xbf, 0xaa, 0xd2, 0x4b, 0x52, 0x5f, 0x44, 0xfa, 0x47, 0xa5, 0x5f, 0x2a, 0xf5, 0xa5, 0xa4, 0x5f, 0x52, 0xf8, 0x57, 0x88, 0xfe, 0xa2, 0xe8, 0x17, 0x50, 0xff, 0x8a, 0xf4, 0x2b, 0x48, 0xdf, 0x82, 0xfc, 0x2f, 0x40, 0xff, 0x42, 0xf6, 0x5f, 0xd1, 0xff, 0x80, 0xa0, 0x87, 0x00, 0x7d, 0x11, 0xd0, 0x25, 0x00, 0x7d, 0x00, 0xd0, 0x0b, 0x08, 0x7d, 0x04, 0xd2, 0x17, 0xe5, 0xbf, 0x08, 0xfe, 0xa7, 0x4a, 0x77, 0x42, 0xfa, 0x2f, 0xe5, 0xff, 0x52, 0xfe, 0x2b, 0xf5, 0xbf, 0x52, 0xfe, 0x7f, 0xc0, 0xbf, 0x74, 0xea, 0x53, 0xd4, 0x3f, 0x94, 0xfa, 0x97, 0xaa, 0x3f, 0xad, 0xfa, 0xa7, 0xa2, 0x3f, 0x51, 0xf9, 0xef, 0x5a, 0xff, 0xf7, 0xf5, 0x7d, 0xf5, 0xff, 0x7d, 0xf7, 0xdf, 0xfb, 0xff, 0xbf, 0xff, 0xff, 0xdd, 0xff, 0xbf, 0xff, 0xbf, 0x41, 0xff, 0xaf, 0xbb, 0xef, 0xb7, 0xfe, 0xdb, 0xee, 0x6f, 0xeb, 0xfe, 0xd7, 0xfe, 0xdd, 0xed, 0xfe, 0xaf, 0xee, 0x7f, 0xff, 0x7f, 0xbb, 0xff, 0xaf, 0xbf, 0x7f, 0x57, 0xfb, 0xff, 0xbe, 0xff, 0xea, 0xf7, 0x5f, 0xef, 0xff, 0xd5, 0xf7, 0xbf, 0xfd, 0xff, 0xfa, 0xfd, 0x7f, 0xfd, 0xff, 0xdf, 0xff, 0xf7, 0xfb, 0xff, 0x7a, 0xef, 0xff, 0xfe, 0xff, 0xfa, 0xff, 0xf7, 0xef, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xef, 0xfb, 0xff, 0xbf, 0xff, 0xff, 0xfd, 0xff, 0xff, 0xff, 0xff, 0xd6, 0xff, 0xef, 0xff, 0xff, 0xef, 0xff, 0xfb, 0xfd, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xbf, 0xff, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xbf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xed, 0xff, 0xff, 0xff, 0xff, 0xd7, 0xff, 0xfb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfb, 0xff, 0xff, 0xbf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf7, 0x7f, 0x6b, 0xff, 0xff, 0xff, 0xff, 0x7f, 0xf5, 0xbf, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xfa, 0xff, 0xeb, 0xff, 0xff, 0xaf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xfa, 0xff, 0xd5, 0xfe, 0x5f, 0xff, 0xff, 0x5f, 0xfb, 0xbf, 0xfd, 0xff, 0xbb, 0xf5, 0xff, 0xff, 0xff, 0xff, 0xaa, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xbf, 0xd6, 0xff, 0x5d, 0xff, 0xff, 0xf7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xbf, 0xd6, 0xff, 0x57, 0xff, 0xef, 0xfd, 0xff, 0xff, 0xfe, 0xef, 0xaa, 0xbf, 0x4a, 0xaa, 0xff, 0xff, 0xff, 0x5f, 0xa0, 0x17, 0xfa, 0xff, 0xff, 0xff, 0xdf, 0xf0, 0xff, 0xc2, 0xff, 0xff, 0x8a, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x93, 0xf0, 0xff, 0x05, 0xfb, 0x37, 0xf6, 0xff, 0x57, 0xfa, 0x37, 0xe2, 0x7f, 0x00, 0xe0, 0xbf, 0xaa, 0xff, 0xff, 0xc0, 0x2f, 0xda, 0xff, 0xab, 0xfa, 0xbf, 0x48, 0xff, 0x93, 0xfa, 0xff, 0x47, 0xff, 0xff, 0xff, 0xff, 0xf5, 0xff, 0x55, 0xf5, 0xaf, 0xa8, 0xff, 0x85, 0xfc, 0x1f, 0xfa, 0xff, 0x2f, 0xf4, 0x9f, 0x54, 0xbf, 0x42, 0x90, 0xd7, 0xf7, 0xff, 0x57, 0xe0, 0x2b, 0xed, 0xff, 0xfa, 0xdf, 0xaf, 0xd0, 0x7f, 0x91, 0xff, 0x5f, 0xa1, 0xfb, 0x6a, 0xff, 0xbf, 0xfe, 0x7f, 0xff, 0xff, 0x03, 0xe8, 0x7f, 0x05, 0xfe, 0x17, 0xed, 0xff, 0x55, 0xfe, 0x57, 0xa0, 0xbb, 0x00, 0xc0, 0x17, 0xa4, 0xfa, 0x5a, 0x54, 0x57, 0xd0, 0x7a, 0x13, 0xe8, 0x37, 0x42, 0xfd, 0x06, 0xda, 0xbf, 0x91, 0xbe, 0xbf, 0xfb, 0xff, 0xd0, 0x7f, 0x01, 0xf4, 0x5f, 0x40, 0xff, 0x52, 0xea, 0x6f, 0xb0, 0xff, 0x0f, 0xf5, 0x2f, 0x40, 0xbe, 0x02, 0xd2, 0x93, 0xa2, 0x7f, 0x03, 0xd0, 0x1b, 0x78, 0xbf, 0x41, 0xf2, 0x1b, 0xa0, 0x5f, 0x43, 0xeb, 0xab, 0xa0, 0xfa, 0xd2, 0xfa, 0x5f, 0xe8, 0x7f, 0xb1, 0xf4, 0x0b, 0xa0, 0xbf, 0x42, 0xfa, 0x37, 0xd8, 0x7f, 0x05, 0xfd, 0x3b, 0x10, 0xbf, 0x00, 0xd0, 0x05, 0x06, 0xf8, 0x94, 0xe8, 0x43, 0x05, 0x78, 0xb0, 0x84, 0x07, 0x15, 0xf8, 0xa8, 0xa0, 0x4f, 0x14, 0x3a, 0x00, 0xdc, 0xff, 0xa0, 0xff, 0x06, 0xba, 0x5f, 0x64, 0xff, 0x02, 0xf4, 0x2f, 0xa0, 0xff, 0x03, 0xfa, 0x97, 0x44, 0x78, 0x51, 0xa1, 0x41, 0x45, 0xbd, 0x02, 0xe4, 0x01, 0x05, 0x3d, 0x92, 0xd0, 0x25, 0x15, 0x3d, 0x50, 0xd4, 0x0b, 0x96, 0x38, 0x49, 0xf4, 0x5f, 0xe8, 0xbf, 0x02, 0xea, 0x0b, 0xa0, 0xbf, 0x02, 0xfd, 0x2b, 0xd2, 0xbb, 0x80, 0xfa, 0x1f, 0x04, 0x5e, 0x40, 0xe8, 0x15, 0x0a, 0x5c, 0x00, 0xa8, 0x4b, 0x92, 0xdc, 0x40, 0xc2, 0x87, 0x04, 0xdc, 0x40, 0xa1, 0xaf, 0x28, 0xba, 0x00, 0xd4, 0xbf, 0x60, 0x7f, 0x01, 0xf1, 0xb7, 0x48, 0xdd, 0x11, 0xa2, 0x57, 0xa0, 0x7e, 0x0b, 0xd4, 0x25, 0x11, 0x59, 0x22, 0xd1, 0x05, 0x03, 0x3e, 0x00, 0xe9, 0x01, 0x11, 0x3e, 0x78, 0xd1, 0x05, 0x06, 0x3d, 0x68, 0xd0, 0x05, 0x0e, 0x58, 0x20, 0xe0, 0xab, 0xaa, 0x5f, 0x10, 0xd8, 0x05, 0x04, 0x7f, 0x80, 0xf0, 0x05, 0x00, 0x5f, 0x40, 0xf0, 0x07, 0x00, 0x3c, 0x00, 0xd0, 0x83, 0x10, 0xba, 0x68, 0xe4, 0x07, 0x05, 0x7b, 0x40, 0xa0, 0x85, 0x2a, 0x5c, 0x50, 0xa1, 0x0f, 0x28, 0xfa, 0x04, 0x42, 0x57, 0x51, 0x5d, 0x40, 0xe0, 0x07, 0x00, 0x3a, 0x20, 0xd0, 0x07, 0x05, 0x7a, 0x00, 0xa0, 0x25, 0x04, 0x5d, 0x00, 0xe8, 0x13, 0x8a, 0x1f, 0x28, 0xb0, 0x13, 0x41, 0x1b, 0x70, 0xd0, 0x43, 0x05, 0x3d, 0x54, 0xd0, 0x03, 0x07, 0x3a, 0x40, 0xe0, 0x9b, 0x94, 0x3d, 0x10, 0xb0, 0x05, 0x02, 0x5f, 0x10, 0xf0, 0x05, 0x00, 0x5f, 0x50, 0xf8, 0x07, 0x01, 0x5d, 0x20, 0xb2, 0x07, 0x02, 0x3a, 0xa2, 0xe4, 0x2f, 0xa4, 0x7e, 0x54, 0xa1, 0x07, 0x16, 0x7e, 0x68, 0xa1, 0x0f, 0x2a, 0xba, 0x00, 0x82, 0x05, 0x00, 0x5c, 0x48, 0xc1, 0x43, 0x15, 0x3a, 0x48, 0x81, 0x83, 0x16, 0x3a, 0x24, 0xa1, 0x43, 0x14, 0x3a, 0x94, 0xc0, 0x2b, 0xa1, 0x1f, 0x59, 0xe8, 0x0b, 0x41, 0x3f, 0x50, 0xf0, 0x41, 0x13, 0x1b, 0x54, 0xf0, 0x85, 0x2a, 0x5c, 0xa0, 0xe2, 0x07, 0x00, 0x5d, 0x74, 0xf1, 0x41, 0x05, 0x1d, 0x74, 0xf0, 0x41, 0x05, 0x1d, 0xb4, 0xd0, 0x85, 0x02, 0x1f, 0xa4, 0xf0, 0x1f, 0x44, 0x7f, 0x80, 0xa4, 0x3f, 0xd0, 0x5f, 0x68, 0xa1, 0x07, 0x0d, 0x7d, 0x50, 0xa1, 0x0b, 0x16, 0xba, 0x08, 0x80, 0x55, 0xd5, 0x3e, 0x94, 0xa0, 0x87, 0x1a, 0x7e, 0x94, 0xc1, 0x47, 0x1b, 0x7d, 0x50, 0xc1, 0x47, 0x16, 0x7d, 0x58, 0xc0, 0x17, 0xe0, 0x3f, 0x00, 0xf0, 0x2f, 0xe8, 0x7f, 0x34, 0xf0, 0x45, 0x03, 0x5d, 0x54, 0xf0, 0x87, 0x0a, 0xbe, 0x08, 0xe1, 0xdf, 0x54, 0x1f, 0xb4, 0xd0, 0x41, 0x0b, 0x1d, 0xd4, 0xf0, 0x41, 0x05, 0x1d, 0x5c, 0xf1, 0x05, 0x13, 0x1d, 0xd4, 0xf0, 0x7f, 0x51, 0xff, 0x22, 0xa4, 0xdf, 0x90, 0x3e, 0x50, 0xd1, 0x07, 0x15, 0x7e, 0x50, 0xd1, 0x0b, 0x2a, 0x74, 0x10, 0x40, 0xb7, 0xd2, 0x7f, 0x50, 0xd1, 0x07, 0x15, 0x7a, 0x68, 0xa0, 0x07, 0x15, 0x7c, 0xa0, 0xa0, 0x45, 0x05, 0x7d, 0x28, 0xa2, 0x1f, 0xe8, 0x3f, 0x00, 0xf0, 0x3f, 0xe0, 0x1f, 0x14, 0xf0, 0x41, 0x01, 0x1f, 0x48, 0xf0, 0x85, 0x02, 0xbe, 0x40, 0xa4, 0xbf, 0xf0, 0x5d, 0x14, 0xd0, 0x45, 0x01, 0x5f, 0x20, 0xd0, 0x45, 0x05, 0x5f, 0x54, 0xb0, 0x03, 0x15, 0x1e, 0x48, 0xd0, 0xff, 0x40, 0xff, 0xaf, 0xa4, 0xef, 0x88, 0xbe, 0x40, 0xa1, 0x07, 0x14, 0x7d, 0x20, 0xd0, 0x0b, 0x14, 0xba, 0x90, 0xc0, 0xff, 0xa0, 0x5f, 0x50, 0xe1, 0x05, 0x0a, 0x5c, 0x54, 0xe2, 0x05, 0x00, 0x5d, 0x20, 0xc0, 0x45, 0x05, 0x75, 0x20, 0xe1, 0x5f, 0x50, 0x7f, 0x95, 0xb0, 0xbf, 0x80, 0x1e, 0x00, 0xfc, 0x01, 0xc0, 0x1f, 0x08, 0xfa, 0x09, 0x80, 0x7f, 0x01, 0x60, 0x5f, 0xe8, 0x7f, 0x00, 0xb8, 0x07, 0x40, 0x7f, 0x00, 0xf8, 0x07, 0xa2, 0x7e, 0x00, 0xfa, 0x01, 0x04, 0x3c, 0x01, 0xf8, 0xbf, 0x00, 0xfd, 0x17, 0xc0, 0xff, 0x00, 0x3e, 0x10, 0xea, 0x01, 0xa2, 0x1e, 0x00, 0xec, 0x03, 0x40, 0xfd, 0x04, 0xa0, 0xff, 0xf5, 0xbf, 0x02, 0xe4, 0x2b, 0x80, 0xbe, 0x02, 0xa2, 0x2b, 0x00, 0x5d, 0x05, 0xe0, 0x03, 0x02, 0xf9, 0x08, 0xd2, 0xbf, 0x40, 0xff, 0x9f, 0xe0, 0x5f, 0x40, 0x1f, 0x00, 0xfa, 0x01, 0xa0, 0x1f, 0x00, 0xf6, 0x83, 0x80, 0xbe, 0x02, 0xa0, 0xbf, 0xe8, 0xbf, 0x00, 0xf2, 0x0b, 0xa0, 0xbe, 0x00, 0xf8, 0x05, 0xa0, 0x7f, 0x00, 0xfa, 0x01, 0x05, 0x3c, 0x00, 0xf8, 0xff, 0x10, 0xfd, 0x2f, 0xa8, 0x7f, 0x11, 0xbd, 0xef, 0xfe, 0xdf, 0xdb, 0xff, 0xed, 0xfb, 0x7d, 0xfd, 0xff, 0xf6, 0xa5, 0xff, 0xff, 0x7f, 0xdf, 0xfd, 0xf7, 0xdf, 0x7f, 0xdb, 0xf7, 0xff, 0x6d, 0xff, 0xdf, 0xf7, 0xfd, 0xf5, 0xff, 0xdf, 0xef, 0xbf, 0x8a, 0xff, 0x97, 0xe2, 0x7f, 0x49, 0xbf, 0xaa, 0xf7, 0x6b, 0xed, 0x5d, 0xb7, 0xfe, 0xaf, 0x56, 0xff, 0x57, 0xd2, 0xff, 0xfd, 0xff, 0xd3, 0xfe, 0x3f, 0xe9, 0xff, 0x5b, 0xfd, 0xaf, 0xf6, 0xbf, 0x65, 0xfd, 0x97, 0x2e, 0xfd, 0xaa, 0xfa, 0xff, 0xf5, 0xfe, 0x7f, 0xdd, 0xff, 0xb6, 0xff, 0xff, 0xfe, 0xff, 0xfb, 0xff, 0xed, 0xff, 0xff, 0xfd, 0xff, 0xff, 0xad, 0xff, 0xef, 0xff, 0xbf, 0xef, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xfd, 0xff, 0xdf, 0xff, 0xff, 0xfb, 0xff, 0xff, 0xff, 0xff, 0x5e, 0xff, 0xdf, 0xef, 0xff, 0xf7, 0xff, 0xfb, 0xff, 0xdf, 0xff, 0xff, 0xff, 0xfe, 0xb7, 0xff, 0xff, 0xbd, 0xff, 0xff, 0xff, 0xff, 0xfd, 0xff, 0xdf, 0xff, 0x7f, 0xef, 0xff, 0xff, 0xbf, 0xff, 0xff, 0xff, 0xfb, 0xff, 0xff, 0xef, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfd, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfd, 0xff, 0xff, 0xff, 0xff, 0xaa, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xd6, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xef, 0xff, 0x7f, 0xef, 0xff, 0xff, 0xff, 0x57, 0xbf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xb7, 0x6d, 0x7f, 0xfb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x5f, 0xfd, 0xdf, 0xda, 0xfe, 0xef, 0xff, 0x6d, 0x49, 0xfd, 0xff, 0xff, 0xdf, 0xfd, 0xff, 0xff, 0xff, 0xff, 0xbf, 0xfd, 0xff, 0xff, 0xff, 0xff, 0xff, 0xba, 0x82, 0x5f, 0xaf, 0xff, 0xbf, 0xfd, 0xff, 0xff, 0xff, 0xdf, 0xff, 0xdf, 0xff, 0xff, 0xcb, 0xff, 0xaf, 0xa2, 0xff, 0xea, 0xff, 0x07, 0x00, 0xff, 0xff, 0xfd, 0xef, 0xae, 0xfe, 0xff, 0xff, 0xff, 0x57, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xbf, 0x57, 0x21, 0x77, 0x6b, 0xfb, 0xee, 0xee, 0xff, 0xfb, 0xff, 0xf7, 0xfe, 0xb7, 0xfa, 0xff, 0x8f, 0xfe, 0x3f, 0x54, 0xff, 0xd7, 0xff, 0x0b, 0x0a, 0xfa, 0x7f, 0xff, 0xbb, 0xb5, 0xfb, 0xef, 0xff, 0xff, 0x5f, 0xf5, 0xdf, 0xff, 0xaf, 0x56, 0xff, 0x52, 0x81, 0x3f, 0xd5, 0x7f, 0xb7, 0xea, 0xaf, 0x5e, 0xff, 0x5b, 0xff, 0x5b, 0xff, 0xff, 0x42, 0xf7, 0x2f, 0x81, 0x7f, 0xd1, 0xff, 0x0b, 0x80, 0xff, 0x5f, 0xfb, 0x2b, 0x55, 0xfd, 0x7f, 0xed, 0xff, 0x4b, 0xf4, 0xeb, 0xfe, 0x5f, 0xcd, 0x3e, 0x00, 0x80, 0x2f, 0x84, 0xbe, 0x55, 0xb0, 0xb7, 0xd2, 0xfa, 0x87, 0xd4, 0x07, 0xfa, 0xbf, 0x0f, 0xfa, 0x3f, 0xa2, 0xfe, 0xa6, 0xed, 0x05, 0x09, 0xfa, 0xbf, 0xd8, 0x07, 0x00, 0xf8, 0xab, 0xfe, 0xf7, 0x17, 0xf8, 0xbf, 0xff, 0x97, 0xa6, 0x9e, 0x42, 0xa1, 0x17, 0x45, 0xbf, 0x0a, 0xd2, 0x9b, 0xaa, 0xfe, 0x0a, 0xfe, 0x05, 0xfa, 0xff, 0x80, 0xab, 0x27, 0xd0, 0x7f, 0xc3, 0xee, 0x87, 0x00, 0xfd, 0x2f, 0xfa, 0x05, 0x00, 0xfa, 0xaa, 0xeb, 0xbd, 0x05, 0xfc, 0x8b, 0xfe, 0x0b, 0x4b, 0x7f, 0x20, 0xa8, 0x17, 0x81, 0x3a, 0x00, 0xa0, 0x07, 0x00, 0xb9, 0x05, 0xc1, 0x97, 0xf4, 0x3f, 0x05, 0xd0, 0x2f, 0x02, 0xfd, 0x41, 0xb5, 0x0b, 0x04, 0xfd, 0x3f, 0xfa, 0x6f, 0x51, 0xfd, 0x05, 0xf4, 0xd3, 0x17, 0xf5, 0x87, 0xfe, 0x07, 0x82, 0x1f, 0x90, 0xe4, 0x15, 0x94, 0x1e, 0x80, 0xc0, 0x0b, 0x00, 0x7c, 0xa5, 0xf4, 0x0b, 0xfe, 0x9f, 0x00, 0xd0, 0x2b, 0xd2, 0x5f, 0xa4, 0xd2, 0x05, 0x00, 0xfd, 0x17, 0xfa, 0x37, 0x51, 0xbd, 0x02, 0xb0, 0xeb, 0x02, 0xfd, 0x13, 0xff, 0x15, 0x49, 0x7d, 0x40, 0xa8, 0x27, 0x22, 0x3a, 0x00, 0xa0, 0x0b, 0x00, 0x5a, 0x09, 0x48, 0xb7, 0xd0, 0xbf, 0x08, 0x41, 0x17, 0x01, 0xf9, 0x82, 0x94, 0x0b, 0x00, 0xf5, 0xbf, 0xf4, 0xaf, 0xa0, 0xf6, 0x01, 0xd4, 0x93, 0x0d, 0xfa, 0x87, 0xf6, 0x07, 0x44, 0x5f, 0x59, 0xa0, 0x01, 0x00, 0xda, 0x12, 0xfa, 0x85, 0x16, 0x3b, 0x00, 0x42, 0x17, 0xf4, 0x9f, 0x80, 0xd0, 0x03, 0x00, 0xbc, 0x00, 0xc0, 0x01, 0x02, 0xf8, 0x2f, 0xfa, 0xb5, 0x90, 0x3a, 0x88, 0xc0, 0xc9, 0x06, 0xff, 0x45, 0xff, 0x05, 0x82, 0x7f, 0x50, 0xc8, 0x05, 0x00, 0x7a, 0x05, 0xa8, 0x0b, 0x14, 0x5c, 0x00, 0x80, 0x0f, 0xd0, 0x3f, 0x08, 0x80, 0x13, 0x41, 0xf2, 0x00, 0x80, 0x07, 0x20, 0xfa, 0x2f, 0xfa, 0x2f, 0x41, 0xd8, 0x02, 0xa1, 0x47, 0x13, 0xfa, 0x87, 0xfd, 0x57, 0xd0, 0x3f, 0x59, 0x60, 0x27, 0x95, 0xfd, 0x85, 0xff, 0x87, 0x16, 0x5f, 0x92, 0xc2, 0x0b, 0xe8, 0x5f, 0x84, 0xd0, 0x01, 0x00, 0x3a, 0x28, 0xfa, 0x81, 0x04, 0xf9, 0x37, 0xfa, 0x01, 0x10, 0x3a, 0xa0, 0xc4, 0x05, 0x85, 0xff, 0xe1, 0xfe, 0x9f, 0xa0, 0xde, 0xa8, 0x80, 0x15, 0x82, 0x7e, 0x17, 0xfa, 0x0b, 0x0d, 0x7a, 0x01, 0x91, 0x57, 0xf0, 0x3f, 0x89, 0x82, 0x2b, 0x82, 0xb0, 0x48, 0xa4, 0x0b, 0x50, 0xfc, 0x9f, 0xec, 0x95, 0x80, 0x58, 0x44, 0x41, 0x8b, 0x02, 0xfd, 0x06, 0xff, 0x57, 0xa0, 0x7f, 0x54, 0xa0, 0x17, 0x91, 0xfe, 0x83, 0xff, 0x8b, 0x16, 0xbd, 0x84, 0xc8, 0x15, 0xb2, 0x1f, 0x04, 0xd0, 0x03, 0x20, 0xba, 0x20, 0xfa, 0x03, 0x04, 0xf6, 0x2f, 0xf4, 0x01, 0x90, 0x5c, 0xa2, 0x4a, 0x4f, 0x45, 0xff, 0xe3, 0xf5, 0xbf, 0xa0, 0x5f, 0xb0, 0x88, 0x2f, 0x44, 0xf7, 0x25, 0xfd, 0x87, 0x14, 0x7a, 0x0b, 0x81, 0x07, 0xe8, 0xbf, 0x80, 0x80, 0x2f, 0x83, 0x3d, 0x14, 0xf6, 0x1d, 0x00, 0xfd, 0x37, 0xfc, 0x7f, 0xa1, 0x36, 0x44, 0x81, 0xaf, 0xc0, 0x7e, 0x01, 0xea, 0x2f, 0xa8, 0x7f, 0x9a, 0xc8, 0x13, 0xa2, 0xff, 0x86, 0xff, 0x05, 0x16, 0xff, 0x81, 0xe0, 0x05, 0xfa, 0x3f, 0x00, 0xe0, 0x25, 0x50, 0x3f, 0x8b, 0xfa, 0x07, 0x02, 0xfd, 0x1f, 0xf6, 0x5b, 0xd1, 0x1f, 0xa2, 0xc8, 0xb7, 0x64, 0xff, 0x61, 0xf4, 0xdf, 0xc0, 0x5a, 0x48, 0x68, 0x0f, 0x89, 0xfe, 0x65, 0xff, 0x0b, 0x0d, 0xf8, 0x82, 0xa0, 0x07, 0xac, 0xbd, 0x0c, 0x91, 0x17, 0x82, 0xfd, 0x15, 0xfd, 0x0b, 0x11, 0xfe, 0x2f, 0xfa, 0xbf, 0x60, 0x5d, 0x40, 0x43, 0x6f, 0xd0, 0x7f, 0x29, 0xa1, 0x2f, 0x00, 0x7d, 0x4a, 0xee, 0x17, 0x89, 0x7f, 0xa3, 0xff, 0x8b, 0x0a, 0xbf, 0x22, 0xb0, 0x85, 0xea, 0x5f, 0x82, 0xd0, 0x07, 0xd1, 0xbf, 0x85, 0xfe, 0x4f, 0x05, 0xf7, 0x2b, 0xfa, 0xdf, 0x70, 0x1f, 0x64, 0x41, 0x3f, 0xe8, 0x5f, 0x41, 0xb0, 0xb7, 0x40, 0x5d, 0x20, 0xf0, 0x2f, 0x44, 0xfd, 0xa5, 0xff, 0x0d, 0x12, 0x7a, 0x41, 0xc1, 0x07, 0x50, 0x7a, 0x0d, 0xc1, 0x2b, 0x82, 0x7e, 0x17, 0xfd, 0x0b, 0x10, 0xfd, 0x17, 0xfc, 0x7f, 0xd1, 0x5f, 0x40, 0xc1, 0xdf, 0xa0, 0xbf, 0x28, 0xc1, 0x17, 0x0c, 0x74, 0x11, 0xfd, 0x2b, 0x42, 0xbf, 0xe0, 0xff, 0x07, 0x00, 0x3d, 0x28, 0xf8, 0x13, 0x00, 0xba, 0x85, 0xfe, 0x05, 0xd1, 0xff, 0xc5, 0xff, 0x7f, 0x85, 0xfe, 0x15, 0xfe, 0x17, 0xd0, 0x3f, 0x28, 0x70, 0x17, 0xfc, 0x5f, 0x00, 0xa0, 0x0b, 0x09, 0xf8, 0x01, 0xfd, 0x17, 0x80, 0xdf, 0xa4, 0xff, 0x05, 0x09, 0x5d, 0x02, 0xd0, 0x0d, 0x88, 0xf0, 0x07, 0xf5, 0x47, 0x43, 0xff, 0xa5, 0xfe, 0x5f, 0x01, 0xff, 0x0b, 0xea, 0x7f, 0xe1, 0x7f, 0x50, 0xd1, 0x2b, 0xe8, 0x3f, 0x01, 0xc0, 0xa3, 0x56, 0xbd, 0xa4, 0xfe, 0x1b, 0xd1, 0x3e, 0xf0, 0xff, 0x87, 0x4a, 0x1d, 0x79, 0xfa, 0x47, 0x45, 0xfa, 0x8b, 0xff, 0x41, 0xd1, 0xbf, 0xd0, 0xff, 0x77, 0xa1, 0xfd, 0xc0, 0xff, 0x2f, 0xf8, 0xbf, 0x15, 0xdc, 0x0b, 0xff, 0x1f, 0x48, 0x45, 0x05, 0x5b, 0xf4, 0x0b, 0xfd, 0x2f, 0x84, 0xdf, 0xea, 0xff, 0x1b, 0x2d, 0x5e, 0x54, 0xed, 0xa5, 0x0a, 0xfc, 0x8b, 0xfa, 0xab, 0xab, 0xff, 0xaa, 0xff, 0xbf, 0x41, 0x7f, 0x0b, 0xfd, 0x5f, 0xa0, 0x7f, 0x15, 0xf5, 0x47, 0xf5, 0x5f, 0x00, 0x89, 0xe3, 0x5f, 0xfb, 0xe2, 0xff, 0x17, 0xe0, 0x7f, 0xf8, 0xff, 0x8f, 0x97, 0x1f, 0x5d, 0xf6, 0xa7, 0xa5, 0xfa, 0x8b, 0xfe, 0xe1, 0xe9, 0x7f, 0xf2, 0xff, 0xff, 0xe0, 0xff, 0xc1, 0xff, 0x6f, 0xfa, 0xff, 0x0d, 0xfd, 0x01, 0xff, 0x3f, 0xaa, 0xc1, 0x5f, 0xfb, 0xfe, 0x5f, 0xff, 0xbf, 0xbe, 0x7e, 0xef, 0xff, 0xef, 0xfd, 0xfe, 0xfe, 0xfd, 0xff, 0xbf, 0xfe, 0xaf, 0xff, 0x5f, 0xdf, 0xff, 0xdd, 0xff, 0xff, 0x5f, 0x7f, 0xb5, 0xff, 0xdf, 0xea, 0xff, 0xf7, 0xfe, 0xf7, 0xff, 0xdf, 0xd5, 0xfe, 0xf7, 0xbf, 0xff, 0xfb, 0xff, 0x2b, 0xeb, 0xbf, 0xfb, 0xff, 0x7b, 0xbf, 0x5f, 0xef, 0xff, 0xeb, 0xd6, 0xff, 0xab, 0xff, 0xf7, 0xf7, 0xff, 0xff, 0xff, 0xff, 0xea, 0xff, 0xf5, 0xff, 0xff, 0xfe, 0x7f, 0xbf, 0xff, 0x5b, 0xff, 0xff, 0xfe, 0xd7, 0xff, 0xff, 0xff, 0xef, 0xff, 0xff, 0xfd, 0xff, 0xff, 0xff, 0xef, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xbf, 0xf7, 0xff, 0xff, 0xff, 0xff, 0xbb, 0xff, 0xff, 0xff, 0xff, 0xef, 0xff, 0xf7, 0xff, 0xff, 0xdb, 0xff }; xscreensaver-5.36/hacks/images/matrix2b.xbm000644 000767 000024 00000054502 10046031372 020736 0ustar00jwzstaff000000 000000 #define matrix2b_width 160 #define matrix2b_height 182 static unsigned char matrix2b_bits[] = { 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0xff, 0xfe, 0xc3, 0x8f, 0xbf, 0xff, 0xff, 0xf7, 0x0f, 0x1f, 0xff, 0xfd, 0xff, 0xff, 0xff, 0xff, 0xff, 0xcf, 0xff, 0x1f, 0xbe, 0xf2, 0xa9, 0x43, 0x1f, 0xff, 0xfd, 0xeb, 0xd7, 0x2f, 0x7f, 0xfc, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc7, 0xff, 0x5f, 0x7c, 0xe8, 0xa1, 0x07, 0x3e, 0xbe, 0xf8, 0xe3, 0x87, 0x3f, 0xfe, 0xf0, 0xe3, 0xff, 0xff, 0xff, 0xff, 0xcf, 0xff, 0x1f, 0x1f, 0xf2, 0x80, 0x91, 0x0f, 0x7d, 0xfa, 0xf1, 0xd7, 0x3f, 0x1d, 0xf0, 0xf5, 0xff, 0xff, 0xff, 0xff, 0xa7, 0xff, 0x3f, 0x7c, 0xf0, 0x82, 0xa3, 0x3e, 0x7c, 0xf0, 0xe7, 0xc7, 0x7f, 0x7e, 0xe0, 0xd3, 0xff, 0xff, 0xff, 0xff, 0xe7, 0xff, 0x1f, 0xbf, 0xfb, 0xa0, 0x03, 0x8f, 0x3a, 0xfd, 0xfd, 0xe7, 0x3f, 0xbe, 0x74, 0xa0, 0xff, 0x07, 0xfc, 0xff, 0xf1, 0xff, 0x3f, 0xfe, 0xff, 0xc5, 0x17, 0x1e, 0x7a, 0xe0, 0xff, 0xc7, 0x7f, 0xbc, 0xf0, 0x80, 0xff, 0x0f, 0xf8, 0xff, 0xe3, 0xff, 0x3f, 0xff, 0x7f, 0x80, 0x23, 0x1e, 0x1c, 0xf0, 0xff, 0xab, 0x3f, 0x7f, 0xfb, 0xa2, 0xff, 0xaf, 0xfa, 0xff, 0xf8, 0xff, 0x7f, 0xfe, 0xff, 0xa1, 0x07, 0xbe, 0x38, 0xe1, 0xff, 0xc7, 0x3f, 0x7c, 0xf7, 0xe7, 0x8f, 0xff, 0xff, 0xf8, 0xf1, 0xff, 0xbf, 0xff, 0x7f, 0xe4, 0xa1, 0x3e, 0x3a, 0xe8, 0xff, 0x57, 0x5f, 0xff, 0xff, 0xf1, 0xd7, 0xff, 0x7f, 0x7d, 0xfc, 0xff, 0x3f, 0xfe, 0xff, 0xc1, 0x8f, 0x7f, 0x7a, 0xe1, 0xff, 0x8f, 0x3f, 0xfe, 0xff, 0xe7, 0x8f, 0xff, 0x7f, 0xf9, 0xf9, 0xff, 0xff, 0xff, 0xff, 0xf4, 0xc7, 0xff, 0xbf, 0xff, 0xff, 0x5f, 0x8f, 0xff, 0xff, 0xff, 0xe7, 0xff, 0xff, 0x7f, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xeb, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xaf, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0x7f, 0xfb, 0xff, 0xff, 0x5f, 0xff, 0xf5, 0xf6, 0xff, 0xbf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x4b, 0x2f, 0xfe, 0xf4, 0xd2, 0x1f, 0x5f, 0xfc, 0xeb, 0xc4, 0x4b, 0x3f, 0xfd, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf5, 0x87, 0x8e, 0x1f, 0xe8, 0xc0, 0xa7, 0x07, 0x3a, 0x70, 0xd0, 0x03, 0x4f, 0xfc, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xe2, 0x83, 0x0e, 0xbe, 0xe0, 0x82, 0x0f, 0x1f, 0xfc, 0x60, 0x81, 0x0b, 0x1e, 0xf8, 0xff, 0xff, 0x5f, 0xbe, 0xaf, 0xfe, 0xc0, 0x29, 0x3e, 0x3f, 0xe5, 0x94, 0x83, 0x47, 0x3d, 0xfa, 0xc5, 0x21, 0x46, 0x7c, 0xfd, 0xd3, 0x17, 0x57, 0x1d, 0xfa, 0xc4, 0x53, 0x3e, 0xfd, 0xe2, 0x87, 0x17, 0x0f, 0x58, 0xf0, 0xcf, 0x4b, 0xce, 0xf8, 0xf4, 0xc7, 0x87, 0x0e, 0x78, 0xf0, 0xca, 0x11, 0x1e, 0x7f, 0xe9, 0xa1, 0x83, 0x4f, 0x3c, 0xf4, 0xe3, 0x03, 0x0f, 0x7c, 0xfc, 0xf3, 0x52, 0x17, 0x7c, 0xe5, 0xc5, 0x73, 0x3e, 0x7e, 0xf1, 0x8b, 0x13, 0xde, 0x58, 0xe0, 0xc7, 0x27, 0x5e, 0xf0, 0xfd, 0xef, 0xc1, 0x4f, 0x78, 0xe1, 0xd3, 0x21, 0x3e, 0x7f, 0xfc, 0xc6, 0x02, 0x6f, 0x3c, 0xf1, 0xf1, 0x12, 0x0e, 0xfc, 0xff, 0xff, 0x49, 0x07, 0xf9, 0xe8, 0xf1, 0x43, 0x3e, 0x7a, 0xf0, 0x8c, 0x03, 0xce, 0x58, 0xe2, 0xe3, 0x43, 0xbe, 0xf8, 0xfa, 0xeb, 0x8b, 0x1e, 0x58, 0xf4, 0xe3, 0x0b, 0x07, 0x1c, 0x6a, 0xc0, 0x0b, 0x15, 0x3c, 0xf0, 0xf3, 0x09, 0x0e, 0x7e, 0xfc, 0xe3, 0x2f, 0xf7, 0x1f, 0xfd, 0xfb, 0x97, 0x2e, 0x38, 0xe8, 0xa2, 0x2f, 0x96, 0xfc, 0xe2, 0xe6, 0x97, 0xbf, 0xfc, 0xf8, 0xc7, 0xbf, 0xbe, 0xfd, 0xfe, 0xf3, 0xaf, 0xaf, 0x5e, 0xf1, 0xd5, 0x4f, 0x5f, 0x7f, 0xfc, 0xfb, 0xa7, 0x0f, 0xff, 0xfe, 0xf1, 0xff, 0xff, 0xbf, 0xff, 0xfb, 0xff, 0xff, 0xfd, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfd, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0xff, 0xff, 0xff, 0xbf, 0xff, 0xff, 0xff, 0xbf, 0xff, 0xff, 0xfd, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xd7, 0xaf, 0xff, 0xfa, 0xab, 0xd5, 0x6f, 0x7d, 0xf5, 0xd5, 0xb5, 0x5e, 0xbd, 0xeb, 0xd6, 0xd5, 0xdf, 0x7b, 0xeb, 0xf5, 0xa7, 0x0f, 0x0f, 0x74, 0xa1, 0x41, 0x07, 0x0c, 0xe0, 0xa2, 0x51, 0x26, 0x7c, 0x70, 0xc8, 0xa1, 0xa3, 0x18, 0xf5, 0xd2, 0x07, 0x1f, 0x3c, 0x60, 0x85, 0x02, 0x0e, 0xbc, 0x60, 0x81, 0x03, 0x0e, 0xf8, 0xe0, 0x80, 0xc3, 0x47, 0x31, 0x61, 0xc1, 0x91, 0x0e, 0x1e, 0x71, 0xa8, 0x11, 0x47, 0x18, 0x62, 0xa4, 0x11, 0x5e, 0x7d, 0xb1, 0xc4, 0xe5, 0x87, 0x18, 0x60, 0x84, 0x83, 0x3e, 0x3c, 0xa2, 0x94, 0x32, 0x8e, 0x3a, 0xe5, 0x8c, 0x53, 0x3e, 0xfe, 0xe3, 0xc4, 0xc7, 0x0f, 0x18, 0x65, 0x9c, 0x03, 0x8f, 0x5a, 0x70, 0xfe, 0x29, 0x16, 0x5e, 0x38, 0xaa, 0x01, 0x1e, 0x7f, 0x79, 0xf0, 0xf3, 0x87, 0x18, 0x70, 0xc6, 0x03, 0x1e, 0x5a, 0x60, 0xfa, 0x71, 0x16, 0x3a, 0x70, 0x8c, 0x03, 0x3e, 0xee, 0xf1, 0xc0, 0xa7, 0x0f, 0x98, 0x60, 0x9c, 0x09, 0x0b, 0x3c, 0x25, 0xae, 0x29, 0x4e, 0x1c, 0x7d, 0xc2, 0x29, 0x3e, 0x1f, 0x69, 0xe0, 0x63, 0x0b, 0x19, 0x32, 0x86, 0x23, 0xa6, 0x28, 0x62, 0x98, 0x69, 0x8a, 0x38, 0x79, 0x8c, 0x53, 0x3e, 0x1c, 0xf1, 0x0a, 0x07, 0xae, 0x98, 0x60, 0x9c, 0x83, 0x07, 0x18, 0x68, 0xc4, 0x00, 0x07, 0x1a, 0x7e, 0x80, 0x01, 0x0e, 0x9d, 0x7c, 0xc0, 0x11, 0x43, 0x19, 0x71, 0xc0, 0x0f, 0x97, 0x58, 0xe1, 0x81, 0x13, 0x57, 0x38, 0xf8, 0xab, 0x53, 0x2c, 0x38, 0xf0, 0x9a, 0x23, 0x8f, 0x30, 0xe3, 0xc9, 0xeb, 0xef, 0xbb, 0xfe, 0xff, 0xed, 0xaf, 0xdd, 0xfe, 0xf5, 0xba, 0xdf, 0xff, 0x7f, 0x6d, 0xab, 0xf7, 0x5f, 0xff, 0xf7, 0xbf, 0xbf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7e, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfd, 0xef, 0xff, 0xff, 0xff, 0xef, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xfe, 0xfe, 0xff, 0x57, 0xbf, 0xbe, 0xfa, 0xd7, 0xad, 0xae, 0x7a, 0x6b, 0xdd, 0xab, 0xae, 0x7a, 0xf5, 0xe2, 0xe9, 0xbf, 0xfe, 0xfa, 0xff, 0x41, 0x17, 0x0d, 0x78, 0xc1, 0x03, 0x43, 0x0c, 0x65, 0x84, 0x10, 0x46, 0x98, 0xe0, 0xf9, 0xf5, 0x1f, 0xff, 0xfc, 0xff, 0x02, 0x16, 0x3c, 0xe0, 0x80, 0x03, 0x8e, 0x18, 0xc2, 0x94, 0x23, 0x8c, 0x38, 0xe0, 0xe1, 0xd3, 0x3f, 0xfc, 0xf0, 0xff, 0x25, 0x46, 0x98, 0x32, 0xc9, 0x48, 0xa2, 0x98, 0x72, 0x80, 0x21, 0x47, 0x38, 0xe5, 0xf9, 0xe5, 0x5f, 0x3e, 0xf8, 0xff, 0x53, 0xc6, 0x39, 0x62, 0x88, 0x03, 0x46, 0x39, 0xc2, 0x92, 0x07, 0x8e, 0x7a, 0xe0, 0xe1, 0x87, 0x7f, 0x7c, 0xea, 0xff, 0x21, 0xa6, 0x18, 0xf0, 0xe0, 0x4b, 0xe7, 0x9c, 0x72, 0x80, 0x43, 0x1f, 0x5c, 0xf9, 0xfa, 0xe7, 0x3f, 0x7f, 0xf9, 0xff, 0x07, 0xa6, 0xb9, 0xe0, 0x85, 0x4f, 0x87, 0x38, 0xe2, 0x80, 0x0f, 0x3f, 0xfd, 0xf0, 0xf1, 0x0f, 0x7f, 0xfc, 0xf7, 0xff, 0x21, 0x4b, 0x18, 0xba, 0xc0, 0x8b, 0x67, 0x7c, 0xb8, 0x84, 0x43, 0x1f, 0x3f, 0xf4, 0xfa, 0xcf, 0x3f, 0x7e, 0xff, 0xff, 0xa3, 0x07, 0x38, 0x60, 0x8a, 0x4f, 0x87, 0x78, 0xf1, 0x08, 0x0b, 0x3c, 0xbc, 0xe0, 0xe1, 0x1f, 0x7e, 0xfc, 0x7f, 0xd2, 0xc1, 0x0f, 0x0d, 0x61, 0xc0, 0x83, 0x4f, 0x7c, 0x78, 0xc0, 0x21, 0x2e, 0x3e, 0xe4, 0xf8, 0x5f, 0x1f, 0xff, 0xbf, 0x88, 0x8b, 0x1f, 0x38, 0xc6, 0x82, 0x0f, 0x1f, 0xf8, 0xf0, 0x8d, 0x21, 0x1e, 0x7a, 0xe0, 0xe1, 0x3f, 0x3e, 0xfc, 0x7f, 0x80, 0xf5, 0x17, 0xbc, 0x7f, 0xfd, 0xf7, 0xef, 0xff, 0xff, 0xfe, 0xef, 0xff, 0xde, 0xed, 0xd1, 0x3f, 0x2f, 0xff, 0x7f, 0xa9, 0xff, 0xff, 0xfd, 0xfd, 0xff, 0xbf, 0xff, 0xff, 0xff, 0xfd, 0xdf, 0xfe, 0xff, 0xff, 0xff, 0x7f, 0xff, 0xfe, 0xff, 0xf7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xff, 0x5f, 0xff, 0xff, 0x5f, 0xff, 0x7f, 0xe9, 0xff, 0xf5, 0xbf, 0xfe, 0xf9, 0xfa, 0xd7, 0xff, 0xff, 0xff, 0xff, 0xc7, 0xff, 0x1f, 0xff, 0xff, 0x2f, 0xff, 0xff, 0xe0, 0xff, 0xf0, 0x1f, 0x7f, 0x39, 0xfc, 0xc3, 0xff, 0xff, 0xff, 0xff, 0x0f, 0x7f, 0x3f, 0xfc, 0xeb, 0x1f, 0xbe, 0xfe, 0xe8, 0xd7, 0xd3, 0x3f, 0xfe, 0xf1, 0xe8, 0x4f, 0xdf, 0xbe, 0xfd, 0xfb, 0xcf, 0x97, 0x1e, 0x75, 0xd5, 0x23, 0x57, 0x1d, 0xf0, 0xa8, 0x41, 0x1f, 0x3f, 0x78, 0xd5, 0xc7, 0x23, 0x5d, 0x79, 0xe5, 0x1f, 0x0f, 0x3c, 0xe0, 0x80, 0x05, 0x0e, 0x78, 0x61, 0x81, 0x03, 0x3e, 0xfe, 0xe0, 0xc0, 0x8f, 0x07, 0x18, 0xe0, 0xc0, 0xff, 0x0f, 0x1a, 0x60, 0xc0, 0x01, 0x07, 0x38, 0x68, 0xc0, 0x21, 0x17, 0x3f, 0x78, 0xc4, 0xcf, 0x07, 0x2c, 0x32, 0xc4, 0xff, 0x2f, 0x3a, 0x66, 0x8c, 0x11, 0x4e, 0x79, 0x79, 0x86, 0x23, 0x3e, 0xfd, 0xe3, 0xd0, 0x8f, 0x4f, 0x38, 0xe2, 0x88, 0xff, 0x07, 0x3c, 0xa1, 0xd6, 0x19, 0x07, 0x78, 0x7c, 0xc4, 0x13, 0x1e, 0xff, 0x79, 0xf1, 0x57, 0x03, 0x19, 0x61, 0xc6, 0xff, 0x4f, 0x34, 0x65, 0x98, 0x21, 0x8e, 0xf0, 0xf4, 0x40, 0x73, 0x3e, 0xfc, 0xe3, 0xa0, 0x8f, 0x2f, 0x38, 0x66, 0x8c, 0xff, 0x87, 0x18, 0x60, 0xc4, 0x11, 0x07, 0x1a, 0x68, 0xc5, 0x01, 0x0e, 0x7d, 0x79, 0xc4, 0x43, 0x83, 0x94, 0x20, 0xc0, 0xff, 0x1f, 0x39, 0xe9, 0x80, 0x07, 0x5e, 0x78, 0xe1, 0x89, 0x53, 0x2c, 0x78, 0xe1, 0x88, 0x07, 0x8a, 0x98, 0xe2, 0xd2, 0xff, 0xaf, 0xae, 0xfa, 0xef, 0xb5, 0x5f, 0xbf, 0x7c, 0xe0, 0xb5, 0xdf, 0x3f, 0x78, 0xd7, 0xdd, 0xb7, 0xbe, 0xee, 0xf5, 0xff, 0xff, 0xfe, 0xff, 0xfd, 0x7f, 0xff, 0xff, 0xff, 0xeb, 0xff, 0xff, 0xfe, 0xfa, 0xff, 0xfb, 0xff, 0xfd, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xef, 0xdf, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf3, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf5, 0xcf, 0x5f, 0xff, 0xff, 0xff, 0xb7, 0xbf, 0xff, 0xf6, 0xf7, 0xa7, 0xef, 0x7e, 0xf7, 0xff, 0x6f, 0xdf, 0xfb, 0xfd, 0xe3, 0x8f, 0x3f, 0xfe, 0xff, 0xff, 0x55, 0x57, 0x5c, 0xf5, 0xca, 0xc1, 0xd6, 0x5a, 0xb5, 0x84, 0xa9, 0x56, 0x1d, 0xf5, 0xf1, 0xcf, 0x1f, 0xff, 0xff, 0xff, 0x01, 0x16, 0x38, 0xe0, 0x81, 0x03, 0x87, 0x18, 0x60, 0x98, 0x03, 0x86, 0x30, 0xe0, 0xe3, 0x4f, 0x3f, 0xbd, 0xea, 0xff, 0x01, 0x87, 0xb8, 0xd0, 0x88, 0xc5, 0xa7, 0x18, 0xa1, 0x80, 0x25, 0x86, 0x18, 0xf8, 0xf8, 0x97, 0x3f, 0x5e, 0xe4, 0xff, 0x23, 0x26, 0x38, 0xf5, 0xa1, 0x4b, 0x4f, 0x39, 0xa2, 0x82, 0x47, 0x9f, 0xb8, 0xf0, 0xe1, 0x97, 0x7f, 0x3c, 0xe0, 0xff, 0x51, 0x42, 0x7c, 0x7c, 0xc0, 0xe5, 0x47, 0xb9, 0xf8, 0x90, 0x8b, 0x07, 0x5e, 0xfc, 0xf1, 0xcf, 0x1f, 0x9f, 0xf4, 0xff, 0x03, 0x4e, 0xb8, 0xf4, 0x84, 0x85, 0x0e, 0x78, 0xf1, 0x80, 0x07, 0x3e, 0x3c, 0xe0, 0xe3, 0x8f, 0x3f, 0xbe, 0xeb, 0xff, 0xc3, 0x0f, 0x3c, 0xf8, 0x80, 0x07, 0x4f, 0x78, 0x78, 0xc9, 0x22, 0x1f, 0x1f, 0xf1, 0xf9, 0xcf, 0x3f, 0xff, 0xff, 0xff, 0x49, 0xff, 0x38, 0xe8, 0xa4, 0x17, 0x1e, 0xf1, 0xf4, 0xc9, 0x03, 0x0e, 0x3d, 0xf0, 0xe3, 0x9f, 0x3f, 0xfe, 0xff, 0xff, 0xe1, 0x1f, 0xf8, 0xfb, 0xdb, 0xdf, 0x7f, 0xfd, 0xff, 0xff, 0x7f, 0x27, 0xbf, 0xf7, 0xeb, 0xef, 0x4f, 0xff, 0xff, 0xff, 0xcb, 0xff, 0x7a, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xfb, 0xfb, 0x6f, 0xff, 0xfe, 0xef, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xef, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfa, 0xeb, 0xff, 0x57, 0xfd, 0xff, 0xab, 0xff, 0x7f, 0xff, 0xfd, 0xff, 0xff, 0xff, 0xbf, 0xfd, 0xff, 0x0b, 0xfe, 0xff, 0xe9, 0xaa, 0xff, 0x4f, 0xf5, 0xf4, 0xc0, 0x57, 0xaf, 0x7e, 0xf5, 0xff, 0xff, 0xff, 0x7f, 0xf4, 0xe9, 0x01, 0xfc, 0x7f, 0xf1, 0xc1, 0x53, 0x0e, 0xf8, 0xfc, 0x83, 0x6f, 0x0f, 0xf8, 0xf0, 0xff, 0xef, 0xff, 0xbf, 0xe0, 0xc1, 0x03, 0x7e, 0xbf, 0xe8, 0xe8, 0x01, 0x47, 0x7c, 0x79, 0xc8, 0x57, 0x07, 0x3c, 0xfa, 0xd5, 0x5d, 0xff, 0x1f, 0xf8, 0xf5, 0x01, 0x7c, 0x3e, 0xe0, 0xd1, 0x07, 0x9e, 0xf8, 0xf8, 0x80, 0xff, 0x0f, 0x78, 0xe8, 0x93, 0x03, 0x6e, 0x3d, 0xc0, 0xeb, 0x01, 0x5c, 0x3f, 0x75, 0xf4, 0x11, 0x0e, 0xfe, 0x7e, 0xa0, 0xff, 0x43, 0x38, 0x70, 0xc0, 0x01, 0x9e, 0x0a, 0xe0, 0xff, 0x03, 0x7e, 0x3e, 0xea, 0xe0, 0x53, 0x3e, 0xfa, 0xf8, 0x81, 0xff, 0x0f, 0x79, 0xe1, 0x84, 0x5f, 0x16, 0x58, 0xe4, 0xff, 0x03, 0x1c, 0x3f, 0xf0, 0xd0, 0x01, 0x0f, 0x7e, 0x7c, 0x82, 0xff, 0x07, 0x38, 0x78, 0xe0, 0x37, 0xae, 0x1e, 0xf0, 0xff, 0x01, 0x3e, 0xfc, 0xe0, 0xa9, 0x03, 0x3e, 0xf8, 0xf8, 0x8a, 0xff, 0x17, 0xfa, 0x72, 0x85, 0xff, 0xfe, 0x7d, 0xe0, 0xff, 0x03, 0x1c, 0x7f, 0x7d, 0x80, 0xb7, 0x0e, 0xfe, 0xfc, 0xa0, 0xff, 0x2f, 0x7e, 0xff, 0xc0, 0x7f, 0xbf, 0x9f, 0xf8, 0xff, 0x01, 0x3e, 0xfc, 0xf1, 0x80, 0xef, 0x5f, 0xfc, 0xf9, 0xe2, 0xff, 0xaf, 0xfc, 0xff, 0x8d, 0xff, 0xff, 0x7f, 0xf5, 0xff, 0x01, 0x3c, 0xff, 0xff, 0xff, 0xff, 0xbf, 0xff, 0xfe, 0xf4, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x13, 0x7e, 0xff, 0x7f, 0xeb, 0xff, 0xbf, 0xfd, 0xff, 0xef, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xfa, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xbf, 0xff, 0xff, 0x8b, 0xff, 0xff, 0xf9, 0xd5, 0xdf, 0xff, 0xdf, 0xe2, 0xff, 0xff, 0xbf, 0xbe, 0xfd, 0xff, 0xf1, 0xd3, 0x2f, 0xfe, 0xff, 0xa7, 0xbf, 0x3e, 0xf4, 0xe1, 0xaf, 0xff, 0x3f, 0xe8, 0xff, 0xff, 0x2f, 0x7f, 0xfa, 0xff, 0xf4, 0xe3, 0x8e, 0xf6, 0xf3, 0x05, 0xbf, 0xfe, 0xf8, 0xc5, 0x9f, 0xff, 0xbf, 0xe0, 0xff, 0xff, 0x3f, 0x7e, 0xf0, 0xff, 0x61, 0xc7, 0x29, 0xc4, 0xe7, 0x53, 0x2f, 0x3d, 0xf9, 0xe1, 0xcb, 0xa7, 0x1a, 0xe8, 0xff, 0xff, 0x1f, 0x1f, 0x79, 0xf5, 0x39, 0x22, 0x9c, 0xf2, 0xf5, 0x07, 0x0f, 0x78, 0xf0, 0x89, 0xff, 0x8f, 0xb8, 0xe8, 0xe5, 0xff, 0x3f, 0x3c, 0x71, 0xc5, 0x51, 0xc6, 0x1a, 0xe4, 0xe3, 0xef, 0x07, 0x78, 0xfa, 0xe4, 0xef, 0xa3, 0x18, 0xf0, 0xf3, 0xff, 0x5f, 0x3f, 0x74, 0xd0, 0x00, 0x03, 0x8c, 0xf0, 0xf0, 0xff, 0x3f, 0xfd, 0xf4, 0xe5, 0xff, 0x4f, 0xb9, 0xe0, 0xe3, 0xff, 0x3f, 0xfc, 0x78, 0x81, 0x13, 0x0a, 0x18, 0xe8, 0xe5, 0xff, 0x2f, 0x7d, 0xff, 0xff, 0xff, 0x87, 0xf8, 0xf8, 0xfd, 0xef, 0xdf, 0x1f, 0xe8, 0xc8, 0x0a, 0x27, 0xb9, 0x70, 0xd8, 0xff, 0x3f, 0xfd, 0xff, 0xfd, 0xff, 0x0f, 0xf8, 0xe0, 0xfb, 0x8f, 0xff, 0x7f, 0xf9, 0x81, 0x23, 0x46, 0x38, 0xe2, 0xc8, 0xff, 0x87, 0xfc, 0xff, 0xff, 0xff, 0x07, 0xb8, 0xe0, 0xff, 0x47, 0xff, 0xff, 0x3e, 0xe4, 0x01, 0x53, 0x8d, 0x70, 0xa0, 0xff, 0x0f, 0xf8, 0xff, 0xff, 0xff, 0xaf, 0x7b, 0xe0, 0xff, 0x8f, 0xff, 0xff, 0xff, 0xca, 0x2b, 0x66, 0x98, 0xe2, 0xe3, 0xff, 0xbf, 0xfd, 0xff, 0xff, 0xff, 0xcf, 0xbf, 0xea, 0xff, 0xa7, 0xff, 0xff, 0xff, 0xff, 0x5f, 0xbf, 0x7e, 0xf5, 0xed, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xff, 0xfb, 0xff, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xfd, 0xff, 0xff, 0xf7, 0x7f, 0xff, 0xfe, 0xff, 0xff, 0x7f, 0xff, 0xff, 0xf7, 0xef, 0xff, 0xfe, 0xfe, 0xf6, 0xfb, 0xff, 0xff, 0xfd, 0xff, 0xd7, 0xff, 0xfc, 0xf8, 0xe2, 0xff, 0x3f, 0xbe, 0xea, 0x8a, 0xd7, 0xdf, 0xfc, 0xf8, 0xd5, 0xc7, 0xbf, 0xfc, 0x74, 0xc9, 0xe3, 0x2f, 0x3e, 0xfa, 0xa9, 0x93, 0x4f, 0x7f, 0x68, 0xa1, 0x4b, 0x3f, 0x5f, 0x74, 0xa9, 0xd7, 0xbf, 0x3e, 0xf8, 0xd2, 0x87, 0xaf, 0x7e, 0x78, 0xe1, 0x27, 0x1f, 0x7d, 0x60, 0x04, 0x03, 0x07, 0xb8, 0xe0, 0xc0, 0x8b, 0x2e, 0xf8, 0xe2, 0x80, 0xcb, 0x0f, 0x3f, 0xf9, 0xd0, 0xc3, 0x2f, 0xbf, 0x68, 0xda, 0x21, 0x06, 0x1c, 0x30, 0x80, 0x03, 0x0f, 0x1d, 0xe8, 0xd2, 0x03, 0x1f, 0x3c, 0xf0, 0xe2, 0x07, 0x0f, 0x7c, 0x60, 0xac, 0x25, 0x9e, 0x38, 0x72, 0x95, 0x8f, 0x3e, 0xba, 0xf0, 0xe3, 0x87, 0x2f, 0x7e, 0xf9, 0xa1, 0x8b, 0x1f, 0x5e, 0x30, 0xfe, 0x83, 0x47, 0x5c, 0xf1, 0xc0, 0xcb, 0x2f, 0xfd, 0xfc, 0xf1, 0x97, 0x1e, 0x78, 0xe8, 0xc5, 0x27, 0x5e, 0x3a, 0x60, 0xd8, 0x13, 0x0f, 0x3a, 0x70, 0xd1, 0x8f, 0x3f, 0xff, 0xf4, 0xe3, 0x01, 0x47, 0x1a, 0x71, 0xa0, 0x81, 0x06, 0x1c, 0x74, 0x56, 0x85, 0x16, 0x1d, 0x75, 0xa4, 0x4f, 0x1f, 0x7d, 0xf9, 0xf3, 0x03, 0x0e, 0x38, 0xe0, 0x80, 0x03, 0x0e, 0x98, 0x60, 0x80, 0x11, 0x4e, 0x38, 0xe0, 0x84, 0x8b, 0x3f, 0xfe, 0xe8, 0xc3, 0x11, 0x86, 0x18, 0xa2, 0x84, 0x11, 0x46, 0x08, 0xe0, 0xc0, 0x01, 0x02, 0x18, 0x60, 0x80, 0x03, 0x0e, 0x38, 0x70, 0xa0, 0x23, 0x8c, 0x30, 0x60, 0x08, 0x23, 0x8c, 0x58, 0xe5, 0xe3, 0x43, 0x0e, 0x39, 0xe5, 0x90, 0x97, 0x5e, 0xba, 0xe4, 0xc5, 0xa9, 0x26, 0x9d, 0x66, 0xa9, 0xa9, 0xa6, 0x5a, 0xf1, 0xf9, 0xad, 0xb7, 0x5a, 0xba, 0xea, 0xab, 0x57, 0x7d, 0xf5, 0xb2, 0xbb, 0xff, 0xfd, 0xfd, 0xff, 0xef, 0xef, 0xfe, 0xff, 0xeb, 0xff, 0xff, 0xff, 0xf7, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf, 0x7f, 0xff, 0xeb, 0xbf, 0xbf, 0xff, 0xff, 0xff, 0xbf, 0xdf, 0xff, 0xfd, 0xfb, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xdb, 0x1f, 0xfc, 0xfc, 0xef, 0xa7, 0x3f, 0xf8, 0xfb, 0xff, 0x6f, 0x1f, 0xff, 0xfb, 0xe3, 0xb7, 0xff, 0xbc, 0xfe, 0xe5, 0x41, 0x2f, 0x3d, 0xf6, 0xe1, 0x47, 0x8f, 0xbe, 0xf6, 0xff, 0x05, 0x9f, 0x7f, 0xf8, 0xf2, 0xd7, 0x5f, 0x2e, 0xfd, 0xf1, 0x09, 0x0e, 0xf8, 0xfc, 0xd3, 0x47, 0x1f, 0x7c, 0xf0, 0xad, 0x0b, 0x36, 0xfa, 0xf0, 0x81, 0x16, 0x5e, 0x38, 0xf9, 0xc2, 0x21, 0x53, 0x1a, 0x70, 0xc0, 0x12, 0x87, 0x1c, 0x55, 0xca, 0x20, 0x06, 0x1c, 0x65, 0xa4, 0x41, 0x03, 0x0d, 0xf4, 0xc8, 0x01, 0x46, 0x38, 0x61, 0x89, 0x01, 0x0e, 0x38, 0xe0, 0x88, 0x03, 0xce, 0x18, 0x61, 0x88, 0x11, 0x4e, 0x78, 0xe0, 0xc1, 0x32, 0x06, 0x19, 0x63, 0x86, 0x39, 0xe2, 0x88, 0xe3, 0xe0, 0x48, 0xa2, 0x2c, 0x73, 0xd6, 0x29, 0x8f, 0x1c, 0x65, 0xc0, 0x41, 0x0e, 0x98, 0x66, 0x9c, 0x71, 0xc6, 0x19, 0xe7, 0xc3, 0x49, 0xc6, 0x18, 0x63, 0x8a, 0x31, 0x1e, 0x38, 0xe1, 0x8a, 0x39, 0x22, 0x8c, 0x23, 0x96, 0x28, 0xa6, 0x98, 0xe2, 0xa0, 0x01, 0xa6, 0x2c, 0x65, 0xcc, 0x29, 0x5f, 0x1f, 0xe4, 0x90, 0x51, 0xa6, 0x18, 0x64, 0x88, 0x51, 0x86, 0x18, 0xe2, 0x84, 0x51, 0x86, 0x2c, 0xe2, 0x88, 0x29, 0x3e, 0x7c, 0xe0, 0x92, 0x01, 0x07, 0x1c, 0xf1, 0xa4, 0x03, 0x17, 0x5d, 0xb4, 0xac, 0x01, 0x4f, 0x5c, 0x78, 0xc0, 0x03, 0x0f, 0x1e, 0x7a, 0x80, 0x81, 0xce, 0x78, 0xe8, 0xc1, 0x0b, 0x2e, 0x78, 0xf0, 0xdd, 0x03, 0x1e, 0x78, 0xe0, 0x83, 0x07, 0x2e, 0x18, 0xfc, 0x88, 0x7f, 0xb7, 0x7f, 0xf7, 0xf6, 0xef, 0xdf, 0xbf, 0xfd, 0xff, 0xfd, 0xef, 0xbf, 0xfb, 0xfa, 0xfb, 0xbf, 0xff, 0xff, 0xf7, 0xed, 0xff, 0xff, 0xff, 0xff, 0xff, 0xbf, 0xff, 0xff, 0xff, 0xeb, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0xff, 0xfe, 0xff, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xef, 0xff, 0xfe, 0xff, 0xff, 0xef, 0xff, 0x7e, 0xfd, 0xeb, 0xff, 0x5f, 0xfe, 0xff, 0xff, 0xef, 0x7f, 0x7d, 0xfd, 0xff, 0xef, 0xff, 0xfd, 0xfd, 0xff, 0xd3, 0xbf, 0xfe, 0xf4, 0xea, 0xb7, 0x3f, 0xff, 0xff, 0xff, 0xd3, 0x7f, 0xfe, 0xf4, 0xed, 0xd3, 0xbf, 0x7e, 0xfc, 0xf5, 0x8f, 0x3f, 0xbd, 0xf8, 0xa1, 0xa7, 0x5f, 0xfe, 0xf6, 0xf7, 0x8f, 0xff, 0xfc, 0xf8, 0xa9, 0x8f, 0x7f, 0xfc, 0xf0, 0xe5, 0xd3, 0x17, 0x3f, 0x7a, 0xe4, 0x8b, 0x2f, 0x9d, 0x75, 0xd5, 0x53, 0x0f, 0x3e, 0x72, 0xe5, 0xe7, 0x1f, 0x5f, 0xfc, 0xea, 0x07, 0x1f, 0x7c, 0xf0, 0xc0, 0x0b, 0x0f, 0x1d, 0xe0, 0x80, 0x07, 0x1e, 0x74, 0xe0, 0x80, 0x87, 0x2f, 0xbe, 0xf4, 0xe1, 0x81, 0x46, 0x1c, 0xf1, 0xa2, 0x21, 0x4f, 0x5c, 0x22, 0xc2, 0x21, 0x45, 0x18, 0x62, 0x84, 0xcb, 0x1f, 0x7f, 0xfc, 0xf2, 0x97, 0x0e, 0x38, 0xe1, 0xa4, 0x07, 0x0e, 0x18, 0x64, 0x9c, 0x03, 0x8e, 0x38, 0xe2, 0x88, 0x4f, 0x3f, 0xfe, 0xf8, 0xe3, 0x01, 0x57, 0x5e, 0xb8, 0xc0, 0x91, 0x96, 0x2c, 0x60, 0xd2, 0x01, 0x06, 0x18, 0x60, 0x80, 0xc7, 0x3f, 0x7f, 0xfc, 0xf5, 0x2b, 0x46, 0x18, 0xe1, 0x88, 0x93, 0x8e, 0x8c, 0xe0, 0x80, 0x43, 0x0e, 0x39, 0xe4, 0x90, 0x0f, 0x2f, 0xfc, 0xf0, 0xc1, 0x01, 0x0f, 0x38, 0x70, 0x80, 0x01, 0x06, 0x28, 0x60, 0xa1, 0x09, 0x06, 0x18, 0x60, 0x80, 0x83, 0x0e, 0x3a, 0xe8, 0xd0, 0x03, 0x0c, 0x39, 0xe1, 0x92, 0x47, 0x1e, 0x19, 0xe5, 0xe3, 0x8b, 0x3e, 0xfa, 0xe8, 0xa3, 0x17, 0x5e, 0x78, 0xe1, 0xc2, 0xaf, 0xbf, 0xbe, 0xfa, 0xea, 0x55, 0x57, 0xbd, 0xfa, 0xf1, 0xaf, 0xaf, 0x7e, 0xfd, 0xf5, 0xa5, 0xaf, 0xbe, 0xfa, 0xd5, 0xff, 0xff, 0xfd, 0xf7, 0xff, 0xff, 0xff, 0xff, 0xfb, 0xf7, 0xff, 0xff, 0xff, 0xfb, 0xef, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xff, 0xff, 0xff, 0xdf, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xbf, 0xff, 0xff, 0xa9, 0xbe, 0xfe, 0xfe, 0xfb, 0xbf, 0x5f, 0xfd, 0xff, 0xff, 0xff, 0xbf, 0xff, 0xfb, 0xf7, 0xff, 0x7f, 0xbd, 0xfe, 0xff, 0x01, 0x17, 0x3d, 0xfe, 0xc7, 0x83, 0x3f, 0xfa, 0xff, 0xf7, 0xff, 0x47, 0xff, 0xf8, 0xd2, 0xb7, 0xbf, 0x0a, 0xff, 0xed, 0x03, 0x2e, 0xfc, 0xf8, 0xcb, 0x0f, 0x1f, 0x5c, 0xe8, 0xf5, 0x57, 0x1f, 0xbe, 0xf1, 0xd1, 0x27, 0x37, 0x3c, 0xf4, 0xc9, 0x91, 0x86, 0x3e, 0xf8, 0xe0, 0xa3, 0x2f, 0xba, 0xf2, 0xe3, 0x8b, 0xa6, 0x2c, 0xb2, 0xc4, 0x28, 0x47, 0x15, 0x68, 0x94, 0x03, 0x0e, 0xf8, 0xe0, 0x83, 0x07, 0x1d, 0x3c, 0xe4, 0xd2, 0x13, 0xa6, 0x5c, 0x62, 0x88, 0x23, 0x8e, 0x78, 0xe0, 0x88, 0x01, 0x82, 0x2c, 0xb0, 0xc0, 0x01, 0x86, 0x18, 0x70, 0xd5, 0x00, 0x43, 0x1c, 0x61, 0xc4, 0x10, 0x46, 0x1c, 0x65, 0xc8, 0x53, 0x8e, 0x98, 0x62, 0x0a, 0x2b, 0x8e, 0x38, 0x62, 0x80, 0x09, 0x8e, 0x38, 0xe6, 0x8c, 0x53, 0x9e, 0x38, 0xe2, 0x81, 0x29, 0x46, 0x38, 0x65, 0x94, 0x51, 0x46, 0x99, 0xe5, 0xd2, 0x21, 0x63, 0x9c, 0x61, 0x94, 0x31, 0x2e, 0x5e, 0xd0, 0xea, 0x53, 0x8e, 0x31, 0xe2, 0x88, 0x23, 0x8e, 0x38, 0xe2, 0xe5, 0x03, 0x86, 0x38, 0xe5, 0x88, 0x43, 0x1e, 0x3e, 0xf0, 0xe1, 0x01, 0x4b, 0x1c, 0x70, 0xc4, 0x82, 0x46, 0x18, 0xd0, 0xf3, 0x10, 0x4f, 0x1c, 0xe0, 0x80, 0x13, 0x0e, 0x9f, 0xf6, 0xe2, 0x0b, 0x06, 0xb8, 0xe0, 0x81, 0x0b, 0x1e, 0xba, 0xf0, 0xe7, 0x01, 0x0f, 0x78, 0xc1, 0x0b, 0x07, 0x1c, 0x1e, 0xfc, 0xe0, 0xf7, 0xef, 0xfd, 0xfe, 0xfe, 0xb7, 0xef, 0x7e, 0xff, 0xfd, 0xf9, 0xbf, 0xfd, 0xfe, 0xea, 0xdf, 0x47, 0x5f, 0x7e, 0xf9, 0xdf, 0xdf, 0xff, 0xfb, 0xf7, 0xff, 0xff, 0xff, 0xf5, 0xff, 0xab, 0xff, 0xff, 0xfb, 0xff, 0x7f, 0x7f, 0xdf, 0xfd, 0xf7, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0xf5, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xf2, 0xfb, 0xff, 0xff, 0xff, 0xbf, 0xff, 0xfb, 0x87, 0xff, 0x1f, 0xf2, 0xff, 0x77, 0xff, 0xff, 0xeb, 0xff, 0x77, 0xaf, 0x70, 0xf4, 0x97, 0xab, 0xbf, 0x7e, 0xfd, 0xe2, 0xa7, 0x9e, 0x3f, 0xe0, 0xef, 0x95, 0xfe, 0xff, 0xd6, 0xfb, 0x33, 0x03, 0x38, 0x72, 0xc0, 0x55, 0x1d, 0x0d, 0x7e, 0xf1, 0x83, 0x8f, 0x1e, 0xf1, 0xe3, 0x01, 0x2e, 0xda, 0xc3, 0xf9, 0x93, 0x4f, 0x5a, 0x68, 0x80, 0x03, 0x2e, 0x3a, 0xfd, 0x80, 0x15, 0x16, 0x31, 0xe0, 0xcf, 0x8f, 0x1d, 0x5c, 0xe1, 0xe3, 0x81, 0x87, 0x18, 0x60, 0xa2, 0x01, 0x07, 0x38, 0x3c, 0x80, 0x81, 0x0e, 0x19, 0xd0, 0xe3, 0x45, 0x06, 0x95, 0xf1, 0xf9, 0x8b, 0x4e, 0x58, 0xea, 0xe9, 0x73, 0x14, 0x32, 0x7c, 0x4a, 0x05, 0x45, 0x18, 0xe4, 0xc7, 0x82, 0x8c, 0x38, 0xe9, 0xe9, 0xcb, 0x67, 0x34, 0xf2, 0xf2, 0x11, 0x0f, 0x19, 0x7d, 0x82, 0x01, 0x25, 0x1e, 0xe0, 0xf3, 0x41, 0x46, 0x18, 0xe9, 0xe8, 0x87, 0x86, 0x58, 0xf0, 0xf1, 0x23, 0x9e, 0x38, 0x7a, 0x40, 0x57, 0x57, 0x7e, 0xf2, 0xc7, 0x9f, 0x87, 0xf2, 0xf8, 0x8a, 0x0b, 0xa7, 0x3e, 0xfa, 0xfc, 0x31, 0x07, 0x1c, 0x5a, 0x49, 0x83, 0x1f, 0x1f, 0xf2, 0xe5, 0xc7, 0xa3, 0x78, 0xfc, 0xc8, 0x23, 0x0c, 0x5c, 0x70, 0xf9, 0x03, 0x96, 0x34, 0xe0, 0xe3, 0x51, 0x5f, 0xff, 0xe0, 0xe3, 0x4b, 0x8f, 0x58, 0x7c, 0x80, 0x29, 0xaf, 0x3f, 0x7c, 0xfc, 0x51, 0xa3, 0x1e, 0xd1, 0xf1, 0x99, 0xc7, 0x7f, 0xf4, 0xf8, 0xc7, 0x27, 0x1e, 0x3f, 0x84, 0xfb, 0x5d, 0xff, 0xf2, 0xfe, 0x77, 0x6f, 0xfd, 0xeb, 0xf7, 0xdb, 0xbf, 0xff, 0xf9, 0xf1, 0xd7, 0x5f, 0x5f, 0xff, 0xba, 0xff, 0xff, 0x3f, 0xff, 0xff, 0xfb, 0xff, 0xbf, 0xff, 0xfb, 0xfd, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xbb }; xscreensaver-5.36/hacks/images/som.xbm000644 000767 000024 00000375074 06461546340 020032 0ustar00jwzstaff000000 000000 #define som_width 464 #define som_height 435 static unsigned char som_bits[] = { 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x60, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x60,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xf0,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xf0,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0xf0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0xf8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0xf8,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0xf8,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfc,0x01, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfc,0x01,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfc,0x03,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfc,0x07,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0xfe,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0xfe,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0xfe,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff, 0x0f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0x0f,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xff,0x0f,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xff,0x1f,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x80,0xff,0x3f,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x80,0xff,0x3f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x80,0xff,0x3f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc0, 0xff,0x3f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xe0,0xff,0x7f, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xe0,0xff,0x7f,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xe0,0xff,0x7f,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0xe0,0xff,0xff,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0xf0,0xff,0xff,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0xf0,0xff,0xff,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0xf0,0xff,0xff,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xf0,0xff, 0xff,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xf8,0xff,0xff,0x03, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfc,0xff,0xff,0x03,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfc,0xff,0xff,0x03,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0xfc,0xff,0xff,0x07,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0xfc,0xff,0xff,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0xfe,0xff,0xff,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfe, 0xff,0xff,0x0f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfe,0xff,0xff, 0x0f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0xff,0x0f,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xff,0xff,0xff,0x1f,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x80,0xff,0xff,0xff,0x1f,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x80,0xff,0xff,0xff,0x1f,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x80,0xff,0xff,0xff,0x1f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc0, 0xff,0xff,0xff,0x3f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc0,0xff,0xff, 0xff,0x7f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc0,0xff,0xff,0xff,0x7f, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc0,0xff,0xff,0xff,0x7f,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0xe0,0xff,0xff,0xff,0xff,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0xe0,0xff,0xff,0xff,0xff,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0xf0,0xff,0xff,0xff,0xff,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0xf0,0xff,0xff,0xff,0xff,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xf0,0xff, 0xff,0xff,0xff,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xf0,0xff,0xff,0xff, 0xff,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xf8,0xff,0xff,0xff,0xff,0x03, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xf8,0xff,0xff,0xff,0xff,0x03,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0xf8,0xff,0xff,0xff,0xff,0x03,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0xf8,0xff,0xff,0xff,0xff,0x07,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0xfc,0xff,0xdf,0xff,0xff,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfe, 0xff,0xdf,0xff,0xff,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfe,0xff,0x8f, 0xff,0xff,0x0f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfe,0xff,0x0f,0xff,0xff, 0x0f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfe,0xff,0x0f,0xff,0xff,0x0f,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x07,0xff,0xff,0x1f,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0xff,0xff,0x07,0xff,0xff,0x1f,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x80,0xff,0xff,0x07,0xfe,0xff,0x1f,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc0, 0xff,0xff,0x03,0xfc,0xff,0x3f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc0,0xff,0xff, 0x03,0xfc,0xff,0x3f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc0,0xff,0xff,0x03,0xfc, 0xff,0x3f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xe0,0xff,0xff,0x01,0xf8,0xff,0x7f, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0xe0,0xff,0xff,0x01,0xf8,0xff,0x7f,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0xe0,0xff,0xff,0x00,0xf0,0x03,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0xe0,0xff,0xff,0x00,0xf0,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0xe0,0xff,0x1f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xf0,0xff, 0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xf0,0x07,0x00,0x00, 0x80,0xff,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xf8,0xff,0xff, 0xff,0xff,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xf8,0xff,0xff,0xff,0xff, 0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x03, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0xc0,0xff,0xff,0xff,0x03,0x00,0x00,0xe0,0xff,0x7f,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0xfc,0xff,0xff,0x00,0x00,0x00,0x00,0x00,0xe0,0xff,0x07,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xe0,0xff, 0x7f,0xfe,0x00,0x00,0x00,0x00,0x00,0x00,0xfc,0x7f,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfe,0xff,0x01,0xfe, 0x01,0x00,0x00,0x00,0x00,0x00,0xc0,0xff,0x03,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfe,0xff,0x01,0xfe,0x01,0x00, 0x00,0x00,0x00,0x00,0xc0,0xff,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0xf0,0xff,0x07,0x00,0xce,0x07,0x00,0x00,0x00, 0x00,0x00,0x00,0xfe,0x1f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0xfe,0x7f,0x00,0x00,0x87,0x1f,0x00,0x00,0x00,0x00,0x00, 0x00,0xc0,0xff,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0xe0,0xff,0x07,0x00,0x80,0x03,0x3e,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0xfe,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfc, 0x3f,0x00,0x00,0x80,0x03,0xf8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xe0,0x3f, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfc,0x3f,0x00, 0x00,0x80,0x03,0xf8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xe0,0x3f,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xff,0x07,0x00,0x00,0xc0, 0x01,0xe0,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0x01,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xf0,0xff,0x7f,0x00,0x00,0xc0,0xfb,0xff, 0x0f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xf0,0x0f,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0xfe,0xff,0xff,0x07,0x00,0xc0,0xff,0xff,0x3f,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xff,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x80,0xff,0xc0,0xff,0x7f,0x00,0xe0,0xff,0xff,0x7f,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0xfe,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x80,0xff,0xc0,0xff,0x7f,0x00,0xe0,0xff,0xff,0x7f,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0xfe,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc0,0x1f, 0x00,0xf8,0xff,0x0f,0xf0,0x0f,0xc0,0xff,0x01,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0xf0,0x0f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xe0,0x0f,0x00,0x00, 0xff,0x7f,0xf0,0x01,0x00,0xf8,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc0, 0x3f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xf0,0x01,0x00,0x00,0x80,0xff, 0x7b,0x00,0x00,0xe0,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfe,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xf8,0x00,0x00,0x00,0x00,0xfc,0x3f,0x00, 0x00,0x80,0x1f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xf0,0x03,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0xf8,0x00,0x00,0x00,0x00,0xfc,0x3f,0x00,0x00,0x80, 0x1f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xf0,0x03,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x3c,0x00,0x00,0x00,0x00,0xe0,0x7f,0x00,0x00,0x00,0x7e,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xe0,0x0f,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x3e,0x00,0x00,0x00,0x00,0x00,0xff,0x03,0x00,0x00,0x70,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x80,0x3f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x0f, 0x00,0x00,0x00,0x00,0x00,0xf0,0x1f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0xfc,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc0,0x0f,0x00,0x00, 0x00,0x00,0x00,0x00,0xfe,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0xf0,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc0,0x07,0x00,0x00,0x00,0x00, 0x00,0x00,0xf8,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0xe0,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc0,0x07,0x00,0x00,0x00,0x00,0x00,0x00, 0xf8,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xe0,0x07, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0xe0,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0xe0,0x3f, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x0f,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0xf0,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xff,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3f,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0xf8,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfc,0x07,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7c,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xf8, 0x00,0x00,0x00,0xfe,0x03,0x00,0x00,0x00,0xf0,0x0f,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0xf8,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xf8,0x00,0x00, 0x00,0xfe,0x03,0x00,0x00,0x00,0xf0,0x0f,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0xf8,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfc,0x00,0x00,0xf0,0xff, 0x1f,0x00,0x00,0x00,0x80,0x7f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0xf0,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3f,0x00,0x00,0xfc,0xff,0x7f,0x00, 0x00,0x00,0x00,0xfe,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0xc0,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x80,0x1f,0x00,0x00,0xff,0x47,0x7f,0x00,0x00,0x00, 0x00,0xf8,0x0f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x0f, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0xf0,0x07,0x80,0xff,0xff,0x3f,0x7c,0x00,0x00,0x00,0x00,0xc0, 0xff,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3e,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0xf0,0x07,0x80,0xff,0xff,0x3f,0x7c,0x00,0x00,0x00,0x00,0xc0,0xff,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3e,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfc, 0x03,0xc0,0xff,0xfe,0xff,0x7d,0x00,0x00,0x00,0x00,0x80,0xff,0x01,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7c,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc0,0xff,0x00,0x40, 0x00,0x00,0xfe,0x7f,0x00,0x00,0x00,0x00,0x80,0xff,0x07,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0xf0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xf0,0x3f,0x00,0x00,0x80,0x03, 0xf8,0x3f,0x00,0x00,0x00,0x00,0x80,0xe7,0x1f,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0xf0,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfe,0x0f,0x00,0x00,0xf0,0xff,0xff,0x1f, 0x00,0x00,0x00,0x00,0x80,0xc7,0x7f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0xe0,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0xfe,0x0f,0x00,0x00,0xf0,0xff,0xff,0x1f,0x00,0x00, 0x00,0x00,0x80,0xc7,0x7f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0xe0,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0xc0,0xff,0x03,0x00,0x00,0xf0,0xff,0xff,0x0f,0x00,0x00,0x00,0x00, 0xc0,0x0f,0xff,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc0,0x07, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0xf0,0x7f,0x00,0x00,0x00,0xc0,0xff,0xff,0x01,0x00,0x00,0x00,0x00,0xc0,0x0f, 0xfc,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x0f,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0x0f, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc0,0x0f,0xf0,0x0f, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1f,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xff,0x01,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xe0,0x1f,0x80,0x3f,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xf8,0x0f,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xf0,0x1c,0x00,0xfe,0x03,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x78,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0xf8,0x0f,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0xf0,0x1c,0x00,0xfe,0x03,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x78,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0xfe,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x70,0x1c,0x00,0xf0,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0xf0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x3f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x70,0x38,0x00,0xc0,0x1f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0xe0,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80, 0x0f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x70, 0x78,0x00,0x00,0x7f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc0,0x03, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc0,0x03,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x70,0x70,0x00, 0x00,0xfc,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc0,0x07,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc0,0x03,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x70,0x70,0x00,0x00,0xfc, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc0,0x07,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc0,0x01,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x38,0x70,0x00,0x00,0xfe,0x03,0xfe, 0x7f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0xe0,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x38,0xf0,0x00,0x00,0xfe,0x0f,0xff,0xff,0x01, 0x00,0x00,0x00,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0xe0,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x18,0xe0,0x00,0x80,0x9f,0xff,0x3f,0xfe,0x03,0x00,0x00, 0x00,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0xe0,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x1c,0xe0,0x00,0x80,0x0f,0xff,0x07,0xc0,0x0f,0x00,0x00,0x00,0x00, 0x00,0x00,0x1e,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0xe0,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x1c,0xe0,0x00,0x80,0x0f,0xff,0x07,0xc0,0x0f,0x00,0x00,0x00,0x00,0x00,0x00, 0x1e,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc0,0xf1, 0x1f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0e,0xe0, 0x00,0xc0,0x07,0xfc,0x01,0x00,0x1f,0x00,0x00,0x00,0x00,0x00,0x00,0x3e,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc0,0xe1,0xff,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0e,0xe0,0x01,0xe0, 0x03,0x60,0x00,0x00,0x38,0x00,0x00,0x00,0x00,0x00,0x00,0x3c,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc0,0xc3,0xff,0x01,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0xc0,0x01,0xf0,0x01,0x00, 0xe0,0x03,0xf0,0x00,0x00,0x00,0x00,0x00,0x00,0x38,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x07,0xf0,0x03,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0xc0,0x03,0xf8,0x00,0x00,0xf8,0x1f, 0xe0,0x00,0x00,0x00,0x00,0x00,0x00,0x38,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x80,0x07,0xf0,0x03,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x07,0xc0,0x03,0xf8,0x00,0x00,0xf8,0x1f,0xe0,0x00, 0x00,0x00,0x00,0x00,0x00,0x38,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x80,0x0f,0xc0,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x07,0x80,0x03,0x78,0x00,0x00,0xf8,0x7f,0xe0,0x01,0x00,0x00, 0x00,0x00,0x00,0x78,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x0f,0x80,0x0f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x80,0x03,0x80,0x03,0x3e,0x00,0x00,0x78,0x7e,0xc0,0x03,0x00,0x00,0x00,0x00, 0x00,0x78,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x1e,0x1c,0x0f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xf3, 0x9f,0x03,0x1f,0x00,0x00,0x00,0xf0,0x80,0x03,0x00,0x00,0x00,0x00,0x00,0x70, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1e,0xfe, 0x0f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc0,0xff,0xff,0x07, 0x0f,0x00,0x00,0x00,0xe0,0x00,0x07,0x00,0x00,0x00,0x00,0x00,0x70,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1e,0xfe,0x0f,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc0,0xff,0xff,0x07,0x0f,0x00, 0x00,0x00,0xe0,0x00,0x07,0x00,0x00,0x00,0x00,0x00,0x70,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7c,0xfc,0x0f,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc0,0xff,0xff,0x87,0x07,0x00,0x00,0x00, 0xe0,0x00,0x07,0x00,0x00,0x00,0x00,0x00,0x70,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7c,0xf8,0x0f,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0xc0,0x3f,0xf4,0xc7,0x07,0x00,0x00,0x00,0xe0,0x00, 0x07,0x00,0x00,0x00,0x00,0x00,0x70,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0xf0,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0xe0,0x03,0x80,0xe7,0x01,0x00,0x00,0x00,0xe0,0x00,0x07,0x00, 0x00,0x00,0x00,0x00,0xe0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0xf0,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0xe0,0x00,0x00,0xff,0x01,0x00,0x00,0x00,0xe0,0x80,0x07,0x00,0x00,0x00, 0x00,0x00,0xe0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0xe0,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0xff,0x00,0x00,0x00,0x00,0xf8,0x80,0x03,0x00,0x00,0x00,0x00,0x00, 0xe0,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xe0, 0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0xff,0x00,0x00,0x00,0x00,0xf8,0x80,0x03,0x00,0x00,0x00,0x00,0x00,0xe0,0x01, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x07,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7e,0x00, 0x00,0x00,0x00,0x7c,0xc0,0x01,0x00,0x00,0x00,0x00,0x00,0xe0,0x01,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1f,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3e,0x00,0x80,0x07, 0xe0,0x3f,0xe0,0x01,0x00,0x00,0x00,0x00,0x00,0xc0,0x01,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1f,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1e,0x00,0xc0,0xff,0xff,0x0f, 0xe0,0x00,0x00,0x00,0x00,0x00,0x00,0xc0,0x01,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1e,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1f,0x00,0xe0,0xff,0xff,0x03,0xe0,0x00, 0x00,0x00,0x00,0x00,0x00,0xc0,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x1e,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x1f,0x00,0xe0,0xff,0xff,0x03,0xe0,0x00,0x00,0x00, 0x00,0x00,0x00,0xc0,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0xf0,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, 0xff,0x3f,0x00,0x1e,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x80,0x07,0x00,0x80,0xff,0x7f,0x00,0xf8,0x01,0x00,0x00,0x00,0x00, 0x00,0xc0,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0xf0,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, 0x03,0x1e,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0xc0,0x07,0x00,0x00,0x00,0x00,0x00,0xfc,0x07,0x00,0x00,0x00,0x00,0x00,0xc0, 0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xe0,0xff, 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x07,0x1e, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xe0,0x03, 0x00,0x00,0x00,0x00,0x00,0xfe,0x0f,0x00,0x00,0x00,0x00,0x00,0xc0,0x01,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xff,0xff,0xff, 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x0f,0x0f,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xf0,0x01,0x00,0x00, 0x00,0x00,0x80,0xcf,0x3f,0x00,0x00,0xfe,0x01,0x00,0xc0,0x01,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xff,0xff,0xff,0xff,0xff, 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x0f,0x0f,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xf0,0x01,0x00,0x00,0x00,0x00, 0x80,0xcf,0x3f,0x00,0x00,0xfe,0x01,0x00,0xc0,0x01,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0xff,0xff,0xff,0xff,0xff, 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x07,0x0f,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xf0,0x00,0x00,0x00,0x00,0x00,0xe0,0xe7, 0xff,0x00,0x00,0xfe,0x0f,0x00,0xc0,0xe1,0xff,0xff,0xff,0xff,0xff,0xff,0xff, 0xff,0xff,0xff,0xff,0x03,0x00,0xfc,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, 0xff,0xff,0xff,0xff,0xff,0x03,0x0f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x7c,0x00,0x00,0x00,0x00,0xf0,0xff,0xf9,0xff,0x01, 0x00,0xe0,0x1f,0x00,0xc0,0xe1,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, 0xff,0xff,0x03,0x00,0xf8,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, 0xff,0xff,0xff,0x03,0x0f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x7e,0x00,0x00,0x00,0xc0,0xff,0x7f,0xfe,0xe1,0x07,0x00,0xc0, 0xff,0x00,0xc0,0xe1,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, 0x01,0x00,0xe0,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, 0xff,0x03,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x1e,0x00,0x00,0x00,0xfc,0xff,0x1f,0xff,0x81,0x0f,0x00,0x80,0xf1,0x03, 0xc0,0xe1,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0x00,0x00, 0xe0,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x03, 0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1e, 0x00,0x00,0x00,0xfc,0xff,0x1f,0xff,0x81,0x0f,0x00,0x80,0xf1,0x03,0xc0,0xe1, 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0x00,0x00,0xc0,0xff, 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x81,0x0f,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1f,0x00,0x00, 0x00,0xff,0x3f,0x80,0xff,0x00,0x1f,0x00,0x80,0xc1,0x07,0xc0,0xe1,0xff,0xff, 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x3f,0x00,0x00,0x00,0xff,0xff,0xff, 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xc1,0xff,0x3f,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x0f,0x00,0x03,0xc0,0x3f, 0x00,0xe0,0x7f,0x00,0x7e,0x00,0x80,0x01,0x1f,0xe0,0xe1,0xff,0xff,0xff,0xff, 0xff,0xff,0xff,0xff,0xff,0xff,0x0f,0x00,0x00,0x00,0xfc,0xff,0xff,0xff,0xff, 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xe0,0xff,0xff,0x03,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x0f,0x80,0x07,0xf0,0x07,0x00,0xf0, 0x3f,0x00,0xf8,0x00,0x80,0x01,0x3c,0xe0,0xe1,0xff,0xff,0xff,0xff,0xff,0xff, 0xff,0xff,0xff,0xff,0x03,0x00,0x00,0x00,0xf8,0xff,0xff,0xff,0xff,0xff,0xff, 0xff,0xff,0xff,0xff,0xff,0xff,0xe0,0xff,0xff,0x7f,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0xc0,0x03,0x80,0xff,0xff,0x01,0x00,0xfc,0x1f,0x00, 0xf0,0x01,0xc0,0x01,0x38,0xe0,0xe0,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, 0xff,0xff,0x00,0x00,0x00,0x00,0xc0,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, 0xff,0xff,0xff,0x7f,0xf0,0x00,0xf8,0xff,0x07,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0xe0,0x03,0x00,0xfe,0x1f,0x00,0x80,0xbf,0x07,0x00,0x80,0x07, 0xc0,0x01,0xe0,0xf1,0xe0,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x1f, 0x00,0x00,0x00,0x00,0xc0,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, 0xff,0x7f,0xf0,0x00,0xf8,0xff,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0xe0,0x03,0x00,0xfe,0x1f,0x00,0x80,0xbf,0x07,0x00,0x80,0x07,0xc0,0x01, 0xe0,0xf1,0xe0,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x1f,0x00,0x00, 0x00,0x00,0x80,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f, 0xf0,0x00,0x00,0xfe,0x7f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xf0, 0x01,0x00,0xf8,0x03,0x00,0xc0,0xcf,0x03,0x00,0x80,0x1f,0xf0,0x01,0xe0,0x71, 0xe0,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x0f,0x00,0x00,0x00,0x00, 0x00,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0xf0,0x00, 0x00,0xe0,0xff,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xf8,0x00,0x00, 0x00,0x00,0x00,0xe0,0xe7,0x03,0x00,0x00,0x7e,0xff,0x00,0xc0,0x73,0xf0,0xff, 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x03,0x00,0x00,0x00,0x00,0x00,0xfc, 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x3f,0xf0,0x00,0x00,0x00, 0xfc,0x1f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x78,0x00,0x00,0x00,0x00, 0x00,0xf8,0xf3,0x00,0x00,0x00,0xfc,0x7f,0x00,0x00,0x7f,0xf0,0xff,0xff,0xff, 0xff,0xff,0xff,0xff,0xff,0xff,0x00,0x00,0x00,0x00,0x00,0x00,0xf0,0xff,0xff, 0xff,0x1f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xf0,0x00,0x00,0x00,0xe0,0xff, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3c,0x00,0x00,0x00,0x00,0x00,0x7c, 0xf8,0x00,0x00,0x00,0xf8,0xff,0xff,0xff,0x7f,0xf0,0xff,0xff,0xff,0xff,0xff, 0xff,0xff,0xff,0x7f,0x00,0x00,0x00,0x00,0x00,0x00,0xf0,0xff,0xff,0xff,0x1f, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xf0,0x00,0x00,0x00,0xe0,0xff,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x3c,0x00,0x00,0x00,0x00,0x00,0x7c,0xf8,0x00, 0x00,0x00,0xf8,0xff,0xff,0xff,0x7f,0xf0,0xff,0xff,0xff,0xff,0xff,0xff,0xff, 0xff,0x7f,0x00,0x00,0x00,0x00,0x00,0x00,0xe0,0xff,0xff,0xff,0x3f,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x70,0x00,0x00,0x00,0x80,0xff,0x0f,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x3e,0x00,0x00,0x00,0x00,0x00,0x7f,0x7c,0x00,0x00,0x00, 0xe0,0xff,0xff,0xff,0x7f,0xf0,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x1f, 0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xff,0xff,0xff,0xff,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x78,0x00,0x00,0x00,0x00,0xfe,0x7f,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x1e,0x00,0x00,0x00,0x00,0xc0,0x1f,0x3e,0x00,0x00,0x00,0xc0,0xff, 0xff,0xff,0x7f,0xf0,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x0f,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0xff,0xff,0xff,0xff,0x01,0x00,0x00,0x00,0x00,0x00, 0x00,0x7c,0x00,0x00,0x00,0x00,0xf0,0xff,0x03,0x00,0x00,0x00,0x00,0x00,0x00, 0x0f,0x00,0x00,0x00,0x00,0xe0,0x07,0x1f,0x00,0x00,0x00,0x80,0x0f,0x00,0x00, 0x3c,0xf0,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x03,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0xfc,0xff,0xff,0xff,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x3c, 0x00,0x00,0x00,0x00,0x00,0xfe,0x0f,0x00,0x00,0x00,0x00,0x00,0x00,0x0f,0x00, 0x00,0x00,0x00,0xfc,0x83,0x0f,0x00,0x00,0x00,0x00,0x0f,0x00,0x00,0x38,0xf0, 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x01,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0xfc,0xff,0xff,0xff,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x3c,0x00,0x00, 0x00,0x00,0x00,0xfe,0x0f,0x00,0x00,0x00,0x00,0x00,0x00,0x0f,0x00,0x00,0x00, 0x00,0xfc,0x83,0x0f,0x00,0x00,0x00,0x00,0x0f,0x00,0x00,0x38,0xf0,0xff,0xff, 0xff,0xff,0xff,0xff,0xff,0xff,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xf0, 0xff,0xff,0xff,0x0f,0x00,0x00,0x00,0x00,0x00,0x00,0x1e,0x00,0x00,0x00,0xf8, 0xff,0xff,0x3f,0x00,0x00,0x00,0x00,0x00,0x80,0x07,0x00,0x00,0x00,0x00,0xff, 0x80,0x07,0x00,0x00,0x00,0x00,0x3e,0x00,0x00,0x38,0x00,0x00,0x00,0x00,0x00, 0xff,0xff,0xff,0x7f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc0,0xff,0xff, 0xff,0x7f,0x00,0x00,0x00,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,0xff,0xff,0xff, 0xff,0x03,0x00,0x00,0x00,0x00,0xe0,0x01,0x00,0x00,0x00,0xe0,0x1f,0xe0,0x03, 0x00,0x00,0x00,0x00,0x78,0x00,0x00,0x1c,0x00,0x00,0x00,0x00,0xe0,0xff,0xff, 0xff,0x0f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0xff,0xff, 0x00,0x00,0x00,0x00,0x00,0x80,0x0f,0x00,0x00,0x00,0xff,0x3f,0xe0,0xff,0x0f, 0x00,0x00,0x00,0x00,0xf0,0x01,0x00,0x00,0x00,0xf8,0x07,0xf0,0x01,0x00,0x00, 0x00,0x00,0xf0,0x01,0x00,0x1e,0x00,0x00,0x00,0x00,0xf0,0xff,0xff,0xff,0x07, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfe,0xff,0xff,0xff,0x03,0x00, 0x00,0x00,0x00,0x80,0x07,0x00,0x00,0x00,0xe0,0xff,0x01,0xfe,0x3f,0x00,0x00, 0x00,0x00,0xf0,0x00,0x00,0x00,0x00,0xfe,0x01,0xf8,0x00,0x00,0x00,0x00,0x00, 0xc0,0x03,0x00,0x0e,0x00,0x00,0x00,0x00,0xfc,0xff,0xff,0xff,0x01,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfe,0xff,0xff,0xff,0x03,0x00,0x00,0x00, 0x00,0x80,0x07,0x00,0x00,0x00,0xe0,0xff,0x01,0xfe,0x3f,0x00,0x00,0x00,0x00, 0xf0,0x00,0x00,0x00,0x00,0xfe,0x01,0xf8,0x00,0x00,0x00,0x00,0x00,0xc0,0x03, 0x00,0x0e,0x00,0x00,0x00,0x00,0xfc,0xff,0xff,0xff,0x01,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0xf8,0xff,0xff,0xff,0x07,0x00,0x00,0x00,0x00,0x80, 0x07,0x00,0x00,0x00,0x00,0xf8,0x07,0xc0,0xff,0x01,0x00,0x00,0x00,0xf8,0x00, 0x00,0x00,0x80,0x7f,0x00,0x78,0x00,0x00,0x00,0x00,0x00,0xc0,0x0f,0x00,0x0e, 0x00,0x00,0x00,0x00,0xff,0xff,0xff,0xff,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0xf0,0xff,0xff,0xff,0x1f,0x00,0x00,0x00,0x00,0xc0,0xe3,0xff, 0xff,0x00,0x00,0xc0,0x1f,0x80,0xff,0x03,0x00,0x00,0x00,0x3c,0x00,0x00,0x00, 0xe0,0x1f,0x00,0x3e,0x00,0x00,0x00,0x00,0x00,0x00,0x0f,0x00,0x07,0x00,0x00, 0x00,0x80,0xff,0xff,0xff,0x1f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0xc0,0xff,0xff,0xff,0x7f,0x00,0x00,0x00,0x00,0xc0,0xfb,0xff,0xff,0x0f, 0x00,0x00,0x3e,0x80,0xf3,0x1f,0x00,0x00,0x00,0x3e,0x00,0x00,0x00,0xf8,0x07, 0x00,0x1e,0x00,0x00,0x00,0x00,0x00,0x00,0x1e,0x00,0x07,0x00,0x00,0x00,0xe0, 0xff,0xff,0xff,0x0f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0xff,0xff,0xff,0xff,0x00,0x00,0x00,0x00,0xc0,0xff,0xff,0xff,0xff,0x00,0x00, 0x7c,0xc0,0x81,0xff,0x00,0x00,0x00,0x1f,0x00,0x00,0x00,0xff,0x01,0x00,0x0f, 0x00,0x00,0x00,0x00,0x00,0x00,0x7c,0x80,0x07,0x00,0x00,0x00,0xf0,0xff,0xff, 0xff,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfc,0xff, 0xff,0xff,0x03,0x00,0x00,0x00,0xc0,0x7f,0x00,0xe0,0xff,0x3f,0x00,0xf0,0xc0, 0x01,0xfe,0x03,0x00,0x00,0x0f,0x00,0x00,0xc0,0x7f,0x00,0xc0,0x07,0x00,0x00, 0x00,0x00,0x00,0x00,0xf0,0xc0,0x03,0x00,0x00,0x00,0xfc,0xff,0xff,0xff,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfc,0xff,0xff,0xff, 0x03,0x00,0x00,0x00,0xc0,0x7f,0x00,0xe0,0xff,0x3f,0x00,0xf0,0xc0,0x01,0xfe, 0x03,0x00,0x00,0x0f,0x00,0x00,0xc0,0x7f,0x00,0xc0,0x07,0x00,0x00,0x00,0x00, 0x00,0x00,0xf0,0xc0,0x03,0x00,0x00,0x00,0xfc,0xff,0xff,0xff,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xf8,0xff,0xff,0xff,0x07,0x00, 0x00,0x00,0xc0,0x0f,0x00,0x00,0xfc,0xff,0x03,0xc0,0xe3,0x01,0xf0,0x07,0x00, 0x80,0x07,0x00,0x00,0xf0,0x1f,0x00,0xc0,0x07,0x00,0x00,0x00,0x00,0x00,0x00, 0xf0,0xc1,0x01,0x00,0x00,0x00,0xff,0xff,0xff,0x7f,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xe0,0xff,0xff,0xff,0x1f,0x00,0x00,0x00, 0xc0,0x07,0x00,0x00,0x00,0xfc,0xff,0x00,0xf7,0x00,0x00,0x3f,0x00,0xc0,0x03, 0x00,0x00,0xff,0x00,0x00,0xe0,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0xc0,0xe3, 0x01,0x00,0x00,0xc0,0xff,0xff,0xff,0x0f,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x80,0xff,0xff,0xff,0xff,0x00,0x00,0x00,0xc0,0x01, 0x00,0x00,0x00,0xc0,0xff,0x07,0x7f,0x00,0x00,0xfc,0x00,0xe0,0x03,0x00,0xe0, 0x3f,0x00,0x00,0xf0,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xff,0x00,0x00, 0x00,0xf0,0xff,0xff,0xff,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0xfe,0xff,0xff,0xff,0x00,0x00,0x00,0xc0,0x01,0x00,0x00, 0x00,0x00,0xfe,0x7f,0x7f,0x00,0x00,0xf8,0x01,0xe0,0x01,0x00,0xfc,0x07,0x00, 0x00,0xf8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0x00,0x00,0x00,0xfc, 0xff,0xff,0xff,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0xfe,0xff,0xff,0xff,0x00,0x00,0x00,0xc0,0x01,0x00,0x00,0x00,0x00, 0xfe,0x7f,0x7f,0x00,0x00,0xf8,0x01,0xe0,0x01,0x00,0xfc,0x07,0x00,0x00,0xf8, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0x00,0x00,0x00,0xfc,0xff,0xff, 0xff,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0xfc,0xff,0xff,0xff,0x03,0x00,0x00,0xc0,0x03,0x00,0x00,0x00,0x00,0xe0,0xff, 0x3f,0x00,0x00,0xf0,0x07,0xf0,0x00,0x00,0xff,0x03,0x00,0x00,0x7c,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x7e,0x00,0x00,0x00,0xff,0xff,0xff,0x7f,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xf0,0xff, 0xff,0xff,0x0f,0x00,0x00,0xc0,0x03,0x00,0x00,0x00,0x00,0x00,0xfe,0x3f,0x00, 0x00,0xc0,0x3f,0xf8,0x00,0xf8,0x3f,0x00,0x00,0x00,0x3c,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x3c,0x00,0x00,0x80,0xff,0xff,0xff,0x3f,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc0,0xff,0xff,0xff, 0x3f,0x00,0x00,0xc0,0x03,0x00,0x00,0x00,0x00,0x00,0xf0,0xff,0x0f,0x00,0x00, 0x7f,0x7c,0x00,0xfe,0x07,0x00,0x00,0x00,0x1e,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x1e,0x00,0x00,0xe0,0xff,0xff,0xff,0x0f,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xff,0xff,0xff,0x7f,0x00, 0x00,0x80,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0x7f,0x00,0x00,0xfc,0x3e, 0xe0,0x7f,0x00,0x00,0x00,0x00,0x1f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x1f,0x00,0x00,0xf8,0xff,0xff,0xff,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xff,0xff,0xff,0x7f,0x00,0x00,0x80, 0x07,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0x7f,0x00,0x00,0xfc,0x3e,0xe0,0x7f, 0x00,0x00,0x00,0x00,0x1f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1f,0x00, 0x00,0xf8,0xff,0xff,0xff,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0xfe,0xff,0xff,0xff,0x01,0x00,0x80,0x0f,0x00, 0x00,0x00,0x00,0x00,0x00,0xf0,0xff,0x1f,0x00,0xf0,0x1f,0xfe,0x0f,0x00,0x00, 0x00,0x80,0x0f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0x00,0x00,0xfc, 0xff,0xff,0xff,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0xf8,0xff,0xff,0xff,0x03,0x00,0x00,0x0f,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0xfc,0xff,0x3f,0xc0,0xff,0xff,0x00,0x00,0x00,0x00,0xc0, 0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x03,0x00,0x00,0xff,0xff,0xff, 0x3f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0xf0,0xff,0xff,0xff,0x0f,0x00,0x00,0x1e,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0xfe,0xff,0xff,0xff,0x1f,0x00,0x00,0x00,0x00,0xe0,0x03,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0xe0,0x03,0x00,0xc0,0xff,0xff,0xff,0x1f,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x80,0xff,0xff,0xff,0x7f,0x00,0x00,0x3c,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0xfc,0xff,0xff,0x03,0x00,0x00,0x00,0x00,0xf0,0x01,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0xf8,0x00,0x00,0xf8,0xff,0xff,0xff,0x03,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xff, 0xff,0xff,0x7f,0x00,0x00,0x3c,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0xfc,0xff,0xff,0x03,0x00,0x00,0x00,0x00,0xf0,0x01,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0xf8,0x00,0x00,0xf8,0xff,0xff,0xff,0x03,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfe,0xff,0xff, 0xff,0x00,0x00,0x78,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xf8, 0xff,0x1f,0x00,0x00,0x00,0x00,0xf0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x7c,0x00,0x00,0xfc,0xff,0xff,0xff,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfc,0xff,0xff,0xff,0x03, 0x00,0xf0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfe,0x7f, 0x00,0x00,0x00,0x00,0x7c,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3e,0x00, 0x00,0xff,0xff,0xff,0x7f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xf0,0xff,0xff,0xff,0x07,0x00,0xe0, 0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7c,0xfe,0x00,0x00, 0x00,0x00,0x3c,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x1f,0x00,0xc0,0xff, 0xff,0xff,0x1f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0xe0,0xff,0xff,0xff,0x1f,0x00,0xc0,0x03,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x78,0xf8,0x03,0x00,0x00,0x00, 0x1e,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc0,0x07,0x00,0xe0,0xff,0xff,0xff, 0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x80,0xff,0xff,0xff,0x7f,0x00,0x80,0x07,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x70,0xe0,0x0f,0x00,0x00,0x00,0x0f,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0xf0,0x03,0x00,0xf8,0xff,0xff,0xff,0x03,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x80,0xff,0xff,0xff,0x7f,0x00,0x80,0x07,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x70,0xe0,0x0f,0x00,0x00,0x00,0x0f,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0xf0,0x03,0x00,0xf8,0xff,0xff,0xff,0x03,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0xff,0xff,0xff,0xff,0x00,0x80,0x0f,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x70,0x00,0x3f,0x00,0x00,0x80,0x0f,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0xf8,0x01,0x00,0xfe,0xff,0xff,0x7f,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfc, 0xff,0xff,0xff,0x03,0x00,0x1f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x70,0x00,0xfe,0x00,0x00,0xc0,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x7e,0x00,0x80,0xff,0xff,0xff,0x3f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xf0,0xff,0xff, 0xff,0x0f,0x00,0x3e,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x70, 0x00,0xf8,0x01,0x00,0xc0,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3e,0x00, 0xc0,0xff,0xff,0xff,0x0f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc0,0xff,0xff,0xff,0x3f, 0x00,0xf8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x70,0x00,0x80, 0x0f,0x00,0xf0,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0xc0,0x0f,0x00,0xf8,0xff, 0xff,0xff,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc0,0xff,0xff,0xff,0x3f,0x00,0xf8, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x70,0x00,0x80,0x0f,0x00, 0xf0,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0xc0,0x0f,0x00,0xf8,0xff,0xff,0xff, 0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0xff,0xff,0x00,0xe0,0x01,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x70,0x00,0x00,0x3e,0x00,0xf0,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0xe0,0x07,0x00,0xfe,0xff,0xff,0xff,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0xfc,0xff,0xff,0xff,0x03,0xc0,0x03,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x70,0x00,0x00,0xfc,0x00,0x78,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0xf8,0x01,0x80,0xff,0xff,0xff,0x3f,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0xf0,0xff,0xff,0xff,0x0f,0xc0,0x07,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x78,0x00,0x00,0xe0,0x03,0x3c,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x7c,0x00,0xe0,0xff,0xff,0xff,0x0f,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0xc0,0xff,0xff,0xff,0x1f,0x00,0x0f,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x7c,0x00,0x00,0xc0,0x1f,0x1e,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x3e,0x00,0xf0,0xff,0xff,0xff,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc0, 0xff,0xff,0xff,0x1f,0x00,0x0f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x7c,0x00,0x00,0xc0,0x1f,0x1e,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3e,0x00, 0xf0,0xff,0xff,0xff,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xff,0xff, 0xff,0x7f,0x00,0x1e,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7c,0x00, 0x00,0x00,0x3f,0x0f,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x0f,0x00,0xfc,0xff, 0xff,0xff,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfe,0xff,0xff,0xff, 0x01,0x7c,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3c,0x00,0x00,0x00, 0xfc,0x0f,0x00,0x00,0x00,0x00,0x00,0x00,0xe0,0x07,0x00,0xff,0xff,0xff,0x3f, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfc,0xff,0xff,0xff,0x03,0x78, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3c,0x00,0x00,0x00,0xf8,0x07, 0x00,0x00,0x00,0x00,0x00,0x00,0xf0,0x01,0xc0,0xff,0xff,0xff,0x1f,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xf0,0xff,0xff,0xff,0x07,0xf0,0x01,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0xfc,0x03,0x00,0x00, 0x00,0x00,0x00,0x00,0xf8,0x00,0xf0,0xff,0xff,0xff,0x07,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0xf0,0xff,0xff,0xff,0x07,0xf0,0x01,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0xfc,0x03,0x00,0x00,0x00,0x00, 0x00,0x00,0xf8,0x00,0xf0,0xff,0xff,0xff,0x07,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0xe0,0xff,0xff,0xff,0x1f,0xe0,0x03,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0xfc,0x01,0x00,0x00,0x00,0x00,0x00,0x00, 0x7e,0x00,0xf8,0xff,0xff,0xff,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0xff,0xff,0xff,0xff,0x80,0x0f,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x1e,0x00,0x00,0x00,0xff,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x0f,0x00, 0xfe,0xff,0xff,0x3f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0xfc,0xff,0xff,0xff,0x01,0x1f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0e, 0x00,0x00,0x80,0x7f,0x00,0x00,0x00,0x00,0x00,0x00,0xc0,0x07,0x80,0xff,0xff, 0xff,0x0f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xf8,0xff, 0xff,0xff,0x07,0x3e,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0e,0x00,0x00, 0xc0,0x3f,0x00,0x00,0x00,0x00,0x00,0x00,0xf0,0x01,0xe0,0xff,0xff,0xff,0x07, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xe0,0xff,0xff,0xff, 0x0f,0x7c,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0f,0x00,0x00,0xe0,0x3f, 0x00,0x00,0x00,0x00,0x00,0x00,0xf8,0x01,0xf8,0xff,0xff,0xff,0x01,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xe0,0xff,0xff,0xff,0x0f,0x7c, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0f,0x00,0x00,0xe0,0x3f,0x00,0x00, 0x00,0x00,0x00,0x00,0xf8,0x01,0xf8,0xff,0xff,0xff,0x01,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc0,0xff,0xff,0xff,0x3f,0xf0,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x0f,0x00,0x00,0xf0,0x1f,0x00,0x00,0x00,0x00, 0x00,0x00,0x7e,0x00,0xfc,0xff,0xff,0xff,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0xfe,0xff,0xff,0x7f,0xe0,0x01,0x00,0x00,0x00, 0x00,0x00,0x00,0x80,0x07,0x00,0x00,0xfc,0x1f,0x00,0x00,0x00,0x00,0x00,0x00, 0x3e,0x00,0xff,0xff,0xff,0x3f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0xfc,0xff,0xff,0xff,0xe0,0x03,0x00,0x00,0x00,0x00,0x00, 0x00,0x80,0x07,0x00,0x00,0xfc,0x0f,0x00,0x00,0x00,0x00,0x00,0x00,0x1f,0xc0, 0xff,0xff,0xff,0x1f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0xf0,0xff,0xff,0xff,0xc1,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0xc0, 0x03,0x00,0x00,0xfe,0x07,0x00,0x00,0x00,0x00,0x00,0xc0,0x0f,0xf0,0xff,0xff, 0xff,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0xf0,0xff,0xff,0xff,0xc1,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0xc0,0x03,0x00, 0x00,0xfe,0x07,0x00,0x00,0x00,0x00,0x00,0xc0,0x0f,0xf0,0xff,0xff,0xff,0x07, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xf0,0xff, 0xff,0xff,0x83,0x0f,0x00,0x00,0x00,0x00,0x00,0x00,0xc0,0x01,0x00,0x00,0xff, 0x07,0x00,0x00,0x00,0x00,0x00,0xc0,0x07,0xf8,0xff,0xff,0xff,0x03,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xff,0xff,0xff, 0x0f,0x1e,0x00,0x00,0x00,0x00,0x00,0x00,0xe0,0x01,0x00,0xc0,0xef,0x03,0x00, 0x00,0x00,0x00,0x00,0xe0,0x01,0xff,0xff,0xff,0x7f,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfe,0xff,0xff,0x0f,0x1c, 0x00,0x00,0x00,0x00,0x00,0x00,0xf0,0x00,0x00,0xe0,0xf3,0x01,0x00,0x00,0x00, 0x00,0x00,0xf0,0x80,0xff,0xff,0xff,0x1f,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfc,0xff,0xff,0x1f,0x38,0x00,0x00, 0x00,0x00,0x00,0x00,0x70,0x00,0x00,0xf0,0xf9,0x00,0x00,0x00,0x00,0x00,0x00, 0x78,0xe0,0xff,0xff,0xff,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0xfc,0xff,0xff,0x1f,0x38,0x00,0x00,0x00,0x00, 0x00,0x00,0x70,0x00,0x00,0xf0,0xf9,0x00,0x00,0x00,0x00,0x00,0x00,0x78,0xe0, 0xff,0xff,0xff,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0xf0,0xff,0xff,0x7f,0xf0,0x00,0x00,0x00,0x00,0x00,0x00, 0x78,0x00,0x00,0x78,0x7c,0x00,0x00,0x00,0x00,0x00,0x00,0x3c,0xf0,0xff,0xff, 0xff,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x80,0xff,0xff,0xff,0xe0,0x00,0x00,0x00,0x00,0x00,0x00,0x78,0x00, 0x00,0x7e,0x7c,0x00,0x00,0x00,0x00,0x00,0x00,0x3c,0xf8,0xff,0xff,0xff,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0xff,0xff,0xff,0xe0,0x01,0x00,0x00,0x00,0x00,0x00,0x3c,0x00,0x00,0x3e, 0x3e,0x00,0x00,0x00,0x00,0x00,0x00,0x1f,0xfe,0xff,0xff,0x7f,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfe, 0xff,0xff,0xc1,0x03,0x00,0x00,0x00,0x00,0x00,0x3c,0x00,0x00,0x0f,0x1e,0x00, 0x00,0x00,0x00,0x00,0x00,0x0f,0xfe,0xff,0xff,0x1f,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfe,0xff,0xff, 0xc1,0x03,0x00,0x00,0x00,0x00,0x00,0x3c,0x00,0x00,0x0f,0x1e,0x00,0x00,0x00, 0x00,0x00,0x00,0x0f,0xfe,0xff,0xff,0x1f,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfc,0xff,0xff,0x83,0x07, 0x00,0x00,0x00,0x00,0x00,0x1e,0x00,0xc0,0x07,0x0f,0x00,0x00,0x00,0x00,0x00, 0x80,0x07,0xff,0xff,0xff,0x0f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xf0,0xff,0xff,0x07,0x0f,0x00,0x00, 0x00,0x00,0x00,0x0f,0x00,0xe0,0x83,0x0f,0x00,0x00,0x00,0x00,0x00,0x80,0xc7, 0xff,0xff,0xff,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0xc0,0xff,0xff,0x0f,0x0f,0x00,0x00,0x00,0x00, 0x00,0x07,0x00,0xf0,0x81,0x07,0x00,0x00,0x00,0x00,0x00,0xc0,0xc3,0xff,0xff, 0xff,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x1f,0x1c,0x00,0x00,0x00,0x00,0x80,0x03, 0x00,0x7c,0xc0,0x03,0x00,0x00,0x00,0x00,0x00,0xe0,0xe1,0xff,0xff,0x7f,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0xfe,0xff,0x3f,0x3c,0x00,0x00,0x00,0x00,0xc0,0x03,0x00,0x3f, 0xe0,0x01,0x00,0x00,0x00,0x00,0x00,0xe0,0xe0,0xff,0xff,0x1f,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0xfe,0xff,0x3f,0x3c,0x00,0x00,0x00,0x00,0xc0,0x03,0x00,0x3f,0xe0,0x01, 0x00,0x00,0x00,0x00,0x00,0xe0,0xe0,0xff,0xff,0x1f,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xf8, 0xff,0x3f,0x3c,0x00,0x00,0x00,0x00,0xe0,0x01,0x80,0x1f,0xe0,0x01,0x00,0x00, 0x00,0x00,0x00,0xf0,0xe0,0xff,0xff,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xf8,0xff,0x3f, 0x38,0x00,0x00,0x00,0x00,0xe0,0x00,0xe0,0x07,0xf0,0x00,0x00,0x00,0x00,0x00, 0x00,0x78,0xf8,0xff,0xff,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xf8,0xff,0x3f,0x38,0x00, 0x00,0x00,0x00,0xf0,0x00,0xf0,0x03,0x70,0x00,0x00,0x00,0x00,0x00,0x00,0x78, 0xf8,0xff,0xff,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xf8,0xff,0x3f,0x38,0x00,0x00,0x00, 0x00,0x70,0x00,0xfe,0x00,0x38,0x00,0x00,0x00,0x00,0x00,0x00,0x3c,0xfc,0xff, 0x3f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0xf8,0xff,0x3f,0x38,0x00,0x00,0x00,0x00,0x70, 0x00,0xfe,0x00,0x38,0x00,0x00,0x00,0x00,0x00,0x00,0x3c,0xfc,0xff,0x3f,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0xf8,0xff,0x3f,0x38,0x00,0x00,0x00,0x00,0x38,0x80,0x3f, 0x00,0x3c,0x00,0x00,0x00,0x00,0x00,0x00,0x1c,0xfc,0xff,0x3f,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0xfc,0xff,0x3f,0x38,0x00,0x00,0x00,0x00,0x1c,0xc0,0x0f,0x00,0x1c, 0x00,0x00,0x00,0x00,0x00,0x00,0x1e,0xfc,0xff,0x3f,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0xfc,0xff,0x1f,0x38,0x00,0x00,0x00,0x00,0x1e,0xf0,0x03,0x00,0x1e,0x00,0x00, 0x00,0x00,0x00,0x00,0x1e,0xfc,0xff,0x3f,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfe,0xff, 0x1f,0x38,0x00,0x00,0x00,0x00,0x0f,0x7f,0x00,0x00,0x0f,0x00,0x00,0x00,0x00, 0x00,0x00,0x0f,0xfc,0xff,0x3f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfe,0xff,0x1f,0x38, 0x00,0x00,0x00,0x00,0x0f,0x7f,0x00,0x00,0x0f,0x00,0x00,0x00,0x00,0x00,0x00, 0x0f,0xfc,0xff,0x3f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfe,0xff,0x1f,0x38,0x00,0x00, 0x00,0x00,0xe7,0x3f,0x00,0x00,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x0f,0xfc, 0xff,0x7f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x0f,0x38,0x00,0x00,0x00,0x80, 0xfb,0x0f,0x00,0x80,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0xfc,0xff,0x7f, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x07,0x38,0x00,0x00,0x00,0xc0,0xff,0x01, 0x00,0xc0,0x03,0x00,0x00,0x00,0x00,0x00,0x80,0x07,0xf8,0xff,0xff,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0xff,0xff,0x07,0x38,0x00,0x00,0x00,0xe0,0x3f,0x00,0x00,0xc0, 0x01,0x00,0x00,0x00,0x00,0x00,0xc0,0x03,0xf8,0xff,0xff,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0xff,0xff,0x07,0x38,0x00,0x00,0x00,0xe0,0x3f,0x00,0x00,0xc0,0x01,0x00, 0x00,0x00,0x00,0x00,0xc0,0x03,0xf8,0xff,0xff,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xff, 0xff,0x07,0x38,0x00,0x00,0x00,0xe0,0x0f,0x00,0x00,0xe0,0x00,0x00,0x00,0x00, 0x00,0x00,0xc0,0x03,0xf8,0xff,0xff,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xff,0xff,0x03, 0x38,0x00,0x00,0x00,0xf0,0x03,0x00,0x00,0xf0,0x00,0x00,0x00,0x00,0x00,0x00, 0xe0,0x01,0xf8,0xff,0xff,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc0,0xff,0xff,0x03,0x38,0x00, 0x00,0x00,0x70,0x00,0x00,0x00,0x70,0x00,0x00,0x00,0x00,0x00,0x00,0xe0,0x01, 0xf0,0xff,0xff,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc0,0xff,0xff,0x01,0x38,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x78,0x00,0x00,0x00,0x00,0x00,0x00,0xe0,0x00,0xf0,0xff, 0xff,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0xe0,0xff,0xff,0x00,0x38,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x38,0x00,0x00,0x00,0x00,0x00,0x00,0xf0,0x00,0xf0,0xff,0xff,0x03, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0xe0,0xff,0xff,0x00,0x38,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x38,0x00,0x00,0x00,0x00,0x00,0x00,0xf0,0x00,0xf0,0xff,0xff,0x03,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0xe0,0xff,0xff,0x00,0x38,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3c,0x00, 0x00,0x00,0x00,0x00,0x00,0xf0,0x00,0xe0,0xff,0xff,0x07,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xe0, 0xff,0xff,0x00,0x38,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1e,0x00,0x00,0x00, 0x00,0x00,0x00,0x78,0x00,0xe0,0xff,0xff,0x07,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xf0,0xff,0x7f, 0x00,0x18,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1e,0x00,0x00,0x00,0x00,0x00, 0x00,0x78,0x00,0xc0,0xff,0xff,0x0f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xf0,0xff,0x7f,0x00,0x18, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,0x00,0x00,0x00,0x3c, 0x00,0xc0,0xff,0xff,0x0f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xf0,0xff,0x7f,0x00,0x18,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,0x00,0x00,0x00,0x3c,0x00,0xc0, 0xff,0xff,0x0f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0xf8,0xff,0x7f,0x00,0x1c,0x00,0x00,0x00,0x00, 0x00,0x00,0x80,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x3c,0x00,0x80,0xff,0xff, 0x0f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0xf8,0xff,0x3f,0x00,0x1c,0x00,0x00,0x00,0x00,0x00,0x00, 0x80,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x1e,0x00,0x80,0xff,0xff,0x1f,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0xfc,0xff,0x1f,0x00,0x1c,0x00,0x00,0x00,0x00,0x00,0x00,0xc0,0x03, 0x00,0x00,0x00,0x00,0x00,0x00,0x1e,0x00,0x80,0xff,0xff,0x1f,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0xfc,0xff,0x1f,0x00,0x1c,0x00,0x00,0x00,0x00,0x00,0x00,0xc0,0x03,0x00,0x00, 0x00,0x00,0x00,0x00,0x1f,0x00,0x00,0xff,0xff,0x1f,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfc,0xff, 0x1f,0x00,0x1c,0x00,0x00,0x00,0x00,0x00,0x00,0xc0,0x03,0x00,0x00,0x00,0x00, 0x00,0x00,0x1f,0x00,0x00,0xff,0xff,0x1f,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfe,0xff,0x0f,0x00, 0x1c,0x00,0x00,0x00,0x00,0x00,0x00,0xe0,0x01,0x00,0x00,0x00,0x00,0x00,0x00, 0x0f,0x00,0x00,0xff,0xff,0x3f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfe,0xff,0x0f,0x00,0x1c,0x00, 0x00,0x00,0x00,0x00,0x00,0xe0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0f,0x00, 0x00,0xff,0xff,0x3f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfe,0xff,0x07,0x00,0x1c,0x00,0x00,0x00, 0x00,0x00,0x00,0xf0,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x07,0x00,0x00,0xfe, 0xff,0x3f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x07,0x00,0x1e,0x00,0x00,0x00,0x00,0x00, 0x00,0x70,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x07,0x00,0x00,0xfe,0xff,0x7f, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0xff,0xff,0x07,0x00,0x1e,0x00,0x00,0x00,0x00,0x00,0x00,0x70, 0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x07,0x00,0x00,0xfe,0xff,0x7f,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0xff,0xff,0x07,0x00,0x1e,0x00,0x00,0x00,0x00,0x00,0x00,0x78,0x00,0x00, 0x00,0x00,0x00,0x00,0x80,0x07,0x00,0x00,0xfc,0xff,0x7f,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xff, 0xff,0x03,0x00,0x1e,0x00,0x00,0x00,0x00,0x00,0x00,0x38,0x00,0x00,0x00,0x00, 0x00,0x00,0x80,0x03,0x00,0x00,0xfc,0xff,0xff,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xff,0xff,0x03, 0x00,0x1e,0x00,0x00,0x00,0x00,0x00,0x00,0x3c,0x00,0x00,0x00,0x00,0x00,0x00, 0xc0,0x03,0x00,0x00,0xfc,0xff,0xff,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc0,0xff,0xff,0x03,0x00,0x1e, 0x00,0x00,0x00,0x00,0x00,0x00,0x1e,0x00,0x00,0x00,0x00,0x00,0x00,0xc0,0x03, 0x00,0x00,0xf8,0xff,0xff,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc0,0xff,0xff,0x03,0x00,0x1e,0x00,0x00, 0x00,0x00,0x00,0x00,0x1e,0x00,0x00,0x00,0x00,0x00,0x00,0xc0,0x03,0x00,0x00, 0xf8,0xff,0xff,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0xc0,0xff,0xff,0x01,0x00,0x1e,0x00,0x00,0x00,0x00, 0x00,0x00,0x1e,0x00,0x00,0x00,0x00,0x00,0x00,0xc0,0x03,0x00,0x00,0xf8,0xff, 0xff,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0xe0,0xff,0xff,0x01,0x00,0x1c,0x00,0x00,0x00,0x00,0x00,0x00, 0x0f,0x00,0x00,0x00,0x00,0x00,0x00,0xc0,0x01,0x00,0x00,0xf0,0xff,0xff,0x01, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0xe0,0xff,0xff,0x00,0x00,0x1c,0x00,0x00,0x00,0x00,0x00,0x80,0x07,0x00, 0x00,0x00,0x00,0x00,0x00,0xc0,0x01,0x00,0x00,0xf0,0xff,0xff,0x01,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xe0, 0xff,0xff,0x00,0x00,0x3c,0x00,0x00,0x00,0x00,0x00,0x80,0x07,0x00,0x00,0x00, 0x00,0x00,0x00,0xc0,0x01,0x00,0x00,0xf0,0xff,0xff,0x03,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xf0,0xff,0x7f, 0x00,0x00,0x3c,0x00,0x00,0x00,0x00,0x00,0x80,0x03,0x00,0x00,0x00,0x00,0x00, 0x00,0xc0,0x01,0x00,0x00,0xe0,0xff,0xff,0x03,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xf0,0xff,0x7f,0x00,0x00, 0x3c,0x00,0x00,0x00,0x00,0x00,0x80,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0xc0, 0x01,0x00,0x00,0xe0,0xff,0xff,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xf0,0xff,0x7f,0x00,0x00,0x38,0x00, 0x00,0x00,0x00,0x00,0xc0,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0xc0,0x01,0x00, 0x00,0xe0,0xff,0xff,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0xf8,0xff,0x3f,0x00,0x00,0x38,0x00,0x00,0x00, 0x00,0x00,0xc0,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0xc0,0x01,0x00,0x00,0xe0, 0xff,0xff,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0xf8,0xff,0x3f,0x00,0x00,0x38,0x00,0x00,0x00,0x00,0x00, 0xe0,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0xc0,0x01,0x00,0x00,0xc0,0xff,0xff, 0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0xfc,0xff,0x1f,0x00,0x00,0x38,0x00,0x00,0x00,0x00,0x00,0xe0,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0xc0,0x01,0x00,0x00,0xc0,0xff,0xff,0x07,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0xfc,0xff,0x1f,0x00,0x00,0x38,0x00,0x00,0x00,0x00,0x00,0xe0,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0xc0,0x01,0x00,0x00,0xc0,0xff,0xff,0x07,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfc,0xff, 0x1f,0x00,0x00,0x38,0x00,0x00,0x00,0x00,0x00,0xf0,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0xc0,0x01,0x00,0x00,0x80,0xff,0xff,0x0f,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfc,0xff,0x1f,0x00, 0x00,0x38,0x00,0x00,0x00,0x00,0x00,0x78,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0xc0,0x03,0x00,0x00,0x80,0xff,0xff,0x0f,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfe,0xff,0x0f,0x00,0x00,0x38, 0x00,0x00,0x00,0x00,0x00,0x78,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc0,0x03, 0x00,0x00,0x00,0xff,0xff,0x1f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfe,0xff,0x0f,0x00,0x00,0x3c,0x00,0x00, 0x00,0x00,0x00,0x3c,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x07,0x00,0x00, 0x00,0xff,0xff,0x1f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0xfe,0xff,0x0f,0x00,0x00,0x3c,0x00,0x00,0x00,0x00, 0x00,0x3c,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x07,0x00,0x00,0x00,0xff, 0xff,0x1f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0xff,0x07,0x00,0x00,0xfc,0x3f,0x00,0x00,0x00,0x00,0x00,0x3e, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x07,0x00,0x00,0x00,0xfe,0xff,0x1f, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x0f,0x00,0xe0,0xff,0xff,0x3f,0x00,0x00,0x00,0x00,0x00,0x1e,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,0xfe,0xff,0x3f,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0xfc,0xff,0xff,0xff,0x3f,0x00,0x00,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,0xfe,0xff,0x3f,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xe0,0xff,0xff, 0xff,0x0f,0x3c,0x00,0x00,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x0e,0x00,0x00,0x00,0xfc,0xff,0x3f,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xe0,0xff,0xff,0xff,0x0f, 0x3c,0x00,0x00,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x0e,0x00,0x00,0x00,0xfc,0xff,0x3f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfc,0xff,0xff,0x01,0x00,0x38,0x00, 0x00,0x00,0x00,0x80,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1e,0x00, 0x00,0x00,0xfc,0xff,0x7f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0xf0,0xff,0xff,0x00,0x00,0x00,0x38,0x00,0x00,0x00, 0x00,0x80,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3c,0x00,0x00,0x00, 0xfc,0xff,0x7f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0xff,0xff,0x03,0x00,0x00,0x00,0x38,0x00,0x00,0x00,0x00,0xc0, 0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x78,0x00,0x00,0x00,0xf8,0xff, 0x7f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0xfc,0xff,0x1f,0x00,0x00,0x00,0x00,0x78,0x00,0x00,0x00,0x00,0xc0,0x01,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x70,0x00,0x00,0x00,0xf8,0xff,0xff,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc0,0xff,0xff, 0x01,0x00,0x00,0x00,0x00,0x70,0x00,0x00,0x00,0x00,0xe0,0x01,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0xf0,0x01,0x00,0x00,0xf0,0xff,0xff,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc0,0xff,0xff,0x01,0x00, 0x00,0x00,0x00,0x70,0x00,0x00,0x00,0x00,0xe0,0x01,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0xf0,0x01,0x00,0x00,0xf0,0xff,0xff,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x07,0x00,0xfe,0x00,0x00, 0x00,0x70,0x00,0x00,0x00,0x00,0xe0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0xe0,0x03,0x00,0x00,0xf0,0xff,0xff,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0xf0,0xff,0x1f,0x00,0xf8,0xff,0x00,0x00,0x00,0x70, 0x00,0x00,0x00,0x00,0xf0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc0, 0x03,0x00,0x00,0xf0,0xff,0xff,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0xfe,0x7f,0x00,0xe0,0xff,0x7f,0x00,0x00,0x00,0x70,0x00,0x00, 0x00,0x00,0xf8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x0f,0x00, 0x00,0xf0,0xff,0xff,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0xe0,0xff,0x03,0x00,0xf0,0xff,0x3f,0x00,0x00,0x00,0x70,0x00,0x00,0x00,0x00, 0x78,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1f,0x00,0x00,0xe0, 0xff,0xff,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xe0,0xff, 0x03,0x00,0xf0,0xff,0x3f,0x00,0x00,0x00,0x70,0x00,0x00,0x00,0x00,0x78,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1f,0x00,0x00,0xe0,0xff,0xff, 0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfc,0x7f,0x00,0x00, 0xf8,0xff,0x3f,0x00,0x00,0x00,0x70,0x00,0x00,0x00,0x00,0x78,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7c,0x00,0x00,0xe0,0xff,0xff,0x03,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xff,0x07,0x00,0x00,0xf8,0xff, 0x1f,0x00,0x00,0x00,0xe0,0x00,0x00,0x00,0x00,0x3c,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0xf8,0x01,0x00,0xe0,0xff,0xff,0x03,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0xc0,0xff,0x00,0x00,0x00,0xfc,0xff,0x1f,0x00, 0x00,0x00,0xe0,0x00,0x00,0x00,0x00,0x3c,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0xe0,0x07,0x00,0xc0,0xff,0xff,0x03,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0xc0,0x1f,0x00,0x00,0x00,0xfe,0xff,0x1f,0x00,0x00,0x00, 0xe0,0x00,0x00,0x00,0x00,0x3c,0x00,0x00,0x60,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0xc0,0x3f,0x00,0xc0,0xff,0xff,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0xc0,0x1f,0x00,0x00,0x00,0xfe,0xff,0x1f,0x00,0x00,0x00,0xe0,0x00, 0x00,0x00,0x00,0x3c,0x00,0x00,0x60,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc0, 0x3f,0x00,0xc0,0xff,0xff,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x80,0x03,0x00,0x00,0x00,0xfe,0xff,0x0f,0x00,0x00,0x00,0xe0,0x00,0x00,0x00, 0x00,0x3e,0x00,0x00,0x70,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0x01, 0x80,0xff,0xff,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0xfe,0xff,0x0f,0x00,0x00,0x00,0xe0,0x00,0x00,0x00,0x00,0x3f, 0x00,0x00,0x38,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xf8,0x3f,0x80,0xff, 0xff,0x0f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0xff,0xff,0x07,0x00,0x00,0x00,0xc0,0x01,0x00,0x00,0x00,0xff,0x00,0x00, 0x38,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc0,0xff,0x00,0xfc,0xff,0x0f, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff, 0xff,0x07,0x00,0x00,0x00,0xc0,0x01,0x00,0x00,0x00,0xf7,0x03,0x00,0x3c,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0x0f,0xc0,0xff,0x0f,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x07, 0x00,0x00,0x00,0xc0,0x01,0x00,0x00,0x00,0xf7,0x03,0x00,0x3c,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0xff,0x0f,0xc0,0xff,0x0f,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xff,0xff,0x03,0x00,0x00, 0x00,0xc0,0x01,0x00,0x00,0x80,0xe3,0x0f,0x00,0x3f,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0xf0,0x7f,0x00,0xf8,0x1f,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xff,0xff,0x03,0x00,0x00,0x00,0xc0, 0x01,0x00,0x00,0x80,0xe3,0xff,0xff,0x3f,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x80,0xff,0x03,0x80,0x0f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x80,0xff,0xff,0x03,0x00,0x00,0x00,0xc0,0x01,0x00, 0x00,0x80,0xc3,0xff,0xff,0x3f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0xfe,0x1f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0xc0,0xff,0xff,0x01,0x00,0x00,0x00,0xc0,0x01,0x00,0x00,0xc0, 0x01,0xff,0xff,0x3f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xe0, 0xff,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0xc0,0xff,0xff,0x00,0x00,0x00,0x00,0xc0,0x01,0x00,0x00,0xc0,0x01,0xfe, 0x7f,0x38,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfe,0x1f, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc0, 0xff,0xff,0x00,0x00,0x00,0x00,0xc0,0x01,0x00,0x00,0xc0,0x01,0xfe,0x7f,0x38, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfe,0x1f,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xe0,0xff,0xff, 0x00,0x00,0x00,0x00,0xc1,0x01,0x00,0x00,0xe0,0x00,0x3e,0x00,0x38,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xf0,0xff,0x01,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xe0,0xff,0xff,0x00,0x00, 0x00,0x80,0xc3,0x01,0x00,0x00,0xe0,0x00,0x7c,0x00,0x3c,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0x7f,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xf0,0xff,0x7f,0x00,0x00,0x00,0xf0, 0xc3,0x01,0x00,0x00,0xf0,0x00,0xf0,0x00,0x3c,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xff,0xff,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0xf8,0xff,0x7f,0x00,0x00,0x00,0xf8,0xc3,0x01, 0x00,0x00,0xf0,0x00,0xe0,0x01,0x3c,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0xe0,0xff,0xff,0x03,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0xf8,0xff,0x7f,0x00,0x00,0x00,0xf8,0xc3,0x01,0x00,0x00, 0xf0,0x00,0xe0,0x01,0x3c,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0xe0,0xff,0xff,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0xf8,0xff,0x7f,0x00,0x00,0x00,0xff,0xc3,0x03,0x00,0x00,0x70,0x00, 0xc0,0x03,0x3c,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x80,0xff,0xff,0xff,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0xf8,0xff,0x3f,0x00,0x00,0x80,0xff,0xc3,0x03,0x00,0x00,0x70,0x00,0xc0,0x03, 0x3c,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xf0,0x01,0x00, 0xf0,0xff,0xff,0x0f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xf8,0xff, 0x1f,0x00,0x00,0xe0,0xff,0xc3,0x03,0x00,0x00,0x78,0x00,0x80,0x07,0x3c,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xf0,0x7f,0x00,0x00,0x00, 0xfc,0x0f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfc,0xff,0x1f,0x00, 0x00,0xf8,0xff,0xc3,0x03,0x00,0x00,0x78,0x00,0x00,0x0f,0x3c,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xe0,0xff,0x0f,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfc,0xff,0x1f,0x00,0x00,0xf8, 0xff,0xc3,0x03,0x00,0x00,0x78,0x00,0x00,0x0f,0x3c,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0xe0,0xff,0x0f,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfc,0xff,0x0f,0x00,0x00,0xfe,0xff,0x83, 0x03,0x00,0x00,0x3c,0x00,0x00,0x1e,0x1c,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0xfc,0xff,0x01,0xe0,0xff,0xff,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0xfe,0xff,0x0f,0x00,0x80,0xff,0xff,0x87,0x03,0x00, 0x00,0x3c,0x00,0x00,0x3c,0x1c,0x00,0x00,0x00,0x00,0x00,0x00,0xf8,0xff,0xff, 0xff,0xff,0xe1,0xff,0xff,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0xfe,0xff,0x0f,0x00,0xc0,0xff,0xff,0x87,0x03,0x00,0x00,0x3c, 0x00,0x00,0x78,0x1c,0x00,0x00,0x00,0x00,0x00,0xfe,0xff,0xff,0xff,0xff,0xff, 0xe1,0xff,0xff,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0xff,0xff,0x07,0x00,0xf8,0xff,0xff,0xc7,0x03,0x00,0x00,0x1c,0x00,0x00, 0xe0,0x1c,0x00,0x00,0x00,0x80,0xff,0xff,0xff,0x01,0x00,0x00,0x00,0xc0,0xff, 0xff,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff, 0xff,0x07,0x00,0xf8,0xff,0xff,0xc7,0x03,0x00,0x00,0x1c,0x00,0x00,0xe0,0x1c, 0x00,0x00,0x00,0x80,0xff,0xff,0xff,0x01,0x00,0x00,0x00,0xc0,0xff,0xff,0x03, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x03, 0x00,0xfe,0xff,0xff,0xc7,0x03,0x00,0x00,0x1c,0x00,0x00,0xe0,0x1f,0x00,0x00, 0x00,0xf0,0xff,0xff,0x00,0x00,0x00,0x00,0x00,0x80,0xff,0xff,0x07,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xff,0xff,0x03,0x00,0xff, 0xff,0xff,0xc7,0x03,0x00,0x00,0x1c,0x00,0x00,0x80,0x1f,0x00,0x00,0x00,0xff, 0xff,0x03,0x00,0x00,0x00,0xfc,0x03,0x80,0xff,0xff,0x07,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xff,0xff,0x03,0xc0,0xff,0xff,0xff, 0xc7,0x03,0x00,0x00,0x1e,0x00,0x00,0x00,0x1f,0x00,0x00,0xf8,0xff,0x0f,0x00, 0x80,0xff,0xff,0xff,0x1f,0x00,0xff,0xff,0x07,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x80,0xff,0xff,0x01,0xf0,0xff,0xff,0xff,0xc3,0x03, 0x00,0x00,0xfe,0xff,0x00,0x00,0x1f,0x00,0xe0,0xff,0x3f,0x00,0x00,0x80,0xff, 0xff,0xff,0x3f,0x00,0xff,0xff,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0xc0,0xff,0xff,0x01,0xfc,0xff,0xff,0xff,0xc1,0x03,0x00,0x00, 0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x01,0x00,0x00,0x80,0xff,0xff,0xff, 0x7f,0x00,0xff,0xff,0x0f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0xc0,0xff,0xff,0x01,0xfc,0xff,0xff,0xff,0xc1,0x03,0x00,0x00,0xfe,0xff, 0xff,0xff,0xff,0xff,0xff,0xff,0x01,0x00,0x00,0x80,0xff,0xff,0xff,0x7f,0x00, 0xff,0xff,0x0f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xe0, 0xff,0xff,0x01,0xff,0xff,0xff,0xff,0x80,0x03,0x00,0x00,0xfe,0xff,0xff,0xff, 0xff,0xff,0xff,0x07,0x00,0x00,0x00,0x00,0xfe,0xff,0xff,0xff,0x01,0xfe,0xff, 0x1f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xe0,0xff,0xff, 0x80,0xff,0xff,0xff,0x3f,0x00,0x00,0x00,0x00,0x7c,0x00,0x00,0xf5,0xff,0xff, 0x3f,0x00,0x00,0x00,0x00,0x00,0xfc,0xff,0xff,0xff,0x07,0xfe,0xff,0x1f,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xe0,0xff,0x7f,0xf0,0xff, 0xff,0xff,0x0f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0xf0,0xff,0xff,0xff,0x1f,0xfe,0xff,0x1f,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xf0,0xff,0x7f,0xf8,0xff,0xff,0xff, 0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0xc0,0xff,0xff,0xff,0x3f,0xfe,0xff,0x3f,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0xf0,0xff,0x7f,0xf8,0xff,0xff,0xff,0x03,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0xc0,0xff,0xff,0xff,0x3f,0xfe,0xff,0x3f,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0xf0,0xff,0xff,0xff,0xff,0xff,0x7f,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff, 0xff,0xff,0xff,0xfc,0xff,0x3f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0xf8,0xff,0xff,0xff,0xff,0xff,0x3f,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfc,0xff,0xff, 0xff,0xff,0xff,0x3f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0xf8,0xff,0xff,0xff,0xff,0xff,0x0f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xf0,0xff,0xff,0xff,0xff, 0xff,0x3f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfc,0xff, 0xff,0xff,0xff,0xff,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xe0,0xff,0xff,0xff,0xff,0xff,0x7f, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfc,0xff,0xff,0xff, 0xff,0xff,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0xe0,0xff,0xff,0xff,0xff,0xff,0x7f,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfc,0xff,0xff,0xff,0xff,0xff, 0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x80,0xff,0xff,0xff,0xff,0xff,0x7f,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfc,0xff,0xff,0xff,0xff,0x7f,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0xfe,0xff,0xff,0xff,0xff,0xff,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0xfe,0xff,0xff,0xff,0xff,0x3f,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0xfc,0xff,0xff,0xff,0xff,0xff,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0xfe,0xff,0xff,0xff,0xff,0x07,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xf0, 0xff,0xff,0xff,0xff,0xff,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0xfe,0xff,0xff,0xff,0xff,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xf0,0xff,0xff, 0xff,0xff,0xff,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfe, 0xff,0xff,0xff,0xff,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xe0,0xff,0xff,0xff,0xff, 0xff,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0xff, 0xff,0xff,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xff,0xff,0xff,0xff,0xff,0x01, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xff,0xff,0xff,0xff,0x3f, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfe,0xff,0xff,0xff,0xff,0x01,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xff,0xff,0xff,0xff,0x1f,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0xf8,0xff,0xff,0xff,0xff,0x03,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0xc0,0xff,0xff,0xff,0xff,0x07,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0xf0,0xff,0xff,0xff,0xff,0x03,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0xc0,0xff,0xff,0xff,0xff,0x07,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0xf0,0xff,0xff,0xff,0xff,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0xc0,0xff,0xff,0xff,0xff,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc0, 0xff,0xff,0xff,0xff,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc0, 0xff,0xff,0xff,0xff,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xff,0xff, 0xff,0xff,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xe0,0xff,0xff, 0xff,0x1f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0xff,0xff, 0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xe0,0xff,0xff,0xff,0x0f, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfc,0xff,0xff,0xff,0x0f,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xe0,0xff,0xff,0xff,0x0f,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfc,0xff,0xff,0xff,0x0f,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0xf0,0xff,0xff,0xff,0x03,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0xf8,0xff,0xff,0xff,0x0f,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0xf0,0xff,0xff,0xff,0x01,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0xe0,0xff,0xff,0xff,0x0f,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0xf8,0xff,0xff,0x7f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0xc0,0xff,0xff,0xff,0x0f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0xf8,0xff,0xff,0x3f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0xff,0xff,0xff,0x1f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xf8,0xff, 0xff,0x3f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff, 0xff,0x1f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xf8,0xff,0xff,0x07, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfc,0xff,0xff,0x3f, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfc,0xff,0xff,0x03,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xf8,0xff,0xff,0x3f,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfe,0xff,0xff,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xe0,0xff,0xff,0x3f,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0xfe,0xff,0x3f,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x80,0xff,0xff,0x3f,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0xfe,0xff,0x3f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x80,0xff,0xff,0x3f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0xfe,0xff,0x0f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0xfe,0xff,0x7f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff, 0xff,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0xfc,0xff,0x7f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xf0,0xff, 0x7f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xff,0x3f,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc0,0xff,0x7f,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xff,0x1f,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xff,0xff,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x80,0xff,0x1f,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xff,0xff,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0xc0,0xff,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0xfe,0xff,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0xc0,0xff,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0xfc,0xff,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc0, 0x7f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0xf0,0xff,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xe0,0x1f,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0xc0,0xff,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xe0,0x1f,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc0,0xff, 0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xe0,0x0f,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xff,0x01,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0xf0,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfe,0x03,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x78,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xf8,0x03,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x18,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0xf0,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x18,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0xf0,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0xc0,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}; xscreensaver-5.36/hacks/images/amiga.xpm000644 000767 000024 00000153576 06535623047 020333 0ustar00jwzstaff000000 000000 /* XPM */ static char *amiga_hand[] = { /* width height num_colors chars_per_pixel */ " 209 258 4 1", /* colors */ ". c #000000", "# c #6666cc", "a c #cccccc", "b c #ffffff", /* pixels */ "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb.......................................................................................................................................................bbbbbbbbbbbbbbbbbbb", "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb.......................................................................................................................................................bbbbbbbbbbbbbbbbbbb", "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb.........................................................................................................................................................bbbbbbbbbbbbbbbbb", "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb.........................................................................................................................................................bbbbbbbbbbbbbbbbb", "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb.....###################################.....aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.....###################.....bbbbbbbbbbbbbbbb", "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb.....###################################.....aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.....###################.....bbbbbbbbbbbbbbbb", "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb.....###################################.....aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.....#####################.....bbbbbbbbbbbbbb", "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb.....###################################.....aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.....#####################.....bbbbbbbbbbbbbb", "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb.....###################################.....aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa....................aaaa.....#######################.....bbbbbbbbbbbb", "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb.....###################################.....aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa....................aaaa.....#######################.....bbbbbbbbbbbb", "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb.....###################################.....aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa....................aaaa.....########################.....bbbbbbbbbbb", "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb.....###################################.....aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa....................aaaa.....########################.....bbbbbbbbbbb", "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb.....###################################.....aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.....##########.....aaaa.....##########################.....bbbbbbbbb", "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb.....###################################.....aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.....##########.....aaaa.....##########################.....bbbbbbbbb", "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb.....###################################.....aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.....##########.....aaaa.....############################....bbbbbbbb", "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb.....###################################.....aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.....##########.....aaaa.....############################....bbbbbbbb", "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb.....###################################.....aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.....##########.....aaaa.....#############################.....bbbbbb", "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb.....###################################.....aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.....##########.....aaaa.....#############################.....bbbbbb", "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb.....###################################.....aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.....##########.....aaaa.....###############################.....bbbb", "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb.....###################################.....aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.....##########.....aaaa.....###############################.....bbbb", "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb.....###################################.....aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.....##########.....aaaa.....################################.....bbb", "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb.....###################################.....aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.....##########.....aaaa.....################################.....bbb", "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb.....###################################.....aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.....##########.....aaaa.....##################################.....b", "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb.....###################################.....aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.....##########.....aaaa.....##################################.....b", "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb.....###################################.....aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.....##########.....aaaa.....####################################....", "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb.....###################################.....aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.....##########.....aaaa.....####################################....", "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb.....###################################.....aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.....##########.....aaaa.....####################################....", "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb.....###################################.....aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.....##########.....aaaa.....####################################....", "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb.....###################################.....aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.....##########.....aaaa.....####################################....", "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb.....###################################.....aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.....##########.....aaaa.....####################################....", "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb.....###################################.....aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.....##########.....aaaa.....####################################....", "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb.....###################################.....aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.....##########.....aaaa.....####################################....", "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb.....###################################.....aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.....##########.....aaaa.....####################################....", "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb.....###################################.....aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.....##########.....aaaa.....####################################....", "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb.....###################################.....aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa....................aaaa.....####################################....", "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb.....###################################.....aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa....................aaaa.....####################################....", "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb.....###################################.....aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa....................aaaa.....####################################....", "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb.....###################################.....aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa....................aaaa.....####################################....", "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb.....###################################.....aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.....####################################....", "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb.....###################################.....aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.....####################################....", "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb.....###################################.....aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.....####################################....", "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb.....###################################.....aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.....####################################....", "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb.....###################################.....aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.....####################################....", "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb.....###################################.....aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.....####################################....", "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb.....###################################..........................................................................................####################################....", "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb.....###################################..........................................................................................####################################....", "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb.....###################################..........................................................................................####################################....", "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb.....###################################..........................................................................................####################################....", "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb.....#################################################################################################################################################################....", "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb.....#################################################################################################################################################################....", "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb.....#################################################################################################################################################################....", "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb.....#################################################################################################################################################################....", "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb.....#################################################################################################################################################################....", "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb.....#################################################################################################################################################################....", "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb.....#################################################################################################################################################################....", "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb.....#################################################################################################################################################################....", "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb.....#################################################################################################################################################################....", "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb.....#################################################################################################################################################################....", "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb.....#################################################################################################################################################################....", "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb.....#################################################################################################################################################################....", "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb.....#################################################################################################################################################################....", "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb.....#################################################################################################################################################################....", "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb.....#################################################################################################################################################################....", "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb.....#################################################################################################################################################################....", "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb.....#################################################################################################################################################################....", "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb.....#################################################################################################################################################################....", "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb.....#################################################################################################################################################################....", "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb.....#################################################################################################################################################################....", "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb.....#################################################################################################################################################################....", "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb.....#################################################################################################################################################################....", "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb.....#################################################################################################################################################################....", "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb.....#################################################################################################################################################################....", "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb.....#################################################################################################################################################################....", "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb.....#################################################################################################################################################################....", "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb.....#################################################################################################################################################################....", "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb.....#################################################################################################################################################################....", "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb.....#################################################################################################################################################################....", "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb.....#################################################################################################################################################################....", "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb.....#################################################################################################################################################################....", "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb.....#################################################################################################################################################################....", "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb.....#################################################################################################################################################################....", "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb.....#################################################################################################################################################################....", "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb.....#################################################################################################################################################################....", "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb.....#################################################################################################################################################################....", "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb.....#################################################################################################################################################################....", "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb.....#################################################################################################################################################################....", "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb.....#################################################################################################################################################################....", "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb.......#########################..................######################################################################################################################....", "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb.......#########################..................######################################################################################################################....", "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb..........#########################..bbbbb.............####################################################################################################################....", "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb..........#########################..bbbbb.............####################################################################################################################....", "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb.....bbb.....##############.............bbbbbbbbbbb..bbb.........................................................................................................#############....", "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb.....bbb.....##############.............bbbbbbbbbbb..bbb.........................................................................................................#############....", "bbbbbbbbbbbbbbbbbbbbbbbbbbbb......bbbbb.....##############...........bbbbbbbbbbbbbbb..bbbb......................................................................................................#############....", "bbbbbbbbbbbbbbbbbbbbbbbbbbbb......bbbbb.....##############...........bbbbbbbbbbbbbbb..bbbb......................................................................................................#############....", "bbbbbbbbbbbbbbbbbbbbbbbbbb.....bbbbbbbb.....##############.....bbb...bbbbbbbbbbbbbbb...bbb....bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb.....#############....", "bbbbbbbbbbbbbbbbbbbbbbbbbb.....bbbbbbbb.....##############.....bbb...bbbbbbbbbbbbbbb...bbb....bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb.....#############....", "bbbbbbbbbbbbbbbbbbbbbbbb....bbbbbbbbbbb.....##############.....bbb...bbbbbbbbbbbbbbb...bbb....bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb.....#############....", "bbbbbbbbbbbbbbbbbbbbbbbb....bbbbbbbbbbb.....##############.....bbb...bbbbbbbbbbbbbbb...bbb....bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb.....#############....", "bbbbbbbbbbbbbbbbbbbbbbbb....bbbbbbbbbbb.....##############.....bb...bbbbbbbbbbbbbbbb...bbb....bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb.....#############....", "bbbbbbbbbbbbbbbbbbbbbbbb....bbbbbbbbbbb.....##############.....bb...bbbbbbbbbbbbbbbb...bbb....bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb.....#############....", "bbbbbbbbbbbbbbbbbbbbbbb...bbbbbbbbbbbbb.....##############..........bbbbbbbbbbbbbbbb...bbb....bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb.....#############....", "bbbbbbbbbbbbbbbbbbbbbbb...bbbbbbbbbbbbb.....##############..........bbbbbbbbbbbbbbbb...bbb....bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb.....#############....", "bbbbbbbbbbbbbbbbbbbbbbb...bbbbbbbbbbbbb.....##############...........bbbbbbbbbbbbbbb...bbb....bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb.....#############....", "bbbbbbbbbbbbbbbbbbbbbbb...bbbbbbbbbbbbb.....##############...........bbbbbbbbbbbbbbb...bbb....bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb.....#############....", "bbbbbbbbbbbbbbbbbbbbb...bbbbbbbbbbbbbbb.....##############.............bbbbbbbbbbbbb...bbb....bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb.....#############....", "bbbbbbbbbbbbbbbbbbbbb...bbbbbbbbbbbbbbb.....##############.............bbbbbbbbbbbbb...bbb....bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb.....#############....", "bbbbbbbbbbbbbbbbbbbbb...bbbbbbbbbbbbbbb.....##############..........b....bbbbbbbbbbb...bbb....bbbb####bbbb#####bbbbb########bbbbb###bbbbb###bbbbb########bbbbbbb########bbbbbbbbbbbbbbbbbbb.....#############....", "bbbbbbbbbbbbbbbbbbbbb...bbbbbbbbbbbbbbb.....##############..........b....bbbbbbbbbbb...bbb....bbbb####bbbb#####bbbbb########bbbbb###bbbbb###bbbbb########bbbbbbb########bbbbbbbbbbbbbbbbbbb.....#############....", "bbbbbbbbbbbbbbbbbbbb...bbbbbbbbbbbbbbbb.....##############........bbbbb................bbb....bbbb####bbbb####bbbb####bbbbb###bbb###bbbbb###bbbbbbbbbbb####bbb###bbbbb###bbbbbbbbbbbbbbbbbb.....#############....", "bbbbbbbbbbbbbbbbbbbb...bbbbbbbbbbbbbbbb.....##############........bbbbb................bbb....bbbb####bbbb####bbbb####bbbbb###bbb###bbbbb###bbbbbbbbbbb####bbb###bbbbb###bbbbbbbbbbbbbbbbbb.....#############....", "bbbbbbbbbbbbbbbbbbbb...bbbbbbbbbbbbbbbb.....###########........bbbbbbbbbb.............bbbb....bbbb####bbbb####bbbbbbbbbbbbb###bbb###bbbbb###bbb############bbb###bbbbb###bbbbbbbbbbbbbbbbbb.....#############....", "bbbbbbbbbbbbbbbbbbbb...bbbbbbbbbbbbbbbb.....###########........bbbbbbbbbb.............bbbb....bbbb####bbbb####bbbbbbbbbbbbb###bbb###bbbbb###bbb############bbb###bbbbb###bbbbbbbbbbbbbbbbbb.....#############....", "bbbbbbbbbbbbbbbbbbbb.bbbbbbbbbbbbbbbbbb.....#########........bbbbbbbbbbbbbbbbbbbbbbbbbbbbb....bbbb####bbb#####bbbb####bbbbb###bbb###bbbbb###bbb####bbbb####bbb###bbb#####bbbbbbbbbbbbbbbbbb.....#############....", "bbbbbbbbbbbbbbbbbbbb.bbbbbbbbbbbbbbbbbb.....#########........bbbbbbbbbbbbbbbbbbbbbbbbbbbbb....bbbb####bbb#####bbbb####bbbbb###bbb###bbbbb###bbb####bbbb####bbb###bbb#####bbbbbbbbbbbbbbbbbb.....#############....", "bbbbbbbbbbbbbbbbbb...bbbbbbbbbbbbbbbbbb.....########........bbbbbbbbbbbbbbbbbbbbbbbbbbbbbb....bbbbbb#####b####bbbbbb########bbbbbbb#########bbbbb########bbbbbbb####bb###bbbbbbbbbbbbbbbbbb.....#############....", "bbbbbbbbbbbbbbbbbb...bbbbbbbbbbbbbbbbbb.....########........bbbbbbbbbbbbbbbbbbbbbbbbbbbbbb....bbbbbb#####b####bbbbbb########bbbbbbb#########bbbbb########bbbbbbb####bb###bbbbbbbbbbbbbbbbbb.....#############....", "bbbbbbbbbbbbbbbbbb...bbbbbbbbbbbbbbbbbb.....#####........bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb....bbbbbbbbbbbb####bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb###bbbbbbbbbbbbbbbbbb.....#############....", "bbbbbbbbbbbbbbbbbb...bbbbbbbbbbbbbbbbbb.....#####........bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb....bbbbbbbbbbbb####bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb###bbbbbbbbbbbbbbbbbb.....#############....", "bbbbbbbbbbbbbbbb....bbbbbbbbbbbbbbbbbbb.....###........bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb...bbbbbbbbbbbbbb#####bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb#####bbbbbbbbbbbbbbbb.....#############....", "bbbbbbbbbbbbbbbb....bbbbbbbbbbbbbbbbbbb.....###........bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb...bbbbbbbbbbbbbb#####bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb#####bbbbbbbbbbbbbbbb.....#############....", "bbbbbbbbbbbbbbb...bbbbb.bbbbbbbbbbbbbbb..............bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb...bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb.....#############....", "bbbbbbbbbbbbbbb...bbbbb.bbbbbbbbbbbbbbb..............bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb...bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb.....#############....", "bbbbbbbbbbbb....bbbbbbbb....bbbbbbbbbbb.....bbb...bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb.....bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb.....#############....", "bbbbbbbbbbbb....bbbbbbbb....bbbbbbbbbbb.....bbb...bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb.....bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb.....#############....", "bbbbbbbbbb...bbbbbbbbbbbbb.....bbbbb...........bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb....bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb.....#############....", "bbbbbbbbbb...bbbbbbbbbbbbb.....bbbbb...........bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb....bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb.....#############....", "bbbbbbbb....bbbbbbbbbbbbbbbb................bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb...bbbbbbbbbbbbbbbbbbbbb###bbbbb#####bbbbbbbb######bbbbb########bbbbb###bbbbbbb###bbbbbbbbbbbbbbbbbbbbbbbb.....#############....", "bbbbbbb...bbbbbbbbbbbbbbbbbbbbbb.........bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb...bbbbbbbbbbbbbbbbbbbbbbbb####bbb###bbbbbbbbbbb####bbbb####bbbb####bbb#####bbb#####bbbbbbbbbbbbbbbbbbbbbbbb.....#############....", "bbbbbbb...bbbbbbbbbbbbbbbbbbbbbb.........bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb...bbbbbbbbbbbbbbbbbbbbbbbb####bbb###bbbbbbbbbbb####bbbb####bbbb####bbb#####bbb#####bbbbbbbbbbbbbbbbbbbbbbbb.....#############....", "bbbbb...bbbbbbbbbbbbbbbbbbbbbbb......bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb...bbbbbbbbbbbbbbbbbbbbbbbbbbb########bbb####bbbb####bbbb####bbbb####bbb#############bbbbbbbbbbbbbbbbbbbbbbbb.....#############....", "bbbbb...bbbbbbbbbbbbbbbbbbbbbbb......bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb...bbbbbbbbbbbbbbbbbbbbbbbbbbb########bbb####bbbb####bbbb####bbbb####bbb#############bbbbbbbbbbbbbbbbbbbbbbbb.....#############....", "bbbbb...bbbbbbbbbbbbbbbbbbbbb..b..bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb...bbbbbbbbbbbbbbbbbbbbbbbbbbb####bbb###bbb####bbb#####bbbb####bbbb####bbb###bb###bb###bbbbbbbbbbbbbbbbbbbbbbbb.....#############....", "bbbbb...bbbbbbbbbbbbbbbbbbbbb..b..bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb...bbbbbbbbbbbbbbbbbbbbbbbbbbb####bbb###bbb####bbb#####bbbb####bbbb####bbb###bb###bb###bbbbbbbbbbbbbbbbbbbbbbbb.....#############....", "bbbb...bbbbbbbbbbbbbbbbbbbbb....bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb....bbbbbbbbbbbbbbbbbbbbbbbbbbb###bbbbb###bbbbb#####b#####bbbbb########bbbbb###bbbbbbb###bbbbbbbbbbbbbbbbbbbbbbbb.....#############....", "bbbb...bbbbbbbbbbbbbbbbbbbbb....bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb....bbbbbbbbbbbbbbbbbbbbbbbbbbb###bbbbb###bbbbb#####b#####bbbbb########bbbbb###bbbbbbb###bbbbbbbbbbbbbbbbbbbbbbbb.....#############....", "bb...bbbbbbbbbbbbbbbbbbb.....bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb.....bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb###bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb###bbbbbbb###bbbbbbbbbbbbbbbbbbbbbbbb.....#############....", "bb...bbbbbbbbbbbbbbbbbbb.....bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb.....bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb###bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb###bbbbbbb###bbbbbbbbbbbbbbbbbbbbbbbb.....#############....", "bb...bbbbbbbbbbbbbbbbbb.bb..bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb....bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb#####bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb###bbbbbbb###bbbbbbbbbbbbbbbbbbbbbbbb.....#############....", "bb...bbbbbbbbbbbbbbbbbb.bb..bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb....bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb#####bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb###bbbbbbb###bbbbbbbbbbbbbbbbbbbbbbbb.....#############....", "....bbbbbbbbbbbbbbbbb.....bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb...bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb.....#############....", "....bbbbbbbbbbbbbbbbb.....bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb...bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb.....#############....", "....bbbbbbbbbbbbbb.....bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb...bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb.....#############....", "....bbbbbbbbbbbbbb.....bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb...bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb.....#############....", "....bbbbbbbbbbbb..bb.bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb...bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb.....#############....", "....bbbbbbbbbbbb..bb.bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb...bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb.....#############....", "....bbbbbbbbbbb.....bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb...bbbbbbbbbbbbbaa........bbb.......aaa........abbbbbaa..........a..........baa..abb................bbb.......abbbbbbbbbb.....#############....", "....bbbbbbbbbbb.....bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb...bbbbbbbbbbbbbaa........bbb.......aaa........abbbbbaa..........a..........baa..abb................bbb.......abbbbbbbbbb.....#############....", "....bbbbbbbbbbb.bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb...bbbbbbbbbbbbbbbbba...bbbbbbb.aabbbaa...bba.....aabbbbba...aabbbbba....abbb....abbbbb...aabba...bbbbbbb.aabbbbbbbbbbbbb.....#############....", "....bbbbbbbbbbb.bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb...bbbbbbbbbbbbbbbbba...bbbbbbb.aabbbaa...bba.....aabbbbba...aabbbbba....abbb....abbbbb...aabba...bbbbbbb.aabbbbbbbbbbbbb.....#############....", "....bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb...bbbbbbbbbbbbbbbbba..........abbbbb...aabbbaa.....abbbba...bbbbbbba....bbba....abbb....bbbbba..........abbbbbbbbbbbbbbb.....#############....", "....bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb...bbbbbbbbbbbbbbbbba..........abbbbb...aabbbaa.....abbbba...bbbbbbba....bbba....abbb....bbbbba..........abbbbbbbbbbbbbbb.....#############....", "....bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb...bbbbbbbbbbbbbbbbba...bbbb.aabbbbb......aabbb.....abbbb...abbbbbbb...aabaa.....abb...bbbbbbba...bbbb.aabbbbbbbbbbbbbbbb.....#############....", "....bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb...bbbbbbbbbbbbbbbbba...bbbb.aabbbbb......aabbb.....abbbb...abbbbbbb...aabaa.....abb...bbbbbbba...bbbb.aabbbbbbbbbbbbbbbb.....#############....", "....bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb...bbbbbbbbbbbbbbbbba...bb..abbbbbbbbbbbbbbbbbb.....abbaa...bbbbbbaa...aaa..a....a...bbbbbbbbba...bb..abbbbbbbbbbbbbbbbbb.....#############....", "....bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb...bbbbbbbbbbbbbbbbba...bb..abbbbbbbbbbbbbbbbbb.....abbaa...bbbbbbaa...aaa..a....a...bbbbbbbbba...bb..abbbbbbbbbbbbbbbbbb.....#############....", "....bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb...bbbbbbbbbbbbbbbbba.....aabbbbbbbbb..bbbbbbaa...aabbb...aabbbbbb...aa...aab.......bbbbbbbbbba.....aabbbbbbbbbbbbbbbbbbb.....#############....", "....bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb...bbbbbbbbbbbbbbbbba.....aabbbbbbbbb..bbbbbbaa...aabbb...aabbbbbb...aa...aab.......bbbbbbbbbba.....aabbbbbbbbbbbbbbbbbbb.....#############....", "....bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb...bbbbbbbbbbbbbbbbba...aabbbbbbbbbbb..abbbba...aabbaaa...bbbbbbba.......abbb.....aabbbbbbbbbba...aabbbbbbbbbbbbbbbbbbbbb.....#############....", "....bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb...bbbbbbbbbbbbbbbbba...aabbbbbbbbbbb..abbbba...aabbaaa...bbbbbbba.......abbb.....aabbbbbbbbbba...aabbbbbbbbbbbbbbbbbbbbb.....#############....", "....bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb...bbbbbbbbbbbbbbbbba..abbbbbbbbbbbbb........aaabbaa........aaaaa......aabbbb.......abbbbbbbbba..abbbbbbbbbbbbbbbbbbbbbbb.....#############....", "....bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb...bbbbbbbbbbbbbbbbba..abbbbbbbbbbbbb........aaabbaa........aaaaa......aabbbb.......abbbbbbbbba..abbbbbbbbbbbbbbbbbbbbbbb.....#############....", "....bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb...bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb.....#############....", "....bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb...bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb.....#############....", "....bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb...bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb.....#############....", "....bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb...bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb.....#############....", "....bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb.............................................................................................................................................", "....bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb.............................................................................................................................................", "....bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb............................................................................................................................................", "....bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb............................................................................................................................................", "....bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb....b....bbbbbbbbbbbbbbbbbbbbbbbbb........bbbbbbbbbbbb...bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb", "....bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb....b....bbbbbbbbbbbbbbbbbbbbbbbbb........bbbbbbbbbbbb...bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb", "....bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb....bbbbb...bbbbbbbbbbbbbbbbbbbbb........bbbbbbbbbbbbb...bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb", "....bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb....bbbbb...bbbbbbbbbbbbbbbbbbbbb........bbbbbbbbbbbbb...bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb", "....bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb....bbb........bbbbbbbbbbbbbbbb........bbbbbbbbbbbbbbb...bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb", "....bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb....bbb........bbbbbbbbbbbbbbbb........bbbbbbbbbbbbbbb...bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb", "....bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb.................bbbbbbbbbbbb........bbbbbbbbbbbbbbbbb...bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb", "....bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb.................bbbbbbbbbbbb........bbbbbbbbbbbbbbbbb...bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb", "....bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb.........bbbbbb...bbbbbbbbbb........bbbbbbbbbbbbbbbbbb...bbbbbbbbbbbbbb........bbb............bbbbbbbb.....bbbbbbbbbbbbbbbb.........bbbbbbbb", "....bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb.........bbbbbb...bbbbbbbbbb........bbbbbbbbbbbbbbbbbb...bbbbbbbbbbbbbb........bbb............bbbbbbbb.....bbbbbbbbbbbbbbbb.........bbbbbbbb", "....bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb..bb.bbbbbbbbbbbb...bbbbbb........bbbbbbbbbbbbbbbbbb...bbbbbbbbbbbbbbbbbb.....bbbbbbbb.....bbbbbbbbb.......bbbbbbbbbbbbbb.............bbbbbb", "....bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb..bb.bbbbbbbbbbbb...bbbbbb........bbbbbbbbbbbbbbbbbb...bbbbbbbbbbbbbbbbbb.....bbbbbbbb.....bbbbbbbbb.......bbbbbbbbbbbbbb.............bbbbbb", "....bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb..bb.bbbbbbbbbbbbb...bbbb........bbbbbbbbbbbbbbbbbbb...bbbbbbbbbbbbbbbbbb.....bbbbbb.....bbbbbbbbbb........bbbbbbbbbbbb.......bbb.......bbbb", "....bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb..bb.bbbbbbbbbbbbb...bbbb........bbbbbbbbbbbbbbbbbbb...bbbbbbbbbbbbbbbbbb.....bbbbbb.....bbbbbbbbbb........bbbbbbbbbbbb.......bbb.......bbbb", "....bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb..bb.bbbbbbbbbbbbbbb...........bbbbbbbbbbbbbbbbbbb....bbbbbbbbbbbbbbbbbbb.....bbbb.....bbbbbbbbbbbbbbb.....bbbbbbbbbbbbbbbbbbbbbb.....bbbbbb", "....bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb..bb.bbbbbbbbbbbbbbb...........bbbbbbbbbbbbbbbbbbb....bbbbbbbbbbbbbbbbbbb.....bbbb.....bbbbbbbbbbbbbbb.....bbbbbbbbbbbbbbbbbbbbbb.....bbbbbb", "....bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb..bb...bbbbbbbbbbb...........bbbbbbbbbbbbbbbbbbbbb....bbbbbbbbbbbbbbbbbbb.....bbb.....bbbbbbbbbbbbbbbb.....bbbbbbbbbbbbbbbbbbb......bbbbbbbb", "....bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb..bb...bbbbbbbbbbb...........bbbbbbbbbbbbbbbbbbbbb....bbbbbbbbbbbbbbbbbbb.....bbb.....bbbbbbbbbbbbbbbb.....bbbbbbbbbbbbbbbbbbb......bbbbbbbb", "....bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb....bbb......bbbbb..........bbb.....bbbbbbbbbbbbb...bbbbbbbbbbbbbbbbbbbbb.....b.....bbbbbbbbbbbbbbbbbb.....bbbbbbbbbbbbbbbbbbb......bbbbbbbb", "....bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb....bbb......bbbbb..........bbb.....bbbbbbbbbbbbb...bbbbbbbbbbbbbbbbbbbbb.....b.....bbbbbbbbbbbbbbbbbb.....bbbbbbbbbbbbbbbbbbb......bbbbbbbb", "....bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb.......bbbbbb..................bbbbb...bbbbbbbbbb...bbbbbbbbbbbbbbbbbbbbb.........bbbbbbbbbbbbbbbbbbbb.....bbbbbbbbbbbbbbbbbbbbbb.....bbbbbb", "....bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb.......bbbbbb..................bbbbb...bbbbbbbbbb...bbbbbbbbbbbbbbbbbbbbb.........bbbbbbbbbbbbbbbbbbbb.....bbbbbbbbbbbbbbbbbbbbbb.....bbbbbb", "....bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb....bbb.....................bbbbbbbbbbb..bbbbbb...bbbbbbbbbbbbbbbbbbbbbbb........bbbbbbbbbbbbbbbbbbbbb.....bbbbbbbbbbbb.......bbb.......bbbb", "....bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb....bbbbbbbbbbbbbbbbb.......bbbbbbbbbbbbb.bbbbb...bbbbbbbbbbbbbbbbbbbbbbb......bbbbbbbbbbbbbbbbbbbb...........bbb...bbbbb.............bbbbbb", "....bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb....bbbbbbbbbbbbbbbbb.......bbbbbbbbbbbbb.bbbbb...bbbbbbbbbbbbbbbbbbbbbbb......bbbbbbbbbbbbbbbbbbbb...........bbb...bbbbb.............bbbbbb", ".....bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb....bbbbbbbbbbbbbbbbb.......bbbbbbbbbbbbb.bbb....bbbbbbbbbbbbbbbbbbbbbbbb.....bbbbbbbbbbbbbbbbbbbbb...........bbb...bbbbbbb.........bbbbbbbb", ".....bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb....bbbbbbbbbbbbbbbbb.......bbbbbbbbbbbbb.bbb....bbbbbbbbbbbbbbbbbbbbbbbb.....bbbbbbbbbbbbbbbbbbbbb...........bbb...bbbbbbb.........bbbbbbbb", "bb...bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb....bbbbbbbbbbbbbbbbbbb..b...bbbbbbbbbb..bbb...bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb", "bb...bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb....bbbbbbbbbbbbbbbbbbb..b...bbbbbbbbbb..bbb...bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb", "bb...bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb....bbbbbbbbbbbbbbbbbbbbb....bbbbbbb.....bbb...bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb", "bb...bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb....bbbbbbbbbbbbbbbbbbbbb....bbbbbbb.....bbb...bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb", "bb...bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb....bbbbbbbbbbbbbbbbbbbbb.bb........bbb......bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb", "bb...bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb....bbbbbbbbbbbbbbbbbbbbb.bb........bbb......bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb", "bb...bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb....bbbbbbbbbbbbbbbbbbbbbb..b..........bbb..bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb", "bb...bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb....bbbbbbbbbbbbbbbbbbbbbb..b..........bbb..bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb", "bb...bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb....bbbbbbbbbbbbbbbbbbbbbbbb........bbbbb.bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb", "bb...bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb....bbbbbbbbbbbbbbbbbbbbbbbb........bbbbb.bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb", "bb...bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb...bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb..b....bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb", "bb...bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb...bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb..b....bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb", "bb...bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb...bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb...bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb", "bb...bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb...bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb...bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb", "bb...bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb...bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb...bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb", "bb...bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb...bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb...bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb", "bb...bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb................bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb...bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb", "bb...bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb................bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb...bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb", "bb...bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb...............bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb...bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb", "bb...bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb...............bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb...bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb", "bb...bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb...bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb....bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb", "bb...bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb...bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb....bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb", "bb...bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb...bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb....bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb", "bb...bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb...bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb....bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb", "bb...bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb...bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb...bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb", "bb...bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb...bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb...bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb", "bb...bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb...bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb...bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb", "bb...bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb...bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb...bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb", "bb...bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb...bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb...bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb", "bb...bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb...bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb...bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb", "bb...bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb...bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb.....bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb", "bb...bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb...bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb.....bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb", "bb...bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb...bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb......bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb", "bb...bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb...bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb......bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb", "bb...bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb...bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb........bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb", "bb...bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb...bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb........bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb", "bb...bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb...bbbbbbbbbbbbbbbbbbbbbbbbbbbb...bb...bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb", "bb...bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb...bbbbbbbbbbbbbbbbbbbbbbbbbbbb...bb...bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb", "bb...bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb...bbbbbbbbbbbbbbbbbbbbbbbbbbbb.....bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb", "bb...bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb...bbbbbbbbbbbbbbbbbbbbbbbbbbbb.....bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb", "bb...bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb...bbbbbbbbbbbbbbbbbbbbbbbbbbbb...bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb", "bb...bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb...bbbbbbbbbbbbbbbbbbbbbbbbbbbb...bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb", "bb...bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb...bbbbbbbbbbbbbbbbbbbbbbbbbbbb...bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb", "bb...bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb...bbbbbbbbbbbbbbbbbbbbbbbbbbbb...bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb", "bb...bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb...bbbbbbbbbbbbbbbbbbbbbbbbbbbb...bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb", "bb...bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb...bbbbbbbbbbbbbbbbbbbbbbbbbbbb...bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb", "bb...bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb...bbbbbbbbbbbbbbbbbbbbbbbbbbbb...bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb", "bb...bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb...bbbbbbbbbbbbbbbbbbbbbbbbbbbb...bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb", "bb...bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb...bbbbbbbbbbbbbbbbbbbbbbbbbbbb...bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb", "bb...bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb...bbbbbbbbbbbbbbbbbbbbbbbbbbbb...bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb", "bb...bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb...bbbbbbbbbbbbbbbbbbbbbbbbbbbb...bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb", "bb...bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb...bbbbbbbbbbbbbbbbbbbbbbbbbbbb...bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb", "bb...bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb...bbbbbbbbbbbbbbbbbbbbbbbbbbbb...bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb", "bb...bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb...bbbbbbbbbbbbbbbbbbbbbbbbbbbb...bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb", "bb...bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb...bbbbbbbbbbbbbbbbbbbbbbbbbbbb...bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb", "bb...bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb...bbbbbbbbbbbbbbbbbbbbbbbbbbbb...bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb", "bb...bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb...bbbbbbbbbbbbbbbbbbbbbbbbbbbb...bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb", "bb...bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb...bbbbbbbbbbbbbbbbbbbbbbbbbbbb...bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb", "bb..................................................................................bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb", "bb..................................................................................bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb", "bb..................................................................................bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb" }; xscreensaver-5.36/hacks/images/android.xpm000664 000767 000024 00000101375 12206476311 020655 0ustar00jwzstaff000000 000000 /* XPM */ static char *android_skate[] = { /* columns rows colors chars-per-pixel */ "320 103 3 1 ", "# c #000000", "@ c #A5C939", " c #FFFFFF", /* pixels */ " ", " @ @ ", " @@ @@ @ ", " @@ @@ @@@ @ ", " @ @ @@@@@@@ @ ", " @ @@ @@@@@@@@ @@ ", " @ @@ @ @@@@@@@@@ @@ ", " @ @ @ @@@@@@@@@@ @ ", " @@ @@ @@ @@@@@@@@@@ @ ", " @@@@@@@ @@ @@@@@@@@@@@@ @ @@@@@@@@@@@ @@@@@@ ", " @@@@@@@@@@@@@@ @ @ @@@@@@@@@@@@@@@@@@ @@@@@@@@@@@ @@@@@@@@@@@@@@@ @ ", " @@@@@@@@@@@@@@@@@@@@ @@ @ @@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@ @@ ", " @@@@@@@@@@@@@@@@@@@@@@@@ @@ @@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@ @@ ", " @@@@@@@@@@@@@@@@@@@@@@@@@@ @@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@ @@ ", " @@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@ ", " @@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@ @@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@ ", " @@@@@@@@@ @@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@ @@@@@@@@@@@ @@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@ ", " @@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@ @@@@@@@@@@@@ @@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@ ", " @@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@ @@@@@@@@@@@ @@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@ ", " @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@ @@@@@@@@@@@@@@@@@ @@@@@@@@@@ @@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ ", " @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ ", " @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ ", " @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@ ", " @@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@ ", " @@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@ ", " @@@@@@@@@@@@@@@@@@@@@@@@@@ @@@ @@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@ @@@ @@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@ ", " @@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ ", " @@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ ", " @@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@ @@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@ ", " @@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@ @@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@ ", " @@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@ @@@@ @@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@ ", " @@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@ @ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@ ", " @@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@ ", " @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@ ", " @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@ @@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@ ", " @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@ @@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@ ", " @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @ ", " @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@ ", " @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@ ", " @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@ @@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@ ", " @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@ @@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ ", " @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@ @@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ ", " @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ ", " @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ ", " @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@ ", " @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@ @@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@ ", " @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@ @@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@ ", " @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@ @@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@ ", " @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@ @@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ ", " @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@ @@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ ", " @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@ @@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ ", " @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ ", " @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ ", " @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ ", " @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ ", " @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ ", " @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ ", " @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ ", " @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ ", " @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ ", " @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ ", " @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ ", " @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ ", " @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ ", " @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ ", " @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ ", " @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ ", " @@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@ @@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@ @@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@ ", " @@@@@@@@@@ @@@@@@@@@@@@@@@@@@ @@@@@ @@@@@@@@@@@@@@@@@@@ @@@@@@@@@@ @@@@@@@@@@ @@@@@@@@@@@@@@@@@@ ", " @@@@@@@@@@ @@@@@@@@@@@@@@@ @@@@ @@@@@@@@@@ @@@@@@@@@@ @@@@@@@@@@ @@@@@@@@@@@@@@@@@@ ", " @@@@@@@@@@ @@@@@@@@@@@@@@ @@@@@@@@@@ @@@@@@@@@@ @@@@@@@@@@ @@@@@@@@@@@@@@@@@ ", " @@@@@@@@@@ @@@@@@@@@@@@@@ @@@@@@@@@@ @@@@@@@@@@ @@@@@@@@@@ @@@@@@@@@@@@@@@@ ", " @@@@@@@@@@ @@@@@@@@@@@@@@ @@@@@@@@@@ @@@@@@@@@@ @@@@@@@@@@ @@@@@@@@@@ ", " @@@@@@@@@@ @@@@@@@@@@@@@ @@@@@@@@@@ @@@@@@@@@@ @@@@@@@@@@ @@@@@@@@@@ ", " @@@@@@@@@@ @@@@@@@@@@@@@@ @@@@@@@@@@ @@@@@@@@@@ @@@@@@@@@@ @@@@@@@@@@ ", " @@@@@@@@@@ @@@@@@@@@@@@@@ @@@@@@@@@@ @@@@@@@@@@ @@@@@@@@@@ @@@@@@@@@@ ", " @@@@@@@@@@ @@@@@@@@@@@@@ @@@@@@@@@@ @@@@@@@@@@ @@@@@@@@@@ @@@@@@@@@@ ", " @@@@@@@@@@ @@@@@@@@@@@@ @@@@@@@@@@ @@@@@@@@@@ @@@@@@@@@@ @@@@@@@@@@ ", " @@@@@@@@@@ @@@@@@@@@@@ @@@@@@@@@ @@@@@@@@@ @@@@@@@@@ @@@@@@@@@@ ", " @@@@@@@@@ @@@@@@@@@@ @@@@@@@@ @@@@@@@@@ @@@@@@@@@ @@@@@@@@@@ ", " @@@@@@@@ @@@@@@@@ @@@@@@@ @@@@@@@ @@@@@@@@@ @@@@@@@@ ##### ", " @@@@@@ @@@@@@@ @@@@ @@@@@ @@@@@@ @@@@@@ ############# ", " @@@@ ##################### ", " ############################################## ############################# ", " ################################################ ################################################## #################################### ", " ################################################## ################################################### ########################################### ", " ################################################### #################################################### ############################################### ", " ################################################### #################################################### ############################################## ", " ################################################### ################################################### ###################################### ", " ################################################### ################################################## ################################ ## ", " ################################################# ############################################## ####################### ###### ", " ################ ###### ", " ### ### #### #### ######## ######## ", " ##### ##### ###### ###### ######## ", " ####### ####### ####### ######## ##### ###### ", " ####### ####### ######## ######## ####### ###### ", " ####### ####### ####### ######## ######## ## ", " ####### ####### ###### ###### ######## ", " ###### ####### ##### ##### ######## ", " ### ### ###### ", " ##### ", " ", " " }; xscreensaver-5.36/hacks/images/blocktube.xpm000644 000767 000024 00000203715 07677417127 021226 0ustar00jwzstaff000000 000000 /* XPM */ static char * blocktube_xpm[] = { "256 256 61 1", " c None", ". c #060606", "+ c #929292", "@ c #424242", "# c #5A5A5A", "$ c #CACACA", "% c #7A7A7A", "& c #B6B6B6", "* c #A6A6A6", "= c #626262", "- c #1E1E1E", "; c #8A8A8A", "> c #666666", ", c #E2E2E2", "' c #262626", ") c #464646", "! c #6A6A6A", "~ c #969696", "{ c #2E2E2E", "] c #6E6E6E", "^ c #7E7E7E", "/ c #4A4A4A", "( c #DADADA", "_ c #9E9E9E", ": c #C2C2C2", "< c #AEAEAE", "[ c #525252", "} c #3A3A3A", "| c #828282", "1 c #767676", "2 c #D2D2D2", "3 c #BABABA", "4 c #EEEEEE", "5 c #868686", "6 c #8E8E8E", "7 c #727272", "8 c #121212", "9 c #9A9A9A", "0 c #363636", "a c #5E5E5E", "b c #A2A2A2", "c c #565656", "d c #AAAAAA", "e c #B2B2B2", "f c #4E4E4E", "g c #1A1A1A", "h c #EAEAEA", "i c #BEBEBE", "j c #C6C6C6", "k c #3E3E3E", "l c #CECECE", "m c #D6D6D6", "n c #323232", "o c #2A2A2A", "p c #DEDEDE", "q c #222222", "r c #E6E6E6", "s c #161616", "t c #F2F2F2", "u c #0A0A0A", "v c #0E0E0E", "@@k}}0nn{ooqq-gg-k1~9~~+6;;5||^%117]]!>==a##c[[f//)@@k}}0nn{oo'qq-ggs888vuuu8}1~bd&jprrr,pp((mm2ll$$j::i33&&ee>====aa#####cccc[[[[[[[[ff[f[f[f[f[[f[[[[[[cccc#####aaa===>>!!!!]77111%%%^|||5;;66++~999_bb", ")@kk}00{{o''qq-gq)%99~++66;55|%^%177!]!>==a##c[ff/))kkk000{{{'q'---sssvvu8vsn]*:l(p,rhh,,,ppmm2ll$$j:jii333ee<<=>>!]]]]]771%%^^^|555;;6+~+~9_9__", "@kk}0nn{ooqq-ggs'[|~9~+6;;5|^^%177]]!>==a##c[[//))@@k}}0nn{oo'qq-ggs8s8sg'{@>d(4hhhhrr,,p(((22ll$$jjii333&&e=a##c#c[[[[f[ff/f/f////)/)//////////fff//f[[f[[c[c####aaa====>!!!]7771%%%%|||55;;66++~99_", "@k}}0n{{{''q--g-{a;9~~+6;;5||%%%17]]!>>=aa#c[[ff/)@@k}}nn{{o''qq-gggq'{})f#!~l4t4t4hhrr,,pmmm22ll$j:::i3&eee<>>!!]]]]1711^^^||55;;6++~~99_", "kk}0nn{oo'qqggsg0!6~+++6;;||^%%177!!!>=a##c[[f//)@k}}}00n{ooqq--qqon@f#=>]]^ac[ff////)/@))@@@@@@@@@@@@@@@@)@)))/)/)////f[[[[ccc###aa==>>!!!]]771%%^|||555;;++~~9", "@}}}0n{oo''---s-k1~~~+6;;55|^^%177!!>==aa##cff/)))@k}0nn{o{'ooon}@[a=7771]76:r4t4hhr,,,p(((222$$jj::ii33eee>!!]777111%%^|55;;66++~~", "k}}nn{{o'qqgggsq/%~~~+6;5||^%111]]!>>=a#cc[[f//)@@k}00nn{oo{n0@[=]7%%%%117%924tt4hrr,,p((mmlll$jj::i33&&e<>>!]]771%%%^^|55;;66+~", "}k000noo''q-gsgq[5~++66;55|^^%177]]>>==aac[[ff/))@kk}00nn0k)c>]%^^|^^%11]7^<(t44hhrrrppp(m2ml$$$::i333eee#/)@kkkk}kk}}}}k}kk}}kkkkk@kk@k@@@)))//f/f[[[[[c##aa==>>!!!]]711%%%^|55;;6+++", "}}nn{{o'qqqgg8s'c5~++;;;5|^%%177]!!>=aa#cc[ff/)@@k}00n00@fa]%||55||^%%71]]|3,tt4hhr,,((mm2l$$$:::ii3&&eec/kk}}00}0}000000000}0}0}}}}kkkk@@@)@))///f[[[ccc##aa==>!!!]]]11%%%|^555;6+", "}}}nn{{oqqg-gsgn>;~~+6;;|5|^%117!!!>==a##ccf//)@kkk}k@/a!%5;66655|^%%11771+jh444hr,,,p((2m22l$$j::33&&&<<#/k}00n0n0n0nn00n0n0000}0}}}kk}@@@))))//ff[[[cccaa==>>>!]!]7711%^^||5;;66", "00nn{o''q-ggs8s0]6++6;;5|^^%17]]!!>==##c[fff))@@kkk@f#]|;6666;;|||^%%17]]%b244hhrr,pp(mm2l$$$:::i33&eeedd*bb__9~~+66;;555||^^^^%^^||;69e2,rr,,p,(p((m222ll$$$j:j::ii33&3&eeee!!]7711%%^^|55;;", "}00n{oo'qq-ggsg@1+~+66;5||%^%177]!>==a##cc[/f))))f#>1;+~~~++6;55|^^%117]]|<,44hhr,r,(((m22ll$j::ii3&&<c@}nn{{{{{{{{{n{nnnnnn0000}}}}kk@@@)))//f[[c[##aaa=>>!]]]7711^^^||;5;", "00n{{o'q--gs88-/%+++;;55|^%117]!!>>aa#cc[ff//))/#]^;+~99~++66;55|%%%177]7;3,44hhr,pp(mm2l$$j::i3&&e<c)0noooooo'oooooo{{{{{nnn00}0}}kk@@)))///f[[ccc#a===>>!!]771%%^^|55", "0n0{oo''q-ggssq[|++66;5|^^%%17]]!>==aa#c[[f/f[a]|~_bb__~~~66;5||^^%177]]16jh4hh,,,p((mml$ljj:i33&ee!!]]7171^^||55", "0n{{o'qqggs888qc|+66;55|^%1177!!>>=a##[[fffca]|+_bbb_99~++6;;5|5^^%1177]%_lhhhr,pp((22$$$::i33eee[k{q'qqqqqq''''oooo{{{{nnn0}}}}k@@@))//f[f[c##aa===!!!7771%%^||", "0nn{o''q--gs8s{a;~+;;5||^^%17]]!>>=aa##ccc>759bd*dbb__9~++66;55^^%117171|dmhhrr,p(m22$l$::i33ee>>!]]711%^^|5", "nn{oo'qqggssvsn>;6+;;5|^%%177]!!==a##cc#=]59*ddd**bb99~~+6;;5||^%%1%771^63pr,,p((m2$$j::i3&&<>!!!]711%%^", "nn{{o''--gs88s0];+6;555|^%117]!!>==aa#=]59dee<<<**b_9_9++6;;55^^%1%1%^^59iprrppm2ll$j:i3&ee!!771%%^^", "nno''qqggs88vs0]66;;5|^^%117]]!>==aa=!^+*<&ee!!!]]71%%", "n{{{'qq-ggs88s@%666;5||^^%77]!!>>==!^~d&33&ee!!]771%%", "n{oo'q--g88vvg/%66;55|%%%1]]!!!==!7;be&33&ee<!!]711", "{{o''q-gggs88-f^666;|||^%11]]!>!759e3i:ii&&e>]]]771", "{oo'qq-gs88v8-f^;;;5|^%%%77]!!]^6d&::ii33eedddbb_9~~++;;555||||566~bd&i:$$$::i&&edd**__99+++66;;555|55555;;5;;66+~~_bb**d<<[}qg88ssssg-g-qqq'ooonnnn}}kkk@@)/fffcc##a==>!!]77", "{{o''--gs8vvvqc|6;;55|^%117]]^;b&:$jj:33&ee!]]77", "{o'qq-ggss8v8o=56;5|^^%17]7%^~d:jjj:i33ee;;;5||^%%%%^6*3$$$$j:ii&&ed**b_9~~+6;;;;;;6;++~9bd<&3i:::i33&e>>!]]", "o''q-ggss88ssn>5;;5|^^%%^5~!!", "{oo'q-gs8gssqk];6;55555;~di$lll$::i3&e>!]", "o'qq-ggggg-qo)75;6;;66~_e:$l$$::i&ee<*b_9~~++;;;5;;;;;++~99_b*d!", "{o''--gg-q'n@a^6+~9~9*fn-8888sgg--qq''{{{0n}}}k@))f/[[[###=>>>", "'qqq-gq-'{}/#1+9_b*de3:j$$$:i3&&c}q88v8ssgg--qqooonn00}}k@@)//f[c###a=>", "oo'--q-onk[!1+b<<&3i:j$$j:ii3&edd*b__9~+666;;;;;66+++~9~_b**d<>", "''q-q'o0/#75~*e&333ii:iii3&e^;bfogsss-gqqq'o{{n0}}kk@)/f[[[c#aa", "q''nkc]59_**<*ddd***b*bb___99~~~+66;;;;55555;55;;;66+++~99_bb*dd<<>>>====>>19jm22ll$$j::i3&&&edd**__9~~+6;55|^^%117]]]]7]771%^|56_bb<$(,,,,pppp(((p(p((p,,,rrrrrh44ttrld577!=/n-s8gsg-qq'o{{nn0}kk@@)/f[[c##", "oo{0[>%69bbbb*b*b**bb___b_9_99~+++66;;;;55555;;;66666~~~~99_bb***<<>===aaaa]_jmm22l$$$j::ii3ee<==aa#ac##!_$mm2ll$j::ii3&3eee>==#acc[c7d$m2ll$$jj::i3i&&&<<1|5|5555;;6+6++++~++~+++++++6666;;;;5555|55||5|5|55555;;66666~~~9_*d1%^%^%^|||;;;66;+++++~+~+~+++++6+66;;;;5;5555||5|||||5||||5;;5;66+~bb*dee&&333333&&&eee<>>aa#cc[[c1dl2llllj$j::33&&ee<!>>>!];3mp((2m2l$$jj:::jjj$j$$$l2m((ppp,rhh444,&57]7111![nqgg-q'oo{nn0}k@@)/ff[c", "qn@/=>!>>!>!]]711%%^^|5|;5;;6;6+66++6666++;;66;;555|5||||^^|^%^^^^^^^%%|55;++~__*dd==accc[[[>_:lll$$jjjiii3&&ee<<***bb_999++66;;55|^^%117]]!!>>>=!!5i(((m(l$$j::ii:iii::jj$$lll2mm(p,,rhh44h2*^177%%%!c0'-qqqo{{n00}}k))//f[[", "q{@/c####a#a==>!!!777%%%^|||;55;;;;6666;666;;6;;;5;555|5||^^^^%%%%11111%%%^|5;6+~__b***<<<<<==a=>|e(p(22l$$j:iii3iiii:::jj$ll2mmm(pp,rh444,i;77711%%][}qqqqqoo{nn0}}k@)/f[[", "'nk)c#c[cc##aa=>>]!!7111^^^||55;;;66666+666++6++666;6;;5;|5||||^^%^%%%111%^^|5;;6+~9_bb**d<<<<=aacc[ff=;&$llljj::iii&&&e<>==#=1dl(((2l$:i33&e3e&333i::jj$$ll2(p(p,rrhh4h2b%771%%%^7c}'qq'o{{n0}kk@))//f[", "qnk@/f//fff[cc#aa=>>!]]]11%^^^|555;;;666++6++6+++6+6666;6;;;5||^|%%%111111%%%^^|5;;+~99__bb**ddddd***bb_99~+6;5|^%177!!>a=#c[[fa;e:jjj$:i:33&&ee=aa#a!9j((m2l$ji3e&aaac[[#|>>==a#=^el(m2lji&eed<!!]171%^||55;;;+++~~~~999999~99~~~~+++66;;;55||^^%%%1%1%%^%^|5566++~~_9_bbb*b*bbbbb__9~~+66;|^^%7]]]==a#[[c%b&3::i::i33&&e<>==aa#a!+32(22l:&dd**dd<>!!]11%^^|5;66+~+~~99_99__9____9_99~9~+~+++;;;5||^^^%%%%1%%^|55;;66+~99_9_bbb*bbbb*bb___~~+6;;5|^^17!!==##[#!6*&3::i::ii3&eee<>==aa#a7~3$2lj3d_9___b*ddee&&33i::$$l2m((pp,rrh4,e|7771%^^||51a@{oo{{n0}kk@)/ff", "okcc[[f/[[[c#[#aa=>>!7]7%%%|5|;;6++~~9999b___*bbb_b____999~++++;;;55|^^%%1%%1%%%%^^|5;;6++~999___bbbb_bb__999~++6;;|^^117]>>aac#=^+b<&333i3&&&e<==aa##a]5bee>=]!!]77%%%|55;6+++9~9b_bbb***b**b*b*bb__9999~+++;;;5||^^^%%%%%^%^||5;5666+~~999___b_bbbb____999~+6;55^^11]]>=a#ca]5~b<&iii33&e&e>==aa##a>7%^^%^|;6~~9bb*d<==>!>!7]]17%^^||;;;++~999_bbbb*********bb*bb_99~~++66;55|^^%%%1%11%%%^^^55;;66++~999_9_______999~~+++6;55||%17]]!>aaa>15+bd<&333&ee<>>>=aa#aa==>!!7^5;+~99_**dee&&3i:jjjll2m((,rrhhhm*%!]]71%^||5;;%#k{onn0}kk@))/", "1%17!!>!!!>!!!]!]7771%%%^||;;6+~~99bb*b**d**dddddd***bb__99~+++6;;5||^%%%1%%1%^%^||55;;66+~~~9999______b___9999~~+6655|^^17]!>=aa=!15+_d<&&33eee==>=aaaaa=>]]%|566+9__**d=aa=!156_*dee&e<<>>==>>==>>>!]1%^56++9__**<>]15+_d===>=>!]71%||56+~9__**<!%|69*d!!]!]71^|5;66~9_bb*d>]%569*d<!!=>!7]%%||;;6++~9~99____9__9_99999~9~~~+++666665555|^%%77]!>>=a=>!]%|69bd>>==>!7^5+9bd<<>=a####]^55++~9__bbbbbbb*bbb_b___999~~~~++666;66;6;555^^%%11]]!>>=====>!7^569bdd/k}k@)", "6;55|^%%%%1171|6+~*d<&3i:::::i::333&e&<>=aa#c[#]5+9_b*dddd<>===>!]1^;+9bdd<<<**b___9~~~6666;;555||^^^%%%11177777717%1%%%||5;;6++99_b*d<<&&3i:::$llmm(pp,rh,:6!!]771%^^|5;;6++99_95=/@@))", ";;5|^%%17717]75~bde33:jjjj:jj:ii3&&e<==a##c[[f[!;_bddddd>====a=>!]1^5~9b**dd***_99~~+++6;6;55||||^%^%%%%11%%11%111%%%^^||5;66~~99bb**d!!771%^|||;6++~99_9^=)k@)", "6;55|^%1177]]75*&3j$$$llll$$:::i33&&e>aa##[[ff[!+dee&&&&eee<<==a===>]1%5;~_*dddddb*b__~~~++6;66555||||^^^%%%%11%%1%%%%%^|||5;;;+++99_b*dde&&3i3:j$$22m((p,rrp&|!!!771%^^||;;6+~~9__b~%a/)@", ";5||^%%11]!!!!5d:j$222llll$j::333ee>=a##cc[f/)/a+<&&33&&&ee!>==aaa==!!7^56~_**d*d*___99+~++66;;;;55|^|^^|^%%^%%%%%%%%^^^|55;;66+~9_9bb*dd!!]]71%%||5;;6+~~__bb+7[))", ";;55|^%177]]!]5elmm(mmm22l$$j::3&3e<==aa====>!7%|;+9_*ddd**b__99~~++66;;;5555|||^^^^%^^^%^^^^^||||55;6++~~9_b**d>!]71%%^|55;;+~9_9_**b+][/", ";;|^^^11]]!>>>^d2(pmm(m22l$j:ii3&ee>aa#cc[f//))f|<:::ii3&eeedd*bb__9~++6;;555||^^%1%1117]]7]!]!!!!!!>>>>>==a#a#a==!!7%|;~9_**d**b_99~~+++666;;;5|5|||^|||^^^|^^||||555;6;66~+~9__bbddd<&&i3:jj$$22m((p,r,j~]>>!]]71%%||5;66+~9__b**b5>f", "65;5^%%117!!>>%dmr,,p((mll$$:jii3&e<aa#c[[ff))f7djj::ii3&&e<>!!>>>===a=aaa#a=>]71^;69bbddd**bb99~~~++666;;;;5;||5||^|||^|||||||55;;6;++~99__***d!!]711^^|55;6++~99_b*ddb5=", ";5||^%177]]!>=7b2,,p((m2ll$j::33&ee==a#cc[f//)@)>_ij:i333ee!>>=>===a==aaa==aa####aaa=>]7%56~9_b*d*bbb99~+~++666;;;55;5|5|5|||5||||5555;;;;++++~_9__bdd<=!!]]11%%^|5;;6++99_bb*dd_|", "6;5||^%%77!!!>7_lr,,p(m22$$$j:ii3&e=====aaaaaaa####a#####a=>!7%|;+9b**ddd*bb_99~~~~6++6;6;;;;55|555|5555555;;;6+6+~~999b***ddee&&3ii:$$$22mp(p,,2b7=>>!]77%%^|55;6++~9_bb*dd==>+:p,p((m22$jj::i3&&eedd*bb99~+66;5||%%%1]]!!>==a#c[[f//)))[|e::i33&ee>=>==####c##c#cc#ccc[ccc##a=>]7^5699bb***bb9_~~~~++6666;;;;555;555;5;555;;;6666+++~~9___b*dddee&33i::j$$l22m(p,pj~]=>>!!7711^^|5;;6+~~9_bbdd<!5:pr,p(m22lljj:i33&ed=aa#c[[f//@@/1*:::ii3&&e<<**b__99~~66;;55||^%177]!!!>>a##aa##ccc[ccc[cccccccc#a=!]1^5+~_**dd**bb__99~~~~++6+6;;6;6;;;;5;5;5;;;;;66++~~9999b***d>=!!]711^^|55;6+~~9_bb*d<<&e", ";55|^%117]!!>=>^&(pp(mm2l$$j:ii3&e&=a##cc[f//))@@=~i:i33&ee=>>=##cccc[[ff[ffffffff[[c#a=!]%|;~9_b***bbb__99~++~++666+;6;;;;;6;6;6;66666++++~~____bb**dd==%dm,,p((22l$j::i33&<===a#[cff//@@)#;e::i33&ee=aaa##cc[[[[f/f/f//fff[[c##=!7%|;~9bb*ddd*b__99999~~~+++6+6+6666;666;6666+6+~+~~999__b**<>!]7111%^|5;666~~9_b**d<<&&", ";;||^%%17]!!>=a79lpppmm2ll$j::i3&&e=a###[[ff/)@kk/%diii3&&e<>=a##cc[[fff///)//)/))/f[ca=>]%|;+9_b***bbbb__99~~~+~+++6+66666+666+66+++~++~~999_bbbbd*dd>=!~jp,(pmm2$ljjii33ee<>==acccf///)@@/>_3:ii&ee<=aaa##c[[[f/ff//)))@))//fc#=!7%|;~9bb***d*b______999~9~+~+~++++6+6+6++6++++~~9~9_9_b*d*>!]7711%||55;6+~~99bb*<<53(p((222$$j::i33ee>>=aa#cccfff/))))@@@@@k@)/c#a>]%|;+9_bb*b*bbb_9_9999~~~9+~+++++~+~+++~~~+9~~99___bb*bbddd<!!]71%%^^55;66+~99_bbdd=>^&(,(p(2l$ljj:i3&&e=aa#cc[f//)@kkf%diii3e&e<=>=aa##[c[fff))@@@)@@@)@/fc=]7^56~9b*******b_b____9_99~9~~~~~~+++~+~++~~~~9~_99__bb*d*d<!!]771%%|55;;6+~99_b*dd>aa#cc[ff))@@k}@>93333ee==a#a#c[[[f//)))@kkk}k@@)f#a!1^56+9_b****bbb__9_9_9999~~9~9~~~9~+9+999~99999_b_bbbb*dd<!]771%%^||;;6++99__b*d<==aacc[fff/)@@k@c;ei3&&ee>>>=a###cc[fff//)@@@kkk@)/fc>]%5;+9_b*****bbbbbbbbbb__9_999~~~~~~9~9~~~999_9_9_bbb*ddd<aa=>!!!]711%^||5;6++~9__bb*d>=a#>5i(((m22$jj::i3&ee=aa#cc[f/))@kk}})1*&3&&eedd**b_99~+++6;;|||^^%%71]]]!>===a###c[[[f//)))@kk}kk)/[#>]%56~9__bbb**bbb________b99_9__9_9_9999__99_9__bbb****d!!]711%%||55;6++~9_bb*dd=aa#cc[ff)))@}}@=93i3&&e<===a##cccfff//)@@@k@k))[c=!1|;+~_bb***b**bb*b*bb*bb_bb__99_99999_999___bbb_bbb**ddd!]]]71%^||55666+~99bb*dd<&e&", ";5||^%177]!!>=a#a7dl(mm22l$j::333&e>==#ac[[f//)@kk}}k[5<&&ee>=aaa##[[[fff/))@@@@@@//[#>]%|;+99bbb**bb**bbbbbbbbb_____b___b_b_____b__bb****d*dd<<!]771%%^|55;6++~99_bb*dde&&", ";;;5|^^%17!!>>=aa]_lpp(mll$$j::3&&e>==aac[[f//)@@kk})7b333ee>==aa##cc[f////))@))//[#>!1^5+~9_bb*****bbb*b*b**bb**bbb_b_________b_b*bbbb***d<<<!!]71%%%^55;;6+~~___**d==a#=;im(mmll$jj:i3&&eaa##c[[f/))@k}}}ka+<&&ee==aa##cc[[ff//))))//fc#a!7%|;+99_b*bb*b*b*b*b**b**bbbbbbbbbbbbbb**b*bbb*d*ddd#c##a==>!!]77%%^^||;;6++~9__b*dd=a#=|&m(mm2ll$::ii3&&e=>a#ccc[ff/@@kk}00f%d&&&e>>=a##c[c[f/f//)/f/fc#=!]%|;6~9_************d**dd*dd**bbbbbbbbbbbbbb*******ddd>!]]771%^^|5;;6++~99_b**d==a##1*l(mmll$$::i33ee<==aa#c[ff//)@k}}00@=9eee<!!]777%%^||5;;6++99bbb*d<=aaa>~j(m22l$jjj:i&3eeddbbb_9~~~66;5||^%177]]!>>=a#c[[f/)@)@k}}0}[|d&&&>=a#a#c[[f////f/f[ca=!]7%|5;+9_bbb**d**ddd*ddd!!]]71%%^||5;6++~999_b*dd==aa#ccfff/@@kk}0nnk!9eee==a#c[[ff/////ff[[#a>>]%%|;66~9_b_b*******ddddd<==aaa===>>!!771%1^|^55;6++~9_bb*ddeee&3", "6;;5|^^%11]!!!==##a1<2mmm2$$j::ii&&e=aa##[[f///@@k}}00}c;deee==>>>=>>]]]]771%%^5|;;6+~~99_b*d<>=a###!9$m2lll$j::33ee<=aa#cc[f/))@kk}}nnn@7_ee>=a#c[[ff/////f[[[ca==!77%^|5;6~~99__bbb***dd=>>>>]!]71%^%^||5;6+~99_bb*dee&&3", "66;|5^%%177]!>==a##=;immmll$j:iii3eedddbb_99~~+6;;55^%%17]!!>>=a##[c[/f))@@}}0nn}#;de<<<***b_99~~6+;55||^%171]!!>=a##cc[[f////ff[[#aa>!!7%^^5;6++~9__bbb__bb*=aacca%el2ml$$jj:333&&eddbb_99+++;;5|^^%117]!!>==a##[[[//@@@k}}0nnn)]_!>>>!!!!]]711%%^|55;6+~~_b**d==aa#c]bl(22ll$:::3&ee==a##c[ff//)@kk}00n0}#;de<>!777%^|55;;;+66+6;;5^%%;9*e&&&ee&e=a##cc=6:222l$$:iii3&e>=a##c[[f//@@kk}00n{n@]9!]711%%^|||5||^^%1]!=a=]|~*>>>>>>!>!!]]771%^|||;6++99_*dde&", "+6;;||^%117]!!=>a##c=^e2m2$$jjj:33eee==##cc[ff)))@}}}0000ka;*>a##cc[f[f/f////ff[fccc#aa>>>!!]]111%%%%1777!=ac[)))[>^+_dee&e&e&eeeee!>======>=>>!!!]]717%%^55;6+~9_b*==aa#[#]bj22llj::i33&e<==aa#[[[///@@@k}}0000}f19**bb9~~+6;;5^%%7]!!>=a##c[[ff/f/)/////ffff[[[c#c#a===>>!>!!!!!!>aaccf)@k}0}kfa159b<==aaa###cc#cccc#a#aa===>!!]77%1%||5;++~__*d<", "66;;||^^%77]!]=>aaccc=6i222$$j:ii3&&e>=aa#c[[f//@@kk}k}k@)f>6*b*__~+6;5|%^177]!=>aaacc[[[ff/ffff/ffff[[fcc[c##a##aaaa=a=aaa#c[f//)@k}00nnn0)[=1569b*d**b__~+65|^%777!]!!>!=>>====aa#c#c[c[[[ffffff/fffff[c[c##aaa>>>>!!771%^^5;6+~~_b*<", "66;;||^%%17]!!==a##[ca%e$2ll$jjiii&eedd**b_9~~+66;55|^%117]]!>=a#c#[ff/))@kkk}kkk@fc>^9_9~++;;||^117!!!>=a#cc[[fff///)))///////fffff[[[[cccccc[cc[fff//)@k}}}}nnnnnnn0k)[a!%|5;;;||%77!>=accc[fff/f////))))))@@)@@@k@@k@@@)))))///fff[[c###a==>>]]77%%^||;6+~_b*", "+6;;5|^^1177!!>>=a##[c]b$22l$$::i33&eedd*b__9~++;6;||^^%177!!>===a##c[ff/))@@@@@/fc=!^699~+6;||%%17!!>=aa#a#ccc[ffff/ff///////f//ffffffffffffff/////))@@kkk}0n00n{n{{{{n00@)fc#a#aacc[//)))@@@@@@@kkkkkkkkk}kkkkkkkkk@@k@@@@@))/f//[[[ccc#aa==>!!]771%^^5;6+~9_b", "+6;55|^^1177!!==a##c[[a6illl$$::i3&ee=a#c[c[ffff//////)))/)///////))/)))))))))@)@@kkk}}}}}000nn0n0nnnn{nn000}k}}k@kk@kkkkk@}k}k}kkkkkkkk}kk}kk}kkkkk@kk@@@@@)))///fff[c[c##a==>>!]]71%%^|;;6~9_", "++6;55|^%%7]]]!>=a##[c#1d$2l$jj:i333ee<<**b_99+++;;5|^^%%1]]!!>=aa#ccff/)/))//[[#=>7%|5;;;5|^%117]!!==aaa##c[[[[ff/f////////))/))))//)))))@@)@@)@@@@@k@k}}}}0000nnnnnn{0{nnnn0n0}}}}}}k}kkkk@k@k@kkkkkkkk@kk@kk@k@k@k@)))))///f/fff[[[cc#aaa===>!!]7771%^||;6+~_", "+66;5|^^%177!>>>=a##[[[>~illljjji33&e=a##[[f///))/)/f[#=!!1%^|5|||^%%17!!>>==###ccc[fffff//)//))))))))))@@@@)@@@@@@@@k@@kkkk}k}}}}}}00}000n00n00}00}}}}}}kkkk@k@@@@@@@k))@@@@@@@)@@@@k@k@@@@@@@@))))/f/fff[[[ccc#a#===>!!!]77%%^^55;+~9", "+66655|^%%17]]!>==#ccc[#|&ll$$j::i3&ee>=a#cc[ff///ff[[#a=!!%1^|5|5|%%%7]]]!!==aaa##ccc[[fff//f/////)//)))//))))))@))@)@)@@@@@@@k@k}}}}}}000}00000}00}}}}kk@kk@@@@@)@)@@))@@)@))))@@)@)@))))@)))))/)//f/fff[[[c[##a#a=>=>>!!]7711%^||5;6+~", "+66;55|^%%17]!!>=aa#c[fc7b$l$$j::33&ee!]1%%^|%^%^1%1]]!>>>>a#a#cc[[[[ffff////))/))))/)@))))@)))@)@)@@@@@@@@kkkkkkk}}k}}0}00}}}kkkk@@k@@)))))/)))))))))///))))/))))))@)))))))/)////fff[[[[cc#c#aaa==>!!!!]]7111%^||56++", "~~66;5||%%17]]!>==##cc[f=+i$l$jj:ii3&ee<<*bb__9~+6655|%11]!!>=##c[[ffff[[[c#a=>!77%%%%^^^^11777]!!>>a==###c#c[c[fffff/fff/f/////f//////)////)//)//)@@@@@k@}kkk}}}k}}}kkkk}@@@@)@@))//))/////////)///f/////f/////)////f/ffff[f[[[c#c#a#aaa=>=!!!!]77711%^^||5;;6~", "++6;55|^%%17]!!>=>a#cccf[1<$$lj::i33&e>!771%%%%11%1177]!!!>>=aaa###cc[[[[[fff/f///fff///f/f/f/f//////)/))/))@)@@@@@kkkkk}kk@kkk@)@@)@)//////ff//f//f//ff/f[/fff[fff/ff/////////ff[f[[[ccc###aa===>>>!!]]]7711%%%%^^|5;6+", "~++6;5||^%117]!!=aaa#[f[[!~j$$$j:i3i&ee##[c[fffffccc#aa>!]!7771%%^%%1%77]]]!!>>>>=>=a#a##c#cc[ccc[[[c[[[[c[[c[c[[[[[fffff/f////))))@@@@@@kk@k@k@@)@@)/)/////ff//f[ff[[ff[f/[ff[[[[[[[[c[f[[[fff[[[[[ccc##aaaa=>>=>!!!]]]]771%1%%%%^||55;;6+", "~~66;55^^%11]]!!>=a##cf[f#|&$$$j:i33&e<!!]777711%111177]]!]!>>===a=aa####c#ccccc[cc[cc[ccc[[cc[[[[[ffff/f//)/)))))@@@@)@@)@)@)@/f///ffffff[c[[f[ffffff[[[[c[[[[c#ccc[c[[[[[[[[[ccc###a#a===>=!>!!]]]71111%%^%^^|^||5|;66+", "9++6;55|^^%17]!!>>=##ccff[]_j$ljj:ii3&e=a#ccf[fff[[[[c##===!]!771111%11111717]]!!]!]!>>=====a=aaa###aa##a#aaaa#a##c#cccccc[[[f/ff//)))))))@@@@@))//f//fff[[[c[[f[[[[c[[ccccf[c[[[cc#cc##a##a###c#cc##aaaa==>>!!!]]]77711%%%^^|^|||55|5555;;;6+", "9~+6655|^%1177!!>==#accf[f=;&$$j::i3&&ed*b__9+6;||%1]!!=a##[[ffff//f[[[c##a===!!!!]]77117111711777!]!!!!!!!>>>=>=====aa====aaaaa#a#####cc[[c[ffff//////)))@/)))////f/[[[[c[[[[ccccccc[c[[[[[cc[[[cccc#a#a#=aaa#a###aaa#aa==!>!]!]]777111%%%^^||55;;55;;;5;5;;;6+", "~+++;;5||^^11]]!>==a#c[c/f[7*j$$$:i33ee=>!]]7771117111717771777]7]!!]]!!!>!!>>!>>>>>>=====a=aa###c#c[[[[[[fffff/////)))f///ff[[[[[cccc#cccccccccc#ccc[[ccc######aa==>>=>=======>>!!]]]]7711%%^|||55;;;;6666++++66+666+++~", "9~++6;5|^%%17]]!!==aac[cf/[a+3$jj:i3&ed*b_9~+;5^%17!>=a#c[[[f////f[ff[[[####a==>>>!!]]771111%1%%%1%11111777]7]]]]!!]!!!!!!>>>>>==a=aaa###cccc[[[[[f//ff///f/f/ff[[[ccc################cccc[ccc#ccc##aa====>>!!>!!>>>>!!!]]]717%%%^||||55;;66+6~~~~99999~+~+++++~", "99++66;5||^111]]]>=a#a#[[f/#^>a##cc[f[fffffff[[cc[c#aa===>>!>]]]]77111%1%%^^^^%%%%^1%1%111177777]!]]!!!>>>>=aaaaa###ccc[[[[[[[ffff//ffff[[[cccc####a###########a##c#ccc[##a#aaa==>!!!!]]!]]!!]!]7771%%^^||5|5;;6++++99999_bbbbb_bb999~~99", "~~+66;55|%%%77]!>>==#cc[[[ff>~ijji3&ed*b9~6;5^17]!>=a#cc[fff//ff//fffff[[[ccc#aaa===>!!!]]7]71%%%^^||||^^^%^%%%111117777]]]]!!!>=>==aa######ccc[[[[[[fffff[[[ccc####a#aaa#aaaaaaaaa######cccc##c#aaa==>=>!!]]]7]]7]]]7771%1%%^|||;;;66++~9~99bbbb****d***bb__99_", "_9~~6;65||^%%77]!>>=aa#cff[[a5>>!!!!771%|;;;;5;555||^^^^%%1%111777]]!!>!>>=>===aa####ccc[[[[[[[[[[[ccc####aaaaaa====a=aaaaaa####ccc#c#aa#===>>!]]77111%711711%%%%||555;6;6++~~999_b*b*ddd==##c[[[f////////)/////ff/[[[[[c[cc##aa#a====>>!7^5;6;;;55||||^^%^%%1777]]!!!!!>=>===aaa#a#####cccc[[[[c[cc##aa=a==>>>>======a===aaa###c####a##=a>==>!!!]]7111%111111%%^^|||5;;666++~~9___b**dd<<>>aa#c[[cca!6ei3&<*_9~65|^17]!>>a##cc[f[[ff/////////////f//ffff[f[ffff[[f[[[cc##]5+++66;6;555|5|^^%%%171777!]!!!>>====aaaa#####cccccc#c#ca#aa==>======>=>======a=aaaa##c#####=a==>!!]]7111%%^%^^^%%%^^^||55;;;6+~~99__b***dd==aa#cccc=]|b&&<*b9+6;|%%7!!==###c[[[f//////)))/))))@)@))))@)))@))))))))@@@@@))f!|6++66;;;55||^%%%%%1777]]!!!>>!>>====aaaa####ccc#c###a#a===>=>!!>>>=!>>>>>>===aaa#####caaaa===>>!!!]711%%%^%^%^%%%^||5|5;;;6++~~99__bb*dd<>=a#c###=!%;_<==a##c[[f[f/f////))/))))@))@@@@@k@@kk}}}}00n00n{nn0/>5+++++6;;;5|5||^%%%%177777!]]!>>>======aaaaaaa##a##aa====!>!>>>>!!!>>>>=====a=aaaaa#cac#aa==>>]!]7771%^|||5||^^^^^|5|5;;6+++~~99__bb*dd<=aa###==]|6~*db_~+;5^%7]!!>=a###cc[[fff///)))@@)@@@@kkkkkk}}}}}0}0nn0{n{ooo'qqqoka^++6+66;;5|||^^%%11177]]]!!!!!>>>====a=aa######aa===>!!>!!]]!]!!>!>!>!>>>===a=a#####a##===>!!]!]71%%%%||||||||||||55;;66+++~~99__b**dd==#a#=>]1;+_b*b9++6||%%7]!!===##ccc[[ffff/////)))@)@@@@kkkkk}}00nnn{o{o''qqqq-ggq}a|6~+66;;555|^^^%%%1117777]!]!!!>!=>===aa==aaa=====!>!!]!!!!!!!!]!!>!>>>>=>a=aa=#####a===>>!!]7771%^||555;5;5||||55;6666+~~9__bb****d==aaa=>1^;~__99~+;|^%17]!>>=aa##cccc[[f/f///)/)))@@)@@@kk}}}0}0}0nnnooo'qq--ggs88gn#%;+66;;555||^^%%%11177]]]!!!>!>>>>>>==aaa=====>!>]]!!]]7]7]]]!!!!!!!>>>=>===aaaa##a#a>=>!!!]71711%^||55;5555|5555;;6++~~~999_bb*ddd==a=!]^5+9___9~;;5|^%7]]]!=>==aa#ccc[[c[[[f[fff/ff/)))@@)@kk}}000n{{o'''q-g-sss88g0#^;+666;555||^|^%%%1171777]]]!!!>>>=>>>=>=>=>!!!]!!77]7]]]]]!]!]!!>>>>>>=====a##a#a===!>!]]771%^^|5|;;6;6;;;;5566;6++~~~99_b*b*dddeee&33i::jj$l$l2mmmm((", "_b99~+6;;55|%%1177!!>===>!7^5+~99~++;5^%117]!!>==aaaaa###ccc[[[[[[[[fffff///)@@@@k}}000n{{o'qq-ggg8888vsn#%;6;;;55|||^%^%%11177]]]]!!!!!!>>>>=>=>=>>!!]]7777777177]]]]]!!!]!>>========a#aaaa==!!!]77711^^^||5;;;66;;;;;;66++++9999_bb**dd<==>!]%56~~~9++6;55^^1777!]!>>====aaaaa#a#a####cc#c[[[ff/f/)@@kk}}nnn{oo''q-gggs8vvvs{c%;666;;;|5||^^%%%%1111177]]]]!!!>>>>>>!!]!]]77771777]]]]]]]!!!!>>!>>>>====aaaa#a==>!!]7711%^%^|5;;;6+666;66;;6++~~999bbbb**===!7%56+~~+66;5|^%%17]]!!!>!!>=>>>========aa=aa###cc[ff//)))@k}}0n{{oo''q-gss8888vv8{c%;;;555|||^^^%%%%17777]7]!!]]!!!!>!]!!!771771171711777]]]]]]]!!!>>>>>=====aa=a=>>!]!]]7111%^|||5;;6+6++;;6666++~~~99_bb**dd<>>!]%|;6~~+~+;;55|^%1%17777]]!]]]!]]]]]!!!!!>>>===###cc[ff//@@k}}00n{{o'qqq--gssvvvuvs{c1;;6;;555||^^%%%1%11777777]!]]!!]]!]777711111111777]7]]!]]!!!!!!!>>>!!>===a#===>!!7771%%^^^||55;66+~+++++++~~~99_bbb**ddde<&e&33ii:jjj$ll2m2(pp,,(l", "*bb_9~++6;5;|^%^17]!>==!]1|;;+~++6;;||^^%%11177777771777777777]]]!!!>===a##c[[[//)@@k}}0n{oo''q--ggss8vvuuu8{[15;;;55|||^^^%%111111]7]]]!]!!]]]7]]1%1%%%%1%1111777]7!]]]]!!!!!!=>>>>>=>=a==>!]]]717%%%^^||555;66++++++++++~999__b**ddde>!]1^|;6++++66;;|5||%^^%%^%^^^^^|^^^^%%%1%177]]!!>==aac#[ff/))@kk00nnn{{'qq-ggs8888vuuu8o[7|;;555||||^^^%^%111117777]7777]7%%%%%%%%1^117777]]]!]!!!!]!!]!!!!]!>>>a====>!!]711%%%^||||55;66~~+~~~++~~99__bb***dd=>!7^|;+6+66;555||||^^|^^^|5||5|55|||||^%%117]]!!>==aa#ccfff)@@kk}}nn{o'''q--ggs8vvvuu.u8o)>^;5;5|||^^%^%%%%177117777]771111%%%%^^^1%1%1777]]7]]]7]]]!!!!!!!!!!>>=a=>=>!!7]711%%^^||||||5;+~~+~~~+~9999_bbb**d", "!]]%^5;666666;655555555;;;;6666+6;6;;5|||^^%%117]!!==a##[[[///@@k}00nn{{o''q--gsss8vvuuuuv')!|66;;5|5||^^^%%%%%1111711111%%^^^^|^%%^1%7177]]7!]]]]]]]]]!!]]!]!!!>=>>=!!!77111%%^^^|||555;66+~9~99999__bb***d<<!71^|;;666;;;55555;;;66++++~~+++++66;;5||^^%777]!!==a##c[[f//@)@k}0nn{{oq'q---s888888s8--'}#%~b_9+;5||^%^%%%1111777171%^%%^|^^^^%%^1%717]]]]!]]]7]7]]]]]]]]]7!!!==>=>!!]711%%%^^^^^^^|5;;6+~9~99999__bbb*dddaaa", "!!7%^5566;;66;;;;;66+~~99____9_99~~+66;;5||^%%17]!!>==a##c[ff//@k}k}00{o{oqq-ggggsgsqo0@@f[c=^_3ji&>>=>!!77711%%^^|||||||^|56+~9_9_9__bb**ddd<>>!]7%^5|5;;5;5;55;;66~9_b_bbbb_b_99~~++6;;||^%1177!!>===##ccff)/))k}00nn{oo'qq-gg--{}/ca>!]]]]16d$ppmli<_65|^%%%%1%%%%^^||||5|^||^%%111177]!]!]]71717777]77717]]!!>>>>]!]7711%%%^^%^%%^^^|;6+~999____bbb*ddd<77%11177711;*j,hh,($&b+5|^^%^%^^^||5|5||||%^^^%%777]]!]]7]7777777711111777!!!!>>>!]771%%%%^^||^^^%%^|5;6~9_b_b_***dd<<=!!]7%^^|555555555;5;6+bd<<<==a#c[ff/)@@k}00nnooo'''{@c!1^^%^%%1177771|9ip4t4hpl3*65^^^|^||5|5555|||^^%%1%17]]]]!!777111111711111%177!!]>!!!]7771%%%^%^^%%%%11%|5;+~9__bbb**ddd#c##a==>", "e=aa#cc[[//)@kkk00nnooq'nf>%|5|5|^^%%11777]1%+e2r4tth,$&96|5|5555;;;5||||^^^%%1]7]!!]]]]77717111%%%%%%11177]>!!>!]77%%%^%^^%%%%1111%^56+9_bb**dd<<>", "=a##c[[f/))@k}}0{{o{{}[]|5;5|||^%%%11777]7]1|b:p4ttthmi*6;5;;6;;5;55|||^%^%1177]]!!]7711%%%%%1%11%^%%%1]]]!!]!!771711%%%^%%7177171^|5+~9bbbb*dd<!", "&<!!]71%%||^5||||%^%7]!!=!6d333&&<===##c[ff/)@@k}000{{}[75;;5;5|^^^^%%%1777]]]1^+<$,4t4h,$e~+6666;;5|5||^^^%%17]!]!!!]]11%1%%%%^%^^^%^%11%7]]!!]]]71%%^^^^^^%%177]711|56~_bbdd!!!", "ee<!>!]71%%^%^^%%%11]>=#c[[]~e3&&&==###[ff/)@@k}0nn0}c7;6+6;555|^^%%1111777]]]]159imhtt4rl&_+++66;5|||||^^%1777!!!]!]7%^^%%%^%^^^^||^^^117]]!!]]771111%%%%177]!!!]77%|;+9b*ddd<cc[cc##a===>!!", "eeeddbbb_~+65|%1]!!>]]711%%^^^%^%%7!!>ac[f/[1b&i&e&e<!>]71%%%^^|^|^^||^^||%^177]]]]7771%%^^%%%11]!!!!!]7%|569_bd!!]]", "&ee!!]7111%%%177]!>a#cf/)@@c|*33&e<==aac[ff/)@@k}00)>5++++6;;;|||^%%%%1171777]7]]]7|~ej(,p2:d~+6;5|55||^^%^11]]!>!!]1%%|||^|^|||^55|||^^^177!!]]711%1%%^%117!!!>>>!]]%|;9bb*d!!]]", "&3ee]!]]771%%%1%1]]!aac[//))@/>+<33&&<=a###c[f/))@k}k[1+99+666;555|||^%%%1%17177]]]]]71|9&$2$id96;5|55|5|5^^11]!>>>>!77%^|^|||5|5|5||5|||^%17777]111%%^%^%%%7]]>==a=>!7%|6~_*<<&e333iii::jjjll$$&_|!a[[[[c#a#a=>>>!]]]1", "3&eedddbb9~65^%7!!!!!!]]771717]]!>=##[f//@kk}f]9e3&ee=a#c[[f/)@@k}@a5999~+6;6;55|^^^%%%111117777]]!7]]159d<]1%^|5||5|5555;;5;;|||%%177]]77111%%%%11]!>=aaaa=>!7^5+9bd!!!]77", "33eee!]]71771177]!==#[[f//@)kkk[%b&3&&e>==aa#[[ff)@@kf7~99~++66;;55|||^|%^%%117177]777!]777^5++~+6|5555555^^^17!>==a!!1%^|5;5;;55;;556;5;5^|%17717711%^^%^^%77!>==aaa==>]1|+_*>!]]]77%", "33&eedd**_~65^%7]!!!>!!]]77]7]!!=a##c[f/)@@@k}k#|*&&eeed**bb999~+66;55|^^%117]]]==aa#c[ff/@)@#^9__9~++6;;555^|^^%%%%%%711117]7]]]]!71^^|5;555;;;5;||^1]!=aaa!7%^|55;;5;;5;66;6;;;5||^%7777111%%%%%%1]!>=##c#c#a=!1^6~bd<&33iii::jjieb5]#f//fff[[cccaa===>>!!]71%", "i33&eed*__9+;|%7]!!!!]!]7777]!!>>=#c[[[//))@k}k@>+e&3&e<!>=a##ccf//@)#5_b99~~666;55|5||^^^%%%1%111711777777177^^||5;;5;;;55|%%]>a##=>]%||5;;;6;;66;;6;6;;;5^%%1%111%%%^^%%11]!==a##c##a=!]%5~_de&3:i:jj:3e_5]#f/f//f[ccc#aaa>=>>!]]711%%", "i3&eee=aa##c[[f/)@@k}}})!9<&eea##=!1%5;;;;;66;6666+++66;55%%17117%%%%%%%17]>a#ccccccc#a!756_*<&3::i3&*+^!#f/))//ff[[c###aa=>!!!!]]7%%^", ":ii3&<=aa##c[ff//)@kk}k[1*&3&ee>=aac[[///=;bb_9~~666;;55|||||^^^%%%%%1%%1111111%%^|||;;6;;66;;5^^7>a#[#=!1^55666+66+6++++++666;||^%%1%%%^^%^^^11!>=##[[[[cc#a>7^+9*<&33&<_51=cf/))/ff[[c[####a=>>!!]]]11%%|5", ":i3&&eedb_~+5|%1]!>>>!!!!]!!!>=>=aa#cc[[f/))@k}}}kc|b&&&e==a#cc[f/=5bb_9++666;5555||^|^^^%%^%%111111711%^%||5;;;6++6+66;|%7!c[f[=]%|;;666+++++++~+~~+6665|^%%11%%%^^%%%7!>a#c[[[[[[[c#a!7|~bdd*_;%>c/)@@))///f[[[[c##aaa=>!!]]771%^|;", "iiii3e====aa#cc[ff/))@k}}@a;d&&eee=#ccc[[cc[cc#>]|;+~6^!#f/@)@))/f/f[[[c##aa==>>>!!!]771^^5;;", "::ii3&ed*b9+5|%17!!!>>>!!!!!>!>=>==aa#ccff/))@kk}}0@=+d&&e==a#c[[#%9_99~66;;;55|5|55|||^^^|^%%%^1%%%%^|||;;;+6~+~~~+++;5%!#f@)fa!%|;6++++~~~~~~~9~~~~+65||%%%^%%^^^^%1!!=#c[[f[ffff[[[a>]7]>af)@kk@@@)))//f[[cc####==>>!!]]7111^^5;+", "j:i33&e!!>>>>aa#cc[ff/))@k}}k/]~<&e&edd**b_99~+~+6;55||^%%117]!!>=a##[c7+__+6+666;;;;555|||^|^^^^|^^%^%%^^||5;;;++~+~~~~~++;|1>#@}{0@c>7^56++~~9~99999_99~+66;||^^^|^|^^%%7]>a#c[[[[cc[[f[[ccc[//@kkk@@@))//ff[c[cc##a====>!]]]771%^||6++", "jj:3iie<*b_~65^1]!!!>>!!!>!!!>!>>===aa#cc[[//)@@k}}0}/!+>=a#a!|++~666;;;;555||5|5|55|^^^^^^^^^^^||;66+++~999_99~~65%>[}{q-qo})c=!1|5;+~~9999_9_9~6;;||%%%^^|%^%%7!=#c[[[[[f[f[f//)@@}}}}kkk@@@))//fff[ccc##a==>>!!]77711%^|56+~", "$j::3&&e==aacc[[f//)@@}k}kf%be&eee>==a>%56;;6;;;;;;;5;555|||^||||^^^^||5556;+++~999999999+651=f}'s8v88-'{})f#=]7^5;66+9~~++655|||||^||^^1]>=a#cc[cccccfff)@@kkk}@k@@))//ff[[[cccaa==>=>>>!!]7711%^|;;+99", "$$jj:3&edb9~65^%77!!!!!!!!!!!!!!!!!>==a##[[ff//)@@k}00}c^be&e<>!!!]7711%%^|;;+9_", "$jj:ii3e==a##cc[f//)@kk}}}k#|bee&e>>!]]7771%^%|556+~__", "$jjj:33&<*b~65^%77]!!!!!!!!!!]]]]]!!>===##c[f[//))@kk}0}k#|*eeee!!!!]]1111%%|5;6+9__", "ll$j::3&==a##c[ff//@)k}}00@a;d&ee#c[[cc#a#=a#c[[ff)))@)//fff[[[cc#c#aa==>>>!!]7111%%^|55;6~~9_*", "ll$$::33f0'-gs88ssssssggsgggg-g-'{0)[=!1%%^^^|^%%1]>ac[[[c##aaaa##[[f//))))///ff[[[cc###aa==>!!!!]]771%%^^55;+~9_bb", "ml$l$:i3ed*_+;5|%17]]]]]]]7771%1%177]!!>>aa##c[[/f//)@k}}0}/]~>!>!]]]711%^%^^556++~9_b*", "m2l$$:33edb9~65^%%77]]!]]]7771111177]]!>>=aa##[[ff/)@@kk}00})]+<&&ee<]1%%^^^%%1]!a#[[[c#aa==>=aa#[[ff////ff[[[cc###aa===>!!!]]]711%%%^|5;;+~99_**", "22l$$::i&<*_~65|%1%77]7]777111%^%^%17]!]>=>=a##ccf///))kkk}0})]+acc[c##a>!>>>==##c[[fffff[[cc###aa==>>>!]!]]111%%%^|55;6+99_b*dd", "mm2l$j:3&<*_~6;|^%1777]7]771%%%%%%1117]!!===a##[[[[//))@kk}0}0/]+deeee<!711%%17]!=ac[[[#a==>!>>==a#c[[f[f[[[[cc###a====>>!]]7]711%%^^||55++~~9bb*d", "mm22$$::&==a#a#c[ff//)@kkk0}0)]~<&e&<]]1111117!>#cc[#a=>!]!]]>>=accc[[[[c##aaaa===>>!!]!]771%1%%^^||56++~9_bbbd<", "mm22l$:i3<*b~+65|%%11777711%%^^|^^%%177]!!!===##cc[ff/))@@kk}}0})]+<&&ee<!]7777]!>ac[[cca=!!]!!!!>=a#cc[cc[ccc##a===>>!!!]]]7711%%^|||5;6++~9_b**dd", "p(mml$$:3&<*_~6;|^%%11711%^%||5|5|^%^%117]!!>==a##cc[ff//)@kk}}}k)]~d&3e&!!]7]]]!=a#ccca=>!]777]!!>=a#c#cc##aaaa==>>>!!!]7711%%^^^|||;;;++9__bb*d<<", "((mm2$$:3e!]!]!!>=#[[[c#=!!]717]!!>a###ccc###a====>!!!!]]77111%%^^^||5;6++99_b**dde", ",p(mm2$ji&===a##cc[ff/)@kkkk0}}/!+d&&&&&<<<>a#c[c#=>!7711117!>>=a#a#a#a====>>]!!]77111%%^%^^|55;66+9~9_b**dd==aa#c[[fff//)@k@}k}k/>5b&&&&e<<>==##[[c#a>!7711717]!>=aaa#aaa==>>>>!]]]77711%%%^^|||5;6++~9__bbdd<==aa##cc[f/)))@kk}00k)a5*&3&&&e>>==a#cccca>]71%%%^17]]>>=aaa===>>>!]]]]]771%%^^|^||||;;;6~~_9bb*dd<<&&", ",,pp(2l$:ieaa##cc[f[f/))@@@k}0}k#|b&3&&&&&<<<!7%%^%^117]!>==aa==>>>!!!]]77711%%%^^^||||;;6++~9_bb*dd<>>a##cccf/ff/)@kkkk}k@a|*&3i&&e&ee<<<]7%^^|^^%1]!>>>>=>>>!!]]]777%%%%%^|^||||5;;6++99_bb*dd>==a##ccc[ff///)@kk}}}@c%9ei33&3e&&ee<<>>=>>!!!!]771711%%%^^||||55;66+~9__bb**<>>==aacc[[ff/))))@kk}k)[7~<33i33&e&e&eeee<<!!]]]771711%%^^|||||||55;;6+~~__**d<<==aa##c[[[[f/)@@@kk}}@f7~<3ii3i&3&&eeeeeee==aa###cfff////))@@k}@/>;d&ii3i33&&3&&eee&eee<>=aa###c[[f//))@@@kkkk/a5b3:iiii333&3&&e&&e&&e&!>=>=a##ccc[[[f//)))@kk})#%9ei:::iiii3i333&&&eee&eeee&eeeeeeeeee&&&&ee&e<=>=aaac#c[ff///))))@kk@[76<3::iiii3333333333&33&&e&&&e&eeee&e&&33&eeee]%^|5;;66;5|%%17777771%%^^^||||55555|;;;;6+~~99bb*dd=>==#a#ccc[[f//))@))@@@/>;d3jj::j:::i:i333333&3333&&3&&3&3&333&eee>=>a#a#cc[[[ff/f/@)@))@/#^_&:j:j:::i:::ii3iii33333333&&&3333i3&e<</)//////////f////f/f[ffff/@@@@@@)//ffff[[c#=!7%^566++666;|^%%%%%%%^^|^||55;;5;55;5;;;6++99_bbbddeee&33i3i:", "!>]63(rrp(2$:i&e>=>>a#a##c[[[f/)/)/@@@@)c1~===aa##cc[c[[ff/f))))@)[>5b3:j$jj$jj::j:::iiiiiiiii3iiiii3ee<[ffff[/fff[ff[f[[[[[c[[[[//))@@)))//fff[[#a!!1^|;;++++++;55^^^^%^^|||55;;6;;;;;;;;;66+~99_bb*d<!^*l,,p(l$:i&==aaa##c[[[ff//f)))))fa%9&jj$$jj$jjjjj:jj::j:::::i:ii3ee]5emp((2$:i&===aa###c[c[[[////)))@)[>5*i$l$$l$$$j$j:$jj::::::::ii3e=>=aa###ccc[[[[/f/////[=%9&j$l$l$$$$$$jjj$$j$jjj:i3e]1^|;6~~~~99~~66;|5555;66666++66++6++66~~~99_*b*d19i(pm2$:i3eddbb_9_9___b*ddd*d*b_b_99~+++66;;5|||^^%%7777]!!!>====a####cc[[cff/f//))fc!6<:$$2lll$lll$$$$j$$j::i&ed**b9_9_bb*d]%^5;6+~999~~+6;;5|55;;;;6+++++66+;;666++~9__***d<=aa#c[///)/))//[cca=!7%|;++~~~9999~~66;;;6;66+++++++~6+++6+~~~___*b*<<=>=aa##ccc[c[[fff/f/f[c!5*i$m2lm2llllll$$jii&<*b99~~~9____*d&&:$l$ll$$$$l$i~]=####aaaa=aaaaaa=======a##c[f/)/))//fff[ca>!7%|56+~999_99~+666;;6;6+++~~+~++666++6+~~9_bb*dd>===a=aa###cccc[[[f[f/f[=1+>>>>=>>!>!>>=#c[[/////f/fcc#a>]1^566~9~_____9~~+666+++~+~~~9~+~~++++~~9__bbddd>====aa##ccccc[[[[[[f[c!^_&$22m222lllji3edb_~~+++~~~~9_bdei:$$l2ll2l2lje;!===a===>>=====>=>>>>!>!===#c[f///)///f[c#a>]1^566+~9999999~~~+66+++~~9~~~~++++++++~~9_bb*ddee&&3i:jj$$2l22m", "^%%11]]]]^+elmml$:i33&eee<<<<=====aa###c#cc[[f[f[[a75b32m((m2l$:3<*_9+++6666++~~9bde&j$2m2mmlml2$*%>>=>>>=>>=!!!!!!!!!]!!]]!!=aac[f//f/ff[c#a>!7%|5;~~999b_bb_99~~~~~~99_99999~~~~++~99__b**d<>====aaaa##c#ccc[c[c[[c=76dil2m2$ji&d_~++666666+++~9b*e3j$2m22mmmm2:_7>>>>>!>!!>!>!>!!!!!]!]]]!!>a#c[[f//fff[[c#>!]%|;6+~999_____99~9~~~~999999~~~++~~++99_bb*dd<<&&33::j$$ll22mm(", "|^%%%17]]7^6*jlml$$::ii33&&&3&&333333&eee>>>>=a=aa#####cc[c[c[#>^9ejl$j:edb~6;;;66;66;;++__deijl2m(((m(m236]!!!!]!!!!]]]!]]]7]]]777]!!>=a#[[[ff/f[[ca=>]1^|;+~99___bbbb_9_9999999_999999~~~~999__bb*dde&&3i::jll22mm((pp", "||%%%77]]]1|~ejl2l$$j::3i33&3333i33333&ee>>>=>=aaa=aa#aa##cccc[ca!^~<3&e*_+66;;5;;;;666++~9*e:j2mm((p((ml<5]]!!!!!]]!]!]]]7]]77]7717]]!>a#[[fffff[[c#=>]7^5;++~99__bbbbb____999_9999~~~~~~~+999_bb*ddd<&&3::j$l22mm(((m2", "5||^%%11777%;b3lm22l$jjj::iiiiiii:iii333&&e>>==a=aa#######c#c##=]^+bb96;;||555;;;;;;;+~_*!]%|5;+~_9_b_bbb*bbbb____9_____9999~~99__bb**dee&33i:$l$22mm((mli<", "5|^^%%11]771^6*3$22l$$$j::::::i::::iii33&&ee<<>>>======aaaaa###cc##=!%5;5|55|5;5;55;;;;++_de:$m((,,,pp(i~%]7]7777177717717771111%%117!!=a#ccff[[[c#a=!]1|56+~999_bbbb*bbb______99999~~~9~9~9_bb**ddee&3i:j$$l2mm22$3*;1", "5;55|^%11777%5~>======aaaaaaa##a=!]1^^^|555;5;;555;6~9b&:lm(,p,,,,2<511711717711111%1%%%%^^%^%%1%7]>=##cccc[caa=!]7^|66+~___bb**d*ddb**bb____9_9__9___b_bb**<>>=====aaaaaaaa=>!]1%||555;;5;5;55;+9*&:l(prrrrr,$b^111111%%11%%%%%%%%%%%^%^^^%%7]!=a#c[[[cc##=>]1%|;6+~99_9_bb***d*b*bbb_b___99_999___bb**d!>>>>>>====>>>>!71^^|;;;;5;5555;;+9*&:l(,,rrhr(3+^%1%%%%1%^%%%^%^^^^|^||||5^^%17!>=###c#c##=>]71^5;+999_9bb**ddd*dd***b*bbbbbbbbb*****d<<>>>>==>=!]]71%|556;;6;;5555556~*&$mprrhhhrld;^^%%%%^^%^^^^^^^^^^||||||||^^11!>=a##c###a=>!7%^5;++99999__bb*d**ddd***b*b*bbb*bb***ddd!!!!]%^|5;;;6;;555|5|||;~b&j2p,hhhhp:~|%^^|^|^^||||||||555||5555;;5|^7]!>aa###aa==>!1%|56+~9999__b**dda#####aaa=", "+66;;5||^^%117771%56b&$mp((((m(m2m2ll$$$j:j:33i&&&&<=aa###a=>!]7^|56++~~~~999__bbdddddddddddddddddddd<]71^56+~99+~++~9__b**dd<<<<<<<<<<<<<", "~+++6;55||^%%1777711^|+*imp,,ppp((mm2lll$$$j:jiiii&&ee<!!71%|;6++~+++;66~~9__b**dd<<<ac#[cc###aa=>>>", "+~+++66;55||^^%171771%^;b3m,rrr,ppp(mmmll$$jj::i33i3&&&e====>!!]1^|;6+~9+6;;;;;6++~__b**a##c##a#a==>>>!]", "1;~++66;55||%^%%777]]711|~&2p,,,,p(((mm22ll$$j:j:i33&&&&=>=>!!]1%|56++~665|||||5;;++~9_b**dda#c#c##aa===>>>!!", "c%6+++66;;;|5^^%%117777]7%+elprr,,,p((mm22llj$$::::ii3&&&eeedddd**bbb__9_9~~~+~++66;;;;;55||5|||||^^%^%%^^^|5;6+~9999++6;;;55|^^%%1177711%][@)fa!1%55;;6+++++++~+~~~~~~~99~9~+6;|%7]!!>>!!!]11^|;6+~~+;5|^%%%^^556+~9__bbb*****=###c#aaa==>>!!]]]", "k#%6~++6;;;5||^%%1177]!]!!75b:pr,,,ppp((m2l2$ll$:j:ii3333ee&e!!]]7%^|;+++~65^%77]!]]11^^5566~~~99________99~+5|1!>a##c####=a==>>!!!]7", "0)a^6~~++;;;5||^^%%1777]]]]]^bjprrr,,pp(((m22l$$$j:j::i3333eeee<!>>>!]77%^||;;;6666++++6+;;|^]!==####aa===>!!!]]]717", "n0@a%6+++6;;;5||^%%%17]]!!!!!%_j,rr,,pp((mmm22ll$$jj::ii3333&eee<<]7|55;6~~~~999~++;|%17]]]]]]7%^|56+~~+;5%]!=a##cc#a=>>!771%^^^^^||||^^17]!>=#####aaa==>=>!!!]]]11", "000@a^+~+~+6;;;|||%%%1177]!!!!%_:prrrr,,pp(mm222ll$$$:j::i33&3&ee<)-vvuuvuvuvvuvv88sgqq'n})fc#a>71%^^;6++655^%17]]777%%^|;6++6;|%7>#c[f/f[f[c#aa=>!!!7711111177]!!=aaaa#a=a=>>>!]]]]77111%", "00n0@#%6+++6;;;5||^%%117]]]]!!>^_:(rrr,,p,(((m22ll$$$jj:::ii3333&e]7%^%%%177]]7711^|5;;;^7=#cf@kk@@@)///[c[##aa==>>>>>!>===aa#####a#===>>>!!!]77111%%", "k}}00)a%+~+++6;;55||^^%%117!!>!!1~3mrrrr,p,(m((mm22l$$$j:::ii33&3&&ec/@@}k}}kk@))f/f[cc###a=a=a=a==aaaaaa##a===>>>!]!!77711%%^^", "}}0nn0@#%6+++6;;55||^^%%17777!]]]76<2rrrr,r,p((mmm22l$$$$jj::ii333&&eeee11111777771%^^5||%]a[)}}00}}kkk@)))//ff[[[[c##c####cc####aaa==>>!!!]]]71111%%^^", "@kk}}n}@#1;++~+66;;5||^^%1%7]]!!!!76e2,rrr,,ppp((mm2m2ll$jjj:j::i3i33&&&&ee<)osssssgsgssssggssssggg-gggg-gggg---qqon}/c!!1%%1171111%^||5^%!#f@k}0}kkkk@@@)//f/[f[ccccc#ccc#####a===>>>!!]]]]7171%%^^||5", "@kk}000}@c]56++6;;55||^%%%11777]]!!1;d$prrrr,pp(((m222llll$lj::::ii33&&eeee<<<<<*d****bbbb___999~9~9999_bbddddb*99+6;||^^^^%^|^^5^%>)oqgggggsgggsgsgg-g-gg-gggg-g------qqqq'{n@f#>!7777711111%%^%%]>[/@k}0}}}kk@@))////fff[f[[[ccc###aaaa=>=>>!!!]]77111%%%^^||5", "@@kkk}0}k)c75++66;;;555||%^%%1]]!]]]7|b$prrrrrr,,(p(mmm2lll$$$j:::iiiii33&&e&e<<<</n'g---gg-g------gg-g-----qqq-qqqqqqqqq'{{0k/#=]]71111711^^^^^1]>#f)k@kkk@@)))))//fff[[[ccccc####aaa=>=>>!]!!]]7711%%%^||5|55", "@)@k}}}}k@/a7|;6;;55|||||%^%%171777]]7|b:prhr,,,,pp((mm22l2l$l$$:j::i33333&&e&eee<<<>>!!]]]7]1111%^^^^|5|;;", "/)@@@kk@))[#>7|56;;;555|||%^%%17%7177%%|9&m,hhh,,,,,pp(mmm2ll$l$$$$jjj:iiii33&&&eee<<<<!]777171%11%17>a[f@@@@@))))//f/fff[ccccc##aaaaa=>>>>!!]!]]771%1%^^^^||5556;6", "//)@@k@@)/[a>]%^55|5|||^^|^^^^%1117%71%%5_3m,rhhr,,pppppmm2m2l$ll$jj:j:::i33i33&&&eee<>!!]!]77771%%%^||||5;;;;6", "f//)))@)/[#>!7%^^|5||||5|^^%%%%%%%%1%^^%^59&l,rrrrrr,pp(p((mmm22$$l$$jjj::::3i333&&&e&eeee<<<[}{{o'ooooo'o'o'ooo'o'ooooo{{o{{ooo{{{{{n{n{{n0}k)fca=>!]]77771117!>a[f/))/////ffff[[[[cc###aaa====>>!!]]]]77111%^^^%|||55;;;66++", "ff/))))/[ca!]71%^^^|||^^|^|^^^%%%%^%%%||5;69e$prhrrrr,rppp((mm2m2lll$$$$jj:j:::3iii3&e&&eeee<<<[k{oooooooooo{ooooo{o{{ooo{oo{oo{{{{{{{nnn{nnnnn0}k)f#a=>!!!!]]77]!>a#f//)///ff/f[[[[[cc#c####a===>>!>!!!]]]771%1%%%^^|||5;5;;++++", "[[ff//f[ca>!]1%%%^^^^|||^|%^%%^^%^%^|||555++be$(rhrhrr,,p,p(pm(mm22l2l$$$j$:::i:ii333i&&&&ee&e!!]]7]]]!]>a#cf///fff[[c[cc#####aaa=>>=>>>!!]]]]171%1%%^^^|5555;;;66+++~9", "[[f////c#=!]]1%%%^^^^^^^^|^|^^^^^^|^||556;++9*ejm,rhrrrr,,,(p((mmmm222l$$$$$jj:j:j:i3i333&3e&&eee&&3&33&e!>=#fk}nnnnn{0{{n{nnn{{nnnnnn{nnnnnnnnnn0n0n0000000}}}}}k@/[c#==>>!!]!!!!=acf//ffff[[[c[cc####aa=====>!!!!!!]77771%%1%^^||||55;;66++++~9", "c[[fff[ca=!]771%%%^^^^|^|^^^^^|^|^|5|55;;++9_b<&j(,,rrrr,r,,,ppp((mmm2222$$$$$$::::::iiiii3i3&&3&&&&33&e<*_~;5^%1]]]!!>>>a#f@}0n00n00n00n0nnn00nnnnn00n0n00}0}0}0}0}}}}}}}k}kk}kk@)fcaa=>>>!!!]!==#[[fff[[c[#cc####aa=a==>>>!!!!!]777711%%%%^|||555;6666+++~9999", "#c[fff[#a=!!]71%%%%%^^^^^^^^^^^^|^||55;;6+~9_*deij(,rrrrrr,,,,pp(p((mm22222ll$lljjjjjj:i3iiii3&3i3i3ii&ed_~65|%177]!]>==acf@kk}00}00}00000000n0}0}00000000000}}}}}}}}}}}k}kkk@k}k@@/f[##===>>>>>=a#c[ff[[[ccc###aaaa======>!!!]]]77717%1%%^^^||||5;;;666+~+~999_", "##[[f[[#==]]]111%%%^^%^|^^^^^^||^5|555;6++~9_bde3:$mprrhrrr,,p,,pp(pp(((mml2ll$$$$$$j::jjj:iiiii3iii33ed_96;^%77]!!!==>#cf/@@kk}k0}}}}}k}}k}}k}}}}}}kkkkk}kkk}}}kkkkk@@@@@@)@@@@@@@/fc#a===>>>>>>a#c[f[[c###aaaaa===>=>!!!]!]]]7171%1%%^^^||5|55;;666+~~~~99___b", "a#cffffca#>!>!]77111%%%^^^|^^^^|||^55;;;++~9_bd<&i:lmp,rrrrrr,p,ppp((((m(mm2m222l$$$$$jj::::::i::::ii&<*~+5|^%77!!!!>=a#[//@@}k}k@kkk}}}k}kk}k}kk}k}}}}}}kk}kk@kkkk@k@@k@@@@)@@@@@))/[cc##a==a=aa#c[f[[[c####aa====>>!!!!!!]]777111%%%%^^|||55;;;;66++~~~999__bb", "a#c[ff[caa=>>>]!]7771111%1%^^^^^^^5|555;;6~99b*de&:jlmpprrrr,,r,,,ppp((p(((mmm2ll2ll$$$$$$$jj:j::::i&ed_~;|%17]!!!>===#[[f))@@)@kk@k@@k@k@@kk@kkk@@@@@@@@@@@@@@))))@)@)))))/)//)@@@)/f[c#aaaa=aaa##c[[cc#a====>>=!!>!!]]7]7771111%%%^^||5|55;;;66+++~~~99__bb***", "=#c[//ff[[ca#a==!>>!!!]7777111%%^%^^^||55;6~~9bd>!!!!!]]]771711%%%^^^^||555;;6;6+++++9999__bb**d", ">ac[f/)/[f[cfc##caaa===>>=>]!]771111%%^^||5;6~9_*<<&i$l2m(p,r,,,p,,,pppp(p(((mmm(m2m222lll$$$$$$$:i&>>=a#cc[ff///))))))//@)))))@))))))//)))))//)/f/////////f/f[f/f))))//[[cc##a#a#acccc[caa==>>!!]!!]]]7771711%%^%%|^55555;;6;66+~+~99_99__**b**dd", "=ac[/@@k@@)/@)///f/fff[[c[[#aa=>!!]]]]7]71%^|56+~b*>=aaccff///f////)/)/////)///f))/))////////////ff/ffffffff[[ff//))/)/f[[cc#c###c[[[[c#a=>!>!!!!]]7]7171%1%%%^^^||||5;5;;666++++~~99__bbb**ddd<", "!=#[))kkk0}k}}k}}k}0}}}k}kkk@)/fc##==>>!!!!]71%|5;~9bde3i$$22mm(((((mm(2m2m2mmmmmm222mm22l2l$$$$j3e*965^%77]]]!]!!>>>=a#[c[fff/ff/ff/f///ffff///fffffff/ffff[ff[ff[[f[[[[cccc[[[[///)ff[[cc#####c#cc#ca==>!]]]]77777111%%%^^^||||555;;;666++~~~999__b_b*b*dddde<", ">=#c)k}0n{n{oo{oooo'oooo''ooo{{n0k@))f/[[c#aa>>771^|6~_*<&3i:j$$$lllll2$l$lll2$l2222llll2l$l$$$i3e*9+5^%171]]7]]!]>>>=aacc[[f[[f[[fff[fffffffffffffffffffffffff[[[[[[cc[[[[ccccc[ff//)//ff[[cccccc[[[c#=>!!!]]7]777111%1%%^^^||5|5;5;;;66+++~~~999__bbbbd*d<<!!777111%%%%^%^^||||555;;;66+++~+~~99___bbb***dd<<!%^;6~_*d==aaccccccccc[[cc[c[[ccc[c[[[cc[[cc[c[cc[cccc#cc######a#a###c[f////fff[[[ccc[c[##a=!!]777711%%%%^|^||||555;;;666+++~~9~999__bbb*dddd<1%5;~9_b*bb**bb___bbbb*d*d!>=aaaa############c###cc######c#########a#a###aaa#a=aaa===a#cc[ff/f/[f[ccccccc#c#=>]711%%%^^^^^|||555;;;6666+++~~~9999__bb**bddddd<]1|;6~~+~~9~+~+6~++6+++~~~~~~~+6;|^111111111717717]]7!!!=>aaaaa#a##a#########a############a##a###aaaa#a=aa========a#c[[f///fffff[[[[[c##=>!]7%%%%%%|^^|||5555;;;6;6++++~~999___bbb***dd=#[/)@}k0000nnnnnnnn{{{{oq'qqq--ggss8s88v88v8vsssgqoon0@/ca>7%^5;;;5;;5;;5555;555|555|^^^1%111177777117177]77!]!>>====aa=a=aa=aaa=aaaa#aaa=aaaaaaa=a=aa=======>===>=>>=>>>==aac[fff/ff[[c[cccc##a=!]11%^^||||555;5;;;666++~+~~~999___bb***ddd<==>>======>=======>=a=aaa====================>=>>=>!>>>>=a#cc[ff///ff[f[c[c##a=!]1%%^|||||5|5;;66;66+++~~~99999_b_bbb***dd<]1%^^||^^^|^^^^^^%%%11%11111111171117117]77]]]!!!!!!>>!>>>>==>>=>=====>=>>>>>=>>=>=>>>>>>>!!!]!!!!!]!!!!!>>=a#c[[f[ff[f[cc[cccaa=!71%^5|55;;;66;666++~+~~~99_9_bb*b***dd<!!!!>!!>>!!>!>>>>=>>!>>!>>>>>!>!!>!!!!!!]!!!!!!>>==aa#c[[f[ffff[f[cc#ca==!]%%|||55;;;;666++++~~99999____bb**dddd<>=a#acc[[[[[[//))@@kkk}}0nnn{{''qqq--qgggs8ss888s8sgg-qon0@/[a>]1^^||||^|^|||^%%^%%%^1%111%1111%77711777]77]]]!!]!]]]!!!!!!]!!!!]!!]]!!!!!!]]]]]!]]!]!]!]]]]]!]!!]!!>=a###cc[[[[cccc#c##aa=!!1%||5666;66+++~+~~99999__bb****ddd>===aa#cc[c[[ff/))k@k}}}0nnnn{ooo'qqqq---sgssss88ssgg-''n0k)[#>]1^||||||^^|||^|^^%^%^^^%^%111%%117%711777]777]]]]]]7]!]]!]]]]!]]]!]!!]]!!]!!]]]]]]]]]]]]!]]!]!!>>>==a##c[[[[[[[[[[cc##aa>!!7%^55;;66+6+++~~~~~99___bbb***dddd<<!>====aa#cc[[ff/)/)@)@}}}00nnn{ooo''qqq-q---ggggggssggq'oo0}@f#>7%^|||||||^^^^^^|^^^%%%%%^%%11%1%1%%111%1117171777]77777]7]]77]77]777]77777777]7]777]]777]]!]!!>=>aa####ccccccc#aaaaa==>!]1^5566++~+~~~99_____b_b*b****dd<>===a##cc[[[ff/)@)@kk}}0000n{{ooo''qqqqqqq-g-----g--qq'{0}@[a!]%|^|||||||||^^^^^|^^^%^%^^%%%^%%%%^1111%1%71171717711717777777777777777]7]7777]]77]7]]]!!!>>>==aa##cccc[cc#c###a===>!]]1%55;6++~+~~9~999_bbbbb***ddd<<<>===a###c[[[/ff/)))@@kk}00nnnn{ooo'o''q'qq''qqqqqq''q''o{0}/[a]7^^||^||^|^|||^|^^^^|^^^^^|^%^^^^%^^^%%%%%%%%1%1%1171717711111111777171111777177777]]]]!!!>====a########aaaa===>>]!]71%|56+~~~~_9_9___bbbb**ddd<<===aaa##cc[fff//))@k@@kk}00nnn{{oooo'o'''ooo{ooon{{{{{{{n0k/ca>7^^5|5|5||^||^^||^^||^|^^|^^^^^%^%^^%^^%%1^1%111%1%11111111171111117777171777]7]]]!!!!>>>=aaaaa#a##a#a#a===>=>!]!]7%%^5;6~99999____bbb***ddddde>=>a##c#c[[[ff///))@@k}k}0}00nnn{{o{o{{{{o{{nnnn0}}0}}}}}kk@fc>!71^^^|||||^||^^^|^^^^^^^^^^^^|^|^%^%^^^^%^%^^%1%1%%%%1111%%%%1%111%11117111777777]]!!!>>>==aa=aaa===>>>>!!]]]77%%%|5;6~~9__bbb*******d==>=a###c[c[[/ff/@)@)@@kk}}00n0nn{{{{{{nnnnn}}k}@@)@)))))/)//[a>!1%^^|||||||||^^|^||^^^^^^^%^^^|^^^^%^^^^%%^^%^%1%1%%%%1%11%11%1111111777777]]]!!!!!>>=============>>!!!!]]711%%^|5;+~99__b_bbb**dddd<<<====a#a#cc[[f/ff/)@@@@}k}}}00n00nnnnnnn00}}}k@)/)f[[cc#c####c#=>]7^%|^|^^^^^^|^^^^^^^^^^^^^%%%%^%^^^^^^||^^^^^^^^^^^%^^^^%^^%%%%%%1%%1111771]77]]!!>!!>>>=>>!>!]]!]]7711%%^^^|5;;++9__b*b**ddd>==aaa#ccc[cf//f//)))@@kk}k}00}000n}00}}}@@@)/[[c#aa>>!>!!]]!]]]]11^^|55|||^^^^%%^%%%%%%%^^%%%%%%1%1%11%%%^%^^^%%^^%%%%^%%^%%%%%%11%11711777]]]]!!!!>!>!!>!!!!!]]]717%%%^^||5|;6++9_bb**ddddd<<>=>=aaa#cc[c[[f//)))@@@@@kk}k}k}}}0}}}k@@/f[[ca=>!]]11%^%^%^^^^|^^|||||55555||55|5||||5||^|||^^^%1%%1%711711%%%^%%^^^^%%%%^%%%1%%1%%%%1117777]]]]!!]]!!]]]7]771111%%^^^|555;6;+~9_bbdd c #92A1EA", ", c #D3D2DB", "' c #A0AEE6", ") c #E3F7F6", "! c #E6D4ED", "~ c #E7E7CF", "{ c #C7C2D7", "] c #E4CC86", "^ c #CBB699", "/ c #A2A1E1", "( c #B6C7F3", "_ c #DDDEE3", ": c #D1C5E0", "< c #B08F81", "[ c #EFF2E8", "} c #ADAEDC", "| c #C3D4F6", "1 c #E0C68A", "2 c #E1CBF1", "3 c #E0E3E7", "4 c #9FA1D3", "5 c #8183B7", "6 c #B3B2BF", "7 c #D1CCE5", "8 c #E8E8E2", "9 c #9A95AE", "0 c #D9CCA2", "a c #C8C4EA", "b c #DBBF8E", "c c #CED7E0", "d c #BCA192", "e c #C3C0B6", "f c #A8B1ED", "g c #A6A4B4", "h c #C2BDD3", "i c #C9CED8", "j c #898CDA", "k c #C8C8D6", "l c #CFD4F6", "m c #D0C6D8", "n c #BCBCE7", "o c #EEEEEA", "p c #CCCBC9", "q c #AEADBD", "r c #B7B6D9", "s c #9D93DA", "t c #DACBE7", "u c #E7DDED", "v c #D8D8DC", "w c #8D90BE", "x c #C7C6CA", "y c #ABA1E7", "z c #C6C5F2", "A c #D7D6CA", "B c #DAD8E7", "C c #F6F9E8", "D c #BBB3EB", "E c #DAD6F1", "F c #C8C8E6", "G c #D6D2E8", "H c #D1CCF0", "I c #DAC6ED", "J c #D3B291", "K c #E9E7EE", "L c #CFCDD6", "M c #C5CEF5", "N c #CEC0BE", "O c #D9E7F9", "P c #B7B6C2", "Q c #D1AD8B", "R c #C1C0CB", "S c #DFDECA", "T c #C8C2E6", "U c #A5A4C4", "V c #B8AFE6", "W c #C5BCE8", "X c #D9DEF2", "Y c #D2C5EA", "Z c #F0DA91", "PPPPP++++R+RRRRR{xxxpppLLLL,,,,,,,,,,77:FTWWWWWWTTTTWTTTTTTTYaYYaHYaHaaTTWWDDDVVyyy/sy}VDWa77vBvBBvvvvvv,A,,,,LLLLLLLLpppppppkpxkkxxxxRRRR+++++PPPPPPPPP666666666666666666666666PP++hhhhhh{h===:m:m:Y:YYYYYYYYYY=Y=Y=:====={{{hNhh++PPP66qqq&&&&&&qq&qqqqqqqq666", "66PP+PP+++e+eRexx{xxkpkppLLL,,,,,,v,7G7FTTTWWWTTWWWWTWWTTTTTTYzaHYzHaYYTWWnWWDV}VyysyyyVWTYFGGvv___Bvv,,v,,,LLLLLLppppkpkkkkkixkpkxxxRxRR+R+++P+PPPP66666666666666666666666P6666PPP++hNhN===hTT==m:::Y:Y=Y=Y====YYY:Y:Y=={T===hhhNh++P66qqq&&&&&&&&&&&&qqqq66qq6", "PPPPP+P++++++RReRxxxxpkLi,L,,,,,,,,vL77:TWWhWWWTTTTWTTWTTWTTTTYTz7aYFzazTWDDDDVVyyyysyyVDWa77GBvvv_vvvv,Av,,,,,,iLLLiLpkkipkpkpxkxxxxRx+R+++++PP666PP6PP6666qqqqqqqqqqqq66666666PP++hhNhhhh===T:::77:7YYYI=I=IY=I===I=:===={h=NhNh++PPP666q&&g&&g&qq&qqqq6qq66q6", "66PP+P++++eReRRRx{xxppLppp,p,,,,,,G,,G7F{TWWWWWWWWWTWTTYWTWYTzYTHzYFHYYTTWWWDVVVVyysyyyVnTaFGvBBSuvvvGv,,,,Ap,Lp,LppppppikpixixxxkxxxxRRRRR+++PPPP6P6P666666666666666666666P6666PPP+hhhhW==hh==F:7::Y::YI=YIWIWY=I=Y=:=Y=={=TNWNhhe++P666qq&&qg&q&&&&&&qqqq6qq66", "6P66P^P+e+++ReRexxxxkppLLL,,,A,,,,,,G77YTTWDWWWWWWWTWWWTYYWTYWYTYHHTzzYTTWWWDDVyVyysyyVVDWT:7BBvB_vuvAvAv,,,Lp,p,LLpLkppppkipxkxxxxRRReRR++e++PPP6P6P6P6666666666666666666666666PP+e+hhNNh=======::7Y7YY=IY=III=I=I=I=::===={hhhNh+^++P6q6q&&q&&&&&&&&&q&qqq6qq6", "P66PPP+++++e+RRRRRxxxppLLp,,,,Av,,,,,7FkTWrWrDDhWWWWWWWWWWaWWaTTzYzYYYzTTTDDWVVVVyyysyyVDTT7G,Bv_vvvBvv,,A,,,,LLLLpLkLpkkpxkxixixxRxxxRRRR++++PPP6P6PP6PP666666666666666666P66666PPehhhWhh=W=T::Fm7m7YYYWIWIWIWIY=I=::Y===={===hhN++PP6666q&&&&g&&&&&&&&&&6qq666", "6P6PPPPPe+e+RRexxRxxxppiLpp,,,,,G,,G,77TWWWDWWDWWWWWWWWWTWWaWWWYaYFzFYzTWTWrDVVVyyyssyyVrWT7GBB___v_vvvv,,,,,p,p,LLLipppkixipixxix(eRRxeRR++R+PPPP6P6P666666666666666666666666666PP++NhN=h={={m==:=Yt:YYII=II=II=I=I=I=:=T=={=NhNh++++^6qq6&&&&&&&&&&&&q&&6666q6", "66P6PP+++++e+RRRRxxpkxppLLA,,,,v,,,,,7:mW=rWDDrDWDWWWWWWWWYWWWzWTzzYzFYYTWWWDVVVVyyysyyVDTTY7Gvv___vBvv,AA,,p,p,LLpLpipkxpixxxixxxixRe(RR+R++++PPP6PP6P6666666666666666666666^66PPPh+hhhN{==T=T::::::tYY==IW=IW=Y=I=I=Y===={=Whhhhe+PP666q6&&&&&&&d&&&qd&&&&6q66", "P66PP6PPe+++eRRxRxxxpkpLLLLLA,,,vv,L,7aFWWDDDDWDWWDWWWWWWWWYWWYaYTzYzzTzWWDWDDVVyyyysyyVDWz7GvB_SB_vvvvv,cA,,,pipLippkipkpiiixxxiexe(eeeR++++P+PPP66666P666666666666666666^66q666^PhhNhhhhh====F=YtYYYIIIIIII=II=Y=Y=I=Y=m==m=N=hhNP++P666&&&d&g&&&&&&&qqq&d6&6q", "666PPPPPP+e+ReRRxRxkxppp,,p,,,,v7,G,777WWWDVDDDWVWWWWWWWWzWWYWWWWYTTaYzYTTWWDVVVVyyysyyVDWT77GBB___Bvvv,A,,,p,LLLLpLppkpixxxxiixxxxxe(eRR+e+++PPPPP6P6P6666666666&66&666qq666P66PPPP+hhN===h=T:=Y:::II==IWIWIWYYII=I:==:=={m{hNhNhh++^P6666q&qg&&gg&&&&&&qqqqqq6", "66P6PP+P+++eRReRx{xxxpppp,,L,,,v,,,,GF:WWDDVVVDDDDDWWWWWWWWWWWzWWzYaTTTzWWWWDVVVyyyssyyVDWT77Bv_!vSBvvvvG,,,L,L,pppLpppkipxixxxixxxexeRRe%+++P+PPP666666666&^&&6P66^qq&P666666666P+hhNhhh==h={:=Y:I:YIYY=IIIII=Y=I=I=I=Im=T==WNhhhh+++P66&6&&q&&&&&&&&&&&qq&qq66", "666PPPPP+++++RRxexxkpkppi,LA,,v,,vG,L7FWW^DVVVDDDWDWDWWWWWWWWWWWaWzWzYTTYWDDWVVVyyyyssyVrWT7GGvv__!_vv,,A,A,,,,LLLpkpkppppixpixxixiRxe(e+e++++PPPP6P666666666PP66666PPP666666666PPPP+hhh=hh====mI::tII=II=IWIWIWI=:Y:=:==m==={WNNhe++PP6666q&&&&g&&g&&d&&&qq66qq", "6666PP+PePe+e+RRRxxxpppLp,,,A,,,G,,G77FWDDVVVVVDDDDWWWWWWWDWWWWWzWYWaaazTTWWDDVVVyyysyyyDWT7Gvuv__vSB_vAv,,,pppLLpLLppxkkxxixxiexRx(eeeeR+e++P+PP6P66666666&6&6&6&6&6666q^666666PPehhhNNh====:=:=I:YYIYY=YI=III=II=I:=Im=={===Nhhhh^+P^66&qq&&g&g&&g&&&&&&q&&qqq", "6666PP+PP++R+eRRxRxxkxppA,,,,,,,GG,77a=WWVVVVVVVDDDDDWDWWWWWWWWWWzWzWYWTWWWDWDVVyyyyssyVDWT77Gv___BuvvBA,,,,A,,LLLpkkpkpxixxixxxixxxe(Re%++++PPPPP6666P666P66666666666666666^666P+Pehhhh=={T{:m:::ItIIYI=II=I=IYIYI=IY==Ym={kTNWNhh+++P6666q&&&g&&g&g&&d&&q&q666", "6666PPP++++e+ReRxxxxpkpppp,A,A,,,G,,7FWWDVVVyVVVDDDWWWDWDWDDWWWWWWWYWzWYWWWWDDVVVyysysyyrWW7GBBv__vv_vBvA,,L,L,pLLLLpipkxipxixiexxxxReeRe++++P+PP6P66666666&666&6&666666q666q6666P+h+NNhh=={T=::Y::YYI=IYY=II=I=I=Y:=I===:==={=Nhhh++P+P66&&&d&g&&g&g&&&&&q&&6&q", "6666PPPPe++eR+ReRRxxxppp,,,,,GA,G,,77Y=WDVdVyVVVVDDVDWDWWWWDWDWWWWzWzWTWTWDWWDDVyyysssyVDWT7GvuBSu__vvvvAA,,,,LLLpLkpppixxxixxxixx(xe(e%e+ePePPPP6P6666666666&66666&66666666P666P+++hhh={=h==:=LI:IIIIYYYIYY=IYYYI=I:=Y=:Tm={=hhhNh+++P^666qqqg&g&&g&g&&d&&qqqq6", "66666PP6P+++eRRRxxxxkkipipL,,,vv,G,,LaWWVDVyVyVVVDDDWWWWDDWDDWDWWWWWWWzWWWWWDDVDVyyyyssyVDT:7G_uB_S!vvvv,,,LpLpLLiLpkkkipxxiixxxxxexeeeeR%++PPPPPP66P66666666666666&&666q666666^6P++hhhNW=h=T=Y:YIt:YI=IYIIYYII=IY:ImIm=m{=={=N=hhhh++P666&q&&&&&&g&&gg&&&&&&qqq", "&&666PP+P++++eRRRR{xpppLL,,,,v,G,,,77Y=DDVyVdyVVVVDDDVWWWWWWDWDDWWWWWaWaWWWWWDVVVyysysyyVWW7GvvB_vuvuvvvAA,A,,,pipikppixxixxxxixxie(Rx%ee+ePe+PP6PP66P6&66&66&6&6&666&66^66666P6PP++hhNh=h===:=:t:YtII=II=YI=YIYI=I====:=m{{={hNNhNe+++P666q&&&g&g&&g&&gg&&&qqqq", "66666PPP++e++ReRxxxxpppLL,p,,,v,GGL77TWWVVyVyyVyVVVDWDWDWDWDWDDWDWWWWWWWWWWWDDDVyyyyssyyVnWF7BB__B_vvvvv,c,,LpiLLippkpiixipxixxxe(xxeeee%e%+PPPPPP66P6666^&66&6&66666666q66666P66P+hhRhh=W==T:::YIYYYIYYIIYIIYYII:III:::=m={N{hhhhh+hP+P66qq&&&&dgg&g&&&g&&&&q6q", "666666PP+P++e+ReRRRxkpp,pL,,,,,G,GGLY=WDVVyyVyVVVVVDDDWDWDDWDDDDWWWWWWWWWWWWWDVVVyyysssyVDT7GG_u___vBvvvAA,,,LLpppikixxxixxixxiiexxxe(Reee+ePePP6PP66P66666&66666&6&6q666^66666PPP++hWNhN=hT:=:mIYttYYII=YI=YII::I==m:=mm{==h=hNNW^e++P6^666&&g&&&&g&g&gqd&&qqqq", "66666PPPP+e+eRRRxxxxxppL,,A,A,,G,GL77=WDVyyyyyVyVVVDDDWDWDDDWDWDDWWWWWWWWWDWWDWVVyyyssyyVDT7GvB_3___!Av,,,,,,pppkpkpixixxixxiexxxxxeRee%+++PPPPPPP666666&66&666^&66&6666q6666666^++heh{h=T==::Y7YI:II:YYIYYIYYYI::I=ImI=m=====Nhhhhh++^P6q6&&&&ggg&g&g&&&g&&&&qq", "&6666PPPP++R++eRRx{pppipLL,,,v,G,GG7Y=WVVVyyyyVyVVDDDDWWDWDDDDDDWDWDDnWWDWWDWDDVVyyysssyVWW:7vu_Su_vBv,vA,,LLLipipixxxxixxxixixxx(ie(Ree++PePPP6P6P6666666666&&&6&^66q66666666PP6PPhhNh=h=={F::mtYttYYIIYIIYIYI:II:::===mm={hNWNhNh+e++P6666&&&&gggggg&gg&&&&qqq", "&&66666P+P++eRRRexxxkpLLLL,,,,,,G,G7:WWVVyydyyyVyVVVDWDDDDDDDDDDDDWWDWWWWWWWWDDVyyyysssyVDT77GB___S_vvv,A,,p,pppkpxixxxxixxxeixxxeexxeRe(eP%Pe6P66P6666&&66&66666&6&6666666^666PP++h+hh=h===:FY:YYYI:YYYIYIYIYYY::I=I::=={==hhhNhhh++++P666&&&&&&g&g&g&&g&d&&qqq", "666666PPP++++eRRRRxkpppiA,,,,v,,tL77TIWVVyyyyyyyVVVDDDWWDWDDDVDVDWDDWDWDDWWDWWDVDyyyssssVnWFGB__u__vBvvv,,,,LLkpixxxxiexxxxp(exxx(xe(R+e+ePePPP6e6666P66^6&66666&6&66666666666P6PP+hhN{h=W===:::IIttIYIYIIYI=I:IImI::=::mm={==hhhW^+R+P^6666&&&gggg&dggg&g&&&&&q", "&&66666PePe+eRRRx{xxxpppL,,,,,GAGGLtTWDVVyyyyyyVyVVDDDDDDDVVDVVDDDDDWDDWDWDWWDDVVyyssssyyDWY7Eu3_u__vv,,,,,pLipkiipkxxxixx(xxx(exxexeeR%e+PPPPP6P6P6666&&666&6&P666&6666666666P6PP^hhh=h={Tm::t:Y:Y:I:I:IIIIII:IIm:Im=m={k{{{Nhh+Rhr++++66&&&dq&&ggggg&g&&&&&&qq", "&6&6666PP+++++exexxkppLL,,,,,,,,G77:IWDVyyysydyyVVVDDWDWDDVVVVVDDDDDDWDDWDWDWDDVVVysssssVDW7GBB_3__vvvvA,,L,i,kpxxkkxx(xxxxxexxxxe(e(ee+e%e+PePPP666P6666&666666&66&66q^6666666PP++Rh=h=====F:=7tIIYtIYIYIYYI:tImImI:m={m={NhhNh++Ph+P+6^66&&&&gggggg&g&ggg&&&&&", "q66666PPP+e+eR+xRxxxLpLLL,,,,G,,G,77WWDVyy$$UVh{7m:===WWhn+rPhrhrPnh{{", "=YYYYaH7777FaYTYF7l7lHHHaa7FzYzYHWVyDH3K[[oK888833~_u~uSvvAvSSSS3SSSv*S~~o[CCCCCCCCCCCCCCC@C;o~~~;~o~S_AcppRxe++++R++++++++r+kkFkii,GB3o[Co[oKuXK3XcE,M7c7,i7FFFF:TFFFTn6}}UU'U}UU&66rhRrUU49www59ww9www>w$r!KK!Zuutp+y$sw9$s4s$9$99$U6{mL7L777GL7L:::{{+rr+R+h{", ":F:aF7777G777HFHF77G77GGGGHHHHGHEHYVVHuKoo[ooo8~u3uS3_SAAAAvAcASSSSvSS*So;@@CCCCCCCCCCCCCC[;;~~3~~~S3SSpixxe++++RRRRxRR+(+%R+nRRkkkFMX3Ko[ooCoKKoK3Bl,7c7G77MH7F=TWWWWkTrq}UU4UU}rrnxik%&4$ww5w555wwwwwww99Nuu!t2*!Lh6g9Uq}}U$>94444yrhkk:ptLtGtG7t777:T{+hhWR{k", "YYY:YLGcG,GE,G7GHHHG,7,cEllLlGBEBGHWDzB3Kooooo88~3~_~_3v,Ac,A,AAvAAAASSSoo[CCCCCCCCCCCCCC@C;~~S~SSSSScAAiex+++++exxkixkxxxRR+RRnRRkkiGXKoooooooKKK3BiG7lL777LHGFTTWnnrn(r}}&UUU'&6%RzkR6U$www55555www55wwwsqu!*m0ImNhhm7hhRq4$$$$$4U&rh=L:mtG!!tttttY7YY=WT{TFTF", "TYaHGGBGc,ccEEBBlG7l7lHHHYH77EXXBXElTzEuKK[[[[[83S3S3~3SAAA,ppp,AAAASS*;[[@@CCCCCCCCC@@@CC;[o~~~AAv*pipppee++PeRxxii,iiikx(x(RRFiilGvX3KKK3uKK33XXXBGccLFMFFFLMHTYTWWWWnn+nfr}}}}rhRFFn}-$ww555w55w5ww5jww$VN=mG!S!GuK,r6r+&4wws9sUUr{W{{mmm!2!2!ttIIIY=FTFTTTT=", "WTYHGEvGBGGvEX_XBBGHHzWDnWFHGEEXuXuEHzHEK8[[[[[o8~38~3SSA,,pApppAS*SSSS;CCCCCC@C@C@C@@[C@[[C@[SpSSScpppppe++eeRxxiAAA*Aipxxxkkzk7lvX33K3uEEEEuu3XEll7GliaFMFFFFkz7MRr}6}r%nhn6rr=FF7Fk+}&>$ww5555wwwww5ww9$$46tKo[Kt6y$$yqnU$s>w$$4Wtm==m7tt!!!222tIII=WI=TYYYWY", "WWHH7,77LL7,,GGGLlHFDVyVDDWzHHEEXuXX_kkE3Koo[C[88~3~o8~SSS*ApAiAAS~~~~o@C@@@@C@C@CCC;**;;@[;[;A*SS**ppxeeee++exxAiAAAAAckxx(xkkxzRxF,llElEEllEXXXBcG,l77klGFkFTRkzk%Pf&'U}rnDWT=YYF{{nnr'$>wwww555wwwwwjjjsw96G!!AhU9$s$4}F}$$$>s$$rGGtttILtGt=t2E2IIIII=YYWYWWW", "WWWt777FFFFM7liM7FFTWWnDzWWzHHlE3u33KGF73Kooo[C;8~3~[o~~SScAiA0c*;Co;o;[CC@C@@@@C@@@[;~;~;;;;SSS;SAAppeeee+eeepxppAAvvAAkxRxx(kR+nRRFGFznDWHMHHE3EBl7iFFFccFz(nn(hznrf&4U}qrhWTYI:Th+r6&'$4>w55555wwwwj5555js}qqh{U9sws4}T,i}U4U44}+tuu!,tm=WWrr=tttIIYIYWWWWWWD", "WWTaYH7HFFFFMFF7aTTaMHHHHHzYXEBEXKKKK3LG38o[[[[[oo~~~3~3~SS*AcA,;[o@[C@C@C@)@)[;@C;[;;~;[;[[;;S~;***#iiexe+(eppppp,,pAAxkRR++kkxnRRFizn}}ynnnWzlEXXElGl,MEXizRn+n%r6}'/4'}}rWYT=:YYF{r}f&4$>>wwwjww>www5555jww9VW}$>ww$4$&FclFP'UqD{mmt!2YNW+6}nYYtYtIIIIWIWWWWW", "WYYHFaaYzTTTTzTYzzHHHzTzMMaHHGX33Koo[KBv38o[C;Coo;o~~S~~~SSAp*p*S;;[@CCCCC@;;@@[@;@[@[;;@C@C@~SS~SS*i#ipxeeeiAAppep0pAApxR(+Rx(xRRF7ET}y}DWnnWzGEEXXBEllcBXGikznRn%r'&44U6rWTFF7777777{rfq-gU>w>wU44>jjj5j5jww4}Usjjj55jj$/$sU6F}}rh==WN!!t+DD+T7::7ttIYIWIWJIDW", "zYFYYYTTzzWWWDDDTzFHMzzaaHMzllX3u33KK[K33~o~oo;oo8~~SSSS~SS*A0AA**S;;@@@[;;;;S@)@CCC[@[;@[;;;#S**#c**p#p0pppiA**i0LALA_SAAiiiikkkiiGG}/yDzHHHMEXBlEEllGlElGclFHMi(knnn%VfznnnnnT{T::77FRrqUU'U-44U>j555..jw9sU}4jj....5jjwswjs46}6{xt22!!uutI::7t27t7YWIIWWIWWIW", "aHHHFYzWTzWWnVnzEElGEizTnWzHElcXuBXK88K33~~8o;o~ooSSSSSSS~~~AAAA*A*S#;C@@;;**S;@C@C@@;@;@@;;;****p0ep0i#c0*i#S~SSSv*SSSS_SS_A,LiL,XE}5synHXXEGlllXlllM7FFFHHlHHHElMkFR(kznfU4U'}'nTY7tFrVf}}}f6''/w5......j4zWs5.......w>sjjwss4q7_vuuuuu!u!!!2!G!ttt:T=WIIWIWI=", "FHFaazTzazznWDHGX3XXEXEllEllcEGlEBEXK333K38oo[C;C[~S~SAAA*S~~**SS**SS;;;;;;S###[@@;*#;@[;;;S#A0p00p#0p#i*eeeexpA~;~~SSS~3~3vAvvv~3{$sDHHlllBXcGllHllMH7MMFHllznzMFz(nn+n(n'4/-U4/UnHYY7{n6f&'}44>jjj.....jUz%>5.......jwj5jjjs$y=GuvmtA!!!!u!!!!2ttt7YTYW=YYYTTT", "aaH7HaYzzzWnnnHHlEXXElEllEXEXlGllGEE33B=V99gSu;[[[;v~SSAA*S;;~*SSS**S;;;*;##**;@S###;[C@@;#**0A0*p#p#pe0epeP6&epSS~S~3*cp~~S_SSS33uBBBXcl7lElllHMMFH|lMlGHzTzzVs}zTnnnz{nr'//'f>44nzY::Wrrf}}-4$>wjjjjjj>%nU$j5.....5jj55j5jw$nEuEt7WVqrG!G!77H222ttHYTHYYzYaaFz", "FHFFFFzzznDnnzHHMllllXlEEEXHzznnWTGGah6VUD:_u~o;;S*S~SAAp*~;;;#S;***0*#S@S@S@;;00;@C@@@;@S##0#*####p#0c00i06&&PexpePq$$$+RkkP+vBSB,GG,cAMiMlMFzznzzzFlEHzzHzHHHTDDDnnnzznrD}/}'/-yrYzaTzn'}U'/>4'->>>->>>//>j>jjjj>>jj5jjj>w/nEHV//9s/nFrq}q}qDhWIItHY7HHHHHzTTa", "MHHHHFaWn%nnnn(zzzMMFlllXHnVVzWT+ncE_BGB_K8o;~;SSvAA*AA#S;;[@;;;;S#*0A##;@#@;@@@;##@@@@####*#*#S#*##p00#e&g&&Q$g+eh&$9g&s55swPEEBvLkkRRFkFMLMFnn%n%zFMlMHHHlHlllXHWVDWzHHTznDVfVfrnzaTznV'U/'U-''f-->%%4>wwjjw>>>->>->jjjjj>nz'swws>w}/4UVW=WW=tt7TttYYHGHHHTWWT", "HHMMMHHzznnnDzHzMzzMllHMHzV/VlXKKK33_38K8~~88KAAASA*S~;~;@[@)@;;@;**0*##@;@;@;;@;@@@@@;#*#*##;##c#p##0eee0e^pp^0exp0tN=NmuSu~pAAv,vizTT(xMilFM(zzMlllMlHlHMYMHzGlEzzHHlHzWWnnrr(TzHWD}f%z}4/////'U-U>Ufr>s>s>>>>>4'F(>jjjjs>jj5jj4nf/s}ntGu!!2!2GtITtYYtYHYYYYYY", "lHHHFHHHMn%z%zMHllHMMll(n%nnzlXOKoo33K8333vv,NLpAS;;;S;;;;@@@@C@;;;#;#;;@;@@@@@@@@C@C@@@###*########ieP$9w$^e^e0xb*~SAAAS*AAA0,*v,vvv,zzFMFMFFzMFMlXEl|lHzMHEHzzzzzHMzHzHzzzzzWTzTWD}}}z%f-/>-/''U-4-->'}'%n%(%>>$>->j5.5j>s>ysyTzaEH}rHG!EEEHzWGGTnWTTHa7lHHHHH", "MFFzMz(zzMMMH(z%n%zzMlEXlHXMFMEBXuoK~_SSSvve&9Nm0A~SS;S;;;;@[@@@;@#@@@#@@@@@@@C@@@@@@@@@##0^&6#@##0gwd&^^e0ep#S@SS*0p0pNxxpAvSAvvA,,,GkFiFFFMMlHXElllMzMnnDDfnzMHzzzWYnzzHYznnzzazznDDn%%f-/-/-/'ffr'}ffDVUU-'>wjjjjjj5j>%n'rFMBuuElT+nFHEW}U/}DnnDDnDrnz(HMHHHH", "FMMzzzzz(Hl|MMMzz%(zMMMMllHlHFlBlcK883vS3SvBuAAAPNSS#;;;;;S#@;@#;@C@@@@@@@@@@@@@@@@#@@##@@#0##000eg&1]#1e&^e@@;@;@[@;;*0pA0AASuSSAA,_vLFkiMkMl|MEllll(fnD%DD%zHMHlMMlHznzMzTzzzHMFF((fff''f'--/-f%fff}}fnzf/>4>>->>5jj>j>%lXMr'rlEHzzzzz(nD'/>>'f%%/-'f%Dff%(nz(", "%zz((z(MM((zMM||z(zn(%MllXlXXlclvG38o~3SvLep,3S*SSSSS#S;;@;#@[@@##@@C@@@@@@@@##@@@@@@@##@##@#]#0#]1^000@]##00#@;@@@S;SS00p0A*S~SSSAvAvi733BcllElXHXXXXMllMMzMlMlllHllMMlHMzMFFMFFMFznnfff'''/'-f(''f/}}nzFn}U'4>>>>>((%'(f--/>>>44>44--4>>>>///>>>>>//>>->'ff%fn", "%(Mz(MMMz((MzMlM(((M((M|lXXXXXlE3X3_v3SA,,,Am0eex0S#*#S#@;@@@@####Z#Z@@@@@@@#^1]@@@@#@@#@ZZ##@#@@@]]#]#@@@Z##Z;@@;@@ZS*pApA0GAt*vSSS_Bv,c3BcMllllMlXXllXXl(n(HMll|MMl|lclMz|MMMMFM((((%%ff------%M(rfTFcXc|(z(|c%(-(|((MM('-->>>>>>->-->>>ff-f-%%((%%%%%%%%(%(M(", "((((|(((MFMMl|llllcMM|XcXXXKOcBB33_vAAvA!AeeeL0p0A*#*#@S##*###0]]##]ZZ@Z@@@]]###]Z#Z]ZZ]#]]ZZZ]]######Z#@@ZZ@@#*Z;@SSZS*00t0S0*uSuSA_Sv,,cX_clclcXXXcc|||llMlX||M|||MM||MMMM(MMM(zz(|(%%(((((%%%f'(|XXXXM%fff%((%%%%%%f'->>-->>----%-----%-%((%%%%(%%%%(M(((|||M", "XXc||XXOOXOOOOOOO|X|XOOXOOXcO3XX333S_SL,AA!AAAtA*0!#0*0000b0^bb010]]1b1b]1]]]]]11]111bb1111bbJb]]bb111111bNb^b01211IbNbmpmpNN=L0L*SSvSv,c_X_XcXXOXXOOOOOXOOOXOX|XXXcccX|ccXX||ccc||||||((|||||(||i((((|((((((((|(|((||||%(%(%%%(((|((||||||||||c|||||||||ccXcXXX", "))))O)O)O))))))))))))O)O)Oo)8333~vvv_v,LLL,0NNmNNNNNNJN^JPQJqQ&dddddQddddd>-------%(%---%-%((|(%(%%(-'(((|||||||", "%(((((((||(((((((((||||||(Mc3XBB33S,,pALmApmA0NN^0ZSZ;ZuZ0ZZZZZZZ@Z]]ZZZZZZZZ@Z]Z@ZZZ@@@ZZZ@@@ZZZ]]ZZ@ZZ]##Z@@Z;Z**##0*uZ0!0t#;**Su*AAAAiicccX|iM(cXXlc|X|||||||||((M|||((|||((||(i||(|(%%%---%%-%(%(|cOc|'--(O|(%-|(||(--->>-->->------------%((((((%((((((((%(", "%%(MM((((%(|M|(((((||||MMlcXBcccvvS3S~SS,,0pLpee0SZ;;Z@@;@~Z#Z@#Z#@@@@@@@ZZZ]Qd1@@@@ZZZ@Z@Z]]]ZZZZZb1##]@]01bb@@@uZ#*ZS*****0*SS;*~SS_vvAcAiOXXc7l(l|l|cXX(|(M(||l((MFl|||(|||(x(((x(%%%%-%----%%%--&'%|cc(%((6'%--%c(-(->->->>>>>>--->>>>----->>>>w>>---f%-%%%%", "(M((MMzzM%zMMXlMM((MM||M(llclL,,ivv_88_8,+eA*SSSSo;o@SZu@@;Z*Z@@]0#@@@@@@@@@@Z@Z@@@@@@ZZZ]ZZZ]Z#]00^Q0####0;S#@@@@#Z*;;Z~SSALA*S;oSASALpi,cv_iXcXXXXlX(((MMM(lll|zznzMHzi|kMi(R(R(x((((%-%-----%-''>>>&'P%&->>-->>w>'('->->-%%-(-->>>>->>>w>>->>>>>>->>-----ff-%", "zzzzzz(MHllzfnM(((((MMHH|MXli,lBBc_~3A+eev*SSS*p^0~ZS;;ZS#;Z#;@@@@@@@@@@@@@Z@Z@@@@@Z@Z@@#]#]#]#]e0^g^###0e^&e;;@;@;;@;;*00p00AASSSAA_vv,FxiiikllFllllMHfDDD}}DMMHMWzzYzWzlFzzz(n((kx(%%---------''%%----e(-->>w>>w55www>----(%%|cOc|c|||(--->-'((---%%%%%%%%(%(%", "MFMzznzzMHMzznnnV}DzzlMllllMFGXHm_88A{tpxxPx+q6epS~SS#;;@@;;@@@Z@@C@@@@@@@@@Z@@@@@Z@@@ZZ@@#1g$^###1&<5d000e10##SZ;SZA0NxeeppxAAAA0tm{xkxzR(x(|lllcMllH(zz(DDDD(zHzznzWzzzFMnnznnTzF(r%%(%''-->>--&''''-'%--$-->w5j>5>ww>>(>%(|c);cc6P+i*|6-g>'(%%'f'%%%n(n((MzzM", "HlHMzMznnz%znz(znD(HMHlnnTF7l7BBK88~88Sc,R}&9qmR^*S#S#S@[@@@;@@@@@@@@@@@@@@@@@@@@@@@@@@@#####1^0##@##^$99<$6^ex*;;S**#x0pepepAApx,pxxFkikRh(kFFF7HllllHMzz(nMlHM(znWWYYYzYzznnzzTzznf6%(i'U-g>$-''-g>g-''-%'(%>>jw>>55.5ww>>--6(iic|+ciGvBikxr}6%n(znWWTzlHHzzHH", "HHHMHHzznnn(nzzMlHznzVrfyfVnB_3AA3~~3vSSS_A,+xA*S~S**S;@C@@;@;@@@##ZZ#Z@@@@@@@@@@@@@@@@@@#############e^&g<&6^^e^e^x*SS*~~SS*A*pApLxkiLMk(RFzFz(RzzzzMHMlllHllEHFllznzzYzzzWnn%n(WMF%}'r(%4>>>-'%U--$>'6>$>g-->>>-|(>j55w>>ww55>6M%}4}FHG!EBGBE2HTYYzHHHHHHHHzYH", "MHlHzzzzzznzzzzzzWMMMMHWDs/zE33838~~vS~~~~~;;~**A*A#S;;@;;;@@[@@@@#####@@@@@@@@@@@@@@@@@@######0####0000^e0#ee#*A^eppee6Pe+A3~AppSSL{kkx(Rn(R(zzz(TnnzMHlHlllXlllElHnWzzzzzn(DVfDrWMFRnnnrU4444-%6-4q%%>>wwwww>>>--%>>j>w>-->5jj'U>s>'VhHEHGE!!!GEtHtIIIYHHHHHzY", "MFFHzznnzz(zz(nnnnHlHFMzn}VzzEXK3B_u3u3~~~o~uSALpAA*SS;;;;;C@@C@;####0##@@@@@@@@@@#Z@@@@@####00##0####ee0ee&&66^xe+Np6$9gP+w5wPmS3vALkxhRRn+nTzTnnnnnTFHlHEHMGEXEHzWnnnnzznnDff}'/'VzzHMnf'4>4444'U4f%&$>w>jw>>>>->>wjj>5>>xX%>jjj>'}Us/D}UVnHHt2!2tIIIHHHYHYHYY", "HHzzazWWnzWzzzzMzWzHMHzz(y}rDyWynGLi6rkB~~o8~S;~A0pA*0A*S;@;;@;;;*##00###@@@@@@@@@#@@@@@####0#0#######00##0e^^&+e^eeqg9w9gq6P6{+evAA,v7iF7MF,Fznznnz(zMMEllHHzHzWDDDWnWzznDy-/y'y//(FhDTTn}rn'/>//>$>>ww-%wwjwwww>>jj55w55w${cR&44s/}MTUV}}Uyrt2GtttHYYIttHHHYHH", "HHTTWzznDnnzzMMlGEHHHHHHEXMHMHHWk77+V}y}TG3u~o~;~~**AA0p0S;;;;SS#ce0p###@####@#####@@@@###@###e###;##p0ee###*AP^ep0S*AApeq&mAtLLLA,AvcBcc7iFFFFT(zzzFzMHGHlHHzHWDyVnznnnn%D/'fy/-/4THTIYrrnnf'4>wjjj5j5j>%(fw5...555j55.5jw>&lK!H7ny/DGu!tHEGtG!!tHtHHHHHGHHHHzH", "aaHzHYzWznnzzHHElEElHHlHXllH7G7GHl_XBn9..5s9P~[;[~~~SA,0p*S;S;*###p#c#;##@#@####@@##@@@@@#####e#ie#i#p#eeepp0ePP+L*SSSS~SSS*AAAAvS333v7F7l77ilG7FiMilMFlFHFHFHHMDWzzT(nnnrn}/>/>/>Un7YHYnfn}UU'/>wj5.....9r%>5.......j>j55j>j$D27kxL,7!!uuu!u!!!EHYYzYzzFzHHMFHa", "7aHHzHHHzDDWzHHBXXBll7llHHlGlGiiGGvBBB3mN7v,3o~)C;);S*Ai0p;S#**c#c####S;;#*#####;;;#*;;)#@##ce#e0eee0eieeeeeeee0p0A~S;S;SSSS,ALALASS,hs.sVzFFccGGBEBEGFFFFFMlllEllHMaTnr%n%DU4$s'}DTHY7Wn}'}4/'}'>w......5$n(>5......5j>jj>jw4}tu!!uKuuuu!!G!!!!!tTWWannTFTYYaF7", "HHFYzzazHWWWzHEEEEE,7l77M7kMGl7l,B_3_3K33K8o[;;;C;SSSA*AA*S;;**#c#|#c#SS;#c#c#c#;;;;#0#;;;;@##i#e#epe0i0p0p0p0A*S~S*SSSS~~SAppppLki,cEBWjw/VzHl7llcBcGlFFFlHHMHFlHiFFnDrffnz%rVnDrWFt7t{r}}}'&'44->j..5.jjj$>>j5......jwwj5>>4qnt!!!uKuu!utGtu!!G7mWTY=W=YYYzYHH", "HHFaTTaWznDDWzHElll7FkFFTnTF7GGGcXK3883K_3S3~~[[[~SAcAAA*S;)*c#c#c0#c@S;;;#*#c#;;))@;c###)@;;##i0ie0ee#e#pi*0AAAASSSAAA,S~SA,pkkkxR{k77GW//ynWzFFHBEBH7lM7li7MGFFzkzT%V}}}'D(FMzRnWm77:nr}}}U>$w>$>>j55.5jjww->>55....5>www9444}r==II!uut7{=:G!!Et7t7tITYTTYzTF7", "zaazYzazWWWDDWzH77kMkFFkFFFF,lcEBu3KK33Su~3~_~~~~3S*A*cSSS#c#i#i#|#c#S;;;);S;**;@@)@)@O##@O;S####i#c#epi0exppA0ApA,ppxNxpvALxxRkkhnRhkkFTV/yyVDnTTFllclG7MFFF7FFh%rrr}}//UUfrTTzFFY77Tnr}44//sjj5wwj>j5555jwww-->j>>jj5>Rn%%'4U}6W^N2!!7TPV6:7T=t77YIIIYIYYTYTTa", "FFaazTzWWnzWWnWFM7FkFkTFFTRzFEcB_33K_3_3333~3SO~~3ScSSS3SSc*pip#c0#c;;;)@;;;;S;S;@)@C@)@)#;#O#Sc##c#c#ippepexpppppxeee{exLLe++PrRR+(hRkkzWV}VfWnnnFGBE,cG7FFiMkRnrrr6}}U//}U}rRFY7t7{hrf&4444w555jjwwj55..jw>>&(>wjw>>%Rl7PU$4U}nWtu!t:hrrqD=thW7t7tttIIYYYWYTT:", ":F7FYHazzTTWTTTaFFFzFFFzRzTFl7GBKKoKB,__~8~3~~~8~3~ScSSS~S*c0ipc#cS*;)@)));O;SS;@C@)@);;;;;;;;;#c##c#c0epeexeeexxpixeRexxLpR+rPP%RRP%%rnTFnyy/rTnz7lBlG,MFkMHkznnrrnnnrVUUU}qr{TF7Ytkn+r}'$>wjj555j>wjj5w5j9%ixi%>>ww9UktU$44s$4&Hu!!Gt==DPVh:tt2t2t2IIIIYYY=TYY", "77kiF:F7FFFTTTTTFFFFFFFFTzklEiBXKKKB7,u3K388ooo88~3~SSO~SSc0cpp#S;S;;;)@C@)@cS;S;;)@)@;S;O;;);S;;SS#c0ppexeeeeeexxppxxexpLLkR+%PP%+rPrr%RFHz7zzFl7GBBc7ikFkilkxn+nnRznr}}U}}rn{TWF:777FRrq$9wwwjjwwwwwjww>$$RX[[A6w$w>$+r$s99>$shGtm2!ttt=hh=t22222222IIIIYYTYYH", "L777kFkFF77FFFTnhn{TTnRnTFFFFFX3333Fkl_uKK88[8~88~~3~~SSS*c#pie|*O;~;;;@;;;;#SSSS;@@);;S;;O#;O;SO;S#c0pppeee+++eeeixxxpxxiikxR+6r+%+%r+nkFiki7,GlBBXcGiFFkFkFRnRRzFFknr}}}VDnhrPV6rhmFkr}U>wwjj5jjwww5jww$r++p!uSSc%$94V4w>wwww$hWPPNtGt!!22!!!!!222IIIYYYIYYYHt", "lGi7i7k7kkL77FFWDDDDWnTTTz7F7GBXBXGzWE333Koo[[o~3888[~ScSccipii#c;);~SSSS~OSSOS;S;~)@;SO;S;;O;SS;SSccpepeee+ePPP+eipxipppiiixR%Prr+++RFFi7,H,GG7cX3BG7,iFiMkR(+n+TFYFWWrr+hn6}}&U}}6nxx%q49w5w55wwwww55ww4R7=mtpR&rxz6&UU9wwww9>UDqVPWt!uuu!u!!2!222IHIIIYWIWIH7", "7GGGG77LGG7BE77WWDDDDDDWzYF7BXEB_GaWaGB3K8K[[8~O~O~~~OSSc#c#ipppi*~~~~S;S;O;;;O;);;;);;;c#O;S;;c;c#c#ipixiee+PP++++exxppxpiikR++6%+nnklBGGGcEBBXu3XBEc,FikkFkFRF{77FWWWWWhn}}444UU}qr(xxr&>wwwww5wwwwwww94tu2N=:hq$$4r&&'>99www9$gy&&6Nm!u!u!!!!!2ItIIY=YIIITHH7", ",,G,ccG,G,GvBG7FThrDDrDWFHlGEBBEEHzTYEB3K8ooo33SS3~_O~ScSc*ippppi*S~S~SO;;);O;);;));;);ciS;;);O;OScc*i0xxxeeP++P+++RRxxxipixkR%+r+nRRxMiGGEBX_33Ku3BBEB7lkFkFFFFF7tFWhW{Th+UU$$$$4q}6+RF(64$wwwwwwwwwww9$U7uuttp7h}$$$>4g$>99w9s4Uq&VVNm2!!!!!!2!!tY==YY==TYYYHt", "7,G7G77L7,,GBG77YYTWWDWz7l7GEcEGGFWzHE_33oK88~333_S~3ScAiipiepeppcSOSSS~O;;););)C@C));)SSO;););;;;#iiiipix+ee+++++R++RxxRxx(R++rrr+%hnR{FiGBBKK3KK33uBBEi,kFkkkF:7F:kTTTThr}U4$444$U'U}PhF+'$>wwww9w9w$44U^!u~u!!ph}$www9$99>w9$$UU6PhNm0!2!!2tttt:::==W=YT=YYt7", "7iLL,77,77L7LG77i7FkTWWT77,GGGG7HTnzHEBKKooK33v3_S3_~cAAppiipeippAA*SSSS;););)@C[CC@C[@;S);)@);O~SSc0*i0ieee+e++P+e+R+RRRRRP+rPrPr6r++nRFFGEXKKKKK333XBBiliiMkFkFmF=FT{h{hrqU444U4$$4g&UP(R6$9wwwww9w4$4U$}=!KKKu!m+q$9www9w99>94$U}h{ktt,tttttmmmkhhh{h=W=YYYY:", ":77777L7FFFLG7FH77Y:TFTTai77L7lFzrW7lB3KooK8K_vAv_v_*cipppppixpipiccccSc;);;[;[C[CCCC)C[);C);;~~ScS*ci*ccxixRee+++P%+PP%+%66q6}q6}6PnRx{FLcBuKoKKKXGEBEGGi,LLFFk{Whk{FRh+++}&&U&U4$4U4Uqq+%&>$9www5w5w94U4d6N!KoKKuLkP&$$w9w9ww9w99gr{{LpmmpppLmkk{hr++h+hhTFY:7", ":F7:77:7:TF7777a7FL77:TaTFii77HaWnWGBuO8oo833_vccAvvc,pxxpxixppiApAAAcc*S~[~[[[CCCCCCCCCCCC@[~SSSScSScSSAiixxeRR+P6PP66P66q'g&&}&}rr+RzkF7lBX3KK3HHGBc,L,li7,iFRRRnhh{n++r+q}q'qU4gU&UUq}6qg$9w5555555w9$$$UdWIuKoooKGxq99wwwwwww9w$4q6V6PPDPrhr+hh+r+%P+hh{7:YY", "::T77Y7aTFFFF777777L7kFakF7FaHFWDW7E_338KoK83Bv,,cAA*ippxpipippAAippcAccS~~~;@CCCC@CCCCCCCC)~~OScSScSSSSA*iiixR+e%P6%66}q&qU&'q}6r+nR(ii77G,GXX3X77GGL7ikkilikRn+r+++hhn+r6q&q}&&g4U&'&qq6qg$9955555555w$4Ug$$dN2!uooKuL+g$99wwwww99$$$$U$ggU&&&UUq6Pr+nhRx7F7:Y", "Y7YFTF=Y:::L7F7F7F77FmkTkTF:zHWDDTluKKKKO8K3Kvvv,cvcvcpixppipipc*cpp0iAAc~oo8[CCCCCCCCCCCCCC[~~S3Sc~333SccAiixxRR++66qqq}qq&q}66%h(R{kFl,i7iLGGEBlcBGkkxkkk77nPr66rrP%+++r6}'&q'q&&U&&qq}q&4$ww555.555ww$U4$$$$V^NI!uooKuxPg99999$ww$9$$$$y$UygUUU&}&rRxxzkmF::Y", "F:F:Y=FFFFF77777F:kTFk{TWTWTYWDyDzGX33KKKK833_vAGvvvAiixipiAiAccSAAiAiicA388;[CCCCCCCCCCCCC[[[~~3~3S3~OS~SS*ciixRRR++PrPP6rrPr+++hhRRkpM,li7iiii,,LLkFRh{kFk{+%6666P++h+%6q&Uq66}&U&&}qqq&Ug$9w55555555w9g&$99$&V+^NI!KKK~!N&$99$9$$9$s$99$g$gUUUUUU&&6nhkkF:7F:", "YYaFaTY:77F7k7k7kFTWhWWhWhnnWDyyVYEuKKKK8O33_B_vvv_X_AiipipiipSA_vcAAA,AA~~[[[CCCCCCCC[[[[CC[[[8~8~o~8~S333_AAiiixxRR%++%+%+Rn+nnnRnnRFkG,lkFkFiL7kik{Rnhkk++r+rr6%PrR+++r}&}&}PP6q}666}q&Ug$ww555.555ww9g&$$9$gqD+^WN2uKKKK!p+&$9999$9$$s99$$$gUggU&'6+Rhmk7YY:", "HFYY:YFaFkm77k7k:kTkWWnWDVVVyys/rzXXKKOKK33__3B___vvvAiippiiAic_SvAi,i,cSSoo;[CCCCCCC[[CCCC[[o8o8)8o[)888~~~3_SAcciikxhRR+R+Rn+++n+nRx{,i,iikiiLkkk{RRhRRk{hr6PP+++rRRxn+6}&U&q6V66Prr6q&'ggg9<5555555ww4&UU$$$Ud6VW^NN2uuKKKuB7kr&U$U$99$$$s$$$$UUU&qPP+kk:777:", "77FTF=:::Fkk7kmkF{T{WrDVyyyyssssWYEXKKoKKK33_3____3_vvAiciipAiA_3S_AAA,AS8o[o[CCC[[[CC[CC[[[ooo~o~o8oo~[8o8o8~3Sv_v,iixRRnR+n+%+rP+%+R(GcGliFLFiikk{RRnRhRRhPrr+r%RRR(R++rq}&'q6Prr++6r6&&gg$$ww55555599g&Ug$$yqV&V^DWN=!!uKKuuu!t:hDg&U$9$$$9$U$ggU&q6+h{km7:7Y", "77m7:77F7777k:kkk{hWhrrVVVyyyssyDHEXKoKoK3u___3__3_3__AA,A,cpc,v333vAAv__~oo[C[CC[ooo[;oCCC[[o8~3~8~8o~883o8888~3__cLFxxRR+%++P6rr6+r{ki,,iLikikkkRRhRRRR{RR++++RRRRxRx(++}q&&qP6PRn+P6&'gg$$$$w<5599w$$ggg$gg&qq66D^W^I]!uuuKuuKuutthhVqU$$$$$$$$g&'6+R{kLL77t7", "77L7k7LL77k7k7kmkThWrWrrWhTWWWyyWMB3KoK8K33___33_S_3__vA,c,A,Avv~383vvvS3~ooo[CCCo~u!Suoo[[[oo~33~3~8O~83~88oo8833SB,ikx%RR++%P6}P}n+RFil,iLikkkkk{Rn+nRxxRRhhhR(x(x(RRR+P6}&}qqrP+hr66&&ggg$$$9999w9$$g$$g$g&qVP6PP+W+=I!uKuKuuu!uttmmer6&yg$$UgUg&q%+Rkk7,777t", "Lk7p7L77L7LFpkmk:kkT===:Y7GtHtDDnHEuOKoo33B_Bvvv__S333_vv,AccAv333K~33S3_8;ooo[oKuW&qhtu[[[[o88~33_S3S_333O888oo83_vcikxxR+++PrP+r+rRzkGvEc,i,,LkkxxRRRzRkkkxxRRxxxxxk(RR%Pq'qqP6++PPqqUg&ggg$$$9999$$g$g4$&g&q6P++NDNWN2uuuKuuuuu!LmhP66q&$g$g$U&U&q6PRxkL7L777", "LLLLL,,,,7LLkkkkk:kkLML,GBX_BGaWTHE3KKKK33BvGvB,v__333S_vA,AAvv_8~K8883~3K8oo~ut=DyjsNv~o[[[oo83S__A__v_S33388Ko883vALikz(RR%Rrr+++RRkicBBvEccBcLFkkkkxkxkkxzkkxxkkkxRkR+PP6q6q66rPP66q&gUgggg$g$$$$$g$$$ggU&VP6^WhhNN==2uuuuu!!!!!0=6qgUgggg$UggU&qq6P+RRkL7pLp", "LFiLiLiikikkkkkkkkkLk7i,cB_BXBEHYGEu3KK3_B,7777cvGB__33__BvvvvS33K88888388ooouAL{PVyTuo[oooo8883~_vAcAvv__338Oo8[88_v,LpkR(RRnRRnnRkki,vBcB_u_3BGLkkkxxzxxx(xxxkkkkkRxxR++PP6q6666r66q&q&ggggg$ggg$g$ggg$gg&qPPh+hNNhNN2!uuu!!!!*!2Y^V&g$$U$$g$$ggU&qq66+RRkk7kL", "LkkkkLLLkkkRxxx{kkkLkLLGvB_B3_BGHEEXuXBEHFFkiG,GcLGvBK~___vv_vBu3~8o[oo88888o8_B,YW=Bo[[o~~8838K3S_A,,,,vS3383o8o88__cc,ipkkx(RRR{{FL,,cGvBX3X3_B,LiFkxRRxxxx(xkkkkkxRxR+P66666666P666q'&&g&ggggg&ggg$$g$ggqPDNhhNW===m!uuuu!!!22!tth&gg$$$g$U$$$gU&U&q6+RRRxkkk", "xkkkkkkkx{Rkkkxkkkkkki,,vvv3B3KBXEEuXuBHFFTa77,GGG77,B33K___vSS3338o[[ooo8ooo8K_BGYGKCC[8833S33333_A,,,,Avv_333KK883_Bv,LiikkLiFiki,,,,,vv__u3BBB7kkkRhRxkkxRxxkkkkxR(x+PrP6r666q6666&q&'&g&ggg&&&&&gg$g&&qD^hh{N{mmmI!uuuu!!0Im0ptI^q$$$$$$$$g$$$$U&qqqP+RRRRxk", "kkx{R{x{Rx{{xxzxkkkLkL,,vvv3_3K3uXBuEEEHWFFFF7GGG,77kGBKK3___3_3~388oC[[[oo~o8Kuv77uK[[[8~_S__333S3vA,pi,cAvv_O38KKK3_vc,Lc,L7,,GG,GGvG,vBB_B_Bc,,kkRRRhR{xkkxkkkxRxhRxRPP666666666}66qq&&&gggg&&6P6&g$gg&Ph{{N{{mmmt0!uKuu!IINhNkmm=Vgg$$$g$$g4gggg&qq6P+RRRRxx", "RRRRRRRR(xRxxxxkkkkk,,Accvvv_KKK3uuX3BH7777GBvcB,GGkTT7B3KK8_S33388oo[CCo[8o883BB,Gu[[Co833vvvS333_SvAi,,,cA___33O8K33__vBvBBBBEcBc,vcvB,cvBBvv,ikkRRRnRxkkkkkxxkRxRxRR++rPPr666qqP66&&&&&&gg&&&PRRPPqgg&6+mN=mmmpmt2!uuu!2tNh+66PR=N6gg$g$$$$$$gU&U&&66P+RRRR{R", "RRh++R++RRRRRzxxkLik,,vvAvv__3KKKOuXuXEEEvvvvBvE,,77ThTHu8KKK33K888oo[[Co[o8K33B777u[ooo833SAAGSS333vA,,p,,cAv333338K8K33___3__uBBBBBG,,,c,v,G,Lkk{RhRRRzkkxkk(RxRRRxRRrPP6666}qqq6q6qq&&g&ggg&66eRR+6qq6h{pLptpIttt*uuuu!20{+P6qqPhNDdU$$$g$$g$gUg&Uq66++h+RhRR", "xRRR+++++RR(xxxkkkL,L,,,cvvB_OK3KK333_BBc,,,,v,vBGE7YWrW,338K88KK88K[[CooK883uBGGHG3oo8888_vv,vAvv3v3_AcA,cvv__333K3KK8KKK33uu_B_BvB,vc,7L,,,,kLkkRRRRRxkkkxRRRnRxR(RRR+PrPr66q&&&qq&q&&&g&gg&&6+Rx{{hPP+{mmtLt0tAt!!uKuut:{NP6qqqq6hhqg$$$$$$$$g4&&qqq6+%RR+RRR", "RR+++R+R+RRRxRkkppi,c,Avcvv___333KKKK3BBv,,,L,GvvBv,GFWWWtXK8K88oooo[[[oK33_Bv,G77BKoo88833_v,LvvvS_S_vAvAv_v__333K38KoKKKKK3_3X__BvB,,,Lkikiikk{x{RxxzkikxxRRR+R(ekxR++P666q6&&U&&qq&'&&gggg&&6+k:tt=NWNtLtLtttttt!uuuu!0mh+6q&&&&&qP6gg$$$ggUgggU&q6PPP+R%RRRR", "RRRR++++++++nx{kpiL,,,,,vv_vu333KuK33u_B,Lii,,,,vvBcG7FTWFGuK8Kooooooo[KuuBEE7777LB3o888333vv,A,AAvvvvvvv_vv__333333O88KKK3vBv,G,,c,LLLikikikkkkxRRzRxkkxxRR++++RhRx(R+PP66P6q&gUU&&&&&&'g&gg&6+h=LLttI=mLtttt,!A!!!uuu!t=h+Pq&g&g&&qPrq$$$$$$$ggg&&qq6P+R+R+RxR", "x(RRRR++++RR+xRxki,i,i,,cA____u_33uu_BvLi77iii,,cvBBvG7FWa7_KK[ooKoooooKBEB7G7FF7FEK[o833~S_vv,,i,cvvv__v___3_33u33_3OK33B_c,,,,iLLL7i7kxkxzkxRxRRRxkkkxRRh++++++RRRR++66666qq&&ggU&&&&&&&&&&q6hNmt!G2ttt!A!A2A2!v!uuuuutNh66qqg&gggg&6qg$$$$$$gg&Uq66PPPR+RR+(R", "xRx(xRRR+R+RRRxxppp,,,,,vvv_BB_33_33_BGLikkk7,7LGvvBBEGHTYHE38ooo[o[oKK3B777TWTTW7BKoo~3__3vvAc,,,cAcA,cvAvvvSuv_B_BvBv_Bv,LLkkkkkkkkkxkRRRxxR(RRRRRRxxnR+++PPP+++RRx+P666}qq&Uggg&qqq&&&&&q66PhNIL!2u!!!t!!!!v!!!!!uuu!LhP6q&g&ggggggqqgg$$gggU&g&&6qPP+++RRx{x", "xRxexxRRRRRxRxxki,ii,,A,cvv___B____u_v,7kpkkki,,,,cB_XBEHz:G3Ko[oooo[KKuE7WWWDDWW7BKoK8S3___vvcA,L,L,,,AccAvvvvvvvvvvvvvv,Lkkk{{{xxxR{RxRRRR(RRRnRRRnh++++P6PPP+++RRR%66q66qq&gggg&&q666&&&&6P+W=It!!!!!!!G!!!!u!uuuuu!!mP6&&Uggggggggg&qgg$$$ggU&&qq66PP++RRxkx", "xxRxkRxxRxxRxxki,,AAiAccvcvvvv_vu_vvB,,pkkkkiLiLL,v_v_3XHHFGBKKo[[[[KK3XGanrDDDDrHuKo883_S_vvvA,,Ai,iiiL,,,vcvvvv,,v,,,LLkxxkRhRRhhnRh+%R%+RRRRRRhhRR++PP666P6PP+++++PP666qq&UggggUqq66666q66DhNmL!2!!!!u!!!!!!!!!!uu!utNPq&g&Uggg$$$$ggUgggg$g$&U&&qq66++Rh{k{k", "Rxxxxxx(xxxxxii,,cAc,,AvAcvvvvvvv__vvGLkkkkkiLLL7,cv_333EHHHE3Ko[oo[oKuBGYD}yyyyVTXKo88_____Acvc,,LLLLppL,LL,cc,,,LL,LiikkRhRRh++R+R++++++R++RRRR+++++PP666q6q6P++++RPP6666q&&ggg&&q66%6q66V^WN=It!!!2!!!!!u!u*!!!!uu!!LNqq&gggg$g$$$$gg&ggggggg&&U&q666++R{{m{{", "RRRRRxexRRxxkppLc,,L,,,i,,,,c,AvvvvvvLLkxkpkkFii,L,vB33uuBHGGuKooooKK3uBGYDyy$yyyTE8o8~3_S_vvvvA,,,iLLiikp,,,,,,,,,LkiikkRRRhR+%+++++R++%+P%RR%RRR+PP66qqqqqq666P++++P666Pq'&Ug&Ug&q6PP666V+PWNmtt22!!2!!!u!!!!u!!!u!!!mh&gggg$$$$$$$$$gggggg$g&&&&&qq6P+hN{mxx{", "+RRRRxRxRx(xkiLLLLipkkppkpiLLLLvvvvGALkkxxkkpLik,,vvB383XBEGHE3KooooK3uElYWyssssyWGKoK8__vcAcvcvc,,ipLpiikL,,,,LLiiLkk{{RR%++%++P%P+rPP+PP++RRRR%PP6qqqqqqqq&qqqP++++P6P66qq&&&g&Uq6PPP+PP^+WN::t2!22!2!!!!u!!!!!u!uu!tmP&ggg$$$$99999$gg&g&g&gU&&&&&6&6+{====RR", "++RRe(RRReRxxxipikxkxxkxkkkpii,L,vGvLLkkkxkpkk7LLL,v_33KKBGHGuuKKoKKKuXGHzDysjjssDH3o833__vvGv,vA,,,,iLLpLiLLLLiLLLkk{xRRR++PPPPPP66r6P6P%P+%R++6%66'&&'&&&qqq666++PPP6rPP6&&&U&&&q6PPW^+W+NW==tt22!!222!!!!!!!u!!!!!!L{P&gg$g$$$9$9$$$$&g&g&g&&&&&&&q6Phh==mhhR", "+++++eRRRRRRxxxxxxRRRRhxxxxxkkLLLA,v,Lkxxkkkpkii,L,,B3KKKuBGGXu3KKKKKXBEHaWys.5jsVTu8K~__vvvAv,,cA,p,piLLLi,,,,iLLikx{Rn+rPPrP6}66666666PP++++%P66qqq&ggg&U&&&qqPP%P666PPP6qq&q&&&q6rhhWhhW^==tt222222!22!!!u!!!!!!!*2tN6&g$$$$9$9$99$ggg&&g&g&U&&&&&qqPhN==m{R+", "P+++RRRRRRRRRkxxxRRxRRRh{xR{kpiL,,c,ikk{xxkxkpLLL,cvv33KK3XGGGXuKKK33uBG7TWyy...jyWE3K8_S_vc,,,,A,i,i,LiiikkkiiLiikk{RR++Pr666666f6'66fqPPP%++P6&&&g'g&Ug4&U&qq6P++PP66PP666qqq&&&6P+hNWNW=Y:mtt22!22222!!!!!u!!u!!!!Am+qgg$$$$$$999$9$$&gg&&&gqg&&&qq6PhW==WN+R", "PPP+P++RRRRxRR{xx(RRxRxRRxRxxxkpLL,L,kkxk{kkkkiiLL,vv3K8K3uGGGXuu3KKuXEEHTWVyj..5yDt3K83__vvcc,,cAA,,,,LL,iLpLkpkpkkxRn+%PP66r6qqq6qqq66P%PP+P6'&&ggg$ggggggU&qq6P+6P66PP666qqqqqqqP+h=====:IItt!222222!2!!!!!!!!u!A!tx+q&g$$9$9$9$9$$gg&&ggg&&&&&&&&q6+Nh==hh+P", "+PP+++++RRxRx(xRRRRR+RRRRhxR{xkpi,,,iikkxxkkkkLL,,,v_3KKo3EEEGGX33u3uuBHHYDVs<...sVzuoo3_vvvA,,,,c,ip,i,LLLiLkLkkkkkxR+++Pf66'66qqqq'qq6P6P%+P6'UgggggUg$gU&&&&6P6P6666P66q6q66q6q6P+W{==Y=I:It222222222!!!!!!!u!!!2LmNP&g$$$$9$$999$$$$&gg&&Ug&U&&&q66+h==W=h++", "PPPP++R+R+xRRRxRRRRRx+RRR+RRRxkxpi,LLikxkxkkpkkiL,,B_38KKKX!EGGEuXu3EBBHHYWVys....yWG3K83Svvvc,,,AAc,,piiLLkikkkkkkxxRR+PPP66qqqqqqqqq666P+P+6&&gg4$$$$g$g$gU&q&PPP6q66666q666666qPPhN=Y:tItII22I2222222!2!!!!!!!vGAtxh6&g$$$$99$$$9$$g&&&ggg&g&&g&&&66h+=W=Whr+", "PPP+P+++RRRxxRRxRRRR+RRRRRRRRRkkkLL,LkxkxxkkkkLL,,cvXKKKK3uXEGHEXuXXuBEHHWIDys<..jsDY383K3_vA,,,i,A,p,i,LLkLpkkxpkkzRR+PP%66'6qq'&&&&'&'P6+P%6&ggg$g>$$$$$g$&&qqP6Pq666q6q66666q6P6PhWm=IY:It2II22I22222!!2!!!2!!!ttmN+&gg$$$9$9$99$$$gg&$gg&&&&&&&&&6PrNW=WNh+P", "P6PPPP+PR+RRxRRxRRRRRRRRRR(RxRRxi,i,,ikxkxkkpkkL,,vB38ooKKXEGGtGEEuXXEEHHTWDVys..ssVWu3K33_vvcAc,,,cL,LLL,i7LkkkkkxxkRn+PP666qqq&&'&&666PPPP6&&gg$$$$$$$$gg$&&&q666q6q66qq666P+P6PP+N{m:YtIIIIII2II22222!!2!2!0GAGtLxhP&&g$$$$$9$$$$$g$ggggggUg&&&q&q66+hN===WhP", "PPPP+P+++R+RRxxRRRRRRR+RRRRxRRxxkp,i,LikxkkpkLLi,Gv_3KKKK3uBEGGGEEEuEEGHYYWDys c #53B277", ", c #5EC27B", "< c #62C87C", "1 c #045C88", "2 c #04618F", "3 c #227D82", "4 c #0E79A1", "5 c #1C8498", "6 c #289398", "7 c #38A99B", "8 c #1B88A2", "9 c #2898A2", "0 c #37ABA2", "q c #45B89A", "w c #44BBA2", "e c #55CD9D", "r c #68D788", "t c #7CFE9E", "y c #56D0A1", "u c #61DEA0", "i c #6CEBA0", "p c #80FF9E", "a c #82FFA0", /* pixels */ "=%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%=%%%%%%%%%%%%%=%%%%%%%%%%%%$%%%%%%%%%%%%%%%%%%%%=%%%%%%%%%%%=%%%%%%%%=%%%%%$%%%%%%%%%%%%%%=%%%%%%%%%%%%%%=%%%%%=%%%%%%%%%=%$%%%%%%%%%%%%%%%%%=%%%%%%%%%%%=%%%%%%%%=%%%%%%%%$%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%=%%%%%%%%%%%%%%$%%%%%@%%%%%%%%%+=@@@=%%%%%%%%%%%%%%%%%%%%%%%%%%$%%%%%%%%%%%@%%%%%%%%=%%%%%%%%=1=%%%=1=%%%=%%%%%$%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%=%%%%%$%%%%%%%%%%%%%%%%%=%%%%%%%%%%%%%%=%%%%%%%%=%%%%%$%%%%%%%%%%%%%%%%%=%%%%%%%%%%%%%%=%%%%%%%%=%%%%%$%%%%%%%%%%%%%%=%%%%%%%%%%%%%%=%%%%%%%%=%%%%%=%%$%%%%%%%%%%%%%%%%%%%%%%%%%%%%%=%%%%%%%%=%%%%%=%%$%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%=%%%%%%%%=%%%%%$%%%%%%%%%%%%%%%%%=%%%%%%%%%%%%%%=%%%%%%%%=%%%%%$%%%%%%%%%%%%%%=%%%%%%%%%%%%%%=%%%%%%%%=%%%%%=%%$%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%=%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%=%%%%%%%%%%%%%%%%%%%%%%=%%%%%%=%%%%%%%%%%%%%%+@=@@@%%%@%%%%%%%%%%%%%%%%%%%%%%=%%%%%%%%%%%%%%%%%%%%=%%%%%%%%%%%%%%@%%%%%%%%=%%%%%$%%%%%%%%%%%%%%%%%=%%%%%%%%%%%%%%=%%%%%%%%=%%%%%$%%%%%%%%%%%%%%=%%%%%%%%%%%%%%=%%%%%%%%=%%%%%=%=", "%112121311122212211122212111212212111222221221211222222221211%22122222212211122111212222112211122222222122222222222221211221111222221222212112222222222222221222112222212221221211222222112122212222222222$$1121121222221211122112%222222122121211222221122%2222112211$1112111222211$$$$$+$111221211222%22221121122221211221$12%29i%4224221222212222222222222222211112222111112222%22212211211222%22222222222222212222212112122111222222222211112222222122222222212222212112121211222222222211212222222122222222222212221112121122222122212212222222222222222222112212121221221222%22222112122222222212122222222221222122112122121%22222112222121122222112222222212222212112122111222222222211112222222122222222222222211211121122222122212212222222222222222222212211222211111222%22222122212212222122222%222121222112122121111$122211122222121121122222222222222211212122221221$$$$@O$111122112112212211111124221112122122221222212222221222121$1111211212222221222221211221121122222222221121222222122222222122221212211212112222212221222122222222222222222%", "%222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222221212222222222222222222222222$22222222222222222222222222222222222222222222222222222222222$22222222222222111121$$$$+$12222222222222222222222221$12224ia422222222222222222222222222222222222222222222222222222222222222222222222122222222222222222222122222222222222222222222222222222222222222222222122222222222122222222222222222222222222222222222222222222222222222222221222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222122222222222222222222222222222222222222222222222222222222222222222222221222222222222222222222222222222222222122222222222222222222222222222222222$11222222222222222222222222222222222222222222222122111+1$$$$$$11222222222242222222222222222222222222222222222222$12222222222222222222222222222221222222222221222222222222222222222222222222222222222222222222222222222212222222%", "%222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222221222$22222222222222222222222222222222222222222222222242222222221$12222222222222221222111111$$$$$$12222222222222222222$12224iu222222221222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222122222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222122222222222222222222222222222222222$1122222222222222222222222222222222222222222222222222$1111111&$$$$$$22212212222222222222222222222222222222222221$12222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222%", "%222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222221222222222222222222222222222222222222222222222222222222222222222221$2222222222222222222222222222222222222222222222224222222221$122222222222222222222222222111111$$$$$122212222221222$2222294%42222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222212222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222221%2222222222222222222222222222222222222222222222664212$11222222121111$$$$+122222222222222222222222222222222222111$22222222222222222222222222222222222222222222222222222222222222222222222222222222222222122222212222222222222222%", "%222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222221$1222222222222222222222222222222222222222222222222222222222$22222222222222222222222222222221111$11%$$$$$122222222+12222424w2222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222$1222222221222222222222222222222222222222222222wiu612$22222222222221$11111$$$$$12222222222222222222222222221211$122222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222%", "%122222222222222222222222222222222222222222222222222222222222222221222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222$2222222222222222222222222222222222222222222222222222222221$12222222222222222222222222222222222222111111$$$$$$221122222222i2222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222212222222222222222222222222222222222222222222222222222222222222222222222221222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222122222222222222$12222222222222222222222222222222222222222222228iae41$222222222222222222211$111$$$$$122221222222222222222222221$222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222%", "%222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222211222222222222222222222222222222222222222222222222222222222222222%1222221222222222222222222222222222222222222222222222222221$222222222222222222222222222222222222122222221$1111$$+$$1222214u4222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222221222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222221112222222222222222222222222222222222222222222222122222222222222222222222222222222222222$12222222222222222222222222222222222222222222223iap41$12222222222222222222221221$11$1$$$1$1122222222222222222211222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222%", "%12222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222$11122222222222222222222222222222222222222222222222222222222$222222222222222222222222222222222222221222222222221$+$1$$1%$1294222222222222222222222222222222222222222222222222221122222222222222222222222221222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222221$11$$1222222222222222222222222222222222222222222222222222222222222222222222222222222122222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222$12222222222222222222222222222222222222222222226pptqq&$22222222222222222222222222222211$$1$1$1$111122222222212$1222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222%", "%22222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222122222222222221$22222222221222222222222222222222222222222222222222222222221$1222222222222222222222122222222222222222222222222222$222$$11$%121$122222222222222222222222222222222222222222222221$122222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222122222222222222222222222222222222222222222222222221$1$$11$11$12222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222221222222221222222222222222222222222222222222222222222222222222222$1222222222222222222222221222222222222222222246upppprq62222222222222222122222222222221221111$$$111%1$122222211$1222222222222222222222222222222222222222222222222222222222222222222222221222222222222222222222222222222222222222%", "%22222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222$12222222222222222222222222222222222222222222222222222222221$1222222222222222222222222222222222222222222222222221$122222221$$$1$$1$$1122222222222222222222222222222222222222221$122222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222221221$$$$$1$12222222222222222222222222212222222222222222222222222222222222222222222222222221222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222221$222222222222222222222222222222222222222222257uatttttti6222222222222222222222222222222222222222222222$$$$$$1+$1112222212222222222222222221222222222222221222222222222222222222222222222222222222222222222222222222222222222222%", "%22222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222221$2222222222222222222222222222222212222222222222222222222221$2221222222222222222222222222222222222222222222222221$122222222222222222222$$$$$$1111111222222222222222222222222221$122222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222$$$1112222222222222222222222222222222222222222222222222222222222222122222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222212222222222222222222222222222222222222222222222222222222222$12222222222222222222222222222222222222245669eqeittt>qut7222222222212222222222222222222222222222222222222221$O$1$$1111112222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222=", "%2222222222122222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222$12222222222222222222222222222222222222222222222222222222222$1222222222222222222222122222222222222222222222222222$122222222222222222222222221$$$$$$1111111222222222222222222221$222222222222222222222222222222222222222222222222222222222222222122222222222222222222222222222222222222222222222122222222222222222222222222222222222222122222222222222222222222222222222222222222211$$11122222222222222222222222222222222222222221222222222222222222222222222222222222222222222222222222222222221122222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222221$122222222222222222222222222222222222223quw792226eti*24e5222222222222222222222222222222222222222222222222222$12221$$$$$11112222222222222222222222222222222222222222222212222222222222222222222222222222222222222222222222222222%", "=2222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222212222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222$12222222222222222222222222222222222222222222222222222222222$1222222222222222222222222222222222222222222222222221$222222222222222222222222222222121$$$$$1111112222222222222222$222222222222222222222222222222222222222222222222222222222222222122212222222222221222222222222222222222222222222122222222222222222222222222222222222222222222222222222222222222122222222222222222222221$$$12122222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222212222222222222222222222222222222222222222222222222222222222222222222222122222222222222222222222222222222222222222222222222$112222221222222222222222222222222222220uu62222222iq$1222222222222222222222222222222222222222222222222222222$1222211121$$$$2222222222222222222222222222222222222222222122222222222222222222222222222222222222222222222222222222%", "%2222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222221222122222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222221$12222222222222222222222222222222222222222222222222222222221$1222222222222222222222222222222222222222222222222211$22222222222222222222222222222222221221$$$$$$1112112222222221$122222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222242222222221222$$$11222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222221222222222222222$112222222212222222222222222222222222227642222222252$120e722222222222222222222222222222222222222222222222221$122222222212222222222222222222222222222222222222222222222222222222222222222222222222222222222222122222222222222222%", "%2222222222222222222222222222222222222222222222222222222222222222222222222222222221222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222221221$1222222222222222222222222222222122222222222222222222222222$1222222222212222222222222222222222222222222222222221$112222222222222222222222222222222222222122221$$$$$1122222222$1222222222122222222222212222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222221$$1112222222222222222222222122222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222221222222222222222222222222222222222222222222221222222222222222222222222222222222222242222222222222$22uttq2222222222222222222222222222222222222222222222221$122222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222%", "%222222222222222122222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222221221112$11222222222222222222122222222222222222222222222222222222221$1222222222222222222222222222222212222222122222222222$22222222222222222212222122222222222222222222222211$$11222221$122222222222222222222222222222212222222222222222222222222222222222222222222222222222222222222222222222221222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222221$$$212222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222$12222222222222221222222122222222222222222222222222$$27utaiq42222222222222222222222222222222222222222222221$1222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222%", "%2222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222221$$+11222222222222222222222222222222222222222222222222222222221$2222222222222222222222222222222222222222222222222221$1222222222222222222222222222222222222222222222222212$$122221$122222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222111$$$122222222222222222221222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222$12222222222222222222222222222222222222222222222222$15ipttatqq222222222222222222222222222222222222222222221$2222222222222222222222222222222222222222222222222222222222222222222222222222222222222221222222222222222222222222222%", "%222222222222222222222221222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222212222222222222222222222222222222222222222222222222222222222222222222222222222222122+$$122222222222222222222222222222222222222222222222222222211$22222222222222222222222222222222222222222222222222211222222222222222222222222222222222222222222222222222211$$122$1222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222122222222222222222222222222222222222222222222222222222222222222222222222222222222222211$$$222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222122222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222$12222222222222222222222222222222222222222222222221$226qttaaiy222222222222222222222222222222222222222222221$2222222222222222222222222222222222222222222222222222222222222222222222221222222222222221222222222222222222222222222%", "%22222222222222222222212222222212222222222222222222222222222222222122222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222$111$$$222222222222222222222222222222222222222222222222222222$1222222222222222222222222222222222222222222222222221122222212222222222222222222222222222222222222222222222211$11$122222222222222122222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222221222222222222222222222222222212$$$1222222122222222222222222222222222222222222222222222222222222222222222122222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222$12222222222222222222222222222222222222222222222222$2224etttai222222222222222222222212222222222222222222222$2222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222%", "%12222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222221222222222222222222222222$122211$$$22222222222222222222222222221222222222222222222222$1222222222222222222222222222222222222222222222222222$22222222222222222222222222222122222222222222222122222222211+1222222222222222222222222222222222222222222222221222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222111$$$2222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222$12222222222222222221222222222222212222222222222221$222246utaae6422222222222222222222222222222222222222222$12222222222222222222222222222222222222222222222222222222222222222222212222222222222222222222222222222222222222222222%", "%22222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222112222211$$$122222221222222222222222222222222222222222222221$2222222222222222222222222221222222222221222222222222$12222222222222222222222222222222222222222222222222222222221+$$112222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222122222222222222222222222222222222221111222222222222222222222222222222222222222222222222221222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222122222222222222222222222222222222222222222222224222$22222222222222222222222222222222222222222222222221$2222223iaaaue72222222222222222222222222222222222222221$12222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222%", "%22222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222122222222222222222222222222222222222222222222222222222211$$$122222222222222222222222222222222222222222211$2222222222222222222222222222222122222222222222222221$22222222222222222222212222222222222222222222222222222222221$11$12222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222212222222222222222222222222222222222222222222222222222222221222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222212222222222122222222222222222222222222222222222222222222222222224422222$12222222222222222222222222222222222222222222222211$22222229uaaaaiw422222222222222222222222222222222222221$12222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222%", "%222222221222222221222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222221$1$$$222222222222222222222222222222222222222222$122222222222222222222222222222222222222222222222221$12222222222222222222222222222222222222222222222222222222222$1121$$111222122222222222222212222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222242224222222$12222222222222222222222222222222222222222222222221$12222222eaaaappq22222222222222222222212222222222222222$12222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222221222222222222222%", "%2222222222222222222222222222222222222222221222222222222222221222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222211$1$122122222222222222222222222222222222222$1122222222222222222222222222222222222222222222222222$12222222222222222222222222222222222222222222222222222222222$2222211$122222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222122222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222224422222222%$12242221212222222222222222222222222222122222222221$122222224aaapppi52222222222212222222222222222212222222$12222222222222222222222222222122222222222222222222222222222222222222222222222222222222222222222222222222222222222222%", "%222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222212222222222222222222222222222222222222222222222222222222222222222222222222222222221$$11111222222222222222222222222222222221$2222222222222222222222222222222222222222222222222221$12222222222222221222222222222222222222222222222222222222221$2222221$111122222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222212222222222222222222222222212222222222222222222222222222222222221222222222222222222$222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222122222222222222222222222222222222222222222222222222222222222222222222222222222%44222222222$11222222222222222222222222222222222222222222222222$122222222eaapppi6222222222222222222222222222222222222$122222222222222222222222222222222222222222222222221222222222222222222222222222222222222222222222222222222221222222222%", "%12222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222121$$$11222222222222222222222222222222222$222222222222222222222222222222222222222222222222222$12222222222222222222222222222222222222222222122222222222222$1122222211$1112222222222222221222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222221$222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222212222222222222222222222222222222249442222222222$12222222212222222222222222222222222222222222222221$2222222229aatppi4222222222222222222222222222222222221$122222222222212222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222%", "%222222222222222222222222222222222222222122222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222211$1$1122222222222222222222222222221$122222222222222222222222222222222222222222222222221$22222222222222222222222222122222222222222222222222222222221$222222222211$1122222222222222222222222222222222222222222212222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222221$1222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222240222222222222$24424422222222222222222222222222212222222222222221$22222222240uptt04522222222222222222222222222222222221$122222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222%", "%22221222222222222222222222222222221222222222222222222222222212222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222221$$11122222222222222222222222222$1222222222222222222222222222222212222222222222222221$2222222222222222222222222222222222222221222222222222222222$122222222222211$12222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222122222222222222222222222222222222222222222222222222222222222222222222222222222222222221222222222222222$2222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222221222222222222222222222222222222222222222222222222222222222222212222222222222222222222222222222222222222$11249922222222222222222222222222222222222222222221$222222222248utt55522222222222222212222222222222222221$122222222222122222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222%", "%22222222222222222222222222222222222222221222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222221222222222222222222212221121$$11122222222222222222222221$1222222222122222222222222212222222222222222222222221$1222222222222222222222222222222222222222222222222222222221$1222222222222221$$122222222222222222222222222222222222222222222222222222222222222222122222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222221$1222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222242222222222222222222222222$1%29y222222222222222222222222222222222222222222222$2222222222226ee22222222222222222222222222212222221222$222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222122222%", "%2222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222221222222222222222222222222222222222222222222222221$$$111222222222222222222221222222222222222222222222222222222222222222222222222$12222222222222224022222222222222222222222222222222222222221$222222222222222221$$122222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222221222$12222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222$124e9222222222222222222222222222222222222122222221$21222222222212222222222222222222222222222222222222221$122222222222212222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222%", "$2222222222222222222222222222222222222212222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222221$$111122222222222222221$12222222222222222222222222221222222222222222222222112222222222222222442222222222222222222222222222222222222221$122222222222222222221112222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222212222212222222222222222222222222222222222222222222222222222222221$22222222222222222222222222222222222222222221222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222221212222222222222222222222222222222222222$14ew411222222222222222222222222222222222222222222$122222222222222222222222222222222222222222222222222222$222222222222222222222222222222222222222222222222222222222222222222222222222222122222222222222222222222222222222222222$", "%1222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222211$$11122222222222222$1222222222222222222222222222222222222122222222222221$2222222222222224422222222222222222222222222222222222222221$2222222222222222222211122222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222221222222222221222222222222222222222222222$1222222222222222212222222222222222222222222222222222222221$22222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222122222222222222222222222212222222222222222222222222222222222221%2ya4121222222222222222222122222222222222222222221$122222222222222222222222222222222222222222222222222221$222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222212222222222222222%", "%222222222222222222222222222222222222222222221222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222122222222222222222222222222222222222222222222222222212222222222222222222222222222222222222222222222212$$$12222222222222$222222222222222222222222222222222222222222222222222111222222222222222222222222222222222222222222222222222222221$1222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222221$122222222222222222222222222222222222222222222222222222222$122222222222222222222222221222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222$7u32222222222222122222222222222222222222222222222$12222222222222222222222222222222222222222222222222221$2222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222%", "%222222222222222222222222222222222222222222222222222222222222222222222122222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222212211$$$21222222211$122222222222222222222222222222222222222222222222221$1122222222222222222222222222222222222222222222222222222221$22222222222222222221222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222122222222222222222222222222222222222222222222222222222$222222222222222222222222222222222222222222222222222222221$222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222$4412222222222222222222222222222222222222221222222$12122222222222222222222222222222222222222221212222222+2222222222222222222222222222222222222122222222222222222222222222212222222222222222222222222222222222222222222222222222%", "%222222222222222222222222222222222122222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222111$$$2212121$1222222222222222222222222222222222222222222222222222$2222222222222222222222222222222222222222222222222222222221$12222222222222222222222222222222222222222222222212222222222222222222222222212222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222$122222221222222222222222222222222222222222222222222222211$122222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222%2222222222222222222222222222222222222222222222221$12212222222222222222222222222222222222222222222222222$2222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222%", "%222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222221222222222222222222222222222222222222222222222222222222222222222222222222222222222111$$12122$2222222222222222222222222222222222222222222122222221$122222222222222222222222222222222222222222222222222222222$122222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222221222222222$2222222222221222222222222222222222222222222222222222222111222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222221222222222221$2222222222222222222222222222222222222222222222221$12222222222222222222222222222222222221222222222222221+1222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222%", "%12222222222222212222222222222222222222212222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222122222222222222212111$$$22$122222222222222222222222222222222222222222222222221$1222222222122222222222222222222222222222222222222222222221$222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222$12222222222222222222222222222222222222222222222222222222$2222222222222221222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222+2222222222222222222222222221222222222222222222222$12222222222222222222222222222222222222222222222222222$2222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222221%", "%22222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222122222222221222222222222222222222222222222222221111$+$122222222222222222221222222222222222222222222222222$2222222222222222222222222222222222222222222222222222222221$222222222222222222122222222222122222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222221$12222222222222222222222222222222222222222212222222222221$1222222222222222222222222222222222222222222222212222222222222222222222222222212222222222222222222222222222222222122222222222222222222222222222222222222222222222222222222222222222222222222222222222222222$2222222222222222222222222222222222222222222222221$22222222222222222222222222222222222222222222222222222$2222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222212222222222222%", "%222222222222222222222222222222222222222222222222221222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222122222222222221$$$$$222222222222222222222222222222222222222222222222$112222222222222222222222222222222222222222222222222222221$1222222222222221222222222222222222222222222222222222222222122222222222222222222222212222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222$1222222222222222222222242222222222222222222222222222222$12222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222262222222222222222222222221$1222222222222222222222222222222222222222222222222$12222221222222222222222222222222222222222222222222222$1222222222222212222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222221%", "%222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222122222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222221$1111$$122222221222222222222222222222222222222222222$1222222222222222222222222222222222221222222222222122222222$1222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222$2222222222222222222222242222222222222222222222222222222$122222222222222222222222222222222222222222222122222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222221222222222222222222222222222222222224w2222222222222221222222222$1222222222222222222222222222222222222222222222222$1222222222222222222222222222222222222222211$$$$$$$$$$O$$$2222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222%", "%222222222222222222222222222222222222222222212222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222221$2221111$1122222222222222222222222222222222222222222$122222212222222222222222222222222222222222122222222222221$12222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222221$1222222222222222222222222222222222222222222222222222221$22222222222222222222222222222222222222222222222222222222222222222222222222222222222222222221222222222222222222222222222222222222222222222222222222222222222222222222222222222232492222222222222222222222222$1222222222222222222222222222222222222222222222211$111111122122121$$$$1$$$$1$$$$1$$$$$1$$$1111111$111$1$+1$12222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222%", "%22222212222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222$12221121$$$$1222222222222222222222222222222222222222$122222222222222222222222222222222222222222222222222222222$12222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222221$1222222222222222222222222222222244222222222222222222221$22122222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222224942242222222222222222222212221$222222122222221222222212222222222222$1$1$$1$$1$11O11$1$1$11$$1$1$1$1$1$$1$111$1$11$1$$1$1$1$11122222222$2222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222221222222222%", "%22222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222221222212222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222212222222222221$2222222221111$11111212222222222222222222122222222221$222222222222222222212222222222222222222222222222222222221$22222222222222222222222212222222222222222222222222222222222222222222222222222222222222222222222222222222212222222222222222222222222222222222222222222222222222222222222221222221$112222222222222222222222222222224422222222222222222221$122222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222122222222212222222222222222222222246623222222221211121212211211121+2222212211$$11$11$1$1$1$11$1$1$1$111$1$$$1$$$1$$$+1$111$11$1$111122222222222222222222222222222222222222$1222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222%", "%1222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222$$2222222222211$$$11122212222222222222222222222222221$222222222222222222222222222222222122222222222222222222221$12222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222$1222222222222222222222222222222222422222222222222222221$2222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222221$122222222222222222222223246w22222221111111111111$11111$+1$111111$$1$$$1$$$$1$$$$$$1$1$$$$$$$2222222222222$11122112221221222222222222222222222222222222222222222$2222222222122222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222%", "%2222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222221$222222222222222211$111112222222222222222222222222222$122222222222222222222222222222222222222222222222222222222$22222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222221222222222222222222222222$2222221222222222222222222222222222222222222222222222221$2222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222112222222222222222221111113q712112111$$$$$$$1$$$$1$1$$1$O$$1$$$$$122122222222222222222222222222222222222211$2222222222212222222222222222222222222222222222222222+2222222222222222122222222222222222222222222222212222222222222222222222222222222222222222222222222222222122222222122222%", "%2222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222122222222222222222222222222222222222222222222222222222222222222222222222122222222222222222222222222222222222222222222222222222222221$222222222222222222211$$11122222222222222222222222211$122222222222222222222222222222222222222212222222222222221$12222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222221$222222222222222222222222222222222222222222222222222221$122222222222222222222222222222222222222222222222222222222222222222222122222222222222222222222222222222222222222222222222222222222222222222222222222211$12222222222222221111111$$:*$$$$$$$$2222222121122122122$22212221122222222222222222222222222222222222222222$1222222222222222222222222222222222222222222222222222$2222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222%", "%222222222222222222222222222222222222222222222222222222222222222222222222122222222222222222222222222222222222222222222222222222222222222222222222222222222222222222221222222222222222222222222222222222222222222222222222222222222222222222222222222222222$122222222222222222222221$$11122222222222222222222221$222222222222122222222222222222222222222222222222222222222$122222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222221$112222222222222222222222222222222222212222222222222222$122222222222222222222222222222122222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222122222222222222221$1222222212211111$$$$%234234112222222222222222222222222112222222222222222222222222222222222222222222222221$122222222222222122222222222222222222222222222222222212222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222212222222%", "%222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222221$22222222222222222222222121$$$11122222222222222222221$222222222222222222222222222222222222222222222222222222221$122222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222221222222222222222$222222222222222222222222222222222222222222222222222221$222222222122222222222222222222222222222222222222222222222222222122222222222222222222222222222222222222222222222222222222222222222222222222222222222221$122221211111$$$$112125422222222222222222222222222222221$1222222222122222222222222222222222222222222222222$222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222221222222222222222222222222222222222222222222222222%", "%222222222222222222222222212222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222122221$22222222222222222222222221222$$$11212222222222222221$12222222222222222222222222222222222222222222222222222222$1122222222222222222222222222222222222222222222222222222222222222212222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222221$22222222222122222222222222222222222222222222122222221$1122222222222222222222222222222222222222222222222212222222222222222222222222222222222222222222222222221222222222222222222222222222222222222222222222221$2111111$$$$11122222229222222222222222222222222222222221$2222222222222222222222222222222222222222222222221$222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222%", "%12222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222221222222222222222222222222222222222222222222222222222212222222222222222222222222222222222222222222222122222222222222222222222$12222222222221222222222222222221$$$11122222222222221$122222222222222222222222222222221222222122222222212222221$2222222222222222222221222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222221222222222222222222222222222222222222222211$12222222222222122222222222222222224222222222222222222$2222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222221222222222222222222222222222221222221$11$$$$$112122222222244222222222222222222222222221222221$12222222222222222222222222222222222222222222222211222222222222222222222222222122222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222%", "%22222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222221222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222221$222122222222222222222222222222222221$$11222222222221$122222222222222222222222222222222222222222222222222222221$2222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222$22221222222222222222222222222222222222222222222222221$2222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222221++$12212222122222222242222222222222222222222222222222221$1122222222222222222222222222222222222222222222221$222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222%", "%2222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222$1222222222222222222222222222222222222111$$22122222221$22222222222222222222222222222222222222222222222222222222$22222212212222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222221$2222222222222222222222222222222222222222122222222222$122222222222222222222222222222222222222222222222222222222222212222222222222222222222222222222222222222222222222222222222222222222222222222222222222222221$122222222222222222212242222222222222222222222222222211$2122222222222222222222222222222222222222222222221$222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222%", "%2222212222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222221222222222222222222222222222222222221222222222$122222222222222222222222222222222222222111$$$2122221$122222222222222222222222222222222222222222222222222222221$12222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222221222222222222222222222222222222222222222222222222222222222222222221$1222222222222222222222222222222222222222222222222222$122222222122222222222222222222222222222222222222222222$12222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222$222222222222222222222442222222222222222222222222222221$2222222222222222222222222222222222222222222222221$122222222222222222222222222222122222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222122222%", "%222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222221222222222222222222222222222222222222222222222222222222222222222212222222222222222222222222222222222$1222222222222222222122222222222222222222112111$$12221$22222222222222222222222222222222212222222222222222222222$122222222222222222222122222222222222222222222222222222222222222222222222222222222222221222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222221$2222222222222222222222222222222222222222222222222221112222222222222222222222222222222222222222222222222222$122222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222211$222222222222222222242642222222222222222222222222222221$1222222122222222222222222222222222222222222222221$222222222222222222222222222222222222222222222212222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222%", "%222222222122222222222222222222222222222222222222222222222222222222222222222222222222222222222222222221222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222211$122222222222222222222122222222221222222222222211$$$11$22222221222222222222222222222222222222222222222222221222$12222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222111222222222222222222222222222222222222222222222222221111222222222222222222222222222222222222222222222222221$122222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222$12222222222222222255%422222222212222222222222222222222$2222222222222222222222222222222222222212222222221$122222222222222222222222222222222122222222222222222222222222222222122222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222%", "%1222222222212222222222222222222222221222222222222222222222222222222222222222222221222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222111122222222222222222222222222222222222222222222222111$O$12222222222222222222222222222222222222222222222222222221$122222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222221$2222222222222222222222222222222222222222222222222211122222222222222222222222222222222222222222222222222222$122222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222221$222222222122222222745222222222222222222222222222222221$2222222222222222222222222222222222222222222222221$222222222222222222222222222222222222222222222222222222222222222222222222221222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222%", "%22222222222222222222222222222222222222222222222222212222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222122222222222$12222222222222222222222222222222222222222222222222221+1$$$2222222212222222222222222222222222222222222222222222$1222222222222222222222222222222222222222212222222222222222222222222222222222222222222222222222122222222222222222222222222222222222221222222222222222222222222222222222222222222222221$222222222222222222222222222222222222222222222222221$22222222222222222222222222222222222222222222222222222$12222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222221$22222222222222222924222222222222222222222222222222221$1222222222222222222222122122222222222222222222221$222222222221222222222222222222222222222222222222221222222222222222222222222222222222222222222212222222222222222222222222222222221222222222222222222222222222222222222222222%", "%22222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222221$1222222222222222222222222222222222222222222222222222$11111$$$2222222222222122222222222222222222222222222222221$1222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222221$222222222222222222222222222222222222222212222222211$22222222222222222222222222222222222222222222222222221$22222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222$22222222222222222222222222222222222222222222222222221$1222222222222122222225442422222122222222222222222$122222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222221222222222%", "%2222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222221222222222222222$12222222222222222222222222222222222222222222222222221$12222111$$1122122222222222222222222222222222222221222222112222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222221$122222222222222222222222222222222222222222222222221122222222222222222222222222222222222222222222222222221112222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222221$11222222222222224822222222222222222222222222222222221$21222222222222222246euuueq07w942222222222222222221$12222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222%", "%2222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222211$22222222222222222222222222212222222222222222222222211$222222111$1$11222222222222222222222222222222222222222211$12222222222222222222222222222222222222222222122222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222221$12222222222222222222222222222222222222222222222221$122222222221222222222222222222222222222222222222222221122222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222121$2222222222222224wy22222222222222222212222222222222221$11222222222245467qqitppaapaaaiy0422222222222222222$12222222222222222222222222122222222222222222122222212222222222222222221222221222222222222222222222222222222222222222222222222222222222122222222222222222222222222222222222%", "%222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222$11222222222222222222222222222222222222222222222222221$12222222212111$111121222222222222222222222222222222222221$22222222222221222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222$22222222222222222222222222222222222222222222222222$12222222222222222222222222222222222222222222222222122$122222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222$2222222222222228y92222222222222212222222222222222222211122222222222weitpppttppapaaaaaay92222222222222222$22222222222222212222222222222212222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222122222222122222%", "%222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222212222222222222222222221$22222222222222222222221222222222222222222222222222222$222222222222111$$1111222222222222222222222222222222222221$22222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222$12222222222222222222222222222222222222222222222221$12222222222222222222222222222222222212222222222222221$122222222222222222222222222222222222212222222222222222222222222222222222222222222222222222222222222222$122222222222222962222222222222222222222222222222222222$122222222226uttttpttptpaaiaaaaaaiw044222112222211$12222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222%", "%22222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222122222222222222$122222222222222222222222222222222222222222222222222221$1222222222222222211$111212222222222222222222222222222221$222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222212222222222222222222222222222222222222222222222222222222222222222222221$2222222222222222222222222222222222221222222222222$12222222222222222222222222222222222222222222222222222$1122222221222222222222222221222222222222222222222222222222222222222222222222222222222222222222212222222$$22222222222224922222222222222222222222222222222222222$12222222225uptptatttattattttattttaaiu098885322222$11222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222$", "%22222222222222222222222222222222212222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222122222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222221$122222222222222222222222222222222222222222222222222211122222222222222222221$$$112222222222222222222222222222221$222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222221$2222222222222222222222222222222222222222222222222$12222222222221222222221222222222222222222222222222221$22222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222$22222222222222122222222222222222222222222222222222222$1222222224ippttttttttttttattttttatttatiuuuye42222$22222222222222222222222222222222122222222222222222222222222222222222222222222222222222222222222222222222222222222222212222222222222222222222222222222222222222222222222222%", "%2222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222122222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222$122222212222222222222222222222222222222222222222222221$122222222222222222222221$$111122222222222222212222222222$122222212222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222221222222222222222222222222222222222222222222222222221$12222222222222222222222222222222222122222222222222$22222222222222222222222222222222222222222222222222221$22222222222222221222222222222222222222222222222222222222222222222222222222222222222222222222222222222222$12222222222222222222222222222222222222222222221222222$2222222229tttttttttttattttttttttttttttttaaat62222$22466532222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222%", "%2222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222221$222222222222222222222222222222222222222222222222222221$22222222222222222222222121$$$1112222222222222222222222211122222222222222222221222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222$12222222212222222222222222222222222222222222222221$2222222222222222222222222222222222222222222222222222$122222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222221$12222222221222222222222222222222222222122222222222211$122222226ittttptpttattttattattatttattattttttw2222&22etttu6422222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222%", "%222222222222222221222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222212222222222221$122222222222222222222222222222222222222222222222222211$222222222222222222222222222222$$$111222222222222222222221$222222222222212222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222122221$1222222222222222222222222222222222222222222222221$12222222222222222222222222222222222222222222222222222$122222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222$22222222222422222222222422222222222222222222222222222$1222247yttttttttattttttttttattttattttttattttu42222$1qtttttw42222222222221222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222%", "%122222222222222222222222222221222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222211212222222222221$222222222222222222222222122222222222222222222222222211$221222222222222222222222222222212$$$12222222222212122222$1222222222222222222222222222222222222222222222222222222221222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222122121121222222222$2222222222222222222222222222221222222222222122222$12222222222222222222222222222222222222222222222222221$222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222$22221222226q22222222222222222222222222222222222222222$122222uttttttattttattattttttttttttatttatttttae4221$25itttti52222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222122222222222122222222222%", "%22222222222222222212222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222221222222222222222221$11222222222221$12222222222221222222222222222222222222222222222222222211122222222222222222222222222222222111$$111222222222222221$2222222222222222222222222222222222222222222222222222222111222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222221$$$$$$$$$122112111$1222222222222222222222221222222222222222222222222$2222222222222222222222222222222222222222222222222222$2222222222222222222222222222222222222222222222222222222212222222222222222222222222222222222222222222222222$$222222222qq42222222222222222222222222222222222222222$122223ettttttttttatattttttattattttttattttattttq221$12qttttu22222222222222222222212222222222222212222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222221%", "%2222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222221222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222111$122222222211$2222222222222222222222222222222222222222212222222222221122222222222222222222222222222222222211$$122222222222222$12222222222222222222222222222222222222222222222222222222111222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222111111121$$$$$$+$$O$$12222212122222222222222222222222222222222222211$1222222222222222122222222222222222221222222222222221$22222222212222222222222222222222222222222222222222222222222222222222222222222222222222222222222222122222221$22222222446q5522222222212422222222222222212222222222$12225wtttttttttttttttttattttattttattttatatttati642$12wttiu522222222222222222222222222222122222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222%", "%222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222212222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222111$122222222$1222222222222222222222222222222222222222222222222222221$22212222222222222222222222222222222222211$$$122222222222$12222222222222222222222222222212222222222222222122222222112222222222222222222222222222222222222221222222222222222222222222222222222222222222222222222222222222222222222222222221111121111$1$$$$$$$$$$1122212222222222122222222222222222221$12222222222222222122222222222222222222222222222222221112222222222222222222222222221222222222222222222222222222222222222222222222222222222222222222222222222222222$2222222142qtiu222222222244412222221222222222222222212$24qitttattttttttatttttttattttttttattttttttattte22$14ity84122222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222212222221%", "%2222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222221$$122222$1222222222222222222222222222222222222222222222222222222$122222222222222222222222222222222222222222211$$122222222$$22222222222222222222222222222222222222222222222222222221$22222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222$12111111111$$$$$$$121222222222222222222222222221$1222222222222222222222222222222222222222222222222222$111222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222221$222222244266eiu52222222292672222222222222222222222221$3qtttttttattatttttttatattttttattttttatttttttti622$$2q7322222222221222222212222222222222222222222222222222222212222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222%", "%222222222122222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222211$$2222$2222222222222222222222222222222222222222222222222222222$12222222222222222222222222222222222222222222211$$2222222$22222222222222222222222222222222222222222222222222222221$112222222222222222222221222222222222222222222222222222222222222222222222222222222222222222222222222222222222221222222222222222221$222222222221111111$$$$$$$12222222222222222222222$1222222222222222222222222222222222222222222222222221$122222222222222222222222222222222222222222222222222222222222222222222222222222222222122222222222222222222222+2222221422244ete2222222242y02222222222222222222222221*uittttttttatatattttttattttttttatttttatattatttq4222$142222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222%", "%12222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222221222222222222222222222222222222222122222222222222222222222222222222222222222222222222222222222222222222222222222222222222211$11$12222222222222222222222222222222222222222222222222222211$2222222222222222222222222222222222222222222222111$$12222$222222222222222222222222222222222222222212222222222222111122222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222211$2222222222221222211111111$$$$$$11222222222222222$22222222222222222222222222222222222222222222222222211222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222122222222222$22222224222223ui3222222219i322222222222222222222222115ttpttttttatttttttattttttttatatttatttttttttatt02222$12222222222222222222222222222221$$$1222212222222222222222222222222222222222221222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222%", "%222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222111$$$2222222222122222222221222222222222222222222222222222221$1222222222222222222222222222222222222222222222222211$$12$12222222222222222222222222222222222222222222222222222222$1222122222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222112222222222222222222222221$1222222222222222222222222111111$$$$$12222122222$122222222222222222222222222222222222222222222222222111222222222222222222222222222222222212222222222222222222222222222222222212222222222222222222222222222222222222$$2222222122222ei622222222yi42222222222222222222222222:ttttttattatttttttaatttttatttttttttattttttatatuw422$2222222222222222222222222221$$$$1112222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222122222222222222222222222222122222222222%", "%2222222222222222222222222222222222222222222222222222222222212222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222212222222222222222222222222222222222222222222222122222222222222222222221$$$122222222222222222222222222222222222222222222222222221$12222222222222222222222222222222222222222222222222221$$$+22222222222222222222222222222222222222222222222222222221$2222222221222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222$1222222222222222222212222222122111111$$$1122221$2222222222222222222222222222222222222222212222222221$22222222222222222222222222222222222222222222222222222222222222222222222222212222222222222222222222222221222222$1222254222224et02222222wit22222222222222222222222226,ttatttttttttttttttttttttttattttttatttttttttttttq22$12222222222222222222222$11111$112212222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222221%", "%2222212222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222221$1$$11222222222222222222222212222222222222222222222222221122222222222222222222222222222222222222222222222222222211+$122222222222222222222222222222222222222222222222222211$12222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222$2222222222222222222222222222222221221$11$$$1$$1$1212222222222222222222222222222222222222222222222211112222222222222222222222222212222222222222222222222222222222222222222222222222222222222222222222222222222222222$12212522222227t62222222iat2222222222222222222222212e,tttttttttttpattatattattttatttttattatattatatatttq22$$2222222222222212211$$$1111122222222222222222222222222222222222222222222222222222222222222222222122222222222222222222222222222222222222222222222222222222222222222222222%", "%222222222222222222222222222222222222222222222222222222222222222222222222212222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222122222222222222222222222222222222222222222222222222221$11211112222222222222222222222222222222222222222222222222$12222221222222222222222222222222222222222222222222222222$$11$$222222222222222222222222222222222222222222222222211122222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222211$1222222222222222222222222222222222222222211$$1$O1$1222222222222212222222222222222222222222222222221$122222222222222222222222222222222222222222222222222222222222222222222222222222222212222222222212222222222222222$22221422222224i52222229aai4222222222222222222222214irittatttaattttttttttttttattttatttttttttttttttttt6222$222222222222211$1$1$1$1211122222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222%", "$1222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222221111122211$1112222222222222222222222221222222222222222222221$12222222222222222222222222222222222222222222222222222222$2211$11121222222222222222222222222222222222222222222221$122222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222221$2222222222222222212222222222222222222222222222$$$$1$1$112222222222222222222222222222222222222222222$222222222222222222222222222222222222222222122222222222222222222222222222122222222222222222222222222222222222222$12222222222224i3222226utti4222222222222222222212237ti,ttttttpttptattttttttttttptpttptttttttttttptttt4222$11222222211$1$$1$$22222222222122222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222%", "%22222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222221$22222111$11222222212222222222222222222222222122222222221$222222222222222222222222222222222222222222222222222222221$12121$$$11222222222222222222222222222222222222222222211$222222222222222222222222222222222222222222222222222222222222222222222222222222222221222222222222222222222222222222222222222222222222$2222222222222222222222222222222222222222222221$11211$$$111$22212222222222222222222222222222222222211222222222222222222222222222222222222222222222222222222222222222222222222222222222222222212222222222222222222221$22222222222222q212226itttq22222222222222222222448eitt,ttttttttttttttattatttptttttpttttptptptpptttttt5222$222222$11$$$$1222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222221%", "%222222222222221222222222222222222222122222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222212222222222222222222222222222222222222222222222222222222222222222222222222222222111222222211$$112222222222222222222222222222222222222222221$22222222222222222222222222222222222222222222222222222222$122222221$111222222222222221222222222222222222222212221$2222222222222222222222222222222222222222222222222222222222222222221222222222222222222222222222222222222222222222222222222222222222221$1222222222222222222222222222222222222222222222$22222222$$$$111112212222222222222222222222222222222$1122222222222222222222222222222212222222222222222222222222222122222222222222222222222222222222222222222222222221$12222222222222426424rpptu322222222222222122223qeutptt&$$221$2222222222222222222222222222222222222212222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222%", "%12222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222211$112222222222222222222222222222222221$1222222222222222222222222222222222222222222222222222222211222222222222222222$$$112222222222222222222222222222221$122222222222222222222222222222222222122222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222221$222222222222222222222222222222222222222222222$1222222222222222222222211$$$11122222222222222222221$222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222221$22222222222222ettttte422222222222222226attttattttttt<ppptppttttatatatttaatttattppttatattttu0222222222222111222222222222222222222222222222222222222222222222222222222122222222222222222222222222222222222222221222222222222222222222222222222222222222222222222222222222222222%", "%2222222222222222222222222222221222222222222222222222222222222222222222222222222222222222222222222222222222122222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222211111122222211$222222222222222222222222222222222222222222222222222222222$2222222222222222222222222222222222222222222222211$$111$2222222222222222222222222222222222222222222222222222222222222222222222222222221222222222222222222222222222222222222222222222222222222222221$2222222212222222222222222222222222222222222$12222222222222222222222222222212222222222222222221$22222222221$1$1222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222221$12222226tptttpttttttttt222222222222222211$1$$$-rrppttptttttttatatttttttatttaattttttattw4222222222222222222222$1122211$12212222222222222222222222222222222222222222222222111222211$1222212222222222222222222222222222222222222222222222222222222222222222222222222222222%", "%2222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222221222222222221222222222222222222222222222222222222222222222222222222222222222222222222222212222222221$22222222222222221222222222222222222222211$$$1112222222122221$22222222222222222222222222222222212222222222222222221$222222222222222222212222222222222222222222222222222222222212222222222222222222222222222222222222222222221$222222222222222222222222222212222212222222$11222222222222222222222222222222222221$12222222222222222222222212222222222222222222221$1222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222221$27tti4ttiy2224222222222222222426tttatttttttttttattttt122222222222222221122222212224222222052222222222222222122222222222222222222222222222222222222221$122222222222222222222222222244wuaw41222222222224221$2225522222222222222214244643222222222222222220ttiytattt&$$$&12222q0221222222221222222222222222222$2qtttttatttttttatttttttptptw222222222222222222222222222222222222222222222221$$1222222222222222222222222222222222222222221$1222222222222222222122222222222221$222222222222222222222222222222222222222222222%", "%222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222221222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222221$2222222222222222222222222221222222222222212222222222221$1222222222222222221222222222222221$$$1112222222222222222$122222222222222222222222222222222222222222222222222222222222222221$2222222222222222222222222222222222122222222222222222222222222222221$222222222222222222222222222222222e7222$2222222222222222222221$$1222222qtttpt722222222222222222222222222222222222222222222222222222422222222222$122222222222222ee62246qw74222222222222222222222223u5$26tti<>r,>qrii622222223234222222222222222122222222222222$$4ittttttttttttttttttttttti4222222222222222222222222222222222222222222222221$$112222222222222222222222222222222222222222$1222222222222222222222222222222221$1122222222222222222222222222222122222222222222%", "%22222222222222222222222222222222222222221222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222212222222222222222222222222222222222222222222222222222222222222222222222222222222222222222112222222222222222222222222222222222222222222222222222211$2222222222222222222222222222222222211$112212222222222222$122222222222222222222222222222222222222222222222222222222222222221$2222222222222222222222222422222222$2222222222222122222222222222222$12222222222222222222222222222232222422$1222222222222222222222221$1122227ttttt522222222222222222222222222222222222222222222222222222222222222222$22222224522222246622242222222222222242122222222222wq#*:>r7eatppppii5222222222222222222222222222222222222222222222222222222222222222$222etttptpttty76562242$$$$$$$11111$12222222222222721$2222222222222222222214yi222222222222222122222222222222221$2149aapttttttttatpi48552222222222222222222222222222222222222222222221111122222211$12222222222222222222222222222222221122222222222222222222222222122222222$1222222222222222222222122222222222222222222222%", "%2222222222222222222222222222222222221222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222$1222222222222222222222222222222222222222222222222222221$12222222222222222222222222222222222222222222222222111$$$1$22222222222222222222222222222122222222222222222222222222222222222221$111222222222824222222222222222221$122222222222222222222222222221$227aa922222222222221222222222226u4222$22225weuttttttttttu2222425qtpppptirrttttt652222222222222222222222222222222222222222222222222144222222222221$122uppaaptpate21&$$$$$1$11$11122222222q4222222226i22$1222222222222222222222ei422222222222222222222222222222222$12226yaaaatttttttp72342222222222222222222222222222222222222222222222$1222222222221$122222222222222222222222222222221$122222222222222222442222222212222222$1222222221222222222222222222222222222112222222%", "%122222222222222222222222222222222222222222222222222222222222222222222222222122222222222222222222222222222222222122222222222222222222222222222222222222222222222122222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222221222222222222222222222222222222222222222222222$12222222222222222222221222222222222222222222222222222221$222222222222222222222222222222222222222222221222222111$1+$12222222222222222222222222222222222222222222222222222222212222222222$122221222223022222222222222222222$122222222222222222222222222221$24iaa32222222222222222222222223w6222$$225eutppattttptpttt0quqeeuitpttttairrtpu62222222222222222222222222222222222222222222222222225uueeqw52222221$2246qq706-ye722222222222222222226e5222222222212222222212222222222211$2222229wiaaaatty2222222222222222222222222222222222222222222222221112222222222222222111122222222222222222122222222$12222222222222222222482222222222222221$2222222222222222222222222222222222222112222222%", "%22222222222222222222222222222222222122222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222$11222222222222222222222222222222222222222222222222222222$122222222222222221222222222222222222222222222222222222221$2122$1$11$222222222222222222222222222222222222222222222222222222222221$12222226212222222222222222222222$12222222222222222224222222222&iataai2222222222222222222222iiii6224*quppttttattttatttwytpttptpttptttattttappitttpttpttatttttattyittttttttpptatttttttpttparttttttq222222222222222222222ypi422e>,,tptttpttaptpttttpu72222222222212$1222222222222222222222222222222222247uttattttttptptt,tptttatati02222222225iu52222222222222222222222222222222221$122222222222222222222222222222122222222221222222222222222222222222221222222222222212222222222222222222222222222122222222222222222222222222222222222222222222222222222222222222222222222222221222222222%", "%2222212222221$22222222222222222121$11222222222211122222222222222222222222221$2222222222222222222222222222221$12222222221$11222222222222222222222212222222222222211$1222222222222222222222$1222222222222222222222222222222222222222222222222222222222112222222222222122222222222222222222222222222222222222222222222222222$22222222222222222222222222222222222222222222222222222221$22222222222222222222222222222222222222222222222222222221$22222222222222222221211$$11222222122222222222222222222222222222222222222226ey4222222222222222222222222222$1222222222222222222222299tpt>-&22uttaaaaaappttttttatttpttttttttiq52222222211$2122222222222222222222222222122222222240ttttatttptpp,tttatttty222222222q45te22222222222221222222222222222222221+222222222222222222221222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222221222222222222222222222222222222222222122222222222222%", "$222222222222211111222222222222111112222222222221$122222222222222222222222221$222222222222222222222222222221112222222222211$12222222222222222222222222222222221$$11222222222222222222222221$1122222222222222222222222222222222222222222222222222222222$1222222222222222222222222222122222222222222222222222222222222222222$1222222222222212222222222222222222222222222222222222222$22222222222222222222222222222222222222222222222222222221$2222222222222222222222222221$$$2122222222222222222222222222222212222222226ur322222222222222222222222222222$122222222222222222222216tptrre-$222222122222222222222222222221$3057ittttatttaattttatattattttatttttttptpttttptppaarrrptptptpttatuyq522222222225tt4222212222222222222222222222222222222$222222222222222222222222222222222222222222222222222222222222222222222222222122222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222221222222222222222222222%", "%222221222222222222$12222$1222222222222122222222222221$2222222222222222221221$222222222222222222221$122222222222222222222222222222221112221211$112222222222222222222222222221222222222222222222112222222222222222212222222222222222222221222212111$$$$221$22222222222222222222222222222222222222222222222221222222222222$11122221221$$$1111111122222222222222222222222222222221$122222222222222222222222222222222222222222222222222211122222222222222222222222222222222222222222222222111222212222222222222222212216ttrie41222222222222227tt7222222222222222222222222222222222222$122222222122222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222%", "%2222222122222221$2222222221$22222222222222222222222221$122222222222222222222$12222222222222222221$222222222222222222222222222222222221$1$1122222222222222222222222222222222222222222222222222221$22222222222222222222222212222222222111$$$12122222222221$12222222222222222222222222222222222222222222222222222222222211$2222222222222222222221221$$$$1111222222222222122222221122222222222222222222222222222222222222222222222222221$2222222222222222222222122222222222222222222222222111112222222222222222222ee-$eppppttppprtti55222222222234222221$24eetttttttttattttttttttpttpttatttaattppprttttpttttatttttttattttttttttpttatttatttttttppttttpttptttatttttttttttttuyttttttttttttatttttttatttttttatttttttattttttttttttttttattatattatt>tiitpttatattttatttatttte2222222222221222246iai522-77ipttatttte2222222222222222222222122222222222222222221$2222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222212222222222222222222222222222222222%", "%22221$$$112222122222222222utttattttttatprraptpttttpttpttpptpttttttttpttpttpttptt<tttti7222222222222221121221211$$$$$$$$$$$111212111211$O$$$$$$$$$1212222211222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222%", "%21$1222222222221$$20weattttttttttttttttttttttrttattttttttttttttieeitttatttatttaatttatttttttttattttttatttttttrrrtttttttptttttppttatattt0532122222222222222222222224uaau122222221122222222222222222222222222222222222222222222222221222$2222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222%", "%1222222222222223utttttatatttttaptttpt<,,itttp&1222222222222222222222222222222222222111222222212222222222222222222222212222222222222221$1222222222222222222222222222222222222222222222222222$1222222222222221222222222222222222222222222222222221$2222212222222222222222222222222222222222222222222222$22222224qittttttatttaatatttttttattttttattttttttttti04222224ippttpttttrrtptptttttptatttaattttatatttttppttpttttt<<uq4222221222222222212222222222222222222222222222$12222222122222222222222222222222222222222222222222221$1222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222221222222222%", "%22222222230tttprrirrppttpttpptptttttttttpttpttatttttttttttttttttttttpttpttttttttaattttttatttttatttatttatttttttatttatttttw0-iptttt0yttattttttttt62740tt4utwii6er,,,,,<;,><,722222221111122111122221$12222$22211$22221$222222211$$12222225ttttttptiyytttptpptttt<<,,,ttpt<<<<,<<<<,<<<&&2222221$122211$1122221$2211$1221$22222$122222221$+122222224ittttptttttptttttpr,,,oo#,<<<<<<<<<qritrtttttpttptttttptttttttttttatttttttptttpatappppttaattttatu620tuate666666u3224utq6522447222111222111$111122211111$12$1$121$22211$12222222211$1&:-311224utpttttttttttttpttpttttttpattttatttptttttt>appttptttttttttttttttttattatattattttattttattttatate2222222222222222222222222222222222222222222222221$1222222222222222222222222222222222222222212222222221$22222222222222222222222222222222222222222222222121$122222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222221$", "@$$1$122221111222279utttatttttttpttattttatattptttttttptppt<<q11237r721+112222222222222111$$11$$$$+1$$$11111$$$12222222246132222242222wiatatttatpttttttttttattttttpttttttttptpp,tpttttttttattttttatttttttattttttatttttttttptptttttittttttttttttttttt7747747e705666544223542432250w224$21$$$$$$$$$$$$$1111111$++XO$$$$$122222222222222222$1222222222224676tttttttttttatttptpttptpptptttttttttt,ttpttptattttttttttttatttttttatttttpttapttttptttptt&$11$222222222222222222222222222222$122222222222222222222222222222222222222222222222212$2222222222222212222222222222222222222222222222222222$2222222222222222222222222222222222222222222222221$222222222222222222222222222222222222222236itttpt7221$122222222222222222222224rtttttatttttttttttttatttttuq56222222222221111+$$$$OOO$$$1212122222$$$$$$$$$$O$$11122221122222uttt6uq65wtttttptatpttptttpttttptptp,tttttttttttttttttttpttatttttttttttttttattttatttptt880w04222222111$$$111$$$$+$$$1$$112222221111121112$1$$$$$+$$$$$$$126eq65uiitppttttttttttttttttptppttttptttptttttttaatttti0ittttattatttaattttttattpai422222$222222266ittttutttttie022265uiiiu6227ie427i7u4y00ew63eytiw41$$$1&11122$$11$1$$2$21$111$$11222222122222$22222222222222112236itttitrr<<<<<<<<<<,,,<<<<<q5&11222212$112$$2$$$1$11$22111$122222222222+222222222222222222277twtttttitttiittirtititittr<<<<<><<<<<<<<<t>rq7ippii922211$11121$12$21$2$122$1121211$$1222422$$2222222222222222244677yttttrqeeeitttttpptttpttttpppt,tpppppaaattpaatpttppttpttrtrriirritrtrirrttrittrr>trirt<:-%1$%1$3336eeq732111111111111111+1111111111111122222221122222222222222222222222222211$2222222222222222222222222222222222222222222222121$222222222222222222222222221212222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222%", "%2222222222212222226ttttttptprrirtppttttptpttptttttttieu322222222222222222223it0tttattttattttattttttttatt,ttptpttttattpttttu215ytttttattttattttttatt022222222$2222211464599wyetiue74q0uttyittue613uai44qqq75qr$$212222222224223267098yu6$$122222$1222$222+222$22221$12222222444$$12222223re22222225epptuiie76667536wttttttatattptpttpt,ttttttttattttaatatttttttttttttttt0tttttttaattattt7it2222222222229w3221$667386312222221$1221$122$222$12222$11222222434$$$$112222qu422222227ipptttpptuitue42etttatttttpttttttt,tttpttttttattttttttattpttpttptttiwtttatttttttttttptttr7422243666ut612224ettttttattttttttu42222222222$1222206226i72222255$11$$37pttttttpttttatttttttttttatatttttatttttttptpttptpttptptttt622222wtuttiiittttptu52222222222222$$6itttttttpttptt<ee422222$12222222#qt9222222221$22222222222216uaiueq0242227q<<tttttttappapre422222222222221$22222222222222222222222qr611222222222111222222222222228080y9y9e0utttat0y004423q22222222222222222$2222222222222122222111111111$11111$$$$$11$$$1211121221$2222222221222222222222222122222222222222222222221$2222222222222222222220iptiq622245667quaat622222222222$122224ei2222222222222566epttttttttttattapttttttattttttrrrrpa62220ieutti528ttte22222211$1221226ittttttttpttptrraatttttttatt:42$1$$$$$+12224yiute67422222222222$12222222222222222222225ttttttptptpttrrrrrttpapa,ttttttpttttptptptpttpttttatttttttatttttttttttatttt<ttttpttttttattttttttttttatttttttttattttttatatttptte21$22222222222222222222222222222222222222222222222222222112222222222222222222222222222222222222222222222222221$12222222222222222222222222222222222222222222222222$$22222222222222222222222222222222222222222222222122222222222222222222222222222222222222222222222222222222222222222222222222222222222222222122222%", "%222222$122222222222222222222121111122227u6uttiittppttp<**><>>$$$$$$$$111111$22iiiti2222222222222222222222222222222$12224ttq122227rtitie312121111$$$$*<<<<ttpttptttuyutttttptpttttttattttttttatattttatttaai9422$222452222222221$$2222222225uee8etttttttptptt-$+$$$$$$2212221212112222222122+2122etr&$$$$+$$$$$122222122121222126etttttpttatttttttpt7112222222222222222222222222222222222222222222222222222$122222222222222222224qyitttattattatttttttptpttptt,ttte5222222122222222222qi4122221$+$$$$$+$$$$1212211$$+$OO$$$>re221212222222222222222222222223qapptpttttttttttttt32222222212$11222222222222250tttpttpttpptttttttttattttttatttttppttttttattttttttttattttttatttte2$222221$$112222222224eti0uttttttpttpptarrttttpptpttptpttu>24222222222222$1222222212221$122222222222222222$11222222qtu224tttttttatattttatttptrrttttttttttttpttttttpptttr<<<<tttttaapttitttattatttattttattttttttttttttttttttatp,ptttttttttttattttatttattttttpt622222222222222222224e6221$6422224822222222222222222222222222222222222222222222222222222$22222222220iaai0i7722222222223>riptttttu5222222222222222221$229ittttttttiy2$222225542222222244422222$22222222222222222222+2222222221222222224$wttattttttatttttttttttu77utttttppttptttttttttttattatttttttttttattttattattttatattatttttttttptptttpppttattatattttttaattatatttattttatrpr&$$2222222222221$2222222222222222222222222222222222222222222222222222222222221$122222222222222222222211$$$$$1111122222222222222222222142222222222222222222222222222222222222222222222222222$1222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222%", "%222221$11222222222222222222222211$$12122221$122222222222222222222222$22222122222222222222221$22222222221$1112222222222221$22222222222222222222222222222222222222222222211$1222222222222226apteettppttttttttttttatttttattttttttttttape12$$$$1222222222$1222221222222222222222222222222222222221222222222222222222221$1222222222222222222$$$1$111112221222222222222222222221$2222222222222222222222222222222222222222222222222222211222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222%", "%22221112122222222222222222222222211$$12221$1122222222222222222222211$12222222222222222222222$12222222$$$11222222222222222$122222222222222222222222222222222222222122222111$12222222222222yitptatttattttttttatttttattyeuti525q422222222222222224itpai&122222322222222222222222222222222222222222222222222222222222222112222222222222222661114eaaaiaa9345222222222222222222222222222121122%1212222222222222222222222221$1222222222222222222222$11222222222222224q9ipi22222222222222222222222222222222222222222222222222222222222222221$22122222221$$1211222227ippia6222222222222222222222222222222222$$1222222122222222222222225wu32$12212222222222222222222$122222222222222244yaappttttttpttttatatttttttpptttttrer>ripppttapptptppptttttttttttptatttpttptttttttptpttpttpttttttattttttatatttatttttttu22222222222222222222222222211$212222222222222222222222222222222222222222222222222222222221$1112222$122222222222212222222222222222222222222222222222221$1222222222222222211$1222122222221$222222222222222222222222222$22222222222222224utttttatattt52$23itttttati3$4ei7ittttattattttatttttttttttttattttttirrptpttttpttptptttatttttt,tttttpttptpttatattttptptttttttttptpiy422222146ttttattttpttrrptti02222222222222222222222222222222222222222222222222222222222221$22222222222222222222222222222222222222222222222222222222$2222222222222222222222222222222222222222222222222222221111122222222222222222222211$$111222222222222222222222222222222222222222222222222222222222222222222222222222222222222221222222222222%", "%222222222222222222222222222222222222$122222222222222222222222222222$2222222222222222212222222221$2222222222221222222221222222222221$112222222222222222222222222222222222222222222222122%2224aaatptpttittrt<<<<<742227tttt<ttttttptptttttttttttttttttatu72222222222222222222222222221+2222222222222222222222222222222222222222222222222122222222222222222222222222222222222222222222222222221222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222ytttttttttpttttte<<,,<<<<<<tttt72utttti04222222$15itattttttptttttttttttttttttttw4445326222222227eitttttttttttttw422222222222222222222222222222222222222222+22222222222222222221222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222$122222qi54eq222$1222222222240uatttattttatttttattttttatttttttttppirtpppptttttt64$422235467945222222222222224qtttttiwe665666655we7522346uttp<<65667q7655356upppttttttt5222225utttattttatttta9222222222222222222221111222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222212222222222222222222222222222222222%", "%12222222222222222222222222221$222222222222222222222222222222222222221$122222222222222222222222222222222221$2222222221$$$1122222222222221222222222222211$222222222222222222222222222222222222222222212222222222221222222222222222222222etpttttttttrrttttttttttatttatattttttatttaatatttttttatttttttt623rtptptptptu73222222222222222222222222222222222212222222$2222222222222222222222222222222222222222222222222222222222222222222222222222222222221222222212222222222222222222222222222212222222222222222222222222222222222222222222212222222222222222222222222222221$1221222et9qti2222$1222222222296utpttttttttattttttatattttttttptttptrrtatttttpppu1$222242222225222222222222250iitpptpi722222222124212222146qe7&$$222242212225qeipppptte2222226tatttttattttttai4222222222222222222211$1222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222%", "%22222222222222222222222222221$122222222222222222222222222222222222221$122222222222222222222222222222222221$2222221$$11112222222222222222222222222222212$1222222222222222222222222222222222222222222222222222222222222222222222222222226tttpttttttutttuyuy5222227q422222222224ettttttttttttttttttttttppptttppte*421457565221$237uttattttttiuttttatttttttatttattttaaq2222222222222211112222222222222222222222222222222222222222222222222222222222222221222222222222222222222222222222222222222222222222222222222222222222222222222222212222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222%", "%122222222222222222222222221$O$$$11111$1122222222222222222222222222222+1222222222222222111111$$$$$$2222222221$2222222222222222222222222222222222222222222211122222222212222222222222222222222222222222222222222222222222222222122222222222iaaaaattiie222222221$2222222222226utttttttptttttatattttttattttttttttttritptpttattttttattatttptpttttr522222237522222222222222222222*qiattttttttttttttttttttttatttttttt-121111$1112222222222222222222222222222222222222222222222222221222222222222222222222222222222222222222222222222222222222222222221222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222$122222222222222222222222222222222222223ut1122222222225wttttttttttttpptptttttttttattttttttttttptpttpttrrtattatpp$22222222225uttttatttpatptttttpttataattttattptptptptttttttttpirattttpirppttttpttttpttpttttattatttttttttttttttttttatttttttatttieeuutttttttipttatttttttt742222utt&2222wittttttaattttttttttppu76$122222222222222222228auaattatattt02$2222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222212222222222222122222222222%", "%22222222222222222222222222222222222222222222222222222222222222222222222$1112222222222222222222222222222222222222222222$12222222222221211$$11222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222221$222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222221222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222$1222221222222222222222222222222222221$2222222222222222$$1222277ttttw9upu4225utttttttttriptttppttttttttattatttattattatttttttttptttttttrpptttatttttttpttttttatttttttattattttttttttttattattttattttttt31$22222222221221$11222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222221222222222222222222222222222222222222222%", "%222222222222222221122222222222222222222222222222222222222222222222222222$22222222222222221222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222211221$$$$111112222222222222222222221$222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222121111111$$$$1222$1222212222222222222222222222222222222222221$222222222222222222226tttttttttattttatttttttttpttttttptti c #09152D", ", c #0A192D", "< c #081927", "1 c #131B27", "2 c #0B1631", "3 c #0C1931", "4 c #071534", "5 c #0A132D", "6 c #192527", "7 c #162634", "8 c #383B24", "9 c #2A332D", "0 c #231D12", "q c #443D28", "w c #433B1B", "e c #37431B", "r c #2F4213", "t c #3B4425", "y c #394535", "u c #464629", "i c #494835", "p c #585638", "a c #514F31", "s c #67553A", "d c #585C31", "f c #283345", "g c #39464D", "h c #50544F", "j c #6A5B45", "k c #716A4D", "l c #5B656A", "z c #787A78", "x c #6A7070", "c c #555D5D", "v c #453B43", "b c #887456", "n c #867D6D", "m c #8D654E", "M c #82623C", "N c #7D817A", "B c #84837B", "V c #96896C", "C c #AA9575", "Z c #A79970", "A c #C4A67B", "S c #747C83", "D c #5E6D83", "F c #7B8386", "G c #658B93", "H c #888986", "J c #95948C", "K c #999A95", "L c #8C908F", "P c #A69D8E", "I c #A6A59B", "U c #B7A98B", "Y c #A9A9A5", "T c #B6B4A9", "R c #B8B9B8", "E c #AFAFAA", "W c #9BA1A2", "Q c #C8B48E", "! c #C3BCB1", "~ c #CFC699", "^ c #CDCAAF", "/ c #E3D5AB", "( c #B9BCC2", ") c #CCCCCC", "_ c #C5C6C5", "` c #D3D3D4", "' c #DADADA", "] c #D8D8D6", "[ c #D0D1CF", "{ c #E0E2E0", "} c #BCC2C0", "| c #837B85", /* pixels */ "````````````````````````]]]`````]``````]````]]]]````````````````````````````````````````]]``````````````````````````````````````]]]]]]]]]]''']]'']]]]]]]`]]]``]']]]]]]]]]]]``]'']]]]```````````````]]```'']]]]]````]```````````````````````````````````````````````````````````````````````````]``]``````````````]]]]]]``````````````````````]]]```````````]]```````````````````]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]````````]]]]]]]]]]``````]]]`````]]```````````````````````]]]]```````````````````````````````````````````````````````````````````````````]]]]]]]]````````]]``````]]]`````````````````````]]]```````]]]```]]]`````]]``]]``````````````````]]]````````````````````````````````````````]]````````````````````````````````````````````````````````````````]]]`````````````]]]```]]]]]]]]]]]]]]]]`````]]]]]]]]``````````````````````````````]]]]]```````````]]```]]]]]````````````````[``````]```````````````]`````````````````````````[[[[[[`[[``````````````]``````````````][[[[[[`````````````````````````````````````````````````````[[[))``[)))[`", "[[[[))))```[[[))[[[[[[``[[[[[[[[``[[[[```[[[```[)))````````````]````````````````]]]]````[[[[[`````````````````````]]]''']]]]]]]]]]]]]]]``]]]]]]]]]]]]]]]]]````]]]]]]]]]]````````````````````````````````````````)```````````````````````````````))``))````````````````````````````````````````````````````````````]]]]``````````````````````````````````````````]]]]]]]]````````]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]````````]]]]]]]]]]]]````]]``````]]]`````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````]```````````````````````]]]]``````]]]]``]]]]````]]``]]```````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````]]]`````````````]]]`````]]]````````]]]`````]]]]]]]]`````````````````````````````````````````````````````````````[[[[[[[[[[[[```[))[[[`````[)[[[[[[`[[[[[[[[``````````````````[[[[```````````````````[[[[[[`[[[[[[`````[[[``[[[[[[[[[[[[[[[[````````[[[[[[[)[[[[[[[[)))))))))))))))))))____)", "))))))))[[[))))))))))[[[)))))[[[[[[))[[[``````[)__)))`````````````````))))))))``))))))__))))[[``)))))))))))))```````]]]]`````````]]]]```]]'''']]]]]''''']`````````````````]]]]``````````````````````````````````)))``)))`````)))[[[[[[[[[[[[[[[[))))))))))))))))))``````))))))))````````[[```````````[``````````````````````````````````````````````````````````]]]]]]]]````````]]]]]]]]````````````````````````````````]]]]]]]]]]]]````]```````]]]]````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````]]]]]]]]`]]]]]]]]]]]]]]]]]``]]``````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````]]]]````````````````]]``````]]]]]]]]``````````````````````````````````````````````[[`[[)))))))))))))[[[[[[[[[[``[)))))[[[[[[[[`[[[[`[[[`````````````[[[[[[[[))))))))))[[[)))[[[[[[[[[[[[[[[```[[[````````[[[[[[[[[[[[[[[[[[[[[[[[[[[))))))))))))))))))))))))__)))))))))_____", "__)))[[`))[[[[[[````````[[`````]````````]```[[))___))))`))))))``))))))))```````````[[[))))__________))))))))))))```````)```````)```]]```]]`]]]]````]]```)``````]]]]]]]]]]]]]]]```))))))````````````[[``````````````)))))))))))))))))))))))))))))_)))__))))))))))))))))))))))))))``[[[[``[[``````[```[[[`````````````````````````````````[[``````````````````````````````````````````````````````````````````````````````````````]]]````````````````````````````````````````````)````````````````````````````````````````````````````````````````[[[[[[[[````````````````[[[[``````````````````````````]]]]]]]]]']]]]]]]]]]]]]]]]]]``]]````````````````````````````````````````))[[[[[[[[```````````````````````````````````````````````````````````````````````````````````````````]]]]]````````]]]`````````````]]]]]]]]````````````````````````]]]```````````````````[[))))_)))________[)))))))_))))))[))))[[[[)[[[[[[[[[[[[```[```````[[[[[[[[))))))))))))))))))))))))[[[[[[[[[[[[[[[`[[```[[)))))))))))))))))))))))))))))))__________))))))))________________", "__))[``])[[````]```]]]]]``]]'''']]````]]``))))___)))))))))))))))))))))__))))))))))))_)))____________)))``)))))))```````)````````))``````))))``))))))))___)``))]'''''''''']``````))))_)))))))))))```[[``````[))))))))))))))))))))))))))))))))))))_)))___)))))))))))))))))))))))))[[[[[[[[````````)[`[[)[`````````````````````````````````[[[[``````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````))))))))))))))))))````````))))))))))))))))))))))))````````````````````````````````````````[[```````````````````````````]]]]]]]]]]']]]]]]]']]]]]''']]`]]]]````````````````````````````````````````)``````````````````````````````````````````````````````````````````````````````````````````````````]]]]]]]]]]]]]]''']]]]]````````]]]]]]]]````````````````````````````````````[[[[`[[[[)))))___))))))))))))_________________________))__________)))))))))[))))))))[[[[[[[[[[[[[[[[))))))))___))))))))))))))))[[[))))))))))))))))))))))_________________________________}}}RR}_}}__", "___)[```[[```]''````]]]]``]]'''']``````]``[[[)))))))))))_________________________}}R}}______)))[)))```]]``````))))````````````))))``````)))))`))))))))___)``))`''''''''''']````````))))`))))))))``[[[[`````[[)))_)))))))))))))))))))))))))))))))))))___))))))))))))````)````````[[[[[[[[``````[[)[`[[)[`[[[[[[[[``````````[[[[``````````[[[[````````````````````````````))))))))``````````````````````````````````````````````````````````````````````````````````````````````))))))))))))))))))````````))))))))))))))))))))))))````````````````````````````````````````[```````````````````````````]]]]]]]]]]]]]```]]]']]]]]'''']]]]]]`````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````]]]]]]]]']]]]]]]'''']]]]``````]]]]]]]]]]```````````````````````````[[))))))))))))))))_______))))))))))))))________))____________________________________))))))))))))))))))[[[[[[)))[[)))))))))))))))))))_)))))))))))))))))))))))))))__________}}__________________}}}RRRRR}}____", "))))[```[````]]]```````````]]]]'````````]``````[)))))))))__________RRRR_________))))))```````]''`]]]]''']]]]]]``))``]````````````````)))``)````))))))))))))))```]]]]]]]]'''''''''']``````````````))))))`]]``````))))))))))))))))________________))))___)))))))))))))))))))))))))`))))))```))))))))`))))`))))))))``````````))))``)))))))))))````````````````))```````````))))))))````````))))))))))))))))``````````````````````````````````````````````````````````````````````))````````))))))))````````````````))))))))````````````````````````````````````````````````[[``````]``````````````````]]]]]]]]]`````````]]']]]]]]]'']]]]]]`````````````````````````)`````````````````````````````````````````````````````[[````````````````````````````````````````````````````````]]]]]]]]]]]]]]]]'''']]```````]]]]]]]]]]]```````````````````````````[[[))))))))))__________))))))))))))))))))))))))[[))))_________))))___))_____)________))))))))___))_____))))))))[[[[))[[````````[[[[[[))))))))))))))))))))))))[)))))))______}}______________________________))", "[[[[````````````````````````]]]]``````````[[```[```````````)))))`)_____))))``````)))``]']]]]]]]]''''''']'''''''']''''']`''''''']```)))))`)))```)___)))))`)_)```)```````````]''''']`)))))````````))))))))``]]]''''''``))_)))))____________________)))____________))))))))))))))))`))))))`))))))))))``)))`))))))))`````````))))))`)))))))))))````````````````))```````````````````````````))))))))))))))))````````````````]]]]]]]]```````````````````````````````````````````````)````````````````````````````````````````````````))))))))))))))))````````[[[[[[[[````````[[[`````]]]````````````````]]]]]]]]``````````]]'`]]]]]]]']]]]]]`````````````````````````))``````)`````````````````````````````````````````````[[````````````````````````````````````````````````````````]]]]]]]]]]]]]```]]]]]````````]]]]]]]]]]]```````````````[````````]```````[[[[[)))_________))))________________)))_)))))))))))))__))[[)))_)))___))______)))))))))))))[[)))_)))[[[[)))[[))))[[```````[[[[[[[[))))))))))))))))))))))`[[[[))))))_____________________))))))))______))", ")[[`[))[[[[[[[````````````[[[[``[``[))``[))[`]``)````))`````]]`````````````````)`````]'']]'''''''''''''''''''''''''']]]]`````]'''']`````````````]]''']``))))))))))))))))))))``]]]]]]]]``)))``)))))))))``)`]]]'''']]]]``))___))___)))___)___))))))__)))))__)))))))))))```````````````````]`))```)``))))``))))))))``)))))`````````))))))))))```)))```````)```))```))))))))```))```))``))``)))`)))`))````````)`````))``````````````]```]]]````````]````))))))``))``````````))))))`````))```))))````))``)))```)```````````)))))))```))))))))))))))))````````````````````````)))[[[[[````````````````````]]'']]]````]']]]`]]]]]]]]]]]'']]`]]]````````````````````````````````````````[[[[[[[[````````````````))``````````````````````````````````````````````````````````````````````]]]]]]]]]]]]]]]]````````]]]]]]]]`````]]``````````]]`````````]]]]```````````[)__________)_____)))___________)))))))__)))[))))_))[))))))))))____))))))))__)))))))[)))[[)))))))))))``[[[[[[))))))))[)))[[))))[```[)[[[)))___)))[)))[)))[)))))))))))______))))______________)_______", "))[[))[[[[```[[))))[[[[[`````]]']]`)____)_______))`````]]``]]]````````````]]]```'']]]]]]]]'''''''''''']]''''''''{'']``)))))))```````````]]]]````]]'''']]````))))))))))))``))``]]]]]''']`))))))))````))))``]`]'''```]'']``))))))))))))))))))))))))__)))))_)))))))))))))````))````)))``)))``))```)`))))))`)))``````)))))``)))))))))))```))))))))))))))))))```)))``)))`````````````)```````)```````````))))```````)````````````````````````)))))))`````````)```))))```)))))``````]]))))))``````````````````````````))))))))````````))))))))))))))))[[[[[[[[```[[[[[[[[[[[[[[```````````````````````````]]]']]``````'']]]]]]]]''''''']]]`]]]````````````````````````````````))))))))[[[[[[[[```````````)````)))`````````````````````````````````````````````````````````````````````````````````````````````````````']]]]]``''''''''`]]]```]`````````````[))_)))_________________________)))_______________)))))))[```[[)[[))))__)))))))))))))))))))))))))))))))))[[))))))))))))))))[[))[[[)[))[[[[[[[[[[)))_))))))))))))))_________)))___))_______________________)", "__)))))[))[``[))____)))))_____))]``)____)[[)__)`))````]''']]']]`]]]]]```]'']]]``]]]]]]]]]]]'''''''''']]]'''''''{{'']``))```)))))))))))))````))))))))))))``````))`````)))))))))``]]`]]']`))))```))[```````]]``]']))``]]]]``))))))_____________)))_________))))_))))))))))``))````)[[[[[[)``[`````[[[[[[[[)))))))))))))))[)))))))))))))))))))))))[````))))```)))``````````````````)```````)`````))````)))```)````)```)))))``````````)))```````````)))`````````)))``)))))__RRRRR_))``````````))))))````````````````)```````````````))))))))))))))))[[[[[[[[``[[[[))[[[[[[[[```[[[```````````````````]]]'']]']]]]]]]]]]]`]]]]]]]]]]]]]]```]]]]``````````````````````````````))))))))[[[[[[[[````````)))))```)))````)````````````````````````````````````````````````[[[`````````````````````````````````````````````]`````[)`````[[[[```````````[[[)[[[)))))_______)))______))))__________________________________))[))___))))))))))))))))))))))))))))))))))___))))))))))))))))))))[[[))[[[)`[))))[[))[[[[))_)))))))________________)))))______________)))________))", "}}}RRR}_RR}_____R}____))[)))__))[[`````]````[``]``````]''''''']]'']]]]]]'']]]```[[[`]]'']]''''''''''']]]''''''''''''']]]]]]]]```]]]```)))))))))))))))))`))))))```````)))))))))```````````)))`]``[`]''''']']``]']```````````))))))[[)))))``````]]_____)___))___))))))))))`````````]]]]]]`]]]'''']]``````][[))))))))))))[[)))))))))[[`````````[[`]]``````````))))`````````````````))))))``))))))___)))))``)))))``))))```````````````))))`````))))))))))))))))```````))))__RRRR__))`````)))````````))))))))))``````````)))``````)))))))))))))))))))[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[`````````]``````````]]]]]]']]]]]]]]```````````````]]]`````]```````````))))````````))))))))))))))))`[[[[[[[[[[[[[[[)))))```)))`````````````[[[`````)))))))))````````````````````)))[[[`````````````````````````````````````````````[)))))))````[)))))))))))))))))))__))))))__)))))[))))))__))))))________________))____________}}}}R}}}___))))))))))))[))))))))))))____))))________))))))))___))))))))))[))`[)_))))))))))))))))))))___________________)_______________))))))))_____", "RRRREERREEERRRRRR}_____)))_____))))``]]]''''''']]'']```]]]'''''''''']]]]]]``````[``]]''''''''''']]]''''''''''''''''''''''''''''''''''']`']]]````))))_))))))))))))))))))`))))````))))``````)`]''''''{''']'']``]]]]]]``````]]]``)))[[)))))[[[[````````````````))``)))`````]]]]]]]''''''''']''''''''']]]]''']]```]][[`````]````````]]]''''']]]```]]']]]`]]]````)))```````````````)))))))````)))))__R__)))))))))))))````````````````````))``````````))````))))))`````````)))]]``))``))))))__))))))))__________)))))````)))))``````))))))))))))))))))[[[[[[[[))[[````[[[[[[[[)[[[[```[[[````````````]````````]]``````]]]]````]]]`````````````````````))))))))````````))))))))))))))))[[[[))))))))))))))))````)))````)[[[[[[[[))[[[[``)))))))))`````))`````````````)))[[``````````````````````````````````````))))))``[)))))))________))))___)___)))))_))))))))))))))[))))))____))))__________}}_____________}____RRRRRRR}___)________)))))))))))[[)))____________))))_____________)))))_)))))[))))))_)))_____))))))))____))________________________}}________)____}RR", "___}RRRRRRRRRRRR_______)}}}___))``[)))__))[`''']'''']```]'''''''''']]]]]````````''''''''{'''']]]]]]]]''''''''''''''''''''''''{{{{{{{{{{'''''''''```)))))`)))))))))))))``)))))))``)))``]````]]''{'''''''''']``]]]````)```)````)))_)))____))))))))]]``]]``]]]```]]```]]]'']]]]]''']]'''']]]]''']''''''''''''']]]'']]]'''''````````]]]]]]]]```````]]]`````]````````))))))))``````))))))```)``))``)__)))))))`))))___)))_____)______)))`))))))))))```))````))``))))))``````````)))))))))))_______RRRRRRRRR_____)))))``)))````````````))))))))))))))))[[[[[[[[)))[[```[[[[[[[[)[[````````````````]]]]]]]]]]]]'''']]]]]]]'']]]]'']]]]]`````````````````````))))))))))))````````))))))))[))))))))))))))))))))))))))))))))))))))))))))[[[))))))))``````))))))))))````))))[[[[[```[[````[[``````````````````````))`````)))))_______________)))__))__))))))))))))__)))))_))))_________)))__________}}}}RRRRRRRRRRRR}}}RREEERRRRRR}__________))))))))))[[)))[))___________________________)))___))__)))))))_))))____)))))))))__))))_________________________}_______________", "))))______________________))`]''']``[)__R}__))))`]'''']]'''''''{]]]]]]]]]`````]]''{{{{''{{'']]]]'']]]]]]]''''''']]]]]''''''''''{{''''{{{''''''''{{{{{{{{'']]`````))))```)))))````````]'''''']]'{]]'''''']]][[]]])```))``)````)))[`]]``]]]]]]'''']````````]]`````]]]]]]]]]]]]]]]']]]]]]]]]]]]``]]]]]]]]]]]]]]]]]]]]'''']]]]]]]]]][[[``[[[[[``[[[`]]``````````````))))))))))))))))))_)))))`)__))__))))___)______RRRRRRRRRRRRRRRRRR__))____RRRRRRRR______________RR____))))__))))))__)))___)))_____RRRRRRRRR_))___))_R__))_))))))))))))))))))))))))[[[[[[[[))))))))))))))))))[`[))_[[[)))))))))[[```[))[``]''']]]]']]]]]]``]]]]`````````````````[[[`)))))))))))))))))))))))))))))))))))))__))))))))_)))))))__)))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))[[[[[[)```````````````````)))))))))))))_______})))))___R}______________)))_____________________))____________}}}RRRRRRRRRRRRRRRRRRREEEERRRRERR}__________________))))))[))_____________)))_________)))))___))__))))))))))))))))))))))))))_)))))________________))))))))}}_______)))))))", ")))))______))______________)[`]''''''']`'''][))[)`]'''''{{{''''{]]]]]```]]]]]''']''{{{{{{''']''''']``````]]'''''``]]''''{'''''''{'''''''{{{{{{{{''''{{{{{'''''''````````````]'''``)``]'''{{']`''{{']]]]`]]]``]]]''']``]'`]']``]][`````]][```]]]]]````````]]]````]]`````)```````]`]]]]]]`]]]][[]]]]]``]]]]]]]]]]]]]]]]]]`]]]]]]]]``]]]```[`]]`[[`']`````]````````))))))____________________RRR__R__RRRRR_RRRRRRRRRRRRRRRRRRRRRRRRRR___RRR_RRRRRREEERRRRRREEEEEEYYRRRRR________RRRRRRR_RRRRRRRRRRR)_RRRREEERRRRRRRRREERRRE____))))))))))))))))))))````````)))))___))))))))_))))__}______}}RRRRR}}}_}RRR___```````````````[`````[[[```````[``[[[[[[))))))))))))))))))))))))))))))))))))_______________)))__________))))_______))))))))))))))))))___)))))))))))))))))))))))))))[[)))[[[[[[[[[[[[[[[[``))))))_______R___________RRREEERRRRR}________________________)_______)____}}}}}}}}RRRRRRRRRRRRRR}_____RRRRRRRRRRRREER____________________)))))______)))))))))[[[[)))__))))))))))__)))_))))))))))))))[[)))))))))__)))))))))))))))_________)____}}____))))))[[))", "`))))_))))____))_________))))[``]]''''''`]'''{{{'''''''''''''''']]]]]]]]]````]]]{{{{{{{{{{{{''''{'']]]''''{{{''']]]]]'''{{{''']]''''''''{{{{{'''{{{{{{{{{']``]'']]]]]]]]'''''{{{{{{{'''''''''']]'']]]]]]]]]']]]`]]]]]]]]]``````]]]]]]```]]]]]]]]']]]````]`[[``]]]'']]`]]]]]]]]````]]]']]`]]``]]`[[[`]``[[``[`]][`]]`[[`]]]]`[[[`[[[[[[[[[)_)]{'`']`[`''`]]]`[))[`))____RRRRRRRRREEERRREEEEEEEEEYEEEEEEEEEEEEEERRRRRRRRRR_RRRRRRR}RERREERRRRREEEERRYEYKWWWERWWWYEW}EERERRRRRRRRRR_RRRRRR_RR}RR}_____((RRRRREERRETRRR}RREER}_______)``))[```[[))__)))))))_))____________)[))))))[[[[``[```[`[))[[)[[))))))_)))))[][``]''````'']```'`[)[````[)))[))_))__))______)))____)_^R___^_))^___^^^^^^^_^^}RR^^^^^R^^_^^^_______^^_______)__`____))__________))_________)))__)))))))))))___)[```[))[[))))))))__^RRR^_RRRRRRR(RRR})))_((REEER(}RREYYYEEER((}}}______))^__)__))``))_))`))))))))}}(RRR((}}(RRRRRR((}_____}}(((RRRRRRRR__RRRRRRRR__________))________)))`)```````))))))))))))))))))_________)))))___)))))))))))))))[``[)))____)))____________________)))))))`````", "`)))____)))__)))__))))_____)))))```]]]]]]]'''''''''''''''''''''''''']]]]']`]]'''''''{{''{{{{''''{{{{{{{{{{{{{{'']]''''''{{{{{{{{'''''{{{'''''''''''''{{{'']]]''{'']]]']]]]]]]]]]]]'''''''''''']]'''''''']]]]]]`[````[[[[[[[[[[[[]]]]]]`````]]]]]]]``````]`[[`]]]]]]]]`]]]``[[[[`]]]]]```''][[]]`[[[`]`[[`]][[`]`````]]``[`]`````[[_)[[[))[''[)`{]]'{{'``]']`)__)_______RRRREERRRREEEEEEEREYYEEREEEEEYYKJYYEEEYYYERRR___)`)_)`)RYEYYYYWWYKKLLJKWYWYWERRRYWxlFFlhlFKLLKLKWYR(_(EYWYER}}}RRRREEYYWYEERRRREEERRRR}REYYETRRRREERRRRR}____)`)______)))))______________RRRRRR}_______))```[))))``[)))__^^^______)))))`]]````````````````[[[[[[[))))___________}______}}}RRRR^__}_)_^}}}^^}^^^RR_^RRRR^_^RRRR^__^}}^____)___))_R_____}RR______________________________________))___))))________)))))))))___^^^^____}((((RRRRRR____(REYEERREEERRREERR(}_)___)))__)[[[```````))___))))))))((RRRRRR((((RRRRRRRR(}___}(R((}_RRRRRRRRRRRRRRRRRRRRR_____)_____))))))``))````))))))))))))))))))))))))))___________________)))))))[[[[))___)))))_))_____))))_____)))))``)))`````", ")))___________________________))))))``))``]]'''{'''''''''''''''''''''''''']]'''''''{{{{{{{{{''''{{{{{{{{{{{{{{{'''''''''''''{{{{{{{{'''''''''''''''{{{{{{{''''''']]]''']]]]]]]]]`]]]'''''''']]]][[[[[[[[]]]``[[[[[[[[[[[[[[[[[[[]]]]]]`````````````[[````[[[[```]]]]```]]]`[[[``[[[[[[[[[``[[[`[[[``````)[[)_)[[`[[[`[[_))[[))))[_^^[]]`[__))_)]][)``[`{]''`[)))_RRRRRRRRREEEEEREEEEEEEEYEREYKKEKYEEREEY__))_RRRER_)']`]'']']`)))))`[)))'][)[`''{]RYHcg9XX.171-XX1XXXX17fhhhgcHERRRYKYEEREYYWKWYEYYEEEEYREEYYEREYYYYYYYYEERRR__)_RRR_)_R))______))_____^RR^^^RRR}^__^^_______))[)))_____RRRR_))___^___________))``)))`````)))```_)))_____________RR___RR_____RRRRRRRRRRE_}RR__}RRREERRRRERRRRRRE_RRRRRR}RRRRRRREREERR}}}E}_RR}_[RR_RRR__RRRRRRRRRRRR______RRRR__________RRR_____))))))))__________________}}_______RRRR__RRRERRRR}__))))___}}_))__)))_^}RR}_))[[))))__RRRRRRRRRRRRRRRRRRRRRRRREERRRRRR}}RRREEEERRRRRRRRRRRRRRRRRRRRRR____)______)))))))))))))))))))))))))))____)))))))__________________________)))))))))))))))_)))_____))))________))))))))````", ")))____________________)___________))))))```]'{{''''''''''''''''{{{'''''''''''']''''{{{{''''''''{{{{{{{{{{{{{{''{{{{{'''''''''''{{'''''''{{{{{{{{{{{{{{{'{{{{'''']]]''']'']]]]]]]'''''']]]]]]]]`]]]]]]]]]]``[[[[````````]``````]]]]]]````````````[[[[[```[[[[[[[[[`[[[[[[[[[[[[[)))______[[[[[[[`[[[))[[)))))[[)[[))[[[[[[[[)))[)_^_)[[[[[[]''`[``'{{']]]''']]]])__RRRRRRRRREEEEEEEEEYYYREKWEEKKYER_))))``]]`__R_)`]''``))))_RRRRRRRRRRRRRRRRREERYHzhXXX.XXXXX;7X.;<1;.XX.;XX;fcHWR(_))_((})_EWWWWLLLKWWWLWYKWRRERRRRRRREERR____^^}RR}^_^____)))^^^^^}RR}}}}}}}}RR^_____________))______)))__)____}}}__}___^__}}________)______}}____}}_RRRRRRRRREEEREERRRRRREEEEEEEEEEERREEERRREYYWYYEEEERRREEEREEEEEEYWEEEE((ERRR(REERR}(RRREERRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRR}RRRRRRR_^}}}^__}RRR}}RR}}}RRRRRRR__}}}RRRRR((((RRRRRRRRRRRTRR}^RRR}____)___}}__}____^RREEEERR(RR____RRRRRRRRRRRRRR}}RRRRRRRRREERRRRRRRRRREEEEEERRRRRRRR___RRRRRRRRRRRR_____R___________))____)))))_____))_____)________))))))))))))__))________))))))))))[[[)__))_______)))___)_____))))))))```", ")))____)________))___)))____________))))))))`]''''''''''''''''''{{{''''''']]'']```]]'''''''''''''''{{{{{{{{{''''{{{{{{''{{{{{{{{{{{''''''''''{{{{{{'''''`]''{{{{']]]]]]]'''''''''''''''']]'']]]]````]]]]]]``[[[[```]]]]]]]````]]]```````````````[[[[[[``]`[[``[[[[[[[[[[[))___))_______)_)[_^_____)__^RRRRR}_)_RRR^______^^RRR^__)))____]'`_R_```][[[]][]]''{{{{{']`))))RRRRRRRREEEEERRRYYYEEER__))`````)```)___)]]`]`)``_R_)_REREER_`]]`)))[[)__[`'}KLFSxlchg977:-<---;;---;;-XX6hlxxxxzzSHHFFHchgffghh99lKLHLKYEERRREEERR(}(RRRRRREEEEEEEEERRR^^^}RR}}RRRRRRRRRR}}}}}}}}______))__)))____}}_}}_______}))))))__}}RRRRRR______^}}}}}}}}}RRREEEERREYYEEEEEEEEYYYYREYWWWYYYYEEYYERRRRREEYEEEYWLKYRWWYWWWWWWEWLSSlchcxLWWWYEEEE(_RYRRERRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRTTEEETRRRTERRRRRR}}}RR}}}}}}}}}}RRRRR}((RRRRRYYYYEEEETEEYYEEEEEEEEEEEEEEERRRRRRRRRRRRRREEEEEEERRRRRRRRRRRRRRRRRR}}RRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRR__________))______))_____________)________))))))))))))))))________))____))[```[)________________)))_))))))))))))``", ")))___))____________________________))))__)))))`'''''''']]]]'''''''''''']]]]'']```]]]]]]]]'']]'']'''{{{{{{''''''{{{''''''''{{{{{{{{{{'''''''''{{{{{{{{{{]'''']]`']]]]```]]]]'''']''''''''''''''][[[[[```````[[[[```````````[[```````[[[[```[[[[[[[[[[[[[[[)))))_)[[[)))[))))))____))[[[[)_^TTTRRR}))_RRERRRR__RER^_)^RTEEEEEETR^RR}}RRR}R}}})'{{]]]``[[[]]''''''{{'''']`)__RR____REWKKKKRR[`RE}))`````)))`````]]`]]`']`''`)`'{{{{'``'{{{{{']]]]`{{`)[{{{){{`_(Ll7------333,,<<,,XXXXXX.6771;;;11-.XXX...X1cLWKWEYYYEEYYWYERRREEERRRRRRYKYYWKYTRRRRREERR}RREEEEEERRRRRRRRRRR(}}}}_}}}}__}_)__)```}__))_}}R}}}}}}})_}RRRR}RRR}}__)`[)__))_(RRRREEEWYYWWYYWWWWWWWWWWWWYEEYWWLLWYWLHxSFFSxllggg999fgggffffff7771111;;..69ff9fggghcSWEYYYYEEEEEEEEEEEEEEEEEYYEEEEEERREEEEEEEEEERRREEEYYYERRREEEEEEEEEEEEEYYYWWYYYWWWYEYWWIYIIYYIIIIIIEEEEEEEEYYEEEEEEEEEEEEEEEEYYYEEEEEEEEEEREEEEEEERRRRRRRRRRRRERRRRRRRRRRRRRRRRRRRRRRRRRRRR____))``______________))_)))____)________________________)))))))))))))))))))))))))))))))________))[[))))_______________)_____)))))))))))", "`)))____R______RRRRRR}_______________)))___))))_]]]]]]]]`````]]''''']]]]]]]]'']`]]]']]]]`]]']]''''''''{{'''''''''''''''''''''{{{{{{{{{{'''{{{{{{{{{{{{{{{{{{']`[''']`[[]]]]]]]'']]]]]]]]`]]]]]]]'''''''][[[[[[[[[[[[[```[[[[[[[[[[[[[[[[[[[[[[[[[[))))))))_____^_))))))[__)))__^^^_))__^^^^TEETRR}___RRR_))))_^R__^RRTEEERRR^__)````[[``{`)`_WzlihHR`)['`]]]]]]]]]''''````))_)))'`}EKHzzxhhzLR`__))``]]])`````]'`']`']]'````)_)`_}RYKKLHFNzzzzzzHKLHzlh9hhhccg1X--glgf,,--;--X.;1.X...XXXX--;,,---<<,,<<.;9hllxzxzSFLLKKWWWWWWE(EEEEEEYYKWWWR_}RRRRR}_RR}RREEERRREEYWWWWWWWWWYEERRER((((((RYWWWWEERRR(_)))[[))))RRRRRRRR___REERRYWLLLLLLWWWYEEYWLWYWWWWLWWWWWWWWWLLHSlg991.6f91X-;11;-XX-;;;;--X.XXX;1;X;>>>;;>>..XXX.;;X;.XXX9xKKWWKKWYYYYWWYYYWWWWWWWWWYYYYYYEYYYYYYYYEEYYERRERRRRRRRERRRREEEEERRRRRREYEREYWYEWWWWWWKKWKKKIIIIWWWWWWYYEEEEEEYYEEEEEEYYYYYYYYYYYEEEEEEERREEERRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRREEEYYYEEEEEERRRR_))))))))))))))))))))))__________________RR_______)))))))____)))))))___)))))_________________))[[)))____________________)))))))))", "``))____R______R__}}}__________________)__))))))```````````````]]]]]]]]]]]]]''']]]]]`````]''''''''']]]]'''''''''''''''''{{{{{{{{{{'''''''''{{{{{{{{{{{'''{{{{{{{'{{'`[[]``]]]]'']]]]`[[[[[[[[[[[[[[)))))))[[[[[[[[[`````[[[[[[[[[[[[[[[[[[)))))))))_____[[))))___)))__))}^^_^^}RR}^_^^RRR___RRRR((RRERR_R__RREEEWJHNHJWYETR}____REWKLLHFScgv919cKLKRELK_```]]]]```]'''`)]]]]``))`]{{{{'`)JHxhx_{``]'']]`''''''''`']```)`]```_YzcNHLLLKKKRR_)))__RYLHh169W}_}{{W6--hlg7;1f7.7cLWWWEEEYWLSSDc7->3>---------,-X;1;....;1677166669hlxzSxxxFWLKKKWKSchhcxSzlhhgg999fgggff77771111111777779fgfff71111;11679hxFWWWWLLLLWWYRREYWLLScg97971.XX...;;17ff9719gg9f96ff999ffggf7661.X..;;.X.1;;--;;,,1,;;,,;-;.1fhcgf;;;,,>379gcg7;--1;-17;;7zLWWKLLLKKLLLLKKKKKKKKKKKKWWYYYYWWWWKLLLKFzxFLKLLLHFFSzxxxxxxlllllxSSSSzzSSzlcclxFLKKKKKKKKKKKKKWWWWWWWWWKWYYYYYYEEEEEYYEEEYYWYYYYEEEEEEEEEEEERRRRRRRRRRRRRRR_RRRRRRRR__RRRR_____RRRR__________________)_))))____)))))____))____R_____RRRRRR_RRR__))))))___))))))))))___________________R}___)``))))________________))))))))))))", "``)))___________}}______}___________))))__))```)]``````)````]]``]]]]]]'']]]''''']]'''']]'''''''''''''']]'''''''''''''''']'''']'{''''''''{{''{{{{{{{{{']`]]'''''{'''']]`[]]']]]'{''{{{{''''''''''`]]]]`[[__))))))^_^^^^^^)[[))[[_)))__))[_))[))__))))))))`))R[_[_))}__R)R_R}_RRRR^R_)___}}}RR(__RYYYYE__RRR}_____RR}}_)R}_YREKLHHzxllxzc1XXXXXX1x{']`)_^R___))[``]]]]]]]]````]]''`````````]'''']`]]]]]]]]]]]]]]]]]]]]]]]]]]]`````]'{{''''{''{{`RWWYERR})')`]])Wc1fH((SLEYYHF({{'{{'{{{{{{'(Dg7::>::::::::---;;;;;;;;;;;;;;;;;..........--;;11;;.XXXXXXXXXX.-XXXX.-----;;;,3----,-1;;--.X,X--7;.;;---,,XX;.;;;;;...;79ff71--------<<<<<<<<--------..........----...<<<.-1.;<1;.;1<>,,-->>->-3--77fclccgfc7<71;;-;77ff7-X--;-,7X-3-1hSWWLLWKKWWWWWWKWWWYWKLWWWWWWKLScggf;-71;;..;111;;;.XXX.XXXXXX111.X..XXX.XXXX1XXX.969cLWKKKWLLKLLKKKKWWWKWYKKWWWYYYWWYYYEEYYR}RRRRRRRRRRRRRRRRRR_______________________RRR____R____)))_R____RR___R_________)`)_____R___)))___RR_RRRRRRRRRR__RRRRRRRR___)))))___``)))))`))______)))))___)_____)``````)__)____))))))))))))))`````", "```)))__________R}}___}}____}}RRR___)))`)))`````]```````````]]]`]]]]]''']]]''''']'''''']''''''''''''''''''''''''''''''''''{'''{{{'''''''{{''{{{{{{{{{{{']]]``]''[`]''{{{{{''''''{{{{{{''''''''''{{{'']]`]]]]]]]][]][[[[)_[`[)[[[[)))))))[_^_)[[))_______^__^^}^^)RR_`]')RRYWEYWYR)RE__R([}(_ESxSKKYER}RR}_))[```]]]}(RE}YWYWY}RYHxc9X1gclLRYLxlW]]]]]]]]```]]]]]]]]]]]]]```]]]]]]]]]]]]]`]'''']`]]]]]]]]]]]]]]]]`````````````]]]``]'']]']`]'''`['{{'[)))])EFccFY''`{{{{'R{{`)''`{'{`WSlg7,---:::::::::::------;;;;;;;;;;;;;;;--->>>>>,,,>>,,,>>->>>>>>>>7;-,33;->>33>5>>55>f7->7,-,7377X77---,777,---,3,,>-->,,>;;--;---;;;;;;;;::::::::::::::::------------:,,,--XX-711,--<777g---77,:3-3ffgcDGFFxcxl7;X7fgcg7,-7ffgSE(l7X--,,-X.7hxSSzSFFFFSSSSSSSSxllhcllchhhfff3;,3;;;;;;;,3;;;;;;;;,;,7737flSlf;...6gclSWR}Wl1XX..gxSSSSSLWLWWWWWKLLHLKKWWKWWWWWWWYRR}(RRRRRRRRR_RRRRRRR___________________________)_______))))))))))))__________RRRRRR__)__))_____RRRRRRRRRRRRREEEEERRRRRRRRRRRR______________))``))))))_________________)))))))__)))___)))))))))))))`````", "```))))_________}}}}}}RR___}}______))````````]``]]``````]]`]]]]]']]]]''']]]''''''''''''']''''''']''''''''''''''']]]''']]'']]]'''{{''''''{{''{{''{{{{{{{{{'']]]'{``]]'''']]]]]''''''{{{{{{{''''''{{{{{']]``]]]]``]]]]``[[_))__))))))))))_)[`[_^_[___^^_^^__)[__}R[])KzLLzczHW(RERHcFYzxLLLlcllhlWWWYRR}_)))[``[))}}}R(}R}[_RFlh6X.19cH('{{{{'{{)``````]'''''']]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]'']]]]]]]]]]]]]]]]]]]````````````]]]'`````]]``]]]`]'')````[)))WHK}'{{'{)_RRRWREKKKLHKLlgg7;;----:333:::::::::::------;;;;;;;;;<<<<<<;>>>22222>>2222222222222233>>>233>5-5>>>>>75--37-7-37XX3>->->3-XX,-,3-->:->32---373>-5>332222222244444444444444442222222232:::337ffccllffgffS((LLDg:XX-,3fgglDDGGSxFlll17WWE(_(WF,cLWEWFlg,-,,:,-;.XX;11111711111;;;;;;.XX.11.XXXgcg7:33-:>>2222>:>>>2233>55>>>27,----;gL{{{{'{{{{{'Wxh;.;7gcxSSSSSxchg91699fclxxxzzxxxxzSSHLWYR)RRRRRRRRRRRRR__)))[[))))))______)))[))))))))____________))))____________RRRRRRRRR_____________RRRRRRRRRRRREEERRRRRRRRRRR______________)`)```))______))))________________))))____))))))))))))````", "`))))________________}}}_}}}__)[))))))``````````]]]]]]``']]]]']]'']]]]'']]]]]]]]'''''''']]'''''''''''''''''''''']]]'''']]]```]''''''''''''''''''{{{{{{{{{{{''''''']]]]`[]]``]''']]]]''{{{{{''''']]]]]]]]]]]]]]]`[[[[[[[[][))[][_))______^_[[___))_^}^^^})RRR[[]]_KYYShXX99hhv9vh999hlHHzxSY_)((_))))___)_}___}RE(EEYREFzxh9XXX9xW){{{{{'_[`[{{`]```)))```]]]]]]]]]]]]]]]]]]]]]]`''''''''']]]]]]']]]]]]]]]]]]]]]]]]``````]]]]````]```]']]`]''`[[```````)_RR[''`[][{))))_EYLHKEELF7XX-;-;-3:------::::::::::::::::;;;;;;;;<<,,,,,,::5555553222222244444444:33--23-33,;>,,3-,,73XXXX-77,fxSlc777;gFSf7gggf>35--23332>>22233>>>>>>>>4444444444444444::::::::34:::433ffchllgDELDSFg7f33,7cSlgfcgf3,cDxlEWxl77xDDSFxg7-77----X--33--3-;11;XX-;--;;;;;;---;;1,;,;--;,11X----233::22222>2222222232:2>5-:-:>7gDY'`'{{'`_R(_(F91X;XXXX;777961XX..XX1XX.;--;;;.;;;;XXXXX9xKEEERRREEREERR__)________)))_____________))))____RRRRRRRRRRRRRRRRRRRRRRR_RRRRRRRRRRRR____))______RRRRRRR_RRRREEEERRRRRRRR_______________)_)))))))__________)))___________)))))_____))))))))))``))", ")))))___________________}RRR__)[``))))))``)```]]]]]]]`]]']``]]]]']]]]]]]]]]]]]]]''']]''']]]]''''''''''']'''''']]]]]''''''']]]''''''''''{''''''''{{''''{{{{{{'']]''''''''{{']''']']]]'''{{{{'''''``````]][[[[[[[[[[))))[`[[)__))_[)_____)_TYT_`)!KJLJIT^_)}[_'^^RIh8cxc9809xHxxHNxi8xHBBKR)`)__))})[^}}}REEEERRYWWLLFFxf6XX.;611gxxxxllzHW_'])_)```````]']]]]'''']]]]]]]]'']]]]]`]]]]]]]]']]]]]]']]]]]]]]]]]]]]]]]]]]]]]]'']]]```]```]'']`]]''']`{']]']`)''`))[)}^_}_EzzLFHKYLh11--373:,,-:,37733:::::::::::::::<::::::::-:>>,,,,2222222222>:::>>22222222222233321171;.;1.1.X7hxchlf7lW'{`)(((FL__E){{))((((Lg>-5:>232>:->>>>>>>>::::::::44444444::::::::::::::::--,-7f7lcfX-gg7fff3-fcg7-7,,-3lSxghg7ffff7-XX--------:,,::---,3:;;>,3733--;>,,,,,>;;>>--3,------72>33:->>>>>>>22222>>:::3>>3333337fglSLW)RLxlzLYKSK(WHcfxSxc71-;1......1;71-33>3<---;;;;7cSSlxLYERRRRRRREEERR__)))))))))))))____))____))))))))____RRRRRRRRRREERRRRRRREEEERRRRRRRRRRRRRRRRRR_______RRRRR_____RRRRRRRRRRRRRR_________________)))``)))_____))))))))________)))))))))))))))`)))```))", "``))))))___)_________________))[))))))))````]]']`]]]``]]']```]]`]]]]``]]````````]]]]]]]]]]]]]]]]`]]''''''''''']]]]]]]]''{''''''''''''''']'''''''{{''''{{{{{{{''''''''''']]]]''{{{{{{''''{{{{'''']]]`[[[[))))))__[[[)_^_[^)[_^^)[[[)___)))TIIT!!R^TKHHHHHIKYYRIR_RKNhihchi9hh8ycchhxxhhchhhczWR}RRREKJWWKFFFSzxxlffgff7...;1.;;XXXXXXXX9L]{```]{']]]]]]'''']]]]]]'''''''''']]]]]]]]]]]]]]']]]]]]']]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]````]]]]']``]'''``[`]'']]{')REWHKE}_ELR_cf9hg;X<>,>---,3-<<-----:::::::::::::,,,>>>>>>>>::>>>>>>2222::::::::::22::::::::3-:7:-fDEWLFxh9.cFcX9W{`_(lcxhfflSFW((_){'{{'{{{'Wcf7777:,,,,,,,::::::::::::::::::::::::::::::::::::::--;-<-37X-X-;;,-X,7,<<----7,X-,<-XX-XX7,->>333735>7::3,---7--:,--,3:-:::--::::::,,3::::::-7fff7333----:,:-:::--::,::::::::----::--4-3glgcScg99lKYYLHWRE]'__')(lf-;XX;61.;<-,333>-5,<<<,,,>,hSHLWWKYEERRRRRRRRRR__)[)))____________`)))))))___))))_)_____RRRRRREEERREEEEEEYYYYYYYYYYYYYYYEEEEERRRRRRREERRRR______RR______RRRRRR____________)))))))```[[))__))__)))[__________)))))))```````)```````", "`````)))_________________)))[```))))))))```]]]]``]]]```]]```````]]``````````````]]````]]]]]]]]]]]]'''''''''''']]']]``]]''''']`]'''']]]''`]'''''''''''''{{{{{{{{{''''']]][[[``]'''{{{{{{'{{{{{{{{{']]````]]]]]]]`][[[^!!!!RTR^[[)_)))))___^REYYT!RREEEYIKJzhhihhxBI^^Bhhcckkchy99pjicKNhlzNBKERYKJBxhhhhyccch91....<...X;;.117fff9619lLR{_]]{`)'['']]]]``]]]]]```'''''''']]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]'''``]]]]]]']````]]{'''']`````]''`_}RRERERFxgXX7gf-,,--33--3,,--<,7::::::::::::,,,,>>>>>>>>>>>>>>>>:::-------::::::--------:-,3--fSLLKE}RLxzLFc99FEYEW_}xhh999ghhhglLRYFlhg91-;3,--:::---:,::::::::;;;;;;;;;;;;;;;;<<<<<<<<,,,,,,<<,,;-;,;;3,--,7,---;1,-;7--,---;7>73-25-3>25-5552,---;<,7--,33--3:333::33::::::::::::232:37773--::,,::,,-:::--:::-----:::,,,,:---477::7777;X6xR`)[`}HcNK)']EL9-X7lxlg7777;--:::37<<----:>,;;7gxHHLKYYEEEERRRRR___}}RRRTTTRR}^__^^^}}^^}RRRTETR^^RRRRRRRRREEEYYYYYYYKYYYYKJLLLLLHHLHHLKKKKYYYEEEEEEYYEEEEERR__RRRR________________R_______))))))))[[````[[)_))))))))))______))))))````````````````", "`````)))_____RRR___________)```````))))`]``]]]````]]```]]``)````]`````````````))]``````]]]]]]]]]''''']``'''''']]']``[`]]''{']``]''']]````]''']'']''''''''''''''{''{{{{{{'{'][[[[`]'{{{{{{{{{{{{{'']]]]]]]]]]]``[']]`_RTTIHzHT_!I^^_))_^^_^}!!!^^ETR_}YHxzzxRE^HHJYIBkhci%phihy*htu8tjkhhxE])TYIKBNNHKLNxlxxc9.X;<---,77fgfcDlchcvxSHR{{'{'`']`{`]``]''']'''''''''''''''']]]]]]]]]]]]]]]]]]]'']]]]]]]]]]]]]]]]]]]'''''']]]]]]]]]]`]''']''`]''']]]``]]]]]]']]]`))][RRRWzScSf,glg3::,::,--3--<<<<--:::::::::::,,,,,>>>>>>>>>22222>>:::::---,,,,::--::::::::-,,-,77,6hL}[)}RWLxxlczHR)R}}R{]EKxh6XXXXXXXXXXX..;1,-,77777,<----------;;;;;;;;<<<<<<<<;;;;;;;;<;;;;<,,-,3,--7;;;,,-;,;;,<-;,,-<-7;;1-;3-73-375>3223255-,,;;,---7,--,,-::::::::444::444344434:::::::334---,<--,-<<<<<--<<<<<----<<---<<44-:3--;X11XX999hhihhyyYR_YLf9hW_'}FlFWWFlgf3:44<,,,::,3>--;119vzHKYYYYYEEERRRRR^}}RRRR}EETR}}RR^^^__^REYKKKYEEEEEEEEEEEYYYKKKKKKJLLJJLHzzzzHHzzHzzHHHHHLLKYYEEEEEEEYYKKYYEERRR______))))))_____RR___R______)______)))[[__))))))``))))____))))))))))))))````````", "```))))))_)))))))))))___)))))))```))))[[]]```]]]]]]```````]]```[````````))))))))]]``````]]]]]]]]```]]''']]]']``[]{']][[']]']`[`][[[``]'{`''''''''{{{{{'']]']]]'{{[`''{{{]'''{{']'['{'{{'{{]]]]]]'`[[`[[]'']]]'])[][[')TERPKTIBBkxkxK!)[[RKHBxB^[)!^!^^TKJxzWEYLzNKxyhh8hijiaVkdkVVkpapaN!^[^!^_RRR)RERYWYLxg7-::;9vghhcxxchhcclzL_{{''`]''){{`'']''''''']]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]```]]]`````````````]````]]]'])[`_R}_}ELg.X9ghgc3-,:<<<<<<<<<<<<<<<<::::::::::::::::--------::::::::::::::::::::::::>>>>>>>,:>3,>7fg7fgxW(}}x9+%ichkYER})(WWxclFHBc 1<..6<-,<,,33322::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::>>>::::<<<<<<<<:<<<<<<<:,---->3>,::::,,,::::::::<;,>-335>>><;;;;::::::::::::::::44444222222>>2>>;;;;;;;<----<<<-;;;;;>,,>>>3>---..--->23>31X9cR{`''`)]''}))W7-374::33::444444::4+hNLLKKJIYYIIPIIIYYYERREWIYIETTIERRRRRRR}REYWKKKKJHBBHHLHHHJJHBnHHBzzHHz|||||||HSSSzzzzzzzzzHHHLKJKYYEREEYWLHLKKYER(RR(_)))))))`)___))_)))))__^^^^^^^^____))))))`))))________)))))))````````````", "__)__))`))))))))))))))))```````]``[))[[`]`````]]```[[[[[``````[[````````))))))))```[[````]]]]]]]```]]]]]'']]]```['][]`['`]]]]]''{']`[[````]'''''{{'''']][[]{{{']'{{{']]'{`_)`'`[[[{{[[{{)]{{)R^[]{{`)))_^RR)`[[')_^[{]}EKTRTJJTTHxcxKT^)]YHBchkkxI)^^^R^RWJLSxh999cg6XXc999xIBxJzxhhihhJ'[)))}RR}YR_}WFWFc3X-33:fxY(}}}!!TYE^]{{`{]`''{{`'[''`{'''']]```]]]]]]]]'''''''''''''''']]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]`]]]]````]]]]]]]]]```````_``))}RRR`Eh.ggfSWgXX>:7<<<<<<<<<<<<<<<<::::::::::::::::--------::::::::::::::::::::::::>>>>>>>,,33:-->3,<-<7gcl9698yihxcxKEWSfX.X9cxLzh76.X.-<,<:,3322:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::>>>:::::<<<<<:::<<<<<<::333333>5::--------,333,,--<,>372>>><;;;;::::::::::::::::4444:22>>>>>>>>><<<<<<:<,<<<<<--:::-::>>>>>>2>>2---,3>233-7fxxFLllllxxlhg9g7;,gcggg3-33-::::4:::.6gxFLWYKWETTTTRRRRRRRRRRRTEETTYIYYEEERREEEERRRREEYYIKKKLLHLHBzzzHHBxxxzzzzSS||HSSzzzzzzxzxxxzzHzxzzzzHHKKKHHHLKYYEEEYWWKWER}___))[[)__[)))))___))))))__))))))))))))))))__)))))))))````````)))))", "_____))```````)))))``````]]]]]''``````````````````[[[[[[[[[`[[[[[[[[[[[[))[[[[[[[[[[[[``````]]]]]```````]]]````][][[`[)`)[[[[[[`__^_)[[``))``[)`''``]]]]{']]]]`[`]`[]][[[[]{']'{'[]{'{'[{RIY^]]`E}}EYR)[`[[``)[`[''__]{[{[E!)^TY]^EKKITR]__]RJzichJ[_R___RLc6X117XX37ggffh91hLLllh99hzSL{{'))(()(Wzhclgf7<--33:-X7hlxHLNLI_[_['[))R)])`)`''']`']]'''{{{{]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]']]]]]``]]]]]]]]````````_]`__)__)zhxzxcSSx;,ll--::::::::::::::::::::::::::::::::--------::::::::::::::::::::::::>>>>>>>,>>>>---:,<-.X.69chyyhhxzLWEHf.177-.1yNWLSLWFc7---:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::>>:::::::<<::::::::::::>---:2>5>::::----7,------;-,3---:>>>><;;;:::::::::::::::::::::::>>>>>>>>>>>>>>:::::------::::::::333332377,-::-:3>-,7g966.XXXXXXX9..X.X773ff,-:3:,:-:333:<--7fgcxLWWYYYWWYYYYERRERRRTTRRRRRTEYYYYEEEEEEYEYYYYEEEEREEEEYYYYYKKLHHHHH|zzxxxSSzzzzxxzzxxzzz|xxzzzzzzzHHLKKYRYYYYYYYWWKKLLLLLER}_RR})_)))[[[[)[[`[[)))))___)))))))))))))))))))))```````))))))", "))))))))``````))))))``````]]``]][```````````````````[[``[[[[[[[[[[[[[[[[[[[[````)[[[[[``````````````````[[[````][][)[)__)))))___)_}^__^RRRR)[[[')___)`]]]]``]]']_``[``['{]__[[]][[^^^^[])[)__[[_YR_RRRRR^`'[)`'`_['RJKR)R])^^^!TT!^__^RYE^^^^TPkhy8hlzh96XXX9vv977<;X;lclSzh9hchhhhhlKzcLRRYR_(((Lg...X..-,,--:31171X+6X+9hh9hlxhyyzYR'][]]]```[````````]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]``]]]]]]''']]]]]]]]]]]]]```]''']']_})`[`_Yzchchhhf11777:::::::::::::::::::::::::::::::::--------::::::::::::::::::::::::>>>>>>>,::>>,33,-:,,<<16gxFLLHYERKFl9;;X--79ghh9xWWSg7-<--:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::>373>32>3<,,,,<,,--,,73,;<.-,,,33>>>>><;;::::::::::::::::<<<<<<<<<<<<,,;;>>::::::---:,,3,444::::::::::--:XX--372--3,.....XX+69ihhNNllh9.1,,,,;--,,;--;<,,33:--5377ffglDSLWWWWWWYYWKKWYYYYYYYYYYYYYYYYYYYYYYWWWWWWWYYEEERRRRYYYEEYEEEEEEEEYYWWKKKLHHHHLLHLLHLLHLKLLHLKKLKKYYYYYERREYYKYYYEYERRRRR_R}___)))_)))))[[[))))))))))))))_))))))__)))````)````))))", "```)))))))``````)))````]```````]```````````````[```[[[``[[[[[[[[[[[[[[[[[[[[````)[[[````[[``````````````))[[[[))[][))_^^[[[[)_^^)_^_[[_R'`[[_RETRRTR^_))_)[``)_()[`']}KBicBITIIPJBNzzkh9L){{)`{{{{{']```_`'`[```]_]{RYR[)`_)'__[[_^^^)^TR[^^[']^W6X1XXXX1XX1991XX.+69yhcBxxBBNNNxNBNkNxkKIKHKWx9191X;<-,7,----,3--7719xHLzHLHLWKLxhzKR])']]'{']']]]''''']]]`````````````````````]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]'''''']]]]]]]]]]]]]]]''']`)_RR}RR)[JxzxFllFFRLf-:-::::::::::::::::::::::::::::::::--------::::::::::::::::::::::::>>>>>>>,,>::>>>::::---<<.hSYEYRRRh...,7-3---.X.1777-.-----:-::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::2>:>--2222;;;;;;;;7,-XX--;71<<---->>>>>>>>::::::::::::::::<<<<-<<<-<<<<<;;:::::::::::377774444444:::,33,37gcgf-:22>7,..1.18ihhccchcchhhg6ggg9.X..XX....XXX-23322255555237fffgclzLWWWWYYYWWWWWYYYWWKKKYYYYYYYWWYYYYYYEYYWWWWERYYRREEEERRRRRRRRRRRRRR_R(_(R(RERRRRRR_RRRREEEEEEYYYET^^^__REERRRRREEEEERRRRRRRR}}__)))))[````))))))))))))))__)))````)))``````", "))`)))))```]]]]]````]]]]`]]]``]]`````````````[))[[)))))[[[[)[[[[[[[[[[[[))[[[[[[)[[```[[[[[[[[``````````)[[[))__)[)_)_^_[))))_^^RRR^)[_!YT^^__)[!!!!^___[[`````)`[)Yh6%99ihhihhhppihlh9 0cLKY)']'[[]][[[)RR[])_][__)]'`}_]`]`_____^RYYR}JJxzJIR[}_RWWLg7-79966hzhcJNI^NKT^][!RTIPBBBNNxK^TEET_}Y((x-X,7---,33,--3><<.6hzzxFWYERR}R})_`{'`[][[']''']]``[[]]]]```[````````````````]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]'']]]`))YYYEEKKRxcll9969fglg7X-7::::::::::::::::::::::::--------::::::::::::::::::::::::::::::::>>>>>>>,,>::>>>>34:::::<1;XX9xE)l7.,<-:3:--,,.X;.<-.,7<-:-:-::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::>>>>>>:::>>>>>>->3>,3-;;--;;;;X.;fcFW((_(Ff->7>>>>>>>>::::::::::::::::---<<<-<---<<;--:::::::::::>333,444::::,::,777ffSh6.7hf--;;6.XX9hiihxBzkiiihzcccv999999999hhh9997--,3>-22>>>>>225-5;;.9hFHLKWWWWWWWKKLLLLLLLHzxlhclxFHLLLLKKWWWLKYEEEEEWYYYYYYYYYYYEERTEEEEYEEERRRR}RRRRRRRRR__RRRRREEEEKKIT}^__RRRRRREERRRRRREERRRRRR}_R(}_________________)))))))```)))))))```", "))``))))```]]''']]]]]]]]]]'']]]']]`[[[[[)[[[))))))))))))))))))[[))))))))[[))))))[[[[[[)))[[[[[[[[[[[[[[[[[[))____[)_)__[______^!__!!!!TIIT^_^_))^^^)))))`[)`''`_Lh699vcchhhhhch%clh8%+9h8h800hY]})'{{{)!IzzY)[[{`'`)]](YK}ELW`[FhxLERER}Lx6X69hFRER(((WE())(EKKWLFFhlLllzxzKEKxchhhlxxhcylR](ELclg-,7<,-:,,:--:3:---,>>>>>>,::>>,333::433::--,7,..;99,--,:::-:::,--<-,<--<,7:::-:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::>>>>>>>>>>>>>>>>>>X,7X-771,;179fflSW('{{')'`F7X-3>>>>2222::::::::::::::::--<<<<<<-<,,,,:::::::>>>:---;;;-:::--<<<;;;679gh9ghg7.X.7999999chiqqipppphkkBxchhihxzxxzxxxzxxcchg91;.;1<<<,,:--2233-;9cFLKWWLLLlccllllllllch91...177997779gclxxzxxzzzSHHHHLJKYYYYYYYYKKYRER((E(RERRERRRR__RR}_R}}^^}RRR^REEETTRRRRR}}__RRR}}}}}RR}RRRRRRRRRRRRRRRRRRRRRR^^_____)))```))))))))``", "`````)))]]`]]]'''''']]]]]''']]]']]`[)))[))))))__)))))))))))))))[)))))))))))))))))[[[[))))))[[[[[[[[[[[[[))))))))_[)____[______}R)___^^!!I^][^))_^^)[[))_)___(Wlf--cWDclcgzLl9666hy++hxlclxxcckzBnHHBJT^^IzkJ^'']__){_xvcWR}RSlW)WLHW_[)_`(c.XXX;+clf97,gL()((YHNlhX-;X1X;;X;1,->X;XXX1XX.7gf,glf---3--7:,---:,:-:7:-<<...117cFWWWxSccWFxgcl7.gggclxLY}`{''''']]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]''']]]]]]]]]]]]]]]]]]]]]]]]]`)_}RRYE['[)RJHJzNc9X.g77;<<::::::::::::::::::::::::--------::::::::::::::::::::::::::::::::>>>>>>>,:>3,>:-:4444:::33-,-<,X<-,,-::::-3:--,,,,<--3,--,::::::,::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::<:::::>>>>>>>>>>;;;;;;;;6;gchS((EYYR_`'{{'`_(WFDgg9-X,7->>>>2222::::::::::::::::<<<<<<<<,,333333:>>>>>>>,;;;;1;;;.......9999vhlzBxxlhhhxHHhhhciypppaiuapijkzkkhcBJJBzBBzhhhhhhiihch9X...;----<<-4443-;gxFFFScfff,;---;;;1111;..;;-...--...XX;77<.X;6;.gzHHHHHKYYEYYKJHFz9vhhchgfhcLEYLlhHWEYYR}R_^RRR}^R^RRRRRTEEYYYEEETRR^__)))_))_}RRRRRRRRRRRRRRRRRRRRRRRR^__)))```))))))))))", "```))````]']``'{''''''']'']`````````````))))))))_____)))__))____[[[)))))[)))))))))____))))))[[[[_)[)_^_)))))___)!^))^!!^^^!RRRR^ET!!TT^^^^YTT!R!^[[_^_)[_`)WgXX12373,,771ff719gg966gcllxzKIBzBBBxki% 0988hcxBJJILxxxh.X.9fhFYWWRR(EWEREYW_x;glf16gFx.X7--hE`(R_}WWh717791;X;7fggFSxDWWWWShg7Xfff3:--::::::::::>>::::<<<--.......;;;;;-------........19hcWWR][]{`'`'{``']]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]`)`]``]`[')'[']}]``]])YNNKBNExl9.X..-<<::::::::,::::-------------------::::::::::::::::::::::::::::::::>>>>>>>>>>>>>>>>444444444::::::::::::::44:::::::<<<:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::<:::::>>33>>;;;-1X.119lSE())`''`{{`_(WLFchf71;.X..;;--;,-:>2>422--::::::----::,,:--:,::-:f3:7>:--:>>>;;,;;;.X.11X999hhhlxxchiihchhihjkxxckjhhkjijjaaapppjjjkkkzBBBnxkhiiijkhiphp99hg6X1;---<<<--4445-,fhcg91;;--332,,>>>--:>,,,,;;;;;;;;;;;;;;;;-797.;hFLLLKKLLKKKLHzzzz9991X-;X.XX99XXXX66XX989zY^RR__R_}^^^__R^TYYTRRTEETTTRR^__))[[[[_^^}^^^RRR^RREEREEERRRRRRR___))`))``````", "````````]]]]]''''''''']]']]]]]]``````[[[)))_____________))_____)))))))))))))___)________________[[[))))[____^^__!^^^!!!^)^TTR^^REETTETTEETPTTRRRRRR})'_Y__LfX-71222:-:,3----;77,.9cllcclKKBkkxxkhhhiihxzzxlcchhhclc916hlf1X1ff767cW(RR))ESlfDcSW}R)(WhX,9W_W('[)E(WRRYE`JHHHLW(`{{{'{'['`)(RKl.X--:,3,--:::::::::::::<<<,,<<<;;-:::-----:::::-----<-.;6669L'{]'`'``]'{')]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]````````````]```````]``['{]''[_EIJxxKNy9h77gcf,-::::::::::::--------------------::::::::::::::::::::::::::::::::>>>>>>>>>>>>>>>>4444444444442222::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::<<<:::>>-->,;;;1669hxE[[[``[[)ELchgf7;XX--X--;;;<<<;---;,,3225:4--::::::::::::::3:::::::fg723:>2,,,;;....11699hhcxchchhxBnzkjaiaaiqqqqqqiajjjjppqipjkkkpaaappipj88qiipphuhjjhhhag9g91X;-<<:<<<--4444:-,7...-;,33-:::::::::::::::::::::::::::::::,17711flFLLLHHHHHHHHHFzxhhhg7177g9766996XX11XXX9zYRHh9hhhhxJKKIY![[RYIEERRRRRRR!RR}^^___[[[[))[[[_}R}REYYYYYEERRR___))``]]]]]```", "]]````]]']]]'''''''''']`']]]]']]```[[[[))_________________^}^_______________________)__^______^^_^RR^_^^^^^^^^^^^^^^!!!^TYETYIPH!TTTT!!IJIPTEER})_)`El91797--77-::>>>:--3;-,77,-X6999ghh999%8ii8ihhhhhccxchhiiii999XX9lxg7;;;;;.X1lLSSKLFg;-7cW`()]({{gX1F)`)EW_)`RY^^^T[^^^_)__YET}]]_}]^[Rxg+X-:::::,3:::::::::::::::<,,:<<;;;::::::::33322222-<,<-...6.gLE_{{`]]]']`]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]```````````]````]``]]']][[_``_}RJHHLc9c9X;fcchf-,,,,,,,,;;;;--------------------::::::::::::::::::::::::::::::::>>>>>>>>>>>>>>>>4444444444444444:::::::>>:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::<<<::>>>73;;..69gL_)}}__}(WFcy6.;----;,1;;;,,,<;,,;;;;;;;-->>224--------:,,,,::-:4::::237f3->:>2X..16999v98888iiqiqqiiqpkkjjpauaaaappssspappauaspppjjjpuq*8uu88uuuuuuuqq8uiiiu88g99713732244::::4::23:---;,,----::::::::44::::::::::::::::::::::,--,,179hlxxxzSzzFHzNHHLlhgf1---6fgfgch9ccxLKHLYEREYLzh99XX++XX6cLRRTR^^RR!RRTTTRRR^^^__^_))^^[`[[``[[)[RRRRRRRRRR____))]]]]]]]]", "]]]``]]]'''''''''''''']`']]]]]]```[[))))________^^^^^^^^RRRR^___________________^^^__^!R^^^^_____^RR^_^^!!}!!!^^^^!!!RRR)TTIBHYY!EETT!!YTTKEYERE)REWl;X1;;11;;..;;1171;.;;;;.X...1XXX11XX169hhhiyyy999661XXXXXXX6XX.11;X;-3,X-3,1X;6XXXXX9ffX7fglxKLHz9X6XlLcL)LWLlgNE^E!TYIWWYEKFxxKR_)RKWxXX6.<;;----->:::::::::::::::--------::::::::2444:::::,,:<<,11X.669zY)''`'`){]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]``````````]]```]]`][`[]`'')`]))(EEKHzglhccg7-77-<<<<<<<<--------::::::::::::::::::::::::::::::::::::::::::::::::>>>>>>>>>>>>>>>>4444444444444444:::::>>>>>>:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::<<:::>>>---;1666xWR_)RWWxxc9.XX.---;;,;;;;,,,,;;,;-;<,<;;--->322::-------::,,::-:332>>33-3--,;;;66699yhhhhiiiq88qiuuiuqauquapsjksssssspppaauqwwuiiqquaau8*8uiuuuuuuuu888iu888**871;--52424442223:---:,>:,,,,>;,3<<<<<<<<,:::::43::::::::::::::::,---,;;;799999999hzHHHHLg1X.->33...X1gSWKWWYE}__EEER__(RRHxxllxzHY}_}RRYRRRRRRRRRRRRRR}}}___^^_))[`[__)[][[)___________)````]]]]", "]]````]]]''''''{'''''']`']]]]``)``[)))))________^^^^}}RR^^^____^}}}}___}__}^____!!^^^!RERRRRR!^_^!RRRRR!RRRRRRR!TTRRRRTTTIR!PKYIEYEEIT!T!TY_RYShggf7-;,>-31--7ghvvhhhhhh6991.699991.X..111666666666611..1;111...1XX1.X;13-37333-1XXXXXX1X19;7-77yXXXXX6+++XX991.f>,;f99v69991;;171111777.17;17>,;;;111,-,>:::::::::::::::>>>>>>>::::::::2:::::::332:--<,7-X.6999Y`{`]']`]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]']``]''`['_`R_REEWWYE}RzhhxFccxSh7-X--:<<<<<<<<--------::::::::::::::::::::::::::::::::::::::::::::::::>>>>>>>>>>>>>>>>>>>2222224444444::::>>>>>>>>::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::<<:::>>>;16.X+cJKWKLLx99..XX.;<;,,373,----------::-<,,<-,,<>>>>>::-----:---:::::2773>>,;-;1;11..++++98yiiiiiiuuuuiuqqupkkkkkkkjsspaaauqwquuuaaw#=8quuuuqiuquiuuu*88uuiiu8*%%%%*8f971132322>>>>,,<<---:>225->--;1.....<<<----:::,::::::::::::::::3,33,;;;;-;;;..109cxzzzxh7.-----,,,1;;19lFLLHKYWEEEEWWWE((_)RER(EEYEEEEEEEEEYYYYYYYEEEEERRRREEYY)_RR_[[[))))))[[````````````````", "]]````]]`'{'']'{'''''']]']]]``))`[[)))__________^^}}RRRRRRRR}RREEEETRRRR}RRRR}}}!!^^^!RTRRTTTRR!TTTTTTTTTTTTTTTTTTT!!!!!!IPIJJPPPIYIPITTIET}Hc9X--::,32->>-;169giiqqiiiihhhqiclczxch91.1...-----;..-;;;>>,--1;.1XX11X-1,,--::::-6999hihlLHc6<<-71zKEEIEIJxcllchh353--XXX111117715-X--;1;1X;----5XXXXX;;1>>>:::::::::::::>>>>>>>>::::::::,,,:::::24332:--X<7,..17cR{')'{`]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]'']``]``)_)}_EYKRELzzNLFc9cly661.X.<,77:;;;;;;;;----;;;;:::::::::::::::::::::::::::::::::::::::::::22222>>>>>>>>>>>>>>>>>>>>>>>>22244444::<:<;;;;;;<:<::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::<::::>>>1;1glzzzxLLxh91..;;,,,,,-----:,,773,---->>>>,<-------->2::---:,,::---:::>33;-;;.1.611616 +%888uuuuuuuuuuappjkBBnkkjpuquqquaaaapjpajkj8uapaiqqqiiuuuuuuiiiut88&8&%%%%%&99+X.XX;;;;;..XXX..-->223223,-..++++......;;;;;;:::::::::::::::::333:->3,--,117f966999991X-,3377-----,1;19cxFHHHFFLWYWLFLKYEYE(((EYYYWWWYWWWWWKKKWWWWYYEEEERRRRRRTEEER^____))[[[``]''''{''']]```", "]]````]]]''''''']''''']]']]]]``)`[[))______^^RR^}RRRRRRRTEEEEEYYYYYYEEEYETTEEETRRRRRRRRTRRRRRRRR!!!!!!!^TTTTTTTTTTTTTT!!TET!TIJBJJJJHJIIEREK9X177:-4:-:77--,119hauuuuuaaauquajjhiihcchgf;17323447,>3334337::f7-7xFWWWFh>>324347fcclxzzNBcJLL9f,fK}RR]!PY![^RRWc7,-.19zLWWYYYLl9X79hxxxlh99FYLxlghhg91..->>>:::44::::::>>>>>>>>-;<<<,,,,,,,,,,,<<442333::7,.X-67f6lR```'']]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]']````)RRELWKWHzlchhhcxxhlh9hh.1.17;X-3-;;;;;;;;--;;>>>>:::::::::::::::::::::::::::::::::::::::::::22222>>>>>>>>>>>>>>>>>>>>>>>>>>222444<<:;;;;;;;;;;:<<::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::<::::>>>.7hcchkNHxh9111;;,,>--:333,::::,-----:,322>>-;<,<,1,-->3::--:,,,3,,:--::-;;.;77696999998hiiiiiuq*wuuaaaauuapaiaaiiuquuipiiuuuuuukkjphkkhiapiiiapiiiuuuuu888&&%%%yiiiyy8888%+996999999+++.+6<;,34442331798899%+++111111;.>>>>>>>>>>>>>>>>:232::>,3,,>-->398yyhy96..,,--4:33,-,7,-;XX19gghgghg91;11117glSSSSFLLLLLSzxxzxxxllllxxxxFLWWYER(}^^RET})____))))))``]'''''''']``", "']]``]]'']''''']]]''''']]]]]']```[)))____^^RRRRRRRRRRRRREYYYYEYYEEYEEEYYIYEYKKYTYYYYEETEETTR!!RRTTTRR!!!!!!RTTTTETTTIIETT!!!TPJIEIIIIYTIIEREh71;::::434--77-;9gguuuuuuuuuuuppaaappaiy8vggccf4444:--54444-347llggzzFHFxg,23--4:3gyhxBkckhhyyh969gERRIIPBJPJLLl1X3..hKYRPYIPBp%%iclzKYHNHBccxxK}``)``ESg7;;>>:::44::::::>>22>>>>;;;;;<<<<<<<;;;;;;34455:::--<,,.X69+cR{]`]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]`)`)_EKLhxcHlllchhhyggh9.616X;6X.33:::;;;;;;;;;;;>>>>,:::::::::::::::::::::::::::::::::::::::::::22222>>>>>>>>>>>>>>>>;;;>>>>>>>>22224<<<;;;;;;;;;;<<<:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::>>>f9glNzkhl9.1.X.;1>->3345:::::::::,,,:---22>--;17fff7,-:,::--:,33773,--::;1;;7ghhhyhhhhhhiiiiiaauuaaaauuuituiuiiiiuiiiuiiqiiiiiiiqiiiiiiiiaaiiiiqiiiuq8*=&%%%&88y8iiiiiiiai*&yy8yhhhhiytty961->24342>-X6gyy8889996666611.>>>>>>>>>>>>>>>>::2233,>-33>>377+999999g61;-:334::,,--;1;;1;XXX..XXX.11;..;1..11X.;17ff7;;;1111;---;;;;..69fgghcxxxNJYTRETRR^___))````]''''''']]", "']]''`]{'''''']]'{{''''`{[{{`''`[``)___R!!!RRR!!!TIYTTTT!TTTTTTTETEETEYETYIIYEYITYYETT!ETTTTTTT!TTTTTTTTTTTTTTTT!TYITTTIIYT!!!TTITTEER}R(WcSx57>33::::3,1.XX9iiiuaaauuiiaq8hhhhv88*wwuuaujjw%8ii88900hchi% %xJxzjjjkh.;-3-.9xKcO69ijjdddds8ily+yzkxzLxhzLLlf--,-X9}TJUPCPz0Xglhchjknbkkkkky+9yhBxxzzLWx7--37-:34-,-34:744:::,,;;::::::::<<<:<<<<::::::::::::::::699iH^'{][[]`[]'']`]'']`]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]''']]```]]]`[)}}YNzFFFclg9cxlh88gf-,-:::22::::-----:::::::::::::,,,::--:::,,::::::::::::::::::::::::::::::::::::::::::::::::::::>>>:::::::::::::----<<<<<<<:::::,,,<<<<<-,<-,,<--,,--<<-<----...222222222>>>>>>>--<<::4444::<<--:::::<<<<<<<<<<<::,<;69yxzBHBzc93444444::::<<---...;;;>>:4433444455;199888899++.5>77796X1;;;11.X996XX6yhiiiqqaaqiiaaiuuuauuuuuuuuuuuuuuuuuuuuuuuiiuuuuuuiiiiiiiuuuuiiuuuuuut**88wuuuuuw**wuuuuuuqqwqquqqqquuuuuuuuuuu8*====**===88**===*8*==%%##3,:33:--2::::4::444444444442---.X+6.X..X........;;;;;,,>-4334444................,,:-----:----...;;;;;;;;-------------,fczFWR}}}_[)`]```)])`'`]][", "`'']`]]]''''''''{{''']]]{`[[`]``)_)[)}})}}!!RRTTIIIITTTETTRRRRR}ETTTREIITEYYEEEEYIT!TYYYI!_!TTTY!!!!TTT!!!TTTTTTYTRTEYERYYYYETEEIHHIEWLKHS971X7>::::::::<;198iiqaauuaaaiiihh8%69uuuuuaaakjaupkkjchhiqhchxkh%izxxjjjkhX;223,7hxxhhhcjdddjpj89hh++ixBhhh1X777-X-33gL_^PZVVVk0XczlcjjjskbVkBxi%9% +%9ixKKSchg;X33-7,,3:-:-444::,;;;::::::::<<<::::<::::::::::::::::X9999izI^{{_'{[``]''']]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]```````)))[``[)(RRYHFFlc9yhhhhhlf,-,3::22::::-----:::::::::::::----::,,3,,:--:,::::::::::::::::::::::::::::::::::::::::::::::::>>>:::::::::::::---<<<<<<<::::::<<<<<<<<-,-----,-----<,,<<<<<---2222>>>>>>>>>>>>-<<<::4444::<<<-::::::<<<<<<<<<<:--..19hhkBBxi9%444444:::::<<<<<.;;;;<>>32:225:22>>798iqq88yyy99>;;..999XX.11166.+.XX68iiiapiuuquiiaiaaauuuuuuuuuuuuuuu8uuuuuuuuuuuuuuuuuuuuuuuuuuuut888*888888twwuuuuwwuuuuuuuuuuuuuuuuuuuuqqqq8uuuuuuuu8uiiuuiuuuq8**8u8888=%#,---::,,,,::::::::4444444423777698y9999999999766X.;;;;;;,,::::44----<<<<<<<<<<<<----:::3::------<<<<<<<<,<<;;---::::--<79fgghhccccglR[_]`']``)`{", ")]`__`{{]]'''''''``]]]]][{{'{[_`'''`)_}_RRRRTEEYIIKKE_RERRREEYYYRRYYEEERYYEEEYYEYIETYERR}EYETTRRTRRREYEEYYETRRRRRYKWYKLHcchcxzSSv1X9v917;7;->37-::44444:-,79hhhhauuuaaaajpi80 9hiiuuuuuupaasjjpphihhhhkkhch%%hkkkjphh122544:-779fghhjjkkjkchh966%xKxi9.6X;<;--::x^YTPVVZCVi %999qhkkkVkpjhiycchicxxLRRR})Wlg7---;.,-77-4:::--;;;::::::::::<<::::::::::::::::::::XX698hhhKER){])]`]'']]]']]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]````````''][_R})R_WWKLFhWFxc88icc,7.,3::22::::----::::::::::::::::::,,,,,,::-:::,,,,,,,,::::::::::::::::::::::::::::::::::::::::>>::::::::::::::<<<<:::::::::>>><<---<::-<:,:-<,>--::---<<<<<<<<>>>>>>>>>>>>>>>><<<<::::::::<<<<::::::::<<<<<<<<,<<169hchckxc8 X>,,,,:-->>>>>>>><:::::::3:::,,::--19hhiiiuqiii9+;...+9y9699998ihhy99++o %%8iiquauiiiaaaauuuqwwwwuuuuuuuuuuuuuuuuuuuuuuuuu88*8888t88*****===*8uuuuuuuuuaaaauwwuuuiuuuuuuuuuuqqq88tttttuuuiuuiiuuuquuuqquuiuquu8%01<;;;--<;;<;--;<----->>>>--17999yihi8yyyyyyy99999999999961..-<--:::44433:::::>>>--:::::::::::--->>>>>>>>222222223::33:----.XXX.;X1;XfL)'`'')[{{[", "]'{']]]`]]]'''''{{{{'][[)'`))[`_HxhhH_)ERREEEYYYYWWYR(EWWLHLWYWLKWYEREWWWYYEEYYIEYYYYEEKYYER(EYYER(((RRRYYWWWKLLWl7;11.XXXXX;;--;;..;;;;;-,,33::>2444444:>179vhhaaapppppku 9yhhiiiiiaauajkjuqaiuihjjjkjjji8ihjkjaihhf2334445---169hkxzxlxlv6998ipi80XX.;;,:::3K[IPZVZZZVa#8iiiikVCVVVkkxchhhihikxBIYKYLK(Yc97.1..XX-X3::<<-;;;::::::::::::::::::::::::::::::::6699hclchizEYE```]']]`]']]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]])_}_}WNllFzFWLLEYHzNzxi%f<<-,-33::::::::::::::::::::::::,,,:::::---,,,--:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::>>>>>::----:::-:3,---;-;,3:-:::::::::::::::::::::::::<<::::::::::::<<::::::::::::::::;1699yhckhiipq% ;..;;<<;<<>>>>>>4444444::::<<-....69iiiuauuuu8% 16998yy88yiiyiiphhiy89%% %888iaiuuiaauuuuuqqquuuuuuuuuuuuuuuuuu8888888888***8888*==%===88uuiaaiaaaaaappauu***uuaiuuq88*uuuqq8888888tttttttt88**888uuuipiuqui8=#;;;11...6611.........;;;1;XX+998tuit88ty88888899yyyyy89966.....X4444444422222222,<:::::44444::::2222222244442222,:-:33333>>2>>>53-23X1S`'){{_)'^", "RKzHY^[']]]]]'''`{{'`]]`[[_)^[Rh..XX1xE((RREEEEEEERRWlg91.X;7971XX9hxHHKKKKKWWYYKWWKKWx6cLYLHWRE(EWFxcgfff773>---X-,73-:333332::-37--:3,7-,:---7>>>244444>>-;;11iihhhiiiy+XX669998888qqqquaaaaaajjjpjpppkpapaupjsspihcg7>>2377343<..9hclh99f99y9apiqih891.--::37xJIUUVVVVPCjq==ujjkkkkVPVBzxxxxNzBkhkkkxxzccFHc9cxllg77,--<<-;;<>>::::::::::::::::::::::::::::::X.9h999+++hchF}_''```]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]'']]]]]][`'[RWLHxhhlHHllFlhhcxxccc<,--3::::::::::::::::::::::::::-------,,:::::---------::::::::::::::::::::::::::::::::::::::::::::::::::::::::44444::::>>>>>>>;;;;;;;;,--<-;;-;--;,,,3:::44444<<<<<<<<<<<<<<<<:::::::<<:::::::::::::::::::::::..69998iiiiu888%..XX.<<<;<>>22224444444::,<-...699yiiaaaauuuu*o 99iittiiiiiiuttu888yiiiut88=%8iuuuuuiuu8uuuuuuuu8uuuuuuu88888888***888**888888**=====*8qaphhpppaaaiuuuuuuu8***quiiuu88**88888888**8tuuuu**88uiiaaaiiuiappiuiii88.XX..X.199966+..++++++66+++++%&8ee*******8888888u88888&%%%++++XX>>>>>>>555555555;;--->23444444444444444444444444,,:--:222222322443427-3S{)_{{{[]", "88888iJ'']]]]]''{{'`[`]][)['^_E9X,71X;cLWWLLLLKWLWWWl1X;;;11....66669hhlHzzxzHLKLKKLKWx1X691.fclgf73,>--::::54333344:-:7:4444437344333,---,<<7<<;;>>>22222>>---;69999616..;1;-279998iiiaapppsjkjpjjppsppaaquaaauwupq8i89X.---52333-.;7997;;;1hlg8aiiihcc11;>:44499ciuukkkbkpau**hquauujkxkhhiiiitiajxkjkhcxlxNNzHLLWHcg;.<<<-..;>>>:::::::::::::::::::::::::::::7;XXXX1X9999glK]']```]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]````_`]_EYYYxlERFFc919hchhxxWW7<::7-::::::::::::::--::::::::---:,,,,77:---:,--------::::::::::::::::::::::::::::::::::::::::::::::::::>>222244444:>>>>>>>;;;...;;1117111X171611..-;:>>:44444<<<<<<<<<<<:::::44:::<<<<<<:::44::::::::::::::::;..11++%8ihhihi8966...;.;>>>22244444444:-<-..6ygyyiiuuaauuuuu8&%98yueeuuaiiiuuue8888ttttiu8#o*ut888quuuquuuuuuuu8888888*==========*****===****====*88uiaapppaiiiuuuuuq88888888888888************=**8888*=*88uippppaiuuiaiuqiiiuu961XXX+689999988&%%%%%%%+%88&&**ee*************8u******&***&%%++.;;111111111111161;;;>>:244444442222222222222222-,,:-:::24444444434523>1R{'}'Tck", "^TT^]]]]{']]]]'{{`)'{][`[[_)R_`H---,,--,711111111777;XX6X166616969998999hhhhhhclNzzxzLHl6XX.1XXX1<---<,>33222444:::4344:333444444--43:--,7<...<..;113,>>>223,,11;;11;-X-->22554fghhhhhjjjkkkkkkkupaupppsajaaauuuuwuw*u*8&996X.;;-37,;;;-;;1;Xhxlji*iiii9X.;--444X6ckjjpajjjjiwupiqipaau8q888888*aiiphjkkxhkxczJHKBLWLHLxcchg96<;>>>>>:::::::::::::::::::::::::::X<111.6966+6969F````]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]`[[[[][__]`Wl9hHKFHx9.1X98hxcFEg.3,:::::::::::::::---::::::::::,,,,3373---:::--------:::::::::::::::::::::::::::::::::::::::::::::::>>>>>>>>2::2>>>>>;;;;;;;.111666996699.9g99996661.;>>22444<<<<<:::::::::::444::<<--<<::444>>>>2222>>>>><<<,;-..XXX998hhh89f9971.--;>>>>>22444444::--..69ghyyuutwuuwuuuu88*+%8teee***88****888tuttu8&%#o%tt88888888888888888888****===%%%%%===***=====*88**qqquuiiiuuuuuuuquuuq8888*88q88******==**************===&*****8ttuuuu88uu888quuuqy899%+%988*8tyuy*&&&&&&&&*******e******************===**t888****%%%%%%99888ii888999661;->2244444>>>>>>>>2222>>>>-:,,>,2>3222222375475-;17R{]]RKY", "{{{{{{']{{']]''{LxS({{{{'{)''_Rx-:::-,,-<;;;;;;;.XXX.16.9999999%99%%89%8%%99%%98y89%%yhhy96661XXXX.....---->,>>>:33::334::443344:::--<,1.1.16.6.X166761;;;----;-2222>23374444444.11+%%%%=%0 0#=*uaaupaupuswwaujVkwwwuu*teui8&6+.,7f7:>>21;11X9hcppuiiihi8v91,344.619hchhiiihhpuuhipiuiauiihi888*8ihiikzkkkcBKBhhi8LINHKW}RWFc96.,,,>>>::::::::::::::::::::::::::<7-.699hhhllhgy9)`]'']'']]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]`[[[)_[_YKKzh9Hzch99v16X1+69+gFhX7:-3:::::::::::::---::::::::------:::---,,--::::::::::::::::::::::::::::::::::::::::::::::::::::::>>>>>>>>>>>>>>;;;;......XX++%99988+%y8+9h99yhhgh96;;;>>>>>::::::::::::::::44:::<----<:::44>>>>>222>>>><;;;::-<,1;..XX11.167777,;,7;;;;;;;;>>>>>><<,<..6999y888**wuaauuu888+o%**eu***88**ewuuuuu**88&**#o&tuut88*88888*****88888***8*******===***==**88uuuuiiiiuq88q8*quiiuuuu888uu**888**=****&&*********&=====**8***&=*8*8888**==**88ut88y8yiyyiiit*****&********8*===**w**e**=**********=*ww**wuuut88888*********tuuuuw*88999961;;>,::::;;;;;;;;;;;;;;;-<,>--,;--;;,;;;;-7;X11X1X9H)]]{'", "```]'{{{'{'{[]{zX1X1lLHcxxxxxc9X4:::::-:--;<;;;;++699998888**888888*&********&&&==88uu888y88999996+++669661....;1,<--;<,,3,<:>>---<<......++++++ +99991...6776.>33>-;-->>224444X199hhhhajkjiq8quuauuuuuaaauwwww*wuuuweeeettytyyg--<-73-;16XX8hhuuuuqqii8891;>>-<-.X.X+9g99vh8&tqiq8qui8888888ip++98iiiii8hH[{'RIxhiclHKNLLzcxxg7,-,,-;3-:::-:33::::::::::::::::,<-<9ghcg969lcchz{_`{``']]]]]]]]]]]]]]]]]]]]]''']]]]]]]]]'']``]'[`]][[[``[[)RLxcxhcFHW}}(RYLzlhh,<--:,::::::::--::::::::::::::::::::::::---:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::>>>>->,,,>;;1;.1611+++++%9%o%*yi8%ihhit8&%&&&&96++..111<;;<<<:::,,-:::22::332:----<--:::43;;>>>2>>3>--;<<<4444:>>;,;;;;--.5>>>;37fff96;.;;.....;;;;11.X.6f88888uuuuuu888*%%9y8****=8888qw***wuuu8*8*%#%&8t888*88**8*%=*8uuuuuuuuu8uuu88888**8888uuuiiaaphjjpiuqq88*8quuuuuuuuuuuuuu888**==&&&&&&**&******&====********====***=%%=8888t888u8888uit8=**eeeee***ttt8888tuuuuuwwee****w******=====*wuuuuuuuuuute*****=*ewww***88*9899...1;;-;-....XX...11.X.6971;-;11161.XXXXXXXX.XXXXXvzY_)_)", "[[]'''''{{]{{'_l117;X-;---XX-;--4:::33,,,111...1=88888888*****eett8888*************quuuuquuq8888iiy888yyhhy996++.......;X...;11;166666666%%%%+ %%%&8899+XX1999..169999911..----X6vcxxcppjjhaiiiaaaauuuuww******888q8******tttyyg.<7--;1fhhy+o8tiiippi88996611;;:<..<.XX-;;19998888==%% %01999%o96698iiii88ilHYTT^RxhhkhHHHHzhyy7,-;,,;-,,,333:-::::::::::::::::-::7fhlzWHh9+.669E{'``'`]]]]]]]]]]]]]]]]]]]]'''']]]]]]]]]]]]```][[[[]]]]```]`)_}RE){])_ER((RLlg9,<--:,::::::::--::::::::::::::::::::::::---:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::<<,,;;11;;XX..X+6++%%&&&*88&&&8t*&&8u8***&&%%%%+++++6666.X--------,,,,>>::::::-<<<<--:,::3;;;;>>>>--;;;..X44444233--;<<<<-22255;,777766999+++++1...;...19g98888888888*88%0X68t8**8uiq888uu**uuuut888*&&&&&**==****&*8tuu88***888uu888***88***888uuuiiiaappaiuq88**88qquuuuuuuuuuuu8888****&&&&&*******************==========%%%==*88888*88888888*=***********8tuuuuuuuuuuuuuuuuuuu*******=====**quuuuuuuuqe*****************==88%+XXXXX..+++++XXXXXXX+6999gf1.199ghyy8888t88889999xJER__^^", "___^^_)`]]_]'{{_fX;7>>-23333>>,344::::--..;.XX1688q8**wwwwwwwwwwttee****************wwuuqq8888qu*888uuuu8888888899999+XXX.+6699966666%%%%%%%%%%%*&&&888899999996%98yihhhy89%+++XXXX%8ihhiiiuiii8uuuuuuuipaiq8***999988iit88yy9999.77<<79hhhhu8t88##8i8==q898v977-,1<..-,-3,-6vhiiiiii899+XX66++%hg99989%88iy88hh8hkiihkccJIJKNhhf71-----;--:33,::::::::::::::::::3:<167gcc96X+9yhL{)){{)]]]]]]]]]]]]]]]]]]]]'''']]]]]]]]]]``````'[__``[_[```[```{'`)_(EWWFc91.XX,<--:,::::::::--::::::::::::::::::::::::---::::::::::::::::::::::::::::::::::::::::::::::::::::::::::<;;;;;;1;..++++++%%988ttttte*&&&*&$#&&$$$$#O###%%%&%&9996++111111;;;;;;;,,,--;;<<<<<;;<<;-<.;;;;,,,-,79976.444:::::--:<<---2222>;;;..1+99yyttt8999611.XX.16%9888888****==% X69y8&&**8888uu8**8ttt888ttt8*&%==&%&&**&&****&%=====88u888**888****88uuuuuuuuiiuu88888**888qqq888uuuuuu8888*********&&&********8****&&&&&&&&&&&%###%&&&*88**88*8888****e**=======**88uuuuuuuuqwuuuuuuuu8******======***q88888**====******==***======*%+%%%%998yyyyyy8888999889%61116998iitttttuuutuiiiihkxxBKT_", "^^RRR^_)_`_`'`{{(h;>72-2-2332:::344::--,;1111699wwwwwwwu*wwwwwww********=************wwww8******==**wuuq======**888888%%%%998889%%%%%% %%%%%===&&&&****88y88998tuuuuappppauut8%++ %%%% &yii88uuyyiihi88%%%%116999888899999969hg9ggghttuahi8% %888qq888896+7gg96<-<:3--6vhiiihhhiih91.1669hg969yyy999889999i88qiqqiiJINzzc9776<..<,;---::,3:::::::::::::::::3:-;.X1XXXXXX698z]{'``']]]]]]]]]]]]]]]]]]]''''']]]]]]]]]``````)R_`]`[`'}_))`'])__RR))WLhf;X.<1<<<<<:,::::::::::::::::::::::::::::::::::---::::::::::::::::::::::::::::::::::::::::::::::::::::::::::<<;;;;1111.+++%+%&%8tttt***$&&&*&&$&&$#O#O OO###%&*&&%%%%%%9999996611;;;;;;.;;<<<;;,,;;;-..X...;;<,,7ggg96+-----<<,7761<<<.;;;;;;.XXXX +8yyttttyy8999666.XX o%988888888*=% XX+%% o%%%98888*********8ttt8&&&&&%%%&*utt88**8===%=*888888888u8888888u8uu88888q888888*==******8888888888888888****====********8***&&&&&&&&&&&%####%&&&&*&%8ii888tt**tu***=========***88888quuq888888**888888**======***==%%%%%&&%%%%%%*=%%========$=%%&%%&8tyytuiiiuuiuttuiit896XXX+98888eewwwe**euuiiiii8ihlz", "ihxJETIK}^R_`__){Yf-3>27222243334:33,,7fgg998888uuuuuuuuwwwuwwww**uuuutt**tuuuuuuuuuwwwww8******==***===q8*******8888888*88888% o#%%%%##===%%%%%##%&%%%%=%%=8tttaaueeuaapauuuau8iihhhhhh88%+%988888899999%%%%%%%9996616066666966.696.6668tt*&88%++++%8qqqqq8889+8hhhhg6X<:-.9hiiiiihiiyh9..7ffgg97<69yy8999999yy8yiq8uiphjzzkccy11..;;;;<<<,<--,:::::::::::::::::4::1;X.1.+++X99zR`{'`)']]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]`))``)){_YWE}))R((R((RWWWLSSl7;XX<,,<<<<<<<,,::::::::::::::::::::::::::::::::::---:::::::::::::::::::::::::::::::::::::::::::::::::::::333,,,,<11166+++ %89*8&**88**=$#$&***&&#######O####OooOooooo@%%999999999966.XXX...;;;::>>,<<166.......;16996+XX...<6669996666666666699%++oo@&88***tt8888888889% o%*8*888**88%1XX+%&&889% %88=***==************&&%%&&ttuy88%%========888*8888888888888888*******=**==========***8888888888888****====***********&&&&&&&&&&&%%##%&&&&*&&%#*iit**tt**tu***=====**====**8qq8qiii888888*=*********=&&&&&&=%%%%%%%999&%%%%%%%%%%%*====%=%%%%%&*88*****888uuuuuiiuuhi8*%=88**wuuuuwuuewutuuihpii888", "at88hxJPITR^))[]({S61;>-324::::::433;;79hhyiiiy88888888***uu**tu88uuuuuu88888888quuuq8**********========*====**8t8****8t*8***=# o#%%%====%%%%%%%%########%=8tuuaauuaaapau**uuq%&*88iphhi8% +++++++++++X++9999999999%%+X.......++6611+98tu*#&90X++%&8uwwuuquai88uuihh967779vhiiiiiii8996<<7fffggf779yyyyyiyy99998888quipikzxBJJlg6...XX..-,,--,:::::::::::::::::2:;,.XX1+99y9hxR{'`){``]]]]]]]]]]]]]]]]]]]]]]]`]]]]]]]]```))))))RWLLWERREWLFzlh696X.XX-33,------<<<,:::22::::::::::::::::::::::::::::::---:::::::::::::::::::::::::::::::::::::::::::::::::::::333,,,<<111+++++%%8iyt88%&&=*=$#%%%%%%%&#####%%%#####ooooo####OO%&&&&*898899%+++X...-;>2:>,<169996661.....XXXX +66999999%%%%&98888888ytt%&&&&**&==***8888888yutt9%++&8888**=*88896X+8yiiy890 %=8=*******8*******88*&%#%%&&%%%+++========****8888********8888*****======%====********888888888888******==********&&&&&&&&&&&&&%%##%=*&&&*&&%#&tu8********==***=====******uuu88uuu88888*&&&=======&&&&&&&&&%%%%%%%%&&&%%%%o%%%#%%*==*====%===******8***88uuuuu88888uiiu8**=*quuuuwauuuuuuaapauiiui", "ut**88**kBITT^^^E_F1X<73--:4333:34::-..166%988888888888*=*88888tqq888888*******=*****==*&%$$&&&&===*****===%%###OOO##=********# o##%%%%%%%%%&%%#####00===##=88quuuaaappi88qqq888888*=#%o XXX.XXXX.1661..66966$&&*88889996++++6.6666+8t*&*tu8+6998uiauwwwwuuiuapauu*+69f998qquiiiy89966777777ff77yghhhtyiy88yhh89iipipajkkxBKIRLlhg9676..;,<<,::::::::::::::::-::,111669999+98hK'')``]]]]]]]]]]]]]]]]]]]``````]]]]]]]]````))))R`{Rx99hgf971;XXX;1<<<,73:--,33:--<,,:::22::::::::::::::::::::::::::::::---:::::::::::::::::::::::::::::::::::::::::::::::::::::44:::<;;...+++%%y8iiy88*%%#%%%%#%%oooo#%%%%%#o#%%%%%%%%%#%%%%########$&&&****&&&+++.;>2222>;16999996+1...X..++&98888*&%%##%&&***&&&&&&&&&*e****&******8888******88&98888&&&&*8*=6XX %88*&889%%%&&8888**8***********&#o#%&%oo%&88*=======**88888****88*****8******====**************8888888888888****************&&&&&&&&&&&&%%%%%%&&&&&&*%#%*888**************=====******uuq*888**8**==&%&&&&&&=&&&&&**&&&&&&%%%%%&&%%%%##%%%&&*****888=========********=***88uu******uuuuiaaaiuquuiiipjzxjiq88u", "eeettttt*8iixT^^RRWh.;.,333::-::3::>,;.XXX o%=8u8888yy88&888888uuuq88888========%==&%%&&&%%#&&&&%%%%%%##%%==**==$$#####$$$$$==# #####o###%%%%%%%%%%%%%0 #00o####=8888qqq8qqq8qq8t*==*888*89969669999999996116999rrr****8tyy999yy9yhggg9yt$$euy90y99yi8*wwwwuuquuauwua8++6yv98quuqiiiii99777777<<777gcchy&eyiiyyyii98=i88qpjjkxnIEWWYLlhcg9<;<<-<:::::::::::::::::33;;X.699+9%99%9h_`)]`]]]]]]]]]]]]]]]]]````````]]]]]]]]````))))_Kc961XX.XX;;-;1<..-,,--::33::::--<,,:::22::::::::::::::::::::::::::::::---:::::::::::::::::::::::::::::::::::::::::::::::::::::::::-;;...+++%88898i8*8&%%###%##%%%%%%++++%%+++%%%%%%%%o%#oOO##&$####$&&&&**8***99661>2442>..69996++..X.1669999&&&&*===#==*****&$$&*&&&&&***&***=====******tue**988888&&**&&**=#.XX %8t*888% #%&8888**8==******&**&#oo# o%8yyy888*=====*8888*==*888888==*******&%%&*********88*8888888888888888888888***********&&&&&&&&%%%%%%%%%%&*&&&%%&8888****************===*****=uau**8********=%&===$==*&&&*********&&%$&&&&&&&$$#$=***8888888*88**==****888*******88wq*uppauuuuuiiiqqqquiiiajkjkjaiuuu", "uwwwwwwuww**wjVU)(EWl7X1;52332>54444444442>-.19g9998888*%%%%9999*&&**8**8&#####o#oo#%&&&&%%###%%ooooo@%%%%%%#@@@###%%%%##o#&88&o#####%%%%##%%&&%###%%%##oo#%%%%%##=*899988888****888888888t88888888888888888%o%88*====**88********we***uuuuuuu8*8qqqqqqqqqqquq88vvqqiit8&*t88888**8uiyyy9777773,6++9yiy999977999**tuut88yyyiiphp^^!^`!Hzch699X1.---,,--,,,,,,,,,444,;.+9yii88888=x^`]{['''']]]]]''''']]]'][_)]][][[[[`]'])_]`_[)WfX---,::::::------<<<<<,,<;;;;.:::444443-:3-7::22325223>,,,<<-.,,,,,,,,::::::::::::::::::::::::2222222222222222::::::>>>>>>>>>>32>,1.XX o%#8pi*ihhy&&&%########%%%#oOOOOOO@@@@@##%%%%%%%+oo++++%%#######$$$$&&&$$&&611;;5;11699%+ &&**&$$$&$$$$$$$&&&&&&&&&&&$$$&&&*******$&***&**88t88888*=&=**8t*8888% %*88*****=##=*$$$$$&&&&***&&&&&&&&%%#oo%&**&&&&&&&&&&&&&&&***&&&*********&&&&&*&&&&&&&*******&***************8*****************&&&&&&&%&&&&%##%&**&&&&=%%%=*88888*****=******=*===***=8quuipi*88=======**==***====*********&&&&&&&&&***=====****=**88*88***=**888888**888**8ww*wuuaauuuaauuuwwuuuiihhhiaauuuua", "w**uuuuuuuuaaa*=hhczzc9.1;;--;,,-::::::2>>;;..1+%%%%%%&&&&&%&&%%&&&&%%%%##o#%%%####%&&&&%%%%%%%%ooo@@oooooooo@%%%%%%%###ooo%*8%o%%%%####%%##%%%#%%####%%#%%%%%%%%==89996+++%%===88888888**888888888888888888=%%888*==***8******8*****tuuuuuuu88*8qqqqqqqiiiuuuqqvq888888i8*yi888ut88999f777,373,666666+..<,<-<9fauupa8&8yyyyyyyyihzI)[Izxxh9v9v9f7--:--,,,,,,,,,44:,;X+988*&*88=hxR{`]']''']]]]]''''']]]`))``))]^[]]`[_}}[__))RLf--7:-,-:::::-----<<<:<<-;;;;...--,,:-43447:-,,<>5-->3>->;---<,,,,,,,,,,::::::::::::::::::::::::2222222222222222::::::>>>>>>>>>>2>>,;.++y8&%8ipi8iy&%%%o########%%%oooOO#@O@@@oo##%%%%#++o o+o+++%%#$$####$&&&&&&%+1;;1;;.1166%%+o oo%&&&&$$$$$##$$$$$$&&&&&&&&$$$$&&$&&*&&&&t*&&&*tttt8888**&%%&%%%%&&&%# %=8888*8***$#=***&$##OO$&&&$#$&%%%%%#oo%%%%#oo#&&&&&**&&&&&&&**&&**********&&&&**********************88*****888***************&&&&&&&&&&&**&&%#%&&&&&&*==%%=888*****===******==8****8**=88qippi88*==***=**====%========********&&&&&&=**************8******====&&****8*8888wqqqwquuuuuuaaauuuuuwuuuiiiiiaauwwuu", "iiiiiuuipaappa* =888yii996..;11,,,;--;1;1166+XX oo%%%%&&&*88***&###%o##%%%##%%%&&&%%########oo@%%#oooooooo%%%%&%%#o####%88&%%%%%%%%%%%%%%%%#%%####%%%%%%%%%%%%%%++..1++6998*%%&&&&**&***&%%%8888888y88888%%888888*88===**********tt8uuu88888qqqq8qqquuuqqqq8qq888888i8%999889988961X1,<<<<,,3371<..--<3377ghutupi% o888888889998lKYHlhxKFzLzgf:--:-:,,,,,,,,4::,;..6%9888888%0x[`){'''']]]]]'''']]]]`[))`'`)])RYE}RWERE_)Wh1--,7--3,::::::--<<<<::<<,,1<;.16;.X.,7,->>>>>>>2>;.X+9hciyiit88&&%%#%#o########+%%+oooo##oOoooo###oooooo ++++o+++%%%%%%&&&%%+1..;111XX ++%%%%%%%%%%&$$#######$$$####$$$$$####$$$&$&&&$$$$$$&*ttt***&%%%%%###%%#####o o%=*88888888**=%=*8**&&$###$$$#O#$%%%%##ooooooo%&&&&&&&&&&*&&&&&&*&&&*******************&&********8****888888888888*******&&&&&&&&&&&&&&&&&&***&%%%%&&&&***=%%=88q888****==*******8*******8888qiaa88******=****88***====&&==******&***&&==******==*******=******===*******8888quuuuuuwquuuuuuuwwwuuuaiqquuuuaaaaap", "89&88yiiiiiiiiii=eeeeuaihiy961<;;;....1+69998&+ oo%&&&&&****8***&%%%&#%%%%###&&&%%#o ######oooo#%%%##%#ooooo#%&*&%##%###%**&%%%%%%%%%%%%%%#%%#%%%%%%%%%%%%%#%o++++......++++ o#%%%%%&&&%%%%%88888888888888=8888888**===******===****888888888qq888qqqqqq8888888888889890X69999961;;-;;<<--<<7773<<<73,37gggyuipjh8%%9999999%++99hlxhzlKRHlc9f7--,,--:::::::::::,;..+9cITIBxkxhx`{_'`''']]]]]''']]``[`[[[```[R']LhhSE(Wcgh9;1,:,,--3-::::::::<<::::><,;-..199hy6X.1.X..6.96X+o%96XX.1;;;,33::::::::::::::::::--::::::::::::::2222222222222222:::::::::>>>>>>>,;;..+9iy88iit&&%#o########ooo#%66%++++%@ooooooooooooo o .XXXXX..66666666++11..1166++ o@++%%%%%%##%############OOO######################O#*tut&####ooooo##%===&&#%%o o%8********8***=%=*&&&&&&&&##$$###$######oooooo%&8t&%%%&&&&*&&&&&&&&&&*****&*******&&****&&***************888**8888888*****&&&&&&&&&&&&&&&&&&&&&&%##%%&&&**&%%%=*88tt888***=***8888*******88uq88qii888*****===**88****===&&%&&&&&&&&****&=*******===******=********888888**8888qquuuuu8wuuuuuw***uuaauuuuuuuuuaaaph", "9+X+9hhhhhhiiiuyrreuuuuiiiy96<<<.;199yyyttt888*=&&&*888ttte*&$##&&%%%%%%%%&&%%&*8*&%o #%%%%%%%%%####%%%#oooooo&*88&%%%%%%%%%%%%%%%%##o#####o##%%%%%%%%%%%%%%%%+++66611.....XX %%%%%%%%%%%%%%%&======*888888888*88888**8**8*****====*==*88**8888qq88qqqqqqq8888***888899996699099711;11;<,<--<<7743,,77f77gghyyipjjhi88888899%%6XX1X9hhhHJxxxy9,--:,,--::::::::::,,<;;19cJYIJITT__{'['`''']]]]]]]]```[[)_`{'__`'[Yzllxxgh7X;;-.,--,,,:-::::::::::::::>>,;;17fggchy+ 69+yh89i98**8ty8+X..-:3444::::::::::::::::---:::::::::::::2222222222222222::::::::::>>>>>>...699+o8&&&*&&%# ##oO#Ooooo+++666+++++ooooo###oooooo oo o+oo6111;;;;;;;;;....11111++++%%ooO#++++o%%%o#############OOOOOOO#########ooOOo###%%*8**&%##oo##%%%%%#%=*=*****&%#%&=======****==%%=&&&&&%%%###%##%%##%%%%##oooo#%%&&%%%&&&%&&&&&&&&&&&&****&*******&******&***********************8888***********&&&&&&&&&&&&&&&&&%o#%&**&&%%%%%*888888********88******==***8888qui8888****8**************=&=&&&%&&&&*******88888**=*****==***888**8wwwq888**888888uuuuuuuuuuutuuuaau*8quuuwwuuuuii", "f7.199gv998hhhh8wrr*=$&y9966--:3;19yhhii888888qi8888888t*e**$#OO%###%&&%***&%%&*&&%%ooo#oo#%%%%%%%%%###%oooooooo&*888&&&*&&%%%%%%%%&&***&&&%%%%%%%####%%%%%%%%%%++++....6166666+#%%%%%%%%%%%%%%%%==%%%%=%=*88888*88888**88*************=**=**8888qqqqqqqqqqqqqqq*=%%9899911hch8%11771;;;;,,,<-<<44,17999gggghiidappi88qiiqqq88991XX.XX9v9ll999XX------:,::::::::<<,,<;;119cxli8&x!{`)'{`''']]]]]]]````[[_``)`'}Lxcg79f91.7-.--<3:--,,--,--::::::::::::>>,,179999&8*%o%88888iii&8****tyy996-::444::::::::-----------:::,,::::::::2222222222222222:::::::::::>><<<.XX+989&tt*%ooo #o##OOO#OOo++++.....XX o+oo#####oooooooooooo+++o6661;>>2>>>;;;..;1166+++ooo##OOO%%####%%oo##oo####OOOOOOOOOOOO######ooooo#%&&**8**&$###% oo%%%%%=##%&&&*=***%##%========*=%%%%%=%%&&&%%#oO######%%%%%%###oo#%%%%&&&&&&&&&&&&&&%%%&&&&&********&&&*********&*********************888**********&&&%%%%&&&&&&&&**&&##%&&&&%%%%%%=*8888888*************==***=*88*8qu8888*******888ui**8888*****&&&&&&&*********88***==****===*****88***wuuuu**88*8****ttut8***ttttuuuw**8ueewwwuuiih", "f7--;;...XX69hhhputiiy+X.;---444-;166%*8***88t888999&&&*&&*&$OOO%%%%%%%%**&%#oo#%%%#oo#% ooo####%%%%%%%%#oooooo&&*8888*888*&&88&&&*8tiit8888888=====%%%%%%%%%%%+++XXX....1666++ o##%%%&&&%%%#%%====%%==%%===*888888888****===**888888888*==888888q8qqq8qqq88qqqq*=*99996X+czkii9961XX;1;;<<<<<<;1698iiy89yyt*upjjhu=%8iqqqqqqqqv91XXXX996hh+X+X:::---:,::::::::-<<<<>,,-;198ytt9x^][{'[''']]]]]'']]``[[)')EERFf;.XXX-;-;;-77--,3,:----3---:::::::::::>>---;11.X%===8t8=u8ipiu8u*e*=%*yh97,,4444::::::::-----------:::,,::::::::222222222222222244:::::::::;;;;;+X +98yi&&&%%%%+####O###OO+++.......XXX +%######oooooooooooo+++o+661;;>2222,;;..;116+++ooOOO###o########ooooooo##OOOOOOOOOOOOOO###ooOoo#%&*****8OO##%###Ooooo#%%=##$%#%&%&=&&%&&%========%%%%%%=#%&&&&%%oOO##%##%%%%%###oooo%&&&&&&&&&&&&&&&&&%%%%&&&&&&*&&&&&&&&&&&*****&&&&*&&=====******************&&&&&&&&&%%%%%%&&&%%&***&%%%%%&&%&&==&**8888888888888888*88***8888888***8*888*===**88tuaj8888888*****&&&&&&***&==&===**====**==*******888wwwuuuuu**88*******tt**=***tt***ut*8t**eeeuuiihv", "3::,,,,1;;;169vv8hhh991.,>543344:>,.XX9iyttty89%899%%%&*&**&#OOO#%%%#####ooooooooo##ooo#oooooooo o#%&&&&&&&%%#oo%&&88888***&*8tu888*88tuut8tuiut8tuiu8=#%%%%%%%%9%%+++66++666%+ ##%###%%%%%%%%%&%%%%%%%=%%%%%=88888888888**==****888888888==88=%=888888*888888qquuii8999.X9hkjpahhh991..;;;:::::168iiiiq88888*upkjpu% 0=qqqiiiiih86696X.X.96X.X.:::::,:-::::::::.<<-->223;.6998ti9L]]]]'''']]]]]''']]``[')RESg61-;,1,,,,-3::-:3--:--37:----:::::::::::>>:;,16679=88*8hkB%kIj8jzkkkjhhhhg7;-:3444::::::::-----------:::,,::::::::2222222222222222:::::::::<;;;;;; o%9*&&&t*&%#o +### O##OOo+++...;;<...++%%%%####ooooooooooooo+oo+++..<,33>,<;...X..++ooO#OOO%%%%OoooooooooooooooOOOOO###OOOOOOO##oOOOo##%&&&&%##&$##%%#ooooooo##$#$==%%&*==&%%&&#%===%%%=%#%%%%8%%&&%#OOoOO#%%%%%%%%##oooooo#%&&&&&&&&&%&%%%%%&&%%&&&&&&**&&&&&&$$$&&&***&&&&&&&&&&&&&&&********&&&&&&&&&&&&&&%%#%%%%%%%%##%&*&&*%##%%&&&*****88**********88tuuut8**8888t88****8**88*===888888up88tt88**=**&&&&&&&**&&&%&===****==**==******88ttuuuuuuuu***88*********&$*ettte**u8tt*====*euy996", "4444:::>>;;;;;;19fhhf71>>::44444444:<.++++%%++6696+X %98888&%oo#%%###oooooo##ooo%%o #%#o####oooo%% %%%t&%%%#%%%o##%%&&&&%&&*&&%%&&&**888tttuiit8*uiuuiu=%%%%#%%*%%%%%00%%%%%%%%% #%%%###%%%%%%%&&&%%%%%%%%%%%%=*===*****=*888***88====%%88888*=%=888*==****888888888hv6XX+8pptewiyyhhh96X;;-::::X%8qqqqq99999*8quu**qpjhpiiahiqihyyxLz9X1..;;;>,::::::::::::::::.--<:2222-;699++88hY]``]''']]]]]'''`))[`))}(Wc6.<>>>>>::::::::::::::::::::::::::::::22>>>>;;;;.. =8=ukxk8iuiJ[]{[][Yx961.;;:::44---------:,,---::::::::::::::::::::2222222222222:::3:--<<;....16 oo#&*&#%#oooo++####OOOoo++++1;;....1++++%%##o ooooooooooo+++++O@@+...;<<<666++6+++ooOO#OOo@%++Ooo#oo ooo%%%+ooooooooooooooo##oooooooo8&ooo###$$####%%#o o%%%####&==&#%%%%###=%###%==%%%%%%#o#%%%%###%%%%%%%%%####oooooooo#%&######%%%##@@#%%%%%%%&&&&&&&&%%%&&&&&&&**&&&&&&&&&&&&&&&&&&&&&&*&&&&&&&&&&%##%&&##%%&&&&***&&%##*&&%###%&&****&&=%%%===%****88ttt888888t888888888======*=**=*8t8uiiu888*==&&&***&&&&&&==&=**=%%==*****88****8888u*=****ttttt***tete***&**ettt**********e*#Oo+X.1", "44444422>>>>>;;;;17775>>>>,,:::,444:-...++.XXXXX11.XX+99&&%%%%%%####ooooo#o o#%# %&%&%o#####%# #oo #8&%%#oo#ooo##%%%%%%%%%%%%#####%%%%*88ttt88tt888888=%%%%%%%=%%%%%%%%#%###%%%%ooo#%%%%%%%%%%%%%%%%%%%%###%%====*8888===*88888==%%%%%%%%%%%%%%%======**=*88889999961XX+ypppdutiiiy89y671-,3431.X 0%%0X;;;;110%8utuappaiuiiiihuhihIKh9X;132553::::::::::::::::.--<:4447>-1669i90c)][{`''']]]]]``]]]]'')YEEl-X1>>>>>::::::::::::::::::::::::::::::::2>>>>;;;;;;09999889989izBzJ_Kc7111;;;;:::::--------:,,,:--::::::::::::::::::::2222222222222,--,,;;;....6666o#%%%&&%%#oooooo##oooooo++++.....;16++++%%%%##o ooooooooooooooooOOOo++..1..+++@O+++oOOOO#OOo%%6+OOOOoooooooo#oooooooooooooooooo#oooooooo*%oooo#o#########o oo@#@####%%%%%%%#%%%%####%%%%%%%%%%%%#####ooo###%%##@###oooooOOoo##%%##@@##%%%############%%%&&&%%%%%$$&&&&&&&&&$$$$&&&&&&&&&%&&&&&&**&&&&&&&&%####%&###%%%&&&***&&&&&&&%%%##%%&&&&&&*=&&==&%%%%&====**&&=*88888uu8888*=**=***88***88uuuu888*8**&&&&&&&**&&=&===**===*8888*88*****888u*=======*****tttttt****etttttt***tt****$$&&+XX;", "44444444222>>>>>-;>;;;171776<...4444:<<.66+66...XXXXX +%9%++%&%%#########%#oo%%o&%o #&&8&*8ippi888t% oo%##%%%%&oooo####%#oooooooooooooo#%*88888t*=*888u==%%===%%#%%=%#%##0#####%# #%%%%%%%%%%%%%%%%%%%%%####%====*88888888888%===%%%%%%%%%%%%%%====****89999911111;;.yy9&tkkkkio oyhlzxg7,::4<<..11.X-:444>>1 %888iiiiiuq888ihj88BKzlf7>:4344::::::::::::::::--<<::443>-..6hxxHI[')]'''']]]]]']`))__}_Y_`S7;7>>>>>:::::::::::::::::::::::::::::::::>>>>>;;;;;11699999hci661X.f7-->7,-;>>:::::--------,,,:--:,:::::::::::::::::::2222222222222,<-<<;..1.X.+++ ##%#####ooooooooooooo++++.......6666+++++%%%%%%#ooooooooooooooooOOOOo+++++ooo@OOoooOOOOOOOOo+%66OO Ooooooooooooooooooooooooooo##ooOooo&%ooooooOOO##OOOooOooooo##o#######ooo##%####%%%###o o##o####oo#oooo#@@@%##ooooo Ooo##oo@@@@@#%%%%%%##@@OO######%%%%%%%%$$$$&&&&$$$$$$$$&&&&&&&&%%&&&&&&*&&&&&&&########@####%%%%&&&&&&&#%&&&&%%##%%&&&&&&&&&&%%%%%%%&&&%%%%%&&==*8uuu88t8****==*8u8****8uuttt88t8****&&*****&==*===***=*88888888888888tu8**8uut******ettttt****tttttttt**t88****tty6..1", "4444444442222222111;;<67799996664444:<<<169999669999%%*88&#o%%%o%%##########oooo %*8ii8*%%8ihkzNiikkito # ooo#%oooooooooooo ooo###oooo o%&&*88t**8ut8***======####%%#0########oo o####%%%%%%%%%%%%%%%%%%%%####%%====**888888=%%%==%%%=%%%%======******%&899961-;;;--;166X+ixkpoo XXhg9,<>:337f776,344444444X+++9yiyiiii8=%%*8ahhcchg7--4344::::::::::::::::<<<:::44::<<.6ycHBxI{'[]''']]]]]'`))`[_(WFSlf--->>>>>>::::::::::::::::::::::::::<<::::>>>>>>;;;;1.X.1.16ghv1.11.-->22>>>>>>::::::::::::::::---:,:::::::::::::::::::2222222222222<;;;;..X+++ +o #%&%###oooooooooOoo+++1111......+++++++ooooo+%%%++oo oooooooooOO O@++++ooOOOOOOOOOOOOOOo o+++ooo oooooooooooooooooooooooooo#ooo oo%%oooooooOOO##OOOooOooooooooo#####o o##%###%%%%###oooooo######%%oo@@#@@@%%#ooooo OooooooOOOO@@#%%%%%%%#@O##########%%%%%$$$$$$$$$$$$$$$$&&&&&&&&%%%%##%&&&&&&%%%###############%#%&&&&%%%&&***&&###%%%%%%%#%%%%%&&&&&&&&%%%%%%%%%=*8tu8*8*=****=88888*****88888888**********&&==**===****88t88888888tttt888*8tt*t*******tttt*********ttttt88888t88y991.;", ":::::22244422222;<,<;;<11166696644::---;.6999999iyyyt8*&####%%&&%%###o##o o%#o%8ikBBkp88ai8&%%8tt8ppiu%&%#oo#####ooooooooooooooo oo##oooooo#%&**8888uu8%888=%%%%####%%##=%#####o o#%%%%%%%%%%%%%%%%%%%%%%%%%%%==========*====%0 %%==%%%= o#%%%%#*======%%&99961.2>>:---..XX19v9XXXXXX+++XX..<,>3377<..-,:44444::1.X.69y8yiihhi89 %89hh9;;,34444::::::::::::::::<<::::::::,<..<6y9c}')''''']]]]``[)`[}YLzl9--,33>>>>>>>:::::::::::::::::::::::::<<<<::>>>>>>>;;;-;;;;.XXXXX.1..173>--:23>::::::::::::::::----::::::::::::::::::::::2222222222222....XXXX++++oo%%==**=%##ooooooooOo+++1;;;;;..++++++++oOoooooooo++oo ooooooooooooooo%&++oooo@@OOOOOOO#oooo oooo oooooooooooooooooooooooooooo o%ooooooooO####OOOooooo#@@%%%%####oooo%%%o#o o####%%%%%##o##%%%#%%####%@%%%%%#ooooooooooooOOOOOO@@$$$&$$#@#####%%%####%%%%$$$$$$$$$$$$$$$$&&%%%%&&&%%#OO@#&&&%%%%%##%%####%%%%%%%%%&&&&&&&&&=&&&&&$$$$$$$$%%%%####%%%%%&&&&&&&&%%%&%%=888***=**88*8**888*====*******&*****&&&&&&***88*=*88888888******8***8t8**8*%&%$&=*eetttt************ettt88yyyyyyg96;", ":::::::224444444--:,<<<<-..-<<;.;;;;;;166999&&*tt888*&OOO#$$#%%&%%#ooooo#o#%&*ijNBxhi8*8%&*&%#%%& #%%%%#oo%%###oooo##oo####oooo#%%##o%#oo#%%%=***8uu*iiu8=%#%o@###%%#=%%%%%@o#%%##%&8%%#%%%%%%%%%0o####%%==**========%%%%%%0 #%%%##%= ##%%%#==%%%=&&%%6661<-32::,,--7,---X-;;19hlly1.1..;;----....XX---:<<11--<11669699yhhhhhh+X+vvf.;;,:::4::::::::::::::::::::::::::,<--..+cL}]]{]'']]]```````_Yzc99<-73-4>>>>>><<::::::<<,,,,,,,,::::::::<<<<<:>>>>>>>>>>-,,<<76<1<<,,,:----,33,::::::>>>::::::::---:,,:-:::::::::::::::::::2222222222222X....+++988*&$&*==**=%##ooooooooOoo..;;>>>;;1++%%#oooOOOooo ooooooooo ++ o+%o++ooo++Ooooooo%ooooooOO o ooooooooooooooooooooooooo##o ooooooooo@@@@OOOOOOOo@@@@%%%#o 00 oo###%%##oo######%%%##%@%%%%%#oooooooOOoooOOOOOOOO@##$$##@%%%%%%%%##%%%%%%$$$$$$$$$$$$$$$$&&%%%%&&&&%@OOO@%%%%%%%%%%%%%#@@%%%%&&&&%&&&&%%&&&%$$$&&&&&&$$$$&&&&$@@@@@@#$$$$&&&*&&%#&##%*88*uut888*=8*=*88*===%===**==&&&&&&&&&&&***8tt*=*88ut88***=***88***889*888&%%$=**ewttutt88t**********tiy89999yhhg9;", "<<<,,>>:24444444::33333333332222;;;.;166998*==*e*&&**&$OO$$$$###%%#ooo##&**%*tii&&o #%%&tiii8&o o#&8ii&&88%o##o##ooo#%%%%##ooooo#%%%%##%##o##%%===*ttttiiut*=%#o@@oo%%%%%%%%%@@%%#oo#%*oo o###o000000o###%%%===========%%%%%%%%%%%###%=###%==%#%%%===&%++..;<::444:43,:--3324375fclh91X61XX796..698iq9%+1166%%%433>--;1X.1699hhhzx9XXX67<--:,,:::::::::::::::::::::::::--<<<,,,+chhE{'_'']]]```[[`']}WL6..---:3>>>>>><<<<<<<<<<,,,,,,,,::::::::<<<<<:>>>>>>>>>>33:-----<<>>:::::::::-:,,,,-:::::::::::::::::::2222222222222..1698y8yytt*&$$*=%%%%#%#oo ooooOo ..;>22>;;.++@#OOOOOOOOOo oooooooooo..XX ooooo+++++ooooooo+oo###OOO oo ooooOOOOoooooooooooooooooo%o ooooooooOOOOOOOOOOOooOoo#%%# ooooooo###ooo#oooo@@@%###oooo#oooooooOOOOOOOOOOOOO@@@###%%%%%%%%%%%%%$$$$$$$$$$$$$$$$&&%%%%&&&&%#@@#%%%%%%%&&%%%##@@@%%%%&&&&%%%%##%&%%%$$$$&&$$$$$$$&&&&$@@@$$$$$$$$%%&&&&%#%%%%=*88iaaitt88ut8tt8***=#%===*==&&&&&&&&&&&***8t8**8u8t8*****=*88888** %&&&&*****ee*tttt88tt**********889961.++696:22444444444:444444444444XXXXX1669%%%==$$#O#&&$##O#$$$###&%%###%%*ut#%8& #o o%&8kji8%#o *oo8kJNkNNh8*&%#ooo##%%&%%oooooo#%%%%#oo###o#%&t*8uu*%=88888=# @@ooo%##%%%%@%%%# o### oo 00000%%%%%%%%##%%=======%%%%%%%=%%%##%%=%####%%#%%%===%o X.-<--3334::::434444442222>;;;.X.9ll9XX68iiiiii888iiaaff4:>,<;...XXX1699hc6.1...;<,--<::::::::::::::::44:::::<-<<--<-- X6hF}]'']]```[']``[)RE6X<7-:7-;;;>>>;;<<<<<<<<,,,,,,,,::::::::;<<<<:>>>>>>>>>>--:,,<-<-X-73:::-...<,,<::2:2444::::::::::,373,::::::::::::::::::::22222222222226669yhhh888***=$8=%%%%%%%#o oooO X..>2442>;.+oo#OOOOOOOOOooo+++ oo oooooo11XX++o o++++++++++oo+oo%$$#OO+oooo ooOOOOOoooooooooooooooo o#oo ooooooo#OOOOOOO@@@OoOOOO#%%%%%%%% ###o#%%%oooooooooo@#ooooooo#oooooooOOOOOOOOOOOOOO@@@@@#####&%%%%%%%$$$$$$$$$$$$$$$$&&%%%%&&&&%%#%&&%%%%&&&&%%##@@@@##%%&&&&%&%%%%&*##%$&&&&$$$$$$$$$&&&@@@$&&&&$$@@o#%&&&%#%&===*8utipaiaphpiiiu888*=#%===*==&&&*******&***8t8**uu88*==**8****88***+ %9988*****e****88***8==******e*&%+.XX..XXX..<", "::::::::22222222222::22222222222442,166+8*%%&&=%%%%$=$###$##oooo#%####ukuuiJx$& % 8&*hiclcy#%%%#%ukINkzki8*=%#%===*$#=*##% oo#&&&&&%o #%# 8888t8&%###%*8%ooooooooooo%%%%%%Oooo+++++X +&&&oo#ooooo +%%%%%%%==%%%%=%%%%%=====%%##%%%%##%%==##=%%673444444>>::<<<<<<<<<:::44::::::::,-:7ff7-;1698tuuqqqqiiiiuq8%0XX;;;;,,--<...--,fg,>----<<444::::<<<::::::::::::::::::::::<.;79glH'[)]'`))^)))ER}x;;;<<<<<::::::::::::::::::::::::::::::::::::::::,,,:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::3::-<<<<;;<>>2222>;;..66998cxchhi*%%&*%%&&%%%##O##Ooo ++1<;-:4444>;.X oo+oo+++XXX OOOOXX++++11;1111+oo++ ooooooooOOOOOOOOOOOOOOOOo@@@@oOO@oOOOOo@ooOOooOOOOooOOOOooooo oo@oooooo@@@#%#@ooo#%%%##o o%%%%%%+o ooo#oooo#%%oo######ooooooo#ooooooooOOoooOOOOOooOOOOOOOoo@@@OOOOOO@#OO@######$&&&$$$&&$$$$$$&&%%&&&&%%&&&&&&%#@@#%%&&&&%%@@@#%%%%%%#%&&&&&&&$$$$&&&&&$##$$$$&&&&%%%&&&%%##%%@@%&&&&%&&&88888888tttuituiiut****&&*&$#$$$&***&88888**8ty899971444:<1++98y99977X0%988*&******=$==*=*ee***899966::::::::::::::::", "::::::::22222222::::::::22222222::,36666%%&&&***8=%%%#$=*$$$&&#O #%&&%#**eapkBx$ #&o%t yxBzLYTJxi8u8=== %iBIIBxh8%o%*8%%###%##oo#&&%%%&%%&*&%#%%&&*&&%#oo#%&% ooooooooooo#%%%#Ooooo+ +X +%&&%O#%%%+ooo+%%%%%%%%%%###%%###%===%%%%%%#%%%%##%===##%%+1,:444442:,::<<<<<<<<<:::44::::::::---<,,<-;169888qq888qqq8iii891X.1;;----<-.--<,7f-:>:<-<<444::::<<<::::::::::::::::::::::<-;167gc[{{'Yxcx^[[REES9;;;<<<<<::::::::::::::::::::::::::::::::::::::::,,,:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::--<<<-;;<>>2222>;;..160%88*&8u8&#%%%%%%%%####OOOOoo+++1;;;:2442:-.X++o%++++++X+X XXX++....;;11+oo+++ ooooooooOOOOOOOOOOOOOOOOOOo@@@oOooOOOOoo@oooooOOOOOOOOOOoooo o@oooooo@oo@#%%##o#%%%### o+oo oo+#ooooo###############ooooooooo##ooooooooOoooooOOOOOooOOOOOOOooooOOOOOOO@$$$$$$$$#$&&$$$$$$$$$$$&&%%%%&&%%%%%&%%%%#@@@%%%%%%%#@@@##%%%%##%%&%%%%&&$$$$&&&&$#@$$$$%%%%%%%&%%###%%&@@@%%&&&&&**8888==*88888888t8**=**&****&$&&&&***88888***tyy9961.444:<<6699996111 +%8tt**&&&***&&=**==**tt8966...::::::::::::::::", "::::::::22222222::2222::22222222::,161. o+%&&&&**=%=====*=$$&&#Oo#%%&%%#O=*kkLx9#*%@&%%icxhy8999hzxhhh8yh8&ihhcJYIJBj8&%%=##**%&##%%# ooo#%%o o##oo#%##oo%%% oooooo oooo#%%oOOooo+++ +&9&%OO%%%%%+++%%%%%%#%%#ooo##o####%%%%%===%%==%%#%%====%%+1;-:4444::<<::::<<<<<<<:::44::::::::-::----<;199888*q8888888quii8999977;-,,-<--<<;;,-->,,:::44:::::<<<::::::::::::::::::::::<;;;.;69clxli69iL_[KWWgX;;;:<<<<::::::::::::::::::::::::::::::::::::::::,,,:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::,<<-;;<>>222>>;;...6&88%&uut###Oooo%ooooooOO Oooooo ....<::::;...++%%%+o +++++++++ ++++++....... oo++oooooo+oooooo+OOOOOOOOOooooooOOOOo@@oooOOOOOOo@oooooOOOOOOOOOOoooo oooooooo@Ooo#%%%%oooooo## ooooo%%%%##ooo####%%%##o##oooooo##oooo##ooooooooooooooooOOOOooooOOOOOOOOOOOOOOOO$$$$$$$$#$$$$#$$##$$$&&&&%@@%%%%@%%%%@@@#@@@@@@@O@@@@##%@######@@#%%##%%$$$#####$$@@#$$###%%%%%&####%%&&$@@@%%&&&&******$=***=&&%%%%%$##********&***&&**u88ttt8tty8961..::3:--17996+XX %8yt88*&*888**88888**8t9%+.X.-;::::::::::::::::", "::::::::222222222233332222222222<,,666++++%&&&&&*=%====*==&&&$$$&&&&%%%%%*8klNh1y&+ +99NxXXXXX.+hBzhlKWRYHLR}YEWE}^Ixi8*%o#**%# ooooo%o#%%%o ooo o%#o oooooooooooooooOOoo%%%++%%%ooO##%%%#++%%%%%o %#o ### o######%%===%%=*==%%=====%00.;::4444:<<<4:::::<<<<:::::4::::::::,,,<--<,;16988***8888qquqquiqiih996;<77,::::;--;,;-:23444::::::<<<::::::::::::::::::::::<,<-.;11.XXXX.69hHRYWz7;;;<:::::::::::::::::::::::::::::::::::::::::::::,,,:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::,,,,,,<<;;<>>>22>>;;;..1=&%&uja&#OOOO o@o oooooooooo ...;--<;...+++%%+ooo+%+6666111+++ X....XX oO++ooooooooooo+++OOOOOOOOOooooooOOOOoooooOOOOOOOOooOooooooOOOo@oooooooooooooooooooo@#%%%%ooooo##%#ooo ooooo#%%#ooooooo###%%###oooooo#####oooooooooooooooo@ooooOOOOoo@@@@oooOOOOOOOOOOO#####@OO#$$#@@#$O#$$$$$$%@@@@@@%@@@@@@OOoooooooooooo#%%%###############%#@@@@@@@$#@@#$#@#%%%%%%%###%%%&&$$@@$%%%&&=**===&&***&&&&&&&&&&&&&&&**&&********ut88tt***&%+X.;1-<<:-:,771.X ooO&8yyy8&%&9999669%99999%6XX..;>>2::::::::::::::::", "::::::::222222222233332222222222<<7799yy%%+%&&&&=&&****e*ete&$$*%=*89%&&8%yzxh77 99+hlhhKK9.166XX16696gHzzxHREKEW}RLKRJyt&ui%%u8%oo%%o o%&&%o oo oo ooooooo###oooooOOOo%%%%%%oo OO$Oo##o++%%%%%##oo%# o##o#%%# #%%%%###%=*========%0X;;:4444::<<<444::::::::::::::::::::::-----<<;..%88*===*88888iiiuq88y891X1ff3::2>-;1771-->344:::::::<<:::::::::::::::::::::::<,,-;<<;;111..169gxRWf.,;<>:::::::::::::::::::::::::::::::::::::::::::::,,,::::::::::::::::::::::::::::::::::::::::::::::::<<<<<::::::::,,,,,,<<;;<>>>22>>;;;..1#&tuut*$#OOoooo+oo oooooooooooo++++..;-<-...X++++++oo++ ++1.;;1 ++....+ooOooooooo+oooooo++OOOOOOOOOOooooOOOOOooOOOOOOOOOOOOOOo@@@@oooo@@@o@ooooooooooooooo@@@@#%%%%%##%%%%%%#o ooooooooooo ooo##ooo##%%#oooo#####oooooooooooooooo###oooOOOOOo@@%%@@@oooOOOOOOOOOO@OOOOO###@OO#%@##%%%%#@@@@O@@###@@@OOOoooooooooooo#%%%########O######%##@@###%%###%%#@%&&&&%%%%%%%%%%%&&$&$$$#&&&=====$&&&$$&&&&&&&&&&%%%%&&%%8*&&*88*8*&&&&%@o XXXX;1..-,322>>;XX+&&&tt8889%++6661;;1.11696.XX.;;>254::::::::::::::::", "::::::::22222222::2222::22222222<<1679996++++%%%%%&*te*e*tt*$O%&%=888&%%+oicc7-299.yRE999g..1;;.9X.6XX661X.fg9hWExhxERJlx%%iikk*% %% o%%#o ##o ooooooooo##oo ooOOOo@%++%oo OOOOOOo#o++%oo0o#%###o ooo%%=% %*%%#o #%=========9%1.;,244444::<<4444::::::::::::::::::::---<,,<-;XX+***====8***8qqqqq8**89XX.775::>;;19yy9;->344::::::::::::::::::::::::::::::::-<,<-<;---;;;;;1669lh;1->>>:::::::::::::::::::::::::::::::::::::::::::::,,,:::::,,,,,,,,::::::::::::::::::::::::::::::::::<<<<<<>>>,,,<<;;;<,<:-<<:>>>222:;;;..1O&upu&&*$oOo++++oO oooo ooo#%%%++.<<<-....XX X..;;> o++%6+++++oOOooooooo+++o+++++OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO@@@OOOOOOOO@@oooooooooooooo@@OOOo####oo####oooo ooooooooooo ooo##ooooo#%%#########oooooooooooooooo#####ooOOOOOOoo%@@@@@@oOOOOOOOOOOOOOOOO@@@OOO@#@@@###@@@@@OOO@#@@@@@OOOooooooooo##%%%%&###############%%%%%%&&&%##%%%#@%&&*&&%%&&&%%%##&&$&&$##&&&&==&$$$$$#%%&&%%@@@%%&&&&&&&%&%%%&9&&&&&%%%++ XX.;--;..-<3225;;.+&&&&&++++++X.111;;>>>;;111.X1,,>:444::::::::::::::::", "::::::::22222222::::::::22222222---<;<11..XX.+++oo%*t88*&**&@o%&=*88&%%%%%9X.1>36.lzg6X.;..17X-,X1;.11.;;1;.;1116976cYWchikxiikjh9 %&&% %&&&&%o oo ooo ooooooooooooooooOOOOo#oooooOOOOOOO##ooo+ o#%#o o#%%%%%%%&=%###%%%%%%=====9%+X.;,:44444:::444442:::::::::::::::::::::,,,<-..+%*==*=*88***8888*w***u8+XX;;-2>;;.69hh961;>24::::::::::::::::::::::::::::::::<<,,<--:,;-->33>...XX;7->>::::::::::::::::::::::::::::::::::::::::::::::,,,:::::,,,,,,,,::::::::::::::::::::::::::::::::::<<<---;;;;;;;<;;-;;,<-<:::>>>>2>-;;;;1 O&tt&#o@oo+++++OO +++ oooo###%%++.;<<---...XXXX o++61117oo+@%%%%+++++oOOOOOooo@+++++++++@@OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO@OOOO%%OOOO@oOOoooOOOOOooooOOOOOOo#oooooooooooooooooooooooooooooooooooooooo#####oooooooooooooooooooo####oooOOOOOOOOooooooooOOOOOOOOOOOOOOOOOO@OOOO@OOOOO@##@@@OOO@#OO@OOOOOooo#%%%%%%%%%%%%##########%%##%%&&&&%&&&%%%%&%%#%&&*&&&%%%%%%##O$$$$$$$$$$&&&&$$&&&%@@++%%%%%%%&66666666++++++66%&&%%%6++..<,:::;;<<<>>,1669**&$+XXXX..X;;<>>2243>5>,>>>,>::4444::::::::::::::::", "::::::::22222222222::22222222222-<<<<<;;;;;....1 +999999&%++%99===%#%&89++X.7->.6g3--;,<-;67ylLHLIINcccTNy+++o +&&**&oooo o## oooooo ooooOOOO#%@o@@oOOOO$####oooo%+#%%%# ooo o#%ooo%%%%%%%##%%%#%#%%====%% X.;;-:444444444444222::::::::::::::::--:<<---.169*==*==*8*=*8qq*=***w*&%+X.;73;..+%8iii96;;;>::::::::::::::::::::::::::::::::,:,3,-:3-:,2222>;X1;;,-3>>::::::::::::::::::::::::::::::::::::::::::::::,,,:::::,,,,,,,,::::::::::::::::::::::::::::::::::<<--;;;;;;;;;;<;;;,,,>:::::>>>3>-;;;11 o&8*%o ++++++66O ++++++%#OOo++++..<-----;..1...+%%%@%%66677oo@@@Ooo+++++oOOOOOOO@@%@+++++++%%@OOOOOOOOOOOOOOOOOOOOOOOOOOOOO@OOOOOOOO@&&@OOO@oOOoooOOOOOooooOOOOOO@######oooooooooooooooooooooo oooooooooooooo####ooooooooo########oo###ooooOOOOOOOOOOOOoooOOOOOOO@OOOOOOOOOOOOOOOOOOOOO@#%@@@@OO@%OOOOOOOOoo#%&&&&&&&&&&&%%%####%%%%%%%%%&&&&%%###%%%%&&%##%&**&&&######OO$@OO#$$$$$&&&&$$@@%++++.XX.....+...1...1XX....16+696666671--:::3;<,;..1669988*&&.....;.-----::4425:22:-,::::4444::::::::::::::::", "::::::::::::::::::::::::22222222:::::::>>,,>>;;;X.69996696+99999===%%%8iiyhyX.<,---<<<<,---:::::>>>>>>>>>>>>>>>>,<--;166WHNchll%lI_l9+ *%%o#o%%%%%%o **&%o ooooooooo o#%#oOOOOO%%ooO OOOOO*&#oo#%%888&%%&%%&%%#%%o%%%%%%%%%%%%###%### #%%###ooX.;;::44444422::::22:::::::::::::::::::<<<<-1998&&=====888**=****==*==&9961;X..+%*8tuuiy9..;<<<<<:::::::::::,,,,,,,,::::::::::::::::::444444;;;;;;>>>>::::::::::::::::::::::,,,:::::-::::::::::::::::::::::::::::::::::::::::::::::::::::,,,::::::::::<--...11.XX.16..;;<>33<<::::>>>>>>;;;;%%9&%+++++.....1ooo XXX++++oOOO+++XX.;::::,,<<<51166%+@&%+%+X.1+oOOOOO@++++oOOOOOOOOO@%@@++++++@OOOOOOOOOOOOOOOOO@###@O@@@####@@OOOOOOOOO@&&#OOOo@@OOo@oooooOOOOOOOOO@@OOOOo###ooooooooooooooooooooooooooooooooooooooo##oooooooo####oooooooo##o OOooO OOOo@@oOOOOOOOOOOOOOOOOOOOOOOOO@OOO@%%@@%%oooooOooooO ooo#%&**&&%%%%%%&%#oo#%&%%##%&&&##%%%###########OO##%##OO###%%%%&#O$$$$$$&**&&&899+.............;;;;;;;;..;;;;11.......-;--:43443:-...+9&&tiy&+%<,77,--:::::::::42222:::::::::44::::::::::::::::", "::::::::::::::::::::::::22222222:::4444444222222.;166611116666++=**&oo9yxyy+X1<-<<<<<<:,--::::::::::::::::::::::<<---<11XhLx6X99+HElch%%+%& ooo&&&&%%%# &*8tt8# ooooo#oooooooooOOO#%&%oooOOO###&&%%%%%%%&&%%%&%%%%%%%%% 0+%%%%%%%%######o#%%#$##o++66;>>44444--:,3333:::::::::::::::::::<<<<<1799&*=====**88*********==*99961666%&*euutt89+X.---<<<::::::::::,,,,,,,,:::::::::::::::::4444444;;;;;:>>>:::::::::::::::::::::::,,,:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::,,:::::::::--<<<..X6996666111,,>>><::::::>>>>>>;;;+6666+++....;;;1++++++%6+++++ooOXXXX.;-:::::><<,77116+%%&@@%%o +ooOOOO@@++oooOOOOOOOOO@%@@ooooo+OOOOOO@@@@@OOOOOOOOOO@%%&&&%######@OOOO@@O@%%#O@OOOOOOOOOOOOOOOOOOOOOOOOOOOO####ooooooooooooooooooooooooooooooooooooooo#ooooooooooooooooooooo#ooOOOOoooOOOOOooooOOOO@@OOOOOOOOOOOO@@OOOOOOO@##@@%%oooooo OooOooooo#%%&&&%%%%&%%%&&&&%%%%%###%%%%%%###################OOO####%%%%$#@$$$$$$$&*88*&661...-<<<<<<<<<>>>>>>>>>>>>>>,,;;;;;;-:>:44444:25;1++@$$ett&++X::22:::::::::<<<:::2:::::-::::::::::::::::::::::", "::::::::::::::::::::::::222222224444444444444444<<,,<;;;..11.X.1*$O#8hlzh+ XX1<-<<::::::-::::::::::::::::::::::::<-----;111.196XX669xllx%9% %% 8####%&&%o#*uii& oo oooooooooo OO##%&%OOOOOOOOO###%%%%%#%%%&*&%%&&&%%%o o++%%###%%##o##oo#########++6.;;>2344<,,,,,>>>>>>>>><::::::::-::<<<,,116+&*=#====***8********===889999988**ewuutty9%+.----<:,::::::::,,,,,,,,:::::::::::::::::::44444;;;;:>:::::::::<:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::,<::::::::-<<66..+99996+.X..;>>44::::::::>>>>>>>>.11111111...;;--++++%99&+++++oooXXX;;,>:4::-;;;;35;..+++%OO$%OOO+oOOO###@+oooOOOOOOOOOO@%%%@oooo@@@#######@OOOOO@OOOOO@#%#@@@%&&&&&&&&&&%#%&%##&@OOOOOOO@OOOOOO@OO@OOOOOOOO#####OOOOOOOOOOOOOOOOoooooooooooooo##ooooooo#oooooooooooooooooooooooooOOOo@%%oooOOOOoOOO@@@@@OOOOOOOOOO@#@OOOOOOO@@@@###ooooo OOoo#%###%%%%%%&&*****&****&&%%%#%%%%%&%%%%%&&##%%%%%%%%####OO########%#$$$$$$$&&8t89+<<<----:::::::::>>>>>>>>>>>>>>>>;;;>>>22422:::::>,16&$$$ret&@+.X4:::444::::<<---:::::::----<<:::::::::::::::::::", "::::::::::::::::::::::::22222222444444444444444422:::>:<;;;.XX.6*&%&99+X+XX6661-,,::::::::::::22:::::::::::::::::,,:::;--<.X66.1+XX+yNTx9+% *oo%#ooo%&*& o&8t8% o ooOOOOO#OOOOOOOOOOOOOo##oo%%%%*8&#%%&%%%o o+++00+%%###%%#o##oo####$$####+++..;,3>>;;<<<<>>>>>>>>><:::::::::::<<<<<>;.X+%&%====**88*******====&&999&*****wuuuuui89%<<.-<<,,::::::::::::::::::::::::::::::::::::::::<<::::::2::::<<<::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::--::::::<<::::::::<6666.9989%++X+.;;>244:::::::::>>>>>>>;;;;.......<61;.X.++++++ooooooo ..;,773:3:--;;11;.XX.+++%OO$$OOO%@@O#$##@++ooOOOOO@OOO@@&&&%#@@%&&&&&%%##OOOOOOOOO@##@OO@@@@#%&&&&&&&&&&&&&&&#%&&%%##@OOOOO@@@@@O@@$$#@OOO@###OO#OOOOOO###OOOOOOooooooooooooooooooooooooooooooooOOOoo@ooOOOooooOOOOOo@%%%@oOOOOOOOo@@@@@ooOOOOoooo@@ooooooooo@@@oo#oooo#ooooo#%%####%%%%%%&&****&&*****&&&&&&&&&&&&&&&&&#%%&&&&%%%%%%%&&##%%####@#%$$$$$&&&9996.<<<:::24::::::::::::::::444:::::;:>>2244422:-;<66699&$$$ue&&%++63444444::::<<-;;::::::::---:::::::::::::::::::::", "::::::::::::::::::::::::22222222::444444444444444444422>71;.X.+6 +996.X.+69gg71<::::::--::::::::::::::::::::::::::,33,>>-,-;76.1XX+XXyIHc&cip@t8t8&&&&&%#o o#&88o oooooooo oooooO oo#oooo#OOOOo#%%%%%%**&# o###%%o%%%+0 ++%###%%%##o######$$$$%%%%%+XX.11;....;<,3>>>>>>>>:::::::::::<---->>;XX+&***===**********=*==&%%%&&&==**wu**88t8*%61<--<::::::::::::::::::::::::::::::::::::::::::<<<:::::::::<<<<::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::---:::::<<:::::::,,,166688&%%&&%9961>244::::::::::>>>>>>;;;;.....X.6761..166+ooOOOOoo +;;>3773-,<-..1++1.XX+++%%@O##OO$&%###$#O@++ooOOOOO@@@@@#%&&&%%%&&&&&&$$##OOOOOOOO@$$$$##****&&$#OOO@###@&$&&$@O#&&&&%@OOOO@#%#@@O@$$$$@OOO#$##OO########$###OOOOoooooooooooooooooooooooooooooo#%OOOO@@@ooooo@@@oOOOoooo@%@OO@@oOOOo@@@@@oOOOOOOooooOOOo@oooooo@@ooooooo#%%%##%%%%%%%%%&&###%%&**&&*****&*&&&**&&%&&&&&&%#%%&&&&&&&%%%&&&%%%%%###@@#%#$$&&*9966..<::,,24:::::::::::::::::222:::::::>22444>>>;..66699&$$$rur$&&%69::33::::::::<---:::::::::::>>>,,::::::::::::::::", "2222222222222222::::::::22222222::::444444444:::4444442:;;.X+699hg96.;67666991;-<<<>::::>>>>>>>,::::::::::::::::--::2242-33-.X>>>>>>>:::::::::::<<---42,XX+&8*====&=************&####&&===*8q8qq888*%66<;<<,::2:::::::::::::::::::::::::::::::::<<<<<<:::::::,,,<<<<<::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::----::::<<:::::::,,<..668**&&&&&8961>244:::::::::::>>>>>>>;;;...666996.X;166+oOOOOOo++++>>,333,-<;..++++&+o ++%%%@@#$$$&%%@##OOOooooOOOOo@%%###O@##@O#$$$$$$$$$$@OO##OO##@@$&&*tttt*&$#OOOOO@##&$#$$#OO&&&&%OOOOOO#%#@@#$$$$@OO@#$$##OO###$$###$$$#############OOOOOOOOOO@OOOOO@@OOO@%%@OO@@%@@OOOOOOOO@@@oOOOO%oOO@%%@ooo@@@@@OOOOOOOOooOOOO@%ooooooo@oooooo#%&&%%&&&&*&&&&&**%%%%&&******&&&&&&&&&&&&#%&&&%%##%%&&&%%&&&%%###%%%%%%##@%%%%&&&&&6+...;-::::::::::::::<<<<<<<<<:::<<---:>>22222>;;..+%9$&*$$$*e$&&%&8% .-<<<:>2>>>><;;;:::::::>>>>>>>>>::::::::::::::::", "2222222222222222::::::::22222222<<:::444444::::<4444::::.;66999&66<-->-X;1XX.X;--;;;;:>>>>>>>>,,<<<<<<<<<<<<<<<<;::>>:44::-:3,<196+XXX9hhhzciyitt&%%%%%#&%%o o#o o%%oo oo o%%oooooOO ooooOOOO o#%%o o##%%o + ++oooooo#%###%#o#####%%###%#####%%66666<;->>>>>>>>:::::::::::<,,,,43,.X+%*==%%%%%$********8**&####%%%#%=8qqqq888*%66..-<,::22:::::::::::::::::::::>>><<::<<<<<<<<<<:::::::,,,<<<<;::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::-----:::<<::::::::<;..+6=*e*&&&&++.;>234:::::::::::>>>22>>;;;;1699999+XX;;..+@OOOOOO+++6>>>>::--;.X++%%%&$@O@++++%%#$$$$%+@OO#O@OooooOOOoo%%%#@@OO@OOO#$$$$$$$$$$##$$$@OOOOOO#$&$&&&&&&&$$$$$&&&&$O$&&$$&&%&&%@OOOOO@##%$$&$$#OO##$$$$$#$$$&&$$$&$$$$$$$&&&&&%%%%%%%#@@@@@@@OOO@@@OO@#%&@@@@&&&%@OOOOOO@%%@oO OO&%oOO@%&%%@@@@@@OOOOOOOOooooOOo@oooooooo#oooo#%%&&&&&&&&*****&&&&&&&&********&&%%%%&&&&%&&%%%%##%%%%%%%%%&&&%%##%%&&&%%%%%%%&&&&%++..;;;;;<>>>>>>>><;;;;<<<<<<<<<<<<<<<-:>>>22>>;;.++&&&$$$$$&**@&&%&*%O....;;>>>>>>>>><:::22:2>44>22222::::::::::::::::", "2222222222222222::::::::22222222<<<::::444:::<<<3444:::<799y99@ .<,;->33;7.;;-32---;;<<,>>>>>,,,<<<<<<<<<<<<<<<<,,>>>:443::----<9XX.+XX 9hchhxht8%o#%%#o&%#o oo oo%&%oo%%%#@%%ooooooO oooooOOOOO oooo o%%#oo o o+ ++ oo #%###%#o#%%%%%%######$####+669771,>>>>>>>>::::::::--:,,,3742>.X+%%%%%%%%##=====&&&&&&$#O######%=8qqq8888=#61..-,,,:22:::::::::::::::::::::>>><<<<<<<<<<<<<<<::::::,,<<<<;;::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::-----:::<<:::::::--...++#=e*&&*t++.;>344:::::::::::>>222>>;;;16699999+++1;..+@OOOOOOo+66:>>:----..X++&&$$$&**&%++%%%&$$$++oOO$##Oo+ooOOOo@%%%@@O@#$$$$$$*&&&$$$$$##$&$@OOOOOOOOO@#$&&**e&&$$&&&*e&O$&**&&%@%&&&@OOOOO@%&$$&&&&$$#$$$$&&&&&&&&&&&&&&&&&&&&&&&&&%%&&&&&%%#@%%#@@@@@@@@%%%%%@@%&&&&%@@O@@@%%%@OOOo@*&%O O%*&&%@@@@@OOOOOOOOo@@@oooooooooooO%#oo#%&&*&&&&&%%&&***&#o%%&&&&&%******&&%%%&&&&&*&&%%%%%%%%###%%%%&&&&&%%&&&&&&&&&%&*8*&+ XX;13>;<<>>,,3>><;;;;;----------------<>>>>>>>;.1+&&&$$$$$&*&@&+%*&$$&6..X;<;->>22>>>>:::2422444222222::::::::::::::::", "2222222222222222>>>22222:::>>>>>3553:>333>>:--,,XX...666hhhf7;;;3,,::::::::::::::::::,,,::::::::::::::::::::::::::::::::::::::::::-<;...X+99hzNz y#oi9o++++ + ooo%&&&$&&&*tt&OOOOOOOOoooOOO##OOOoo +++ o ooooooo%@OO%%OOOoooo###%o+%%ooooo#%%####%%%%%%%# XXX.;<;1,<-<33444277662;;XX+%$$$$%%%%%##%====&&&&&%###%%####&*=***8*%##O XX;,::444::-4442::::,,,,,,,,::::::::::::::::::::::::::::::::::::::::,,:::::::::::::::::::::::::::::::::::::::::::,,,,,,:::::::::::::::::::::4444444:3,-...+.%+%&**&&@ XX-344:::::::<<<<<<<<<<-:44>168r$$#%+. o+%966961;,3>>:::443:-,...99&@&&&&*&&$$$$$$$##OOOOOOOO@OOOOOOO$$#$&$$O#$$$$#OO#$&$OO#&#&&***&#$$&&**&&&$$&ete****&&&$$&&&****&&&@O@&&$#@OOOO$$&&&&&$$$###$&&&$&&&&&&&&&$$&&&&$&&&&&&****&&&&&&&&$$$$$$$OOO$&$O&$#OOO#$&*88*&&&*&%@OOo%&&%@@%&&%%%@@@@@OOOOOOOO@@OOOO@@OOOOO OOO#Oo%&99+%&&%O#&88******%%%&&&&&%&**&&&&%%%%%%%%$$$$$%%%@@@@@+++OO##%%%%%&&&&%&&$&8yy971;-:---::-.....<<::444:<<::::::::::::::::::<<<<;<;;169&$$999&&$$$e&@+6117;;;<<,,,---<,,,;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>", "2222222222222222>>>22222::>>>>222522:33-:-,7,,3;X.69999966611;,,,,:::::::::::::::::,,333:::::::::::::::::::::::::::::::::::::::::::;;...X+++8hcc% o %8+oo ooo@%%@#$&&&&*&#OOOOOOOOOOOOOOOOOoo oo oooo+%OOO@@oOO ooooooooo+ooooooo##OOOO###%%##o%+++....;;;..---4442,1.X>;;1+%%$###%%%%%&======&%&&==&%%#####%&*%&&=***&#@+++..;<:::::::4422::::,,,,,,,,::::::::::::::::::::::::::::::::::::::::,,:::::::::::::::::::::::::::::::::::::::::::,,,,,::::::::::::::::::::::::44::::--....+.+++&**&&t961<-44::::::::::::::::<<:44:,6**&$$%+X89&+699961;;>>>5,,:::::-<.X.+9&@&&&***&&$$$$$$&&OOO@####@OOOO##@$$$$$$$$#$$$$$#O####OO$&$$$$&&*ee*&&&*et&&&&&**e&&&&&&&&&&&***&&&&@@%&&&$OOOO$&$&&&&&&$$$$$&&&&&*&&&&&&&&&&&&&&&**&&&&*******&&&&&&&&&&&OO##$$&&$&&&$OOOO#%&&&&&8&&%@O OOo@%&***@@oooOoo@@@@OOOO@@OOOOOOOOOOOOOO##Oo%&%++%&&%#$&********%%%%&&&&&&&&&%%%%%%%%%%%$$$$$%%&@@@%%%%%&$$#%%%%&&&&%%%%&&&9661--->,3::-;;;;..-<:444::<<:::::::::::::::::::<<<;<;;169&$$999&#O$$&&%++..,;;;<<,,,,,;-;<<;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>", "2222222222222222>>>22222>>>>2222:33>>33-3------X99gg96.1..X.;,>>::::::::::::::::,,,33333:::::::::::::::::::::::::::::::::::::::::::;;;..X+++%9988 %+ + o OOO@$&&$#%&&%OOOOOOOOOOOOOO OOoo@oo+++ooo o ooooOOO@@oOO ooo oooooooooooOOOOO#######o+++66661166666<-34:>;.XX;11699&%###%%%%%%%%%%%%%##%&&=&&#####%&=%%%&*888&%%%6+.1;;-----<2222::::,,,,,,,,::::::::::::::::::::::::::::::::::::::::,,:::::::::::::::::::::::::::::::::::::::::::,,,,::::::::::::::::::::::::233::<<<161.++.+++&*&&&*996<--,<<<<::::::::::::--:44:<+9&&&&9619&+++666111,,>>>--;---<<...++&&&$&&&&&&&$$$$$&&&@#$$$$$$$#@@#$$$#$$#OO$&##$&&$$$OOOOO#$&#O#&*&&*e*&$$$*t***&&&&e&&&&&&&*&&&&**&&&@@O@&&&@OOO#&&$&&&&&&$$&&&&***&****&&&&&&&&*e******&****eeeee**&&eee&&$$$&&$$&&&**&$OOOOOOO#&&**&&&%o O@%&&%@oo OO@#%%@OO@@@@OOOOO@OOOOOO@&#oo%&+ +98&%&&$&&&&****%%%%%%%%&&&&%###%%%%%%%%$$##$%&&@@@@@@@@##OOo#%%&&&%%%%#&%++...-;>>,,:::2><;;---:444:<<<:::::::::::::::::::<<<<<-;699&$$99&@OOO$&&&96X.;;;<<<<,,77,--;,,>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>", "::::::::22222222>>>2222222222222>33>,>-,,-;77fff79971..16;;;,,>-::::::::::::::::,,,,,,,,::::::::::::::::::::::::::::::::::::::::,,:;;...XX++++%88&8% + oO%&$O#####OO Ooooooo#OO OOoo%@o ooo ooo@ooo ooooo oo oooOOOOO#######ooo+699966969996<<::<<111166999&%##%%%%%%ooooo###o###%%%%%%###%%%%%%&*888*&%%++6611<<----2::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::,,,::::::--:::::::::::::::::2,,;...699966++..+%%@&*%&996.-<<<<:::::::::::::.-::4><69*&$@+61+++X...X1111;;>,.;11;....+++@&&&&&&&&$$$#$$$$$$$OO$$$$$$&$$$$$$$#######$#$$&&&&&$#OO#$&&$#$*e&$*$&&&$#$&e*&&&&&*&&&&****&&&&**&&&%OO@$$@OOOO$&&$&&&&&&&&&&&&***********&&&******ee******eetttee*&*eee&&$&&**&$$&&&***&$#OOOOo%&8t8*&%o oo#oo oo ooo#%%%###@@@OOOOO@OOOOOO@&#o+%%+ %98&%&&$&&&&&&&&%%%%%%%%%%&%%###%%%%%%%%$##@@#%%%%%@@@@@OOOOo###%%#%%%%#++ XX.1,3,:---:,44>><;--:44::<<-::::::::::::::::::::::<>-<699&$$%%%#@OOO&&996;;,<<<<<<<<77,,,,,,>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>", "::::::::22222222>>>2222222222222>,-:,--7<;7ffgf7.;;...;1;;;;>>>>::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::,,:;;;...XXXX+9ci&++%&+ oo OOO OOoooooOoo%%%%%&$OOO##oO@ooo ooooooooo OOoooooooooooooo OooOOOooooooo##%%%%666%%%%&9+.<<<;<166+%%%%%%%%%%%%%%#ooooo###oo######&%#oo##%%%%&&*&%%%%%%+%9++6661;.:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::,,,:::::---::::::::::::::::5>;;.XX @&&&9999.;6++o@*&*t99+.X--<<::::::::::::<<,,2,1.%**$o X.++XXX.1.X.;..;1166666.XX66&&&&&&&&*&&$$$#$$$$$##OO$$&&&&&&&&$$######$$$#$$&&&*&&&&$$$&&&*$$&&$&t&***&&&&*&$$&*&&***&&****&&&**&&&%OOOOOOO$$$$&&&&********&&*********************teee**eeettttte*eeee**&&&&**&&$$O#&ett&#OOOooo&8yt8&%@oo ooooooooooooo#%%%%%&&%@oOOOOooOOo@@@++o+++ X%98%%&&$&&&&&&&&$$$$$$$$%%%%%%%%########$##OOOO@%%%%%%%&&&&&%#oO%#oo####++XX.111,>----<<444>>,<-::4::<-.::::::::::::::::::::::>>:;699&$$##$$&%%@+69971;;>>>>>>>>33,,,,,>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>", "::::::::::::::::>>>>>,,,>>>>>>>>-,--7,-773771,-X<<;;;....-;;-->2:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::;;;....XX.+9hh%o&% o oo%%o O Oooo#%&&&&&&&$$$&&#o%%&&%+o oooooooooooooo@@@++%++oo ooo o o Oooooooooooo###++++%%%%#@%++X<<;-;<66&&&%%%%%%%%%%######ooo##########*%#ooooo###%%%#ooo+%%%#@+++++...:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::,,,::::----::::::::::::::::>,,1++@@$&&&&&&+;<<.X @&&&*889++;;;;<>>22222>>>>.;<;-;.Xo&e*&%+1.+++666.X..11667+%9996++%9**&&$$$&&&$##$$&&&&$$###$$&&**&&&&$$##$##$&&&$&&&*******&&&*&&&$&**&&t****&&***&#$&**&****&*****&&***&&%OOOOOO&***&&***************eee********ttte**etttteeetttttttte*****&&&&$$&&**&$$#O#&***OOooOo%&888&&&**oo oo%oo@%%%##o#%%%%&&&&%@oOOOoooo@%%@%%+++ %9*%%&&$&&&&$$$$$$$$$$$$%%#%&&&%########$##@OOOOOOOO@%&&$&&&&%#O%%#ooooo++++11...;1161;.44>>,,,,:::::<--::::::::::::::::::::::>>>;169&$$$$OO@@++...11<-->>>>>>:::-:>,>-->>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>", "::::::::::::::::>>>>>,,,>>>>>>::-7;-7f777<<<-;1,--;;,,<;;>,>>::>::::::,,::::::::::::::::::::::::::::::::::::::::::::::::::::::::::>;<;;1X...11168%%y8 o %%#o Ooo Ooo#%&&&****&&&&***&&%%%%#ooo ooo%oo@%%oo@@%%@+%%%oooooooo oo oo oooooooOoooooooo#%%%###oo@+X.;<;-;<6&&&%%%%%++%%%#####oooooo##oooooo%%%##o oooo##oooo+%%oOOOOoo XXX<<<::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::,,,:::-----::::::::::::::::3,169**&$$$$&&@ ,,<.XXO&&$&&tt89..;;;>>2222>>><;X...;1. o%*e8899+999yy96.+669999#%%&&*8*&&&&$$$$$$&$##$$&&&&&&&&$$$$&&&*&&&&$$$$#$$$&&&&&************&&&O$*te*****&$$&&*e&$$&******************&&@OOOO#&*et*********etttt***tttteeeeetttttttttuuttttttttuuuttte******&&&$$$$&&&&*&#OO#&t#ooOoo#@%8t888tt%#o oooo%%&&%%ooo#%####&&&&%@@oO@@@@&%@%%+++X +9&&&&&&&$$$$$$$$$$$$$$$$&%##%&%%##########$$#@OOOOOOO@%&OOO####Oo##oooo%++++6+.XX.6666+.3>;;161<;::::<<-::::::::::::::::4:::::>>>-.69&$$$$OO@+++...----->>>>>:::---:>:-->>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>", "::::::::::::::::>>>>>,,,>>>>>:::;f3-fhf,;-<,--;-,<;-----::>>,222:::::,,3::::::::,,,:::::::::::::::::::::::::::::::::::::::::::::>>:<<<11.1.X.169++%ihy&X o%%%#ooooooooo#*&&*8**&**********&#oo%&%%%###%&oo#%%@@%@%%@ooooooooooooo oo oo OOOOoOooo##########OOooXX;,,<<<<####o o+00+%%###ooo#####oooooooo%%%%%# ooooo#%%%%oooOOO##Ooo+++<<<<:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::,,,:::-----::::::::::::::::>;;69ter$$$&*&+ 42,<.XO@e&&&etut...;;>>2222>>;;; +++699%&&&&&889999&9999++%999%+&&$$&&&&&&$##$$$$&*&&&&*&&$$$&&&$$$#$$&&$$&&$$$$##$$#$&*************&&&&$&*&&*ee&&&&&&&&t*&$&**t*******ee*******&OOOO#&*ee***e******tttttt*tttuteettttttttuuuuuatttttttuuuuuttt*etttt***$$$#$$&&$***$OO#&#OO@%o 8uii8*&%%#ooooooo%&**&%ooooooOOOO@&&&&%%O@@@%&&@++ + +9&&&&$&&$$$$$$$$$$$$$$$$&%##%%%@%%%%%%%%O#$$$%@O&&%###%&OOOOOOOOoooooo%&@+++%+++X+6696++1...+++1;;:::::<::::::::::::::::4:::::>>2-.69&$$OO$&&661;;---;;;>>>>>:::,>>>>>-->>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>", ":::,,,:-:--::,,:,>>>,,,,-->,3333f7711,<-;;;;;;;;<<<>>>>>>>>>>>>>::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::>>><;;;;........XX9yhi9o % &%o%titoo oo o%&*****&*etttttuttttt8&&t88tt***8&#OOOOO%@oooo ooooo oooooooooooooooooo@@@ooo##########ooo%961,;--<1$$$$#+++%%%%%##Ooooooooo###%%#ooooo oooo#ooo#oo ooOOOOOOoo X<<--:,3322::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::,,,,,,,,::::::::::::::::--------:::::::::::::,,,>;.Xo@&rrr$$&&%+34,76+&er&$&euuu9+XX.;3>>33;-166889998****&$&&&*&*t*%@&**&**&OO%*e*&&*e****&$&*ee&$$&**&&*ee*&&$$$$$$&&*$$&&$$$$&$$$&**e********&&&&**&$********&&&&&&**e*&&$#&********teee***&&#%#OO$*ett**etteuttttttuttttuuttt***ttt*ttuuuuuapauttuuuuuiiiuuutttette**&&&&&&$**tt*&#oooooooo@88tyt8%ooooo oooo%&&%%%%&&%#%%o OO%&&&&&%@@&&&%%%+ ++++%%&&$$$$$$$$$&&$$$$$$$$$$@@OOOOOO@#$#@@##@@@#$&&$$$&&$O$$&$OOOOOOOOOooo@@@@@o++%&&&&&%%++++%%+6.;>:::::::::::::::::::::4:::::>2:>;66*&$#$&&++1<->:::>,,>>>>>>>>>>>>>>>:>>>>>>>>->3333>->>>>>>>>333333>>", ":::::,,333,,::::>--->,>-333377337,;-;;--;;;;;;;;>>>>>>>>>>>>>>>>::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::>>>>;;;;;;;;;;;;XX+9yiy8 % o +8i8&%&& &8o oo o%&&*********ttuuuuuutttuuuuut*tt*$OOOOOoO Oooo oooooooooooo ooooo ooooo@ooooooo#########o%9997711,1<$$=&%%%%%%%%%##Ooooooooo%%%%#oooooooooooooooooooo OOOOOo@%%%1<--<,,2222::::<::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::,,,,,,,,::::::::::::::::--------:::::::::::::,,,,;;.+@&&$$&&89+X4:,799&&e&&*etuu99996;;5>>;;1666&&&&****r*$$$$&&&**&&$$&&&$$#OO$&eeeee*&eee*&&*e*&&$&&&&$$&*&&&&$$$$$&&&&&&&&&&&&$$&&***********&&&&*&&$********&&&**********&*eeee****etttte***$$#O#*ttuteettteuttuutuuuuuuuutt*********tuuuuaaaiuuuiiuuuuuiiiittttte**&&*ee&$O&&*8*&#oooooooo%8*%o o%%o oo%%##%%8**&&&&#OOO#%&&&%&*88&+++ +++++%&&&&&$$$$&&$$$$$$#$$$$$$#@@OOOOO@#$#@@##@@@#$$&&$$$$$O$$$$@OOOOOO@@@%%OO@@@@@@%@@@$&%#oOOO$&%+.;<>4444::::::::::::::::::::::>22>;169&$$$@+XX.->:::>::,>>>>>>>>>>>>>>>:>>>>>>>>>>3333>>>>>>>>>>,>::>,33", ",:-----:------,373>,33,-33333,,,;---;<;-;<<<<<<<::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::>>>><;;;;;;;;;;;..X+6988%& o8 o%%%+ &88%%&&i88t%X #o%&******ttuuuuuuuuuuuuuaaaauttte*$#OOOO%@OO@@O ooooooooooooo ooo oooooo oooo####o####%9996711;..##$%%%%%%%++o#ooooo###oo&%%%#ooo%oooooo +oooo++o OOO o+%++1<<-<::2442:::<<::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::,,,,,,,,::::::::::::::::--------:::::::::::::,,,>;;6+&&&&&*8996.::-<69*&rrreeeeeyyhg91;;1;..699+*&&&&&&&r&$$&****&$$$$$$&$$##$&r*eeeee*&eee*&$&***&&&&&&$$&&&&&&&$$&&&&&$&&&&***$&&*************&&**&&&&***&&**********e***tteettttttetttttutt**&&$#&tuuuuttuuuuuuuuuuuuuuuuuu88e********8uuaauuuuiaaaaauuuuaaaauaaauutt**ette$O&&8t8&#ooooo oooo #%&%#o#%##ooo#%%8******&OOOOO@%&&%%+o o+ o+%%%%%&&*&&$$$&&&&$$#$$&&&&$$$$#@@@OOOO@@##@@##@@@##$&$$$$$$$$$$$%#OOOO@@%%%%OOO$$$OO$OOO$&$OOOOO$$%+X.;>4444::::::::::::::::::::::>232;;69&&*&+XX.;>:54:::::>>>>>>>>>>>>>>>:>>>>>>>>>>,33,>>>>>>>>>>3>::>,33", ":::::::,337777fff777773>>>>>>---<;;;,,<<<<>>>>>>:::::::44:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::>>>><;;;;;;;;<<>;..XX+%98i 8#88&%% o&8&%ipi8&%o o%******uuuaaaaappaaaaaaappauttue*&$$$OO&&@OOOOOooooooo##oooo oo oooo oooo###++ooo#%%+11.XXX.OO####o+%+oooooooo#%%%#o%%%#oo%%+ooooooo+ooooooo ooooooo o+%+ 6<<-<:::442:::<<:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::,,,>;16998*8&&+666.376669*$&reeeeeeyyy9661;;..199&%&******ee*&&*rr**&$$&&$#&$##$&eeeeeeeeeeee**&&&*e**&&&&&&&&&&$$$$$$$$&&&$$&&&&&&$&*e***eeee****&&***&&&**************ttt**tuuttttttuutuuttuuute***&&*uuuuuuuuuuuuuuuuuuuuuuuuuuutuuut8tu**uuuuuuuuaaaaaaaiuuaaaauaaautttttettt*&*****%oOoooooooo%#oo#o #%%%%%%%%%oo#%&&**888***&&$OOOoo&%oo %9++%&9*&%***&&$$$&&&&&$$$$&****$####@@@OOOO@@@@@@##@@@@##$$$$$$$$$##$%%OOOOO@@@@@OO$$$$OO$OOO$&$#@@OO$&%+X.;>2444::::::::::::::::::::::>232:-69&&99+..;,,::242:::>>>>>>>>>2222>>:>>>>>>>>::::::::>>>>>>>>73333333", "-:37777777773,77777,,<;;<<,,,<;;;;;<,,,:>>>>>>>>::::::444:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::>>>>><;;;;;<>>>>.;1.X+9yhz88 %%%%+ooo +%%+888tii8 o%****etaaaaapppjjspppaaappauuuutte***&$OO@OOOO@####OOo#ooo oooo##++ooOo#%%++XXX++##%%%%%%%oooooooooo%%#oo##ooooo%oooooo++%+oooooo o++++++ +%%%+6<..<:::442:::<<:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::,,,,,1799996+....--;79998&$&reee*etyt86..1;XX.698*&$&&*reete*&&&$$$**&&&&&$&$#O#$&*******eeeeeeeeeee*&&&&&&&&**&$##$$$$$$&&&&&&&&&&&*****eeeeee****&****&**************etttttuutttttuuuuuuutuuuuutttt**tuauaauuuuuaiiiiiaiiiiaaaaiuuuuuuuuuuuuuuuutuiaaaaaapaaiaaaiuuut***ttteetee&&&&%%oooooo%%%%%&%%%&&&&&&8tit&#%%##%%&&*8888**8**&$#OOO ooo o%%%%&&&%%*&&%$$&&*&&&&&&&&****&%%$$$$@@@O@@@@@@@@##@@#####$$$$$$$$@@#$$@OOOOoooOOOO$&$OOOOO#$&&&%++oo@%@+..;>2222::::::::::::::::<<<<<:>234:-169&96...;;::>:22:::>>>>>>>>>2222>>:>>>>>>>>::::::::>>>>>>>>3333333>", ":,7773,,,,,-------<;---,;;<,,,<<;;<,,,,,>>>>>222::::::444:::::<<::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::>>>>><<;;<::::::;,1;XX68hBhkyi0 %%+%%%o o%%y%o8i8&*o#&ettuapppppsjjjjjjjsppappaauuuuteeee&$O@&&$OOO##$#OOOO ooo oooooOo++oO####%%+0oo+%#%%%%##%#oooo+oooooo@oooo@oo ooo ooo++%%+oooo OOo++++X++X+++++1...-::2444:::<<::::::::::::::::::::::::::::::::,,,,,,,,:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::,,,:<<,6666.X..----;16++%&*&reee*8tttt&XX..6699*&$$&*ee&&&&&&&&&&&&**ee**&&&&&$#$&&&&**e*******eeeee*&$&&&&$&&&&$##$$$$$$$$*****&&&******ee*eee************************tuuuuaiutuuuuuuuuuuuuuuaiuuuuuttuuauaaaauuaaaapapppapppppaauuuuuuuuaauuuuuuuuuiaaappjpaaaaaauuut**tttt***&$#&&%%#ooooo@%*888888ttt88888ippu8####%%%&**88*&&*&&&&$OoO +8**&&%%%$$###$&**&&&**8tt8*&%%&&&&&&$@@@@@@@@@@@@@##%$$$$$$$$$$$$#@@@@OO@@OooOOoO$&&$@@#OO#%&&%%1.XX++++.;;>>>>>::::::::::::::::<---<:>244:-166+6<..;;-->:22::::>>>>>>>>>2222>>:>>>>>>>>>>>>>>>>>>>>>>>>:>>3333>", ":,3,:---::::-::,--;;--;,--;;;;--<,,,,,,3>>>22222::::::444::::<<<::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::2>>>>><<<::::::4,,;.XX++%y8chxhit8%+o%%%o o%%&8* &8###*tuuadssjjjjjkjjjjjsspappaaauuteeeee&&&&&*&$OO#$&$#OO#o oo+++ooooO@@OO#####%##ooOO%%%#oooo#ooo++o ooooooooooo ooo oooo+ooooo OOoo+++161XXX o1...-,,24442::<<::::::::::::::::::::::::::::::::,,,,,,,,:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::,,,-----.....-<,::21.XX+@&errrr****e**%X+66y998*$$$ttte&#OO%%99&&*e**8tt8*&&&&&%&&&&&&***&*&&$&&**&***&&&**$&&&$$$$$$$$$$$$**reeerre*****ee***ee*************eetttttt*tuaauaaautuuuuuuuuuuuuuuiaiuuuuuuuaaaaaaaaaaappjppjpppppppaaaaaaauuaaauuuuuutuuaaaaapppppppppaaauuuuut*&$$$$O&&&%%%%%oo@%*8tyiiait8**8&%&8888o####%%&**88&#%&$$$&&%%#&%%%%&9yt88&&$##OO#O##&&&&&*8tuiiu8=%&&*&&&&&&@@@@@@@@@@@@#%%$$$&$$$&*&$$#@OOOOO%@@ooo@@@@@@%&%@ooo%%%%%>;..6666.;;>>>><::::::::::::::::----<:>2442>16+o,;-->,>-,:::::::>>>>>>>>>2222>>:>>>>>>>>>>>,,>>>>>>>>>>>:::>,3>:", "--::--:,-----::-,,;;<<--,,,,,<;;,,,;--::>>222222::::::444::::<<<::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::2>>>>><<<:::::44>;;111X 0%%hczki* %%%%% % %88% &#&*tuuajpssssjjjjjjssppaaaauuauuuteette*&&$$$&&$$$&&$OO##ooooo oo ooo +++ooooo@@OO#######%###O%%%o oo#ooo++ oooooo ooo ooo o OOo ++66..XXX++%....-,334442::<<::::::::::::::::::::::::::::::::,,,,,,,,:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::,,,<:<<---<,<-::::4.X+9y8&$r&&&&&&&&OOo+9ggg998errr8ttt&$Oo%999%+%&&&&888&%o%%%#&*88&&&&&&e&&&&***&*ee**&*t**&&$$$$&&&&$$$O***reeeee****e*****eee****&**e***ettttttuttuaaaauaautuutttuuuuaauuuuuuuuuaauuaaaaaaaaaaapjjjjjjpjppppppppppaaaaauuuuuuutuuaaiiiiapppppjjauuuuuutt*#OO@$&&&&%%#oo%@o%&888tt8&&8ijut888*%#o#%#o#&*88tt*%%*#$$&&&&&%%&8yy88***&#OOOOO##OOO#%%&8tuiiiiut88******&&$@@@@@@@@@@@#%&&&&&&$&*e*&#$#OOOOO%@Ooo@@%@OOO@&%o&%+%%%% 22;16666.;;>><<;::::::::::::::::-----:>2442311X >--->:--,,:::::,>>>>>>>>>2222>>:>>>>>>>>::>>>>::>>>>>>>>,>::>>:-", ":::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::22222::::::::::::::::::::::::::::::::::::::::::::::::::<-..X o +9hhh90%% o%&% X 0%99+ &%#*uppjsssjjjjjkjjjjpppppaauttueeee**&**&&&&&$$##$&&&#Oo+ooooO 111116++oo++11OoooOOOOOooo@%%+oooooooooooooooooooooooo o+++ 11<<<.......++++@++.661,;;;116++24444444442:<<<<--------::::::::::::::::::::::::::::::::::::::::::::::::::>>>>>>::::::::::::::::::::::::::::::::::::::::---:::::::::::::::::::::+699973-34::---<.XX &yitue*ete&&#$$$$$$$&*&#$&$OO##OO&**8*&&*&$#$&**&$&*ette*&&&$$&&***e****&&&&rr$$&***8****r*&8******e****8ttt**eeeeeettttttuuyyyiapaaaiuu88ttuuttuuaaaauuuuuuiiiiiiaaaaappppjjssssppppssspppsjjsppaaaaaaaaaauuuuuuuaappppsjjjaaapauue*te$OO$&&$#&&%#%%88%%8u8qiuikkao0kkkkja*&&*t&$**ttt8*===$&&&&&&##$*ttttt*&$@OOOOOOOOOOOO*tttuiiipaiaaqqiuuuutt*&$$$#@OO@$$&&&&&&&&&***&*%%%#@OOO%@OO@#@OOOo#$$$$&&&@oooo52,..+@@ ..;>224>>>>>>>>>>>>>>>>2>>>>>>;,,771<---:::::::::::::::::::::::::::::::>>>>>>>>>>>>>>>>::::::::::::::::", ":::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::22222::::::::::::::::::::::::::::::::::::::::::::::::::<-..X XX+6889%%%ooo%+o+o + 0%%%%+%%%8apppppsjkkkkjssjjpppppaauutettte*&&&******&&&&&**&$O%%+oooOOO +1.;1++oOOo+++OOOOOOOOOoooo%%@ooooooooooooooo#ooooooooo+++ +<<..........XXXX.....<<;;;;16+++,>--:>22>:::<<<<--------::::::::::::::::::::::::::::::::::::::::::::::::::>>>>>>::::::::::::::::::::::::::::::::::::::::---:::::::::::::::::::::++...<,:---<<-....++9tuuaue&$O$&$$$$$$&**$#$&*&$#$#OO%&&*****&&$#&**&&&&**e*****&&&&&&***ee**&**rrr&****&&**eerr88***********ttt*eeeeeeetuuuuuuuiiiipppaaaiuutttuuttuuiapaaaaaaaiiaaaaaapaapppjjkkkkjjjjssjjjsjjjjjsppppaaaaaauuuiiiuuaaaappsjjjppppppauuue&&&&$OOO#&&&&88iiaiiakkjpjjp*jVVVVkkk*&&*****=*uuu8*=&&&&&*&$&&&*tut*t*&@OOOOOOOOO@%&&**8uiaajjjpauuuuuuutte*$$$@O@$$$$&&&&&&$&&ee**&&&@@@@OO@@OOOOOOo#%&&&$$@@@@@@@+42<..+@@+..-->24>>>>>>>>>>>>>>>>>>>>>>><<,31,;--::::::::::::::::::::::::::::::::>>>>>>>>>>>>>>>>::::::::::::::::", ":::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::22222::::::::::::::::::::::::::::::::::::::::::::::::::<-...XX ++XXXX%%%&+ oooo+o 0o++%%%#%tappajjjkjjssppppjpppppaaaaueutt**&&*e******&&&&*&&#O%oo oOOOOOOoo OOo XX+ooOOOOOoooooOOOOOOooooo@@oo#ooooooooooo#%ooooooooo++++ ...........++.......;;;-;;.+++oo1....;<,>>::::<<--------::::::::::::::::::::::::::::::::::::::::::::::::::>>>>>>::::::::::::::::::::::::::::::::::::::::--::::::::::::::::::::::.....;;.<<176<.X+998ttuauuut*$@$*&&&&$*te#O&t*&&$$$$#%&%&*8**&&&$&&&&$$$$&&*&&&&&&&&&&&*eee***eerrrr****$&**&**e888**********ttteeeeetttuuuuuuuuiiiappppppaauuuuuuuuuuuipaaaaaaapaaaaaaapppjjjjkjjjjjjssjjjjjjjjjjjjjspppppppaaaiaaaaaaaaaapsjjjjspppppauiut&$&&&&&&*88888ihjhppjkkjpkkkkkkkkjjkkpppuuaijjppiutt&***&&&$*&$*tut**&@OOOOO##@@#&&*8uuipjkkpkkjpppppppautte&$$$@$$$$&&&&&&&#$&*e*&&8&@O@@OOOOOOOOOO%&&&&$#@OOOo@+++42;..+@+++.--:22>>>>>>>>>>>>>>>>:>>>>>>,<<,<;---::::::::::::::::::::::::::::::::>>>>>>>>>>>>>>>>::::::::::::::::", ":::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::22222::::::::::::::::::::::::::::::::::::::::::::::::<<<--...XXXXXXXXXX+9 o %o +%%o%*uaapkkkkjsppjjsjjsppaaaaaauuutt****eee****&&&&&&&$#Oo OOoo oo OOOooooOOOOOOOOOooOOOOOOOoOOooooo#%#ooo#%#ooooo#oooooooo o+%+o ..........116666---;<>;;;..++@OO+oo++.11;<<::::,::::::::::::::::::::::::::::::::::::::::::::::::::::::::::>>>>>>::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::.......X..6996669yyiytuu*euaut&&e*&*&$*te&$&e*&&$$&$$%%%&&&&&&&&e*&#OO####$$$$$#@$&&&&&*eee***eereeee*****&%#%&t***t*********ttteeetttttttuuaaauiiiiappppppppaaaaaauuuaapppppppappaaaapppjjjjjkkkkkkkkkkjkkkkjjjkkkkjjjjjssppppaaaaaaaaaaaappsspjpppppaatuut*&&*&&$##&**8iiihkkjkkkkjkkbkspjjauakkkjuuapaauuuuaattt***&&***tuau*%#OOOO##%&&&&*8t8uiapjjjjkkkjjjjkkjppatt&&$$$$$&&&&**&&$$$$&&&&&*&%@OOOOOOO@OO@%&&&&&@OOOOO@+++ 42<.++++++<;:>22>>>>>>>>>>>>>>>>::>>>>,,,<;-----::::::::::::::::::::::::::::::::>>>>>>>>>>>>>>>>::::::::::::::::", ":::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::22222::::::::::::::::::::::::::::::::::::::::::::::::<<<<<;;;..XXXXX+XX+%+o+ #*%#%o oo%oo%*upjjkkkkjkkkkkjjjppaaaauuuautte**eee*&&&***&&**&&&$o ooo oo o OOO@++oOOOOOOOOO##OOOoooooooo###o%%#ooooooooooooOooooooooo++o ++++++16.;<<<,,3::>>2>>;;1++@$$#OOOO+++..;<::::2::::::::::::::::::::::::::::::::::::::::::::::::::::::::::>>>>>>::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::;.XX...+XX+99yyy8yyyteeeeeeuutttt****&&*****&**&$$&$#ooo&%%&****t*&#OOO#OO#$$$$#OO#$$&*eeee****ettttt******&#%*t***eee******eeeeettttttttttuaauuiiaaapppsjjsspppppppaapppppppppppppppppppjjjjkkkkkkkkkkkkkkkkjjjkkkkjjjjjsspppppppppapppppppppppsjjjppapau**uutete*&&*8tuappjkkkkknnkkbnkjknVbbnjsjpuuap*tuaaateuuutt8*8ttuiaaut%%##%%&&&&*8888tquapjjjpkkkkjppjkjpppaue&&$$##$$&&***&&&&$$$$$$$%%%%OOOOOO@%%%%&&&&&#OO @@@+%%++4><1+++ X.<<,222>>>>>>>>>>>>>>>>::>>>>,,,<----;<::::::::::::::::::::::::::::::::>>>>>>>>>>>>>>>>::::::::::::::::", ":::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::22222::::::::::::::::::::::::::::::::::::::::::::::::--<<:>>>;;;.XXXX+XX++ooooo#=8= oo oo %oo#%*pkjkkkkkkkjjjsppppaaaauuuuuuut****e*&&**ee&*****&*&oo%%oO oo +++O@+++.XX OOOOOOOOOOOOOOO@@@@%%%#++%+ooo+ oooooOOO@@ooo+oo o++++++++61<<---:4:4445:>>;1++@OOOO####@oX..;-::44::::::::,,,,,,,,::::::::::::::::::::::::::::::::::::::::::>>>>>>::::::::::::::::::::::::::::::::::::::::::::::----------::::::::--<69999++%8tttyt88ttteeuttaatt&*****&&$$*t&&*******&%#%&%#%*ttt****&$##O#$$&*&&$@OOO#&t**e****ett88***e**et8888****tttt****eeeetttttttuuttuuuu*88uuapjkjjjjssssjjjjssjjppppjjjpppsjjjppsjjkkkkkkkkkkkjjkkkkkjjjkkkjjjjkjjjjssssjsppppsssppssppppjjjppaapauuuuaau**==&%%8*ujjjkkpjkknbbVPZUUCVbbbkjjpppaaaaaau**uuuiuttttuiaauuu&%%%&&&&*8tuutttapjjkkkjkjkkkjjkkjpaaue&$$###$$&*****&&&&&$OO@OOO#&%OOO@O@%&&&&&&&&%@O oo+++++.4><66+ XX.<,,222>>>>>>>>:::::::::>>>>>>,,<---<,<::::::::::::::::::::::::::::::::>>>>>>>>>>>>>>>>::::::::::::::::", ":::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::22222::::::::::::::::::::::::::::::::::::::::::::::::--<:::223,,1.XXX.XX++ oo#=qu=o ###o o+%%##%qpjkkkkkkjppppppppaaaauuuuuuute***e*******&****&**&oo%&#oooo +++6611;;.....+++++OOOOOOoo@@@@%$#O++++oooo ooooooOOO@@@ooooo ooo+oo+++++.1<,:::44:4225:>,166+@OOO######++..;--::4::::::::,,,,,,,,::::::::::::::::::::::::::::::::::::::::::>>>>>>:::::::::::::::::::::::::::::::::::::::::::::-----------::::::::-<7fgyytytttt***ttetuuteetuait&&&*&$$&&O&&*&&&*******&&&&&%%&ett*ett*&&&$$&&*eee&&#OOO#&&&*eeeeett8***ee&rettt88eee**t8t888teeeetttttttuut*tuuu****wapkkkkkkjsssjkkjjjjkjjjjjjjjsskkkkjjjkkkkbbknVVVVVkkkkkkkjkkkkkkjkkkkkkjjjjjjjjjjjjjjjjjjjjjppppsppaapjpu*upjpajjpaa*=*aaapkjkjknksbkkCCZCZCVkjspaawuu***tuuttiaiuiaaaaaaiiu*==*****uuiaaaaapjjjjkjjkkkkkkkkkkpau*&#O##$&&*eee***&&&*&$O@@OOO@#@OO@%&&&&&&&&&&&#OO +....2:-16+XX..<,>:>2>>>>>>>>::::::::>>>>>>>>>----,,,::::::::::::::::::::::::::::::::>>>>>>>>>>>>>>>>::::::::::::::::", ":::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::22222::::::::::::::::::::::::::::::::::::::::::::::::--<::4444>--..XX+++++ % #*asu==%&%# o+%&% %qjkkkkkkpaaaapjjjaaaaaauuuuutteeeeeee**&$*eee****o o%ooooo +++71<-->2,--<16666OOOOoooooooO@OOO++++oooooo++++oo OOOOOoOOoo@@+o ooooo+...;<::444:>3,>>,,79999%@@$##%%%++..;--:::::::::::,,,,,,,,::::::::::::::::::::::::::::::::::::::::::>>>>>>:::::::::::::::::::::::::::::::::::::::::::::-----------:::::::::-<799ytteeuueeutetuaueeeee*&&&8&&$O#*&O*$$**&$&&%&&&&&88*&%$&*tttut*&&**&&*eeeett*&#OOO$&*etttttt8*&*reeer*e888eee*8888888teeeetttttttuue*tuaauuuuuupjkkkkkjjjjkkkkjjkkkjjjkkkkkkkkkkkkkkkkbVbbbbVZZVbbkkkkkkkkkkkkkkkkkkkjjjkkjjjjkkkjkkkjkkkjjpppjjsppsjpu**ujppzVVkkppaw*waapkjkVkakkbUUVCVbnkjsauuuaaauuuutuuajjphjjjjjpppp888uuuuuappjjjjjjjjjjjjjkkkkkkjpjjpat&$$O#$&*tuute**&&&&&&$$$$OO#@OOO#&&&&&&**&%&&%OOO o+++....2--<6....;<:--:2>>>>>>>>::::::::>>>>>>>:>---->>:::::::::::::::::::::::::::::::::>>>>>>>>>>>>>>>>::::::::::::::::", ":::::::::::::::::::::::::::::::::::::::::::::::::::::,,,:::::::::::::::::::::::::::::::::::222222222222222222222::::::::,,,:::::::::::::::::::::<<<:444444>;...XX +++o o*pjjsssau*%o 88=%o#qpjjkkpkkjauappppapppaaauaaue***&*******&*eee**&&&%@OOO@@%@oo+++X;--:,32:32>;-;16OOoo@++++oOO@$$Ooo oooo ooooooooOOOOOOOO@@@@@@oo#Ooo+++1..<,2444<<<;;;,,7666++++ o%%+++666;--<--:::::::::::::::::::-----::::::::::::::::::::::::::::::::,,,>>>>>::::::::::::::::::::::::,,,:::::,,,,,,,,:::::---::::::::--------::<<.++%&eeeeuw*&ett*$$&ee*&&****%#&&%%&*&&&%#OOoooooooooooOO#*tuttteettteeeeee*t8*&&#OOO$*ttttt*tte*reeeeettett&***8ty88888teee**eeettt&*tuuuuuuapawujbkkkkkkkkkkkkkknVVbkkbnkkbkkkkkkkkVbkbVVVVVVVbVVkVbkkkkkkbkkkkkkkkkkkkjjjkkkkkjkkkkkkkjjkkjjpppaaapjjjkkauujkVVkkpkkkpwwwuskkkbbkkbCUUCCCVVbsappajpuuuuuuijkkkkkkjjjjjjjjpppjjppjjjkkkjjjpsjjjjkkkkkkjjpaaauu*#O#&$&euuuttttte&&&*&$@OOOOOO$&&&&&&**&&&&$OOOOO o++++1..;<>>-..6.X.;<>>>>>>>>>>>>>>>>>:::>>,,,>>:--->,33,>::::::::::::::::::::::::::::::::>>>>>>>>>>>>>>>>::::::::::::::::", ":::::::::::::::::::::::::::::::::::::::::::::::::::::,,,:::::::::::::::::::::::::::::::::::222222222222222222222::::::::,,,:::::::::::::::::::::<<<:4444442<;... +++ %*ipapjsau*$oooo &8=%#%*apapaupjuapjpapjjjjppaauauutttttee*****&******&$@@OOOO@%#@oo XX.;<<11,>>2>;;..+ooooo+++o OOOOOooooooooooooooooOOOOOOOO@@@@@@@@#OOoo+++..---::4..<;;;<,<<<<;....166116676;--<<-:::::::::::::::::::-----::::::::::::::::::::::::::::::::,,,>>>>>::::::::::::::::::::::::,,,:::::,,,,,,,,:::::---::::::::--------,:<-...oo&euuutweeuue&&e&&&&&***%*&#&t*O&%OOO###o@%&%%%%oooOO$*ettteettttteeeee*&&&&&%OOOO&tteetetee**etttettttueee8tyyyy8888*&&eeettttttuuaaaaaaapkjqqpkkkkkkkkBNxkkkbVkbkkbkknbkbbknkkVVkVCVVVZVZZVVVVVVbbbkkkbbbkkkkkkkkkkkjkkkkkkkbkkkkkkkkkkkkjppppaaauappaauuajkkkpkkVkjuwasjjkbbbkbbVCUCCCCnkssjpppaaauu*uuapjkkkjjkkkkkkkjjkkjjkkkkkkjjjjjjjjjkkkkkkkjjpaaut*##$$$&tiauuauttt**&&&&$@OOOO@$&&&**&*&&$$$OOOOOO o+++1;.;;,:><<666.;;>>>>>>>>>>>>>>>>>>>>>,>>>>>::--:>,322>::::::::::::::::::::::::::::::::>>>>>>>>>>>>>>>>::::::::::::::::", "::::::::::::::::::::::::::::::::::::::::::::::::::::::,,:::::::::::::::::::::::::::::::::::222222222222222222222::::::::,,,:::::::::::::::::::::<<::4444442<;;..oo++o iiaaapsspat&#o o%%#%===w**=#upuuajjjjkkkkjpppaauuttttuteeee****&&&**&$%%#OOO#%#@oo .+++++.<-;<;.X @++o +++++ooOOOOOOOO O@OOooOOOoOOOO@@##@@OO@@%%#OOoo++++...-<<,X.+...;<--------1111;;1671<--<<-::::::::::::::::::::----::::::::::::::::::::::::::::::::,,,>>>>>::::::::::::::::::::::::,,,:::::,,,,,,,,:::::---::::::::--------::<-..XX o*uuteutetteret$&&&&***##%&&&&&*&##&***%&&&%ooooooO$&**eeeeettttteete*&&&&*t*&OOOO*t**teeeettttyttttt8*ttttyyy999%&8**&eetttttuuuuuaaappsjjjjppjkxzzxccyyytuajkbVVVbkknbbZZVbkkVVkVVVCCCCZCZVVCZVbkkkbbbbbbbbkkkkkkkkjkkkkkkkkkkkkkkkkkjkkkkjpappaaaauauaapppjkkbVVVVkjaapsskbbbbbkbCVbbnVVbbkkkkkkjau***wupkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkjppau*&$&***euaau8aiuttt*&&&&&#OOO$&&&&&&*&&&$$$@OOOOOOo++++..-;>>:>,6666<<<>>>>>>>>>>>>>>:>>>>>,3>>:--::::>2222>:::::::::::::::::::::::::::::::::>>>>>>>>>>>>>>>>::::::::::::::::", ":::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::2222244444444444444442222222222222:::::::::::::::::::<::2444444::<<<>>>>::::::::::::::::::::::::,,,::::::::::::::::::---::::::::::::::::---<<-..XX%ttteuueee***e**&&***&#o#&&o&i&%&*8t8*%%%+oooo%oo#&**&****etttttttte*&OO@&**&#$OO$*etteetuiyy9+69yhpaitttt8996+X %8tteeetttttuttuuuappsjjpjkkkiiihhy99698yyippVVVVVVbVVbCUVbVVVVkjpkZAUCZVZZZCUUCVbkbVbbbbbbbbbbbbbkkkjkbVVVksjkkjsspuapkkkjauajjjkjapupkkkkkbZZZZVVVVjssjjjkkbbbbbVVbkbnVVVVVbkkkkjppuuapjkkkkkkkkkbbbbbbbkkkkkkkkbbbbbkkkkkkkbkkjjjpauu****tttupppauaaaauut*&&&&#OOO***&&&&&&&&$&&$OOOOOoo+++..-->24:>,16661<>2>>>>,>>>>>>>>:>>>>:>>>:---::>>22222::::::::::::::::::::::::::::::::::>>>>>>>>>>>>>>>>::::::::::::::::", ":::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::2222244444444444444442222222222222::::::::::::::::::::::244444:::<<<< Ooo %uijpaaaa=*8t8&#oo &*%=qw#*uu**upkkkjppjjjjjjsppaauutttttttteeee******&&&&**&@OOOOOO@@@@%OO#OOOO+6666+@OO+++++++6++++@OOOOOOOO@OOOOOOOO@@$&&&$$$#OOOOOO#$OOOO@@@++++66++.X.666.;<<<::::::::::<<<<,<<<<:<>:::::---::::::::::::::::::::::::::::::::::::::::::::::::,,,>>>>>::::::::::::::::::::::::,,,::::::::::::::::::---::::::::::::::::---:,,:<;..%8ttuue*&&&&&ee***e*&o&&%&tt8ooo%&&#ooo+%%&%%%@o%&**&****eettttttte&$%%%&*8*&*&$#*uututuihg96..698888utt%++XXXXX+&8**eetttttu*tuuapppspjkkkjhq9+XXX.6+69yyipjVVVVVVVVVbVVVCCJVzkkssbVCUCVZCCUCCCCVVVVVVVVVVVVbbbbbbkkkVVkVVCCVZZVVbkjkjjjjjpu#appkkjjjpskVPUCZVZZCVVbkkkkkkkkkkbbbVVVVbbbbbVZVVVVVbkkkjkkkbbbbbbbbbbbbbbbnnbkbbbbbbbbbkkkkkkkjkkjjjjjpauutettttapkkjjupjpautt&&&&$@$$***&&$$$&&&&&&$OOOOOo+++...-:244>;;<<<<<,>24>>>,>>>>>>>>,33,>::>:----:>>22222455::::::::::::::::::::::::::::::::>>>>>>>>>>>>>>>>::::::::::::::::", "::::::::::::::::::::::::::::::::::::::::,,,,,,,,,,:::::::::::::::::::::::::::::::::::::::::2222244444444444444442222222222222:::::::::::::::::::22222222:::<<<<< O#o o8uijjpaau#%*88&o oo%=##=*tupauauajjkjjjsppppsspaaauuuuuuuttteeeee&***&&&&&**&&$$$OOOOOOO@OOOOOO@%+666+oOO ++++66..+++@OOOOOO#$@OOOO@@$&&&&&$$@@OOOOOOOOO@@@@@@@%@+++++++.+661<<-<:::::::-::<<<<-<<<<>>22::::------------::::::::::::::::::::::::::::::::::::::::,,,>>>>>::::::::::::::::::::::::,,,::::::::::::::::::---::::::::::::::::--:::44:>-XX%yutt***&$&&**&&*e*&%oo&ty*o%###%#oo+%&888&%%%#%&*&$*****eeettttte&$*&&&&&&&&&$#&uatuuuiy97-3<;;1+%=au8o XX..XX+&***eetttttutuaappppsjkkkkh8961...<<69yyypkNVVVVZVVZZCCVPTBhkjkVZZVjbZCZCAUQUCZZZZVVZZCCCCZVVbbbbbbbkVVkkVUCVZZVVVbkkkjjjpat#upuajjjjjknZUUUAZZCUCVbkkkbVVVVbbbbVVbbVnbbbbVVCCCUUCVVVbbbbbnVVVVnbbnVbbbbVVVVbbbbVVbbVbkjjjspapjjkkkkjpaauttttuapjjkkapppatet**&&&$$$$&&&&&&&&**&$$OOOOOO@+++..-->444><<<;..<>224>>>,>>>>,,333333>>>>----->>222222444::::::::::::::::::::::::::::::::>>>>>>>>>>>>>>>>::::::::::::::::", "::::::::::::::::::::::::::::::::::::::::,,,,,,,,,,,::::::::::::::::::::::::::::::::::::::::2222244444444444444442222222222222:::::::::::::::::::22222::::<<<<:,, #&% %uphjjauu=&=**&%o o###%#=uutu*=*=*apppjkjapppsjpaaaauuuaauttteettt*****&&&&&**&&&&$$$$OOO@@OOOO@@6.;;;. @@+++...11.XX++@@OOOOO@$$$$$$$$&&*&&$@OOOOOOOOOOOOOOOOOOOo@@@@@@@@61.;<<--<,,,,,,,--<<<<<<--<,,222::::------------:::::,,,::::::::::::::::::::::::::::::::,,,>>>>>::::::::::::::::::::::::,,,::::::::::::::::::---::::::::::::::::<<::44444>-X+tyt8***&$&&&&$$*ee*&Oo8t&#%888*&&*88889%+%%%%#%&&&$&&&**eeeteett*&#@@@OOOOO%$$&*iituuu897,444>119ihiut%+666116988*eeeettttttuaaappppkkjjkh%XX.<<<<-7yhchpddVVVZCCZCCQUUTUh%kipVUUUbbZCCUUZU~QUUCZVVCCCCCCVVVVbbbbbVkVkaujVPVVVVnbkkppaaau*=uappupjjjkVVVVZCUUAUUZVVnbknVPCVCZVVVVVbbbbbbbVVbbVVCCUUCZVVVVVVVVVVVVVVVVVVVZCZVVVVVVVVVVnkjpaapjkkkkkkjppaiuttiapjppjkjauaat***&&&&&$@#$&&&&&&$&*&$OOOOOOO++ XX.;>2444>,176.-<>2444><<>>,33333,33,>::>--->>>>222224444::::::::::::::::::::::::::::::::>>>>>>>>>>>>>>>>::::::::::::::::", "::::::::::::::::::::::::::::::::::::::::,,,,,,,,,,,::::::::::::::::::::::::::::::::::::::::2222244444444444444442222222222222:::::::::::::::::::2222:::::<<<<::, $*& =ihphpuu*=*=&&%%%%#&#%**wpauu##==**pjpaapppapsjsppaaaaauuuttteettte***ee*&&&&&&&&$$&&&$$$&&$$$$@++11>;1+%&96+.XX....X +@OOOOOOO@$&ee*&&&&*&$@OOOOO@OOOOOOOOOOOO OO@%&&&%@61..;<--<<<<<<<<<<-<<<<<.-<,2224:::-------------:::::,,,::::::::::::::::::::::::::::::::,,,>>>>>::::::::::::::::::::::::,,,::::::::::::::::::---::::::::::::::::<<::444443,.+9t*****&$&&&&$#&**=o&t*%&888tttt8ttty9o o8+%#%$&$$$&&&*eeteeeee*&#@@%%@@#&&%&tiaaaett91-:4442>;19qtuiy999999998t8e**eeetttttuuaappjjjkkk8 X...--,,7cGWKNNNNNVVUQUUUUUPUBipJu*kVVCCZCZUQCkkkVCQUCCCCCCCCCZVCVVbbbbbNkkkjpkVVVVnbkjjppauuuaauujkppjpkVVVVVZZCUQQZbkbnkjjkbkjkVVkkVZVVVbkkbnVVVVVVVCUUUUUUCVVVVVVVVZCZCCCZZCCZCCCZVVVVVnkjjjjkkkkkjjjjpaauteeppkkjjknzp8uau**&&$$&$O O$&&&&$$O&&&OOOOOOOO++XXX.<34444:,777<;,>2444><<>>,33333-:::---:--:>,,,222244444::::::::::::::::::::::::::::::::>>>>>>>>>>>>>>>>::::::::::::::::", "::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::,,,,,,,,::::::::::::::::::::::::::::::::,,,,,,,,::::::::>><;;;<>222><;.. @% 8paiqqu8%#qu8====#=#=uuuiai8=***=*=kVVku=psjjjspaupappuuaauttuutttte*****&&&&&&&&*&&&&&&&&$$$%&996..16+&&$%o++X;1X6+oOOO$$+++++%&9&&&%%@@O@@@OOOOOOO@@@@@@6.XX ++++++++...:::::::::::-------------::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::,,,:::::::::::::::::::::::::::::::::::::3444444::<<<,444>-::44443:..+9yitte&e*$&#==$$*=$$$$=**tyyi8*uueutt&+6<537369&O$r&&&&&&*eerree&%%$**&&88*eeeuuaaahh9.X11->>>>--7fg9611<;;.1699&&*reeer*&**euuaphpppkkku X1,-:3..9*uUZZQVZbVZCUUUUUUUU^z kkuikBkVUCZZCUCVbkkkVQQUVCZVVVVVVVVVVVVbVbnVVVVbbbbbbbksa*uppaappkjkkkkkkkkkkkkVZUUPUCVbkkkkkjssjjjjkkkkbnVVVVVVVCPPPCVVnbVZCCUCCCCCUUUUUCUUUCCCCCUUCCCCZVbbmkbbVVVVkkjjpautttuuuupkkkkkkaaute*&&&&%%%@@o$$$$OO$&$$$#OOOOO@+6,>::;..;<>445;16%@O ..;22>--,>>>>>>>::::::::::::::::::::::::::::::::::::::::::::::::::::::::>>>>>>>>>>>>>>>>::::::::::::::::", "::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::,,,,,,,,::::::::::::::::::::::::::::::::,,,,,,,,::::::::>><;;;<>222><;.. %&o qpqiq8q*=*aaaiu*==*=*aaiiui8*=====qjkVVk8*skkjspa*wwuauuauuutuuuttte****&&&&&$&&&&&&&&&&&&$$&&9996..66+&&$&%++X...99%%###@&&99&&%%&&%@OOOO@%@OOO@O$$@@oo 1...+++++++.....:::::::::::-------------::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::,,,::::::::::::::::::::::::::::::::::::::::4444:<-<<,3441,>::44:3<..+%&*tt*&e****=##=t*=====&**966++&*&rrdi+X-222>69t&$O$$$$&&&&*&*ee&&&reettttteeeeuuaahy6X.;;;>>>>--,776;.-;;-..1+++++#$$&*reeeeetaphpjjkkp* X.322319lkVZUQUUVVZAUUUQUQU~^!Vukk8=kUTUUUUUQQQUUUCZVbbbVCZVVVVVVVbVVbkkbnnnVVVnnbkkkkkpwuaaaauw*ppkkjjkkkkkppjbZVVVCZVbbVbkkkbksjjkkbkkkknVVVVVVPCVVVVCCUCVbbVUUUUUCCCCCCCZZVVZZUQQUCCCCVVVVVVVVnVVkkjjpttttaapapjkjpppjpatte*&&&&@oOo%&$$$#O$&*&&&$#OOO@@+1<::>;;.;;>24>;.+@OO++.--:>,7>>>>>>::::::>>>>::::::::::::::::::::::::::::::::::::::::::::::::>>>>>>>>>>>>>>>>::::::::::::::::", "::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::,,,,,,,,::::::::::::::::::::::::::::::::,,,,,,,,::::::::>><;;;<>>22><;.. @@ oqaipiq8**uappjpq%=*=*iaaaaiiu*====qajnVVswskkjssaw##waaaauuuuuuutttt****&&&$$$$&&&&&&&&$$$$&&*9991;.66%&&$%%++6..69988tttt&9889%%+&%@OOO@$@%@oO@@@%@++XXXX;..166++XXX...;;,,,,,,,,::::------------::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::,,::::::::::::::::::::::::::::::::::::::-;>222<;.....-<:..---::--...+%%%tttett**&&=*uai8***&&%+6.XX +%&&rrt8+X;>>;19yye$$$#o#%%%&$$**&&&etuttutttuuteuapc9X.1;-2>:>>:--<-..-<,>--;;..X.+OOO@$&*e&&&*tappppjkat9+.33>-X.9kIPCPVQQCUQQQQQQ~Q//^^ZJxkxJUUUUQQQQQQUUCCCVbbbVkbZCCVVVbbbVbkkkbbkbbbbVkkkjjjjpkkkkkkpaaaaauapuupkkkkkkkkkbVbbnCCVVbbbkkkkbbbbkknnnnVVnVVVVCPPCUUCVVCCCCCCCCCCCCCZZCCCUUQQUCCCCCCCCCZVVVVnkjpaiuuuuapppjkkjpppppu**e*&&&%@OOO%&$OOO$&*t&&%@OOOO@+..-:>>;;;.;:>41;.+@@@@661,<;<1>>>>:::::::>>,,3::::::::::::::::::::::::::::::::::::::::::::::::>>>>>>>>>>>>>>>>::::::::::::::::", "::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::>><;;;<>:42><;.. OO %qipjpaiuuaapppji**q*8uuajjppi8*8*=quskkkjujkkjsssp==uppppauuuuuttttte***&$&$$$$&&&&&&&$$$$$$&*996...69&&&&$&&991X699888&@Oo o%%OOOOO$@%@o@@%+++......;;;<111....;;;;>::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::--------::::::::::::::::::::::::;;;<;-;.......11.X..;<<;..X++&&*euuuat&&&8uiiiiiy889++..1X.++%t8r$&yy96;1;;19yyy**&%++%%$$$$&&&&*ettiiuttuuetiahh9.;1;-24::::---<--:234423,<-..1++++@%&&&**&*tuuiuapuii9X;>>><.X k^TUPPUUUUUQQ~~//~U^^VBBNVPTQQQQQQUUUCZVVVZVVbbVbjkVCZVbbbVVbbbkkkkkkkkkkkjaajknkkknzkkjputeua*uaa**akkkjauuajkkVCVkknVkkkkkbnVnnnnnnnbnnVCUUCVUPCVVnnbnVVVVCCCCCCCCUUQUUUCCCCCQUUCCVVVVVkjpauijpppjjkkppaaappat*&&**&&$##@@OOO$OOO@%&&@++@@O@@++..-22><;;;;;>2..+%%@O@+67771;.::::::::>>>>>,,,::::::::::::::::::::::::::::::::::::::::::::::::>>>>>>>>>>>>>>>>::::::::::::::::", "::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::>><;;;<>:42><;..OO *qupjjjjppjpjpajjpauuuauajjaau*=**=sjbVkkkskkkkjssjauapaaauuuuuut**te***&&$&&$$$&&&&&&&$$$$$$&*996X..+9&&**ett896.9yyyt8&o +oo oo%@OOOOOOO@@@@@%++X...;;,,2>>>;;;;;;<;>>>2--------::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::--------::::::::::::::::::::::::;;;;;;166%%@++69+++666616+++%**e*euuut**iy8%%69y99961.;-,-;1X69yeretihh..;;;;77f*8y89%%&&&$$$&&*$&8ttiuueee*tiiy97;;>>>244:::,<-,:::4444444:::-<..+66&9*tttt&&**t=eu*ui+.;>-:37322>;;;;;,,.169@OO@++69961.::::::::33,,>>>>::::::::::::::::::::::::::::::::::::::::::::::::>>>>>>>>>>>>>>>>::::::::::::::::", "::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::>><;;;<>>22><;.. o*qqpjjjjjpppkpapkkjppjjaappiut==*uuaakVVVbkkjjkkspppaaaaaaaauuuut***e***&&$&&$$$$&&&&&&&&&&$&&*89+X.X+9&&*eet889999yyyyt88*888*&&&&##$$$$$$@@@@+%++...;>223222>:-;;;;>>>244--------::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::,,--------::::::::::::::::::::::::..;;;1699&&&%&*8%%&99999%%&%%==*$===**8yi%XXX...661;;;>>>-<;.19geeetuii8XX;1>>23+98y999&&&&$$&*&&&**88*&&&&&8y86;<,-:23444:--,,<3,:444444444444:.;16666&&tte&&&&&#$&*ty+X.,,----X.hL^^^TTUUU~^^^^^/^!!PkVkkVU~QUQQUUUUUCCCZVVVCCVbbbbbkpkkjjkkjsjpppppaauuahi8*uau888*=***uuttt**appaappapjkkkkkkkbnVCVVbbkkkkkbVVVVVVVnbbnVVbbbbbVVCVVVbbbbnVVVZCUQUUUUCCCUQQQQQUUUCCCZVkkkkjppjkVVVVVVkkkkkdae*****&$$$OOO$$$@&&+++++.66666+.XX.-<3342><;;<,,,6696+o@9++6661..::::>>>>333,>>>:::::::::::::::::::::::::::::::::::::::::::::::::>>>>>>>>>>>>>>>>::::::::::::::::", "::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::>><;;;<>222><;.. oo o=8qippsjjpppjpapjjkjjjjpppauut**wpkwwakbbkkkjppsspppuuaaappaauuuuttee***&&&&$$$$$$&&&&&&&&&&***89+XXX+9&&&*&&*899y899&%ooo+&&&&&%@O$$$$$$$$O@@@%%+...;>24444222>>>>>>>>>244--------:::::,,,:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::,,,--------::::::::::::::::::::::::..;;;169&&&$$&*tttuiiiy88tiu*===$$$#$&*y9XXX1<..;;;;>>22377,;<7ft**ut&*p+XX11223X+699999%&&&&**&***&&&&$$&**889+-:::::44::,--<<-:,,3244444444444><;;.1+++@&&$&&$##$$*ty8XX,7,,3:1XX69hRTTTT^^^^^^^^^TTPkjkVCUUQQQUUUUUCCCCCCVVVVVVbbkkkksssspppaauuaauuu8iai8&8y8**uuqquauupppauuapppauuapknVVCCnVVVVVVVPPPVnkbVVVVVVVVVnnVVVbbnbbbnVVVCVVVVVVCCZCCCCCCCCCCUUUUQUUCCCCVVVkkkkauuapjkkkkjkkjpaue**&&**&$#OOOOOO$&&996+....1111..X.-<,24442>;;<,77666++++9++......::>>>>>>,,>>>>>>::::::::::::::::::::::::::::::::::::::::::::::::>>>>>>>>>>>>>>>>::::::::::::::::", "::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::>><;;;<>222><;.. #&%#=8q=qipjjjkpjpppppkkpppppjatuuu*ujVbkjkkkkkkjauapjppaaaappapaaaauttee***&&*$$$$$$$$$$$$&&&&**&&*9+XX +*&$&&$$ty999+ +%%%%%%#$$$##OOO##OO@@%%+X..;>244442222>>>>>>22222:::::::::::::,,,:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::,,,--------::::::::::::::::::::::::.;;;;;+%&&&==*tujjkkjpuuapkjpuw*=*=$$%%996.;<--3.->3332>7f7<<--7%uittttit%XX.-52.XX.6999%&**ee*&&***8tuu$etet8% 3::22:-:-,,<-;...;<<<:::344444::3>--;669%%%@$$$OO$$$*t8yy1X;-:3-;;1XX9EYTT^^^~~^^^PC^TVkkbVUQQQQAUUUUUCUCCCVVbbVbVVVbkjjpsjspaaauuuuuuuipi* 8iyaajkkkkkpiapu8ua*upkkkkkknVVVVVVVVCCCVVCPPPPVVCUCCCVVVCCPCVVVVCPVVVVVVVCCVVVVCPUUUUUUUCCCCCUQUUUCCCZVVnbkkkkp8*usssppppppautttee*&#&&&$#OO$OOOO$+666.X....-;;;;;-,,2>4442>>,,177....+++6.X..;--;>>>>>>>,>>>>>>>>::::::::::::::::::::::::::::::::::::::::::::::::>>>>>>>>>>>>>>>>::::::::::::::::", "::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::>><;;;<>222>;;..o %88upiiqqpjjsjspsjjpapajjpaajjia*appVbbbVVVVbkjnkapjpjpppppppppaaaaaiue******&&&&&&&&&&&&&&&$$&$$&ty9 +&&&&$$&&**% o%%%++%+%%%%#O$#OOO@##OO@@@++6.;<>2244222>>:;;<<>>>>>>:::::::::::::::::::::::::::::---:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::------:::::::::::::::::::::;;-;;..98****=upkkkksaw==askkkjpaut*&&&691X-,2:4<;:>232,7761;<>:X+8ii*&*ti8%66;11XX11X199**&&ette*$##*tee&rett%o::>>>><;;;;;<.666.67117-<,,,::--:>,,;.+6&@@@&&&&#$#O&t8%891;--3::3-;.LLhhz^^U~^/^'k V^CbVkkbVZCAUQQQQQUUCCCCVVnbVkbbkkkaupaau*uwuuuaaaphahhphckxapkVkjjpjkVVkbVkkkjjkkjuVPPUPPPVPCVVVVVVPPPVVPPPVCCCPPPCVVCVCPUPUUPCVVCCVVVVCUQQUQQQUCCCVVCCCVVVZVbbkkjspjjjat**uuaaaauuuuuue**&&&%$$$$$OOOOO@@@6+X....-;>>>>>>>>>>>2224422>;<6611...;;....--;;:>>>>>>>>>>>>>>>>:::::::::::::::::::::::::::::::::::::::::::::::::>>,,>>:>>>>>>>>::::::::::::::::", "::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::>><;;;<>222>;;.. &ut8qqaapjjjsjjjsjsaappjppjkkkja=ajkVVVVbbbbkkppjkjppjppppppppppauuuutt*****&&&&&&&&&&&&&&&&$$$&&&*t8@@%&&&&&*$$&&+ o+@%%%@++oooO#$##$#OOO@@@$$@@+++6.;<,>244>><<;;--;;;<<<>>:::::::::::::::::::::::::::::---:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::------:::::::::::::::::::::->>>,;198**uuuajkjdpkkjapdaskkbkjppiy8961;;,:-:4<<::::>;166..->:1X+9iitt&ahhh9.XX171..1+88***tut***&#O#&e*uddpt8;--..;16;..1669989996661.....;;<;;;...++%%&&&***eee&$%*ty8+11,7442-,.cc98jT^~^~^^]VaVQUUCZbkjmCQUCCUQUCCUCCCCVbbkkVVbks*aauw==uuu==apuujuuihjkkkjjkkkkknkkkkbVCVZUUPVbnVbnVVPUUUPCCCCCVVVPUPCCPPVVVVCPUPCCCCCCPPUUUUUUUPCCVCUUQQQUCZZVVVVVVVVVbbVbkkkkjjpaut*&*t=*uauiiuuttt****&&%$$$$OOOO@@@@O66..;;;,>>>>>>>>22>>>>22333>-..611..;;;;--;-->>4>>>>>>>>>>>>>>>>::::::::::::::::::::::::::::::::::::::::::::::::>>>>>>>>>>>>>>>>::::::::::::::::", "::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::>><;;;<>222>;;.. #%o#*uiaapjkbbkkjjjppjjppkUUbuau*pjpkVkkkVVkpua*akppjjjjpppppaauuuuutt*******&&&***&&&&&&&&&$$$&&#%*8&&&&&&&**rr**&%&*&&&$@@++ooo@#$$$$OOO%%%+@@+++X..;;<<::::--------<<<<<<<<:::::::::::::::::::::::::::::---:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::------::::::::::::::::::::::2>2,;1988uaaapjkkjdddaasjssjkVkchhiy96.X;,,:-44<<,:::;1X++XX.>21XX199*8ttupkh8+1XX;;;69y8&&*tt*eett8&*tietuapii99761.XX.+6999998*8t8899+++.XX..1.X.++++&*8te***eudpi**8*iy91.,33:-,.6h9%=kZU^~Q~^~U~~UQQUCVbbCQQUCCCCCCCCCVbbbVkkkksjsuasskjaa*=uppjkjpauijkkjjjkknbVPUUPbskbVCCUUCVVVZVVVCPPPPPCPPPPCCCUTUPPPPVVVVCPPPUUPCCCCCCCCCUUCCUCCCUUUCbbbbbbbbbbbbkkjjjkkkkjpaau****&*$*tttttt88&&$$$$&%#%$$OOOOO@@@++71..;;,3>>222>>>22>>>>>23332-..+11.;;>>>--;->444>>>>>>>>>>>>>>>>::::::::::::::::::::::::::::::::::::::::::::::::>>>>>>>>>>>>>>>>::::::::::::::::", "::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::>><;;;<>222>;;.. o# #*qwuapkVVbkkkkjjjjsjkVUUVj*u8au=upapkVVku#**uuupjpjjppppaauut***e**&&&****&&****&&&&&&&&$$&&&#@%&&&&$$$&&*eeet888t*&&$$%%%%%##$$$$OOO%&&%+++XXXX..;;;<<:::--------<<<<<<<<:::::::::::::::::::::::::::::---:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::------::::::::::::::::::::::2:2,;1988uaauaajkkjuwudassjkjkkch9661XX;;--:334.<,2>>16698+X.>4>--..X.+hy8upkkkcf11;X1yit&&eue=uuiy899888ippp*&69999999+%%*8888**8uiit8*&%+++++6++%%*8**tuuue*=&eakkju*$*ti9.-::::7,322222>>>42>><<>24442;;66++1;>>>>>--:>444>>>>>>>>>>>>>>>>::::::::::::::::::::::::::::::::::::::::::::::::>>>>>>>>>>>>>>>>::::::::::::::::", "::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::>><;;;<>222>;;.. %**====ajkbVbskkkkkjsskkbVQ~Vkap8=w***papjja*=%u*#*pjpppppppaipaut*****&&*****&&&**&&&&&&&&&$$**&$&&&&$$$$$&&&$$&**&&&&&$$$&%%%@@#$$$$##%&99+X11...;;;<<::<<<<--------<<<<<<<<:::::::::::::::::::::::::::::---:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::------::::::::::::::::::::::,::,.19**uuuwwqppauupssauwskjpah91X....-;--:33:.<,2>>16ihi9X.>4,,3,-X.1.+988tpkhccg;X69hie*tut*tii9611XX %**$ X o%9**&*===*uppaaaapau8==**888888tttuuuuuuaauw*$&eupjpuatukzh7344---.zLBJPTQQQQUPUQUUQAUACCUQUCCAUUCCCCCZVVVbjajjjssjkpjjaappkjj*=ujkkkppsjkkkkkVVkpskbZUUUQUUQQQQUUUUUUUUQQUUU~QQTUPCCCCVVVVCCCVVCPUUPVVVCCCCUCCZZCCUUUUQUUUCVsbCUCVkkksaasjjjjjjpppppat&$$&&&&&&&8tt9+%%&**&&&&&%OOO$@O@++666<--;,>>22222>>>>42>;;;<>4442<166++61>>>>>;;;>444>>>>>>>>>>>>>>>>::::::::::::::::::::::::::::::::::::::::::::::::>>>>>>>>>>>>>>>>::::::::::::::::", "::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::>><;;;<>222>;;..% #ij* =%akkkkbkkkkkkjsskjkb~^njjju=qpjkVkjja8**=u=otaajpppppppappauuttttte****&&&&&&&&&&&&&&&$$&&$$&&&$$$$$&&&&$$&&&&%%&$$$$$@o@@#$&&&&&&&996.X;;;;>>>>>:::--------:::::::::::::::::::::::::::::::::::::::::---::::::::,,,,,,,,:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::------:::::::::::::::::::::<<--<.69&*wuuwwwuuuajkkssawpsapag7;.;;;<-<,,,:::-<:>>>11ihi&X;24::::42>;-19998iu.7ghf119ytt*euuu %96;;55719&&**tttttuuuuuuapdppsjjdapdaauuuuuuuuaapaaaaauuuapppa$re&*aspkppBBh9733-X.6HTITUUQUQQUUQ~QQQAAACCCCUUQUCCCCVbVVbVVVVbkkkkkkkkjkjkkppu=ww*upjskkkkkbVVnZUPVVCUUQQQQQUUQQQUUUUUUUUQQQ~^QUUUUCCCPUUUUUUQPCCCPPUUVVVCCCVZZZCCCCAUUQUCCUUCCCCCZVVVkkjkkkkjjjjppjjpue***&&&&&**89%+ +&**&&***&$O@$O@%666..---,,:::222>>>>>2>>;;;;>2443,166%++1;>>>;;;;>244>>>>>>>>>>>>>>>>::::::::::::::::::::::::::::::::::::::::::::::::>>>>>>>>>>>>>>>>::::::::::::::::", "::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::>><;;;<>222>;;..%##up8o%#qpsjkVVkkkkkkkkpskpbVknjka*ajkVVkjpa*&&**%%8apjppppppppaaaaaaaauuttte*&&&&&&&&&&&&&&&$$&%$$$$$$$&&&$$$&&&&**&&&$$OO$$@O@@$&&*&&&&*9++XX:::2444444:::-----::::22:::::::::::::::::::::::::::::::::::::---::::::::,,,,,,,,:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::------:::::::::::::::::::::<<--<<6y&*wuuuuuipjkkbkksjppaipa7,;>>-,7f7,,,--<--:52>;Xyau%X;34:--444445-;X 88#;X;ff;XX%8****uao .1127f5198yt8u8***tuappkkbkjddjksdsdadsppaaaaappdddddaaaapsjjjtut**upsddjkh.X---71<.9hKPVVUUQQUUUACAQQAAACCUUUCAUQQCbsVVVbkkkkkkbVVkjjjjappapuaupkkpjnbbbnVVVVbVUQQQQQQUUUUQQQQUAUQQQQQQQQQQQQUUUUPPPUPUUUUPUUUPCVVVCCVCCCCCCVVVVZCCCCUUCCCQQCZZZZZVVbbkbbkkjjjjkjjjat&*tute&&ree&@+ Xo%8yt8*&%%%&&&$#O@%6+...;-;,>::222>>>>><2><;.;;>2442,<+6$%++;;>>;;.;<244>>>>>>>>>>>>>>>>::::::::::::::::::::::::::::::::::::::::::::::::>>>>>>>>>>>>>>>>::::::::::::::::", "::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::>><;;;<>222>;;.. ==*pa= #*askbnbkkkjjjkkpjkjVPkVkjqqjjajka*8u8*&*%%#%akpppppppppaaaaauuuiuuutte*&&&&&&&&&&&&&&$$&&&&$$$&&&*&$$$$&$$&&%%%#OOOO$#@OO#$&&$#&&&%+..144444444444::---:::::242:::::::::::::::::::::::::::::::::::::---::::::::,,,,,,,,:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::------:::::::::::::::::::::-<--<69i*euaaaaaiiiajkbbskspjjj*>:>,>-3flf;-,,<<--:42311hja%X;24::444444421.X9u%61<;;..Xo&**=*aph%X;724727f9988auuuuapsjkbVVkkkbjkkjksddkjjpppppdauadddaaadppsjkNdu*8uskdkjdt+1;3-,-.X+yBICCUCUCCUCCQUCAAACCCUUUUUUCVVVZZZCCZVkjkpuaauwaaauappkkkjpskkbbbkbVVnbbUUUQUUQQQQQQAAQUUQQQUAUQUQQQQ~QUUUUUPPPUQUUUUUPCPCVVnbbbVVVCUQQUCCCCCCAAAACCAQQCZZZVbbkkkkkkkjjkjjjaaa8#&*ttt**tree@ X+9yy&OO O O@&*&@@@+.XX.1,<:>>::222>>>><<2>;;..;>:442,16+$$++;-;;;..;;244>>>>>>>>>>>>>>>>::::::::::::::::::::::::::::::::::::::::::::::::,>>::>>,>>>>>>>>::::::::::::::::", ">>>>>>>>>>>>>>>>::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::o&#euwa=00%ikNNNksjkkjkjjsjkVbCVhjapbVbaskkpu##8#=ii==apppapppppaaaaaaaauuuute*&e**&&&&$*&$$&&&$&&&&&&&&&$$$&$&*&$$$$$$#O#$$$OOOO#$&&$@O&%+.....:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::---::::::::,,,;;;;;,,,,,<<<::::::::::::::::::::::::::::::::<3:-3ghipaudaaajauuupjbbkkkkaup#;-;77>;3733:::::::444333hhf7->53..;,33444433.+99g7--32:2,;698&*a8=0X.;->-796taaaqaupajpjkVVbbbbkMMbVkjjkkkkjpppatuuaaaaapjjppjknnVjwwskkkhhh7-44;->2>-79lIUUQQAQUCCCCCCUCCCCAAUUUUCVVbVCPVVZZnkkphpuuii8u8ihckxBkkkkbkVnsskUbdAAQQQQQQQQQQQQUUQQCQQUUQQUUUTTTTTTUUUUUPUUUVVVVVVVVZVkkkjjpkVZbVUUUQUCCCUCCCCUQZkbCCVVZVVbkkkkkkjppputut***ettut**g96.....6fff3::4>-X.9*$$$$#+.544<<::::::42::<---X.;<:4444:<-..@@+&6...<>:4444222:::::::::::::::::::::::::::::::::::::::::::::::::::,,:::::::::::::::::::::::::::::::::::::::::::", ">>>>>>>>>>>>>>>>:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: %*uuuau0%8ijkkNkjsjjkkkjsskVkVkjpqkVVVVnksajio#**iu=qpjppppppppppppaaaauuuutee*******&&&&&$$&&&&&&&&&&&&$$$$$$&&&$##$$$####OOO#$$$$$$OO&++....;:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::---::::::::,,<;;;<<,,,,,<<<::::::::::::::::::::::::::::::::-,,:3fhhaaaddssjkpapkkkskskVkppa7,,73>>3--:::::4::444455f7X--733.;;>5527252,.6967<.-,::3>;698%$*i80X;1>:-71X*apdpspppsjjjkVVVVZZsbVbkkkjkkbkjjjpaaaaaappi88ajjjjnVkaussjsu861-::>:233:,69B~/QCAQCZCCUUCCUCZCCACCCCCCVVVVCVbVZVksiiapaq8uuiihknzxkbkkkkbkbnVkjVUUQQUUQQQQQQQUUUQQQUUQQUUQQQQUUPPPUUUPCCUUQPCCCUCVVCVbkkkkaapppkVCCCUQQCCCCCCCCksbCCZVVVVVVbkjppauuu**tttteeettte*6+XXX....17,-::4,;.198&$$$$+1>24<<::::::422::---..<::4444:-..+@@%6+...<>:5442222:::::::::::::::::::::::::::::::::::::::::::::::::::,,:::::::::::::::::::::::::::::::::::::::::::", ">>>>>>>>>>>>>>>>::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::X+8tuaap==8ipjkkkkkkjkbkkjjjbbns*uabPCCnkquwap&i88q8=ijjppjjjppappppppaaaauuteeee**&&&&&$&&&$$&*&&&&&&&&&$$$$$$&*&#OOO$$$$OOOO#$$$###@oo&++..;;;::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::----::::::::<<;;;<,,,,,,<<<<::::::::::::::::::::::::::::::::.<<;;79iapdddskjddawwwdjuujkkxp83::32-:2:::33333,334442>-..1;354<;;;;;5;1;116991..-,:::3>;169&$$88iv91-><7668aausjkjjjkkskbVVZCAbmkbkkjjkkbkkkjhpppaaaaaa=*jkkjjkkVksksskj8+.<,3:::44:-19B^^QCCbkbbZCUQQUCCAACCUUCCCZVVVUCCUPVkspjjkpuuuuaaijkkijjkkznkakVPsjUUUUUUQQQQQUUUQQQQQUQQUCUQ!UUUUPPPPCCPUUQ~^^QUCVCCCbnbbkkjkjauwuskVVVZCCCCCCCCCVssVVVVVVVVVVkkkauuuue&&tuttteettuuu++ XXXX...;--,,,>,;698&r$$$%6122<<::::::442::----<,,44443:-.++@@6++..;;>:42222>>::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::", ">>>>>>>>>>>>>>>>::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::;.98upasa=0qhppkbbnbkbbkjkjajbkwwpajbVnkbjka*= **8u8*akjjjjjjpaaaappppaaaauuteeete*&&&$#$&&$##$&&&&&&&&&&$$$&$$&&&#OOO#$$#OOOO#$$%##@@oo6+1.-;>>:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::-----::::::::;;;;;,,,<<<<<<<<::::::::::::::::::::::::::::::::..<;-.68ppduuapaauwudsspupkkBB8X4::::::2::::::::--::44>>;116,::42>>7f96X+666677..-<32::4>,16988&9ihhg7;,-7798iu8apkjkpjpjsjkVZZZCbkbkpakpjkkjspippppppaapuakkkjkpjVVbVkkjku X..,3:::4:<<9I^^~UUZbbbbVVZCUACAUUCCCCCCZZZCVVCUCVbbbVVkkksauaa8qhhipakknVkpakPkjUUQUQQQUUUUUUQQQQQUUUUUU~QCPCCPPCPUPUUQ!~~^QQUCVVVVbVVVbkkkjpuwuqusskkkbCCCCCCCZkkZbVVVbbVVbjkkauauau*&tt**eeeetuaatt8+ X.....;<<<;,;699*t&$$%+61;<::::::4444::::--:233322>;<6++%%6+.X.;<:>222>>>>::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::", ">>>>>>>>>>>>>>>>::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::3-66yjapsq=8ipjjkbVnkkkkkkksskjqsjsknbmjaaaq***%%8pa8akkjjjsppaauaapppaaaauueeeete**&&$$&&$#####$&&&&&&&&$$&&&&&&$#O####O##OOOO$###%%@+ 66..->>2::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::------::::::::;;;;;,,,<<<<<<<<::::::::::::::::::::::::::::::::<<<<-X6ycjppauuiaadsjkkjkkxxzc1X:::43:,3,,<---<<----:>,,7.XX;<33443fhhhitiy6.1,-<;:,24:4:,;.6yy8i8997733>;;.+8ipuuppkppuauajbVZZZVbju8tuadssspaiuapsjjjsppppppskaanbkbsjpju X..13::44:<;.166++@%66...;;:2>>>>>><::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::", ">>>>>>>>>>>>>>>>::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::35;19paapsa==ijkkkkkkkkkkpapuawwpkmbVVbsmkswo#= #*pp*qpjjpppppaauaaaaaaaaauueeeetee***&&&&$#####&&&&&&&&&$&&&&&&$$$$$$#OOO#$#######$%@+++1.-->>4::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::--------::::::::<<;;;<,,;;;;<<<<::::::::::::::::::::::::::::::::<;;<;.69hhhjjhjkjkkjppjkjxcv97.1::::,:<------<<<..;;;;..XX166;-:44379yippkh6X-:4<--::444::-.69y8i91.;1377,;.X9hhuuapjjptuupjkbVCVnj8tiu=assjjjjjppsjjjspspawwuappakkjkkkkku=%9+X--:::-.XyJPPPkakVVnVVVVVVCCVbVVVbVCCZZCACZZZVVbbCVkbVbkkkpajkkxzVkkkkzzjppkUUPUUUCVVUQQUUUUUUUQQPUQUCnVCVnVVCCCCVZCCUUQQUCCUUQQUVCVnVbkkjpuuaau*u**ajbVVCCVbbbVVVbkkkkkjjjkpt*uuuut*e**tee******tuu&@%yi99996;.;<,;... %tr$$$%++::::::::444:::::444:><;..+6&%+%%61..;;->,2>>:;;;::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::", ">>>>>>>>>>>>>>>>::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::435;68aapssuwwpjkjkkkkbbkkbbjkjksnnbbbVVCZVkwuut==aa==upppppppaaaappaaaaaaauteetee****&&&&&$OO#$*&&$$$&&&&&&&$$$$$$$$$$$O#$$##$$##$$%%++...-->>5::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::--------::::::::,,<;;;<<---;;<<<::::::::::::::::::::::::::::::::;--<;-16699&8ickjjjjkji8hlh1X;7>-----;;;..11..XXX.+661.X %hch617442-X %8tch6.->4<;-::444:>;..6999961;;,77,11169988tpcki88tajkkbVVj8ichiusjkbbbbbkkkjjjssjspaaaaakkVVkbVVVkaq889 ..--<<1+XhNkpwjUCZVVVVVVVVCCVbVCZCCVVZCUQQQQQQQQAZVVVVbkkjpjkkjjkjjkkkzjkjpjkbZCUCVVCUUZPUUUUUUUUPnbVPPVVVnVVCCCCCCVCPUPVVVVVVZPVCVVCCCVkjsu=8a8t*##*akbVVVbbVVbkjsssppapjkpuuuutt**eeetteeeeee**tt**tyhhgg971.;;,<-;XX+8*&$$$#@>>>>>>>222222>>>44::,66+++%%#o#%61.<<-->3,>:-;;;::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::", ">>>>>>>>>>>>>>>>::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::47>11%ipsaskp=wjkjkbkkbbskVbjVbbsbVCVmbCVbPVkkauq*ia==uaappssppappppaaaaaaauueetee**&&$$$&&$OO$&ee&&$$&&*&&&&$#$$$$$$$$$#$$###$$$$#O$%%9X..-;:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::--------::::::::,,,;;;;;---;;<<<::::::::::::::::::::::::::::::::,,,,:--<.6.XX9hcyii89699yg11;-,-..XXX1+%iihi89%+88ihhhiqiakzzhhh442,.XX yy1.<:4,,32:444:,,;.16696X.113,7--;.161%%%hcxi%%%8ijkknci9yg998sjkbbbbbVbkkkkkkkkkjssssjjVVkjbkVkjpquiq++1.169yiiuwubUPCCZZCZZCVbVCUCZZZCCZZCCCQQQQQUUQUQUZVVbksjjjppjjjjkziqzBjnzknnkjkbVVUUUUUQ~QUUZbVnVCVnnCVVbbnVVbVVVVCPUPUPUUCVVVbVVVCUCVVVVj##uu*uu*ukVnbbVVVVVkssssppauakkpaae$tt**ttee***ette*euutyiy999771;;;-,,,,..6&&&$$$OO>>>>>>>>>>>>>>>>3::<6699%%#####%7<;,<-->3,>;-;;;::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::", ",,,,,,,,33,>>>>>:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::,,,::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::44>,.+8ppadsaawabbbbbbkkbkkkkjjkwqnPVbkbCaVPbkjpiqj* 8jpjjpaappppsppaaaaauuu***ee*&&&$$&&$$&&**e***&$$##&$$$&$$O$$&&&$$OOO$$$$$$$$$$$%%+XX.;,,>:::::::::::::::::::::::::::::::::::::::::---::::::::::::::::::---:::::::::::::,,,::::::::::::::::,,,,,,,,::::::::::::::::::::::::<<<<<<<<<<<<<<<<::::::::::::::::,,:::---:::::::::::::::::<;.X19h9661XXXX.....-;;X6ihhhhjhjkjpjkkkkkkjjpajkkknxiX::>>;;..XXX.--:,>>>::444:::;;...111;;--;-,,;-;19..69996XXXX9hhhh96XXXX8pkbbbbVCPUQUCCUUZCCVVVVjsapkkbbbVVVbkkkkj88i8998*8pkVVVVVCVkbVVVbkVCCCUUCCCCZVVZCCCCUUUCVZZZZnkjappkjiiiqiiiaphkBkkkknnnkkjkkVPUPCVVVVVVVVVVnbnVVPVVnVVVVbVVVnnVVVPUUCCCCCCCCVCUZVVVVkkpuuiapjkkkkkbVbbbkjkkpw**=upjauau=**eeeeer&*e***tuett8*yy9.;;;;;;>;--<<;.X%$$$$$$O,,>:>,,<-<,,;-<,<--669%@%##&***=,<;---:>>><;;;;;::::::::::::::::::::::::::::::::3,::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::", ",,,,,,,,3,>>>>>>:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::,,,::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::44:<.X9ippddskq=kbkkbbbkVkkjaajkssbCVbkbbwkZVCkj#8p==ippjjsppppaaaaaaaaaaaut***e*&&&$#####$&*eetee*&$$#$&&&&$$$#$$$$$$##$&&&&$$$$$$&$%@+....;<<<::::::::::::::::::::::::::::::::::::::::---::::::::::::::::::---::::::::::::::,,::::::::::::::::,,,,,,,,::::::::::::::::::::::::<<<<<<<<<<<<<<<<::::::::::::::::,,:::---::::::::454:::::::371X196.XXX;66..1..XXXjkzkkjjjkbnVVVVVCZVVnVVVZVVbCn ::<>>>>>733,,<<<>>>::::::::;;;;;;;;;;;,3,,>;;177...1111.;.XXX0661XX.XXijkbbbVVVCUUAUUQUUUCCCUCVkppjkkbVVVVVVVVVnkaqiiiq=sVUQCVVCCCZCCCVZbVCCCCCCUCCZZZZCCCVVVCCCVVVVbksajphiqphhq8uihknJBBnnnVVVVVVkkbVkbnVVZZVVnnnnnnVVVVbbbbbbbnVnbbVVVVVVVVVbVbnbbVZVbkjpjkkkpppppjkkkkbbkkkkjjjp*==*=uuetppteee***&&er**ettt**tyyy9..;;>>>>>--:,<-..9&$$$$$$>>>>,,;;;;<;;;;;..66++@@$$$&*t8*,,;---:>><<;;;;;::::::::::::::::::::::::::::::::,:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::", ",,,,,,,,,,>>>>>>::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::,,::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::3::<;.+*akkkpsqubVbnVnVbkkbnkjssksjnPCbbjwkbnVkkqpj=qappjkjssspaaaaaaaaaaaut***e**&&&####$$&*etttte&$$$$&&&&$$$&$$OOOO#$&&&&$$#$$$&&&@@+++...-<<::::::::::::::::::::::::::::::::::::::::--:::::::::::::::::::---:::::::::::::::,::::::::::::::::,,,,,,,,::::::::::::::::::::::::<<<<<<<<<<<<<<<<::::::::::::::::,,:::---::::::::444:::447453;X18g7;.XX.X6XXX9hclbVbkkbCCUUQQQUCZVVVCUACCAVZZQ!jq-<<>22247332:--->>>>:::::::::;;;;,111<--,;---->>-;;---;,-1111XXX61;1.1hkbVCCAUUUQUAQQQQQQUQUUCCVkjspskVZZVVbbbVVVbkbbkkbVVZZVVVCCCCZVVbVVbVZVVZCCCCCCCCCZZVVbbbbbkkkkjkkjiaiqiii88quiihhzBJJVBVVkVVnVVCVnnnVVVCZVCCVVVVVVVbbbbbbbbbkkkkbkbVbkkbbVbbbbbbkbkkpppjjaauuappjkkkkkjppkjjp*#=*#*uappu*te*&&&&&te**tttt**tt961X;;>22222-:,3:-.+9&@@@%&&>>;;;;....111111X.++++OOOO#&8tt8,>:---:><<<;;;;;::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::", ">>>>>>>>>>>>>>>>::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::,<-:;..+yupkkkpkVCVVCVVbbkbnkjjjsqwjCVbbksjssjjkkkkqappjkkkjsspappppaaaaaauue***e***&$$$$&**ee**te*&$$$$&&&$$$&&##OOOO$$&&&&$$$$&&&&&@+++1..--<<:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::---::::::::--::::::::::::::::::::::::::::::::::::::::::::::::::::::<<<<<<<<<<<<<<<<:::::::::::::::::::::---::::::::44::::443445.X9hv6166999XX 9hznzbbbkmCQQQQQQQQQQZbsbZAACZZAQPTTh--<>2444444>:--->>>>:::::::::>>>-,77ffgg971,,,>-->33:::,----19vhg7;;;6hhnCQQQQ~^QQQQQQQQQQQUCZAZbkjpsknVCVVVbbbVVVCPVnCUUZbbVUQQUCVVVVbbVbVVZCCCCCCCZVbbbVVbbbbbVbkjjjppjq8*%=*8*8uiihhhhkBJPVBzxVVVPPPCVVnnVVCCCPPCCVVVCVVbbbbbbbbbbkkkbVVnkkkbbkbVbkkkjkjpaaaaute*tuapjkkkkpuujpjh8%*uauakju&&***&&&eeeereettttet& XX;;,222444::,,:-669&&&&&663,;;;..X.+666666++++&9&++o++&999>>:---:<<<<<<;;;::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::", ">>>>>>>>>>>>>>>>::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::<<::4>;.98ujjkhkUUCCCVVbVbkkjssjpqwpnVVVnbjupjknzpkkjjjpjjjpppaaaaaaaaaaauuue**&*&&&&$$$&&*ee*****&&$$$&*&$$$$$$OOOO#$$&&&&&&&&*&&&&+++...---::-:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::---::::::::---:::::::::::::::::::::::::::::::::::::::::::::::::::::<<<<<<<<<<<<<<<<::::::::::::::::::::::--::::::::4::<<::4:43-X6ihiqihhxBBkkkkkbbbkbVVCAQCCCCCCQQQUZVZAUAAAAAQU!T9-<:>2422444>>:<<>>><:<<<:::::>223,:;,7fg777,,>>:::,33:::3,>7gcxzf7--.6hhkVAQQQQ~QQQAAQQQQQCUUUUZZVksskbbbbVCZVbbVCUUCUUCUACAQQQ!QUCCUUUUCCVVZUUCUUUUUCCZVVVbbbVVbbkjkkaqq=uu8*$$%*tuihjkhhjxVJVkBVVVCVnVVVnnnVVVVVVVVVZCCZVVbbbbkbbbbkkkbkkkkkjpsjkkksjkksu**uutute***tupjjjkju8u8upitipkpppat*e*****eetrree**eter*& X.1;:>2244::::::<7999%+66663>-.....6+669996*&%&9y9666++1.XX:::-:;;<<<<<<<<<::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::", ">>>>>>>>>>>:>>>>::::::::::::::::::::::::::::::::::::::::::::::::::::::::,,::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::<<:4444;19iy8iicVZVVCCVVVbbbkjpajpqajjkVbVksjjknzikkkjkjjjspaaaaaaaaaappaauue**&$$$$$#O##&******&&&$$$&&e&$$$$$O##$$$$&&$&&&&&**%%%+++.1.--::,::::::::::::::::::::::::::::::::::::::::::::::::--:::::::::::::---------------::::::::::::::::::::::::::::::::::::::::::::--------<<<<<<<<<<<<<<<<::::::::::::::::::::::::::::::::>:<<<<<::33XX9pjpppajnPPVVnbmmbbbVCCQQQACCCCCAQQQQQ~~QQQ~AUU!Yc0<<::>>>>>>>>::::;>><<<<<<::::42233:--.XX...----:,:--::::---7ff91>>->.1hkVCQQQQQ~QQQAAQQQQ/UQQUUUUCbkjkkkjkbVVVbbVCUUUQQCCAQQQQUUQUUPUPUUUUCVZUUCVVVVVVVCCCCVbbbkkkssbVkkjpkkpu$#&=&%%8ihphjkzBnzknBBBnnVVnkkkbnVVVbbbVVVVVVVVbbbjkkkkkkkkkkkspaaappaaapkkjpu****tee*&&&*tiaphi8%8*8iiippuaattaat*eeeeeer&eee***er$$&&66..--::::::::::<7996+..;<,;;-..1+++++%%+++&*8&+666611<;;..--::;;<<<<<>>>>>::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::", ">>>>>>>>>:::>>>>::::::::::::::::::::::::::::::::::::::::::::::::::::::::,,,:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::-<:44444-.X %hhhaussbCCUUVnnbkkjpaqq**aupkkjjjjknjkjkkkkjjjspssppppppssspauuee**&$#$#OO#O#&&&&**$$&$$$&&*&&$$$$$&$$$$$$$$$&&&&&&++++..;<--::44:::::::::::::::::::::::::::::::::::::::::::::::---:::::::::::::----------------:::::::::::::::::::::::::::::::::::::::::::--------<<<<<<<<<<<<<<<<:::::::::::::::::::::::::::::::::<-<.<<:33-X6hkkbbkjkCQUVVCCCAACQQQQACCCCCAUQQ~~~~~~~~~~QQ^^V8X1::::;;;;;;;<::::;>;;<<<<<<::4444-4377,;....;<,33,:---::,73;...XX52>319lnUQ~~~~~~QQQQAQQQA~CCUCAUUCVbkkkkbkkbbVVVbVCPCCUCCCUUQQUPPUPCCVVCUUCCCUUCUCVbbbbbVVVnnnbkVbkkVbkVVkkdadue&##%&8ihhjkkkkkxkknzkzVnnkkkkbnnVVVbbbbbVVVVVbbbbbbkkkbbkkkkpaaaaautuuupappau**ue*ee*$$&*8yi8*%o8&*88tut#*teett*eeeeerrrreeee**er$$&ey96<<:::::::::::-<66+.X.;>4;;;;166+++@@@@OOO&&+XX.;;>:>>,33--:;<<<<<<>>>>>>::::::::::::::::::::::::::::::::::,33,::::::::::::::::::::::::::::::::::::::::::::::::::::::::::", ">>>>>>>>:::::>>>::::::::::::::::::::::::::::::::::::::::::::::::::::::::,,,:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::-<444444>11+X+1hsajakCVUUCVVVnbkpjaa8*u==wwujjjjkkkpkkkkkkkjsjjssssssssspauweeee*&&$$##$O#$&$$&*$&&&$$&&$&&&$$&&&&&$##$$&&**&&&&+++...-<>:444444:::::::::::::::::::::::::::::::::::::::::::::---:::::::::::::----------------:::::::::::::::::::::::::::::::::::::::::::--------<<<<<<<<<<<<<<<<::::::::::::::::::::::::::::::::<<-...<<---7hkVVMbkdsVCbCCQACCAAQAAQCCZCQQQQQQQQQ~^^//~U~QU^z 914:::;;...;;<,444;;;;<<<<<:::4444444:--;11;.-<::---<,<::---<<;..122-,7gzJUQQQQQQUQQQQQQQQQQkjUZZVUCVbkbbkkkkkbVVbbbVCVVCCCCUUUUIICPCPPCVVZCCUQUUUCVbbnVVVCVbkkkkkVbbVCkuppajkkkde*%#*888izkhhkxkkjjjjjnVkkkbnnnbkVVVVVVVVVbVVVbbbbkkkkkkkkkjsppaueue*uuuupauutt**e*ee*#OO**ii&%%o#o###&*&*$$*&O#*teee*rrrtereete*r$$$&ygy77,,::::::::-.XXXXX.<,24>,1166++ooOO@@OOOOO X.;->2444444--:;<<<<<<>>>>>>::::::::::::::::::::::::::::::::,3333,::::::::::::::::::::::::::::::::::::::::::::::::::::::::::", "::::::::::::::::::::::::,,,,,,,,::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::,,33::::::::::::::::::::::::::::::::::::::::::::::33f9hddkkJJnVVVVbbbbkpaaaq==8uaajbknsukkkkkjjkkjjkjjjjjjppaauuuutee*&&&&OOOOO$&*&&#$&&&$$$$$$$$$&&&&##%&&&&*&$%966:::-----::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::,,,>>>>>>>>>>>>>::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::-3:3,7X.X8hjkkjskskksVQUQQAAQQQAAACCCAQQQQQQQQQQ^^^///~UQ~~~QAVs-->31;;;<-X7:474;1133:<<<..;;>:344434:33::----<<>,,,;;;;;;,>>>>2422X8kkV~QQQQQQQQQQQAAUU~QUCUVbUQ~AVbbbbkkbbbknVZVbkVCCnCVPCPPUCCQUCPPPUCCCPUQUUPVbbbbVCVbkjkkknVVVCVjskspskbbkku*$&*&$$kzkpkzknkkkkbVVVbbbbbbnVbbbbVVVVVbbbVVbkkbnbkjjksspapsspae=*euuauuut****&**&&&#oo&88&#ooOOOOOO$&$###OOO$eee**ee*eeer*&**rrr$$$edpt66-:44:::::,33333:::::X+&&&O X67667>>>>:::>>>>>>>>:::::3,:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::>>>>>>>>", "::::::::::::::::::::::::,,,,,,,,:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::,33::::::::::::::::::::::::::::::::::::::::::::::,32;iudVVkPnbmmbbbbbbjaappiu8**ujbkVj#sbbkkkjkkkkkjjjjjpppaaaauutee&&$$$OOOO$&&&&&$$&&&$#$$$$$$$$&&$##$&&&$&&$%666:::-----::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::,,,>>>>>>>>>>>>>::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::37:3-..9lxkkkkkjjkVCCQQUQQQUAAAACCAUQQQQQQQQQQQ~^^^^^/^~~~~~QQUZhfXXXX.X.773:445;;--::33<.X...X-23232:3-3:-:,,,-:--->,,;;;;-----4216qjkZCCQQQQQQQQQQQQUUQ~~UUCVCA~QZbbbbbsajkkknZVVVnbnnVCVPPPCCUQUCUUPPPCVCUUPCVCVbbVVVbkbkkkkbVVUUVjkVbVVbVVbkjae$#O#&&kBkjnzkkkkkknVnVnbbbbVCVVbbVVbbVVVVbbbbkbbbkkjksspaapppaueeeetuuuuuttt8******&%#%*&%#o#$####$$$$$&**&*e*eterrr&eeeeeeeterrr$$rtki9..:34:::::,33333:::::.+9&&@O .66<<<<.>>>>>>::>>>>>>>>:::::3,:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::>>>>>>>>", "::::::::::::::::::::::::,,,,,,,,:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::,,,::::::::::::::::::::::::::::::::::::::::::::::,,5;9uuVPkPPCVVZVVbVVbjpjkjjpuqpkbkVb=jbVbbkkkkkkkjjjjjpaaaaaaauee*&$##OOOOO&&&&&&&$$$$##$$$$$$$$$$$$$&&&&$$%@++..:::-----::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::,,>>>>>>>>>>>>>>::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::4:-1X.9cxzbnVVbbkbVCUUUCUQQACCCCCAQQQQQQQQQQQQQ~^^^^^/////~QQQ~Q)EBhhhh9+XXX7>37333444:-.XX+99hc71.1--7,--,,--::3773:-::-::3333373X9cjkjbVCUQQQQQQQQQQQQU~QZZVbVZQQUUCVbbbkppkkkVVZCVbbVVPCPPPVPUQPCUUPPPCVVCCCVVPCVbbkkVbVVbbbVCUQCksjbZUZbVVkkjdpu*&$##8kxkkxxVbbkkkbbbbVVVbnVVVVVVVVbVbVVbbbbkkkkkjjjsspaaaauuuuue**e*ettt8********&&%%%%##%%$$$$$$$$$$&*eeeteettuutrtttttttterrrrrrrjh9..:44::::::,333,::::,++6&&@+ .11--<;.::>>>>>>>>>>>>>>:::::,,:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::>>>>>>>>", ":::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::,::::::::::::::::::::::::::::::::::::::::::::::::3;9iakZVnVVCQQZbbbbbkppjkkkkkkbbbVVjbkbVbkkkkkkjkjjjppaaaaaaauee*&$##@OOO$&*&$$&$##$$O$$&&&$$$$&$$&&&*&&%%+++...:::-----::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::>>>>>>>>>>>>>>>>::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::3:31X9kBVVVVVbbkkbbbVVVCCACCCCCCQQQQQQQQQQQQQQQ~~^^^/^~~~~~QQQQQ!^!UUTTIJhh6;-->--:444:-X9qjnJIT}xXXXX1X;;,,>>23:4444::333,:::::-;XhkkVVbVVCQQQQQQQQQQQQQ~~CCCVVZZZCQQUCVCZksskkbbVPUPVVCUPVPCCPUUPCPPPCCVVVCCCCUUUCVbbVUZCZVVVVUUUVkjkkPUVkVbkjpddpaue$tOtkxkhknnnbkkkbVVbbbbbVbbbbbbbbbkbbbVbbbbkksssspppaaauuueeeeeee******==&&&**&&%ooo#%$&$O##$$$##$$&&&&*tutetdddttttuutter&rrrrreui9.;<:4,:::::::,:::::,3..++++ X.<<---;-:::>>>>>>>>>>>>>:::::,::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::>>>>>>>>>>>>>>>>", "::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::>;.9hpkUbP!!PnbbbbbbkppkpknVVnnVnVVVVbbVbbkkkkkjkjjjpaapaaaautee&&$$##OOO#&&$O#$#OOOOO#$&&$$$$&&$rr&&&*&%++....-:::-----::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::>>>>>>>>>>>>>>>>::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::3>;XXinnVCCZbksskbbVCCCCACCCCCAQQQQQQQQQQQQQQQQQ~~^^^~~~Q~~~QQQQ~~QQUAUU^T!zX171334444436xBU^~^~^TBk80+.1.X-;>>-3444373-:--::3331.9hzVA~CUCCUQUQQQQQQQQQQQ~~/QVVZCZZCUQQUVVCVkskbbVCUUPVnPPnPCCCUUPCPPCCVVVVVCPUUQQQQUUQQCCCVCCCCUCVbVVVUZVVZVkkdjdaaat*&**tkxaikbnVnbnVbbbkkbVVVbbbbbbbbkkbbbVbbbkjpaaaaaaaappaue***tte********&$$&&%##oo#&&&$$#OOOOOOO$$$$&&*tuereadautttuute*&eeereetei8+.--:::::::::::::::,,..+66+.X.<,--;--:::>>>>>>>>>>>>>:::::,::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::>>>>>>>>>>>>>>>>", "::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::;>-1hhjVVCT!YJVnVbkksskkpjkbnVCPVCZCVVbVCVbbbbbbkjjjpaappauuue**$$##OOOOOO$$OOOO$#OOOOO$$$$$$$&&rrr&$&&%%+..;;;<:::-----::::::::,,,,,,,,::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::>>>>>>,,>>>>>>>>:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::-.X9kPCVbVbkskkbVCCQQCUCCCCCQQQAAQQQQQQQQQQQQQ~~~~~~~~~QQ~~QQQQQAAAAAQQUU^I0XXX<<:444:-hY!~/~~Q~^^^^^IhXX11;;174333--<,7<---<<-XX8kVZUQQQQQQQQQQQQQQQQQQUQ~^~ZVUUUAUUCVCVVAUVkskbVVVPUUbPVVCUCVCPPPCCVVCCCVVCUUUQ~QQQQQQUUUUUCZZCCVbVVVUVVUUVkkkkjpaut*$t& ujiijbVVnbbbkkbbVVbbVVVVVVVVkkbkjkbVkkksauuuauutuapput*=*et*********&%%&&#ooo%&***&$&$$OOOO#$OOO#$*t*reer*eurreetter*eer*reetiy6..-,::::::::::::::::;<6696..-;>22>;-::>>>>>>>>>>>>>>:::::,::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::>>>>>>>>>>>>>>>>", "::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::1>359hpjVa%h|KTnbksauupkssjkbbCUUCVbVVVZCCVVVVVbkjjjpaaapuuaue**###OOOOOO#$#OOO#$#OOOOO$#$$&&&&*$rr$$&&%+1.;;-;,:::-----::::::::,,,,,,,,::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::>>>>>,,,>>>>>>>>::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::3,<1lPQQCbmsssbVbCCCUQCCCCCAQQQQQQQQQQQQQQQQQQ~~~~Q~~~~~~QQQQQQQAAAAAQQAQQQUk% .XX-:4:.vT^QQQ~~U~QQ!^^IBJJzh6XXX-;.X.69y966...XXixZVV~~AQQQQQQQQQQQQQQQ~QQQ~~QQUUCAUCVkZCUUACbsjkbnVVUUCCVCPUPCVCPPPCCVCPPCVCU!QQQUQQUUQQQQQUVVZCZVbbbkUVV~UVkkkkkkdattt*$O#&8kjzVnkkkkkbbbbbbbkkkbbbkkkkkksjbbkkjpaauuuau8*8tuuu*==***&==***==*%%&&#o#&&*ee*&&&&$$$$$$$OOOOO$*&&ete&*e&$$&eeee*e*&&reeuipy6X;<::::::::::::::::;,6776<-;>422>:<>>>>>>::>>>>>>>>::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::>>>>>>>>>>>>>>>>", ":::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::-<-755hpjZa XX6BPkkjauupjjpjkbbVUQVbmVbVVVZZZCZVbjjjjpauuauuaae==$$OOOOOO#$$$###$#OO##o%&o%&****e$rr$#$&%1.;>2::,:::-----::::::::,,,,,,,,::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::>>>>>,,,>>>>>>>>::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::4:-1xnnmssmVVVVbmbVCCCUCCAQQQQQQQQQQQQQQQQQQQQ~~~~Q~~~QQQQQQQQQQAQQAAQQQAQQQ^ZVVxh6.-,11XJ!Q~~/~~UU~~T^^^^^[]^Kxc96+9y8&yy8yhcclBTUQZV/QCUQQUCQCQQQQQQQQQQ^~Q^^^~~QUCZZCQUUUQUVkkkbVVVCPQVVVUCUCVVCPPPPVPPPCCCU^^QUQQQUQQQUUQUVZVVVbVVVbUbVUZkkkkkjjduuat&e&O#thaknkkkkkskVVbbkskkkkkksakssskkkskjpppaauuppi*&&*8tt*&*8t#%=***==*%%&&%#$**eee***&&&&&&&&&$$$OO#&*&&taue&$#OO$*re&&&$&ee*tuhh9.;;::::::::::::::::-,1761;->5444:>,>>>>>:::>>>>>>>>,:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::>>>>>>>>>>>>>>>>", "::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::<>2459haVk0111cJbkkjauawpapkkkbVCVbbbbbjakVVVbksjjppauuuuuuuue*&#OOOOOO$$$$$$$#O%%%%%&&&99***&&&$$$$OO#9.;;>222::::::---::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::>>>>>::::::>>>>>:::::::::::::,,,::::::::,,,:::::::::::::::::::::::::::::::::::::,,:---::-::-:3,-:3-1xjassmmbbbbnVCCCCCQQQQQQQQQQQQQQQQQQQQQQQQ~/~~~~QQQ~QQQQQQQQQQQQQQQQQQQQQQ~~~^Iz9XXXiT/^/~~~QQQ~^~~~~^^^^[]]]^IJPVk*e$aV^^{^^^^U~QUQAUQQQQQCQQQQQQQQQQQ~~~~~/^~~QUUU~UZQQTCVkkjbnnVbCPPCVVCVVCnVUUCVnnPPVP^T~QUUUUQQQCUUQUUVbbCUZVVVZVZZkkkkkkdaapautt*&#O#&pppjkkkjskkVVbbbkkjssjkksjjkjsssauappppujpkkkhhittiit**88=*t==*%*%%%o%8e*eeee**&&&&&&&&$$##$&&*eeeeeetee&$O$*e&$&%$$&*eetpch9..;::::::::::::::::>>,,<<;-244442><>>>>>>>>>>>>>>>>::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::>>>>>>>>>>>>>>>>", "::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::--4457hkkk X919HbkkkpuuuuuuajkbVVbbnbbbkskkkkkkjjsppauuuuuuut**&#OO###$&***&$$#O%@+++++6+++%&&&%@%&&$$&9+1>>222::::::---::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::>>>>>::::::>>>>>:::::::::::::,,,::::::::,,,::::::::::::::::::::::::::::::::::::::,,,,,:-33,----:4:-XinCVbbbbnnBBZCCCCQQQQQQQQQQQQQQQQQQQQQQQQQ~~~~~~~~QQAAQQQQQQQQQQQQQQQQQ~~~~Q~~^^IchhI]^~^^~^^^^^^~~QQ~^^^^~~U^^^/^UV=dZZ~^~U^!!UUUQQQUQQQQQQQQQQQQQ~~~~~~~~~^^~~~QQQZUUU!^IInkbkbkbVnCCVbbVCVVbbPTUPVnVPPUTPQUUUUUUUQUUUUUUVbbZUCVbkZbVVkkkkjkjdppauette*&$$&*upjkjpkVVbkbbkkkkkjkkjsssssppsbkpaapppjkkhihkhku8ap8*u8=*t*==#8&&%o%****ee******&&&&$$$##$&&**e***ettt&&&&&&$$&%##$*eeajkh9..;::::::::::::::::>>,,,<-:24442><;>>>>>>>>>>>>>>>>::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::>>>>>>>>>>>>>>>>", "::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::--232;9xkz9XXXXcbbkkpu*uu*=*ajkkkjbVbkkkkbbkkkkkjspauuuuuutte***e&$&&&&&88*&&$$#+++XX......+++++++%&**&&+1,>22:-:::::---::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::>>>>>::::::>>>>>::::::::::::::::::::::::,,,:::::::::::::::::::::::::::::::::::::--<,,,;----;,,,,-7.XlVVVbbbnVVVBCCUQQQACAAQQQQQQQQQQQQQQQQQQQQQ~Q~~~QQAAQQQ~~~QQQQUQQQQQQQQQUUUUQQ~^^^)[[[^^/^^^^^^^^^^^~~//~QUUQ~Q~~~/~VZ/QA/Q/^!~UUAQQQUUUUQQQQQQQQ~~~~~~~~~~~~~^^~~QQUUVkxzlTVnVbbkbVbVUUUCnkVVVnVPPPknVJPUUUPUUUUUUUCUUQUQCbbbVCUZVVVkVkjjkkbVbkjdpputttte&$O&**tapjasbnkkkkkkkkkkkkppsppapjkjauuaapatihhytihhhpit888*8ut*=#8t*oo$&****&&&*e**&&&$$$#OO#&&***&&&*eee&*e*&$##%@OO$&*eeihy6.-,::::::::::::::::>>>,<;-:24442>;;>>>>>>>>>>>>>>>>::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::>>>>>>>>>>>>>>>>", "::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::-,>22-1hxxl8X.19nnkjja8eu*==*assssbbbkkkkbbkkbkkjspuu*uuuuteee**it&%%+++66%&&%%@++.XX.............+@&r&&+6;>>::<:::::---::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::>>>>>::::::>>>>>::::::::::::::::::::::::,,,:::::::::::::::::::::::::::::::::::::<-----;,;<,,<;;-6;X9HBkCVVVCCPPPCCQQQQACCCAAQQQQ~QQQQQQQQQQQQQQQ~QQQAAAA~~~~~QQQQQUQQQQQQQQQQQQU~///^^^^^^^//^^^^^^^^///^^^~~~~~~~~/~QQAZUQQsU~~T^UCZZUQUCCCCAQQQQQQQQQQQQQ~~~~~~~~~~~QQUVi%0X.FUPbnnbVVbVVCUPVkkbnnVPPJnCJJPCCPCPUUPCCCUQQQUUVbCCZVZVVVVkkkkbVVVVVkkdpadutette*&*&##&ua==knkkkkkkjjjkkjpppppapsspaaaappkjiuii8&ikNkhiu8**8uut*&8i8o#&$&***&&&*e*&&&$$$$##O$&&*e&&&&&&&&&*e*$OOO@@OO$$&&#*891.-,::::::::::::::::>>><;;-:2444><;;>>>>>>>>>>>>>>>>::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::>>>>>>>>>>>>>>>>", ",,::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::.<-->--1fhxz891;kVVkkjut*e*==uaasjbnbbbkkkkjpsjkjjpauuuupautte**y9++..X..166++++661;;-;<,<;;;...5-.o$rr&%61--:<<:::::---::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::>>>>>::::::>>>>>::::::::::::::::::::::::,,,:::::::::::::::::::::::::::::::::::::,;-<<-;,;77;X-,7XX9nJVVVVCCVVCUQQQQQQQAACCAAQQQ~~QQQQQAAQQQQQQQQQQQQQQQ~QQQQQQQQQQQQQQQQQQQQQ~QQQQQ//^^^^^^^^^[^^^^^^^^^^^~~~~~~UQQ~~QAbbUCUskQUT^VbVCQQUCCCCAAAAAAQQQQQQQQQ~~QQQQ~~~~~^Vi%XX.X7U!bVnbVVVVVVVCCCnkkknCJVPPVVPPVVPPPCVVVVQ^QUPUVVQQUCCZVUVkkbZUZVZZVVVkjddpuuuuue&re&&&&&**jaakkkkssspppapaaapaaapppauuaphhpihhyyhkBBxjii8**8t*=&8t&o&&$&&***&***&&&$$$$&$##$&&**&&&&$$##&&&&$$OO@@@$$$$$%&96.--:::::::::::::::::2>:----:2442>;;.>>>>>>>>>>>>>>>>::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::>>>>>>>>>>>>>>>>", "::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::,,,,,,,,::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::-<..,355-9hNx8X1inPBkjit&**==qaaqsbbbbnkjkkkpuuajjspaaaaaauutte*96...-;,-;<11..X1,<<:::44:::<<<<42. @rr&&61--<<<:::::---::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::>>>>>::::::>>>>>::::::::::::::::::::::::,,,:::::::::::::::::::::::::::::::::::::<--,,--;73;-;,;X hnPCPVVVCCCCCCQQQQQAAAAAAAAQQQ~QQQQQUAQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQCCQQQ/~~~~~^^^/~~~^/^^^^^^^^^^^^^^^^^^/~QQ//VV~~~U=nTTUjjVUQQQCCCCAAAAAQQQAAAQQQQQQQQ~~~~~~^^PiX.17--kUVUVbVVVVVVCCZVVbkjjknJPPVVPPVCCCCVVVVVCUPPPPVV~~QQQQUQkbZCUQUCCCCCUZVkkjdppaaureeree*tuakkkjsjkjspuppappaaauaaauuuu8tihc89hikBzkhhitt**8*%%&*&$&&$$$&***&&&&&&&&&&&$$#$$&&**&&$#OOO&&&&&$$#@@$&&&$$&996;-:4::::::::::::::::2>:---;>222><;..>>>>>>>>>>>>>>>>::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::>>>>>>>>>>>>>>>>", ":::::::,::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::,,,,,,,,::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::<-.<;33421+jkh970ixBxjat$&&==8iaqakkkbbkkkkkkuwujkkjppppauuutt*$1;;<,>334>>,<;..---::444444:,,,<44;XOrrre96;--<<:::::---::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::>>>>>::::::>>>>>::::::::::::::::::::::::,,,:::::::::::::::::::::::::::::::::::::7,;,;-;1g7--1,-;bUPnnCVUCQQQQQQQQQQQAAAAQQQQQQQQQQUQUCCCQQQQQQQQQQQQQQQQQQQQQQQQAQQQQQQQQQUCCQQQQ~/^^^^~~~~~^^^^^^^^^^^/^^^^//^^~^~~Q^~k!^^!TiiPCkqkbVUUQUUUCAAAQQQQQQQQAQQQQQQQ~~~~QQ!![HX.,-440bUPCbbbZVVVVVbbbbkkkknUPPPPJVVVVCCCPPPPVCPPUVVV/UCUUUCVkZQUUUCUCCCCCVbkkkkkdpppate&ree****akjkxjskkkkkjjjjkjssjppppjjpajxk8899iokBcihjiii8*t*#&&o%*&$$$$&&&&&&&&&&&&&&$$#O#$&&&*&&$OO#$**&&&&$$%@@$$$$$&&6.-:44::::::::::::::::3,<--;<,222>;;..>>>>>>>>>>>>>>>>::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::>>>>>>>>>>>>>>>>", ":::::,,3::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::,,,,,,,,:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::<,<---:44444444::<<44,.Orrrt96<---.:::::---::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::>>>>>::::::>>>>>::::::::::::::::::::::::,,,:::::::::::::::::::::::::::::::::::::f7,,;;7fg1----gFQCnUCCCUQQQQQQQQQQQQQQAAQQQQQ~QQQUAACCCCCCQQQQQQ~QQQQQQQQQQQQQQQAAAAQQQQQQQQQ~~QUU~^^^^^~/~~~Q^/^^^~^^^^^^^^^^^^/~Q^~TTV^![TJEhxBppUnbUUUUQQAAAA~~QQQAAQQAQQQQQQQQQQQQ~!T}g.-444 jUnCVVCVCUCVbbVVbkbPVnVCVnVPPCVPPPUUUPP!TUPUVVPQVjkkVVkZUUCUQUUCUCVVbkkkkkkpddjddtrrtte#u&%88i8spjkknVnkkkkkkkkVkpapjjjkkiyi9+88hxkkkjiuu*&t*#&& #e*$$#$$$$$$$&&&***&&$$#OO#$$$*&$OOO&*ttt*&$&&@@@OOOO@*96.-:44::::::::::::::::3,<--;<,>22>;;..>>>>>>>>>>>>>>>>::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::>>>>>>>>>>>>>>>>", "::::::::::::::::>>>>>>>>>>>>>>>>::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::<;768xPCs=-,;.ychy&8%o8*=upapkkkkkbkCVjjijkkkjdskdppp961-4::::::::::::::::::::::::::::::::44-<9yyer$* X744,-,--,-1;>>,,:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::>>>>>:::>>>>>>>>:::::::::::::::::::::::::::::,,,::::::::::::::::::::::::::::::::17-gf447X+ jbU^UVCQQQQQQQQQ~~QQQQQAQAAAQAQQQ~~~~QQQCCCCAQCUQQQQ~QQQQAAQQQAAAAAAAAAAAAQQUQ~~~~^QUCVVU^^^/^^^~QQ~^^^^^~~^^^^^^^^^^~Q~^~^UV^^^~PnPqDD79kVVbVPUUUU~~~~QQQQCQQQQQQAAAQQQQQQQ~!]BX...,-fFWJPCAAACVUPJBnkVVVUCkkkkzBHJJJJU!UPUUUUPJPJnBCkkkkbVUUCCUUUUUZVVVVkkjkkkkspssdddauuuuer&&&$$$%88yhNJKhzIHBcxlJNlchcxBNi&*&$&et&@ikhitt*&&&%%&#$&***&$$$$$&&&&&&&$$$$#&$#$&*&$&&$$$$&****&&%++##$%Oo&yy96<:444>>>>>:::>>33,>,,::::::::>>>>>>>>::::::::::::::::>>>>>>>:>>>>>:::>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::", "::::::::::::::::>>>>>>>>>>>>>>>>::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::>;X9xITCka7XX.X9ch8%#=***uipjkkbkkkkVbkkapkkkkkjjsdpp6.,-:::::::::::::::::::::::::::::::::44-<6ytee=w%X;54-.<<<,--;>>,,:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::>>>>>:::>>>>>>>>:::::::::::::::::::::::::::::,,,::::::::::::::::::::::::::::::::..-744371Xk^~UQUVCCQQQQQQQ~~~QQQQQQQAAAQQQQ~~~~UQQQACAQQQQQQ~/QQQQQQQQQQQAAACCAAAACCAQQUUUUQ~^UVnbbCU^^/^^^~QQ~^^^^^~~~~^^^^~~~^^~^^~~UVU^/UUCVk33;X9kVnbnnPQQ~~QQQQQCCUUQQQQQAAQQQQQQ~~^[Tc+.9X:-769kCQCCZZUPVJkznkkUQQUPPVBBHJBVPTUPCCCCCPPVnnZjkVZCUUUUCCUUUUZVVVVkkjjkkkkkkkjjdpauadutette&&&88*thkkihxcchhihhi8ycxk*tut&*ee*8&tit*tt*&*&%&*t**&&&**&&&&&&&*&&$$$$$$$#O$&*&&&$$$$$$&&&&&%@@+OO#%%&9y66--:444>>>>>:::>,3,>>>,::::::::>>>>>>>>::::::::::::::::>>>>>>>:>>>>>>>:>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::", "::::::::::::::::>>>>>>>>>>>>>>>>::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::>;.6hBIInjg9..16hxh*$$#=88upjjkkkkbVCkjjkCkkkkbkkkpph+X<::::::::::::::::::::::::::::::::::4,<<69tt=$*8X.3fff7<--<-;>>,::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::>>>>>>::>>>>>>>>:::::::::::::::::::::::::::::,,,::::::::::::::::::::::::::::::::>>>>>::,33>>:>>::::::::>>>>>>>>::::::::::::::::>>>>>>>:,>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::", "::::::::::::::::>>>>>>>>>>>>>>>>::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::>>1XX9lnzkiy6;1;;hhu=#O#88iappjkkbZZVkkkjnkkjjbbkksjh9X<,4:::::::::::::::::::::::::::::::::,<-.+&t*$*8+.7fgg773.,-<>,,::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::>>>>>>>>>>>>>>>>:::::::::::::::::::::::::::::,,,::::::::::::::::::::::::::::::::7-3-33-XXk^PQ/CUCCVCCUUUQQQQUUUUCCCCAAQQQQQ~~~~UQQQQQQQQQQUQQUUCZCUACCAQAAAAQQAACAQQAQQ~Q~~~QQQUVbbVU~^^^^^^~~^^^^/^~~~~///^~~~~~~^^^//^UVUQUPVCx;11X1cJPVmCQQ~~QQCCUUCCUQQQQQQAQQQQQ~~~/^^[^H6X,;11XX09BnP!JYPx uBVkkVCCCCPVnnVVVVVUUCVVVVVVkVPUVZUUAUZAAZVVZZVVkkkkkkjkjjkkkkkkdpddaapdpddkdda*tuuuute**&&*e*$&&&&*88***tue*tttt$*tttt&&&&&&*t*tte*&**&&***eee**&$$$&&$$$&*e*&*&$$$$&*###OOOO@$&$%&9+X..;<::::>>>>>>>>,333>>>>>>>>>>>>>>>>>>>>::::::::::::::::>>>>>>>:,,,>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::", "::::::::::::::::>>>>>>>>>>>>>>>>:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::>,;.XX%icpi97551X%ue$$$%98*upjkbZUCbjkkppzksakkkkkjh9.-:3::::::::::::::::::::::::::::::::;<<-..+8t&&y6X-7777gf<<-<,,,::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::>>>>>>>>>>>>>>>>:::::::::::::::::::::::::::::,,,::::::::::::::::::::::::::::::::33:-3,X9kP^~^^VCUUCCUUQQQQQQQUUUCCCCAQQQQQQ~~~~~QQQQQQQAQQCCCCCCbVCCCZCCCCCCQQACQQAAAAQQUQQQ~~~~UZVU~^^^^^^^^^^^^//~QQ~////~~~~~~^^^^^^^/PVPUQCbx0X11;1xJVkbCCCUQCVZPUQUQQQQQQQAQQQQQQQ~/~^!!{N+11-;71;;;6vchh8 kJznVbkkbVVnnVbVVVPUJVVVVVVkVCUZZAZAQAZZZVVVVbVkkkkkkkVkkkkkkkkdddddaapddkkjdjuadpppdaddduee*$t*&tt*8ut*upu&*tt*O&ttt**&&&****&*tte&&&&&&&*ree**&$$&&&$$$&**&&&%#OO$$$$$$$OOO#O#$%%6+.;<,<--::>>>>>>>>>3333>::>>>>>>>>>>>>>>>>::::::::::::::::>>>>>>>:,,,>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::", "::::::::::::::::>>>>>>>>>>>>>>>>:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::><111XXX9pkh723310au$*&o9=%*pjjkVCCVkkkkkVbsajbkkkhcy.-:4::::::::::::::::::::::::::::::::;<<<..+%9%&y9X.<..>>>>>>>>>>>>>:::::::::::::::::::::::::::::,,,::::::::::::::::::::::::::::::::4342;.9J^^~/QQUCQQQQQQQQ~//~QQUUUCCCQQQQQQQQ~~~~QQQQQQQCCUZCZVUUCCVVVVVZZZCCQQQCQAZCQQQ~~QQ~~/~QQPPQ/^^^^^^^^^^^//~QUUQ~~~/~~~~~~/^^/^~/^/CVUUCkxhX;37-gLPbkbbbnVbnCCUQQQQQQQQQUQQQQQQQQ~~/^^^xh6h7X>>:7-3XX.XX%6XxEHnHJJVVVVVVVVZVBBJJJJJJVVVZUQAVVVAUZZZZZZZVVNkkkkkkkkkkkkkjjkddddddaddjkkkkkjddddddddkddeueettte*ettte*ttuu*O&#&t*tu**&&***&*ttt*&&&&&&&&*ee*&&$$$$$#$$$&&&$&%%@O$$$$$$$##$$O$&&%+..;;<<---<::>>>>>>>,333>>:>>>>>>>>>>>>>>>>::::::::::::::::>>>>>>>:,>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::", "::::::::::::::::>>>>>>>>>>>>>>>>::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::,--;11XX#kc172X19iuee&%&%%*appskbVVZPCVkVkaajkkkkhcgX-,:::::::::::::::::::::::::::::::::<;<<<-<6++9y6X7f737,<,-<<:::::::::::::::::::::::::::::::::::::::,,,::::::::::::::::::::::::::::::::::::::::::::::::>>>>>>>>>>>>>:::::::::::::::::::::::::::::,,,::::::::::::::::::::::::::::::::4433;Xx^~~~~QQQCUQQQQQQ~///~QQUUQQUUQUQQQQQQ~~~~QQQQQUACCUVCVVQQQUCZVVVVbVVCUQQQACZCQQ~/~QQQQQUAQUU~/^^^^^^^^^^^/~QQAAQQ~~/~~~~~~~~~/~~/~/~UCUUVVn9X544>xIVbVbbbkkbVVCUQUQQQQQQQQQQQQQQQQ/^Q]^B8x_H1,::444,;108h9.fzKYYEYYIPPIIIPPIIJHJJJKPPUUZZUQVbVZZZZZZZZZVVNkkkkkkkkkkjjdddddddjdddddjkkkkkkkkdddddddddeauuett**et*&tt*#*ap&tttt&*ttt******tt******&&&&**ee&&&$$$$$##$$$&&&&&%##$&&$$$$$$$$&$&89XX.---;<<--:::>>>>>:>,>>>>>>>>>>>>>>>>>>>>>::::::::::::::::>>>>>>>:>>>>>>>:>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::", "::::::::::::::::>>>>>>>>>>>>>>>>::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::,,<-;1 hxh111;1+yhi&%O%&8uapsjakVZVbVbku*askkjkjxyX<3-::::::::::::::::::::::::::::::::,;-,3<<1699y>>>>>>>>>>>>:::::::::::::::::::::::::::::,,,::::::::::::::::::::::::::::::::7-3,.XI/~~/Q~QUQQQQ~QQQQ^//~QQQQQQUQUUUQQQQ~~//~QQQQACCCCQZCZVQ^CUQQUCVVCCCUUQQQZCAUUAQ~~~~~QQQQUT~~^^^^^^^^^^^^~QQAAQQQ~~~~~~~~~~QQ~QU^/~~^CQ~CVVh1747:fHVbVVnbbjkVVCPPUUQQQQQQQQQQQQQUQ~^^^^^ek{LX-7447-71X9JV7;X.99fxHKIIE^_^^!^TJLYRYKHBJPUUA~ZVVZZZZZZUUZVVVkkkkkkkkkjpppdjdjkkddddjdjkkkkkkkkkjddddddduduu*&&*ttee&&*ttiit&t*ttttitttt**8t**&****eee****re**&&$$$$#$$$&&&*&&%@@$$&$$$$$$$$$@&y91.1-;;<,<-.:::>>>>>>>:--->3>>>>>>>>>>>>>>>>::::::::::::::::>>>>>>>:>>>>>:::>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::", "::::::::::::::::>>>>>>>>>>>>>>>>33,:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::<<<<9xHc81X1X;169t&$o%*8uasjjjkbbkspkju#ukpjjky6.<3-:::::::::::22222::::::::::::::::,,34::37ff96<.7gcl<7fgg7<,,:,:-:::::::::::::::::::::::::::::::::::::::::,,,:::::::::::::::::::::::::::::::::::::>>>>>>>>>>>>>>>>::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::44-.X9/^~~~QUUQQQ~^^^~QQQQQQ~QQUUUUUCCUUQQ~~~~~~QQQACCCCCUUCUQ^QUCQ~QUVVCCCCUCCQCCAUQQ~~~~~QACU~~~~~~^^^^^^^^^^^~QQAAQAAQ~~~~~~~QQQQQQ~~/^~^CUUZZUx97444-9VjbbnbbbnnCPCQUUQQQQQQQQQQQQQQUQ^^^^^Uz'I+X,-447-XyITVf<-<<.X.XXX19hzLxhyhv79h9.6+XhT!^CVVVZZZZZZUZVVZkjpkkkkkkkkdppdjdjkkddpddjkdjkkkkNkkkjdkdpdddaadee*$$$&&&**itit8*tuttuie*ettttt*8******ee&&*e*&&&$$&&$$$$$$$$$#@&&&&$$$$&$#O$$$$&y9++.1.977<-<;.>>>,33,>>>::>>33,,,>>>>>>>>>>>>>,::::::,::::::::>>>>>:::>>>>>>>>,>>::>>,>>>>>>>>>>>>>>>>>>>>>>>>:::::::::::,,:::::::::::::::::::::::::::::::::::::::::::::::::::", "::::::::::::::::>>>>>>>>>>>>>>>>,,:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::>>>:::::::<;lIHh%X.72-;9yt$%%%*uappjskbbbkjkkkwupuuhh9.;-3::::::::::::22222::::::::::::::::--:437fff97<..3gGl3,ff77----:,:3::::::::::::::::::::::::::::::::::::::::,,,:::::::::::::::::::::::::::::::::::::>>>>>>>>>>>>>>>>::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::4-7XXp/~/~QQQQQQQ~~^^~QQQQQ~~QUCCUUQUUQQQQ~~~~~~QQQACCCCCUQUQQ~UQU~~QQUUQUCCCZCQUUQQ~~~~~~QUUUQ~^~~~^^^^^^~~~^^~~QAAQQAAAQ~QQ~~~QQQ~~Q~~^~~~^UUVVZVl-4f4-9JkkkkVnbnVPUPUUUUQQ~QQQQQQQQQQUQ~~~/^~U^z +7-,>,33>>>>::>>,3,,,>>>>>>>>>>>>>::::::::::::::::>>>>>:::>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::", "::::::::::::::::>>>>>>>>>>>>>>>>::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::<<::>>>>>:::::::51hNx8 6;24519er%+o%8aaassjkbbbkkkbp*uuuhi+X;-:2:::::::::::22222::::::::::::::::,,333337;...--7llGg<77-.773:,,--::::::::::::::::::::::::::::::::::::::::,,,:::::::::::::::::::::::::::::::::::::>>>>>>>>>>>>>>>>::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::4:1.iP/Q~QQQ~~~~~~~^^~QQQQQQQUCCCUQQQQQQQ~~~~~~~QQQQUUUAZUQQQUQUUQ~UUQQQ^~QUAZZUAUQ~~~~~~QUUQQ~^/^~^//~~~~UQ~^^~QQQQQQAZAQ~~Q~~~QQ~~~Q~^^/^Q^CUUVZVHg4443XlIJPnnnnCCCCCPQQQUQ~QUQQQQQQQQUQ~~~^/^^^k XX.669lT[^ZjxhXX,7----<,<--..;1,,335-,-.1X6cVVVZVVVZVZZVVVbjkjjkkjjjkkkjpjjjddddddjjkkkkjjkVkkkkzVzkkdpdddapaue**er&$&et*ttttttt*te#****ete&*******e*&&$$$$&&&$&*&&*&&&&&$$@&&&$$$$$**&%%&8y96XX.X99661;;,,,33>>>>>>>>>>>>,3>>>>>>>>>>>>>>>>::::::::::::::::>>>>>:::>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::", "2222222222222222>>>>>>>>>>>>>>>>::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::<<::>>>>>>>:::::2;19ixc9-273-X@&&+o%8uapsskkbbbbkkkp=wpiiy+X;-:4:::::::::::22222::::::::::::::::;;-:::,<;..67:7gglG7<77<-:--:,--::::::::::::::::::::::::::::::::::::::::,,,:::::::::::::::::::::::::::::::::::::>>>>>>>>>>>>>>>>::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::,7Xh^/~QQQQQ~~Q~~~~~^^QQQQQUCCCCQQQQQQQQ~~~~~~~QQQQQQQQQCQQQQU~UPUQCCUQQ~~~QQUCCCAQ~~~~~QQAU~~^//^^//~UAQUUQ~~~~QQQQQQAZAQQQQ~~~~~~~~Q~/Q///QUCPZAVJSf4--1X9BIzBkkVVnVPUQQUUUQQUUQQQQQQQQQ~^~^^^^/UkpxJKBI^^~QUVcxvX1XX,<--,-:33;,,-->2-27>>7..gJBBVVkjkVZZVVVbkkkkkkssjjjjjsjjjpddjkkkkkjjkkkkkkkkkknkkkdppdppppaer*r&$$&tt**ttteeeett&tee*ee****8****ette*&$&r*&$&&&&*&&&$$$#O$&$$##$&t&%%9889;.X.66y961..-;>>3>::>>>>>>>>>>>,>>>>>>>>>>>>>>>>::::::::::::::::>>>>>:::>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>::::::::,::::::,::::::::::::::::::::::::::::::::::::::::::::::::", "2222222222222222>>>>>>>>>>>>>>>>::::::,,::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::>>>>>>>:::::2,;X hlh72543.X+&%+%%*uapjkkkkbbkkka=*ptyy+X;<3::::::::::::22222::::::::::::::::;-..--....197,4flgGg<>>>>>>>>>>>>>>>::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::-;9I'~QQQQQ^^~~~~~~~^~QQQQUCCCCQQQQQQQQQ~~~~~~QQQQQQQQQQQQQQ~Q~UCUCCUCUQQ~~~~QACAQQ~/~~~QUUQ~^^/^~~~QUCZCAQQ~QQ~~~~QQQQQAQUUQQ~~~~~~~QQ~/^~/CVUUAUUBx77:,,XXXlTxzkkVVCUUUQUUUQQUUUQQQQQQQQ~/^~^^~^/^^/]^^^^~QUQUxkzzhhg.1-<,---:3,>>,333>>:---<7hxNNNzkkVVZZVbbVkkkkkjkkjjjjsjjjpdddjjkkkppjkkkjjkkkkkkjjdppppddpaueeer$$&tt**uuttetettetttt****&**ettuauute**ete&&&*&&**&&&$$$#$$$$#O$&&&98y96X-,;119y6+...-->2>:--:>>>>>>>>>>>>>>>>>>>>>>>>>>>::::::::::::::::>>>>>:::>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>::::::::,::::::,::::::::::::::::::::::::::::::::::::::::::::::::", "2222222222222222>>>>>>>>>>>>>>>>::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::>>;;;>>>::::,-.1XX9lg7-:7,-;++%%%%8uaskkkkbbkjpp*=i888+X;,3::::::::::::22222::::::::::::::::11<<....XXX67<4fgflg<7gcggf3----::::::::::::::::::::::::::::::::::::::::,,,:::::::::::::::::::::::::::::::::::::>>>>>>>>>>>>>>>>::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::.XJ^~~QQQQ~^~~~~~QQQ~~QQQUCCAQQQQQQQQQQ~~~~~~~~Q~~~~QQQQQQQQ^UQUZCZUQCAQQ~~~~~UUQQQ~~~QQAUQ~^^^^^~~QUCAQCAQQQUUQ~~QQQQQ~QAAAQQ~~~~~~~UUU^U~~VsCQQUPVH9X1->7119KNkkkVVVCUQQQUUUQQUUQQQQ~~QQ~/^^^^^~^/^~~U~UQQQQUCUbkknJBhXX-,,:3,:--::-----:::23-X9cNBBVPVVVVVbbbkkkkkjkkjjjjjjjjjdppapjkkkpjkkjpjkkkkkkkdpddddauuueeeer$$$ttteppptttttteettt*&&****ttuuuttteeetter*ee**ee*&&&&&&&ree&&&&&8yy96.X>3,;.9y+++X.;>54:---:>>>>>>>>>>>>>>>>>>>>>>>>>>>::::::::::::::::>>>>>:::>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::", "2222222222222222>>>>>>>>>>>>>>>>::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::<>;;;;>>>:::-77;.69f76<;>>23X+%%%%=8upsjkbbbjpap8%uyy9..1<3>:::::::::::22222::::::::::::::::X.16699999&66<-4<7gf7ggfff7-,3:-::::::::::::::::::::::::::::::::::::::::,,,:::::::::::::::::::::::::::::::::::::>>>>>>>>>>>>>>>>::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::.6^^~/QQQQ~QUQ~~QQQQQQQQUQQQQQQQAAAAQQQQQQ~~~~~~~~~~~QQQQQQQ~UUZZCVUQUUQQ~~~~~QUQQQQQQAAAAU~^^^^^~~QUZAQAQQQQAAQ~QQQQQ~/QQQQQ~~~~~~~~UUUCU~QCbCUQUCVYxX67X27XXlHkbkCCbZUQQQQQUUUCUQQQQ~~QQ^^~^/^^^^/~~~~AQQQQQQUAAbskxxH91.;----3333,<--<<,,33446X+hxxkkBkbVVbkkkkkkkkkkjjjjjjjsjjppapppkkjjkkkkkkkkkkjjdpaaaauewteeeer$$$teuujkdiuutetteettt*&****ttttette**etee**eeeeee*&&&&&&rtuut*&&88991.;144>44>::>>>>:>>>>>>>::::>>>>>>>>>>>>>::::::::::::::::>>>>>:::>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::", "2222222222222222>>>>>>>>>>>>>>>>::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::<;;;;;;>>:::-<.-<-X6X.1--234X +9&&**uapskbbbkjppq#tih9X.7-:2:::::::::::22222::::::::::::::::+69999998yy99f77<7>>>>>>>>>>>>>>>::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::Xx[!/QQQQQQUUQ~~QQQQQQQQQQQQQQACZCCAAQQUUQQ~~~~~~~~~~QQQQ~~QQCUCCUZA~QQQQ~~~~~QUAAQQAAAAAAUQ^^^^^~~~UZZAQQQQQAQ~QQQQ~QQQQQQQ~~~~~~~~~U~~Q~VbVQQUCUQUV^x9-3fX1.+NnkjVUCUQUUQQQQQQCUQ~Q~~~!~^^~^/^^^^^~~~AQAAQQQQQAQACVnzBxv1;->3,:::---<<-,--34-7...+9hhjkkkkkkkjbbbbkkkksjjssjssppppppauuppppjkkkkjpsppdddaaaueruuuueer$$$teuujkduuutttutetuut*****tiateee*&&ee**&&eeeeee*&&&&&&readu*#O&++.....45:1X+y@O X.;544,,>,3,>->>>,,>>::::>>>>>>>>>>>>>:::,,:::::::::::>>>>>:::>>>>>>>>:>>,,>>:>>>>>>>>>>>>>>>>>>>>>>>>:::::::::::,,:::::::::::::::::::::::::::::::::::::::::::::::::::", ">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>::::::::::::::::::::::::-37,-,,---:>>:>>>>>>2222::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::<;.69%O$euuapkkxjaupa$*ai9+.-:44>>>,,,,,,;->33323,,;<;;;,:44::,3y999999669yyyeeertt+.7ff7444ff1.,----<,-<<<<<<<<:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::-3,-,--qQQ~QQQQQUUUQQQAQQ~~QQQQQQQQAAAACCCCCCCQQQQQ~~~~~~~~~~QQ~~~~~QUUQQUQQ~QQQ~~~~~~QQQUCQQUUQ~QQ~Q~~^^UUUCVAQQQQAQQQQQQQQ~QQQQQQ~~~/~/^~UU~~~ZVCUQQCIT!UZZTP8X75;X7zVbkC^~QQ~QUQ^~PCUQQQQ~~~~~^/^^~~~~~~~~QQQACUUQQ~^QUQQQUQP!0X7-74::::::::::::::::35-9hlkjkkkkkkkjkkkkkkkjssjkkkjspdaaapautajjkkkkkzaapudaudddduteyyhhht&&$*t**pkkdeaueuuaeuuteee&yyy88yihttte*&$$rr$&eeerrrr$$$$ryyhg7<->>>>>:;;;;<:::,37...;;>44:::::::::::::::::::::::::::::::::>>,,>>:>>>>>>>>>>>>>:::>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>:::>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>", ">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>::::::::::::::::::::::::,77,-:,::-:>>>>>>>>>>222::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::<<;69%O$$*euajkxja*au$*ai8+.-444>>>,,,,,,,>>,2>>--......,>:::::,6++69ggg96++9ttrree%.;,4745:3<..,<7f,--3<<<<<<<<::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::,-,,---7U^QQAQQQQQQUQQ~/~~~~~QQQQQQQQQACACCCCZCAQQQ~~~~~~~~~~~Q~Q~~~~~~~~QQQQ~~QQ~~~~~~~QQACUQUQQQUQQAUUUPCCCVCCQQQAAQAAQQQQQQQCQQQQ~~~~~~~~~~~~UUUQQQQQIIUVVVZBz61-;;fWVnkC~QUUCQQUQ^~UQQQQQ~~~Q~~^^^~~~~~~~~QQACCUQQQQUQ~QQQQQ^BXX7:44::::::::::::::::43,;9hkkkkjjkkkkkkkkkkkjjjjjkkjsuaaaaaai*ajkkkkkjpukkeuadddpiyyyhhhhiyt*&*e**pkkkuuueutteuit*ee*yyt888yihit&&*r*&&retttteeeeeety99961-->>>>>:;;;;;:::>,1...;;>44::::::::::::::::::::::::::::::::>>>>>>>>>>>>>>>>>>>>>>::>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>:::>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>", ">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>:::::::::::::::::::::::::,,--,77,,,;:--->>>>>>>>:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::,;.6%#$$=**upjjjpuu*#=et86.-,4422222223>>3,>---...+++667,:::--<....67fg91XX+999eet96.X.--,3--;<-,gDc7--::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::3-:,,--g{~UQQ~QQQQQQ~~QQUQQ~QQQQQQQQQQACACAAACAQQQ~~~~~~~~~QQQQQQ~~~~~~/~QQQQ~~QQ~~~~~~~~QACUQQQ~QUQQCZCPVVVbVCCQQQAAAAAQQQ~~QUAQQQ~~~~~~~~~~~~QCU~QQQQQPPUVZVVzHvX53;1FPVnU^UVCVU~UCU^UQQQQ~~~~Q~~~~~^~~~~~~~QQACAQQQQQ/QUUQQ!!TqX.>444::::::::::::::::>3,.X9hkjkjpjkkjjjjjjjjjjjssssppaappaaapapkkkkkkssadaeppuippiy9+96+++98&&*e*ejkkkueeeteeeuiteeeettt88ttiputttte&&**999tytuut*&&96+...-->>>>>:;;;-;>>>2,,;;;;;>44::::::::::::::::::::::::::::::::>>>>>>>>>>>>>>>>>>>>>>>:>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>::>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>", ">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>::::::::::::::::::::::::-::--,77,77,<-;:>>>>>>>>::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::>,;.+%$$*****uiijpuu*#$#*89+.<::::444444423,--<<6999999971--<--...<<<<<<<<....66999yy9++XX.6.;7f3-7gf2-::4444444::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::,:3-:c]!Q~~/QQ~QUQ~QAVAUQQQQQQQQQQQQACAAAQQQQ~QQ~~~~~~~~~QQQQQQ~~~~~~~~QQQQ~~QQ~~~~~~~~QQAUUQQ~QUQQUZVPVVVbbCZUQQAQQAQQ~~~~QQQQQQ~~~~~~~~~~~~UUUQQQQQCVCCVUPVnLl;5;-.D!PbPQCVVVCQQCCQQQQQQ~~~~~~~~~~^^~~~~~~QQAAUQQQQ~/~Q~UU!ThX11-344::::::::::::::::3-;1.X6hckjjjkkpjppsjjjsjspppppappppppppkkkkjjjjdjjdaapt%&8996.XXXXXX6yi***eakVkkaeeetttetttettteetttttuttttuue&996+.++9iit&+XXX..X.;<::>>>>:;;;-->2444>;;;;:>44::::::::::::::::::::::::::::::::>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>", ">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>:::::::::::::::::::::::::,,:-:,,,777<<,,<<>>>>>>::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::>3-.+%%&$&*=*euuupaau*=##&96..<:::444444442:-<66&&&&&&&661--<-..--,,,:::-:,<...16699tytt& XX-ff7-----2322444444::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::-,,-,,-gP^^~/QQ~~QUUCAAA~~~~~QQQQQAAQQQQQQQQQQQQ~~~~~~~~~~~~QQQQ~~~~~~~~~QQQQQQQQ~~~~~~~Q~QQQQQQ~QQQ~QZVVVVnnbVCQ~QAQQAQQQQ~QQQQQQQ~~~~~~~~~~~QQ~QQ~QQQQUPCVUUCJHS11-:XgYIxkVZVbVVU~UUQQQQQ~~~~Q~~~~~~^^~~~~~~QQUQQQQQQ~Q~~~^[!lXX;,::4:::::::::::::::::3--71XX6hhhhkkkjjjjjkjspsppppppappppppppkkjjjjkkdddkjph8++11;;;>;..1..9hy8**akNkkduuuttueteetttttttteeeete&&rtuu971..X.+hy9+X;>5X.;<,,>2>>>>:;;;-->24444>:;;:>44::::::::::::::::::::::::::::::::>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>", ">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>::::::::::::::::::::::::::::::::-17,<,<-;<<<<>>>:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::,-.6%%&$&&=*****uuaauu*$&89+..<::44444444:-<169&&$$$$@++<-<<-..::,2444334::<<<-;766&tter$@+<<24--<,;,,->>>24444----------------::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::-,3-:,-3iP^Q/QQ~~QCCUQ~~~~~~~~QQQUUUQ~~~~~~~~~~~~~~~~~~~QQQQQQQU~~Q~~~~~~QQQQQQQQ~~~~~~~Q~~QQQQ~~~QUQQZVnbbbnbVCQ~QQQAAQQQQQQ~QQQQ~~~~~~~~~~~QQQ~~~/QUQ~~UQUQQPJzS1-,3X-hKJkknVVCUQQQQQQQQQ~~~~Q~~~~~~^^~~~~~~QQQQQQ~~~^/~Q^TIH9X1->3->3::::::::::::::::-,:--,<.1699ihjjjjjkkksppppppppppppppssppppjkjjjddddjkc9X.;;-:>2;;;1.X.9hy8*ukNkkjuuu*etee*etiutreeeeeeee*$$&ttu3>>,1;.+yy6..234-;<;-:234>>>:;;;-->444444>:;:>>4::::::::::::::::::::::::::::::::>>>>>>>>>>>>>>>>,>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>::>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>", ">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>::::::::::::::::::::::::---::,,3.--;171-;;;<<<<<::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::4>-<66+&&&&$$$$$&**euuau*&&96..<::44444444:-.++&$$$$$$@+..-<:--<33::444434:::<<-<166&&&$$&&97<-41...X;1.;;;>>>>>---------------:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::,-,--,-- k^Q~~QQQAZCQ//~~~~~~~~~QQQ~~~~/~~//~///~~~QQQQQQQQQQQUAQQQQQ~~~QQQQQQQUQ~~~~~~~~~QQ~~~~~Q~Q~~UUCbbCbbZAQQQQQQQQQQQQQQQQ~~~~~~~~~~~~~QQQ~~~~QUQQQU~QQUVBJH1X-,33 hzBBkbVCQQQQQQUQQQQ~~~~~~^~~~~~~~~~~QQQQQQ~~^^^/~^/x+99,:-22-2,::::::::::::::::-,:--33-XXX.+9ihkjjjjjjspppppapppsjjspsjjsppppaaedkjkl9..;>3225:>>,,;.16yyy*tdkkddeeu&**ee*etttt&&&*reee*&&*tt&@25>31;169y96;244<<<:::224>>>:;;;-;>444444>:::>>>::::::::::::::::::::::::::::::::>>>>>>>>>>>>>>>>,,>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>:::>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>", ">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>::::::::::::::::::::::::3,:::::,<;-,9g7;;;;;<<<<::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::4:-196+*&&$$$$$$**$&*eauu*&89+X.-::4444444-<++@@$$OO$$@+X.-::--,:::4344:::3,:-----166 @&6.<->fy6.+699+....;;;;-------------:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::,-,,-,,39j^QQQAAQACCUQ~////~~~~~~~~~~~~~^^~~~~~~/~QQQQQQ~QQQQQUAQQQQQQQQQQQQQQAAAQ~/~~~/~~UQ//~~~Q~~~^Q/QVCUbbCCQQ~~QQ~~QQQQQQQ~~~~~~~~~~QQQ~~QQ~~~~QQQUQU/QUUVVzN61,-::XXXxIkkVZUUUQQUQQQQQQ~~~~~^~~~~~~~~~~QQQQQ~^^^^/~^^^cX;.--33-37-::::::::::::::::<-::44223,1.XX8ckksssjjjpppaaaaasjkjpappkjppauuuppphh9X132255:23225-:,;X69yt*pkkpdetaeeeeeeettttr***r***e&&*89+X32>>.X.9&yy6<>44:>>222554>>>:;;;-;>444434>:;;:>>::::::::::::::::::::::::::::::::,>>::>>,>>>>>>>>,,,>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>:::>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>", ">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>::::::::,,,:::::::::::::,,,:::::,<;17771;;;;<<<<:::::::::::::::::::::::::::::,,,::::::::::::::::::::::::::::::::::::,,33::::::::::::::::::::::::::::::::::::::::::::::::::::::::4::<1699%$$$$$$$%$#$*eteetay&++X---:44444:..+@&&$$$O$@9+.-:4442:::::::::2:::----......XXX....;<,9yyyyyyy6+X..X.1<-------<::-------::----::::::::,,,:::::,,,:::::,,,:::::3,::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::-:,:--,,::::::::::::::::+B^QQCZZQQUAUQQQ~~/~~~~~~~~~~~~~~^^^^^~~/~~QQQQAQQUAAQQQQQQQQQQQQQQQQAAQQ~/~~~/^~~~~~~~~~~~~~QQ~~QQUCVZUQQQQQQQAAAQAQQ~~~~~~~~~~~~QQ~QUQQ~~~QUQQQQUUUUCVnH9.;<-4.X6XzIkVVVAUCUQQUQQQ~~~~~~~^^^~~~~QQQQQUU~/^^^^[^^T]yX,::444:>;;::::::::::::::::<<::44445>;;.X9hkssjksssjspauaauapjjauuaspkkuuawci9+XX;32222>:::44422::;X+9te*udauuuat&eettettttettte**t*%&89+XX:,--19y99t96;>24>>>>>444>>>>:;;;<,>444443,;;;:>>::::::::::::::::::::::::::::::::>>>>>>>>>>>>>>>>>>>>,,>:>>>>>>>>>>>:::>>:>>>>>>:>>>>>>>>>>>>>>>>::::::::::::::::>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>:-", ">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>::::::::,,,:::::::::::::,,,:::::<;-<771<;;;<<<<<:::::::::::::::::::::::::::::,,,:::::::::::::::::::::::::::::::::::::,33::::::::::::::::::::::::::::::::::::::::::::::::::::::::4:--;166&&&&&$$$O@$&&=$#*tut%%+ ..<<:::::<66+@@$O$$O$&6+->44444:---::::::::-----1<;.;;,,,,;-...Xo&t8*&&&8%++.XX.<<<<<<,,<<:::-----::----::::::::,,,:::::,,,:::::,,,:::::,,:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::,,,<-:,::::::::::::::::Xc^^QAAAQQQQQQQQ~~~~~~~~~~~~~~^^^^^^^^^~~~QQQQQQQQQAAQQQ~~~~~~~~QQQQQACAVAQ~~~~~~~~~^^^^^^^^~~~^/QQQQACCQQQQQQQAAQAAQQ~~~~~~~~~~~~QQ~QAUQQQQQQQQQQQUUPCVBJ8X6<,4<<6X9KBkVVVZCCUQQQQQQ~~~~~~~~~~~QQQQUUUUQ~~~^/^^^]^Rh;-:4444:>;;::::::::::::::::<<::444442>;.X6hssjjkjsssppauapaasjkpuuakjkkpaaih91X;1>-222:::<<44444::<.69yteudauuetu*eett**tttttttt***&%989.XX,1<.69y&*&@ .;>4>>>>>>>>>>>>:;;;<>>2442:<-.--->2::::::::::::::::::::::::::::::::>>>>>>>>>>>>>>>>>>>>,,>:>>>>>>>>>>>::>>>>>>>>>>>>>>>>>>>>>>>>>>>::::::::::::::::>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>:-", ">>>>>>>>,,,,,,,,>>>>>>>>>>>>>>>>::::::::,,,:::::::::::::,,,:::::;;;<,,;-;<<<<>>>:::::::::::::::::::::::::::::,,,:::::::::::::::::::::::::::::::::::::,,,:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::--...66&&&&&&%&&$#$$$*uu*@&*o+....-;<1699&@@@$O$$@y+1->44444:;;;;;;;;;;;;;;;;..;<<>4444>,1666o9ttyt&&*98y96XX..-<----<<,:::::----:---::::::::,,::::::,,::::::,,,:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::,,,,:<<<::::::::::::::::X9I^QAQQQQ~~~QQQQQQ~~~~~~~~~~~~~^^^^^^~~~~QQQQQQQQQQAUQQ~~~~~~~~QQQQQACZZVZU~^^~^^^^^^^^^///^^^^/~QUUQQQQQQQAAACAAAAQ~~~~~~~QQQ~~~QQQQAQQQQQQQQQQQQUUCCCVPz9XXf---<.6JIzbCCCCCU~QQQQQ~~~~~~QQQQ~UUQUQUUU~//^^^^^)Jcy6---444::>>;::::::::::::::::<<:::44452>;;.6gsjjjjjjssppaapjppsjjpaapppjjuupp91X-,72-22:::<<-224444::-1698tuduua**ueettt**ttuttt8**&&**8y96XX;;..69y9t&OXX;,:>>>>>>>>>>>:::;;:>2222>;;...-->2::::::::::::::::::::::::::::::::>>>>>>>>>>>>>>>>>>>>,,>:>>>>>>>>>>>::>>>>>>>>>>>>>>>>>>>>>>>>>>>::::::::::::::::>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>::", ">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>::::::::,,,:::::::::::::22222:::;<,,<;;;<<>>>>>>:::::::::::::::::::::::::::::,,,:::::::::::::::::::::::::::::::::::::::,::::::::::::::::::::::::::::::::::::::::::::::::::::::::22::-;...++6&&&9&&&##$**tuae#&*&96+XX.669999&$$$$O&&&y.1;>4444::;;;;;;;;--;;;<<<..67774444437999+9yyiy&&@%9y99.X<79977<<<<,:::::::--::::::::::::::::::::::::::::,,,:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::-<,,:<<-::::::::::::::::XXB^QAQAQQQQQUAUAUQ~~~~~~~////~~^^^^~~~~~~~QQQQQQQQQAAQQQQ~~~~QQQQQQQACZUZVC~^^^^^^^^^^^^^^^^^^^^^~Q~~QUQQQQQAQAAAAQQ~//~~~QQQQQQQ~~QQQQQQQQQQQQQQQQUUUUPVUByX1-3-,;18zzkCUCVCUQQQQQ~~~~~QQQQQQQQQQQQQQ~Q^^^^^^[)9XXX;7:444::><;::::::::::::::::<:::::22:2>;;.19jsssjjjjspppaskkjjjjpapjpjkjhkkh>>>>>222:::<<<<<:::4444:-.1+&*udauae*tttttteettt8ttteettt88y96.X....69999+ X.<,>>>>>>>>>>>>>>>>>2>>2><166666;->2::::::::::::::::::::::::::::::::>>>>>>>>>>>>>>>>>>>>,,>:>>>>>>>>>>:::>>>>>>,,>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>:", ">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>::::::::,,,:::::::::::::22222:::;<,,<;<,>>>>>>>>:::::::::::::::::::::::::::::,,,::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::,33,,<;;...++699@%%&&*&$uuau$O&*yt&&%&999&&&&&$O&O&*&yX1;2444::-;;;;;;;;;;;<>>,,.67fff7344:>7776166699+++XX...;<67ff77,<<<,:::::,:--:,::::::::::::::::::::::::::,,,:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::----<:<<::::::::::::::::.XB^QQQAQQQQQAUQQQ~~~~~~Q~~~///~^^^^~~~~~~~~~QQQQQQQQQQQQQQQQQQQQQQQUCCCCCU~^^^^^^^^^^^^^^^^^^~~^~~Q~/~QQQQQQQQQQQQQQ~~~~~~QQQQQQQ~~QQQQQQQACAQQAQQQQUUUCVVJJcX7442,.XhJjkbVbVUUQQQQQ~QQQQQQQQ~~~~~~~~~~/^^^[^TExX111<3::::::::::::::::::::::::::::>>>>>->;;,;<7jppkkssjspppaskkkjjjpppjpu8yhh9X5>33:::3:<<:::::::::444::-.X+tappuaaettutt*etttetttttuadt**899+X;<<;;<66..XX.-:2::::::::>>>>>>>>32>>;;699996.-:4::::::::::::::::::::::::::::::::>>>>>>>>>>>>>>>>>>>>,,>:>>>>>>>>:::::>>>>>>,,>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>", ">>>>>>>>::::::::>>>>>>>>>>>>>>>>::::::::,,,:::::::::::::22222:::-;<<::>>>>>>>>>>:::::::::::::::::::::::::::::,,,:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::<;;....66%@@@&*&#e*uu&OO&*8tt8*&&&&&&*&$O&O&&&y..;>444:-->>::::::>>>>2222;16777,,,:--;;--<-..66.X..XX.-<,;<<<;.--<<::::::,:--:,,:::::::::::::::,,::::::,,,,,::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::----::<--------::::::::.XBUQQAAAAAQQCCQQQ~~~~~/~QQQ~~^///^~~~~~QQQQQQQQQQQQQQQQQQQQQQQQQQUCCCCCVCU~^^^^^^^^^^^^^^^^^^~~~^^~UQ~QQQQQQQAQAQQQQ~~~~~~QQQQQ~Q~~QQQQAQQACAQQAQQQQQUCVVVVBY9;43-3;.9kVkskbbUQQQQQQQQQQQQQQ~~~~~~^~~~~~~^^Tz89,;7X3>X>>>>:::::::::::::::::::::>>><<;;;;;;;,>>7aapkkksjsssspskkkkkkjpppa8thh9XX44::::<-<<<:::44-<<::4442<.X+taddupdtetuteettttettuuuuddute8t89+--,33---...;;->3;;;;;;;;,,>>>>>>32>>;.6y%&&+.->4::::::::::::::::::::::::::::::::>>>>>>>>>>>>>>>>>>>>,,>:>>>>>>>>::::>>>,>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>:::>>>", ">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>::::::::,,,:::::::::::::22222:::>>::::>>>>>>>222:::::::::::::::::::::::::::::,,,:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::<<;....%+@o@&&&$$eu&###$$$&&$$$$$$$$$$$$O&%&++.;>22:<-.>>>>>>>>22222222<;-.......---<>>22--3,.;-;<,3344.;...-<<----::::,:--:,,::::::::::::::,,,:::::,,,,,,:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::3,---::<--------::::::::X+JUCAAAAZCAACCUQQUQQQ~~~QUUUQ~~^^~~~~QQQQQQQQQQQQQQQQQQQQQQQQQQQUCCVCCUUUQQ^//^[[^^^^^^^^^^^^~~///^^~~~~~~~QAZCCAQQQ~~~~~QQQQQQ~Q~~QQQCAQQQAQQQAAQQQQUCVVCbjIHX445>;1X nVkkVbPQQQQQQQQQQQAUQ~~Q!!~~~~~~^~^^JqXX:3>X>3>7>>>>::::::::::::::::::::>>>>;;;;;<--,>;3uapskkkjsssjsjkbkkkkjppp8yiy9XX64::-<<-.-<<:4444--<::444:-.X+tppdajdeetteetttttttteeuadduuuttyy9,-:33442>-;,,>43;;;;;;;;<,,>>>22442,..+t@&&+.->4::::::::::::::::::::::::::::::::>>>>>>>>>>>>>>>>>>>>,,>:>>>>>>>>::::>>>,>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>:::>>,", ">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>::::::::,,,:::::::::::::22222:::3,>>>>>:>>>>2222:::::::::::::::::::::::::::::,,,::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::<<;... o@@%&$$#$*t*&$O$$OOO#$$$$#OOO$&$#$@*o+.<,:::-..>>>>>>>>32222444711<;......;-:2344453--,----:444....;<------::::3:--:,,::::::::::::::,,,:::::,,,,,,:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::73,--:<---------::::::::X9IUCAZAAZZCCCCUUCZCUQQUQUAAUQQQ~~QQQQQQ~QQQQQQQQAAAQQQQQQQQQQQQQUCCVCCUUQ/^^^^/[[^^^^^^^^^^^^~~Uk$*kU~~~~~~QACCAQQQ~~~~~QQQQQQ~~Q~~QAACCAQQQQQAZCCUQQUZCZVVnBL944f211%%8PnkVnVUQQQQQQQQQQAUQQQQTQ!~~~~~UVjjh0X%4-37>-5-;;;>::::::::::::::::::::>>>;;;;;;<--,>->*apaskbkjsjkkkbbVkkjppppia9XX..X::3,<--<-<<:4444.-<<:444::;.+yppdpkd&eue&*tttttaueeeaddduaauttt8f75444442-->>:44;;;;;;;;<,,>>>22442,.X@e$re@X-24::::::::::::::::::::::::::::::::>>>>>>>>>>>>>>>>>>>>,,>:>>>>>>>>::::>>>,:>>>>>>:>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>::::>>,", ">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>::::::::::::::::::::::::,,,:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::22222:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::;;;;16999%+%tt&O$&&$$&&&&$OOOo%&&&&96733>:>,<-.;..<344432,<<<---::::::::--------:::::::::::::444::::::::,,,:::::,<---::-:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::377<-;;-:::::::,::<<,<- kVVCCCCAUCCCZZCVVZZZZCCACZCUQQQQQQQUUQQQQQQQQQQUCCUQUQQQQQQQQUAQCQAZZQQ~~~~~^//^/^^^^^^^^^^^^^^JkkVZ~~~~QQQQQQUAAAQ~/~QQQQQQ~~~~~~QQQQQAAQQAUUCUCCCCCUUUCVVZkCa.<.:4-fh+kPkVVnVUUUQ~~QQUAUQQQQ~QQQQTKlh7,:--5>>:::::::::::::::::::::::::::::::::::::::::::22222$puuppjjjkbbbbbVVkkpkpiiy9+..:24::::::::::::::::<:::4442>;.69icxllh++hyi&$eeretttttuaaaueeddduery9+X.1;->2222,,,>>>>>>>>>>>>>>>>44-.X @&$e96.-24;;<:>:::2>>>>><<::::::::::::::::>>>>>>>>>>>>>>>>>>>>,,>:::>>>>,,>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,,,>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>", ">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>::::::::::::::::::::::::,,,:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::22222:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::;;;...1+96+&8t&%*e*&&**&&&&@OO#&&&&++1;;--;;;.....-,2443,,,,<:--::::::::--------::::::::::::::::::::::::,,,:::::7,<<<:--::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::-----;77:::::::::,,<---< kVnVCCVCCCZCZVVVVbbVZZVZZZCUQQAUCAACAQQUACCCCAACVVZCCCCQAQQQUAACCQQCAQQ~~~///^^T^/^^/^^^^^^^^^^{^////~~QQQQQQQQAQQ~~~QQQQQQQQ~~~~~QQQQQAAQQAAUCCCUCCCPUUUVbbbUsX.,,32>1XiCkkVUPUTQQQQQQAAAUUUQ~~QUQV8XX<<:::422:::::::::::::::::::::::::::::::::::::::::::22222OaaajjjkjbbbVVbVjskjkiy9&+.X.:24::::::::::::::::<:::44423>16yhkxhy9XX9yye*eeettt8ttuaaauuuddauer&&%+.X;,>2222>>,>>>>>>>>>>>>>>>>44:;+%&t&&@+.-24;;<:>:::22>>>><<::::::::::::::::>>>>>>>>>>>>>>>>>>>>,,>:::>>>>,,>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,,,>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>", ">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>::::::::::::::::::::::::,,,:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::22222:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::>>;;;;..6+++++++.++ o++%%&&$OOO$&$@@++.111666..+...<2442,,,,,,::::::::::--------<<::::::::::::::::::::::,,,:::::7,,<<:--::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::3,---,77::::::::-:,,<-<, VCbbVZZCCCZZVbbVbkkbVVVZVVVZCCACCAAUUCZZZCCACCZCVVVVCCCACCAACCACCQQQQQQ~~~~//^~~~^^^^^^^^^^///^^^//^~~~~~QACCUQAQ~~QQQAAQQQQQQ~~~~QQQQQAAQQCCCCCCCCVVCCUUZVbkVV+9g<-7-1XiJkkVUPQQQQ~~QQZCCCCCPUQQUTjXX6--::222>:::::::::::::::::::::::::::::::::::::::::::22222 tpajkjkkbmkbbkjaskkji9+XXX.->44::::::::::::::::<::::4422;;69yhi91X.X+yytreteettttappppdpadpuee*&&996.;32222>>>>>>>>>>>>>>>>>>>>44,;+9ter@ X.<24;<;:>>::222>>>>>::::::::::::::::>>>>>>>>>>>>>>>>>>>>,,>:::>>>>,,>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>", ">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>::::::::::::::::::::::::,,,:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::22222:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::222>,,;;.............+++@%&$#O$$$$@@@%%966696++%+.<<32::::<<,,:2::::::::::::::::<<<<<<<<<<<<<<<<::::::::,,,:::::<<---::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::--;<<;-:::::::::--,,,--*ZCbbVVZVZZZZVbbkkkkkbVZVVVVVVCCZCCCUUZVVZCAACZZZZZZCQQQQCCCAZZZAAUAAQQQQ~~~~~~~~~~//^//^^^^^//^^^^~~~~QAAZZZCUQUQQQQQQQAQACQQAQ~~QQQQQAAAQQCCCZVCVbbVCZVZVZVkkZ9yh1-7-1XhJkkbVVAQQQQ~QQAUUUPPPUVUTPhX1--::4232>:::::::::::::::::::::::::::::::::::::::::::22222 %iupjskbbbkbbsssknk896...-<:>44::::::::::::::::<<:::4422>;;6+++1.X1X+hyt&reeettuappppddpdpptee&t&@996;->222>>>:>>>>>>>>>>>>>>>>43,.+9ytt@ X.;>3;;;:>>>>222>>>>>::::::::::::::::>>>>>>>>>>>>>>>>>>>>,,>:>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>", ">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>::::::::::::::::::::::::,,,:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::22222:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::5>2>>>>-;;;;;;;.33,;;..++@@$$$$$$$$$&&&&&&&&&%%&966773:::-<<<::2::::::::::::::::<<<<<<<<<<<<<<--::::::::,,,:::::<<<<--::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::--,777,-::::::::,:----<7VPVkVVbkkbVVZVVbkkkkkbVVkbVVVVVVZZbbVCZZVVVVVZZZZCCCCQQQQCCAACZVCCZZZAAAQQQQQQQQ~~~/^^^~^^~~~~~~//~Q~~~QAZZZZZCUAUUUQQQQQQVbCAAQQQQQQQAAACAACVbbnnbkkbVVkVkkkVskkh9.X--.XhBjajkkbAQQQQQQUUUUPPPJJxh9XX7;::::>>>>:::::::::::::::::::::::::::::::::::::::::::22222X+88ijpjbbkkbbkjkknh0X;-;,,,:544::::::::::::::::<<:::44233,;.XXX--.1X1g*t$rteettaapaauuaapdptre*t&@&991->222>>:->>>>>>>>>>>>>>>>52>.6yyiy@ ..-:3;;;:>>>422222>>>::::::::::::::::>>>>>>>>>>>>>>>>>>>>,,>:>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>", ">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>::::::::::::::::::::::::,,,:::::::::::::::::::::::::::::::::::::::::::::::::::::,,,,::::::::::::::::::::::::::::::::::::22222:::::::::::::::::::,,,,,,,,::::::::::::::::::::::::::::::::::::::::44442>::>>-;,,;;445:--..6+@$$$$$&&&$$$$$&&&&&$$$999973,3:-<<<:::::::::::::::::::::::<<<<<<<<----::::::::,,,:::::,,,,<--:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::,,,7773,::::::::-,,<--7gVZkkVkkkkkkVVVkkkjdjkbkkkkbbbbbVVVbkVVVVVVVVVVVVZZCCCQQAAAAQQQZVbVVVZAQQQQUAAUUQQ/~Q~//^~~~~~~~QUQUUUUQQAZZZZVVVCAUAAUUAQAZVCQAQQQQAQQACACCCVbbbkkbkjkkjkkjkkkpkkkkh9..11+xkwsbbbVZAQQACUUUUPBxh9XX..7,-::2:::>,:::::::::::::::::::::::::::::::::::::::::::22222..69ypsjkbmkbbkjjkkhXX>5:::::442::::::::::::::::<<::::2223,;.X.1-:,>>>>>>>>>>>>>>>>>>>>>>>42>..9yyy% ..--2--;:>>22222222>>::::::::::::::::>>>>>>>>>>>>>>>>>>>>,,>:>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>", ">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>::::::::::::::::::::::::,,,:::::::::::::::::::::::::::::::::::::::::::::::::::::333,,:::::::::::::::::::::::::::::::::::22222:::::::::::::::::::,,,,,,,,::::::::::::::::::::::::::::::::::::::::22222222>>>>>>>>44433,<1+++%%$$$&&&$$$$$rrrr&$$$&9997,::,<<<<::2::::::::::::::::>>>>>><<<;;;;;;;::::::::,,,:::::,,,,<--:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::--------::::::::--,,--fhkNkkkdkkkkkkkkdddpddkkkjkkkkkkbVVVbkVVbVVVVZZVVVZZCCCAQAAAAAQQAVmVZZAQQQQQACZZCUUQQQ/~Q/~QUUQQUAU~UUQAZZVVVVVVVVZCCCCCCCCCCQQQUCUUACAAACCCCCbmmbkjkksppapppkjapkakIPzhXX1XlBupbbVbmVAUCVVVnkh9XXXXX;;-,3:::>:-;>:::::::::::::::::::::::::::::::::::::::::::22222-;198ajskVVVVbbksjkl1;34444::222::::::::::::::::<<::::22:>>-;;113:3:-16yt*tdu*uiuuuuwwuueeutett&$&e&+661;>>>>>>>>>>>>>>>>>>>>>>>42,;..+&y9+.1,,:---:>>222422222>::::::::::::::::>>>>>>>>>>>>>>>>>>>>,,>:>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>:::>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>", ">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>::::::::::::::::::::::::,,,:::::::::::::::::::::::::::::::::::::::::::::::::::::333,,:::::::::::::::::::::::::::::::::::22222:::::::::::::::::::,,,,,,,,::::::::::::::::::::::::::::::::::::::::22>>>>22>2332>2344442--.X.69%%%&&&%$$$&rrrrr&$$$@&997<--,,<<<::,::::::::::::::::>>>>>>>>>>><<<<<::::::::,,,:::::--<<<-:,::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::,<<<,,::::::::,--<<--7kkkkkjkkjjdpddpdeuapddjjjjkkkkkVVVkkVVVCVVVVVVVVZZZZZAQACAAAQQCVkZUUQQQQQQACZVZCAACQ^bwjUUUUUUCZUQZZZZVbVVVVVkkVVZZVVVCUCCQQQQUCCCCCCACCCZZVbjkkjpppaaaaeauapdjpssVnBz6.XXczpaakVbkkbkVIIJl9XX.1;7->3-3--::>>-;;:::::::::::::::::::::::::::::::::::::::::::222224,-98ijadkVVVbbbsjkx1;2544::,,,>::::::::::::::::<<::::222>>>>,;;3-4::1+iteupu*ti==**eeee****&tt&$rr&&991-->>>>>>>>>>>>>>>>>>>>>>52,,.X+6y9+.671----;:>2222222222::::::::::::::::>>>>>>>>>>>>>>>>>>>>,,>:>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>:::>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>", ">>>>>>>>>>>>>>>>>>>>>>>>::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::2222222222222222::::::::::::::::,,,,,,,,,,,,,,,,::::::::::::::::::::::::::::::::>>>>>>>>>>>>>>>>4422>>>;...1+666%&&&&$$$rrr$&**&&&++;<:-::<<<-::::::::::,,,:::::222:233->3,:--37:::::,,,:::::---<<<<<---::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::,<<<;;::::::::-:,,,<<-$dkjjddddauaddduauuuuadddkkkkkVVVVkkkbVVVVVVVVVVVVZZZCACCZZCAQAbVZCAUQQQQACZVVZCCQCZQk #VUUZCUCVZCZVVVVkkkVVVkkVVVVZbkCCCUQQQCCCCCCCCCACCCVVbjjkkpaapaut**etuapdkkkknzh91X9HpajjsknznBnc891.;;,,-->33::::::>--;;::::::::::::::::::::::::::::::::::::::::::::::::47-.yitakkkbbVnnkdkx9-2344::<;;;::::::::::::::::,:-,::>3>>2>->3;444::<69*tau*ui8u*=eueee$&&*tttteettt991;;>>>>>>:::>>>>>>>>>>>>>2>--;..+96+6997111,;->>222222222::::::::::::::::>>>>>>>>>>>>>>>>>>>>>>>>>,33>>>>:>>,,>>:>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>:::>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>", ">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::2222222222222222::::::::::::::::,,,,,,,,,,,,,,,,::::::::::::::::::::::::::::::::;;;;;;;<<<<<>>>>:::>><<;--;;;;;;6666%&&&t*&*eeee&&+..<::::<<<-::::::::::,,,,,,,,3>>225>32>>23325:::::,,,:::::---<<<<<:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::,<<<;;::::::::::,<<<<<$uauuaddddppdduteeeeuauudjkkkkkVVbkkkkkkkkkbVVVbbVVVVZZZZZZCVZZVZVZCAAAQACCAZZCCCUCPQCa#kkVCUVVVZVVVVVbkkkkkkkkVVVVVkjVCCCCCCCCVVZCCCCCCCZZVbjsjjpaaaute&&***upkajVnkxkx8XXzkpjjxkkxxxv.X.-,33:-73:--:33:---;,11::::::::::::::::::::::::::::::::::::::::::::::::43-.9iuujkkkbbbbkdkk9X,3::<<;;;;::::::::::::::::,::,::>37>>>->>-4444--66ttuu*&8ytuuteeuu***&&eterrett991;;>>>>>>::>>>>>>>>>>>>>>22,<;<66+.+6667f61--->>>222222>>::::::::::::::::>>>>>>>>>>>>>>>>>>>>>>>>>>3,>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>::>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>", ">>>>>>>>>>>>>>>>>>>>>>>>,,,,,,,,::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::2222222222222222::::::::::::::::,,,,,,,,,,,,,,,,::::::::::::::::::::::::::::::::---<<<<<<<<<<:::<<<<<;;<>>>;;;;;..11+++%t*&*eettr&+..<,:2::<<<-:::::::::::,,,,,,>>>3>--32>:5::::::::::,,::::::-----<<:,,::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::,<<<;;:::::::::::<<<<<&te*reudpddddattrretuauudpdjjjjkkjkkkjdpddskbVbkkkbbVVVVCZCZVbVVVVVVZVZZZZAAZZZZZVZCPUk=#=wkVbkVVkkVkkkkkkkkkkkkkkkkaabVCCZZCCZVVVVVVVVVZZZZVkpppauuutee&*&&*upksjbkkkkkh66lxxBJHhXXX11<-::3::::X-:,33:-,>>,,>--::::::::::::::::::::::::::::::::::::::::::::::::44-;9ii*jkkkkkkkddjj9.,::<<-;;;;::::::::::::::::,::,:-,37,>2>5>54444-..+t*tu8 +hyyt&*te$eee*&*etrretyy91;;>>>>>::>>>>>>>>>>>>>>>233<-;67666...696<..-<,>>>>>>>>>::::::::::::::::>>>>>>>>>>>>>>>>>>>>>>>>:>,>>::>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>:>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>", ">>>>>>>>>>>>>>>>>>>>>>>>,,,,,,,,::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::2222222222222222::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::---<<<<<<<<<<<<<--<<<;;<,,>>2222-.;;...+9yttetttt*+..:2::::<<<:::::::::::::,,:--;;;;;<;--->>---3::::::::::::::::---<<:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::,<<<;;:::::::::::<<<<<*tteeuudaauuuuttrretuuueuuappadddppppppppskkkkbVkkkkbbbVZVVVVbbVVbbbbbbVVVZZVVVVZVVVVVVa*apkkkkkkkkkkddkkkkkkkjkkdpsddVZCVVVVZZVVVVVbbbbVVVVkjppauuteer*rr*rtuaaaasjkbkkncvvlzHx91.11;--33:---::,3,---,,7,-->,3,::::::::::::::::::::::::::::::::::::::::::::::::4:>;6yi*jjjskkkkdajh9.<-<<--;;;;:::::::::::::::::::,:-,77;-,>>>24444:;66y8*t9XXhyy88yit**ee*&&etrrrt8991;;>>>>::>>>>>>>>>>>>>>>>33,<-;<6f7....1666.;<<;,>>>>>>>>::::::::::::::::>>>>>>>>>>>>>>>>>>>>>>>>:>>>>::>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>", ">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::2222222222222222::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::<<<<<<<<<<<<<<<<--<<<<;<-->>>222;;;;;;;.6yitetauyt+.-:44:::<<<<<::::::::::::----.X.9f71.<;,13,--::::::::::::::::<<<<<---::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::,<<<;;:::::::::::<<<<<&ttttuapdpaueeetrrreeeeeuuuaauapjpaaauuajkkkkkbVjkjjkkkkkbkbbbbbVVbkkkkkkVVVbkVVVVkkkVkkkNkkkkkkkkkkkddddpdkddddkdapkkVZVVbbVVVVVVVVVkjpjjkkkppaauterr*&rtteeeee8ukkkkjkjxx9616X;;,,:-37-::,,,,;;-----,1Slg7---<::::::::::::::::::::::::::::::::::::::::::::::::3-;;.9i8pjjppjkjupjh6.<-<<--;;;;:::::::::::::::::::,<-,77;-,,>>>444:<<69yyt99.X9.+9y9&8i$*ee&&*er&&&%96;;;>>>::;>>>>>>>>>>>>>>>>3>:<,,<-96...16666666;-<<>>>>>>>::::::::::::::::>>>>>>>>>>>>>>>>>>>>>>>>:>>>>::>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>", ">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::,,,,,,,,::::::::::::::::2222222222222222::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::<<<<<::<,>>>>>>>-;>>;;;<.9y8&euuyt6.-2444::<<<<<::::::::,::-----+X9xNg.Xg6XX11;;,,::::::--::::::<<<<<---::::::::::::::::::::::::::::::::,,,,,,,,::::::::::::::::,,,,,,,,::::::::::::::::::::::::::::::::::,<<<;;::::::::,::<<<<>:::-::,;;...7.X;1;.;71-X--->::::::::::::::::::::::::::::::::::::::::::::::::3-;;X6y8uhjpuapjahh9XX,<<<<<<>>2:::::::::::::::::::,--<77;-,;;>>22>><169yyy961;,XX196++*&euue**eer*&%961;;>:::;;>>>>>>>,>>>>>>>>,:-,37,-<<11..6766696;-;;<<<<<<<::::::::::::::::>>>>>>>>>>>>>>>>>>>>>>>>:>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>", ">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::,,,,,,,,::::::::::::::::2222222222222222:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::<,,,,;;;;--->::>;.66%@$rty9+.-4444::<<<<<::::::::,:---:,,+9hNxy+Xlg1...;1,,,:::::---:::::<<<<<:::::::::::::::::::::::::::::::::::,,,,,,,,::::::::::::::::,,,,,,,,::::::::::::::::::::::::::::::::::,<<<;;::::::::,,:<<<<,;XXX9vLc1....1.;<133,:::::::::::::::::::::::::::::::::::::::::::::::::>;;1..98*ipaiaaahjh6X.,-<<<:>222:::::::::::::::::::,--171.;;->2>2>>>;169yyy9.;;-6<.669%o*upduteeer**999;;;>:::;;>>>>>>,,>>>>>>>>,>>,33,<;;166..6.+697<.;;;;<<<;;::::::::::::::::>>>>>>>>>>>>>>>>>>>>>>>>:>,,>>>,>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,,>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>", ">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::,,,,,,,,::::::::::::::::2222222222222222:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::<<;;;;;;;<,,,>>>,;..@OO$et9+.-4444::<<<<<::::::::,:--:,37yhhy++++lhg99.X.,,,:::::---:::::---<<:,,::::::::::::::::::::::::::::::::,,,,,,,,::::::::::::::::,,,,,,,,::::::::::::::::::::::::::::::::::,<<<;;::::::::,,:--<<,@9ttt**eueeeee*=&rreetuueuuuuaauueuudappppddppdddduudpuppaakVkskbkkkksdddddskkkkddddeuddddruddddkaetttttuuuteeetuddkkkkkkbVVbbbVkjpaueeuuuapppauete&$$&&&ee*eee=9tjkkMsjjjlv;,<<2::33:-:-1999hzKWhXX11...;;----:::::::::::::::::::::::::::::::::::::::::::::::::;;;1.X+9&8uipjp8jch6X,,-<<<:>424::::::::::::::::::,,--17..;;-,3>>>>,;.66y999X.35..<..6&%8uppauuee&&&996X;;>::;;;>>>>>,,,>>>>>>>>33,,>;<;<..6976X..+671.-;;;;;;;;::::::::::::::::>>>>>>>>>>>>>>>>>>>>>>>>:>,,>>,3,>>::>>,>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,,,>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>", "::::::::::::::::::::::::::::::::::::::::::::::::>>>>>>>>>>>>>>>>:::::::::::::::::::::::::::::::::::::::::::::::::::2222222222222444444444444444422222222222222222222222222222222::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::22222222::::::::<<..698yt*+X;344444442><;<24444:.X@&Oo****ta8ukjjaiii&O ......<1.76.X.<..1;-,254444:<<<<<<<<<<<<::::::::::::::::::::::::;;;;;;;;>>>>>>>>--------:::::::::::::::::::::::::::::::::::::::::::::::::::::::::37999ttteett*&**ettttee*tuaauaauaaaapppjppaapjkdddduuaaaaapdddkkjkkdkkduuuuddkkjduaaaaddduuaddauutteeeeuterreetdpppdkkkkkkkkkkkkdddauteteeeeteeer&&$$$reeee**eue&ukkkbkbsCU=X% XXXXX9hksVkVUbnUTxXX.-::4444:>>>::::::::::::::::::::::::::::::::::::::::::::::::,;>:::<.ytujksdjdda+X,3444:;;;..::::::::::::::::>>>>>>>>-:::>>>>;-:44477yy9+.-44<,<<,699*ddeau*uy99997;-222>>;;-:::>>,--<<;<<<<:;.<13,>>,-.699@O++66+XX.<>:4442,::::::::::::::::>>>>>>>>>>>>>>>>>>>>>,,,>>>>>>>>:>>>>>>:>>>>>>>>::::::::::::::::>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>::::::::::::::::", "::::::::::::::::::::::::::::::::::::::::::::::::>>>>>>>>>>>>>>>>:::::::::::::::::::::::::::::::::::::::::::::::::::2222222222222444444444444444422222222222222222222222222222222::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::22222222<:::::::<<..69tytt+X.,5444444>;-;<24444<.+*t&#%&t$tpiaa*pu8*&%O +66+.XXX.666666..77<>:53444::<<<<<<<<<<<::::::::::::::::::::::::;;;;;;;;>>>>>>>>--------::::::::::::::::::::::::::::::::::::::::::::::::::::::::::,669tytteee***eeeettteeeetuuapaaaaaappppppppppddkjdapaauapddjkkjkkdjkdduuuapppdduaddddddauuaddtuutereeter*reetaaaudjjdpppdddkkddauutteeeeeeeeeeer&$$$&eee****et*uspsbbbnUQVi X8hlchxBPUQZAUCCCRlX11;--444::>>>::::::::::::::::::::::::::::::::::::::::::::::::,>>::--.9yakVkkkjpi6X-:444:<;;;;::::::::::::::::>>>>>>>>:::>>>>><;>44437yy&+.>44<:;;;166&aurer=ey9966;--22>>><;;>>>>,,;-,,<<;:::.;<73>:>,<<699&@.+6++XX.<>:44:::::::::::::::::::>>>>>>>>>>>>>>>>>>>>>>,,>>>>>>>>:>>>>>>:>>>>>>>>::::::::::::::::>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>::::::::::::::::", "::::::::::::::::::::::::::::::::::::::::::::::::>>>>>>>>>>>>>>>>:::::::::::::::::::::::::::::::::::::::::::::::::::2222222222222444444444444444422222222222222222222222222222222::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::22222222<:::::::-<..699ytt+X.;-2:33>:,<;;<,444:<.9tt*$&8@Opp&**ujpit8tt*9999++X++69999+X697;;,>2244::<<<::::::::::::::::::::::::::::::::;;;;;;;;<<<<<<<<--------:::::::::::::::::::::::::::::::::::::::::::::::::::::::::--..+9yiteee**ete**eeeeee*euaapaaddaapppaaappppddjkpaaapaapdjkkdpdddddadueuapppkddddddddddateuutuuueretteereettuueeeuauuuueeupdaaueeetuteeeeeeeeerr&$$&eee*eeeeteuppkbVVCVVPBkzJITTPPPUQAAQAQQQYqX11;:::4:::>;;::::::::::::::::::::::::::::::::::::::::::::::::,>>::--.9y&uaasjkpi91--344:>>;;;::::::::::::::::>>>>>>>>:::>>>>><<2442,6y9@ .,44--::;<1++*e&$**e966.;-<3>>>>><<<>>>>,,<-,,<:--::.<77,:-,-<;.+9&@7766....<>:4:::<::::::::::::::::>>>>>>>>>>>>>>>>>>>>>>>,>>>>>>>>>>>>>>>>>>>>>>>>::::::::::::::::>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>>:>>>>>>>>::::::::::::::::", "::::::::::::::::::::::::::::::::::::::::::::::::>>>>>>>>>>>>>>>>:::::::::::::::::::::::::::::::::::::::::::::::::::2222222222222444444444444444422222222222222222222222222222222::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::22222222<<::::2:-<..6699et&++..<;,<..1;;::::::::::::::::::::::::::::::::::::::::::::::::,>>:::-.+y*taajsc8996;-2:::>>>>>::::::::::::::::>>>>>>>>:>>>>>>>,>244>,6y&@ .,44--:::;;. o&t*tt*XX..<,,3:>>>>,<<>>>,,,>->>:-:>>>1113,::,-;.X+99+77711;;;<>::::<-::::::::::::::::>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>::::::::::::::::>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>3,>>>>::>>>>>>>>::::::::::::::::", ":::::::::::::::::::::::,::::::::::::::::::::::::>>>>>>>>>>>>>>>>:::::::::::::::::::::::::::::::::::::::::::::::::::2222222222222444444444444444422222222222222222222222222222222::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::22222222<<::::2::,-.16+6%9&+++X....X.66...X.-<.X+te&ee*t$t&O Ou**te&$&r*e***tt**ettt*&%%%9+X.;;<>>22::::::::::::::::::::::::::::::::::::<<<<<<<<<<<<<<<<::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::,----...+9ttr&$re*****&&$&euuetuuuuuuuuuaueeupddkpjkdpppaauappjpdjjdduuuddddadddadpduuadddaauer&tteeeer*ee*&**&&rr*&*eeeetute*&*e**eeeeeteeeeeeeer&rr&&&****eeue8uapjjkkssbVVPUPCCVCQQQQAAAAACCQxX1.--,::::::;;;::::::::::::::::::::::::::::::::::::::::::::::::;>>242,;X98upjkkh99997-::::22242::::::::::::::::>>>>>>>>>>>>>>>>,>242;169&&+6<44-:,2:--.XX9yyyy+..;<<>>::>>>>,<<>>>,,,>:>>>:>>2371;<,>>,,,..699+771;.;;-<>::::--::::::::::::::::>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>::::::::::::::::>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>3,>>>>::>>>>>>>>::::::::::::::::", ":::::::::::::::::::::,,,::::::::::::::::::::::::>>>>>>>>>>>>>>>>:::::::::::::::::::::::::::::::::::::::::::::::::::2222222222222222222222222222222222222222222222222222222222222::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::22222222<<::::22:3;.;...+%&+%+ XXXX+999996.XX.++tyteee&# tt& Ou*$&***reeeeeette*uapaue*$+996+XX1<,>:2222::::::::::::::::::::::::::::::::,,,,,,,,<<<<<<<<::::::::,,,,,,,,::::::::::::::::::::::::::::::::::::::::-----------<<;..X6yterrreeeee*&&&*eeeeeuuuuteeeeuteuudpdkppdpappaaaapphpaddpdueueaddpdppddddutuaduteuuteteeeeee&r&&&&&&&$$$$&&&&*retterreeeeeer*eeeeeeerr&&&r&&***e*****8apuu*waaskbVPUUCCCCCUAAZAACAAQ~h;11--3::::::;;;::::::::::::::::::::::::::::::::::::::::::::::::>>22443<1998ikkjg69yg91.;<>22444::::::::::::::::>>>>>>>>>>>>>>>>2222>;1+9ee96<44<,34:::-..9yy99.<<,;->2>4>>>><<<<<>>,3>:>>::>3337<--,,>>,<..696 ;;;.166-;>:2:<--::::::::::::::::>>>>>>>>>>>>>>>>:>>>>>>>>>>>>>>>>>>>>>>>,,,,,,,,::::::::::::::::>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>>:>>>>>>>>::::::::::::::::", ":::::::::::::::::::::,33::::::::::::::::::::::::>>>>>>>>>>>>>>>>:::::::::::::::::::::::::::::::::::::::::::::::::::2222222222222222222222222222222222222222222222222222222222222::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::22222222<<::::22:3:-;-.;X++699@@Oo+9y999y99+X+9yitte**&OO@$&ttt$$$$&&$&rewuuueeeapdauue=@&8y9.X1;<,>2444444222::::::::::::::::::::::::::::::::::::::::::::::::::,,,,,,,,::::::::::::::::::::::::::::::::::::::::-----------:,:;;.69tteeretter&&&re***reueeeeeeeeeeeeuaddkpaauuadaddaappiadppddadeaddddppdddaeeeeaueetuuutttttteee*&$&&&&$$$$$$$$&&reeeeteer*rr*&rrreeer&e&&&&&&&*eee***etaitt**udkkbVCVVbCCCCUQQAQAAAUUn1;-,->3::::<<;;;::::::::::::::::::::::::::::::::::::::::::::::::>>2444:;.+9ycx8%6.6999.X.;;>2444::::::::::::::::>>>>>>>>>>>>>>>>344:-;6+**e96<>3-<:444::<699961.-<<-:33322>>><;;;;;>,,>:>>:>23771;-;,>>>:-...+.X.116696;;:22::--::::::::::::::::>>>>>>>>>>>>>>>>::>>>>>>>>>>>>>>>>>,,>>>,,,,,,,,::::::::::::::::>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>::::::::::::::::", "::::::::::::::::::::,,33::::::::::::::::::::::::>>>>>>>>>>>>>>>>:::::::::::::::::::::::::::::::::::::::::::::::::::2222222222222222222222222222222222222222222222222222222222222::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::22222222<<::::22:3>-,;-,X669yy99&&9y9.X.9y9+ Otpatt*$&e#@Ott**O*e&&rr$$rwuaawewwdddweuu*$@%yi9XX.;<,>222422222::::::::::::::::::::::::::::::::::::::::::::::::::,,,,,,,,::::::::::::::::::::::::::::::::::::::::--------<--:::>,.669tterette&$&*e*&*eeeerr*reeeeeerreuddjauauuadadduuut*euuudauddddddddpuuueeeerttttuuteettteeeee*$$$##O$$$&&$$$&$&&&&rte*&&**rr&&*rer&&e&&&&&&&&*eeeeuuuittppuaadkbbnCnbnbmnQQQQQQQCUPqX1-7-:3-::::<;;;::::::::::::::::::::::::::::::::::::::::::::::::>>2444:-1X66hx%X;.699y&+X.;>>244::::::::::::::::>>>>>>>>>>>>>>>>344:-.66&&&96<->-<:44444,797<.-,->32232:222>>;;---->>>::>>:>3377;-;,,::>>;<<...+X+++996..;:22:--::::::::::::::::>>>>>>>>>>>>>>>>:::>>>>>>>>>>>>>>>>,,>>>,,,,,,,,::::::::::::::::>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>::::::::::::::::", ":::::,,,::::::::::::::::::::::::::::::::::::::::>>>>>>>>>>>>>>>>::::::::::::::::::::::::::::::::::::::::::::::::::::::::22222222::::::::::::::::::::::::2222222222222222::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::2222222222222222<<::::22::>>>>>>;;<66699y999.X<6+999&&idtte$$$*&@&*e&&&rer&&&$re=*wuaaadaapdu*=O$OOO@%%6X..<3325,33333::::::::::::::::::::::::::::::::::-------------:::::::::::::::::,,:::::,,,:::::::::::::::::::::::::::::,,,<<::442>-<69*eee&tt&&*e**er&*eeeeetteeereeereuutptuueudadueetutee&tpduddddddddpper**rr&$&&reeeeeeeeee*&&r&$OOOOOO$$&&$$$$$$$$&&&ee**er&$&*reeerrr&&$$&&&&**eeuap8tipppappkkbmmCmmmmmmbVCCQCCPPj0>>>>>>::::::<;;;:::::::::::::::::::::::::::::::::::::::::::,::,3;>>4442>-..9996X;;69y&%&XX;;>3::::::::::::::::::>>>>>>>>773>>>>>443>-.++998y96<<<<-:4444:<<<<:::>>>2222222>>><;;<,,>>>>>>>>33,<-<;;;:>>>>-;<.699o@&&&&+6.--::2::::::::::-:::::,3>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>::::::::::::::::>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>::::::::::::::::", ":::::,,,::::::::::::::::::::::::::::::::::::::::>>>>>>>>>>>>>>>>::::::::::::::::::::::::::::::::::::::::::::::::::::::::22222222::::::::::::::::::::::::2222222222222222::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::2222222222222222<<::::22::>>>>>>--;;...+99g96.-;.999&*tette$#$&&&&**&&&&e*&rr&&rw**wuuadauaae**=$OOOO@+++...<,32---::---::::::::::::::::::::::::::::::::-------------:::::::::::::::::,,:::::,,,:::::::::::::::::::::::::::::,,,<<::4442;<699e&$&&&&*****eereeuuuuttteeeeeeretutduuueeueeeeeeeeeeeaduuadddpddate&&&&&&&$&&&reeee&&&&&&$$&&$OOOO#$$$$$$$$$$$$$$$&**&&*&&$e*$$$&rer&$$$&&&&&*euuaa*8apauaskkkbVbmmmmmmmmbbbbVnJz6X>>>>>:::::::<;;;::::::::::::::::::::::::::::::::::::::::::::::::;;>24442;.X.11.X;;6yy*&to..;<:::::::::::::::::::>>>>>>>>33,>::>>442>-..++%9yy9...<<:4444:::<:::4>>2222222>>>><<<<,,>>>>>>>,,,<;;;;;;:>>>,-,76797$$$OO@@+X--:444::::::::::::::,,,>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>::::::::::::::::>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>::::::::::::::::", ":::::,,,::::::::::::::::::::::::::::::::::::::::>>>>>>>>>>>>>>>>::::::::::::::::::::::::::::::::::::::::::::::::::::::::22222222::::::::::::::::::::::::2222222222222222::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::2222222222222222<<::::::::>>>>>>22>;....+6gg7---X999ttu$&*$OO#$$***&&&&&&$$&&$=*t*=*etuuu*uut*8t&$OOOO@@9+...;,,<<<<<<<<<<<,,,,,::::::::::::::::::::::::------------::::::::::::::::::,,:::::,,,:::::::::::::::::::::::::::::,,,<<::2442:<169ye&&@@*t*&&&***eeuuttteeeeettterreer&eeeuddaauuttttetaaeudaddddue&$$$&&$$$&&$$&&rrr&$$$$$$$$$#OO#$$&$$$$$$$$$$$$$$$&&&&&&&&e&$$$&rrr&$$$&*reeeeuuuu*8uauupjbbbmVbMmmmbmmmmbVbVVIhX;>>>>:::::::::<;;::::::::::::::::::::::::::::::::::::::::::::::::;;>24442,<..X..;>;69t*&*&+.;,--,::::::::::::::::>>>>>>>>>>3,>:>,442>-.....69y9+X..<,44444:::::44>>>>>>>>>>>>>><<<,<>>>>>>,<<;...;;;-->>>>-,77761OO$$&&%+X.-:44::::::::::::::333:>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>:::::,,,::::::::>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>::::::::::::::::", ":::::,,,::::::::::::::::::::::::::::::::::::::::>>>>>>>>>>>>>>>>::::::::::::::::::::::::::::::::::::::::::::::::::::::::22222222::::::::::::::::::::::::2222222222222222::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::2222222222222222::::::::::>>>>>>22>,<<<<.177;-,3.669iaa$#$#OO#$$**e*&$$&&&$$=*eee*=***=$=$*it***&$OOOO@@&%+...;,;;;<<<<<<<<<,,,,::::::::::::::::::::::::<<<<<<<<---::::::::::::::::::::::::::,,,:::::::::::::::::::::::::::::,,,<<:::22:,<-<6999&&&ttt&&&&**eeeeeeeeeeeretter&rr&rettuppphpitteettaueeuadddde$$*$&&&&&&&$$$$&&&&$$$$$$$$##OO#$$$&$$$$$$$$$$$$$$$&&&&&&&&*&&&rr&&r&&&&*reee*eeuuet**tuajbkbbjmbsmkmbbbbnVbVnIH1,-:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::,;;>24442:<<<;;<,2;69&$$%91->3--<::::::::::::::::>>>>>>>>:333>:>3:>2>---...+699+ ...-2344::::::44>>>>>>>>>>>>>>>><<>>>>>>,<;;...X;;---:>:>-37<;;. O&er&@+.-::::::::::::::3:-:333:>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>::::::::::::::::>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>::::::::::::::::", ":::::,,,::::::::::::::::::::::::::::::::::::::::>>>>>>>>>>>>>>>>::::::::::::::::::::::::::::::::::::::::::::::::::::::::22222222::::::::::::::::::::::::2222222222222222::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::2222222222222222::::::::::>>>>>>>>>;;;;<-.-;--333<16itt#$%%%%&&$*tut*$&&&**eeuuut*&&&&#O$#*u*%%%%#OOOOO@@%96...;.......-<<<<,,>>::::::::::::::::::::::::<<<<<<<<--:::::::::::::::::::::::::::,,,:::::::::::::::::::::::::::::,,,<<<:::::,,<...<6&tyytt*&8eettettttuuutee$&eeerre$euiphccchiiiuttutudteudkdde$$&e&&$&&&&$$$$$&&$$$$&&$$$$$###$$$$$$$$$$$$$$$$$$$$$&&&&&*r&&rrer&&er&&&&*&&&*euuu*t***upkVbbVbsbksmmmbnCCCnVVIhX3-:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::,33;;>>2442--<<<,:-4>16&&&96;-23:-<::::::::::::::::>>>>>>>>>333>:>3:>>>>---,<169t&@+..->334::::::::>>>>>>>>>>>>>>>><<>>>>>>,;.16+.X<::-->>>,,77-...@&*&@ ..-:::::-::::::::3:-:33,:>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>::::::::::::::::>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>::::::::::::::::", ":::::,,,::::::::::::::::::::::::::::::::::::::::>>>>>>>>>>>>>>>>::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::2222222222222222::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::2222222222222222::::::::::<>>>>>,,,<;;;;;----:,-4-.+itu&&&&&&&$$*wuu*&&&$*tuuauut*$$$##$*$&*$OOO@OOOOOOOO%996..;........;<<<,,>>:::::::::::::::::::::::::::::::::::::::,:::::::::::::::::::::,,,:::::::::::::::::::::::::::::,,,<<<<<<::-<,<-.-<+8yyyyt&ttttteettuuuuuee&&reer&&&ipphhhhg999yyiiatudddkkkar$$&&&&&$&&*&$$$$&&&$O$$&&&$$#$$$$$$$$$$$$$$$$$$$$$$$$$$&&&&*r&&&&&rrrerr&&&&$&*euuu*$&*euuakVCbVCbbbkmmmbnCCCCCUBX.>3::::::::>>>::::::::::::::::::::::::::::::::::::::::::::::::::337;;;>244>:-----::4:<698891;544:-<::::::::::::::::>>>>>>>>>>3>:-:>>>>>>>>>><<698&$9+1;<>:5>>;<::::<<<<<<<<<<>>>>>>;:>>>>>><;.66++ >>>:>>>>>;3,-.<<+6996+X..-:::---::::::::,::::3::>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>::::::::::::::::>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>::::::::::::::::", ":::::,,,::::::::::::::::::::::::::::::::::::::::>>>>>>>>>>>>>>>>::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::2222222222222222::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::2222222222222222::::::::::<<<>>>,,<<<;<<<-;,;<,-4--.itpt%%%%&&$$ww****&&&*ttuuuqe&$O##$&e&&$OO@O@@@OOOOOO$&9966666666661;;;;>>>>::::::::::::::::<<<<<<<<<<<<<<<<::::::,,:::::::::::::::::::::,,,:::::::::::::::::::::::::::::,,,<<<<<<<<--,3,::3o+&9yyt*t8*ee*etuuutteeeerree*&&app896.;;.XX+%*tutadddkkae$$$&&$&&$&&*&&&&&&&$$O$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$#$&&&&&*&&&&&rrreeeeer&$eetut*=$rreaaasmnnVCZVVbmmmmbCCCCCUhX;-3::::::::>>>::::4:::::::::::::::::::::::::::::::::::::::::::::,33.;;>242>,<<---:444;6+%99;24444:-::::::::::::::::>>>>>>>>>>:::>>,>:::>2245:-.+&$O+666,-::><;;;:::;;;;;;;;;<<>>>>>;::>>2>><<666+@O,,>>>>,,>--;-;<;.17996..-;:::--.::::::::::::::::>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>::::::::::::::::>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>::::::::::::::::", ":::::,,,::::::::::::::::::::::::::::::::::::::::>>>>>>>>>>>>>>>>::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::2222222222222222::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::2222222222222222:::::::<<<;<<<>>;;---;;<<-,,--,;44,Xytpe%%%%&&&&u******&ett*8uuu$OO#$O$$e&&$@$#O%%%#OOO#$$%&996669999666;;;;>>>>::::::::::::::::<<<<<<<<<<<<<<<<:::::,,,:::::::::::::::::::::,,,:::::::::::::::::::::::::::::,,,<<<<<<<<,,::::::XX 9yy8ttt8ttetuuuuteeee*$$reeetey& XXX;;;.XX+*taaaaudda&rrr&&$&$&&&&**e*&&&$$$$$$##$$&&$$$&&&&&$$$$$$$&$$###$$$O$$$$$&&&&&reeereeetter&ee****eutreajssasCVnVVVVMmmmbbCCCQV=0X>4::::<::>>>>:::44::::::::::::::::::::::::::::::::::::::::::::::33.;;>222>--<<--:444-.X XX;24444:-::::::::::::::::>>>>>>>>>>::>333<--->24442-.+@$$o+96,->3>;;;;;<:;;;;;;;;;<<>>>>>:::>>2>,;166++@@,,,>>,3,7--;<,,.;;;661..;;:::-..:::::::::::::-::>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,,,:::::::::::::>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>::::::::::::::::", "::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::,,,:::::::::::::::::::::22222222222222222222222222222222,,,:::::::::::::2222222222222222::::::::222222222222222222222222222222222222222222222::::::::::::::::::::::::::::::::::::::::::::::::---::::::::,,,<;;--;;;;;;;;4:<6hiue$$$$&*tu*eeeeeeeeetuute*OOOOOO##&$####OO==%%%%%o##%%oooo#ooOOOOo@++.X-<,;;>>::::::::::>,::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::3;;1699ttt*&*tyiyyyyyyyyy9yyyyy9::::::::,:,3-:7gdauaddt&&eerr$$$$**$$ete&&&&&$%%$$$OO$&$$$$$&$$OOOOOO#$$#$#@OO@#@$$$$$&&rrreeeee*=uaapuwaaw*uaapduuasssmmbbbVZZVbbbbVbbUCPhX;:44::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::333:::::::::::::::::::::::::::::::::::::::::::::::>>>>>>>>>,>::37f6+ +X.>22:799+oo@+++..>2444:-->><<<<<<,,3344444433;...+%%OOOOO+++..;<,>>>><;;;>>>:;;;;;;;-->>2>>>>>>>>:::>>>>>::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::", "::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::,,,:::::::::::::::::::::22222222222222222222222222222222,,,:::::::::::::2222222222222222::::::::222222222222222222222222222222222222222222222::::::::::::::::::::::::::::::::::::::::::::::::---::::::::,,,<;;--;;;;;;;;4:<6gyte&$$$*uut*****eetttuuut*&#OOOOO##&$###OOO===%%==&#%%#ooooooOOOOOO@++..;;-;>>>::::::::::,,::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::>>;;16999&&8yiy8666++666yyy99+XX::::::::::,3:-7fttipppy&tt&$$$$=**&&$&****&&&&&&$$$@#$&&$$$&&$$#OOOOOO$$$%%#@@#%@@$$$$&&rreeeettuwaapjspaaaaaauuadaassjbbbbCCCZVVbsVVbUbPk0X,:44::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::333:::::::::::::::::::::::::::::::::::::::::::::::>>>>>>>>>,>:->7766+++++1-22>199+ooo+++.;>2444:-->,,<<<<<,,:44444443,;..+++@OOOOO+++..;;>>>>><;;;>>>:;;;;;;;-->>2>>>>>>>>:::>>>>>::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::", "::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::,,,:::::::::::::::::::::22222222222222222222222222222222,,,:::::::::::::2222222222222222::::::::222222222222222222222222222222222222222222222::::::::::::::::::::::::::::::::::::::::::::::::---::::::::,,,<;;--;;;;<<<<4:,6iyt&e*&&tau*****eeuuttttt*&##OOOOO#$$$##OOOO#=8uu8*%%%%@oOOOooOOOOOOo++666<.;<>::::::::::>,,:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::2,;...+9yyy9+XX..XXXX...+66....:::::::::::3:-:7iphhhhy&tt&$&&*et&$&&&&*e*&&$%%%#$$$$&&&$$&&&$$$#OOOOO@#@##@OOO@@@$$$$$$&*eeeeetaappskkkksuuppauuaaapsknnmnCbmbVVbmbVnnVV0X;-:44::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::333,::::::::::::::::::::::::::::::::::::::::::::::>>>>>>>>>,>:-:,3666++++6.>,;<666oooo++11>2444:--,,:::::::::4444422><;;.+ ooOOOOO+++..--->>>>><;;>>>:;;;;;;;-->>2>>>>>>>>:::>>>>>::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::", "::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::,,,:::::::::::::::::::::22222222222222222222222222222222,,,:::::::::::::222222222222222222222222222222222222222222222222222222222222222222222::::::::::::::::::::::::::::::::::::::::::::::::---::::::::,,,<<;;;<<<<<>>>2:16iye&te&euut&eeeeeeuuee**&$#O#OOOOO#$###OOOOO#=8uiu*#&&%oOOOOoooOOOOOO@+6996.;::::::::::::>,>::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::422>-...+696.XX.........X.;;...<:::::::::::3,:::9yy996+++9988**et&$&***e**&$$##oO#$$$&&&$&&&$$$$##OOOOOO@@@OOOOO@$$$$$$$$&&&&&etapkkkkkkkjuupjpuuaaaskbnnmbnsajbbbbkbnbTqX11-34:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::3333::::::::::::::::::::::::::::::::::::::::::::::>>>>>>>>>>>>::>,1666+++6.;;-.669@@oo++.;>2444:<<<<<,,,,2222222::;;;116++ oOOOOOO++..;--:222>>><<2>>>><;;;;;-:>>2>>>>>>>>:::>>>>>::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::", "::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::,,,::::::::::::::::::::,22222222222222222222222222222222,,,:::::::::::::222222222222222222222222222222222222222222222222222222222222222222222::::::::::::::::::::::::::::::::::::::::::::::::---::::::::,,<<<<;:>>>>>>>>2-1+yttet**uue**eeeeeeee&&&&$$####OOOO#%OOOOOOOO==**uu*$&&%#OOOO%oooOOOOOo++9961-<<:::::4::::>,>::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::444::--..XXX.<<<<<<;;<<<;;;;--;;::::::::::::,:::.11.XX...669yt***&&$&ee*&&&&$#ooOO@@$&&&$&&$#O$$##OOOOOO#%%%@@@@@$$$$$$&$$&&$$*eupkkksakskkspaapajpskbnVVmmbjskskbkbkkPlXX7;-3-:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::3333::::::::::::::::::::::::::::::::::::::::::::::>>>>>>>>:>>>>>>,1666+++661....69@@o@++..;>444:<<<<<,,2244:::::<<..;66++o ooOo@@O...;;;>22222>>>>2>>>>><<<;:-:>>2>>>>>>>>:::>>>>>::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::", "::::::::::::::::::::::::,,,,,,,,::::::::::::::::::::::::::::::::::::::::,,,::::::::::::::::::,,,22222222222222222222222222222222,,,:::::,,,,,,,,222222222222222222222222222222222222222222222222222222222222222222222::::::::::::::::::::::::::::::::::::::::::::::::---::::::::;<<<>>>>>>>>>>>>,;.X8*tt*&*ut**ueeee*&$$$$$$$#$$##OOOOOOOOO#O###=*uuaue&&&$#OOOO%#@o#OOOOO@+++++-<<<::::44:::>,>::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::44444,--<<<----->>>>>>>>:--:,333::::::::,:::::::;;1,;;<<61X+iit&&*&$&e*$&&*&&%ooOOOOO$&&$&$$OO#$##OOOOOOO@#@@OOO@@$$$$&&&&&&$&&ewajkbkusjkkspaassjsjkbbbVbmjsssssbkkbBlXX;;-33-3::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::3333::::::::::::::::::::::::::::::::::::::::::::::>>>>>>>>>>>>>,,,;11+++++96+..X.6@@@@%++.;>24:::<<<<::4444::--;..X.+++++o ooo@%+o...;;>2222222>>>222>>>>,<::::>>>>>>>>>>>:::>>>>>::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::", "::::::::::::::::::::::::,,,,,,,,::::::::::::::::::::::::::::::::::::::::,,,::::::::::::::::::,3322222222222222222222222222222222,,,:::::,,,,,,,,222222222222222222222222222222222222222222222222222222222222222222222::::::::::::::::::::::::::::::::::::::::::::::::---::::::::;;<<>>>>>>>>>>>>;..+t*ee&*tt*&*eee*&$###$$$$##$$#OOOOOOOOO#####%#*appu*$&&$$OOOO@ooo##OOO@@@++++.--<::::44:::>,;::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::44444,:---,3::33>>2222>>332>>::-::::::::::::::::;>>>:>:-71X+yit&******&&&*&&&#ooOOOOO$&&$$$$OOO$@@@OOOOOOOOOOOOOOO@$$&&*e*&&&&&**upjVVsskbksssspjjsjkjsjbmsawwaskbkjxlXX<,--3>->::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::3333,:::::::::::::::::::::::::::::::::::::::::::::>>>>>>>>>>>>>>>>;;..X+++996++X.6&%%%%++.;:>4:::<<<<:24444>>;;...+++++o ooo o+%+ .--;>>2224222>>>22>>>>>>>::::>>>>>>>>>>>:::>>>>>::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::,::::::,::::::::::::::::", "::::::::::::::::::::::::,,,,,,,,::::::::::::::::::::::::::::::::::::::::,,,:::::::::::::::::,,3322222222222222222222222222222222,,,:::::,,,,,,,,222222222222222222222222222222222222222222222222222222222222222222222::::::::::::::::::::::::::::::::::::::::::::::::---::::::::;;<>>>>>>>>>>>>222222>::>>>222:::::::::,3:::::32>5:233;;X+9t*&t&*tt&&e&&&$#oooOOOOO#&&$$$$$OOO@@@OOOOOOOOOoOOOOO@@$&&et*&&&&&&uaapCUbssbbkjspajjjmmsssksaaspdsbkjBhX;,-3:4:-7-::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::3333,:::::::::::::::::::::::::::::::::::::::::::::>>>>>>>>,>:::>>:,,;..+%99&99+XX6t*%%@+XX;;>::::<--<:::2223,11..++++@o OOO +%+ --;<>>>422222>>>>>>>>>>>>::::>>>>>>>>>>>:::>>>>>::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::,::::::,::::::::::::::::", ":::::::::::::::::::::::::::::::::::::::::::::::::::::::::::,,333::::::::::::::::::::::::::::::::222222222222222222222:::22222222:::::::::::::,,,222222222222222222222222222222222222222222222222222222222222222222222::::::::::::::::::::::::::::::::::::::::::::::::---::::::::;<<>>>>2:::7-,--699y*&tett*&###$$&&$#O#$$@O@%%@Oooo##ooOoo%%%%%%$*e**tut$$&$OOOOoooo#OOOOOO#O#&86X.6<<-:::::::,,::::::::,,,:::::::::::::,,,,,,,,::::::::::::::::,,,:::::::::::::::::::::::::::::,,,,,,,,::::::::::::::::::::::::>>>>>>>>:>>>>,33,:::::::::::::::>555222:-.X+&8t***&&****&$#$#ooo#####$$$$#OO#$$&$$#@OOOOOOOOOOO@OOO@@O#&t*&&&**&*uasVPbsqkVbspsjmkjmmsssjdadddpjskzi+X-3:444:>;;:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::,3,::::::::::::::::::::::::::::::::::::::::::::::>>>>>>>>>>>>>>>>,31;..++%@@+++++ %*&oo+6;,3::-<,---:33223,;.66++oooOOOO OOoo++++;--->222::>>2>>>,:--:>,>:>,,,,,,:>>>>>>:>>>>>>>>::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::", ":::::::::::::::::::::::::::::::::::::::::::::::::::::::::::,,,333,::::::::::::::::::::::::::::::222222222222222222222:::22222222:::::::::::::,,,222222222222222222222222222222222222222222222222222222222222222222222::::::::::::::::::::::::::::::::::::::::::::::::---::::::::<<>>>>227,-,X;.;9y8tt*tett88&&$$$&&$OO#$#OOO#%%@%#oooooooo#####%#$&$$*e*$$$#OOOO%@@@oOOO#####o%*h96.X<,-::::::::::::::::,,,:::::::::::::,,,,,,,,::::::::::::::::,,::::::::::::::::::::::::::::::,,,,,,,,::::::::::::<<<<<:::::::<<<<<<<<;;<,,,,,,:::::::::::::::>>>>222:,;.+&8*&t*******$#OOOoooOOOOO@##OOOO#$$$%%#@OOOOOOOoOO oO OOO$**********uuakVkjsbnkssjbmkjsssssdddaauapkj8 X;:-4444:>;;:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::,3,::::::::::::::::::::::::::::::::::::::::::::::>>>>>>>>>>>>>>>>:,,<;66+&&%%&999 @&*&+..<>:::<<---::,,<;...+++@OOOOOOOOOOOoo+++,;--:>>>:>>>>><;<<<;---::>,,,,<;:>>>>>>:>>>>>>>>::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::", "::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::,,,333,:::::::::::::::::::::::::::::2222222222222222222222::22222222:::::::::::::,,,222222222222222222222222222222222222222222222222222222222222222222222::::::::::::::::::::::::::::::::::::::::::::::::---::::::::<<>>>222>>-1.<<6iy&*e*t**888*&$$$$$$OO@%@OOO@%%%%%ooooo#####oo#%O$$##$&$$$$#OOO#&&%@oOOO####OO#&yyhyX.,:::::::::::::::::,,,:::::::::::::,,,,,,,,::::::::::::::::,:::::::::::::::::::::::::::::::,,,,,,,,::::::::<<<<<<<<<<::::::;;;;;;;;;;;<<<,,,:::::::::::::::>;>>222:<..+&*&$&&&&&***$#OOooooOOOOOOOOOOOO#$$$##@OOOOOOOOooo oOO O@&&O$&&***eteeuaskjkbbbkbbnbmmsssddadauuuuu8%XX.<::4444:>>;:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::,3,::::::::::::::::::::::::::::::::::::::::::::::>>>>>>>>>>>>>>>>-----<.X+OOO@%%6o OO%&%9.<<:::<-::---<<11..+++@oooOOOOOOOOOoo+++,,<;<><;,,,,,<<;-<,<;--;;,,,,,;->>>>>>>>>>>>>>>>:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::,,:::::::::::::::::::", ":::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::,,,33::::::::::::::::::::::::::::::22222222222222222222222222222222:::::::::::::,,,222222222222222222222222222222222222222222222222222222222222222222222::::::::::::::::::::::::::::::::::::::::::::::::---::::::::>>>>>22>-,,<.X.9y*%*te**&***&$#O#$$$#@@#@OOO@%%%%%oooo##%%%#o@%%O$$#O#######OOo#&&%@oooO#####o#%#*kc6X.;-:::::::::::::::,,,:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::<<<<<<<<<<,,,,,,<<<<<<<<;<<<<,,,,:::::::::::::::;;>>222:<..+&**&&&&&&*&&*$OOooo@ooooOOOOOOO#$$$$@@OOOOOOOOOooo oOOOOO&%OO#$&&&&*t&euwassjjjbnVVbbbbkssaudauuii8+XXX1<-:34444:>>>:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::,3,::::::::::::::::::::::::::::::::::::::::::::::>>>>>>>>>>>>>>>>---::,;XXo@&&&%%%@OOOO&y61<:::<-2::--<666+++%@oOooOOOOOOOOOO@+++73,;;<<,<<<<<;;;.<,,<-;,;<,11<;.>>>>>>>>>>>>>>>>:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::33:::::::::::::::::::", "::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::,,::::::::::::::::::::::::::::::::22222222222222222222222222222222:::::::::::::,,,222222222222222222222222222222222222222222222222222222222222222222222::::::::::::::::::::::::::::::::::::::::::::::::---::::::::>>>>222>,,.X..+98&8uut&&88**&$##O#$&$#@OOOoo@@@o%ooooooo@@@oooo#O##OOOOOOO##oooo%%@@Ooooooo####%##pj8+X;;:::::::::::::::,,,:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::;;>>>>>>>>>>>>>>,,,,,,,,,,,,,,,,,:::::::::::::::;;>>>:::,;698*&&*****&&$&$OOooo%oooooOOOOO##$$$#@@OOO@@@OO oooooOOOO#&%O$&&&$$$&e$&e**aaasskbnnnnbmkjsduau8ui9+X1..;,-:2444::::>:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::,3,::::::::::::::::::::::::::::::::::::::::::::::>>>>>>>>>>>>>>>><,,3773..+%&*&&%%%%&&&&966,::<<-44:--166+@@@@oO ooooOOO@OOO@@%@@77,--<,6<<<<<;..;161<-;<;<,11<..>>>>>>>>>>>>>>>>:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::33:::::::::::::::::::", "::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::-:::::::::::::::::::::::::::::::2222222222222222::22222222222222:::::::::::::,,,22222222::::::::22222222222222222222222222222222222222222222222222222::::::::::::::::::::::::::::::::::::::::::::::::---::::::::>>>>222>3<..gy99**uaue$#8*&&%###O@$&$#OOOOoooooOooooooooooooooooOOOOOOOOOoo#@oooOOOOOoooo ###%&==pkp9X;;>:44:::::::::::,,,:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::>>>>>>>22>>>>,,,,,,,,,,,,,,33333,:::::::::::::::;;>>:44:,<699&$##%&***&$#OOOooo%ooooooO#OO##$$##@@@@@@%%oO oo OOO@%&%%&&&&**et&&&=*uaajkkkbVCVbkjjkjpuuui91.;7;->2>>2222>:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::,3,::::::::::::::::::::::::::::::::::::::::::::::>>>>>>>>>>>>>>>>-<:4377,X OOO#%&&@O#*t9+66,::-<<44:<..+&OOOOOOOo ooo@@OO@&&&@@71<-;<16666666666661;---;<<<1<..>>>>>>>>>>>>>>>>:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::,,:::::::::::::::::::", "::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::2222222222222222:::2222222222222:::::::::::::,,,22222222::::::::22222222222222222222222222222222222222222222222222222::::::::::::::::::::::::::::::::::::::::::::::::---::::::::>>>2222>--;6chy9**ue**O#%%%%#OOOOOO@@@OOOOOOOOOOoooooooo ooooooOOOOOOOOOoooooooOOOOOoooo o#%=*=wdjji.1;>2444::::::::::,,,:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::22222222222222222222222233333333,:::::::::::::::;,,24444:-199%OOOO&*ee&&#OOoooo+ooooooOOOOO####O@@@@@%%%@o o O@%%&&#$$&****re&&**uaskksskbVnbkjjkjpuiy91;52-:333>>2>>>>:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::,3,::::::::::::::::::::::::::::::::::::::::::::::>>>>>>>>>>>>>>>>.-:4443,1+oO##&&*&OO$t8++1,,:-<<444<..+@OO#$###o o+ooo@O@@&*&@ ,<;;<1116666666661<;;---;;<<1<..>>>,,>>>>>>>>>>>::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::", "::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::33::::::::::::::::::::::::::::::2222222222222222:::2222222222222:::::::::::::,,,22222222::::::::22222222222222222222222222222222222222222222222222222::::::::::::::::::::::::::::::::::::::::::::::::---::::::::>>>222>>,<.Xy9&&t*u=$*###%%%%OOOOOOOOOOOOOO Oooo oooo oooooooOOOOOOOOoOooooooOOOOOoooo o#%=*=wwwjh6.;>24444:::::::::,,,:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::22222222222222222222222222222222,:::::::::::::::;,3344442-699&$$&*tttt&$#OO#%oooooooooOOOOOOOOOO@@@@#%%%@oooo O@&&%#&&&&&&#O @e*$***uapawqskkbbkjssauui9.X;32344::225>>>>:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::,3,::::::::::::::::::::::::::::::::::::::::::::::>>>>>>>>>>>>>>>><<:4444>;+@O#OO#%&%OO**+X.<,,-<<444-.XO@#$$$##oo+++++ooOO@&*8&O ..-<11<..............<<<;;<<<...>>>,,>>>>>>>>>>>::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::", "::::::::::::::::>>>>>>>>>>>>>>>>:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::<<--<,6<->>>>>>>>>>>>>,,,<,,224223X.9it*&tu8$#&&O######OOOOOOOOO OOOOOOOO+++o oooOOOOOO@oOOOoooOOOOOOOOOOOOOO@@OOOOO@#%&&$&*ut*+ XX.;;;;<<<<<,,:,2::3,::>>22224444444:::::::::::::::::::::::::::::::::::>>>>>>>>--:::>>>>>>>>>>>>>>>>>>>22222222222222222222222233333333>>>>>>>>>>>>>>>>:::::::<..+&&er#&*8&&**=%#oO##OOo@@oooooooo#####ooooo%%%oooooo +@O#e**t96<::4O@&&%&t*u==uapknbmjddue*h9,>3>;;::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::>>>>>>>>>>>>>>>>:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::>>2>,,.X.++@O%##O@&&6<773::::444:;166o@#$$$$#OOOOOOOO&&++99+X44;...,233;.X..;>>:::---<<,,,,;--;,,;...XXX.<;:4>22,;;;;;;<<,244..;;;:>>2222>>>>444>>-----;,>>::>>>22222222>>><<::::::::::::::::::::::::::::::::::::::::::::::::>>>>>>>>,,,>>>>>", "::::::::::::::::>>>>>>>>>>>>>>>>:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::<<-<<777,,,,,,,,,>>>>>,,,<,,22422,;69yt&$ut*##$$########OOOOOOOOOOOOOOOOOoooo oooOOOOOOOoOOOOOOOOOOOOOOOOOOOOOOOOOO#%%&&#OO&*8&+%+++1;..<---<--:2222,,::>>>222444444::::::::::::::::::::::::::::::::::::>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>22222222222222222222222233333333>>>>>>>>>>>>>>>>>::::::<169&&*=#o&*****=8=%###OO@@@oooooooo#####oooooo@%oooooo +%O&t***+X<,44 @*&&&*t==*uapskbksdaue*96-:3>;;::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::>>>>>>>>>>>>>>>>::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::;::>>2>>,;..++@O%$#O@&&667733,,:444:;16++@@OO$$$OOOOOOOO@%%%99+.44;.+1<>2>;...;;,,,,>,<<;<,,,<;-<<,,<;..+XX.1<24>2>>;;;;.-;-::::;;;;;>::2222>>>;4322>:----;,>>::>>>>2222222>>><<::::::::::::::::::::::::::::::::::::::::::::::::>>>>>>>>,,,>>>>>", "::::::::::::::::>>>>>>>>>>>>>>>>:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::<<<<<777,,,,,,,,,>>>>>,,,,,,22222;19yy*&*u8&#O#######$$#OOOOOOOOOOOOOOOOO ooOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO@###OOO#&*&%&996661.1..<<-->>22>::>2>>>>>22224:::<<<::::::::::::::::,,,,,,,,::::::::>>>>>>>>,,,,,>>>>>>>>>>>>>>>>>>>22222222222222222222222233333333>>>>>>>>>>>>>>>>>::::::<169*$$$#OO%%%&=%iu*$#OOO@@@ooooooooo####oooooooooooooo +&&*e*tt+X<,:2 &**t8*u=waaaasjbksawe*&..-:2>;;::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::>>>>>>>>>>>>>>>>::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::;:>>>>>>,,<..+++#$$$$$@+667777,-442>;;6++@OOOO$$$#OO#OOOO@+9996.421+++1>>,16+61,>>;;;---;<,,,<;-,<<,16+.+ X.1<,3>2>>;;;;.-;--:::,,>>>>::22,,,<<;4222>><;;;;>>>>>>>>>2222222>>><<::::::::::::::::::::::::::::::::::::::::::::::::,,,>>>>>>>>>>>>>", "::::::::::::::::>>>>>>>>>>>>>>>>:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::<<<<<,<<-;;;;;;;;>>>>>,,,:::22222-69y8**eu*###OO#OO##$#OOo@@OOooOoooOOOOO ooOOOOOOOOOoOO OOOOOOOOOOOOOOO@@OOO@@@OOOOO#$&&&&&&&&%667;.<,;:3>222::23;;;>>>>>>:::<<<<::::::::::::::::,,,,,,,,::::::::>>>>>>>>333,,>>>>>>>>>>>>>>>>>>>22222222222222222222222222222222>>>>>>>>>>>>>>>>>>:::::<;699##$$OOOOO#==aut*$###@@ooo#oooooooooooooooooooo o%&&****8+XX;--%t**aatauapauaskkjpue*%+.-:33>-;::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::>>>>>>>>>>>>>>>>::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::<<>>>>>>,11.X+++#$&&$$%%+66677,-333,<166++@OOO#$&$#OOOOOOO+6661.421+++1116666613<<;;----;<<<<<;;;;<,666++ X.;<,>2>>;;;11<<<;:::>>22222223,<<<;;:::>>,,<<;;:>>22>>>>>222222>>><<::::::::::::::::::::::::::::::::::::::::::::::::,,,,>>>>>>>>>>>>", "::::::::::::::::>>>>>>>>>>>>>>>>::::::::,:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::<<-<<<-->>>>>>>>>>>>>,,,::>2222>-1988*&*t&###OO#OOO#@OOO@@@OOooO@ooOOOOO ooo OOOOOOOOOoOO OOOOOOOOOO##OO#%%##%%%#OOOOOO#$$$$$&&&&&&96..;--,33332233;;;>>>>>>>,<<<<<::::::::::::::::::::::::::::::::>>>>>>>>,,>>>>>>>>>>>>>>>>>>>>>>22222222222222222222222222222222>>>>>>>>>>>>>>>>>>::::::..69oO$#$#####=*uut*&&$#@@oOo#oooooooooooooooooooOO O o%%&****8% X117*ut*aauppaaauuskksaw*%+.<,432-;<::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::>>>>>>>>>>>>>>>>::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::<<>>>>>>,71.X.+6##$&&$&&@++6676<33,<;<16+++OOO$$*&#OOOOOOO++..<.42. OO+6666++113,,,,,,,,;;<<<<;;.;,,<166++ +..;<>>>;;;11611;;;--:542223233,<<<;;2>>>,,;;<,>:>>22>>>>>222222>>>><::::::::::::::::::::::::::::::::::::::::::::::::,,,>>>>>>>>>>>>>", "::::::::::::::::>>>>>>>>>>>>>>>>::::::::,,,:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::---<<<<<>>>>>>>>>>>>>,,,<>>>22>>1698t*&*t&o##oOO#OOOOOOO@@@OOooO@@OOOOOO ooooo OOOOOOOOOOOOOOOOOOoooo@##@%&&#%%%##OOOOOOOOO$$$$$$$$$#96+..;;.;;->,,>-;;;;<<>>>>>;;;;;::::::::::::::::::::::::::::::::>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>22222222222222222222222222222222>>>>>>>>>>>>>>>>>>>:::::-.66oo#O###$$##$ut***&&$O#ooooooooooooo ooooooooooOOOO o##****e8% X169*uuuuuupauuauupkkpu*&+.;:444:-<<::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::>>>>>>>>>>>>>>>>::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::<,<>>>>>,,,<..16OO#&&$&&@@++6661,,<;-;<1669%@$$$9&@OOOOO$O+6..,-42. O++66+.X.>2,,,<<<<<;;;;;;;;-<1,;..+++@+++.;;;;;1166661.....>>>222332,,<;;;;333,,<--<,>>2222<<>>>>22222>>>><::::::::::::::::::::::::::::::::::::::::::::::::>>>>>>>>>>>>>>>>", "::::::::::::::::>>>>>>>>>>>>>>>>::::::::33,:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::--:<<<<,,,,,,,,,>>>>>,,,>>>>>>>>119yy**e8&OOo#oO#OOOOOOO@@oOOooO@ooOOOOOooooo@oooooOOOOOOOOOOOOOOOOoo@@@@@@@&&%O@OOOOOOO@O@O#$$$&$OO$$$#996+69611;;<11<.;;;;<>>>>>>>;;;;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>22222222222222222222222222222222>>>>>>>>>>>>>>>>>>>::::<<.16++%o#O#$$##$ut****&##%%#ooooooooooo OOOOOOOOOOOOOO ###**=***# +69auuuauaauaaauusjja8&+1;::444:<<<::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::>>>>>>>>>>>>>>>>::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::<,,>>>>>2:>,,-;6OOO#&$$&$$@@+666<<<<<<;<1699%$$$9+oOOO$$&O+6.;7>4>1OOOO+66+ X.>4;;------;;;;;;;;;;<<-...++@+++..;;;..++6++++..+1;;>>>>>>,>>>;;;;,,,,;;--;>,,,2>>;;<>>>22222>>>>>::::::::::::::::::::::::::::::::::::::::::::::::>>>>:::::::>>>>>", "::::::::::::::::>>>>>>>>>>>>>>>>::::::::33,,:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::,:-----,,,,,,,,>>>>>,,,>>>>>>>;;X68t&&e8&OOO##O#OOOOO@@@@oooooooooooooooooo@@ooooo OOOOOoOOOOOo@@@%@OOO&&%O@OOOOO@@ooO@###O$OOO$$$$&8899yy966669961;;;<>>>>22>>>>>;>>>>>>>>>>>>>>>>,,,,,,,,>>>>>>>>>>>>>>>>:>>>>>>>>>>>>>>>>>>>>>>>22222222222222222222222222222222>>>>>>>>>>>>>>>>>>>:::::,..66%&+&$$&&$=euu****&#$&&%ooOoooooooooOOOOOOOOOOOOOO %%%**=**t*8iiihsuwasssuassawasjpu&+..-44444:<<.::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::>>>>>>>>>>>>>>>>::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::<,,>>>>>2-:33--7OOO#%%#$&&&%%996.167,,>-;699%%$$6++oO@$&& +9;<744,+OOOO+6++ X.>4;;;;;----;;;;;;;...--;..+ @+++......+++%%@++++++11;;;;;;;>>>>>>>------;;;>,33,>>;;;<>>>222>>>>>>::::::::::::::::::::::::::::::::::::::::::::::::>>:::::::::>>>>>", "::::::::::::::::>>>>>>>>>>>>>>>>::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::>>>>>>>>>>>>>>>>>,>>>>>;11X %tOu&%oooooo@@OOOOOO@ooooooooooo@@@oooooooooooo OOOOOo@oOo@@ooooOOOOOOOOO@&&&#OOoo@%%@OO$$$O#$$$&$$#&&99999999yy71<<>>23>22222>>>>>>>>>>>>>>>>>>,,,,,,,,,,,>>>>>>>>>>>>>,,,,,,,,222>>>>>>>>>>>>>22222222333333332222222222222222>>>>>>>>>>>>>>>>>>>:::::--<.++69&***$$=***ee**&&&&&&#oOOooooo ooOOOooOo@o@oO O #*8**e***uiihhhsauspussswwupaski8+X.-234444:<<-::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::>>>>>>>>>>>>>>::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::;<<>>>>>>>>>>>>4;;---<,,,<-;<61<666,<-..X++++X..XX.X o@%&&&@O@%&+++++...;;>>2244;;;;;;;;::-:>>,,;;--:>2322>>>>>>::::::::::::::::::::::::::::::::::::::::::::::::>>>>>>>>>>>>>>>>", "::::::::::::::::>>>>>>>>>>>>>>>>::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::>>>>>>>>>>>>>>>>>>>>>>;;;X+%**&*%#ooOOoOOOOOOOOOooooooooooooooooOOOOOooooooo oooOOOOoooOo@ooOOoOOOOOOOOO@%&%@@#+++%%@OO$$OO$&&$$$#O$$&&&&&&*888f7<;,,>>>2222>22>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,,,,,,,,,,,222>>>>>>>>>>>>>22222222333333332222222222222222>>>>>>>>>>>>>>>>>>>::::::<-..699*&&**$$$=*ee*&&&****&#OOOoooooooOOO@%@@@%@O #=*****=*8uiphjjsusawaaawwuaasky9+.;>44444::<<<::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::>>>>>>>>>>>>>>>>::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::<<<>>>>>>>>>>>>>oo++%&&$$$$$&9971677,::>>,76+++@66.+++&9+666;-:44,+O#$O +++++.>4<;---;,,77,,17<<<111,;;..++++....X+ oOOO$$$$OO@$@@@++++611;>>224;;;;;;:::::;;<<<<<;;;>>2>>>>>>>>::::::::::::::::::::::::::::::::::::::::::::::::>>>>>>>>>>>>>>>>", "::::::::::::::::>>>>>>>>>>>>>>>>::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::>>>>>>>>>>>>>>>>>>>>>>;;1.988$u$o##oOOOOOOOO OOOooooooooooooooooOOOOOOooooooooooOOOOOoooOoooOOOOOOOOOOOOOO@@OO#%%++%%@@O$OOO$&&$$$OOO$$$&&&&&***g97611>>22225522>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,,,333,,,,,,,,222>>>>>>>>>>>>>22222222333333332222222222222222>>>>>>>>>>>>>>>>>>>>::::::<..;69y8&*e*===*ee*&$%&****&#OOoooooooOO@%&&&&&#O OO %%#8t**==*uapjkbksjsasaaaaaaappy+X.,34444:::<::::::::::::::::::::::::::,::::::,::::::::::::::::::::::::::::::::>>>>>>>>>>>>>>>>::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::<<>>>>>>>>>>>>>>XX+699%#$$$&&99767,,,:::>,,<....;..X.+69+661<-:44,.O@&@X+++++.;2<;--;<<,71<<<<;-.;<,,,-...+++..6.XX OOOOOOOOOOO&&&&&&99661,>222;;;;::::>:;-;;;<1<<;;:>2>>>>>>>>::::::::::::::::::::::::::::::::::::::::::::::::>>>>>>>>>>>>>>>>", "::::::::::::::::>>>>>>>>>>>>>>>>::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::2222222222222222>>>>,>;;19988#e##%%#oOOoOOO OOo ooooooooooOOOOOOOoooooooooOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO@%&++@%%@O$$OO$&&&$$OOO#$$&&&&*rr*99996.;,>,22>:>2>>>>>>>>>>>>>>>>2222222222222>>>>>>>,,33,,,,,,,,222>>>>>>>>>>>>>22222222222222222222222222222222>>>>>>>>>>>>>>>>>>>>::::::,<-.<6y88&******eee*&&$$&***&#oooo@@@oOoo#%&*&%%ooo##o%*#o8t&&&**uapjkjjssaaauappaaaau9+.-22442>:<::::::::::::::::::::::::::::,,::::,,::::::::::::::::::::::::::::::::>>>>>>>>::>>>>>>::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::>>>>>>>>>>>>>>>>..1666%%$$rr&9777,,::::::>--;;..;.....66.<<<<-::4,. @&+X.66++.;>>>:::>,,;-------..<<,>:;;16+..161.X ooOOOOOO O#$$$$$&&&966611,>2<<>>>>>>><;;;;;;1<<<;;:>>>>>>>>>::::::::::::::::::::::::::::::::::::::::::::::::>>>>>>>>>>>>>>>>", "::::::::::::::::>>>>>>>>>>>>>>>>:::::::,::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::,::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::,::::::::::::::::::::::::::::::::::::::::<:::::::::::::::2222222222222222>>>>>>;.9cy8*&###%%#OOOoOOOOOOOO ooOOOOOOOo ooOOOOOOO OOOOOOoOOOOOOOOOOOOOOOO@@O@$$$$&*&$$&**$$$###$&&&&&*rr*%*t8961..;,,>->,>>>>>>>>>>>>>>>>2222222222222>>>>>>>>>>>,,,,,,,,222>>>>>>>>>>>>>22222222222222222222222222222222>>>>>>>>>>>>>>>>;>>>:::::::::;--+98&%*****eee***$$=****&#OoO@@@oOooo#&**o%&&%%%%=8# 8t&&&**8uapsapjawuuuwaauuuu*6.;>2442>;;;;>24::::::::::::::::::::::::,::::::,::::::::::::::::::::::::::::::::>>>>>>>>::>>>>>>::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::>>>>>>>>>>>>>>>>.-<,166%$$ree97733:::,:-3:--;,<;;;;;;;<,--<<----4>. @96..166++;;>>>>>>>>----;<<<..--:22,<<1...;<611+6&&&&$$OOO#&OO$$$@@@+++6611;>>>>>>>>><;;;...11<<;;:>>>>>>>>>::::::::::::::::::::::::::::::::::::::::::::::::>>>>>>>>>>>>>>>>", "::::::::::::::::>>>>>>>>>>>>>>>>:::::,,,::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::,,,::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::,,,::::::::::::::::::::::::::::::::::::::::<<::::::::::::::2222222222222222>>>>>;;.9xhi8*O=#%@oO OOOOOOOOOO ooOOOOOOOo OOOOOO OOOOOOoOOOOOOOOOOOOOOOO@OO#$$$$&*&$##&&$$$$#$&&&&&&*r*****tiy9+1661<-<,>>>>>>>>222222222222222222222>>>>>>>>>>>,,,,,,,,222>>>>>>>>>>>>>2222222222222222>>>>>>>>22222222>>>>>>>>>>>>>>>>;>>>::::3:::,,,;X%y88**=********====&&**%#ooo@@@ooo #&**#&**&%%%%8# &888**8tuuapppjpuaaa8uiut8*#1;<24443;;.;;>44::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::>>>>>>>>>>>>>>>>::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::>>>>>><<<<<>>>>>-<:2>16+$$ree97734::2,:-3::>2222-;;>,>2>2::::---4>.+%96--1666+1;222>>>>:>>>::;<<<.--:422:;;...-<<11669988t88&#ooOO@@OOOO oo++++.>>22222>><;;;...1<;;;;>>>>>>>>>>::::::::::::::::::::::::::::::::::::::::::::::::>>>>>>>>>>>>>>>>", "::::::::::::::::>>>>>>>>>>>>>>>>:::::,33::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::33,::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::,33::::::::::::::::::::::::::::::::::::::::<<:::::::::::::42222222222222222>>>>>;;.1czh8*#=%%oOOOOOOOOOOOOO oooOOOOOOOo OOOOOO OOOOOOOOOOOOOOOOOOOOOOOOOOO$$$$$$&$#O##$$$$$$&&*&&&*eerreetuiiiy9997<.-<>>>>>>>>222222222222222222222>>>>>>>>>,,,,,,,,,,222>>>>>>>>>>>>>2222222222222222>>>>>>>>22222222>>>>>>>>>>>>>>>>;>>>::::4::::333X+9yu8********&$$=**&&*8&&%@@o@@o#o #**==*8*=%%#%&% o*88888tuuuauuau*uuuuuu88*% 6<:2442>;...;>44::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::>>>>>>>>>>>>>>>>::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::>>>>><<<<<<<<>>>::442>1o##$rt9774444:::::::24444;->>2244344::<--4-.+996;>,1+++1;22222>::>>>:----<.-:44422<---;,,>;;;16699888&%%%%%%@OOOOOOOooooo22222222>;<;<.++;;;;;;>,>>>>>>>>::::::::::::::::::::::::::::::::::::::::::::::::>>>>>>>>>>>>>>>>", "::::::::::::::::>>>>>>>>>>>>>>>>::::,,33::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::33,,::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::,,33::::::::::::::::::::::::::::::::::::::::<<::::::::::::4422222222222222222>>>>;;.XvJc8==$&%oOOOOOOOOOOOOOooo oooOOOOOOOoooooooo oOOOOOO OooOOOOOOOOOOOOOOOOOOO@#OO$&&$$$r&$##&&&#$%%%&*8***eeeee=eauttihchg91..<>>>>>>>>222222222222222222222>>>>>>,,333,,,,,,,,222>>>>>>>>>>>>>2222222222222222>>>>>>>>22222222>>>>>>>>>>>>>>>>;>>>::::-:432:::XX+8i8=*e*****$##=**&&*t&&&%@o@@o##o%**=*8**==&%&&% &8*&*****wwu=u**auu******% 7,:2322>;...;>44::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::>>>>>>>>>>>>>>::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::>>>>><<;;;;<<<<>:4444>. OO$&t9773444:::,-::24444,>>>>44444::<<<<4-.6961>3>..++1;22222>::2,>>>:>>..->44443,<<<,772>;-XX.+999&%9989&&%@OOOOOOOOOOO22222222>;<;.+++...-;;,3>>>>>>>>::::::::::::::::::::::::::::::::::::::::::::::::>>>>>>>>>>>>>>>>", "::::::::::::::::>>>,3333>>>>>>>>33333333>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::222222222222222222222>>;XhKHi*t=i8%%+oO@OOOOOOOOoo oooo ooooooooooooooooOOOOOOOOOOOooooOOOOOOOOO$#OOO&*&&&&***=====$$$$&&==*=**ww*=*wuiihjparet+.24>>>22222222222222222222222222222>>>>>>>>>>>>>222>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>::::::::::::::::::::::::::::::::4-69&*e*=*888***=***8utt***%##%=**==%%*8********&8& %8&88*8t888uwwuaauuu*##$&#o<--,32::<<<<:444::::::::::::::::::::::::::::::::>>>>>>>>>>>>>>>>::::::::::::::::>>>>>>>>>>>>,>>-::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::>>>>>>>>,166++OO61;;522444444222,>:->,>-:;;;;;;;:423332>>><;;;<<<<;..;..---:>24432::234:37,..66632523>-;766+@&ee*&&&&OO ooooo###OOo+1-,766996+..222>>:;;71-.....>222::>222222222>>>>>>>>>>>>>>>>::::::::::::::::::::::::::::::::", "::::::::::::::::>>>>,333>>>>>>>>33333333>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>::::::::::::::::::::::::3,,:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::2222222222222222222222>;7hzHxt#=8&%%@oOOOOOOOOOO oooo ooooo ooooooooOOOOOOOOOOOooooOOOOO@OO#$OOOO&&&&&*&&======$$$$$&==*==*wuw**wuiihjpaeet%.24>>>22222222222222222222222222222>>>>>>>>>>>>>222>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>::::::::::::::::::::::::::::::::4:69&**=$=88=%%%=***8ut8***%##%=**8****888******&8&o %88888tt88uwwwasspaw*=$&&%o<--,3:::<<<<:444::::::::::::::::::::::::::::::::>>>>>>>>>>>>>>>>::::::::::::::::>>>>>>>>>>>>,>>-::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::>>>>22>>,;..++9t99611;;5332>>;;1-;<<,,,>---;;;;;>>2>22>,,,,<;;<<<;--;;;<;;;>>2243:::232:-<-..666::::>>;.166%&*tet8**&#Oo+%%%##$$OO+61;;,1666+...222>>:;;11,<;...>222>:>222222222>>>>>>>>>>>>>>>>::::::::::::::::::::::::::::::::", "::::::::::::::::>>>>,333>>>>>>>>33333333>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>::::::::::::::::::::::::333,::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::2222222222222222222222>;;;6ici%u8*%oo@@OOOOOOOOO ooo oooooooo ooooo oooooooO OOOOOOOOooooOOOOOOO@&&&#$$&*&&&*********&&&$&&******uuuwwuuiihjpueet&124>>>22222222222222222222222222222>>>>>>>>>>>>>222>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>::::::::::::::::::::::::::::::::42<+&*$=$=**=%##%=***8t8***=%%&=*8tt8***t8**==**&&%# %888888*8uwwwuappa****&&&&<<-:2:::<--<::44::::::::::::::::::::::::::::::::>>>>>>>>>>>>>>>>::::::::::::::::>>>>>>>>>>>>>>>:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::>>>2222>--;666998*&96+..X.166+XXX.;<----<>><;;;;2>>:>>,,,,,,;;;;2>>::;;<;;<>>222::::233:-:<.<699>>>>;;;.X.+&&&&&8***&$Oo+%%%oO#$&%+61,>-......--22>>>>;;;177<.;<>222>:>2>>>>>>>>>>>>>>>>>>>>>>>>::::::::::::::::::::::::::::::::", "::::::::::::::::>>>>>,,3>>>>>>>>,,,,,,,,>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>:::::::,::::::::::::::::3,,:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::2222222222222222222222>>11XX8ht*88=o @%@OOOOOOOOo ooo oooooo oooo ooooooooOO OOOOOOOOooOOOOOOOOOO$&&&&&**&&&*********&&*********uuuuwwuuiipppueet96>4>>>22222222222222222222222222222>>>>>>>>>>>>>222>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>::::::::::::::::::::::::::::::::43-.&*$*==*8*%%=%====*88=***===*=*8t8***88**==**%%%%o #888888tuuquw*waau==***&&&1<-:2:::<--<::44::::::::::::::::::::::::::::::::>>>>>>>>>>>>>>>>::::::::::::::::>>>>>>>>,>>>>>>:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::>>>22222-;<666++&&&&&&++ +&tyt&O666661<,,,,,>>>>,,<;;<,,,,<;;;;;44445:::;;;;::>>::::333,:,,-<777<,,;-...X++%@OO$$$$&&$#%%%%%+oOO&&+..;>--....-->>>>>>><<-,77<;<1>,,>>>>>>>>>>>>>>>>>>>>>>>>>>>>>::::::::::::::::::::::::::::::::", ":::::::::::::::,>>>>>>>,>>>>>>>>,,,,,,,,>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>:::::,,3:::::::::::::::::::::,,3:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::,,,,,,,,,::::::::::::::::::::::::::::::::::::::::::::::::::::::::2222222222222222222222>>>11X+hh%qu*o O%@OOOOOOOOooo oo ooooo oooo ooooo ooooOOOOOOOOOOOoooOOOOO@OOOOOO@&&**************&********8uaauu*wwquiiuuue*e86<:>>>22222222222222222222222222222>>>>>>>>>>>>>222>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>::::::::::::::::::::::::::::::::43.X&*&*===**==***=%%=**====****%=******88***===&%&8&o%&u8**8uuuuauwupaw==&&&&&&1<-:2:::<---<::4::::::::::::::::::::::::::::::::>>>>>>>>>>>>>>>>::::::::::::::::>>>>>>>>3>>>>>>:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::>>>>>>,--...66OOO$&&&&&&&*eeer996666<<<,,>>>>>;;;;;;--<<;;--;;44444423:;;-----,::,3333::<--<11-<<-.;16699%OOO$##$&*&&&999999%O@++..->,,,;;<233>>>>>><<;<,<<;<<,,>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>::::::::::::::::::::::::::::::::", ":::::::::::::,,,>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>::::,333::::::::::::::::::::,333:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::,,,33333333::::::::::::::::::::::::::::::::::::::::::::::::::::::::222222222222222232222222-X;XX9ch*u8%oOOOOOOOOOOOooo oo ooooo oooo ooooo ooo oOOOOOOOOOOOOoooOOOOOOOOOOO#&&&***tt********&&*******uuaauu*wwquuuuuue*&96;->>>22222222222222222222222222222>>>>>>>>>>>>>222>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>::::::::::::::::::::::::::::::::42-X+&**=$%**&=*t8*=%===%%=========**888*****===&%&88%#%t8*=*8*=*uuuapu==$$$&*&%6<-:::::<---<:::::::::::::::::::::::::::::::::::>>>>>>>>>>>>>>>>::::::::::::::::>>>>>>>>3>>>>>>>::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::;:>>>>>>::--..<1OOoo++++++&&&&&&&+ ++...;;<:>>>>..------<;;;;;;<44444237><;;;---,<:,333,,:-------<<-<799999%OOO@##$&&&&&9999999+ o+6;;;>,,>:>444>>>>>>,,<;--;<<<,,,,,,,;<<<<<<<<>>>>>>>>>>>>>>>>::::::::::::::::::::::::::::::::", ":::::::::::::,33>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>::::,333:::::::::::::::::::::,,3:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::,3333333333::::::::::::::::::::::::::::::::::::::::::::::::::::::::222222222222222233222222711;.1vh*qu*##OOOOOOOOOOooo oooooooooo OOOOOOOOOOOOOOOOooo OOOOOOOOOOOOOOOOOOOOOOOO#&&&&**eet********&&&******wuuuuuwwwuuiuuuee*&96.;>>>22222222222222222222222222222>>>>>>>>>>>>>222>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>::::::::::::::::::::::::::::::::4:-.X%**$##**=&*88*=%==============**888****====&%%&8&# 888==**==*wuuu*#$$&***&%6<-::4:::----<::::::::::::::::::::::::::::::::::>>>>>>>>>>>>>>>>::::::::::::::::>>>>>>>>3>>:>>>>::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::<>>>>2225:,,,;......111.669999&&9++66616;<<<<,,,<<;;.;;<<<<<<,,,>333>>,7,,,,,>>><<<,,3,:,,::::<<<,<-7fgg996%++o@#OO#$$&99966666++o+66;.;;;->2444>>>>>>>,,;--;<,,,<;<,,<;;;;;;;;;>>>>>>>>>>>>>>>>::::::::::::::::::::::::::::::::", "::::::::::::,,33>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>:::,3333::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::,,33,,,,,,,,::::::::::::::::::::::::::::::::::::::::::::::::::::::::222222222222222223322222-3;;1.;gquu*####OOOOOOOOoo ooooooooooooOOOOOOOOOOOOOOOo@oo OOOOOOOOOOOOOOOOOOOO#@OO#************====**&==**t**uuuuuuwwwuu88t*te&96.,>>>22222222222222222222222222222>>>>>>>>>>>>>222>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>::::::::::::::::::::::::::::::::3:<.X+*&##$**=%&%&&%&=*=***=======***88***====***&%&88% *8t***tuuuqquu=##&****&%6<-::4:::<---<::::::::::::::::::::::::::::::::::>>>>>>>>>>>>>>>>::::::::::::::::>>>>>>>>3>>:>>>>::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::,>>>22222>:--<,,>:>>>>--;,11666966696116111<1111661<<117<<<,,,331661;-;,,,,,,,,2<<-<,,:-::::,::,:,--7fgg76999969%OOO#$&y996....19+ ++..;<<,33734>>>>>>>,-<<<;;<,,<;<,,<;;;;;;;;;>>>>>>>>>>>>>>>>::::::::::::::::::::::::::::::::", "3333333333333333,,,,,,,,>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,,>>>>>>>>>>>>>>>>>>>::::::::::::::::::::::::::::,,33::::::::::::::::::::,,33::::,3333333333333,,::::::::::::::::::::::::::::::::::::::::,,33::::::::::::::::::::::::::::::::::::::::::::::::::::::::2222222222222222>222222222>>>,11j=u**####OO@@OO@ooooooooooooooooooOOOOo@o@@o Oo%oo O OOOOOOOO OOOOOOOOOOOO@@@&&&***************=$$$=*uuuuuuuupauuuiutut&96..;>>>22>>>22222222222222222222233333322>>>>>>>>>>>>>>>>222>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>::::::::::::::::::::::::::::::::7--1.68&O$**=***8*&&=*********=====***888*==***=&#o%*8&%%8ut8uuujjpu==*$#=*&&**&1;-,34:2:<---<::::::::::::::::::::::::::::::::::>>>>>>>>>>>>>>>>::::::::::::::::>>>>>,,,>>>>>>>>::::::::::::::::::::::::::::::::::::::::::,,::::::::::::::::::::::::::::::::::::<>>>>222222>>>>>444444442>>-;;;;...<116616677666677667779777,;<,XXX.699977,-:22:<---<<-----:::22:::::,776661..69%%@@@%&996<-<-..+++++++X.;->773:,,,>>>>><<<<<;;;,<<;;;<<,,<;;;;;>>>>>>>>>>>::>>>::::::::::::::::::::::::::::::::", "3333333333333333,,,,,,,,>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,,>>>>>>>>>>>>>>>>>>>:::::::::::::::::::::::::::::,33:::::::::::::::::::::,33:::::,333333333333,::::::::::::::::::::::::::::::::::::::::::,33::::::::::::::::::::::::::::::::::::::::::::::::::::::::22222222222222222222222222>>>>,,pp88u=###OO@@OOOooooOOOOoooOOOOOOOOOOOOOOOOOOOOOooo O oOOOOOOOOOOOOOOOOOOOOO@@$$&*******8*******=$=****quuuuuupauuaauut8996..<>>>22>>>22222222222222222222233333222>>>>>>>>>>>>>>>>222>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>::::::::::::::::::::::::::::::::4-:,19h8O$==&&*****&==********=====******===***=#o#%&8*&*8t88uu*uiau=#=#$=*&***&6.-<,::::<---<::::::::::::::::::::::::::::::::::>>>>>>>>>>>>>>>>::::::::::::::::>>>>>>,,>>>>>>>>::::::::::::::::::::::::::::::::::::::::::,,::::::::::::::::::::::::::::::::::::>>>>>>2222222>>>4444444442>>>-;;--;;;<<<;;16+++.66;...;<6<;<<;-; ++66661<-:2324,:-:,,,:::::::::444::::,;<<;..1699&%@%%66<--<<--++++o++X..-;,3,-,>>>>>>:>><<<<<<;;;;;<<,,,<;;;;;>>>>>>>>>>>::>>>::::::::::::::::::::::::::::::::", ",,,,,,,,33333,,,,,,,,,,,>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>:::::::::::::::::::::::::::::,,,:::::::::::::::::::::,,,:::::,,333333,,,,,,::::::::::::::::::::::::::::::::::::::::::,,,::::::::::::::::::::::::::::::::::::::::::::::::::::::::222222222222222222222222222>>>2,*k88u8###OOOOO OooooooooooOOOooo@@OOOOOOOOOOOOOOoooo OOOOOOOOOOOOOOOOOOOOOOOo@@%##&******8uq*****=$$*8uuaaaapppppauuaaut89996.-,>>2222>>2222222222222222222223333222>>>>>>>>>>>>>>>>>>22>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>::::::::::::::::::::::::::::::::423-;gh&#=****88****&&=***888*==========*==****=O#%&&*8888***t*=%=u8%###=****8*%6..-:4:::<<-<<::::::::::::::::::::::::::::::::::>>>>>>>>>>>>>>>>::::::::::::::::>>>>>>>,>>>>>>>>::::::::::::::::::::::::::::::::::::::::::,,::::::::::::::::::::::::::::::::::::>>>>>>>222222>>>22222222>>>-;;;;::-------....XXX.<6677<.;-.;,<--O@&9+...--->3334:---:,<<:::,2:::4444::----;;;;;;999yy966<--::-->>>:::->>>>>>>>---;;<,,,,<;;;;;>>>>>>>>>>>>>>>>::::::::::::::::::::::::::::::::", "::::::::333,,,,:>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>:::::::::::::::::::::::::::::::,:::::::::::::::::::::::,:::::::,333,,,,:,::::::::::::::::::::::::::::::::::::::::::::::,::::::::::::::::::::::::::::::::::::::::::::::::::::::::22222222222222222222222222>>>>>2 ci888==#OOOOO OooooooooOO Ooo%&%#@OOOOOOOO@%%@O ooo OOoOOOOO@@#@####OOOOOOoo@%&#$&*****tuuuuqwq*=$=*uuupaappppaaauuuutt8966<-;3>>2222>>222222222222222222222333222>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>::::::::::::::::::::::::::::::::433--99%&*r***88&&**&===**88**=======%%%===*8**=#$&&**888*==*t*=##*8=#$#***&*t*%6+..:24:::<<<:::::::::::::::::::::::::::::::::::>>>>>>>>>>>>>>>>::::::::::::::::>>>>>>>>>>>>>>>>::::::::::::::::::::::::::::::::::::::::::,,::::::::::::::::::::::::::::::::::::>>>>>>>>222>2>>>;;;<<<<<;;;;;;;;>2>>>>--;;...XXX.<77ff77;;;<;;;<999+.X.;<,,33325::::-:---::::2::444442:::,<,,,>><79ggy661,:2::-:.16++o+++1,,<;;;>>:::--->>>>>>>>;;;;;<<,<<<;;;;;>>>>>>>>>>>>>>>>::::::::::::::::::::::::::::::::", "::::::::333,,:::>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>::::::::::::::::::::::::::::::::::::::::::::::::::::::::,:::::::333,,::::::::::::::::::,:::::::,:::::::,,::::::::::::::::::::::::::::::::::::::,::::::::::::::::::::::::::::::::2222222222222222222222>>>>>>>>>2X8li8uu8#OOOOOOoooooooooooOoo%&&%#OOOOOOOOO@%&%% ooo OOooO@@##%%&*e*&#@@OO@@@@%&%&*88***8uaauqqq*===**uauuuuuuuquuuutee8961;;;>>>222222>22222222222222222222233322>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>::::::::::::::::::::::::::::::::::4:-79y&==$$&&&&&%&&&==8****=======%%%%===*8*==&&&*8888***=****%o%**&=$***&*8*&96..<,2:::<<::::::::::::::::::::::::::::::::::::>>>>>>>>>>>>>>>>::::::::::::::::>>>>>>>>>>>>>>>>::::::::::::::::::::::::::::::::::::::::::,,::::::::::::::::::::::::::::::::::::>>>>>>>>>>>>>>>>;;;;;;;;;;;;;;;;>>>>>>>>,,<;....<;-;1777-<<;.-<7996.X.;,,,,,22>>222::--<---:::::44:::,,,<---:>>:-:7ff9717324>--,;;1+++++.113,<;.>>:::--:>>>>>>>>,<<;;;<<<<<<<;;;>>>>>>>>>>>>>>>>::::::::::::::::::::::::::::::::", "::::::::33,,::::>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>::::::::::::::::::::::::::::::::::::::::::::::::::::::::3,,:::::33,,:::::::::::::::::,,,:::::,,,:::::,,,,,,::::::::::::::::::::::::::::::::::,,,::::::::::::::::,,,,,,,,::::::::222222222222222222222>>>>>>>>>,,1.ch88i8##oooOo@OOOOOOOOOOOOO##%#@OOOOO@OOOO%&&&oooo OOOoOOOOOO@&*t*&OOOO@%%%%%%&&**88*=*uaau8**==***8uuuuwwwqqqwwwwte**%6.->22222222222222222222222222222222333>>>>>>>>>>>>>>>>22>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>::::::::::::::::::::::::::::::::::44>;6y**=$$&&&&%#%&&==***====*===%%%%%==****==&&&*888*****==**8##****=***&*tt*996<<:2:::::::::::::::::::::::::::::::::::::::::>>>>>>>>>>>>>>>>:::::::::::::::::>>>>>>>>>>>>>>>::::::::::::::::::::::::::::::::::::::::::,,::::::::::::::::::::::::::::::::::::>>>>>>>>>>>>>>>><<;;;;--;;<>>>>>---;:>>222>:;<;<<;---,,<-<,<-<7761.--,,32>::-;<,44:::---<<::::22:::---<<<----:>>4477777773:::>>,25;..+X..133,,;.>>>>::>:>>>>>>>>,,<;--;;;;<<<<;->>>>>>>>>>>>>>>>::::::::::::::::::::::::::::::::", "::::::::33,,::::>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>:>>>>>>:>>>>>>>>>>>>>>>>::::::::::::::::::::::::::::::::::::::::::::::::::::::::33,:::::33,,:::::::::::::::::,33:::::,33:::::,3333,::::::::::::::::::::::::::::::::::,33::::::::::::::::,,,,,,,,::::::::222222222222222222222>>,>>::>>>,1X9ci8uu=###ooooOOOOOOOOOOO###OOOOOOOOOOOOOO@&&*%@oo OOOoOOOOOOO$&&&$OOOO@&&&%%&&&&*88*==8aau8**==**uuuuaauuqquuwwwwe*&%+.-->22222233222222222222222222222222333>>>>>>>>>>>>>>>>222>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>::::::::::::::::::::::::::::::::::44>-198e*$$&*&&%%%%&==***========%%%==******=%$&***&*******==*8##88**==****tt*9996<:2::::::::4::::::::::::::::::::::::::::::::>>>>>>>>>>>>>>>>::::::::::::::::::>>>>>>>>>>>>>>::::::::::::::::::::::::::::::::::::::::::,,::::::::::::::::::::::::::::::::::::>>>>>>>>>>>>>>>>;;;;;;<>>>224444---;;:>2555444>>->,,,,--,,,<<777:::>23245>>--;;<4444::,,7,,:::22::<<<--.;-<<;<>,447777773::522>>445;.XX.;;,3,,<;,>>>>>>>>>>>>>>>::---:>>-->>>>:->>>>>>>>,>>>>>>,::::::::::::::::::::::::::::::::", "::::::::33,:::::>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>:>>>>>>:>>>>>>>>>>>>>>>>::::::::::::::::::::::::::::::::::::::::::::::::::::::::333,::::33,:::::::::::::::::,,33::::,,33::::,,3333,,::::::::::::::::::::::::::::::::,,33::::::::::::::::,,,,,,,,::::::::222222222222222222222>,,>::::>>,..1lhiii*=##o ooOOOOOOOOOOO###OOOOOOOOOOOOOOO%&8&%oo OOO%%%%#@@@$$$$$@O O&&&&&*&%#&88*==qapi8*=$==*uauuaaauwwquuuuwe&OoX.;>222222233222222222222222222222222333>>>>>>>>>>>>>>>>222>>>>>>>>>>>>>>>>>>>>>>>>>>>>:>>>>>>>>>>>>>>>>:::::::::::::::::::::::::::::::::4443>198e&$$&&%&&&%##&==*****==========*****==%&*8*%#%&********8o%8*==*$*tttutt9996<:::::::::44::::::::::::::::::::::::::::::::>>>>>>>>>>>>>>>>:::::::::::::::::::>>>>>>>>>>>>>::::::::::::::::::::::::::::::::::::::::::,,::::::::::::::::::::::::::::::::::::>>>>>>><,,,>>:>>--;<>>,224444444;;;;;>>2:4444444:>>---,;,,--<6<.44444444423,<;;;4337777777,,::22-<,,,<<<..;<;--;4477777372:233>-442;.XX.;;::>,<;,,,>>>>>>>>>>>>>----:>,,--:>>>:->>>>>>>>,>>>>>>,::::::::::::::::::::::::::::::::", ">>>>>>>>>>>>>>>>;;;;;;;;<<<<<<<<::::::::::::::::333,,:::::::::::::::::::33,,::::::::::::::::::::>>>>>>>>>>>>>>>>::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::22222222222222222222222222222222-,.yliuaa*==oo@ O@OOOOO OOoOoo+ ##oooooOOOOOO&*&&&@ O%%%%&&@O#&%OOoO OO#%&&&&*&*8t88**8tuaau8=8888q8=ipu*ttutuee8991;;;;;<:::222222222222222233322222>>>22222333,,>>>>>>>>>>>>>>>>>>>>>>>>>>>2222222222222>>>>>>>>>>>>>>>>>>>::::::::::::::::::::::::::::::::444:,1198**=**8q*=%%====**88*****=%%===*%%%%===*=*8*% %888*****u9+ +&*&&&***tt88&*9+.;,::,,,;;;,..;>24423<--;>22::::::::::::::::::::::::::::::::>>>>>>>>>>>>>>>>::::::::::::::::::::::::::::::::::::::::::::::::>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>:::::::::::::::::::>>>>>>>>,,>>>>>>>>>>>>>>>>>>>:::444444:::::<<..;;:444444,<<..,,7999999%++ XXX61666<..-<::44444466%@++<3444:;.::::::::::::::::<<<<<>>>>>>>>222>>>:>>,3>>>>>,,,2222>::::>>>>>>:::::::::::::::::22>>>>>>22222222", ">>>>>>>>>>>>>>>>;;;;;;;;<<<<<<<<::::::::::::::::33,,,:::::::::::::::::::33,:::::::::::::::::::::>>>>>>>>>>>>>>>>::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::222222222222222222222222222222227-XXyhuupu*=oo+oOOO OOOOOOooooo ###ooooOOOOOO$&&&@@OOOO@@@@@@OO&*&#OOO OO#%&&&&&&*8t8***88upauu*8888uq*ua*=**ttee*891;;;;;;;:::222222222222222233322222>>>22222333,,>>>>>>>>>>>>>>>>>>>>>>>>>>>2222222222222>>>>>>>>>>>>>>>>>>>::::::::::::::::::::::::::::::::4342>X.98*****8q8*===**=8**=====*=%%===*======**==**%#%888*8**uu9XX+&&&*==**tt8*&*9+.;,:::,,;;;>.;;>2442>;<11>5>::::::::::::::::::::::::::::::::>>>>>>>>>>>>>>>>::::::::::::::::::::::::::::::::::::::::::::::::>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>:::::::::::::::::::>>>>>>>>,,>>>>>>>>>>>>>>>>>>>:::444444::::::<;;;;:444444:--<<,,7999yyy899966+666661..-<:::4444376&%@+<4444>;.::::::::::::::::<<<<<>>>>>>>>222>>>:>>,3>>>>>,,,2222>:::>>>>>>>:::::::::::::::::>>>>>>>>>>>>>>>>", ">>>>>>>>>>>>>>>>;;;;;<<<<<<<<<<<::::::::::::::::3,,,::::::::::::::::::::,,,:::::::::::::::::::::>>>>>>>>>>>>>>>>::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::222222222222222222222222222222223->>;;<:::222222222222222233322222>>>2222233,,,,>>>>>>>>>>>>>>>>>>>>>>>>>>22222222222222>>>>>>>>>>>>>>>>>>::::::::::::::::::::::::::::::::433:;X+8******qut8*=******===*===%#%==========**==**=%=88888**uu6+ %*&&*==***88*&*9+.;>:::,<;;;>-<::4442;-177;->::::::::::::::::::::::::::::::::>>>>>>>>>>>>>>>>::::::::::::::::::::::::::::::::::::::::::::::::>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>:::::::::::::::::::>>>>>>>>>>>>>>>>>>>>>>>>>>>>>:::244444:::::::;;>>:44444::--<<<-6799hiyy888899699961..--<:::::4379&&%6<:444>;.::::::::::::::::<<<<<>>>>>>>>>22>>>>>>>,>>>>>>>>2222>:::>>>>>>>>::::::::::::::::>>>>>>>>>>>>>>>2", ">>>>>>>>>>>>>>>>;;;<<<<,,,,,,,,,::::::::::::::::,,,:::::::::::::::::::::,:::::::::::::::::::::::>>>>>>>>>>>>>>>>::::::::,:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::22222222222222222222222222222222447;.9qqiji*=% oooooo#oOOOooOOOOo%%%%&&%oOOOOOOO@@@@@@@OOo%%oo%*88&o oo oo#%&*&&&=*tt8**88*uppu88**ququa*u==**te*&&%1;;2>>><<:::222222222222222233322222>>>22222,,,,,,,,,,>>>>>>22>>>>>>>>>>>>>>2222222222222222>>>>>>>>>>>>>>>>::::::::::::::::::::::::::::::::-3:-199y*****qqq8******====8qu8*=%#%%%%========*=====*88*88u**wu9++&8&$&******8**t8+.;>:::::<;>><<:4442,<.1991.1::::::::::::::::::::::::::::::::>>>>>>>>>>>>>>>>::::::::::::::::::::::::::::::::::::::::::::::::>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>:::::::::::::::::::>>>>>>>>>>>>>>>>>>>>>>>>>>>>>::::2:444::::::::>244444444:::::..6998iy88tyiy8899996..-<<<<<:<<43799&&6<<:44>;;::::::::::::::::<<<<<>>>>>>>>>>>>>>>>>>>>>>>>>>>22222>>>2>>>::>>::::::::::::::::>>>>>>>>>>>>>>>>", ">>>>>>>>>>>>>>>>;;;<<,,,,,,,,,,,::::::::::::::::,,::::::::::::::::::::::::::::::::::::::::::::::>>>>>>>,>>>>>>>,::::::::3,,::::::::::::::::::::::::::::::::::::::::::::,::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::22222222222222222222222222222222444>XXhjqjjii8%#%%#o o## O@@OO@%#%&&&&*&%%ooOOOOO%&&%@oo%&&&#o#*t*&ooooo##%&**&&**8tt88888*8aau88*8uuqup*q=*u****$++1;>2>>><<:::222222222222222233322222>>>22222,,,,,,,,,,,>>>>>222>>>>>>>>>>>>>2222222222222222>>>>>>>>>>>>>>>>::::::::::::::::::::::::::::::::-3;.9hhu8*=*wuuq&&*****====8uiuu*=%%=%%=========**==*888**8u***u8% %8=##=******8*t8+.;>>:::-::::::44442<;X+9y9..::::::::::::::::::::::::::::::::>>>>>>>>>>>>>>>>::::::::::::::::::::::::::::::::::::::::::::::::>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>:::::::::::::::::::>>>>>>>>>>>>>>>>>>>>>>>>>>>>>-::::::44:::::::44444442::224:::..99yiit8uuiiiiytt996..<<<<<<;;;:769&*&+1<:4:>;;::::::::::::::::<<<<<>>>>>>>>>>>>>>>>>>>>>>>>>>>22222222>>>>>>>>::::::::::::::::<<<>>>>>>>>>>444", ">>>>>>>>>>>>>>>>;;<<,,,,,,,,,,,,::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::>>>>>,,,>>>>>,,,::::::::333,:::::::::::::::::::::::::::::::::::::::::,,,::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::2222222222222222222222222222222244-31.hxihjpaq=%#=**=%# oOOOO@@#&&&&***&&%ooOooO%&&&##%8***&##%t8*%####&&*8**&&**8tt8*88u88aaq8q8quuqup=w=*u**=&o .1>>>2>,<<:::22222222>>>>>>>>33322222>>>22222>>,,,,333,,,>>>>332>>>>>>>>>>>>>22222222>>222222>>>>>>>>>>>>>>>>::::::::::::::::::::::::::::::::-,-1ghi88***uuw*&**888**8*=*8uuiu*=====*========***=*888**8u***uy% %*=$#=*****88et8+.;>>::-:::::444444,<.X6yh9+X::::::::::::::::::::::::::::::::>>>>>>>>>>>>>>>>::::::::::::::::::::::::::::::::::::::::::::::::>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>:::::::::::::::::::>>>>>>>>>>>>>>>>>>>>>>>>>>>>>-<::::::::::::::444423,,--;>2244XX9iiuiquuiiiuq8tt896.-<::::;;;.-699*8&%61,::>;;::::::::::::::::<<<<<>>>>>>>>>>>>>>>>>>:>>>>>>>>2222222>>>>,,>>>::::::::::::::::;;<<<>>>>>222222", ">>>>>>>>>>>>>>>>;;<<,,,,,,,,,,,,::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::>>>>>,33>>>>>,33::::::::333,:::::::::::::::::::::::::::::::::::::::::,33::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::2222222222222222222222222222222244431X1hjhppaw*=#=quiu*#%o OOO#$&&&**&*&%%ooooOo%%%%&&t**8*&#%88*=&&==*8ut8***88tt8**88888iiqqiqquuuuaqu=wu*=$+ X.;>2222,<<,::22222222>>>>>>>>33322222>>>22222>>>,,33333,,,>>>332>>>>>>>>>>>>>22222222>>>22222>>>>>>>>>>>>>>>>::::::::::::::::::::::::::::::::,-.9hh8*8www8***********88*=*8uiu8*====*=========**********uwwuui*o%*==*==****8ueu8+X;>>2:-:::::444442,;1+%8y9+X::::::::::::::::::::::::::::::::>>>>>>>>>>>>>>>>::::::::::::::::::::::::::::::::::::::::::::::::>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>:::::::::::::::::::>>>>>:>>>>>>:>>>>>>>>>>>>>>>>-<<:::::::::::::444>,,66611;;>>2 +8iquiuuuuuuqqutt*961<:::::;;;.<799888%66<:->>>::::::::::::::::<<<<<>>>>>>>>>>>>>>,>>::>>>>>:::2>>>>>>>:>,,,,<-::::::::::::::::;;;;<<>>>>222222", ">>>>>>>>>>>>>>>>;;<,,,,,,,,,,,,,::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::>>>>,,33>>>>,,33::::::::3333,:::::::::::::::::::::::::::::::::::::::,,33::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::22222222222222222222222222222222443>;19Hzjjjaquuq**qipai8&o O@O #$&&&&&&&&%%%oo OOOO#&&=t**tu8****=****88uiu8***888t8**8*888iiuuauqqiauqaawuu==#+XX.>22222,,<,>>22222222>>>>>>>>33322222>>>22222>>>,,333333,,>>>332>>>>>>>>>>>>>22222222>>>22222>>>>>>>>>>>>>>>>::::::::::::::::::::::::::::::::1X.hki*u*uuu****88**&&*******8uiu8*==%==*========******=***euuuai8##%#=*==*****uwu8%X;>>2:-::3::44444,<.++%%%%+ ::::::::::::::::::::::::::::::::>>>>>>>>>>>>>>>>::::::::::::::::::::::::::::::::::::::::::::::::>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>:::::::::::::::::::>>>>>:>>>>>>:>>>>>>>>>>>>>>>>-<<:::::::::::::44>;;1669961.;;>%=uiuuaauuuuuuuatt8967:4444:>;;;<7988u8&%61;-;>5::::::::::::::::<<<<<>>>>>>>>>>>>>>,>>::>>>>>:::::::::::::,3,,;-::::::::::::::::;;;;;<>>>2222222", ":>>,,>>>>>>>>>>>,<;----;<<<<<<<<:::::::::::::::::::::::::::::::::::::,,,::::::::::::::::33,:::,3>>>>>>>>>>>,,333::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::33,,::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::222222222222222222222222333333333423;.9cJkppsauuuaaauapjp8&ooO O$***&&&&&%ooooooOOO#&&==uuut****8***8tuu*888***8uttt8**8quuuuuuuuiiiapauuapau*==+.X;>24222,,,,,,22222222222222222222222222222222,,,,,,,,,,,,,,,,>>>>>>>>>>>>>>>>2222222222222222>>>>>>>>>>>>>>>>:::::::::::::::::::::::::::22222;1Xhxae*ww8******8t8*********8uiau8*===***8*=%%=uu*****=tuau****iq8=**===****t8***891;3:::,:::::34--,;.+8%%%o++X::::::::::::::::::::::::3,::::::>>>>>>>>>>>>>>>>::::::::::::::::::::::::::::::::::::::::::::::::>>>>>,,3>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>::::::::::::::::>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>><<<:::22222::--::><16998yhh9XX16*8ququaaaaaaaaaut8&6973:44442--;.69y8q8889961,>;::::::::::::::::<<<<<>>>>>>>>:::>>>>>>>>>>>>>>>>>>>>>>>:,>>,,,,-::::::::::::::::;;;;;<<>>>>>2222", ":>>>>>>>>>>>>>>>,<;;--;;<<<<<<<<:::::::::::::::::::::::::::::::::::::,,,:::::::::::::::::,3333,:>>>>>>>>>>>,,333::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::33,:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::2222222222222222222222223333333332,1;XX6HBnjasspppppaaaapi8o %O ##$$&&&&&%ooooooOOO#$&==*******88**8tuuu*888**8tu888u8888uuuuuiiqquuaaiqquaau**=+..;>4422>,,,,,222222222222222222222222222222222,,,,,,,,,,,,,,,,>>>>>>>>>>>>>>>>2222222222222222>>>>>>>>>>>>>>>>:::::::::::::::::::::::::::222221X+cjwuuuuuq8***8t888*88*88**8uiiuuq8**8**8**=**8**=****uu**===*iuq8**===****88**ti91;2>:::<<:::-33,1.X%i8*&o++X::::::::::::::::::::::::3,::::::>>>>>>>>>>>>>>>>::::::::::::::::::::::::::::::::::::::::::::::::>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>::::::::::::::::>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>><<::::2222:::::<<;169yiiuahi999haaaaaaaaaaauuuaai8%+1,2444444::,<69yuqwq889971,;::::::::::::::::<<<<<>>>>>>>>>::>>>>>>>>>>>>>>>>>>>>>>::---;<;--::::::::::::::::;;;<<<<>>>>>2222", ">>>>>>>>>>>>>>>>,,<;--;;<<<<<<<<:::::::::::::::::::::::::::::::::::::,,,::::::::::::::::::33333:>>>>>>>>>>>>,,,,::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::,,,:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::22222222222222222222222233333333,,,,1.XX9xJxpssppjkjaasjpjj8ooOOOOOO#&&&%%oooOOOOOO#$&&=&=*****88888tuuu888888tuu8*8uu888uuaaiii8qquiiq**wqu8**=6..;22432,,,,,2222222222222222222222222222222222,,,,,,,,,,,,,,,,>>>>>>>>>>>>>>>>2222222222222222>>>>>>>>>>>>>>>>:::::::::::::::::::::::::::222226Xhzpupsaaiuq8eet88888tu8888*8uauuuuuq888888**8uu88****=**======*8uu8===******ee*8y91;>22:--<<::<,;...%8iuu*@++.::::::::::::::::::::::::3,::::::>>>>>>>>>>>>>>>>::::::::::::::::::::::::::::::::::::::::::::::::>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>::::::::::::::::>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>::::::22:-----<<..+9yiiuupjpiihhsppapaauaaaaaauui89+.;>444444::3669iiqwquuy996;;::::::::::::::::<<<<<>>>>>>>>>>:>>>>>>>>>>>>>>>>>>>>>:::-,,,,<;-::::::::::::::::<<<<<>>>>>>>>>>>", ">>>>>>>>>>>>>>>>,,<;;;;<<<<<<<<<:::::::::::::::::::::::::::::::::::::,,,::::::::::::::::::333333>>>>>>>>>>>>>>>>::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::,:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::22222222222222222222222233333333,,,;;11.X9xzkjiqpsjjpaaspuaa* %oo #&&%%%ooOOOOOO##&&**********8888tuuu88ttttuuu888uuq8uuiiuuuuqqquiiq***8***==66.;22432,,,,,2222222222222222222222222222222222,,,,,,,,,,,,,,,,>>>>>>>>>>>>>>>>2222222222222222>>>>>>>>>>>>>>>>:::::::::::::::::::::::::::22222XXxBsuuauiiq88eet888uiiiuuqqqqiauuuuuq88q88***8qiq8***=====****=%*8u8******&&*ee**96;;32::--<<--1.XX698iuuu*%++1::::::::::::::::::::::::3,::::::>>>>>>>>>>>>>>>>::::::::::::::::::::::::::::::::::::::::::::::::>>>>>:::>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>::::::::::::::::>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>::::2222:---<<<<++68iiuuapjjpaapppppppaauaappaiuiu89961-3::44::3669iauqqw888961;::::::::::::::::<<<<<>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>:::,,773,,,::::::::::::::::>>>>>>>><<<<<<;;", ",>>>>>>>>>>>>>>>,,<<;;<<<<<<<<<<:::::::::::::::::::::::::::::::::::::,,,::::::::::::::,,:::,3333>>>>>>>>>>>>>>>>::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::22222222222222222222222233333333111--;;;.X6icxkkpuqajjsus0 *u* ooo o%&%##OOOOOO##$$&&&*ttt******888ttuu88ttuuuu8uu88quuuuiuuuuuuuuiiuq*********96;;>5422,,,,,2222222222222222222222222222222222,,,,,,,,,,,,,,,,>>>>>>>>>>>>>>>>2222222222222222>>>>>>>>>>>>>>>>:::::::::::::::::::::::::::22222X9KBkdwwwqq88tteiuuuiaiiiiiuuiapiuuuuu88888***8888==***8==**8888=*8tt8*****&&**et&+1;-2::--<<<;;XX+9iiqquuu*%+.1::::::::::::::::::::::::3,::::::>>>>>>>>>>>>>>>>::::::::::::::::::::::::::::::::::::::::::::::::>>>>>:::>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>::::::::::::::::>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>222224223,<<,666+%8iiauuapsjspppppppppaauappaaiiiiiiy961,<:3333769yhpiquww889611::::::::::::::::<<<<<>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>:::;-,33,<<<::::::::::::::::>>>>>>>>;;;;;;<<", "3,>>>>>>>>>>>>>>,,,<<<<<<<<<<<<<:::::::::::::::::::::::::::::::::::::,,,::::::::::::::::,::::,33>>>>>>>>>>>>>>>>::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::22222222222222222222222233333333;,3,>>:-;.XX9hxnnkjsjjjjjw=%qi% #%%oO##OOO@$$$$$$&&tt*****t**888tuu88tuuuuu8uuu8quuuuuiuuiaiuuuiu*=********96<-::522,,,,22222222222222222222222222222222222,,,,,,,,,,,,,,,,>>>>>>>>>>>>>>>>>>>>>>>>22222222>>>>>>>>>>>>>>>>:::::::::::::::::::::::::::22222;cTnkswwqqiiiiuupaaappaiaaaiiaaaaiuuiuuuuuuuuuuu88888*8uuuuu88ui****8**&&**&$&**y%+.;>2::-<<;117+98iiiqauau&%1.-::::::::::::::::::::::::3,::::::>>>>>>>>>>>>>>>>::::::::::::::::::::::::::::::::::::::::::::::::>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>::::::::::::::::>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>444444423:-<1666o%8iaaaasssjspppppppppppaaaiuuiapaiiii991<<3777769ghiiaauwe89+11::::::::::::::::<<<<<>>>,>>2>>>>>>>>>>>>>>>>>>>>>>:::::;-;<,,<<,::::::::::::::::222>>>>>;;;<<<<1", "3,>>::>>>>>>>>>>,,,<<<<,<<<<<<<<:::::::::::::::::::::::::::::::::::::,,,::::::::,:::::::::::::::,,,,,,,,>>>>>>>>::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::22222222222222222222222233333333;>233223277;XX9vVVCVkpskjjsqqp8#oo o##OO#$###$$&&$$$$&&&&*****==*888uu88uuuuuuuuuquuuuuuiiiuuiiu8uu8*=********66.--::2,,,,,22222222222222222222222222222222222,,,,,,,,,,,,,,,,>>>>>>>>>>>>>>>>>>>>>>>>22222222>>>>>>>>>>>>>>>>:::::::::::::::::::::::::::22222XcIkkawwaihhhpaujpaaaaaapaaaaaaapaaaaaiiuuiaaiuu88uiu88uaaiuu8ui*****&$#&&&&$$&**+X.;>2:::<;;19fyiuqiuasua*%%6;-::::::::::::::::::::::::3,::::::>>>>>>>>>>>>>>>>::::::::::::::::::::::::::::::::::::::::::::::::>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>::::::::::::::::>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>44444442:--<676698yiipppjjjssaaappppppppiiiiqquiaaaaiiiy967777776yhhiaaaauut8+11::::::::::::::::<<<<<>>>,,>22>>>>>>>>>>>>>>>>>>>>:::::;;,<;<,311::::::::::::::::2222>>><;<<<<166", "33>>::>>>>>>>>>>,,,<<<<,<<<<<<<<:::::::::::::::::::::::::::::::::::::,,,::::::::3,,::::::::33::-33333333>>>>>>>>::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::222222222222222222222222333333337>>224:44-511XX1 aVCnkjjkjjpjka=%%%o oooOO#$$$$$$&&$##$$O#$&&&&&%=*8888u8uuuuuuuuuuquiuquuiiuuqqiu8uu8*=q8*****&61.--:43,,,,,22222222222222222222222222222222222,,,,,,,,,,,,,,,,>>>>>>>>>>>>>>>>>>>>>>>>22222222>>>>>>>>>>>>>>>>:::::::::::::::::::::::::::22222XcTVkuauphcchhaupaaiiappaaaaaaaijpaapauuuuuiuu8*%%8iu88ituuuu888******&$$&&$$$&&@ X.;>32:,<;.6fhiu8qapaauu= %6;,::::::::::::::::::::::::3,::::::>>>>>>>>>>>>>>>>::::::::::::::::::::::::::::::::::::::::::::::::>>>>>,,3>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>::::::::::::::::>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>44444442,<<67999hhiihhjsjjsssppppaapsjpa8qiii888aapppaihyyyfff776ghhiapasaaay967::::::::::::::::<<<<<>>>,,,22>>>>>>>>>>>>>>>>>>>::::::;;<---,311::::::::::::::::44222>><<,,16667", ">,,,,>>>>>>>>,,,,>>::>>,>>>>>>>>::::,33,::::::::::::::::::::::::33,,>>>>>>>,3333::::::::::::::::>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::2222222222222222,,,,,,,,3333333322222>>>>>>>>>>>1X6cLKzjjmsmmskauwuu% o&%#*t*et*@$$#OO#&o##o#%%#==*8uuuiuuuuuuiauuuuuuuuuuquuuuutuuu888***==*e*$91-;,;-,>>222222222222222222222222222222222222222222222222222222>>>>>>>>>>>>>>>>22222>>>>>>>>>>>>>>>>>>>>>>>>>>>::::::::::::::::>>>>>>>>,>>>>>330j!kwkdpjjkkjpaajpaaapppiaaaaaapuuaaauuaquaai8==qiauqqqqqqiaau*=*****$$$$&*997712:::<<::>,;X08qwpiiaspawuu%6613-::::::::::::::::>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>::::::::::::::::::::::::::::::::::::::::::::::::::::::::,:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::22222222:::>>>>>>>>222225>2,>--;;X+8iuuappppppssjsssjsssspppjjpuuuuaauuwiahjjppaaapi8%+6uippaiiiaipii8o 444443:-<<<<>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>;;<>>22224::-<,,::::::::::::::::22:::::<<<<<;...", ">,,,,>>>>>>>>,,,,>>::>>,>>>>>>>>::::,33,::::::,,::::::::::::::::33,>>>>>>>>>,333::::::::::::::::>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::2222222222222222,,,,,,,,3333333322222>>>>>>>>>>>X1;XgHHjjjsmbbVksuupa8% ##&etuuu$$$#OO####o #=*8888uuuuuuuuuuiiuuuuuuuuuuuuuuuuett888*=*==*ete&f7;<,-->>>>22222222222222222222222222222222222222222222222222222>>>>>>>>>>>>>>>>22222>>>>>>>>>>>>>>>>>>>>>>>>>>>::::::::::::::::>>>>>>>>>>>>>>,3XxTkspjaaknnnbksjppppppapaaaiiiaaiaaau88iiiiq88qiapiuuuqqquiiu*==****&$$&&&6611;2::::<::>,;X08uuaiiasaauau%66<,-::::::::::::::::>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>::::::::::::::::::::::::::::::::::::::::::::::::::::::::,:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::22222222:::::>>>22222222>>2>>:-<1.+9iaapppppppssjjsssssssppssjspaauaaaaaiiiiiaauaaphi89&hppppaaaaipiu8oo4444:::-<::>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>;;<>>2222>::-<,,::::::::::::::::22:::::<7777<<..", ">,,,,>>>>>>>>,,,,>>::>>,::::::::::::,33,:::::,33::::::::::::::::,,,>>>>>>>>>,333::::::::::::::::>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::2222222222222222,,,,,,,,33333,,,222222>>>>>>>>>>.11X1hnJnbkmbbbVVkpjjat&###$*tee&$%###Ooo##o#&8ut8888u88uuuuuuiiuuuuuuuuuuuuuuuwett88*====*etue&f7,,,-->>>>22222222222222222222222222222222222222222222222222222>>>>>>>>>>>>>>>>22222>>>>>>>>>>>>>>>>>>>>>>>>>>>::::::::::::::::>>>>>>>>>>>>>>,3Xx!nkdkppknVVVbjjjjppsppjppaaaiiaaappau8aiiuqquiapaiqquuiuiaiu*===***&$$8&+XX.;;22:::<:::>;;68iaiiiaaaaaaq%66.<-::::::::::::::::>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>::::::::::::::::::::::::::::::::::::::::::::::::::::::::,:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::22222222::::::::222444442222::::<..9ihpsppsssjjjjjssssssssssssjjpaaaappappaaaaaasaapjkkkjpaaapaaaaji8*oo:44::::,:::>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>;;<>>>222>:::<<,::::::::::::::::22:::::<7777,<;.", ">,,,,>>>>>>>>,,,>>>>>>>>>>>>>>::::::,33,:::::,,,::::::::::::::::,>>>>>>>>>>>>,,3::::::::::::::::>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::2222222222222222,,,,,,,,333,,,,>22222222222222221.;1;X8zPbkskkjkCbjpauut**##tt=*&%%%&&#OO####%=*88888uu8uuuuuuuuuuuuuuw8uuuuuuuuuut8*==****euu*&77<,,;->>>>22222222222222222222222222222222222222222222222222222>>>>>>>>>>>>>>>>22222>>>22222222>>>>>>>>>>>>>>>>::::::::::::::::>>>>>>>>>>>>>>,,X9YBkkjsskknVCVbkkjppjjjjspppaaippppjjaiiiuiuuiippauqquipaiiu8*=*==$%&&9&+.X.;;;22:::::::>>;69iiiqqaauuau8++6.<-::::::::::::::::>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>::::::::::::::::::::::::::::::::::::::::::::::::::::::::,:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::22222222::::::::4444444444444::,-.68hjjjsssjjjjjjjjjjssspssssjjjjspppppasssssssskspppjkkjpaaasspsaji88oo,,,,:::,:::>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>;;<>>>222>>>:<<<::::::::::::::::2:::::::7777<<<<", ">,,,,>>>>>>>>,,,>>>>>>>>,,,>>>>>::::,33,3,,,::::::::::::::::::::>>>>>>>>>>>>>>>,::::::::::::::::>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::,::::::::::::::::2222222222222222,,,,,,,,333,,>>>22222222222222221;-,1.19PnksbbkVbjspu8*=t8##t*$=&%%&&&&#o#%#ooo#88888uuuuuuuuuuuuuuuuuuwuuuuuuuuuuu8*==*uueeet*%7,;;;>>>>>222222222222222222222222222222222222222222222222222222>>>>>>>>>>>>>>>>22222>>>22222222>>>>>>>>>>>>>>>>::::::::::::::::>>>>>>>>>>>>,,,,;XxBkbjskkknbkjjkjppjjjjjjjpppaujjjppppaiuuiuuiajppauuuaaiuu8===*=&%%&99+...;11;2>>:::::42>;198uiqquaauu==0+1.<:::::::::::::::::>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>::::::::::::::::::::::::::::::::::::::::::::::::::::::::,:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::22222222::::::::4444444444444::,.69hcjjjsssssjjjjjjjjsspssssjjjskjsssspaapsjssssssssjjppjsppssssjapi88%%1<<-<:::::>>>><<>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>;<<>>>>>>>>>><,<::::::::::::::::2:::::::<,,<<---", ">,,,,>>>>>>>>,,,>>>>>>>>333,>>>>::::,33,333,::::::::::::::::::::>>>>>>>>>>>>>>>>::::::::::::::::>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::,,,::::::::::::::::2222222222222222,,,,,,,,33,,>>>>>>2222222222222273>3,;10BnkkbVVCbjsspau**%o#**==&&&&**&%#o####&*t888tuuuuuuuuuuuwuuuuuuuuuuuuuuuuuu8*==*uue**8*%,;;;>>>>>>222222222222222222222222222222222222222222222222222222>>>>>>>>>>>>>>>>22222>>>22222222>>>>>>>>>>>>>>>>::::::::::::::::>>>>>>>>>>>,,,,>>;9znbbsskbVkq=uaaapjjjjjjjjpauuuappppppaiuqquiappaauquiiiai8==8$&&&9966.--;<<;.2>>:::::44:;1698aiqaaaau%%0+..,:::::::::::::::::>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>::::::::::::::::::::::::::::::::::::::::::::::::::::::::,:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::22222222::::::::44444444::::::<,;9hckjjjkjjjjjjkjjjjjsspssssjjjskkjjjsssadjkkssjssssjkkkjjspssspsaauuu*&+...;<>>222>::<<>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>><<<>>>>>>>>>><<<::::::::::::::::::::::::<,,<----", ">,,,,>>>>>>>>,,,>>>>>>>>33,,>>>>::::,33,333,,:::::::::::::::::::>>>>>>>>>>>>>>>>::::::::::::::::>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::,33::::::::::::::::2222222222222222,,,,,,,,33,,>>>>>>>222222222222225:3:XX6xnsskjbVVbkkjjjpu=%*uuu*&&&&&&&%#o#&**8t8888tuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu8*==*uu**8899;;;;>,,>>>222222222222222222222222222222222222222222222222222222>>>>>>>>>>>>>>>>22222>>>22222222>>>>>>>>>>>>>>>>::::::::::::::::>>>>>>>>>>>,3,>>:3.hBnbbsjbbkppjuuuasjkkkkjjpaaa=wapjjjppaiuuuuiaiiiuquiapjji**8&&*9961<-::::<-.>>>:::::44:;;698aiiaaauu0%+1.-,-::::::::::::::::>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>::::::::::::::::::::::::::::::::::::::::::::::::::::::::,:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::22222222:::::::::::44444,,,:-<119hckkjjkkkkkkkkkkjjjjjsssssjjjjkkkkjjsjjssjkbkkmmkjdapsjkjssssaaaqaiii88%%++.;>>222:::<<>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>><<<>>>>>>>>>><<;:::::::::::::::::::::::-:<,<<---", ">,,,,>>>>>>>>,,,>>>>>>>>,,>>>>::::::,33,,,,,,,,,::::::::::::::::>>>>>>>>>>>>>>>>::::::::::::::::>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::,,33::::::::::::::::2222222222222222,,,,,,,,33,>>>>:>>>2222222222222222433;XxVjsksbVVbnbjsppi=%8***=&&&&&&%%%%&*8&&%****8tuuiiuuuuuuuuuuuuuuuuuuuuuuuuu8*==*****8899>,,>>,,>>>>22222222222222222222222222222222222222222222222222222>>>>>>>>>>>>>>>>22222>>>22222222>>>>>>>>>>>>>>>>::::::::::::::::>>>>>>>>:>>,3,>>:3-XHVkVbmsspjhhaiuipkkbkkkjjppj#wpjjjpaaaaaaiuqqquaaiapajkji*==**&&61;-4444:<-<>>>::::444:-;698iiaaauui 961.;3-::::::::::::::::>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>::::::::::::::::::::::::::::::::::::::::::::::::::::::::,:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::22222222::::::::::::::::111;;116ihkkkkkmmmkkkkjjkkjjjjjjssjjsjkbbbkjsssjjsskbmmmskksssjkbksssssaqqaiiiii88891.;3>2>::<<<>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>><<<<>>>>>>>>,<;;:::::::::::::::::::::::---<<----", ">>>>>>>>>>>>,333::>>>>>>>>>>>>>>::::::::::::::::::::::::3333,:::>>>>>>>>>>>>>>>>::::::::::::::::>>>>>>>>>>>>>>>>>>>>>>>>33,>>>>>::::::::::::::::::::::::::::::::::::::::::::::::,33,::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::222222222222222233333,,,,,>>>>>>222222222222222222344:;XhPnskbkkmbbjsjjp8#==*u**8**&&%###&8tt*&&&&**8tuu8tuuuuuuuuuuuuuu*8uuuuuu*u8==*8*=*tt896X>>>>>>>>3322222>222222222222222222222222222222222222222222222222>>>>>>>>>>>>>>>>2222222222222222>>>>>>>>>>>>>>>>::::::::::::::::>>>>>>>>>>>>>>>>:3,X9Jjmsbjssp8haiapkkbkbkjjjjjjppsjjppjajjaiapaqaaqqppapapa8%#=**&+.;:44444:<<->>>::::4:43-.199ipaiaaq8#%+..--:::::::::::--::::->333>>>>>>>>>>>>>>>>>>>>>>>>>>>::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::222::::::::::222::3:-:,7-:,--<,-XX6998hhkkkbbmmmbbmjjkkjkjjjkjjjssjkkkmbmkkjsssjjjjjsjkmksspasjkjkkkssspqqqiiiipiiii891;,3>--,,<>>>>>>>>>>>>>>>>,,,>>>>>>>>>>>>>:,3,;-;,,,,,,;--:::::::::::::::::::::::::::::<<<", ">>>>>>>>>>>>,333::>>>,,>>>>>>>>>::::::::::::::::::::::::333,::::>>>>>>>>>>>>>>>>::::::::::::::::>>>>>>>>>>>>>>>>>>>>>>>>33,>>>>>::::::::::::::::::::::::::::::::::::::::::::::::,33,::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::222222222222222233333,,,,>>>>>>>2222222222222222>2444:;XcJVbVbkjbbbjasjp*%*8*u8u8*&&&&%#o%*tt*&*****tuuutuuuuuuuuuuuuu**8tuuuuuu*u8==8uu***&+66;>>>>>>>>>>>>>>>>222222222222222222222222222222222222222222222222>>>>>>>>>>>>>>>>2222222222222222>>>>>>>>>>>>>>>>::::::::::::::::>>>>>>>>>>>>>>>>43,-6hkjmbkspjiiapjknnbkkkkkkkkjjjjjspjkkkjaipjpqaauippaiuii8==8**&+.-:44444::<->>>:::::433-.698apaiai8*%%+..-:::::::::::::::::::>333>>>>>>>>>>>>>>>>>>>>>>>>>>>::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::222:::::::::::22::3,:<--1;...XX.%8ihjkkbkkmmmmmmbbbmmmkjkjjjkjjsssjkkkmbmkkkjsssjjjjjkmmkjssssjjkkbkkkkjaaaauuipaaiii896;1,:-<<<>>>>>>>>>>>>>>>>,,,>>>>>>>>>>>>>-,77,;;;;<<,,<--::::::::::::::::::::::::::::::::", ">>>>>>>>>>>>,333::>>,,,,>>>>>>>>::::::::::::::::::::::::333,::::>>>>>>>>>>>>>>>>::::::::::::::::>>>>>>>>>>>>>>>>>>>>>>>>33,>>>>>::::::::::::::::::::::::::::::::::::::::::::::::,33,::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::22222222222222223333,,,,,>>>>>>>2222222222222222>2244:;XcBnbnbkkbVVkaapp%#88=**u8*&&&&&%##&8*&&*t**8tuutuuutu888aaaauu**8tuuuuuu*88*=8ut*=*8961->>>>>>>>>>>>>>>2222222222222222222222222222222222222222222222222>>>>>>>>>>>>>>>>2222222222222222>>>>>>>>>>>>>>>>::::::::::::::::>>>>>>>>>>>>>>>>4::;1XxkbVVbsjpiapkknbkkkkkkkkjjjjsspjkVkkjaajjpiaaaaaaaqquu8==8*8*+.--44444::<<2>>:::::44:;198yjjpaau*%%+..-<:::::::::::::,33:::>,,>>>>>>>>>>>>>>>>>>>>>>>>>>>>::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::222:::::22::::::3:-;,,116..99998jjkkkkkjkkmmmmmmbbbbmmmjjjjkmkjjsjkkkkkkkkkkjjspjjjkkkjkmkjjjjjjkbbbbkkkjspauuipuuiii896111,,--,>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>-,3773<-;<<<,<>:::::::::::::::::::::::::::::::::", ",,>>>>>>>>>>,,,,:>>>,,,,>>>>>>>>::::::::::::::::::::::::3,,:::::>>>>>>>>>>>>>>>>::::::::::::::::>>>>>>>>>>>>>>>>>>>>>>>>,,,>>>>>::::::::::::::::::::::::::::::::::::::::::::::::,33,::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::2222222222222222333,,,>>>>>>>>>>2222222222222222>>244:;.hBVbbkkbbCCbsppa=#**&**8t8*&&&&&&&&**&&*tt8tttttuut88888uuuuuu****ttuutt*88888***&8y91;->>>>>>>>>>>>>>>>222222222222222222222222222222222222222222222222>>>>>>>>>>>>>>>>2222222222222222>>>>>>>>>>>>>>>>::::::::::::::::>>>>>>>>>>>>>>>>:::>1XxnjVZZkjjppjjjkkkkjkkkkkkksjjssjkVkkjppjsapaaaaiiiuuuu8==**8891;-:4444::<;2>>:::::3:-169yijjpapu=%%+..;,2::::::::::::333::>>>>::>>>>>>>>>>>>>>>>>>>>>>>>>>::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::222:::::222:::::>>-;;;11169clcckkkjjjjjjkkmmmmmMmmbmmmmjkjjkkkjjjjkkkjjjssssjsssjjjjjjjjbmkjjjjjkbbbbbkkkkjpauiaaiiii89+66173,:3>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>:>,7771<<<<<,>>>::::::::::::::::::::::::::::::::", ",,,>>>>>>>>,,,>>:>>,,33,>>>>>>>>::::::::::::::::::::::::,:::::::>>>>>>>>>>>>>>>>::::::::::::::::>>>>>>>>>>>>>>>>>>>>>>>>,,>>>>>>::::::::,:::::::::::::::::::::::::::::::::::::::,33,::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::222222222222222233,,,>>>>>>>>>>>2222222222222222;>>::2;.9JUVbkbbbVVkssjp8%=**t**88**&&&&&&***&*8ettte*tttt**tttttttuut*****ttuut888888**uet91X:3>>>>>>>>>>>>>>>>222222222222222222222222222222222222222222222222>>>>>>>>>>>>>>>>2222222222222222>>>>>>>>>>>>>>>>::::::::::::::::>>>>>>>:>>>>>>>>-::27;vxkVZZksssjjjjpsjkjkkkkkkkkkkkjjjjpjsppppajpaaaiuuuuuu8*=**8896;;>44442>><22::::::2-;798uisspppu=%96..;,:::::::::::::,33::>>:::>>>>>>>>>>>>>>>>>>>>>>>>>>>::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::222:::::222:::::-,-11XXX98hkkkkkkjjjjkkkjjkmmkjsMmmmmmmmmkjjjjjkkkkkjjjjsssssssjssjjjkkkbbkkjjjjkmbbbbbkkkjjpaaapaaaiu8%961<,,44>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>--,7771<<<<,>>>::::::::::::::::::::::::::::::::", "33,>>>>>:>>,,>>>>>>,3333>>>>>>>>::::::::::::::::::::::::::::::::>>>>>>>>>>>>>>>>::::::::::::::::>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>::::::::,,,:::::::::::::::::::::::::::::::::::::,33,::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::2222222222222222,,,,>>>>>>>>>>>,2222222222222222;1,::,,;qJUVmkbbbbbsskkju%&&8t8*8***&&&&&&&***8t*ett**eut**8uuuuuuuuut*****8ttttu8***8uuutiy6-23>>>>>>>>,,,>>>>>222222222222222222222222222222222222222222222222>>>>>>>>>>>>>>>>2222222222222222>>>>>>>>>>>>>>>>::::::::::::::::>>>>>:::>>>>>>>><,:223;hITUZkksspjjspsjjkkkkkkkkkkkkkjspsjspaappjpaaaiuuuuuuq88888896..->::22>>>22:::<:::-;98iuuaaappu=%9+..<>:4::::::::::::,:::>>::>>>>>>>>>>>>>>>>>>>>>>>>>>>>::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::222:::::22::::::>3-1;X99hhjjjssskkkkkkjsjjkkkkkjMMMmmmmbbmkjjjjkkkkjjkkkjsspassjjjjjjjkkkkbmmkkssjkkkbbkkkkkjpaapaaaiu88&96<<,44>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>--;,7761<<<<>>>::::::::::::::::------::::::::::", "33,>>>>>:>>,,>>:>>>,3333>>>>>>>>::::::::::::::::::::::::::::::::>>>>>>>>>>>>>>>>::::::::::::::::>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>::::::::33,:::::::::::::::::::::::::::::::::::::,33,::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::2222222222222222,,,>>>>>>>>>>>>,2222222222222222;1,-:,,;hJPnmkbbbbkskbka% %&&8**8*=*8t8*&%&&***8**tt**ttt**tuuuuuuuuut*****88***8*********y96,44>>>>>>>>,,,,>>>>222222222222222222222222222222222222222222222222>>>>>>>>>>>>>>>>2222222222222222>>>>>>>>>>>>>>>>::::::::::::::::>>>>>:::>>>>>>>><->252X1H^~Cbbjsppjjssjjkkkkkkkkjkkkkkjsjjjpaaaappppppauqqqquuq88*9961.-<>>>>>>>2::::<::,-19hiuuaaaaa8%9%.X;<>:4::::::::::::::::>>:>>,>:>>>>>>>>>>>>>>>>>>>>>>>>::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::222:::::::::::2237X179ccjjjpasssssjjkjjjjjkkkkkkMMMMMMmmbmkkjssskkjssjjsssssaasjjjjjssssjkmbmbmkjjjjjkkkkkkkksspaapauuuu*y96<344>>>>>>>>>>>>>>>>:::>>>>>>>>>>>>>>:--;<1<1<<<;::>::::::::::::::::------::::::::::", "33,>>>>>:>>,,>>:>>>,3333>>>>>>>>::::::::::::::::::::::::::::::::>>>>>>>>>>>>>>>>::::::::::::::::>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>::::::::33,,::::::::::::::::::::::::::::::::::::,33,::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::2222222222222222,,,>>>>>>>>>>>,,2222222222222222;1,-:,11cBJCVnnbbbkknVk* &8&**tt*=*uiu*&%%&&&&&***ettttt*tuuauuut8******888****===**=##=&&+X-44>>>>>>>>>>>,,,,,222222222222222222222222222222222222222222222222>>>>>>>>>>>>>>>>2222222222222222>>>>>>>>>>>>>>>>::::::::::::::::>>>>:::->>>>>>>><->7423X9P^CVVksjjjjjjjkkkkkkkkkjjjjjkjjsssppaauiappjjau8888uuq8889996;;;>>>>>>>2:::<<::,-19hqqaapaau*%%+XX;;::4::::::::,:::::::>>:>,3>:>>>>>>>>>>>>>>>>>>>>>>>>::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::222::::::::::222-1-fhvcckjsaasaaaapsssssjjjjkkkkmMMMjjjmmmkjssaajkjssssassssaapsjjjjsssskkmkmbbbbmkjjkbbkkkkksssjjjpauuu*ih9<334>>>>>>>>>>>>>>>>:::>>>>>>>>>>>>>>>>;-;;;61<<;-->::::::::::::::::------::::::::::", "3,>>>>>>>,3,>:::,:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::,,,,,,,,::::::::::::::::::::::::::::::::::::::::::::::::::::,,33::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::3333>>>>>>>>>>>>22222222222>>>>>>>>>>>>>>>>>>>>>>>>>>222>>>>>>>>533-:7.1knVVnmknnnbknba# %****8t8888ttt8%%%%&&&&&&*tttttetuuut*****w*=*tuut*&&&99669999966;.;;;-22222222222222222222222222222222>>>>>>>>>>>>>2222222222233322222>>>>>>>>>>>>>>>>22222222222222222222222222222222:::--:::::::::::::::::::::::::::42>22442XBUZZVakjpjkkkjjkkkkkkkkkkjjjjkkjjppapppaaaaiqqqq**wuuuue$$89+X.>>2:::::;;;;<:::5>;98awaaaaaa899..-;>>22::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::>>>>>>>>>>>>>>>>::::::::::::::::::::::::::::::::::::::::::::::::-----::::::22222:,1qkjsjmkjjsjjjaapaapsjsjjjjjjjmmjjsjjjkmksssssjkjjjjjppsjsppsjjjjjjjkkmkbbbbbbbbmbbkkkkkkkjjppijaqiuqauii9611..-<:433>>;;;;>>2:::::::::::::::::::::::::,,,,:::>>>::>>>:::::::::::::::::::::,,,", "3,>>>>>>>,3,>:::,:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::,,,,,,,,:::::::::::::::::::::::::::::::::::::::::::::::::::::,33::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::3333>>>>>>>>>>>>2222222222>>>>>>>>>>>>>>>>>>>>>>>>>>>222>>>>>>>>>>2:2>1hnnVnmbnbnnbbVnp=#=*888tt**&&*8*&&&%%&&&&**ttttteuuuutt***=***==*ete88899+++6666661;;;;;-22222222222222222222222222222222>>>>>>>>>>>>>2222222222233322222>>>>>>>>>>>>>>>>22222222222222222222222222222222:::--:::::::::::::::::::::::::::42>22442;B~~ZVjkjpsjkkjjkkkkkkkkkkjjjjkkjjppppppaappiqqiaq**wuuue$&89+.1>>2:::::;;;;<:::32;68uudaasau899..-;>>22::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::>>>>>>>>>>>>>>>>:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::22222:3X8kksMkjjjjjjaaaaapssssjjjssMmmmjsssjjmmmjssssjjjssjjssssssssjjjjjkkkkjjmbbbbbmmbbbkjkkkkkkjspajaqiauaiq8891.1<<<:222>>;;;;>>2::::::::::::::::::::::::::,,::::>>>::>>>>>>>>>>>:::::::::::::,,,", "3,>>>>>>>,,>>::>,:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::,,,,,,,,:::::::::::::::::::::::::::::::::::::::::::::::::::::,,,::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::,333>>>>>>>>>>>>222222222>>>>>>>>>>>>>>>>>>>>>>>>>>>>>22>>>>>>>>25243-1cHnnbjnCknnbnVka=%=88ttt8**&&&88&*&&&&&&&&*ttttttuut****&********ttt889%6.XX....;,<;->,>>22222222222222222222222222222222>>>>>>>>>>>>>222>>>>>>>>33222222>>>>>>>>>>>>>>>>22222222222222222222222222222222:::--:::::::::::::::::::::::::::4::>2442.BQ~ZVkkkjjjkkkkkkkkkkkkkkkjjjjjjjppppppaajjiqqpauw**88te*889..,>>2:::::;;;;<:::3>;18uasappa8%+6.--:>>22::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::>>>>>>>>>>>>>>>>:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::22222:,X8kmsmmjssjkjppaaasssssjjjssmmmkjsssjjmmmmjsssjjjjsjjssspsssssjjjjkkkkmbbbbbnbbbbbkjjjbkkkkjsahjpiaaapaiii86...--:22>:>;;;;>>2::::::::::::::::::::::::::,,::::>>>::>>>,,,,,,,,:::::::::::::,,,", "3,>>>>>>>,,>::>>,::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::,::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::>33,>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>332-2,;9HnnbbVVjnnnnnj= %=*8ttt***&%&888*&&&&&&&$&*etttuut****&$********&&&&%++.<.;;;--;;>:>232>22222222222222222222222222222222>>>>>>>>>>>>>222>>>>>>>>22222222>>>>>>>>>>>>>>>>22222222222222222222222222222222:::--:::::::::::::::::::::::::::4::>22221BUZZVnbkkkkkkkbbbbbbkkkkkkjjjjjjjpppaaiaapjaqqpauuuu888*tyy9..;>22:::::;;;;::::2-;1iipsssai8%+6.--:>>22::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::>>>>>>>>>>>>>>>>::::::::::::::::::::::::::::::::::::::::::::::,,:::::::::::22222:;1hkkmmmkssjjkjjjssssssjjjjsjmmmjssssjkmkkmjssjjjjjjjsassssssssjjjjjkkkjmbVbmbbVbbkjjkkkkkjjjjphjpaaaaauapi896X..-<,2::<;;;;>>2::::::::::::::::::::::::::::::::>>>::>>>,,,,,,,,:::::::::::::,,,", "3,>>>>>>>>>>::>,,:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::,::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::,::::::::::::::::::::::::,:::::::::::::::::::::::>,3,>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>222-:,;vJCVnVVbbbbbbki=%#&**88*&&&%#%&**&&&&&&&&#$&**8tuut*****&#&=&%%%% XX...,,>,,>>>::>2222222222222222222222222222222222222>>>>>>>>>>>>>2222222222222222222>>>>>>>>>>>>>>>>22222222222222222222222222222222:::--:::::::::::::::::::::::::::::<<>2221BUVZVbbkkkkkkkbbbbbnbbkkkjjjjjjppaiiiiuuuapiqqiiuuuut888tyy91;,>22::::<>;>;<::::-11hihjjsaii96..--:>>>2::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::>>>>>>>>>>>>>>>>:::::::::::::::::::::::::::::::::::::::::::::,,3-----::::::22222,.9xjjbMbmkjsjjjjjjsssjjjjjjkkjjjjssssjkkjjjjsjkjjjjjjsaasssssssjjkmmmmmjmbCbkVCVbbkjkkkjkkjjjjphaaaiiaa=uai889%...<,::><;;;;>>2::::::::::::::::::::::::::::::::>>>::>>>>>>>>>>>:::::::::::::,,,", "3,>>>>>>>>>>::>3,:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::,,,::::::::::::::::::::::::::::::::::::::::::::::::::::::::::,,,::::::::::::::::::::::::,,,:::::::::::::::::::::>>,>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>22>>>>>>>>>>>>>>25>33-1cJCVnnbknbnbkpw=*#&*****&&&&%#%%%%%%&&&&&$&&&****8*****&&#%&%oo++++....;;2>>>2>>2>222222222222222222222222222222222222222>>>>>>>>>>>>>2222222222222222233>>>>>>>>>>>>>>>>22222222222222222222222222222222:::--:::::::::::::::::::::::::::::<<,222XkUVVbkbjjkbbkmbbbnVVbbkkkjjjjjjaaiuuuqquuiphiqqaaut8tiyyy996;;3222:::<<>>>;<:::2>;;9ihjkjiii96X.--:>>>>::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::>>>>>>>>>>>>>>>>:::::::::::::::::::::::::::::::::::::::::::::,,,-----::::::222223X9xjsbMmbbmjjssssssssjkjjsjkmjsjsssssjjjjjjjsjkssjjjjspsssjsjjjjjMMmmmmmbbCVmVCnbbmmbkjjjjssjjpiquiqquuuuahi8986..<,::,<;;;;>>2::::::::::::::::::::::::::::::::>>>::>>>>>>>>>>>:::::::::::::,,,", "3,>>>>>>>>>>::>3,:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::33,::::::::::::::::::::::::::::::::::::::::::::::::::::::::::,33::::::::::::::::::::::::33,:::::::::::::::::::::>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>222>>>>>>>>>>>>>>522,-1hnnnnbjknnVbja*==%***&&&&&*&&%%%#%%%&&&&&*&$&&**&**&&&&$#&&&#oo++661<;;;<222222222222222222222222222222222222222222222222>>>>>>>>>>>>>2222222222222222333>>>>>>>>>>>>>>>>22222222222222222222222222222222:::--:::::::::::::::::::::::::::4:<<<222X9CZVbmbjjkbbbbbbnVVVbbbkkkjjjspaiuqqququaaphhq*uuu88ty8y966;;->22::::<<>><;<<::>3-;19ihhhii96..---::>>>::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::>>>>>>>>>>>>>>>>:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::22222,.1hksmmmbbbkjssjjssssjjjsssjjjssssssssssjjjssjjssjjjjssssjjjjjjMMMMMmmmmbmbbmVmbbbbmbkkjjsapjjpi88q=*uuuuapa8889611,::3<;;;;>>>::::::::::::::::::::::::::::::::>>>::>>>>>>>>>>>:::::::::::::,,,", "3,>>>>>>>>>:::>3,:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::33,,::::::::::::::::::::::::::::::::::::::::::::::::::::::::,,33::::::::::::::::::::::::33,,:::::::::::::::::::::>>>>>>,>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>222>>>>>>>>>>>>>>33-;1X9kjnVkknbbnksi*%#=*8*&&&&%&&&%%%#&%&&**&&*&$$&**&***&&$$$**%oo++...;;;>>,222222323332>>>222222222222222222222222222222222>>>>>>>>>>>>>222>>>>>>>>22222333>>>>>>>>>>>>>>>>22222222222222222222222222222222:::--:::::::::::::::::::::::::::4:<<<>227XVAVbbnjjkbbbbmnVCVVbbbkkkkjjppiuqqquiiuapaaiq#8uuu88996...;>>222:::::<>><<<<::-3-;198hhhhh91.;---::>>>::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::>>>>>>>>>>>>>>>>::::::::::::::::::::::::::::::::::::::::,,:::::::::::::::::22222,1XqkjsmmbbbkkjjjjjjjjssssssjjjssssssssssjjsssssjjsjjsssssssjjjsmmmmmmmmmnmbZCCkbbbbkkbbkjpqajjphu88%=qu=ququiq*89661-:3:<<;;>>>::::::::::::::::::::::::::::::::>>>::>>>>>>>>>>>:::::::::::::,,,", ">>>>,3,>>>>>>>>>::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::3333,::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::,3333::::::::33333,,,::::::::::::::::::::::::::::::::>>>>>>>>>>>>>:::>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>35>>X11hzkbbjjkjbPkjju%8****&&&%#%**&%%%##%&88*&8&%&&##&*&***%#%%&88%XX1;;,332::>>>>>>>>>>>>>>>>22222222222222222222222233322222>>>>>>>>>>>>>>>>2222222222222222>>>>>>>>>>>>>>>>22222222222222222222222222222222::::::::,,,22:::::::::::::::::::4:<<<>221XVAVbmmkjbnnbbmbnVVVnbbkkkjjspjpaiuuiiiaaaiii8=*quuy9XX.;;;>>>255:::::<>>:<<<<::2>>;.XX9961...-;:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::>>>>>>>>>>>>>>>>::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::,71%akssmmmmkmmmjjjssjjjssssssskjssssssssssssssjssssssssssssjjjjmmmmmmmmmnCCCVksmVbbjsbbksssaapphiq88uq*uaauuauq8966;-,::<<;;>>>::::::::::::::::::::::::::,:::::>>>>>>>>>>>>>>>>::::::::::::::::", ">>>>,3,>>>>>>>>>::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::333,::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::,333::::::::33333,,,::::::::::::::::::::::::::::::::>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,-16hkjjkkkkkkVbjj==8******&&%%&*&&&&8*&&***&&&&*&##&****&###&%&&+..1;>222244>>>>>>>>>;;;;;;;22222222222222222222222233222222>>>>>>>>>>>>>>>>2222222222222222>>>>>>>>>>>>>>>>22222222222222222222222222222222::::::::,,:22:::::::::::::::::::42<<<:222XzUZVbMkkbnnnbbbbVCCVnbbkkkjjsjjpaaiaiiaapppaq=*888y6XX;;;<>>225::::::<:::<<<<::22>;;.......;;,>:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::>>>>>>>>>>>>>>>>::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::,798pjsskkmmmmmmkjsssssssssjjssjjsssssssssssssssssssssssssssjjkmmmmmmmbVnVVVCCVbVVbjsjbbbjjjpaaapauquaaaappaqquu8&66;-,::<<;;>>>::::::::::::::::::::::::::,:::::>>>>>>>>>>>>>>>>::::::::::::::::", ">>>>,3,>>>>>>>>>::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::333,::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::,333::::::::3333,,,,::::::::::::::::::::::::::::::::>>>>>>>>>>>>>,,,>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>3;16jkkbbkkknbkkpj=8#t*&***=*&&&*****t8*&=**=%&**%o#&****%#o#&#o+++1;;2222222>>>>>>;;;;;;;;;;22222222222222222222222232222222>>>>>>>>>>>>>>>>2222222222222222>>>>>>>>>>>>>>>>22222222222222222222222222222222::::::::,::2::::::::::::::::::::44<<<:442XhUUCCbkkkbbbbbmbbVCCVbkkkkkjjjjjjpppaaaapphpq**88886XX;;;>>>:::::::::::::<--<::222>;;...;;;;--::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::>>>>>>>>>>>>>>>>:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::7fhhsssjjkkmmmMkjsaasssssssjjjssssssssssssssssssssssssssssssskmmmbmmbCCCCVVCCVVVbjssjbbbkkksaaaaiiuipjjappiwwqq8&%6.->::<<<;>>>::::::::::::::::::::::::::,:::::>>>>>>>>>>>>>>>>::::::::::::::::", ",>>>,3,>>>>>>>>>::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::3,,::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::,,3::::::::333,,,::::::::::::::::::::::::::::::::::>>>>>>>>>>>>>,,,>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>3>>;X6kkbbbbjknCkkjj=8#t&&**&=****8888*8*&&&***%&**#oo&*88*%##%#Oo++61;>2222222>>>>>;;;;;;;;;;;222222222222222222222222222222>>>>>>>>>>>>>>>>>>2222222222222222>>>>>>>>>>>>>>>>22222222222222222222222222222222::::::::::::::::::::::::::::::::42<<<:442;9PQQUnbkkbbbbmmmbbVVnbkkkkkjjjkjjjppppappppaq*8ut886.;<<::::::::::::::4::<--<::242>>;;,,,,,>--::::::<<::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::>>>>>>>>>>>>>>>>::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::-39vhpasjjkkkkjsjjsaasssssssssjjssssssssssssssssssssssssssssssjjmmbmmbCUQUVbVZVVbbjssmbbkkkkspspiiiuiajjpaiqqiqq*=%6.->-:<<<;>>>::::::::::::::::::::::::::,:::::>>>>>>>>>>>>>>>>::::::::::::::::", ",>>>,,>>>>>>>>>>::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::,::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::,::::::::33,,,:::::::::::::::::::::::::::::::::::>>>>>>>>:::>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>23>;;X8xbkjkbkjxCknna%*tt&&**==8888888***&&&=****&&%#o#%**8*%#%%###%+61;>2222>>>>>>>>>>>>>>>>>>>22222222222222222222222222222>>>>>>>>>>>>>>>>>>>2222222222222222>>>>>>>>>>>>>>>>22222222222222222222222222222222::::::::::::::::::::::::::::::::44:<<:444>1BUUCbVbbbkkbbbbbbbbbbkkkkjppjjjjppppjpsjjppi8qut896.;<<<:::::::::::::4::<---::4442:::-::::::::::::<<<::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::>>>>>>>>>>>>>>>>::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::19hhapjjkkkksssssssssssssssssjsssjsssjjjjssssssssssssssssssjjjmmmmbVUQQQVkbZCZbbmjmbbbkkkkssssiaiuuippppaaaaiq*=&6.-,-:<<<;>>>::::::::::::::::::::::::::,:::::>>>>>>>>>>>>>>>>::::::::::::::::", "3>>>,,>>::>>>>,,::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::,,,,::::::::::::::::::::::::::::::::::::>>>>>>>>:::>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>2>>;;1cnkjjbnkkxkijk===ut****==88ttt8*******=&&&8*%%#%%%&**&%%%%##%%+11;222>>>>,,,>>>>>>222222222222222222222222222222222222>>>>>>>>>>>>>>>>>>>>2222222222222222>>>>>>>>>>>>>>>>22222222222222222222222222222222::::::::::::::::::::::::::::::::44><<:4442XhCUCbbbbbkkmmbbbbbbbbjjkjpaasjjjjppjjpsjppau88ut896.;<<<<::::::::::>>4::<---<:44444::4::::4444::::<<<::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::>>>>>>>>>>>>>>>>::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::4:.1qhaajjkkkjsssssssssssjjsssjjsssjjssjssssssssssssssssssssjmmkmmmmbCQQQQVkbZZZbbmjjbbbkkkjssjsaaaiiappihjjiqqi**891;,-:<<<;>>>::::::::::::::::::::::::::,:::::>>>>>>>>>>>>>>>>::::::::::::::::", "3,>>,,>>::>>>>,,::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::,,,:::::::::::::::::::::::::::::::::::::>>>>>>>>>>>>>>>>222>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>-,;;6xBkjbVnkkzuqpj#*=88tt8*=*88tt8&%&*88*&%%%%**&%&&********&##$%%+11;222>>;,;2222222222222222222222222222222222222222222>>>>>>>>>>>>>>>>>>>>>2222222222222222>>>>>>>>>>>>>>>>22222222222222222222222222222222::::::::::::::::::::::::::::::::44><<:4442X%bPPnkknVbkkkbbbbbbbbssspauapjjjjjjjjpsppaiuq8u8991.<<<<<<::::::::>>>4::<---<:444444:3334444444:::<<<::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::>>>>>>>>>>>>>>>>:::::::::::::::::::::,,,::::::::::::::::::::::::::::::::::::::::43-X9iaapjkkjssssssssssssssssjjjjssjjjjjsssssssssssssssssssssmbmbbbbVCQQUCVbVZVVnmmssbmmkkkjsjjspspaaaaiuahhu8qi**891;,-:<<<>>>>::::::::::::::::::::::::::,:::::>>>>>>>>>>>>>>>>::::::::::::::::", "3,>>>,>:::>>>>,,::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::,,,:::::::::::::::::::::::::::::::::::::>>>>>>>>3,,>>>>>222>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>-,,.6znkskVbjhhpkVk=88t8uu8**888t8*%#&888=%####&****888888888*%==%o+11;22>>>;;12222222222244444222222222222222222222222222>>>>>>>>>>>>>222222222222222222222222>>>>>>>>>>>>>>>>22222222222222222222222222222222::::::::::::::::::::::::::::::::44><<:4442XXjVCbskVVbkmmbbbbbbbbjpaaaaapjkkkjjjjsjjpppai8ut891.<<<<<<::::::::>>>4::<---<:444444:::44444444:::<<<::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::>>>>>>>>>>>>>>>>:::::::::::::::::::::,,,::::::::::::::::::::::::::::::::::::::::43-X9ipjajkkjsssjssaassssjsssjjsjssjjjjsssjjsssjsssssjjjsssasjmbbbbbVCQQUCbVZZVZbmmsjbmkkkjjsjjjjjspaaiiiiiiiqqq**896;,-:<<<>>>>::::::::::::::::::::::::::,:::::>>>>>>>>>>>>>>>>::::::::::::::::", ">>>>>>>:>>:>,3>:::::::::::::::::::::::::3333,:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::222>>>>>2222222222222222222222222222222222222222433;X8ckkknkapaakkJk=%=88t88t88tut&#o%*=8*%%#o#***tt88888*88**8**@@996;;>>>2>>>>2222222222222>>>>>>>>>>>22222222>>>>>>>>>>>>>>>>22222222222222222222222222222333>>>>>>>>>>>>>>>>2222222222222222>>>>>>>>22222222>>>>>>>>>>>>>>>>::::::::::::::::4444444443:.>>>>>>>:::>>>>>::::::::::::::::::::::::::::::::::::::::::::::::>>>>>>>>,,,>>>>>>>>>>>>>>>>>>>>>::::::::::::::::::::::::::::::::::::::::::::::::>>>>>>>>>>>>>>>>::::::::::::::::>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>::::::::::::::::>>>>19hhppdsskjjjsaasspjsssssssjsssssjsssssjjjjsjssssssMsssasjbbmbVVCbsUUCVVZVCZmmmbmkbkjjssjjjkjsppppppaaaiuqqut$#%1;;>::;<>>22::::::::::::::::>>>>>>>>>>>>>>>:>>>>>>>>>>,>>:>>:::::::::::::::,", ">>>>>>>:>>:>,,>:::::::::::::::::::::::::333,::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::222>>>>>22222222222222222222222222222222222222224231+ikkjkkkpjspjjbp=**%*tt8&&8iu8=#%*8*****%%&**tttttttt*8*&&*&&%@661;<>>>2>>>>2222222222222>>>>>>>>>>>22222222>>>>>>>>>>>>>>>>22222222222222222222222222222333>>>>>>>>>>>>>>>>2222222222222222>>>>>>>>22222222>>>>>>>>>>>>>>>>:::::::::::::::::44444444--,..gxkkbbbVbbbbbbbmmbjjpappppsjjppppphiiiuueett961552>>>>>>>>:::>>>>>::::::::::::::::::::::::::::::::::::::::::::::::>>>>>>>>,,>>>>>>>>>>>>>>>>>>>>>>::::::::::::::::::::::::::::::::::::::::::::::::>>>>>>>>>>>>>>>>::::::::::::::::>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>::::::::::::::::2>>>;7yippdassjjjpaapppjspaaapjjssssssssjssssssssssssssjssssssmbbbbbVbsbUCCCCZCVbbmmmbVbsjsspsjjjsssjppaiiiuq8qu=#%991;-::;<>>22::::::::::::::::>>>>>>>>>>>>>>>:>>>>>>>>>>,>>:>>:::::::::::::::,", ">>>>>>>:>>>>,,>:::::::::::::::::::::::::333,::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::2222>>>>222222222222222222222222222222222222222235316hxjknkkijpuawuq8iu8ii8*888yu8*&*888**888=*88tuutttt8&&%o#%#@%+++.;,>>>>>>>>2222222222222>>>>>>>>>>>22222222>>>>>>>>>>>>>>>>22222222222222222222222222222233>>>>>>>>>>>>>>>>2222222222222222>>>>>>>>22222222>>>>>>>>>>>>>>>>::::::::::::::::::4444444->7;X.gnkbVbVCbCCVnbkksppppppsssjsppsspqqquuu*&8*+1;522>>>>>>>>:::>>>>>::::::::::::::::::::::::::::::::::::::::::::::::>>>>>>>>,>>>>>>>>>>>>>>>>>>>>>>>::::::::::::::::::::::::::::::::::::::::::::::::>>>>>>>>>>>>>>>>2222::::::::::::>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>::::::::::::::::3>>>;19iiaaauasspaaaaaappaaaaasjsssssjjsjjjssssssssjjsssssssssmbVZVbVVnnUCVCCQCmbbmmmnCVsjjsapsjppppppaiuuqq8888$#%961,>::;<>>22::::::::::::::::>>>>>>>>>>>>>>>:>>>>>>>>>>,>>:>>:::::::::::::::,", ">>>>>>>:>>>>>>>>::::::::::::::::::::::::3,,:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::22222>>>22222222222222222222222222222222222222224511+hxhkJjjqjsqkw=iiq*8pi8*8**tu8**888*=8tu8*888tttt888=%%%o#%#+++...;>>>2>>>>>2222222222222>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>22222222222222222222222222222222>>>>>>>>>>>>>>>>2222222222222222>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>:::::::::::::::::::4444444>,<;.1kzkVVbCbVVVnbbjspppsjjjspssppppaqwwqu8*&&+XX;>22>>>>>>>>:::>>>>>::::::::::::::::::::::::::::::::::::::::::::::::>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>::::::::::::::::::::::::::::::::::::::::::::::::>>>>>>>>>>>>>>>>32222:::::::::::>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>::::::::::::::::3>>,;.6yiaaauaaaaiaaqqiqaaaaaaasssassjjjjjsssssssssjjssssssssMmmbnnbbCCVCZbbVQCbbbbbbbVbssjspapjppjppaiuqqquu88*#o%%.;,,:;;<>>22::::::::::::::::>>>>>>>>>>>>>>>:>>>>>>>>>>,>>:>>:::::::::::::::,", ">>>>>>>:>>>>>>>>::::::::::::::::::::::::,:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::,::::::::::::::::::::::::::::::::::::::::::::::,::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::222222>>222222222222222222222222222222222222222245>.Xijaknjjqkkjkuwapq8u8ii8% #tu88888*&*8tt88888888888**=**&&*&66+..;,>>>2>>>>>2222222222222>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>22222222222222222222222222222222>>>>>>>>>>>>>>>>2222222222222222>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>::::::::::::::::<:::4444:3>--71Xqxkjbbbbkmmbbbkkjjjkjjjjapppppaqwwqw8889+.X.;32>>>>>>>>>:::>>>>>::::::::::::::::::::::::::::::::::::::::::::::::>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>::::::::::::::::::::::::::::::::::::::::::::::::>>>>>>>>>>>>>>>>32222:::::::::::>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>::::::::::::::::>>:,,X.yiaaaaaaqqqaaqqiqqqaaaaaskjsaasssjssaaapspssjjssssjMMMMMMmbbnbnCVbCnbkVCCbbmbbmmjssspppppsjjspaauuuquq888Oo%61;--:;;<>>22::::::::::::::::>>>>>>>>>>>>>>>:>>>>>>>>>>,>>:>>:::::::::::::::,", ">>>>>>>::>,,>>>>::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::,,,::::::::::::::::::::::::::::::::::::::::::,,,::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::322222222222222222222222222222222222222222222222221;+8hpkxjjqkbsiaquiipa*uut&o#tiu888*==*8t88888uu88888****8**8*96..<1,>>22>>>>>2222222222222>>>22222222>>>>>>>>>>>>>>>>>>>>>>>>2222222222222222222222223322222222222222>>>>>>>>2222222222222222>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>::::::::::::::::<<:::444442>,;;;%kjpkbkkkkkkbbbbkkkkjjsspppppauwwquq88991..;,,>>>>>>>>>>:::>>>>>::::::::::::::::::::::::::::::::::::::::::::::::>>>>>>>>>>>>>>>:>>>>>>>>>>>>>>>>::::::::::::::::::::::::::::::::::::::::::::::::>>>>>>>>>>>>>>>>::::::::::::::::>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>:::::::::::::::::3-:3..9iaappspaqwqaqupqiuuiiapjjjsaapsjjjjjsssssssjjjjjssMMMMMMmmbVnbVnnVbbkbZZbmmbbjkjsssssspppjjpaaauuu88888u#o%6.->>:--<>>22::::::::::::::::>>>>>>>>>>>>>>>:>>>>>>>>>>,>>:>>:::::::::::::::,", ">>>>>>>::>,,>:>>::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::33,::::::::::::::::::::::::::::::::::::::::::,33::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::33222222222222222222222222222222222222222222222227119ipjVkkjanbuajiqqqi*qu888&&taiut8*=**8t88uutuu888t**8***&8t896.;,,>2>22>>>>>2222222222222>>>22222222>>>>>>>>>>>>>>>>>>>>>>>>2222222222222222222222223332222222222222>>>>>>>>2222222222222222>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>::::::::::::::::<<::::444:23,-;10hkjkkskbbkkkkkkkkkjjsssjjjppaiqwuuq8896.;;,>>::>>>>>>>>:::>>>>>::::::::::::::::::::::::::::::::::::::::::::::::>>>>>>>>>>>>>>::>>>>>>>>>>>>>>>>::::::::::::::::::::::::::::::::::::::::::::::::>>>>>>>>>>>>>>>>::::::::::::::::>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>::::::::::::::::-3:-3-.9iiaapssspquuwasuiuuuqqapaaaapssjsjjjjjjjspsjjjjjjjsssMMMsmMmbbbkbmjjmmbbbmmbbkkjjjjjspaaqapaiauq8888888u%++.X-33:--;<>22::::::::::::::::>>>>>>>>>>>>>>>:>>>>>>>>>>,>>:>>:::::::::::::::,", ">>>>>>>::>3,>:>>::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::33,,::::::::::::::::::::::::::::::::::::::::,,33::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::33322222222222222222222222222222222222222222222253;18iijnijjjVVaapq8q8u88uuu*#%tpiuu8**8*888uiutuq******8****8ii7<-;>-->22>>>>>>2222222222222>>>22222222>>>>>>>>>>>>>>>>>>>>>>>>2222222222222222222222223332222222222222>>>>>>>>2222222222222222>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>::::::::::::::::<<<:::24:::-:,>-X9hjjjskkkkkkjjsjjkjjjjjjjpaaaiquuiii96.->3,:--:>>>>>>>>:::>>>>>::::::::::::::::::::::::::::::::::::::::::::::::>>>>>>>>>>>>>:::>>>>>>>>>>>>>>>>::::::::::::::::::::::::::::::::::::::::::::::::>>>>>>>>>>>>>>>>::::::::::::::::>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>::::::::::::::::-7:-3-.6yiuuupjjjauq*ijuuuiiuqqqquapsppaaapjjspppaapjjjjjjjsssmmMbMmbbmsmsssksbbmmmbbmmskkkjpuqq*upaaaiq#=8q8888 +1;;>-:--;<>22::::::::::::::::>>>>>>>>>>>>>>>:>>>>>>>>>>,>>:>>:::::::::::::::,", ",>>>::::,,,>>>>>::::::::::::::::::::,,33::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::,33333::::::::::::::::::::::::33,,::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::222222222222222222222222222222222222233333322222221;8hpJVhkqjVksuuqq8*8uquiiiiiuiuuuu8**88ttuuuu8**8*******8yiy9;;;;>>222222>>,,2222222222222>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>22222222222223332222222222222333>>>>>>>>2>>>>>>>2222233322222222>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>::::::::::::::::<<<<::::::>>>>>>119hkjpppjkkjjkjjjjjjjspspaaaaqqqquq891->2::::::>>>>>>>>>>>>>>>>::::::::::::::::::::::::::::::::::::::::::::::::::>>>>::>>>>>>>>>>>>>>>>>>>>>>>>::::::::::::::::::::::::::::::::::::::::::::::::>>>>>>>>>>>>>>>>::::::::::::::::>>>>>>>>>>>>>>>>:::>>>>>>>>>>>>>::::::::::::::::::::::<.9yttuupppppaqqqq*quiu88qwupppaapaaaapppaiiahhpjkjjjjkjsssjsmmmmsaksjbbbbmbbbjsssjjspauqw*uaaiaiu=8tu8888 +1;-:,:<<;<>22::::::::::::::::>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>>>::::::::::::::::", ",>>>::::,,,>>>>>:::::::::::::::::::::,33::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::,,333,::::::::::::::::::::::::33,:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::22222222222222222222222222222222222223333322222245,X9iiBkpkqqkpsjpiqqqipuiaaaaaiuuuu**8t*8ttuuuu****8t88=*8yi89+>;>>>>22222>>>,,2222222222222>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>22222222222223332222222222222333>>>>>>>>>>>>>>>>2222233322222222>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>::::::::::::::::<<<<::::::>>>>>>X.6ikjaaajkkjkkksjjjsssjppaiiiuquii86;;>2244::::>>>>>>>>>>>>>>>>::::::::::::::::::::::::::::::::::::::::::::::::::>>>>::>>>>>>>>>>>>>>>>>>>>>>>>::::::::::::::::::::::::::::::::::::::::::::::::>>>>>>>>>>>>>>>>::::::::::::::::>>>>>>>>>>>>>>>>:::>>>>>>>>>>>>>::::::::::::::::<:::::<.68**uupppppauuuu**8qq88qquiaaaaaaapjjhiu888iiqihhjjjjsssssassjkjsjajbmbmskmmjssjjjspaiqq*uaiuiut888t8*%#++61;-:::<<;>>22::::::::::::::::>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>>>::::::::::::::::", ",>>>::::,,,>>>>>:::::::::::::::::::::,,,:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::,3,,,::::::::::::::::::::::::,,,:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::22222222222222222222222222222222222222223222222245,X988znjkipkkbkjuq8quauappaaaauaut8tt*88ttuuuu88*******&8y86XX>>>>>>>>22>>>>>>2222222222222>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>22222222222222332222222222222333>>>>>>>>>>>>>>>>2222223322222222>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>::::::::::::::::<<<<::::::>>>>>>;1X%hjapppjjjsssasspauapjjhaiiipiiy9.X-32444::::>>>>>>>>>>>>>>>>:::::::::::::::::::::::::::::::::::::::::::::::::>>>>>>:>>>>>>>>>>>>>>>>>>>>>>>>::::::::::::::::::::::::::::::::::::::::::::::::>>>>>>>>>>>>>>>>::::::::::::::::>>>>>>>>>>>>>>>>:::>>>>>>>>>>>>>::::::::::::::::<:::42<;.9%*uuaappauqq8*8*=*8888uuiiapaiiiiii8%++XX++X+98qqiapsssaaasskjjsakbjmkjkmkjjjkssaaiuuuuuiuuuu888*88&o ++1;;:::<<<;>>22::::::::::::::::>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>>>::::::::::::::::", ">>>:::::,,,>>>>>:::::::::::::::::::::::,:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::,,,::::::::::::::::::::::::::,:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::2222222222222222222222222222222222222222222222>>42,.698kVkjijkkkkpqqqqqqipppiiaaaautuau*ttttttuut8******88996.X;>>>>>>>>>>>>>>>>2222222222222>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>22222222222222222222222222222333>>>>>>>>>>>>>>>>2222222222222222>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>::::::::::::::::::::::::::>>>>>>>7XXipajjpppaaaapsjpuuuijpaiiiiih86..;>:4444:>>>>>>>>>>>>>>>>>>>::::::::::::::::::::::::::::::::::::::::::::::::>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>::::::::::::::::::::::::::::::::::::::::::::::::>>>>>>>>>>>>>>>>::::::::::::::::>>>>>>>>>>>>>>>>:::>>>>>>>>>>>>>::::::::::::::::<::444>;69%&uuaaspauq**=8*====88iiiiii899966++XX.XXX.X.11698qiiaaaappsksppakkjmkmmkjjjkbsaauqquiuuuuuut8t8*&**%o66.--:::<<<;>>22::::::::::::::::>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>>>::::::::::::::::", ">>>:::>>,,,>>>>>::::::::::::::::::::::::::::::::,:::::::,::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::,,::::::::::::::::::::::::::::::::::::::::::::::::::::::::::,:::::::::::::::,::::::::::::::::::::::::222222222222222222222222222222222222222222222>>>43,;698jJnhijkppjaqqiiuqipjpaiaaauu*tuauuut**tuu****eet88896.;;5>>;;;>>,,,>>>2222222222222222>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>22222222222222222222222222222333>>>>>>>>>>>>>>>>2222222222222222>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>::::::::::::::::::::::::::>>>>>>>1X1iu8jkaipjjjjjkkjppaauq88qq8896XX;,>-:4442>>>>>>>>>>>>>>>>>>>::::::::::::::::::::::::::::::::::::::::::::::::>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>::::::::::::::::::::::::::::::::::::::::::::::::>>>>>>>>>>>>>>>>::::::::::::::::>>>>>>>>>>>>>>>>:::>>>>>>>>>>>>>::::::::::::::::<<>222>;69o%uupappauuu8**8*=%%=8iii89+XX......;<;;;<,;<,;.1168ihwqqaapkjqapjsskjkkkjjjkkspaiqqqquuuuuut8t8*%%&*&6..--:::<<<;>>22::::::::::::::::>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>>>::::::::::::::::", ">>>::>>>,,,>>>>>::::::::::::::::::::::::::::::::,,,:::::,,,::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::,,,:::::::::::::,,,::::::::::::::::::::::::222222222222222222222222222222222222>>>>2222>>>>44:;6%8iBBhipjapjiqqiaaaapjpaaapaaa*$$*uutt**tuu****e**&&991.>3>>;;;;>>,,,,>>2222222222222222>>>>>>>>>>>>>>>>>>>22222222>>>>>>>>22222222332222222222222222222333>>>>>>>>>>>>>>>>33222222>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>::::::::::::::::::::::::::>>>>>>2>;9h8=pkpipjjkkjjjjjjpiq88qi88%1;;-;::::::22222>>>>>>>>>>>>>>>>::::::::::::::::::::::::::::::::::::::::::::::::>>>::>>>>>>>>>>>>>>>>>>>>>>>>>>>::::::::::::::::::::::::::::::::::::::::::::::::>>>>>>>>>>>>>>>>::::::::::::::::>>>>>>>>>>>>>>>>:::>>>>>>>>>>>>>::::::::::::::::;;>2422;16 %tuppppauuu8*=88=%%%=9996.XX..;;<>:::---::::-,<.X.68huuquuiji*uapssssssjjjjjjjjjpiqqquuuuuutt88% o%%...-::::<<<;>>22::::::::::::::::>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>>>::::::::::::::::", ">>>::>>>,,,>>>>>::::::::::::::::::::::::::::::::33,:::::33,::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::,33:::::::::::::,33::::::::::::::::::::::::22222222222222222222222222222222222>>>>>222>>>>>44-16%8tkBiquiiaauquiaappppaaaaaaaau=##****ttuuutttte&%@%++;;222;;;;;;;,,,,>>2222222222222222>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>22222222333222222222222222222333>>>>>>>>:>>>>>>>33322222>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>::::::::::::::::::::::::::<<<>>>4>,9y88ujaapappappaaaaauqqyu88%+--;;--:3:::22222>>>>>>>>>>>>>>>>::::::::::::::::::::::::::::::::::::::::::::::::>>::::>>>>>>>>>>>>>>>>>>>>>>>>>>::::::::::::::::::::::::::::::::::::::::::::::::>>>>>>>>>>>>>>>>::::::::::::::::>>>>>>>>>>>>>>>>:::>>>>>>>>>>>>>::::::::::::::::;;>2222;16+%8uaappauu8*=*8q8*==%611..;11>,334444,,2444443,-..199aiuiutu%8uiassapqssjsssjjjjjpiqquuuuuttt88% ..--::::<<<;>>22::::::::::::::::>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>>>::::::::::::::::", ">>:::>>>,,,>>>>>::::::::::::::::::::::::::::::::33,,::::33,,::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::,,33::::::::::::,,33::::::::::::::::::::::::22222222222222222222222222222222222>>>>>222>>>>>44-66988zJpiiaauqquiaappppaiiaaiutuaa*##=**uuuuutttte&%@&+X;,>23;;;;;;;,,,,>>2222222222222222>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>22222222333222222222222222222333>>>>>>>>:>>>>>>>33322222>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>::::::::::::::::4:::::::::<<<<>>4:-1988*uippiuiquuuqquqq*888%o ;---:::-:::>2222>>>>>>>>>>>>>>>>::::::::::::::::::::::::::::::::::::::::::::::::>>::::>>>>>>>>>>>>>>>>>>>>>>>>>>::::::::::::::::::::::::::::::::::::::::::::::::>>>>>>>>>>>>>>>>::::::::::::::::>>>>>>>>>>>>>>>>:::>>>>>>>>>>>>>::::::::::::::::;;>2222;19%&tuauppauuuuu8uuq888%11..;1;->4444444::::444444,<...+tttiit8 uuuakswassjsaasjpjjjjpiiuuiut88tuu8#ooo ..<,2:::<<<;>>22::::::::::::::::>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>>>::::::::::::::::", "::::::::::::::::::::::::::::::::333,,>>>>>>>>>>>::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::22222222222222222222222222222222,,,>222222222>>>3,1+8&opBKcqiiu*uuiiaaaapiuuuuuuttttuue*$$*eeetett**8899..;.;...>>>>>>>>222222222222222222222222222222222222222222222222>>>>>>>>2222222222222222>>>>>>>>22222222>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>22>>>>>>>>>>>::::::::::::::::::::::::::::::::::::::::::::::::;;;1699yyyyiiy8977667f97771;--;;::::::::::::::::::::::::::::::::::::::::22222222>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::>>>>>>>>>>>>>>>><<--<.++ o@&*tuuyphh996767777766::::::::::::::::::::::::::::::::68hy9++%yytuppawaappauuuspppppaqyiiuuuwu*8 991;::::::::::::::::::::::::::::::::::::::::::::::::<<<:::::::----<<:42,:-----<<::::", "::::::::::::::::::::::::::::::::33,,,>>>>>>>>>>>::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::22222222222222222222222222222222,,,>22222222>>>>,11+8&#hJKcihiuuuiiiaaaapiuuut**ttttuuee$*uu**eetttty966.;;;---->>>>>>>>222222222222222222222222222222222222222222222222>>>>>>>>2222222222222222>>>>>>>>22222222>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>::::::::::::::::::::::::::::::::::::::::::::::::>;;;1699hiyy896+1;;;161;1,;;;;;;::::::::::::::::::::::::::::::::::::::::::::::::>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::>>>>>>>>>>>>>>>>::---;..++++&*tuiiy96..;;;;11;..::::::::::::::::::::::::::::::::6999XX+9988uapaappppauuaaappjspayyiuuuuu*u%097--::::::::::::::::::::::::::::::::::::::::::::::::<<<:::::::<<<<-.:::::--<-<<<::::", "::::::::::::::::::::::::::::::::3,,,>>>>>>>>>>>>::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::22222222222222222222222222222222,,,>22222222>>>>;11+9&%kIBhhiiauuiiiiiiiaiuuu8**8888tte**uautut=&&99996.;<<;<--->>>>>>>>222222222222222222222222222222222222222222222222222222222222222222222222>>>>>>>>22222222>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>::::::::::::::::::::::::::::::::::::::::::::::::2>;;;11+996+.XXX;;;;;;;---;;;;;;::::::::::::::::::::::::::::::::::::::::::::::::>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::>>>>>>>>>>>>>>>>:::--;;.1.X++%98996...;----;;;..::::::::::::::::::::::::::::::::699+XX6y+&8tuapppaaaauuupppjjjaiyyuuuuuuui8+6;X-::::::::::::::::::::::::::::::::::::::::::::::::<<<:::::::<,,<<.::::::<<<<::::::", "::::::::::::::::::::::::::::::::,,,>>>>>>>>>>>>>::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::22222222222222222222222222222222,,,>2222222>>>>,;1.+8%tBIxihiuuauiiiiuuuuuuuu8*=&&&888**ttttuha%++.1111;>>>>>:::22222222222222222222222222222222222222222222222222222222222222222222222222222222>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>2>>>>>>2>>>>>>>>::::::::::::::::::::::::::::::::::::::::::::::::42>>-...1..X.;;1;<<;;;;;-;;>,>;-::::::::::::::::::::::::::::::::::::::::::::::::>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::>>>>>>>>>>>>>>>>::::--;;1..X.+66....;,>:2>>>>>;;::::::::::::::::::::::::::::::::.661..69.+98uapapaaappppppjjjjpiiyuuuu**ii8+1.-<::::::::::::::::::::::::::::::::::::::::::::::::<<<::::::--,,7<;<<-::,,:::::::::", "::::::::::::::::,:::::::::::::::,,>>>>>>>>>>>>>>::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::22222222222222222222222222222222,,,>2222222>>>,,;1199%hIIcihpuuuiiiiiuuuuu8uu8*=&&*8888**&&*thh*..X.;;,>2222224422222222222222222222222222222222222222222222222222222222>>>>>>>>2222222222222222>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>2>>>>>>2>>>>>>>>::::::::::::::::::::::::::::::::::::::::::::::::444:>--.1<;;>,22-;;;;-;>>>>>>>>>::::::::::::::::::::::::::::::::::::::::::::::::>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::>>>>>>>>>>>>>>>>44::::--;;;;.;11..;<>>>>242>>>>>::::::::::::::::::::::::::::::::...;<666.+98uaauauuuaaaaiiaappppittt*=##u89+.;;,::::::::::::::::::::::::::::::::::::::::::::::::<<:::::::--<,776<<--:324::::::<<", ":::::::,::::::::,,,:::::::::::::>>>>>>>>>>>>>>>>::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::22222222>>>>>>>>2222222222222222,,,>222222>>>>,,11+9%%kTYkhjhauaiaaiiuuuuuuuut**&&&&&&&&%&**&88%;;;>,2224444444422222222222222222222222222222222222222222222222222222222>>>>>>>>2222222222222222>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>2>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>::::::::::::::::::::::::::::::::::::::::::::::::44444::----:>255--->;--,>>::>>>>::::::::::::::::::::::::::::::::22222222::::::::>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::>>>>>>>>>>>>>>>>44:::>>>>>>>>>;;;;>>:5434442>>>>::::::::::::::::::::::::::::::::<;-.<7666++98iiuu***uuiiuiuuuiiiytt*&Oo#8%+X.;<,::::::::::::::::::::::::::::::::::::::::::::::::<<::::::::--<<771<.-:32444:::<<-", "::::::,,::::::::33,:::::::::::::>>>>>>>>>>>>>>>>::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::22222222>>>>>>>>2222222222222222,,,>222222>>>>,,1+69+8JIIkjhhpiaiaaiuq88uuuuuu8***&%%%%%&&8*%%% 222332224444444422222222222222222222222222222222222222222222222222222222>>>>>>>>2222222222222222>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>22>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>::::::::::::::::::::::::::::::::::::::::::::::::4444::::::223334>--,,>>>>>>>>>>2::::::::::::::::::::::::::::::::22222222::::::::>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::>>>>>>>>>>>>>>>>::::::>>>2222>55>>::522344222>>>::::::::::::::::::::::::::::::::,,<-<771<..+9yytauuuiaapaiuut8ttte&&O #89+X..;<;::::::::::::::::::::::::::::::::::::::::::::::::<::::::::::---,76..-<324442>>;;;", ":::::,,,::::::::33,,::::::::::::>>>>>>>>>>>>>>>>::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::22222222>>>>>>>>2222222222222222,,>>22222>>>>;,,X+99+hYIJkjiajipiiaiq888u8uuiuuu8**&$#$&%o%*99% 22>:>>222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222>>>>>>>>>>>>>>>>>>>>>>>>>>>>>222>>>>>>>>>>>>>>>>>>>22>>>>>>>>>>>::::::::::::::::::::::::::::::::::::::::::::::::44::::::,::44444,-->,::>>22222>:::::::::::::::::::::::::::::::::2222222222222222>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::>>>>>>>>>>>>>>>>-:::::>222222222,,>222:55>>>><;-::::::::::::::::::::::::::::::::-:,:-<<<-...+9yyutttuuuuuuuuuuuu*&#O &i9+.1;;,-:::::::::::::::::::::::::::::::::::::::::::::::::::::::::,,:--<7+...<,>:442><;;;", "::::::::::::::::::::,33,::::::::3333,>>>>>>>>>>>::::::::::::::::::::::::::::,33,::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::,,33::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::22222222222222222222222233333333>>>>232222>>;,,<+%+98zJKxjaaaiiauiaiu8888uuut8tuuut***&&t*&&99++222>>>>>>>>>>>>>22222222222222222222222222222222222222222222222222222222>>>222222222233333322222>>>>>>>>22>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::444---:>>>>>>>22222::::::::::::::::::::::::::::::::2222222233222:::>>>>>>>>>>>>>>>>>>>>>>>>::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::>>>>>>>>>>>>>>>><<<<<:<>>>>22222<>>>>>>>>>><;;;;::::::::::::::::::::::::::::::::::::::---....698****tttt**eee**&@ o +9961.;-<,::::::::::::::::::::::::::::::::::::::::::::::::::::::::::,:---<+++.;<>:22>>,;-.", "::::::::::::::::::::,33,::::::::333,>>>>>>>>>>>>::::::::::::::::::::::::::::,33,:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::,33::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::22222222222222222222222233333333>>>>23332>>>;<<>>>;;>>;>>,,,22222222222222222222222222222222222222222222222222222222>>>222222222233333322222>>>>>>>>22>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>::::::::::::::::::::::::::::::::::::::::::::::::::<<<<<<--::::::--::>>>>>>>22222::::::::::::::::::::::::::::::::222222223322::::>>>>>>>>>>>>>>>>>>>>>>>>::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::>>>>>>>>>>>>>>>>-----<<;<>>>>>>2;;<<<<<<<;;;;;;;:::::::::::::::::::::::::::::::::::::::---...699&&&&&&&&t*&&&&$$ X661..-;<>::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::<<<<++66..;;>>,,,,;;", "::::::::::::::::::::,33,::::::::333,>>>>>>>>>>>>::::::::::::::::::::::::::::,33,:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::,,,::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::22222222222222222222222233333333>>>222332>>;;<<1Oo+%9Yxipapppiuuquuu8888888tt8tuuu****tt&&9996+.>>>><;;;;;;;;,,>22222222222222222222222222222222222222222222222222222222>>2222222222233333322222>>>>>>>>22>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>::::::::::::::::::::::::::::::::::::::::::::::::<<<<<<<<----::>>-:::::::::::::::::::::::::::::::::::::::::::::::222222222222::::>>>>>>>>>>>>>>>>>>>>>>>>::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::>>>>>>>>>>>>>>>>------<<<<<<>>>><<<<<<<<<<------::::::::::::::::::::::::::::::::::::::::---;.169&&&&&&&&&&&**$O X ++XXX...-;<<;::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::,,<< +961.11;,,,,;;,", "::::::::::::::::::::,33,::::::::3,,>>>>>>>>>>>>>::::::::::::::::::::::::::::,33,:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::,::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::,,::::::::::::::22222222222222222222222222222222>>>22222>>>;<<11Oo+ 9Hzhiapspaiauuuu8888888tuuuuut*****8889966..>>><<;;;;;;;;>>>22222222222222222222222222222222222222222222222222222222222222222222233333322222>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>::::::::::::::::::::::::::::::::::::::::::::::::<<<<<<<<---;;;;;---:::::::::::::::::::::::::::::::::::::::::::::22222222222:::::>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::>>>>>>>>>>>>>>>>-----<<<<<<<<:::<<<<<<<<<<<-----::::::::::::::::::::::::::::::::::::::::::,;--17+%&999yy99888&O +666..X;--;<,;-:::::::::::::::::::::::::::::::::::22:::::::::::::::::::2:::,,<-.+996666.111;-->", "::::::::::::::::::::,33,::::::::,>>>>>>>>>>>>>>>:::::::,::::::::,:::::::::::,33,::::::::,:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::,,,:::::::::::::22222222222222222222222222222222>>>22222>>>;<<11O$%%hcx8jaapsjpiuuuuq88*8**8uuuutt888888y99961;;22:><;;;;;;;>>>>22222222222222222222222222222222222222222222222222222222222222222222233333322222>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>::::::::::::::::::::::::::::::::::::::::::::::::<<<<<::::;;;;;;;--::::::::::::::::::::::::::::::::::::::::::::::222222222:::::::>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::>>>>>>>>>>>>>>>><<<<<<<<<<<<<<<<::<<<<<<<<<<<:::::::::::::::::::::::::::::::::::<<:::::>:>,;--<,++669999y9966999699611;-<;--;<<;:::::::::::::::::::::::::::::::::::22:::::::::::::::::::32::,,<-++66+++X+661;-:>", "::::::::::::::::::::,33,::::::::>>>>>>>>>>>>>>>>:::::,,,::::::::,,,:::::::::,33,::::::::,,,:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::33,:::::::::::::2222222222222222222222222222222222>22222>>;;<<11$$%%lcHijpaappaiqquuuq88*==*tuuuutttyy899961<;:>442:>;;;;;;>>22222222222222222222222222222222222222222222222222222222222222222>>2222233333322222>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>2:::::::::::::::::::::::::::::::::::::::::::::::::::::::>>>>>>;;;<<<<:::,::::::::::::::::::::::::::::::::::::::::22222222::::::::>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::>>>>>>>>>>>>>>>>>>:::::::<<<<<<<::::::::::::::::::::::::::::::::::::::::::::::::<<:::>22>>>>---;..<1666666+.66996661;;;::----<,<:::::::::::::::::::::::::::::::::::22:::::::::::::::::::32:::<<-++++++ +661;>22", "::::::::::::::::::::,33,::::::::>>>>>>>>>>>>>>>>:::::,33::::::::33,:::::::::,33,::::::::33,:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::33,:::::::::::::222222222222222222222222222222222232222>>>;;;111$$&%cxKxuaspauiiuuqqq888*==*tutti888996611;;-:54444:>:;;;>>222222222222222222222222222222222222222222222222222222222222222222>>>2222233333322222>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>22:::::::::::::::::::::::::::::::::::::::::::::::::::::222>>>>>>>;<<<<<<,,::::::::::::::::::::::::::::::::::::::::22222222::::::::>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::>>>>>>>>>>>>>>>>222:::::::<<<<<<::::::::::::4444::::::::::::::::::::::::::::::::<<<:>>2222>>>>:-----<<<<..;<<<166...;;:2::-::,,;:::::::::::::::::::::::::::::::::::22:::::::::::::::::::42::-<,,.+++oO +++1;>23", "::::::::::::::::::::,33,::::::::>>>>>>>>>>>>>>>>::::,,33::::::::33,,::::::::,33,::::::::33,,::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::33,:::::::::::::222222222222222222222222222222222232222>>;;;;111O$t%8cxjiappppaiiuq888888==*tut8889%0XXX.;;>2344444:>>:>>>>222222222222222222222222222222222222222222222222222222222222222222>>>2222233333322222>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>222::::::::::::::::::::::::::::::::::::::::::::::::444422222>>>>>>><<<<<<<,::::::::::::::::::::::::::::::::::::::::22222222::::::::>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::>>>>>>>>>>>>>>>>444444:::::<<<<<::::::::::444444::::::::::::::::::::::::::::::::<<<<,>222>:>33>-,::::---<<<-..<61..;,-:2:::23,;-:::::::::::::::::::::::::::::::::::22:::::::::::::::::::::::-<37X+++oOO@@oXX;>22", ">>>>>>>>:>>>>,33>>>>>>>>>>>>>>>>::::::::::::::::>>>>>>>>>>>>>>>>::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::,,33::::::::::::,33,33333333::::::::::::::::::::::::::::::::::::::::>>>>>>>>,,,,,,,,::::::::::::::::222222222222222222222>>>22222333,,,>22223>;;<...+9o9iiiquiiaaaappiqqu888****8tttf7>>2>>3222>>>>>22>>>>>2222222222222222222222222222222222222222222222222222222223333322222222222222222222222233333333222>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,:::::::::::::::::::::::::::::::,>>>>>>:>>>>>>>>::::::::::::::::::::::::::::::::::::::::::::::::::::::::2222222222222222>>>>>::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::,,,::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::442222>>;;;;-<,,,::-:>>>>>;;::::::::::::::::::::::::::::::::;;;<,>>>2222>>>><<<;;;;;;;--:337oo+&+699..;>>>22", ">>>>>>>>>>>>,,33>>>>>>>>>>>>>>>>::::::::::::::::>>>>>>>>>>>>>>>>:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::,33::::::::::::,33,33333333::::::::::::::::::::::::::::::::::::::::>>>>>>>>33333333::::::::::::::::222222222222222222222>>>22222333,,,>22222>;<1...%+ yc88qiiiaaapppiiq88888*&&88iif7>>2>>322>>>>>>22>>>>>2222222222222222222222222222222222222222222222222222222223333322222222222222222222222233333333222>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,:::::::::::::::::::::::::::::::>>>>>>>>>>>>>>>>::::::::::::::::::::::::::::::::::::::::::::::::::::::::2222222222222222>>>>>:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::,,::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::442233>>;;;;--<<,,>::>>>>>;;::::::::::::::::::::::::::::::::;;;<,>>>2222>>>><<:<;;;;;;,,::--oo+99996.;;>>>22", ">>>>>>>>>>>>,,33>>>>>>>>>>>>>>>>::::::::::::::::>>>>>>>>>>>>>>>>:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::,,,::::::::::::,33,33333,,,::::::::::::::::::::::::::::::::::::::::>>>>>>>>33333333::::::::::::::::2222222222222222222222>>22222233,,,>2222>>,11..69%%ixhi8iiiaaaaaiiiiuutt889988ii73>>3>>22>>>>>>>2>>>>>22222222222222222222222222222222222222222222222222222222223333222222222222222222222222233333333222>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,:::::::::::::::::::::::::::::::>>>>>>>>>>>>>>>>::::::::::::::::::::::::::::::::::::::::::::::::::::::::2222222222222222>>>>>>:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::,:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::42233,,;;;;...;,,,:->>>>,,<::::::::::::::::::::::::::::::::;;;<,>>>222>>>>>::::;;;;;;;;;<<< +99991.;;>>>22", ">>>>>>>>>>>,,333>>>>>>>>>>>>>>>>::::::::::::::::>>>>>>>>>>>>>>>>:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::,::::::::::::,33,333,,,,:::::::::::::::::::::::::::::::::::::::::>>>>>>>>,,,,,,,,::::::::::::::::22222222222222222222222222222222,,,>2222>>,,;.16998hkji8uuiiaiaaqiiiiii8888yy88972>>2>>>>>>>>>>>>>>>>>2222222222222222222222222222222222222222222222222222222222222222222222222222222222222223333333322222222222>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,::::::::::::::::::::::::::::::::>>>>>>,>>>>>>>>::::::::::::::::::::::::::::::::::::::::::::::::::::::::2222222222222222>>>>>>>>::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::2>3,,<<;;;....11<--:>>::::::::::::::::::::::::::::::::::::;;;<>>>>222>>>>>:::::;;;;;;11116XX+9666.;;->>>22", ">>>>>>>>>,,,,333>>>>>>>,>>>>>>>>::::::::::::::::>>>>>>>>>>>>>>>>:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::,::::::::::::::::::::::::::::::::::::::::::::,33,333,,:::,:::::::::::::::::::::::,:::::::::::::::>>>>>>>>>>>>>>>>::::::::::::::::22222222222222222222222222222222,,,>22222,,<..669%9xhi=uiuiiiiiiuiiiii8 %99999663>>>2>>>>>>>>>>>>>>>222222222222222222222222222222222222222222222222222222222222222222222222222222222222222223333333322222222222>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,::::::::::::::::::::::::::::::::>>>>>>,>>>>>>>>::::::::::::::::::::::::::::::::::::::::::::::::::::::::2222222222222222>>>>>>>>::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::>>>>;<<11.+..111;---::::::::::::::::::::::::::::::::::::::;;;,>>>>22>>>>>>44:::;;;..1661..++69611.;;;>>>22", ">>>>>>>>,,,33333>>>>>,,,>>>>>>>>::::::::::::::::>>>>>>>>>>>>>>>>:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::,,,::::::::::::::::::::::::::::::::::::::::::::,33,33,,::::,,,:::::::::::::::::::::,,,:::::::::::::>>>>>>>>>>>>>>>>::::::::::::::::>>>>>>>>>>>>>>>>>>22222233222222,,,>22223,;;..66+ %hhjquiiiiiiiiquiiah8 XX111111>>>>>>>>>>>>>>>>:>>2222222222222222222222222222222222222222222222222222222222222222222222222222222222222222223333333322222222222>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,:::::::::::::::::::::::::::::::>>>>>>>>>>>>>>>>::::::::::::::::::::::::::::::::::::::::::::::::::::::::2222222222222222::>>>>>>::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::>>-;;;;...++++61..--::::::::::::::::::::::::::::::::::::::;;;,>>>>22>>>>>>444::;;..XX...+666771;<;;;>>>>22", ">>>>>>>>33333333>>>>>,33>>>>>>>>::::::::::::::::>>>>>>>>>>>>>>>>:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::,33::::::::::::::::::::::::::::::::::::::::::::,33,33,,::::33,:::::::::::::::::::::33,:::::::::::::>>>>>>>>>>>>>>>>::::::::::::::::>>>>>>>>>>>>>>>>>>>2222233322222,,,>22223>;<<;16 +yihkjqaaaaiiuuwuaiphi+XX....;;>22>>>>>>>>>>>>>:>>2222222222222222222222222222222222222222222222222222222222222>>>222222222222222222222222223333333322222222222>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,:::::::::::::::::::::::::::::::>>>>>>>>>>>>>>>>::::::::::::::::::::::::::::::::::::::::::::::::::::::::2222222222222222:::>>>>>::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::>><;;;..XXo+%6+...--::::4:::::::::::::::::::::::::::::::::;;<,>>>>2>>>>><<444::;...XX+++691;1<--;-;>>>>>22", ">>>>>>>>33333333>>>>,,33>>>>>>>>::::::::::::::::>>>>>>>>>>>>>>>>::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::,,33::::::::::::::::::::::::::::::::::::::::::::,33,33,:::::33,,::::::::::::::::::::33,,::::::::::::>>>>>>>>>>>>>>>>::::::::::::::::>>>>>>>>>>>>>>>>>>>2222233322222,,,>22222>;<11.1XXlhh*iapaaaaiuuwaaiih8+X11111;;>33>>>22>>>>>>>>::>2222222222222222222222222222222222222222222222222222222222222>>>222222222222222222222222223333333322222222222>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,:::::::::::::::::::::::::::::::,>>>>>>:>>>>>>>>::::::::::::::::::::::::::::::::::::::::::::::::::::::::2222222222222222:::>>>>>::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::>>,<;;.XXX +&9+...--:::44:::::::::::::::::::::::::::::::::;;<>>>>>2>>>>><<444:<;.XX+9yy9++,----<,-::>>>222", ",,,,,,,,3333>>>>,,,>>>>>,,,,,,,,::::::::::::::::>>>>>>>>>>>>>>>>::::::::::::::::::::::::33,,::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::,,33::::::::::::::::::::::::::::::::::::::::::::::::::::::::>>>>,,33,>>>>>>:::::::::::::::::2222233322222222>>>2222222222222,,,>22223,,;;..1XXllhiiiappppaaauauuihi96fg7;;>;>>>>>>>>>>>>>>>>2222222222222222333333332222222222222222222222222222222222222222222222222222222222222222222222222222222222222222>>>>>>>2>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>::::::::::::::::::::::::::::::::>>>>>>>>>>>>>>>>::::::::::::::::::::::::::::::::::::::::::::::::222::222::::::::>>>>>:::::>>>222::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::>><;;...XX +99+...;-:::444::::::::::::::::::::::::::::::::<<>>>>>2222>,,<;433:<.X+X6yy9+XX,,,,,,,,>>>>2222", ",,,,,,,,>,3,>>>,,,,>>>>>>>>>>>>>::::::::::::::::>>>>>>>>>>>>>>>>::::::::::::::::::::::::33,::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::,33::::::::::::::::::::::::::::::::::::::::::::::::::::::::>>>>>,33>>>>>>>>::::::::::::::::2222233322222222>>>2222222222222,,,>22223,,<;...+9cciihpiaappaaiaaaiiii96ff7,332>>>>>>>>>>>>>>>>2222222222222222333333332222222222222222222222222222222222222222222222222222222222222222222222222222222222222222>>>>>>>2>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>::::::::::::::::::::::::::::::::>>>>>>>>>>>>>>>>::::::::::::::::::::::::::::::::::::::::::::::::222::222::::::::>>>>>:::::>>>222::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::>><;;;...X +66+..;;-:::444::::::::::::::::::::::::::::::::<<>>>>>2--:,,,;-:2,,111+99996+XX,,,,,,,,>2222222", ",,,,,,,,>>,>>>,3>>>>>>>>>>>>>>>>::::::::::::::::>>>>>>>>>>>>>>>>::::::::::::::::::::::::,,,::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::,,,::::::::::::::::::::::::::::::::::::::::::::::::::::::::>>>>>,,,>>>>>>>>::::::::::::::::2222223322222222>>22222222222222,,,>22222,,<;...Xhlxi8qqiiaapaaapspaii891773>222>>>>>>>>>>>>>>>>2222222222222222333333332222222222222222222222222222222222222222222222222222222222222222222222222222222222222222>>>>>>>2>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>::::::::::::::::::::::::::::::::>>>>>>>>>>>>>>>>::::::::::::::::::::::::::::::::::::::::::::::::222::222::::::::>>>>>>::::>>>222::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::>>>>;;;...XX++...-;:::::44::::::::::::::::::::::::::::::::>>>>>>22733>----,<.X.9hc996++1..,,,,,22222222222", ">>>>>>>>>,3,>>,3>>>>>>>>>>>>>>>>::::::::::::::::>>>>>>>>>>>>>>>>::::::::::::::::::::::::,::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::,::::::::::::::::::::::::::::::::::::::::::::::::::::::::>>>>>>>,:>>>>>>,::::::::::::::::22222222222222222222222222222222,,,>22222,,<;...9xlli8ijaaaappppsspaii991;;>>>>3>>>>>>>>>>>>>>>>2222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222233222222>>>>>>>2>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>::::::::::::::::::::::::::::::::>>>>>>>>>>>>>>>>::::::::::::::::::::::::::::::::::::::::::::::::222::222::::::::>>>>>>>>>>>>>222::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::>>>>>;;;;;XX..;;;->:::::::::::::::::::::::::::::::::::::::>>>>>>22::::<<,1>>>>>>>3333>>>,>>>>>>>>>>>>>>>>::::::::::::::::>>>>>>>>>>>>>>>>::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::>>>>>>>>:>>>>>>,::::::::::::::::22222222222222222222222222222222,,,>22222,,<;...6cczxhiiaaaapjjjsaaii89.1;>32>27>>>>>>>>>>>>>>>>2222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222233322222>>>>>>>2>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>::::::::::::::::::::::::::::::::>>>>>>>>>>>>>>>>::::::::::::::::::::::::::::::::::::::::::::::::222::222::::::::>>>>>>>>>>>>>>22::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::<<::::>>2>>>>;;;...;;;<>>>22::::::::::::::::::::::::::::::::::::>>>>>222-->3,;-.X1gllcy+99996--:::::::::::::::::", ">>>>>>>>3333>>>>>>>>>>>>>>>>>>>>::::::::::::::::>>>>>>>>>>>>>>>>::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::>>>>>>>>>>>>>>>>::::::::::::::::3322222222222222222222>>>>>>>>>>,,,>22222,,<;...9cxxciujaaaappjjsaaii86X1,,3>:>3>>>>>>>>>>>>>>>>22222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222333222>>>>>>>>>2>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>::::::::::::::::::::::::::::::::>>>>>>>>>>>>>>>>::::::::::::::::::::::::::::::::::::::::::::::::222::222::::::::::>>>>>>>>>>>>>>::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::<<<:::>22222>>>>;;;;:>2222222>>>::::::::::::::::::::::::::::::::>>>>>22233,--;7799hh9%8y961<,344::::::::::::::::", ">>>>>>>>>>,>>::>:::>>>>>>>>>>>>>::::::::::::::::>>>>>>>>>>>>>>>>::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::>>>>>>>>>>>>>>>>::::::::::::::::333222222222222222222>>>>>>>>>>>,,,>22223,,<;...6cKHxhiaaaaaapsjspaii86.;;,>>>>:>>>>>>>>>>>>>>>>22222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222333222>>>>>>>>>2>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>::::::::::::::::::::::::::::::::>>>>>>>>>>>>>>>>::::::::::::::::::::::::::::::::::::::::::::::::222::222:::::::::::>>>>>>>>>>>>>::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::<<<:::>222222>>>-:::::2322222>>>::::::::::::::::::::::::::::::::>>>>2222>---;7glh98iyiyoXXX.-444::::::::::::::::", ">>>>>>>>-:>::::>:::>>>>>>>>>>>>>::::::::::::::::>>>>>>>>>>>>>>>>::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::>>>>>>>>,>>>>>>:::::::::::::::::333222222222222222222>>>>>>>>>>>,,,>22223,,;;..19hHxzzjiaaaaaapjsauqq91;;1,>,33->>>>>>>>>>>>>>>>22222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222333222>>>>>>>>>2>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>::::::::::::::::::::::::::::::::>>>>>>>>>>>>>>>>::::::::::::::::::::::::::::::::::::::::::::::::222::222:::::::::::>>>>>>>>>>>>>::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::<<<:::>2222222>>-:2:::434222>>>>::::::::::::::::::::::::::::::::>>>>2222:>337fghh8hhyy8 X.11:444<:::::::::::::::", ">>>::>>>>>>>>>>>::::::::::::::::::::::::::::::::::::,,33::::::::::::::::::::::::33,,::::::::::::::::::::::::::::::::::::::::::::::::,,33::::,,33333,::::::::,33,::::::::::::::::::::::::33,,::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::>>>>>>>>>>>>>>>>2222222222222>>>;;>>>22>1X16XX+9xcchh8iiaiiappppgg7734434422,,;;22222>>>>>>22222222222222222222222222222222222222222222222222222222222222222222233333333222222222222222222222222222222222222222222222>>>22222333>>>>>>>>>>>>>>>>>>>>>>>>22222222::::::::::::::::>>>>>>>>>>>>>>>>::::::::::::::::::::::::::::::::>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>:::>,,>>>>3>>>>>:::>>>>>>>>::::::::::::::::33::::::::::::::::::::::::::::::444444444444444422>>>>>>222>>>>>::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::>>>>>>>>>>>>>>>>::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::22222>;..669yhkpuii861;;<::<<:::::::::::::::::", ">>>::>>>>>>>>>>>:::::::::::::::::::::::::::::::::::::,33::::::::::::::::::::::::33,::::::::::::::::::::::::::::::::::::::::::::::::::,33:::::,3333,:::::::::,33,::::::::::::::::::::::::33,:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::>>>>>>>>>>>>>>>>2222222222222>>>;;>>>22>7;.XX+ 98hii8qiuaaaaaaap97,:::::4422,,,;22222>>>>>>22222222222222222222222222222222222222222222222222222222222222222222233333333222222222222222222222222222222222222222222222>>>22222233>>>>>>>>>>>>>>>>>>>>>>>>22222222::::::::::::::::>>>>>>>>>>>>>>>>::::::::::::::::::::::::::::::::>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>::::>>>>:>>>>>>>:::>>>>>>>>::::::::::::::::::::::::::::::::::::::::::::::::444444444444444422>>>>>>222>>>>>::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::>>>>>>>>>>>>>>>>:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::2222>>;69999ykjppi91.;;>::<<<::::::::::::::::", ">>>>>>>>>>>>>>>>:::::::::::::::::::::::::::::::::::::,,,::::::::::::::::::::::::,,,::::::::::::::::::::::::::::::::::::::::::::::::::,,,:::::,,,3,,:::::::::,33,::::::::::::::::::::::::,,,:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::>>>>>>>>>>>>>>>>22222222222222>>;;>>>>>>>1..66XyKzczci8aapppauuu1..<,,:44422>,,,22222>>>>>>22222222222222222222222222222222222222222222222222222222222222222222233333333222222222222222222222222222222222222222222222>>>22222223>>>>>>>>>>>>>>>>>>>>>>>>22222222::::::::::::::::>>>>>>>>>>>>>>>>::::::::::::::::::::::::::::::::>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>::-:>>>:::>>>>>>::>>>>>>>>::::::::::::::::::::::::::::::::::::::::::::::::444444444444444422>>>>>>222>>>>>::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::>>>>>>>>>>>>>>>>:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::2222>>;699699=&8891.;;>>:::<<::::::::::::::::", ">>>>>>>>>>>>>>>>:::::::::::::::::::::::::::::::::::::::,::::::::::::::::::::::::,::::::::::::::::::::::::::::::::::::::::::::::::::::::,:::::::,,:::::::::::,33,::::::::::::::::::::::::,:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::>>>>>>>>>>>>>>>>2222222222222222;>>>>>>>;;.66X9xKKHliiuiaappauuq1XX.1,,32222>,,,22222>>>>>>22222222222222222222222222222222222222222222222222222222222222222222233333333222222223322222222222222222222222222222222222>>>>>222222>>>>>>>>>>>>>>>>2222222222222222::::::::::::::::>>>>>>>>>>>>>>>>::::::::::::::::::::::::::::::::>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>->,3>>::>>>>>>>>>>>>>>>>::::::::::::::::::,33,::::::::::::::::::::::::::444444444444444422>>>>>2222>>>>>::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::>>>>>>>>>>>>>>>>:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::>222>>;;11+69&%%+.X.;>>>::::<::::::::::::::::", ">>>>>>>>>>>>>>>>::::::::::::::::::::::::,::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::,::::,33,:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::,>>>>>>>>>>>>>>>>2222222222222222>>>>>>>>11X.XXLWzzHxhiiaaaappaaq6+XX.;;>,222,>,,22222>>>>>>22222222222222222222222222222222222222222222222222222222222222222222233333333222222223332222222222222222222222222222222222>>>>>>22222>>>>>>>>>>>>>>>>2222222222222222::::::::::::::::>>>>>>>>>>>>>>>>::::::::::::::::::::::::::::::::>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>:>33,>>>>>>>>>>>>>>>>>>>::::::::::::::::::,33,::::::::::::::::::::::::::44444444444444442>>>>>22222>>>>>::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::>>>>>>>>>>>>>>>>::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::>>>22>>--...666++...;3>>::::::::::::::::::::::", ">>>>>>>>>>>>>>>>::::::::::::::::::::::::,,,::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::,,3::::,33,:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::,,,>>>>>>>>>>>>>>>233333333>>222222>>>>>>>>;1.X.y[IFcLR[Bpapaapssaai896611,,22222>>22222>>>>>>2222222222222222222222222222222222222222222222222222222222222222222222222222222222222333222>>33333333222222223333333322222>>>>>>>2222>>>>>>>>>>>>>>>>2222222222222222::::::::::::::::,,>>>>::>>>>>>>>::::::::::::::::::::::::::::::::>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>::>>>>>>>>33,>>>::>>>>>>>>>>>>>>::::::::::::::::::::::::::::::::::::::::::::::::2222222222222222>>>>>>>,>>>>>>>>::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::>>>>>>>>>>>>>>>>::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::;:>>>>>>>>>;;111XXX.-;,3>:::::::::::::::::::::::", ",>>>>>>,>>>>>>>>::::::::::::::::::::::::33,::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::,33::::,33,:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::,33>>>>>>>>>>>>>>2233333333>>>22222>>>>>>>>-1..6xRKFlc8ikjjsssssspphiii996,,,22222222222>>>>>>2222222222222222222222222222222222222222222222222222222222222222222222222222222222222333222>>33333333222222223333333322222>>>>>>>>222>>>>>>>>>>>>>>>>2222222222222222::::::::::::::::,,>>>>::>>>>>>>>::::::::::::::::::::::::::::::::>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>:::>>>>>>>,>>>>>:::>>>>>>>>>>>>>::::::::::::::::::::::::::::::::::::::::::::::::2222222222222222>>>>>>>,>>>>>>>>::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::>>>>>>>>>>>>>>>>::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::;::>>>>>222,,<;.,,,,,::-44::::::::::::::::::::::", ",>>>>>>,>>>>>>>>::::::::::::::::::::::::33,,::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::,333::::,33,::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::,,33>>>>>>>>>>>>>22233333333>>>22222>>>>>>>;11X66xNWzW)Ikkpksssspapphphhv91-,,22222222222>>>>>>2222222222222222222222222222222222222222222222222222222222222222222222222222222222222333222>>33333333222222223333333322222>>>>>>>>222>>>>>>>>>>>>>>>>2222222222222222::::::::::::::::,,>>>>::>>>>>>>>::::::::::::::::::::::::::::::::>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>:::>>>>>>>>>::>>:::>>>>>>>>>>>>>::::::::::::::::::::::33::::::::::::::::::::::::2222222222222222>>>>>>,,>>>>>>>>::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::>>>>>>>>>>>>>>>>::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::;::>>>>422>:->>;----::43444::::>::::::::::::::::", ">>>>>>>>>>>>>>>>::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::,,33::::::::::::::::::::::::::::::::::::::::::::::::33,,::::::::,33,::::,33,::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::>>>>>222>>>>>>>>2222222222222222>>>>,,,;1.16yhyzWRTIzkjsjspsssjjhhiy961,,,222222222222222222222222222222222223332222222222222222222223333332222233333333233322332222222222222222>>>222222222222222222222222222222222222222222222>>>>>>>>>>>>>>>>>>>2222222222222::::::::::::::::>>>>>>>>>>>>>>>>3,,:::::::::::::::::::::::::::::>>>>>>>>>>>>>>>>>>>>>>>>>>>>>:::>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::-3-3--X7::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::>>>>>>>>>>>>>>>>::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::-::>>>>5222>>>>>::::4444444::>>>::::::::::::::::", ">>>>>>>>>>>>>>>>:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::,33::::::::::::::::::::::::::::::::::::::::::::::::33,:::::::::,33,::::,33,::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::>>>>>222>>>>>>>>22222222222222222>>>,,,;;176yxHWKLHxkjsssasssppphi891..;,2222222222222222222222222222222222223332222222222222222222223333322222222222222233322332222222222222222>>>222222222222222222222222222222222222222222222>>>>>>>>>>>>>>>>>>22222222222222::::::::::::::::>>>>>>>>>>>>>>>>,,::::::::::::::::::::::::::::::>>>>>>>>>>>>>>>>>>>>>>>>>>>>>:::>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::3:,3-37>>>>>>>>>::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::>>>>>>>>>>>>>>>>:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::>>>>>24::::::4444444444:::>>>::::::::::::::::", ">>>>>>>>>>>>>>>>:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::,,,::::::::::::::::::::::::::::::::::::::::::::::::,,,:::::::::,33,::::,33,::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::>>>>>222>>>>>>>>2222222233333333222>,,,;169ghK[RFNBhiwsksasjsppii9+...;,2222222222222222222222222222222222222333222222222222222222222233322222222222222223332223>>>>>>>>22222222>>>222222222222222222222222222222222222222222222>>>>>>>>>>>>>>>>>2222222>>>>>>>>::::::::::::::::>>>>>>>>>>>>>>>>::::::::::::::::::::::::::::::::>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>::>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::--,77--->>>>>>>>::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::>>>>>>>>>>>>>>>>::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::>>>>>>>>24::::::44444444:::::>>>::::::::::::::::", ">>>>>>>>>>>>>>>>:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::,::::::::::::::::::::::::::::::::::::::::::::::::,:::::::::::,33,::::,33,::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::>>>>>222>>>>>>>>2222222233333333222>,,;;16gzlH'}WHxhjsjsssssaaiu61X.11,32442222222222222222222222222222222222333222222222222222222222222222222>>>>>>>>>>223322232222222222222222>>>222222222222222222222222222222222222222222222>>>>>>>>>>>>>>>>2222223322222222::::::::::::::::>>>>>>>>>>>>>>>>::::::::::::::::::::::::::::::::>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::--,gFg-7>>>>>>>>::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::>>>>>>>>>>>>>>>>::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::>>>>>>>:22::::::44444:::::::::::::::::::::::::::", ">>>>>>>>>>>>>>>>::::::::::::::::::::::::::::::::,:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::,33,::::,33,:::::::::::::::::::::::::::::::::::::::::::::::::::::::,::::::::::::::::::::::::>>>>>222>>>>>>>>2222222222222222222>,,;;.6cLcl_RJHxkapsjsaaaiii861.1,,::4442222>2222222222222222222222222222233322222222222222222222222222222>>>>>>>>>>>22332>233333333322222222>>>222222222222222222222222222222222222222222222>>>>>>>>>>>>>>>>2222233333333333::::::::::::::::>>>>>>>>>>>>>>>>::::::::::::::::::::::::::::::::>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::3--gWSgg,,,,,,,,::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::>>>>>>>>>>>>>>>>::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::>>>>>>>:,:::::::444:::::::::::::::::::::::::::::", ">>>>>>>>>>>>>>>>::::::::::::::::::::::::::::::::,,,:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::,33,::::,33,:::::::::::::::::::::::::::::::::::::::::::::::::::::,,,::::::::::::::::::::::::>>>>>222>>>>>>>>2222222222222222222>,,;;.6glcz_WINihpksssaaaiiy971;,,444444422>>222222222222222222222222222223332222222222222222332222222222>>>>>>>>>>>>>2322>2333333333>>>>>>>>>>>222222222222222222222222222222222222222222222>>>>>>>>>>>>>>>>2222333333333333::::::::::::::::>>>>>>>>>>>>>>>>::::::::::::::::::::::::::::::::>>>>>>>>>>>>>>>>>>>>>>>>::>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::,X-7ggf7<<<<<<<<::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::>>>>>>>>>>>>>>>>::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::22>>>>:,,:::::::222>>>>><<:<<<::::::::::::::::::", ">>>>>>>>>>>>>>>>::::::::::::::::::::::::::::::::33,:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::,33,::::,33,:::::::::::::::::::::::::::::::::::::::::::::::::::::,33::::::::::::::::::::::::>>>>>222>>>>>>>>2222222222222222222>,,;;166gcK}LHzkjpsssaaai889+,;-:4443444422>>22222222222222222222222222222333222222222222222233322222222>>>>>22222222>232>>2233333333>>>>>>>>>>>222222222222222222222222222222222222222222222>>>>>>>>>>>>>>>>2223333333333333::::::::::::::::>>>>>>>>>>>>>>>>::::::,,::::::::::::::::::::::::>>>>>>>>>>>>>>>>>>>>>>>>:::>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::,,77X-,-<<<<<<<<::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::>>>>>>>>>>>>>>>>::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::32>>>>,,,:::::::>>>>>>>>;;;<<<<<::::::::::::::::", ">>>>>>>>>>>>>>>>::::::::::::::::::::::::::::::::33,,::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::,33,::::,33,::::::::::::::::::::::::::::::::::::::::::::::::::::,,33::::::::::::::::::::::::>>>>>222>>>>>>>>2222222233333333222>,,;;179gcLRWJxkjkpauaaa8#o+X--234444444422,>22222222222222222222222222222333222222222222222233322222222>>>>>22222222>222>>2222222222>>>>>>>>>>>222222222222222222222222222222222222222222222>>>>>>>>>>>>>>>>2223333322222222::::::::::::::::>>>>>>>>>>>>>>>>:::::,,3::::::::::::::::::::::::>>>>>>>>>>>>>>>>>>>>>>>>:::>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::-,X<,3-7;;;;;;;;::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::>>>>>>>>>>>>>>>>::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::32>>>>,,,:<:::::>>>>>;;;;;;<<<<<::::::::::::::::", "::::::::::::::::::::::::::::::::::::::::::::,,33::::::::::::::::33,,::::::::::::,33,::::333,::::::::::::::::::::::::::::::::::::::::::::::::,,33::::,33,::::::::::::::::33,,::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::22222222222222222222222222222222,>>>>222>31gcxYRJVsjaauwwii91<,-<<<,,,,>>,,,,,<<;;1;.XX.XX..;;;;>>>>>>>>>>>>>>>>>>>>>222>>>>>>>>>>>>>>>>>>>>>>>>,,,,,,,,>>>>>,,,>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>222223332222222233322222222222222222233333333333>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>:::::::::::::::::::::::::::::22222222222::::::::>>>>>>>>>>>>>>>>::::::::::::::::>>>>>>>>>>>>>>>>::::::::::::::::>>>>>>>>>>>>>>>>-:,,::::::::::::>>>>>>>>>>>>>>>>::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::>>>>>>>>>>>>>>>>>>::>>3377>:>,>:::::::::::::::::::::::::::::::::", ":::::::::::::::::::::::::::::::::::::::::::::,33::::::::::::::::33,:::::::::::::,33,::::33,::::::::::::::::::::::::::::::::::::::::::::::::::,33::::,33,::::::::::::::::33,:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::22222222222222222222222222222222,>>>>222>Xfl9hWLuauaauupw8y891<-<<,,,>>222>,,,,,7,;;661X11..;;,,>>>>>>>>>>>>>>>>>>>>>222>>>>>>>>>>>>>>>>>>>>>>>>,,,,,,,,>>>>>,,,>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>222223332222222233322222222222222222233333333333>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>:::::::::::::::::::::::::::::22222222222::::::::>>>>>>>>>>>>>>>>::::::::::::::::>>>>>>>>>>>>>>>>::::::::::::::::>>>>>>>>>>>>>>>>::,::::,::::::::>>>>>>>>>>>>>>>>::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::>>>>>>>>>>>>>>>>>>::>>,373::>,>>::::::::::::::::::::::::::::::::", ":::::::::::::::::::::::::::::::::::::::::::::,,,::::::::::::::::,,,:::::::::::::,33,::::3,,::::::::::::::::::::::::::::::::::::::::::::::::::,,,::::,33,::::::::::::::::,,,:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::22222222222222222222222222222222,>>>>2223>ffX+xNchuikpquu*8h96<<,,,>222222222>>,3;;79g969961;;;;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,,,,,,,,>>>>>,,,>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>222223332222222233222222222222222222233333333333>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>:::::::::::::::::::::::::::::22222222222::::::::>>>>>>>>>>>>>>>>::::::::::::::::>>>>>>>>>>>>>>>>::::::::::::::::>>>>>>>>>>>>>>>>,,,::::3::::::::>>>>>>>>>>>>>>>>::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::>>>>>>>>>>>>>>>>>>>>>>,3>:-->,>>::::::::::::::::::::::::::::::::", ":::::::::::::::::::::::::::::::::::::::::::::::,::::::::::::::::,:::::::::::::::,33,::::,::::::::::::::::::::::::::::::::::::::::::::::::::::::,::::,33,::::::::::::::::,:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::22222222222222222222222222222222,>>>>222:7fg99hx89iipquai88h961<>>22222444422222-,779fggg971;;;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,,,,,,,,>>>>>,,,>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>222223332222222222222222222222222222233322222222>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>:::::::::::::::::::::::::::::222::::::::::::::::>>>>>>>>>>>>>>>>::::::::::::::::>>>>>>>>>>>>>>>>::::::::::::::::>>>>>>>>>>>>>>>>:::::::,::::::::>>>>>>>>>>>>>>>>::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::>>>>>>>>>>>>>>>>>>>>>>>,::-:>>>:::::::::::::::::::::::::::::::::", "::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::,33,:::::::::::,,::::::::::::::::::::::::::::::::::::::,::::::::::::,33,:::::::,::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::22222222222222222222222222222222,>>>>2223-7f96gllhxlhiiuq88y99612222244444444222>377117911;;;;>2>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,,,,,,,,>>>>>,,,>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>222223332222222222222222222222222222233322222222>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>:::::::::::::::::::::::::::::222::::::::::::::::>>>>>>>>>>>>>>>>::::::::::::::::>>>>>>>>>>>>>>>>::::::::::::::::>>>>>>>>>>>>>>>>::::::::::::::::>>>>>>>>>>>>>>>>::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>:::::::::::::::::::::::::::::::::", "::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::,33,:::::::::,,3,,,::::::::::::::::::::::::::::::::::,,,::::::::::::,33,:::::,,,::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::22222222222222222222222222222222,>>>>2222>-.6.6zzghh8hi888889996>22222444444442233>;;;;;...-;>>2>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,,,,,,,,>>>>>,,,>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>222>>>>>>>>22222233222222222222233322222222>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>::::::::>>>>>>>>:::::::::::::::::::::::::::::::::::::222::::::::::::::::>>>>>>>>>>>>>>>>::::::::::::::::>>>>>>>>>>>>>>>>::::::::::::::::>>>>>>>>>>>>>>>>3:::::::::::::::>>>>>>>>>>>>>>>>::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>::::::::::::::::::::::::::::::::::", "::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::,33,:::::::::,3333,::::::::::::::::::::::::::::::::::,33::::::::::::,33,:::::,33::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::22222222222222222222222222222222>>2>2222-77;f96lFzxh98 %88888iy9,,,>2222444222223>>>,1;;;;;;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,,,,,,,,>>>>>,,,>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>222>>>>>>>>22222333222222222222233322222222>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>::::::::>>>>>>>>:::::::::::::::::::::::::::::::::::::222::::::::::::::::>>>>>>>>>>>>>>>>::::::::::::::::>>>>>>>>>>>>>>>>::::::::::::::::>>>>>>>>>>>>>>>>773:::::::::::::>>>>>>>>>>>>>>>>::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::>>>>>>>>>>>>>>>>>>>>>>>:>>>>>>>>::::::::::::::::::::::::::::::::", "::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::,33,::::::::,33333,,::::::::::::::::::::::::::::::::,,33::::::::::::,33,::::,,33::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::22222222222222222222222222222222222>22223-,;;9fgxxchcx0 i88uihi*<<<,,>2222222222>233>-;;;;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,,,,,,,,>>>>>,,,>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>222>>>>>>>>22222333222222222222233322222222>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>::::::::>>>>>>>>:::::::::::::::::::::::::::::::::::::222::::::::::::::::>>>>>>>>>>>>>>>>::::::::::::::::>>>>>>>>>>>>>>>>::::::::::::::::>>>>>>>>>>>>>>>>f73:-:::::::::::>>>>>>>>>>>>>>>>::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::>>>>>>>>>>>>>>>>>>>,,>>::>>>::>,::::::::::::::::::::::::::::::::", "::::::::::::::::::::::::::::::::33,,::::::::::::::::::::333,::::,,,::::::::::::::::::::::::::::::::::,,,,,,:::::::::::::::::::::::::::::::::::::::::::::::::::,,:::::,33::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::>>>>>>>>22222222222222222222222222222222:,3;.;7fLLxlFl+ &8tuait61..;<,3>>2,,,,>333>,,>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>333,>---:-77->3->>>>>>>>>>>>>>>>2>>>>>>>>>>>>>>>>>>>>>>>,,,,,,,,22222222222222223332222222222>>>>>>>>>>>>>>>>>>>>>>::>>>3,>>>:::>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>::::::::::::::::::::::::22222222::::::::::::::::>>>>>>>>>>>>>>>>::::::::::::::::,>>::>>,>>>>>>>>::::::::::::::::>>>>>>>>3,,>>>>>::::::::::::::::>>>>>>>>>>>::>>>::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::>>::::>>>>>>>>>>>>>>>>>>>>>>>>>>::::::::::::::::::::::::::::::::", "::::::::::::::::::::::::::::::::33,:::::::::::::::::::::33,:::::,,,::::::::::::::::::::::::::::::::::,,,::::::::::::::::::::::::::::::::::::::::::::::::::::,,33::::,333::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::>>>>>>>>22222222222222222222222222222222>,,;-;17hxlllh98%yit&*tt996;..--;;;,,,<<322>>>>>>>>>>222>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>3--7gcgf7--,3-->>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,,,,,,,,22222222222222223322222222222>>>>>>>>>>>>>>>>>>>>>>::>>>3,>>>::>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>::::::::::::::::::::::::22222222::::::::::::::::>>>>>>>>>>>>>>>>::::::::::::::::>>>>>>>>>>>>>>>>::::::::::::::::>>>>>>>>>>>>>>>>::::::::::::::::>>>>>>>>>>>::>>>::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>::::::::::::::::::::::::::::::::", "::::::::::::::::::::::::::::::::,,,:::::::::::::::::::::3,,:::::,,:::::::::::::::::::::::::::::::::::,,,::::::::::::::::::::::::::::::::::::::::::::::::::::,333:::,,333::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::>>>>>>>>22222222222222222222222222222222>>>;;;;-X69hxzNHlchihkp*gg9661;.<<;;;;;;2>>>>>>>>>>>>>>2>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,33,7gSWlg3-3:-3>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,,,,,,,,22222222222222223222222222222>>>>>>>>>>>>>>>>>>>>>>::>>>3,>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>::::::::::::::::::::::::22222222::::::::::::::::>>>>>>>>>>>>>>>>::::::::::::::::>>>>>>>>>>>>>>>>::::::::::::::::>>>>>>>>>>>>>>>>::::::::::::::::>>>>>>>>>>>::>>>::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>::::::::::::::::::::::::::::::::", "::::::::::::::::::::::::::::::::,:::::::::::::::::::::::,::::::::::::::::::::::::::::::::::::::::::::,,,:::::::::::::::::::::::::::::::::::::::::::::::::::::,,,::,,3333::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::>>>>>>>>>>>>>>>>222222222222222222222222>>>>,,;-1.19cxFFLWWLxciygy9966111,<;---->>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>->33--XXDlf->3>>>>>>>>>>>>>>>>>>>>>>>>>2>>>>>>>>>>>>>>>>>>>>>>>>2222222222222222222222>>22222>>>>>>>>>>>>>>>>>>>>>>::>>>,>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>::::::::::::::::::::::::22222222::::::::::::::::>>>>>>>>>>>>>>>>::::::::::::::::>>>>>>>>>>>>>>>>::::::::::::::::>>>>>>>>:::>>>>>::::::::::::::::>>>>>>>>>>>::>>>::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::>>,33,>>>>>>>>>>>>>>>>>>>>>>>>>>::::::::::::::::::::::::::::::::", "::::::::::::::::::::::::,::::::::::::::::::::::,,::::::::::::::,::::::::::::::::::::::::,,,,,,,,:::::,,,,,,,,,,,,,,,,,,,::::::::::::::::::::::::::::::::::::::::::,,,,33::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::,,,,,,,,,,,,,,,,222222222222222222222222>>,,,,>>7;1117gg1hzxg99y996611<;,,>;--;;>>>>>>>>:::----->>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>3---,7733f7-33-->>>>>>>>>>>>>>>>>>>>>>>2>>>>>>>>>>>>>>>>>>>>>>>>222222222222222222222>>>22222>>>>>>>>>>>>>>>>>>>>>>::>>>,>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>::::::::::::::::::::::::22222222::::::::::::::::>>>>>>>>>>>>>>>>::::::::::::::::>>>>>>>>>>>>>>>>::::::::::::::::>>>>>>>>:::>>>>>::::::::::::::::>>>>>>>>>>>::>>>::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::>>,33,>>>>>>>>>>>>>>>>>>>>>>>>>>::::::::::::::::::::::::::::::::", "::::::::::::::::::::::::,,,::::::::::::::::::,,,,,,::::::::::,,3::::::,,::::::::::::::::33333333:::::,,,,,,3333333333333::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::,,,,,,,,>>>>>>>>222222222222222222222222>33>>->>.-;;-;377fgf96+X61...;;->>>>>>23,,,>>>>>:------->>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>->73>-:3--:,3--,>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>22222222222222222222>>>>22222>>>>>>>>>>>>>>>>>>>>>>::>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>::::::::::::::::::::::::22222222::::::::::::::::>>>>>>>>>>>>>>>>::::::::::::::::>>>>>>>>>>>>>>>>::::::::::::::::>>>>>>>>>>>>>>>>::::::::::::::::>>>>>>>>>>>::>>>::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::>>>>>>>>>>>>>>>>>>>>>>>>::::::::::::::::::::::::::::::::::::::::", "::::::::::::::::::::::::33,::::::::::::::::::,3333,::::::::::,33:::::,,,::::::::::::::::33333333:::::,,,:::,,333,,,,,,,,::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::>>>>>>>>>>>>>>>>222222222222222222222222333>>>>>15523325->3,;1166;..;;;>>>222222,,,,>>>>>>>><<<<>>>>>>>>>>>>>>>>222>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>,>--7,,3-->3>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>2222222222222222222>>>>>22222>>>>>>>>>>>>>>>>>>>>>>::>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>::::::::::::::::::::::::22222222::::::::::::::::>>>>>>>>>>>>>>>>::::::::::::::::>>>>>>>>>>>>>>>>::::::::::::::::>>>>>>>>>>>>>>>>::::::::::::::::>>>>>>>>>>>::>>>::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::>>>>>>>>>>>>>>>>>>>>>>>>::::::::::::::::::::::::::::::::::::::::", "::::::::::::::::::::::::33,,::::::::::::::::,,3333,,::::::::,333:::::,,,::::::::::::::::,,,,,,,,:::::,,,:::::,,,::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::>>>>>>>>>>>>>>>>22222222222222224222222232>2333252>52243432>;;111;..;>>>3333222>,,,,,,>>,,,,,,<<>>>>>>>>>>>>>>>>222>>>>>>>>>>>>>>>>>>>>>>>>>>>>>:>,,>>,3::,--77->>>>>>>>>>>>>>>>2>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>2222222222222222222>>>>>22222>>>>>>>>>>>>>>>>>>>>>>::>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>::::::::::::::::::::::::22222222::::::::::::::::>>>>>>>>>>>>>>>>:::::::::::::::::>>,,>>:>>>>>>>>::::::::::::::::>>>>>>>>3,,>>>>>::::::::::::::::>>>>>>>>>>>::>>>::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::>>::::>>>>>>>>>>>>>>>>>>::::::::::::::::::::::::::::::::::::::::", ":::::,33:::::::::::::::::::::,33::::::::::::::::::::::::::::,,33::::::::::::::::::::,33,33,,::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::3333,:::>>>>>222>>>>>>>>>>>>>>>>>>>>>>>>222222222222222222222222>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>2>>>>>>>222>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>33,773->3->>>>,3,>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::3,,:::::>>>>>>>>>>>>>>>>::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::>>>::>>>>>>>>>>>>>>>>>>>>>>>>>>>::::::::::::::::::::::::::::::::", ":::::,33:::::::::::::::::::::,33:::::::::::::::::::::::::::::,33::::::::::::::::::::,33,33,:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::333,::::>>>>>>22>>>>>>>>>>>>>>>>>>>>>>>>222222222222222222222222>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>2>>>>>>>222>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>3333773:>>>>>>,3,>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::,,::::::>>>>>>>>>>>>>>>>::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::>>>::>>>>>>>>>>>>>>>>>>>>>>>>>>>::::::::::::::::::::::::::::::::", ":::::,33:::::::::::::::::::::,33:::::::::::::::::::::::::::::,,,::::::::::::::::::::,33,,,,:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::333,::::>>>>>>>2>>>>>>>>>>>>>>>>>>>>>>>>222222222222222222222222>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>2>>>>>>>22>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>233>377>-3>>>>,3,>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::>>>>>>>>>>>>>>>>::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::>>>::>>>>>>>>>>>>>>>>>>>>>>>>>>>::::::::::::::::::::::::::::::::", ":::::,,,:::::::::::::::::::::,,,:::::::::::::::::::::::::::::::,::::::::::::::::::::,33,,:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::3,,:::::>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>22222222222222222222222222222222>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>2>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>22>:>773->>>>>,3,>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::>>>>>>>>>>>>>>>>::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::>>>::>>>>>>>>>>>>>>>>>>>>>>>>>>>::::::::::::::::::::::::::::::::", "::::::,,::::::::::::::::::::::,,:::::::::::::::::::::::,::::::::::::::::::::::::::::,33,:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::,::::::::::::::::::::::::::::::::,:::::::>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>22222222222222222222222222222222>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>2>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>3->77,->>>>,3,>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::>>>>>>>>>>>>>>>>::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::>>>::>>>>>>>>>>>>>>>>>>>>>>>>>>>::::::::::::::::::::::::::::::::", ":::::::::::::::::::::::::::::::::::::::::::::::::::::,,,::::::::::::::::::::::::::::,33,:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::,,,::::::::::::::::::::::::::::::::::::::::>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>22222222222222222222222222222222>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,,,,,,,,,,,,,,,,>>>>>>>>>>>>>>>>2>>>>>>>>>>>>>22>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,7-:ff3:>>>>,3,>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::>>>>>>>>>>>>>>>>::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::>>>::>>>>>>>>>>>>>>>>>>>>>>>>>>>::::::::::::::::::::::::::::::::", ":::::::::::::::::::::::::::::::::::::::::::::::::::::,33::::::::::::::::::::::::::::,33,:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::,33::::::::::::::::::::::::::::::::::::::::>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>22222222222222222222222222222222>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,,,,,,,,,,,,,,,,>>>>>>>>>>>>>>>>2>>>>>>>>>>>>222>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>3-3f7-3>>>>,3,>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::,,>>>>>>>>>>>>>>>>::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::>>>::>>>>>>>>>>>>>>>>>>>>>>>>>>>::::::::::::::::::::::::::::::::", "::::::::::::::::::::::::::::::::::::::::::::::::::::,,33::::::::::::::::::::::::::::,33,::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::,,33::::::::::::::::::::::::::::::::::::::::>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>22222222222222222222222222222222>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,,,,,,,,,,,,,,,,>>>>>>>>>>>>>>>>2>>>>>>>>>>>>222>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>->-7f7-3>>>>,3,>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::,,3>>>>>>>>>>>>>>>>::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::>>>::>>>>>>>>>>>>>>>>>>>>>>>>>>>::::::::::::::::::::::::::::::::", ":::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::,3333,,::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::>>>>>>>>>>>>>>>>222>>>>>>>>>>>>>22233333222222222222222222222222>>>>>>>>>>>>>>>>>>>>>>>>>>>22>>>:>,333,>3333,>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>33>>>>>>>>>>>>>>>>>>>>>>>2:7ff73>>-:>>>,,,>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::>>>>>>>>>>>>>>>>::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>::::::::::::::::::::::::::::::::", "::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::,,3333,:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::>>>>>>>>>>>>>>>>222>>>>>>>>>>>>>22233333222222222222222222222222>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,,333333333,>>>>>>>>>>>>>>>>>>22:>>>>>>>>>>>>>>>>>>>>>23>>>>>>>>>>>>>>>>>>>>>>22>3773>>>::>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::>>>>>>>>>>>>>>>>::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>::::::::::::::::::::::::::::::::", "::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::,,33,,,:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::>>>>>>>>>>>>>>>>22>>>>>>>>>>>>>>22333333222222222222222222222222>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>33,>>>,3333,>>>>>>>>>>>>2>>>::>>>>>>>>22>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>22222>>>>>,>:::>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::>>>>>>>>>>>>>>>>::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>::::::::::::::::::::::::::::::::", ":::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::,,333,:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>33333333222222222222222222222222>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,,>>>>>>3,,>>>>>>>>>>>>>2>>>>>33>>>>>>>>>>>>>>>>>>>22>>>>>>>>>>>>>>>>>>>222>>>>>>::::>>:>>>>>>>:>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::>>>>>>>>>>>>>>>>::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>::::::::::::::::::::::::::::::::", "::::::::::::::::::::::::::::::::::::::::::::::::,,,,,,,,:::::::::,,,,333::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>33333333222222222222222222222222>>>>>>>>>>>>>>>>22>>>>>>>>>>>>>>>,333,>:,>>>>>>>>>>>>>>>>>>>37773332>>>>>>>>>>>>>>>2>>>>>>>>>>>>>>>>>>>>>>>>>>>>>::>>,>:>>>>>>::>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::>>>>>>>>>>>>>>>>::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>::::::::::::::::::::::::::::::::", "::::::::::::::::::::::::::::::::::::::::::::::::33333333::::::::,,,33333::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::>>>>>>>>>>>>>>>>>>>>>>22>>>>>>>>33333322222222222222222222222222>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,33333,>>>>>>>>>>>>>>>>>>>>>23373332>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,33>>>>>>>>::>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::>>>>>>>>>>>>>>>>::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>::::::::::::::::::::::::::::::::", "::::::::::::::::::::::::::::::::::::::::::::::::33333333::::::::33333333::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::>>>>>>>>>>>>>>>>>>>>>222>>>>>>>>33333222222222222222222222222222>>>>>>>>>>>>>>>>>>>>>>>2>>2222>>>,333333>>>>>>>>>>>>>>>>332>>--->>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::>>>>>>>>>>>>>>>>::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>::::::::::::::::::::::::::::::::", "::::::::::::::::::::::::::::::::::::::::::::::::,,,,,,,,::::::::33333333::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::>>>>>>>>>>>>>>>>>>>>>222>>>>>>>>33333222222222222222222222222222>>>>>>>>>>>>>>>>>>>>>223>>3333>>>>::>>,3>>>>>>>>>>>>>>>>>>233322>>>>>>22>>>>>>>>2>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>2>>>:--:>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::>>>>>>>>>>>>>>>>::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>::::::::::::::::::::::::::::::::", "::::::::::::::::,33,:::::::::,,,::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::222222222222222222222222222222223332222233333222,,,,,33332233333333,,::::-,,->3>434:3<--7ll7334:332>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,,,,,,,,22222222>>>>>>>>2222222222222222>>>>>222222222222222222222222222::::::::::::::::::::::::::::::::>>>>>>>>>>>>>>>>::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::<<<<<<<<::::::::<<<<<<<<<<<<<<<<<<<<<<<<:::::>>>,,,:::::::::::::,,,:::::::::::::::::::::::::::::>>>>><<<;;;;;;;;222244444422>>>>::::::::444444444334433:>:::<<<<>>>>>>>>>>>>>>>>::::::<<<::::444444422::::::<<<<<<<<<<<<<<<<<<<<;<::<::::::<::<;;;;;;;;;;;;;;;;;2222222222222222>>>>>>>>>>>>>>>>::::::::::::::::::::::::::::::::::::::::::::::::>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>", "::::::::::::::::,33,:::::::::,,,,,,,,,,,::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::222222222222222222222222222222223332222233333222,,,,,33332233333333,,::::--->3733777fffff,-;--33>>>>>>>:>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,,,,,,,,22222222>>>>>>>>2222222222222222>>>>>222222222222222222222222222::::::::::::::::::::::::::::::::>>>>>>>>>>>>>>>>::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::<<<<<<<:::::::::<<<<<<<<<<<<<<<<<<<<<<<<:::::>>>,,,:::::::::::::,,,:::::::::::::::::::::::::::::>>>>>><<<;;;;;;;2222244::::>>>>>::::::::2222222222242223>:::::<<>>>>>>>>>>>>>>>>::::::<<<::::444444422:::::::<<<<<<<<<<<<<<<<<<<<::::::::::::::<;;;;;;;;;;;;;;;;22222222>>>>>>>>>>>>>>>>>>>>>>>>::::::::::::::::::::::::::::::::::::::::::::::::>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>", "::::::::::::::::,33,:::::::::,,,33333333::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::222222222222222222222222222222223332222233332222,,,,,33332223333333,,:::-,337>--:37fgf,X-17,373->:--:>23>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,,,,,,,,22222222>>>>>>>>2222222222222222>>>>2222222222222222222222222222::::::::::::::::::::::::::::::::>>>>>>>>>>>>>>>>::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::<:::::::::::::::<<<<<<<<<<<<<<<<<<<<<<<:::::::>>,,,:::::::::::::,,,:::::::::::::::::::::::::::::>>>>>>><<<<<<;;;>>>>::::::::<<<;::::::::::::::::2>>22::22,,,,,,,>>>>>>>>>>>>>>>>:::::::<:::::4444444422:::::::::::::::::::::::::::::::::::::::::<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>::::::::::::::::::::::::::::::::::::::::::::::::>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>", ",:::::::::::::::,33,:::::::::,,,,,,,,,,,::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::222222222222222222222222222222223332222222222222,,,,,33333222333333,,::>-3>->-,f73--;;;1X1XXf7-glcg73>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,,,,,,,,22222222222222222222222222222222>>>22222222222222222222222222222::::::::::::::::::::::::::::::::>>>>>>>>>>>>>>>>::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::,,,:::::::::::::,,,:::::::::::::::::::::::::::::>>>>>>>>>>>>>>>>>>:::::::::<<<;;<<<<<<<<::::::::>>222>>:2,,,,,,,>>>>>>>>>>>>>>>>::::::::::::::4444444222::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>", "3,,:::::::::::::,33,:::::::::,,,::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::222222222222222222222222222222223332222222222222,,,,,333333222223322,,>>,,>,3,,7-,71;XX1fchlWD7flcg73>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>22222222222222222222222222222222>>222222222222222222222222222222::::::::::::::::::::::::::::::::>>>>>>>>>>>>>>>>::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::,,,:::::::::::::,,,:::::::::::::::::::::::::::::>>>>>>>>>>>>>>>>:::::::<<<<<<<<<<<<<<<<<<<<<<<<<>33--33>>>>:::::>>>>>>>>>>>>>>>>4:::::::::::::4444444422::::::::::::::::::::::::::::::::::::::::::::::::::::::::<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<::::::::::::::::::::::::::::::::::::::::::::::::>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>", "333,::::::::::::,33,:::::::::,,,::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::222222222222222222222222222222223332222222222222,,,,,333333333322222,,,,7--33,,-71;;7fhlWLc7>77->:--:>23>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>2222222222222222222222222222222222222223222222222222222222222222::::::::::::::::::::::::::::::::>>>>>>>>>>>>>>>>::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::22222222::::::::::::::::::::::::222>>>::::::::::,,,:::::::::::::,,,:::::::::::::::::::::::::::::>>>>>>>>>>>22222::::::<<<<<<<<<<<<<<<<<<<<<<<<<<,,;-->,>>>>:::::>>>>>::::::>>>>>4:::::::::::::::44444422:::::::::::::::::::::::::::::>>>>>>:::::4444444444444444::::::::::::::::<<<<<<<<<<<<<<<<::::::::::::::::::::::::::::::::::::::::::::::::>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>", "333,::::::::::::,33,:::::::::,,,::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::2222222222222222222222222222222233322222>>>22222,,,,,33333333333222,,>,,3X,7;1ggX;9cSHHLHlxSxg7->>>>>>>:>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>2222222222222222222222222222222222222233222222222222222222222222::::::::::::::::::::::::::::::::>>>>>>>>>>>>>>>>::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::22222222>>>>>>>>444444444444444422222>>>>:::::::,,,:::::::::::::,,,:::::::::::::::::::::::::::::>>>>>>>>>2222222::::::<;;;<<<<<<::::::::::::::::;-1771->>>222444>>>>::::::::>>>>222>>>>>>>>>>>>>22222222>>>>>>>>::::::::::::::::4:::>>>>>>>>:::44444444444444444::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>", "3333,:::::::::::,33,:::::::::,,,::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::2222222222222222222222222222222233322222>>>22222,,,,,3333333333322>>>,,,-1lSg1976glSzllSchffch7;332>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>2222222222222222222222222222222222222333222222222222222222222222::::::::::::::::::::::::::::::::>>>>>>>>>>>>>>>>::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::22222222>>>>>>>>::::::::::::::::22222>>>>>::::::,,,:::::::::::::,,,:::::::::::::::::::::::::::::>>>>>>>>2222222244:::>>>><<:::::::::::::::::::::1.9cc7-,,,,22222>>>>::::::::>>>>>>>>>>>>>>>>>>>>22222222>>>>>>>>::::::::::::::::4::>>>>>>>>>>::4444444444444444422222222::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>", ":::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::,,:::222223332222222233333333333222223333333333333333333,,>>>7--3>>3>7-7,3-1;-7g91gcccLHLSxS9.--;;;>>>>>>>>>>>>>>>>>>222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222233333,:::::::::::::::::::::::::::::::>>>>>>>>>>>>>>>>:::::::::::::::::::::::::::::::::::::::::::22222::::::::::::::::22222222222222222222::23-::77:::3>>,,>>3,>--:333325->33>>,3333,:::3332::22222222333,,:::::::::::::::::::::::::::>>:>33322>5:333:4444>>,>,,>-::333:::43:::33:33--9hSxf.;1---77-:>2>>7f7::33::::>>73>>33,-3---<,,,-3333:->:::-:>3333,,::::,3,--:3:4:37>;;;-;333::3:73:33:3-:34::2332::23333:::::::44:4333:434-4444:::::::::::::::::::::::::::::::::::::::::::::::::>>>>>>:>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>", ":::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::,,:::222223332222222233333333333222223333333333333333333,,>>>-73-;,--->,X1;;;17hcxLHSLzzSlSxX;;;>>>>>>>>>>>>>>>>>>>>>222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222233333,:::::::::::::::::::::::::::::::>>>>>>>>>>>>>>>>:::::::::::::::::::::::::::::::::::::::::::22222::::::::::::::::22222222222222222422335-37---->,73,>-->3X;77>---->3333:-::----:,::2322::::::::::,,::::::::::::::::::::::::::::::2>>>232>:233>::2444423>;->773:--33344:::44--443fxxFFlg7X17---37>->--fg7----33733>>>---->;,11,..;,,-->,>3,37732:----:::33-:3773--::----;17.X--::3-,>:>>>373::>>>:::232-52222332544333:-:4-::4334:::::::::::::::::::::::::::::::::::::::::::::::::>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>", "::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::222222332222222233333333332222223333333333333333333,,>>>3--,,<,7X77;gg6X7gxHWKzxHxzFLSg113332>>>2>>>>>>>>>>>>>>>222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222223333,:::::::::::::::::::::::::::::::>>>>>>>>>>>>>>>>:::::::::::::::::::::::::::::::::::::::::::22222::::::::::::::::22222222::::::::42322237-3>-77>-;......;...XX.;1111;;,77,>>:::332222222222222222::::::::::::::::::::::::::::::::2222222>2>373-->33373;;11;---333-:22237f22233-:fzllzzxh9X1;7glDlgf--,,--3:---;-;-,3,,>,3,;-.XX.;-;;;,;------->373333,>:-7,--::,7-7fglxSLSlhhg7--1;;1;-;,;--;;;;12>>225>3555232222:5:333273325527::::::::::::::::::::::::::::::::::::::::::::::::>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>", "::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::222222222222222233333333222222223333333333333333333,,>>>;7,-,7,-;;X7g71gczLWEYLLnLHzxg.;,,2>2>>>>>>>>>>>>>>>>>>>222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222333,:::::::::::::::::::::::::::::::>>>>>>>>>>>>>>>>:::::::::::::::::::::::::::::::::::::::::::22222::::::::::::::::44444444::::::::232>--5>37>-,7-,XX6fhcccLLFSzl9XXX;;;;;--:>:::--34::422444444444::::::::::::::::::::::::::::::::322222>>3---,,,73:--X;flLSlf1-:333,>>>,3--->>->fxllxxxlchhgclccghhhclgfg77<--,,1;;;,,,--1-.6fghhDSScf<-,;,33,------;<,,,,-,7,---fxLE`_YEYYWWWFxx1X;71XXXX.797119f7-X--;-7322>;;>2333>->3-->3>5>3::::::::::::::::::::::::::::::::::::::::::::::::>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>", ":::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::,::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::222222222222222233333333222222223333333333333333333,,>>,-7--7-X,.gf;XhLHYYLHKYWWHLLl1X7->>222222>>>>>>>>>>>>>>>>222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222233,:::::::::::::::::::::::::::::::>>>>>>>>>>>>>>>>:::::::::::::::::::::::::::::::::::::::::::22222::::::::::::::::44444444::::::::2>>3773>--,----glxFWR(REER()'[Wxhg91;11,,,,,,2::34::422:::::::::33,,::::::::::::::::::::::::::::22222>>>3----XX.--7gclSWLKLx9..>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>", ":::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::,,,::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::332222222222222233333333222222333333333333333333333,,>>,7X<7X7gf1;XghlKWYYHzNHJLHHHHh17,:2242222:>>>>>>>>>>>>>>>2222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222>2222222,:::::::::::::::::::::::::::::::>>>>>>>>>>>>>>>>:::::::::::::::::::::::::::::::::::::::::::22222::::::::::::::::4444444444444444>22>55,771f7XX7lLLKERTYIYYYYE}}RYFh1XX;1;;---:233:::332:22222222333,,,::::::::::::::::::::::::::44322>>>X7cxcgffhcxLWKJJJJJHlg969ghlxxlcllcclxSFNFLLNFHLxzlllxFFFLFSSGGGGGGFFFFFLLSh7.;1ggclxxxzWWEEEWLLxlhf7;--------;<7fcxDSFWWWFFLE_'TTYKW((WKKR`]))[]`'{]}YW_']RE(_}HFSzlh997111.XXXXX;1X.1.::::::::::::::::::::::::::::::::::::::::::::::::>>>,,>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>", ":::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::,33::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::333222222222222233333333222223333333333333333333333,,>>,-<7-,FEfhh9zWYWHHHNLLHIKIKYWx7X,,4444422>>>>>>>>>>>>>>>>2222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222>>222222,:::::::::::::::::::::::::::::::>>>>>>>>>>>>>>>>:::::::::::::::::::::::::::::::::::::::::::22222::::::::::::::::444444442222222233>>>5---1SLxh77hcxNBBNBKERTERRTSzxcg96;---:::--2::4334:22222222,,,:::::::::::::::::::::::::::::44322>>,-cW(EWWWEWKLHHBBKJJKYEWLKWYEREYWKWKWYWKKRR}}EYWWWKFFLKWKFSSFGGxGGGGGFLWWWWWFlllSFFFzxlxzLLLKWWLLFLLLFxchcccclxSSLLLLFLWWWWWWE__^_^RYYYLSHKY})}R}`[))_}EYYEEWKLLLLLKKKLLKLWRWxhcFlhg61gFF:::::::::::::::::::::::::::::::::::::::::::::::::>,33,>:>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>", "::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::,,33::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::333222222222222233333333222223333333333333333333333,,>>,;7X7Y(DcSLhzWWKKYHxLJHKHIHRzX;,724444444>>>>>>>>>>>>>>>>2222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222>>>22222,:::::::::::::::::::::::::::::::>>>>>>>>>>>>>>>>:::::::::::::::::::::::::::::::::::::::::::22222::::::::::::::::44444444333333332--fDFlf;XcSFWSlxBJIKHHJI^[)^RYJxHYRRYKF7ffggf732::4334:--------::::::::::::::::::::::::::::::::44322>,,lL(ELLWWR}}EIKIIPIIIIWWWWWWWKKWWKJJWYWWEEERREEEYYHxLYKLLLLFSGGGGGWWWWLLLLLFFLLFFFFFFNNNFWWWLHFSFFFFFLWE(EWWWLLLLFFFFFWWWWWWER))R^_))))_(YRR_[^ERYEEEYER}RYKWIKLHHHLLLLKYRRR}_}_`KFzzzFl1:::::::::::::::::::::::::::::::::::::::::::::::::>3333>:>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>", ">>>>>>>>>>>>>>>>::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::333,>>>:>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>:::::::::<<<<<<<>>>>>>>>>>>>>>>>4444444422222222:::,,3,,,,,,,,,,33333333>>>>>>>>;;;,,,,,-37::434-37-3-:2:::gGf,fhvlLEIIJJLLJKLHHBBJLl9.;->73:>3>2>>>>>>222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222>>>,,,,,,,,,4444442222222222<<<<,,,,,,,,,,,,<<<,,<<::,:--333>>>3>-->5>>5->2>>>:,3>-33>>33:->4:43344344444444::::333444444434::::333:322233::44444433:2-:73-7;13,-:4443-44-3:222>>77-1;XXX.66hhhzFERHxxczxBzzYERREKJPIT!RT!RTHJJIETTEYHHKEIHNHlhxHLzlhhhg99996XXXfg611,,:::::44444443:23>>,3>X.XX6+6hYIKHzBKYITRTYIKKIIWWWWWWKKKWWWWIWWWWWYYYYYYERREEHLLWWWKLLLLLFLLKWEREYWWWKLFFFFFLLFFFLLLKWKKLLLKKWKLLWWYEYYWWKKWWWLFFFFLWYYYYERRR}^)[[[)^)__)[_REKJLKKKKKKKKKLLHHHLJJKKKKKIIKLHLKxlxHKJHBc7X-,--,-,>:2>>3-<,,---::--273-::::3:-:3>2322>::<-------<<<-----<<:::>22222222>>>>>>>>>>>>>>>>>>", ">>>>>>>>>>>>>>>>::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::33,>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>:::::::-::<<<<<<>>>>>>>>>>>>>>>>2222222232222::::::,,33,,,,,,,,,33333333>>>>>>>>;,,,,,,,7:-374::f-:-3:3:,,-X,-,-9hzKIJKIKKKKLHHHJBHLLFxhg>-23>>32>>>>>>222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222>>>,,,,,,,,,2222222222222222,,,,,,,,<>>>>,,,,,,<<<;->33773>->>>22>>>:>>>>>>>>>>,>:>33>>3333373:::--:-4334:43::,232::444444::33::--:2::::::::734:4:::-37,----1.X-,3::47433:733-:73>;-X7hllllxzY}_NFE}RYNxxNLKEYYEYKJJPT!!RTTIJJKIYEEYYJHKYIKKEKLLKKKKKLFzzzzzllxHWF7X.--<,33344:434--3>--->>-1gchxLKYYEEEYIIIKIEYIIIIKKKWWWWWKKKKKWWWWWWWWWIYYERRREWKYWWWWWKKWKKLLKWWYYYWWKLLLLLLLFFFLFFFFFFLLLLHLLLLWKLKWWEEEYWWWWWWWWLWLLWWYYYERRRR^^R^^_)))_^__^}RKKKKKLLHHHLHHHHHLJJJKKKKIIIKKJJJHzxNKT_[Exf7<.-7----,,----.-,,<-33,---32:33::332---52233,,::::::<<<<<<<<<::::>2222222>>>>>>>>>>>>>>>>>>>", ">>>>>>>>>>>>>>>>::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::3,,>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>::::::::::::::::>>>>>>>>>>>>>>>>>>>>>>>>333,>>>>22:,,3333,,,,,,,33333333,,,,,,,,,,,,,,,,>:223333>-37:-,X--f,-;7-XhzKKHHJKKYYKLHHBBHHzHWLSf577>->2>>>>>>22222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222>>>>>>,,,,,,,2222222222>>>>>>3333333332223333,,>>>>>>:-:233332:->32>>>>232::2>:2>-:3::::::22:---3773:>3332::>--:,3333-::33333:433322322222444::2333>-3,,-;77-61;1,--:34--2:>-7----,fhlLR(RER(__RRLKR^_TKBHJETJKIYIJKYT^^^RTIKKKIIYEYIYIKKIIYYYERRREEREWLLLKKKYYYWWLcg11;<;--X374--373---77777H(_RR}RTEYIIIIIPIIYIIIIKKKKKKKKKKKKKKKKWIIWWWWIIWYRREYWWEYWWWWWWWWWWWYEEEWWWWWKLLLLKLFFSzSSFFFFLLLHHHLLLKKKWWWEEEEEEYYWWWWWWWWWWEEERRR}^_RRTR^^_!}^^}REYKKKKKKKLHHHHHLLJJJKKKIIIYYYYEYIKIJHKT_]'RLSzxhffcccclh7;7777fffg--,7,37---:-,33-733222>:,::::,,3::::::::::::>2222222>>>>>>>>>>>>>>>>>>>>", ">>>>>>>>>>>>>>>>::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::,:::::::,>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>>>>>>>>>>>>::::::::::::::::::::::::::::::::::::::::,,,,,,,322222333333333333333333333333333>>>>,,,,-37:--:-1.;777gl9X;;1..;9xzKKILKKKJJKKLHJBHKFSxcf3:::>3,2>>>>>>22222222222222222222222222222222222222222222222222222222222222222222222222222222222222222>>>>>>>>>>>>>>>>2222,,,,,,,,,,,,3333332222333233::>2233373332>2333233333324332:43233>37:>22>>2327,------>---,3,-;;;;----3,,,>----522322222222222>37,---;X-.X;gSxghlcf7-:-377--,7-7hlDW((WYEEERR}_YJKKYR^RRRKIKIJHJIYIIT^[[[^!TTIIIYTTTTEIIIIIIIKIE^)[[_REYKKKWYWYKKLHFxzcchhgf77--,,,;--71;.X.9hFKYEEIITRTIIIYYYIIIIIIIKPKKKKKKKKKKKKKKKIWWWWIIIYYEEYYEREYWKKWWWWWWWYEEEWWWYEYWKLLLFFFFFxzSFFFFHLLLLLLLLLLWWWWEEREEEEEYWWWYYYYYEERRRRRR}RRETTRTTIER!TEIKLJLHHLLHLLJJJJJJKKKIIYYEEEERR}RREEE^[])^EWWYWLLL'][`](LSlllchczLc7.1XX;-1;;;;--;----::>>:::::422::::::::>>>>>222222>>>>>>>>>>>>>>>>>>>>>", ">>>>>>>>>>>>>>>>::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::3,,:::::>>>>>>>,>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,,3>>>>>>>>>>>>>>>>,,,,,,,,::::::::::::::::::::::::<<<<<<<<<<,,,,,,22222333333333333333333333333333222222,,7--,73,7119xWLSES91X7917HKHHLYIEYKHBHLLHLHFlf1-X--2>->7>2>>>>>>22222222222222222222222222222222222222222222222222222222222222222222222222222222222222222>>>>>22222222222,,,,,,,,,,,<<<<<44444422222222>>32222333-5273223::::::::2:-:32::2>>>>32-5>2>5>22-<,,,;;-;---;<,,;;;;;117,;;,;;,7732>233233332233;..-19ghlhghxWEFxFFxcg7.<-;;,1;;,hL((((E(EEER(RREKYR^}TER}^IIKIJIKKITRTT^^^^!!!!TTTT!!RTYEYIIIIJJKKKIEYKEEEEEEYYWHFzzHzxSSzxxlccf1.11XX6.X19gcFYYYEREJKTTTTTTTYYIIIIIIIPPIIPKKKKWKKKKKKKWWWWIIYYEEEYYYYEEEWWWWWWWWWWYYYYKWWYEEYWKLFzzzFFFFFHLLHFLLLLLLLLLLKWWWYEREEEEEEYEEEEEERRTRRRRTRREYYYEEIIKIETEYIKIIKHNBBzLJJJJJJKKIIYETTTERRR}^^_)_)[''[_}RETEYR_]`__))}RWWLzxzLWRSch9799;11XX;11-;,,>::,4444444444444444>>>>>22222>>>><<>>>>>>>>>>>>>>>>", ">>>>>>>>>>>>>>>>::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::333,::::>>>>>,,3>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,333>>>>>>>>>>>>>>>>,,,,,333::::::::::::::::::::::::<<<<<<<<,,,<<<--22222333333333333333333333333333444422,,---XX.XX6hhcFHzKWzlX9xlzKYKKKIIYKIIKJJLHJYLvXX1773372>>-2>>>>>>22222222222222222222222222222222222222222222222222222222222222222222222222222222222222222>>>>>22222222222,,,,,,,,,,,,,,,,4444442233333,,,3332>>>>772;-XXX33,::,,:,,,:,333,3>>3,;33>->,,,3-<1;..;22>5-555-5>2..1vlHLLSLKzhcFWLzh99h9X7;;;,1..;9lLWWWREEEEEEYY}ER^][TI^^RYYIEIYIKIETTETTT!!TTTTTTTTTTEIIPJJKKJPIIPIIYYIIYEEYIKKHHzxzzzzzxxxllclh6X1ghghcxHKJLLJKIIIPIIIUTTUUIIIYYIIIIIIIIIIPPPIWKKKKKKKKKWIIIYYYYYYYWWEYWWWWWWWWWWWWWWWYEEEEERWWLFSFFFFFFFLLLFFLLLLLLFLLLKWWWYEEEEEEEERRRRRRRRRR}RRRRRTEYYETEYEEEIKJJJTEIJHHHHLJJJJJKKIIYETR!!RR^^^^_)`[[)[)_RYERRRER}__}R___)}RKLHHLLYEREKLLShxxhgg6X;;;;--:,2444444344444444>>>>222222>>><;;>>>>>>>>>>>>>>>>", ">>>>>>>>>>>>>>>>::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::333,::::>>>>>,33>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,333>>>>>>>>>>>>>>>>,,,,,333>>>22222::::::::::::::::,,,,,,,,,,,:<---222223322222222333333333,,,,,,,,444442,,flxhfhhfhWYLHKzzKxH99zHEYITTTYEYKYTEYYKHHLc1;73-3--3>>>,2>>>>>>22222222222222222222222222222222222222222222222222222222222222222222222222222222222222222>>>>222222222222,,,,,,,,,,,,,,,,333322>>33311,11>>>-;;,1-;.1vlSSff7111;XX11.XX.;;7;.1XXff1.171;;;.XX1gxFLWWLSxlxxxxlcg99hggf7.XX;;1;;;;1;1111779cclzLKLFxlh9X6lE^YzcxLLzglSl916hlxLWWWWYYYYYYER}TT_R^RT^))^^TTIIIIEEEETTEETTTTTTTTTTTTIIJJHBBBHJJPIIPPPPKKPIIKJBxxHHxxxxzzxxcccllzlvcHFhNHJKKKKKJJIIPPPCUUTUUUT!TTTYIIIIIIIIIPPPIIKKKKKKKKKKKIIIKKKKWYYYWWWWWWWWWYYYWWWWEERRRRRREEWLHHHFzFFFHLLHFFLLLLLLLLLLKKWWYYEEEEETRR}RR^_^^^^^^^^RRRR!!!!RREYKLHHHKKJHBBBHJJJJKKIYYYETTR!!^_____)[)[)_}REYYIIYET!^!^^^_^}^)}YKKLLLFKEER))RxHKWYWFl;.X.-<,,,,>>>>>>>>>>>>>>>>>>22222>>><<<<>>>>>>>>>>>>>>>>", ">>>>>>>>>>>>>>>>::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::3333,::::>>>,333>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,3333>>>>>>>>>>>>>>>>,,,,,,,,>>>22222::::::::::::::::,,,,,,,,33,,,,::>>2223322223333333333333,,,,,,,,444442,,fcxSLWYWYEIYJKJYWhKLHLxSYLIIYITITTYIYEILLLhX;;-33237>>3,2>>>>>>22222222222222222222222222222222222222222222222222222222222222222222222222222222222222222>>>>222222222222222222,,3,,,,,,,332>>>;;;;....XX.....;11hhhlL_`_(YLHLHzlczSchhcczLzxzllWRLzHKLSzSFSzSHLLFFFLWYWWLKWWKLHFLHHHzlcclch911fhhhccllxzHHHHzxxxllccxlzYTRRTERREWWYFlhghYYEWWERYEYYWYYYYTY!Y_^R!^^T^T^T^TTTTTTTIIYETT!!!^^!TTTYIIIIYIPIEIIIIPPJJJHBJJBzkxcxlhcxzxxxlchcxYYYYYYKHBITEKJJIJHJIIIPPUUUUUUUUPIIIIIIIIIIIIIPPIKKKKKKKKKKKKKKKKKKKKKYYYYWWWWWWYEEEYYYYWYERRREEEEWLHLLLFLLHHLLHLLLLLLLLKLLLLKKWIYEEEEETTR^!!^^^^^^^__^^^^_)^^!!YIKKJJKKJJJJJBBJJJJJKKIIYEETTR!!R__)))``)[)^RREEYYYERRRTTRTER^^)_^RYKJKKJKKIR_REIHHYRYKWlhf777;.;;;-----;;>>>>>>>>>>>2222>>::<<<>>>>>>>>>>>>>>>>", ",,,,,,,,>>>>>>>>:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::,,,>>>>>>>>>>>>>>::>>>>>>>>>>>>>>>>>>>>>>>>33333333>>>>>>>>33333333,33,>:>333:>335:444444444:3-7:7:3333233333:232::333>:>3322333322,,,,,,,,7>>3::33444:33--XX.7cLEWIIKKYKHLxKxHYHKlKLBBJIIITRYJHKJzHLHS9;3-2222>,,,>>>>>>>>22222333>>>22222333333332222222222222>>>222333333333322222222222>>>222223333333322222222>>>>2222>>>22222>2322>>>2>>>>>>,1;;.X.6fg169yczcclxzxxFKYYYYIYYIYYYYYYYYEEYYYYYYKKKKYEEER}}EKLHxxlcFLFHLFFHLKLFxLHHKKLzxzzlcSWLxzzLKHxxFzzHHxxzxxlxzLKKJKKKKYYYYTIIEYYREEEYKWYYKWEEEYEEEYYYYEEEETTTTRTTTTTRR!RRRRTTTTTTEYTTTTTTT^^^^^^^^^^^^^!!!!TTIPJJJJBnzxchhh99hccxxxxxxhiihYYYIIEYIIIETTPJJJJPUTUPPUUUUUUUTTTTTYYIIIIIIIIIIKKKKKKKKKKKKKKJJKKKKKKWYWWWWWYWWYEEEEEEEEEEEEYWWWKLHHHFFFHLLLLLLLKKKLLLLLLKKKKKWIIIYEETTRR!!^^__^^^^____^^^^!TIIYYYYIKJJJJJJHHJKKKKKIIIYYYEETR!!___)`[_R`[_RTEEEYEEYYYIIIIYEERRRRRTEYYYYIIIIYYEEIKIRRYKKRWzxhlFg6fgg77f167.7..11>-,5>7::>>:::<<<>>>>>,,3>>>>>,,,", ">>>>>>>>>>>>>>>>:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::,,,>>>>>>>>:>>>>>::>>>>>>>>>>>>>>>>>>>>>>>>33333333,,,,,,,,,,,,,,,,,,33,333->22>->f23333222223:34254443333344443333-->,,3>>:::>2222,,,,,,,,>--333>-444773fcxlSLFxlHJIJBJIJBHzlBJzBHHJKKKPIIIEIKKIIJHLHWg7>>2222>,,,>>>>>>>>22222333>>222233333333332222222222222>>>222333333333322222222222>>>22222333333332222222222222222>>>>23773332>233232>;>,>6169hxLEKHLEYYYJLKYEEEEEYIIIIJKIYIKJJKIIKKKKPIIKKKKKIIIIIEEYIIKHxccxFFFLLLLHFFNxHJKJBzxxhhhczHxxhxHKBzzNzxxxxzHHBzzHKKKJKKKKIIIIIIKIKHKKEEEEEEEEERRREEEEEEEEEEEEETTTTRTTTTTTTTTTRTTTR!TT^^^^!TTT^^^^^^^!^^^!TTEYIIIIIPJJJJBBzkchh98hccllcxxchhlzIIIIIIIIIIITTIKPIIIUTUUUUUUUUTTTTTTTTYYYIIIIIIIIKKKKKKKKKKKKKJJJJJKKKKWWWWWWYYYYYEEEEEEEYEEEEEYWKKLLLLLLLLLKKKKKLKKKKKKKKKKWWWYYYYEETTTT!!!^^^^^^^^^^^^^^^^^!TYIIIIIIIKJJJJJJJJJKKKKPIIIYEETTRR!^RRR^RRR_^REYYYYYYYYYYYKKYYYYEETTTTEEYEEIIIIIYYYIIER^TYWRYzlchFWxzlcczHcxxcch9.X1;3>->-2>:::<<<<>>>>>>,,>>>>>>>,", ">>>>>>>>>>>>>>>>::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::,,,,>>>>>>>>:::>>>::>>>>>>>>>>>>>>>>>>>>>>>>3333333333333333>>>>>>>>>>>>,,>>-77--3>X5>222>>2-33>-537::>22222333322>>73,,,>>:73322222,,,,,,,,,333>,337>:>--flh77.69.gJIIKYEKBEBBHKKBIxHKIKKKKKPPPIIIKKYHF.XX32222>,,,>>>>>>>>22222233222233333333333322222222222222>>222333333333222222222222>>222222333333332222222222222>>>>>,>---->>333>>>;33;37fflzKEEYKLHBJTRIJJIEEEIIKJIJJIIBBPBBBHJPIITEYETTYIIIIIIIIKKKKIIYIIWKWHxlhxLLLFNHLLJIIJzzzxcclzHzxxxxBBHHBxBxcxHKKKKJJKIIIKJJJJJKKKJJHLxcxzKKWEEYERERREEEEYEEEEEEEEEEETTTTTTTTTEEETTTTR!^^!^^^^!!!!!^^^^TTTTTTTEYYIIIIIPPJJHBBnzzxchyyhhclczzliilLIKKKIIIIEIIIIYIITEIIIIUUTTTTTTTTTTTTTTTEYIIIIIIIIIKKKKKKKJJJKJJJJJJJJKKKKKWWWWWYYYYEEEEEREERRREYWKKKKKKKLLLKKKWKKKKKKKKKKWYYYYEETTTTTRR!!!!^^^^^^^^^^^^^^^^^!!TEYPPPPIIIPKKKJJJJKKKJKKIIIIYYETRR}RREEEEEERREYYYYYYYYYYYYWKKWWYYYYIIYYYYYEYYIIIIIIIIERREKKERFxl9gxHBxlxxNLLLWKLxh97-;;,3->>:::::<<>>>>>>>>:>>>>>>>", ">>>>>>>>>>>>>>>>:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::,,,33>>>>>>>>>>>>>>::>>>>>>>,>>>>>>>>>>>>>>>>,,,,,,,,33333333>>>>>>>>>>>>>>>>7--,,;;<-----;17;-;-;;;X>>>23333>332>>::---;,,37--:>>233,,,,,,,,:3>--::,;;371,-XX6lcxLS(HHJYTYKIIKYJJIBKzBJKIIKJJJPIIJJJBJLLg1-3>222>>,,22222222222222223333333322222222222222222222222222233333333222223322222222222222222222222222222222222>>,-->,131,1;111117-;;X7lLWKE_`^IHBJKIT^RER^^^YIIETTIIIJxxBkxBPT!!TTTTTYIIIIIIIIIIIHBBJKKJJNlzxFWHLLHHHLLWYIIIJJJJBHKKJJLHHzxxzBJJNxBBzBBHKJJJKJJJKKJJJJJKKKKJLc8czzHWYYWYYYYYYYYYYYYYYYEEEEEEEEEEEEEEEYYEETTTT!^!!TTTTTTTTTTTEEIIIPPIIIIIIIIPJJJJJBBBzxxch0099hcxllh89yxHKKKKKKIYEIJJKIIETIPPIITTTTTT!!!!!TTTTTEEEYYYIIIIIIKKKKKJJJJJJJJJJJJJJJKKKKKKKKWWWYYYEEERRRRREEYYWWKKKKKKLKKKKKKKKKWWKKKWIYEETTTT!TR!!!^^^^^^^^^^^^^^^^!!!!!!!!TTEIIIIIIIPKKJJJKKJKKJJJKIIIIYYYEEEYYYYYYEEYYYYYYYYYYWWYYWKKKKKKKKKKKKIIIIYYYIIIIIIIIERREIKLRKxh9hlxBJKJxxHHzKHKLzlFh9117>3>:::::::>>>>>>>>:::>>>>>", ",,,,,,,,>>>>>>>>::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::,,,333>>>>>>>>333,>>::>>>>>,,3,,,,,,,,,,,,,,,,,,,,,,,,>>>>>>>>333333333332>>>,.17.XgllFFSSSFLWFxxxKSl9,>;;;>>>;,3,,773;;,71;-;,,3322>>,,,,,,,,>3-:77:>;X.;;11X;fLWYWS(JLKIKLKYLYRKHJHJBBBJKIPJJKIIPBBHBzHKSh1;>222>>,,22222222222222223333333322222222222222222222222222233333332222223332222222222222222222222222222222222>,,3,,<11;;61XXXXX.69vghxFFlBERTIYTT^TE!RT!^!TIITTTTIIJHBJITTTTTIJBKIIIIIIYIIIIIIIIKJJJKJJJHHYLHKHWWHHKWLLKKIKJJIKBHKJJKKJKzzBNciiihchicxchHJIIKJKIKKKJLLLJHHHzv1glzLYYYYYYYWWWWWWYWWWYYYYYYYYYYYYYYYYYYYEETTTTTTTTTTTIIIIIIIKKJJJJJJJJJHHHJJJHBBBBHHzxchi9998hhhch998hxHLLKYIKKYIKJHHJPIIIPPIYTTTTTTTT!!RRTTTTTEEYYYYYIIIIIKKKKJJJJJJJJJJJJJJLLJLLKKKKKKWWYYYEEEEREEYYWWWWWKKLKKKKWWKKWWWKWYYYYYYEETTTT!!!!!!^^^^^^^^^^^^^!!!T!TTT!TTTTTTEYIIIIIPPJJJJJKKJKKJHJKIIYYYIKJJJKKYYYYYYKKKKKKKKWKKKWKKLKKKKKKJJKKKKKIIIIIIIIIIIIYT^^^RTRYHzLWHhkJKBJKHzKBLzLHxcLzxllg3->:::::::>>>>>>>>:::>>>>>", ",,,,,,,,>>>>>>>>::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::,,,,3333>>>>>>>>3333,>>>>>>>,3333333333333333333>>>>>>>>>>>>>>>>33333333322>>>;;1gcccW}EEEEYYER_RYRW_YWF1;.....XX.XXXXXX1.X..;;7;;>>>>>>,,,,,,,,>73>,-3gg111XX;11;71fg17nJEYJJKJKIJJKJJJBHJJJPIIIIIIPBBHHNzcSFc-,>222>>,2222222233222222333322222222222222222222>>222222222333332222222>333222>>222222>>2222222222222222222332,,;;;.XX..X.6vclxzLYEYWLxhhzYRTEETT^!ET!!!!TIIT!EPKIIIITTREEYYEEEEIETTEYERYYIIIIYYTEYIIIKKEKWKYRKLYLHWYLHLHJKJJJHBBzzHHzxzhhxHzccllch8lBx8zBJKJBBHHHHHHLLLKKKHh9czFKYWWYYWYWWWWWWWWWWWWWWYYYYYYYYYYIIYYYYYIIIIIIIIYIIIIIPPKKJJJJHBBBBBBHHHBHHHHHBzzzxch89+h8996999vhxHKWWYKYYIIIJBKJKKIIIIIIYTTTTTTTTTRRRRTTTTEEYYYYYYIIIIIIKKKKKKJJJJJJJJJJJLLLLLLLLLKKKWWYYEEEEEYYYWWWYYKKKLKKKWWWWWWWYYWIYYYEETTT!!!!!!!!^^^^^^^^^^^^!!!!!!TTTTTTTTTTTYIPPPPPPJJJJJJJJJJJJHJKIKIIKKLHHHKKYYYYKKKLLLJKKKKKKKKKKLJJJLJLLLJKKKKKKKKIIIIIIIYETR^^RREER}YIKHzBBxBEIJKLKLHzxxlcc91;-3>:::::::>>>>>>>>:>>>>>>>", ">>>>>>>>>>>>>>>>::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::,,,33333>>>>>>>>>>>,,,,,>>>>,3333333333333333333>>>>>>>>,,,,,,,,,,,,,,,,2>5>37,-1XfLWLLWKKIKKJKKEERYTYRRFSSSSSxxllchhcchFlgf97;X----->37,,,,,,,,-3>>>X>cWFKYFlhgX.1XX,--9hLEYYYKIHzBKKHHIEEIIT^^TIPJJHBBxzzcLRx1,>222>>>2222222233322222332222>>2222222222222222>>>2222222233333222222>>333222>>22222>>>222222222222222222223,,,-7ghhhlxLLKEREYYEEIKJHHBJPEEETTRYTEET!!!TUUYTIJBIETRRRYIYYYYYERREEEEYYYYYYIKKKIIKIKKJKKLHJWWKKWWYWKWYWKKJKIKJHHHHBBBBxcxxxHKJHHzHLKHNHKKKKIYIKKKzzHLJJKKKKLHlhxFLWWWWWWWYWKWWWKWWWWKKWWWWWWWWWWWIWWIYYYIIIIIIPPPPPPPIIPPJJJJJJHBBBnnBBBHHBBnzxxxchhh89++h8hhhcxzlxFLLKWWKKKWKHHHYYYYEEEYYETTTEETTTTRRRRREEEEYYYYYYYYYYIIIIPKKKKKJJJJJJJJJJJJLLLLLLLLLKKKKWWYYYWWWWWWWWWYKKLLKKKKKKKKKWYYYYEEETTTR!!!!!!^!!!^^^^^^^^^!RRR!!TTTTTTTTETTTIPJJJJJJJJJJJJJJJJJJJHLJKJJJLLLLKKYYKKKKKKKKKKKKKKKKKKKKKKKJJJLLHHLJJJJJKKKIIIIIIYEEEETTEYRIIIJKIYBBIIYRYKxzzHzlx|xxlg11-3>::44444,,>>>>>>>>>>>>>,", ">>>>>>>>>>>>>>>>::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::33333333,,,,,,,,::::::::,,,33333>>>>>>>>--:>,333>>>,3333,,,,,,,,,,,,,,,,>>>>>>>>33333333>>>>>>>>72>3ff7;;7SRREEWET!!TIIIIIIYT!TY(((((REWWWWKWEEWRWLWRWFllcgf7>>5,,,,,,,,>>:fcf7gLHWRE((WSxSSc7,799zRRYYYKKYJKIJYTTEIETTT^IJBBBBnJzxzFS9-,>222>>>222222223332222222222>>>2222222222222222>>>222222223333322222>>>333222>>22222>>>222222222222222222223,,,cSY(EYE(TYIIIKKKJKKIIYTTTTEYTRTE!TT!!TT!UTTTIJPYTEYETTEEYEEREEYYYYWWWWWKKWKKJJJLLKKLLKKKLKKWWKWKEEEIWYEYTYIIIKKJJIKHHHHBzzSzlxzzKLLKLLKLIKHHHHHHHHKKKKKKWWLLzxHLWWWYYWYYWWKWWWWYWWWWWWWWWWWWWWKKYWKWYYIKIIIIIIPPPPPPPPJCBBHHJJHBBBzzzzxxBzxchhhhh8899XXX06hzzzxxzHLLLWWKKLLKHxzKYEEEEEEETTTTTET^RTRTTTEEEEYYYYYYYYYYYYYYIIPPKKKKJKKKKJJJJJJJLLLHHHHHLLLKKKKWWKKKKKKKKKKKKKKKKKLLLKKKKWYEETRRRRR!!^^^!!^^^^^!!!!^^^^RRRRRTTTTTTTTYIYYTYIPJJVVJJBBJJKJJHHJHJJLLJJBLLLLLKKIYYKKKKKKKKKKKKKKKKKKKKKKKKJJLHHHKKKKKKKKIIIIIYEEEEEETRTEYIIJJJBBIJPBBTYHHnc||zxlchh6.1-->:4444443,,>>>>>>>>>>,,,", ">>>>>>>>>>>>>>>>::::::::::::::::;;;;;;;;>>>>>>>>444444::::::::::;;;;;;;;<<<<<<<<<<<<<<<<.--;--;;444444444434434:444344444434:444,33-3:3,3-37--3:1;;1119glc9XXXXX.1.;;X;X;51>-->3111;;,>>-7->3-7:3:::333:233::33:1;-27f7257gclSWEEEERRTR^^!TTTIPJKIIHzzJYEYYIIKHzBJKIIITTTKLKHh6X;;11XXXX+hhcHEJcqhLnHYTHJKYEIJJKIIIKJJJKKJJJKPITTIIIT^!TEIJHHHzxxLKxWx;->>:,,,,,2222222222222222<<,,,,,,,,,,,,,22222222222222222,,,,,,,,>>>,,,,,,,,,,,,223322222<<.-<7,;;,,2373-1;11XXhHEEIPPPIPIJPR^TIIKIIETEETIIYYEEEETTEEEEEEIIIIIYTTITTIKIYIYYIIIIIIIIIKKKKKJJKKKJJJJJJJKKIIIIPIYYIJIIYTTTTTYYYIIIIPPPKJJJJJJJHBBBBBJPPPCPPPPPPPPJJJJJPIKKKKKKKKLLLLKWWWYYYWYYYYYYYYWYYYWWWWKKWWIIIIYIKIIYIIIIYYIIIYIIIIIKKJHHHHHHBnBBnzxxcchh999vhhh9v9XX1XXX9xzxzLLHHLLHHLNLJJKYKLLKYYIYERYTTTRTEETEETRREEEEYYYIIIIIIIIIKKIIKKKKKKKKJJJLHHLLLLHHHHHHHHHHHHLLJKKKJLLLLLLLLHLLLLHHLJKKIYYEETT!^^^^^^^^^^^^^^!^^^^!!!^^!!!!TT!!TTTYIIIYEEYIPJJJJJJHBBnBHHHHHHHLJJKIKJJLHJKIYYYYIKKIKKKKKKKKKIKKKKKKKKJJKKKKKKKKIIIIIIYYYIIYEEYYEEEYEETJBKJJzzIYzxzxHLxxSFSWYHgf7,<-<<<<<<<<<<222222222222>>>>", ">>>>>>>>>>>>>>>>::::::::::::::::;;;;;;;;<<<<<<<<4:::::::::::::::;;;;;;;;,,,,,,,,<<----<<7,,,,,;;444444444444:-4733::::433:433333-::3,3:-:--:-:3:X11XX9xWLWWShg9969ghchg9f717771-XXXXX;;;1-;>::--3::3,-:7,--77:-3X;;-->552->gSLLLLzlxFLJKJKITTTIPKKJJKT^)`_TIIIIY^^^TTIIIKLJIEIJLxSLSv1169lHKIETTnxITTIKKBHJKJHHJHHJJJJPIJKIIPPIITTIPIET^IJBnBHnzzLzLlXX7;>333,:-2222222222222222,,,,,,,,,,,,22222222222222222222,,,,,,,,>>>,,,,,,,,,,,,223322222-<,<<<,,<,;-X-;1.;XX6hBKIIIIIIPPIIIEIJBHKIIIIIEEIIIYYYYYYYIIIIIIIIIETEIIIYEIKPIIIIIIIIIIKKKKKKKKKKKKIIKKKKKKKKIIIITTTEYIIIIETTTTTTTTEYYIEEYYYYIIPPPJJJJJPIUPPPUPPPPIPPPPJKKKKKKKKKKKKKKKKKWWYYWWYYYYYYYYYYYYYWWYKWWWIIIIIIIIIYIIIIIIKKIIIIKKKJJJJJJJJJHHBBnzzzzzllccchhv99v969v919hzFHHLLLLJLLLLHJJLLKLHHLKKKIYEETTEREYEYYETRTTEYYYYYIIIIIIIIIKKKKKKKKKKJJJJLLHHLHHHHHHHHHHHHHHHLLLHHHHHHHHLLLLLJJJJJKKIIIYETTRRT!^^^^^^^^^^^^^!^^^^^^^^^^!!!!TTTTTTEYYYYYYYIPJJJJJJJBBnnBHHBBHHLJJKKKKJLLJJKKIIYYIKIIKKIKKKKKKKIIIIIKKKKKKKKKKIIIIYYYYYYYYYYYEEEEYYIIYERIHBxHHJzJBzHxllxlxlhch7773,--:,<<<<<<<<2222222>>>>>>>>>", ">>>>>>>>>>>;;;;;::::::::::::::::::::::::>>>>>>>>::::::::::::::::--------::::::::------------;,>;3334::--3::333::3,3333::,--,3::,1,-7X;-;;-X-,1;-1.XXhLREWWWYR}(EKKHLKW((_EWWWWSlchhxFScggfFFcf.7---------37;----.11,>2327--fhcclFHKEEYIIYYT!^^^^)__)[[_RHLKYTR^^!!TTTTYYRTTTRRYIRYWYWKHxzzxzLJHBBBIKJJHxznHKIKJJJJJJJJJJJKKHBJKKIIIIKKKIYKLHHHzzLzzz97-;332::3372222222222222222,,,,,,,,,22222222222222222222222>>>>>>>>>>>>>222,,,,222333222222:333>-;,.;179f99.9ghzWIHKIIIIPPPJJHBxxzHIIIIIIIIIIIIIIIYYYYYYYIIIIIIEYIKKKKKJJJJKKKIIIKKKKKKKKKKKKIIIIIIIIIIIIIYIETTTTTTIIIYTTTT!!TTTTTTYEETEEYYYYIIIIIIIUUUPUUPIIPPPPIIPPKJJJKKKKKKKKKWKKWWWWWWYYYYYYYYYYYYYYYYWWIIIIIIIIIIIIIIIIIKKKKKKKKJJJJJJJJJJJLHHBBzzzzzzxxxxlcchhcchhclhczSHHHHLLLLLHLJJJLHHHHHHLKKKWYEYEEYEEYEIYETTEEEYYYIIIIIIIIIIKKKKKKKKKJJJJJLHHHHHHHHHHHHHHHHHHHHHHBzzzzzBHHHHLLLKKKKKKIYYYETRR!!^^^^^^^^^^^^^^^^^^^^^^^^^^!!TTTTTTEYYIYIYIIIIPJJJJJJHBBBHHJJHHJJHJKKKKKKKKIIIIIIYYIIIIIIIIIIKKKKIIIIIIIIIIIIIYYYYYYYYYYYYYYYYEEEEEYYIYYEIIKBhchczHzzzchc91;.XX;X----<<::<<<<<<<<>>>>>>>>>>>>>>>>", ";;;;;;;;<;;;;;;;:::::::::::::::::::::::::::::::::::::::<<<<<<<<<:::::::::::::::::::::::>33333333>>233333>33>>33----;,,,,7,-,,-X;;.;769fghhhlLWWWlxlxLRRWYYWKLKWWKKHLKKRRWKKWYYWKRWLKWWWWFcY}EWlllxlcllg1..;17gf991.-;>;>>;1166gczLYYLBJETTT!!^!!EYIJLJKKBBzzNHKIIIIETTTTRRTEEIJHSxzzSHHzHBzzzzNHKzBHHznHHBzHJJJKJJJKIIKJJKJBBJKIJPIIIJJHJLHHHHHHKSHhX11322>>:>23>>>>222222222222,,,,,22222222222,,,,,,,,,,,,,,,,22222222222223332222222222222222344373,,flHWYEWLLLWEEEIIKIIKKKIYKHzxzHJKIIIIIIIIIIYYIIIYEETTEEYYIIPPPIPKKJJJJJJKKIIIIIIIIIIIIIIIIIIIIYIIIIYYYYYEIKJJKIIIYYIYETTTTTTTEEETETTTEEETTTTTTETTIIIIIIIPIIIPPPPPPPKKJJKKIWWKKKKKKKWWWWWWYYYYYYYYYYYYYYYYYYIWKKKKKKWIKKKKKKKKJJJJJJJJJJLLHHHHHHHHHHBzzxxxzxxxxxxxxlxzllxzxHHHLHzzHLHHHHHLLHHHHHHLFHLKKWIYIYYIEEYEYETTEYYYIIIIIIIIIIIIKKKKKKKKKJJJJLLLHHHHHHHHHHHHHHHHHHHHBNzzzzBBBBHHLJJKJKKKIIIIIIETTTTR^!^^^^^^^^^^^^^^^^^^^^^^^!TTTTEIIIIIIPKKPPKJJJJJBHHHBBBBJJJJJHHJHJKKKIIIIYYYYYYYYYYIIIIIYIIIIIIIIYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYIIIYYYTEYLhhhlhxFLFh1X1-;1;<1;--::::::::::::::::::::::::::::::", ";;;;;;;;<<<;;;;;22222222::::::::::::::::::::::::::::<<<<<<<<<<<<::::::::::::::::444442225>>>>>>3,111;;;;;;,;--;71;.XXXXX...7gcxLKLWWEYEEEEWWEEKLWYYWKWWYKKWYYEEYJKJKKJJHJKKJHHHHKKWWLHLKENKYWWWWWWLKWWFlfX1x((((Rzf71XX1XXXX1gcllxlcccxzHJITTTIPJJHBzBJIHBzxlxzHYETTRTTTEIIYYKKKLLKKHHLLzJKKKJJKKHBBzBJKIHxxzBJIKKIIKKKKKKKIYYYYIIPKIIKJKJHHnzHKKl.X;X7-5>3773>:;>,,,,>>>22222222222222222222444,,,,,,,,,,,,,,,,2222222222222222222222222222222244423>;1XcWYKKIIEWKKJHHKKKKKKIYTYYKKYEYKJKKIYYYYIIYYIIIYIIIYIIIIPPKJJJJKKJHJKJKIIIIYYYIIIIIIIIYYYYYYYYYYIIYYYYYYIKJJIYYYEYYYETTTEEYIIIIIEEYIIIIYTEYYYTTTIIIIIIIIIIIIIIIPIPPKKKKKKKKKKKKKKKWWYYYYYYYYYYYYYYYYYYYWYYWKKKKJJJJJJKKKJJJJLHBBzzzzzzzzzzzzzzBBBBBnzzzzzzzFNzxxxlxzFzHHzHHHLHzHHHHHHBHHHBBBHHHLzHLJKKKIIYIIEEETETTEYIIYIIIIIIIKKKKKKKKKKKKKKJJJLLLHHHHHHHHHHHHHBBBBBBBBNNBBBHHHHHLJKKIIKIIYYIIIIIETTTTTTTTT!^^^^^^^^^^^^^^^^^^T!TTTEIIIIIPKJJHBHHHBBBBBBBBBBBHHHJJJHHBBBJKIIYYYIYYYIIIYYYYYIIYYIIIIIIYYIYYYYYYYYYYYYYIIIIIIYIIIYYYYYYIKKKKKWWIYWWEYxh9vhgf99717>--,;---3,::::::::::::::<<<<<<<<<<<<<<<<", "<<<<<<<<<<<<<<--2222222222222222:::::::::::::::::::::<<<<<<<<<<<::::::::::::::::444432223332>;>>X...XXX.;X.fh7XXX6vhlxxzSzxxFLW(EEELYKWKEEYWYYKHYLHLKKKKIKLKEEKBHJBHHBJHBBBBBHHLKKKKKKKWWKWWFxHKHzzLKHHKKxlLYWKWEKWYLcf9ghhvhxzxxxxxxxxxzBJPIPPJJJJKKJHHIYIKHzlcYETTTTTEREIIIKKIYKKYETYKJKLLIYLzBIBxxHKBKHzzzBBLKIYKBzHKIJJIYYIYIIJJKIKJKJHzzzJEYKSlc1;.;;--->>2;;;;,;;;,>>222222222222222222224,,,,,,,,,,,,,,,,222222222222222244442222222222>>4422>--1XlYEIIIPYYYIIKKJHHLKKIYYYYYYYYWKKKWYYYWKKIIIIIIIKKKKKKKKJKPKJHJJJJBJJJJIKIIIIIIIKKIIIIYYYYYYYIIIIIIIIIIIIIIYYYYEIIIYETTTTTTTTEEEIIIIIIIIIIIIIIYYEYIIIIIIPIIIIIIIPPPPIPKJKKKKKKKKKKKKWWYYYYYYYYYYYYYYYYWKWKKKKKJJLLLLJKKWLLLLHHBzxxxxxxxlxxxxxxzzzzzzzzzzzzBHHzxxxxxzHHHHHHHHLHHLHHHHHHHHHHHBHHHHHHLJKKKKIYYYEEYEEEYYIKIIKIIIIKKKKKKKKKKKKKKKJJJJLLLHHHHHHHHHBBBBBBBBBBBBBBBHHHHHJJKIIIYYIETTTTTTTT!!!!!^RRR!^^^!^^^^^^^^^^^^^^RTTTTEIIIIIIPPKJJJHHHHHHJJJJJJJJJJHJJJJHBBHJIIIYYYIIIIIIIYYYYIIIIYIIIIIIYYIIIIIIIIIIIIIKKKKKKKKKKKKKKKKKKJKKKKKKKWEKLLlchcf6;.-;->3>---:37::::::::::::::::<<<<<<<<<<<<<:::", "::::::::,,,:::--2222222222222222:::::::::::::::::::::::::<<<<<<<::::::::,,,,,,,,222222222;--;;;;79fghclxSxzKEKxhHKERRYWKRRYKEYLKJYKBKILJKIIKLJKJKKYYKJJIYEYIJHHLBHHJJBJHJHBzzzxxBJIETEJzLLLJKKLzKLHLLHLKKKKHFHKKLHLWWLKYWWWLHHLLzzzzzzBHBBBBBBBHIJJKKIIIKKIIIKKKKIIYYEEEETEIIIIIIIYYKKKJLJJHJKKKKKzJHBBHNzzBBzxxzBHHHHKIKJLJKKIIKKIIKKJHzzzzBHKRYKREERSxgf71;;;1;;;;;;;,,,,>22222222222222224444>>>>>>>>>>>>>>>>222222222222222244444222222>>>>>322ffghhzKTR^^TIEYKHHLHBLHHKWKKKKKKKLLKWYYYYYWJLKKKKKKKJJJJJJKKKJKPPKJJJJJJJJJJJKKKKKKKKKKKKKIIIIIIIIIKKIIIIKKKKJJJJJJJJIIIYEEYYTTTTTTTEIETTTEETIIIIIIIIEYIIYYIIIIPPPPIIPPKPPPKJKKJJJJJJLLHHLJKWIYYEEYYIYIIIIKKKKKKKKKKKJJLJKKKKJLHHHHBzxxxxxxllllxllxxxnzzzzxxxzzzzzzzzzzzzHHBBLHHHHHHHHHHHHLHHLLHHHLHSHLLJKKKKIYYIYYIYYYIKKKKJJJKKKKKKKKKJJJJJJJJJJJLLLLHHHHHHBBBBBnnzBBBBBBBBNBBBHHHHJKKIIIIYETTTTTTT!!!^!!!!^^^^^^^^^^^^^^^^^^^!!RTTTTEYYIIIIIIIIPKJJJJJJKKKKKKKKKKKJJKKKKKJKKIIKIIIYIIIIIIIKIIKKKIIKKKKKKIIKKIKKKKKKKKKKKKKKKKKKLLLLLLLLKLLKJLHFFHHlcxFzShglgcggf33-2333:--::::::::::::::::<<::::::::::::::", "::::::::33222:::2222222222222222::::::::::::::::::::::::::::::::>>>>>>>>333333332222>>>;-.1fcSHLKKYYE()]R_EHzLWKTR^RYKKKTRYIEJchHRIIEYxxTETIBHJHKIEEYYERRYIKJJJJKIJJHBHHBBBzzzzBzJKHxxzBHLJNHKLJLJLBJEYJKJLKKKJLKJKKKKKWWWLLHLLLHBNBHHHBHHHHHBBBzBHJJHHJIIIKKKKKKIYYYIIYITRIIYIKIIIIJJJJKKKKIKJKJEHJHJJHHBBHBzzBzzzBKIKHHKKKKIIKETRTIKJKIKKYYKKIYIHIHKEWYWLSlg9111.X..11;,,,,>>2222222222222224422222222222222222222222222222222444422222>>>>,,,3--gSWWWEYKLHBBNnBHHLJJKIKLKWWKKKKKWYWWWYWWYWWKLJJJJJJLHJJJJJKKKKKKKIIIIJKKKJJKKKKKKKKKKKKKKKKKKIIIIIIKKIIIIIKKIIJHHJKJJIIIIYYIIIIIIIIIIPIETEIIIIIIIIIIIYIIIYYIIYIIIPPIIPKKKPPKJJJJHHHBBHBzzNHLJKIYYYYIKIKKKKKJLKKKKKKKKKKKKKKJHLHHBBBzzzxxxxxxxlxxlllxxzzzxxxxzzzBBBBBNzHHzBHHHHSHHzHLHHHBHHJLBHLLHHKLzHHHLLJJKKIIKIIKIIIKKKJLHHJJJKKKKJJJJJJJJJJJJJLHHLHHHHHBBBnnzzzzzzzzzzzzzNNNBBHHJJJKPIIIIIIIIIITTTTTTTTTTT!^^^^^^^^^^!TTTTTTEETTTEEYEEEEEIIIIIPKJKKKKKKKKJKKKKJJJKKKKIIIIYYYKKKKKIIKKIIIKKKKKKKKIKKKKKKKKKKKKKKKKKKKKKJJJLLLLLHHHHHHHLLLLHHzxllxxFzHWKKc9-X7777-::3:--:,3:::,,:::::::::::::::::::::::::::", ":::42244::4444::>>>>>>>:,,,>>>>>:::::::::,3,::::4444444:4::23:::,33>-->3-7>>>-7-,;;;;;;19lSLEYYERREYKWR_R}YYHzKLTRRRREIKYYKLzzzzJJIIIKIITTEYIIIIKIYETEIJJLHHHHHHJLHHHHHLLJJLJKHzHKKzxNHHLLLHJIYIcnITEIYERTYIKKKKIIWKKKKKKKLHHHNzzBLJLBBHJJHzxxzxBBHBBzBBKKJJJJKIKKKKKKIIIIIIKKIEIIIPKJJJIKKJJJJJLHBBBHHBBHHHHHJKIKKKKKKKEYKJJJHHHHHHBBHLLHHHHHHJBHHHHKKLKLKKWWWKWFlhf91.;;;1112>>23333222222332272>3722222222222233322233>>22->722>2333233>---;,.19vhhcllllxxzzzLHHHLLHHHHHHHLLKKKKKKWYYKKKKKKLLHLLHHHLHHHHJIYYIPIYYIIIKIIIKJJJJKKJJKKJJKKKKKKKIIIIIKKKKIIIIIIKKIIKKKKKKIIKIIYIIIIIIIIIIKIETTEEEIIIIYIIIYYEEYIIYEYIIIIIIIIIIIIIIPKJHBBBNzzzBHHHHJJLLLLLLLLLLJJKIKKYYYKKKKKKJJJJJHLJLHzHHzzzxxxzzxzzzxxzzzzzxzzBHLLLLHHHHHHHBBBHHzzzzNBNzHHHHHHBzNHHHHHHHLLLLLLLHIKKKKKKKKKYLHzHJJHzBJKKJHHJJJJJLHHHHJJHBHHHHHBzzzzzzzzzBzzzzBBBBBBBBBBBBHHJJJJKPJJPPPPIIEETTTT!!TTTTTTEEEETTTTTTTTTTTEIIIIIPPPKJKKKKPPKKKPPKKJJKKKKKKJKKKKKKIIIIIKKKKKKKKKKKKKJJKKKKKKKKKKKKJKKKKKKKKKKKKJJJKKJLLLLLLLHHHHHzxzzFHHHHHHLKHFLFlFx17,--3:-7:42:-,,,>-->33>->>:::>,,:::::::3:::::444", "22224::5::::::::->>>,,33>>>>>>>>:::::::::::::,33444433333:22:372---;11;--;;11,1-;..6glFWERWKKNLEIKYYYYRR_)RRYJYKRTTEYYYYYYIKJJJKJPITEIETTTEIIIIIKIIYEYKJBHHLHHBzLHHHHHHLHHHHLJLHzKYKLLHzLKKKKKKHnJIEEETRTEIIIIIIJJJLHHHHHHBBBHBBHHHHHHKYIIKJHHBBHHHHBBHJJJJJJJJJKKPIKKKIIKKJJJJJJJHHHJJJBnzznHHHLJHBBHJJBBHHHLJKLLHHLJKKKHzxxxzzxxzzNNHHHBHHHHHLBHBBBJKJKJJKKWWWKKKKKLSxgf1;-;;;73>;>237>>>>22222255222222223733:>>>>>2333237735>23>--;>X-;17fggccllxxzzFFFSSSSSHHHHHHHHHHHHLLLLWWWWWKWWLLLLLLLLHHHHHHHHHHHJKIIKPKIYYEYIYYYIIIIKKKJJKKKKJKKKKKKKIIIIIIIIIIIIIIIIKKKKKKIIIIYYYYYYIIIIPPIIKIIYYYEEIIYYIIIIIIIIIIIIYYYIIIIIIIIIIIIIIIPJJJJJHHLJJJLHHHHHHHHHHHHLLJKKKIYYYYIIIKKKKKKKKKJJLLLJBHHnzznzzBHBzBHHHHHBBHHJJJLLLHHHHHHHBBBzzzzzzzzzzzNBBNzxNHHHHHHHLLLLJJJJJLHHLJLHKJJBHBJKKJJJJJJHHHHHHHHHHJJHzxzBzzzzzzzzzzznnnnnnnBBBHHHHHHHHJJJJJJJJJJJJJJJJJJKJJJJJJPPKKPPIIIIIIYYYYIIIIIPPPKJJJJJJKKJKKJJJJJJJKKKJJJKKJKKKJJKJKKKKKKKKKKKKKKKKKKJJJJJKKJJJJJKJJJJJJJJKKKKKKKKKKKKKJLLLLLHHHHHLLHFzHLLJLLLLHHLzxzFFHl.X-7::3----:33;-<-;,,;;;,,,,,;;;-,,,>::::3225::42", "5:>>222222222222>;;-----;>>>>,,,---:>>>>:::::>>,24::42>:3:33-,7-1;.....X7;;.;;X;169lLEYKKYY_)IKTYYERETRER_ER_EEIIKKJJKKIIIIIIYYYIIETEYYEYYYYYYIIYYYIWKHBxzHLHHzzHHHHHHHLLLHHHzxlczLLLKWKKKIIIKHnznBBHJJJJJJJJJJJHHHHHHHHHLJJHHHHJLJJKKIYYYYIKKJLJJJHHHJKHJJKKKKKPIIIIIIIJJJJJJJHBBBHLJJLBzzBLKKKEEEWLHBzHHHHBNNNzzzzzNBBBzzxxzxxzzzBBNBHNBHHHLLHHHBNNBBBBzzzzzNzzzzzxxlclcggggf9,;----;>33,>>>>>2772522537325523,,,,37733>---,;--;;;117779ghclxxzxxxxzzzzzzzzzxxzzBBHHHHHLLLLLLLLLLLHHHHLLLLLLLLLJKJJKKKKKKIYEEEIJJKIPJJIIIIIIIIIIKKKKKKJJKKJJJJKKKIKKIIIIIIIIIIKIIKKKIIIYEYYYYEYYYIIIIYIIIIIYYEEEEEYIIIPIIPPPIIIIIIIIIIIIIIIPPPIPPPPKKKKKKKKKJLHHHHHHLLJJKKKKKKWIIIIKIIKKKKIIIKYIKKKIKKLJJJLLLHHLLHHLJKKKKJJKKKKKJJJJJJHLJLHHBBNzzzzzzxzzBBBzzxBHHHHHHHHHHHHLLLHBBBBHHBLHHnHHJJLJJJJHHHHHHHHHHBHHHzlcxzzzzzzzzzzznnBBnnBBBHHHHHHHHJJJJJJJJJJJJJJJJJJJJJKKKKJJJJJJJJPIIIIIIIIPPKPKJJJJJJJJJJJJJJJJJJJJJJJJJJJJJKJJJKJLLJJJJJKKKKKJJJJJJJJJJJJLLLJJJJJJJJJJJJJJJJJJJJKKKKKKKKJJLHHHHHHHHHHHHNNHLJJJKKKHHFLxllllllf-,3,:-7377;....;;;..XX.....;;11-;;;,33355>>2233", "333>>>>>>>>>>>>>1,,,,;;;;;;;;;;--------;,,>>>>-->>>>>>33,-7,-flcSFFSxllxhgchhcggzLWYLNzNKLzLYKE_EYEREEEYE^ER_RYKKKKKKKKKKKKKIYYIIIYYYYYYYYYYYYYYWKKLHNzxzzFFFFSSHHHHHHHHSzSLLLzzxzSzzHLJJJJJJJHHJJJJJJJJHHHJJJJJJJJJJJJJJJJJHBBnBBHHJJJJKKIKKKKJJJJJJJJKJJJHHJJKJJJJJJKKHLJJJJJJHzzHJKLHzzzHJIYYKYEYIKJHHHBzzzxxzzzzzzxxxxxxxxxxzzNHHNzNzHHHHLLHNBNNNBBBBBzxllcchhgyygghlllxxxlcSxlhf7-X,;;;1333->323773-->>3>--<;-;;;;-1,,1,;171119fgggclxSSFFFHFNNFNNzzzzzzzzzxzzzzzzFHHHHHFNNLLHFFFHLHHHHLLLLKKIWWIIWJLLJKWWKEKHJKJJJJKJJKIIIEYYIIKKKJKKKJJJKKKKIKKKIIIYYYYYIYYIIKKKKYYYYYYYEEEYYYYYEEYYIYYYYEEEEYYIIPPPPPPIIIIIIIIIIIIIIPPPPPPPPPPPKPKKKKKKKKKJJJJJJKIIKKKKKKKKJJJJKHJKIIIKJIKKKIYIKKIIKKIKKKIKJJJKKIIKKIIKKKKKKJJJJJJJJJJJJHHHHHNzzzBHHHBNzBHHHHHHHHHHHBBBBBBznBBBBHBHHJLHHBHHHHHHHHHHHHHBBHHBzzznBzzzxxxzznnBBBBBBBHHHHHHJHHHJJJJJJJHHHHHHBHJJJKKPJKKPPPKJKKJKPIIIPPPPPPKKPKJJJJJJJJJJJJJHHBBHHJJJHJJJJJJKJLJJJLLJLJJJJJJJJJLLLLLLJJJLLHHHLLLLLLLLJJJLJJJJJJJJKKKKJKKKJLHHHHHHHHHHBHBzBHLJJKKKKLHHxhhhccxLx7-;---3;gc91996.XX.9ff9761.XXXX...X.XXX111333>>", "---;;;;111;;;;11;;;;;<,,;;;;;;;;,,,,1111---;,111;;;;XXX.;X;.XcYR(}[])RYWHLKFHYYEHHHKYYKHIYKYTYYETR^_RR___)RERYKKJKKWWKJLKJJKKKKKKKIIYEEEYYYIKKJJHFNzzzxxzzzSFHFFSSFFFHHHzxzHKKLLHLHHHHHnHHnnBBBHBHHHHBBBHJJJJJJJJJJJJHBBBnzzzzxxxxxxzBBBBHHHJJKJJJJJJJJJHHBzxxxxnzzzzznBzzzBHHHHHzxzHHHHzxzzHLLHNHLJKKKLNzzzBHHHHHFzzzzzxxxllxzzxxxzzzzzNHHzNBzxzzzxxxxlhhhhhhhhhhhhccllllllllllllxxSSxl711;;.XX1-.-;--;777hllgf771111;.X.;;;167hclxxxxxzFLLLLLLHHHHHFFzFFFSzzzxxzzzzxzzzzzzzzzzxxxxxzzFFFFHHLLLKWYIIYYIYYIYYIKJIJHJKJJIJJJJKIEETTTTEYIIIIKKKKKIKIIIIIIIIIYYYIIIYYYIIIIIIIIIYYYYYYYYYYYYEYYYYYYYYYEEYYYIIIIIIIIEIIIIIIIIIIIIIIIIIIIIIIIIKKJJJKIIIIKKKKKKKKKKKJJJLLHHBBHHHHJJJJJHJKKIIIIIIYYIYYYYEEEIIIIIIIIIYYIIKKKJJJJJJJJJJJJJKKJLLLHHHHHHHBBBHHHHHHHHHHHHHBBBBBBBBHHHBHHLHHHHHHHHBBBzzzzzBBBBBzzzBHBBzzzzzzznBBBBHHBBBBBBHHHHHHJJJJJJHHHHBBBBNBJKKIIIIIIIIIIIIPPPIIIIPPPPPPPPKJJJJJJJJJJJJJJJHHBBBBBBHJJJJJJJJLLLHHHJHHLLJJJJLLLHHHHHLLLHHHHHHHHHHHHHLLLLLLLJJJJJJJKKJKKKJLLLHHHHHHLLJJLHHJKKKKKKJJHHhv99ghghDg91171XfL(YKEEKxxxzLKKLLLLLLHFFxlcchgf9.XXXX---", "11..XXXXXXXXXXXX...XXXX.........--------71;;;111169ghlxSxxSxlK))WKKWYLzxHLLxzKERYKNxxHYRE^__RE^^ER_)RR__RREYYKKKKKKKKLLLKKKKKKKKKKKKKWWWKKJLHHHHFFFNzzzzSSFHLLHFSFHFFHHFHzxxzFHNHHBHHJJHBBBBBBBHJJJJHHJJBBBHHHHHBBBBBBBBBnzzzzxxxzzznBBznBHHHJJJJJJJJJHHHHHBnzxxxxkkkxxxxlclzHHzHzxxzzFHHHHHHHNzHNzzzNzzzzzzHLKKHHHHHHSzHHSzzzzHzxxxxxzzzzxxxxccllllcchhhhcclxxzllllccccccchhhhcccccllllcchhhhhh9769ghcxlllSFSxxxxxxxlllccg79hcghxzNzxxxzzFFFzzzxxxxxzzzxxxzxxxxzzzzzzxzxxxxzzzNSHHLLLLLHHHHLJJJIYYYYYYYYYYEYWLNJKJKYKJKJKJJKIETETRRRTEEIIKKKKKKKIIIKKKIKIIIIIKKKKIIIIYYIIKIIYIIWYYYYYYYYYYYYYYYYYEEEYYYYIIIIIYTYYYYYIIIIIIIIIIIIIIIIIIIPKJJJJKKKKKJJJJJJJKKJJJJHHBBBBBBJHBBBBHHJKIIIYYEEEEYETTEEEEYYYYIYYYYYYYIIIIKKKKKKKJJJJJJKKKJLLLLLLLHHHHHHHHHHHHHHHHHHHHHBBBBBBBBBHBHBHHHHBzzzzzzzzzzzzzzxxzzzzzzBBnBBBHHHHHHHHHHBBBBBBHHHHHJJHHHJHHHBBBBNBJKKIIIYYYYYYYIIIIIYYYIIIPPKJJJJJJJJJJJJJHHBBBHBBBBHHHHJJJLHHHLLHHHHHHLHHHHHHHLHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHLLLJJJJJJJJJJJLLLJJJJJJJJKKKKKKIKIPJJJJJHchh9hhhhxhggff999lLKKKWIWYYYYWKKLKYRRRRRREEEYYWKHzch9966", "WKLFzxllllxxxxllcchhggggfffff99999999997;;17hxFKKKKWYYYYYEEYKYWLHzxxnzxxzKYYYEEKKLzHKEEYKYERYKYKKKYYKKKKWKKKLKKKKKKKLKKKLLKLLLKKLKKLHHLHHHFFFFFHHHHHFFSSFFHLLLLLHLLHHLHHzzxlxzHHJHBBBBBBHBBJJVVVHHHHHHHHHHHHHHHHnnzzznBBBBBBnnzzBHJJJJHBHJJLJKKKJJJJJJHHJJJJJHHHzzzxzzxxxlclxzHzFzxzzxxzzzzzzzzzzzzzzzzzzzzzzSFFzzzFFzzzzzzzzxzzHNxxxxxxxlcccchhhcclxxxxzzzzxxxxllcccccchhhcchhhcchhhhhggghlxFLLKKLHzxzFzxxxlclzxxxxxxxxFlg9gcllzBJJHNBHxxxllccclllllxzzxxzzNNNNNNNzzzzzzxxxzzNBzSHHHHHHHHHHLLLLKKWKKKKKWWYYEYWKKEIITYKIKKKKKIYYIYETTEEEIKKJJJKKJKIKKJKKKKKKKKKKJJKKKKKKKKKKKIIKWWYYYYYYKWYYWYYYYYEEEYYYYYYYIIIIYYYYYIIIIIIIIIIIIIPPPKKKKJJJJJJJJHHHHHHHHHJJJJJJHBBBnnBBBBBBBBJJKKIIIYETEEEYETEYIYYIYYYIYYIIYYIKIIPKKKKKKKKJJJJJLLLLHHHLLLHHHHHHHHHHHHFSSSHHHHHHBBBBBBBBBHzHzBzBzzzzzzzzzzzzzzBBzBHBBBHHBBBBBHHHHHBBBBBHBBBBBHHHHHHHJHHHJJHHHHHHBHJJKKKKKKKKIIIIIIYYEEYIIIIKJJJJKJJJJJJJJJJHBBBHBBHJJJJJJJJHHHHHHHHHHBBHBBHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHLLLJJJJKJJLLLLLHHHJJJJJJKKJJJKKKPKJHJKKJKKWLSxchg767996glzHHHLKIJKKYYYYEYETRRRTEIIIYETEEREYYYEEE", "EEEERR}_RR}}}}RR(((REEEEYWWWWLLLWWWWLLLLWLSSSLWWLLLLKKKLKKKKKWLNzxxHJKKKHKLKKKEYLKKLLLLLLH|LLHKLKLLLHHLLLFLLHHLHLLHHHHHHHLLLLLLLLLLHHHHHHHFFzFFFNFFFFFFFFLLLLLLKLKKLLLLHHLLNzHHHBBHJHBBBBBVJCVVCHHHJJHBnBBBBBBBHBnnzzznnnnnnznnnHJJHJJKKKIKKKKKKKJJJJJJJJJHHBBHHBBBBBBnzBnzxclxzSzSHSxlxxxxxxzHHHLKLHFzzxzzzzxxxzzzzzzxxzxxxlxzFLNxlcclxxchhchccccccllclcclllllxccccccchchhhcccccchhhhhghclxSFHLzLKLzxzzxhhczNxllxxzxxzzxg9hlclFBBNBBzzxzzzzxxzzDxxlllxzzNNNNNNNFFFFFFSSzzxxxzNNzzzzzzHHzzzBHHHBNHHNNNBBzzzNHKWWHKHBIIJIIIIIIIIIKIIYIIIIIIKKKKKKJKIIKKKIIKKKKKIILLJLHHHHJKKKKKKKKWWYYYYYYYYYKWYEEEEEEYYYYYYIIIIIIIYIIIIIIIIIIPPPPPPJJJJJJJJJJHHBHHHBBBBBBBBBBBBHBBBBnznBznBBJJJKJJJJKIIEYYYYEEIIIIYIYYYIYIKKKKKJJJJJHHJJJJJJJJJJJJJLHHHLHHHHHHHBHHHBBFzzHHHHHHBBBBBBBBBBzBzHzBxxzzBBzzzzBBBBBBBBHnzzzBBBHHBBBBBBHHBBBBBBHHHHHHHHHJJJJJJJJJHHLLLLHLJJJKKIKKKKKIIIIIIYYIIPIIIKJJJJJJJJJJJHHHHHHJJKKKKIIKJJJJJHHBBBNBBHHBzNBBHHHHBBHHHHHHHHBBBBHHHHHHHHHHHHHHHHHHHLLLLJKKKKKJLHLLHHBBHHJJHHHHHHJJKJJJJHJIIIxxzHKWWLxzzxLWLLHLHzHKJBLHHLKYYYYIKKKKIYIIPIIIIKKKKYETEY", "KKYYYYYYYYYEYYIKIIWWWWIYKKKKKJJLKLLKKWYYYWKWYRR}RKBzzzHJLJKKKLHzFFFFHLKWLLFzzFHLHFFFFFFFHHHFFSSSFFFSSSSSSFHHHFFFFFFHHHFFSFHLLLLLHFFFFHLLHHFFFFSSzzFzzzFHHLLKKKKKFHLLLLLHHHHzzzBHLHHHHHHHLJJKKKKKKKKJJHBBzBHBBnBBnnzzzzzzznBBBnBBHHHHJKKIIIKKIKKKKJJJKKKJKKKJHHHHBBBBBHJKKJHNzzzzLHzzxzzNHzzxxzxxzzzzzzzFzzzzzzzzzzzzxlcccccxFHzxccchccclllllllcclccccllcccccccccccccclllcclllccclhgcchhcclxzzzzzNxxzKlNzxxxzzxzzzzxxzzzHxzxxznzBzzxxNNzFLFzxxlllccxxhczzLLLLHHHHFFSzzxxzxxxxxxxxzzxxzzzzxxzxxzzxzBHNxxzHNLHllNJLIIIIEYIPIIIIIPKJIPPIIYEEIIETEIPJKKIIIIIIYYYEYYIIKKKKKKJJJJJJJJJJJJKKKKIIIIKKKIIIIIIIIIIIIIIIIIIIIIIIIIIIIIPPPPPPJJJJJJJJJJJJJJBBBBBBBBBBBBBBBBBBnnBBBBBBBBJJPPKJJJHHHHHHJJJJJJJJJJJJJJHHHHHHBBBBBBBBBBBBBBBnnnnnBBBBBnzzzzzzzzzznnnBBBBBBnnnnnnznnnnnBBBnnBBBBnnnnnnBBBBBBBnnnnnzNNBNNzzzzBBBHHHHHHHHHHHHHHHHHLLJJJJJJJJJJJJJJJJKKKKKPPPIIIIIIIIIIIIIKKKKKKKJJJKKLLJKJLHJJLJKKKKIKKKKKJJJJLHHHHHHHBBzBBHHBBHHHHHBHHHHHHHBBBBBBBBHHHHHHHHBHHHHHHJJJJJJJJKJKJHHJJHHHHHHHLJHHSllzxzHzFSlxHHFzzNHLLLPPPPPKKKKIIIKKKPKKKKJJLLLJJKKKKJKKKKKLHHLKWYYWWY", "KKIIYYYYYYYYYYIKYIIWWIYYKKKKKKKKLLLLLKKKWKKKYERREWLHHNzNHHLLLHNzFNNNNFFFFFzzzFHLSSSSSSFFzzzzzzzzFFSzzzzzHHHHHFFFFFFFFFFFzFFHHFFFHHHFFFFFLLLLLHFFFFFFzFHLLLKKKKLLHHHHFzzxLLHHzzznBBBBBHHHHLJKKKKKJJJJJJJJJJJJHBBBBBBBnnnnznBBBBBBHHHLJJKKKKKKKKJJJJJJJJJLHHBBzzzzBBBNzzzzzzzBBNzzlxxzzzxxHFxlccccllxxzzSFzzzzzzzzzxxlhhhcHKLzchhhcccccccccccccccccclllcllcccllllccccccllllllllllllhghhhhhhhhhhcxFHLKKJNzzzzxxzxzzzxhhhclzxzxxBzxzzzzxzzzFzxlcccclHzHLHHLHHHHHHHLJSHFzzxxxzxxxxzzxzzzzFzzzlxxxxxxxzzzxxlxxlzHLY}_}RRTTIIIIIIYIIIIIKKKKKPPPIIIIIPKKKKKKKKKKIIIIIIKKKKJJJJJLJJJJJJJJJJJKKKKKKKKKKKKIPPPPPPPPPPPPPPPPPPKKKKPPPPPKKKKKJJJJJJJJJJJJJHBBBBBBBBBBBBBBBBBBnnBBBBBBnBBJJJJHHHHBBHHHHHHHHHHHBBBBBBBBBBBBBBBBBBBBBBBBBBBBnnBBBBBnzzzzzzzzzzzzBnnnnnnnnnnnzzzznnnnBBBBnnnBBnnnzzznnnBBBBBBBBBBBBBBBBBBBBBBHHHHHHHHHHHHJJJJJJJJJJJJJJJJJJJJJJJJKPPPPIIIPPIIIIIIKKKKKKKKKKKKKJJKKJJKKKJJJJJJKKIIKKKKJJJLHHLLHHHHHHHBzzzzzzzHHHHHHHHHHBBBBBBBBHHHHHHHHHHHHHHHHHLJJJJJJJKKJKJJJJJJBBHHHHBzLHHzzSxlzSSxxxzHxzHLLJKKJKKKKKKKKIIIIIIIKKKKJJJLLLJKKKJJLLLLLHHHHLKKKKKW", "KKKKKKKWYIKKKKKKKKKKKKWWWKKKKKKKLLLLLKKKKLHHHLLHLLLLLLHNxzzzzzzxxzzzNNzzzzzzNFFFFFFFFFHHFHHHHHHHFFFSzzzzxxxxxxzzzzzzzzzzzzzzzzzzzzFFFFFFHLLLLLLHHHHLLLLLLKKKKKLLKLHHHHHHHHHHHBHHBBBBBHHHHLJJJJJJJJJJKKKKKKJJJJJHLHHHBBBHHBBHHLHHHHHLJJJJJLHHHHHHHHHHHBBHHHHHHHHHKKKJHBBBBHHHBzxlzxxzzBzzzzxlchclzzHHLLLLzzzzzzzzllcchhclxxxchhhhhccclllllcccccllclccllccllllllcccclllllxxxxxllllchgghhhcghhhccxzHNHLLRFxxxxzFzzxHxhhcllxSHzzHHzBzNNNzzzzzSzxlxSFLNzHHLLHzFHLLHzzzFFFHHzzzzzzzzzzxxxxzxxzBHHHHBNNxzxxllccccclzKIITTTTIKPIPIIIJJJJIIIKKJJJKKKKJJJKKJJJJJJKKKKKKKKJJJHHHHHHHHHHHHHHLLLJJJJJKKJJJJKKJJJJJJJJJJJJKKKKKKKKKKKKJJJJJJJJJJJJJJJJHHHHBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBnBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBzzzzzzzzBBBBBBBBBBnnnnnnBBBBBBnnBBBBBBBBnnnnnnnnzzzzzBBBBBBBBBBBBBBHHHHHHHHHHHHHHHHLLJJJLLLLLLJJJJJJJJJJJJJJJKKKPPPPPIIIPPPPPPKKKKKKKKKKKKKKKKKJKJJKKKJKJKKKKKIIKKJJLHHLBBHHHHHBHHHBBBBBzzzzHHHHHHHHHBBBHHHHHHHHHHHHHHHHHHLLLLLJJJKKKKKKJKKKKKKKKJJJJLHzxcxzzSxczHSxzzxHLLLHLLLLJKKKKKKKKKKKIIKKKKJJLLLLHHHHLLHHHHHHHSzzHHLLLLLK", "HHHLLLJKLLHHHHHLLLLLLKKKKKKKKKKKKKKKKKKKWKKLLHHFzHHHHHHzxxxxxxxxxxzzFFFFzzzzFFzzzxxxxxxxxxxxxxxxxxxxxxxlxzzzzzzzxxxxxxzzzzzxxxxxxxzzzFFFFFHHHLLLHHLLLLLHLLLLHHHLLHFFHLKJHHHHHHHHHHHHHHHLLLJJJLLLJJLLJJJJHHHHJJJJJLHHHHHHLHLLJJJLHHHHHHHHHHHBBBBBHHHHHHHHHHBHHLLLKKKJJJLHHHHHHHBBHBzxzzzzxxxxxxxxzzFHHHHFzzxzzzzxllllcclllchhlllccclxxllllllcccccllhhxxccllllllccllllllllllllccllghhggghhcccclxzHLWWYHYzzzzzFFFFFHSxxSSSHSzzzSzzzFFFFzzzxhchhhhchcccccclllllxxxzHHHFFLKzlxzzxllxzxxxxzxxzzzBHHBzzzzBBBzzzNzxxzzzzJIIIIJJJJKIIYIIIIIIIKKJJKIIIKKKKJJJJJJKKJJJJJJJJLHHHHHHHHHHHHHHHHHHHHHHHLLLLLLLLJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJHHHHHHBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBnnnnnnnnnBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBnnnnnnBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBnnzzzznnzzzznBBBBBBBBBHHHHHHHHHHHHHHHHHLLLLJJJJJHHHHHLLLJJJJJJJJJJJJJKKKKKKKKKKPKKKKKKKKKKKKKKKKJJJKKKKJJJJKKJJKJKKKKKKKKJJLHHBHzzzBBBBBHHHHHHHHzzzzBHHHHHHHHHHHHHHHHHHHHHHHHHHHHHLLLLLJKKKKJJJJJKKKKKKJJHHHLJJJLxch99h9hchhhhhclcclzHLLJJJJJKKKKKJJKJJHLLLHHHHHHHHHHHHHHHHHHSzzzSHHHHHH", "zzHHHHHHzzzzzNHHFHHHHLLLLLKKKKKKKKKKKKKKKKKKKKKLLLHFzzzxzzzzzzzzzzzzzzzzzzzzzzzxxxxxxxxxzzxxxxxxxxxxxlllxxxxxllllllxxxxxzzzxxxxxzzzzzzzzzzzzFFHLFFFHHHFFFFzzzzFHLHFHHLLHHHHHHHBBHHHHHHHHHLJJLLHLHHBBBHHHHHHHHHHHJHHHHHHHHLJHHHHHHHHHHHHHBHHHHBBBHzzzHHBBHHHHHLLLJJJJJJJLHHHHHLJKLHHHHHzxzzzFFzxxllxxzzzzzxxxxxxxxllllccccllllllllllxllccllllccchcchhSFxxlllllllllllllllcccccclllxxxlcccclxxzzHLLKYKKHzzxzzxxlxzSSFFSSzzHFFHHHFzzFzzzxxzxxxlhhcchhclzzxlllxxxxlxzxzxxFHzxxxxxllxzxxlxzzxxzNHLJJJJKIYEYYYEKJBBBBBHJPITIIKKJJJJJJJHJJKKKJJJIIIIIKKKJJLLLJJKLLLHHHHHHHHHHHBBHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHLLHHHHHHHHHHHHHHHHBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBnnnnnnnnnnBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBnnnnBBzzznnnnnBBBBBBHHHHHHHHHHLLLLLLLLLLLJJJJJJJJJJJJKKKKKKKKKKKKJKKKKKKKKKKKKKKKKKKKKJJJJJJJLJLJJKKJJLLJJJJJKLJKKJLLJLLLHHzzzzxxxzzHHHHHHHHHHBzzzzzzzBHHHHHHHHHHHHHHHHHHHHHHHHHHHLLLLJJJJLLHHLLLJLHHHHHHHHLWYHNLKzcc9969v99hhhhcxHHHHHHHHHLLLLLLLLLHHHHHHHHHHHHHHHHHHLLLHHHHHzSFFSSzS", "zzFFSzzzzzzzSFFFzFFFHHHLLLLLLLLLLLLLLLLLHHLLLLLLLHFzzzzzHFFFzzzFFSzzxxxxzzxxxxxxzzxxxxxxxxxxxxxxxxxxxxxxllxxxxxxlllxxxxxxxxxxxxxxxxxxxxzxxzzzzNHFFSzzSFFSzxxxzFHLLLLLLHHHHHHHHHHHHHHHHHHHHLLHHHHHBHHHHHHHHHHHHHHHHHHHHHHHLJHBBBHBBBBBBHHHHHHHHHHBzxzBBzzJJJJJJJJJJJJJJHHJJLLHHHHHHHLJLHzHNzzSzzxzzzzzFFFxxxxxxllxlllllcchcccccclcccccccclllllccchllxFzlxlxxxxlllxllllllcclllxxzSFHHFFFzzxzFHHHFFFzlxFxFxlxxxxzzzFFSlchclLFSxllzzxlllclSzFzxllxxxzzzHKLFFSHKKLzxllxllllxFxlllxzxxxzxxnHBnzBHBBHHBHJKKKJJJKJBBzzBJJBJJJBBBIJBBBBBBHHJJJJJJKKKJJJJKJJLHHHHHHHHBBBBBBBBHHHBzBBBBBBBBBBBBBBBNBBBBNNNzNNNNNNNNBBBBBBBBHHHHHHHHHBBHHBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBnnnnnnnnBBBBnBnnnnnnnBBBBBBnnBBBBBBBBBBBnnnnnBBnnnBBBBBBBBBBBBBBBBBBBBBBBBBnzzzznnnBBBBBBBBBBBBBnnBBBzzzznnnBBBBBHHHHHHHHHHHHLLLLLLLLLLLJJJJJKKKKKKKKKKKKKKKKKKKJJJJJKKKKKKKKKKJJJJJJJJJJJLHHHHLLJJLHLHHLLLLJHLLLLHHHHHHHBzzzzzxxxzHHHHHHHHBzHHBzzzzzBBHHHHHHHHHHHHHHHHHHHHHHHHHHLLLLLHHHHHHHHBBHBzzzNHHHNNFHLHzzchchcvhxxxzxzFLLHNNFHFFFHHHHHHHLLLLLHHHHHHHLLLLLLLLLLLLLLLLLHHFFFSSS", "SFFFSzzzzzzzSFFFzNNFFFFFFFFFFHHHHHHHHHHHLLLLLLHHFxxzFFFHFFNzzzzzzzzzzzzzzxxxxxxxxllllllllllllxxxcccccccchhhhcccclcccclllclllllxxxxxxxxxzxxxxxxxzzSSzzzFHzzzzzzFFFFFFFFHHFHHHHHHHHHHHHHHBHHHHHHHHHHHHHHHHHHHHHLHHHHHHHHHHHHHHBBBBzzBBBBBBBBBBzzBBHzzBHHHHHHLHBBBHHHBBHHHBHHLLLHHHBzzzzzzzFzzzzzSSFFSSFSzzxxxxllxxxllllllllllllllclccccllllllllllllxxxxxllllxxxxxxxlllxxlllxxxzzSSzzzzSzzSFzxxxxzzzFHSzxzFzSFFHHSxxxlcccclFxlhvgcllcxxclzzzxxxxzSSzzlxFzxzzzzzzzFFHFzxlccxxlccllchzJJHJIKJKYIJJKKJPIIIYIIIPIIIIJHBBBBBBzznBzxxxzBBBHHLHHHHHHHHHHHHLLHHHBBBBBNzzNNBBNNNBBNzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzNNNNNBBBBBBBBBBBBBBBBBBBBBBBBBBBBnnnnnnBBBBBBBnnnnnnnnBBBBBnnnnnnnnnnBBBBBBBnnnnnnnnBBnnnnnnnnnnnnnBBBBBBBBBBBBBBBBBBBBBnnzzzznnnBBBBnnnnBBBBBBBBBBBBzzBBBHHHHHHHHHHHLLLLLLLLLLLJJJJJJJJJJJJJJJJJJJKKKKKKKKKKKKJJJJJJJJJJJJJJJJJJJJJJLLLLLHHHHHHHHHHHHHBHHHHHHHHHHHBNzBBBzzzzNzzzzNHHHLLLLHHHHHHHHHHBHHHHHHHHHHHHHHHHHHHHHHHHHHHHLJJLHHHHHHFzzzzzzxxxxxxxlccccxlxxzHNSllzHHHLSSFzzzFHFFFFFFFHFHHHHLLLHHHHHHLLHLLLLHHLLLLHHHHHHHFFFFFF", "FFFFFFHHFSSzzSSFSSzzzzzSSSSFFFFFFFFFFFHHHHHHHFFFFxxzFSzSSSzzzzzzxxxxxzzzzzxxxxxxxxllccccccccccclccccclllxlcccccccchhccclllxxxxxxxxxxxxxxxxxxxllxlxzSzzzFxzzSzzzSSFFFFFHHLLLHHHHHzzzzzNzzBHHHHHHHHHHHHHHHLHHLLLHHBBBBBBBBHBzzzzzzzznBBBBBzzzxxxzzzxxznzBHHHJHBzBHHHHHLJJLLLJLLHHzBBBzzzzzzNFFzzSFFFSFFzzxxxxxllxxxxxxlcccclxxxxzxzxxlcllllllllllxxlllllxlllllllllllxxxxxxxxxxxxxxzxxzzzzzxzzFFFFFHzHzFKFSLFxlllcgggglSFSSzxxlhhcccczFllzxxxxSSzxxxxxxzlclxxlxzSFFFzxxzxlzzzzxchhhcBJBHJJHKYIJJIIJIIIITTTYTEIIIIIPTTTTEIIIKJJHBzzzzBHHBBBHNBHLLHHHHHHHHHBBNNzzNBHHHNzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzNzzzNBBBBBBBBBBBBBBBBBBBBBnnnnnnnnBBBBBBBBBBBBBBBBBBBBnnBBBBnnnnzzzzzzzzzzzzzBBBBzzzzzzzzzzzzzBBnnnnnnnnnnnnnnnnzzzzzzzBzzzzzBBBzzzBBBBBBBBBBBBBBBBHHHLLLLLLLLJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJKKJJJJJJJJKJJJJJJJJJJJJJJJJJJJJJJJHHHHHHHHHHHHHBHHHzzzBBBNNNBHHHBzzzzzzzNHBBBBBHHHLLLJKKKKLHHHHHHHHHLLLLHHHHHHHHLLLJJJJLHHHHHHLJJJLHHHHFzzzxxzxxxxxlllllllNLzxzNLFLzcczzxFzxxxFHFzSzzzzSFFFFHFFFFHHHHHHHLLHLLLLHHLLLLHHHHHHFFFFFFF", "FFFSSSFFSSSSSzzzzzzzzzzzzzzzzzzzzzSSFFFFFFFFFFFFFFSzzzSSSSzzSzzzxxxxxxxxllxxxzzSxxxxxllcxxlllccccccccccccccccccccccccccccccccclxllllxxxxxxxxxxxxxxxzzzzSzzzSFFFFFFFFFFFFzFHFHHHHHBzzzzNHHHHHHHHHHHHHHHHHHHHHSzzzzNBzzNBNzBBBzzzzzzzzzzzzzzzzzzzzzzzBHHHHLLHHHBBBNBHLHHHHHHHHHHBzzzzzzzzzzzzzzzSSzzzzzzzzxzzxxxxllllccccclllxxxzzFFFNzxxzxxxxlxxxxxxxxxxxxSxlxxxzxSxlxzzxxxxxxzzzzzzzzFFzFzzFzxxzzSFFFFSzlchgg99gghcllxxzxxxxzzzzzzSFFzxlhcxxxxxxllxxllxxSSFHLLFSFzxxxzHHLLHHFzxxzznBBBBBHJJKJKIEYIIIIIIIIIIIIYYYIIIIERTEIIIYKJJIIYYJBNzzHHHHHHHHHHHHHHHHzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzNBBBBBNNBBBBBBBBnnnBBBBBBBBBBBBBBnnBBBBBBnnnnBBBBBBBBBnnnnnzzzzzxzzxzzzzzzzzzzzzzzzzzzzzzzznnnnnnnnnnnnnnnnzzzzzzzzzzzzBBBBBBBBHHHHHHHHHHHHHHHLLLLLLLLLLLLLLLLLLJJJJJJJJJJJLLLJJJJJJJJJJJJJKKKKKKJLJJJLHHHHHHHJHBBHBJHzHnzHHzzzzHLBzzBHBzzzBBNzxzzzzNHHHHHHHHHNBHLHLHHHHLHHHLJHHYIzLKKJLLLLKJLLLLLHHHHHLLLLLLLJJJLLHHHHHBBBHHHHHHHHzzzzzzzzxxzzzzFHFHLHFFHHHHxlchccxclcxcxzFzxzSzzxFFFFFzFHFHFFHFzFFHFzHHFLFFFFHHFFFFFFHHHH", "FFFFFFFFSSSSSSSzSFFFSzSSzzzzzzzzSSSSSSSSSSSSSSSSSSSzzzzzFSzzzzxxxxxxxxxxllxxxxxlxxxxllllxxxxxxxxllllllccccccccccccccccccxxlllllxlllllxxxxxxxxxxzxxxxxxxzSSSFFFSzSFFFFFFFxzzzNHHHHHHHHHHHHHHHHNNNHSSzzSSHzSHHHSzzzBzzzzzzzzzzzzzzBHHBzzzzHBBBBBBHHHHHHHHHLLHHHHHHBHHHHHHHHHHHHHzzNzzzzzzzzzzzzzzzzzzzzzzzxzzzxxxxllxxxxxxxzzzzzFFFFFzzxxxzzzSSSzxxxxxxxxxxxxxzxxxzSSzzxxSzzzzzzzxxzzNHHLLHzxlchcxHHFFSSxxg99ggggclllllllxSSzSFFzzzzxxxxxxxxxxllxxxxzzzzNFFFHKWWKLHHzzzzzzFFHHHHHHLLJLHHHHHHHHHJKIIKJKKPIIIIIIIIIIIIIKKIIKIKJKJHHKLKJHzzBzHHHHHHHHFFFFNNzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzxxxxxxxxxxxzzzzzzzzzzzzzzzzzzzzzzzzBBBzBBBBBBBBnnnnnnnnnnnnBBBBBnnnBBnBBBnnnnBBBBBBBBnnnnnnBzzxzzzzzBzzzzzBzzzzzzzzzzzzzzzzznnnnnnnnnnnnnnnBBBBBBzzBBBBBBBBHHHHHHHHHHHHHHHHHHHHLLLLHHHHLLLLHHHHHLLLLLLLLLLLJJJJJJJJJJJJJJJJJLLLJJHHHHHHHHBBBBBBzzBJzHzzHBxzHHBzzzBzzzzzzzzzzzzzzBHNLHHHHHJKJKKJJKJHHHHHHHHHHLLLHLLzKKYKKKJLJJLLJJJLJJLLJJJJJJJJLLLHHHHHHBBHHHHHHHHHNzzzzzzzxxxxxxxzLKKKLKKKLKFFFzFzFHKLHxllllllxxSFzxxzFFFSSFzzzSFHFLFSFFzFHHHHHHHHHHHFFFFF", "FFFFFFFFFFFFSSSSzSSSzzzSSSSSSSSSFFSSSSSSSSSSSSSSzSSFFFFFzxxlllllxxxxxxxxxxxxxxllllllllxxlcccccccccccccchllllllllllllxxxxxxlllllxxxxxxxxxxxxxxxxxxxxxxxzzFFSFFSzzSSFFFFHHHLLLLLHHHHHHHHHFHHHFzzzzzzzzzzSSzzzSzzzzzzzzzHHNzzzHHHLLLJJHHHHHHHHHHHHHLLHHLLHHHHHHHHHHHHLHHHHHHHHHHHHzBBzzzzzzzzxxzzzzzzzzzzzxxxxxxxxzxzzzzzzzzzzzzzzzzzzzzzzSzzzxxxxxxzxxxzzxzxzzxxxxllxxlccxlllxxxxxxzHLLLLLWHxlllxzxzzxlhf699fhccclllllllxFFFFFFFzzSzzzzSFFFFzzxzzFzzzzzzzxzxzFLLHFHHHHHHBBxzzzzzzzHHHBzzznBBBHBBBBHHHHJJJKJKKKKIIIIIKJJKKJIKLLLHBBzzzxxzNNzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzxxxxxxxxxzzzzzzzzzzzzzzzzzzzzzBBBBBBBBBzzBBBBBnnnnnnnnnnnnnnnnBBBnnnBnnnBBnnnnnBBBBBBnnnnnnnBzxxzBzzBNxxzzzzzzzzzzzzzzNzzzzNzzzznnnnnnnnBBBBBBBBBBBBHHHHHHHHHHHHHHHHHHHHHHHHHHHHHLLLHHHHHHHHHHHHHHHHHHLLLLHHJJLLLHHHHHHHHHHHHHHHHHHHBHHHBBzzzzzzzzBHBHzxzzxzBHHHzzHHNzzzHHHLLHHBHJLHJJJJJKKKKKKKKIKLJJJJLHLLHHLKLHLJKIYYIKKKKKJJKKKKKJJJJJJJJJJJJLLHHHHHHHHHHHHLHHHHLLHHHHHHHHHHFFFHzzxxxFLLFLHzcygg9ghghcxxxxSSxllxxFFFzxxxxzzzSSFFSFSzFSzFzSFFSSSSFFFFFFFF", "FFFFFFFFFSSSSSSSxzzzxxxzFFFFFFFFFFFFFFFFFFFFFFFFSFFFFFFSSzxxxxxxxxxxxxxxxxxxllllllllllllxxxxllllllllllllccccclllccccccccllllllxxzzxxxxxxzxxxzzzxzzzzzzzSzzzzFFSzSFFFFHHHLLLHHHFSFHHHHHFNFFHFzzFHHHHHHHHHHHFNzzzzzzzzBHHNzHHHHHLKJJJJJJJKLHHHHHHHLLLHHHHHHHHHHHHHLLLLHHHHHHHHHHHHBBBBzzNzzxxxzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzSSFSzzxxxxxllxxxxxxlxxlxxchhlxxxzHllxzzFNzHHHNBLKYzxcxzFFFxlh99996hhhlllllxxxxllxzFFFFFFzzzzzzzzzzxxxxxxxxFFNNNNzzFNzzNHHHHHHHHHHHLLLLLLLLHHHBzNHHLHBBBBBBzzBHLHHHJJKKKKKKJKJLHJJJKJHHHBzzxzzxxxzzzzzzzzzzzzzzzzzzzzzzxxxxxxxxzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzxxxxxxxzzzzzzzzzzzzzzzzzzzzBBBBBBBBBBBBBBBBnnnnnnnnBBBnnnnBnnBBnnnnBnnnBBnnzzBBBBBBBBBzzzzzBzxxzBBzzzxxzzxzNNNNNNNNzNBBzzzBzzzzznnBnnnBBBBBHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHLLLHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHBBHHBBBBNBBzzzzBzzHLHzzxzLzzNHzBHHNzzNHLLLIKLHHJJJLJKKKKKKKKKKKKKJLLJLHHHHHBHJHHLKLJKKKKKKKKKKKKJJLLLLLLLLJJJJJLLLLLLHHHLLLLLLLLLLJJJLLJJJKKJLHHHHlchhhlxxFl99ghchghhggccglxzxlhhhcclxxxxSxxxzzzzxzzzzzzzFzzSSzzzSzzzSFFFF", "SzzzzSSSSSSSSSSSzSSSSzSSFFFFFFFFFFFFFFFFFFFFFFFFFFFFSxxxxxxzzSzzxxxxxxllxxxlllxxxxxxxxxxlllllllllllcccllxxxxxzzzxxxxxxxxlllllxxxxxxxxxxxxxxxxxxxxxxxzzzzzzzzFFFFFFFFFFFFSFFHHHHHHHHHHHHHHHHHHHHLLLLLLHHHLHHHHHHLHHHHHHzzHHHBzzzHJJJJJJJKJJJLLHHHHHHHHHHHHHHHHHHHHHHHHBHHHHHHHHHSNNzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzFFFFFFFFFFzzzxxzzzxxxlllcclxllxSlcggclhxlxllzzFzzzFHHHHxzJYEYKHzzzFFzxlxxlcccllhhclllccccclllllxxzzzzzzFFFFFNzzzNBHHNNNzNHHHNBHHHHNNNHHHHHHHBNzzzzzzNNNHHHzzHHLYJBzzBHJzzBHLHHLHLLLLLLLBBHBBHHHBzzzzzzzzzzzzzxxzzzzzzzzxxxxxxxxxxxxxxxxxxxxxxxzzzzzzzzzxxxxxxxxxxxxxxxxxxxxzzzzxxxxxzzzzzzzznnnnnzzznBBnnnBBBBBBBBBBBBBnnnnnnnnBBBBnnnBnBBBBnnnBnnnBBnnzzBBBBBBBBzzzzzzzzzzzNzzzzzzBBzzzzzzzzzzzzNzzzzNzzzzNNBBNNNNNBBBHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHBBBBBHHHHHHHHHHHBHHBBNzzHBNzzzBBBzzzzzzzzHHHzxzHzxxzzzzxxxxzzNzzLHHHHHHHLJJJLLKKIIKKKKKJLJJJHHHHHHHHzzBzBHHHHHHLJJLLLLLLHHHHHHHHHHHLLLLLHHHHHHLLLLLLHHHHHHLLLJLLLHHzzxxlclllllchlg9gxHHFxSSlcchfhhhhhhhcxhgcxxzSFzzSxSFzSzzFFSSSzzSzzzzzxxxxxxxx", "xxxxxxxxxxxxxxxxzzSSzzSSSSSSSSSSSSSSSFFFFFFFFFFFFFFFSSSzllxxxxxxxxxxxxxxzzxxxxzzllllllllxxxzzSSSSSzxxxxxllxxxxxxxxxxxxxlxxxxxxxxxxxxxxxxxxxxxxxxxzzzzSSSSSSSFFFFFFFFFFFFHHLLKLLKLLLLLLLLLLLLLLLLHHHHHHHHHHHHHHLJHHHLLHNzBHHNzzzHJJJJJJJJJLLHHHHHHHHHHHHHHHHHHHHHLHHHHHHHHHHHHHSzzzzzzzxxzxxxxxllxxxxllllxllllllllllxxxxxxxxzzzzzzzzzzzzxzxlccclllllxSxzFlzzlhclcxcxhhlxxHHHHHHHHJLLLJKKKKYEWFlcchcxxzzxllllxxlcchhhcllchccccccllchhcclllxzzzBBHHNHLHBzzzxzNNzzzzNNNzzzzzzzzzzzNNSzzzzzNHLHNzzNBBzzzzBHHLHHHHHHHHzzzzzzzzzzzzzzzzxzzzzxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxzzzzzzzzzzznnnnnnnnnnnBBBBBBBBBBBBBBBBBBBBBnnBBBBBBBBBnnnnnBBBBBBnnBBBBBBnnzzzBBBBBzzzzzzzzzzNBzzzzzBzzHBzBzzzzzzzzzNBBzzzBNNNNBBHHBBBBHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHBBzHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHBBBBBBBBBBBBBBBBNBBBzzzzBBzzzzNBzBBzxxzHNzxzzzzzHzxzzNzxzzzzzzxxxzBHHHHHHHLLLHHHLJKKKKKKJKKKJJJJJLJHHHHzHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHLLHHHHHHHBzzzSFFFSzxlclzFFFxxxFFSxxxlHFHLHHLKLxhhhhclhhllcclcxlxFFSSSFSSSSzzxzzzxxxxx", "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxzzzzzzzSSSSSSSSSSSSSFFFFSSSSSSSSzzzzxxxxxxxxxxxxSSSSSSSSSSSSSSSSxxxxxlllxxxxxxzzzzzzzzzzzzzzxxxxxxSSSSSSSSSSSSSSzSFFFFFFFFFFFFFFHLLLLLLLLLLLLHHHLLLHHHHLHHNzFFFFzNNFHHHHNNNNNHHHNNNHHFNHzNNNNNHHHHHHHHHHHHHHHHBBBHHHHHHHHHHHHHHHLLHHHHHHHHHHHHHSzzzzxxxxxllllccccccccccccccccccchhhhccccxxxzzzzzFFFFFFSzFzxllllxxxxxzSzxhzLWFlhghvxxczFLLLLLLJLLJJJLLLHHHLKLFzzSFFFFFLLLHFFFSxlxzxxxlchhccchhcclcccclxxzzzNBHLJJJJKJHzxxxxzzNzzzzzzzzNNNNNzzzNNNHFSzzzFHxzzNNzzxzzxxzNHHHHHHHHHHzzzzzzxxzzzzzzzzxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxzzzzzzzzzzNNzzzNBBnnnnnnnnnnBBBBBBBBBBBBBBBBBBBBBnBBBBBBBBBBBBnnnnBBBBBBBnBBBBBBBnzzzBBBBzzzzzzzzzzzNzzzzNzBzzBNzNBBBBBBBBHHHHHHHHFFFFFFFHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHzzHHHHHHHHFFNNNNNNHHBBBBBBBBHHHHBBnnnnnBBBzzzzzzzzzzBzzzzzzzzzzzzNzNBzxzNBHzxxxzzBFzzNNzNzzzHHHNzzzzzHLLHLzBHHLHBzzzHHLLJJHHHHHHHHLLKKLJKLLLHLLHHHHHHHHHHLHHHHHHLLHHHHLLLLJLHHHLLLJJHHHHHJJJJJHHHHLLLJKKKKKKKLLLLLKFNxzFzzLKLWLLSzSFFFFzxzllcgfghchhlxccllxclxllxxzxxzSFSzzzzzzxxx", "zzzzzxxxxxxxxxxxxxxxxxxxxxxxxxxxzzzzzzzzzzzzzzzzSzzzzSSSFFSzzSSzSSSSzzzzxxzzzzzzSSSSSSSSSSzzzzzzlxxxxxlllllllxxxxxxzzzSSSSSSzzzzSSSSSzxxxxxxxxxxxSFFFFFFFFFFHLLLLLLLLKKLKLLKLLHLLHFzzzNFzxlxxzxxzzNBHHHHNNNNNNzzNzzzzxzzzzzzzzzzzzzzznBBBBBBBHHHBHHHHBHHJJJJJJJJHHHHHHHHHHHHHSSzzzzzxxxxxlllllllllllllllllxxxxllxxxzzzzzFHLLLLLKLLLHFFzxllxzxxlclxxlcllgFxccxcghhhLLxxxHzzNBHHHHHHHHBHHHHFFFHLHFFFFFFHHFLLLLFzzFzzzFFzzFxxxxxxxzzzzHHHBzzzzzNzzxBBBBNxlcxxxxzzzxzzzzzzzxzzzzBHHHzzzzxzzNzzzzzzNBFzzzFHHHHHHHHLLLzzxxxxxxzzzzzzzzxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxzzzzzzzzxxxzzzzzzzzzzzzzBnzzzzznnnnnnnnnnnBBBBBBBBBBBBnnBBBBBBnnBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBnzzzBBBBzzzzzzzzzzzzzzzzNzBBzBzzBBBBBBBBBHBBBHHBBHHHFFFFFHHHHHHHHHHHHHHHLHHHHHHHHHHHHHHHHHHHHHHHzHHHHFFNNNNNNzzzzzzzzzzzBBBBHHBBBzzzzzzzzzzzzzzzzzzBNzzzzzzzNBNzzBzzzBHzxHzBHzzzzxxzzxlxxxzHHHHNNHBzHHLJJHBzzBHBzzzzzxxzBBBBHHLHHHHLJHHLLLHLJKLLLLJKLLLLLLLLLLLLJJJJJJJJJKJLLJJJJJJJJJJJJJJHHHHHHHHHHHHHHHHHHHFSSFzLFzzxSHl9ghxxSxxxxlllzcxxclzzlggch69clFlccggclhgghllllllxxxzSF", "lSxhcxxcxlclchhlllllllxxlllllxxxxxSSSxSFFSSSSSSxSzSSzxxSFxlxxxxzlDxlxxxxxxxlllllxllxSxlDxxSlxlxlllxxxxxSSxlllllcllllxllxlllxxxllxxxxxxxSlSFzxzzxxxSSzxzSFSzSSSzzzzzzzzzzzzzzzzzSzzzFFzzzFzllxzzzxzzzzzzzxxzzxxxxxlcclxxxzzNBHHBNNNNNzzzzzzBBLJJHLLHHWYKLKKKWIIKKKJJJLJJHHHBBHBzzzzxxxlclcllcclxxlxxxxzzzzzzzzFzzSLzzzSLzFFFFzzSSSzSzxzxxchhh9196yhcxzzxxchhxHFlhFxxzFzzzFHHHHHLLHLLHHLLLHHHHHHHLLLHHHLLLHHHHHLLHHLLHHHHHLHHLLLHHHLLKKKLLLHHHHFzzzzzzzzzzzxxzxllxBHHzzHHBzzBHHHHHzHLHHzzHHzxzHHNzHHBzzHBzxBNxxzzxxxzzzxxxzzxxxzzxzxxxxzzxxxzzzzzzzzzzzzzzzzzzzzznzzzzzzzzzzzzzzzzzzzzzznnnnnnnnnnnBBBBBnznnznnBBBzznBBBBBBBBnnnnnnnnnnnnnznBBBBBBBnnBBBBBBBBBBBBBHBBBBBBBBBBBBBBBznnnzzzzzznnnznBFHHNNNHHHHFNNHHHFFFFFFHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHFFFFFFFFFFFFFFFFFFFSSSSSSSSzzzzzzzzzzzzzzzzBBBBBBNNBBBBBBBBHBBBNNNNzzzzzzzzHzxxzHHHxxzzxxxzxlccllllxzzzzzxlxzFFzzHLHHFzzzHHHHHHHBnnHHHHHLLLHHHHHHLLJJJJJJJJJJLLLJJJJJJKKKJJJJJJJJJKKKKKKKKKKKKKKKKKJJJJJJJJLLLLLLLLJJJJJJLHHHHHHHLLKHzxxcxzxclxlxSxlccgffgg;9ghcxlcccllzLSxcccclxxxlSSxxlcx", "LFFSxlch769lSxhghcllchggfgghclxxllcllllxxxSFFFFFLFFFFFFSxFFzFFzSSSDSFSxSxxxxxxlllllllllxlcllxclSxxxxxSxlxxSFFSSxSxlxSxlcllllllllxxzSSSSzSSzzSFFSLFxzFFFFxxSFFFFLLLLHHFHHHHHFFFFFzzzFFFzzLLLLHLLKFFFFzzzzxxxxxlllllxxzzNNHHLLLLLHHHLJJJJJJKKKKKKJLKKJKLLKHHNHHLLHKLLJLLLHJLLHHHNzzxxxllllxxxxxxxxxzzxzzzzNNzzzFFzFFxFFzFFzFzllxzzllxzzFzFFxFHlcchghcxzFFFzFLKLzzSLFzHLHFHFFHHHHHHHHHHHLLHLLLLKLKKLLKLLKLLHLLHLLLLHLLLLLLLKKKLKKWYLKKWWWKKYWKWWKKLLHHHHHFzzLLzzFFxBHHzzBBzKJHLJJLHzKIHzHHzLHHHLLHHJJHzxzxlzzzxxxzxxxzzxxxxxzzxlxzzzzzzzzzzzzzzzzzznnnzznnnnnnnnnnBnnnnnnnnnnnnnnnnnnnnnnnBBBBBBBBBBBBBBBnnnzzznnnnnnnBBBBnBBnnnnnBBBBBBBBBBBBBBBBBnnnBBBBBBBBBBBBBHBBBHHHBBBBBBBBBxzzzzzzzzzzzxxxxxxxxxzzzzzzzzzzNFFFFFHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHFFFFHHHHHHHHHHHFFFFFFFFFSSFFFFFFSSzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzHHzxxzzzzzzzzxzHxxxxxxxxxzzzzzzxxzzzzzSHHHFSzFFHHHHBBBBBHHHHHHHHHHHHLLLLJJJJJJJJLLLLLLLLJJJJJJJJJJJJJJJKKKKKKKKKKKKKKKKKJJJJJJJJKKKKKKKKKJJKKKKJKKKKKKKKIKIYILHHlhhcggg697976799ghhghxHFxxzxxFxlxxxzFSxlclcghhcx", "WLFFlf11669ghgghlllclzLWFSzlcccllhgghlzFxzFLLWWYLWWKKWLLWLWWFLLFLLFFFLFFSSxxSSSxxSxlllllllclhgggghhhclxxxxxxlxFFSFFFFSSFFLFFSSSFFSSFLLLLLHFLLFFFSSSFHFSzHSxxzzxxxxzzzSFFzzzzzzzzxxzzzzzzxzzzzzzFHHHHNNzzNNNNNNzzzNBHHHHHHHHHHHHHHHHHHHHHBBBHHBBHHHNHJHBLHNNHLJKKJHHJLLJJHHHBzzzzzzzzzzzFzFFFHLLHLLLHHLLHHHHFHHHHLFzHLFFzllxxxSFFSzFFSFxzllSKLKWWKKKKLLLLzFHHSxxFLHHLLHHHLLLLLLLLLLLLLKKLLLLKKKKKLKKKKKKLKKKKKKKKKKKKKKLLKLLLLLKWKKKKKKKKKKKKWKKWYKKKKKKLYTYHHYEKIYYKKIIKYKKKIYKJzKKzzLHxLLLHHBNBzzzzxzNzxxxxxzzzzzzzxxzzxzBzxxzBxzzxzzxBzzzzzzzzBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBnnzzzznnzznnBBBBBnnnBBBBBBBBBBBBBBBBzzzzzznBBBnzzBBnnBBBBBBBBBHBBBBBnnnnnzzzzzzzzzzzzzzzzzzxxzzzzzzzzzzzzSzzSSFHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHFFHHHHHHFFSSSSSSSSBBBBBBBBzzzzzzzzBBNNNzzzzzzzzzzzzzzzzzzzzzzzzzzzBBzzxxzzzzzzzzzHNzzzzNzzzzzzzNBzzSFFSSFHSFFHHHHHBBBHHHHHHHHHHHHHHHHHHHHHLLLLLLLLJJJJJJJJJJJJJJJJJJJJJJJKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKHHHJLBzzScg99hxxhf977fclhhhllcclllSSFLHHLHHLKKKKLWWWWKLL", "LLFFxlhgghllchhlcxLWYYYWYYKHzzzzLFSFSlh9hhcchhlxLWLSxxzzlh9gllcFFLxhcxxhcgf99glSxSxlxxxxxzlxclhglchhclxxSxxHWWKSxzFSxlxFLHFFzzzSLLFFFFLLFFHLFSzSlllclxzSxlclxzzxLLLLHFzzxxxxxxxxxxxxxxxxzzzzFHFFFHHHHHHHNNzNHHNzHHBzzzzzzzzNBHHHHHHHBBzzHBBLLHHJLJJKIKLJLHHLJKJLHzzHzzzHzzzzzzzzzzFHLHHHHLKLLLLLHHHHHHHFLLLHLLLHLLFFSSxlllxzxcclFzFzzFSHFzFHFFFFFFFzzzzzFzxzFFFFHHHHHHHHHHLLLLLLHLLLLLLLKKLJKLLLKKKKKKKKKIYKKWYYYWKKKKWWWWWWKKKKJJLLLLLJHHHLLLLLLHHHLLLHWKKLLLKKKIIKKIIKKKKIYYIJLKKKKKJJKKKKJLHLHHHHBHHHHNzNHHHHHNNNzNBzBBNNHHBzxBzxNzxNzzzzzzzznnnBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBnnnnnnnzzznnzzzznnnBBnnBBBBBBBBBBBBBBnzzzzzzznnnBnnzznzzzznBBBnnnBBBnnnnnnnzzzzzzzzzzzzxzzBBBHHNNFHNzNNzzzNHHNzzNNHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHBBBBBBBBHHBBBBBBzBBBNzNBzzHBzzHHBzzzBzzBHBNNBHHBzBNzzBHBHHHHHHHHNFHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHLLLLLLLLJJJJJJJJJJJKKKJJJJKKJJKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKJJJJJJLLHBNzzzzNxxSHFFHFSSFFFFLLSllxxhhxlxFFFFxxzzzzxxFKFHHHLLKK", "FFFzzSSzxzFLHFFFJKKKKKIYIWWWIYYEEWKKKKLKxxlhv9hhxxlhhlzzz9.669y9ghg7gllhghcllhg9ghcclzxlLFxLxlhlLxlSKKKKLWYLxlFKFSzzxllxFFFFFHFFzxlchhhhxxzxxzzxxzxlzKKFzFKYEYERYYEYYKKKHHHHFSzzzzzzzzzzzzzzzzzzxxxxxxzzNNzNNNxxxxxxxxzzHHHHLJJJKKKKIIIIIJLKKJLLJTRYKJKIEYKKKJLHKHHLHzzzzNNzzzHHHHHHHzzzLKKKHFFFzFHHFFFFFHHHHHFHxzFFFFFFSFFzxlxzxxxxxSzFzxxzzzFFzzzzzFHHHFFFFFFFNFHHHHHHHLLKKLLLKLLKKKKKYKLLKKKLKKJKWIKKKWIKKYYYYWKKKYEREYYYYWKLKKKJLLLJKKLLHHHHHHHBBHHHHzHLLNzHHHHHHHHHJLLJKKJJKJJKYKJIKKKKKKKKKWWKJLJKYKKWIKKJLHHHHLHzHHBHLLBxzHzxNzxBzzzzzzzzzzzzznBBBBBnzzzzzzzzzzzzBBBnzzzzBBBBBBBBBBBBBBBBBBBzzzBBBzzzzzzzzzzzzzzzBBBBBBBBBBBBBBBBzzzzzBBBBBBBBBBBBBBzzzBBBBnznnnzBBBBBnnnzzzzzBBHHBzzBBBzHHHHHHHzHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHBHHHHHHHNNBHBBNHHNNBNzHFNFHHHHHHHHHHHHHHHHHHHHLLLLLLLLLLLLHHHHLLLLLLLLLLJJJJJJJKKKKKKKJKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKJJJWKLLFHLLFFHLHFFSKKLFFLWKKLKLHHxlxxzSxccxFzzxxzLK", "HzzzzxzFWKKLKWWWKIIIIIYYIIIIIIIIWWYYYKKKHzxlhcxxxxxzLYYWLFh9clhhcchlFLFFzlllSFFSclllxxlcxxxlggghxxFKWKWRKKWYWYYKLKKWKLLKWWKWYYYKEEYWKLLLHFzxSLLzzLKKKYKzHHLKKLLLHLKKKKKKKKKKKKKKLLLLLLLLLKKLHHHHHHHHHHHHBNBHHHBzNBHLJJJKWIIIYYYYEEERRRRR^EYEREYYJEEJHJKIREKKKKKKYKKWKLLJKKLLHHHHKLHHFFFHLWWKLHHHLKWKKKKKFFFHFFFHKFFFxchchxzlcxSxzxzzzzxzFFFFFFFFHHHHFFFFzzzzzzzzzzNBBHHHHLKKKKKKKJJKKKKWWJHLKKKJKLJKIWKLWIIIIYYWKKKJKKYEYKKJKKJLKKKKKKKKKKKKJLLKKKKKLLLLJJJLLLLJLLLLHHHHKJHHBBHHBHHHLHBHHHHHHJLHHLJJJJKIWKKIIWKKKLLLLKJNLLLLLLHNHLHNHHNHFFFFNNNNBBBNBBBBBBBBBBBBBBBBBBBBBBBBNzzzBBBBBBBBBBBBBBBBHBBBBBBBHBBBBHHBHHBBNzzzBBBBBNzzBBBBBBBBBBBBBBBBBBBBBBHHHHBBBBBBHHHHHHHHHHHHHHHHBBHHHHHHLHHHHHHHHHHHHHHHHHHHHHHHBBNBHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHLHHHHHHHLHHHHHHHHHHHHHHHHHHHHLLLLHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHLLHHLHHHHHHHLHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHLLLLLLLLLLLLLLLLLLLLLLLLHLJJJJJJKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKLLLKKKLKLLLHHLLHLKKWYWKWKKLKWLLLLLLLzzzHzHHxxzz", "LHHJKKKYYEEEYYYKIIKKKKKJJJJJJHHBJLHzzzHKHzBBzHLHzzNHLLFxxcclzWYLKLLWYLSHLFxlllchcllchhgghlxhhclcxHYYHzHKREILNzHHHLKIKJKYKKJKKKLLLLLLLLLLKKLHLKLHHLKHzzFHLSxxzHFSHHHHHHHHLLLJJKKKLLJJLLLLHLLLHHHHzzzzzzzzzzNHLJJJIYETEEETYEEEEEEETTTTTEEEYYKWYYYYKYKJKYYYIKLHJKKKLLKKJKKKYKKKJLLLKLLLLLKKKKWKKKKKKKLLLLLHHFFFFFFLxcxzxlhllFLFzFSxzzFFFHFFzFFFHHHLFFHHHHFFFzzzFHFzzzzzzzBBBHHHHHHHHBBHHHHLJLHLLLLLLLJKKKJJIIIIYYIKLJKKJJKKIKKKKKWWKKKKIKKKJJJJJJKKKKKKKJJLKIKHHJKKKKKKKKKKKKJLHHHLHKJHJJHHJKJLLJLHLLJJLHLJLJJJKKKKKJKKLKWLKKWKKKKKKKLLLJKKJJLLLLLLLHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHBBBBBBBBHHHHBBBBHHHHHHHHHHHHBBHHHHHHHHBBHHHHHHHHHHHHHBBBHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHBHHHHBBHHHHHHHHHHHHHHHHHBBBBBHHHHHHHHHHHHHHHHHHHHHLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJLJJJLLLJLLJJJJJJJJJJJJJLJJJJJJJJLLLJLLLLLLLLLLLLLHHHHHHHHHHHHHHHHHHHHHHHHHHHHLLLLLLLLLLLLJJJKKJJKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKJJJJJKIKKKKKKIYIKKKKLLLLKKKLLHLNNHLFHLJHLHHJLJJLHHHHHHHzzNzzHH", "JKKKKKKJKKJLJKKHKKJJKKJJJKPKJHHJJKIIKJKIIIIYIIKHKKLLHHHKHHHHKKKKLKYYWLHKLLLLHFFFzLLLHFFLKKWLKLKHLIYIKKIKIKKJHJKKKHnzBBnBBBHHHHHHLHHHHLHHFHLLHFHLLHHLLHHHFzzzzNHHBzzzzzBHBBBHHBBBBBBBBzzzBzzzHHBzzzzNBBHHJJJKKIYYYEEEYYERYEEETEEEEEEEEEYYEEYYYEEYKIIIIIIYKKKKIIIKKKYYKKKKKKKKKKKKLLKWWKLLKKKLKKLHKLFzFHFxLFzzzzFLFFLLLLzzLFFLLFFLLHLFFHFHFLLFFFFHHHHHHHHHNHHHBBHHHBNzzNBzBBBzzzBBHBHLLHHLLLJKLHHLJJKKKJKIKKKKKKJHBLKIKKKKKKIIIIIYKKIIYYIIKKKJLHJKJJJKKIKKJKKIKKJJKKKKKKKIKKKIIKKKKKKKIKJKKKKKKKKKKKKKKKIIKIIKKKKKLKKKLKYKWWKJKKWWYKKKKWYYYYWWWKKKKKKJLLLLLLLLLLLLHHHHHHHHHHHHLLLLHHHHHHHHHHHHHHHHHHHHHHHHHBBBHHHHHHHHHHLLHHHLLHHHHHHHHHHHHHHHHHHHHHHHHHHHNBHHHHHBzNBHHHHHHHHHHHHHHHHHHLLLHLLLHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHLLLLLLLLJJJJJJJJJJJJJJJJJJJJJJJJJJLLJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJKKKKKKKJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJKKKJJJJJJKKJJJJLJJJLLLLHHHHHHLJLJJJLLLLLLLLLLHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHLJJJJJJKKKKKKKKKKKKKKIKKKKKKKKIKKKKKKIKKKKKKKKKKKKKKKKKKKKJJJKKKKKKKKKKKIIIIKKKIIKKJJKKJJJLJKJLLLHHHHHHHJJJKLJJKKKJKKKYJKKJJKJ", "IKKKKKKKJJKKKKKKJKIIKJKIYIIIIIIIIIIIIIIIIIIIIIIIWWWWWWWWYYYYWKKKWYYYJHLKHzzNLKKKKWKLHHKYYYWWWWKJJJJJJKJJHJJKKKKKKJJHHHHHJJJLHHHBHHHHHHHHHHHHLLLLLHHHHLJJKKKKKKJLHHLLLLLJJJJJJJJJJHHHJJLHJJKIIIKKIIIYYYIIYYYYYYYYEEYYYYYYRYKKYEYIIYEEEYYYYYYYIKWIIIIIIIIIIIIIKKKKKKKYYYKKKKKKKKKKWWKKKKLLLLLLLKKKLLLLLLHHLLLLLLLLLLLLLLLLLLLLLLLLHHHLLLLLLLLLLLLLLLLLLLLLLLLLLLLLHLJJHHHHHHHHHHHHHLLLHHLLLLJJKKKKKKKKIIIIKKKKKIIIYYIIIIIIIKJJJKKKKKIYYIIKKKKKKJJJIIIIIIKKKKKKKKKJKKKKKKKKKKKKKKKJIIIIIIIKKKKKKKKKIIKKKKKKIIIIIYYYYYYYYYEEYYYYYEEEEYKWYEEYYYYYYYYYWWYYYWWKKKKKKKKKKKLLLLJKLLLLLLLLLLLLLLLLLLLLLLLLLLLHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHLLLLLLLLLJJLLLLJJJJLLLLLLLJJJJLHHHLLHHLLLLLLLLHHHHHHHHJLLLLLLLHLLLLLLLHHHHHHHHHHHHHHLLLHHHHHLLJJJJJJJJJJJJJKKKKKKJJKKKKKKKKKKKJJKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJKKKKKKKKKKKKKKKKJJJJJJJJJLLLLLLJLLLLLLLLHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHLJJJJJJJKKKKKKKKKKKKIIKKKKKKIIIIKKKKIIIIIIIIIIIIIIIIKKKKKKKKKKKKKKKKKKKKKKKKIIKKKKKKKKKKKKIIJJJJJJJJKKKKKKKKIIIIIIIIIIIIIIII", "IIIIIIIIPIIIIIIIIYEYYIYYYYYYYYIIIIIIIIIIIIIIIIIIIIIIIIIIKKIIIIIIKIYYIIIYKJLJKKJJKKKLHLKIJJJKKKIIIPPKKKKKKKKKJJJJJJJJJJJJJJJJJJJJLLJJJJJJKKKKKKKKIIKKKKIIIIYYYYYYYYYYYYYYIIIKJJLHJLHLJJJLHLJKKIIIIIIIYEEEIIIIIIIIIIYYYYYYYIIKIYYYETTTTEEYIYYYYYYEIIIIIKKKIIIIKKKKKKKKKKKKKKKJJKKKJKKKKKKKJLLLLLLLKKKKKKKKKKKKKKLLKKKLLLLLLLLLLLLLLLLLLLLLLLLLLLLLJJJJJLLLJJJJJJJJHLJJLHHLJJJJJKKKKKKKKKKKKKKKKKKKKKKKKIIIIIIIIIIIIIIIIIIIIKKKKIIIIIIIIIKKIIIIIIKKIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIKKKKIIIIYYYYIIIIIIIIIIIIIIIIIYYYYEEEEEEEEEEYYYYYEEYYYEEEYYYYYYYYIIIIIIIWIIIIIIIWKKKKKKKKKKKKKKKKKKKKJJJJLLLLLLLJLLLHHHHHHHHHHHHHHHHHHHHHHLLLJJJJHLLLLLLLLLLLLLLLKKKKKJJJLJJJKKKKKKJKKKKKJJJKKKKKJJJJJJJJJJJLLLLLLLJLLHHLLLLJJJJJHLLLLLLLLLLHHHHHJJJJKKKKJKKKKKKKKJJJJJJKIIKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKJJKKKKKKKKKKKJJJJJJJLHHHHHHHHBBBBBBBBHHHHHHHHBBBBBBBBBBBBBBHHHHLJJJJJKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKPPPPPPPPPIIIIIIIIIIIIIIIIIIIIIIIIIIIPPPPPKKKKPPPIIIIIKKKKKKKKKIIIIIIIIIIIIIIIIIII", "IIIIIIIIIIIIIIIIYYYYYYYYYYYYYYYYYYYYYYYYIIIIIIIIIIIIIIIIIIIIIIIIIIKKIIIKIIIIIIIIIIKKIIIIYYIKJHLJIIIIIIIYIPKJJJJJKKIIIIIPIPPKKKPPIIIIYYYYYYYYYYYYYIIIIIIIIYYYEEEEYYYYYIYYYYIKKKKKKKJKKKKKJHHHHHJJBBBHJKPIPPKKKKKKJKKIIIIKJJJJHJKKJJKJJKKKIIIIIYYYRRRRTTTEIIIIIIYYYIKKKKKIYYYIIIYYKKKIIKKKYYYYIIKKKKKKKKKKKKKKKKKKKKKKKKKWKKKKKKKKYYYYYYIIYYYYYYYYIYYYYIIIIIYYYYYYIIYYIIIIYYYYYYYYIIYYIIIYYYYYYIIIIIKKKIIIYIIIIIIIIIIIIIIIIIIIYYYYYIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIEEEYYYYYEEYYYYEEEEEEEEEEEEEEETTTTTTTTTTTTTTTTTTTEETRTTEYEEEEEEYYYEEEYYYEEEEYYYYYYYYYIIYYYYIIYYYYIIIIIIKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKJJJJJJLLJJJJJJJJJJKKKKKKKKKKKKKKKKKIIKKKKIKKKKKKIIIIIIIIYIIYYYYYKKIIIIIIIIIIIKKKIIIIIKKKKKKKJJKKLJJKKKKKIIIIIIKKIIIKKKKKKKKKKKKKKKKKKKIIYIIIIIIYIIIIIIKKKKKKKKKIIIIIIIIIKKKKIIIIIIKKKKKKPPPPPPPPIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIPPPPPPPPIIIIIIIIIIIIIIKKIIIKKIIIKKKKKKKKKKKKKKKKKKKJJJJLHHHLLLLLHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHBBBBBBBBBBBBHHHHJJJJKKKKKKKKKKKKKKKKKKKKIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIPPIIIIIIIIIIIIKKIIIIIYYYIIIIIYYYYYYYYYYY", "IIIIIIIIIIIIIIIIYYYYYYYYYYYYYYYYIIIIIIIIIIIIIIIIIIIIIIIIYYYIIIKKIIIIIIPKPIIYEEEEEYYYEEYIYYYIIPIIIIIIIYETEYIIIIYYIIIIIIIIKJJJJJJJKKKPIIIIEEEEETTTTTEEEYEEIIIIIIIIKKKKJJJKIIIIIIIIIKKKIIIKJJJHBBBBzzzzBHJJKKKKKKKKJKKIIKKJJJHBBBHLJJJJJJKKIKKKKKKKKKKKIIKKIIIIIIIIYYYYYIIKIIIIIIIIEEEEEEEEEEEEEEYYEEEEEYYYIIIIIIIIIIIIYYYYIIYYYYYYIIIIIIKKIIIKIIIIYYYEEEEEYYYYYYYYYYEEEYEEEEYYYYYYIYYYIIYYYIIIIIIIIIIIIIIIIIIIIIIIIIIIIIYYYYYEEEEEEYYIIIIIIIIIIIIIIIIIYYYYYIIIYYYYYYEEEEETEEEEEETTTTTTEEEYYYYYYEEEYYEEETTTTTTEEEEEETTRTTEEEEEEEEEEYYEEYIIYEEEYYYYYYYYYYYYYYYYYYYYYYYYYYYIIIIIIIIIIIIIIIYYYYYYIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIKKKKKKKKKKKKKIIIIKKIIIIIIYYIIIKKKKKKKJKKKKKIIIIYYYYYYYYYYIIIIIYIIIIIIIIIIYYIIYYYYYYEEEEEEYYYYYYYYYYYYIIIIKKIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIKKKKKKKKKKKKKKKKKKKKKKKKJJJJJJJJJJJJJJJJJJJJJKKKKKKPPIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIYYYYYIIIIIIIYYYYYYYYY", "IIIIIIIIIIIIIIIIYYYYYYYIYYYYYYYYIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIYEEEIIYYIIYEYYYYYYIIIIIIEEEEIIIIIIIIYYYYYEEEEEEYIIIITTEYIIYYIYYEEEEEIIIIIIIYEEEEEEEEYYYIIIIIYEEEEEETIIIIIIIIIIIIIIIIPPPKKKKJJJJKPIIIIIIIIIIIIIIIIIIIIIKJJJJJKKKJJJJJJJHHHHHBHHJJKKKKJJJHBBzzBHHHHBzzzzzzzzzzBBHHHLJJIIIIIIIIIIIIIIIIKKKKKKKIIKKKJJJJJJJKKKKKIIIIIKKKKKJJJJJJHLJJJJJJIIKKKKKKKKIIIIIIIIIIIIKKIIIIIIIIKKKKKKKKIIIIIIIIIIIIIIIYIIIIIIIIIIIIYYEEEEEEEYYYYYYYYYYYEEEEEEEEEEETTTTEYYEEETTTYYEEEEEETTTTTEEEEYYIIPKKKKIIETTTTTTTTTTTTTTTTTTTTTTTTTTETTTTEEEEEEEEEEEETTEEEEETTTTTTTRRTTTTTEEYEEYYYYYYEEEETTTTEEYYYYYYYYYYYYYEEEEEEEEEYEEEEEEEEEEYYIIIIIIIIIIIYYYYYYYYYYYYETTTEEEYYIIIIIIIIIKKKKIIYYEEEEEEEEETEETTTEEEYIIIIYEEEEYYYYYYIIIIIIIIIIIIIIIIYYYIIIIIIIIIIIIIIIKKKKIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIYYYYYYYYYYYYYIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIYIIIIIIIYIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIYYYYYYYYIIIIIYYYIIIIIIIIIIIIIIIIIIIIIYYYIIIYYEEEYYYYYYYYIIIIIIIIYYYYYYYY", "IIIIIIIIIIIIIIIIIIIIYYIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIYYIYETYEEIIIIIIYEIIIIYTYIIYIIPIIYYYYIIIIIIIIIIEEYYYYEEEYIIIIIIIIIIIIIIIIIIIYYYIIIIIIIIEEEEYYYYIIIIIIIIYEEEEYIIYYYYYYEEEEEEEEYYTTTTTTTETTEEEEEEEEEEEEEEEYIIIIIITTTTTEYYTTETTTTTETTTTTTTTTTTEEYYYIIIIIIIIIIIIIYYIIIIIIIIIIIYYYYERRR!!!!!^^!!!!!!!!RRTTTTTTTTRR!!RRRTTTTTTEEEYYYYTTTTTTTEEEEYYYYYYYYYEEEEEEYYYYYYYEEEYYYEYYYYYYYEEETTTTEYEEEEETTTTTTTEEEETTTEEETTETTTTTTTTTTTTTTTTTTTTTTTTTTRRRTTTTTTTTTTTTTTTTTTRR!!!!!!TTTEYIIIYETTTRRRRRRRRRRTTTTTTTTTTTTTTTTETTTTTTTETTTTTTTTTTTTTTTTTTTTRRRRRRRRRTTTTTTTTTTTTTTTTTTEEEEEETTTEEEEETTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTEEETTTTTTTTTTTTTTTTEEEEIIIIIYYIYYIIIIYETTTTTTTTYIIIIIIIIIIIKKKKIIIIIIIYIIIIIIIIYYYYYYYYIIIIIIIIYYYYYYYYIIIIYYYYYYYIIIIIYYYYYYYYYYYYYYYYYYYYYYYYIIIIIIIIIIIIIIIIYYYYYYYYYYYYYYYYEEEEEEEEYYYYYYYYYYYYYYYYYYYYYYYYYYIIIIIIIIIIIIIIYYYYYYYYIIYYYYYYYYYYYYEEYYYYYYYYEEEYYYYYYYYYYYYYYYYYYYYYEEEEEEEEIIIIYYYYIIIIIIIIYYYYYYYYIIIIIIIIYYYYYYYYEEEEEEEEIYYYEEEEYYYYYYYYIIIIIIIIIIYYYYYYIYYYYYYYEEEEEYYYEEYYYYYYYYYYYYYY", "YYYYYYYYYYYYYYEEIIIIIIIIIIIIIIIIEEEEEEEEEEEEEEEEEEEEEEEETTEEYIIIYYEYIIIIYTTEETTETTTTTETTIIIIETTTEEEEETTTTTTTTTTTEEEEEETTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTEEEEETTTTTTTTTTTEEETTTTTTTTTTTTTTTTTTTTETTTTTTTETTTTTTTTEEEEEETTYYYYEEEYIIIYYYEEIYEEEETTTTTTTTTTETTTTTTTRRTTTTTRTTTTTTTTRTTTTEEETTTTTTTTTTTTTTTTTTTTTTTTETTTTTTTTTTTTTTTRRRTTTTTTTTTTTTTRRTTTTTTRRRRRRRR!RRR!!!!RTTTTTRRTTRRTTTRTTTTRRRRTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTRRRTTTTTTTTTTTTRRTTRRRRRRTTTTTTRRRRTTTTTTTTTTTTTTTTTTTTTEYYEEEEEEEETTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTEETTTEEEYYEEEETTTTTTTTTTTTEEEEEEEEEETTTTTTTTTTTTTTEEEEEEEYYYYIIYYYEEYYEEYIIIIIIIYYYYEYYYYYTTEEEYIIIIIIIIIIIIIIIIIIEIIIIIIIEYIIIIIIYYYYYYYEYYYYYYEEYYYEEEEEEEEEEEEEYYYYYYYYEEEEEEEEEEEEYYYYEEEEEEEEYYYYYYYYYYEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEYYEEEYYEEEEEEEEEEEYYYYYYEEEEEEETTTEEEEEEETEEEEEEEEEEEEEEEEEEEEEEEEYYYYYYYYEEEEEEEEEEEEEEETEEEEEEEEEEEYYYYYYYYYYYYYYYYYYYYYIIIYYYEEEEEEEEEEEEYYYYYYEYYYYYYYEEEEEYYYEEEEEEEETTTEEEEEEEEEEEEE", "YYYEEETTEEEEEEEEIIEEIIIYTTTEEEYYTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTETTTTTTTTTTTTTTTTRTTTETTTEETTTTTTTTTTTTTTEETTTTTTETTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTETTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTEEETEEEEETTTTTTTTTTTTTTTTTTTTETTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTEEETTTYYYYYYYYTTTTEEYYEETTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTEEETTTTTTTEETTTTTTTTTTTTETTTEEETTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTETTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTEEETTTTTTTTTTTTTTTTTTTYEETTTTEYEEEETTTTTTTTTTTTTTTTTTTTTTTTTTTTTTEYYYYYYEEEYYIYYEEEEEYEEEEEEEEEEEEEEEEEEEEEEEEEEYYIIIYYIIIIIIIIIYEEEYYYEEEEEEEEEEYIIIIYEEEEEYYYYYYYYYYYIIIYYIIIIIIYYYYYYEEEEEEEEETTTTTTTTTTTYYTTTTTTTTEYIETTEIIIIEEEYYIYYYYYIIYYYYYYYYEEEEEEEETTTTEEEETTTEETTTTTEEEEEETTEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEYYYYYYYYEEEEEEYYEEEEEEEEEEEEEEEEYYYEEEEETTTTEEEEEEEETTTTTTTTTTTTTTTTTTTTYYYYEEEEYYYYYYEEYYYEEEEEYYYYEETTEEEEEETTTTTEEEEETTTTTTTTEEEEEEEEYYEEETTTEEEEEEEETTTTEEEEEEEEEEEETTTTTTTTEEETTTTTTTTTTTTTTTTTTTTT" }; xscreensaver-5.36/hacks/images/earth_night.xpm000664 000767 000024 00002006734 12430257554 021543 0ustar00jwzstaff000000 000000 /* XPM */ static char *earth_night_xpm[] = { /* columns rows colors chars-per-pixel */ "1024 512 92 1 ", " c #010004", ". c #01000D", "X c #090A0B", "o c #010013", "O c #01001D", "+ c #0A0B1C", "@ c #080918", "# c #15161B", "$ c #0F1119", "% c #030222", "& c #080726", "* c #060826", "= c #0B0B24", "- c #050529", "; c #08072A", ": c #06092A", "> c #0C0B2C", ", c #100F2E", "< c #110E24", "1 c #0E102B", "2 c #121324", "3 c #13132C", "4 c #1B1B2C", "5 c #191927", "6 c #0D0D32", "7 c #0B0C36", "8 c #100F33", "9 c #110E3A", "0 c #0F113A", "q c #0E1132", "w c #131334", "e c #1B1B34", "r c #14153D", "t c #18173C", "y c #1B1A3C", "u c #171737", "i c #201E3B", "p c #201F2C", "a c #1E2131", "s c #25262A", "d c #23233B", "f c #272837", "g c #35363A", "h c #303235", "j c #21231B", "k c #43453C", "l c #151640", "z c #161942", "x c #1B1C45", "c c #1D1E49", "v c #191743", "b c #15144A", "n c #201F45", "m c #201F4A", "M c #211E51", "N c #1E2048", "B c #1E2051", "V c #232343", "C c #2B2B43", "Z c #23224A", "A c #2B2A4A", "S c #363748", "D c #393955", "F c #2F2E49", "G c #3E3B62", "H c #413E55", "J c #3E414D", "K c #464749", "L c #474757", "P c #565759", "I c #515251", "U c #4A4A64", "Y c #575767", "T c #585771", "R c #666768", "E c #676877", "W c #757675", "Q c #616263", "! c #3E4139", "~ c #84857B", "^ c #757587", "/ c #615F82", "( c #7E818B", ") c #8B8C91", "_ c #9595A7", "` c #ACADB0", "' c #A2A49E", "] c #B6B6C7", "[ c #CDCED0", "{ c #E9EAED", "} c #C2C4BD", "| c #7F807F", /* pixels */ "rrrrrr00rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrzzzzzzzzzzzzzzzzxxxxxxxzcccccccxccccxxxxxxxxzzzzlllrrrrrrrrrlllzlzzzzxxxrrrllzzzzzzxxxxxNNNNccccccccccccZNcxxxxxxxxxcccccxxxxvvvxxxxvvvvrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrtvvvzrrrrllllllllllllllllrrrrrrrrrrrrrrrrrrrrrrrrlllrrrrrrrrllzzzrrrllzzzllllllllrrrrrrrrrrrrrrrrtttttzzzzttttttzttttttttrrrrrrrrrrrllrrrrrrrrrrrrrrrrrrrrrrrrrrrllllllllrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrttttttttrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrzzzzzzzzrrrrrrrrrrrrrrrrrrrrrrrrzzzzzzzzrrrrrrrrrrrrrrrrlllzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzlllzzzzzzzzrrrrrrrrrrrrrrrrllllllllzzzzzzzzllllllllrrrrrrrrzzzzzzzzzzzllrrrlzzzzzzlzzzzzzzzllllllllzzzzzzzzlllzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzllrrllzzzzzzzzzlllllllllllllllllllzzzzzzzzzzzzzzzzllrrrrrrrrr00rrrrrrrr0000000000000000000000000000000077777777777777777777777777777777007777770000000077777777000007777777777777777777000000007777777777000000000000000000000r000000007777777700000rrr", "00000007000000rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrxxxxxxzzzzzzzzzzzzzzzzzzzllrrrrrrrrlzzzzrrrrrrrr000rrrrlzzzzzxxxxxxxcccccccxxxxxxxxxxxxxxxxzzzxxxxxxxzzzxxvvvzzzrrrrrrrrrrrtttttrrrrrrrrrrrrrrrrrrrrrrttrrrrllzzzzzzzzzzllllllllrrrrrrrrrrrrrrrrrrrrrrrrlllrrrrrrrrllzzzrrrllzzzllllllllrrrrrrrrrrrrrrrrttttttzzzttttttzttttttttrrrrrrrrrrrllrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrttttttttrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrlllzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzlllzzzzzzzzrrrrrrrrrrrrrrrrllllllllzzzzzzzzllllllllrrrrrrrrzzzzzzzzzzzllrrrlzzzzzzlzzzzzzzzllllllllzzzzzzzzlllzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzllrrllzzzzzzzzzlllllllllllllllllllzzzzzllllllllzzlllrrrrrr00000000000007777777777777777777777777777777700000000777777777777777777777777077777777777777777777777777777770000000000000000000000000000000070000000000000000000000r000000000000000007777000", "70000000r0000rrrrrrrrrrrrrrrrrr0rrrrrrrrllrrrrrrrrrrllzzzzxxxxxxzzzzzzllzzzzzzzlzlrrrrrrrrrrrrrr00000000000rrlzzzllllrrrzzzzzzzzzzzzzzxxzzzzzzzzzllllzzzzzzzllrrzzzlllllrrrrrlllrrrrrrrrrrrrrrrrrrrrrrrrttttrrrrrrrrrlzzllllllllllllllllrrrrrrrrrrrrrrrrrrrrrrrrllrrrrrrrrrllzzzrrllllzzllllllllrrrrrrrrrrrrrrrrtttttttzttttttttttttttttrrrrrrrrrrrllrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrttttttttrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrllllzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzllllllllllllrrrrrrrrrrrrrrrrllllllllzzzzzzzzllllllllrrrrrrrrzzzzzzzzzzzllrrrllzzzzllzzzzzzzzllllllllzzzzzzzzllllzzzzzzzzzzzzzzzzzzzzzzzzzzzzzllrrllzzzzzzzzzllllllllllllllllllllzzzzrrrrrrrrlllrrrrrrrr000007777777777777777000000000000000000000000rrrrrrrrrrrrrrrrrrrrrrrr000000000007777077777777777777777700rrrr000rrrrr00000000000000000000000000000077000000000000000r00000000rrrrrr0000000rrr", "00rrrrrrlrrrrlzzrrrrrrrrzzzzzzzlzzzzzzzzxxzzzlrrrrrlzzzzzzxxxxxxxxxxxzzzxxxzzzzzxzzzlrrrrrr007770000000rrrrlzzzzrrrrrrrrrrrrrrrrrrrrlzzzrrrrrrrrrrrrrrrrrrrrrrrrllllllzzzzzzzlllrrrrrrrrrrrrrrrrrrrrrrrrtttrrrrrllrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrllzzzllllllllrrrrrrrrrrrrrrrrrrrrrrrrrrtttttttttrrtttrrrrrrrrrrrrrrrrrrrllrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrlllzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzlllrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrllllllllrrrrrrrrrrrrrrrrllllllllzzzllrrrrlzzzzlrllllllllrrrrrrrrllllllllrrlllzzzzzzzzzzzzzzzzzzzzzzzzzzzzllrrllzllllllllrrrrrrrrrrrrrrrrrrlllzzzzzzzzzzzrrrrrrrrrrrrrrrr000000007777777700000000rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr0000000000777777000rrrrr00000rrrrrrrrrrrrrrrrrrr0000000000000077000000000000000rrrrrrrrrrrrrr000rr000rrr", "rrrlzzzzzzzzzzxxzzzzzzzzzzzzxxxxxxxxxxxxzzlrrrrrrrrrrrllrlzzzzzzzzzzzzzzzzzzzzzzzzzlrrrrrr007777000rrrrlrrrrrrrrlllrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr00rrrrrlzzzzzzvvvvvzlrrrrrrrrrrrrrrrrrrrrrrrrrrrrrttrrrrrrzllrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrllzzzllllllllrrrrrrrrrrrrrrrrrrrrrrrrrrrtttttttrrrrttrrrrrrrrrrrrrrrrrrrllrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrllllllllrrrrrrrrrrrrrrrrrrrrrrrrllllllllrrrrrrrrrrrrrrrrrrrlllzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzlllrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrllllllllrrrrrrrrrrrrrrrrllllllllzzzllrrrrrlzzlrrllllllllrrrrrrrrllllllllrrrlllzzzzzzzzzzzzzzzzzzzzzzzzzzzllrrllzllllllllrrrrrrrrrrrrrrrrrrrlllzzzzzzzzzzrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr77777777777777770000000000000000777777770000000000000000rrrrrrrrrrrrrrrr00000000700007777770000000000000rrrrrrrr0000000000r00007000000000000000rrrrrrrrr0000000077777700", "rrrrlzzzzzzzzzzxllllllllrrlzzxxxzzzzzzzzlllrrrrrrrrrlzzzrrrrrrrrrrrrrrrr0rrrrrrrrrrrrrrrrrrrrrrrrrrrlzzzzzlrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr0070rrrrzzzvvvvvvvvxxvvvzllzttrrrrrrrrrrrrrrrrrrrrrttttrrrrrllllzzzrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrllrrrllzzzzzllllrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrttttttrrrrttrrrrrrrrrrrrrrrrrrrllrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrllllzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzllllllllllllrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrzzzllrrrrrllllrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrllllzzzzzzzzzzzzzzzzzzzzzzzzzllrrllzrrrrrrrrrrrrrrrrrrrrrrrrrrrrllllrrrrrrrrrrrrrrrr00000000rrrrrrrrrrrrrrrr00000000000000007777777700000000777777770000000000000000000rrr00rrrrrrrrrrrrr000rrrr00777777700000000000rrrrrrrr00000000rrrrrr00000000000000000rrrrrrrrr0000000000070000", "rrrrllllzzllzzzzllllllllrrlzzzxxzzzzzzzzzzzzzzzzzzzzxxxxrrrrrrrrrrrrrr00rrrrrrrrrrrrrrrrrrlzzzxxzzzzzzzzxxxxzzzzrrrrrrrrlrrrrrrrrrrrrrrrrrrrrrrrrrrrrr000rrrrrrlxxxvvvzzvvxxxxxxzzztrrrrrrrrrrrrrrrrrrrrttzzzzvvvvvvzzllllllllllrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrlllrrrllzzzzzzllrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrttttrrrrrrtrrrrrrrrrrrrrrrrrrrllrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrlllzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzlllllllllllrrrrrllllllllrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrzzzllrrrrrrllrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrlllzzzzzzzzzzzzzzzzzzzzzzzzzllrrllzrrrrrrrrrrrrrrrrrrrrrrrrrrrrrlllrrrrrrrrrrrrrrrr00000000rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr0000000000000000rrrrrrrrrrrrrrrrrrrrrrrr7700000000000000rrrrr000rrlllrrr000000000000000000000000rrrrrrrrrrrrrrrr000000000000000r00000000rrrrrr00rrrrrrrr", "rrlzzzzlzzzzzzzxzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzlzzzzzlrrlllrrrrrzzzzzzxxxxxxxcccxxxxzzzzxxxxzzzzxxxxxxxxzzxxxxxxxxxxxxzzlrrrrrrrrrrrrrrr0rrrrrrrrrrrrrrrxxxvvzlrrrrlvxxxztrrrrrrrrrrrrrrrrrrrrrrvvvxxxxxccxvzrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrlllrrrllzzzzzzllrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrttttrrrrrrtrrrrrrrrrrrrrrrrrrrllrrrrrrrrrrrrrrrrrrrrrrrrrrrllllllllrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrllllllllrrrrrrrrrrrrrrrrrrrrrrrrllllllllrrrrrrrrrrrrrrrrrrrrrlllzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzlllllllllllrrrrrllllllllrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrzzzllrrrrrrllrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrlllzzzzzzzzzzzzzzzzzzzzzzzzzllrrllzrrrrrrrrrrrrrrrrrrrrrrrrrrrrrlllllllllllrrrrrrrrrrrrrrrrrrrrrrrr0000000000000000000000000000000000000000000000000000000000000000700rrr0000000000rrr00000rrrrrrrrrrrrrrrr0000000000000000rrrrrrrrrrrrrrrr000000000000000r00000000rrrrrrrrrrrrrrrr", "rrrrrrrrzzlrrlzzzzzzzzzzzzzzzzzzzlrrrrrrllzzzzzzzzzzzzlrzzzzzzzzcxxxzzzzrrrlllllzzzxxcccccxzzzzzNccxxzzzxxxxxxzzzzzzzzzzzzzzzzzzcxxzzzzzzzzlrrrrzzxxxzlrrrrrr000rrrrrrrrrrrrrzvxzzzzzzzzrrrrrrrrrrrrrrrrxxxxxxcnxxxxxxxxlrrrrrlzlllrrrrrzzzlllllrrrllzzzllrrrrrrrrrlzzzxlllzzzzzzzzzzzzzrrrrrrrrrrrrlllrrrrrrrrrrrrrrrrrrrrrrrrrrttttttrttttttttrrlvvzlrrrrrrlllrrrrrrrrllllllllrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrllllllllrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrllllllllrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrlzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzllrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrlrrrrrrlrrrrrrrrrrrrrrrrllllllllrllzzzzzrrrrrrrrrrrrrrrrrrrrrrrrrrrllzzzzzzzzzzzzzzzzlllzzzzzlllrrrllzzzzzzlrrrrrrrrrrrrllrrrrrrrrrrrrrrrrlllzzzrrrrr000rrrrr000rrr00000777000000000000000000rrr0000rrrrzlrrr000rrrrrrrr0rrr0000000rrrrrrrrrr000rrrrrrrrrrrrrrrr00000rrr000000000rrrrrr0rr00000000000000rrrrrrrrrrrrrrrr00rrrrrrrrrrrrrrrrrrrrrrrrrrrr00", "rrrrrrllzzzzzzzzrrrrrrrrlrrrrrrrlrrr000077777777lllzzzzzxxxxxxxcxxzzzzzzxzzzzzzzzzxxxccNccxxxxxxNNNcxxxxxxxxxxxxxxxzzlllrrrrrrrrrrrrrrlzzzllllllzzxxxxzzlrrrrrrrrrrrrrrrrrrrrlzvzzzzzzzzrrrrrrrrttttttttxxxxxxcnxxxxxccclrrrrrrlrrrrrrrrrrrrrrrrrrrrrrrrzzlllrrrrrrrllllrrrrllllzzzzzzzzrrrrrrrrrrrrlrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrllrrrrrrrrlllrrrrrrrrrrrrrrrrrrrrrrrrllllllllllllllllrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrllllllllllllllllrrttttttrrrrrtttrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrlzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzllrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrlrrrrrrlrrrrrrrrrrrrrrrrllllllllllzzzzzzrrrrrrrrrrrrrrrrrrrrrrrrrrrllzzzzzzzzzzzzzzzzlllzzzzzllllllzzzzzrrrrrrrrlllrrrrrrrrrrrrrllllllllllrrrrr000000777000000000007777777777770000000007777000rrrrrrrrrrrrrrrrrrrrrrrrrrrrrr0000000rrrrrrrr0000rrrrrrrr000000000000rrrrrrrrrrrrrr0000rrrrrrrrrr000000000000000000000000rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr", "rrrrrrrrrrlzzlrr000rrrrrrrrrrrrrrrrrrrrrzzzllrrrrrllzzxxxxccccccxxxxxxzzccccxxxxzzzxxxccxxccNNccccccxxxxzxxcccccNcxzzrrrrrrrrrrrrrrrrrrrrrrrrrllrrlzzzzzllllllllrrrrrrrrrrrrrrrlttttttttrrrrrrrtvvvvvvvvxxxxxxcnvvxxxccmvvzlrrllrrrrrrrrrrrrlzzzrrrrrrrrlllrrrrrlrrrrrrrrrrrrlllzzzzzzzzzzzzzzzzllzzzlrrrrrrrrrrrrrrrrrrrrrrrrrrrrttttrrrrrrrrttlrrrrrrrrrrrrrllrrrrrrrrrrrrrrrrrrrrrrrrllllllllllllllllrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrllllllllrrrrrrrrrrrrttttrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrlzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzllrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrlrrrrrrlrrrrrrrrrrrrrrrrllllllllzzzzllllrrrrrrrrrrrrrrrrrrrrrrrrrrrllzzzzzzzzzzzzzzzllllzzzzllllllllzzzzrrrrrrrrzllrrrrrrrrrrrrrrrrrrrrrrrrr000000000077000000000007777700000000000000000077770000000777rrrrrrrrrrrrrrrrrrrrrr00rrrrr0000000000r0000000000000000000rrrrrrrrrrrrrr000000rrrrrrrrrrrrrrrrr7777777700000000rrrrrrrrrrrrrrrrrrrrrrrrrrr0rrrr", "7777777777000077000rrrrrrrrrrrrrrrrrlzzxxzzzlrrrzzzzzzxxxxxxxxxxccccccccNNccxxxxlzzzzxxxxccNNNcxzzzzzzxxxxxccNccccxzzlrrzzzzzzzzlzzzlrr0rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrzzxxxxxxxxxxxxxxxxcvvvxxxxccxxxvvvvzzllrrrrzzzzxxxxlllzzzzzrrrrrrrrlllllrrrzzzzzzzzxxxxxxxxccccccccvxxxvvzlzzzzzzzzrrrrrrrrttttttttzvxxxxvzttzvvxxxvzlrrrlzrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrttttttttttttttttrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrlzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzllrrrllllllllllllllllrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrlrrrrrrlrrrrrrrrrrrrrrrrllllllllzzzzlrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrllzzzzzzzzzzzzzzlllrrzzzlllrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr0rrrrrrrr00rrrrrrrrrrrrrrrrrrrrrrrrrr000000000777777777770007777777777;;;77770rrr00000000rrrrrrrrrrrrrrrr0000000000000000rrrrrrrr00000000rrrrrrrrr007700r00000000rrrrrrrr77777777000000000000rrrr00000000rrrrrrrrrr007000", ";;;;;;;;777777777700rrrrrrrrrrrrrrrrlzzzzzzzzxxxxxzzzzzxxxxxxxxxcccccccccxxxzzzzzzxxxxxccccNcxxzzzzzzzzzxccccccxxxzzzzzzxxxxxxxxxcccxxzlzllrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrzzzzzxxxxxxxxxxxxxxxxxxcvvvvvvvvcxxxxvvzzzzllrrrrrrlzzzzxxxxxxxxzzzzzzllllzzzzxxxxxxxcccxxxxxxxxccccccccxcccxxxvxxxxxxxxttttttttxxxxxxxxxxxxxxxxxxxxxxxxxxvzlzvvrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrttrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrllllllllrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrlzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzllrrrllllllllllllllllrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrlrrrrrrlrrrrrrrrrrrrrrrrllllllllzzzlrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrllzzzzzzzzzzzzzlllrrrzzlllrrrllrrrrrrrrrrrrr000000rrrrrrrrr00rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr77777777777777777777777777777;;;;777770000000000rrrrrrrrlrrrrrrrrr00007777777777000000000000000000000000r007700r00077000rrrrrrrr00000000000000000000000000000000000rrrrrrr077777", "7777777707777770777000rrrr000rrlrrrrrrrrrrlzxcNNxxxxxxzzxxccccccxxxxxxxxxxxzzzzzcccNNNNNccccxxzzxxxxxxxxxxccccxxzzzzzxxccccccccccccNNNNNccxxxzzzxzzzllllrrrrrrrrrrrrrrrrrrrrlrrrrrrtzzzzxxxxxxxcxxxxxxxxxxxxxxxxxxxxvvvvxxxxxvzlzzzllrrrrllzzzzzNNNNcccccccxxxxxzzzxxxccccccccNNccccccccxxxxxxxxccccccxxccccccccxxxxxxxxxxxxxxxxvxxxxxxvxxxxxxxxxxxvvvvvllrrrrrrrrrrrrrrrrrrrrrrllllllllllllllllllllllllrrrrrrrr9999999999999999rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrttttrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrlzzzzzzzzzllllllllzzzzzzzzzzzzzzzzzzzzzzzzzzzllrrrzzzzzzzzzzzzzzzzrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrlrrrrrrlrrrrrrrrrrrrrrrrllllllllllllrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrllzzzzzzzzzzzllllrrrrllllrrrrzzzzllllrrrrr00000000rrrlrrrrrrrrrrrrrrrllrrrrr00000rrrr0000rrrrr00000000077777777777777777;;;;;777;;---;;;;77770000000000rrrrrrrrrrrrrrrrr0007700000000777777770000000700000000r000000rrr000rrr00000000rrrrrrrr0000000000000000rrrrrrrr0000rrrrrrr07777", "rrr00000r000000r00000rrrrr00rrzxzzlrrrrr770000rrzzxccxxzccccNNNNxxxxxzzzxxxxxxxxNNNNNNNNccxxxxxxxxxzzzzzzxxxcccczzzzxxxcxxxxxxxxccccccNNNNNNNcccccxxxxccxzzzzzllrrrrrrrrrrrlzzllttzzxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxcxxxvxxxxxxzzxxxcccccNNNcccccccccccxxxxxxxxccxxxxxxccxxxxxxxxxxxxxxxxxxxccccxccccccccccccccccxxxxxxxxxxxxxxxxxxxxvzztxxxxvvzllllrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr0000000066666666666666660000000000000000rrrrrrrr00000000rrrrrrrtrrrrrrrr0000000000000000rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrlzzzzzzzzzllllllllzzzzzzzzzzzzzzzzzzzzzzzzzzzllrrrzzzzzzzzzzzzzzzzrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrlrrrrrrlrrrrrrrrrrrrrrrrllllllllrrrrrrllrrrrrrrrrrrrrrrrrrrrrrrrrrrllzzzzzzzzzzzlllrrrrrlllrrrrrrrrrrrrrrrrrr000r0000777007770rrrrrrrrrrrrrr000070000000000rrrrr00007777000000007777777777777777;;;;----;;;;;77700000000000rrrrrrrrrrrrrrrrr0000rrrrrrrr00000000rrr0000000000000rr0000rrrrrrrrrrrrrrrrrrrrrrrrrr0000000000rrrrrrrrrrrrrr0000rrrrrrrrrrr0", "rrrrrrrr0rrrrrr0rrrrrrrrrrrrrzxNcxxxxxxxccxzrrr0rzxNNcxxcccccNNNNcccxxxzxxxxxxxcxccccccccxxxxxcczzzzzllllzzxcccczzzzxxxxxxxxxxxxNcxxzzzxNNNNNNNNcccccNZZNNNccxxxllllllllrrrzvvvzrrtzzxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxccmZZccZZZZmcZNNNNNNNNNNccccccccxxxxxxxxxxxxxxxxxxxxxzzzzzxxxxxxxxxxxccccccccvvxxxxxxccccccccxxxxxxxxxxxxxxxxxcnnnncxxxxxvzztvvxxvzrrlllrrrrrrrrrrrrr00000000000000000000000000000000777777776666666666666666777777777777777777777777777777776666wrrr99776666777777777777777700000000rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrlzzzzzzzzzllllllllzzzzzzzzzzzzzzzzzzzzzzzzzzzllrrrzzzzzzzzzzzzzzzzrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrlrrrrrrlrrrrrrrrrrrrrrrrllllllllrrrrrllzrrrrrrrrrrrrrrrrrrrrrrrrrrrllzzzzzzzzzzzlllrrrrrlllrrrrrrr000000000rrrrr00077;;-;----770000000007770000000000000rrrrrrrr0000077777777777777777777777777777777777777;;;77000000000000rrr0000rrrrr00rrrrrrrrrrrrrrrrrrrrrrrrrrrrrr000000000rrrrrr0rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr00rrrrrr0rrllllr", "rrrrrrrrrrrrrrrrrrrrrrr0rrrrrrrrxccccccNNNccxxxccccxxxxxcxxxcNNNccxxxzzzzzzzzxccccNNNNNNccccccccxxzzzzzzxxcNNNNcttttzvvxxxxxxxxxxxxxxcccZZZZmmccZZncxcnncxxxvxxxxxxxxxxxnnnnnnnnxxcncxxxcccxxxxxnnnnnnnnxxnnnnnnmmmccxxxccccccccccccccccNNNNNNNNZZZZZZZZccccccccNNNNNZZZcccccNNZcccccxxxxxxcccNNZnnxxxvvnxxxxnxxxnnZnxxvxnZnxxxxxxxnxvtxxxvtvxnZxnZnxzzvczrrtvtrwrrw769w6666666;;6666677077666666;;66;>6666wwww666>6666;>;;;>666w666666;6666666666>;;;;;;;--****>>6>;;>666799977>>>>>>67000000007777777777777000wwwrrrrrrrrrrrrrrrrrllllllllllllllllllllllllllllrrrrrrrrrrrrrrrrzllllllzllllllllllllllllllllllvvllzzzzlllllzzvvvlllzzzvvlllzzvvvzzllllllvvvvvvvvrrrrlzzzrrrrrrrrllllllllllllllllllllllllllllllllllllllllxllllvvlrrzzzzrrrrrrrrrrlllllzzzllllllllzllllllzlllllzzzcxvvvlllvvllllll00000000rrrrrrrr00000rrr077:----:::-------7770rr000rr000rrrrrrrrrrrrrrrrrrrrrr00777777777777777777777000;77777;-77777777000000000000rrrrrrrrrrrr000rrrrrxzzzllllzllrrllzzzzzzzrrrrrrrrrrrrrrrrrrrrrrrlllrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrllzzllrrrrrr", "rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrzzxxxxxxxxxxcNNZccxxxxxxxxzxccNcNNNccxxxxxxxxxcNNNNNNNZZNNNNNNNNccccccccNNNNNcxxxxxxxvvzxxxxxxxxcccccmmmxxxxxxxxxvvvvxcnxxvxxxnnxxxxxxxcxxxxxxxxxxcccxxxZnnnccxxxxxxxxxxxnnnnnxxxxxxxxxxxxxxxxxxccccccccNNNNNNNNNNNNNNNNccccccccNNNNNZZZZZNNNNNNNNNNNNNNNNNNNcccxxxxxxxnxxnZZnxxxxxxxnnntxxxxxxxZnnZnvtttttvxnnZxxnnxxxnnxtrrrr9rrwwwwrr7666666677766;66666777006>;6;--;;;;;;;;;-------%%%%%%%----%-;;;;%%%%%%%%%%%%-;;;%%%%%%%%%%&&%%-;;;;;;666::::>>66;;::;;;7666666666666770000000rrr0000rrrrrrrrrrrrrrrrrlllrrrrrrrrrrrrrrrr00000000rrrrrrrrrrr00rrr00000000000000000000rlllzzzzzzzzrrrrrrrrlllzzvvvllllllzzlllllllllllllllltrrrrrrrttttttttlllllllllllllllllllllllllllllllllllllllllrrrlzzlrrrrrrrrrrrrrrrrlllzzzzzrrrrrrrrrrrrrrrrrrrrrrrlvvllllllllllllllrrrrrrrrrrrrrrrrrrrrrrrrr07777777777777777770000rrllrrrrllrrrrzzxxzzrr00rrrrr000777;777777777777777777777777777777777777;;;7777777770000rrrrrrrrrrrrllzzzzzllllzllrrrrllzzzzzzrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrllllrrrrrr", "rrrrrrrr000000000rrrrrr0rrrrrrrrrrlllzzzzzzxcNZZccxxxxxxxxzxxcccNNNNcccccccccccNNNNNNZZZNNNNNNNNNNNNNZZZNNZNNccxnnccxxxxxxxcccccmmmmccccxxccccccxxxxxcnnZZncxxxxxxxxxxcnxxxxxxxxxxxcccxxnnccccxxxxxxxxxxnnnnnxxxvvxxxxccvvvvvvvvccccccccNNNNNNNNccccccccccccccccNNNNNNNNNNNNNNNNNNcccNNZNNNNNNNNnnnZZZZZnZZZZZZZZZZnxxxxxnZnnxnnxvxnZnnZxxnnnxxxtvxxvvxxxxvtrrrwr76679766666;;66;;;;;666;;66;:---;;----%--%%%%--%%------666666666>>66666ww6666;;6;;;;-%%%%%%%%%%OOOOOO%%&%%%%--;::>>>666666;:---;;:--:;;;;;6666600000000rrrrrrrrrrrrrrrrrrrlllllrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr0000rr00000000r00000007700rrlllrrrrrrlrrrrrrrrrrrrrrrrrrrlllzzzzzzllrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrllllllllrrrrrllzrrrrrllrrrrrrrrrrrrrrrrrrrrrrrrlzlrrrrlzlrrrrrrllllzzzzzvvvlllllvlllllllrrrrrrrrttrrrrrrllllrrrrr007777000rrrllzlllllllllllzzllrrr000rrrzzrr07770077777777777777777777777777777777;--;777777777700000rrr77700000rrrrrrrrlllllllllrrrrllzrrrrrrrrzzzzzzlrllllllllrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr00rrrrrrrrrrrrrrrrrrrrrrrrllrrrrrr", "rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrzzxcZZcccccccccxxxcNNccccccxxxNNccccccccccNNNNcccccNNNcccNNNNNcccNNZZZxxxccnZZnnZZZZZZccccxxxxccmmZZZZZnncxxxxZZnnncccxxxxxxcnxxxcccnncccnnnnnxxxxxxxxxxxxxxnnnnnnnxxxxxxxxcccccccccccccccccccnnnnnnnnnnnnnnnnnnccccxxnnnnnnnnxxcZZZZZncxxxxxxxxxxccccnnnnxxxxnxtrtxZZZnnxxxxxZZnxtvxnxtvxnxxnZZZnnxxxccxxxxxxxxxxxvvvzr67rr766666;;;6;;::;;6;6666:-%%-66;;ww66>;;;;--%-6666wrxxxzzzxxzttzzzttxztttrrrxxttr6;-%%%%OOOOOOOOoOOOOOOOO%%%;;>66666ww66>;-----%%---%%---;;;9999rrrrrrrrrrrrtttrrrrrrrrrrrllrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr999rrrrrrrr99rrr999rrrrr999rrrrrrrrrrrrrrrrrrrrrrrrrrrrr6666wwrrwwwwwwww99999999rrrrrrrrrrrrrrrrwwwwwwwwwwrrrrrrrrrrrrrrttttttttrrrrrrrrrrrrrrrrzlrrrrlzllrrrrlllllzzzvvvvvvvvvvvvvvvlllrrrrrrrrttttttttrrrrr000r000000r000rrrllzzzzzzllllllllrr0777770007777777777777777777777777777777777777777;;---;;77700000000777777000000000rrrrrrrrrrrrrrrrrrrrzzrrrrrrrrzzzzzzzlzzzzzzzzzzzzzzzzzzzzzzzzllrrrrrrrrrrrrrrrrzzlrr0rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr", "rrrrrrrrrrrrrrrrrrrrrrllrrrrrrrrrrrrrrrrrrrlzzxxcccccccccxxxcNNNccccccxxccccxxxxxxxxxxccxxxxxcccxxccccNNccccNNZZxxxxxccnxxccnnZZmccccxxxvvxxxxxxxxxxvtttttvxcnZZxvvvxxxxnZZZZZZZZZnnZZZZxxxxccccxxxxnnnnnnnnxxxvnnnnncccnnnnnnnnccccccccnnnnnnnnnnnnnnnnnnnccxxxnnnnnnnnnnZZZZZZZncxxxxxxxxxxvzzttttttttt8>6rttw68rtxxxxvtr86wtxZnxxtw68rrrrtxnZZZcccnZZxcZZnccnZxttvvrr66997666r07666;-667777666rtrtcZxwrrtrw6666ttzzxZxxxzzzzzxxxxxxxxcxxxxxccxxxxxxxtuwww66>>++@oooOOoOOOOOOO%%--;;--;;-%%%%%%%%OO%%%%%%%***:9999rrrr99999999wwwwwww96669999977999977wwwwwwwwrrrr9999rrrrrrrrwwwwwwwwwwwwwwwwrww999wwwwwww99999977999666679wwrrrrrrrr66677999www9997799999999www6666wwwwwwwww66666666>>>>>>>>>>>>>>>>;;;;;;;;;;>>666666wwwwwutttrrtttrrrrrrrrzzztttttttrrrrttrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrwwwwwwrrr00077000000rr000000rr00rrrr00rrrrrrrrr0777700777700000077777777777777077777777777777777777777000rrrrrr000077700000000rrrrrrrrlrrrrrrrrrrrrrzzrrrrrrrrzzzzzzzzzzzzzzzzzzzzzzzzxxxzzzzzlllrrrrrrrrrrrrrrlzzzzrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr", "rrrrrrrrrrrrrrrr000000rrrrrrrrrrrrrrrrrrrrrrrrllxxxxxxcccxxxcNNNNNNNNcccxxxxxxxzzzzxxxxxzzxxxxxxcccccccNZNNccxccxxxxxxvvvxxxxxxxZZZZZmmmvvvxxxxxxxxxxxxxvvvxvvttxxvzzvvxxxccnZZZZZncxccccnnnnZZZnnnnnnnnxnnnxxxxZZZnnnccnnnnnnnnccccccccnnnnnnnnZZZZZZZZZZnccxxxnnnnccccZZZnccccZZZZZcxxZnxxztrrtttvxxxxw68txxr66wtxnnxxrw866wtxxtttr66666666wrtw767rrttnnccxxxxnxttzztrrrrrrrrwrr00rtrrrrrrr076rzvzxcnxtzxcxvrrzxxxxxxnxxxvzzzzrtvxxvvxzzttvxxcrrrtzxttxyttuuuu=+OoooooooOOOOOO%%%%%%%%%OOOOO%OOOOOOOOO%%%%****6666666677799wwwwwwwwwwwwwww9999wwwwwwwwwwwwwwwwrrrrw997ww9999wwwwwwwwwwwwwwwwwwwwwwwwwwttuwwwwwwwwwwwwwwwwrrrrrrrrrrrttwwwwwwwrrrrwwwwwwwwwwwwwtww66>;;;;;;;;;;--------%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%-;;>wurrrrrrrrrrrrrrrrrrrrrrwwrrrrrrrrttttttttrrttttttttttttrrrrrrrrrrwwwwwwwwwwwwwwww00000000777000000000000077000000000000000777777777777777777777777777777777777777777777777770007777777777rrrrzzzzllllllllrrlzzzzzzzzzzllllrrrrllzrrrrrrrrzzlllzzzzzzzzzzzzzzzzzzzzzzzzzzzzlllrrrrllrrrrrrrrlzzzllllrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr", "rrrrrrrr0000000077777700rrrrrrrrrrrrrrrrlrrrrrrrzzzzzzxxxzzzxcccccccccccxxxccxxzzzxxxxxxzzxxxxccccccccxxNNcxxxxxxxxxvvzzvvxxxxxxmmZZZZZZmmmcccccnnnZZnncnnncxttrxxxvvzvvxxxxxxccZcxxvvvxxxxxxcccnnnnxxxxxxxxxxxxnnnnnnnnnnnnnnnnccccccccnnnnnnnnccccccccZZnccxxxnnnccxxxxxzttvxxxxnZZZncZncxxxvzxxxnnZZZttxZZnvrxnnZnxtrrtttrrrt866rrwwrww8666686;-;67wwvtrrtvvzrrwwrrrrzr69txvtr07rxNNccxxtr076trrvxzvxxxnZZxxzZcxxxxxxncxxvvzzwrttrrrr6666667wrw766666-----;;;==OOOOOOOOOOOOOO-%%%%%%%%%OOOOO%OOOOOOOOOOOO%%%%------;;;>>>>666>>>>>,wwww666666666666666666666666666>>>>;;;;;;>>>>>>>>>>>>>>>>>>>>>66wwwwwwwwww6wwwwww6wwwww666>>>666666666666666666666666666666>>;--%%%%%%%%%%OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO*>wrw9779wrrrrwwrrrww666666wwwttwwwuwwwwwwuwwwuuuttttrrrrrrwwwwwwww66666666wwwww6667770000067700000777777770rrrrr0070000000777777777777777777777777770000077777777777700000777000007777777777770rrrxxxxxxxxzzzzxxxxxxxxxxxzzzzllllzllrrrrllzzlrlzzxzzzzzzzzzzzzzzzzzzzzllrrzzlllrrrllrrrrrrrrrrrlzzzlrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr", "rrrrrrrr7777777700000rrrrrrrrrrrrrrrrrrrllrrrrrrrrrrllzzzzlzzxxxxxxxxxxxxxxcccxxxxxxxxxxzxxxxcccxxxxxxzzxxxxxxcNzzvvxxxxxxxcnnZZxccccmmZZZZmmcccnnnncxvtvxcZZZZZncxxxvvvzvxxxxxxcxxzttttttzzvvxxnnnxxxvvxxxxxxxxxxxxxnnnnnnnnnnnnnnnnnnnnnnnnnnnxxxxxxxxZZnnnxxxnnnnnxxx8666wtxnrtxZZZnnxxnnZZZZxxxxxxxxxnZnttxZxxxvttrwttxxt86;866ww86wwrrtttttvrrrtvvvw6;6rtzt66799rrtxr66rxxvxrrrzxtrZNcxxxxxxrtxnvxZnZZZZncxZxttxxxxvztrrrrr9rrr7666rrwwrrtz76;;;6>;-;;;>6ww>*OOO%%O%%OOO%%%66>;--;&&&&%OOOOOOOOOOOOOOOOOOOOOOOOOOOOoOOOOOO%%*&&=;>>&&&&-%%%%%%%%%%%%%%%%%%%OOOOOOOOOOOOOOOO%OOOOOO%OOOOOOOOOOOO%%&&&&&&&&;;>>wwww>>;;--%%%%OOOOOO%%%%%%%%%%%%%%%OOO%%%%%%%%%%%OO%%%%%%%%%%%OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO%%OOOO&>rrw88wrrw888888wwwwwwwwwwwwuuwww>>>>>>>>>>>>>>>>666>>;;;;;;----->>>>>>>>>>>>;;--66666qqqqqqqqqqq77777700rrrr007700wrrr00rrrrr00070000000000000000rrrrrrrllrrrrrr00000000rrr0rrrlrrrrrrrrrrrrrrrrzlllllllzzzzxxxxxxxxxxxxxzzzllllzllrrllzzllrlzzxzzzzzzzzzzzzzzzzzzzzzlllzzzllrrrllrrrrrr000rrrzzzlrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr", "rrr0000000000rrr00000007000000rr00rrrrllrrrrlzlrzzzzzzzllzzzzzzzzzzzxxcNccccccccxxxxxxxxcccccccccccxzzxcxxxxxxxxzvxxxxxxvxxxxxxcZmccxxxxcccccmmZnnnnxvtrtvvtttxncxvtrtvxxxxxxxxcZZZcxxnZcxxxxxxcxxxxttvxvvvvvvvvtttttrw6txZZxvxnxxnnnnxxxnnnnnZZAxtxnxxvtttxxnnxxvrwtxr6ttttttw6rtvxxxxnnnnZZZxttvxtr888ttrrwrrrrtxxxtrwttxxxxvtt86rw>6rxxxvxxnZZxw6;69rrrrrrrrrrrrrw977rrrrw976zzzzzzzzNxzttzxNnnnnnnnnnnnnnnnnnnnnnnnnxxxzzvxxvxxxxxxxxxxztrrrrrrrrr6>ww666>;-%%--::-------:6qrww886>>>>=&OOOooooooooooooooooooooooooooooooooooooOOOOOOOOOOOOOOOOOOOOOOOOOOOOOooooooooooooooooOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO%%%%%%%%%%%%%%%%OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO%%OOOOOOOOOOOOOOOOOOOO&===%OOOOOOOOOOooOOOOOOOOOOOOOO688wrrrtrrrrrrrrwwww,,>>,,,>>>>>%%%%%%%%OOOOOOOOOOOOOOOOOOOOOOOO%%%%%%%%%%%%%%%%%%%%%%-;www666wwrrwww999wwwwwwwwwwwwwwwwrrwrrrrrrrrrrrr0rrrrrrrrrrrllrrrzllllrrrrrrrrrrrrrrrrrrrllzzzzzzrrrrrrllrrrrrrrrrlzzxcNNxxzlllzzzzzzzzzzrrrlrrrrzzzzzrrrlllllzzzlllzzzzzzzzzzzxxrrrrrrrrrrrrrrrrrrr00rrrzzzzzrrrrrrrrrrrlllrrrrrllrrrrrr", "rr00000000000rrr00000077000000rr0rrrlzzzzzzzxxxzzzzzzzzzzzzzxxxxzzzxxccNccccccccxxxxxxxxccccccccxccxxxxcxxxxxxxxxxxxxxxvxcccxcZZZZZcxxxvccccccmmnnnncxxvttttrrtxrrvxZZZZxxxxnZZZcZZZncnZcxxxxxxcZZZZnnnZnnnnnnnnxxxxxxvtvxxxxxxxxxxxxnnnnnnnnnxxw88rw8wtrwwwrrw8ttw66wr886;;66888wrtttttrrtvvtttxxnxtttvrrrrtvxxxxtrwrttxxxxvxxxA6%8ZAt6txxvrrtxZxvttxnZnnncccccccxxxxxxxxxxvzttxxxxxxxxNcxxxxcNmmmmmmmmmmmmmmmmmmmmmmmmcxxxvxxxvvvvvvvvxxvvvvzzrrrrzrw6--%------;77rr00777770rrww6>>;&&%%OOOOoooooooooooooooooo................oooooooooOOOOOOOOOOOOOOOOOOOOOOOooooooooooooooooOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO%%%%%%%%OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO%%OOOOOOOOOOOOOOOOOOOOO&&=&&===&OOOOO%&===O%%&&&==OOOOOOOO--;;>>>>>>>>>>>>;&&&&&&%%%%%%%%%%%%%%%%%OOOOOOOOOOOOOOOOOOOOOOOOOOOO%%%%%%%%&&&&---%%%%-;>;;;;>6ww666666--;;;>>6>>>66666rrrrtxcmzzzzzzzzrrrrrlzzlzzzzzzllllrrrrrzzzzxxxxllrrrllzzzxxcccczzzzzzzzxxzzzrr0rrrrlzzzzzzzzzzzrrrrrrrrrrrrrr00700rrllzrrrrlzzzllllllllrrrlzxxccxxzzrrrrrrrrrrrrrrrrrrrzzzzzzrrllrrrrrrlllrrrrrrrrrrrrr", "000000000000000000000000777000rrrrrlzzzzxzzzxxxxxxzzzzzzxxxxxxxxxxxxxcccccccccccxxxxxxxxxxxxxxxxzxccxxxcxxxxxxxxxxxxxvtttvxxvxxcZZmcxxxxxxccccccnnccnnnZvvvtrttvrrzxxxxvxxxxxxcnxxZZnxxxccxxxxccZZZZZZZZZZZZZZZZnnVVVVnnVxyxnZVxnnnnnnnVVnnnnntw%;88>;6tw>%%;wynwuw88wtww8>;>688---;;;;-8uttuutnwww888rrttxxnZZAZnvtrtvxZntw668w8--6ttw8txnv868rzzzvxxcnZZZZZZZZZZZZZnnnZZZZZZZZNNNNNNNNNNNccNNNmmmmmmmmmmmmmmmmmmmmmmmmcccxxxxxxxvvvzzlvvvxxxxxvzvvxvrr---;;>>;770llllr77777777>>;&&%%OOOOOOOOOoooooooooooooooo..... ........ooooooooooooooooOOOOOOOOOOOOOOOOooooooooooooooooOOOOOOO%OOOOOOOOOOOOOOOOooOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO%&&=>>&&&=====OOOooOOOOOO@+===+=====@OO@+===<3@@@@@@@@OOooooOOOOO%%%%%%%%%%%%%OOOOOOOO%OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO%%%%&&&&>>>>;>;;%%%%%%%%%%-;----%%%%%%%%%%%-*******->>>66wrtrrrlllrrrrrrlzxxzzzzzzzzzzzlrrrrzzzzzzxxzzzzzzzzlzzxxxxxxxzzzzzxzzzzzzzr0rrrrrrrrzxxcxxzzzzzzzlrzlrrrrrrrr0000000rrrrzzzzzllllrrrrrrlzxxNNcxzzrrrrrrrrrrrrrrrrrrrrrllrrrzzzlrrrrllllrrrrrrrrrrr0", "0000000000000000rrrrrrrr77700rrrrrrzzzzzzzlzzxzzxxxxxzzzxxxxxxxxcxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxzzxcxxxxxxxxxxxxttttttttrrttrtzxxxxxccZZxxxxxcccncxxcnZZcxxxvvxxxvtrrrtvxxvvvvxxzxxxxxxxncxxxxcnxxxxxxxnxxxxnnnnxxxnxxnnVxyynVVnnnytttttxytyyt6--;88>>wnnt>-;>>;88wwttw8688wuuww8888wwwwyyyytynVxvtttxxnnnnZZZZZvxxxxttrtr6--->6;8xxr6rZnZZxr668rrrrrrrrxxxxxxxcZZZnnccxZZZZZZZZccccccccNNNNNNNNmmmmmmmmmmmmmmmmmmmmmmmmmmccccccxxxxvvzlvvvxxxxcxxxxxxvttrrrrrww0000r0777;;;:--%&&%OOOOOOOOOOOOOoooooooooooooooo..... ........oooooooooooooooooooooooooooooooOooooooooooooooooOOOOO%&=&&%OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOooooooooooooooooooooooooooooooooOOO&====<<<===&&OOOooOOOOOOOOOOO++===+@O@@@+++++OOOoooooOOooooOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO%%%%&&&&>>&&&&&&&%%OOOO%%OO%%OOOOOOOO%%OOOOOOoooOOOOO%%%%-;66rrrrrrrr0rrrlzxcxxxxxxxxxxxzzzllzllllzzxxxzzzzzzrrrrrrrrzzlrrrrlrrrrzzzlrrrrrrrrrrzzxxxxcccccxxxxzzzlzzzxzrr0000rrrrrllzzzzzzzzzzzzllllzzzzzzzzzrrrrrrrrrrrrrrrr00rrrrrrzzzllrrrzzlllrrrrrrrrrrr", "rrr00000rrrrrrrrrrrrrrrr7700rrrrrrrlzzzzzllzzxzzxxxxxxxxxxxxzzzzxxxxzxxxxxxxxxxxxxxxxxxxxxxxxxxxlzxcxxxxxxxxxxxxtttzvxxxxxxxxxxcxxxxxcmZxxxxxxxxncxxxxcnncxxxxxxxvztzxnZxxxxxxcnxxxxxxcZnncxxcnnvxxxttxxttttvvxxtyyyttyxtttttyxxxytw8666tuwutw;%;-;>68tVnxnZAZt88>>8ww86%;>8uttyuwwttyyyttwtynnnZZnxnZZZxxxvttrr6wtttr666>;;>6rttttxxxttZnxxxxttxxzttrttxxxccnnZZZZZZnnnxxcccnnnccccccccxcNNNNcxmmmmmmmmmmmmmmmmmmmmmmmmmmmmmcccccxxxvvvvvvxxxxxxxccxxvvcxvttttrrr00007:6::::-%%OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO.....................oooooooooooooooooooooooooooOOOOOOOOOOOOOOOO&&&&&&&>>>>>>&&&========>==&&%%OOOOOOOOOOOOOOOOOooooooooooooooooooooooooooooooooooooOOOO+++@OOooOOOooOOOOOOOOoooOO@@@OOOOOOOooooOOOOOoooOooooooOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOooooooooooooooooOOOOO%%%&&&&&&%%&&&&&%%O%%%%%OOOOOOOOOOOOOOOOOOOooooOOOO&&&>6wutzzzzzlrrrrrrzxxcZZNNNNNNccccxxxxxxxxcccNcxxxxxxxzzzzlrrrrrrrrrrrzzrrrr07rrrrrrrrrrrrrlzxzzzxxzzzzzzzzzxcxzzllzzzlllrrrrrrrrlzzzzzzzzllzzrlzzxxxcxzzzrrrrrrrrrrrr00000rrrrrrllzzzzzzlllrrllrrrrrr", "rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrllrrlzzzzlxzzzxxxxxxxxxxxxxxxxzzzzxxxzzzxxxxxxxxxxxxxxxxxxxxxxxxxxzxxxxxxxxxxxxxxxvvvxxcZZcnnxxxxcccxxxxxxxxxxxxxxcxxxxvvxxxxxxxxvvxxcxxzttttzxxnZnZncxcZZnnccccnnxnnxxxxxvvvvvvvvyxxytutytttyyyxnnxytw888yttyytw8;%%->8wyytwtnVnyt8>>888w888>>8wt86>8wttu8>>8tyyyvtrrttttttttrrrrrrrrrrrwtttttttvtr8rxntwxxvxZAZZZZcxxcZZnnZZZZZZnnnnnncccccccnnnNNNNNNNNxccNNccxmmmmmmmmmmmmmmmmmmmmmmmmmmZZmcccccccxxxxxxxxxxxxxxccxvxxxxxxxxxtrrrrrrrq6:****%OooooOOOOOOOOOOOOOOOOOOOOOOOOOOOOooooo...oooooooo........oooooooooooooooooooooooo&&&&&&&&&&&%&&&;,>>>&&&&&&&&>>>>===========&%%OOOOOOOOOOOOOOOOOOooooooooooooooooooooooooooooooooooooooooooooooooOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOooooooooOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOooooooooooooooooOOOOOOOOOO%&&&&&&&&&;;&%&&&%%OOOOOOOOOOOOOOOOOOOoooooooOO%&>,wyyzxxzzzlrrrlzzxcccxxxzzzzccccxxxxcccNNcccxxxxxcccNNNNcxxzrrrrrrrrrrrrrr0077777777777770rrrrrrrllrrrrrrlzzxxxzzzzzxzzzzzllrrrrrllzllllzzxxzzzxxxxxccxxzzllrrrrrrrrrrrrrrrrrrrrlzzzzzzzllllllllllll", "rrrrrrrrrrrrr000rrrrrrrrrrllzzzzllzzzzzzxxxxcccxxxxxxxccxxxxxxxzxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxzzxxxxxxxxxxxxxxxxnZcccxvtzxcxxvvvvvxxxxxxvvxxxxxxvvxxvxcnxxxxxxxzrrtttttzvvxcZZnZZZZnnccnnZnnnxxtvxxxxxxxxxxnnxtwtytwwtyxytxyyyyyxxyyyyxnnnw8>88>>8nw%%%%%%wwttw>8tww8>;;>8tw8wtyyt>88wttttttrttxvttrrttvxxvvvvxxxxZZnxvtttrtvxxZZZxxxnZZZZZZZnnnZZnnnnccccxxxxxcccZZZZnnnnNNNNNNNNccccccccmmmmmmmmmmmmmmmmmmmmmmmmcmmZmccccxxxxxxxxxxxccccxxccxvxccxxxccxxxytttuww:%OOOOOOooooooOOOOOOOOOOOOOOOOOOOOOOOOOOoooooooooooooooo..........oooooooooooooooooooo@@;;;;;;;;66;;;;>6>>,>>;&%%%%%%&&&&&&&&&&&OOOOOOOOOOOOOOOOooooooooooooooooooooooooooooooooooooooooooooooooooooooooOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOoOOOooOOOooooooooooooooooooooooooOOOOOOOOOOOOOOOOooooooooooooooooooooooooOOOOOOOOOOOOO%&&&%%&&;&&;&&%OO%%OOOOOOOOooooooOO.oooooooooOO%&>>rrrrrrrrzzzzzzxxzzlrrrrrzzzzzxxxzxxxxzlrrrrrlzxxxxxxxxxzrrrr000077770r00----------;;;777770rrrrrrrrrr000zzzzzzrrxxxxxxxxzzzzzlllrrrrlzzzzzzzzzzzxxxzzzzzllrrrrllzzlrrrrrrrrrrrllzzzzzlllrrrrrrrr", "rrrrrrrr77777777000rrrrrzzzzzzzzzzzxxxzzxxzxxcxxxxxxxccccccxxxxxxxxxxxccxxxxxxxxxxxxxxxxxxxxxxxxxxxzzzzxccccccccxvztzvxxnZnxvttvvvvvvvxxxxxxxvvvvxxxcxxxnxxcZZZcxxxvxcZZZnxxzttrtxcnnccnZnnccnnZxxxttrrtZnnnxxxxnVVxtwut8;->wtw>wwtyxnnVwwwuttynZnnnu>-;>>6tVZyw%8nZt-%>%%;>;;>>w8>>8ww8tynnytttw88wtttrrrwrrtxxttxnZZnxxvtttttt;;;6rxnxxnZZZnnZZZZZZcxxZZZnncxxZZZZZZZZZZZZnnnnNNNNNNNNNNNccNNNmmmmmmmmmmmmmmmmmmmmmmmmccmZmccxxxxxxxxxxcccccmmxcccxxxccxxxxxxzNNyuuwq>*OooOOOoooooooooOOO%%%%%OOOOOOOOOOOOOOOOoooooooooooooooo...........oooooooooooooooooooo@66666666776;;;67&&>>,>;&;&&&%%OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOooooooooooooooooooooooooooooooooooooooooooooooooOOOOOOOOOOOOooooOOOOOOOOOOOOOOOOOOOOOOOOOOOooOOOoooooooooooooooooooooOOOoooooOOOOOOOOOOOooooooooooooooooooooooooOOOOOOOOOOOOOOOO%%O%%&&%&&&%OO%&===++@@O@@OoooooooooooooOOOOOO%%700rrlzzzllrrrlzcxxzzzzzrrrrlzzzzzxcxzrr77700rrr00rrrrrrrr007777777777--------------;----;777000rrrr0077770rzxxxxxxxccccNNcxxzzlzzlrrrrrrrrrrlzzrrrrlzzzzlrrrrlzzzrrrrrrrrrrrrrrzzzzzlllrrrrrrrr", "llrrrrrrrrrrrrrrrrrrrrllrrrlzzxxxxxxxxxxxxxcccccccccccccxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxzzzxxxxxNNxzrrrrvxxxxttxxtttxxxtxvtvvxxvcxvxmmcvmccmmmcxxxvxxxxvxvvvvxxnxvvcZZnvtxxvxZZnZxvZZxtxtw6688>-6rxnxvttxxxxxzr6rzzr66666;--6txn86;-->8w,wutttrr666wtu>&6tu;%->>-->wtttttrrvr;-;vxZZZmmZvvvvyyyiiu>&>wutyuwwww86rr966;--6rvcmmZMZMMMMMMMBBccccNNNNNNNNNNmmmmmmmmmccccccmccccccccccccccccNNNNNNNNccccccccccccccccNNNccxxxxxxxxxxxccccccccccccccccccxxxxxxvxxvr6-O%%%OooO@OOOOOOOOOOOOOOOOOOOOOOOOOOoooooooooooooooooooooooooooooooooooooo..oooooooooooooo%%&&;;>>---;6666&&&;>>&&&;>>;&%%ooooooOOooooooooooooooooooooooooooooooooooooooooOOOOOOOOooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooOOOOOOoooooooooooooooooooOOOOOOOOOOOOOOOOOOOOOooooooooOOOOOOOOooooooooooooooooOOOOOOOoOOOOO&==>>>>&&&&&%%%OOOOoooooooooooooooo%-6rttrwtrrrww88rrrrrrll99llvvvvllvvvvvvvllrr99977777777777777;;---------:--------------------77779999rl997779rrlllzzzzzxxxxxccccxvxccxvvvvvvvllrrrrrrrrzzztttttrrrrrrrrrrrrrrrtrllzzllrllllllll", "77700rrlrrrrrrrrrrrrlzzzllzzxxxxxxxxxxxxxxxcccccccccccccxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxzzNNxxzrrrtvxxxxxxxxxxxxxvxxvvvxvvmcxcmmcvcxxxxxvlvvvxxcxxxxvvxxxcZxttxnncvnZnnZnxtxxt6;8vtrwwrw66>6rtttttxttttztt6ww6wttrw6;--6tnxtw6>>66%&wtxxxxtw6-;>wu8w6;8yt6%-;8wuuwrwwrw666vxnmcxcmZxxyyyyuw>&&>686&&>wyxnxrtttvvvvZZZmcmmZmmmmmmmmBBccccccNNNNNNNNmmmmmmmmZmmccmmZNNNNNNNNNNNNNNNNccccccccNNNNNNNNNNNNNNNNNNcccxxxxxxxxxxxcccccccccccccccccccxxxxxxxxzr6;-%OOOoOOOOOOOOOOOOOOOOOOOOOOOOOOOOOoooooooooooooooooooooooooooooooooooooo..ooooooooooooooO%%%%%-->>>>>>;;>;&&;&%%%%&&;;&&OOOOOoooooooooooooooooooooooooooooooooooooooooooOOOOOOOOoooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooOOOOOOOOOOOOOOOOOOOOOoooooooooOOOOOOOooooooooOOOOOOOOOOOOOOOOOOOOOO%&&&&%%%%%&%%OOOOOoooooooooooooooo%-;66888ttttttttvvvvvvlvvvvvvvxxllllvvvvvvvvvvvvrrrrrrrrrr9977;-777-------%%%%%%--------;--;7777-------;76;6679rlllllrrrrrtzxccNcxxxcccccccccxxvzzztttttttttrrrrttrrrrrrrrrrrrrrrllzzllrrrrrrrrr", "77770rrrzllrrrrrrllzzzzxzzxxxcccxxxxxxxxxxccccccccccccccxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxzzxxxxxzzzxvtvxxxtxxxxnxxtvtrrttrrrrrlvxxvxxvvxxxxxxxxmmcxvvxxxxxxZxtttxxxxnZnxxtrtr668r8;wwww88668wttttttzttrwrtxcxtwww6-uuw6;>wyxxytw8>;%&8utvxcnnnxytuytytttxu;wuyxytwww86;6666nZZZZnZZZxttyyw>&%O%&&&%OO&>wwwwwtvnZZZZxxxnZmmxZZZZZZZZBBBBBNNNNNNNNNNNmmmmmmmmZZmmmmZZccccccccccccccccccccccccccccccccNNNNNNNNNcccxxxxxxxxxxxxccccccccccccccccnccxxxxxvzzrw6>>&%OOOOooOOOOOOOOOOOOOOOOOOOOOOOOOooooooooooooooooooooooooooooooooooooooo..ooooooooooooooOOOOO%%%>>>>>>;;>;&&&%%OOO%%&&;;=+@OOOooooooooooooooooooooooooooooooooooooooooooOOOOOOOOoooooooooooooooooooooooooooooooooooooooooooooooooooooooOooooooooooooooooOOOOOOOOoooooooooooooooooooOOOOOOOOOOOOOOOOOOOOOooooooooooOOOOOOooooooooooooooooOOOOOOOOOOOOOOOOOOOOOOOO&%%OOOOOoooooooooooooooo%%%%--;>666688wwtttttttlxvvllvvxrrrrrrrrrrrlvvvvrrrlllvvrrrrrrrrrr0777::::::::--:::------%--------;;-------;;66600000rrrrrrrrrrlvvxxvvxxcccccccxxxxxxxxxztttttttzztttrrrrrrrrrrrrrllllrrrrrrrrrr", "rr000rrrllrrrrrrllzzzzxxxxxxcccNxxxxxxxxccccccccccccccccxxxxxxxxxxxxxxxxccccccccxxxxxxxxxxxxxxxxxxxxxxzzzzzxxxxxnxttttrrttvxxxtrtrrrttrr899rrrrrrrrrtxnnxvvvxxttttvxxtttvttvxxtttttttrrwrr88tZt;8rrr8666txxxxxvtxxtw66wtrtrrrttwwtyytw88wtxnnyw6>&--;6rxrvnnt>&%rnAZtr6>8rttw6;-rr6;6rr;ttxnnxxxttuuuw>=OOOOO%OOOO%%%%%%-;>6wwww6;;6rvxxZZZZZZZZNNNNBBZZccccNNNNccccccccmccccccmccccccccccccccccxxxxxxxxccccccccNNNNNNNNcccxxxxxccccccccccccccccccccccccnccxxxxxzzzlrw6>w>;&OOooOOOOOOOOOOOOOOOOOOOOoooooooooooooooooooooooooooooooooooooooooooo..ooooooooooooooOOOOO%%%%&&;>>>>;&%%%%OOOO%%%%%%++OOOOooooooooooooooooooooooooooooooooooooooooooOOOOOOOOooooooooooooooooooooooooooooooooooooooooooooooooooOOOOOOOOOOOOOOOOOOooooooOOOOOOoooooooooooooooooooOOOOOOOOOOOOOOOOOOOOOooooooooooooOOOOooooooooooooooooOOOOOOOOOOOOOOOO%%%%%%%%&%%%%%%%OOOOOOOOOOOOOOOO%%OOO%%%%%%%%%--;;>668wrrrrrrrrrttttrrrrrrrrrrrtrrrrrtttrttvxxccrrrrrrrrrlllllrrllrrr07776667777669w866666666668777770rrttrrr0009rrr99rrrrrlvvvvxxxxxxxxxxxvvvvvzztttrrrrrrrrrrrrrllllrrrrrrrrrr", "lrrrrrrrrrrrllzzllzzzzxxxxxxxcccxxxxxxxxccccccccccccccccxxxxxxxxxxxxxxxxccccccccxxxxxxxxxxxxxxxxxxxxxxxxzzxxxxzzxxttrrrrtttxxxtrtrrtvvttvvtrr8666666wttvtrrttttrttttttrrrrrrtrrwtrww8wrt>vZt8wtxtxxxtrrrttvxxxvtxxxtw6wrwtxtttttwutyxtw68wwtttyy>&--%-6vnxt>%OO%-wxxtrww;6wrrw86rrr9rcv866wtyyuwwuuw>&OOOooOOOOOOOOOO*&>>>wwwwwwt6-%;rxZZZZZZZZZcccccccccccccccccccccccccxxxxxxcxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxccxxxxxxccccccccccccccccccccccccccxxxvvvrrzvtr6>w3,=OOoOOOOOOOOOOOOOOOOOOOoooooooooooooooooooooooooooooooooooooooooooooo..ooooooooooooooooOOOOOOOO%&&>>>&%%%%%%O%%%%%%OOOOOOOOooooooooooooooooooooooooooooooooooooooooooOOOOOOOOoooooooooooooooooooooooooooooooooooooooooooooooOoOOOOOOOOOOOOOOOOOOOOOOOOOOOoooooooooooooooooooooooOOOOOOOOOOOOOOOOOOOOOooooooooooooooOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO%%%&&&&&&&%%%%%%OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO%%%%-;;>668rrrrrtttwwwwwwwwwwwww6688wwwwttttttuwrrrrzzxxvxxccxcczzzxxzzzxxxyytttttvvvtxxttttttttlr000rrrtttttzzzrrrr97799rrrrrrrlllllvvvxxvvvvvvttrrrrrrtttrrrrrrrrllrrrrrrrrrrr", "rrrrrrrrrrrlzzzzlzzzzxxxxxxxxxccccccccccccccccxxccccccccccccccccccccccccccccccccccccccccxxxxxxxxxxxxccccxxxxxtrrttttrttxxxxxxxtrrwrrttrw9rrrrrrrrw9wrrtrtttvxncxtttttrrrrw6666wrtr88wwtxtxt866txtxnnxttt666wrtvvtzxxttrrtxZzrww6uw68wtww8>-%%;wtuuut8;;rZcr>-%&;;-;8tvr6rrrvxcxt99rrvxtw8wuyViyuwuuw&OoooooooOOOOOOOOO=>3wwuuyyiuuutxVVZZZZZZZZZZZZZNcxxccccccccccccccccxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxvzttt770rw6-%%&>&OOO@OOOOOOOOOOOOOOOOoooooooooooooooooooooooooooooooooooooooooooooooo..oooooooooooooooooooooOoOOO%%%%%OOOO%%OOOOOOOOOooooooOOooooooooooooooooooooooooooooooooooooooooOOOOOOOOooooooooooooooooooooooooooooooooooooooooooooooOOOOOOO%%%OOOOOOOOOOOO%*&&===+OOoooooooooooooooooooooOOOOOOOOOOOOOOOOOOOOOooooooooooooooooOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO%&&&&&&&&&&&%%%%%%%%%%%%OOOOOOOOOOOOOOOO%%%OOOOO%%OOO%%->6wutrw8www86>>>>>>>;;------;;>>>>>>>>>>wqq00rrrrrrlllvv0rllzzzzttyyyuuuynVVVVVVVVVVVnnxccvzrrrrqwrtzxxczvvlrrrrrrrrrrr99999rrrrlllrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr", "rrrrrrrrrrllzzzzzzzxxxxxxxxxxccccccccccccccccxxxccccccccccccccccccccccccxxxxxxxxccccccccxxxxxxxxxxxccxxxxxxxxzrrtxxxttxZxxxxxxttrrrrrw6666wrrtxxxvvxxxxtvttvxxxtxytttuuuww6>>6wttw8rrrtnZr68tttrwrtxvttt66;;8txnrrtzxxtr-66wrtztw8668www8>%%%%->uutxu66t66666>&%6;-69w6;w668rtr8rrrlrr8wwwwueeuw>>>=OooooooooooOooOoooOOOOOO&=33>uVAAZnynnnnnnnnNNNNNNccccccccccccccccccxxxxxxxxxxxxxxxxxxxxxxxxccccccccxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxvztrrr77096;%%OO%OOOOOOOOOOOOOOOOOOOOOoooooooooooooooooooooooooooooooooooooooooooooooo..oooooooooooooooooooooooooOOOOO%OOOO%%OOOOOOOOOoooooooOooooooooooooooooooooooooooooooooooooooooOOOOOOOOooooooooooooooooooooooooooooooooooooOOOOooooOOOOOO%%%%--OOOOOOOO%%*&&=======@OOooooooooooooooooooooOOOOOOOOOOOOOOOOOOOOOooooooooooooooooOOOOOOOOOOOOOOOO%%%%%%OOO%%%%%%%&&&&&&&&;&&&&&&&--------%%%%%%%%OOOOOOOOOOOOOOOOO%OOOO%%>>8ww86>&&&&&&%%%%%%%OOOOOOOOO%%OOO%&&&&:::--::;77777lll00rrrr07uuuuuw33uuyyyyyyyyyyyyyyBNccxxytuuutttttvzllvvzlxxxxxvvvllrrrrr9rrrrrr99rrrr0000rrrrrrrrrrrrrrrrrrrrrrrr", "lrrrrrrrzzzzzzzzxxxxccccxxcccccccccccccccccccxxxccccccccccccccccccccccccxxxxxxxxccccccccxxxxxxxxccccxxxxtzxxcxxxxZZntrxZxvtttttrxvvvtrw6ttxxytyxytyxnnxxtuwww6>;nxytttttwwuuutttr88rtrtxrwtZZttx68rtxxvtt8;;6tnZrwrtztrw66666w6;>8utwwwwww86>;;-OO%;>;rZ88wtxnyu-;66;;6r86;8xZnvZcxmv66w;%OOOOOO%OOOOoooooooooooooOOoooOOOOO==34yyyuwwuywwwwwwww,qwuyxxxcccccccccccccccccxxxxxxcccccccccccccccccccccccccccccccccccccccccxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxvvztrrrrxzzrr6>>%OOOOOOoOOOOOOOOOOOOOOOOoooooooooooooooooooooooooooooooooooooooooooooooo..oooooooooooooooooooooooooooooo%%OOOOOO%%OOOOOOooooooooooooooooooooooooooooooooooooooooooooooooOOOOOOOOoooooooooooooooooooooooooooooooooOOOOOOOoooOOOOO%%%----;********>>>==&&&OOOOOooooooooooooooooooooooOOOOOOOOOOOOOOOOOOOOOooooooooooooooOOOOOOOOOOOOOOOOOO%%%%%OOO%%%%%***;;------>>;;----;;;;;;;;%%%%%%%%OOOOOOOOOOOOOOOOOOOOOO&&>>>&&&-%OOOOOOOO%%%OOOOOOOOOOOOOOOOOOOOO%OO%%%--77777lvbzzzl07:-%%%%O@oo&=333=&%,3wwuuuuccZZZZVVAAVNytrwrr9rtvtrzxxcZZZZcccvvvllllrrr999000077770000rrrrrrrrrrrrrrrrrrrr", "rrrrrrrrllzzzzxxxccNNNNcccccccccxxccNccxcxxxccxxxxxxxxxxcxxxxxxccccccccccxxxxxxccxxzzxxcccccccxxxxcZZnxtxxxxxxxxrtxxxtrrxrwtvvvx7rvtrrtnnxttuww8xxxxxxyyyytw;-;6Zntwwuyntxxytw>-;rtw6wr8rwwrr88wr8;>xZnnxr68rrrwt6-;wtxxtzzr666wwuw>8yt66;>w8>8y>w>-wxxxZt6>wtuw6669tvvttxZZZxtt9rrrr86>&&OOOOO@OOOOooooooooooooooooooooooooooooOOOOOOOOOOOOO%%%OO%%*;;6rvcccvcczzvvxxxxxxxxxxxxccccccccccccccccccccccccccccccccxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxNNcccxxxxxcccxxxczzlttww%%OOOOOOOOOOOOOOOOOOOOOOoooooooooooo....oooooooooooooooooooooooooooooooo..oooooooooooooooooooooooooooooOOOOOOOOOOOOOOOOOooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooOOOOOOOOooooooooooOOOOOOOOOOOO%&&;>>>666>==&&%%OOOOOOOOOoooooooooooooooooooooooooooooooooOOOOOOOOOOOOOOOoooooooOoooOOOOOOOOOO%%%&&&&&&&&******%%********>>;;;-----;;;;------------%%%%%%OOOOOOOOOOOOOOOOOOOOOOOO%%%O%OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO%OO%;6zvvlllvv0rrllr07-%%OooooooOOOOOOOOO%%%%%7lcZyuyiyyiVVyxxtcxrwtvrrtztrrzxxxcccmmZcxvvxxvrrrr0076;770rrr0000rrrrrlrrlrrrrz", "lrrrrrrlllzzzzxxxxcccccxccccccccxxcccccccxxxccxxxxxxxxxxcxxxxxxcccccccccxxxxxxxxxxxxxxxxxcccccxxcxxxxxxxxxxxxxxxrtxxtttxxttttrrrvvvvtrw8668wwwwuuyxVVyuwww>%O%>wxtw66wutwww88wwwtxxwwvxvr88rrrrttt86rr8rrrw668wwtw66rtw66wrrw6wrtyu;>wtw6>wnnw68>uw6wtrvnt66wyVVrrrrttttwrttrw88vxcnZVVVyyew3=OoOOOOOoooooooooooooooooooooooooooooOOOOOOOOOOOOOOoOOOO%%%;6lxxxcmxxxxxxxxxxxxxxxxccccccccccccccccccccccccccccccccxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxNNNNNNNNxcNNNNxxvzzzvztu&%OOOOOOOOOOOOOOOOOOOOOOoooooooooo......................oooooooooooooooo..ooooooooooooooooooooooooooooooOOOOOOOOOOOOOOOOooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooOOOOOOOOoooooooOOOOO%OOOOOOO%&&&;;>>;;;;%%%OOOOOOOOOOOOOooooooooooooooooooooooooooooooooOOOOoOOOOOOOOOOOooooOOOOOOOOOOO%%%%%%%&&&&&&&&&&:---------------------%%%%%--%%%-------;----%%%%OOOOOOOOOOOOOOOOOOOOOOOOO%%OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO%OOO->wrtzvvvvrrrrlr006;%Ooo..ooOOOO%&OOOOOOOO;696;%%%%%*>>>>wrxntrttrzxxvttzxcccccmZZmcccZZZcNxrrrr00-:;67700000rrrrrzzzzllzx", "lrrrrlzzlzzzzxxxxxxxxxxxccccccccxxxccccccxxxccxxxxxxxxxxxxxxxxxxccccccccxxxxxxxxxxxccxxxxxccccxxcxtrtxxxxxxxxxxxvnZZttxZttttw666r99rvvr6-;>8,wuyyyyyu6;%-%OOO%>8>;-%%-;>wwwwwyyyZZxw8tt8r86wrw8w8tw66--66tt868rw666rttr6>6rttttttxt6>wttt88ttw6w>yyutrwtxtw8wuyyyyttuuttyyyttttyvvyxnVVAVdyw>@ooOOOOoooooooooooooooooooooooooooooooooooOOOOOOOOOooOOOOOOO-6rzvvxxxxxxxxxxxxxxxxxccccccccccccccccccccccccccccccccxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxNNNNNNNNccNNNNNcvlrrrw6>&%%OOOOoOOOOOOOOOOOOOOOOoooooooo........................oooooooooooooooo..ooooooooooooooooooooooooooooooOOOOOOOOOOOOOOOOooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooOOOOOOOOoooooooOOOOOOOO%%%%&&;>>;&&&%%%%OOOOOOOOOOOOOOOOooooooooooooooooooooooooooooooooOOoooOOOOOOOOOOOoooOOOOOOO%%&&&&&&&&&&&;&&&&&&&&--------%%%%%%%%%%%%%%%%%%%%%%%%%%----;;;;---%%%OOOOOOOOOOOOOOOOOOOOOOOOO%OOO%OOOOOOOOOOOOOOOOOOooooooooOOOOOOOOOOOOOO%-;6wrrrrwrrrrrllr6;%OooooOoOO@=>3wwuuuuuurrtw>:%%OOOOOO%%;rncxZZZZZZnxxxcxxxxcccmZZmZZZZZZZNxxxxxrrr00000rrrrrrrrzzzzzlzx", "rrrrrlzxzzzzzxxxxxxcxxxxxxxxxxxxxxxxcccccxxxccxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxccccxxxxxccccxxvtrtxcnxxxxxxxxxZZZxtvxrrrr866wr97rxcxtwwuwwwwwyu,&%OOOOOO%%&%%%%%%%%%-wwuwwuuwwrw6666>tr8ww66>;866666trxntrvxtwwrtxxxtrtxxxxxxtxnxxxxytw6wwwwwwyyuttrvvtr86>>>wwww>6wuuuuuwuyy8>>>>,www3=OOoOO%%%OOOoooooooooOOOOooooooooooooooooooooooooOOOOOoOOOOOOOO%>688wrrrvxxxxxxxxxxxxxccccccccccccccccccccccccccccccccxxxxxxxxccccccccccccccccccccccccxxxxccccccNNNNNNZNcxxtww&&%OOOOooooooooooooooooooooooo..........................oooooooooooooooo..oooooooooooooooooooooooooooooOOOOOOOOOOOOOOOOOooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooOOOOOOOOoooooooOOOOOO%%%&&&>>>;;&&%%OOOOOOOOOOOOOOOOOOOOooooooooooooooooooooooooooooooooOooooOOOOOO%%%%%OOOOOO%%%%&&&&;;;;;-;;;;;;;;;;;;--------%%%%%%%%%%%%%%%%%%%%%%%%------------%%%%OOOOOOOOOOOOOOOOOOOOOOOOOOOO%%%%OOOOOOOOOOOOOOOOooooooooOOOOOOOOoOOOOOOO%&>>>;--:::7700r6-%OOoo@ooOO==>3wuuyyxnnZZZVVyyeu33,>&&>;rcZZZAAZZZZZZZZxxxxxcccncxxztrrxxNZZZNxZZxxtrrrlrrrrrrrllzrrrrl", "rrrrrrzzzzzzxxxxxxccccxxxxxxxxxxxxxxxxcccxxxccxxxxxxxxxxxxxxxxxxxxxxxxxxccxxxxccxxccccxxxxxxcccxxvtvxcncxxxxxxxxvvvxxxttttrrw6wtvrrrtttyVyuuw3=%&%%OOO%%OO%&>>%O;;>>>>>>>6>>;>;%%;>;;6rtZvrttr868trrxxxZxZZxxZZxZZxxxxxxxccxxxxZVVnnZZnt66wxVxtwuywwytrtrttt8>%%%%&%%%&>O%%%%%%&&%OOO%%&*OOOOOOO%%%OOOooooooooOOOOOOOooooooooooooooooooooooooooooooOOOOOO%%%&;>6rrvxxxxxxxxxxxxxccccccccccccccccccccccccccccccccxxxxxxxxccccccccNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNxzzvztww&&%OOOooooooooooooooooooooooo...........................oooooooooooooooo..oooooooooooooooooooooooooooOOOOOOOOOOOOOOOOOOOooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooOOOOOOOOooooooOOOOOO%%-;>>>>>&&&OOOOoooooooooOOOooooooooooooooooooooooooooooooooooooooooOooOOOOOOOO%%%%%OOOO%%%%------------------------%%%%%%%%%%%%%%%%%%%--------%%---;;-------%%%%%%%OOOOOOOOOOOOOOOOOOOOOOOOOO%%%%%%OOOOOOOOOOOOOOOOooooooooOOOOOOOOOOOOOOOOOO%%OOO%%----;77;--%%OooooOO+&&&&;>>68wrttttyyeeVddyyuyVtxZZxxxxZZZZZZZZZZZZZZZZcxxztrwwzrrzxxxxcxxxxxcNxxxxzzzzrllrrrrr", "rrrrrrlzzzzzxxxxxxxcccccxxxxxxxxxxxxxxcccxxxccxxxxxxxxxxxxxxxxxxxxxxxxxxcxxxxxxcxxxxxxxxzzxxcccxvvvxnnnxxxxxxxxxtttxZZZxxtrr866w797768ryyyww>&OOOOO%%%OOOOO%&>>;6wwwuuuuww8>;>wwwrw6;6tnZxtxZnxxxZxvZZxZZZnxxxxxxztrwrtxxxxxxxcZVywwutw6;>6wtyytyu88tt9rrrvytw>&OOOOOOO%O%%%%OOOOOOOOOO%OOO%*%OOOOOOOOoooooooOOOOOOOOOOooooooooooooooooooooooooooooooOOOOOOOO%;>rrvxxxxvxxxxxxxxccccccccccccccccccccccccccccccccxxxxxxxxNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNvlrr96-%&%%OOOooooooooooooooooooooo.............................oooooooooooooooo..oooooooooooooooooooooooooooOOOOOOOOOOOOOOOOOOOooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooOOOOOOOOooooooOOOO%%--;;>>>;&%%OOooooooooooooooooooooooooooooooooooooooooooooooooooooooooooO+&OOOOOOOOOO%%%%%%%%;;;;;;;----%%%%--------------%%%------------------------;;---%%%%%%%%%OO%%%%%%OOOOOOOOOOOOOOOOOOOO%%%%%%OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOoOOOooOO=>>6777777;;-%OooooOOOOOO&&;;;;;>;;;>>>>=3>33wwuixZZcxxcZZcxxZZZZVVVVVVVVVVVVxxxxZxr00rxNNNcxxxcccccccxxxzzzzrrlz", "zlrrrrzzzzzzxxxxzzxxccccxxxxxxxxxxxxxxcccxxxccxxxxxxxxxxxxxzzxxxxxxxxxxxxxxzzxxxxxzzzzxxzzxxxcccxxxxcncxxxxxxxxxxvvxnZZnxtttr866;76668rtwuuw&OOoO%%%%OOO%OOO%&>>>,wwuuwwyyuwwuyyxxtr866wxrwtZZnnxZxxnxtxZxxxtwrn66w66wtxxxxxxxxxw6>>66>;;;;->wxV,w>wtr8ttttttw>&OOO%&;>>wuww>;&&OO&=====OO&>>>>&;-&%OOooooooOOOOOOOOOOOooooooooooooooooooooooooooooooooOooooOO%&67rlxxxxxxxxxxxxccccccccccccccccccccccccccccccccxxxxxxxxNNNNNNNNNNNNNNNNNNNNNNNNNNNNxxxxxxzrrrrrcxzlr6-%%%OOOOooooooooooooooooooo...............................oooooooooooooooo..oooooooooooooooooooooooooooOOOOOOOOOOOOOOOOOOOooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooOOOOOOOOooooooOOO%%-;;;;;;--%%OOOoooooooooooooooooooooooooooooooooooooooooooooooooooooooooO+==OOOOO%%%%%%%%%%---;;;;;;;;;--------------------------------------%---------%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%OOOOOOOOOOO%%%%%%%%%%%%%%%%%%%%%OOOOOOOOOOOOOOOOOOOOOOoooooooo@+qq00099777;-%OoooooOOOOOO%%%%%%%%%-%%%%OOoOO%%&>w6wrtxxxtrwwrrrrwwwwwwwwwuttttyxczr00rzxNNNNcxxxcccccxxxxxxxzlzz", "zzzlrlzzzzzxxxxxrlzxxcccxxxxxxxxxxxzxxxccxxxccxxxxxxxxxxxxxzzxxxxxxxxxxxzzzzzzzzxxzzzzxxzzxxxccccxvvxccxxxxxxxxxvvtrwwrtnxxZZvw6vvvlttrw6uyu&OO%OOOOOO%%OOOOO%&&>,wwwwww>wwwwuw>66rvxr6;w6>wvxvtvZnxnxxZntxnr;6ZwtzztrrtxxcZZxtt-;8uuw88%;6wwtyx%;>wyrwcnxtw6;%O%%&>uyyyyye3=*%%2334w333O%&>wuyyxytw>=%OoooOOOOOOOOOOOOOooooooooooooooooooooooooooooooooooooOOOo%-;9lxccxxxxxxxxccccccccccccccccccccccccccccccccxxxxxxxxNNNNNNNNNNNNNNNNNNNNNNNNNxxzzrrrrrr07777------%O%OOOOOoooooooooooooooooo................................oooooooooooooooo..ooooooooooooooooooooooooooOOOOOOOOOOOOOOOOOOOOooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooOOOOOOOOooooooOO%%&;;;;-;-%%%OOOOooooo..ooooooooooooooooooooooooooooooooooooooooooooooooooO===Oo&&&&&&&&--------;;;;6666;;;-----;;;;;;;;--------%%%%%%%%-%%%%%%%%%----%%%%%%%%%%--------%%%%%%%%%%%%%%%%OOOOOOO%OO%%%%%%%%%%%%%%%%%%%%%%OOOOOOOOOOOOOOOOOOOoOOOooooooooo*:>709997--%OOOOoOooOO%%O%%%%---%%%OOOOOOOOOOOOO-%%->>-%-%%%%%%%OOOOOOOOO%%%%%-;6670rrr0rrtxxcccxxxxxxxxxxxxzlzz", "wwuuwwtxzzxcxxzzcxvvvxccxccxxNxzvxcnncxvxxcccmmmxccmcccccmmccccxZrxZtrnxvvxxxxvvc9cm9vAvmcxmMMccmMZZZmmcxxxxxxxxcvrvxmxvvvcmmmcxuuuyyyyiiw>>>&%%ooooooooooooo@=2wrrrw9wrtr89rttr66666888uwwwuu6;6rvcxt96wxnxt66x8tr;6vxrvnnr;-rnZnr>6rr86%6w-6xv-;66wuw;8ww6>;68-->wtyxxtttw>;>6uwwwwww6>;%%%-;-;ww>>w>OOOOOOOOo%OOOooooooo.....ooo@oooooooooooooooooooooooOOOOO;;;;6rtxvxxxvxxcxcNcxxxxxxxxxxxxcccccccccccccccccccccccccccccNNNVVVVVVZZxccmccxxxxxzl07666q0rrrq>;%OOOOOOOOOOOoooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooOOOOOOO----%%%%%&Ooooooooo@ooooooooooOO-O%;ooo@oo@ooooOOOOO%%%%OOOOooooooooooooooooooooooooooooooooooooOOOOO%%%>>>>>;--oooooooooooooooooooooooooooooooo%OOOO%----%%%%OO%%OOOOOOoooOOOOooooooO&;&>>;;;--%*:>>:*%******::*******%********-----%%%%%%%%%%%%%%%%%%%-------%%%%--------;;;;;;---------------%%%%%%%%%%%%%%%%-;;;;;;;;;;;;-%%oooooooooOOOoooo%OOO%OOOOOOOOOOO%%-%%%%%%%%%%%%%oOOOooOOOOOOOOOOooooooooooooooooooooooooooooooooOOOOOOOOOO%%%---%%%%%%%%&>>wuyyyytutttrrzrllllll", "uuuttutztzxxxxxxccccxxxcxccxxNcznnnncxxxxxxccccccxvvxxvlxxxxvvxxvvvrrnZrxxvttvxxvvMxrmZ6nxvvvcMMvxccmmmcmnnnnnnnZnxxxnxv88rrtrrr>>>>,3www&%%&%OOooooooooooOO==23wrrrrrrr68rttr6;888wwwrrw88wttw669rttrw66rrvxr69tvr66tnxcZZxr6666888rxvrt>68->xx6;%->6;-%--;;>66%>tVnyuwytw86666>>>6ww6>uw>-----&>>&&>>%>>;&*OOOOOOOOOO@oo......oooooooooooooooooooooooooooOOOOO;;----;;txnnnnmmxxxxxxxcxxxxxxxxcccccccccccccccccccccccccccccNNNVVVVVZZnxccmmccczzzzlr0076q0rttr,>%OOOOOOOOOOOooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooOOOOOO--%%%%%%OO%OO@@oooo@oooooOOooOOo%OOOoooooooooOO%OOOO%%%%OOOOooooooooooooooooooooooooooooooooooooOOOOO%&&>>>>;;--ooooooooooooooooooooooooooooooooOOO%%-;>;;;&&%%O%OOOOOOOooooooOOoooooO&&&--;;;;;*:>>>>:*******::****************-----%%%%%%%%%%%%------------------;;;;;;;;;;;;>;;-----------;;;------%%----%%%%%%------%-----%%OOOOOOOOOOOooooOOOOOOOOOOOOOOOOO%%--%%%%%%%%%%%%ooOoooooOOOOOOOOOOOOOOOOOOOOOOOOooooooooooooooooOOOOOOOOOO%%%%%%%%%%%%%%%%%%&&&&>>;;6wtztrllllll", "twwtyttttzzxxcNNccccxxxxxxxxxNxtxytttvxnvvvvvvvvtw8wyVnxyyttyyyxZAntxZvrttttttttxrlmZxxnZZZZmxvvmmmmmnnnxxxxxxxxyuwwww,>%%&&&&&&OO%%%%%%*OOOOOOOoooooooooO==33338wttuwwwwtyxtw6;wwwwuuttwwwwttw866888www666wxt66tr86>8tZxxnZZxr8866;6rxxx866-6xZZw->w866%%-6wutu6txxtutyyw6;>6>;;>8wwwwww6;--;>>>w,>wyyyuww,>>;;%%%%OOooooooooooooOOOooOOOOOOOOOoooooooooooOOOOO%%-;>>>>6wtxxxxczxxxxxxcxxxxxxxxcccccccccccccccccccccccccccccNNNVVVZZZnnmcccccccxxxzzlrrrr00rrwq;&%OOOOOOOOOOoooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooOOOOOO%%%%%%%OOO%Ooooooooo=ooOO@OOO=Oo%OOOoooooooooOO%OOOOO%%%OOOOooooooooooooooooooooooooooooooooooooOOOO%&&&;>>>;-%%ooooooooooooooooooooooooooooooooOO%%&;>>;;>&&&%OOOOOOOOOOOOOOOOOOOOOOO%%%%--;;;6***::*****%%****%%%*************-----%%%%%%%%%%%%%%%%%%%%%%-------;;;;-----;;;;;;;------;;;;;;;;;;;;;---;;;---%%%%%%%%%%%%%-----OOOOOOOOOOooOOOOOOOOOOOOOOOOOOOO%----%--%%%%%%%%OOOOOOOOOOOOOOOOOOOOOOOOooooooooOOOOOoooooooooooOOOOOOOOOOOO%%%%OOOOOOOOOOOOOOOOOOOO%>wxtlllzvxc", "w88wrrtvzzxxxcNNcccccxccxxxxxxtw>>;>6wxVxxvvvvttwwwwyyyuw,,wwwww-86wxtwZttxxxxttxxttt6;w>wyxvxxxZZnxxtuwwwwwwwww=%OOOOOoOOoooOOOOOOOOOOOOOOOOOOOoooooooooO+==333wuyyyuwwyytw>>>w888wwwwww888w86>888888wwtw;>tt68tw66>;8xZxxxZZZZxtw6;6wrt86668xZy;%;6-%-888uynnxutttttynyw6;;;;;>wutuuuyuw>>>8wu;>;&>wuwuuwwwwuuww>&%%OOOOOoooooOO=33=OOOOO%&%OOooooooooooooooooO%&>wwww;;6wrrtvzxcNxxxcxxxxxxxxcccccccccccccccccccccccccccccNNNZZZZnnnmZmcxvvvvxxzllrrrzrrr06:-%OOOOOOOOOOOoooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooOOOOO%%%%%OOO%OOoooooo@oo+oo@+oo@+OO&O%&o@o@ooooOOOOOOOOOO%%%OOOOooooooooooooooooooooooooooooooooooooOOOO%&=;&&&&-%%%OOOOOOOOooooooooooooooooooooooooOO%%&;;;;;;&%%OOOO%&*%OOOOO%%*&&&&&*%O%O%%%%--;;**%%%%**%%%%%%**%%%%***&********-----%%%%%%%%%%%%%%%%%%%%%%%---;%%%-%%%%%%%%%%%%;;-----;;;;;;;;;;;;;;;--;;;-----%%%%%%%%%%%-;;;>OOOOOOOOOOOOOOOO%%*&%OO%OOOOOOOO--;;--------%%%%%%%*&&%%OOOOOOOOooooooooooooooooOOOooooooooooooooooOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO%>wtzxxxxcc", "6>6666rxccxxxcccmmmmccxxxxxtttw6OOOO%>uyyyyyvtttweee3=%OOOOO&OOO%xnrw6>tttvvvvtt6ZZwuyw&wuu8>wvxtuw8>;&%%OOOOOOOooooooooooooooooOOOOOOOOOOOOOOOOOOOOOOOOooOOOOOO,wuuuwww>>&%OO&>>>>>>>>666666666wrrrwww8tr6>w868twwr6-6tAZnxxxxnvxZZxw;-wwrttrrt6--86%%-xtttxnnx>6wynnyuyyt8;;>6>wuuuutyVyywwwwwwww>>>>-wwwwwrtttrw88wuu&&*%OOOo*%&>>=&&=*%=>&&=+@ooooooooooooooO%&&;&&%&-;>66wtxxNNNxxxxxxxxxxxcccccccccccccccccccccccccccccNNNnnnnmmmmZmccccccvvlr0007rrrrrw6-&%OOOOOOOOOooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooOOOOOOOOOOOOOooOOOOo@ooo++OO==oooO&OO=o=ooooooOOOOOOOOOOO%%OOOOOoooooooooooooooooooOOOOOOOOOOOOOOOOOOOOO&&&=;;;&&%%OOOOOOOOOOOOOOOOoooooooooooooooOOO%&&------%%OOO%%&&&&%O%%%%&&&&&&&&&&&%&%%%%%--::****::%%%%%%**%%%%***&********-----%%%%%%%%%%%%%%%%%%%%%%%---;%%%%%%%%%%%%%%%%------;;;;;;;-----------%%------%%%--%%%%%%--;>>OOOOOOOOOOO%%%OO%%&>&OOOOOOOO%%%--;;;--;--------&&&&;;&%%%%%OOOOOOOOOOOOOOOOOOOOOOOOOOooOOOOOOOOooooooOOOOOOOOOOOOOOOOOOoOOOOOOOOOOOOO*;yxcxzlll", ";;66;;rxNccccxxxZZZZncxxzxxtttw;OOOOO&>,,8888666=232+ooo+oooOooo;FF6%66%tw6;;6wtwwuyy3&OoO*%%>>;&&%%OOOOOOOOOOOOooooooooooooooooOOOOOOOOOOOooOOoOOOOOOOOOOOOOOOOO&===&%%OOOOooOO33wwwwwwwwrrrrrrrrrrrw866866w>-6w68r6;-6nZZZnxxnnxnZZxtrrxxxnr;6>>8tw;->xxxxnnnxw6>6tytuutu8;-;6>>>668wwwwww>>>8uuwwuuw888887999rr98wtvxyyyuuwwww>;>>>wuw>>ww>;>32=OOoooooooooooOOOOO%OO&%%>>-;wzxNNNxxxxxxxxxxxcccccccccccccccccccccccccccccNNNmmmmmmmmccccmZMMccxzrr07-:6rttrrw>&OOOOoOOoooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooOOOOOOooOOOooo@@e=oO=o4ooooooOO%%OOOOOOO%%OOOOOoooooooooooooooooooOOOOOOOOOOOOOOOOooOOOOOO===>=;&&OOOOOOOOOOOOOOOOoooooooooooooOOO&=;>;;--;;-&%%OO%&&;&&%%%%%%&&&&%%*::>>>:**%%%%%***%%***%%%%%%**%%%*****%%%%%%%%-----%%%%%%%%%%%%%%%%%%%%%%-----%%%--%%%---------------;;;;--------%%%%%%%%%%---------%%%%%%%--;OOOOOOOOO%%%%%%%%%*:*OOO%%%%%%%%-;;;;--;--------%%%*::%O%%%%%%%%OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOoooooooOOOOOOOOOOOOOOOOOOOOOOooooooOOO%%uyxxr077", "rrrttrzcNcNcccxvttvxxxxxtxxyytw>OOOOOO%&%%%%%%%%oOOOOoOOe=oO@O+=%--%%;8-6;-%%-;6y;&33e4oooooO%&%OOOOOOOOOOOOoooooooooooooooooooooooooooooOOooOOoOOOOOOOO%%%OOOOOoooooooooooOOOOo3333,,,888wrrrrl88888888;8668;-8>>666;;;8wtyxnVZZxttxnZAxZnxZr->;;;;;;--8uxVZVVVZt6--6wu666>;;;>>>;;;>>>-;>>;;>>*%%&>>>6rrrr9999999999rrnnnnnnnnntwwtyyVywwutw>ww3=OooooooooooooooOOO%&=&%&>>%%&rrxccxxcxxxxxxxxcccccccccccccccccccccccccccccNNNmmmmmmmmcccmmmmmNNcxzrr0%%-6wrtt3>&OOOOoOooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo@OOOOoO>@o=D=e333CC=O3y32=2@F+o@+OOOO%%%OOOOOOO%%OOOOOooooooooooooooooooOOOOOOOOOOOOOOOOoooOOOOOOO%&&&&*OOOOOOOOOOOOOOOOOOOOOOOOOOOoOOOO==>>;;;;;;;&&%OOO%&&&;-------&&&----;;:::**%OO%%%%%%%%%%%%%%%***********%%%%%%%%-----%%%%%%%%%%%%%%%%%%%--------%%--------------%%%%%---;;---%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%--%%%%%%%%%%--%->w>*%%%OO%%%%%%%%%--;;---;---------%%-;;%%----%%%%OOOOOOOO%%%%%%%%%%%OOOOOOOOOOOOOooooooooOOOOOOOOOOOOOOOOOOOOOooooooooOOO*qtxzr00", "ZcnZAZZZccNNBcxv;>6rtyxyuyyyyyuwOOOOOOOOOOOOOOO%%OOOOOO%V3OO**>wD-%86%-;;;6666;;Oweoe)`Y)^D3oO%OOoooOOOOoooooooooooooooOooooooooooooOOOOoOOooOOoOOOOOOOOOOOOOOOOOOOOOOOOOOooOOOOOOOOO%%%--;;--;;66>>>68w8w6;6;6y66668w8>;;-;6utxxrrxZZxxZAnxZt;8tw6;>ww6%;tnVVnnVxt8;--->;;>8w8>w>;->>>>>6w8>-%->=&&&;-;rtlvvlll779rllrr66668wwrxtvnZZxxntrxxrwr>=OooOOOooooooooOOoOOO%&>=>uw&O%7rtxxxcNxxxxxxxxcccccccccccccccccccccccccccccNNNmmmmmmmmcccccvvlxxxzrr76-%%-:6qq>&OOOOOOooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooOOOOO&dD=o3Eefee=&&=&O=ud342L4==3=OoOOOOOOOOOOO%%OOOOOooooooooooooooooooOOOOOOOOOOOOOOOOooooooooooOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOoOOO%==&&&;;;---&%%OOOO%%&;;;>>;;;;&&;;---%%%:**%OO**%******%**%%%**********%%%%%%%%%-----%%%%%%%%%%%------%%-------%%%%--------%%%%%%%%%%%------%%%%%%%%%%%%%%%%%%%%%%%%%%%%--%%%-----------%-;-%-wxu>%%%%%:%%%%%***--;;---------------;>>-%;-----%%%%%%%%%%********&&&*%%OOOOOOOOOOooooooooOOOOOOOOOOOOOOOOoooooooo@ooooOOOO-rxNccN", "ZrvZZZZvZNccNx07%%%-;>>6uw>>>>&%OOoOOOOOOOOOOO%%O%&&>>>&&&&&&&;;;-->>--;%%%---;;&wyweSLS^^L=&=%>O%=%O@3e@@OoooooOOOOOOOOOOOOOOOO&OoOOooOOOOOOOOO%%%&&&%%OOOOO%%%ooOOOoooOoooOOOOOO%=33>&-6w8899666666666>66886>;>wwww>;w>6;-->>;-xAZxZZxZxxxvw>;ww8>6ww>86>wnAZnxnVVnyw6-;;-->>->-%--%%%---;6w6>OO&>&%>ttw69vccc9;-7979lr766896-t6;8nAnrZxxxxr68w=OO%OOooooooooooooO=33>3%=;>3;,;0txxxxcxxxxxxxxccccccccccccccccccccccccxxxcccccZmcccccccccxxvlrrrrrrrtt6>-%%%%%OOOOOOOooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo@o@+oooo@o..o+@o@d24oFw3CDeC^3=+CDO3>OVd=ULeedY3OO=oO&oO%OOoooO%%OOOOOOOOOOOOOOOOOOOoooOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO*%OOOO%&OOOOOOOOOOOOOOOO&=;>>>;-%-%%&>=&oO*&&--;-;66>-%%%------:%%*>11*O%%%%%%**%%%%************%%%%%%%%;---------%%%%%%------%%%%%%%%%%%--;;----%%%%%%%--------%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%-----::------%%----%%wyw%%*%%>%:,*O%*:::---%%-----::>%---------------**%%%%**:*******%%&&&%%%OOO%%%OOooooOOOOOOOOOOOOOOOO%OOoOOOOOOOOooooooOO*:wxNxxc", "AxttrvnxzzxNNx07%%%%%%&&&%OOOOOOoOOOOOOOOOOOOOOOZu-%%68866666666t866>;;66>>>>>>>>&==OO+Oo==Oey>>=>>=OO=3=+++@@@@%%%%OOOOOOOOOOOOoooOO&OoOOOO%%%%&&&;;;&&%%%%%%%%OO======+OoOOoooooO=3uuuwtyrrr968886666666666>;;-;-;w6;6uww888ww;tnnnZZZ88wtvr86-6wwww6-;8tt86wynnnnnnxxnytyu>-;>;-;;%%-O%%;>>-%OO%&%%-w66;;799lvr9r9999999rrrr968tvvvxnxvvcnxvxw>&%OOOOOoooooooOooO%=>3uw=&&&;&-7rxxxxNxxxxxxxxccccccccccccccccccccccccxxxccccccccccmccmmmmccxxrttttyyyytw>>:*%OOOOOOoooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo@o@+oooooo@+@oooo@..5(^FdLLYFSDF@FY3=ode3o>edV3>@<33d/3O3Ao>O=o@oo==OOO%OOOOOOOOOOOOOOOOOOOOOOOO%OOOOOOOOOO%%OOOOOOOOOOOOOOoooooOOOOOOOOOOOOO%&=OOOOO*OOOOOOOOOO>>>;&-%%---%%&*OoO=>>>>6666>;-%%-----%-%%%%***@O%%%%%%********::*****:::::******;;---------%%%%%----%%%%%%%%%%%%-------%---%%%%%--------%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%-----;;;::-------:::----:u,%%*%**%***ww*--------------------------------***%%***::******%****%%%*%%OOO%%oooooOOOoOOOO%%OOOO&=>==&&&&&&%O@@@OOOO%qwyZZNNZ", "yZZxZZxzxxxcNczr>&OOOOOOOOOOOOOooOOOooOOOOOOOO%%;-;6rr6;66666666>>>>>>>w86>>>>>>>&>w>=2=3e3O=&O&>>>=&==>=====+++;----%%%%%%%%%%%&>>=3yu*&&&&====&;>>>>>>&&&&&&;>&&===>333>===OOOOOoO%&>>>8868rrrww86>>>>86>>;;;;uw;>ww--;-->>>wyrrttxxtr;;6ww6;;tyxttttu%6t8%%%6xxytynZZZxxAn>-8>>>w6>>wO%%%%%%%%O%&%O%;>66;-;6979976777;9llr9rt-6rtttxZnxxnnxxcuw>>%OOOOoooooooOOooOO=3>u%%%%u3-;rtzxxNxxxxxxxxccccccccccccccccccccccccxxxccccccccmZZmmcccnnnZcVVVxxxyyuw,>*%OOOOOOOooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo+@ooofs.@CEESUEDCLLSeew>e3O=do>OYF=O%,%>@2O3=^T^^%=dD=af;O%3OOOOOOOO==&&%%%%---%%&OOoo+=&&-;6;---&&&-:----%%>**%%***%%%%%%**%%%%%%%%---;;;>>;;;;;>>>;;;----;---------%%%%%%%%%%%%%%%---%%%%%----------------%%%%%%%%%%%%%%%%%%%%%%%%--------;;;;;;;>:::-----%---%%-:%>;%-;-;%;;%-yy%-----------%%%%%---%---:--------**********************%%::*%%%*>&&&&&&&&&;;&%&%%OOO%&=>===>>>==&++=+&***>,uyxtrt", ">AZyZAVVZxztzxxxu>%OO%OOOOOOO+@OoOOooOOoOOOO%%&&6666-%%;-;;;6666-->>86>>>>>>>>>6>ww>&33O3w>>w>>u;&&>>>>>========>>;;;;;;--%%%%--&&%%>w,&&&&;;;>>;;;;;;;;>>>>>>>>&&;;;>3wuw,ww>>,&*OOOO%%%%%%;6ww>>>>>>>>>>>;;;;;tw>>uw>>-%%>;%>yx86rtr6>66666;;6yyt8>;66;>>>;---tww8wtxVnynZx>-6;>wuwwwy>%%O%-%%&%&>>%O%>;;;-->6%66;;666;6rr6;;6;--6rvvrxxZZZcxxytuw>%OOOoooooooOOOooO&>OuOO%%Vu-;rrzzxxxxxxxxxxccccccccccccccccccccccccxxxcccccxcmZmnnnccZZVVVVVVyyuww3&*OOOOooOOOOooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooO@oooooo2sOC4OO=eOO>3>VV;O33O=OO&y3wo=d^{Eo+233=%O%%%OOOOOOOooOOOOOOOOOOOOOOOOOOO%O%&>;&%OOOOOOOOOOOOOOOOOOOOO%%%OOOOO%%&&>&&>&OO&%%%%%%%%OO%%%------%%&OO@@@OO%%---%%-&;=:---:-%%>:*%%****%%%%%**%%%%%OOO%---;;>>--;;;;;;>;;;;;;;;;;;;---%%%%%%%%%%%%%%%%--%%%%%%%%%%------------%%%%%%%%%%%%%%%%%%%%%%%%--------;;;;>>>>:::-----%%%%%---O;-%-;-;;>>%-ttO----------%%%%----%%%--:--------------------------------->ww6>;>>>>>>>>>>>>>>>>-%OOOO%%%;>>>>;&&&&&*****%%*>>:*:", ";yw%>uyVNxttttttyw&OOOOOOOoOOOOoOOOoO=&O&&&&&&;;6666868t88888888www6>>>;>>>>>>>6;;6;%,u>dyuww%%%>>>>>>&%;;&==&&&;;;;>>>>>>;--;>>&%%,>%%;&&&&&&;;;;------;;--;;>>>>;;-;>ww>>>8>>6>>>>>,www>%%%-;;---;;;>>%--;;;;;%-%-ww6uxuuyu>8nx86rxxrr866668xA8wyyw>--w868ww86886>>6wtxZZxt6;-->www>>ww>-;ww>%%%>uw&%%-%%%%---;88;;66->6686;-%r;%%6r6;;8tcncxxywwuu>%OOOooooooOOOOOOO&Ou%&%Oy;-7rzzzxxxxxxxxxxccccccccccccccccccccccccxxxccccccmZnxxxxxxxxxxyy33>=&OOOOoooooooOOOooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo+=oooo5hY^f2(^dSLfLe4=d3==3&o==CC3O>3=&O=>%FUuO=%>y%yOO>3of^Y@=@o@=>;%%%%%%OOO%OOOOOOOOOOOOOOOOOOOOOO%O%%%%%%O%%%%%%%%%OOOOOOO%%O%%%%%OO%%%%%&%&&O&uw&&&&&&&&%OOO%%--;---%&&&O$+@oO%-;%%%%%&*O*%%%**%%**%%%OOO**%%%%%*:***%%%%%%%--;;;----;;;;>>;;;;;;;;;;;;--%%%%%%%%%%%%%%%%-%%%%%%%%%%%%%----------%%%%%%%%%%%%%%%%----------------;;;;;;>>:::::***:*%*::*%%;-%;;-->;>;->>%**%%%%%%%%%%**::**%%%*::::::::::::::::::********------;;-6utw>>>;;;;;;;;%;>;>686>>&&%%&&;;>;;&&%%%&&&***%%*:*%%%", "O>&O%:>,uuyNNxtre3&OOOOOOOooooooOOOO=33&>>>;;;;>t;-wnnt8ttuww866ww>%%>wwwww86>>>x66nyuVAyw>--;rv;;;>>>>;>;;;;;;;%%%&&&&;>>;&&;>>>;wZV>%8----;;;;>;;;-;;;;----;;>>>>;-;>68>;>>;;;&>>,,,wwu>%%OOO%%%%--;;;%%%--;;-%-%->>>uyyyxyuyVZtrxZnxx666>;>tAuutytwww>6ww868w8886;>8twyyw8w8--;>8>%%%8>wyVVw%%%>yu>&>%%O%%&;&>>>>>ww>6668ww6;r8;-----%-8rw966w66uyw&OOOooooooOOOOOOO%%w&;;%w%60zxxxxcxxxxxxxxccccccccccccccccccccccccxxxccccccncxrwwwwwwww>>>OOOOooooooooooooOoooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooOOOOOOOOOOOOOOOOOOOOOOOOooooo2FD@)hoSaS(U^UddS3=o=OoOweCC=3FyOo>33>>>AD%w>u%O;&%,&2o2.Kh5<@O@=&%&%%%%%%%=%OOOOOOOOOOOO%*>&&%OOOOOOOOOO%%----%%%%%%%%%%OO%%%%&&&%%%%%%%%%OO&>&%&w;;;&&&&&%%%%%%-----%&;=%#+@oO%&;---%%OOO%%OO%%%O%%**%%%%**%%%%%%***%%%%%%%%---;;;;;;;;;;>;;;;;;;;;;>;;---%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%--------%%%%%%%%------------------------;;;;;;;;:::******%%%%%%O%;-%>;%-;%;6-%;>***%%%%%%%%%*:::%%%%%%**********::::::::****::::::---:::>>q6>:>>&&&&&&;;ww8>;66;>>>>>>>6>>>;;-------;---:**:*%%*", "OO=3>&*O:>wuyyyyyw>%OOOOOOOoooooOOOO&33*;&;;>>>>Di&%%%&>ww,>>>>;&;&%&,uuwww>>>>>ArrZt;>w>;>>-;;%%-;;6>66;>>>>;;;***&&&==========-%;uw-%-------;;>;;---;;;;;;;;;>>66;;;>686;66;;;&;>;&&&&w&OOOOO%%%%%&&&&%%%%%%&&>>&&>&%>&;>,wwuuttrttrww6886-%;rw>--;;>8-;>6>>688w86>6tx8>;>8ww8>>6w8-%%>wyVZVt8>wuyu>>w&&&===>3>%O&>w,,88wwuuuwrrr66;;;-8rr6666uwwuu>%OOOooooooOOOO%%%O%&-;>>>--7rzxxxcxxxxxxxxccccccccccccccccccccccccxxxcccccncxr6--;-%%%%OOOooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooOOOOOOOOOOOOOOOOOOOOOOOO=oo@=fLY4Ca$pJS+wC=3eF33dTFeO33=O=dF3%AwO>OOw>&%OOw>%%>wOO4+#`^saSLD3OO,&&&&&&&&>&OOOOOOOOOOO%&=>>&%%OOOOOOO%%&&>>;;----&&&&&&&&&&%&&&&&%%&&&%%%>;>>;%%%>>>>>>>>=&&%%%----%%%&=*X..ooO%-%--%OO%=:*OO%%%%%***%%*:**%%%%%%%%%%%%%%%-------;;;;;;;;;;;;--;;-;;>;;------%%%%%%%%%%%%%%%%----%%%%%%%%--------%%%%%%%%------------------------;;;;;>>>:::*****%%%%O%:q-;%%;;%;;%;>-%;>****%%%%%%%%%**:%%%%%***********--::::------:::::::-:::>6>:::::>;;>>>>>;xxt6>>;-;>>>;;;>>;---------;-----%%*%%%*", "=O*3**>%%%%%:quNie3=OoOOoooooooooOOoO&&O%%%&>wwu;&>w>%&w&&&&&;>>&>w,wuuw;&&&&&;>7-66668>>;66;79;;666;------;;;;;========%&&&&&&%;-%%----------;;;;--------------;;;;;;;66;-;6;;;>>>>;;>wy>%%%OO%&&&&&&%%%%%OO%%&>;%%>&%>&>>&&>&%%-;;;>6668tr6%-66;;ww6--;-%;wtuw886>>8xAn6-8w6>wwwwyyw>>8uyxyyyxVVVVu&>w&>3>=&>3y>%;,>&&>,wwwwwutr9rttw6rxZnxnZZnxyyw%OOOOoooooo%OOO%%%%>%;;>>%-%-7rrtzxxxxxxxxxccccccccccccccccccccccccxxxcccccZxt6%%O%%%%%OOOOOOooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooOOOOOOOOOOOOOOOOOOOOOOOOoo@222@o+.$2ss@fw3eew==&3TFDFDd=3OoFSdEV==wFwO,>->%%t6TyV=+.2SK))Yd@O==%&&&&&&==3=OOOOOOOOOOO%=>>&&%OOO%O%%&&>>>666>;---&&&&&===&&&&&;&&%%&&&&&&Ou>OA)^w>>>>>>>>==&&%--;--%OO%&% ..O%%%%%-%OO=ew>*%*:**%%%%OO%***%%%%%%%%***:::--------;;;;----;;;----;-;;>;;-%------%%%%%%%%%%%%%----------%%%--------%%%%%%%%----------------;;;;;;;;;;;>>>>>::******O*>*%:yA--%%;;%;>-;>%-;-*****:::*%%%%%%%%%%****%********--::::-----::::::::-::>>6>::>>::;;;;;;;;ww6;;666;;>;---;;;-%%%%%%%------%%%%%O%*", "%>>%%>>%;>>;%%>txtrw6-%%%%OOOooOOOOOOOOOOOOO%%&&%wO&uOOu%&&>>;-%w>>>>-->;>6>>6>;w>&>,,>6w-%66-;9>>>>----;;-----------;;;;----;>>>>--%---%%%%%%%%;-%%%%%%--%--;;-&&&&&&====%&&&&%;>>>>>>>>>>;----%-;;>;;->>>;---%;;--;;>>w86>>68wwwwww6>>wwww86>>uw6>6666>68w8668>>>>>>>ww,&%%>w,%&>wwwuu%;wyyyyitxxyw>==O=wuwwuy>>>>>>&&%&>w,>>>wuyyiVu>;>8rttvxVZnyywOOOOooooooOoooooO33ww8977vw;;rxxxnxcccccccccccccccccccccxxxxxxxxxxxxzzzzxxe3+OOOOoOOOOOOOOooooOOOOO%OO=oo@ooOOOOoo;=oOLYe2e5D2CLD244@43TD3oeCO==O=Dy=OOD)OyF33O%>%>%%%&-----&&&;&%OO%OO%&==>;%%%%%OO%%**&:>>>:*:*%%*:::::***%q>%:>:>*********>%%ATUu*&%*w>%%----%%%%O>1OO=OoOOOO**%O*%*&O&OVV>O%&*%%%>>%O*&%***%%%%*%**%%%*%-%%%%------::::::::::::::::-------%%%%-------%%%-------%*OOOO==o%%%%%%%%%%%%%%%%%%**********%%%%%%%-----;;;>>;;;;;;----------;>>%-;;;;-%;;;;;;;;:::--::::::::--%%%%-----%%----;;;;;;;;;;;;;;;;;;;;;;;;;;;;;>>;;;;;;;;;;;>>>;;;;;::::------------***%%%%*%OO*:**:", "%>>OO%>>&-;;--6y6--;;--;OOOOOoOOOOOOOOOOOOOOOOOO3DVO%ww%>>>>>>>>>--;;--;->>>>>>->&,yy>>68>-%;66%-;>>>>>6;;;-----------;;;----;>>;;-%%%%---------%--;;-%O-%%-----&&&&*%@@OOO%&&&&;;;;>>>>>>>>;;;;>>>>>>>>>>>;----;;--;>>>>>>666668wwwwwwwwww8>>>>w6>;>66>6686>;;;>&&>>>>>;,w>>>>>&&&&&&%%O&wyyyuwwtyyw>>>&&>uVVt6O%>www>&&>>>>>>>>>>>uyyuw866wrttuxyyVu%OOOooooooooo@@@=d=>>6w79cw;;rxxxZxcccccccccccccccccccccccxxxcccxxxxxxxxyy3=OoOOOoOOOOOOOOooooOOOOO&%ooO++OOOooO@=o@2+Oo@o;%OOO%%OOOOOOOOOoooooooooooooooooooooooooooooooooooooooOOOOOO%%%OOOOOOOO%OO%--%%Oo=o@=fYFDdTFwAuvrtrO%OeLoLY+Uo5f@fFYo23fo=o3EU+=Deo3=d==3&DT&*%=w&&%O>%&&&&&;;;&&;>&%O%OOOOO%&=>---%%%%********:**::**:****:>>,*:%O:1:>******::O:,%%>>*Owyuw**w----%%%%*OoOOoo=***%%%%%*%%*O*%>w%O%*%O%%O%%*%%%***%%%%*%**%*::*--%%------:::::::::::::::::----------------------------%O%=&OoO=%%%%%%%%%%%%%%%%%%***********>>w%%------;;;;;;;;;;;-------%%--;;-;;>>;;-;;;;;;;;:::----->>>>>::----------;>;--;>;;;;;;;;;;;;;;;;;;;;;;;;;;;>>;;;;;;;;;;;>>>;;;;;>>>:::----------*********%*:>::>", "&ww>%&,w&%-;-->w6;-;6;-&%%OOOOOOOOOOOOOOOOOOOOOO%d=O%%%%>>&--;>>>----%%-->;--;>-&&,yu&%>%>w6;;;->>6>>>>>-;;;;---;;;;----;-----;;---%%%%%--------;;-%--;>%%%-----%%%%%OOOOOOO%&&%----;;;;>>>>>>>>>>>>>>>>;;;;;---;;;;;>>>-;>>86>>>6688wwww86>>>>>6>;;;>>>>666;;;;,;&>>>>>&,ww>;&&&%%%&;&&>wuuu>;&;>6>&%%%%&,yVVw;>>>>,wuy,>>>>>>>&&%&wyyyuw8wrtrr>wuyVy;%OOooooooOoo@oo@3%&--;--76--wttvcxccccccccccccccccccxxxxxxxxxxxxxxxxxtuq6@OooOOOoOOOOOOOOooooOOOO>OO>=oooooOOOOoo=ooO=@OOO%;%O%&%OO%%OOOOoooooooooooooooooooooooooooooooooooooooOOOOOO%%%OOOOOOOO%%%%%%%%o&=ooo2TTDeuw>>wt%;>O>*eUo+e@2+++<+YL2o2^^eo4SU=eA=oe==%O=Ow33%OOw>&OO&%&&&&&&&&%%&&%OO%O%%OO%*O>>>>-%%:::&***%%%%%:::*:>>:***::%:*:uu:%****::::>>,3:%%>>O%D^^VO----%%%%&Oo*Ooo=%*>&%O%****%O%wO%O%*%OO**O%>,*%>***%%%%*%%%%%**%--%%----::::::--:::::::::::-------------:::------------%%*Oo==3C%%%%%%%%%%%%%%%%%%********%%*>ww%-------;;;;;;;;;;;;;---------;;;;>>>>;;;;>>>>;;>:::::::::>>>>::----;;;;;;>;---;;;;;;;;;;;;;;;;;;;;;;;;;;;;>>;;;;;;;;;;;>>>;;;;;>>>>::::--------::******%%%*:::>", "%3euww>>&%%---%-r6;66>;&>>=%OOooOOOOO%%*O%*&&%OOOOO>uO%w;&%%%%-->>;--%%%>>>-->>>&>>>&&&>;&%-%%;w888>>;;;-;>>>;-%;;;;----;-------%----%%%-------->;-%%%--%---%%--%%%%%OOOOOOO%%%%%%%----->>>>>>>>>>>>>>;;;;;;;;;;;;;;>>>>;;>>>>>>886>>>>>>>>>>>>>6>;;;;;;-;>>;;>6w>&>w,>>>>>&%%&&&&%&>w>;uww>%%%%%%%OOOOOO>ydu>>6uw6>>wuyw>>>>>>-&%%>uyuw>8tyxtrw>uyVAy>%OOooooooOOoooooO=ww8r7;76>>wttzxxcccccccccccccccxxxxxcccxxccxxxxytuw>*%OoooooOooooooooooooooOOOOO%OooSJ=OOOOOOoooeF*O%y3%>w>-%%OOOOOOooooooooooooooooooooooooooooooooooooooooooOOOOOO%%%OOOOOOOO%%OOO%%%oO=ddSfUEJd3>wO>xwwu&&=o3=f4+...L44^2o4CYJ322d+d3oTD=Oo3==O>OAdw==&OooO%%%%%%%&&%OO%OO%&%>=O*33%;>>>;-*>::&***%%%%%::*%*>>:******>:>uu:%****::::w%O*3>::&:OO%*%>--%%%%%%O%**OOOOOO*&*%%%&&&OO*AO%%*:*OO*OO%%%OO****%%%%*%**%%%%%-------::::::---:::::::::::-------::::--::-------------*O>==3=eU********%%%%**%%%%*****%:*%%%**:--------;;;;;;;;;;;;;;;;;;;;;;;>;;>>>>;;;>>>>>>;>>;;>>>>--;;;;;;;;;;;;;>;;;;>>;-;;;;;;;;;;;;;;;;--;;;;>>;;;>>;;;>>>>>>>>>>>;;;;;>>::::::::::::::::******%%%%****", "O&=>>>&O&%%-;-%-;--;>>>>>>=*OOooOOO%*=>>*&=>>==&O3=>,>w&;;;>;---;;;----->>>-->>>>w>O%ww&>>>>wu,&-;>>>>>>;;>>>;-%>>;;;------------------%---------;>>;%%O%---%%%---%%%%OOOOOO%%%%%%%%-----;;;>>>>>>8ww>>---;;;;;;;;;>>>>>>>>;>>>686>>>>>>;;;>>>>>66>>;----;;;;;>6w>&>,>>>w&%%%&&%&&&&>>%O&%%OOO%&--%OOO=>&wdy;%-8->www>-->>>>>>-%%OO&>w>>-6tytwwuuyyyVu*OOooooooooooooo@=O>wwxt9rrrrtxxxnxcccccccccccccccxxxccnnnVVxxyytuw>:*OOOOooooooooooooooooooooOOOOO%>%eLJo3=@oO=eVy3DAU>yytw>-6w;OOooooooOooooooooooooooooooooooooooooooooooooooOOOOOOOO%%OOOOOOOOOOOOOOOO&OeDLELfd=CLO>u&&&DwO3=3=C4SSWYLgYP5`_^5ooeSo@+2SOEDo===w&ww&Vy&3OooOooOOOOOOO%%&OO%%&;>>3>=3ye>-;;;;::**********%*>>***%%**::::::%O:::,***:::::**&*%O%::>**>*OO%%%%%%%%O*&*O**O:*%***%%OO**wATD>*%*%%%%>uu&O%&****%%%%**,w>%%*:-------::::::---:::::::::::-------::::--------%%-------**OOeTL&o********%%%****%%*****%%****%%%%--------;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;>>>>>>;>>>;;;>>;;;;;;>>;;;>>>>>>;;6ut6-;;;;;;;;;;;;;;;;;;;;;;;;;;;>>;;;>>>>>>>>>>>;;;;;::::::::::::::::::******>>:*****", "*OOOO%%O%%%&>>>>-%->>;&&%%OOOOOOOOO%&=>3&&=>>>==>u=%%;w%&&>>>;%%%--%%;>;>>>-->>>%>>O%wwOO3wOoO=%;;>;;-;>>>>>>;-%;;;;;;;;--------;;-------------->;-%->tV--;;%%-;;-&%%%OOOOOO%&-%%%%%--------;;;;-;>86>;-;;;;;;;;;;>>>>>>8>>;>>ww>>>>>>>>-;;;>>>>>66>;;;;;;;;---;w>;>>>&;;%%>w3&%%%%&&&%OO%%&%%%%--%%&>wewuw,&->6;688>---;;>>6>;-&OOOO%&>>www>6wyyVywu>OOOooooooooooooo@+o=>>ww66wrtxxxxxxcccccccccccccccnncxxxxxwwww,>>>*%OOoOOOooooooooooooooooooooOOOO=O=CC=oo====>eCFGO;yTytwxt66wyVVe=OoOoooooooooooooooooooooooooooooooooooooooooOOOOOOOOO%OOOOOOOOOOOOooOOO=FF3fd@o+eD&>w&ODOeeoYe2+5LS^`W.f55oTYS2ooaS+DCD=+O=+&oe%>&O&&O4@@OOOoOooOOOOOOOOO%&*&===&&>uw&-;;-:>:*%%*******%*>>>>>********%*%:w>*>::::::::*,w>%*>>%*OO&:*>%%%%%%%%=OO**O*3Vu>%%***>*%OOO,O&%OO%%%%uAV>%>>****%%%%**,w>%%*:------::::::::--:::::::::::------------------%%%-------*,3%O&OOe********%%%***********%%%%*::*%%-------;;;;>>;;;>>>;;;;;--;;;;--;;;;;;;;;;>>>>;;>>>;---->>>>>>>>;;>>>>>>>--6ut6-;;;;;;;;;;;;;;;;;;;;;;;;;;;>>;;;>>>>>>>>>>>;;;;;::::::::::::::::********%%%%*:>>", "&OOOOO%%OO%&&&;>>>ww6%%%OOOOOOOOOOOO%&=>========e3%>>&ww%&&;;-%%->>--;>--;;%%;;-%%%%&;&*&&>3=O+4>>>>-%%%>>>>;---;;;;;;;>---;;;;;;;----;;;;;;;;;;>;%%%8VF-;>>-%-;>;%%%O%OOOO%%&--%%----;;----;;;;--;;>;;-;;;;;;;;-;>>>>>>>>>>>wuuww6>>>>6>>>>>>>>->>>;;>>>>>>>>>>w3>,>>>>%O&wyw>&%%%%&&&;&&&&%%%%%%%&>>333>=&;>>8tw8;%%;8;>66>>66>&OOOO%>w,>>>wyyyy>&=*OOOooooooooooooooo=3>;ww66;6rtxxxvxcccccccccccccccZZxvtw86%%%%OOOOOOoooOOOooooooooooooooooooooOOOOO&Ooo=4fo+3eeeyy>yV%>xZ6ttyywuAUSe+@@ooooooooooooooooooooooooooooooooooooooooOOOOOOOOOOOOOOOOOOOOOOOoo@+O3Se<2342ee333O3LeF@dD4fds+@)^ X5.o#2..L[L5oDfo+o=33eoo3e3&>%&ww=3d=o=oOooOOOOOOoO=3=%O&OO%*&&&&->w>*::*%%*******%*:>:>>3>:*%%**:::qyw*%>:::::**%OOO*>:*ww**,>OO%%%%%%%%&*%%%*>wyw>%%%**%O:yVFuw%%%O%%*%>w>OO%%O***%%%%**::*%**%*******:******:::::::::::::---------------------------**OO*>>*Oo********%%************%%%%******------;;>>>>>>>>>>>>>:::***::***;;;;;;;;;;;;;;;;>>;;;;;>>>>>>>>>::>>>>>>***:>>:%;;;;;;;;;;;;;;;;>>;;;;--;;;>>;;;>>>>>>>>>>>;;;;;::::::::::::::::********%**%%:>:", "OOOOOOO%OOO%%O%&;>wu>%O%%OOOOOOOOOOOOO%&>>>==&&&>=O;&O;O&&&;--%%www>-;;%%--%%--%>%%;&O&u3OS_]/4o-;;;;;>>>>>;-----;;;;>>>---;;>>>;;----;>>>>>>>>>%->>;--;->>>-%->>;%OOO%*&*%%&--%----;;;;;;;;;;;;>>>>>>>8;;;;;----;>>>>>>;;>6wutyyuw8>>>>>>>>;;--%->>;;>>68888wwuuwwww>>wOO&wuw,3,>&%OO%&OOOOOO%&%%%&>=&OO%==&&6w8ww6-%%->66>;>wtw,>>&%%>w>&>yVVyu3OOOOO%oooooooooooooooooOOO&>6w-6rxcncxxcccccccccccccccZxtw>;%%oOOOOOooooooooooooooooooooooooooooooOOOOOOO3d3=d<3eew33,w>;Att6ZnttnywyFA3ooooooOOoooooooooooooooooooooooooooooooooooOOOOOOOOOOOOOOOOOOOOOOOo@+>>>@dJ4o=OoOOOOOOOOo=dde&O>%&=>&%%>:wuw**&:********&&%&&%%&,>&%%;,wVuOO::%:>>>::****OO*&%%:O&:**O%>%%%%%%%%Owu%%uu*O%**%%%**O3FDD%*%***%%%%>*%*>>>****%%%%*::*%:,>%*******:*****::::::::::::::-------%%%%--:::-------**--**>**%O&>%********%%************%%***%%%**-----;;;>>>>>>>>>>>>>:::::>>>>:*;;;;;;;;;;;;;;;;;;>>6wwu>>;;;;>>:::>>>>>:>>>**:>;;;;;;;;;;;;;;;;>>>;;---;;;>>;;;>>>>>>>>>>>;;;;;::::::::::::::::***%%%%*iiu>%%OO", "OOOOOOOOOOOO%%%%&;uywOO%OOOOOOOOOOOOOOOOuUyO&*O&==&%OO%;&&&-----;>8;%%--%--%%-;-%-&&&%,Fd==edTS+;>O%;%%%>>>www>;-%>w>%%-%>>-%-;--%>>-->%;>>>>;--;;;;;;;;%%%%%%----%%%%*&**&&&---;---%%%>66---%>>;;;>>>>6>>---;>>>>>>>>>6>>wuttuuuww>8w>%>>>>>wyV;;>>>>68>ww6>6ww33ww3>&%O%>333>=&&=>ww>&OOOOOOO%%&&%=33=O%%*&&&-;;;>>6886w6;888tyuuuw>&O%,yVdyuu&OOOooOoooooooooooooooooo=oOyu%-;;6zcxxZxccccmmmccNNNNNNVxxVu%O%OooooooooooooooooooooooooooooooooooOOOOOO>Oo=@oooYdOe=>3wwwrttttxxyxiy3&OoooooooOOOOOOOOo@ooooooooooooooooooooooOOOOOOOOOOOOOOO%%o%OO%%O&oO=o+2oUSYL=@34fo=+d=3Y22@ofLof+oSYP$ X$..ohEJL4f2sY@fELdo@eeC^&=&C>&;O+4Le+oo=OOOOO&=3o=T{Yo33>OO3&%&%*%*>:%%*%*O=Oo1O>O%&O%3w3O%>Fd>=O%wAV*O>>:%%:>*%*%%****:*OO%*****&>>>&%%%yy*%ww*:%O>%>%O%%%%OOOO%******%>&*%%%**************************:::::***:::-----::::>>:---------%%%%%%%-%*:::*%%*%%%%%*&&*O%>*O=**&&*****:::*%%%%*%%**%*->;->>;;%-;>;;;>,%>>>w,>w>>:*::>>>;;6>;>;;;;;;;;;>>;->yA>;>uu>;>w>>>,>O::**>>%%%----;----;;;--;>;;;;;;;-;;;;;;;;>>>>>>>>>>>>>;;;::::::::::::::::********w3=*OOOO", "OOOOOOOOOOOOO%%%%%>3>OO%OOOOOOOOOOOOOOOOOy=O*%O%OOOOOO%&&&&------;>%%%%%%--%-;>;6>&&;&>VyOOoo2ooVFt;--w8>>>wuuww>>6ww-->-;;-;>;%-%;;%%-%;;>>>;;---------%%%%%%--;;;;&&==**&&-----;;;-->>;-%;8>>-;;;;;;;>>>;-;>>>>>>>>>>6;>wwutttww8>8w>->>;;>>wt&&;>>>>>wwwww,>>&====*OO%&>3wwww3>>>333===%OOOOOO%%O%>==OOOOOO%%>>>>6www>>>>yywwyw>wyyw%O&>,>&&&%OOOooooooooooooooooooooo+@=Vy&>;;6rzxxZxccccmmmNNNccxxxVyyyw%O%oooooooooooooooooooooooooooooooooooOOOOOO%OOOo,3>&OOoooooooOOOOOOOOOOooooooooooooooooooooooOOOOOOOOOOOOOOOOooooO*%OOOo@=5.gEe4eo=3O=o3@@SY=5L@+h54ST4SS # #5EfYEhSSf4+$YEY2+4F+3=@OFF%3OVaDe@4eOooo=ee=O%4ooCe3C33uu%OVFw>:*&&*%*===>OO>=OO%>=&=&O&&>3>=3%%>w>%*>>:*:>>>****>>%%*uw>&*%OO=%*uCAe*O3w%O>>%O>wD>>Ou>>*%%%%*%******%ww,>&***************************:::*****:::-----::-::::---------%%%%%%%%******%%%%%&&&&&O==OO*=*%******&%%*::*%%%w,>uu>O>w;%%-%%>>66>;;>>*%%%O>%*&>>>>>:;>;;6>-;>>>>>>>>>>>>--8u>;>ww>;>&:>*>3%,>>&&***&;;;;;;;->>;;>>>;:::>::**>::::::>;;;;;;;;>>>>;;;;::::::::::::::::====&&&&=*%OOOOO", "OOOOOOOOOOOOOOOOOOO%OOO*OOOOOOOOOOOOOOOOO=OO%OOOOOOOO%%&&&&-----%--%%%%%-;-%%;;-&&%&>>>uA>33=&=ewAy;%%-O-%%-;>;;>;>8>%->;--->6;%;--;------;;;;;;----------%%%---;;;-&&&&*&&&----%;>-%;>-%->;%%%%;;---;;>>>>>>>>>>>>>>>68>6wwuuuwww6>8w6;>>>>6www>>>>>,,,w>>ww>&%OOOOOOOO=&&>3ueu>=&&=>=&>>=%OOOOO%OOO&=OOoooOOO%%%%&;>,w>>&,Vi,&ywwuVVw;%%%OOOOOOOOooooOooooooooooooooooo@oo>3=ur66rzxZZxcccccmmccNNNcxxxuuu>OoOoooooooooooooooooooooooooooooooooooOOOOO%OO&=o=US33LD=yywuutuw6>;&%OOOOoOoooooooOOOOOOOOOoooooooOOOOOOOOOOOOOOOOOOOOOOOOOOOOO%%%@@@@OOO&*dOde5SP_Co+3@o323@DY4fa$@s+oo=Y^`^.$# XP_RKKPLESfSsLYg@s+Ss+oo4=OVd&wOy4Ed+==O=2=eFFw=3o5e@@o==%=3>>iV>>>*%*:&%=oOOO=Oo3&&=OOOOUU33&=OO%**%%*>>***:::***%*:*%O%3w>%%:&%Dd*O>3>OO*:%O%*%O>uU>>Oiw,>*%**&%******%w3>&*%%%***********************::::*****:::---------::-------------%%%%%%%****%%%%*&;&&&*OO>>>>O%%*****=**%*::*%%uw>uVwOxVu>66>w6ww6>;;;*>>>wOw*%*>>>::>;6>;6>;>>>>>>>>>>>>>&&&;>;;88;;>*>w%*3%>>>>>>>>>;;;;;;;;>;-;>>>;>>>>>:::>::**::>;;;;;;;;>>>>;;;;::::::::::::::::=====&&&%%%OOOOO", "OOOOOOOOOOOOOOOO%OOOOOO&OOOOOOOOOOOOOOOO%&O&OO%OOO%&&&&&&&&------;-%-;;--;-%%%%%%&&>w>%;,O%%u&>>%yw>>;>%uw8>>;;;---;-%%;;--->>;%--%->;->----;;;;----------------;;--%%&&&&&&--;;%>>%%>>%>>6-%;->;;;;;>>>>>>>66>>>>>>>>88wwwwww6>>6>>6ww>w6>>www8>>>>>>>>&>>>>,&OOOOOOOOO&OO%>333OOOOOOOO&=&OOOO%O%%OoOOoOOOOOO%%OOO%%&;>ww>,yu&O>wwuwwww>&OOOOOOooooooooooooooooooooooooo@oooOO3trwrxcnnccccccccccNNZZNNtww>&OoOoooooooooooooooooooooooooooooooooooOOOOOOOOo=OooOoO=O=V%=>>>&%%OOOoooOOoooooooooOOOOOOOOOoO+ooooOOOOOOOOOOOOOOOOOOOOOOOOOOOO%*%Oooo@=OOOFF@S)_`E4Sd&oD=o=3==3==33%&,+4F4322COoO>>>%O*>:%%==*3=i3=3O@>OO==3yi_^=OO=e>%&&&&;;&;>>&%%%&&****%:3%>:O%3w>>==**%OO%%***%%:***A%&Ow>>*%%%**%******%**%%%%%%**********************:::::*****:::---------::-%------------%%%%%%%**%%%%%%&&;;;>*>>**=%%%*%%%%*u,%O%*::*w>%>w>%wu>%;>;6>>>>;---**,O>O&*&>:*%%*>%>;->>;>;;>>>>;;;;;;>;&&>;;>>;;>,uu*>u*%%:>>>>>%;;;;;;>>----;;;;>>>>>>::>:****:>>>>>>>;;>>>;;;;;::::>>::::::::::==&&&***&==&&%OO", "OOOOOOOOOOOOOOOO%OOOOOOOOOOOOOOOOOOOOOOOOOO>*O>*%*&&;&&%%%&------;--->>-%--%%--->uuww&O&>&>>Vww->w%%;-8wyuw>--;>;----%-;;;;;--;>%-%%>-O-------;;;;;;;;;;--------;;;--&&&&&&---;;%>8;;ww->%-O%w-%;;;;;;;>>>>6ww>>>>>>>6wwwwwww6>>>66>>ww>8>>>68>>>>>>>>>;&yy>;w>OOOOOOOOOOooOO&%OooOOOOOOOOOOooOOO%%OOooooooOOOOOOOOO%*&=>3>>w3==%%&&&&>w&OOOOOOooooooooooooooooooooooooo.ooo@ooO666wtxxxccccccccccNNNxxyw>=%OooooooooooooooooooooooooooooooooooooooOOOOOO=*oooooOOooooOOOOOOOOOOoooooOoooOOOOOOOOOOOOOOOOoO@ooooOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO.p@odTTyAVCfE^5Sw%>>Oed=333&&=&OO%;>@@fdo=o3>3>O%>;%%&>&**&&=3SdO@o=3=3eiiiwo=OeCO3O>%%>>&&>ww>;%&>w>:***:wV>ww*%,w>oO*=**=>&%*>:%->>%%%%*>%%%%%*%%%%******%%%%%%*************************:>:::*****:::------------%------------%%%%%%%%%%%%*%%%%&>>=ed1oO=****OOOOOu,%O%*::*:%%*%%>%;%O%-%-;;--;;;;>*wO>>%3::&*%%*>-6;%--->;>>>>>>;>>;;>>>>>;;>>;;>wuy,yAw>&>>:&&*%6>>>>>>>->6>;-;>>>>>>>::::****::>>>>>>>>>;;;;;;;:::>>>>>::::::::==&&%OOO&====&%O", "OOOOOOOOOOOOOOOOOooOOOOoOOOOOOOOOOOOOOOOOOOw3%>O&&&&&&%O%%&;;----;-%%-;-%---;>6>>w>&>&&wOw6%>%;-->O%>%%->;-%%%;>;;-----;;;;>;-->;>%%w;O;-------->>>>>>>>--;;;--------&&&&&&;;;;;%;;->ww>%;Zw%-O;>;--%%%%>>>>8w6>>>>>68wwwwwwww86>w8>>8w>w866886>>>>>>>>>>yy>%&&OOOOOOOOOOOoOOOOoOO&=>=&%OOOOOOOOO%%%OooooooOOOOOOOOOOOOOO===333ew>%%%&&%OOoOOOooooooooooooooooooooooo.....oooooo%;6rtcZnnmccccccNNNcxrwq:*%OoooooooooooooooooooooooooooooooooooooooOOOOOOO%OooO@o&%oO+O@OOooooOOoooooooooOOOOOOOOOOOOOOOOOoo+ooOOOOOOOOOOOOOOOOO%%%%OOOO%%%OOOOO.shE^UFy/FeLJS.hT@fU3oO&Dd2LhsSo5f`Yo=Oo+@=5LISK)E#Pg$sJKYs.KS)S5ggP^YC4dO3%yV%8wCDew*>&%>w>>ww&5CEY=<+=23>>3&%,:&:=*%*=OO31=3=OFiee<=OoO==3C&FHw%O&&%%>>>>&%&>w&**%%*wd,w3*%*:*3=@OOO&>&%%:;%%;%O>O%O>OO%%****%%******%******%%***********************=********:::---------::-%-----------%%%%%%%%%%%%%**%%%&>>=*>ADeO=***OOOO**%%%*:*****>>OO,-6>->>-;;;--;>>;*===yd%>**=>>=&*wyu;;>>6>>6666>>w8>>>>>>>>>>>>>>&>3>yCw3yu31>==>tuw6>;;;>wtu>-;>>>>>>:&&***&&***---;;;;;;;;;;;;;:::>>>>>::::::::===&&%OOOOO%&&&%", "OOOOOOOOOOOOOOOOooOOOOOOOOOOOOOOOOOOOOOOO=O>3&=%&&*&&&%O%%&;;;--%;;%%%---;>-;>6>%&OO;>;>%y;;;-;6%u6wu6>-ww6>>>wy-----;--;-;>>;--;8->xw%w---%%%--;;;;;;;;;;;;;;----%%%&&&&&&;;;;;-%%%->>;;tGV;>%u---%%%-->>>>686>>>>66www6888wwww8ww>>>6>wwwwwwww>>>,,,,,>>;%OOOOoOOOOOOOOOOOOOOOOO=>==&%OooO%&OOO%=>==++=+@O%*&;OOoooooooOOO===3tw>;&%OOOOOOOOOoooooooooooooooooooooo...o..oooOO%6wrtxZZnmmcccccccNcxtrq%%OooooooooooooooooooooooooooooooooooooooooOOOOOOOO&+oooOoOOooooOooooooo.ooooooooOOOOOOOOOOOOOOOoOoOCeooOOOOOOOOOOOOOOOO%%%%%%OOO%%OOO>uR`)PLDLdAydUf2YEL2fS3CLDD3ofCSSg)`h.o=.QERhg#sJhsp@W[KKgYJ^.s25ELCCeo3&FF%;3F&O>wyO%&>>;>;-55h2@=3oO%&wuOOwy>%=>%O==*O=eCC1C3&OO&=&==OO=O&3w>&%%%&>&&&%%%&>%%&>*%*>***%%%**ooO>31*O*%%%-%%%OO**%O%O%%******%******%%%%%%%%%********************************:::---------::----------%%%%%%%%%%%%%%%%*%%%%-;>=OoCTCo=******=>%%%*****%:*:>*%>%>;%;;%-6>;;;;;-CDO1w3*O>>>>33>*6yy66w>6>>6ww6>>888,>>>>>>>>>>>>OO=%>w*3y33ee11uuww>>;;;>wuw>;;>:::>:&****&::&**%%%%---;;;;;;;;;:::>>>>>::::::::==&&OOOOooOOOOOO", "oOOOOOOOOOOOOOOOoOOOOOOOOOOOOOOOOOOOOOOOO*OO&%>>=&*&;;&%%%&;;;--%>>-%%-;>>>--;;-;>&&w>%%;x%;6;%-%yw-;8ywwww>;;>w;;;;>>>-;%-8w>-%%;%;Vu-u;--%%%%-;;;;;;;;;;>>;;----;;;>>>&&&;;;;;w>-;;-%-%O>O%y%%%%%-->>>>>>>>86>66668wwwwww886>>www>>>>>wwww>>ww&&&&;;>>3OO%%OO%OOOOOOOOOOOOooOOoOO%OOOooooO=>=OO%>3332243===>wu==@OOOOOoOooOOo@%>w>%OO&OOOoooooooooooooooooooooooooo...o.o@ooOo%6w66rtvnmmcccccxcNNNxxy%OOooooooooooooooooooooooooooooooooooooooooOOOOOOOOooo@oOoOOoO=ooooooooooooooooOoOOOOOOOOOOOOOOOo=OeTD@OOOOOOOOOOOOOOOOO%%%%%%OOO%%OO=dFPPsfS3eAVDE=DdL$@@<3deO3Cde<@gpsYK.$@o=Oo=o+5# IpS p#KPSKRh5s#h^LpYS$YUC@wdVD,>6d^V%OOuuu,;>;->y++4oeo=OoeuO%>>uF3O*>*O=Ou33+@d3d3=<<<=OO<==O3O=;ww&%;>%>;;&&&%%%:wuw*%%*%*&*%%>+==OOoO&**%%%%%%:OO>%%O%**%%%%**%******%%***************************************:::---------::----------%%%%%%%-*%%%%%%*%%%%----oCwo=1o****===33:**%%%*>*>*O%>**%>;%>>;>w6;---%%__*3*Oe1yu>>13>=O6w;>>;;>>>66>>>&>,8>>>>>88,,88>>=3***O3%O&id3=w>>>;;;>>-;>>>>;;&&::&&**%*&>>&*%%%%%--;;;;;;;;;;:::>>>>>::::::::%%OOOOOOOOOOoooo", "oooooooooOOOOOOOoooooooOOOOOOOOOOOOOOOOO%&&&&&&&&%%&&%%&&>>>---;%;;-->;%%wu&%3uu5@@5+2T_Cww8;6%-ww;-8r8669r986;---;>>&%3&O=o=;>--;%%w;;;-----%>-%>>>>%%%-;>>>++=&&&>6%;>%&=OO&>==O=3o@OOO%-%%%66->>>>&&==>===>>;>68>>>>>668wwwutw>-;>>>>>wwww=&=3>OOOOOOOOOOOOOOOOOOOooooooooOOOOOOOOOOO%%OOOooO>,;>88www>>>w688>%OOOOOooooooOOOOOO%%OOOooooooooooooooooo....ooooooooooooooooOOO@&=,,innnnZmnxmnnnny8%%OOOOoOooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooOOOOOO%%%%OOOOOOOO%%%&>>%OOooOOO%%%%%%OOOO%%%%%%OOo=o@.@Y#FDFCVwyDDue^S$#go<5=F3o3<+3@4EK4)5@+ooo+o.2.5KggjIKR!h5QfXS2J)fp@+fELo4DdF=@w3e3=^Yoo=edy&>%%%FyoeU2<+4o=eoOeOOO%3w=OO%=3Cdo%&oF]F=3&%yO>>&>>>-%Ow;777-w&@@==o3OO&>w,3uy%%&&>>>&*******%%---%%-;%%%%%%%%*****%%%*%O%%%%****%%****************:>66>***===*==>:**-*yu:%%%***::**%%*****%%O%%%%%***%%%%%&&&%%&&&&&&OUdO3%%>%%%----;********%%****::::--:>::*:*OO*eFVyuw,>>&>>>>>&***%*::**>1>>>>>66>8ww6>>>>>>>>>>>>;;wVVw&,%&>%>yO;;;;;&;>>>>==&@@OOOOOOOO&&&&&OOO%%-:---:::******:::::>>>>>==*OOOoooooooooooooooo", "ooooooooooOOOOOOoooooooOOOOOOOOOOOOOOOOO%%%&&&&&%%%;;%%%;;;;>;--%-;--;-%%>>&;wuw.+fof_{^==wdy,VUyw8ww>>86;;6rtttrrrw86>>&&=OO3oo%;>%%>>%;;------>>-->;%-%%%-;>>>++@O%&;>%;-O%OO33w=&OO2ooOO%>>;-8w>>6;%%&&&&====>>;>>>>>6688wwwwwuyu>;>66>>6www8333w3=O&OOOOOOOOOOOOOOOOooooooooOOOOOOOOOOOOOOOOoO%>3,886886>>>3688>%OOOOOOOooooOOOOOO%%OOOooooooooooooooooo....oooooooooooooooooooOO&=>Vnnxvt86tnnnxyw&%%OOOooOooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooOOOOOO%%%%OOOOOOOO%%%%&&%OoooOOOOOO%%OOOOO%%%%%%OOOo@oo.#pYSCDUUDt>LeaY^ppsoSCeL=Cd@=of4^gY++.o4oo=oo.S)WLKgh[`sXXpLh2Sha$fULf4f2oo43o=e=OoC3Oe&O>&&&w%%8%@;&&;;--y%;7%;t%w++oo3*u>>>>>>>3;&%%&;>;%*:>:::*:----;;;&***************&*%%%%%****%%************:**::>6>>**===*OO%**:;;*>>>1*%:*******%:*%%O%**%%%%%%**%%%%%&&&%&&&&&&&OeO&3O;%&&&-----***%%%%%%******:::--:>:*O%*:1eFJ***%O%&>>>:&***%=%O*1>>11>>>>>>6>>>>>>>>>>>>>>>>&&&>ww>&%iw&>%O,86>>>>;;>==&%OOOOOOOOOOO&&%OOOOO%%-----::::***::&:>>>>>===**OOOooooooooooooooooo", "ooooooooooOOOOOOoooooooOOOOOOOOOOOOOOOOO%%%%%%%%&&>ww>&&&%%%;;-%%-----&%&%&>wuw>TT+.f^T+Si&&>%yTnyuw88wu8>;68w98vxxxtw>-u>&%&O&LV%%w>%-%--------%%O%;-%-%%--;;>>@@O%%&-;>6;&>&*3>3&=&>d3OO%>ww66w>%;w>%>;&&*&==>>>;;>>>>>668wwwwwuyuw>>ww868www8ew33=OOOOOOOOOOOOOOOOOOOooooooooOOOOOOOOOOOOOOOOO@=>3uw6>66>>>>,8ww>;%%&OO@Oooo@OOOOOOOO%OOooooooooooooooooo....ooooooooooooooooooooOOO&,,8ww8>;9tnxtw>&%OOOooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooOOOOOOO%%%OOOOOOOO%OOO%%%OooOOOOOOOOOOOOOO%%%%%%OOOO%ww>+eD3e4=DF=CC3w3wO=3wdCd3dwO>=>SdoO=@w==%%&&%%%;>=OO8r6-,O2oSfO%iw>&&&&&&;&%&&&&&%*>>&**:w>-%-%%%::&&&***&&&*********%******%%*************::::>6>>::>==*=*%%*:;;*%%>w*O:%*********%%%%%*%***%%%%%%%%%%&&&&&&&&&&e=O>OOVu&&&-----**%%%%*:********::-::::*:***%%*=*>>:*>ud>:&**&:>e1**>>::>>>>::>>>>;;>>>>;>>>>>>;&;>>;;>>;dw%w,%uw86>>>>;&*%OOOOoOOOOOOOO&OOOOOOO%--::*::::*****=*&=>>>==OOOOOOoooooooooooooooooo", "ooooooooooooOOOOooooooooOOOOOOOOOOOOOOOOO%%%%%%%&&>ww>;>&&%-;;-%------&%>%&wyw>=D])So+@3FdOOe&O>uuw>>wuwyytyxnnxxxxxyu>-nw&>>O>TD%Ow;%>>------%%O>-O%-%%%---;;;>%%%%%--;;-O%3>O%;>&>>uCe==>>w86666--6>&w>>>=&==>>>>;>>>>>>>>>>66wwuw6>8wwwwwwwww33>=OOoOOOOOOOOOOOOOOOOOooooooooOOOOOOOOOOOOOOOO@===,uw->>>>>>>>wwww>>>>==%Oooo@OOOOOO%%%%Oooooooooooooooooooo..ooooooooooooooooooooooOOoOO&>,8>6wyyuw,,OOoooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooOOOOOOOOO%%OOOOOOOO%OOOO%OOooOOOOOOOOOOOOOOO%%%%%%O%=oo.K]WfSEYddU/T/C5fJ)IgIg.f4CSf2LE_sPR))5@+.@o=eyO%O&%>O4U=+=Oe2o===ew=3===2eCD@Oo22=3O23e=e==%%&;&%%>woeuO-6;&=@+LJ==O>;&%%&&&&&&>>&%%**&&%O%:O%->wtyy******%%********%*&*%*::***%%*************::::>>6>;:&&==e3=*:>;-::*:1%O********%O%:1q>%%***-%%%%%%%%%%%%&&&&&&&&OOO>OwUD&&&;----*****>qw********-::::::*:******%*::*%*>w:**:>>wwe1***:>1>>>:::::>>;;>>>>;>>>>>>;=>>>=&=>3*>=%33>>>>>>>;;%OOOOOOoOOOOOOOOOOOOOOOO:>>>>>>====*****O&====+OOooooooooooooooooooooooo", "ooooooooooooooOOooooooooOOOOOOOOOOOOO%%*O%%%%%%%OO%=;&&&&;>>>;;>;;-;;&&&>&;ww>*=oCL+=3Le&w&O<&O&&=>%%,,>>>,8wuyyyuwuyxu>>w;%>>>6y>>%OyA;%%-----%-Vn-%;-O-----;;;&&&&&;;;-;-&,>&>>>&>>>e>3>>>6666wnt-->&&>>>>>===>>>>>>>>>>>>>>>6www>>>8wuwwwwwww33>&OOOOOOOOOOOOOOOOOOOOooooooooOOOOOOOOOOOOOOOOO+&&>uw;>>;>>>>>88886>>>3=OOoOOooOOOOO%&&&Ooooooooooooooooooooooooooooooooooooooo.oooooooOoOO&&&>,ww,>>,OOoooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooOOOOOOOOOOOOOOOOOOO%OOOO%%%oooOOOOOOOOOOOOOOO%%%%%OOoo2.$``SULdCd>DSed2#IX|hsK hS45sfIWWR!#SgSYY5ooLe@@o@S^hgh4L({]YS5+Sf..@oo4JCY=@@o4dde@3=eOo3ewowwdu%%;=ODo===oOe&Owye=o33O@dCdC3==dC=+2=e2=o====>>>>>>+=3y;&wO=@(S@=O&%&&&&&&&;&&>>&&;=**&*%&3*>uxxVVA****%%%%********%*&%%*&****%%**************:::>>6>;***=>yw>::>;-%q>%%%%%:***%%%%O*quuq:%--------%%%%%%%%&&&&&&&&=33w&O&%;;&;;;--::**:>ww********-:::::::****>11>:**%%%%%****>>ww=***:>wi>>>:::::&&&&&&&%;>>>>>>;======&&OO333y=O&&&&&&&&OOOOOOOOOOOOOOOOOOOOO*=>>>==&=**==+OOoooOO@++@oooooooooooooooooooooooooo", "ooooooooooooooooooooooooOOOOOOOOOOOOO%%*OO%%%%%%OOO%*%&>%&>;--->>;-;&&&>&&;>=OO&F,O=F&>wuu8-6->;;8;6;>;%wy%%%------%VV%O>;%--------&&&&>>;;>uw&%%%>>>&w>;w&>>>>>689wZV;->>&&>,,>;;=>>>>>>>>>>>>>688ww>>;>6wwwwwwwww>>=%OOOOOOOOOOOOOOOOOOOOooooooooOOOOOOOOOOOOOOOOooO&,uw666>>>>>>666>>>>>w=OOOOOooOOOO%&>>>%Ooooooooooooooooooooooooooooooooooooo..oooooo@OoooOOO>===&OO=ooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooOOOOOOOOOOOOOOOOOOOOOOOO%%OOOO%%OOoooOOOOOOOOOOOOO%%%%%OOo==+.4RSfLLFDCCE2oS)}[`gsSgsKPph$KgKRhPXS)#YL++d=ooOoo@2CSL@h5a..@o.oo+..L2P{{_S5=UYf4+2O23=e=o>>%ee>3===C=e=e>=De>w>3==dCe==23Fe=o=3o3w;>>>>&&&w;&;&%;w=%*>3>wuwyVyw;-;&*******%%%******>:%%:*O***%%***************::::6>>;**=>w>&*-;;-Oq>OO******%%%%%**:>>:----------&&%%%%%%&&&&&&&&>OO&u&O>;;;;;;;;>:***::>********::::-*:>>:*%%%%O>>:>>>:*::***:>>**:>**wy>:::::::&;>;&&&>&;;>>;;&==+====O@=@=YT==>>>;&&%OOOOOOOOOOOOOOOOOOOO%&>33==*OOOOo+@@ooooooooOooooooo.....oooooooooooooooo", "ooooooooooooooooooooooooOOOOOOOOOOOOOOOOOOO%%%%%%OO*&&&>%%&&&&-->-&&&&&>&&&*OOO*GU%O%OoOoOOO@@oooooooooo++&OOOOOOOO%&>>6t;>n6%ZDt--ww%O>%--;;;--O>>%%;----------&&&>>>>>->%O>u>O>>-w,>u>>>>>6689>tw&;>>&%&>>&&>,;>ww>>>>>>>>>>>>666>>>>>86>6wwww%=&OOOOOOOOOOOOOOOOOOOOOooooooooOOOOOOOOOOOOOOOOooO>3,8ww66>6,>>6>>>>>>>,>&OOOOOOOOOO%>ww>&OOooooooooooooooooooooooooooooooooooo.....ooooooooooo&OOOOoooooooo.ooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooOOOOOOOOOOOOOOOOOOOOOOOOOO%OOOOOOOoooO@+oOOOOOOOOOO%%%%%&=Oo+ofE4CLDUTSLJE^J^``Pg##JSP_gIgkP#R}QII[_Ea@oO+OOO@+o+doo@d^f=+5ffJ22SSf4f^_TS4fD5o4YYS4eedC22@oe&3=o3@O==OO=33CFe=+=e2@=Df+oo=22=O+=f]S@O==@55SW^3d%uww>>>;&>&;w>&>w>*&wyuwwO*>>*%%-::&&&************:*%&3>O***%%***********%*****--;>>>:**==**%--;;%:*%***:%%%%%%**:*%%%%%---------&&&%%%%%%%%%&&;>F>O&;%%>&&&>>>>>::***%**%******::::*%*:>***::>1q%%****:>:::*****::>>:*:,::::**::>>>>&=3e*&&&&&&*+++++=+++=ooYE=2;;>;&%OOOOOOOOOOOOOOOO%&%%&=>3wu@Ooooooo@oooo...ooooooo.oo......................", "ooooooooooooooooooooooooOOOOOOOOOOOOOOOOOOOOOOOOOOO*&*&>>;&>>w>>>%%&&%%>;=%OOO&&O%&>OO,oOoo@oo@@ooooooo@oooooooOoO&&%&>wy88Z7rDvww>>>-%6%--;>;--;;%%>-O-;;-------;;>>>>&>>%wU/Lu>>->;&w&>>,w8667>>&%>&%%O%&&%&>w&>www>>>&&;;>>>>>>8w8>>;>>>>6w86%=&OOOOOOOOOOOOOOOOOOOOOooooooooOOOOOOOOoOOOOOOo@O&33;;8w86>ww,>86>>8,>>>>>%OOOOOO%OO%6uuw&OOooooooooooooooooooooooooooooooooooo......oooo.ooooooooO+@ooooo....oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooOOOOOOOOOOOOOOOOOOOOOOOOOOOOO%OOOOOOooo@+=oooOOOOOOOO%%%%%O&o=+oT^L4a4LEC4+gY)Q`R)I#gsPRR#RQ~'s!RQsR{{E@=ooOooOOOoo@=2=T^d2CTf2EfUYS55@S@o52Sa+a42dd%>%*=4e=+22@<@4S3o4o2C4oDeo3+3ee2=2e$'PES@=2$@ sY53Fiu>>,w>&%%>yy>&>1*=edu>&>>>:***:&&&**********&&&%%%%>uw****%%***********%%******-;6,>&******%--;:%O*q*O*%O%%%*::>:*%%%--%------:&&&%%%%%%%%%&&>>3%3>O>w&&&&>>>>>********%%****:::::*%%:,*::*%%%%-;>>;>wt;;;>>>>;***:>::>:::****:=>>&O&uV%%%**%%%ooooooo@oo33wuu@oooo@ooooo.....ooo.............................", "....ooooooooooooooooooooooOOOOOoOOOOOOOOOOO%%%%%OOOOOOOO%%&>ww>%,yy>%&&%=3>OO%OO&&%%OOOooooooooooooooooooooooooooooOOOOO>txr676-Ouuu>O>>6%%>-%--;;;>>;-%>>>>>>;;>%UTOwFw&=*>=_UOu;>u&%>>>w>>86;8u>%F&Oy&>>&&;>>;>%>u,%&,>&&>>>>w>>>ww8>6>>>>>>>>3&;yi>OOOOOOO%OOOOOOOOOOooooooooooooooooOOOOOooo@33>>w8;886>6www88wwwwww,>&&&&OOOO%&wuuwuw,=%Ooooooooooooooooooooooooooooooooooo.............oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO&&OO%%Oo@@o+oST>=o3oed=@eoo+USJ4deo=UfoC=@2D4oeS #@YUo@5h)g5YsoUFOw=&>3=&*>D>=eO1OoeCe>O>*%&>**:>O***>&O*&*%%>>%>*%>&VyAV>O%&*>OO1oO=O1&%3w>%**%-6%*w>OOO3>Ou*%-O=>*%OO%%DVO*>*du>%O>>OOO;>>-%-%%>&O>>%&%%%&&&&&O>=%>w>&>%%>w6;%%:>:%%*>%OO%*:**>O::DFiA********----;;;;;;;;;;;;>>>>>>>>>:::::::==%OOOOOOOOOOOOOooooooooooooooooOOOOOOOOOOOOOOOOOOOO%%&&%>wwww>%@@@ooooo........ooooo...........................", "......ooooooooooooooooooooooooooOOOOOOOOOOO%%%%%OOOOOOOOOOO%&&%O&ww;%>>>y>O==OOO%%OOOOooooooooo.oooooooooooooooooooooOOO%;;--66;ZTyw-y->;->>;>w>;;-;>>>>>>>86>>;w%ZD%%>>OO&e^)U=O&UVuD>=3ww6w86r%uwwyuO>uw>>>>6>,&>>&>>;yw>>>>>w>wwuuww>88w886>>w>,uu>&>%OOOO%OOOOooooooooooooooooooooooOOOOOoooO=3=>ww6666>>,wwwwwwwwwww>>>w,;%&&&>wuuwtuw3=Ooooooooooooooooooooooooooooooooooo................ooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO&ww%3o=>>>>O*:OO*>:>&****%*&w>O%%w3%>DA%%>Odd1Oo&*%>>*%***:>uOuL^11OOOyi%,>ywuDDyuyDA&>*O*OwOOwOOuw*O%;;>;&;%%&%%&%%%%%&&%=u>OO%&yu,;>;%%-:********%%*****>y:*TFO>::::::;;>>>>;;;;;;;;;;;;>>>>>>>>:::>>>::&OOOOOOOOOOOOOOOooooooooooooooooooooOOOOOOOOOOOOOOOO%%&&&wyuw>&Ooooooo..........oooo............................", "........oooooooooooooooooooooooOOOOOOOOOOOO%%%%%OOOOOOOOOOOOOOOOO;>&%>>>3ooOO=3=OOOOoooooooo......ooooooooooooooooooooOOO%%O%>6-VTw-;V-t%>w6;wt>>;-->>>>>>8www>>;>y&&*O=e2oofdO@>>;3FDd>3ew>w6>ww&w&%%>,ww>>>>>>3>>&&ww&du3>>>,w>wuwwuw>>>>886>>>>ww>&>w%OOOO%OOOoooooooooooooooooooooooOOOOOOooo@=*&www66>>>>,3wwwwwww8wwwwuuw>>>>wwuuwuuuw3=OOoooooooooooooooooooooooooooooooo................ooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO&%O%wVu&=do=oo$@.+.oo3OOOOOO%%%%O&OoO@ooodDYUf_)P# ## X$I))IKKRWP PRQj!#o@oooo<=OOO&OOo33+ooofe2df3SL42@<@dd+4f2=S=+FaCSY3=4Cooodoo2+d^h+2Do@4C==d4=Sd+LdF4ed3ff3Lde2f=o@fd4SYL.5@hLSsE)`hXf_Lo4 I)KR5>*%*%O**>,**:%:****%%**O:O*:*>*OwLD%O*=33OOe3*=>>>&:>>uO==O@^)S=33eF%wOe>eUD=u%3>*>>&=O1OD^>O&*%:>*O%>OO&uu>&O%%%&&&&&wy>>Vy>ww>>;-%;6:::*:::>:>>:****O%%%wO*>>>>>>>>>666>>>;;>>>>>>>>>>>>>>>>*&:>>>&*OOoooooooooooooooooooooooooooooooooooooOOOOOOOOO%OOO%%&&>uyw&%OOooooo...........oooo............................", "..........ooooooooooooooooooooOOOOOOOOOOOOO%%%%%OOOOOOOOOOOOOO%&%;>%%%*%OO=&+CD3Oooooooo..........oooooooooooooooooooooOO%&%&>;%%u;%8->V;>w6;>w;>;--;;;-;>>wwwww;>y%w@O3<@Cfo3@2&eO3eo=3=3>&>>;6eO=3w%y;>>>>>;;>>&>,>wu>w3>&&;,w;ww>>uw>;>>8wwww&>ww>>>>%%OO%%%OoOOOOOOOoooooooooooooooooooooooooOOO%>ww666>>>,,wwwwwwwww8wwuww633wwwuuwwwwww3==OOOooOOooooooooooooooooooooooooo................ooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO%OOO;w>%dfoY_KLKh@S5+oOuOOOO%%%%%%OOo++o4oo=S24@... $sh X}`PWP#g~KRXhhKQ.2+pSfeO%OO%o3O<@ooo=oo42e=eCCFf^d3eCDd2eLS24@f4YYdToed4SS22fLY<^W4S)a+22o44f+oo=+e3UeF4+=@d@==ff22<44SSLh.QfRE'W52o4e4$#g'Ph#CEo@dL4fFd4S+eeo34d=eOFdO*=uu>>ww:%>>*%>wO*%%**%*>Vwy%w:%O*>>wuuy%==e=oOo>*&=;&%&&Ow=d4=@=Se33o3OOO>OwVyO*%O%==&*O==2L^d>o=oO%==OO>O,Vy>;O&&&&;;;;%>OwDVO%%&&>>;>>%;>>%%&,>>>&&;;&3=>e>&wO>>>>>>>>;;;;;>>>66666666>>>>>>>>;>>>=&*%ooooooooooooooooooooooooooooooooooooooooOooOOOO%%%%%&&;>uuw&OO%%ooooo...........ooooo...........................", "...........oooooooooooooooO@@@OoOOOOOOOOOOO%%%%%OOOOOOOOOOOOO%&>&;&%OOOOOO3=oedOooooooo.........oooooooooooooooooooooooooOOOO%>,%O;>--wuw;>w>-;;--;;>>-%;;>>6wutyOwuC2+2@.fhhdf=o&e=3eo=@3>=>>>6>>yOww%u>;>ww668>&wdu>>>&;&&%&>,6ww>>ww>>6wwwwww>>>>>>>>%%%%%%%%ooooOOOOoooooooooooooooooooooooooOOO%&6w66666,w3wwwwwwwwww868886,wwwwwwuwwwww333%OOOoOOooooooooooooooooooooooooo................ooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooOOOOOOOO%%OOOOOOOOOOOOooOOOOOOOOOO%%&>uy3odE)YPQKE_DoowOOOOO%%%%-OOOoO=Ooo2ooo.@@+@sWRK..Y]gKKRPIQWKWPhg=@oSTdOO%O%&=F325<@.4+4dLd2@3e@=U3>OeFo=eoodfo524dY34oo=245fga.@Y`@ShJ2^L24@o+fde4LdD+2af@eS5dC3oo5o5+4Y@p$$.4sXhWY2eCd5p RQ ssSSfhSo2sao+fh5fD3&>uuw>3*&%Ow%%%%*%%*>yuA>>%*w:w%O%iF>3O+=ewo>=>33>>;&*1oo2S25ef+=o=4O33%3wDdo3O=3&O&&oo5@o=fd+@3%O>=3A>>w&%&&&&&;>>>>O>&>y>%w;;&;;>;%>>;;&;>>>>;&&>>&O3OO&&%w>>>>>>>>;;;;;>>>66666666>>>>>>>>>>>=&%OOoooooooooooooooooooooooooooooooooooooooooOOOOO%*&&&&&>>>uw>&&;;&...ooo..........oooooo..........................", ".............ooooooooooooo@++@ooOOOOOOOOOOO%%%%%OOOOOOOOOOOO%&&;&&%OOOOOOoO=oooo................oooooooooooooooo.oooooooooooo%wd>-%8OVy>y>>u8;;;--;>6>>-;--->6wtu>ywCLJpKJ.2h+afUF=O=2=+dCdeuw3w=e)FOyOyw;;6w6>63&wVe&*=&>>=&&==ytww6>>>886>>>>>w>&>>;>>&&%&&&&%OOOOooooooooooooooooooooooooooooOOOOO%>8888wwww3wwwwwwwuuw866668>wwwwwwuttuw3333=OOOOOOooooooooooooooooooooooooo................oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooOOOOOOOOO%%%OOOOOOOOOOoooOOOOOOOOO&>>&>uV3eo<55X S{Y.=3OOOOOO%%%%%O%&OoOO=3ooo+o.f+4W`S $#.YE.gPRgQIgh#IKo@+dVOO>O%O&=d2=g52hWLSfd@==ed=VwuA>yF=eCe3oodL=24=LFL4+o@gS+@2Sg.fs_QhLo$f45+5SYe=odC+2Soddooe++4f2S+2YsPp$#YJXhh2a==DSpSWWQ#Y)Lf2$hLfSfY{($$+53e==O=1o>1>**,3>>>wFiO,w*>>*%%***O>%&>wy>w>>%>y>e3oOLL>&=33>>,>&3@2dfoo$sD+++4S1o333OUDOOoO=OO=34+45o&&%O&&&&&&;;;;>>&&>;&>>>&%->6>iw&>uyw&&>>&&>>&>O>3&y>O;;>>;;;;666>>>;;;;;;;;;;>>>>>>>>>>&*OOOoooooooooooooooooooooooooOOOOOOOOoooooooooOOOO*&&;;&&;>>>&&&&>,&Oooooooo.........oooooooo........................", "...............oooooooooooo@@@OoOOOOOOOOOOO%%%%%OOOOOOOOOOOO&=&%%OOOOOOO&OO==Oo+................oooooooooooooooo...oooooooooo@24;-%-OVutw>6uuuw->;;>>>>;----->>w&yy=dYLKRS.#s2.23C=e=@E^SDCe3uwu=w__uyw&V8->6>;>3=3e3==&>3w>==>>yuwyu6>w6>>>>>>>,>wyu&&>>>>>>>>>==+OOOooooooooooooooooooooooooooOOOOO%>68wwwwww3wwwwwwwwww886668wwww66wwtuuuw332>&OOOOoooooooooooooooooooooooooo................oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooOOOOOOOOO%%%%OOOOOOOOooooOOOOOOOOOO%OOO%>OY422+sI)L.2oo>OOOOO%%%%O%%%OoooOOo=oo=hLLKKYX $@.5S_KXghRIssP_So@&OO,OOO%Oe<23d5#pW)P4+4dfe3w3yVVw;uAVO>o=Dd=24e=oDoU):wwDA>u>*ww*%&>%w*%%%wO%>,>w*O3>3/U2Cd==O>=OO>>OoS2<5o5.fJ4o++a3=e3eOFd==&%OOOO%22.e5ooFEd3dYEf4&;&&>>&&&&&;>>>>>O%&%>>O&>>;;6wwVu>>yyw;&wu>&&>>od__OO%w;>>>;;;;6>>>;;;;;;;;;;;;>>>>>>>>;&%OOOOOooooooooooooooooOOOOOOOOOOOOOOOOoooooooooOOO%&;>;&&&&>>>&&&&>>;%oooooo..........ooooooooo.......................", "................ooooooooooooOOOoOOOOOOOOOOO%%%%%oOOOOOOO%OO*==%O%OOOOOOOoOoooOoo .............oooooooooooooooo....oooooooooooo%O>%;;-A;>wutVy%6>;----%------;;>>O3e42R[JWSEYs2oSTDeLEEdf4O&3ei3=OLuOy>Dy>>8>;6>==&&3w=>ww>=>33u>wxyw>u86>6wuyy>wVDFw&,w,>,www,33===OOoooooooooooooooooooooooooooOO%%>688wwww,,uuwwwwww>6886666wwww668wwwuuww3>3=OOOOoooooooooooooooooooooooooo................oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooOOOOOOOOO%%%%OOOOOOOOooooOOOOOOOO&%O%&;&&D+@.5KW[^ @oo@OOOOOO%%%%%;%OOOOO&O=oo=+fEPPY)PKso..@WSJPJhKKYKS@Oo&O%,O%O&OFd3ST5h$g$2<52Ddo=CD>>VwV>>TU*SSCeCe+@LCe=+oSL2spLsQ@I#JgpR#PpsS)[_5.2=o2C=fCDe+o@2+FsL52K2L5fEKggKgPSadeLeCfP #Ish L^+h@o5@4oL5.YLSSS3U43dV*e=O%=>>>wV%&,uFO*uu*%>w*%*>wO,%w%*O**3Vy2_/o=ew3wdy>>dAud]Fa5@phhKS@=o2CTD=CVCO333==3w3wS^fhhfO;>%>&;>>>>>>eeCi%wFA>uyu>>>;>,>>&&&;&yVw%%>,3=LCOyOw>>>>>>>>----;;;;66666666>>>>>>>>&%OOOOOOooooooooooooooooOOOOOOOOooooooooooooooooOOO%&=>>&&&&&&>>www>;>wwoooooo..........ooooooooo.......................", "............ ........oooooooooOooOOOOOOO%%%%%%OOOO*%O%%%%%%%%.......................................oooooooooooooooooooooooooOOOOO%%%&&%>&yuw*O=>%=>O==%%O===&%==34%FyOu3*ed=y>>;>>w6>>w&;d>O3=3uw>>w%Vw;Vu;>yAy&3ww,wwwwwwwwww8wwwww6>>-%%OO%%%OOOOOOOOoOOoo@@o@oOOO>=>>w886666;w>>w>-ww886668w8wwww>6yuuutuw868;%%OOOOooooooooOOooooooooooo..............................ooooooooooooooooooooooooooooooooooooooooooooooooooooo.oooooooOOOOO%%%OOOOOOOOooooooooooooO&Ooo=o=o+@@fs'Q`{[`gs#oo=Oo%OOOOO%;%%%%OOOO%%-O%o.JJWJJ`RX$#$!)`KIW|)ILY2o+OOO*O%=ooO+44aSSpKEh2Ks54<+L=e&w=o22dS3C=3=deUee%TC+efh.sW)WKgKhde)L5S2L42^EY`s5S.45@S'Lu%wO==>w&%>w&==d++2+o4UETeefY5DCeL=^_oFL@E`]^ho^_hL^SSLSYELf4^^fafS_/w>-66-%-;;%%&>=DUdO*3&uuw>wxt>uuiiw,w,>>>>>>>>&>>>,>&&>O==3eOO>O**>>%w&>,;&>>>>>>>>>>>>>>>>>>>6666>>-%OOOOOOOO@oo@ooooooooooooooooooooooooooooooooooooOO%&&&>>>>>>:;;>,w>@@+++ooooooo......................... ............", ".............. ........ooooooooO@OOOOoOOOOOO%%%OOOOO*==%%OOOOOO.......................................oooooooooooooooooooooooooOOOO%&&%%wO&%wywOw>O>=O==&3=>O==>ue=dTL22hLQ'R#gLSPK5sLLL@@SeAw>=&eDDC3=>Ody>&&3t>6%w>uw>>O%dwoe>>;ww;VuwTFOyd>;=>3>>>>>,wwwwwwwwwww86>>>>;-%%OOOOOOOOoooOooo@oooo=+&>>,wwww8666w>>w>wyuwwwwwwww>w6>wwwyuyyuuyuwuw>>&OOOOOooooooOOooooooooooo..............................ooooooooooooooooooooooooooooooooooooooooooooooooooooo.oooooooOOOOOO%%OOOOOOOOoooooooooO=OooooOyye>%O%&>;%O3=o+5fYEDffT4@45dd4(ddY42oodode@fCLTSf+o54@5SSD@+@.o.4%D>%68%r;-%->>=%=ed3=VDU>ww>>w8;,>,w&;>&>>>>>>>>>>&&&&&;>%>3edee3Ouu%=>&;%%%O&>>-;>>>>;->>>>>>>>666>;-%OOOOOOOOOooooo@@oooooooooooooooooooooooooooooooooOO%&&&>>::*-%--;*&&Oo@o.oooooo.......................... ..............", "......................oooooooooooooooooOOOOOOO%%O=1=OO*=OOOOOOOO.......................................oooooooooooooooooooooooooOOOO%**%VUuw%O>%d&OwUeO>3===>>>3OEFoCS5f+45J)_Wh4545Ihs5S)f24=w&d@=C=@=eeO3uFDd*u-u>Awy&>w&3e&&e>>&w&&w3w%%u>O3>33>3,>>>>>,8wwwwwww866666886>-%%OOOOOOOooOooooooo===3>w3>68wrrr9u>yy%-w;wwwwwwwwwtw>wuwwwuywwytwuuuw>%O*OOooooooooooooooooooooo............................oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooOOOOOOO%OOOOOOOOoooooooo@ooo++Ooooo4sS+osoYK### IXsWs.ooOOOO%*%O%%OOOOOO%%OO=+@gRgWRh`)RRPWhKWKK$$s@o=o3o=OOoOo+=oo@eSdJ$5$@Sos4ffd33ededTd2=YU=f=@34dDC3L2D52JfW5QWsJRs=FeS@5S(Tff2EL5#$Sf42fCh@fooo4dfLspYf$452+.EJhL.3=d3@of5K^Jf$h^EdefLh$psf)Eee3wDed3=eo3==o33=OeLh$2+aSeCCeD3e>UAo=CVw,uwy*wLFLLsS43D])o=o@2F+LeTfodSCeo+o4f24d2a<+22oo==S@+2o2SFeFO%yw%w;;;>>>=*=+O@==3wO>w>-;;->&&;&>,&&&&&&&&&>&&&%%>&*O&*=e3ee&FD3yV>V>>>%%>%;;>>>>;-;;>>>>>>>>;-%%OO%OOOOOOOo+OoooooooooooooooooooooooooooooooooooooOOO&&=>>:**%%%--%&=+@@..ooooo...........................................", "oooo................oooooooooooo@oo+OoO@OOoooOOO=23=oooOOOOOOooo.......................................oooooooooooooooooooooooooOOOOOOO%OA&%O&>uuOw&FAFOVyO%Ow&O3Ae33=SES<@fS^).+gEL+#@hS5SpeCFTaS22+C+oo=33wVy>>%wwFuu%>wyyO=FOuuwV>wwuOAwO,>&;w3>ww>>w>>>8wwwwww86>688wwwwww>>===>=&OOoOOoooooo4=>3>w>>>>8rrw6>>wuwww%wwwwwwwwuVy>wuw>wwwuuuuuwwuuw>>w*%OOoooooooooooooooooooo...........................oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooOOOOOOOOOOOOOOOooooooooo=ooo++@o3=33eCC>3eT[]s4SfafLY5d424of4o2S@Sf=2o4o@o23o%&>=OO=3OOO%>w>-;;;>&>>&>w>&&&&&&&&&%&>&&&%>&>*O=O=%eYLOO3wFwwu>>,%>>;---;>;;>>>>>>---%%%%%%OOOOOOOo@ooooo@ooooooooooooooooooooooooooooooooOOO%&=>>>:::::*&&==++@..............................................oooo", "ooooooo.........oooooooooooooooo+oo@ooooooooooooo@@oooOOoooooooo.......................................oooooooooooooooooooooooooOOOOOOO%%w&O&VO%%yDOO,UF>wwO>VFy>o=V4O=+d+@=4SS5LSshSRP)K@$ooTYL2J2+C)T23d>y%3O>>==>3>>>O&>uwD/V3==y>u3y>DVO>3>*>>>>>>>>>>>68wwwww8>>68wwwwwwwww>>33>=OOOOO@ooO+=3==>>>>www8866;>w%-FDxy866668wwwVn86w86u>>yywwy>>wuuwuyww>=%OOOoooooooooooooooo...........................ooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooOOOOOOOOOoooooooooooooooO=@ooo2SsRsIW}[D2.+XPRIQ R{{If.o@+OOO%%%%%OOOOOOOO@@o$ssKIRh sKsX##Xg#.X.@ooidL=eC_Co@YL)D$fJCsCLLLCf^YodFfoe4o2C3ddFD4dJEF=deo+ohf4)E.Yspgss#)^o52f52asaS+454aefSL5.=odeC)T4o@<22f)eeo@=222&%>ww>&&>+====%&&>>>>;>>>&&,w&%;&&&&&&&&&&%%;&%&&*O>%OOO=3O&O=e=O>%&w>ww>>>;;;;;;;>>>>66>--%%%%%%OOOOOOOOooo@+oo+ooooooooooooooooooooooooooooooooOOOO==>>>>>>3>:&&O@@o............................................ooooooo", "ooooooooo.......oooooooooooooooooooooo=oooooo.oooooooooooooooooo.......................................oooooooooooooooooooooooooOOOOOO%&=OOOiUwu&DU>>OuUVFTwDuLVowF3o=3e=2>>>>>>688www8866888ww8>>>>6>>>>>&OOOOOOOo@=3O33*>>w>>8888wrwFy%VywF66>>>>>6;tt>>6>ww;>uu>>tw,wwuwwuyyu,&%OOOOOooooooooooooo...........................ooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooOOOOOOOooooooooooOOOOOOoO+++2sfLsPKR))W3oD^XsPKg #IIhYg..o@OOO%OOO%OOOOoOooo.@XXsKK)YhhXsRK#))5X$.5CCLDL5fJ_Efh2gfLSs#sadS+F22a+dfdES=5UUFdf3YeC=e=d3S=4Sf@S5sKs$EY$5SfdJ&O=S2@$LQ4o2JLS<4F24fooa4@=e3>>=oC2===e3=e3333e@dOCT4o=O3@2deo=+322dd=oe4@oDE+L4@+a^{S44o+2o5+CS+542dCoSU3o3&Oe>uw>=%O>OVOOCDDCYDd+fd&>>;&>3w>&=2>&&>>>;&&ww&%&%&&&&&&&&;;%%>%%3OO>=&3=e3eeOo%*yO&>>>,>>-;>66>-%>>>>>6>>>>>;-%%%OOOO%&%O+oo+ooooooooooooooooooooooooooooooooooooOOOO=>>>=:>>,>&O@ooo...........................................ooooooooo", "ooooooooooo.....oooooooooooooooooo@@oeh>%%O&DwDATU=d`^=edo=3d33L3oo5CRY.SJK$K5YW)sSsgYPh+oofeUd>&F2=43e=>=*>>>y>>UD3e33=O>OLdo33O&=edw>ww>>>>66668688ww886ww6>>>>>>>>>=&OOOOoOoo+2CoCV%>&i;>wwwwxZ6FV;;%%y86>>>>>>&w>>,>>wwww,,wwwuwwuyuw>uuuw>;%%OOoooooooooooooo...........................oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooOOOOOOoooooooooOOOOOOOOOo@pSKg5hgKjPg odCs.Xs`QKP`WIW_$..o+OO&OOO%OOOO++.@@.@ hYWKRI`sIK`IJKKPK#4SSYY+522fhEJSShYsYgsJFUwO;&&>>ww>&OO;%%3O.LE44CeO>&O&3w>%++==++&=>;&;>>;->;,3&&>&&&&&&&&&&u;;y,Ou>>u33eedUCVe==%O=Vy&>;&w>>>>>:**>>>>>>>>>>>>>&&%%OO&>>>&=oO@o=4oooooooooooooooooooooooooooooooooOOOO=>>>>***==%O@ooo.........................................ooooooooooo", "ooooooooooooo...oooooooooooooooo@o@o.4f.o.... ......oo...............................................oooooooooooooooooooooooooooOoooO%OOO>OO%,yO&Vy>>>w;%&&&%%==Udo3Oe=w33>d>u2LSS)ESsgKIR[{'sKQg#LPf4eD2==yFDd3a+d=ddC%3w>>;VS=3O=OO&O&O3>O=3%yVw&>,&,>>666>>>68www86wwww86>>>>>>=&%OOooooo+3DOLD&>&VuyxywwtV%-%%>uw-ww6>>>>>,w>>w>&>wVVwwyywuwwuyu>;wwuttww6@OOooooooooooooooooooooooooooooo...........oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooOOOOooooooooOOOOOOOOO==+4SSgKP!##)|Xoo=s$$s[{{`[[)~`J5.@+oo&OOOOO@@@.o.sKPEPWsg`{)hg_gsgSWhRKEP#fF5L4Ss@SEsgKSKg5#sSd=4UUe+fSe=ddLLDdee3OeS22dT42odDfWS@#+55fh$54@4aLfC@52Sf44.Sf.s24<2f@F545.oh`hJf#KWK^R#5LS<@442=&O=3o@5T)+5f2d3@DSLD@+d=3=e3ed=3=2===USO==3e3FeOw%Ay&Cdo+522oCF25Sd+4++D2+255U`d@TSdd@4)`Y)f44C4244^)L4Ce&>&&&%w>;ww>>>>>&&&%O%>2.SS2o2e+&&==>>>5@ooOO=3=&>>>;-->&&&%&>%&&&&&&&&%yuyDyOu>*>OOOO=do=e>ee*wDA%&&%uuw:%%*>w>>>>>>::>>>,,>>;&&&>wuw>oo++oFUeooooooooooooooooooooooooooooooooOOOO=>>=>&OO%=+@o...... ...................................ooooooooooooo", "ooooooooo..@o.oooooooooooooooooo@ooo.oo@... .......................................................ooooooooooooooooooooooooooooOOOOO=&OOO%%%,>>ww>>>>>>>>>>>==oU=>>33yD>&3y>+TDdSP^RYIsP_)shSKs5LsY^SDCDyVd3CCF_C+3CTV>wOw&%O=oeeC=O==o3=Oeo>>&%>uu>>wuw6>6wwwwwwwww88666>>>,>>>3>&O&OooooO=w>&&;;;>>wuw>>;->>>>>>8w>ww>->6wOFw,u;V>wwwuuwwww>>DTu>y8V8xZuxwd@o+ooooooooooooooooo...oooooooo...........ooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooOOOOOOOOOOOO%O3+$RsJKgII'[Xoof_^R'[`{hP[RIsPs .+o+oOoO=+o+S)P)`W)P)`RsIRRg#gJKIsg#KY)ISs44Ts5IEYSfPhIh$5gKgeTY2eEFedDDSD44=CdDT+CO2e@5f@e45s]Yp42fKS..SYoSL22YL.55f5oChhS.^)+f5D4faf(E4YY[`KRJpp$$@$S2+@3=3>O===2=E^h54oCe=&eVLyOd>=3DV=CCooD4=dTdd3@eO=OO=>->w=3d5do5@2=+CaS+o@2o4+ed4D__eS4@fS=o4Y@@a@5Df4S+4Uf32=3>&&---;;;>>>>>>>>>>;--o=+oLE=&&&%&&%O3&O=>O*O3O33O3&;&&>>&%%O>*&d=3O=3=O=3eCO>Oe&,,&quw:%*>>OyN>:q>:%ww>ww>w>www>,yVUO2++4e=@OooooooooooooooooooooooooooooooooOO==&O3w^Uo,>>,&&&;;&&&==dEd&3=&>3wUuOFDe42o5E5$sSgsWgSsghsQf25aU3UUOuCfLCJSDDCL333Few3@434o3@@Oo242==4=3w3>>uy>,ww8688www8wwww8888666>,>>>,>=%%%%OOoO2>>;>w,>>wuw>;wuyww86>>>>>ww>>ww>U^F&d>%uwwuwww>>wu&&i&wuwww8ww>w+ooooo=OoooooooOooooo...oooooooo...........ooooo................ooooooooooooooooooooooooooooooooooooooooooooooooooooooOOOOOOOOOO&>&o@2ESshgP)XK$@@oSh sRK)QW[IIIRKhRS@o=+o@+.^g5~KIRK$gWQ)g#sg$ghRghshYKK#gIfpsLKhK)WPhgs5Ks#KKgeLL=4e=SCdeSeC^DuFyVST=e=d+FLS4C.fJf+4)f.CS25D5Sf5L^4LL4&=4+2fCoaLo3Tfo2L44f25252L23=Cd=4eeFodYSo2+oCLC2LY=o&%3%Ow>O-;;;;>>666666>>;;@o+e=E_doSCedow>ooo=3==w=%&>&>>&*>*w>O>=O>OOuDFO>&%%%O%&>>&3FCVeee3OO@%eS%uOOy33%%*>>*:qiywww%Oq%w>&>3&O>wuww,wuSo+o@eC2@OooooooooooooooooooooooooooooooOOO%=>=&o3^T=o.@... .................o.o@@@+2........oooooooo", "oooooooo.@...o.o.....ooooooooooo........... .......................................................oooooooooooooooooooooooooooooOOOOOOOOOOOO>>>8wwwu>>>>>;--=oo=4o===3w%yi,>>=e<2+S$5I|Q'Whg5))WLS`L&%&>>>>w>>>ww8>866668wwwww88666,>>>>>>&%OOOOoO%3>>ww>>;>wwwwuuwwwwww6>>www8www>VFu%ww>wwwwww3>>>u,%;%uw>&VyyVwiCd2ooooOooOOOOOOoooooooooooooooo...........ooooo................ooooooooooooooooooooooooooooooooooooooooooooooooooooooOOOOOOOOOO%%woCC^^gE#YKI4 @+.5Kfs#!'{['Rg)~QPW`J+...# s{}sRWgWKsgg$.K)WgWssgKKP[{)sKsKsJh))KPK##RPIpsEP#ss42dfe2dS4=3uwd>>FAVwu>O@o=33e33==dC==e=o3@D%uw=fo@.fYLfdL=Yeefe@25=@4Ea33%3S_Co=+doSdo=3=eS=o4=o3=3O>uOOw>;;;;>>6668886666&O3=ooS]Efo=3o=Oo4=oo3=O>&=>&&>%>OO>O*>O3*=&eC3O&%%%%%&>OOOO&=oO33dee3o3eCO%wO3Ow:1iiq:q:>*O>w11uw,uyw&,>>,866ww+o<+O@do@OooooooooooooooooooooooooooooooOOOO=>>=e%=oo@... .....................oo+2oooo...ooooooooo", "ooooooo@o5@.@@.@............oooo.......................................................................oooooooooooooooooooooooooooooooooOO%%OOOO%-;>;>>w686>>;-%+e=e^C=O=o=>O=3&,,O=C..K)II_`SPIs2gR^^`YSfCCCCeS{Y44LDTf4Ye3F4oLE2ed53oo@+o=4=2@y>&,uw,,,>>68www866668wwwwww8866,>>;>>>>=OOoOOoow,,wwwwuuwwwuu,&wwwuuww8wwwwwwwww%wwuV3;>,3www3,>>wuw>w3Vww&O>>ed4oo=ooOoOOOOOOOoooooooooooooooo...........ooooo................oooooooooooooooooooooooooooooooooooooooooooooooooooooooOOOOOOO%%6%>iEHfgISLESYa+.+22s p##)WQQ''IPWRRK@.@@$.h[{`)IW!WKPPI_)I')`)KRWhKh)Rss)g#PsK)'IgsPhgQ#Y){[sgRCFfYCSdefeL+DFee>VDT=DeeDS@4e2f@2h42^f.5<25Cf+@o#f5S$o.SL5+SLDe+ff$ffJKYL2Lfo5d4$@@2+o<542Oe=ed3%OO=3do@o=eC3dUd&yyy>uA8uwuude=dO3e@Od=o=C=oe3dF%>&O=o@4f.[^od==+e2of2o2dSdew3wuOCF=DwO&eo%3O&3o==@&oOuOwOuA&%u>>>>>>>6666888666y&Oo34@Y[C3ooo>L4e224ooe3==;%&>&Od/DO>O>>>eVy==e%%%;;&&&=3yyO=oC+3Faed@=>OeC>>O=w>>uy>%O*w1*quq*=ww3w>&>>;;;>wut4ee=O=TE@OoooooooooooooooooooooooooooooooooO*==&>=ooo.. .....ooo...............@oo.......ooooooo", "oooo..o@#f2.@@.................... .................................................................ooooooooooooooooooooooooooooooooooOOOOOOOO%;;-;8uw86>>-%%23OoC+FDO=dd3=O=w==4o2@+fEKE$gK#sahSY4ofeE2oLdeDSD2FJLfdCL4dSLCCFofC2++F+o+@+42+w3wu3&>u>,ww>>wu88668wwwwww88666,>>>>>>>>=OOOOOOw,>wuyVFFVw>>3ww>wwutuuwwwww>>wuydu&AAOy>>>333>>w>>w&3w333=eeeCe@3=o@ooOOOOOOOOOoooooooooooooooo...........ooooo................oooooooooooooooooooooooooooooooooooooooooooooooooooooooOOOOOO%%%%6wuCdD`_4fooo+o$E^P^YWPKQ!gIQ}}~WW) X5. XR`')~'QggkPQR'RhsI'KWPWPPss sQ)hgYKKKsKRR#gI`IPKggs5fSDfDed==3=C=eee3V>y^wF=4=+Ff@@fY45o2hf^L4S2fS.S)LsSfaLC@h@SS=2edKhKS2hCJL=UeodD3e2@ooe4oeCL``T33ee==Oe=3@DeO>>w>ewwVy>88%&>>dd3de3D=e=d3=De3d3==ywOeFD`ff@2aeO>O=3C445d@af+%>&>u>CuuT>3y3O=u=OO=%=O>w*&>&u;yUFO&>>>>>>666666666>%yud=&DF+o3oed=S5^)Yf=o=e>>>&,uw&U^UVwO&eSCFd%e3;&;>&%O%O&uwo=ODCe>>>1wu1%%OO>w*%w%CA>%ww&>>>6wtttoo@==oSS@OooooooooooooooooooooooooooooooOooO%==&o=+2+..X .....ooo...........o................oooo", ".oo....o@#@... .... ........... ...................................................................ooooooooooooooooooooooooooooooooooOOOOOOO%->--;>>www8>>;-Oo==@oLSo4Fdo<=3&>FDoSf5@fgWfSS)+Lfo5dSCd^U2LLSD4dSeFdSCf4ehLCL<@@CS244SeoS2oeo2>&%&>>;&>,w8>>wu866668ww88666>>>w>>>>>>>>we>OO=wuw>>>wyVVy>>>>3w6wwuuuwwwuuw>>6u3=>*ud=w>>33>>==>ww&%y33e43FSDUF3SF=oOOoOOOOOOOOoooooooooooooooo...........ooooo................oooooooooooooooooooooooooooooooooooooooooooooooooooooooOOOOOO%%%%%%&3d+s.oo+oO=&.Ss$))`[`))IW}[{{[)Ks XhKIjW~~'Qk~[[[|IKhKQRsIgII[)hPkPRWhK#WISggPYsYWWY$ hLPPsEww;uy3=ed2DL@5S+gha5SCSfTS2+4YS4S_4.h5$2sYfdUSooCd#P[`Sfpf4f==OO33=3d3OO=d==2CY3O=OyFTCL)Le2O>dO&y>>%%->wy;w,O>3o=2=d=O=33==edoOCD%%u3d4TR.$2oed>y3o33oaYYo<=F%iy6yOw&w%%OO&>;&&>u>w%%w&%V>u;wDF3u66>>>>66>>>>>>;;r8%63OdDed3o+2Fe+@ofTUeOdew3>3uweDo3F3eOCCOddO>o>>;;&&3y>w3=O=Oe=d4oo=3@4w=3TwFw1w11qeu11u1**:>wdCVddw&w>>wyxt8>C=oo@o33@OooooooooooooooooooooooooooooooOOOO&==*=+oo.. .....ooo...........@o...... ............", ".o........ ........ .........oo.......................................................oooooooooooooooooooooooooooooooooOoOOOOOOOOOO%>-O68wwww6>>=O2OOd@@+2a=+@SA%eSep5EL$){)SSK22S2od4dSoSde4O&yAy;>>>>>>6w>>>>>68866>>>>>>ww,>>>>>>udw%%>ww8>>;&>ww>>ww>;&68wwuuwwuuuyu>>wwOww%3wO>>>>>>==-ww,>y=CUd+++fDffd4@oo=OOOOOOOOOoooooooooooooooo...........ooooo................oooooooooooooooooooooooooooooooooooooooooooooooooooooooOOOOO%%%%%6-&O@oo2@ooeOOO.. sI$hRIIgQ~~~}~W)`gSRI)W``{'W~RW`{)I!jjsWIpWKRIK)WgI'RkQR#sPRP`RssPsKE$sK)L.SK^fUCfeD23CeCAyyFyDyF3eoe25S5ofL.eUCffo=a43DD&O3Ooo=33Ceeo>>oCdY_Lo3D3OOw;%wywwt6%;->&34+2=e=3OD3==4Y/de=oVOe3o4@S$o@+e%OO=>==O=4f2SyOy%>6%>%u>OF>w;>&%>wO8AVwyy%%u&wu&3Vy>>>>>>>>>>>>>;--7%r8O,=o2=<4@@USo243dDSedw33=;>&=3o&=Oede>o3eO=>>&;>>>uVyd>O&OOo+d==2=3OO33oTE=u1:******FUJq*uwOe=%dDy&>>8wuw6;-=o@=fd3o@OooooooooooooooooooooooooooooooOOOO==&OoO+@o. .....ooo...........o.... . ..........", "........@ .X ....... .....oooo.......................................................oooooooooooooooooooooooooooooooooOoooOOOO%%O;xFAt-;>>8888=FooeddDe)TeLLoSwOeO@f<4S2P])sSLdLdSF+dSf4ada=f=>uVVw>&&->>>>>>>>>>>6>>>>>>>>www>>>>>>w3>>>>&;;>ww,wuu,>>>>>w>>8wwuuuyuuyyw>>=e=O%==3&==>>>>>w;%>>w&YFoo@=Cf2T4o++ooOOOOOOOO%oooooooooooooooo...........ooooo................oooooooooooooooooooooooooooooooooooooooooooooo..oooooooOOOOO%%%%-%%%&o3ooo3oO%%8X 5SSR'PKP''[RP)W!$ WW)P'[P)[~I}[WQ`~ IhIKgIgR)RWQW))WQ'kP)RRKWPgsgRX#^$#PWgfPKK.LTsUD@JEoTV3wVyFUi3=ddddF4fLfYEo3LJoL5LSf+f@fhKS+5L$.sJa5doddf)hhXX$55a2=o3OO&>%&>%3&Ow=%o4o3e=e>oOo==oeCS%VV&>3&&>8-%t>%>3w2o+=OOo3e=2333=3Ld3&F%O%8%wVO>-8;%6>;u>>>%%wuy>>3>=>3=>>>>>>>>>>>>>;---x%;uO3====o33=o@=2+o@=O@OO&O&>%=oC3oeOOSUUdO&&&&&>>&%&>eCw&ywC3efo=2o3==doFF^U>u**11**wwdy111:*O3=3DTF%>>>;-%%-@o3@eC4+@OooooooooooooooooooooooooooooooOoOO&&OOOooo.@ ....ooo........@..o...@ . .........", "................................ ..................................................................oooooooooooooooooooooooooooooooooooooooooo@oowSFwo==o=o2+24ew>w%TThh.W)..w>=3+DY.+5XfKJPS#RgPg$5S22=SSUdCe33^TD`TfKKKsKKhfSLLghgg sXhh$Wf1O3=1Ouu>O1>%ww*=333>==3,w>wu,>w>>>>>,w>u%6w%>w;>rnt99rr99x-%y>>6w-tt6y>>Vwyyw%8=oDY+o+455eT=3&Ae=3y33e3OO@ODd=d@.@$@...oooO&;%-OOOooooooooooooo.......................ooooooooo....oooooooooooooooooooooooooooooooooooooooooooo.....ooooooOOOOOOOOOOOOOOOOOOO%%f__E_)E.fLf@2@o@$XX Wh#'{~R)`YDTIsX#I)hs)ssKjggIg!)P)P)W^KIKR'shgQgW#)`RXsp$IIYKdeS2Df4eCCLUS5S44SS3oL]]SCfdESY`IgPg#5$h)g.Sff$2SsCoDdO>>Ae3=o5Yh2@.2@=3edu&%-;->&%&>w>&%&&&%%&&==EdoLTO>&&>w>>>;;>>>>>;;y>>%yG%%%>6%%;6;>=4o2psf=OO%=%w&;;;;;;;%=>S/@C2fdC@=Y5.>%&>;&&%w6---;>>>8w8wtuwwwuuww>>>>>>>>68>>>>>>;;&&&%;ww&=>>&oSTOO-;-;6>-;;;;;;--&;>>;&&>O>STO&3>4243@4eo=Cd=eeF=JC==%u>>>w^EDddSw>d>>&>>>O>>w-8>=2O@F[Tee>>wO;%>O=Oo=3O=Ce=oOOOoooooooooooooooooooooooOOOO@@@oo. ...................................", "................................ ..................................................................ooooooooooooooooooooooooooooooooooooooooooooOO=3wewoYd4@4oeU&wu&=So$g_Lf@eF@3=@F5fR$XhghPW)EsYE@2S<=DdDuweO3e=dS2$+fgK#gKSC5YESJsR#I[`hhS=3ee=13wi3UV*%O133e>Owy%uuy%&u;,>&&,w>>w&>>;wyuyn&&w8yn9ZtuAFw,3-8u8>6uVVw&,>>3&@T)^2@2$4eaSO%&yd3wwOoOoO=od3eD4Sp4..2.+@ooOOO%%OOOoooooooooooooooo....................ooooooooo....oooooooooooooooooooooooooooooooooooooooooooo.....ooooooOOOOOOOOOOOOOOOOOOO%%^`4o+f.+..@..f<@ sRPgQIg)gS$sf5# jgsjK'[[g$~Is~IKKRP#sK[`KIWWWjIPIk`[`I'RSKIIPRDdDdLDff2254Sf5@4EfoSEL3@SfoFSLYs IR$g_^#5gfY+42L42Fo3w>>>DC@SJpRP.++L3o=ww&%---&%%&>>;&%%&&&;>>2=LD=AL*>>>>>&->;>>>>>>;-6;u>wF;,OO%;66%wy=42.p'^4@3&O%%>>;-;;66%3==FoeO=S^Y4d@fw&&>;>>->>6666wwwuww8w>-wwuuytuuww8668wwwwww8>>>&&%%&>>==O&=O3de;;-;;;-%;;;;;;;;%&;;&%%&yuo>y=oYLd<@3aeOod3OOoO&23323w,&;>TLe23DUdd>>O>yww>--u6O=o4SDU&3e3wVyu%Ooooo==eee3@ooOOoooooooooooooooooooooooOOOOO@oo.. ...................................", "................................ ..................................................................oooooooooooooooooooooooooooooooooooooooooooo=OoOeeS=UEL+,wwuDDy&ww%3u&%yw>A=3DUy&wyyyyTT3=OwOwyyV>O>eedC3o&4f.o....o+22@&&&OoO%OO&OoeOdeeCd^L.fYSS.++@&OO%;OOOoooooooooooooooooo..................ooooooooo....oooooooooooooooooooooooooooooooooooooooooooo....oooooooOOOOOOOOOOOOOOOOOOO%%.oo.2..o4#L^#...YWYKs#PhW)Ip$RSS))Phs#gR~ggk'hP)jQQksPWSSghIRPPKRIh`[gI$SggIKRKhTD2Y^2S4SDfoCC242SsfaDSeS+=So@4@5KE#sKP)Y#JL4@f$$52C3=&&wA3DLf5.sgpoo2+oO=>&%--%%%%&&&&&%%%&&;&&ooeFOo3O&&>>;->w>>>>>>>>>>%t>%u%w&-;---%%O%==4E]E@o3O=w>,>;--;66=3=O>ow3O=DJad2Ly>&>;>,>->www8wtwwwwwww>uuutttuuuuwwwwwwwwwwww86>;&&&%%&e=3O3doo-%%--%%--;;;;>>>%&&&&&&*O3>OyUD32ooo=o@=2C=3%Ooe@2f23%w>,%33eSdd_LdO*>uu&>>i%&&V3+e=e3=O%OOO&Oy>@OO=d3Sd==OoooOooooooooooooooooooooooooOOoooo... ...................................", "................................ ..................................................................ooooooooooooooooooooooooooooooooooooooooo+oo@&OO>3Oe+SDEYI`_YLLDDaf$)h@+=S^E<4oLfLfs^YffQh5#s2S@oC3CL>wuA=dedd=4SY^LY$R[KC+hsfg5RsP5hYS++3=o4i=oe3OVAwu%,43=&3deOw3OVdOVVOyu&yUUV>Vy&33eude3>w&&>>>>>w>>>66>>>w>%w;O>%OO>w;%6rt>uoo@hf3o@&owiu>>;--;;63>>>3>3Adoo==do3u>;>&;>>;8utwwwtwwwuuyuwuuuuuuuuttuuuuuuwwwwww86,;&>&%&3>OOOdDVw%%--%%-;;;;;;>>>&;>;>>>&yO>OoeYdO=deL3CUeeO>==O32<43e33>&yy3=C222dLd==3=e&O&>>O>L3==dO>=O3>wwOAuooo2f+S=OOOooooooooooooooooooooooooooooooooo.... ...................................", " ........ ..................................................................oooooooooooooooooooooooooooooooooooooooooooooOOOOOwe+dFD_sY{{_U=o<$@hK2Laf^doYL.os5.o5Sp.f^$5@o4ed433>d>>Ow=DF@FHs$LKhsKKSLLRPsphJRPY4.#gDd=OCe**dw%V&uwu=3o@Fd=dd3wFV>uyyw,wwww3>DD=OdUe@f2O>==OOOoo+OoY^EFd=fU)YLSSK52oo@o&oOOOOOOOOOoooooooooooooooooo............ooooooooooooooooooooooooooooooooooooooooooooooooooooooooo...oooooooooOOOOOOOOOOOOOOOOOOOOoo+.+2+5.s5SYKWWLsg)R[{[Rjh)W5SLs`I)Ig$WWI'sPPsghIRsRPggW)PghIPWPRRIkPRWgWWhRKYpo3=T^STd2Lhf2.fhLK245J42SF4+$.Y'$ 5X#$SI.sPSLE$5p@SD=e3=COw=4oJY45o@@3@=O%&%%---%&;&%%%&>>&&&&&;d>>>&A%O,>>;>6>;668w86>>6>%>>>w;=%>u6---%-&Odooao&3O&>%,;>;;;;;;;&;>>3&V3>3=OwoO>&>w&&>>6wwwwwuttuuutuww>6wwuyyyyytuuuwwwwww8>>>&&&>>>3yDwO3>%e3%>8-%--%>>>;;;;-&>>;>w>&%O=3yo&==oOOD33Fd%3=&=3O=OodCd>=&u33@4@=33d3dLUDdSCO>wu&C=OeeO=OO=OO&;TT@o=dDeLeoo@Oooooooooooooooooooooooooooooooo..... ........................... ", " ........ ..................................................................oooooooooooooooooooooooooooooooooooooooooo@+OoOOoOo=4o@@5`K$`L=2+.@@5LoL4Lff.44f5S+ffo2LfLDh+fS+dSFd>wVwwe3=de2dd4@psspsse5DEUs2sSphJKPSfD4LS3FEio3uL1O=*=UDef@oCF3LCwC&>;>w>%O&>TLDe34ET$YL2p4@e3=Cd44@eo]`^`)S52@hRsKY`^22..2.$_Uo+oOo&ooooO@=eUTCF=3SC5Sf4hfY5KSoo@o=OOOOOOOOOOOOOOOOOooooooooooooooo........ooooooooooooooooooooooooooooooooooooooooooooooooooooooooo..oooooooooooOOOOOOOOOOOOOOOOOOO+o5LEYEEPIIKKKhIgsgPW`{{RhIsSW^fI'PXh))gs)`RWRPIWPR)KKW gg#sshsgKgRWRR)g#sKK)LEYdC@odUT4fS+LD>&&&&%&&&%&&>>>A>&F>>>;-->ww6wwwww8>>>>>>>6>%=O>u;%-66>>wd@+dO=&O3=O,&-;;;;;;&>>O%>%&O>w>%d33&%>w>&>>>>>668wwwwwuuuwwwwuuyyyyyyytuwww666>>>>;>>>w>>>ww&O=%%d%%%%%%%-%;;;;;---;>;&>w,%&u3O3>=O3OOOS3O=e=V3&+e+@3eS3>>FF=o33=+44+de4<4deDUye3FTES33OO>OO==33%wOooo+e@e+O@@ooooo........ooooooooooooooooooo..... . ........ ", " ........ ..................................................................oooooooooooooooooooooooooooooooooooooooooo@=OooOO==Oo=2h@W)s'Q@4@@2fIs53+L$fhR2hSo+^_3=F=SSf452CYCCDCwuyySSedCdfffDKLKS$_^ffffSSgpgYLghf$o@@o1e%4_^2o=ooOoe=Oddyww&OwAeoTC4CL2UEgE^TLf<>>>;&&&O%>>&%&;O>A8->>w;>>;6wtuwwwwww6>>ww;;>>y@oO>&>xFw-->O>e3OO&%>>O,&&--;;>>>w>-uw>%w>%>>y;&>%&wwww>->66>;6ww>6utuuuutyyyyuuyyyyuwww666>>>>;6ww>>;&%&3&O%>=Ot%O%>-%;%----;;;;>;->uw%y&,3>=w=*3wwCw=>==3&=3=e@dSC=+dUDeee=o2fYe&=3o++fEfSS2STYd=,ee3e@$@2X.$X$sP'RJX $$Y__`)ERL@.o@o=oo@oo@oo4d3d3deeedY2sf$'gSS@++o=Ad3O>&&->>>;>>>>>>&&&%>uuw&&>u--%6%w-txxw6688wwwwww6>w66;>wZTUeoO&>>-tFw>%&Oy&3V3O,,%>&--->688-%yDw8>%%>Vw;Ouw%%,uyu>>uxt8;6wyuuyyw8w8wuyyyyyyyyytuww8886>>>>%>>;>,>&OO&O=OOTUuO8y-O;%%%--;>>>>;->uw%%%ww*=>O;>%O%=&>=wOOCD=Do2d2fCDCC==@3dLC2o5+2342df=332=LD&e33>3oO*>>O&O%ooo=d4o@@ooooooo................oooooooooo...... ........ ", " ...............................................................oooooooooooooooooooooooooooooooooooooooooooooOOOO&oOOo@+@X g{{(shP^W555eDf[`)fDLffoCU=O33fSL)DC+=>e3e=uOu=O3d33@LTHH4Fw<===KS#$5s P)W|I)R #E52 PES[S..5oo@=LCooo@OTLCedVdw3DD=SS5LY][Eooo=oOOOOOOOOOOOOOOOOoooooooooooooooo.......ooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo@24fT_EgSXshRP5KRERIgPh#RsP##h#kI)W'QIW)')KWRRsK)kWRshg5XhhKKh.gSIPW{PPKs#R_5SCeDD=CeuA%O%&ww;%8&,w>>uyuOw>%>>&>6>;;--;;wxnt8wwuuuuw86www>>>>>uVDd=*&&--%->>;->>>&y&;%>%;&;-%>>%%ww;;>;>%>6>wZVwuF3u%wyw8yZxw>>>wuuuwwww8wuyyyyyyyytuww88www>>>6>>6ww6>>;&&%%&>3Vw>wu6%%-;>>>>;--;>-%%&>;;>>>>&%&;>>>,>=&=3O2D=34f=22oD@dS@3odTTe2SSL445dS4=eeeUu>&&=>=O%%OOOOOO+oo452eo@ooooooo............oooo................ ", " ...............................................................oooooooooooooooooooooooooooooooooooooooooooooOOOOoo==@@@2jIP{{SSh2WERESCDpf.$SfhdFD3Ded=%4@SUf=CeDew3%uwdew1F>eS+LEfSdd)E^=e+Oi,d<3=JK$ hgP)Y hQ)WK5$ pXh)PX@@@o@o^^.o2@o<22@oO%OOO4YLLa@SLE^ho@o+oOOOOOOOOOOOOOOOOoooooooooooooooo.......ooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo+@@@oo@4s_)'WKPWPI)QgPIgRgXKPg`RQWjRKWR`[PW`KgQ))QjKIPWsfs^_IsKRghKKPR'IPKIKRYL44D+fSSfdf52fLww&%dD&ww>%%>w3FFy&O>uy&,>;>>>,;>666>>;w>--8yywutytwwwwtw8>;-;83=%&>;;;;>86>>>w>%uO%u&w&O%uu&--&;&%&ww>V>%>6-%;,>Ouuu>>yVZxwwutwutuuwwwwwuyyyyyyyyyyuuwwuuww6666>6ww>>>>>&%O%%&>--6w>->>>>>;;;;;;;----;>>>>>>&%%&>,w,;%3O3=oFLT`Oe+<3<=2Eo+C=OYSo(U+5eTFedd@CC=>>>==&%%&&OOOOOOo=o4CYLo@ooooooo................................ ", " ...............................................................oooooooooooooooooooooooooooooooooooooooooooooOOOOO&=oo@D_QP[WS<2u>,udi33<4+XsjW`[`WSIXX$$)`S@XXP`Kg L$.o@=o+.42S+@o@ooOOOO>CTYS25SSffo@+oOOOOOOOOOOOOOOOOOOooooooooooooooo........oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo@@@o@.YIRQ)IgYYs#KR)IPRssI'WPghKW)W IhhgQh#ggPKhhhXsh5^K)RIsgISWW#I KPPPLLCUCdC5TfdF+f4fYLoLhsL^PEJ@@a@^)fh5P2..pEf.5SfLh552pIfSg.#2Caa3@2oO3&%%w&&u%OO>u==>Oyyw%O%>>w>ww>>ww8www6>>>8ww>wyFDyyytwwwwuwww>-;>&&>w,>;>->>>;-;>i&>%ATu>wO>VV,&&&3VV>wywDu>yZw>t>wuw>w&uwyxytynnuuttuuuuuuutyyyyyyyyyyyyytuuuw6>>;;66>>6w,>&%%%&%%;w8>6u8>>>>>>>>>;;>>>>>>>>>;&%-;>www>&O3O=3e=fdOdLodffdffSY4LCSfESaDde+2eodUS=&>,>*OO*=&OOOooO+ooSd^Eo@oooooooo......o..oooooo...... ........ ", " ...............................................................oooooooooooooooooooooooooooooooooooooooooooooOOOO%Ooo<@.C#XK@4fa.E]PSYLfofaE_fSd3o+3^@2CCe[55L@eS=ee4ed=O>eSCe=OD3=4fddCedY43D42F@5LfLJKQPY5YWSXpR_R5h)5EPSh$pp__+S..sso^_=22CC+<_[^fSsLSCo4@=i3U^`^L+fg5R{QR_`'hI X544QE5.ssghs'h#Yf4oed.5L24o+y;%ywO>>Td>wOoO@OOOO%&>>V,wy>>uwuuw>>>wy>w,&%&uCytuuwwuuwwwuw8>8wwww>>>6-;;-%%%-O&>O&AO%&%;>&;;%OOwwO%w&w86uVAx6&&,>uy%t8wtyyxytwutuuwuuuuuuuyyyyyyyyyyyyyuuuw6;>;-;>;>6www>>>>>>>wuwwwywwwwwwww86>6www>8>>>>;&&6;;>>>>>&uo=3=oeo3T{^o@fSL4do2==LLCfU^Yfe4ee@TD&;>,>%OO&=&OooooO@o5LofLo@ooooooooooooooooooooooo..... .... ", " ...............................................................oooooooooooooooooooooooooooooooooooooooooooooOOOOo%@o@os)#IQs&%>y>)Co@oo+o%%OOO&wuAwuy>>uu>66>6wyVu>OOOO%%wutyyyyutuuyyw66886>>8ww>>>>---;wDu&%w>y%&>;%&3>C=%=>CDuO>w>uVu%wO>VTUuyyyyytuwwwwuuwwwuuuwwwutyuuuttyyyxytutuw>6;-;;;>6wwwwwwwwuuutuwutwwwuuuwww6>6ww8>8>>>>>&&>--;>;;>3OeDo+Fd&o^EdfYf2ade=F=FE23f<=2dFdD=SFF3w>>&%%*&&%Ooooooo@o+@o@@@ooooooooooooooooooooooo..... .... ", " ...............................................................oooooooooooooooooooooooooooooooooooooooooooooOOOOOOoo+@2Tsj_YofCSSo$L)YUYo@=o2Yae==+==oe)LDL(YSfSd5Y`SCF@^DOO>OeO&e3iDC&>&wu33=2oo@@++o&&%OO%>,Vuuywwuu8wwuuw3>>&OO&=3e6wyVAVyuwwwuyuww6888wuw>w,>>>>>>wVOO,wy>u>wu>&>w3==33dd&&>>>ww8>ODUyVywyyyuuwwutwwuuwwwuuuwwwuuuuuuuuuuuyyyuuuww86666>6wwwwwwwwwuwwwwwww8wwuuuww86;;68>;>>>>>>;&;;>tyw>>&%VLdFf+3eYefJgY]hL<33UD@+3T^e3e3CD=EuuFw>&&&&&%OOOooooOo@oo=ooo@oooooooooooooooooo@oooo.... ... .. ", " ...............................................................oooooooooooooooooooooooooooooooooooooooooooooOOOOoO=ooo@LXp{{TDETL5sg5DE2^df+3oo4+4++4+o@LfaESJ42fYELoCU+3d13C%33oLO=3oCo3eL3DVd^YfSYIKRPIKR'))~WWK`PgssgfLKY@KSLS.+.@gETsK2..$5p+.o4J+LC hfYKW^)[[)!W[{{`'Q}P#PXfsd=EU3*s#sK'P$ 5JhYU^SUY^E5.o.oooooOOOO=+oooo@oO&&%%;%%ooooooooooooooooooo....................ooooooooooooooooooooOOOOOOOOOOOOOOOOOOOOOoooooooooooooooooooooooooooooooooooooooooooooooo..oooooo=o+.gIIIYJ$ghfWSP) R}[|QWKW~hhRIW{{~)'PW~`[I# WEKS5hKhWKJsgKWRIPWIg4SpED3JS=eeeF_D.>&&%wuuuiVuuuuuyu3%OOoOOoow,>>;>>>O>ww,%uyw>>>>wuw=dSCdw3=&&>>&%-8w^^V>>FDuutxyttywwuuuwuuuuuuuuuuyuuwwwwwuuuwwwwutrwrw88wwwwwwwwuwwwwwwwwuuuuuwwww66>>>>;>>>>>>>&6;8xnw>>>de3DTdd3DSCd45))Laefe2=dU+d^CCCwd3^ee>w>>;;;&%OOOoooooOo33333o,33ewDFeOUVdFFD4DJKRJKkWIW)[{[)IKWIhII^PPs5J)Lg@o#.^_YSSWp.@of2oo.SS_fKfWs##K'`'RWR'QWRPW'gX#f55YUFDOV)RgWW #K|^.QL555$$2.@@o+oOOOOOOOooo+@ooooOOO%-%-oooooooooooooooo.......................ooooooooooooooooooooOOOOOOOOOOOOOOOOOOOOOooooooooooooooooooooooooooooooooooooooooooooooooo.ooOOO=o@+oXg)!sPKI)SgIhhsPg|KR`IWRg[WgRWQIPsWK#QK#XXIII)ss##$hSPPPgRgQ)Kg$pSCd3eY=CYdFUELhL@2EfDLo43oOoo=o2@LCLLefYC@LshESES)WgpSQYLf)hSdSCd>yuDFyw=>O@ooo@o.o%&>ww>>>%uuuAAuwuw,www=O3&ooOO@=Vt8>8uxVVyuuuwww6rr66wtuww>>>>>>u%u;>%>w>ww&wUTD+ed3===>>yVu&->6uA>OA>yAxVADAy86wuuuuuutttuuuuuuyyuwwwww8ww>>>wuxttttwwuwwwwwwuyuyyuwwwuxyyuuwwwrw66>66>;>>>,>>&6-;wt6;>;ydO3L==Dd^Y=2h4+SfFUe4=oOSU_L=3&3>UDO33&&>>>&OOoOoOooOO2ffELfoo@oooooooooO@@Ooooooooooo.... ... ... .. ", " ................................................................ooooooooooooooooooooooooooooooooooooooooooooooooooooooooOOoo2@f^#''$.2+UO&wOOeO=Lf+fdEDo2OO33d%V3=4Sd22<22Y^d=e)H+@@@5#5K54+wyyZC==Cd5ff4s#RKhhPRPsRQ'{{`sK[)h)_W~skIWgR# #g'WQRS5K#@X sRh#!RQ#ghg#5$sIPW_RK5KWS#h5s##gIRWP`sofgPS 5PLY4T`[dee2@@@@OoooooooooooooooooOOOO%%%%%%OOooooooooo.....ooooooooooooooooooooooooooooooooooooooooOOOOOOOOOOOOOOOOOOOooooooooooooooooooooooooooooooooooooo@.@...+....ooo@oOo=oO&OOo=o@^){|gKhQghPSshhss)Q$SSRIh'WPWEo5IR'IPK#+5opY+=S3*1uqfg2s2f4WK_`WPsXsHSL@fCEYLTY5F@foo@++3O%%%-%&>o=UWE4$p++.o2L_WKWQ#EKRPYhE$#fpsWhLTFue3&OOooOooo+=O&>wyyu8wrttwwuuvttye=@ooooOO%6yuuttttuunDTy>w,&wu&w,>uw,wd%uu,>6;;wr6%6A;%u&>UTy&OO&==>3FFu>>>weC%w3wVeV3FUde>3tutt8-6xtyuwtwwxuwwwwwwwwwww66wuw866wuyxyyyuuutyiyyyuuuuyVyyVu>y8wttwwwwyA%8w;Z;,%w*w>>wuuuu>AD>CfaS.4SShLe@FSwCYddLo<@d2dDwwOy>=f4hdooo@ooooO=o@o2TYL5..$ooooOOOO@@@oo... ................................ ", " ................................................................oooooooooooooooooooooooooooooooooooooooooooooooooooooooooo@@ooJJ 'Wg#.d^DOO>wTD%455S2Fe+oCTCO>wee=oSS2o3=ULoLFoCLo+YY.gh)`p33>>6==^Fwuyyttrtttuuuylttye=@oooooO;wuttttttuu>uy&%iw>,>u>iu>yy&iw,&wy%rn->6w>%y&O=>333O&yd&O&=>>3w>>yDECSUDydw%dOddw386;-;66>%wtwwwwtyyytuuwwwwuww8www866wwyytuuuuuttyuuuuuuuuyuuuw,wwuttuyxnwxyw8rxtw>ww>uwAyud>uiLudU4fSC2oLC2=o3AL`CF=LESCd^FeeA&wSYC4=o+oo@oo@oo=+.f4YEgW$.+.@eo=OO@@@oo... ................................ ", " ................................................................oooooooooooooooooooooooooooooooooooooooooooooooooooooooooOoo@oCC#`WX.@)^y%uwOdwO+o)_@2o=e=3Od3%OeeTd@@==24aCSTeO4eeL)2ghsL`SwDAnC3deEY@SKsghRRKKIKWW)I)I'~W)WIKhIK~)`R)s #W#IRhQKIhg#$XI)WPhR'`W)`W`^RRW`I#5WhSPKPhRPRRR_'KW$23=.#@hS.$LUoo@@o+o@oooooooooooooooooooooooOOOO%%%%ooooooooooo.....ooooooooooooooooooooooooooooooooooooooooOOOOOOOOOOOOOOOOOOOoooooooooooooooooooooooooooooooooooooooooo+.@@...++oo.+ooooo@2.$2ghg$jWWIsKWsPs5Sg'' Q(##!k!'h5HU`hXk$h)[R$.$oofTde*O4oYQs+$sJKKPWhsRSLd5fS4g5sK44Y+dY^=oOOO-%-%&>oo=o5oo+oOOooo@o+LQ5.5fg@hWf(_WJ@55=w3eCeOOOOooO@==3uyyyttttttttuuurtvxe2+@@ooO>uyttttttuwwww;>>FVV>Oy33O=>e%,,de=,>&OO3>OO33=ede=oOOyDLFFD&%OO>&O*3D>VLDeV/`TLLdFCtxywwyt;6tuwtw8tttytuww>wwwwwwwwwww668wwuuuuuutyuuuuuuyyyyyyuyVuyyyyyyyxyyDy6v6nwuuV>u%wy3edi4FddC+fYLfSUf223OwFeoC+LLfLECS^V%Vwffooo.@o.ooooooo@#KhPW#g)PPsKJ+@+@@@ooo.... ................................ ", " ................................................................ooooooooooooooooooooooooooooooooooooooooooooooooooooooooO=oo2oLL KIp4dEwO>>>uA%>oeS_]_Do+eLdeCTU<_)dLD+52oedYF=OwwDT*UiSDYSfLLKgR)QPPPR'gP|Ik)II)WR)PIg'WW)XX#R#RIIW)Ws)P KWKW~~{})gXX XX SPgsssssRQIQsQK )[IX2.@oooo.hELf5@o=o@o@ooooooooooooooooooooooooooOOOOOOOoooooooooooo....ooooooooooooooooooooooooooooooooooooooooOOOOOOOOOOOOOOOOOOOooooooooooooooooooooooooooooooooooooooOooo4.+hLEL52fSso#.2f.+.$ I)PWgjPj``WPX5SE```'PLf5W'~)h.+o6-uuV3&iwdD^wOeeO,>O3&UD3odd22o3Foof2wyu%OyDUudw;wy,OOOowOO>=__O3y>Cd8txt868wZw-6yw>tuutuuw>;>>6wwwwwwww>>>>>wwwwuutyuttyyyyyytVywZFnttxnnyttxyDy6n8ZAVVVuAADFd4TSddDedfY_L.)^5deeOVO34=4e+f_o5do44==42.@+..o..o@oo+o Xs)``sKW`)P^ho2@@@oooo......................................... ", " ................................................................................oooooooooooooooooooooooooooooooooooooooooooooooooooooooooo+oo2(hgY.2.FC&>u&>VD>>e=OC^)S=o=UU==D4Y)+dTS+3fed=S33dwieCU55sfJdoeUw8SE1JS4SYIIKR)WRPI')KIPW)!gRIskghW)IR){I $)RgjRWW[PIIs PQP)[[[PX#sKRsX'I#)sX#S)EQRWj)KW`# 5o=O=O=@@odS3=o+=ooo@ooooooooooooooooo.ooooooooooOOOOOooooooooooooo...ooooooooooooooooooooooooooooooooooooooooOOOOOOOOOOOOOOOOOOOoooooooooooooooooooooooooooooooooooooOoo=o@@L[YYYSS^{_SIP``)_)R)'RR'WKhh)`K)IY]`YXI[{)^[`I .@+oo._gKRWWhh)[L.@++o3^T2TL.2ofKh$Kf4RWhshKYhYYfhSfYLfR)L+ooOOO%;-OOOO+=O%O%&O%%O%OO33=@hEh4..@@.5fLEYR^E^/UUCOoooOOOoO&&3eyyutttttttuuuvttyuwed@=333ututttttrrwwwu>6%wu&U^COeU3Fe=O=i=Ooddo@+4o2L``LfS@O3u>%>&O3yu>uVu;3>&wOO>>3=y&d>=>yw8w6>uAtt6-686wuuyyuw>>>>>>>>>>6>>>>;;;>>6wwwuuyyyyyyyyuuxywVAytttxnyynutxwuVZZywVwyueyCC4YCe5SCS=d42s)E@ffea@do5+..oo.o..@o.ofhgK`'WXgKXgQRIY @@oo............................................ ........ ", " ................................................................................oooooooooooooooooooooooooooooooooooooooooooooooooooooooooo@oo=UwO>>%&3=Fo=^UdS2o3odE_$4fS@4d@OU)CCCo8^DCf4foSwuutxttttyyyyxttuwueC+3ew3ututttttrrrxtu6x>y8=&;&&>u%%%>w>&>OwO%3y>uDyy3CLF3Gn>8twxF6DDt>ww6wwuuww>>>>>>>;-%--;>>>>>;>>6wwwwyyyyyuuuyyytwynuFVyytttntn8wtyAyVyDVAyyeedd4e+ffF^CSS+ffLDa4=eeC/LD33SS^RL)f45oo......o@.+..2..R'`{)$Q'`WIWPKh#$o............................................... ................ ", " ................................................................................ooooooooooooooooooooooooooooooooooooooooooooooooooooooooO=oo=@2osL4o+@o33;O>-ut6>u3>ue>Oe]`LEd4TY5)LY5eDe3DSd@d3A/FDLfdC@HfDSLdu==DfSSKh#KRIIR~KWQPW`WIK~'PKRK'RhI~WI[) Xg)'hR{P'{[}`RIW)sPg#K}'KRIhPRIsKhRS_[WkIkI[{'sX#.@=OOOO%;OOoo=+@@oo........................oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooOOOOOOOOOOOOOOOOOOOOOoooooooooooooooooooooooooooooooooooooO>Oood^_SKIsQ^sLRhgPKfhR)KP)hXRghQP#)R$)`5.#..@.o@os. ..fK)Y2EfRj#kR) h[K $$...2o+@ELSSd2YsYY#Rh$W`Kg$s5fsSKhPI.+@2ooO%%%O%%OO==%O%&%&%OOO>>%OO&o5oodoLd@=@44wtttrrutyyuvttuwweC=edewuytttttttrrwt;6w>u;e=3CSeddC3LEieddfLET^SLs42.2f2sJ>&>uu&O&ww>wyw&>%w&%>V&&>F>Fuyy&Ft;;6>6wuDDnwuw8>6wwww>>8>>>>>>;%-;>6www>>6wwwwwuuuuuuwwtyytyyuyDZyxywwyyAyuwwy,wuAuwdCDdff4h5SJDD2YYLUfeSd=dedUUdDdCh$.oS^.p$2.+..@@..+.@..@5hY'I'`g K'Ksh$ X ..........oooooo................................ ................ ", " ................................................................................oooooooooooooooooooooooooooooooooooooooooooooooooooooooooo+OodC.SE_LoECoOAw>w;%t&w>&>=3eODUfTa4o5hgL2+L43eO3O:O;OO%O=ooo@o@.@o......................oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooOOOOOOOOOOOOOOOOOOOOOOooooooooooooooooooooooooooooooooooooo%%O=o.)[5)IhYgg_YpgSh(KYWW')s IhXXkkRRKJ`S+@@@o==O+o+@.@sSTS@ooSg~RPPgKh`R ..oo.+o@=FETF+2YSKRS#hKghhYKsPPKS.KRXo+o@@OO%%O%&ooOOOoO%O%OO&OoooOoo@o@ooOLULYe+4aeo4235<2eiHiOO&OooOOOO&>8ww86wuuuuvttuwwed=wewwuywrrttttttwZ8y>>ww@iOLST[Ui4o@4Cooo2oooo3ef5=3@2SF%&>>>www>yy,uyw%>>yV&FDyFww>V>O>->8w8666uw>wt6>y8wwuuuww>>;>>www;>>8ww86wwuuyyyywuuutuuuwtwuVywVxwuVZiyywnVy3www,DTEDS33e42hS5hPLf@2CE2=FdUdLOVy>%3S=.+.@@..@..o.....@....$o P^hI)jjIKgPXX XX X .........ooooooo................................ ................ ", "................................................................................................ooooooooooooooooooooooooooooooooooooooooooooooooooooooooo+oo2oEh5ofDo^L%Od>w>w>;wV%i>eO3oD3+=2=ChQSpsfYdd=dF3FLfuDu&3YST)TSEo4Cedda2o$f#IP)WWgksPWPhP`IPWgW`K#IRQ~QW`{[h Q`WWkQkIW'~Ik XIQ'[I~P)PgjW)QW)#jKX)g#Q[RQ`{{KR5o=OO%O%%%OOOOOooooooo........................oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooOOOOOOOOOOOOOOOOOOOOOOOooooooooooooooooooooooooooooooooooooo%%8O@+K^XsK#h5 KKhEE5h ssX)`RgKh~gghsIRW{P..+o=oOOoOoo@.YLS@o+o+ I'{RhRKsRWSsPs oo=oo4DL@@fEE'hYsPs#YYPhLPgX# $X+o+=o==O&&O%O33=<4=fdo+oO+@O@oo@+o=@+@e4FSeefJfU2444e523FU=o=OoOO%OO%wu8w68uxyuwwtw-;wu33L/D>uwurZxtn8-yuuwwwyy&=4=5<3=wwwwuuwwuy,wAAiyVyyuVDTDwViyuyuw>w8668ww8wwAVw6>nwyy>y6t8u->twwtwwwwwwww8wO6y>wtyV&yuVyu,AV>yiy>VytAuViVCD%ei3,Dd&FU^i3eTfE)SsLP)^F4L=4C^^Ud3===3Ce=ooo..o..ooooo.....ooo+.@.X5KI) $ #Y4X....... .......ooooooo................................................................................", "................................................................................................oooooooooooooooooooooooooooooooooooooooooooooooooooooooo@o=+o2C5o5FLao+=dC>&O>t;u%u%>3C=eOd+=ed2|`h@EEY_^^^LLUfTDeeAo23ofEL3d4O%%%OOOOOoooooo.......................oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooOOOOOOOOOOOOOOO%OOOOOOOOOOOooooooooooooooooooooooooooooooooooooo6%OOo.f)R KPggSh5Y[YSLIgKL5L`[Y5K`WII[{[P4o@3oOOoOOO&2@.2EL@@+=OX h{{)QKKhP'_E $o@@+=o2@d54L5hRKh#sg #4+S5hEI)gs.+.+oo=OooLUe=@CL4f4+hL@.o.o@@o@oeO=O3L3=o=d3=d]T3oCLd=4wuwwAUA>>;uttw;wDTTVyVu>>wd2do54EY4@o+=+@24u&ww>%O>y%%>yVwwu>>wuwwyFuVUUVyDyyyADUA;8>>wtyyyww88wwwwu8ytwtwx8uu>ywyywwuu>-wuwwwwwwww;>w>>txV,FV%Vy>yFFuw>w>yV8yDiwewyDoeeeoe3=Oh[s5`CTJUdLC4d@dF+iYST^CULCSTTd4EEefLSgh#KPWjR{[kRKWPRhWWKIPQWWRgI`))`)`QsR)W`'RQW'W`)`{{P''PQkW'$$gW)#R}RsK)``}`g))S#@fS+o@O*%O%%%OOOOOooooooo.ooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooOOOOOOOOOOOOO%%%OOOOOOOOOOOooooooooooooooooooooooooooooooooooooo%%%&@.h[`PKRIgfYCS_Esf5@hSSYJKRYKKP``}_ .22ooOO%OO&OOOo+@sRg.@oO.5.$LWWWhIKh)'`Rh2oooofEE4LKLIshP#WhK5LSS.sLSYW`ULW@+ooodFLLLL+FD.fSf5K)ffs5wu8r8;>wuwuuVy>&&yVwVV>uDDu>uwe3O=+Doo][S@+42EY@C2uOw&%w%VV>>8ww6tywyDDFxyuuVAVuwuVywuVAnww6>wuytutuutttuwtwtwwytZuyt;w>>>yywwyyw>wwwwwwww>y>8VVw>dO%Fd&=3Owww=de3>SCe==e=2O@F25CLo33E^fff^YE^sE^^YU=oL3ee3&&3ew==w=@oooo......ooo...oooooo@.o #gg.Wf.>FOLUTFDEDLdFwUedEFj[RKS45O%O3eCe+o24d4+LDeffUUS^TDDYLTJhEE)RRKW)WRKkgPsSSK)^KPWKRIk)jIIkIhgIRRW['kRW~R)Wg[{)}'RgIgkWWWK[')gW~'[{{[))RX..o+oo==ooOO%OOOOOOooooooooooooooooooooooooooooooooooooooooo...oooooooooooooooooooooooooooooooooooooooooooooOOOOOOOOOOO%%%%%OOOOOOOOOOOooooooooooooooooooooooooooooooooooooo%%&=o.$[hK#PghsP)SS4WKsSP#shf2YY$E'Rh# $$.oO=OO%&O%O&%=EEg)E.2O>o+o@5o5^{{`KY)W[{R$++ooSLCffKgsKPhEPY)YSSLLshsQW^]``YLYSETCL=f4+2ph4S)Y#5fgLYUDD/EL^LoedeS=3a3C4CU^TFFHCL+5Ss+.@O%OOO-;-rtxtwwww686;>wwwywwwwwwyVuyywudyCed>3eO355YERWWS@oSER^E)Fwu-%>%yt8t8;--rw>yDDVwwwxxw>uywnt66wttxxytttuw8tttyyytttwnt8uwVwwywyyunwy8wAAw;wwwwwwuuwu;tVw>%dD3eFF>3DC=3FEU3SDiOFfED@C2+25S^fJfshpS__SY^S`Lg45S+=eDyu>&>3323=@ooooo....ooooo..ooooooooo@.#$WEPs.oo2oooooooo...........oooooo................................................................................", "................................................................................................ooooooooooooooooooooooooooooooooooooooooooooooooooooooooo=oo68txxytuw&68868wtuutwwuyVuCAe3dd=oO3Ce=32d@KS^sS2.hE^PY`)WVu&&&%-;>>w--w66y88yu>8nZuwyyuuVuwtnnttytttttttttyxxyyttw6twwxwtuwywuy>y%uuwuw>uwwwwwwuuwwww;-wuSLe3eC33]_LdCUS3333iSe^)Uf@4s@Ss5.#@f@L^f@@Y)L<@CoCS+Ou&w>&===23OOooooo.ooooooOO.ooooOOOo+o.@ $[EW[@@@@+ooooo..............ooooo................................................................................", "................................................................................................oooooooooooooooooooooooooooooooooooooooooooooooo..ooooooOOoooo+<=+oL^.@LSYf=dOu/e3Ce>=o&dduOywVUKQ[#2SLEUTE3UYdLs5ILE[L+EYLFTf3SCYJSLKSLLfSLIsSWQgRIKgghYIgSPggKjk~R~)RRIWIW[WhW~KI[)RQRPI`R}{~~~Qsh~{'``[[{[` .@+ooOOOOooo++o.OOOooooooooooooooooooooooooooooooooooooooooooooo.....oooooooooooooooooooooooooooooooooooooooooooOOOOOOO%OO%%%%%%OOOOOOOOOOOooooooooooooooooooooooooooooooooooooo%OOo@#hWI#Wg5KfEShgR){`kssssPS$I)C.@.+@.oo2COO-%OO*O%%o$IW|I =u-OOO%1Ooo..ShQP#WhPK{_2o=@foXIPQ#KsLh@.<<+o5L5JsII#]Ysf$X5#S$SEL$adeS2SKLff4dFduyd3D3eSSdeU2=af^Syuw>wDLfdKKSK^YsO%%%%;6868866uw>88wwwtttwnuwyVAwCd3ed=eEEETD324+E^5LE_WS)^4^)25s&&O&=%&%O%>--86tyyyyu8uVuwwuyyuwtttxxtttrrrttvxxtyxyttttx68wZDx8yuyuuZ>Vyyw>w6wywwwwuuuuuwy>wVwwSo3C=223CF2=3e+2i]^d5d2gL+^_^Ip55PssILL...4Ef.S5+^Fo3yuu>>ww3=@@oooooooooooOOOOOooooOOOOO>22e3e=>w%OuwwwyyXKKXp4f=AVU2Cfo2gS)W`{)ffCpf2FSfCSShLLahSLYSIL5QKWWgPYKssPh^WKWIWR~QRIPR!P[{)R~W{}W}{)W'g)`s)WjWjgQ'Q''!`{{WW) j=+oo&%Ow&>%ooo.@oooooooooooooooooooooooooooooooooooooooooooooooo.....oooooooooooooooooooooooooooooooooooooooooooOOOOOO%&OO%%%%%%OOOOOOOOOOOoooooooooooooooooooooooooooooooooooooO%&o.XIWhsRhgY5RW~RP`QkQ#Ih #$K{Lo2@4.@S)UC)E%%woO%%-w=.W##K#2O%-:6OOO3=5@XXKKW! ._^o@fY5sggh PsXss@@@S@3Tfs#5gS5sspERS#sfp_[)Q2FLSLS@f5edddwyDE3DFU^C4f3U5dUd4VuuAAdfFLPE^h$X OOOOO%-;-68;;wuw668wutttwVuuuuVwe==e==E{DLT)^^^fSKShLfs.S4@@2@@#2==@oOoOu&>,>>>n>wyytwwwwxVwuVn8xvr88rtttttttttvtyytuwutxwttZDntywyyVUFTDy>wyyyuwwuuuuwwtwu>DD;US4d+dF=eSC@fUDo+D[^2S)f@.g{[RRKI_)g_'K +@f52oh4US^f23OOw>wuw>@ooooooooooooOOOO%%oooOOOOOOoo2.K' I` s.2oo........................................................................................oooooooooooooooo", "................................................................................................oooooooooooooooooooooooooooooooooooooooooooooooo..oooooooo=ooo<4DSo5L^R@5f_]SL^&3323==duCUwwuwuTKsQI)Y2=3O3=LY^)R)'g){)2f55df4LCL5hSSJhSLRKs54Y#jRWRK#gK^YsRPgIgQ~PR)PI`QP``KPW)[WIQRIPKWR#R)IP'!j`'W')))~'~`sX ooowOO>OOOoo@o.@ooooooooooooooooooooooooooooooooOOOOoooooooooooo.....oooooooooooooooooooooooooooooooooooooooooooOOOOOO&;O%%%%%%%OOOOOOOOOOOooooooooooooooooooooooooooooooooooooo%Ooo@h''RKKK$RSajX$gh!~`)PWKKW{)o>>68rrrtwVuyu>iu3dDCo=SDd3of4S)Ef+..5+.5..42$@s+2o3oo=+CTu*uAV>uwutuuyyuxwwyu>8VrtttxnxwttvvvxxxttttwwwtwtZtuxutV88;-V>DDwwZywuuwuuytuwwwwu>Dy-[_o<224=eJL5fLC4ELfpf4g4$.`YSI#XP)WPhX .X@.YTfhdo@o@o2u&>&>>&OoO+ooooooooooOOOO%%oooOOO%%%&o..$EWI'$Ih.+....... ................................................................................oooooooooooooooo", "............................................oooo................................................oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo@+sWPsKQ)R$g[`SLiF$+@3OrxlD^8>e42LLDEL/=Lw3%^_f4pESSL2@ES+SYSfLSJdLUfDSPSgsKfh^)KWIQ{{)PIRRWWIghjhPRKWWPR~KWI)RI){[ghIPKQWWs#`Wg^gX'RW}{{hkQ!}g$..OOOOOOOOooooooooooooooooooooooooOOOOOOOOooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooOOOOO%&&%%OOO%%&So==ooo=OOOOOoooooooooooooooooooooooooooooooooooo@o.o)|R#ghQjgIWDSgsK`)~WQ'Q!!}~+..SS.4of4oOOO%O%-%OO=oL)`^S@o+o;%%%>&%Oo@.@ IWg)fo=OO&&%ef)pXKjPIh#+o@oo24RYsKsedS4ef++fS2fp4L4LYSULFLddeDedCiwshLdee=dFDdf5h^LDLffdy>ui,yy4CYL_SC_D^Ef2PLfCO32@3522<==,ww6>;--->,wd>eOFe3OuyyyuutyytrrttxxttttttttutyyyyuwyyyuuyyyVuunnutVytw>>w>%%6ynFGA>uA%xntrtw,ee4SW^DwuAuwd33^)TL22EHFSd+5s@gLhEE[)RCfC2.$.X$R_f2=oOooXggWP)LE5oooooo.... ..........................................oooooo................oooooo..........................", "............................................oooo................................................oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo@@ h)gXI'[RsPPCdACf2dSu6-779-&e@f@U^=OC&TDD3SdYLpS+SL@S[_@2s+2DCSfCS5fhEPSYg^RRh@)W)[[R))gI))P~`}[}WIIQIW)kWkIWRW)WRkR'g)Ij#KsRK5g)Ws}{{RQR)|K ...OOOOOOOOooooooooooooooooooooooooOOOOOOOOooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooOOOOOO%&%OOO%&>3e3DC+=oooooooooOooooooooooooooooooooooooooooooooo@5+4[{sskKW')RRYKKg`'`R#!IhsQ~'^@@E^+o=OOoO%O&>-%%%OOoef4+ooooo%%>&OO&@<.s$ I'WS@o=OO&&=oLL5s#kP###.h+@3o.hEKgK42dLSoYEffD+2TffSSW^T^SSddFF&=DTSSSY@FY3Di4U424LLLH=dDCAwOAFw>w&wA>yuwOwuw,3i=+UTAYUS_)SES+OVdFFde543=3uytw;;;;;>>>u>=33>weuuyyytttttrrttvvttttttttutuuuuuuyyyuwutuVVyyytyyuyuwwww>>6>-wADFy&VtnA;Auu>3CfR5t;uVuudeOUEhS4h^Ld4@452I)S^KR``@o4+@@.$ P)W+oo=oo=o3iTd=22+.o+..&OOOOOOooooooooo.ooOO-%%%8o+.RRjhRLf.++oooo.... ..........................................oooooo................oooooo..........................", "oooooooooooooooo............................oooo................................................oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo.$``I)[`RX 2e+Ve4=C>O8tv8t>ye+SYCSeeCF&DTe=+LT.Sf5S@QW)f2s5fD3CSTLFL5sSWRKWsSS^ShPKKhPRPPWPsP)[{)!)R~IWW)IKR`)sK#R!s``W'Qs)hg#X))hW'~RWI)[)$.+5@OOOOOOOOooooooooooooooooooooooooOOOOOOOOooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooOOOOOO%%%OOOO&>wo=DeooO+oooooooOoooooooooooooooooooooooooooooooo@oo..E'IIIPRk~RhPPgj!#IIWXgQI'[)Dooo@@ooOO%OOOO%6%%%OOoooo=oo4oo&OO,Oo=...ssh`)hoo@=OO&O=o2.R|KgPJK)f.+oo2PL``PKPL@DL2LLLfCSfSfSYfWYYY=CdHHwutr6;>>6>>>>O>>De3eeyyyyytttttttttvtttttttttttuuuuyyVZZxyyyyxVxuwyyuuyyuwwww6>>-;wnVwA^u,Dw8uF,d+LY+%>uwwedeDF2fL+S@YH+@g4SSIWI4EgS@+o@@.$@@$4.o+o=Oooo@3F+o+5fshR#.%%OOOOoooooooooo@oooOOOO,o@.XhRW)[h.4oooooo...............................................oooooo................oooooo..........................", "oooooooooooooooo...........................ooooo................................................oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo@Xs{{)WW#)h@4C+e3eUy>yu%>u&=o2CS2o&ey>wddU+S5Sho.ohogL^L^EDLTFSFTD34fYYKs)|WfhgLKjsQgsgg)sgW~!RIWkWRIR''WK![{Q~[`IPgIRh')WPgK#K[)~gRjgR W)pooooOOOOOOOOOooooooooooooooooooooooooOOOOOOOOooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooOOO%%OOO%%OOO%%&+oO=O+oO=+OOOooOoooooooooooooooooooooooooooooooo=@@2+.SIXKR#IPPksIIhI`~R# K)'['.@oO>-%&O&&@o=@<@oOo&Ow3Y^__KsPW`[PY +oO%O&&OOCToK^PQII){)$@++2gsRWKWLSS4SSS2fLdY^2dSg2LfS24fDTidDFi4LETfLD=LC3C3deeY+h^`ELTSE^35@.5.@ooOOO%,w>Vyiu,=O&>%U_UeCdw=wC3>o+43e3weUL5ff+4+EEoCC4dd=3wwtrr8wwwwwwwwO>wTAwy3yyyuwutytttttttrtttrrtttttttyyyyVAAVyynVtyyyyyytyyyuw8>>>>>8>;->=eLFD>nuuw=eo)Tf6Vx>wyeiC<5osSKSHf^S^[^KhSfP^E@52SC.25.#@.@.4oooOO=&==+f2^PSL)gXO&OOOOoOOOoooooo@o=o=oO@oT5S)sW)[P2..5ooooo...............................................oooooo................oooooo..........oooooooooooooooo", "oooooooooooooooo..........................oooooo................................................oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo.@ `{`'[YP552LiOVwDAy>>=w=D32D)DTCF>3yV=LdC4.L4#sKPf.Ss.4LS4ddLDEUY^QSgYSK_`Eh$hWhKPKsssPY)Rss~PPQ`WWP`))Ik`~hW`'PhPWK)RPWsKPK)hgXI`k!j$WLo3=O%;OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOooooooooooooooooooooooooooooooooooooooooooooooooooooooooOOOOOOOOOOOOOOOOOO%%%OOOOOOOOOOOOo=Oo@U`3=OOOooOoooooooooooooooooooooooooooooooooooo.@LKKRg#ghXKPQ'W)'IKRKK)'{LoOoo3=oOooOOOOOOOO&OOOoo+o@oooO=O&o<]{'WWWR)~sX 5+oooO%%O%@@E)h$X))I`^.f2o@@.h)RKRf'K4f)Yoff2_T4dfKPf5op@pdpYSECU5SYSLUfCiwe=SCCD^o^YUTDT44DL....ooooOoO,%yC3o<=eeeF3O^EF>3=UV>F_)S=4GA>VwuyyyuutttttttttrttrrrrttuttyyyyyuxVyutyyyuyZZyuyytwwuww>>;;>8>>63==ST,CeC%%OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOooooooooooooooooooooooooooooooooooooooooooooooooooooooooOOOOOOOOOOOOOOOOOOOOOOO%OOO%%%OOo=OOOOoo=OooOOooooooooooooooooooooooooooooooooooo@oo2oa_``RRRIW'RRRRQ`RjKP)2o3ooooo2ooo222o5o.f.f55YfCf2C54^_DoSo3=.XXhR~`['..3OoOO%%OO%O=+o@PEE#$5..5@SCo.5K)PsRK ssKSWY542+4U2@$I^))^EgSESULTOhS4TETE_EUyVd&=eSLE)df2fC4o2EE^K5$o..o@ooT^T(T=fD2=DeYT+oed232=o@d3C3eww&eeedOO&OOOOOOOOOO+@oh_RhPW)W KWI)S$..+@.oooo.............................................ooooooo................ooooooo.........oooooooooooooooo", "oooooooooooooooo.......................ooooooooo................................oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo.+.@+[`$sgW[K@ohZnODDSLh@STL43eFw>FUVF^d=eC`[K22h#.LSafFo3eCLdDYdLLSLhsIKgP_ghYIXPWRgP)h5.IY#sPEP~QI~#k`!~)IgKPI~RKgQ~)QgQP RRPPkPI~IR[[22o&%O%-OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOooooooooooooooooooooooooooooooooooooooooooooooooooooooOOOOOOOOOOOOOOOOOOOOOOOO%%OOOOOOOOoOooOoo==OoOOOoooooooooooooooooooooooooooooooooo@o=oo=+o.2. Y[WhI`}W)PR`W#@$.oo+.+@+LD^[]^)RIWsPgK`Y^WSLYLS_[^Y&CC.$X X)'So+O&O&OO%&OO%Oo@+.@pI$ @@D+s4@5@sYg5hSY5s5L_LTLf22pS2R_KS#)E$g2DUSdD@gPf4CfLAFH3d3CeLSESLd5SdLT.Lp.fWEYLLE^)EE^YDff4deDL+2ofY22oUUFe3d3OwO,&u&LUOi_FVe3FF>yyuwwrxcvrttxxxxvtrrrwtt6xwwwwwwutytrrrrtttrrrrrutytuwwwuyuyytyxytwuyuyVVxtuuyyutnyyyuwyyuL_S24^D2LE[efCeexw>ww3CYLf5XP)g#sssI)}KgKYKh`WP{_E_(sfDffL@=4=+oOO%&o@5YPY)js)IgT%O>OO>OOOOOOOOOOo5.){[W~`R~#'Ps_o..+..@oooooo..oooooooooooooooooooooooooooooooo...ooooooooooooo................ooooooooooooo...oooooooooooooooo", "oooooooooooooooo......................oooooooooo................................oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo.o.o5hIE.hK_[K@2Zw&=2SYQ_ES@3=>3&%uFCDY4E=5LfSSo@$.YY2D<2=Sf3CCLSU4h^EPIR)KIKhW_WRK))PWKELS^ggIWWW)WRIkR~{'IPWsgRKKRW{WKhIWP)'WkRIg~Q!gWfoo=*OOOOOOOOOOOOOOOOOOO%%%%%%%%%%%%%%%%OOOOOOOOooooooooooooooooooooooooooooooooooooooooooooooooOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOoooooooooooooooooooooooooooooooooooooooooooooooooo$$ s[PR)Ws#$ $X .@@...@#s^E)W`)SRIPYIRKW`PPPKgKKPshK)X;&Oo.XXX .ooOO%%OOOOOOOOOOOooooo@@@+@.o+Y@o@@..YR$5KgPY$.ofL4=DDRK@.X$WWS_YLT5d4#45U)STTHe`^STCSsf+^fCUfdSSEfgW4 SsgYE^Dy8wxvrrwtwwt;Ztv68rrrrrtwwuuuuttttrww8wwr8666wtyZxyyywwuyyyxyyyywwtwuUU8uutttyyyyxywtZAZ2YLd)fYU^Sf4eeC3>FD>=OaSS$5#W[KP$`Yh`)hggIWR)hgRShSLSE]fooooOOOO-O%&oo@5gK`#|K#gC=O=OO=OOO%=%O>O+o@)'QPh''P['[))f.+@.@.ooooooooooooooooooooooooooooooooooooooooooooooooooooooooo................oooooooooooooooooooooooooooooooo", "oooooooooooooooo.....................ooooooooooo................................oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo.o@@sK5Y)g^W@oeS23+LpU{)<=d>==AAyU343FLS4@45ff2K`@443@3e=OYT)C4pffSsKShKsPWW'{~kI)EXsShLSPh)^R)W)'R)RP`{~!)~PP{[`~kgK|R~Q`{'Q[`W'RKWQ#)DooO=%OOOOOOOOOOOOOOOOO%%%%%%%%%%%%%%%%OOOOOOOOooooooooooooooooooooooooooooooooooooooooooooooooOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOoooooooooooooooooooooooooooooooooooooooooooooOOO3oo.$$ K_5@+.+.@..X $hIRI^WhSsKKsIhhQP)RPRPPIRgKPgshIj$%%&+@o..oooO%%%-OOOOOOOOOOOOoooo@o...+<+@o2+@+.sf..2#ps.+oo@2YF=$@@#.XKIL(EfdCETS5oLEOHSCCDECLdD$KLh4CCFfDJf(_))^s5$.2o<=4Yf3ofp=eCLDofY+LCd4+3>o4SFw&>u8wuuuueiyydVVytywxuu6;xVZxtZtZxxnxtw8rtxuuuuww88www8889w8wrttrwwtwwwwwwuyyyyyyyyyyVy>yVwuutttyyyyyywuVAV3C==2S)_So3CdFL3iCdu,,888wwwwweyyyyuwuyuAuww>e3uw>xw>88tyxxxtrwwutttttyttrrrrttrtvxxtw8w8wwuuuyyytuutyyytyy6;wyuuuuuttttyywuyVxei=d@DD=3LFdd3=L1ASd3d^E5g))W)gs'RX#PKI`WKIP)KWgsRSLSfo3OOOOOOOO%%&Ooo.#Y)shK'R)Uo&Oo+2ye3%33dU)E$^D@L/O%>Ce==3u8;wwwwwuuyyuwww68wwywO=435ww>y>&uw>wtxxt8>wwutyyxnttttttvxxxttttttttutyyyyuuuwuuuttw>wywwywwwwuuuuuyywwtyy>Cy=,ee+^YoLK+g2LUS2LLE)LpSR^5$4s4Di&,iuu,uVuu,%OSLLJhC+C^Dy%=33uuwwuttttyyiiyw>8utwwOOe=2fo+eeyu>>yw>>>6wwurwwwwwwwwwwrrrrttxvrrrtyxtttuuuuw8wwwwwwwuu66tu6>wwwwwwwwuyyuwwuunZy>DCo<2DDDf4OC2.fS+SYKYfpRKfLQ'~RRKYPfELPS^'Kh_PKS.@+@OOOOOOOO%%%%<@$P'P)]))_Lo4o+o.+ESf# PWP`}){'`{`WW')} YP$oo+ooo....oooooooooooooooooooooooooooooooooooooooooooooooooo........................ooooooooooooOOOOOOOOOOOOOOOO", "oooooooooooooooooooooooooooooooooooooooooooooooo................ooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo+ooo@o.f)^Lhgg_~g[J$+duu&_VODeC)^UooSE4SY=de%uV^eCuy,yA3yDPPKg#saJLSWPK)WgWIhhKg$ KsXK^W[IIgQ)IPgg~Qk)W}`WQKR's#kW)}}'Q#IkgWW`)KhR_)YS@O>3>%OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOoooooooooooooooooooooooooooooooooooooooooooooooOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOoooooooooooooooooooooooooooooooooooooooo.oooOOOO&OO+..gSg54+2a52LLEYfSL2Ef+s4S4FfTFd3C^(WSCCSFD)DSYLIY)S+@oOOO%--%%%OOOo%%%%%OOOOOOOOOOOOOOOO==Oo&oO&O&O&OO&OO=o+@@4D^Y$=oo<.pIL^f+dUVAAwuwE_DyU=i4U^5fSLKS5JYLULES4hsgs_L.4fOdiytOtn>u8tyd>e22f5+EDCFO8+=we3;>ur98wuuuuw>;8tytyU=2=5f$$CeV3>,>>&&;>wtuw>>wwwwwtuwrrrrttrrrttttytyyuwww>>>wwwww8>wuw>8w>888wwwwwwuyuwwwwrrtV&%Od@f@4EY&,LLpJSY)RLRYEYLY_WIW)KYSYLLfKRWEgPsY_o@2oOOOOOOOO-%%&=@2PEhSP@5ooi@=+.s+sWR|)`'g'`{[I[^__`R+Y@+..=oo@@..o..oooooooooooooooooooooooooooooooooooooooooooooooooo........................ooooooooooooOOOOOOOOOOOOOOOO", "oooooooooooooooooooooooooooooooooooooooooooooooo................oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooOooO@oo@.sP'{{[~)[|g_dwV%TT>2C4e==Y54TTe^2=>>xFd>dA>yyywE)QWh_Ih+sSKWIYIPIWRhJhgh#IhKK)sI)Kg#~KIQK`RhWsPRWPR~)))`~QPI)kQ))I`'RQPW[S.@o>>OO%OO%%OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOoooooooooooooooooooooooooooooooooooooooooooooooOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOoooooooooooooooooooooooooooooooooooooooo.oooOOO%:%OoY)fRhSsgLaLUeFCCSd2df4S=@DddVDDVADD;LF3,y,V^^Ti2L5 @@oOO%----%%Oooo%%%%%OOOOOOOOOOO>OOO%OoO,OO&3OOO-O&&O%&oOoo+.4..o1@@2)K5LJLFFVZtV,uFTUyLU=e=TLS5YYEShY)^TYEfL)sfhfR<=LYTo>w668wwtnA=F^^Pg$Y3CeCV>w&&>wuuw>&>wwutyxturrrrttrrtttttttyyuuuuw>68wwwww>-ww;>uwwwwwwwwwwuytwwwwFxrD,e-n%yy=dhER)Rhaf+hKS`RhgPY)hsWWWsKPIhhKgRhkWhPgKWRPKIQkk`WP'{{}~Iskkk~[R)R~k''(E.<3&%;%%6%O%OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOoooooooooooooooooooooooooooooooooooooooooooooooOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOoooooooooooooooooooooooooooooooooooooooo.oooOO%%O%dE`YPSW)|5#+C+=Cd1idedL3dCCeDU/FDyytnnTDuViATTAH8ywTUo@4hP)SP4YY42@JLE4(EhRYL_Y4&u%n-nZDn-t6>VD=YLfh4+3>y-;3==>>;>wt98666>&tttr86tV>3D_(P''EOdyDF%ww>&->8ww>>wwwwwuww8888wrtttrrttt8uuwwuuwww868wwuV->u>>u>wwwwwwwwwuyyw8wu9xvnt,3O++32f3,=X@.s$$posg.sSs52R`RWKgYgPYsR`X5PKggSPDDOOOOOOOOO-O;Oo+.. ..5oooC4o2^{WP)X))RKh'k)hhP.Xo@@<@2+.+.o=@ooo@...oooooOoooooooooooooooooooooooooooooooooooOoooooooo........................ooooooooooooOOOOOOOOOOOOOOOO", "oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo@o@+oo4L'``YS)S2F/TA>yZ/{{[hYg222oee@3=33>dTu>TD33@S^({KSL+fhSfSsPKPPWKgI$sW'QgI~jKPR))PW#K)'YgK[{)'RP'{{W!!IR}[kWRRPK^`>&%O%&%%%%%%%%%%OOOOOOOOOOOOOOOOOoo=OoO=OOOoooOoooooooooooooooooooooooooooooooooooooooooooooooooOOOOOOOOOOOOOOOO%%%%%%%OOOOOOOOOOOOOOOOOOOOOOOOOooooooooooooooooooooooooooOooo+@oo@oo@@oooooOOOOOwOO=oo25Y[Q###XLEe=oe33yV&VuyUUtxVVyyVAGCFy3CVdRLf]LFFyF`edJSE)X X X..+o=oOOo=O--%OOOoo@.o.+.+@+=o@@oOoOO%OOO&%--%%O%%%O>O&%%%%Oo@ RKW{^38AvxrrtxtwrcxwVUE^KP`hVy>ETVADF^CELfTEXI#RPJ@3>uy>Gni,&DUy;yVyD>uyyt;w6>->w>;uu>&&>>wea14ee1O11@SL+sQ)K5s$@4eAu8688;6t>=&>3www>>wuutttwutyyyyyuuuuwwwwwwuw6>>6w8>>>8www8>>>8wwwwuuwwwutww,333>o33OeV&>=e=3&OunwVOAeCoDSI^KWKWYs5KKYQgSI5_Lg^S.oOo&%O>%O&oO=o5)^soooO>O s'{WPI IRs)^S@@fYYf@++ooooo++ooooooo.......ooooooooooooooooooooooooooooooooooooOOOOOooooo......................oooooooooooooooooooooooooooooooo", "oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo@+@o=d J[K 5LTeeo,VuZTL['L_Sg2Ff=2+=Ude3Y_+=^YofJJLYgSSLaSW2LSgJP)`WWRh~I!)hPKghIgRRWhRKIKWIW^)_WPjKRQ)gI)k)'''PR`)gK.>%OO%%%O%%%%%%%%OOOOOOOOOOOOOOOOOOoooOoooooOOOooooooooooooooooooooooooooooooooooooooooooooooooooOOOOOOOOOOOOOOOO%%%%%%OOOOOOOOOOOOOOOOOOOOOOOOOOoooooooooooooooooooooooOOoo++ooo444+ooo@oooOOOOO&O>OO2@TYL)h$$#sCd3=Sedee>DuyAyTZAAVyyyVuieyCed>YEL^deCydCd2F^4SLK$ @+2.@o@3OooO%%%OOOoooo2oo.o.oo3oo=o=&OO&%O%%%%-;OOOOO&;O%O%O=+.sRhsK+eA>vtrr6xAZxtttueCRE`[gyiVFuyDDUHeCFLY^sP5 Sp3eA,,%>,,i>uyuw>>yi-wuww;8>w>->>>w;&>,,>>333di33uSLfC2JYhIYRf+f=VDwyt>6ynuw3>>33wuuuuuutyyyyyyyyyyuuuuuuww>wwww88w>>>>>>66w86wwuuuwwwwwwww86>,wuewOoe3OyDDULFduuy&y&AwCULD)hfP)sgYYKsK@IKKKPSShYS5+=oOOO%-%=ooooC)Ef=2OO%OP)'`sK{KK)KS24$.o<5ooooooooO+=+Oooooo.......ooooooooooooooooooooooooooooooooooooOOOOOooooo......................oooooooooooooooooooooooooooooooo", "ooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo@@oo@# [{f@E{F^_D&wwAX5[LfS+E^DoU/=CCoS_2+eDTeT)(EPQXCffYS$PhKP`{{{WgKPRKKsWIRPP#PKshgKK#ghKg$IKIP`R!I'}QWIj!PKs){L.+&%OO%%%O%%%%%%%%OOOOOOOOOOOOOOOOo+ooOOo==OoOOooOoooooooooooooooooooooooooooooooooooooooooooooooOOOOOOOOOOOOOOOOO%%%%%%OOOOOOOOOOOOOOOOOOOOOOOOOOooooooooooooooooooooooOOOOooooC^Dd=@@@oooOOOOOOOO%OOo@=Lh.hPWPsgD2d3F=eeuAFy%FFDAAAVyyyydyUVFFeFSYFe4ydyA3d32U4ahL)Y([EFSoooo==o%%%%OOoo2oo5oL^LLu>&wy>;yUFAu---;>uw-;>>;>>ww3=>3eeCu=3yDEEdE5#gQs)E ^)oo,yy>;wywuuuwwwwuyyuwwutxyyyyytuuuuuuuuww>wwww866>>>666>>wwwwutuuwwwwwwwwwwwwww333==3Vd>VCeiwwFFyiwTTOSFTYSsgRSghgQfS))KhsKfggsL2.oOO>&O%O%*O@oo=2ooOoO=O#'K[R$PK5Pg$.@@.ooo@@o@+oooO==+Oooooo.......ooooooooooooooooooooooooooooooooooooOOOOOooooo......oooooooooooooooooooooooooooooooooooooooooooooooo", "ooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo@@@.XE[P44_]]^DCuGV5gfP)LoL2fdCDd3Y)Rffo5Y__S)YsXhgU)T^[JELsR'[{)IR^W[WW[RRRW'KKEK[PPWWW)PgRP[))W'hk`)PPR~)s))KK@2o%%OO%%%O%%%%%%%%OOOOOOOOOOOOOOOOoOoo=oOLe=oOOoo+oooooooooooooooooooooooooooooooooooooooooooooOOOOOOOOOOOOOOOOOOO%%%%%OOOOOOOOOOOOOOOOOOOOOOOOOOOoooooooooooooooooooooOOOO*OOOo5EF3oo@@ooOOOOOOOOO3o@=SJLSS#+K)PSCeFyo=>wuuuywyUwVnxyyyyydi^UDCdDede=ydyV3yyA3ad<&>wwu>>ww6ww>6yu>>>;>Vyuw,>>wdyy=&uwe4Sf)LLpIKsP_)sfTedVVu,wiwtyuwwwuyuuwwwutuuuuuuuuuuuuuuwwwwww8>>>688www88wwwwwww6ww8wwww8wwww>>===O=FEL;ie&i,OyywwwD^fTfSLLSgLfffKfSL)SffKgg^)RLSfoooO&&8OOOOoOOoooO@oO&O#hg)g ^..@@@+@.@+oo@+oooOOOOOOOoOoooo.......ooooooooooooooooooooooooooooooooooooOOoooooooo......oooooooooooooooooooooooooooooooooooooooooooooooo", "oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo@@+.2SS.5<^d2oue3F+f.^{D4)aFSeeT3e]Lf4SaaLS5IKWWK)SSC5YfsE)KKgsRRhW)EWKQPsISPsK)W[PIkPhKPKghWK!jWk)RIR~~'I){_@@OO>%%OO%%OO%%%%%%%%OOOOOOOOOOOOOOOOOOoO=o&Ly=oOOoo&ooooooooooooooooooooooooooooooooooooooooooooOOOOOOOOOOOOOOOOOOOO%%%%%OOOOOOOOOOOOOOOOOOOOOOOOOOOooooooooooooooooooooOOOOO&Oo=ooo+OOOooo=OOOOOOOO=o=o@UFL5UhSS^s.o%CDOCuuy%A>UwVwyttyyxyywVDGAw_^33CVuuuVywiueDdCLSDSLU2O=C^T=OOO%%%OOOooD]LCe>3yyAy^EO&O*Oo3=oo>%O>3O@+oo@o@o=oo. W{hR`KX5o+e3y3wwyxxvrw6Ay2>>>>>>->w-wuuuyw,yAdwwww3ww3w&>yw>UFDSsKWK#hWW sEL4eiieu33>wttwwwwwwwwuuuuyyyyyyyyuutttuuutuw6>>>>ww8>>6www8>>8ww8ww68www666>>>===OOCDFFAVFeFi&&O&iu3OOOOO==@==%O%%OX SYRWE@o.oo@=ooooooooooOOOOOOOOOooooo.....ooooooooooooooooooooooooooooooooooooooooooooooo......oooooooooooooooooooooooooooooooooooooooooooooooo", "oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo@ooooo.2@f)2o4oCCVd=CF5fffE2^4doCDAVy3u^VwDywnyyyyxnyyVyuVyV_^eeAVwVVuAtVwuDVLTF/UVeOEUydeOoOOOOOOoOO@L`3=FVuuyuyVFDFCOy&%OwooO&=ooo@+@+4.<@oO@ '{W~`$gp3deFD=uyyw8rvtx;uC4C_EUeSU=UEofef4<^P5fShYfYfeed]UOSL3>wwww;%&>>>w>>VywuunVyyFVuwuyew>,wyw,u33e^L5h#KQkKWRhWg#244<4Cd+>wtrrtr68wutyyuuyytuuuuuyyyyyyytuw8>68w88>>;;>>6>>>>8wuuww88www8886>&&&==FLe&dywiweeyu>uOwi=C=LL+CYCC+SfffSLp_E4K'KSI''WKS4<==w%%O%&OOOOOOOOO%&%.+W`R]K.+ooooooOo@&OOOOOOOO%%%%%OOoooo.....oooooooooooooooooooooooooooooooooooooooooooooooo.....oooooooooooooooooooooooooooooooooooooooooooooooo", "ooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo@oooo@=oo=edCd3OoeF3Va.4fEd^^^e+e4eVoS_^5d5+5SLYYQhJp+Y_52ffg$PR'Wg)#R `g#Kg#)R5SPsPIK~QgjgR)gKR~)~Q!)I'KPRQKR @=O%7-O%%%%%%%%%%%%%%%OOOOOOOOOOOOOOOOOOOoO&OooOOOOOOoooooooooooooooooooooooooooooooooooooooooooOOOOOOOOOOOOOOOOOOOOOO%OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOooooooooooooooooooOOOOOOO%&&OoooOOoo%=*OOOOOO%%%o=ofJ=LCLYd3=OeCDyVFA>ywy_uV6nVyyynnnxyyVuAViVywiyuwyVAt>uFDywwu>y%>VFDyAeyFdO=3*%OOoO@@3LwdwuVyV>yywwyT&LV33LeOO=oodLgssPEf5ooa5)[Wk#g#.T^VFLC3yyu6yFFvZZw>w3dde>i(3wyyynyyAyuuydy3>uwyw>w==>>;---;;;;>>wwww68ww868wttw>&&==dUD>VDuV3CeuVu,udu=e3o4Lh+4LLff+o4dfLS2U)R5JPKWR^`LoooOO%%%OO%&;&>%O%%%%2.^[_Looooo=OooOOOOOOOOOOO%%%%%%OOoooo....ooooooooooooooooooooooooooooooooooooooooooooooooo.....oooooooooooooooooooooooooooooooooooooooooooooooo", "oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo+ooo@oo@OoO==C=+dSOO4d3d+e4=SeSFD=3=UF3e25dFSdC=4dLE4TSh4Sh4SJffSW`PgP gKsWsRPRSgWgssKQKKWQgh)g)IXIP''WKQPWW!I!K)@+o>%-7O%%%%%%%%%%%%%%%OOOOOOOOOOOOOOOOOoO=OoO&OOOooOOOoooooooooooooooooooooooooooooooooooooooooOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOoooooooooooooooooOOOOOO%>OOOOOOooOOooO%OOOOO%%%%@o+oe+F3=&O3D3Au>>&Vy;VVF-xVZyVyyynnxyyywFuwVyyVxVxuF6ZDFwGDwyyxxtZxnn>y>yudeeU^33=OOOOOwCuyyArvty6yxwywwF3CFL33uCeS_[)PIEYSLL2SE_)}WWK52CTy>>e3wuuVU/G;wxxywi*VwLd_L3Cs.L))[E.S44Sp2)EYfS44fffpUD3O3e3&>w&>%,T^6VVwwuuuyyyiyu33t>8>,w=%;;;;;----;>8ww8>>8ww>>6wwww>>>weTSCVdyuyeUDVAuuyuwVC4SLTFiSTf+CD@42+2eDULL5sRSKP^{^.Cee>3V>yy&VYdfFaSL42fS5RWg)IP)RKQKIsghKhKRgK'h'gIshhW{WRWW)KKRQ`)RR'# j`W @O%;--%%%%%%%%%%%%%%%%OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOooooooooooooooooooooooooooooooooooooooooOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOoooooooooooooooooooooooooooooooooooooOOOOO%%%%O&OOo=Oo=oOOOOOOwO&OOO%oo=oe2=ee>&iFy%%8wwwwuVAVAZytVVynxyyyxVZUVunVxnnnnxxxxnnAwnxxxwZrwZDxtxtxyyyyuedd3dUL2o3D^D-Znrtrvxtttyu;yUTD>>eAT^_TLLW)EPEDfLC3f^EPYK+3>;F/t&uy>wyDG-trtVtuyuu,CODH2sYh5S@R`ERH4YfdLHDf44pfE^SL^&3=eww&&&y>&DTuyyuwwuyyuwAuUT3A;VVO=etuutyyyyyuwwwwwww>--8uw>w868ww>>-;>>>>>wwww>>>8wu>w>%Od)_2eeFLAVFdCdF,>wuw,H_UDfSYfT`_C=H=+SUCUL5SSshJgWIW$5eo=O%%%%%%%%%%%%%%%%+oO4i3@OOOOOOOOOOOOOOOO%%%%%%%%%OOOoooo.ooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooOOOOOOOOOOOOOOOO", "oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo%OOOOdF>&==OOoO3edeTCodDEe33SFywVV&Vt;wAUy6uVAV32Lhfg2SgI}[PgI)K)Is!RI)E)``X{[!P)``']__]}_)W(RhE[sP)~sQ{' 5>%---%%%%%%%%%%%%%%%%OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOoooooooooooooooooooooooooooooooooooooooOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOooooooooooooooooooooooooooooooooooooooOOOOOO%%%O%O>>2oO=OoO=*%=O>OOwO%+oo=E)TF>wuuw;tG>8ttttyxnAAnyxnyyyxyyynVDVxVnxVnnnxxxxnntwAZtx88vrvctrtxyuwyyuww>V&d^Co/DDVuZc7ZrtttttyuViVVuueuTFO+=fSJ_)P)E@=CdO2JLS24u66mGAA;3OFy>>yADn6wyuyVVOwi+24_`^s22Cf+3CLSf+hJDfYoS4U)O^)eLO>>dwO%&wy&yuwwwuyyiVV>yD)F%,DU33@ofYLYIEKII!KIWI#PPW|gsIPs=wuVy86cwrtyyu3>uuwwwwwww86www8w88>-;>ww6>>>88>>-;>>>6wu8ww8>wwwtuuwuweUDCeVCFVDFCeww>&yw&Oi^YUYYECC^_^^4ffaUD2@4@shh'WSKX.+o=&>%%%%%%%%%%%%%%%%OO=ee3%OOOOOOOOOOOOOOOO%%%%%%%%%OOOoooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooOOOOOOOOOOOOOOOO", "ooooooooooooooooOOOOOOOOOOOOOOOOoooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo%OOOO%333w>%%%3C===3D%3DSOOOdCCdV>w-Zwr6Znr%Ayww4.<42PW$$'RIWIRW{`kW{`'YE){Rg`~[}g# #@4so@+L_Q$gs#)sR'~[`..oO;--%%%%%%%%%%%%%%%%OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOooooooooooooooooooooooooooooooooooooooOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOooooooooooooooooooooooooooooooooooooooooOOOOOO%OO&OooO+@ooO=OoO>3=O%OuOoo=oeC>O;w8>;-8Z6rxxxttttZAZyyxxyVVVyyynVxZZxxZnncxxxxxnxVGDxZnwvvrrtttnDAyuyiyyFwyFw3ddD&unxZrZxxxvxVnywuyu,uiu>wiee5sf[)2S`dyAFddYSSSF66vvvZGVD^_DAyyuwVxAV>u8yyFeoe2S@Ef@opHLddyuwwuuuw>yu3VV^d>yVDiS35YL_EYSLPPKPghRRRKWWWII)pCo=yutA8tcZZyueyytuwwwww6>>wwwww>uyw>;>w>>>>>>>>>>6888ww>686wuuwwVuuiydd3F==yuFyFFww&w,V&33=dffYdFCdCfS^YaDSd4+oDS.fI)'KP))EdoO%OO%%%%%%%%%%%%%%O%=>=&OOOOOOOOOOOOOOOOOO%%%%%%%%OOOOooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooOOOOOOOOOOOOOOOO", "OOOOOOOOooooooooOOOOOOOOOOOOOOOOooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooOOOOOOO>>>%OOO>Add=3=eFSF33=ydd3yuy;86DG%rnwn8>u4Cf5+4K```hK)Ih[{{PsWgf4.YsEE_'|E$.@.@oooo+@oLEao.5hR`QI'Po@*-%-%%%%%%%%%%%%%%%%OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOoooooooooooooooooooooooooooooooooooooOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOooooooooooooooooooooooooooooooooooooooooooOOOOOO&OO&=Oo=oo=oo+OOooOO&OO3@o=3ye3dVVuwxx8;xxxvtvxZ8yZZVVVVAAVVVVnxtxZntxZxccxxxyyyyyAZ8tnwwxrtZnryAxwwuyyuVVAi,yV>V;yxtZmvnnxyVZZxwwxxuuywtxAAe2$h(EoDTC>DA=F_feCp2fs55o4oe_4S)pS{(KKgff@S)dee=CF&o3>=wuDGw>wuyyuw>&wV,DVCFeGF,<4d+4US4SEEfLLSYRJgKKIg)IjPKh.oCdw&yw9rtuw>weuuuwwuuw>>>www8w>yAVu>;-----;;;;88w86>>>-;>>wtuw6ZwwwwFF3CDdV3)ECFyeuiunuw,=CYCLLLULLf2dSET=o@o4Ld55ghsKh)Yh@O,OOOO%%%%%%%%%%%OOO&&OOOOOOOOOOOOOOOOOOOOOOO%%%%%%OOOOooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooOOOOOOOOOOOOOOOO", "OOOOOOOOooooooooOOOOOOOOOOOOOOOOoooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooOOOOOO%O&>>;OO%Oy>FTyu%w%O=FLUd%uOAwuDD686w-w>;EE2SEs^{}gSRsKWI_{^.@@+oeo@@4SRWE)5@@@oO3%O2=oO@4ooLSg| P'#@=O%-%%%%%%%%%%%%%%%%OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOooooooooooooooooooooooooooooooooooooOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOooooooooooooooooooooooooooooooooooooooooooooOOOOOOOOoo@o=@oOoooO4OD=O=%oO+OeAVwO&yVy6wrtxmcxvlxZZwryVZVVVDFVyVVnyyxnvrnZtxxxxyyyyyuuy8wxt8xttAZwt8wuyyyyuwVtuFVwAwVytttZvxyttxVxtDxwttrrw9txA&eL`_SoddD>;u3d_5CCeyr77rxue>OuVyyu>>y&VFVA>t8n>FUY][f+ooo=id`TSsEEKfKYS=H`eCY=3oeeO>>>OAUyO>wyu8&&>yy>FwF>yGFi68www33www66ww8>>>ww6>>>uVxu6;%%%-----;>>6686>>->>8uyywwxwu,=CCedUdFu^Tiee,Vuuw>yDCdUfLfYES5452+YC=SLC2ewu>%%&DFA]Du%u3>&eeFee3TuwuwOt;;yOw3O2ffsK2EYSSPKWKW)_S+2=O%xOw*O=o2S.DdooOO*O**OO=uoOo2.s'[R|`h.Oo*%%%%%%%%%%%%%%%%%OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOooooooooooooooooOOOOOOOOOOOOOOOOoooOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOoooooooooooooooooooooooooooooooooooooooooooooOOOOo&Oo+F@oo=o=@ooOT_=O=O3oO%VFuywy6tw668rcvvvvxxxcxttnVxyVDAyuyVxtxxxtrnZrxxxxyyyyyywyxrvvwtwwyxttVVnuwuyyZ6xV;wV>wAwyV6tnyyytynxtDtrxr6tcMr;V3e=E_2F3u-Zt=3Lof.UL,wrwwV33Fy,yyeeCwFy3uFUyvvyi^)YS{E.42=OO)(fShLKSR)EfSU4d3CeOeD`T=&>>>>>d>ww6-&>y>3u>uF3uFid3Uf2fSYLdD3DLDF45s5hRPhPRRRgW^WED2o&u>6wynyu3uytw8ww6>>>>6>;;;>>>>>>;--;---;>;>>6wwww>8wuynxyxtuVu>3%eFewFy&,e33&V3wwdwwefYdffJ422Cf@fJ5fJLJ4DLTD^RIpgg25=OO6OOOOO%%%%%%OOOOOOOO%&%OOOOOOOOOOOOOOOOOOOOOOOOOO%OOOooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooOOOOOOOOOOOOOOOO", "OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooOOOOOO%%%%6>-6&Vyi&>w3O=>&>3LDUF`deOwd,%wd>==Of)^SEESsPIgI[Wgs@o**O66%%;%>%3o@+oaoo1OOO6%Ow*O*;O3.S)g`{')@o@*O%%%%%%%%%%%%%%%%OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOooooooooooooooooOOOOOOOOOOOOOOOOooOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOoooooooooooooooooooooooooooooooooooooooooooooooOOO&Oo=JE2oeE4+o3@o_dooOooLFw>u>Vw>uyyxAZtvvvxxcxxvnttnxynAAVyutyyyxtvxtxmvxxxxyyyy3Aw>t669tuuw8uywVVu;%;wurZZwuAAyyywyxwrnyViyyxxtrrcZl9vm9MGGw>e_SoeF>r;rCShK5#f`DuyA>e3d&Ad>Fy>wd>3AV&,FGDGAwo2f^]Loo&=OsWLsYISJ_SQ_4==Cd=od^3dUC3O33%>>>6w6>>wy>yA3DFdeCCf2DCsS)T24wuuutxywwyyww>>68>>>>>>;>8w>>>>>;;>>>>>wtyyu6wtyynVnnwVVww=oODCAFy3Ae33wiwwnwwii4ffUaL2f222aa_Y+sFOO%OOOOOOOOOOOOOOOOOOOOOOOOOOO%%OOOoooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooOOOOOOOOOOOOOOOO", "OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooOooOoOO%,>-;w8;6%O,&Vy%>=>&O>=DALd+^^=d>V>33e++oS)aSfgs$PKIghgX o=OO6%%77%%%;O=O+ooO%OO>-%-;O%%%O&oo)[R){g[g.oO%%%%%%%%%%%%%%%%%OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOooooooooooooooooOOOOOOOOOOOOOOOOooOOOOOOOOOOOOO%OOOOOOOOOOOOOOOOOOOOOOooooooooooooooooooooooooooooooooooooooooooooooooOOooOoo=oY[]4LC@+YE@=ooO3CU,Oy>u>uwttxnttZMmxxxxxxctvnxtVDyyyyutxntrxZxxmxxxxyyyyyeUV>uwrvuwyy8ux8;wyyxnxtvr8xZuwVVwVywZttyyyyutttZxtrrmc9vMUZ>>S]543wut6v2aLPp@5E_y,D33vx]TuS42fEL@=O%&@2EhhXSRSLLdFFTTd32CSd==Ow&O>DUO;>wuww,>uVuwF33u>>w88wuyxyy8uyytynVtwFy&u332e=3y=A>3e3Cyu>AFVie=@=fL(5fo4ffLYSSE)LLwO=Sf5KhPR2oO&%%ooOOO%%%%%OOO==2UV&O%OO%OOOOOOOOooOOOOOOOOOOOOOO%%OOOoooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooOOOOOOOOOOOOOOOO", "OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOoooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo3>3dCy>&o+oe)C+=3eo=+De+%VOD^iO>VyVy>&w_E++5ss#KSE`{CO8%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%&=@[{[{K 'Q.+OO%%O>O&OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOooooooooooooooooooooooooOOOOOOOOOOOOOOOOOOOOOOOO%%%%%OOOOOOOOOOOooooooooooooooooooooooooooooooooooooooooOOOOOOOOOOOOOOOOOOO=yVdCY45{(o4D+@oe@d3e-6rtttrrZxxxxvxZxxxxxxxxtxxxnZG/>Vy>uyuwttttvvxxtxVnxtyxuDnuA>Vwvxxtw334e3wyynm9w8>>wtxxxxytxZVyyxxyttttxyttyytuww8VuuA_VVy3,>,O3=OeDuy>;;-t8xt9ZtnVA3ESYS4eewywf`D=dLSD3O_D%OOOo>dLLWE^Y<=AAuUyFf^ShWJWRKPIgsKhYhLSfQfLhfSo=3O4e34oDd>uwVtyV%>=eennwwiOueeVOOO3@o&&&wyu>wwyOFyVVwVtUDww33>%Ou6%ZZDeyVw>uyuFV&CfFfL[SffSESDfSSf@<5#gsfh2T[F3O%%OO&%%%%%OOOo=o@oofa@OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO%OOOOOOOOOOOOOOOooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooOOOOOOOOOOOOOOOO", "OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOoooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo=O=ede>>e@o@2e^^o+3oo=e3ww3wUFywywOOyiODD@4a_)5JE`)^w%O>%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%O,o@_[h|) P`@@o=%%OOO&&;OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOooooooooooooooooooooooooOOOOOOOOOOOOOOOOOOOOOOOO%%%%%OOOOOOOOOOOooooooooooooooooooooooooooooooooooooooooOOOOOOOOOOOOOOOO%&OO>>*&o@oYeoo@o+ee3ee3;6rtttttFAZZxttvxxxxxvttxnxtttZUuyyuuw8tttttvxxxwutyxxxxAGwwt8xtlxZVVADLEC=wytvm>---6tyxxnxtynxuyxxytttyyyytttxntAywy8u]DOwVwVOieo%=>=yy8>y8tTFxZtnwFT_D4dCiyAFAVD3ACCiTiLDdo>D-tDy>de@2FDd,u6%6u68>uA>3e^T_L2feiV8VAwedfS@ESEPshSEKWP5YKhKP4YfLLSS3FSoSe3ED=y:wwwAAwedCnw&yuwyw3*=3+@TTAVwwu>&wwywV>VyVyuDVy3ye>Ou;-x8DCeuwuVZwUVu>dUYdfDfLf2YSfff4+5FL5s$#s4)L==%%%OOO%%%%OOOO=oOVVuF>&%AVuAD>T34SfLLSJLL+oo&%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%O@S`IsRKK{So2O%&3>&OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOooooooooooooooooooooooooOOOOOOOOOOOOOOOOOOOOOOOO%%%%%OOOOOOOOOOOooooooooooooooooooooooooooooooooooooooooOOOOOOOOOOOOOOOOO%OO%%OOooooo=o==dUde=d&66wrrrrtZxxxxttvxxxvttrrvxvvxtZDVwyAVyZDyvtvvxxxxtttxxytTTtZyyttZv8wyVdeLTUywxv7>-%->wyxxnnyyyttxxxytttyyxxtutVA,yw>ni>^[U3Vue>LU&3&Owywuu6%;GAtrZA&CSD3SLUdFUV3w,nw&ELC=)FS_).+Ooo<.2W_^L^TSdF]_J_U&;nw6xOD^doCUFVu>tx6w88;w>>wSKYsS22iFntnySH4pYffRfS^#IKPW^_RLLKPShh+fTCffeS3fJ2OO%u%wO>S*3aayu%i>wyeded+@S__Ay>>w&&u,%>%>Awuuyd=d3FCO=uwyy-udew3wVV8iVw3LL2Cf2d3d+pS45=d5SffK5sSJYUooO&OO%%O%%%OOOOO=o25oC4oOOOoooOOOOOOOOOOOOOOOOOOOOOOOOOOO%%%%%OOOOOOOOOOooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooOOOOOOOOOOOOOOOO", "OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooOOO=>>>w3Foo3ooL_C3F=+oDywD/AL3D,Ai&&VG_=eF4pS@$@+22OO-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%6%&o.E[WjWW[_==&&O%>y&&&OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOooooooooooooooooooooooooOOOOOOOOOOOOOOOOOOOOOOOO%%%%%OOOOOOOOOOOooooooooooooooooooooooooooooooooooooooooOOOOOOOOOOOOOOOOOOOO*%O%=ooo==o=%eDueuDV66688wrrw8rtvttxttttrrrrtxvxZZZDDVADVunZyxvvvxxxxytyxxytAZ-ttttt-7xZVVddLDywnnrvu8>;6uttxxxxyxxxxxxytttyxxxtttVAyuyywiw%U{d=&w,yF-AV6VtnwUDeiSd44DfFYFdm6Zt>TD<ww%8-V%>e24oyO&&OuA>86>&uO>3Y)L444dA8TG8TD4g5LPgKKY`WSPIsgJSYYsh@E`SfYUDLTLUf^fSUwdAD%yTCdfo8i,>&&=VF=CdT`a+u>%>u>;yw&uwVDyyVLFCLde+3Se>>wyUdedVy>wiy>ye=F4FE3C3=3Ff4@+ffCfhJ2hhLL+@oOOOOO%%%%OOOOOOo4o=Y&eOOo=23=+fS32o4OO>Ddu&Dy3&3>wO>wywwyAVwwwwwrttvttxxtrttrrrrrtttxxxZxtZDyyVuwywyvvttvvv8wttyxVZFVxxZtZxAr8FT^UdddwwZZvmxtw8wtytxxxxyyxnxxyttttyxxytyyxxyyuiwwF,3E[3wi3w=y%OOOOwwA;UD>wt%wAOwCeCSofY^)LocrxZtVyefsSs R{hoO&OO=>=O&3LE%Oww;6;-%%y%>>YWg##f<;nmAnV&>w>&w;wyVVwwA))DffCffoFYdOdy_dCFFy>wViyV32UCdUieee4ii=3Sf2+L)SLffJ.+o=OoOOOO%%OOOOOOOd<=`)oooooooOOOoOOOOOOOOOOOOOOOOOOOOOOOOO%%%%%OOOOOOOOOOooooooooooooooooOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOooooooooooooooooOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO", "OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooOOOoOOOO,>uVO&=oOLE4@o5oO&==D=eudVw>Ouwu3dJ4LLW({{[T3,6O%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%>%@.s[Ipp[`oo3wOOO;OO%OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO%%%%%OOOOOOOOOOOooooooooooooooooooooooooooooooooooooooooOOOOOOOOOOOOOOOOO%OO%OOOO%O=OOVwVyuVwyw8vttttvxxxxxxxtrtrrrrrttttnxxZxtxywwwtVAxyttttttt6wtuwwtxZwy6w-t8rrr6>wCDwDDZxZcrtuwwtxxyxxxnnytyxyytuutyxyyyxxtuwi>wV>iiee([)^eOuD>&;OO>ww>wuyOuA%ADydCefLfY{[fh6Attyyi4p@sfhP[{E&i,OOO%&O<32.5Yd=wV>--;r8tUUdSL3wyiu8>->--&iy33#s)Khf,Dvv9n8SSWfJf^LffShh gKS(ghPPYLKSLsEffLLiCfofLUSCeS23ff5LfCHF3TUdSSOFC3O*3>w>&>>&,,u>wyu>y+do=4SffSS@4DYeewCCeeyuu>y33DJ+d3U3Oid4dFe42SLYSg5J)S2.@@oo%&OOOOOOOOOOOS=d[2oooOooOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO%%%%%OOOOOOOOOOooooooooooooooooOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOooooooooooooooooOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO", "OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooOoooOOOOO&yAw%o==^`ELo2o%=3>F=eOD_)D3e==4S{^OOOOOO%%%%%%%%%%%%%%%%%%%%%%%%%%%-%6&O2oL5fh{EodoO&>>&>&&OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO%%%%%OOOOOOOOOOOooooooooooooooooooooooooooooooooooooooooOOOOOOOOOOOOOOOOO%OO*%O=%OO&OOwVywwZtVxyxvttxxxxtttxxttxttrrrttttnxxZZxZVZxyxxtttturrrrrtttw8888w;uutZFAAZt>;yDTTAuVZtrxuwwtyxxxxynAAZxtyytuwwttyxxxytttVAUViewwO&uuwO%yOAnOwDFeeSSSR^^EL+nV8nFeed4sEP))gP4f)dwZ;%%OCS++S`doOyDVwZr6;ww>eduOuA&%w%w66>uF>3XhQWSCV6cvGTyYSXLRh2LKI5ggh4#$YKLLgISsLPhDSCCELHSUYSfoS2fSLEEYESei3&FD33DCYFOo1O&w3&>w>>Vy&>FTyuFSe2+f5sYE.53@3=>dy>wyuwC=ed2=ddFUCeOFTfOO>OO%FV&OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO%%%%%OOOOOOOOOOOooooooooooooooooooooooooooooooooooooooooOOOOOOOOOOOOOOOOO*OOOOOOO>%OO6-nxxnxwrxtxtttvxvtnxxxxttvxttrrrttvZZxxxtxtxtwxw6ytuwwww8wytwwwuw8w6wx;Zy6rrtttyyyuwVZwrxruwutxnxyytVDDFZxyttwwwuttxnxtttxwV_L&LET3eO>OOOywe333DAO%wOeHf424s4LYseCSde34efSSf{_@@2^[+,VO&&=O.2)`'^OO&V,>-8>Vu>DG>33wuu;-yt8w&;AO&hg}WKDGnvMGniSggU>>ddwwyw>>,w>F^Vieff24SSY^R@5=4=e3yewy33d3LL3fCC2DD==edLS422f24sgT+_E4..oo23OoO&OOOOOOOO%OO3@ooooOooOO*OOOOOO%%%%OOOOOOOOOOOOOOOO%OOOOOOOOOOOOOOOooooooooooooooooOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOooooooooooooooooOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO", "OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooOOOOOOOO;UTwy;O>oo=o4L4o3e3DUee=de==3=2=DaoLY2<4fe=OOO&&%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%;---Oo+..@LEo=OOO3y/UOuD%%%OOO%%OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO%%%%%OOOOOOOOOOOooooooooooooooooooooooooooooooooooooooooOOOOOOOOOOOOOOOOOOOOOOOOO%%%%-wnuntwvtwnrttvxvttxxttttxxttttttttxxxxxxxxyyytttttwnt8uw6yxuwtytw8u88yAAx6xvtxxVVVVVxtrrrr6tnxttxxxyyxxxxyyxtutxyt8yxtttxxuw3wiAFFeV33^_o46wVV&O;&ODT=L3+e,OyD333epffLDhER42YE)^4ifC3D)T3i5^]dOO&&>=+.|{'W_=%O>%O%%%O%%&>>eu>>,;-ww;-&OA^^Is)_KUDvmmmZ3SKILfYhPsS^)WX#f$LKSKWL5SS+hSYEH2dSe+4LLLLYWfLshSSSCi@CLfeeCO3y&1w*w*3>3>%VCuFu3wyeTEJE`L+Yg$Sf+=@3yduywwFCeTCeee2+edTYdDCD44LfEL45D^Eo@@+.({_oO>OOOwOOeOOoOOOOooooOOOOOOOOOO%%%%%%OOOOOOOOOOOOOOOO%%%%%OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO", "OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooOOOOOOOOAZD&O&wO3Oo@=^]4odoofddCS4Oe42=S@=SfDd2=SCw=%%OOOOOOOOOOOOOOOOOO%%%%%%%%%%%%%%%%-%%%=@5LY^Y4o3O%O>wDVO>VOOOO%%%OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO%%%%%OOOOOOOOOOOooooooooooooooooooooooooooooooooooooooooOOOOOOOOOOOOOOOOOOOOOOOO%%%%%6tntxttvvrvrttvxvtttttvvvvvrrrrttttxxxxxxxxxxvtttttwytwuwwyxtutxtww6yAFAnytxxvxxnnnAZxttttvyxyuuynxVnxxxxxxnuwtxtuuwxnyttyyuuuuydAAuye33_S3;>tu%O%OOV32OdeYUDUD<33e2CEU_hYSg#SE{{44De,yt8tAR25o=3=oo=+`)g'!E+oeOOO&%%%OOO%%&&OO%%%-%%%%OF_`ER^)KSDZnrvuCfhP3EYS)f5YRSKSSKgSKSPSSgSK4f@+S2f^eYLh455fshEhLRYhLEf4i)dTC3SD3>1:=&3>3yyVFwCydVdeffS^^SE)f+s5+4=>=DUdwdDeC4CCdf3LC=L^d5YdSSDsLhfY][5o@..E[__=o%O%o%oFUwO@OOOOOOOOOOOOOOOOO%%%%%%%OOOOOOOOOOOOOOOO%%%%%OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO", "OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooOOOOOOOO%O,yy&w3o3o=od)LSod=odSUFSD42d4ad=ddC5+23=oOO%%%OOOOOOOOOOOOOOOO%%%%%%%%%%%%%%%%%6%O&O2Lf5>>&O%%OOO%%%OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO%%%%%OOOOOOOOOOOooooooooooooooooooooooooooooooooooooooooOOOOOOOOOOOOOOOOOOOOOOOO%%%%>wtxxttvtvxrttvxxxttttxxxttrrrttttttxxxxxxxxxxvtttuutwuyuuytyttxxttt6xAFnuwtxxxxxnxxAZxtrtxxZntuynxtnxxyyxnVtDUV6tx8txnxttyytyiyuyiVyyudO`YO6>ww-%%OOOeFCFDf{UoOee3CeefETEEsssW)``EDDiVAnxmv4SS2HSo53+_{^W[K^`@oe=OOOOOOO%%&OOOO%%%--;-&OO&OhLSPf5CynyFAegKRoTL*>>=3>=OeFwD>3>dVVy+2dYLhYa2o2++w=e33w3SCU_SfD3SYe4S4ULf2SY2^^f2fE`^=2o@@S]4.DoOO%%dF==e&@oOOOOOOOOOOOOOOOO%%%%%%%%OOOOOOOOOOOOOOOO%%%%%OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO", "OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooOOOOOOOO>OO%%U/OO=OO=oODf=3fof)LS+Ld5+2e5CoC3fSCVe=OOOO%OOOOOOOOOOOOOOOO%%%%%%%%%%%%%%%%-;OO=oo@2oo+&O&&%%wOO>OO&&&%%%OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO%%%%%OOOOOOOOOOOooooooooooooooooooooooooooooooooooooooooOOOOOOOOOOOOOOOOOOOOOOOO%%>6wutyxwtxwtnrttvxxxvtxxxvttrwvvvxxxxxxxxxxxxxxxxtttrwt>wyuyVytttyyttxyyyyttwwxvvxnnnxZxtrrtxxnxyxnnt8wwttxxVZtUTZ>yn6tyxyttyyyxnxytyyuVwAd)V&rwww>&&OOO2F]YSLf4=iCedVyHS3+=fpWIs@.C[`DAurZAcvi==d@4o@feey,DhEh#244.pY$$5fIsf2YfhYS$4LS2d2U_e3DC<3eSJPShSSPK5`sfP^YYhfS33o>3%>>:=3&=&VUCV>>=dydweSCYLC5+++3==>wDyid32CCSeoad33LS5gYfSS+LSEf@@SDoooo2..`[4PD+3O&O=dOooO=oOOOOOOOOOOOOOOOO%%%%%%%%OOOOOOOOOOOOOOOO%%%%%OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO", "OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooOOOOOOOOOwOO>O3Fdo=Oo3o>S5o2F42Y)DEY323=f^YD+DUOde3>%OOOOOOOOOOOOOOOOOOO%%%%%%%%%%%%%%%%OOO3+oo2.5+O%>OO%O3OO,O%w,>&%OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO%%%%%OOOOOOOOOOOooooooooooooooooooooooooooooooooooooooooOOOOOOOOOOOOOOOOOOOOOOOO%>ynxyyxywtx8rntvvxxxvvtxvttttttxxxxxxxnxxxxxxxxcxxvttrux>wxuuVytutttutxnyttyxtutttxnZZnxvtttvxxxxxnxtw6;8uyyyxxVtuxntw8wwttytyxxvtyyytt8ZtyuAOitr86>;%Oo3=oSEE@SL@eA,d&OAU&CC^EKY5hYFDOuiyr99vmV3ei=TT2ED33deLeL4J`_))OOO%%%OOOO%OO%%%%%-%OOOO3>=>*q>:>=O>&wDw&3deCee>%Se3d^f3d3wew>wUDuCUeDDf4CfdLe3D#KJKgIPffsh)^YLoO3=@o4[^5^4oOO,%oooO=ooOOOOOOOOOOOOOOOO%%%%%%%%%OOOOOOOOOOOOOOOO%%%%%OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO", "OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooOOOOOOOOOOOOOOOOooooooooooooooooooooooooOOOOOOOOOOO%O&dACO%&OO>%2_Do2o=@d2CU2LC2f4f==dd=%OO%%OO%OOOOOOOOOOOOOOOO%%%%%%%%%%%%%%%%OO@oofSo4=o%O%-%%O&OO&O>ww>%OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO%%%%%OOOOOOOOOOOooooooooooooooooooooooooooooooooooooooooOOOOOOOOOOOOOOOOOOOOOOOOO>yVyuuttwtytxnxvvvvttttttrrtvxnxxxxxxxxxxxxxxxxccxxvtttVutiyuyitwwttuttwtnVxyttttvxnZncvxxxxxxxnxxyw68w>wtxytuunuwynyuuwwwtytyxxvttxnvtttnt>>wwrt8>w>OOO=ooo2f@sLLUe&>&OO-%,CfKSSYf242)}gdp4C2KKJLSgE^L@o45SE4q=&&3=>3o=eded=eduVe>w_DOF3=uu>wZuUVe2FFSSUS4^T=SR))RsKhX#S_{)2o.OOoo=L].SJ++O=%O=+oooooOOOOOOOOOOOOOOO%%%%%%%%%%OOOOOOOOOOOOOOOO%%%%%OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO", "OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooOOOOOOOOOOOOOOOOooooooooooooooooooooooooOOOOOOOO&=O3Oo>^F3OO>&O%&%%OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO%%%%%OOOOOOOOOOOooooooooooooooooooooooooooooooooooooooooOOOOOOOOOOOOOOOOOOOOOOOOO&wyuuuuuuuxAAntvvttttttttttvxxxvvxxxxxxxxxxxxxxmccxxxvyxyyyVyVFywwwttutwtxnxytyxxxxnnxvxxvvxxnnnxyyu66w8uxxytttuAFxwynxtwwtxttxxvttvvxxntnyyuZ&rv86yw%*Oo25.oQS4Tde=y;,yDAtiu,VyVVyFEyyAwVAuyAuvMttuyyC^^wD9vvlSfJ`P4@L4=ooO%%%O&%O%%%%-%OOO>OO9-O=4KP)s4SL4Y[se5CfpS+RE5sf^@LLLDL^o+CdTYUDDyV>Fdd3DL.KISg]PK^hshKY544e3=w>%>>rO&wedAdewe3wdOeDyO,A>yOwV3>u88t8>F3LEedED+4DdSE^P`{`[`KW_ESS..++&Ooo@))sY5ooo&OOoo+oo==oOOOOOOOOOOOOOO%%%%%%%%%%OOOOOOOOOOOOOOOO%%%%%OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO", "OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooOOOOOOOOOOOOOOOOooooooooooooooooooooooooOOOOOOOO=oo=o&OyOO;OO>OO+oFES@=+4CSU`ESdJL423DECTF>OOO%&OOOOOOOOOOOOOOOO%%%%%%%%%%%%%%%%oddfDh+@2Se%Uu--%%%%%%%OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO%%%%%OOOOOOOOOOOooooooooooooooooooooooooooooooooooooooooOOOOOOOOOOOOOOOOOOOOOOOO&>wuyyyywywxDDxuvttttttttvxxxxttxxxxxxxxxxxxxxxxmmccxxxxwyuyAVAUxw8wtttuVxttnVnxnxxnncvlxvttttxnxtynxw>>wtxxytyxyttxxtyVyuuyxttyvxxvttvntnr8u;tt6r66yw%&o=oo@oY^SLVyVuuCy3dbMvxZieeeDwrMbMMp2L^UEEDDf2ooOOOO&%O%%%%%%w%O&O%-9%iT_S5K$E[K4EYKLf4KUD5dw3**wqtwed=3d>333>CDO3S8wy&>yeAwwyn6tAriuFTYO%%%%%%%%%%OOOOOOOOOOOOOOOOOOOOOOOOO%%%%%OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO%%%%%OOOOOOOOOOOooooooooooooooooOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO&%OOOOO&;wxtrrtxtrtvvrxZxxxxxxxxxxxxxxvttttvvxxxtxxnnnxxxxxtxnxtvxxxxtw6wutttyyyyyxxxnnxnxxxxvvvtxZxttxxyyyyw>>;uyyuuuyynxxxvttttvxxxxxxyyyyyyxxyAZ8;utw8rtt868w>O%o=+2)KK54f2Le&yd,nVwwy>AZ^UxtxxxxxxxxxxxxxxxxyyyxxxxxyVAAVVFD/D>OOO%%%%%%%%%%%%%%%%%%OOOdTfWg5WshI 5_`ffC4DLfh5fYf$5Sg#g2deOCCSE)544ey=yu,VVwtt6wwwwwwtyyy8;yw%FLDLf4ffshY4fdSDT)D]^[T@OOOOOOOOOO%&Oo=D^oooOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO", "OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOoS`Fooo=O=oo=@ooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOw&oo^Do$XgIs)_5KE)@LSsYfLf+&&%O%OOO%%%%%;%;%O3=O%%>%%;O%;%%%%OO>w,O>CyO%e3edCSLDDC=oO%OOOO>%%%OO-rn6%OOOOO%%%%%%OOOOOOOOOOOOOOOOOOOOOOOOOOO%%%%%OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO%%%%%OOOOOOOOOOOooooooooooooooooOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO&%%%&wtytttvtvvxmcxcZxxxxxxxxxxxxxxvvttttttrrvxxxnxxxxnnxxnxtvxxxxvtrttyyyyyyyyxxxxxxnxxxxvvxtxnxttttuuuww>,wuyyuuyyyxxxxtttttvxxxxxxyyyyyyyyuVVu8ttw8rrr666w>%=oooa`KsofSS88ywDFUAttyyxxxxxxxxxxxxxxyyyxxxxxuyyyyuyVTF,%%%OO%%%%%%%%%%%%%%%%O&OO45SsIKfIKs)^hh2@4fCSaLfo$YYfIshCdCdC4^PKLLULsLTYd3DeddLV>>Ow>=>=OFOe>>>3%wDVU^Vee%du,wu>>DGZrrr86>68y;nVw>VUL225YS+hhaSEeL^S4dECaoo3OOOOOOOOOO%OooeDoOoOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO", "OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOo3@oOe]Uo2oo@oo+ooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOw&o3T)h$fgPWQKXKgLXsS@@K$fpo&=&%OO%%%%%%%-%%&OO=OooOed>=O%OOw&O%&OO>V=O&OooOo=eeDdCdFOO>OOO%OO&O%>8wwu3=OOOO%%%%OOOOOOOOOOOOOOOOOOOOOOOOOOO%%%%%OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO%%%%%OOOOOOOOOOOooooooooooooooooOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO%&%OO&xxttyxxrxxnZmvvxxxxxxxxxxxxxxxxxttttttrrxxxxxxxxxZZnxxxvvxxxxxxxxxxxxyyyxxxxxxxxnxxxxxxxxxxxvvt8ww6>>>8wuyyyyyyyxxxvtttttvxxxxxxyxxxxyttwtxyttuw88888888;O=Oo@L{`_Y_K+DLouuwwttAV>VxunntttttvvxxxxxxxxxxyyyxxxxxVyyiVyyyAw%O%%O%%%%%%%%%%%%%%%%%OO%oohgY)sYsREh'S4+LY4@.fh@.@25S#$@LDdwdT)4fSe(Y+&e&Ow>=OOOFe3we3*OuA3eAe&33>>y>>w68w;xxttvyxyywAAVAy&3e4LD+(J2J^]TJD=@3@oo@3oOOOOOOOO%OOOOoO=oOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO", "OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOoO>o=OY)^SSLd3EYeooOO&O%%OOOO*ooOOoooooSTedVCOu=O>O%y;%-O%%u&oOOOOOO%%OOOOOOOOOOOOOOOOOOOOOOOOOOO%%%%%OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO%%%%%OOOOOOOOOOOooooooooooooooooOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO%%OOOO>ynnytxnxtnxxxtr9rxxxxxxxxxxnnnxxxttvvxxxxxxxxxxxxxZZZxxxtxxxxxxnnxxxxxxxxxxxxxxxxxxxxxxxxxxxvxxr6>>>>;;>6wyyyyyyyxxxxvttttvxxxxxxyxxxxttwwwtxywwuw866www6u&OoOod^))`_US^5+TH3,i,;yyuywZxtttttvxxxxxxxxxxxxxxxxxxxyuuyyyyy&OOOOO%%%%%%%%%%%%%%%%%%;OOOo5+YK@KSg#S]SffLSsDSYf+SEYs5_`WEAeU`)dspfLH<2SJ4FCDC@=O%%O;OO%O&OVAwwy,&yDUVde3O&>Oww>>Vu%-wrrwrtxxyuyyA/ECdeC3oooS@4_^fo44O@oo@+o3oOOOOOOOO%OOOOoooooOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO", "OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO=oooo=oo@L_^o+oeOOOOOOOOooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO>OO3^esYWWhR|PR`PWWhPs#hsf`Lo=oo%%%%%%%%-OOOo@e=)`)LEYsSYfooo=+oO%OOO&*OO%%OOOO=3dSFSCFDF>=w&&u>O&O&O&oOooOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO%%%%%OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO%%%%%OOOOOOOOOOOooooooooooooooooOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO&yAuyxxxnnxZxttrrrvxxxxxxxxnnnnnxxxxxxxxnnnxxxxxxxxxZZxvtttxxxvxxxxxyyyyxxxyxxxxxxxxxxxxxxxnxxvxxr>;;>>;;>>uyxyyyyyxxxxxxvvtvxxxxxxyxxxxtuwtwtytwwtrw68rrr8y>%oOoo2hss$Yd4<3Cei&yVyOVwuwVwVtttvxxxxxxxxxxxxxxxxxxxxyyyyyyyV;&%%OOO%%%%%%%%%%%%%%%%%-OOOoooh^YSK5.LUf2$fShKE4hYYJSLLRYC4wADDdSSCfddC=L)dSUeo=OO&OO&OOOOu%O>w>3;OyUDyDD3CdOw>&w&>>>ywlrwrrtuwywwFTUDEUd=o@+=.5Leoo=Oo=o=OOoOOOOOOOOOO%OOOOOoOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO", "OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOoeoOO@+=++DCo2ooOOOOOOOOooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO%%e^ff5){[P|Ig|[`)[WKgs h)Y@2+o%%%%%%%%OO>o++oEYYhpLK5L^fo@ooO@%OOO%%OOOOooooo@o=@=3FCCF3V3>O%OO%O&O=ooooOOOOOOoooOOOOOOOOOOOOOOOOOOOOOOOO%%%%%OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO%%%%%OOOOOOOOOOOooooooooooooooooOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO%%%>w>wyxxxnnntrtvxnZxxxxxxxxxnnnnxxxnxxxxxxxxxxxxxxxxxxvttttxxvvvxxxyytttyxxyyxxxnnxxxxxxxxxxxxtxxt6%-;>>>>8yxnyyyyyxxxxxxxxtvxxxxxxyxxxyttwyttttwwttrwrrtrw>>&O==@+LK5+YDoeodOe,uD/^^UAVn>tyyxxxxxxxxxxxxxxxxxxxxxxVVVVyuyV>;&%OOO%%%%%%%%%%%%%%%%%O%%O*%=22dho...)a.5LLf22ShLLhgYLs@5C&wULCi54DL,G23eEUSS=&O>O%>O>w%O%&&;%u33%wDF&Cd3CV&>=3wOuA>>%rrrrtttty3dewFSC>oodoo4odCo@w&%&=%OO+ooo@@@OOOOOooooooooOOOOOOOOOOOOOOOOOOO%%%%%OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO%%%%%OOOOOOOOOOOooooooooooooooooOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO%OO%OOOO%6ynnnxyxrrtxcZZxxxxxxxxxxxxxxxxnxxxxxxxxxxnxxxvxxvttvxtvvvxxxxxxxyttyyxttyxnnnnxxxxxxxxxxxtxxvr;;;;;>6wxnnxtxxyxxxxxxxxtvxxxxxxxyyytttttttttttwttrrrrrw6>%OOoooo4ECf`E=U)Ciyw,UUU>>unZZyyxxxxxxxxxxxxxxxxxxxxxxyyyy>%%&O%%OOO%%%%%%%%%%%%%%%%%%%--%O%Oooooo=+S^.SEYaaJ$4fSfSSh.YRdHy&uy33=DU3<w>y;6788www>wd3eLFoOo>o<2o2+^LooOOOoOO&O=O%OOOOOOOO%%%OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO", "OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOoOoo=oO=@+.2^dFeOOOO%%%%ooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO%%>%C22WhIhgPRPQWQKRg`[)KhI)If2.%%%OOOOO&oo3od)CS$hLf2$+o2OoOOO&O%%OO%>OO&Oo==oOo@+==oO4SF/O&%O;O=dee4DY@@@@OOOOooooooooOOOOOOOOOOOOOOOOOOO%%%%%OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO%%%%%OOOOOOOOOOOooooooooooooooooOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO%OOO%OO%%>uxVVywtw8rtvvxxxxxxxxxxxxxxxxxxxxxnnnnxxnnnxxtxxtrtxxtttxxxxxxVnxyttyyttyxnnVVxxxxxxxxxxxtvxxtw86;-;6wnVVytyxyxxxxxxvvtvxxxxxxxyytttttwtyttxywtttrrrwww>O&%oO+@oO>O*o3Oo=oTL.^EYYSLKf455S45fK]f=&>8Ai3C+Cw>&Se2DD3o3&%O&%%;O%O%%>%O>wOu>%ADi3V3ee3dO*AdDDO=3vxnxtwwuuu3eDfo+OOOO3oFFL^Ye=o%OO&OO&OO%OOOOOOOOO%%%OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO", "OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO.+@2U@EDOOO%%%%%OOOOOOOOOOOOOOOOooooooooooooooooooooooooooooooooooooooooooooooooooooooooOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO%-%>odYps)IXgPW)g )K`{{RWWKWYKK.;%OO>o2ooo=+oSE=hf@ffL<@OOOOO%%%%%%%%%OOUVOO&=&Oo@ww-;ttyxxnxxyxxxxxxxvxxxxxxxxytttyxxntyxttttttw8rtr98688&OOOoO@OdCe4de3>;S^d@wO3OO%%%%%%%%%%%%%%%%&%>uOVw&dy%A=dw==weFdoetrZ68V;u,yw3eOOOOOOOOOOOOOOOOOO%OOO%&%%%%&%OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO", "OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO%OOOOOOOOOOOOOOOooo@dod4OOO%%%%%OOOOOOOOOOOOOOOOooooooooooooooooooooooooooooooooooooooooooooooooooooooooOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO%%O;OeEREW.LW)Is #KR`'`R{[WIIK[sO%yoO4o@+@oo4d324<24@2eoO%%%%%%%%%%%%%%OUV=%%OOO2..2oo@oOOOOOOOO3w=eo4D_Df2+==&O2.ooo@oooo=eoO=oooOOOOOOOOO%%%%%OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO%%%%%OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO%%%OOOOOOOOOOOOOOOOO&AVwwuVxytxxxxxxxxxxxxxxxxxxxxxxxxxxxnnnnnnnnnnxxxtttttxxxxxxxxtwnyxx;ttttyyxxxxxxxxxxxxxxxxxxxZtwtw>6tyyxxxyttxxxxxxxxxxxxxxxxyyttyyxxuyytwwuwxtwrw68r6w6&OOOOOw=oDE5]LoFLf&ydFu6VZuwxyxxxxxxxZnxxvvvvrrtvtxZZyyyy,&%&%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%OO&OOoS{'.4@E44LpSSPS5hS5YY=O;,>iUDCCLi&FU=o>O&%%%%%%%%%%%%%%%%%O%%>u&DA>ey3D=3eCDo3D=S3868VV>>w>wwwyoOOOOOOCULeeLD&O%O&%%%%%OOOOOOOOOOOOOOO%%%%%%%%OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO", "OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO%%%OOOOOOOOOOOOO@ooooooOOOOO%%%%OOOOOOOOOOOOOOOOooooooooooooooooooooooooooooooooooooooooooooooooooooooooOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO--O&OoefEhffsh2fg##gW''IRWW^_YhKD=oo.+.4o@+O@OOO%&%%*=DdCLfDLSfCFd3O.+.2+@o5+@ooo+o&OOoO%OO*OOO%%%%%OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO%%%%%OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO%OOOOOOOOOOOOOOOO%OuyuVyxxxxnnvxxxxxxxxxxxxxxxxxxnnxxxxxxnnnnnnnnxxxxvtttxxxxxxxxnxxZGGyxttutttyxxxxxxxxxxxxxxxxxZxtttrrtvxxxxvttxxxxxxxxxxxxxxxxyyyyyyyxtnVyuuttuuurw68rww6-OOOOO%OO+_S)^5LY23iVVVtyZZxnxxxxxxxxVnxyttyxVVZnutntyw>>&%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%OO=oe[^QY4+ffSfLf55JRYIP_ou>nD+2H^FidDdeoO*OO%%%%%%%%%%%%%%%%%O%%>w8DD33d>V&OeL]C@d+De>wuuwwVwwwwyA&%O%&%O>VCedTFoO&O&%%%%%%%%OOOOOOOOOO%%O%->%%%OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO", "OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO%%%%%OOOOOOOOOOO+o@Oo=o&OOOOOOO%OOOOOOOOOOOOOOOOooooooooooooooooooooooooooooooooooooooooooooooooooooooooOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO--O&>ooo25<+22a.s)P$W)gWh5IR.YEETL24foLYffUeofeo=eeL_FOO%%%%%%%%%%%%%%%%OOO%OOO&5W)L^24oOOOO&>>;Od/edLSD`)^^TS>OY[)`]YfTT<@34=OOO&OoOOO=OOO%%%%%OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO%%%%%OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO&%yVVAnyyynVxttxxxxxxxxxxxxxxxxxnnnxxxxxxxxxxxxxxxxxxvttxxxxxvttVx8wDDtttuwwutyxxxxxxxxxxxxxxxxxxnnxtxxtvvxxxxvtxxxxxxxxxxxxxxxxxyyyyttttnVxuwttw8wttrrrww8;%%%OO%Ow+i5E`_DS2FddwAZtynxVxyxxxxxxyyyyyynVwwuuyAFVu>%%OOO%%%%%%%%%%%%%%%%%%%%%%%%%OO%%%%%%%%OO=OoDSL_LY+4fSYfffYK4ILS2eyddC22f4LUD>OO*&%OO%%%%%%%%%%%%%%%%O%%;>6DDu&V>>>>>CLDEa2d3>;yw>yywyw>3Fu=OOO&&OOD^DV3&O&&O%%%%%%%%OOOOOOOOOOOOO%8t;-%%OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO", "OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO%%%%%OOOOOOOOOOOOoOOOoOOOOOOOOOOOOOOOOOOOOOOOOOOooooooooooooooooooooooooooooooooooooooooooooooooooooooooOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO%-OO>>=+@oo&%%%%O%%%%%%%%%%%%&%&&%OOO+Ys^`]YeOOO%&>>;u>O=3D3dd2@==OO%Y[_{{^fS2@o=)Lo+oO%oOOOOOOO%%%%%OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO%%%%%OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO%%OOOOOOOOOOOOOOOOOOOO&wDDyyyVyynVxttyxxxxxxnnxxxxxxxxnnnxxxxxxxxxxxxxxxxxxxvvxxxxxvttwVytyw8ttttuttxxxxxxxxxxxxxxxxxxxnnxxxxtvvxxxxxxxxxxxxxxxxxxxxxxyyyyytttwyxt88wwVuwtvvrw6ww6>&%O8%O%o2YfY[`L4dw=iyyny86xxyvvvvxxyyyyyiiiyVyuFDFVw&%%%%O%%%%%%%%%%%%%%%%%%%%%%%%%OOO%%%%%%%-OO%&=sSoRY5SSSSff42sgghEoeC3==f2.LLe3OO=&O&%%%%%%%%%%%%%%%%%%%%%-%>AFdOdy>we33ofLDD2+e3wTUedVw3wOuw;O%O%>%OCTCoO>O%8O%%%%%%%%%OOOOOOOOOOOO;yA86>&%OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO", "OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO%%%%%%OOOOOOOOOOOOOO&O&OOOOOOOOOOOOOOOOOOOOOOOOOooooooooooooooooooooooooooooooooooooooooooooooooooooooooOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO%-%OOOooo3o3dADE@@@+YRhPfgE+++42fKYKSf`_)LLYDd&&33=edd=>OOOOOOOO%%%%%%%%OOOO%%&=..2SYSJ3OOOO%%%%OOO3=oo=OooOOO%> hggo.oYS=ooSS=oOoOOOO*OOOO%%%%%OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO%%%%%OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO&AAyyyVyyyxytttxxxnnnZZxxxxxxxxnnxxxxxxnnnnnnnnxxxxxxxxxxxnnxxxtZVZywxttttttyxnxxxxxxxxxxxxxxxxvxxxxxxxxxxxxxxxxxxxxxxxxxxxxxvvyyyyyttttyyuwww8DZwwttrw6wwww>&O%-%%4o@EY.f`H^^iVyyyVDDtxyvttvxxyyiiiyyyVDAwAA>%&%O%%%OO%%%%%%%%%%%%%%%%%%%%%%%%OOOO%%%%;%%&OO=OSLhp2YYYEsf2LSPSsIgLCUD=4+5K_UooOO;OO%-%%%%%%%%-%%%%%%%%%%%-%wVAyOeFe3e3=FdoUS+2=CoLT=FeuVA&>68w%%%OOOooOoO%OO%%%%%%%%%%%OOOOOOOOOOO%>xAwww>&OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO", "OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO%%%%%%OOOOOOOOOO%%%O%O%OOOOOOOOOOOOOOOOOOOOOOOOOooooooooooooooooooooooooooooooooooooooooooooooooooooooooOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO%%;-%&OOoo3O&%>UKLh.LEoSsSLKY2@2@+@X5$sp55SDeyV>o4fCLLoooOOooOOO%%%%%%%%%%%OOOOO$..@..+oOOOOOOOO>%OO>O=oOO&=*OOO$ ..5+@o+=OSU=3FOo=OO&OOOO%%%%%OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO%%%%%OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO>*OOOOOOOOOOOOOOOOOOOOOOOO>uyAyuxyuyytttxxxxxxnnxxxxxxxxxxxxxxnnnnnnnnnnxxxvvxxxvxxnnxxxxtwxwtF8tttyxxxxxxxxxxxxxxxxxxxxxxxcnxxnccxxvvvvtvvxxxxxxxxxxxvvttyyytttyytttytwAxwwrrrr8rwwww>%--%Oo5.$S)she^HVyiAyyTTuxyttttxxiiyyyyyy>UD>VwOOOOOOOOOO%%%%%%%%%%%%%%%%%%%%%%%%OOOO%%%%-%O%&Ooo$sff@o42a2LhfS'[Kp5hYTS=+2gffo@OO&OOOO-%%%%%%%--%%%%%%%%%%%>%yyxuDAdy3>3O22dL<<2eUeFUDUFFFDwuwwx%%%OO%%Oo>&O&%O-%%%%%%%%%OOOOOOOOOO%%;rx8rtw&OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO", "OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO%%%%%%%OOOOOOOOOOOOOO&O%OOOOOOOOOOOOOOOOOOOOOOOOooooooooooooooooooooooooooooooooooooooooooooooooooooooooOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO;%%%O%OOO3O&Ou;O@SL)ELg.@hf.`_d=.S@. #gRsLdow>OwS4LF+3o+oooooooo%%%%%%%%O%%%O%%%.+@@@2o@oOOOOO%%O%%%O=o=oOOOO%&% $X.o.+.@oo3oFeCE=o=OO=OOOO%%%%%OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO%%%%%OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOVu&OO%OOOOOOOOOOOOOOOOOO&%uuwyuyVyutyytytttttvxxxxxxxxxxxxxxxnnnxxxxxxxxxxxtvxxnttxxxxxvxtyZ>wUAttyxxxxxxxxxxxxxxxxxxxxxcvvnZxxZZnxvttrrtttvxxxxxxxxxxvvttyyyyttttwwtyt86>6wtttrrrw8ww,&-%%>o<+oS[P2f@=eiwVVwDU8xyttttxxyyyeyddVF)^DDeOw%OO%%O%%%%%%%%%%%%%%%%%%%%%%%%%%OOOO%%%%%8-OOOO=L22RJ@$h4$L^h4shsILTfodCYES..=@oO&O%>O%O%%%%%---%%%%%%%%%%%>%yuuy(U>ee333L4DSf+4224xt;6w%%&%OO&OOO%&%%-%%%%%%%%%OOOOOOOOOO%%->66rtw&OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO", "OOOOOOOOOOOOOOOOOOOOOOOOOOOO>uw&OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO%%%%%%%%%%%%%%%%O@oYEFLYJ=+@TE253)Lf5fE_P4a+=V>tFOwweO@=OOeO%%O-%%%%%%%%%%%%%%%%OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO%%%O%&>wo.@oooo=OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOooooooooooooooooooooooooOOOOOOOOe===o=deOOOO%%%%-%OOOO%%=%uDuyuyuyyyttyytttvxxxxvvtvvxnnxxxxxxnZxxxxxxxxxxvvxxxvvvvtvxcnxxxxyyyuyyyxxcccccccccccxxxxxxxxxxxxxcccxxxvvvvxcccccccccxvxxxvtyyyttuuuy32CdoDD;V;8ZwwZuuw>>w8>O%%%OO=ey^)ae<22wyyuyyuiyV&yyuwVyyyyyyyuw>>&&OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO%%%%%%%%%O;%%%%%%%%%%&%%%%%%%%%%%%%%%%--%OO4Ye4e3w,%%-OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO&OO%OO>OOOOOOOOOOOO%%%%%OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO", "OOOOOOOOOOOOOOOOOOOOOOOOOOOO%>&OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO%%%%%%%%%%%%%%%%o+o@+o42YUf+fS.5/]LSEYSLKEY@=,y>%U3oe@O=OeV%%w>%%%%%%%%%%%%%%%%%OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO&;)]2oo4OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOooooooooooooooooooooooooOOOOOOOOooOOoo=oOOOO%%%%%%%%%OooOy3Ayuiiyyyytutyvtttvxvtttttvxxcxxxvttttxxxxxxxxvtttvvttttvxxxxxxxxxxyyyyyyxxcccccccccccxxxxxxxxxxxxcccnxxxxvvxxcccccccccxxxxxxvxxxyyyuu3F3=2e2ey86y8>y6wuwwwww>OOOOOOO=oLYo=d4=yu>>VVu>wwVVw>V,yynAV,%%%OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO%%%%%%%%%o5o4fY2CS54JLKYJfShK)_R5LLoo*%%%%%%%%%%%%%%%%%%%%%%%%%%%O%%%>yy6>V>%%FVwy>eUOLCC55Lf^LTD=FFyytwxwAyiy&&%%%%%%%%%%%%%%%%%%%%%%%%%%%%O%eESo4e&O%--OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO%OO%&%O%OOOOOOOOOOO%%%%%OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO", "OOOOOOOOOOOOOOOOOOOOOOOOO%%OO%%OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO%%%%%%%%%%%%%%%%O==oo@+oo4SL4SS4ddo2SKSJ5SS@e=iu=V=Se4e@3=&VuOO6%%%%%%%%%%%%%%%%OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO%)L.o+=oOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOooooooooooooooooooooooooOOOOOOOOOo==O@=oOOOOO%%%%OOOOOOO3Lwuy>w,yyyytuuuvttttttrttttttvvxxxxvttrxxxxxxxxttttttttttvxxvttxxxxxxyyinxxxxcxxxxxxxxxxxxxxxxxxxxxxnnnxxxxxxxxxxxxxxxxxxxxxxxvxxxyyyyuVOCdUd42u>yy;>wyuyuwww6;>%OO%%OOo=daef@F,VVuuwuVwVUU>uD>ywyFV&O%OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO%%%%%%%%%2foJL.f@5$SSgLffK2$SYKS@o4oO&%%%%%%%%%%%%%%%%%%%%%%%%%%%%O%-;%->&OO;O,y>>O3Cfdaf5shSUFYLCdwwuuwtuwVDi%%O%%%%%%%%%%%%%%%%%%%%%%%%%%%%o3UFd5=OOO%-OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO%OO%OOOOOOOOOOO%%%%%OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO", "OOOOOOOOOOOOOOOOOOOOOOOOO%&%%&&%OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO%%%%%%%%%%%%%%%%Oo====oO=ooa2DLo>oO+oo4h#hD42OwV=odY2)^2LTDLu>8--%%%%%%%%%%%%%%%OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO%%%OOO%2.2C3wuudyuyyytuuuttttttttttttttttxvttvxxvvxxxxxxxxvttxxxtxxxvttrrvvxxxxyyVVnnxxxxxxxxxxxxxxxxxxxxxxxxxnnnxxxxxxxxxxxxxxxxxxvvxxxvxxyyyyyuy3ee[L+d8ty>ZFwDutuuuyyww&O%%%OOd=S=LEfoFAy,yVyyyyD_Aw>yyuyxw%O&%%%%%OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO%%%%%%%%%@Y^+ELfSfSKgfSLY5SSDSoo5o=O%-%--%%%%%%%%%%%%%%%%%%%%%%%%-%%;-O%;,O&>%Ow>ee4o^J4S4SLYd5CSDduyuutwy,uAu%%O%%%%%%%%%%%%%%%%%%%%%%%%%%&&o+SCS=oO&%%%OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO%%%OOOOOO*O%OOw&OOOOOOOOOOO%%%%%OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO", "OOOOOOOOOOOOOOOOOOOOOOOOOO%OO%%%OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO%%%%%%%%%%%%%%%%;OOOOOo=oe@oOoO=O%=o=+@fELoSF3duadaF2^Y2odwV%>n8>-%%%%%%%%%%%%%%OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO%%%%%%.S.@o=oOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOooooooooooooooooooooooooOOOOOOOOOOoo=3=oooOOOOOOOO%OOo@=V3VywyyywwuuuutytrrttvtttttttttttrwwrtvvtvvxxxxxxxxxxxxxxxxvvvxxtttyyyyyVinxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxvtttvvttyyyyyyyuuF%d_EF=yu>-DUVDwwwwtVZV6-OOOOOOo3dD3)S5DFywyiuwyV>UwV,yyyy>%O%%%%%OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO%%%%%%%%%of)oSE44Y)YSKsU4@dSYO@=o%&%%-%--%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%O%O>O>ywd32LE4$42SJSDCdCFUUVtVtyyw,yw%%%%%%%%%%%%%%%%%%%%%%%%%%O%%=o4LT2oo3o=U3OOOOOOOOOOO%%%%%OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO", "OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO%%%%%%%%%%%%%%%%&O;OO&O*OOOoeoOo&O%ooo..S`JEY;6>;-%%%%%%%%%%%%OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO%%+sS2@OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOooooooooooooooooooooooooOOOOOOOOO=+=ed=OoooOOOOOOOOO@eSUUeLV,w&>>wwwwuyyrwwrttttttttttttvtrrtttttttvxxxxxvtvxxxvxxxxxZZZtttyyyyyyyyyxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxvvvvxxxxxxxxxtttttttttttyyyyuy>eC>d^dw-ww8nVyuuw>6utu6>-%%OO%3e^D3Od4wVAVViyVuF,>DUD>;w8%O%%OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO%%%%%%%%%@odT+oS@2fLpLKKLfd@D=Oo=%O%%-%--%%%%%%%%%%%%%%%%%%%%%%%%O%%OO%%OO&%O>O;de3=fhWISL^]ffLY3dFUDyyVuuyy>yi%O%%%%%%%%%%%%%%%%%%%%%%%%%OO=OdY)T2@oo%O%%%%%OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO%%%%%%OOO=o=o@LOOOOOOOOOOOO%%%%%OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO", "OOOOOOOOOOOOOOOOOOOOOOOO%%O%%OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO%%%%%%%%%%%%%%%%OO-OO&%O>O%>OOwO>O&&ood+.SLEd^{d4Ls54fLa4yV;ww>&%OO%%%%%%%%%OOOOOOOOOOOOOOOO%%%%%%%%%%%%%%%%OOOOOOOOOOOOOO%%o5[CoO=%OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOooooooooooooooooooooooooOOOOOOOOo@OO33OoooooOOOOOOoo@dLEFdDyuuwu>>>8wwyyww8wwwwwwwutttttytttxxyutttyyyxxyyttyyytyyyxxnVVtttyyyyyyyyyxxxxxxxxxxxxxxxxxxxxxxxxyyyyxyytttttyyyyyyyytttttyttyyyyyyyy,udu==YE>wuy;;y>uuw>>ww8uw88>&%%O=TCOdUeww>wFDVuy>,U^F;&O%%%%%%%%O%%%%%%OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO%%%%%%%%%@<=S2=fYS@f5LS5)E5d^doOOOO-%-%-%%%%%%%%%%%%%%%%%%%%%%%%%O%%%O%%O%>%O&%&dC32fLY`_Tf4=UCFVVyuw>uywuwAVuy&O%%%%%%%%%%%%%%%%%%%%%%%%%OO=o3SE]CoO=&O&%%%%%OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO%%%%%%OOOOooo@=oOOOOOOOOOOO%%%%%OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO", "OOOOOOOOOOOOOOOOOOOOOOOO%OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO%%%%%%%%%%%%%%%%-%%%%%%%%%O%O&OO%-OOwooo+oo@SYDeSs5.ffSYY+4eu>>wwww>%OO%%%%%%%%%OOOOOOOOOOOOOOOO%%%%%%%%%%%%%%%%OOOOOOOO%%%OOO%&ooL@3&O>%%OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOooooooooooooooooooooooooOOOOOOOOo=OoOOo+ooooOOOOoO%Ooo2edDD>u>,>>>>>>wuyw8888w868wwtttttwwwynxt8ttttyyxxxyyyxxyyttyyyttttvyyyyyyuuyyyxxxxxxxxxxxxxxxxxxxxxxyyyytyyttttttyyyyyyyyttttyyytyyyyyyyyyi;F>UDUyF%>DAt>>8wwyVZVtwwuw>%O=OeEoddfwyuwuuwuuV;w%OO%;%%--OO%%OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO%%%%%%%%%1o<3F4@f4Ef2KLK$L4hY+o=o&O>O%%-%%%%%%%%%%%%%%%%%%%%%%%%%%%--%O%-%O%%%%>y=3fPLJ`p,ww>3uuV>DDww,%%%%%%%%%%%%%%%%%%%%%%%%%OOO>o@3L]S2=3y&&%%%%%OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO%%%%%%OOOo+Oddo=OOOOOOOOOOO%%%%%OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO", "OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%O%%%%OOOoo@oo=ee=__`Y25@SfC3d3Oy>>uw&OOO%&%%%%%%%OOOOOOOOOOOO%%%OO>OO&O&OO%>OOwO&OOOOOOOOOOOOOOO%+o^eOuO&%%OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOooooooooooooooooooooooooooooooooooooooooooooooooooooOOOOOOOOoooo&wAV;>w&yuww86>666666888w6t86uwtttuwutttyD6nw8ZtZ6untxAwunx8nVDyvA8yV>VAuTAuuxwttwtut8%wVtxxtxVyxttttttutxZAnuwxtttyyyxxxxytttttyyyytuuuywuVFw&G6>uZAywww6>6wwwwV8;wu,&%&O>d4Td=VDFwww>,;&%%%%%O%%%%%%OO%O%OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO%%%%%%%%%*=oe3oLYoffSL4sSsSPP.2.@oOOOOO%%%%%%%%%%%%%%%%%%%%-%%%%%-%%-%OO%%%%%%%>3e3S^_[[hEEYf3e,&wuwyu>uyuuVAVuAu%%%%%%%%%%%%%%%%%%%%%%%%OOOOoo3C^D323dd*%&>OOO;OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO%%%%%%OOOO=@4oeoOOOOOOOOOOO%%%%%OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO", "OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%OOOOoOoo@3=OUT)ETELY5fe=ey&>;&O%>>%%&%%%%OOOOOOOOOOOOOOOOOOOO&OO&O%O%%OO%OO&OOOOOOOOOOOOOOO%o@3OOOVw%%%OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOooooooooooooooooooooooooooooooooooooooooooooooooooooOOOOOOOOooooUV>,wwwwwww6>>>>66666666w-yZ6yFwttuwutttFDwF8ZwytVAwtUTwnyxVV%yAwnyDDVydeD,yVxwZVwtxZy%>88yntutwyttttyttttnVxttVxytttyxnVnxyxxxxtyyuyAVuywy%&wu/Dy-;ww>;>>688wwuAt8wuw>>O3*dDT@3w,>wyu>&&%%O%%%O%%%%%%OO%%%%OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO%%%%%%%%%oOO=e=yedY))[`foCD=&uy>wwww3u3AyyyywV%%%%%%%%%%%%%%%%%%%%%%%%%%OO%Oo=eC33e=>FL3%%%OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO%%%%%OOOoo2^T5ooOOOOOOOOOOO%%%%%OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO", "OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%OOOOOoOOoOOOooo4wdw&%>%OO%%%%OOO%OOOOOOOOO%%%OOO%%OOO%O%%&OO3=OOOOOOOOOOOOOOOOO%%oYC%=y)y%%%OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOoooooooooooooooooooooooooooooooooooooooooooooooooooOOOOOOOOOOoooCuO%>&%>>>>>>>>>>>>>>>>>%>>u>wFwuwwwwwwwZwywVyuyuwuwwFD>uyyuxuDUuxuVAUCFCC>uu66xuyVwyV;%--wyyxVyyuuuyyytyyyytuyVyyuuwuyynyyyyyyuynywyFAwF&wwT^y%TF6>wyuu>www>>wuZt668>>>>VwCdd3LUuO&;%OO%%OO%%%%%%%%%OOOOOOOOOO%OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO%%%%%%%%%%OOOLUoeDfSL)EYg!IP'`..+ooooOOOO%%%%%%%%%%%%%%%%%%%%%%%%;%%%%%%-%%%%%%%%=e=fYoS)4@d2Ow;u>wuwwye3ywuuyuA>%%%%%%%%%%%%%%%%%%%%%%%%%O%*OOO>=O=w%OdUDwO%%%&%OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO%%%OOOOOOOoL4oo=OOOOOOOOOOO%%%%%OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO", "OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO%%%%%%%%%%%%%%%%OOOOOOOOOOOOOOOO%%%%%%%%%%%%%%%%OOOOOOOOOOOOOOOO%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%OOOOOOOOOO%%OOOOO=o&oo=ofSodTdOdy,>%%%O>A%%%%OOO%OOOOOOOOO%%%OO%&=OO=&OO&w%O=o=O&%OOOOOOOOOOOOO%&Ow3OO%D>%%%OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOooooooooooooooooooooooooooooooooooooooooooooooooooOOOOOOOOOOOOooOey>>&&w;;;;;;>>>>>>>>>>VTy>n>wwtwwwwwwwu-uuAwyyV8uVu>wyVVyyFADAxVu>3TFDydVAVVAAyVZuuy6u%O%>wtywuuutyyytVytuuuyyuuuuuuwwytutyyuwyyuwyZn6AVA;wZ>yVywww88wwutw>>wwr6;;;->>%Uw%=oO^UwOOOO&&%%%%%%%%O%%%%O%%%%%%OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO%%%%%%%%%&OOOUT=2DCoS__PI!PK)^..oooOOOOOO%%%%%%%%%%%%%%%%-%%%-%%%-%%%%%%%%%%%%%%%we>CEoS`SSL=&V-688twweeeuyAVy>y%%%%%%%%%%%%%%%%%%%%%%%%%OOO%%%%&V>O&&%>uA>OOOO%%OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOoOoooo+oOOOOOOOOOOO%%%%%OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO", "OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO%%%%%%%%%%%%%%%%OOOOOOOOOOOOOOOO%%%%%%%%%%%%%%%%OOOOOOOOOOOOOOOO%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO%%%%%%%%%%%%%%%%%%%%%%%%%%%%OOOOOOOOOOOOO%&%OO%%OO&OOOod_DdeeC=O>>&&%OwD%%%OOOO%OOOOOOOOO%%%OOO%@o2e=+OOTLOC+33@%%%OOOOOOO%OO%%&eoyOO>%O%%%OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOooooooooooooooooooooooooooooooooooooooooooooooooOOOOOO%%%%OOOOOO>du&>>&>&&&>>>>>;>>>>>>>yTt;V6wyyuwuuwwuyD>UyVwy6yVu>wyux>wDUVywyVAVwUeFAdFFAVxuV>8unw-ywwnVwwwwwuuttuuuyytutytuuuwwuyyxyytyyyyuyuwuyuww8u6ww>;-%;8ww>>66wuw6ww68666>>>,>;&3ooeeu%O&O%;%%%OOOOOO%%%%%O%%ww,;%OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO%%%%%%%%%OOO%ud3+oUELh52Qshss@@=oOOOOOOOO%%%%%%%%%%%%%%%%%%%%%O%--%%--%%%%%%%%%%%>wyLEoodf+LUu8wxr;w,3e2awuAViwV&%%%%%%%%%%%%%%%%%%%%%%%%%OO%%--;Au%O&>%O&&>,%OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOoOo=O3o+oOOOOOOOOOOO%%%%%OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO", "OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO%%%%%%%%%%%%%%%%OOOOOOOOOOOOOOOO%%%%%%%%%%%%%%%%OOOOOOOOOOOOOOOO%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO%%%%%%%%%%%%%%%%%%%%%%%%%%%OOOOOOOOOOOO%O%%%%%%%%%%%;&o3of]^eS3ddy3==OO=OOOOOOOOOOOOOOOO%%%%%OOOoodf3=@o4So^ESFo%%%%OOOO%%%%O%%&DOO>>OO>%%%OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOooooooooooooooooooooooooooooooooooooooooooooooooOOOOO%%%%%%OOOOO>=&>w%O&&&;>>>>>;;>>>>>>%8->w>ywtw>ww>>wwD6Uyuuw6uw;>yu;w8uVFuywtuFDyV>L/FCVVw>wwuu>nDy;6VDDy6uywwuuuwwuwuuutyyuyuwwwyAFuuuuuuuuywwyywwyuy>tw-ytuw88wwww;8w>>ww6rw866>>>&>>&&=oo%%;&OOOOOOOOOOO%-%%O%%%%&&&%OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO%%%%%%%%%%OO&O=C32FT5+2h@fsES2oO%O%%%%%OO%%%%%%%%%%%%%%%%-%%%%O%8>%%--%%%%%%%---%t-&yC+=@+oeDd>6xt6nwwe3dywuyAFUu%%%%%%%%%%%%%%%%%%%%%%%%&%%%%---6t8--;->%,Vi>&&OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOoooooooo=oooooOoOOOOOOOOOOO%%%%%OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO", "OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO%%%%%%%%%%%%%%%%OOOOOOOOOOOOOOOO%%%%%%%%%%%%%%%%OOOOOOOOOOOOOOOO%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO%%%%%%%%%%%%%%%%%%%%%%%%%OOOOOOOOOOOOOO%%%%%%%%%;%%O%OoO@=^Yoed233&O=&OOOOOOOOOOOOOOOOOO%O%&>>&%e4DC+=+oUT25@o<@%%%%OOOO%%%%O%%&3=&&O;wO%%%OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOooooooooooooooooooooooooooooooooooooooooooooooooOOOO%%%%%%%%OOOOOO3iw&>w&&>>>>>>;;;>>>>>wwuyu>w,u>;,,;;,>wwuy&ywVuwuyu>wyAV>,>y>u6yVVVuDTACuAVZDwFDwVUDw&>iV,>wwwwuuwwww>wwwwuuuuuwwuyVAwuuuwwuyuwuuuwwuuw;wwww%uw>->86>>uyw>wwwtr6>;>>>u%AyOO&oO%OOO%&>O%%%%%&>w>%O%%%OOOOOOOO%OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO%%%%%%%%%>%O&%3SC22<+.EYpfL`h+OO&%%%%%%%%%%%%%%%%%%%%%%%%%%--%O>n8-%%%%%%%%%%--%%6>nDu>=oo%>&&wu&OO%OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOoooooooooOOOo>%oOOOOOOOOOOO%%%%%OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO", "OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO%%%%%%%%%%%%%%%%OOOOOOOOOOOOOOOO%%%%%%%%%%%%%%%%OOOOOOOOOOOOOOOO%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO%%%%%%%%%%%%%%%%%%%%%%%%%OOOOOOOoOOOOO%%%%%%%%%%%%%%%%O=oooFdo==%=OOOOO&OOOOOOOOOOOOOOOOOO%>wuw,JSUfo@=@5L^d23oo%%%%%OOO%%%%%%%&%OuFwOO-%%%OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOooooooooooooooooooooooooooooooooooooooooooooooooOOOO%%%%%%%%OOOOOO>;O>w%&&>>>>>;;;;>>>>>>uw>Ai>Dyw>wu>>w>,>,&ywu>wwww>>y>>>wV>ywwwwwFDd=>3Fwyuwy,wyuww>AVw>>wyy,,wuuw,,w,ww>>wwwwuyyyyuwuyyywwyVwuu,wuu>w6x6-www>8www886wVZy>6wwxt6;>wwww,Fw&&o3%&OO&%O&%%&;>>wuy8%O%%%O%%%OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO%%%%%%%%%OO*%OOdDdpSgQ^P4sSEoO>O-%%%%%%%%%%%%%%%%%%%%%%%%OO%%OO>Zu>%O%%%%-%%%%%%%>tFU%OO&o@o=O8D;;ZUu>Dd4uuiyVyAO%%%%%%%%%%%%%%%%%%%%%%%%O%%%---%-%%6Ax--;O,Ai&O%OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOooooooooooOOoOOOOOOOOOOOOOO%%%%%OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO", "OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%OOOO+=2==3==o2oO3OO%O%-%%%oOO%%OOO@.PYWR52L^sYh hKjs55IE+.@.. XX X.W_.o+o=%VwO;;;>>;;>>>>66wwty8;tFA8;w8uu6%xxFew3wwwwwu;wwwAy;>e3==TF3wwyw>wwwAV>6nw-yVw>>w6>>>>>68wwwwwww8wwwwuutyyyyyytuuuut6wwwuwwwwwwww8ww88888888;nw>w>>>DZw;;>w8tw>>;%%%%%OO%%->u88uytuty,%O%%%%OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO%%%%%%%%OOO%%%%%-%%>&O>C4oY)KPIpLCTFOO%-%%%%%%%%OOOOOOOOOOOOOOOOOOO%OO%%&%%%%%%%%%%%OOOO==SD%O>%%--%%8ww>3332ff^DedSuO&O%%%%%%%%OOOOOOOOOOOOOOOO%O%;&%%O>oO=Cde@=FDSw**OOOO%%%%%OOOOOOOOOOOOOOOO%%%%%%%%%%%%%OOOOOOOOOOOOOOOOOOO%%%%%%%%%%%%%%%%OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO%%OO%%%%OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO", "OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%OO*=o=LL4o3@2oeOoOO>&O%%%%oOO%%%%O@h)_IP.L)5#{[ss$XgK$.YP.2YKs# # X_fE^SToF`d==OO;%%%%%OOO%%%%%%%%%%%%%%%%OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO&;OwVw>;3OO>>O-;>;;>>6>>8wwwwwVxtw6>6u--6ywVwnyw,wwwww,ww>uywA3oe3eT>>,&>AV>%uF%8V%>x%Axwwwwww>>>>6wwwwww88wwwwwuuuttutuuwwwuuwwwwwww88www6>>888888888yy>uV>>ww6>>6ww>66wyu>%%>>>>>8wuyuuyyyyyy>%O%%O%OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO%%%%%%%%OOO%%%%%%%%%%OO2CfYYph#REE)L>%O%%%%%%%%%OOOOOOOOOOOOOOOOOO%%OOO%%%O%%%%%%%%%OOOOoDFOO&%>O%%%%>w>&yFF4oS_EV33%O&O%%%%%%%%OOOOOOOOOOOOOOOO&OO3wOO=OO33U)Y3&Cy%%OOOOOO%%%%%OOOOOOOOOOOOOOOO%%%%%%%%%%%%%%%%OOOOOOOOOOOOOOOO%%%%%%%%%%%%%%%%OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO%%%OOOO%OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO", "OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%OOOodEYSYDfSoo@@O&OO%>%O6OOO%--%OC]RKsL4^RfRW`^#sIsSW)Y]]^{[))$$hE)Y^Lff4^{U+&O&O%%%%%OOO%%%%%%%%%%%%%%%%OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO&&O>u>wFwwy>Ow-;;;;>>8>6www666>uw>-68;V6;w>w-uuw>www>>>u>&iu&DV=e&L/&w&,OFFwwFnwwwwyxuZyww86ww>>>>68wwwww88wwwwwwwuuuuwwwwwwwwwwwww8>>68w8>>>666688888w>wy>>V;>>68w8>>wwwww88wuuwwuyyxyyyyyuuyu>%O%%O%OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO%%%%%%%%OOO%%%%%-%%%%OooDL.hPL##Ldfoo%>;%%%%%%%OOOOOOOOOOOOOOOOO%%%%OOO%OOO%%%%O%%%%OOOO=YU=&>%OO%%%%;>;,%oCTSS5TyOOOO&O%%%%%%%%OOOOOOOOOOOOO%%%%&&;wOO&OO3%ODAL`=od=OwOOOO%%%%%OOOOOOOOOOOOOOOO%%%%%%%%OOO%%%%%OOOOOOOOOOOOOOOO%%%%%%%%%%%%%%%%OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO%%%OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO", "OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%O>&o=deL`{`YTdoOoo*=OO%OOOOO%--%OoSYs$ESL5)'.#)WXKI]]g]``]EPfK^Y)E5RY^@f=DLF=O>w%%%%%%OOO%%%%%%%%%%%%%%%%OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO%O%%O%&O%OOy%Ow>--;;;>>8>8www668%8w6>w>%Fy--%w-w868w8>>www>>Vi&u&wwoww=OVU&yw,,iw>w>%wywuw6>>>>w>>>>>68w88888wwwwwwwwwwwwww8888w688w86>>8www866w>6666888>wtnw>yuyyuw68uyuw6>>wwtuuuuuyyyyyyyuutyw;OO%OO%OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO%%%%%%%%OOO%%%%%%%%%%&OoL^.4sgYPY32&3%OO%%%%%OOOOOOOOOOOOOOOOOOOOOO%OO%%%%O%%%%%%%%%OOOOSDdOOO%O%%%%%----uyVDFC+e%O&OOO%%%%%%%%%OOOOOOOOOOOOO%%%%VuO%&OO,OO==u=VS33%=%OOOOO%%%%%OOOOOOOOOOOOOOOO%%%%%%%%%%%%%%%%OOOOOOOOOOOOOOOO%%%%%%%%%%%%%%%%OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO%OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO", "OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%OOO3=o=ddYY2dC2ooOO=*>3O%@%O%%%%OSPYgshLE4+2@ #IEIRK'PE@+DLSS2s4sShY[^4o++o=o>>O>%%%%%OOO%%%%%%%%%%%%%%%%OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO%%O%&ODTu%>,OO-;;;;>>68www8wwuVyw6>>>w66>>>Aw>66rt8>wyw;wwwdw&>eLC=Oe&yU%w&>>>-Fn>nw%ywww6>>>>>>>>>>66>>6888ww68wwwwww>6666666>>>666668www6>68>>>66888>y%>A>Owtyuw6uVF>wuutuw8uuuuuuyyynVxyyyn>&OO%OO%OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO%%%%%%%%OOO%%%%%%%%OO%OoeL25SEKSaoO&3OO>%%%%OOOOOOOOOOOOOOOOOOOOOOOOOO%&>&%%%%%%%%%%OOO%dd>OFwO&%%%%%---%%%=3F2oOO%>%OO%%%%%%%%%%%%%%%%%%%%%%%%%-ZtO%;%%%&O%VAF>d==OFV&%OOO%%%%%OOOOOOOOOOOOOOOO%%%%%%%%%%%%%%OOOOOOOOOOOOOOOOOO%%%%%%%%%%%%%%%%OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO%%%OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO", "OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%O>OOOoo2o@SY5dC2=2oo&U^De=&%%%%;2E[IPE5SS+@s2XLW`KsLEhO;OO%%%%%%OOO%%%%%%%%%%%%%%%%OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO%%%%u3%&O>y%;;>>;;>>www86wwtVw>,,;>y%>>>>Fu&69tvr6wn>&yw&yy>deVeTUO3OuOuuu>wu;DUwyD>www88w>;>>>>>>>>>>>68888688www88>>668866>>>>688w>>6>>>>>>>>>6688w>>8>AD%wwuw6wyZwwuwutyuyyyyyyyytyyyyyyy;%OO%OO%OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO%%%%%%%%OOO%%%%%%%%OOOOOoJ2@SL44Fe3O>%&&%OOOOOOOOOOOOOOOOOOOOOOOOOOOO%&;>;%%%%%%%%%OOO*=wCTUL3=O%%%%%%-%%%ADddO=%OOO%%O%%%%%%%%%%%%%%%%%%%%%%%--;6-%-%O>O>OO&ODu3o3oOeeOOOO%%%%%OOOOOOOOOOOOOOOO%%%%%%%%&&%%%OOOOOOOOOOOOOOOOOOO%%%%%%%%%%%%%%%%OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO%>>%OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO", "OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%OOOw=OO%ooSCf&%%;ud^Ygs5SS@+SSRKP)LPE2f+hffT3dJEESSE`WSPE^Ede&=OOw%%%%%OOOO%%%%%%%%%%%%%%%%OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO%OO%OOOO&>%u%O>;>>>;;>>68ww8www>&&ww>>w>w>&%y>>99rrr68u>&w3ed3wSF>=)^3dw3>yu>%&%%uxwwyw>>>>wuw>>>>>>>>>>>>68886688ww866>>6www8666>>>668>>>>>>>>>>>>6688y>VV%D^Vwuuw>>6wuuw>>uxVyyyyyyyyuyyuutw>&%OO%OO%OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO%%%%%%%%OOO%%%%%%%%%%OOO+LC5DLSo>*%&VywOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO%&>&%%%%%%%%%OO%&=CdTUdo=o%%%%%%%%6%wV>OOO&&OO%%O%%%%%%%%%%%%%%%%%%%%%%----%%%-%%-%-O%>%w&=oOOUFO>OOO%%%%%OOOOOOOOOOOOOOOO%%%%%%%%&%%%%%%OOOOOOOOOOOOOOOOO%%%%%%%%%%%%%%%%OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO%OO&ww&OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO", "OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%O>%OOOO=@eoS^Ye=>-->VS^pf$$sJDfPgL`^fY`S452ho53>e=e=JeSUsoEEDheu33%>O%%%%%OOOO%%%%%%%%%%%%%%%%OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO%OO&%O;%wD&%;;>>>>>;;;>>6www866w>>>>>>;>>>>%3%>9769w6;>>>&>DFO2Oe33==yOy>w>&>>>ww;->>>w>>;>wVVy>>>>>>>>>>>6886688www866>>8wwww8ww86>>>>>686>>>>>>>>>688>w>ut;ATwuuw>>6w->wwwyyuttttuuuuyyyyyyw>%OOO%OO%OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO%%%%%%%%OOO%%%%%%OO%%OO%O=^de^Y@>%O>AyFDOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO%&&%%%%%%%%%OOO%=>yweeU2oOO%%%%%%%--;-%OuOO&&%%%O%%%%%%%%%%%%%%%%%%%%%%---%-;-%;;%%%O;Ow>uo3^S&3C%OOO%%%%%OOOOOOOOOOOOOOOO%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO%OO;uu>OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO", "OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%OOOOOOoo@4CFd2eCTE=o&Oo3>F%DFDCEs#s#T)f2^_KoEfDfL442=feO3>w=e3+dL^2])sd=Vy>8--;%%O>OO>%&%O%OO&%%%OO%%%OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO%>w3&O&,%-;>>>>>;>u8>uwuud>wdOOyyO33>>%>r9-x6%Z%uOwdDD32eoeeO33&w,;&>w,>>>>68>>>>>>>>>88>>>>>>>>>>>>>>>>88888888>>>>8www8666666666666666>>>>>688u8>wwwtVww>>6ww668wwuuuuuuuwwwuuyytwtyw%OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO%%%%%%%%%%%%%%%%%%%%OOOOOOeDDe@oOOyVFedwOO=@oO@oOOOOOOOOOOOOOOOOOOOOOOO%OO%%%%%%OO%%%%;>CLeL^EooO&%%-%%-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%;%-%%%%%%-%%%O6%uVC/AFeu3y%%OOOOO%OOOOOOOO%OO&OO%O%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%O%%%%OOOO%%OOOOOOOO%OO%%OO%OOOOOOOOOOOOOOOOOOOOOOOO%%OOO%%O%OOOOOO%OOOOOOOOOOOOOOOO", "OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%OO+OoO==+o3dDU=%=OoCyyw^T3SEP$X5shs({f2Td2f2dSif3LEe=CdediF=fYSLLhA>w>>twu%%6&O%>oOOO%%%%O%%OOOO%%OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO%;>&>,ww8>;;>6w8>wwyVw;=DVOO>3&3yA>3w>O%x8%8>-w>e=dYUee3D3Vww=uV>&uw%O>>>;;-;;>>>>>>>66>>>>>>>>>>>>>>>>66666666>>>6688w6666>>>>66666666>>>>>688ntwututyw8668w86wwwwuuuuwuuwwwwuuuuwww>%OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO%%%%%%%%%%%%%%%%%%%%OOOOOO&ee&oO&OA3w=3eC=oOOOOOOOOOOOOOOOOOOOOOOOOOOOO%%%O%%%%%OO%%%%&>wDCdd^.+&OOO-%%;%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%--%%%%6>%%---%%%O>>>y;iVCdODdyw3%%OOOOO%OOOOOOOO%OOOOO%O%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%O%&&&%OOOOOOOOOOOOOOOOOOOO%%OOOOOOOOOOOOOOOOOOOOOOOOOO%%%OOO%OOOOOO%OOOOOOOOOOOOOOOO", "OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%OOOoooOO%=ed&&OOo3wuwDFO55ss#fLY$^^fHfeUVyyAA3eFJ4fSTAywwnxty-%;OwOO&O%&O%>%OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO%>3wwww>;;>8wuuVw8twy=Fd3w33>dLF%&>wO66nyyu&,>ODTDESdOD/LOVO3iVdw>>;%--%-;8uy>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>66666>>>>>>>>66666666>>>>>688nuwuytuw>8ww8688wwwwwwwwwwwwwwuuuwwuw>%%OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO%%%%%%%%%%%%%%%%%%%OOOOO%OO%%OO%OOVCdFo2Yeo+=OOOOOOOOOOOOOOOOOOOOOOOOOO%%%OO%%%%OO%%%%%&3Od^fL+.oO&%%--%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%OO%%OOOO%%%%%%%O>OO%V&3uoVw=ODFw%%OOOOO%OOOOOOOOOOOOO>u3%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%OOO%;>;&%OOOOOOOOOOOOOO&&OO%%OOOOOOOOOOOOOOOOOOOOOOOOOOOO&%O%>%OOOOOO%OOOOOOOOOOOOOOOO", "OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%OOO%OO%&O%O%%%OOoOwVt>wC4fSfXL^EEShSSLTL3eS3333<33*13VVy&VySFaCFTDVynZxrn>-O%OooO%%%OOO%OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO%OOO&>>>>>>>>>>>tyAy>uyA3w&3e%=3CFwd%=w=u>w>=yV3=LLU3SYLe33>>3VVwAA>%,w%---;>wyn;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>866>>>>>>>>>>>>>66666666>>>>>688uw6wyyuw>8ww>>8wwwwww8>>wwwwwuuyuutyw-%-OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO%%%%%%%%%%%%%%%%OOOOOOO%%%%%%%%%OOF_fY4=U4o%&OO%OOOOOOOOOOOOOOOOOOOOOOO%%%O%%-%%OO%%%%%%%o3D@SL@=o=&O%O%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%&O%&>>O%%-%OO%%O%O,UTwOOOF>ODEy3%%OOOOO%OOOOOOOOOO%OO,yw%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%OOO%&>&%OOOOOOOOOOOOOO%3w%O%%OOOOOOOOOOOOOOOOOOOOOOOOO&OO%%O>d%OOOOOO%OOOOOOOOOOOOOOOO", "OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%OO%%%OOO%&OO&%O%OO;wxyVCCEKs$fLYL+fSdUD3,eA=33e23Sdouu>>:uwDy14eZy>6txxnZZTA%OdOO&%O>%OOOO%%%%OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO%%OOOO%%>>>>>>>>wwVVVAyyDLCeeCCe===T3e3OODeO333oCY)Eof4oODA=ywOO>>>,;%%>>>;;;;>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>866>>>>>>>>>>>>>66666666>>>>>688ww8wynyw6ww>>>wuwwwwww6>wwuuuuyyyuyy8%%;OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO%%%%%%%%%%%%%%%%OOOOOO%%O%%%%-%O3oC]oeD33ooOOO%%OOOOOOOOOOOOOOOOOOOOOOO%O%%%%%%%OO%%%%OOO>=o4)LYU@oO%%O>%%%%%%%%%%%%%%%%%%%%%%%%OOOOOOOO&O%%wy%>%%%%%%%OOuDTUOO&Od3&CD%3%%OOOOO%OOOOOOOOO%&OO%;O%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%O%%OOO%%OOOOO%OOOOOOOOOO%3w%O%%OOOOOOOOOOOOOOOOOOOOOOOOO&OO%%O>d%OOOOOO%OOOOOOOOOOOOOOOO", "OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%OOOO%%%%%O%OO%oOO-tuweE_Ysgh.TSE+diOyy,w>y=32d@SD1V%Oq6>uV1*w1nn;>w6vZwVTyyO&o%%OO&&O%OO%%%%OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO%%OOOO%tuw>>>8wwwVyyZyVdCe34ddO=3eE3de=4d=fa2UET[Tede4SFVe=y^CV&&&;>>>>;;;;---->>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>66>>>>>>>>>>>66666666666>>>>>688888wuyu>686>>6wwuuuuuuwwwwutttyytttw;OO%OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO%%%%%%%%%%%%%%%%OOOOO%%%O%%O%%%%Oo=TdoCfoo=&O%-%OOOOOOOOOOOOOOOOOOOOOOO%O%%%%OO%%OOO%%%OO&oJQ)pKJsf=o=%O%%%%%%%%--%%%%%%%%%%%%%%OOOOOO%%O&ywyyO%OO%&&OOO>FF>Oo=>o>CFOO=>%%OOOOO%OOOOOOOOOO&%O%%O%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%O%%%OOOOOOOOO%OOOOOOOOOOO&&OOO%OOOOOOOOOOOOOOOOOOOOOOOOOOOO&%O%>%OOOOOO%OOOOOOOOOOOOOOOO", "OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%-;%O&O%O%OO%OwxtwS){SPK.Y4SE4eeeO>,,%e===ia3Oo1wqu>wx:>uu1AFwwt;wvxFD>Uyo3&O>wOO&OO%%%%%%OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO%%w8>>>8ww8wyw>uyAde3Cd33=3edS=edTS+S^L@e3@f+oo3=CD33^DydV>w>&>yu%-;;>>>>6>>>66>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>688w66666666>>>>>688>886www>>>>8www8uuuuuuuuwwutuutytyu>%O%%OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO%%%%%%%%%%%%%%%%OOOOO%%%-%%%%%%-o=o4Ts5d@@==OO%%OOOOOOOOOOOOOOOOOOOOOOO%O%%%%%->%%OO%%%%O&oDsRS.$gEFo=&O%%%%%%%%---%%%%%%%%%%%%%OOOOOOOOOCYDAC*d>%O%%O%3=deo=%2o3o>TL%&O%%OOOOO%OOOOOOOOOOO%O%&%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%O%%%%OOOOOOOO%OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO%%%OOO%OOOOOO%OOOOOOOOOOOOOOOO", "OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%--%%OO%O;O&O;Oo=O-yDFL)E$K#s^U`S@Ded>i>,u&3+e3++=eowu:rtq6uV%y8V>8v6rvrZA%yFd>wuT^y>A>%%%&&%%%OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO%OO%%%%OO%->ww6>w;8>wVuwSd4e2@34@=e3e4S`C@+2.oo@o@o+=o2==Od33wOud&Owy,&>>>>;;>>>>>>86>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>68www66666666>>>>>688>wwwwuuw>>>wuu8>wwwwwwwwwwuuuuuuyxt;O%%%OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO%%%%%%%%%%%%%%%%OOOOO%%%%O%--%%%@o@=h5@.@ooOO%--OOOOOOOOOOOOOOOOOOOOOOO%O%%%%-wx&%OO%%%%&oOOOOwFO&Oo=oOoo=o=>O3O%%OOOOO%OOOOOOOO%OO%OOOO%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%O%%%%OO%%OOOOOOOOOO&OO%%OOOOOOOOOOOOOOOOOOOOOOOOOOO%%OOO%%O%OOOOOO%OOOOOOOOOOOOOOOO", "OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO6%8%wd4fYLgYXg))Au6tVyww>>>>6www:->wyuq>>::>wuw>uw,uyu>*VVVVyuuuy>ADiFJy,y3O%&OO%%%%%%%%%%%%%%%%OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO%&;>3w3>>www>e%3d)Ldd33D&ddD^3>&%OOO%O%%OOO;wwwwyAAy>%ww%%Du&>&&,8;&>&&;;;;;&>;ww;;>>>>>>>6>;>>>>>,>>>>>>>>>>>>>68wwwwww8866>86>6686>wwwwwwwwyuw8wwwwww8wuytuwuuuwwuyyw&OO%OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO%%%%%%%%%%%%%%%%%%%%%%%%OO%%%OOO%%OO%%%%%%%%%%%%OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO%%%%%%%%OO%%O%VUw&O==OoOOo=Oe{U4eC3dVTO;%%%%--------------------oeoO2=oCdDU33eede&==O>yuOOOOOOOO%%O%%%%%%%%OOOO%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%OOOOOOOOOOOOOOOOOOOOOOO%%%%%%%%%%%%%%%%%%%%%%%%%OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO", "OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO%%%>eDS2`RPKK`'PDVuyVyuuwwwwtyytw>-:>>>qwq>6wwwquyywu::>wwwwwwww>Owy:uV:uFUD,O%%%%%%%%%%%%%%%%%%OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO%&&>;;>wyyyu>%>=Ud3=%eTLDeoo;&%OOOO%O%%OOO&>wwwuVAAAV%&%u&%&&>>%%%&>;;;;;;;;>;-->>;;>>>;;;>>>>>>>,>>>>>>>>>>>>>>6888wwwwwwww66668888wwwwwwwwuw6>8wwwuuwutyytuuuuwuuyuw&OO%OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO%%%%%%%%%%%%%%%%%%%%%%%%OOO%%OOOOOO%%%%O%%%%%%%%OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO%%%%%%%%%O%&OO&uyu&yLF====OooT/233dwyUwO%%%%%---%%%--%%%%%%%%%%%=oo=ooT)CSUdde33Ddy3OO*OOOOOOOOO%%O%%%%%%%%OOOO%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%OOOOOOOOOOOOOOOOOOOOOOO%%%%%%%%%%%%%%%%%%%%%%%%%OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO", "OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO%6%O%e4Y[LIs[{ sDVutytuuyyuutuw6yw::>>>quuwqqqwwuADui>>w>>>>ww,>w1wu1uywVyDF%O;O%%%%%%%%%%%%%%%%OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO%OOOOO%%>>3uyuw>O%&o3%OoOOdw==O=%OOOOOO%O%%OOO%&wwwwwuyVw&wuV%>%O>w,,ww>,>>;;;;>>8-;yy;;>>>w>-;w>>>>>,>>>>>>>>>>>>>>>>>>wwwwwwww668w888wwwwwwwwww>>>6wwwwwuwwwwwuuwuuuuu,;%O%%%OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO%%%%%%%%%%%%%%%%%%%%%%%%OOOO%%%%%%%%%%%O%%%%%%%%OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO%%%%%%%%%OO%%OO%wwVu3DDoOO=3ooU]E=d=>Fu%-%%%%%-%%%%--%%%%%%%%%%%OO3oS^]Ue3d3e3ede>>=O%=%OOOOOOOO%%O%%%%%%%%OOOO%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%OOOOOOOOOOOOOOOOOOOOOOO%%%%%%%%%%%%%%%%%%%%%%%%%OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO", "OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO%--%C45`_L^_]RShFVuuytttyyyuww66uq>qqq>6wwwq66qq>VF>V>>:wwwwww>>qwwqwwwuV**>%&>O%%%%%%%%%%%%%%%%OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO%OOOOOO%>>>,,>%OOOOooOOoOoOOoOO&OOOOOOOOO%%%OOO%>>>>%OO%Ow%uOO>w>>;;,8>&8,>;;;>>-w>8AV;>>;wny>-w>>>>>,>>>>>>>>>>>>>>>>>>wwwwwww868ww866888888888>>>>8wuuwuuww>8wwwwwuuuw&%%O%%%OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO%%%%%%%%%%%%%%%%%%%%%%%%%OOOO%%%yu>%OO%%%%%%%%%%OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO%%%%%%%%%OOO%%%&wOwV=eT^O=o=3ee^_242ODF%&%%%%%%%%%%--%%%%%%%%%%%O>&C]DO*e=w3eeFD>&%OOOOOOOOOOOOO%%O%%%%%%%%OOOO%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%OOOOOOOOOOOOOOOOOOOOOOO%%%%%%%%%%%%%%%%%%%%%%%%%OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO", "OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO%%%,UCU^2+EE+@]LAVyyyyttwwuwwwyV>::qq6>>>>qq6>>6>yV>Vyu>uwwww,>:>wqquwqyiiyyVw&&%%%%%%%%%%%%%%%%OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO%%%OO%%&&%OOOO*OO*OOOOwO=OOOO%%%%OOO%%%OOOOO%%%%%OOOuVTUy%%UV&%;;;>8,>;;;>>%w>>nu%>>;wny>-w>>>>>,>>>>>>>>>>66>>>>>>6666666688ww86>>wwwwwwww6>>>wwuuuyyuw8wwwwwwuuw,%%O%%%%%OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO%%%%%%%%%%%%%%%%%%%%%%%%%%OOO%%%yu>%OO%%%%%%%%%%OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO%%%%%%%%%%OOOOO%%w&>y3F_e>o3O=DLL3af=/YO&%%%%%%%%%%%%%%%%%%%%%%%&O%;3&AuuwVuuwFV>;%O%OOOOOOOOOOO%%O%%%%%%%%OOOO%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%OOOOOOOOOOOOOOOOOOOOOOO%%%%%%%%%%%%%%%%%%%%%%%%%OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO", "OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO%;%&VD[LdfD+2fY4Vxyytuw66ww6>>uy6>:>6>qu::>6qq>>uuuuuViuwuuuww>>qwuuyuuNyAVyVu%;%%%%%%%%%%%%%%%%OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO%%%%OOOO%%%%OOO&OOOO%OOOO=*&%%%%%%OO%%%OOOOO%OOO%%%%,&&&y&>OTV;>w,;8,,>>;;>>;w;%>>;w>>>w>-;w>>>>>,>>>>>>>>>>6666666688888www888ww8>;uuuuuuuuw86wwuuuuuuww666,,wwww>;OO%%%%%%OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO%%%%%%%%%%%%%%%%%%%%%%%%%%OOO%%%%%%%%%%O%%%%%%%%OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO%%%%%%%%OO%%OOO%Oy>O>w>e]Ueo&O3eSSdL4EDO*%O%%%%%%%%%%%%%%%%%%%%%>w>uy>>&>wy>>wDyO%OO&&%&OOOOOOOO%%O%%%%%%%%OOOO%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%OOOOOOOOOOOOOOOOOOOOOOO%%%%%%%%%%%%%%%%%%%%%%%%%OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO", "OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO%;%%>U{ToL33S=Seyytuww6>www6>>>>wq6q6>qw>>>>qwq>wwwA%uw>wuyyw,,w::>q>>quuw>&;w,%%%%%%%%%%%%%%%%%OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO%%OO%%%%OOOOOOOO%OOOO&OOOOOO%%%%%%%%%%OOOOOO%%OOOOOO%O>O>uu%u&%>,&%%>>>>>>>>w6>;>>>w>>>;;;>>>>>>>,>>>>>>>>>>>>>,wwww,,,wwwwww>>wuuw>wwwwwwwwwwwwwwwwuwww8>>>wwww,;%%%%%%OOO%OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO%%%%%%%%%%%%%%%%%%%%%%%%%%OOO%%&OOO%%%%O%%%%%%%%OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO%%%%%%%%OO%%%%%%&OOw>>w>LUE3O=oe((fL4F4@OOOO%%%%%%%%%%%%%%%O%%&&O-wyw%wtwwuwwyUZ&>%O%OOOOOOOOOOO%%O%%%%%%%%OOOO%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%OOOOOOOOOOOOOOOOOOOOOOO%%%%%%%%%%%%%%%%%%%%%%%%%OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO", "OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO%O>&3FL2o`/o33=dtttuwuuuuw6wttw>qqqwq:-:uq>>qwwqyiFTwVuw>uyuw:>>q>qw>>wyywxy%wV%%%%%%%%%%%%%%%%%OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO%%OO%O%=OOO%OO=OO=OO%OOOOO%%%%%OOO%%%O%%%%OOO&O%w&>OV&>ww>&>,&;>>>>>>>->6>6>%>>>>>6>;>>>>>,>>>>>>>>>>>>,wwwww>>>,,wwww>>wyyw>wwwwwwwwwwwwwww8yuwwww8>wuuu>%OO%%%%OOO%OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO%%%%%%%%%%%%%%%%%%%%%%%%%%OOO%%&%%OO%%%%%%%%%%%%OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO%%%%%%%%&%OOO%OOO%&%O&udydVE3O3O]]ff5C4oOOOO%%%%O%%%%%%O%%OOO%&>tx6-n>>;w6uyt6Z%%;OO&&O;%%%%%%%%%%O%%%%%%%%OOOO%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%OOOOOOOOOOOOOOOOOOOOOOO%%%%%%%%%%%%%%%%%%%%%%%%%OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO", "OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO%O>O%O%O>Oy,uD^of^S3o*y%yAy6yw%wwuyuwwwuwwq>>>>>wuuq>>qq:VDFywww>ww>**>wt>:>q>:>wVyu>8y;OOO%%%OO%%%%%%%%OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO%%%%%OOOOO%>&&>&;&&;>>>;&&>>>>>;>>>>>>>>>>>>>>>>>>>>>,,>>>>>>>>>>>ww,wwu;w>>wwwww>w>y8w>>8w8>86>uwwwwwwwwwwwwwww>ww,&OOO%%%%%%%%OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO%%%%%%%%%%%%%%%%%&&&%%>w>VuAwo3Oo)^SL@fd+&OOO%%&%O%OO;>OO>OO>;www86>;>66t6wtwxx-;&%OO%%%%%%%%%%&%OO%OO&OOOwO%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%OOOOOOOOOOOOOOOOOOOOOOO%%%%%%%%%%%%%%%%%%%%%%%%%OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO", "OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO>%OOOOOO>C=C3CDaDFOyu%:wwxw;uw-w>6wwwwuuwq6>>>>6uuuw>:>qyyuwuyyu:>,,>>>wtq>q6>::6yuuwwyw&%%%%%%%%%%%%%%%OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO%%%%%%OO&%OO>ww>>:**:>:*>>>>>>:*>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,,,3wwuwwwy3uuuy&y;Vwu>wuwwwwuuuwwwwwwwwwwwwwwVy>%OO%%%%%%%%%%OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO%%%%%%%%%%%%%%%%%%%%O%&>wy>VC3wO@@)(Yf2<@OO&&OOO%OO&OOOO&%%%,T^&w8868wwww8tytnn;%%O%%%%O%%%%OOOOO,%%wwOO%O%%O&O%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%OOOOOOOOOOOOOOOOOOOOOOO%%%%%%%%%%%%%%%%%%%%%%%%%OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO", "OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO;O%%O>AFdieDC+SLe*euu>;>u>;uw>t>>>6wwuwqqq66qqq6>quw6qtiiu>:>wu%*>www,>rrq6666>6y6wu6www>%OO%%%%%%%%%%%OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO%OOO%%%OO%&&>&O%ww>>>>>:>>>>>>>>>>>>>>>>>>>>>>>>>;>>>>ww>>>>>>>>>>>>,3,>>O33u;uwwwuuyyw>>uyw>wuuuuuwwwwwuuwww6>>Au%OO%%%%%%%%%%%OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO%%%%%%%%%%%%%%%%%%%%O%%%3w>uFV33f4.LY_YF=oO;%O%OOOO>%O>w,uO&Vu>w666688ww8wyyuyx6%%%%%%%%%%%%%%%%%>O>O%O>&OO>%>O&%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%OOOOOOOOOOOOOOOOOOOOOOO%%%%%%%%%%%%%%%%%%%%%%%%%OOOOOOOOOOOOOOOOOOOOOOOOOO%%%%OOOOOOOOOOOOOOOOOO", "OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO&%OO%OVD+ddTF>uwwytwwwuuw6qqwuuuww>:>tyqwNuyyu,>>>**>www,>>qq::qwq6t>wy66wuw&%O%%%%%%%%%%%OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO%%%%%%%%%%%%%%%%OOOOOOOOOOOOOOOO%OO%%%%%O&www>O>ww>>>>>>:::>>>ww>>>>>>>>>>>>>>>>>>>>>>>w>>>>>>>,3>>>,3>>>;uyw3uwu>y>V>u;wuuw,wuutuuwwwwwwwwww>>-w&OO%%%O%%%%%%%%OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO%%%%%%%%%%%%%%%%%%%%-&%%&wy>ee>F)s+45e]]FOO&OO;%&OOOOO>,O_/O3A>>68www6>>wuyuwuu8>;%%%%%%%%%%%%%OOOyT>%%%OO%w;>O%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%OOOOOOOOOOOOOOOOOOOOOOO%%%%%%%%%%%%%%%%%%%%%%%%%OOOOOOOOOOOOOOOOOOOOOOOOOO%%%%OOOOOOOOOOOOOOOOOO", "OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO;OOOwDOuf4CTUDSwwx;>>>6w6wyuwwuuw>qwtyxyuwuqwyy6>uuw>wyVu*>>>>,ww,:qq::qwq>w>txwtuuw&%%%%%%%%%%%%%OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO%%%%%%%%%%%%%%%%OOOOOOOOOOOOOOOOO%%%%%%%&OOO&w%&::**%*:>**::>>,w>>>>>>>>>>>>>>>>w,>,>&;,>>>>>>>>3>>>>,>>>uuw%,>>iVwy&u>ywwwwwuyyytuuwwwwwwwww>-%OOOO%%%O%%%%%%%%OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO%%%%%%%%%%%%%%%%%%%%-;&%%,d;>>*DJ.)Do@){Ty&>OO-O%%%OOuVu>FDu>uuwwwwwwww88tuwwuuww>-%%%>>>>;%%%%O&%AT%&&OO%iww>%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%OOOOOOOOOOOOOOOOOOOOOOO%%%%%%%%%%%%%%%%%%%%%%%%%OOOOOOOOOOOOOOOOOOOOOOOOOO%%%%OOOOOOOOOOOOOOOOOO", "OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO%O&&ATuA52EYfJS23Oe1qrrxwwww6wwwuw6wuuwwwuyyyyuwwqquuq6wuwwwuuu>>>>:>>wuqqq::66>ww6t86t;>>&%%%%O%%%%%%%%OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO%%%%%%%%%%%%%%%%OOOOOOOOOOOOOOOOO%>>%%%%>Ou>%>O%******:>::::::::>>>>>>>>>>>>>>>>>&>>>>wyww,,>>>>>>>>>>>>>u>&3ewwuVAFyuww;>3>3uuutuuuuuuuwww8>-%%OO%%OO%%%%%%%%%%OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO%%%%%%%%%%%%%%%%%%O%%-%%O&u>3w%V^f)YoSe3Dw%&%%-%O%-%>VAtV%tV>yn%>>>wwwww,yw>yVyuw>%%%;8wwww8wyywwAwOO&O%%>Fwu>&O%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%OOOOOOOOOOOOOOOOOOOOOOO%%%%%%%%%%%%%%%%%%%%%%%%%OOOOOOOOOOOOOOOOOOOOOOOOOO%%%%OOOOOOOOOOOOOOOOOO", "OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO>&yAyw5JT45JS5=3eOqtt0twuuwwwww66wwuuwuuuuwwqq>>>qwwwqwyiw*%:w>>>:*>wyrq>666>>t66w%6Z;&%%%%%%O%%%%%%%%OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO%%%%%%%%%%%%%%%%OOOOOOOOOOOOOOOOO&ww&OO%>>UD>>&>**:::::>::::::**>>>>>>>>>>>>>>>>&%&>,>uVwww,>>>>>>>>>>>3w3w3TDVd>uGFD>u,>uyu,>wuuuuuuuttww>;%%%%%%%OOO%%%%%%%%%%OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO%%%%%%%%%%%%%%%%%%%%%%%%%%,wuw>3^LdoCOo&>%O%%%%%---OO;w-uwywuu%%&;>>>,wwwywwVVw;-%%%->>>>8w6uVVy&VwO&wOO%&yuw>%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%OOOOOOOOOOOOOOOOOOOOOOO%%%%%%%%%%%%%%%%%%%%%%%%%OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO", "OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO&O%VVD>S[$SSR)h@13Ow:0zuwww>>w>wwwwwuuuuwq>>>>q>qq>>6>:www>>>>**:>:*>uit6:6wq6qt-6t-xUV%OOOO%%%%%%%%%%%OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO%%%%%%%%%%%%%%%%OOOOOOOOOOOOOOOOO;uw&OO%&ODFO&>>%*::*%*:%*::>::*>>>>>>>>>>>>>>>>,>>w>&>ywwww>>>>>>33>>333Ow3)F3O>VAF>33VyFDAw>wuuuuuutyyuw;%O%%-OOOO%%%O%%%%%%%%OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO%%%%%%%%%%%%%%%%--%%%%%%%%>uw>w>224d2=e=O&&%%%%;-%%%%wAD>yAuAFuV,,,,,,33wywwAV&OO%%;>>-%%%%O%>;O&O%&OO&%%O%w&>O;%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%OOOOOOOOOOOOOOOOOOOOOOO%%%%%%%%%%%%%%%%%%%%%%%%%OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO", "OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO%%>uw%O%%%OOOOOOOOOOOOOOOOOOOOOOO3O=eC^e])4of[_C=>>>qqwwuq>>>qq>wqqqqqwwytwq>>6q>>>qwwq>wwww:%*ww:>>>yVwu3:>Ou,,:wO>:wUu:%*1=@@+@=OO=&O%%--%-%6%%%%%%%%%%%%OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO%%OOOoooo2S=&OV&>-%->;;>;;;---;;>>>>>>>>>>>>>>;;>>>>>688w6>>886>3o>do3w=3eAOOoOO--DDeCL5sfd33>6yxyuuwwwww>%%%%%%OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO%%%%%%%%%%%%%%%%%%%%%%%%OOO%%%%%%%%%%%%%%%%%%%%%OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO%%%%%%%%>%%%wFA%&,VV3Fw&O&%%;%%;;%--%%D^8wAu>ywuw&&;ww&wiV%wDV%%O>-%;%O-%%;O%-O-OO%%%%%%O&>>>&%%>%Ot8OO>%%%%%---%%%%%%O%%OO--%O%%%%OOO%;%%%%%%%%%%%%%%%%%%%%OO%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%OOOOOOOOOO&&OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO", "OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO%%>uu>&>&&%%%%%%OOOOOOOOOOOOOOOOoo3UF4dD^ffeC_Y3>>>>qqqwwq>>,qq>>>>,qqqwqqqqwwuuuwqqwuuuw,wuuw,ww>>wwuu>yw>w*w>ww,uu*,wO*wyw1ieoei3OOOO%%O%%%OO%%%%%%%%%%%%%OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO%%OOOoooCDdOyuO>%->;-->6;;;;;;;;>>>66>>>>>>>>>;;>>>>>>>>666>>>>>%33=33=S3wCOOOOO;OuDd2fY-%%%%%%OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO%%%%%%%%%%%%%%%%%%%%%%%%OOO%%%%%%%%%%%%%%%%%%%%%OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO%%%%%%%%%%%%wDDwwOuA>DwO&&>%--6%%%%-%%;t8yuu>>u>>uu&>yu&w;AOT^OOO%%-yw%O%%-O>y-%O%%%OOO%%&>,>&&&-->O%8->>;-;>>%O%%->-OO%%%%%%%%%O%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%OOOOOOOO%=>>&%%%OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO", "OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO&,>&&>;&&%%%%%OOOOOOOOOOOOOOOO=3^^ULFd_1qqqwq>>,qq>>>qwwuuwqwwwwwqqwuuuuuuu,>>uuw>>wwwww>%****yuu,w>wTD*>%,:>>=3edFdFC3=*OO%%%;%OO&OO%%%%%%%%%%%%OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO%%OOOOoo^Lo=3uOw%>>;-;;%;;;;;>>>>>>88>>>>>>>>>;;6>>>>>>>>8w6>;>>=3&OeeOC>3dOOOOO%uu3e2dY4ffe3>8yytuuuwww-%%%%%%%OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO%%%%%%%%%%%%%%%%%%%%%%%%%OOO%%%%%%%%%%%%%%%%%%%%OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO%%%%%%%%O&&O>DDu>3>wdDOwwO;%%%6%---%%;;%wuwuuwuwu>>uwuiyi%u>Vw&>%%O>AA8%%6w%wV>%O%%%OOO%O%&>&%%%O-O>V/>>w>>wyyw--%wy;%-%%%-%O%%%%O%%%%%O%%%%%%%%%%%%%%%%%%O%%%%O%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%OOOOOOOOO*==%OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO", "OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO&%OO%%%%OOOOOOOOOOOOOOOOOOOOOooEU=JS<`CF2=++3111>>qqqw,>>,qq>>qwwuuwwuuuwwq6>>wuyuwqqww,,>>:*>uuuu:*V%>*ww3www%Aw&y&>w%y3OE`YdSFeuw&%%%OOO&OOOOOOOOOO%%%%%%%%OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO%%OOOOoo_^=oO3wO>>;-6yu%;;;;;>>>;>>>>>>;>>>>>>>>www86>>>>ww8>-;>eO3S3e3O3wd=oOO=6AyO3a44[^4wCu;yuuuuww>;%%%%%%%%OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO%%%%%%%%%%%%%%%%%%%%%%%%%OOO%%%%%%%%%%%%%%%%%%%%OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO%%%%%%%%%>>O%yVw&Vw&VACDe&O-%%%-%%%OO%;>&%>&>w%>u&%uw&yV%AwU)OOO-%O;yZyw-yy>>w-%%O%%%%%%O%%&%%OO-O>%/Uy>;-;>w8-%-%yV-%>%%%%OO%-%%%%%OOO%%%%%%%%%%%%%%O%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%OOOOOOOOOO%%OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO", "OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO%O%%OOOOOOOOOOOOOOOOOOOO%%%OOOOO=o3SeLDT^Se2e=*=111>>>>qq,>>,qq,>>,qqq>>wwqqqwww6wuuq66quuuw>>wu%wwww>uDVFw*>>uww>>**,3wuw>&dEEaCFd13uwweOOOO>OOOOOOOOOO%%%%%%%%%%%%%%%%OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO%OOOOOOOLE=D/>O>;>--wAZw----;;>>>>>>>>>>>>>>>>>>wwww866>6www>;>6O=L^O=uy3uy=O%O>Aw>w32=@dddye&;xuutyu8-%%%%%%%%%OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO%%%%%%%%%%%%%%%%%%%%%%%%%OOOO%%%%%%%%%%%%%%%%%%%OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO%%%%%%%%&>;%O%>uu,uw33^D>yO>>x%6OO%-%OO%wVw=>=>>>yw>&>y>y%VuuOwO%O%%>wtu>uw>;%%-%OO%>>&O%%&&%%%%-O-OU--wwwww>-%O%O8t%O;%>;%%%-%O%%%%%O%-%%%%%%%%%%%%%%%%%--%%O%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%OOOOOOOOOO%%OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO", "OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO%OOOOO%%%OOOOOOOO%%%%OOOOOff4)ESCCC@o213w11>>>>>q>>,,,qqq>,qqqq,>uuwqqqqqtuwq>6wuuyyuwuVA*,,:%%wAyDiuFuy3*yyy>OyAV>%uC=o=ed41wwwuCO3o=OoOOOOOOOOO%%%%%%%%%%%%%%%%OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOo&o^_O%w%>>--6ww-----;;;86>>>>68>>>>>>>>wwwww8668www>>>6e=OCwLwO>>>OO*O&V%>y=O3223=O>uwuttyyu>%O%%%%%%%%OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO%%%%%%%%%%%%%%%%%%%%%%%%%%OOOO%%%%%%%%%%%%%%%%%%OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO%%%%%%%%%&%%%O%yVww>3OTe=C>>>Dw%%OO%>&%OdTdewOC=>VuVVwyiDADO%&O>OO;6;>uwwwOO-%%%%OO%>,&O%%%%%%%%OwO;O>O>wutw>--;%O;8%%6>w>;;-%%%%O%--%O%%%%%%%%%----%%%%%%%%%OO%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO", "OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO%%O%%OOO%%%OOOOOOOO%%%%%OOOoDY4_^S4e33=wu1*>>>>>>1q>>,q,,qqqqwwwwwwuuuwq>>:yuwwwwwwwuyuuyyyw>>*%*ww*ywVUyu>>>O>u>wwyOFDOeUd=33wewwydeLo@oooOOOOOOOOOOO%%%%%%%%%%%%%OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO&=&ywOiO*>>:%O%*::***:::66888866>>>>>>8wwww866>>6866>>>>Owe>&e&u3&O*Oe*&w;wwO=e2@33eu>;uuuww>&%OO%%%%%%%OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO%%%%%%%%%%%%%%%%%%%%%%%%%%OOOOO%%%%%%%%%%%%%%%%%OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO%%%%%%%%O&OO&%%wyy>%wOwVDVd>&VA%O%%OOOOO&TLe3eeOyF>AD>yD/yw>O&>O%O>uwuy,yV&O%O&O%OO%&&%O%OOOOOOOOO%O>>%%%%&&%%%%-%%>wwutu>>>;%;yy;O%%%O%%%%%%%%%----%%%%%%%->;%O%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO", "OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO%OO%%%O%%OOOOOOOOOOOOOO%%%%%OOOO+=S5h5)L&e&>uw>>>>>>>1q>>qq,,qq>>>,qwwu>,wwuwwqwwuyyuq:>wwwww:Ow:>wwVAu:>OuL*>>>>>>w>*w*y>>Cd3f33113,yDST_44dC2========OOOOOO%%%%%%%%%%OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO>V>Ow>*%>w>>:>>::::::>>6ww6>>66>>>6ww66>>>>>>6>>>>>>>>eAO3ww>y3*weDewu,>3>====4>O&wwwuw>&%%%O%%%%%%%%OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO%%%%%%%%%%%%%%%%%%%%%%%%%%OOOOOO%%%%%%%%%%%%%%%%OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO%%%%%%%%%>OO&&O%u%wy*3eT^dCu;%D>OiFwOO&OOS^ddT23VUw;y%uFA%u>O&O>&O&uwyy>VDV>OO&O%%%%OOO%%%%%%%%%&O>%O&O>>>>>,>&%%%%;yyuyw>>w>%wDUV%O%%%-%%%%%%%%%%%%%O%%%O%>uu>O%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO", "OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO%%%%OOOOO=ooS4f)Ad3=>333>>>>>>1q>,,qq,,>>>q,>>wuw:q>wu:Nuuu>quu,**uyD_::wVAy,w,:>>>>>&>3w>3uu>>>>>u*CdO=DY41*Vuuda4a2f24C^@YSLL@oeOOOO>O%&%O%%OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO%%&&>>w3>:O>>%>%*>Ow:Oy%;>68866866>>>6www>>8w>>w>>>>>>>>>&>d%>>>,,3wuuw3u>&>33=3>3>=&>wwyAwOO%O%%%%%%%%%OOOOOOOOOOOOOOOOOOOOOOOOOOO%%%OOOOOOOOOOOOOOOOOO%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO%%%%%%%%%%%%%%%%8,yy%C>TCT^OdVO&%>ww&OO&O3e33de=VO,wuDAw,uD&O%O%;O&ywUAO>wu,&%OO%%OOO%%&&%O%>&&y&>w>%O%;yyuww>>&%->wwwww>>6wwwww;w88%%>%-%%--OO%%%%%%%%%%%%%-----%%%%--%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO", "OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO%%OOOOOOo3=D(fC@yu33ww3>>>>>>>1q,,qqqq,,*:,wwqqq:>u>qyqiyyuqqq>**uuiVU>VuVVuwww,**&,w>>,w,wuu,>3wOAuO+4>>686668>>>>>68w8>>ww6>>>>>>>>>>&>yDyyw>wwwwwwwww,,,>>>wFFVuwwww%AFw%%%OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO%OO%OOO%OOOOOOOOOOOOOOOO%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO%%%%%%%%%%%%%%%%%uwyF__E]TV3y>O>%&>;%OOOO&=O%3=OwuwOwT/yVyD&%&O%O%u>yu>%>ww>%OOO%%OOO%%&w&O>Vy>;%&>&%O%&>>>>>;>>>>>wyyu>88wwwww6>8>6;-w;V8%O%%%%%%%%%%%%%%%----%>;-%%%%O%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO", "OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO+=eDdd22ww3wuuw>11>>>>qq,,qqqq,,wq,qqqq,1>uwqq>ywq1wwwqq>V>yuw>Auuuww,www>>,w3>,w>>w3>&>>>ULe=4oSd33OwJDofC2fSLaCa4EL^F^FY]o@2oO=%OO%&%%OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO%%%%%%%%%%OO>&:wOO>O*OOO>wOO>>68>>>6>>>66666>>>ww8>>>>>>>>>>%&>y&;&>,www3wyVww,>>,w,wuw>>>w,dw&OOO%OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO;%%&%O%>OOOOOOOOOOOOOOOO%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO%%%%%%%%%%%%%%%%O-O>>DT3_UOde=&%O%%%%OOOOOOOOO%OO&O%OwDyV,yO%&OO;%>%U,%w&wyw>&%%%%OOO%%%>%O>Vy&OO%%%OOO%O%&&%%>w;8uu6>6wwwwwww8>uu>ww>w>Fy-%%%%%%%%%%%%%%%%%%%%%---%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO", "OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO4deedOTDuw,wwuwww,>:>>qq>>>,,>>>Vyw>>,qwu*>w>%%w>*>wuwwy,y*uy*,uuw>ww>>,Ay3>>>>,,>:>>&&>udFu3===Ce=31>Vuf4d43LfDLY5EYd53SC]Yo2oo=OoOOO%OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO%%%%%%%%%OOO%%Owy>>>:w*UuO:V>>>>>>>>>>6886>>>>>8w8>>>>>>>>>>w>%%O&>w>>>>>wuyw,;&>uw%%&>>,ww>)D&&;&;&OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO&&%OOOOOOOOOOOOOOOO%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO%%%%%%%%%%%%%%%%>-%u>od=dC3eCeOO%%%%%%%%%OOOOOO*%OOu&O&wwO%OO%O%%OO&/A>O%wdVyw;%%%OOO%%%O%O&>%O%OOOOOOOOO%&%%%&>6wuw>>6wwuuuwwwwut>uyww8uuu8-%%%%%%%%%%%%%%%%%%%>>>-%%%-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO", "OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOooooOOOOLT%e=ydOw>>wwuwww,>:>1qq>>>>>>>>Vyw>>>qqw:*:*>u>w>1ww>>q>>>>uww>w>>ww>>>Ayw>>>>,w,>,,>>3O>yyA43=3e13y&wVLSFe2LdfCDfFSCSfLS$Cao+=oo@>OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO%%%%%%%%%OOO%A>*Vw*u%ww_F>O%;>>>;;;>>>686>>>86>>>66>>>>>>>>>w>&&ww,;w>&;>,>&>ww>wuw&,ww,>>>&U3O>OOO%OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO%%O&yu%OOOOOOOOOOOOOOOO%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO%%%%%%%%%%%%%%%%%O%O3%434=edFeOO-%%%%%%%%OO%%OO%&O&%&w%%&OO%%&O&O&%OyuVO%>uyuw>%%OOOO%%%O&&%%OO&OOOOO%OO%%OO%%%%Vw%>yAy>wwuuwwww>u>wVtuu>wyyw>-%%%%%%%%%%%%%%%>6tuw>%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO", "OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOooooooOOedDOdy>;->6wuu,>wq>>1q11>>>>>>>>wq,,q,>>*w3**VD111111**>>>u*:uwu>,,www,>w,>3w3>>,>>>>>>,y>ww1=FCFS==w:&Vfd2CLdLSFe24Sddf5S2SELfof@oOoO&OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO%%%%%%%%OOOO*TFO**O1DO*eO=3=;;>;;;>>>>>>>>>>w8>;>68>666>>>>>>>&Ouw>&>>&>uyw>&wVy,>6w8w>&&>wuOO*&O%>=OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO>&O>Vi&OOOOOOOOOOOOOOOO%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO%%%%%%%%%%%%%%%%--wO33=4doSL3@3O%%%%%%%%%OO%%OOO%O;OOwOO%%O&%%O%&%OVV>y>&&&*=>=%OOOO%%%%O%%%>&O%OOOOOOOOOOOOOOOOw-O-uVy88wuwwwwuwZwwywwwuuuuyy8-%%%%%%%%%%%%%%>ww8>-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO", "OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOoooooooO>T^TA&w%wwwuww>:wq>>qq1>>>>>>>>>:>>qq>>>*ww3=dD1*>1>>1www,w,%www>ww>>ww>>&>ww,>>>>>>>>>>>*>dC=3=ddou3w>>+L4oeS)LS234E=SdP5hEsEYYUe==oO=oOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO%%%%%%%%%%OOOOAyOO>yy&=D*3O1*;>>>;;>66>>>>>>>>8>;>88>88666>>>uu,Owwwu>&>wuyyw>wyu,;>u>86>wyVA=3&OO*OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO&%OOOOOOOOOOOOOOOOO%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO%%%%%%%%%%%%%%%%%O%OOoo===JE=o4o%%%%%%%%%%%%%%%%%&&%%OO>O&O&O%OOOO&T^y&O*OOO=3=OOOO%%OOOO%OO&&OOOOOOOOOO%%%OOOOOO%%%-->w8wuww8wuyDV8w>wuwuuuyyu>%%%%%%--O%--%->w-%OO%%--;-%%%%%%%%%%%---%%%%%%%%%%%%%%%%%%%%%%%%OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO", "OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOoooooooO=&T>>wyyZVyw6>>>w,>>qq1:>,,qq,,>>,q>>>>w1**y*Ou%>ww1>wuwuw*u>ww:>ww*%>w>w,>,>:>,>>>>>,>>*y%uTdO4LDeCO>VF3S22o4Ce>y31U3u**O%>>>>>>6w86>>>>>>>6>>>w6;88866>>>&>>O,%;>>>>>>;&&y>&>w6>>>www>,,>O>OO&OO%OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO&OO%OOOOOOOOOOOOOOOOOOOO%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO%%%%%%%%%%%%%%%%;O-;OO3o+dd^CoO+%----%%%%%%OO%%OO;OO&O&OO;O%O&%OO>OyD>3*OOO&wu=OOO%%%OOOO&%OOOO;OOOOOOOO=>>=OOO%%%%%%%%%wwuw86wuuGA>wuVA%wyyuutt%%%---;;%>8wwwwt>-%%%--->;-%%%%%%%%%--;;%%%%%%%%%%%%%%%%%%%%%%%%OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO", "OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO==e=3OeCGD3&AV>i:*>wq:*>>>>>>>>>&:>>>>>>w1:>qwq>1qq1wuw>uwwq11111>::>>>>>>>>1qww>1ww11qw3ddeOu==wwwuyuwu>>ySwCCe2ee3=fdDf5hhLSgLgh4]Do&&OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO%%OOOOO%OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO%%%%%%%%%%%%%%%%OOOOOOOOOOOOOOOO%=UTVDU&>>>>;;-->>>6wwww6>>>>>>>;6ww6>>>666>>>>>&wuw>&>w>>&&>w,>8-68uy>>>w3>&=>3OOO%%OO%%%%%%%%%OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO%%%%%%%%%%%%%%%%OOOOOOOOOOOOOOOOOOOOOOOO%OO%%OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO%%%%%OOOO33*>/VO.+.oo+o4+oOOO=O%=OO%OO&OO%%%%%OO%%%-;--%%OO%-%%%OOO%%%%OOO%%%%%%%%%%%%%%;86%%;>-%%%%%%%%->uuwwwttwwyy8;;>ZFyuVy-w6-%%-6wwuyye3>=%%%%%%%%,w;OO&&O%%%%%%%%%%%%%%%%OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO", "OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOoe+32d@4,wyAAVyy1>>1>>>q>>>>>>::>>>>>>>>q>::1q1>>qq>>qw1wwq1>>>>1>>>>11>>>>1qqqwqwwwq>::eUEF%1w1AVw>>:*,>yCdOyCeCd4dFF4FfY4KYKhhKLSYdoOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO%%%%%%%%OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO%%%%%%%%%%%%%%%%OOOOOOOOOOOOOOOOOOei>wy%;;&;;>>>>>>68www6>>>>>>>>wutwwww66>>>>>>&>w>&%>ww,>>www>w8w-uFn>>&>w3=>e&%%%OOO%%%%%%%%%OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO%%%%%%%%%%%%%%%%OOOOOOOOOOOOOOOOOOOOOOOOOOOOOO%&OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO%%%%%OOO==OOe^){]Cf5@o5oo=oo3Oo3Oe=>>*O&%%%%O%%%%%%%----%OO%%%O%%OOOO%%%OO%%%%%O%%%%%%%%%;-%%;>%%%%%%%%%O->wwwyyywww6yDT>uVVADGU6txw;-%%>>333=OO%%%%%%%%>w,%O%%O%%%%%%%%%%%%%%%%OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO", "OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO=o3UF=dy&uV>yDA:>>:*:>>>>>>>>:&,,>>>>>>1>>>>>>>>q1>:>qw111111>>11q11>1q>>1qqq11>1wuyyuw=oO=yw31FVu>w,wy>uyCeDF2CCd@332SLLLKY)PWWhSSL@==OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO%%%%%%OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO%%%%%%%%%%%%%%%%OOOOOOOOOOOOOOOOO%OO&OO,&&&;;;>>>>>>68886>>>>>>>>6wwwwww6>>>>>>>&>>&%%&wuw>>,w,>668%>Ay>w%%3w>VUw&%OOOO%%%%%%%%%OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO%%%%%%%%%%%%%%%%OOOOOOOOOOOOOOOOOOOOOOOOO%%OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO%%%%%OOOOOO3eCC``^5(L52@@+eDeo4o3Oo&O%OOOOOOO%%%%%%O%%%-%%%%%O%%OOOOO%%%OOOOOOOO%%%%%%%%O%%%%>>%%%%%%%%%%->8wwwwwwuuwyDTywwuuwyA8ZFn>%OO%%%%%Ooo%%%%%%%%%>w>%%%O%%%%%%%%%%%%%%%%OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO", "OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOoo=YDded%;w&,uO*>q>>>>*>>>>>>>>>>>>>>>>1qqq>>1w111>1qqq11qwwqq1>1qq1>1q>>1qq1>>::>wyiiyuCC*>>yO>,>>uwwue33FFDCeddC4JC2efSTYgsRPsg^YR2@oOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO%%%%%%%%%%%%%%%%OOOOOOOOOOOOOOOO%=O%w&Ow>;&;;-;;>>>>>66>6>>>>>>>->>6>>>>>>>>>>>>>>>&%%&>w,>>>>>>>-8>>>&w&yDD>OD)w&OO%%%%%%%%%%%%OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO%%%%%%%%%%%%%%%%OOOOOOOOOOOOOOOOOOOOOOOOO&&OO&&OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO%%%%%OOOO*O=OOoCQY'5WgY^SL^^YSL533eeeOOyOOO%%%%%%%OOO%%%%%%%%%%%O%%&%%OO%OOOOOOO%%%%%%%%%%%%;>>%%%%%%%%%%-;>6866wwwyyuuyywwyt>wytZZw%%%%OOOOOOOO%%%%%%%%O%>&%%%%%%%%%%%%%%%%%%%%OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO", "OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOo=oo+USoTF3O&uyy>qw1111>ww3>>>>>>>:>>>>,>qwq>>1ww1>quuw>>1qqwqq1>>111>>>>>1qq1>:q>:>1q1>OCF=&3LDwwwyVu,wyyeV333VedDfC=dEELLKKKRshEPY_S.+OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO%%%%%%%%%%%%%%%%OOOOOOOOOOOOOOOOOOO&&;>&;;&;;;;>>>>>>>>>6>>>>>>>>>88>>>>>>>>>>>>,ww,>&&&>>;;>>>>>>uw88&w>%O>3>>3>%OO%%%O%%%%%%%%OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO%%%%%%%%%%%%%%%%OOOOOOOOOOOOOOOOOOOOOOOOO%%O>yu;OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO%%%%%OOO=OOOo333pp(LKshSfWW#sJgh]fDS=o3OO%%---%%%%%%%%%%%%%%%%%%O%%%%%%%%%OOOOOO%%%%%%%%%%%%>>-%%%%%%%%%O%%;>wwwyw>wuuw8tutyyyyVnxw%O-&%%OOOOOOO%%%%%%%%OO%%%&%%%%%%%%%%%%%%%%%%OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO", "OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOoO@ooFLd>u,>uwOOq>>>>:>quuw,>:&&:&&&:>>,>11>>:>qw>:wyyq:>>>111>>>>>1qq>:>>1111>>wq>::>>>eeOO>Oe3yiyyVywu>yee=w3we3eeLTDeDSLSgPhKssh)^+@@OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO%%%%%%%&OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO%O%%O>w%&&&;>>>8>>>>66>>6>>>>>>>88866>>>>>>>>>>>,wwww>&%>>>>>>>>>wu>wAu&wuyw>>>=%OO%%%OO%%%%%%%%OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO%%%%%%%%%%%%%%%%OOOOOOOOOOOOOOOOOOOOOOOO%OOO;ww&OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO%%%%%OOOOOO>o%>o@..JSsEPLI()'QSW]DFfC33>OO%%%%%%%%%%%%%O%%%O%%%%%%OOO%>w%%%OOOO%--------%%%%--%O%%%%%%%%-;;;;>>wwwwwwwynuuw>;wuuyu>%%&%O%OOOOO%O%%%%%%%%%%OO%%%%%%--%%%%%%%%%%%%OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO", "OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO=o=O2@LEwy>&>wwu1*>uw:*quww>>>>>>>:&:>>,>>>>>>>1q:*1uw>:11>>>>>>q>>1ww1:>>>>>>>>1qq111qw=Fee1wV=>,:>w>:,&w3ddFeeAVdeeYUCeLdLPKg5sRPW[Y..OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO%%OO%&&>OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO%%*%O&3>&&&;>>8w>>>666666>>>>>>>>>>>>>>>>>>>>>>>>>,ww>&%w,>>>>>>>>w%>Vw%uw&%;w3>%OO%%%O%%%%%%%%%OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO%%%%%%%%%%%%%%%%OOOOOOOOOOOOOOOOOOOOOOOO%OOO%%%OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO%%%%%OOOOOO%oo%O@+@.oSf@fSQhhLWP^L^^S3O%&&%%%%%-&%%%OOO%%%OO%>&O%%%%O%>w&%%%OO%%%%%%%%%%%%%%%%%%%%%%%%%%ww8>%%;>-8uuwwwu>;%%-8tyw8>w>%OO%%OOOOOO%%%%%%%%%%%%%%%&&&&&&%%%%%%%%%%%OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO", "OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOo@o=ood^Vu3>,yyw1:uFAw:q,>>>>>,3,>>>:>>>q11111qq>**>1>:>wq11>11qw1>1uuq*>>>>>>11>qwq>:>>ueODF333ww>,u,:>3w3AVyeDC=eD3=2SD2d25fII)RWR_X.@OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO%OOOO%&>OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO&%O>>>>>>>>6>>6888666>>>>>>>6>>6wwww>>>>>>>>;;>>,>&%ww,>;&;>w&w>;>%>&;>w,>>>%%%%%OO%%%%%%%%%OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO%%%%%%%%%%%%%%%%OOOOOOOOOOOOOOOOOOOOOOOOOOO%%%%>OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO%%%%%OOOO&OO=Ooo@o@2+@o@.@+.$.ShC4eDSU4Dew,>;>6ww>>&&&;>&%%%;w>%%&>>&%%&&&%%O%%%%%%%%%%%%%%%%%%%%%%%%%%%6w8;%%>u>>>6ww8>>%%%%O%->>uyw%O>%%%%%%OO%%%%%%%%OO%%%%&>&&&&&&%%%%%%%%%%OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO", "OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOoooooo@wuw>>q>>>>>>>&%>w%>O:,u*1w1>>w>NT%u>q:>>1q1>>qw11qq>:>w%i:1**w>1q1>>>>=3O3*CCO>,ww>>>:w&w>uOwdd=3S=eFCCYL@fhSK)gPWP..oOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO%OOuOUV;>>>>>>>8>>>>>>>>w8>>>>>6>>>>>>>>ww>;>w8>w,>>>;&&%;,,>>uyw>uwwu&;>>>>>>>>%%%&%OO%%%%%%%%%OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO%%%%%%%%%%%%%%%%OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO%%%%%OOOOOOOOOOoOOOOOOOooooooooooo+oee=_TATF;Ft-yyu;%&uy,VVw>>%O%OO&yViuu,&%O%%%%%%%%%%%%%%%%%%%%%%%%%%%-%O%->wy;-;6utw>%%%%%%%%>>iy>A%&%OO%%O%%&OO%;&%O%%%%%%%%>&%%%&%O%%%%%%OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO", "OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOoooooo@=/V>>O%>y1>qw1::1>>>>>>>:w>,>Vyw*u>>**1>%1uD*w1>uw>>1q1>>q>1q1::>**uquq:*>>11>::>ww=e>dC>>,w>>>>>wVF>wVDd>uewwCDCCFSLsfsgPgsIf2.@OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO=OO&)TO>>>>>>>8>>>>>>>686>>>>>>>>>>>>>>%;ww>->u>>>>>>>>>>>>>uVF%>Vu&&%u>>>>>>66&%%%&%%%%%%%%%%%OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO%%%%%%%%%%%%%%%%OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO%%%%%OOOOOOOOOOO%%%OOOOOOOOOOOOOoo=o@+oD3Oi>Ou>%&&%OOO%%Ouy,%O%>O%>uyyw>&%OOO%%%%%%%%%%%%%%%%%%%%%%%%%%%-%%%--;>>;->ww8>%%%%%%%%w%w,yD>O&%O%&%%OOO%%%OO%%%%%%%%%&%%OO%&>>;&%%%%%OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO", "OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOoOoooo=DyuUu:wyw1>>>*:>>>>>,>>>>*%Ou,&O>:11:1w*>%qO*1*Vw>:>wq>:111q1:>w*1%>:11*:>>>>::>ie=e=3u*>,,>>:>w;wy&>uVed>yD^Ue&doH`PKIIsWWf+..oOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO*OO3Ow>>>>>>>>>6>>>>>68886>>>>>>>>>>>>>>u>->6>>w&>>>>>wwuwww>>>>=;uw>3;w>>>>>>>>;%OO%%OO%%%%%%%%OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO%%%%%%%%%%%%%%%%OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO%%%%%OOOOO%OooOO%%%%%%OO%OOOOOOOoo=+oOoo%o=*O>;&O%%%&>&O%;%O%OOO;wuyu>%OOOOO%%%O%%%%%%%%%%%%%%%%%%%%%%%%%%%-%%%%;-%-;>>>%%%%%%%%OwUAw>>Vw&%%-%%OO%&&%OO%%%%%%%%%OO%OO&uV>>&%%%%%OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO", "OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOoooooo+OuwA>*VAq>>>>>>>>>>>,,>>>>3%,&yF%:wi1%1qw*wqNy>yw>:>q1>>11qw1>qu>uOu>:1>:>11>>>>e3=3=3i&,>,>>>wywwuwwwydUe3eF==Did2eYEYPK__5.o@oOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO&%OO>>>,,6>>>>>>>>>68w66>>>>>>>>>>>>>>t>%-ww6>,,wwwwww>;;>,>>&>%>=wu>>,>666>>>>;%OOOOO%%%%%%%%OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO%%%%%%%%%%%%%%%%OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO%%%%%OOOOOOOOOOOOOOOOOOO%%%OOOOOOoO+oO2oO&OO%oOO%%&>wuw>>%OO%%O>yyu,%OOO%%%%%%OO%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%O=Feu>wyy,-%%%%-%OO%&&%O%%%%%%%%OO%%O&wV&&&%%%OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO", "OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOoooooo@wFy&u,AF**:>11>:>>>>,,>>&,u&3>AU*wqq*%w%1>iwFy>O1>>11>1w1>1qq>qw:u>DV>*>>1111>11=>>3uALy>>,w,>uV>VVu>yVywwde=Cde35FSs5SPEI#@o,w8>>>>>>>>688w6666>>>>>>>>>>>>%;w8>6>;w>>,www>Vu>&>wuyOO>==,&,>>666666uuw>%O%&%%%%%%%%OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO%%%%%%%%%%%%%%%%OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO%%%%%OOOOOOO==&OOOOOOOOOOOOOOOOOO%oOOoOOoOoo@oooOO%%&>,>O%&&%%wDVu>%OOO%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%--%%%%%%%%%%%OO%Owww&ww>>-%%-O%%%%%OO%%%%%%%%%%%OOOO%%%%&&%%OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO", "OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOooooooOOui3VOwA%:111q>*>>>>>>>>**>%3%3d:y*O%iFO>>qOuqyu1>>1>:1w>:>1q>>1>qwFN*%>>1qq111q=331yFUi>>wuw>uV>wwu>w3uu33>u/UdTDpSSKPWK@.oo&&OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO=OO&%OOw>>,6>>>>>>>>6666>6666>>>>>>>>>>>ntw>6w6>>;>>www>Vyw>>>>>>O&&3y,>>>668888uyu>OO%&%%%%%%%%OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO%%%%%%%%%%%%%%%%OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO%%%%%OOOOOO*>3=OooooooooOOOOOOOOO&OO>oo+O+oo+oo@OOOOOO&=OOOO%%3A>&%OO%%%%%%OOO%%%%%%%%%%%%%%%%%%%%%%%%%%%-%%%%%%%%->>>%%%%%%%%%%oO&OOO%&&>ww>%%%O>u>%OO%%%%%%%%%OOOOOOOOOO*==&%OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO", "OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOooooooO&wDDVwAU1uyuwq>*>::>>>>>w>>>V>*%:u%1uND*wu>%1uFUw1>>>>>11>>qww>>q>u1q:*>>>11111q33u1wuF>>>wuw>wyyw;iuywiu>yyFUFLiFTLS)`hood@&O;OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO&OO&&ww&>>6>>>>88666>>>>>686>>>>>>>>>>>Gy-wyw>>&>ww>>>w%&>www,>eOO*eAw;>>>68wwwwuw&OOOO%%%%%%%%OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO%%%%%%%%%%%%%%%%OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO%%%%%OOOOOO%==OOooooooooooOOOOOOOOO%*Oo@Oooooo..O*%OOO%%&%OO%*O%%OO%%%%%OO%%OO%%%%%%%%%%%%%%%%%%%%%%%%%%%-%%%%%%%%%;>>-%%%%%%%%%==o%O%OOO%>>;%%%O,yw%O%&%%%%%%%%OOOO%%%%OO%*&%OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO", "OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOoooooooOOOFU&yw*yVAiuwq>:&&>>>>:>*>wFu,>>q:FA%w*%w*y1qqAyw:>1>:*w1>wyuq>:*V:uy>%:>11>>113=313%y%>>wyw:>uwZuwwDA3DVVwUDwDdfYfE))2o@oOO&O-OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO3O&OO&u&;>>>>>>ww866>>>>>686>>>>>>>>>>>y%;AF>%w>uiy>&>wwww,>>>>&O==>w>w>>>68wwwww,&%%%O%%%%%%%%OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO%%%%%%%%%%%%%%%%OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO%%%%%OOOOOOOOOoo.....oooooooOOOO&O&OO%Oooo+oo@ooOOOOOOOOO%%OOOO%O%%%OOOOO%%%%O%%%%%%%%%%%%%%%%%%%%%%%%%%O%%%%--%%%%%>>-O%%%%%%%%oOo=OOO&%%O%%%%-O%;&%%OO%%%%%%%%O%%OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO", "OOOOOOOO%OOOOOO%%%OOO%%%OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO+o@5Y.5LEso23==ew=1O1:u:>w1:>1>>>>>>&>>&:ww3,*>yADA>>>&&DA,>yw*w:w>,i:Ow:,3>>,3>>w8wV>w>%wVy>>&>>>A>AwwAULddUYLLWKJL^LoOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOooooooooooooooooOOOOOOOOooooooooooOOOOOOOOOOOOO%O=OOOO>>>>>>>>>>6>>>>>>>>>>>>>>>>>>68www;->O*Cd==33>>>86w;6w>>>%U>&&>u&%>>>>>688,,>&%OO%O%>,&%O%O%%OOO%%O%%OO%%OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO%%%%%%%%%%%%%%%%OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO%%%%%%%%%%%%%%%%%%%O-%V%u%->>-%%%%%O%>-O%>O%%%%%%%%OOOO>y,OOOOO%%%OOOOOOOOOOOOOOOOOOOO%%%%%OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO%%%%%%%%%%%%%%%%", "OOOOOOOO%OOOOOO%OO%%%OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOoo5o_^fLJTD+==O=3wd11O1>*:>1>>>>>33>>>>>%:>>wwuAVFd>3w>>ww**w:%>*DFw>>%>&>,>>>3>&;wyDuw,>&ww>>>yyOyywuVu3eeefhfsKSsRT@oOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOooooooooooooooooOOOOOOOOooooooooooOOOOOOOOOOOOOO*%O%OO%%>>>>>>>>6>>>>>>>>>>>>>>>>>>>>6886%u&OUU==3w3%%>u868wwwu>u%&;;>>,>>>>>688>>>&%OO%O%>>&%%%OOO%%%OO%%%%%%OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO%%%%%%%%%%%%%%%%OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO%%%%%%%%%%%%%%%%%%%O---;6-O%>>;--%%%%OO--%-%%%%%%%%OOO%>w>%%OOO%%%%OOOOOOOOOOOOOOOOOOOO%%%%OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO%%%%%%%%%%%%%%%%", "OOOOOOOOOOOOOOOOOO%%%OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOooooooooo@@@_[aa+UL=@=O=oowi**y%>%wyq:q>>>>>>>>>>,>>wwwdww>%>,&:%>>>3>:wODD:%>>:&>>>>>,,u>uwi>%>w%,uyyeFVyuuVAuy3ddfSJSf5WJSf+o@OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOooooooooooooooooOOOOOOOOoooooooooooOOOOOOOOOOOOO%OO&%&yw>>>>>>>>6>>>>>>>>>>>>>>>>>;>>;>>6-FDe>==@O&>>&>w6ww>>ww&O>%&>&,w>>>>>688>>>;%OOOO%%&%%%%&%%%%%OO%O%>>%OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO%%%%%%%%%%%%%%%%OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO%%%%%%%%%%%%%%%%%%%%wO%-A%%8%wt8>>>%%>%wDVO%%%%%%%%%OO%3uw>&%OOO%%%%OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO%%%%%%%%%%%%%%%%", "OOOOOOOOOOO%%OOO%OOOOO%&%%OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOooooooooooooooooo=oooLd2<>e=1w1>1*u*yAw:q>>,>>>33>ww>&>>:3wwwuyuww>wu3>,ww>yw%>>::&>>>>>,3>&w%,&&u&%wyew=e3u=&AV3uyUe@LD$S)W])o@+oOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOooooooooooooooooooooooooooooooooooooOOOOOOOOOOOOOO%%OVDu>>>666666>>>>>>>>>>>>>>>>>;;;;;;w>&>>oe`LeO&ww>>;w8;>w>&3yOOw>3&>>>>>666>,,>%OOOOOO%%%%%y>%OO%%%%O%ww&O%OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO%%%%%%%%%%%%%%%%OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO%%%%%%%%%%%%%%%%%%%%%OO6A/yO->xVu>ww->>O-Vu%>%%%%%%%%OO>VAy,,%%OO%%%OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO%%%%%%%%%%%%%%%%", "OOOOOOOOOOO%%OOO&OOO%OOO%%%OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOooooooooooooooooOO=oooUad=eDCw,>CF=Oe1Oiw*yAq*,:,3,>3ww,3w>*>,>wwwyVVuww33,:*>3>Vu::3>%*&>>>>>>,>yFwe>=&>wCdw3O%>OeyAyDwC3dSdCPL(Y{)o@ooOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOoooooooooooooooooooooooooooooooooooooOOOOOOOOOOOOO%OOuF&>>>666666>>>>>>>>>>>>>>>>>>>;;;;-tw&y>OL)U3%>w66-w6;wuwu>yOOw>,&>>>>>>66>ww>&%O%%OOO%%%%y>%OO%%%%O%ww&%%OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO%%%%%%%%%%%%%%%%OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO%%%%%%%%%%%%%%%%%%%%%%w-OyVut8VVw>wu>w>;-%->-%%%%%%%%%%>VVuwu%%OO%%%OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO%%%%%%%%%%%%%%%%", "OOOOOOOOOO%%%%OO%OO%%OOO%%%OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOoooooooooooooooooooo2=CC@de3AAuye1iDu3uw:O>u:%>:>>>>>ww>,w,:3w>3>>udw,,>u>,w>,w3iuw>&&:&>>>ww>>>yFFey=u=>uCywu>>eeFdDyDy=3O+fChLpKYo@2o%OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOoooooooooooooooooooooooooooooooooooooOOOOOOOOOOO%OO&%&w%>>>>>>>>6>>>>>>>>>>>>>>>>>>>>>>>;%&OO3==UF3=>>6w>t6;w,&uO>%=3>>>>>>>>>>>,ww>%%O%%OOOO%%%&%%%%%OO%O&ww;%%OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO%%%%%%%%%%%%%%%%%%%%%%O>%;wn>;>uy>>wuw>;uu%%>O%%%%%%%%%O%ww>wy&%%OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO%%%%%%%%%%%%%%%%", "OOOOOOOOOO%%%%OO%OO%%O&u%%%OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOooooooooooooooooO=&Ooo4^+d3%VAyAF1DEded****:**:>>>&&>ww>>uw>3,>>w>uywuywy,uVuwu3u,>>&>ww>>3uw>:>>e%3C3DCOOw333*>3Ce=A3uyDSdefSSfL+.ooo%OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOoooooooooooooooooooooooooooooooooooooOOOOOOOOOOOOOO;>&,>>>>>>>>>6>>>>>>>>>>>>>>>>>>>>>>6y-wwO===o+>3,>>86t>>t>%yy&===>>3>>>>>>>>>,>&%OO%%%%%OOO%OOO%%%OO;;>>>>&%OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO%%%%%%%%%%%%%%%%%%%%%%%-%O>>8wZ>88>>6www>-%%OO-%%%%%%%%%%%>wwwy&%OOOOOOOOOOOOOOOOOOOOOO%%%%OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO%%%%%%%%%%%%%%%%", "OOOOOOOOOO%%%%OO%OO%O%yD%%%OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOooooooooooooooooOOo&=oaUUe3VVuyVui*eAiOV>w>%*>:>ww,,wyuw%w3>,3>>,*>>*wy>w&yAu>>%A>*wuwww>>wuu>&>4eodL=Cwe=eVdwO=23=w>uDVeyFe@SYhf2@@o=oOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOoooooooooooooooooooooooooooooooooooooOOOOOOOOOOOO>O%>,w&>>>>>>>>6>>>>>>>>>>>>>>>>>>>>>66%8w%uwo==3ew>>>;-6;6VuwFY3=%*u>>>>>>>>>>>>>&OOOO%%%%OOO%O%%OOO%%,ww>>>&OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO%%%%%%%%%%%%%%%%%%%%%%%%O-w>;tAV8666>>>6>u>yFwO-%%%%%%%%%%>wyyuu&%OOOOOOOOOOOOOOOOOOOOOO%%%%%OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO%%%%%%%%%%%%%%%%", "OOOOOOOOOOOOOOOOOOOOOOOO%w/&O%O%OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO%%%%OOOO%OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOooooooooooooooooooooooooooooooooOOOOooooTC=*>,wyeu3VSUwu:uw:w:%w>>&>ww>>>ww>>,,>&>wuw>>w3V*&u&uFOuw*wu>>>&3w:*&%d@YDC2e3+O=DS>3==ddeACVFyDV3<2FLfo@ooOO%OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOoooooooooooooooooooooooooooooooooooooooooOOOOOOO%OOw>w&;>>>>>>>>>>>>>>>>>>6886>>>>>ww88w6>>,>===CCO=u;8w66w->>&uye=d=3u3>>;>,>>>>&wy&O%O%%OO%%%%OO%%%O%;,w>>ww;OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO%%%%%%%%%%%%%%%-;tw8;%%O%-;>6>6wyDx>>ww6>>>>;;-%O%%%%%%%%%%-8uwwww%%&OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO,&OO%OOOOOO%%OOOOOOOO%%%%%%%%%OOO%%%%", "OOOOOOOOOOOOOOOOOOOOOOOO%OAOO&OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO%%%%OOOOOOOO%OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOooooooooooooooooooooooooooooooooOOOooooo+eCAVuw>e1d1VDDVFy*%:uu**ww>>>uA:>>>>>,>wwwuw>>www*yLDVAA>:3OuA3,>yuw%uy5f4eSoC@e3=Cd=3>=2FwVwDAd>&dSUfL^d@==OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOooooooooooooooooooooooooooooooooooooooooooOOOOOOOO>w&3d;>>>>>>>>66>>>>>>>>>>>>>6>>>>>6>>;;>w3>=3FC=%wuu>>;6>wu&>=w=3d3>&>>>>>>wuw>uy&%%O%%%%%%%%%%%%%O%;ww,>ww>%OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO%%%%%%%%%%%%%%->8wunyt;O->->66>6wtZu>>ww6>>>-%%%%%%%%%%%%%%%-8wwwww>>==>3OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO&&&OO&;OOOOOOO%%OOOOOOOO%%%%%%%%%OO%%OOO", "OOOOOOOOOOOOOOOOOOOOOOOO%OOO%%O%OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO%%OOOOOOOO%%%OO%OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOooooooooooooooooooooooooooooooooOOoooooooeDSdyyweue1UAdUUViy%>uO*ww>:>yD>:&>>>>3,,3wwwuVuOyOyUOyO%>V>w>>3*ww3%udf254f@43o@==O=e>=+See3Fy>y3LFCdL_CooOoO,OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOoooooooooooooooooooooooooooooooooooooooooooOOOOOOOFy>uDw>>>>>>>>88666>>>w8>>>>6wwuu6>86;>>>>>====+3w>&>w66w>>,&w=3=OC==3>>>>>>wVw>ww&%%OO%%%%%OO%%%%%%&,ww,>ww>&OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO%%%%%%%%%%%%%%->wuywVynw%w>>>86>6wuw6>8ww>>>;%%%%%%%%%%%%%%%%-8wwwwuyw>ue=OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO%&%O%&OOOOOOO%%OOOOOOOO%%%%%%%%OO%%%%%%", "OOOOOOOOOOOOOOOOOOOOOOOOO%O;OOO;OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO%OOOOOOOOO%%OOO%OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOoooooooooooooooooooooooooooooooooooooooo@efe3dAVdOOdyuyDUyyy&&u>&>**wwwuu>:,3>>3>>>,wwyV>AV%%uw3AV3i,,%yw%%w>&>w@2YS242@Dd43==>*=4dC3dd3V*CwdEfLe@oO==OO%%OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOooooooooooooooooooooooooooooooooooooooooooooOOOOO&Vw%,V&>>>>>>>>88888888w86>>>66wyy6>ww;6>>>&%=e^eO=>w;tw68;wu&>===eCO=w>>>>>>wyw,>>%OOOOO%%%OOOOO%&>>wuww>>ww>&OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO%%%%%%%%%%%%%%%%OOO%%%%%%%%%%%%%%-;>wuuyyV8yVuV>>6w8>>ww>>6ww8668>-%%%%%%%%%%%%%%%;8wwwwuyw3dwOoOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO%wy>O%;%OOOOO%%OOOOOOOO%%%%%%%%O%%%%%%%", "OOOOOOOOOOOOOOOOOOOOOOOOO>O>OOO%OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO%OOOOO%%O%%OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOoooooooooooooooooooooooooooooooooooooooooooooooooo@+=eVVOSe>DF=dTV>,w>&&*&%%ww:&w>>33>>3,3w,>,33>yUV>u%y_F*VdDAO,>&A>u3i44aLS2L`)C=eV=O34CeddFey>eC3edDFDSeOoO%%%%OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOoooooooooooooooooooooooooooooooooooooooooooooOOOOuww&,%&>>>>>>>>88888www68ww86>>>uu>>ww;>>>>=>dD)d&>wu>tw-->VA>%=o3UC===3>=>,>3w,w>%%OO%OO%%%O%%%%&,wwwww>>>>>&&OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO%%%%%%%%%%%%%%%%OO%%%%%%%%%%%%%-%%>wuuuuxVwyVVAwwww8668w>6w6>>8ww6>;--%%%%%%%%%%%%>wwwwuwu3ed3o=OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO>w&OOO%%OOOOO%OOOOOOOO%%%%%%%%%%%OOO%O", "OOOOOOOOOOOOOOOOOOOOOOOOO&O&O;%OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO%OOOOO%%&%OOOOOOOOOOOOOO%%%%OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOoooooooooooooooooooooooooooooooooooooooooooooooo.ooOO&3eCyeoVOyuDAVVVy&O*>&*>>:w>:>>>>>3:>>>>,>>*V>DAOVy&*uVuO%u*wyF>yyF2Lf+fY^[S2=4w3=34d42CyuCAODwCC3e2wwuOw>>>>>>>>66888www68www8>>>ww>>ww66>>>>3dF==eu>,>6>>8;6uwA3o3Ye=3=3>=33>>>>w;O%%O%OO%%O%%&>&>wuw,>w>>>>&%%OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO%%%%%%%%%%%%%%%%%%%%%%%%%%%%%---%->wtyuutyxtynyuwww888886ww>>>8www86>>-%%%%%%%%%%-6rwwwuuu3ee=oOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO%yy%%%OOOOOOOOOOOOOO%%%%%%%%O%OO%>w>", "OOOOOOOOOOOOOOOOOOOOOOOO&OO%O>O%OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO%OOOOO%%w;OOO%%OOOOOOOOO%%%%%OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOooooooooooooooooooooooooOOOOOOOOOOOOOOOOoooooo..@@ooooO=wCDL_d&u>>AFVDDw&w,>>>>w%>w,>>>>%:>>>ww3yw>ViwdA&w&*TDdD*>yywuVysShYYD2L24Fe=3=&24ddd=>dwuDLFOSUYD+O&OO&%%OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOoooooooooooooooooooooooooooooooooooooooooooooOOOO>>>>;%>>>>>6666>>66888wwwww86>>,,wwwwwww>>3w323ed3=wuu-;wx;O%,De=3d=@e>>>>33>>>&w&O%%O%O%%%O%&>w>>ww,>>w>>w>&%%OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO%%%%%%%%%%%%%%%%%%%%%%%%%%%%---->>wutttutwZutAwuww888ww8>w8>;>w8ww8886>;%%%%%%%%%-6ruwwyyuu33e3OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO%&&%>AFw%%OOOOOOOOOOOOOO%%%%%%%%O%%%>yVy", "OOOOOOOOOOOOOOOOOOOOOOOO%O%OOOO>OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO%OOOOO%%u>OO%&%OOOOOOOOO%%%%%OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOooooooooooooooooooooooooOOOOOOOOOOOOOOOOooooo....ooooOOo3VeVU>&eV;w,&UT%,w,,uw**%wyw>>>>>3,>>ww>>u*>>>yO>*u>Dwuyw%wOyuV%Sh5[)@4oD+=4w3Oe=4CT3=OeF3wd3@ef3eoo=O%O%%OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOoooooooooooooooooooooooooooooooooooooooooooooOOOO&d3>&u&>>>66888>>>66888www>>>68>;>686688;&wde=OOCedV,ut88u8uu%;=33O==eO=>33>=>w%>%O%%O%O%%%O%>ww>;>,>>ww>>w,&OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO%%%%%%%%%%%%%%%%%%%%%%%%%%%%----uuuuuuuuV>ZuAUyuww88www8>86;;>w>w6>6ww6>%%%%%%%%%;8tuwwywwe33DD3OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO%&OO%O%%OOOOOOOOOOOOOO%%%%%%%%%&%%,yyw", "OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO&O&OOyOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOoooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo4L3d^D-t-wVwwuw;3dOee=O3Fd=oe@w>>>:>u,>u>ww>w:>>>=eO3de3>3V;&>5SC5S2S45@C=3d>y4=eD=>uywue3CSoSu%&&OO>OOOOOOOOOOOOOOOOOOOOOOOOO%%%%%%%OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOoooooOOOOOOOOOOOOOOOOooooooooooooooooooooooooooooooooO>u,;>6>ww6>6ww6u6>ww6>6>6wuw88w6>>>66>>w%wnwwu-;&%Fye3eedeOeuw%>>>>ww>&w>&&>>&%OOOOOOO%OOO%%>>8>>>>www3>3>>3&O&%%%%%OOOOOOOOOOO%%%%%%%%%%%%%%%%%%OOOO%%OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOoOOOOOO%%OOOOOOoOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOooOOOOOOOOOOOOO%%%%%%%%%%%%%%%%%OOOOOOOOOOOOOOOO%%%%%%%%%%->6>>>yyuutyyyyyyyyutyuw>>wuwww8>>>>>8wwwww888>>;--%%%-6rttuww3yFe3T^4o3oO%%%;%%%%%%OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO%%OOOOOOOOO%&%%OOOOOOOOOOOOOOOOOOOOOO&&O%uOO>", "OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO%O>%wUAOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOoooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo$.@4dDGy8t8yywyF>d>_^we=d==E_=23>>,w:>w>ww*ww*>,=>3eA=>=A=D>Owuwffd52aSa2@S+d*&uY=Oiew>iuO3i3CeSUw%&OO&OOOOOOOOOOOOOOOOOOOOOOOOO%%%%%%OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOoooooOOOOOOOOOOOOOOOOooooooooooooooooooooooooooooooooO>uw>68>%6tytr86>>>ww68www>>88>>wwwwuuww%wwuwu>;>VuOODf=Df2C%>>V>,,,,>>>u,&%%%%OOOOOOOO%OOO%%;>8>wuw>;>w3>&*&OoO%%%%%OOOOOOOOOOO%%%%%%%%%%%%%%%%OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOoOOOOOO%%OOOOOOoOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOooOOOOOOOOOOOOOO%%%%%%%%%%%%%%%%OOOOOOOOOOOOOOOO%%%%%%%%;%%->6uxyyuuyyyyyyyytuutuw>>wwwwwww86>6www886>>>8886>;-%66rruwuuu>dd3CDCOoo>O->%%%%%%%OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO%%%OOOOO%&,w%%OOOOOOOOOOOOOOOOOOOOOOVDF>&&>O", "OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO%O%O>DVOOOOOOOOOOOOOOOOOOOOO%%%OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo.+oeC&FAwwwwwuAUVOALe%3e3=T]d==>>uu>>>>:w>ww>w>3>=3C>>&>=C>AAuUf=+SSYSf5o@@Jd>OfeeOOeyVuHSefYLJD;O%OO%OOOOOOOOOOOOOOOOOOOOOOOOO%%%%%%OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOoooooOOOOOOOOOOOOOOOOooooooooooooooooooooooooooooooooO>ww>w8>wwyADDZ8>>6ww8wtVu>>wuw>888wwwwwyDu%Ow-y&>we3=+Y`D=3u3wO>,>>>>>>yw;%%%%OOOOOOOO%OOO%%;>8>,www>,w3w>>>OoO%%%%%OOOOOOOOOOOOOOOOOOO%%%%%%%%OOO%%OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOoOOOOOO%%OOOOOOoOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOoooOOOOOOOOOOOOO%%%%%%%%%%%%%%%%OOOOOOOOOOOOOOOO%%%%%%%%%O-wywuyyytyyyyyyyyyyutyuw66wwww8wuuwwwwwwww86>>wwwuww>>rrrwwwuu,3ew=3ddOOOO&%%;%%%%%%OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO%%%%OOOO%>wy%%OOOOOOOOOOOOOOOOOOOOOOTUAuOO>3", "OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO%O%OO>OOOOOOOOOOOOOOOOO%OOOO%%&OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOoooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo.@2o+=OUTw8>>u>wVUV3OO3>O3e+UC==w>uuwww>*u>%%>u:3>&>C33=%dO*D>&VCfeLf45Y5foe3=3Do54d4O=C&Di@eHLf>OO%OO%&OOOOOOOOOOOOOOOOOOOOOOOO%%%%%OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOoooooooooooooooooooooooooooooooooooooooooooooooooooooO&wwwww>w>>wZAx6ww8868wuVt>>wuw>w86686>>wDVA>uO>yuu3LUeLEDC=u>y;w>>>>>>>u,&%OO%%OOOOOOO%OOO%%->w>>>wuw>&=wuee>Oo%%%%%OOOOOOOOOOOOOOOOOOOOO%%%%%%OO%%%%OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOoOOOOOO%%OOOOOOoOOOOOOOOOOOOOOOOooooooooooooooooooooOOOOOOOOOOOO%%%%%%%%%%%%%%%%OOOOOOOOOOOOOOOO%%%%%%%%OO;yVuwtyyyyyxxyyyyyyyyyuwwwwwwwwwuuwwwwuuwwwwww>wwutuuwtrrwwwuuww3=>3edo=&O>OOw%%%%%%OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO%%%%%%%OO%;>%%OOOOOOOOOOOOOOOOOOOOOOy>uTF&OO", "OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO%%&OO%OOOOOOOOOOOOOOOOO%OOOO%%&OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOoooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo.o@O%FTuwwwyww>>TA%uO=O>3o+3O4w>>wwuu>ww%***ww=>3eF33=eC3O>&V&FeeYLfSffS2SC>=y4D2SSf4,www>-6w6>6wuww>>>8wwuw>>8w6>wwwwwww6>wtD>u>w%yVOFDO3oCddwuO,w>>>www>%%OOOOOOOOOOOOO%O%%%%->ww>>>,>3u%>33w=oo%%%%%OOOOOOOOOOOOOOOOOOOOOOO%%%%%OOOOOO%OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOoOOOOOO%%OOOOOOoOOOOOOOOOOOOOOOOoooooooooooooooooooooOOOOOOOOOOO%%%%%%%%%%%%%%%%OOOOOOOOOOOOOOOO%%%%%%%%-%-wwwuVyyyyxnxyyyyytutyuuwwwwwwwuuwwwwuuuuwwwww68wwwuuurrrwwwwwyw=we=>C=oO=O%%%%%%%%%OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO%%%OO%%%%%%%OOOO%%OOOOOOOOOOOOOOOOOOOOOO&%OwOO&%", "OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO%%OOO%%%OOOOOOOOOOOOOOOOOOOOO%%%OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOoooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo...@@o=>AwwwwyyVwy%w>>UO&3oe==3=w**>>wu>w*:FF>:w=3>>d=3=3wV=eedCS4CL24(L4fDLJow3sL$2aSfoYfeShfLg%>&OO%%OOOOOOOOOOOOOOOOOOOOOOOOO%%%OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOooooooooooooooooooooooooooooooooooooooooooooooooOOOOOO%&>3ww>8uytwwtt6w6>>6wwwwwwww86>>>8wuuwy--VO-8yAw&3TDo3=e&3DF%w>>>>,>;%OOOOO%%%OOOOOOO%O%%%%->w;>ww>>VL=3=%&&OO%%%%%OOOOOOOOOOOooooooOOOOOO%%%%OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOoOOOOOO%%OOOOOOoOOOOOOOOOOOOOOOOooooooooooooooooooooooOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO%%%%%%%%O%>wuutxyyyyxxyyuutuuuuuuuuuuuuuuuwwwwwwwwwwwwwwwwwwwwwwrwwutuw,wyyw>=3ddeoOO&%O%%%%%%%OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO&%%OOO%%O%%%%OOO%%OOOOOOOOOOOOOOOOOOOOOOO&O%OO&O", "OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO%OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOoooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo.oo+ooO%>u>>w8tywuV&>yDuOwO3333o,**>>ww:>>wDDw::33&Ou&w3*>3=C2oeC=4f5aL@L5s5F3Dd55f+5+aSfCSfhfg@%%OOO%OOOOOOOOOOOOOOOOOOOOOOOOOO%OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOoooooooooooooooooooooooooooooooooooooooooooooooOOOOOOOO%&,ww,w8>6wt8->uxt86wwuwwwwwww--;>wwww>>>y8>%%O>uuLd=e433&DuiD;>ww>&%OOO%%%%%%OOOOOOO%O%%%%%>w>>wuw3VD>w=OOOOO%%%%%OOOOOOOOOOOoooooooOOOOO%%%%OO%%%%OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOoOOOOOO%%OOOOOOoOOOOOOOOOOOOOOOOoooooooooooooooooooooooOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO%%%%%%%%O;uyyyyuyyyyyyyuuuttuuutuutytttyuwwwuuw8wwwwwwwwwwwwwwwwwwwwwww,>VV3&we>yTO>O&O>%%%%%%%%OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO&&%%OOOOOO%%%OO%%%OOOOOOOOOOOOOOOOOOOOOOO&%&3OOO", "OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO%%&&O&OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOoooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo.o.oooo+3V%%w>w-V&u,DF;&=O3o33o3>*>,>>w:,u>%%:u>=2>3Aue>3u%3e4L+2455s$ohs2SS4=FSsS)hgSY^4@LYSSL.O%%&&OO&OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOooooooooooooooooooooooooooooooooooooooooooooooOOOOOOOOOO&>w3,;wuw>>8w>VFAu>8wtww8www6>;>>8www6y>%ww>uw;OwEUdOee>e>>%>>yVVw&%%%%%OOOO%OOOOOOO%O%%%%%>wu>>ww>&&=3=OOOoo%%%%%OOOOOOOOOOOooooooooOOOOO%%%O%&>>&%OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOoOOOOOO%%OOOOOOoOOOOOOOOOOOOOOOOooooooooooooooooooooooooOOOOOOOOOOOOOOOOOOOOOOOO%%%%%%%%%%%%%%%%%%%%%%%%>uywwynyxyyyyytuyyyyyyyyutyyyyyyuwwuyyw>wuuuuuttwwuutuwwuw88wwwwV>>uew3>3TFYOO>OO%%%%%%%OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO>&%%OOOOOO%OOOO%%%OOOOOOOOOOOOOOOOOOOOOOO&OO;OOO", "OOOOOOOO%OOO%%%%OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO%%%OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo..ooo@=3yCyw;V;uy%wVyu&>udF=3=O:::>ww,>%uw%>>:u=eO=OVO>w==3f=U4F4d4ff#PLSs22SDTRY{`S^@$5s5@p)D.OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOoooooOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOoooooooooooooooooooooooooooooooooooooooooooooooooOOOOOOOO&>>>u&>>uy>88uwwuw>wuww>www>6tVxw>8uww>>uw;;wUw>FuySdw3wuw8>&wDD>O&O%%%%%%%%OOOOOOO%O%%OO%;->ww,>3ww>>&OoOOo%%%%%OOOO=O=OOoOo+.L5o2oOOOOOO%%O%&&&&%OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOoOOOOOO%%OOOOOOooooooooooooooooooooooooooooooooooooooooooOOOOOOOOOOOOOOOOOOOOOOO%OO%%OO%%O>;%&%%-OO%-->wwyVxyyyytyyyyyytxyyyyyytuuuyyyyuyuwwwww>wwwuuuuuu>n>uwuuwwwuuuuwu,,uw;3Cy3dF=D3O=OOO&%O%OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO%>>OO&&O%OOO%&O%OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO", "OOOOOOOOOO%%OOO%OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo..oooo+EDED&>VFVFy>;%uy;>yVe=3>***:>>>>:u>%>>wyd3=eLwiVw>e4@aYLYWf5KfSPPh .4SLhEPLRI4gKP2SfS]4@OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOooooooOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOooooooooooooooooooooooooooooooooooooooooooooooooOOOOOOOOO&;>>>uy%-VVy;>;;>>>8wuuwwwww8wtuw>>8;uy6->uuU/>>&UCTe33,www6>%,wOO&O%%%%%%%%OOOOOOO%O%%%%>6>>ww,>>,>>>&OoOOo%%%%%OOO%OOOOO%o@.2`^@o=OOOOOOO%OO%%%%OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOoOOOOOO%%OOOOOOoooooooooooooooooooooooooooooooooooooooooooOOOOOOOOOOOOOOOOOOOOOO%OO%%OO%%O,>O%O&;;>wuuutyyxyynnyyyxxxyyyyyyyyytttynnyyyyytuwuuw8wwwwuuuuyOwwu6w>uuuuuuuu,>,wwwyFLdd>eSLLo%3OO%%-OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO%%>w&OO&OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO", "OOOOOOOOO%%OO&&OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO%%OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo..oooo@d=Cyy>-wyFVw>&,,&O%>yO>>*%**>>>>>w>%>wuVeF3V^yuA&y3odYKKSYJI#PPRWIPYS5fgS#X)ssIXIfPsE^o@OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOoooooooOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOoooooooooooooooooooooooooooooooooooooooooooooooOOOOOOOOOOO*;>>>yw>wuAwwwwuutywuyw88ww688888888ADnO>Vy%ut;>FOO3uw>>ww>u%%%O%>O%%%%%%%%OOOOOOO%OOO%-6w>>www>>>>>=%OOOOO%%%%%OOO>O&>O&O=.@5L4@ooOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOoOOOOOO%%OOOOOOooooooooooooooooooooooooooooooooooooooooooooOOOOOOOOOOOOOOOOOOOOO%%%%%%%%-O>;%>;>8wtyyxyyyytuynnyyyxxyyyyyyyyyyttyVVVytyxytuwwwwwwwwwwuuuyVw8UF-Dwwwuuuuywuuw,wudw=e=CeedOo>OO&;OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO&ww%%&%O&>%OO%OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO", "OOOOOOOO%%OO>iwOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO&&%OOO%%OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOoooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo.oo..o2C=wD>ww>yyyu>&>&&&FD==O***:>>,>,w>*>wuiee3SVwyOu==2fYK#g#J_PEIIWsPKsKJPL5PKXIPpSI^)ToeoOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOooooooooOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOooooooooooooooooooooooooooooooooooooooooooooooOOOOOOOOOOOOO&>>&uyu>&u>6wu8wuuwtyw888>>>688wut>>u>OtA>;yUVVd333yy,>ww>w>w,OO&%%%%%%%%%OOOOOOO%%OO%;>>;>www,3,>>=%OOOOO%%%%%OOOO=OO=`TO+oooo+OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOoOOOOOO%%OOOOOOoooooooooooooooooooooooooooooooooooooooooooooOOOOOOOOOOOOOOOOOOOO%%%%%%%%%O>>>yw8uyywwtywwuuuuyyuyyyyyyyyyyyyyyyyyyVxyutytuwwww8868wwwwuu6A8-UAOFwwwwwuyyuiyw>>w>3w=3d3@eLOo&%&%OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO%O%wVy&%O%>%O&%OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO", "OOOOOOOO%%OO>iwOOOOooOOOooooooooOOOOOOOOOOOOOOOOOOOOOOOO&&%OOO%%OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOoooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo.oo..ood3udOy8;wyu;O&Fy3OVi>==***:>,,>,>>,>>wuaF33OwOw&F42LShS(YsXPI')WsIKhPIPI$PY WYgPY.foo2+OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOooooooooOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOoooooooooooooooooooooooooooooooooooooooooooooOOOOOOOOOOOOOO*>>wi>,Vw%>;wu>>uwuuuwwuw>>www66uyUy>wuFD8txyuO%3V3ey>&8w>;,uw%OOO%%%%%%%%OOOOOOO%%OO%>6>>>wwwwww,=*OOOOOO%%%%%OOOO=OO=`TO3oo==3o%OOOOOOOO%OOOOOO%OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOoOOOOOO%%OOOOOOooooooooooooooooooooooooooooooooooooooooooooooOOOOOOOOOOOOOOOOOOO%%%%%%%---yt8uwwwyu6>wu8wyVntuuuuuutyyyxyyyyyyyyyyyyyyytuuww868w68wwwwuuy6uw>w>6ww3,wwuywyy,>wuwey33CdVi3%%O%%O&OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO", "OOOOOOOOO%%OO&&OOOOooOOOooooooooOOOOOOOOOOOOOOOOOOOOOOOO%%OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOoooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo.o...@+odd>wA6w8w>66>AV>%wO%&3%%%:>>>>,>wu>>wwf@dF>wu>%=eSLKQPsKW5IP~I#R)RjQ)R2o$#^hgKRP)^o=oOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOooooooooOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOooooooooooooooooooooooooooooooooooooooooooooOOOOOOOOOOOOOOO%&euywuVu,w;wu>8ywwuwwyyyw6wuw>>8uDu>>O%wy>->wu>>==3w>&686>,>>&%OO%%%%%%%%OOOOOOO%%O%;wwww,ww,wuww=%OOOOOO%%%%%OOO>O&>O&O=%OOoo%OOOOOOOOOO%OOOOOO%OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOoOOOOOO%%OOOOOOooooooooooooooooooooooooooooooooooooooooooooooooOOOOOOOOOOOOOOOOO%%%---;>;uDV;>>w>wuuuuw6uVFAyuuuuuuyyynVyyyyyyyyyyutyyytytuw88wwwwwwwwwwyuVy>yyVyuw,>,wwwyywwuuw>*d=DF==D=OOOO%-OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO%OO%%%>y&uOO&O&OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO", "OOOOOOOOOO%%OOO%OOOooOOOooooooooOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOoooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo.o..o@Sae3w-u>u66%yFuw>%DD>w>O%%*>,w>>,>uy>:wuo23dUy&yww3fYEIQPgRg#KsRWWQ)j$gPS5.#KgSY5fL2@=o,OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOooooooooOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOooooooooooooooooooooooooooooooooooooooooooooOOOOOOOOOOOooOOOOy,yViu>yV>;>%8y;wuuuutuw8www66ww>>ut>-VU8%u>FF>&==>>>>8www,>>&%%%%%%%%%%OOOOOOO%OO%>w88www,>,ww3=OOOOOOO%%%%%OOO%OOOOO%oOOO&=OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOoOOOOOO%%OOOOOOoooooooooooooooooooooooooooooooooooooooooooooooooOOOOOOOOOOOOOOOO%%%;>>8wwwAt;8>>>>wutwwwwyZVyyyyttuutyyyyyyyyyyyyyyytttyytuw66wwwwwwwwww>nw8yx-Dyuw>>,wuuyuuwww8y=dofL2O;O&OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO", "OOOOOOOO%OOO%%%%OOOooOOOooooooooOOOOOOOOOOOOOOOOOOOOOOOOOOO%%%OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOoooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo.o..o+aESU/;;x>wtO>Dnww%TFO&w&%%:,www>w>yV>*uy>UVwu8nZ>wuyu8>>>>>>8wuuuuw>wVyww;wuFy/Ow3>>,8>6w;uyw>%O%%%%%%%%%OOOOOOO%%%&>6>>>uw,>>ww>=OOOOOOO%%%%%OOOO=O=OOoOO;OO%%=OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOoOOOOOO%%OOOOOOoooooooooooooooooooooooooooooooooooooooooooooooooOOOOOOOOOOOOOOOO%%%>8wwyu;>->Vy;w>>8w>>w->wwuyyytuuwwwuuyyyytuuuyyxywwwtuuww>>6wwwwwwwwwywwVwu-Auww>,wuywwwwwwwww*3=4^2=4<=O&&O;OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO%&OO%%OuUuO&OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO", "%%%%%%%%%%OOooooOOOOOOOOOOOOOOOOooOOOOOOOOOOOOO%OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO%%%%%%%%%%%%%%%%OOOOOOOOOOOOOOOO%%%%%%%%%%%%%%%%OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOoooooooooooooooooooooooooooooooooooooooooooooooo..o.@@o2DUdCyuw>Vt>%Vde=3fLoe=O%%%6w>>ww;;>&&3w*2S34d+5@hY.LgS$s)s#ghWKj`['PjXW`IIQ`{{)Y[fo=%%OO%%%%%%%%%%%%%%%%OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO%%%%OOOOOOooooooOOOOOOOOOOOOOOOOOOOOOOOOooooooooooooooooooooooooooo......oooO%%%OOOooooooooooooo%%%%%%%%yUVun;u-TA6>wtt;wwwwwwwwu86ww66wwyt%Zt6>&e=332f4@=+=&;97>&>ww%O%%%%%%%%%OOOOOOOO&OO&>>>,688wwuw>%%OOOOOOOOOOOOOOOOOOOOOOOOOOooooooOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOooooooooooooooooooooOOOOOOOOooooooooooooooooooooooooooooooooooooooooooooooooooooooOOOOOOOOOOOOO%%%&>wuuuuwuw>wAF3ew&&wuw>wuytutyutyuwwwwwuyyyuuuwVtwyyywyw>ywy6>88wwwwwwuttuuyywwwuuuwwwwww88ww6>u>Le4^4@4a2o+2o%%OO%OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO", "%%%%%%%%%%OOooooOOOOOOOOOOOOOOOOooOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO%%%%%%%%%%%%%%%%OOOOOOOOOOOOOOOO%%%%%%%%%%%%%%%%OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOoooooooooooooooooooooooooooooooooooooooooooooooo..o.ooofe4e>>>wyw6Vu>333CJ++o=eFt6;;%->6&wu>y>>3o=YdoCf2S$PRsSEKg))WWKKKW'`RXR'gfSLW'_^^YOo&OOO&%%%%%%%%%%%%%%%%OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO%%%%OOOOOOooooooOOOOOOOOOOOOOOOOOOOOOOOOooooooooooooooooooooooooooo.....ooooO%%%OOOooooooooooooo%%%%%%%%>Dywy6w>t;->6wytwwww8888>8wwwwwwx%>nD-;we3e2F^)S222ww676>>>uw&O%%%%%%%%%OOOOOOOOOO%wyw>>68wwutw>%%OOOOOOOOOOOOOOOOOOOOOOOOOOooooooOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOooooooooooooooooooooOOOOOOOOooooooooooooooooooooooooooooooooooooooooooooooooooooooOOOOOOOOOOOOOO%OO&wuuwuw,w>uVA%*=wuuw>,wutuuuuuuuwwwwwuyyyyuuuuyyVt>tywuw8%%;y>>8wwwwwwtyuuttwwwuuuwwwwtyuwwww,&udoD)+54@fL3o=OO%%%%%%OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO", "%%%%%%%%%%OOooooOOOOOOOOOOOOOOOOoooOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO%%%%%%%%%%%%%%%%OOOOOOOOOOOOOOOO%%%%%%%%%%%%%%%%OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOooooooooooooooooooooooooooooooooooooooooooooooooo..o@o+UTed%>wwwtxuOwLeoLDoeo=eSw-->;>>;wu3wDC3>OCCe224+2fSK)))LsIKIR$gQ}''[)~XR55@.@..o+o=&OOO%%%%%%%%%%%%%%%%%OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO%%%OOOOOOOooooooOOOOOOOOOOOOOOOOOOOOOOOOoooooooooooooooooooooooooooo....ooooOO%%OOOoooooooooooooOOOO%%%%Oyu8yt8wZtyxuwuwwwww8866wwwtuw8ww>w&u&Fw3+fL.445+oo>,wr9w>wuu&%%%%%%%%%%OOOOOOOOOO&wyu,>wwwwuyu>%%OOOOOOOOOOOOOOOOOOOOOOOOOOoooooooOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOooooooooooooooooooooOOOOOOOOoooooooooooooooooooooooooooooooooooooooooooooooooooooooOOOOOOOOOOOOO%OO&wyuwy>;>>uyy3&>VFVuuwwuuuuuuuuww66wwyyyyyuutyyyVw>xwuuwuAy>>>>8wwuwwwuyuwuuuwwwwwwwwwyxywwwwu>3&3LYDd@2ET=&o&&%OOO%&OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO", "%%%%%%%%%%OOooooooooooooOOOOOOOOooooOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO%%%%%%%%%%%%%%%%OOOOOOOOOOOOOOOO%%%%%%%%%%%%%%%%OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOoooooooooooooooooooooooooooooooooooooooooooooooo...o@o=YU333wuy>tu->F=2DD+2=+Oo3>%-8666&>u>>3uwd==2ofL4dLfL4fL$@shSKhhIIKPR{`5`K@@..@2+=o==OO%OO%%%%%%%%%%%%%%%%OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO%%OOOOOOOOOoooooOOOOOOOOOOOOOOOOOOOOOOOOoooooooooooooooooooooooooooo....ooooOO%%ooooooooooooooooOOOOOO%%O>ywyn>ux6>wwtt8wwww8666y86yy&&w;,u=3eTF+foEEE^2K523>667w,wuu;%O%%%%%%%%OOOOOOOOOOO>wwwwwuuutyw>%OOOOOOOOOOOOOOOOOOOOOOOOOOOoooooooOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOooooooooooooooooooooOOOOOOOOooooooooooooooooooooooooooooooooooooooooooooooooooooooooOOOOOOOOOOOO%%&,uyuuu>;>>ww>3&&wuwwwwuuuuuuuuuww>6wwyyyyuutyyyyuwAD>yywtTDwO>>wwuwww8uyuwwuuwwwwwwww8uyuwwwwuw>>CCeE+23f4STO&&%OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO", "%%%%%%%%%OOOooooooooooooOOOOOOOOoooooOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO%%%%%%%%%%%%%%%%OOOOOOOOOOOOOOOO%%%%%%%%%%%%%%%%OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOoooooooooooooooooooooooooooooooooooooooooooooooo.oo..ood3>uDywy>>n&OedTFdo3o=%=>y8>>%%>>&>&y>Ay3%=32eUYeffDUSSf2s5YIfSs$X#R_R5@.o+=@ooooo%oO%%O%%%%%%%%%%%%%%%%%OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOoooooOOOOOOOOOOOOOOOOOOOOOOOOooooooooooooooooooooooooooooo..oooooOOOOooooooooooooooooOOOOOOOO%%yuuy-w6-;8wttwuwwww866uwwwwwwwwO@3=o3+o5)PLKssY523>w69wwwww&%O%%%%%%%%OOOOOOOO%OO%&>wuuuuuuuw;OOOOOOOOOOOOOOOOOOOOOOOOOOOOoooooooOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOooooooooooooooooooooOOOOOOOOoooooooooooooooooooooooooooooooooooooooooooooooooooooooooOOOOOOOOOOO%&wyyuuyywww>>>&3>=&&>3wuuuuutuuuuww66wuuuuuuutywuuttDUuwtw;Au>uwwwuuwww8uyuwwuuuwwwwwww8wwwwuw6;6ww>3dC=d=3CFDwOOO%&&%OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO", "O%%%%%%%%OOOooooooooooooOOOOOOOOooooooOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOoooooooooooooooooooooooooooooooooooooooooooooooo.o@.ooo<4duDu>ywu&uV&e^L+e==>=y*u>ww&&>>>,Oe=CyyOCO3==YDUFf.SS.CSfS2Sh#SP5S@o.@oooOOoOO&oOOO&OO*OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOoooOOOOOOOOOOOOOOOOOOOOOOOOooooooooooooooooooooooooooooooooooooOOOOooooooooooooooooOOOOOOOO&%yuwu%>8wVAt8wuuuwwww88;xy>>AFeCUD5+Ss.sSshs#s5L.o=>trt,>>>;&%O%%%%%%%%OOOOOOOOOO%%;>wuttuwww>%OOOOOOOOOOOOOOOOOOOOOOOOOOOooooooooOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOoooooooooooooooooooooOOOOOOoooooooooooooooooooooooooooooooooooooooooooooooooooooooooooOOOOOOOOOO%>uViwwyyuyu>>,>>33>>wwwuuwuuttuwwww88wwwwuuuuuyuwuVuuAt6uw;w->Vuuuuuwwwwuyuwuuuuuwwwwwww8>>wyuw-t>>w>w>w3CTL;%>>>&OO%%OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO", "OO%%%%%%%OOoooooooooooooOOOOOOOOoooooooOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOoooooooooooooooooooooooooooooooooooooooooooooooo.o@.@@o33w>3>>uyyww;OEE+od==O%%O&%>uuuw>>yw&3O>U=O=o=ed^FdeOOOOOOOO*O=&OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOoooooooooooooooooooooooooooooooooooooOOOooooooooooooooooOOOOOOOO%Owtww>8%-wxw8tytuuuwwww6yy8wVCe+Uf.@^S$KSXshYY5^52wwxrz>>&%%%%%%%%%%%%%OOOOOOOOO%%%&>wuyyuwww&OOOOOOOOOOOOOOOOOOOOOOOOOOOOoooooooooOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOoooooooooooooooooooooOOOOOOooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooOOOOOOOOO%&wyywwyyuyy>>w>>&=3w,>>wwwwuuuuwwww86wwwwuuuuuuutwyu;6>ww8tuuwuuuuuuuutwtyuuttwtuuwwwww86>>>www6t%>Vw%w%wGAOwVwVVeOoOO%OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO", "OOO%%%%%OOOoooooooooooooooooooooooooooooOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOoooooooooooooooooooooooooooooooooooooooooooooooo.oooooo3>uDww>-u&y,>OYO==edoO3Oww%%>wee3wydD]T=3e>weeSDFC=++OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOoooooooooooooooooooooooooooooooooooooOOOooooooooooooooooOOOOOOOOOO>yu8ttt>6wwututttuuuuut6>uw&O2af.$SE $sX))R KI)2+>&ytZ>>%OOO%%%%%%%%%%OOOOOOOO%%OOO;wyyyuw,>%OOOOOOOOOOOOOOOOOOOOOOOOOOOOoooooooooOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOoooooooooooooooooooooOOOOOOoooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooOOOOOOOO%O&wu,wyywwu>,w>d>=yVu3uw,>8wuuw6www6>68wwutuwww>ywwnVx>ww>y>uwuuuuwutyyuttuuyywytuwwwww>>>-->66t%wy-wy,u>,OuyOweCCe=OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO", "OOOO%%%%OOOooooooooooooooooooooooooooooooOOOOOOOooooooooooooooooOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO%OOOO%%OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo..+oo=SVO>y>>>w,A>*===L+3=3w&>>=33=3edA33eS[)eTDdeS`Ee=2SFefE4C4SF[_LTooooOOOOO%%%%%%%%%OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOooooooooooooooooOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOoooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooOOO%%>tyw688;t6wn8wuwuytwwu6twu3>eO4SS@h]K_'IK#XIsK`EUe**6%%%%%%%%%%%%%%%%%OOOOOOOOOOOOOOOO;&&%%OOOOOOOOOOOooooooooooooooooOOooooooooooooOOooooooooooooooooOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOooooooooooooooooooooooOOOOOooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooOOOOOOO%%%&&>wwuuuww,wuVV3uy33w>>>>8wwuwwwwwwwwwwwwwwwwwwwwww8>6wuuwwwwyyuuuuyyuutyyyuwuttuwwwuw>>6w>>w66>>wtw>>wuw>wyy=4Ee+Oo>OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO", "OOOOO%%OOOOoooooooooooooooooooooooooooooooOOOOOOooooooooooooooooOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO%%%OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooOO&&y%w>>;>w3=VO33=3>wu3>>o==Fde@dVODo=F=D=O26w>668twttwtytttnnxtw>>3+UE5@JKK`[IR[RIhKYSUe^>O;%%%%%%%%%%%%%%%%OOOOOOOOOOOOOOOO%%%%%OOOOOOOOOOOooooooooooooooooOOooooooooooooOOooooooooooooooooOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOooooooooooooooooooooooOOOOOoooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooOOOOOO%&&&>>,wuuuuuuuu&u333>wuwwwwwwwwwww8www6wwwwwwww8wwwww86>wwwwwwwytuuutyyyyyyyyuwwuuwwwwww8>86>>68>-->666t8>uyyu3oSeo==oOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO", "OOOOOOOOOOoooooooooooooooooooooooooooooooooOOOOOooooooooooooooooOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO%%%OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo@@OeDVUT&y>>>wwe=deo@==&O&>&>f2oee2=F3=LV=ee=+f=oU4oS@^U43@DdLfTLCY4oooOOO%%%%%%%%%%%%%OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOoooooooooooooooooooOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooOOOO>uytw886;ttwttttttttyVywtu,3=@+YE@$s'{{K'}Kf5fR4SDD:>O%%%%%%%%%%%%%%%%OOOOOOOOOOOOOOOOOOOOOOOOOOOOOoooooooooooooooooooOooooooooooooooOooooooooooooooooOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOoooooooooooooooooooooooOOOOooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooOOOOO%&&&>>>>wwuuuuuw3y3;&&w>wwwuuuuwwww8w86>wwwwwwww>6wwww86>6wwwwwwtttyyyyyyyyyytwwwwww88wwwwww6>>wu>;>>6wx6uu>&3u3e2Yf=oOoOOOOOOO%OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO", "OOOOOOOOOOooooooooooooooooooooooooooooooooooOOOOooooooooooooooooOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO&%OO%%%OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOoooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo@oo+oo=S3FUyy86tu>3>=3D=2=>O>y>w+=SfD=aS+de>>ede4oofUf2fftyytr6u6ZZ6ttttttwwutu;uw3e32S52SSE'['KR)$R$@YL4eo3O&%%%%%%%%%%%%%%%%OOOOOOOOOOOOOOOOOOOOOOOOOOOOooooooooooooooooooooooooooooooooooooooooooooooooooooOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOooooooooooooooooooooooooOOooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooOOOO%%%&&;&&uuuuyuw,DFw33wi,>>,wwwuuww88w8>>wwwww866>>6wwww8>>68wwwwuutyyyyyyyttttuwwwww88ww8wuw86wtu>&686tAV>wAd%>DL=Y_o=oOOOOOOO%%OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO%%%%%%%%%%%%%%%%OOOOOOOOOOOOOOOO", "OOOOOOOOOOoooo.ooooooooooooooooooooooooooooooOOOooooooooooooooooooooooooooooooooOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO>&%OOO%%OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOoooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo@2433&iDVy-6d33C4C`eo==*wu>-22f4TUD=oeFO3D==fwttw66t8Zx-wuwuttwwwwVyyw3ydae4f)'4hY hsRppfUp4e=&3*O%%%%%%%%%%%%%%%%OOOOOOOOOOOOOOOOOOOOOOOOOOOoooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooOOOOOOOOooooooooooooooooooooooooooooooooOOoooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooOOOOOO%;>>&uuuyyyuuFu%3>;uww>>>6wutww8ww8>>wwwww86>>>68wwww>>>68wwwwuuyyyyyytuuuyyywwwww8ww>www>>wu>%%>>;wZw>>yVdedFo5^2o=oOOOOO%%%OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO%%%%%%%%%%%%%%%%OOOOOOOOOOOOOOOO", "OOOOOOOOOOoooo.ooooooooooooooooooooooooooooooooOooooooooooooooooooooooooooooooooOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO>;%OOO%%OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOoooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo+eFLUw>UVV-6=3Oe@/De=e=O%;w>+LLf+dCS^UC2wFUSSEPS245Cs4LsL^Jf5SL54^LooooOOO%%OOOOOOOOOO%%%%%%OOOOOOOOOOOOOOOOooooooooooooooooooooooooooooooooooooooOOOOOOO%%%OOOOOOOOOOOOOOOOOOOOOOOOooooooooooooooooooooooooooooooOOOooooo..ooooooooooooooooooooooOOO%&>8ww6ww6w8-6w6wttttttiAVyueC3dSS5S$s5Sgs.L2@f3ad=C=oO%%%%%%%%%%%%%%%%OOOOOOOOOOOOOOOO%%%OOOOOOOooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooOOOOOOOOooooooooooooooooooooooooooooooooOOoooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooOOOO%>w,>wwuyyyVVAeyFd3AFyuw>>8wuw88www6>8wwwww868888wwwww6>>8wwwwwuuyyyyyuwwuyyywuwww8ww>ww>>>>>>&&>>;6t6ww&&edfC5L]ooo@OOOOO%%%OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO%%%%%%%%%%%%%%%%OOOOOOOOOOOOOOOO", "OOOOOOOOOOoooo.oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO&%%%%%OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOoooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo+ooooo3DDw%nwt>AeFeC=)oFCUy>>-At+JDho<+e^L=dF>TCSLSS$LUSa@sh.25.KL$4.)EooooOOOO%OOOOOOOOOO%%%%%%OOOOOOOOOOOOOOOOooooooooooooooooooooooooooooooooooooooOOOOOO%%%%OOOOOOOOOOOOOOOOOOOOOOOOooooooooooooooooooooooooooooooOOOoooo...oooooooooooooooo.ooooooOO%%-6tr8t686wy888utuwtytuDViweLe3d5L4L2f5$s#h)fTL3CCoO=o%%%%%%%%%%%%%%%%OOOOOOOOOOOOOOOO%%OOOOOOOOooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooOOOOOOOOooooooooooooooooooooooooooooooooOooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo%OO%>ww,>wuuwuVA3&>y&Oiiyuww88ww88wwwww68wwwwwwwwwwwwwwwww>>8ww6wwwwuyyxyyuwutyyuuuw868w8ww>>>>>>>>>>>8wA>;Veo2UEh`[LoooOOOOO%%%OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO%%%%%%%%%%%%%%%%OOOOOOOOOOOOOOOO", "OOOOOOOOOOoooo.oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO%%%OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOoooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo@o+33=3uyut>-Fe=3Co+3+dUddu%x%@4f4wttw8wtuVUu>%eELaf4E[f2fS44$+_LL3edO3=o=%%%%%%%%%%%%%%%%OOOOOOOOOOOOOOOOOOOOOOOOOOooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooOOOOOOOOooooooooooooooooooooooooooooooooOooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo%OO%&>,>>www>wyAd33u>yGDuwwwwwww66wwuuww6wwwuwwwwwwwwwwwuw668ww6wwwwwtyxnyuwuuyyuuuw6>>68ww>6ww6=>>&;8ww%ww==32@a@2E)3o@OOOOO%%%OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO%%%%%%%%%%%%%%%%OOOOOOOOOOOOOOOO", "--%%%OOOooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOooooooooOOOOOOOOOOOOOOOOOOOOOOOOO%%%%%%%OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOooooooooooooooooooooooooOOOOOOOOOOOOOOOOoooooooooooooooo.o.@oVFtwttuu==3wVyuTA;i&y>,Ai,,y%;;==eEDF53=e%VeewFdSLFfSSP.$fho4f=TYOOOO%%%%%%OOOOOOOOOOOOOOOOooooooooOOOOOOOOOOOOOOOOOOOOOOOOooooooooooooooooooooooooOOOOOOOOOOOOOOOOOOOOOOOOoooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooOoOOO%dSFu>uw,yuuu>,VFAu>eATVeDw&dOdf^ea=DDYS2Sg.@S.L=O>OOOOOOOOOOOOoooooOOOOOoooOOOO%%%%%OOOOOOOOOOOOOoooooooooooooooooo.ooooooooooooOOOooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooOooooooOooooooooOOOOOOOOOOOOOOOOoooooooooooooooooooooooooooooooo..oooooooooooooooo@+o=ew;>8wwwyxruuwwwuyu%u>8;tr86>>8wwuwwwwwww6888wwwut86>>686;twwwuttyyxxxyttxttwww86>8,>>>>,w>-ww;6u>>>>uu%%yC==3UeOOOOOOOOOOOOOOOOOOO%%%%%%%OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO%%%%%%%%OOOOOOOO", "--%%%OOOooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOooooooooOOOOOOOOOOOOOOOOOOOOOOOOOO%%%%%%OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOooooooooooooooooooooooooOOOOOOOOOOOOOOOOoooooooooooooooo...=>DDVwtw8,==dyADVFAVOwy,>uw>,--8u==+SF+ww>y;yyADFVyV&Oyw<dO3Oewyuw8wtuwwwuDdiDUtw86688wwwwwwwwwwww8wwwwwww86>>6wwwtttytuw8xytyyyyytuwwwwww>>>>>>>>>>>>;>6->wuyy>%wd=OCLeo=OOOOOOOOOOOOOOOOOO%%%%%%OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO", "-%%%%OOoooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOooooooooOOOOOOOOOOOOOOOOOOOOOOOOOO%%%%%%OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOooooooooooooooooooooooooOOOOOOOOOOOOOOOOoooooooooooooooo...@OVVrvxw6,3eCDu,;>%wV>,,,,wwiAt>&&dCL4@SF3&FUw3&SC>wyyVAV,uVVyw,uwyeVO=D==3_SL3ELSFooLS.5.WEfO*O&OOOOOOOOOOOoooooOOOOooooOOOOO%%%OOOOOOOOOOOOOooooooooooooooooooooooooooooooooooOooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooOooooooOooooooooOOOOOOOOOOOOOOOOoooooooooooooooooooooooooooooooo..ooooooooooooooooooodF>www>>;>6>8wuww3>Cy;yD>;888wwwwwwwwwwwwww88www86688668wtxwtyxxyytxtutyxxytwwwwuuu>>>>>;&&>8>;ww>;%&%&,>>uy33SDeo3OOOOOOOOOOOOOOOOOO%%%%%%OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO", "%%%%%OOoooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooOOOOOOOOooooooooOOOOOOOOOOOOOOOOOOOOOOOOOOO%%%%%OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOoooooooooooooooooooooooooooooooooooooooooooooooooooooooo..ooo,>wxntwwweCDTDwVVwiw,ie>=>3n&O&dSSd=@ef@eVF,CeCd+SSehOuOud&CS=eDLY2LoDD==+fLpEL+ooOO%OOOOOOOOOOOoooooOOOOooooOOOOO%%%OOOOOOOOOOOOooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooOOOOOOOOOOOOOOOOOOOOOOOOoooooooooooooooooooooooo..ooooooooooooooooo@oo=e3wuw>;>6;>>33>==333>>>wywww8wwwuuwww6688668ww8668www8wtx8wwwwtnVttuwtxxxttwwwttt>>>>>&&;;w>;yywwVVy,w,>>==e=3oOoooooooooOOOOOOOOOOO%%%%%OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO", "%%%%OOOoooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooOOOOOOOOooooooooOOOOOOOOOOOOOOOOOOOOOOOOOOO%%%%%OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOooooooooooooooooooooooooooooooooooooooooooooooooooooooooo.o=wFyZxxtwu,>uwDi;uy&,3=iw&=A%uyw>wyyw>DVOOew3yd3oe2So3o+o4.SW)].o3O>OOOOOOOOOOOOOoooooOOOOoooooOOOO%%%OOOOOOOOOOOoooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOoooooooooooooooo..ooooooooooooooooo=+oOCyw>wVVu;&&&;>====Ode&uw>uw8>6wuyytuw8666>68wwww8wwttw88w8ww66wuwwttwwtxnxtuwutuu6>>>;>,w;w>>yywu%,w3yVCF33Cd3O=OooooooooOOOOOOOOOOO%%%%%OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO", "%%%OOOooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooOOOOOOOOooooooooOOOOOOOOOOOOOOOOOOOOOOOOOOOOO%%%OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo=FTAVxxrtyw;>A>,A>>yCe=e=@34DLe3+3@C4oOeeSe=idC=DFC<4wyw>>>6>;>8e*w=Odd33Co+3o4=O342+2.)L+=oo>OOOOOOOOOOOOOoooooOOOooooooOOOO%%%OOOOOOOOOOooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOoooooooooooooooo..oooooooooooooooooo@OO3w3>wyiu>;&&&====4@=3=u>&uw868wtynxytuwww68wwwuwwwwtuw866;8wwtxywwtt86uxnxyttttww>>>;>>wy;8>>uuw>yVe=*&3d==eLOoooooooooooOOOOOOOOOOOOO%%%OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOoooooooo", "%%%OOOooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooOOOOOOOOooooooooOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO%OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOoooooooooooooooooooooooooooooooooooooooooooooooooooooooooooOCTVuxt8wVy>>wyFD&uy=DCd=<4w>u>-u%>wtw6>8tOOVV3w3=CdeCfD3o=ed2d44Yooo=oO,OOOOOOOOOOOOoooooOOOooooooOOOOO%%OOOOOOOOOoooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooOOOOOOOOOOOOOOOOOOOOOOOOoooooooooooooooo..ooooooooooooooo=ooO+oo=3eew>wy3>=====+FU==33yuwwwwwuyyyyyyyyuuwwwuuuuuwwwwwww6;>8wyZVtuyu>>uyyttttttwwww,>>>3w--6w>ww>ude3>2dD4=eU=+O+ooooooooOOOOOOOOOOOOOOO%OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOoooooooo", "%OOOOoooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooOOOOOOOOooooooooOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOoooooooooooooooooooooooooooooooooooooooooooooooooooooooooo@owUynyw->yyw>*wwVu3eTCid2fSfEff+f2LD@44SHO<,3wiUOdu86>866>>6>>w>dDeOCe=3Se2eoo=322f_@@ooOo3OOOOOOOOOOOOOoooooOOooooooooOOOO%%OOOOOOOOooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooOOOOOOOOOOOOOOOOOOOOOOOOoooooooooooooooo..ooooooooooooooo@oo+@o=eeeeuuuyw33>2=+@S_f=3Ow&>>wuuuuuyyyyyyyutuuuuuuuw6>>wuuwww>-wxywtyw>>yxuttttttwwtuuw>&&&%%>w>wy>O3dCd23C=oeCoo=oooooooooOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOoooooooooooooooo", "OOOooooo...ooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo@3Vyyit>>>V&w*OAud3=3))Hf4SS^PL5fSh4ed=>>&>eyoeedo=a<=+<=+fCooooOOOO%OOOOOOOOOOOoooooOOOooooooooOO%%%OOOOOOOOooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooOOOOOOOOOOOOOOOOoooooooooooooooo..ooooooooooooooOOoooo@@5o==uu&yu>dD===@4FY3>%3&,wwwwwwwwwuuyuuuwwwwwwwwuwwwwwwwwww>xFu>y;%>wyywwwuuwww8uwuw>3uw>u&u%uA3w==fdL3<3oLfo=o@oooooooooooooOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOoooooooooooooooo", "OOOoooo.....ooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo4oo4CdVuwDu/)u&OuD;Oo3<^]LLLfSLKg)`oLf4+CUDw,wyu6>8>3ee=>ed@3=2a3ad3DS2+oooooOOOOOOOOOOOOOOOOOoooooOOOooooooooOOO%%OOOOOOOOooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooOOOOOOOOOOOOOOOOoooooooooooooooo..ooooooooooooooOOoooo@@2S3eeeVwA&3De@+3=eL=>%3;>,wwwww,wwwwwww3;;&&&&;;>>>,,>>>wwywuywuy>>wwuuw>8utwwwuuwuw>wyu-wAi>3e=d2o=S&=3==e==D=+d4Ce@=@o+OOOOOOOOOOOOOOOOOOOoooooOOoooooooooOOO%%OOOOOOOOooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooOOOOOOOOOOOOOOOOoooooooooooooooo..ooooooooooooooOOOooooof{T4Vwu,y>wue===@=C=3&>;>>www3>;>>>>>;&&%%%OO%%%%&>,w>>&>>uwww%w,&&wwuyywyVxu8wtw,w>%>w>&>uwdeF=o+2o424++LeoooO=oooooooooooooooOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOooooooooOOOOOOOO", "Oooooo.......oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOoooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo.oo@o4ddd3ee3yOww&wyV=SFSEhYYp5gPss5S#4Fe3^i=C<=ewydyee*V3u/w>O%OOOOOOOOOOOOOOOOooooooooooooooooooooooooooOOOOOOooooooooooooooooooooooooooooooooooooooooooooooooOOOOOOOOOOOOOOOOoooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooOOO+o@off3==&&&&&>uy>%>3ewOeCeeLd3eS;>>>>>&%&&&%%OOO%OOOOOO%O%&>>>>;>%&;w>Owy>>>>>w>txVntwwtw>>&O&>&wyO>AVUCww3=3S3f4SLSLSLkWgs$ff4de^C3w33ViwD&>;>OO%OOOOOOOOOOOOOOOOooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooOO+.@+o234=>>&&>3>V3&>wye=ee=34deof+O+oo@oOOOOOOOOOOOOOOOOOOOooooooooooooooooOOOO%OOOOOOOooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo..ooooooooooooooOOOOoo..s(f5@=>&ywwwA&O33&u;>&->&&&&%%%%OOOOOOOO%%%%%%%%O%%&&;>>>%&%;>>Fi>&;;,ww>6wwtttyuww>%&>%>u>3>dCF2LSo@_R$d4@@+oooooooooooooooooooOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO", "oooo.........oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOooooooooOOOOOOOOoooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo...+`_LL54+Y[DO3y*Ow=df=CLLfSPSPIW`}5$pSLYVwwu,>O%OOOOOOOOOOOOOOOOOOOoooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo.$S^DL5o+=3>>>=&>===O%>==3eDCT(^o+oo=Oo=OOOOOOOOOOOOOOOOOOOooooooooooooooooOOOO%OOOOOOooooooooooooooooooooooooooOooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo........oooooooooooooooooooooooooooooooo..oooooooooooooo%OOOoooo.YUfO>>*3&&;-6*%OOOOOOOOOOOOOO%OOOOOO%OOOOO%&&&&>&%;yUV3;>>wuw>>6wwtuwuww,&>>%>%Vw>Dod3+2o@4P}Fooooo@@ooooooooooooooooOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO", "oooo.........oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOooooooooOOOOOOOOoooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo.5^hQ)@2faEE333%yTee@=ShhssSIKIKQW^h@D5UTeeCdC3CViAD>Vuw*%OuO%OOOOOOOOOOOOOOoooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo+@#ffLff4==33=>e&=wwOO33e==C=odfo=oo=OoOOOOOOOOOOOOOOOOOOOOoooooooooooooooooOOO%OOOOOOooooooooooooooooooooooooooOOooooooooooooo.oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo........oooooooooooooooo..................oooooooooooooo%%OOoo@@f^Ee+d&;;xw-%w>O>&w;->->OOOOOOOOOOOOOOOOOOOOOOOOOOOOOO%%&>w&;,wDDVyu>%%O6wwww88ww>ww>33%y>VuFU3fJdLS..E^+oo=+oooooooooooooooooooOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO", "oooo.........oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOooooooooOOOOOOOOooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooX.@4PS[)@+2^d44dy**FOLFCD5p4hghYQkj$KLK<==SVedUFwVuyAD&DU%*O*OO-OOOOOOOOOOOOOooooooooooooooooooo....oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo@.+.EREYF2@ee=yL%%>3&=>=Ed3DU<+o@o@+oo>%OOOOOOOOOOOOOOOOOOOoooooooooooooooooOOOOOOOOOOooooooooooooooooooooooooooOOOoooooooooooo.oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo........oooooooooooooooo..................oooooooooooooo%%OOo@@@WLS4=edytw-w&,&>>>u>-6%;OOOOOOOOOOOOOOOOOOOOOOOO%%%%%%%%>&>;uuOOu,wu>>3,%;886>6wwwuuwuu>%y>&d=CfSLJL^)] o=oooo+oooooooooooooooooOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO%%%%%%%%", "................ooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooOOOOOOOOoooooooooooooooooooooooooooooooooooOOOOOOOOOOOOOOooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo@o@@@2YDO3wVu%8-==%O,VVuFFdi44SYRKKRhSPJfff+f4>wuwy>wu%y>eCC>FFCooa.){R @@ooooooooooooooooooooooOOOOOOOOOOOOOOOOOOOOOOOO%%%%%OOOOOOOOOoO%OO%O%%OOOOOOOOO", "................ooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooOOOOOOOOoooooooooooooooooooooooooooooooooooOOOOOOOOOOOOOOoooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo@+eeS^S3wyuww>6O==%&wyy=CCFdYffJKhgSJIE{L@fESSLSffeeFF>&%%OOOOOoooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo@.@+LUYS2f+4f5SUyw3>OoS++@oo@oo@oooooooooooooooo%%%OOooooooooooooooooooooooooOOOoooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo............oooooooooooooooooOOOoO=3=ede<=+o,=&OOOOOO===@oooooooooooooooooooOOOOOOOOOOOOOOOOO>w>OO3e=o5Sof5LE>ODT3OwOuwyuyAD>O3ey3y3e2@sRW X@oooooooooooooooooooooooOOOOOOOOOOOOOOOOOOOOOOOO%%%%%OOOO*%OOooO&O%%OO*OOOOOOOOO", "................ooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooOOOOOOOOoooooooooooooooooooooooooooooooooooOOOOOOOOOOOOOOooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo@o<<3^L3=3>OVTDV&=,=&>weDCDeS@pfShILppPR{{)f2oe__ELTSF3O%%%OOOOOoooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo@.oo..D4@f+@2@+oO%OO@o2..+2@o@oooooooooooooooooo%%%OOooooooooooooooooooooooooOOOoooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo.............ooooooooooooooooOOOoooO@33=O+4d=&OOOOoo+OooooooooooooooooooooooOOOOOOOOOOOOOOOOO,e=oO=32F_Lo2@fw>>OudV>V>&Fy&>FUV3CCdVAOSCJEY$ ooooooooooooooooooooooooOOOOOOOOOOOOOOOOOOOOOOOO%%%%%OOOO%OO=OoO%OO%OO%OOOOOOOOO", "................ooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooOOOOOOOOOOOOoooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo=o223EoOe33yAywUe,=>,>>>UD=LTfhfgggsPLSJR`[^C.oS)SeYC3O%%OOOOOOOoooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo....<.+oo2ooooooO=OO@o+o$o..oooooooooooooooooooo%%%OOooooooooooooooooooooooooOOOooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo................oooooooooooooooooooooooo+dH=@OoooooOooooooooooooo..ooooooooooooooooooooooooo=wy&>;uuV>u%&dy=>eATud*LDdCfS. XooooooooooooooooooooooooooooOOOOOOOOOOOOOOOOOOOO%%%%%OOOOOO*ee&OOoOOOOOoOOOOOOOO", "................oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo...ooooooooooooooooooooooooooooooooooooooooooooooooooooooooooOOOOOOOOOOoooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooof2FYe@==DA>>&,w3=&>>>&&edeiShs$$hLhLh4SJ4L+L2o+@oo+oO=OOOOOOOOOoooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo.@+.+@ooo@oo@o@+O=oooooo...oooo+oooooooooooooooo%%OOOooooooooooooooooooooooooOOOooooooooooooooooooooooooooooooooooooooooooooo...oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo..................oooooooooooooooooooooo@2@Oooooooooooooooooooo...ooooooooooooooooooooooooOooOOoO=OdUOCe,i>wwD>=3C=Ce3>iF%DwT_3@3y;>&&>33>&>,VCE=4ffDf2hffSf5fLLfSfo=o@2ooo=oOOOOOOOOooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo.2..oo+@oo@@oooo&oOoooo.@+@oooooooooooooooooooo%OOOoooooooooooooooooooooooooOOOoooooooooooooooooooooooooooooooooooooooooooo....ooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo.........................oooooooooooooooo@oooooo...oo...ooooo....oooooooooooooooooooooooo@oo@+oO=3O%=&&w&->>O,iV%3Dd3d3Y5u>VwyFO%yOCfo+o.ooooooooooooooooooooooooooooooooOOOOOOOOOOOOOOOO%%%%%OOOOOOOO%wSF2oooOOOOOOO%%%%", "................oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo.....oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooOOOOOooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo@@2odfD3O=&DDwO>wO=3uw,ww>uyeFfY4f2ff@aS5LSfSEoo2oo+=o=oo=OOOOOooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo................ooooooooooooooooooooooooooooooooo.o@.o@ooooooooooOo+o@ooooooo@@oooooooooooooooooOOOOoooooooooooooooooooooooooOOOooooooooooooooooooooooooooooooooooooooooooo.....oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo........................ooooo...oo...o@+oo..oo..........................................ooooooO+OO,,O%i;t6uwy>wwO3=fSCDLLUUu>%>Vw&edo@.+ooooooooooooooooooooooooooooooooOOOOOOOOOOOOOOOO%%%%%OOOO%OOOo=CF2ooooOOOOO%%%%%", "oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo......ooooooooooooooooooooooooooooooooooooooooooooooooooooooooooOOOOoooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo@@5ffEoo>3w=de3w=eww,>wy,OiDeDLfh@Yhf5,uyuwu3@+o.@ooooooooooooooooooooooooooooooooOOOOOOOOOOOOOOOO%%%%%OOO%OOO=Oo&s+o+@oooOOO%%%%%", "oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo.......oooooooooooooooooooooooooooooooooooooooooooooooooooooooooOOooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo@oo=ooY`oEfOO=>&O=OOe=+%>>>,w>ODDeddYU5L2<4YEdSf54SfdLfOOooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo...................oooooooooooooooooooooooooooooooo..ooooooooooooooooooooooooooooooooooooooooooooooOOoooooooooooooooooooooooooooOOOooooooooooooooooooooooooooooooooooooooooo.......oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo.........................................................................................oooooo&%O%wu8ww%yV=3eoFY5fsf53ww>%&>>yeUo=o@oooooooooooooooooooooooooooooooooOOOOOOOOOOOOOOOO%%%%%OOOOO&OoO=O)_.+@@o=OOOO%%%%", "oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo........................................................................oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo=@=YUL4oO3uywD^C2o@=>,,;;88>;weCiSLhdCF2TSoFfF4S+ET+OOOOoooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo....................................oooooooooooooooo..ooooooooooooooooooooooooooooooooooooooooooooooOooooooo.ooooooooooooooooooooOOOoooooooooooooooooooooooooooooooooooooooo........................ooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo..................ooo....................................................................oooooOOOO%,yuA&;weS2efJofha4O%>&>%&&w>Do+oooooooooooooooooooooooooooooooooooOOOOOOOOOOOOOOOO%%%%%OOO%OOOOOOoY`@d4oOooOOOOOO%", "oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo.........................................................................ooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo@=5L.^Fe>O&yyU)Eee=2www>&&;;i%,CCSLfddeC=fDYD4dfe5foOOOOooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo.....................................oooooooooooooooo..oooooooooooooo.oooooooooooooooooooooooooooooooooooooo..ooooooooooooooooooooOOOooooooooooooooooooooooooooooooooooooooo.........................oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo...............ooooo.....................................................................oooooo=&OwDFeO33=C4SYaTL+of2O=O3O&&=Oeoo@ooooooooooooooooooooooooooooooooooOOOOOOOOOOOOOOOO%%%%%OOO*OOOOOOO.hSSff++OOOOOOOO", "oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo..........................................................................oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo@o@oo+2d4LD23&;>&O&d42aS>>,8>&&;u&FLSiLSeL3CeSCDoCLD)oooOOOooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo......................................oooooooooooooooo..oooooooooooooo...ooooooooooooooooooooooooooooooooooo....oooooooooooooooooooOOOoooooooooooooooooooooooooooooooooooooo..........................ooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo...........oooooooooooooooooooooooo.......................................................oooo==O3FTe3C3o@=CCC]{]5.=oeeD33%%oOoo@.oooooooooooooooooooooooooooooooooOOOOOOOOOOOOOOOO%%%%%OOOO%%OOOO3,6y&,d^@Sf;&&,888u;%dFiOfdwCd3UdS4L23_Eo2oOOOooooo..ooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo.......................................oooooooooooooooo..oooooooooooooo...oooooOOOoooooooooooooooooooooooooo.....oooooooooooooooooooOOOooooooooooooooooooooooooooooooooooooo...........................oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo.....ooooooooooooooooooooooooooo........................................................o.ooooo=2oCd3DSSfo_S)_eY_TL3eo==OooOoo.@oooooooooooooooo..ooooooooooooooooooooooOOOOOOOO%%%%%OOOO&OOOOoOo=UCSLJC2==OOOoo", "oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo............................................................................oooooooooooooooooooooooooooooooooooo....oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo@oo+@@+Lf2&%%;OF%=)eo+V,%&>>>8u;OOw6-&%Vu=U@=e@Ddo33ee2ooo+", "oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo............................................................................oooooooooooooooooooo....................oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo@oooooo+>8y>VddSfSUAwyAnw>&DwO=Cdo&wOO>>o==o=+o@@oOOOooo......oooooooooooooooooooooooooooooooooooooooooooooooooooo................oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo........................................oooooooooooooooo..oooooooooooooo....oooOOOOooooooooooooooooooooooooo......oooooooooooooooooooOOOoooooooooooooooooooooooooooooooooooo............................oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo..........................................................@+.o+.oooo@=o@2oooooooooOooo@.@.oooooooooooooooo....ooooooooooooooooooooOOOOOOOO%%%%%OOOOOO=%oA`DOd3=O<=3=@ooooo", "oooooooooooo....................oooooooooooooooo.....................................................................................................oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo@oo@@od4dF3o=O=%&>uw>;;>wwwuyuwwO>w;VF=%%OOOOOOOOOOOOOO.....................................................................................oooooooooooooooooooooooooooooooooooooooooooooooooooo.......................................................oooooooooooooooo................oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo...........................oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo.......oooooooooooooooo...................................................................oooOO%OO%&OooOOOOooOoooooooooooooooooooooooooooooooooooooooooooooo..oooooOOOOoOOO%%%%-O%Ooo2Ls22g+@FYoOOOOOOO", "ooooooooooooooooooo.............oooooooooooooooo.....................................................................................................ooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo++@FCa+o=DdOLAw>>;6twuw>6u>OAww>&eyO%%OOOOOOOOOOOOOO.....................................................................................oooooooooooooooooooooooooooooooooooooooooooooooooooo.......................................................oooooooooooooooo................oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo...........................oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo.......oooooooooooooooo...................................................................oooOOO%%Ooo=2OooOO==Oooooooooooooooooooooooooooooooooooooooooooooo..oooooOOOOOOOOO%%%%O=oOooo.LCo22J+oOOOOOOO", "oooooooooooooooooooooo..o.......oooooooooooooooo......................................................................................................oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo@@+o@oofUd=2dC3=Dy&;>668wwwwwwwwyu>&3ywO%%%OOOOOOOOOOOOO......................................................................................ooooooooooooooooooooooooooooooooooooooooooooooooooo.......................................................oooooooooooooooo................oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo...........................oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo.......oooooooooooooooo....................................................................oooOOOOOOOooOoOOooooooooooooooooooooooooooooooooooooooooooooooooo..oooooOOOOOOOOO%OO%OOoO<+@+ofEsdoooOOOOOOO", "oooooooooooooooooooooooooooo....oooooooooooooooo......................................................................................................ooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooOO=STe+=2&&C>&%;8w6->;wVy;uD%>;>VAw*%%%%OOOOOOOOOOOO......................................................................................ooooooooooooooooooooooooooooooooooooooooooooooooooo.......................................................oooooooooooooooo................oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo...........................oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo.......oooooooooooooooo....................................................................ooooOOo+==@oOOO&OO=+ooooooooooooooooooooooooooooooooooooooooooooo..oooooOOOOOOOOO%%%%&OOoooo@@SL@+oeooOOOOOO", "OOOOOOoooooooooooooooooooooooooooooooooooooooooo.......................................................................................................oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo+3DC==eDD3O%wu>-ww>;;8uw>wVO>>,AV>O%%%%OOOOOOOOOOOO.......................................................................................oooooooooooooooooooooooooooooooooooooooooooooooooo.......................................................oooooooooooooooo................oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo...........................oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo.......oooooooooooooooo................................................................ ....ooooo+2==fYCe33=+Ooooooooooooooooooooooooooooooooooooooooooooooo..oooooOOOOOOOOO%%%%O>wd=+@._TFd+ooooOOOOOO", "OOOOOOOOOooooooooooooooooooooooooooooooooooooooo........................................................................................................oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo+o@oo=%68;%>;O;VyOO&OOw3OO%%%%OOOOOOOOOOOO........................................................................................ooooooooooooooooooooooooooooooooooooooooooooooooo.......................................................oooooooooooooooo................oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo...........................oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo.......oooooooooooooooo................................................................ ....ooo@<<Ou3TfLfD)df@oo2ooOOOOOO", "OOOOOOOOOOOOoooooooooooooooooooo.........................................................................................................................ooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooeeeS=O>w&O%O&>>;;-%%>-O>VyOOOOOOOOO%%%%OOOOOOOOOOOO.........................................................................................oooooooooooooooooooooooooooooooooooooooooooooooo.......................................................................................oooooooooooooooo................oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo...........................oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo....................................................................................... ....ooo@242o3dFdooo=ooooooooooooooooooooooooooooooooooooooooooooo..oooooOOOOOOOO%%&&y=3OS3S3oo=o@oOOoooOOOOO", "OOOOOOOOOOOOOOOOOOoooooooooooooo..........................................................................................................................oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo@o=ooe3OO>dw>uwuy;O-;%%>;;>6w>>;%&%OOOOO%%%%%OOOOOOOoooo..........................................................................................ooooooooooooooooooooooooooooooooooooooooooooooo.......................................................................................oooooooooooooooo................oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo...........................oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo....................................................................................... ....@@.+fdo+o+<=<+oooooooooooooooooooooooooooooooooooooooooooooo..oooooOOOOOOOO%%==3d==OO3oo=o@ooOooooOOOOO", "OOOOOOOOOOOOOOOOOOOOOOOooooooooo...........................................................................................................................ooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo=OOiAOO>w>&&;w&>886>;---%>wyV>&&&%%OOO%%%%%OOOOooooooo...........................................................................................oooooooooooooooooooooooooooooooooooooooooooooo.......................................................................................oooooooooooooooo................oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo...........................oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo....................................................................................... ....o..o@++@O++o33o+ooooooooooooooooooooooooooooooooooooooooooooo..oooooOOOOO%O%OOyye==3==4ooooOOOOOOOOOOOOO", "OOOOOOOOOOOOOOOOOOOOOooooooooooo............................................................................................................................oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo................ooooooooooooooooooooooooooooooooooooooooOoOO%VA&>yiyyu>,;>>>>>-%>>wx>&AD&&%%%OOO%%%%%OOOOooooooo............................................................................................ooooooooooooooooooooooooooooooooooooooooooooo.......................................................................................................................oooooooooooooooooooooooooooooooooooooooooooooooo...........................................oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo....................................................................................... .......@+@@@+YT2o+oooooooooooooooooooooooooooooooooooooooooooooo..oooooOO%OO%O&O&deo2ee4&oOOOOOOOOOOOOOOOOO", "OOOOOOOOOOOOOOOOOOOooooooooooooo..............................................................................................................................oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo................oooooooooooooooooooooooooooooooooooooooo@oO%&yn%wVVVAV>&>>>66>>;>uyw>FTA%%%%%OOO%%%%%OOOoooooooo..............................................................................................ooooooooooooooooooooooooooooooooooooooooooo.......................................................................................................................oooooooooooooooooooooooooooooooooooooooooooooooo...........................................oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo...................................................................................................o@@O=oLUoo2oooooooooooooooooooooooooooooooooooooooooooooo..oooooOO%%%%O&*&w=d33OO>oOOOOOOOOOOOOOOOOO", "OOOOOOOOOOOOOooooooooooooooooooo................................................................................................................................oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo................oooooooooooooooooooooooooooooooo.ooooooo&OO%&>>OwxVVZx>-;;>8wwwwwuw>wDU%%OOOOOOO%%%%%OOOoooooooo................................................................................................ooooooooooooooooooooooooooooooooooooooooo.......................................................................................................................oooooooooooooooooooooooooooooooooooooooooooooooo...........................................oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo...................................................................................................oooO@o@oo@ooooooooooooooooooooooooooooooooooooooooooooooo..o.ooooOO%%%O;%O=Oo=^^=oOOOOOOOOOOOOOOOOOO", "OOOOOOOOOOoooooooooooooooooo....................................................................................................................................oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo................oooooooooooooooooooooooooooooooo..ooooooOOO%%%%%tVVyyu68>-;8wwwuy>>yw&wOOOOOOOOO%%%%%OOOoooooo..................................................................................................ooooooooooooooooooooooooooooooooooooooooo.......................................................................................................................oooooooooooooooooooooooooooooooooooooooooooooooo...........................................oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo..................................................................................................ooooOo+@o+@o+oooooo..ooooooooooooooooooooooooooooooooooooo..o.ooooOOO%%%3=O33J+Sdo>3OOOOOOOOOOOOOOOOO", "OOOOOOOOoooooooooooooooo........................................................................................................................................oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo................oooooooooooooooooooooooooooooooo..oooooooO%%%%%-xAZtw8>w>;;>6>>wuw>w>O&%%OOOOOOO%%%%%OOOooooo...................................................................................................ooooooooooooooooooooooooooooooooooooooooo.......................................................................................................................oooooooooooooooooooooooooooooooooooooooooooooooo...........................................oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo..................................................................................................oooOOoo+o@@oooooo....ooooooooooooooooooooooooooooooooooooo..o.ooOoOO%%%&uw3df3o@oo=OOOOOOOOOOOOOOOOOO", "OOOOOOOoooooooooooooooo.........................................................................................................................................oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo................oooooooooooooooooooooooooooooooo..oooooooO%O&-->yZZtw86w8;->>&>w8V;%>ww%%%%%OOOO%%%%%OOOoooo....................................................................................................ooooooooooooooooooooooooooooooooooooooooo.......................................................................................................................oooooooooooooooooooooooooooooooooooooooooooooooo...........................................oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo.......................................................................................oo........ooooOO@oooo@oooooo....................ooooooooooooooooooooo..o.o@OOO&>8;-uw3ddo@+O=%O;OOOOOOOOOOOOOOOO", "OOOOOOoooooooooooooooo..........................................................................................................................................oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo................oooooooooooooooooooooooooooooooo..ooooooO&OO&;--tZVyxtwu8;-6,>>uwV->t%O%%%%%%OOO%%%%%OOOoooo....................................................................................................ooooooooooooooooooooooooooooooooooooooooo.......................................................................................................................oooooooooooooooooooooooooooooooooooooooooooooooo...........................................oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo.......................................................................................oo........ooooOOoo@oooo@oooo....................ooooooooooooooooooooo..o.o@+O&>wn8%w>=3<=oo@oO>OOOOOOOOOOOOOOOOO", "...........ooooo................................................................................................................................................ooooooooooooooooooooooooooooooooooooooooooooooooooooooooo.......................................ooooooooooooooooooooooooooooooooooooooooOOO%%&8ynAAw-&>w>3%&w>>>>%O%&&%%OOOOOOOO%%%OOOOoooo................ooooo................................................................................................oooooooooooooooooooooooooooooooo...........................................................................................................ooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo...................................oooooooo.... oooooooooooooooooooooooooooooooooooooooooooooooo.....ooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo................................................................................................OOOoooooooooooo.ooooo..............................ooooo@ooo,3OdeD4=dCd=OOOOOOOOOOOOOOooooo.....", "............oooo................................................................................................................................................ooooooooooooooooooooooooooooooooooooooooooooooooooooooooo.......................................ooooooooooooooooooooooooooooooooooooooooOOOO%%&>ADDVwwuuw&wAyCwFV&O%%OOOOOOOOOOO%%%OOOOoooo..................ooo................................................................................................oooooooooooooooooooooooooooooooo...........................................................................................................ooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo..................................ooooooooo.....oooooooooooooooooooooooooooooooooooooooooooooooo.....ooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo................................................................................................OOooooooooooooo.ooooo..............................ooooooo+;6w>>>>&%>U/u=OyVOO>%O%OOOOOOOOO%%%OOOOOoooo....................................................................................................................oooooooooooooooooooooooooooooooo...........................................................................................................ooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo.........................oooooooooooooooooooo...oooooooooooooooooooooooooooooooooooooooooooooooo......oooooooooooooooooooooooooooooooooooooooooooooooooooooooooo................................................................................................ooooooooooooooooooooo..............................oooooo@o+O,DSdedde=o=OOOOOOOOOOOOOOOooooooooo", "oooooo..........................................................................................................................................................ooooooooooooooooooooooooooooooooooooooooooooooooooooooooo.......................................oooooooooooooooo...oooooooooooooooooooooOOOO%;8wwuuw>>>>&O&y>yDD>OO%O%&OOOOOOOOO%%%OOOOOooooo...................................................................................................................oooooooooooooooooooooooooooooooo...........................................................................................................ooooooooooooooooooooo................................oooooooooooooooo.....................ooooooooooooooooOOOOooooo..oooooooooooooooooooooooooooooooooooooooooooooooo.......ooooooooooooooooooooooooooooooooooooooooooooooooooooooooo................oooooooooooooooo................................................................ooooooooooooooooooooo..............................oooooo@ooo>>>;&>>w>>>>>d=%&%OO%%%OOOOOOOO%%%OOOOOoooooo..................................................................................................................oooooooooooooooooooooooooooooooo...........................................................................................................ooooooooooooooooooooo................................oooooooooooooooo................ooooooooooooooooOOOOOOOOOOOooooooooooooooooooooooooooooooooooooooooooooooooooooo........oooooooooooooooooooooooooooooooooooooooooooooooooooooooo................oooooooooooooooo................................................................ooooooooooooooooooooo..............................oooooo@Oooo&oO&oo=O3oOOOOOOOOOOOOOOOOOOOOOOOO", "ooooooo..... ............................................................................................................................................ooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo............................................................oooooooooooooooooooO%%O%8ty%%--%%&>O&>>%3=>&w%O>&O&OOOOOOOO%%OOOOOOoooooooo................................................................................................................oooooooooooooooooooooooooooooooo...........................................................................................................ooooo................................................................................ooooooooooooooooOOOOOOOOOOOOOooooooooooooooooooooooooooooooooooo.........................ooooooooooooooooooooooooooooooooooooooooooooooooooooooo................oooooooooooooooo................................................................ooooooooooooooooooooo..............................ooooooo@O&=OOoOO&ooOOOOOOOOOOOOOOOOOOOOOOOOOO", "ooooooo..... ...........................................................................................................................................oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo.............................................................oooooooooooooooooooOOOO;8w8wuw>&&>w&%%OVOe>w&>AwO>OOOOOOOO%%OOOOOOoooooooo................................................................................................................oooooooooooooooooooooooooooooooo...........................................................................................................ooooo................................................................................oooooooooooooooOOOOO%%%%%OOOOOoooooooooooooooooooooooooooooooooo..........................oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo................ooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo..............................ooooo@oOoO&o&=oOOo&oOOOOOOOOOOOOOOOOOOOOO%%%%", "ooooooo..... ..........................................................................................................................................ooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo..............................................................ooooooooo...ooooooOO&%O&O;>>>;%&>;O;w>>w>,,,>>&%%OOOOOOOOOOOOOOOOoooooooooooo............................................................................................................oooooooooooooooooooooooooooooooo...........................................................................................................ooooo................................................................................oooooooooooooOOOOO%%O%%%%OOOOOoooooooooooooooooooooooooooooooooo...........................ooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo................ooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo..............................oooooooooOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO%%%%", "ooooooo..... .........................................................................................................................................oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo...............................................................oooooooo...oooooOOO&O%w>->6>-%&>y&%>&>3=&&&&%%OOOOOOOOOOOOOOOOOOOooooooooooooo..........................................................................................................................oooooooooooooooo...........................................................................................................ooooo................................................................................oooooooooooooOOOOOO%%%%%%%OOOOOooooooooooooooooo............................................oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo................ooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo..............................oooooooooOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO", "ooooooo....... ........................................................................................................................................ooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo................................................................ooooooo...oooooOOO%O&ny%>6>-%&>u>>w>>>*%%%OOOOOOOOOOOOOOOOOOOOOOOooooooooooooo.o.......................................................................................................................oooooooooooooooooooooooooooooooooooooooooooooooo...........................................................................ooooo................................................................................oooooooooooooooOOOO%%-%O%%OOOooooooooooooooooooo..............................................oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo................ooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo..............................oooooooooOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO", "oooooo.................................................................................................................................................oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo.................................................................oooooo...oooooOOO%%>VV%>>>-&>>;>w3&%=>%%OOOOO%OOOOOOOOOOOOOOOOOOOoooooOOooooooooo.....................oooooooooooooooo................................................................................oooooooooooooooooooooooooooooooooooooooooooooooo...........................................................................ooooo................................................................................ooooooooooooooooOOO&>6>--%OOoooooooooooooooooooo................................................oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo................ooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo..............................oooooooooOOOOOOOOOOOOOOOOOOOOOOOOOOOOOooooooo", "oooo..................................................................................................................................................ooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo..................................................................ooooo...oooooOOO%%>Vi-;;-->>&&&%O%=3u%%%OO%%%OOOOOOOOOOOOOOOOOOOOOOOOOOOOOoooooooo...oooooooooooooooooooooooooooooooo................................................................................oooooooooooooooooooooooooooooooooooooooooooooooo...........................................................................ooooo................................................................................ooooooooooooooooOOO>uyyu&%OOoooooooooooooooooooo................................................oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo................................ooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo..............................oooooooooOOOOOOOOOOOOOOOOOOOOOOOOOOOooooooooo", "......................................................................................................................................................ooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo...................................................................oooo...ooooooOO%%>nu%;;%%;;%%&%;yd3=%%OOOO%%OOOOOOOOOOOOOOOOOOOOOOOO%%OOOOOooooooooooooooooooooooooooooooooooooooooo................................................................................oooooooooooooooooooooooooooooooooooooooooooooooo...........................................................................ooooo................................................................................ooooooooooooooooOOO&>,>>%%OOoooooooooooooooooooo................................................oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo................................ooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo..............................oooooooooOOOOOOOOOOOOOOOOOOOO%OOOOOoooooooooo", "............oooo.....................................................................................................................................oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo...................................................................oooo...ooooooOOOO;nw%>8-%&;&O>>wVd&OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO%%%%OOOOOoooooooooooooooooooooooOOOOOOOOoooooooo................................................................................oooooooooooooooooooooooooooooooooooooooooooooooo...........................................................................ooooo...................................................................................oooooooooooooOOOOOOOO%OOOOooooooooooooooooooo................................................oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo................................oooooooooooooooooooooooooooooooooooooooooooooooo.oooooooooooooooooooo..............................oooooooooOOOOOOOOOOOOOOOOOOOO%%OOOOoooooo....", "...........ooooo.....................................................................................................................................oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo...................................................................oooo...ooooooOOOO;nw%wy>%%>>%w>O%OO=OO%%%OOOOOOOOOOOOOOOOOOOOOOOOOOO%%%%%OOOOOooooooooooooooooooooooOOOOOOOOoooooooo................................................................................oooooooooooooooooooooooooooooooooooooooooooooooo...........................................................................ooooo.....................................................................................oooooooooooooOOOO%%OOOOOooooooooooooooooooo................................................oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo................................oooooooooooooooooooooooooooooooooooooooooooooooo.oooooooooooooooooooo..............................oooooooooOOOOOOOOOOOOOOOOOOOO%%OOOOooooo.....", "................................................................................................................................................oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo...................................................................................oooooOOOO%&wyO%O%%wTF=C=OOO&OOOOOOOOOOOOOOOOOOOOOOOOO&OO&OO%OOOOOOOOOoooooooooooooooooooooooooooooooooooooooo................ooooo...........................................................ooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo.......................................oo................................................................................ooooooooooooooooOOOOOOOooooooooo.....................................................ooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo................................oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo............................ ....oooooOOOOoooooooOOOOOOOOO................", "................................................................................................................................................oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo...................................................................................ooooooOOO%&8t>*>3*Oe%OOduO&OOOOOOOOOOOOOOOOOOOOOOOOO%&O>,%OOOOOOOOOOOoooooooooooooooooooooooooooooooooooooooo................ooooo...........................................................ooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo.......................................oooooooooooooooooo................................................................ooooooooooooooooOOOOOOoooooooooo.....................................................ooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo................................oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo............................ .....oooooOOOOoooooooOOOOOOOOO................", "................................................................................................................................................oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo....................................................................................oooooOOOO%>8OuC>OO>O3OSF&oo%OOOOOOOOOOOOOOOOOOOO%&===>ey=OO%OOOOOOOOoooooooooooooooooooooooooooooooooooooooo................ooooo...........................................................oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo..........................................oooooooooooooooo................................................................ooooooooooooooooOOOOOOoooooooooo......................................................oooooooooooooooooooooooooooooooooooooooooooooooooooooooooo................................oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo..................................oooooOOOOOOOOOOOOOOOOOOOOO................", "................................................................................................................................................oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo....................................................................................oooooOOOO%&;%wAOO=3%o&eLSo=oOOOOOOOOOOOOOOOOOO%%&>>,>>ey=OO%oooooooooooooooooooooooooooooooooooooooooooooooo................ooooo...........................................................oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo..........................................oooooooooooooooooooo............................................................ooooooooooooooooOOOOOooooooooooo......................................................oooooooooooooooooooooooooooooooooooooooooooooooooooooooooo................................oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo..................................oooooOOOOOOOOOOOOOoooooooo................", "................................................................................................................................................oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo....................................................................................ooooooOOOO%%u%&O&OO>O3=CY2ooOOOOOOOOOOOOOOOO%%%%%&&&&O&=OoOoooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo...........................................................ooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo................... ................ooooooooooooooooooooooo............................................................oooooooooooooOOOooooooooooooo.......................................................ooooooooooooooooooooooooooooooooooooooooooooooooooooooooo................................oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo.................................oooooOOOOOOOOOOOOOOoooooooo................", "................................................................................................................................................oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo....................................................................................ooooooOOOOOOu&&%&%3OdeCC^LooOOOOOOOOOOOOOOOO%%%%%O%O&OoOooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo...........................................................oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo.................... ................oooooooooooooooooooooooo............................................................oooooooooooooooooooooooooooo........................................................oooooooooooooooooooooooooooooooooooooooooooooooooooooooo................................oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo................................ooooooOOOOOO%%OOOOOOoooooooo................", "................................................................................................................................................oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo.....................................................................................oooooooOOOO%ww%&dU&&OFS)T4o%%%%%OOOOOOOOOOO%%%%OOOO&ooOoo@oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo...........................................................oooooooooooooooooooooooooooooooooooooooooooooooo................................................oo...................... ..............ooooooooooooooooooooooooo............................................................ooooooooooooooooooooooooooo.........................................................ooooooooooooooooooooooooooooooooooooooo................................................................oooooooooooooooooooooooooooooooooooooooooooooooooooo..............................ooooooooOOOOOO%%%OOOOOoooooooo................", "................................................................................................oooooooooooooooooooooooooooooooo................oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo.....................................................................................ooooooooOOOO&&%&eT3e=ooSafo%%%%%OOOOOOOOOOO%%%%%OOOOoo@ooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo...........................................................oooooooooooooooooooooooooooooooooooooooooooooooo........................................................................ ............ooooooooooooooooooooooooo.............................................................oooooooooooooooooooooooooo..........................................................oooooooooooooooooooooooooooooooooooooo................................................................oooooooooooooooooooooooooooooooooooooooooooooooooooo............................ooooooooooOOOOOO%%%OOOOOooooo...................", "................................................................................................oooooooooooooooooooooooooooooooo................oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo......................................................................................oooooooooOOO%%%*OO=e42f@LL%%OOOOOOOOOOOOoo%%%%OOOOoooooo..ooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo...........................................................oooooooooooooooooooooooooooooooooooooooooooooooo........................................................... ........oooooooooooooooooooooooo................ .......................................ooooooooooooooooooooooooo...........................................................ooooooooooooooooooooooooooooooooooooo................................................................oooooooooooooooooooooooooooooooooooooooooooooooooooo............................oooooooooOOOOOOOOOOOOOoooooo....................", "................................................................................................oooooooooooooooooooooooooooooooo................oooooooooooooooooooooooooooooooooooooooooooooooo.......................................................................................................oooooooooOOOOOOOO===4doSL%%%OOOOoOOooooooOOOOOOOoooooooo.oooooooooooooooo................ooooooooooooooooooooO@++OOooooooooooo...........................................................................oooooooooooooooo.......................................................................... ........oooooooooooooooooooooo.................. ........................................oooooooooooooooooooooooo............................................................oooo................................................................................................................oooooooooooooooooooooooooooooooooooo............................oooooooooooOOOOOOOOOoooooo......................", "................................................................oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo........................................................................................................oooooooooooOOOO@=@@==oO=&&&*%OOoooooooooOOOOooooooooo...oooooooooooooooo................oooooooooooooooooooo@++==+@oooooooooo...........................................................................oooooooooooooooo......................................................................... ........oooooooooooooooooo...................... .........................................ooooooooooooooooooooooo..............................................................oo................................................................................................................oooooooooooooooooooooooooooooooooooo............................ooooooooooooooooooooooooo.......................", "................................................................oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo..........................................................................................................oooooooooooo@@=+@O=S3O====&OOoooooooo.ooooooooooo.....................................ooooooooooooooooooooooo@=+@oooooooooo...........................................................................oooooooooooooooo........................................................................ .................................. ........ ..........................................oooooo..oooooooooooooo................................................................................................................................................................................oooooooooooooooooooooooooooooooooooo.................................oooooooooooooooo...........................", "................................................................oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo..............................................................................................................ooooooooo@@O@OOD3&%&&=+@Ooooo.....oooooo..........................................oooooooooooooooooooooooo@@ooooooooooo........... ...........................................................oooooooooooooooo........................................................................ ............................... ...........................................ooooo....oooooooooooo................................................................................................................................................................................oooooooooooooooooooooooooooooooooooo.....................................ooooooo................................", "................................................................oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo...................................................................................................................ooooo@oO*O%O%ooOooooo....... ................................................ooooooooooooooooooooooooooooooooooooo............... ........................................................oooooooooooooooo........................................................................ ............................. ............................................oooo.....ooooooooooo................................................................................................................................................................................oooooooooooooooooooooooooooooooooooo............................................ ........................", "................................................................oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo................oooooooooooooooo.....................................................................................................................oooooO=O%Owoooooooo.... ..........................................ooooooooooooooooooooooooooooooooooooo...o............ ........................................................oooooooooooooooo........................................................................ .......................... ............................................oooo......oooooooooo................................................................................................................................................................................oooooooooooooooooooooooooooooooooooo............................................ ....................", "................................................................oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo................oooooooooooooooo....................................................................................................................oooooOOOO&%Ooooooooo... ........................................ooooooooooooooooooooooooooooooooooooo...........XX... ........................................................oooooooooooooooo........................................................................ ....................... ............................................oooo......oooooooooo................................................................................................................................................................................oooooooooooooooooooooooooooooooooooo............................................ ...................", "...........................................................ooooo................oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo................................................................................................................ .......................................................................................oooooooooooooooooooooooooooooooooooo................ooooooo.... ................................oooooooooooooooo................................ ........ooooooooooooooooooooooooooooooooooooooooooo.....................................................................................................................................................................................................................................................................................", "...........................................................ooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo................................................................................................................ .......................................................................................oooooooooooooooooooooooooooooooooooo................ooooooo.... ................................oooooooooooooooo................................ ........ooooooooooooooooooooooooooooooooooooooooooo.....................................................................................................................................................................................................................................................................................", "...........................................................ooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo................................................................................................................ .......................................................................................oooooooooooooooooooooooooooooooooooo................ooooooo.... ................................oooooooooooooooo................................ ........ooooooooooooooooooooooooooooooooooooooooooo.....................................................................................................................................................................................................................................................................................", "...........................................................ooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo................................................................................................................ ......................................................................................ooooooooooooooooooooooooooooooooooooo................ooooooo.... ................................................................................ ........oooooooooooooooooooooooooooooooooooooooooooo....................................................................................................................................................................................................................................................................................", "...........................................................ooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo........................................................................................................ .....................................................................................oooooo................oooooooooooooooo................ooooooo..... ................................................................ ........................ooooooooooooooooooooooooooooo...................................................................................................................................................................................................................................................................................", "...........................................................ooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo........................................................................................................ ....................................................................................ooooooo................oooooooooooooooo................ooooooo...... oooooooooooooooo................................................ ........................oooooooooooooooooooooooooooooooo................................................................................................................................................................................................oooooooooooooooooooooooooooooooo................................................", "...........................................................ooooooooooooooooooooooooooooooooooooooooooooooooooooo........................................................................................................................................ ...................................................................................oooooooo................oooooooooooooooo................oooooo........ oooooooooooooooo................................................ ........................oooooooooooooooooooooooooooooooo................................................................................................................................................................................................oooooooooooooooooooooooooooooooo................................................", "...........................................................ooooooooooooooooooooooooooooooooooooooooooooooooooooo........................................................................................................................................ ..................................................................................ooooooooo................oooooooooooooooo................oooooo..........oooooooooooooooo................ ................ ........................oooooooooooooooooooooooooooooooo................................................................................................................................................................................................oooooooooooooooooooooooooooooooo................................................", "...........................................................oooooooooooooooooooooooooooooooooooooooooo...oooooooo........................................ .................................................................................oo..oooooo................oooooooooooooooo................ooooo...........oooooooooooooooo........ ...........................oooooooooooooooooooooooooooooooo................................................................................................................................................................................................oooooooooooooooooooooooo........................................................", "...........................................................ooooooooooooooooooooooooooooooooooooo........................................................ ................................................................................ooooooooooo................oooooooooooooooo................oo...................................... ...........................................oooooooooooooooo................................................................................................................................................................................................oooooooooooooooo................................................................", "................oooooooooooooooo...........................ooooooooooooooooooooooooooooooooooooo........................................................ ...........................................oooooooo................oooooooo....oooooooooooo................oooooooooooooooo........................................................ ...........................................oooooooooooooooo................................................................................................................................................................................................oooooooo.oooooo.................................................................", "................oooooooooooooooo...........................ooooo........................................................................................ ...........................................oooooooooooooooooooooooooooooooo...ooooooooooooo................oooooooooooooooo........................................................ ..............................................ooooooooooooo................................................................................................................................................................................................................................................................................", "................oooooooooooooooo...........................ooooo................................................................................ ...........................................oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo................................................ ...............................................oooooooooooo................................................................................................................................................................................................................ ........................................................", "................oooooooooooooooo...........................ooooo................ ................................................ ...........................................oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo..............................oo ................................................ooooooooooo................................................................................................................................................................................................................ ................................................", "................oooooooooooooooo...........................ooooo................ ................................................ ...........................................oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo............................oooo ................................................ooooooooooo................................................................................................................................................................................................................ ................................................", "................oooooooooooooooo...........................ooooo ................................................ ...........................................oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo............................oooo ................................................ooooooooooo................................................................................................................................................................................................................ ................................................", "................oooooooo........................ ................ ................................................................ooooo...........ooooooo.ooo.....oooooOOO==&@ooo.oOOooooooooooooo................................................................................ ..........ooo........ ...ooooooooooooo................................................oooooooooooooooo........oooooooo.......................o..... .................. .....o... ..... ................ .....oo ...... ...oooooooo................", "................ooooooo................. ................ ................................................................ooo.............oooooooo...oooooooooOOOOOOOooooooooooooooooooooo................................................................................ ..........oo......... ......oooooooooo................................................oooooooooooooooo.........ooooooo................................................ ......... .... ................ ...... .... ...oooooooo................", "................ooooooo................. ................ ................................................................................oooooooooooo@@oooooOO%%%OOOOooo.OOooooo@oooooooo................................................................................ ..................... ..........oooooo...........................................................................ooooo.................ooooo..........ooo.oooo........ ......... ... .... ...oooooooo................", "................ooooooo..... ................ ................................................................................oooooooo@ooo@@ooooOOO%%%OOOOOOoo==+Ooooooooooooo................................................................ ................ ...................... ...............................................................................................o................oooooooooooooooo@O@oooo.o....... .......... ...oooooooo................", "................ooooooo..... ........................ ................................................................................oooooooo@ooooOOOOOOOOOOOO%%&==+@==+Ooooooooooooo................................................................ ................ ........ ....................... ................................................................................................................ooooooOO&OOOO%%&==&&Oooooooo............... ...oooooooo................", "oooooooooooooooooooooo..... ........................ ................................................................................oooooooooOOOO%&&O%%%->>8uww3==OOOOooooo@oooooooo................................................ ........................ ........ ......................... ................................................................................................................ooooO%&>w>-%%-6w88,>&%OOoooooo............. ..ooooooooooooooooooooooooo", "oooooooooooooooooooooo..... ........................ ................................................................................oooooooooO&&&%-;%%;8tyxnViuw>OOooooooooooooooooo................................................ ........................ .................................................................... ................................................................................ooooooooooooooooOOO%*>wwrw6667rlrrrw8>&&Oooooooo............. ..ooooooooooooooooooooooooo", "ooooooooooooooooooooo..... ........................ ................................................................................ooooooOOO&>w;----6wtyttww,>&%OOOoOOooooooooooooo................................................ oooooooooooooooo........ ....... .................................................................... ............................................................................ooooooooooooooooooooOO%;6wrrllr99lvvrllrrw6>OOOooooooooooooo........ ...ooooooooooooooooooooooooo", "oooooooooooooooooooo....... ........................................................................ ............................................................................................................................ooo.oooooOO%O%>;;6rvrtvvtwwwOOOOOOOOoooooooooooooooo................................................ ........ ................oooooooooooooooo................................................................ ............................................................ooooooooooooooooooo........ ................................................o..............o........ooooooooooooooo@ooooooooO-qtrrrrrllllllbvvlrrw88-%%OOOO@OOooooooooo@ooo.. .. .. .......................... .X................ ..oooooooooooooooooooooooooo", "oooooooooooooooooooo....... ........................................................................ .........................................................................................................................oooooooooOOOOO%->wrrrvxlrlttw8>OOOOOOOOoooooooooooooooo................................................ ........ ................oooooooooooooooo................................................................ ..........ooo..............................oo........@oo..ooo@Oooooooooooooooooooooo@.......................................................o..ooooo.oooooo..ooooooooooooooOOOOOoooooOOOOOOOO%;wrrrrl09llllbblllrrr9wtw>&%OoooOOooooooooooooo....................@@o.........oooooooOOOOOOO+=<==@@ooooo......oo........oooooo.. ........ ...oooooooooooooooooooooooooo", "ooooooooooooooooooo....... ........................................................................ .......................................................................................................................o.oooooooOO%%%%--6wtxZmcxvlrrtw>%OOOOOOOOoooooooooooooooo................................................ ........ ................oooooooooooooooo................................................................ ........ooooo............................ooooooooooooooooooooOOoOOOOOOOOOOOOOooooooo@o.......................oooooooooooooooo........oo...oo@oooOOooooooooooooooooO+=11=>>>>>>&****%OOOOOOOOO-6rrrrrlrllllllllllrrrrrrw6>*%%%OOOOOOoooooooOOOoo@@oooo@@@@@@@@+@o@25+oooo@@oooO%*>>>wwwwwwwuuueew332==ooooooo.oooooooooooO@OOo................oooooooo.... ................ ...oooooooooo.oooooooooooooooo", "................oo........ .... .....................................................................................................................................................................................................oooooooooOO%%-;>wwwttvcZZxzvllrw>%OOOOOOOOOoooooooooooooooo................................................................ ........ ................................................................................................ ........oooooo...........................ooooooooooooooooOOoooOO%&>>>,uwwww>>>=>>&OoooOoooo...ooooooooooooooooooooooooooooooooooooooooooooooooOOOooOOOoooO&=OOOOOO*>wuuuuuuwwwww6www>-%%%%%%%%70rrrrrlllllllllllllllrr966666ww>;;*%OOoOOOO*>>>33333333wwwww3,,3===33=OOO=32+oo-;wtzxZZxxxxxxcZtyyyyyyy=Oooo+=2>>>>>>>>>>>>=&%Ooooooooooo@@@@ooooOooooooooo.... . ...oo................... ....ooooooooo..................", "................o........ ........ ...................................................................................................................................................................................................ooooooOOOOOO%%-;6rxxxcxvxxxzrlvvr>%OOoooooooOoooooooooooooooo................................................................................ ................ ................................................................................................ .......ooooooo..........................oooooooooooooooOOOOO%*;6wyxnxxVVZZVVnxyxxyw;%OOOOOoooooooooooooooooooooooooooooooooooooooooooooooooooo%%%%%&>>&&&>wuw>%-;6wutyttttrrrrrw6wttw6;;;>66660rrrrrrllll00007vvvvvvvvxxxtttttzrrw>:*%OO*>uyyxyyiVVnyyttttrrrrw,;&&%OOO%>uu>%O;7rzxxNZccxxxzzzrrvxcnnntw&&3eddxxxxxxVVxxxytw6>w3>&OOOOOoOOoooo%%%OOOOOoooooooo....................................................oooooooooo..................", "......................... ................................ ........................................................................................................................................................................................................ooooooooOOOO&>>>--60zNNcZxztzzzrlvvr-OOOoooooooooooooooooooooooo................................................................................ ................ ................................................................................................ ......oooooooo..........................oooooooooooOOOOOOOOO*>rtxZZZcxxxnZZZZZcZZZxu>:OOOoooooooooooooooooooooOOOOOOOOOOOOOOOOooooooooooOOoooO%->wutttwwwutttw7wrtzxzzzzzzlllrrrrrzzlr0rrrlzzxllllllllzzlrrr00vvvxxxxxxxxxxxzzccxztuww>1wtxxxxxxcZZncxxxxvvvvvtw6;%%%%%%>ttw66rlxxxxxxNNccxzzzvvxcccxxxxyxVVVVZZNNNNNNNNNcxxzrxtuw6>>>**%%%OOO%%%%OOOOOOoooooo................oooooooooooooooo....................oooooooooo..................", "......................... ................................ ........................................................................................................................................................................................................ooooooooOOO%,uttrrrzcZcxxztrrtzzvvl8-OOOoooooooooooooooooooooooo................................................................................ ................ ................................................oooooooooooooooo................................ ......oooooooo.........................ooooooooooOOOO%O%**%-;6zvxccxxvlvxcmZmmxxxxcxw6%%%OOOooOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOoOOOoO&=9rrvxxvzrttzzzttxxxxxxxvxcccccccxxxxxcccxxxxccccxxxxcxxxxxxxxxxzxxxxxxxcrtzxxxxxcccxxxyyyyyxztrrvvxcccccccccccccxztrw66w66wtxttzcNNNcxccZZZNcxxxbbcccccxccZZZVxxcccxxxxxxxxxxvvvvvvxxxxxtuww,www;;;--%%%>&OOoooo........oo......oooooooooooooooooooooooo............oooooooooo..................", "......................... ................................ .........................................................................................................................................................................................................oooooooOOOO&wnVnBcccZZczrrrrrrttcvr6-%OOoooooooooooooooooooooooo................................................................................ ................ ................................................oooooooooooooooo................................ .......oooooooo.........................oooooooooOOOO%%O:uyuwwwxxxxxxcccmZZZZcccxvxZZzwuuw>>*%OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOooOw660rxcNcxzzzzzzzzzrzzrww>&ooooooooOOOOooooooo................................................................................................................. ........................................................o............... ................ ......oooooooooo........oooooooooOOOO%%;wrrrrrxtrzxZcxxxxxxxvvxxxxccccxccccccxxxxxxcccxxxxxxxvxxxvvzzzxxxxxvtruuuuuuw66ww>;%%%OOOOOOOOOOOOOOOOrrxxvzvxccccccccccccccccccccccccccccccccccccccccccccccccxxxxxxxxxxxxxxxxccccccccxxxxxxzzxxxxxxxxxxxxxxxxxxxxxxxxcccccxxxxxxxxxxxcccccccccccccccccccccNNNxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxvzrrr977rrrr6>*%Ooooo......... ......ooo XXX. .. ....................", "....................... ........................ ...........................ooooo.................................................................................ooooooooooOOOOOO%%OOOooooO%>wrr0rxNZczlzzzzllrrrlrruu3&ooooooooOOOOooooooo................................................................................................................... ...........................................ooooooooo............oooooooooooooooo.......................................oooooooOO==@OOOOOOOOOOOOoOO%%%%*;6rxxxxcZxnZnxxxcxxxxxxxxxxxxxxxcxccccccxxxxxxccccxxxxxxxnccccxxxxcnZncxxVxxxxxytyytu6;%%OOOOOOOO%%%%O%%&rvxcxvvxccccccccccccccccccccccccccccccccccccccccccccccccxxxxxxxxxxxxxxxxccccccccxxxxxxxzxxxxxxxxxxxxxxxxxxxxxxxxccccccxxxxxxxxxxccccccccccccccccccccccccxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxvvvxxxxtuw>>==@@ooo..... ........ XXX ....................", "........................ ..........................................................................................ooooooooOOOOO%%%;>>>>>=&OO%-6tvxrzxNNcxzxxzzzrrrzlr6>>&OooooooooOOOOoooooooo....................................................................................................................................oooooooo...oo...ooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo...................ooo.oooooOOOOO;3uuww8>>>>>;;;;-->>wuuutyxxncxxcczxccxxxZnncxxxxxxxxxxxxxxccccccxxxxxxccccccxxxxxxxxxxxxxxxxxxxxxcxxxxxtttttrw6>;;;&&%%OO%%OO%;uyvxccxxxxccccccccccccccccccccccccccccccccccccccccccccccccxxxxxxxxxxxxxxxxccccccccxxxxxxxxxxxxxxxxxxxxxxxxccccccccccccccccxxxxxxxxccccccccccccccccccccccccxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxvvxxxyytyuuu3333+@. .. .....................", "........................ ........................................................................................oooooooOOOO%&>,wtyyyyyyuwwwwrrzzzxxxxcccxxxzzlrrzl0-%OOoooooooooOOOOooooooooo...................................................................................................................................ooooooooooooooooooooooooooooooooOOooooooooooooooOOOOOOOOOO%*&&%%OOOOOooooooooooooooooooooooooooooooooO&==>3,>6uymxxvlrrr99997777>wyVVZZZZZmcxvxcxxxcnZZZZZncxxxxxxxxxxxxxccccccxxxxxxxcccccxxxxxxxxxxxxxxxxcccccnxxxxxztrrrrrw97w886>;;-%%%%-8xZxccccxxxccccccccccccccccccccccccccccccccccccccccccccccccxxxxxxxxxxxxxxxxccccccccxxxxxxxxxxxxxxxxxxxxxxxxccccccccccccccccxxxxxxxxccccccccccccccccccccccccxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxvvvvrtzxxxxxyyyyyyuu5#@. .....................", "........................ ............................ooooooooooooooooooooooooooooooooooooooooooooooooooooooOOOOOOOO%&6uyVxxxxxyxxVxxztzxxcxxxxxcNccxxxzzzlr6%OOOOooooooooOOOOoooooooooooo..............................................................................................oo................ooooooooooooooooooooooooooooooooOOOOOoooOOOOOOOOooooooooooooooOOOOOOOOOO*:>wwww>w8,;&%OOOOOoooooooooooooooooooooOOOO*>wuutttwrttccvvvvvvvvllr999;6txZcxxccccccccnxxxnZcxnnncxxxxxxxxxxxcxccccccxxxxxxxxxcxxxxxxxxxxxxxxxcccccnnnmcxxxxvlrrrrrrrrwwwwwwww66wwrttxcccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxccccccccccccccccccccccccccccccccccxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxvvvvvxxxxxxxxyxxxxxp42o. ........................", "........................ .........................oooooooooooooooooooooooooooooooooooooooooooooooooooooooOOOOOOOO%&>wtxnZttttttzxZcxxvxcZcxxxxcccNcccxxxzr0:%%%OOooooooooOOOOoooooooooooo............................................................................................oooo................ooooooooooooooooOOOOOOOOOOOOOO*&&&&&%%OO%%%OOOOOOO%%%%%%%%%%&&&&;;;;;;;;wrttzttttttww6>>>>;&&&&&OOOOOOOOOOOOO%%%>>>wwtyxzzztrrrrcccbbbbccccbvlllwrtxxxxxcccccMMMxxxxxxxvcccxxxxxxxxxccccxccccccxxxxxxxxxxxxxxxxvxxxxcccnxxxxxxxxcxvvvvvlvlrrlvlrtttttttttxxxxxvxccxxccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxccccccccccccccccccccccccccccccccxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxvvxxxxxxxxeee=o... ... ................................", "ooooooooooooooooo....... .............ooo.....oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooOOOOOOO%>wtxnnxvxvtrrzxxZmcxvvxcxxccNccxNNcccxxxl0-%%*%oooooooooOOOOoooooooooooo...........................................................................................ooooo.........oooooooOOOOOOOOOOOOOOOOOOOOOOOO&&&&&>wuuuuwww8>>>>>>;;;>66wwwwwuuuutyyyxxxxxxxxzzvvxxxxvvvvxxxxttttuwwwww,>>>>>wwwwwwwwtzxxxxvzxxxxxxvvccccccccMcccxvvvcnmcxxcccccccMccxxcxxxxnxxxxxxxxxxccccccxccccccxxxxxxxxxxxxxxvvvxxxxxcccxxxxxxxxcxvvvvvllrrrlvvlmcccxxxxxxxzlzxccxxxccmccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxccccccccccccccccccccccccccccccccxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxvvvxxxccxxxxxxxxxxxxxvvvuniw&Ooo.......o.............oo.................oooooooooooooooo", "oooooooooooooooooo........ .........ooooooooooooooooooooooooooooooo@OooooooooooooooooooooooooooooooooooooooOO%%OO%>wttxxvtrzzzzvvxxcxvvvlvxzzxxxxxxccccccxxzzr;%OOOooooooooOOOooooooooooooo..........................................................................................oo....ooo.o..oooooooooOOOOOOO%%%%****%---;>688xxxyttttttttttttxxxxxxxxxxxxxxxxZnnnxxttlllzzzvvxxxxxxxxxxxxxxxxvvvvttttutttyyxxxxxxyyxnzztzzxccxxxxcccccccxcccccccBBcccccccccccccccccccxxxxxxxxxxxxxxxxccccccccccccccccccccccccccccccccnnncccxxxxxvvvxxvvlvvxxvvvvvvvvvcccccccccccccxxxccccccccccccccccccccccccccccccccccccccccxxxxxxxxxxxxxxxxccccccccccccccccccccccccxccccxxxxxxxxxxxxxxxxxxxzxxxxxxxccccccccccccccccxxxxxxxxcccccccccccxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxcccccxxvttuuw+Oo@=3ee43<+@@@+oo+2ee42++@oooooooo@@ooooo...ooooooooooo", "ooooooooooooooooooo....... .....oooooooooooooooooooooooOOOOOoooooOOooooOOOOoOOOOOOoooooooooooooooooooooOOooOO%%%&>uxyvvvxxxxxxxxxxvxvcccvlvxxxxxxxzccccccxxcct6%OOOooooooooOooooooooooooooo........................................................................................oooooooo..ooooooooooOOOOO%%*>wwuwwwuuuuurrrrttxxxxxxztttrtttzvxxxxxxxxxxxxxxxxxxnnnncxxxzzzvvvvvxxxxxxxxcccccxxxvvvvzttttttzxxxxzzztttzxcxxvvxccxxccccccxxxxxxxxxccNNccxccccccccccccccccxxxxxxxxxxxxxxxxcccccccccccccccccccccccccccccccccxxxxxxxxxvvzzvvvvllvvxvxvvvvvxccccccccccccccxxxccccccccccccccccccccccccccccccccccccccccxxxxxxxxxxxxxxxxccccccccccccccccxxxxxxxxxccccxxxxxxxxxxxxxxxxxxxxxxxxxcccccccccccccccccccccccccccccccccccccxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxcccccccccxxxyyuuwuyyyyyyuuuuyyuuuydVyy4333====oooooo@@oooooooooooooooo", "oooooooooooooooooooo....... ........oooooooooooOOOOOOOOOO%OOOOOOOOOoooooooooooOOOOOoooooooooooOOOOooooooooOOOOOoooO%%%%&>wwwrttvvxxxcnmcxvvxcZcvrlxxxxxzzzcccccxxxcNx6%OOOoooooooooooooooooooooooooooooooo........oooooooooooooooo...........................................................oooooooooooOOOOOOO&>>wwwtttttttyxxxxxxxxxxxcnxxxxvzttllzvxxccxxxxxxxxxxxxxxxxxxcccccxvvvvxxxxxxxxxxxxxxxxxxxxxxxxxvvvvvxxxxxxxxxxvvxxcccxxxccxxxxxxccxxxxxxztzxxxccxxccccccccccccccccxxxxxxxxxxxxxxxxccccccccccccccccccccccccccccccccxxxxxxxxxxvvzzttxvrrlvvvxvvlvxcmccccccccccccccxxccccccccccccccccccccccccccccccccccccccccxxxxxxxxxxxxxxxxccccccccccccccccxxxxxxxxxccccxxxxxxxxxxxxxxxxxxxxxxxccccccccccccccccccccNNNNNNNNcccccccccccxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxMccccxxxZxxxZZxtxxyxxxVVVVxxxxxxyyyyyeuu3=OOoooooooooooooooooooo", "ooooooooooooooooooooo...... ..............ooooooooOooO%&&%>>>>3wwwww6>;%%OOOOOooOOOOOOOOOoOOOoOOOOOOOOOOOOOOOOOOOOOOOOOOOO%%OOOO%--;wxnnxvyxxxcccccccZcvrrxxxxxzzzxccccxxxzxx6-OOooooooooooooooooooooooooooooooooooooooooooooooooooooooooo.......................................................o...ooooooOOOOOOO%%%%;6wtxcnnxxtrtzvxxxxxxxxxxxxxxxxxxvvzvvxxxcccxxxxxxxxxxxxxxxxvvxxxxvvxxxxxxccxxxxxxxxxxxxxxxxccccxxxxxxxxxxvvxxxxvvxxccxxxxccxxxxxxxxzxxxxtrrrtzxxxxxccccccccccccccccxxxxxxxxxxxxxxxxccccccccccccccccxxxxxxxxxxxxxxxxxxxxxxxxxxxxvzttxvrrrlvvvlllvxxcccccccccccccccccccccccccccccccccxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxccccccccxxxxxxxxxccccxxxxxxxxxxxccccccccccccccccccccccccccccccccNNNNNNNNcccccccccccxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxbcccxxxxvztvxxxvvvvvvvvvxxvvlzxxyyyyyyuuyuww>=%O@ooooooooooooooo", "ooooooooooooooooooooo...... ................ ........ooooooooooooooOOOOO&>ww6wwuuyyxxxxcxtw>-OOOOOOOOOOOOOOOOOOOOOOO%OOOOOOOOOOOOOOOOOOOOOOOOoOOOOO%%%;wxZZZnxxxxxcccccccxlrvzzxxxxxxxxccxxxxlxzw>*OoooooooooooooooooOOOOOOOOoooooooooooooooooooooooooooooooo......................................................oooooooooooooOOOOO%-;69rtzvxxcmccxxcccccxxnncxxxxxxxxxxxxxccccccccccccccccccccccccxxxxxxvvxxxxxxxcxxxxxxxxxxxxxxxxccxxxxxxxxxvvvvvllvvlllvzzzzxxxcxxxxxxxxzzxxxzr0rrzxxNxxccccccccccccccccxxxxxxxxxxxxxxxxccccccccccccccccxxxxxxxxxxxxxxxxxxxxxxxxxxxxxvttzrrrrlzzrrzvxxxxxxxxxxxxxxxxxxxxccccccccccccccccxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxccccccccccccccccxccccxxxxxxxxxxxcccccccccccccccccccccccccccccccccccccccccccccccccccxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxcccxxxxxxvzvvxccxxxxxvzlvxxxxxxcttvvvttttttyyuuw@@oooooooooooooo", "ooooooooooooooooooooo...... .................................... ..ooooooooooooooooooOOOO%*:6utttrrrtyxxxcNZZZxlr**%%OOOOOOO%***%OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO*&&&*%%%%%%-;6wrrixxxxcccccxxvrtxzzxxxccxxxxxxxxxzxxtww=OoooooooooooooooOOOOOOOOOOOOOOOOOoooooooooooooooooooooooo......................................................ooooooooooOO%%*::>67rrllllzvxcccccccNccccxccxxxxxxxxxxxxxxcccccccxccccccccccccccccccccccxvxxxxxxxxxxxxxxxxxxxxxxxxxxzzztttvvvvvvzzllvvlllzllzzxxxxxxxxxxxxzxxcxzrrllxxccccccccccccxxxxxxxxxxxxxxxxxxxxxxxxccccccccccccccccxxxxxxxxxxxxxxxxxxxxxxxxxxxxxzrrrrrrtzztrzxcncxxxxxxxxxxxxxxxxccccccccccxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxccccccccccccccccxccccxxxxxxxxxxxxxxxxxxxccccxxxxccccccccccccccccxxxxxxxxcccccccccccxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxccxxxxxxxxzzzxxcxxxxxxxxcccNNcxxvxxxvvttxtrwttyyOooooooooooooooo", "oooooooooooooooooooooo..... ..........................ooooooo@oooooooo................ oo@@@@oooooooooooooOOOO%*>wtxxxxttzzxxxxxcNZZZccwwwwwwww>>>wwuww>>>&&%OO&&&%%OOOOOOOOOOOO%%%OO*>eeeww3>&&-%%%%%%wwtxxxcxcvvxzrtxxxxcccxxxxxxxxxzxxztyu>OoooooooooooooooOOOOOOOOOOOOOOOOOOOOOOOOOoooooooooooooooo.....................................................oooooooo@@@>>,wwtttrzzxxvvvccccccxxccccccccxxxxxxxxcxxxxxxxcccccccccccccccccccccccccccccccczzxxxxxxxxxxxxxxxxxxxxxxxzzzztttvvvvvvvvvxccxxxxzzzxxxxxxxxxxxxxxccccxllzxcccccccccccxxxxxxxxxxxxxxxxxxxxxxxxxxxccccccccccccccccxxxxxxxxxxxxxxxxxxxxvvvztzvvzrrrrrrtvxxzvxxxcxxxxxxxxxxxxxxxxxxxccccccccxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxccccccccxxxxxxxxxccccxxxxxxxxxxxxxxxxxxxccxxxxxxccccccccccccccccxxxxxxxxcccccccccccxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxyyyyyyxxxzvvzzzzxxxxcxxxcNxzccvvvvvvcxtrrrw6oooooooooooooooo", "oooooooooooooooooooooo..... ...........................ooooo@@+<<=+@ooo................ @++===+@ooooOOOOoooOOO%%:6txxxxxNNcxxxxxxxxxccBBVVVVdiiiyyydVVyyVViyuw,>&&&&%%%OOOOOOOOOO%*%%%&>eeddVdyuuuuw6;%%O*6txcxvvvvxvrtxccNccxxxxxxxxxxzcxttyu=oooooooooooooooOOOOOOOOOOOOOOOOOOOOOOOOOOoooooooooooooooo.....................................................ooo@@++<223uuutyyxxzzxccccccccccccBxcccccccNccxxxccccxxxxxxccccccccccccccccccccccccvxxccccczzzxxxxxxxxxxxxxcccccxxxxxxxxxxxvvvxxxxxlvxxxvvvxxxxxxxzxxxxxxxxcccccxbvbxccccccccccxxxxxxxxxxxxxxxxxxxxxxxxxxxxccccccccccccccccxxxxxxxxxxxxxxxxvvzzztttrtttrrw7rrrzxxxvxxvvxxxxxxxxxxxxxxxxxxxxccccccccxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxccccccccxxxxxxxxxccccxxxxxxxxxxxxxxxxxxxxxxxxxxzcccccccccccccccccccccccccccccccccccxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxyyytuuuuwuyNxxxxxxxzzzzzNztzxZNxcxvvlvvvrrtvzr6-oooooooooooooooo", "OOOOOOOOOOOOOOOOoooo..... ............. ......... .................ooooooooooooOOoOOO%%%%%%%%%-;6rtxnZnxr66;6ww;%OO%%%%%%%O%%%%%OOO%%%%%%%%OOO%;wtctr6-%OOoooooOOO%%;6rlvvvxxzzxxcNxxxxxxxxxxxxxxxxNNccxxzzxxxxxxxxcxxxxr6%%%%%%%%%-:7rrrr777rxcccxxxxxxzzzzzzzzzzzxxxcccccccccccccxxxxxxxxyyyyyw&OOoooooooOOOOOoooooooooooOOOOOOOOOOOOOOOOoooooooooooooooo................ooooooooooooooooOOOOOOOOOooooooooOOOOOO%6wtxxxxvzxxxxxxxxxxxxcccxxxxxxxxccccccccxxxxxxxxxxxxxxxxccccccccxxxxxxxxxxxxxxxxccccccccccccccccccccccccccccccccccccccccxxxxxxxxxxxxxxxxcccccccccccxxxxxxxxxxxxxxxxcccccccccccccccccccccxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxzzzzzlrrrrrzlrrrrrrrrrrzzzxxxxxxxxxxxxxxxxxxxxxxxxxccccccccxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxccccccccxxxxxxxxrrrrrrrrrrlvxccczxcczzxNcNNNxxxxbbBbbvvvcxu3=+oooooooooooooooooo", "OOOOOOOOOOOOOOOOoooo..... ................. ....... ... ..........ooo@ooo..ooooooooooOOOoOO%&O%%OOOOO%%-69rxxxxxxvtrrtyxyuwww>>>>>>;;--%%%%%%%%%-%%OOOOOO%;7rvztw>&%OoooOOO%%%%;7rvvvzzzxxxccxxxxxxxxccccccccccccccccxxxxxxxxcxxxcxr0zrr7;-%%7rtxcxxzrrzcNcxxxxxxxxzzxxxxxxxxxxxxxxccccccccccxxxxxxxxxyyw>%OOOOooooooOOOOooooooooooooOOOOOOOOOOOOOOOOoooooooooooooooo................ooooooooooooooooOOOOOOOOOOOOooo@OOOOO%*;utxxccxxxcccccccxxxxxcccxxxxxxxxccccccccccccccccccccccccccccccccxxxxxxxxxxxxxxxxccccccccccccccccccccccccccccccccccccccccxxxxxxxxxxxxxxxxcccccccccccxxxxxxxxxxxxxxxxcccccccccccccccccccccxxxxxxxxccccccccccccccccccccccccxxxxxxxxxxxxxzzzzzzzllrrzllrrrrrrrrlzzzxxxxxxxxxxxxxxxxxxxxxxxxxccccccccxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxllrrrrrrlzvvxxxxzxcczzzxcccxxxcNbbBcvbvxruq>*Ooooooooooooooooooo", "oooooooooooooooooooo...... ........ ........ ...........oooooooooooooO=2==+@OOOoOOOOOO&3>>>>>>;;--6rzxxxxvtttvxxxVVxyyxVxxxyyyyywww88866>68w86;-&**;;6wrxxxxtw>>OOOOOOO%%%-69lvvzzxxxxxxccccccccccccccccxxxccNNZxxxxxxxxNxzxxNxxcxxtrr07rtxxcxxxzxcNNxzzzxxxxxxxccccccccxxxxxxxxcccccccccccxxxxxnxu>%OOOOOOoooooOOOOooooooooooooOOOOOOOOOOOOOOOOoooooooooooooooooooooooooooooooooooooooooooooooooOOOOOOOoOOOoooOOOOOO%>wxccccccxcccccccxxxxxxxccxxxxxxxxccccccccccccccccccccccccccccccccxxxxxxxxxxxxxxxxccccccccccccccccccccccccccccccccccccccccxxxxxxxxxxxxxxxxcccccccccccxxxxxxxxxxxxxxxxxccccccccccccccccccccxxxxxxxxccccccccccccccccccccccccxxxxxxxxxxxxxxzzxxxzzzzzzzzzzzzzzzzzzzzzxxxxxxxxxxxxxxxxxxxxxxxxccccccccxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxvzrrrrxxxxxvvvxccccxzzcxzzxccccccxlrrw>>&*Oooooooooooooooooooo", "ooooooooooooooooooooooo.... ................ .........ooooooooooooooOOOO%%%%->wyyyuw8>>>&&&&&;wuuttyytyy6wrtvvztztttzxcZxxxtttxZZZZZZcccxxxxxxvvrttxxvttuuutttvvvxxxxtww%O%%%%%%%-;7rlvvzzxxcxxxxxxxxxxxxxxxxxxxxxxxccNNxxxxxxxxNxzzxxxzrrtzxxcNttzzzzzzxxccxxzrzzxxccccxxxxxxxxxxxxxxxxccccccccccccxxxxyt8-OOO%OOOoooooOOOooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooOOOOOOOOOOOOOOO%*::&*:>wycxxxxxxxxxxxxxxzxxxxxxxxxxxxxxxxccccccccccccccccccccccccccccccccxxxxxxxxxxxxxxccccccccccccccccccccccccccccccccccccccccccccccccccxxxxxxxxcccccccccccxxxxxxxxxxxxxxxxxxcccccccccccccccccccxxxxxxxxcccccccccccccccccccxxxxxxxxxxxxxxxxxxxxxxxxxzzzzzzzzzzxxxxxxxxxzxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxvzlrrxxxxxvvzvxcccxvvzzzzxcxxxxtw>**%OOOOoooooooooooooooooooo", "ooooooooooooooooooooooo...... ................ ........oooooooooooooooOoOO&>3wuvvvlrrvvmmxxvlrryuuuyyyyyyyxxxxxttttrrrrzzzvxxxcxxxxxxxxxxvvvzzzxxxxvvvvvvttvvvxxxxxxxvvxxxxzttt>>>6>>6669rrvvxxzxxccxxxxxxxxxxxzzzzzzzzxxxxxxxxxxxxxxxxxxxxxztrzzzzxxxxxxxzzxxxzzzzzzlrzzxxxcccxxxxxxxxxxxxcccccccccccccccxxxxxt8-%%OOOOOOOOOOOOOOOooooooooooooooooooooooooooooooooooooooooooooOOOOOOOOOOOOOOOOoooooooooooOOOOOOOOOoOOOOOO%>wwwuutttyxZxxxxxxccxxxxxxxzxxxxxxxxxxxxxxxxccccccccxxxxxxxxxxxxxxxxccccccccxxxxxxxxxxxxxcccccccccccccccccccccccccccccccccccccccccccccccccccxxxxxxxxcccccccccccxxxxxxxxxxxxxxxxxxxccccccccccccccccccxxxxxxxxxxxxxxxxxxxxxxxxxxxxxzzzxxxxxxxxxxxxxxxxzzzzzzzzzzzzxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxvvvvxxxxxxxvvvxxxxxvxxccxzte3=@oooooooooooooooooooooooooooo", "ooooooooooooooooooooooooo....... ....... ...o@+++OoooOOOOOO%**>>>>>,wuyyxxcccccccvvvvxxccVyyxVVxzxxxxztttztrrrrttxxxxxxxxxxxxxxxvxxvvvvvvvvvvvvvvcxvzllzvxxxxxxvvcxxvvxxxxvvvvvzvvvxxxccxxxxxxxxxzzzzzzzzxxxxxxxxxxxxxzzzxxxxxxxxzzxxcxxzxxxxxzzzxxxzzzxxlllllzzzzzzxxxxxccccccccxxccccccccccccccxxxxxxxxzw6;;;%OOOOOOoooOOOOOoooooooooooooooooooooooooooooooooooooooooooOOOOOOOOOOOOOOOOoooooOOOOOOOOOOOooooooOOOOO-wxxyyxxxxxxxxxxccccccccccccxccxxxxxxxxxxxxxxccccccccxxxxxxxxxxxxxxxxccccccccccccccccxxxxcccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccxxxxxxxxxxxxxxxxxxxxxccccccccxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxzzzzzxxxxxxxxzzxxxxxxzzzzzzzzzzzxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxvvxxxxxxnxxxnVnnyxViyuww$@.....o..oooooooooooooooooooooo", "ooooooooooooooooooooooooooo..... ..ooO=3eee33>>>>,w66wwwuttxxxxztttvbccccccvbbbccccxyxxxxxvcxxxxvvvvzttttzvxxxxxxxxccxxxxxxcccccccxxxxxxxxxZmcxxxxxcccxcxxxxxxxxxxxccccccccxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxtzxxxxxxxxxxxxxxzzzzzzzzzzzzzzzxlzzzxxxzxxxxxxxxxxxxxcccccccccccxxxxzzzzxxttww6>***%%OOOOOOOOOOoooooooooooooooooooooooooooooooooooooooooOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOooooOOO%%%-6tcxxxxxxvtzvxxccccccxccccccccccxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxccccccccccccccccxxxcccccccccccccccccccccccccccccccccccccccccccccxxxxxxxxcccccccccccccccccccxxxxxxxxxxxxxxxxxxxxxccccccccxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxzzzzzzzzzzzzzzzzxxxxxzzzzzzzzxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxvxxxxxxxViyuyyyeeee4=++=X .....oooooooooooooooooooooo", "ooooooooooooooooooooooooooooo... ......o+<23,,wyViyVnyyyxnnxxxxxxxxnccxxxvvccccxvvxcccccccctxcxvvxmxxxxxxccxxxxxvzzncxxxxxxZcxxxcccxxxxxxxxxxxxxxxxxxxcccxxxxxxxxxxvxxxxxxxvvvvxccxxxxxxxxxcxxzzxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxzxxxzzxxxxxxzzzzxxxxxxxxcxxxzxxxlzzzzzzzzzzzzzzzxxxxxxxxccccccccxxzzzzzzrtxztutttuww>:*%OOOOOOOOOOooooooooooooooooooooooooooooooooooooooOOOOOOOOOOOOOOOOOOOOOOOOOOOOO%%%ooOO*&:>>6rtxcxxcnmcxxxcxccccccxzxxxxxxxcccxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxccccccccccccccccxxxcccccccccccccccccccccccccccccccccccccccccccccxxxxxxxxcccccccccccccccccccxxxxxxxxxxxxxxxxxxxxxccccccccxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxzzzzzzzzzzzzzzzxxxxxzzzzzzzzxxxxxxxxzzzxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxe3<====+545+...o ..oooooooooooooooooooooo", "oooooooooooooooooooooooooooooooo. ..o@oo@@ooo@3yyeyyyyyyyxxxxxxxxxxxxxxxxxxxccccccccccccccccccccccxxxxxxxxxxxcccccxxxxxxxxvvvxxxxxccccccccccccccccccccccccccccccccccccxxxxxxxxccccccccccccxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxrrrzxxcNccccccxxxxxxxxxxcccccccczzzzzzzzzzzttttttttyyytt>>:*%OOOOOOOOOOOooooooooooooooooOOOOOooooooOOoooooooooooooooooooOOOOOO%%O%%%%%%%OOOO*1uyxxxxxvvvvxxxcccxvvvvxxxxzxxxcccNxxxxxxxxxxxxxxxxxxxxxxxxxxxccccNccccccccxxxxxxxxxxxxxxxxcccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccczzxxxxxxzxxxxxxccxxzzxxcxxxxxxxxcxxxxxxzxxxxxxxxxxxxzzzzzzzzzzzzxxxxxxxxxxxxxxxxxxxxxxxxzzzzzzzzxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxvlr+ooooo....... ..oooooOooooooooOOOooooo", "oooooooooooooooooooOOOOOoooooooo.... XXXXX=13w3wwuw>>wtxytxxxxxxxxxxxxxxxxxxxxxxxcccccccccxxxxxxxxxxxxxxxxxxxxxxxxxxccccccxxxxxxxxvvvxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxccccxxxxxxxxccccccccccccxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxzzxxxcccxxxxxxxxxxxxxxxxzzzzzzzzrrrrrrrrzzzzztttrrtttrrruuuwqq,,**%OOOOOoooooo@@ooooooooOOOOOOoooooOOoooooooooooooooooooOO%OOOOOOOO%%%%%***>,wutxxxxvvvvxxxxccxxccccccccxxxxxcccxxxxxxxxxxxxxxxxxxxxxxxxxxxxccccxxxxxxxxxxxxxxxxxxxxxxxxccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxccxxxzzzzzzzzzzzxxxxxxxxxxxxxxxxxxxxxxxxzzzzzzzzxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxvzlo......o.. oooooOOOOOOOOOOOoOOOOOOO", "OOOOOOOOoooooooooOOOOOooOooooooo.... .X$5555utyxyxxxcxxxxxxzxxxxxxxxxxxxxxxxxxxxxxccccccccccxxxxxxxxxxxxxxxxxxxxxxxxxxccccccxxxxxxxxvvxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxcccxxxxxxxxxxccccccccccxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxcccxxxxxxxzzzzzzzzzzzzzzrrrrrrrrrrrrrrrrllrrrrrrrrrrrrrrrrrrrwrr6>:-%%%%OOOOOOOOooOOOOOOOOOOOOOOOOOOOOOOoooooooooooooooo%OOOOOO%%%%-;;>>wwuuyyttzzzzvvvvxxxxccxxccccccccxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxcccxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxzzzzzzzzxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxvzz++++o.... .ooooOOOOOOOOOOOOOOOOOOOOO", "oooOOOOOOOOOOoooOOOOOOOOOOOOOOOO..o. . .o@@$24aee4zvxxxxxxxxcxxxxxxxxxxxxxxxxxxxxxxxxxxxxcccccccccxxxxxxxxxxxxxxxxxxxxxxxxxxxcccccxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxcccxxxxxxxxxxcccxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzlllrzzzlrrrr77777777ww0qq6qq;&&%%OOOOOOOOOOOOOOOOO%%OOOOOOOOoooooooo@OooooooOO%%--;;66wrrtttyxxNxxzzzzzzvvvvvxxxxxxxccccccccxxxxxxxxxxxxxxxxccccccccxxxxxxxxxxxxxxxzxxxxxxxxxxxxxxxxxxxxxxxxccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccNcccxxxxcxxxxxxzzxxccxxzxxxxxxxxzxxxxxxccccccccccccccxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxvvveee4=o.... .....oooOOOO%%%OOOOOOOOOOOOOOOO", "OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO.... ....ooo<4e4eeeyyyyxxxxcxxxlvxxvvxxxxxxxxxxxxxxxxxxxxxxxxxxxcccccccxxxxxxxxxxxxxxxxzzzzzzxxxxxxxcccxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxccxxxxxxxxxxxxccxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxzzxxxxxxxxxxzzzzzzzzzzzzxxxxxxxxxxxxxxxxccxxxxxxzzzzzllrll000000rr00rrrrwwww6>>;%%%%%%OOOOOOOOOOOO%%%%OOoooooooooooooooO-;;>wwutyzxxxxxxxxxxxxxxzzzzzzzzvxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxccccccccxxxxxxxxxxxxxxxzxxxxxxxxxxxxxxxxxxxxxxxxccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccNcccxxxxcxxxxxxzzxxccxxzxxxxxxxxzxxxxxxcccccccccccccccccccccccccxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxiyyyu=@@oooo....oooooOO*>>>>>>>6>>>>>>>>&&&%%%%%", "ww3>>&&&OOOOOOOOOOOOOOOOOOOOOOOO..... ....O*11weyyyyxxxxxxcxxxccxxzxxxzzzxxxxxxxxxxxxxxxxxxxxxxxxxxxxcccccxxxxxxxxxxxxxxxxzzzzzzzxxxxxxxxxxxxxxxxxxxxxxxvvxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxccxxxxxxxxxxxxccxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxzxxxxxxcxxxxxxzzzzzzzzzzxxxxxxxxxxxxxxxxxxxzzzzzzzxxxvzlxbbvvlllrr000000rrrrrww86666>;;;---------;>66>;-&%%%%%%%%%%%%&>>uuutyxxxzzxxxxxxxxzzzxxxzzzzzzzzvvvxxxxxvvvvvvvvxxxxxxxxxxxxxxxxccccccccxxxxxxxxxxxxxxxxxxxxxxxxccccccccxxxxxxxxccccccccccccccccxxxxxxxxccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxccccccccccccccccccccccccxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxvtxyw>&>>=<2222w3wwwwuuyttttzzvttttttttttuww886", "yyyyuuuu>>;&&&&&&&&&%%%%%%%&&&&&+@.... XXXo@@@@wtyxyxzrzxccccccxvlzxxxxxxxxxyyyxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxccccccccccccccccczzzzzzzzxxxxxxxxxxxxxxxxxxxxxvvvxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxccxxxxyyyyxxxxccxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxzzzxxxxxxxxxxzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzlllllvxxxxxbvccbbbbbbllllr0rr9wrrrw98rrrrrrrrwwwww888wwwwwwwww88888888888wwttxxxxxxxxtttttzzzxzzzzzzzzzzzxzxxzvvxxxxvzzztttttzzzxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxccccxxxxxxxxccccccccxxxxxxxxccccccccccccccccxxxxxxxxccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxcccxxxxxxxxccccccccxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxcvvcxr66uuueeeeexxxxxxxxxxxxxxccxxxxxxxxnnnxxxyy", "uuuuyyyyyyyyyuuueeuuwwwwwwwwuuuu42@@@$XX##555555txxzlxccbccBBBbbxvzvxcxxxxyyxiyyxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxcccccccccccccccczzzzzzzzxxxxxxxxxxxxxxxxxxxxxvvvxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxcxxxxxyyyyxxxxxcxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxzzzzzlllxxxzzzzzzzzzzzzzzzzzzzzzzzzzzzzzxxxxxxzxzzvxbbbbbbbbbbcccxxxxxxxrrrrrr977999rrrrvtttttrrrrwwwwrrrrrtttttxvtttttvyyyyyzzzttzzzzzzxxcccxzlzzzxzxxxzvvxxxxvvzzzzzzzzzzzxxxcxxxxxxxxxxxxxxxxxxxxxxxxxxxccccNccccccccccccccccxxxxxxxxccccccccccccccccxxxxxxxxcccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccczzxxxxxxzxxxxxxccxxzzxxcxxxxxxxxcxxxxxxzxxxxxxxxxxxxxxxxxxxxxxxxccccccccxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxvxxxcbbbccvlrrwwwuuuurrrrrrrrxzzzzzzxvvvvvvvvxvvvvttt", "rrrrrrzzvvvvvvvvvvvvvxxxvvvvvvvvzzzzzzzzzzzzxxxxxxxxxxxxxxxxxxxxrllzzxxxzzzzzzzzxxxxxxxxzzzzzzzzcxxxzxxxzzzzzzzzxxxxxxxxxxxxxxxxxxxxxxxxzxxxxxxxzzzxxccNxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxzzzzzzzzzzzzzzllzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzxxxxxzzzzzlllzzzzzzzzxxxxxxxxzzzzzzzzzzzzzzzzxzzzzzzxzzzzzzzzzzzzzzzzzxxxxxxzzzzzzzzzrllzzzxxzzzzzzzzzzzzzzzzzzzzzzzzxxxxxxxxccccccccccccccccccccccccxxxxxxxxccccccccxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxcccxxxccxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxzxxxxxxcccccccccxxxxxxxxxxxxxzzzzzzzzzzzxxxxxxcccccccxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxzzzxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxccxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxzzzzzzzzzzzzzlrrrlzzzzzzzzzxxxzzzzzzzzzzlllzzzzzzzzzzzzzzzzzzzzzzzz", "rrrrrrlzvvvvvvvvvvvvvvxxvvvvvvvvzzzzzzzzzzzzzxxxxxxxxxxxxxxzzllrrrrllzzzxxxxxxxxzzzzxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxzxxxxxxxzzzxxcccxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxzzzzzzzzzzzzzzzzzzzzzzzlzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzrrllzzzzxxzzzzzzxxxxxxxxzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzxxxxxxxxzxxxxxxzzzzzzzzzlzzzzzxxzzzzzzzzxxxxxxxxxxxxxxccxxxxxxxxccccccccccccccccccccccccxxxxxxxxccccccccxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxccxxxccxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxccccccccxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxzzzzzzzzzzzzzzxxxxxxxxzzzzzzzzzzzzxxxxzzxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxccxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxzzzllzxxxxxxzzzlllzzzzzzzzzzzxzzzzzzzzzzzzlllzzzzzzzzzzzzzzzzzzzzzzzz", "rrrrrrlzzzzzzzzzvvvvvvvvvvvvvvvvllllllllzzzzzxxxxxxxxxxxxzzlrrrrrrrrrrrrrrrrrrrrrrrrlzzzxxxxxxxxzzxxxxzzzzzzzzzzxxxxxxxxxxxxxxxxxxxxxxxxzxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzllllllllrrrllzzzxxxxxxxxxxxxxxxxzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzxxxxxxxxxxxxxxxxzzxxxxzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzllzzxxxxxxxxxxxxccccccccccccccccccccccccxxxxxxxxccccccccxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxcxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxzzzzzzzzzzzzzzlllzzzzzzzzzzzzzzzzzzzzzzzxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxcccxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxccxxxxxxxxxxxxxzzzrrrzzzxxzzzrrlzzzzzzzzzzzzzzzzzzzllzzzzllllzzzzzzzzzzzzzzzzzzzzzzzz", "lrrrrrllllllllllvvvvvvvvvvvvvvvvzzzzzzzzzzzzzzzxxxxxxxxxzzlrrrrrrrrrrrrr000000000000rrrrzzzzzzzzrlzzxzzzrrrrrrrrzxxxxxxxxxxzzxxxxxxxxxxxzxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxzzzzzzzzzzzzzzzzzzzxxzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzllllllllzzzzxxxxxxxxxxxxzzzzzzzzzzzzzzzzxxxxxxxxzzzzzzzzzzzllzzzxxxxxxxxzzzzzzzzzzxxxxzzzzzzzzzzzzzzzzzzxxxxxxxxzzzzzzzzzzzzzzzxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxzzzzzzzzxxxxxzzzxxxxxxxxxxxxxxzzxxxxxxcczzzzzzzzzzzzlrrrrlzzzzzzxxxzzzzzzzzzzzzzzzzzzzzzxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxccccxxxxxxxxxxxxxzzrrrrrrrrrrr0rrlzzllllllllllllllllllzzzlllrrzzzzzzzzzzzzzzzzzzzzzzzz", "llrrrrrlllllllllvvvvvvvvxxxxxxxxzzzzzzzzzzzzzzzzllllllllrrrrrrllllrrrrrr0000000077777000rrrrrrrrrrlzzzzlrrrrrrrrzzzxxxxxxxzzzzxxxxxxxxxxzxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxzzzzzzzzzzzxxxzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzxxxxccxxxxzzzzzzzzzzzzxxxxxxxxxxxxxxxxzzzzzzzzzzzllzzzrrrrrrrrzzzzzzzzzzzxxzzzzzzzzzzzxxxzzzzzxxxxxxxxcccccccccccxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxzzzzxxxxxxxxxxxxxzzzzxxxxxxczzzzzzzzzzzzzllllzzzzxzzxxxzzzzzzzxxxxzzzzzzzzzzxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxccxxxxxxxxxxxxxxzzzlrrrrrrrrr00rrrrrrllllllllrrrlllllzzlllrrrzzzzzzzzzzzzzzzzzzzzzzzz", "zlrrrrrrrrrrrrrrlllvvvvvvvvvvvvvzzzzzzzzzzzzzzzzrrrrrrrrrrrrlzzzzllrrrrr000000007777000000000000rrrrllllllllllllzzzzxxxxxxzzzzxxxxxxxxxxzxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxzzzzzzzzzzzxxxxxzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzxxxxzzzzzzzzxxxxxxxxxxxxxxxxzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzxxxxxxxxxxxxxcccccccccccxxzzzxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxzxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxzzzzzzzzzzzzzzzzxxxxzzzzxxxxxxxxxxxxzzzzzzxxxxxxzzzzzzzzzzzzzzzzzzzxxxzzzzzzlrrrzzxxxxzzzzzzzzzzxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxzxxccxxzxxxxxxxxxxxxxxxxxxxxxzzzxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxzzzzzrrllllrr0rrrrrrrrrrrrrrrrrrlllzzllllrrrrzzzzzzzzzzzzzzzzzzzzzzzz", "zlrrrrrrrrrrrrrrlllllvvvvvvvvvvvllllllllzzzzzzzzrrrrrrrrrrrrrrrlrrrrrrrr00000000rrrrrrrrrrrrrrrrrrrrrrllzzzzzzzzzzzzxxxxxzzzzzzxxxxxxxxxzxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxzzzzzzzzzzxxxxxxzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzxxxxxxxxzzzzzxxxzzzzzzzzxxxxxxxxzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzxxxxxxxxzzzzzzzzzzzzzzzzzzzzzzzzzzzxxxxxxxxxxxxxxxxxxxxxxxxzzzzzxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxzzxxxxxxzxxxxxxzxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxzzzzzzzzllllllllzzzzzzxxxxxxxxxxxxxzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzxxxzzzzzzllrrrzzzzzzzzzzzzzzzzxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxzxxccxxzxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxzxxxxxxzxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxzzxxxxzzzzzzzzzzzzzzzzzzzzzzzzzzrrrrrrrrrrrrrrrrrlllzzzzlllrrrrrzzzzzzzzzzzzzzzzzzzzzzzz", "zzrrrrrrrrrrrrrrlllllvvvvvvvvvvvrrrrrrrrzzzzzzzzrrrrrrrrrrrrrrrrrrrrrrrrzzzzzzzzzzzzzzzzzzzzzzzzrrrrrrlzrrrrrrrrlzzzzxxxxzzzzzzxxxxxxxxxzxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxzzzzzzzzzzxxxxxxzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzxxxxxxxzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzxzzzzzzxzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzxxxxcxxxxxxxxxxxxxxxxxxxxxxcczzzzzzzzxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxzzzxxxxxzxxxxxxzxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxzzzzzzzzzzzzzzzzzzzzzxxxxxxxxxxxxxxzzzzzzzzzzzllzzzzzzzzrllzzzzzzzzzzzllxxzzzzlllzzzzzzlzzzzzzzzxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxzxxccxxzxxxxxxxxxxxxxxxxcccxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxzxxxxxxzxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxzzzxxzzzzzzzzzzzrrrlllzzzzzzzzzzzzlrrrlzrrrrrrrrlllzzzzzlllrrrrrzzzzzzzzzzzzzzzzzzzzzzzz", "rrrrrlllllllllllrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrlzxxcxxxxxxxxxxccccccccxxzzzzxxllrrrrrrxxxxxxxzxxxxxxxxxxxxxxccxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxcxxxxzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzxzzzzzzlzzzzzzzzzzzzzzzzxxxxxxxxxxxxxxxxxxxxxxxxzzlrrrrrzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzxxzzzzzzzzxxxxxxxxxxxxxxxxxxxxxxxxccccccccxxxxxxxxxxxxxxxxNccccxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzxxxxxxxxxxxxxxxxxxxxxzzzzzxxxxxxxxxxxxxxxxxzzzzzzzzxxzzzzzzzzzzzllllllllllllllllllllllllzzzzzzzzzzzzzzzzxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxzzxxxxxxxxzzzxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxzzzllrzzzzzzzxzzzzzzzzzzlrrr00rrrrrrllrrrrrrrlllllllllzzzllllllrrrrrrlrrrllzzz", "rrrrrlllrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrzzxxxxxzxxxxxxxxxxxxxxxxxxzzzzxxxxxxxxxxxxxxxxxxxxxxxxxxxxzzzxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzxxxxxxxxzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzxxxxxxxxzzzzzzzzzzzzzzzzrrrrrlllzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxcccccxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzxxxxxxxxxxxxxxxxxxxxxzzzzzxxxxxxxxxxxxxxxxxzzzzzzzzxxzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxzzxxxxxxxxzzzxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxzzzzlxxxxxxxxxxccxxzlzzzzllrrrrrrrrrrzzzzzlllrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr", "rrrrrrllllllllllrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrlrrrrrrrlzzxxxxxxxxxxxxxzzzzzzzzxxxxxxxxxxxxzzzzzzzxxxxxxxxxxxxxxxzzzzzzxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzxxxxxxxxzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzxxxxxxxxzzzzzzzzzzzzzzzzrrrrzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxcccccccccccxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzxxxxxxxxxxxxxxxxxxxxxxzzzzxxxxxxzzzzzzzzxxxxzzzzzzxxxxzzzzzzzzzzxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxzzxxxxxxxxzzzxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxzzzcccxxxxxxcNNcxlrrrlzzzzzzzzzlrrrrrrrrrrrrrrrrrrrrrrrrrrrlrrrrrrlrrrlllzz", "rrrrrrrrllllllllrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrlxxcccxxxxxxxxzzzzzzzzxxxxxxxxzzzzzzzzzzzzxxxcxxxxxxxxxxxzzzzzxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzlllzzzzzzzzzzzzzzzzzzzzzxxxxxxxxzzzzzzzzzzzzzzzzrrrlzzzxzzzzzzzzxxxxxxxxzzzzzzzzzzzzzzzzxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxzzxxxxxxxxxxxxxxxxxxxxxxxxccccccccxxxxxxxxzzzzzzzzzzzzzzzzxxxxxxxxxxxxxxxxxxxxxxxxzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzxxxxxxxxxxxxxxxxxxxxxxxxzzxxxxxxzzzzzzzzxxxxxxxxzzxxxxzzxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxzzxxxxxxxxzzzxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxzzzllzzxxzzrrrrrrllzzzzzlllrr00000rrrrrrrrrrrrrrrllllllrrrrllzzzzzzzz", "rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrlzxcccxxxxxxxxzzzzzzzzxxxxxxxxxxxxxxxxzzzzxxxcxxxxxxxxcxxxxzxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzrrllzzzzlzzzzzzzzzzzzzzzxxxxxxxxxxxxxxxxzzzzzzzzzzzzzzzzzzzzzzzzxxxxxxxxzzzzzzzzzzzzzzzzxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxzzzxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxzzzzzzzzzzzzzzzzxxxxxxxxxxxxxxxxxxxxxxxxzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzxxxxxxxxzzxxxxxxxxxxxxxxxxxxxxxxzxxxxxxzxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxzzxxxxxxxxzzzxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxzzzzlrrzlrrrlzzzzzlllllrrrrrrrrrrrrllzzllllllllrrrrrrrrrrrrrrrrrrrrrrrr", "llrrrrrrrrrrrrrrttttttttrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrzzlllrrrrlzxxxzzxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxzzzxxxxxxxxxxxxxcxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxzzzzzzzzxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzllllzzzzlllzzzzzxxxxxxxxxxxxxxxxxxxxxxxxzzzzzzzzxxzzzzllzzzzzzzzzzzzzzzzzzzzzzzzxxxxxxxxxxxxxxxxzxxxxxxxxxxxxxxxxxxxxxxxxxxxzzzzxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxzzzxxxxxzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzxxxxxxzzxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxzzxxxxxxxxzzzzzzzzzzzxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxzzzzxzlrrzxcxxxxzzzzllzzzzxxxzzzzzllzzzzzzzzrrrrrllzxzzzzzzxzzzlllrr", "lllrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrzzzllrrrlzzxxzzzxxxxxxxxxxxxxxxxzzxxxxzzzzzzzzzxxxxxxxxxzzzzzzzzxxxzxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxzzzzzzzzxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzlllllrrrlzzzzzxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxzzzzlzzzzzzzzzzzzzzzzzzzzzzzzxxxxxxxxxxxxxxxxzzzzxxxxxxxxxxxxxxxxxxxxxxxzzzzzxxxxxxxxxxxxxxxxxxxxxxxxzzzzzzzzzzzzzxxxxxxxxxxxzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzrllzzxxxzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzxxxxxzzxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxzzxxxxxxxxzzzzzzzzzzzxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxzzzxxcxxxxzzzzxxxxxxxxzzzlrrrrzzzzzzzzlzzzzxxxxxxxxxxxxxxzzzzz", "lllrrrrr77777777wwwwwwwwrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrzzxxxxxxxxxxxxzzzzzzzzzzxxxxzzzzzzzxxxxxxxxxxzzzzzzzzzzzzzzxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxzzzzzzzzxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzxxxxxxxxzzzzzzzzzzzzzzzzzzzzzzzzzzzllrrrrrllzzzzccccccccxxxxxxxxxxxxxxxxxxxxxxxxxxxzzzzzzzzzzzzzzzzzzzzzzzzzzzzzxxxxxxxxxxxxxxxxzzzzzzxxzzzzzzzzxxxxxxxxxxxzzzzzxxxxxxxxxxxxxxxxxxxxxxxxzzzzzzzzzzzzzxxxxxxxxxxxzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzrrlzzxxxzzzzzzzzzzzzzzzzzzzzzzzzxxxxxxxxxxxxxxxxzzzxxxxxzzxxxxxxzzzzzzzzxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxzzxxxxxxxxzzzzzzzzzzzxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxzxxxxxxxxxxxxxxxxxxxxzzzzzzzzzzzzzzlrrrrrrrlzzzzzzzzzzzzrrrllzzzlrrrrrrlzzzllrrr", "zzzzzzzzzlrrrrrr000000007770rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrlllzzzzzzzzzxxxxzzzzzzzxxxxxxxxxzzzzzzzzzzzzzzzzxxxxxxxxxxxxxxxxzzzzzzzzzzzxxxxxxxxxxxxxxxxxxxxxzzzzzzzzzzzzzxxxxxxxxzzzzzzzzzzzzzzzzxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxzxxxxxxcxxxxxxxxxxxxxxxxzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzxxcccxxxxxzzzzzzzzzzzlllrrrrrlzzzzzzzzzzzzzzzzzzzzzzzxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxzzzzzzzzzzcxzzzzxxxxxzzxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxzzzzzxxxzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzxxxxxxxxzzzzzzzzxxzzlrrrrrrrrrrrrrrrrrrrzzzzzzzzxxxxxxxxzzzzzzzzzzzzzzzzxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxzzzzzzzzxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxzzzzzzzzzzzzzzzzrrrrrrrrllllllllzzzzzzzzrrrrrrrr", "llllllllzzrrrrrrzzzzzzzzlzzzzzlrrrrrlzzzzzzzzzzzrrrrrrrrrrrrrrllrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrzzzzzzzxzzzzzzzzzzzzzzzzxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxccxxxxxxxxxxxxxxxxzzzzzzzzzzzzxxxxxxxxxzzzzzzzzzzzxxxxxxxxxxxxxxxxccccccccxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzxxxxxxxzzzzzzzzzzzzzzzzzzllzzzzzzxxxxxxxxxxzzzzzzzzxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxzzzzzzzzzzxxzzzzxxxxxxxxxxzzzzzzzzxxxxxxxxxxxxxzzzxxxxxxxxzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzxxxxxxxxzzzzzzzzzzzllrrrrrrrrrrrrrrrrrrrzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxzzzzzzzzxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxzzzzzzzzrrrrrrrrrrrrrrrrrrrrrrrrzzzzzzzzxzzzzzzx", "zzzzzzzzzzzlllzzxxxxxxxxxxxxzzlrllzzzxxxxxxxxxxxllllllllzzzzzzzzrrrllrrrrrrrrrrrrrrrrrrrrrrrrrrrzzzzzzxxzzzzzzzzzzzzzzzzzzzzzzzzxxxxxxxxxxxxxxxxzzzzzzzzzzzzzzzzxxxxxxxxzzzzzzzzxxxxxxxxxxxxxxxxxxxxxxzzzzzzzzzzzxxxxxxxccccccccxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxzzzzzzzzzzzzzzzzzzzzzzzzzzzzxxxxzzzxxxxxxxxxxxxxzzzzzzzzxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxzzxxxxxxxxxxxzzxxxxxxxxxxxzzzzzzzzxxxxxxxxxxxzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzxxxxxxxxxxxxxxxxxxxxxxxxzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzllllllrrzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxzzzzzzzzrrrrrrrrrrrrrrrrrrrrrrrrzzzzzzzzxxxxxxxx", "xxxxxxxxxxzzzzzzxxxxxxxxxxxxxxxxxxxxxxxxzzzzzzzzzzzzzzzzrrrrllllrrrllrrrrrrrrrrrllzzzzzzzzzzllrrzzzzzzxxzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzrrrrrrrrzzzzzzzzxxxxxxxxzzzzzzzzxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxzzzzzzzzxxxxxxxxxxxxxxxxccccccccxxxxxxxxcccxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxzzzzzzzzzzzzzzzzzzxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxccxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxzxxxxxxxxxxxxxxxccxxxxxxcxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxzzzzzxxxxxxxxxxxxxxxxzzzzzzzzzzzzzzzzxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzlllzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxccccccccccxxxxxxxxxxxxxxzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzxxxxxzzxxx", "zzzzzzzzxxxxxxxxxxxxxxxxccNNZZNNccxxxzzzllllllllzzzzzzzz000000rrrrzzzzrrrrrrrrrrzzzzzzzzzzzzzlllzzzzzzxxxxxxxxxxzzzzzzzzxxxxxxxxzzzzzzzzzzzzzzzzzzzzzzzzxxxxccccccccccccxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxzzzzzxxxxxxxxxxxccccccccccccccccxxxxxxxxccccxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxccxxxxxzzzzzzzzzzzzzzzzzzzzxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxcccxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxzxxxxxxxxxxxxxxcccxxxxxxcxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxcxxxxxxxxxxxxxxxxxxxxxxxzzzzzzzzzzzzzzzzxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzxxxxxxxxzzzzzzzzzzzzzxxxxxxxxxxxxxxxxxxxxxxxxxxxzzzzzzzzxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxcccccccccccxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxzzzzzzzzzzzzzxxxxxzzzzxx", "zzzzzzzzxxxcccxxxxxxxxxxccNNccxxcccxxzzzzzzzzzzzxxxxxxxxrrrrrrrlxxxccxxxllllllllrrrrrrrrllrrrrrrzzzzzxxxxxxxxxxxxxxxxxxxccccccccxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxccccccccccxxxxxxxxxxxxxxxxxxxxxxxxzzxxxxxxxxxxxxxxxxxcccccccccccccccccccccccccccccccccccccccccxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxzzzzzzzzzzzzzxxxxxxxxzzzzxxxxxxxxxxxxzzzzzzzzxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxccccccccccccccccccccccccccccxxxxxxxxxxxxxxxxxxccxxxxxxxxxxxxxxxxxcccxxxxxxxxzzzzzzzzxxxxxxxxxxxcccccccccccccccccxxxxxxxxxxxxxxxxxxxxzzzzzzzzxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxzzzzzzzzxxxxxxxxxxxxxxxxzzxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxccccccccccccccccccccccccccccccccccccxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxzzzzxxxxxxxxxxxx", "xxxxxxxxzxxccccxccccccccxxxxxxzzccxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxzzzzzzzzzzzllrrrzzzzzzzzxzzzzxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxzzzzzzzzzzzzzzzzxxxxxxxxxxxxxxxxxxxxxxxxxxxxzzzzzzzxxxxxxxxxxxxxccccNNNNccccccccxxxxxxxxxxxxxxxxccccccccxxccccccxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxzzzzzzzzzzzzxxxxxxxxxxxxxxxxxxzzxxxxxxzzzzzzzzzzxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxcccccccccccccccccccccccccccccxxxxxxxxxxxxxxxxxxccxxxxcccccccczxxxccccxxxxxxxxzzzzzzzzxxxxxxxxxxxxxcccxxxxxxxxxxxxxxccxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxzxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxccccccccccccccccccccccccxxxxxxxxcccccxxxxxxxxxxxccccccccxxxxxxxxxxxxxxxxxxxxxxxxzzzxxxxxccxxxxcc", "zzzzzzzzzxxccccxcccccccccccNNcccxxxcccNNxxxxxxxxxxxxxxxxzzxxxxxxxxxzzxxxzzzzzzzzccxxxxxxxxcccNNNxzzzzxxxxxxxxxxxzzzzzzzzzzzzzzzzxxxxxxxxxxxxxxxxzzzzzzzzzzxxxxxxzzzzzzzzzzzzzzzzxxxxxxxxxxxzzzzzzzzxxxxxxxxxxxxxxxccccccxxxxxxxxccccccccxxxxxxxxccccccccxxxccccNxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxzzzxxxxxxxxxxxxxcxxxxxxzxxxxxzzzxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxcccccccccccccccccccccccccccccxxxxxxxxxxxxxxxxxccccxxxcccccccczxxxccccxxxzzxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxzxxxxxxcxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxzzzzzzzzxxxxxxxxxxxxxxxxzzzzzzzzxxxxxxxxzzzzzzzzzzzzzzzzxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxccccccccccccccccccccccccxxxxxxxxcccccxxxxxxxxxxxccccccccxxxxxxxxxxxxxxxxxxxxxxxxzzzxxxxxxxxxxxxx", "xxxxxxxxccccccccccccccccccccccccccccccccccccccccccccccccccccccccxxxxxxxxxxxxxxxxxxxxxxxxccccccccccccccccxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxccccccccxxxxxxxxxxxxxxxxxxxxxxxxccccccccxxxxxccccccccccccccxxxxxccccccccccccccccccccccccccccccccccccccxxxxxxxxxxxxxxxzzzxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxccccccccxxxxxxxxxxxxxxxxxxxxxxxxccccccccxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxccccccccccccccccccccccccccccccccccccccccxxxxxxxxxxxxxxxxccccccccccccccccxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxccccccccxxxxxxxxccccccccccccccccccccccccxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxzzzzzzzzzzzzzzzzxxxxxxxxxxxxxxxxxxxxxxxxccccccccxxxxxxxxccccccccccccccccccccccccccccccccccccccccxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", "xxxxxxxxccccccccccccccccccccccccccccccccccccccccccccccccccccccccxxxxxxxxxxxxxxxxxxxxxxxxccccccccccccccccxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxccccccccxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxccccccccccccccxxxxxxxxxxxxxccccccccccccccccccccccccccccxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxccccccccxxxxxxxxxxxxxxxxxxxxxxxxccccccccxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxccccccccccccccccccccccccccccccccccccccccxxxxxxxxxxxxxxxxccccccccccccccccxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxccccccccxxxxxxxxccccccccccccccccccccccccxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxzzzzzzzzzzzzzzzzxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxccccccccccccccccccccccccccccccccccccccccxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", "xxxxxxxxccccccccccccccccccccccccccccccccccccccccccccccccccccccccxxxxxxxxxxxxxxxxxxxxxxxxccccccccccccccccxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxccccccccxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxccccccccccccccxxxxxxxxxxxxxcccccccccccccccccccccccccxxxxxxxxxxxxxxxxxxxccccxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxccccccccxxxxxxxxxxxxxxxxccccccccccccccccccccccccxxxxxxxxxxxxxxxxxxxxxxxxccccccccccccccccccccccccccccccccccccccccxxxxxxxxxxxxxxxxccccccccccccccccxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxccccccccxxxxxxxxccccccccccccccccccccccccxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxccccccccccccccccccccccccccccccccccccccccxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", "ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccxxxxxxxxxxxxxxxxccccccccccccccccxxxxxxxxccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccxxxxxxxxxxxxxxxxxxxccccccccccccccxxxxxxxxxxxxxccccccccxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxccccxxxxxxxxccccccccccccccccccccccccccccccccccccccccccccccccxxxxxxxxxxxxxxxxccccccccxxxxxxxxccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccxxxxxxxxxxxxxxxxxxxxxxxxxxxccxxxxxxxxxxxxxxxxxxxxxxccxxxxxxxxxxxccccccccccccccccccccccccccccccccccccccccccccccccxxxxxxxxcxxxxxxcccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxcccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc", "ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccxxxxxxxxxxxxxxxxccccccccccccccccxxxxxxxxcccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccxxxxxxxxxxxxxxxxxxccccccccccccccxxxxxxxxxxxxxccccccccxxxxxxxxxxxxxxxxxxxxxxxxzzzzzzzzxxxxxxccxxxxxxxxccccccccccccccccccccccccccccccccccccccccccccccccxxxxxxxxxxxxxxxxccccccccxxxxxxxxccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccxxxxxxxxxxxxxxxxxxxxxxxxxxccccxxxxxxxxxxxxxxxxxxxxccccxxxxxxxxxxccccccccccccccccccccccccccccccccccccccccccccccccxxxxxxxxccxxxxccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxcccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc", "ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccxxxxccccccccxxxxxccccccccccccccxxxxxcccccccccccccccccccccccccccccccccxxxxxxxxxxxxxxxxxxxxxxxccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccxxxxxxxxccccccccxxxxxxxxccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccxxccccxxxxxxxxxxccccccccxxccccxxccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccxxxxccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccxxxxxxxxxxxxxxxxxxxxxxxxccccccccxxxxxxxxccccccccxxxxxxxxcccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc", "cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccxxxccccccccxxxxxccccccccccccccxxxxxccccccccccccccccccccccccccccccccccccxxxxxxxxxxxxcccccxxxccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccxccccccxxxxxxxxxccccccccxccccccxccccccccccccccccccccccccccccccccccccccccccccccccxxxxxxxxcccccccccccxxcccxxxxxxxxxxxxxxxxccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccxxxxxxxxccccccccxxxxxxxxccccccccxxxxxxxxcccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc", "cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccxxxccccccccxxxxxccccccccccccccxxxxxccccccccccccccccccccccccccccccccccccccxxccccccccNNNccccxccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccxccccccxxxxxxxxxccccccccxccccccxccccccccccccccccccccccccccccccccccccccccccccccccxxxxxxxxcccccccccccxxcccxxxxxxxxxxxxxxxxccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccxxxxxxxxccccccccccccccccccccccccxxxxxxxxcccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc" }; xscreensaver-5.36/hacks/images/ground.xpm000644 000767 000024 00000043734 07432733726 020550 0ustar00jwzstaff000000 000000 /* XPM */ static char *ground[] = { /* width height ncolors chars_per_pixel */ "128 128 92 1", /* colors */ " c #B4A589", ". c #C4B19C", "X c #C4AD9C", "o c #AC896A", "O c #BCA994", "+ c #BCA594", "@ c #8C7451", "# c #A49579", "$ c #604929", "% c #9C8D71", "& c #AC9D84", "* c #AC9984", "= c #CBB195", "- c #553D21", "; c #AC9973", ": c #AC9573", "> c #AC9173", ", c #BC987C", "< c #BCAE93", "1 c #6C5434", "2 c #8B7659", "3 c #CCB59C", "4 c #947D5B", "5 c #C4B194", "6 c #94795B", "7 c #C4AD94", "8 c #C4A994", "9 c #BCA98C", "0 c #C4A48A", "q c #8C7153", "w c #BCA58C", "e c #AD917A", "r c #BCA18C", "t c #B4A184", "y c #B49D84", "u c #AC997C", "i c #AC957C", "p c #745D3B", "a c #A48D74", "s c #A48974", "d c #CBBBA4", "f c #796143", "g c #947D64", "h c #D7C2A9", "j c #8C795C", "k c #A48963", "l c #7B694B", "z c #7C654C", "x c #C4A98C", "c c #BCA584", "v c #BCA184", "b c #B49D7C", "n c #B4997C", "m c #A4916C", "M c #8F7E5E", "N c #A48D6C", "B c #A4896C", "V c #D3BDA4", "C c #A18569", "Z c #9C8164", "A c #9C7D64", "S c #826C51", "D c #846749", "F c #DFCDB6", "G c #D4B89E", "H c #9C8567", "J c #665032", "K c #846D4C", "L c #CCAE96", "P c #947455", "I c #7C6544", "U c #A3987E", "Y c #C4A584", "T c #A49175", "R c #765F41", "E c #948165", "W c #B89E85", "Q c #D4BEA7", "! c #B4A98E", "~ c #837154", "^ c #9C7D5C", "/ c #AC8D6F", "( c #957955", ") c #CCB798", "_ c #AC9E7F", "` c #6F5839", "' c #A49184", "] c #C4AC8C", "[ c #C2B397", "{ c #9C896B", "} c #B4967C", "| c None", /* pixels */ "p`Rpq4n}v6PkgK4by3}v=Y>nj9ZJ=n42Zv~DHBqS~SZl`jBHxvL=HZ=337kn@H@nZK`DJ$$fgb9=dV7hFFHExcn:LAv5yT5d7=@utB:ir>:cynnv>k", "``zfIZ}}n^^oqjZvnwi>LLvvgnHR#d9+3VcSJ$~Ey}v:BZHn@SZHSSSIE@1qBBLn0x:{c7.xk>{^KN4qRSpJJ16uc3V)8dFF*i7YnHvkbvyyv57x6NuNnyv:Tt }vvo^", "pD(KSNk>6:ooHuy]8 hbTlf~l4,obvN6qP4~zRlf1RqKHnE}bby=vttyioB:@kBk}4HgHp$jv{]5btyFFFd=i:IH/Wty7wyLL>b9wbwxvNu]TbLN@", "IDiNj^6qD]^(geVGGh9K1fbN>46S@Miel{9t22Kffk/>b>@Dz>zpD~lR$R:w H6>>vccnNBs>}}Zn/vn>n>bqKK:R@:4ga&XQd3bN@H/6G7=Gwiiinvxnay{jNytKb>@", "J1Bn>{KqpHnKpl>9=3nBD$2x]nn{T{N4STch3 q2fP@pk6B@RDK2{4fR11Z:aEua>b>BEZTkBi=aki:>>>:}N>@S22ZEH6{ONZHgKK:PbN}}4BB:TnT:6>46D({xv:n]w_ay35Hl6RN{;#yvtwuy}9b tn#tNqH@", "B:4BH>>6Hxt>qfDeB/DBR$HyaeBnxxBlp@$J@R>5*Tu:HZ4Z~KEj24Ma{Nz11RIRH/qKS6tkmxknv>5nntm4g(B>jHN>xy5wc}y .33Hc>@4>N{:59uuHae53{:4HZHa", "HHAZm;>}(xhnv6ayv}I$R$67BNBHvntkI_41p`Rj577yBK@4t@lqSH>6qqbHR11$qNqD@:>kZbZ^3vnAbT>>f1pHyvHS>Zxx]x7V>NHv:gqp6x3LB073GcI$$RH:i}B>yVVu3G]ETE4%w5.5BRfnTff1p~K>q>^K:K1D^$$JKnkiv}Cv7nBg>xw`$-DBBqR6Kg=738Oxt33>v/:6442&5euwBeEEH~Zg6}H", "Z>>6uTBK`DBwLy73=Gh:1-1KNNn>ivhF h5hTt yatx9=t6K(Hll1JJ`B^Z(KvHl@HJ$$f/BvvoBB>7>P6w]D1$pHHCD^^Dniy3 7ivw/cbcmB{Bw3tb7uy*jHgZ^4BZ", "ZgbH`I46IKz1{n3V9bGFvPKki>nc87FF<5=33DqS~DflI4^/Bfk4HDPl@@pPpqNCKCk}HH6H/opSfZ^CB6^`(Rzt35bS4BNBB57n9yrt}xi6ib{BiB6K^", "{N#vlIpIKZnjPz>dbn6:]b>:xw:wh3hFh373w+553x=xw>Ck6IDZJ-fS6K}(1KHZNBi4:PqI1Rv^^Z>Z]vHHnBZZHA`qR1J`~12it3Nc7}niTrHE3.nBvvtT37P:vB1I", "KK4;9TiiSKbx:DIjb>1pbbb05=iEd3d333937w09>Hw3vnkAZz(DR`1{f$$1p$>oB:i^ZZHkq1CP^kCK>xvcv>ovuB6f1J1`jqaOwysqux9NKJ]3HjtyaH978T7d>6}H@RpPP/N6tnyvyq^aH4SpJJK4A{a{2bDKNv6H4jS-pg6Zlj12:>gy{z$", "tBH6Ee4qaavN=/4`;x=]3.c#bn3V d..3FOZrcs]VcBv9LnbZg^R`1fBfRlD6qK^(KZ64>q1RDDp^ko0y{Nuyv>uE{:EK11f6Huyug@@ff4DR`j~~1`Jl~5NynauVV#E", "VVX0 u BZB5yvnH@4Nw3<.d55nvFXdFFdhh HgTc5h]G.0>ZNH>}HNq}~DIjZoNb61KBNayKpJ`1Ko2nwwycBw*yeHttHKRI2EvOuyuyH4aT%giTi{%~6zT{*}%ET&hF", " w3wu#HDR>wwxBEi9]7.&5&8bfHXFFFQ3Fd>:Tw=uHH3wYB(o}k{BRHkKRD/>64kf$l@6c7amNf-`1D%9n:>{MKEiwbEw96~ _T.wwVhQ&E6aeygH%TT&", "Uaw.VOaHf`gvwcB:]5vNcuuaH2gEcnK{y%j O* rr3hVO#%HNeg2a_E{", "3ii*8.X.TpzAyyyn3cZB4k@1jjRjgOhhy FFQycEn3xBn:H/}vfj~ZKK~Dl2H6T< 2JKfq2quBZN@{BE{awhaDTNTHzIiEkH4ENyynqREd.XO%T v>v5xiiHs4jgE9T&", "<+%gTO3d5hV XwysTy>4Zc=tvSEZw9>@DIp1`Tuc96SEyr5:tj*O#w:*uOHST=76EgjquZii ", "&a%Uy.Oh3*u w*#2Tub@@>vm^>;nHahh.*3XX5w V7Gn]7G3Byn=b>HKS2Z6:>D~a hFVX7 ytT643ZBpJR4n{$-1p--RKBNZj`Z6 %&gE{iHj~jBNqgyir#* ~4> 3&", "u&&.U T&5BHty<7y7t9_NmHbZ(ba>>r.V3.9i{;gi6y=cEHaq~m>wHHIMDS66gHTwH%%yO%#*%%HE%MEiTau !..dgzb *%", "&!.Q& .7x5H0w<..=5ut3T~B(~vvaws5 .ydd7TmBvx]3:1lKpZmcwZl#Df2jql~]>&7 &t73X.y--l^KH:9GVPffJ$-----$1Rs~z<%Eyh+.i&%@E2SETXd..U~2Tt*", "%&OX.&nwyGv w 9<7iE{3={uvjK>f6{& X< FFtv4kb=d]@1{lJDjjzl&O~HHEqD4Zy!d+Ei.dVdj4{{IayL=x^P,P1-$$$----`61j*TayyTSRRHEiT%%9&& !%%7*u", "j% .7Ow7sar5Oy**9y:j@9]Gn{qu:y3w.XFr]Y^>k@1R%2$---$R$`Z2zagi#S@l2T.%2%STXdyxwFddVh5Ua95Bv}4 5v~bkkkg{Sg*w igzqJPA~~zah.3&dVEahhdd7tn3=k:}>KI:@$---JSzSgl14q&iH#`Rz%HzRJEw%&jz% ", "'%E OX3.3 y*%23..uabp`B@cacmyBn8%T3V33yvHH>6%iaT]]YB]wnn9v3V56DJIP6EMEdT+7w3a2h.hFFh*u3Gxv=x`B>2pRERZka~f2j~#B{cZH$$-$JRJ~jT*T>i", "%E%*.XVV8 HTgetiy3i>fJHqut]Tjz{t*U33HZgpD/{E2E>u5 H:v{wyvy9Vv6$$q6Jf{#Q7&9L7VBdd..hhbjg)=uxVZB3]tgnj62kBlq6yyt(4wcl----`$JE%ua T", ".U&.U. .79HgH@Z6IttvBo4fZHO3%j.Vb=tcnnBv+0cDJ>wlS 33QiEwsc93V.X 3iHRq3yhh3=.359<]a9T]vB$$zNcnT>l$$-J~@g{eiatH", "QhXX 7tO3Ow4qR^^pZ~Bnnbq%gH3!Z .da5x# w>H2~%dr>LK(pI>nHHBDnVXGLk4x39+V3w3<3yZu3 T!7.<=BpBn'OO<7.3V9Vt.~KxcR-$gSi7y={$f4aj~2THgj#", "OdO hdddh3rH6qk^6nc/nvhcvyedOe yFhXtXd*itETyOB>v4D$J@}]9aR6wdVt=y0rOd38wyE>{JytZ--$R6r3FxDPyir TT*&aa", "%TO*T.dd.d3vNMPKIlvnb=GtS6N&ywr>wwZq%tE27yT8uKvx3:@`>Hv3]BjN.5.3dy*8]hy%3V7na6H%#ruy3ek$--127nB{xaZB1$`zlZbZ@IN;uy 3_a9b wER_3t>", "wegqS%i<7.7.i@@K2RzjeHc94i9{TB3O{g4R1JRB{iTN{k6KG]B@n}3VhVu", "cBzzz2Tr 7wy:qRfNSgitq;xgZxeTZwxaZ@I1$JEZ:NEAHPK.=ukv}G.hh35jgSTgHZqn3F3t>HD`6pzpDD1:H53($RKn>Sp6BBZIJ-16z$g/k=:Ziy7wt.dy#*.H&>{", "K1JJ$~O>{HyETmDf]t9aBZH=NDgHZgZO46^@@Ip6{v4DIDN}i3LvYwh3dhd7bB6ZHHN@DaV3ywY>pKJ`pB^Kn>Th=kK1`6KDvcNnDJ-1I6pJDfZq@qa%Hsyy *iyTZ3t", "bmI$`qvHqfgkNu:4D(I1fDq>b{6R`HEtqJ(>av9Vct=m^v0tjTnHv>dFQhFc]:Yv80yCqKzq@{Y}K-$pJDfKn=]55VnI$$pRv,n^>(@Dp-1$---`@(Ei+T4ZHBzq@p y", "=FvPDfqkKD>;>t=tf^Lvv]vxDn3.h+ 5{qKPqE=a21Jzq$p4o^KRRl@KIR@Zi7.=;tg:`JIkH4Z^P^K^41--J$ZHyXw6@RzD66I>j", "w==Lk1$1Rq]xN{w].tG9@/`D^vvx(KNvat>KIjDD{vv(p>HB{cGYqyhQd7uN@f`q47yH1-pP--$K>:{lplIHz~t3@nxiFh7BffRpZ@>K:vo>zR2I``6}yu^S1zp6KP9=", "Tw3Vx>4D4R6Nv7y73{t3^6fpDNmN^q^3>B3:jR1`@PNcB}NkNy7wZqMH7Vw3wg6Z2TVwuK--$$1Kvx64ERD9t5T>6@cn5XbwY^pKkfBKN=R4Bidv^1RqyeqDpRlKIR@>", "_ acxiV=xgZ:tr95nE@vc@(plgB:k}6kn=xw:HH=LVc~<9c7x6:yGvBp$I:q^Z26{GLc9v@6bE:PZ$-`$fPDTh39V9{q4f$K@K@^HKfK4>K4(>6$z4Bf~Iu>jbMqf>cH4j1K={w", "j{K@y_rTBb]vwbE6HfKkn,x]ynyykNv:FVhV% wwc04nyV5kD$$D`1@@6Rxx3x]Bq4Rq`A$-$JPkfghhnYTWx=;q]GVFFFhd39>H>vxwFvD$--pqH6B4vnQ.0>4S$$qT6J$pP^p14Awydh{5=ZNpK6@^>6Hkv>vv^^{Tg@IEjjbAB{n>Bu{H#:@R@f", "`1q@~ZE2lEty4tntB4DK~>n}nHu5Z4=GwFhFdh.cyi93h5FG@p$$6v=AI4lSBTa>4Rl1Pn0}>ZP^4KpDy53G2K3nIPJpKD4iT:=v/vb^ZH{qDK2{xiHKEHayVd7F]U{N", ":@k1(@~g4: tKN@H6:Jp(H}oZii TZ4=#Fh.9 35rt5hdV)V5:Hnt{=>mm`p1$JREk4Ipwn0E}ooZEDqR{nM`lv=kkll@Kn99bib=vy4D$1-f1pJj/@~@DJD>*x9d3;V", "nun:2DyiTdVy#VwtcFh9353Fhb>vK(Z6>@q~l$I@6k4DZoAp7^Cev>qJ`5cppH;nvxv>iNk4BiauO3x:{1-$@#SHwZDlK$$RK _3V@a", "==@^pRHH:wT73cNk`Dn/NNnY>;4K&7::;B3VbNdrg@vF]V797c}^=H4@RKHb5tZHBBuv^DRDRH0Zfs]:Ipitlpp@//w}8]>>q63h ayVWBkPKE97tv7rbc2fI@gw_{lK", ":x}bn>Hbttvy3L]L@DvxH:YvkN1p>iau]]a99t37cq(vxn:>qn=,nL>;wOB>y7h9e:vBa4J$$S4PfD@b1JRKIpfDin}nNn5]CqhF.ui8c>IRJ$EFODu7eu9NT6JKx{16", "qkB,xi=xbi:vV3hVnDkL=wvv>vP@it B:t:Nmvbq;N>Ax9icBnxV==t=t0T6EHtr]07w}9Z`l9THPIzbZf-$H$JlkbB4uawwNq7d.waE7=:6J$JOyf{vqB9w#{Sz9cD1", "I6>>vix7vNEahVGhc^Dnwwbc>]N> 75N4Nng^H;@^4qq>0]vvxx3G3w=rt;:4~Bu7v8xwV]g6G3tkKZb:I-$H$pf2B^Z:Ttt}q&XV7~`uGtbf1-ESJ@a6ax7ni@l>:Dp", "fD}v:nsy7vKKi3u3V7By9=B:}cxvwMEN46cZDI:Tl$--(Bvbv]dw)3iyv>nxt# tVwvt3hhY1uFx=BrnnP1$pPo@(ko>bnN7>42%8NBl`HZybR--J(H4k6>wa{qKIqlp", "1Kk}CHnex5BqfT3wdhwnitKE@k/HE{TNv}v}a^Z>lJ--pfn=rc3573yyv4P47Vww88.73dht$zyV3>}3]Y{D@nB4:vx/kp1Abxzj*w3t$J1quy--`b56>6fk>{qDJpk$", "AK@kZ:n:B0nnKfutr3.wkT{smj(Ei.bl^}}vc:@JDKH2(>>vL=0777VV3cNDP*5yv95dhdhG@```ZYwV73=>pN=btxnk:p$4(Tw.Bf$H3]ovvyeB:c9tV]t;xu6jju}awe9y*7.&:DDpkFhVhYKpcwrnvkL:K4ND{y3au5]c>nRJ--Htbu6qq6N(p1IpZ}", "vuw]:>:HbvLb]]c:<= T>Ni 3bHan.tH1(DRk^LP-IxY^>Z5=}HZTZ=xG]yhy{z@>iA~Bvss 7V3NRJEV*VV9Evc3>:>vYt0P1$1yw@~Z61n4f`zj{yNn:KILbzzu:Bv", ".54a~.blKvH6(^opD>c`I4c:n>cN6b9xy2yd3uNR>fjDZ0.8v3hxNp1t3w3FX>e}~/K(KRBwH$-qbba{l$KNMzExu9Lt59i5.uty=^k", "5 wur:yZNuvr==3V377tv.35t7*{EEnwKlN;tm(,k(^K--S6^k4nc{]5=cBq7V.3>eg``KH>9bc>Gv}KfTynQhvsZ64PIf11=7S$-@NtbszSjS``9uyw97.F.B", " y7w9TiAuOrr=3.35VubT85. tyja{:g@mk9cnY^fD1--`K>kI67n=G37tgyOyyxybj`f64b>va3vc>zKiidF=vEkD@DD1$=7al-z>>wvSl%B~$6~:vO.ET>wZe 7i5HaBT#9*9hV 5vyNycuc9}YK-$I$fDpbv:{b}:c83x7yisarc9cBRsN>>n=n=Y3vHix.dxbN4I1f@p$]3VVq`i9nrwaau.q6KHNw5O3dF33nZ:9", "tui<.dngES*eqBHcuy3.ut%5#y5*5wu8yev:c]^4NlJRfpDR^bL:L=q^>07<y9xnv]3cr..37ybYDp4B`KNTwVvNcHZV7S`j_Ht:6Tt{OyQd bHur", "i T9<.8bvT80i%9w3ttiTv9tH +5tT79hO=n}:4Hc=vvkRpp@:x}YvK@K> VdhOT2ttg88x7irayyy0n.VV3b93V3Exvkyt4p4lJN{HH-Jj7yE`j6gyi6vZ3*3.OtT;T", "t7U .570nyn=xwut=yyZHNit*w3F73)8wVVxcNm@hVFhmN4k(;k^,/^ID(`t# UyTHnB{yvrHeEw7w0333.wx9n93+cV]vgEIIRJ9:DAJ-J_yaa#{@u qi@HfiV5bm:@", "*i&&w..5vZ2HyAl{x9it}/#i5d_yb_tw%wVLx=](n:GFND@4@K>qn3GbH>f4t3<9ylIHgfR6~l>H&#yZi7=t5ygN3]=V73dbn4HqVvDa]*S~up~%Oyzq`qmH`qddiHB>", "7O3*%w3GV7262@l6Ncbxv0]tw39wwy%933hG=GhnJJIc]4^IfR&=YGGG:mnAt3~Bg30BcLxh 5h3NH:@nT-J%!FUnyEEHaRRR-~IKz7Vd3>x", "5g{T#Tx]r]vw6~DR@@>;:>tyaT8hVQ.dF=3b]43cp$J^xx]:{_b3nt>/v}644Ed33Lp---$Du#vcawwr{wcVhFVnb>yO%a9h8N}AbnR$J`dFD23OaZ2E2`@uuM2a 57c", "iE{TbmyvityGZIl1E@jNu>:naBy@DKE3=V=@---RHtex0uy=7*3OVdFVvv>vBE2dFF c=xiHv7F;K1^YY/YHG37iNvvPffRHTEu3Lcf-$4ruEvnBg8Gn%7G %avv}uh7Ba35x]>>nvvjJzHaaSqicvyEj%E8.tT#T{>", "t794KNBBtybiFVwqfHvcv=bv}>TMiw3vb353rn:T]ckk^bNHK677wHv:v4KDEc~6H Vn$$1Sdt77B~MslIa=3:BaBbwhwYvF5t>n6N>3Vn2N@@SIE>u*lzwyEt9..b@6", " 79ulB>u57iEuvvBARg>B/tv7vcN%s#ntv3t3tuNvth5bY]bq4n7.39icc;:@uy>*c3]Zp6Hi&v]9:NHHg6Zu]0nnnv6>99c/ZZ=tb>q6(4T@H6plfREi{uO73cZZ", "H4]tHBw7.V5it33>4ZNa]vy=3ir9yNnHxvc>x3]w:T>=V7ni4B89y yyvvaBjKnBG7tbTqZTTH4>i:5u{{P4S~N>o4nTqHDEbx3>kHvB>>44BA>v&;64jjy<3tnrw93=0N:wtu4>6l6@jgi@Hu:cig>>97vvb4ZEva(Evn3d7wT}N4nvn6>YaeHs7h3nkPl_>]nB:HB95=tm>Twd.3.ya4H@", "AHA{{{wr99itt3QFdVT>pKBBvv35ywx}cx9ycw99=w>yytZ{{DJ1>{:ZfPN>578n0x:x=bE6aNg>N .3hhZBBbtw7>inb}i(]4}BZ>cnwyuZq=w>7ddV<]#nn", ":n8r2MlK2:2gTa53uc0ayaNcxv]9aLuBBEI>NHtKp~6.btB}npHc9xwc:ntc wb{tcnc~tHk:>EnvxtnvN:LK>]d3VFF33", "v>=GzlRfI{4^Eg3.TT=}M2@1v5it]yniT:cxT#T{nxbc]:xbN>n@ZmN:;ZlKTgBBvypDTbwvxw:vv9X5*n@~JRgNbv85>]yyuTmc{xl4NAn>TbYccbvZkn(Hv3.dFF.5", "wnu3EH@lp25w{Hxx%E33tZllINg:tr0ycywyxytTq@^SGcvuNa>HKH3Nt=@~`1l6N>:g:>>i9VwcuTyx3w9bf4BBx>wLi}73wx@ib:>TtB:ycuvvbY}(46v4T]wtFFww", "V5>uKKuHaHn7w0x7ni 3h3Mn~KB>TBu7Oc:Ni#wtRp4ZNH>b>N:NN4>v77mbEqEHq@5=0xn7=xFVxnZaG757B4~q:>ynw8wr38B:9nv99t>b]BcL:kK^k}b:44aR h75", "37HN1fa/=vPbBx xyxG7iwaTc6P2ZHs :Tsq6gt9I@bn@EH>wcyB:^>9G3HSV99xb4}v5wny7ay3]y>BrG9tc}IqNBBGw3Vwn0}c]]:ntTEa0b^]:PDP/wv::itqNVV5", "TbH@EHZ@N^RAD2G7=73]t=7>n>Z@4ZS{9ivrZag{N};4@>::uvv}:c]hhFdt.9cb>H]tV3:aTw5h=vnNqy=hO8a2@6piLuw7b::TycrNyyHuy5~B]>4k>n=3N>v~pT5x", "q4@KN{jHon@^ZDiNbG7.{Tn>Y:v:Tu>y.9yr:vcaZ~ZEH6u9nnYbNxtxdhdhdV :at3=3FOuwh3Qx]BaT>b3cr>BzpffT4iuw9 v9twt< tv5aqbcncZ6axTKHNI~bx", "BEMqj4@@H/nZo@NMzH59TDH:g^4:uT]xty}naZ9x>q9=b_y3NvY>k;>>3.37d5yy97hF3Fh.tOG5e:6D6p@jl6H>{6>P2B:TB>75ryeby73iu{H64bcv2fS46lZb>Znw", "bt>_aa6jqjb/Z4Zu@~yTxH:y44qlE@6txyNu>{/yvBDNy573i63vK@>aLN4HiEHuEtbEuNE~fBEqT=x>>>Nmvc}SNn=d3bK=L@P>}x7cuw=i{7h59<9VF=T=]baBN>66lJ$D@>;ZnPq@ZAgyiHTj@ZTt6SZ@BRpy_fK2{iT:TBZiE", "E%5]T9HEHTub~~_#u9&Tv5^{c9B:{a%eb]9;N:by]xt=n]FF5@(=ckb,yw7uEu@RE85t]v97v}t={TqpqZbv:b46Z6ydyn5Tnag{4N24@RTvqlfjBHTiynaE", "2~wRJH=hMp^w07,}:c:KZ9sI4]i:TkZn]:twN>TBHut=G>aaN^nBb7vnc .ci5bBy{g>w46fpK(IfIDiZH:55%T", "~~uuuv3xHH%T)U4}w=9wvbnyB6{i80]:bvT:>bw4a3ysa <~2", "Sj_wyac7xt5hFUZ)#E.u=cNv>T{@$JKK^n]<3hhTRJcMJ---glSSTyvy=5tnjqR(:>:>>b}:tv G7nGc>inE2%73vy=Y9vjeN1iVwe>N9B9=jT5y:D$$(`@DgmajE.ES", "E{#*5MuVw]mFFF#iFhFhE9^6pp@(1J`pKc)6qpKB>v3yGrTxbNo77ywO3O{:LG:>HH~-Ki:ER~12>m63]5NI1p^>^H>twa<9~", "E~{T<75F.FHN:.3tVhFF*8bN$$pI11Rl@GFV&Tng>4Bb>41SHNwxyw3w5]6qZb3Oy.xTK@xZ>H@R`$1JKS9g>,uawn==iPK:}4uv995 #", "U{fzHT4 FFRf$Rb379dF3GV=$-$$J1EKK;G=m=xb4lH>l`IP^I~abBwtb4yy7ybgE/39HBa:vvx7=VG7bnDKuw>yxy^pqc0a>j{~l`Kf >wy%eaEOVwnI6=<99bH;:B9", "&u~lH:E{FFlM`l9FV&y3VV==p$1IJR4l`Ib9NTb;E{EH4RS^Nqjiwvvxx>3539b{@g]57ba>:uxx]d5c}x@2MHe}nvgppiLrcBtu#4EIEay9#*t%w3=vqzx]cncNBu{>", "]<9T#x>km3dFd.FF55nTvn]h95])tbfpJJ(n4f4vN={Rb}/>bbj%bnBv=8uwGOgHZ@{i)79vt:T>n5x=vc3TlRA}g{K1`jivYv3VFhv{E#id.3 T&%d3vjvt7}bvvcN{", "VcOZ{iKKKt9hFFVV 3b:Rp]F3FhhFFTl`l4N{@@:@guf^xn}kxUy9iS~ejI2=VTNaN~S{i7ywvbvHbv]aEd3*aqDZK2$Kv>aCevw.V0T:aavO.5%att7hH::aA", "c:a~zj~6vbzE.Fhu{bB@llbhVhhFFFF N77nB/NHRRlz:N:k4H3.3G{g@~~fH:L=vw>N&y3rby5xb8]7}EH.V3cZNf1$pb>N>Z}kgvOw2a>TzE.5M iaddygH@Z^4(~f", "6N5u~lE4v3yuT%y:4K>wh3V.FFFFFFhVvbx9vx/mSJ`$BT1ppDunBb:]ZRD14P{>}>95wtwwwrwxw707=={u8:t57y1-$K:{v>(@Rj8n6f1qJJHTa:>H.d3x^^p@@f$$", "JpT]>Tj@HV5xHE{vc@:7FFhuhh33FF.ha4ccnt::ZzElf4$1@Ig>2HZu5T@IqaH:bkNv7yyvO.58vunv=w7ytiitw3n~pKB{n>n/>}ia#f-$J$j{S~Ti7.7iiBEp1p1J", "E~: Gbbi%09c__@;==h5OV.E{ciwdhFVug>5t=kk4ktaM`-$B@gBHEi{Vh]Kpgb#(^642i>Hyayu}ZZHx=<3F.gExw=Y^B7w:cVxB6~ivE$-`l@4uTtyO7VG9>5HI@K1", "Nu#y3c ]v7thFVMp5=FFV5.H2u5F3h5V3G:ucnNkkknZ;I$`Dgi=9va#;>b@l1HtKHT{Rq{>gSHyo^6qZa3..yaEBE>vnywOcjV=naawh7jIzpfaE57wyv>vHu@Jpz^TX57>{4MN^l$IHqHt&2jSeD2genB6qKD5_O**Bg6kvyw77cqwV=ctuMRK4t3hVdv{Bk(R$$p@2wd7wzHzRR6v7BZ61v h75t@Pvtv{y]L>2:xv:y&9.9vHjgJ2yi7tHi=]8G.5bi", "KgTTTa<57_@K=VbnNwVwiiEH]53 t:Yh{SZBE#7<5V.iiN2Eca*.aHx7]h7.3c", "6Euuy{4Mc5_ywhh.77{nx:Ti8%ywdh!UU~M_9tuT>rrwvBDeabvNkAH&37]nmrOQ3VxH=BN4KIKi<7G=vy53&*]zj5<9twdO.OaE Va~_mTj%58c>w7rD@y", "iN_O5<;9=] VFhVdy7{jHE_y# jlcxx=vnp{GF5yFF7Ovk:V_BSK`Db& 5hFFVcn!hdhX*2 OZ97w7>mpppHE~_9yu{EM`2yz2tN:a twyhh&S]i$pt]ujHn}vTV5n>9", "{HT#<3;N4aHqqti9dFFF.hTqtic&&Tst#{yv0{b{{j454aZ:vtnMJR~`zvATm9y#Hd5w~ycZ6@{wwmN>v7Vyu>3", "t955.d {{b:B@{wdFFFh=BKEu5.9yj6TEDfggEwtcH7nv x4Hc2J1`SK4BbNNu7TTa~R{2K:TE47bT:>vy%>6{", "tw< d. E~&w.FdU.hd<]3V.nHzZt.FFFF=kEi 3<&tA~4@`$DEanu T:bn7=NN92```qq(n::am5 2Ej`jIR{tulT;nkZbi6aSH", "O. g TU 7ddXdFd.33]335dVHH@R@E*FFFFF99)5 h59cED$$`R%irwwO>i:5G5v53UD2N6Pnn{u:vtSatlRS~lt5%gu:/^TcB/Ha", "&95TEE9:H@u5FV93dEzavH6@IP~:H4I1f{{9:nvy:x", "yT 5 dUjlM{&9[QFh9nny.MgtVw>S4Kl@N9h]a9<9Hb]>{6q@@enH61`6gjg=FFF&!hhhFd3V*z`EtbHrnTaby>H5=bgj~5y=xEftttNHSR$lj~ljTH*t5tv]5yb0=ac", "&yZv%dd{~%{9U9 .3=Y/7h*Pi.bTjfplKKa t*{{>HNvu:NH6qB7wrHzD4@@nhFFhhFddFd]Vj--it7G3uv87HKR`$$`HEREO.##crv93=>twv", ".56gTOdd#%E#&%9un}}b3d7w5FYnjjl@^B9{{Tu>4SNN42ZH1@3vVxvfzg@@^TFFFd!~Ud.atHH~6A#8753i#mgSII4@`-l9y+V.Bg/S61R---Eu@j%t*#>{9>yvyyw3", "=3:u{#Xh.y{t3& bTTbcx3B>k9tubBjnNjuiiEEH~S:uH~Hn6DNqZIAp$1z@AZQFh!EJEdE^BM~zBBZTaBie5t_~zf@j2l`fai3hxnkaKI1$MfKi{E%j%&UjH>nty79v", "n}bwttt..3.#3tj2>E>HyH4gqHt79uZic46EqZ~&lIEvw#uy:Bqp1IN4$-Rq^~#dhh%JlEzlNKElPZS6e6>ZE~Nt.d0v{4qK@K:{j;vT&#j#. :uP=7.Vx", ">a}u 9 .<tF.ctw4{6ii:Ty5.x:nTm@^Huy{Tc9 jEd<_:Iv5t57", "trtw!9O.*EBjEw..jJ`9:kNHn4IBv=tN%st3)9vwbBat79w9OhVw#Gbi59t&N%{{ty#tv5nb7<>@Hb:x@qNnm>H@~Eg4S6N^I`wvvqnookBgT_<H@4La4#4j{TeB{4NN66ZPJ]>ABi{DEN!{K{y a{v{bv>33>v=79y>9t2KEkNk>4BbvaT{&t yuibviPpDREx4pHuj@Ti~au5y]t4H]LL...< MMH6.np4dd Onvkq@j", "oBt.OwTH;4# <{n5ER}^vuxwyx3wTx]9N>{}HB^q98w:Ey*twtw7i}mI$-j(qKIzNfKNi9GG]]m6jZaZgHb6EEj~%iMy:ZaHO95hv>vxn3<..d>HN@>B$-j*d5BbbtN4", ">vtyyu4qEEi9QOG]{p>AvLwV5y0xyct3c]v=>HvyFVh3i{iaavu9yn5vKR.]>ZD@tN`ppEb]vbycr@l`p1Hq2jl2T9nt78u=OVQFVvn>& TTxd.u>Bv]@`$zyOK@{B59", "~279T{Z~HEa75w==N@{q4LOw=7>>N:T]tnu=v^vGdFhd aZ%BA~gn>y9_KwFyvZ}:;1J``/Yx=:_=aE~R`6vuEH>yy>H.3wi5Vta:vv>&. % 339xN:}v:S`Mbajm>av", "ZRu5a4BEg@:3 {w3NZ~Dz:iEy8vbauBy=:EtbZc)xFhd9*E6>24j>nu&nITF9xBBb:KplI4vn95txTHHDI479ub:vuZ6y.{6w3cg{:nn*3.v9VV=c:Zin=#KM:NE>ng>", "aj`MH6iY{E>wvu:9=5KDqf{Hnutc:uHNhtK2uNB5>hh.7t gsjKl4Tiaa@l4]L:Z3ryng6^n>:V]>2~T>:>B]vt>uyn@2MSDNtGvn>:Y8dyybV9v>u6:n95ijH6Hn{>Z", "jS`SjHPgj4Nvyutv33w6cZPANN{n&{n2:c4@TNlyyyV3wT3xuySRS6jMb:KR$Rnih733b6kv553tjK@H4nkDaB}cHN9utZ@ql2Bty>:>tuH>jH759ZB/9BN{~6BNv{BH", "u4Hg{ippIRN>7c33yu=:uYD@2gHgtEE~KiHB#:E:Ts5VvT9tuyn_S6{HHN>a~D1pVh3VwB2nnuttKNakq6^p(^B]n6n{GuIzpjqIN}>Hni4ZjNy<=i^4/NTyNHNgNvyT", "tuuyNB11f$^nv=<3vc35/vB/@66qwuMalP46>uE#v7b<]n9c7_bvA6{%H{BTc;f$2.*7G7a;anuuH6KK@knk^>{wwZTHfpnNycv^atn>:n5hVv>^lv{]:kiBTvtt", "4HE4ZH`-p1Pk~uV=]nniyw Eu;~fHNau%inb>ivc@t9ByyB;u3=HEitN@J@V9.F9nbavn{@11`pfkDD4b]ng%e33=DIZ:LvGvi}cyi3&u=xxuB=E/NkNYyc&:", "4jKSD^f$JpP(1Ja5wiqm>N{a9cHw73*b3mp45ynmZK`1`$pJ1l{vxv%24tvNZf6/nnv77n=&vu{}v>9KNH4:oBivvt7" }; xscreensaver-5.36/hacks/images/hmac.xpm000644 000767 000024 00000002674 07553467035 020161 0ustar00jwzstaff000000 000000 /* XPM */ static char *happy_mac[] = { /* width height ncolors chars_per_pixel */ "32 32 13 1", /* colors */ " c None", "- c #000000", ". c #777777", "X c #CCCCFF", "o c #555555", "O c #00BB00", "+ c #6666CC", "@ c #CCCCCC", "# c #DD0000", "$ c #888888", "% c #FFFFFF", "& c #444444", "* c #222222", /* pixels */ " ", " -------------------- ", " -@@@@@@@@@@@@@@@@@@@@- ", " -@@@@@@@@@@@@@@@@@@@@@@- ", " -@@@&&&&&&&&&&&&&&&&@@@- ", " -@@&XXXXXXXXXXXXXXXX%@@- ", " -@@&XXXXXXXXXXXXXXXX%@@- ", " -@@&XXXX+XXX+XX+XXXX%@@- ", " -@@&XXXX+XXX+XX+XXXX%@@- ", " -@@&XXXXXXXX+XXXXXXX%@@- ", " -@@&XXXXXXXX+XXXXXXX%@@- ", " -@@&XXXXXXX++XXXXXXX%@@- ", " -@@&XXXXXXXXXXXXXXXX%@@- ", " -@@&XXXXX+XXXX+XXXXX%@@- ", " -@@&XXXXXX++++XXXXXX%@@- ", " -@@&XXXXXXXXXXXXXXXX%@@- ", " -@@&XXXXXXXXXXXXXXXX%@@- ", " -@@@%%%%%%%%%%%%%%%%@@@- ", " -@@@@@@@@@@@@@@@@@@@@@@- ", " -@@@@@@@@@@@@@@@@@@@@@@- ", " -@@@@@@@@@@@@@@@@@@@@@@- ", " -@@@@@@@@@@@@@@@@@@@@@@- ", " -@@@@@@@@@@@--------@@@- ", " -@@@@@@@@@@@%%%%%%%%@@@- ", " -@@OO@@@@@@@@@@@@@@@@@@- ", " -@@##@@@@@@@@@@@@@@@@@@- ", " -@@@@@@@@@@@@@@@@@@@@- ", " ---------------------- ", " -oooooo&&&&&*********- ", " -........oo&&&&******- ", " -$$$$$$$$...oo&&&&***- ", " -oooooooooooooooooooo- " }; xscreensaver-5.36/hacks/images/jigglymap.xpm000644 000767 000024 00000204617 07661340137 021226 0ustar00jwzstaff000000 000000 /* XPM */ static char * jigglymap_xpm[] = { "256 256 91 1", " c None", ". c #020202", "+ c #191516", "@ c #B8ACB4", "# c #72788F", "$ c #9C7B77", "% c #E8D6D7", "& c #9C929F", "* c #2B2729", "= c #E2CACB", "- c #64504D", "; c #D6C2C5", "> c #B58E8A", ", c #8F706C", "' c #CCACA8", ") c #807686", "! c #9090A0", "~ c #776863", "{ c #B79F9E", "] c #CCB2B5", "^ c #908A97", "/ c #433B3E", "( c #ADA4AE", "_ c #806966", ": c #8E7677", "< c #9C8387", "[ c #A99EA8", "} c #CDA398", "| c #8F8694", "1 c #D3B6B0", "2 c #AE9192", "3 c #C19E9D", "4 c #B18981", "5 c #BAB3B8", "6 c #4D464A", "7 c #8A8292", "8 c #DEBDBA", "9 c #AA8989", "0 c #6A6E84", "a c #EEE6E8", "b c #A59AA6", "c c #7F7284", "d c #DABBB8", "e c #EEE2E2", "f c #755D58", "g c #B59593", "h c #A69194", "i c #816F6E", "j c #9F8A8F", "k c #E5D0D1", "l c #967C7F", "m c #C3ABAB", "n c #D3BEC2", "o c #E2C6C3", "p c #C4998D", "q c #686B79", "r c #867988", "s c #B7A4AD", "t c #5B667D", "u c #77696E", "v c #C0A39F", "w c #A68582", "x c #C3B4BB", "y c #7F7D93", "z c #89716C", "A c #EBDBDC", "B c #A495A3", "C c #B89A99", "D c #CDB7BD", "E c #AD7C6F", "F c #9A7E84", "G c #BEA6AE", "H c #DAAEA4", "I c #8F7A84", "J c #D3B9BB", "K c #9F7168", "L c #D3B2B2", "M c #AE9AA2", "N c #98716D", "O c #94828A", "P c #86727A", "Q c #777181", "R c #786E71", "S c #C3ADB6", "T c #D6ADA0", "U c #DCC4C5", "V c #6A5D63", "W c #A67D76", "X c #C6A5A1", "Y c #58555C", "Z c #776266", " **6KEEE4>pp}pppp>4EEEKN/* ", " **//_E4>4pTT}TH}THHHHHHHH}T}}}}}}ppp>EE_//** ", " /-f_4pppp}H}H}}TT}HHTHHHHHHHHHHHTTH}H}}}}}}p}pp>Kf-/ ", " *-_KE}pp}}}H}}}}}H}}}}T}}}}}}}}p}p}p}}p}}}T}HH}H}}p}}}}}TpEK-* ", " -K>4pH888oHH}H}H}HH}}}p}pp}}}T}}p}}}p}p}ppppp}pp}}}HHH}}}}T}p}HHH}E-* ", " */E}}H8ooo8HHHHHHHHHHHHTTTTHHTTTTT1}T}}TTTHTTT}}Xp}pp}ppppp}}}}}}p}}'}THT>6/ ", " /f_}H8kkko888H8HHHH8oo888H88888ddH8d8od88dHHHHTT}}vvpXvpvpv}vpCgp{3v3}p}3}}}}}}Kf6 ", " fKHoookkkoo8o888Hoooooo88888ooookkk%kokkoooo8d11]'T''vvvv{v{v{v{3{{C{{{{CCCppp}}}}33KK ", " *f>Hkkook%kkkkkokkoko88888okkk%A%AAA%%k%kook==oo88d11L''T'T111dX}X'vvvCCCCgCggp{gppCp}'}}}pp_* ", " /}To%kooo%%AAAAkkooooooooA%AAAAAA%%%%%%%A%A%%k%%%oo8dd1T'T]x'''1111'Xvvv{vvC{gCC{g{CMCCgg333}3ppE6* ", " fpooko8kk%AAAAAkooo8okkkkkkAAAAAAeAAAAAAAAA%%k%kk=kood111]'mmm@mXm@m@@v{{v{{{pg{gg{gCCgCCCgggCC3}}pHWf ", " 6E'k%%kkkkAAAA%koo8ok%%AAAAA%AAAAAeeAeeeeeeAAAA%%kk=oo8d1''mv]xm@mv@vvsvsv{vvvvv{{gCCgMCgCCCgCgg>gCggp33TwK- ", " /}kAAkoAkAkkkoo88ooAAAAAAAAAAAAAAAAAeeAeAAAA%%k%kkkk=o8o8d1]''mmmmmmm'x]'mmXXvvvv{{v{C{CCCggg2CgCCpCg>ggCgC3}}p/ ", " 6pkAAAoA%%%oo88oo%AAAAAeAAAAAAeeAeeeeAAAAAA%Ak%kkkko=o=ooo=oo;ddnn11]L']']m@vmmmXmXvvv{{v{{{{{v{CC{C{}}Cgg2CCggg33E/ ", " f2=AA%k%%A%kokk%AAAAAAAAAeeAeAeAAAeAA%A%%k%AAAAokoo8888ooo88o8dnd1dd11T''mmxv@smm''X''mmmvX'Tmm}T''vv{{}T}TXCppgCCgp3p$f ", " 6gkekA%%AAAkk%AAAAeAAAAAAAeeeeAeAeAAAAAA%%%%%%AA%koo888888888d1dn11d1d11'T']xm'']x1ddoU1'Txm''1T1;oo8;81''1T881T}}T}vCgggpw- ", " *_AAA%eeAe%kkAeeeeeAeAAAAeeeAeeeeeAeAAAAAAA%kooo88888dHTT1T111mxmx]18o8o88;d1d;8==%%doo===oo=oookdd8o=k%%ko8=ook8d1HTH8oT}C>>p-* ", " *VoAAk%eAAAk%AeeeAeeeAeeeeeAeeeAeeeAAAAA%A%%oooo8H811TT1dd111111'x'm1d1o8doo8UU8ok%%%AAAAA%%%%%===%%kkk%%A%kood1H1HTH1THd8o8dTv2>p/ ", " /xeA%%AeAA%%AAAeAeeAAeeAeAeeeeeeeeeAAA%%%%oooooo88881188od8o888nUdndnd88;ddUoo=k=%%%%%%%kkoo%===ooo8ddd8==8oko81Tp}pppp}}TTdH1THTm>g$* ", " v;eA%eeA%AAAAAAeAeeAeeeAeeeeeeeeeeAAAAAAkkooooo88oo8oooUodoo8UUUUUooo8U88ddd8o=k%%kko8d'TTT}}vT1}Tv}pv'TTT}}}TT1TTXpvpp>>p>pTHH}}}Hd32w$ ", " BeAAeaeeeeAA%AeeeeeAeeeeeeAeAAeA%%A%ooooooooo8oooo8oUUooooooood88oooo===kk=oo===kkk%==odTmX}v}ppgp44h494222gppp}}111TTT}TT}ppp>p}}}ppp1TC2w- ", " YjAAAeaeeAAAAeeeeeeeeeeeAAAAAAeeA%%%kokoooookkkokkooooookokooko=ooooo=k=k====ooo=okkk===1T}pgpppgp>444wj94w>>pppppp}}TT'}pppp}}}pppp}p}pp}T3g>f/ ", " ReAeeeAAeeeeeeaeeeeeeeeeeeAA%AAAAAA%%%kkk%%%A%k%k%kkkkooookkkkk%ko==kkk%k%=o81TTTTTTTTT1o1TppC>>g>>>44wwwww4>4pp}}}}pvppvv}}}pppppg>p>4p44>p}}p>>6 ", " 65kAeAAAAeeeeeeeeeeeeeeeeAeAA%%AAAAA%%AAA%%%AAkk%k%kkkkooookkkkkk%%kk==k%k%=koHT}}}}}X}ppppgg244wEWWWWwWwWWWWww9Cpppv}pppp>>}}TT}vXp>4444>>4E>4p}}gw,* ", " Yaea%AAAAeeaeeeeeeaeeeAeAAAAAAA%A%%%%%AAAAAAA%k%o%%kkkoookokkokokkooooo88d18181TTpp}p}vppg>424w44EE44EEE>p}}g4/ ", " /YeAeAA%AAeeeeeeeeeeeeeAeAAA%%%%%k%%%%%%%kk%kk%k%k%kkooookk%%%%kkkkoooo8dHTHHHH11TTTT}TT}}vg>wWWE$KK$,K,K,$$$$EKE$Ww44ppCCvvX}v}'T1}}ppppp}}>2WWWKKEEpp3g4/* ", " /naAAeAAAAeeeeeeAeeeeAeeAAkkk%kkoko%%A%kkoooookk%kkkkooooo%%A%%%k%%koo88HH}}}}}TTT}TT1188Ud1}pgww$E$E$$K,K,K,KKK$WWwW49g4ggCpvpppCp{}}>>2>>>p}vp>wEKNNKE4}pg$* ", " *;%eeeAAAeeeeeeAAAAAAA%kkkokoo%AA%AAkooo888oookkkA%kkkooooo%%%%kkkkkkooo81T}}p}pp}T}TT1d1d1d1T}ppgg444W$,,,K_,,K,EWww944gppvppgpg>24>Cp44444j42gpp>4WK,KKNKE}gl ", " *aaeA%%AeeAAAAAAAAAAAk%kooooo%%kokk%%koo88d8oooookkooo8o8okk%%%%kkkkko8d1TTT}}ppppvX}}'TT1T1TTXvppgp>4>4h44WKEEE$E44ww4gww4>g4>>}T}g4E$KK,,,Ep3> ", " *5aAaA%%AeeAeeee%kkk%%%kkAo%AAA%%%kk%%%kk==o;oUUoooooooo8oooook%k%koood1T}}pp4h>w4w44>4>4>44>>22h4p>g>>>>44w44wEEWEEwww4g}vT}T'TT}vCgh4wwWWwww4>>gg}}Tp>>4EEEKK_K4>g, ", " 5aeAkk%%%kAAAeA%kokkkkkkkAk%AAAA%AAAA%%koo;;;11;1nd1d11dd;dooooooooo8dTT}}ppgp2294944>gg>2449wwwEWw$EEWW$$E$$E$$E>>w>>>4>pggv'T'1}XXvCg>>4W2449wgg44gp}g>>>44EEE_,K>>~ ", " neAkokkkko%AeeA%kkkkk%%%AAAAAAAAAe%A%%%o=1d515151511111111118888o8dd88dTTppppCgCg4h9>>>ggg4h4wwWW$EK$KK$KKK,KK_,K,$WWwwwEE$$K4>22>gggpvpCggw>ggp4ggpp}g>>>wE>>4p4EKf,w2: ", " *neAkoo8o%AAAeAAAAA%%%AAAAAAAAAe%%%%%oood1151515n51515T51'n11;d888ddddd188d1d1d18111ddUUU8dddd1'}g>44hEW$KK,K,N,K_K_K$KWE$$E$K,,z__z__,w9w<$Ww4>pgpppgpv}T}pp4>p>4EE4K__E9: ", " ^Aeko8HHoAeAAAAAAeAAAAAAAAAAk%%%kooookooU115151515n515111n1111;8881888888o88d1oUo=ooUooo=oooddd1T}pC>44wWW$KNNK,,K_z,z,K$$K$NNK,_z_,__,,zzz_~z,$:$:>2>4pppp}p}T}pp>WEEKK__K4gf ", " [eAo8TH8oA%AA%AAeAeAeAAeAAAAoookooo18dd1;1551151xx151x1n1n1n1;UUoo88ooo8o8o8od88oUooUooo===ooddddT'vv>hwww$E$$NNK,KKK,,,KK,,__________,_zz,zz___z_,z,:$KwWwWgp>>p}pp>wEEKK_,K4pf ", " &A%oTTHokAokkk%AeAeeeAeAAAA%%k88d1dd11151551x51x1xxxx15x5n1nd1d8Uooo8TTT1TmTTTTT'''1''''T1TTmT{}pv{pg>hwEKEEKKKfN4>f ", " b%%d}}okooookoo%AAAAAeAA%Aooo8d111115n5n51x151x5Dxn51xnx1n1n1;UooooodTT1TTvmv}TTmm'vmmmXmXTmXvvCCpppg>44wO$$$,K,,K_,_______f_f~_f____z__z,zzKN:Kz,,,z:zKN$,,zz__~_~_z_~zK,,KKK___49Z ", " jAkT}Toooookoook%%AAeeA%oo8od1n1n115nn5n151x51x1xxxxxxxx15n1n1ddooo8o8TTTmTX}m}'TTm}X}v}vCCCpgggh>4444wW<$$K$,,zK_,_K__K_z_,f____f__R~~~z_zzN:NzKK,zzz:zzzNKKK,z_i~~~ZZi~_,___KK___43Z ", " b%oT}H8okokookko%%AAeAA%koooo111x55n5151xD151xx1x'xx15151D1x1n1;o;;oo8dTTvmmXmTT;Udd1111X}p2WWEE$K:Kz,_z,Kzz_,_________ff__f___f_fZ_~~R~~z__zK$$N,KK$,K$$zzzN,_K,zzz~_~~~___,___,_f__4p~ ", " ^A8}}Hoooooook%AA%eAeAAA%kU8;nn1xnD5Dx1xn5nxDx]5]x]]m]m]xx51511n;;=;ooUo;o88o8;;okkkoo=o11m}pwW$KK,K,K,z__zzz__z__z_____f_ff_ffZZ__Zf~~R~__zz,,$$KK$K$K$WW$$KKKK,,zz,___~_____KKfKKK___KpV ", " B%1pTdo=k888=oAAeeAA%eAoo8;;nnn1xD515n5Dx515D5]]x55]xxxDxD'x1DDn1;;;;ooooooo=k=k=kkkokooo8dTvv4wW$EKKK,,_z___zz_z_____~f_f_fZ~_Zff,~~___i_z_z_z,:$KK$EwwwwW<$WKKK,K_z______Zz__,KKK,KK__~_>Z ", " ^%}pT8oko88oo%AAAAAA%%kko;nnn1xDxD5nxxxDxDDxx]x]m'x5]m]xDxD5DxDnn1;;=;=oko=k=k%AAAAA%%A%k=ood11{{h4E$$E$,,zz,,z_z__~_z__,f_Z~~~_fZZ_~~_i~__ii_z_zzz,,K$l$$wWw>gpEKKKNz,___f_______,K,,KK__Z,4Z ", " *%'p1okodT8ok%%%%%%A%%ooUd1511DxDxDxxx1xDxDxDxx]x]S]]xxDxxxnxDn;;oU==kk%A%AAAAAA%A%%%kkkooo811'Xpg>wwE$$$$,K,z,K_zzz__z_z___Z_~Z~Z_~~_f__ii_z~__~zz,K,KK$l$E$W4ppg4wWK,zz_~ff~~~______________4 ", " xT}1=8d11dok%ooooooood11111D51xnxDx15Dx5n5xDDx]x]xDDJD1nnDn1n;;oo==kkk%%AAAAAAAA%%k%%kkkoood1Xvv>4>wwE$$$$K,Kz,K,zz,_zRR_i_Zff~~fZffZZff~~~~~~~~~~__KK,,,_zzz$4gpp>wwW$Nzi_~~~_Z~_~f_f,____f_f_, ", " m]'8=81111U==oooU1d1111xnxDxxn5D5D5nxDxDD51xxxxDxxxDJJn1nn1nJ;;;oo==kk%%kAAAAAA%A%kkkkkkodd11Tv{C>44wWW$$:$K,Kz,,z,,_,_ii___Z~VZ~f~fZf~f~f~~~~~~~~~_~~~~___i_zzKNWw$$WW$:z_z__~~_~~_~_f___fZfZfZZE ", " ,T}8=1]'511;==d11111151x1xnxDx5DxDDxDxDxxxDxxDDxnDnnnn;nnJJnnn;Uoo===%k%%%AAAA%%%kkkooooUdT}pCg4wwWWW$E$$$,K_K,zz,,z,,zii_fZf~~Zffff~fffff~~~~~~~~~~~R~__~__~_zzzzzKWK$N,Nz_iii_Z~ff~f__Z_,_ZZfff_,z ", " Np';;1]x''11n111111]1D1x15J5DDn5n5D5DxDxx1xnnn;nnnx;;=U=ooooooo=koko=k%%%%%AA%AAk%kkkokooddTmpCghwwWwW$E$$$KK_K,,zz,zz,z__ifZZZ~Zffffffffffffffff~~~~~~~~_~~__z,zzzz,KNNNzzz__fz__~~f~Zff_____fffff_KZ ", " *'Td1'x'51mxDxx5Dxnx1nxDxD1xD5Dx5nxD5nxxnxxxDn;UU;nn;;;==oooooooooo==ookkk%%AAAAAk%%oooddTT}g4www<$$$KKKKK,K_K__z_z______i_Z_ZfZZfffZfVfffffffff~f~~~~~f~~~ff_f__NN,NNNN$,N,i_z~f~~~~~_Z~ff_,_,_fV-ffZ, ", " T'8n'5m1mxmxxDDDDD1nxDDDxDDx1DDD55DDxxDxxxDxnn;;;;;;==k%k=k==U===okooookk%%%%AA%%%kkoo811Tvp44wwW$$$:Kz,,K,K_,_,__z_z_z___Zf_~ZZf~fffVVVffffVfVfff~f~fZZ~f~ff_fKK,KNNNNKEwwK,z__Zf_~~~~Z~f~~,KNzff-VVffZ ", " *3T1nm'mmxm]m1x5DxDx11D]xnxnxnxxDDnx5DDx5D5xDxxxnnnnnnU;====;;;;;o;UUoo8ooooo%kkkokoooo81TT'vpgg4ww$,Kzz,zzz_z,K__zz___z_zi__Z~~f~fffffVVYfffYVfVff~ZZfZ~_f~~_____z,$K$K$$WwwNK,__~__f~~~~~~f~~,$$~fff--fff* ", " *wL1x]mxmmxmx'5]1x1D]]1x1D11DD5DxD55xD5x15xxxxDDx555xxDnn;;kUo;;;;;oU;ooo8ook%k%kkkkoooo81TTv}pp>444$:Kzz,z,z,,z_K__i__i___i_Zf_~Zf~~ffffVVfVfVVV~ff~f_f__z~~f~~___,,N$4$$Kz_z___________~~~~~ZZ~~~~~fff~VVfVVVVVVVff~Z_ZZf~Z~~~~f_zzz,:$$Ww4w$$N,,_z___~~~~f~~~_Z__~ZffYYVV-Z_* ", " *X]]mxm@vm@vv'5mxmmxx]]Dm]x]x]xxD1Dnn;;;n;;k;;;;nn;nnnnnUUU;;;UUoooookooo8o8o8oooooooooo88d811111TTm}vg>h$,K,z_zzR~i~~___~i~~~Z~~~~~ff~ffV~fVfVVVVfffffZfZZf~Zfff~~f~_zzzzKNE$w$K,,,z______Zf_~~fZf_f~fffVfY-Vff,/ ", " $']5xmvmssv@mmm]m1]]x]xDxxx]5DxD;k=kk;k==%kkk=;=;;=U===;=;UUU=;U=oooUooooo888o888o8o8o8o8dd818111'm'v}g4h$K,,z__i~~R~i~___~~~~V~~~~~~f~fff~VV~Vf~VfffffffZZVVVZZfZ~Z_iz,z,$WW$:z_,__z_______fZ__Zf__Z~fffVVY-YVVff ", " -v5]]m@@{vsm@@m]xxx]m'xDx]xxDnn;=kkkk%%kkk%kkk==;=;;====;=;UU;n11111d1d111T1TTTT8HHHHHTdddTT1TTTTT}'}mvp24$$KK,zziii~_~i~_~~~~~~~~~~~~~~~~~~R~f~~~~~f~VfZ~VZVZVVf~f~Z__,z,,$www:,,,,,_z__z___iz,_f~~~~ffVfVYVV---ff/ ", " 6]xxx5mm@v@s5x5m]'m]]xxxDxxDnx;;;kkk%k%kk%kkk;k=;=;==U=UUU=;;dJ111111111111TTTTTTTTTTHH181dTTTTTTTTT}m'}ph4l:,,,z_z__i_~~i_f~~~~~~~~~~~~~~~~RRRfZ~~~~~~~~f~~V~V~~Rii~i::$::K$Ww$:,,zz,____Kz,,N$,$z___~fff-VVY-Y---ff* ", " ~@]xx@mv@@@5m5m5xxDSx]mDDxDxnD;;=;k%%k%k===kk==k===U=UU==;U8dd1111111111111vTvT}TTTTTTTTTTTTT}T}}'}}p{{pg9w$KK_K,zzz_i~z~i__~~~~~~~~~f~~~~~~RR~Zf~~~~~~~~qZV~V~Z~RRRRRz:>4hp{pppppppppppgpppgg2h44ww<$$::z,,_,,,,,,zz__iiiiiz_i_~~__~~~~~R_f_ZRR~R~RR~ZZ~ZZZ~~~Ri~RR_,z,$$$WwwWNK,_,,,_z_zzzz,l>m9Kz_~fV-VfYV-YVYYY-fZ ", " l5xx5m55@5@mS55SmJnnD1]]SxSm'mxx5xx5xxDxD5xx'm'Xm'}XXXXXXvXXvvvp}pppgg>>>p{pg4>pp{pppppppppp>g>gw4h4wO$$l::zz,,,,_,zzzz,z_i~i_zzziii_~_iizz_~if____R~R~~~ZZ~~ZZuRRiiz_iizziii__$W$:N,,,_,_z__zzz,:4X2$:z_~~VffVY-YYYYYYY-f ", " *Bm]5m5m55@5m5S5x@Dnnn;DSSm]'m']'}'m]]'mTx1]1'X'XmXXXvmXvXXXXv3pCppCp{C>>4{gpp>>>gp{pppp>gggg424hwww<$:$::zzzzz__zzzzz_zz_iiiRi_z_____i___iii___f__~RRRR~~fZ~~f~~~_ii_z_____z_iizzK,______z_zii,WW$W4>4$_~ffVfVVVVYYVYY-YY- ", " *I@xSS55@55x555S@S@]]Jn]]m@m@mmmmm'mxm'T'']]]x'''T1L11T1T111'1T]''Xvvppp{p{p{pggg>p>g>4h4w44444wWW$$lzzzz__zi__zz~__,_z_z_z_iz____~i_~Z~~~~~___Zff_~~~~~~~~ZZ~~fuR~~_R~_~~_~~z_iiz:,,,________iz$42>>{vgwz~fffVfV-V--YYYY-YV- ", " /@]S]5@@m@m@SSS5x5SSm]]SmGGmGmm]5'm'mxm51]x1111111d188dd1ddd111d1'T''p}}TXmvvpppg>44h4wjw$wwwj4>pv{h:~fVVVfVVYVYYYYYYYYV* ", " *2mxDS555@@55@@55SS5mmm]m@G@vsGmmx5xxx']mx1x;n;;kk=kkkkkkk==kk===oU8ddd11'Tv}vvp>g>>4hwwjwW<$O$<$$$KKzz__iRRRRRRz~RRRRi_~ii__ffZ~~~~~~f~ffff~VfZZZVVVfVffffffVfVZ~_z,__f~ffff~~~~~_______~_~f~_iz$hvTvv'{2$z~fVVVVVYVYYYYYYYY-f ", " -@5DD@@m@555@m5S@55@Sm@m@mGGm@mm55xxxxDxDJDx;;;Ukkkkkk=k==kkkkk==oodUdd11'Tm}v{p>p>>44wwjwW<<h4hhwhwWgh44w4wwwwwwwl$,KNIll$$<<h22jjj:$:~~VVVVYYYYYYYY- ", " 65D55555555S55x5xn5xD5x5x]]]xxDxDx]D1]DDn1n8;;UU;8d111LTTT''T'TX''mXT''}T1TTTT111TTTT'mmm}vmvppgp>2>g4wwwwwwwww<<<$w4h49ww:2g4jj<94z~VVYVVtYYYYYYY* ", " y;555@55xx5x55555nn5nxxxxmSx']]1]1]]1]1n1dddddddddd11TT'''T'T''TXv}}}}mXm}'m}mXXmTmvvpvp{pg>2h4ww4wjjwgg24444wjO$$N::,:::,,ziiiR~~~~Z~ZZffffVVffZfffff~~~Rz:lz_~~~fZVVVVVZ~~~~_iR~~~_iW$jg2>gh224wwwEwwj<$w<$Wwhh4hww9h4g>p222424w<$lN,:zzzzzzi__i~ZZ~ZfZZfVfVfVZZVZfffVVfZ~~i:::iZZ~~VVVVVVZ~uRR_,z~fZ_i::j9ww4g{g{C42>2g{mv4z~VVV~VVtYYYYY6 ", " ~@S@5x5@x5x55x55555xxxxXv3v{vXXXXmmTL11ddddddddddd8d11TT'T''T'''TXXppp}XXv}}m}vvvv}vCC>2gh444www$w444994wwh4wwWwO$E$$$O$$l$O$:K$$$$$$$$$$$$EwwWWW2h4wwww$$E$$$$$l$$$$$,$lll$:$$$$$$$wwWW$2h4h4h4jwwWWw$Mhhhhhjj>>>Cv1dd11m34N_ziRzz:,:ll$l$:4gv}9lI$l:NziR~~iii~~R:>vX''v{2WN___i_iiizizzz:NW9{Cj$zzN$w:i~~Z~R~u~~:<>2h929>>{vXX{gh<,z_____iz_iiiiz,Wwg{w$:zKK9j2g994j4>vvXXvC9<$i_~i_i_zzi__z,NWwgCj$zzN$wjjzZZuiZ~_i,<9h9li~Rzjww2><99F:~~ilF::)RuciZ* ", " /@5555555;;n;k%k=;;====%%%%%%%%%AeeeeeAk%%k%k%k%kAAAA%%%%%%%AAAAe%%%%%===UooU;11T'15mmvm}mm}v{{C>gh>42h4wwwhwwlOI::)zRRRRRRPizz:)z::IIIIIr:O7|^^O^^O^^2j>2w<,:$<<<$l$lO<{X'{{Cj<<2ghhww<<$ll:$$$$w$<h22hjjjh4wwwwwww9jw$:,zzNNlj9g9$zzzz,z,,zz,z,,,:iR~VVtVVVVVZZZ~_RRiiR~~~zz:Il<ww<<$$:::::ljjj29<:zz_iiizzllII::F4>pCvppvg>24wwj<<<$<<$$l:lO$$4jjhh2>>2jw:zi_zi_,:lI:II:O<$<>pCCvvpg>94wwj<<<<4jjjh2>>29<:,_z__zzzFllI:l$F<<99jjj9j9jC{v'T}C24h4hhbhhh^j99wjwwwOllIz:zii_zz$$l:::::zl::RRRRRRRRiRRRR~~~~uuuZZui)IF|hjj&<h4h2hhhhCgh99w<$2M3X'mGg22www:IIlhgh4jj<<<hwwO<hwwjhj&B&j!jjjhhMgMvvXm']11]ms{gj$:::l$$llIIl:IllIIIrrIII:,P:y77yyyyO7O7IlFFr:PiQcQR)IFFI)r))#)cc00q0000Rqu0qQcR0c7cryuqqRr", "=kn;=kk;AkAAA%%%%%kko===o8Ud1T'1m}vC{{C{gCCgMMg{pXm111''mXv}Xvv{vvv''T111]XXv{vv{pCgh22ww<$jjwh4hw<<$l$lN$$l$:$wlFFllI$l$$l:$K:Il24whhh22{vXm'''x1111Tmv{{vCC2gv{Xm}''T''m}vvv{g2h44jhC{[s{{vXmmXXv{vXX']11X{gjjll:::z:N,::II::IlIIP:rIII::r:rlII7y7O7yO77O7y))y#))#)77yycQ)Q)##u0qQQQ0uQQQPrI7iQ:2h2v'X''x''11111mX}{vCC2g{vvvX'T'T1'1''mvCgghh4hjjwj4hjjj<$l$l<<2h9942Cvv{{51nxm@v5m5'1111T}mmX{vvpvX'5111n;;=Un1mvpvv{gghgMghhjhOl$O<<>h4j92CXv{{51xxm@{mmmT111''m'}'p{v3{X']111;;;=;;1XXvv{vChhggghhjj<$l$<294j42CXv({mn1xmvv15mxD11'T'mmmvv{vvXX1511;;;=;;1'vvv{{p2hhMghhjjl44wwW92CCC3vXmm'v32>99wj<<>ppgg49w22gCgC33vvX{C9jWw<$l$ll$zzziii~iRRiRiRizPIIrIr::::F<:PRRQcRRRRRilF<jj<<<<<:PRRiPRRRRRQIF<wwwwww9j2g[{3X'11L]L1;dL]1]T'T1L11LLJ1dJJ]']L]1L]'X'Gv>wPPRRRPRRRRuilFjjII|OyQRiR0", "=nU=;n1555@(5m51]1mXv{v{mv@@@@@M(((ssG@Gvm1k%%%==11dk%AAAAAAeA%AAAAe%AAA%A%A%%kk=oo8d1111111xXvv{CCC{{C{pgg22hww44gvX''XXv{g2w<ghliR~uRiiiRQR)P:::P)F4jw944{vXvvpC>9w<$lOOl:lzzz,ziz:z:z:,,,:::Pziiiz:P):):OO^&hB{3{CggM2222G'LL]'''''G33XX'''Xv{g2>gggXX']DJL]LS'LD]XCg222ghI_~u~~RiPii:IIPP,:POjlQ#RQ<", "~=U=UUUo155mmm']5mvpgCg{g{M{MssssssGGS]]']JUo==;U88ookk%%AAAAAA%%%A%%k%%%%%%k=ooo888111T'1m'vvp>h2g24p{CCg>>>44h9h4gCC>>g9wgh2>gpCCCg>g>>49999gC3C>24w<g3mDJJLSm''''C29wh2g9:_VZV~~uz:IFjF,P::r7j7c#RR ", "*U==UU==;xmmm]mxmmvCggMgggg{sv@@mmmmm]1]]]1;UUU;;d;UU=k%kA%AA%%k=%%%k=kkk%k%k=UUd8d11T'm'x'vv{g>h224gpCCCg>2>24h99hggg2>hww$l:II::::zziRRiRi)P)PrPP):r:r:):ll>CCCgg2g2>229999jjwW$l::z)iPPiPPPzRi)RiRRP:IrI)))I7|7Irjj9hB!<$O7^jj2vGGMg&jjh2M3333vCg2999hj92gg99jjll,P::F>CC{g2g2222>9999jjwW$lI,i)PPPPicPiiRQRRRRP:::r):):7777:jj9hBjgC{g>CC}ndd1JJ1ddd8d1''Xm{X'm''T'11ndnnU;n]v3v{v'T111no;Ud111'''vvvpgh4jjwwjwhhvvvvvvChwwjjh99wwO$IIz:z,zRRRRiPP:):PzP:rr7||7II7|7O77||||^hhB&h^jjjhMv{{gMBBh>9CCgggpv''m']]L'']1L''Xmp3{}vvXmm1]111d;;J'v{CpCv'T111n11111TT1Tmmv{C22jj<<|wjg{}XX'v{C9wCggggM{{X{{C{v{vvvvmXvv{C{vvvv{vXm'TxLJn]Xv{>C{vT111TmmXXX''111''mvC24jj<$$C>gggg{vvvvpC3v3vXpv}v3CC{{{vpv{XX'L]]JD1mv3>gCv''111X'''m''11Tx'mv{h>jggCC{{{{{{{{vv3vvpCggp{p{pCvvXXT''JD]mvv>C{X'11'1XXX'X''1111'mvCghhj>422222Mggg99hggg>2g{{33vmm'm}v{{CCmx11x''XXXXvX1dU81'v{ggg2gg>h<>g>>wO$OO<<>>2w<$$jhhBBhh!<h42g9jC{vvGX''G{h9hjjj9hjjj<<hMBC{{ChjF<92M{M922g{CMgggggv{2gg{GB|rQqtY ", " {1([({Cghjhbb[bB&&j[[[{{([M{{[(((ssm@@51xxm5]Jn;UnL]nn;;=U;UU==;==%k==;nDxxmmmx555vm(@(ssss@Gs5]n1m1DJS'vX'1dd]SSSDnJ]mm333mS1n;8Uoo;811LL1LL]]L]''s@G']1DDL]SS{{({svG@vvG'Ldd8;=;=U;JLL]11]'mD11]L'GvXX3GG3GSXL]SG3SX3C2>h9hMggG3MM2>2MvC2CC{sB|rQttt ", " 61mg{v{Mh^hhbbb&&&&b[[({[[Ms{((((sv@@5]xxx'm]1n;U81]J;;U;=;=;U=;=k%k=;;n]S]SSm]5m5@s(((GssssGsxx;J]]1J]'X''Jn8xSmSSJD]GG333']J;Uo==oU8dJLJJLL]]L''mv{s']dJJL]SSsssGGX'S'X']LJddn=;UU81LL]1]''X11D]T'X{vXv{s3G]XL]'G3'33CBh&99MCC{MC2299M3ChMMBB&|rQtt* ", " /m]{{v{ghj&b&&&&&^j&[{{(s({vs(((@@@vmmmxx]xxDD;;U;JJnn;;;;;UU=;=;====;;nDxxxm5m@5@X@sGs@mS@@GG]JnJDdnUnJ'''D1d]S@SD;nJxSXXG']D;UU==oUUJL]LL''m]]L''GmG]LJJDL]DDm'mS]JJJLD]JJdd8;UU;nn1]]]'m''m'''mXXv3C3{33XXS]]]G33G33g92gv'}']11]11Uooo=====oo8ddd8UkkAAA%AA%AeAAAAAAAAAAA%AA%%AAAAAeAA%Akk=kk%%%%%%%AA%A%%%%kk=U;;nU;UdDJ'XX33{C{333C{2g2gggv333GDn;UUUJ]XvCg2949hjhhhB2CMC{C{{sCgBjjF2>2>3v333]nUUUUJLXvg22wwWjjwjjBh>MgMMgMg22j9{3333]DU=UUJ]X3C29ww9jgGGXGGLJJnnJLS3MBh>jj99wjjj92222922gG''XX]LdLL]''Mgh<2gCXXSSXL]L]SSGXghjM2922gXXGGGC33vssg2222MCsGCC333C{MM&hF<7:PPcPRQccccPcIIPccPPPcc))ccc))yy)#RQQQQ)#y##))Q##c)###0000####0#Q###yy77|^jj&bBh&||7rrOB&7Q0y77qY ", " /bb&B&^jhCCCg3]']}vvC{X'mmT'x11dUUUU===oU8JL]]G333XX]LDL]]LDJ;k==UU8nLDL;nxDn;;;JJDJdJd]]ss[{(sGsG33333GsC{C92BBB222ggg{[gCC33Cggh&&CvmX{{CgCv1oU;JJ;=o88dLS'33333X]]DLD]LDJn=k=U88nL]];nDDn;;;JDJJJdd]Sss{[{ssG@33G333{CCC22BhB>22MMC{{MC333{MMBh&29jjjjhBB|<<||||7)cQcQcQQ##yy7|^|&&BM[GSSSSSSSsB|!(r ", " bb!!!!!!!b!!!bbb((G([[(@(@@xDn;;nnnnDDDDnDnDDn;k%%AAA%A%%%%%%k%k%kk%k%%k%%%%k%%%%k%%%%%%AAA%%%k;k;=DLXX3ssM22jjj2hBM22>2292jjjjjj<jjj c #5A3228", ", c #5A3732", "< c #4C332B", "1 c #62372B", "2 c #633933", "3 c #703F37", "4 c #421F24", "5 c #5A4238", "6 c #644539", "7 c #5C4842", "8 c #5F4F4F", "9 c #634C43", "0 c #685248", "q c #6E5A53", "w c #7B6963", "e c #7A6D6C", "r c #766159", "t c #5B3D41", "y c #816D65", "u c #8A7973", "i c #87746C", "p c #83695A", "a c #808080", "s c #988983", "d c #969190", "f c #A59893", "g c #A2948E", "h c #AFA49F", "j c #AAA3A1", "k c #B2A7A3", "l c #BCB4B1", "z c #BCB3AF", "x c #A69EA0", "c c #C1B7B3", "v c #CAC3BF", "b c #CBC4C2", "n c #D7D2CF", "m c #D9D4D2", "M c #D1C9C6", "N c #E5E1DF", "B c #E6E2E1", "V c #F2F0EF", "C c #FFFFFF", "Z c #F1EFEF", "A c #E2DFDF", "S c #C3BFC0", "D c #92817A", /* pixels */ "aaaaaaaaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa8aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa8aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa8aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa8aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa8aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa8aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa8aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa8aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa8aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa8aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa8aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa8aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa8aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa8aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa8aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa8aaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa8aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa8aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa8aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaaaaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa8aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa8aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa8aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa8aaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa8aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa8aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa8aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa8aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa8aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa8aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa8aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa8aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa8aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa8aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "aaaaaaaaaaa8aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa8aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaa8aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa8aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa8aaaaaaaaaaaaaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaxjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaZZnaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaMCCdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamZZZZxaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaxZCCCbaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadCCCCZCSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaMCCCCVZaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaanCCCCZVCVdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadBCCCCCCZSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadCCCCCCCCCZmaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadSZCCCCCCZZAaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabCCCCCCCCCZAAxaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaSZVZCCCCCCZZASaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaCCCCCCCCCCCCCCZleaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalZCCCCCCCCCCCCCCdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaanCCCCCCCCCCCCCCCCZlaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaajVCCCCCCCCCCCCCCCCSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadCCCCCCCCCCCCCCCCCCCZjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaajZCCCCCCCCCCCCCCCCCCCdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaSCCCCCCCCCCCCCCCCCCCCCZlaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaelZCCCCCCCCCCCCCCCCCCCCCbaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaaaaaaaaaa", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadCCCCCCCCCCCCCCCCCCCCCCCCVSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaSCCCCCCCCCCCCCCCCCCCCCCCCCdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaMCCCCCCCCCCCCCCCCCCCCCCCCCCCMxaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaxMCCCCCCCCCCCCCCCCCCCCCCCCCCCMaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCAlaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaajBCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCnjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaajnCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCMaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadVCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCZSdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadSZCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaMCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCZbdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadbZCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCMaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCZSjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaajSZCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa8aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCZmjdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadjnCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCMaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadCCCCCCCCCCCCCCCCCCCmBCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCBbjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaajbZCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCAACCCCCCCCCCCCCCCCCCCdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaMCCCCCCCCCCCCCCCCCCCdadnZCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCAMjdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadjSBCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCZndadCCCCCCCCCCCCCCCCCCCSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadCCCCCCCCCCCCCCCCCCCnaaaaalmCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCZbldaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadSMBCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCmlaaaaaSCCCCCCCCCCCCCCCCCCVdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaSCCCCCCCCCCCCCCCCCCCdaaaaaaaalACCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCBMSdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaxlnAVCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCAlaaaaaaaadCCCCCCCCCCCCCCCCCCCnaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadCCCCCCCCCCCCCCCCCCCbaaaaaaaaaaadSBVCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCZmSldaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaxjSAZCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCAldaaaaaaaaaaanVCCCCCCCCCCCCCCCCCCdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaMCCCCCCCCCCCCCCCCCCCdaaaaaaaaaaaaaadlmCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCVAnSjxaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadjSMAVCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCnldaaaaaaaaaaaaaadVCCCCCCCCCCCCCCCCCCbaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadCCCCCCCCCCCCCCCCCCCMaaaaaaaaaaaaaaaaaaajMZCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCAAmSSjxdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaxdjSSnAZCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCVnjaaaaaaaaaaaaaaaaaaanCCCCCCCCCCCCCCCCCCCdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabCCCCCCCCCCCCCCCCCCCdaaaaaaaaaaaaaaaaaaaaaadSACCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCZmAAmSSSdaaaaaaaaaaaaaaaaaaxSSSmAmAZCVCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCmSdaaaaaaaaaaaaaaaaaaaaaadCCCCCCCCCCCCCCCCCCCSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadVCCCCCCCCCCCCCCCCCCbaaaaaaaaaaaaaaaaaaaaaaaaaaajMACCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCVCCCCCSaaaaaaaaaaaaaaaaaaSVVCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCBbjaaaaaaaaaaaaaaaaaaaaaaaaaaaMCCCCCCCCCCCCCCCCCCCdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaMCCCCCCCCCCCCCCCCCCCdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaajSmCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCSaaaaaaaaaaaaaaaaaaSCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCmSjdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadCCCCCCCCCCCCCCCCCCCbaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadCCCCCCCCCCCCCCCCCCCMaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaxlmZCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCClaaaaaaaaaaaaaaaaaaSCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCZmljaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaMCCCCCCCCCCCCCCCCCCCdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaSCCCCCCCCCCCCCCCCCCVdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaxSmBCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCVSaaaaaaaaaaaaaaaaaaSCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCZmSxaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadCCCCCCCCCCCCCCCCCCCMaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadCCCCCCCCCCCCCCCCCCCMaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadSSACCCCVCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCSaaaaaaaaaaaaaaaaaaSVCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCVASlxaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaSCCCCCCCCCCCCCCCCCCCdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaMCCCCCCCCCCCCCCCCCCCdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaajjSmACCCCCCCCCCCCCCCCCCCCCCCCCCCCCCSaaaaaaaaaaaaaaaaaaSCCCCCCCCCCCCCCCCCCCCCCCCCCCCCVAmSjxaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadCCCCCCCCCCCCCCCCCCCSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadCCCCCCCCCCCCCCCCCCCMaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaxjSbmACCCCCCCCCCCCCCCCCCCCCCSaaaaaaaaaaaaaaaaaaSCCCCCCCCCCCCCCCCCCCCCCAASSjddaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaanCCCCCCCCCCCCCCCCCCCdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaanCCCCCCCCCCCCCCCCCCCdaaaaaaaaaaaaaaaaaaaSSdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadxdSSSAmABCCCVCCCCCVSaaaaaaaaaaaaaaaaaaSCVCCCCCCCCZmAASSSxddaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadSlaaaaaaaaaaaaaaaaaaadCCCCCCCCCCCCCCCCCCCbaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadCCCCCCCCCCCCCCCCCCCbaaaaaaaaaaaaaaaaaaaaZCCZmldaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaxxxxdlxaaaaaaaaaaaaaaaaaaxlxjdxxaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadlmVCCZaaaaaaaaaaaaaaaaaaaaMCCCCCCCCCCCCCCCCCCCdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaMCCCCCCCCCCCCCCCCCCCdaaaaaaaaaaaaaaaaaaaSCCCCCCCCASxaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaddSmCCCCCCCCSaaaaaaaaaaaaaaaaaaadCCCCCCCCCCCCCCCCCCCSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadCCCCCCCCCCCCCCCCCCCnaaaaaaaaaaaaaaaaaaaaVCCCCCCCCVCCCBnldaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadlMACCCCCCCCCCCCVaaaaaaaaaaaaaaaaaaaabCCCCCCCCCCCCCCCCCCCdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabCCCCCCCCCCCCCCCCCCCaaaaaaaaaaaaaaaaaaaaSCCCCCCCCCCCCCCCCCCASlxaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadSMmCCCCCCCCCCCCCCCCCCSaaaaaaaaaaaaaaaaaaadCCCCCCCCCCCCCCCCCCVMaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadCCCCCCCCCCCCCCCCCCCMaaaaaaaaaaaaaaaaaaaaVCCCCCCCCCCCCCCCCCCCCCCCAmSjdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadjSmACCCCCCCCCCCCCCCCCCCCCCCCaaaaaaaaaaaaaaaaaaaanCCCCCCCCCCCCCCCCCCCdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaanCCCCCCCCCCCCCCCCCCCaaaaaaaaaaaaaaaaaaaabCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCAASlxaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaxjSAACCCCCCCCCCCCCCCCCCCCCCCCCCCCCCSaaaaaaaaaaaaaaaaaaadCCCCCCCCCCCCCCCCCCCMaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaCCCCCCCCCCCCCCCCCCCnaaaaaaaaaaaaaaaaaaaaCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCmASSdxaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaxdSSAmCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCaaaaaaaaaaaaaaaaaaaaSCCCCCCCCCCCCCCCCCCCdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaaaaaaaaaaaaaaaaaaaaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamVCCCCCCCCCCCCCCCCCCdaaaaaaaaaaaaaaaaaaaSCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCBAnSSjjdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaaaaaaaaaaaaaaaaaaaajdjSSmAACCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCSaaaaaaaaaaaaaaaaaaadCCCCCCCCCCCCCCCCCCCMaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadCCCCCCCCCCCCCCCCCCCMaaaaaaaaaaaaaaaaaaaaVCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCAAAnSSSSdjdjxdaaaaaaaaaaaaaaaaaaaaaaaaddxxxdSSSSmmAACCCCCCVCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCVaaaaaaaaaaaaaaaaaaaaMCCCCCCCCCCCCCCCCCCCdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaMCCCCCCCCCCCCCCCCCCCdaaaaaaaaaaaaaaaaaaabCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCVCCCCCCCCCCCCVSaaaaaaaaaaaaaaaaaaSCCCCCVCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCSaaaaaaaaaaaaaaaaaaadCCCCCCCCCCCCCCCCCCCnaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadCCCCCCCCCCCCCCCCCCCMaaaaaaaaaaaaaaaaaaaaCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCSaaaaaaaaaaaaaaaaaaSCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCaaaaaaaaaaaaaaaaaaaabCCCCCCCCCCCCCCCCCCVaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabCCCCCCCCCCCCCCCCCCCdaaaaaaaaaaaaaaaaaaaSCCCCCCCCCCCCCCCCCCCCVCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCSaaaaaaaaaaaaaaaaaaSCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCSaaaaaaaaaaaaaaaaaaadCCCCCCCCCCCCCCCCCCCnaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaaaaaa", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadCCCCCCCCCCCCCCCCCCCMaaaaaaaaaaaaaaaaaaaaCCCCCCCCCCCCCCCCCCCBxSSAVCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCSaaaaaaaaaaaaaaaaaaSCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCVmSlxBCCCCCCCCCCCCCCCCCCVaaaaaaaaaaaaaaaaaaaaMCCCCCCCCCCCCCCCCCCCdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaanCCCCCCCCCCCCCCCCCCVdaaaaaaaaaaaaaaaaaaaSCCCCCCCCCCCCCCCCCCClaaaaaddlSABCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCSaaaaaaaaaaaaaaaaaaSCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCASljaaaaaalCCCCCCCCCCCCCCCCCCCbaaaaaaaaaaaaaaaaaaadCCCCCCCCCCCCCCCCCCCbaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadCCCCCCCCCCCCCCCCCCCSaaaaaaaaaaaaaaaaaaaaCCCCCCCCCCCCCCCCCCCZaaaaaaaaaaaaaxjSMmZCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCSaaaaaaaaaaaaaaaaaaSVCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCZASSjdaaaaaaaaaaaaaZCCCCCCCCCCCCCCCCCCCaaaaaaaaaaaaaaaaaaaaSCCCCCCCCCCCCCCCCCCCdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaMCCCCCCCCCCCCCCCCCCCdaaaaaaaaaaaaaaaaaaaSCCCCCCCCCCCCCCCCCCCjaaaaaaaaaaaaaaaaaaaadxjSSAACCCCCCCVCCCCCCCCCCCCCCCCCCCCCCSaaaeaaaaaaaaaaaaaaSCCCCCCCCCCCCCCCCCCCCCVCCCCCCCCmAMSjxdaaaaaaaaaaaaaaaaaaaalCCCCCCCCCCCCCCCCCCCSaaaaaaaaaaaaaaaaaaadCCCCCCCCCCCCCCCCCCCMaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaCCCCCCCCCCCCCCCCCCCMaaaaaaaaaaaaaaaaaaaaVCCCCCCCCCCCCCCCCCCZaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadddSSSmAACCCCCCCCCCCCCCCCCCVSaaaaaaaaaaaaaaaaaaSCCCCCCCCCCCCCCCCCCZAAASSSdxdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaZCCCCCCCCCCCCCCCCCCVaaaaaaaaaaaaaaaaaaaanVCCCCCCCCCCCCCCCCCCdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaSCCCCCCCCCCCCCCCCCCCdaaaaaaaaaaaaaaaaaaaSCCCCCCCCCCCCCCCCCCCjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaSCCCCCCCCCCCCCCCCCZSaaaaaaaaaaaaaaaaaaSCCCCCCCCCCCCCCCCCCSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalCCCCCCCCCCCCCCCCCCCSaaaaaaaaaaaaaaaaaaadCCCCCCCCCCCCCCCCCCCSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaACCCCCCCCCCCCCCCCCCbaaaaaaaaaaaaaaaaaaaaCCCCCCCCCCCCCCCCCCCZaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaSCCCCCCCCCCCCCCCCCCSaaaaaaaaaaaaaaaaaaSCCCCCCCCCCCCCCCCCCSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaZCCCCCCCCCCCCCCCCCCCaaaaaaaaaaaaaaaaaaaaSCCCCCCCCCCCCCCCCCCCdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamACCCCCCCCCCCCCCCCCCdaaaaaaaaaaaaaaaaaaaSCCCCCCCCCCCCCCCCCCClaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaSCCCCCCCCCCCCCCCCCCSaaaaaaaaaaaaaaaaaaSCCCCCCCCCCCCCCCCCCSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaajCCCCCCCCCCCCCCCCCCCSaaaaaaaaaaaaaaaaaaadCCCCCCCCCCCCCCCCCCCMaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadZZCCCCCCCCCCCCCCCCCMaaaaaaaaaaaaaaaaaaaaCCCCCCCCCCCCCCCCCCCZaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaSCCCCCCCCCCCCCCCCCCSaaaaaaaaaaaaaaaaaaSCCCCCCCCCCCCCCCCCCSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaZCCCCCCCCCCCCCCCCCCVaaaaaaaaaaaaaaaaaaaaMCCCCCCCCCCCCCCCCCCCdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaSZZCCCCCCCCCCCCCCCCCdaaaaaaaaaaaaaaaaaaaSCCCCCCCCCCCCCCCCCCCjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaSCCCCCCCCCCCCCCCCCCSaaaaaaaaaaaaaaaaaaSCCCCCCCCCCCCCCCCCCSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalVCCCCCCCCCCCCCCCCCCbaaaaaaaaaaaaaaaaaaadCCCCCCCCCCCCCCCCCCCbaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaa8aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadCZZCCCCCCCCCCCCCCCCMaaaaaaaaaaaaaaaaaaaaCCCCCCCCCCCCCCCCCCCZaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaSCCCCCCCCCCCCCCCCCCSaaaaaaaaaaaaaaaaaaSCCCCCCCCCCCCCCCCCCSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaVCCCCCCCCCCCCCCCCCCCaaaaaaaaaaaaaaaaaaaaMCCCCCCCCCCCCCCCCCCCdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaSCVZCCCCCCCCCCCCCCCCdaaaaaaaaaaaaaaaaaaaSCCCCCCCCCCCCCCCCCCCjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaSCCCCCCCCCCCCCCCCCCSaaaaaaaaaaaaaaaaaaSCCCCCCCCCCCCCCCCCCSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaajCCCCCCCCCCCCCCCCCCCSaaaaaaaaaaaaaaaaaaadCCCCCCCCCCCCCCCCCCCbaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadCCCCCCCCCCCCCCCCCCCMaaaaaaaaaaaaaaaaaaaaCCCCCCCCCCCCCCCCCCCZaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaSCCCCCCCCCCCCCCCCCCSaaaaaaaaaaaaaaaaaaSVCCCCCCCCCCCCCCCCCSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaZCCCCCCCCCCCCCCCCCCVaaaaaaaaaaaaaaaaaaaaMCCCCCCCCCCCCCCCCCCCdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaMCCCCCCCCCCCCCCCCCCCdaaaaaaaaaaaaaaaaaaalCCCCCCCCCCCCCCCCCCCjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaSCCCCCCCCCCCCCCCCCCSaaaaaaaaaaaaaaaaaaSCCCCCCCCCCCCCCCCCCSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalCCCCCCCCCCCCCCCCCCCbaaaaaaaaaaaaaaaaaaadCCCCCCCCCCCCCCCCCCCmaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadCCCCCCCCCCCCCCCCCCCMaaaaaaaaaaaaaaaaaaaaCCCCCCCCCCCCCCCCCCCZaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaSCCCCCCCCCCCCCCCCCCSaaaaaaaaaaaaaaaaaaSCCCCCCCCCCCCCCCCCCSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeZCCCCCCCCCCCCCCCCCCCaaaaaaaaaaaaaaaaaaaaSCCCCCCCCCCCCCCCCVVZdaaaaaaaaaaaaaaaaaaaaaaaaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalACCCCCCCCCCCCCCCCCCdaaaaaaaaaaaaaaaaaaaSCCCCCCCCCCCCCCCCCCClaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaSCCCCCCCCCCCCCCCCCCSaaaaaaaaaaaaaaaaaaSCCCCCCCCCCCCCCCCCVSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalCCCCCCCCCCCCCCCCCCCSaaaaaaaaaaaaaaaaaaadCCCCCCCCCCCCCCCCCZZSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaxjSSAACCCCCCCCVnaaaaaaaaaaaaaaaaaaaaVCCCCCCCCCCCCCCCCCCBaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaSCCCCCCCCCCCCCCCCCCSaaaaaaaaaaaaaaaaaaSVCCCCCCCCCCCCCCCCCSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaZVCCCCCCCCCCCCCCCCCVdaaaaaaaaaaaaaaaaaaaMCCCCCCCCCCZAnlxxaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaajjSSAACaaaaaaaaaaaaaaaaaaaaSCCCCCCCCCCCCCCCCCCClaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaSCCCCCCCCCCCCCCCCCCSaaaaaaaaaaaaaaaaaalCCCCCCCCCCCCCCCCCCSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalVCCCCCCCCCCCCCCCCCCSaaaaaaaaaaaaaaaaaaadCCAASSjxaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaCCCCCCCCCCCCCCCCCCCZaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaSCCCCCCCCCCCCCCCCCCSaaaaaaaaaaaaaaaaaaSCCCCCCCCCCCCCCCCCCSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaZCCCCCCCCCCCCCCCCCCVaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaSCCCCCCCCCCCCCCCCCCCjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaSCCCCCCCCCCCCCCCCCCSaaaaaaaaaaaaaaaaaaSCCCCCCCCCCCCCCCCCCSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaajCCCCCCCCCCCCCCCCCCVSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalbAACCCCCCCCCCCCCCCZaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaSZVCCCCCCCCCCCCCCCCSaaaaaaaaaaaaaaaaaaSCCCCCCCCCCCCCCCCCCSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaBCCCCCCCCCCCCCCCZAmjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaxjSMAZCCCCCVCjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaSCVCCCCCCCCCCCCCCCCSaaaaaaaaaaaaaaaaaaSCCCCCCCCCCCCCCCCCCSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalCCCCCCCZmnSlddaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaxjSSnaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaSCCCCCCCCCCCCCCCCCCSaaaaaaaaaaaaaaaaaaSVCCCCCCCCCCCCCCCCCSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaambSjxdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaSCCCCCCCCCCCCCCCCCCSaaaaaaaaaaaaaaaaaaSCCCCCCCCCCCCCCCCCCSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadCCZAnSlddaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaSCCCCCCCCCCCCCCCCCVSaaaaaaaaaaaaaaaaaaSCCCCCCCCCCCCCCCCCCSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadxllMAZCdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaMCCCCCCCCCCVmASSddaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaSCCCCCCCCCCCCCCCCCZSaaaaaaaaaaaaaaaaaaSCCCCCCCCCCCCCCCCCCSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadxlSmAZCCCCCCCCCbaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadCCCCCCCCCCCCCCCCCCCMaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaSCCCCCCCCCCCCCCCCCCSaaaaaaaaaaaaaaaaaaSCCCCCCCCCCCCCCCCCCSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalVCCCCCCCCCCCCCCCCCCdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabCCCCCCCCCCCCCCCCCCCdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaSCCCCCCCCCCCCCCCCCCSaaaaaaaaaaaaaaaaaaSCCCCCCCCCCCCCCCCCVSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadCCCCCCCCCCCCCCCCCCCMaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadZVCCCCCCCCCCCCCCCCVnaaaaaaaaaaaaaaaaaaadlxdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalCCCCCCCCCCCCCCCCCCSaaaaaaaaaaaaaaaaaaSVCCCCCCCCCCCCCCCCZjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaajdaaaaaaaaaaaaaaaaaaaabCCCCCCCCCCCCCCCCCCCdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamCCCCCCCCCCCCCCCCCCCdaaaaaaaaaaaaaaaaaaaSCCCCVAnSSddaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaxjSSAACCCCCCCCCCSaaaaaaaaaaaaaaaaaaSCCCVCCCCCAASSjddaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaddjSMAACCCCSaaaaaaaaaaaaaaaaaaadCCCCCCCCCCCCCCCCCCCSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaVCCCCCCCCCCCCCCCCCCSaaaaaaaaaaaaaaaaaaaaZCCCCCCCCCCCCZAmSSddaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaaaaaaaaaaaaaaaaaaaaaaaaaxjSSmBCClaaaaaaaaaaaaaaaaaaSCAASSxxaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadxjSMmZVCCCCCCCCCCCCaaaaaaaaaaaaaaaaaaaaMCCCCCCCCCCCCCCCCCCCdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamZCCCCCCCCCCCCCCCCCCdaaaaaaaaaaaaaaaaaaaSCCCCCCCCCCCCCCCCCCCjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaajCCCCCCCCCCCCCCCCCCCSaaaaaaaaaaaaaaaaaaadCCCCCCCCCCCCCCCCCCCMaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadCCCCCCCCCCCCCCCCCCCbaaaaaaaaaaaaaaaaaaaaCCCCCCCCCCCCCCCCCCCZaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaZCCCCCCCCCCCCCCCCCCVaaaaaaaaaaaaaaaaaaaanVCCCCCCCCCCCCCCCCCCdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaMCCCCCCCCCCCCCCCCCCCdaaaaaaaaaaaaaaaaaaaSCCCCCCCCCCCCCCCCCCCjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalVCCCCCCCCCCCCCCCCCCbaaaaaaaaaaaaaaaaaaadCCCCCCCCCCCCCCCCCCCSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadCCCCCCCCCCCCCCCCCCCMaaaaaaaaaaaaaaaaaaaaZCCCCCCCCCCCCCCCCCCZaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaZCCCCCCCCCCCCCCCCCCCaaaaaaaaaaaaaaaaaaaamCCCCCCCCCCCCCCCCCCCdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaanCCCCCCCCCCCCCCCCCCCdaaaaaaaaaaaaaaaaaaaSCCCCCCCCCCCCCCCCCCCjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaajCCCCCCCCCCCCCCCCCCCSaaaaaaaaaaaaaaaaaaaaCCCCCCCCCCCCCCCCCCCMaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadCCCCCCCCCCCCCCCCCCCbaaaaaaaaaaaaaaaaaaaaCCCCCCCCCCCCCCCCCCCZaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaZCCCCCCCCCCCCCCCCCCVaaaaaaaaaaaaaaaaaaaabCCCCCCCCCCCCCCCCCCCdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamCCCCCCCCCCCCCCCCCCCdaaaaaaaaaaaaaaaaaaaSCCCCCCCCCCCCCCCCCCCjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadlddaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadxlSdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalCCCCCCCCCCCCCCCCCCCbaaaaaaaaaaaaaaaaaaadCCCCCCCCCCCCCCCCCCCSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaZCCCCCCCCCCCCCCCCCCnaaaaaaaaaaaaaaaaaaaaVCCCCCCCCCCCCCCCCCCZaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaSCCCCVAmSSddaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadjlSmAVCCCCCSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeZCCCCCCCCCCCCCCCCCCCaaaaaaaaaaaaaaaaaaaaSCCCCCCCCCCCCCCCCCCCdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaSZCCCCCCCCCCCCCCCCCCaaaaaaaaaaaaaaaaaaaaSCCCCCCCCCCCCCCCCCCClaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaSCCCCCCCCCCCVZAnSSjdaaaaaaaaaaaaaaaaaadSSAmCCCCCCCCCCCCCCSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalCCCCCCCCCCCCCCCCCCCSaaaaaaaaaaaaaaaaaaadCCCCCCCCCCCCCCCCCCCMaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadCCCCCCCCCCCCCCCCCCCMaaaaaaaaaaaaaaaaaaaaVCCCCCCCCCCCCCCCCCCZaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaSCCCCCCCCCCCCCCCCCCSaaaaaaaaaaaaaaaaaaSCCCCCCCCCCCCCCCCCCSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaBCCCCCCCCCCCCCCCCCCCaaaaaaaaaaaaaaaaaaaaMCCCCCCCCCCCCCCCCCCCdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabCCCCCCCCCCCCCCCCCCVdaaaaaaaaaaaaaaaaaaaSCCCCCCCCCCCCCCCCCCVlaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaSCCCCCCCCCCCCCCCCCCSaaaaaaaaaaaaaaaaaaSCCCCCCCCCCCCCCCCCCSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaajCCCCCCCCCCCCCCCCCCCSaaaaaaaaaaaaaaaaaaadCCCCCCCCCCCCCCCCCCCSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadCCCCCCCCCCCCCCCCCCCMaaaaaaaaaaaaaaaaaaadCCCCCCCCCCCCCCCCCCCZaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaSCCCCCCCCCCCCCCCCCCSaaaaaaaaaaaaaaaaaaSZCCCCCCCCCCCCCCCCCSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaZCCCCCCCCCCCCCCCCCCCaaaaaaaaaaaaaaaaaaaaSCCCCCCCCCCCCCCCCCCCdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaMCCCCCCCCCCCCCCCCCCCdaaaaaaaaaaaaaaaaaaalCCCCCCCCCCCCCCCCCCClaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaSCCCCCCCCCCCCCCCCCCSaaaaaaaaaaaaaaaaaaSVCCCCCCCCCCCCCCCCCSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalCCCCCCCCCCCCCCCCCCCbaaaaaaaaaaaaaaaaaaadCCCCCCCCCCCCCCCCCCVnaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadCCCCCCCCCCCCCCCCCCCMaaaaaaaaaaaaaaaaaaaaVCCCCCCCCCCCCCCCCCCZaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaSVVCCCCCCCCCCCCCCCCSaaaaaaaaaaaaaaaaaaSCCCCCCCCCCCCCCCCCCSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaZCCCCCCCCCCCCCCCCCCVaaaaaaaaaaaaaaaaaaaaMCCCCCCCCCCCCCCCCCCCdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaaaaaaaaaaaaaaaaaaaaaaaaSCCCCCCCCCCCCCCCCCCCdaaaaaaaaaaaaaaaaaaabCCCCCCCCCCCCCCCCCCClaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaSCCCCCCCCCCCCCCCCCVSaaaaaaaaaaaaaaaaaaSCCCCCCCCCCCCCCCCCCSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaajCCCCCCCCCCCCCCCCCCCSaaaaaaaaaaaaaaaaaaadCCCCCCCCCCCCCCCCCCCSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadVCCCCCCCCCCCCCCCCCCnaaaaaaaaaaaaaaaaaaaaCCCCCCCCCCCCCCCCCCCBaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaSCCCCCCCCCCCCCCCCCCSaaaaaaaaaaaaaaaaaaSCCCCCCCCCCCCCCCCCCSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaZCCCCCCCCCCCCCCCCCCCaaaaaaaaaaaaaaaaaaaabCCCCCCCCCCCCCCCCCCCdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaaaaaaa", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaMCCCCCCCCCCCCCCCCCCCdaaaaaaaaaaaaaaaaaaaSCCCCCCCCCCCCCCCCCCCMaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaSCCCCCCCCCCCCCCCCCCSaaaaaaaaaaaeaaaaaaSCCCCCCCCCCCCCCCCCCSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaelCCCCCCCCCCCCCCCCCCCMaaaaaaaaaaaaaaaaaaadCCCCCCCCCCCCCCCCCCCMaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadCCCCCCCCCCCCCCCCCCCbaaaaaaaaaaaaaaaaaaaaVCCCCCCCCCCCCCCCCCCCCZlaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaSCCCCCCCCCCCCCCCCCCSaaaaeaaaaaaaaaaaaaSCCCCCCCCCCCCCCCCCCSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaZVCCCCCCCCCCCCCCCCCVaaaaaaaaaaaaaaaaaaaanCCCCCCCCCCCCCCCCCCCdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaMCCCCCCCCCCCCCCCCCCCdaaaaaaaaaaaaaaaaaaaSCCCCCCCCCCCCCCCCCCCCCCCBxaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaSCCCCCCCCCCCCCCCCCCSaaaaaaaaaaaaaaaaaaSCCCCCCCCCCCCCCCCCCSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaajCCCCCCCCCCCCCCCCCCCSaaaaaaaaaaaaaaaaaaaaVCCCCCCCCCCCCCCCCCCbaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadCCCCCCCCCCCCCCCCCCCMaaaaaaaaaaaaaaaaaaaaxACCCCCCCCCCCCCCCCCCCCCCCCAdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaSCCCCCCCCCCCCCCCCCCSaaaaaaaaaaaaaaaaaaSVCCCCCCCCCCCCCCCZVSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaZCCCCCCCCCCCCCCCCCCVaaaaaaaaaaaaaaaaaaaanCCCCCCCCCCCCCCCCCCCdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaMCCCCCCCCCCCCCCCCCCCdaaaaaaaaaaaaaaaaaaaaaaxmCCCCCCCCCCCCCCCCCCCCCCCCAxaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaSCCCCCCCCCCCCCCCCCCSaaaaaaaaaaaaaaaaaaSCCCCCCCCCCCCCCCCZZSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalCCCCCCCCCCCCCCCCCCCSaaaaaaaaaaaaaaaaaaadCCCCCCCCCCCCCCCCCCCMaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadCCCCCCCCCCCCCCCCCCVmaaaaaaaaaaaaaaaaaaaaaaaaaxACCCCCCCCCCCCCCCCCCCCCCCCmdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaSCCCCCCCCCCCCCCCCCVSaaaaaaaaaaaaaaaaaaSCCCCCCCCCCCCCCCCCCSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaZVCCCCCCCCCCCCCCCCCZaaaaaaaaaaaaaaaaaaaaMCCCCCCCCCCCCCCCCCCCdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaanCCCCCCCCCCCCCCCCCCCaaaaaaaaaaaaaaaaaaaaaaaaaaaaxACCCCCCCCCCCCCCCCCCCCCCCCAdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaSCCCCCCCCCCCCCCCCCVSaaaaaaaaaaaaaaaaaaSCCCCCCCCCCCCCCCCCCSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaajCCCCCCCCCCCCCCCCCCCSaaaaaaaaaaaaaaaaaaadCCCCCCCCCCCCCCCCCCCSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaCCCCCCCCCCCCCCCCCCCnaaaaaaaaaaaaaaaaaaaaaaaaaaaaaajZCCCCCCCCCCCCCCCCCCCCCCCCmdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaSCCCCCCCCCCCCCCCCCCSaaaaaaaaaaaaaaaaaaSCCCCCCCCCCCCCCCCCCSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaZVCCCCCCCCCCCCCCCCCVaaaaaaaaaaaaaaaaaaaaMCCCCCCCCCCCCCCCCCCCdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaMCCCCCCCCCCCCCCCCCCCdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalBCCCCCCCCCCCCCCCCCCCCCCCCndaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaSCCCCCCCCCCCCCCCCCCSaaaaaaaaaaaaaaaaaaSCCCCCCCCCCCCCCCCCClaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalCCCCCCCCCCCCCCCCCCCSaaaaaaaaaaaaaaaaaaadCCCCCCCCCCCCCCCCCCCnaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaCCCCCCCCCCCCCCCCCCCbaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalZCCCCCCCCCCCCCCCCCCCCCCCCbdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaSZVCCCCCCCCCCCCCCCCSaaaaaaaaaaaaaaaaaaSCCCCCCCCCCCCCCCCCCSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaZCCCCCCCCCCCCCCCCCCZaaaaaaaaaaaaaaaaaaaaMVCCCCCCCCCCCCCCCCCCdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaanCCCCCCCCCCCCCCCCCCCdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaajZCCCCCCCCCCCCCCCCCCCCCCCCMdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaSCCCCCCCCCCCCCCCCCCSaaaaaaaaaaaaaaaaaaSCCCCCCCCCCCCCCCCCCSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaajCCCCCCCCCCCCCCCCCCCSaaaaaaaaaaaaaaaaaaadCCCCCCCCCCCCCCCCCCCbaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadCCCCCCCCCCCCCCCCCCCMaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalCCCCCCCCCCCCCCCCCCCCCCCCCMdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaSCCCCCCCCCCCCCCCCCCSaaaaaaaaaaaaaaaaaaSCCCCCCCCCCCCCCCCCCSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaZCCCCCCCCCCCCCCCCCCCaaaaaaaaaaaaaaaaaaaaSCCCCCCCCCCCCCCCCCCCdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabCCCCCCCCCCCCCCCCCCCdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaSVCCCCCCCCCCCCCCCCCCCCCCCCnaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaSCCCCCCCCCCCCCCCCCCSaaaaaaaaaaaaaaaaaaSCCCCCCCCCCCCCCCCCCSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaxmCCCCCCCCCCCCCCCCCCCSaaaaaaaaaaaaaaaaaaadCCCCCCCCCCCCCCCCCCCMaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaaaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadCCCCCCCCCCCCCCCCCCCnaaaaaaaaaaaaaaaaaaaaCMdaaaaaaaaaaaaaaaaaaaaadSCCCCCCCCCCCCCCCCCCCCCCCCVSdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaSCCCCCCCCCCCCCCCCCCSaaaaaaaaaaaaaaaaaaSVCCCCCCCCCCCCCCCCCSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalACCCCCCCCCCCCCCCCCCCCCVaaaaaaaaaaaaaaaaaaaabCCCCCCCCCCCCCCCCCCCdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaMCCCCCCCCCCCCCCCCCCCdaaaaaaaaaaaaaaaaaaaSCCCMdaaaaaaaaaaaaaaaaaaaaaaSVCCCCCCCCCCCCCCCCCCCCCCCZSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaSCCCCCCCCCCCCCCCCCCSaaaaaaaaaaaaaaaaaaSCCCCCCCCCCCCCCCCCCSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadSCCCCCCCCCCCCCCCCCCCCCCCCCbaaaaaaaaaaaaaaaaaaadCCCCCCCCCCCCCCCCCCCnaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadCCCCCCCCCCCCCCCCCCCMaaaaaaaaaaaaaaaaaaaaCCCCCCSdaaaaaaaaaaaaaaaaaaaaaaSVCCCCCCCCCCCCCCCCCCCCCCCVSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaSCCCCCCCCCCCCCCCCCCSaaaaaaaaaaaaaaaaaaSCCCCCCCCCCCCCCCCCCSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaajmCCCCCCCCCCCCCCCCCCCCCCCCCCCSaaaaaaaaaaaaaaaaaaaaSCCCCCCCCCCCCCCCCCCCdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaMCCCCCCCCCCCCCCCCCCCdaaaaaaaaaaaaaaaaaaaSCCCCCCCCSaaaaaaaaaaaaaaaaaaaaaaaSZCCCCCCCCCCCCCCCCCCCCCCCVSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaSCCCCCCCCCCCCCCCCCCSaaaaaaaaaaaaaaaaaaSCCCCCCCCCCCCCCCCCVSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaSZCCCCCCCCCCCCCCCCCCCCCCCCCCZlaaaaaaaaaaaaaaaaaaaaaadCCCCCCCCCCCCCCCCCCCSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadVCCCCCCCCCCCCCCCCCCSaaaaaaaaaaaaaaaaaaaaVCCCCCCCCCVSaaaaaaaaaaaaaaaaaaaaaadnCCCCCCCCCCCCCCCCCCCCCCCCZSaaaaaaaaaaaaaaaaaaaaaaaaaaaSCCCCCCCCCCCCCCCCCCSaaaaaaaaaaaaaaaaaaSVCCCCCCCCCCCCCCCCCSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadMCCCCCCCCCCCCCCCCCCCCCCCCCCCndaaaaaaaaaaaaaaaaaaaaaaaaaMCCCCCCCCCCCCCCCCCCCdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaMCCCCCCCCCCCCCCCCCCCdaaaaaaaaaaaaaaaaaaaSCCCCCCCCCCCCCSaaaaaaaaaaaaaaaaaaaaaaanCCCCCCCCCCCCCCCCCCCCCCCCZjaaaaaaaaaaaaaaaaaaaaaaaaaSCCCCCCCCCCCCCCCCCCSaaaaaaaaaaaaaaaaaalCCCCCCCCCCCCCCCCCCSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalBCCCCCCCCCCCCCCCCCCCCCCCCCCCSdaaaaaaaaaaaaaaaaaaaaaaaaaaadCCCCCCCCCCCCCCCCCCCMaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadCCCCCCCCCCCCCCCCCCCMaaaaaaaaaaaaaaaaaaaaCCCCCCCCCCCCCCCVSdaaaaaaaaaaaaaaaaaaaaadbCCCCCCCCCCCCCCCCCCCCCCAjaaaaaaaaaaaaaaaaaaaaaaaaaSCCCCCCCCCCCCCCCCCCSaaaaaaaaaaaaaaaaaaSCCCCCCCCCCCCCCCCCCSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadSVCCCCCCCCCCCCCCCCCCCCCCCCCCAlaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabCCCCCCCCCCCCCCCCCCCdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabCCCCCCCCCCCCCCCCCCVdaaaaaaaaaaaaaaaaaaaSCCCCCCCCCCCCCCCCCVSaaaaaaaaaaaaaaaaaaaaaadMCCCCCCCCCCCCCCCCCCZjaaaaaaaaaaaaaaaaaaaaaaaaaaaSCCCCCCCCCCCCCCCCCVSaaaaaaaaaaaaaaaaaaSCCCCCCCCCCCCCCCCCCSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaajmCCCCCCCCCCCCCCCCCCCCCCCCCCCndaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadCCCCCCCCCCCCCCCCCCCMaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadCCCCCCCCCCCCCCCCCCCbaaaaaaaaaaaaaaaaaaaaCCCCCCCCCCCCCCCCCCCCVlaaaaaaaaaaaaaaaaaaaaaadbCCCCCCCCCCCCCCZlaaaaaaaaaaaaaaaaaaaaaaaaaaaaaSCCCCCCCCCCCCCCCCCCSaaaaaaaaaaaaaaaaaaSCCCCCCCCCCCCCCCCCCSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaSZCCCCCCCCCCCCCCCCCCCCCCCCCCZlaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaSCCCCCCCCCCCCCCCCCCCa8aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaMCCCCCCCCCCCCCCCCCCCdaaaaaaaaaaaaaaaaaaaSCCCCCCCCCCCCCCCCCCCCCCBlaaaaaaaaaaaaaaaaaaaaaadACCCCCCCCCCVSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaSCCCCCCCCCCCCCCCCCCSaaaaaaaaaaaaaaaaaaSCCCCCCCCCCCCCCCCCCSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadMVCCCCCCCCCCCCCCCCCCCCCCCCCCmjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadCCCCCCCCCCCCCCCCCCCSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadCCCCCCCCCCCCCCCCCCCMaaaaaaaaaaaaaaaaaaaaCCCCCCCCCCCCCCCCCCCCCCCCCZjaaaaaaaaaaaaaaaaaaaaaadACCCCVCZSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaSCCCCCCCCCCCCCCCCCCSaaaaaaaaaaaaaaaaaaSVCCCCCCCCCCCCCCCCCSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalmCCCCCCCCCCCCCCCCCCCCCCCCCCVbdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabCCCCCCCCCCCCCCCCCCZaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaMCCCCCCCCCCCCCCCCCCCdaaaaaaaaaaaaaaaaaaaSCCCCCCCCCCCCCCCCCCCCCCCCCCCZlaaaaaaaaaaaaaaaaaaaaaaxmCCZmdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaSCCCCCCCCCCCCCCCCCCSaaaaaaaaaaaaaaaaaaSCCCCCCCCCCCCCCCCVZSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadSVCCCCCCCCCCCCCCCCCCCCCCCCCCBjdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadCCCCCCCCCCCCCCCCCCZAaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadVCCCCCCCCCCCCCCCCCCSaaaaaaaaaaaaaaaaaaadZCCCCCCCCCCCCCCCCCCCCCCCCCCCCCBlaaaaaaaaaaaaaaaaaaaaaaxSdaaaaaaaaaaaaaaaaaaaaaaxMdaaaaaaaaaaaSVCCCCCCCCCCCCCCCCCSaaaaaaaaaaaaaaaaaaSCCCCCCCCCCCCCCCCCCSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadmCCCCCCCCCCCCCCCCCCCCCCCCCCCnxaaaaaaaaaaaaaaaaaaaaaaaaaajmdaaaaaaaaaaaaaaaaaaanCCCCCCCCCCCCCCCCCZZdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaMCCCCCCCCCCCCCCCCCCCdaaaaaaaaaaaaaaaaaaaSCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCAjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadmCCCAjaaaaaaaaaSCCCCCCCCCCCCCCCCCVSaaaaaaaaaaaaaaaaaaSCCCCCCCCCCCCCCCCCCSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalVCCCCCCCCCCCCCCCCCCCCCCCCCCZSaaaaaaaaaaaaaaaaaaaaaaaaaaalZCCMaaaaaaaaaaaaaaaaaaaaCCCCCCCCCCCCCCCCCZZnaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadCCCCCCCCCCCCCCCCCCCMaaaaaaaaaaaaaaaaaaaaCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCAdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadnZCCCCCCAdaaaaaaaSCCCCCCCCCCCCCCCCCCSaaaaaaaaaaaaaaaaaaSCCCCCCCCCCCCCCCCCCSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaSVCCCCCCCCCCCCCCCCCCCCCCCCmjaaaaaaaaaaaaaaaaaaaaaaaaaadMCCCCCCdaaaaaaaaaaaaaaaaaaanCCCCCCCCCCCCCCCCCVZdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabCCCCCCCCCCCCCCCCCCCdaaaaaaaaaaaaaaaaaaaSCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCAxaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaMCCVCCCCCCCCMdaaaaaSCCCCCCCCCCCCCCCCCCSaaaaaaaaaaaaaaaaaaSCCCCCCCCCCCCCCCCCCSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaSZCCCCCCCCCCCCCCCCCCCVndaaaaaaaaaaaaaaaaaaaaaaaaaalACCCCCCCCbaaaaaaaaaaaaaaaaaaaaCCCCCCCCCCCCCCCCCZZnaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadVCCCCCCCCCCCCCCCCCCbaaaaaaaaaaaaaaaaaaaaVCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCAdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaSCCCCCCCCCCCCCCCMdaaaSCCCCCCCCCCCCCCCCCCSaaaaaaaaaaaaaaaaaaSVCCCCCCCCCCCCCCCCCSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaSZCCCCCCCCCCCCCVCZjaaaaaaaaaaaaaaaaaaaaaaaaaadSVCCCCCCCCCCCdaaaaaaaaaaaaaaaaaaaMCCCCCCCCCCCCCCCCCCCdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaMCCCCCCCCCCCCCCCCCCCdaaaaaaaaaaaaaaaaaaaSCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCAxaaaaaaaaaaaaaaaaaaaaaaaaaaaaSZCCCCCCCCCCCCCCCCCVMdaSCCCCCCCCCCCCCCCCCCSaaaaaaaaaaaaaaaaaaSCCCCCCCCCCCCCCCCCCSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalBCCCCCCCCCCCnjaaaaaaaaaaaaaaaaaaaaaaaaaaxmCCCCCCCCCCCCCCnaaaaaaaaaaaaaaaaaaadCCCCCCCCCCCCCCCCCCCbaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadCCCCCCCCCCCCCCCCCCCMaaaaaaaaaaaaaaaaaaaaVCCCCCCCCCCCCCCCCCCZZCCCCCCCCCCCCCCCCCCCCCCCCAdaaaaaaaaaaaaaaaaaaaaaaaalBCCCCCCCCCCCCCCCCCCCCCCnMCCCCCCCCCCCCCCCCCClaaaaaaaaaaaaaaaaaaSCCCCCCCCCCCCCCCCCCSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaajVCCCCCCBSdaaaaaaaaaaaaaaaaaaaaaaaaaalZCCCCCCCCCCCCCCCCVaaaaaaaaaaaaaaaaaaaaMCCCCCCCCCCCCCCCCCCCdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaanCCCCCCCCCCCCCCCCCCVdaaaaaaaaaaaaaaaaaaabCCCCCCCCCCCCCCCCCCVlelZCCCCCCCCCCCCCCCCCCCCCCSdaaaaaaaaaaaaaaaaaaaaaaaaSCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCVSaaaaaaaaaaaaaaaaaaSCCCCCCCCCCCCCCCCCCSaaaaaaaaaaaaaaaaadaaaaaaaaaaaaaaaaaaaaaaaalACCAjaaaaaaaaaaaaaaaaaaaaaaaaaadmVCCCCCCCCCCCCCCCCCCCnaaaaaaaaaaaaaaaaaaadCCCCCCCCCCCCCCCCCCCMaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadCCCCCCCCCCCCCCCCCCCbaaaaaaaaaaaaaaaaaaaaCCCCCCCCCCCCCCCCCCCBaaaalZCCCCCCCCCCCCCCCCCCmdaaaaaaaaaaaaaaaaaaaaaaaaaaaaSVCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCSaaaaaaaaaaaaaaaaaaSCCCCCCCCCCCCCCCCCCSaaaaaaaaaaaaaaajACVndaaaaaaaaaaaaaaaaaaaaaaaxdaaaaaaaaaaaaaaaaaaaaaaaaaajACCCCCCCCCCCCCCCCCCCCCCCdaaaaaaaaaaaaaaaaaaaSCCCCCCCCCCCCCCCCCCCdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabCCCCCCCCCCCCCCCCCCCdaaaaaaaaaaaaaaaaaaaSCCCCCCCCCCCCCCCCCCClaaaaaajZCCCCCCCCCCCCCCmxaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadSVCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCSaaaaaaaaaaaaaaaaaaSCCCCCCCCCCCCCCCCCCSaaaaaaaaaaaaaSZCCCCCVbdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadSACCCCCCCCCCCCCCCCCCCCCCCCCbaaaaaaaaaaaaaaaaaaadCCCCCCCCCCCCCCCCCCCSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadCCCCCCCCCCCCCCCCCCCMaaaaaaaaaaaaaaaaaaaaCCCCCCCCCCCCCCCCCCCZaaaaaaaaalVCCCCCCCCCCZdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaSZCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCSaaaaaaaaaaaaaaaaaaSCCCCCCCCCCCCCCCCCCSaaaaaaaaaadnCCCCCCCCCCCMdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadMCCCCCCCCCCCCCCCCCCCCCCCCCCCCCdaaaaaaaaaaaaaaaaaaanCCCCCCCCCCCCCCCCCCCdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaMCCCCCCCCCCCCCCCCCCCdaaaaaaaaaaaaaaaaaaaSCCCCCCCCCCCCCCCCCCCjaaaaaaaaaaaSZCCCCCVBlaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaSZCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCVSaaaaaaaaaaaaaaaaaaSCCCCCCCCCCCCCCCCCCSaaaaaaaajZCCCCCCCCCCCCCVCndaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalBCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCMaaaaaaaaaaaaaaaaaaadCCCCCCCCCCCCCCCCCCCbaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaACCCCCCCCCCCCCCCCCCSaaaaaaaaaaaaaaaaaaaaZCCCCCCCCCCCCCCCCCVZaaaaaaaaaaaaaaSCVCVlaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadSCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCSaaaaaaaaaaaaaaaaaaSCCCCCCCCCCCCCCCCCCSaaaaadbVCCCCCCCCCCCCCCCCCCCAdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadMCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCdaaaaaaaaaaaaaaaaaaaMCCCCCCCCCCCCCCCCCCCaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadSAVCCCCCCCCCCCCCdaaaaaaaaaaaaaaaaaaaSCCCCCCCCCCCCCCCCCCClaaaaaaaaaaaaaaaaSSdaaaaaaaaaaaaaaaaaaaaaalSaaaaaaaaaaaaaaaaaaaaaadMCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCSaaaaaaaaaaaaaaaaaaSCCCCCCCCCCCCCCCCCCSaaajmCCCCCCCCCCCCCCCCCCCCCCCCAxaaaaaaaaaaaaaaaaaaaaaaaaaaaaajACCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCMaaaaaaaaaaaaaaaaaaadCCCCCCCCCCCCCCCCCCCnaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaajSmCCCCCCCCMaaaaaaaaaaaaaaaaaaaaVCCCCCCCCCCCCCCCCCCZaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalBCCCSaaaaaaaaaaaaaaaaaaaaaadMCCCCCCCCCCCCCCCCCCCCCCCCCCCCCSaaaaaaaaaaaaaaaaaaSCCCCCCCCCCCCCCCCCCSalBCCCCCCCCCCCCCCCCCCCCCCCCCCZlaaaaaaaaaaaaaaaaaaaaaaaaaaalZCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCdaaaaaaaaaaaaaaaaaaabCCCCCCCCCCCCCCCCCCCdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadjMmCCCdaaaaaaaaaaaaaaaaaaaSCCCCCCCCCCCCCCCCCCClaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaxACCCCCCVSaaaaaaaaaaaaaaaaaaaaaadMCCCCCCCCCCCCCCCCCCCCCCCCCCVSaaaaaaaaaaaaaaaaaaSCCCCCCCCCCCCCCCCCCZCCVCCCCCCCCCCCCCCCCCCCCCCCCmjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaSZCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCMaaaaaaaaaaaaaaaaaaadCCCCCCCCCCCCCCCCCCCSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadxaaaaaaaaaaaaaaaaaaaaCCCCCCCCCCCCCCCCCCCZaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadACCCCCCCCCCVSaeaaaaaaaaaaaaaaaaaaaadSCCCCCCCCCCCCCCCCCCCCCCCCCSaaaaaaaaaaaaaaaaaaSCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCVSdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaSZCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCdaaaaaaaaaaaaaaaaaaaMVCCCCCCCCCCCCCCCCCCdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaSCCCCCCCCCCCCCCCCCCVlaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadmCCCCCCCCCCCCCCZlaaaaaaaaaaaaaaaaaaaaaadACCCCCCCCCCCCCCCCCCCCCCCSaaaaaaaaaaaaaaaaaaSCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCAlaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaajZCVCCCCCCCCCCCCmldCCCCCCCCCCCCCCCCCCCbaaaaaaaaaaaaaaaaaaadCCCCCCCCCCCCCCCCCCCSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaCCCCCCCCCCCCCCCCCCCZaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabCCCCCCCCCCCCCCCCCCZjaaaaaaaaaaaaaaaaaaaaaadACCCCCCCCCCCCCCCCCCCCCSaaaaaaaaaaaaaaaaaaSVCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCnxaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalZCCCCCCCCCCndaaabCCCCCCCCCCCCCCCCCCCdaaaaaaaaaaaaaaaaaaaSCCCCCCCCCCCCCCCCCCCdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaSCCCCCCCCCCCCCCCCCCCjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaSCCCCCCCCCCCCCCCCCCCCCCZlaaaaaaaaaaaaaaaaaaaaaaxmCCCCCCCCCCCCCCCCCCCSaaaaaaaaaaaaaaaaaaSVCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCBSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalACCCCCZlaaaaaadCCCCCCCCCCCCCCCCCCCMaaaaaaaaaaaaaaaaaaadCCCCCCCCCCCCCCCCCCCbaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaajbBCCCCCCCCCCCCCCCCZaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadnVCCCCCCCCCCCCCCCCCCCCCCCBlaaaaaaaaaaaaaaaaaaaaaadACCCCCCCCCCCCCCCCCSaaaaaaaaaaaaaaaaaaSCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCAjaaaaaaaaaaaaaaaaaaaaaaaaaadSdaaaaaaaaaaaaaaaaaaaaaaadACmjaaaaaaaaaMCCCCCCCCCCCCCCCCCCCdaaaaaaaaaaaaaaaaaaabCCCCCCCCCCCCCCCCCCCdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaMBnSxaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaxlMACCCCCCCCCCClaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaxACCCCCCCCCCCCCCCCCCCCCCCCZjaaaaaaaaaaaaaaaaaaaaaaxACCCCCCCCCCCCCCVSaaaaaaaaaaaaaaaaaaSCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCVbdaaaaaaaaaaaaaaaaaaaaaaaaaalACCCbdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadCCCCCCCCCCCCCCCCCCCbaaaaaaaaaaaaaaaaaaadCCCCCCCCCCCCCCCCCCCMaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadCCCZVCASldaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaxSmBCCCCCBaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadACCCCCCCCCCCCCCCCCCCCCCCCmxaaaaaaaaaaaaaaaaaaaaaadACCCCCCCCCCCCCSaaaaaaaaaaaaaaaaaaSCCCCCCCCCCCCCCCCCCCCCCCCCCCCCZjaaaaaaaaaaaaaaaaaaaaaaaaaadSVCCCCCCCbdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabCCCCCCCCCCCCCCCCCCCdaaaaaaaaaaaaaaaaaaaSCCCCCCCCCCCCCCCCCCCdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabCCCCVCCCCCCASjdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadjSACjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaxmCCCCCCCCCCCCCCCCCCCCCCCVAxaaaaaaaaaaaaaaaaaaaaaalZCCCCCCCCCCCSaaaaaaaaaaaaaeaaaaSCCCCCCCCCCCCCCCCCCCCCCCCCCCMxaaaaaaaaaaaaaaaaaaaaaaaaaadmCCCCCCCCCCCCmdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadCCCCCCCCCCCCCCCCCCCMaaaaaaaaaaaaaaaaaaadCCCCCCCCCCCCCCCCCCCMaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "aaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadCCCCCCCCCCCCCCCCVmSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaxACCCCCCCCCCCCCCCCCCCCCCCCmxaaaaaaaaaaaaaaaaaaaaaalBCCCCCCCCCSaaaaaaaaaaaaaaaaaaSCCCCCCCCCCCCCCCCCCCCCCCCZSdaaaaaaaaaaaaaaaaaaaaaaaaaaSZCCCCCCCCCCCCCCCCAdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaanCCCCCCCCCCCCCCCCCCCdaaaaaaaaaaaaaaaaaaaMCCCCCCCCCCCCCCCCCCCdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaMCCCCCCCCCCCCCCCCCCCdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaxACCCCCCCCCCCCCCCCCCCCCCCCmxaaaaaaaaaaaaaaaaaaaaaalBCCCCCCCSaaaaaaaaaaaaaaaaaaSCCCCCCCCCCCCCCCCCCCCCCmlaaaaaaaaaaaaaaaaaaaaaaaaaadnVVCCCCCCCCCCCCCCCCCCCAxaaaaaaaaaaaaaaaaaaaaaaaaaaaaadVCCCCCCCCCCCCCCCCCCSaaaaaaaaaaaaaaaaaaadCCCCCCCCCCCCCCCCCCCMaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadCCCCCCCCCCCCCCCCCCCnaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaajBCCCCCCCCCCCCCCCCCCCCCCCCmxaaaaaaaaaaaaaaaaaaaaaajZVCCCCSaaaaaaaaaaaaaaaaaaSVCCCCCCCCCCCCCCCCCCZndaaaaaaaaaaaaaaaaaaaaaaaaaalACCCCCCCCCCCCCCCCCCCCCCCCVBjaaaaaaaaaaaaaaaaaaaaaaaaaaaamCCCCCCCCCCCCCCCCCCCdaaaaaaaaaaaaaaaaaaabCCCCCCCCCCCCCCCCCBSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaSCCCCCCCCCCCCCCCCCCCaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalBCCCCCCCCCCCCCCCCCCCCCCCCMdaaaaaaaaaaaaaaaaaaaaaalVCCCSaaaaaaaaaaaaaaaaaaSCCCCCCCCCCCCCCCCCZSaaaaaaaaaaaaaaaaaaaaaaaaaadSZVCCCCCCCCCCCCCCCCCCCCCCCCCZlaaaaaaaaaaaaaaaaaaaaaaaaaaaaadCCCCCCCCCCCCCCCCCCCbaaaaaaaaaaaaaaaaaaadCCCCCCCCCCCCCASjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadCCCCCCCCCCCCCCCCCCCMaaaaaaaaaaaaaaaaaaaaxaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalZCCCCCCCCCCCCCCCCCCCCCCCCbdaaaaaaaaaaaaaaaaaaaaaaSVVSaaaaaaaaaaaaaaaaaaSCCCCCCCCCCCCCCCndaaaaaaaaaaaaaaaaaaaaaaaaaaxnCCCCCCCCCCCCCCCCCCCCCCCCCCCbdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaMCCCCCCCCCCCCCCCCCCCaaaaaaaaaaaaaaaaaaaanVCCCCCCCnldaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaMCCCCCCCCCCCCCCCCCCCdaaaaaaaaaaaaaaaaaaaSCCZmSxaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaajZCCCCCCCCCCCCCCCCCCCCCCCCMdaaaaaaaaaaaaaaaaaaaaadSlaaaaaaaaaaaaaaaaaaSCCCCCCCCCCCCVSdaaaaaaaaaaaaaaaaaaaaaaaaaajBCCCCCCCCCCCCCCCCCCCCCCCCCCBSdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadCCCCCCCCCCCCCCCCCCCnaaaaaaaaaaaaaaaaaaadVCCVMldaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadCCCCCCCCCCCCCCCCCCCMaaaaaaaaaaaaaaaaaaaaCCCCCCCCBMlxaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalZCCCCCCCCCCCCCCCCCCCCCCCCbdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaSCCCCCCCCCCmlaaaaaaaaaaaaaaaaaaaaaaaaaadbCCCCCCCCCCCCCCCCCCCCCCCCCCVAlaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaACCCCCCCCCCCCCCCCCCCdaaaaaaaaaaaaaaaaaaaljaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaSCCCCCCCCCCCCCCCCCCCdaaaaaaaaaaaaaaaaaaaSCCCCCCCCCCCCVBSjdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaSVCCCCCCCCCCCCCCCCCCCCCCCVndaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaSCCCCCCCCMdaaaaaaaaaaaaaaaaaaaaaaaaaajACCCCCCCCCCCCCCCCCCCCCCCCCCCMdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadCCCCCCCCCCCCCCCCCCCSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadCCCCCCCCCCCCCCCCCCCbaaaaaaaaaaaaaaaaaaadZCCCCCCCCCCCCCCCCCVSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaSVCCCCCCCCCCCCCCCCCCCCCCCZSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaSVCCCVZSaaaaaaaaaaaaaaaaaaaaaaaaaaaSZCCCCCCCCCCCCCCCCCCCCCCCCCCZjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamVCCCCCCCCCCCCCCCCCCdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaMCCCCCCCCCCCCCCCCCCCdaaaaaaaaaaaaaaaaaaaSCCCCCCCCCCCCCCCCCCClaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaSCCCCCCCCCCCCCCCCCCCCCCCCCSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaSCCCnxaaaaaaaaaaaaaaaaaaaaaaaaaaxmCCCCCCCCCCCCCCCCCCCCCCCCCCCmdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadCCCCCCCCCCCCCCCCCCCbaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadCCCCCCCCCCCCCCCCCCCMaaaaaaaaaaaaaaaaaaaaZCCCCCCCCCCCCCCCCCCVaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaSCCCCCCCCCCCCCCCCCCCCCCCCCSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaSZSdaaaaaaaaaaaaaaaaaaaaaaaaaalBCCCCCCCCCCCCCCCCCCCCCCCCCVZSdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaACCCCCCCCCCCCCCCCCCCaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabCCCCCCCCCCCCCCCCCCCdaaaaaaaaaaaaaaaaaaaSCCCCCCCCCCCCCCCCCCCjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaSVCCCCCCCCCCCCCCCCCCCCCCCCSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaaaaaaaaaaaaaaaaaaaaaaaaaadbVCCCCCCCCCCCCCCCCCCCCCCCCCVAlaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaxCCCCCCCCCCCCCCCmSdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaajSACnaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadVCCCCCCCCCCCCCCCCCCSaaaaaaaaaaaaaaaaaaaaCCCCCCCCCCCCCCCCCCCBaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaMCCCCCCCCCCCCCCCCCCCCCCCCZSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaajBCCCCCCCCCCCCCCCCCCCCCCCCCCCbdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaACCCCCCVCCZmjdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadjbBCCVCCCdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaMCCCCCCCCCCCCCCCCCCCdaaaaaaaaaaaaaaaaaaaSCCCCCCCCCCCCCCCCCCClaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadnCCCCCCCCCCCCCCCCCCCCCCCCClaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalZCVCCCCCCCCCCCCCCCCCCCCCCCCZlaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadCCCCCAnjdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadlmCCCCCCCCCCCbaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadCCCCCCCCCCCCCCCCCCCSaaaaaaaaaaaaaaaaaaaaCCCCCCCCCCCCCCCCCCCZaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadSCCCCCCCCCCCCCCCCCCCCCCCCZlaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadMCCCCCCCCCCCCCCCCCCCCCCCCCCCmjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaAASxaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaxSmCCCCCCCCCCCCCCCCdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaSCCCCCCCCCCCCCCCCCCCdaaaaaaaaaaaaaaaaaaaSCCCCCCCCCCCCCCCCCCCjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadbCCCCCCCCCCCCCCCCCCCCCCCCZlaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalBCCCCCCCCCCCCCCCCCCCCCCCCCCZSdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadCCCCCCCCCCCCCCCCCCCMaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadCCCCCCCCCCCCCCCCCCCbaaaaaaaaaaaaaaaaaaaaCCCCCCCCCCCCCCCCCCCZaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadSCCCCCCCCCCCCCCCCCCCCCCCCBjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadSVCCCCCCCCCCCCCCCCCCCCCCCCCCAlaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaSCCCCCCCCCCCCCCCCCCCdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaMCCCCCCCCCCCCCCCCCCCdaaaaaaaaaaaaaaaaaaaSCCCCCCCCCCCCCCCCCCCjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadmCCCCCCCCCCCCCCCCCCCCCCCCBlaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadmCCCCCCCCCCCCCCCCCCCCCCCCCCCmdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadCCCCCCCCCCCCCCCCCCCSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadCCCCCCCCCCCCCCCCCCCMaaaaaaaaaaaaaaaaaaaaZCCCCCCCCCCCCCCCCCCBaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadACCCCCCCCCCCCCCCCCCCCCCCCZxaaaaaaaaaaaaaaaaaaaaaaaaaaaalZCCCCCCCCCCCCCCCCCCCCCCCCCCBSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaSCCCCCCCCCCCCCCCCCCCdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaanCCCCCCCCCCCCCCCCCCCdaaaaaaaaaaaaaaaaaaaSCCCCCCCCCCCCCCCCCCClaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaxACCCCCCCCCCCCCCCCCCCCCCCCAdaaaaaaaaaaaaaaaaaaaaaaaamVCCCCCCCCCCCCCCCCCCCCCCCCCCmjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadlSSaaaaaaaaaaaaaaaaaaadCCCCCCCCCCCCCCCCCCCbaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadCCCCCCCCCCCCCCCCCCCbaaaaaaaaaaaaaaaaaaaaCCCCCCCCCCCCCCCCCCCZaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaxmCCCCCCCCCCCCCCCCCCCCCCCCmxaaaaaaaaaaaaaaaaaaaaaaSZVCCCCCCCCCCCCCCCCCCCCCCCCxaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadSMZCCCCdaaaaaaaaaaaaaaaaaaabCCCCCCCCCCCCCCCCCCCaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaMCCCCCCCCCCCCCCCCCCCdaaaaaaaaaaaaaaaaaaaSCCCCCCCCCCCCCCCCCCCjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadACCCCCCCCCCCCCCCCCCCCCCCCAxaaaaaaaaaaaaaaaaaaaaaajZCCCCCCCCCCCCCCCCCCCCCCCCSdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadSAVCCCCCCCCSaaaaaaaaaaaaaaaaaaadCCCCCCCCCCCCCCCCCCCnaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadCCCCCCCCCCCCCCCCCCCSaaaaaaaaaaaaaaaaaaaaVCCCCCCCCCCCCCCCCCCBaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaxACCCCCCCCCCCCCCCCCCCCCCCCmxaaaaaaaaaaaaaaaaaaaaaalZCCCCCCCCCCCCCCCCCCCCCCCCMdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaajSACCCCCCCCCCCCCZaaaaaaaaaaaaaaaaaaaabCCCCCCCCCCCCCCCCCCCdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaMCCCCCCCCCCCCCCCCCCCdaaaaaaaaaaaaaaaaaaaSVCCCCCCCCCCCCCCCCCClaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalBCCCCCCCCCCCCCCCCCCCCCCCCmdaaaaaaaaaaaaaaaaaaaaaaSZCCCCCCCCCCCCCCCCCCCCCCVCMdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadZVVCCCCCCCCCCCCCCCCSaaaaaaaaaaaaaaaaaaadCCCCCCCCCCCCCCCCCCCSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadCCCCCCCCCCCCCCCCCCCMaaaaaaaaaaaaaaaaaaaaVCCCCCCCCCCCCCCCCCZZaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaajBCCCCCCCCCCCCCCCCCCCCCCCCSdaaaaaaaaaaaaaaaaaaaaaaSCCCCCCCCCCCCCCCCCCCCCCCCVSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaACCCCCCCCCCCCCCCCCCCaaaaaaaaaaaaaaaaaaaaMCCCCCCCCCCCCCCCCCCCdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaSCCCCCCCCCCCCCCCCCCCdaaaaaaaaaaaaaaaaaaabCCCCCCCCCCCCCCCCCCVxaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalZCCCCCCCCCCCCCCCCCCCCCCCCMdaaaaaaaaaaaaaaaaaaaaaalCCCCCCCCCCCCCCCCCCCCCCCCVbaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadVCCCCCCCCCCCCCCCCCCbaaaaaaaaaaaaaaaaaaadCCCCCCCCCCCCCCCCCCCMaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadCCCCCCCCCCCCCCCCCCCSaaaaaaaaaaaaaaaaaaadVCCCCCCCCCCCCCCCCCCZaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaajZVCCCCCCCCCCCCCCCCCCCCCCCbdaaaaaaaaaaaaaaaaaaaaaaSVCCCCCCCCCCCCCCCCCCCCCCCVbaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaACCCCCCCCCCCCCCCCCCCaaaaaaaaaaaaaaaaaaaaMCCCCCCCCCCCCCCCCCCCdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaanVCCCCCCCCCCCCCCCCCCdaaaaaaaaaaaaaaaaaaaSCCCCCCCCCCCCCCCCCCClaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalVCCCCCCCCCCCCCCCCCCCCCCCCSdaaaaaaaaaaaaaaaaaaaaaaSZCCCCCCCCCCCCCCCCCCCCCCCCSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaxCCCCCCCCCCCCCCCCCCCSaaaaaaaaaaaaaaaaaaadCCCCCCCCCCCCCCCCCCCMaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaaaaaaaaaaaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadCCCCCCCCCCCCCCCCCCCMaaaaaaaaaaaaaaaaaaaaVCCCCCCCCCCCCCCCCCCBaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaSCCCCCCCCCCCCCCCCCCCCCCCCCnaaaaaaaaaaaaaaaaaaaaaadSCCCCCCCCCCCCCCCCCCCCCCCCVbaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamCCCCCCCCCCCCCCCCCCZaaaaaaaaaaaaaaaaaaaaMCCCCCCCCCCCCCCCCCCCdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaanCCCCCCCCCCCCCCCCCCCdaaaaaaaaaaaaaaaaaaaSCCCCCCCCCCCCCCCCCCClaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaSVCCCCCCCCCCCCCCCCCCCCCCCCSaaaaaaaaaaaaaaaaaaaaaadMCCCCCCCCCCCCCCCCCCCCCCCCClaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaajCCCCCCCCCCCCCCCCCCCSaaaaaaaaaaaaaaaaaaadCCCCCCCCCCCCCCCCCCCnaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadCCCCCCCCCCCCCCCCCCCMaaaaaaaaaaaaaaaaaaaaCCCCCCCCCCCCCCCCCCCZaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaSCCCCCCCCCCCCCCCCCCCCCCCCCSaaaaaaaaaaaaaaaaaaaaaadMCCCCCCCCCCCCCCCCCCCCCCCCBlaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaACCCCCCCCCCCCCCCCCCCaaaaaaaaaaaaaaaaaaaabCCCCCCCCCCCCCCCCCCVaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa8aaaaaaaaaaaaaaaaaaaaaaaaaaabCCCCCCCCCCCCCCCCCCCdaaaaaaaaaaaaaaaaaaaSCCCCCCCCCCCCCCCCCCVlaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaajmCCCCCCCCCCCCCCCCCCCCCCCCCVSaaaaaaaaaaaaaaaaaaaaaadMCCCCCCCCCCCCCCCCCCCCCCCVZlaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaxCCCCCCCCCCCCCCCCCCCSaaaaaaaaaaaaaaaaaaadCCCCCCCCCCCCCCCCCCCnaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaVCCCCCCCCCCCCCCCCCCMaaaaaaaaaaaaaaaaaaaaCCCCCCCCCCCCCCCCCCCBaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadlZVCCCCCCCCCCCCCCCCCCCCCCCCCCMdaaaaaaaaaaaaaaaaaaaaaaaadnVVCCCCCCCCCCCCCCCCCCCCCCZleeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaACCCCCCCCCCCCCCCCCCVaaaaaaaaaaaaaaaaaaaaSCCCCCCCCCCCCCCCCCCCdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaanCCCCCCCCCCCCCCCCCCCdaaaaaaaaaaaaaaaaaaaSCCCCCCCCCCCCCCCCCCClaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadMCCCCCCCCCCCCCCCCCCCCCCCCCZlaaaaaaaaaaaaaaaaaaaaaaaaaaaaadACCCCCCCCCCCCCCCCCCCCCCCCZlaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaxCCCCCCCCCCCCCCCCCCCbaaaaaaaaaaaaaaaaaaadCCCCCCCCCCCCCCCCCCCbaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaSnBCCCCCCCCCCCCCCCCSaaaaaaaaaaaaaaaaaaaaCCCCCCCCCCCCCCCCCCCZaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadMCCCCCCCCCCCCCCCCCCCCCAjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaxAVCCCCCCCCCCCCCCCCCCCCCCCZxaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaACCCCCCCCCCCCCCCCCCCaaaaaaaaaaaaaaaaaaaaSCCCCCCCCCCCCCCCCCCCdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadlmBCCCCCCCCCCCdaaaaaaaaaaaaaaaaaaaSCCCCCCCCCCCCCCCCCCCjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadbCCCCCCCCCCCCCCCCVSdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaxmCCCCCCCCCCCCCCCCCCCCCCCCAxaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaxCCCCCCCCCCCCCCCCCCCSaaaaaaaaaaaaaaaaaaadCCCCCCCCCCCCCCCCCCCMaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaajSAVCCCCCMaaaaaaaaaaaaaaaaaaaaVCCCCCCCCCCCCCCCCCCBaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaxACCCCCCCCCCCCBlaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaxACCCCCCCCCCCCCCCCCCCCCCCCmjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamCCCCCCCCCCCCCCCCCCVaaaaaaaaaaaaaaaaaaaanVCCCCCCCCCCCCCCCCCCdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadjbmCdaaaaaaaaaaaaaaaaaaaSCCCCCCCCCCCCCCCCCCClaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaxAVCCCCCCCmdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaxACCCCCCCCCCCCCCCCCCCCCCCCmxaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaxCCCCCCCCCCCCCCCCCCCSaaaaaaaaaaaaaaaaaaadCCCCCCCCCCCCCCCCCCCSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaCCCCCCCCCCCCCCCCCCCZaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaaaaaaaaaaaaaaaaaaaaaaajmCVCBlaaaaaaaaaaaaaaaaaaaaaaaaaaadjaaaaaaaaaaaaaaaaaaaaaaxACCCCCCCCCCCCCCCCCCCCCCCCmxaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamCCCCCCCCCCCCCCCCCCCaaaaaaaaaaaaaaaaaaaaSCCCCCCCCCCCCCCCCCCCdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaSCCCCCCCCCCCCCCCCCCVlaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaajACCSaaaaaaaaaaaaaaaaaaaaaaadnxaaaaaaaaaaaaaaaaaaaaaaaaaaalACCmdaaaaaaaaaaaaaaaaaaaaaalZCCCCCCCCCCCCCCCCCCCCCCCVAdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaxCCCCCCCCCCCCCCCCCCCSaaaaaaaaaaaaaaaaaaadCCCCCCCCCCCCCCCCCCCMaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaCCCCCCCCCCCCCCCCCCCZaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadSCCCCCCZleaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaSZCCCCCCAxaaaaaaaaaaaaaaaaaaaaaajZCCCCCCCCCCCCCCCCCCCCCCCCbdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaACCCCCCCCCCCCCCCCCCVaaaaaaaaaaaaaaaaaaaaMCCCCCCCCCCCCCCCCCCCdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalCCCCCCCCCCCCCCCCCCCjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadbCCCCCCCCCCZlaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaxMCCCCCCCCCCCmxaaaaaaaaaaaaaaaaaaaaaalZVCCCCCCCCCCCCCCCCCCCCCCCMdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadCCCCCCCCCCCCCCCCCCCMaaaaaaaaaaaaaaaaaaadCCCCCCCCCCCCCCCCCCCSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadlSACCCCCCCCCCCCCCZaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalBCCCCCCCCCCCCVCZjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalBCCCCCCCCCCCCCCCAxaaaaaaaaaaaaaaaaaaaaaajBCCCCCCCCCCCCCCCCCCCCCCCCMdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaZCCCCCCCCCCCCCCCCCCCaaaaaaaaaaaaaaaaaaaaSCCCCCCCCCCCCCCCCCCCdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamZAAMlxaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaxlnACCCCCCCCCjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadnCCCCCCCCCCCCCCCCCCCVjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadMVCCCCCCCCCCCCCCCCCCCmdaaaaaaaaaaaaaaaaaaaaaalZCCCCCCCCCCCCCCCCCCCCCCCCndaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalCCCCCCCCCCCCCCCCCCCSaaaaaaaaaaaaaaaaaaadCCCCCCCCCCCCCCCCCCCbaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadZZVCCCCCAbjdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadSmZCCCZaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalACCCCCCCCCCCCCCCCCCCCCCCZjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaxmCCCCCCCCCCCCCCCCCCCCCCCCndaaaaaaaaaaaaaaaaaaaaaaSCCCCCCCCCCCCCCCCCCCCCCCCCbdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaZCCCCCCCCCCCCCCCCCCVaaaaaaaaaaaaaaaaaaaaMCCCCCCCCCCCCCCCCCCCdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaMZZCCCCCCCCCCCASjdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadjSjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadlBCCCCCCCCCCCCCCCCCCCCCCCCCCVxaaaaaaaaaaaaaaaaaaaaaaaaaaadlZVCCCCCCCCCCCCCCCCCCCCCCCCCCCSdaaaaaaaaaaaaaaaaaaaaaaSZCCCCCCCCCCCCCCCCCCCCCCCCSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalCCCCCCCCCCCCCCCCCCCMaaaaaaaaaaaaaaaaaaadCCCCCCCCCCCCCCCCCCCnaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadCCCCCCCCCCCCCCCCCCVjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadMVCCCCCCCCCCCCCCCCCCCCCCCCCCAlaaaaaaaaaaaaaaaaaaaaaaaaaaaadVCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCbdaaaaaaaaaaaaaaaaaaaaaabVCCCCCCCCCCCCCCCCCCCCCCCZSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeZCCCCCCCCCCCCCCCCCCCaaaaaaaaaaaaaaaaaaaaSCCCCCCCCCCCCCCCCCCVdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabCCCCCCCCCCCCCCCCCCCdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalACCCCCCCCCCCCCCCCCCCCCCCCCCCmdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaSVCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCMdaaaaaaaaaaaaaaaaaaaaaaSVCCCCCCCCCCCCCCCCCCCCCCCVSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalCCCCCCCCCCCCCCCCCCCSaaaaaaaaaaaaaaaaaaadCCCCCCCCCCCCCCCCCCVnaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaCCCCCCCCCCCCCCCCCCCMaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadMVCCCCCCCCCCCCCCCCCCCCCCCCCCBSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadSVCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCbdaaaaaaaaaaaaaaaaaaaaaaSVCCCCCCCCCCCCCCCCCCCCCCCZSdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaZVCCCCCCCCCCCCCCCCCCaaaaaaaaaaaaaaaaaaaaMCCCCCCCCCCCCCCCCCCCdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaanCCCCCCCCCCCCCCCCCCCdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaajmCCCCCCCCCCCCCCCCCCCCCCCCCCCAjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaSVCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCSdaaaaaaaaaaaaaaaaaaaaadMCCCCCCCCCCCCCCCCCCCCCCCCVSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalVCCCCCCCCCCCCCCCCCCSaaaaaaaaaaaaaaaaaaadCCCCCCCCCCCCCCCCCCCMaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadVCCCCCCCCCCCCCCCCCCMaaaaaaaaaaaaaaaaaaaaASjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaSZCCCCCCCCCCCCCCCCCCCCCCCCCCVSdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaSVCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCVSaaaaaaaaaaaaaaaaaaaaaadbCCCCCCCCCCCCCCCCCCCCCCCCVlaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaZCCCCCCCCCCCCCCCCCCCaaaaaaaaaaaaaaaaaaaaMCCCCCCCCCCCCCCCCCCCdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaanVCCCCCCCCCCCCCCCCCVdaaaaaaaaaaaaaaaaaaaSCCCCZmSxaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadmCCCCCCCCCCCCCCCCCCCCCCCCCCCAlaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamCCCCCAjSVCCCCCCCCCCCCCCCCCCCCCCCZSaaaaaaaaaaaaaaaaaaaaaaanCCCCCCCCCCCCCCCCCCCCCCCCVSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaajCCCCCCCCCCCCCCCCCCCSaaaaaaaaaaaaaaaaaaadCCCCCCCCCCCCCCCCCCCbaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadCCCCCCCCCCCCCCCCCCCbaaaaaaaaaaaaaaaaaaaaCCCCCCCCCCBbSdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalACCCCCCCCCCCCCCCCCCCCCCCCCCCnxaaaaaaaaaaaaaaaaaaaaaaaaaaajAMdaaaaaaaaaaaaaaaaaaaaaadMZbdaaadSVCCCCCCCCCCCCCCCCCCCCCCCZSaaaaaaaaaaaaaaaaaaaaaadSCCCCCCCCCCCCCCCCCCCCCCCCZjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaBCCCCCCCCCCCCCCCCCCZaaaaaaaaaaaaaaaaaaaanCCCCCCCCCCCCCCCCCCCaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaanCCCCCCCCCCCCCCCCCCCdaaaaaaaaaaaaaaaaaaaSCCCCCCCCCCCCCCCASjdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaMVCCCCCCCCCCCCCCCCCCCCCCCCCCZSaaaaaaaaaaaaaaaaaaaaaaaaaaadSZCCCCnaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabCCCCCCCCCCCCCCCCCCCCCCCCCSdaaaaaaaaaaaaaaaaaaaaadnCCCCCCCCCCCCCCCCCCCCCCCCZjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalCCCCCCCCCCCCCCCCCCCSaaaaaaaaaaaaaaaaaaadCCCCCCCCCCCCCCCCCCCSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadCCCCCCCCCCCCCCCCCCCMaaaaaaaaaaaaaaaaaaaaCCCCCCCCCCCCCCCCCCCBaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaajmVCCCCCCCCCCCCCCCCCCCCCCCCCCAjaaaaaaaaaaaaaaaaaaaaaaaaaaadnCCCCCCCCCmdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadSCCCCCCCCCCCCCCCCCCCCCCCCCjaaaaaaaaaaaaaaaaaaaaaadmCCCCCCCCCCCCCCCCCCCCCCCCZlaaaaaaaaaaaaaaaaaaaaaaaaaaaaaZCCCCCCCCCCCCCCCCCCVaaaaaaaaaaaaaaaaaaaaMCCCCCCCCCCCCCCCCCCZaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabCCCCCCCCCCCCCCCCCCCdaaaaaaaaaaaaaaaaaaaSCCCCCCCCCCCCCCCCCCClaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalZCCCCCCCCCCCCCCCCCCCCCCCCCCVSdaaaaaaaaaaaaaaaaaaaaaaaaaaalZCCCCCCCCCCCCZSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadMCCCCCCCCCCCCCCCCCCCCCCCCZjaaaaaaaaaaaaaaaaaaaaaaxmCCCCCCCCCCCCCCCCCCCCCCVZBjaaaaaaaaaaaaaaaaaaaaaaaaaaajCCCCCCCCCCCCCCCCCCCSaaaaaaaaaaaaaaaaaaadCCCCCCCCCCCCCCCCCVZnaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaCCCCCCCCCCCCCCCCCCCMaaaaaaaaaaaaaaaaaaaaVCCCCCCCCCCCCCCCCCCZaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadnCCCCCCCCCCCCCCCCCCCCCCCCCCCAlaaaaaaaaaaaaaaaaaaaaaaaaaaadbCCCCCCCCCCCCCCCCCZSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadMCCCCCCCCCCCCCCCCCCCCCCCCZlaaaaaaaaaaaaaaaaaaaaaajAVCCCCCCCCCCCCCCCCCCCCCCCmxaaaaaaaaaaaaaaaaaaaaaaaaaaVCCCCCCCCCCCCCCCCCCZaaaaaaaaaaaaaaaaaaaaMCCCCCCCCCCCCCCCCCCCdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaanCCCCCCCCCCCCCCCCCCCdaaaaaaaaaaaaaaaaaaaSCCCCCCCCCCCCCCCCCCClaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalACCCCCCCCCCCCCCCCCCCCCCCCCCCMxaaaaaaaaaaaaaaaaaaaaaaaaaaajACCCCCCCCCCCCCCCCCCCCCCSdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadSCCCCCCCCCCCCCCCCCCCCCCCCZjaaaaaaaaaaaaaaaaaaaaaaxACCCCCCCCCCCCCCCCCCCCCCCCAxaaaaaaaaaaaaaaaaaaaaaaaajCCCCCCCCCCCCCCCCCCCbaaaaaaaaaaaaaaaaaaadCCCCCCCCCCCCCCCCCCCSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadCCCCCCCCCCCCCCCCCCCSaaaaaaaaaaaaaaaaaaaaZCCCCCCCCCCCCCCCCCCBaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadSVVCCCCCCCCCCCCCCCCCCCCCCCCCZSaaaaaaaaaaaaaaaaaaaaaaaaaaadSZCCCCCCCCCCCCCCCCCCCCCCCCVVjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadmCCCCCCCCCCCCCCCCCCCCCCCCZjaaaaaaaaaaaaaaaaaaaaaadACCCCCCCCCCCCCCCCCCCCCCCCAxaaaaaaaaaaaaaaaaaaaaaaaZCCCCCCCCCCCCCCCCCCCaaaaaaaaaaaaaaaaaaaaMCCCCCCCCCCCCCCCCCCCdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabCCCCCCCCCCCCCCCCCCCdaaaaaaaaaaaaaaaaaaaSCCCCCCCCCCCCCCCCCCCbxxaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaxnVCCCCCCCCCCCCCCCCCCCCCCCCCCmjaaaaaaaaaaaaaaaaaaaaaaaaaaaxMCCCCCCCCCCCCCCCCCCCCCCCCCCCnxaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadACCCCCCCCCCCCCCCCCCCCCCCCZxaaaaaaaaaaaaaaaaaaaaaaxmCCCCCCCCCCCCCCCCCCCCCCCCAxaaaaaaaaaaaaaaaaaaaxdMCCCCCCCCCCCCCCCCCCCSaaaaaaaaaaaaaaaaaaadCCCCCCCCCCCCCCCCCCCbaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadCCCCCCCCCCCCCCCCCCCMaaaaaaaaaaaaaaaaaaaaCCCCCCCCCCCCCCCCCCCCCCCCCVAASSjxaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalBCCCCCCCCCCCCCCCCCCCCCCCCCCCSdaaaaaaaaaaaaaaaaaaaaaaaaaaalACCCCCCCCCCCCCCCCCCCCCCCCVCCSdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadACCCCCCCCCCCCCCCCCCCCCCCCmxaaaaaaaaaaaaaaaaaaaaaajZCCCCCCCCCCCCCCCCCCCCCCCCmxaaaaaaaadjSSmAVCCCCCCCCCCCCCCCCCCCCCCCCZdaaaaaaaaaaaaaaaaaaaMCCCCCCCCCCCCCCCCCCCdaaaaaaaaaaaaaaaaaaaaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaMCCCCCCCCCCCCCCCCCCCdaaaaaaaaaaaaaaaaaaaSCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCAmSlxaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadMZCCCCCCCCCCCCCCCCCCCCCCCCCCAjaaaaaaaaaaaaaaaaaaaaaaaaaaadSVCCCCCCCCCCCCCCCCCCCCCCCCCCAjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaxmCCCCCCCCCCCCCCCCCCCCCCCCAdaaaaaaaaaaaaaaaaaaaaaajVCCCCCCCCCCCCCCCCCCCCCCCCMdlSAACCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCSaaaaaaaaaaaaaaaaaaadCCCCCCCCCCCCCCCCCCCMaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadCCCCCCCCCCCCCCCCCCCnaaaaaaaaaaaaaaaaaaaaCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCVAnSddaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaajACCCCCCCCCCCCCCCCCCCCCCCCCCCMxaaaaaaaaaaaaaaaaaaaaaaaaaaajACCCCCCCCCCCCCCCCCCCCCCCCCCZndaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaxACCCCCCCCCCCCCCCCCCCCCCCCAxaaaaaaaaaaaaaaaaaaaaaajZCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCZaaaaaaaaaaaaaaaaaaaabCCCCCCCCCCCCCCCCCCCdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabCCCCCCCCCCCCCCCCCCCdaaaaaaaaaaaaaaaaaaaSCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCVZCCCASjdaaaaaaaaaaaaaaaaaaaaaaaadSZCCCCCCCCCCCCCCCCCCCCCCCCCCZSaaaaaaaaaaaaaaaaaaaaaaaaaaaaSZCCCCCCCCCCCCCCCCCCCCCCCCCCZSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaxACCCCCCCCCCCCCCCCCCCCCCCCAxaaaaaaaaaaaaaaaaaaaaaalZCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCSaaaaaaaaaaaaaaaaaaadCCCCCCCCCCCCCCCCCCCMaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadCCCCCCCCCCCCCCCCCCCMaaaaaaaaaaaaaaaaaaaaVCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCVASxaaaaaaaaaaaaaaaaaaxMCCCCCCCCCCCCCCCCCCCCCCCCCCCAjaaaaaaaaaaaaaaaaaaaaaaaaaaadMCCCCCCCCCCCCCCCCCCCCCCCCCCCmdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalBCCCCCCCCCCCCCCCCCCCCCCCCAdaaaaaaaaaaaaaaaaaaaaaajZCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCZaaaaaaaaaaaaaaaaaaaaSCCCCCCCCCCCCCCCCCCCdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaSCCCCCCCCCCCCCCCCCCCdaaaaaaaaaaaaaaaaaaaSCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCAnjdaaaaaaaaaaalBCCCCCCCCCCCCCCCCCCCCCCCCCCVSdaaaaaaaaaaaaaaaaaaaaaaaaaaajBCCCCCCCCCCCCCCCCCCCCCCCCCCZSdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalZCCCCCCCCCCCCCCCCCCCCCCCCbdaaaaaaaaaaaaaaaaaaaaaaSVCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCSaaaaaaaaaaaaaaaaaaadCCCCCCCCCCCCCCCCCCCMaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadCCCCCCCCCCCCCCCCCCCSaaaaaaaaaaaaaaaaaaadZCVCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCZSldaaaadSVCCCCCCCCCCCCCCCCCCCCCCCCCCAldaaaaaaaaaaaaaaaaaaaaaaaaaadSVCCCCCCCCCCCCCCCCCCCCCCCCCCZlaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaajZCCCCCCCCCCCCCCCCCCCCCCCCMdaaaaaaaaaaaaaaaaaaaaadSZCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCVCCZaaaaaaaaaaaaaaaaaaaaMCCCCCCCCCCCCCCCCCCCdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaSCCCCCCCCCCCCCCCCCCCdaaaaaaaaaaaaaaaaaaadSSSSSSSSmAAmAZCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCZSjmCCCCCCCCCCCCCCCCCCCCCCCCCCCbdaaaaaaaaaaaaaaaaaaaaaaaaaaajmCCCCCCCCCCCCCCCCCCCCCCCCCCVndaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaajZCCCCCCCCCCCCCCCCCCCCCCCVbdaaaaaaaaaaaaaaaaaaaaaaSVCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCVAAAAmSSSSlSSSdaaaaaaaaaaaaaaaaaaadCCCCCCCCCCCCCCCCCCCMaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadCCCCCCCCCCCCCCCCCCCMaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadddSSSmAZCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCBSaaaaaaaaaaaaaaaaaaaaaaaaaaaalZCCCCCCCCCCCCCCCCCCCCCCCCCCZlaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalVCCCCCCCCCCCCCCCCCCCCCCCCMdaaaaaaaaaaaaaaaaaaaaaaSZCCCCCCCCCCCCCCCCCCCCCCCCCCCZAASSldxdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaSCCCCCCCCCCCCCCCCCCCdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaMCCCCCCCCCCCCCCCCCCCdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaddjSnmVCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCAjaaaaaaaaaaaaaaaaaaaaaaaaaaadmVCCCCCCCCCCCCCCCCCCCCCCCCCCmjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaSZCCCCCCCCCCCCCCCCCCCCCCCCmaaaaaaaaaaaaaaaaaaaaaaaSCCCCCCCCCCCCCCCCCCBAbSjxaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadCCCCCCCCCCCCCCCCCCCSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadCCCCCCCCCCCCCCCCCCCMaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaxjSmACCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCSdaaaaaaaaaaaaaaaaaaaaaaaaaaalACCCCCCCCCCCCCCCCCCCCCCCCCVVSdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaSVCCCCCCCCCCCCCCCCCCCCCCCVSaaaaaaaaaaaaaaaaaaaaaadSCCCCCCCCCCAmSjxaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaSCCCCCCCCCCCCCCCCCCVdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaSCCCCCCCCCCCCCCCCCCCdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaxjSACCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCAlaaaaaaaaaaaaaaaaaaaaaaaaaaadSZCCCCCCCCCCCCCCCCCCCCCCCCCCASaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadSZCCCCCCCCCCCCCCCCCCCCCCCZSdaaaaaaaaaaaaaaaaaaaaadMCCCmSldaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadCCCCCCCCCCCCCCCCCCCnaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadCCCCCCCCCCCCCCCCCCCnaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadlbBCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCnxaaaaaaaaaaaaaaaaaaaaaaaaaaaxmCCCCCCCCCCCCCCCCCCCCCCCCCCCnxaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaSVCCCCCCCCCCCCCCCCCCCCCCCZSaaaaaaaaaaaaaaaaaaaaaaddaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaMCCCCCCCCCCCCCCCCCCCdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaMCCCCCCCCCCCCCCCCCCCdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadSACCCCCCCCCCCCCCCCCCCCCCCCCCCCCZSaaaaaaaaaaaaaaaaaaaaaaaaaaadlBCCCCCCCCCCCCCCCCCCCCCCCCCCVSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaSZCCCCCCCCCCCCCCCCCCCCCCCZSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadCCCCCCCCCCCCCCCCCCCbaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadCCCCCCCCCCCCCCCCCCCMaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaajSmCCCCCCCCCCCCCCCCCCCCCCCmjaaaaaaaaaaaaaaaaaaaaaaaaaaadMZCCCCCCCCCCCCCCCCCCCCCCCCCCmjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadmCCCCCCCCCCCCCCCCCCCCCCCCCSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaMCCCCCCCCCCCCCCCCCCCdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabCCCCCCCCCCCCCCCCCCCdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaajnZCCCCCCCCCCCCCCCCZbdaaaaaaaaaaaaaaaaaaaaaaaaaaalmCCCCCCCCCCCCCCCCCCCCCCCCCCVMdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadmCCCCCCCCCCCCCCCCCCCCCCCCCZlaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadCCCCCCCCCCCCCCCCCCCSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadVCCCCCCCCCCCCCCCCCCbaaaaaaaaaaaddjxdSSSSSSSSSSSSSSSSSxdxdxaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadSACCCCCCCCCCVZlaaaaaaaaaaaaaaaaaaaaaaaaaaadSBCCCCCCCCCCCCCCCCCCCCCCCCCCCbjxdjdjddjdjxxdxxdjxdjxdjdjxxdjdjdjxxdjdxdjxdjxdxxdjxxdjjdxxdxxddjxdjdjdjxxdjxaaaaaaaaaaaaaaaaaaaaaaaaaxjACCCCCCCCCCCCCCCCCCCCCCCCCCCVZjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadxxddjxjSSSSSSSSSSSSSSdjdxxaaaaaaaaaMCCCCCCCCCCCCCCCCCCCdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaMCCCCCCCCCCCCCCCCCCCddxjSbmABCCCCCCCCCVCCCVCCVCCCCCCVCCCCCCCCCZAmSSlxdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadlACCCCVCMxaaaaaaaaaaaaaaaaaaaaaaaaaaadmCVCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCVCCCCVZCCCVCCCCCCCCCCCCCCCCCCCVCCCCZSdaaaaaaaaaaaaaaaaaaaaaaxACCCCCCCCCCCCCCCCCCCCCCCVZCAldaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaddlSSAmACCCCCCCCCCCCCCCCCCCCVCCVCCCCCCCVCZAASSllCCCCCCCCCCCCCCCCCCCbaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaCCCCCCCCCCCCCCCCCCCCCCCVCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCAmSjxaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadlAZSaaaaaaaaaaaaaaaaaaaaaaaaaaaalZCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCVSaaaaaaaaaaaaaaaaaaaaaaajmCCCCCCCCCCCCCCCCCCCCCBSdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaxjSmAVCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaanCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCVAMjxaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadSZCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCVSaaaaaaaaaaaaaaaaaaaaaaadmCCCCCCCCCCCCCCCCCbdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadjSAZCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCMaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCAnjdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaajACCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCVSaaaaaaaaaaaaaaaaaaaaaaadACCCCCCCCCCCCmjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadlSmCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaMCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCZASdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaSBCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCBlaaaaaaaaaaaaaaaaaaaaaaajmCCCCCCCCSdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadSmZCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCAldaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadMVCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCZjaaaaaaaaaaaaaaaaaaaaaaalVCCCZjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadlmVCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaanCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCZMxaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalBCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCZjaaaaaaaaaaaaaaaaaaaaaaajmjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaajSZVCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCbaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCnlaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadSZCCCCCCCCCVCVCCCVCCCCCCCCCVCVCCCVCCCCCCCCCCCCCCVCCCCCCVCCCCCCCVCVCCCVCCCCCVCVCCCCCVCCCCVCCCCCCVCCCCVCCCCVCCCCCCVCCCCCCVCCCCCCCVCVCCCCCCVVCCZlaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalmZCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCVCCCCCCCCCCCVCCCCCCCCCCCCCCVZCCCCCCCCCCCCCCCCCCCCCCCCdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaanCCCCCCCCCCCCCCCCCCCCCCCCCCCVCCCCCCZAAASSSSSjxjdjdxxdxjSSSSSmAAVCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCVCmlaaaaaaaaaaaaaaaaaaaaaaaaaaaSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSxaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaajACCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCVmAAMSSSSldxdxdxxxdlSSSSSmAAZCVCCCCCZCCCCCCCCCCCCCCCCCCCCCCCCSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadCCCCCCCCCCCCCCCCCCCCCCCVCCZAMSSxdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadxlSMAZCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCMjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadMVCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCZAmSlxxaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaxxjSSAVCCCCCCCCCCCCCCCCCCCCCCCCdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaaeaaaaaaaaaaaaaaaaaaaaaMCCCCCCCCCCCCCCCCCCCCVmSSxaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaxlSmZCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCBSdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalZCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCVmSlxaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaxlSmZCCCCCCCCCCCCCCCCCVMaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadVCCCCCCCCCCCCCCCVASxaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaxSmZZZVCCCCCCCCCCCCCCCCCCCCCCCCCCCCMxaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadMVCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCVASjdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaxSmZCCCCCCCCCCCCCCdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaanCCCCCCCCCCCVZMjdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadjnZCCCCCCCCCCCCCCCCCCCCCCCCCCCCCAjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaxnCCCCCCCCCCCCCCCCCCCCCCCCCCCCCVmSdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadlMBVZCCCCCCCCbaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadVCCCCCCCCCmjdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaaaaaaaaaaaadlmCCCCCCCCCCCCCCCCCCCCCCCCCCCCBlaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadACCCCCCCCCCCCCCCCCCCCCCCCCCCCAldaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadlmZCCCCCCCdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabCCCCCCZnjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaajMVCCCCCCCCCCCCCCCCCCCCCCCCCCVjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaxACCCCCCCCCCCCCCCCCCCCCCCCCCVMjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaajMZVCCCMaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadZZVCVMxaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaxnVCCCCCCCCCCCCCCCCCCCCCCCCCmxaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadmCCCCCCCCCCCCCCCCCCCCCCVZCCMxaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadbVCCdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamVVASdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaajmCCCCCCCCCCCCCCCCCCCCCCCCCmdaaaaaaaaaaaaaaaaaaaaaadxjdjdjdxxjdxxxddxxxjdxxxjdxxdjdxxxdxxjdxxjdxxjddxxxjdxxxjdxxdjdxxxdxdjdxxjdxxjddxxxjdxxxxjdxdjdxxjdxxxdxxjdxxxddxxxjdxxjdxxxdxdxxjdxxxdaaaaaaaaaaaaaaaaaaaaaaaaaSCCCCCCCCCCCCCCCCCCCCCCCCCZlaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaajmMaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaZSdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadSVCCCCCCCCCCCCCCCCCCCCCCCVlaaaaaaaaaaaaaaaaaaaaadZVCCCCCVCCCVCCCCCCCCCCCCCCCVCCCCCCCVCCCVCCCVCCCCCCCCCCCCCCCVCCCCCCCCCCCVCCCCCCCCCVCCCCCCCCCVCCCVCCCCCCCVCCCVCCCCCCCCCCCCCCCCCCCVCCCCCAdaaaaaaaaaaaaaaaaaaaaaaajCCCCCCCCCCCCCCCCCCCCCCCCZMdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaelZCCCCCCCCCCCCCCCCCCCCCCCAdaaaaaaaaaaaaaaaaaaaaaZVCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCAaaaaaaaaaaaaaaaaaaaaaaadACCCCCCCCCCCCCCCCCCCCCCCZSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaajVCVCCCCCCCCCCCCCCCCCCCCClaaaaaaaaaaaaaaaaaaaaanCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCVZnaaaaaaaaaaaaaaaaaaaaaaajVCCCCCCCCCCCCCCCCCCCCCCBlaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalZCCCCCCCCCCCCCCCCCCCCCCAaaaaaaaaaaaaaaaaaaaaaMCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCnaaaaaaaaaaaaaaaaaaaaaaaMCCCCCCCCCCCCCCCCCCCCCCBlaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalCCCCCCCCCCCCCCCCCCCCCCBdaaaaaaaaaaaaaaaaaaaanCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCnaaaaaaaaaaaaaaaaaaaaaadBCCCCCCCCCCCCCCCCCCCCCCSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaSCCCCCCCCCCCCCCCCCCCCCVlaaaaaaaaaaaaaaaaaaaaMCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCbaaaaaaaaaaaaaaaaaaaaaadVCCCCCCCCCCCCCCCCCCCCCmdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaxZCCCCCCCCCCCCCCCCCCCCClaaaaaaaaaaaaaaaaaaaaMCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCMaaaaaaaaaaaaaaaaaaaaaajCCCCCCCCCCCCCCCCCCCCCVjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaMCCCCCCCCCCCCCCCCCCCCVSaaaaaaaaaaaaaaaaaaaaBCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCVCCCCCVCCCCVVCCCCCVCCCCVZCCCCCCVVCCCCCVCCCCCVCCCCCVCCCCVZCCCCCCCCCCCCCCCCCCCCCCCCCCCCCAaaaaaaaaaaaaaaaaaaaaaalCCCCCCCCCCCCCCCCCCCCCmaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalZCCCCCCCCCCCCCCCCCCCCSaaaaaaaaaaaaaaaaaaaaZCCCCCCCCCCCCCCCCCCCASSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSACCCCCCCCCCCCCCCCCCCBaaaaaaaaaaaaaaaaaaaaaelCCCCCCCCCCCCCCCCCCCCCSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadBCCCCCCCCCCCCCCCCCCCVjaaaaaaaaaaaaaaaaaaadVCCCCCCCCCCCCCCCCCCZdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadCCCCCCCCCCCCCCCCCCCCxaaaaaaaaaaaaaaaaaaaaalCCCCCCCCCCCCCCCCCCCCVdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaBCCCCCCCCCCCCCCCCCCCCjaaaaaaaaaaaaaaaaaaalCCCCCCCCCCCCCCCCCCCnaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamCCCCCCCCCCCCCCCCCCClaaaaaaaaaaaaaaaaaaaaadCCCCCCCCCCCCCCCCCCCCBxaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaBCCCCCCCCCCCCCCCCCCCCdaaaaaaaaaaaaaaaaaaaACCCCCCCCCCCCCCCCCCCdaaaaaaaaaaaaaaaaaaaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaaaaaaaaaaaaaaaaaaxCCCCCCCCCCCCCCCCCCCAaaaaaaaaaaaaaaaaaaaaaaVCCCCCCCCCCCCCCCCCCCBaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaBCCCCCCCCCCCCCCCCCCCAaaaaaaaaaaaaaaaaaaadCCCCCCCCCCCCCCCCCCCmaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamCCCCCCCCCCCCCCCCCCCxaaaaaaaaaaaaaaaaaaaaaACCCCCCCCCCCCCCCCCCCBdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadACCCCCCCCCCCCCCCCCCCMaaaaaaaaaaaaaaaaaaabCCCCCCCCCCCCCCCCCCCdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaCCCCCCCCCCCCCCCCCCCMaaaaaaaaaaaaaaaaaaaaalVCCCCCCCCCCCCCCCCCCVdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadCCCCCCCCCCCCCCCCCCCCdaaaaaaaaaaaaaaaaaadCCCCCCCCCCCCCCCCCCCnaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaMCCCCCCCCCCCCCCCCCCCdaaaaaaaaaaaaaaaaaaaadVCCCCCCCCCCCCCCCCCCCxaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaajCCCCCCCCCCCCCCCCCCCAaaaaaaaaaaaaaaaaaaaMCCCCCCCCCCCCCCCCCCCaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaVCCCCCCCCCCCCCCCCCCMaaaaaaaaaaaaaaaaaaaaanCCCCCCCCCCCCCCCCCCCSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamCCCCCCCCCCCCCCCCCCCxaaaaaaaaaaaaaaaaaaxCCCCCCCCCCCCCCCCCCClaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalCCCCCCCCCCCCCCCCCCCxaaaaaaaaaaaaaaaaaaaadCCCCCCCCCCCCCCCCCCCAaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadVCCCCCCCCCCCCCCCCCCAaaaaaaaaaaaaaaaaaaaBCCCCCCCCCCCCCCCCCCmaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabCCCCCCCCCCCCCCCCCCZaaaaaaaaaaaaaaaaaaaaabCCCCCCCCCCCCCCCCCCCxaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaSCCCCCCCCCCCCCCCCCCCdaaaaaaaaaaaaaaaaaaSCCCCCCCCCCCCCCCCCCVaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaVCCCCCCCCCCCCCCCCCCSaaaaaaaaaaaaaaaaaaaaaZCCCCCCCCCCCCCCCCCCMaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadCCCCCCCCCCCCCCCCCCClaaaaaaaaaaaaaaaaaadCCCCCCCCCCCCCCCCCCCdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadCCCCCCCCCCCCCCCCCCCdaaaaaaaaaaaaaaaaaaaalCCCCCCCCCCCCCCCCCCCxaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaanCCCCCCCCCCCCCCCCCCAaaaaaaaaaaaaaaaaaaaCCCCCCCCCCCCCCCCCCClaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalCCCCCCCCCCCCCCCCCCCaaaaaaaaaaaaaaaaaaaaanVCCCCCCCCCCCCCCCCCZaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalCCCCCCCCCCCCCCCCCCCaaaaaaaaaaaaaaaaaaaACCCCCCCCCCCCCCCCCCMaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaSCCCCCCCCCCCCCCCCCCAaaaaaaaaaaaaaaaaaaaaaVCCCCCCCCCCCCCCCCCCSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaCCCCCCCCCCCCCCCCCCCxaaaaaaaaaaaaaaaaaaSCCCCCCCCCCCCCCCCCCAaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaACCCCCCCCCCCCCCCCCCSaaaaaaaaaaaaaaaaaaaadCCCCCCCCCCCCCCCCCCCxaaaaaaaaaaaaaaaaaaaaaaaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaZCCCCCCCCCCCCCCCCCClaaaaaaaaaaaaaaaaaaSCCCCCCCCCCCCCCCCCCmaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaACCCCCCCCCCCCCCCCCCSaaaaaaaaaaaaaaaaaaaaxCCCCCCCCCCCCCCCCCCCaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaACCCCCCCCCCCCCCCCCCSaaaaaaaaaaaaaaaaaajCCCCCCCCCCCCCCCCCCCaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaCCCCCCCCCCCCCCCCCCCxaaaaaaaaaaaaaaaaaaaaxVCCCCCCCCCCCCCCCCCVaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaaaaaaaaaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaACCCCCCCCCCCCCCCCCCSaaaaaaaaaaaaaaaaaadCCCCCCCCCCCCCCCCCCCaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaCCCCCCCCCCCCCCCCCCCdaaaaaaaaaaaaaaaaaaaaSCCCCCCCCCCCCCCCCCCAaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", ",2:t:t4t,t,,,,:,:t:t,t22::2:2424,:,,,;;,:,;::1::::::::::::::,::::,,,,2>,,2,::,4,,,,;2>:>:::,4::::t,,,,;:>>4:::2:222::21::11:::::;::=-::>::::::1:::1:::::::::1::1:4:1>1>,1>2::,::4,,4::,,,,,:>>,:,2,:2,4,,:::2>,:,,t2t22::1>>2::2:2:22::2:,:,23tt2,tt2,,,,,:2:,1,21,1>1:>::>:22,:4,2::22::22:1::111111:::1:111111>>>>::>,1:111>>111>::>::13111:111>:::::>,:>>>;:::::::4::::1::11:1:11:2:2222:1::111111131111:1:1:11:::12:111:::::;;<::>>::>:1:>11:11>>131>>>,22:::;;;::>::::>:>,:::::::;::>:::>,:::::::::::::::::::::::::::::::::", "2,2,22t2:4,,tt,:2::2:22:22::,:,,,:44,,:,,::::>>:::4::::4:4:::>:::::2,>21,22::,::,,,,:>>>2t:42,,:,,22,t:::,::>121222:221:1111-:::::=:::>1>:::::1>:1:1::*::1:1:1::::::>,>1>21>;4::2,4,,,:,1,,,:>,:::::,,2,,:,22,,2,,2232,::>1>>2:,222222:22,:42t2t,:t4,,,2:::21:2:21::>>:1::::22,:222:2:2:222,1:::1311111::111::111>>>:::>1>111>111>:111::>1111111>::4:::1::>>:<:>:2::4:1:111111:11::22::,22:::1121111111111:111111:111121:11::::::;:::>::>:1::>:1>11>1211>1>>,2,,::::>>>::>>>>>>:::>>,:::>>:::>,:::11::::::::::::::::::::::::::::", "2,:,2,:4,t,t,,,2242::t2:2:2:::,,::,:4,;,:>:4::>>:4::::::4::::1,:,,:2,>>,222:::;:,,,:::1::t:,42:,2:,,4t:;>,:::>1:111::21::11:::-:;;::::>1:::::::::::::::::1:::1:::4::1>>,::,>,4::::4,;,:t,,,::>>>::,4,,,t,::t:2,,,,2222::11>>>2>::2222::22::,2tt2t,,t22,t,::22:222>>,>>>,,,:2:224,22,2:,:,:2,::::1111:1:1111:::1111>>:<>>111:::1>>>:::1>:>11111111::::>:::>::;:::>>:>:::1111:1:1::::22:,2222::22:1111111111:111:11::11::::111:::4=4::::::>>>::1>1>1,:>12>2>>>121:::<>>::::,:>>>:,:>>::>::>::::,:::::::*:1:::::::::::*::::::::::::", "2:,:,,t4:tt4,::,2:4,22t22222:::::,:t;;;:2::::::,:::::::4::::::::::,,1>>,>,,:<::::,2::,:::2:,::2:,2,2:2:;>>::::11::1:2::::11:::::;;:-::>1:1::>>1::1::::*:::::::::::::1:>>:2,,:::::;,;,,:,:,,:::1>::::,::2,:,,2,,:2,22t12:>>>>>:>:2::2:2:32::222322,,,t22,,,:,,2212>1,>>>1,>:2:22::,222:,2,2221::21111:1:11:11:1131>:>::>>1>:1111>11::::>:>11111111:;::>:1>::::;<>:>:11:1:1:1:111:1:2212:2t22::2:21111111111:11111111:1111:111::::;::::>>>>>>1::>1:11>,2321>>,12>>:::>>>>:::,:,:,::>>,:::22:::::::::::::::::::::::*:::::::::::::::", ",,,:2::,4:t4,;2224,,,22:t2:224t::,4t,44,,:::::::1:::::::4::::1::;:,t,,11>>>>:::,:,,::1:::24::,2,2,,:2,4::>::::1:1:1:11::::1:::::4;4::>11:>:::1::1::::::::::1:1::4:::>>2,2:1::4::,4,,,::,,,,::>1>1::2:,,,,:,,2::,>2t222>:1>>>>>:::2:222:22:,:122t,,t,222,:::,>>>>21>2:>,,,>,122:::,2:::21:22::::2111111:1:111:11111>>::>1>>>11>1>:1:::11::1111>111::;>::::::::>:::::1:::::11111:11:122,222,::22::1111111111:1111:111111:::111:::4::,:>>>>11::>>>1>,22,12>>>>112>::::>,>;::1,::1:,::::::::::::::>::::1::::::::::::::::::::::::::1:", "2::,:24t2t:224,t2::,,22,:22:2:422:,:,;:2,,::4:,::::::::::::::1:::,:222,>2,>>:,:4:,242::::2:2:22,2,,t4,2:,1,4::::121:1::::111:::::::::>11:1::::1:1:::::::1::1::1:::::>>2>:21:::,,:,t4:>:2,:,:>:1>:2::::2,:2,,:2::2:,2t:::1>:2>>:>2:2::,:22,,2,222,,t,t2t,,:::>1>>:>>:,>>11:>11>>:,2t:2::::222,:::1:11:111111::11111>>>::11>>11:11:11::1>:>1>111111:;;:::::>::::><>,:11::2111122221112222:,,:,::2:11111111:111:111221::11:1111::4:::,,>>,>:11:>>>>1122221>>>1>12>>:::>>>:::::,,:,,:::::>::::::4::::::::::-::::::::::::::::::::::::", "t:,,t:t44:tt2,,22442,:22:2:22:4,24,,,4:,,,::4:::::::::::::*11:::4:,,,:,>11,:::;::,t,:1:4:2:::22,t,,,,,:>21>:::1:12::111::1:::::::;4>:>11::>:::>>1:::::::::::::1:::::>222>>>:::>>:,4,:::1,::,>>1>>,::,2:2:,,222>:,,,222::1:12,,:>11222,::,,:2>222:t,:2tt,2,::::1>>1:1>>>,>>::>222:2222:,::,,22:>>::1:::11111::1111>:::>>1,1111>1>1:1::1>::1>111111::::::11::::::>>::11::::2112222,1:1222::11,22:211111111:11111:12221111:1121::*:4:,::>1>>>1>:>>2,2:2111>,11>:1:1:>>::>:::>,,:,,::::::>::>::::2:::11::14::::::*::::::::::::::::::", "2,,,2::,tt2:4::22:,t:,22::,22::,2,24:,4:::::::::::::::4:44::::11:::t1,>>,,>::::4:,:,2:22::t:4,,22::,,::42,:::::1:2:1:11::::1:::-:;:::>1>>11:>:>>::::::::::::::1::::>>:2>222>:>214,,4:,,,,,:::>,>2,::::224:,,2>>2,2,222,,:21:2::>:122222:,:22222::,,,222:,::,::>:>1::>:21::>1:22::222::,2::2,2:2>21111:::1111111111>::>>>11111>1111:1:>:111>111111:;:>::::1:::::>>::,1:::2:11:12:1>>122,222::::221:1111:111:11111::2111:::11:::::::2,:>:;>:>>>>>1,2:,221>,11,>1::::<,:>::>>>>:,:::1:::>>:>>::::::::::::::::4:::::::::::::::::::::", "2,2t224,t,,,4,,:242t:2,::222:,2,,,4t4,:,2:::4:::::::11::4:,4,:1::4:2,:::>2::::::,2t:::,:,2::422,2::t:,42:2::,:1::1:::2::::1::1:::4*:1111:1>:>>>:1:::::::1::::11::::>::11,,>>:,1>,,,4,:,:,::::>>>:2::::,:,,,,,,1:,,:tt,>2:222::::112:22:::,,2222,,t,t2,2:::,>>,::>1>>>>:1:2::32,4:22:2:t::121,:>>111:1:1111111:1111::::11,1111>111:1:11:111>11>111::::::::::>>:::1::,>::1:2222:222:>121:,3,,:22::11::32:1111111:1:1>>>>:>111::::*:,,>:,::::t,>>>>,12:22,>>,1,>1:::::,:::,>>>>>,:,:>:::>><:::>:1::::::::::::::*::::::::::::::1::::", "2:t22::4,;4t:2,::24,222,:,,22:4tt4,,:,,4:>::4::,:::::::::::::::1:,:,,,:2>>:::::4t,,,:2:2:,,:4,22:tt:2:4t2::::::1:111:2:::1:1:::::::::111111:>>1:::::*:::::::::1::::11:>2,,,>:>,1244::,,2:>:<>>1>2:,:,,,,:::2,,2:,:222>14:2:224:>:::2221:2:,:2,2:t:,t2,t:::>,:11:>11:1::,:,:222,,:22:2:t2,2211:1::::11:1:1:1111:11111::1:>111>>>11::::1:111>11>111::::::1>:;:>:>>>>>,>::1222222:2,:>2>1>,:::::,2:113:21:31:11::11112>>>1::1:1::::::::,:111:,,,1>1,,>>221>>1>2:,1::::,,::::>>,,,:,:>:::>>::>:::>:>1::11:::::::::::*:::::::::::1::1", ",:2t22:4,,t4:,2,,::,:22::,:2,2:,2,t,4,42:11:::::1:::::::::::,,::::,22::2:21:::::42t:,:,::2,:::2:22:2242:,:::4:1::1112:::::1:1:::;::::1111:1:>:1::::*:**:::::::11::::>:>2,::,>11>,,:,,::,,>::>>>>:>>:,2,,:2,2:22,::222>>:2,:2,::,1222222:,42222t,:tt2,,22>:::1::1:,,>>>::2::tt2,::2::2,2::12:::>:1:112:::11:1>::11>1::::111111>>111::::11111:1:1111:::1::>::::::>>>,11::1:2222,:2,:23,1112,12::22:11222121:11::11112211:1:11:1::::,,,>>::>,2,::1111>2322,,>:,11:1:,:,,>:,:>>>,,:,>>:::::::>:::>:>::::::::::*:::::::::::::::::::::", ",::2224t;:2,,:,2>:,,:2t:::2t,4,t,:t2,4:,:1::::::::1:1::::::::,::::42:2:2>2>:::::::::::,::::::::2::,t4t:2::2::::21:11:::::1:1:1:::4=::111:111>11::::::::::::::11:::::::>:,:2,:,,,:4:,:::,,>::>:>>>>:2:,::4:22,:2,t22222>>::22,::>:22:,222::,22tt,:::::,2,>:11:1::>11>11:,::::,,,::222t42212211::>:11:1::2111:1111311:>:::1111>>1>:1:::::::1111:111:::1::1>>::::->>,:>1::::22:,:2:>:,21,1,,11:::::113:33:111:1:111::>>11::11:1::*::;:,1,1:>:,,>>121:>2232:>111,11::,:,,::,>,>>,:,::>>:>::::>:::::441:::::4::::::::::::::::::1::1::", "2::2:::4,:t,:,,2,;:,22,::2222:t4:,t2,,::::::::::1::1::::1::::11::::,222:::::,:::::,:2::1:t:2:4,:,,,22:t::2:::::11::::::::1::11:::::::111::111:1:::::::*::::::1:::;::::>::,,2:::::,:2,:t:,>::>>>>>::2,,:,:,,2,,,,2:222,>2:2::,>:t>211:22:::::,2t,,22>,:221:>>1:::>,,>,>>>::::22t,:::22,t::2221::::11:11:211111111111:>-11>11111111:1:::::>1::11111::::::::>::>::::2:>1:::41222:111::,1,:12:2::11::111:22::1:::1111:1111::1:11::4:::,:,,::>:,2>>121,12122>1>:,11>:4::,::,,>,>,5>>>>::::>:::>::::4:::1:::*:::::::::::::::::1::::1::", "2:::2:4t4,::,:t2,:,2:22>::,:,,:,4,,t,4,4:::2:4::::::1:::::::4:::::::22:2,,22:,::4t4,,41:2::::::2,:2t:2:::22::4:21122:2:::::1::1::-:::111:11::::::::4::::::::::1:::;:::>::,::4:2,:4t2,::,:,<:>>>>>:,:,,,,:::4:,:,,2222::::22:,,42>22222,2:::2,,22:4:2:,,214>212::>2>,1:::::2t,t2:,2222:222t221::1::11:12::11111:11>1>>:>>>11111:111::::::111:11111::>:::::>::::::,::::1>1,212211:1::>,>1,::22:::11:1322111:11:1111:11:11:1:1:::*4:1:2,::1>>2,1>112:,2122>::1>,12::::::::,>,,>>5>;::::>:>::,:::::::::1::::::::::::::::::*:::::1:::", "t:::2:::,,2::,222:,2,,2,::t::,,,2t24t4::::::::::::1::1:::::,1:::::::,>2>22::2,:4,,,,2:>:,::::::::2:22::t:211:::2:::242:4::1:1::::::::1111:111:::::::::::::::::1:::;>::>:::::2:::,4,4,:t2,5>:>>:::>::,,,::2:::,2,,42,2>:,2:2>>::2>2221,>>42t2,,22,4::::,,2::2:1:1>2,,1,:>:::2,t::422222::>2321:>>1::1:2:21111:>>13111>=:>>>111>>:1:1:::1::1::11111>::::>:>>>:::::,::2>1>>22:22:112,:,2>2,2:111:2::13:3:1:11:11:11111::1:::11:::::;,:t>>1:>>2,11:>::12222::1>>>,1::::,:::,>,>::>>>:>>>>>:>>1::::::::::::4::::::::::::*:::::::11::1", "t:2::2::4,::,:,t;::,:22,::22,,:,:,,,::4:1:11:4:::::::11:::4:::::::::>22>:22,2,,:4,:2>:2>2:2:::4,:2,,,,:4:21::4:::1:21:2::1:11:1:1-::1111::11::::*:::4:*::1:::11:::::>::::::42,,2::,:::::,>::>>::>:::,,,:,,2,2::,,222>:>,:2>>::;:2222,>,:4t:2,2tt,,,2::,,::221::1:,:,1::12::242t:2t22::22:212>>>:11:3:2::11111>111111>:::>111>>>11:::1:1::111>1111>::::>:>::::>11,,2>2,:>::2:111:,,>>>>1,::111::::::1:3131111111:>:1::1::::11:::::,:12>>1:>,1:,>,,:22>>1>,>>:>,,>:,:,,::,,,,>:::>>:<::::>:::::::,::::::::::*:::::::::::::::::::1:", "t2:::24,42,:::22::4t:2t:2:t2,,,2,,,:::::,:::::::::22::::2:4::>:::::::22,,,,:2,:4:t2,:,2::::t:::::2t4,::,,22::4::>>>>:1:::>>>>::::=::::11:11:::>::::*::::::1::1::::>::::::>>;>51>:::,,4:,,,::>:::>>>:,:,>,::,,,:12:22:::1>>21::,22222:t:::2,:2:2t,42,:2,,,::,::::12:2,4:2,:::,,,:t,22:22::2221:1111:111:11131::111111::::>>>>>>1>:::::1:1:11:11111:::::::::>>:::::,4222:,::2:22::,,::,1>>2:1>1::,1:1:2213:111:1111:1:1:::1:1::::::,:,,1,:>>>1,:11::11:1>1:1:12:2>::;,::,:,,,:::>:,::::::>,,::::::::::::::::::::::::::::::1:1::::1", "2::22:::4t::t::,2:2,2:2,2:t:2,4t,,t4,44,:,22,4:::::::2::::4::>1::::::2222:2,2,>24::2:,2:,22::::,,,22t::;4,2:4::>>>>>::::::>11:>::::::::1::1:>:>::::::::::::::1:::>>:::::>-:;>>5>:4:::>,,>11:>::::>:::,,::,:>:,,:4222,:>>:>11,:4222222:2:42,,,,2:,,t::,,,>:>,1::1:2:2,,:214:::t,::22:2,2:2:11>:::::111:11:3111::11111>-:>>>>>>>>>:11:1:1:::1111111:::::::::>>:::::::,:::::,2:2::2,,::2221221>::221::2222111:1111::1:1:11:::1::::*;:,:,11::>,,11:1111111>1:::>:,,:::,,:2,2,:,,>>:2:,>:::>::1>::4:::::::::*::*::::::::::::::::1:11:", ",2:2,:::::2tt2t:2::2:2t,2222,:,t,,3:t44:222::,4::::::t:::::::11::::,t222:2222:>:42,2,,::222::::::22tt:,:::2,::4:1>>::::::::>>>::::=:::1>1:::::>:::::::::1::::1:::1:::::>>::->11::,4:::2,>1::>::::::::,,:,:,>>1>::,22::,:>>,::4:>222::,2::222t2t:4t,,::2,>:>>1:::>2:2:::,2::2,,,4:2>>:2:::>1>>>:>:11111:11311:211111>:::>>>>11:1::1:11::1:11111111:::::::>:::::::::::,,2:::222:2:::::2221111:::111123221111:111:::11:11:1:11:1::::,::,1>:2:,>1::2:13::1>>>:,:1:2:42:,,:2:,:,::,2::::::::>:>>:::4:::::::::::::::::::*::1::::::::::", ":,:222,,:t:2::t:24,t::2,:::22:,t,2t,,:::::,:2:4:t::::2::::4::::::::>,22::22,:2>:4,:22::,22:t:4t2::2tt:,::2,>:4::::>>::>:::::>1::::=::::>:1::>:>:::::*:::1:1::11::::::::>:::::,2:4,2,,::,>1:::::::1:1:,,::,::,>>>::2::11:>>>:2::2222:,,2:::,,t::t,4,t,,,;>42>::::,,:::::22:::4,2:>>>2:22::11>:>1:::11:1111:1::22111:::->>>>111::11:1:::1::::111131:**::::>::::::14:::2::::,:222:22>>>>21:>1:1::1:::223111:1111:1111:1:11:111:::*::::1,2>,:2,>>1>11,1>:1:::>>1::,::4:::::,,,::::,:,::::::::>::::::::::::::::::*:::::::::::::1:::::", "2::2t2:4,4:,2:,::2,t,:2t,::2244tt2tt:442::1:::::::::::2:2:::::1::4::,22:1:212,:::,,:2>>>:::t4:2:422tt4:::2>>::42::1>:>::::::::::::;;>:::::::>:::::::*:::::1::1:::::::::>:::4:,,>,,4,,:>,:1:>::::1:;>>,:::,1::,::,:22>::2>>::1::>22::22,:4,,,42,::,t,:,,,:::,:::111:22::t,:t:,,::>>>2>>1::11:1::1:11111113::::2221>1>::>>>>>11>:1:11:1:1:1:1:11131::::::::::::::::::,:,:::::2222:>::>111::11:::111:1:22211111::1111:111:1:11:1:*:::,,,>>>:::,22:21>11:1>>:>,::22,::4,,:2t,,,:4::,:::,24:::1::::::::::::::4::::::::::::::::::1:::1", "2,:,222:,,,::t:,2tt:::,2,,:2:2,,,,34t24:12::24:4:::::2::::4:::2:::::,222,2,::;::;::22>>2222:::4t,2222::2:>>>:44::::1::>:::::::::>=;:>;:::11:1::::1::::::::1::1::::::::::::,:>,>>2tt,::2,:::::>::11>>>>,:::,,11>>,:,,2:::>>>:,>:>:2:,,,2:::,22:,,:2,,,:,:::>>1:::22:,t,:t::::,:4::>1,11:::>111>:11111:111311211:3111>::1>1>111>:>1::1::1::::1:1111:::::::>:::>::::::,:,::2::22::22>::>11>>1:1::::1:1222211:111:111::::1:::11:::::::1:,>>,22:,2::>112:1:1:>:2>:22:4:2:,::t,2,:,:::::::::,;,::::::::::::::::::::::::::111:::::::1::", "t,:222,:4t,,:,,,,4,::,::2:22::tttt:,tt422>:2:::::22::2::::::::::::::22t2:22,2:::::2,:::222:::::,2,2t2,4:,,>>>:::::>1::>:::::>:::::=;>;:::11:1:::::::::*:1:1:1111>::::::::;;;:,,>,4:,:,,,,::::>::>>>>>,::1,2:1>>>,,,2>::1,,:>>::>2>,,:22:,:422,:,42:,:,,,::::1:::22::2:::,:42::,::22,1>1::11::1:::1111111:3:331221>>>:=>>1>>11>>1::111::1::11111111:4*:::>:::>::::,4:,::::2::2:21,>:>>2>11>21:::::1:122111::11::1111:1:11:1::::::::2,11>>:22,2>2:1,1>1:11:>>21>22::2,::,22t,,:2:1>2,::::,,:::,::::::::::::::4:::::::1111::1:::1::", "2,2t2::442,t,,:t,:tt::2:,::2:::22:,t,4422:,>224:::2:4224::::::2:::::t222:1,1:,:,4::,:2:2:22::::22t222::22,21:::::>:::>1::::::1:::::;:;::::1::::::::*:::::1:::1::>::::::::;::,,><,;,,:>:,:::::>>:>>:>>:>:1::11>>22,::2::2>>:11:::,2:222:::,::2,2:,t4,::,,,:,>1::12t2::::2,,::2,::4,221>1::11:1::>:113:1:1:3:221:21>>>::>>>>11>>:>:1:1:::::::111111:::::::>:,:::::::2::,:21:1:211:11:,>>>>>22>:::11:11122111:11:1111:111:11:1:1::*4,:2:>>,:::2:>>11>2>1::>:12>>22:::,:1:>2t:22>:::4,::::,,>:1:,4::::::::::4:::::::::::1::::1:1::::", "tt:t2:::t,t24t:t,,,2:tt:22::::4t2tt,t44,:::2,24::,:::22:2:,:t:2:::::,t22,21:,,:::4,,,:213:2:::4t3tt,,,::,,2::::::::1::>:1::1:1:::::==:-:::::::1-:::::::::111:1::>::::::::::,,,:4::::>,1:,12::,t4::>>:,2:2:22:22:2:4:4,22,:,::,:,2t:::22:::2:422::::2:t:::::,22::1::111::1::111:111311113111::1::>>:1:11:::1::11:1::11:11111>::::::::::::::::;,2>>>:1:222::1::>1>1:,221:::::1:111111:111:1111:11>1:1:1::::44:>>:1,,2:11:1>:1>21,::1:221>,t:4:2,::,2,2,::,:::>,:,::,>:>>2::::::::::::::::::::::11:::111:::::", ":22222,,,,,t2::2,2t2t:2:,2:::2:::::t,,,,:22:,4;,2:,:::24::4:::::::::,2t2:21:>>:::,,22,:132::2:422t3,::,,2>12,::::::11:::1:::1::::::;::1:1:::::111:::::::1:::::11:::::11:2::::22,;,:,:,,:1:::1:1:::::,:2::,>>:,>,t,2:::::>>:22:,:22::22::,2,,2,,:24,,,,242:::2::222::2:::,,2,2t:::2,,12::::1:11:111111111111111311:11::::1111::11:::111:::::1:1111:::::::::::::::::,::>>>:::2322:11:1>>1::211::>:1:111:111111::131>11122:1:1::::::2:>114::22:1:1:1:>,1>,1:::1>,::,,:,::::,,222::::>>>,:::::2>:4:::::::::::::*::::::::1::::1:::1::", ":2,:2224,2:2:t4224,,:t:::,t:,,:2tt,4,4:,::22,,:,2,,:,:2,::::,::21:::,2t2:2::1::2:4:,:::22,:::442,2t,,,,,,,:1,::,:::1:1::1:::1:::::=:::::1:::::1:::::::::::::111:::::1>:1:::4:::4,;;,:,:::::>:::::4:::,,::>>::,,,:,,:::1:::,::::2,2:2:::::t22,2,::,4:,2t,::::::,:,:42:,2::,,::2::::2:111,::111::1:1111:11111111131111-::11:111::11:1::1:1::::1131>>::*:::42:::::::;,::2:::1:223221::>:>1:,:1::::>1::111:31111:11111112222:111::::::2:1>:,::22>:>::1>12,>1,>2,>>:::,,:,,:,,2,::2:,:>:>:::,>:1>:44:1::::11:::::::::1::::::::::::::1", ":,2,:,244tt:t242,,:,:::t:,::,:4,t:,4,,,422,:,,;::,22:2,:::24,:2:1::4,22,:2,11,:::::,,4::,,::::42:2,,,,t2::,,:4:::::1::1>1:::::1::::=::::::::::1::1:::*:::1::1:1::::>>1:>:::::2,2;;<::,,:::>:1:::::::,::>:,>,,>>>,2:,::::::::::2>2::::12:::,:::,,,,2t,42t2:2:22:,,::,,,4,,:::,2:t::2t2:2:::111::1:111:111111111131:11::1::1111:111::1:::::11::111>:::::::4,:,:::,::::::,::::22:2211:>:11:::11:4:>:::11113111111111:1221>>>11::::44,:>1:,::21111:2>>>2,>:>>,>1,>:::,,2:2,:::,:::::::>>:,,::212:::::::::::1:::::::1:::1:1::::::::::", "::2t2::4:,:t:,42:::,:::,2:2::,42t4,t,4,,:2:t,,::::t,:22444::4,222:::,222:::,,>::::,,,,:12,:::444,2:,,t4::>11242:,>:1>>1>::::111>::;;-11>1:::::>::::::::::1:1:1:::::::1:1>4:::2:4:<;;<,>,>>>>1:::::::,:,4:::2::>,,,,2::>>>>::::2::::1::22,4t22tt4,,,,:,,2::2:2:222:,,2,,,:::::2::::222::2::11::1:13:1:1111:3111311::-::>>1111::1111:::::1::11111111::::::::,:,:::::,::>>:::::22:211>,>21:::1>:4:::1:1111:1111:1112:12222111:::1::::2:2>2,:11:2>>2>111,::2>,,:,,::4,:,,::,2:2:::2:::>:4,2:::,::::,:::::1::::4:::::::1::::1::::::1:", "t,,2::2:t,,,2t4222:,:::,,,:t,,,22,t4t,,,t222,:4,,,,:::2,2:::t:2:>::>222:,:1,:,1>:,:,:2::2,:,2::2:::,;,,::>>,:::,,>1::>>>1:>::1:::=;;:>>111>::>:::::::*:*::::1:1:;:::1::1::::,2t:;<::::,>>>>--::::::::,::,:2>1,1:,:,22:221,::::>::,:12t2:::t,222:4,:,,,:::2:2:2:2,::::t,2::t:t,:,::23322:112:11:1:3111:111:1111311:::-:>>::1>>>:1:111::1:::1111111:::44::::::::4:::24>:>:::22:::22>>:>>11:21>::>>1:1111:31:1:11112:>21222:11::::4::2,>12:1::1>>:2212222:,,1>1,2::2,2:::,,:::::::t:>::::2:::>,,44::::::::::::::::::::1::1:1:1:::::", ",,,:2,:t:t22,2:2,4:tt:,,t::t,,,,,,t4,4t::2,:2:,4,,,,:22,:2:::,2:2::2:2,:>:11,,:::4,,2,::22::,44,t2:,;,,::,,1::4,,>>1>1>:1>>:111::;;4:1::1::>::::::::::::::1:1:1:::11:1:11:::4224:>:<:,><>>1>::::>::::::::,>>>1>:,,22::>>>,>::::,:2:12:2,42:2,,,:2:,::,t4,:2::::22::22:t222:2:t2:2222222:::223::::1:111111:111131>::::1>>>>1>>>:>1::1::1::::1:11:1:::::::::,:,:4,::42::1::::22:222>1::1>::>22:::>::1111113:11:1311>>122211:1::1>:4::::>:,>>:21::221111>2::222::::42:,:::t2:2::::t,:>::>1::>>,2:4:::::::::::::::::::1:1:1:::::1:1:", ",,22:2:4:tt:t24t2:,2:::,22::2,4::,t,24::t:2:2:,,,,:::222:424:2:12,::222:2>:,,1,>:4,222,222:2:::::::t,,;::,21:::::1>:1>>>>::>:3::::::-:::111:1:::::::::::::1::1::::::11::1:::::2>;::;:>>:>>>>:::::::,,::4:,,,>:1:,:,2,,>1>>:>:::::::,2:,:,,2:,,,:4t,t2:,:,:2222::t:,2t::2:,:t:2:::222222::121:3:1:1:11:11:1111131>1::::>>1:111>1>111::::1::1:11:111::4:::,:::::,::::4:>>::::122:22,>1::>>>:22>::::11121213331::132>112211:11::>:4:,2:::22>>:2:1:>21111,::222,,,:42:2t2::::t:2::t::::>:::>::>>::::4::::::1::::::::1::1:1:1:1:1:1::", ":,2::2t44t22,,:tt:t:t::t:2::24,:,,,4t2t42::2,:::t22:::2::::::,21:::::>22,:::2,2:::22,t22:::>2:42,,::t:2:4t2::::::22>>>>>:::111::::4::::::1::1:>::::::;:::>:1::1::::1:1:11:::<>,,<;::;,:::::::>::>>>>>::::2,2:::21222::2:,:>:::::1::12:2:4:,,,,:2:t,,t:t:::222:::,,2,2:2222,::2:::222222::2211:1,1:1:1111::3111111:::-1:11311:1:>1::::::11::1:1:111::::::::1::::::4:::::::::222,2,,:1:1:1>,1>:::>:11112132221:1:11::3221:111:::::2,:2:22::::21:1:211112:211:22,;;:t:2t::,2:>>:>,:::,::::2,::2:::,:::::::::::::::*:::1::1::1::1:::", ":22:2224,,t2t::4::t:::2t2t2:,t4,:,4,:t2t2t2222,42::4:22::44:4,:12::::12>t22:,2::>:,22tt2:2:2224t:2,t,tt4::2:1::::32>1>:11::1111:::::::::1:111::::1::::;;::1:1::::::11::::::::>:::::;:,,:1:::::::::,>:>,::,,,:2:::2,,22::,::>:::::::12211,,2:,,24:,,::t4tt::222222::,t4:,:2:,:,:,222222>>:2111:>,1::111111131113111:::::113111:1>111:::::1::::111111:*:::::1::::4::::::2:2::222:3222:2:1::1,1:::>11:33222222112311::122111:1:11:44:,:2::222:2:1:221111::2>>:t21::::tt2:2:>>>::2,,,,,,::::::1::4::::::::::::::::::::::::1:::1::11:", ",:,:,224,tt22,4,2t::2t:t2,22ttt2,,t:4,,4:t2,,::,:::t::2:::::::22:::::222,:2:,::::2,,2,2,2,:22:,,:t2,tt::::22:::::111>2>>1::121::::4*:1:1>1:1:::::::::=:=::::1::::::1:1:1>-:->>::::,:::::::::::::::>>::,:::,,2,,,2::2,4:::::,:::::::2,:22:2:2,2,,t42,2,22,::2::2::2::24:22::2,,:::,22322::221>:>1:111:1:1:1311331:::::::211111:111111::::1::::1:111:::4::::::::::::::::22:2:22::2:,2,11:11:>11::,1:112:2222:11:3:11:3211::1:::1::,2::22::222,111:2121222:>>:,,2:;:,,2t::2:>:::2>:::,:,:::,22::::::::;::::::::::::::::::::::::11::", "2,,:222:,tt,,,t,t::::t222,t:ttt,:,24t,4,,222t,,:2:2::23:2,44:1:::1::>2t:2:22,,,:44,,22::222>,,:,:,t2,4::,:12:::::111:2>11::111::;:::::::>>:1::::::::::::::::>:11:::1:::>>:::>>><;;;,,1:::::>>:::::>>,:,:,:::,2,,:222::::::::::::::::,:2::4,224,::t,2t24t2:t2222:2::2,,,,:24:22:::,2t22:2:321::>211:1111111311111:::::::211111::11:::::::::11111:1:1::*::::1:::::414:::2:1:22:222:2:::::1:1>1::::111122222222:3:3:::231111:1:1:::42:,:2,::::::1:::2222:,2>>:,:::::2,,2:,,1:2:>>::,:,,:2::,:2,,:::4:;:::1::1-:::::::1::::1::::::::", ",,2:tt2:t,t:t,:t:::22:t:2tt:ttt2:t,,2t4,,22,,,:,,22::::22:4:22::,::,,2t2,>2:2::2:,:2:,222:21,::,t:ttt,::::,3244::1:2:t21::111:::::;:4:::>:::>:>>>::::-=:::::::1::::::::>>-:::>>;4,:,::,:>::>::::>:,::::::,:,:1,:2:,>:::,:::::>::1:::::114:2,,2,:24t2:422::t2:2222:2,,,:,::::222:,,2222:::3211:>11111111:113:3113:114:::211111>>>1:1:::::::1:111::11:*:::::1:::::41:1:2:2:::222,2221>>:>>211:::::2:2:22222222112:111:221:::::::::2:::2::t2,:2:::1112:22,::1:1>:::::t:,:2::,,:,2,:::2:2::,:,2,::::::::::::::::::::::::::::::::::::", ",2,,:22::,t:,:,t2:4,2tt23:t2tttt,224t42:,t22t::,,2::22:2:t222:2:>:::,22:,,:2:2,,,:t22::22,1:::422:22tt,t2:232:::>2>1,231::1:11::;:;::::1>>1::>>>>>::::::::1:1::::1:1:::>>1=::>::,4,:,::,1:::::::>:>,,2,::,,::,:,:2,::::,1:::24::::::1111:2:22:,:,:,3,2,:2:222:2::2:2:::,:,2::2:::,222,:::211>:>21::13:11:1:311111::::::111111>1>11::::::::::11:1:1:::*::::1::::::::44::2:2:22:,222>::22:::11::::22:22212:22:1:22112:211:1:::::::42:2:2t:2::2:211:22:::2:,11:>,4,t2:2,:,,:2::,24,,:::22,:22,:4224;;::::::::::::::11::::::::::1:1:", "2,,t22,:2tt,t:t:t:t2ttt22:2ttt:2,tt:,4:t222222:,2,2::2222::t:::2>,::2tt2,22::22:::t,,2:22,:2,::2tt2tt:422222::::12>2>122:::11::::::44::1:1:1:>>>>>::-:-::::::1::::1:::::>>::>:::4,;t:,,:::::::::>>:,,,:::,:12::::,2:::,:1:::,4:::::::221:12t22:,,,4t2t:2::,2:22:2224,,:::,t::22::,22222,,221::>211112::1113:1133::4:41111111::>>:1:1:::::1:11:1:11:::*:::::::::::::::2::2:1>,,,2:2:::22:,::1:::11:1:2222323:1:221112211:1:::::::42:::22::2,::1::222,2>::1::,1>:,2::::2:,,,:::,:2:,::,:::2,2:::::;::::1::::::1:::1::::::::::1:1::", ",,2t,t,:4,t,,::2:::2:t222tt222,::t24tt,,t2,t2:,,2:2::2222::t22:21::42,22222::,,:4:,,,4:::,:,:::,22:ttt,,,22,::::,1:2>,321::111:::::4:::>1111::>>>:::>:>:::::11::::::::::>>:::,,<;:4,,,,,1::::::::>:,::,::,,:,::,,,>2:;:,1:::::::::::1231:2:2t2:,t4:t2t,,::,,22,2,:2:,:42:,,:22:::,,:,2:2:221::2211::1::211:31:11::::::1111:11>>111:1:::1:1::11:1:11::::::::::::::::::::::2>>,2,,2:2::>:21::11:::2:12121222221122111:1:1:1::4:::::t::t2:t222:2212222,222:,1,:,::,2:2:t2:t:2,:::4t:::,,:41:::2>>:4:::::::>:::::1::111::1:11:::::::", "t,,t2t2:::t:t4::,,,2,,2t3tt2,,42,t:,tt,t222tt2:,2,2,:2t22:::t::21:::2222,2::2::::4:,,,4:::2::,422,,ttt,t,2:21:4:>1:2112111>211::::::::*1:111::>:::::::-::::::1::::::::::::::4,,:;;;,,;,:,:::::::>::>,:,,:,:::::,:22>:::::1::1:::::::133::2222:,:,,,,t22:::t222t2,,,::4,2,:t:22::::,222,,:322:::22:222:22:23111321:::::>>11:1>:>11:1:::::::11211::11:::::1:::::1::::::::2:,:,22,2>2>::,2,:::21::::2:222222:3211:111:11:11:1::::::::::2:2:222t2::222:22,,>>,:1:::,22:2,:2,,::,:,:,:,,:2::::22:::4:::4:::::::::::::1::1:1:1::::::::", "2,,2:2,4:tt2:::2,,::4t:22t2:,,42,tt4t,,ttt:22:,,,2,22222::::2:22:::::2,2:,:,:2:::4,:,2:,222::,422,42:t2t,222:24::2>>:121::>>11:::::=*::1:121:>>::::::::::::::11:1:::::-:1::4:,,:;:4,,,:,,:>4:::::>:>:,:;;,,,1::,:>>>4::2::::1::::::2123:::t222,t,:,,tt22:2,,222t22,,t,:2::t2:,t4:,2,22:242:::::22::222222:21::22:1::4>:1111>1>>2:11:::1::::121:1:11::::1::::::::1::1:::2::,,::2,2:2::22::2:21:::2::22222222::1111111:1121::::*::2>:,:2:22:2,2,2222:2221>>,:2::::::2:,2>:,,:::::,:24:22::::::::::::::::,::::::::::1:::1::::::::::", ":,,2,t34:,t22::::,2,t2,,22,,,22,22,444t2,2,,2::,2:t22t222:2:t2:2::::4t2,,:42,4:2:::,,:,,222:,::2,2::4t::,22:::4:22>212:21::::11*:::::::11:11::1:1:::::-:::::::::::::::::::::,,,4;;:,;;:2,:::::>>:::>:::::,:::,,,,,2>>:2::>::1::>:2::121::2:::22,24:,222,:,,,2:::22,::4::,:::,,,:,:2222>:222,::232::2222:221111321::::>:111:1>::211::::::::1121:1111:::::1::::::::::::::22:,2:::2:224,,2:::221:::::2::222222211::21::11:2::::4:::>2:,,,,,2:222,22t:223t2:>::>:;>>:::,:2:::,::::::::,:,:::,:::,:::4:4::::::::::2:21::::::::::1::1-", "2,,,,2t,4:t,t::4,:::,222222,2,,:42,ttt:tt::22::,:tt322::2::::,:21,::,222>24:::,4,4:,,:,22:,:,,4,2t:4t::t,222:44::,::12::>:::11:::::=:::11111::>11:::::::-::::1:1::1:::::>::4:,2:,,;:,:,:,:::::>,:::::,,;;:,>:::::,,2::42>>1:>:::::2::2212:2:22:,,,,,22,,4,2:222t,,2::::,:,,:,2,,:,,2t22::22:::,3t2:22:222:1111311:::4:,1111:>:11:::1::1:111111:111:::::::::::::::1:::222::22:22t2>2:2:,12::222::2::22222222:1112121:112::::*::::>:::,,:,:2,222222,222t22,,::::>::2:t:2::,2:2,:::>>,:::::2:,2::::::::::::2:,::::1::::::::::::::::", ":2:t2t2,:22,,4:t,::2,t222,2t,,4::t::4t:t:t:22::,t22222:2:::,:222,:;,2t,::::,42,,::22,42222:::::,t:4tt2:t,,,,:4422::1:112>>::1>1::::4:::>::11:::::::::::::::11:::::>::::4:::::,22,4:,,4,:::::,:::::>::>::;:,1>::,:,21::::1>1:>:::::22:111:,::::2,,,22t2,::222,2:2,22:,::,,,>>22:::,:32222:22:::t222::312222221331::::4,>1111>>>111::11::1:11111:2121::-:::::::::::2:1:,:22:222:22>>,::,:22:::2::::::22222:222:1:2111121:21::44:::1>:,:22,:22222222,2:2t:2>>>::,,::::2:,:2,,t::::t::>>,::>,,:::::::4:>::::1:::1>:41::1:::11:::::::", ",2,,2,t4:tt,::::,:4,:2t:22,:,::::t2tt4t2,:22,:,:t2:2222tt::::::21:::2t22:>:2:::,:4:,t4:222::::4,2t2,t4::,,,22:::,,>,:,4,>::1>::::::4::::1111::1:::::::::::::1::::::1:::::::4:,22:,,4:2;:,,4,:,,::::::<:;::::,>::>22,2::2>1>:1::::::::112:,2222:2,,4,2,2:4,2>:,2t2,:,,::,,:22:22:2,2222:::2212:2::2222113:222:32::1:4:>1,11>1>>>1:::1111111111:1231::::::::1::::::::::::::::::22:22:::,:212,,1::::1:2222222:21122222::1212::::12:::22,,:,:2122:,222,222221>,::,>>:::2:::::2,::::::>,>::::>>,::2::>4:>:2::,::::1::::::::1::111::1:", ",:2,t2,:4:2,2:4t,222,,,2,2,,2,::2::t::,t,:2222::::222222:,444::2:::,,,222::4::::::,,2:4,2,,::::tt:2tt4:t:2:224::,,>>,,::1:::::::::;;4:::11::::1:1:1:::::::::1:1::::1::::>:4::>t,,,;,:::,,2;2,:,::::::;,::::,>>,,,12,>:4,>2>,1:::12221122:,:22::,,2,,,,:::222232:t2::::4::,,:2t2,,22,22:,,2212:2:2::1222::22311111:::::,2>>>21>>>::::::1:11111111311::-:11:::::::::::::::2::::3:222,:t2::1222:1::1:2:222222223:32221::1:1:1:::::::2:2t,,2:222222t22:22t221:,::,::2:22:1:222:,2::::::,>:4:>::::,::2::,:::224:22:2::::1::11::::::::", ",t2,,tt::2t2,,t2,,,t:,,2:,2,,24,4t,2t442t,2::,,:22:2:2t::::2,::3:::,,tt22:,,,,,;,4,,2::,,,:::,42t:22t24t,::,:4::>>>>:1::::,:1::1::=::::11::::1:1:::1::::1::::::1::::::::,:::::,:,;,,::,:,:,4::::>:::,,,44,,::>:>,22,>:2:2>,1>::::::1::23222:222,,4,t,2,t:2:22:,,:22t:::2:2,::t:4:22,222,:222::2:2:2222:22222113111>:::>,12,11>2>1:1::::111111::131::::::::::::1:::::,:2:22:::2222::,42:222222:1:::222222222::3222:21211:1:::4::2::,,22:222222222222:222:2::::,:>:::::22::,:::::2,:::>:::2>2:::::4:::::>:22:::::::::::1:1:1:1:::-", ":tt,,2,,::,24:,t,:,t:2,:22,,2,4:t::t4::2tt:22::t2:2222222::4:2:22:4,2t2t:,24,2:::42,242:2::2::4t2t2,t24222:::41:1::>:>:::>>::::>::::-::1>>>>:>>:::1:::;::::::::1:::::111::::::,,;,:,::::,:4::::>22:,,,,:4,:::2,:2,2,,>22:21>>:::::::2:1222:::2:,22:,:ttt4,2,32:222::::4:,:2::2,:,:2222:::222::2:::22:2:2223322:12>>::>2:22>22>121::::::11121111:111::4:::::::1:::>::>:,2,,:::222222:42:222:22:::2:22222222:22:22:2:2222:2::::::2:2::2tt:t22223t2:222221>,,:::,2:::2::11::2:::,:2:::,::::2>:2:,4::>::::::2:2:::1::::::1:1::11::::", "2t2,tt,::4,,t,,,,:42,,2:,,2t,,24::t:4t4t,2,:22:::2::222::4,,4422:::,tt2::,t:,,,2:::,24t2::::42:t4,t,2ttt:22::::::::::::>:>>>:::>:::::::1>>>>::1>:1:::::;::::::::1::1:11:::::;:>>:,:::,:1::::>::::::::::::,2,::,:2>22,,::,:,,2:,,,::::2122::22222t4:,22:222,2222:t2:t::2:t::::t:2,2t2221:22:2:::22:2322222122221:12>:::>222>>1>>11:::::1111211111111::::11:::1:1::>>::>,::,:,:2:32t2:2,,,t22t22:,,,:22t22t22:2,22222222::2:::42:2:2222232222t2222222t22>1,2::::::2::2>1::1::,:::4::,:1::1,2:22:::4:::24::::,::>:::111:::1:::1::::", ":tt,2t2:::2t2tt:t::t:222,,t22::442t::24::,222::::2:2:32::::,::2:2:4222,,,,,,,,:4:::,:t,,:::::::2,,t,t2:2422::::2:>:::>>>::1>:::::::::::1>->::>>>::1::::::::::1::1:::::1::::-::>>:::<,>,:::::>::>:::::::::,,:,,:,,,222;:2,:12,,,:,,::2212222:22:2,:42::,,:22222:22::2:::2:::::t:4:2222:2::2:2:12:::22221::232221:>224:>:2221>1:111:>>:>:1>1213311111::4:11::::1:::>::>:,2,,,:2222222:,:2,22:22::,:,:2222t22:2:22,:22:t23:::::4,:2::2222t2222:22223222t2>,,:,4:::,::::>1:>>>::::::24:,:::,:2:::::::::::::,>:::>::>:1111:::1:::::::", ":2,,,2t2,2:tt2,,:::,2:t2:2:2:124:::t4t,,t2:t2:::::2::22:4:::4:::::::2,,t:::,,,2:4:t4t,2,2::::24::22:42::,22:144::>:::>1:::1:1:>:>:-::::1>>:>:>>>::::;:;:::::1:::::1111::::::::>>:::::>:,,:::1::>::::,:2::::,4,2:,,t22:::,,:1,,4,:2:2:::1:222222,:::242,,4,2:222:2::t,:42,:t::2,2:t222:::222:1::22::22212312333121,>4:222232>1::1>>:1>>112131121>11::::::2:::1::::>>:::,>::,::2:2:2::2,:2t2t222,:2:::2t:22222:2222232t232:2::4::22:,222222222222222,222>,:1::,::::,:22>>:>>::::::::::::,,::1:::::4::::;::>::,::::::11::1:::::::::", "2,:,,2t2:,,t,t::t::t::2t:2,22:::4,2,4t,,42,:2::::2:2:2::2:4::::222::2,t:::::t:::::,4t22222:::::::t,4;,::222::4:4:1:::1::::1::1::::-::::1>:::>>>>:::::::;:::::1::11:::11>::;;;:>>>:::>>,,::;:,:;:::::1:2:4::,,>>222t2,4:22:2:,,:::2:211>1:,2,22:,4:,,:t:::22:211:2,:t::tt2:t4:t::,tt22::2222:::11:2::222:232223:22,>:,:2332221>111:1:>111221132>>111::::11:::::::::::::,::,2:2222::2:,:::2t2222:,,2:22t22222222222t22t2222::4::,22:,222222222t22:222,22>,>>::42:,2,:,,,:,:>:::::::::::,::>>,:::::::::,:::>:::>>:>:::::1::::::1:::", ",,,,:,24422tt,,,t:4,:tt2,::::2:::,,::4,:,:,,:2,::222222:::4::4:2::::::2,:,,2,::44:,,,22:t4::244t,,,4;,,,,222::::>1:::1::::1::1>:::=::>>1>>:1>>>>:::::::::::11::::::11:1>::>;4:>>,:::::,:::;:>:>:::4:4,:4:,,::>>:,2t21:::222:,:,::24,,1>::,,2t2222,,4:2:::t222:1:2224:t:,t:2:,2::t3:2:2:2:222:11:2:2223:22122332211::,23223321:11:::>:>1:>111121,111::::::::1:::::::::::::::::2222t2:::2,:2,2222:,::,:2222222222:22222tt222:4:22,,:tt22t222:2t222222:212:>:::::,:,::22,:>>::,t:::::::,:1:2>>:::4:::::::::>:::::::11:1::1::1::::::", ":2,,,22,,::t,,,22,4,::t2,t:22:::,44,,44::42,22:::2:22:,,:::::::>2:::22tt,:,::,24:,t:,224:42:2:42,,,t,,:::2,:4:44>>1:::1:::1:>:1::*:;:1:1:::::>:>::::=:::::::1::::1:1:1>>1::;::>2,,>::>,,:4:::::::>>:2,::4t,:>,,::,t,>::,2222::t:::>>>111:,:22,:4,2,,2:,::,,::::222:22:42t22:,::::2:222::222:,>>12:2222:2222222::,2::222222221:111:1::>>>>112211>11::*411:::::1:::::::::1::22,:2,t22::,:,2,:22:2:,:2,:2:222222:22,t2322222:2:4::22:2t22t2222t222223221,,,>>:::2:,::2,,:>:,,>,2:2::::>>,:::::,:::>::::::::::::::::::11:1::::1:::::", ",,,,22t,,,:tt,,tt::2:tt22:2::2244:,t,,:::,2,:,:::2:22:,::::::::>:::::2:t:::,,::::;,t,4,,tt:42:424,,4<:,:,224::2:>1>:::11:>>:::111:;:-:11:11:>>::::>::::=:::1::::::::111>:::;4>11::>>:;,>>:::::::::::4:,:::,2>,>,,,,22:>>:2:224t:22::,>::,,222,::,4,::t::,,,22:22tt,:::222t:2222:t2t22:2222:,,>:22:22tt22232:22221,4,2:222222:>11:1::>>>>>1121,1211::::::::1:::::,:::4:::::22:2222t:2:,2:,2,,t2::,,,2222222222222:2:22t22:t4:2t2,2:,2222t,22tt22222221,12>>>44:,,2,,,,>::,::,::::,:>,::::>>::::::4:::::::::4::>::11:1::11:::1::::", ":22,tt222:,tt:4t,t4,,:t2tt::22:::ttt4:4:4,,,:2::::2222::::::::,,:::::222,::,,:2::2422,:,2,:42t42:,,4,,;:111::::>>1>>::>::1::::>::::4:::::>::::::::1::::*:::1:1:::1::>11>1:>44:2:>::,:,,;::2:::::4,::,,:;::2,:,>>,2t,2::>2:1:::::1,::1::::,,2224,:,:,,,:::t2::2223t,t:::2,2,,22,::t,22:2::22,2>222222222,2t2222221,::,,111221>>111:::1>>:2>12121>11,:::::1:::::::>:::::,::::2,:222,:242,:t2222:2::2,:t2:22222222222:222,,2t,4t22t::222,222t222t22223,,222>,:::::2:22::::22:t2:::::::2,:2::>:::>::::::::::::::::1:111:::1:::111:::", ":t:t:22t4tt2,t:tt222t:tt2:t::2:t4,42t::,t:,::::::2:22:22,:;:,;:::::4>2,,,,,,,,,::42,,2:22:24::4::,t,,:,:>1:>::4,61>:::>:111:111::::4:::::>:::::>11:1::::::::1::::1:1>>>>1:::4:2,>>:,,;,,;,,:::::::::;,,,:,:,>>:>:42,,:::2211::,2,,::,::::22,2,2:4,,,t,,,:2t,2:2:3::22::,2::,2,,,22,tt2222312>::2t2t22222232212221:::,,211121>>1>1:::>1>>>112121111::::::::,,::::>>:::::>::,::2222:2:2:2::2t:22:::,,22222222222t2:2:2t2222:::::2:2tt:,222222t22,222t2:::2>,>::::22:::2::2:,:::t::,,,:,,::::>::>:::::::1::::::1:::111:::1:::::::::", "::::2222,,,2,,4,t24t:,t3:::::t24::4t4,:2::,2,:,:11:2222:,;;:4;:12::::242t,,,,,:4::422:2::t:2:::2::t,,,:,>>::4::,111>::1>1:111>>>:::::::1>>::>>>>::::::::::::::::::::11:::>:4:>2:>>::,,;,,:,::::::::::::::;::,>:::,,t:::22:1::::211:>,1::,t22,,:t22,,22,4,,,,::2tt2:,t:2,2t:,,,,22t,2222t>222:::t2:2t::2222t22222,>:>2211>221112111::,11>>12222>:1:::4,,:::2::::224>:::,,2:,,222:,:,2::t:2222t2::,:22222223222t22:22:22,,:,:::t2::::tt222,222222,222222:2,1:::::>22,:>::2,::2::::42:,:,::::::::::::::1:::::::::::11111:::::::11::", "22:t,2t,,422,,ttt,:,t::32t2t2:t24::,2442:t:,2::,::22222::::;:::2::::::,,:,,,:,,:4:t,2,::::::,:::,:1,,;::,1:::::21,,>>>111:::1:1:::*::::1>1>:>>>>:::::*:::::::1:1::::>>::1>::4>2:>>;<4::,,,::,:::::>:,,:,:::2,>:1:,2,,::>221:,::,1>::>,::>,2:,:,,2t4t,2:,,2,,222222:,:::t4,,,2,,4t22t,::22,1,2:2222222:22223t3322>:>>>>1122111211::1::1>>>,12>111>>::::::>::,>2:::>:>:::,,:::2222:2:::::2t:2222:::2,:22:2:22223222:2:2t22:,:4:::222:2tt222,23t22:222222:,1>:4:,,,2,,:>::2:2::t::t::2,:,2:::,::::::::1:1:::::::::::1:::::1::11::::", "::,:,222422t,2,,,,4224222::tt2:::::,,,4t4422,:,::::2:22::::::::1::4::::2,2::,,,::4t2,:4::::::::2,:t:,:2::11:::,21>111:1111111:1:::;;:::1111:::1::1::::::::1::1:::::::1:>:1:::2,,2:,4,,,,:,::::::::,:4::,:42:22:1:,,,::>>2222:::21>:>>,:::,1122:,,,,,,,,:,,t2>,>2t2:2::2,,:,,,2t4222t,t:22222::22222222221232t32t,:::>2>2221>:311>>>>:1,:>1>21:111>::42::::2:>:1>:::4:::24::>12222::::t::22:t3::::::2::2222222222222:2t:2:,::::22:222t322222232:22222:2:21::::,:,2::2>:,2,::,,,,222:2,,22:>2>:,::::::::::::::::::::::1:::::::1:::", "2,,,tt2,:t:2,t42t2,,,::t,2,2:2,:4t:,,4::2:::2:,:::t22:22:>::4:4>22:::t::,,,::>:,:2,:,::::::24::,,,2,,,::121:;4:>1:>>1>611::11::1:::;:::211>:11:::::::*:*::::111:>::::1::1::44:2:,,:;4:,:,,:::4:::::::,,,::,:,2::,:4,1::2:21:2::,,>,:>:>:,>>2>2:,,,,,2,,:,22,2>>22::t:4tt,,,:,t2,t2222,22tt3t2,:,232222:222323222,::,2>21322:122:2:2>:211,113111>1::::4,::::::::>:22::::1:1:22222:2:2,::2:t22222::22:222:t22::22::22222t2t2:4::t:,,2:2t22t22222222t:2222:,,:::>:>,2,,::>22,:2:,:::::,:::::>2>:,::::::1:::::::::1::111::::::1::1:1", ":t,:tt2242,,,,ttt2,:t:422:,::2::4::,4,::4,2t,::2:,22222::::::::2:::::::2,,2>::::4,:,,::::::::4:,2:,;::>:,2,::;:>1>>>2>3111:1:::::4:::::1111:::::::::::::::1:::1:>:::1::1:>1::,2:,4:::,:2,,::::::::::::::::,:,:,:,,22,4:22222,,4211>1>,,::>>122t2,,,:2t,42222:>122422t:22t,,2t,,,22tt2,t33tt2t:222t22t2>2223333>21>::221122111222,:,>:,:1,>12211>111:;,2::,2:>::,,:,::,>:::::222:22:2:t:2:22222:::2,::222222:2222:2212t2t22::,::222222223tt2322t2222:22:21:::,::,:22::2>>2:,,,::2:::,:2>>:2,::,:::::::::::::::11::1:1::1::1:11:::", ":22:2,2t,:,,,,4t2t,:2:222::,::t::::4,,:4t::tt:2:4::2::t:4::::44>>::::t:::21>:>:2:::,,2::2:::1:4,,:,,:,:>:2,::::111>:,2,211:11::1>4:::>>>11:1::::1::1::::::::1111>4:::1:1::,::4::224244,::,:::::4::;,:,2,::2,,2,::2222:::2:2::::221,1>11>:>>1:2,4t,,,,22:42:2>>:,22224:t224,:t2:2tt2222tt33t222:,:22:2t222t3222221>::2,112322:222:,,:,,2:>1,1111>1:>::;:,:::>:::::::::,11:::2:2212::2:::::2:2222::t2::2222222232:22:12t22t:24:::2,2t:22223232222:222,2222,::::,,:2,:::>>>:,::,::2:,:,2>>>4::,:>,:::::1:::1::::::::111::1::::11:::", "2t422t2,:,,,::4tt2:2,,,:::,:2:2::::,,,44,4t,t:,:4:222:22::::4:41>::::::>>5,,:::>::,:,:,,2::,:4:,,>,>42,,:21:441212::22:2221:1:::::4:1>>>11>>:>>-1>>>>-->>>:>:>>>::::::>>>>>:4:>>>:4>:,:,:,>:::::::>:;,,,:,,,:,2::22,:::1111>>:>>51>1>,>:>>>>12>,2,,22,,:,2:2>:12,:,,,,tt:,:2t2:tt222222238322,:222222,2:22323212>>:,,>211622>121:1:1:22::2:2:3::3:::::1:::>:>>:,::::::11::>:11112>>1::,>>:122221::::22222222322::22223,2t:,:,,::232222:222t222t222,22,2t:::,::2,:2:2:::222:::t:::2:,,::2:,:::2:::::::::::::1:>1:1:11::1::::11:::", ",::,22t224,2,t2t,2t4,,,,22:2:22:2424,4::,,22:22:4:::::2::::::44:>>::::>>>>,>,:::;;;::,,,t44:::42:,,::,,,2:::::1222::,22222:111::::::->1>11>:>>1>->>>>>=:>::::>>::::::>>>:>>;::>>>::::44,:,,4:::::>>:,,,,:,,,1>,1,22>:::::11>>>>51>>1:,>:>>>161>,,,,tt,::222,1:,22,,,4,22,,t:2t:,2t2t:,,tt322:::ttt:22222123231>22;:>1,22122>>21>11:::222:2112:3:1::::1::<>>>>::,::>>::1>::>:>111>>1>2:,,>1>2:2:::22::::2:2:2:222:22:22222,::2:22,2t2,2222t22222222:2,2222::2,::,2::::::::::>,2:2:t,2::::2:::,2:::::::::::::::1>::1::::1::::11:::", ",,:,:tt,,,,2,2:,,,4,:,,,2::,:22:,::,t44::4:,2:22:4,:1,22:4:44:::>>:::<>>>>1>,:>:::,::,,,:,:::::::,:::2:2:1:14:1:22::::22121:1::::;:::>>>1>>:>>11>>>>>>:::::>:>:>>:>>>::::>>:::>>>:4::,:,2:,::::,>>::;,,,::,2>>>11,>>,::,>:>>>1162,>1:>:::>>>2><,:,22t,:222,2:,,2222:,,22,,,,t2t2322t2,,23t22::>2t2222222>2323112>::112211,21:21,:1:1222:1:11:21111:::11:::>>:::,::::::>1:::>>>111111:,,:>>>2222::::::3:22222222:2:2:222222,:,::2t2t2222:2,2222t2:2222,222,:4:::,:2:,:::22>,:2::::2::2::2:::2:,:::::4:::::::::>>:1::::1::1::1111:", ":::,2:t2424t,t4tt2,,4,,2,,:::,224:::,,4,t4,,:::4::,:1::::::::::::>>:>:>>>>>>::>;;,:,:,,,,:,::>::;:2;4,::22:4::2211:1:,::1211::::;;::>>>1>>>>5>1>>>>>:-:::::>>>:::::::::::>:::4>2>>:::,,,,,,:>>:::>::,4:,::2>:::1,,2>:,:>>1>:1>1122>>>>>::>>5,,>,22tt3,:,tt,2,:,,:t,,:t2:,t2:2t:,t22222,2332,2>>>22::2:222213212>>;:,,,211221221::111::::1:2121:11::::::::<:>>><:::;::>>:::>:>221>11>,:,:>>>2222:22:2:22:222222:3::222t2222::,,2:222222222:2t22,2222t22,2::::t2:22:::2:::::1:::t::::::::::::2:,:::::::::::::::>1::1:1::11:::::1::", ":::::ttt,4:t,,,t,:,4:,,2,:::2,::::4,,442,t:,::,::4:1>::2:::*:::::>:;<>>>>>:>:,>;4:,,:,,,::,:::4::,,4,2::11:::1111:11:1::112::::::;:::>>::1:>1>>>::>:::=:=::;:>:>::::1::::>>:>;>,1:;::,,:,:14:>:>,:::::;,:::2::::>11>,,::>>>:1:>1211:>>>:>12,2,,222tt,>4,,22,:::22:242,22t,,2334t3t2t,t223321>>,121:122212132231,>;:11,221211,,1,:1::1::1112111:11:*:::::::>:>::::::::>1::::>>22,>>1>,:2::12222:2:2::2222222222:2:2232222:2:::22,23t2222222:,22:23:,,:22:2::::::22:::,:::,::::2:::2:t:::::::::24,:::4>>1::::::>1::1::1:1::::1::::", ":,t:::,,,,,2t,,,t,,,,:42,::,:2,,::;,4:444::2,2,;::::>12:::::444::>:::>1,>>:>:::;,::::,::::42:::,4,,:;::,1:::4:11:,1:::::112:1::::::::>11:1:>>>:1:::::>:::::>>>>::>:::::1:>>:>>>,1::,,::,>,,:4>::::>::4,t,;,::>1>>:1>:::,>:1:>:>>21::1>:<,2t,2,2t2,2:>,,2,2222:,1t2:,t,2t:2:2t2:2t2222:,2322>:2>,212:22:221213222>::>>2,2111:111,:11:::1:1112::1:11:::::1:>>>>:::::::::1:::>:>22>,,21::1>1>::,22::22:::2:2312222:2::322,22:24,::22:222223t2222,22222t222:::4::2::2:2:::,,2:,:2:2:2::::22:::::::::::::::::::::>>>::::1::::::::1:1:", ":,,:::2,424t,,,4t:,,,42:,:2:22::;;;,;,:4,,:,222:4422,::1:::::4:::>::>>1,>>>:,::<:,,::,::::4:::4,,:,::2,:1:::::11:11>:>:::221::::::::::11>1>>>>:>>>::=>=:::>::>::>>::::1>:>,::<:,1::::,:::,,:::1:::,:,::,::,,>,11>>1>:::,1>:>>:>>111:>>:>,1322,,2,,,,::,222:2,:,,2t4:::2:::2,2,:tt22222222:21::,2222222222,223211>:::1,2211:112>11111:111::1122111:::::::>>:>::::,:>:::1::::>2:21,121::1,>,:,2,22222,2222:3222222::2222:32:::,,,:,,t2222222232222222222,:4:::122::22:,:,,,:,::t:::2:2,::::,2:::::::::>::::::::>>::1:1::1:::11::1:", "t:,::tt,t4,:,,t,,,;:::4,,::,:t2::,,;t;,:4:,:,,2::::::::::::4:44:>>:>,,,,,2>>:,:::,1,::4:::>:24:,2:,,,4:,11::::1212:,:>,4:11::::::=::::11>1::<>::::::>>:::=:::>:::>1:::>>:::,:<<>,:::,4,,:,>:>:1::,::::t;::::>>::>>,,:::>1::>>>>>11>>>>::,,t2>,,,,,,,::42t22t,:,,2:::,::t:::,22::232>,22,2,21:2,322222322312231,1:::>12221111211,:::::::::1121:111:::::1:::::::::>;::>:1:::,:11222111,:,1222,22,:::,22::32332:22:2::t22222::,:22:2:22222222t2t:22222,t::4:4::::2:22::,:::,::,:2:t2,22:,:22::2:2::::,:>::::::1::1::::11:::::::::::", "4,,2:,,,:::,,t:4:,:42:::,2,,,,:2:,,,4,44:,:,,2>::::12::::::4:4::>::>>>>5:2,:,::44,,:::::4>::::,2::t:t::,:2:::::2,2::,::::111::::::->>111>:>>:>>:::::::::-::::::>>>:>>::>::1:>:<>2:::4:,:>::,;:,::::::>,,>:>::1>:1>1>:::>>:::>:>::>,:,,::2,t211,::,,::,22222t:2:2224,,::2:2t:22:,t322222:2:2::,23222222232:2231:1,=:>1,21231>13>>:1::1::1:1111:111::::::::::>::::::::>:1::::>11221111>>,2:2:2221::::21111222122211:13:2222>>:::2:21222212tt2321,2,1122>:::::,:2:12:2:2::tt:,,2:22:2,2242:2,,:,::::::::::::::1:11::2::::::1::1::::", "2,,:,,,::::,t::t,,::,:::::,22,,:;4,4,,t:,:,:,,>:::4:::::4:1*444:>>:>,,>>21:>:::::,,::::::>:>::,4:24:t4:,:2::,:121212,:,;::1:1:::::>:>1311>-:>>>>>::::::::::1:::>:>::>:::::1::;>>1:,4tt:t>>:,:2:::::>:;,::<::>1>1>111>:::>>:1>::>12>::2,,,,,2:,,,,t,:,:4:2:22t:2:tt2:,,2t:,2,2::,222222:,2:22:,222222222222223111>::,>226221>311>::::::::111:11111::::::::::>::::::::::>:::>>12211111>:,2222222:1::22::11221212111:1122222>:::2::222222222322222221,,2>::::,2::::2:::,::t2:,,,t:4,::t:,::,:2:,::2:::::1::::::1::::222:::1::::::11", ":,::4t,,:4::::t4t2,:,::,:2,:,t:,:::,4:,4,:,:,,>,::::::,::::::4::>>::>>5>,1:::::;:::::;;;:::,::4,2t,tt4:,22:::::2>1>,,::;:::11::1:=:::>111>:::>><>>:>>>:::::::>:::>:>>::::::::;>>:::t,,:42::::,:,><>>:<:,,:::>1>:>>6,,:::>>:>,>>>1>:4:2::1,2,:,,,,,::::,2,22::2222t,:,,:,:,,,22:,332332:2::2:,2:22222222222221111>::>51222211221>11::11:::111:1:11::::::::::::::>>:4:,:,1::>>12221111>:>2222:2221::22:211122112111::2:2222::4>2>>22222,,t2t222222222,,:::::::1:1:::2::::,:2,::,:t,,:2::,:4::::,,:::>::1:::::11:1::111::::::::1:::", "::2::t,t:::2tt::4,,:,4::::,:2,:2:4,424::;;,::1::::4::::2:::**44:>>:>>>>>>:,::::;::,:;;:::::::42:::422::,:2::4::1:,>>::::>::11:::::-::>1111:::15>>>:>::->-::>>:::>::>:::::::::;<:12::4,t:::,,:::,>;::>>><>>::>>>>>>1,,:::1>>>,>:::>,::,,:,:22,,,,4,,2:::t2,22:t2:2:t::,,,,,:2,24,:22232,2:22::,,22:2322222:221121:::>>2211211211>:1::::::111::111:::::::::>:>:::=::::,:>>::>>>22211>:::112:12:111:::2:112:2111:121:1222222:::::>>222221,232t2>2222,112::4::2::1112>2:2:2,2:2::,22::2::,,22:::2:::::>::::::11:::1:1::::1:11:::11::", ":,::t2:2:::::4t:,2::,:::4:2:t,:t:;:t424,;:,:,,:>4:::::4::::4:4:1>>::>>>1>::::,4;::::;::::;,24::2,,43t:::>>>::::::11,>>:1>>1::::::=;:::111>>>>5>>>>->>:>-::::::::>:>>:::::>>::::>12::42,:,,,,4:,,:<:>>,:<><::>>::>>,,>>>:>>>,>>>:1,>::,::2:t222,,2t,4:,422:22t:22:::::t2,:2t22,:2,22::22:::2:22:2:223223,:1222:2::=>,>,2111>1111>:1::11::::11111111:4:::::>:::::::;::>>>>::>>21211111::21:2211::::1:22:22121122111::122:,2>:4:,,2>>22222,2222>122222,2:4:::,:222::,:::,22::t::2,4:2,,:2,:::::2,::;:::>::>:1:::1:::111:1::::1::1::", "t::t:,,4:4:t,:,:4t,4::2:2tt22,2,t4;:24,::;::,,>,:::4::::::::4:::>>::>>>>>::::::::,:;;;:>:::,:::2,22t,,,:22>44::::,1>>>11>:>11::::=;:::11>>>:>>5>::11::>::>>::::>>>:::::::>>:>:>>:2::,,,t,,::2:24::::::>:>;<>:,::>,1,>::>>>,>>:::222:::::222tt24,42,t,,,2,,2:22:22t244,:224,:,,:t,22::2:22:::422::223123223321221::>>>22611>111>>::::1::111:111111:::::::::>::::::::::::>>:>>2221111:::>::212112:::2:::2::2322:2:1:12,2222:::,:,222222233t,,2>22>211>>::::2:::22:,,:2::,::2::::2t:,,2t:,,t:::,:::,:;;2:::,:1::::1:11:::1:::::11::", "::::,::2,:42:t:,,,24:,t4:t:22,2,24::,:4:::,;,2,,:4:::::14:::::::>>:<>>>1>>:::::4:,::::::::;2::22:2:t,,2:2,>:4::2:21>>,111:>11:1:::;:::111>::>>>5>>>>::::::>:>:>:1:::::::::>>-::>2,:4:4:t,,,2:2:::;<>>>><>>:::,:>>>1,,:,>1>::>>::2224:>:::t,22t2,,t:,:::4:2,22::222::,,2::t2tt2:t,222:2,:::::22222122122:2222221::<>>121111>111>>::1:1:1:111111111::**:::::>>:1:::::::>:>>>>>2321:111::>1:2:22211::1::2:222222:1:21,22,222>::2>,,11222,2t3,11122>1,,>>:::::2::>:>:2:,:1:::2:2:2,,,,,242:::t4::,:,:::22:::::1::::::11:111::11:::::", ",t:::,:2:4t4,::4:,,:4,,::2::22:,24::,4::,:;,:,:::::::::1:4::44::>>=<>>>>>>::::::::,;:,,::::::42:,2t2,2,222>:::::>2>:>211111:::::;;;:::::1>>:>>>>:>>>>::>-:>:::>>:1::::1:>>1:>>:1:,2:::,4,,:2:42::;:>>>>,,>:>:,>>>>,6>::>1,>:;>:>:22>>,,42222,2,t:tt,,,:,2,2:222:,,24::tt:::t:,:222:2::222,2:::2:212222:,22222221::>>5111111>11>>:::1::::111:1111::::::1:::>:::::::::>::>>>:>121>:1111411::12:2:1:12:222:222122:3::,222222:::>,,:>2122,233212>12>,,1>,4:::,::22>>2:221::2:::,:t:2:2,4:::::2::,::2,,,:2::,::::::11:1111::1::1:1:::", ",::::::::4:,,4::,;,::,,,,,:,:22,244,,,;;::::2,2,:::::::>:::;:::>1:::>11,>:::::;:4:,::>2>,::>:::::2,2t,,,2>::4:>>,3>:>2111:11::>::;;::1111>::11>>:>>>:::;:>>::>>>::::::::::1>:,::224::,,:2,:2:::4::::>>>,,>><:>>>>>,,,::>5>:::>>:,22::,::,2,22,2t,tt42:42,:t22,22t::4:,2t,4t2:2t:t:22::22,::,,,:2:22222:,,212221,:;>1,1,>122,11::1:::1::111111111>::;:::::>::>:>>:::::::,>:>>12:11>>>>:>>222222:11::2:22:2222:2:3:11222:211:::122>1>222233112>>2111,,::::2tt::::2>2>2::::,,::,:,:,2,,,::::,::,>:,,,::,2::4,:2:,::t::2::::::::::::", "::2:2:t:,:,,t:,;;,:4:,:,2:::2::2:4::,;:::,:>:::::::::::::::::;:::>::>>>1>::::4:4,:,422,:,:::4;,::,t::,,,3,:::>,,>214>32:11>:1::1::>>>21:1:::122>>>1>>:;:=:>:-:>::::-:11:::,1,::,:2::4,,4,2,::,,,::::>><>,><,>>>:>>>5,:,,>>::::>::22:2214,2,2,22t2t,tt:422,2::t2tt22,:,,:,,t2,::2t2:22,:t,2,:,:2t22222:,:2122111::;>>,,>1>22111111::::::11111:111::;::::::::::>:-::,::,>,>::>121111>>>:>>:21::122:1:1212232222::13::222121:::::2>>21222222>1>12>1>:>>:,:,2:2::2:::2>:>:::>::>:,t:22,::::,,,:,,,:>:,,:::::::,4::2::2:22:2:1:1::1::", "::22:::::::t4,:,,::::::,,,,:::22:4:t,4;:,4:>>>,:::::::>>::::::::>>::>>>,>:::::;::,,::,::::::4::,:,,,:,::31:4:,2,>2>::22:1:1::::::::>>21>1>::>>>:>>1>>>>;::::>:>>:::::1::::1,:::::,:,t,,,,::2:,::::::>:>,,,:>:,,::,,,,::,5>:>::>>112:>1:::2,222tttt,,::22,2t:222222:44t2t,,,,,:::22:2t2t22,:,:2,:::223:,,2112121,:;,>2:>>112111:::1::1::1111:11111::=::::::>:-1>:::,::>11::::1,11>11>>4>1::2221:::::::22122222:13:111:1:21::::>,,22>222,2,1122221:,>2:4:,::2,:2:::>:2::::>:::::,:22,::::,:::,2>>>2:,,::::::::::222::::1::1:::1:1:", ":::::t:2:::;:::;::,:,,,,,,,:t:::::4,2:,:::4:>>:2::::::>>>::::::::::::>,,>:>::::;:,,,:::::::::4:::,:::,:,21::::2:>3>:,11::1:1::1:;:>>>1>11::::>>>>12>::::;::;>:::::::::::;::,,:::22:,4,:t,t,::::::::<<:>,,,:,,:,::>>:,>,:>>:>::>>111,1::::2,,:22422::4t::,2,22t222:t:::2:,2ttt:2:t:22:::t,:2:2:2::22322,,22212>1,:::>,1:12,2,1111:1::::1:11111:11>::==:::::>::>>>:::::::>1::111>1:>,>>:112:2:222::::1112::22321:31::32222:::::>11>22222222>121321:>:::::2:2,:2:2::2::>::::,::,:,,2:,::,,,>::,2>>::::22:,:2:::421::t:2111:::::::::", ":4::22:t:,::::,4::,::t22,,t2,,:::::,::,4::;,::2::>::::1>:4::::::::::>>1>>,>>,::;:4:::::::>::;;:::,4,,2,:11:::11>>1::,>>>::1::1::;:>>>,11>::::,21>>2>:,:;:::>:>::>::::>>:::>>:::2:2;,,t,4,:::::2:::::::<,,,:,::1:>,::>5:,>>>:::>:11122>:::23,,2t42::,2::,t2t:2t222:,,423t2t2t3:::,,2t2:,2:,:22:2>22222,:222,1112>::::,,,12221::11:11:::1::1:111:1:::;::->::>:>>-:::,::>>>::11,,1>:1,>>:1122:22221::::::211:222::12:2::2221:::>::22>>212122222122>:2:::,:2:12:,:::>>>>:::::>:>,>,,,,:::,::>:,t2,>>:>:>:::::>:>::111::::1::::::::1:", "22:::::::::::4:,::,::t22,2t2,22:,4::,;;,::,::2::,::>:>>>>:;::::,>>:::,,,>>,>:,,;,,::,::4:4:>;:,,2:2,::4,11:::>:::2:,2>:>:1:11:::=:>>>,,1>::>>:,:>212::,;::;>:::>::::>>>::>>>::::2:,;,;,:::2::4::::>::::,,,:,,:::>2,:>>:>>>>:::::>122>>>>:222,22,,,2:,,4,2::222:t2,::::2,22,2tt:2,:22:2tt,2:22:222:t2222:1222111,:;,:,1,22222111::11:11>>11111:11:::;::>>>>>>>>>:,::::>>1::::,211,1,1::1::::222::::1111121223111122::222211:4:>222>>2t3222,2,,22>::::::::>>:::,2:>>>>1:::>,>>>1,::2,2:,:;<::,22>:1:,>::,:::>>::::::11:1::::1::1::", "::::::2t,::;:::,:::::22::,2t:,2t::4,42;,:::,:::>::>>:>>>1::4:>::::::>,11>:>>,>:;,::2::::::::;::2,::,,22211:4:::::2:::2:>:1>>11::;:>>>>112::>::,:>,1>::;;:::::::::::::>::::1>>::::24,,,,,,;>21:1::::::::>,::::::1>,>>>>:>:>::>>>>2122>>:::23t,22,:,:,,2,:22t22:222,,4::,,2tt22::t2,22,:2:,::22,>2:2:t2:1,12321111::,,,,:122221111:21::1:2:1111:111:::=>:>>::::-:::,:>:>1>1:>>12:111,1>:,,2222221:::1:112::21321:12::222:21:>4:2:2>22222,,2,2,122>:::::,:::>1,2:::>21>>:::>>::>2>2,:,:,::::::1,,::>:>>:::::11:::1:1:::1::::11:1:::", "2:::22::2:;:24;:,:,:,:2,2:2,::::2:4:,:,:;::22>>:4::>>:>>14::4::::::::>,1,:>:>,:::,::::::4:::::1t2:2:::,21>::;:1::1:::>:>>>>>11::=:>>1>>12::::11:>>>,::::=::::::>::::::>>>>21,4:2:2t:42,t:,21::::>::::><>,,,::,:::::>>::>:>::-:>>2111:>:::2t2:22,,:,:,:,:22:2,2:,,,,,4:2,22t22t:ttt,222t22,,,2212:22:21>,1122111::;::>21122>11:111111::2>1::1111::::;::>>>>>>>::::::>:>1:::::12211>>,::>,::2:221::::1::2211231:12222222:222>:::1:222232>,,1,2,2>>1:4:::2,1::2:2:1:1,>>>:::>,:,22:2,24:,:4::::,,:::::>,,::::1:1:::::::1::1:::1::1:", "2::::2,,,24::;::,:,::,2,,,::::,2::::,,4,,;2,,>1>::::1:::,4:4::>:>:::>11>>::::,:4,:::4:::::,::::2::,,,,::2::::::::2::,::::11:1:::;;:::1:11::::,,,>>>>:>:>:::::::::::::::>::1>>::,:,,:,;,,t2,:::::::::::>,5>::>>::>:>5>:::>>:::::>>11>>>::>121:22:::,,:,:22,,,:2222,4,4222:22t2::,2:22222,22,:2,::22,2,,:::222121:::,2,2222:>,212>:11:1112>11:1>1:>>:::->1>>>>>:>>:2:::11:1::1,2211>>2>:>>>222:2::::1:1:121123211222:2t2:22::::::12>22,2>>22:22:1>::4:::,,:::2::,::11>:>:::,:::222,::2t::4::::>:::::1:,:::>>>::::::::11:::::::::1:", "2:::2:,::4:::,:,,:,::,,,,:>>:::2244,,,:4::::,>:::::1:::>::::::>:::::>>>1>1::>:,:,,2:2:;;:,,::::,:,:,:::,,::,4::11:::::::::11::::::::1::11::::,:,>>>>>::-->:::::::::::::>::1>,4:>:,,:,,,,,::2,:>:>:>::::>>>><<>>:>:>>>::>:1>::::>2>1>>:>:>22,22,,,,,:,,42222t,22,,,:,:::,2222,,:t,::2:222:::2222,2::2:222122213114:::,,2:2:2:>>2>111::1:1>>1>1:11>>:::::>>>->:>-::::::11:::::12211>1>>:>>>,>2211:::11:1121:2212:2222:222:2:4::::2>22222>22:2222>1:,::::,:>>::2,2::1>:>::1:2222222,2:t::::;:::::;;:::>,:::>>>:::::1::111:1:::::1::", ":::::,t,,:4::;:::,2:,:,,,>1>:2::::442::,::::>,:1::::::>1:::::1::::::>,>1>1>:::,:,::::,::::::::,,::,,,:::,:::::>:11:,,:4::::1::::;:>>>1:12>::,:,,>>>1:1::::::->::::::::>>::1:,::>,,t,t4,;:,,:>::>:>>:::::>>::>>>>>>>>>>::1:::>:::111>:>:::,22:2242,,:,::,,22t22,,,::,:::22,,t,,:22:t:2222::,:2222::222::22:22121:::,::222>:22:,>:1::111:11:1>>>11>::::::>>>>:>>::>::,::11:>:111,22>>11::,:22,211::::11:11111222:2211:222::11:::::>2222>>212:22212::4::,,:>>>22:::1::1>:::2:::,,,::,:,,:::,,:::,;:::>::,>::::::>::::::1:1:::::1:::", "2,:2:2::4::,::;:::,:::::,>,>:222:::,:24,:42:,11::4::11>2>::::1:::>::,,>>>>>:1:::,:>:22:;::::;:,:,:2::4::::::::>>:::4,::::::::::4;::>,1:12>>::,::>>11>1>:=:::::>>:::::>>:::11::4,:tt4t,t,2:2::::>::::::::<>>:>::>>>>>>>>::1:1::::111:1>:::2t22,2,:,:t,24,:t222:,2:,:,242222::2242::22t2t32:,2:,2:,2:222222:2:111:::::,22:22222:2>:1:::::1>111>>1>1:::::1>>>>>>>::::>,::21::::,11211>1,>::>>>12:1:4:11::1:1122222222:223::111::::1>12>11221:2222:1:1::::,::>>2:22::::::>:,2:,:,,2::2:2:,::;:,::::;::>:::>>:::,::11:::::::1::::::::", "2:41:2,,,,:;,:::,,1:::4,,,2:,,::::4,,:4t::::::>::::::>>>1::::1:::>:;,,>>::>>:::::,:::::::,::;::,,;:,4:::::::;:,:1::::>:::::1::::;;:2,2,,2>>>,,,,>>1>:1::<:::::>>1::1::1:::::::::,:,2,4t,,>1:>::>::::::;>>>><>>>>>1>>>>::::1:::::111:>::::122,12,,,:t::432t,t2:222:::::,t,t::2::t2:,2,22t2::2:22,:2:2222::12211::::::,222:::2:2,::1:::,:,>>21>:111:::::1:1>>>1::::>>2::111:::112221:11::>:2:2222:::2:::11:12323121122:3t::11:::1::22:11121:122::::2::,42,2:::2>2:::::,:::,1:1:22,1::24:::4::::>::;:>>::::::::::::::::1:1:::::::::", ":::22,,,:4;:,:,:::,::::,21,:,,2:,:4;:,::::2,222>:1:12>:>:::::11::::::1,>:::>:1:>,,:::,:::2,::,,2t:,,::;::::;::1::::::>2:::1:::::;;:122:121>>2,,,:1111:>::::=::>-:::::>::4:::::4,::24,,:,>>,,>::>:>>>::;>>5>:>>>>>::>>1>:1:::>::::11:1:::>1,222,,t::t24:,,2222::22,t:t:2tt:2t244t,:22,,3t2::2:22222222::211,1111::::2:2t:22222:2:::::,:::1>211>1>1:::::1:>>>::>:::::1:>211::111222>>>>>:>:22222:::1:::11:11223222112:2222:1::::::::222>:22::22,2:1::2,::2::22:2>>1:11:,:,4:::,,2,>:::2,,:::::::4:;:>::,::::::::::::::::::::::::::", "2:::2,:,,::2::::,,:::::,22,,,,,2:::::,4,:::,:2>>::::121:1:1::11:::;::221>::1::::,,>>>:::::2:,2:22,::,:;:,::;:,,>1::::::::11:::::;4>,,2:,11,>>2,:>>>1:1:::::::::>:1::::::4::::442:::,:,:,>>1,>:::>::::::>>5><>>>>>:>>>>>::::::::::11>2::>>>22t2,t::tt,,::,,2:22:232tt4:2t2:222::2tt222,22224:2222:22:2:t22>11:11:::11,:21:22::2:1::::,>:1>2111>11:::::>:::11:1:::::>::>3211::11132>>>>:>>:2::21>:::11:1:1222212231:222222211:::::12:22222:2:222,,2::,:,2:::2:2:>:1::1:1::,,:::22>>>,,,:,:::::::4>:::::,;:::::::::::::1:::::::::::", ":::2,:,4::4,,:,,,:,:4::,:2:24t::,4:::,:::,,,,,1:1::111:11:1:::1::::::221>::,,,4:,2,,,::::24:4,:,,,::::,,::::4,2::::22:::::,:::::::1>:2::222>>,2>>>>>:1>:::=::::>>::1:1:::::::::::,24::,,,>,11:::::::::=:>5>:>>>>>>>>>1:::>>:>:::11:12:::,2,212,::t::,::,2,,,2:2224,,,:222:t:,::,t::2,::222:::222::2:22221111111>4::>,22:2:112:1:1:::,:>>1>211>>111::::1::1:11:::>,>,:1,1::111>11222>1>>22>22,1>::::111:1:222112221:2:2:2221:4::1:1:2:::,2:2:22,,::4::::::::>:2:2:1::1:,::::1222>2>::::,::4::::::::::::::::::::>>::::::::::::::::", "2::,,,:4,4:,,::2,2:,:::::t:22::2>::::,;,,:2,,2,::::11:2:1:1::1:::::::12>>>:,:::;t2,,:>:::::::::,>>::,:4,,:>;::1::::,1:::::>:::::=:>>:5>>11611>>>>1:1>>>1::::::::>>>:::>:::::::;::::>,;,,2:2t,::::::1::4>1t::,::2::>>>:::::>:::::1>:>,>>:,2222:,:::2:,,::,:,,::222::t::t22:t22:42t,,,22:23:,:2:22:22:2:222222111::::::2:2:>11:1:1:1::1111:1111:111::::1:::111>::::::::>12>::>1,>12111,>:21,1111:::::11::222313:2222:22:22211>::>>21:22:2,2:232:2:::4:::2::::2:2:22:::2:t::::22t22::::::2::::2:::::::::::::::::::::::::::::::::1::", ":4:2,:,t,,;;:,::,::::;,:::2:22::>4:::,,;;,,::22:,4::22121:1::1::::::111>>>,>:::,,t2>:>:::::::,::1>,>::2:::>:;:11:>,1111::::::::::=>:>>>>5>::>>>>:>>1:>>1::::::::>::>:1>:>>:::*:::1:>;::22,:224:>:1::::::,2,:2:2:2::>2::::1>>::::1,>,>>>:,22222,,,tt::::22,,22,22tt2t:::22:::2:2tt:,2,::222::::2::::22::2:122111:::::2:2:>>111::::::::::::1111:111::::::::::>1:::::,,>:>:1>:1,,1>11:1>>>:>211111::1:1:11:2231122322:::221111>;::::2>2:2,::21:222:2:::t::::21:::2::22:2:::t:::,,,:2:::4:::>4::::::::::::::::::::11::::::::::::::::", "24:t;;:;;:4,,::,::::;,::2:22::::,::::,,;::,:::2::::12:121:::::::>:::,2,>>>:::::;,,,:>>:::4:4:,:,12:,24::1:>4::1::,>>>>1::::::::;;:::>1>11>:>>>1>:1111:1::=::::::>:>>:>>:>:::::::>>:>:::,,::224:>:::::::,,,,:222::::,,,:::1>>1:::1,>>1>>::22222,:,t2t,:,22:2:,:,:2:,,24:2:,2,:2:22:,::,22,,:22:22:::22222222313:::1:1>221,1::11::::1::1:::1:11::1::::::1::11:1>::::2::1>2,:>,>111111>>>>>2211:11:::1::1:2222231222:,:222>121>;::>>>212::::221111:1:4:2:2::::2:2,:2::,::::,::,,22,:::::::4::::::4:::::::::1:::::::1::::::1:::::1::", ":2:,2::4,::,,,1,,:::,4:::2:2,::2>:4::,;,;::::2:2:::::2:21::::::::::::21>>>,,,;:,,:>,1>>>2::::,,,21,,,,:,1:>;;:1::::>:>::>>:::::=;:>=>1>111:>>>1>:1:11>1:;;:::;:>>>>>::>:::::4:*::::::,;t2:,,,:::::>>>:>1,,,::2:2:22:,1,:::>>::::1>:>2>:::22222,,:2:t,2422,2,22,,2::2:2:t,::,2:42t22,:,:22:2::2:,21222::22:223:1:4:::>:>>2>1111::::::::1:11:11::1::::::11::::>11::::::>121::>>,,111:11:2>2>:1111:::11:1:22:323:2322,22:21222>:=::>2>1222::111111::::::::::::22:::::222::t,,,:,,,,::t2,::24::>:::>::::::::1:::::1:::::::::::::::::", ":,,,:::t:::t,:1::::4:42>,,,::::::44:,:4t4::::::22:1111:2,:::::::>:::>,1::,1::,:,>>:>:>:>,:::;,,2,::,,,,,::::::1::::2:::>::::::::;:;:>1>>>>>>>>>-:1:11:1::;:::::>1:::::>:1:::4:;:>::;::,,1:,>>:::1::>,::,:t,::21>>,>,,,:;>:>>::>>1>:>11>>,,2:2:2:::22,::,tt2:,:22t::22,,,::,22:,t222:,::22:,,:::2::222:t2:223111::::2::>1111:11::1:::::1::111:1:1:11:*:1:::::>>1:::1::2>22>>>,>1,1111>:1221:1111::2:::2222222312222:22>2122224:::1212222::1:2111::::::::::1:2:2:2::222::,,::,,22:,:4,4424;,:4::4::::::::::1::::::1:::::1::::::1::", "4t:::::;;,4:,::,:,,::4:>2::,2::22::,:t,t,:2:22221:4,:222>::::::1>:::>22,>>,:>::,2>>::>:>::4:::,22,:,,2,:2:::::::>::21::1::::1:::::;:>>>>1>>>>>>>>11>:::1;;::::->:1:::::::>1::;::>>:::,4,1,:,>::>1:>>::,,,,,::,:22,>>>>::>:>>:::>2>>22>:::222,22,t2:t,2,22,2:,2222:,:::,22::22:43t:t,,2,22,4:,:222:22,:2:1222111::::12:2>111::1:::1::::::::111:111:::::1:1>1::11:::>:::2:2>>22,22111>1:>>>1221111::22:2:2222222121:2212112221::::1::22:2:11:2:1111:::4:::1::::2::,2::,::,,,:,,,,,:,,,,:::;;:::::::::*::::::::::1::::::1::::::::::", ":2,::::::,:,:,::::2::,::,,2:::::2442:,:,,,:2:,1,:::21>2:>::::::>>;:::22,>>1,1::,,>::;:>>:::4::1,2,>>,::,t:::::::142>>::1>:>:::::==::>>>>1:>:>>>>>11>:1::;:::>:->11:1::>:::>:4:;>>>::::;,>2,,,::::::,:,,:,,:,,,::>>>>>>:::>>:::-1:1:1>>::>122,,4,,2t2::42222:2222:2:::t:,:t:,2:4,2,::::>>22:2:,:2,:22t:2:2123112:::::2:2:>111:11:::1:1:::1:11:1:11::::11:::>::11:::22:2>22:2:t,2311:1>>>>>222111::::2:22223223112:1221,11222,::>:::2::21:22:2:2:21::::4::::2:2:22:2::2:::,,:::,,:,::::::4:::>::::::::::::::::::::::::::1:::::::::", ":::2,::,,:4:,:,,,,,:::2:22244,22,:4:::,4;::2>2,21::221,21:>4::>>,::::2,>>>111:;,,>::>>2>::::::,,:::>,,:,1:4::>:::::1>>:>:::::1:1::>:>1>>>1:1>>>>>>1111::;::::1>>1:::>:>:::>:::;>>>:::<:,:>::,::>,:,,::::,:,4,::2,,>>:>:>:>>::::>21::,,:>>222,,2,,2t:t:t:2:t2222222:::2t2::,,t:2,t,222:222::2,2:2t::2222211131:2:::::1:11111111:11::::::::1111:1111:::::::>>::1>:::2::22:22:2223231:>::,2>22233:::12:22::2:2313111:12222,222,:::::::22:1:::22222:::::::::::::::2:::,:2,::2::22::,244,4::::::4,::::::::::::::11:::::::1:::::::::::", ":,:t:42,,::<,:,,:,,:<:,>2:,4,,2::4::2,:42,:::,:,:::22>:2>>>:4:>:1:::,2,>:,1>,:4,,,;>>>>>:::;::,1,:::,,:;>>:;>:>:::11:::::::::::-=:::>1>>1>>>>>>>>1>1:1:1:::=>::>1::1:>>>1:::::=:>>,:;:,:>,>:,:::,:::>,,::,;::::1>2>>>>::>::::::>:11:>>>,222222,,,,t,:::,,,:22222:2::,t,2:,,t::222,222:2t2,:22:,::22:22222223111::::22>>::121>>1>::::::::1::1:11111::::1:::>:1:1:::::,,,:>>2211231:>1,:,12222321:::221:2::2222:111:1122221,2,::::12:2t::::2:2:2:21::::4::>:>>>>>>:::22::2,2:,2,,::::4;;,;:::;2:::::::::::::::1:::1::1::1::1::::::", ":::,,::,::;,,::,:,:,,::::,2::,:2::::4t,;:,::,>,11::>122>>::::>:>1::>,2,::,1>::::,,>:>::>:::;:::,,::::,;2>:;::>>::1:1:1111:1:::::;::::>:>1>>>>>>>>>1>::::>-::::::1::::>::>::::=;;>>,4,::,:,>::::,1::,:>,>:,,,2,,:1>>>>>:::>:1>>>>:1:2>>>>122222:t:,2::,:,,22:22:2:t,::,,:,:t2t:4222:22,22,::2,22:2:2222:22:231::::4,:::221121>>2>1:11:1:11:111111:::::,22,,:::::::::1,,11>:,,11221112>:,2:12:2:1::::112222222:13:1::1222:1,2,:::1::2222222222:12::::*:::4:::>>11>:,::2:,:22:::::24,:,,:;:;,:::>::::::::::1:111:1:1::1:::1:::::::1", ",::2,,,,,:4<::,,:,::,::,:22,:2::2:4:,,,;,,,:,>:2,::,>22>1::::>>1>:;,,,,,>1,,:::t,,:;::1::::;4,,:::,:::,,2>:::>>:1::::::1::1::::-::><>>>>1>>>>>>>>1>>1:11::-::::>11:1::>>::::::::>:,:,::2>1>::::>1,1>:>>>,,:,,11,>>>>>::>:::>:::>111>::>1222222:,::t,,>:t222,2222t,:::2,2:t422::t,2::t,,2>:422,:,:22222:22223112::::22>:2>11>>>1>:::::::::1111:111::::>>11>>::1::::::>2,11,,22223>>22,:,,1222311::222:222:232111211:122221222:::::2:22:,2222221::1::::4::::>>>>,12::::2,,,:,22:t4::::;::,:,,;:,:::::::::::1::1::1::1:1:1:::::::::", ":,:2::,:,::<,:::,,:,<,:>::,:,:t:::4:;,;,:4:,,2>>>::>>211>::::::1>:;,,22>:>2,::4,,,::::::::::,::,:,,::,:21>=;:>>:::::::11::1:::::=::::>:>>>>1>11>:1>11::1::>>>:;:1::::>>>:::::::->>,:,4::,>>,2:::>,1>>1:>,:,:,::,1,>>>>>>1:1::::1:11211>::222,:,,:22:2,422,22222:2,,2,4,2:t222:,2::2t22,:2::2,,42:::2:222:223111:4:2::22:>>1>211:1:::::::::11111111::::>:>>>:::::::::>>>21::232211222::11:221211::::222222t2213221:112222122:>::::::222:,:22::2221::::::::>>::,:,2:2::2,:22:2:t:::4:::,,,:;:::::::1:::::::::::::1::::::1:::::::1:", "4,:,,,:t::;:>>>><>::;,:,:,,::::22::4,,;,::>:1,>2>:;>>1,,>:::::::>::,,,,:>>,::::::::;>;::::::,<::::,4;2,t>>:;::1::::,11:1:1::::::::>>>1>>1:>>>>1:>>>>::11:::>:::::::::1111::::-:::>><,:,,,>:::,::>>>>,2:,,,::,:12,>>,>>,>::1::::::1,211::,:23:,,2,,21:,:t2222222:,,2::,2,4:2t2::2:::,22::2::>:,:22:221:222:23222::4,,2>22>>2>>>>::1::::::1:111::111::::11>:1::::::::::1>2>:>23221>>22:1,1:2222111:111222:222222222:2222:212221::::12:2:,,22:2:1::1:::::4::>1:>:,:2::::t,,22:2::t:4::::;:4;::::::::::::::1:::::1::::::::::::::::::", "::,:,:4:,:;,<><::>,:::>,::,::22::::::,,;,,,:,>>2>;:2>>1:>>>;:::,>:;>2,,2,:1>::;t:,,:::::::::,:::,t::,;2,2>;::>>:::1>1::>:11:::1-::>-:>>>>>>>>>>>>11>1::1::::::::1:1:::>>1::111::,,,:::::,,,>,:::1::>>2:2,,,::,,,>>>11>:>:1111::::>11,,::,2222,22,:,::::22222222222:,:,2,2::224t:22::2,222::2:,222:::12:22222222:::::>>:2>:2>>1:111:::11::1111::1311:::1:1::11:::::1::::2,:1233211,,1,:,,2:22211:::1::2:32222:22t222222222::::::2:12:22:22:221::11:::::::>>::1>1:::222:,,:22,tt:44::;;,,;;:::;:4::::-::::::1:::11::1::11:::::::11", ":222,:::,:;,,>::>,,,::<>:22:,,2:2:44,4,,::,>::1>>::>>>,11>>:::>>::::,22:2>>:,;::,:,;:::::::;,:,,;,:4:,:,>>=::>1>>:>>2::1::1:::::-<>>>1>>>>>>>>>>>1111>1>:::>:-:>1:11>1>11::1::-::,:,::,:,1,,,::,>:::,12:2t,::21>22>,1:1>1:11::::11,,>11:2,2222,:,:,4::,t2222222:t2::,:,,:tt2:::t:2:2,,,:22:,2:1:2::::1:22:2t2222:::,>>>2>>221:1:1:::1:::1::311:111::::11>>>:::::::>::>221>,22332222,::11:211211::2:23:11223222222222222::2:11:4:112222:2:2::1::11::::44:>>>:>>,::222:2,t2,:,t:2:::,:;;::;:,4:,:::::::::::1111::::111:1:::::::1:1", "4,4t,,:::<;::<::;<,:<;<,:,,::,2,::42,,,44,,,111>1;:>>>2>2>>:;:::,:::1222:>:>:::,,:::;::::::::::,,,:::422>>:::>>1>:>>2::>:::1::::::-::1>>1>>>>>>1>>111>>1>-:>>>:11:::>>>>1::11:1:::::::::>1,;<,:,1:::1>::22,:,1,,12122,2::1:1:1:>>211,11::222t::,2:,,>4,2222:22:2t2,,::,,2::2::,2:t,:,,2222:222:2:::211:222332::::4:,1:>>>2111:11:1:1:11::1::11::111:::::>,>::11:::::::2:>>>2,2222222:,,222212:1:::3::3:223232:222222222222222:::,12::2::22:21:21::::::::>:>:>2>12::::t2t,2:22:t4,;4::::::::,:::::::::::1:11::11::::1:::111::::::", ":::2t:::2:::::42;;,:,::,,,:::,,:t:4:,,;,:4,2,,:2,:::>121,>:4::>>:::>,221>>>>,::,,,>:;::::>:4::,;,,4:4222:::::42:::>11:>>>>:>::::=::::>>>1>::>>>>11>>>>:1:::>::::::::1::11:>>>>;:,>::::;:t22:2::,>>>>>1:,,,>::1,>1,11222:::>>>>::>22211::22222,,,,:,:::,2t22:22::2t::,:,:2::22,,222::2,,,22:2::1::::1::2:2123212:::::>>>11>,2>>>>11:1:1::11111::1:11::::1:11::11:::4:>1:>::>22232t3,>:,2t212,1::1222:222:322222222212222122,2:2::2222::2::::31:::1::::*::::::::2::>>>22:t22:t2t:t4,:;::::::>:*::::::::::::1:1::11:1:1:::1:::::1:1", ":2:,24t4,:4:,,::,;,:;::,,,,,:,2::::;,4,:,:,2,,:,,:::>>1>>:::::::::>>,22>>>>::,:,,><::>:::::;,,:,t,24,:1:2:::4,:11:>1>:>>>>:::1::;:;>>>:11>::>>>>1111>>>>:-:>::::1::1:1:11>:>>:::>>>,,;:,,:::,:::>>:>>>:>,,,:,,:,>>>,,1,>>>>>>>:>>222:1>:222,,,>,,,4t:,:2222:22,,222::::2:::t,::,2:t::t,2,:::2::1::1:23:32222212:::;,>>>11>>1>1>::11:::1:::111:1:11:1:1:::111::11:::1>11>>>:112223t2::,2t,,2>1:1:::12222223222t2222:22111:3,2:242::,22222331::111:1:::::::11:1222>>>>2>,2:2,2t,::::,:4:::4:>1:::::1:::::::::11::1:::1:1::::::::::", "42::2t,::,::,,,;,:,,;:,,,2:,:,>>2::,;,,44,,:,:::,,;,>1>>>>:::::::::>,2,>>:>::::,,<>:>>:::,:::::t,,,4::2:2:4::::1::::>:>>>>>:::::;;>>:>:>>>:>>>>>>>111>:::::::11:::::::111>:>>>;:,:,:,:,:,,::::::>>>:>>:>,,>;:11>>1>1>>,>:1>><::>:2:2,11:,222,,:2,;;,,:22222:22:,t222,:,:t:ttt:,22t2:t22,2:2t:1:2:::3:3::2:232::1::::>>>111>>:11::1:::::::1::111111::-1::::::1:1:::::11:11:1211222t,>,,t2,222111141112322t222222:1::111112t,2:::::::2t22:::1111:1111::::::::::2,:>>1:::::22,,:2,,,::::,:;:::::::::1:::::::::121:111:11::::11::1:1", "2,,::4tt424,,2,:::::,:,;:,,:::21,,;;,;<,4:,::,,:::;:>1>>>:::>:::::::>,,>>:>:::42:::>>::::::::,:,:2,,4,2:::::::::1:11>>>>>>1::::::>:;:>>>>>:>>>>>11111>>>:-::::::1:::1:::1>>>>>:>>,,:4,,:,,:,::::::::>>>>,,>;:,12>,,>21,>>>,,:::>>22:11::133,,:,,:,t,,422222:222,22,2,2:2::22t,:22:,,2t2,22::2:2::3:3::11:223211::;::>>>,1>>>111::1::111::::111::1>:::::1::1:1:::2:::1:1>:1>21122226>:,22,22211::::11:2222323222222111121:,,222:::::2:232:31:1:11::::::::::1:::2:::1,2:2,:::,22,::,:;::::4:1:::*:::::::1:1:::::12:::1:::::::::1::", "4::::,:4,,:;4t::::,t<::,,t2::,,:::4:,,4:24,,:,2:::;;>>>>1:>-:>::::::,11:>,,:>:;:,::>>;:::::;:,,:,224:t,21:4::::1::11>>>::>:>>::-:>:=>1::>>:>>>>>>>111>>>:-:::11::::1::111>>1>::>>,,:;,,,,2>>;:,:>::>>>>>>,::,:>>>1>1111::,:,:>:>>2>2>>1>:22121,,:,,,,,,22:2:222:::2,::2::,2t2,:2:2222t2224:22::::131:11:22:331:::::::>>11>:,1>>>:::1111:::1111:::1::::::::::1::::::::>:1:>22222222,>,222,2t222:::12212222232:2222:222>22:2:22::::t::222:2:2:1:1:::::::-:4,2::22:::112::,2:2:2t42;:,::::;:::::::::::::::::::2>:121::1:1::::1:::1:", "::,:::24:;;,,,,:::,4;;:::2:,,::>::;:;,::42:>2:,:,::;>>>1::>::::>>:::,,2>:,,:,:;,,:::::>>::;;:,:,,224::22::::::::::::>>>>:>:1>>:::>::>,>>>::>>>>>>>111>>:>1:>:>>11::::::1>>::>:;>:,,::,>,::2>::::>>>>>>>:,,,:>,>>1>1>111:>>>:11::>12::>::12221,,:<,,<::>1221::22:22:22::22,:22,,:::t2t23:2::22:2::::3111122222::1:;::>>>1>>>111>>:11::1:1:1::::111:1::111:111:1112::::::::,t22222221::2t2,2222::1:1:2122123232322222322212:2222::2::2:2:2223:11:1111::::::,:12:11>>:::,222::2t:2::,,::,:::::,:::::::::::::::>24>:::1:::::111::::1", "::::4::,,,;,,,,:::,44,:,4,:,:,:>,::::::,::::2:,,:::::>>>1:::::>>>>::1,2>:,,>>:;,,>:::>>>:::;:,:tt2,:4:22::*::::1>:>:>::>:>>:::::;:<::>>>>>>>>>>>>11111:>:::>::>::>1:>::111::::;:,22:::,,,,,>::::::,::>>:,,:::,:>>>,1111::1>>1::::1>222::,1,tt::,:,,:>:>22,::2,2,2:2:::222,,t,2:2:t2t22222:::::22::321:2:122211:2::::>>>,>1>111>>11::::::1:11::1:11:1:111:::1:::1::::1>>::222362222>>,,2,2t222::1:::21111:3223222::22221>2222:::::,::1::221::1:1:11:::::::2::1::1>>2:2:2::::::2t,:;;:::>4:::::::::::::::::::>:::::::1::::11::1:1:", "2,::2,:2t;:,;,,:::,,:::>22:::::::,4,,;::4::::2>::::,>::1::::::>>>>,:21,1>,>>>:;,,:,::>;>:::;:::,2t::2::2:1::::::>:>::::::>::>>:-=::=:>>>>>->>>>>>11111::::-1:>>>::11>::1,,,:::;;:22,;,::,,,,,2:::>>::::::,1::,>>11>111>:>>>>::::11>22:::,2222t:::,,,;,112,,:,2,,:2:::2,:::,2,:,:,,2,2:222::2::222:3:12::12221:2:>:::>>:1,1>1112>:1::::::::1::11111::-:1::1::1::1::2:1:1:>>,22222221>>,>2,22222:1:1:22111:222223:,2>>2121:::222:42:2::221::3::1:::11:1:::422:::2>,,:::2:,22:2:2::,::,>:::4:::::::::::::::::>:>:::1::::::::::1:1::", "4,4::>:::,:;t2:::,,:4,:::>>:::,:,:4:::;:;:,::,2::::>>:>1>:::::>>1:::2,,>,:2::::,,,><:::>:::4:::tt,,::>>>::4:::::::>:>:>::::::::=::-:>>:11>::>>>>111111:::::1:11:11>>::>11>::::;;,,2:;,,::,2:1:,:::1::::::>,:>>:1>>1231>>>:1:::>::,:,:22::2,12,,:;,,,:;:122>121,,,,2::,2:2:,2,:,,2,2,:22:2::2::2:::2213:2112111:::;::>>>,>,1>12,>:1:::::::11::1:11::::::::1::1::::>1>:,1>,2222212,1>>,22,222,21::::111111231223112>>11111>>232,:::::2:22::1121:::22:::::::2:2:2:22:2:2::22>2::,,:,:::,:;;4:::::::::::::::::>:>::::::::::1:::11:::", ":,,,:2::,:4,,t2,:,,::::::>:>:>,2,>::,:,;;;:,,::,>::4::>,::::::>>>1:>2111>:,::;::,:,:::<:::4::::232:;:>>,::::::::>:1>::1-:1:::>::=:>::>::>>::>>>>111111>:::::::11:111:>:11>>>:>>;>222:::::,:::1:::::::>:1,:>>>1:>>1,15>>:>::1>>::1,:222::,1,122:::::,:::2>22:21::::2,2:2::,,22::2t:2,::2::2:222:::22:2:2:,222122::::>1>>>,>22112>1::::::::11111:111::::::::1:1::::>22112>,>2222123,>>>,2,:22222::1111:111111111312>>1>111>>222,::::::2:1:211:2::31:21:::44:::2:2::,,,:2:2:,:::,;;;,:::::;::::::*:::::::::::1:>>::11:11::11:1:::11", ":,:::,:::,:;,2,,:,t::,:,:::>:::::>4:,;;<,::,::,2:::::::1>::::::>1::,2,1,>:,::::,,,>:>::>:::::::222>::::,11:4:>>::>1:::::::::::::::->:>:>>->:->>>>1>>11::-::11111:11:::>>1>:>:,::1>,::,:,,:,::>:::1::>1::,:>>:>>>11112,,>:>>>>::>:1:::t::12221,,:;,:t:::1:2,::1>,:,,2,:2:t::,2,:2:t2:2,:22::::2:2:112:2::121322,::::>>:>>>12>1,111:1::::1:11:1:1:11::-::::1>>>::::>,2112:>>22211>22>,,22,2222222::11:111112122:212>>11111>12t22>::::22::12:2:2:2:1:1:1::::2:22::2222,,::::::>,::::,:::::;::*:::44::::::::>>>:>:::1::::::::::1:1::", "::::>>:>:::,,t,:,,1:4::::::>::1:>>::,;<,;;;::,:2>;:::>:,>::::::>:>:12,,>>,,,;::,::><:>>>::::4:>2,2,::,>::::::::>:>>:::::::::::::-::::>>>:>>:>>>>>1>>>1:=:::11::11:11::>:>>:>,:;;>>,,;:,:,:,:::2>:1::>:::,,>::>>11>152>,,>>1>>>:>>>:::22:,22,1,,::,:,:::,:2,:>,>:::22,,:2,,22,2:t:t2t2,:2:2:2:22:::12322::,1222:2>::,:>>1>122:11::::1::::::::111:11::::1:::111:::,>1112>>>122222>,>>:,,,,2,22122:121:1:22122231122>221111:22222>>:,::2::12:11:2:21:1::1:::::2::2,:,2,:2:2>,:2>,,::,,::::;:::::::::::::::1>:>:>::::1:11::::11::11:", "42::>>:>,::4,t,4,,,,:::1::,,:::::,4,,,4t4:t::,,,>:4:>1>1>:::::>>::::2:2:2>,2:::2>:::,,>>:,44:::t,2,>::1>:::44:::::>::::::::::::=:::::>11>:::::>>11>>11:::::1:111>>1:::::>1>>>>:::>1>:,,t,>:11>>::::::::,,,,;:>>>>,2,2,,:>>1>:::>:>>>:2::>22>,,::,,:;:::2,2::>>:,4:2242t22:2222:2:2222:2:22::::22:::22:2:>1,12,2>>::1>>,1>121111::11::::1::1:11::11:::::1::1>>>::;>12121:>2221,2>11>:,2,>,222>1>::11::122111221211>2211112:2222>::::,2,:::22::2:21:::::1:::::2,,,:22,::::,:>2,:,::::::;:;::::::::*::::::::>>:>::::::11:::::1::111", ":::4:>:::,:,,t,,:,,:::,:::;>,::>,::;;,,44,,,,,,>>;4::>>1>:;;>::>:>:,2222>>,:,:4,,:,:<::>,;,:4::,,t,:::1:::::::1:>:>:::::111-:>>:=::::>>>>>:>:>::11>>>::::::1:11:1>>1::::1>>>:>:::>,::::,>121:1>::>1:,:::,,1>:>::>,222,,::21>:>::1>>>2:2::2,22,,,;::,>::2,2::,>>:t:2:,2222tt2:::2t2t:22:22::22:2222:2:2:212,1>22>:::>>1>>>:,>,111111:::::1::1111111:::::::>:>1:::>:1111::,221222222>,,21,2:,:21::1211:1212231223211223121:22t22>:::22222:222:1:1111:11:::4:,2:,,::2,:2:22::>>::,2,:,:::::4:::::**:::::1::::>>:::::11:::::::1::1:1", "::::>,,,:::;,2,4::,:4::,>>:>::::,::;4,,44::,2t,,::::>>>1,>::<::>>>42,22:1,:,>:;,>>,,,:,>::::,:,,,2,,:,1:::4:::::>:>::::::1:::>>==::::>:>>:->>1-111>>>>:::::1:1>>1111::112>:,2,4:>:,::,2:,,,::::::::>:::;:2,:>>:>1222,,><>>1::>::>:,:222::t,>22,,4,::>>11>,>:,,::422,::,2ttt22:,2,:t::22:t:,,:2:2:::23::212>22>2>:::>>::11,,>1:1:1:11:::::111111:111:-::1>>>>>:::::11,1>:2212226222,:,212,2,121:::3111112321111211221112:22t332:::::222:22:2::11:211:::24:::,:::::2t:::::2:>>:,:,,:::::::::::*:::::::::::1:1:::::::1:1::::1:::11:", ":2:4:>>::::4:t2::::,::,,:>>>,:::2::;::,t:::,,211>:::>>>>>:::=:>>>>:>,:2>2,4,>;;>,>::>>:>,::;,,,2,,,,:>>111::::::::::::::::::::>:=::::>>>:>:::->1111>:>::::11>1111111-::121:,1::>>>,:4::>,2,,,,::::::>>::,:,,:>>>>>2,2,::>11>:>::>11:2,::>2,2:2,:,:,:>::,12>>:,,:24,,,:::,2t32::t2:2222::2,2::2222222:::212>221>,::::1:1::>1,11111::::::11:11111:1::::::1>>:>1:::::111>:>>222222222::,2>22111111:11:11112223:113212122122:23t22:4:,::22:222:1:1:::1:211::::,22:22:222:,::::::::,,::,::>:4:::4::::::::::::1:>:::::::::1:1::::1::1:", "::4:::::::;:t,,:::::::,,::>>:::>2:4:,t,,4:::,,,:,:::::22:::;;:>>>:::,11,1::,:;>>,:::,:::1>:4t::222t4::t:>>:4:::1::::::::::::::::*::::::::1::::::111::1:::::1>11111::::>111>11>::>:>,;:>,2t,>>1::;::::1:>:1,,:::>>1212,,:2:1:>>:>111::1::111::2:,:::,::2,1,,:112:t42:,,,:22222:,2,22,t2::2,:2,22::223:2:2222:21:1::42::1::111:12111:::::1:111111:1::::::1:1::1::::::111::>222222221>:12,111,22>>:2:21:2122211313112:3222:12232,:::2:2,:::2222:21::22:21:::::122:2:22::2:2,::,::::,:::,:::::4::::4::::::::::::1:::1:11:1111::::11:", "4:::::::,:,<;,,::::::;,;:,>>:>>>2:;;4,,,,4:,,,,,,::4:::2::::::>:>>::,22,,>:,>:::>::,:1,:,,>:::,tt2:t2t2:1>4:4:>:::::::::::::::::::::1::1:::::::1111:1::1>::>>>>1111:>:1>11>1>:=::>::<:>,22,>,>,:::::::>::,:::,>>>>,222::,221>>:::11111::111>,t,,,;:,2::,2:::>22::::,::,2t,,2,2,,,22,:222,,,,2:2:2::::::2:2222::2::::1::111:1112:::1::::1::111::1:::::::::::1:::::1:11::1:2122222,::>:,,>2,2221:::21112133131:32:22222222:2232:::4:,222222::2:2:1:2:11::::::1:22::2:22::,::,::::,:::,::4::::::4::::::::::1::1:::::1:1:::::::1::1:", "::::::,:,:;;t,::::,::::;:,>>:::>,:4,2,4,;;:,,,,,::4::::2::::::>:::::,22>,>>>>::>:,>::,:::>>:t::t22:,4t2::::;:::>::1:::1-=:::::::4:::::::1:::::::11111::1:::>>1>111>>:11111>1>:::>>::;:,,,,>>>>,:>>:>>>>>::,::>:>:>t,2:,::,::::::::11111::,1>12,:,:,,2:2222,:,23,::,::,22222::,,,2:,22t3:,,:,2::::31:22:::22:1::1::::::11111:1:1:1::::::::::1111::1:::::::1:1:::1::1:1::>:1,222231>::>,>1222211:::211111122111::322223122123t3:2::>::,:22::::121:2:2::11:::::2:1121::2:,,::::,,:,:::::::::::444::::::::::::::::::1::1::1::1:1::11", "::4:::::,:;,,,::::,:;;,,,,:,:::>,,;:,,::,;:,,,:22::,2::2::::::>>:::,>2>>1>>,:::>1,:;::::>142::222::4:::2::4;::>:11:>:1:::::::::;::::::::::1::1::11111::1:::>:>>11>1>:11:11>1>::>:::<;>>:>2>>:,;:>>>>>>>>,>,:4>:>>,2,2:,::221,::::111:::::1>>2,>::2,::4,22211223,:2:2,:,22,2222,t,,2,:t2t:222:2:21::3:::2::221111::412:1:1:1:1111::::::::1:11:11111:1:::::::::::::11111:::,,:11221>>;::,>2223311:2:12123133313:3::2232222:2222,:::14:,21:2122:11::2::2:1::::2:1::1:1:,::,:::,,::,::::::4::::::::4::::::::1::1::1::::1:1:::1::1:1:", "4::::2:>::;:,,:>,::::::::2>>11:1,::;,::,;;,,,::2>::::1::>::::::>,:::2,11,>>>>::>2>>::::1::::12222:2::,:2:::;:::::::::1::*::::::=::*::::::::::11:31111:1::::>>>>1>111:11:15>1:::;::::::,:>>2::,::::>>>>::,:,,:>:>>>2t:22::211>>:::11:>::::211t::::,,:::22,2:,,23:4:,2222,:2::,2:22:,2,t3::2:2:2:::3::3:2:2122:21:::4:22:21::111111::::::1:1111:1111:::1::::::::::4,,211::2222211321>:::>1122311::111:1311321121:322222:31222t3:1:41:>,1:22:22::21::22>11>:42:2:111:11:::2:::,,,4:,:4:t44::::4::4:::::::::::::::1:::1::1:11::::1:1", ":4::::::::;,,>:::,,::;:,:2>,::::,:4:,,,44,;,:,:,2::::21::::4:::>>::::111>>::>::>>>>:::::>:42,,:22:,::,,:>::;:::::::1:1:::::::::::4::::*:::1:::::1111111:::-1:->11>:>1:111>>1>::::::::,,2:11:>>:::,::>>::,>,>:::>:22,,,2:::2>1:::::11>11::111,2:;:>>>::2,222:>>1>::,,2:2,t22,::,t22,22:2:2:222::2:::3:::::1:33:::::::::1:111111:::::1::::1:1111:::11:::::::::1:1:::t2,,::2222211121::>:,11,13211:111111133311213:::22:23::223211::::1>>,,22::222:12:21>>:::::2::1:1:::::,::,:::2,2:::::::::::::*::::::::::1:1:1:1:1::1:1::1:1::::", "::::>:1:,:;,,:::::::;:::,:>1:111::4:<,,;:,::2:::>:::1::1:::::::>>::,,,1>>,>>:::::>::::::::44:2,,:,,:4,:2:::;::1::::1::::::::::::::*::::::1::::1:11131111>:::->>111>1:>1>11>1>:;::,::::::1:1,>>:::>:,>::>>>>,>:>:22,,:2:::2111>::>111>:1::122,>>::,,>>4,:121>,>1>:22:2,,:,222:::2222t2:2:2:2::22:223:1:2:11::2:23:::::::111111111:1::::::::111:1::11:*:::::::::11:22:,>:,t22221132,::::1>221131:11:1112133311:3:::22212:::2232:2:::1:>22:2::222:2:::22>2:::::::2:1:::1:::::24:::,::::4:4:::::::::::::::1:::::11:::1:1::::::1:1:::", "::::::>:,:;:,<;,:,2,:;;::,::::::,::4<,,:42,,:2:2::::1:::>::4:::,>:::22,>>>:>:::>>1:::::::::,,,,::22::,,:::;:::1::::::1:::*::::=:*::::*:::::::::11311111:-::::>>1>1:1::111>>61:;::::::,:,,,1:>>::>>>>::>>,>,>::>:::,,:22,::1,1>:::111>:>:1>>2,>:::,,,::,211,1,>2>:22::2:22:t2:,:2:222,22222:2::22:1:31::::112:2::::4:21:::1::11:1::::1::::111111:111:::::*:::1:::::2>>::,2t23111321::>:,22,111:::11:1111312112::3:::322132222222:4:::2:,,2222:::12:222>2::::::::211:1::::::,,:::,:::::::4:::::::::::::1:::1:1::::::1:::1:1:::11::", "::::::,::,::::;::2:,4::::,::,:>1::::t,,44,:,:,:1::::>:11:::4:::>>::>>22>>>,:>::::,:::::,::4,,,,:2,,4:,:,::;::::::1:::1::::::::*::4:4::::::::::::111361:::::;:::>:1:::::11>:>>::::,:::,;,,>,>>1::>>,,>:,:>>,>:>>::,,,>2>>:,2>>>:>:>22>>>>::,21,,:;,,:::1122,1,,2>,22::2,,,,2,:,,222,2,,222:1:::22::11:::1::1::11:::::11::1:1111::::::1::11:1111:1111:::::::::::::::::::2,222211111>>:>>>222221>::11:11:111331111131132223:222211:::::,:,22:2:2,::1,122>22:::>1>>>:::1::,:::2::422,:::::4::::::>:>:::::1:::1:11::::1:1::::1:::1:::", "::,::,,:,:::::,:::,:::4::,>:,,,>,::44,t4:<,:,1::::::>:::>::::::>::::>2>2>>::>:::,::::::,2,:::,,,,,,:4<,:::;:::1::1:::::::::::::::44::::::::::::1>1111>::::;::::>:11111:1>>:::::=:,::;::,>>2,>>:::>:,:>>:,,,,:>>>,:22,2>,:,,>>>:>>>221>>>,1,21,::,,,2>4:1,212222>:3t2,::2,:,22,:2,2:,:2t222:1:12:1:111:::121211::1::4:1:::1111:1:::11:::::1:11:1::11:::::::1:::::::4,::,2,22211111>::>:>122222>>>2222211111111111:11:22:222:32:::4::::2t2:22:22:2:,>122,2:;::1>>>111:,,,::::::,42:::::::::*:11::::::::::::::::1:::::1:::1:1:1:1::", ":;::,:,::::;;,,;:::::4:4::,:,:>>:,::tt::4,,,,1:>:::::1>:::::::::::<:>,>>>::,:::>,,:,:::::::;:,:22,:;:,4,::;::::::::::::::*::::::*:**:::::::::11:>11111>:<:::<1>>>1111:11>:->:::::,,:;;,,,,2>:>::;::,:>>:::,>>::>:,,2,,::::22>>>:>>12,:>>>>,1,,,:::,:,::,,3,,,21,2t2::2:2,:,22:,:,22,,2,222:::::11:21::::1:13121::::41::11:11111::::11::11::1111:111::::::1::::::::::,::,2232212111::>>,,222311>:1:222111131111311:3222:12:2222::::::,2t:2:22:t:211>1:2,::::::1>>>>1::,:2::1::::4::::::=::::11::::::::::::1:1::::::11::1:1:11:1:1", "<::::>>:,,:;;::,:::>::::::,:,,>:::,4;,<4:;,,1:::,::::1>:::::::::>=:>>>,:>>>>:::>:,::,:,::,:::,,,:,,::,,,:::4::::::::::*::::1:::::::::::::1:::::1>111>>>>:::>>1>>>>:11:::>:1>:::::,2,,,:,>,,>:::;:,:,1>>:,,1>>::>:>22:112:22:>,::>:121:>>>221>>::::22:::1>21>22,,222:::,::,,,t42,222222222::1111:::::1::1:111::::1::::::111:1:111:::1:::::::1111::11:::::::1::::::::2,,:,:22211121:::>2:2212231>::12222111131111113:222312t23222:4:,2:,2::22:22:21>>,2:2::::::1>>11>>,:,::>:::,:,::4:;::::4::1:4::::::1:::::::1:1::111::1:1:::1::", ",::<:,>::>:;;:::::;,:::::::2,:::::::;,,;4,,,:,>,:4;:,:>::::::::>:::,>,>>><>,<:>>:::;::2:::;:>,,,:,::::,,::::4::4::::::::::::::::-::::1::::::::11>11111>>::>:>>1>>>>>1::>>::::>::>1,:<,,2,,6>>>:::>:,>:::,::,:::>:,22,21::,>>2>>:::1>1>>:>,21>>:,:,,,:::,221,222,:,:::,t,22t:2,2:,,,:222212:11:::2::21:::::11:::11:4::::1:111:11::::1:::::::1:1:1::1::::::::::::::2:11::,2>12111:1>::22,2222211:::1221311113211111:13222::222222::t:,t:222:2::t:2,>>>>,21:::>:111:,>>:::::::>>:42::::::4::::::::4:::::1:::::11::::111111::1:1:::1", ":::::>,>:::;;,:;:,:::::4::2:::2::::4;;:4;:;,:>,>:::::,>::>::::>::=:,>>2>,>>:::>>2:;:,:::::42,,>1>,>::4;,::4:::;::::*:::::::::::::::::::::::::::1111111>>::>>:>11>>:>1>:>>:,:>::>,,,>,;,,112,:>::::>,,:>4::,,1:>,:122,11:>>>22>>::>311>>>>>21:,,,:,1,1::1221>12222,2::222t222:,t:,,22:2222:1::1:12:2:11:::2211:::1::::111::111:1:1::11::1:1::111:1:1:::1::1:1:::::::::::2222211211>>::,:2212111:::122123113111111111122222223222::::::2:22:2222::2:>,>,>>:::>:1:::1:2>>:::>::>>,;,::::::4::::::::::2:::11:::1111:1:11:1::::11:::1", ":::::,:>,,;;;;::<:::::4::::22::::::;,;::4,,4;>:>1:;::>::::::1:1::;::,22>,>,:::><:,,:422:>::2,,2>>1,:,4::::44;::;::::*::::::::::::::::::::1:::::111111>>:;::::1>1>1>>1::1>>>:::::,,,,,4,22262>>>;::,:,>,:::,,,:,1:,22,,2:>>>211>:>1111:1:1,>,,><>::22::::121>,12,2,1::232:t22,,2,t2::2222221::11122:212:1::2:11::11::::1:1:111:1:::::1::1:1:11111111:::1::::11::::::1:>:::2:2122:>:>:11>1211211>:1:122232221111111111222222322:2:4::22::22:2::222:2:,1,2:;::>1::11:1::>>:>:::>::::,:::4:::::::::::::11::::1::111:1:1111::1:1:::11", ":,::>>:>,::;;::::::::::,::2::::::,;;4,,;::::>:,,1::;:>>::::::::1::<:>,>,,>:::<::,:4:,::>:>4,>,,1,1>:,;:::::4;:;::::::::-:::::::*-::::1::::::::1113111>:>;:>::>1111>11>:>>>>:::<::,,,,,,2>,22>>::>>,>,>,,,,22,::1>:,21,1>>1>2111:>1111>>>>>11,,:>::,:1::,221:>>2,,,>>:tt222t:,,,::2:2:222:1::2111:22:2:::::21111:1::::1:11:11:1:::1::1::::::11:11111:::::1::1:1:::::::1>2,,211::1>>>:122>112231:1:1:1122233131111111122:2:2222:2::,::::2222:222::,211,11:::::1::11:1:2:>:>2:,>::,,,:4::*4:4:::::::2:::11:::1111:::1:11:::::::::::", "::::>::>:,:;;:::,:<::::,::,>:;::::4::::4:4:::>>:::4::::::::::1::::::,>2>>>>:<:<:>><:,,:>:::><>1,>,>::::::::::::4:::::>:::::::::-:*::::::::::::111111>>:>>>>>>>11>111>1>:1:1>>:;:>1,,,:,,1222>::::,,:>,,:,,2,,>,1,>2221,:>>>221::>>221>1>,:12,>:>,::1,::,111::222:2:::2222t,2:,,:t32t:22222:,2:221112::::::3:11:11:::::1:1:1::11::::::::::::11:1111::::::1:::::::;:>>:2>11,211,1>1>>:,211212322>>11:11123322311312121111112222:2:42:t:2:t2::2222:222:22:::::::::::11::1::>::>>:>>:::;*::=:::::::::1:::1:1:1:11::1:1:11::::::11:1:", ":,<::,::,,:;:,:,:::::::::,:,><:::::44::::::::::,:::::1:::::::::::::,,,,1>>>5>::,><:::::::::><>,,:,:,::4::::4*4:::::::>::::::::::::::::>::11::::11111>>:>->1>1111111:1>>>>:11,:;,,,:,t221122,>>:;:::,,>,,,2,2,>>>1>22t1,,:>1,2:>:,1222>>>,11>>>:,,::,:::1232::2212,22:2t:t2,:,,:2:t2:22222::,2::::1222:::11:3111::1::::::11:111:::::11::11:1111111:1::::::1::1::::>>>>>>>,121122>>>>:>1122122221>::11:222122211111122232:::222:2:4::2:::2222:2::222:2::12:::::::1::1>:1::::::>:,>::;:::::::::>>:::::::11::::11:1:1:::1:::::::::::", "::;::::,,:<;<:::::::>;;:::,:;::::::4::;4:;;::>:,:::::1>:::::::::::::,,>,>>>>>:::,::<>::::;:<,>,,:,>>:;4:::::::::-:::>>:::::::::::44;:::>1::::::13111>>::>11>>>>111111>111::1:;<,,,:>t3t1222>>><<:,::>>>>,,,,>>>,>>:,,,2>::121>>:,2221>1>>22,>>:,,:,:,::2221,:231:22:2:t22:,22:::422:,t23:2:22:2:1::2:::3:2:3:1111::::::1:1:1111::::::::::::1:1111:::::::::::::1::>>>>>::>111112>>>>:>211222211>>11:12222133111121111232111212:2:::::,2,t2:2::2:222:::11:::::11::1:>::1>::>>:>>>:;::;::::::::::::::::111:1:1::1::1::1::::1:1:::::", ":::;:::,,:>>::::<::>>;;:::::::::4:::::,:;:;:::,,::4:::1>1:1*:::::;::>>>>:><><<<::<:,>,:>>:;>>;::::;>:::::::44:::::::::::*:1::::::4:::::>::::::111111>>>:>>>>1>1111>:>>>>1:>:>::,:,::,t212,1>>>::>1>>>2,,>2,,,>>>>>22211>:11111>:>12>>>,::222,>:,,,,1,::2211,>2212,:2:2:2t222,,t:2222,3222:::22221:::2:::2:2:111:1:::::1::111:11:1::::::1:::11:::1::::::11:11:::::>>>>>::>11,121>1>>:>,11>>11111:1:1:2233211311121112121112222:2::2:t:::2:22:2:2:t::2::11:::::::>>:>:1:::::::::>:::::::::4:::::::::::::1::1:::1:1::::1:::11::1:::", ":::::<:::::,<:::::::,;;;;:::::::4::4;,:::;;:::11:::::111::::::::::>>>>1,>:::::<,,:>:>:>,>:::<>:>::;,:::4::::::4::::::::::::1:::::4:::::::11::::111111>::->1>1>1>>1>>1111::11>:,::,::::t12,,:::;>>1>>:2,:,,,>1>:,:22,,,,:>>>221::>22>>>1:,,221><:,,:,,:,23112,221:2:::2:::222::::222:222222:::3:2:::2::::::11111::::::::::11:1::1:::::::::::1111:1::::::::1::::::;>:1>:::>121,221>>1>>1,,21>1111>1::112233231221111132221121:1122:::,,2:,22222:222:1:111::::::1:11:1::1::::>::;:::::4:::::::::::::::::11:::1:1::::1:::::::1:::::1", ">:::::,,:,::>>;::::,:;:::::::>:::,:4;;:;;::;:,>>::4::>>::1::::::::;>,22>>:>>>>=:<>::<:<>,::::>>:::;:::::::::444:::::::>-:::::::::4*:=::::1:::::11111:>>>>1>>11>111>>1111:111,,;<,,,::::,9,1>>::::1>,,22,:,>,,>>>:>:222,::>11>11:>23>::1:>2,2,>>,,::::::22,2,22t22::,,2t:222,t:2t:2:22t2t2:::2::::21:22::3::1:2111::::::11:111:::1::::::11::1:::1:::::::::::::::::::>1:::1222222>>1>>1>1,212311111:11:222232222211121212111:22:22,::2:::,:222211222:21:1:::::::1:>:1>1:::::>::::::::4:::::4::::::1::1::111::1:1::1::11::::111::::", "1::::;:,:,::>;:::::::::;:;:::::::::::::::;:::>>>:::::>1>>1::::1:::::>2>>><>:>:::>>:>:>:::::;:>>::<:::::::::*::4:::::::::::::::::=:=::::::::1::113111>>:>>>>>1111>>>>1111:>1>>:::2,,,:::2221>::;::>>2,22,,1>,>>:>>>>222,>:>11>11::13>>>1>>2112>,>:,,:::,2212,t232222:,2,,,22,:::2222:,t22221:1:3::2:2:::::111::3:1::*:::11::11:1::::1::::1::11:111:::::::1:::::::;>:>:>:>>3222221>1>:55123211111>112:22212232211:1112222:12212:2242::,::2:22:,:122::22:1::::::1:::1:1::::::>>>:>:::::::>:::;4:::::::111:1:::::1:1:1:1:::::1::::::", ">>:>:;,:,:;,>:<;:>><::;::::4:::::::4;;,:;:;::,>>::::::::>::::::::>:>,>>:>:::<::,<>::<:::::;:<>>::,::::4*::::*:::::-:::::*::::::1:::::::::1:::::11111>>:::>1>1111:>>>1111::1:>;::,:,,::::222>>:;:::>2212,,,>>>>>>2::>2t2:1:>>11>>:>31>>>>:,22,,>>,::,>:,21>1222323:2::2,2,,t:24222t222,22221:::3:2:::3::::::11::::1::::::1::11:::1::::::::::11::11:::::::::::::::::;>1>:>>2>12122>5>:>1122111111>122:121123323111:11222222:222:::4::,:::,2:2:,>:222:1:111::::::1:::1:::::1:::>>:::::;:::>::::::,:::::::1::11:1:::1::11:1:::1:1:1:", ">>:::;::>::>><<::,<:::;>::4:::::;::4::>;4:::1:1::;:::::>::::::::1:>>,,>:>:>:::::,:::::::>::::::>::<:::<;1::*:4::::::::::::::::::::;::::::>::::>111111>:::>1>>161>:->>111>:>>:;:,t2,,:,:22t1:::;>>>>1222,,,,>1>:>>>>,,22>:1>2>>>:>>32>>>>:,1,,,2:,:,:1:,22122:,t22,:,:2,,:,,:,4:t22:2:t222::::22:::::11:2:11:1:11111::::11:111::1:::::::::::11::111:::::::::::::::>:>1>::>111312>>1>>212,211111,>22::221323321311112112222222:22:::::,::2,:2::22222:>::211:::1::::11:::::>>>::>>;::::::::::4::::::::::11:::1::11::1::::::::1::1:1", ">>:<;:::::=>;>:::::;::;:;:::::::>::4;::;::4::1::::;:::>>1*::*:::>:>>>,>>:>>>:::,,<::::::::=::::,::::::;>:::::4:::::::::::::::::::=;:=::::1>>>>>111:11>>-:>111111>>:>>>11111::;:,22,,:,,t222:::;>>>:1222,2,,2,:>>2>>2122>::>>>11>>>221>>>>:21,2,:2,:1,::21122,2222,,:22,2t22:2:,2:2,:23t322,:2:12111:11:211:111::1:::*:::::1:111:::::::::::::111:1:::*::::1::::::::;>2>:::11122221>1>,,211112111>:222221123311111111112222,222:::422::::3:2222112222>2::2:::4::1::1:::1:::>:::>>::::::::::::::::::::1:1:::::::1::1:1::11::1::1:11", ">:::::<:>:::><:::::,::4>>:::::>1:::;;;:;;;::>1:1::;::::>::::::::>:::>>>>>>>>::><>::::::4:;::<::,::;:;;;>:::::4:::::1::::::::::::::=:;:::::>::>>>>1:1>>>=>>1:>111>::>>:11111::;>,,,:::,1t11,::;::>::>>,2,2,,2>:>>,2,1>21>::1112>>>>21>1>>:>1,12,,,:,:::,,:1,121322,:::2,t::2:t,22222,22tt:2:,122:11::1::::1:11::::::::::1:1:1:1111::::::::1:11::11:::::1::::::::::>>22>::>1,1112311>>,122111231>>:221221323221311111111222222::2:::::2,222::2:222222>2:2::::::::1:1:1>>>::::1>>>::::4*::::::::::>:::::::::::1:111:1:1:::::::::1::", ">:::::::>>:=;>:<::::::;:;:4>:::::::::;::;:4:>>11:::::::>::::::::::<>:>>>>:::<>>>::>:,:::::=:,:::>::>:;<>:*:::4::::::1:::::::::::::::;::::::><>:>1:11>:>::>11>>>1>>>>>>:>:1>:;<>:,:::4,22>>,:>:;,>::>>>2,2,22,>>,,,22>1:1:>12,,,:>12>122>>1,221,>:::,,::>1,:1212,2,::2:t:t::,::,t2222:t332:::::11:1:1:22:1:11::::1:::*:11:1:11:1:::::::::::::1:1::1::::::::::::::::>2>::::>>2>1221>1>>,,11311211>:2:12221233311111111112222222::4:::1::::2:2:21222>:,22::1:::::1:::1:>>>:::::>>>::1::::::::::::>::::::1:1::1:11:1:1::1:1:::11::::", ">:;<::;::>::<::;;::<::4:::4::;::>::;<:::4:;:1::::::::::::::::::1>:::>:>:><>::::>:>>:,::;::4:>>::::::;::::::::::::::::::::1::::::->:=->>>:1::>::>1111>>->:>11>>>>>111111>:>1::=:,:;,:;,22>>,1,::::>:1>:,:,,,2>:,,,,22:>:::>,1>,,:>>2>>22>:12,2>,,:,,2,:,>,1,111t222::2:2:::2:,:22t2,::2tt:2::2:21:::11111::1111::1::::::::::11::1:::::::::1:1111:11::::1::1:::::::::1>:::::11>1221,1:1,211121235:222111312322132112211:22:222211:::1:::222:2:2:21:1:22,2::4::::::>:>>11:1:>:::>:::::::::::::::::::::::::::11111::::::::1:1:1:1:1:", ":::><::::::::::;:::::::4:::::::>::::4;;:::>>:1>::::::::1::::::::>=:>:>::>:>:::::>>>>,,:;:::;:,,;>:>:;:;::11:**::::::::::::::::::::::>->1::1>:>:>>111>>::::>>>>>::::1111>:11-:>,>,:::;>21,12:1>::11,:>:,:>:,2,>,2>1,1,12::>>1,>,:>>1>>>1>:,1,2,>,,,,:::,:111:2,2:2:::t:::2::,t,2t22t,,2332:22222:11::11::::1111:11::::::1:11111:::1::::::1:::111111::::::::1::::::::1:1::>>111122121:>,,1116122>:::2223112332232223211122222221:4:::::22:,22222211:,222:::::4:::::::,::>::>>:::::::1*:::::::1:1>:::::::1:::111:1::11::11::::::::1", "::::<>:::::<;:;::::=:,::;;:::::::,:::;::::;:::::::::::::::-:::::::==<::>>>><:<::,>>:,,;;:::=:,,,:::::;;::::::::::::::::::::::::::::>>:>>::::>=>11111>::::1:>1>::1:113111111:::,:,,::>:,2:,1,1::>,1,:::::><,21>,2>>1>>2>:::>1:>::>,21>>2>:1,>t2,:2,,1::,:111,11,224:2:22t,:,,2,2t2t2,2t322:::12111:::111:::11111::::4:::1:1:11::111:::::1::1:111::1:::::::::::::::::::>1:>>1>1113222:>>111>1311>>:212232122322222222::1222:22112:4:2::221:222::211>22tt:21:::::11>::>>>>::1>::::::::::::::::::::1:::::::::::11::1111::11:1:::1:1:", ">:::>;::::::;::::>:>:>:4:::4:4::4::::;:::;>:1:1:1-:1:1:::1:::::1:::::::>>::::=:>><>::::::::=;::,>>:::::;:::::*::::::::::::::1:::::=-:::>:>:1:>>11>11>::::1>>>>1::1:11111>1::=:>>,::,>>:1122:,:::::,1:,:,>>>2>:>,>2>1,21>:>>>>,>1>232>12>:>,232>:,,,,2:,11:1,12222:422t2:,2:,2,2t22,2:2t2,32::2:11::1111:1:11111:::::::::::111111:1:::1::1::::111:1:::::::::1:::::::1:>:>>>11>2231>>>>>5>>11311>>11112232:232321221122222222:11::::2,:::222:::21:2>,::22::::::::::1>>>::::::1:::::>>:::::::::11::1:111:1::::11:::::::1:1:::11:1::", ">:::::<:::;::::::::::,;:;:::4:::::::2;:::,::,:2::::>:::::::::::::::;:::>,>>:::;>2>>>>>>::::;;,:,:>>:::;::>::;;:::::::::*::::::::::4:::::::::::11111:::::>>>>>>1:11>>1,>111::::>2,::,,2;21>>>>>>>11,2>>>,>>,2>:>>>2,>>2>:>>>>11::1113>13>>>2,33>>2,,2,:,:1:1:22222::>,2:,2,>1,t2t22,,:3t222,:2:2:11:212::2:111221>>>;;::>>>>>1:1::1::1::::::::111::1:-::1:::1:::1::::11::>211111231>:1,111,22121:>1>11113113231>1111222222222::1::2>::::12211,>>22:222::2:::4::1::>:1>:>:>::::::::,::::::::::1:::1::1::::1::11:::::11:::::::1::::", ">::::::::>::;<::::;::::::4:::::1:::44:::::,::2,4>4:>:11:::::::::::;::::>:>:::::,>>>>>>>::::4;;::>:>::::;::::;44::*:::::::::1:::::::4::::::1:::111111::::>1>>>>11>1>>,>>,>1::::>,::,,,>:,,>5>>>>>::,,,1,><>,22>>,>2>:>,,::>>1:1>>1>31>,6>>,,261>,,,:t2,:,3>1,,2,22:>:2:,:,,>,:222,32,,t222:,::222:22:12221:12221:11:;::>>>>>:11>:::1:::::1111:1:::1:-::1:1:1::::::::>::::>2221>131>1::,1,1:21111:1>1>11111311131111122222222,22:4:>:1:2:121>:,>>>::23:22::::::1:::::,>>>:,:::,:4::::;:::::::::>:::1:::11:1::11:1::1:1:::1::::1:1:", ">=::::<::><=<::::,::,>:;:::::::::::::44:,2:,,:>::::1:11:::::::::>:;>:::>>>:::::>>>,>>>>:::::4::;::::;><=:::4;;44::::::::*::::::::*444::11::::1:11111::::>11:>:11>1>>1>:>:1::4::>2::,>,:>,1>>>::>>>12,11>,,,21,,,>>>::,,>::>,:1>>1111>,3,:,,,2>:t,:,22::1221:2>1,,:,2:222,1>>:12t222:2t22::::2222:2222:,31:12221:1>::::>:>>>>::1:1:1::::::1::1:11::1::::1::1::::1:::>>::>2222111211>:>,>,2>21:11:11>111331131211111112222222231:,,::12::22::11,>22:2:222:::::,::21>>,1,>:::,,,4,::,>4:::::::,>:>>111:::1:::::1:1:::1:::1::::11:1:", ">:::::::><>:::,>:,;;:::::::>:::>:::::42,4:::,>>>:4:::1:1:::4::::::;:>>>,,>::::>>:>>>:>>::::;:;:::::::<>;:::::4:::::::::*::::1::::::::::::1:::::1111:1>::>>>>>111111>>>>>:1>>::>,,,::>,>>115<:::,>,22,1,,,,t22,122>>:>,,,>>>111:>1111>:61>:2>2>:,,,2,,::,231,2>2,::2:1,t2,,,::,222t:2:23,2,,::2:21:2::2:221223111>1:-::>>>>1>11:::1::1::1:11:11:1:11:::::1:::1::1:111>::>21212211311:>,>11111111:>1>11122363222211111:222222:211,,,1:2221:21121>>,22:2::2::::::::::>1>>::::::::,::>;::::::::>>>:::::::111:11:::1:1::11::::::::::1", ":::<::::,;;:::,::,;,::::>::1:::::::::4::,::,>:24:*:::11:::::::::::::>>>>:>>::::>:::,>>>>:>:;:;::>;:;::<;::::::4::4:::::::::::::::4:::::11::::::111111::::1>11:11>11,>>>>111>::,,t,:::,:,,11>:::>>>,2,2,>,,,2t222,>>>,2,>>>1,1>>>1121>>1,:>111>>,,,,:1::>,22,,:t3,:1:2,2t,2::::21t:22t2t22::::2:21::2:21:2222331:11:::>::>,>>>1111:::::::11:111:1111:::11:::11::1:1111>:>>112222211>:11:1222111::1111111332311222222:2322212222:2,2,::22212:222:>:2:2:2:::::::::::>:,,:>>::,::,,::>:::>>;::::::1:1::::11:::1::11:::1:1::::::::11:", ">:>>:;;>::::<,,::,::::::,:>,:1:>:::4::::;:::>>,::::1111::::*::::::::>,:>>:>:::>>:,>;:::::>:;;:::::>><::;::::44:::::::::::::::::::::4::::1::1:1:1111111::1:1>1:11>111>11>1>>>:::,,,,,:,,,1,,:;<:::;1,,1,>,t,>21,,21>2292>:>,21>:>>1221>1>>>1>2>:,2::,:,1222:2>,3t2:,:,11>,22::,2,:,t2::2222::,2:3222232:22111323111:::>:::1>1>>1:1:1:::1::11::11:1::1::::::::1::1>1111>::>321232211::1>:,2211111::1>111111211133222112222222:22::::::1:::11:212>22::22:2:::::,:2,:11:>>>:::::::,:>1::::>::::::::::::1:::1::::::11:::111:::1::::::", ">:::::::::;;;,,:::::>::>::,21:::::1:4:::;;::>>:::4:1:11::::::::>::::,>::>:,::;,,:::::,:::::::::::>,>::;::::::4*::::::1::::-::::-:::::::1::1:::11111111:::1>11:1111>>11111>>::::,2::::,,,21,:::>>::12>,1>:t,22>>>>>>>,26>>>122>::>12211,>:>,22>>,,:1:2:1,222,,,23,::>11,>:2,::,,,22322:22t2:,:,:2222221112113311111>:>>>>>1>>>>1>1:::::::1:1:1:111:1::-::::1:1:11>1>11::>>11111>121::11>>:212111:1>111111133112131111122321222114:12::21222111>>:2:22222:::4::222>:2,>>:::::::::::>>::::::::>11:1::::::1::::1:11111:1111:11::::::", ">:::;:::::;;::<::::;::4:::,1111::::::44::;::,,:,::*:::::::4:4::::=::>::>::::;:,:::,:::;::::44:::>:>,>:;<:::::::4:::::*::-:::1::::*:::*:::1:::::1111111::::::111111>>11111>::4::1,,,,::,,2,,>>:::>:>>>>,>:2,2,>>>11122t15>:222>::,>221>2>:>1,2,,>:,,,,:,221,,12,2>::>,1>:::,::::2:2tt2::2:2:::2:222222::22111331111-->>>::>>>11>11:1:1:::11:11:1:1111:::1:::1::::1:1>11::>22222211:::>>>>:,1211:::1>1>131132222312:11122232::111:>:2::1::2:1:>>2>1:22:2::::::,2::>1,:>>:::,,:::,::>:4:::::::>::1:1::1:1:::::1:1::11:11::::::1:::1", "1:::::::::;;>:;,>:::::;:4:,2,2,:::,:4:;,<;;,,:,:::::::1:::::::::::::::::::>:::,:<:,:>,;::::44::,>:,::;;4,,:::4::::::::::::::::::::44:::::11::>>>11111>:>>>::11111>>>>11111::::::,:,,4:,,,2::::::>:>>:>,:,1,22,,>>111122>>>331::1,>,1121>:,212,>>,,>>,>,>>,1,11>21>:,12>>:2:::,:t2,2t2:2,22::2::::11111121:1111131:-:>:>>:1:1:111111:::1:11:1:11:1111::::>:>>:1::::1:1::1:111222>:1::::2::22221::1,>21>1113233111221221122122211:>>::,>2>2111>212:22:2:::::::::2:2:,2>>:::::,::::;::::;;::::1>>>:::::::::::::1:111:1:1::11::1::::", "::::::::;,;::::,:::::::42,:222,,::::;4,;<<:,,::2::::1::::-:::::1::;:::1::::::>,<::>::::;::::::::><,<,;;::::::*4:::::::::*::::::*:::4::::::1>>:>>1111>>>->>->:111>>>:>111:>::4::,::,,:,:,t2,,,::>>>>>:>>,>,2t,:>>>1>1>222>>111::-1:,2112>:,2,>,,,>>2>,>>>1,11>::1,:::22>>:,,::::,,,t32t22:22t22:,11111111211331111:::>>>>111111::1:::1::::1:11:111:1:-1:::::::1:111>11:::1111>32>2:::2:2:::22:1::>,22221311222213:2:123322:22:1::>>2:,2221>>22::2:222:2:::::::::2::,:>::::::2::::;>>:::;::>:::>:1::::::11:::::1:::11111:1::1::1::", "1::::::>:,4;,,:,:4::::::;22:22:::,::;;;;4::22,,::::::::1::-::::::::::>>:::>:>>>,:<::>>:;:::44::,:,:,:;::::>>4:44::::::::::::::::::::::::::>::::111111>>>::>>1111>>>>>11>>1::::,,2:t,:,:,26,,><:>,,>>:>,>2,222:1>>1>1>1221:111>::>>1>112>:>1>,2,,>,1,2>:2>>222::2>::,12>>>1,,:::2t32t:,22222:2,,,11111::1111111111:::>>1>111::1:111::11::11:1111:::1::::1>:>::>:11>>:1:::1111>111:2::::2:22::11::>212112132131121:222312211:2222:::1222:,1>>1:2>2111::22:::::::2::::2>>:>::,::,:::>:::::<:::::>:>:::11:::::11::1:::111::11:::11::", ">::::>>>::;;;4,,24,:4:4:;:,2t:,:::,:4,::,44,,:2::::::::::::::::::::;:>>:::>:<;<:::::1>:::::::4:2::,::,44:>>::::::::1::::::::::::::4**::::1>>:::>1111>1>-:::>:1:1>>>>>>1111>::>:,,,,:,::2,2,>::>>1,,,>>>,>2t21,,>51>1>521>:111>::>2,>>,2>>,2>,,21,,,12>>,>1223>,1:>,:21:>:>::;::223t222222:2:2,2:1::::111112311:1>::-::>>>111:11111:1::::::1111111111:-:1>::::>:1>:11::11:1111331:::::2:2:2221:::>>>22121213612121111:2222:22:1::::>2:>221>>12>1::1:12:::::4::::::222>>>>1:::::::>>><;::>:::::1>::1:::11:::11111:1:1:::111::::1:1", ">::::>:>::::;,,,::,:::4::2:2,,::::,::;:4:44:,,,:::::::::::*::::::::;:>>>;:>;:44:::;,,::;::::;:,,>>,;4:;:;,::;4::1:::::::::*:::::::::*::::11::::>1111>1>>:-;>>>11:>>:>>1111:::::,,,,,,,;22,,>::::115>:>,:22,22:21,1>>>>11:>1>>>:::>2>:,,::2121,t222,,2:,:>22212,,>,,,,::::::::,,,2t32:222:2:::2,,::1::11111131111>:::>>>>>1>>1:1:111::1:::1::11111:1:::::::::1::1:>11:::::1111131::::2:2:::111:::>111122221311132113:2322:1222:4::::,2,,:11111::1::1:1:1::::::12:::2:>2::::::2::::>:::;::>>::>1:1:::1:11:::1::::11::::1::::::1:1:", "::=:>>::::::::::::::::::4,::,,4:::::4:;;::::::,:::::::11:::::::::;::;:>>>::>::::>:::>::::::44:4,,::;;:::;:,:;44:::::::1:::::::::*::*::::::1:>:>>111>>>::>>>>1>11>>>>>>1111>:::,2,242,;:t22>>:::,1,,>:>>:,t,,,:1,61,>>>51::>11>>::>21:2,:::22,1,tt22,,:,,>222122,12,:2:,::::,;,,t222322222::2222:111:::1::311111:::->>>>>>>>>:1:111:11::::11111111111:::1:1::::::1:1:::::1::1111311:::2:2:1111:1:1>113212263622311::23:2111222:1:::,2:2221::1111:111:1:::::::::1::>:2>>>:::,:::::::>::::::-:::11:::::1::1::::::::1:1:::::::::::::", ">:::;::::4:4:::::::;::4::,,,:::4::::::;::4::>,2>:::::::::::::::::::;;:>:>::::::::::::::;::,:::::>>,;:,:4;,:::4::::::::::::::::::::::::-:::1:>:>>1>11>>>::::>>111>>>>>131:1:::::,::,4,,22,2>::::21>2>>,,11,,1:>1,1,5>>>1>::>111>:::1::2>>:,22,>,2t22,:::22222112>22,>,1::,::::,22223312322::222221:211111111111::>:-::>>>>>>>1:1:1::::1:::1:111111111::::1::11::1::111:::11:111311:::2::22:1111::>1111212236331313::3232113222::::1:::1:1:::111:1:1:11::::44::12::2:2:>>:2::2>:::::>:::::;=:>:>1::::::1:1::1:::::1:1:::111::::::1", ">:=::::>:>2:44::,:;::,::4;::,,:::::,4;::::::>:,>1-:::::::::::::::::;::,::,:::::::::,>::::,::4;:4,>:,>::;:;:;:4:4:1:::::::::::::::::*::::::11>>:>1>>1>>>-:::>11:111>::>111,,24:,,::;;;,,,t2>::>>:>>,>>>,221:1:>,>1>1>>21>>1111>>>::11:>>,:2221>222,21,,11222>:22>,2::11>,,,,::,2t>2t222222::2:2221111:1:111111:11>:::>:>1111111::111:11::1:1:1111:111-::::1:::::-:::1:::::1111111:11::222:21111::11>1161323112213:33:3:3:13222::::::22:1:1:111111:11:11:::::::::2>,::>:>::::>:::,:>::::::;:::::>::::::1::::::1:1::1:::1:1:1::1:::", ">:::::::>::;:::>:<::;<;;::::,,::,:,,44::;:::,:>>::;::::,:>::::1::>::<:>:>:>::;::,;:,<;::::::;::,,,;:::::::::*:4::::::::::::::::::::*:::::1:11::>>>>1::::::::>>1111>::>11111::>>::;4,,,,,32,:;:>,>>1>>>,22,,>;1221>1>,22>>>>111>>::1::1:::,2211,2t12,,:,:221:11>21,::2,>1,2,::21,:,22,211,>:>12321121:1:21131111:::::::1111>11>::111:1:::11:11111111:-:1::1::::::::::1-:::1>111311:1::222:2,11::>2>>>22222231231132112122,32,>::>11112::2:::2:11122:11:>::4::::2:::::,,:::::>:::>:::;:><:::::=::1::::::1::::::::1:11::11:::::2::1", ">:=::>::>>::;;::::<:>>;:4:;,,::::::,::,;,::,:,>:>;:,,::1>>::::::1:::::>::::>>;;::::::;;:::,:;:::::,,,::;:::::4:::1::::::::1::1:::::::::::11:>:>11>>>::::::11>:11111:>:1:>11:->>:,,:::,,2t32:::>1>:,>>:12121,:1211111:11:::>>11:>:11::11::22221,22,,,:::22>>>11>2,1:,3t,,,,t,::,1,>11>2112::,122222211>1:11131111:::::::1>1>111>>1::11::1:1111111:11:::::1::11::::1::1:::>1:1111121>:2:,::2211>:>,1112223322331222321>22t262211111:,:2:2::2::22:::12:1::::::::::2,2:2>:,::::>:::>:::::>::::::::>::::::::1::::1:::1::::11:2::::::1", ":::::>::>;:=;:::<:;:::;:;;:,:;:::::,4,;;,;::,,::::::1::1>::=:::::::=::>>:::>:::::<::;:::::::;;:::,:,,::;:::::4:4::*:::::::::::1:::::*:::1:1:::11>11>::::1:::>>1111>>>>>::>>>::>>,:;;,,:223>::::1>>,>>>21122>:1,,,11>222::>>>1::>2:1::111:22322,,::,,2:,,11:212>222>122:>>,,2,,122>,,22123>4222221111111:1:11:111::::1:11>111>1>>111:1::111111131>11>::1::::1:::::::11::::11111112>>::2:2,2,>21::>1>23t33333236132321212222221>1::::22,:,2:2211212:1111::::::::2:,,::1::::::::::::::<:>>>::::::::1::::::1:::1:::::1::::::::::::::", ":::::>::::::;:4,:;::,:;;;;::::::,:::4,4,::,:::::::;,:::::::::::::::;;<>>,::::;<>:<:;:;::;:;:;4,:::::,::;4::::::*:::::::::1:::1:::::=::::::::1::1>111:::::::1::1:>1>>>>>:>11>::>5,,;:,t,,,1::;:,:>:>,,>,,,,,::,1,1:11221::>>>>>>:>::1111::,22222,t2,:,:>,2,>>11122>,122,,,,>,::,11>>122132>:2>23t21:1::>1:11111:1:::1::1:>11>1>>>11:1:1::111:1131111>:-::11:::::>:::111:1:1111111:1::2:2>,222:2::>1,1222333133316221>212,22,2>>>:::,2222,2::2:1:1:1:11::1:::::,:,:,,:>:1:::::::>:<>:::::>::::::;::::::1::::::1:::1:::::1::2:::2::", ":>:::>::::::;<;:;:;>:>;<4::::::>,::::4::,4,,,>:>:::1:::1>::::::>:::=::>:,::<:;:>:;,;;::::::;;:4,,:;,,::;:::::4::::::::::::::::1:::::::::11::1::1111>:::::::1::1:>>1>>>1>:>>>:<>52:::,21:,1>::::,>:,,,>,>>,:>;>>:>>>2222:>>>>>>>>>>11111::,23222t,2,,,:,22,,>,1,22:,:22,,,,,>::>2,>>12t2232:222233111111:111:1111::::::11>111>1>>:11:1:::111:11111>1::::>>>>>:::::::::>::::1111111:::1122222221::>>1223132313111122211222321,>:>>:1:,222,2::1211::1111>1:::4::22:>,,,,>:::::>::>:=:::;::>::::::::::::1:1:::::1:1::::::::::2:::3::", ":>::=>::::::4::;::;:>:;;::::2:::2:,24:4;:;,:,>:::::11::::::::::>::::::>::::>::;<,:::::;:::;::;,:,:::>::<:::::::4::*::::::1:::1:::::;::::1:1:1:111>:1::::::::::>::111>>1>>>>::::>t;,,:,,:>1>:4:>,>::,,>,>,,,>>>1>>>,222,>>11:>>:>>>>>112::2,12222,t,:::1t222>:>,32::,2,,,22,>,>>22>>,:2123::>:22222:1111>::11111111-::11:111>11>>1::1:1:::1111131111>::>>:>>1:>::::::1>::111111311:::1:212:221:::>2>22311233133212232>22332>1>:,>1:>>222:1111:2:11:2:>1:1::::2:::>:1>1:1:::::::::;::::>::::>:::::::::::::1::1:::::1::1:::::::::::", "::::::::;:::;:<:;>;:>::;::::::,:::,4:;::;:;::::>:::::::1:::::::1::::::>:::::::;:::::4,:;::::;:::,,:,><:=:::::;;:::4:::::::::::1::::::-::11::::111:11:::::1::::>:>111>>>->:><>:>>,::,,,2,,1,>;>>2>>>,,::>,>,>>12,>>,222,>,>>:11:>>1>121>::2,222,1:t,,,:22221>:1132,::1:>>t2,>:>>,,>>,,,2222:1:221121:11::11111111:::11:1:111111>>11:111:::1::1111111>-:>:1:1::::11::1>>::111111111::4>2>>21111:1:1>>>22133131316322221>136212>:>:::>2,222:2:1111:>12>1>:::::::::2>>>>:::::=::::::;::::>>>::::;:::1:::::1:::::1:1:1::1:::::2:::::1", "::>:=:::>::::::<;<;:::::::::,::::::,;;;;;,::,::::::::::1:::==::::::::::>:>::::;::,::::,;,4:;:;:,::::>;::=:::::;:::::::::::11::::=::=:::1:::::::11:1::::::::1>>>>>>11>>>>>:::::<>,:,,,,1,:1:::>>1>:>,,,>:,>>>;,1:>>>>>>,:>1>:>1>1>>2,11::,2:22t,,:2,,::,322,::1122:::1>,,2,>,::,>2>11,22>22:11::111::121:11311311::-:>:1:11111>>1111::1:::1::1113111>::>>>1:::1::1:1:>11:::1:1113:11::>>>:11111::>>>222>332133631223222113112::>>:1>>22222:1:13112:212>:1:::2:2:2:2:1:1::::::::::;;:>::>:::::::::::1:::::1::11::::1:11:1:::1::1::", "::=:4>::>>::::;:;,<;::::::::,:::::,:::4,,,42:::::::::::1:::4::::::;::::>,::<::=::,:>:;;::::::::::::>::<;:::1::;4*::::1:::::1::::=>::;;:11:>:>>>11:>>:::->>>>>>1>>>11>:::5>:;::,,,:<,,,::,::::>>>>>:,,>>:,,,::11::>>>>1,>:>1:>111>:11,1::>2>22,>>:,:,,:,3,2,,>1>11:::>>,,2,>>::,>2>2,>2222>>11:2111:1111113111111:1::>:>>11>11>>111:1::::11::1111131>>::>11:1:>:>::>:>>>::1111111>>:::21:1::211::1>>222>33313333223322>233>11:::::1:::222:111111221111,:::::::1:,:>>>:>>>::>::::::;::::>::::::::1:::1:1::1::::1:1::1:::11:1:::1::", ":::=;>:>>>>:=<:>:::;:::=::;:1:::::,:4,,4;,:::::,:::::::::::::::>::::>>::>:::::=<,:;::;::;;:;::4,,:>>,:,;4;:::::4::*::::1:::::::::::=;;::>:>>:>>111>>::>>>1>1>>1-:>>>>:::>:::::,2,,;,,::::,::::>11>>,,,::,,,::,1:>:>1:,2>::>,11>1>131,11:>211,>>,t2,,4:22221>:1>,1:;,21,>2,,1::>>:222>222>>>12:2111:111:1:113111::-::>>>>1>>11111311:11:11:11:1131311:::>:1:::>::::>:>>:::11:1111222:21,>:2211::1>>1123223331233223222112111>:,:>::2222::21:211132>2,1>>:::::>:>:>>:>>>>:::>:::::;;::::>:::::::::::::::1::::11::::::11:11:1:::::3", ";:::;:::>:::=<:>:>;:::::<::::::4:::,:4,:;,;::,:::::::::1:*:4::::>:::::><:><:<::::,:,,::::4:::;:::,:::>,;::::::=:::*:1:::::::::::-:::;:::>:>::>>11::>::->>11>>>>>::>>>:::>::;:>>2,:;;,::::::,:>:1>:,,,1>,,,,>:,,::;>>:,2>::>,:1:::12>>23>>,,2,:,,,,,;::222221,,>,1:>>,,,>>211::1>::22,11>1:>112:111111::111311111::-:>>>>>>>>>>11111::11::1::11113111:>>>:1:::::>:::::1>:111:11112>2::2,12221111::1>223232222333122222122221>:>>>:1:::222::11:112211>,1:1:::::::1>>>:::>:::::::::4::::>::-::::::::::11::1:::11::1:::1::11:1:::::3", ";:::;;::>1::;:;:;::::>;;:<>>::::::4,,44:;:::<>><:*::::::::::::11>;::<>>>::::::<::,:::,,:,:::,;4,;:::::>44:>::=;4*:::::::::::::-:::::4:::>:::::>11:>1>>::>>1>1>>>>>>>>>::>:::;>,,,<,::,,:::>>::1:::,11,>2,,2:::>,1>,>>,2>11:,1>>:>>31121>>,22,,:,,,,,::>2222222>11:>,211>,2,>::,>,2t2>1111::1:211:1:11::::1131111>:::>>>>1>>11>11111:1:::1:1111111111:-:::>::::>::::>>>::::1111111>,:::1>2232:11:1>>1>22313323232121221122311:>>,::2::2222::121222>21111:1:::::11,::22>::::::::::::::::::>::::>::::::::::::::1:::::1:::::1:1:::::", "::::=>::>>>:;:::::;::>::<::,:::::::,4:,4;::::::>:::::;::::::4:1::::::>><:>::::<::,::,:;::::::<,;;:::,::;:::1:::4:::4:::::::::::::->::=:1>:<:::>1>>1>>>:=>1>111>11>>>:::=:::;;,,>,<,<:,,::::,::>>>,12,>>,121>:::,::,11,2::>11::>1>12:1311>>,3,,,,:,:,::>,12222,:>1:>>,,>1>2>:::,>>222>211:::>21>111111::11123111::::::>>>1>:11111111:1::::111:1111131:::1:>::::1:::::>>:::111>1221>1::>221213111:>>12221336333133111111232211:1:,:::1:22::1::22122:1,>11:>:::1:::>>:>>2>::::::::::;:::::::::::::1::*::1:11:::::::1::1:::::1:::::1", ">::=:::>:>>::<<<>:::::;::::,,,:::,,,,44:,;:,::::::::::::::::::::>:;::>>::>>:::<<,,,:::,::::::::,,::,,,::*::1::4:::::::::::::::*:::>:=::->>1:::>11>>>::>:>11>1>>11>>>1::::::;;:,>:,,:::,:,,:::,1:>,,,22>,,22,:,,:>>>,>,2>:>:111::112>>11:1,2tt2:,::,,::211t2222>,1>>>261>>>,:::>1:,11>>>>:::1,211:1:1111:1:121111::::>::>1>>>1>:111111:1:11:111111131:::>11>::1::::1:>>>:::1112222>::>>:2>111111:>>12111221313313333212222211:4:,11:12::222:1:22121111>1>:::::11:,>>>::>>:::::::::::::::=::::1::::::::::::::1:1:::1:::11:::::1:::", ">:::::::>1>>;<:>>,::::::,,::,:::4:2,4::4;4:,:::::1:::::::::4:::1>:;:>:>::>::>:;:,,:,:;::::::4::,;,:,,,:::::::::4:::::::::::::::::::<;;>::>:>:::11:>>::::1>>>>>>11>>>:>::>::;4,,2:t,,,:,:t,,:::1:>,1222>,tt2::1>:>,,>>11>>>1::1:1:11>>211222332,:,,,,:,,2,,1,22,21>:>2,,>>>>>::,>,,:::>131::112111111:1:::111111:::::::>>>>>111:>1:11:1::111:11111311:-:>>>::::::::>:1:>::>11>1232::::>>1121111::>>2212133611312321231,22111:::>2:::1:2:22:2:11211>>1>22,:::::::1,,::>:>>::::::::::::::::::::::::::::::1::::::1:::::1::11:1::::::", "::::<:::>>>::::,:<,;>>::;::,>>::>::::4:,,::::::::::::::1::::::::::::>>>;:::<:>;>:,,:,:;:,::::::;:,:,<,::4::::**:::::::::::::11:::::=::->::>>::>111>>::::>1>>1:111>>>1::;>:;:;:,2:,:,,2:,::,::>1>>2,2>222,22::>:,>,,2,,,>:>1:::1:122,1111,22322,,,,,:,:2,212222,1>>:>221>>>>>:<>>1111>1,11::1,11:::::1:1:1,112111>::::::1>111111::11:111:1:::13111111:1:>>>>::::::::::11:>11>1112311>>>>1221111::,1>211213113112133331222211:::::11:2222222:2:1221>12>>1>1:::1::::>1:>:>::::::::::4:::::::::::::::::::::1::::::::::1::1::::::1:::", ">::;:::>>,>=<>:;,:,:1:::::::2:2::::::;;:::4:,:::>:;::;:1>=:::>:>::::>,><:::>::=>,,::,::::::;:::::,,,,,::;::,:4:::::::::::::::1::::-:-:4::::::1:111::::::>1>>>:111>:>>>:>>:::::51:,,,:,,:22:,:,>>>1,2>22,,2,:>>,>,,,211>:::11>>>>:222:1112121:2,,,:,:,>,12>1,221,1:4,221:2::2::::,212:1111:::::111:::1::1:1111111:::::>>>:1111>1:1:111:::1:::1111131::::1::::::::::::1:1::1111113311:>1>1122>11:::22222223222313133232222111::::211:2:22t:22::2222::2222:214:11:1>>:>:11::::::4::::::::::::::::::::1::::1:1::1:::::::::1:::::1:::", ">>;;=::,>>>:::::;4::,::4:4t:2:1:,:,::;::,,::::,2>>:::::>>::;=:>:::::>>>>:::<><;>:,,,,:::42:::::::::,::;,;:::>:4:4::::::::::::1::::1::::::::::::1111::1::>1>11:::1:>:>>>->:::::15,,,,::,:,:,;::>>>,,3>2222,2>>,:>,2>>,2>:1:11>>:::232:1:1:1122::,,,,,>:,>,>1211,,1>:,11>:::2::::,:2::11:311:1:111::11:11:111111::::::::>>1:1>1>11:1:111:1111:11111331:::11:>>::::::::11::1111:11111:::11122,11:::11:2:123232213113123322211:::::::::2t2222:2:2::1112:112::4:1::::>>1>:::::::::::4::::::::::::::::::::::::::1::::::1:1:1:::::1::::", ":>::>::>>>><=>>::4,;:::::::22::::2,:4::,4:42,,,:>::::::1>>::::::::-::,>>>:>>>>>>2,:,,4:4;::,>44:::::,4:t::::::444;::::::;;:::>>::1::**:::::::::1111:::::>1:::::11>:1>>>:>>-:>,22::,,::,,,::::,,>>,,6,16,t2,>:>>>,>,>,1>::11:>>>::2111:1::12222,,,,,:::,12>>1,1,22:::11>:::2,::2,2211:1:111:11111:::111111:1111>>>>:::>>11:111>1:1:111::::11:11311111*::::::>>::1:::11>>:1:111111111::111,,211::1111222233221113113322t2221:1:::11::2:22222:::11:1:1:::2:::4::11::>::>:1:::::::::*:::::::::::::::::::1::::1:::::::1:::1::::::1:::", ":>>=:>>:>>>::>>:;:::::::4:::22::,:,:;:;:;::::,::::;::1:2>::::=::::::,><>:<>,>::<4,,;:,2::;::,4:,,:,:,,:,4:::::::::::::::;::::>>::::::::::::::::::1::1:::1:1::>>11>>:1>1:>>>>:125::,,:,,:22::::>>>,11>1112,,>:>>,,211>5>:111>>>>>::11:11::12:2:,,,::>::,11:,1>,122:::1,>:::,2:::::::11::11:::111::1:1111:111111>11::::>:>11111>11:1:11:111:::1111131>::::11::>:::::::1>>:::111111111:,:1112,21::::1132222232311133132222231::111::2::22222::22:11:122:21::::11::1>>::1>::::::::::::*:::::-::::::::::1::1::::1::::1::::::::1::::::", ":1::::>:>,>:<:>::::,,:::,::,:t::::,,:4::::,2::::::;::,>,,:::>=><>:::>>::::,<>>:,:,;,,::::::,:4:,42:,,,,;:::2:::::::;::::-:>::>>::1:-4;=:::::::1:11>>:>::::>>:>>>1::11:>>>>:;:66>:4,:22:,,:::4,::>12>11156,>>>>>,,>2>>2>>1111>>>>:>11:2:111:22t,2>:,:::112:>11>>>,:::,2>:::12,::,,,:21:1111::::1111:111:::1:1111>>:->:>11::111>11:1:111:111:111111111:::::::::::::::::1:::111111111>:>,,1111131:::1112321233321133322222322::222::1::12:22::22:21:111:11::::::::1:>>:>::1::::::::*:::::::::::::::::::::::1::1::1::1:::1:::1::1:::", ":>:4;>:>>1><::,:,4::,:4>,:::222:::,:,<:,,4::2:2:,:;;>>>2>>:;=::>>::>5>>::,:>><:<,,,,,,:::,:,::;:2::2,;,,4:2:::*44::;:::::::::>>>:1:::::::::::::::11>>:-:>>>:>>:>1::1111>:::::>2,,;,2:4,,,,,242>>,121>1122,,>:>>:>2,>111>:111>>:>111>:11:11:22t,,2,,:::112:1>>>2>2,::2>>>1:>1:::222,21::111:1:1:11:1:1::::1:111111:-::>:11111:11:::11111:11:111111111::111:>::::>::>>1:1:11:1111121>::11111131::11:111122233311122322222232::222:1:2:211:22222:111:1::1:>:::::1:1>>:>>>:1>::::::4::::::::::::::::::::1:::::::::::::1:::::::::::::", ">>:::>>>,,>:<>>>4:<,t:::::t:::::::::::,::::t,>::>::;>>:2,>>::>:>>::>:::::,>>>:;:t;<,::,:::,::::::,,4t;;;::::1:4:::::::::::::::::::::4:;:::::::::111>:::::>>:>:::::::1:1::>>::>1,2:,:::,,,,:4:2::21121,>2,22>>>>>>21>111::1:1:::1:1>::1::22222,2:,,:::::121:2:>>,,,,:>2>>::22,,:,:,:21:1:1::11:1:::1:1::1:11111:::::::1>1>11>1::1111:111111:1133111>::::1:>11::::::>:,11::11:111112::>1122:131::1:1112123333312233322222332::22221:1:21:2:2:211::11222::>:::::1::>>>>>>:>>::::::::*:::::*:::::::::::1::::1::::::::::::11:::::::::", "::4::>>>>>>:>><:,:4,4:::,:::2t:::,,::4:4,;:,,,::>>::,>>1>>>=-::>::->>,>>>:,>>::;;,,,;::::,:,:4:::2:,,,:t:>>11:::4::::::::-:::1::::::*::::::::::1:1:>::::>>>>>::>>:1:1:>1>:=::1124:42,,:,;,:,:::>>1122>>2,2,:>>1>,1,1>31>:111:1::>,1::1::2:22:2,:>::::422::::>>>>,::,22,,:::>,24,,,:,11::11:::1::111:1:1::11111:1>::::>>>1>1:1:111::11::111:1111111>::=::>::::>::::::,>3:1::1111322>:>>,122111::1:111233332222222222:2t332:::2:2:1:1221112:2:21:1::22:2>>::4:::11>>>>>>:::::::::*:::::::::1:-::::::::1::::::::::1::1:::::::::::::", ":::::1:>1>>:>>><::;,::::2,::,::::>>24::,t:;,:,2:1><;>1>21:::::<>:::;:,1>>:,::::<,:;::::::,:::;:::,::t4242,:,:::4:::-::::::::::1:::::=:=:>-::::::::1::=:>:>1:>>:::::>1>11,:;::1>>:;:,:,,,::::;<:>>>>22>>>,6,:>>>>>11,111>11>1:1:1>11::::1:1321,>2>::,:;>,::11>1:,:::,111::::,,:,,::22,::21::1::11111:11:::>211>::1::::::1111:1::1:1:11:11311:113111:::::1::11:1::::::,2,::>>11::121::::1211>21:1:1:223233:332133:2222132221:::1:1:2:221222:2:2:1:>12,1>>:::::>:>>:>:>:>:>::::::::::::::::::::::::::::::::::1:::::::11:::::::::1::", ":::1::>12>>>:<<>,<:,,:::4,,,,,2:>:>::4:,;:,;:,>:>>:>,2>>:>>:-::>:;:::>,>>,:,:>:;,,,::::::::::::,:;,,,::tt4,:::::::::::::::::::1:::::=:::>::::>::111::::>>:>:>5>:::>>>>:1>>::>>>>;:,,:,:,,,<:;>>:>>132>>2,2,:>>>>1,2,,>>>>1>>::::>11>:1::,12,11,:>:::::>1>>1>>>1,,,::,:,2,::,1::t2::2:::211::::111::1:::1>>2111:11:::::11:11:11:1111:11::1111:13131::::1>:1:1:::::::4:21::>1111:111::11:::2121:1::1223132313313:32321123321::1:2122223222221:2::3>1221:>:::;::>>>:>>:>>1::::::::::::::::*:::::::::::::::::::1::::::11:::::1::::::", "1:::::>,1,>::>>>:,;:::;,,,,:,,,:>::>,;;,;t;,:,:,>>::>1>::::>:::>>::<>>>>,,:::,:<,::::::::,:::::,::24::4t,2,::::4::::-1::::::1:1::=:::;::>-:>:::::1:1::::>>>>>1>>::>>>>:>>:=;>11>:;::4:2,,:::;>>:>:13,>,1,,>>,>>12262>>>>1>:1:::111>>:>:>,11,>>>2,:::>:>1>11>211,:::,,12::::22::::,::::,,1::::1111111::1::>1111:::>:::::11111111111:1:1:1:111131331::;:111:1:1:1:::::112::>>1111111:::21121211::::1223233:32131131221133122::111:1:22222:21:2:31:>1221:>>::;:>::>>>>>:1:::::::*:::::::::::::::::::::::::::::1:::1:::::::::1::::::", ":::::>:,1,>:,><>,;:4::;,:,,,,,,:>:,:4:,4,;,;:2:,11>:>>1:::>:<>::>:::<>>1>>,::::::,1,,:>:::,::;:,,:22::2:,4:,:::4:-::::1::::::11:::::;:4:>>::::->:::1::::>::>>1>:::>>:::1><::>1>,:;;:::22:,>,:1>>>113,>,6,,>>:,,>1222>>>:::1::1:1>1>>::::,121,22:,>::::,2>11111,:1>:,:,112:::>::222,:21::1::::111:::1111:>:>>11:::::-::111:1:11:1111:1111:::1113111::;:1>:1:1:11::::>1>2:>1>11111111::::2:211:1:11:2223331331111111231333:::2111212:122222:213:3:>12211>>::::>>>>>>>>>:1::::::::::::*::::::*:*:::::::::::::::::::1::11::1:::::1::", "1::11:>1,1>:,>:::,::::;::,:,t22:::,::;,;:>::>>>>::>::>::,2,>:,::::;:,:,>>>:::>::;::;:,,::,:,4,,,4:::::=:1:::==::1:1::::::::>:::>>>>:>:>:-::>:>:>>1>>-1>:1::>:;::>1>:4::::t,>>>::>>>>>>2>:,22,,:>,2,111,11>>:1:1:::1,1>>>::::12,,2,2,:>:::,,:111>22,,>:,21:,::2224:>1:::11:111:::1221::::::1:11131:::1:::::1:11:1:11:1:1111::::1131111>::>:1:1111:::>:::,,2>:1111111:1:1:1:2:1111::11:121113111113131322333:3:::211:12223:232222:2::>>2>1>1:::=::>:>:::::>:::::::::::::*::::::::::::::1:::::::1::::::::1:::1:::::11:", ":::::1:,>>>>::,,,:::,:;,24,,:22:,:,::,,::4,:2,,221>:21:>:1>::::>>::::>22,,:::::;:,:,::>:>>:1::4,:22:4:,,4,421::4:::::::::::::11:::::==:;:<::>>>>>>>::>:>>>>>>>>>::1::1:>>:;;:122::::;,22>,,,:,>>>>>22>,2222>,,>>,12251::::1:11:>>212>:::,,3,,,,t,,>:;>,2:111:>>,1>>,:2>:::2:::::1:11:11:111:::211:11111::11111:11:::::::111111111111111::::11111111::::::1:::11:>:::>11>>11111111:1::11:::111::1:11:1311311131132111223:3::11111:222222:2:223::3111>11>::::::::>11:1>:>::::::::::::::::::::::::*:::::::::1:11:::1:11:::::1::1:::", "::>:1:>>,2>::::::;:::::::,2:22t4>:,:::,;::,,2,,:2,>:>11::1>><:::>1:::,22,,:,,::<::>>:::11::,4:;,:,::,:,,,,4:1>::=:::::>::::::1>::::::=::::::>>>:>>>::::>>:>>111>::>:>:>:>:;::>15:,:::,,,>>::::,>:,>2,:,2222:1,>>222211,::::1:::1>111:>=::t22:2,2>,,:::>1:112,>>,22:1:21:::>>:::,:::2:1:1212:::111:111:::1:1131:::1-::::111111111:11:1:1::::1111111::::1::1111:11>::::2>:>:111:11111:::::::111::11:11131333111131311123333::1121112222222:322221:2>1>1>:::::::::>1::::>>>::::::::::::::::*:::::::::::::::1:11::::::1:1:1:1:::::::", "1:>::1:,2,:::,,,::::,,4,t:t:2t2:,::,:4,:::,,,:,:21>::>>::1>1=::<>::;:,,22,,:::,;,,>>:>>,,1::::;::,,:,:,44::,2::4:=::::::::::1:1:::=:<:;;:::>>>:>>>1:::->::>>>11>::>>>>>>>:=::>11:,;:4,,>,:>:<:>>,,>>,:,2,2>,,1,,211151,>::1:1::>>1>>>>:::222:,,32>:>::>>>>1>2>,,,:,:122:::>2:::2,21212:1211::111:11:::11:111111::>:::>>1:11:111:11111:::1::1111111:::::1:1:1:1:1>>>:>>1::,2111:311::::1:1:11111:::1111133111311121222323:::1::1::22233:2:22:2322>>1:1>::::::>>:,:1>::>1:::::::::::::::*::::::*:::::1:::::1::1::::1::::1::11::1:1", "1::::1>22,::::,,,::;,::,,,,,t2:::::>::;,:4,,::2,,>>:>>,>:>>>:>>>:>:::>,1>>>::>::,,,::>,>1:::::::::::,,:,;;::>>:=;:::::::::::>>>:::=:>::=>::>:>:>>1>:::=:>>>>>>1>>::>>,>:::::::11::::;,:>><:::,>>:,:12;22,,,,,>21,2,,11>>>::::>:>21>>:1::222,22,22,>>::>11111,1:21,:>,2,::::1:::11>12>21>11>::1111:111:11:1:1311::1::::11:11:11111:11::1::::1:1:111::::1:11:1:1:::::1:111:1111111:1:::>>:1:11111:1::1111333113111222223131:::2:::222222:222::22211::11::1::4:>::,:>1:111:::-:1>:>::::::::::::*::::::1:::1:11:::::::1::11::1::::::", "1::::>:,2,,:,>,:,;:;,,:::;:,222:,::::4;,:,,,,,1,>5;:>>>:>>>,::=1>::::>1,>>>><>:;:::;:>:,>>:::;::,,,,,:,4:::,>>;;;::::::::::>>:>:::1=;>::>>:>>>:>>>>>::>::>>>>11>::>>>>>:1>:4:1,2::>44>::>:::<:,:2,:2:,,,,,,,1,,2211>>,>>:::>>>:>11>>::,:22,22,,2>,5>::>1>12111122>:>2,,::,,1,::,,1>2:2:,1>1:1>:1111:::::1::1131:11:::::11111111111111:1::1:111111::::::::::1::1:::::>11::1:111111:1::>>>1:11111:::1111133111113133:3331111:2::22::222212::21111:1:11:::::::>>>:>>>::::::>:::>:>:::*:::::::*:::::::::1:1:1:1:1::::1::::::1:::1:::", ":::::::2>,>4::::<;::,,4:4,,,,,::>:,::::<,<,,>,,:>>::>>>>>>:>:::::::>:,,>>>,<:;:;;:,,>>>:>:::44:::,,:,4:t:;:12>:;;;::::::::::>>>>::::;::::::>>::>>>1:>>::>:>111>>>:>>>>><::::::11>:::;:,:>:,>:>,>1,,::,,,,,4:,121165111>::1:>>:>>11>1:2:122222::,>,,>::,>>22>,2,22>:12,,,;::,>>>1>>>>:2:>11::>1>111:11:::11::131:1::::::11:111111:11:1:::::11111111::::1::1:::::11::>1>1:11:111111>::::>>:11111::11:131111331111122:223121:::2:2:2122121:111111:111::1:::::4:>:::::1::11:::::>>:::::::::::::::::::::1:::1:1::1:::::::::::1:::1:::", "::::>:>2>,>:;,:,,::,:,::2:24,,2,>2,:,4<,,<,:>,1>>>:<:>>>>>:>:::::::>:,1>>>>>:,:;;,:::::,>::::::::,:,,,,,4:>21>:;;::>1:>:::::>1>:::::::=::>:>>::1>>>>::>>>>>>>>>>>>>>>>>:11444113>:::::,>><>:::>>,:,2,,22,t,:1,>,11116>>::->>>::>>1:>:2:,:32,2::::,,<:>,,,22>1t222::>1,>>,::2:::11>:>>>:,1:1:>>>1:1:11:1:::1::1:::1:::::::11:111111:1::111111111111::::::::11:::1:::>>11::111111111:::>>>:11111::1:11113111111113322:3211::1:12:2:121121211:1::111:11111::::2:>>:11::1::::::::::::::::*:::::::::::1::::::1:11::::1::11::1::::::::", "1:::::2>>2>4,:,;,:::,,:::,:::2,::::::,,;,;::,,:::>:::11>>>>::::>:::::>,,::>>::::<:,:::,,:::::::::,:::,:::,,,>>:;;:>>>:>::::>:>1:::::=::::>:1::-1>>>->>>>>>>>>>>>:>>,,>1::2:::,121:;<;,,,>::>::1,1::2,,2t,,::,,>>>2111,::::>:::>>21:11,:,>2>2::>>:>,>:,,>>1,>22,21::,,,>2>:>>>:>>:>:>>,:>1:::1:1:11::1::1:1111111:1:::::1111:111111:::1:1:1:11111:1:::11::::::1:::>::1:11:11:11111>:::11::11::::1:1:1111113131133221313:3::11:11::121:2122:21:121::1::21:::4::::,:::>>::::::::::::::::::::::::::::11:::1:1:1::::1::1:::::::::1:::", "::::::11>,>:;,,::4:,,,;;,,2:::2::2,::4:4,:t,,11>>>:::,2>>>:::::::>:;<>>,,::>:::=<:::>::;::::::;;:,,224,4:;,:>>:;:>>>>>::::>::>>>:::::::::>:>>>>>>>>>>-:-::>:>>>>:::,>;,:21:::>121>;::::,,:::::::2122,,,,,2::12:2111,,,::>>>>::->11::,,:>>22222>>:,>>:>21,12>,2:1,>:>,2>>,:,1:::21:11>1>,11>::11:1111:11111:111:::1::::11:1111111::11:11::1:1111:::::::1:111>::1:>:>:111::1:111:11111::1:111111::1:::111111311111111112111:::11:1111112122::21:1111:1::::>:::::2:::>>>>1:::::::::1::::::::::*:::::::::1:::111:1:::1:::1:::1::::::", "::::::112>::4:,::::::::,,2,:::,::::2:,;,44,;>,,:>>:::>2>:>>::::::1>:;>,,,:>>::::;::::::::::::4;:4::,,,t;,;:,1>:;::::1>:::::>:>>>::>:::->:>>>>:::>>>>>>>->-->>>>:::::::::,::4:>121>;::;:,,::::::1,,t,,22,t:>:,,>,1>>>>>::>>>>:>:>12:,,,:>1222,>>>::,::>211>>,,,:,,::12>>>1:1,::>21:1,>,>111>>1:11111:1111:::1111:11::::11111:1111:1:11:1:::11111:1:::::1:11:1:1::>::>111::::111111>>:1:1:1111111:1:::111311311113131223122:211::1:111122232111:1::::11:::244:2::::::>>:>:::::::>>::::::::::::::::::::::11111:1::1:::::::::::11:::", "1::::::1>:>42,,::::::,;:42422:,::::::;,44,::221:>:::;>11>>>:::::::::;:>2>><:::::::;::<:>::::::::::,t2,,;:::,>::::::>>::>:::>:>>::::=::::>>>11>:>::1>>>>>>>:>>>>>1:::::,,2>:::2121::;::,2,::::,,1:2,,:t,:,,>:>,:2,211,1,:>>1>>>:>22,111:,1,12,2>>:>,:<>1111>,,1,1>::,2,,>2:,,,:>>1:::,2,1111>:11:111:11::1:11111::::::::1111111:1:::1:1::1:::111111::::111111::1:>::>11::::1:11111:::::1:111:111::::1:1131331111331212323:::::3:112:112:221111::::111::1:4::::,:::1:1>:::::::>::>:::::*:::::::::::::11::11:1::1::1:::::1:11::::::", ":;::::::2>>:>,::,:;:>:::,:::::2::::::;,,:,,,4,2:>:::::1>>>::::>:::::-11>>::>:::=:>:::;:><:>::;;:::,2:,4:<:>5>:::>:>:>:>::;>:::>:::=:::::>>>>>>:>>>>>>>:::::>>>>>:1:::>>:,,;::,,22:;:,4,2,:::,:,:>2,,,,,,,:::t2:221612,,:>>>>:>:>,t::,2::12222>>>:,,::,1>111>>>:>,::>1,1::2,,>:>,1:1122,>1:1::13::111111::11111::11:::::11111111111:1::1:1:1:113111::::::1:111:1::::1>1>::1>:11111:::1:>>111:1::::1:1111122333111112222221:::1::111111:212:2211:121:1:1:::4::,::::>>:1>:::::>:::::1:1:::::::::::::11:1:::1:1::1::1::::::11:::::::", ",::;::2:>>>::::2::;::,;;:::::2:::2::::;;;<,>::::>:1:::::>>::>:::=::>:;:=:::=:::::4::,2:,,:>;>>>:=:::>>>>:>:::>>>>::::=:;::>1>1>>>:<>1>:>>:>:::>>>:::>>::>>,2:;:>,22::<;:,,,:::::>,,>22221,,::,22,22226>2:;::>>>::>,22212:1>2t22:2:,,,:::2>11,,,2>>>::>>,1::,,,>:>,:1:>:21:3111::1:11:1::11:111111::::::::111111:111::11::::1:111111::::1:1:111:1::>::1>1>>::11111111:11:>1:11111:::11:113122331:3131322222:::11::1:1111:2222111:11222:1:::::::2::2>>>1>>::::::>:::::::::::::::::::::::1:11:11:1::11::1::1:11::::::", ":::::,:2>>:4;:::::::,:;,:::::22:2:::,:,:::,,22,::::::>,>>>::::::::::::>>:::::::::>:;:::<::::::;;:12:::4;><>>>:=:=1>>1>>::;>>>>>:::::::::1>>>>>:::>1>>>:::>1:>11>::>:>>2>>>:::>t3t:;;::,,2::1:::,>,2,222:,,::2,:t256222:;::>2>>:>222222:1>222,,::,t,::,2>21>>>21>>::>>>,:::,:::>21::,222,111::33211111:1:1111111:::1::::111111111:111:1:11::11111:1:::::::1311:1::>:>>1>>:1>111111::>::::11111:1::::11133:3331113113222121:::::1111111>2222:221222::2:::::::::>::><:>:>:::::::::>1::::::::::::::::111:1:1:1:1:1:1:::11:1::::::1::", "::::::2>,,>::,;:<,:,:::::::,::2::,,:,:,:,;;,:,,:,::::>,>>>::::::>:::::>>::;::::<::::::::=:::::4:,:2::24:<<>>::::=:>>>:::::>>>>>:::::::::>>>1>:>:>>5>>>>-:1:::>1>>:>:>12>>2:::>ttt,,;:::,,,,:::,2>>>2,,t:,:24>>,22122,1:::>>21>:>121,22:::,t3,:,t,,,>:,2212>>>21::::2>>1:,::,::22:,12:t2>211::::23:111:11:1:11111:1:::::111111:111:1:11:::::1113111:::1::11111::::>>>>>1>::>>11111::11::::1:111::::1:113111131111122:22211:::1:11:1111>221:1::2::22:2:1::4:4::2:,>::>:::::-::::>:::::::::::::1:::::::1:11111:11::1::1::::1:::::::", ":::::>,>:,::,,;:;,:;;,::::4>:,:12:::::;,,;;::,:,,>:::>>:>>::::::::::::>:::::::>=::::::::::::::4::,,:::;,<;>>::::>=1>>>::>>>>>>:>:::-::::111>>>:::>1>>>::::::>11>1:::>11>>2::;>ttt,;<4:,::::,::2,,>>>,2,:,,:::>1,>12211:::>>1>>:>111312:1:23t1::,,,,::1>>11>>11>>:::1>:1::::::,,:,:,22211:2::3::112121:111::11111:1:::1111:11111:1:::1::11:11113111::11::::1111::::1:1>1:::>,131111:>::11:::111::::11:221313::1:1112222221::11:2:111111211:22:122::2:1:::::4:2:1:>:>>::>::::>::>:::::1::::::::1:1::1::11::11:11::::1:::::::::::::", ">:4:>>2::,,:4,,:;,;,t:::42:::,:2::42t,t;,:,;,2,,>>::::>>>>::::::>>1-::1>::::::::::><:::::>:::=;;:4,,,;::<>>>:;:::>>>>>>:>-:>>>>>:>::::::1>111::::>6>::>=:::1>11>::::>11:2,>;:>223,t44,:,,:::;::,,1,>,1:,21:::>1>5261>1:::1>>,:::121111:::222>224,,,>>>>>11>>>1>>>::>1::::::2:::2,,:2211:221::1:1:1:21:13::111111:::::::11111:11111111::11:::11111:::::11:::1:11:11:1>>>::,>>11111:>11:1:1:111::1:1:::221133331132212223:1::1::12:13:112122:111:222:11:1:4::2:2:1:>>>>::::::>::>::::::::1:::::::11::1:111111::1111:::::::::::::::", ":4:::>,:,:::;:;,::4,:4::4:42:22:,:2,,:::;;;,,22:>:::-1>>:1:::::::>::::::>>>::><;:>>:::::::::::=;:::,:,,:><>>::<:-:>:>:>:::>>1>>>::::->::>>11><:::>1>::<:::::>1111::>>>1>>1>;4>>1t,:<::,,1:>>,,,,>,2>,:,:,:::>>>>1221>>>:::>1>:::1212314,2222,2:,>,1>:>>:11>>>>>1>>:,::1:1::::::22,22,21112::::1::2233:131111111::::::::11111:11:111:::::::11111311:::1::11::1:1:>:111:>:::>1221111:1:::::1:11:1:::1:2213:13111113112222:1:::111:111112122211111121:::1:4:::22:::::::::::::->:::::::1:::::::::1:1:::11:11:111:1111:1::::1:1::::::", "::::>>::,,,4,,;::,::::,4:>4:,,22:::,t;;:,4;;,:2:>::::::::1::::::1::::::>>>><:::<>>>>::::;:::>:;:::,:,4,:::>>:>:=>>>:>>::>=->>->>::;:->::<111>:::>>>>:>:::1:111111:::1>1:,,,;:>>2t,,,,:,:,::,:;:,1,,2,::,>,::>>1,>1,,>2>>:1:>:::,131211:,2,:2,2:,>,>:>>1:>>>>1>>>>::>11:::::22:1::2,2221:222::1::3:22311111111111::::::::111131111:::1::::11:111131::::1:1::::1:::11:1::::>>,>21111:1:1:::111111::::1:::332313:113211:23:1::11::1:1111>222::1:1:22111:::::::::21:>>:>:::::::>::::::::::::::::::1:11:11::::1:1::1:1::1::::1:::::::", "::::::>>>:>:;::::::<;:,;::::,,,,,::,t4::>:;,,>>>2::::::::11:::::>::::>>>:>::;>>=>>>>>::>:::::;4::;;:,,,:;,::::::::::1>:::::::11::::=:::-:111>>:->11:::->:1:1111:::::11>::,,4:,12t,4t<:,,,,>>:::12,,1,:,,,2,:,>>,>121>2,>>>:1:::>111311:11111,>>,,,,:,,>>1:>1>>>>::41,>>>>:>>>::1>,1222,>12,>>>>22:1111111111121::::::::1::1111:21::1:1:::11:111111::::1::::111:::1>:1:::1:1>1111111>:::1:11:11::::1:11111311:113311113::1:::1112:12222:22::1>>:21::1:::4>::>::>:>:>>::>::::><:>><:::1::::::::::::11:1::11:1:11:::::::::1:1::::::", "::::1>>>,:::;:;:,:::;<:;:;4,,,:,:,:,:44,::;:>,>:::::::>::1::::::::::>5>::>:::<>=<<5>>::>:::::::;4,,:,4;::;:2::4::::::>::::-:::::::=:;::::111>::>>>>>>:->::1::111>>::21>:12:::22tt,,t4::,,,>:,:>12:,1,:,,2,::>>,>2:21>:>>>>>>:::>13311::1:111,>><:,:,;>1:1>>>11>>:::,1>::>:>>::>11>>322,>121>>21,3:111111:1111131:1:::::11111111211::1:11::11113111::1::1::::::::>>>:11:1:::1111122111::::11111:1::::11311331111113111331::::1:22221:2222212>>>::111:::::>:>>>>::<:::::::::>:::>>::::-::::::::11:1::11::1:11111:1:::1::::::::::1:", "::::>:1>,::;;::,>>:>::,;;:,:>2,>:,,::44:::;,,>>>::::4::::1>::::::::<:>5>>>::::::<>>:::::::::::4::::,t;,:;::,2:4::::::>1::::::::::::=;::::>1>>::>>>>>>:>::1:1:111>>>>1>>>:2::,,t22,,4,:,<,,:,::>11>1,,:,,2,,>>:>>>>2,,>>>>>>1>>:>11111:::>211>,>,,::::>>>>>>>>>>>>:::,>>:>>:>::121212321>1,1>>22,21111311:111133:11::::11:11111121:1::11:1:111131111:::1:1::11:::>>>111:::::1111111111:::1111111:::1:1133311111:11131:1::11::::1:22:22222222>>>>21::11:;:-1>>::::::::>:>::::::::::::::::::>::::::1::11::::111:1111::::::::1::::::", ":::::>>:::,::;:,,,:<;::::;4::,>1:2::2:::::4,:,>>:::::::::1>:-:::::<::>>>>:::>:1:<::;::>>::::::;::2,:2:,;:::2:::4::::::::::::::::::::::::>:1:>>:>>>>>:>::1::111111>,>2>>::1,::,2,1::;;:,,,,>:<>51::>>,,:,9,::>:>>,>216>,>,>>1>>->1311::::>121>,,,,<,::>>>>>11,11>>:::2>>:::>1::,2221222,>2,>>>2>221::11:11:11233::::::::::111111111:11::::11:1111:1::1::::::11:::>>:111::::1:111131>1:::::::11:11:::1111113111111131113132::::11222222222222>>>>2111:::;::>::>>:>>>>:::>::::::>>::::=::::::::11:1:11::11::111:1:1:11::::1::1:::::", "::::,:,::,::;;;,<,:;::::4:;;:,>2:2::::4;:;::,:>>1::::::::1:::::::>::::>>1::::::=:<::::>>:::>::;:;,,,,42::4:21:::::>:::>:1-::::::::::=::;:>>:1:>>>:>>>::::1:1:111>:112:>::,::<,,21>::::,>,>:>::>>>:::,:,:2,>:>>>>>>22,>,>5>>1>>:>1111:1::>,>>>,><:<<:=>:>1:>>1:1::::>>>>>:::::2:2522212122>1:>>>11:1111:11:1:1331:1::::1:::113:111111:1::1:1111131:1::1::1::::::::1:1:1:::111111111:1:1:11::11111::::::2213132:1312221111::1:::,2222222222>>:>>:11:>>::=::1:>>>:><:>>>:>:::::::>::::::::::::::1:::111:1:::111::::1::1::1:1:1::::1", "::,:::>>,,1::::;:,,;:::;::,:>2:2:2:2::::,:4,,:,:::::::4::11:::4;::::::>>>:>:>:::::::::1>::::::=:::::;,;,:::2::4:::1::1>:1::::::::::::<:::::::1>:>:>:>:-::::111111:>>1>>,22:::>>111::<::,,>,<:<5>1:>,,,,1,6,:,,>>>>62,,>:>>1>>::>1111:::1>12,>>>>:>>::>11>>1>11111:>>>>1::,:::4,,222112112,21:>,11::1111::12:133111::*:111:111111111:1111::11:111111::1:1:1:1::::::1:1::::::::11111>>1::1:11:1::11:1:3:2213311:11331212112:::22:22222222:22:22>>,>>1:::;:>>>>>::>>:>>:>>::::::>>>:::::::::::11::11::11:11111:::1::11:::1:::::::::", ">:::>>:>::,:;:,,,,:,,:,::4::::2::>>,,::,,,:::::::1:>4:::>>:::4:::>:::::11:::::::::>>::1>>::::;;;::,:24,44::11:4:::>::1:>:::::::::::::<:::>:>::::>>>>>:>>:1::111:1>1>1:::,1:::>>,,,:4;::,>,:>::>1>::12,,:2,,>,>>>>22,,,>:>1>1>::>1111:11:,>22>>>::,>::>11>11>1>1:>::1,11:::,::::2,321,2,2111::1:211:1111:1121:2211:::::::1111111111:1:::11:11:11111:::11::11::::::11::1::1:::111111:11:1:11:11:11:::1::1213211:11331:22112::::2:22222:2,,222:222,11:::::::>>::>:>>:>><>>::::>>>:::::::>>::1::1::::11:1:1::1:111:11:1:::::1:1:1:1:", ":::::>:,,:,:;:;:,:,;;,,;:::::22::>>,:44,,4:::::,::>::::::>:::::*::=:<:>>>1::::::=::>::>:>:>::;;::,::,,:t:::1:::::4:::::>1:::11-:::>:=::::::>:1:::>>>>:::::11111::>1>>>>:1t:::>>,,,,:;<,>,>::::>,>>:,1>>16,,>1>>>>,2212,:>>>>>:>51111::::1>,,>:::::>:=>1>>1:1:1:1>:::1111:::>:,2:,t,>11>>111:::2111:121:1:12:123111:::::111111111111:1:::1:1:111113:::1::::1:::::::::1:1:::1:11111>11:1::::1:11:11:::1111132:1113321222112::::2222222,,2,22:22,:231::::=:>>>>>>::>:>>:>>:::>:>::<::::::>:1:::1:1:1:111::1::1::11:1::1:::1:::1::::", ">::::::2:::::;,:,,,,::2::::,;,:2::>>::;:,;;::::,1::::;::::>::4::>::::>:>:>>:::::::<>>::>>:::::=:::,4:,4,4::2:::::::1::>>1:1:1::::::::::::>:>>::>>>>>:::-1>>:1::11121,:>:>2>;:>>,,>:,4;,,1>:>>:>>>::>,>>>25>>2,>>:51115>:>>1>>:>>:11:::::>>22::,:<:>:::1>>>>>1>>:::>>111,:>,::>22,2:21211111::>1111::21:11111111111::::::113111111:1:1:1111:1111:11:::1::::1:::::::::1:::::11:111111111:::11:11111:::3:2223111:23122222::2:::t::22222:22:122:2:>221:1::4:>>>>>::>::<::>>:>>:>::>>:::::::::::::1:1:11:1:1::::::1:1::::::1:::1::1::", ":::::4:::,,:<::,4,:::22:;::,::,:>:>>::4,,;:::::::1:1:;:;:::::;:::>:::::::>><:::=::>>>;>:>::::::::::,,,t,:4:,::4:4:::::2:::::::::::->:><::::>>:::::>::::::1::1:1:1>22,,>>31>:>>>,,:::,;4:>>:>>:>>>::2,15122,>1>>>>>5111>:>>5>>:>>1111::::>>22,2:4::<;=>1>:>:>>1>1>:>>112,1::>,::,,2>12211111::>11111:11:111111331:1::::::113111111111:::1:1:1111111::::::::::::::::::::1::::1111111::::1:1::1:1111::1112::3111221322222222:::22222222222212>2222221::::::::>>>>>1::>>>>>>>:::::>>::::::::111:1:1:111:1:1::::1::1::1:1:::1:1:::1::", ">;:::::,:,,:,::,:t:,,224:,::::,::>:,:4::,:,;:::,1::1:;::::::::::::::::>>:>>:<:::=:>>1::>>::;::::::,:,:24:;:21::44::::1:21::::1:::::::;:::::::::>>:::::::>:>:1::::>>2t22>23:::>>>,>::,,2,1:-><<>>:>>>>,,215><>>>>>>6>111<>>5>>>>11:1:1:::>>>,:::,<>:::>1>::>1,,>1,:>22,11>>>:::,2:1:2311:>1:::1:1111111::11:111111::::::111111111111:::1:11:111111:1:::::::::::::::::1111::>11:1111111:1:::::11111::1111231133113322222222:::2::22222222:11222:222,:::::::1:::::::>::>>>>>:>::::>::::1::::1::11111:1:::1:::::1:1:1:1::::::11:1:::", ">:>:::::::::;:,::2,24,::4,,,>,>::1:,::;:,,:::,:2:1::=::::1:::;:::::=::>::>>::::=:<>>:::>1::;=:=:,:,tt,,,;:::::::;:,::>22:::11:-:;:::=:;==::>>:>>-:>::::::::::1:1>>>2221,11:::>>>:::,,4::>>>>:>>>:>>,>,,,21>:>>>5>>1>>>1=:,1>>>>>1::1:1::,>,,:,,,<>>=:,22>:>11,>>,:::1,1,>>:1:::,:112121:1>:::::1:1:11:1::1111331::::::11:13:1111111:1::1:111111111:::::1:::::::::::1111:>:>>1:1111111:1:::11:1111::::1:223131111132223222::2:222:2222:2222::2,2221::4:4:::11::1:::::>>->::>>>::::1::21:::11:::1::1:1:11:::::1:::::1:1:1::::::::1", ":><:::;,,:,:<:,::,,:2>::4,,t22::::,1::;;4,;,:,::>1::-:-:>11::::4::<>:>>:::>:::::=<><>>>>>:::::::;,t;t::,,:,,:::4;:>::22>:11::::::<::=<<=:>:>>>:1>>>:::>>::1::11::>>12,2,11::::,>>::,4:::>::::::1:>>,,:,1,>>:>:,1111:11:>>11>>>:>:11::>:::>>>::t,><:::>1,>>:12>:>,:::,,,>::>>::,1,>1211111,>:11>1311:11:111::1331:1::::1:11111:11111::::11::11:1111:::::::::1::::::::111::>1>>1111::1111:::::11111:::::2222121133132223222::222222:22t2:222:2222::1:::::,::111:::::>>>>>>>::>>::::>::11::::1::11:::1:1:1:1::::1::::1:1::1:1:::1:1", ">::::::::1::<:,,,t,::::44244:::2,::::::;:;;:::,:>>11:::::>,::::;:>==>>:::::::::::::>><<>>;::::;::::,,,2,,:42:1:44:>>:>2:::::::*::::::>=::::>>::>->>:>--:-:::>:::::1112t:11:::1:,12;,,;4:::::::>>:>>1,>>1,>:<:>11>1>111>:>>111>>>1:::>2>>,>>>::42:>:;:56,>>>12>>:,:2:>,2::>>>,:,,,>1>>>1:1>>>12>11111::1:11111311:1::*:1::11:3::111111::11:1111:1:1:::::::::::::::::1:1:1:>:>>1:111111:::::::11113:::::22233:111112122232:::222:2222222:2:::2:222211:::4:1:::::::::>>:>>>>:>>>::;:::11:::11::::111:1:::11::1:1:::1::::::1:::1::::", "::::,:,:,>::;:,,,2,:,4,:,,:,,,2::1::>:;:::,::2:,>>>-:::::>1::::;:>:::>:::::>::<=::<>>:::,;::::;::::t,;:4;4,,1:::;::>12111::1:::::;:::<:::>>>>:::>::::->:1:::>::11:1:::2,11:::1>12:::4,:2::::::>>>>>1>>1,>>>::>>,1>>>>1>:>>>1>::>>>1:>1:>1>,>:,,,::::=,11>>>11>>::42:>,>:>,:>,::,,>:>>11>11>>11>>111:111:1111311111::::::::111::311111:111111111111:::::1:1:::::::1111:1:11::>:111::111::::11:111:::::322233:3113222222322::222t222:2222222:2222:221:14::::1::>1::>>>>:>>::>>>:::4::>:111::1::1:11::1111::::11::111:::1::1:::::::", ",::::::::,>:::,,,2,,,::::,,:,:,:,:,,::4,:;,:::::11>::::::1>:=:;;;>>-:>>:::::>:::=:>:;<:::;::::;::,,,,,,,,,221:::::>1111:11::::::;-::::-:::>>>>::>:>::::::::>:11::1::,,2:114:::,,,::4,;:::::::>1::1>1511>>>;::>2215>>>>>>>>1>>:>1>>::1>:>,>,,,:,,:;<::>1,>>>15>>>2:::111:>11>::,,,1>::11>>>::,2>::11111::111133111:::::1:11111:113111::11:1113::11::::::1::::::::-1:::11:::111111111111:::::1111:3:::1::2223311112321222221:22:22:2222222222:2:22:214::4:::::1::::>>:>>>>>:>>>>>::::>::111:1:::1::1:1::1::1::1::::::1:::1:11:1::1", ":,>=:::::>>:::;,,,:,,4:::t,:,:,:>>>:::4>>,:::::,>>>:4::::21::::::::=;>::::::>:::::;<;;:::::>,:;::,,4,,:,:,,21:::;::12:2>:>>::::::::4::::=::1:>>>1:::::*::::11111::1::11111:::11:>::4>>::,::>::::>1>5>11>1>=>>>15115>11>>>>1>>>>>:11:1:::1111::,,>::::>2>:,:,,11>2:::,1>:>>>>::,2>1:::1111:::11:1:11111:1111113331:::::11111:111111111:111:1111:111:::::1::1::::::::::11::::11>1111112:1:::111:2:1:::11111311111122222222:2:2223222222222:213:2:211::::::::4:::::::2::2>>1:::::::::,::2tt2:::::1:::1:111:1:::::1:1::1:::::1:1:1::", ":>::::::>,>><::,:,:,,:,:::2,,,:::::,,:;:,::;:::,,,>:::2,:21:;:;4::=:<>>::>:>:::=;;:;::::,:>:::;::t:,,:,,,1,>::44::>2>>2>:>:>:::4:::::;4:::1::>:>:::::::::::::1:::::::1:11:::::1:>:::::,::::<::11>1=>>>5>>>>>>>1151>>51>>>5211>>111111:::1::12:,4::;:4>>11:11>:,>1:::2>>>:>>:::,,>,:11::1>11:111::1311::111:1133111::*:::111111:111111::11111311:1::::1:::::::::::::11::::>:>>2>>::11111:::::12221:1:1:1113311113222223322::::222:22:2222:2:22:1:11::1:4:::::::1::::,2:>>:::::::1:1,2:t,,2:::1:1:1::11::1:1::1:::::::1:1:1:::::::", ":,>:>:::>,>;;::::,:,,,:::,22,,::::;,,:4>,,;::::,2>>:::::,11::::;::>::>:::::::::::,::::;;::>::::4,t:<,4,;:,2>::::4:>>>>11,>:>:::::::4::::::::>>>:1:::*:::1:::1:11::1::::111::::::>::::;,>,:;:::1:>:<1>>515:=1<>>>11>:>5>:>2>>>>>::1111::1>>112:;,:>;;::11::>,>>>:2:::,1>>>:>:::>,>111>11:1>>111:11:111::11111113111:::::1:111111111111:1::1:13111:::::::1::1::::::::::1:1::>:>22>1:11:22::::1:22211:::1::13111111223:23322:22222:2222222222:21::::11:::::::::::1:::>:::>::::::::::::,t2,t::22:1::1::11111:1::1::1:::1::1::::::11:", ">>::>>::,1>:;:;::::::,,:,22t,:::::>,::;>:<:;:,,22>:,:::,,2>:::;=::::::::<:>>>:::;;,:::::,:>:::::,2:,,:;,,,111::4:>2>:>1:::::::::::::;4::::11>>:>1::::::::::1::111::11:1111-:1:111;:;<:;:>>::::11>1>1><>>>>><>>1<>15>>>>>>11>:>:>11:1::::>>>2,2,;>>:;::>>>::1,1,>2:::1111>>>::;:,1:1:>1>>1>::111:111111:1:111131111::*::1:1:11:1111111::1::111111:::::::::1::::::::::::11::::,2211:111221:::1222211:::1111133131:3:2222312::222222:2::22:222213:311::::::44::::::::::>:>:::::::>>:::,t,,2:::::::1:1:1:::::1::::1::::1:::::11:::::", ":>>:>>::>,>:;,:;2::>:::::2,2,:::::>>,:4,,4;,t:,:,>>::,::,11:::::::::::>:=:>,>::::::,,:;:::::>:;::t:,:;;;;,,,,:4:::>1::1:::::4:::::::::;:::1>:>>>1:1::*:::::::11:::1::1111:4::::1>::<:<::><:::>>1>1>1>::<>><::>>>>66>>>>:>>1>>::>1:1:::::>>,2>>,,<<;:;:11>::>>,2>t:::,21>>>>>:::,1>12>>2>11::122211:1111111:113111:::::::11111:11111:11:::::11111:::::1:1::1::::::::1:11:>::122211:1:132::::::22:1:::11:1113111132:2223222:22222311122:22::22111::1:::::4::::::1:1:::>:>::::::::>::::tt22::1:::1::1::1::11::::1::1:1:::1:::1::1::", ":,>:>:::>>>::;:::,,,:,:::,:22:::::>>::;:,,;,,,2:>>>>::::,,1:>::;:::::>>>>:>>>:=::::,,;:::<:,::4,,2,,,:,;::>,1::::>>1:1:>:::::::::>:::4;:::1>>>>>::1::::::::11:1::1:1:::11:::::>1>:::::::::;:;,1>>>11>:>>>>>=>>>>>>61>5>:>111>>:11::1:1::1>>>:,,:;><::::1>1:1>>,>,:::>1:1>>>>:::,,>>>:22111:112,21:11:1:11111:3111::::::1:11111:111111:111:1111111:::::::::::::::::::::1::::1>22>1111:331:::1:2:2111:1:1111131313221223222:2::2:111122222312:1:111::1:::::4::::::::,::::2::::::>::::222:::1::1::1111111::1:1::::1:::::::::11:::1:", ":,>;::::>5>:;,;::,>:,>::,,,2,,>::>,>,::,:,;;;,::>>>>2::::121:::;;::::>>1>:>>>:<::::,:;;:,:,:>::,,2:;:<<<>::,1>:;4::>:>,11:>:>>:::::::;;;::1111>>::::::*::::::11::1:::::::::::::1>>::<=::>:::;:>>1>>1<:>:>>>:15>:>111>>>:>111>:::1111::::2>>,>:>,><::::11:1:1>>>2,:::>1>>>>,>><>>1>1>:>2>11::2,221:111:111111331:::::*::111:11::1111::11::11111111:::::::::1::::::::::111:::1>2>2::111111::::1:111:::1::11131111122111322222222:2:1122222:2:1:11:111::::::*::::::,:::>:::1:::::::::::22::1::1:::11::1:1:1:111::::::1:::::::::1::1", ":>>;>:::>>>:::::,,,:,:::2:,2,:>>>:>,:;;,,;::,,:,>::<4,:2:211>:;;:::::>>>>>>>>::::,>:,4;,::,:::;:2:,,<,:<>>:2::::::>>>>>>1>::>::::::::;;;::11>>>>11::::::::1:1:1:::::1::1::*::::1>><;:<>::;;:;:>>11>1>>>5>1=>>>>>>>55>><::>11>>:>11::::::1>::>:>,>::::::111:>>>>>,:::>11>>>>>>>:>,1111>2>11:>2222:1111::11:111111:::*::1:11:111:111111::11:1:1111::::::::::::::::-:::::11::::>>21111111111::1:1:211::1:11111113113331:22:2::2:222:11222:22:111:111::::::::::44::1::::>:11::*:::::::::422:1::1:::1:11:1::::::::11:::::1:::::1:::11", ":,>:::::>>>:<:::>,:,,:::,:,2,::>:>>>::::,;:,::,>>>>:<;,:>,1:::;::>:::>>>>:>>>::::::>:;;:::,>::;::,::;,;::,:2>::;4:1:1>>>:::::1::->>>->:;:1111:11:::::::::::1:11:::1:::::1:::*::1><:=>:>:>>::>::11>>1<>>1>><:>>>>>111>>::111::>:>:1:::::1:>,>>>>,<>::::>>>>>1,:>2::;:,,1>>:>>>>>1,1>22111:11>13111:11111:1111111:1:::::::11111::111111:11:::111:11:::::::::1::::*1::::111::111:>11:1111:11::1:1::1::::11111111311221121311:11:32:::112231:::3:3:::2::::::4:4::::::::::,::::::::::::::1:11:::1:::1111:1::1::1::1:1::::1:::::::::11", ">>::::::>>>:;,::;:>:2,:::,,22,::;>>:::;;;,:;,>>,:>>>;,,>>,1,>>:;:>>::>:::>>>>>::;::>::::1:,>>:;::,,:,,,;:>,21>>4:::1::1>1::::1::>:::::;::1111:>11:1:::-:::1:1::::::::::::::::::1>>::<>::>>::-:>:1>>1>><1>>::>>>1>11>>>:::111::::11111::11>,2>>2,>><:::>>>:>1,>>2::::,,2>>:>>>>512>>221111>::11>21111:::111113111:::*:::1111:111:11:11:::11:111:11:::::::::1::::::-::::11:::::111111:11111:::1122111::11111111131:223323:1::1::23322::22:1::32:11:23:::::::::::;:1::::::::::::::::::::1:2:::1:::1:1::11::::11::::1:::::::1:1::::1", ">>:::>::::,:;:::>:,,,,4:,,2t11:1:>::::;,;,:,,2,:::>::::::21,,::::>>::>><:>>>>>:>;;::>:::1:>:>>::,:,::,,;>>221::;::1::>>>:::::21::=:::::::>11>>>1:::::::::::111:::::::::::1::::11>==::;>:->-::>11>1>>><>>>>::>:::>1>>>>::>11:>:::1:11::-1>>2>>>,>>>:=:::>>>:1>>,2,:;12221>:>>>>>12>,15>11:1:11111:1111:111111111:11:::::1111::111:1:11::1:::11:11::::::::::111:::::::::1:::::111>:111111:1:::::221::::111111111333232222:1:::322::3322232::3:1:1:::11:::::::4::::::::::,:1::::::1:::::::21::1:::1:1::11::1::1::::::11:::11::11:1:", "::>:::>:::,:;:,::;::>,:::::t1:::::::::;::::;::,::>>:4:1::122::>>:>::::>>>>>>::>><::,>:;>1>>::>:::::,,,:,:>22>1:=4:1::1>:::::>11::::::=:=:>111::1:::::1-::::1::::::::::::1-:*:::11>>::=><>>>>>>:1>>>>>><1<:::<:1>>>1>>>::>11>::::11:::::1>:,>>>>><5>:::>>>>>,1,12,>;>1>1:>>>>>>>11>,1>131:1:111>1113111::1:111111:::::::1111:::1:11:11:11111:1:111::::::1:::::::::::::111:11:>111111113111:::222:1::::11:1311111122:312311:1111:31:::2:113::3131:12::1:::::::44::::>::::,:::::::-:::1:::1:::::1:::1::::11::1::1:1:::11:::::1::::1", ">:>>:>>>:,::::,,:;:>::::4,:2,>::::::::;;:::::,>:::>::42::12>>>::::>-:;:><>>>:::::;::,::>1>1::>:::::1,>,:>>22:::;;;:1:1,>,:::>,1,:>:::-:::>111::1:::::::::::::::::::::::::::4::1::::::::>>>>>::>>>:<1>:>1><:::>>>>>>1:::::11:1::1::1:::;1>>>>>>>><,<=-:>1>:>212122>:,,,>::>,::>>121>11111111:>>1:11111::::111111::::-:::1:1:1:11111:11:1::1:111:11::::::1::1::::*::1::11:::111::11:1122221::2:22:1::1:11:11131131:3:3123:1::1111:11:1111::111111::121::::::*::4::::>:::>>:::::::::::::1::::::11::::11:11:::1:::::::1::::11:1:::1:", ">>>:->::::,::::1>>::>>::::,,2>1:::::::;;::;,:,::>>>::::::111>>::>>>1::>>>>5>>:::;::,,::>,>1>,::::>:,,,:,:12211:::::1:1,:>1::>,>>>>::>:::>>111::11::::::-::1:1::1:-::::::::::::1:1::>=::>>>>>::>:><>><:>1>:::><>>1>>>:1:1:111:::111::>>>>2,211>>1,,>;>>1>:>>21>>21>::,11:>>>>>>>,2,,2:11111:1:>11111:1:1:1111311::::::1::1:11::1:1::1:1:11:111:11:1::1::1:::::::::::::111:1:::11111112211:::::222:11:::111131:1111:313:3::11121121:1:112:1:11:111:11111::::*::4::::>>::::>:::*:::::::1:::::1:1::11:::1::::11:1:::::::1::::1:::::1", ">>1::>>:,:,:;::1:,,:>::4:,:,3:1:::;:::;,,:::>::>>>>::::::11>:::::>>>::>>>>>>>=1>:;:,>::>,>>,,::::,:,,:::1113:14::::1:1>>>>:::,>>5>>:::::>66>:::1:::::::::11:::::::::::::::::::1:1::::>>>>>>>::1:1:>>::>6><::>>>>>>:>:1::111::::1111:>>>>1,>>>>,,:,>::>>1>>121,11,>::21:1>>>>>>>211>1>:1111>:::>1:1111:11111311:11:-::1:1111:::11:1:1:::1:::111111:::::::::::::::-::::1:1::::1111111121111::::12:111:1111111313311222:31:1::1:2:22111111::111111:121111::::::;::>>>>::::::::::::::::1:::1:11::::111:1::::1::::1:::::1:::11::::1::", ">,>1->>>::::::,,::::>>::::,,22:::>:,::::<:<>>:::>>>:4:>,>>1>:::::>>:=:<::55>>>>>:<::>;:>2>>>:::::,:,,>,:>111::::4::::>>>>>::::>1>>>::::511111::1::-::::::::::1::::::::::::::::1::::<>>>>>>>-::::>:>>::>>>:::>>>>>>>>:11::11:1:::11::::>,12>>>>>,:,>::511,:222>1>1::>111:>:>>::>12>>,>11111::>>>>11331:111113111:::::::1:1111:11:11:11:1::11:11:11::::::::1::::::::::::1::1>1::11111121111::::222:::1::111111:3:112231:311:11::221:23:111:111:111:1111:::::::;;::>>>:::>:::::::::1::::::1:::1:::1:111:11:::::::::::::::::::1:1:::", ",,1::>,>:>::;:,,:,::,::;::,,,2>:>>>:24::,4::;:::::::::::>>11:::::>>:4:::::1:>>:::<:,:,:,>>>:>::::::2,::::,>2>:4:>:>1::>1:1:::::>1:>::>:>11111=>>>::::=<=11>::>>>::::::::::::::::1::::::1>>><;:>>>>>>>;>>:>::::>>>>><>1::11::<::>11>>>>>>1>>>>>>>:>5=>>>1>>,3,1>1>>>>>>>>>:>>:->11>>1111111:1:111::11::12131311111:::::11:11::111:1::11::1:111::11::::1::11:::1::::*:::11:::1:1:111:111111:::>11,11:::1111111111111331:1111::111:1:111111:111:111::111::::::::*::>>:>:::>:;:::4:::::1:::>::::::::11:11::1:::1:::::::::::111:1:1:1", ">,2>::,>>,,:::,::,,:,,:;:,,:2,1:::::::4,:::,;,,:,:::<:>:,:11:::::>>:::,:,,,,>>:>,:,,,:,:,>>>,>::;,,22::,,,,2>:;:,,,>:>>,:::::::>>:>::-:5>1111>:<>:>::::><>>:>:>>::::::::::::::::1::::::151>>:>>>>>>>:<5>:><:>>>>>>1>:11:>111:::>1>>>:>>>1>>>>>>:>>>:>>,>>>,2>>>1>>>>>21:::->::>11>>1>>1111:::::11111111111131111:::*::1:1111:::1:11::111:111111111::::::::1:1::::::::::11::11:111111111:::::112,::1::111113113:1132:11111::1:11111111311:111111111111:1::::1:::::>::::::>>:::::>111:1::>:::1:1:::1::::::::::::::::1:::::::1:1:::", ">2>>:,>,>>,:4::,:,,::,:::<:,2,>>2:::::::4,,;,,::>:1:::>:,:>1,:::>>::;:,,,1:22>::::,,,,,,,>1>>>;:::,1,::,:,,21::::,2>>>>11::>::>>>>:>>=:>>11>1>:>1:>:-::>:>:>::>-:::::::::*:*::11::::>::11>>>:1>>>:>:><>>>>>>>>::>>>>>>>::1:1:::>>>>1>>>>11>>>>>::<><>11,>>,2>1>>>>:>>11>>:1>:::>1>11>>>11:::11::>1131::1111111:1::*::::111111::11:1::1:111111:11:::::::111:::::::::::1:1:::111:1:1111111:::11111111::1111133131111131:111::1:1111111311:1:11::11:111:::1::::::::>>:;:::>:>:::::::11::::11::::1:11:1::::::::::::1::1::::1:1:::1:1", ">>>,::>::>>:::,:,:::,4;:::,,,21>::,:::4,,;:,,:::>>>::::::;>1>::::::::;,,,:,,1>>:;::,2,1,21::>:;:,,,2::,;::222,:::>2>:,:111:::>:>::>::::>>11>>>>>><:::::<>:::>>>>*::::::::::::111::::::>>>>>::=::::::>>5<>>:>>::>>>>>:1:<>:1:><-:>>1>::>11>>>>>>>>>>:,,11>>,21:>>5:::>5>>:::>>:>>1>1>>1>111:1:111:>11:11::131111:::::111111:1:::1:1::111:111111111:::::::::::::::::::::1::::::::1111111:1:::1:11:1:111::113111311:2311111:::11:111111111111:11111:1:1:1:1:::::::::::>>>>:>:::;::::::::::2:::::1:::1:::::::1::::::::::::::1::1:1::", "::>2>:>>:,::,::,,:,,::::::,,2:>>:::::::::,,4:2::>>>>:;:>::>>>::::>:::::,>>1,:>::::>,,t2,,>::1:4,:221:,,,::22,::;::1::1::::::::>>:::>::::>11>>>1>>:<:::>::::::>:::::::1:::::*::11,::;;>,:>:::>>>:<:>><:>5>>-:>>>>6>>>>1>>>1>>::::>>>>>:>1>>>>:55>:>::>511,::2>>>>>>>>11>:::>:>>>>>>1>11>>1:::>>:11111:1111113111::*:::111111:1:111:::::11111111111::::::11::::1::::::1:::1:::1:111111113::::::111:11::11:11311111113111111::11:111111111:1::1111111111111::::::::>::::>>11::::::=:::::::,1:::1:1:1::1:::::11::::::::::::1:::1::::", ":>>>>>:>>:2::::,,:::,,:;<,,2t,>:::::,:4<4,;,:2:,>>>:::>:::1>>:::>>>:::,,>,1>:>::::,,,12,>>>>1>;:,,1>:,,:::11>::;4::::,1::::::1>>>>>:::::>:>::>651<>>>:=:::1:>>>:::::::1::::::::::;::::>>>::::->>>>:>:>5>>>>>->->>1>11>:>1>>>:::>>>>>:::>>>1>:>>>>>=:>>51>>>2>>>>>>>>>>>::>:>::>>1111>1:>1::1>:>:::131:111131111:::::::111::1:111::1::111:11111111::::::1::::::::::::::1:1::::11:11121111:::11:1:1:1:::1:111111131:2:111111:11:111:111111111:1:11:111:111:::::*:::>:>::>>2>:::::::::::::21:::::::1::11::::::::::1:::1::1:1:11:11:", ":,>>>>::>,,:::::,::,,,<;,,,2t22::,:::,,,4,4:4t,:>>,:::::::>>:;;::>:::,,,:1>>;>::>>,>:>1:>>>>1:;>,,>>:2,:,,2>::4:::::::>>1:::::>:::>::::-:::>:11>>>>>::-::::1:1::::::1::::::::::1:;;::::>>:=:::>>>>>><>>>5>:>::>>11>>11>:>>>>::>:>>>>:::11>1::>><<><:>5>>>>>21>,25>:>>1>::::>:::>>11:>1>>:::>>>1111111:1113311:::::::1:1111111:1:11:::1::111111131:::::1::11::::1:*:1:1:11::11:1111122211:::>1:1:1:1:::1:131111132211111:11:11:1:1:111111:11::1:11111:::1::::::*:>::>:>:>>>::::=::::::::,11:::::::::::1::::1::::::::1:11:1:::11::", ";>,>>>>::>2,4:::,::,:,::4,2t22:2::2:,,:;,:,,:2:,::>>::::::1>;::;::::::11:11>:>::::>:,>,,1::>1::::,>>::,::,2>::4::::4::::::::::1>>>::::>>:::>:1>1>>>>::>:::::1:::::::1:1:1:::::::,;:;:::>>>::::::::><>><>>,:>::>><>>11>::>1>>>>:>>>>1:::1>>>>>>:::><:>>1>><>2,,2,>>>>>1>::::>>:>>1:1>>>:1::,,11,>111111131331111::::::1111::1:1111:::::11111111131:::1:1:::1::::1:::::111::1::1:1:1122211::1>>>:1111::1:11113113133111111:::::::1111:111:1:111:11:11111:1::::::::>:>>:>;,>>>:::::::::::4:1::1:::::11::::1::::1::::::::::1:1:1:1::", ":,1>>>>::>,::::,:::,,,::4,2tt2:2:,:::::,,,42,,::::>:::,:::,,:::::>::::22>>>>>>:::>>>,>>>>>:::::,>::,:,1,:22,>:4::=::::::1:-:::1:::::=::::::1>1>1>:>::::=::>:1>>:::::1:::*:::::::>;:;::::,,;::::>::>>>:::>>:::>:>>>->1>:<11:::1:>>1:1>>>>>>>>>>>::>>-:111:::>>>>1>>>>>>>:::>>::,1>>>1>>:11:>222,111111:111331:>>>::::111111111:11:::1:11:1:1111111::::11::::1::::::::111:1:>:1,1,1:2222:2:::2>:111:11:1:111212112331111111:::1:11::11111:111111:::::11:1::::::::::>::>>>::1::::::::::::::11:1:::1:11:1:1::1:1:::::::::::11::1:1::", ":::>>:>::>1:::,:,:,:,>::::,tt22:::2:2::,4:;2,,,:>>>>::::>:>>:=:>>::::>t2>>>:>2,:::>>1>>>,>>::::,>>,,:,:::t21>:4:::1::;::1:1:111::>:::::;::::>>>1>::::::=>:>::1::::1:1:::1:::::::>::;:;:,,:::::::::>>:,::>:<:,:>>>>>>1>:>11111:::>111>:>>1>>1>:<:::::::1>::>55>>,>>>>,1>>::<>::>6>1>>,>:1>:,>,2>>1131:1:1133111:::::::1111:11:11:111::::1:1111111:::::::11:1::::::::::::11:>:::>>11222::2::2:1>11211::1:1122212131111111111::1:::111111111::1111111111:1::::::*:::>::>>>>1:1:::::::::::::1:::1:1::::::::::::::::::::::1:1:11::1::", "::>>>:,:>>1,:::,,;:::>4::22:222:4,,,:::::,:,2t,,>>>>:::,>:>>:;;:::::;:211>>:>,>>::>>,>>1,>>>::<>>2222,:1:2t1:::::-:::::>:-:1:111:11:::::::::>1>1>::::::::>1:>,>>::1:::1::::::::::::;::,>>,>>::>>:>>,,;>,>><:,>>>>>>>1>>>:1>::::>11:11::1>1>1>><>>::::1>>>:>,>>>>1>>>>>>>::>>>:>2>>>1>>:,1;12,1>>1311111113111:1:::::11:11::1111111:1:1::::1111111::::1::::1::::::=:111>>1:1::1>,211122:114:21>11211::1:1:2222123113113211::::::11:11:111::1:1:1111:11::11::::::::>::>>>,::::::::::::::::1::11:1::::1:1:1:::1:::::::1:1:::1111::1", "::>>>:::>11,;;,:,;::>,;:4,24t:2:::,22>4:,::,,,,,,>,>:;,:>::>>;::::>:::,1>>,>2>>:::1>>>>,>:>>>:;>:12,t,,2,,22>:::::::::1>:1::1111:>1::=:::::>>>>5>:::::::>:>>,111::::1::::::::*::::>;::<>>:>>::>>:>::>>:>,,::>>>>>>>>11>>::1::::>11:11::111>1>>>>>>>::::1>::>5>>>1:::>>>:>>>>>:>111112>>11:,12>1>11111:111311:1:1:::1:1111:11:1:1:1::::111:1111111:::::1::::::::::::::11>::::::>>111222211:2:>>22121::11122232231131131:111:::11::11111111:1111:11:1111:::::*::*::>>:>,>>:11:::::::::::::::::::::::::::::1::::::::::::::1:111:1:1", ":,:>>::::,,,,>>::;>,>:>::4>:::>:::>>>>,,2>>::,2,1,,>,>>,>::::,21t,,:1:21:::4::::::1>1::1:11:1:::::->:::>>1>>>::>>:::::>>:,,>:::1::1:::::4::1>:::::,>>>>>::>>:::::::,,,,:>>,>>>:>:1:>>::1:::>:1>1>::1>1>11:>>::<::111>:>,1>>>1>>::>:>,>>>>:>512>>1>>,1>2111,>1331:11:111:111::::11:1111111::1111::11:::111111::::::1:::::::::::::1:111:::>>>111213222::,:11111121:1112233213:1131111:11::::1111:1:111:11:1::111:111::::::*::::1>>::1::::::1::::::1:::::::::::1::::::11:1::1:::::::1:1::11:1:1", ",:>:>,:::,::;:,;:::,2,::::,2t:::::::::4:;,::,:::>>>>::>>>:>>>:>:::>::>>:,1122>>::,21,22,>:>:,::::,1222:,,>22>:::::-1::11::::1111:>>>:-:::::11>>>>>::>::::::>>>>>:::::::::::*:*:::1>:::<>,>>>>::>>>>::::>>,:<>>>>:>>>>::::1:1:1>>:1>>>::111>1>>>>:<,::1>:::>>>>>>>1>>>>:>,:>>:>>121>>,>>22>11121111311:111111:11::::::11:11:1111:11:::1:1:1:1111:1::::::::::::::::::1::111:::>,,111:22221::>>:,1,2211:11:222::313311111:111:::11:11111:111::1:11:::111::1:::4::::>:>>:::111:::::::::1::::1:::::::::::1:1:11:::::::::::::::1:11:11", ":>>>>:,::,::;:;,:::,::::,,::,:::::::::4:,,:,:::,,:>>::>:>>>1>4>:::::::>:,,2>,::::,t,>221>>:>>>:>::::1,>:>,22::::::::::111:::111111:>:::::::>:1::>>::>:-:::::>::>1::::::::::44:::>1:::::>>,,>:::>:>::>;:::,::>>><:::>>:::>>:>:::1>1>11>::1>>1>::->::::11>::>>,>>>>>>::>>>,<<>::>112>,>>>2>:111>2>1111:1111311:11:::::11111:111:1:::11::1::11111111::::11:::::::::::1:::1:1:::,>>1::2::221:::>12,2:21::3:122333:3:131111111::::::1:111:11111:111:::::11::::::::::::,>:1:>:11::::::::::::::1:::::::1:1::1::1:::::::::::::::::111111", ",>>>>:>::,,,,:,::4:;,,,4:24,:22::::::::,:t:;,::,,>,:;:>>>>1>>::::::::,>:>22>::::::11:,22>:::>=:>,::,2,:>,>11::4::1-:>>1:1::1:1111:>::-:::::>1>>:>>::::>:::>::::::::1:::::::::::1>>::,:>>>1>;::::::>:>::::,:<>:::>:>>>>>:>>>>::::>>>11:>11>:1>::>><>::1111:>,1>:>>>:>>>>>>>>>:>>122,>212>1:>11>>1131111111111:1:::::1::1111:1111111:1::::1:111111:::::1:::::::::::::::::111:1>>>122222211>::1121>22:1::3::22313131111111111::::::111::1111::111::11:11111:::4:4::>:>>:>:::1::1:::::::::::1:::::1::::1::11:::::11::1:1:::::1:11::1", ";:,>::,:>,,,::,:::::,,:,4,:,,,:::,42,:;,4,;:,::,1>>::::,,:1>>::::::::1>::12>>::::>1>,1211>::::;,,,:>>>:>>>1,::4::::::>1:::1:1111>>::=:::::111>:>>>>:::-::>>->::>::>>::::::::*:::>1::::,:>>>::::::::>>>>>>>>;>::>>:>:>5>:1::1::::>:>>>:>>2>>>,>::<::;>>111:>1>>2:1><>>>>>>:>>::>122>>1161>:111>>>11111311311:1:::::::::1111:1111:1::1::1:1:1111111:::1:::::::::::>::2::>>>>:::11>,21>1>11::>1511>2211:21:22211113111131111:::::::1111:1111::11:1::1:111:11::::::::1::::::1::::::::::1:::::1:::::::::1:::1:1::::::1:::1:1::1111::1", ":;::1::>:>,,:;::::,:,,,;,,,,t2t442,4,:::,,:4,,212,,>;:::,:>>:::::::>::>::2,>>>>:>>21:,1,,1:::;,:,,>::::::>>>:4:::::*>23:1::11111>>:::::>::111>:::>:>::>::>::>>:>:>>>::1:::::::::>::;:<::<>>:::;:>:::>->>>,>>::>>:>>>>>1::1>>:::1>1>1>:>>1>>>1><,><::>>>:>>,>>>1><1>>>>>>:>>>::5532>,11311>:>2221111111>1111::1::::::::111:11111:1111:1:1::1111111:::::1:::1::::::4::::2:>:1::1>121111>1::>>>1221222::21112211331111111131:1:::1::1111::1111:111::111::::1::*::::::::::::::::::::11::::::11::11::::1::::::1:::1::::1:::1::1111:1:", ":::,:,>>:,>,:;,,::,,,;;<2,:t:t::,,,,,:;::::::,,:,,2>::::,:,>:::,::>:::1>>12,>,::>,2>::,1,,,::::,221,::,<4>:::4::::::>:::::::1111>>>>:=:->:>1>:::::::::-::>:::::::>>::>1::::::::::>::;::,>>>>:;;:::::>>>>>,>::>>:>>>>>1>:::1:::::11>>>>>,>>1>>>:::::;>>1:1>>>>>,:>1:>1>>:>:>>;:>62t1>11111:1:222133111>11111111::::::::11::11:11::11::1:::1111111:::::1:11:::::::::2::>2:1:::1::121>11>>>:>1>>1152211:1111211111131113113:3:3::111::11:1:1::1:11::1:11::1::::::::1::1::1::::::::::::::::::1:::1::::1::::::::::1::::::::::111111:1", "4:,::::>:,>,,;:,,:,,,t,<4,:42t2t,,,:,:;::,,,:,,>>,,>::::,:,>:::::1:1>>,>::22>,>;,>1>::>,>,,::::>,,2:;:,;::,::::4:1::>:1:1::>1111>>>::::>>>1>1>>::1::::>:>>::1>:>:>>>:>:::::::::::::;;;::<>>>:;:>>>::>>>::,,:::>>>>>>>>>::::::::11:>>>>>>>1>>>,;,=<::>>11>>>>>:,>>1::>>>:::>>:>>5231,>>11>>>>,2611111:1:1111:1::::::::1:1111111:::1:1:::::11111111::::1::::::::1:::::4>>21::1:11121>22>2>>>>11121:21:11:112331113111133113:3::::11:1111111:1::11:::1111::::*::*:::::::1::11::::1:1:::::::::::::1::::1::1:1::::::::11::1::::11::1:", "::>:,,;>:1:1,::t,::,,t,:4::,2t2::,4t,:4:::,,,,:,,22>;:::::,>:::>>:::<>1,>:15>>><:2,:::::>:>>:4::,:2,:>,;4>>>:4:::::::>1:1>>:111:>>>:>::::>111>>::11:::>::::::1>:>:>>::1:::::*::::>::;;>>>,:::=:::>>::>>::>5>::::>>>>>>>::>>::::>11::>::>>>>>1,:<::::>>1>>:>>>1,1>>:11:>>:::1::>52,1>11:11>>>1313111111:1131:1:1:::::::111:11:1::11:1:1::111111111:::::::::::::1::>>:::121:::1>1>1>>2t221>:,111111111::11222::313:3111133:1::::1:::1111:111::1:1:1:111:::::::::::::1:::::::::::::::::::::11:::::::::1::::::::::::::1:1:::1:1::11:", "::>:::;>,,,,::,t::,,:2t4t::2:2,:42t2,::::,,4::,,>2,>:;::::>:::::>>::;>21>>1>>>::::,:::;,:::>:;:>:>2,;>::::2:::=4:>::::11>>>:111>>>>:-::>>>111>>>:::1:::-::::-11::::::::::::::::>>>>=;;;><>>::<:>>1=::>>><>>>::::>>>1>,::>::::::>11:>::>>11>,2>>>:>:=>>>>:>>>>12:1::::11>::>>>>>>>1>>:111>:1>111111>:1::11131:1::::::11:1:11::11:1::::::::111111111::1::::::::11::::::>,11>1:>>>11212122><>,2136111:111113:231:333:3111:13:3:::1111111111:1:1:1:1:1:11:1:::*:*:::1::1::11:::1::::::::::::11::::::::::::::::::::1::::::::1:::1:1:1", ";::::::>,,,,:,:,::,;:,:,t4::,t,,:,::,:;;:,,::,1,,2,>:;::::>::1::>>>>>,1,:>>>:>><:,:1:::::::>:;,::,,>:::::,1:::;::>::::>:1>>:111>>>>:->:::1111>:>1>1:::::::::-11:::::1::1-:::::::>>:;;;<>,:>>::=>>>:>>>>><>>::::::>>>>>,<:>:::::>:1:>:::::,>>2>;:::::<>>>>>>:1,:,1:::1:1:>:>::>>111:>1:11>>>>1111111111:11311:11::::::1111:1:111:111:1::::111111:11:::1::::1::1::::::::>1>>>::1:1211112,>::>21631212::1113113111::2131313333::::1:1111111:11:1::11:1111::::::::::1:::::1::::::::::::::::113:::::::::1::1:1:::::1::::::::::::111:1", "::>::::>,,::;:,:;,,:,,,:,::22t2>42t:,:;;:;:::,2,,1,>:;::::>>:::::>:;:,,2>,>>>>:>22:::::::::>:;:>>>>,::<,,>>::*;::::>:::11:::11>1>>::::>:1:11>>:1:1>:::::::::1:1::::1::::1:::*::::::>;;::::>>::::>>>:<::<>>>:::::>>>>1,:::::::::>11:1::>1>>>>>::<,>>::>>11>,:11,:>>:>1::<:::1<:>611>>::11>>>>1111111:>1>1111::1::::::1:11:1111::::1:1:::::11111111:::::::::::::1:4::::,1>>>>:1:1111>222,>:>>>13111221::11:311313::1131111:313::11111111:11:11:11::11:::1::::*::::::11:::::::::::::::::::::1::::::::::::::::1::::11:1::::1::1:::11", ":::::1::>>>>:,:,,:t;:,:,,::,,22,2:t:2::::::>,,21,1,1:::::,:2::::>1::::>,,21::,:>2,::,,::>:::::,::>,2:,::::2::::;::::11:>>:>:>1::::>->>>>>111:::>:11:1::1:::::::::::::::::::::4;>::>>;:::>:>>::::>->>:>>>:1::;::::1>>>><;:::>:::>1::1:::>>>>>>>:,:>>4:>>>>11:111>:::11::>::>>>>>>>1:1>111>>>:1111>1>:11:1131:::1::::::11:111111:11::1:::::11111111:::::1::1:::1:::::::1:>1::::1>11>113211>>>1113111:::1:11131:3333113:3111111::::111111:11:1:1::11:11::1::::::::::1:::::::::::::::::::::::3::::1:::::::::::::::::::::::1:::1::111", ";::>:::::1>>::,,::,,,,:;;,:,t32::::t:::4:;>,,,2:>>>::::,::,::::::>:::>>>:12,:::,:,>:,,,,2:::;:>>:,>>1,:,,,2:4:::::::1111>>>:111:::>>:>>>:>11>::11:11:::-::::::::1::1:::1::::::;::::,;::::>>:::::>>>:::>-::>>::::>>>>>><;:>>::::>1::>:>:>>:>5>>:<:>>:4>11:>1:11>>1::11::>::>,>>>>111>::111:1:1111>>11:1:1111:1::::::::1:11:11:111111:::::::1111:11::::::::::::::1:1::::1:11::1:>>11112,1,>:>>11111112111:11133:11:3:3331111111:111:111::1:1111:1:11::1:::::::*:::1:::1:::1:1::::::::::::::1::::1:::::::::1:::::1::::::::1::1::1:1", "::::::::>,>,:,:,:::,22:::2:,2t1:::t22::,,<<:,,:,21,,:::::,,2::::::>::>>>::,,,::,,,::11:>1:::;:>:>1>,,::,>,2,4::::::1>1>>>>>:11>>::::::>>>>1>:111:1:::::::::::1:::::::::::::::4:::>::::>::>>::>>:=>:-:>1:;:>>:<::::>>>><:::>::::::::::>:::>>,,><,:1>::>>>:1:121>:>:>>>::>>>::>:>>>1>>:>11111::111111:111111:111:::::::11:1::11::1:1:1::1::1111:111:::::1::::::::1:::::1:1:::::1:11112222>:::111311:111::11211:31111133:1111:1:::1:111:11:1::1:1:1:111:::::::::::::::::::::::::::::::::::::1::::1::::::::1:1:::1:1:::1:::1:::::::1", ":::>:::::,:>:,:,,:::2t:::4:,232::::22,:,,::,,,,,2>2,:;>:::::::::::::;:,>:::::,;>,2,,1,>:::::::>:>:,:t,:,,>1::::4:1:>>1>>:>>:11>>::::::>>1>11::::>:1::::::::::1:11:::::1:::::::4:::>>:>>:::>>>:::>>:1:>:-::<>>;:<::>>>::::>:::>:::1:::>:>:>1>>>,>:>:::>>>1::161>:::>>1>:>:>:>>:>121>>>:11:11:11:1:111:1:1111:11:1::::1111::1::11:1:111:::::1:111:11:::::::::::::::::::::1:1::>:111111322:::1:11111111:::11131313111:133:1111::::1:::11:111:111:1:1::11::1::*::::::::1:1::::::::1:::::1:1::11:::::::::::::1:1::::11:::1::::::11::1", ":::,1::::,,,,::t;:;,,,24::,2:t2,4:,22,4,<,,,,>>>11,1::>:::>>:::::>::::>>:::,>,<>:21>12:::>::::::>,,:2:,,>>1::4:::::1>>:>1:>>1>>>>->::>>>11>1::1:::1>:::::::::1:::::11:::::::::;;::>,<:>::>>>:::;::::>:::;:>5<:>>::>>>>::::::::::::::>::>:>,,,,<><::::>>>>>>1111>>>>>>>>:>>>>>::111:>>>>>:11:1111111::::1111:11:::*:::11::1:11:1::1:1:::::111111111:::::::1:::::::::-::::1:>:::11111222,:::111111111:::1112211313111133:2:13:::::::::1:111:1:::1::1111::::::4:::::::::1:::::::::::::1::1:::1::1::::1::::11:1:::::::::1::::11::::1", ":::11,:,>>::,::t:,:::,t:::::>22,::::2,:,:,,,,>511,,6:::>:>>>::::>:>:,,>:::::::::,,,>2:>:;>1::::,>,,:,:::>>:::4::::>11>:>1:>1>1>:::>:::>11>11::::>>>1:::-:::::1:1::::::1:::1::=;;::>>=::>>:>>:::::::::>::::>1:;:>:>:>>>:::::::::>:1::>:::>>>>:>::::>::>>>>1,1111>>>>>1>>>:>>>>:>11>1>>1>>:1:11111111111:111111:1:::::::1:1:1::11:1:1::1:1:11:::1111::::::::::::::1:::::1111:::1:1>1>12221:::111111111:1:1123113231113311:311:1::1111:::::1:11:::::11::1:1::::*::::::::::::::::::::::::1:::1:::::::::::::::::::::::1::::1:::1::11:", "::::1:>:,,:,::12,::::,,4:,::222,::,,2:,:,<,,,>>12>>1:::1::>>:::::1:::,>::>,>::::,,,,1:::>>,:;::2>,1>:,:,,:::4:4:>>11>1:>>>>>>>>:::>:>::>111::::1:>>11::::::::11:::-:::1:1:::<:;=::>>:<:::11>,:,;:::>:>:::::>>;::>>::<>::>>::::::1::1:::>:>>>:,:<:<>::111>1131>1>>1>11>>>>>>::::51>>>1>1>1:11111111111::11111::1::*::111::1:1::111::1:1:::1:11111111::::::::::::::::::1>11>::::>>1111222>::111111221::111:23112121111113313:1:::11111:11::1111:::11:::1::::::4::::::1:::::1:::::::::::::::::::::::::::::::::::::1::::11::11:::1::", ">::,1:>::2:,:::,::::;,,4;::2:t222:,2224,>>5,,,5221>,::>>>>:,>;;::>:;<>,:::>:>:::>>>,1:::;:::::,22,,>,:;:,>:::4:::>1:>>::>::>>>:::::::>>>11111:>>>>1>1::-:::::1:11:11::::::1::;:::::>:=::1:,>,::;:>::::>::::>>;:>>:>>>>><::>>::>>1:::>1::>>>>>><;:>>=:>1>>11131>>1>>>>>>:;:>>:::11>>>>>>11:1:1111111:::111111:1:::::::111:11:1111:1111::::11:1111111::::::::::::::::::::>>>::::>>1>>2>2>>:::111112221:::122113331111313113:3:::::11:11:11::11:1:1:1:1:1::::::::*:::::1::::1::::1:1:::::::::::::1:::::::::1:::1:::1:1:::::::::::::", ">::>>:>:,,:>:;>,:::::,24:::,,2t:::::3,:4,,,,,,,22>>,:;:>>:>>::::>>:::>>>>>><:::>>>>5>::::::::>2:2::,,:4,11:::44:::1::11::1:11::::->>:::>>111>:>>11:1:::-:::::11::::11:::::1:::::>;:>::::,,,:,;:::>::::,:>>>>:::>1>>1:>>:::>-::>>1:::>>:::>>1>>:<:>>=:>>:111111>>>1:>>::::::>:::11:1:::11::1:11:11111:11:1111:::::::::1:1:::1:11111:1:::::1:1111:1111::1:::::::::::::::111:::::1:1:111111:::>:111311::::111311311111333113111:::1:111:1:11:111:::1::1:1::::::::::::>>::::>::>>::>>:::::-1::::::1:::::::::::::::::1:::::::1:::::::", ">::>>::::,:>:<,,,,::::2:4::,:222:,,22,4:,,t,,2221>>1:::>:>1>:;;::::::>>>:>>:<:;>>5>>>:::;::4:>,:::2,,::421:::::4:::::1:::1::11:::::>::::>111>>>>:::11::::::::1:11::::::11:::::*::::::;;:;,,::,::::::::>::<>>:::>::>::>5:>>>>>>>>:1:>>>->>>>>:>::-5<::>111:1111:::1:11>>>::>::::1:1:11:1111111:1>111::1:1111:11:1:*::::1::11:1:1:111:::::::11111111::::1::::::::::::::1::1::::111:113121>:::>1111131:::11131311311113111111311::11::11:11:1111::11:::::1:::::::*:::::::::>::::>:>>>::1:::1::::::::::::::::::::::1::::11::::::11:1", ">:>:>:>::,>>:::,,:;,:,,4::,,:22::::::,,:,,,:,>,,1,,2:::::>1><::;:>:::5>::>::::::5>>>>::;:::4::,,:22::::::::44::::::1111::11::11::::::::::11>>:>>11:1::::::1::1:1:1:1:11:::::::::;:::<;::::,:::::::::><>,:<>>:>:>>>>1>>5:>->>>>>>:1::>>:>>>:>::::;><=:>>>:1:11>>>:>:>>>:::::::::>11::1::11:>11:11111:::1:1111::::::::1:11:1111:111::1::::::11:11111:::::::::::::::::::11::::::1111:12221>::>>1>111311:1111111113111133111:1111:::11:1:1111:11:::::1:1:11:11::::::::::::::>>::->>:>>:::::::::::::::::::*::::::::::::::::::::::::::", ">>>>>>>:::>:;<,,,::::::;::42:22::::22,,4,:>:>>112>>>:4::::1:::::::::<>>::>>::<>:::>:::::::;;:,,,::22:::,>2::4:::::1::1:::1:::::1:::::-::111>>>>>:1111::-::::::1:::::11::1:::*::*::>::;;:::2>1::>:::::::::>>:>>:>>:>:<>>>>>>>>>:>:1::1>->::>>>::::<>::>1:1:131>>>::1:1>>::::1:>>11:1:>::11>>>:1:1111:1:::1:111::::::::1::1::1111:11:1:::::::1111:11:1::1::::::::::::::11:1:::11111>121211:::1>>111111:::11331113111133111:1111::1::::1111:1::1:111:::::::::::::*::::::::::>::>>::>::::::>:1::::::::::::::::1:::1:::::::::::1:::::", ">:>>,>>:>>::;:,,,,:::::::::,22,2:::,2,44:,::>1>>1>>,;;:>::1>:::<:>::>,>>;:::::>>>:>>:>:::<;:<>5>2,2,,::,>>:4:::4::1:11:1:1:11:::::::::::111>:-1>:1:::::*::::1::11:::111::1:::::::>>::;:::,:,,:::=:::>::>>><>>::>>>>:::>>>::>>>::::>->>:>:>>1>::>:>,;;>2>>>1131>>;:>1,1>:1:::::11>>1>>>>1:1:>11>11111::111:11:::::*::::11::111:11:1:1:::::::11:11111::::1::::::::::::::1:1:::::112>>1111>:::11:>11:1111::11133113111331111131:::1:1:1:::::1:1:1:1:::1::::::::*:::::::::::>:>->>:>:1:::::1:::::::::::::*:::::::::::::::::::1:::1:1", ">>>11:::,,>:;:,,,::::,,:::,,:22::::,22:::,::>>>111>>::>>:>>>=:::::::<>>:::::::>>>>::::>:>>;:>>:::,:::444:>4:*4::::1:::1:1:::1:1:::::-:::111>>>>>1:1::::::::::1:1:1:11::::::::::*::>>;;:;:::::::::::=;::::>,,>><>>>>><>>>>:>>>::>::::>>->:>1>>>:><>:;:21>>>533>>>:::>1>>:>:>::::1>>11:1:>1111>1:11111:1:::1111:::*::1:1:1111:111:1:1:::::::1:111:1311::::::::::::::::::1::1:::1:12,1111>::::>1>>1311::11:1111113111111111131111::1:1:111111111:1:1::11::::::::::*:;::>:>::>>>>>>>::::::::::1::::::::::::::::::11:::::::::::::::::", ">>>>2>:>>,>:;::>,>:::;,::,,:2>::::::t:::<,::>>>>12>>4:::::>::;:;::;::>::;:::::::>>::::><>>;:>>>::,::::::2::::::::::1:11:1:111:1:::>:1:->111>>:>>:1:1::::-::1::1:1:1::1::::1::4:::::,<:::::::::::::::::::;>:>>>:>1>>::>1>::->>>:>>::::1>>>>1>::::;><;;,>>>5161>>>::>>>>,:>>>::1:>1111>>:1>:>>>>:1:11:::1:1111::::::::1::111111:11::111:::::11111:311::::::::::::::::::::::::1::111111211>::>>>>>11111:11:131111131113111113111::11:111::11:11:1:1:::::::::1:::4:*:>::>::1>>>::>:>::::::1::::::::*:::::::::::::::::::::::::::11:::", ">>5>,>:>>,>><>>>>,::::,:::,,:12,2::,22:4,,:::>>>1,>>:::::>>:;::::>:::>>:;::>::::>-1:>>:::::;<>>>:2:::,4,2:::4:::::1::1::::1:1:::-1::::::>>>>>>>>:11:::::::::1:11:1:1:::::::::::*;;,,:;;::::,,::::::::>:::><>:>:>>::>:::>>:::-:>:>:::>1::>>>>:::::><;:,>>>>111>>>;;>>1,,>>>>:1::111>11>>1>:>>1>1:::1:1::1:111::::::4:::1:1:1::1111::::::::11:1111111:::1::1::::::::::::::1::::::1611>,11>:::>1>111111:1111111131111111111111311:1111:11:111:::111::1:1:1:::::::::=:>>:>::->>>>>>:::::1:::::::::::*::::::::::::1::::::::::::::::::", ">>5>>::>,,>>::<;:>:;>,:::222:22:::2:,:::,,:::,>>>>>::::::>>:::::>:::>>>:;<:::::>>>>>:>>>::::>::>:2::4:,,1:::4:::::1::1::::1:1:1::::::=::>>::::111:1:1::*::::::111:1:1:::1::::::*::1::;;,<::>>>:>:::::>::>::>><:>::>>::>>::::::::>::::1:::1::::11::::->>>>>11111>:::>>1,>>>>>:>>>>1111>>>>>>>>11:1::1::1:11111:1::4*:::11:11:1:111::1::::::1111111111:::::::::::::::::1::1::1::11211>2>>>>::>1113311:::111111111331133111311111:1:1:111:1:11:11::1:1:111:::::::::4::::>:::::::,::::::::::1:1:::::::::::::::::1:::::::::::::::::1:", ">>>>5::>>,>,:,,:>>:;>,,;4,222:::::::,:4::,:;:>>,>>>>=::::<>:=>::>>::>,:;<:>>:::>>>>-::::::=:::>>:::,::4:12:::4:::::::1:1:11:1:::::::::::>::::::::::::::*:::::11::1:::::::::::::::;,,::;:>:>:>>1:;::::::>:::<>>:::>1>>>1>::::::>::::::1:::111::::;::=:>>>>>>111,>:::>>>>>>>>>:>>>11112>2,:1>>1>:1:111:::::111::1::::4:11:11111:11111:::1:1::1:1111111:::1::::*::::::::::::1:111:1111>11>>>::>>1113131:1:11111131111131111113111::1:1:11:1111::11:::::::1111:::::::::>:>:::::::::,:1::1:::::11::::::::::::1::::::::::::::::::::1::", ">>>:>:::,>:,:;:::>:<<,,;:24,,,,,::::,>:;:,:::>:>>::>::>>:;>:=:::>::=>>::::>>;::,>:>>:::::::>>:>,::4::4:21::444:::::1:::1:::111::::::=:-1>::>::1::1::1:::-::1:11:1::1::::::::*::*:;:,;;;::>>>>:>::::::>>><:::>,<<:>>>>>>5:::::::::::::::::1:11>:1:>::111::>>111>>>:>:>>,:><>::>>211111>1:1>>1>1>>1:1:::11:1111:::::*::11::1111::111111::1::11:111111::::::::::::::::::1:::::::111151>211>>:>>111613111:1::1111111113131111311:1:1:11:11::1:1::11::::1111:::::::::4:::>>:>::::::::::::::::::1:::::::::::::::::::::::::::::::1::1::", ">:::>:::>::1:,:;:>::::::4,,,,,,:1:::2,4:;,4::>>,1:::::::>;:>:::::>::<>:;::>:::>,>:::<>:::<:>>>>>,,::::4,::::4:::111::1:::::111::*:::;=::>:->::1:::1:::::::1::11:1:::1:::1:1:::::>:::,4;,:>>>>:::;::::>:>>::<,,::>:>>>:<>::::::::::::::::::11:1:::>:::>11>:>>1>>>:>:>1,,>:>>::>>61111>111:>>>>1>1:111::1::111::::::::::1:111:1:111111:11::11:11111111::::::::::*:::::::::11:::1:112112,1>:>>>>1331111:11::13311111111131111311:::1:1:11:1111::1:1:11:1:1:1::::::*:4::::>:::::>,::-:::::::::1:::::::::::::1::::::::::::::::::::::1", "::>>5::::::::<::<::::><;:::,:2,,::::>:::::;,::,>>>:::::::::::;::::::<>:;::>>::>,:::>>;:::<:<::,,:,,4:;:,::::*::::11::1::::1:11::::::::::>1::::>>:111:::*:::::111::::::::::1::4::::>,;;:<->>>>>>::>:>:::>>::<55>:>::1>>>>>::::::>:::::::::1111:::>:;:::111>>115>>::::,,>>:>>>::>11112151>>>:>1>>>::1::1:1::111:::::4:::1::111111:11:11::1:::11:11111::::1:::::::::::::::11:1:11:1111>1611::>>11313111:11:111331311111131111111:::::::11111::1:::1::1::111:::::::*:4::::,::::,,,,:1::::::::11:::::::::::::::::::::::::::::::1::::1", "::::1::::,,:::;;:,:<:>:::,2,t,221:::>:4::;,;;:::>>>:::::::::;::::>::,::::>>::>>>>::>:::::::>,>>,,,2,:;:,1::*:::11:1::1:1:::1::1:::::-:::::::::>>:11::::::::::111:::11::1::::4::4>>>:<:=<<>:>>><::-:>::::>:::><><:>:>>>>1>::::::::::::::::111::1:><::::1:>1>>1>>>::::22>>>:5>::>511111>1>>:111>>>11::::1:1111::::::::::11111111:11:1:::1:1:1111113111:::::::::::::::::::::1:::111,11>2111::5>1311311::11:1111111111311111313111:1:111:1111111:11111:1:1::1:::::::4:::::>,::::::>:1:::::1:::1::1::::::::::::1::::::::::::::::::11:", "::::>::>::,<;:<:::>>:<>;:::t22221:::>:44,;:::,::>>:-:=:::::::::::>;:::;:<>>>=>>>:::>>:::>:;>:,,>:,:;,::;:::::*::1:1:::1::1:1:1:::*:*::::>1>:>:>>::1::::::::11111:::::::1:::::44:>>:<<==>>:><>:;::=->:>::>::=:<<::>1>>>>1::::::->:::1::::>111:1::<>>:1:>>>11>1>>>:::>12>>::::::>,1111>>1>::1:11>>:11:1::111111::::::*:::::1111::1111::1:::1:11:11113:1:::1:1:::::::::::::1:::1::111151211:>>11131133:::111111113111111111331:1:::1:1:1111111:1:1:1111::::1:::::::4:::,:,::,,::2::::::::::111::::::::1:::::1:::::::::::::::::1111:", ":::>>>:::,:,:;:;:::>;>>;4::::t:::1::2::2,;:;::::::>1::::::::::::::::,::::>>>:5>>:::>:::::::>::>,:>,:,::,:::*:::11:1::1:1:111::::::::-:::>>>:::>>:1::1::::::1:1::::1:::::::::*::4:::::;:-<::>::::=:::>:::>>::>><::::1>:11:::::>>>:::::::::111:::1,>>:-:>>>1>>>>:>:::>>1>>:>:>:>>11111:>>>>:::>1>>:11:1::1:111::::::::::1:1:111111:::11:11:::11111111:::::::1::::::::::1:::1:::1:1>>1111>>>:>>11111111:1111111131111131311113111::1:1111:111111:11::1:11::1::::::::4::>::::::::::::1::::1::11:1:1::1:1::::::::1::::::::::::1:1::::", "::>>1>::>>,<=:::::,,4::4::,,,22,:2::,,4:><<<<:>::>>:=:>>:::::-1:::::>:::>>::>>>:::::::::::;:::,1>:,::::,:::4:4>1:::::111::1::::::::*:::::1::::>>>>>>>:-::::11::1::1::::::1:1:*4::::::4:4<::><::;:=::::::>:>:>>>:>:>1>>>>>:::>>-::::::::::11>:>>>>>;:->>>>1>1>>>>::>1>1::;:1::>>>1111::::::1::11::111::111111:1::::::::1::11111111::111:::1:11:111111:::::1:::::::::::::11:1::111:111111:>::>11113111:11111311111111311111311111:1:1::1111111111:::11:1:11:1:::::4::::>>:>::::>>::1::::1::::::::::::::::::11:::1::::::::::::11:11", ":-::>>>>:>>::::::,,::1::t,,:,2,,::,,,:;,<::::<>::>>-::::::::::::::::>;;::::>;5><::,:;::::;,,>111>>>>:>:2::::4::1:::::1:::11:1:1::::::4::111:::1>>>->>::::11:::11:1::::::::::::::::::::4:5>:>>:::::::::::>:::>>>::::>>>>1>:::>>1>::1::::11>11>::>>::;::>>>1>>11>>::,,2,:,::>>:::>1111:111::11111::1111:1:111111:1::*:::1:111111111::1::1::::1111111111::::::11:::::1::::::::::::1:111:11:>:>>111131:::1111:1113111113111131311:::::111111111::1111:1:1::111::1:::::::>>>>::>,:,>::::::::1::2::::::1:::::::::::::::::::::::::1:1::", "::::>>>>>>>:;::;,,,4:::::t422:222::,,:;:><<:::,>::>::::::::1::::::;>>:::>-:>>>>::,:::::::;:::,>>>>:::,:2,4::=::11::1:::1:1::::::::::::::1:11:>>>>>>>>>:::::1:1:1:1:::::::::1:*:*:::::4:4<>:>>>::::::::::>>>::>::::>>::1:1:::>>>::11::::-:111:::1>>::::>1>1>>11>>::>>,1>,:>1:::>>111:1:111:1::111:11:1:1:11111:1:1:*::::1111111111:111::::::111111131:::::11:1::::::::::::1::1:1:111111::>:>>1111311::11:111113131113131113111::1:11:11111111111::11::1:111:::::::4:::>>,>>::>:::::::::::1::11:1::1::1:::::1::::1:::1:::::1:11:::", "::::>>:::>::<;::4,:,:,:44,:2:2:22:::,::::;;:;:>>>>>:-:>:::::::::::;:>;::>::<<>>:::,::::::;:>:21>>:::42>,:::4:;:::::::1:::::11::::::::::::1:::>1>:>:>:>-=-:1::11:::::::::::::::::::1:::4:>>>>>>:::=:::::1::>:>>:::::>>:11:::::>>::::1:::::>11::>1>>>::->1>1>:11::::::>,::>>>>::>,1111:1111:1:1::11111::11111111:11::::::11111111111:11::11::111111111:::::::1::::::::::1:::11:::111111111>>>1>1111311:11::1133111111111131331:::::11:1:1111:1:111111::111:1:1:::::4::>::::::>::,::::::::1::11:::::::::::::::11::::::::1:1:::1:1::", "::::>>>:::>>::::,2::4,::t2:2:2:2,:,:,;;>;;:;>;>>>:::::>:::::::::>::>>;<>:::<:>>::::::;:::;,::111>::::,,>:::44:::1::::::::::1:::1:::::::::1:::>1:::::::->::1::>1:1::1:::::::::::4:>,:4:4:>>>:1:>:::=::::::>>::::::>:>>:>11-:::>>:1:11::::>>11::1:><::;:>1>1>:11>:::::,,:,>>>,>>>>11:11:1:::111:11:11::1:11:111:1::::::::::11111311::1:::1:11:11111111:::::1::::::::1::1:::1::::1:1311111:>:>>1111131::111111311111111133113311:::11:1:1:111:11111:11:11:::11:1:1:::::::>:,::,:,::::::::::1:2:::::::1::::::::::::1:::::::::::1:1::", ">->>>>:>>>>:::<=::,,::,:4,,,,,1:,::,>;:::>:>::>>>>::;:>:::1:-::1:>::5>::::::<>>>:,:::::::;:::1112:4:4,,>::4::4:>::::1111:1:::::::::::*::>11::>>11:1:>::>::1::>:::::::::::::14:4::>:::4:::>:>>:::::::::>::>::>>>:::>>:>>>>1::::::::11:::::>>11::1>::;<:>111>:>111>:::,,,,>>1,:>>>1:111:1:1::::11:11111:11::11111:11::::11:1:11:131111:1:::11111111113::::1::::::::1:11:::::1::1:::1111111>:>>:11111::111:11133111111111113111::::111:111111:1:11:1:::::1111:1::::4::4::::,:,:,:,>::::::::::2:2::::1::::::::1:::1:1:::1:1::1::::::", ">-1>>>:>::>::>>:,2t;,::42,,:,,,::,:,>:::;<:,>:>::::::5>::1::::>::::<:::>:::::>>>::,::::::::::1:>::4:4,2,:::**::>::1::11::::1:::1:::*:*::1>>::>1::1>:::::::1::>:1::::::::1::::*:*:,,::4:4:>:>>>:::::::;:::>>>>>>:,:1>>>>>1:::::::::1::1:1:1>1:1>>>:;;;:>>1::::11:>:::>,>>>>,,::>>1111:::1:::1::1::1::::1:1:11111:::::::1111111111111:1:1::::111111311:::::1:::::::11:::1::11:11:11111111:>:1:111131:::1::111331111311313131131::::1::1::11:11111111:11:1::11:::::4::4:,:,::,:,,:>:1::::::::2::::::::::::::::1:::::::::::::1::1:::", ":>>>::::::<:>::<>,;::,,;,,,:,,:,,4:::;,:>:,:1::1>>>::>1>::1:-:>::::>>=-::>:>>>>:::::::::;;::11::::>:::::::4::::>:::::::1:1:::1::::::::::>>1::>1::1>::::::::1>:1:::::::::::::::4::>,::4::::>>>>:::=:::::::>>>>>::::1>>>1:>::::>>:1:11:1:-:1:11::>>:>;::>>:1>:>1>11::;>>;>>>1,>>>>11111:11:::::1:11111:1:1:1111:1::::::::111111:11111:1:::1:1111111111:::1:::::::::::1:1::::1::11:1111111::::1111111:::311111131311311111313311::::::1::11111:1:111:1:1::11:::::::::::,:,::,:,::>:::::::::::22::::1::1::::::::1:1:::::1::::::1:::1", ":,1:>::::::::::>::::<,;:;,,>,,:>,:::::,:::>,>:1::11-:11:>>::::::>:::>::::::>>5>:,:>>:::::4::>>:::>:;;>::1::4:4:>:::::::1:::1:1:1::::::::::1:::11>>>>:::::::11::1::1:::::::::::*44>>:;:4;::1,>>>:::::::>>>>>>>>>:::1>111>1:::1::::11::1::>>>1>>::>>1-:::11::::111>:::>>:>1:111::11111::1:::::::111::111:111:1111:1:::::::111111111:111:::1:1111113131:::::1:::::::::::11:::1:11:11111113>>:>1>11111:::11111113313111111313131:::::11:111111:11:1::1:1:1:1::::::::;4::,::,:>>:1:1:::::1::1::1:::::::::::::1::1:1::::::::::::1:1::1", "::,:>>;:>>>>>::<:::>>:,::2,,221>::::::,;:<<>>>:>:::::11:::::::::>>:::::::>;;>>>:::::;:::::1:>>1::>:,;,::::::4::>:::::::1:::::::::::*4:::::11::1::>>>:::::::1::1:::1:::1::11:::::::::::::::1:1>>>::::::>>>>::>>>::11:1:1::::::1:::::111:::>11>::>>>>:::::>11:111>1:>:>>:>::11:::111:11:::::1::1:1:1111:111:1:11111:::::1111111:11111::11::::111111131::*1::::::11:1::::::::1::11::11:111>::>>>>>113:::1::1113111111113113111:1::::11::1111:1:111:11:11::1:11::1::::::,::,,:::1:::::::::::::2::::::::::::::::1::1:::::::::1:::::::", ":>>,>;::551>:::<:::><:,;,,,:,1,,:1:,;,:;<:>>>>:1::::>11::::::>:>:-::>><<:>;:<>>::::::=:::;>::1:::::::>,::::4*::>::::1:::::::1:::::::4::1::31:111::::1:::::::::1::::::::::1:::::::::::::;:>,,:>11:::::;:>>>,>>>><1::1::111::::1:::::11::::>111::>::>>::::>>>>1:>>>:::>,>>::1:1::11::1::::1:::::::11111::1111111111:::::11:1:111111::::1131:1:11311311:1::1::1::1:::1::1::::::1:1::1:11111::>>111111:::3111:1131311113111111111::4:1111111111::1111111:1:::::::::::;:::::,>::1>::::::::::1::1:::::::::::::::1::::::::::::::::1::::", ":>1,>>:>>1>>::::::::<::<;,::,>:>:1:2::;:::<>,:::>>:::>1::1::-::::::>:>>:>>;:>>>>:>:::::::::>1::::,:;;::,::4:4::>::::::11:::::::::::4::::111:>>::::::::::-:1::::::::1::::::1::::*4,::4::::>>:1::::::::::>>>>,>,>::::::11:1:::::1::*:1:1::>1111:>:::>>:::>1:>>11:>1>::>>::::1::::111111:1:1::1::111:1:11:1:::1:11:1::::::::1111:111111111::1:111111111::::::::::1::::::1:1111::::111:1111>::>1111111:::::3111331111:11331111111::::1:11111:1:11::1111::::::11::::::4::,:::,:>:>::::::::1::::1:::::1::::::::::11::::::::::::11:1:1:", ";>1,>>::>>>>::::::;>,,,4;t::>>>,:::,2:,4>:>>1:::>>:::11::>::::::>::>>>:;;<;::>:::>>:::::4:>::,:::::;;;:::::;:4::::::1::1::-::::::::*:::1111:1:>:1:::1::-::1:::::::1::::::1::::::4,::::::::>,>>::::=:::>:>>,>>1>>:::1111::::::1::::1::1:1:>>1>1>>>>>>>::>>>>:1:1:,>:;:11:1:>1:::111:1::1:::1::::1::11::111::111111:::::11:1111::1:1::1:::::111111111111*::::::1:1:1:::1::1:1::11::1::13>>::>1>1111:::1:11111331311:1123111111:::2:1::1111:11111:111::1::1::1::::::4::>:>>::>:1::1:::::1:::111:::::::::::::::1::::::::::1::1::1:::", ":>1,,:::>>,::=<<:::>:::,,::,1,:>:::,:;,:>-:>:111>:::::::>1:::::>>:::>:::>>:;<::>:>>:>:::::::>:,::,:;;::,::;;::::::::::::::::::::::::4::1111::1:>::::1:::::1:::>:1:::::::::1::::::::::::4:,>21>::>::>,>>>>,>>>5>::1:1:11:1:::1::::::1::::->>>1>>->>>>>:>>11>1111:,>:::1:::::>1::11111::1:::::::1:111:11:1::111111:::::::::111111:1:11::1:::111:111111:::::::::::1:1*::::1111:::1:::111111::>1111111:::1:1211311311:11113113113::21:1:1:221:11111::11::::111::::::::::>>:::>1:::::1::1:::::1:1::::::::::::::1::::11:::1::::::::::1", ":,,12:>:,>>>=<:>>;:::::;,:,:1>:::::,::::::>11>>:1:::11::::::::>:::<>><:<>>:<>>::<>:>::=>;:::>,:::,:;;:>>::4::::>1::11::1:**::1::::*:44:1111::>::1:::>:::::::->1>1:::::::::::::::4:>>:,::,,,11>::>:;:>:>>,,>>>>5>::::1111:::::1:::::1::11::>>1>>>>>>-:::>11::11:11>1:11::::1:1::111:1:1111:::1:1111:11::11::1111:11:*:::::111111:111:::::1:1111111111::::11:::::::1::::::11::::1111113311>>>,111>:3::1::1313131133111113223111:::1::32:2:11:11:11:1:::::::1:::::::4:;:::,::::::1::::1:::::1:1::::1:::::::::1::1::1:::::::1:1:1:1:", "4:1,,::>>>>:::,:>;:,::,;;,::>,>::,:2:;;,:>>>:::11::::11::::1-:>::::>>>:;>>::;>>:::>::::::;::>>:::,::::>>::::44:>::::1::::::::1::::::::::111::>:11:::1::-::1:::>>:::::1:1:::1:::*:>>:::4:;>>>,>>:>;::>:>:,,>,1>>>::::1:1:1:::1::::::1:::1:>1>1>>>>>>:::1111::11:1:11:1:::11:11::11:11::1:11::11:1:11111:1:::1111111::::::11:111111::::::::1:11:111111::::::1::1:::::::1:::1:1:1:1:::11111>>>1>111::::111121131111111111111131::1111:222221111111:1:::1::1:11::::::4:;>;:,:::>:::::::::::::::1::::::::::::::::::::::::::::::1:::::", "::1>1:::>::>>-<>>>;::::;>5>>>>>:::,>:::4,,::::1>>>::>2>>::::::1::11::::::><:::>>>:>:<::::=::,>,:,::;;,:,:;:4::4>1:::1::1:::-::::::=:-::1111::1::1:::111:::1::::1::::::::::::>::*=>,:;:;;:>>1>>:::::::::1>1:,>1>>::::>>>>>>->:1:::-:1::1:::1:11:212::::>>2>>:11>2>>>>:>::::>>1>>>>>>>:>111::1::1:111111:::1:1111::1:::::11:1111111::1:::::1111::1111::::::::1::1::1:::>:::1>>:11:>1:22>1:::>11::11:::3::3213311111:111311111:::111:11111111:11:1:1::1::::::1::::::::*::::::::::1::>:>>:::::>>>:::::::::::::::::::::::::::::1:1:1:", ":::11:::>:>>::>><>::<>><<:>>>:>>:::>::24::2,:>::<>::>1:::::*:::1::::1::::>:>;:>><:>:>>::<:::,,,>::;:;:>>::::4::>1:>>1:::1-:::1::::;:::::111:::11::1:11>:::::::1:::1:::1::::::::::>>::::;:>>11::::::>::::>>,,1:>>:>>>>>>>>>:>:11:::::::11::1113:11::::;:>>1:>>1>>>>>::>5>:1>>,,>,>>1>1:1>11:111:::11111:1:11:1111::::::::11111111111:::1::::111111111::::::1111::::::::::>>1>:::11:12111:::>111111:::1311231131133::1111111111:::11:121111:1:111111:1:1::1::1::::::::::1::<::>:::::::::::::>>:::::::1::::::::::::::::1::::111111:", "::111:::>>:>>:>><>><<>>::>::>>16:::>2:,,4,:,>:::;:::11>::::::::::::1::::>:::;<>>:>::>:::::::,,,::,:;:,:,:::;::*1:1>11:::::1-:::::::=::::111:1:::1:::1:1:::::::1:::1::::1:::1>:::;:>::::;::>>:::::;:::::>>2>1>>>:>>::>>1>1>>-1:1::>>11::1:::11:112:::>;:>21>>>1:>>>>::>><>>>>11>,1>>1>>>11::1::11:11111:111111111:::::::11111:111111::::11::111111111:::::::1:1:::::::::1>1>>::11:1>23>2>:1>>1111:::111212131111111:11111113:1::11::221111::11:1::11::::11:::::::::::1::::::>::::::=1:::::::>::>:1::::::1:::::::::*:::::::::11:11", "4:>:>:=::>>>::<:>>>>><>:;>:>>>152>:1,4::,:,:::::;;;:11>::::*:::::-::::1::>:::;>>>::>::::=:::::,::,:;;::,:::;:::11:>111::::::::1::::==::::11::11:>11:1:::-:1::1:::1:1::::::::::1-;::::::;:>111>::::::::>>>2,>211>:>::>->>11>>:::::-:11::1:::13:111:,:::;:1>1>>1>>>:::>>>>>>>>,,,,1>1:1>111:::111:111111::11111111:::*:::1111:111::11::::11::111111:1:::::11:::11::::1-:::>1>>:::1:1>231,>:::>1:111:1:::111113111311:331331111:::11:121222111111111:::11::::1:1::::*:*:1:1::>::::::::::::::::>1:::::::::::::::::::::::::::1:111:::", "::1:>::;::>:>:::::><><::>>:>>>1>,:,,:;:::,;::,:>:;::>1>::::::::::::>:>>:::::::>>><:>::::4::::,:,:::::::2:::::::11::11:1-:::::11::::;-1:1:11:1:1:1>::1::-::1::::1::::::::-:1:1-:::;>:>>;;:>>11>>::;:::::>>,,,22,>-1>:>>>>>>::>>>>::::::11::11111::::,>::>>>1>>1>>>>>>:>>>>>>>>>>51>>:>1>11:11:11111:1111111111111:::::::11111111:1111:::::::1111::111*::::1::11:::1:::::::1>::1::1113322>::1:>>1111:11:11211111131121321:111:1::11:1222321::1111::1:1:1:1::::::1:*:*:::1:::::::>:<:>;:::::::1:1::::::1::::::::::1::::::1:1:::1::1", "::11>:;:>>>:::::::>:>>::>>>>>>5>:::1,:;<:4,:::1>,:::11>:::::::1::::>:1>:<>::;:>,>::;:::::::::::,t:::;:::::;:;::1:11:111::-:::::::=;;::::1::1>>:11:1:1:::::::1::::::::::11:1:1:::=::;::;::<2>>1:::::::::>>1,>,22::>>>>>>>5>>:>>>>:::1::11:::1111:11:::::>111::1>:>>:>:>>:>:>5>>>51>>1>1121:::1:11111111::111111:1::::::1111:1111::111::1:::111131:11::::::::::::::-:::::::11:::11111111>>::>1>1>11:::111121113311311122331131:::11::22:2211111111::1:::::1111:::::::::::::>:>::<:::>::::>::::>::::11:::::1:1::::::::11:1:111:11::", "::1::;;,>::>::::::::<<:<>>>:>>>>:,:,:4;:,;t,,>>:::::12>:::::1::1:--1:>::>>>::>>:<:::::::::::,::,,::::::::::;:::::11::1::::::::::::;;-1::1111>:>>1>:11::::::::::::::::::1:::::::::;>:,:>::>2>>>:::;::::::>,>,>62::>>>>>111>>:>>>>:::1:111:::1311::1:1,:::>1111:>:>>->:>>::>>>>::>1>11>1111::11:1:11:111:1111111111::::::11111:111:111:11:1::1111::11::::11:::::::::::::::1:1:::>>11>216:::>1>1:>21::1:111212:1231131321313:11:::12::2:222311111111:1::::1:1::::::::::1:::::::::::<::::::>:::11::>::::::::::1::::::::::1::111:1:1:", ":::>:>4:;:>::::::::<>>:>><:>>>>:,:,:::;,:::,:,>:>,::1>::::::1:::>>>>:>:::>::;>>::>::<:<:::::::,,,,<;4,,:>:;;:::::1::11::::::::1::::;:::1::1:>:111>>:1:::::::1:::::::::::::::::::4;>>:<::>>1>:1>::::::::1>1,>226>:>:>>>>>1>>:>>>>:::1:::1::11111::1::::::>111>>>::>>:>>>:=>>>>51>,111:>111:::1::1:11:11:111111111::::::1:111:1:111111:::1:::111::111::::::::::::::::1:::1:11::>>1>11111>::11>11>2::111:112132233131312::1311:1:11:1:222:211:1111:1::1::::11:::::::::*:::1::::::<::::::::>1:1:::>::1::::1::::::::::::::::::1:1:1::", ":>::>>;:::>>::::::>::::,<:>>>>>::,>:::;<>::>>:>::>;,11::::*::::::::::>::>>:<<>,>::::::::::::;,:t>::4::,::::::::1::1:1::::::::11::::;::::1>>>>>>111:11:::::-::1::::::::::::1::1::::1:::::>>1>>>:::;::>:,>>>>,,21>:>>>>>>>1>::>>>>:::1:111::111111>>>:::::>1>1,:>::::1:1>>::>>>5>>,1211:111:::1::::11:11:111111111:1:*::1111111111111::::1::1111111:1::::::1::::::-:>::::::1>::>>>111111>>>,,111>21::1111122222332312211111:1:::22:12222221111111:::1:1:::1:::::::4*:::::::::>::::::::::,,:>>>>:::1:::::::::::1:::::::1:::11:::111", "::::>:;><:>>::::>:,:,,;:>::>:,>>:1>::;;;,:>:::11:>:>1:::1::::11::::>:>>>>>>::::>::::,:::44:,,;:2>,,:4,,,:::-::::::1::11::::1:1::;::;:::>11>>>>111>1:::::::1::::::::::::::::::::::::1::::>>,>>:::>:::>::,>2>,>,>::>>,15>>11>:>>:>:::::1:1:::11111>>>:,:::>21,,::::::::::>>:>,1>>>,1211:11:::::111111111::1111111111:::::11:1111:11:111:::1::11:111111:::::::::::::1>>::::>>1>:>>1111>112>>>1>1:111::1111223221222311213111111:::211222222111111111:1::::1:11::::::::4,::12:::>::::::::4,::>1:::::::::::1:::::1:::::::::::::1::::1", ":>::::=,>>>>::::>::::,;:<<:::>,>:>:,::;,<::::1::::::1::::4:::::>::::>>>>:>>::::,::,::::4::::,:,2,:::::,:1:::::::1::1:::1:::1:11:;::;::11111>>>111:11>:::::::::::::::::::1:>:::11:;::>::=>1,>>>:::::>>,>>,,>>>,>>>,>>>>>>11>:>>>>:::1:1:1:::11111>>::<,:<>11>>>:>:1::::>>>>,26>>>>1,22>1111>::::1:11111::1111111111::::1111:11111111:::1::::111:1::1:::1::::::::::::-::1:>>>>::>>>1:1122>:>111>11::11:2122322312113323113311:::22112222221111111:1::11::::1:::::::::4:::22:::,::::::::,2:>1::::1::::::1:::::1::::::::1:1::1:1111:", ":>>1>;::<>>>:<>>>::;:<:::>>,>>>>>:,::::;<<::::1:::::1>:1::::::::::=::>::>>>:;<:<::;:::::::::,,,:,,:::::,:::::-:1:1::111:::1::1:::::;::::111>>>>1:1:1>:::1-:::::1::::1::::>1>:11::;::,:>::>1>>::::::>>:>>262>>1,>,,>,1>>>11>>>>>:::::1:1:::::1111>>,:,:::,31>>>:::::::11>>>,22,>>1,,22>:21>:>1:::111111:11113111111:::::1::111:1::1:11:::::111111:1:::::11:1:::::::::*::1>:>>:>>1111111>>>>,11311::11111122221113233113113:1::1221121:222111:1111111::11::11:::::4::4::::::::::,,:>::::>::::>1:>:1::::::1:::1:::::::::::111::::11", ":>>>>-:>:<<>::<>>::<::<:<>:,>>>>:>12:4;<:<::>:1>>:;::,::::::::>::=<::>>>:>:>=>,>::::::::4:::4:,:2::::::,:::::*:11::1111::11:::1:::::::::1111:>1>>>1>>:::1::1:>:::::1::::>>>>:>>>::<>>,::>>1>>>>:>:::>>>1,2,>,,>>>5:,1>>>>>>>>11:::::11:::::1111::>,<>>;:111:>::::::::1>>>>>,65>52,1,2>>21::>1>:::11111:11113311111:::::11:111111::::::1:1:1111111:::::::::1::::::::::>>::>>>::>111>1112>>1>11111::::11111131112223323113231::122112211111111:11:111:1::1:11:::::::*::::1:::::::::2:::4>::::::::1:::::::1::::::::::::1:1::1:::11:", ";::>>>:>::>>::>,:;:::,;,::,>,>><>,2:::<:::::::>>,:::>>:1::4:::1::>::>:>:>>>:;>,>::::::::::::2,:,:2:4:,:::::::::1:1:1:11::11::1::::=::::1:11:>>:1>>>:1:1--:::1>>::1::::1:>:1::>::::>>>>::>>>,>>>>>::::>1>222>2>>:>>>>1>>>1>>>>11>::::1:1::::11:11>::<<:;:1111>>::::>>:>>:>>,2>1>>1>11,>:21:::>>:111111::11111111111:::::::1:1:11:1111::::1:::111111:::::::::1:::::::->>:1::1>::>,11,1>12>:111111>:::1111:1112:111211:11:1111::211:321111111:1111:::11:::1:1:11::::::::::::;::,::,::::::>:::111::::::::::::::::::::::::1:1:111::::", ">:>>>:::>>>>==,>::;:,:;:,,>,>,>>:,,::::::<:<:1>>::;,1:::::::::1:::><>:><>>::<,,>>::,:4::,4:,4,,:,::::,::::*::::111:1:1::::1:::::::-::::>1:1>1:>>>::>1::-:::>>:>::1:1::::1:>:>:>::=>>>>::1>>,>>:>:::::>>>22,,,>>>>>5>5:>>>1>>>1111:::::111:::::1:>:,:::::11111:::::>>:>>>:::,1>>>2,1>>>:2111>11:::1:111:1:113131:1:::*:11:111111::1111:1:1:111131111::::::1:1:::::::::1:1>>1:::>12,,1111>:1111111::1::211212211112211111:31::::1:111311:111111:1:111:1:::11::::::::::1::1,::,:,::::::::>:>::::>>:::::::1::::1::::::::11:1:11:::11", ">::>>:>>>:::::::::<>,>:,<,>>,::>,:,,,;=<::::::>>>:::>:1:>:4::::1:>,>>>:>>>>>;:>::,::::::,::,:,,:,:::,;::1::::::::1:::1:1:::1:11::>:::>>11>1>1>:>>>>:1:::-:::1>>:1:::::1:::>>::>::=:>>>::>,>,>:::::::>>>>1,22,>>>5>>>>11:55>>>>1>:::1111:::1:1111>:,,:::::111>:1:::>>::>>:::>>11>221,,::111>::>:11111111::111111::1::::::11:11111:::11::1::1::311111:::::::::::::::::::1:>>1>:>,12,>11,1>11111111:::1111111131111:323:11:31:::1:211111111111111:11:1111:::1111::1:*4::::::,:::::::::::>::>:1:::>>:::::::1:::::::::11:::1::111::::", ">:::>:>>:::::<>>>;<::>::,,>,,::>>:,>::::;,:::>>>1*::::::::;::::1:<>>>>>::5;>;:>>,,::>:=::=:::>:>::;;,,:,,:::::::1::::1:::11:1:::::::>>>11>11>>::1:::1:>:-:::>>>>:1::::1:1:1::1:::::1>:::;,,,:>:::->>>>>:>5112>>:>>>>:>>>>11>>>>>:::1:11:>::>1>>>>:>,><::>11::>:::11::>>:>::>>>>>111111:111:::111:1:11::1111111111:::::::1:11:11:::111::::1::113113:::::1::1:::::::::::::111::1111311161>:,1>>>>1::1:111111111111222::11111::1:132222:2121111:111:11111::::1::::::=:;:<:::1>::>=>::::::::,:::,,::1:::::::1:11:::::::::1:1111::::1", "::1>::,,:>>:=:::<;;;<::,,2>,,>::,,,>:44:,;:,>111:::1111:::;:::1:::<5>>>:>>>:;;>::,>>::>>>::>>:::2:::4,:,::::*::1:11::::::::1::1:::-:-::11>11>>:11:1:1:-:>::>:::>::1::::::11::::::4::>>::,,,,,>1::1>>>>>:51>>5>>:>>5>>>>>>>1>:>>>:1-:1:11:::>111>1::><>:<>111>1>>:>:>>>>>>::>>:>>>:111::3111::1::11:1111:1111131:::::::::1:1::1111:1::::1::1:1111311::::1:1111:::-1::::::1:::::11611131>>:>1>>>>1:::1111111311111223121311::::1:32:222221:1111::112::11::1111::::::=;<>::::::::1::::::::,:::,:::::::11:1::11::::1:1:11:1:::1111::", "::>>><>>>:>:::::,;4:::::>,:>2,,::,,,:::::::,>>>>14::11>:::=:::::::<>>>::>>:::>:>>,>>>::>>;;:::>>2:,::,,,2::4::::11:::::11:111:1::::::::11>1>>>111:>:::::-:::>:>>:::::::1111:::::::>>>::::2,>>1::::::>>>:>1>>>>>:>15>>>::>>>>::1>:::::1:::::>>1>>1>:,<>>:>211>>::>>1:>>>>1:>>:11>>2111:11111:1::111:1:111111111111::::::11::1:111111:1::1::11:11113:::::1:::::::::::::::::1>::1:11111116>>>21:1>1:::1:111111311113122:13111:::1:1:21122211111:11:1111:1::1::::::::=::::>>:::>>==1:4::,::::::,:::::::1::1::::::1:11::::::::1::::1:", ":1>::::>:>>::=:>;;;<,:::>>:,2,>::,::::::4,::>>22:::1:1>::4::::1:::>>:<::>::<;>5>:>>:>::>>:;::::::>>::,,::::::::111:1:::::111:::::::::::>1>1>:>>11:>11:::::::>>:::1::::::1::::1:::::>,>::,>:2:11:::::>>>:56>11>>:>11>>>::>>>>:11:::::::11:>>>11111:::>>>>1211>:1>::1>:>>>::1::1:::2111113311::11:11::111:11111311::::::11:11:111:::11::1:1:::111111:::::::1:1:::::>:*::1::1>:::111111165::>15111>1::1:11111111111231:::32::::11::12112211111:::111:1:111::11:::::::=;>>:<:::::>>1:::::::,:,:22:1::::::::11::::::::::::1111:1::1:1", ":>1::;:::>;:;;;>;,:<::4,:2::,2:::1,,;:;,:,::11>21:::::1>::::::::::>:>::>::<::<>>>>>>::::>:;:::>>:>,:42:,::::4::1:::11:1:::1:1:::::=::::11>11::1111::::::::::::::::::1::::11:::1::;,,,,::2:,,,:::::->>1>1>>>>1>::>>211>>>>>>>:>1:::::1:1:11::>1111::>>>><:111::11>>1>:1:1:::::1::>2>111111111:11::1:::11111111311::::::1111:1:1111:1::11:1:::11:1:1:::::1:11:1::1:::::::1>1>:::111>1111>>:>1111>1:::1:11111331111:11111121:::11:1:331111111111:1::11:11::1:1::::::;4:>>>>::>>:::=:::::::::1:2:2:::::1::::::::1::::::::11::::::1::", ":11:::>>>>:::;;:;,,:,::4,::,,,1:::1::;:;<:1:1:1>1:::1::::::::::>::>>>:>>>>><<>>:::>>>>:>:;;>>::>>:>:>:,,:2:4:::111:::1:::111:1:1::::::::>>1>::>11:::1:::-:::::::::::1::::1::11:::,:,,,;:,2222::::>>>>>>>:>>>1>:::52>>1>>>1>>:>>>1:::::::::::11111:::>>>>11111:1::111:::::1::::1:21:211:131::11111111:1:11111111::::*:::11::1:11::11:::1:::11:1:111::::11:1:11:::::::::::1>>>::>:>136151=>>>11>11:::::1111131111111111112::::1:1::11:11::1121:11:1:1:111:1111::::;;4:>>>>:::::::::::::::::4:::::1:::::::::1:::1:::::1:::1:11::1::", ":>1::;:::>>>:;>::,:;;:;,,::,2>,:1:,:;;::4::,,>>>1::1:1::::4::::>:>>,,:>>>>>::>:>::>>>::::4::::>>1:,::2,,2>:::::11:::1:::::111:::::::::::>>1>>::11:::::::>::::1:1:1:1:::::11::11:::::,:4::2,,:>:::::>>:>::>111>>:>>25>>1>>1>::1>::1::>>>>>>::>11>1>:>:>>:>>1:1::11::1::1::::1::1:>>:211:1111:11:1:11::1:1:1111111:::::::1:111111111111:11:1:11:11:1::::::11:1:::::::::>:11>>::1>1>111111:,,>1>>11:::11311111311111311:32::::,222::311111111111:11:1:1:11::1111::4::::>>:>::>>::::::::::,,1::2::1:1::1:11:1:1:1::::::::111:::11:1:", ">1>:;::,::><<<>:::;::;::,::,2>::::1,::;:,,:,:>1>>>::1111::::>:>>>>>25>::::>:=:>:>>>>>>::::;>:>>>,,::4::,:::::::1:1:::::::1:11:11::-:::::1>1>>::1111:::1::::::::::11::11::::::::::::,,:::2,:,>>::-::>>::::>111>::>>11>>11111::>>:1:::::>>1:::1>>1::>:>>>:>11:>:11::1::::1:::1>11:,112111111:::111:1::11:1111111111::::::1:111:11:1::1:11:1::1111111:::::1:11:1::::::::>>>1>>:::111>1165>>>1>1>>>>::::1111111111111111112:::,:1::2:111:1:1:1111111:11:11:::1::1:::4:4:::::::>::::::::::<:;1:::21:11:11:::::1:1:1:1:::11:11:1::::::", ">>>::>::>::::>,:::::::4,,,>>2>:::,21:::<:,:>:>11>::11111>::::::::,:26>:::>>:::1>::1>>:::::;>:>:>:2:::::t:::**::111::11:::1:11::::>::::::>:1>>>>>11:1:::*:::::::::1111:::1:1::1::::>>:1:::2:,>>:::::>>>>>:>111>>:>,11>>1>111>>>>::::::::1>:::1>1>>:::>:::>1111111:1::>11:>::>>1,>2,>112>111::1111111:11:1111111111:::::1111:1111111111::::1:1111::1::::::1::1::::::-:1:::11::::11311161>:>>>11>>>1:::11:11111131111112211:::222221112:1::1:111:1:11:1::1:1:1111:::44::::::::>::;:::::t::::122:2::11:11::1111:1::1:::1:11::1::::::", ">>::::::=:::<,<>:<::>,::::>>>::::,1::4<::>>:>,>>1:::11:1:::11:1::>>,,>:::>><::>>1>:>:::::::>:1>:::2:::::1::::::1:1:::::::::1:1:1:>-::::>1>1>1>>11:::1:::::::::1:::::::1::11:11:::4:>:,:::2:,>>::::>:>>>>>>1>>>>:>>>>>>>1>>>:>->>::::::::1:::>11>>>>:::>::>:11:11:1:::::1>>:>>,1,,21>12>1111:111::::111::11:11::1:::::::1:1:::1:::1::1:111:1:1111:11:::11:1::1:::::::::1:1:11:1:1111161>:>111111>1:::1111111311111111221::::22::2:12:113::111::1112111111:1::11:::::4::1::::>::::::::4:::1::2:2::1::11::1:::::1:11::::1:1:::1:::1", ">1>:::>::::::>:>>:,:>::::,2,11>:>,1:::;<:,:>>22>:1::11::::::::::>:>,5>:>:><:=:1>::::>:::::::>>1:4:,::;:2:::::::111::1::::1::::::>:->:::>1>>>>>>11:::::-:::::1:1:::1::11:1::::1:::::,t,:::21,1:>::::>1>>>>>>>>>>::>>:>>1>>1>>>>>>1:::::::>:-:>11>>>><:>>:>1111>11:11::1:1::::>>>,,>1121>111:::111::1111::111:1111:::*:::1:11111111111:1:1:111111::11::::::1:1::::::::::1:11:::::111113>1:>>1>11>11::1:1111113331111111311::::12:2:222::1:11111:221:1:1::1::11>>::4:::::::::>:::::::,::::::::::::::::1:::11::11::::::::::11::1:1::", ":,>>::::::::::,:>:;:::;:,2,>11:::,2,:;,:;:>>,>21:::::1:>1-::::::::,,>>:>:>:::11>1:1:1:1:>::>>1>1,::2,:,t:::::*:1:1:::1::::11111:>>:::>>>>>>>>>111:1:1::::-:::::::11:1:1:1::11::::,::2,::,2:,12:::<:>1>1>>>>1,>>;:>>>>>111>>:>>1>:::::::1>>::>11>>>1>>=:::>1:1:11:1::::1:::::>:>>12>1>>>11:1:111:11:11111111::1111::::1::11:1:1111::1:::1:11::111:11:::::1::11::::1:::::::::::1116116311:>>11111>:::111111111111111:12211:::::42::2:221:1:111:1:2121:11:11:1:>>:4:4:::::1:::>::::4:4::::2:::2112:1::1:1:11:::1:1:::1111::1::::::1", ">::1::::::>:::>::<:>,::,:21::22::22,:;::,:,,122>:::>11:::::::::::>52>>>>::>::>>1::>1>:::::>>>>,2:::4,::21::::*:11:1:11:::111:1::>:-::::>>>>>>>111::1::::::-:::::::111::::1:::1::42:,t2,;,:,:,,::>>>-1>>1>>>5>>::::>>>>>>>1:::>1>::::::1:>-::111>>1>>->>:::11::111:1:>:>>::::::>>,111>1121111:111:111:11::1::1:311:::::11111111111:11::11:1111:11:1:::::1:::1::::::::1:::::::1:111133111:>:>>11111::::111111111:111::12114::21:1::22:3:::2121111:111111::1:::1:::=:::::1::::>:>:::::4::::::::::::::1:11:::::::1:::::1::1:::1::::1", ">::::::::::>;:>;::;<:,;,,11>>>>::11::<:::,:::>1>1::>1::::::::>::>>>2>>>>:,>::>11::111::1>:;>:,,>:2:,t::11::**::::1:1111::::1:1:1>>:::>:>>>>>>>1111::::::::::1::::1:1:1:1::::11:::::2:,,,1,>,21>:>>>>>>>1>>56>>,>:>>>>11::66::>1>1::::::1>>>:111>>>>>>:>:>111111::11:::>>>:::>>>>>1>11>>>11:::11:1::11111:111:1111::*::11:1111:11:1:1111:::11111111::::1::1:::1:::11-:1:1111::1111111111>>>>>1>>1:::11111131311::1111132::::211112::2:11:222111:1:1:::12211:1::*::::::1>::::::::::::,:::4:2:2:1111::11:1:1::::11:1::1::1::::1::::", ":>::::=::::,:::<>:>>::::,,,>>1,:,:,:<:,;;,,:111::::>1>:::::::>::>>12>,><:::::>,1::>>:::::::::>>,:::t:4:2:1:::::::1:::1::111:1:::>1->>>:>1>>>>51111::::::::::::::::11:::11::11::*:::::2,,:,,,,:::>>>>>>11>>11125,5>>>>6>>>1>::>>>1::::::1>>>=>11>>11>>:>::111:11:1:1:::>>>>:::>::12>11:>111::11:1:1:1::1::1::11111:::::111111:11111111:111:1111:1:::::::1:11:-1::::::::::1:::1111111111>:>>>>1>1111:1:11111131111311:3211::::12:2:2113::3232:1::111:1:2221:1::::::::::1>::>:>>::::::::,:::::21:::11:11:11:::1::1::::::1:1:::11::1", ">:::::::::::;:,>>>:<,;:,:21,>>1:::::,;:>;::>:111:::::>>:::>>::::>:>,5>>>:::::,11>:1>>:::::;>>>>>:::::,:11::*:::11:1:1:::::11:::::-::->:>1>>:>>6111:::::*::::::11:11::::::::1:1::4::2:::,211:21::->>>::>>>>>1,2>,5>>>>>1>>>>><>>>::::::::>:::>11>>>1>>:>::1111>1>:11:::>1>1>:>:::>21>1>>>111::111:11111::111::11111::::1111111:111111::::11:111:11::::::1::11:::::::::1:11:::111111>1111>>>>>>>>>1:::11111311111:1111111::::1:2::12:111:3:3:::1:1:312::2111::::*:*:::::1:;>::::::::::::::::::1:::11::1:::1::::1::1::::::::1::::::", ">>::->:::::-:>>>:><><::,:,,>>::>>1::::::4:,:,11>:::::>:>::>:::1::1>5>>>>>>>>:>,,,:>>>::::->1:>,,>>>::,,,:::444:111::1:::::11:1:1:::::;::1>1::111121:>:::->::-:::111:::::::::1:::::11:::222>:2::,>>>>>:::::>,5>>>5>>><11><11><>1>1:::::1::::11:1::111>>>>:>11>>1>>:1>::>111>:>>>:>51>1>>>1111111:1::1111::::::111::::>::1>131,,,211111:1111:11:111:1:::::111::::::::>:>:1>1::>>11311>2>>>1:>>11>>:1:11:11111111111111111::::1:11:11:11111111:11:1111::1111:1:1:::::::::1::1::::::;:,::::,::,,:2:::2:11:::1::1::1::::1:::1:1::1:11", ">:>:::>>:>:::::::<;:::<>>>,>::>::11>4,,:,:::,,1>::=>:>:>::>:::::-1>1>>>>>::<:<>1,>>>>::::::>::>,>:::4:,,,::::::>1:1:111::1::11::::=:=:::>>11>>1112>>:::-::::>::::1:::::11:::1:::*::11:::,1>:t::::::>>:1>:>>,15><51>>111>>11>:>>:::::111:::::11:11:1:>:<::51:1>11>>1>::>>1>>:>1>::11>1111111::111:11111:1111111111::::>1>>,2111121111:::11::11:111::::::::111:1::::->>::>::::>:>131112,>>1>>111>>1:::1111111111111111:111::1::11:1111>1111111:111:1:1:::::::1::::>>:::1::::::::::::::::::>:,:::2:2:::111:1:>::11::::::::11::1:::1", "::>>:::>>>::;::::>;<::>>>:>1:>:::1::::;:4;::,1,:::=>>>:>:=:::::::>>15>>;>:>>;:>>>:>>:>>::::>>>,1>::::t,2::::::::1:1:111::11:::::::-:;:::1>11:>1>11>>>:::::::::>::11:::::1::::1:::::1,,4>,,:,2::,:::>>:>>:>:>51>:>>>><1>1>11>>>1>11::::11:::::1111:1:><:::>1>1>>>>>,>:::1>>::>>>:>11>>>>>111::111111:111::1:1:1:1::=:>>>1>1112611111:1:11:11:11111::::::::1::::::>:::>:111:::>:1111,115>>>5111:>111:1111113111111:11:1:1::::11:111::1>11111:::11111111::1:1:::*::::::::::::::::::::::;::,:::,:2:1:11:11:1>>>>::::1::1:::::11::111", "::>:::>::>>::<::>>::>:;,,>1>>>:::>>:4:::::::,1>:::>>>>>::::::::::>51>,>>><>:;>>,>>::>:>:-::>>,,,<>:<:4,,:::::::::::::1::::1:::11:::::::>1>11:1>:51>>>:::=:::::>::11:1:::::::::::::11:,:>::,,2::::::>>:>>;,>5151:>>>1><>>>5>1<:1>:::::11:::::111:::1:>::::>>:11>11,>>:>11:>>>>>>>>>1>1111111::11111:1111:1::111111:::>>>1>>1122611:11:1:11:11:1111:1:::111111:1::>:::>:>>::::>>1111>122::>>1>111111::1111131111111111111:*1:1::1111:1>1>1:111111:11:::1111:1:::::2,,,:1::::::::::;:;::::::,:,:1:::::::1:1:>>>::1:1:::1:1:11::::::", "1:1:::>>:>>:::::::::::;:,>2::::4:>,::4::;:;::,>>:;>>>>:>::::::::::>1>>>>;,:,;>,1,:>:>>>>1>:>::,,;:::,<:21::44:::::11:11::1::1::1::::=::11>11:>1>>2>:>::::::::1:::111:::1::::::::;>,>:,:::2:,1>::-::>::1>;>:,1>>:<1:1>:>116>::<11::::111::::::111111:1:>::>>>21>112>>>>>>>11>>>>:>>>1>>>>111::1:111:111:1:1:111111:::>>111>1116311:111:1111:11:11:1:::::::1:1::::::::::1:1::::111>11262>:>15>11>3:1::11111131111111:1311:::11:1:11:111>11111::1:>11:1:>:1:11:::*::::::,:::::>>:>:::;::::::::2:::::::1:1:1:>>11::::1::1:::::1::11:", "1:::::>>>>>::;:::>:>,::,,,:::::::::::::;:::,,:>>>:>:>>:>=::::::::::5>>>>::::;>,>>:::<>>::>>>:>,,;<;,4,:t1:::::::1:::111::::1:1:1::::::::1:11>:>1>5>::>>::-:::::11:::::::1:::::1:;>>1:>>::,2:>:::>>:>1:1>><:>>1>:>>>:>1>>>51>::111::::111::::11:11:1:::,>::>>51>163>>>>>>>>>>>>:>>>>155>>1:1::1:::1:111111111111::1::1>111>1131311111:::1:11::111:1::::::::1:1::::>:::1::1:::>11111>232:,>61111111::::11113111111111111:::::1::111:111:111:111:>>:11:1:1::::1::::::2:,::::::>::::;:::::::,:,:::::::1::::::>>11:1::::1::11:1::::1:", "11::::::>>5:=::>:::,:;:,,,::,,::::2:::::::::>>>>>::>>>:::::::-::::>1>>><>:>:;:>>>::<::::>>:>:>>,><:;,::,::::4:::::1:111:11::::1::::::::11:1>>:1115>:>::::-::::1:11:::::1::::::1*;:,,>,,:,2,:::::>>>>::>,,>:>>>>>>>>>5:>>>1::::11:::111111:::1:11::11:>>>:>>>>11611::>:>>>>>>:>:>>>>>>1>>111::1:11111:11111111111:1::>:>11>1313311:111:11:11::1:11:1:::::1::1:::::::::111:1::>>11>1>,22:,1>1111111:::11:111111111:11111:::::1::1111111:11111:::>:111::1111:::::-:::,,:>::::>1:>>::::::>,:::2:::>>:1::1:::>>::1:1::11::::111::::1:", "::::::::>>>>:>1=;;,::;;,,:,:,:::::::4,::;:::1>>>1->>>:::::::::1:::>>>>>>:,::;:>2,>:>:>>>:::::>,,>::,,4,,1:*:::::1:1:111:::11:1:1:::4::::1:1>>>:1>>>>>:>::>:::1::::1::::11:::::::;:>>:1:,:11:,>:::-:>::2,,>>,:>>>:>>>>>>>>>>>:>11:1:11111::::1111:::111>>:>1>>>1231:::>>>>>>>>>>->>1>11>>111::1:111:111:11111111:1:=::1:>1>1111111111:::11:11:111:1:::::::::1:::::>-::>:1:::11>1131112,::11>1111111:1:111111111111111311::::11::11:::1111111111:111::1::1111::::::,::>>>:::->>:::::::::::,,2:2:>:::1::1::>:1:1:1:11:1::::::1:1::1", ":>>:::>>>>1>::><::,,:;::,,:,:>::::2:4::;;::,>,::>:>>>:::=::::::::>>,>:>::::,;:,,>:::>>>:::::::,,:,::,::,1::4::::::1:111:::11:1:1::::::::>:11:::11:1::::::::::::111::::::::::::::;::1:,::>,,>,>:::::>:::1><:>>>:>:::>>:1>>>>>:>1111::11111:1:111:>;>>>>:>:>1>1111311>>->>1>>>>:>:>11>1111111>11:1:111:11111111111:::::1:11>>111311111::::1:11:111::::::::::1:::::::-::>1:>>:11116111321>>11,111111:::::11111111111111311:::1:1:11::1:1111:11::11111::11::111:::4:>>::>>>>::<:>>;>:;:::4::::221::1:::1:22:::2:11:::::1:::1:11:1:::", ":>::::>>>5>>::::,::,:;:>::::>,:>:::::;,;:<:>,>>:::>::>>::::::::::>1,,,:::,::::,,1:>::>>::::::,:2,,,;:<,21:::*::1::1:111:::::::1::::-:::::11>1:1:11::1:::::=:::::1:::::1:::::::::;::>:::;,>,>>>::::>>>:>15>1>:>:>>>:1>>11511>:>>1:::::1111:::111:>>><>>>>>>11>11>111>>>>11>>>>>><>>111>:1111>:11::11::11::11111:11:::>1:>1>>1>>3111111:1::11111:1:::::::::1:1:11::>>::>:1>:>>111111132>:>>1>11111:::::11311311311111311::::111:1:1:1111:111111::::1>:1>1>1::1::::-:>>>>>>:>:::>>;:;:;:4::4,,:::::1::::::::>::::1:1::1::::::::::11", ">>::::>>>>>><>::,;::>:::::,1,>::::>:::;,;;:,,>>2->>>>>>:::::::>::,>,>>>,>::,<::,1:>:::::::::,,,;:2,:<:>1:1::4:::::::131:1::1::::::::41::>111::111>:1::::-:::::::::::::::::::::::=<:>:,,,>>:>1>:::1>>>:>>5>>>>1>>:1>5>>1111><::11:1::11111:::1111:>>><>>::>111>>111>>>:>15>>>>>>>>>>>1111111:::1:11:::11:11113111:::::1:111>>>11311111:11:1:1::1111::*::1::::::::>::::>::>>:>1>11>1111>:5>1>11111::1::11131311331111111:::::1::1:1:111:111111111:>11::11>::::::*:>1>>>->>:::::::=::4::::::22,1:1::::::11::::::11::::::::11:::1:1:", ">>:::>>:>>>-:>:,,:<,>:::::,1>>::::>>4,;:;,:,,>>2::>1>:>:=:::::::;:>>>,>>:>:::::21>:::>>>::,4;,t,:::::<:1:::::::1::1:111:1::1::111>*:::::1>1>11311>:::::4::=:::::::1::::::::::::-;::>:,::>>>11:1::-:>>:>>>>>>>>::>:>1>>1511>:::>>1::111:1::::::11>:>>:5>:-1>>>1>>11>->::>1>>>>>1>>11>:1::11::::1::11:::11:1:11111::-::1:>>1>>>111111:1:11::1111111:1*:::::1::::1:>-:>:::1->:>>111>>11>::>>>>>11111:::1113111111131111111:::1:11::11:11111111:::11:>::1>::1:1::::::>>>>>>>:::::<:::4::::::::21:::1::1::::::,,:1::::1::1:1:::1:11:1", ">>>>:::>>:::::>>,:;::::::422>:::::>::,;:;::>>>>2:::11:>::=::::::::>,>,>>:,>>;::,::::::::::::,,,,,::::;:>::::4::1:*1:11:11::1::::::*:*:::1:1:>>111>>>::::-:-:::::::1::::::::*:1::;:1::>:::>>>>>::::::>:>>>><>>1::>>>111:116>>:1:1::::11111::::111>:>>>>>:::>1:>11>>>>::<11>>>>:1:>>>>>>1111:::1>::11:111111::1111:::-::1:>>>>:1111111:11::11:1:1111::*::1:::1::::::::>>>:>>>11111>11111:>>,1>11111::1:1111111111111:111:::11:11111:11:1:::11:1:11:1:1:111:1::::::>>>>>:>>::::::<:4::::::::>2::11::1::1:::::1:1:1::111:11:::1:1:::", ">>:;::>:>:>::,>,,:::::::::2:>::>>:>:::,4:;:>,>1>:::1:1::::::::>:::>,>>,>:><:::::,:::::::::::,,,,>:::::::::::::::::1:11:::1::::1:::::::::1:>:>:111>>:::::::1:::1:::::::::::::::::;:::1:<:>,>>>:::::::::>>>>51>>1:>>>11>:>161<:::::1:::1111::::111>:>:>>:>>>111>1111>>::>>5>>>:::>>>11>5>>:11:::>>::11::::1:1111::::::111:1>1>:1111:111::::111:111:::::::::1:::::1>:::>>>>:->>11111>111><>>11>>1>1:::1:11331111113311:1:::::1::11:1:1::1111111:11:111:11:::::::::4>>>>>:1>>::::::;::4:::4::>,2::::1::::4:::::1:1:11::1::::111::1::", ">::>:>>>>:<;<:>,,;::::::,::2>::::::::,t;,;>,>>11:::11:::::::>>:::>,>,>,>>>:::;>>,>::::::::::,:,1:,:::;::>::*4:11:*::11:::11:::1:::::::*::::1>::11>>::::*:::::::1:::::1::::::::::;::::>:;:,,:>>::->:>>:>><><1>11::>:11>:>111::::11:1:111:1:1:::11>>>>:>:::>111>>111>::>:>>>>>::><>>115>>>>11:::>>1:::1:111111111::::::1:1>>11:1111111:1:::11:11:11::::::::::::::11::>>:>>::>>111611111::>>2>111131:111131111111111:1::11::11:::11:::1:111111:1::11:11:1::1::1:::*>->>:>>>:>::<;:<:4::4:::::,::1::::1::2:22::::1:1:1::11:1:1:111::", "5:::::>,:,>:>:<,:,:,::4::::,:::1>,::<:::::>,2>>>:::::1::::::>:::::1,>:<,>:>:<;>>>:::::::::::::>:,,,::::>>:::::>1::::11:::1:1::111:*:::::1:111::11:>>::::::-:::>:1:::::::::::::::::::>>,:,,:,1>:>::>>:>>>>>>>1>:>::<61>:>11::::>::1:::111:11:1111:>>::>>::::11>>1111::>>1>>>><>1>>>1115:>>11::>>>:1::111:111111:1:::::::1>11>:1111::::11::1111:1111::::::::::::::>:>:>:>>>:>>11113111:1:>>>111211:111:13311111111111111::::1::111:1:11:1:1111:::1:::11:1:1::::*::>>>>>::>:>::::;::::::4:4::,2:1::1::122::2::11::11:1:1:11:::11111", ">:::::>>>>>>>>,:<:>,:;4>:::,:::::>::::,4;::,2>>>:::::1:1::::1>>:>>,>>:,>>:>>::>>>>:::::::::::::::,>>:;>>>>::=:11>:>:>>:::11:::1:::;:::::1:>111:11:>::::-1::::::::::::1::11:::1::::::,,,:,,,>>>>>:::>1>>><:>>>:::::1111<:11<:::>1>>>::11::11::111>:>:::<<:>>1>>>111111>>>>>>><>>1:12111:1111::1:11:1::11:1:1131::1:::::1>,32,1>1:111:::1::1111::111::::::::::::::>::::>1::::111116611>::>>>111111::111113111111113:11111:::1::1111::1:11:1:11:::11:1::111::::::::>>1:::>>>:::::<:::;::=::::2:::::112::22:::1:1::1111:1:1::1:11111", ">::>:>,>:>:<:<>>:::,,<;>:::2,::::>:2,,,,::,,:>>::4::1:::::::1:>::>1>,:>>><:>::>:<>:::::::::=::>>>,:::;:,,::=;:>1:;>>1>:::1:1:111::;::=:>1>1>>:111:>:::::*:::::::1:::::::::1:::::::::,,:::,>>>>:5:::>-:>5::>>>::>:1:111>:11:::>>:>>:>>:11:1:::11:>:>>::>>:>11>>>11611>>>>>>>>>11>:>22>11:1111:::1111:111:1:1131113:::1:>1223111111::::1:1:1:111111:1:::::::1:1:::::>:>>>>>>>111111111::>>>>111111::311113111111133:11:1:::::1::11:11:111:::1111:111111:::::1::-::>:>>::::11:::::::::::::;4,2,,:,:1::22:2,:1:1:1:::12::1:111:1:111", ":>::<>>>>>:::>,::::>::4>:::,>::>:>:>,,,:::::>>2:>:::>::::::>::1::>,>,<><>::>::><::::>:::::::::>>>,>::<:>>:::;;>>::>>:::::111::1:::=:=::>1>1>>>>:1:>:::::::=:1-:::1:::::::::::::::::>,,,4:,>>>>>>:::>>>>>>>:>>>>>:1>111<>11:::>>>:::-:>11>>::1111>>>>>>>::>>>>>>111>1:>>1111:>>6>:122>111:111::::111:1111:11311111:::::12>61611:111:::11::1:11111:1::::::::111:1:>:>>>:11>>>1131111>>>>>>>>113111111111:13111111111::113:::1:11:111:1:11:1111::11::1::11::1::::::>:>>1::::-:::::::::<:::::2t,:::2::1:,:::::1:1:1::111:1111::1::1:", ">:::;<>>:<:::,,:<:>::::>::11:::::1>>4:,2:,::>222>::>>>1:>:,>:>1>::,>,>>::::::<>>:::::1=::::::1>1>:::;:>>:::=;;>>::>>::::::::111::::=:::>111>1>>:1::1:::::::::::::1::::::1:::::::4::>,>,::,5<>>>>:::>>=>>><::>>->>:1>1>>111:<:>>::::::>:11:1::11:>>>>1<>:->>1>>>11111>:111>>>>>>>:121113::311:11:11:1:111111111111:::1111111111>:111:::::::11111111:::::::1:1::1:>->>1:1>>:1>1131111>>>>>1-111111::11231111111111:11111::::::::1:1::1111::1:11:1:11:1:11::::::::1:::>:::::::::::::;=;:=::4:,:::2:::::::,::::4:1:1111:1::11:1:1111", ">>>:>>:,>>>::>:::,::,;:::::>:::::>>>,:,,,,:::2:2::::>2::::>:>>>>:,>,,>:>>>::::>>::>:>>=>=>:::>1>>,:>::>>>::::::::>1:1::::111:11:::=:->>1::111:>11::>:>:-::-::::::::::::::::::1::::42,,,,>,,;>1>>:::>::>>:>:>>>>->>1>1::111::>>>>::::>>:1>:1>:111>>>>>>><::11>:>13111>::1>>:1>11::>1>11311111::::11:1111:111111111:::>222>1111111111::1::::11:11:11::::::::::1::::->11::1>>1>1113111>>>5>>>>11111:::1121222213:1111111::1:::::1:1:::1:::::111:111:1:111:::::::::::11:>>:::::::>>:::;:;::=:,,::1:::::1:::::::,,>:1:22:::111::1:111", ">>:>>:>:>><::>::;:::::;,::,>>:>::2>4:,,:42:,2:2::::1:>,,>::>>>>::>,>,;::::><:::>>>::::>:::::::,1>>:>::,,:::::::1:11:::::::111:1:::;=>-:>11111:>11::1>>1-:::11::::1:::::::11:::::4::>,,,:>,,>>11>::>1::::::>:>>>>::1>11:>11>:>>1>::::>>:::>:::11:><>>>>>-=>11>>113111>>>51>>:>>:<:1>1131::111::111111:111111113111:::>222,,113111111::::::11:1111111:::::1:11::::::>>111:>>111111111>>>>>>>>16111::111222213333::1111:31::::1:1:111::11111:1:1:::::11:111::>:4::::::::>::>>::::::;:;;:;::::,:11::1:::::::,,:,:11>2222:1:21:1:11:1", ">>:;:>>::>::::::4::,:4:,::,,>:>>:2::4,t:t4::2::21:::::2:>::>:>>>>,2>>::::>>>>::>:>::::=>::::::51>,:>::,,::::-::1111:::::::11::1::::4::::1111>:>>1:1::::::--11:1::1::::::11::1::::::::,,:<::>:>1>:::-::>1::>:>>->:111111><><<:<1::::-11:1:11:>1>>1>>>>><::>111>11131>:>>11>>>>>:::11211111111::1:1111:11:111111111:::>2221>111111111::11::::111:1:1::::::::::1:1::>1::111>11>11111111>:>>>1111111:::1131331:3::13111111::::::1:::::111:1:1111:11:11111:::::::::::>>:>:>:>>:::::>::;:;;::>::1::1:1::1:::122,2>1:1::21:1::21::11::1", ":>:;::::<>>:>,::::::::::::,::::>::24,,,,:42:22,2,:::,,2:::::>>>>;:,>,>::::>>:::,:>:::>:>::::::>>>>:,,:,,>:=:>-:1:1>>::::::1111::::::-:::111:::11:11::::::::::::1:1:1-:::::1::1:::4:>,,;:;,:>111>:>>:>:>>::>:>>:>>>::1::11>>>>>>>>>:>:111::::>:11><:>>>>::>111111311>:>:11>>:161>:21211111311::111::::111311111112:4::,23611111111111:1::1111111:11:::::::::1:::1>>>>:11::>1111111111>>11>11113111::11212113311111111:1:1:::1:1:::1:1:11111111:11:::1:11:::::::::>>>>>>::>:;::::>::;:;;:>:>21:::11:::::1::2:>>11:::1:1::1:1::1111", ":>:4:::::>::,,;;::>>>::,:>,>:,:::::::,t,;,,,2:2,::::,::>:4>:>:1:::1,2:>:::>>::>:>::>::><:::-::>>>>1,>::::::::-11111::::::::11:::::::4:::11111:111:1::::::::::::::1:::-::::::::::4::1>>:;><>>>>1>:1>>::>5>:>>>-:>>:1>>::11>:>111:::-:11>>>::>>>11>>>>>>>:::111>>111111>>>1>>:5>1::,,2221>1111::1111:1:111113111111:4::1123:1111111::1:1::111111:11::::::1::::1:1::>>:>>>:>>13611161>1:>>>16111661:::131:322131112:1:11:::::::1:1:::111:1111111:::111:11>::::::4:::>:>>>::>::>::::::;:;;:,;,t:::1:::::>:2222,:>,>1::2::1::1::::1:1", "::>:;::::><:,>;;;:>>::::::,>::,:::,4,;:;,;:::tt:>:4>22,,>:>:1:>>::>2>>::>::>:::,><::>:::::>>:::>>1,:::,1,::::::>:111::1:1::11:::::4:::::11111::111:1::*:::4:::::11::::1:::::::::4:::>>;:::>>:5>>:=>>11>1>:>>>>->>>>>>::>1>>>::1:1::::11>>>:->>>1>>>>>>>>::>11>>11111>:>1>>::>11>:,1222111111::111:1:11111111111111:::13211111111:111:1:1:1:1111111:::::::1::::::::>::>::>>116111611>>:>6611>13112::1:3:3221111111:111::::::::::::1::::1:1:11::1:::11:1>:::::::::>>>:>>>>>:::::::;:<>,::::;t:1>1:::::::>2,>>:>>:::321:::2::::1111", "::::::;,:::::,:;;::,>::,::,>:,>>::::::,,,;::,22,>:>>2:::>:>:>:>>:>>>>>>:::>>:;;,>::>:>::>1-::=:>>>,::;,2>>:4-::1111:1:111::1111::=::::*:1111:::111::::*:*::::::11::::::::::::1:;::::,::::<>>>5>::::>:>15>;>>>>>>>:>>>:>11>>>:11:::::>>>>>:::>>11>>>>>>>:;::>>>>>>111>->1>>>::11:>,>>11>>1:3:::111:1::111111111:1:::>>212111133:111:::11:1::1111111:::::::::11::1::>:>::>>>1131116111>>>166161611111:2:2221:11:11111111:1:::1:1:::111111111:1:111:11:11::-1:::::::>1:>>::>::::;:;:<:::;:;::t,>:>:::::>>1,,22::>::2:2::2::11::1:1:", ":::::;>:::::>::;:::>:;::;:>,:::>::::,;;;,,:,::,2>::>2,2,:::::>>:;:>>>>,>>:<>>;;><:::<>:::=>::::>:>,:::,>>::4::11::111:11:::::11::::4:::>1::::1111:1::::::4::::::::::::1::1:::1::;::::,;:::>>>>>::=:>>>11><>>>>->>>>>1:111::>:>1:::::>1:>>:>>>>11>>>>>>>>;:>>>>>>>>>1>:>>>>::::>>>,>21>1>11::::12111:11:11111111:114:>21>111:31111:::::11:::1111111::::::::1:1:::::>>>>:>>>111116115>:>>1161111111111:222231111:111:1:11:::::::1:1::11111::1:1111::11:1111:1-*4:::>1>>>::-::::<:::;:<:;::::2:>:>:::::>>>>:1,:>:1,122::222:::1::11", ":>:::::>:::<::::::><>;::>>:2:::,:::42::,4t,,,:2,>:::,,1:>:;::,>:::>,>>>>>>:::::>::<::>:::::::::>>:>>::,,>::::::1:11:1:11:1:11::::::*=::111::1::111:::::::-:::::1:::::::>:>>:::::;;::,:,:<:>5>>>::<:>->11>:::::::>>:>>>111>:::1111:::>>>>>>>-:111>:>>>>>-::>>>1>>:1111::1>>>:>:1>>,221211:1:2::131111:111113111111:411113131111111:1:1111:::1311:111:::::1111::1::>:>>>>->>1111111>>>>>1116111111:121222:13211::111111111:::1:::1::11:11::11:1::11::11::::::::*:::>>>>>>:>>::-::>:;;:;:;:;:,,:,:::1::::>>>11:,::1:12:::2:1::1:::1", ">:::-:>::::::=;:::>:>>:>:,:,:,:,::,::::,:24,,:,:>:::,,,::>,:::,::<>>>>>:>><>:;:>>::::>>:->::::::>>1::,,>1::::::1::111::11::11:1::::::::11:1:::11111:::::-:::::1::::::>>>1::::::;:;:>::::>::>5>>:::::>>16>:>>::::>::>>>>11>-::11:1:::>>:1>>->:>:>>>:1>1>>-:11>>>11111:::>>>1:>:>>>,111111:23::11331111:111111131:2:::131113111311:::::11::::1311111::-::1:1::1:::::>>>>>>1>11111>1>>1:11611111111:::22:2:222111111111111:::::1::111:1:111:1:1111:1111:1:1:1::::::>>>>>:>::>::::<,,:;::;::4:,::>2>::2::11>,21:11:1112::2:11:1::11:", "::>:1::>>::::;::::::<:::::,,::,2::,::::,:,,,t222::>>>:,:::,:::>:::>>>>>><,>>>::=::::>>>:>:::-:::>>>::,:>1::::=::::1:::1::1:111::::;;:::11:::1:111::::::::::::::11:::>>>::::::::;:;:>>>:::::>>>:::::>>>>1>>>>>:-1>>>>>>>>1>>:::11:::::1>1>>:>>>>1>>>>>-::::>::1:11:111::>>>>:::>:>>111>1>:3:2:111131111:1111111111::2:211311111111::11:1::1:1131:11:::::::1::1::::>>:>>>>>>11166>61>::>111111111>:1:12:3222111:111:111:1::::11::1::1::11:111111:11:1:::::::::::::>>>>:>>>:>::><::::::,:::::2:::>>111:2,:112,:211,11:2::2:::1:11:1", "::::::::>::::::::;:::;<>:,:::,:::::44>;,,,,:::t:>::>>::::>:::>>>;::1>::>::,>>::::>>:>>>:>>-:<::>>>>:<:,:::::::::::::::1:::::::::::;::>>1::1:111111::::::::::::1:1:::::::=:>>:::;:;:>>::,:;>5>>:::::>>>:>>>>>:::1:>:>>>>>1>::::1:1::::1::>>>:>1:>>>:>>>::::>:1>>11:11>::>1>>:>:>>>,1111>1:22:221111111111:1111111114::11111111111:1::::1::1:1111:11:1::1:1:1::1::>>>>1>>>1>111111111>:>111111611>:2212222111231:11111111::::1::111::11:1::11::1111::1:11:::-::*:::>>>>>>::>>::>><::,::44:::,:>:>>::11212:,21,22,::1:::::1::::1111", "::::::,>>>::;;::;,:;::;,:>::::1::::;;,;,,,,:::22>>::>>>:::::::>>=:>>1>>::<>>>:;:::>::1:::::::;:,2:,,::>>:::::::::::::1:1::1::1::::4::::1::111:>>1>::::1::-:*:::1::::1::::::::::::::1::::>::,:>>::::>>>>>>>>>>:->::1>>><>>>::>>>>:>:1:>>>>>>::1::1::1>>>>::>>>>:>:>111>:>1>>::>1::>1>6>>>1::1:111111111::::111111::::11>111>111::1:::::1:1::111:111:::::1:11:::1:>>1>1>-1111>1>1511>>:>1>1>11111>:1:113111:131111111111:11:111::111:1:1111:1:1::11:1::::,::::,,:::>>>>>1:::<:;:>=:>::::::::::1:1::::2:2::,111,21::1:11::111:::111", ":1:4;:,,>>>:::::;::::;::>11::::::::;::,:,,::22>,>::::>>:::::>:>:>::>::::::>:::<>>::>::::::::4;:,,,:;:::,1::*4::1:::::11::::::1:::::4:::::::1:>>>11::::::::::::::11::1:::::::::1::::::::1::>>,,>>:::>:>>>:>>>>:>>>:>1>>>1>>::>>>>>:::>1>1>:::>11:11::-:>-::>>1>>>:>61:::>>>>>:1>:>>>11>>>11:1:11111111:11:11111:11:::111111>111111::1::1::1111111111::::::::1:11:->>1>:>>11>111611>>>:>>1>>111>::::11111111113:1:11::::11:::111:::::::11:::1111111:12:22,::::tt:::>::>>>::::>::>:>>::::4:::2:::::2:::2,22,,>>>:21111::1::1:1::::1", ":1>:::,><>::::::;>:,::::>>::::::4:,;,<:,:42::t2>>:>>>:::::::>>:>>=>>1::>>:>:>:;>>>:::1::::::>::,::,::::>:::::4:11::::111::11::::::4::::::::11>>>111:::::::::::::1:1:::::::1::1::**:1:1:1>:>1,>,>::::>>>>:::>>:>>111>>1>11:::>>1>::::::111::::1>>:11::>>:::>>1:>::>61:>:>1:>>::1:>:1111:>1::::11131111:11:1111111:::>1111111>111:1::-1::11::1111:111::::11:1:::::>>>1>>>>11>1>>221>>:>>>>>>1111>::::131111111111:1::1111:::111:1:::111:1:1111:1:1:1:::3:,:2::4t,4:>:>5<:1>::>>>><:::::442:22::1:1::,,2,2:1>1>:>21>11::::1::1::1:1", ":2>:;;>,>>::;:>:;:;:,:,:>>:::::::>:4,:::;2:4222>:::>>::::::::11::>:1>>::>::>>-<>>::::::::::::::,,;:,::::1::44::1:1:::31::1:11::::::::::1::11>1>11:1:11::-:::::::::::::::11:::::::::::::1:>>1>,>>::::>>>>::>>>::>:>>>>>>11><:>>>>:::::11111-::>>111:1>>>:=>>111>>>>61>>>>1>>:1:>>-1>6111>1::1:111111111:::11:11:1>:::1::111>5:111:1::::1:1:111111111::::::1::11::>>>>>->>111111631>>>>>>>:>1161>::3:1111111111::111:1111::::::11:1:::1::11:1:1::11:2::22,:::4tt,,:>>>>>1::::::<1=4:4,::4t:22::::2::,:,2222>,1:>2>2>:::::11:::::11", ">11:::>,>;::::<:::::,;,::>:::::::::4,::,,:;,,22,:::1>:::>:::::1::::151>:>>>>>=:>>::::>::::>:::,,,::::*:::::44::111:::1::::111::::44;*::::11111111:>:>:1:::::-*1:::::::::::::::1:4;:>:::>>:>5>>>>:::::>>5>:>>>::>>:11>>>11>>::1>1:::::1111:::1:>>:1>>>1>:::>>11>1>>11>>>>1:>>>>1>>:13311>::1::111111111:::1:111111:>>1>>2111>>11:::::1:11:11:111111::::1:1::::1:::>>>::>>1>>>>1361>1:>>>>:1111>>:::1111111111111111::11::::::1:11:1:::::11:111:11::1122:,::::,,44:>>>:>>>:>::::>::::,:::,,,::::2::2:22222>2>2>>1>11::::11:::::1:1", ">1::::<:>5>:::>:>::::::::>::::::::::4,;:::::,;::1:::1>1::::::1::::>>>>>::-::>=::>::::::::::::<:,,::::::::1:::::111:::1::11:1:::::::::::1::1::1111>>::1::4::*::::1::::::::::::::::;::::::>>>>11>>::::::>>:::1>:-:>>>:>>>111:1:>1>:::::1111:::::1:>:>>:>>::>111>:1>>111>>11:>:>>1>:11111>>:1:::1111111111:1:1111111>::>1,,1>>>:1>>1::::11:1::1111:1111::::::1::1::::>>>:>>1151>11111>1>>>>11611>>::::1111311111:111::::11:::1::1:1:1111:11:11::1:1:11::22:41:::2,4>>>>>>>:::>-:::::::::4:::,,:::24::2:>12>2:>::1>>111::::11:1:::11", "::1:>::>5><::<>>:::::::,,::::::::::442::4,2,,,,>1:1:1>::::::::1:>::>>>>::>::>>=<>;::::::::::,:>>,:::4::::::*::1:111::1:::11:::::::=:::11:1:1:1111>>>1>::::::::::1::::::::1::::1::4:>>:::>->>>>>>::::::>>>::>1>>>>>1:>>>>>>>:>>>>:::::11111:::11>>>>>11::::1111:1>>111>>11>>:>>>-:>11111>:1:1:11111111111111:1111>>::>1121>>>11:::::::1:::1::111111:::::11:1::::::::>>:>11351111351>:>1>>>11111>>:::311111111311:1:1::11:::11:11:1::11::1::111::111:12::::::::>::::>>1>>->>>:::>:::,:::::::,:::t:2:::111:2:>::11111,::1:1:1:::1:1", ":11:::>>>>>:::>:;;:,;:;:;::::::::::::;::2:,,::,,::::::::::::::1:-:><:>>:>>>:>>>>>:::::::::1::<>,,:::::4::::::::::1::::1::1:1:::::=:-::111:1::1111>>>:11::::*:1:11::::::::::::11:;::>1:::>>>>>>>>::::::>>>:>>>>->:1:11>>>>>><>1111::::1111::::11>>>>>:::::>:>11111>111>>11>::1>>>:::1111::1::::11111111:11:111111>:=:>1>21111111::1::::1:1:11111:111:::1:1:1::1:1::>:::>>11111>>111>:>>1>>1111>>-1:::111111111::::1::1:::::1:1::::1::1:1:11:11111111:::2::1:44:4:><>>>>1>>>::<>::::,:2::4ttt::::::::::1::22>>::111>::::1111:1::11", ":1::1::>>>::::::::::;=>>:=:::::>:::4:::::>>,:,,>::::>>>-::::::1::::>>>:::1>:>:->5:::>::::::::>:>>::>::::::::4:1111:::::::1:::11:::*:::1111:::11111:::::1::*::11:1:::::::::::::::::::,::>:,>>>>:::::><:>>>->>>>->>>1>:11>>>>:>1>1::::1111>:::>1>1:>>,1:,:=>>>11>11>111>:>>::>>:>>::>11:1::11:::11111111::1::11111>::::116111131:11::::1::::1:111:111::1::::::11:1::>>:::>>>13212211>:>>1>>>111>>>:::11111111:1:111::::1:::1:1:1:11::11:111:11:1:1111:121::24:4:::5>:>>>>:::::::><::::,,:;,4t:::::::::1:::>1>>:>1:>::::1:11>>::11:", ":1>>::>>>:::=::::;:;:::;::::::::1:::::4:<<<>:<,::::>>>>1::::::1::::>>>:>>::>>::>>::::>::::::>>:,:>:,:::::::4::::111::11::1:1:::::;::1:11:::::1111:1:::1:::::::211::11:::::::::1::4::::;:::>>>:>:-:>:>::>>>>1>>->1::1:>>>>>:::>>>::::>1111::::>:1::,:,,,::1>>1111>:11>>>15>>>>>>>::>>111::11::11::11:1:11111:11111:::112,1:1111::1:::::1111:1111:1111:::1:11::::::>1>:>>>231112225>>>>>>>>>>11>>>1::11:11:111111111:1111::::::::11::11:1:1::1:1112:2:::212>:::44:,:>>:>>:::>>=>>>,::,::::,,,:::2::1:::1:1>:1::>111::>11:11:::::::", ":1::::::::>::=>>::::::;<::::::>11:::;,:::::>::,>::::>>:>:::1:>>:::::>>>>1::>>::>>>->:>:>::>;>::>:>:>:::;:::::::::11:1::::::::::1:*::1:1:1::-::11:::1:11:::::::::1::1:::::::*1::::;:::,:::>:>>>>-<::>>:>>>>>>11>>1:>>>>1>>><::>111::::1111:::1>>>>>:,:,,,:,>>>111>>11>>>1>>>>>>>::>>11:1::11:::1>1111:::111:1:111:::>11111111111:1::::1:1::1:1111:1:::::::::1:::1>>>>:::12113112,>>>>>1111>>1>11=::111:11:111:1111:1:11::::1::11:::111:::111::111:111::::>>::44:::>>>:>>::>::><:=::,::::::t2::::::::1:::1:11::>1>::>>1:11:11::1:1", "11:::>::::::::<::;::::;::::::::::::::::;;::::,>>::::>>>:1::::>:>=::::>:>:>::<::<5>1>>:::::>::::::>:>:,;:::*::::::111::::1:::11::::::::1111:1:::11:1::::1:::::::::1::::1::::::::::;;:,,::>>>>>>>:::::::>>>>>>>:::>::>>>>>11>::>>1::::::1::>::::1>1>,>>>>>;:>>>>315>211>>>:>>5>>>:>>>11:1:::1::>>1111:11111:1:111:1:::>1>11>1111:11:::::1111:111:::11::::::11:1::::>>:::>>21111312:>>>>15>1>>>>>:::::1:1111:11::111::111::::::1::1111::1111:11111:11::>111::::::4:::>>>:>>::::>>>>::::::::4t,::,:::::::::11111>>1>:1:>:1:::11:::::", "111:::::>:>>:<><::::::::::>:::>>::::;;:;:;:::>>1>::>>>>::::::1:1-:::>>:>>::::::1>>>>:->:;:::::>::::::::::::::::::1:11::::::1:1::::*:::1:11:::::11::1::::::::::1:1:111:::::::::::::::,>:::>:>>:>::::::::::::11>=>:<:>>>>111<::>111::1111111:::1>1::>1,:>>:::,>>2>1>25>>>1>>>>>>>5:>>11>:1:>>>:1>>11:1:1:1:11:111::::111>1>11111>:1:::::11:::111::111::::::1:11::::>>:::111111222>::>>>>1>11>11>:::2:1211:11111::11::1:::::::11::1:11111:1:1:::1:>>111::1::1:::44,>-::>:>>;::>>>::;:<:,:;:,,:,:::>::::::11:1::::11::::1::1:1:::::1", "131::1:1:::-=:>>:=:::::::>>;:>::>:::4:;;;<:::>>>>::>:::=-::::11:::::>>>>>::::::>>>>>>>>::::=>>:,1,,,;;4::::**::::1111::::1:::1:1::::>::11:1:1::11::1:11::::44::::::::::1:1::::1::;;:,:::>>>>::::::::>::1>::>>>=>>>>>>>>11<>>:::1::::1111111::11>11>21,:::,:1>>115>22>>>>1>>>>:>;>>>>111:::>>::1>111:111:1111:111::::>1111>:121>111:::1::11:1:111111:::::1:1::::::1>::>>11>1112311:>>>>111<111>:::::1112:1111:11:1:::11::::::1:11:1::1::11:111:1>::1::11::124:::4>>>>:>::>:::<>::;;:,:::::,:::::>::11:1111::11:1:111:::::::111:1:", "131:::::>::;:::=>::<::::::::>>>>::::4:;;=>:<>:>>::::>::::::::11::::<>>1:>>:::=::>>->::>::::;>>>:,,,,:::::::::::::111:::::1:::1::::::::::11::::111111::1::::4:::::::11:::::::::::;4:>,,;:>::>:>::>=::::>>::>>>>:>1>>>>1>1>1>>:1>11:::1111111:11>:11>2,,::;:,1>,111>311>>>1>>>>>::>11>:1:1:>>>::1>11111:1:1::111::::::111111112>>>1::::::111::111:11:::::::11:1::::1>>::>>>11112311>->>>1>1>151>=:2:11::22311111111:111::::::111:111111:11:1:11:>>111:::1:221:4:::>:>>:>>>>::>::::::::::::1,1:1::>::1::::1:1:::1:11::1:::1:11:1:11", "1111::1:>;>:::::::>::::=>,>::::::::,4:4,:<:::>>>::::>>::::::::1:::>>>>11::1::;->>>>>>>>>:>::<::>:>,,:,;::::::*:::::11::::1:::::1:4::::1::11::::111::::::::::::::::::1::::::::::::::::,:::::>::::>:>:>::>:::>>1:>>>>>>>>>11>>:1>>1:1:1:11111::1>11>:>,::;:,:1112>15111>>11>>>>::::>1>111:>>>>1:1>11111:::1111:1:11:=:52111:1132>>1::::11:1::11111111::1::::::1::::1::::>>11111311>>>>>>>>>1>>1:>::211113:1111:111:1:11:::-:1:1::111:1111:11::1::1:11:1:1:::::4::4>>>:>>>::::::>::::<>:::,:1:::::>:1::::::1:11::111:::1:::::1:111:", ":11:::::>>>::::::<:::::;>,>:::::::::::;;:::;::>>:::::::::::4:::::-1>>>>>>>::>::>>>>::1:<>::::::>:>1:::;::::;:::::::11:::1:::::::::::::1::>>:::111::1::::::::*:::1:::1:::::::1:1:::=:::::>:<>>>>>::><:::>>::>>>:>>>:>1::1111<>>:1:::1111111>:>1>2>,:>><>:;:>111>>>11111>15>:>>>:::1:11:1:::1:::11:111::1:1:11111:1:::1111>1>16>>>11:::1:1111:1:11111::1::1::11::::>::4:>>1>1111111::1>,,::1:11:::::2211222211:11111:11:::::::::1111:11:1111:11:::::1::11:::::::,2>>>>:>>::::>::::::::::::>5:>>::>::11:1:1::1::11::1:1:::::1::1111", ">11:::>>>::<::<;::::<:<:>>>::::=::::4:::;:;::>>:::::::::::::::::::>>>>1>>>:>-::::::<::::>:>>;::,>>::<::;:;;;;::>::::1::::1::::::::-1::1111::1:111:1:::::-:::::::::::1:1::::::::::::::<:1:>:>>1-->=>:::::>::::>:>>:>>>>:1>11<:>1:11::111111>:>,>>>1>>>>:<::,,1>>>>111>:>1>>>>>>>:1:111111:1:1::1:131:111:11111:1::::::13111>121,111::1:::::111111111::1:1:11:1:::;>>>:>11111:1111:::>>11111111:::2:::11222:1:11111::::1:::::11111111:1::1:11:11:11111::1::::::4::>>>>>>:>>>:>:::>:;;:;:::>5>:>:>>1::1:1:::1::1:2::::111:11:11:11:", ">::::>1>>>::::::::;:>:::>>>::::::4::4:>:::;:::>::::::::::::::1:1:><>>>>>>>:>=:;>>>1=>>=:->>-;:>,1:,:::;:<:;;:;;::::11::::::::::::::-:::::1>>:>1111:::::-:::-::::::1::::::11::::::::;><:=>>>>:>>:::><11:>:::>>><>>>>>1::111>:>>>>:::::11111>::,>>>>>1>>:::>>1:>>1>11>::115>>>>>>::11::11::1::::1::1111::11:11:1:1::::111111>121,11:11::1:1111::1111::::::11:1:::::>>:::11111111111:>,:2>::11:1:::2::21:22221112:::1::::::::11111:1111111111111111111:1::::::::::111>>::>:::::>>>:::::::::>,:::::>:::1:::1:2:::::::11::1:::1:1:11:", "1111:>>>:>>::<:::;:::::<>>::::;:::::;>;;:;:;:::>::::::::4::::::::=>>>>>>>->:>:::>>>>:>>>>>>::<>,::::::::::;;::4::::::1:::1::::1:::::::1:::>:>::11::1:1::::::::::::::1::1::::::::::;<>::<5>>>>>>:<:>>>->>>::>>>>::>:::::1>11>:>>1:1:::11111>:>,11>>>>>,,;:>2111:1111>>:>1>11>>5>::::11::::11::1111111111::1111111::::1111111161>11:::11::1131:11131::::1::11:1:::;:>>;:>111:11111::::>11::1111::::4:22:12221112:::11:::1:*1:1111111:1:1:11:1:11111111:1:::-:::::::::>>>:>>::>>>1=:;:;::::,,<:>>:111::::::1::11::2:1::::1111111::1", ":11>>>>::>::::::=::::<:>>>>:>::=::::::::;=:::::::4:::::::::*::::::::>>>>>>::::=1>><>:>->:>:::>>,:,::>:::::=::;;::::::::11:::::1:::::::111:1:1:111::1::::::::::::::1:1:1::::::::::=::=1>:>1:>>>::>>:>>>>>>::>::>::>><1>:1>1>>:::111:::11111:::11>>1>1,2:::>11>>>1>>1>:>>1>>11>>>5:1:1:111:1:::11::1:111:1:111111::*:1:111111111:111:11:::11111::1111:::11:11:::::::::::>>:11121111:1:11:11::11::::::1212:3:31::111::1:1:*::111::1:11:11131111:1:1:11:1::::::::1:1:1:>:1>:>:::>>>>::::::::>,,;:>::::1:::1::1:11::2:1::::1::1:11:11", "11>>11>;::::::<:::;:::::>>>>>:=:::::::;;:::-::::::::::::::::::::::5>>>>:>>>:::<1>>>=>:>>>>:>:>,5>>:::::::::4:;;:::::11::11::::::-::::::::::::111111::1:::::*-11::1:::1::::::::::::=;<::>>:>>>>::>-:>>>->1::>>>>>:>>>>>>>>1>>1>111:1:1:1111::>11>>>:12,>::111>>:1>>>>><>1>>>>>>><1:1::1:1111:::111111:1:111111:11::::11311:1111111:1:::1:::1111:31::::::11:::::::::,:;:>111112211::1>::1:111:11:::::1122223:11112::::1:1::::111111::1111111111:1:1:::11::::4::::::11:::>>>:<:<>><::::;:::,,:,>:::1:::1::::::1:::11::1:1:::11:::::", ":11>>>1>>::::;:::::<>:=:>>>>>:;::::::::;::::::::::::::::::::::1:::>>>>>>-1>:>::1>>>>>>:>-::>>>56>>:::::;::;::;:::::::11::::::::::::::11::11:11111::1::1::::::::::::::1:1:1::1::::=:>>>:>>:>>><::->->>>>>1>->>1>-:>>>>>:>>>>>>>1>:1:1:113111>>11:11:>,,>:>213>>:111>>=>1>>5>::>>>:11:1::1:::1::1:111::111:1111:::::::1111111111::11:11:111:111::11:1::1::::1:::::::>:::>1111133111::>111::1::::::::112223:211:1::1::1::::::::::1::1::111:11:111:1111:1::1:::122:2::11::::::>:>>><::::;;::,,>::::>:::::1:12:::::1:1::11:1::::1:::1", ":1>:>1,>>>>:=<>>:=:::>:::::>>::::::::::;:=::::::::::::::*:::::::::>5>>::>>>:::=>>>:->>:>>>:-:>>5>,>;::;:::;:::=:::::1::::1:1:::1*::::1:::::1:111111:1:::::*:::::1::::1:11:1:::::::=:<:>:1>>51>:>:>:>>>->1>1>>>>>:1>>:>>>:>>:>>1:1:::1:11111>>1111::>,,>:>,11>1:11>>>>:11>5>>1>>:::11::11111::1111111:::11:1111:::::::1111:>111111:1:111:::1111111::11::1::::::::::>::>>111112111>::11111:1:1::::::::1:2:22111:121:::1::::::11:111:1111111:11:::11:1:1:::-:::::::11::::::>>><>>:::::<::::<,,:::>>1:1::::::::3:1::::11:::1::1:111:", ":>>>:,,::,>:::<::;:<:>::>:>>::::::::;:;<:;::::>>::::::::::::::::::>>>>:<>::::::>5:<::1::::::<>>>>>:::;:::4:4:::::::::::1:::::::1::::::1:::11111111:1::1:*:*:::::1::::11:::::::>:::;:::>,>>>11<>>:::-:>>>>>->>>>::>>>>1<>:>>::>11:::11:1111>:>>11>>1,5>5::12>>>:1111>>>>1>2>>>>1:::1::111:1:1::1111::1:11:11:111:::::>11111:1111:1:1:11::11:111111:::::::1::1:1::>>:;::1,1111111>::>1111>::111::*::1:1111:311111:1:::1::::1::::11111:11:1::111:113::1::1::::,2::1>>>:::>>>,>>:>::>;:::::::,,:::::2::::::::2:1:1:1::11:1:::::11:::", ":>1>:,:,:>>:>><:::::;::<::>>:::::::,:;:::;=:::>:::*::::::*::::::::<>>>:>:>::<::>>>::::>::::=:>>:::>:::::::;::;=::::::11:::1::::::::::11::1:::::111::11::::::::::::::::::11:::::>>;;;:><>><>>1>:>:::>>:>>>>->>>>-:::>>1>>->::>1>1:::::111>1>>11:1>1,1>>>:>,21>>>111>>>->1>21:>11::11::::1:>1>:111111111:111111111:4::>1:1>>:111>111::1:11:1:111111::::1:1:::::::::>,;:>>,1161111>1:>11>>>1:1:1:::11::11111:11::1:1:::::::::111:1::1:1:11:1::1:1111:1:1:::::4::1::>:>::1::::>:>>:;::;:::<::,:>::11::22::2::111:::::::11::1:::1:111", ">::>:2:::>,:;,:;:::::::=::>1>:>>::::;;<:>:=::::::4::1::::4:::::::::>>>:>>>>>>-:<>>>::>>1::::>5><>:>:::::>::4=:::*::::1:::::1:::1::44:11::1::11:1111:1:::::::::11::::::111:::::>::;;;<>::>>>><1<>::>>>>:>>:>>>>>>::>1>>>>:>::>>:1:::11111>>:>>>111>,65>><:1111>>211>>>:>151>>>>1>::1::111>>>1::11111111:1111:111::::1>11>1::111>>11:::1:111131111::::::::1:11::::;>>::>,212111111::1>>>>>::1::1:::1:1111131:::11:::1::::::::11::111::11:11:1::1:11::1::::::4:::4:>>:>:>><>::>>>:>:::;:::::2>::1::,:2::22:1:2::::::111::1:1::11:1:", "11>,:,,,:>>>;,::<>>::>:::>>>1>::>:::;::;::::::::::4:::1::::-::::::<>:>>>>>::>::>><>>>>-1:::;>>>>>:::::::>4:;:::::::::1:::1:1:::::*:::1::::1::11111::11::::::::1:1::11::::::::::::;::::,:>>>>11><::>>>:::>>>>>>>->>>>>>>1>::::>>>1::::111>>::>111>>>,61>:>,26>>>21>>1>>>>:>>>>,:::1::::1:::>>:111111:111:1111131:::::>111:::121>>1::1111::11111:1:1:::1:::::::::::>>::>>251131161::1:>>>211:::::::::::111:111:::::1::1:::::11:11:1::::1111:111:11111::1:1:::4:,,:>>>>>:>:><::>>;>::;:::::;,>>::1:::::2:::::2:11:::::11::11:1:11::", ">>1>,,,:::>::,;:::::::;:::1>,1>;::::;:::::1->:>:*::::::::::4::::::->:><>>:<:>::<>:>>:::>:::::=>>>>>:>::4:4::4::::::::111::1:::::::::::1:::::1113::1:::::::::*:::1:::1::1::::1:::;;;;;:><:>>>>>1:::<>>>:1:>>>>>>>:>>>>>>>>>:::1>>1::1111:>:::>>111>>>>5::>1111>121>>1>>>1>:>:1:1>1::1::11:11::::11111111:111:1311:::::111111:1111111::11:1:11111111:::1:1::1:::::::>::>>1>2221133::>::>>>1:111::::1:::11111:1:1:::::1:::::::11:1111::111:11:1:11:1:1:1:::::4:,,:,>>>>:::>::::<:>>,;4;::::,,:::::::1:::::1::2::1::::111::111111:::", ":11>:,:,>>,::<:;<:;:::;:::>1>,>>:;:;::<:::::::::::::::::*::::::::::>>>>>>1::::::>>:::::::::::>1>>>>:::::::4*:4::::::1:1:11111:1::*::::::::11111111::11:1:*::::1::1:1::1::111:::>:;4,>:::>>5>>1>>:=>>>:::>::>11>-:1>>>11111>::>>111:::1111>>:>1>5>>>>>>::,,11:1211>>1>->1>:>>>1:1111::11::::1111111::11:11:1:1111:::111211:>113,211:1:111::1111131:::::111:1:::::>>::>>>111226111::1>:>:>:::::::::::1111111111:11:1:::*:::::::1:11::11111::::1::1:11::::::4::::::>->>:::>::::::<>:;;;:::,,,:::::12:222:242:::1::1:1::::::::1:1:1:", ":,>>,<,>:>:::;;,><:::::;::>>>,:::::;;;=:1::::::::::::::::::::::::::<>>>>1>>::::>>::>:::::::::::>>>>>::::::4:*::::::11:11:1:11:1::*::::1::111111111:1::::::::::::::::::::1:::::>:::4:<>:::>6>>>>:::::::>:>>-:1>>>:>:>>11111><:>>11::::1111>>:>>51>:>::>::,1>1:1121>>>::11>>:>:11:11:1:11::11::111111:11::111:1111::::1311111111111::::1:11111111111:::::1::11::::>>>:>>11,21111>1>:>>::>:::1::::::11:1:111111:::1:11::::::1111::11:1111111:11111::1:1:::::::4::1:>>>>::=::::::<:>:,:;::::,>,::::>>>:22:2:22:::::1::::1::11::11:::", ":>1>>,>>:>,,;:;;>::::::;;>>>>>>::;:::=::>::::::::::::::::4:::::1:<>>><>>>>>:::::>::::::::>>=:::>>>>>:::::;:4:::>:::::1111:1:1:::::::::1:::1:1:1311::1:::::::::11:1:::::::11:>:1>:;;<::::>>>>>:1::::>>>>>>>>>>>>>:>>>>>1:<>1>:::>1::::111>>>>>>11::>>>>>:,>1>:>1,>>>>:>1>>>:::1::1111:1111::1:11111111:::1::1111:::::11211111311111:1::1:111111111:1:::11:1:::1:::>>:>>,111221111::>>>>:>1::11:::::1:11111111111:1::::::*:11:1:1:111:11111::1::1:1111:1::::::::::>->>1=>::>:::>:<::;:::::,,::::2>1:1::::2:::11:1:1:11::::11:1:1::", ":>>>>,:::>>:;:;;>:;::;44:::::,,::::::4::::::;>>>:;::::::::::::::::<>:>>>1>>:<:>>::::>>->:::->:>>>:>::>>::=;;:4:::::::>>:11111:::::::::11:11:111111>>>>::::::::1>>::::1::111:::1:::;::::::>1>::>=>-:>>:>>>::>>>>:>>>>>>>>>>1>>>>>1::::111:1::1111:::1>>::>>1::1111111::11:1::>>:>>11>>1>>:1:1:11:11:111:::1:>111>:::1111111113111:1::::11:11111:111:::11:1:::::1::::::1::1111311:::>>>>>>>:1>1::::1:111:11111111:::::::::::1::1:111:11111111::11111>1:1:::44:::::->::>:::::;:::,:::;;::::,>:;:>1,::::22:2:::2>>::1:>2:>>:1:111:::", "4,>>>>>:::>::=;><;:;:::::::,,,,::::>::::::;,:>,>:;:>::::::4:::1::::5:>>-1:>:::<>><>:>>>>:>:::>:>,>1:::>:=:;;4::4:::::11:11::1::1:::::1:::1:111111>:>1:::::::-:::>::::1::::1::::::;4::;::::>>>>>:>:<>>>>16>:>1>>>>>>>>>5>1>1>>>>11:::1111111::1:11:::>:::>>1:::>>:1::::11:1:>::>->>>>:1>>:111::11:1::11>:1::111>>::::>>1>111111::1:1:1::::11::11111:::11:::::::1::::::11111311:11::>>::>:>>>1:::::111:11111111111:11:::::::111:1::1::1111::1,:1:1>11>1:1::::4:::*:>:>:::::::;:,;,:;;:::::,>,::>::2222:2222::2>::11>>1:>:1:11:111:", ":>>:::>::<>:=;:>:::::::;4:>::2>:::::::::::;:::>>>:;::::::*::::1:=::>>>>>>::>>::>5>>>>->>::1:::>>>:,,1::::;;;:4:::::::1::111:111::**:::1:111111:11::11:::::::::::1:::1:1:::111:1:::;;;:::::>1>>>::>::<:>>>:>=>>1=>-:>1>>>>>>>->>>1:::1111111:11:11::1>::::>11::11:1>::-11>>>>>>>:>>>>:>>>111:1:1:1::11>1:::1111>>::::>11>:111311::1:::11::11111111:::1111::1:::::::1::1:1111111:1:::>::1>1:>1:1:::1:::1111111::::1::1:::::::::1::11::1111>1:1::>111>>1::::::44::::>:=;;;:::4::,::::;::;:;,>::>>,,:2::22222::2>::11::>:1>::::1:1::", ">>>::,>:::>:;:::=::;:,:;:::1:>>1::>>4::::::::>>>:;:::::=:*:*::::>>=1>1->>>>>>::>>>:<1->>:::::::>::>21:::::;44::::::::1:1:11::11:::::::1::11111:111:::11::::::::::::1:1::11::::1::::;;:::>:11>>>>>-:>:>>>>::<>>1=>>::111:>>>>>>>>::1:::11111::1111:1:::::>>>::>>1>1>>::>:::>>>>::>>>1:11>:111:1111::1>>1::1111111>-:11:111111111:1::11:::1111111111:::11:1:1:::::::::::11111111::::>1>>1>:>>:1:1::111:1::1111111:::1::::*::1:11:1::1:11111:::1>>1>>>111:::::::::::-::>;::::::::,:;;;;;:::,::::>>,22:1:::22::21>::1:1::::11:1::11:", ">:>>:,::::>>::::;::::::::::2:2:2::,>::,;<:<::>>>:4::::::::::::::=><>>>->::1>1:<><>::>1:>:::=:::>:>,:>>>:::;4:::::::::>:1:11::1:1::::::1:11:1111111::111:::::-1::1:::111::1::1:::::::4,>>>:>>>>>>:->1>>>1>:1:>>>:>>>>1>1>1>>>:1:>1:::::111:1::1111:1:1:>::1>>::1>>>>>-:1>>:>1>>::1:>1:1>>:11:::1111:::11:::113111:::>11311>1111:1:::11::1:1113111111::11::::::::::::::1111111111::::11:1:>>>::11-:11:111111111::1:1::::*::11::1:1:::1111::::11111:>>>11:1::::24::>4:;<:::::;;<,:::;;;;::;t:::::1221:::122:1::2::1:1:111:::1:1:11:", ">>:::,,>::>:::<:;::::>::442>2:,:::>,:4:,::>::>>::::::::::-::::1::>:>>>>>1>>>:;>:>::>1::>:>1:::>>:,1:2:>:>;;;4;::*::1:::1::1111:::::*::::1111111:11>1:1:1::::-:::::1:::::::::::1::4;:;:>::>>>>>>>>>>:>:>>1:>>>5><>:>:>>1>>:>>:::>11:1:11:1:::1111111:::>->>>>:1>1>>>>>:111:>11:::::>1>11>11111::11:::111::1111111:::::11:1:11:11111::11::1111311111::::11:111::::::::::1111111111:::11::1:>1:::::::111:111111111:1::::1::::11:::11::111111::111:111:>::::::4:::::::;<65;:::::::>:;;:;;:::,::::>2:22211:2::::,2::1:1::::::1:::::::", ":::>;,>>:>>::;>>:::::>>;::>>>>>>:::,,;,:::::;:::::::::::::::::::>>1>>>>:>>>>>=5<>::::::1::>:>::>>:,>>:::>4:;:::::>:::::1:111:1:1::::1:1:1111111:111:1:::1::::1:::1:1::1::1:1:11:4:4:;>>::>1>>>5>>>>:>>>>5>>>>>1::::1>>1:>>>>>>:1:::::11:1::111111:::-::::>>:->11>1>>>:>11:11>>>::1>>111>:111::111:::1111::13111>:::1:111111::11111:11::11113311111:::1:111::::::::::::11111111:::::1:1:1>>>:1::-:::11:113111:1:1:1::11::::1:::1::11:1::11:::11111>:1::1:::::424,:;::9<:::;;,:,>::;;:4::;<,:::>:1222:2:112:22::1:11::::>>:1::::1:", ">>1:::>:::>:::>:::;>:>>:::>>>:>>:>:,:;:::,,:>::>:::::::::-::::::>>->>>>>>>:>1:>>>>::>:::::>-:::>>:>>2:::>::;::,::>:::::1:::::::1::::::1::1:1:11:1:::11>>::::::::::::1::11::1::::;:;::>>::>1:>>>>>=:1:>>>1>>>>1>11::1>>1>>>>1:>:::1::::1111::111111::>:::>>>>>>11>>>>>>11>::1>>:::1:>111>1111:::111:11:1:111311>>*4:11111111:::1:1::::11::11131111:::1::1:11::::::1:::111111:111::::11:::>>>1:11::::1:1111111::1:1:::::::::1:11:111:1111:11:1:::1,>>1:::214:44::::;:<><;::;:::;>;;;;4:::;t:::>>,122221211:22::2:21:::11::1:1:::::", ">::>::,>:>>;:::::::>42,:::>>>::1::>>::4:::>>::1:::::::::::-::1::;>>>>>><>>>:>=1>1:::::::::::::::>:::>:;>,,::;>1::::::11:::1::::11:::::1:111::11::>::111>:::::::::::::::1:11:::1::44::>>::>>:>>1>>=:1:>>>>>>6>>>=:::11:1>>>>1<:>>11:::111:::::111>1<5:>:::>>>>-11>>>:::1>>>>>>>:::::113111611::>111:111:11>1311>>:::11:111111::111::::::::111111131::::::::11::::::::::111111111::::1::111:1:1:1::1:111111111::111::::::*::1:1:111:::1111111:1:>>:>>>:,:>::4:::::::::<::::::::::::::44:::4,:,::,123222::::222::::1:::::11:1::::::", ">:>:::::::>>;::::::::,:;4:>>>::1:>>:::::::::::1::::::::::::::::1:>>>>:><>>>>1=>>1:::::::>:::::1:>:,>>>;<:::4;>11:1:1:11::11::11::-::::1111:111:11::11::1:::-::::1:::::::1::::::::4:::>>:>>>>>>>>>>:>:>:11>>>>11>:::>111>><11:>>1:::::111:11:111:>>:>::>:>>>>>>>>1>1::>1>:>->>>=:11:111113111>::11111111:>:1131>>::>:::111111:1111:1111:1:11111111::::11:11:::::1:1:::::1111111:::::1:::11::1:1::::1:1:111111::111::1:1::::1:111:1111111111:111111>>>:::>:::44::,>::;;::;;::=:;,;4:4:::4:t,:::,12222:2211::2:::22>>:::1:11:1:::::", ">>>>::::>>:><;:>:,:::,,4:::>,:11:,,,::::;>>::111:::::::::*:::1::::>>:>:::1:>>>>:>::::::>>:::::::>:1:>,:,,;4:::1::::::111::1:::1::-::::1111:::1111>:>>>>11:::::::::::1:::::1::::::;4::,:::>>>>>,,1:=>:::111<>>>5>:>>11>1>1>11>:11:::::111::1::11::>>>:::=>>>>:>>1>>>>::1:>:>>>>->111131121311>::11:1:111:1:11311:4:::1:1:1111:1:11:::::::111111111:::::1::1:1:::::11::1:11111111::::11:111:1:11:::::::1111111:::11::::::::1:::1::::>,>,11::>::11211>>>::>:::4::::::=::::;;::::::::44:::::,::,:,12::2::2:::2222::211::::1::1::::::", ":>1>::,2>>:>::<:::4::,:::::>,:1:::,2,:,:::>::>:1>::::::::::::::::;>>1::>>:::>=>>>>::::>:>:-::::1>>1:>>:>,::4::11:1:::1:::1::1:::::::1:1111::11:1>>>>>>>1::::::::1:::::::::::::::::;;:::>:>>>,>1>>>>>>:>1>1:>>>1<:>>>1>>:<<11<>>>::::::1::1:::111::<>=:>:>>>:>>>1::1:>:11>>>>1-:>11>161131131>:>:111:11111111111:::::::11111:1::11::::1:1111111131::::1:1:::::::::1:::1:1111111::::1:11:1:11:1:::::1111111111111:1:::::::1:1:1:111:>121211111>1>11>>>>>:>:*::::4:::;:::;::::::;,<:::::44,,;:,,:2,11222:1::::22::21::1:::::::1::11", ">>1::::::1:::::::::::::::::2::1,;:,:::>;:,>>:111::;::::::4:::::1::>>:>->>:<:>:>>>->>:::>:>::1::1>:2;,::,:;;;:::::1:1:1::::::1:1::*::1::1111111111:>>::1111:-:::::::::::::::::::::;;::>::>>>>>>551-::1:>1>1:>:11::>>>1>1>>>11:>>>1::1::1::::::11::>:>->>::>:1>>>1>>>>>->1>:>>>>>:11>161161111>>111111111:1:1:111:::1:111::1111::11::::1:1113133131::::1::1::1:::::1:::11:1111:11:-1111111:11:1::1:1::11:11111:1:11:::::::::1:1::1::>,:22211:1>>221::11:>>:::::::::::;:;;:::;:>:,<:4:::::,t::,>,112:21:1::::221::21::1::1::11::11:", ">>11::::1>>:;:::,::::,:4:4>>>::>::,1:;:<,>>>:1::::;:::::::::*:::::>11->:>::>::>>>:>>:::>>>:::::11:2>::::::;;4::::::11:1:::1::::::::::11:111:1111:1:11:11::1::::1:::::::::::::*:::;:;:>:<:>>>51>>>>>:>:>>>>>>>:>>>>>>1>:><>1>>>1>1:::::1::::::1111:<>>>::::1:::11>>>>>>1>>>>>>>::115111131111>>111:1:11:1:111111::::>1:11:1111:111::::::1311111111::::::1:11:1:::1:1--11:1111111:::1:11::11:1::1-::1::11111111111:1:::::::1:::1:11>1>21221111111211:11:>:::::4:4::::;:::::::::<::4::44,:,,,,211213::::::12:2:1:1:::::::::::::::1:", ">:1>>>>,>>>>,:::,::;::>4:4:,::1>::>,:,>>::<>::1:>::::::::::::::::::1::::>::>::>:>>:>:::1>>>:::>>:,2:::::t:;4::>>:::11::::::::::::*:::-1>1111:111::::::11::::::>>:1:1::::::::::1::;=<;>>>:5>>>1>>>=>>>>>11>>>:>>->>>>1>>:>>>>:1>11:1:1:11:::::1111>:>>>:::::1::>11>>>:>11>>>>>:>-111>11133161:>>1:111111:1:1111::::>>11111:111:1111:::111111311111::::::::::1::::::1::111111111::::1::1:11:1111::::1:1111111111111::::::::1::11111>21111121:1:11111:1::11:::*::4:::;:::;::::::::;4:4:::;,,,::>>:122:2:2:21::2:::111::1::1:::1::11", "1>11:;>,>1,>:::<::;:::>::::>1:,>::>,:;<,:<<>1::1:::::::*::*:::::>::>:::>><:>::>>>>->:>:>>>>::>:1212:::::,:;:4:>1:1111::::::11::::::::::>1>:111111::>>>:1::::::>>:::::::::::::::::;:=:<:::>>1>>>::>><>>><15><>>>>>>::>>>>>:1>:::1::::1:1:::::1111>::>>>:::>:1>:11>>>>->1>11>>>>>>>16>13131111:>>:1::1111111:131:::::>1:11:::11::1:::11111131111111::::1:1:1:::::::11::::11111111:::::1:::111:::1:1::1111:1:11:1:111::::::::1:111:1121212:111:11:11>::::1::::::::::::;;;;:;::::<;;:4::4,::t:1>>:,>:3:::::::1::1:1:1:1111::1::11:1:", ">111:::>,2,,::::4:::::>:;:>,>:,::::1::::::;,::111:::>:>:::-:::::>>:>::::1:<>:;:1>>:>>>>>>>::::>11>31>=;:,:;;;::1:1:11:1:::1:1:::::::::::11111111>>>>>>>>>:-::::>:::1:::::::::::1::::*:::>>>1>>1><:>>::1>>15>>>>:>>>>>>>>>:>>>->>11>::11::>::>11>:::>>>::::>:::11::1:::11111:>>>>1:111111111::::11:1111111:11311::-::1111:::11:::1::1:1:1111111111::::::1:1::1:::1::::::11111111:::1:11::11::111:1::11:111111:11:1::::1:::::1111111311>1111::1>111:1::::1::::::4:::;:::;;=:::>4:4::4::4,,t:::21:111:1:::2:::1:::::1:1:11::::1:111", ">>1>::::11::::::::::::;;;;>>>:,::::1:4::,;:::::::-:::::>:::>::><:=>>::::>::::;>>>::>>>::1:::::>11115>:;,,:;::::1:1:111:::::::::::**:::1:11:1>>11:>>>>>>>::::::>::1:1:::::1:::::1::::::::>>>1>>->:;5>:::1>>2>,>>:1>>>1>>>1:11>>>>::::>111>1>:>>1>>:>>>:<::>>>::111:11::31111:>>>>:11113113111::1111:111111113311::::11111:1::11111:1:111:111111111::::1::::::::::::1::::111111:1:::1:1:::::1:111::1:1:1111111::1:1:1::::::::1111111111>1>111111>>:11::::1::::4:::4:;;44::::::::::4:4::,,:2:4,2:>::1::::2:::::2::2111:11:1::::::::", ">15>::::>,:::::,::;::::;4;::>::::::>::::::;::11:1:::::::::->::>::::::::>>1>::::>>::::>:>:::::>>1111>>:::>>;::4:::111:1:::::1::1::*::::1:>1>>>111>>->>>>-:::-::::::1:::1:1:::::1::::*:4:::>>1>::>::::>:>15>1>>>::>->>>>>>5>>>:>::::::>111>1>:>>11>>>>:><::>>>->111111:111111:>>>>11111111111::::1111111:1111131:::::11111:11::1111:111::1111111111:::1:1::1::::::::::::1::11111::::1:1::::111:1:1:1111:1111111:111::111:::1::1111>11>>11111:11:>>111::::::::::::4:4:;:4;::::;:4:44:::::::,,:22,::1::1::1:::2:::::1::1:1:::1::::>:", ">>>>>:>:1>:::<:>::;::>:::;4::>:::::>::4:<<:::::::--:::::=:::>::<::>:1-:>>>:::::>>>::>>>>:11::>131>1::;:<::;4:::::111::1:::1:1:::::::::1:>11>>111>>>11>>>::::::::1::111::::1::::::::::::*:>:1>>>::=::>:>>>>>>>>>:>>>>>>>>>>:<::111:::>>1:>1>:>111:><::<>::>>>>>>>111:::111111>1>>1:111311111::1111111111:1111311::::111:111:1:11::::1:1:1111111111:::::1::11:1:::::::::111111111:::1111:1:1::::::1:1:11:111111111111::1::::111111111>1:>11:1:,>>1111:::::::::::::::;;:::;:::::::4::4;:,:t,:4222:1:1::::::::2:2:22:111::1:::::::>:", ">>>>>>>:>,>>:;::<;:::::;::4:>:::::>>:;:=;:::::>>1:::::::>>::::>::=11>:::>5;;:>>>>>>:>>>>:>>::>161::::::::::;;::>:1:11::::1::::1::::::::::1>>:111>>:>1>:>:::::->::::111::1::1:::::::::::::>-11>:::=:>::>,>::>>1>:>>>>>>>>:>::::1::1::1:11>1>:>11>>><:::<::1>1>>>>111::::11>>>>>>-::111111311:::11111111111111311::::11111:1:1:111:::111:1111111:1::::111::1:1::::::::::111111>1>>::>>11:1::1:1::::1:1:1:11111:::11:1::1:::11:1::1:11:>:>1:::1>:1>111::1::::::4:::44::::;::::::4::4:4:>::4,2>>2:::1111:::::::::2:21:1:1:1::::::::>", ">>,1>>::>>>>:::4::>=::>:44:::::::::>:;::::::::>::::::111:::::>>:::>>>:::>>:::;<>>>>:>>>>>>:::>16,>1>,:4:,,::;::>11::1::::11:::::::::::1:>1>1:11111>1>>:>:::::>>>::11::1::11:1:::::4::::::>1611>::::>:>>>>>>:>>>:>>>>>>>>>5>::::::::::>11>1::111>>1>-::>:::1:>>>>1:11::111:>>>>>>1::11111111:::::1:1111:1111331::::1:1111111:111:::11:11:111111:1:::::::11:::1:::::1::::111111>1>>>:>1::11::1111::::11111133111111:1::1:::::11:111>1:111>:11:1>>31111:1:1:::::::*::;::::<:4;::::44::4>::,t:>1:2>>:::::2:::32:2:::1111::1::::11:>:", ">>1>>::::>>>:;::::::::>::44:::1:::::<;:::::;:>>>>:::::>>:::::::>::>>:::>>>>>:::>>>>::>>>>>>>:>161>t::::,::;;;::,13:1:::::11:1::::::::::::1>1>11>11>>>>:>>>>=::>-1:1::1:11::1::::4:::1::4:>52>1>::=>>:>1>>:>>>>::>>>>>>>>>5>:>1:11::::>1>11::>11>:>::>:<-::1:>:>11:::1:1111>>>>:>1:111111111:11:1111111111113311:::::111111::111:::111::11111:1111::::1:1:1::::::::1:::1111:1>11>:::11:11111::11::1:1:11111111:111:1:111::::111111111>11>1::1>>11:1:::::::::::4::::::>::::;;;:4>4::::2::t,::,:>>:112::22:::22:2:::111::11::::::1>", ">1,>:::::>>::;;;:::::::::::::::1::::;;::<:,;;>>:>:-:>:1>::::::>>><>:>>>>>5>;:;:>1>->:>>>>>>:::>32>,:,::t,::;;4:,:1::::11:1111:11::::1>1>:111::>111>>1>:>>>>:::>>:11:1::::11:::::4::::::::>>2>1::=:>>::>>:>>>1>::>>>>>>1>11>:::>::::::111111:1>1:>>::>::::::>11:11:11::111:>1>>>::11:11111111:111:1:111:1111131::::1::1111:1:11111::1:1::11111:111:::1::1:111:1:::1::::::11111>1>1::1:11::1::11::::::11111131:1111::1:11::::1111111::1:>,:11:>>11111::1::::::::4::;;>::,::::;4:::::::::4tt:>:,,,,2::2:::22:2::::211111111:1:1:>>>", ":>>>>:::1::::-::::=:;:::::*::1:1>:::>-:=:::::>>>:::-::1><::::>>>>:>>>1>>5>>::::>1>>-:>>>:>>>:::12>>:2:1,11:::::1111::::::111::11:=::>>1>>>>1::>>11>>1>>>>1>::::>::1::1::11:::::::::,:,:::>,225>::::>>::>:::11>>>11:::1>>11:::::1:::::11:11:-111:>>=;:>1=::11>:>11111::111:::1::1:11:1:111:1:1::1:1111111111331:::::11111111:1111::::::::11111:1:::::1:11:1:11::::::1::11:1111111:::>11::11:111:::1:1:11111311::11::1:111::111111211>>>11>>>>:11111:1:::1:::4:::*4::,:>>,;,44::4:::,,::4,,4:,::22::22:::::2,,,::21112:,,>1:1::1>>", ":>>>>::>::1:1:::::::::::::::::1:>>>:>:=:=<1:::>>1:::1::>::::>::>>:>:>:1:>>::;::5>1:::>>::>>>:::1>2>12:::1::4:*:1:11:::1::111:1:1::=:>>1>>1>>>>>>11>>1>::>>::-::>1:1::11::::1:::::44,,,::,>>2>,:::-:>:::>:::1>>:<:111::>>11::1:::11:::11111::11>:>>>::1:::11111>1111:::1111:::1::::111111:11:1:1:111111:11111111:1::1111131:1111::::111111111:1:1:::::::11:1::::::11::>:11111111111:111:11:>::1:::11:1113111111:11:1::11::11:1::1221::112>>>1111:1:11::::::::*:::::::;:,:,;2:4,,:44,:::2,,,,::2:,,::222:22::22:::::>12:>>::>>:1>>", ">>>>>::::::::::::::::::;*::::::1>>>:>:::;:>:>>>11:::::1:::::>>>><::1>>>>>>>:>::>>5::::>::>>:::>1211,,,::::::::::111:::1::1111:1:::::>>>>111><><11>>>>>:>>>>:::>>:1:::::::11:::::4:42,::::>>2,><::=::>::1::>>1::::11:11>>111::::1:1:::11111>-1:11>>::<1:::>1>11111>1>::11:::11:::::1111111111::11:1:11::111111:::::1111:1111:111::::11::11111:11::::::111:::1:::::1:::>:>1:1111111::>>::1>>1>>1>::1:11113111111111::1:1:::1111111111>>1>>>>:>1>111:1:::::::4:::*4::>:;>>,;,;:22:;:,,;:,,t,,222:,22:2::2::2::2:::2:1>111>1:111:>1>", ">>>>>::>::11:-:1;<:::::::::::1::->:::==::<>-:>>>::::>:::>>-:>>>>:::>>>>>>>::>:=>>>:::::::>1>:>>>>>21,24122::*:*::11::::1::1111::::::>>>>111>111111>>>>:>>>:::->>::1:1:::::::::::>:4:>,:;:>>>>>:>><:>>::>:::11>:::1:1:1>:111:::1:::::::1111>::11:>><:<>:<:>1>11111>111:111:::1::::1:11111:11::11::1111111::11111::::1111111111311::::::111:111111:::::1::::1:::::-::1::>>111111111::>1:1>:>>>>>1:::111311111111111:1:111:::1:11:1111>11>:>1111:11:1:::::1::::::::4>::::,::,:::4::::::::;2,4:22::,:2:::::2::2:2,:2:11>>:>::::::>>>", "1:::::>::>:::;::;;;:::>:4:::::::::::>=;;:=<:>>11::::::::::-:>>>><:>>>:>>>>>>::;:>>>:::>:>>>1:::>12,,,2:,2>:4:::::1:1:::1:11:11::::::>:>>:111>11111:>>>>>>>:::::>:1::1:::1::::::::4::::::;>>1>>>::>>>:::><>-1><:::::::11::1::::11::::111111>>1>1>>:::;>>:>>2111111:1:::11:::11::::1111111111:::11:11111:11111111:::::11111111111::::::1111111:1111:::::1::11:1::::11::::1>111>1111:1>1>>:>:>11:>:::1:1111113111111:11111::::111:1>11>11::>1>111:1>>:::::1::::4:4;:4,::>,,;,:::::::::,:::,,::t2::22::2::2:2:22,,,,:>>1::1>:::::11:", "::11>>:::::::;::;:;:::>;:::::111::>:::::::::::>11::->:1::::>>:>>::>>1><1>>>:><:::>::::::>>>>::>>11,>2,::22>4::::11:::::11111:111:::>>:>>11>111116::51>>>:::>:::>111:::::1::::::1::4:::1::::1>>>>:-:>1>:<><11>>::::1:::1:1::::::::::::11:1>>:>>>:::>=::::>>31>>211111::11:::::11:::111111111:1:1:11:11::111111:::::1111111111111:1:1::::11111:111:::::11::::11::::::::::11111111111:>>>1:>1111>:1:1:1113111311:11111:11::::11111:1::1::11:>211::11>>:1:::::::::::::::>>1:,:::;;<<,:,:2:,tt:::2::,:22::::2:2:222,:,>>:>>11:11:::::", ">:1::::::>>>:;=::::::>::::>::>::::::;:::;<:=:>1::::::1::::::>>>>:::<11>1>>:>><:::>>:>>>>::>>-:>11>>>,2,:2,>4:::::1:::::11:11:1::::;:>-111111111<><>111>>::---:>>::::1:::::::::1:::4:,,::>111>>>>::::::::>>>><::::::1:1>>>>:::::::1:::1111>>>>>>1>:<:;:::>>111>12111:::11:::11::::1113311111:111111111::11:11:::::::1111111:1111:::::1:111111111:::::::1:11::1::::1::::>111111111:1:>1>:>:>11>:::11:1111333311:111:::11:::11:111111>>1:1::>>211:111:1:1::::4::4:44,:,,,,:,:,:,:,:,<:,,4,,,::2,,:,2::1:22::2:22:12:2>1>1,11:1::::1", ">:::1:::::>:4::::::::::::4::::1:::::::;;>>::::111::::1:::>-:>::::::<11<1:>>:,>=:<>:>>>>::>>>>:>>,>>:1,:>,>:::::::1:::::111:::11:>:::>>>>11>>>1111>>>1111>:>>;:>>:11:::::1:1:::::4::4:1,::::11>>>::::>>:>><>>>:::::::1:>>>>::::11:::::11111->>>:>::::;::::>11>>111111::11::::::::::113111111:1111111111111:1111::::11111111::1111:::1:11:11:111:1:::::1:1:::11::::11::>11>>1>11111:11>>1>:>:1>:::::111131113111111::1:1:::111111111>111:1:>1211111:1::::1::::::::4,,::::,,,;:,;::,,:::,:2t:2>>:,::122:22:22:2::::2:>>>1::::11:11:", ":::>:::::>>::::::::=::::=::::1::1::1::-::;::,:>>1:::>>::::::>:::::::>>>>>>>:>:=>>::1:>>>:>:::::111::,>:,,::;;;>>:1::1:1111::1:11>>::>:>>111>11111::11111::-:::1:::1::1::1::::::1;::=>>>>::>>>>>::>::1:>>>:>>><:::>>>>:>>><:::>>>::::111:11::11::::::;<:::>11>111111:::1:::1:::::>11111111311111111111:1:1:1311::::11111111::111::::::1:111:1111:::::::::::::11::::1::>:111111111>>:>:>:>1::11::::1111133113111111:1:11::::11111:131:11:11:1131>1::1:::,>:::4:::::,::;::t,,,:2,;422:,::,22:::2:>,111::2::22:2::2:11::111::::1::::", ":::>1::1::>::--::=:::>::=:::::1::1::::1::;;:>:>>1:;:>>:11::::>:::<::>6>>:>->>:=1>>>:>>1=:::::::11::11>::,::;;:1>11::1::11:1:::::>>-::>1111>1>13131:1111:::1:::1111::::::::1:1:::;;::>,>>>>>>>>>>>-:>>:=>:>>>>:->:::>>>>>:>:::>>::::::11>1:::1:1:::>>:::::>1>>>111111::1::::1::::>11111>>133111>11>>111111113:::::::111:111:11:::::::::1:11111111::::::111:11:1::::1:1::>11111111>>>1>>11:11:11::1::11111111111111:111:1::1:111111::11:1:1::1111>:::>>:>:::::4::4;:,:;,:,,:,:4,,,,::,,::,:::,:2>>::1>:22,2::2:22::1:11:::1::1::::", ":::>:::>>>:::-::::::=:::=::>:::>:>:::::::;:::>:>::::>>:1::>:::::=>1=>5>1>>>>>::>><::5>1::>:1::111111,,::,;;::::1:1::1::111:::::1>:::>:>11111>>1111:1:111:-::::::111:1:::::::::::;;=>:>,:>>>>>>>>:::>>>:::>>>>:::>:>:::1>>>>::>>>1:1::11>11::1111:>>::::::>>>>111111:::>1::11::::111111111111>1>>1>>11111:111:1::*:111:111::111:::::11::111111111::::::1::1:11::::111:::1111111111:>1>>1:11:1:1::111:111111111:1:11111:::::111111:1:::11::1>1121>::>>::::>::4:4:::,:::,:,,,,:4224:,4:,:,,:,,:::,::1::::2:2::22:::11::11::1::1::::", "-::>::::>>>:::::::=::=:::::>1:>:::::::-:::;:,::>:::;:>:11::::1::::>>>>1>>>>>::<>>>><>1>::::::::1::>>2,;;,;::::>>:1:1:1:1:::1::::::-:>:>11111>>1111:1:111::::::1::11::1::::::1:1:::::<<>:>>>>>>>-::::>>:>:>>>1::::>:>:>>:>>>:::>>::::>11>1111:1::::::::>:::>>>111111:::>1:::>::::>1111111111:>1>1>1>11::11111:11-::1111111:1:1:1::::::11:1111111:::::::::1::111::::1>:::111111311::>1>111:1111:::11::131111111::1::111:1:::1111::1:1:::11:>>>11111>>1,:>::::::::::,::;:,,:,:,,:,:,:2::,,,:,,:,2:,:::1,2:,2::212:21::1:::1::::::::", "::::::::>>:::::::::;::>-::-11:>::::::;;:;::4>>:11::=::>11:::::::=1::>>1>>1>:>:=>>5:>5>1::::::;>21:>22,:,,>::;:>1:::1:1:11::1:::::::::>>11111:1111:::11::::1:::1::::1::::1::1:::::;:::>,:>>>>:>:>::>=1>:>>::>>>:::>>>:>>>>>>->>>>>:::>>1>>1::>1>:>>>::::::::1>>1111::::1::1>>::-111311111111:>1>1>1>1>1:1:111:::::::111111:1:11:::::::1:111111111::::::1111:11:::::1::::111111111>::1:11:1111:1:::::11111111111:1:::11:1::1211:11111:11:::1:>:111::>1>>::::::4::::::::::,2::,:,42:4:,,,,:,,:,>11::::22,:222:2::211::1:11:::::::::", "::::>::1::>:::=::::==:>>::::>>>>::1:::;::::,>11:1::::::::>:::::::::>>>>11>>:>:::5>:>>>::::::;:>111,>2><<:>::;;1>:1:::1:1:::1::::::::::>111111:1111:1:111:::::::::11::::::::1111:::;:=<>>>>>>>:>:>-1=>>:>:>:>:>>>:>>::>->>>>:>>1>::::>11>1>>:>>>>>>>:::<:::111:11111:::11::::1-::11111>>1111:>>>1>111>>111111:1:-::::11:1111::111:::::11:1:1:1111::::::1:1::11::::11:::>111111111::>11:1::11:11::::1:1111111111111111122:132111:111:::1:1>:1111:::11::::::::4::>::::::::,2,2::,,,:,,,:tt4:,::>>:1:::2::2::22::21:1:111:111:::1:::", ":>::::::::::::::::::;:>>:::>1>:::::1>4:;,;:>:>111>::::111:::::::>:<>51>>5>>>>:=15>><>>:::::>::>12,,>2::,,,:44;>::1:::1:11::11::1::->>:11133111111111111::::::::::1:::::::::::::1::;>:<>>>>1>>:::>=1>>>=>1:>->>>>:11:::>>>>>::>>>::::>11>11>11>>>:1>::<>::1111:11:1>>>:111:1>1:::>1111>11111:>>>1>1111>11111:::::-::1111:111:111:::1:1:1:1:111111::*::11:1:111::11:1:::>1111111111::>:111:11:11::::11111111111111111:12:::3111111111:::1111111::1::11::::::::;:>::,,::<:1,::::,,:2,4t,,t::,,>:,::1:1::1:::2:22:1::1:1:::::::11:::", "->::::::>>:::=:::::;:;::::::>>:>:::>>:::::::;>>1>::::1:11:::::1:1=>>>111>>>:::::>>:>:>>>::1>::>>2,,1,::,,,::::>>:1::::::::::1:::1::::1111111::111:111:11::::::::::::::::1:::1:::::;>:<>>>>111>>>>>>1>:1>>>::>>->:>::>>>>>>>::>>>::::11>>>1:::1>>>>>::;>::::::1111>:::::11::::-::>>111>1111::>>>>>111>>1:1111::::::::11:111:1:1:::::1:1:111111111::::::1:::1:::::::::::>111111111>::>111:111111::1:1:11111131111121:11::::1:11:11111::1:11:11111:1:::::::::;;;:>>:::::,,,:,:,,:,,2::,:4,::,:::,1:::>21:21:::222::1::11:1:::::::::", "::1:::>>:::1::::>=>::::::::>>>>::::1>;:<:><;>>:1>::::>:>:>::::1::=:>>>>>1>:>:::<>>>::>>>:>1>::::2,2>::>,,:>4:::1:::::1::1:::11:::>-:::11111::1:1:11111>1:::::::::::1:1::::::::::;:::44::5;>>>>>::->1>>>>><:>>>><>>::>>>>>>>::1:1:::1111:>>>>111>>>>:<>>>:1::11111:::::11>>->::>=>>1111>>111:>1>1:1111:1::1:1:::::::111:111111::::::1::11131111:1::::::::1:1::::::1:::::111111111>:::111:1111:1:::1:::1111111311121:1:::::11111121:1::1::1111:1:11:2:::::::::::::::>::::1,:,,24,::;,,,2t,:,:21,,>::2:1::12::22::211:11:::::::::::", ":::::::::::1:::-:::==:::::>>11:>:::1:;::>>:::>>:>>:>:>:>:::::::::::>>>>>1>>>>:::>:::>>:-:>>>::1>>11>>::,,,>:4::1:1:::::::1::::1:>:::::11111:::11:1:1>:>>:::**:::::::::::::::1::::4;::::>>:>>>>>:>>>>1>::>>>:>>>::>>>>:>>>>>:::11::::>1>>>>:>1111>5>::><:::1:11111::1:::1>>1>::::>11111>>111>11>>:111::11:1:11:::*1::111111:::11:::11::::11311111:::::::::1::1::1:::::::1111111:1>:::1::11:11:1:::::11111113111:12:1111::::112112111::11:1:111111:1:::::::;*:4:::>>:,::,::,:,:,,,::,24,t::::::>:1:2:111::::2::22:1:::::1:::1:::::", "::>:::1:::::>-::>>:;><:::::>1>>::::::;:>>>>;::>>>::->>::>::-::1:::=<>11>>>>>>-:>>>::>-:::1>:::1:>1,:>::,,:,::::1:1:::::::11:11:11:-:::11111:::1111:>1::>:::*::::1::::::::::::1::::4:::::::5>>1:::>>>>::>>>>:>>>::>:>>>>>11:::::::::1>11>>>:>111>>>>::>>::>11:1111::111::>::>>:::>11111>>11>>1:>::111111111:1::::*:1:11::111:1:::::1:::1:11311:1:::*:::1:1:::::::>1>::::11111111::-:11111>:1111:::::1111133111111111::::::11:11:1111:::111:1:1:111::::::::::::::1>>:>1,:2,::,,,,,;,,::2t,:::::>:>:2:1:1:32:22:2:211:1:::::::1::::", "::::::::::1:>::>>::::::::::>>>>>::>>:=<>><:>:>>>>:::>>:::1::::1:::>>51111>>:>>=>>::>>:::::1:>-::::::::4,,::4:::11:::::::::11111:::::::11:11::1:111>>1:::::::::::1::::::1:::::::14:::::4:<>>>5:::>>>>>:->>>>>>>:::::>:>>>11::::>:1:::11>:>>::111>>>5:<>::>>1:1111>:1:::11::>>1::::11>>>1111>::>1>:1111::1111::1:*:::11:1:1111:1:::::11::111111:11::::111::11:1::::>>:>1:11>1>11111::1:11:1::::1::::::1111113111:1111211:::1:1111211:::111111::::::1:::::::4::4:::::,,::2:,2,:,:,,,::,::t,:,,:::>>1::11:1::::1:2::::::1:1:::::::::", "-::::::::>>>:-:>:::;:::::::<>:>>:::::-:><:,:;:>>>>::,1>>::::-::1>-:>>11>>>>>::;:>>::::->>11:::1:1:::>:::1::::;:,11:::1:::1111111::::::>>:1::>::1111:1::::::::::::::11:::::::::::4:=::::;::>1>::>->>>>>>>1::>>>:-:::>>>>>>1>>:>>>::::11>:>::1111>>,>>>>>::>111111>>>:->1>>>>>1::::11>>:>11>1::11>11111:11111:::::*:11111:111::1::::1:::1::111:111::::11:1:::11::::11::>>11111111::::>::11::111>::::11:111113112:211:2:1::::111:131::1:11::11:1:11:::::::::4:::::::>:::::2:,:,,:,:::,::,,::1>>:>>::2::::1:1::322:::::11:1:::1:::::", "::>:::1::>:>::=:::::::<::::>>>>:::1::::1:<::>:>>>>>>>>>:::::1:::>>:>>1>1>>:>::<::::>::>>1>::::::1:::>,:2,,4::::,11::11:::111111:::-::::>:11::1:>111::1::::*::::::::::11:::::::::::;::;>4::>>>:>:>:>>>:>>::::>:>>:>:>>>>>>>1->>>>:1::11>>>>:>111>>>2>>>:::>>11:111>1:>1>1>>>>>::::111>111111::1>>:11:11:1:111:1::::11111:11::1:1:::1:::::11311111::::1:1:111:1:1:-11-:>>111111111>:>>11:11::1:>:::1:111113121322:121:21:41111311111:11:111:1:1::1:1:::::::::*;:::>:>>:2:>,:,::,:,:,::::t;::>>,>>::::11::::::::2:21::1::1:::::::::", ":::::::>:>>>>::::::::::::::>>>1>::1:::-:::::::>>>>>>>:::>:>:::::::>>>>>>>>>:::::>>>>:-1>1>>>::::11>:>,4222:4>::1:1:::1::111111:::-::>>>:::1:1:>>>>1::1:1:::*:::::::1::::1::::::::4;:::>::::>:>>:->>>>>:::1::=>:=>>>>>>>1>>>-:>>>1::11111>>:>1111>>2>:>:1:1111>1>1>1->111>>>>::::>11>:>11111:>>11111::::1:111:1::::111111111:111::11::::11111:11::::11::11111:11:11::>>1111111111>-:11111:11111>::1::111:113222222::2:2::11121:1111:1:11:1:1:::11:::::*::::::;:1::>2:,::>2:::,::,,::::,,:,:>>::>>:::3:22:::::22::::1:11:::::1::::", ":::::::::::>>:=::<:;::::::>>>>>::::::::>>:<,::>,>:::>>:>>:>-:::::>->:>>>:>:>::::><>>>>::>>::-::1111:>>::2,::::1111::11::11111:::::-::>>::11::1>:>>:1::1::::::::::::1::1:*::::::::::::::;:::>:>>>>->>>>::::>>1>>:->:>>->>>1>>:>11:1::1111>>::111:>51>:1>-:111>>>>>>>>>111>>>-::::111>:>11111:>>>111:111:1:11::::::1:111111111:11:::1::::111111111::::11:111::1:::::::>>>1111111:11::111:111::::1>::::::12231:222::2222:::111111:111:111111:111::::::::::::*4:::>:::2::22:::,2::,::,:::,,:,::>::>:23::1::1::::::3:1:::1:11::::::::", "=>::::-1:1::::-:::::=:>:->1>>>>>::::::::>>:>1:1:>>:::::1:::=:::::->>::>::>>:>::>1::>1::1:::::::111:>>>::>>:4::>1:1::1:::11:11:::::*:::1111::1:111:11:::1:::::::::::1:1:1::1::1::::4::::=:::>>5>:::::>::>>>>>1:::::>>>:>:>1>:>>1:>:::1111>>:>111:>>1>,>>:>>11::11>:>>-111>>::::::113::1131111111111::1:111111:1:::11:1111111:1:::::1:::::11111:11::::1:1:11:11::11:-1:1::11111>:1>::>>>>>>>>>:11::::1:1111321122:2::211::::111::111::111111111:11:::::::::*:4::11:111:1,>>>,>::,::,:::,,,,:>:::::::3::1::::2::21:2:::3:11::1:::::", "=::::::>::1::::::::::::::::>>:1>::::::;::-:::::1>>:::::::::=:::::::>::>::>:>>:::1::>1::::::::::11:>>1>::>:>:4:1>11:::11:111:::::::4::::1:11:1:11:::::111:1::::::::::::::::::::::::::::::::::>>>>:::::>>>::>:>>>-::>>::1:11>>>>1::>:>11>>>>:>111:>>>,>,>;>>11>:11>>>>>>1>1>>>::::1111111131::1:1:111:::1:1111::::::1::111111111:::11::111:1131111:::1111::1:1:11:1::::::1::11>1>1>::>>111>>>111::::1:11111121112221:3::::1111111:11:::111::::>:1::1:1::4:::::::::::::>>,>>:>,,::,:,;::,,:::::2:,2::::121::::::::22:1:::1::::11::1", "::::::::1::11::::::=;:>>:::>::>>:>:::;;::::::::::::::::::::::::::::>>:>:::::>:->:>>>11:1:::::::121:>::;::11:4::1:1::11::11:::::::::::::111111111:1::1:1:1:::::::::1::1:::::::1:::4:::::::::>>,>::-::->>>>:>::><::::>>>>:11>:>>1::>:>13>1>1>>>>1>:>>5,>::<>11:1111>>>:>1>11>>>::>1111:13311:::1:1::111:1:1111:::::1111111111::1:::11::::1::131::1:::::1:1:11::::11:::::::1111111:>>>>11111>111:1::::::11111111:2223::::::11111:111:1:11111::>>>1::1::::4:::::::22>:>>:>>>1:>,,:1::,,::,,:,:::::::22:::11:2::::2:2:::::::::1:1::::", "::=:>::::::::::-::::;;:>:::::::>:::::::,:=::::::>:::::::::::::=;:1-:>::::::::>>:>:::1::1::::::112>>::::;:::4:::::1:::11:11:::::::*:::::11111:::11:111::1::-::::::::11::::1:1::::::4::::::>>:,1>:::::>>>>>>:>:::::>>11>>:>1>>>11::>:111>>11>>11>1:>>>,>>::>111::1>>>>:>1>>1::>::11111111111::1111:1111:11:11::1::::11111111::11:::11:::::11111:111::::1:1111:::::::::1:11111311:11->>11111>1>1>1::11:::131131112:::::1:::111111111:::::11111>>>>>::::*:::4:::::t:>>::>>>,,::,:,:,:::::tt,:::2,::::::2:1:::1:12:::2:::::1::::11:::", "-:::>:::::::::::::;::::>:::>>::>>:::::4::::;::::>:::::::::::::::::::>::::>::::>>:>:>1:::::1::1112>>:;::,:1444:::::::111:111:::*::4::::1::11::11:1:::1::1::::-::::1:11::1:::::::::44;;,:,::::>5,>>-:>>>>>1::=:>:>:>>1>:1:>:>:>11>:>:>11>111>>115>>>>1,,>;:11:::11>:>>:>>>11::1:-1113311:1111:111111111:1::11:::::::1111111111:1:::11:1:111:1311111::::1:::::::::::::::1111113>1>1>:>1>1>5>>1>>1>:::1:11113:311:213::::::::111111111::11:1111::>>>1::::::44:::4t:t>>:::,:>:::2:,,:>,::t,:;,;:,24222:::1::::1::2:1:11::11::::1:::::", ":::1>:::::1:::44::::=::>::>>::>>:::::;4:;=;:::::::::::;::::*::::::-:>:::::::::->>::>:11::::::::121,::::::::::::::1::11::111::::::::4::-::111:1111:11:1::::::-::::::11::::1:::1:1:4:::,:;:<::>,,::::::>>>1>>::>:>::>11::>1>::>11>::::111>>>>>1>15>>,,,,:<:1:11:11>>1>:11>1:>>>::>1:11111111::11111111:1:1111111::::111111111111:::1:111:111:11111:::111::111::1:::1::1:1131111111>>1>>>>11>11>>>>1::::111113:1:2::1121:::111::1:11::11:111::11:>11:::::::4:::2:::>::::1:>,1::::::>::::,,::::,::::::221:1::::::11:::1:1::1::11::::", ":::1::-:::::::*:=::;;::>:::>::>>:::::;4::;:;->:::::>:::=::::*:::::-::::::::::::>>::::::::::::::1111>::;,:::*4:::::::11::11:::::::4:::::::1111:1:1::11::1::::::::::1:::1:1::::::::4;:;::::>:>,22>::::>>111:>-:>:-::>1>>>>11>>:>11>::>11>>>>>>111>,,>>>,>>11:11:::>:>>>>1>>1>1>>:11:1111:11:::111131111::1:111:11:::11131111:1111::1:1:1::11:111111:::::::::1111:::1:::11111331:11>:>1>>11>1111>>>::11111111131:221::11:::1:11111:111:1111111:1:1:1:::4::4::2::::t>:>::>>>:,:,1:,,,:,::2:,::2:::,:::1::1:12::22:1:::11:11::111::1:", ":::1::::::::::::::;::::>:::::>>:::::::;::;>;:::1:::-::::::4:::::::::::::::::::-:>:::::::::::::1111>:4;;;::::4::::-:>111:111:::::::4::::::111:::111::1::::::::::::1:::::1::1::::::;;<:;:4:>:>>22>::::>>>>>1>>>>>::111111>11>->111::::1>>>>>>>>6>1:,>>>2:>::111:1:>>>>>11>::>>1>-1::111:11:111113131111::::1111:::::1111111:1:111::11:11111111:111:::::1:::11::1::1-::::111111111:>>>>>>111>>1>>>:::::11111:11111111:22:::1111111::11111::1::1:::::::::*4:4:4:2:::>>>>>>>>>>:1,:1:::2,,,:,::>,,:,::111::1:::::222::1:1:::11:1:::::", "::::::::::::::44:<;::::::::::>>>:::*:::44:::4::::::*::::::*:::::::-:::->:::::;;:>>:::::::>::::1:11::::-::::=4:::::-111::11111::::::*:-::1111::::11:1:1:1::::*:::::::1::::::1:::::::::4:::::>,15>>:::::11:>>>>>>::>1>111>11>::>1>:>::>1>>>1:1:111>>1>>5:<11111>1:>:11:11>:::>>::>1:11::11:1::113111111::1:131:1:::::11111111:111::1:1111111111111::::::1::::1:>>::::::11111111>1>:1:>>>111::1:::::::1:1111111111111:32:4:22221311111:111:::1>:>:::::::*:44::,4,::::>>:>>>,::::,2::,:,,,::::1>2:::::11:2:2:2:::21:11::1::::1::::::", "*::::::::::*:::::>:::::::=::>:>>::::::4::4:::::1:::::::::*::4:::::::::::::::::;>>>:::1>>:11:::::1>::::<>:<:;;::::1:111::1::1:11:::::::::111::::11:::1::::::*:::::1::::1::::::1:1:*4::>,4:>>>>,>>>:::1:1:>>>:>:>-:>>>11<>>>>:>>>>:>>:1>>>1::11133>51>>>>>1>:1>:1>>:>:>11>>>>>>::>1:1:1::1111:111131111:1::13111:::::11111:11111::::1111111311:111::::::::::1:::>>::::>11111111>1:::111:11111:111::11::1111:1111333::22:::1:11111:11:1111:1>:::>1:::::44:::::,2,2:>>>>>>>>::2,,:,::,,:;,42::>>:::2::1:::2:::2:2:1:::::::::1:1::1:1", "4:::::::::::::::>:;:=::::;::::::1:-::::4:::::::::::::::*:::4:*:::::::::::::::;=:->>>:>>>:::::>::>:>::;::;:;;:::::1::11::1::1:11::*:::::1111::::1:1::1::1:::::::::1:1::1::::1:1:11:4:4:::<:>>>>>>>:::::11>>:>>>;:>>>1>>>>1>::>>>1>>::>>>>>:>111111>>>:><>>>>:111:>:>1:1>>>>>>1::>1:111:1111:1111111:11:1:11131::::::11:111111111:1::1:1111311:111:::::*:::1:1:>>>::::>1111111111>:::11>11:111:11::1:1:111111111133:222:::::11111111:1:111:::1:1:::::*:44::::::::>>>:>>1>>:::,::,:,,,,,:222:::,:::::1::2:22::::1:21:::1::1:1:11:::", ":::1::::::::::*4>:=:::::;::>::1::::::::44::*:4:::::*:::::::4:::::::::::::::::;:::>>-:>>-:1::::::>:>>;=:<:::;4::::::::1:111:11::::::1-::1111::::11111:11:::::::::::1::::1:11::::1:*:4::,::<>>,>,>>:::1:::>>::>>::>>>>>>>>>>><>>>>:::>>1>>>::>:1111:>>>>><:1>1>11:>:1::>1>>::>1>:>11111:11:11:111111:1:1:111111:::::11111:1:1:11:::111111111111111:::::::::11:::>>::::>>11111>1>1>::11>>>>:1111:::::::1111111111111::222::11:11111:11:1:1111:::1:::::::::4::::::22:,::>:>:2:::22,,::,::24:::,,,:2:1:1:222::2:22::2::1:::::::::::::", "::::::::::::::::;::::::>;::>>;11>:*:::444::::::::::::::::::**:::::-:::-:::::>::::>::-:::1:::::1:::>>::>::::4;;1::1:111:1:1:1:::::::::1:1111::1:111::1::1:::::::::::::::::11:::1114:::;:;::>>>>>>::>:>:1:<>>:>>:>><>1>>>>>>>:>1>>>>::11::>>:>1111>>><>>>>>>>>>11>>>>::>>11>>>1::>11:>1111::::11311111:1::111111::::111111:::11111::11111111111311-:::::::>>::1:11:::>:11111:11>1>-11:111:11111:::::1:111111111131111221:21112111111:11111>:1::1:::>:::4::::>::2:::,:>211::::,,::2,t,:,,422:::,:,,::::222222::2::2:::1:::11:1::1::", ":::::::::::::::*:;::::>>;:;>:;:>>::::4:;::4:::::::::::::::::::::::::1:1:::::>-=>:>::>>::::::::::>:>:::=>:::;4:::1::11111::1::11::4:*-:11111:::11111:11:::::::::::::::11::::::1:1>4:::,:<:;>>>>:>::>>>>1:>5,>>>:>>1>>>1>>111:1:>>>:::>1>:>>::11111><>>:>>11>>>>1>>>>>:1>>1>->1:->>:1:11111:1111311::11:11111111::-::111:111:1111::11111111111:111:::::::1>>:::::1:::::1111:111>>>::::11:11:1:11:::::1111311111111112:1:::1:21213111:::11311:1::::::::;::;:>:::2:2:::::2:::,::,:,::24:,::2:,:::,:>3:2::::22:2222:2:1:::::11::1::11", "::::::-:::::::::<:=:=::::;::::::>:::::;44:::-::::1:*::::::::*:::::::::::-:::>:::::>:::::::::::::>:>::=>>:>=;4;::11:::1111:::11:::4::::11:11::1:111:11:1::*:::::::::11:1::::1:1:1>:4::,><<:>5,>>::::>:::>>>>>1>>:>1>:>1>111<::>>>::::1:1:>>:>131>5>>5>>>>1>>>111>>:1>:1>11>>>::::>:1111111::1113111:::11:1111111::::111:1:11:11111::11111:1111111:-:1::::::::>1>>>::>::111:>1111>:::1::111::11:::1:11111113111111111111:1::211:11111111111::::1:::::*;;::::::2::::::::2:2,,2:,,:,,,:,,,:::,2::22:2:::2:2222:::22::1::::1::::::::1", "::::::::1:::-:::::::;:::;;;;:4>:::::::;4*::*::::1::::::::::::::::::-::::1:::>>=>>--:::::::::*::11:>:::1=:::;:::::::1:1:1:::1:1:::::::111::11:::1111:11:1:::::::::::::::::::::::1>4:::4:;:<>>>>>>>:>>1:>15>::1,>:>>>>:1:>1<::>1:>:>::11>::::1111>:;:>>>>>1>>>>11>>:>>:11>1>>>>>:>>:1:111111:113111111:11:111111::::1:111:1::11111::1::11111311111::::::::11::::1>:::>111111>1111>::11:1:111::111:::::11111111:111111211:::122211::1:11:111:1:1::::::::::>4::::::,2:::2:2::::2,2:,24,:,,:::2:::22:2::2:3222:2::2:::11:1::::::::1::", ":::>::>:>:::=:::::::;::::**:-:1:>:::::*::4:4::*:1::::::::::*::::::::::::::::::*::::::=::::::::::>:>:::>::::::::::::1::1:1:1::1:::4:::::1::11::1111:111:1:::::::::::::1:::::::::::::*::::;>>>>>>>::>>::>>1>=>1>:::>>>11>::1::111:>::>11>::::1111:11:::>:>>>>>>1111:1::11:11::1::::11:11111:1111131111111:1111::::::11111111:1111::11:1:1111131111::::::1::1::11:1:::::1111111111::11:11:1::1:1:::::::11111311:11111:1:1:11:11111:1:111:111::11::::-::::*:::::::11>>>>>>>>>>:,,,::,,1:2,::,:::222:22:1:122222::1:2:11:1::::::::1::", "::::>::>>>:::::;:::4;:::::::1:::::::::*:4::::::::1:::::::::::::::::*::::::::::::4:::::::1::::::1>>>:::>::::4*::1111::::1:1::111::::::::11:1::::11:::111::1::*:::1::::::11:::::::::::::::>>>:>>11:::>:::>11>:1<:::>>1::1:1:::::::1>:>11::1:::111:1::1>>:>1>>>>11>:11:::1::::1:1:11:1:11:111:11113111111:::111:::::::1::11::::11:1:1:1:11113311131:::::::1:1:::::1::::1::11:11111:::11:::1:1111:::::11111113111111::111::::1111:11>11::1111::::1:::::::::>>:1::::1>>:>>>>>,>:,,:2::::,,::,12:::::2:::2121::2::112:1::1::1111::::::", ":::>:>:::>:::::;::::;:4:::::1::1::*::::44::::::::::::*:::1::::::::::::*::::::::*::::::::::::::::>>:::11::::*::::1111:::1111111:1::::1:111111::1:1::111:::::::*:::::::::::::::::::::::*::>>>1::1::::>::::>>:>1><:>>>>:11>::::1::1>>:>1>:>1:::111:11>1>::>11>>>6111:11::111:::1::1::1:11111::111111111111111111:*:::111111:::111:::1::1111:111111::::::1:::1:::11:1:::::111:111111:1::1::11:111:::::1111111313111:1::111::1:11111111:111:11::11::::::-:::1::1::::1>>>:>>>>,>,,,22::,,,2,:>1:2:2:::::2::2212:1::1::1:1:1::1:1::::::", ":::::>:::::::::;:::;;::::4:-:::11::::::::4:4*:::1::::4:::1::*::*:::-::1:::::::::::::::::::::-::::>,:,:::::::4::1:::11:::1:1::11::4:::111::1::1:11::111:11::::::::::11:1::::::::::::::::::>>:1111:>1:1::>->>:>>:::>>>:1>:1::::1:1>>>11>:>1::1111:1111>::>11>>>11>::1::1:::1::::::::1:11111:::11111111111133111::::11111:11:::111:1::::111131:111:::::::111:::::1:::::1111:1111:1::11::::111:::1::::::111111111111:111:1:::::111:1::1111:111::::::::::::::::::::::>>:>>>>>>>>>,,,,2:,:2>:>1::::22:22:2:2121:1::::2:1:1:1:11:1:::::", ":::::1::::::->:>:::::::::*:::::1::::4::*4:::::::::::*::::1::::::::-:::1:::::::::->>:::::::::::::>:1>:::::::4::::11:11::1:11:1111:--:::111:11:::11:::11:1::::*:::1::::::::::::::1::::::::::>>>>1:-1:>>::>1>>:>:::>>>>>1>>::1::1::>>>>1>>>1:-1111111>>>::>1:>>>11>:11::1:11::::1::::111:111::1:111111111:13311:::::111111:1:1111:::1:::111:111111::::::::::1::::1:1::::1111131111::11::11::1::1:::::1:11::111111111111:1::1:111111:11:11:11:::11::::::4::::>>>::>>::>>>>>>>,:,1,,:,:2:t:>1,::::2>>:22::222:::::2:::::1111:::::::::", ":-::::::>:::::::::;:4::::::::::11::::::44:::::::1:::::::11:::4::::1::>::::-:::::1:::::-:::::=::1>:>>:::*:::44::::111:::1:11::1::::::1111:11:111111:1111::::::::::1::::1:1::11::::::4:::*:>>>>:>11::>:::-:1:>1>:>1>>>>:::1:::1::1:>>>1>:>1:11111311>1:>::>1:>111>:11:::1:1:1:::::::1:111111:111111111:11:3311::::::111111:::1:11:::1::1:1:13111::::::::1:::::11:1::::113111111::::11::::::11111:::::1111:3111111:1:::1:::::1111111111>1:11:1::::*:*:4::::>>>-::::>:>>>>>:,,,::,>>:,,22:::,:::2>2>2:222:::22:2:222111::1:::1:1::::", ":-:>:1:::11:::<:::::::::::4::::::::::::4:::*::-11::::::::1:::::::::-:>>:::::::::>>:-::::::::;:::::2>:::::::::::1:1:1:1:1::1:1:1::::::111:11::111111111:1:::::::::::::::1::1:::11::::::1::>11111:>:>>>::;>>>>>>>>1>1>>>:::1::>1::>>:11>:>>::111111::>:>>>1>>>>13>:11::111::::::::1:1:1:111::11:111111:1113311:::::111111111:1:11:1:1:::11111111::::::::::1::::1:1:::1:11111111:::::1::11:1:>>:1:::::1111:1111:1111:111::::11111111111111>1::1:::::*::::::>>>::::>>>:>>:>>>2,,11::,:2t2:,:,:::::>>2:22222:222::22:1:::::1::1::1:::", "1::>1:::::::::::=::::::::*::::111::::::**::::::::::::*:*::::4*::::::::>:::1::::*::::::>::::::::>,:1>*::::4::4:::::111:11::1::::::::::111:111:1:111:::1::::::*:::11::::::::::::::::::4::4>>::1:>>>:>:>::<>>>>>:>>>>1>1>>:1::11111>:>11>>>:::11111111:-1::1>>>>16>1:1::::11:1:1:::::11::11111:1:11111311113311::*::11111111::11:::11:::1::1131111:::::::1::::::1:::::::11111:111:::11:::::::11:1::::::111111::1131:::11:::::131111111>>1>>1:::::::::::::::>>>::::>:>>>>>>>,,>1,:,:,::t2::,,:,,22:>222:22:::22::2t2111:::1::::1::1:", ":-::1::-::>::::=::<::::::-1:::::::::::::*::::::::11:::::::::::::::::::>>:>:::::::::;->>::->>:::11:1,::,4:::::::11:11:1:1:::1::::-::::1111111:1:1111:11::::::**:::1::::111::::::1:*::::::::::>>11>:1:1:::>>->1>>:>:1:1>>:1:::11>:>>:>11:1:::11>11>11:=::>>>>>>11<:11::11:1:>:1>:1::111:1111:1:11133131:1111111:::11111111111:1:::11:::1:1:111111:::::::::1::::::1::1::1:111111:::::1:1::1:11:11::::1:1111111:1131:1:11::::11133111:11>1>:2::>::::::::::::-1:::->>::>>>:::>>>,>,,>:,:,2:>1,::,22:>:2:22:2:2t:::2221:::::2:::1:::::", "1::::::::>:::::::>::::::1:::1-::1:::::*:::::::::::::*::::::::*:::::-:::1::::::::::::::>:::>:4::12::>::>;:1:::::1:::1:::1::1::1::::::::111111:11131:111:::::::::1:1::1::1::1::::::::::::::::2>>>>>:::1:::>>>>1>->1>>>:>::>>::>>>>>:>>1>:>::::1:>:>:>::=:>>>>1111>:11::::>>>:>:::11::11:1:1::111:1111311::11111:-:1:11111111111::::::::1111111311:::::1:::::::1:::1::1:111:1111::1::11::1:::1::>1::::::1111111111::1111::::1111111:1112112::::::4:--:>:>>>>>>>>>:>:>>:>:>:>:>>>:,>::,,,>>::,:,22>22222:2:2:t2::,t211::222:1::1:1:1", "::::::::>->>::=:::=;:::::-:::::11::::::::::::::::1:::::::::::::::::::1:::1:::::::::>>:>>::::;::22>>>>:;;11::::::::11:1:1:::111:::::::1131111:11131::11:1::::::::1:::::111::11:::::::::::4:211>>>:::1111:>>->>>>>:>>::1>>>:::>1>>:::>11:::::11>1:>:>::;-1>::>1111:11>::1>1:>>>:::1:111:111::11::113111:::1111::-::111111111:11:::1:::1:111111111::::1:::11:::::1::::1:111111111:::::11::1::1:11:::1:1:11111111111:1111:::1111111:1:112,>21:::*:::>::>>>>:1>>>:::>>>::>:>>>:>>,:>::::t2,1::2:,2>2>22:22t2:2,t::,22:1:::2::1:111:::", "::-::::::>->:::::::::::::::::::::::::::*4*::::1:1:::::::::::::::::::::1:::::::::<:>>>::>::1-;:;22>>>;:;:11:::4:::::11:1:::::1:::*::::1111111111111::1::::::::::::1::::1:1::::1:::::::::*::>>,::>::::1:::>>>>>>>>>>>:1:1:>1::>1>>::>>1111>::11>1::>>>:;>>1:>>1111:1>:::11>1>>::::::111:1111::1:1:3111:::111:11:::::11311:1:1::::::1:::111111131:::::1:111:::1:1:11::::111111:111:::1:1:::::11:11::::1111:111111111::11:::::111311::11,>2:1::::::4-:::>::>>>>::::>>::>>::>>::>>,>::::21>:>::222>:>:2222222:,2::2:::::1::2:::::::::", "::*:11::->>>:><::::::::;:::::::1:::::1::::::4:1:::::::**:::::::::::::::1:::::::-;:><>:>-::>:=::>1>2>>:;;111::::::::1:1:::::111::::::::11:1:1:11:111:1::1::::::::1:::::1::1::1:::::::1::::::,:>>>:::>::::>1>>>>::>>1:::1:>:::>>>>>::1111::>:11>>>::1><::<1>>:1111:1:::>>11:1::::::11:1:1:1::111111:1111:1:111:::-111111111111:1:::1::1131111111::::::::1:1:1:1:1:1:::::111111111::::1::::1:11:11::::1111111111111:::11:::111111:11>1222>2::::::::>::>::>>::>>::::>>:>>::>>>>>>>:::::t1:>:,,:11,1>2222::2::t,,,22::2::::2::111:1::", "::::::::>:>>:=:::::;:::::::::::::::::1::4:2::::::11::::::::::::::::-::1:>::>::::::>>:::::::::::>1>1>>:::111::::1:::::1:1::1:1:::::::::1:11111111111::1::::::*::::1:::1:11::::1::::::1::::>2:>>>>>::::11:>>>>>::>>>>11:>:1::::11>>::11:1:::>>11>>1>5>>::>>>1>11111>1::>1>1>::::::1:1:3:1:11:111:11111:1:111111:::1111111111:11::::1:1:1111311111::::::11::::::1::::::1111111111:::111:11::11:111:::1::111111111::::11:::::1:::111:1>222221:::::::>>>>>::1:>>::::>:>>>>>:>>:>>1>:>:::2,,:>:,,1,1,>:2:2222:,,,::2::4:::2::21:::::1:", "::::::::>::::==1::;::::::::::::11:::::::*::::::::::::::::1::::::::1-::1::::>::::;::>;;:::>>:=::>>>1:>:,<:1:::::::::::11:::1:1:::44:*:::1:111:1::11:::::11:::::::1::1:1::::1:1:::::::::1:4:222>>>::>>1:::>->>>>->>>>>>>:>1:::111>>:>>1:::>::>11>>>:>1>-::>1>>111<11>:>>1>1>1::::::11111:1:1::111111111:1:1:11:::::11111111:1:1::::1::11131111111::::::::11:1::1:::::::1111111111:::1:1:111:11:1::::11:111111111:11:111::::1:1111:1111222,:::1:::4<:<>1:1:>::>::>5>>>>>>:>>>>>1::::::t>>::>1,11>112:::22:2t:,,::2::1:::::2:11:1:::", "::::::1:::>::>:::-:;=:::::::::11:::::1:*:::::>::::1::::::1:::::::::1-::11>:>:1:-::::::>>:>::;;:>>>1:>;;;111::::::::::1:11:1:11::::::::1:1111111:11::1:::1:::*:::::::::::111:11:::*::1:1:::>::>>:::>>:1::>>>>>:::>:1::>>>1::::1>>>::>1:1:>:>>>11>:<>5>:::>>>>111>>1>:>>:1:>1>:::::11:111:1::11:1:1::1:1111:::::-::11111::11:11::::11::111111111::::1::1::1::1:::1::::::11111:111::::1::1::1:::1:1:::1:1:1111111111:11:::::111111111112:2:2:::::::::>::::1::>>>>>5>>>>>:>>>>>>>1:::,,,>>>:>,>,:111:222::2:2:2::,::::::22:::1:11:::", ":*::::::::::::::::::=::::::4-11:::::::::-:-:::1::11::::::::::::::>::-:1>>>:>1::::::::::1::::::::111:::<;,,::4::::::::::::1:::1:::::::11::11:11:1111:::::1:::::::::::1:::111:11::::::>>>-:>>>>>>:::::1>::>>:>::::>>>:>>::>>:::1:::::11::>::>>>11>>>>>:;:>>>:>1:1111:::1:1:1:1:::::11111:111:1111:::1::111:11::::::1111:1:11:1::::1::11111111111::::::1::111::1::1:::::111111:11::::>>::11::1::1:1::1::1111111:111::::1::::11113:1>21,221>1::::;;::>>:>>>:1:>>::>>>:22:::>>1>>>>>::,,>,:,:2:::::2:2:22:21:222:,,:::2::22>1::111:::", ":::::11:::1:::::;:::;;:::::::::::::::::4>::::::::::1:1:::::::::::>::::::>>::::::-::::::::::::4::>>1:>::,2>:::4:::::::1:::11:11:1:*:::11:111:>:::11>>:::1::-::-::1::1:1:11:11::::>::=>>>::<>11>>>>::1>:::::::1:::>:>::>>::::>1:>>::::1:::1:>>>>1>>=<>::=>>>>>:11::11:::11111::::::11111111:11::11:1:111:11:1:::::1111:11:111:1::::1::111111111::::::::::11::::1:::::::1111111111:::>>:1:11:1:::1::11111111111111:1::11:::111111112,22221111::::::>>>:>>>>1::>>>>12:::::>>>,>>:>:>:2:2:2::::2t2222:2:22::22222:::2:::::::1:21::111", ":*::1:::::1::::*:::;;;:::*4:::1::::*::::><:::::1::11:::::::::::::>:::-11:>::::1-::::::::::::4::1>>>:::;>>:>;:=:::::::1::::111:::::::1111111:::::111>:1:>::::*:::::::1::::11::1:1>:>:>>>>::>111>>1:1:>::::::1>>::::1:>>>>>:::>1:>1:111::>:1>>>>>>:<<:>:::>>>:::1:::1::11::1::1::1::111313111:111:1:1:11111111::::1:1111:111:11:1::1:11111111111:::::1:1:11:11:::11::::1111111:11:::>>:111::1::1111::111:111:111:::1:11:::11111111>2,1222>>>:::;;:>>::>1>>>:1>>>>1>::2,:::1,1>:>>::2,:2::22::2222:22:2:22::22::::t2:::::::::,:::::", ":::::::::1::::::::4:;:::::4:::111::4::::=:::::::11:1:::::::::::::>::::1:1>>:::1::>::::1::::::4::>>>:::;:::>;;::::::1::11:11:1111:*::1:1111::1:::31>>11:>::::::::::111:::::11::1:>:-:>>>::><>1<>>:::1>:::::::::-::1::>::>>::11>>>:::11:::1:>>>>>>1::>1->>>>:>11111::1:1:11:1::::::11111131:::1:11:1:1111:1:1:::::::111111::1111::::1:111111111:::::::1::::::::1::::::11111111111:::11::1:111::::1::::1::1111:11:111::1::::1311111>2112221>:::;:4,>>:>:>>1>::>>>>12:,::2,,:>,>>>>::2,2:::2,222:22::::::1:22::2::2::::::2>:112:1:11", "::::::::::::::::;:;4=::1::::::::::::;::4=;:<::>>:111::1:::*:::::::::->>>::::::::::::1::::::::4:1>>:::::;:::::::::::::::::11:1:1::::::11111::111126::>>>>:::::*::::111:::::1::111>>::>>>5:>:>>1:>1:1:1::>::::::->:1:::>:>>::>1>:>::111::::11:1:>::>>>>-:>>>>>::11:11::1111:::::::1:111111111::11:1::111111::::*::::1111:11111::::1::::11111111::::::1:1:::::11:::::::1:111:1111::::11::1::1::1::11:::1:11111111111:::1::::1111111>222>21>:::::;;>::>>:::>>::>>>>>>>2::,,,>>>>>>,>:2:,::2:,:22:22:2::::2122::2t224:::2:,:,:2:22::1", "::::1:::::::::*::;::;:::::4:::111:*:;::;;:<:::>>:11:::::::::::::1::::>>>>>:::1::::>::1::::1::4:::>:::>::::::;:::1:::::1:::1:11::::*:::11111:1>:111>:>>>::*:::::::::11::::1:1:111>1>:>><>::>>1>>>1:1::::>>::>:::::1:1>>>::::>1>>>:::11::>:1>>>:>><>>>:>>1>::1111>:::::::::11::::::111:11111111:11111:111:11:1::*:1:11::11:::11::::1:::1111111::::::::::1::1:::1:11::::111:111111:::111::::11:1:11::111::11:1111111:111:::11111111>21,222>1>::;:>,>>>>>>>>>:>>>:>,>2>:>>,::1>:>>,:>>2::42,:22:2::22:::42:2222t:::22:::::,:::222::1", "::*:::::::::::::;::;::::::*:::1:::::::;;;;:;:1:>:111:1::::::::::>:::>>1>>1:::::::>>>::::1::1:::::::>,>><:::4:::11::::11:1::::1::::::::1111::1>1111>::1:1::::*::::1:1:::::1::::::11>:>>>>>:>>1>>>::11:::>:::::::::::::>>:>1:1>>>::::11:>>>>111>>::>>>:>>=>:::>11>::1::11::1:::::::11111131111:11::11111:11:1:::::1:111:1:1:111::1:11::1111131::::::::1:111:1::1:::::::11:1111:1:1:::11::::11::1:11::1111111111:::11:1:1:::11:1111>212222>11:::;:>>>>>>>:>>:>>,>1,>>1>:,::>:11>,:,:,,::tt2:t:22::::::::2:22:::::2:::,::,:,>:2:::::", "::::::::::::*::::::=:::>:4:::::::::::::;;;:::::>:1:1::1:::::::::>::>->11>:1::1:-:>>>::::::::4:::>:>>>>><>:::4::::1:::311::1111::::::::1:11::111116>>:1::::::::::::1:11:::::1:1:11>>:>><:::>5>>>>1::1::>>:::::::::1:>:>>:::::>>>>::111::>:>>111:::>1>:=>>>>>:>11>1:1:::111:1:::::11111111:11:1:1::11::11::1::*:::1::1111::1:11:1:11::1:11111111:*:::::1::1:::1::1:::::111:11111::::111:1:111:1:11:::11::111111111::11:1:::1111111>>22232>1::::::,>5>>>>>:>>>>1>>2,>21:>2:>:::112:,:2::::::22:22:2:22:22:2222:::2::::::,,:>22,2:2:", "::-::::::::::::::::;;:::::::::1:::::::::4::>::::1:1::::1::::::::1:::::>>>>>:::::-1>>>>>:::::::::>:>,:,:::>:<;4:>:1::1111:11111::*::::11:111:1:11111:111::1:::::::1:1:11::1::>>>>:>:::>1:::>>>>>:1:1:::>>:>:->:::1:1:1:>>:1::1::1::111:>::>111::1>>>>::>>>1>>>11>:1:::::11:::::::111111111::1:1:1:1111:::1:1::::::1111:111:1:11:1:1::111111:111:::::::::11:1::1::::::111:::11111::::1::::1::11:1::::::1111311111111::11::::11:1112222222:>>>:::>,>1>>1111>>>>>>>,>>2>>>:22:::,2::,,,:::,,22222::::2:2:2:22:,:::2:>>>>:2:,2:221>>>", ":::::1::::::-::::::;;:::::-::::1:::::::::44::::>::111:1:::::::::::1:::>>>>>>:::::>>>:>1::::::::::::>::::>2,::;::*1::111111:11:::::::::11331:11::31::::111::::::::::::::::::1:>>>1:::-:::::>1>>>::::1::::>>::>>::::1:1:1>>::::11:::111:11::>11::1>>>::->>:>>>>11>1:1:::1111::11:1:1111:11111::1111::111111::1:::::11111:1:11111::::1::1:11::11:::::1:1:111::1:::::::::1111111:1:1::1111:11:1:1:1:::131::3111:1:11111::1::1:1::12112>2222:>>>::=:,>>>>::11>1>:>2>>1>1>:2222:2,::2,,,2,,:,,2::3222:4:2::222,2,2,:22:,>>,:2::2:>>>>,", ":::::::::::::::::::;:::::-::::11:::::::44:::>::>:1:11::::::1::::1:>>:>>>:>>:1:>::->::>:::::::::::,,>>>;>>,>::::::1::1111:11:1::::::::111111:1:1111::1::::::::::::1::11::::::::>>::-::>>:::::>>>:1:::::::>>:>>:->:11::>>>>:::11:1::::11>>:>>11:11>>>:::>>1>>>111>1:::::111::::::::11:111111::1111:::11:1::1:1:::::111:1:111111::11::::1111:::11:::::1:11:::1:::1:1:::::1111111:::::111::11:1:1:11:::11::111111111:11:11::::11121:1112122::,:::::>1>>>1:::>,>:,>>>1::2>:2,2,2,,,,,>22:242::2222t:::2::221:2,2:t:22:>>::2:,:2>>1>,,", "::::::::::*:::1-;:::;:::::-::::1:::::::::4:::>:>::11::1::::::::::::::>>>:>>::::::::::>>>:1:::**::>>>,>:,,,>:;::>:11:111111111:::::*::11:1111:::111:1:11:1:::::::::::::1::1:1:1>>>:::::::::>1::>:>::1::::>:::>1->:1:1:1>>:>::1:1:::11>:1::>111:::>>::::>>>>>>11:11:1:::111:1:>::::111111111111:1::11:11::1:1:::*::1:1111:1:11111:::::::1111:11::::::1::1:1:::1::1::1::1111:11111::::111:::::11:::1:::1::11111113::1:::::::1:1:211:121111:::::>:>:>>>>>:1:>>1>11>,12::2::,2:2:2:,2222:2,2,:1:::2:::t2::2:2:2,t::2:>>>>::::::2>>:::", ":::::::::>::::::4::;::::::::::11::::::*::*::1:::::11:::::::::::::::>::>>>>:::::::::::::::1:::;<:>1>>:>>>,,::;::1:11::11111111::::::::131111::11:11:::1:1:::::::::::::1:::>>:::::>:::::::-11:1:1::::1>::::::>::-1:1:::>:1:::1:1:1:::11:11::>11>>>-1>>:::::::11:11:1::::1::::::::::111111111111:111:1:::11:1:1::*::11111:1::111:::1:1:1:111::1:::::::1:1::1::::1:1:::::::11:11:11::::1:1:::1111:11:::::1111::1211111:11:::1:11111::1221:1>:::;>>:>1>>>::11>>>1>>1,>1>2:2>1::2,2:222t2::,2:t:::2:2::t::224:2:,2:::2:>>:::2:::2:t4t,", ":::::1:::::*:::*::;:::::::::::1:1::1:::::::::::11:1::::::::::::::::::::>:>:::::-::::::-::1:::;::>>>21,>;:1,:4::1:11::1:::111:11::-::1111111::1111:::111:11::::::::::::1::>:>:>::>>;;:<<;::11::::::::1::::::::::::::1:::::::1111:::11>:1::>>11>>>>1>>::>>11::11:1111::::111:11:::11111:111111111111:111:11:1:::::1:1111::::1111:1:::::1:11::11::::::1:11111:::::::::::11111111:1:::111:1::1:11:111::::1:113112::31111:1:::1:1:11:112221>>:>::>>:1>>>>1:1:>>>>>>>,>>2>:>>>22,22::2,t2::22,:2:222t:2::22:21:2t22t2:1>>>::::::2:4t;,", ":::::::::::::::::::4*:::::::::1::::::::::*-:::::1:11:::1::1:::::::>::::::>>:::::-::-::1:::::::>:12>21,:::21:4::1111::1::1:111:::-:::1331111:11111::11:::11:::*:::::::1::::1::>:::>:;::><11:11::1:::1:::::::::::::1:1:1:::::11:1::::11:>::>11>>>::>>:::>>:::11>111::::::11:1:1::::111111111:1111::1111:1::111:::::1111::1:1111::11:1::11:11:11::::::11:1:1:1:::::1:::1:111:1::11:::11:1::1:1:::1:1:::::11131111111111111:1:11111:112>12>>:::::>>>>>>>:11::1>>>>>1>2:>22:122,:22:,,:,,,::2222:2,2::::2222:2t2t2:2:>::1::::,:::t&&&", "::::::::1:::::::::::::::::*:::1:::::::*:::::1:::::11::::1::::*::::::::11-1:::::::::::::1:::::;::>2>62,::,2>:::::11:1:1::1111:::::::131111:1:1:11:1::11:::1::::::::::::1:::11:>::::=::<::::1::1:1:::::::1:1::>:::::1:::::::::1:::::::::11:>>1>>>>:1>>::::1:::1>1111:::1:1:11::::::111111111::1111111:1:::11::::::11:111:1:::11:::1:::::111:1:1:::1::1:1:11::1:::1::::1::1111:11:1-::11:1111:1:1:11:::1:::221111:21111:1:::1:111:1111>22>::=:>::>>>>>>:1:11:>>1>>1>>>2>:1:1:22:22,2222>2:::22:2:2::,2::22:2:2222221:::1:::::2:t&t&", "**#&&&&&dSCCCCCCMdt&&&&&&&&#&CCCCCCCCCCCCCCCCCCCCCCCCCCS+++@+CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCm<&+&eCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCs++mCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCq++;+@@@@$$@qsssddssdlACCCCCCCCCCc7@@+o@@@Oo++DCCCCCCCe+++&eSCCCCCCCCCCCCCCCCCCCCCC8+++#O++wmCCCCCCCCCCCCne#++OO##X", "##++&4tSCCCCCCCCCCCCCCCCSt&+&&&&CCCCCCCCCCCCCCCCCCCCCCCCCZ&&++dCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCVu+cCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCs#@CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCV<+++kCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCMr909yDSZCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCB;@+@+tCCCCCCCCCCCCCCCCCCCV9&@@++@7MCCCCCCCCCCCCCCCCCCCCCCCCAbbMs9O@5VCCCCCCCCCfknCCCCCCCCCCCCCCCCCCCCCCCCC8+++##VCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC9#OOXqZCCCCCCCCCCCCCCCCCCZrOO##X", "&#&#aCCCCCCCCCCCCCCCCCCCCCCe#&#&CCCCCCCCCCCCCCCCCCCCCCCCC<++&VCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCkddmCCCCCCCCCCCCCCCCCCs+9CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCr$$+$lCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCVvzD0scCCCCCCCCCCCCCCCCCCCCCCCCCCbsi9rZCCCCCCCCk*@*@OOXX#OOo+eCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCro@+qCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCksCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC0oXowCCCCCCCCCCCCCCCCCCCCCCw+oo.", "###rCCCCCCCCCCCCCCCCCCCCCCCCe##&CCCCCCCCCCCCCCCCCCCCCCCCk+&+bCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCAbBCCCCCCCCCCCCCCCCCCCCCCCCCCCr+#++rCCCCCCCCCCCCCCCCCg+9CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCZ&++OqCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCe###O@OO@OycCCCCCCCCCCCCCCCCCCCCCCC0ooXobCCCCCCCmO@@**OOo.#@+o@+rVCCCCCCCCCCCCCCCCCCCCCCCCCCCCk+$@0CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC9oXqCCCCCCCCCCCCCCCCCCCCCCCCq...", "##,ZCCCCCCCCCCCCCCCCCCCCCCCCA8##CCCCCCCCCCCCCCCCCCCCCCCC;++rCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCm+@;BCCCCCCCCCCCCCCCCCCCCCCCCCC5@+++DCCCCCCCCCCCCCCCCCs+9CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCd$+%&MCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC##oO@@$@*@*@*9uCCCCCCCCCCCCCCCCCCCC,@@@&mCCCCCCC=oO***@O%X#o+oOO+,ZCCCCCCCCCCCCCCCCCCCCCCCCCCCV+++2CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC9oOO-@O-**=CCCCCCCCCCCCCCCCB5omCCCCCCCCCCCCCCCCCCCCCCCCCC9XVCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC7oX0CCCCCCCCCCCCCCCCCCCCCCCC0...", "o+O#eCCCCCCCCCCCCCCCCCCCCCCe++++CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCb+ o&VCCCCCCCCCCCCCC8+qCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCNOXO#&ZCCCCCCCCCCCCCCCCCCCCCCCCCCCm90XOXXO0CCiwuCNoo.oo..#X#X. .oOoo#CCkvcCMOOOOOXbCgbyCCq@@o+@OOO*@O***X-XX-0CCrckCBOOooXO5CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCn$@$5CCCCCCCCC5Oo0kCCCCCCCCCCCCCCCCCCCCmoX.=CCCCCCCCCCCCCCCCCCCCCCCCCC", "CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCwoo+O@mCCCCCCCCB+o XO.5CCfCjCCoO@OO#XOX...... ..XOOCCvCbCvXOooo.vCs7CCCCCCCCCCvNNcCCVXXoOXoyCCD:uCNOo .oooXO..oo..#XOoOCCu9kCM@@@@*@bCkr9CCqOO+#@Oo#*OO@*OX-X-XX1CC0ibCC=XoX@@OBCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCroo,VCCCCCCCCk#ofCCCCCCCCCCCCCCCCCCCNrXDCCCCCCCCCCCCCCCCCCCCCCCCCC", "CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCmbmCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCbOO#o#0CCCCd++.o@OwCCCCCCVooo@O#O.XXXX......OO%OCCCCCCbooo...vCso.CC9XoXo.oXX#@%O%OOo+%O#ACAd8ClOO..ookCCCkCkVCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCVbCCCCs$@CCCCCCCCCCCCCCCCCCCCZs%O#OOXO+O$+,fCCCCCCC<@@@Oo@XO@*OXXX+OOOOOO-OsCCCCCCCCCCkCkCCCkOXoOX+cCCCCVCkOo..oooOOo.oooX#XO+OCCsskCS=*@O@ObCCCCCCq@Ooo@O@*XX**@OOXXX--XZCCCCCCyXXX@OXsCCCCCCCCCCCCCCCkVCCCCCCCCCCCCCCCCZ;oouCCCCCCCCV#o$CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC", "CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCd<#++nCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCb$O#.okCCCC<++o+#ozCCCCCCkOooO#X#XXXXX.X. .OO%%CCCCCCboo... vCDCDCC9Xo#o.oOX#+%$OO+O++%#jCn5fbC$o.ooOrCCCBzCzCCCCCCCCCCCCCCCCCCCCCCCso#OOoo$+OnCCCs+$CCCCCCCCCCCCCCCCCCCCCCZf,+OOOO+$$+XCCCCCCbo@@OOoO#OO+O+XO+O-O-OOO6VCCCCCCCCCV6kkCCCqoXOOO=CCCCCCCr-X..ooooo.o.oX.ooo+oCCbCbCb@*@@@@vCCCCCC8OO@+o@o@OXO@*OO-XX-X-hCCCCCCzXOo*@o>CCCCCCCCCCCCCCm$bCCCCCCCCCCCCCCCCCb.o#vCCCCCCCC0+#CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC", "CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCe++#&@bCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCq++..kCCCCz@#++++=CCu7zCCr@OOO...XOOXX... ..oOO%CC9#sCbooX. .vCsCsCC9oOoo.OXXo+%+++O.O%+oqCClCfCwO.oXO+NCCCku5CCCCCCCCCCCCCCCCCCCCCCCo.OOO@@O$+OsCCs$@CCCCCCCCCCCCCCCCCCCCCCCCCVk++O$%+oOOo.o:CCfCcCCyOOo .oXoOooooo...O@#OCCu9hCb@*X@XobCsCsCC8O@O#XOO@O@*@=O*-X-XXX*kCmmVkCBXOoOOX.ACCCCCCCCCCCCkO=VCCCCCCCCCCCCCCCCCCz#+$VCCCCCCC&+sCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC", "CCCCCCCCCCCCCCCCCCCCCCCCCCCb+o###&dVCCCCCCCCCCCCCCCCCC9,mCCCCCCCCCCCCCCCCCCCCCCCCCCCNO=VCViOOOooo@oo+Oo..#+oo$ZCCCCCCCi#7CCCCCCs+bCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC", "CCCCCCCCCCr#sCCCCCCCCCCCCCku0uCCCCCCCCCCCCCCCCCCCCCCCCs.o. .ooo5dnCCCCCCCCCCbu<..++@,mCCCCCCCCCCCCCCv8$ZCACCCCjXOXOOooo.oooOOXXX......OOCCnvmCbXX....bCsCsCC9OOXXooo..oo....OO%+. oozCbuBlC5oo..XXbCCCmmCkCCCCCCCCCCCCCCCCCCbbCCCCCCCCCCCCC9+@++++sCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCz@oo@DCCCCCCCCCCCCCCCCCCCCCCCCCCCV9vkCCCboOXXXo,CCNCCCCD@O-OX. o..oO.Oo.o...+o#CCbCbCM+@OO@+MCNMMCC0@OOXXo@@XO*****-X*X-X-XXkCCCCNCV=oXX..sZCCCCCCCCCCCCko@<9=OO%=wkMCCCCmbsqOOoO#BCCCCCCCV<9CCCCCCdO,BCCCCCCCCCCCCCCCCCzCCCCCCCCCCCCCCCCCC", "CCCCCCCCCNo#dCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCs.o..X#OXoXX@rsMbMfuq@$+O#.#&fCCCCCCCCCCCCCCCCCCACC<>bCC5#O#X.XXo ..oOoXoo.. o.OOCC9osCb.XX .#cCsCsCC9XXooooo.oooo....+$Oo oo7CCkCfCkoo..oO7CCCCkVeBCCCCCCCCCCCCCCCC0#.#5cCCCCCCCCCCn@+++++lCCCCCCCCCCCCCv9rCCCCCCCCCCCCCCCCCCqOXXOcCCCCCCCCCCCCCCCCCCCCCCCCCCCVsonCCC9oOOOOXkCV%9NCV==--Oo ..o.oo..o.oo..#ooCCbCbCMO@OOOObCD@@CC0-OXX#++OOO*4#**X-X-X*-XO9CCv<XXOXOOhCVcCkCC:O*---X. .Xo.#o.Xooo...ooCCi9fCb@@@@OobCsCsCC9O-OXo+OOO@@@*@*-X*X-XXXOO9CCkCkCCnCCCCCCCCCCCCCCCCCCCC0OOuCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCsXXXbCCCCCCCCCCCCCCC...,CCCCCCCCCCCCCCCC", "CCCCCCCCl#++sCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCdXX....9fvcbksrq@@O@+0fACCCCCCCCCCCCCCZ@o@#+;jCCCjVBbCB #X.XOXXo.X..XoooX. .o..oCCvCbCbX.X.. vCAvvCC9OXXo....o.ooo. o$+o++++ooBClkVCC5oOOOOOsCCCCCCCCCCCCCCCCCCCCCnXOo#o@OZCCCCCCCCCCCCCCCCCCCCCCCCCzXXX$@iCCCCCCCCCCCCCCCCf@@Oo,CCCCCCCCCCCCCCCCCCCCCCCCCCCkqVCCCCgOXXOXO9CCkCvACkXO*--OXX. ..oO...oo.o..#oCCCCCCb@@O*@+MCsCsCC0XOOXXXXOO@@O**X-XX**XOOOOXNCvNVhCCCCCCCVsCCknCm@o*@@=&@oX.O@@@@-==$@=@&@@@O@*@@$OOOo. .ooOo+@Oo++O.O+O+OOoXO@+CCmbBCb##o.o#MCCCCCCCCCCCCCCCCCCB;@ovCCCCCCCCCCC", "CCCCCCCCCCCCCCCq#&+##okCCCCCCCCCCCvo+#.o.bCCCCCC7...X..+#.#. ..oo..O+OOoo..#sCbOsssOMCd=ssDXvCs;sss+MC99ssw#CC00sdw+CCCCCCCCCvo.oo.XvCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC", "CCCCCCCCCCCCCCCCCCCCCCCCCCCC#+sCCCb +o## SCCCCCCCCCXbCCs9CCXbCCs9Cv.CCC9sCb.CCC7dCv#CCC.bCCCCCCCCCCCCCCCCCCC8sCCvoCC9sCCvoCCCCCCCCCCCCZ5$oOoO+++XO-OOvCvDsCC5ooooXo.oooo.X@o+. +$+&++++++O+oo..O.Xo@nCCCCCCCCCCCCCCCCso.OXXXo...OOOOOX..o@$$+@@++++++oo+++@&@O@@+++oo+$+@+O+@oCCMbbMCd&;%O#$O@O++MCk00CC9X@@*OOO..oO+@@mCCCCm=OOXXXXOoo@O@@OOXOOOXXX.OO#oooooo...oo+CCCCCCCOO@@@OOOOOXXo,VCCCCCCCCCCCCCCObCCsqCC=bCCdqCCoCCC7sCboCCC0sCbOCCC=MCs0CCC#bCd9CCCobC9sCCvoCC9sCCv@CCCCCCCCCvX.o...vCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC", "CCCCCCCCCCCCCCCCCCCCCCCCCCCC++rCCCv +o.#.SCCCCCCCCCssssskCCsDssshCAsdsssbCBsssDsvCAsssDsACCCCCCCCCCCCCCCCCCCjssssDCCksssssCCCCCCCCCCCCCZ5OO+++$oOOOOXvCCCCCC0oooXXXXXooo..... .o+oo++#+++OOOo..OooXX,ZCCCCCCCCCCCCCCCBoXooooX..oOO-Xoo#oOO@@@@@+O++$+##X++@@@O@@O+o+#++$@+O++.CCMbMMCd4;Oo#Oo+@@#MCCCCCC0O@@OOOo.ooOO@@eCCCCCkooXXX.OO#OX+*=OX%OXO..oOOoOOooXoo#XoX+CCCCCCCO@@@=*OOo@Oo5ZCCCCCCCCCCCCCCCgssggkCCsssgskCCsssssSCAssssgbCNgssssBCbssssdmCbsssssBCksssssCCksssssCCCCCCCCCbo oo.SCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC", "CCCCCCCCCCCCCCCCCCCCCCCCCCCV@+,CCCv#++.#.bCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCZ5+oO$&oOO%OobCCCCCC5X..XXoooooo..X.. .oooo+o++++o%++o.OX.ooowCCCCCCCCCCCCCCCCqXXoX.#...O-XXooooO@@&=@+&++++XX#@@&@@@O@@$+++#.@&$+&@O.CCbSbMCs4@$#oX@@=@obCBbMCC0O@*OOO. .XO+&@$ZCCCCCuXXXXOoO.#O@OO@oOOOoo..#ooOOooXoX.X#o$CCCCCCCo@@@=@@OooX5VCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCb o ooXbCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC", "CCCCCCCCCCCCCCCCCCCCCCCCCCCb@+OCCCbo#+..+gvvbbbbbbvbMMbMbbbbvMbbbSvvbbbbbvbbvvvSbMbbbvvbbbbbbbbBCCCCCCCCCCCCBbbbbbbbSbvvvvbbSvbSvvbbvbbbMc$OO@+#OO%OXvCCCCCCm$XXXoXooooo ..... +ooo#.+++OO%++.o.X.o...jCCCCCCCCCCCCCCCk.XoXXOo..O@oO@XooO@@@@@++#+++#X##@@#@@@OO$++&.#@&@.+@+oCCMt7MCs+==@Xo@@=@OMCs@OCCqOO-%OOo.oo@+&@OkCCCCCCrXX.XOOO+O@*O@O%@OO..o#ooOOOXOo...#$mCCCCCCCOO@@=@@oOOOlbMMMMbMbbbbbMbMbMbMMMMMMMMMvbMbMvbMvvvbBCCCZSbbMMMMbMbbbbbvbbbbvvbbbvbMbMvbvvbbvvbvbbMMbbvvSbSbxo. ...SCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC", "CCCCCCCCCCCCCCCCCCCCZbCCCCCb+O#nCCv oO.o+++++@oo#XXo@oooOXOoXoXXXX.#o@$$Xoo#+o.#@@@$+O......##o=BCCCCCCCCCCCV<@XXX#@o#Xo.o#oooo. X#o+$oo$$+$OOO+OOOOXvCCCCCCCmO#oXXXXoo....X. .o++ooo+o%+O+$+.o.Xoo.o.+mCCCCCCCCCCCCCCBXXXXoO...O@oO@XXX@++tqqidsdrZCCCCCCCCkOO@O@oO@OXoX.#+%$nCCsZCZCCV5+O@OXO+9ZCCCCCb0CCC@bCsqCCCXbCs0CCb@CC8gCCb@CC9sCCbOCCqbCCs7CCobCCs8CC@bCC9sCv.CCC7sCb.CCC0bCs9CCC#bCs9CCCoMCCCCCCS .o..+bCCCCCCCCCCCCCCCCCkXoX#zCCCCCCCCCCC", "CCCCCl$++.jCCCCCCCCCCCCCCCB#O@#ObCb.o+o+o#CCCCCCbosss,bCs;sDs.bCs$ssd$vC90sse CC08ssw.CC77as77CC#wss07CCCCCCCCCCCCCCCCCbXssD;DCv.DssovCs>sssXbCCCCCCV>XO....o5ZCVfCnzCCm$X.X.. .oo+oo+o+O%Ooooo+;uACCCCCCCCCCCCCCCCCCCCCCCCCCCCCms9oOO+O+%=$$@@+o%+o+o++%%@@=@@@@++O#++++@+$@+CCBssBCs@$oX#@+@+@+bCgCsCC0**4XX@X..+oOOO@O@*@oouCCCCCCCCCk+O@@OO@%#ooo+O;mCCz5,ZCCV,o@@@oOO7VCCCCCCb,sss@bCs>gssXbCd>sgi@CCq0ssiOCC90sdi@CC0iss77CC@iss9qCC@issZCnzCwmCCm4O@@=@=OO@$OOO+$$$+$+$=@ooXOO@-OOOO*=*@**@*oOOO--OOO@;&Oo.XXOXO@XX@OO@*XXOO@@@XX. .++XOOOO@@@++O#OOOooo@o CCbCbCv ..o..vCCCCCCCCCCCCCCCCCCCCCCCCCkOoXOXX$u", "CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCS + ++ CCvCbCb...oXoOOoo.ooooOO.+%+@@oOO+...++oo+ooooooo ...&$$o..+OOOo. .#oozCCCCCCCCCCCCCCf . .ooooO..o.OOO@OOO%%.. .$mCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCzoo@%OO@+#o#o+Oo+%%@oo@@*+#oOo#X+@=@@+@@+++@@@+@@+@++@O@OOXMCCCCCCCCCZs=OOX..#ooOOOOOOO@O@$nCCzCdiCCZ6O-,CCCCCCCCCCCCCCCCfX#oOOOooO%%+@=@@@oXX@@O@*@@=*OO.+*O*CCCCCCCm6@**@@@*&@4@O*=&@OOX.o++$$OO#*XX#*OOX@@XOXOX...oO@@OO@O+#rkNCCCCCCnCCCCCCCb .....cCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC", "CCCCCCCCCCCCCBzCCCCCCCCCCCCCCCCCCVS ++++ .CCCCCCVsbZCCCCCBk0.oooooX.O$$O@oOooooO+#oooooXooXoO++@+$++++%+oo oooOXoovCCCCCCCCCCCCCCk.oooXXXX.XXoO-OOX9VCCCCCCCCCCCCCCCCCCCCCCCCA9o#. 5ZCVdCgkCCn@o.#OOOO+O+..o.Oo&fCCCCCCCrukVCCCBf>OOoXoOOO$@+o%++++o++%@#o+==+o#O#oo@@@@@O+++&@O@@+&$@@++@@oOOObCCCCCCAnCCCBeOX# .@ooO*OOoOOO=nCCfVVfCCZ5--OOiCCCCCCCCCCCCCCCCb$XOOOooOOO$=@@;OoX.Oo+O@@@=@@X.+OOOZCCCCCCCV,*O*@@****OOO=;@@#.oo.o+OOO*X#*X*OXX@O#X@XX..##O+OXO=ycCCCCCCSkkk,bCCCCCCv.... .vCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC", "nCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCS+++oo.#CCCCCCb@ZzkubCCCCCVkqOoo.X+$+O@OO#ooooOO..ooX.o+.#++$@%++. +o%oo. +ooXooo0CCCCCCCCCCCCCCC=oooooooXoXX*-oOyCCCCCCCCCCCCCCCCCCCCCCCCCb$oO. .o5VCVe$nCCCm$ooOOoo%++O Oo#iZCCBiBCCCBCCCCCkO$oOOXooOO+@@o.+oo+oo+$@@OO@=;OXo@@@o@@@@@@@@@++@@@+@$+@@+@@OOOObCCCCCCwikNCCCb,...oOOOOOO@@O=mCCD5BgCCZ,XOOOOOcCCCCCCCCCCCCCCCCV0@@+o.oO%+@O@=@OX..#@O@=*4**OO@*OObCCCCCCCCB;@@@@***@*O@@;=O+.....+@$O*#@*@@XOX@XX@O*X..#@@oO0kZCCCCmCCC9kCCedCCCCCCv ..X. vCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC", "$mCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCS ++o+# CCCCCCk7bCC$bCCunCCCCNf;.#O$OO+OO#o.oO@Oo..oXXXX oOO+@Oo+oo+oooo ..oooXoOoXBCCCCCCCCCCCCCCjXooXoXX.oXX-=OiCCCCCCCCCCCCCCCCCCCCCCCCCCV<.oo..oo5VCVmCCbCCm$oOooo+++O.O;bCCVkbf0CCCCCCCCCBo*oOXXoOO@%&@..o+oooo+%@$@O+==o.#o@@@@@@+O+@+++@@+@@@$OoO@oXOOOO;fZCCCZ;ZCmfVCCCs.O+@oOOOOo*=mCCCZ,wCCZ,X--OOOX9CCCCCCCCCCCCCCCCCCf@@oo+@$$=@@**@OX..OO+*@=-OXX@@O*uCCCCCCCCCmO@@@*@O@*O@@4=+@X.oO+@@OO*X##X*@X@X@@OOOXX.oo=uBCCCCzkk$BCCsekfbVCCCCCCv......vCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC", ".+mCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCS +++ .#DcbVCCCCNkz5CCz@BzjnCCCCbq+%%O+Oo+o..o++O.o.ooXX.#++@+O++oo+ooO.. .O.XoooXsCCCCCCCCCCCCCCZ@.o.XXX..X.*-6CCCCCCCCCCCCCCCCCCCCCCCCCCCCZ5.o. +%o,VCCCw$vCCm$OO..Oo+OouZCCmqCCbsCCCVfdCCCCrOOOOOXo$O%++o..#+ooo@@@$@oo-@o.o@@@@@@4@+OOOo@*@&@+@$XO@+++XOOOX@=sZCCZkzm;ZCCCCM<#OOOO-O@=mCCsVCVCCZ5XXO--OX,VCCCCCCCCCCCCCCCCCCCm5o#+$@&=@***@oXX#OX@@*=-OOX@-OOsCCCCCCCCCCkO+@@*@O*O@@4=O@o.oOo#+@O*##X@@@OOOO@OO*X..&kVCCCCC0zCCwfCCCCCCCCCCVblsw .. o.SCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC", "..+mCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCS +++ +#++O$0uknCCCCCk9BCC@zCCCCCNw%OOOOoO...+Oo.o.ooX#.#+@@+O++oo++%Oo ..oOooXoX.CCCCCCCCCCCCCy@**@@*O*@4@@OX oXX@++@#*@@+OOO@O@@@O>kCCCVkz0kCCAmCCCCCmf7@.#+#X.... ..oo..vCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC", "#.o.iCCCCCCCCCCCCCCCCCCCCCCCCCCCCCS +++ #oo++Xo#o..#oXX$ezCCCnCCwwNklCCCNwoOo..oO+o.o.XXX..#o$@++++o.oo+o. .oOooXooXXwCCCCCCCCCCCCCCC0..XX..oO%BCCCCCCCCCCCCCCCCCCCCCCZrmCCCCCCCCZ5ooo+O+@5VCVdm$ACCm$o+fCCZ0fCCCCCCb0oo+@Oo:CCCCk@@X*Xo++$%+ooo+@#o.o@@@@$@@Oo+%$#O@O@+O@&o#@$@@@@+@$$*OXOXOO@OOOOOX#OX>bCCCCV@zdVCCZqO=mCCsCVgCCV,XXOXXOO5VCnhCCCCCCCCCCCCCCCCCCCCCCCCMq@%OO-OOooOOO@=@=@OXXoO@XkCCCCCCCCCCCCCCy@=@@*@@&*@@OX XXX++@@@*#O@+O@X@+@;kCCCCfwCCfwCCCCCCze@ooo#X#@##..... oo.ovCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC", "..o.#X.XoXX.,VCVCCkmCCn=o..oXnCCCCCCCCCCCCCCCCCCCCCCCCCCCCCVbkgskbCCCCCCCCCCCCCCCCCCCCCCCCCCu=@@=@@@X Xoo+O@#@#O@@fCCCCCsrkmCCCl;#OoOoO+Oooo#oo#@**OXo.....XO,5OOOOXOo,VCCCCCNCCm-XOXOXX....Xooo.ooqZCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCb,o#oo5VCCbCCCVCCB5+OXXOOX.o.0bCCCCCCCNhqiCCCzwkBCCCCCCCCCCCCCCCCCCCCCCCCCCCBkfVCCCCCCCCCCCCCCCCCCCCCCCCCCCCCf;****O;fCCCCCCCCCCCCCCCCCCCCCCs@O@O=@=mCCCCCVCCCnBCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC9.X=VCCCCw$zCCCCCCCCCCCCC", "CCCCCCCCCZ.. oo .o.... sCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCzhCnkCCCCV5okCCCCCwjCvmCfVCno...o.oO.. X..XX.O..XXX.vCCCCCCCCCCCCCCCCCCCCCCCDX..oOOOXOooXO@*=OOO.o#...+o.oo..wsMZCCCCCVMfgfnCCCCCCCCCy*=4***@@**O=cCCCCCCCCCCCCCCCCCCCCCi@OrZCCCCBkV7kCCCCCCCCCCCCCCCCCCCCCCCCCCCCCmfs99@OO.XXXoooXXo..kCCCCC#OsCCCCCCCCCCCCC", "CCCCCCCCCCi...oo.aSVzfBCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCbXO;kCCCCCCCCCCCCCCZs$VCCCCCCCCCCw..X+nCd$eCCCwo .o.... X..o..#......wCCCCCCCCCCCCCCCCCCCCCV,ooX.oOooOOOoOOXO=$OOO%O...+o+o+oaCCqBbmCC,.oO+++ooOOooO$eCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCr...#O#X@OXXXXX,VCnbBqCCV:--XXXX...oO.XooXX..X..ooOoooOOO@@@@=OOo+OOOoO@=@*OuCCCCCCCy****=**@***@@@uCCCCCCCCCCCCCCCCCCCCC0wCCCCCzcCmzCCCCCCCCCCCCCCCCCCCCCCCCCCCbw;X.X.XXOOXXXooXoXXXXXvCCCCmoXsCCCCCCCCCCCCC", "CCCCCCCCCCv..o.o.CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCbXX..CCCCCCCCCCCCCCCCCCCCCrOo.o.oOOOOOOoOOOOOOO%O%O. oOO$ookCCuo.Oo#O%#O++oo+eCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCr#XOXOOO*X*XXXXwCCj=gCCCcOOOXXX. .Xo.X#X.......OXOoXOO*OO**==OOX+@O@OO=*-OOXZCCCCCi-****=****@O*=@@qVCCCCCCCCCCCCCCCCCCCVCCCCCC,sbbCCCCCCCCCCCCCCCCCCCCCCCCCCk&.....X.XXooXXoXXXXoXXX.vCCCCk#osCCCCCCCCCCCCC", "CCCCCCCCCCC o.#5jCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCnXXX...uZCCCCCCCCCCCCCCCn+kCCCCkooo.oo kCCN.ooXOXXoX..XXXoOoXoO-XX***@@@#o@@@@X@@**XXO@*OO@=**********=iCCkkiCCu@@OoXXsCCCCCCNCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCV,ooXobCCCCCCCCCCC", "CCCCCCCCCC7..sCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCmCCCCCCCCCCCCCCCCCkCbZCCV+owCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC", "CCCCCCCCCCu. . . 5zCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC.O.oCCryuCCkXoOOXooXoX.#O@O#XXOO*O-*-OoX.O@@O*@@=OXoXOO@@@=****--***iCCCCCCC,==o*O$VCCCkCkCCCCCCCCCCCCCCkO+5BCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCZwX%sVCCCCCCCCCCCCCCCCCC", "CCCCCCCCCCs. #+sssDZCCCCCCbbbmCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCoo##.XoCCCCCCCCCCCCCCCCCCCCCCsoo. zCCCCCC@. ...o.ooOoXXXzCCCCCn.oOOXoooX%OOO%o..o#o.oo.O.o%%%OoO.odCAmZkCm+o+%+%+o@O+wVCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCzXXoX.X%OXOO-cCkVnNCVXOOOo.XoXoo#Xo+oOOO-OO--OOOXXO@OOOO@@OOXoO@O@@*O===*-===nCACCCCc===o=XsCCCkqlbCCCCCCCCCCCCCCCcuCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC9XXXXbCCCCCCCCCCCCCCCCCC", "CCCCCCCCCCs. .lCCCCCCCCCl&..X#zCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCX#+O..$CCCCCCCCCCCCCCCCZw@BCCN++.o .qCVdVCCCCCCCCCCCCCCC", "CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCsi7CC,.XXXX.X...ooO-OOXXOOO-OOOOOOOO-X..OOOX*XOO..X+@***@***iCVkBfCZ@@@X#@wCCCflrCCCCCCCCCCCCCCCCCCCCCCCCCCCwohCCCCV,oXoo0cCZOX+@@$5CCCV;0kCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCv..X7CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC", "CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCj8slCCCCCCCCCCCCCC@OXXCCiCCkCcACj....XXX..o.....XoO*oXXXoOO@*OOO@O@$%X.ooOOOOOXooXOOO@*****X**@gCCCCCCCCCCCCCCCCCCZCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCs..CCCCCCCCCCCCCCCCCCCCCCCCCCC9OXoX,CCCCCCCCCCCCCCCCC", "CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCuOo.. XX...XX.XoooXX......XOo@OXOXOOO-*XX***@OoO.XO@=OXOOXXO-*@@*OX**pCCCCCCCCCCCCCCCCCCCCCCCVVCCCCV59VCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCnsVCCCCCCCCCCC,o.zCCCCCCCCCCC", "CCCCCCCCCCCCV@#O++jCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCi.O5nCCCCCCCCCCv$kfCCCCCCk+ooOo.vClk;kCZ@oOO$oX..##OOooOOOooo.XooOOoo..o+OO%OO.ooo.oO.....OoXoXOX....XX..o....ooOXdCZ7;bCCzO..oOoOoOooo+$ACCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCN--OOoXOXOOXXOXcCCv>9ZCg*OX....XXXXooXX......XXOOOO#OOOoO*-X-@@OXXX.XOO@oOOXXXXOO*=****2VCCCCCCCCCCCCCCCCCCCCCCV5,ZCCCc6VfVCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCsXXOouCCCCCCCCCCCMoXwCCCCCCCCCCC", "CCCCCCCCCCCCs##++cCCn=O..OX.o...ooooX..XXo#@$OOooOXOO*@@*@=@O#o@@$==@O-OkCCCCCCCCCCCCCCCCZ*****OO.o@O**X@O#@XOXqVCChs,CCCCCNqX. ...oXoOoXqkZCCCCCCCCCCZCCNuszf;kCCCCu.XCCCCCCCCCCCCCCCCCCCCCCCCCCCCC", "CCCCCCCCCCCCCB5+o.+#o++#++ ++&bCCCCCZBCCCCCCCCCCCCCCCmjqXX#o.oOXXoXX#@0bCCCCCCkbCCb$oo..XXXX..o##O%+.ooooo+oo o .#.X.oOOOXooOO%OOoo. .oo+X%OOOoXOOOooX......XoOOX..Xoooo X... @nCCfZCzCVZ5ooo. #owCCCCCCCCCCb@XXoOOOO++..oo.ooXoVCCCNCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCq-@-XOO*OOOO**XXOoX..:ACCCCCCCCCV5oOOXXoo,ZCVrVncCCn@..Xo.oX.XoXOXX.....X@O+OXXOOo@**OO@@@XoX@OO==**@@NCCCCCCCCCCCCCCCCf**X=@OOX.@+XO*@*X@*OOO,nCCnNCCZzCCCv5 ....oOooo..o.qjNCCCCCCCCCCCCCCCCCCCCCs..CCCCCCCCCCCCCCCCCCCCCCCCCCCCC", "CCCCCCCCCCCCm$+++#++++%o+oo+$&bCCCCCCCCCCCCCCCCCCBlu,.X#.#X#.oXoX#oX;lCCCCCCCCCCCu+o+o....Xo. o#OO+Oooooo++o. o.o.ooooOOoooOOOOOoo...oooOO%OooOXOOOoo. ....oXXXoXXoo..o.X...#nCCigCSCCZ5 +oo..XwCCVCCCCCCCCCV5ooOOOO++..XXXo..wCCCCw=sNCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCNCCCCkO=X-OOO@OO***XXO+X.iCCCCCCCCCCCCZ>OOXOX..,VCVnCnkCCnO.oooo.XX.oXXX..#..#oXOOOXOOX%OO-@*$@O#oo@@==OO*,CCCCCCCCCCCCCCCCC>*--**@OX.OOX*#**#OOOXOOXfCCCCCsrhNCCCk$....oXXoX.oX..X,uzNCCCCCCCCCCCCCCCCCk.****OOX-X#oX-XO@*XXXXXXXOOOXX0mCCVDsCCCjVCCCNu=oooXXoXo.........XX..X+XoXbCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCV6", "CCCCCCCCCZ$+oO++5CCCCCCCCCCCCCVCCCb+$+.##o++++%O$%%+..+...=wlCCCCCCCCCCCCCm9#O ++$+OO+oO.ooX..#XOO+O$+++OO%O. o oOXOOOXXOOooO-OX..o...OOOOOOooOOoOOXo.X....oXOXXo.XoooXXXOnCCdZZwCCCV,.OooOowCCC5knzCCk5ZCCknkkCCCnbCCCCCCVqOXOO-nCCcZCVVCZ,ooXXOXX1VCZnChjCCn@....X.XXX...XoOOOo.oXXOOOO-*=@+#XXXO---O=CCCCCCCCCCCCCCCCD*==O**@OOXXOoX*XXOXOXX-X*XXXXX*@+#O;hCCCVkk5jCCBmCCCCCnf7Ooo.o.XooXX.X#X..bCCCCCCCCm9$wVCCk5mCCCCCCCCCCCCCCCC", "CCCCCCCCV@#+#o8CCCCCCCCCCCCCCCCCCCb+++o+o#&o++$qDkmCCCCCCCCCCCCCCCCCCCCCCC7kbvseCC9kbbwkCn0vbbekCm0bbbwmCkwSbc7nCkibbb9nChwvvh9CCusbbj5CCugvvjuCC9kvvDuCCowsD03Cn5vvvwhCCCCCjrCCV7nCCCCZ5wCCZk$wCCCjX#oo..O8ACCCCn@zkCCCZs@osCCCC5.o+o.ooOoO#o.o +o. +%O+@*=@O+OOOOOOOOOooooXXX@+OoOOOO%OO%5CCCCg-OXO=fCCCVhf;CCCCCbkkkBCCCCCBf5@OoXOOOX#XXXX*--XXX. .oXOOOOO-OXX--OO%OXX-mCCb=nhVCZ2X. oooo,VCZsCCCCCm$XXOOooXOOOO@OO@O%OooOOOO*=**MCCCCCCCCCCCCCCCp****-**-*XOXOOoOO@OOXXXXXXX*XXXX-X-OOOOXX .......XooX#..oo#..vCvvbMC7#Xo#.SCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC", "CCCCCCCCCCso# o+ZCCCCCCCCCCCCCCCCCv.+oo oo#+ooo+OXOo .ooo.o......ooooOo oooo oo+O..oo.o.o..+.OO+o+#o. .+o. . .vCCCsXoXooXXOOXoX.... ..oo...OOoXXoXo....XXXXOO-XooOo.X.XXo. oCCCCCCb.oooOO.. ..ooXooO..#+++oo.O+OXoOXX..o...o...XoZCZrZnzCCn%OXO@OOOOOOooX-O---=*-*CCCCCCCCCCCCCCCC1**-*44@OoXXXOOOXXX*XX-X-X-XX-OXXOXXXOXX.XX.....OooooO.oooOobCvScvC9o.++ObCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC", "...o59u79997757ZCCn@..XXvCCCCCC9XoXXOXXXXOO.CCu0kCvo++OOOO.o.X5CCCCCCCzoOO+++o++OOo+%+OOOXo..XoXOXOX.XOO%O@o#bCsCsCCqOOOXXX.Xoo.OsCbbbbCdoOOO@@*#O*OOoXXXXXX*X*-OXXOO---O-XO-o.XoXOOOX-OOOOOOXXo.oX.XXOO-*OXX....X#oXoXXX..... .oX$nCCmVn5CCV5OO$@OXO5VCVnV;bCCm;O@=@=****mCCCCCCCCCCCn#O$@@O@@@@@*-X-OXO*OOOOOO#X#OOO...... ...o.#oo o+ooobCcfdbC9.X.XXvCCCCCCXovCCCCCCCCCZoX.oosCCCCCCCCC", "CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCaCsCC0. oOOXo.. .XXXoo.oooooooooo.oo+..o.o ....#.+o@+OO...o.@zCCCCCCCCCCCCfOXX$mCnoX--O--6ZCCCCCCCCCCCCCCCCC9oXX+O@@OXO@O*@*OO@OOXXXOOOooo#oO.. ..XoXO.oooooo.vCvdfMC9ooo+OMCCCCCCCCCCCCCCCCCCCCCnvvvCCCCCCCCC", "CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCbo#o o#SCs7gsDXbCsVCCm-XOosCCCCCCCCCCCsoXOOOOOoXX.. ..XvCsCsCC5.oXX..XqZCCCCCCCCCCCCCm$ooXo.XOoXO+++o+ooO.ooo+Oo$OO@+OXwmCCCCC;cCCswCCCCCCCmkD85+ooXO@OOO$=@oXOoXOoO0rszNCCCCCCCCCCCCfrfNCCCZs-OOO**O**--XXX .oOOO*OOOX-*-X--XXXOXXOOXOOOOXX......oOXXooo..kfNCCb%.XXOOO@==oXo-XOXXXO@OoX@o*-OX-OOXX....X,VCCnOqnCCjoOOOoXXOyCCmcCkmCChOXOOO*=-Oo+@@OO-*kCCCCCCCCCCCCV5X.XXXXO5VCVnCncCCn=OOsCCVVCCBeNCCCkCCCCk.XXoOXXoo.O.5uvCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCmsr0CCCCCCCCCCC", "Oo,ZCCCCCCCCCCCCC.oobCCCC,XoXsCCCCCCCCCCCCCCCCCCCCCCCNf5X..oOOO..OO+o.nCCCB9Xoo9CCCCkOXXXO:DNCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC", "5VCCCCCCCCCCCCCCC..obCCCC.OOouCCCCCCCCCCCCCCCCCCCCCCCCCCCCCz9OOoo+%+++o...sVCCNCCCCCCCCCChmCCV5+O+oo o5VCCn-OOXO-O-OOwVCCCz,njCCB9$X--*-----XXXXXXXOOXO-OXOOXoBCCkOOOoOOoOOOO-OOXXoO=ACCCCCCCCCc=mCCnVCfVCV2OXXXOXX5VCCCCCCCCzCCCsOOOOOoXooXvCCCCCCCCCCCCz@...8VCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC", "CCCCCCCCCCCCCCCd ...o..+..++oX$kCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCBeO+..ooooo.o5NCCCCCCCCCCZZCCCn@vCCNoo.oOoOOyCCncCcnCCk=OOOo+Oo4@OO=-OXXXOfCCCCCCCCCB=-=nCCnVg9CCZ5ooXoXOO2VCCCCCCCCCV0O%+OOOooooX5CCCCCCCCCCCsoo..o+7CCCCCCCCCCCCCCCCCCCCCCCCbqlCCCCCCCCCCCCCCCCCCCCC", "CCCCCCCCCCCCk<....+oo..+.O+OooX.#zCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCb0.oooooo.oo$zCCCCCCCCZ, XXo@%o5ZCCCCn;nCn+OO%OOOo.o.XXO%OOXo... ..sCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCfOo. .CCw8fCv.oooo%OOooooXo#fCCzOOoOOOXo.....bCs9=CC9...XX...OO. CCu0kCb..CCCCCCCcOOXX..oOooooooo..oo+..#@O%O@@O-OOOoo%%o%OOo+OOX..XoOOXO*XO*-XXX=CCuwbCCr..#oOOoBCCCCC0-X-=CCCCCCCV-OOXsCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCvq90zCCCCCCCCCm9XXXXsCCCCCCCCCCCCCCC", "CCCCCCCCCCCCCCCCCCCCle7.oo9fVCCCCs#7CCCCCCCCCCCCCCCCVcfVCCCCCCCCCCCCuooooOjCCCCCCCgVCCCCCCCCCCCCCCCCCCCCC5ufCCCNOXXOOOpCCCCCCC-XO...OoOoooXXX#o.oO..OO$O@@@*O*OooOoOoOOOOOooo..oXOXX*O*-X-XXXcCnANnCz...XooocCCCCCC0OOXDCCCCCCboO-=VCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCk,sCCCsXXXXO=CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCuXXX...zCCCCCCCCCCCCCCCCCCCVuOOXO+oqvCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC", "CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCNo+O# dCCCCCCCCCs=sssXvC97DsroCCs>sssXvCs:DssXvCs;ssDXbCCCCCC9oooXXoXoX...CCCz+XoOookCCVlsnCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC9OO--sCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCVCCCCChXXXOO-ZCCCCCCCC9yss70CCXwss50CCXyss>sCMOssD;sCvXsss:bCbXssDXvCsMCCCCCCCCCCCCCCCCMVCCCCCCCCCCCCCCCCCCCCCCCCZ;OO", "oovCCCCCCCCCCCCCCCCCCCCCCCCCCvooCCCCCCCCCCCCCCCCv...OXXzCCCCCCCCCCCCVZCCCCCCCCCCCcOOOO,cCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCVvwX#oXoo9CCCCCCCCCCCCCCCCCCCCCCCCr.wCCCCCCCCCCCCuCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC,", "sCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCsCCCCCCCCCCCCCCCCC5 .BCCCCCCCCCCCCN@ouCCCCCCCio.#OkCCCCCCCCCCCCCCCCCCCCCCCCCCCCCz7>XOXXXOOXX:9wfvCCCCCCCCCCCCCCCCCCsOOOvCCCCCCCCCCCCCCCCCCCsoXosCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCNooo9CCCCCCCCCCCCCCCCCC9%OCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC@O->CCCCCCCCCCCCCCCCCC>O@@5fz.. XNCCCCCCCCCCCvX..CCCCCCCCCCCCkX..wZCCCCCCCCCfoooolCCCCCCCCCCCzOXXOvCCCCCCCCCCCkOOOO5VCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCsoXoo;sCCCCCCCCCCCCCCCCCCCCCCCCC#oOCCCCCCCCCCCCbCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCs", "vCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCvCCCCCCCCCCCCCCCCC9.+CCCCCCCCCCCCCboqCCCCCCCCq.X#sCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCNvvCCCCCCCCCCCCCCCCCCCCCCCCCCMXOOvCCCCCCCCCCCCCCCCCCCDooXsCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCChooosCCCCCCCCCCCCCCCCCCuO%vCCCCCCCCCCCCCCCCCCCCCCCCCCCBbvvvbbcbbfO=*%CCCCCCCCCCCCCCCCCkO*@6CCCi..XqCCCCCCCCCCCbX..CCCCCCCCCCCC=O.hCCCCCCCCCCCko.o$CCCCCCCCCCCCC:o.iCCCCCCCCCCCu.OOX=VCCCCh*hcMbAVbf6CCCCCCCCCCCCCCCCCCCCCCCCCCCvrussfmCCCCCCCCCCCCCCCCCCCCCCCCCCC.O+CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCb", "CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCqXrCCCCCCCCCCCCCViVCCCCCCCC5..9CCCCCCnfCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCVkr=-6CCCCCCVOOOvCCCCCCCCCCwwCCCCCCCsXXosCCCCCCCCBu5cCCCCCCCCCCCCCCCCCCCCCqXoosCCCCCCCCCCCCCCCCCCzOOsCCCCCCCCCCCCCCCCCCCCCCCCCCA=XooXX#...O@=OOCCCCCCCCCCCCCCCCV>OOObCCCCk XXzCCCCCCCCCCCX..NCCCCCCCCCCCcgnCCCCCCCCCCCCV,ookCCCCCCCCCCCCCko,CCCCCCCCCCCkX.XXXvCCCCVO*O*OO-OXXOmCCCCCCCCCCCCCCCCCCCCCCCCk9O;CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC.o+CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC", "CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCBDBCCCCCCCCCCCCCCCCCCCCCCCC0O+NCCCCN9oXbCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCZhqOOOO->CCCCCCCoOOvCCCCCCCCCCuXzCCCCCCqOXXDCCCCCCAe#o@cCCCCCCCCCCCCCCCCCCCCC%XXogCCCCCCCCCCCCCCCCCCC>O%VCCCCCCCCCCCCCCCCCCCCCCCCCCD99,ooo.. O*@*%CCCCCCC5X9CCCCCCyOOOyCCCCCCjoX=nCCCCCCCCCC@.XbCCCCCCCCCCCCCCCCCCCCCCCCCCCCnnCCCCCCCCCCCCCCCVVCCCCCCCCCCkOX.XXsCCCCCN*O*OO@O*OoOkCCCCCCCCCCCCCCCCCCCCCCCC5OOkCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCo#8CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC", "CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCc5kCCCCb$oX#NCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCZk0XXXO-O%-kCCCCCCVO-OvCCCCCCCCCCkX@VCCCCC9XOXsCCCCAwoO#+yCCCCCCCCCCCCCCCCCCCCCnoooovCCCCCCCCCCCCCCCCCCC0OX5VCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCNli;XOO-O%vCCCCCvOXO0sssDXooO>zCCCCCCNCCCCCCCCCCCCCCCCCCCCCvXXsCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC9+XXwCCCCCCCCCCCCCCCCCCCCCCwXX.X", " .oXXrZCCCCCCCCCCCCCCCCCCVqooooXCCCCCCCCCCCCCCCCCCCCCbX.X.OOO>bCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCAe+++ooqZCCCCCCCCCCCCC@wCCCCCCCCCCCCCCCCCCCCCCCCCCCCwo", "XnCCCCCCCCCCCCCCCCCCCCCCCCCCCCm9CCCCCCCCCCCCCCCCCCCCc...oX......XXDCCCCCCCCs@... o.....;lvvvcvfzCCCCCCCCCCCCCCCCCCCs7XoXO,gCCCCCCCCCCCCCN:OOXXCCCCCCCCCCmzX...X.X9cCCCCCC..oXCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCO-9CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCV=X.XnCCCCCCCCCCCCN6OOO=BCCCvoo+0CCCCCCCCCCCCCCCCCNbhsgssgnCCCCCCCCCCCCsOO5CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCk+%+%+.oobCCCCCCCCCCCCComCCCCCCCCCCCCCCCCCCCCCCCCCCCCno", ",CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCuCCCCCCCCCCCCCCCCCCCCf...XOX.. ..9gNCCCCCCm<.... .o+o....oooo X.XuCCCCCCCCCCCCCCCCCCCCuX$uVCCCCCCCCCCCCCCCs%XXoCCCCCCCCCVOoo. .;wvCCCCCCCC..X.vCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCghvCCCCCCCCCCCCCCCCCCCC-O6CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCV,OX.ofbCCCCCCCCCCCcOOOOXuCCCvOO+0CCCCCCCCCCCCCCkr4-*O-OOOOO>cCCCCCCCCCCsOO9CCCCCCCCCCCCCCCCCCCCCCCh9nCCCCCCCCCCCv#+O+%$+oobCCCCCCCCCCCCC,CCCCCCCCCCCCCCCCCCCCCCCCCCCCCC,", "DCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCbCCCCCCCCCCCCCCCCCCCCD..X599...;cCCCCCCCCBo.... ..oo........X...orCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCc=XX0o+oo7CCCCCCCCCZuX*--*@9knCCCnf=OX%CCCCCCCCCg-X9CCCCCCCCCCCCCCCCCCCCCCC5ovCCCCCCCCCV<#@#++++Oo@CCCCCCCCCCCCCCbCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCv", "CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCj,oXXXX..o;0sjSvvD.oooo.. .qCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCZX.XovCCCZw..sACCCCyOXOOXXkCCCCCCCCCCCCCCCCCCCCCCCCNrOqCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCh=OOOXXsCCCCCCCCCCCCCCCCCCC--6CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCDXoXXX..XOoOuCCCCCCCCCCCCsOO%%o.OnCCCCCCCCCCCCCvOXXOXO=vCCCCCCCCCCCCCCCCCCCCCCCCCCVXOO-CCCCCCCCCCCCCCCCCCCCz,7wCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCsXoXdCCCCCCCCCZyOXOOvCCCCCCCCCCCCs@@@CCCCm=oXX.kCCCCvXXCCCCC9XoX+@Oo@lCCCCCCCCCCCbXO#bCCCCCCCCCCCC@ObCCCCCCCCCCCCCCCCCCCCCCCCCCbXO", "..;ZCCCCCCCCCCCCCCCCCCCCCCCCZ:X9CCCCCCCCCCC.oo%NCCCCCCCCCCzXo...XXX. .uZCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCvX#X-XX-gCCCCCCCCgXXXOoX..CCCCCCCCCCCCCCCCCCCC9...XXo$kVCCCCCCCCCCCCCCCCCvoo..uCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCvw:oXOOXbCCCCCuOOXooo.zCCCCCCCCCCCCCCvOXOXO=nCCCCCCCCCCCCCCCCCCCCCCCCCCCvXXOOvCCCCCCCCCCCCCCCCCCmXXoXNCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCk@oXwCCCCCCCCCCnOOOOvCCCCCCCCCCCCs@@OvCCm=@oX@lCCCCCvooCCCCC9OO+#@Oo$VCCCCCCCCCCCvo@+CCCCCCCCCCCCCOO;ZCCCCCCCCCCCCCCCCCCCCCCCCZ;XO", "...qCCCCCCCCCCCCCCCCCCCCCCCCqXO9CCCCCCCCCCv.o.zCCCCCCCCCCC=ooo.;7990gBCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCoOO-O--=qkVCCCCCsOOXOoX. CCCCCCCCCCCCCCCCCCCCw...+Oo#XskvCCCCCzsNCCCCCCCCCCCCCCCCCCCCCCCCCCsXXXXXOOO.:CCCCCCCCCCCCCCCCCCCCNCCCCCCCCCCCw.#@=nCCCCCCCCCV6ObCCCCCCCCCCCCsO@@@@@uVCCCCCCCCCCbXoCCCCC9oO+ocCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCO#oo#o:MCCCCCCCCCCCCCCCCb;@@@XXO", ".. XooX.wMCCCCCCCCCCCCmw.. .XXo9CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCn$X.oXOoOO%OOoooOOXoOOoX...X....XXX.XXXXXXXoooo..ooo.#sCCVvvNCCCCCCCC5oooXCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCNshCCCsOOXXXXOXX.XXXXXXXOOXXXXOooo.X.ooOXCCCCOOOX.XXOOXOXOOOOOOOOXoooXOOO*O*X-X**OOOOOOooCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC", "CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCo$O.. oOOOOOXOXXO---OXOo. .XCCCCCO%oOO%OOoooOOXoOOXX...Xo...XXX.OXOOXX.oo+. .#ooo+sCCNX;vCCCCCCCC,.XooCCCCCCCCCCCCCCCCCCCCCCbnCCCCCCCCCCCCCCCCCCCCCCCCCCCCCVsvCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCf0=CCCsXO*XX-OX..XXXXOOOOOXXXoXooooXXoo*XCCCCOOOX.XXOOOo#++OOOOOOOXXoXXO-*@*OX**X=--OOOXoCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC", "CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCb+$$. .OOOOXOXOXXX-OOXXo. .@CCCCCoOOOO%OOoXXOOo.OOXX...Xo..XXXXXXOOOXX..oo ..oooOwCCCkCkCCCCCCCCXX.XoCCCCCCCCCCCCCCCCCCCCCcXXmCCCCCCCCCCCCCCCCCCCCCCCCCCCCjoONCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCfCfCCCqX--XXXXX..XXXXOXOOOOXXXoXooX.XoXO-CCCCOOOXX.OOOOOo+OOOOXOOOo.oXXX*@**XX-X-O*OOXOX.bCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC", "CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCvo++o..OOOOOOOOXXOOOXXoXX...9CCCCvXOOOOOOOOXXOOo.OOXX . ....X.XX.XOOOXX.oo+ .oo..oX0CCCgCfCCCCCCCno.oXoCCCCCCCCCCCCCCCCCCCCV=XXyCCCCCCCCCCCCCCCCCCCCCCCCCCCC5XXyCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCzCzCCC9XOXXXXX...XXOOOOOOOXXXXXoXoX.ooOOOCCCV-OOX.oOOOOOO%+oOOOOOOo.oXXX*X@*@*-OX@-*OO@XXbCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC", "CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCkooo ..+O-OXOOOXOOOOOOXXX.X.9CCCCMXOXOO-OXoXXOOXXXX.... XXXXXXXXXXO%OXOoo.. .#O+Ooo0CCCzCjCCCCCCCkoooOoCCCCCCCCCCCCCCCCCCCd=XoXOVCCCCCCCCCCCCCCCCCCCCCCCCCVuoXXXnCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCsCsCCC9XOOX-X*XXXXoXXOXOOXXXXXXoXoXXXOXOOCCCCOOOX..XOXOX$$OOXOOXOOoXoXXXOX@*o*OOOO*OO@@O#kCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC", "CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCZz9@ooXXXXoo.jCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCD+ #o .SSvvvvMvvvvvvvvvvvSbcnCCCCVbbvvvvvvvvvvvvvvvvbSvvbvvvvXXOXOOOOoX.o.vcb,#OOoo9CCCq,9CCCCCCCzoXoXoCCCCCCCCCCCCCCCCCN7.oXOXOvCCCCCCCCCCCCCCCCCCCCCCCCCfOX.XO5CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC9XuCCC:O-*X*yccbcvvvvvvvvbbbvvvvbbbcvvvvvCCCCvvvvbvbbbvbbMbbvvvvvbbvbbbMvMbMbMMvbMf*o@*OXsCCCCCCCCCCCCCCCCCCCCCCCCCCCCbbbbbMMvZCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC", "CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCz. oOoXO+@,9DsssssjCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCw . o. CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCXOOXOO%OoX...CCC5.#ooo$CCCbznCCCCCCCbooXO.CCCCCCCCCCCCCCCV5oX.oXoXOX.X=nCCCCCCCCCCCCCCCCCCCCCuOooXoXuZCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCVvNCCCXO--XXuCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCN@@@@O#yCCCCCCCCCCCCCCCCCCCCCCCCCCCvXOOo@*@OOo$uCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC", "CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCe.oOoo+@iCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC7o..o.OOOO@0CCCC=OBCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCmkXooXrCCCCCCC", "CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCs@O#...cCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCoXoXooXXOXXX.CCCbo+o.oosCCCDzfCCCCCCCCCvoOCCCCCCCCCCCCCCCCCCCCn;XOO%zCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCf**iCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCChCkCCC9XXOXX0CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCf@+OXX@sCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCgOOX#qCCCCrXooCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCs,OOXXOXXoXXXXo5VCCCCCCC", "CCCbACCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC8@.o.. CCCCCCC=%OXOOOX-XXXX .oOOOO-OOOOXOOOOooOOOooXXoXvCCCCCCXXoo..ooXOXOXCCCNo#.ooo5CCCzZvNCCCCCCCCCvsCCCCCCCCCCCCCCCCCCCCCNsszCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCb=,ZCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCChCkCCCOXXXoXuCCCCCCzoXoXXXoXo.XXX.X..OOOOoO-OXO-OXXXOOOOOOXOOoXOOXXXXOO#OOOOOqCCNkMCbO@OXXoqCCCCCCCCCCCCCCCvfvVCCCCCCCCCCCCCC9XO@0CCCCBfrwCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCwoOOOOOOOOooXOXXbCCCCCCCC", "CCCX9CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCChCCCCCCCCCCCCCCCCCCCCCCCCC#O#o.#CC0wfCVX=*X#@@CCCCCCCCCCCCCV+oOOX5ysnCCCCCCCCCCyOOo0CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCgoOOOXOXOOOXoOOXXCCCCCCCCC", "CCCXogCCCCCCCCCCCCCCCCCCdDgBCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCuvCCCCCCCCCCCCCCCCCCCCCCCbO+.o.oeCCCCCCvXOOOOOOOOX.....ooXO--OOoXXOOoooOoOO.Xoo..vCCCCCCXOXo...oXOOOoCCCC7o .OOOZCCCuiwCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCb=bCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCzXXCCCzXXXXXXnCCCCCC5oXXXOoX.o...X..ooOOOXOO--OOXXX.X#OOOOOOOOOOO%OXOoooOOOO*O-CCkCkCC,@*OXO@bCCCCCCCCCCCV<..OXOOXO$kCCCCCCCCCZ=@ouCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCZq9009999909oXOOX%CCCCCCCCC", "CCC7XoqjCCCCCCCCCCCCCCCC7..sCCCCCCCCCnuNCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCd,CCCCCCCCCCCCCCCCCCCCCCCD@# #..jCv$rVCsO%OOOOOOXX.. .XXOO-%O%ooXOOoOooOOOo.oo. vCDooCCOOXo...oOOOOoCCCCs+oo+o.vCCCfwzCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCb*bCCCCCCCCCVCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCnCCCuXXXOX-CCsyzCC@X.OOXXXXoXoX.X..oOOOO$O@-OO-XX..oOOOO-OXooOOOOOOooXOXXO@O-bCfCkCCy@@#X%@DCCCCCCCCCCCi .oOOOOOXOXyCCCCCCCCCMOofCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCoOXOXwCCCCCCCCC", "CCC9XooXCCCCCCCCCCCCCCCC9X.DCCCCCCCCCbX wCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCvXkCCCCCCCCCCCCCCCCCCCCCC5+# o#oNCkzwCC9X-%XooOOOX.....oXX%%-%OO.ooooOoooOooXoX..vCsvyCCXOXX...OOOX#.CCCCl...O+OsCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCb--XXX..X-X--XbCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC>XXOXO9CCggiCA...OXXXXoo.ooXXooOOOO%$*@OOOOXXooOOOO-OOOOOoOOOOOX#@@XO@O*-gCnhycCk*OXXO=6CCCCCCCCCCC7..o+O<9990$owCCCCCCCCC>OfCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCsBCCA...XXXyCCCCCCC. ..XXoXoX.XXXXoXo...OXXXXX-OOXX..OOO@*@=-OXXO-OOOoXXXOOXX-X*OXcCvBNmCzo+*-==OzCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCk:cCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCfOoooOX9CCCCCCC", "CCCCCCCv$Xoooo. OOOO.OOOOOo.OOOOOOoo.vCsvwCCXOO-XOXXXXXo CCCCCCC&ooooo5CCCCbqvCCCCCCCCCCCCCCCCCCCCCCsOoo...XOOXoXoosCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCkOO-OOOO,VCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCs..XXXOcCCCCCCcX..X....o..XXXX.Xo..oXXO--XO-XXX..oO*O-@O@OXXOOXOOOoXooXOXO@OOOyCCsfuCC$XO*=*%9CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC9$BCCCCCCCCCk@oXXOO0CCCCCCC", "CCCCCCwXo.oo.o.$nCCCCCCCCvsDdCCCCCCCCCCw .....wVCCCCCCCC9OOXdCCCCCCCCCCCCCnOXOouCCCCCCCCCCCCCCCCN%X..+#+ACkVmnCkOXXOXXXXOOOOoXo.. .$CCuOOXo..%OO...OOOOOO...vCsCDCCOOOOX-XXXOOX.CCCCCCCf .oO+OmCCCCCCCCCCCCCCCCCCCCCCCCCCCCsXooo.XoOOoXXoOkCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCvXO-OOX;fVCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC=..OOX=CCCCCCCcX..X....XX.XXXXooX.XoOX-OXXOOOOX.ooO@O%$=*OXOOOX-XXXo#@XOXX*@*O=CCuwvCCwXOO*@OONCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCgOogCCCCCCCCCV7@%OOX9CCCCCCC", "CCCCCCXXoooooX.dCCCCCCCCCCCCCCCCCCCCCCCD +..wCCCCCCCCCCOOXovCCCCCCCCCCCCCwXXoXDCCCCCCCCCCCCCCCCwOXoo+.8CCzCjCCrOX.OOXXOOXOOOXO. .XOCCb-OOoOoOOo...O%OOOo.. vCDCsCCOOOOXOXXXXXO.CCCCCCCV.oo+%OaCCCCCCCCCCCCCCCCCCCCCCCCCCCCgoo...oooooo.XXmCCCCCCCCCCCCCCCCCCCCCCCCjkCCCCCCCCV%XOOOwCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCgnCCCCk...OXXuCCCCCCCCk...X.XXX..X.XX.o. ooOXOO-XOOXXX..oO@-%O=*XoOOOOOO#XXoOXXXO*@O**hCCCCCCnXOO*@O%iCCCCCCCCCCCCCCCCXwfNCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCV@#OwCCCCCCCCCCCcOOOO9CCCCCCC", "CCCCCCq..o@vCCCCCCCCCCCCCCCCCCCCCCCCCCCNcbvvVCCCCCCCCCCCC.Oo.vCCCCCCCCCCCw..o.o=CCCCCCCCCCCCCCCCCCCCv0.sCCCCCCC;Xo..oXOXXooXOXXOX. .OCCCvOOOOX%Oo..oOOOXXoXX vCCCCCCOXo.oXOOXooXXCCCCCCCCC0oOOOOCCCCCCCCCb$#O=mCCCCCCCCCCCCs0BCCC5O+%+Oo.oMCCCCCCCCCCCCCCCCCCCCCCCCV<+@O$kCCCCCCCCo..+5CCCCCCCCCCCCCCCCCCCCz%$fCCCCCCCCCD 7CCCCCCC", "CCCCCCCCCCCCCCCCCCCCZ&... . wCCCCCCCCCCCCCCCCCCCCCCCCCCCCvOOo....kCCCCCCCCCCCCCCCCCCCCCN$.#...oOuCCfCmSCA+ ..ooOXOOOOXXOOXOOXX.. ..zCCCCCnoOOOOXoOOXXXX.X.vCsCDCCXXooooOooX..oCCbCbCb.qCCCCzZCw. ..XmCC6OO.Ooooo9CCCCCCCCCCCCCCCCCCCCCCCCCB5Ooooo#<09oXoooOvCCCCCCCCCCCCCCCCCCCZ<.:VCCCCCCCCz .5CCCCCCC", "CCCCCCCCCCCCCCCCCCCCCCCs. CCCCCCCCCCCCCCCCCCCCCCCk0,....oO#....X@VCCCCCCCCCCCCCCCCCw..O... .cCCCCCCCZ$+. ..#O%=oO$O.oXOXXO.OOX. XO5CCCCCCVXXo%oooOOOOO...SCvssCCXOXXXXoo.XoXoCCCCCCb ..aCCkCkVCz... .+nCCCCCCZ@OOXXOOoO-rCCCCCz9mkCCN2OXOOXOoXXXXXXOOO-O-*OX. XXoo,VCC9fVnCCkOoooOOO*yCCmcm;BCCCCCCCCCCCc9OOO-@O=OOXXXXuVCCCCCCCCCCCCCCCV5O*O@OO@6ZCVZCCCCCzCCCsXXo@@OO@O@bCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCsXo..zCCCCCCCCCCCCCCvNCCCCCCCCCCCCC", "CCCCCCCCCCCCCCD.. CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCAwXoXX...oooo.;vCCCCCCCCCCCCCCCV,oXo..OokCCCCCCCCCVh:OOOOOXOOOO-fCCCCCCDkCCn=-%O-OX+@XOXXooO-OO-=**O...XXoX5VCVfCVnCCkoooOOOO-yCCn>wCCCCCCCCCCVrOOOOO-O-O-O#XXOX=sVCCCCCCCCCCCCV9o@**@*X6ZCZq7ZCCCf5fVCCn5ooO*OO@0CCCCkiBCCCCCCCCCCCCCCCCCCCCCCCCCCV%.o.ZCCCCCCCCCCCCCCCCCCCCCCCCCCCCC", "CCCCCCCCCCCCCCs . CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCz9X..o.X...oOOOsZCCZCCCCCCCCCCjnCCV5oo..o o5ZCCMkCCCCCCCCCCCk=@@O*@O5ZCZmZ7zCCCwnClnCCCsooOOO@MCCCC<$O8cCCCCCCCCCCCCCCCCCCCCCCCCCjX.DCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC", "CCCCCCCCCCCCCCD. CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCBs$XX...XX....oX5nCCZfOvCCCCZnCCk@DmCCV5O.oo. #7ZCCACCnmCn@X..XXXXXXXX.X. ..OOO-OOOOX=CCCCCCCCCNXXX. vCs0=CCoooXooXoXo..oCCvCbCc oo+oo+%OOo...XX.O..%kCVnu=nCCCCVVCCCV=OXoOo0kVCCCCCCCCCCCvfjzXbCCvXCCC9kCCbXCCn5sCCCvCCCCCCCCCCzqoXXOOoOOOXXO:zCCChvg7CCCCDO=-OOOX@XXoooXOOXX--*==**X. oooOXOO5VCV>pCCCCkOOO=OO--yCCCn$umCCCCn=XOOOOOOO-O=OX#..OOOO%:mCCCCCCCCCCCAq=O@@9VCZbCmzCCCCCknVObCCCCkfACCv=O--O%OO-XXo.ooO*X-X---*-***...ooooOOOOO5VCCm$rnCCkO-OOO*OOyCCmcCkmCCkO*@OOOO-OOO%O*O.XoOO$nCCCCCCCCCCCCCCCCByVCCCn@kCCn=XOsCCVVCCBwBCCCkCCCCk%O$+OO@+@+Oo5ubCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC", "Xo..kCCCCCCCCCD .CCCCC<. . .+O0CCCCCCCCCCCCCBzs5oXooo.o....X. .XX@DZCCCCCgOO$@%O@O@@+OOooo5szNCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC", "XX..8CCCCCCCCCs.. CCCCCCCzq.oo.5CCCCCCvvkar7. ..ooXXoo... .....$fZCCCk8CCChCCCz+ooo.o .@MCmuCCCCCV5++#+# X#OXXXOOOOOXOooOOXoo9wszNCCCCCCCCCCCCgqkNCCCZDOOXXX--X.. .XX--OXXOO-OOoo.ooXXOOOOOOO=OX..X.Xo.oXOO-XOOOOo..5VCVfCqkCCkXX.XOOOOpCCnVCVmCCzOOOO%nCCCCkkCCV9O@@**$+,VCCCCCCCCCCCCCCCCB5OXooooXoXwCCCCCZbCCCVCCCufBlfBCCCCCCVSfu9,ooo##Ooo.vCCCCCCCCCCn=*OO90q99DsggssggvMbbMv", ".XX.XfCCCCCCCCN&ooO.. ..X.jCCCCCCCbX..O+ SCCCCCCCCCvjgl8wCCzuMCCCCj9.oOooooooo.. ooo..ooO.....O$mCCn+qmCCV<#o@.ooX>VCCnVCCNCn$#. .ooXXOOOOOoooOo%oo%VCCCCCCCCCCCCCCoo.... ..XXX.CC7 sCv.oooooOO+O.o...OoOoo+Oo.oooooo%oO.XXOOX0hCCCVcczwwCCkukmCCCCCCCZv6O+@*-OOOoXXXynCCCCCCCCCCCCCCCCCCCVZCCCNw.XXXXXXOXX.. .XO-XOOOOO-OOoXoXoXXO%-OO--=-X .X.oooXOOOOOXXOOO...,VCVq-nCCChXXO%O%OOwCCCV55mCCkOO$nCV9nCCCCZ6O-O*@=;5VCCCCCCCCmVCCCCCCCCChcCCm=-o+$*@=*--OXOOOooo+#++ooOoOoOO@oOOO+OO***OOO@oO@oo.oOooO.ooobCbbbcC7 .#@@@$$DCCCCCCCi@@XvCCCCCCCCCCCCCCCCCC", "XX..XXXoX..osCCCCCCCCCCCCCCCCCCCCCcoooX..bCs .CCooX#oX... .oXX....X....o.o...oo. ....oooooo...OOO%Oo+oo. o+nZmzj=CCCV>X... VCnOXO%OOO.oXXX.oXo.vCCCCCCCCCCCCCCCCCCCCCCCCCSo+%oOOOOOOo....XX..XoOo.oovCCCCCCCn;$OOOOXoOXXXXX$OOoO$$OOvCCCCCC0o.#XOXoooOOOOOOO%Ooo..O%OXoXOXOOXXXXOXOOXXoXooO%OoX.. XOO%OOOoooooooXoXXO--O-vCCCs...XX.XooXOOoXXoXooXoo.oOXOO---OoooO%OOO+$+%O%$$%-OOoo@OOO=mCVi=mCCCm=OOOOX%**X---OOOOOoo #ooOoo.OoOOO#XOoo@@oO--XXXOX+OOo.....ooO+ovCM77nC5..#@@@@$@qCCCCCCCCZ=XX:VCCCCCCCCCCCCCCCC", "XOX.XXOuvVCCCCCCCCCCCCCCC=@wZCCCCCv.oo. .bCCCCCCoo.XOOo. .XOoX........XX....XX. ...ooooOoo OO%Oo+$$ooo o o+MCCCCunCCZ,.Oooo5uMCCCCCCC", "CCCCXXookCCCCfzCCCCCCCnkCCCCioouCCbXo.oX#bCCCCCCooo%%OO..O.OOOOoooXoo..oOO+%+$ooo.oOoooooOooo.o++$%$$% +o+ ..O.#. ..OOXXo.. ...OO-mCCV,9nCCZ5OooOXOo,ZCCCCCCCCCXXOOX..X... #CCDajCvo%Oooo%$oo...qjZCCCk$ooOOOoOoOOoXXXoooXXVCCCCCCCCC:Oo..ooovCAbbCC9OOOOooOOXOXosCCCCCCsO.oOOOX%OO-XOXOXXOXXX-XXOXXOOOX. XXXOOXXXXoOooOXX*****-OO. ooooooOXOOOOOXXXXX$nCCnVCfVCV9O$%OOoo=nCVnCmzCCm==OOo..o%-@*O-O-***=*X-@@*o@OO$O==*=@%-%O+OoOo.oooooooooo.XOooXOO+@@OO.o...o. ..oo...oobCNssACkgdsgsBCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC", "CCCC.oXoiCCCCCCCCCCCCCs7CCCC7oo0CCvOo.XXXbCBbbCCooOOOOO.oOooO.OOoXXX...OoOOO+%+oo ooOooooOoooo.o%oo+$%o oo o..X.XX .ooXXoX. ..OO%-nCn6CznCCV5oooo%oX,ZCCCCCCCC.XOXX..XX... CCe5xCSoOoOO%%$O.....XX6saoOooooOOoOoooXooOXXXXjCCCCCCCCCvOX..oOoSCs+%CC9XOOOooOOXooosCCCCCCs..XOOOOOOX-XoXOOO%OX-XXX*XXOXXX .XXXOOXOOOOOXXX#OO-**-OOo. .ooOo.OOOOOOOO-XX@nCCz+OO>iCCCCCCCCCCCCCCCC", "CCCC.X.X.CCCCCCCCCCCCCs.,CCCDoXObCbX##.oOvCsCDCCo.oOOOOo.oXX@XXO...o..Xoo$%oo+Oo...O%o.ooooo..#o%@@$%o ooo +oo ..o.X..XXXXX.... ..ooOoOX%nCn9VCCCCV5OXoo...OOOOO-*XOOOXOOOOX. XOO-XXXOXXX..XX--*XX---X. o$nCCCCh5VCV5XOXXwCCCCCCCZ5kCCm%oo.oXO@@$OOOOXOO-%OOOooXXXOO-O****=***:=*=OOXOOOO=mB-OOO@OOOoo...ooooOOo...ooXOXOoXoXoXXOoOoO#OOo..... . cCb<,bC9+$@+ObCCCC=OO,CCCCCCCCCCCCsXXXCCCCCCCCCC", "CCCCb...kCCCCCCCCCCCCCCCZsCCv oXCCvXoo...ooooo .o o ...oo..oXoXo...X.XX.Xo%#oooO+o.oooOo+OO....+oo+oo%$++o oSCCCDoX ...XXX... .oOOOOOOOXOOOOOOo.Ooo.X.... .XoXXo.....o.XXO.#CCCCCCmo.oooOOooo.....Ooooooo ooOOOXOOOX.oXOXo.o.o0jZCCCCCnjzjOCCCCCCCCC0O@OOO@+o@OOOsCCCCCCCCn=khkNCCCCCNf5OOOXXoOOOO-$Oo. XX--XOOOXX..XXO-X-XX--OX..@nCCkkCCCCV,XXOXXXwCCCZsCCCCCn%OooooXO@@OO%%OX--OOOXXXXOXO*O-*****4=**:--OOoXXOO=mCMOoOOoO%OOo ..oooo.Oo...ooOooOXoXOXXXXooXXo+oo..... .bCSbMbC9+%O%$bCCCCwOOONCCCCCCCCCCCsOXCCCCCCCCCCM@@onCCCCCCCCC", "CCCCs...%VCCCCno.. &ZCCCCCCCf..7CCv.X.XX..X.... o .ooooOO. ...o.. ...X..O%$OooOOoo.#ooO+Oo.o+o..ooo%$+oooo bCCCs=OOX..o.Xo... ..O-OoOOOO.O%OOOXX.X.XX......XXooX......X.X...#rCCVmCnzCCkoXOoo..o...oooooo.oOOOooo%eNCCCBwNCCCzuzCCCCCZku5oOo.oOoOOO%$@O%OOOoOOOOOOOo....XXOXO0uzVCCCCZkrNCCChsNCCCv0XX.XOO--OOOXXX.XOOXX-***-*MCCNCCzVCV5OO%OOXX=nCVCCnjCCn%OOoOOOoO.#%$OOOO%-OOO-OOXoXXOOOO-@=4**--XXXX-**oOzCCCCCCCCrOOO@OOo ...oooOOOoO..##OOo.ooooOoooOOOO.oooX....O7sjZCCCCCCq@++@@bCCCCCCB$O@DCCCCCCCCCb@OOkCCCCCCCCC", "CCCCfX..XrCCCCfo. . wCCCCCCCB@.5CCvX#X.XXXX...o. o.ooooOoX ..XXX. ...X...+++oo.ooooo+O.+Oo..O...o+%+$$+o o .bCCCs-OOX..oXXo.. . oOOOooOOOOOOOOOoXXXXXX.. . .oXoooXo.Xo.XXX..# rCCVmn%NCCkOO.o.oo. .OXXooooooOOoowACCCvhnswCCCCCCCCmu5XoX#OOo.ooOOOO%$$O%OOooO%%%OOOoo..ooOOXOOOXX9fnCCCCCCCC;mckmCCCc9.XOX--OOOOOo .X*XX-**-:nCCv.jCCCV5XOOOOOO%mCZ5yCCCCn%oOOOOOOOooOO-OOO%OOOXOOOOOoXXOOO*@*O**---*-***X*yZCCCCCCCCCgO*O@XO..+.oo+oO+OO.O.XX#OoXooXXOooXOOOoo#O..;wkNCCCCCCCCCCC0+$@++bCCCCCCClO@@kCCCCCCCCB=OOwCCCCCCCCC", "CCCCZ,.XOXwVCC=X. . .wCCCCCCCq 7CCv.ooXXoXoX. ... .XoOOOo. ..XXX. .XX...+@@ooXooooo#OooO@.o#X.XoO$@$$O#o#o #bCCCs-OOX..XXXXXX. ..XXOoXOOOXOOOOOOXXXXXOX.. XoooXXX..XXXX..oo.. eVCZ,kCCCCkXo...o....oOoO..OooO5mCCCCjqCVgDCCCCClr@OOOXo.+@OX..ooOOOO%$%$OOooO%%OOOOo.O..ooOOOOOXoOO.=unCCCCVwcCV=NCCCCv;XO-X-X-X-XooO-OO=-*:nCCnZj,CCZ,ooOOOOO-nCVnn=vCCnOoOOoOOOOOo.oO$OOOO%OOOXOOOOOXooO-O**X--X-*-*--O0bCCCCCCCCCCCNXO-@OO...#o.+O+OOo.OooooOOXoooXOXOX-OooXXrdNCCCCCCnCCCCCCCCq#++++vCCCCCCCCko@;CCCCCCCCCfOO$CCCCCCCCC", "CCCCCN#.OXooXOXoo. .o5ACCCCCk+wCCb.XoXXofvvvvbbbbbbMMvbvvvbbvbvbcvbvvvvvbbbbvvvSSSSbbvbbbbbvvcbvvMMMMbbbbbblbSVCCCNvvMvvvvbvvbbbcSbSbbbvvvvvvvvvvvvvvvvvvvvbcvbvvvvvvbcvbvvv,ooo. rCCCCCkjCCko. o.X..XoO.O..Oo:vCCCCCCZOfzCCCCAi=#..OOOXo.+O#X..ooOOOo$%$$OOOOO%OO#OOo.Oo..oOOOoOXoOX.oOOkCCCCCCCCCCCCCC5O-@OOo...o++ooooo.OooO##oXooXXXXXXOoXqkZCCCCCvhkk...XXXo%nCCs=kcCCn=ooX...oOOOO@OOOoo.oOOO-XO-*-X9yscvNCCCCCCCCCCCCCCCCCu=-OOO.XOOOO@-OOOcCCfoXooX...ooo...O##.X9BCCCCCboO+@#o# o..oOoXXooooXwcCCCCCCCCCCCVuX.Xoo++oooooXX#..O%$%%OOOo+o + o#oXooXXX..XXXXXXXX. .o.OOOOOOoXXXXO-OOOoo.. .o.XXXXXXXXXOo%nCCkCCACCZO%OX-**OO.XX**-O-OOX.XXOOOO%OXOoo0CCCw+....OOO.XwZCCCCsrkBCCCk>-OOOXoXXOOOoXXX,izACCCCCCCCCCCCCCCCCCCCCM@MCCbmCCCCCCCCCCCvoo@@CCCCC", "CCCCCCCCCCCCCCCCCCCCA....CCCCCCCCCCCCCCCCCCCCCCCCCCCCNkq.X.ooXXX....Xo9nCCCCCChvCCv@OOOOXOXoX...o$$&o%o+$%+o .ooOOOX....oOOXXoXX ...OOOOOOo.ooOOOOXXooo....oXXoXXo...Ooooo@mCCdVClCCV5XooOXo.wCCCCCCCCCCb%OOoooXoo+oooXXooXXVCCCNCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC6-XX-X--OOX...O-OOXXX5NCCCCCCCCCZ6Oo.. ..=nCVqZnlCCn-XXoXoO.X..oOOoOOOOOOOO#OO@%O@%-X-Ory5OXXXXOOOO*X-*-O.X---X-X*OO#OXOOOOOOOXoO%vCCZ<..+oOO.$kCCnBCCVcCCCM0@@OOOOooXoOooorhmCCCCCCCCCCCCCCCNVCCCCCCCCMOkm>O@bCCCCCCCCCCM+oO9CCCCC", "CCCCCCCCCCCCCCCCCCCCd....CCCCCCCCCCCk;fksuBCCVCCCCCCCCCCZjqooXoX.X..XoX.wZCCCnXfhCCZ5OooOOXX....o$%$%oo%$++o oo+oooX....oXOOXXoXX . X.OOOOOooOoooXOOOX..o....OoXXXXoX.ooooXoo+mCCdm7dCVZ5oOOOo..wCCCCCCCCfOooOooXoooO+XooXXXXXsCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCAyXXX-X--OX..XO-O-XoXOOvCCCCCCCZ3**Xo...@nCCCw**XXoX +nCZnCCbCCn=-OOXXXXX.o.ooO+OOOOOOoOoXO%OO%@O-OOOOOOO.XoXOO--OO***OXOX---X*OXX.XXOOOOOOXooo@@ACCCn%OOOqZCVgVC9NCCCs=XoO@@o@O$@OkCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCNskCCCCCCCCCCCCCVBCCCCCCCC", "CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCz9DCCCCCCCCuo.Xooo..%nCCCn%lCVO+@@O+5CCCCjVVzCCCCCCCCCVssmCCCCCCCCCCCCCCCCD ..XvCCCCCCCCCCCCCCCCCCCCCCBi=O-O@OoOOO5CCCCCCCCCCCC", "CCCCCC9oXXwCCCCCCCCCCCCCCV<..,VCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCD..XXXbCCCCCCCCCCCCCCCCCCVCCCCCCc. .oOO$VCCCCCC7 ++$oOO9CCCCCCCCo.... . ..oOOOOOXo...X.oOo .XXXXXOOXo..o.X.&CCkVeCCd.ooOO$%OOo..5CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC0XO-X...X...ofCCuZkCC;ooXoXoO..OoOOOozCCCzoXOXooOOOOXX. .XOOOOsCCCMO-*o.o%@**@@oX.XOONCCCCCCsoO+@@%OvCCCnmCfCCCCCCCCCCsoofCCCCCCCCCCCCCCCCs . ...vCCCCCCCCCCCCCCCCCCCCCCCCmOOO@@OOOOOuCCCCCCCCCCC", "CCCCCC9XX.uCCCCCCCCCCCCCCCZmCCCCCCCCCCCCCCk99ACCCCCCCCCCCCCCCCCCCCCCCCCzuCCCCCCCCCCCCCvCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCcs9= .......OO.. sCCCCCCCCCCCCCCjwvCCCnCCBCCCfOOOOXOqCCCzCfCCCCCCCCCCCCCCCl@o+@OXXoO#XXX....%OOOOO+O#OOoo . . . X#OOo%%%@oX@@-O@@OO$%OOOOooOXOOmCCCCCCCC", "CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCB5..OCCCCCCCCCCCCCCCNjNCCkXOO..omC87aCl.ooooXXoX.Xo..X.X... ....XoXXOX%=-OOO. ..XoXoOOoXOoOVCkCkCC8# # %+o%ooSCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCc ..X..XoXX9CCkCxCVoo.....oO+OsCCCCsOOOoOOO%Oo..oOXOX0CCCCs*-*****-O*=eCZo=vCw-XOOOokCCV>ucCCCCCCCCCCCCCCCCm;OOoXOXOXX.... .o+OOOO@@OOoo+. .. . ooO+O++%@XO@OOO@@OO=@%%XOooXXO%VCCCCCCCC", "CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCqooNCCCCCCCCCCCCCZ.=hCCNOOOo..dCjCkCVoXXXXooo.X.oXXX.X.. ..ooXXOo%-=%OOo..OOX.XoXXOOX:CChChCC # oo o%oZCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC....XXoo.oXXCCkCkCC;XX...oOOoOsCCCCfOOOOOOOOOO.XoXoo@yCCCCs*******%O@$kCvBkmC,-O*OOoNCCCcrZCCCCCCCCCCCCCCCCCV5oOOOXOoo......O@@oOO@O@#.+o. ... oOOO%+OOOO-@OOO-OOX=@OOOOOXXrhCM # ooo +o8CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC5..XXXoo.ooXvCkq=CC5..XXooOXXXrCCCCMOOXOOXOOOOoo#oo@OgCCCCs*-*X**--OOOnCkCkCZ-OOOOO;CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCVbvvvvvvvbbMksssdss0$oo..qsaDsDsssssrOO+OOO@*-OOOOXO+%%OOOo5VCCCCCCCCCCC", "CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCVvVCCCCCCCCCCCCCCkCzCCCyOXoXo@CCfmxCq .XXoXXXo.XXXX..#.. ..oOXXOXO=:-OOo..oXOXXXXXXOOsCCnkNCjo# .X.++sCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCD....XX.XXo.gCNjnCCD......OXOO0CCCCVXOXXXOO-OXo.X#OOogCCCCg*4*O**O-XOOCCsCkCbO-OO-OyCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCrO+@@O-OO*O-XX*oO-OOXXbCCCCCCCCCCCC", "CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCdCkCCCkoOo#+oBC7 uCs. oXXXXXoX.XX.X.X . . .XoXXXOoO==OOO...oOOoXXXXX-OcCCCCCCa## ..XX++zCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCz..X..XX..X.iCCCCCCkXX..XXXoXO$CCCCCOOoXXXXOOOoXoXX*OsCCCCs****-*--X-9CC0osCs%=O@=OfCCCzNCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCNf,OOoCCAvvvvss>@%OXX5CCCCCCCCCCCCC", "CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCz;...uCCCCCCk#5kCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCn,ovCCmO@o+oobCMZCCNDsssssssDsssusDsDssusuDssssDsssfgssDDsDssssssDsssDNCCCCCC8+ . .ooO++BCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCA .....X.X#X9CCCCCCNssssDssssssCCCCCkssssssgsssDsDsgsMCCCCMssgsggsssshCCCCBCDOOO*OXbCCbOO@@O.. oo..X.ooo.. ...XX.. ....o.oOO. XooXXOOOXXXO--O-XX%$+. o&&$$&&OCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC&XX.. ..ooXoOO. ...o....oOOOO+%zCCCCC,o@@@OX..XOO=gCCCCC0-*=*-X**-OX.XXXXXOOOOO-CCCmkcCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCuXosCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC", "CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCV$.....uZCCCCCCCCCCCCCCCsCdCCCOO%Ooo.. #oX..Xooo........... ...o.oOO. .oOXOO*XXXOOO-OOOOXO=%. .o+$&o$oCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC ..XX..XXoOXOO..XXooo....OOOO%+sCCCCCuO@O@XX .XXOObCCCCC6*X=-*-OO-OX.XXXOOOOOOXOCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCbfVCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC", "CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCz..oo..eCCCCCCCCCCCCCCCzCzCCCOX@OoXo# O#.oXXoXX........... ..oo..OO.. XOO-O*OOooXO--OoOOO%+o ..+$$++%CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC .X...X.XoOOOO...oOOoX. OoOoOOO8CCCCCbO@O-OX..OO--MCCCCC0*O**--O$%OX.oOOOOOOOOOOCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC", "CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCwXoXX..VCCCCCCCCCCCCCCCC", "CCCCBXXOvCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCgCdCCCO@@+O+DCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC$+#. o.OOOoCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC............CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCOO$O@OXCCCCmkCCCCCCCCCCCCCZvzu$ooXXO-CCCCCCCCs++oVCCCCCCCCCCCCCCCCCCCsXOOXX@bCCCCCCCCCCCCCClu7mCCCCCCCCCCVzu00070=OO@OOO-OXX$@-OOOXXwCCCCCCCCCCCC", "CCCvOOXXVCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCA@...Oooo5CCCCCCCCCCCCCCCCzi=VCCkOOOoooMCa7xCl..ooXoXooXXqCCCCCu. ....XOXOOo%--OOoo .XXX.XOOoOXoOVCkCkCC5# o%ooOOvCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCc ...XoXoXXo,CCkCjCC9oX.....OOOOOoOOoXOVCCCCCCh..Xo9CCCCCCC0*---***-O**iCZ+=MC6OOOOOojCCBkBCCCCCCCCCCCCCCCCCCCClOXOX@O.nCCCCCCCCCCCCCCCCCCCCCCCCCCx@OO+OOO@@Oo@*-O@@OO$@OOOOOoonCCCCCCCCCCC", "CCCvXOOXCCCCCCCCCCCCCCCCCCCs&iCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCt. .O.o 8CCCCCCCCCCCCCCCCdClCCCyXOOo#$CCCCCCa..XoX..oo.XsCCCCC&. ....XOXOOXO=-OoOo XXO.XOOoXXoOcCkcqVCi+ # o+ooO+iCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCi.#...X.oooXwCZ0zhCCXXX....oO+OOOoOooOOhCCCCCCC=.Oo9CCCCCCC0-X-X*****@O,CCACCCu-OOOOOqCCCCCCCCCCCCCCCCCCCCCCCCCCOXOX@XXwCCCCCCCCCCCCCCCCCCCCCCCCCZ..#OO+@O$@oo@@OO@@OO9qq9ssssnCCCCCCCCCCCC", "CCCvOOOOCCCCCCCCCCCCCCCCCm< XkCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC....+O..7CCCCCCCCCCCCCCCNnVlCCC-XO..+qCZCCCC5. oXoXoOXX.vCCCCc.. ....XXXOXOO-$XXOo ..XXXOOOXXoXsCN0sACz# o+oooo5CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC<......XoXoXkCNs9ACnXXo....ooOOOOOOoXOOqCCCCCCCjXXOrCCCCCCC0---****=O-X-ZCCCCCc-OX*OO%CCCCCCCCCCCCCCCCCCCCCCCCCC0XX@@OXqCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCsXOOOOOO-sCCCCCCCC", "CCCCXXXXXXXXO2vCCCCCCq.o9CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCq9uCCCC&O$$$OOABbAdCZ oo+XXoOOOX.CCCCNX.. ...oooOoOo@+OOOOX. ..XXOOOXX....XofCCCCCCA owSCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCZs;.......ACCCCCCVXXoXXXXX.XXXXOOOOX.oOOOO@@cCCCCCCCCCCCCCCCs--XXX-X-X-XOX..bCV>5cCs%OOOOOOOOO$OwCCCBCCCCCCCCCCCl$X@@ooOOO+=CCCCCu.# # ..5CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC2-OOOXnCCCCCCCC", "OOX-cCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCgCnmCCCv ..XOOoBZ,fCCC8 #o+$oo%O%OOwCCCCNX.. . ..XXXOOXOo...XXoOo. .XXX.XoXXoo.o.o.;CCjZeCCdX#oO@$OOooo.5CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCqX-OXX..XCCkimmCBoo@@O+#sCCCA$njCCCCCCCCCCCVzyoO=VCCCCC7 ... ..xCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC2OOO-nCCCCCCCC", "CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCZwZCCCn.. .o+ozCkCbZCc+ +#$+%o%oO=CCCCCsX... .oO.O@XOOXXoXooXXo ..X.XXXOo.Xo.XXX. bCCCCCCCVCbBmsCC5o+ooo.&VCCCjCjnCCCCCCCCCCCCCCCCCCCCCC7..... ..+mCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCvXO:CCCCCCCC", "CCCCCCCCCCB@oXoXONCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCkCCCCCCCw... ..ONCCb9CCs@@ .++OOOOXsCCCCC9X... ..XoXoXooOXOoXoXoX. ...XXOXXXoooOOX..+bCCA8sCC7#oooOOOoo.o.OVCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCZ*X***-OX.. ..;CCs0NCCC9XXX#OOXooo.oXoO+@OOoo..oooOoOOOOoO.ZCCCCCCCCCCM@--X..@*X**=XX...O%OgCCs=fCCm@@OOO..wCCCZwXjCCCCCCCCCCCCCCCCCCCCCCCbvbksucbCCCCCCCCCCCCCCAMCCCCCCCCbbbCCCCCCCCCCCCCbOO9CCCCCCCC", "CCCCCCCCCCbXOXXXogCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCfowCCCCCkXo... ogCCCCCCB$++ ..OOOo.OcCCCCC-X.... . ..OoXXoOOOoo...XoX ..XXXXOXoooOoO..#o8CCqdbVCb#OOoOOOoo.o.#5CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC3X-**X--X. .X.bCVvfwCCvXXXXOXXoo..ooo.O@OOoo..XOOOOoOOOOXO.DCCCCCCCCCCm*-OX. O*OOO@OXX.oOO@=NCNVCCCCs@@OOo .jCCCvvCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCw.cCCCCCM;o@$>BCCCCCCCCCCnyOO9CCCCCCCC", "CCCCCCCCCCCbz=XXO9CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCfVbwCCCCn#.o. ..qCn5mCCCwOO+ # .oOoOOvCCCCNX.... . .oXoOXOOOOo....oX ..X.XXXoXXXXoooXo# bCAbCkCCa+oOOOOo..oo#oDCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCsX*X*--OXX....qCCkCvNCC9XXXXoXXoOo..XX.oOOOoo#.oOOOOOOOOOXXX@ZCCCCCCCCCCO@-o. XO**@*OXX.XOOoOrCCCCCCCC0+oO....nCCCCCCZZCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCA..+7770@O-OO*Oo9isssss93OOXoO=CCCCCCCC", "CCCCCCCCCCCCCvXXO9CCCCCCCCCCCCCCh0skMVCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCsVVgCCCCV@oXo. .+ZVksXfCCCCCf=OO$mCCCCCCCCCC", "CCCCCCCCCCvXXO*OVCCCCCCCCn%.XXXXOXXXXXoX.oooOoOoOO+OoXooXO%OOOOO*OO-OOX..XXO-OuCCC@*-XXO*==-*OOX .XXO%OOXXOOooOOOOokCCZfCzuCCCuOXXo@%Ooo=sCCCCCCcCCCs5lbCCCCCCCCCCCCCCCCCCCCCCB$sCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC", "CCCCCCCCnXOOOOOOOO. uCCq...o+OvCCCCCCCCCCCCCCCCCCCCCCCC$lCvgbCCCCCCCk;oo.o. .o.%zCCCCV9VCZ5. . o%+%$OOOo o$OOOOOXOCCCCCCqoo. . .oOX%OOOOsCCCCCCCCCCCCCCCCCCCCCCCCkXoO.O. +nCCCCCCCCZ<...o..ooooooO.oooooo.oOoqVCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCu.XOOOOo.XXX....OOOO---*,ZCCCCCCCCn$OXoXOOOOOOOXoXooo.Oo+@$OOoooXOOOX-OO*@OOOOOX.XOOOOOnCC@**XXX*--**OOX..OO%OOOOOOOXoOoOOOoDCCZd;nCCCCz@oX@*OOOo@,zCCCCCCCC;kCBffCCCCCCCCCCCCCCCCCCCCbOfCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC", "CCCCCCCCvX-OOO*OOO...ZCnsCNNCCn%oOOX...XXOO%+$OOooX..OOO@@-O-O--XOOO.OOOOO-X-****#*-*=*--OOXXOX-X@O-OOOXX-XOooo..ooooOoX..,nCCCckNVCCCCCCCCCCCCCCCCCCzOOoXXOO... ..X.oX$nCCCCCCCCCCCCCCCCCnZCCCy=cCCn+..OoooooOoo:vCCVjvf0CCCCCCCCCm......XOOO..+$$o.oOO+OOO$OO$%OOO%OOooOooOoo.oOOXOXoXoXo.ooOOOXXO;gZCCCZ:ZCvfVCCCs-OoOooXO--4:nCCCV,rCCV5...oOOO5VCnzV,NCCn@.XooXOOoOOOOO.O%%O+OO-O=-OOXXXXXOOOO**OOX-XX***4**@OoXXXooooOO-XXOO@oOoo. oo+oOoXo..#oOO#XOOOOOO>fVCCCCzkk$BCCswjfbVCCCCCCSoOo+O#bCCCCB@@;ZCCCCCCCCCCBO%o=VCCCC0ooOO", "CCCCCCCCCCCCCCCCCCCCCCCCCC5oo=CCCCv oXXXXoCCCCCCv@AzkubCCCCCVjqX.. .oO.. oO+O+OOooo.+OO#%+O+o..XO+$$%%OoO+o# ...O-O*XXXoXXXOqCCCCCCCCCCCCCCCCCCuOooXXOX... ..oXo%nCCZCCCCCVnCCCCCCCCCCCCCCbCCn+...OooooooO.OOwVCCNwNCCCNCCCCChXX.X..XoOO o$+o.oooOOOo$@O@%OOo%%OooOX.O.o.ooOXOOOXXoXXXoOXOX-OvCCCCCCyyjNCCCc,OOOOOooOO=O**:MCCD5NdCCZ5.oXXOOO1VCn5wCCCCn+XoXOOOOOOOOo.O+%OO+*O@@O-O-Oo.oOXX-O-**-X*X***=**O@X#XoXooOOOOOOOOOOOo...oo%ooOOo.#oooooX#@OOOXOOXrzCCCCCmCCC9zCCwdCCCCCCMo+oO+#bCCCCC9+OdCCCCCCCCCCCOOOosCCCCqOOOO", "CCCCCCCCCCCCCCCCCCCCCCCCCC5oo.CCCCv.OXXXXXCCCCCCVsbZCCCCCAfqX.XX. Xoo.o.#+%oOoooo..Oo.o+%+OXo.oo+$$$$Oo### oo.OO-X%X..XXXXo.DCCCCCCCCCCCCCCCCC:OoXXXOOX. .oo%nCCv+nCCCV<,CCCCCCCCCCCCCCCCn$. XX...oooOo.oXX%fCCCCCCCqukVCCCNd;X..OoOOo..O@O oooOOOO%@*=OOOoOO%OoOO.ooo..OOOOoOXOXoX.XOOXXOXvCCCCCCNnCCCNp-OOO-OOOoXO=OO***nCCcCZfVCZ<.O.OOO-,VCNCCnnCCn@XoOOOOOOOO..oO%%+O-OOOOOOOOOoXOXXOO-*X-XX*X****OX*XoXoOOOOO@O-XO-@OO....o++OOoO.oOOoooXXXooXXoXXOOX$wzCCCCCCvhhjszvMvfa;XOOOOOo.XXX#nCCnVCqZCZ5....oXo,ZCCCCCCCCCCCCjOoo.o..o..ooooo....oOOOOoOoXXXXXoo.,gACCCCCCCC9zCCqgCCCvsjvbCCCCCCCCCCCCCCvvksbCCCCCCCCCsOOooOOOOOOOvCsOOCC@O...XOO-OOX#.X.XXXX-X*-*--OXo+nCCvfovCCV5OhCCCCCzZCC9wNACCn=OOOOo.oOO%O%%OOOO-XOXOOXoOO**O*-***4;**==--OOXoOXO-O@O*oXO@OOXo..o.oooOOoo.#..XOOoOOooOOXXXoooo.OoX.... .. CCwcsCM+@O@O$bCCCCCCCCCVcMMmCCZMvuOOOOOhCCCCsOOo", "CCCCCCCCCCCCCXsCCCCCvo9CCCCCCs.CCCvOX..X#XCCaCsCb..o...OX..ooXXo. ..X..XoO%oOooO+o.oOooo+o+o.. ooo+o +$++ oo.. .Oo. ..XX.... .oXOOOoOooOOOOOOOOXo.XoOmCCkVCgZCZ5....o.X,VCCCCCCCCCCCCCCVCVCCCCCCCCCCCCCCV$O#...o....oooo. oOO.oooO%XooOXoo.ooOoO+OOO@8DzVCCCCCCCCCNbVCCCbssssbCCCVvNCCCCCCCVvvVCsOOXoOOOOOOOvCDCsCC%OX...XOXXOXXXXX.XXXX--XX-**X...X@nCCb$zfCCCCChXXXXo5ZCn75ZCCCn%ooXX#O%+OO*XXX-XOOOOXoXXOOO-O***=4@*===-OO@oOXOO-O*OOOOOOOOO...oo.ooOoo..ooooXXOOXoXXXXXOooX+Ooo...... CC7ssCM++$OO+bCCCCCCCCCCCCCCCCCCCsOOO=VCCCCC8oOo", "CCCCCCCCCCCCCsOCCCCCs.9CCCCCCCCCCCVbvbScbbCCssSCSoo..o.O....XXo..........o+..ooOo..ooooo++ooo.o.+o%ooooooo #+o..XX....XXOXXX.. .X.oOOooXoooOOOOOoOOO%nCCkzCCCCCCCCvOOOOO@", "CCCCCCCCCCCZooo...CCCCCCCCCCCCCCCCvX...XXoCCsCsCv..oXoX.....XX... ..X....oooXoOOo .#+oo....oo..oOO%OOo++# .o..OXoXXXOOXXX... ..oOXOXXooOXooo-nCCn5wCCCZ<. .o..X5VCVs,wCCCn$XoO.# 5VCCCCCCCCN...o.. .ooooo.oX$ZCCCCCCCN=oXo.Xoo+%OoO+%O+oooo...oooOooOOX.OO%XX.OOOoXXo.o.oCCCCCCCs%OOooO-OOOOvCsCsCCOXX. .X-%OOOOOX....XX--X-X-**.....oooooO-nCCvCVfCCZ5oo.XoOO5VCCCCunCCm=OOOO$*-O-OOOOX.XXXX-*OOOO@XO*-@==Oo.XXX-*O*@==OX*@-OO+.. ooooooOoO...##XX..oooo..XoXo#...... ....CCsCsCv++%OOO+$imCCCCCCCCCwOOwkCCCCCCCCCCl$OXOXo", "wDjvvvvvvvvwoX...5CCCCCCCCCCCCCCCCv..XoXXXCC..sCv..oOOOo....X#.. . .o...ooOXoOoXo .ooo.o......ooOOOOoO@+. ++.ooOXX..XoXOXX. ..oooOOOOoOXoo%mCCmVV,ZCZ< .. Xo.,VCVfCzhCCn%oooo.. oACCCCCCCCz....o..oOOooo oofCCCCCCCCqOOXoo..ooOOXoo$O#oOo...o ooO+oOOOooOO...oO%XXXoX.o.CCVvvVCsOOOOooXOOOOvCsCsCCXXOo .XO-OOOOOO.....OO**-X*-OX...ooOOOOoO-nCCvV,kCCV5...oO+%5VCCu5vNCCm=OOO%--OOOO-OOXXXOOOOO-O*OOO-*#*4-XXX.XOXO=*==OXOOOOOoo ooooooXooo.XX#ooX.OXX.XXXoo#X#X.X.. . .oCC8ssCb@+@@O@%O@>ZCCCCCCCCVbZCCCCCCCCCCCCcOXXOXo", ".X...XXXoXXXoo...uCCCCCCCCCCCCCCCCb..Xo..oCCvvACb.oooOOX..XXXXX.. ..Xo..oOOOOOOoo.o.o.O.#.....o+oOO+O#@O$. .ooo+.XX..OXXOXX. ..OXXXXXOXXXo%nCCbVCfVCZ, ..rsbZCCCCCCCCCCCCCCCCCCCCCCCCCCCCu", "CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCbOoXXoOXCCCCCCvosss:vCDsss*bCg>ssDXvCsCCCCCCCC0$@sCCC", "CCCCCCCVq.=CCCCCjvCCCClDuw+.X.XXXXOXXXXXXbCCCCCCCCCovCCD5CC#bCCs9CvXCCC0sCboCCC9DCb#CCC.vCb#CCCobCs0CCCoSC lCCs7CC.bCCs7CCCCCCCCCCCCCCZ6XOXXoXXOOOOoObCsCsCCXo.. ...XXXXXX...... eZCCCCCCCCCCCCCCCZs$.##OOooooXOOOOOo+oXXoOOXO.oXoXo#Xo@OO+O+O%$+o o%OOOOOOOo.OOoXooOOXOXXX.CCvvvvCsoXOOXooXXXOMCk00CCX*-XX...oXOO%OOOoXXXXOXOX-X-***X. o#oOo#OXXOXOO*OXOoOooo.oOOCCCCCCCXoooOOOOO%O-=6VCCCCCCCCCCCCCC@MCCsqCC@vCCs9CCOCCC0sCvXCCC5sCbXCCC#vCs9CCCXvCs9CCCovC0sCCb CC7sCCl.CCCCCCCCCb+&@@*@MCCCCCw@$;mCCCCCB+@@VCCCCCCC0$@sCCC", "CCCCCCCCCXoCCCCC5.ACCCZs@......XXoXO#.Xo.SCCCCCCCCCoysD77CCowss55CbXssDXoXoX.X..X.vCCCCCCooXOOoX.....Oo.X.......OoooooXOo..o++#o......oo%@OO.+ooo o.. ....o$nCCCCCCCCV,oooXXoo,VCbOOO+oovCvssCCX. #. oOoOXXX...XwCCCCCCCCCCCCCN0O#Oo .ooooooooOoo.OOooOoOoXoXOOOoX.oOoXooo+Oooo+%%++oooooOOOOOOOO.XXX.oOOooooooCCNssNCgX#O$OooXOX-cCsvyCCOOOXX...XOOOO%OOO-OO-OOOXXOXO*-*.. .XoooXoXOOOOXXXoooXX ..OOCCsCsCCOXooOObCV5O%=O*%O9VCCCCCCCCb;O*O***O=-O*O@XOOO-XO-XOooO%oooo .ooooX. .o.XOOO+OOOOXXXo#oo++.o... .CCCCCCb@+@XO@MCCCCCCCcO$@uCCCCB++,CCCCCCC9@@sCCC", "CCCCCCCCCCCCCCCC.#zCCCCCCCCCCCZv0ooX..X..SCCCCCCoXXO%OX ....OXXX.......#XoOXoXoo..#o++.o.O.. oo+$O#o#oo. + ...o...$nCCCCCCCCVOooXX.. .XXXX ...o.. .oO.oooO... oo ...ooo .O+$$+o.$nCC7exmCCZ,X.. .ooOOO@@0CCC", "CCCCCCZ0...ooX5CCCCCCCCCCs .oX7CCCbXXXo. vCCCCCCCCCZCCCCCZjro. . ooo..ooooooooX. ooo o..ooo. ooO+$mCmk<7CCCCCn%O%O@.,ZCCmzCznCM+..X%-XXCCCCCCbX.OOOXvCDvwCC. .....XXX.....XXXX...o 7CCCCCCzO%%oo oooooooooo ..OoooX%Oo.oOOOOOoooXOX%wzVCCCCCCmkvCCogvNs9CC9sCCvoCCl:vsz9nCCCCCCCCDXoX...XXooOvCCCCCCCCZvvvvbNCVbvvvvVCNvvvvvVCNvvvvvVCnvvvvvCCnvvbvvCCnvvvvnCCCCCCCCCCvOoXooObCCCCCCooOOOOO;nCmlClnCCCCn=%==O=9VCCC05kmCm=OOoo% o ooooooooooooOoOOOO@OO*O-@@O%$OrkZCCCCCZCCCCCCCCCb.oO. vCCCCCCCCCCCCC@=CCCCCCCCCkOOO@@0CCC", "CCCCCCw..o.oo$NCCCCCCCCCCA .oX7CCCbXXoXo.vCCCCCCCCC0qjkACCCCVk0 ..ooo.oOOooooo.. oo oooo.o.. ..OO$nCmlCjnCCCCCCn=OOOsBCCCCCC9sCCz$CCCCCCCCCc.O+...vCCCCCCCCCCCCC@9CCCCCCCCCCkOOOO0CCC", "CCCCCC9XwCl.$VCCCCCCCCCCCCCCCCCCCCvXXXXo bCCCCCCCCCvkdz0wCCzuMCCCCj9..OOooooooo.. o...o.ooo..XO=mCCn@qmCCZ<kCVfuCCCCCCNke5oXoO@oX..+OooovCCCu@;rsVCCCCCCCCCCCCCCCCCC0%O0CCC", "CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCbX..oX o. ..XOXoX5uvCCCCCjz,DCCvvCCCS5.oOO.. oo ......XOmCnlZ5ACCZ5# ooo,VCCCmjCcnCm@XXoo . .X...XCC9gDCvoO+OOOvCsCsCC. .....X..oooo..Xooo.... oo++bCCCCCCqo.X.o+OOooOoooO.OOOO%O9bCCCmkzCk:CCCCCAkr$%o$+o....oXOXXoOXOXXXooXoXXoooOo...OOX=q9XOOXo.oooOXXoXXXXXO-OX....XOO-OO-OO-OOXo.XXXXOOOsCCCvOO...o...OXO-OXOOOOO.ooXOXOO-OOOOXooOObCss0CCO@O-=@*O@OOO.omCncCkmCCV6OOO@OoO9VCCB9VcmCm&+..+OOOOooXXoXooOX9bCCCMvCCs5zkCCCCCbuBCCCCZD=O+$OooXo..oOOOOoooo.oooovCCCCVfBCCCCCCCCCCCCCCuOOXyCCCy9CCC", "CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCvX...o. . .oXOooXo...+CCCCzjCCCCzkZO0CCCCd$@OO@@@5fNCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCk9nCCCCCCCC", "CCCCCCCCCCCCCCr. .vCCCCCCCl&9sCvXOOXXOvCDCsCCOOO@O@%O*O-XXX..OOX-X-@**@@O=mCCD0sCvX%$ooXvCsCDCC. oX..oXOOOXX.X.oXoo.. . # oooooooOOowCCCCCCCCCC<.oOooOoo5mCCCCVhbC9wCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCvkN9sCCCCCCCm,O@Ooo.oo=nCCCu=fNCV6ooX.XOOXX-OX--X*XX.ooo.ooOOO-XXXOOo..ooCCsCsCvOOXXXOvCs9ZCCCCz$sCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCnksbCCCCCCCCCCCCCCCCCCCCCCCCCCckCVkZCCCCZ,.@nCCCCZzCCkkCCCCzXXXXoXXOXX---OX.ooOXXoOOOOXOXOoOXooOCCvvACb-OO.XoMCsXoCCo+O%OOOOOXO*XX..OOOo*@@@OOOO@*.O-=mCCCCCCCCZ9sCMOOOX.OMCsCDCC@+O%OOOOXO@XX..XXOOO@*OOOO*O@@.XOO%9VCCCCCCCZ+o++OXoXOiCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC;omC9ooo,ZCCCz..#wCCCCCCCCCCCCCC", "CCCCCCCCCCCfsqkbCV>@+@+OooDCCCCCCCCCCCCCk<@@+O.oO@OVCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC9oOXX#uCCCCm%OoooXuCCCCCCCCCCCCC", "CCCCCCCCZ$o..o. .7CCCCCCCCnsq$vCCCCCCCCCCCCCCCCChXXXOXXzCCCCCCCCCCCCk.O+XjCCCCCCCCCCCCCCCC5o..OO@osCCsfCCCb ..oO#X.XOOOXoXOOO-XX. ...X.CCvvNCvXOOooOvCsCDCC..XXoXXXX.XoXoXXOOoXo .# #omCnnCkCso... .@NCCCkq@VCCCCCCCCCCCCCCCCCCwoXOXXo-%oO@#wVCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCnOXXXnCCCCCCCCCCCCCCCCCCCCCCCCkCCCCCCN%XXXoXXcCC:9gCC;XOXXX...XXOOXXXXX.XoOo.oXCCCCCCCCCCCCCCCs9,CCOOOOOOOOOOOoXXoXXX-OOO-O*OOrCCs:9CCh-O%O+OOrCCCCCCCCCCCCCCCCCCCCCCCf=@O@@;lCCCCCCVs$#+#kCCCCCCCCCCCCCCCCCCCuOOO$mCCCCCCCvgVCCCCCCCCCCCCC", "CCCCCCCCCCCCCCCCCCCCCCDX. . .uCCCCCCCCCCCCClXooXwCCCCCCCCCCCCCCCCCCCC5oooXNCCCCCCCCCCCCCCCCV$OO@@$fCCCkVAbCmoo@OO.o%XX.XO--OX... ..ooXXCCsCsCvOooo.OvCNbvCC..XoXoXoo...XXXXOXXoO.. . mCzkVCC0oXXo..sCCCCVqzCCCCCCCCCCCCCCCCCCvX#X.X=nCCCCk-O-O@@5vCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCbOXXXCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCsoX.XXX0CCkCbBCkXXX-X...XXXOXXXXXXXXXo.XoCCCCCCCCCCCCCCCsCsCCO%OOOOOOOOOo.#OXXXO-O-O*XXONCcNVkCV:O=OOO%=ZCCCCCCCCCCCCCCCCCCCCCCCCm7+O@+okCCCCkmCCCCCCCCCCCCCCCCCCCCCCCCCCVkCuCCCC5XX.XXXvCCCCCCNOX...X.XXooXXXXXX.o..#oCCpvgCvXXoo.ovCCCCCCOXooO%XXOXXX.XXXXOX-***X:CCCCCCCs@==@@O@BCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCk+OOOOzCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCn$OOOOhCCCCCCCCCCCOoX:9CC", "CCCCCCD..o...X... .+xCCCCC XDCCCCCCCCCCCCCCuXooosCCCCCCCCCCCCCCCCCCCCOOOoosCCCCCCCBCCCCCCCCCCCNwoXooo;CCZs&ZCsOoo.OXXXXXXXOOOOX..XOX-OCC99kCvOoXXXOvCvssCC...OXXXXOOOOOOXOXoooX..dCCCCVCr#OOXXOvCCCgCzCCCCCCCCCCCCCCCCCCCkXOXX$CCCCN...kCCCCCCCCCCCCCCCCCCCCCCCCCCCCwOX5CCCCCCCCCCCCCV9ooosvcssssmCCCCCCCCCCCCCCCCCCCv:;NCCCboX.XXOqCCvq,CC9O.....XXoXXXXXoooO..OoCCOOsCboXXX.ovCz09CCOOXXOOXOOXXXXXXXOO-XXX*XsCV;sZCCOXXXCC", "vCCCCCDX.o.ooo. .sZCCCCCb . .eCCCCCCCCCCCCCCV$XOXrCCCCCCCCCCCCCCCCCCCCOoXXXiCCCCCCC9vCCCCCCCCCCNXXooo+.kCACCCCCCCCCCCCCCCCCCCCCrO@DCCCCCCCCCCCCCCCCCCrOOo9CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCnu$OOsCCCCCCCCCC", "v9X..oXXX#oO%nCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCo..XoX,CCCCCv.oXrCCCCCCCCCCCs..oo++rCCCCCCZ%%OOXXXo-X-OX.. ..oOOOCCCCCCM$OOoO.vCsooCC..XoXXXXXXX-XOXXXXXX ACBd7Cz.ooO+OkCCCjCkCCCCCCCCCCCCCCCCCCCCDooXwCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCZVCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCZcChCCCh..OXXOcCCCCZCh. ...XXXXXXX..XoX.#XCC0ssCv-OOXX.cCCCCCCOXXXOOOOOOXoXOOOO*@**OVCCCCCCwXoO*@*sCCCCCCCCCCCCCCCCCCCCfOO@0CCCCCCCCCCCCCCCCCCB=XXXBCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCiXXOOXDCCCCCCCCCC", "CCv7.oXoXXoXosCCCCCCCCCf@@@X#ONCCCCCCCCCCCk;qjACCCCCCCCCCCCCmy=OObCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCO@oO$ZCCCCCCCCCCCCC", "CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCv$bCCCCCCCCCCCCCCCCCCCCCCCCCCCCCs.XOVCCCCCCCCC.+o.. 7CCCCCCCCCs9CCCOvC9sCCvXCCCCCCCCCvOO.oOXvCCCCCCCC7DCCvXCC9sCCvXCCCCCCCCS##ooOXvCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCs@oooooowCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCsoXO--OXOX0CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCvOO-OOXvCCCCCCCCCC9sCCvXCC9DCCvXCCCCCCvXXXOX.bCCCCCCCCCObCCs9CbXCCCqsCCCCCCCCCq+@XXXOCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCVksVCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCNzbBCCCCCCCCCCOOOoouCCCCCCCCCCCCC", "CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCd...wCCCCCCCCC7 o oo-O*O@O0CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCOOoX#O:bCCCCCCCCCCCCCCCCb<@@@oXO", " ...orVCCCCCCCCCCCCCCCCCCZ9.XXO9CCCCCCCCCCCCCCCC9XbCCCCCCCCCCCCCCCCCCCCCCCCCCCCC$ooooo7CCCCCCCCCCCCCCCCCCkX...oOX.XXXXXoXXOXOO9vCCCCCCCCCCCCCCCCCCCCCCCCCCCCCZ0ucCCCc959fCCCCCCCCCCCCCCCCCCCCCCCCCqOo.oo<57077qDNCCCCCCCCCCCCCCCCCCCCCwoXOOXOXnCCCCCCCCCCCCCCZiOoXXoocCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCN-XOX. uCCCCCCCCCCCCCCCCCC=XX;VCCCCCCCCCCCCCCCCCCCCCCCCCCm5.XXOODCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCZbs0XXXXOO-OOO*okCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCOO#XorVCCCCCCCCCCCCCCCCCCZr@OOXO", "....wCCCCCCCCCCCCCCCCCCCCCCwXXO9CCCCCCCCCCCCCCCbXOvCCCCCCCCCCCCCCCCCCCCCCCCCCCCCVsooookCCCCCCCCCCCCCCCCCCwX. .OoXXX.XooXXOOOOOXsCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCsOO..oo..o....@hCCCCCCCCCCCCCCCCCCCCCk-OO99wCCCCCCCCCCCCCs05-XX$uvvCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCbOXOO..#CCCCCCCCCCCCCCCCCmXoovCCCCCCCCCCCCCCCCCCCCCCCCCCN@X..oOO-NCCCCCCCvvvvvMCCCCCCCCCCCCCCCCCCCCCCCBu6O@XOoXXXXOO*O*inCCCCCCCCCCCCCCCCCCCCmvbMvvvvvbMMbbbbbbbbbbbbbbCCCCCCCCCCCCCCCCCC@+oowCCCCCCCCCCCCCCCCCCCCCCiOXXO", "X..qCCCCCCCCCCCCCCCCCCCCCCCCq.X9CCCCCCCCCCCCCCv=XXvCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCuo.XnCCCCCCCCCCCCCCCCCC7X..;slbvbbcvM9XOOOOOXOXrCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCkOOo.Xo.ooo...XXwCCCCCCCCCCCCCCCCCCCCC9XcCCCCCCCCCCCCCCCCbXXOXwVCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCvOXOO..@CCCCCCCCCCCCCCCCCDoX5CCCCCCCCCCCCCCCCCCCCCCCCCCCvoX.oXO--uCCCCCCuXXOOXX++CCCCCCCCCCCCCCCCCCCVs=OOOOOXXX..o***O*CCCCCCCCCCCCCCCCCCCCCC0OXoXXXX+Oo+oXo##oOOOOOOo5CCCCCCCCCCCCCCCCCCOOorCCCCCCCCCCCCCCCCCCCCCCCCqXXO", "..@ZCCCCCCCCCCCCCCCCCCCCCCCCZ=X9CCCCCCCCCCCCcOXXXXmCCCCCCCCCCCCCCCCCCCCCsXiCCCCCCCNvvnCCCCCCCCCCCCCCCCCCCd77bCCCCCCCCCCB,OOOOOXO..zCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC,<55985999u..XoXX. .rCCOOO@OOVCCCCCCCCZ@XX*nCCCCCCCCCCCCCCCCCB,XXXsCCCvooO--sCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC0@*-OCCCCCCCCCCCCCCCCCCCCCV;.ooOsCCCCCCCCM$#OOO+qCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC", "CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCu...XXfCCCCCCCCCCCCCCCCCCCCCCuOOooXO,9rgCCCCCCCCCCCCCCCCCCCCCCCkOOXOouCCCCCCCCCnbvBCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCs.oOOOO=dCCCCCCCCCCCCCCVvvbbzsMbBCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCj6@vCCCCCCCvXX--:CCCCCCCCCrX. @DbO=--OO5CCCCCCCCClXXoOfCCCCCCCCCCCCCCVDXX.X>ZCCCbXOO*-sCCCCCCCCCCCCCCCCCCCCCCCCCCCN0093900ACCCCCCCCCCCCuX%OOCCCCCCCCCCCCCCCCCCCCCCVq.oXzCCCCCCC;#OooOo+qCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC", "bCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCN...XX7CCCCCCCCCCCCCCCCCCCCCCNXO-XoOvCCCCCCCCCCCCCCCCCCCCCCCCCCCCsOOOo,CCCCCCCCCCCCCCCCCmuCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCs.o@OOqVCCCCCCCCCCCCCzO%XooXXXXOO,DcNCCCvsskCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCc---X0CCCCCCCCCV,X..oOO=-OOOXo5wCCCCCCCChOO-o0cCCCCCCCCCCnw@XX.X$nCCCCs.X@=OsCCCCCCCCCCCCCCCCCCCCCCCCCCCk-OO**-*MCCCCCCCCCCCCVM>-OCCCCCCCCCCCCCCCCCCCCCCCCCnzNCCCCCCCXoXoOOoouCCCCCCCCCCCCCCCCCCCCCCbCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCb", "sCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCbCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCMq59757757CCCCCCd....wCCCCCCCCCCCCCCCCCCCCCCCfOX$O,kCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC9OOXXgCCCCCCCCCCCCCCCV,ofCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCq.XXo0CCCCCCCCCCCCCCv$O@XooXXo@--OO%%++r%.o9CCCCCCCCCCCCCCCCCCCCCCCCCCCNikmCCCCp-X-O0CCCCCCCCCCZ;..OOO-OOOOOoooCCCCCCCCCkOOX*@:pfvvcvDq=XXOoXX6VCCCCCDoOO=OpCCCCCCCCCCCCCCCCCCCCCCCCCCCs-X-**X*ZCCCCCCCCCCCCCCuO-CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCo#ooOOO+OsVCCCCCCCCCCCCCCCCCCCCsCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCD", ",CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCiCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCs#.XXXoXX..X5CCCCz%..0CCCCCCCCCCCCCCCCCCCCCCCuO5uzVCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCV-OXX@CCCCCCCCCCCCCCzVCCCCCCCCN5..@nCCCCCCCCCCCCCNNCCCCCCCf# #SCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCvOoOO=BCCCCXOO---cCCCCCCCCCCCCCCCz.OkCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCXX*OXXCCCCCCCCCCCCsOOOXO*@yCCCCCy@2ZCCCCCCCCCCCCkfACCCCCCbO-OfCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC+#nCCCCCCCCCCCCCCCCkBCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCvXO**OXNCCCCCCCCCCCf995OOoosCCCCCOOOOOOooO......XVCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCX@OXOXOXoo@OXOO0CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCZ...XO@O*O@=*OOOO;CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCyoOOXOO+@XX.X", " ..oX..o.oOo wCCCCCCCCCCCCCNvbbbbZCAbvbbSZCmvvvvbCCnbbvvvCCmbvbbnCCvvvvvnCCbvvSvNCVbvvvvBCVbvbbbBCVbvbvvVCBSvvvvVCNvbMvvCCnbcbbbCCmbvvvnCCCCCCgOOOOOOoXOO... .XDCCCCCCCCCCVvvvvvACZvSbbbZCBbbbbvZCNbvbvvZCnbvbbvCCnvbvbbCCnvvbbnCCvvbMbmCCvbbMbNCCCCCCCCXOO*OO-OOo$ooOO0CCCCCCCCBbMMbbCCmbbbbMCCnMMvvnCCvvvMvnCCvvvMbmCVbbvvbBCZvbvMbNCVvvMMbVCNbvbbbVCCCCCCCCCCsX.XOOO-O-@=@O@*OsCCCCCCcMvMbmCCvvvvvnCCbbbvbACZbbvvvNCVbbbbbVCBbbvvbVCBbvvMvVCNbbbvbCCmbcbvbCCnbvvvmCCbbbvbmCCbbvbbBCVbvbbbBCVbbbbbACCCCCCCCCCCCCyXOOOXOXOOX.X.", " .XXoX...ooo..rCCCCCCCCCCCCs,vvbovCsOOOOOOOOX.XXXOOOO-**#**@O-=@OOOX#.O@OO*XO@%OOoXoOO@OOOOOOOXoo.XX..X... BCCCCCCCCCCjooo+o++oo#+o++#o5VCCCCw,sVCCCCCm*+@@O#oooO%OXXoo..wCCCC", "CCCCCwXoooO.....o... OmCCCCCCCVDCCZCCCZ,o### oOOOoX.Xoo6CCCCCkXoooo+OO0CCCCCCCCm&%O.+OO...#X..#O$+%++oo&++o .+ooOXXZCCCCCCCCCCCCCCCCg0VCCCCCCNCCCCCCCCCCCCCCCCCCCCCCCCCkCzVCCDo.. o #o++O%+XOo.#.O+O..o+o..oOooooXoooOoOoo.oXOXOsCCCCCCCCCCCCCCCCb..bCCCCCCCCCCCCCCCCCCCCvXXvCCOO*O=OO@=-XXOOOOOO*OOO-X---XXXX. .XoO-OO%O-XO-XX.XoXOOOOOO*X--X-.DCCZzChCCCCCCCCCCCCCCCCCCCCCCCCCNCCvOOOO@OOOOXXXXXXX**@O*X**@**O@O*OOO#X*@@*XO@-OOoXooo@OOO@OOOXXOOX..X. .DZCCCCCCCCCCC<#o.+++Ooo++.++#VCCCCCCCCCCCbwwvCCooOOOOO--OOO#.O9CCbwwvCCO*OOO-O---OOXOOOOOOO-X-XO@*@XOo...X-O--O-XOXOXXX...oXoXO*XX*---=CCCCCCCCC=XOOOo.oOOOoXOOO=VCCkCcZCCkzCCCCNOcCCfs99vCCCvXvCDO@*==OOO-O-X-OX-XO@OXOOOoOOOO@@@oXOyCCCCCCCCCCCCCCCCCCCCCCCCCCCCsooo+.o#@OkCCCCCCCCCCC9Ooo.9ZCCC5OoOOOooOO%Oo..O.OXX.XvCCCCCCbbbvCC.oXXXoO$OoOo.oO0CCbvbbCC@O+@*-O0CCCCCCCCCCVO-OXXOOO---OX..oO@OOOXO*OOOOOOXooXXoBCCCCmBCCy...oooOXoXXOo.oojCCAmmhCCCCCCCNo#OXOOOOOOOO,mCCCCs%OOnCCCcO9CCCiXX.....#ofCCCCCCCCCCCCCCCCCCCCCCCCCCwo@XX.. ..qCCCCnVCsZCCw#o. . .#o+@+++%O%%@iCCZfCZmCCCZ,O+OOXXXXOoCCVvvZCC", "CCCCCCCCOOoo ..ooo 5ZCCCmZweCCCw..@+o ..o+ooOOOOo. ..rCCVdCzjCCCZNCCCCCCCCCCCCCCCC8.ooXmCCCm$ooOCCCCCCCCCCm+..OO.OX69-oonCCCCCCg0dCCCCCCCCCCCCCCCCCCCCCCCzCdCCC=X..XX...XXX...o.ZCCCCBCCCCCC0o+BCCCCCCCCCCCsX5kmCCCvrOOooOOOo%OoO..o.O%977fCCCCCCCbbbvCC.OOOoXO$OoOO..O0CCvvvbCCO=o==--;ACCCCCCCCCCv-OOXOOOO*OOX..OOOOOOOOOOOOXOX.o.XX9CCCBCCCCV*X..XXXOOOoO#..o-X..oXOXXXXoo..oNCCbX5NCCCCCCCCCCCCCCCCCCCCCCVsOooooOOO:NCCrX=mCCZ@XXXXcCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCzDss;*@*-*@Xoo.oOOXXONCCzZvNCCkCCCCzw,NCCCCCCCCCCCCCCCN0*O-OO-mCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCVCCCnVwwCCCw.#ooooOoX..o.oo..oooowCCVdCzkCCCZNCCCVpoXoo@OO-OO;90:sCCvXXoOOOOOO-O*OXXX7CCC0$hCCCCCCfX..@OOOsCCCCCCCCCCCCCCCCCCCCCCCCg=O=4@OOOO*@>mCCBrfCCC;rCCCCs--OyCCCCnVCsVCCp@O@ooXoO.....##oOOOXowCCVfCZmCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCsXOO@XuCCCCCCCCbbMbCC", "CCbvbbCCoooo.o. osCCCCCCCCCCCCCC+Oo. ....#..sCCCCCCCmNOOzCCVjsfACCCCCCCCCCCCCCCCCCCCCCCDOXX.7CCfX5CCCCChChCCC&o#o.o. o++o..OXoZCCCCCCCCqXXoXoXXuCCCCCsOOOO=kCCCCrOOOX+@>cCCCCCCCCCCCn0qnCC #XO@O@O@@@=$#O0CCn90mCCCCCCCCCCCCCCCCCCCCCCCCCCNCCCCCCCs...@**OOOrCCCCCCCCVXXXXO-XXO-O*O-X.;CCChChCCCCCVOo:VCCCd0gBCChoo. .oooooOO+OoouCCzqzCCCvo.%NCCCC9XOOooOsCCCCoOOOOwCCCCCCCCCCCBbmCCCCCCCC.#oO%@O=$oO%%Oo0CCCCCCCCCCCCCCCCCCCCCCCCCCC@*OXOXyCCCCCCCCDoO@@$vCCCcrcCCu..oOXXXOOOX-XXOOkCCNgrgCCCCCoXo.Oo.oo#O@****@=+%oooOOOOOOOOOO,svACCCCCCCCCCCCCCCV=OXoo.X$mCCCCCCh5VCCyOXOO-OX*O%OOoOOO+##..rCCCVCVzCCCCCCCCCCCCCCCCCCCCCz#XXXooX.XOXXOoeCCCCCCCbXXO%+%CCbbbvCC", "CCbvvbCCo+o o o....o.dCCCCCCCCCCZq. o#.bCCCCCCCVo.oXOOXX..X..wVCCCCCCCZssssOOoovCCCCCCCCCCCCcoXvCCCCkCkCCCyo oo#o...o#OOOXkCCCvwZCCko.rCCN$oOOOOXOsCCCC0oOO:CCCCCCCCCwXXO*9CCn00nCC.OOOOOX-OoO%-Oo0CCn90nCCCCngsVCCV=XqCCCCCCC>@OXOOOOuCCCCCCCg=O@kCCNyvCCCjXXXXXXXOOXOX*-OOpCCCzChCCCCCCX..ooooXOO-@=@OOO=$$ooOOOOO$%%rNCCCCCCCCCCCCCCCCCCCCCsO%XX.VCCCCCCCl+5uVCCCCCCCCCCCCBzZzCCA.oOooooO.+++ooo.$CCZVCCCCCooXCCCCCCCCCCCCCCkVCfVCCr.X#XXXoXXXXXOOOXXO1VCCCCC5mVmCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCn+.ouCCCCCCCCCCCwXO@%+O#oOOooO@O#XoOCCbbbbCC", "CCbbbvCC.O..++oo ooooooooo+oo.oo.0ZCCCCCCCCCCCCCCCCCCCCCCCCC5XwCCCm+$ovCCCCb@jCCCCZCCw-OqVCCCCCiX-OO=OgCCCCCCCCCcmqCCCCCCCCCCk9XoOXXXO-CCCfX9VCCCCCCCCCCA,.OoosCCCCuXXVCCC9-O=%OOoOuCCC>O=-OO.ObCCCCCCCCCCk6VCCCCyXX..X#OXXoXXXXOX-XO-OyCCVuokCCCCZsszbbbcbbACZu5..kCCCCCCCCCCCZ5.iCCCCCCCCmrXoo#oOO@++OOOO#OOO@Ooo@CCc25vCC", "CCAssACC+oooooo ...o...+..O+o.ooooo.8ZCCCCCCCCCCCCCCCCCCCCCsooO9CCCCksnCCCCCCCjgCgZCCw....O...@@+ooo.o+%oo.wCCCy5BmCCCCwXXbCCCCCC% qD5XX0hVCCCCCCCCCCCCCCCCCvoooO..ZCCCCrXXhCCjNCCCCu+##O+wmCCCCCCCCCCCCzCbNCCjXXOO-XXOOOooooOo.X..oOOOOXXoOOO9CCvffbCC.OO*@OO-=-%OX@o0CCvffbCCCCCb@=fCC--6CCCCCCCsX-OOO-0CCCCCCCCAbCcCCCCCCCCCCCCNw-XXXOuCCCCNkCCCCCCCCCCN:.....vCCv>XOXCCCCs-%%O+OoONCCZOO*-OXXXmCCCCCCCCCmN2yCCCiOOXXoXOOOOXXOOOOOOOXOyCCVfCfkCCCV5XoXo....ooooXooooZCCCCCCCCCCCCCCCCCCCCCsXXoXoooXO++@o@OO@#*O@OOX*CCNssNCC", "CCCCCCCCoooooooo O..o# #..+O.XooOOXX.5VCCCCCCCCCCCCCCCCCCCC9ooo0CCCCCCCCbACCCCCnZCsZCCw...X#XX@@%ooo.oo+oo .rCCZgCVmCCCZ,XvCCCCCC. ..OOO%ZCCCCCvOOOoXoosCs*-OoXsCCCCmVV2VCCp**XOOOOo.X#XOOO@$XXOOyCCVfCVvCCCV5OO++OOoOXX#..rsvNCCCCCCCCCCCCCCCoo*OOOX@OOXXXoX0CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCZvMMVCCCVzCjCCzO@OOOoX---OOOo9cCCCCVssCCCzX..X9CCCCCCCCCCCCCCCVwoX#O5ZCCCCMOOX#@O@fCg*O=ouCCCCMVCfVCCp****OOOOOX.OOXXX+OXXXyCCV9VVnCCCV2XOOOOOooOoXXCCCCCCCCCCCCgXDCCCCCCCCC7..Oo..sCCf,uACCjXOOoX...ooO.o+O+uCCb;sCCCmOOO>ykBCCCCCCCCNkkkf=CC0ybfkwCCCCCCCXXOOO-XO-OXXXX.8CCCCCCCwkfvyrCC=fkhhNCCCCCCCCCCCCCCCCCCCs=vCCuXOO+XOOO----*OOOkCCBu5fCCCOXX.dCCCCCCCCCCCCCCCz%XOoooOXO-vCCCCCCCCCCCCCCCCCCCkkCCCCCpXX***@-XO*XX..o@oOOOOyCCVr5VCCCCV5OOOOOOoO@OXO;VCCCCCCCCC0oOo.o...$kCCCCweBCCCCCCCCCCCCCCCC$.XXX#oXoXXXX#XXXXCCNssNCC", "CCv<,bCCO++o.oo#+ o+o ooooOOOooooo#. #o#.oo+@oosCCCCCCCCCCCCCCCNddVCCr#XOoo+ o#@O%vCCCCCCzqCfVCCe%oo+o+%#XX . .#X.Oo%%yCCCc=znCCCZ< oX.Oo%OooOOOrCCCCCCCCCCCCsoyhNCCCCCCCZCCCCCCgX+OO$OoO=$==@-OXsCCZ9OfCCfO9yVCCCCzooO%OOCCCboo.XXXOOOo.oXOOO-@@*uCCCCCCCmVk9CCCwOO*O******X*OO-O*OOX.pCCVfCNkCCCV5@*XO-OOOOOO=vCCCCCCCCCC0 .sCCCCCCCCCCCCCCC7....XoX.bCCCCCCCCCCCCV$X#+OooooooOoXXXXCCCCCCCC", "CCNssACCoXo. ..oo+ oooo++o+%oooo.+XsCCCCCCCf<@kCCCCCc0ougMCCCCCCC<%++%+uCCCCCCCCCCCCCCCCCCCCCCCCmZCqZCCeO.. ...oXXOX%%OXOOOoowCCVdCZnCCCCNbfsssskVCCC9X.. ..X.oqCCCCCCCCCCV.oO+ oOCCCkX0CCNOOOX-OXXX.XXooOpCCwX.X....oXOoXoXO%o*=OO6VCCCkmCCVCCyXXoOOOX-*****XX***OO-pCCZ,wCCCCCCCCCCCuO*X-hCCCCCCCCCCsOOXsCCCCCCCCCCCCCDX,D7.oo.oo..$mCCCo+6CCCqOXsCCCCCCCm=OXXvCCCCCCCCCCCCCCCCCCCCCCCNk;XX#oOXsCCCCCCCCCCCX9CCCNoXXOOOOCCvffvCC", "CCbo SCCoo#.. .oo++... #+.sCCbCCCCCu8ooXsCCCCCCCZgVCwvCCCCDoo+...O+++OOoo..ooOOO.+%++@Oooo%OooOO+#$OX:uzVCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCVcu:OXXXX*-----XXX.....XOOOOOOOOXXOOXXXXXXooO*gCCCCvrCVfVCCCvo..Xo..O5VCCCCCCCCCCB;.X.uCCCCCVq97dCCCCCCCCCCCCCCCCCCCC9XX...ooXosCCCCCCCCCCCCCCCCCCCCCC", "CCCCCCCCCCCCCCCCSwoooo.oo.omCCCCCC0Oo.o o##bCCCCCCCCCCCCC<..ooOoX..obCCCCC0o.O+Oo.o.o8ZCCCCCBu&++#$CCw$#o9CCCCCCNwXo5ZCCCCCVwZCCCCCCCCZ5O%OOOOX%%OOoXXwCCZnCCCCCCkgCCCCwXXXXXX9CCCCCCf..oO+Oooo.o.ooX#+oO=yNCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC$+OO@O@@OXOOOOowCCCCCCCCCCCCCCCCCCCCCCCCNw%OOOOO-X--OOOXXXXXXofCCCCCC9OX. XXwCCCCgjCCCCCCnZCCpOXoOOOOOO-O*@o,VCCCCCCCCVwVCCCCCZ9*fCg*****=0CCCC9o#,ZCCC=@&@=*OO-*O*XsCCCCCCCCCC0..X;CCCCCCfO+oofCCCCCCCCCCCCCCCCCCC7X....ooXoXNCCCCCCCCCCCCCCCCCCCCC", "CCCCCCCCCCC9hCCCCCAa<#..oobCCl5bCCboo #+#oCCCCCCCCCCCCCCw .oXoO...oSCCCCC8o.oooooooo#dCCCCw#XO@+#obCe@#ouCCCCCNOOXXO5ZVCCC5wfVCCCCCCZ5OOOOOOXO%OOOXOo.rCCCCCCCCCCCCCB,.XXX.XXXdCCCCCC8.oO%+OO..o...oo+$sVCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCO@@+@@*@OOO-Xo.kCCCCCCCCCCCCCCCCCCCCCCCCCCZs=-OOOO-X-O-XX.ooX9CCCCCCf-XX .ooX,ACCCCCCCCCCCCCwXOOXOOO--O-O=oo#9CCCCCCCZfi,CCCCZ6@*sCs**@**@0CCCCO#.mCCCC@@@@@*-O*O*OXsCCCCCCCCCCX..XlCCCCCs.o#XX;wnCCCCCCCCCCCCCCCCCqooX.oXX@gzDCCCCCCCCk9CCCCCCCCCCC", "zCCCCCCCCChVCCCnq,ZCCCw.OXOXOOXXOO%o.OOOX...wCCCCCCCwX.X.XXXXoo....dCCCCCC5O%+OOo.. wACCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCzO+o+*OX*OOO-OOgCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCNyXOXX-XXXX9CCCCCCfXXOOX .XXXoX..wCCCCCCCw.XXOOXXXoX**OO*$oX.XoyCCCV,rmCCCCCCq-OOgCCu*@*@*qCCCCi@sCCCCCb@O*X--X--O-OXkCCCCCCCCfo.kCCC5....oo0VCCCCCCCCCCCCCCCCCCCCCCCmcbNCCCCCCVsDCC=ufACCCCCCbyOXXX", "..OO+.$jVCCCCCZNCVomlkbCCCCCCCCbooCCCk@o7ACCCCCCCCCCCCCCCCl.oXXoDCCCCCCCCSoo..oo+ooooo o.kCCC##o+,VCCCCCCCc77@oOOOXOOOOoXykNCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCg@-X-*X---X...oXoXXoXooX..#o.o@OOXoXOOXXO@-iCCCCm=cCCCV,X+cCCCCCCMs9ismCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCs9sBCCCCCCCCCCCCCq..ooooOoXXo5CCCCCCCCCvwVCf;dkCCCCCCVgnCCCCb.XXX.XXXXX.XX", ".#@@@oooOOX#.bCCCCbo$wmCCCCCCnZCd,AkkZCCCCCCCCCCCCCCCCCOooo.OmCCCCCCso..o+o ooooooooo..o7CCCCb#Xo$BCCbo+.. ..oOX.XXOooO. ..ooo,ZCCCZCCsVCCwoXoOXoo.#X...XOo.XoXo#..oooo.Xooo... #oOo#mCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCXOoX@*@OOO.X2nCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCA*X-X**----X. .XXXoXXooXo..#XooO%XXXXOO-XOOiCCVsCCVCCCV6XX#sCCCCCg=-*@4-0mCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCV,XX;sssgmCCCCCCAwOoooo..+..ooqCCCCCCVkkA,dCVnCCCCCCnwXXvCCCCc#ooX.XXXoXX.X", " o@@O..o+OOX.vCCCCv..o#o#o8MCCCCCCCCCVqOo.ooXOOXXoXX.XX..X.. ..qCCCCCCCCCCnXoo..XoXooOOXoXX....XXoXoCCCCCm9XX.#OOOXOOO>CCCCCCVvc9XorVCCCk$,vCCCCCCZ;bCVssCCCCCCCbw..XX.XXo#..XX...X..X...XX#bCCCCvooXoXXo9zCCCC", "CCCCCCBu$o#..vCCCCb#.#o.++O+#@+O@#.O+..o..o. ooOOX5VCCCCn6-X>CCCCn==@OXXoOOOO-OOnCCCCCCcXXO:zCCCCCCCCCZzfn#cCmmCCCCCCmw$o..o.X.XXOOo+O.XXX...X..X.X.XXcCCCCbXX,kCCCCCCCCC", "CCCCCCCCCCCnrvCCCCb+.oo #+o++@$+XX#+@o o#oo. ooo.oO.5jCCCCCCCvqNCC$bCCCCCCCCCCCCCCCCi.o##.@ZCCCB>#XooooCCCCCCCCCCCCCCCqOXXXOX.X.....bCCnnCkCCCfOXooo... .X@OXXOOXooXo.XjCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCsX#.OO+@*@OyCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCkooooX.X.ooo.ooooXoXoooOXfCCCkCnmCCCCCCCCN>XoOO%sCCCCCc-*OOcCCCCC=*O20,XOOOXO-5CCCCCCCCZvvZCCCCCCCCCv;CCNqbCCCCCCCk7ooo#.ooo.Xo#Xooo...XXXX....X.XXXXbCCCCcwmCCCCCCCCCCC", "CCCCCCCCCCCCCCCCCCbo..+.oo+++$$oOOXo+# ++++ oooo.oo. .$iNCCCCCCzzs+CCkkCCCCCCCCCCCCCB@.o....bCCCN##.#.qCCCCCCnOOXo-9zCNXXXOO.X....XuCCVVCCCCCCCCCCCCCCCNhkhOCCbBCCCCCCzroXXoXXooXoo..Xooooo@#XXX..XXXXXXXXX.XObCCCCCCCCCCCCCCCCCC", "CCCCCCCCCCCCCCCCCCZs+o..ooo+$@&+Oo.oO. o o oooooo...XX#.X;dZCCCCCCB7nCCysCCCCCCCCCCCno#..#ouCCCb+#ACCCZs9qq3900qq2O=9rfnCCCCCCCCCCCC0kCCgwCCCCCCCNi@.. ....o..#..o.O+.....oO..#X@X.....X.X=hZCCCCCMwvCC=zCCCCCCCCCCCCC", "CCVbbVCCCCCCCCBklV@zCVVCCCCCbi+#ooooOo o++ o++o%OXXo..oo. oo..o.XoX.#0zCCCCCCAkz0iCCiBCCCCCCCCCCCCCCCd.#@kCCCCCCCzoXXooo.oXXOXXvCCmkCkCCC,.XoooOoOOoooX .XXXOOXwCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCv9rszNCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCrX...ooXXXXoXXOO%O@OO@O6CCCjCknCCC>--XoO-OO**iZZc>*-***X**--OOOooOXvCc..bCC", "CCbbbbCb++%eBCCCCCCCC#mCAezCCCCCVl8#++.#+#ooo+%oO@Oo ...o#oo. oooo..o+O...wbCCCCCCCkeCCVfVCCCCVzkkXVCbvCCCCCCnwOXoo.X.XX.... .....oooooo.O.O+oXXXXX.XX,hZCCCCCzj;kCn0zCCCCCCAs4.......vCcMbbCC", "CCb55vCvo+oo.#+@@+qvCCCCCCCCqsCVhDVCCCCCmeooo%ooOOo#...Ooo+O o .oO..o++o.oo...ooo7kCCCCCCCc7VCC8kCCCCCCCl<.. bCC", "CCNssBCbo+oooo++++ooOkCCCCCsO-OX*OX*OXXXXXXOO*XX@@XXXX.. .@wACCCCCVCC,gZkjZCCCCCCCCCCCCCCCjXo.... .XXXXoXXXXXX..XX.XXMCCCCCCC", "CCNssACb#O+Ooo++oooo%+o +oo+$<%Oo++@+o #o.o+CCCCCCCCCkMCCCCCCBi:*OO6CCCCCZXXX#**XOOXX--OXXOOO+OXXXXX..,bCC", "CCbvvbCb@@oooo++oo+++++o+o ++<+oo#++O# .oooo#+$+@,kVCCCCCCzfBBXNCZCCCCCVssmCCCCCCBy=OOO%=9OXo..DCCCC9#oo$uBCC9O;vCCCCCCCCCCCCCCfXXoo.X%uCCCCuXXXX.X...XXXXXXvCCCCCCC", "CCm09mCvoo++oooo+ ++++oo##@+&+@o.o##Xo#++ ++&+ooooo..oo+.%O. XooXX..+$$OOO.+O+o.iCCCCCCCCCCCZ#mCcfmCCCCCBs$X# . .oX# .oO...X-OOXOo.....oX#wCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCsOOomCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCi@o@o.o+OOO-@@OXXOOOO@@@*@@****@=uBCCCCCnfzCmOVCCCCCCCCk0OXOXO=NCmXOo.;ZCCCCvoowBCCCCBbZCCCCCCCCCCCCCCCCkX#oooXXOfCCCuXo......XXXXXXvCn09nCC", "CCbwwbCvOo++o oo+o+++$ o#+&&&+@#.##+O#.#++o+++oooooo.o+o..O+o...XooX.#@$OO+OOXo@kCCCCCCCCCCCCCzzbCwwCCCCCCCVk, . .o..#XoOo XoOOOXXoo....o.XBCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCrOoOCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCB@@OO.o+OOOO*@OXXOOO@**@***=*4tkVCCCCCCCywCvccCCCCCCNs:O%OO>qfNCCbooo.9CCCCCCnNCCCCCCCCCCCCCCCCCCs9wZCCCCuXXooXXXo,vCC9Xo.X....X.XXXMCcyyvCC", "CCbbbbCvoo%oo o+++o+++ooo#+&$$+O.o+oOOo#+ ++++Oooooo..ooo.OO.....XXo.o+%O+O+.O.gCCCCCCCCCCCCCCCCBk$mCkfVCCCCCbkbCs9CCCCCCCCVf:O@OOOOOOOpCCCCCCCnu9zCCCCCCCCCCCC59CCCju75fCCCC,#O+XqZCCChXXXoXOoo.XXXX.XX...XX.XXbCbbbbCC", "CCbffbCboo+ooo++o+ooo+o .+++$+O..Oo.oo o ++#o++Ooooo.oooooOOoX.svkD;.o++X=evCCCCCCCCCCCCCCCCCCCCCCCCCmkzCkkCcknCCCCCCny=@**X-XXOOOO=ACCCCCCCCCCCCCCCCCCCmf9#9CCC....sCCCCh.@oXXOiVCCsXXoX.oX.XXXX..XX.XXXXXXvCvggMCC", "CCMO#vCboooo +++o+oo+oo +O+$$+OoO...o. ## +oo+ooooooo ooooOOo7mCCCCNsssdkCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCVk7dCCCCCCCCCCzOOOo.o.ooOooo...oOOkCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCOX0CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCkoX.oOOOOOOOOXXOOO@*cCCCCCCCCCCs0cZCCCCCCk9-OOOO**XXOO%O-O=mCCCCCCCCCCCCCCbswX.oo@$OOOOXXOOO@**uCCCCCCCCCni@OOXXOO*#-O*O@*OXXX**X-*XX**OOXX=sCCCCCCCu9%%qnC07CCC..bCCCXXXbCCB@XXooo.XOOOooOo.X..oX.X..X...XXvCvwybCC", "CCbSvbCbooO..#oOo+o ooo.oo++$+%o#X.oo.o#oo oooooOOoo .XXyCCCCCCCCCCCCCCCCCCCCCCu..oo+..+@iCCCCCCCCi++O.vCCCCCCk@wZCC&O+OO#XX.#O+OOOoX .fCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCs@zCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCfX.o@O=OX-XXXXX**O*>CCVy=cCCu**OOX-XOO**X*#*@*XXXO**X-*OO**OOoXX.uNCCCCCCCCCCCC77CCC..SCCC@XoqCCCnXXXXoOOO+OOOO.oXXXXoXX......XXvCbvvbCC", "CCbbcbCb++oo..+Ooooooo ++$$+ooXX.oo. .+ooooooo+OXo..#XZCCCCCCCCCCCCk$CCCCCCC0o. o+O.oO0ZCCCCNa0$o@O++vCCCCCCfzrCCmX@OOO+Xoo+OO+OOoo..NCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC0@CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCNX.Xo@@@OOOXOX-XO**-nCCyckCCk**OOXXXXO*#*X**OO*XX@@XOOXOXO@@@oOX..@rmCCCCCCCCCC75CCC .bCCC9Xo#=OXXX**#***XXX@@O*OOO*060qsssq=OX...... .7zVCCCCC99CCC..bCCCboOo++.7uoXXoOoooo.OOOooXXoo.X.XXOX.XXvCvXXvCC", "CCCCCCCb.o+o.. ooooo++o OO+$@Xoo.o.oo. o ooo+++oooXo..OoOOXXOXXO+.....o.ACCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCbbCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCm#OOOOOXX.OOO@X***-,CCCCMbCC,OXX**O**@OO3mCCCCCCCCCCCCCCCCCCCCCCAw..oXO..kCCC09CCC..vCCCbXoOOOoXXX.XoOOOX,zCuXXXXX.XXX...X.X..bCbwwbCC", "CCbbvvCbo%oo.oo ooooo#.o+++$@+Oooo+Oo.o+##SCZCCCCCCCCCCCCs@ooX. .....CCCCsXOO#.;aNCCCCCCCCeoX<7isdbCCCCCCCCCu#CCZcCkCC:@XX@@*@@-0CCCCs@OOO@*O@OOOXOX....BCCCCCCCCCCCCCCCb;. ...oo-O*@gCCcVfBCMXo+@@@=O=@@fCCCCCCCCCCCCCCCCCCCC&oooO.o,VCCCCC9oCCCoovCCCCCC0XXo@**X***#*yCCV@;mCBoX#@o@@==@@MCCCCCCCVscCCCCCCCCCCk#Ooooo.5CCCCC9#CCCo.vCCCCCC7X.#kCCCCCCCCCCCCCCCCCCCCCChXXXX..XcCCCCCCC", "CCCCCCCb#XO.o+++o+++.+$ .oo&jNCVCCCCCCm$+.#..oooOvCCCb .;ZCCCCCA>bCCCCCCV$ooCCCCCCCCCCCvBCCCCCm@dCCCCCCCCCCmCCC7 .oooX+OXoXoXo...oooXooo5CCCC7XCCC.#vCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCbOOO#X.ovCbwyMCC", "CCNssACvOoo. oooo+oo.mCCCCCCCCCCC+ooo. o+o #wCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCszkCCCe..ooooXXoo...o.o.@CCCCCv.OOOOoooOoCCCso..OoOnCCvX-O@O@XXCCC0..o0CCC<#o.+OOo.oo#+$@oO@$rkACCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCv.XXXO@*******XX**@bCCCCCCCCBbbbbbCCnbMMbbCCnMvvMmCCbbbbbmCCbbbbbNCVvbbvvBCZbvvvvBCZbvvbbVCBvvvMvVCNvvvvvCCnvbvbbCCnvvbvMCCCCCCCC", "CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCv...ooo+o.O..ooOo.obCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCNvvssrDCCC7X.osCCC .##OoOoo. ++OO+O+$++7DmCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCv.XXO@@********X*=OMCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC", "CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCZCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCv ..oOO.#O..oOOoOonCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCbbfdbCCZ##..+o++O+o.+$++%%O$$++O#@ekZCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCnXX-X#*4**-***X**-=bCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC", "X#...o+OOOo..SCCCCn88785777089908885888877988q08775770q050685088055886007785685578uCCCCC8..oo. Xo++Oo..#oo%+o ...Oo+o.Oo.+OOOOoCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCBvbsdr9,#oo#@O+@@$$++++Oo@O+qjmCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCoXOOO=*=**4**-@*-**@@@*@OXXXXXO@XX-**X*qCCCCCu00000099577750988807850058585508899699959t7577559799t9093990909mCCCCboXXXXOXXXXXX.", "O...oo+O+Ooo+bCCCVSo#ooooooooo+#oooooo++#o++++%o#XX.o#$XOOoo#oooOoo.ooOOo.ooOo...#wCCCCC5..o. .o.o++o+ o oo+o. .o.OOO.Oo...oO.O.CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCbbksa00;@%+O#o#@$@@$@,icCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCoOXOO@**-*44XX**-@*@=4@@X.XXOOO*O-XXXX*qCCCCCroO@@@#XXoX. .oOoooOOOOOOoo..Ooo..oX#.##..Xoo..o.XXXXXXXXOOOOOOXbCCCCv#OXXXOXXX.X.X", "O....OOOOOO..bCCCCvooo..#o.XX++Xooooo.o# #+++&@OoXX.o+OOoOo.ooo.Ooo oO+#oo.o. ..osCCCCC8.o.. o.#%@+++# #+++...ooOoOoooO..o..o.CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCAbbssw85+@@@@=@@rdBCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCXOXOOO**-*44*****O**==*@-X@XOXoOO*X-*XOqCCCCCgOO+@@OXXXo. #+o+O.O.+XooX..#.o..oX#.#X..........XXX.XXXOOOOOXoMCCCCvXX#oXXXXXX...", "O...Oo#O+O..+vCCCCSoo#..+O+#Oo+Xooooo.# +++++O+X...O%OOOooooo..Oo .oO+O#o.o...o.DCCCCC8..o... ..+$$+##.oO%%O...oOoOooOo.#.OOOoCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCmMkds00@#oOXOO-OOO@*XOOiCCC6o..sCCCoO@ooXXXXCCC0@oooX:NCCkcbBCCCCCCCCCCCCkOX****=***:****4==CCCCCCCCCsubMfOCC0ibMf@CC0iMvy9CC@fbvw5CCXfbbwsCbobbv,sCv.vvMCCCCCCCCCAbbbbbCCnbMbbbCCmbbbbmCCMbbbvmCCbvvvvNCZbbvbbBCZvvbvcACVcbbbvVCNvbcvvZCNvvvvvCCnvvvvvCCmbbbbbCCCCCCCC", "CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC5.#.O .O.o ...oXoo0CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCns,XXX@CCCc**O@CCCsoX.#XXoXwCCC=OXXOOqCCC0=@XXOOO=@dCCCCC9XO@=***=4***--*4=qCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC", "CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCu&wCCC7 .o.......o.oXo.9CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCZkw0CCCu*=X0CCCqo#.XoooXsCCCOXXXOOrCCC,@@oXo@OO*kCCCCC9O@@*****4********qCCCi,uCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC", "CCAssACboOoo.ooVCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCb .CCCO0CCCC7oX...o+OsCCCC=@O>CCCCCCCCCCCCCfOo..vCCCDo....ooCCVu;cCCCCCCMO@+@uCCCCCCCCuOOOOOO@OouCCCCCCCCCCCCCCCCCCCCCCwOOoooo.#o+...#X.o.X.XXXOoX.#XoOooXoOOOOO+OOOOOOXvCvvvvCC", "CCbwwSCb.. .++#o##oOo.o#oXOXXoo.o o .+ACCb#O+CCCb#oCCC97Cn0@@5uCCCCCCCD@==---*XO*@*=OOOOXX*@@4@*@iCCCCCB..#OoO++@OO*@@X@@+O@o+O**=**@O0CCCCCCCCCCBkcu0CCdBCCCCCCvq*@@OOOX*XXX@XX...oo@OOOOOoo@o+ooo###oOoqzCCCCCZlsoZCdwnCCCCCCnwOooo..X#oO@OXXXbCCCCCCC", "CCmssACvo.##+++ooooo&fVCCCCCCzknj;CCACCCCCVf5++&@.. #oO@oX. .o#oXoX.+$$+@Oo+o..Oo.+$sBCCCCCCzlk@BCMkCCCCCBD# XXoooXX.......DCCAnCdCCCCCCCCCCCN9OO-OooOoooXoyCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCwoooOO$@@*$@O0BCCCCCCCCCCCfCmBCCs-@==**O*@pCCCCCCCCCCCCCkbCB.kzzCCCCCCAs=OOXX#X@OXXX..##@@@oOOO@@o++.oooXooOoo#;dZCCCCCACC=jnkzCCCCCCVfO@@O*O@@******@OO***@@*@$bCCN@oXXbCCCC9X@@*@@O@XoX.....ooosCCCCCCn$$O.+fBCt@@@=o@qCCCkoO#.#o#MCCCCCCCCCCCCCCCCCCCCCCCCCCCCC5+#oo#&$OO0CCCr..Oo+ooo#X@+##OXOoXXCCbbcbCC", "CCvwwbCC.oo +o8CCCC.#;VCCb@+@#CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCV@+OOO*Oo..XoovCCCCsX#jCCCCCCCCCCCCCCCCCCCCCCmVCeZCCio@O+@#*X**===@@@@OOXOiCCZfCVmCCCCCCCCCCCCCCCCCCCCCCCCCC5#X ..#sCCCCCCCBo#o+o+o++#+$$dACCCCCCCCuXX.oo#oXooX#..XXOoXoXXOOXOoCCvXXvCC", "CCbddbCC +++++SCCCCCCCCCCCCCCCuoou7## CCCVCCCCCmbCCCCCCCf@OCCCCmmukCCA.......o.o+++.oo5CCCCCCCCCCCmsMCb+CZzrzCVZCCCCCCCCCCCCCCCCbbb+$@&oO@+$++@o +7bbMCCCCCCCCCCCCCCCCVVClrcVC&bCbgmCCCCCCCCCCC5@O==$$OO=@*OOOo#NCCkDmmCC9-XXXX.#9CCCCwooovCCCCCs#OonCCCCi@OOXOX#+O@+@8VCCCkcCfZCCi@@*O@&*@O@*@+4+4++#.owCCCiiZmCCCCCCCCCCCCCVi+*@OwCCCu#oorCCCCCCCCCCCCCCCCCk=+@+o#O+O.Oo. .o.ooo...o.Xoo.#OOOXXXXCCvvvvCC", "CCbbbbCCo+$$#+++&+#++++%@sCCCCCCCCCCCCCCj+++omCCCCCm,+@Oo;gCCCCCCCCCCCCVe@+#++ooo#++aCCCCCmZCfZCCw@@++ooo%Oo..+%OOOO#X=yCCZsCVnCCCCCCCCcwCCCCCCC5.Oo.. ..XX@mCCCCCCCCCCCCCCm@+#CCCCkCzCCCw.O.....o.ooOO...kCCCCCCCCCCCCCCCbukbC=cCzCCCv<;CCCCCCCCCnf&oX.XXXoCCCCCCCCs@OoXo+@OCCCCCCCCCV,@@*@=;@@OO@@O5CCCCCZ,,ZCCr ..XO#O+@+tVCCCCCCm;;iCCCCCkkCCCCBCCC00CCCCCCooo#+bCCCCCCCCCCCCCCCCCCC<...oo..oXoO#@oOOooooCCAssNCC", "CCb77MCC#+&+++#&+o#@+&&uCCCCCCZ++&&#+&mCCCmw@OO#@0VCCCCCCCCCCCCCCCCCCmf@lCCCi+o#$mCCCCCCV5O+O..+&@eCCVfZ7cCCCCCCCCCCCCCCCCCCCCCZ.o ...#O9CCCCCsoOoo. . ..XoXXXXjCZ%ooo.@jCCzVsbCCS#+++ooOo.XX.XoXOqCCZ;&zCCCCCCCCsO@#.oeCCCCCCCCCCCCb@*MCb+;fCCCCCb@@bCCCCCCCCCCCCCCCCCCCCb#obCC#O$@&CCCCCCCCCf@*OkCCCVo@***-X*OO.. BCCz,>VCCqOOOOXoo.o.oXXOOOMCCbsVzCCCCCCCCCCCs.XoXoXCCCCCCCCb@oOoXOoOCCCCCCCCCso@@$$==@@@-O@@OCCCCCz,VfVCCwX..+#+O+5VCCCCCCn=o=@iCCClofmCCCCCCC<0CCCCCCoXo+#bCCCCCCCCCCCCCCCCCCCV9o.oX..XXX.#@XO#.X.oCCv,,bCC", "CCMMMMCC++&+++++@O#O+&7VCCCCCCb+++@#eZCCf9@@@+o++@rCCCCCCCCCCCCCCCCCmVCuVCCeo@@@o@mCCCCCCV5OO.o+@eCCVfCZmCCCCCCCCCCCCCCCCCCCCCCz... oXuVCCVg5+OOXX.. ...oooOXXvC8O.o7nCCCCjCkCCCq##oo++Oo.oX.XoOovCCCCkCCCCCCCCCC5oo.o#5VCCCCCCCCf9=O@bCCbVCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC#O$$@CCCCCCCCCs@OXsCCCC6O*@O-X--Oo..sCCVkCCCCvOOOXoo..X.XoXOOOrCCChCzCCCCCCCCCCCCm<..#5CCCCCCCCs@@@Xo+#rCCCCCCCCC<@@$@O=O@@OOO=@;CCCCCCnVCfVCCr.o+OO+5VCCCCCCn=Oo@OoiCCZuCZmCCCCCC+9CCCCCCoo+@+vCCCCCCCCCkwcCCCCCCCCn@.X...XXX..@XX...ooCCvvbvCC", "CCbbbMCC++&#+++&@+o#@&VCCCCCCCZq9dlZCCn;+@$@@@o+@@$CCCCCCCCCCCCCCCCkBCfVCCio@OO@o#$mCCCCCCV5Ooo+eCCCqxZmCCCCCCCCCCCCCCCCCCCCCCCs .. OuCCCN9ooXOoo... . .XooOXrZC;oO%CCCCCNzVzCCB###oo++..Xoo...o;CCVVCCCCCCCCCCCCs+o..##%CCCCCCCCu#o@@@@$OoCCCCCCV5OOOOOOXX...sCCCCCCkouVCCwoX*@@X@XOXOXo@O@$+ .+wCCCCV7kCCCCCCCCs..#++Oooo..7CCCCCCCCCCCCCC;#X..#OOooCCbwwbCC", "CCbMMMCCCCCCCCCfq&++bCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCnB5wCCCw..ooX..#@@=+O@@OOOoo.wCCVfCfkCCCCb#@mCCCV$fCCC0X,CCCV,OOXoO... ooX5sNCCCCCCCCCCCCCCCCCCCj .ooXXoXONCCCCCjjnnCCz##@%o++++++o+ooowCCnkZCCCA+o.+O+o+OOsCCCCC@oo@O#.#o@@@@+bCCCbi@+qCCCCbbbbCCoo+@oOXoO@#@Oo.8CCvbbMCC+@O@@+@oo@,cCCCCkOXOOOOO*nCCCCCCCCCCCCCCCCCCCCCCvXBCCCCz>+@$kCCCCCCCCCCCCCCCCCCCOOOXCCCCCCCCCkOXX. .bCCCCCCCCCCCCbVCfVCCyO%OOOOOO++O o+oo..++OeCCV5VZmCCCVrssssjbbmCCCCCCCCCCCCCCCCCCCCCCCCCCCn99mCC", "CCbwebCCCCCCCCwoXO*@-0CCCCCmNVkCCsOXX*XOOOX...OoOogCCCCCVCCB=OXo-ZCCCV=OOO#sCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCgOX.. uCCCCCCCCCCCCCCCCCZ7wVCCwOOOOOOO.o+++oo+oOO+++wCCCCCkkCCCCBbbbbbksszbnCCCCCCCCCCCCCCCCCCCCbwwbCC", "CCmqqnCCCCCVMbmCCCCCCCCCCCCCCCCZda<#VCCCCCCBr@O@@o@@o+=mCCCCCCCCCCC+o.OOOOo@OOOOoo0CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCN0OOo0CCCCCCCCCCyfgCCV=OOO*Oo .oo.oXoXOCCCsuACCV@o+OO@*=ZCCVVCCCCCCCAgMCCu$OOXX..ooo#oo...dCCBkkfCCsOOOobCCCCCCCCCCCCCCCCCCCCCCCCCvf=OX9CCCCCCCCCCCCCCCCCCCCCCCCCCm;oOOO#9CCCCCCCCCCCCCCCM5VgZCCwoo.+O.ooo+oO.o.oo.ooowCCCm$dmCCCZ,X#X..X.XX........CCbXXbCC", "CCMffbCC&+&&+++&&++++@@+,ZCCCmZCrZCVw.#+Oo. ++OXo.... . wCCZdCVmCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCsSCCCkuCCCV,.XOOOOo....0ZCCCCCCCCCCCCCCCCCCCCCCCk=iCCC;XX.OO+O%OO+..+&#ACCd87CCCw#oo@+$oo.+$+++o+$O++%@&+$%+o@OobCCCCCCCkO@$OXOo#sCCCCCAddACC+#+O@O@#OOOOoXO9CCNssBCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCngDjCCCCCCCC,OO@9CCCCCCCC5qhCCNOOOOO...oo#o....&CCCw;jCCNOOOOMCCCCCCCCCCCCCCCCCCCCCCCCCCCu-OOO-93cCCCCCCCCCCCCCCCCCCCCb@XoOO+#BCCCCCCCCCfNyCCCCCCCCCCCmBCCuO..X.oo+oo.X...XkCCNnmkCCCCCCCCCCCCCCCCCCCCCbXO@BCCCCCCy6mCB-O*=OoOkCCCCCCCCCCCu #O=mCCCCCCCCCCCCCC=o@-=mCCCCCCCCCCCCCCCCuo+7ZCV@-O+*@rCCCkCkCCNXooXooooo.#oo+XXZCCZw@mCCCCCb<,vCC", "CCBddACCCCCCmVCCCCV7&+@.+++@++@+++++++aVCZrVCCCCCV5X#.....XovCCCCCCCCCCCCCCCCCCCCCCCCCn9OX##++@++&+o+++$+X.#XX.XO+OOoo.oOOo..X0CCCV5oOO=OOObCBbCCCNnVzCCm.oXX#XXOOXXOOOXOoOOO-OXX...owCCCCCCCCqXOoXXooOXOkCCCCCCCCCCCCCso.O+OO.5VCCCCXXX.X.X*O-OOO.,CCCVuo@oOO--XXOoOXoO**@OqCCCrwwCCZ$OOO#oo.#@++XX++;CCCu0cCCCCgO@O@2bbbvMvVCCCCCCCCCCCCCCCVcgsss0=O*OO@O-XX#...#@0VCCCCCChXXXOXOXO>kCCCCCCCCCCCCCCsoO+%O.oo5VCCCkVCdZCCw.X.X........o.5ZCCCCCCCCCCCCCCCCCCCC", "CCCCCCCCCCCCCumCCCCCCV7+++@@##&+###eCCZqCZmCCCZ,Xo@o+. ...oqCCCCCCCCCCCCCCCCCCCCCCCe+OOO@X#.#@#@++&+##+O+..#+OXXOOOo.oooXooo....ooOXOOOOOOOOo+fCCCCCCCCj .o.XX.ooo.ooOXoyCCbNNlCCm+o#o+o++@+o++++%+ooo#+@+#@@++@@+&@@@+O#oo@OO#+#X+O@=*@@&$#nCCCCCb##SCC&@+@OO@@@$$++#+0CCbo@bCCCCCCCCCCCCCCCnroO@@OooOo#XX.X**XOOO.cCCk<@@o@O*O*XOOo@Oo#*@@O*nCCzAAbCCwOOOXXo#@+@@#X++@kCCCCCCCCCB=oo+iCCCCCCCCCCCCCCCCCCCCCs=+$*@OOO-O@O=OOXXXXXXo@o$kCCCCCCAuXXOOO=NCCCCCCCCCCCCCCCsOO+++Oooo,VCCCmVCqBCCw..X........X0CCCCCCCCCCCCCCCCCq#O+@+OO++Xo,VCCCzVCVVCCwXo.#...oCCu9q0qkCCCCC:X@O@@*O@OO@@***XX@X+#O.X+@@#@O@O*nCCCCCCCCCCvooO+O@OkCCCCCCwO++O+oo+..ooX-O**O0kCCCCCCCCCCCCCCCCCCNVCCCCCk#o=mCCCCCCCCCCCCCCCCCCCCCv++. .ooo+oooqCCCCCCCCCCCCCCCCCCCCsCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCs", "SCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCs#*X+MCCCCAXo#Xoo+$O+t9dzZCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC7+#;CCCCCCCCCCCCCCCCCCCCr..OqCCCCCCCCCfOOXzCCCCCCCCCCCCCCCCCCCC,+oXo#oo +qCCZt+#+$$xCCCCCCCCCCCk@@+wCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC7++tBCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCm<@fCCCCCCCCCCCCCCCCCCCCCCC09CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCs-O$OOX.oXo@O@+o+BCCCCCCCCCCCCc@+OO%-O*ivCCCCCCCCCCCCCCCCCCCCCCCCCCx++omCCCCCNryVCCCCCCCCCCCCCV5#..#..o#+Ooo#wCCCCCCCCCCCCCCCCCCCvCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCv", "CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCzX@@+SCCCCD#o..7svbCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCu##BCCCCCCCCCCCCCCCCCCCA o.sCCCCCCCCB@oOyCCCCCCCCCCCCCCCCCCCCV5o#@887sdACV5##+ykj.@O&kzis@+o+5VCCCCCCAyOOO-X@O=*rkNCCCCCCCCCCCCCCCCCCCCCCCCCCCCCBfbu:%OpVCCCm=oOO,nCCCCCCCCCCCCCe#OOZCCCCCCCCCCCCCCCCCCCCCCCXXbCCCCCCCCCCCCCCCCCCCCCCCCCCv..", ".O+o@X+OOOOO@OoXXXXXX@@O**X*XX-XO@O-OX**XXOXOOX... ..%OOOO@oO++@OoOO@@@OXOOX+o*OO$O .+oO.+$&+@+ooXoXo##..#++ooXXbCCCC.X9CCCCCw.7NCCCCCCCCCCCCCCCCCC", "CCCCrO+X8CCm9wssdsfbbSBCCCCCCCCCCCM++###+o@O+O .#OOoXo+X..oo#oooX.X#+&;@+%+OOOOo.#+O+OOO@@@o#..&$$$$$oo+++%o+..o.OXOOooOXX.oooo#.. ....oXXoXoooXuCCCCCCCCCCCCCCCm..XnCCCCCCCCCCCCCCCCCCCCC.oXooOO#ooo+.Oo++%OoO@++@+.oOyCCCCCCCk@oquCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCy**X***O*-XOOo oOOOO%OOXOXXOOOCCCCCCCCCCCCCCCVdDssu<#Oo5CCCCCCCCCCCCCCCuX@@Xo%OOO+O@O...XXXO@**@*-OXO-XO*OOO-XOX*OOOX#X ++OOOO++OO@OoOoO*@X@XXOOo#%O@$#.++O+.+@++&+OXXX.o+...++O+Xo#vCCCb.O7CCCCC,..@CCCCCCCCCCCCCCCCCC", "CCCCB5#.zCCCCCCCCCCCCCCCCCCCCCCCCCb+&##+OOO++#..OO#X#oo#o..o#o@o...#@&@@O+OOO+.+..+++O+%@Ooo#..+$&&+%+.o&+%+.....XXO.Oo.X#oXXo#.... ...XoXoXoooXMCCCCCCCCCCCCCCCCwXX@rCCCCCCCCCCCCCs@o+@O@X@@@*@*#**#*#@4*@444@#oX .+o@+O@&4@*@@@@@@@@@*@@@&@+OOO..o.O#o#O@++OOooooooo.o.+.ooooXOO#.bCCCCl +..oXoooOO@$@OX..Oo+@@*O@@**&@O@*%$$Oo+oO.#O++O+OOOOooOX#o...oo.oOo+@@@@o#oo@#oo@@bCCCCCCCCCCCCCk.bCCCCCCMOXoDCCCCCCC", "CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCb++oo ..#o.Oo+o#ooo.OOo ....XXoo..o+%OO+O++Oo +O#o.X.....o oXo+vCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCno@$+;CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCBe7@+@@++$@+o..o@$7wdbCCCCCCCCCCCC+oo@sCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCBBCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCs;CCCCCCC.o+8CCCCCCCCCCCCCCCCCCCCCCCCCCmssMbvbSCCCg<*+O@==@@@@@+@@$XX.....XOOoO@+oXOo++OX#.oooX#@@@+%+O+oo#..o+@&bCCCCCCCCCCCCCs.bCCCCCCsXXovCCCCCCC", "CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCb #+#..oO+O.oO..ooo.OOO.. .oXo...oo+%%ooO++Oo +O.o#.....X. .#qNCCCCCCCCCCCCCCCCCCCCCv9CCCCCCCCCC.OfmCCCCCCCNs##=sCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC$#++ozCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCm@O@@@@@@O$$@#.##@+@&@@&tuzmCCCCCCl$Oo@lCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCcorCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCq@CCCCCCC,@OyNCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCb@*fCCCCCCCs&@@O$$@X XoO#O@0CCCCCCCCCCOnCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCVvMbvvbbvvbvbvSbvcbb", "CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC9oo#++.sZCCCCCCCCCCCCCCCCCCCCCCCCCCDXsCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCS...zCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCM@=CCCCCCCCbo@@OsVC>o$CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC=@rCCCCCCN*@4@%@@kCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCqX#ooOOoXooXXXXXXX..XX.XX", "CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC8. kCCCCCCCCCCCCCCCCCCCCCCCCCCCCCsbCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCV0oCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCvXoozCCCCCCC", "CCCCCCCCCCCCCCCCCCCCCCCCCXo+.uCCCCCCCCCCCCCCCC0@bCCCCCCCCCCCCCCCCCCCCCCm#O@+#.wCCCCCCsOkCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC8#oOsCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCsXXosCCCCCCCCCCNoXosCCCCCC", "CCCCCCCCCCCCCCCCCCCCCCCCiooXoqCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC#OkCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCk$9uCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCXoX7CCCCCC", "CCCCCCCCCCCCCCCCCCCAlw##.++O9CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCsqCCCCCCCCCCCCCk<+++oo oOwCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCkoOOo.X#CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCs=@XosCCCCCCCCCCCCCCCCCCCCCCCCCboO0CCCCCCm$o@,VCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCi@@@=@@*O-=7kZCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCXXX9CCCCCC", "CCCCCCCCCCCCCCCCCCZ$..oo#@O$BCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCBs$ +oooo owCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCuO+ooooCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCw;O#oqCCCCCCCCCCCCCCCCCCCCCCCCCVoOOfCCCCCCm$OO5CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCi@****@O@@;@=sNCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCboXX9CCCCCC", "CCCCCCCCCCCCCCCCCCm. .oo++5mCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCMeOO+#o+%OOo. .wCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCV<++ X,CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCr=o.o0CCCCCCCCCCCCCCCCCCCCCCCCCC:OOXkCCCCCCm:@@uCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCi@@O@*O+@44o@#wbCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCDCCCCCCCCCCCCCCCCCfOoXwCCCCCC", "CCCCCCCCCCCCCCCCCCCk+..$qkCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCZk5+@O++Oo+oOo. rCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCvO..#cCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC5$o.o5CCCCCCCCCCCCCCCCCCCCCCCCCCsoOOogCCCCCCVs,@BCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCi-@OOO@@4=@@X.oCCCCCCC", "wCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCnu=. #+$@+%+++o+o%o#wCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCO%o#O@CCCCCCCCCCCCCCCCCCCCCCCCCCCm=O+O*5nCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC9O6VCCCCCCCCCCCCCCCCCCCCCCCi*@O=@=@@@X oXX+@+oOOX@nCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCm=@O,VCCCCCCCCCCCCCCCCCCCCCCCi*@@&4*OOX XXoO++@@OCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCy+O@+O@XX#..#OO.OXo@O+XXo##oo#.o.O. o#XX..O.obCCCCCCCCCCCCCCCCCCCwOooXcCCCCCCCCC", "CCCCCCCCCCCCCCCs+#@mCCCCCCCCCCCCCCS##.#o..OOoooo. #XX@Oo.X. .XXoo. X+O.+ooo..ooOo$BCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCrO%OsCCCCCCCCCM$O%OO+OOo%O$mCCCCCCCCCCCCCCCCCCCCCCCCCCk+@@&$$gCCCCCCCCCCCCbOOXO@O@;s=$OO+@OOO.$@+++@O.O@=@+OO$$Oo%+@@$$$%oooO$%%$+$@+$$+o@sCCCCCCCCCCCi@@**4=OOOXiCCCCCCCCCCCCCCCCCCCCCv-X$mCCCCCCCCCCrXOoofCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCVOO@OBCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCyOO@O#O.....OOOoOX@OOOo.Xooo##o+o..XoX...XXovCCZCCCCCCCCCCCCCCb5XOookCCCCCCCCCC", "CCCCCCCCCCCCCCCV$ o$mCCCCCCCCCCCCCv . #..+.++oo..oooO@X.. ...oXo..o@OooO+ooo.oO.#7CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCZfCCCCCCCCCCCCCCC9-OOrCCCCCCCCCC9O%OO%%OO%OO;ZCCCCCCCCCCCCCCCCCCCCCCCCCCe&++$++0VCCCCCCCCCCbOOoX@@**oO@OOOO$$OO+O#+OO+O@@$@@O@&;Oo#o+$$++%+ooo++++$$@+$@@ooX5mCCCCCCCZ5@@@*4==--OrCCCCCCCCCCCCCCCCCCCCCkOX5VCCCCCCCCCCCzXXXoonCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCrOO=uCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCi+@O@X....#+OOXoO@+XoooXXoX.#ooOo.X#.#....ovCr#X9usbbmCCNvcu<@#oX=zCCCCCCCCCCC", "CCCCCCCCCCCCCCCClo#.$nCCCCCCCCCCCCS. . ...oo++oo. +O@oX... ...o...X%+oooo+oo.++O.olCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCV<+CCCCCCCCCCCCCCC9-O-OsCCCCCCCCCbOOO@--OOOO..8CCCCCCCCCCCCCCCCCCCCCCCCCCC8+@+OOO=bCCCCCCCCCb$OooOO*=*O@O.OO@$o++@O+Oo@@@$$@+O@$&Ooo+O@+OO+%oo+$++@&=O+@@@@OXO@sCCCCCm=oO@O**==-O6VCCCCCCCCCCCCCCCCCCCCC9OyVCCCCCCCCCCCCCX.XoO=mCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCcOO-,CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCi@OooX...##OOO++OOo..Oooo..oooO#..X..oooXXbCfoooooOXXXXooXOO@OO,mCCCCCCCCCCCC", "CCCCCCCCCCCCCCCCCw..o+vCCCCCCCCCCCS. . .o ooo+oo. .ooXXX.....oXoo...OoooO.o...+oo.#5CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCe..CCCCCCCCCCCCCCCu--OOoDCCCCCCCCC9OOOOOO%Oo. .sCCCCCCCCCCCCCCCCCCCCCCCCCCV&@%OOO@OsCCCCCCCCC9X.X@O@@OO@o.+@@@@+O+++O@o@@@@@@%%+&Oo.o%%OooO+ooo++@@@&@+$@@@O#++O9VCCk:@O*@***---=mCCCCCCCCCCCCCCCCCCCCCCkbCCCCCCCCCCCCCCC#XXXoX@fCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC:OOOnCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCiO+oX...Oo@+OO++OOOo#o#o.#o..oo.....oXoXXbCCvw#ooXXXXXooOXXO;sCCCCCCCCCCCCCC", "CCCCCCCCCCCCCCCCCZ<.o. jCCCCCCCCCCb. # ## #+++o+. ..XoXo. ...XX....oooooooo.#++o.#onCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCA..&CCCCCCCCCCCCCCCCcsrOXXsCCCCCCCCvXX@-@OOOO. ..bCCCCCCCCCCCCCCCCCCCCCCCCCCl$++OOOO%9BCCCCCCCko..+o@=*O@o.+O$@@#+O+OoooO+@Oo@%O#$Oo.O%+Ooo++o.o+%@@@&@#@@O@OO@OXO;mu@*OO@*O**---bCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCNooXOXXXO5hVCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCfO$OiCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCi#X....+O+OOoO%OO...oooOo#..oX......#XoobCCCCVkw=XXoXX#oO9kVCCCCCCCCCCCCCCC", "CCCCCCCCCCCCCCCCCCm+oo. sCCCCCCCCCbo # # ++%+o...oooXXX.. ..Xo.. .ooooo&oooo+oo.ooeCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCs..sCCCCCCCCCCCCCCCCCCCyoXsCCCCCCCCC0XO@*OOOO...#$VCCCCCCCCCCCCCCCCCCCCCCCCCCs%O+OOOOO=cCCCCCCC<..@o+OO==o.%$O@@OO+%++@@o@OO@@OOo%Oo.o$%OOoO+#.o#$@@&$@@$@@@++@+@OOOO**OO@*OO*--fCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC0o$ui*OXOOXX5cCCCCCCCCCCCCCCCCCCCCCCCCCCCCV;@$=VCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCeX.X..O#O+O#++Oo.ooooooo...O.......XXXXvCCCCCCCCVvzDszbCCCCCCCCCCCCCCCCCCC", "CCCCCCCCCCCCCCCCCCCn$o. #wCCCCCCCCb. ## ##.@+++oo..oO..O.. ....oo....+.OwCNs@.+o+...9CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC=..ACCCCCCCCCCCCCCCCCCCVoXfCCCCCCCCCvoo@*OOOo..o+OrCCCCCCCCCCCCCCCCCCCCCCCCCCC7#O++%OO+@DCCCCCsXXo+O@O-O@+#OO+@@@++O$+%oo%$O@@OOoOOo++$@oOOOOo..o+&&&&@@@@+@@+@+@O@OOOOO-O-*O=-pCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCfXogCCn5oOOOOOXnCCCCCCCCCCCCCCCCCCCCCCCCCCCCs$**kCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCw....ooX#O#+OOo..o.+oooX..+o.oo o oooXbCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC", "CCCCCCCCCCCCCCCCCCCCjo ..#7ZCCCCCCb. .# .o%OOOo......O.......Xo...o+owCCCCVwo+O..X=OOOOo..+o.+ &CCCCCCCCCCCCCCCCCCCCCCCCCCCm&%OOo@@OXOO$-OOXooOXo+OO.%$$O++$$$$+Oo++@4@@OO@O$+O+O+O+++++o+$$@@4*@==*@XX@@@4@OO*OoO@O*uCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCm==CCCCCCCCu#oVCCCCCCCCCzX9CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCq*=iCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCwXOOOOoOOoO.oooXooXooooooo .. ooovCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC", "ssssDsssssssssssss77777777709mCCCCb+ # o.ooo+.#Xo. #oooOXX..XoOXoXwCCCCCCCCCCCCC.#+kCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC=Xo5CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCwOOO%O#..ooOo .sCCCCCCCCCCCCCCCCCCCCCCCCCCCk%%OO$%OoXOO%+#OooOXoOOOo@$@%O+$$+$++oO+*@@XO-o@%+..$@+O$@@+o+%%OO*@O*@*@X#oO@4@*@*OO@OO@mCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCDOOCCCCCCCC7.zCCCCCCCCCZOoNCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCn@=*BCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCwOO#+OOO.O.oXo#X.Xooooo.oooo.. .gCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC", "CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCb+ #o o#oo+OOXX..@XoXOXX...oXoXwCCCCCCCCCCCCCC#o.ACCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCbXXO5CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCsOXo%Oo..O++o# &VCCCCCCCCCCCCCCCCCCCCCCCCCCCw%O+$OooXXOOOoOOOOooOOo.O$$%+%+$+%++oOO*OoX-Oo@+%+%$$+O+@&++o+OOO@@+@O-@XXoO==@*@@@OOOOo=VCCCCCCCCCCCCCCCCCCCCCCCCCCCVyOOOCCCCCCCCsnCCCCCCCCCCwXsCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCg==uCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCeOO+OOoOO.X..oXXoo...o.#ooo o...wCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC", "CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCb# +# o o++oooo..#OoXOOXX...oowCCCCCCCCCCCCCCC+.oCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC7oXXwCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCsXXoOO+.oO++#oo+aCCCCCCCCCCCCCCCCCCCCCCCCCCCV>OO$$OoXOOOOooOoOooO=OoO@;$@@@++++%oo+%OO+=OO$$O@$$$O++++%oo+%$OO@+@O*@X.@*@4*O@@OOOOOXOqCCCCCCCCCCCCCCCCCCCCCCCCCCCvXO-OCCCCCCCCCCCCCCCCCCCNo@VCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC0==VCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCw++OOooo...oo..oo#o.o.#oX.... oowCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC", "CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCv# #..o+oooooo...#ooXOXX....owCCCCCCCCCCCCCCCmo.oCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCwooXOsCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCbOoXO@Oo.O+#o o+&ACCCCCCCCCCCCCCCCCCCCCCCCCCCm@$$OoooOoOOOoOOOOOO@Oo@@;$@@@$++++o+%$OOO@O$=$@oO$$+O+%++oo%%@Oo@@@-=;OX@@@4**OO-OOOOOOOgCCCCCCCCCCCCCCCCCCCCCCCCCCsXO@=CCCCCCCCCCCCCCCCCCCiosCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCB::zCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCw++OOOOo......oo.+...XXX..X....ouCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC", "CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCvo #. o+++++oo...ooXXoX.. .wCCCCCCCCCCCCCCCCk..oCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCVwoXoXXqCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCbOXXO@oo.o+$oo+o$eCCCCCCCCCCCCCCCCCCCCCCCCCCCCu$$OoXOOoOOOoOOOOO@OooO@=&+&&+$&o+o+++$++@XO@OOO#$$+++%+O+.+$@Oo@&@-*@oO+@@4==@oOOOOOXo-OnCCCCCCCCCCCCCCCCCCCCCCCCCz9=rmCCCCCCCCCCCCCCCCCCV@%ZCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCn=wCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCw+++OO....o.ooo + ...XXooX..#X.XCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC", "CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCv# oooooo.XoooXoXX....wCCCCCCCCCCCCCCCCCdo.oCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCz=oo.oOXqCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCsOooooo..O++oo++++BCCCCCCCCCCCCCCCCCCCCCCCCCCC7$$@#OOOoOOoOOOOO$@Ooo$O$=$@&+&+++o$$$$%Oo@O;%#.+@+%+$$+O+oO%@o+@@@$=;@OOX@**@*OOO*OOXO*O6CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCjowCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCk:CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCqO+Ooo...O..o. #..o#OXooX...#o.CCCCCCCCCCCCCCCCCCuwfvCCCCCCCCC", "CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCb# o. oooooX..oooXooX..rCCCCCCCCCCCCCCCCCCbo#oNCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCZk;.oXooXcCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCZCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC", "CCCCCCCCCCCCN$+$jCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCVkqZCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC", "CCCCCCCCCCCCCk$#$ACCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCb5ooo#.oo..#o@=o.o o+Oo+Oo.O@oOO+++$+&+$+oO+O$$%%%+%Oo..oOoo.oOOXOoo#+@@@@+oooo%%+.+++O$$O@$@$$Oo+$++Oo.OOOOOOOooOO+OO%OOoOOO@*OXOOOO.OXOO--OXX-X. oXOOOO%%O-OXOOOXXXXXOo@O-OOO-XX.ooXoXo<0kVCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCb**--->MCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCn9gCCCCCCCCCCCCCCCCCCCCCCCC", "CCCCCCCCCCCCCCeo#uCCCCCCCCCCCCCCCCVCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCMksq0;...o@=Oo....%++oo..o@o%O+++++@++o.$%+OO+%%$+o.o.ooo..O@OOoo+XO@@%@%oOOo++o.+%OO@@O@$+$+oo+$OO+o.O+o.OOO.o+OOOOOOooXOXO@*XXOOOXOXOXXXOXXX...oXOOO%O%O-OOOOXXOOOOoo@O-OOO-XX@77sfbVCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCr@O-*VCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCVCCCCCCCsXX,CCCCCCCCCCCCCCCCCCCCCCC", "CCCCCCCCCCCCCCA+o CCCCCCCCCCCCCCCCvwCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCnMbfss875##OOo.o..o+@++&+++$++O.%@O+O%%O+%o.OoOoo..+*@o@@@o+O@$@+OOOooooo+%OOO@+@@+%+o.+$+OO+oOOo.o%OOOOO+O+%OOoOOOO@-OXOOO+OXXXX-XXXOX..oOOOO%%O--OOXXXXOOOXXO69rsscvnCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCVgy,iCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCrbCCCCCCCsoXXCCCCCCCCCCCCCCCCCCCCCCC", "CCCCCCCCCCCCCCCk#.CCCCCCCCCCCCCCCCS#wCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCmSlssq85oO+$$+$@+++o.$+O+O+OOO+oooOOOoooo@@ooO@.OO$%%+%+ooo+ooO%+O@@+@@#O$o.O+%+O%++Oo.o%OOO+O+OO%OOOOOOO@OOOO@OOXX**--OXXOX.oXOOO%OOOO-Oo,0rsscvnCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCwXvCCCCCCCkXXOuCCCCCCCCCCCCCCCCCCCCCC", "CCCCCCCCCCCCCCCVDzCCCCCCCCCCCCCCCCb.owCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCmbcdsr88+..++O+O@O@+%O.oOOOoO.O*=+@O$#O$@O@@O+Oo#+o.+$%@OO++$o%+oo+%%+OO+@@#oo+OoOo++%O%+OOoOOOOO@O@*OXXX*XO*O#O-X...X59rsscvmCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCw.ovCCCCCCCnXOO=CCCCCCCCCCCCCCCCCCCCCC", "CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCb o wCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC@@O%+$@@$%++.o+OOoooo@@@o@@.O@@$@@oOOo++o.O%+%@@O+O#Oooo+$++.@O+Ooo+%OOOO%$+O%OOO.OOOO*XXOOOXXX--OOOOOOXX#CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCw..XvCCCCCCCC-OOOCCCCCCCCCCCCCCCCCCCCCC", "CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCb..##wCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC8@+++$@$=+$+ oOoOoO.o@@+@@@oO@@=@$oO#++++.O$OO@@O+$O#OooO++OO#O++ooo+oOO+%+OO%O+OOO%OOOO@OXOOO-X**O@XXOX.5CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCw....vCCCCCCCCyXOOmCCCCCCCCCCCCCCCCCCCCC", "CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCvoo.+#wCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCq$+$$$@;$%+o.ooOOOOoO@@@@@@oO#@;@%+O++$+o.O=O-O@oO$OOoooOO+%.Oo+o+o+%OOO@+@$O$%OOoOO@O@OO*X*OXX-OO*@OXXXXqCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCrX. ..vCCCCCCCCvOXO5CCCCCCCCCCCCCCCCCCCCC", "CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCvXOo#+oeZCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCs+O%@$@$$%$o..O+%O+.+O=@@*@ooX$&&@oO++&+oo+%%--XOO$OooooOOOooo#oO#XO@OOo+@@%O*OoXX*O@O@O@*XOXXOO-O*@XoXX#sCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCvMvvCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCw.X...XvCCCCCCCCC0XOObCCCCCCCCCCCCCCCCCCCC", "CCCCCCCCCCCCCCCCCCBe@*;uBCCCCCCnu@=@@>CCCCCCCCCCCCCCCCCCCCCr$@@XwzcbbVCCCCCCCCCCCCCCCw.oooooOoo.#X..#+XOX@bCCCCCCCCCCCCCCCCCCCCCCCCsX9CCCCCCC", "CCCCCCCCCCCCCCCCq++o@qkCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCZ,o.oo.XoXoo@oooX...#X..#@&&+&OXOXovCCCCCCCCCCs9@fCCCCCCCCCC,X9CCCCCCC", "CCCCCCCCCCCCCCCCCCCCCCCCm@$&++oCCCbO#o o#. #+++%+Ooooooo+=@XXX. XwCCCCCCCCCkoowCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCm. .X=mCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCV-oOOOOoXXXOOOOOo.ooO+@+%+++o o +o%OXX@O@@+@oo#@@OOOoOo..#@@OOOOOOO*Oooo@@@OXO*@OO@O=VCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCbzsfNCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCV,oooo.o.oo#o....ooo#XXO+&&+$oXOOXbCCCCCCCCCCCCCCCCCCCCCCCCVvVCCCCCCC", "CCCCCCCCCCCCCCCCCCCCCCCCCk@@++kCCCv#oo o+.o#+++O+oooooooo*OXXX. .XwCCCCCCCmo+@VCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC<...O=mCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCnoOOO=OOoOOXOOXo.OXOo@o%++.oo o%oOOXoX@@o@.X.@@OOoOOOo.X@@OO@O@@$*OOX@@$@OXO@OOOO*mCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCNhwoOOOoo .$mCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCZ5OOOOXOXXO%-nCCCCCsXoXXOOO@OOoO+$+++ +oo%oo+$%OO%+Oo.@%OO+OOoooO%@OO$OX%O%OoOoOsCCCCCm*OO@O@4--OO5VCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCuXXDVCCCCCCCCCCCCCOXXO=CCCCCCCCCCCCCCCCCCCCCCCCCCCVCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCiOXX.......o..+Oo..o.oo.X....XXXoO..+oXoXXbCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC", "CCCCCCCCCCCCCCB##cCCCCCCCCCCCCCCCCS.o+ ooo oo oo+Oo...o.#O@XX..#.Ooo..oooOO+owCCCCCCCCCCCCCCCCCCCCCCCCCCkOO$uCCCCCCCCCCCCCCCCCCms0oo...+fCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCVnCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCro+ooOXOoXX5VCCCCCCCn,XoO@@OOO.O++o++oo++%oo+&$OOO+OO#+@OOooXoXo#@$OOOOO%%-OOX,mCCCCCCCV5@*O*4@-OXOqCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCnmCCCCCCCCCCCCCCNoOoOrCCCCCCCCCCCCCCCCCCCCCCCCCCCr6VCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCi@OXXXXX... ..oooo..oooo..X .XXoXXO..+XXXX.bCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC", "CCCCCCCCCCCCCCCrXeCCCCCCCCCCCCCCCCS.o o+ +oooo+oO.oo..+.@X*OX..#.+oX. ++oO+++OwCCCCCCCCCCCCCCCCCCCCCCCCj#O@iCCCCCCCCCCCCCCCCCCCCCCCbfrqkCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC<.kCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCuXoOOoOXOXoyCCCCCCCCCCCs$OO@OOXOOoo++ooo+%%%o%$%OO%OOOOO@OoooXO.oXO%OO%OOOOOX$sCCCCCCCCCCCiO*O*O--OXXiCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCbo@oofCCCCCCCCCCCCCCCCCCCCCCCCCCC9O0CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCyOOOXXX.X.....XooXoo.oooo.....oOOOXO.#$X.XXXbCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC", "CCCCCCCCCCCCCCCf#&CCCCCCCCCCCCCCCCSooo + +o+o+ooooo..o#.#X@*X.#.ooXo ++OO@+O+owCCCCCCCCCCCCCCCCCCCCCCno#@5VCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCd..$VCCCCCCCCCCCCCCCCCCCCCCCCCCCCCkooo+oOOXOofCCCCCCCCCCCCCNwo$OOOOOooo++ooo%oo++$OOO++OooOO%oo.oo..oOOOOO%OO%OyNCCCCCCCCCCCCCf-**O-OOo. kCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCcO@XobCCCCCCCCCCCCCCCCCCCCCCCCCCCrO@mCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCy*@OOXXX.X... ..oooo..o.Oo.....oXOXoo. @#..OXbCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC", "CCCCCCCCCCCCCCCbX+zCCCCCCCCCCCCCCVSo+ +o +oo+ooooO.o.ooXXXOXOX.oooo.#++OO+@OOoowCCCCCCCCCCCCCCCCCCCCm$+o5VCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCu..XvCCCCCCCCCCCCCCCCCCCCCCCCCCCCm$XXo+%oOo-vCCCCCCCCCCCCCCCCAuOOo.OOOo++o+++%ooO$OOOo+oooO%OXoXoo.ooO@OOOOOOyBCCCCCCCCCCCCCCCCb=*--OOo..@mCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCsXOXXCCCCCCCCCCCCCCCCCCCCCCCCCCCCkO*uCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCyOOOOOXXX..X... .X#oooooo#o.X..oooOo.X.+@O.XXXbCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC", "CCCCCCCCCCCCCCCCO#0sfvvvbCCCCCCCCCv.o. #. o#o++ooOOo oooooOOoo#.O....o+++O+%OXo..wCCCCCCCCCCCCCCCCCCn$#+$nCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCj. +zCCCCCCCCCCCCCCCCCCCCCCCCCCCZ@o.oo+OOo,mCCCCCCCCCCCCCCCCCCCBwXXoo+oO..o@O@Oo.$OOXO%O.OO@OO..O.oo.OOO*OOiBCCCCCCCCCCCCCCCCCCCn9--OXX. .=VCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCyXXX9CCCCCCCCCCCCCCCCCCCCCCCCCCCCVo@*NCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCpOO-OOXOO@o.o.....XooX#OOOO.............#*#XXXObCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC", "CCCCCCCCCCCCCCCCO+oo++o.#o+@$0079uwXO. #.#+ +o++ooOooooo.oOOoo ..OO..++OO+O+ooo..#wCCCCCCCCCCCCCCCCn$++$nCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCc .+sCCCCCCCCCCCCCCCCCCCCCCCCCCCiCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCrOOOnCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC8@@@gCCCCCCCCCCCCCCCCCCCCCCCCCCpOXOOOOOOOOO+OXX...... .Oo.o.OOO+OXX.X.oX.X.X..XXXXXXbCCCCCCCCCCCCCCCCD..bCCCCCCCCCCCCCC", "CCCCCCCCCCCCCz+#kCCCCCCCCCCCCCCCCCM+O..#++oo+++++oOOo.++o.oOX ...oo..o+O%O++$OOo #OOOoo+wCCCZ,X##$rCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC. XXCCCCCCCCCCCCCCCCCCCCCC8o+++.#fCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC5@OOO+Ooo,CCCCCCCCCCCCC0@OsCCCCCCCCCCCCCCCCCCCCCCCCCCCCCfOOOOOO5CCCCCCCCCuVCCCCCzXXX,CCCCCCCCCCCCCCCCCCCCCCCCBXXokCCCCCCCCCCCCCCCCCBs;+ocCCCCCCCCCCCCCCu-**-;mCCCCCCCCCCCCCCCiXXO*X*XXOOXXXOOOOOOoXX.. ....ooXo.o#oooXXX.o..XXXX..XO#.XXvCCCCChooqsssDsDsq7zCCCCCCCCCCCCCCC", "CCCCCCCCCCfdlCCCCCCCCCCCCCCCCCCCCCS#+o ooo ++%+++%o. oo#oOO..oo..oo##oO.%$+O+o.+O%%oo@O@XooO wCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC9.ACCCCCCCCCCCCCCCCCCCCM....CCCCCCCCCCCCCCCCCfO..$jCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCbOOOoOOoObCCCCCCCCCCCCCCCC,==CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCm>O-O0CCCCCvXXXnCCCCCCCCCCCCCCCCCCCCCCCCdoXoZCCCCCCCCCCCCCCCByXXOOrCCCCCCCCCCCCCCCV,-**@=nCCCCCCCCCCCCCy*OOOOO-XOXX-OX-XX*@OoXoo.. ..XoXXXooooo....Xo.#OXX.X..OOX.XvCCCCCsXoVCCCCCCCCCCCCCCCCCCCCCCCCC", "CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCb+++ +oo++oo%O+$&+o o++o+O..oXooOo.+OO.+$%O+o.oO%OooO@@+Ooo.oeCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCw.sCCCCCCCCCCCCCCCCCCCCS#. XCCCCCCCCCCCCCCCCnooO9wskvvCCCCCCCCCCCCCCCCCCCCC9XDCCCCCCCCCCCCCCCCCCCCCCCCCC", "CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCbkD0OO@=kCCCCCCCCCCCCCCCCCCCCCCCCCn4**--X*9NCCwXO+-X**#*@*OOOOOOXXOOOOOXXXX. . oX.o,rszvCCCCCCCCCCCCCCCCCCCCCCCCCCCCC9XdCCCCCCCCCCCCCCCCCCCCCCCCCC", "CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCVvfw;#OO@O+OOo#.o+++Oo+o...Xo. o#X@o@wCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCmo......XXoX$CCCCCCCCC@.. sCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCr++.oooqCCCCCCCCCCCC:OXXOO%%OouVCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCBOjCCCCCCCCCCCCCCCCCCCCCCCCz.XXVCCCCCCCCCCCiOO@@fCCCCCCCCCCCCCCCCCCCCCCCCCCCm=*---**;feXXo@XO#@*XX*OOXOOOOXOOOOOXXoX...*OOOO-OyNCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCNXoonCCCCCCCCCCCC9OO-qCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCroO@*OXXOXXXXOOOOOXX6gNCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCcr@ooooXoX.;sCCCCCCCCCCCCCCCCCCCCCCCCCCCCC", "CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCnu=OO...o++++o++.OO#wCCCCCCCCCCCvVCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCio.oXkCCCCCCCCCCiXoo.nCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCN..O;bCCCCCCCCCCCCCCCCCCko.oX5VCCCCCCCCCCCCCCCCCCO%OOo.CCCCCCCCCCCCCCCCCCCCCClOosVci=-Ooo=sCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCuXX,CCCCCCCCCCCCCu-OO0CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCi@**@@OXXOoX*XXXXX:umCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCvdrX..X#o.Xo%wMCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC", "CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCkdCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCzw...oO%+%oOo.++#orCCCCCCCCCCqzCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCmsDNCCCCCCCCCCC;oXo&CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCk. OoouZCCCCCCCCCCCCCCCCwo.oXOsCCCCCCCCCCCCCCCCCCO+OOOOCCCCCCCCCCCCCCCCCCCCCCC=O9CCCCk0XOXX>bCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCo#XjCCCCCCCCCCCCCc@OOqCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCi*O*=*OOX..XX@XOoyvCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCjD9599;..XX...XXX&ivCCCCCCCCCCCCCCCCCCCCCCCCCCCmbCCCCV", "CCCCCCCCCCCCCCCCCCCCCCCCCCCCCbr@XmCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCVf<@@%O+++o.+$Oo.wCCCCmsguXO3CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCi==@*=O--XX.XOO2kVCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCn$XXoooXXXX..+qfACCCCCCCCCCCCCCCCCCCCCCCCCCCCCC9XX.,9;", "CCCCCCCCCCCCCCCCCCCCCCCCCCCCb@$@#sCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCbe$O++#...@+#. rCCn@ooXOX@CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC9XoXoBCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC5..OOXOOouZCCCCCCCCCCCCCfo.ooOsCCCCCCCCCCCCCCCCCC9OOOO9CCCCCCCCCCCCCCCCCCCCCCCkOOcCCCCCCCb9XO=,vCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC5XXuCCCCCCCCCCCCCCCkXO=CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCi4=**O=O$OOX#oybCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCN,Xoooo@9ujnCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCsXoXXXo", "CCCCCCCCCCCCCCCCCCCCCCCCCCCCb@@+osCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCAs$o#o. OO... wn+XooXOXXnCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCvoXXXqCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC...OOoXooO5bCCCCCCCCCCCCn..oXosCCCCCCCCCCCCCCCCCCqXOoOqCCCCCCCCCCCCCCCCCCCCCCCVoOuCCCCCCCCCz,OOXuCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCn...NCCCCCCCCCCCCCCCC9O$bCCCCCCCCCCCCCCCCCCCCCCCCCCCCp**=*O*O$=OOOsBCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCvvvBCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCz@XoXo", "CCCCCCCCCCCCCCCCCCCCCCCCCCCCb@O#sVCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCVk;#..O+. .#...OXXOXXvCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC9XOXXvCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCboOoOOOOooO+ouZCCCCCCCCCCC<.XoosCCCCCCCCCCCCCCCCCCsoOoosCCCCCCCCCCCCCCCCCCCCCCCCio5CCCCCCCCCCVu-OX,ACCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCw.X0CCCCCCCCCCCCCCCCCV5,VCCCCCCCCCCCCCCCCCCCCCCCCCCCyX*****XXO$>kCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCbsDDzCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCmsXXX", "CCCCCCCCCCCCCCCCCCCCCCCCCCCCCr$uCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCk4.OO.. .. XXOOXOXXbCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCkXXOX0CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCkooooooOo.+OO.5CCCCCCCCCCCw.ooXsCCCCCCCCCCCCCCCCCCsoO.osCCCCCCCCCCCCCCCCCCCCCCCCBooCCCCCCCCCCCCv-XX@SCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCm.X.bCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCy-**;**-XX9kCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC9oooouCCCCCCCCCCCCCVrXXXkCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCD..=CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCi*-X*****9vCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCB,ovCCCCCCCC;..oo.okCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCVg", "CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCs0CCCCCCCCCCCCCCCCz; .+ .oOXX#OOsCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCqO.oX9CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC0ooo+OoOo.oO+%VCCCCCCCCCCCC+XooqCCCCCCCCCCCCCCCCCCvoO.XbCCCCCCCCCCCCCCCCCCCCCCCCCBCCCCCCCCCCCCCCCCD...eCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCZ@.XkCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCy***X-*-3vCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC5X,CCCCCCCCCX.ooooO$CCCCCCCCCCCCCCCCCCCCCCCCCCCCCqzCCCCCCCCCCCCCCCCCCCCCC", "CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC#ObCCCCCCCCCCCCCCCCCk$ X...oOoOOokCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCkOOooXNCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC$ooooOooOooo+sCCCCCCCCCCCCCwooo>CCCCCCCCCCCCCCCCCCmoO..bCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCz@. wCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCs..;CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCy***=-O>kCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC9XzCCCCCCCCCwooooo..VCCCCCCCCCCCCCCCCMCCCCCCCCCCCXDCCCCCCCCnbCCCCCCCCCCCC", "CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC,oBCCCCCCCCCCCCCCCCCCCx@..XXXoOXovCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCm%ooo.uCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCVooooooooOo.o@NCCCCCCCCCCCCCzooOoNCCCCCCCCCCCCCCCCCC+X..mCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCno..rVCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC=X.dCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCi-****=kCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC9XvCCCCCCCCCCvu;oo.obCCCCCCCCCCCCCCCcXXqcCCCCCCCC7kCCCCCCCk.XqCCCCCCCCCCC", "CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCVNCCCCCVBCCCCCCCCCCCCCCCCCCCCCZsoOXXoOOOvCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCZ%Ooo.;VCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCbo+oooooooooOiCCCCCCCCCCCCCCCOoOOkCCCCCCCCCCCCCCCCCC+o..CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCZ< .,VCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCZX.CCCCCkX..X5VCCCCChXXOOnCCCCCCCCfXoXo@uACCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCz..,ZCCCCCCCC", "CCCCCCCCVwOX.qCCCCCCCCCCCCCBcssskbmCCCCCCCCCCCCZCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCV, .OoOX#.o#.. .bCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCqX...iBv%+OOvCCCCCCCCCCC0+O+%OooooCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCXXOOXXX-O0mCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCV*=sCCCCCCCCCCCCCCCCCCCCCCCr*=ZCCCCCk**@*=cCCCCCCCCCCCCCnu*@@qNCCCCCCCCCCCNf;oXXXOX.ooo. .OoOo..o.oo..oX..X..X.#O#bCCCCCCCCCCCCCCCCCCCCCCCn-oOXCCCCCC", "CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCSo+ o#.++oOOoooooO@oOO. ..#XX. oooooooooo.qlCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCs.,CCCCCCCCAbCCCCCCCCCCCCC$zCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCqX*@sCCCCCCCCCCCCb@o+$$.oXvCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC9-OXOX--**XXXXX....XO-OOOOOXXOO-XX,nCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCu+X.X#OOXO->NCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCAOO,cCCCCCCCCCCCcr#XXXXXXOX.XXX... .ooooo.o..oo.+o.O..oo..#ObCCCCCCCCCCCCCCCCCCCCCCn%XXoOCCCCCC", "CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCZb%o o+oooooOOOoo.o@OoOX...#OXXooooooo.ooo.oooCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCM9O--OOXOoXO##.OOOXX.XX.. . .XXo+oooooo.X....o++OOO#XcCCCCCCCCCCCCCCCCCCC,XXooo.ooCCCCCC", "CCCCCCCCCCCCCCko+$NCCCCCCso$CCCCCCboooo+oo+ oo%ooo +ooXXo...#XXoo..ooooooooo oo+.oo...# wACCCCCCCCCCCCCCCl..+NCCCCCCCCCsXbCCCCCCCCCCCCCCCCCCCCy=qOOOOCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC0o#@OO+OCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCNO-XXXO-----OOOOo.XXXOOOO--ycVCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC--@OrBCCCCCCCwoOO+kCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCAy=OO-OO*XOOOOOOXXXOXX....... .#oO+ooooooo...oo#O.#XOXXbCCCCCCCCCCCCCCCCCCCCvbvvvbvCCCCCCC", "CCCCCCCCCCCCCCb#O.7CCCCCCso#CCCCCCb+ + oooooOooo oOOXOo...XXXoo ooooooooOooo#o..oX.... .wZCCCCCCCCCCCCCq..fCCCCCCCCCCsobCCCCCCCCCCCCCCCCCCCC=sVOOXOCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCs#O@+O@OCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCM*-OXXOO-*-O-XO-o.XoXOOOo.o%bCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCwX>gCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCbCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCv.XXOOCCCCCCCCCCCCCCCCVyXoo#@OOOX=-OO--XX-O-OOXOXX@OO@X#OXOXXX.... o++ooooo.oo.o.....XXXXX##bCCCCCCwXXXXo.X#oXX@VCCCCCCCgXXhCCC", "CCCCCC9#XwCCCCCCCCCCCCmu#X.+CCCCCCbXo.o. ++oOOOOOooOOO..Xo .#.ooXXoOooooo%oo.oo.oOOOOooo. .ooXo#XOO.oo++O5nCCCCCCCCCCCCCCCCNCCCCqo$ZCCCCCCCCCCCCCCCCCCCCCj7CCCCCZfCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCrOo.oOMCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCfVCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCvX.O#OCCCCCCCCCCCCCCCmtOXXXXOO@oO@*O@OXXO@**XX-*XXOXO@OX@-o*OX.. .o#XXoXo#o...o o#oooooo.oObCCCCCbXXoX@yss,XXXowCCCCCCCNoX0CCC", "CCCCCCOOO*=-O..X@O+@OO@O@OOOXX@*OXXOOO*O-OXOOo@@OO#. . ...Xooooo.ooo......+ooXX#XvCCCmo@XnCCCCCCCCCC<.XnCCCCCCvoX7CC", "CCCCC9.jCCCCCCCCCCCCCCCC5+OsCCCCC$$+o o#oooo++%%o.oXOXX#..X.X.X.ooO%OOooooo.oOOOooOOOooXo..O+%+Oooo#+o &oX . .oX=nCCCCCCCCCCfOOfCCCCCCCCCCNCCCCCwXolCCCCCCCCCCCCCCCCCCCsXX.wCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCOOo5CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCm;OO$OvCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCwXXXsCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCgO>hk----X*X@*OOOOO..oOXX@OO%OO%OO-*OXO%OOOOO*XoOoOOoXXX....+o.ooOOo.....oo.oo..oo o#o+obCCCMooONCCCCCCCCCCCCZ@XXXXXXXXkCCC", "CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCs@#Xo.o o .ooo++Oo...Ooo#X..X.oX.oo%oO+Ooo+oo.#o+OXOOooo.X..ooo++ooo o+++o#. ..OOXXXO%OjCCCCCCCCCCCCCCCV5OfCCCCCC,O%CCCCCCCCCCCCCCCCCCCCC,..oyCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCv+OosCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCfOOOOzCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCr.X.=CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCVbCCCCCCCCCCCCCBO-O=X-*XXXX*OOOOOOXoOOOOOOOOOOX@@OO-XXO%%@OO-XXXOOXXXoXo. ++o.oOo.oo..o.oo..o...XXoX#o#vCCCC%XOsCCCCCCCCCCCCCkXXXXXOo;CCCC", "CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCZdOo o.o o+%OO..ooOOoo. .XXoo.o+%$+%+oo+o# o+o#oO.ooOo...+oO%+oo#oo#+$ooo .. OOXXXO%OozCCCCCCCCCCCCCV5OXbCCCCCV@%5CCCCCCCCCCCCCCCCCCCCCvo.oOwCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCjOOovCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCqOO@uCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCy....bCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCVCCCCCCCCCCCC=XowCCCCCCCCCCCrOO@kCCCCCCCCCCCCCZ=*oo+@oO==-XX-*XX*@O*OOOOXX#OXXO@$XXOOOO-OO%OOOOOOXOO+OOOoOXXo.. ..OOOooooooooo.oo.... ....o++XXooX;CCCCCCCCCX5CCCCCCCCCCCCCCCCCCC", "CCCCCCCCCCC;#sCCCN#O#.rzCCCCCCCCCCbo#+o#ooO%$OOOo..oX#OO..XXOO#.oO+O+o+oo+++o oooo.oo.....o ..#o%%ooooo+Oo.. OO#.oXOX..XOOOooOOX.*@O;CCCCCCCCCCC,oXoCCCCCCCCCCCCCCCCCCyO=%O$**OO-oOO*@O@@*@*X*OOO*O***OOX...OOooOOOXOOOOOXOOOO*O@OOOOoOoXXoX.. XXooOo.oOo.o..o#+++ oo.. ..O++obCCCCCCCCCCCCCCCCCCCCC00nCCCCCCCCCC", "CCCCCCC7o..7CCCCCCCCCCCCCCCCCCCCCCSoo +o+++o+$+oooX@#XX.##.oo+oooO+Oooo+oooO..oo...oOoo.O. ..oXOOooo+oooooo...XXXooXXOOoXXXXXooX. .Xo%XXXbCCCCCCCCCCCCCCCCCCCCCCbX#XXoCCCCCCCNsulCCCi#..oOOOo...oOoooOOwCCCCCCCCCCCCCCCCCCCCCCCCCC9OOOCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCV,XXXOo@sCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCi%O=O@--XXOXXoXXXOouCCCCfOO*X.CCCCCCCCCCwXookCCCCCCCCCCCCCCCCCNOO%%O%O$OOOXOOO@@@*=@*O*OX*O-X-XOOXX#O@oooOOXXOOOOXO--XX-XOOOOOXX#X.X.. oo++OOOOoooooo.++oo.o o..#oovCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC", "CCCCCCCkooo0CCCCCCCCCCCCCCCCCCCCCCS oo+o+++o+++%ooooXoX.o#o.ooOo..OOOooo#o++oo.o.ooooooo.... .oo+Ooo ++ooooo...X.XX.XXXXooXXoXXXX. ..oo%XoX0CCCCCCCCCCCCCCCCCCCCCC5XXo..DvmCCCCCCCCCCCnOo.o#O+o...oOOooOoowCCCCCCCCCCCCCCCCCCCCCCCCC:OXOCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCZ5XOoo@BCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCwO%=%O@--*XOoXoXoXOOnCCCCuOOXXXCCCCCCCCCCXoowCCCCCCCCCCCCCCCCCCwO%OOO%%$%-OO@O**@=*@OX**XOXX---O*XXXOooOoO@OXXXoOOOXXX-OOX*OXOOXOOO.. .o# oO+Ooo+Xooooo .o ooooo. .Xoo#XvCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC", "CCCCCCCCwoo7CCCCCCCCCCCCCCCCCCCCCCSo +o+&#+++$+%Xoooooo#....ooXO .o++ooo..o+o....oo.oOo..o. ...#$OOo oo+oo .XO..X.XXXOXXXooX.... ...OXXOOBCCCCCCCCCCCCCCCCCCCCNXXo...XXXOsCCCCCCCCCC5ooo#+O+. .o+OoO+oOOwCCCCCCCCCCCCCCCCCCCCCCCCXXOOCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCV@oXo0CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCiOO%OOO@-XXXoXooooXX=CCCCC9OO*XXCCCCCCCCCfooonCCCCCCCCCCCCCCCCCBoO%OO%%OOOXoXXOO@@OOOO-****XOOX*OOO*XXo@OOOXOXXOo@*XOOOO*OOOOOOOO@@OXX##&+# oooo#OOooo... o.ooooooooooO#obCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC", "CCCCCCCCC#o5CCCCCCCCCCCCCCCCCCCCCCS oo+ o+oo+++%ooooOooO.X.oXo#o..oOOoooooooo. +oooooOo..oO....+++++oo%++o....o@XoXXo%OXX.oXXoXooo ....OXoOOwCCCCCCCCCCCCCCCCCCCCbXoO...oooo7CCCCCCCCCCfooX@+O%O..oOooOOoXOOyCCCCCCCCCCCCCCCCCCCCCCCXOO=CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCnCCCvnCCCCCCCCCCb9XXXXoXXoX#.kCCCCCCCCCCCC0..X...o.O..Oo.OoooooOOOOOOOXOiCCCCCCCCC9@OOMCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCpXXXXOOOOOXX..#@@--OOO=OOOOOoX7CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC5OOo.oOO$+O+@@@X..++@OOO*O=@*O*OO@OO@O@OX...OXOOXO-XX-O*OOXXXXOXOOOO%ooXOoO+O... .ooooooOoooo.ooo .. #oooo++XoovCCCCCCCCCCCCCCCCCCCCCCsXXXsCCCCCCC", "CCCCCCCCCCCCCCk@CCCCCCCCCCCCCCCCCno. ..#o ..oOOo..ooo....o..oOX.oo+O+oooOOo...OOooooooo+oo.ooo+oo++oo. oo. ..OXXXOOX..oOo..XXo.....XOOOOXooXo@OOnCCCCCCCCCCCCCCCCNfu97995XoX7CCCCCCCCCCCCsoX..o.oOo..Oo..OOoooOOOXOOooO%yCCCCCCCC9@@*MCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCwXXOX-OOOOOX...O@=OOOO%=-@O-XXXsCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCm--OoXOOO+OOOo@@X.XoOOOOO*@@@OOXO*XOOO@OOX. #oX%OOOX-XXOOOO-XOXXOOOXO%XXX%#.O.. ..#ooOOooo+oo..oooooooooo.o#@#o#bCCCCCCCCCCCCCCCCCCCCCCsoXXsCCCCCCC", "CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC<. . .o ooooOo...oXo. o...XXooo o%+OOooooo.. +oooooooooo.. oo+OoO. o ooo .oo.o.XXOOXXXXOo..XXoX ....ooOOooOoo$%XuCCCCCCCCCCCCCCCCCCCCCCCCN,.#vCCCCCCCCCCCvoo....#.o..oo..ooOooXXoOOoOOO%OwCCCCCCC7+OOMCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCyXOX-X-*-OOOX..#OO@OOOO@@OOOOXXohCCCCCCCCCCCCCCCCCCCCCCCCCVkssCCCCCCCCCCCu=OOXXOOOOOX$O@-XX.O+O@O*=4@@OOX*@*@OOOoo. .ooOOOO--XOOOOOOOOXOXOOOOOOXoXO.o.O....+oOOooOO+o.oooooo o o.o.oO@#oovCCCCCCCCCCCCCCCCCCCCCCsXoXsCCCCCCC", "CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCD. o. o ooOo....X#.....oXooo.oooOOOoooo.. .Ooo..ooo..oo..oo+OoO.oo o o. . o..oOOXXoXOoo.XoX. ...XXXOOooooo%%X:CCCCCCCCCCCCCCCCCCCCCCCCCl.O,CCCCCCCCCCCZooO ..o+OO.oO..OOoooOoooOooOOOOowCCCCCC,OO-vCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCyOOOXXXX-OO@OX. .OO==@@O@@@@O-XXo;99905OOsCCCCCCCCCCCCCCCCw...9CCCCCCCCCCC6OOOoX#+%+OO@@OOXXXOooOO@@=*O*OX*OOO#XXXXX..oOOO@*OX-O-@OOOOX*XXOOO@@OOooOo.. . .OOOOOoooo+ooooooooo.o. ..o++oXovCCCCCCCCCCCCCCCCCCCCCCsOOXsCCCCCCC", "CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCb. ..oo ooo ooo. ..O......ooOo .oOOOOooooo. .oOooooo...o.. o#+ooo.o........ . ..XOOoXooo...X.....XXOXOOXXooO$%OONCCCCCCCCCCCCCCCCCCCCCCCCC&oofCCCCCCCCCCC5O...#+oOo.Oo.oOooooOooXXo.OO%OOowCCCCCXoo-NCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCpX-XXXOX--OO*OX X@@=O=@O@=@@OOXXoXXXX+@OyVCCCCCCCCCCCCCCvioX..dCCCCCCCCCCN%%=OooOO+OOo@OOOX..XX#OOOO@*@*XX-O+XXXOXX.. oOO$OOOX--OOOXO-X@OOOO*=@OOOoXOO.....oOXOXXoooooooooooo........+@#.XbCCCCCCCCCCCCCCCCCCCCCCs@oXsCCCCCCC", "CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCb..... o o.ooo............ooo. o.OOOooooooO. OOO+.ooo..oO.oo++ooo.o..o#o .. ....XXOoXoo....X......XOOXOXXoOO%%OOfCCCCCCCCCCCCCCCCCCCCCCCCCs.X@ACCCCCCCCCCwOO.o.ooOo.oOooooooooOooOXoOOOOooOwCCCCXOOOCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCyXXXXXXXOX-OXXOX..#oO%=O-O$==OO-OX@oOO,q0sCCCCCCCCCCCCCCCCzXX..7VCCCCCCCCCCk%OOOoooOOOOooOOOX....O@*O@O@@***XX+XXXOOO#..XOOOO-OXXOOO*@@*O@@O*O@@oOXXXXX. ..#OoXOOXooooo oo++oo..#o...++&OoXbCCCCCCCCCCCCCCCCCCCCCCsOOXsCCCCCCC", "CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCv..# . o o..oo. ..#oo......o...oOooOoooo.....OOOo..o..ooo.oo+++Oo.ooo ... . ..X.XoXXXXX.. XXX. ...oOOXXXOOOOO%oXqCCCCCCCCCCCCCCCCCCCCCCCCCBXXX5CCCCCCCCCCxo..o .oOo.OOoooOoo.ooooOOOOOOOoooOpCCCXoO-CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCy*X--XX*XX--O-OXX..XoO%OOOOO@OXOOXXsCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCr%OOooOoOoo+OoOOOO...XX@@@*@*@*-XXO@oXXOOO#. XXO%OOOO-XO-@@*@@*OOOO+oOOXOXX#...#.#XOXOOXoo+ oo o#ooo..o.o...+@#oobCCCCCCCCCCCCCCCCCCCCCCsXoXbCCCCCCC", "CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCb.....o o . ooo...o.o.... .oo. O++OOOooOooo.oo+oo..o.XXoo.o+&&oOo.o oo... o ...X.XOOXXOXXX..XX.....oOXXXooOO%%OXoXCCCCCCCCCCCCCCCCCCCCCCCCCC<.X.dCCCCCCCCCvO.....ooo.OOooOOOoooooOOOooOOOOOOOOwCVoOOOCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCyO-XXXXXX*X*XOOX#..XX@O-=OO---OX-OXXvCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC:%%OOoOoOOOO@XXOOO..XXXoO@@*@*#*-XO*@#.X.OX. #XOOXOOXXXOO-*O@OOOOoOO@OOXOOXo. .###OXOXOoooo+ooooooooo...oo..#$#oXbCCCCCCCCCCCCCCCCCCCCCVwXXXvCCCCCCC", "CCCCCCCskCCCCCCCCCCCCCCCCCCCCCCCCCS+o oo.. ...Xo..............Xo.o+OOoooooooo..+Ooooooooo....+$&ooo.. oo#. . .....OXOXOXXoo..oo. ..XoXXXXXXXOOOOOXOvCCCCCCCCCCCCCCCCCCCCCCCCCf.o #NCCCCCCCCC..o...oo..OOooo+ooooOOOoOoOoOoXOOOOXwfXOO:CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCyXO-XXOXX-X-X-XXOXX..Xo$--OOO--OO-OXXZCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCm**O-OooO%+$o+OoOOXX.X.XO@@@*@**XOXO@+..XXXX .+OOOOOOXOOOX--XOOOOOOO@%OOXXXooX .++oOOOOOo.oo.ooO.o+ooo..oo oo ++o.vCCCCCCCCCCCCCvXXoOXXoOXXOXvCCCCCCC", "CCCCCCbO$CCCCCCCCCCCCCCCCCCCCCCCCCSooo . ..XXXo....X.XX ...Xoooo++Ooooooooo.ooOooooooOo.. oOo%o+o.. ..X...........XXXOXXoo..oX...XooX.XXXOX----OOXsCCCCCCCCCCCCCCCCCCCCCCCCCAXo .7CCCCCCCCC5oO...oOo.O%oooooo.oOoooOo+.oo.OO%OXoXXXO9CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCyO-OO-OXXXXXOX--XOXX .XX%OO-OOOXOXX-O:CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCf**OOOoo%%O%oooOOOX..XXOXO*O@*O*-OXOooXXXXX...oXOOOOOOOOO-XX-OOOOOooo%OOOOXoo...++ooOOOXo.oOoo++..+oooo. ooo +++o.bCCCCCCCCCCCCVO=mCCCCCCCCCCCCCCCCCCC=X@@,@*-OOO.ooooOOoOXOOXX..XXOXOOO**X*X-XX@oOXooo. .OOOOOOoO*Oo@@OO+OOOoOOOO%OOOXOX... .X.X ooooo o.o..o#ooo ooooo+Oo.XvCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC", "CCCCCCCCV,#X.7CCCCCCCCCCCCCCCCCCCCbo. .oo.o .+++X .X.X......XXXXo.oooooooooooooo.+oo.o..X.o..oo+oo%o.ooo. ......XOOOOOOOOOXX. ..oXXoOOO--OO-OOOOOXzCCCCCCCCCCCCCCCCuXXOOXXoo.. ...aCCCCCCCsoo..oooOO+OoooOO.XXoOOOOO+OOO.ooOOXXoOOO=OOOwCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCwOOXXOOOXOOOOOXO$OoXOXXO--OO..oOOO-OO@O*=-OOXsCCCCCCCCCCCCr%O=hCCCCCCCCCCCCCCCCCCOXO@O**-OOO.ooO..OoOoXOXXX.XOXOO@@O**-XXXOOOXXXXX. +OooXOOOOOX@@*@OO@ooOOOO$OOOOXX... ...ooooo oo.o..##oo.. . oo&#XX.bCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC", "CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCvo. o.oooo.o+o#..X.... ..XOOX..oOoooooo%ooo#o+o+oo.OOXo...o.OOoOoooo... ....XXX-XOO=OOOOOO. ..ooOoOOOO-OOOOO.oOXsCCCCCCCCCCCCCCCCCbw=OoX@oo. @8jCCCCCCCCko..ooooOOoooooo%.XXoXOO+o%OOOooOOOXoooO-OO@$owCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCyoOXOX%OOXOOOOXXOOOXXXXXO--OX..XOOOOOOoO-=-OXXsCCCCCCCCCCCCN6OXXjCCCCCCCCCCCCCCCCCbbcu,@-O-OOooOOoOOOOXXOXXX.OOOOOOOOX--*X-XXXXXOXX. .OOOOOXOOOXX@*@OOOooOOOOOOOOOOXo.. ..... .o o oo . +#ooo .ooo +Oo#obCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC", "CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCbo. ooo..oo#Xo.....X... ...oo..o.oOooOooo%ooo##+OoooXXoXX..ooOooOO+O.oo ...X..X#XOO@XXOOOO. ..XXXoOOO-O-XOOOoOOoqCCCCCCCCCCCCCCCCCCCCbfssssbACCCCCCCCCCCboooooooOOoooooOo.oooo+O+OO#OOoooOoXXoXOOOOO%oXyCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCwOXOOOO%OOXXOO*XXX@XOXXXOO--OX. XoOO-OOOO-@-OXXvCCCCCCCCCCCCCV9OX.kCCCCCCCCCCCCCCCCCCCCy*OO-XXo.OOooOOoXOOOOX.XO-OXOO*X*-XOOXXXooooX .#OOOOXOXOXO@@@XOOXOOOOOOOOOOooo... ....o. . +o.oo +#+oo . ... ++..+vCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC", "CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCbo. o#..oooOooX...XX#. . XoXoXoo..oooo+o%ooooooO.oOXXXXXX..oo+oo+OOOooo.. .o.....XXXOXOOXXOOO...oOoXXO-OOO-XO%OoOOO9CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCboooooooOOooooOOO.XoXOO%+OO#OOoooOXXXoXO-OXOOXOXiCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCwX%OOOXOOOOXXO-OXX#O-OXOXO-**OX..#XOO*OOOOOOOOOXvCCCCCnvNCCCCCCV6o.XnCCCCCCCCCCCCCCCCCCCq*O-OOX..oOOoOOXOOXXOX.XOXO-XXX*X*XOOXOXXoXXX. .@OoOOXXXXXOO**OOXXo@OO@OOOO@OoOo.....ooo . + oo .o oooo . . .+.#...obCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC", "CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCb+ooo+.+OooooXX..X..... ...oooo+oooooooOooo.ooOoooOooX.XX ..+Oo+%O+oO.+. ..o...##XXOXO-OOXXX....ooXXO-O-O-OOO%OOOO-CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCoo ooOooOOooO++OooXoOOOOOO+OOooOOXXXOXOOXOXOOOO@yCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCwXOOX%OOO-O-XXO**XXXOOOOXXO=*-OO..XOO**oO@-OXOO-OZCCCCNOXOcCCCCCCV@XX%NCCCCCCCCCCCCCCCCCC>O*OOOX..OOOoOOooOXXX..XXOOXX*OO*-XOXOOXX.XX#. .O%OXXOOOOXO-XOOOXOOO@O*OOoOOOOo.. #.#..o.. <+ .ooooooo o . o.#+o.o.bCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC", "CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCb+o o .oo...X.X .X.... ....oo.+ooooooOoooo.+oOo.oOoXXXX....oOO+++%o.oo o+o.X.XXXXX.OOOXOXO....ooOXOOOXO%OOOOOOOOXCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCoooooOooO%OoO+OOooXOOOO%OooXXooOOOXooXXOOOoOXO=-OyCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCwoOXXO%OOOOOOXXO-*XXX*XOOOOO=*-OO..#OOO@O*@OOXX@OOCCCCCqXX-9CCCCCCCmXXo,CCCCCCCCCCCCCCCCCCO*O-*OX..oOOOXOXOOOXX..XXOXXX--**--XXoXXXXXXX. oOOXOXXOOOXOX-X-OOOXOOoO@OooXooo... .. .o..#&+o... o++oo .. .o+o.#.vCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC", "CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCS+o..o##+oo.oo+. ...X . ..Xooo.oooooOoOO.oo.+OOoooo.ooX......ooo+o+.o#o# o.OO...XoOOXXoOXXXOOX...ooOX%%OXOOOOXo.OOOOmCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC$o.oooOOOOOo%o%ooooooOO+OO.OOooooOXooXOOOOXXXX==O%yVCCCCCCCCCCCCCCCCCCCCCCCCCCCr.oXOOO=OOX@OOXXXO-OOX-OOOOO*=O-OO. .oOOOO@$-XXOOOOCCCCzXoXO-fCCCCCCCDXoOsCCCCCCCCCCCCCCCCN-OOO-O...oO@OOOOOOOooX.XooXOO-O*@*XXX*XOXXXXX. .XOXOXOOOOX*@O-X*XXXOOOOOOO+ooooX.. ...#o o++ oo...ooo. o o.++#+ovCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC", "CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCv.o.o oo#oooo.o.Oo.X. ...oooo#oO+oooooOOOo.+oOoooo...XoX .oOoo.Oo+..o++# o%O.#XXOOOXXoXXXXOO....oXOOOOOXXOOOOooOOOOvCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC9o.o+ooOO%oo%%+ooooOOOO%OOoOOoooOXOooXXO*XX.XXOOOOoeCCCCCCCCCCCCCCCCCCCCCCCCCCw..XoXo$--O-@-OXXXO-XOXOOOOoX==--OX. XXOXO-@*-OoO-O6CCCCsXXXO--fCCCCCCC:OX$NCCCCCCCCCCCCCCCv--OOOOX..ooXOOOOOOOXoX.XXOOO-O=*@O-XX*XOXXX.X...#OXOOOOOOOOO*X-O*X-OOOOOo@Oooo#o.. .. #oooo + o ... .o... o..+oo#ovCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC", "CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCv++.+o.oooooOo......oX. ..oooooooooooooOOoo.+.Ooooo.o.X.X ..OOoo+O+Oo.+.o #OOXXXXXOOXXXXoXXOOX..XoXOO%OoXOOOOOo.OOOOkCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCqo.oooooOOoooo%+oooOOOO%Ooo%OooO%oOo.XO-OXXOXOOOOo+oeCCCCCCCCCCCCCCCCCCCCCCCCwX..OOOOO-%O**-OXXXOXXOO-OOOOX*==OOX..XoXXOOO@OXXOOO6CCCCsXXXXO--MCCCCCCvOXXwCCCCCCCCCCCCCCCv-*@-OXX.#XXXOOOOOOOOXXX..OOOOO%@*@*XXXXOX.XXX..oXOXO@oOOOXOOO**OOXXOO*OOOoOoOoo.. # # o ooo .o. ..o. ... .#++.+obCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC", "CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCbO.#.o.ooooO+OO..XoXoX.. .oooo.oooooooOoooo.Oooooo..ooo...X..#ooOO+Ooo+. .+%OX#XXXOOX.oOXXXOX. ..XXOO-OoOO%OOOXOOOOOsCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC9oooooooO%oo%oo%ooOoOOOOOOoO%oooOoo...-XOXXOXOO-OoooowCCCCCCCCCCCCCCCCCCCCCCwoX..@%O@--%-***-XXXX-OOXO-OXOX*=-OXX.XooOX%O%@-OXOOO9CCCCDXXO-X-OqCCCCCCC9OX$CCCCCCCCCCCCCCCgOO*OOXX.OXXOOOOOOOOOOOXooO.OOO%OO*OXXX*ooXXXX..oOOXOO@XOoOO@OOOOXOOOO@*OOoXXXoo. ...#.#oo o o o.....o#oo o .++.+OvCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC", "CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCM@X...oooooO+Oo#X...XX. XX.oXoooOoooooooo..OOooo.o.ooo...+.oOOoOo+o.+o. .XoO.#XOOOXo.OooXXXX. ..XX%O%OOOOOO%OOOOOOOsCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCeOo..ooo%%oooo+$ooooOOoOooo%ooo+Ooo...OOOXo#XX-OXoooo wCCCCCCCCCCCCCCCCCCCCwoooo.@@o==-%=O**-XXXXOOOOO-OOOO%O=OOX .ooOO%OO--OoOO-9CCCCcXXO-O-OpCCCCCCCbXXovCCCCCCCCCCCCCCsO-*OOooXoOOOOOOOOOOOOX.ooOOOOOOX**--XXXOXXXXX..oXOoOXOOOXO$+$@@OOO@OOO*-ooOOXXo... ...#oo ooo oo oo+oo. ....+@+oo#bCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC", "CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCb@#.o oO+ooOOO#.....XX......oo.oooooooO..oo...ooooo.XXO....o.+OoOo+..+oo .oX.OX-OOoX.XooXXXXX ..oXOOO%OOO%OOOO.OOOOuCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCdooooOoOO$oo+o%+ooooOOOoooOO%oOOoOoooooOX.XXXXOOOooooo.wCCCCCCCCCCCCCCCCCCwoooooo%*o@=O-4-*-OXX--OOX---OXOOOO=OOX..OOOOOOXOOOOOXXuCCCCNXOOO-O-gCCCCCCCC9XXvCCCCCCCCCCCCCCgO=O%O@o.oOOO%OOOOOOOXX.ooOoOOO%-X**XX@OXXXX....oooOOoOOOXOO+@=@O*OOO@@*OOOOOoo+X.. ... oooo oo oooo o#. . #.++o++ObCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC", "CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCb@...#o++ooOOOX....X... ....XXoooooooo.o.o.o+Ooo.O.ooXOOO.oo.++o%o..o+oo XXX.ooO-XXX.oXOo.X.. ..XoOXO-OOO%OOXooOOOO0CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCsooooOooO%ooooooooOoO%OoooO%OoooOOoooooXO..oXOOOOOOo++oorCCCCCCCCCCCCCCCCeOoOOoo.OOo@-*O;**=OXX*XO*OO-OOOOOOO*-OX..XO+@OOXOO-OXO-sCCCCCuO19iggZCCCCCCCCCnvCCCCCCCCCCCCCCCw---O%Oo..OOOOOOOO@OXoo.ooooOOOOX-*XX**XOXX..X..oXXOOoOOOOOO%%%@*@*OO**@*OXOOoo+...... .ooo o oooo# o# .. ..+&##@OMCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC", "CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCb+.#o#oooo+oOoX.....XX......XXo.o+ooooOoo+oooooo.o.oXOO+o..oo%OO$o.ooo+#. oOO.#oOOXXX.oXooXo... .XXXX%OOOO%%OXooooOO0CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCso.#ooooOO+ooooooOOOoOOOO+oooo%%oOoooooOOX.XXX%-OOooooo..wCCCCCCCCCCCCCCiOoOOOooo@$@O-@-=O**OXXOXOOOOO-XOOOO---OX..#XOOOOXXX-OOOXsCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC0-OOOOoX..OOOOXXOX@OXOoXXXOo@O-O-X-X*#*XXXX..X..XoXXO@@OOO-OO%OO*OOOOOOO*OXOOoOoX.......oo o oo ooo o.. .#o++@oOObCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC", "CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCv+#oo#ooooooooX.....X.. ..XoooooO....Oo.Oo.+Ooo.OoXOOOOOo.Oo+%O%+oo..@+ .o@O@X-OX.X..XXoooX. .X..oo-OOOX--*OooXOoO9CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCs..#+O.OOO%$oooOoOoooOOO.+OOOoooOOXooOXOOX.o.oO%OXoooO.ooowCCCCCCCCCCCCi@OOOOoOOoO*@O---=OO-XXXXXXOOO--XXOOOO*OXX..XOO-%OXXOOOOOOsCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC0O-OO-XX.#O.OOoXOOOOOOOXXXX@O--O*XX*X*XXXXX.XX..OOXX*#O@O@*@O**@*OOXOOO*@OXOXXOO.... . .oo . . .o.o.o . . ..o#+++ooObCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC", "CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCv+o # + ooooo.. X..X......ooo..oo..oOO..o...Ooo.O#OoXOXo...o%%O%%o. oO# . .o@.OXOOoXX..oXooXX......oX-OO-OOO-ooXXOOO9CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCs..+OOOOOo+$o++ooOoooOOOo+.OOooOOOXooXX-OXXoXXO-Xo.XooOo XXwCCCCCCCCCCrOO@O%Oo.ooOO@OO*X*=*-OXXXOX-OXX--XOX**=OoX.Xoo@OO-XXXOOOOosCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC0--O-OOX..OX%OXXoXoOOOOXXXXOOOOO*X*X*X*X-XXXXX..XOXXX@*O*@=*@OO**O*XOOOOOOOXoo#X.... ... .o .... ...... . ..#o+&#ooObCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC", "CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCboo oo+oooooooX..X..XX......o...ooo.oooOooo.O+OO.OoooXXoX.oOO$%%%%+ ++o ...Xo.OO*OOoX..XXo.X.. . ..#XXOOOOOOOOo.ooOO5CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCs. o+O.XO++$++Oo.OoOOOOoO$#O+oooOXX..OO%XX%ooXO@Ooo+Oooo.ooOwCCCCCCCCy.**%OOoOOooOO*O---O=OOXX.X---XXX-XXO-@$=@OX..Xo@O-OOOXXOOOOsCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC9OO--OOoX#+XOOXoooXOOOXXoOOOOOO-**X*XXXXXXXXXO...OXX**O@O@*OOOOOOOXX@OXOOOOXo.oo...... . . . .oo.. . . ..o##+o#oObCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC", "CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCSooo..o ooooOo...X.......oo.oo..o...ooO+o.....oO..oOoXXoo.o+O$Oooooooooo ..XX@OOXXXX..XooXo... ...XXX-OXX--OooooOOO0CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCs....O.oO%o%oOoo.ooOOOOoOOO+O.XOXXXXooO-OoOXXOO*OOOOo.ooo.oXXwCCCCCCw.O@@O%OOOOooOO=OO-O-*OOX.XXOXO--*--X-O%@=*@...oO*OOOOOXXOOOOsCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC3-OOOOOXXOoo$OXXoOOOXOXXXOOOOOO-*X*@**XX-XXXXOX..XXX*O*OOOOXOO*O-XOX@OOOO%OXoXo.X..#.... o o . ....... ..o.#+oo#@bCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC", "CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCv#. ... .ooOOo..#X.XX....oX..o.o.o.ooo+.....OOo..oOoXXXXoX.O&%O+.o.o ... ...XXOXOXXooXXXXoooXX. .ooOXOOOOXO--OXXXOOO5CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCs. .ooXo#+oOoOOOoooXOOOo++OOoXoXOOOXXOX-OXOX.OO%Oooo..oo..XOOXwCCCCiXoXO-%OXOO%XoOOOXO-OO*OOXXXXOO-X*---XO-===@oX .oo@OO-OXXXO%%osCCCCCCCCCCCCvNCCCCCCCzscNCCCCCCCCCCCCCC0OOOO-OX..oO@oXOXOXOXOXXXOOOOOOOO@*OXX-XOXXXXoX..XXXOO---OOOOOOoXXOOOOO@o@OXoX#XXXXX.#... ... ... . . . . .X#.#+O#O$bCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC", "CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCVvSbbvbvvvvvvvbvcbcbbbcbcbvvvvSvbbbvvvvvvvbbbbvvvvbbbvvvvvbbbMvvvSSSbSbbbvcvvbbbvMvbvvbbbvvvvvvvbbvvvvvvvvbvvvvbbvvvvnCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCNbvbvvvbbvvvvvbvbvvvvvvvbvvbSvvbvvvvvvvbvvvvvvvMvvbvvvvvvvvvvbvVCCVbbbbbbvvbvvvbvvvvvMMMbMvMcbbvbMcMbcMMcbvvMMMbvvbbbMvvvvbbbbbbbNCCCCCCCCCCCf-=cCCCCCCy5XXsCCCCCCCCCCCCCmvMvvvvvMc5oOXX-OoOOOwvvbbbbbbMvMMMbcMMcvvvvMbbbSbvvvyOX:vvvcbMMbbbbbbbbbbMvvvvbcMbScScbSbSSbSbSbbvSvvcbvvSbvbbbbMbbMVCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC", "CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC9OO9CCCCCCCCCbbCCCCCCCCCCCCCCCCCCCCCCCC$OoXOXOOXfCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCsOOyCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC", "CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCkO=fCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCkOOOOOOOvCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCs-@cCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC", "XO+Oo...oo5svCCCCCCvs,o. ....XX9CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCbnCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCv9XX.X-:qcCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCqOOOXXsCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCsO=VCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCo#O@Ooo##X5sbCCCCCCbs5@OooOooXOO", "OOooo..OwmCCCCCCCCCCCCn0... .#o9CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC+.@wCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCq0zCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCVuXooooO-O--kCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCV=OXOwCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCso;CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCoX#$OOOXrmCCCCCCCCCCCCmro@OooOOo", ".O+OOo&vCCCCCCCCCCCCCCCCv<..#XX9CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC#. ,CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCClOOsCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCkCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCsX0CCCCCCCCCCCCCCCCCCCCCCCCCCCCcu.. .o..,BCCCCCCCCCCCCCCCCCCCCCCCCC###OOXOOsCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCBbbbvvbCCCCCCCCCCCCCCCCCCCCCCCCCCCqoXXo..9rsgsgrX@NCCCCCCCCCCCCCCCCCCCCCCCCCCCV@XVCCCCCCCCCCCCCCCCCCCCCCCCZ;OO", "oovCCCCCCCCCCCCCCCCCCCCCCCCCCvX9CCCCCCCCCCCCCCCCCCCC;XXX....oowBCCCCCCCCCCCCCCCCCbmCCCCCCCCCCCCCCCCCCCCCCs. #.$CCCCCCCCCCCCCCCCCCCCnoXOOO%O9CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCZi@OoomCCCvsw$.oXXsCCCCCCCCCCCCCCCCCCZVCCCCCCCCC5. olCCCCCCCCCCnoOXXoNCCCCCCCCCCCCCCCCCCb7OrnCCCCCCCCCCCCCCCCCCCCCZr+ooXCCCCCCCCCCCCCCCCV$o..$VCCCCCCCCCCCcXOXuCCCCCCCCCnOXOX+wZCCCCCCCV=XOOoX.oOOXdCCCCCCCCCCCCCCCCCCCCCCCCzooOsCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCnOOOO2ZCCCCCCCCCCCCVsX Osgsr-O=-9kVCCCCCCCCCCCCCCb..sCCCCCCCCCBOOoo$ww#+rCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC", "bCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCVbssu%OOOOoo.DCCCCCCCCCCCCO.X#zCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCm:OOO%OO-cCCCCCCCCCCCCCCzXXXqCCCCCCCCV ..osCCCCCCCCuoXOOXoiCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCZs@oOoo5CCCCCCCCCCCCCCCCCm$...wCCCCCCCCCCCC-OXXnCCCCCCCCCqOXX5CCCCCCCCCbOXXoX.XXOXXqCCCCCCCCCCCCCCCCCCCCCCCCvX.OsCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCsXO--0CCCCCCCCCCCCCCd.XOOOOOX=-OXO;0900kCCCCCCCCN@XZCCCCCCCCCV$oO#O#O@+wCCCCCCCCCCCCCCCCCCCCCCbCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCv", "DCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCbCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCsOOXoooXDCCCCCCCCCCCCu..wCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCV$XX>svvvCCCCCCCCCCCCCCCCCrXXofCCCCCCCu ..#sCCCCCCClOo.oOX5NCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCAd=#Oo+o$zCCCCCCCCCCCCCCCCCCN5.oXyVCCCCCCCCCC9OXOqCCCCCCCCCCg,$zCCCCCCCCCvOXOX%779XXXsCCCCCCCCCCCCCCCCCCCCCCCCv.oOsCCCCCCCCCCCChqOsVCCCCCCCCCCCCCCC:OO--uCCCCCCCCCCCCCC;XOXO-OO*OXXOO@O@X5CCCCCCCCCCBCCCCCCCCCCCCCng8oOO+sCCCCCCCCCCCCCCCCCCCCCCsCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCs", "CCNX,BCCCCCCCCCCCCCCCCCCCCCCVuCkCCC;o.... # #+OOOOOOooOoOo...OooOoooXoOOOoooOooXCCCCVusCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCuOOOXO*-OOOXXX-----*XX*---XX. .OO%--OO%OOXOXXXXOXoXXXXOX****-XX.;CCCjCuVCCCCCCCCCCCCCCCCCCCCCCN=XBCChhCCCCCCCCCCCu9bCCCCCvVCz0sbCCs@OOO*XOXX*OO.XO**XO*OOO*@@*tBCCCCCCCCCCCCCCCCCCCzXsCCCCCroO+ooOOO5VCCCmA7sCCCeo@+O+oX+O+X.#oOO*@O+#eCCZfCdkCCCCCbbbbCC", "CCvbvvCCVCCCnZCsZCCw ..XX....XXXX...... rCCVsCVnCCCZ,oX.Xo...XoOo...oOOCCCCCCd..oOOooooX.kCCCZCCCVg0CCCCCCCCCCCCCCCCCCCcXqCm$o=nCBssgq099XXX*OXXOOOO*O*O@*@@DZCCCCCCCCCCCCCCCCCCCCCnCCCCCC&OoOOOoO5ZCCCmZCsVCCe#+@+@@OXooOOXo@O@@@+XwCCZsCVmCCCCCCbMMbCC", "CCcbvvCC@BCCuXXXXOOXXXXOoo.oohCCNrVkCCCCCs.XoOOXXooorCCCCCCCCCCCCCCCCCCCCCCCCCN-XOXO-OOX..XXX-O-O%OOOX-XXXXX...XNCCcCbNCCq..XXXOoooX.XXXXovCCZCCCCCCCCCCCCCCCCCCCCCCCCCCCCc+XXoCCsX-XX*@*>CCg@=0CCCCCCCCCCCCCCCCCCCCn708%CC=OOOOOzCCCCCCCCmVf5CCCwO+OOOooO++@ooo@+O#oOoyCCVfCNkCCCZ5OOOOOOXOoXOOXX9CCbbbvCC", "CCcdfvCC.O..... .. . .oO#0CCBsDACC-XXX--XOX.XoooO0CCNssNCCOOOO-OOOXwCCCCCCCCVpX-XO--OX..XoXOOOOOOOO-OOXXXX....wCCC,6fCCm..XoXXXoXXXXX.oX=CCCwkCCgX-XX.....XXXXoXODCCVsquCCCCCC:X-O-OXXXCCCCCCCCCCCCCCCCCCCCCCvO*OyCCCCCCCCCCCCCCCCCCCs@okCCCCO-X.XXXXo . ...ACCkCgCCCCb.X ...XX. .XXOOOO9CCvffbCCOOOOXoOOo..o.X%9CCvhgvCCCCrXuCCCCCCCcrXXOOOX@CCCCCCCCCC@XOOOOOOOO..*kCCNvChCChXXOXXXX*-X..XooouCCCCVbCCCCV59VCClO#,VCCCkwCCCCCwXXO@*OOOOO@$@@OoO+OO+yCCVq$mCCCCV5X#XX.oooOOooXXOXOXOOOOOXXcCCCCCCCCCCCCvoXbCC", "CCbfdvCCXXoX#mCCCCCCCCCCA . . nCCCCCu77kCCCCCCCCCCjfCfVCCwXOXX..XXo...ooOOOOOOowCCCs,BmCCCCCCCCCCC@O..o+++. VCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCmCCCCCnXOO@cCCCgXBCCCCCCkfCfVCCyXXOO@@@O-@O#@O@OO@+XOyCCCw5AmCCCZ5.+Oo.oXXXooOXXOOXOOOOVCCCCCCCCCCCCCnspugmCCCCCCCCCCCCCCCCCCCCCCmVfrCCCwOOOOX%vCCCCCCCCCnNVcCCso.OXoXOXXOXX-XX-gCCCCCnCCCCCCCCVwrCCCCCVsnCCCCCCCCCCCCCVXOOumCCCV=OOOOOXX.OCCCCCCCCCCCCcVCVVCCu-OoO%OO...oo,VCCCCCCmuCCV5kCCCCCCuucVCCCCCCCCCCCCCCkoo%9wssnCCCCCCCB9X.oogNCCCCS<%%++%OOOOO0CCCCCCCC", "CCVcbVCC..oo..........ooXo...5CCCCCCCCCb. o#sCCCCCCCCCCCf.Xo.nCCf@XOooOX++ooXwCCCC. . oo.OooOOOfCCCCCChCzCCC< ++ooXOooXO,kVCCCCCVCCCw.oOOoooo%XoXOO-OOXoXXOXO.oOOOOoOqCCCCCCCCXOOOOOXOXoOoXXO9CCCCCCCCCCCcCCCCs,iCCCCsOOOOsCCCCCCCCCCCCCCCCVCCCCCVk5XX#XOoXXOOO--2CCCcChCCCCCCCCCCCCkXXXooX5NCCCCCCCC@XCCCCuXOoyCCCsOO*-OOkCCCCCCCCCCCC5ufZCCe@@@--O*OO%Oo.oXOOOOO5VCCCCk$bCCCCCCCCCCCCCCCCCCCCCCwo#o.#..O.Xo.Xoo.zCCCCCCj$.O.oO@OOOOO+%OOOOO9CCvvvvCC", "CCbbvbCCooooOO. ...oo...o...Xooo,CCCCCCCd7.eCCCCCCCCCCgXwNCCCCCCnwNCCCCCCCCCNCClVCCw....X....ooOOo.ooo.# rCCZwZCCCCCZuCCCCOX:CCCCCCCCCCCCCNzwoOo%%OOXOzCCCd. oO..oXXOXX9NCCCCzCjACCj o+++ooOo$DBCCCCCCCwozCCmoooOOooo%OoXOOOOXX.ooO....OOXOoOqCCCCCCCCXOOXOOOOoOXooXO0CCCCCCCCCCCCCCCkXX9CCCCsOO-XqCCCCCCCCCCiBCCClOiCCCCCCCNu*OOXXOX---OkCCAlCzCCCCCCCCCCCCrXoooXsCCCCgVCCCvXOCCCCCwO,CCCCm@O@O9vCVvCCCCCCCCCCZiZCCwO@@OO-=*OO%O+..ooOooOyCCVcCCBCCCCCCCCCCCCCCCCCCCCCCCCx%ooooOOoXo..o,7VCCCCZs+.OOOO@$%OOOOOOOOO%O0CCvvvvCC", "CCb<,vCCoooooo.....o..oO.....ooo#9VCCCCCCCCCCCCCCCCCCCvXXOnCCCCCCCCCCCBCCCCCCCk.eVCCw...o....ooooo.oo oo rCCCCZ5jCCCCCCCCO9nCCvsfbvvvNCCCCCCV5o++OOOOsCCCVd. oo..X.OOOXoOnCCCZ9.dCCV+ +ooo0kCCCCCCCCCC7nzCCC5oo%o%ooOXoXO-OOXXX.oOOO..OOooXX0CCvoXvCCoOXXOOOOXOOoXoO9CCvXovCCkCCCCCCrXX9CCCCgOOXO9CCCCCCCCCk.rCCCcm9CCCCCCCCCCk0XX*XX-X=CCCg.9VCCCCCCCCCCCC9oXookCCCVgOsCCCsXONCCCCCbVCCCCCfu0fVCv@XCCCCCCCk6VCCCCy.OO@=OOO@@%O%O. o+OOOwCCVuOhCCCCCCCCCCCCCCCCCCCCCCCCCCCN5.ooO+7sznCCCCCCCbs< . .+%OOO%%OOO%OOO%OO0CCv56vCC", "CCNssNCCX..Oooo.o..o ..Oo. o...ooOqCCCCCCCCCCCCCCCCCCCCsO.@mCCCCCCCZf<#CCCCCCCjgCdVCCw..ooo...O.o..Oo oo wVCCw5NnCCCCCCCCCCCC,X .o.o=mCCCCCB@o%OooOsCCCCCD oo..XoooOoo.=CCCCjNCCCCi .+owmCCCCCCCCCCCCzCvNCCjoO%OO++%OoOOO-OX.XoXXOoo.OOo..oqCCSgdvCCoXoXOOOOoOoo..X0CCvffvCCOkCCCCC3XXjCCCCnOOOX,CCCCCCCCn+.kCCBbCcCCCCCCCCCCCCNw=OOOODCCCCNjCCCCCCqO=vCCC9O.$kCCZg2O=zCCC;oosCCCCCCCCCCCCCCCCCC6oXCCCCCCmB6yCCCiOoO@@$OX*@***O@o.oOoOwCCVfCfhCCCCCCCCCCCCCCCCCCCCCCCCCCCCCk$$fVCCCCCCCCCCz$o. .XXXO%OO-OOOOO-XO-OO9CCNsDNCC", "CCCCCCCC...OO.. . o...oo..o.ooO.+oZCCCCCCCCCCCCCCCCCCCC7oX@cCCCCZw;<5sCCCCCCCCnZCsZCCw.o.o .oOo..oo o+ eVCZfCVnCCCCCCCCCCCXX Xo.OX-vCCCCCVi+oOXosCCCCCVvksDq5$XooooXXCCCCCCCCCCN $sZCCCCCCCCCCCCCCVzChCCC%oOOO%O%oOOOOOOOX.ooOOo..OooooO0CCvvbvCCXXOoXOOOOOoo.XX9CCvvbbCCOOkCCCCwoXnCCCCCkOOOoNCCCCCCCg.@CCCkCcVCCCCCCCCCCCCCCZf:-OBCCCCCCCCCCChXXOsCCCc9iNCCCs-O=MCCVrX.O%vCCCCCCnCCCCCCCCmO*o.CCCCCmVCfZCCi@OXo$O@OO**#XOOOoo#+oiCCVsCVnCCCCCCCCCCCCbkdr0&@%OO;rmCCCCCCVZCCCCCCCCCCCn%... .oXOOO%-OO--OOOOO-OO9CCCCCCCC", "CCZbbVCC.ooOoo.. .....o. o.o.o.oo,nCCCCCCCCCCCCCCCCCCCu...okCCCCX.NCCCvsmCCCCCnAOoOOOOOOOOOXoXXoXO-OOXo0esvbCCCCCCCCCXOOoXO-XoXXo.o-9CCCCCCCCCvvkCCCCCCCCCCCCCCCChOOsCCCCnhCCCks,CCC>OOXXoX.XXXXyvCCCCCCfquNCCCnkCCsO2VCCCnVV5VCCi@@=;4=@..O@*OO*OO@@O#wCCVfCVvCCCV5oO=997$o@@OOOiCCCCCCCCCCCCAkq;oOO@ovCCCCCCCCCCCk+Xo$=@--XOOOOOOOOO-O-O9CCvvvvCC", "CCv.#vCC...O.... ..oo..oo... ooooX.Xo..o.cCCCCCCCCCCCCCCC5.....X@VCCCX+Oooooooo.uCCCCnZZ,ZCCw#OOooo.o+o+ ..OOOOOwCCVfCVvCCCCfX. oOOoX%%OOOoOX%jCCCCCCCCCCCCCCCCsoXOOO:NCCCCCCVCCusVCCCCk5+OO%o$OooooXoozCCkCcVCCfOOOOOOXooOOOXo.oO>rsbNCCCCCCCCCCCCCCCXXOXOXOXoXo.Xo-0CCCCCCCCCCCCCCCCCCCCCCCCCCCCC9ODCCCCCCCCVzCzCCcOOOXXoXooXoXOO9cCCCCZguCCCVOX9CCCCCCqOOOXDCCCCCZ=$O=O$XOOOOOOXCCCs$=kCCCCvqVCCCvZCfVCCiO-**4==@#OO@@-OOOOOOOiCCV0VVnCCCZ5oooXo.o+OO@O@=VCCCCCCCCCbi5OOO.OOOOXvCCCCCCCCCCCCZfo@&@OO*OOOO-OOOXOO-%0CCvO-vCC", "CCZvbZCC.O..... oo.o...oO .XX.XXX.X.XXosCCCCCCCCCCCCCCCCCs.X...XgCCCO+OoXooo.0ZCCCCCCn,,VCCCyOOo+ooooo+ ooooOO-OwCCZff=ZCCCZ, ....XOOOOO.oooO5nCCCCCCCCCCCCCCqXXoooo$nCCCCzqCCCCCCCCb#o#oO%+@$OO.ooOo8CCNbCzCCVooOOOOXXOOOO-5svVCCCCCCCCVbfsuCCCCCCCXOOOOoooOXOoXoO0CCCCCCCisfvNCCCCCCCCCCCCCCCCCVsvCCCCCCCChCvNCC0OOOOXXXooXooOOO-vCCCCCCCCCwXosCCCNqOXOOO5VCCCCV3O-OOOX.ooOO@OOCCCVbNCCCCCCCCCCN.ffVCCiOO=*****#.OOO@=O%OOOOeCCCZ55nCCCZ5XXoXoo..#O@*+ozCCCCCCbe5$+ooooooCCCCCCC9%O@+ooooo.NCCCCCCCCCCCCCCCCCCC7@@@OO***OOOOOOOOOO-0CCCCCCCC", "CCAssNCC...ooo..o.oooo.o......XX.oo.;ACCCCCCCCCCCCCCCCCCCCfo.. .XXwCCCm$O.XookCCCCCCCCCCCZO@=OO$+ooo.oo5zCCCmO++.o#OooooCCCkBCCCV+.o.oooXXOXOOOOOOOoXoXoXOOOO=OOXX.oOOOoXsvCCCCjkCCCs...o.OO.. $iCCCCCkOO-=OO*O@O--OO*OOO6CCCCCCCC", "CCNssNCC.ooooo.... .o.......oXqCCCCCCCs.. . ooO%owCCCCCCCCCC0 ..oo...kCCCCCCCCCCCCCCCCCCCCCCCCnVCqZCCr .o%oOOOOO...X. ...rCCZdCVnCCCCCV=...XosCCCCCCCCCCCCCCCCj=XXXvCCCCCCCCv..$CCAjClCCNOOO+%Oo.ooooooooOOO%%OOOOooOXoXONCCcCkNCC;.O..XX.XXooXoXOOOo.oooXOOOO+%OO.ooO%OOoO5CCCCCmVCfVCCw #OO-OOO*O--**=4O@-X@yCCZwCVmCCCZ5 ..OOOOOO0ZCCCCCCCCCCCCsO=@OO--X$zCCCCu$oZCCCso.oo..+. &bCCCCCCs-O-O-OOOOO*OOOO-O-9CCBssBCC", "CCb<,bCC..ooooo .o oo..o...XosCCCCCCCs.o .oooOOomCCCCCCCCCCb. Xoo..o5CCCCCCCCCCCCCCCCCCCCCCCCCmi$nCCCq OOoOOOO....... ...rCCZgn=MCCCCv...XoofCCCCCCCCCCCCCCCCCN.oo9CCCCCCCCk .vCCkCjCCCqOOo%oo..oOOOooookCCCCCCnD5OoXoXOOOOnCCCCVoooOOOOo$++o%+o..oOOo%O%OO.....OXO.oO..oo.O%XoOXoXX..XXXXOOXX.XXo5smCCCCCCzO%OOOO---OooXXXXrCCCfCzCCv......X.oXoooooXoOoooooXOOOO%%OOOOoO%OoOo5CCCCM=nfVCCwX.X@oOOX-*O-=O=*@OOOXiCCCm=ymCCCZ5 .++O@@+$NCCCCCZZCCCCCCg=;OOO=oqVCCCZD.XqCCCCso..+..o+sVCCCCCCCcOO=9>-O-OO--O@-O-O9CCM79vCC", "CCbbvbCC.oooooo o o oo ooo..XXsCCCCCCCs.. . ...OO,CCCCreCCCCCCq..oX...onCCCCCCCCCCCCCCCCCCCCCCCCCkmCCZCCr #$OXXX.X. .XX...... qCCZkCCCV5ooXOo.ZCCCnmCCCCCCV9OOouCCf57sCCCCnjVssZknCCCCDOooOOOOOXXoXoXX.oooOOOO%-OXoo,ZCCCk5VCCCCi%OO--XO.oOOOOOO=O---OiCCZs=hCCCCCCCCCC9OOoo #++OoooXOoo#OOsVCCCCCCCCCCC0O@oo.ooXCCCCCCCZe..... ..#@@$@@=OOOOsCCCCbM9OO#@OXX-*qCCbiibCC", "CCcbMbCC..o.oO.. ooooooowCCCCznCVqo5CCCCCme5..oaCCCCCCCCCCCCCCCCCCCu...ooo.CCCCq. .wCCCC5oO. .bCC+o#o5ZCCCjzCdZCCw. .X...X..... .XX--OiCCCwwVnCCCV,ooXo7CCs@o5CCCCCCCV0OOokCCCCCCCC8dCBdnCCCCVs=Xo. X.Xo..oOOooOOoOo.o%Oooo@+OOoXoCCCCCb$@OOoO++Ooo..o%OOO.oXOXOOoOOXOOOOOOo...+OOOOOOO-XX.XXXOOOXXooXoO-OXX.. oOOO%OXoooooooo%sVCCCCnfBCg0CCCCB9XXXXXOo.o.oooX.ooOOOOOOOOX>ZCCCmViyCCCi$%O%-%Oo.+OO%OOO-O--OyCCZfCckCCCCCCCCCCn>XO#.++OOOo.oOoooXuCCCCCCCCCCCCC$+%oO.oo9CCCCCCZ5.. .....oo@$&$==%OOOcCCCCCCCrOXOOOO*@0CCbMbbCC", "CCvvbvCC....Oo..o ooo o%CCCCCCl;Xo7CCCCm+ #..oowVCCCCCCCCCCCCCCCCCN..Xo.XXbCCCf....wCCC9oO. .9VCnr#@@5VCCCnZCDZCCw ........ ...XXXX-yCCVgCVmCCCZ,oXX@5XX..iCCCCCCCCCsO.qCCCCCCCCx&dbCCCCVs$OOoo...X....oOOo..oOOoooOXoX@@O.OOoOmCCCCVOOooo%%OOo. o+oOO..ooOXoooOXXOOOOOOo..oO%OOoXOXXXX.XXOOOOXXoOooO-OoX...OOO%OOOoooooooXoXOsVCCCCbf:jCCCCCCz$oXOOoXXXXooXoooXOOO-=-O6VCCCmVCfVCCyO$$%%%OOo.@@OOOOO-=O=iCCVsCVnCCCCCCCCCCCCCg$+. ooO.OooXOOOXsCCCCCCCCCCCCBoO#O..o#uCCCCCCq . ......#@@@@$$@OOOrCCCCCCCCkXO+oXO**0CCMMMMCC", "CCbdgvCCo.oo.o..oooooooo.vCCCZ0X.Xo7CCCCw oo... XvCCCCCCCCCCCCCCCCCCrX.ooX.iCCCCi+.. MCC9XO.. ofCCCs@$+qCCCCMl+zCCCr.....XX... ..oXXXXO-pCCVfCrzCCCV5XX.XXX.7VCCCCCCCCCCs.iCCCCN7dCCfCCCCCk%oOOXoo...oo...oOo..oOOOoooOoXXO$OXOOOOkCCCCCOoXXooo..oooOOOOo$6VCCCCV5qVCCi@O%%=-O-OoX.@$O-=O=-=yCCCCCkkCCCV5OOO--OO6vCCCS..#OooooXoOOOOX9CCCCCCCCCCCCbbnCCCCCCCCCCCb. ...#XXO%@@$$;bCCCCCCCCCCCCCN0OO*OO0CCbO@bCC", "CCCCCCCCooOoo.......oo..@VCCCCz@X$wDCCCq.o ooozvbVCCCCCCCCCCCCCCCCCCCjoooXXowCCCCCwo.sCCuOoX..#uCCCCCCCCCCCCCCCCk,VCCw...X.... ...XooXXXXkCCCVVCVlCCCV,XooovCCCCCCCCCCCCCCCCNiVCblCCCCS5%+oooooOOoo o...oo.OOO..OOOoOO+Oo.OOOOOOOO0CCCCCsOOXOXOq0ssjvbbCCCCCCCCCCCCCCCCbbvkss57oOXOoOOXOOOXXXOOOXOXXoXXO-OOXX...O%OOOOOOXXXO#XXOOO=OO-3MCCCCkvCZuNCCCVqXo..oo...ooOOOO@5VCCClVCZZCCCk=@O%%%O%Oo.XO@O-=O=OiCCV0kCCCCCV,OO-O=O--OsCCCCdsssssss%oOXXXX9CCCCCCCCCCCCCCCCCCCCCCCCCVq. .oo+OO@*@@OqmCCCCCCCmZCCCCCCCm,*OO0CCCCCCCC", "CCCCCCCCooooo.......oX.XjCCCCCCVbBCCCCC7 ..iCCCCCCCCCCCCCCCCCCB0jCCCzoo.oo=CCCCCm. eCCN%oo..ofCCCCCCCCCCCZCCCA.hdVCCw..X.... ..XooXo=zCCCCCCV,5mCCCV,XoX=75uNCCCCCCCCCCCCvObdZCCCZr o%%oo%ooOOo .....oo.oOoooOo..OOOo..O%OoOOOOOCCCCCmwslvCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCbzsq,XOXOXXOOX-OOOooXoOOOOXX. .O%+O%OOOXXXO+XX%%==-O-OOpZCCCZkv@vCCCCCz%Xooo...ooX%%@5VCCCn,5ZCCCCCCm;%O%%O%Oo.X**OO=O@iCCVfcOBCCCV,@-XO@OOOXOkCCCCCCCCCCCCv.+oXXXnCCCCCCCCCCCCCCCCCCCCCCCCfOO.. ...o#O@@@@orbCCCCCCCCk;@O=ZCCCCCC6-OqCCCCCCCC", "CCn59mCCooOOOo. .oooXo7nCCCCCCCCCCCCCCCgo # .jCCCCCCCCCCCCCCCCCCb.OCCCCvXXXoofCCCCC7.sCCCVd95smCCCCCVskCCCCooXXOOOOO+wCCVgCfhCCCCZwVCznCCCBXXXX...OgCCCCCC7.OOOO.+O+OOo.oo.$sVCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCooo..ooXOOooOOokCCCCCCCCCCCCCCCCCCCCCCCCCCZsOXoOXXXOX-X-*-*X.tCCCCCCfXXOOO%OO,BCCCCCCCCCCCCCi@OOO.OOOOO%OO-OO0CCCCCCCVfi6CCCCC0O@==fACCbOOOOO@@CCCCCCyOX.o8ZCCCf#o .ooX;CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCB@@@@&@$==@***@OOO@,sBCCCCCk0CCCCCCCCCCC", "zCCCCCCCCCj=VzdNCCCCCCCCCCCCCCCCC9ooXXXCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC5OOoOOOo#ouCCCCCCCCCCCCCCv+%+o.+ .. ....kCCCCCCCCCc", "X&DZCCCCCCvunCZ.BCCCCCCCCCCCCCCCCDooXo,CCCCCCCCCCCCCCbbCCCCCCCCCCCCCCCVqOooOoOOOO.sCCCCCCCCCCCCND&OO+Oo+# . .X...,VCCCMVC8ZCCCpOOOOoXOoXoXooooOoXX.rCCCCCCCCCfXXXXX...o.o.7CCCCCCdOO%Oooo+OO..sZCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCv....OoOOOOXXOO9CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCZsOOOOXO-XXX-XdCCCCCC0OOO%OXOOOoOOkCCCCCCCCCwO%OOOo.OOOOOOOO%@OO=iCCCVrCVmCCCCCCp@***@0CCC0O@OO%fCCCCN5XOOo%CCCCq.o. .ooX7CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC0*@@@@&@=@@@*;uBCCCCCCB@VCmubCCCCCCVg>@", "oo.XwbCCCCCCNfu&CCssZCCCCCCCCCCCCfoo.fZCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCNyOXOO-X*X-2CCCCCCfoOOOOOOOXOoXoOwCCCCCCCyO%OO%OO.OO%O%OO$=$@@=yCCCV,rmCCCCCCCCi**O@uCCCiOO-=cCCCCV=OXXoXdCCCC;.Oo.#XXX9CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCw@@@@$@O@@@6kVCCCCVssCC,DfBCCCCCCby@@OO", ".o..XO:kZCCCCCVNCVonzjbCCCCCCCCCCN99DCCCCCCCCCCCCCCC9XOo..wCCCCCCCCCV5 .o.oooOOo+.+wCCCCCCCCz@o+O%+Oo%o o. o ooo...O5VVCCzZCVVCCyOO%OXOOoooooooOoXOoXowCCCCVOO@=O-", "....ooooOwBCCCCCCNwzCCrsCCCCCCCCCCCCCCCCCCCCCCCCCCCCpOOX.o%CCCCCCCNk%oooo.oOOOOoo.OO5ZCCCCCCCCvs5%%ooOo... ooo...oo5ZCCCCV<5VCCp=OOOOO.OoooOoOoOO..OXwCCN<.ooXoXoXo..o.o 8CCCCCCfoooO>cCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCDoo.$9ysvVCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCc>=*-OfCCCCCC6OoOOOO-XOXXXooOoo5ACCw@@O=%O=Oo.OOOOOOOO-$*iCCV7,VCCCCZi0ZCCCCfgACCCCCmOO6CCCCCbOOoOXO7CCVs@.ooo.OXXjCNrXOCCCCm$+o@8CCCCCCCCCCCCCCCCCCCCCCCCm;@@$,jVCCCCCCsiCCciACCCCCCAi;O@O$O@O@", "XX. Xooo...5kCCCCCCVjgXNCzumCCCCCCCCCCCCCCCCCCCCCCCCZOOX.oo0CCCuXOXXooooooo%OOooO.OOoCCCCCCCCCk@%O%O. . bCCCqfNCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCV5XXoOXXOX...XO$O-oOOOoXXo=BCCCCCCCCCCCCVw@uCCCCCCCCCCCCCCC=4OoX.kCCCCCCCCCsOOO%O..#qCCCfoXqCCCCCCCCCCCVf7@uNCCCCCzkb0uCCzCCCCCCBsBCC0OOOXOgCCC@oO,CCCCCCCVfvCv$zknCCCCCCmwXX#+.X..... .. oOO%++%OO++$OO@OO@OOOO0kCCCCCVmCCCCCCCCCCCCCC", "CCCCCCCCCCCCCCOujACCCCCnw@.. .ooXOoOoo...oo. oooo oo..oO...oOXOocCCCCCCCCCCCCC", "CCVbbZCCCCCCCCNjzZ+zCVZCCCCCvw.XXXoX...X.Ooo o..oo. .oo+O..OXXo....X.2lCCCCCCNkz9uCCuBCCCCCCCCCCCCZq.OwCCS. #o.....o..XXOOX..vCCnjChCCC,OOooOOOOOOOO...X.. ...rCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCvooooooOOXuCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCwOOXOoOOOOo.OOOO$%%OOO-5CCCkCknCCM=-%uCCCCCCCCCC9OOXX5cCCCCB5oXOCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCVCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC5OOo.o+$Oo=hCCCCCCCCCgDCCVvM9CCC:---**@-OOOXo9kCCCCCBkcu9CCfNCCCCCCvq#ooo.OXoOoOO.OoXXXXXOOX.XXo#o.Xoo......qzCCCCCVzd$ZCfwnCCCCCCmy=$@***@OO-OOOOOvCCCCCCC", "CCVvvVCvXOOoXXooO ..ooOo5kCCCCCCCCd,CCzsNCCCCCNa%#Xo@OOXo.oX.Xo.. .oOo..oO%+OoOOOo.+ooO-OOOO#XoXOOO%OOsCCCCCkO+...ooOOo.XX.#X@uBCCCCCmscCVoMCCCCCCCCCCCCCCCCCCCCCZw.. ...oosCCCZ*=*@O*O*OOo@OOooXOXobCbMbbCC", "CCvXXvCvOO%O%$%ooo ...o.. .oo.XX...+ooOXo@XX+o.ooo..OOXO$sNCCCCCCbjvC=jCVCCCCCCh5o..oOOOOOoo.o+CCCCCC$++%OO+. #%%oXoOXOrnCCsOoOooX ...OOOOOoooozCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCkX....fCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCzO-OO--XOO.XoXO-O-O%-gCCny----O-OOoXXXOOOOOO=CCCCCC$O...OoooO+XXX,hCCCCCCZCk,CbkbCCCCCCCCCCCC999799dZCCCZ<. ...8lCCCC9@@*O*O@Oo+o%%OXOOOOvCM@obCC", "CCVbvVCvXXOOO=-Oooo...oo...ooXo....#ooXXO@OXO+. Xo..+OOO%O.qSCCCCCCBj;VCD0kBCCCCCnwX#OOOXOOoX.uCCCCCko++OX.#. #+%oooOo...5k-XXO.X... ..OOOOOOoo9CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCsXX...BCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC9%%%OOOXo.XOXX-X*@%*;k0XX----*X*X..XXOXOO-X-hCCCCCuo...oo#XXXXwnCCCCCBf0gCZCCZw@zCCuOO@OOOOoo@@OOO...ooOO..o o+$#OOooX;kCCCCCCCCCCCCCCC7o.CCC.obCCbsCCCCCM@ .. +O@OOO*X@@*@@OOOX--XXXOObCbMMbCC", "CCvvvvCb. .oOXXOOOOoO...o...oooXX .#OOXOOOX#X@X. oo .oooO .ovCCCCCCCCCCCCCCCCCCCCz5X.o@ObCCCCCCCCCCCCCCCCCCCdkrCCnOOo.OOo.oOOXX.... .NCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC7XCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCBOO--X*X**O-o..O***OmCCpzkCCkO*OOO%OX.+$OO+. .o.O.... #O#OOOOO@+bVCCCCCCCCCCCCC7..CCC.XvCCs.rCCCCCb ...OOO-O**OO@*@@OOOXXXX@OOXvCbbvbCC", "CCvffvCv...oooXOOOOOo.....X.XoXXX.X#OOOOOXXXX@o.o#o..oo+OO+..iCCCCCCCCCCCCCCCCCCCjO..oXOO0yssi7X.kCC&..CCCXXvCCrX.wCCCCC....OOO*O@@OO@$@OOOOX-X-OOOXvCvffvCC", "CCvXOvCbX ...ooOOOOoo.o..X..oXXXX.#+XOOOOX.Xo+o..oo. oo+OO..O*O%OOXXO@Ooo..oa5oo....o.oXXoOOOOOO%O%OOX... .7CC. .CCC.ovCC7#..wCCCC@...XOO*OOO@$OOOOO+OXXX-OXXXvCvXOvCC", "CCCCCCCvo...oXXXOOOO.....o..o..XX.o+OXOOXXXXo@oX oo...o@OOo.vCCCCCCCCCCCCCCCCCCwoo. .oXwCCCCCCCCCCCNfsssmCCCCsqaCCVoOO%OOXXXXOoXX.X. .ACCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCXNCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCBX---X-*@-XoX.OO*XO@VCCsesCCyOOOOOOXOO+Ooo..wCCs$X.#.X.X#oX$OOO+O@O$OOO.....,CC& CCCXobCC7#. .rss5....OOOOOO*@@OO-OOXOXX-XOOOOvCCCCCCC", "CCCCCCCvXX..XOOOoO%O...+.o.....o#.+OooOOOoXX+@o..++o+oo#OO%zCCCCCCCCCCCCCCCCCNqooo..ooOvCCCCCCCCCCn$oOXOsCCCClraCCk+@OOO-OXXXXXXX.. *@=OOOOO$%Oo .ACCCCCCCCCCCCCCCCCCCCZ$+OOO... .tCCt CCC..sCCqo. X.XooX. .#OOOOOOO@OO-O@@OO1*-OOO:NCvyyvCC", "CCvvvvCv...XXXoooXXOoo..OO. .OOoo.O#...+OO.oX@kVgOOO@uCCCuOO=nCCCbbbbCC", "CCvyivCvX...XXoOX.o+o...Oo...XoXOooo#o.oOO#sCCCCCCCCCCCCCCCCn+ .....5CCN<.oO.oXXOCCCCCV@...oX.....jCCCCCCCCNcVlCCr+%oXXOOOX.XX..Xo..zCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCcX--X*X---XO-XX-X*XyCCzVbNCm@O-OOOO@@Oo. .CCCCCCCCCCCbO@Xo,VCCCCCCuOoo....7CCdo CCC .sCCz .....X... ooO@*@rZCCuOOowCCCC;X:nCCCCbwyvCC", "CCn96mCvX..XOOXO...Oo...oo..ooXOOXo#oo..OXuCCCCCCCCCCCCCCCCz+.. . .7CCv .oO.XXosCCCCCv..........jCCCCCCCCCkCzZCC&@OooXXOOX.XX.Xoo..VCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCVX-X-X-O-XXO-*XXO@O;CCVlCkCC=O-O-OOOOOo. CCCCCCCCCCCb+%OoXykCC,O-OO*@OOo..jCCCCCCCCCCCCCCCCChXOOOOXqCCCX#o#0CCb%.CCC. sCCb...+. .. XoOOcCCCCCCCCCCCCCCCCCCCk:ObCbvvvCC", "CCvvvvCvoXoXOXXXOOO%o ..o......XXooooXkCCCCCCCCCmbvCCZ$ooXX.#XX.uZCCCCCCCCCCCCCCCCCC7XoOzCCCCi77kmCCuBCCCCkCjCCA. .XOXXOOXXoXXXXXwCCCCCs .oXX9VCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCkCkCCrOOO@@OOOo..oNCCgCCCCCCCCCCCCCCyXOXOXXvCCzsCCCCCn....OOXOsCCC5ooOo .+qhZCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCnsr:----*==*OOXX.O9CCCmCCCCOXXOOOOOO o.sCCoXsCCv5CCm9smCCCCO+OX....CCCCCCClOOCCC DCCCO......lCCCCCCCCCCCCCCCCfO@sCCCCXOOobCCCCCCC", "CCbXXbCbXOOOO%OoooOoo wCCCCCCCCCCCCCCNfyuCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC", "CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCt o o OoOooOX..o6CCCCCs . .XoXXXOXCCCbOO...oXOXXhCCC>O-OO-OOo%sCCC5...X6fmCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC0******----*XX.O+O0CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC", "CCCCCCCCvvvvbMCCvvvbvMCCvvvbbNCZbbbbbBCZvvvvvZCAbvvbbVCBbbbvvZCASbbbbCCmvbbvvCCnbbbcmCCbbbbbmCCbbvbvBCCCCCCCCC# .o ooXoooX...sCCCCC7 X.oXXXoXCCCbX... XOOoXDCCC9O-XO--X.+qCCCu.ooo++ovCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCsO**@--**-X*XXXOoO;CCCCCCCCCBvMvvvCCnvvvbvCCmvvvvnCCvbbvbnCCvbSvvACZMvvMvBCVvbbbvBCVbbbbbVCBbbbbbVCBbMvMMCCnbbMvbCCmbbvvnCCCCCCCC", "CCCCCCCCXgvbw9CCXfvbw7CC.fvv,sCvXbbb5sCbovvS5bCsOO9CCCD. ....XcCCC@..XXXX..X9CCCsXO#@OXXXXXvCCCsszbBCCCCCCCCCCCCk-O*X@O@*==OooXXOOOCCCCCCCCCsyvMfXCC5wvvgXCC5rvvw9CCofvby9CCogbbwsCv+vvv,sCMobbb.Xoo9CCCuXXXX...XX;CCChOoOOOoOoXXbCCCXXOO%OXXoXXgCCCCC9******-X-OOOX.O+O9CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC", "CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCuuCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC", "CCNssNCn590NCCCCm995CCCs77jCCC50,78lCCV075kCCC7895CCC879fCCCCCm777,77CCCCCCn57nCj77CC799mCu77778855009CCszkCCCe ooooo.oo.Oo.oXXCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCvVCCNXXX...ooX.nCCVOoOOoOo+OXsCCC9OOOOOoXooXbCCCCC=****X*--XO-O...OOuCCCkcsCC050009mCCCm7079sCCCCk99550kCNsfCCCCCCCCCCCCCCCCCCCCCCl757757787060000000mCCCCCCCCCCCCCCNq90090mCNssBCC", "CCvpyvCvooOpCCCCbXO$CCCz..vCCC9...@ZCCsOXosCCCr...CCC .o@BCCCCvX.. bCCCCCv..dCqo.CVoo.bC7... ...oOOXvCfCdCCCa + oooooO.oOo.X.XCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCrXX...ooX.jCCC:OOOOOo@+XyCCCpOOOOOX.o#XCCCCCCOO*O*****-X**O..#OsCCCfCfCvOoOOXkCCCCuoooDCCCCmOXOooOkCCCCCCCCCCCCCCCCCCCCCCCCCZ+ .ooO+%+OOOO=MCCCCCCCCCCCCuOooOOOObCvyibCC", "CCvvvvCvXoOOCCCCkOO5CCCv.oVCCCqo..zCCZ$$oozCCCm&..CCC .obCCCCbX.. 5cCCCCjO.sC5.8Cv.o.bCD. . ...oXOOvCvNbACCd ooooooo.O.XXo.XvCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCli=.oXoXwCCC0OOOOOoOoo5CCCsOOOOO..oO5CCCCCMO--X******O@*@..@OcCCNbBbCvoOO+kCCCCm@X5mCCCCn$XOOoo8CCCCCCCA0;.5CCCCCCCCCCCCCCa. . . . ..OOOO%+%@XokCCCCCCCCCCM:OXOOOOOObCvMbMCC", "CCvvvvCvXXOONCCCsOO8CCCb.&CCCCk97uCCCkXOXovCCCCD..CCC ..XCCCCCc.... ...CCCCs..DC5O0Cv.o.cCs.... OOOOOsCBweSCCS o oooo...O.XoXXzCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCnf9XX=CCCfO+OOOoOoXXCCCvXO%OX.XoOqCCCCCcOX--*X****O*@OX.XOMCCMyyNCk5OrlCCCCv7wvCCCCAu@o$qDgnCCCCCCCCbXX.$CCCCCCCCCCCCCC<. . . ..+oO++o5ikVCCCCCCCCCM9OOOOXXXOOObCvMbvCC", "CCbgfvCvXOO%bCCCsOOuVCCVquCCCCCCCCCCC,oOOO%CCCCs..CCC .XrCCCCCv... . ..CCCCs..sC7.sCN...bCuX... .OOOOOpCC9rbCCZ o o oooooOX..oXXDCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCVzwNCCN.OoOOOOooOvCCVXOOXo.XXXsCCCCCs@*X-*X***=--XXX.OoZCCbr9CCCCCCCCCCCCCCCCCCCCnvvCCCCCCCVbvMCCCi97nCCCCCCCCCCCCCn... . . .o#wsvNCCCCCCCCCCCM0O@OOOO.OXOOObCbffMCC", "CCvXXvCvoXOOCCCCsOosCCCCCCCCCCCCCCCCCoX%OOosCCCD..CCC..@zCCCCCv.X. ...CCCCs..DCj.jCC<..CCs#.....OOOOX0CCCCCCCC o ooo+ooXoOoXXXXXqCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC5OO%OOOoOOuCCC5OXoX..XXzCCCCCrO**-*****=O-X-X.O@CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCB$oX@sCCCCCCCCCCCCCCCCCCCs . .. ...&0fNCCCCCCCCCCCCCCyOOOO*@OOOOOOOXMCMOObCC", "CCCCCCCvXXO-CCCCsOokCCCCCCCCCCCCCCCCzoXOoOO%CCCs. CCC .zCCCCCCCXX.. ...CCCCms5nCCCCCsOOOX...XnCCCCC6O*X******=*OXXX..9CCCnCCCCCCCCCCCCCCCCCCCCCCCCCCCCNVCCoOoosCCCCCCCCCCCCk5@5CCCq. . ..7BCCCCCCCCCCCCCCCBu;OO*oO*OOoOooOoXbCCCCCCC", "CCCCCCCvXoXXCCCCsOovCCCCCCCCCCCCCCCN=#XOoXoXvCCs. CCC.XbCCCCCCCiXX. ...CCCCCCCCCCwvCCD..CCD. ....O%+OOXBCm$#ZCCrooo o+ooo;rDvZCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCvu;oOOOnCCnOOOo..XXCCCCCC-O*X***X--=-O--X..eCCVX$nCCCCCCCi0qkCCCCCCCCCCCf#XXX;BCkgfbVCCCCCCCCCCn5+@@OfCC8 . ;kCCCCCCCCCCCCCCCNyOO+OOOOO@OOooOo@OXbCCCCCCC", "CCn99mCbo.o=CCCCkowCCCCCCCCCCCCCCCCwoOX-XOOOvCCs .CCC..bCCjbCCCCcX. ..cCCCCCCCCCvNCCnO.CCs... .o%$+OOvCBfVlCCa ...:qsvVCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCNfqXuCCC:XX..XX5CCCCCvOO--***-*--OOOoX..sCCzVfNCCCCCCb@OOosCCCzsDjNCCV5XooXsCCCCCCCCCCCCCVzwo.O+@@sCC+. .dCCCCCCCCCBbbbbMkq*OO*OO@OX@OOooOOXOOXvCn99nCC", "CCbpycCboXo9CCCCCCCCCCCCCCCCCCCCCChooOOOXOOOvCCD .CCC..bCC9$ZCCCCi....X.ZCCCCCCCCCCCCCk.CCs......o+$%OosCCkCjCCn8DvZCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCnCCCxXoX .XwCCCCCf-OX*X****---O-O...vCCkCkCCCCCCCcOoOoikCCCCs0CCCCCCCCCCCCVfumCCCCCCCCCCCCCCCCCs@...#oOOO+@zCCCCCCCCCCCCCCz.. .#XOO@OOX*-O-XXOOOOOOOOOOOOObCvMbvCC", "CCvfgvCNvCCCCCCCCCCCCC<0CCCCCC9XXX..XOooXXOobCCs..CCC#.bCC9.X..ACCV;XXo...uvNCCCCCCCCCCCCCCvXX...+$$$%OoVCBizZCCCCCCCCCCCCCCCMku9XXVCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCmNCCCCVO-OX-**---O-*X--XX7CCVcuBCCCCmmCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCzXXX...OO+%+uCCCCCCCCCCCCCCZ@.. .#oO*OOO-O-XXX-OOOo-OOOOOOObCbffbCC", "CCvXXvCCCCCCCCCsVCCCCw.uCCCCCzoXXX..+OXoXX+OBCCs..CCC.+bCC9.X..lCCCk;.o. .Xo9jnCCCCCCCCCCCCb.X...o$$+%OovCCCCCCCCCCCCCCCMkit.XXXXX.kCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCcOO-X-**-X--O-OXOX.uCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCnznCCCCCCqXXX...ooO$eCCCCCCCCCCCCCCCu#.....#XOOOOOO-OX--XO@OOXOOOOOX-bCboovCC", "CCCCCCCCCCCCCCwuCCCCg..kCCCCV=XOXX.XoOX.XX@OCCCD..CCC.ovCC9 ...eCCCCCr....XoX.ONCCCCCCCCCCCdoo. ..+$$$OOsCCVzlCCCCCmku5OXO....XXoX.sCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCu--XX---XX-XX--XOOXzCCzcVCCCCCCCCCCCCCCCCCCCCCCCCCCCCCVoo@@Oo. .vCCCCCCCgOOoooo@fCCCCCuOooo%NCCCCClq5t775saqCCZw@zCCCCCCCCCCbCCCCCCCCN$oo$kCCCCCCCCCCCCCCCCCCCCCCwo.ooooX.X. .Xoo.. ....XX.. .. XOO*OOOO@@@@@@OOXX-OOOOXvCMvMvCC", "CCvwycCv..XXXXXoOOOOo ....O+ooXX..#OOkCCCCCCCCc .CCC .qCCCCCCvfsCCCCCCCNvw=Oooo@o. .oooX#XX......OO$@O$&imCCCCCCCCCioOOXX. .XooX... ..@CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCwOsCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC;*XX-X*--O--o XO*-iCCCCCCCCCCCCCm0XXMCCCCCCCCvskZCCCCCCCCCCCCCCCCCCCCCCn.OOOO@%-O@*-OX..+**-qcCCCCCCCC=hCcknCCCCCCCCCCCCCCCCbw .#ooOoOoOoOO@O%OOOO+Oo..o..oOOOOOO..o...o..oo.....X+*@@XXOX@OOOO@+XOX-XXOObCbgfvCC", "CCvbvvCvooOXXXoXOOOo. .SCCCCeoXhCCCCCCM%X$CCCCCCCCCCvo.ZCn%okCCCCCCCmroo.CbkMCCCCCCBs$OOXXooX#...# . ..oooOOO@*@*OO*X*OO#@%OOXOOOOvCM+obCC", "CCvMvvCvXOOOO@OOoo o ...oCCCCs.#@#XXXoeVCCCCCCCCCCCCCCCCCCCCCbXZCzsmCCCCCBu$oooX.ooOXOOoo...jCCCCCsoO$++o o+ooo-OOXOXXoXoOOOOOsCCCCCkO#X..oo+O.+....X@uNCCCCCmslCVOMCCCCCCCCk9OXXX..... ..... ...ooOOX+@@@=@O*@@OOOOOO@XXOXObCMbbbCC", "CCvvvvCvOOOOOOoOoo o.o..XohCCCs #$ooXXO@,CCCCCCCCCCCCCCCCCniwCC&ikVCCCCCz0OOXOoXXXoOoOoOXXXX.7CCCCCNOO$o+# oOoqbCCCCCCCCgOoXX. XXOOOOOoo.oosCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCs@O-OO-OOOX..oOOOOOO-sCCCCCCCCvrOOoo#XXXOOOOOBCCCCC9Oo#..ooOO.oooooXXX+rlCCCCCVkubCCCB=cfcVCCCCCZk6OcCCCCCxOOooo...#.OoX.oooX.ooOOOOXXOOO=uNCCCCCZCC,gVhhVCCCCCCj5...ooo.O.oX++@@@X**OO@O@@*%OOOO@OObCCCCCCC", "CCVvvVCvXoOoo.OOooo...o.....o..O.5imCCCCCCCCCCCCCC$jCNfkCCCCCCj9XX.ooXOo#O%O+..XO...%+OoOo.... XO:CCCCCCbCCCCCCCj0CCV0nCCV,sgCCC6#. ..XOOOOOOO5BCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCsOOOXOorCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCN0*-XO*OOXXXOOOO9CCCfg9VCCmrACC9kCCCCCCCMCCCCCC,@Oooo. ...ooX.oO##.Oo+XOO#oOOOoOX9jCCCCCCkgNCj;CCCCCCCCNe+o+oO.OoXoO#@*XXO@*@@@@@OOOO@OOXbCVbbVCC", "CCvXovCvXOOoooOOooo ooo..o..o...ooOO$uZCCCCCCVz5BCd;lbCCCCCmd;oo...ooOoo#O%o+..ooX.X+OOOoOO....#.OkCCCCCCCCCCxSCBohzzCCCCCzVNvCCvX ..XoOX%OO$gCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC5XOOXOOsCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCf=O-OOO#XXoXOOvCCMBVcCCCCCcckOACbkCCCCCCCCCCko@+OO.....oooooXoo. XoOoXoO+OOOXOOX.$sBCCCCCvz=fCmhZCCCCZfVCs0cknCCCCCCnw..o+ooOXo..oo+OooX@OOOOOOXO...XXO+...X.5kCCCCCCBCmoVzlbCCCCCCBu&@@O@*@@@O@@@@OOOOXXbCbXXvCC", "CCVvvVCvOOO.OOooo. .ooo.,kCCCCCCCCd,CCksACCCCCAi+.XoOOOo. oo.oX. .ooo. oO%o+oOOOO.+o##CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCVCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC6XOo.oO%%O=fCCCCCCCCCgDCCVvM0CCC;X*X*@*X*X*XX9kCCCCCBkcu0CCfNCCCCCCbq+oO..OoXooXXXoXooXXXOOooXXo#...oo.... qlCCCCCVzs$VCfwmCCCCCCmi;@@@=@OoOOOooOXbCCCCCCC", "CCNssACvOXXooOooo.. $dZCCCCCCzjnk;CCBCCCCCVf&.#...XoOOOOo. ..XX.. ..ooo .o%+ooooo..$sNCCCCCCzzkXBCbkCCCCCAs# #xCCCvk0O-o..oDCCNnCdCCCCCCCCCCCN0OOOOOXXXXOOXrCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCyXOOo.o+$O+OO0BCCCCCCCCCCCfCnACCs---***@*@*XXo.o=sCCCCCCkvCNOkzzCCCCCCAs%OoOX#ooooXooXoOXOOOOXXooo..XXoo.... ;fVCCCCCBCC+@@@OoOvCvvvvCC", "CCvbvbCvooXXX9kCCCCCCZzkNywCCBCCCCCNu@...X.X..o.o .oooo%O. ...X. ...X..o@@o;jZCCCCCVzkskVCCCCCmiMCCNCCkXoOOOOOO.XXX..... . .XXfCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCn#.....oOOoCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCs.oOOOOOOOoo..o+%%%OO%OOkCCB:vfCCCwX-X******;4*-:=-%O@XXXZCCCi-OoOrCCCCCCCCCCCCCCCnjhqwCCkVCCCCCVk,OoXO#Ooo.... . .. X+o@+O$+O@+O%@OOOOO$iBCCCCCNkD=CCCCCCCCCCCCCC", "CCCCCCCCCCCCCCnVCCCCCk5OoooX XXXXOXO...XXXX ..#o.o..ooo...oXXwvCCCCCCnjz$bCbgVCCCCCCC5+O$CCCd.oO+O0CCBwjNCCCbksu08sCCCCCCssgvvvBCCCCCCCCCCCCCCCCCCCCCCCC9..X%gZC9... **-OfCCCCCC5OOXOO--XOXOoooOoX,mCCwOO@*O%+Oo.oOO%OOOO=@@uCCV7,VCCCCZ6OO-=-O**@=OOOOOO@%OOOOO@->svCCCCCCCCV5oo#oXoooOXXOOOX$kNCCCCCCC+. .wCCCCCCCCCCCCCCCCCCCCCCCCCCCCsiCCciBCCCCCCAi=X@X*O*O@", "....XXO", "zCCCCCCCCCkwfZCCCCCCC9%OXoooXXOOOOXooXyCCCCCCCCCCCCCB>XXXX...OgCCCCCC7.XOOoooO+OOo.oo.OsVCCCCCCCCCCCCCCCCCCCCCCCCCChX.#o+OOOO+++$##CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCVsO.OoXXOO--X-O--X.tCCCCCCfXOOOOO%O5NCCCCCCCCCCCCCe%OOO.oOO%OOOO%OO9ZCCCCCCVfy7CCCCV6-@*=@=OOOOOoOOO@@o6CCCCCCCCCCCCCCC$. XX.XooXkCCCCm=O5nCZd7@onCCCCCCCCCCCCCCCCC@@@@@;CCCCCCCCCCCCCCCCCCCCk0CCCCCCCCCCC", "CCCCCCCCCCCCCCCCvwo..o.... ....XXXXOoX.kCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCOOOo..$sVCCCw... .zCCCCVeooo 8CCCCb<.,ZCCCCCVwZCCCCCCCCV5XOX.o.XOOOOOXopCCZnCCCCCCjgCCCCwXX....5CCCCCCdo+O$@Xoo+oOOo.oooXo=yBVCCCCCCCCCCCCCCCCCCCCCCCyooXO@OO#Oo+O@+.CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCNyOOXXXoXOXOX-XX==*X..dCCCCCC9XOOO-OyCCCCfhCCCCCCnVCCiOOooXOOOO%OOO=6VCCCCCCCCZyVCCCCCV6@===@OOOXOoO*O@O5cCCCCCNvvVCCCCCC<..Xo..oOXvCCCv$X+OoX@+X.#vCCCCCCCCCCCCCCCVe@@*@@=fCCCCNkmCCCCCCCBMCCCCCCCCCCCCCCCC", "CCCCCCCCCCCCCVj&. ...o.......XXXOoOoo.XwCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCoOo...iCCCCN.....=ACCCk$+o+o dCCCCVcZCCChwCCCCCwjCCCCCCV5OXXoXOOOOOOowCCVw@nCCCCn@hjZCCCh+.X.$BCCCCCA#.+O$@OooOOoo..oXXoo+ooyvCCCCCCCCCCCCCCCCCCCCCC*o+oo@$OOOOOO$o8CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCvrOOOOXXOOXOXOXO-O*--X..@ACCCCCB$OOO=kCCCVkk$nCCCCn$yVCCyOo.OO%%O%O%%9VCCCCCCzwCCCCCikCCCV990,=--OuBCCCCCCCCCCCCuOoo#o;gCCCw. Xo.XoOOCCCC%XXOOXo#+ooOdCCCCCCCCCCCCCCCm+=@@@&4@cCCC0O,CCCCCCCC;,kVCCCCCCCCCCCCC", "CCCCCCCCCCCCw$.. ........ ...XXXXoXXX.,CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC59855qnCCCC9. ..+CCCCv.++o++# sCCCCCCCCmN5sCCCr .zCCCCCCV,oooXOOOOOOwCCVgCfkCCCCZwZCzmCCCNkCCCCCNObncCCCCvVCCCCCCCCCCCCuOOOO%5VCCCCV5qVCCyOO@=$%%%OooXO$O-=%=%=iCCCCCkkCCCCCbssDVCCC6Oo....8CCsXoXNCCCCn$oX#O@=VCCCCCCCCCCCCCCCCCCb#o.. ....bCCC<@@@$@bCCCb%@*@*@OO@oOOOO@OOCCbO@MCC", "CCbgfvCCo..ooX.@vCCCCCCCCCmw.X.XX#..oo... o.o..CCCCCCCs77O#Oo@NCCCCCCCCCCCf.oXX .....o#ooosVknCCCCD9,gCCuOXX9CCCCCCCnnCCCV--OOOo. .oosCCCCCC5,NCCCCCVD+...ooo.o...oOOOoOOOoXoo.... ..XXXoXX....ooOO+ .wCClBzbCCb%O%oo.oooooOooooqCCCluOOO%%-OOX.oOXoXONCCcCkNCC=..vCCCCCCCCvoXO5kCCCCCCCCCCCCCCCCsXOOOOkCCCCCCCCCCCCVssCCCCCCCn5OOO.sCCCCCCkXXOXOvCCCCCzChCCC8 o + o oooooXovCCCCkVCCNCCCCCCCV$O%+OOkCCCVbCCCCfXXkCCCCCCCrCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCOOOOoXOO=kCCCCCCCCCCCCV$O-OXX. X@@O%sCCVkCCCCboXo.XoXO-X---XOOrCCCkCzCCn5XXXDCCCCCCCvCCCCCCCCCCCbvbz.XOhCCNvCjCCkOXOXoX*X-X..X.XXuCCCCCvCCC7...XOyCCOOOo.nCCCCCCCCCCCCCCCCCCCCCCCCssusssssssfCCCk$oX@X*=@CCCCCCCCCCCCjwCCCCCrOOo@**OO+o@$@@O+O++OOyCCVr$mCCCCCCCCCCCCCCCCCCCCs=XX%CCCCCCCCCCCC5Ooo%CCvoXbCC", "CCCCCCCCzVCCCCCCBD& ... . ... .....X.. CCCCbbvvCC%OOOXXOOoo.ooO%9CCvvvvCCO-%OOOXXOXorVCCCCuOOXXOXO0CCCCCCCCCCCCCCC>XO9CCCjZiCCV%XXXoXOXXX...ooo%VCCz@=ZCC$ ..XO2CCOXXXX@zCCCCCCCCCCCCCCCCCCCCCCC9XX-X-O-XOXcCCCCc=*O-=$bCCCCCCCuZCCCCCn0ZCCyOO@OOOOOO+OOOO#+%OOOOyCCVmCCbCCCCCCCCCCCCCCCCCCCnOO%fCCCCCCCCCCCzOOXOCCCCCCCC", "CCCCCCCC.oOOO*XXX.2CCCC5@OCCCCCCCCCCCk-OoX5ZCCCmZiiCCCyOOO@&+@oOOOOOOOoXo$+owCCVgCzjCCCV9OOOoOOOOOOOoOOXrCCCCCCCCCCCCCCCCCC", "CCv..bCCoooooO............o.....o9rsfvnCC,OOooOoOO5fCCCCNvZzCCNOX-XX..XXo#.. o$CCCCCCCCC$OoX#...XooooOOXXXXXXO.OoXooXzCCCCCwXOXXoo5CCCCCCCCb5CCCCCCCCCh,kCCfXX-X.....XXXo#XoiCCVsquCCnrfBCCCCCCCCCCCCCCCCCCCCCCCCCfXoo@OOO-XcCCbOX-*X*XX#bCCCkOrCCCCCCCCCCCCC-XOOX5VCCCCCVyVCCyO@@OOoOOOOOOOX+O++OOoyCCZzCCBCCCV,..OOOOOoOOOOOOOXsCCCCCCCCCbgfvCC", "CCbvvvCCXoOOOOo .......o...oo..5VCCCcXkCCCCe+%ooOOOXXoXXXXOO....XyCCVg55CCCCCCCC$OOOXoXXnCCCCNfvCCCCCCCCCCCCCCCCCCCCC9XXsCCCCCCCCCCCCCCCCCCCCCbXXoOOOX5VCCCCCCNusCCC-XOOoO..OXoo .+ZCCdfwCCC9ooo.XXXX#XoXXoOoXXoOXO.OOoXoo9CCCCCCCz=XX.,VCCCCCCCCCCCCCOO%OXOXXXOoooOO9CCCCCCCCXOXOO-OOXXXOOOX-X---%OXXO-XX.. XoXXfCCgOXXomCCCCCCCCCyfgCCV%-XXX.....oXXXXoOCCCsuNCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCu7o@oOO*O:VCChXXOXOXXXuCCCb=mCCCCCCCCCCCCCuOOOOO5VCCCC55fVCCi@$@@OOOOO+OOOOO+%OOOOwCCCCkObCCCV5.OO.oOOOOOOOOOXorZCCCCCCCvbvvCC", "CCvvvvCCXOOOXo...... .OO......5ZCCCnVk7CCCCChChCCnOXX....XooXOXXXX9CCCCkiCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC0*X*uCCC0OO*OXOOBCCCCCCCCiqbCCCCCCCVoOOOOoo5VCCCmVCyZCCi@O@OOOX@OOoO.OOOOoXXoyCCVfCVmCCCZ5oooo.OOXXXOOXOoOOuCCCCCbywbCC", "CCM79mCCXXXOOo...o.....o....5ZCCCv+ndZCCr #o+o+OOOOOO.OOOOooowCCCn%dnCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCc7wnCCvpvCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCni=zCCnXOOXX. oOO-XO. 5CCV;kkCCZ$OO.o..#..#XooOOO.oXoX.oooXoOXX9CCCCCCCCCCCCCCCCCCCCCbbbvCCOOOOOOOOOXoOoX-9CCvvvMCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCrOOrNCCsOXX5CCCCChh:VCC9OX.....OOoXXoo.XmCCz;imCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCZ=-*;CCCvOO@@X#@kCCCCCCCfO@0CCCCCCCC5XXoOOXX5VCCCnf=mCCCyo+OO+o@+OooooOooooo@+wCCVfm$bCCCZ,ooooOOXXX*OX+oXOOunCCCm99mCC", "CCCCCCCCoXXXoo..oo.....o...5ZCCCCCw@OOOOCCvO#cCCOXOOOO-OOOXXXXX0CCvoovCCOO-%-OO---XX--OXXX--OXXOyCCCCCDXOOO-9NCCCCCCCCCC,o.XXsCCCCCyODCCbOXXXXOOXoXOOXoXX9CCCyXuCCCCCCCCCCCCCCCCmmCCbCC.o...5BCCCmVV7VCCr..XOOOOo.o ... .o#.owCCZgCZbCCCVVCCCnAOOOOXOOOO.XXOXXO@O@O@@O@bCCCXXX..vCCCCCCCCCCCfXooo@oo+OOo.O+OOOOOo.X#---X*X@OOX*X...oOO%-$OOOXOOooX.XXoXOO--X-X---X.SCCCCcmCCDXXXXXXoXooXXOO-OfCCVcnsCCsXoooooOOOO-CCCCCbX*X-X*X-X-XXXOOOX..OOO--OO-XOO@@@,CCCCVbCCCCCCCCCCCCCCv.oo+ooooO.oOoooOO+o..oo$@5VCCCmVCfVCCy@@7VCCCCCCm$@O.X##oo+yCCCCCCCC", "CCCCCCCr.oooo ..oo+mCCCCCCV,wCCC9wVnCCCZ5...XoXooXX... XqCCCCCCCCCCCCCCCCCCj$o ooo+o.o...o. .oO%oooo.o @@o...XXoXoOoOOO..OXXX... ..oO--NCCCCCCs$iCCCnvvvvvvvvcbvvbcvvVCCy@0CCCqo..X.Oo. o+OOOOoo.ooOOO.oooOOOooooooOoOooo..OOOOXXoOOOOXXXXO0CCCCCbvvvCCvvvvMbMvvvvvvvvnCCbvvvCCOXOO-OOOyCCCCCCCZ0--XXXX--X-XX .OOO%O-@@-XXOOXX.OOXXXO-XX-X---XXrCCCq@yCCVvvvvvvvvvvvvMMvvnCCCwoDCCNOooOoXOOXyVCCCCC3X-X--XXXO*OXOOOoX..OOOO-@*OOXO@$O%qCCCCCCCCCCCCCCCCCCCCl=.#OooOooO.OoOOO++oo##@+o5VCCCmVw0CCCi,VCCCCCCm$#@OOXXOoooXwCCCCCCC", "CCCCCCw..oo.o....o..@mCCCCCCVCCCCmOcCCCZ<.....XXXoX.....=CCCCCCCCCCCCCCCCCCiXXo oo..ooX...X...o$$oo+oo..+OX..XXXXoXOoXoX..OOXXX....XXX--DCCNCCCCVBCCCCCCCCCCCCCCCCCCCCCCNvVkCCNX...X.o+ .+oOOOOOO.OOOOo.Ooo+OOooOOOooOoo+o..OOXooooOOOooXo.oOvCCCCvddvCCCCCCCCCCCCCCCCCCCCbffvCCOXOOOXXOXCCCCCCCCCu-XXXX--XX.. .OOOO-O$O-OOOXXX.oX.XXOXX--X---XX.ACChVbNCCCCCCCCCCCCCCCCCCCCCCNZCCCCpooOoOOOkCCCCCkrX**XX-X-**@OXOO@OX#.OO*@*--OOOO=@Oo;cCCCCCCCCCCCCCCCCCCCCs.+Ooooo.oooooOO+Oo..+@@oO5VCCCc;mCCCCZCCCCCCm$o+@@OO+oo@+XXiCCCCCC", "CCCCCw. o.o..o ..o...OnCCCCCCCVsCCVCCCZ< ....oXXX.....mCCCCCCCCCCCCCCCCB,......o....o..X.. ..O%O+O.o+ .o....XoXoXOXOXXoXoOXX.X...XXO-O,u=vCCNCCCCCCCCCCCCCCCCCCCCCCCCChCzVCCD#.. ...o #+oooOOOO.OoO..oooooOoooOoOoOoooOO.OOOOOoooO%OXOXoXoOus-OOO=:-OX.. oO@--O@OOOXOOOOXXXXoXOOOO@**O-X...9CCCcCCCCCvvvvvvvvvMbbMMMMvCCCfCcCCV$..XXXXX*X**X*-OOOOOOOOOXXXoOO-OOO-XXO**X#OOXX9CCVk7 .#vCCCCCCCCuo+OO+OoOO+O+O++$+O++o&+oO#Ooo@,VCCCkmCCCCCwoooOOOXOOOOXO+OOOX..Xr", "o...oo..Xo.X....oo.. wCCCCCCCCCCV<.... ......XXXouCCCCCCCCCCCn,X ..X.o....... .oo....o.oo...oo+o.oo+o... .oXO%XOX.oXX-XXOOXX. .oOOo%9CCCCkbCCNXO-OXXX.X. ...X.,CCCCCCCCZOX.o.. . o.#O%oXO@+.OXXX.XXoooXO+..oooOoOOOoXXXOOoXOXXO$XooOXXoOO-OCCbbvvCC%OOoO$$.XOOXXXX9CCvbvvCC%oOoOOOOOO%kCCCCCm;-X-X*-=OOO...oXOOOO-OXoooOOXoOOXXXXO-X=O*-O-X...OZCCCCCCCC5OOo...OOOO-OX-OXNCCzkCCCCCCCCnwo.XXXOXO*X-**-*OO-OXO*OOO..OXO%OO-OXXOO@XX@@oXO9CCCCC5&.vCCCCCCCC5+%+.o.OOOOO+O@@O#OO++$+o.OOoO+o5VCCCCCCCCCCiooOOXOO.O@O#OXXooXXXX", "X..X.XoooXXX... .oo rCCCCCCCCCCV5..... . ......OXXMCCCCCCCCCCqXXX. .X..X...... ..o..o.o.oXX...oOooooooooXX XoXOOOoXoXXOXXXOOXXX...OOX%kCCCCCCCCyOO-XXXXXX. .XXX.hCCCCCCCCkXoXoo .. .o ooOOXOOO.ooXoX.oOOooO+...oOOXOO.oooXOXXXOOoO$OooXXXOO-OOCCvffvCCOOOXO=$OXOOOXOO9CCvffvCCooOXOOO-OOX,CCCCCCn=X--XX-OOOX...oOOOOOOXXXXO-XXXOXXXX--X=-----X..XXhCCCCCCCChXOXo.XOXO-OXX*OOpCCCCCCCCCCCpOOoX..X*XX***O4**O*OOX*O-OO.oXXOO-XO--XO*@X#*OXXOXrVCCCCCCCCCCCCCCZO@oo.+oOoOO##$+O@.oOOO+OoO@OXXo++5VCCCCCCCCCCyoOOOoOOOOOXOoXoXXXXo", "X..ooXoooX.X.. .X rCCCCCCCCCCV,o...X. ...XXOfCCCCCCCCCCD.XXo. .ooX..X.. ...... o.X..X .ooOooooo+o... .ooOOXXXoOOOXXXOOXX. ..OOO=CCCCCCCCV=XXX-XOXX....o.XoCCCCCCCCC,.XXXo. ...oo OOOXXoo..XOXooXOO#oO%...OOOOOOoooXoOOoXXXooOXooXXXXX-OXCCv#ovCCOOOOO$%OXOOXXOO9CCvXOvCCoo%OOO-OOOoObCCCCCCn:*X.OO--XX...oO-OOOOOXXOO-XXXXXXXX--O*---O-O..Xo,CCCCCCCCC=Oo.XXOOOO-OO-O-:VCCCCCCCCCNOOOXXX.XXXX-X*****OO@OOOOOOOXoXX-*O*OOXXX*OOO@OXXOO#qCCCCCCCCCCCCCCzo#oooO+OO++O#O+++oO++o$+.ooO#XO@oo5VCCCCCCCCCCiOOoOO.O+oX#ooo..Xoo", "X....XX.XXXX.. . .rCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCkOOOOOXOXXo. oX.XuCCCCCCCCCbvbvbSvSvbbbSbbbbbbbbbbbbvvvvMbbvbbbbvbbvbbvvbvvvvvMvvvbbvbvvbvvbMvMvCCCCCCCCoOOoO%%oXXOOoOO6CCCCCCCCvvvvvbMvvvvvNCCCCCCCNvvvvvvvvvvvvvvvbvvbvbvvbMvbbbvvvvMvvvMMbMMvcbcbbCCCCCCCCCuOoX.ooXO---XOO--hCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCyoOXO#XXOXXoooooXXo", "...XX...X#X.... .wCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC>OOOOOOOXoo......ACCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCOOOoO%%OOXOOOOO0CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCNXXo.oXO*OXXX-OOO:CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCio#X#X#oooXXooXXOO", "X..#..X.o#..... wCCCCCCCCCCBbbvvvZCBMbSbSZCAvvvvvCCnvvvvvCCncbbbnCCvvvbbMCCbbbcvACBSbvvbNCZbvvbvACZvvSvvZCAbcbbbVCBvMvMMCCnvvvvbCCnbvvvvCCCCCCCM%OOOOOoXXoo. ...7CCCCCCCCCVvvvvbNCZvvbvvZCAbbvbbZCNvMvbMVCmbbbbbCCnbbbbbCCmvvvMmCCvbvMvnCCvbvvvNCCCCCCCC$OOOOOOOOoOO.OO6CCCCCCCCNvvvvvCCmbvbMMCCnvbbvnCCvvvvvnCCvvbbMnCVvvbbbNCVvvbMMNCVvvvvMVCNbbbbcVCCCCCCCCC9oo.oXX*--XXOOOOOvCCCCCCCMbbbbmCCbbbbbmCCvMbMbBCVvvvMbBCVbMbbbVCBvMbcMVCBbbbbvVCBvbvvSCCnbvvbbCCmvbvbmCCbbbbbmCCbbbbSBCVbbvbbBCVbbbbvBCCCCCCCCCCwXOoooXXoXooXXOoX", "...XX..XX....# rCCCCCCCCCCCs@*OO%OOOXsCCCCCCCCCCCCCCCCCCCCCCCb;7CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCXXXrCCCCCCCCCCCCCCCCCCCCCCCCqXX#", " .;ZCCCCCCCCCCCCCCCCCCCCCCCCV0,Xooo5CCCCCCCCCCCCCCCCCCCC9O0CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCmNCCCCCCCCCCCCCCCCCCCCCCCCCCCN=Oo.wCsO-O0CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC9@OOsCCCCCCCCCCCCCCCCCCCCCCCC..CCCCCCCCm$o+<8$+.5ZCCCCCCCCCCCCCCCC+nCCCCCCCCCCCCCCCCCCCCCCCCCCCCnX", "OO-OmCCCCCCCC9XsCCCCCCVf; .XOOOOX--rVCCCCCCCCCCCCCCCCCgO-.bCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCqXOXOX0CCCCCCCCCVvMMbMVCCCCCCCCCCCCCCCCCCCCCy*OO9CCCCCCCCCCCCvvvbbCCCCCCC..CCCCkooosCCCCCCCCj+osCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC", "CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCvsfnCCCCCCCCCCCCCCC5+.oO. .gCCCCCCCCCCCCC0#$OOCCCCCCCCCCCCCBbDw9kCCCCCCCCCCVso..oX-OO-mCCCCzooOo.o.uVCCCCCCCCCCCCCCCCC0OOOOO5VCCCCCCCNsNCCCCCCCCCCCCCCCkXXXDCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCChsgi99999ZCCCCCCCCCCCCCCCCCCCCCCCCZ;.O", "OoXqCCCCCCCCCCCCCCCCCCCCCCCCqoO0CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCssqiCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCAi...MCCCCCCCCCCCCCVDbCCCCCCCCCCCCCCCCCCCCCCCCV<+OX5CCCCCCCCCCCCVu=VCCCCCCCCCCCCCCCCCCCCzu,OOO*O0CCCCCCCCCCCCCCCCCCCCCwX.obCCCCCCCBCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCOOXOsCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCkwooCCCCCCCCCCCCCCCC9ozCCCCMskCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC++OOOrZCCCCCCCCCCCCCCCCCCZq.oO+O", ".OOOoo=bCCCCCCCCCCCCCCCCv=X.XXo0CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCAd5o..%O+...,CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCXXXbCCCCCCCCCCCCCCCCCCCCCCCCCsXOrCCCCCCCCCCCCCCCCCCCCCCCCCCCs .#+qmCCCCCCCCCCCCCCCCCCCCCCCCV5OO:CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCVky,XXnCCCCCCCCCCCCCCCCCCCCzX.XrbbMcMCV@rkMbbbvbbmCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC=OXXsCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCBrVCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCO#O+@O;MCCCCCCCCCCCCCCCCbOOOooOo%OOO+$+%oX.ooo@OO*&@**OXO*O@O.XXX.. oOOO$%O-OO*OOOOOOOOOOOO*@OOOXXX......o#OOXXooo#oo.ooooooo... oo@+#oobCCCCCCCCCCCCCCCCCCCCCfoOO@CCCCCCCC", "CCCCCCCCCCCCCw...qCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC,-Oo.OO++O+OOO@XX.#o@OOOOO*@**OOO@OO@@OOX. XoXOOXO-XOOOOXXOOXOOXOOOOOXXoOXO+#.. ..oooooOO+o..ooo..o .#oo..#@#oovCCCCCCCCCCCCCCCCCCCCCCsXXXfCCCCCCC", "CCCCCCCCCCD...o7CCCCCCCCCCCCCCz@sCv.. . ..o#oo+OOo..O.......oO%o...oooOoooooo..Ooooooo.......oo+%++%+ .oo. oo#o@-OX .XoXXXXXXo ..XXXOOOXoXXoOOuCCCCCCCCCCCCCg;.kCCCCCCCCCCCCCCCCCCCCCCCCO.oo.o o.o.oOoooOOO.oOOoOOOOO$OOOooXOzCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCwOOOOX-XOXX.#@OO%-OO-*OOOOXXXXCCCCCCCC>%OACCCCCCCCCCCCCCCCCCCCCCCCCCCCCDOO.oOOo+%OOO%@XX.#+@OOXO*&@OOXOOOOooOOOX. XXO%OOOXXX-OOOOOXO-OXOOOO%XooOO+++.. ..oo+ooo.ooooooooo.ooooooo++oXbCCCCCCCCCCCCCCCCCCCCCCV@oXsCCCCCCC", "CCCCCCCCCC8 .ooACCCCCCCCCCCCCCCVBCv. . o ooo%+o..Ooo#. ..ooOOo.. oooOooooo...+Ooooo.o.... .oo+ooo+oo...o. ..ooOOOOX..X.XXXXX.o ..XXOOX-ooooXOXnCCCCCCCCCCCCCCCACCCCCCCCCCCCCCCCCCCCCCCCv+Ooo.o...O..OoooOO+..Oo.OOOO5OOO.oXOO$nCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCyOOOX-OXo..oO@OOOXOO$OXOOOXoXvCCCCCCCpOX0CCCCCCCCCCCCCCCCCCCCCCCCCCCCCmOOooOOo+%%OOOOo..OOX@OX*@O@**-XOOOooXOOXX.ooOOOXOX-XXOOOOOOXXOOOOOOOXoOOoOOo. . .ooooooo.oooooo o. ooo.o##ooovCCCCCCCCCCCCCCCCCCCCCCCrXX9CCCCCCC", "CCCCCCCCCC7. .5CCCCCCCCCCCCCCCCCCCv. #.#o oooo%%o..OOo+oo...oOOX ...oooOooooo. +o%ooooo..Xo.o.o.ooo#oo...o . ..o.OOOOXo.ooXXXXXXX .XXoOOOOOoXoOO5CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCsOoXo. oooo.O+oooOOo..oooOOOyCkO..oOOOX$NCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCpOOOOOXXo.#@@@%--O-OOOOOo...sCCCCCCCkXoOuCCCCCCCCCCCCCCCCCCCCCCCCCCCCC,OoOOOO%O%+OOOO..XXO@*O*OO@OXXX#*OOoOOOOo.XXOOOXXX-X-OOX-XOOOOOOOOOOooOOOoo... ooOoooOOo oo+ooo o+o ..+@+o.vCCCCCCCCCCCCCCCCCCCCCCCsXO;CCCCCCC", "CCCCCCCCCC. ..aCCCCCCCCCCCCCCCCCCCb...##o ooooooo..oOoO.#..oooXX...oOooOooooo .+%ooooooo.oo.ooooooooo ..... ...OO%OOXXXXoXXXXX.X...oOX-OOOXo.XO%fCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC,Oooo.o ooO..+oooOOO..oo.OXwCCCn$.XOO-Oo,VCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCyOOX-XXXXo@@@%OOOO--XOOX...9CCCCCCCCyXOXnCCCCCCCCX:9uCCCCCCCCCCCCCCCCfOoooO++%%OOOOOo.XXX@@OOXXOO*X*#*Ooo#OOOX.#OOOXooXOXXOXXOOO-XX-OOO%OooOOooo.. # oooOOooOoooooooo.ooooo.o.#++#.bCCCCCCCCCCCCmBCCCCCCCCCsoXoCCCCCCC", "CCCCCCCCCv...+NCCCCCCCCCCCCCCCCCCCb#X#o o oooooooooo.O.. ..oooXo...ooOOOO.Oooo.o+ooo.ooo.XX.#ooOoooo o +... .+OO%OOXXXXoooo.XXX....OXOOXo...XXOVCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCZO+OXOo. ooo.o+OoooOO.oOoXOwCCCCCZ<.+OOoo.=nCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCwOO--OXoOO@@OOXO@@OXOOXo.oXVCCCCCCCCyO-sCCCCCCCCroXoZCk0rszZCbMNCCCCBoOOoOOOO+OOOO%XXXoX#OX**X-*X**X*OOOOOXXX.XXoXoXOXXXOOOOXOOOXOOOOo$OOoOO++o... .o+OOo%Ooooooooo o o+oooo#++ooSCCCCCCCCCCCbo9CCCCCCCCCzO$ObCCCCCC", "CCCCCCCCs$o. sCCCCCCCCCCCCCCCCCCCCc. .# ++ooo#++. ooOoO....XooOo...ooOoOoOO.+..++oooooo ..X.ooooooo+..##.o. ooOO%..XoXXoOoX.XX.. .ooOOOoXXXXOrCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCkOOooXoo ooooo%oooOOX oXOXyCCCCCCCCwOOOOo..=nCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCp-OOOX..O@@=-O*@*@OXOXX.XXzCCCCCCCCCpsVCCCCCCCChXoozCN@X.oX#O=OdCCCCwOoooOOOOoO%OOXooooO@O@O-XX-*XXXOOOOOooX.XooOXXOXXX-OoOXOOOX-OO*OO$OX@@O++.. . .$+ooooooo oo ooooooooo o+++#ovCCCCCCCCCCC5@>CCCCCCCCCn+O@kCCCCCC", "CCCCCCCCClo..CCCCCCCCCCCCCCCCCCCCCCCCCwX..XbCCCCCCCCCCC%#OOOOOooo..ooooooOoo.oowCCCCCCCCCCCCm5X...XO-wVCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCyOOX .OO@*OOXOO*XXXX.XXX;CCCCCCCCCCCCCCCCCCCCC9oXXuCCCm0oo--,VCCCCC5ooOOOOO$%OOXoXXoo@*X**X**X*XX*OooOOOoX.o+OOOOXXXXOOOOOXOXX-XX*@OOoXoX.X#...#. ooooOoooooo.oooooo++oo +o+&+ovCCCCCCCCCCsoOooo0CCCCCCCCksVCCCCCC", "CCCCCCCCV$O..&ZCCCCCCCCCCCCCCCCCCCS o+oo.##++++Oo.oO+OOoo..o.O+oo.o+O+ooo.o.O. .o.o..X..XXo.ooo+Oo o . .#X. ..#OO-X.oXXXOOO%oX.. . ..XXoOOXXOfCCCCCCCCCCCCCCCCCCCCCCCCCu..XXuCCCCCCCCCCnoO@$OOO..Xoo.oOOo.OXoXowCCCCCCCCCCCCCCCuo..oO-O=kCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCyOOXoOOO%+OOXOOOOOXoXXXXnCCCCCCCCCCCCCCCCCCCCVCCCCCCCCCCCCCCCV5XXoXO@=***XX*****XOO*X..#OoOOOXOOOOOXXOO--OOOOOOOoOOOOOOOO.....oOoOOoOOoo.o. .o. . .#.oo+OooOkCCCCCCCCCCCZ,XOo+O#OoOXooOOoOoOO", "CCCCCCCCCCCCCCZ#oo7CCCCCCCCCCCCCCCb. oo ooo++o%ooOOOoo#. ...XX.ooOOOoo+ooo. oo%%ooooooo..o.+++@o+oooo++XoX ...XX.#o%OOOOooOoX$nCCCCCCvD5OOXOo%$>uCCCCCCCCCCCCCCCCCCnvCCCCCCCC< .o+#+o#wCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCV:*XOo@ObyXOOOO*O9CCCCCCCCCCCCCCX.@VCCCCCCCzOO-%kCCCCCCCCCCCCCCCnOXXXO@=*X*******-X*OXXX.XOOOOOOOOOO-X-X-XXXOOXOOO.OOOOXOoo.o. .ooo+OoOo.o..oo . .... .oo@+oo,CCCCCCCCCCCCyoXoXOooXoXoXXOOXOOOO", "CCCCCCCCCCCCCCCi#o#5CCCCCCCC$$BCCCb...##.#o+%o+%o.OOXooX....o.X.o+O+O+oOo+oo.o+%ooooooooo...+++++%o.oo+%oX.. ..#o.OO%%%.XXo@oXzCCCCCCCCCCNjCCCCCCCCCCCCCCCCzooXo*@*X*****X*X-O**O.XX++OOOOOOOOX-XXX--XOOOOOOOoO@OOOOOOoo .ooooooOo.o.oo## . o#o.oo$++.bCCCCCCCCCCCsOoXOXooXXooXXooXXOooO", "CCCCCCCCCCCCCCCCOX*@=@O...+OO#OoO@@*OXXX*OOXX***@-XOXOO++O#@O... .XXXXoooo.oo .o .#+o.XX#oXXrCCCCC,oooyCCCCCCCCCCCCCCCCCCCCCC", "oOiCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCbo ..#oooo+%OOOoX-O#@o..o#.oXooo+%ooooooo.oOOO.Ooo..Xo..oOOoooo+oooo$oo.. ,ZCCCCCCCCCCCCCCCCCv..ooo,VCCCCCCCCCCCCCCCCCCCCCCCCCCV-yCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCwoXoo.XO@@OXoooooo.oOOO-O-OXOXoCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCw-VCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCV1-O*=@OX .@%O@@O@-OOOOO@X**OXOOO@XXO-+XooOooo. ....XX..ooo oo .oo .ooOX@+oOOXwCCCCZ,++OwCCCCCCCCCCCCCCCCCCCCC", "CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCb%o# ++ooooO%OoooO-OO@#.X#ooXXoo+$$ooooo%o..+OoOOOooXXo..ooooooo+o.o#+o.. rZCCCCCCCCCCCCCCCCCCf..ooXsCCCCCCCCCCCCCCCCCCCCCCCCCCC9wCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCz;ooXoX.XO@OOXXooOXo.o$OOOO=OOXXOCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCwrCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCZyO@*@O...+@O@@OO**OO*XOOOOXO*OO@OX+X@XooOO@%oX ..oooOo.oo..o o .oooo OO@@@OXoXCCCCCV,OXXyCCCCCCCCCCCCCCCCCCCC", "CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCM+ o +#oooOOOOO..OO%OOo..##oXoo+o$$ooooooo.ooOooOXOo.... ooOOOooo...o+oXX.sCCCCCCCCCCCCCCCCCCCCi oo.jCCCCCCCCCCCCCCCCCCCCCCCCCCfyCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCwXoXXXXX.oOOOOOOoOo#OObCCCCCCCCCCCCm2OXXX#OOO@X@*X*O*X@O*-OO*OOOXXO@OoO*OOX.... ..o#O+..oo.o o.....oooXXX+@oXXXCCCCCCCCm$XXXhCCCCns90gBCCCCCCC", "#oOo#..oXX.. DCCCCCCCCCCCCCCCCCCCCbO..o.##ooO+O+O..oXOOX......XX.XX#ooooooo. ++ooooooooo. .o.oo.#+O.#+$wVCCCCCCCCCCCCCCCCCCCCCCCCCeoo5CCCCCCCCCCCCCCCCCCCCCCCCCbCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCVuoXOXXXXXO$OO>kCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCbCCCCCCCCCCCCCCCCCCCCBi$sZCCCCCCCCCCCnOO-vCCCCCCCCCCCCCViOXXoooOOO%OOO-OOOO-OOOXOXOOOO@OXOOOXXX.... .#Xoo..ooooooo.....oo.oo+OXXX;CCCCCCCCCn@#XojCNqoooXXOpBCCCCC", "OOOOoXooo#X.&jCCCCCCCCCCCCCCCCCCCCb# . ...ooO%%%O.#OXXXo.. #OX#X..oXoooooo.o.o%oooooooooO...o.oX#X+..o$kCCCCCCCCCCCCCCCCCCCCCCCCCCCCio9CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCcOOXXXXoO@=jCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC9@@o@sVCCCCCCCCCuO-OvCCCCCCCCCCCCCCCkOX#@OXO%$$OO*-O--O-OOOOOO*X@OX#OOOXX..... ##ooo..oo .o..ooo#o..oo#XXXkCCCCCCCCCCm.oo.wO.XooOOXO$vCCCC", "XXooo.oo9szNCCCCCCCCCCCCCCCCCCCCCCv+...o ooooOO+o..OOXOo.. ....X##ooooo+o...o+oo%ooooooo ..ooooOOO.#,ACCCCCCCCCCCCCCCCCCCCCCCCCCCCCw.8CCCCCCCCCCCNCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCV=XXXXoOrNCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCb%$$O#@=dVCCCCCCC:O-OvCCCCCCCCCCCCCCCCA9#oOXO@@@-@*=OOO-OOXXO-O-OOOXX@OOXX... #o+o...oo.ooo...oooo++o#@XXkCCCCksBCCCCCkXXXXXXoXOOXXXX*nCCC", "XXXXo$wmCCCCCCCCCCCCCCCCCCCCCCCCCCb+.. o+o#oOOO%o .+@OXo......O#.Xo#oooo.+oo.ooo+++ooooo#..oooooO##.sCCCCCCCCCCCCCCCCCCCCCCCCCCCCCn...5CCCCCCCCCCkozCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCVs@XXooXzCC", "oo9zCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCb#+o oooo.oooo..oXOXXX. ..oOo.#++Ooooo+oooooooooooooo....oooo&sCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCzoorCCCCCCCCCC9OqCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC9-OOXXO@OOOO-X>;+O@=0BCCCCCCCCCCCCCCCCCCCCCs=@@O@@@O*-*---XOOOXOO@X#XXOOXXXXX.. ..o.oo+ooooooo..oooo.Xoo#XbCCCCAXXooCCCCCCCCb09vCCCCCCm@oXwCC", "9vCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCb+ o oooooooo%#oX#OXoXX. ..oOO.#.oO.+oooooo+++ooooo o#.#o.++9ACCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCnvVCCCCCCCCCCcXcCCCCCCnfbVCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCqO@@@XXo0CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCs;@**XXOOOO-XOOOOOOoXXOXX..XX. . oo.O...oo#oo.o...XoXXXooXvCCCCCCC,XDCCCCCCCCCCCCCCCCCC:oXOBC", "CCCCCCCCCCCC;.O+#zCCCCCCCCCCCCCCCCb#.. . oooooOoo.o#OXXoO. .XXXoo oooooo%ooo..o+.Oo.......wBCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCk..X=CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC0-*@bCCCCCCCCZbvvCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCZi*@--X-OO*XOOOOO##oOOoXX.X. ...oo.++.ooooooooo.Xo#oXXoOovCCCCCCCCvNCCCCCCCCCCCCCCCCC0Xoo$CC", "CCCCCCCCCCCCdX.oXwCCCCCCCCCCCCCCCCvo. .oo#ooooOoo#.#OXoo#...ooooo.oooooooooo.o#+..o.o.#.rBCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCA; .oqCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC9O*@NCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCBi*-XXOXOOOOOo+#oXoOX........ .+.O+ooooooo..oo#X+#oX#XXvCCCCCCCCCCCCCCCCCCCCCCCCCCkoXXXyCC", "CCCCCCCCCCCCCkqXOXVCCCCCCCCCCCCCCCvo#.o#++oooOOOoXXoOoo.X. .ooXO..ooo%oooooo.+oo..o.o.7SCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCZ7..XXhCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCu-@@CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCAy*X***XOXoOOoXoOO....X.. . ..oo+oooo.o.o....#O#X#XXXvCCCCCCCCCCCCCCCCCCCCCCCCCn%OXO%NCC", "CCCCCCCCCCCCCCCwookCCCCCCCCCCCCCCCSo+ ++ ++oOOoXo.+O+X.oX..#XoX..ooooooooooo+oo#...wBCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCn0Xo..oZCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCsO=oCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCNy*-XXXXOX+X.OOOXX..X.. . ..oO.o.oo...o.o...#O#OO#XvCCCCCCCCCCCCCCCCCCCCCCCVs..ooqVCCC", "CCCCCCCCCCCCCCCzooCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCnkq@=VCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCbZCCCCCCCCCCCCCCCCCCCCCCCCCCCyX.@mCCCCCCCCCCCCCCCCCCCCf*OOOXX9i7X ..&fZsX@VCCCCCCCCCCCCCCCCCCCCCvX..cCCCCCCCCCCCCCCCC9ohCCCCCCCCC", "CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCV,#+X #...o.ZCCCCCCCCCCCCCCCCCCCCCCCCCCCCA5qVCCCCCCCCCCCCCCCCCCCCjo.+#@oCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCChXXoXOOO=VCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCsOO*@OXoo$uCCCCCCCy@cCCCCCCCCCCCCCCCCCCCCCCCbX.o$VCCCCCCCCCCCCCCCqXX-nCCCCCCCCCCCCCCsooCCCCCCCV@o;qVCCCCCCCCCCsX#9CCCCCCCCCCCCCCCCfXX9CCCCCCCCC", "CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCn9<@kCCCCCCCCCCCCCC0Oo.XmCCCCCCCCCCCCCCr.sCCCCCCCCCCC", "CCCCCCC@oosCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC8.XXDCCCCCCCCCCCCCC<..ObCCCCCCqwDjNCCCCCCCCCCCCCCCVu .BCCCCs=oXwCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCn,oXXXwCCCCCCCCCCCCCCCCwOOo..CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCs....XVCCCCCCCCCCCCCCCCCCCCCCC8oXsCCCCCCCCCCCCCCCCCCCCCCCCCCc@OOOOOOooXXOOO-OXXXwCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCcszCCCCCCCCCCCCCCyO@:sCCCCCCCCCCCCCCC,OO$nCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCvoXCCCCCCC7.....onCCCCCCCCCkX#DCCCCCCCCCCCCCC+.DCCCCCCCCCCC", "CCCCCCCXoXsCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCu..wZCCCCCCCCCCCCBqo .#bCCCCCnXXo.5SCCCCCCCCCCCCCCCCAd5ACCv5XoXwCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCs.XX#wCCCCCCCCCCCCCCC9oOo..CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCdX...ojCCCCCCCCCCCCCCCCCCCCCCCo#.NCCCCCCCCCCCCC5OoOo7CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCvX.Xoo@CCCCCCCCCCCCCCCCCCCCCCC+O.$CCCCCCCCCCCCCCCCCCCCCCCCCCwOOX=BCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCZgr69xCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCp***--sVCCCCCCC0-%>VCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCbXoCCCCCCf.@bCCCCCCCCCCCCCCCCs..cCCCCCCCCCCCr.XbCCCCCCCCCCC", "CCCCCCC#O@zCCCs.OO5nCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCv+.CCCCCCCCCVsOO. ..O#7mCCCCCCn$oo..sbbbbVCCCCCCCCCCCCf@.oXoowCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCZf<.sCCCCCCCCCCCCC#o..O9CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCfX..oOoBCCCCCCCCCCCCCCCCCCCCCnOO..CCCCCCCCCCCCCCCCCCCCCCCCCCm=X=mCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCZg97$ooX..bCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCy****-=kCCCCCc--*cCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCbooCCCCCCVqkCCCCCCCCCCCCCCCCCCw.+ZCCCCCCCCCCsX.CCCCCCCCCCCC", "CCCCCCCo@OvCCCa++O.owBCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC9okCCV>--gCCCCCCCCCCCCChCCCCCCCCCCCCCCCCvfCCCCCCCCCvooCCCCCCCCCCCCCCCCCCCCCC7sZCCCr.,ZCCCCCCCCCCMsCCCCCCCCCCCC", "CCCCCCC8+$vCCC0++O...@zCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCfoo8CCCCCCN9...Oo.X;vCCCCCCCCCCCCs#orCCCCCCCCCCCCCCb7. .# XoyCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCoo...;CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCq...#XXvCCCCCCCCCCCCCCCCCCCCCvoo..vCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCgOOX..oXX.X9CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCy***X-*->cu@-9CCCCCCCCCCCCCm6CCCCCCCCCCCCCCCC,oCCCCCCCCCv;7CCCCCCCCCCCCCCCCCCCCCN..sCCCCj.wCCCCCCCCCCCCCCCCCCCCCCCC", "CCCCCCC5O+vCCC&+$+..ooodCCCCCCCCCCCCCCCCCCCCCCCCCCCCCV@oX5CCCCZaoXo ++OOOOnCCCCCCCCCCCCCCCCCCCCCCCzXX..XX...X...+OOXoXOOO@$OOO*OoO#sCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCyXO@OXXOXXXXO-OXXOX*OOXXoX. ....XoXo#ooooo...XooXOX..X..OX..XbzX.osCCCCCCCj;.XXXXXXXooXOzCCCCCCC", "CCCCCCCCs++O7BCCCCCCCn####VCCCCCCCS+++ +o o++++$++O...+#X%O..oo.XXoo+OOo+%OO##ooo%%o+$O+OooO o.+$O%lACCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC9o.oOOOOOOXX#OOO@%OX#$rsbZCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCr..#..oO.oXXoooo......o....OOO@XoXo.cCCCCCCCCCCCCCCCCCCCCCn*XXXuCCCCCCC", "CCCCCCCCOOBCCCCCCCCCCCCCCd+&@7CCCCSoo+ o++o++o%+oooo##+o.$$oo. ..o..XwCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCZu009rsNCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCB$Ooo.+@@@@OO@@XO@*9sZCCCCCCCCCCCCCCCCCCCCw .X#+.o.#oooo....X.....#OO+OXoOOOXoOOXXOOXX9wfNCCCCCCCCCCqX.X5CCCCCC", "CCCCCCCvOOsCCCCCCCCCCCCCCCe@@ogCCCS++o o++oo+++o+OOoo#+#+@@OO.. ...wCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCm..X$XOO+vCCCCCCCCCCCCCCCCCCCCCCCCCCCCuX#@Oo#..#XXXOXXX*****=fCCCZg;=@O*##*O@@+OOO@@@;CCCCCCCCCCCCCCCCCCCCCwX#XO..oo.ooo....#oXXoo+@O+oXOXoXXXOOXXOXXXOXXfCCCCCCCCCCuX.XXmCCCCC", "CCCCCCCv#OsCCCCCCCCCCCCCCCk@++wCCCv+o ooo+++++o+oooooXX+@OO.o...owCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC7 OOOXOXbCCCCCCCCCCCCCCCCCCCCCCCCCCCj..oOO... o o#....oO5CCCCCCCCCCCCCCCCCCCCCCmoOO-@OOOXOOOOoo.oOO++o++ooo.. oOOOXoooO@X@oo.@OOOOo+OO..@@XO@O@@$*OXX@*=@XXO*OOOOOmCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCbs2O*********,su:@*4*=*X@@*@@*OOO-@4kCCCCCCCCCCCCCCCCCCCCCCw.oooO.ooo#oX..oo#XXX##&@++ooOOoXOXXOO-X<9wgNCCCCCCCCCCCs..XXsCCCCC", "CCCCCCCv+%kCCCCCCCCCCCCCCCM&@#7CCCvO+o o+ o+++$+OOO..OXO*@X... .wCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCZw.OOXoXbCCCCCCCCCCCCCCCCCCCCCCCCCCjXXoXOOo..ooooOOo#.oOOcCCCCCCCCCCCCCCCCCCCCV=o@OOOXooOOOOOo..ooO+$%+&++o. .#OOOOo@$O@X@ooo@O%+OoO.. .$@OOOO*@OOOXoO@+@OX@**OoOO:ZCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCNs=#*****OO*@***=@=@X+@,0q0iggsMCCCCCCCCCCCCCCCCCCCCCCCCCw#oo#.o.oX...Xo#X#XX#+&&+$ooOOXX:pkMNVCCCCCCCCCCCCCCCCC9X.XXrCCCCC", "CCCCCCCV+OvCCCCCCCCCbrVCCCC@++7CCCv@#. O++..oo++%+ooooooX$@oX.. wCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCfoXXXXvCCCCCCCCCCCCCCCCCCCCCCCCCk .#OXoO.. . oo+o..ooOOXwmCCCCCCCCCCCCCCCCCC0Oo+O%ooOOoOOOOOXX#OO@@+O+oooo o%%oooO+O+o@...+OOOoXOo..o+@OOOOOXO%OXXO@ooOXO@@OXOOO0CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCVs@=**-XX*@*@*;qgcbCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCw..OO#OOO#oX...#X..#+@&+&#oXXXkCCCCCCCCCCCCCCCCCCCCCCjXXXXXiCCCCC", "CCCCCCCCOOvCCCCCCCCCa+oOOOOXXoOOX,ikZCCCCCi@*=@=*cCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCwoO.OO+o.o.oX#@ooXoOXXXbCCCCCCCCCCCCCCfscNCCCCCCCCCCCCCCCC", "CCCCCCCCoOOOCCCCCCCCCCCCCCCVbVCCCCvooX .& o#..oOooOo....wCCCCCCCCCCCCCCCCCCCCCCCCCv0oooo#oo...qdvCCCCCCCb.o#XbCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCAd$##@oo.ofCCCCCCCzw@@@+.+OO%o%%%%+oo.+%OooO+OOOOXX.ooO++oo++ oo o%+oo%o@+OOOoo+@O@@X#oXoo+@O+X*$@%OO*XXXOXO@O@OOOOX*X*OO@*pCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCm5OO--OOOOOoXooOOOO**OunCCfO@@=*=qCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCwXXo#..ooo.X##.X.oOoXoMCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC", "CCCCCCCC<#o.bCCCCCCCCCCCCCCCCCCCCCboX#.#o. ..o.o%ooO ..wCCCCCCCCCCCCCCCCCCCCCCCCZwoOoooOoXOwzCCCCCCCCCCCb oOXDCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCk##o o+O#$wACCCCCCCCCCBu<%#%OoOooo+%$o..%%OooOOOOOOXo.ooO$$%oooooo o+%ooooo@OoXO.O+$OO$OOOOoo+O@@o@-@%O-XXXoX@OO@OO@OXXO*@OO***NCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCs9060q0099XoXX#ooOO**OXX,5OO%-=*-cCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCeXooXXo+oo.XX..#@OoX@bCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC", "CCCCCCCCao+.fCCCCCCCCCCCCCCCCCCCCCv#. ++ ..OoXoOOoO .rCCCCCCCCCCCCCCCCCCCCCCCCj#.oooooorzCCCCCCCCCCCCCCb.o+oqCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCq## <8scCCCCCCCCCCCCCCCCk5$+oOo%+$%%+oo+O+OoO+OOOOX..oO+$$+ooo oo o%ooO%oOOOOO.OO$O$Oo+OooX@O@@o@%$%+OOOXXO@O@OXO*@X@O**OX=*-yCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCBbsr$XXO*OXXOOO%=***=CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCwooooooo.X#XX..#ooXokCCCCCCCCCCCCCCCCCCCCCCCCCnCCCCCCCC", "CCCCCCCCNo+.0CCCCCCCCCCCCCCCCCCCCCvO.. ++..oooooOOoo wCCCCCCCCCCCCCCCCCCCCCCCN7...oOo%wNCCCCCCCCCCCCCCCCV oOo,CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCmwooo+$&%+oo+OOOOo.OX*-OoX.OOO+$oooooooo o%%ooOoOOOOO..OO%OO.ooOo#++@&@oO@%O-OOOoOO@@+XO*@XXXO*OO***OVCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCmu>XXXXXOOOO@*OyCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCwooooo.X.o#oX.oOooOXXXX=0099sssssssssssu995XXXCCCCCCCC", "CCCCCCCCCw+o BCCCCCCCCCCCCCCCCCCCCS++ ++o ooo#o.OoowCCCCCCCCCCCCCCCCCCCCCCCf%o...o.sZCCCCCCCCCCCCCCCCCCC+o%XomCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCsO%$$$O$+o+%O+o.o+@*O*oooO%++++oooo++o o%%%oO%+OOOo.#XO%%Xo.Oo.o@O+@@@O*O%=O%oXOO@-OO***-OX#*XX**-OfCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCcr.XOXOO@***kCCCCCCCCCCCCCCCCCAcCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCwXooooo.#ooo.XX.#+XXXXX-XOXXOXOOoXOOOXXOXXXoXCCCCCCCC", "CCCCCCCCCN+ kCCCCCCCCCCCCCCCCCCCCb+oo +oo ooooo.O.wCCCCCCCCCCCCCCCCCCCCCCZqo.o...wACCCCCCCCCCCCCCCCCCCCCq#@ookCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCooOOOo@@O@OOozCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCw.o..XXvCCCCCCfXO9CCCCCCCCXoo=VCCCCCCCCCCC", "CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCboo.#+wCCCCCCCCCCCCCCCCCCCCCCC5o...wCCCCCCCCCCCCCCu..o..5VCCCCCCCCCCCCCCCCCCCm+oOO=mCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCq+O+$$$$$%$..ooOOOO.O@@+@@@#Oo$$$$Oo++++..O%%O-OoO$OOOooO++%.#O+O#oO@OOO+%+%O@OOOOO$OO@OOOXXXXX-OO*@oXXX.0CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCw@@o@OOO@@+@OOX5jnCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCwX. ..vCCCCCCV$XsCCCCCCCC9XX,CCCCCCCCCCCC", "CCCCCCCCCCCCCCbbbvCCCCCCCCCCCCCCCCb...#wCCCCCCCCCCCCCCCCCCCCCCCsXo..ooXX#...o@@ooo. o+oOo+o.O+OO+++++&@+$+.%+O@@$%%%+Oo...Oo..oOOXOO+#O@@@@%oooo+$ooo+++$$O+$+$$Oo+@O++ooooooOOOOO+O+OO%OOXOOOO@@XOOXXXOXX-O-OXXO.. OOOOOOO**-OOOOOXXXXX+OOO-OOO@X.XoXXoXXoo,bCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCz#oozCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC", "CCCCCCCmf;O.o+++#o #++7fbCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC@oo.oXX.o+@+wNCCCCCCCCCCCCCCCCCB<...#rCCCCCCCCCCCCCCCCCCCCCCN7#oOO=zCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCb,#XX#XXO. .#@@Ooo oooo.oo.o+oo+O+@+$++$%o$%+$$$O$O@Oo..OoOOoOO-OOX@#X@&@@4OOoo@@+o++OO$@O@=@$$XoO$@+@#oOOO.O%O+o@o@oOOOOXoO*#**XOOXOXOOXO*@#*OOX..XOOOO%OO--OXO-XXXXXoXX@O--OO-X.XXoooXXmCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCbX@@@+Xo#,MCCCCCCw@#+OO....oooo. + .#X...oo..vCCCCCCCCCCCZznCCCCCCCV@oo..O#XCCCC", "CCCCCCCzo.o CCCqo..ooo&VCCCCCCCCCCb+ #o..+ooooXo..##XXXXX...ooXoX+nCCCCCCCCCCCCCCCCvq..sCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCyXOOOoXOOX$nCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCs$OoXOOoOOOOOOOOOO$Oo@$;$$+$$+++@#o@@@OO@OO=$++$$$+O+++%ooO=@Oo@@@%=4X.@@@4=@-OOOOOOOOOsCCCAvzO+OXOOO%OOOOOOOOXXXXXoO*O$zCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCuOOO@X#X...oOo@+++oOOOo...o..oo.+.. XoX.oX. bCCCCCCCCCCCCCCCCCCCCCCcXXX.XX.VCCC", "CCCCCCm@o... ....o ooo nCCCCCCCCCCS# ###+.oO#ooXoo.#ooXXXXo .ooXo@nCCCCCCCCCCCCCCCCCCCCbCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCb=O%OO+XOOnCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCq$oXOXOOOooOOOXoO%X.@@$$$$++++%O#@o*OoX=@+=%$O+$$+%++%+#o@@$O@@+@O*@OX@@*==@OO@-OOXXOqCCCCCCCmw$oOOOOOOO-OO-OOOOXXX%OOkCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC0OOOXo#..Ooooo++oooOo....o..oo...o.ooXo..X.cCCCCCCCCCCCCCCCCCCCCCCCr#o##X.vCCC", "CCCCCZ;.#oo..#..&jSbq+ fCCCCCCCCCCb+ #o +o+o+o%oo. ++oOOXX...#XXorCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCm5*OXXOObCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCV&oXOoOOOoO#OOXXOOO.@$$@O@+@@@+ooo+%OoO*OO@OO+O$$+O++@++o%O+O@@o@O-@XXo@==@***@OOOOo=VCCCCCCCCCCNvv,OOOOOXXOX-X=999qgNCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCV5OoXoX...XOOo@+ooOoooXXXX.XXo...o.oo...o. bCCCCCCCCCCCCCCCCCCCCCCCBo##oX.bCCC", "CCCCC8.Xooo .owCCCCV$ iCCCCCCCCCCb+ ### ooo+oooo. +o.oOXX. .XXXoorCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCVyOo#OOCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCmOXOOO$Oo#ooOOoOOO.$$$%O@@&@+$+o+O%$@XOOO@O+o#@$OO$&$+o+$+oO=@@@**@OX#O@4@@O@OOO@O@mCCCCCCCCCCCCCCCc9O-XXoOOOkCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCvOoOo.....Xo+o+ooOoooXXo#X..#.o.oooooo....bCCCCCCCCCCCCCCCCCCCCCCCCsXX#.XbCCC", "CClw$oXo.o...&kCCCCCCk. .qCCCCCCCCSo . . ..o+o$oo. +..OOoXX...XXo..wCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCqooO,CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCDOXX=O$OXo.oOoo%OO.O$$OO@@$+$++O++@=@oO@$O$$+o@@#o@O+#o+$$+%&@O==@+XXX@=&@O@@OO@@O-uCCCCCCCCCCCCCCCCCyOOXXOOkCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCNOoo.....XoOooOoooXooXoo#X.XooO.ooo.. .O.vCCCCCCCCCCCCCCCCCCCCCCCCVooXXfCCCC", "w+...ooo.oo.DVCCCCCCCC&..#CCCCCCCCS. .. . .oo+++ oO..OOXo...XXoo. .rCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCNXXowCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCk+OooOOOXoX.X$Xo+OOo+$%$+O&&$$$+OO%O$@=O@$O%$+O@OOo##ooo++&%$;$O+4=@OO@O@@@OX@OXOOOO*kCCCCCCCCCCCCCCCCCyOXX6nCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCOoo.. ..XoO@OOo@OoOXXoX#X.X#.OO..o o. .+OvCCCCCCCCCCCCCCCCCCCCCCCCCyoowCCCCC", "o..ooXoooo.8CCCCCCCCCCs .oNCCCCCCCbo.. .o .o+oooo .oo.OOX....X.oo.. wCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCbr9mCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCm$@%oXOOOOOXXO=ooO@+#O$$@@@&$$$++Oo+o$@=-@=O+%+++Ooooo.o.+$$+=4=$@=@*OXOO@@@OO*XXOOO-*=mCCCCCCCCCCCCCCCCCuuzCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCXooo...X#o@oooooOOXooooOoo.Xooo..o.o# ..XbCCCCCCCCCCCCCCCCCCCCCCCCCzoowCCCCC", "o...oXo#.+lCCCCCCCCCCCm# #nCCCCCCCb ## .+++%oo..oo..O.. X.Xoo....+wCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCV$O$@ooOOOOXooO@OXXOO.@$++@&@$++%%OOOOO$&=O$@O++O%+oooo+..o++&&;@O@@=OOO+@@#XOOOXXO@OO**:VCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC=@XX.. XXooXO#o@OO#oXo#O#X.X.ooo. oo...obCCCCCCCCCCCCCCCCCCCCCCCCCCo#onCCCC", "oo..oXo8DACCCCCCCCCCCCC .OCCCCCCCCb.# . oo+%++oo.....oO.....X.Xo...o+OwCCCCCCCCCCCCCCCCCCCCCCCCCCsosZCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC5O@$OXo=OOOX.o@@OOO@+oOO$@@$++%++$+O+OO@$%O#%oOO#+%oooO+o. +%&44&@@=@@@#@@@@@OOXXXOOO-*O=3CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCNyXX...X+oooOo@@O#ooo#o#ooX.o++. .o#o.oXXMCCCCCCCCCCCCCCCCCCCCCCCCCC0oo@NCCC", "Ooo55zNCCCCCCCCCCCCCCCCso#CCCCCCCCbo. + . +%o%oo.ooo..o... ..Xoo. ooooowCCCCCCCCCCCCCCCCCCCCCCCCCm<.. 8799sCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCyOO@==OX-=Oo..@o@%OO@Oo+@O+@$O++$++Oo%$O@@%OoO+O.+$$%ooOO#o.+++=&4@@@@O*@@@+O@O-OOOO@O*X*=-yCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCboX...#Ooo+o#@OOooooooXoo.X.oo.o..o#ooXXvCCCCCCCCCCCCCCCCCCCCCCCCCCuoookCCC", "OowCCCCCCCCCCCCCCCCCCCCCszCCCCCCCCS. ##.# .+++o+...oOXXO. ....Xo. .oOooowCCCCCCCCCCCCCCCCCCCCCCCCCV<. #.#XovCCCCCCCCCCCCCsuCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCfOOO@$@OO$=ooX.@O+@O%@O#@@O@+O+OO@++OO@@O@OOOX$oooo$$OOo@+o.o#@@@&4@@@@O@O@@+oOO@O**OO=*O**--fCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC<......#o@O+@@ooo.o.ooO... ooo.... oXXXbCCCCCCCCCCCCCCCCCCCCCCCCCCsXOXsCCC", "owCCCCCCCCCCCCCiwNCCCCCCCCCCCCCCCCb ## o+%++o. .XXXXX... ..X#....oo.oO wCCCCCCCCCCCCCCCCCCCCCCCCCCw o#oovCCCCCCCCCCCCx+ogCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCvOO==$@OXX$=@um@+O@O$O@Ooo@@$O+++@@ooX@+@O@+@Oo$Oooo+%OooOOoooo@@@&@@#$O@$O#@+OO=mu@@OO@@O**---cCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCeOX....#++OOoo@OX.Xo.oOo.+.ooo......XoXXbCCCCCCCCCCCCCCCCCCCCCCCCCCsXOosCCC", "wCCCCCCCCCCCCCC.o.NCCCCCCCCCCCCCCCM. . .oo ++ooo .#O#oOX.....Xoo...+OooO.owCCCCCCCCCCCCCCCCCCCCCCCCCCk@..X.dCCCCCCCCCCCmX..;sDzCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCm=%O@@&=@oX@;kCCV9+@=%O%OX@@*$O++++oo@O@@$O@+O@@;OoooO+Ooo++##o+@@@&=@#@@+%OO@oo0VCCk;*O*@@***--:mCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCyOO#.X..O+@OO++OOooXO.+Oo.o.ooo.....XoXXXbCCCCCmssssw;oOoOXO@OOo@OXoXXoXsCCC", "CCCCCCCCCCCCCCAo#o7CCCCCCCCCCCCCCCb # oo++oo. XoOOOX... .XXX....+O.ooo..wCCCCCCCCCCCCCCCCCCCCCCCCCCVs@X.=MCCCCCCCCCCZ..XooX.zCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCV5OOO@@&@@Xo;mCCCCCs@=OO@OoOO@$+OO+o+O+O@@$$@+@@@&OooO%%OoOOOoo#@@@@&@@+$@@+OoO+sCCCCCm=OO@@@***-X6VCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCy@++OX...+O+OOo+OOOooOo.+oo.oo+o..X...o..XbCCCCC$oXXXoXXXXOOO+XOOOOOXoXoXDCCC", "CCCCCCCCCCCCCCb.ooozCCCCCCCCCCCCCCb. # oo oo+ooo. .+o@OX.. ...XoX..X@O..o.+oowCCCCCCCCCCCCCCCCCCCCCCCCCCCmX. lCCCCCCCbD$X..oo. @BCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCr$@OOO@&@+#5VCCCCCCCn9oO@OoOO%$oo+Oo++oo@@$$@+OO;&OOoO@@@@$+O.oo$++@@$$+$@@+oo5mCCCCCCCV5o@@**==--OrCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCy+@O+OX...XOOOXoo@OOoX.oooo###ooo..o#X..o.ovCCCCn#XXOOXX#XXXoOooXOOOOXXX..sCCC", "CCCCCCCCCCCCCCm#o#o.9kCCCCCCCCCCCCb # #o+o+o+o+ ...OX@@X.X....Xoo. .+O+O+OO.oowCCCCCCCCCCCCCCCCCCCCCCCCCCCw.. rCCCCCC,o. XX.oo..X5CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCs$$$OOOO&@OwCCCCCCCCCCCs=$OO#$O*o#++$%+@oXO@=@@O+&$O.++$@$@@$+.o+$O+@@$O+$@@O@sCCCCCCCCCCCi@@**;=OOO#uCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCyO@@O@X....#OX#OoO@+ooo..oooo#.+ooo oX...ooovCCCCC$oXOooXOoooXXXXXXsCCC", "CCCCCCCCCCCCCCCq<#o.#fCCCCCCCCCCCCv...#+ oooooooo .OXO@o.X. ...X....oX.++OO...oeCCCCCCCCCCCCCCCCCCCCCCCCCCV; DCCCCCC7o...oooXX...nCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCk+@+++ooo$+jCCCCCCCCCCCCCZi@O+@O$OX&$++$@#oo&$$o@@@OO+%#+@$$+%OOoO&@@@@#@$$@+iACCCCCCCCCCCCCfO@*=*OOOOXkCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCMOO@O=pVCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCy@O@@OooX...#@oXOoo+O+oXooo#o##ooo. #ooX..OoXbCCCCN%oXhCCCCCCCC9@5vbbvvvvvvbnCCC", "CCCCCCCCCCCCCCCCCCnvfCCCCCCCCCCCCCv ..o++oo+%oo .OXoOX.. ....XX..Xoo.OOoo.o..owCCCCCCCCCCCCCCCCCCCCCCCCCCc vCCCCCCCu...XXoo.X#kCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCy@@+@*@@#XXX ..X#oooo+ooooooooo...X#.....X#..XOvCCCrXoXVCCCCCCCCC9.7CCCCCCCCCCCCCC", "CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCSo ...o.OoOO...oXXXX.X...XXoo . .ooo+ooooo.++owCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCu..XXX%jCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC5$OoO+o@OrVCCCCCCCCCCCCCCCCCCCCCCVk5+#%+$+O#OOOOOoO%@&$O.+$+@O$++++&$&@$uVCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCV,.#ooXooooo.o#+@;q9,o$fCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCV=*@**@@@***@*O@@&*4sACCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCm.oXbCCCCCCCCCCCCkoOO,CCCCCCCqXOX", "CCCCCCCCCCCCCCCCCCCCCCCCCbCCCCCCCCCCCCCCCCCCCCCCCCCCCCCmX..jCCCCCCCCCCfCCCCCCCCCCCCCCCCCCCCCCCCCCCVj<+@OOo XOwCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCkOO-@rZCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCBCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCf=+XosCCCCCCCCCCCCCCCCCCCCCCZks5oOOVCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCrO***O4hCCCCCCCCCCCCCCCCCCCCCCCCCB,oO@O$VCCCCCCCCCCCCf@@#oOwCCCCCCCCCCCCCCCCCCCCCCCCCCCN.XoO.XooooX.XoXXXXoXBCCCCCvOO", "CCCCCCCCCCCCCCCmbCCCCCCb..ovCCCCCCCCCCCCCCCCCCCCCCCZuOO@osCCCCCCCCCCCCCCCCCCCl&+$VCCCCCCCCCCCCCCCCz$#OOfCCCCCCVsX.#oOwCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCVwo.oX%bCCCCCCCCCCCCCCCCCCCCCC5ooXOo.#+#OObCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCw+o$CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCVCCCCCCCCCCCCCnq#OoOOX.vCCCCCCCCA$ .OXiCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCb>O#@bCCVkqX@OooXOO%@5CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCwOooo.BCCCCCCCCCz;ooXo9fmCCCCCCCCCCCCCCCCCbbVCCCCCCCCCm;@@@**@@@OO@@@@&@&++o.+oO@+@4@O@*=*&4@==@@=@@@@@@@O+.#O#+%#@oO#oOO+OoO+++OO+++OOO#Xo+o#,CCCCCCCCCCCCCCC9uCCCCCCCCCcXXO9CCC", "CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCS#+ +o++$+++o.#oO*@@XX#... .Ooooo#OXO@@$O.ooo..o++oooo..+o..+%o+#oo+o+$%o o%OOOX@+@@@O;VCCCCCCCCCCk;@O0CCCCCCCCCCCCCCCmks9oOo.+qVCCCCCCso##o+eCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCs@@O5NCCCCCCne@oo+OOO@uCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCiOOOXXsCCCCCCCVg<##oo;sACCCCCCCCCCCCCCCCCCCs@@@BCCCCCCV,@@&@*@*@@OO@*O@4@&++X#+OO@+@&@X4**4&;@=@@@@*@@@**+@#..oOOOOO+++OOO+O+O++OoOoO++ooo#o@O#kCCCCCCCCCCCCCCCsbCCCCCCCCCC9XX9CCC", "CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCS#++ ++ o$++%o#X+@@O@O#O.. .#+Oo.#+#O+++ooOoO.#+++ooo ..o. .+$o++%++o+++o ooo-OOO@@=*@Oo6ZCCCCCCCCCCVbVCCCCCCCCCCCCCCCCCCCCVcw;..sCCCCCCZ+oO+++rCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCm5@@@gCCCCCCCCCCZkqCCCCCCCCCCV=vCCCCCwX..wCCCCCCssgCCCCCCCCCCu@@@@oX@#X#**#@@**@@*#@#@*4@@@+#..#o@@++@4*+44@=@&4**@@=@@O@@@Oo...oO+@#O@+++OOoo+OoO..oO+++O.oXooXbCCCCCCCCCCCCCCCz@;CCCCCCCCmCCCCCCC", "CCCCCCCCCCCm&@fCCCCCCCCCso0CCCCCCCS+ +# o+++++OoO+@OO*XX......+O+..+++++ooo+++o .$++&+++#.#oo.++++ .+OX++$#.....@oXXO@X.oOooOX.XX7CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCs=kCCCCCCCCk..ooO++.. wCCCCCCCCCCCCCCz&O+#8VCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCZe###@@+oo+@#.+&7ZCCCCCCCCCn=O=mCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCwXO-@OO%=*OkCCCCCCCCCCCgVCCCCCC9.o@CCCCCCs@@CCCCCCCCCCd@@++o@@#***@44*@@#@*@@4@@@+4&+o. #oo@@O+&4@@=@@@@&=@@O@@@=@+Ooo....o+o+O+@OO+Oooo.o...o.o.oO.@oo#.bCCCCCCCCCCCCCCC9XofCCCCCCf;CCCCCCC", "CCCCCCCCCCCd&@dCCCCCCCCCs+@VCCCCCCS+#+###++$Oooo.OX+*X#X.. . .ooOOoo+%&@ooo+++oo .+o++&+++.oo. #+++#++#X.%$#.. .ooo..oO..oOOOoooXo DCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC:O$mCCCCCCCC$.ooO+++...wCCCCCCCCCCCCu#+X+wCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCq+Xoo@+o#O+@+o+$&xCCCCCCCCCCn5o$kCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCwXX*OO%=O=*,CCCCCCCCCCCCCCCCCCCCj.o+ACCCCCkq0CCCCCCCCCCg@$@+o+X##@@@@@*+O**@##4**44=@+oX .#O@+O+&=@&@*@@@@@@@=*@@4@@oOo#.ooo+o#+@+O.OOooooo.oo.O#oOO.XoX#.bCCCCCCCCCCCCCCCi.@NCCCCCn@XNCCCCCC", "CCCCCCCCCCC8+&uCCCslCCCCr+@7VCCCCCS+#+###@@@%oo.#OOX@@@....#.##Oo+.+++&++O+++$+...++++++o#oX...+#@&o+&+@O@+O.....Oo.oX##.XO#o.X.o...nCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC5XX$VCCCCCCCx..o%++o...#wCCCCCCCCCA<#.o+fCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCBe$.X#+,88$@#o@@@kCCCCCCCCCCCZ@X@kCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCw#XOOO@O=-==kCCCCCCCCCCCCCCCCCCCCvX#+bCCCCCCCCCCCCCCCCCCs4=+OO@O#O@4@4***X*#*#*@*@@4=OOOO. #o@@O+@$@;@=@@&@@=@=$+@&$+OOOooooooooo@+OOOooooo..o..#OXX+XoOOoXbCCCCCCCCCCCCCCCC;qCCCCCN%XobCCCCCC", "CCCCCCCCCCC;#+8CCd#+zbbc;+&+7VCCCCb##+##@$+$$++.OOOO***@.#.#.oXOO..+&&++OO++++.+..+#&o++XX.X.+o+O+&+&++&+@oX..##oo.oXoXX.oOOo...o...X#o+@@,kk&#@DCCCCCCCCCCCCCCCCCCCCCCCCCCCwOO-X*XXOXOXXoXoooouCCCCCCCCCCCCCCCCCCCCCzsBCCCCCCCCCCCCCCCCCCNX@OOOOOo..OOO+@@@===@@@*O@@@OO@OOOXO#......o+o+OO@#@@@oOOOOo=@+@o@o@@o+Oo.+@@#O+%++++Oo++O+o..OOoo#@+@oobCCCCCCCCCCCqXXoo#oX*6mCCCCCCCCCCCCCCCCCCCCCw....O@***XOXX-O-OX..X;CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCyOOooOoO%+o..#XO****@4=@@*X**OOOX@*@O@OOOoOO..#+OOOOOOoOX@@OOO@O=OOO@oO+#@$@..o++$@O++ooOooO+.O+%+o.OoooXo..7CCCCC9oXX@CCCCCCCCj$XCCCCCCCCCCCC", "CCCCCCCCCCCCCCCCCCCZ&@++dCCCCCCCCCb#++@+@++@++ooOO+.OO@o. . .O@O%o.o#O$O@+Xo++OXo#+$@&$@OOo@##.+++++++++o.OOoX oO=OO@oOOOX##@@XX... oooOOOOX$VCCCCCCDX.XoXXfCCCCCCCCCCCCCCCCCCCCCCCCCCCa..Ooo...O+oo##o+++@oOOyCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCV9X@*=mCCCCCCCCCCCCCCCCCCCpXX..oO+*@--OOOO-OOX..XuCCCCCCCCCCCCCCCCCCrwCCCCCCCCCCCCCCCCCCCCCV$OOoOOOO++o.o#X*@#@**4=@@O-*O-@OO@=@@-OOOoXX. #OOO@Oo@@oo*OOoO*O-O-@@@O+#@@@. +++$+O+o+OOooO++.+O+o.oO.OOO#.7CCCCCwooo7CCCCCCCCCn9CCCCCCCCCCCC", "CCCCCCCCCCCCCCCCCCl&o++9ZCCCCCCCCCb#+++++Oo@+#o.@++o#O@o....#+@O%o##+$$#++O@@@+X.#+$@&@@O@oo#..++++++ #o#+$@o..ooOOOoOOoooooO*OX... .o.oOOXOXofCCCCCCC#@DssrCCCCCCCCCCCCCCCCCCCCCCCCCCCCnoO.o.X.o.ooooo o+@@ooXXeCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCr@@*=mCCCCCCCCCCCCCCCCCiXXO..oOoOOOOOOOOOOOXXXXmCCCCCCCCCCCCCCCCCC7XgCCCCCCCCCCCCCCCCCCCCxOOXoOoO+%%oX..XXX*O****&@@XXO*OOO**@@OOOoXXX. #+##OXO@ooX@@Oo@@O-OOOO@$@O$@# .+O++++O.+OOOoo++.O....O+.oXoX#7CCCCCn$oooZCCCCCCCCCCCCCCCCCCCCCC", "CCCCCCCCCCCCCCfd8<#O#5NCCCCCCCCCCCb###++++++++o#++#XX@@@##.#X+*OO#X#@@@o+.+$O+oo.#++%+o+$%OO...+++O+o#ooo+++O. oOOOO+OOXOoooOOXX. ..oXXOOOooo;CCCCCCCnnCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC<#oXXX.O..ooo. +++ooOOO+eCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCk@$%=mCCCCCCCCCCCCCCCi-OXXo.oOXOo%OOoOOXOXXX.*CCCCCCCCCCCCCCCCCCC9o#NCCCCCCCCCCCCCCCCCCC.#$CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCChO*Oty***X*@#**-OOXoXOOOOX-OXXOoXXO9CCCCCCCCCCCCCCCCCCCCCCCC,.o9CCCCCCCCCCCCCXXObCCCCCCn.ooowCCC7oO@zCCCCCCCCCCCb o.oOOooO+OooO+oO+OoO++$ooO+OOOyCCCCCCCk+@@#@mCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCfO**XOXOX*##*-OOX .#+OOO-OOXOXOOOzCCCCCCCCCCCCCCCCCCCCCCCCC=o.qCCCCCCCCCCCu@@ooX#@*OOO-OOOXooOXO@@*-OXXXXXXXXO-XOOOOOOXOXX. ..+OO@+O+#OO+@@O@XO*OOOOX#o+Oo@@O...+Oo++@+OOoooooooX..o#oo..#bCCCCCCCCCCCCCCk@XkCCCCCCCCkoXoXCCC", "CCCCCCCCe#$@@+++o##&@smCCCCCs#uCCCM#+# #oO$O+.. OX..o@O#o. ..ooX...#@@@oo+$O+Ooo #+$+oX#@@@#.oo+++$@&++ooOO#. X+.oo..o...XoooXXo. ooXOXXXXooXoXX$CCCCCcsfCCCCCCCCw.oOnCCCS#@@sCCCCCCCCCCCVoo.oOOoOoO+o#OOOOOOOO+$OOooOOXoowCCCCCs@o@@@mCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCiOXXXO@*XX*#*-OOX. ooooOOO#OOOOOXZCCCCCCCCCCCCCCCCCCCCCCCCCso..VCCCCCCCCCC,OOOooX@=OOOOOOoo@OOO*==*O**X-*-X-XXXX*XOOOO**XX.. ..oO@$O++@@+XOX@X*@OXOOoXo+Ooo@o .o+Oo+@++.Oo#o+ooo...oooOO..vCCCCCCCCCCCCCCCVbCCCCCCCCz$oXoXmCC", "CCCCCCCm#o+++++@Oo#iVCCCCCCCso8CCCb#+ oOO@@#X..+oX#++ooXo. oOo.X..+@&=@+O$$%+o###o@@#OO@OO+.#o+++$++o+#oo%O. .OOOXooX.XXXoXoXX. . o.OOoXOXooOoX..ACCCCCCCCCCCCCCCv..oCCCCCko@9CCCCCCCCCCCC,. oOoooO+Oo++OoO+OOX@@$OoXOOOo+#eAbsw@@@+@cCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCyOXOO*OX*-X*#*=OOX. ooOOOOOOOOXOX:CCCCCCCCCCCCCCCCCCCCCCCCCCV;.O..o99995hCCCCCCCCCCCCCCCk**O@@OoO$@@X+@@O++OO+@OOO*@O*XX-*XX-XOOOOOOXXX=@OX.. ..oOOOOOoo+@+O+OO@oO&@OOO@O%OOOOoooooooooOOo+++ooO...++.XoXXXbCCCCCCCv..XX........X.....DCCCCCCC", "Ce+&+@uCCCCSo.#kCCCCCCCCCCCCCCCCCCb+ # +oooo ......Xoo.. ...ooOo..++%++O+Ooo...#O++++OOoO+++.#$@$+#+++.#@o+..oXOXOXooOoo#XXXXX... ..OO%OOOOOoOOOoX...wCCCCCCCCCCCCCCCCCCCCCCCCCCA###7CCCCCCCCCOO+Oooo+ooo+++$oo+@@+&$+OoO@OO+XXoO@O@@@owCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCy+@OOo@OOO*OOO#+-X*OOO*O%OO..OOOO@@O-OOOOXCCCCCCCCCCCCCCCbDsvCCCCCCCCCCCCCCCCCCCCCD&@@@@OoO%@@XO@OO+o@o@OO*X**XOXXX-XXXXoO@oOOOXX@OoX....++OooO.o#O+OO+O@@OO@@@*O@%+OOOoo#ooooooo%++OOoooo..o+O.#oXoXbCCCCCCCvX.......X...X...XXsCCCCCCC", "CZ,@++#7fBCf+O+;kCCCCCCCCCCCCCCCCCS++#o+++.o ...O..ooo. ..ooOOo..+$$+OO%++o.. ++++%OooOOO.O+$$@+o@++oo@@O .oXOX=Xoo$o#XOXXXo... .OOOOoOOoo.oooo..X7CCCCCCCCCCCCCCCCCCCCCCCCCCCj# ;CCCCCCCCC=OO+ooo%%+o+++$o%o++@@$$O#O+O@@X#oOO@@@@o@yCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCwX@@@@+@oO@OOXXXO*OOOXOO*OOOO.oOOO@*-OO-OX-CCCCCo9CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC0@*O*@$+o%*@@+@@OO+@OO@OX*@@OOX-*X--X*@O@@OOoXXO@OX.. .o++oOO.o#@+oOO%O@+@@*OOO$O+OOOooo#oo+ooooOo+O+..o..oo+.Xo.XXbCCCCCCCN..... ....X...XXX.,nCCCCCC", "CCZ<#+#+##++#+++@MCCCCCCCCCCCCCCCCS++ +++o. .OOX....o. ...OO#..#++@O+O%++o oo O++++OooOo+oo+++$$&$+oo#++#...OOO$XXOO#.oOOOo.... ...OOOXXX.ooO.oXo...CCCCCCCCCCCCCCCCCCCCCCCCCCCCldsCCCCCCCCC0@O+oooO++o+++$+Oo+&+@&+.+o@OOOX#XO=OX@@X@*eCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCw#Xo@@@ooOXX*OXXX*X*OOXO**OOXOXoOOO@O*OOOXX9CCCCCXObCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCo@O**OO@O$$@@@@@#o#OoO@@O**X*X-XX-XXX-@@@@OOOOOO@@.. +++.+O+O++oooOO+@O@@@*O+O+OO%o..+ooooooo.O++o+O.oo..Oo.O..OXvCCCCCCCCX..O-O-uCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC", ".+OO++o##o7sbCCCCCCbd,+##XX#+++qCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCbo#++.8CCCCCCCCCCCCCCBsuscCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC8#+OosCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCZMMmCCCCCCCCCCCCCCCCCCCCCCCCCCCCCmMfu87+DCCCCCCCCCCCCCBfsfZCCCCCCCCCCCCDnCCCCCCCCCCCCCCCCCCCCCCCCNkuqsCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCNCCv=gCCCCCCCCCCCCCCCCCCCCCCCmjCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC.o.....X..,sbCCCCCCbs5oXXX.X....", " +@+o#o#qmCCCCCCCCCCCCmq.##X++#8CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCb#o+O.nCCCCCCCCCCCCCbOXX..bCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCqX##osCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC24@$mCCCCCCCCCCCCCCCCCCCCCCCCCCfXo+@+++@$smCCCCCCCCCCCCCCCCCCCCCCCCCCCCXsCCCCCCCCCCCCCCCCCCCCCnu,-O;kCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCcsCCCCCCCCCCCCCCCCCCCCCCm$OCCCCCCCCCCCCCCCmq990099997590077797998070kCCCCCCCCCCCCCCCCCCCCC......o.wmCCCCCCCCCCCCnw.....XX.", ".+@+#OCCCCCCCZ=**XX@=bCCCCCCCCCCCCCCCCi+@@#+dd@+X.++CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCyO@@OOO@+XO*@X@OCCCCCCCCCCCCCCCCCC9OX;CCCCCC5OOOoXCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC", "CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC#.o8CCCCCCCCCCCCCCCCCf++ c #2BA02B", ", c #5AD25A", "' c #81DD81", ") c #A7E7A7", "! c #124412", "~ c #144A14", "{ c #175517", "] c #144814", "^ c #0E330E", "/ c #010401", "( c #0E340E", "_ c #1E6F1E", ": c #3EA63E", "< c #40B140", "[ c #399639", "} c #0E360E", "| c #64D564", "1 c #185A18", "2 c #144C14", "3 c #6ED86E", "4 c #1A5F1A", "5 c #77DA77", "6 c #134713", "7 c #124112", "8 c #4DC24D", "9 c #3CA03C", "0 c #0F380F", "a c #0C2C0C", "b c #124212", "c c #081D08", ".............+@#@+.....@@@@+....+#$$%#@....@$%#@....+@@+..................+@+......@$%%#+...+$%%#+.....+@@@................................................@$$#+", "............@#%&$@...@#$$$$##...@%&**&#@.@@%*=&##..@@$$$#.......+@@......@$$##....@#&-*$@...#%=*%@....@#%%$#......@@......................................@#**$@", ".+..+..+..+.#%-;*$@..@%***=&#@.@#&=--*%@.#$*>;=&#@+#%*=&$@.+..##%%$@.+..@#*=&#@.+.@%*-*$@...@&=-&$@.++#%->&$@.+..+#$#@.+..+..+..+..+..+..+..+..+..+..+..+.#%->&@", "...........+#*>,=$+.@$&--->*%@@@%*>>>=&#@$*->;>*$@+$&=-=%#...@#&=-*$@...@%=>*#+..+#*-=%#.+..@$*-=%@++@&*>;=*$@..+$*=%@...................................+#*--%@", "..+..+......#*;,=%@.+$*>>-;*%@+$&-;,;-*#@%=--->*%@@%*--=*$@..#&=--=$@..@#&--&#...+$=-=%+.....#&--%#.+#*-,'>=%#..#%->*#@..+..+..+..+..@@.+..+..+..+...+...+%=-*$@", "...+..++....#*;'=%@+.$*--->*$++$*-;;,>*##%=>--=*%@@%*---*%@.@#&=-=&%#@..#&*&%@...+%->*#@.....#%-;&#.+$&-;';=%@@@#&>;*%##..+..+..+..@#$$$$$#++..+...+....@#&--&$.", "........+..@#&>,=$+..#%&&&&$@+@%*>;>,=*#@%*>>>-*%@+#&=--=%#++$*>>=*%#@..+$%$@..+.+%-;*#@.+...@%-;&#..#&=;,>*%@@%*-;'>=&#..........@%*=====&#.....+...+..@%*=*$@.", ".+.+........@&-;*$@..+##$##@..+%=>;>;=%@@#&=--;-&#@#&->>=&#.+$*>;>-*%+@..+++.....@%-;*#...+..@%-;*#..#%=-->*%@@&>;,',;=#..+.+@+..+@&;>,,;;=#.+..+++....+$*-=%#@.", ".....+.+.+..@$->&@.........+..@%>,;,,=&#@$*=-->-*#@$&=>>-*%.@$=>;;;-&@...........+%=>=$@.....#&->&@@.@%***=&#@@$*=;,==&#...@$%$@..+$**=***&#...@@##@.+.@%==*$+..", "............+$&*%@.+..........@%->>>>*$@@%=>>>;-&#+@%*---=%@@&=->>;-&#.....+.+...+$*-=%@..+..$&--%@..+#$$$$#@..##&=,*%#++.@#**&#++.@#$$$$##+...@&&%@..+$*>*%@...", ".+......+.+..$&=$@...+...+....+$=>>>=&@++$*-;;-&$@.+#&=--=$@@%->;;;>*#@.+.....+...#&=-&#+...+%==*%+....@+@++....@%->&@@...@%->*#+....@@.@..+.++#*-*$+.@%=-*$@...", "...+.+.......@&=$@....+...+...@$*->-=%@.+#$%=-*$@...+$***&$+@$&=>>--*#...+.+......+$*-*%@..@#%-=&#..............@#*=%@...@$&-=%@....+.+........$&=*#+.#&==%@.+..", "..........+..@#$@...+.......+..#&=-=*$@...+#&*%@.....#$$$#@.+@$%%%%%$@.......+.+...@%=&#@...@%*&#@..+........+...@#$@++...#&*&$@+........+.....@$%#++.#%*&$@....", ".+...+.+.......++.+....+.+......#%%%$#.....@$$#++....@@@@@.....@@@@@++.+..@.+...+...###@....@@##@++...+..+.+..+..+.+......@#%#@...+...+....+.+...++...+$%$@..+..", "..@@###@@..+@@@@@+..+.@####@@...@#$$#@@.....@##@@.+@@#####@.....@###@.+###$#$@+..+@@###@@+..+###@@.....+...........+..+.+..++..................+....+...@@@@+...", ".@#%&*%$@..@$%*&#+...@#%**&%#@@@$%**&%#@...@$&&%@++#%&**&&#.+.@$%&*&$@@%&****&#+.@$%**&%#+.@#%&*%$#.+....+.+...+..............+.+...+..+.+.......+.....@#$&%$#@.", "+#&=---*$@@$*>;>%#..@$*=-->*%@+#*=->>*%@.+.#&>>=#+@$*>>--*%+.@#&->-=%##&=----=%@+$*=-->*%@.@%=-==*%+.........+......+....+..@@#@@.+.....+..+@@##@@..+.@#&=>>*%#.", "@%=->>>=&#@$=>,;*#..+$=>>>;-*#@$*>>>;-*#..@%=;;-%@@%=;>--*$+.#%=;,>=%@#*=-->>-%@@%=;>>;-*#@#*>>->-&@..+@@#@....+.+@@#@+...+@#%&&$@.@@@###@++@%&&%#@+..+$*;;;>*$@", "@%--===-*#+#%*>;&#@.@$*===--*#@$&**=>-*#+@#&->;-%@#%=;>-=*$@+$*>>-=&$@@#%%*=-=%+@%--==--*##%=-==>>*#..@$&&$@.....@$&&$@..@#$&=--&@@#%&&&&%$@#*-==&%#@.@%*-=---%@", "#%--**=-*$..@%-;*#..+#$%%*--*#.@$%*=;>*#.@$*>->-%@@%=;,;>=%@@$=,>-=*$@.@#$%==*$+#%=--=--*#@%=-=*>,*#+.@&--&@.+...@&->%@@@#%==--*$@@$*=-=-=&#@$*->>*%$@+#&=*=--%@", "#&-=&&=-=#+.@%-,&$+..@@$&=;=&#..#%=;;-*#+#&=>-;-&@@%*=->;;%#@%=;;;>>%#..@#&--%#.@%->;,;-*#@%=>-=;;*#..@%==%@...+.@%=-%@.#&=;-=&%@@@&=>>->-*#@+$&->>>&#+@$&=>>=%#", "#%--*%=-=#+.@%-;*#@...#%-;-&#+++@%&---*#@%-;>-;>*#+#%&&*>;*##%=;>-;;*@..+$&-*%+@#%=>->>-*#@$*>;;;,*#@..$%%#@.....@#%%$@@$*-,-*&#@.@&-->>->=#.@#%*-;;*#.@#&>>=&$+", "#%--*&=-=#+.@%-;&$...@%=>;*%@..#%%&*--*#@%=;>>,>=$#$%%%*>;*@#%=,*=>;*#+.@%*-*$+.@&--==--=#@@%=;>;;*@.+.@$$@+...+.@@##@.+#&=>>=&$@@@&=->>>-*$.+$&-->>*#..#&;>&$+.", "#%=-===-*#+@$*-,=%#+@$*>;>*%#@@$**&=--=$@$*>-;,;=%@&**&=>;*#@%*;==>;*#..@&=-&#.+@%->-=--*$+@%*=-;>&#..@#%%#@.....+$%%#@.@$&=>>-*$@#%==----*#@%&=>>=%$+..@%==%@..", "@%*-->>=&@@#&=>;-*%@@&>,>>-*%+@%>>--;=&#+@%&=>;;*%@&=>->>-%@@#*>>-,>&#..@&>-%#..@%=>>>;-&#@#%-->>-%@..@%=-%@+...@#&--%@..+#%*=>-&@@#%&&&&&$@#*--=*%#+...@%=*#@..", "+#%*=--&$@@$*-->-=&@@%->>--=%#@$=----*$@.+#$*->-*#@$*->-=&$..@$*---=%@+.@%-*$+...#%=---*$@@#&---*%#@.+@%=-%@....+%=>=%@....@#%&&$@.@@@#@#@@@@%&&%#@+.+..@%*&#+..", ".+@%&*&#+.+#&&==**$@@$&===**%@.#%&*=&%@...@@%&=*&@.@$&=*%$@+.@@%&*&%#+..@#&%#+.+.+#%**&%@.+#%&*&%#@...@$&&$@+...@%==&#@+.....@@#@@..........+@##@.....+.+$%%@...", "..@@###@...+##$$$##..@$$$$%##...@#$$$@@....@##$#@@.@@#$$@@..+.@@#$#@@....@@@++....@@$$#@@..+@$#$@......@#$@@..+.+$&%$@...+....................@..+++.....@#@++..", "..++##@@....@@@@@.++.@@##@@@+.+..@@@@@@.@@@+@@@@...@@@@@@@@..@@@@@@@@....@@@@@++.+@@@@@@@+.@@@@@@@@+...@@@@@@.@++@#@@@@..@@@@@@..+.@@@.@@@@@.@@@+++@+.+..+@@+...", "++#%&&%@@+.@$$%%@@..@#%%%%$@@..@@$%%$$#@#$%%%%#@@.@#%%&%%$@.@#%%&%%%$@@@@#%%%$#@@#$%%$$%$@@#$%%%$$@@.+@$%%%%#@@#%%$$%$#@@@$%%$#@..@$$$#+#$$@@#$###%$#+++@$$$$#@.", ".@%=>>=%@.@#&===%@..#&=-==*&#+@@%*===*&$%==-==*%#.$&==-=-=%@@&=-=--=*#+#%*===*&#$&==*&==*$#&*---*&$@.@$&=-==&#$&=-**==&@@%*-==%#@+$&=*%$&=*%$&=*%&==&#+#%**=&%#+", "+%*->>>&$@+#*-,;*$@@$*>;>>->%@#%=->->>=%&->>----%@$*-;>>>>&@$*-;>->>=$#%=>>>>>=%$=>>=*->-%@&*-;;-*$@.+%*-;>-*$$*>>-->-*#@%=>;-&$+.$=;-*&=;-%%=>>=*>>=##%=>>->-%#", "@%=-->,*$@.#&->;=&@.$*->>->;&$$=>>=*->=%%->-==>;*$$*->--;;*#$*->-=->=$%=>-==->=%$*>>==->-%@$&='>*%#..@#&*->-&#$*>>->>=&@@$*>>=%@@.$*',==>,>&%=;;==;;*#$=>-==>;*#", "@&----,=%@+@&=>>-&#@#&=>--;,*$%-;=%%&=*$%=>=*&-;=$@&=>==>>&@@&=>=-==*$%-;=&&===$#*->==>>=$@@#*;-&#@...@#&===%@$&>>>;-%$@+$&->&$@.@@*;,>=>'>%%=>;>->,*$%-;=&&-;=$", "#&->;,;=&@@#&->-;*%@#%=,->,;*$&-;*$@#$#@$=-=%%*-=%#%=>>;-*%@@%=>>>-*$@%>;*%%**&##&->>->>*$.+$*,-$@...@@#%==*$@#&-',,*%@..@%--&@@..$*,,>;;,-%%=->>>;;*$%-;*$%*-=%", "#%->>,;=&@@$*--->=&##&=;>>>;=%%-;*$@@@@@$=-=%$*=-%#%=,,'>&$@#%=,,,-%@@%-;=%*--*$#&-;->>-=$..+&;-%@+.@#$#%==*$+#&-;,'-%#..@%--&$#@@$&;;,,>,-%%*>-;;;,*#&-;*$%*=-%", "#&->>;;-&##%-;;,;-*$#&=>==->=%&->*%##%##%*-=%%*-=$$&=>>>-*&@#&=>>>=$++%-;=&=>;=%#&->==->*$++#*;-%@@+$*=&%=-*$@#&-->->*%@.@%--*&*&@$*,>---;-%%=-->>;;*$%->*$%=-=%", "#%->-->-&##*>,-->,-%$&=>==->=%%=>-&&&**#%=>=&*-;=$#&=-----=$$&=>-=&#@+$=--*=->=%$*--==->=%.#$*,>&$++%->=*--*#+#*->=->-&#.#&->*=>=%#*,>==*,>%%=-==-,,*$%=>=**-;=$", "#%=>---=%#$=';-=>,-%$=>,>->>*$$&=---=-*$%-;>->>>&#$*>;>>>>-$$=>;>=%#..$&->>->-*$$*;>==->-%@%*-,>=&#+$=;>->-&@.$*;>-*->=%@%=;'->,=%%=>>*&=;>&%=;-=-;;*#$&->-->>&#", "+$&->;>*$@$*>>-*-;=%$*>>>>>-&#@$&=>--*%#%->>>>-*%@$*->>>>>*$$*>>>=%@..@$&-->-=%#$*>>=*>>=%#%*->;=&$.$&=>>-*$@.$*>>*&*-=%@%-->>>>=#$*--&&*>=%%=>-&*=-&@@%&=>>=*$@", ".+#%**&%@.@%%&%%&&%#@%&*&&&%$@@@#$&&%%#@#%*&&&%$@.#%&&*&&&%@@$&&&%#@...@$%%&%%@+@%&&%%&&%#@$%&&*&%@.@#%&&%$@..#%&&%$$%%#@#&&*&&&%@#%%%$#%%%#@%&&$%%%#+.@$%%&%$+.", "..@@#$@@@.@@##@@@@@+.@####@@+...+@###+..@@##$#@@.+.@@##$#@@+.@##@@+.+....@##@@..+@###@##@@.@@$###@....@###@.+.@@#@@@#@@..@@$####@@.@###@@##...@@@@@@+....@@@@+..", ".+@@@#@@.....@@@@....@@@@@@.....@@@@@@...#@@@@@@@..+@@@+@@+..@@@@+@@@..@@@+@@@+..@@@@+@@@..@@@@@@@@...@@@@@@@...@$$$$@..@@#@@.......@#$$$@+....@@@@.............", "@#%&%%%$@..@#$$%$#@.@$%&%%$@#..+@%%%%$#@@$%&%&%%@+@$$%$$%$$@@$$%##$%$#@#$%##$%$@##$%$$%%$@@$$%$$%%$@@@#%%&%%$@..$&=*%#@+@%&%@@...+.@#%*=&$..+..@%&$@+.......+...", "$*->>>=*%@@#%=--*&$@$&->>-=%#@+#%-->--%@$*>->>>-%@$&--&*=-&$$*-=*%=-=%$*-=&%*-=%$*--=*--=%$*--=*--=%@$*=>>>-*$@+%-;-&#@.@&*=$@+....@$&-;=%@...#%=-&#@.+.+.....+.", "$=>,,,>=&##%*->,>=%@$=;,,;>*%@#%*;;;,;*#%-,,',,,*#%=,;*=>,=$$=;>*&=;>%%=;;==-;>&$*;,-=;,>%$=-'>=;'>%#%=;;,;,-%.@%-,=%#..@%*-&$@..+.@@&*,-%@..+$&-;*$@....+......", "$*--==--=%%*>-==>>*$$*;>-=--*$#*->-=>>*#&->-,>;>*$%=;=&*>;*$$*;>*&=;-%%*,>>>-,-&$&>;-->;=%$&;>-->;=%#%---->;=$.@%-;&$@+.@$*-*%@.....@#*,=%@..@%=->-&@.+...+.+...", "#&=-**=--%%-,=&&=>=$#&--==>>*$$*--===-&#%->=;,>,&#%=-=&%-,*#$&--*&*-=$$*;,;,-;-%@%=>;>;-&#@%*--->-&#@%*==->=&@.@%-;*#....@%=-*$@.....#&;>%@+.@%--->&#+..........", "#&=>===-=%&->=%%*--%$&->--;-*#$&=;;--=%@$&==,-=*$@$=-=%&-;*##&--*&=-*$$*,;,,-'-%@#%=;,-*$@.#%=>'>&$@@#%&=>>*%@.@%-'&$.+..@$&==&$@.+..#*;-%@..@%***=&#@+...+.+...", "@&=;,,;-*$%-,*&%*-=%#&>>,,>=%@@%*->>,>&@@#%&,-&%#@%*-=%%-,*#+$*-==-=&##*>,;>;,-%@#%*>>-&$@.@$*>,=%#..@%&-,=&$@.@#-;*#@....@$*-=%@....@&'-%@..@#$%$%$@.....+.+...", "#&=,;;>=%#%=;-=*->=$#&>;;;;=%#$&==->,>*#.@$*;-&@+.%*-=&&-,&#@#&=---*%@$&,,>-';-$@$*->>>*%@..@&>;*%@..@%=>;=*%$.@%-;&$+.....#%==&$.+.@#*>-%@+..+++++.+.@@@@#####.", "#&->>=*%$@$&->,>>,*$$*>>-=;>*%%=>-==;,*#.@$*,>&$@.$*--==-;&#.@%->>>&#@#%-;-=;>=$#&-'>-;>=$.@#&-'*%@+@$*>,-->=%.@%-;=%@..+...$*==%@..@%*,-%@..+....+..@#%%&%&&&%@", "$*>,-=%#..#%=,;,,-*$%=,>==-;-%&-'-->,-&#+#&-,>*$@.#&=--->-%@.@$*>'-%@.@%--==--*$$*,>-=>)-%@@%=;,=&@@@$=;;->;-%.@%-,=&$......@&=>%@..#&-;=%@..........+%*======*$", "%*=--*%@.+@%*>>>,;*##&--*%*-=%$*---=-=%@@#%=--*%@.@#&=--=*$@..@%=-*$@.+%*=*&==&##&--=*=-=%..%*=-=&#+@$*-----*$+.$*--&$@...+.@%=-&@+@$&--=%@+..+.+..+.+%=>>--->=%", "@$%&%%#@...#%*****%@@$%%%#$%%##$%%%&%$#..@$%&%%#@..@#%%%%%@..@+#%%%@@..@%%%$%%#@@$%%%%%&%#..#%&%%$@..@$%&&%%%@..#%**%$@+....+@%&#@..#%**&#...........@%**====*&#", ".@@@#@@....@@$#$$$@..@@#@.@@@..@@#@@@@.....@##@@+...@@#@@@.....@@@@@+..@.@@+.@@..@@#@@@@@+.+.@@#@@....@@@##@@@..@@#$@+.......@##@....#$$@@.+....+.....@#$$$$$%$@", "..+.@@@+.+.+...+..+@.@#@@...+.+.+...+.+.+..+@@@@@........+.+...+@#@@@..+........@@#@@........@@@@.+....@@#@..+.@@#@@...+.+@@@@@..+...........+....+....+.+++....", "...@#$#@............#%&%#@..................@%&%#@+.+........++$%&&&$@.......+.+@%&%#@......@$%%$@..+..@%&%@@.@#&&$@.....@#&&&$@...+.....+..........+...........", "..@$**%@...+.@.@....$*>-%#@.....+..@.@.....@%=-=%+...@@+@....+#&->;-%@.+.+@.@...$*>-%#@+.+..@&--%#....@$=-*$@.@%->*$@....@%=;>&@.....+@.@..+.+@@......+..+.@@.+.", ".+@%=,*$@..@@#$##@.+#*>-*%$@@+.@@#$#$#@.+@@#%=>-%@.@@##$#@.++#%*;;-*%@.+@##$$##@$*--*%#@@...#&--&@+..@#%=>=$@.@%=-*%$$@+.@#*>'*#.+.###$$#$@.+####$$@@..+@#$##@+.", "..@$=-*%+.@@%&**&$@@#&->=*&%#@@#%&***&%@@#%**->-&@@#%&**&%@.@%*-,-=*$@@#%&****%##*->=*&%@@.@$*--%@@.@#&*--=%@.@%*-=&*&%@..@%-;&#..#%******%@@%*&&*&$#@+#%&**&%@.", "...#%**%@.@$*->;-&#@#&->,,,=&##&=,->;'&@#&=>;,;-&@#&=>>>-*%@#&=;,;-*%@#&=>>>,>*$#&>>,;;*%@+@%=>;&#..+$*->'>&@.@$*--->=&@..@%=,*#@.#=>'>,'>*$$=>>-->*%##&=>>>-*%@", "...@@%%#@.@%->',>*%@#&>;;>;>=$%=>,=>'>*#%=>'>;>-%@%=;,>;;-&@@&-,;>-*#@%*>,-;,;*$#&-,>;,=*#.@%*;;&#..@$&=>,>&@.@$*->;>=&@..@%-;&#+.$=,,,;,;=%%=;;--;-&$%=>;>>;-&#", ".+...@@@+.@%=->>'=%@#&->===,-%%-;-**->*#%-;-=->-&#%=,;>>,,*#@#&->=&%@@%->>==,-*##%->=*--*#.+#&-'*#...@$%&=;&#.@$*>,)-&$@+.@%='*$..#&--->>>-%$&->==--*$%-;-*=>;*#", "..........#&-,;;,=&@#&--=&=,=%&-,*%%**%#%-,*&*--&#&>';'',>*#@@%--=$@..%=,>>>;-%@#&--**=>*$..@%-;&$@...@@%*,&#.@$*;,>=&@@..@%--&$@.#&--->---%$&--**=-=$&-;=**>;*#", ".+.+.....+#*>;-=,-&##*->=*=,-%%=,-*&**&$%=,-=->-&#%=,>->>>&#@#&--=&$@.#&=>,;;-&@$&--**=>=$@@$&-,*%@+..@#%*>&@.@%*>-'>*%@.@$&-'*%@@#*->->---%$&>-**=-=$&-;-**;;*#", ".....+....#*,>>>,-*$$*>'>>>,*%%=>>----*#%=>>->,>*$%=;>>>;>&@@%*>;-=&#.@$*=----%@$*,>=*>>=%@#&=,'=*%@.@%&*=>&#.@%->--,-*$@#&=,;=*$@#*>>->>>-&$*>;==-;=%%=>>>>>;&#", ".......+..@%-;>>>>*#$&-;>>>=&#$%=>>>>-&##&=>>>;>&##%=>>>>=%@@&=>>>-*#@@$*=---*$@#&;>=*-;=%@#*=-'>*%@@%*-->=%@.@&--=*>>=%@#*=>,>*%#$*>-=->--&$*>>-*>;-%#&=>>>-*%+", ".+.+.....+@#%&****%@#%&&**&$#@@#%&**&%$@@@%&**&*%@@#%***&&#@@$&*=*&%@.@%*---*%#.#%**%%**&#+@%&**&%$++$*--=&$@.@#&&%%&*&@.#%&***%$@#%**&&*&&$#%&*&%**&#@#$&**%$@.", ".....+.....@#$#$$#@..@#####@.+..@##$#@@...@##$##@@..@@$##@@..@##$##$...#$%%%$@..@@#$#@#@@@.@+###$@@..@%%%%#@...@######@@..@##$#@@.@##$####@@@@###@##@@.@@#$##+..", ".......+...+....+.+.+........................@.......................+...@.@..+........@...............@@.+......@@@#@.+..+@#@@....@@@@@+.......................", ".+.+..................+....+..+.......+.+.@#@@....+........+............+......................+...+.........+...@$%%#@....@%&$@+..+#%%$@@...........+.+....+...", ".....+.+.+.+..+@........+.@.....+.+......@%&%#@+....@+.+.....+@+.+.@.+.....+..+.+.+@.+.+.+.+.........+...@+....+@%**&#@...@$*-%#...+#&**%@.+.+.+.+......+.+...+.", "@@#$$$#@@..@@$#$$#$.+@#$$##$@...@##$$#@.@$&=*%$@..@##@@##@@.@@#$###$#@@##$@@##$.@@#$##$$@.@@$$@@$$@..@@$$#$#@...@&>-%@.+.+@%-,&#.+..@&--&@.........+............", "#%****&%#@@#$&****%@@$&*&*&&#@.@#%&*&&%@@%->-=*%@.$&*%$%&%$@#%**&&**&$#%*&%%&*&$#&**%&*&%@$&*%%%&*%@@#%&***&%@..#*>-%#....@%->*#....@%-;&$....@@@@@@....+.+.+...", "$=>;>;-=&@$&*-;>;;*$#&=>>>>=%@+#%=>;--&#@&>','>*$@&>>*&->=%@$*;;-=>'-%%*;>=*=;>%%=>;=-'>%#&>>-&=>;*#@%=-';'=&@+@$*)-%@.....%-;*$.+..+%-'*$@+.@$$%$%$#@..........", "$*',---'*%%=;-->';*##&=);>>=%#@%*>'>>-*$@&->>==&@@&-'**=>-%#$*'>-=>,-%%='>---'-&$*>'-->-%@%-,-=-;'&#@%-->-,*&@.@$=,=%@+.+.@%-'&#....@%-;=%@.@$*=-===&@+....+....", "+&->-=*,-%&='===>>&#@#&,>=*&$.@$=>,,>=&@@%=--*%$@.%=>=&*--&@@$=-==--=$#&>>>,->-%##*-,;=&$@#&->->-=%@@$*->,>*%@.@#=,>%@....@%=;*#.+..+%-,-$@.@&>;;;;-*#..+....+..", "#&>,>--;=%%->-->>>&@@$*>=*$#@.@$*>,>>-*@@$*-=&%##.%=-=**--&@@%*--=>=%@#&>>,;>;=$@$&-,>=%@.@$&>)>=%@.@$*=;>-&%@.+$*>-%@....@%-,&#....@%->*#@.@&--->>=&@.....+....", "@&-;>,-=&##&=-->>-&#@%*,=*%#@.@%*->>>;=$@$*--**&%@%*>-*->>*#.#%=>>>*$@#%->;>,>*##%*>,;-&$@.#%=,>&#..@$*>,--*&@..#&,-%@+.+..%=>&#.+..@%-'&$.+.#&&%&&%#@+.+...+...", "#&->-*&%#@@#%&==>-*##&-,==*$@.@%->>>>)=$.#&-;--=%#$&->--';*@.@$=>,=%@.@%*>>->=&#$*-;->>-%@@%*>>=%@+.@%=,>>--*#..#&>-%#@...@%==&@...@@&--&@...@@@@@@@@........+..", "$*;;-*%#@..@#$*-;>*#$*-,>>=%@.@%=->>>=&#.@$*>>-*%@@%&->>>>*#..#%==*$@.@#&=**=*%@#=>-=-;>%@$*,>,=%@..@$=>>,;=&#+.@%-=&#@.+..@&&$@....#&=-%@.......+......+.+.....", "#*>>=*#@....@#&=>>*#@%&&&&%#@.@@%%**&%#@..@$&&%$#..@$%*&*&$@..@#$%$@...@#$$$%#@@@%&%%%&&#@#&==*&#.+.@#%&*&&%$@...#%&%@@....@##@@+..@@%&%$@+.+.......+........+..", "@%&*&$@@.+...@%&*&%@.@#@#@@@....@@###@@.....@#@@@...@#+###@.+..@@@@.+....@@@@@...@#@@#@@@.@#%%%$@.....@@###@@.....@@@@..+.........+.+@@@@......+......+.........", ".+@@...........@@@.....@@@@+......@@@.+.+.......+...@.@.@@.....@@@@.....@@#@#@..............@@@@@.......@@.@.+.+.............+..............+..@@@@.....+.+..+..", ".+#!~{]^/..+.......+...@$%#@..+.@#$$$@@...+.......+#$$$#$%#@+.@#%$@.+.+@#%&*&%#@...@@@@@+...@#$$$@@+.+.##$@@..........+.+.+.....+........+....@#$$##@...+@##@+..", ".(_:<[[_}+...+..+....+#%*-&$@..@#&===%@.@@@#@@@@@@@%*=**==&#..@%=*%....#&=,>>=%@+@@#$#$$@.@@%&==*%$@.@@%&*&$...+.+.+.........+....+.+.+.....@@%&==*%$@.@#%&*%$@.", "+&<,,||<1.....@@.....@$*>,=%#@.#%->,>*$@@#%&&&&&$@#&>,>->)=$..#*;-%@..@%*>>->=%@..#%&%&&#@@%=>;);=&@.@$&-->&$.....@.@@@..@@@@@@@..........+.@$=>;';=&#.+%=>>=%@.", ".2,3333,4+.+.@#$$@+.@$*-,;>*$@@#&>>-=&#@@$*->>-=&@@%-;>>'-*$+.#&,=%@+.$&-'>-==$@.@#%%%%%@.#&>,,;;>=$.@%=->'&#@..#$$%$$$@@$%&%&%%$.....@@....$&>',,;>=$@+$*--*%@.", ".2,|,55,4...@#%&%@..@%=->>>*%@@$*>-*&$@.@%->>>;>*$@$*>>-,=%#..@%;-%@..%=>;)>-*$@+.@##@$@@+%*>;,>>>-%@#&=--;*#@.$$&=***&@$*->;>>-&@+@$#$$$#@@$=-,;-'>=%..@%%%$#+.", ".6,|,|||%...@$&*%#..@%--===&$@@%->>=%#@.#%---->-*$@@&-,>;*$@+.#&>=%@+.%-'>,>>-%@.....@...@%=>,>>>>=%@#&-->>*$@@%&-----&#$*>';',;&#@$&*=***$@%=->;>;>=&...@@@++..", ".2,,33|,1+.+.%*=&#@.@&--=**&$@@&-,,>&$@.@&->-=->=#.@%*,)>*$@..@%-*%@.@#*>>>>,'&#...+......%=;,,>>--%@#*=;;'*%@$*-;->>=&@@%&&*=-'*##%*->>>-%@%=>;,>>-=%@.........", "+6||3||,7...#%->=$@.@%=>---*#@@%=;>-*$@.@%->>->>*#.#%=,,=*%@+.#&-=$@..#%==-;;=%@+....+....$*;,;,;>=%@#&-,;-*%@$='->>;=%@@@#$$&->&#@$&*==*&$@$*>;;>;>-%@...+.+...", ".&|5|,5,2...#&,)-%@.@#&->'-&#@#%->,==&&@@%=>>,;-*#.@%=>)-*$@..@&>-%@+.#&===-;=%@........+.#%=>>>;>*%.@%&===%#@@&='->>-&@....@$&*%@@@$$$$$$@+@&->;>;-*$..........", ".48,,|,8{+..#&,,=%@..@$&>;*%@.#&,,,>,>=$@$&*****%@@#&-,'>*%@+.#*'=%@..#*->>;-&#@+.+..+....@$&=>,-*%@.@@$%%$#@+@#&=----&@.....@#$@...@@@@+...@$&=>;>*%#+.+..+..+.", ".4=9999_0...@%-,-%@...@%*-%#..@$->>>;>*#+#$%$#$$#@.@%*-'>&$.@.@%>-%@..#*=,>>*%@............@$&=-*%#@..@.@@@@...@%&*&**&#+.+....+.............@$&=-*%#+..........", ".ab2222ac+..@%==&#@+...@$%$@+.@#&&*&&&%@..@.@..@...@#%&&&$@.+.#%-*$@..@$**=&%@.....+.+.+....@#$%$@@+............@#$$#$@+........+.......+.+...@#%$$#+....+.+....", "......+......@$%#@......@@@.....@##$$@@..+.....+.+..+@@##@....@#&%@@+..@#$##@...+........+....@.@.....+.+..+.+......+@....@+.+.....@.+.......++++@....+.....+...", "+.@@##@..+.........+.+@####.+...@###@.......+@..............+.@#$$$$@........+...............@@@@..+....@..............+@$%%@@..+@@%%$@...+.@$%%$#@..........+..", ".@#%&&%@...+.@@@@....@#%&&%#@.+@$&&&$@.+.+.@@#@@.+.......+...#$&****%#...........+.+.+.+...+@$%&#@.....##$#@..+.+.+.....$&=*%@@.+@%*=&#@@@#@%*-=*$@@#@+.+.@@++..", "+#%*=*&$@....@$%$@...@$*==*%@..#&===&$@...@#%&$@...+.+......#%=->);>*#+.+..+.+.............@@&=-&@.+.@#%**&$@.......+...$*>-&#@#$#&=>*$#$%&$&=--=&$%%$...+#%$@..", "@$*-=-*&#+..#%*-&$@+.@%*=-*%#..#&=-;*$@...@%**%@...@@@@@#$@+#&>,>,,>*#.........+.......+.+.@#&-;&#...$%*=-=&#@..@@..@.+.#*>>&$#&*%&->=%%***#%=->=*&*=$@.++%*&#@.", "@$*-=-=&@.@@%&>'&&#@.@$*=-*%@+.#&=-'&%@+..@%=*$@+.@%&%$$&%$@#*',;,>=&#...+@#@....+.+........@&-'&#@..#&--=-*%@@#$$$$#@..$&--*%&*=%%=-=&*=-*$%=-;-====$...@%*&#@.", "@#%=-=&%@.@$=-;'>=&#.@%*--*%@..$&---*%@...@$%$@...$*--&&--*##&>;,'>=&#+..@$&%$.......+...+..#%=,*$@+@#&=---*%@@&*****%#.$*>-=*=-=%&=--==--*$%=->----&#@.@#&-*$@.", ".@$&**%@+.@%>'',;;=$.@%=--*%@..$=---&$@+...@@@..+.$*;>**--*##%->,,>=&#..@#&-*$#.............#&>,&$@..@&=---*$@#&--->-*%@%*->----=%&-->>>>-=%%==>->>-&@@+#%=>-%@.", "...#$$@@..@$&=-'-=&#.@%***&$@+.#&=**%#............#&>-**=-=$@$&=;,>=&#+.@#*-=$@.+.+@#@.+..+@#&*=&$@..@%=>>-&$@@&=>>>;>&##&*=-->;-%%*=----->%$&==;;;;*#.@%*-;=%@.", "+...@@..+..#$&--*%#@..@$%%#@...@#%$%@@.+.+.+.+..+.$&>-==->=$.@$*-'-=&@...@%&%@....@$&%#@....@#$%$#@+.#&-',;*%@@%=>->,,&#@$&=->-'-%$*=-==---$#$&->-;;*#@#*--=*%#+", "..+........+%*=-*%#@...+@@@......+@@..............#&>>---'-%@@$&-,;-*#....@#@.....#&-=%@..+...@.@....@%*->-&$@#&=---;>&#@%*---='>%%*-=**->*$#%=---;,*#+%*--**&%@", "........+.@$*=->-*%$.......+.+.......+........+.+.#%-',>>>-%@@&=;,;>=#+......+.+.@$='-&@...........+.@@%%&%#@.$*--->>=%@@$===--;>&%*=*&=--*$$&===->'=#+$*->--=&@", "+.+..+....@%->,>'>*#.+.........+.......+.+.+......#%=-=*&*%#.@&=>-';=$..+........@$*'>&#+...+.+.+.......@@@..@@&**&*&$@+@$&&&&*>>%$%&%%=---$@%&%%&->*#+#&=>>>=&@", "........+.@#&&&&&&%#...+.........+................#%**%$#@@..@#&*&&&%@....+......@#&**%@.................+....@#$$$$#@+..@##@#%%&#@#@@#$&%%#@@$#@$%%%@.+#&=--*$@", "..@.@+.....@@#$#$#@......@.+.+....++.+......+.+.+..#%%$@.......@####@.+......+.+..@%%$@...+.....@.+.+.+.+.++...@.++@@.....@@@@@@@......@###...@.@+@#+...+@%%%$@.", ".@#%%#@.+....@#%%#@+.+@#%&#@...+@#$%#@.+.+@@@@@@..+@$%&%#@+...@@@@@@@@..+@#@@@@..@#&%#@@....+@%%$#+...@#&%#@...@@@#@#@+..@@$%@@..+..+@@$%$@@..@#&&$#++..++@@@@@.", ".@$&*%#@....@#%**$@..@@&*=&@@..@%&**&$#..@#$$#$@@..@$*=*$@..+@@%%%%%%@.@@$%%%$#@.@$**%#@+...@#%*&$@..@#%==%#@+.@$&%&&%@..@$&&&#@.....@$&=&#..@#%==*$@+.+#$#$$#@+", ".@%*=*%@+.+@#%==&$@.@@%*--*$@.@$&-;>=%@..@%&&&&$@.@#%===%@...@$======$@#%*===*&$@#%*-=&$#@@@%&==*&@@@$&*--=%#@@$&===**$@.@%*==%$@.@@#%*==%$..@%*--=&#++#%&&&*&$@", "@$&=--%#@..#%*--&#@.+$*---*$@.+$=->>*%@.@#*===*$@.@%*->=%@+..@%>')>'>%$&='>;;,=$$&=->>-=%@#&*->>-=%@#&=>>>>=%@$&->>>--%@@$&=--=&$@.@%*->=*$@@$&=-->*%@+$*-=--*&@", "+$*>',*#@.@#*-'>=$@.@$*>',=%@.@%=>),*%@.@$*>'>=%@.#&=',-&@...#&-'>--=%%-;=**=-*%%=;'-';>&#%=,,>';>&#%=>'-',>&#$=;'>,;>&#@$*-;,>=%#@#*-';>=&@@$=-;,;=&@+$*>;,;=&@", ".$&--)-%#+@$&=,'-%@..$&-;)-&@..$&-;'-&@.@$&-,)-%@.@#*-'>*$@+.@&>,>>-*%%=)=%$%*&##&=-==-'&@#%=-=->;&@#&->==>>&@$&=>==>;&@+@&=>'-*$@+$%=>,-*$++#&=>,-*$+@#&=>;-*$@", ".$&>;-;&$@@#*->->*%@.$&>->>*$@@#&-;->*%@@$&>->>*%@@%*;>;-&@@@$*,->,>*$%-;*$#$%$##&=>=--*%@#&=-==-=%@#&=-=--=%@@&=>=--*%@.@#&>;*%@..@$&>;*%@..@#&>;*%@..@$&>,*%@.", "+%*>;-'=&@@%=>,-'=&#@$=>,-'=&@@%*-,-'=&@+%=>,-'=&##&=,-;>=$@#&*;;,';*#&*'=%%%%%@@%*,>>-*$@@&=,>>-*%@#%=,>>-&$@@&*,>>-&$@..@%-;&$@...+%-;*$@...@$-;*#+...@%-;*#+.", "@&-,,-,-=##%-;;>,-*$#&-,;>'-=#@&-'>;,-*$#%-;;>;-=$%=>,>,>-%#$*>,;--=&@%=>-===-&$#&=;->>*%##&=>>>>*%##&=>->>*%@@&=>-;-*%@..#&-,&$@+..@&-,&$@+..#%-;&$@..+@%>;*#@.", "#*>;>->,-%$&,;>->'-%$&;,>--'-%$*>,>->'-%$*>,>->,-%&=,>->,;*#%=,>>>--=$#&=>>>>>*#$&=,-->-=$$&->----=$$&=,----=$$*->->--=$@@$&-'=%$@.@%&-,=%#@.@$*-,=%$@.@%&>;=%#@", "%*',-=>'-&%=,>-=>'>&%='>-=>'-&%=,,-=>'>&$='>-=>'-&&>'---,,*$&>,-',>>>%@$&='>=*$@$=,;->;,=%%='>>>'-=%%=,>>>>,=$%=,'->;;=$@#*-,,-*&@@#&-,,-=%#@$&-,,-*&@+#*=,,-=%#", "$*>>=*=;-%$*;>=*=>-%$&,>=*->-%$*->=*->-%$&,>=*=>-&&->-**->=$&=>->;>>-%.@#*>>*$@.#*-,>->>*#$*>;-->>=$$*>>>-->*##*-,-->>*#@$&=>>-*&@@#&=->-*&@+$&=-;-=%#.$*=-;-*&@", "@%&&%%&&&##%&&&%&*%$#%&&%%&&&$@%&&%%&*&$#%&&&%&*&#$&*&%&&&%#$&&&*&**&@.@$*=*$@..@%&*&&*&%#@%&**&*&%##%***&&&%#@%&*&&*&%@+@%&*&&&$+.#%&&*&&$@.#%&&&&&$@.#%&*&&&$+", "@@######@@@####@#$#.@@#$####@@@+$#@###@@@@######@@@####$$$#.@#####$##...@#$#@....@@$$#$#@@.@$$$###@..@#$$$$##..+#$$$$#@@..@@#$#@@..+@#$$$@@..+@@###@+...@#$$#@@.", ".+@@@@@@...@#%%%%$#...#%%#@......@$%%@@...@$%%$@...@#$%%%$#...@@#@@.+.+......+...+.@@@@@@..@#%%$@......@#%$#@...@$%%$@....@@@@@+......@$%#@+..@@+++......@@$@+@.", "@#$$%$$#@..@$*-==*$@.@$&=&$@..+.@#&**$@..@#&==&$@..@%*=-=*$@.@@$$$##@........@...@@#%%%%#@.@$*=&#@@+..@#&**$@+.@$&==&$@.+@@$$$$#@+...#$**%@@@$$$#@+++...@$%&%#+.", "@&*=*=*&$#@$&->>-*$@.@%*=*%#@...@%=-*$@+.@%*--*%#.@#&->>-*#@.@$*&**%@.+@$@@.@@@.@#%**=>-&@@#%*-*&#@.@@$%=-*%#@@@%=--*&$.+@%*&&&&$@@@#%&==&$@@&*=&%#@.+.#$*--=%#+", "$&,>>-->*$#&=->;-=%@.@%*--*%@..@%&--*%#.@@&=---*$@@%*->;-*#@.#&====*$@@#&%$$$%$@#&=>>>,'*@#%**-=*&$#@%&*--=*%@@%*-=--*&@@&*=====%@@$&*=--*&#$*-;-*%#@+.#&->>>*$+", "$*;;---,=%%*>>=->-*$@%*->--=%@#%*-->-=%@@%*-->-=%@#%*->>-=%@#%*->--=%@@%=**%*=*#%*>;-;,>*#$*>-==--*#$*--*=>-*$$*--==>-*$$*>-*=>>*$$&->-=>>=%$&-,>-=&$@.#*->>;=%@", "$=>>-=*>-&%-;,-=>,=#$&-;-->>&#$&-;-->>&#$*---->>*#$*->--;>&#$*----;>*@@%->-=--*$%=,--->>=%%-;-**>'*$%=,-**>,=$%-;-**>,=$%-;-**>;=#$*;>==>;-%#&*,;;>-*#@$*->>,=&#", "%=,,>=*--&%->>--;;*$%=,=**>>=$%->-**>>=$%-,=**->=$%-,=**->=$%-,=**->=$@$*>,>'*%#&-,*-----%%=>=&&>;*#%->=&&>>*#%=>=&&>;*#%=>=&&>,&$@%->-=>-*##&=-===>=$@$*-;,;=&#", "$=>,-**=-&%=>>>->,*$%=,=%%=-=%&-'=%%=-=%%=,=%&=-=%%=,=%%=-=%%=,=%%*-=$@#%=,,>*%#%=,---=--%%=-=%&-,*$$=-=%&-,*$%=-=%%-,*#%=>=%&='*#@$&->>;*%@@%=-===>=%@$*=-->;=%", "$&>-=&*=-&%=>->>,;*#&-;*%%=>=%%->=%%=>=%&->=%%=>=%&-;*%%=>=%&-;*%%=-=%@$*-;>,=%#%-,--==>=%%=-=%&-,&#%*-=%&-,&#%*>=&&-;*#$=-=&&-;*@.@%=;,-&#@#&=;-->;=$@#=====,-%", "$*>>=*=>-%%->-=-;'*#$=,=**->*%%=,=**->=$%=>=**->=$$=,=**->=$%=;=**->=$@%=>-->-*#%=,>--->=$$*--**-;*#$*-=**>>*#$*-=*=-;*@$*--**-,&#.@$*>,=%#@$&=,>>>-&#@%=--==;-%", "$=,,>->,*%%-,>=-,>*#$&=->>;>&#$&=->>;>&#$&=->>>>&#$&=->>>>&#$&=->>;>&#@%==*&*-&#%*>;>>;>&##&=>>>,-%@#&=>>>,-&@#&=>>>;-&@@&=>>>;-&@.@%=,,-&$@$=;,-=*&#@@&-;>>;,-%", "%*-'>'>=&#%=>;**>;&#@$&=;>-*%@@%&=;>>*%@@$&=>,>*%@@$&=>'-*%@@$&=,>>=$@@$%%##$%%@#*->;;>=$@@$&>,>-=%@@$*>,>>=$@@$*>>,>*$@@$*>;;>=$@.@%=>,>*%@%=>;=*$@+.@&-;-->>=$", "#%&&&&&&#@#%&&%$&%#@.@#%&&%$@..@$%&&&$@..@$%&&%%@..@$%&%%$@..@#%&&%%@..@@@@@@@@@#%*&&&&$@..#$&&&&$@..@#%&&&$@..@$&&&%%@..@#&&&%%@.@@$%&&&$@+#%&&%%@...@#&&&%&&$@", "@@##$#@@@.@@@@@@@@@...@#@##@....@@@@@@....@@@#@@.....####@.....@@@@@............@#$$##@@.....@#$@@@...@###@@@....@@#@@@...@@##@++...@###@@@..@#@@#.....@@@@#@@@.", "..@@@@.......+@@@@.+.+.@@@@.+....@.@.@+...+.....+....@##@.+.........+.............@@@@..+......@@@@+...@@@@.+.........+...@@@@.........@@@@...@.@@@.+...........", ".@#%$#@.+....@#%$@....@$%%#...+.@##$#@.....@@@@....+@#&%$@...+........+.+.+.+.+..@#%%#.....+..@$%$@....@%%$@...+@@.@@...+.#$%#..+.+...@$%$@.+.+#%%#@....@@@@@@..", ".@$&*%#...+.@$&*%#...@#&**$@...@%&**&$@+@@#$###@+...#%==%@+....+..+..............@$&*%#@+....@$&*%@+..@%**&$@..@#$$###...@$&&%#.....+@$%*%@@..@%**%#@..@@#$#$@@.", ".@#*=*%#...@$&==%#.+@#%--=&#+.@#&-;;=&#.@#&*&*%#...@$&==&$@.@@######@...@#$##@@.+@$*==%#@...@#&*=%#..+#&=-=%#+@#&*&&&$$..@$*=*%@....@#&=*%@..@$*=-*$@..@%&&&&$+.", ".@%*--&$+..#%=-=%#..@%*---*$..@%=->>=%@.@%*===*$@+.@%=--*$@.@%&&%&&&%@@#%&*&*%$..#%*=-*%$@@@%&=>=&$.@@%=---*%@@%&====&$..@$*--%@+..@#&=-&$.+.@%=>-*#@..#%*-=*$@.", "@$*->,=&#@#%=>,>*$@.@&->'>=%@+@$=>>)-&#@@&->'>=%@.@#*-;'-%#@$*-;--'>=$$&=-,>)>&#@$*-;'>=&#@$*->)>=&#@$=-,;'-&##&=,>'>=%@.@%=;;&#...@$=;;*#@..@&-;;*$@.+@&-;;*$@.", "+$=->>;*$@#&---;-&$.#&=>>;-&#.@%=-->;*%@#&-->;-&@.@%*---;*%@$=>>)>->>%%='-=-,>*@#&>,-->,=$#*;;-->,=$#&>;---,=%%='-->;>&#.@$*>'&#.+.@$*>,&#...@$*>,&#@..@$*;;&#@.", "@%=->-)=%##*->>)>*#@#*->>'>*$.@%=->>,=%##*->>'>*$@@%=>>-)=%#$=--,,--)&%='=&*=-&@#&;,---,-%#&,,>--)-%#&,,---'-%%='>--,)*$..#%-;*#...@#%-;*$..++#%-,&$....@%-;*$..", "#&>;,,>=&#%=;,;,>*$@%=>';,>*$@#&>,,;;=&@%=>;;,>*$@#&>';>;=&#&=>,';>>>%%=>-===-&#$*',-->;=%$*'>>>>>-$$*'>>->;=%&-'-->>-*#..#&-,&$@+..#%-,&#@..+#&-;*#@..@#&-,&#@.", "$*;>-->=&#%=;-->>*%@%-;-->-=%@#*;>-->=&#%=,-=>>*%@#*>,-->=&$*>--''>>-%$&->;>>>*##&;'>>->=%#&,';->>=%#%,';>>>=%%='>->>-*#.@$&-,*%#@.@$&-,=%#+.@$&-,=%#@.@$&-;=%#@", "#*>,->,-*$%-'--,>-%#%-;--;;=%@$*>,->)-*$%-;->>,=%@$*>>>>'-*$*>,;'>;>-%@$&='>-=%@#&-,>>>,=$#%->>>>;=%#%->>>'>-%%*>;>>,>&#@#&->'=*&@@#&->,=*&@+#&->,=*&@+#&-;,=*%#", "#%==-=-=*##&=-=--=%@#*=--=-=$@@%*-==-=*$$&--=--*%@#%=-===-&#%*===--=*#.@$*;>*%#..#%=-===&#@#&=--==&#@#&*-===&#@%&=-==*$@@#&=---*&@.$&=->==%@@#*=---*&@+$&==>-=&@", "+#&&*&*&%@@%&*&&&%#@@%&*&&&&#@@#&*&*&&%@@%&**&&&#.@#&&**&&%@#%&&&&&&$@.@$=>=&@...@$%&*&%#@.@#%&*&%#@.@#%&*&%#..#%&&&&$@..#%&&*&&$@.#%&&**&$+.@%&**&&$+.#%&*&*%$@", ".@##$$##@..@@$$#$#@..@#$$#@#....@#$$#@@..@##$##@@...###$##@.@###@#@@@...@$&%#@.+...@@##@@...@+$##@@...@@####.@..@#$##@+...@#$$$@@+..@#$##@@.+.@##$$@@+..@#$$##@+", "+@@$$#$@@....@@@@@....@@@.........@@@@....@@##@.+....@@@@@...........+...@...............+..@@@@...+....@@@@....@.@@@.................@@@@..@@#@@...............", "@$***&*&$+.@@$%%$#@+.@#$$@@.+.+..@#%$#@+..@%&%$@..+.#$%%$#@.......@......@..@+...+.........@@$$#@......@#$%#@.+@@%%$#@+.+.....@..+...@@$%$@@@&&&#@+......+@@@@..", "$*>,>>;=%#.@%&==*%#@@#&*&%@.....@#%==$@..@%*>-&$@..@$*==*&#+.@#####@@+.+.@#$@@.....@+@@@.+.@%**%$@.+.+@#&**%@.@@%*=*%@...#@$$#$@@..+@@%*-&@@%=>-%#@+.+.#@#####@.", "%=>>,,,=&@@%&->;-%#..#%==*%@...@#&=-*%@.+#&=>>*%@..#&=>>-*#@@#%&&&&%@...@$**$@+.+.@#$%$%$#@#&*==&$#.@$$&*-=&#@#%&=--*%@@@$&&&&=&#@@$$%&=-*%@$=->&%$@@.@#%**&&&%#", "#*->->>-*#$&-->>-&$@@#&=--*$$.+#%=->*%@@@$*-->=%#@@$&->>-&#.@%*=-==&#...$&->&#...@$&*=***$#&*====*%@#&*=*==*%#%*-====*#@#&-=**-=%@#&*====-*%$&=>-**&$.#&===*=-*%", "$&->>>'>*$%*>>>>>*$@#%*>>--&$@#%*->>-*#@#&=>>>-*$@#%=>>>-*$@#&=>>>-*$@@@$*>>*$@.@$&-->>-=%%*>-=*--*#%*--*=--&$&->=*=>=%@$=>-=*--&#$&>-==->=%#&=>>--=%##&>>==->=%", "#&-;,',,=%%=,,>>;-&#$*>;->;-%#$*>,->;-%#$=>,->;-%@$*>,->;-%#$=>;->;-%@@%&=--=&%@@&-;>>'>=%%*;>**--*$%=;>**--*$&-,=*=--&@%=;>**--*$@&---=->*$#%=,==->=%#&--==->*$", "#*>>==-,-%#&>;-=->*$&='-==>,&$%->-==>;*#%=;-==>;*$%-;-*->,*#%='-==>'*#$&>-'>)>=##&>,-->,-%$&>-**=-*##*>-=&=-=$%=>=&*-=&@#*>-**=-=#@#&->>;*%@@%=;-=>>=$+#&->>>*%@", "$*,-=*=,=%$&--=*=-=$%-,***>,&$%>'*&*>,&$&-,***>'&$%-,=&*>'&$%-;***>;&#@%*====&%#$*'>>>-,=%$&--**=>=$$&--**=-=$%=>=**--&@#&--**=-*$.@%=>,=&@@@&=,>>;>*#+@%*;;-%#.", "#&,>=&=,-%$*--**=-=%&=,-*=-,&$%=,-*=-,*#%=,-==>,&$%=,-*=>;*#&=,-*=>,*@@#%&=-&%@@#*;,>-=,-%#%--=*->=%#%--*=->=%%*--*->>&#@&--==->=%@@%*-,=$@.#&=,,>-=%@.@$=>;*$@.", "#&-;>>;>=$$=,>-=>,-%%=,>>,>>%#%=>;>;;-%#%=>>>>,-%#%=>>>,>>%#%=>;>>,=&@.@#&->&@..$*>,;;>>*$@%=>>>,;-%#%=>>>;,-%$&->>;;'*#@$*>;>;'-%@$*>;>&#+.$*->-*&%@++$*-;>*#..", "@%*>>';=&#$=>'-=-'-%#&=>>,>*%@#&*,>,>=$@#&=>';>*%@#&=,>,>=$@#&*'>'-=$@..@$**%@..#&-,;,,=&@@#&->;>'>%@#&->,>'-%#$*>>,>,=#@$&=>'>,-%@%=>'>&+.+$*-;-*$@..+%=;,>&#@.", "+@%%&&%%#@#%&&%&&&%#@#%*&&%%@.@#%%&&%$@.@#%&&&&$@.@#%%&&&$@+@#%%&&%$@@...@$#@+..#&=**&%%#..@#%&*&&&#.@#%&&&&%#.@$&&&&&%@.@$%&&&&&#@%=-=*%@..$&=-*&@@..+$====$+..", "..@@###@...###@@@##@.@@####@...@@###@@@...@@#@@@@..@######....@@##@@..+...@@.@..@$%$$##@@.+.@@###@@@..+@@####@...#####@....@###@@@.@$%%$#.+.@$%%$#@....@$%$$@+..", "......@.....@@@@$%%#...@@@@@.+.....@....+.........+.........+.@.@........@#@@.....@##@#@@...@#.@....@$%%$%%$@@.+.........+..@.@....+.............@@#@.+.........", ".@#@@@+@..@@##$$&-=%@@$###$@....@.@@@#@@.@@@.@@+.....@#@@....@##@@.+...@@#&%#@...@#&&&&$@..$#%#@...+#*-=*===%@.....@@@.+@@#$#$#$#@..........+...@#%%%@...+@+...+", "@#$#@#$##.@%&***=;>*##&*&&&%@@.##$%%%&%@@#$#$$#$@@+.@$&%$@@+#%&&%@@...+@#&=*%#@.+@%===*&#.@#%*%#@@@.%=,>>>>,&@.+..#%$#@.#&***=**&$.+@##$$@@..@.+#%==*$..@#$#@...", "@%**%%=&#@%=->>->,-&#&=>=--*%@#&=*==--=%#&*=**=*%#@@$*--&%#@#*;>=%@...#%&=;-*&%@@#*>--=&#+@$*>*&$##@%-'->>,>&@...@%**%@.$->,>)>>=&@@#%**&%@+##@@$*'>=$@+#%*&#@+.", "$=;-&=>*$#%=,;--;-*%$*>;->-=&$%->',','-&%=;,)>')=%#%&=>>=**$#*>>-%#..+%*=-),>-*$#%*,->=*%##%='-=***$%-'>;,,>*%.+.@%=*%@.@%**=-==&%@#&->)>=%#%&%$%=,>*#..#*-=%@..", "%-;-=-;&$@%=;-==,-*%%-,,>,,>=%#*->'>>-*%%-'-=->,&$$=>',,,;-%#*>'>=$@.@%=>>'>>;=%%*-,-,--*%$*-'>,,>-%&>'>;;>;-&@..@%==%#.#%**>>=**%#&=-;;>>*%%=*%&=>=$@.@%=>=%@..", "#*=-;;-&@.$=>=*=>,-%%=;;->>-*$@#&=->=&$#%=,=**-,*$$*--,>>>-&#*>>>=%@.+%---;;;'=&%=-,-'>-=*%*----,-*%%->,>>>>-%...#%-=%@@$*=->'-==&$=----=>>&%--*&;-*$@.@%--*$@..", "@$*-;,=%@+$=-**=,;=&$*;>---*%@.@%*=-&$@.%-,*&&-,&##%*-,---=%$*->>=$@.@%---,;,;=%%*-,-,-==&%*-=->-&#@%=;,;;;>=$@+.#&>=%@.$*==;;==*&%-->-==-,%$*=*=,*%#..@%--*&$@+", "@$&-,,-%#@%===*=>=*%#&>>---*$@.@$*==%@..%=,=&&=,*$+$&->>>>=%%->,>*%#@@%=-=,,>;=%$&=>--=*%#$&&=>-*$@.$=>>,>'>*#...#&,-%$.@$%&=-*%$#%=->-**->&#%*=--&#@.@$&-====%#", "@%*>,;-*&$$=--=-=&%$#&>>---&$..#&==&#..@%-'=&*>,&#@%*-->;,*$%-,;-=*%$#$**='>=-&$#&->=-=&#@@$%=>-&@..#*=-=->-%#..@$=>-%@.@@#&=-&$@@%->>=*=>-&@$&-,*%@..#%=-==;,*$", "#*>>==>,>&$*>>--*%@@@&-;>--*$.@%*=*%#..+$-;--->>*$$*==->>-%@$=->-,>-*&#$%*;-*&$#%->-*-=%#.@$&==&#@..@$&*->>=%@.@$&--*#@..@$=--&#..$=;-==>>*##&=-=%#...$=>>>>;,-%", "%-=*%&*==%#%*-=*%@@.@&->>-=&@+#&==%#@...$*-**&=-&$%==&**=*#@$*=**=--*%@@$&;-%#@@%==&&=&$@.@%**%$@..+.@$&-,-*#@.#&=>=%#..+@%*-=%@..#&**->=*$#%=-*&#@..@%=;>-==->&", "$*&$#@#%%$@@%&&%#@..@%===*&$@.#%&&$@+..+#%*%$$%%$@$&&$$%%#@.#%%%%&**&$..@%=*$@..%&&#$%%#@.@$%%#@......@$*=*%@@.@%==%#....@#&*&$@..+@$%&=&#@@%*=%#@...+$*=**&%**%", "@$#@..+@#@..@###....@#%&%$$@+.@#$#@.....@#$@.@##@.@#@@.@@@..@#@@@#$##..+@#%$#@..@#@@@@@@...@##@....+.+.#$$##..@@$%$#.+..+.@$#$@.....@#$$#@..#%$@......@$$%$##$$#"}; xscreensaver-5.36/hacks/images/matrix2.xpm000644 000767 000024 00000357037 10046031372 020623 0ustar00jwzstaff000000 000000 /* XPM */ static char * matrix2_xpm[] = { "320 377 13 1", " c None", ". c #000000", "+ c #081E08", "@ c #0B2A0B", "# c #165016", "$ c #1B641B", "% c #217A21", "& c #279027", "* c #2BA02B", "= c #5AD25A", "- c #81DD81", "; c #E0F7E0", "> c #A7E7A7", "...........................++++++................+..+............+++@@###@@+++.......+++@###@++............+.++......................................+.+.+.............+@#####@+........+@##$##@+...............+++++.................................................................................................++@@#@@+..", "..........................++@@#@@++..........+++++++++++.........+@##$$$%$$#@++......++#$$%$$#+++.........++@+@+++..................................++++++............++#$%&%$#@+......+@#$%%%$#++............+++@@@+++...............................................................................................+@#$$$#@+.", "........................+.@@$$%$$@@+.......++@@#@#@#@#@@++.....+.+#&**====&%$@+.....++#$&=-=&$#@+.......++@@##$#@+................................++@###@@+..........++#$&;;=*&#++....++#&*=;;&$#++...........+@#$$$#@+.............................................................................................+++#%===$#@.", "........................++@$%*&*%$@++.....++@#$$%$$$%$##@++....++@$*====-=**%#+....++#$&*->-*&%#@++....++@#$%%%$#@++...........++@+++++..........++@#$%%$#@+........++@$&*;;==*#++....++#&==;;*&$@+.........++@#$%&&$#@++..........+.+++.............................................................................+#$&---&$@.", "........................+@$*=;;;=*$@+.....++$%&=-***-=&%$++....++#%=->>>;;==*#@...++#$&->;;;-=*%$++....++#%=----%#@+.........++@@###@@++.........+@$%=--*&#++.......+@#%&=;;=**#++....++#**=;;**%#@+.......++@#%&;;;&%#@++.........++@@@++..........................................................................++$&*;;>&$@.", ".......................++#$*=;;;=*$#+....++#%**>-=*=>>**%#+....+@$&->>>>;;-=*$@..++@$%*->;;;>-**%@+...++#$&-->>-&$@++.......++#$%%%%%##++.......++#$&->-=&$@+......++@$==->>*&$@+......+@$**>;-==$@++.....++@#%&*;;;*&$#@++.......+@#$$$#@+........................................................................++@$*=;;;*%#.", ".......................++#&==;;;==%#@....++#&*=>>===>>=*&#+...++#$&->>>>;;-==%#..+@$%*=>>;;;>-=*&#@...+@$%*->>>>*%$@+.....++@#$%****&%$@+.......+@#&*>>>=*$@+......+@#%=->>>*%$@+.....++@#%*>>>-=%#@+....++@$$&*=;;;=*&%#@+......++#$&&&$#@+.......................................................................++#%*=;;;*$#.", ".......................+@#%->;;;>-&$++...+@$*=-;;---;;==*#@...+@#&*>>>>>;;-==%#.+@#%->>;;;;;;;==*#@..++#**=>>>>-==$@+.....++#$&>>;;;>-%#++......+@%*=;;;==$@++......@$&->>>-*$#+........+#%*->>>>&$@+....+@#*====;;;====*#@......+#$&;;;&$@+.......................................................................+@$&-->>>*$@.", "........................@$&->;;;>-&$@+..++@$==-;;---;;-=*$@..++#%&*>>>>>;;--=&$.+@$&->>;;;;;;;-=*$@..+@#*==>>>>>-=%#@+....+@$%*>>;;;>>&$@......++#%==;;;=*$@+......+@%*>>>>-&$@+.......++@#&->>>>&$#+....+#$==-=-;;;-=-==$@.....++#%*;;;*%#++......................................................................+@$&->>>-%$@.", ".......................+@$&->;;;--&$@...++@%*=-;;-=-;;==&#+.++@#=--;;;;;;;;>>*%.+#$&;;;->===>-==*#@.++@#*=->>>>->-&$@+...++#&==;;===--%#@+.....+@$&>>>--*%#++.....++#$*>>>>-%#++.........@#%->>>>*%#+...++@$=--;;;;;;;-==$#......@#&*;;;*&#@+...........................+.+.+.+..++...............................+@#&*;;==*%#+.", ".......................++$&=-;;;>=&#@+...+#$==-;;=-=;;=*&#+..+#$==-;;;;;;;;>>*&.+#$*>;;->===>-=*&#+..+@#*==>>>>>>-&%#@+..+@#*==;;===--%#@+.....+@#&>>--=&$@++......+#%*;;;=&%#++.........+#$**;;;*%#++..++#$==-;;;;;;;>-=$#...+++#$&=;;;=&$#++.........................+++@+@+@@++@+++............................+#$&*;;==&$@+.", ".......................+@$&->;;;--&$@...++@$*==;;===;;=*%@+.++#$=->;;;;;;;;>>*%.+@%&;;;->===--=*&#@..+@#&==>>>>>>>*%$@+..+@#*==;;==*-=%#@++.....@#%->===$#@+......+@#&*;;;=&$@+.........++@$&=;;;*&#@....+@#=--;;;;;;;-==$@..++@#$%*=;;;=*&$#@+......................++@@##$#$#$$$##@@+..........................+@#%*=;;=*%#++.", "........................+#&->;;;>-%$++...+@#*========-&%#@+.++#%==-;;;;;;;;>>*$.+@$&>>>;;>>>-==*%#@...+@$%*>>>>>>-==*@+..+@$&==;;==**&%$@@+.....+#$*=&%$#@+........+#&*;;;*&$@+..........+@$&*;;;*&#++..++@#%*==-;;;--=*%#@..+#$%&**=;;;=**&%$@......................+@$$%&&&&&&&&&%%$@.........................+@#&=-->>*$#++..", ".......................+@#%->;;;>-%#@....++#&**=*&&*==%#@+...+@$=->;;;;;;;;>>&$.+@#%->>;;>>>-==*&$@..++@#%*>>>>>>>==*#+..+@#**=;;===**%%$@+....++@#&&$#@+++.......+@#&*;;;*&$+...........++$&*;;;*&$+....++#$**--;;;-=**%#@.+@#%**===;;;===**%$.....................+@$%****=**=****&%$.........................+#$*>;;-=&$@+...", "........................+#$*=;;;=*%@+.....++@#$$$$$$$##@@+..++#%&==;;---;;==*%#..+#$&*=--;;;;;--=%#...+@#%*->;;;>>**%#+..+@#*==;;;;;====*$@......+@@#@@@+..........+$&*;;;*&#@...........++$&*;;;*&#@+...++#%*=;;---;;=**#+.+#%*;;;;;;;;;;;;;*%.....................+#%*;;;;;;;;;;;;;*%........................++#%*;;;==%#@+...", "........................+@$**;;;=&$#++....++@@@#@@@@#@@+....+@#%**=;;---;;=**%#.++@$&**->;;;;;>>-%$...+@#%*>>;;;>>=*%$@.++@$*==;;;;;==-==$#......++++++...........++#&*;;;*&$++..........++$&*;;;*&#+.....@@&*=;;---;;=*&#+.+#&*;;;;;;;;;;;;;*%............+........+#&*;;;;;;;;;;;;;*&........................+@$&*;;;==$@+....", "........................+@#&*;;;*&$@........++++++++++++....+@#&*==;;---;;==*%#..+@$%*==-;;;;;>>-&$..++@#%*->;;;>>=*&$@.++#$*==;;;;;==--=%#.......+++.+...........++#&*;;;*&$@+..........+@$&=;;;*&#+.....+#%*=;;===;;=*&#+.+#%*;;;;;;;;;;;;;*%........+++++++......+@%*;;;;;;;;;;;;;*%........++++++.........++#$==;;;*&$@++...", "........................++#&*;;;*%#++...........+.+.+.......+@%*;;;;;;;;;;;>>%#.++#%==-=-===>-;;;*$..++@*==--;;;;>>>-%#.+@#&=>>>>;;;;;>>-&#.......................++#&*;;;=&$@+..........+@$&*;;;*&#@+...++@%**=-***-=*&%@+.+@$%**===;;;===**%$.......++@@##@+++....+@$%***=*=*=*=***%#......+++@###+++.......+@$&>>>--&$@+.....", ".........................+#$*;;;*$#+........................+#%*;;;;;;;;;;;>>$#.+@#%=->=-===--;;;&%..++@&*==-;;;;;>>-%$.+@$&->>>>;;;;;>>-%#.......................++#&*;;;=&%@+..........+@$*=;;;*%#+....++@$&*==&&&==&%$@+..+@$%&**=;;;=**&%$@.......+@#$$$$#++....++@$$&&&&&&&&&&%%#@......+@#$$$$#@+......++#%*>>--=%$@+.....", "........................++@$&***%$@+........................+@$*=--;;>>>>>=*&$@.+@$&>;;;;;>;;;>>>*$...+@#$%*=>>>==>>-&#.+@$*;;;-->->;;===&$........................+#%*>>>-=%#@+........++#%=->;>*%#+.....++@###$#$#$$##+++..++@#$&*=;;;=*&$#@+......++#$===&&#++....++@####$#$$#$$##@+.....++#&*===$#+.....++@$&*>;-==$@+......", ".........................+@#%***%#@+........................+@$%=--;;>>>>>**$#@.+@%&>;;;;>>>;;>>-&$..+.+@#$&*>>>==>>-&$.+#$*>;;>-->-;;-==%#.......................++@$&>>;-=&$@+.......++@$&=-;>>*$#++.....++@@@@@@@@@@++.+....+@#$&=;;;**$#@+.......+#$&---=&#@+......+++@@@@@@@+++++......+@$&=---%$@+....+@#&*=;;=&%#@+......", ".........................++#%***%$++.........................@#%=--;;>>>>>*%#@+.+@$&>;;;;>>>;;>>-%#...+++@$%*>>>==>>-&#.+#$&>;;->-->;;===&$........................+@$&=->>>&%@++......++#$*>>---&$@+........+++++.++++.+.......+@#&*;;;*&$@+.......+@$%*>>-=*$@+........+......++++.......++#$*=>>-&$@+....+@$&==;;*&$@++......", ".........................+@#%;;;%#@.........................++#%==-;;>;;--&%@++.+@#&=-->>;;;>>**%#@.....++@$&>;;;;>>-%#.+@$&>>>;;;;;;;;;;*%.........................@#%=->>>*&#@+......+@#%*>>>-=%#@..........+.+.....+.........++#%*;;;*%#++.......+@%*=;;;=*$@+...........+...............+@%=-;;;&$@+....+#%=-->>*%#@+.......", ".........................++#%;;;%#@+.........................+@$==-;;;;;--&$@+...+#$==-->;;;>>*%$#+......+@$%>>>>>>--$#..@#%->>;;;;;>>;;;&%.........................+#$==->>*&$@++.....+@$&*>>-==$@++............................+@$&;;;&$@+.......+@#%==;;;-*$@++.........................++@$=-;;;&$@++...+#%=>>>-*$@+........", "..........................+#$%%%$@++........................++@$*=-;;>>>>-%$@+..++++#$%*=;;;**$#++........+#$%&*&*&%%#@..+@#%&***=******&%#.......................+.++#%*=;;==*#+.....++#*==;;**%#@+.............................+@#%&&&$#@+........@#&>>>--*%#@+...........................+@#$&&*&$#@.....+#%-->>-%$@+........", "..........................++##$#@@+..........................+@$*=-;;>>>-=%#+......++#$&*;;;*&#@+........+++@#$$$$$##@+..++@#$%&%&&&&&&%$#@.........................++@$%*;;==*#++....++#*==;;*&$@+...............................+@##$$#@+........+@$%>>--=&$@+.............................+@#$%$$#@++....@#%=-==*$#+.........", "...........................++@@@++...........................++#&*=>>>>>-=$#++.......+@#%=-=$#@+...........+@@@##@@@++...+++@@@###$######@+..........................++#%&;;=*&#+.....++@&*=;;&$#++................................++@@@+++........++#&->===$#++.............................+++@@#@++......+@$===*%#@+.........", "............................+++++............................++@#$%&&*&&%$#++.........+@#$$$#@+..............+++++++++......++++@+@+@+@+++............................+@#$%%%$#@++.....+@#$%&%%#@+..................................+++.+..........++#%*=&%$#@++...............................+++++++......+@#***%%@++.........", "..............................................................++@##$$$$$##@++..........+@@##@++................+.+............+.+.+.+.+................................+@##$##@++......++@##$#@@+.....................................+............++@#**%$#++..................................+.+.........++@#$##@@+..........", "......+++@@++++.........+.+++@++++..........+++@+@@+@+++.........++++@@@+++.............+++@+++........+++@@@@@@@++++............++++@@++.....++@+@@@@@@@@+++.........+++@+@+++...........+++@@+@+..................................................................................................................+.+.........", ".....+@@##$##@+++.......++@@####@+..........++@###$$##@++.......++@#$#$$$#@++..........+@@@##@+++.....++@###$$$$$##@++.........+@@##$###@@+..+@@#$$$$$$$$##@@+......++@@##$###+++.......+++@#####@+++............................................................................................................+++++@++++.....", "..+++@#$%%&%%$#@++....+@@#$%%%%$#@++......++@#$%%&&&%%$#@++...++@#$$%&&&%%$#@++......++@#$%$%$#@+...+.+@#$%&&&&&&&$$@@......+++@#$%%&&%$$@+.++#$%%&&&&&&&&%$#@....+++##$%%&%%$$@@+......+@#$%%%%%$#@@+.........................................................................................................++@######@@++....", "..++@$$*=->-=*%$@++..++#$%&*=---%#++.....++@#$&==>>>==&$#@+...+@#$&==>>>==%%#@+......+@#%*====$#+....+@%&*->->->>==*$@+.....++#$%&*->--=%$@.+#$==->>>->>>===$#+...+@#$&*=->-=*%$#@+....+@#$&---==&%$#++.......................................................................................................++@$$%&&&%%##++...", "..@@$%&==>>>==&%$@+.++#$&**==>--&%@+.....+@#%&*-->>>--*&%#@..+@#%&*-->>>--*&%#@.....++#%&===-=%$@+..+@#%*=>>>>>>>--=$#+.....@@$&**=>>>>-*$@.+#%=-->>>>>>>--=%$@..+@#$&*==>>>==*&%#@..++@#%&*>>>--**&$#+....................................................++++++.........................++++++.............++#$%&******%$#@+..", ".+@$*==;;;;;;;==*$@.++#%>;;;;;;;*%#+....++#$=->;;;;;;;>-=%#.+@@$=->;;;;;;;>-=%#.....+@$*=;;;;;*$#++.++$*==;;;;;;>>-=%#+...++@$*=;;;;;>>>*%#.@$&>>;;;;;>;;;;>&$@.+@@%=--;;;;;;;>-=$#...+#$*;;>>>;;;;>&$@..................................................+++@#@@@++......................++@@#@@@++..........+@$**;;;;;;;=*%#++.", ".+#$===;;;;>;;-==$#.+@#&>;;;;;;;*&#@+...++$%->>;;;;;;;>>-%$..+#%-->;;;;;;;>>-%$....+@#%==;;;;;*%#+..+@$*=-;;;;;;;>>-%#+...+@#%*=;;;;;;>>*%#.@$&>>;;;;;;;;;;;&%@..@$%->>;;;;;;;>>-&$..+@$%*;;;;;;;;;;&%@.........++++.................++++++...........+++@@#$$$$##@.....++++++++++++....+@@$$$$$#@@++.......++#%*=;;;;;;;=**$@+.", "+@#%=--;;;;;;;-==%$..@#%>>;;;;;;*&#+.....@$&->>;;;;;;;>>-&$.+@#%->>;;;;;;;>>-&$....+@#%==;;;;;*&#++.+#$==-;;;;;;;>-=%#+..++@%&=-;;;;;>>>&$@.+#%>>;;;>>;;;;;;*%@.+@$&->>;;;;;;;>>-&$.++@$**;;;;;;;;;;*%$.......+@@@@@@++.............++@#@@@+..........+@@$$%&&*&%#@....+++@@@@@@@@@+@+..+@$%&*&&%$#@@++.....+@#&*=;;;;;;;==*%#@.", "+@%&>;;--===--;;>&$..+@$&**==;;;*&$@....++$%>>;--===--;;;*%..@#%=--=====->;;>&$....+#$*>;>>>;;*&#@..+#$==-;;======*&$#+..+@#%*;;>>>===*&%#@.+@$%&****==>>>>>&$@.+@%*>;;--===->;;;*$.+@#*==;;=====;;;=&$.....++@#$$%$#@+............+@##$$$#@+.......+@@#$%&--;;;=*$..++@##$$$$$$$$$##@+.@#$;;;>>*&&$#@++....+@#*==;;===>>;;>&$@.", "+@%*;;;--***--;;;*%.++@@$&**=;;;*%$++...+@#%>>>==**=--;;;*%.++@#=-==**==->;;;*%...+@#%*>;>>>;;*&#++.+@$==-;;-=====**$#+.++@$**;;>>-===*&$@+.+@@$$%%&&*=>>>>>&$@.+@$&;;;>-===--;;>*$.+@$*=-;;=*=*=;;;**$.....++#$&&&&$#@+..........+@#$%*&&$#@+....++@#$%***--;;;=*#..+@#%%&&&&*&&&&%%#@.+#%;;;>>=**&%$@@+...+@$*=-;;===>>;;>*%@.", "@#%*;;;-=***==;;;*%...++##&*=;;;=%$++....+@$%&&&&&**>>;;;*$..+@#$%%&***=;;>>>&$..++@%*=;;-=-;;*&#@..+#$*=-;;;;;;;>-=%#@.+@#*==;;>>>>>=*&$@+..++@@##$%**;;-==%#@.+#$*>>>>>===>>>>>&%.+@$==-;;=*=*=;;;=*$.....+@$==;;;&$@+..........+@$==;;;&$@+...++@#%*=>;;;;===&%#..@#$-->>>>>>>->--%#.+@$&*=>>;;;-=%$#@@..++#**=--=*==-;;;*$#.", "+#%*;;;-=*&*==;;;*%....++#$**;;;*&#@.....+@@#$$$%&*=>>;;>*$...++##%%&*==;;>>>&%..+@#&*=;;---;;*&$++.+#$==-;;;;;;;--=%$+.+@$*=-;;>>>>-==*$#+...++++@#$&*;;-==$#+.+@$&>>>>>===>>>>>&$.+@$==-;>=*=*=;;;=*$....++#$=-;;;*$#+.........++#$=-;;;*$#+..++#$%&==;;;;;==*%#@.+@$&->>>>>>>>>>>-%$.+@#$&*>>;;;--*&%$#@.++#%*====*==-;;;*%#.", "+#%*;;;-=&&&==;;;*%.....+@#&=;;;*&$++.....++@##$%&**>>;;>&$...++@@$%**==;;>>>&$..+#$*==;;=-=;;*&$@+.+@#*==;;;;;;;>--&$@.+#$==-;;>>>>>===%$@.....+++@$&=;;-=*$@+.+@$&->>>>===>>>>>&$.+@$*=-;;==*==;;;=*$....++@%=-;;;*$#+.........++#$=-;;;*$#+..@@$%**=-;;;;;=**#@+.+@$&>>>>>>>>>>>>>&$..+@#$&->;;;>-=**%$@.++@%&*==**==-;;;&%@.", "+#&*;;;==&%&==;;;*%......@#&*;;;*&#@.......++@#$%==-;;===%#....++@$==;;;;;-==&$.+@$%-->>>-=-;;=*$@+.+@#&*=>>===>>;;;*%#.+@$==-;;;;;;;;;;*$#......+@#%*=;;**$#++.+@$&==-;;;;;;;===&$.+@$*==;;===>>;;;=*%.....+#$*=>>>&%@++.........+#$==>>>*$@@..@$%>>>;;>>-=*&%#@++.@#&*>>;;;;;;;;;;>*%...+@#$&*===;;;;;=*$..++@#$&*==-;;>>>&$@.", "+#%*;;;==&%&==;;;*&......@#&*;;;*&$++.......+@#%*=--;;==&$@....++@#*=;;;;;===&$.+@$&->>>>=-=;;=*%$@..+@%&*>>===>>;;;*&#.+#$==-;;;;;;;;;;*%#......+@$&*=;;*&$@+..+@$&===;;;;;;;-==&$.+@#*==;;===->;;;=*$....++@$*=>>-%$@...........+@#*=->-%$@...@$&>>;;;>--*&%#@@...@#&*>>;;;;;;;;;>>*&....+@#$&*==;;;;;==$..+++@$%*=--;;>>-%#@.", "+#&*;;;==&&&=-;;;*%.....+@#&*;;;*&#@........+#$*=;;;-=*&$@@....++#$%&===>>;;>&%.+#%*;;;;;>>>;;-==$@.++@#$%%&&&*==;;;=*$.+@$==-;;-====;;;=*$......+@$=-->>*%#@+..+@$&>;;>>=-=>>;;>&%.++#$**>>;;;;;;;;=*$......+##%%%%$@++..........++@$$&%%$@++..#&*;;;;;---*&$#+++..+#&*>>>>>>>>>>>>>*%....++@$%*==;;;;;-=%....+@#%*;;;--**%$@+.", "+#%*;;;==&&&=-;;;*&......@$&*;;;*&$@......++@$%==;;;-=&%#++...++@#$$&*==>>;;;*%.+#%*;;;;;>>>;;>-=%#.++@#$%%%$%&*=;;;=*#.+#$==-;;=====;;;=&$.....++#%=--;>*%#++..+#%*;;;>>===>>;;;*%..+@#%*>;;;;;;;;;=*$.....+++@#$$#@@+............++##$###@.+..#%*;;;;;---*&$#@+...+#&*>>>>>>>>>>>>>*$....++#$&**=>;;;;-=%.....@#%*;;;-=*%##++.", "+#&*>;;-=*&*==;;;*%.....+@$**;;;=&$@+.....+@#%*=-;;;-=%$@++..++##$$$%&*=>>;;;*%.@#&*;;;;;>>>;;>-=%#.++##$$$$$$&*=;;;=*$.+@$==-;;=====;;;=*$.....+@#&=->>>*$@+...+@%*;;;>>===>>;;;*%...+#%&>>;;;;;;;;=*$......++@#@#@@+.............+++@##@+++...@%*>;;;;>-==*&$#@++.@#&*>>>>>>>>>>>>>*%...+@@$%**==;;;;;==$....++#%*;;;==%$@++..", "+#%*;;;-=*&*==;;;*%....++#$&=;;;**$#++..+++#&*=;;>>-=&%#@++.++@$*==&&&**--;;;*%.+#&*;>;;;;;;;;>>-&#.+@#*==&&%%&*=;;;=*$.+#$*=-;;==**=;;;=*$.....+@$&>>>>-&$@++..@#%*;;;--===--;;;*%..+++$%*===---;;;*&#.......+@@###@++............++@@###@+....+#$&*=--;;;;>*&%#@+.+#&*>>;;;;;;;;;>>*%.+++#$%==;;;>>=**&$#.....+#%*>>>*&$#++...", "+#$*;;;-==**==;;;*$...++@$%*=;;;=*&$@@+..+#$*==;;>>-=*&$#@+.+@#%===*&**=--;;;*%.+#&*>>;;;;;;;;>>-&$.+#$===**&**==;;;=*$.+@$==-;;=====;;;**$....++#$*>>>>-&$@+...+@%*;;;--===--;;;*%...+@#%**=-==-;;;*%#......+@#$%$$#@+...........++@#$$$$#@+...+@#$%*==;;;;;==&$#@.+#%*>>;;>;;>>>>>>*%..@#$&*--;;;>>**&$#@....++#$*>>>*%#@+....", "+@$&>;;--===--;;>&$..++#$%**=;;;=**%$@+.+@#%*==;;>>-=**%#@@.+@$&==-=**=*--;;>*$.+@%&>>>;;;;;;;>>-&#.+#%==-==**===;;;=&$.++#*==;;=====;;;=*#.....+#$*>>>>-%#++...+#$*>;;--=*=--;;;&$..++@$%*===--=;;;*%#.....++#$%&&&$#++..........+@#%&*&%$#@...++@#$%==;;;;;==*&$#.+@$&>>>>>>>>>>>>-&$.+@$&*=->;;;>-&%##++.....+@$*>>>*%#++....", "++$%==-;;>>>;;--=%$.++@$*==>>;;;>>-==$@.+#$*;;;;;>>>>>==*$@.+#%*;;;>>>>>;;>>>&$.++#$&**=->>>;;>--&$.@#$-->;;>->;;;;>*%#.++#$**;;;;;>>;;;**#.....+#%*;;;**$#+....+@$&->>;;>>>;;>>>&$..+@$%*->>>>;;>>>&$@....++@#==;;;&$@+.........+@#%==;;;&#@+....++@#$&***>>;;;=*#.++#$%&&&*&**&*&&%$#.@#$>;;;;===*&$#@++.....++@$&->-&$@+.....", "++@$*==;;>>>;;==*$@.++#$==>>>;;;>>-==$#.+#%*;;;;;>>>>>--=$#.+#%*;;;;;>>>;;>>-%#.++@#$&*==>>>;;>--%$.+#$=>>;;>>>;;;;>&$@..+@#%*;;;;;;;;;;*&#.....+#%*;;;*&$++....++#%->>;;>>>;;>>-%#..+@%&*>>>>>;;>>-%$@.....+#$==;;;&$@+.........+@$&=-;;;&$@+......+@#$%&*--;;;=*#.+++@#$%$%$%$%%$$##+.+#%>;;>>=*&%$#@++.......+@$&->-&$@+.....", ".+@#$&*=->;>>-*&%#@.++#%=->;;;;;;;>-=%#.+#%*>;;;;;;;;;>-=%#.+@$%===;;;;;>>**%$#...++@$%==>;;;;>>-%$.+@#%*=>>;;;>>=*&$#@...+@$%==>>>;;-==&$@....++@$&>>>*%#++....++@$%*=>>;;;>>**%$@.++#&*=>>;;>--**%$@+....++#$==>>>*%#++.......++#$*;;->=&$@+........+@#$$&&**&%$#...++@@@#@###@#@@@++.+#$****&%%$#@++.........+@$&->-&$@+.....", "..+@#$&==>>>-=&%#@+.++#%=>>>;;;;>>>--$#.+#%*>>;;>;;;>>>--%#..+#$*==>>>>>>>*&$@+....++#$==>>>>>>--%#.++#$%*->>>>>>*&%#@+...++#$**>>>>>==*%#@.....+@$&---&$@++.....++@$%*->>>>>>*&$#+.++@%*=>>>>>==&%##++.....+@$*=>>>&$@+........++#%*;;--=%#@+........+++@##$$%$$@@...+.+++++++++++++...+@#%&&%$##@+++..........++#%---%#@+.....", "...+@#$*=>>>==$#@+...+@$==->>>>>>>-==$@.+@%&>>>>>>>>>>-==$@.++@$&*=>>>>>--%$#@+....++@#**>>>>>-==$@..++@$%-->>>>-&$#@+.....+@#%*-->>-=*&#@+.....++#$=--$#@+.......++#$%-->>>--%$#++.++@%&*>>>>>=*%#@++.....++@#*=>>-%#@+........+@$&*;;-==$@+...........+++@@#@@@+..........+..+.+.......+@##$##@+++.............@#$===$#+......", "....+@#$%%&&%$#@+...++@#$%&&*&*&*&&%$#@.++#$%&&**&**&*&%$#@..++@#$%&*&*&&%#@++.......+#$%&&&&&&%$#@...++##%&&*&&%$#+++......+@#$%&&&&%$#@++.....++@#$$$#@+........+++#$%&&&&&%$@+++..+@@$%&&&&&%$#@++.......++##$%%$$@+.........+@&*=->*&%#@+............+++++++++........................++@@++++...............+@#$$$#@+......", ".....++@##$$##+++.....++##$$$%$%$$$$@@+..++##$$$%%$%$$$##++...++@@##$%$$$##++......+.++@#$$$%$$##++....++@##$$$##@++.........+@@##$$##@@++.......++@###@++..........++@#$$%$##@++.....++@@$$$$$#@+++.........++@#$##@++........++@%**-=&$#@+.................+.+..........................++.++..................++@@#@@++......", "......++@@@+@++.......+++@@#@#@#@@@++++..+++@@#@#@#@#@@++++.....++@@@@@@@+++...........++@@@#@@+@+.....+++@@@#@@@+++..........++@@@@@@+...........++++++..............++@@@@@@++.......++@@@@@@+@+...........++++@+@++..........++@$$$$$#+++.......................................................................+++++........", ".........................+.+.+.+...........+.++++.+.+................++++.+.......+++.+++.+............+.+++.++++.+.........++.+++.+++.+............++++.+.........+.++.+....+.++.+......+.++.++++.+..........+.+++.+++.+......+.+++...+.++..+......+++.+.+............+...........++.+.....+........++............+..+.........", "......+++++++...........++++@+@+++........+++@+@@@@@+++...........++@+++@+++++..+++++@+@@@@@++........++@+@@@@@@@@++++...++++@@@@@@@@@@+@+........+++@+@@+@++++..++++@+@+++++@+@+++.....++@+@@@+@+@++.........+@+@@@@@+@++....++@+@+@+++@++@++....++++@@@@+++.........++@+@+..+..++++++...+++++++.+++++@+++.......++++@+++......", ".....++@####@@++......++@@##$###@+......++@@#$$#$$###@+++.......++@@#$$####@@++.+@##$$$$#$##@@++....+++@#$#$$$$$$#$@@+...+@@##$$#$$$#$###@+.....++@@#######@@++..+@###$###@###$###@..+++@##$#$$$$###@@.....+++@##$#$#$###@+.++@###$###@######@+.++@##$#$####++......++@@###@++++@@####@.++@@###@++@@#####@+.....++@@####@@+.....", "..+++@#$$%%$$#@+.....++@#$%%%&%$#@+.....+@#$%%&&&&&%%$#@++....+++@#$%%&&&%%$$#@.@#$%%&&&&&%%$#@++...+@#$%&&&&&&&&&%$#@+.+@#$%&&&&&&&&&&%$#@...++@@#$%&&&&%%$$#@.+@#$%&%%%$$$$%%&%$#..++##$%%&&&&&&%$#@@....++#$$%&&&&&&%$#@.+@#$%%%%%$$$%%%%$#@.++#$%&&&&&$$#@+.....+@#$$%%##@+@##$%%$#.+@#$$%$$#@##$%%%$#@...+++@#$%%%%$##++...", "..++@#%%***&&$#@+....++#&*=----=%#@+....+#$=----->--=*%$@++...+@#$**-----==***#.#**---->---==%$#@++.+#$=----->-----=%#@.+#$=--->->->->--=*#...+@#$**-----==***#.@#**-----***-----**..+@#*==---->--==*$@....+@#*=-->->---**#.+#**-----***---==$#.+#$=-------&%#++....@#**--=&%###%&-=-**.+#$==-=*$$$*==-=**#...+@#$**---==%$#@+..", "..+@%&*>>;;;-=$#++...+@$*==>>>->&%#@+...@$%-->>>>>>>-=*&$@+.++@$$&*=->>>>=-==*$.$*=->>>>>>>-=*&$#@+.@$%-->>>>>>>>>--&$@.@$%-->>>>>>>>>>-==$.++@#$&*=->>>>=-==*$.@$*=->>--*=*-->>-=*.++@%==->>>>>>>-==$@...++#%==>>>>>>>>=*$.@$*=>>>>-=*=->>--%#.@#%=->>>>>-=&#@+....@$==-->*&$$$&*-->=*.@$&---==&%%==->>=*$..@@#%&*=->--=&&$#@+.", ".+@#&*=>;;;;-=&$@++..+@$===>>>>>*&$@+...@$&->>>>>>>>>==*%#@.+@$%&*=->>>>>---==%.$==>>>>>>>>>-=**%#@.@$&->>>>>>>>>>>>*%#.@$&->>>>>>>>>>>>==%.+@$%&*=->>>>>---==%.#$==>>>>>===>>>>>==.++#$==>>>>>>>>>-=$#...++#%=->>>>>>>>==$.#$==>>>>>===>>>>-&$.@$&->>>>>>-=*#@+....#$==>>>=*&%&*=>>>==.#$*->>==***==>>>==%.+@$%&*=->>>>-=**%#@.", "++#$*==>;;;;>-*%#++.++#$=->;;;;;-=%#++..#%*;;;;;;;;;;;;;*$#.@#%-->;;;;;;;;;;>>&.%=-;;;;;;;;;;;;;&%#.#%*;;;;;;;;;;;;;=&$.@%*;;;;;;;;;;;;;>>&.@#%-->;;;;;;;;;;>>&.@%=-;;;;;===;;;;;-=.++#$=->;>;;;;>>-=%#...++#%->>;;;;;;;==$.#%=-;;;;;=-=;;;;>*%.@$&>>;;;;;>=*$@+....#%=-;;;>>***->;;;-=.#&*;;;;;=**>>;;;-=%.+#%-->;;;;>;;;;;&%#.", ".@#%=->>>---;;=&%@+..+@$=->;;;;;>=&$@+..@%*>;;;;;;;;;;;;*%#.@$&->>;;>>>>>;;;>>&.$=-;;;;;>>;;;;;;*&$.@%*>;;;;;;;;;;;;=*$.@%*>;;;;;;;;;;;;;>&.@$&->>;;;>>>;;;;>>&.#$=-;;;;;===;;;;;-=.++@$==->;;;;;>--=#@...++@$=->>;;;;;;-=$.@$=-;;;;;=-=;;;;>&$.@$&>>>;;;>>=*#++....#%=-;;;>>*=*>>;;;-=.#&=;;;;;===>>;;;-=%.@$&->>;;;>>;;;;;*&$.", "+@$&->>>>---;;=*&#+.++@$%*=;;;;;>>*$@+..@$&=--;;=====;;;=*$.#%*;;;--=*=*=>>>>>&.$&=;;;--==*==;;;-=%.@#&=--;;=====;;;**$.@$&=--;;=====>>>>>*.#%*;;;--=*=*=>>>>>&.@$&*;;;-====--;;;=&..+@#$&**=;;;==*&$#@....+@#$&**=;;--=&%#.@$**;;;--;;;;;=*&$#.+#$&*=;;==*%$@@.....#%==;;;;;===;;;;;==.#&*;;;;;=--==;;;=*%.#%*;;;--==*==;;;-=%.", "@@%*;;;--->-;;-==$#...+#%&=>;;;;>>*%#++.+#%=--;;=====;;;=*$.#%*;;;-=**&**->>>>&.#&*;;;-=****=;;;-=%.@#%=--;;=====;;;=&$.+#%==-;;=====--->>%.#%*;;;-=*****>>>>>&.@$&*;;;--=*=--;;;*&...+@#$&*=;;;=*%$#@+....++@#%&*=;;--=&$@.@$&*;;;--;;;;;**%#@.+@$%*=;;==*%#++.....#$*=;;;;;===;;;;;=*.#&*;;;;;---==;;;=*%.#%*;;;-=****=;;;-=%.", "+#%*;;;>>;;;;;-==$@..++#$**>>;;;;>*&$@+.@#%==-;;=====;;;=*$.$&*;;;-=&%$%&=-->-%.#&*>;;-=*&&**;;;>-&.@#$==-;;=====;;;*&#.@#%=--;;=*===>-->-%.$&*;;;-=&%%&*-->>>%.+#**;;;--===--;;;*&....+@#%&=;;;**%#+++.....++@#$**;;-==&#@.+#&*;;;--;;;;;*%$@+..+@$**;;=*&#@++.....#%*=;;;;;===;;;;;=*.#&*;;;;;>->==;;;=*$.$&*;;;-=&%&**;;;>-&.", "+#%*;;;>>;;;;;-==%#..++#%*=;;---;;=*%@+.+#$==-;;>>>;;;;;=*%.$*=;;;=*%$###$%&%%#.#&*;;;-=&%$&*>>>>>&.+#%==-;;==-;;==*&$@.+#$==-;;===;;=**&$$.$*=;;;=*&%$%&*=***$.+#%*;;;>>>>>;;;;;*&.....+@$&*;;;**$@+.......+++@$&*;;-==%#+.@#&*;;;;;;;;=**$@++..+@$&*;;=*&#@.+.....@%*=;;;;;-=-;;;;;=*.#%*;;;>>;;;==;;;=*$.$*=;;;=*%$$%*>>>>>&.", "+#&*;;;;;;;;;;-==$#..+@#**=;;---;;=*&#+.+#$==-;;>>>;;;;;=*%.$*=;;;=*$#+@@###$#@.#&*;;;==%$$%*->>>>&.+#$==-;;=-=;;==*$#@.+#$==-;;===;;**&$#@.$*=;;;=*%$%&**==*&$.+$&*;;;>>>>>;>;;;*%.....+@$&*;;;*&#@+.....+++++@#&*;;-==$#+.+#&*;;;;;;;;=*%$@+...++#&*;;=*%#@+......@%*=;;;;;-=-;;;;;=*.#&*;;;>>;;;==;;;=*$.$*=;;;*&$##%*->>>>&.", "+#%*;;;;;;;;;;-==%#..+@$*=-;;===;;-==$@.+#$==-;;;;;;;;;;==%.$*=;;;*&$@+++@@@@@+.#%*;;;==%$#$&-->>>*.+#$==-;;;;;;;=*%$@+.+#$==-;;;;;;;**$#@+.$*=;;;**%$%=----==$.+#%*;;;;;>;;;;;;;*&......+$&*;;;*&$++...++++@@+@#&*;;-==$#+.+#%*;;;;;;;;==&#@+...++$&*;;=*%#@+@++...@$*=;;;>>;;;>>;;;=*.#&*;;;--;;;--;;;=*$.$*=;;;**$##$&-->>>*.", "+#&*;;;;;;;;;;-==%#.+@#%==-;;===;;-==%#.+#$==-;;;;;;;;;;-=&.$*=;;;*&$@+++++++++.#&*;;;==%##$&-->>>*.+#$==-;;;;;;;=*%$@+.+#$==-;;;;;;;*%$@++.$*=;;;=*%%&->>>-==%.+#&*;;;;;;;;;;;;;*&.....+@#&*;;;*&#@....+@##$###$&*;;-==$#+.+#&*;;;;;;;;==&$@++..++#&*;;=*&#@#@@@++.@%*=;;;>>;;;>>;;;=*.#&*;;;--;;;--;;;=*$.$*=;;;*&$@#$&-->>>&.", "+#%*;;;>>;;;;;>>-&$.+@$&=--;;===;;--=&$.+#%==-;;;;;;;;;;-=&.$*=;;;=&$@+++@@@@++.#%*;;;==%$#$&=->>>*.+#$==-;;;;;;;=*&%##.+#$==-;;;;;;;*&#++..$*=;;;**&&*->>>>==%.+#&*;;;;;;;>;;;;;*&......@$&*;;;*&$++...+#$%&%%$$&*;;-==$#+.+#&*;;;;;;;;-=*%#@+..++#&*;;=*&$$$$##@+.@$*=;;;>>;;;>>;;;=*.#%*;;;--;;;--;;;=*$.$*=;;;=&$##$*-->>>*.", "+#%*;;;>>;;;;;>>-%#.+#%*>;;;;;;;;;;>>&$.+@$==-;;=====>>>>>&.$*=;;;=*%#@@@##$$#@.#&*;;;==%$$%&-->>>&.+#$==-;;---;;===**#.+#$=--;;---;;*%#+...$*=;;;==&&*;;;;;>-&.+#&*;;;--===--;;;*%.....++$&=;;;*&$@+...#%*>>>&%%**;;===$#+.+#&*;;;>->>>;;=*%#@...@$&*;;=**%%===$#@.#$*=;;;==;;;==;;;=*.#&*;;;-->>>;;;;;=*$.$*=;;;=*%$$%*>>>>>&.", "@#%*;;;-->>>;;>>-&$.+#%*;;;;;;;;;;;;>*&.+#%==-;;==*==>>>>>&.#*=;;;=*&$#$$%&%%$#.#&*;;;==&%%&*->->>&.+#%==-;;---;;-====%.+#%==-;;---;;&$@+...#*=;;;=****;;;;;>>&.+#&*;;;--=*==-;;;*&.....+@$&*;;;=&$@+...#&*;;>*&&*=;;-==$@+.+#&*;;;-->>>;;==&$@.++@$&*;;==**&===%$@.@%*=;;;==>>>==;;;=*.#%*;;;>->>>;;;;;=*%.#*=;;;=*&%%&*>>>>>&.", "+#%*;;;->>>>;;>>-%#.@$*=;;;>----->;;;=*.@#%=--;>===*=>>>>>*.#%*;;;>-*&%%&-----$.$&*;;;-=*&&*=;;;==%.+#%=--;;===-=>>->-&.@#%==-;;====*%$@+...#%*>;;>-=**==>>>>>*.@$%=;;;-==*=--;;;*&...+@@#%*=;;;=*%#@@+.$*=;;;==**=;;-=*$#+.+$&*;;;>-===;;>--&$..+#%*=;;===*=;;;=&#.@%*=;;;==*=*==;;;=*.#&*;;;--===;;;;;=*$.#%*;;;>-*&**=;;;==&.", "+@$&>>>>>===>-==*$#.@$*=;;;---=---;;;=*.@#&==-;;==*==>>>>>&.#%*;;;>>*****>>>>-%.$&=;;;--=**==;;;==$.@#&==-;;====->>>>>&.@#&=--;;====*%#++...#%*>;;>>=====>>>>>&.@$&*;;;-==*==-;;;=&...+@$%&*=;;;=**%#@+.$&=;;;=====;;===#@+.@$&=;;;--===;;>>-&%.+@$%*=;;=====;;;=&$.#%*=;;;==***==;;;==.#&*;;;--===;;;;;=*%.#%*;;;>>=**==;;;=*%.", "+@#&->>>>===--==*$@.#%*=;;;>--=-->;;;==.@$&=--;>=====>>>>>&.#$&>;;>>=====>>>>-%.$&=;;;-======;;;=*$.#$&=--;;=====>>>;>*.@$&=--;;==*=&$#+....@$*>;;>-=====>>>>>&.@%&=;;;-==*=--;;;**..+@#$**==;;;==*&%#@.#&=;;;=====;;==*#@+.#$&=;;;--*==;;>>>*&.@#%**=;;=====;;;=*#.#&*=;;;=*****=;;;=*.#&*;;;-====;;;;;=*$.#$&>;;>-=====;;;=*$.", "++#%*=-;;;;;;;=**#@.#%->;;;;;---;;;;;>-.#&*;;;;;;;;;;;;;=*%.+#%===;;;;;;;;;>=*$.%--;;;;;;;;;;;>>*&#.#%*;;;;;;;;;;;;;>>&.#%*;;;;;;;;==#@+....@#%*=-;;;;;;;;;;=*$.#%--;;;;;===;;;;;>-.++@$-->;;;;;;;>>-$@.#%&>>;;;;;;;;*&$#++.#%->;;;;;==*=-;;;>-.@%&;;;;;;;;;;;;;**#.#%->;;;>>*&*->;;;>-.#&=;;;;;**=>>;;;=*$.+#%===;;;;;;;>>-*%#.", "++@$*==;;;;;;;=*&#+.#%->;;;;;===;;;;;>-.@&*;;;;;;;;;;;;;*&$.+##**=;;;;;;;;>>*&$.$=>;;;;;;;;;;>>>%$@.#&*;;;;;;;;;;;;;>>%.@%*;;;;;;;;==$@++...+@$**=;;;;;;;;>>*&$.#$->;;;;;===;;;;;>-..+#$->>;;;;;;;>>-$#.@$&>>>;;;;;;>&%#++..#$=>;;;;;=**==;;;--.@$*;;;;;;;;;;;;;*&#.#%->;;;>-&&&>>;;;>-.#%*;;;;;***->;;;*&#.+##**=;;;;;;;>-=%$@.", ".+@#&*=>;;;;;;=*%@+.@$&*=====***=====**.@$%*===========*&$#..+##%&**=====**&%#@.$%&==========**%$#+.@$%*============**$.@#%*======*&$#++....++##%&**=====**&%$@.@$&*=====&**=====*&.++@#&*=========*&#@.+#$%**=====*&%#@+...@$&*====*&&%&**=**&.@#%*============%$@.@$&*===**%%%**==***.@$&*===**%&&*==*&$#.++@$%&**====**&%$@+.", "..+@#$%&*===**%$#@+.@#%&*****%%%*****&%.+#$***********&&$#+.+++@#$%%*****&%$#@+.@$%*****=***&&$$#@+.+#%&**=*=*=*****&%#.+#$&***=***%#@+......++@#$%&*****&%$#@+.@#%&*****%%%&****&%..+@#$&&**=*==**&%#@.++##%&**=*=%%#@++...@#%&*****$##$%&**&%.+#$&***=*=**=**&$#+.@#%&***&&##$%&***&%.+#%&****$$$$%&**$#+..++@#$%%*****%$#@++.", "...+@#$%%&*&%%#@@+..+@$$%&%%%###%%&%%$$.+@@%%&&*&%&%%%$$@++...+++@#$%%&%%##@@++.+@#%&&*&&&&%%##@+.+..+#%%&&&&&&&&%%%$$@.+@#%%&&&&%$#@++......++++@##%&&%%$##@++.+@#%%&%%%###%&&&%$#...+@#$%&&&&&&&%$#++..++@##&&&*&##@++....+@#%%&&%$#@@@#$$$$#.++#%%&&&&&&&&&%%#@+.+@$$%&%$$@@@$$%%$$#.+@#%%&%$#@@##%$$#@+..+.++@#$%%%%$##@++..", "....++@###$###@++....+@@####@@@@@####@+..++@######@##@@@++......+++@@###@@@+++..++@@#######@@++++...+++@@#########@@@++...+@######@+++..........+++@@#@#@@+++...+++@####@@@@@@@##@@....++@#@###$##@@@+....+++@@####@@+......+++@#@##@@++++@@@@+..++@###########@++..++@@#@#@@@+++@@@@@+..++@@@@@@+++@@@@+++.....+++@@@#@@+++....", "......++@@@@++++......+++++++++++++++++...++++++++++++++.+........+++++++++.......++++@++++++++.......+++++@+@++++@++.....++++++++++.............+.++++++++......++++++++++++++++++....+.++++@+@@++++......++++++++++........+++++++++..+.++++....++++@+@@+@+++++.....+++++++.+++++++++...+++@+++.+.++++..........++++++++......", "....+...+.+..................................+..+...+.................+..............+..+.+.+............+.........+...........................+..........+..........+.+........+.........+......................+.+.+...........+++++@++........++++@++..................++++++++..............+++++...........................", "..+++++@+@++++++..........++@++++++.......+++++@+@++++...........++++@+@+@+++......++++@++@++@++++....+++++++.++++++++....+++++++.+.+++++++....++@+++++.+++++++...+++++++++++@+++++...+++++++++++@+@+++.....+++@++@++@++++.......++#####@@+.....++@####@++..............+++@#$###++...........++@@@@+++.........................", "++@@#####$####@@+......+++@@####@@++....++@@########@@@+.......++@@########@+++..+++@###$##$##$#@@+..+@@###@@@@@####@@+.++@@###@@@+@@####@+.++@@###@@++@@@###@+.++@@#####@@#@####@@.++@@#####@@#@####@@...++@@#####$####@@+....++@#$%%%%##@.....+@#$%%$$@++.............+@#$$%%%$#@+.........++@#$$$#@+.........................", "+@#$%%&&%&%&%$$#@++...++@#$%%%&%%$#@++..+@#$%%&&&&&%%$#@++....++@#$%%%&&%%%$#@+.++@#$%&%&&%&&%%%$#@.+@#$%%%$$$#$$%%%$#@.+@#$%%%$$###$$%%$%#.+@#$$%%$$###$$%%$%#.+@#$%%%%%$$$%%%%%$#.+@#$%%%%%$$$%%%%%$#..++@#$%%&&%&&%&%$#@....++#$===--&$#++...+@%->>*&$@+............++#$&=-===%#++........+@#$===%#@+........................", "@#%&*****=****&%$@+.+++@#%%******&%$@@+.@$%&********&&$#@++.+.+#$%&********&%#@.+@$%&*****=**=**&%#.@$%&****&%&&****&%$.@$%&****%%$$&&***&%.@$%&****&%%%&****&%.@$%&*****&&&*****&%.@$%&*****&&&*****&%..+#$%&*******=**&%#....+@$&=----*&$@....@#%->>=*%#@............+@%&*->--=&$@+.......++#%&===&$#@........................", "@%*;;;;;;;;;;>>-%$@..+#$&*>>;;;;;==*$@+.#$->;;;;;;;;>>*&%@+..@@$&*;;;;;;;;;;*%#.+#%*;;;;;;;;;;;;;*&.@%*;;;;;=**>>;;;>-%.#$->;;;>>&&&>>;;;--.#$->;;;>>*&&>>;;;--.#$->;;;;;===;;;;;>-.#$->;;;;;===;;;;;>-.++#%>>>;;;;;;;;;;*%...++#%*;;;;>=&$@++..+#%=-->>&$@+..........++@&*=;;;;;*$#+......++@$*=;;;=*$@+.......................", "#&*;;;;;;;;;;>>>&%#.+@$&*=>>;;;;;-==%$@.$%->;;;;;;;;>>=*&$@.+@$&*=;;;;;;;;;;*&#.+#&*;;;;;;;;;;;;;=&.#&*;;;;;===>>;;;>-%.#%->;;;>>***>>;;;>-.#&->;;;>>*=*>>;;;>-.#%->;;;;;===;;;;;>-.#%->;;;;;===;;;;;>-.+@$&>>;;;;;;;;;;;=&...++#%*;;;;>**$@+...+#%=-->>*$#@..........++@&*=;;;;;*%#++.....++#%==;;;=*%#++......................", "#&*;;;;;;;;;;>>>=&$.@#%*==>;;;;;;--=&%#.#%->;;;;;;;;;>==*%#.+#$*==;;;;;;;;;;=*$.@$*=;;;;;;;;;;;;;**.$&=;;;;;===>;;;;>>%.$%>>;;;>>***>>;;;>>.#%->;;;;>===;;;;;>-.$%->;;;;;-=-;;;;;>-.$%->;;;;;-=-;;;;;>>.+#$&>>;;;;;;;;;;;=&...++$&*;;;;;*&$@++..+@$==->>*&$@++.........+@%*=;;;;;*&$+......+@$%==;;;==&#@+......................", "@%*->>;;-----;;;>-%.@$&>>;>>-----;;;=&$.#%*=;;;>>--->>;>>&$.@$&>>>;;-----;;;=&$.@$*=;;;--;;;--;;;=*.#&*;;;>-***==;;;==%.#%==;;;==&&*==;;;==.#&==;;;-=>->=-;;;==.#%*=;;;>>===>>;;;=*.#%*=;;;>>===>>;;;=*.+#%*>;;>>--->>;;;**...++#&=;;;=**$@+....+@#%**;;=*%#@.........+++#$&*=;;;*&#@.....++@$&>>;;;>>&$@++.....................", "@$&=--;;-====;;;>>&.#%*;;;>>===--;;;=*%.#$*=;;;>>-=->>;;>*$.@$&>>;;;-----;;;=*#.@$*=;;;--;;;--;;;=*.#&*;;;--*&**=;;;==%.#%*=;;;==&&**=;;;=*.#%==;;;-=>>>-=;;;==.@$*=;;;>>===>>;;;=*.@$*=;;;>>===>>;;;=*.+@$&>;;>>--->>;;;*&....@#&*;;;=*%#@++....+@$&*;;==*$@++.........+@#%*=;;;*&#++.....@#%*>>;;;>>*%#+......................", "+#%=--;;==*=*>>>>>&.#&=;;;-=****=;;;>-%.@$&*;;;--===--;;;*%.#$*;;;>>=====>>>**#.@#*=;;;==;;;==;;;=&.#&*;;;-=*%&*=;;;=*%.@$&=;;;==&%&==;;;**.#$*=;;;--;;;--;;;=*.+#%*=--;;;;>;;--=*$.+#%*=--;;=-=;;--=*%.+@$&->>-==-=;;--=*$....@#&*;;;**$@+......++#%*->>-=%#@...........+#$&=;;;*&#@....++@%*=;;===;;=&%@+.....................", "@#%==-;;=***=-->>>*.$&=;;;==&&&**;;;>>&.@#&*;;;-====--;;>*%.@%&>;;>-=====>>>*&#.@#**;;;==;;;==;;;=&.#&*;;;==&%%&*;;;=*%.@#%*;;;==&&&==;;;*&.#%*=;;;--;;;--;;;=*.+@#%==-;;>>>;;-==%$.+@#%==-;;-=-;;-==%$.+@$%-->=-==-;;-==%#...++#&*;;;*&$@+.......+@#&->>>>*%#++.........+@$&*;;;*&$++....+@%&=;;-==;;**$@+.....................", "+#$==-;;=***=->>>>&.$*=;;;==%$$&*;;;>>&.+#&*;;;--===--;;;&$.@$&>;;->=====>>>*&#.@#&*;;;==;;;==;;;*&.#%*;;;-=%$%&*;;;=*$.+#%*>;;==&&&==;;;*%.@$*=;;;--;;;--;;;=*.++#$*=-;;>>>;;-=*$#.++#$*=-;;=-=;;-=*$@..+#$==-=-==-;;-=*%@...+@#&*;;;*&$++.......++#$*=;;;*%$++..........@#&*;;;*&$++...++#%**;;===;;=&%@+.....................", "+#$=--;;===*=>>>;>*.$*=;;;=&%##$*-->>>*.@#&*;;;>>-->;;>>>&$.@#%==-;;;;;->===&$@.+@#&*====;;;====*%$.#&*;;;==&$$**;;;=*$.+#$*>>>>-***-->;>*%.@%*=;;;>>;;;;;;;;=*..+@#%&=->;;;>>**%#@..++#%&*;;;;;;;*&$#@.++@#$&**=>;>;;**%#@...++$&*;;;*&#@.........+@$*=;;;=&$@+..........@$&*;;;*&#@....++@%*=--***--**%@+.....................", "+#$==-;;=====>>>>>&.$*=;;;*&$##$&-->>>*.+#%*;;;>>>>>;;>>-%$.+#%*=-;;;;;>>===*$#.++##&&**=;;;=***&$@.#%*;;;-=%$%&*;;;=*%.+@$&->>>>=*=--;>>&$.@$*=;;;>>;;;;;;;;=*...+@$&*->;;;>-*&$@+..++@#%*;;;;;;;*%#@+...+@#$&*=>;;;;*&#@+...++$&*;;;*&$++........+@#%*>>>-=%#++........++#&=;;;*&$++....+@%%*==&&&==*&%@+.....................", "+#$==-;;;;;;;;;;=*%.#*=;;;=*&$%%*->>>>&.@#&*;;;;;;;;;;==&%#.+#$&*===>>>;;;;;*%#..++@#$&*=;;;=*&$#@+.#&*;;;==&$$**;;;=*$.++#%==-;>=*=;;--=%#.@$*=;;;;;>->;;;;;=*..++@$&*>>;;;>>*&$@+....+@$&==;;;=*&$@+....+@#%&=-;;;==*%$#+....@$&*;;;=%$@..........+#$*>>>--&$@.........+@#&*;;;*&#@.....++@#$$$$#$$$$#@++.....................", "+#$==-;;;;;;;;;;=*$.$&=;;;==&&&**;;;>-&.+#&*;;;;;;;;;;=*&$@.+#$&**==>>>;;;;;*%#..+++@#%&=;;;**$#@++.#%*;;;==%%%&*;;;=*$.++#$==-;;===;;-==%#.@$*=;;;;;->-;;;;;=*..+@#$&=>>;;;>>**$#@....+@#%*=;;;=*%#@+....++#%*--;;;=**&$#@...++#&*;;;*&#@..........+@$&>>;--&$@++........@#&*;;;*&$++.....+++@@@@@@@@@+++.......+.++.+.+++.+...", "+#%==-;;;;;;;;;>*&#.#**;;;===**==;;;>-&.@#&*;;;;;;;;;;=*&$#.@#%**===>>>;;;;;*&#....++#$&=;;;=&$#++..#%*;;;==&%&*=;;;=*$..+@#*==;;===;;==*$@.@$&=;;;;;-->;;;;;=*.++@$&*=>>;;;>>=*&$@....++#%*=;;;**%#+....++@$%*->;;;==**&%#....@$&*;;;*&$++..........+@$**=;;*&$#++......++$&*;;;*&#@.......+++@+++++++++....+++@@+@+@+@++@++++.", "+#%=--;;----==*&%#@.#%*>>>;;--->>;;;=*%.+$&*;;;---=-;;--=%$.#%*>>;=======;;;=*$....++#%&=;;;=*$#++..#%*;;;-=****=;;;=*$..++#%**;;==-;;=&%#+.+#&*;;;;;--=;;;;;*%.+@$%==-;;===;;--=%$....+@#%*=;;;=*$#++...+@#&*=;;>>>==;>>*%....+#&*;;;=&$@+...........+@$&*;;==&#@+.....++@$&=;;;*&$++..........++.++.......++@@####$###$$#$#@+.", "@$&=--;;---==*%%#@+.@$*>>>;;->>>>;;;=*%.@$&=;;;--===;;--=&$.#&*;;;=======;;;=*$....+@$%*=;;;=*%#@+..#$*;;;-==**==;;;=*$...+@#&*;;---;;*%$@+.@#&*;;;;;=--;;;;;*&.@#%*-->;;=--;;>--*%....+@$&*=;;;=*%#@+..++#$*==;;>>>==;;>*&...++$&*;;;**$#++.........++@$&*;;==*$#+.....++#%&=;;;*&#@.......................@@$$%&&%&%&%&&%&$$#.", "@$&>>;;;>>>==%$#@++.@#%->>;;>>>>>;;;=*%.@%==;;;>>===>>;;;=*.$*=;;;>>->>>>;;;=&$...++#%*--;;;-=*%#++.@$&=>>;;>>->>;;;*%#...++#%*->;;;>>*%#++.+#%*;;;;;===;;;;;*&.@$*=;;;;;-==;;;;;==....+#%*->;;;-=*%#++.++#&->>;;>>>>-;;;=*...++#&=;;;=*&#@+...........+@$*>;-==%$@.....+@#%*=;;;*&#@.......................@&&===--=-=-=---=*$.", "@$*>>;;;>>>=*%#@++..+#%&==;;;;;;;---==$.#$==;;;>>=*=>>;;;=*.#*=;;;>>>->>>;;;**#....@$%*>>;;;--*%$@+.+#%=--;;>>>>>;;>*%#...++#$*->;;;>>*%#+..@#%*;;;;;===;;;;;*%.#%=-;;;;;-=-;;;;;==..++@$&*>>;;;--*%$@+.+@$&>>;;;>>>>>;;;=*....@#&*;;;>-*%#++..........+@$%=-;;>&$@....++#%*->;;;*&#++......................#**--->>---->>>>-=%.", "#$*>>;;;>>>=*%@++...+@$&*=;;;;;;;---==%.#$==;;;>>=**>>;;;=*.$&=;;;>>>>>>>;;;*&#..++@$&*->;;;>-*&$@+.+#$==-;;>>>>>;;>&$#....+@#&->;;;>-&$@+..+#$*>;;;;=*=;;;;>*$.#%==;;;;;===;;;;;==...+@$&*>>;;;>-**$@+.+@$&>>;;;>>>>>;;;=&...++#&*;;;>>*&$@+..........++#%==;;;*%#....+@$&*->;;;*&$+.......................$*=-->>>>>>->>>>-=&.", "@%*>;;;>;;;=*$@+....+@$*=-;;;;;;;;;;-=$.#$=-;;;;>****=;;;==.#&*>>>>;;;;;;--=&$#...++$**>;;;;;>=*%@+.++#$**>>;;;;;-==%#@....++#%==;;;==%#++..+@$&-->>-***>>>--&$.#$=-;;;;;===;;;;;==..++#%*=;;;;;;;**%@+.++#%-->;;;;;;;;;>*&...++#%*;;;>>=*%@++..........+@$**;;;=&#...++@%&=>>;;;*%#++......................$==;;;;;;;;;;;;;;>&.", "@$&>>>>>>>>=*#@+....+@#*==;;;;;;;;;;==%.@#==>>>>>&%%**>>>==.#%&-->>>;;;>>==*%#+...+@#%*>>;;;>>*&%@+..+@#$*>>;;;;>==*$@+.....+@$*=>>>=*$@++...+#$=--=-&&&=---=$#.@$*=;;;;>*=*>>;;>==...+@%&*>>;;;;>**$@+.++#$=--;;;;;;;;>>*%....+#%*>;;;;=*&@+...........+@#%*;;;*&#...++#&*=>;;;;*&#++......................$=->;;;;;;;;;;;;;>&.", "@#$&&****&&%$@+......@#*==;;;;;;;;;;==$.@#$%&**&%$$$$%&&&%$.+#$%&&*******&%$#@+...++@#%&&****&%$@++..++@#$&&****&&%$#++.....++#$%&&&%$#++...++@#$%&%%$$$%%%%$#@.@#$&&***&&%&&&**&%$...++@$%&*****&%##++..+@#$&&********&&%#...++#$&>>>;>=*%#++...........+#%&;;;*%#...++@&*=>;;;>*$#+.......................$*=>>;;;;;;;;;;;>>%.", "+@@$$$%%%$$#@++......+@#%&===*=====*&$#.++#$$$%$$#@@##$$$#@.+@@$$$$$%%$%$$#@+++....++@#$$%%%$$#@@.....+++##$$%%%$##@@+......+++##$$$##@+.....++@#####@@@##$##@+.+@##$$%$$##$$$%$$$#....++@#$$%%%%$#@++...++@##$$%%%&%%%$$#@....+@#&->>>>**%@++...........+@#%***%#@...++@%&*>>>>>%$@+.......................#$%&************&%$.", ".++@#@#@#@@@++.......++##%**&&**=***%#@..++@@@#@@+++++@@@@+..+++@@##@##@@@@++.......+++@@##@#@++.+......++@@@#@#@@@+..........++@@@@@++.......+++@@@++@++@+@+++..++@@#@#@@@@@@##@@+...+.++@@@##@@@@++.....+++@#@######@#@++.....+@$%&&&&%##++.............+##&&&##+....+@#$%&**&%$#++.......................@##$$%%%&%&%%&%%%##.", ".+.+++++++++.........+++@#%&$$%&&&%%#@+...+++++++++.+.++++....++++++++++++..+.........++++++++++........+.++++++++.+............++++...............++..+++.+.....+++++++++++++++++........+++++++++.........+.++++++@++++.......++@#$$%$#@@+..............++@$$$@++......@@#$$$%##++........................++@@##########@#@@+.", "..........................................++++++..........................................++++++................................++++++++++.......................+++++++...................++++++................+.+++........++++++.................++++++++...................................................................", ".......++++++............................+@@@#@@++.......................................++@#@@@++.............................++@@#####@++......................+@@##@@++................++@@@+@+..............++@@@@++....+++@#@@@+..............+++@@###@++..................................................................", "......++@##@@+..........................+@#$%$$#@@+....................................++@#$$$$#@++..........................++@@$$%%&%%$#@.....................+@#$$$$$@++..............++#$$$$#@+............+@#$$$$@@+...+@#$$%$#@++............+@@$$%%$$#@+.................................................................", ".....+@@$$$$#@+.........................@#%&&**%$@++...................................+@#$&&*&%$@+..........................++#$%******&%#.....................@#%&**&%$@++............++#$%&&%$#++..........++#$&&&&$#++..@#$&&*&%$@+..........+++#$%&***&$#++................................................................", "....++@%&===$#@+........................@$=>;;;=&$@+..................................++#%*;;>>>%$@.........................++#$&>>>;;;;;&%.....................@$=-;;;=*#@+............+@$==;;;&$@+..........+@$%;;;==$@+..@%&;;;>-%#@+..........+@%*=;;;;>&$@+................................................................", ".....@$&*=-=&%#++.........+..++.........#%->;;;=*$#++................++.++............+@$&*;;>>>&$@........+...+.+.........++@$&*>>;;;;;;&%.........+.+.+.+.....#$->;;;=*$#++..........++#$==;;;&$#++........++#$*;;;==$#++.@%*;;;>>&$@+++........+@&*=;;;;;*%#++.....+...+.+...+..........+.++.+.++..............+...+.........", "...++@$*=;;;=&$@+.......++++++@+++......#$*=;;;==&$@@++.........+++++@+@+++++.......+++@$%*->;;;*%@......+.++@++++++.......+@#%=-;;;---==&$......+++@+@+@+@+++..#$*=;;;-=&$@@++........++#%==;;;*%#+.........+#$&*;;;-=%#++.@$&-->;>*%#@++++.+...+.@#$*==;;;*%#++....++++@+@+@@+@+++......++++++++++@++.........+.+@@++@+++.....", "....+@$==;;;=*$@+......++@@#####@@++....@$*=;;;-=&%$#@@@++....+++@####$#$##@+++...+++@##%**->;;;*%#.....++@###$###@+++....+@#$&--;;;--===%#...+++@@##$######@@+.#$*=;;;-=*%$#@+++......+@$%=-;;;*%#+.......++@#$**;;;==%#@..@$&=>-;;*&$$###++.....++@$&=-;;;*&$+....++@#####$######@++...+@@#########@@++.....+++@@##$###@+++...", "....+@$*=;;;=*&#++....++##$%%&%%$#@@+...@$&=;;;--**&%$$#@++.+.+@#$$%%&%&%%%$#@+..++@#$$&&*=->;;;*%#..+++@#$$%%&%%%$#@++...+@$&*->;;;---=*%#..++@#$$%%%&&&&%%$#@.@$&=>;;--**&%$$@++....++@$&=-;;;*%#+......++@#%&*=;;;-=%#@..+$%=->;;**&%$$$#@++....+@#%==;;;*&#@+...@#$$%&&&%&&&%%$$@@..+@#$$%%%%%%%$$#@@+...++@#$$%%%%%$$#@++..", "....+@#&*>>>>>%#@....++#%&*=====*&$#++..@#&*;;;>>---==%%##+.+@@$$&===-=-====$#+.+@@$%%==--->>;;;*&#...@@$%%====-==&%$#+.++@$*==>>;;;>>-==%#.+@@$%&===-===-==*&#.@#&*;;;>>--===%$#@+...+@$&*-->>-*%#@......+@#*==-->>>-=&$@+.+#%==-;;=**====*#@+.....+@$&=;;;*&#+....#&*====--===-==%$#+.@#&*====*=====%$#@+.+@@$%%===--==&%$#++.", ".....+@$&->>>-&#@+..++#$&*=-->--=*&$@@..+#&*;;;>>->-==**%$@.+@$%**==->----==&%@.+@$%**==->->>;;;*&#.++#$%**==>----**%$@.++#%==-;;;;;>--==%#.+@$%&*==-->-----=*$.+#&*;;;->>->==*&$#@...+@$&*->>--*%@+.....++#$*==>->>--=&$@+.+#%==-;;===--==*%#+.....+@$&*;;;*&$@....$*===---->-----*&$@.#$*=---==->-==*%$#@.+@$%**==-----**%$@@.", ".....++#$%**--%#++..++#%>>>;;;;;;;*&$@+.@#&*;;;;;;;;;;>>>%$.@$%>>>;;;;;;;;;;*&#.@$%>>>;;;;;;;;;;*%#..@#%>>>;;;;;;;>>>%$..@@%->>;;;;;;;>>-%#.@$%>>>;;;;;;;;;;--%.@#&*;;;;;;;;;;-==$@..++@&*=;;;;;*%#@+.....@#%->>;;;;;;;*%#+.+@$==-;;---;;>>-%#+.....++$&*;;;*&#++...%=-;;;;;;;;;;;;>-%#.#%--;;;;;;;;;;-==$#.@$%>>>;;;;;;;>>>&#@.", ".....+++#$%&==%#++..+@#&>>>;;;;;;;=*%@@.+#%*;;;;;;;;;;;>>&$.@$&>>;;;;;;;;;;;=*$.@$&>>;;;;;;;;;;;*&#.+#$&>>;;;;;;;;;>>*$.++#%->>;;;;;;;>>-%#.@$&>>;;;;;;;;;;;>-%.+#%*;;;;;;;;;;--=%#..++#&*=;;;;;*&#@.....++#%->>;;;;;;;*%#+.+#$==-;;---;;>>-%#@......@#&*;;;*&$++...%->;;;;;;;;;;;;>>&$.#%->;;;;;;;;;;--=%#.@$&>>;;;;;;;;;>>&$@.", ".......++@#$=*#@+...+@$&>>;;;;;;;;=*&#+.+#&*;;;;;;;;;;;>>*%.#%*>>;;;;;;;;;;;=*$.#%*>;;;;;;;;;;;;*%#.+#&*>;;;;;;;;;;>>*%.++#$-->;;;;;;;>--$#.#%*>;;;;;;;;;;;;--%.+#&*;;;;;;;;;;>-=&$...+@%*=;;;;;*&#+.....++#$=->;;;;;;;*%#+.+#$==-;;-->;;>>-$#+.....+@$&*;;;*&#@....%=>;;;;;;;;;;;;>>&$.#%=>;;;;;;;;;;>--&$.#%*>;;;;;;;;;;;>*&#.", ".......+++@@###++....@$&==->>>>>;;-=*$@.+#&*;;;;;===--;;;=&.$&=;;;--====-;;;=&$.$&=;;;--===;;;;;*&#.+$&=;;;--===>-;;;=&..+@#&*=->;;;=**&%#@.$**;;;--===>;;;;=&%.+#&*;;;;;===>>;;;&$...++@$&*=;;;*&$@......+@#$&&**===;;*&#@.+#$==-;;;;;>-=&%$@+......+$&*;;;*&$++...$*=;;;>>>>>>>>>>>*$.#$*=;;;;>===->;;>&$.#**;;;--===--;;;=&$.", ".........+++@@++....+@$&===>>>>>;;-==$@.+#&*;;;;>=*=--;;;=*.$&=;;;-=***=-;;;*&#.$&=;;;-==*=>>;;;*%#.@$&=;;;->===->;;;=*...@@$&*->;;>=*&%#@+.#*=;;;-==*=;;;;>=&$.+#&*;;;;>===->;;;*%....+@$%*=;;;*&#@+.....++@#$%&&===;;*&#+.+#$==-;;;;;--*&$#++.....+@#&*;;;=%$@....$&*;;;>>>>>>>>>>>&%.@$&*;;;;>=*=->;;;*%.$*=;;;-=***--;;;=&$.", "..........+.++.+....+@%&>;;;;;;;;;-==$#.+#%*;;;--***==;;;=*.$*=;;;=**&&&*===*%#.$*=;;;==**==-;;;*&#.@$*=;;;;;;;;;;;;;=*...++#%*>>>>>*&$#@++.$*=;;;=***==-;;;*&$.+#%*;;;--***=-;;;*%....++@%&=;;;*&$+.......+++@##%**=;;*&#+.+#$==-;;;;;-=*%#@+.......@$&*;;;*&#@....$&*;;;-->>>>>>>>>*%.@#&*;;;-==**--;;;*%.$*=;;;=*****=;;;=*$.", "....................+#%*>;;;;;;;;;-==$#.@#&*;;;-==***=;;;=*.$*=;;;=*&$%%&===&$@.$*=;;;=****--;;;*%#.@$*=;;;;;;;;;;;;;=*...++#%&->>>>*%$@++..$*=;;;=****--;;;*&#.+#&*;;;-=***=-;;;*%.....+@$&*;;;*&$@+........++@@#**=;;*&#@.+#$=--;;;;;==&%#+++.....++$&=;;;*&$@+...#&*;;;>->>>>>>>>>*%.+#&*;;;-=***=-;;;*%.$*=;;;=*&&&*=;;;=*$.", "....................+#&*;;;;;;;;;;-==%#.+#&*;;;--***==;;;=*.$*=;;;=*&%$%%*=*%$#.$*=;;;==***--;;;*&#.@%*=;;;;;;;;;;;;;=&...++@%*>>>>>*&#@++..#**;;;>-===;;;;;*%#.+#&*;;;-=***=-;;;*&...+++#$*=;;;=&$@++.........++#%*=;;*&#+.+#%==-;;;;;==*%$@+.....++@$&*;;;=&$@++..#&*;;;-->>>>>>>>>*$.+#&*;;;-=***=-;;;*&.$*=;;;=**&**=;;;=*$.", "....................@#*=;;;=====;;-==%#.+$&*;;;;>==*--;;;=*.$&=;;;-=*&%&&===*&#.$&=;;;--*==;;;;;*&$.@$*=;;;>>--->->>>*&...+@#%*>>>>>*&$#@++.#$*>>>;;;;;;;;;;*&#.+$&*;;;-=*&*==;;;*&....+@#%&=;;;**%#@++.......++@#&*=;;*%#@.@#%=--;;>>>;;=*&#@+....+@#%*=;;;**%$@++.$%=;;;>->>>>>>>>>*&.@$&*;;;-=***=-;;;*&.$&=;;;--***--;;;=*$.", "....................@$*=;;;=====;;--=%$.@$&*;;;;;=*=->;;;**.#**;;;>-*****====*#.#**;;;>-===;;;;;*&$.@#*=;;;>>---->>>>*&..++#$&*>>>>>=*&$$@+.@$%->>;;;;;;;;;;*%#.@$&=;;;-=***=-;;;*&..++@#%&*=;;;=**%#@@.....+++@@$&*=;;*&#+.@#&==-;;>>>;;=**%#@..++@$%&*=;;;=*&%#@+.$&*;;;-->>>>>>>;>*&.@$&=;;;--***--;;;**.#**;;;--=*=->;;;**#.", "....................@#&=;;;=====;;--=&$.@%&=;;;;;===->;;;*&.#**;;;>-==*==-===*$.#**;;;>-===;;;;;=&$.@#&*;;;>>----->>>*%..+@$%*=>>>>>==*&%#@.+#$&*==---->>;;;*&#.@$&=;;;===*===;;;=&.++@#%**==;;;==*&%#@....+++##$&*==;;*&#+.@$&=--;;>>>;;===&%#..+@#%&*==;;;==*&%#@.$&=;;;>->>>>>>>;>=&.@$**;;;-==*==-;;;=&.#**;;;>-===>>;;;*&#.", "....................@#&*;;;;;;;;;;;;;*%.@%=-;;;;;;;;;;>>>*%.#$*>>>;;;;;;;;;;-=$.#$*>>>;;;;;;;;;;--%.+#%*>>>;;;;;;;;;;*&.++#$->>;;;;;;;>>-$@.++#$&*==--->-;;;*%#.#$=-;;;;;===;;;;;--..+#$=>>;;;;;;;>>-$@....+@#$%&*===;;*%#@.#&*;;;;>==-;;;;;-=$..+@$->>;;;;;;;>>-$@.%=-;;;;;>>;;>>>;;-=.@$=-;;;;;===;;;;;--.@%*>>>;;;;;;;>>>*%@.", "....................+#&*;;;;;;;;;;;;;*%.#$=-;;;;;;;;;;>>-%$.@$%->>;;;;;;;;;;-=$.@$%->>;;;;;;;;;;-=$.+@#%->>;;;;;;;;;;*%.++#%->>;;;;;;;>>-$#..+@$&*-->>>;;>>>&$@.#$--;;;;;===;;;;;-=.+@@$->>;;;;;;;>>-$@..++@#**===>>>;>*%#+.@&*;;;>>===;;;;;-=$.++#$->>;;;;;;;>>-$#.$--;;;;>>>;;>>>;;-=.#$--;;;;;*==;;;;;-=.@#%->>;;;;;;;>>-%$@.", "....................+@$&*===-=-=-=-==%$.@$*=======-===**%$@.+#$%**==========&%#.+#$%**===-===-===&$..+#$%**==-=-====*%#.++@$*===----===**$@.++@$&*->->>;;>>>%$@.@$*==--==***=-====&..+#$&*===--====**$@..++#%===->;;;;>&$@+.@$&====****==--=*&$..+@$&*===--====**$@.$*==--=====-======&.@$**==-==***=-====&.+#$%**=======**%$@+.", "....................++#$***========**$#.+#%**========*%%##+.++@#%&*======**&%#@.++@#%&*=====*==**%#.+++@#%&*======**%$#.++@#**========*&%#@.++#&*=;;;;;;>=*&$@+.+#%*====*&%&====**%...@#%**=======**%#@..++#%=>>;;;;;=*%#@+.+#%*==**%%&*====&%#.++@#&**=======**%#@.#%*====***==*=*==*%.@#%*=====&&&====**%.++@#%&*=====*%%##++.", "....................+++@%%&********&&#+.+@$%&*&&&**&*&$#@++..+@@#$&&*****&&%#@+..+@@#$&&*&*****&%$@...+@@#$&&***&*%$$@+..+@@%&&**=*=**&%$@+.++@%*=>;;;;>>*&%#@+.+@$%****&$$$&***&%$..++@$%%&*****&%%$@+..++#%->>;;;;;=*$#+..+@#***&%$#$&****%$@...+@$%%*&****&%%$@+.@$%***&&&***&&&**$$.+@$%&&***$#$&****%$.+++@#$&&***&*$#@++..", "......................++@####$#$#$##@@+.++@###$#$#$###@+++.....++@####$####@@++....++@####$######@+.....++@####$####+++...+@@#$#$$$$###@++...+@%**>>;;;>-&$#++..+@@#$$$##@@###$###@...+++#####$#$##@++...++#$=->;;;>>*%#@.+.++@####@@@@##$$##@+...++@@##$$#$$##@++..+@###$####$#$#####@.++@###$##@#######@@...+++@######@@+++...", "......................+.++@@@@@@@@@@++....++@+@@@@@+@+++.......++++@@@@@@++++......++++@@@@@@@@+++......++++@@@@@+++++.....+++@@@@#@@@@+++..+++@$%&****&&$#@++...+++@@@@++++@@@@+++...++++@@@@@@@@+++++...+@#%&&***&&%#@+.....++@+@++++@@@@++++.....++@+@@@@@@+@++..+++@@@@@+@@@@@@++++..+++@@@@@+++@@@@+++....++++@@@@@+++.....", "................................................................................................................................................................................................................................................................................................................................", ".....................................................................................+.+............................................................................................................................................+++++@+............++++++.+.........+++++++.................................................", ".....................................................................................++++++........................................................................................................................................++@@##@@++.........++@###@+.........+++###@@++...............................................", "...................................................................................++@@#@++.......................................................................................................................................++@#$**$#@+.........+@#&&&#@+........+@#$**$#@++..............................................", ".................................................................................+++##$$$#@++....................................................................................................................................++#$$&*=%$#++.......++#$*=*$#++......++#$%*=%%$#++.............................................", ".....+....+...................+..................+.+..............................+#%**-=%#@+..................................+.......................................+....+.............+..................+..+................+#$%**==%$#+........+@$&===&$@+.......+#$&==*&&$@++............................................", "..++++@+@+++@++.........+++++++@++++++......+++++++++++++.........+++++@+++++...++@$&*=--&$#@+++.......+++++...++++++.....+++++++++++++@+++...++++++++.+++++++.....+++++++++++++++....+++++++..++++@+++....++++++@@+@+++........+@$%>>>--%#@+........+#$*;;;*$#+.......+@#%=->>>%$@+............................................", ".++@@########@@@+......++@@#########@++...+++@##@#@@###@@++.....+++@#######@+++..+#$==-;;*&%##@++....+@@@#@@++++@@#@+++..++@####@@@@#####@+..++@@##@@+++@#@##@@...++@###@@@@@###@++..++@#@#@@@++@#@#@@@..+++@#########@@+.......+@$*>>>--%#@+.......++#%*;;;*%#++......++#%-->>>*$@+............................................", "+@#$$%%%&%%%%$$#@++.+++@#$$%%&%&%%%%$#@..++##$$%$%$%$%%$$#@....++@#$$%%%%%$$#@+.+@#%==-;;=**%$$@++..+@#$$$$##@##$$$$#@+.+@#$%%%%$$$$$%%%$$#.+@#$%$%$$####$%$$$#.++@#$%%%$$$$$%%%$#@.+@#$$%$$#####$$%$$#..+##$%%&%&%%%$$##++....++#%*;;;=&%@+........++#&*;;;*&#+.......++#%&=;;;*%#@............................................", "@#%&*********&&$$@+.++@$$%**********&$#..+@#%&***&*****&%$#...++@$%&*******&%$@.+#$*=--;;===*&%$#++.@#$&**&%$$$$&&*&%$@.@#$&*****&&&*****&%.@#%&***&%%$$&&***&$.+@#%%****&&&****&%#.@#$&***&%$$$&&***&$.+@$%&*********&%$@+....++#%*;;;**$@++.......++#&*;;;*&#@........+@$&*;;;*&#++........++++++++.+++.......................", "#$=-;;;>;;;;;>==*$@.+@$*==>;;;;;>;;;-=$.++#%->>;;---;;;>>%$...+@%&*>;;;;>>>>>%#.+#%*;;;;;;;;;;**%@+.#$=-;;;=*%%&;;>>>%$.#$=-;;;;;===;;;;;-=.#$=-;;;>-*&*->;;;-=.+@%*;;;;;===;;;;;*%.#$=-;;;>-&&&->;;;-=.@#%>>>;;;;;;;>>-%#+....++$&*;;;*&$@+........++$&*;;;*&$++.......+@$**;;;*&#+......+++@@@#@@@@@@@@++.....................", "#%--;;;;;;;;;;==*%#.+#$===;;;;;;;;;;>-%.+@#%>>>;;>->;;;;>&$..+@#&*=;;;;;;;>>>&$.@#**;;;;;;;;;;=*&@+.#%=>;;;=*&&*;;>>>&$.#%->;;;;;===;;;;;--.#%--;;;>>*=*>>;;;--.+#%*;;;;;===;;;;;*%.#%--;;;>>***>>;;;--.@$&>>>;;;;;;;>>>%$+.....@#&*;;;*&#++........++#&*;;;*&#++........+#&*;;;*&$@......+@##$%$%$$$$$$##+.....................", "#%=>;;;;;;;;;;--=&$.@$&==-;;;;;;;;;;>=%..@#%>>>;;>>-;;;;>*$..+@$**=;;;;;;;;>>&$.+#&=;;;;;;;;;;=&%@+.#%->;;;==***;;;>>*$.#%=-;;;;;==-;;;;;>=.#%->;;;>>===>>;;;>-.+#%*;;;;;-=-;;;;;*%.#%--;;;>>=**>>;;;>=.@$&>>;;;;;;;;;>>%#@...++#%*=;;;*&#@..........@$&*;;;*&#@........++#&*;;;=*$#@...++@#$%&***&&&&&&%$#.....................", "@%*=;;;;;>-->;;;;*%.#$*;;;;;->-;;;;;=*%.++#%*=-;;;;;-->>>*%.+@#%>>;;;->-;;;;;*%.+#$*>>>;;---==&%#@+.@%*=;;;-=&**>>;;;*%.@%*=;;;>>===>>;;;=*.#%=-;;;-=;;;--;;;==.+@$&=->;;=-=;;>-=&$.#$*=;;;>-===>>;;;=*.#$&>;;>>>>>;;-==%#+....+#%==;;;*&#++........++#&=;;;*&$++.......++$&*;;;==%#++..++#%==-;;>>>==>>>&%.....................", "@%*=;;;;;--->;;;;*%.#&*;;;;;---;;;;;=*%..+@$*==;;;;;-->>-&$..@#%->;;;>->;;;;>&$.+@$&->>;;--==*%#@++.@$*=;;;==*&*->;;;*%.@$*=;;;>>===>>;;;=*.#$==;;;--;;;--;;;=*.++#%==-;;-=-;;--=%#.@$*=;;;>>=*=>>;;;=*.@$&>;;>>>>>;;-=*$#+...+@$%>>;;;*&#@..........@#&*;;;=%$@.........@#&*;;;>>&$@+..+@$&=->;;>>>==;;>*%.....................", "@$&*;;;>-=*===;;;=*.$&=;;;=====>>;;;*&$..++#%*=;;--=***&%$#.++#%=--;;;;;---==&$.+@#&=--;;=**&$#@++..@$&*;;;==&&*=-;;;*%.+#$*-->;;===;;>-=&%.@$**;;;>>;;;>-;;;=&..+@#%*=->;;;>>**%$@.+#$*-->;;===;;>-=*%.+#%*==--;;;>-=*%#@+...++$&>>;;;*&#@.........++#&*;;;*&#@........++$&*;;;>>&#@+..+#&*;;;>>;;;;;;>>*$.....................", "@$&*;;;>-=**==;;;=*.$*=;;;==**=--;;;=%$...+@$&*;;-==*&%$##+.++#%==-;;;;;>--==&#.++#%==-;;=*%$##+++..@#&*;;;==&&&==;;;*&.+@$&=->>;===>;--=&$.@#&*;;;->;;;--;;;*&..++#$&*->;;;>-*&$#+.+@$&=->;;===;;>--&$.+#$*==--;;;>-*&%#++...+@#&>>;;;*&#++.........@$&*;;;*%$++.......++#&*;;;>>&$++..+#&*;;;>>;;;;;;>>&$.....................", "+#&*;;;>======;;;**.#*=;;;==*==>>;;;*%#...@@%&=;;-==&$##@++.+@#%=--;;;;;->-==&$.++#$=--;;**&$$#@@++.+#&*;;;==***=-;;;*&.++#$=-->>===;;--=$#.@#&*;;;>>;;;>-;;;*%..++@$&*->;;;>>*&$@+..+@#&==;;-->;;=*&$@.+@$**=--;;;->*&$#++....+#%*=;;;*&$+.........++#&*;;;*&$++.......++$&*;;;=*%#++..+#%*;;;--;;;;;>>>%$.....................", "+#%*;;;;;-=-;;;;;*&.#&*;;;;;---;;;;;*&#..++#%&=;;==*&$#@@++..@#%==--->>>;;;>>&%..+#$*=-;;=*&&%$$#@+.@#%*;;;-=***=-;;;*&..+@$&*=;;===;;=*%#@.+#%*;;;;;;;;;;;;;*%..++#$&*>>;;;>>**$#+..+@#%*=;;>--;;=*%#+.+#$*==;;>>>-===*$@+....+@#&*;;;*&#@.........++$&*;;;*&$++.......++$&*;;;*&$@+...+@$%===*=======**$@.....................", "+#&*;;;;;>>>;;;;;*$.#$*;;;;;>->;;;;;*&#..+@#%*=;;===&%$#++..+@#%==--->>>;;;>>*%.++@$==-;;==***&&$#@.+#%*;;;-====--;;;*&..++#%*=;;=--;;*&$@+.+@%*>;;;;;;;;;;;>*%..+@#&*=>>;;;>>=*%$@...+@#&*>>;;;>>*&$@+.+#$*==;;>>>====*%#@....+@#&*;;;*&$++........++#&*;;;*&#++.......++$&*;;;*&$++...++@#&**%%&***=&&%#@.....................", "+#&*;;;;;;;;>>===%#.@#%===;;;;;;>;;;*%#.++#%==-;;>--==%$#++.+@$&>;;;;>>>>>;;;=&..+@$*==;;--->>>--$#.+#%*>>;;;-=-;;;;;=*...+@#&*>>;;;>>*%#@+.+@$&-->;;-=-;;>--&$.++#%=->;;-=-;;>-=%#....@#%*>>;;;>>*%#++.@#&->>;;>>>>>;;>&$@....++$&*;;;=&$@+........++$&*;;;*&#@........++$&=;;;*&#@.....+@@##$$$$$$%$$#@@+.....................", "+#&*;;;;;;;;>>=**#@.+@$&==>;;;;;;;;;=%$..@#%=->;;>>--=*%$@+.+#$*>;;;;>>>>>;;;*&..+@#&==;;>>>;;>--%#.+@$&>>>;;---;;;;;=*...++@%&>>;;;>>*$#+..+@#&=->;;=-=;;--=&#.+@#&->>;;=-=;;>>-%$....+@%&>>;;;>-&$@++.@$&>>;;;>>>>>;;>&$@....++$&*;;;*&$@+........++#&*;;;*&#++.......+@$&*;;;*&#++.....++@@@+@@@@@@@+++......................", "@$&*;;;>-===*&&%##+.+@@$$&**===--;;;*&#.+@$&=->;;>>---*&$@+.+@$&>;;;;->>>>;;;*&...+#&*=;;>->;;>>-$#.++#%>>>;;---;;;;;==...++@$%->;;;>-&$@+...+#%==-;;===;;--=%#.+@$&->>;;==-;;>>-&$..++@$%*>>;;;*&$@++..@$&>>;;;>>>>>;;>*$@.....+#&*;;;=*$@+........++#%*>;;*%#+.......++@$*=;;;*%#@.........+++.+++++++........................", "@$&=>;;>-=**&%$#@++..++@#$%&**=--;;;**$.+@$*;;;;;;;;;;=&%@+.+@$&->>>>;;;;;--=&$..++@#%*--;;;;>==*$@.++#$%*=;;;;;>>;;;==....++#%*=;;;=*$#+...++@#*==>>=*=>>=**$@.@@%*>;;;;===;;;;;*%.+@#$**=>>;;>*%#++...@#&->>;;;;;;;>>-&$@....++#%*;;;=*%#@+........+#$*>>>*$#++......++#%*=;;;*%#+...............+............................", "@$&=;;;--=**%$@+++....++@@#%**=->;;;=&$.+@%&>;;;;;;;;;*&%@+.++#%-->>>;;;;;===$#...++@$%==;;;>>=*&#@..++#$%&>;;;;>>;;;==.....+@#&*>>>*&#@+....++#%**--&&&--**&@@.+@$&;;;;>===>;;;;&$.+@%&;;;;;;;;*%#+....+#%-->;;;;;;;>>-%#@.....+@$&;;;=*%#@++.......+@$%>>>%$@+.......+@#&*=;;;&%@++...........................................", "@%=-;;;;;>-=$#@+........+@#$=->;;;;;-=%.++#$%********&%$@+..++@#$&&&******&%$#@....++@#%&&**&&%$#@+...+@@$%&*********%$.....++@#%%&%$$@++....+++##%$%$%$%%$$#++.+@#$&&**&&%&&**&&$#.+@$*;;;;;;;;*%#++...+@#$&********&&%#@+.....+@$%===>>&%#+.........+#$%%%$@++......++#%&->===%$@+............................................", "@$--;;;;;--=$@++.........+#$=->;;;;;--$..+@#$$%&&%%%$$#@@+...++@#$$$%%%%%$$##@+.....++@#$$%%$$##@++....++@#$$%%%%%%$$$@......++@#$$$#@++......++@@###@#@##@@+++..+@#$$%$$$$$$%%$$#@.++#%*=======$#@.....++@#$$%&&&&%%%$#@++......+@#***--&$#++.......+++@#$#@@+........+#$&-==*&$@+.............................................", "#$**----==*&#@+..........+@#&*==----**$..+++@########@@++.....+++@@#@#####@@++.....+.+++@@#@#@@++.......+++@@#######@@+.......++++@@+++..........++++++++++++....+++@@##@@@@@@##@++..+@#**=*=***#@++.....++@@@#######@@+++.......++##%%%$#@++..........++@+@++........+++##$%%$##++.............................................", "+@$%**=**&%$++...........++@$%&*=***&$@...+++++++@+++++........+.++++++++++...........+.++++++............+++++++++++++........++++++.............+++.+.+++........++++++++++++++....++@#$$$%$$#@+.........+++++++++++++........+.++@@###@@++............++.+..........+++#@###@++..............................................", "................................................+.+++.+.................+................................+......+..+...............................++++@++++....................................................................................................................................................................", "................................................+++@@++............++++++++............................+++@+++.+++++++..........+.++.............+++@######@@++...........................+++++++...............+++++........................................................................+.++++++...............+...........", ".......@@@@@...................................+@#####++.........++@@###@@++..........................+@@###@@@@@##@@++........+++@@++..........++##$$%%%%$$#@+............+.+.........+.++@@@@@@+++..........+++@@@@++......................................................................++@@##@@++...........++++++++......", "......@@$$$$@@.................................@#$%&%$#@+.......++@#$$$%$$#@++.......+..........+....+@#$$%%$$#$$$%$$#@......+.@#####@+........++@$%&*****&&$$@.......++++++++@++......++@##$$$$##@++........+@@#$#$##@++..................................................................++@##$$$$##@@+.......++@@####@@++....", "...++$$$$$$%$$++.............................++#$&>>>&$#@.....+.@@$&*====*%#@+....+.+++++.+.+++++...+@#%====*&%&*===*$#.......@@$%&%$@++.......+#$%--;;;;;>>-%#....+++@@#@@#@#@@++....+@@$$**==&&$$@@+.....+++#%&***&%#@+.................................................................+@@$$&*==&&$##@+.....++@$$%%%%$##++...", "..@$%%=====-=%%$..+.........................++@$&*;;;*&$#@+...++@$%*======&%#@+...++@@@@@+@@@@@@@++.+@$&=--=-***=====&$......+@$%>>>&$@+.....++@#%*->;;;;;>>-&$.....+@##$$#$$$$#@+...++#$%**====**%$#++....++@$&*===**%#++...............................................................+@#$&&=====**%$#@+...++@$%&****&%$#@+..", ".@%&&==>>>>>>=&&%@@.............+...........+@#%==;;;==&$#+...+@$&*;;;;;;;=*%@+..++#%&&$$#$#$$&%%@@.+#&*;;;;;===;;;;;*&......+#%&>>>*$#+.....++#&*=;;>->>>;;>&$...++@$&&==%%%>>$#@..++#$==-;;;;;;-==$@@....+@#%->-->;;&$@+..............................+..+.+.+........................++@$==-;;;;;;-==$@+...++#%->;;;;;**%@++.", ".@%*=>;;;;;;;;=*%@.........++++++.........++@#%*=-;;;==*&$@..++#$*=;;;;;;;=*&#+.++@#&**&&&%&&&**&$@.@#&=;;;;;-=-;;;;;*&.....++#%*;;;*%#++....+@$*==;;>>>>>;;;&$....+@%&*=-%&&>>%#@+.+@#%=--;;;;;;--=%$@...++@$&->->>;;*%#+.........++++.+++++......+++@++@@+@++++.......................+@$%=--;;;;;;--=%$@...++$%>>;;;;;=*&@+..", ".#&*>;;;;;;;;;>*&#.........++@@@+++.......+@#%&*--;;;-==&%#..++#&*=;;;;;;;=*%@+.++#%*==**=**=*==*%#.+#&*;;;;;-=-;;;;;*&.....++#&*;;;*&#+....++#%*=-;;>>>>>;;>&$....+@$&*==%&&>>%#++.+#%*=>-;;;;;;>--&%#...+@#%*>>>>>;;*%#++.....++++@@@@@@@@@++..++@@###########@@+.....................+#$*=>>;;;;;;>--&%#...+@#%>>;;;;;=*%@@..", ".$&=>;;;;;;;;;>=&$.......++@#$$$$@+......++#$=--;;;;;;;==*#..+@$*=-;;=====*&$@+.+@$&>>>;;;;;;;>>>%$.+@%&-->;;===;;>>-*$.....++#&*;;;*&#@....+@#&=->;;>>>==-==&#...++@$$%&&%$%**$#@..@#**;;;;;;;;;;;;=&$...+@%&=>>>;>;;*%$@......+@#$#$$$$$$$#@@..+@#$$%%&%&%&%%%$#@.....................@#**;;;;;;;;;;;;=&#....+#%*======*&$@++.", ".$*=>;;;;;;;;;>=*$.......++#$%&&$#++.....+@$%=--;;;;;;;-=*$..+#$===;;==***%%#@+.+@$&>>;;;;;;;;;>>&$.+@#&=->;;===;;--=&$.....++#&*;;;*&#++...+#$*-->;;>>>=====%#....++##$%%##$&&#@+..#%*=;;;;;;;;;;;;=*$..++#%*=>;;;;;;=&$@+...++@#$&&&&&&&&&%$#.++#$&*******=***&$#....+.+++@+@+@+@+++..#$*=;;;;;;;;;;;;=*$...++@$*=====*%$#@...", ".$&=>;;;;;;;;;;=&$......++@#*===*#@+.....+@$*>;;>>===>>=**#.++#%==-;;*=*&%##++..+#$*>;;;;>--;;;>>*%..+#$*==;;>>>;;==*$#.....++$&*;;;*%$+....+#&*;;;>>;;;;;===%#.....++@@@@@@@#@@++..#%-->;;;;>>;;>>>--%..+@#*==;;---;;=*%@+..++@$%=->>>==>>>==#.+#$*;;;;;;;;;;;;;*%....+@@@########@@@+.#%=>>>>;;>>;;>>>>-%....++@#$$%$%$##+++..", ".$*=;;;;;;;;;;;=*$.......+@$=====$@++....+#$*;;;->===>>==&#.+@#%==-;;==*&$#@++..+#%*>;;;;->-;;;>>*$.+.@#&*=;;>>>;;=*&$@.....++#%*;;;*&#++...+#&=;;;>>;;;;;===%#......++++@++++++....$%->;;;;;>>;;>>>>-&..+@#*==;;---;;=&%@+.++@$%&->>>>==;;;==$.+#%*;;;;;;;;;;;;;*&..++@@$$$%%%&%%%%$@@.$&->>>>;;>>;;>>>>-&.....++@@###@@@++....", ".%*=;;;;;;;;;;;=*%......++@$*====%#+.....+#%*;;;>-*=*>-=*&@.+@$&=--;;==*&%#@+...+#$*>;;;;>--;;;>>*%..++#%*=;;>>>;;=*%#+......@#%*;;;*%#+....@$&=;;;>>;;;;;-==&$.......+.+.+.+++.....$&->;;;;;>>;;>>>>-&...@$*==;;---;;=*&#@.+@#%**>>;;;==;;;==$.+@%*;;;;;;;;;;;;;=*...@#$%*********&&$#.$&->>>>;;>>;;>>>>-&.......+++++++.+.....", ".%*=;;;;;;;;;;;=*%.......@@%**==*%#@....++#%*;;;--=**=*&%$@.+#%*;;;;;;;;=*$@+...+#%*;;;--===--;;>*%...+@$&*>;;;;;>=*%#+......+#%*--=*%#++...+#&*;;;;;---;>;;;**.....................$&>>;;;;;==>->>>>>&.++@#&*=;>;;;;>==&#@.+#%=--;;---;;;;;*&$.+@$%===-------;;;=*.++@$=->;;;;;;;;;;&$.#&>;>>>;;;;>>>>>>>&.........+.++........", ".%*=;;;;;;;;;;;=*%......++#$*====%#@+....+@%*;;;-===*=**%$#.+@&*;;;;;;;;==$@++..+#%*;;;->===>-;;;*%..++@$&*>;;;;>>=*%#+......+#$*=--*$#+....@#&*;;;;;>->;;;;;=&.....................$&>;;;;;;==>->>>>>&..++#**=;;;;;;>==*#+.@$&=->;;---;;;;;*%#.++#$**======--;;;=*..+@$-->;;;;;;;;;;&$.$&>>>>>;;;;>>>>>>>&.....................", ".$*=;;;;;;;;;;;=*$......++#%=->>-%$++...++#$*>;;;;==->>=*%@.+@$*=--;;>--=&$#++..+@%*>;;;;>--;;>;>*%...+@%*=>>;;;>>=*%#+.....++#$*;;;*%#+....+@$*==-;;;;;>>;;;=&.....................#&=-;;;;;;;;;;;;-=&..+@#&==;;;;;;;=**#@.@%&;;;>>>>>;;-==&$@..+@#$%$%%%&**=;;;=&.++@$*===-----=-==&#.#&=-;;;;;>>;;;;;-=%.....................", ".%*=;;;;;;;;;;>=*%......+@$&->>>>&$@++...+@$&>>;;;--->>=*&#.+@$&=--;;>--**$#@++.+#%&>;;;;->-;;;;>*$..++@$*=>>;;;>>=*%#+......+#%*;;;*%#+....+@#%*==;;;;;>>;;;=*.....................#%=-;;;;;;;;;;;;==%..++#**=;;;;;;;==&#@.#%*;;;>>>>>;;--=*$@...++@@####$%**;;;=*..+@#&*==========*$#.#$==;;;;;>-;;;;;==%.....................", ".$*=;;;;;;;;;;>=*$......+@$&->>>>*%@+....+@$&>>>;;>--;>=*&@.+@$&=->;;>>-=*&%$@@.+@%*>;;;;>--;;>>>*$..++#%*=>>;;;>>=*%@@.....++#%*;;;*%#++....+#$*==;;;;;>>;;;=&.....................@$==;;;;;;;;;;;;==$..++@&*=;;;;;;;=*&#+.@$*;;;>>>>>;;-==*$#.....++++@+@$%*;;;*&..++@%&&*=====*=**#@.#$*=;;;;;>>;;;;;==$.....................", ".$&=;;;;;;;;;;>=&$.....++#$*>>;>>*%#@.....+#$&==;;;;;;;**$@.+@$*-->;;====****$#.+@$&>>;;;;;;;;;>>&$..++@%&=--;;;-==*%#+......@#&*;;;*&#@....++@$&**==->-;;;;>*%.....................@#%*>;;;;>>;;;;>*%#..++@$&*==---==*&$@+.@$&-->;;->-;;;;;*%#......+.++++@#%===&$...+@@#$#$$$$$$$$#@+.+$&*>>;;;>>;;>>>*%#.....................", ".$*=>;;;;;;;;;>=*$......+#%*>>;>>*%#+.....+@#%*=>;;;;;>*&$@.+#%&->>;;========%$.+@$%>>>;;;;;;;>>>&$..++#%*==>;;;>-**%#+......@#&*;;;*&#@....++#$&*=*=---;;;;;*%.....................+#$&>>>;;>>;;>>>&$#...+@#$&===-==*&%#@+.+#$==-;;-->;;;;;*&$...........+@#$***$#....+++@@@#@##@@@+++.+@$&>>>;;>>;;;>>&$#.....................", ".#&*>;;;;;;;;;>*&#......+#%*;;;;;*%#@+.....+@#$**=;;;=*&$@+.+#&*;;;;;;;;;;;;;*%..+#%*====*****==*%#..++#&*=;;;;;;;=*&#+.....++#&*;;;*&#++...+@$&>>>--===;;-=*$@.....................+@#%*==>>;;>>==*%#+....+@@##%%&%%$#@++..+@$%**>>;;>-=;;;-=$............++@###@+.....++++++++++++++..+@#%*==>>;;>>==*%#@.....................", ".@%*=>;;;;;;;;=*%@.....+@#&*;;;;;=&#@+.....++@#%**;;;=&%#++.+$&=;;;;;;;;;;;;;*%.++@$&****&&&&&**&$@..++#&*=;;;;;;;==&#+......+#%*;;;*%#++...+@$&>;;;;;;;;;=*&#@......................+@#%**>>;;>>**%$@+.....++@@#####@@@+...++@#%*->>>>==;;;==$.............+@@@@++........+.+.+.+.......+@#%**>>;;>>**%#@+.....................", ".@%&&==>>>>>>=&&%......+@#&*;;;;;*&#@+.......+@#&*;;;*%#@+..+#%*;;;;;;;;;;;;;*%...@@%%&%%$$$$$&&%@+..++#&*=;;;;;;>=*&#+.....++#%*;;;*%#+....+@$&>;;;;;;;;;*&$@+......................++@$%*--;;>-*&$@++......++++++@++++......+##%=->>>==>>>==#...............++++.......................++@$%*--;;>-*&%@++.....................", "..@$%========$%$@.+.....+#%*;;;;;*%#+........++@$&===%$#++..+@$&==--------===%$...+@@@#@@@@@@@@@@++...+@$&*==--=-=*%$@+......+@$%===%$@+....++#%===>----=*&$#++.......................++@#$%&**&&$#@++.........++++++..........+@#$%&&&%&&&&%##...........................................++@#$%&&*&&$#@++......................", "...++$$$$$$$$$++.......++#$*>>>>>*%#++........+@@$***$#++...+@#%*==========**$#....++++++.+.+++++++..++@#$&*=====*&$$++......++#%*=*$#++....++@$**=--===*&$#@+.........................++@@#$$%$##@++.........................+++@#$#$$$$$$$#@@............................................++@@#$%%$##@++.......................", ".......@$$$@@............+#%=---=%#@+..........++##$#@@+.....+@#$$%%%%%&%%%$$@@.....++++......+........+@##$%%%%%$#@@+........+@#&&*#@++.....+@#%**===**&$#++............................++@@##@@+++............................+++@@@@@@@@@@++..............................................++@@@@#@++.........................", "........................++@#$%&%%#@+............+++@@++.......++@##########@@++.........................++@@####@#@++..........+@##@@+........++##$$$%$$#@++...............................+++++++................................++.+.+.+++++.................................................+++++.+..........................", "..........................+@#####@++.............++++.........+++++@@@+@@++++............................++++++@+++.+.........+.++++++.........++@@#@#@@+++..................................+.+.................................................................................................+.+............................", ".....+++@+@+++..............................+++++@+@++...........+++++@+++...................................................+++@@@#@#@@+++................................................++++++................................................+@+@@++............+++@+@+.............++@@@@@@++..............................", "....++@@###@@++..............................+@#####@@+.........++@#####@@++................+..............................+++@#$$$$$$$$#@+...............................................++@@@@+++...........+.++.+............................+@#####@++..........@#$###@+............@#$$$$##@@+..................+.+........", "...++@$%***$$@++.............+.............++@$$***&%#@+.......++@$%***&&@@+............++++++............................++@#$&*=====***#@.............................................++@@$&&%#@+.........+++@@@@@++..........................@$$&&%$#@+..........#%%&%$#@+...........#$%&&&&%##@+.....+.........+++@+++......", "...+@#%&=*=*%$@++..........+++@@++.........+@#%&===**$#@+......+@#%&===**$#@+.........++@@#@@++..........................++#$%&=*========%#............................................+++#$%***$#++.......++@@##$###@@.........................#*=->>*&#+++.....+..*=>>>*&#@+..++++@.+.&*>>>>>**%#++++++++.......++@###@++.....", "..+@#%**===**%#@+.........++####@++........+#$**==-==&$#++.....+#$**==-==&$#++.......++@#$$$$@@+........................++#$&&*==------==%$............................................++#$%*===%$@+.......+@#$%&&&%$#@+........................$*=>>>=*$@+...+++++.*=>>>=*$@++++@#@@@+.*=>>>>>==&$@@@@@#@@.......@@#%%$$@+.....", ".+@#%&>;>->;>&%#++.......++##&&&$#+.......++#%>>->-;>=*%@+....++#%>>---;>=*%@+......++##***-=#@+........................+@$&>>>;;;;;;;;;;*%............................................+#$&->;;;*$#+.....++@#%==>>>==%#@++......................$==>>>=*%@@+++@@@@@.==>>>=*%@@+@##$$$#@.*=>>;;>==*%####$$##.......+#%>>>$#++....", ".+@$&*;;>>>;;*&$@++......+@$%==*%$@++.....+@#%>>->>;;=*%@++...+@#%>;>>>;;=*&@@......+@#%*==-=$@+......+++++....+.+++....+#%*>>>;;;;;;;;;;*%............................................+#$&->;;;*%#++....+@#$&-->>>-=&%#@+......................$==;;;==$#+@+##$%%#.==;;;==%#@##%&&--$@.=-->>>>>--%$$$%==*&......+@#%>>>%$++....", "++#&==;;===;;==*#++....++@#%&;;;*%#@++.....@#%==---;>=*%#++...++$%=-->>;;=*%#++.....+@%*>>>=*$#++....++@@@@@+++@@@@@@+..@$&=;;;--;;;;;--=&$............................................+@#%*=;;;*&$+....++@&*=;;===;;=*%#++....+++++.+.++.......$==;;;==%#@@#$$&*&$.==;;;-=%$##%**=--$#.=-->>>>>>-&%&&*--=*......+@$%===&#@+....", "+@#*==;;===;;-=*#@....+@@#%&*;;;**%#@@.....@#%==---;;**$@+....++#%==>>>;;=*&#++....++#%*>;>**#@+....+@##$$$##@@##$$##@@.@$*=;;;--;;;;;--=&$.........++++.+..............................+#$**;;;*&#@....+@#&==;;--=;;==&#++.+++@@@@@+@@+@++.....$&*;;;-=%$##$===>>$.&*;;;==&$$%*>>>==%#.&*-->;;-==**==->>*$......+@$&===&$@+....", ".@#*==;;===;>==*#++..++#$%**=;;;=*&%$#@...++#%===-=;>=&$@++....@#%=--->;;=*&#++....++#%*>>>*&#++....+#$%&&&%$#$%%&&&%$@.@$*=;;;--;;;;;-==%#.......+++@@+@..............................++@%&=;;;=&$@+...+@#&==;;-==;;==*#@+.++@##$########@++...#&=>;;-=&$$$&=-->-%.&*;;;-=&&&*=>>>==$#.%*>->;;--=**--->>&$......+#%&=-=&$@+....", "++#%*=>;---;;**%#+...@@$*==--;;;--==*$@...++#%*=;;;==*%$@+....+@#%==>>>;;==&#@......+@%&*=*%$@+.....@$=->>>**%$&;;>--$#.@$*=;;;>-;;;;;--=$#......+@@##$##++.............................+@$&=;;;*&$@+...+@$*==;;===;;-=*$++.+@$***&&&&&*&$##++..$&*;;;-=*%%&*--->>%.&=;;;-=*&**=>>>==$#.&*->>;;---==->->>&$....++@#&*>;>*$#+....", ".+@$%*>;---;;*&$@++.+@$&==---;;;---==&$...+@#%==;;;==*%#@+.....@$%==->>;;==*#@+.....++$%&*&##++.....#$--;;;==&&*;;>>>&$.@#*=;;;->;;;;;-==%#.....++@$%&&%$#@............................++#$**;;;=*$@+...++#*==;;===;;==*#@+.@#$===**=*===&%$#++.$&=;;;-=***==>>>**%.&*;;;-==*=>>>>-**%#.=---->>>>>--;;>**$#....++#%&=;;;*%#+....", "..+#$%*=---=*&$@++..+@%*;;;;;;;;;;;;;*%....@$&>;>>>;>=*%@++..++@$&>;---;;=**#++.....+++####@++......#%==;;;==&&*>>;;>&%.+#%*>;;;;;;;;;-==$#.....+@#*=>>>%#@.............................+#$==;;;==$#++..++#%*=;;->-;;=*&#++.@$%>;;>>-=-;;==*$@@.%**;;;-===*-->;;*&$.*=;;;-====;>>>-=*%#.=-->->>>>>-->;;*&$@...++#$&->;;;*%#++...", "..++#$**===*&$#++...+#%*;;;;;;;;;;;;;*%...+@$&>;>>>>>=*&@+....+@$&;;->-;;=*&#++......+++@++++.......@$*=;;;-=***>>;;;*%.+#%*>>;;;;;;;;-==$#....++@$*=;;;&$#++...........................@#%=-;;;==%#+...+@#%*=;;---;;=*%@@..@$&>;;;>---;;-==%#@.%->;;;;>>>>;;>>>=&$.->;;;>;;;;;;;;;>-%$.*=;;;;;>>>;;>>>=*$@..+@#$&*->;;;*%#++...", "..+++#$&==*&%@@+....+@%*;;;;;;;;;;;;;*%...+@#&>;>>>>>**%@++...+@$%;;---;>=*&@+..........+++.........#$*=;;;==&&*->;;;*%.+@#%->>;;;;;;;-==$#.....+#%==;;;*$#+..........................+.@#%==;;;==%#@+...+@%*=>;->-;;=*%@+..@$%>;;;;---;;--=*$#.%->;;;;;>>>;;>>-=&#.->;;;;;;;;;;;;;>>&$.*=>;;;;>>>;;>>>*&#@..+@$&*=>>;;;*%#+....", "....+@@##$$#@@+.....++#%&**==;;;===*&%#....@#$==----=&$#++.....+#$*==--==&$#@++.....................@$**;;;-=*&*=-;;;*%.++#$&**--;;;;;===$#....++@$==;;;&$#+..............++...........+@#%=-=-===%$@+..++@$&*->>>>>-*&$#++.+#%*==;;>>>>>;;;=*$.$=-;;;>;>>>;;>>>=&$.->;;;;;;;;;;;;;>>&%.&*>;;;;>>>;;>>>=*$+.+@#%->>;;===&$#@+...", ".....++@@@@@++......++@#%&*==;;;=**&$#@....+@$**=====$#@++....++@#%&===**%#@+.......................+#%*;;;-=***--;;;*&..++#$%*--;;;;;-==$#.....+@$*=>>;&#@+...........++@++++.........+@#$*=====*$#@++.++#$&=->>>>>-=&$#++.+#%*==;;>>>>>;;;=*%.$%&*==-=;;;>>;;;=*$.&**==>>>>>>>-=-;;*$.$%**==-;;;>>;;;=*$@.+@$&>>>;;===*%##++..", ".......++++.+........++@#%%*=;;;=*&$#@+...++@@$$%%%$$#@+.......++@#$$$%$$@@++.......................@#&*;;;--===--;;;*&...++@$%*=;;;;;-==$#.....+@#$%&&%$#@+..........+@@####++........++@#$$$$%$$#@+...++#&==;;;;;;;==*#@..+@$&==;;;;;--;;;==$.@$%&*===;;;>>;;;=*$.$&===>>>>>>>--=;;&$.#$%**=-;;;>>;;;=*$@.+@%&>>;;;==**&%##++.", ".........+...........++@#$%*=>;;=&%$#@+.....++@@###@@+++........+++@#@#@@++.........................+#&*;;;;>-=->;;;;=&....++#%&=;;;;;-==$#......+@##$$$#++..........++#$%%%$#++........+++@####@@+++...+@#**=;;;;;;;==&#++.+#$*==;;;;;>>;;;==$.+#$**=;;>>>>>;;;=*$.$&=--;>=*===;;;-=&$.@#%*=;;>>>>>;;;=*$#.+#%*;;;--==*--**%#+.", ".....................++@#$&*=;;>=*&$#@+......+++++@+++...........+++++++++..........................+#&*;;;;;---;;;;;=*.....+@$&=;;;;;-==$#........@@@@@++...........+@$&->>%$#++.........++++@+++++....++@**=;;;;;;;=*&@@..@#%*==;;;;;--;;;=*$.+#$**=;;->>>>;;;=*%.$&=->>>=**==;;;-=&#.@#%**;;>>>>>;;;=*%#.+#$*;;;--===>>=*&#+.", ".....................+@#**===---==**&@@........++.+.+..............+.++.............................+#%*;;;>;>--;;;;;=*....+@$%*=;;;;;-==&#.........+++++...........+@$%*>>>*%#@+..........+.+.+.........+@#%&&******%%#@+..@$&>>;;;---;;>>-*%$.+#%*==;;>>>>>;;;=*%.%&->->>****=;;;==%#.@$&*=;;>>>>>;;;=*%#.+@%&>;;;>==-;;==*#@.", "....................+@#$===--->---==*$#.............................................................+#&*;;;;;;;;;;;;;-=..++@$%*==;;;;;>>-&$........................++@$==;;;==$@+........................++@@$%%&&&%$$#@++..@$&>;;;;---;;--=&$@.+#%->>>>>>>>>;;;-=%.*=>;;==***>>>>-==%#.#%->>>>->->>;;;-=%#.+@$&>>;;;---;;-=*$@.", ".....................@$%==-->-->--==*%#.............................................................+#%*;;;;;;;;>>;;;-=...+@$&*=-;;;;;>>-*%.........................@#%==;;;==%#++.........................++@@#####@@+++...@$&>;;;;==-;;-==$#@.@$%>>>-->>>>>;;;--%.&=;;>=*&**>>>>>==%#.$%>>>>->->>>;;;--&#.+@$%>>>;;---;;==*#@.", "....................+@$*;;;;;;;;;;;;;*$.............................................................+#&*;;;--==*****&&$..+@#*==;;;;;;;;;;*&.........................+#%=-;;;==%#+..........................+++++++@++++.....+#%=--**=====*&$#@+.+#%->>--->>>>;;;-=%.&*>>>**%&*>>->-==%$.#%->>-=-=->>;;;-=%#..+#$**=;;;;;;;=*%#+.", "....................+@$&;;;;;;;;;;;;;&$.............................................................+#%*;;;-=*%$####@@+..++#&==;;;;;;;;;;*&........................++#&->;;;-=$#++............................+.+..+........+#$*==&&*****%$#@++.@#%*==**&&*==;;;-=%.&****%$%**;;>>>;>%$.#%*==*&&&*==;;;-=%#.++@#%**;;;;;;>*&$@+.", "....................++#%%***********&$#.............................................................+#%*;;;==%##@++@++...++#&*=;;;;;;;;;;*%.........................@#%->;;;==$#+...........................................++#$$$$$#$$$$#@++...+@#***$%$%%*=>;;==$.%&%%%$#$%*>>>>>>;%#.@#***$$$$%**;;;==$@...+@#$&&*****&%$@@..", ".....................+@#$$%&&&&&&&%$$#@.............................................................+@#%===&%#@+..........+@#$&&********&%#........................++#$*=---*%$@+...........................................+++@@#@@@@@@@++++...++@########$%&*&%$#.@@###@@@#$&&&*&&%$@.+@######@$$&&&&%$#@...++@##$%%%%%$#@+.+.", ".....................+++@###########@++.............................................................++#$***%#@+...........++@##%%&&&&&%%$#@.........................+@$&*===&$@+..............................................++++++++++++.......+++@+++++@##$$$$@@.+++++++@@#$$$$$$#@@.+++@@++++@@$$$$$@@+......+@@#####@@++...", ".......................+++++@+@+++++++...............................................................+@#&*&#@++............++@@########@@@+..........................+@%&==*$#@+..............................................+...................++++++++++@@@@@++.++++++..++@@##@@@++..+.+.++.++++@#@@++........++++++++++....", "...+++@@@@++...............+++@@@@++..........++@@#@@+...........+.++@++++..............................+++@####@++............++++++++.+.........+++@+@+@+++++....+++@@@@++................++@@@@@+..........++@#@@@...........+++++++++++........+++@@@++..................++@@@@++........++@@####@+.........++++++++++++....", "...++##$##@++..............++@##$##@+........++##$$$#@+..........+@@@###@@++...............+.............+@#$%%$$@++.........+++@+@@@@@@@++...++++@@########@++....++##$$#@++..............++@##$#@@++.......+@#$$$#@@+........++@##@##@#@@++......+@@#$$#@++...............++@##$#@@+.......++#$%%%$#@+.......+++@#@@@@@@@@++..", "..++#$&==$#@@.............++#$&&==#@++.....+++#%&===$#@+.......++@#&&%%$%$@@........+++@+++++++........++@#**---&$@+.......++@@##$#$#####@@....+@#$%&****&&%$$@...++@$==&%%@@............+++@#%==%$#++.....+++#$===&%#++......++@#$$%$$$$$#@@+.....+#%%==$$@++.............++@#%==&$#++....+++#%*->-&%#@.....+++##$$$$#$$$$#@@+.", "..+@$%*--&%#@++..........+@@$&**--$#@.......+@$&*---&$@+......++##%******&#@++.....++@@@#@@@@@@+.......++@%*=>>-*%#++.......@@&&********&&#..+@@#%&*=====***&%#...++#$=-**&$@@+...........@@$%&--*%$++.....++#$&->-*&$#++....++@$%--***==*&%@+....++$%*--&%$@++...........++@$%&--*%$@+....++@$**>>>=&$#++....+@%&&==%%%==*&%@+.", "..++$&*>>**%#@+.........++@$%===--$#+......+@$%*=>>-*%#@+....++@$%&=====**%#@+....++@#$$$$$$##@@+......+@#%==>>>*&$++.....++#$**========**$.+@#$%**=====-===**$..++@$%==;;>*&$#@++....++@#$%-->>>*%$@++..++@$%=->>>;>&%#@+...+@$%&>>=*=--=**#@+..++@$%*->**%$@++.........+@@$%&*>-*%$++....+@$%*=>>>=*%#@+...+@#&*==-***--**&#@.", "..+@#%*->>-=$#++......+++@#&*>>>=*$@++....++#%&>;>>>==$@++..+.@#*==;;;;;;>&$#+...++@%&*=-%%%--$@++....++@$&->---==$@+......@#%====-=-=====&.+@$===;;;;;;;;;;>>%..+@#%&==;;;=*%$#@+..++@@$$&*->>>-*&$@@...@@$%*=-;;;;;*&$#@..+@#**=->--->>===%#+...+@#%*->>-=%$#+++.....+++#$%-->>-*%#@+...++#%&>;>>>;;&%#@+.++@$*==>>===->-=*$@.", ".++@$%*->>>-&$@.+.....++@$%*=;;;=*$@+....++#$&*;;;;>-=$@+....+@$*=-;;;;;;>*$#+...+@#%*=--***--$@++....+@#%*->---=*$++....++@$&>;;;;;;;;;;;&.@#%==-;;;;;;;;;;>>&.+@#&*==-->---=*&#@+.++#&**==>>>--=**$@+.+@$*==>>--->>-=*$#+.+#$*==>>--->>-==%$@...+@$%*->>>-*%$#@++...++@#$%*->>>-*%#@+...+@$&*;;>>>;;*&$@+.++#%===>>--->>-==%#.", ".++#&*==->>>&$#+.....++@$&*=->--*&#@++...+@#*=->>---==%#++..++#%=---->>>==&$@++..+@#**=>>=====%#+....++#&*=->>>>*&$@++....+#$*;;;;;;;;;;;;*.#$*;;;->=====>>>>>&.@#&==--->>>>>===&$@.@$%===-->>>---==&$@.@$%=-->>->->>--=&%#.@$&==->>>->>>--=*$#..+@$*===->>>==**%#+..++#&**=->>>-==*&#@..+#$*=-->--->>-==$@.++#$==->>=-->>-==%#.", ".+@$*===->>>*%#@.....+@#&*=-->>-*&#@.....+#$*=->>->-==$#++..+@#%=->->>>>=*%#@....+#$*==>>-===*%#@....+@$*==->>>>*&$@+.....+@%*->;;;>>===;;*.#%*;;;--*****>>>>>&.#%&;;;;;;;;;;;;;=&#.@%*;;;;;;;;;;;;;=&#.@%*;;;;;;;;;;;;;=&#.#%*;;;;;;;;;;;;;=&#.++#$*==-->>>-==**$@..+@$&==-->>>-===*$@.++#%==->>--->>-==%#.++#%->>;;;;;;;>>-%#.", "++#$*==-->>>*&$@+....+@$**=->->>*&$@++..++#%==->>---==%#@...++#&=->-->>>==%#@+..++#%*==>>---==%#++..++#$*==->>>>=&$@+....++#$*>>;;;>>===;;*.#%*;;;>=*%%&*->>>>&.#%*;;;;;;;;;;;;;=*$.@%*;;;;;;;;;;;;;=*#.#%*;;;;;;;;;;;;;=*$.@&*;;;;;;;;;;;;;=*$.++#$->>;;;;;;;>>-$#.++#$->>;;;;;;;>>-$#.++#%->>;;;;;;;>>-%#.++#$->>;;;;;;;>>-$#.", "++#%->>;;;;;-=%#++..++#$->>;;;;;-=%#++..++#%->>;;;;;-=%#@+..+@#%>>;;;;;;-=&#@...++#%->;;;;;;-=&#@+..++#%->>;;;;;==%#++....+#%*>>;;;>>=-=;>&.$*=;;;=*&$#$%***=*$.@$&=--;;=====;;;**#.@$&=--;;=====;;;**$.@$&=--;;=====;;;**#.@%&=--;;=====;;;=&$..+#$->>;;;;;;;>>-$#..+@$->>;;;;;;;>>-$#.++#$->>;;;;;;;>>-$#..+@$%&*==;;;==**%#@.", ".+#$->>;;;;;==&#@+...+#$->>;;;;;==&#++..++#$->>;;;;;-=&$@+..++#%->>;;;;;-=&#@+..++@%->>;;;;;-=&$++..++#$->>;;;;;-=&#@....+@#%*;;;;;>>;;;=*&.#*=;;;=*%#@@#&&**&$.@$&=--;;=====;;;=&$.@#&=--;;=====;;;=&#.@$&=--;;=====;;;=&$.@$&=--;;=====;;>=*#..+@#%&*==;;;==**%#@.++@#%&*==;;;==*&%#@..+@#%&*==;;;==*&%#@...+@$%**=;;;=*&%##+.", "++@$%*=>>;;;>>&$@+..++@$&*=>>;;;>>&$@+...+@$&*=>>;;;>>&$@+...+@$&*=>>;;;>>&$@+...+@$&*=>>;;;>>&$@+...+@$&*=>>;;;>-&$@+...+@$&*;;;;;>>;;;=*%.$&=;;;=*$@@@@$%$%%@.+#%==-;;=====;;;*&#.+#%==-;;=====;;;*&$.+#%==-;;=====;;;*&#.+#%==-;;=====;;;*&#..++@#%**=;;;=*&%#@+..++@#%&*=;;;=*&%$@+..++@$%**=;;;=**%##+..+.+@#%*=;;;=*%#@++.", "..+@$&*>>;;;>>*%#@...++@$&*>>;;;>>*%#++...+@$&=>>;;;>>*%#@...++@$&*>>;;;>>*%#@....+#$&*>>;;;>>*%#++...+@$&*>>;;;>>*%#+..++@%&=;;;;;>>;;>=*$.$*=;;;*&$@++++@@@@+.+#$==-;;===>;>--&%@.+#$==-;;===>;>--*$#.+#$==-;;===>;--=&$@.+#$=--;>===>>--=&$#...++@#%*=;;;=*%#@@....++@#%*=;;;=*%#@++...++@#%*=;;;=*%#@++...+++@$&*;;;*&$#++..", ".++@$**;;---;;*%$++...+@$**;;---;;*%$++..++@$&*;;---;;*&$++...+@$**;;---;;*%#@+..++#&*=;;---;;*%$++..++@$**;;---;;*%#@+.+@$*==;;;;;;;;;;=*$.$*=;;;*&$@++++@@@++.+@$==-;;===;;--=$#+.+@$==-;;===;>--=$#+.+#$==-;;===;;===$@+.+#$==-;;===;>-==$@+....++@$&*;;;*&$#++.....++#$&*;;;*&$#++.....++@$&*;;;*&$#++......+@$&*;;;=&#@+...", ".++#$*=;;=-=;;=&$@+..++@$&=;;---;;=&$@+..++@$**;;---;;=&$@+..++@$&=;;---;;=&$@+..++#&*=;;---;;=&$@+..++#$&=;;---;;=&$@+.+#%*==;;;;;;;;;;=&#.#*=;;;=*%##@@####@@.+#$==-;;;;;;;=*&$@@.+#$==-;;;;;;;=*&$@+.+#$==-;;;;;;;=*%$@@.+#$==-;;;;;;;=*%$@+....++@$&=;;;=&#@+.......+@#&=;;;=&#@+.......+@$&=;;;*&$@+.......++$&*;;;*&$++...", "++@$===;;===;;-==$@..+@%*=-;;===;;-==$@..+#$==-;;===;;===$@..+#$===;;===;;-==$@..+#$==-;;===;;-==$@.++@$===;;===;;===$@.@$%->>;;;;;>>--=*&#.$&=;;;=*&%$$$%%$$#@.+#$==-;;;;;;;=*%$@+.+#$==-;;;;;;;=*&$#+.+#$==-;;;;;;;=*%$@+.+#$==-;;;;;;;=*%$#+.....++#&=;;;=&#@+.......+@#&*;;;*&$++.......++$&*;;;**#@+.......++#&=;;;*&$++...", "+@#%=--;;===;;-==%$.+@#%==-;;-==;;-==%$.++#%==-;;===;;-==%$.+@#%=--;;===;;-==%#.+@#%=--;;-==;;-==%$.+@#%==-;;===;;-==%$.@$*>>>;;;;;>>>--*%$.#&*;;;-=**&&&====*#.+#$==-;;>>>;;=**%$@.+#$==-;;>>>;;=**%$@.+#$==-;;>>>;;=**%$+.+#$==-;;>>>;;=**%$@....++@$&*;;;*&$@++......+@$&=;;;*&$@+.......+@$&=;;;*&$@+.......+@$**;;;*&$@+...", "+@$&>>;;;;;;;;;>>&$.+@$&>>;;;;;;;;;>>&$.+@$&>>;;;;;;;;;>>&$.+@$&->;;;;;;;;;>>&$.+@$&>>;;;;;;;;>>>&$.+@$&>>;;;;;;;;;>>&$.#&*>>>;;;;;>>---**$.#%*;;;>-=*=*=---==$.+#%==-;;>>>;;===*&$.@#%==-;;>>>;;===*&$.@#%==-;;>>>;;===*&$.+#%==-;;>>>;;==**&$...++@#%*=;;;=&%#@+....++@#%&=;;;=*%#@+....++@#$**;;;=*$#@+.....+@#%*=;;;=*%#@+..", "+#%*>;;;;;;;;;;;>*&.@$%*>;;;;;;;;;;;>*&.+#%*>;;;;;;;;;;;>*&.+#&*>;;;;;;;;;;;>*&.@$%*>;;;;;;;;;;;>*&.+#%*>;;;;;;;;;;;>*&.$&=;;;=->>>>>===>>&.@$&-->;;;;;;;;;;==%.@$&=--;;===>->-->>%.@$&=--;;===>---->>%.@$&=--;;===----->>%.@$%=--;;===--->->>%...+@#$&*=;;;=*&$#@+...+@#$&*=;;;=*&$#@+...+@#%&*=;;;=*&$#@+..++@#$&*=;;;=*&$#@+.", "#$*=;;;>>>>>>>;;;=*.@$*=;;;>>>>>>>;;;=*.#$*=;;;>>>>>>>;;;=*.@$*=;;;>>>>>>>;;;=*.@$*=;;;>>>>>>>;;;=*.#$*=;;;>>>>>>>;;;=*.%*=;;;-=>>>>>===>>*.@#%=--;;;;;;;;;;=*$.@$&=--;;===-->>>>>&.@$&=--;;===->>>>>>&.@$&=--;;===>>>>->>&.@$&=--;;===>>>>->>&..++#$&*==;;;==*&$#@.+.@#$&*==;;;==*&$#+..++#$&*==;;;==*&%#@..++#$&*==;;;==*&$#+.", "#%*=;;;>>>>>>>;;;=*.#%*=;;;>>>>>>>;;;=*.#%*=;;;>>>>>>>;;;=*.#%*=;;;>>>>>>>;;;=*.#%*=;;;>>>>>>>;;;=*.#%*=;;;>>>>>>>;;;=*.%->;;;>>;;;;;;;;;;*.+#$==-;;;;;;;;;;=*$.#&*;;;;;;;;;;;;;>>&.#&*;;;;;;;;;;;;;>>&.#&*;;;;;;;;;;;;;>>&.#&*;;;;;;;;;;;;;>>*.++@$==-;;;;;;;--=$@..+@$==-;;;;;;;>-=$@.++@$==-;;;;;;;--=$@..+@$==-;;;;;;;--=$@.", "#%->;;;;;===;;;;;>-.#%->;;;;;===;;;;;>-.#%->;;;;;=-=;;;;;>-.#%->;;;;;=-=;;;;;>-.#%->;;;;;===;;;;;>-.#%->;;;;;=-=;;;;;>-.%->;;;>>;;;;;;;;;;*.++#$&*==;;;>>==**$#.#&*;;;;;;;;;;;;;>>&.#%*;;;;;;;;;;;;;>>&.#%*;;;;;;;;;;;;;>>&.#&*;;;;;;;;;;;;;>>&.++#$=->;;;;;;;>-=%#.++#$=->;;;;;;;>-=%#..+#$=->;;;;;;;>-=$#.++#$=->;;;;;;;>-=%#.", "#%->;;;;;-=-;;;;;>-.#%--;;;;;-=-;;;;;>-.#%->;;;;;===;;;;;>-.#%->;;;;;===;;;;;>-.#&--;;;;;-=-;;;;;>-.#%->;;;;;===;;;;;>-.%--;;;>>;;;;;;;;;;&..++@#&==;;;>>*&%#@+.#%*;;;;;;;;;;;;;>>&.#&*;;;;;;;;;;;;;>>&.#&*;;;;;;;;;;;;;>>&.@&*;;;;;;;;;;;;;>>&.++#%=->;;;;;;;>>=$#.++#%=->;;;;;;;>--$#.++#%=->;;;;;;;>>=%#.++#%=->;;;;;;;>>=$#.", "#%--;;;;;===;;;;;--.#%->;;;;;===;;;;;--.#%--;;;;;===;;;;;--.#%=-;;;;;===;;;;;--.#%=>;;;;;===;;;;;>=.#%--;;;;;===;;;;;--.$*=---=--->-->>>--&....@#%==;;;>-&#@+...@$&=-->>-->-----=*%.@$&=-->>-->-----=*%.@$&=-->>->->----=*%.@$&=-->>>--->---=*%..+@$*==->->---==*$#..+@$*==->->---==*$#.++@$*==--->->-==*$@..+@$*==->->---==*$#.", "#$*=-----=*=--->-=*.#$*=-----=*=--->-=*.#$*=-----*===----=*.#$*=-----*===----=*.@$*=-----=*=-----=*.#$*=-----*===----=*.#&*======-=-----==$...++#%->;;;=*%#++...+#$===----=---==*&#.+#$==----=-=--==**#.+#$==----=-=--==*&$.+#$==-----=-=-==*&#.++@#**===-=-===**#@.++@#**====-=-==**#@..+@#**===-=-===**#@.++@#**===-=-===**#@.", "@#&*=-===*&*=====*&.@#&*=-===*&*=====*&.@#&*=-===&&*==-==*&.@$&*=-===&&*==-==*&.@$&*=-===*&*==-==**.@#&*=-===&&*==-==*&.@#$%%%%%&%&&&&&&%$#....+#$=-;;;*&#@+....+@#$%&&&&&&&%&&%$$@.+@#$%%&&&&&&%&&%$#@.+@#$%%&&&&&&%&%%%#@.+@#$%%&&&&&&%&&%$$@..++@#$%%&&&&%%%$#@+..++@#$%%&&&%&%%$#@+..++@#$%%&%&&%%%$#@+..++@#$%%&&&&&%%$#@+.", "+@#$%%%%$$$$$%%&%$$.+@#$%%%%$$$$$%%&%$$.+@#$%%&%%$$$$%%&%$$.+@#$%%&%%$$$$%%&%$$.+@#$%%%%$$$$$%%%%$#.+@#$%%&%%$$$$%%&%$$.+@@######$##$#$###@....+@#%&**&%$#++....++@@###$#$#$####@@+.+++@##$#$#$#$###@@+.+++@##$#$#$#$###@@+..++@##$#$#$#$###@@+...++@@####$#$##@@++...++@@#####$###@@++...++@@###$#$###@@+....++@@@########@@++.", "++@@#####@@@#####@+.++@@#####@@@#####@+.++@@#####@@@#####@+.++@@#####@@@#####@@.++@@#####@@@#####@@.++@@#####@@@#####@+.++++@@+@+@@@@@@@+++.....+@#$$$$#@++.......+++@@@@@@+@@++++...+++@+@@@@@+@++@++...+++@+@@@@@+@@+@++...+++@+@@@@@+@++@++.....+++++@+@+@++++......++++@@@+@@+++++.....++++@+@+@+@++++.....+++@+@@@@@++++...", "........................++++@@@+@++++.......+++@@@+++...............+++@@+++.........++@@#@@@+..........++++@@@@+@+++.....................................................+.++++.+......++@@@@+++...............+++@+@+.+........++@@##@@+...................................+++@+@+.........+....................+++++++.......", "..++++++++++++..........++###$$$$###++.....++#$$$##@+..............+@@#$$#@+........++@#%%%$#@++........++##$#$$$###+++.........+..++..................................++++@@@@++......++@$$$##@++............+++@#$$#@+........++@#%%%$#@++............+.+.+...............++@#$$@@++.....+++++++................+@@###@++.....", "++@@#######@@+++.......+@#$%&&&&%%$$#++....+@#&&&%$#@+............++@$$&&$#@+.......+@#%&**%$#@+......++@#$%&&&&%%$$@@......+++++++++++.............................+++@@####%$$@@+....+@$&&&%$#@+............++#$$&&$#@+.......+@#%&**%$#@+........+++++++++++............++#$$&&$#@+...++@@#@@@+++............++@$%&&&$@@+....", "@@$$%%%%%%%$$##+++...+++#$==>>>==-==$@+...++#$=---=$#++..........++#%&*>>&%#++.....++#%*>>>==$#++.....++#$==>>>==-==$@+....+++#$@@###@@++.........................++@@#$$%%%&*&&$@+...++#$=---=$#++..........++#%&*>>&%#++.....+@#%*>>>==$#++......++@#$@@@$#@+++.........++#%&*>>&%#++.++##$%$%$#@@+..........++@$%**=*%%#@++..", "#$%&*******&&%$$@++...+##%=->>>----=$#+...++#%->---&$@+..........+@$&==>>*%$+......+@$**;;;-=&$@++....+@#%=->>>----=$@+....+@#$%$$$%%##@++.....++++......++++.+...+@#$%&&****==*%#@...++#%->---&$@++........++##&==>>*%$++.....+@$**;;;-=&$@@+.....+@#$%$$#%%$#@++......+++#$&==>>*%$++.+#$&&**&&%$#@+.........+@$%**===*&%#@+..", "#==>;;;;;;;>>**&$#+.++@$%*--;;;-->-=%#+....@#%->>>-*%#@+........+@#%*==;>*%$++....+@#%*=;;;--*%#++...+@#%&--;;;-->-=$#+...++#$&&%&%**%$#@+....++@+@+++..+++@+++.++@$$&=-;;;;>;;;&$@...+@$%->>>-*%$@+++....+++@$%*==;;*&$@++..++@#&*=;;;--*%$@++..++@#$&&%%&&*%$$@++...+.++##%*==;;*&$@+.@#%>>>;>-==$#@+.+.....+@#$*>;;;;;>&%#@+.", "$==;;;;;;;;>>==*%$@.+@#&*=>;;;;;;==*%#@...++#$*=>;>=*$@++......++#$&>>;-=&%#++.....@#&>>--->>=*&@++..+@&*=>;;;;;;==&$@+...+@$%>>=*=>>=*&#@..+.+@####@+++@##$#@+.+@$%**--;;;;;;;;*&#.++@#$&*=>;>=*%$@@++..++@#$%*>;;-=*&$#++..+@#%*>>---;>=**#@+..+@#%&>>*=*>>==*$@+..++@@#$%*>>;-=*&$#+.@$&>;;;;--=%$#@++....++@$&*;;;;;;;*&$@+.", "%*=;;;>>>>>>>;;;*&#.+@%*==>>;;;;;===&$@..+.@#%&=>>>==&$@++....++@$&*;;;-=*%#@+...++#$&>>->-;>=**#++.++#&*=>>;;;;;=**$@+..++#$&>>===>>==*#@+..@@$*=*$##@##$=**$@.@#%->>;;>>>;;;;;=*$.++#$&**=>;>==*%%$#+.++#$%&**;;;--**%$#@.+@#%&*>;->-;>===%$@.+@#%**;>===>>===%$@.++##$%&**;;;-==*&$#.@$&>>>;;>--=*$$@@++.+.@#*==;;=--;;==*$+.", "%*=;;;>>>->>>;;;=*$.@#%===;;;;;;;===&%#..++@$%*=>;>==&%$@@+..++@$%&=;;;==*&$@@...+@#%*>>-->;;==*$@+.++#&==>>;;;;;==&$#+..+@$%*>;===;>-==$#+.++#%===&%$$$%&===%#.@$&->>;;>>>;;;;;=*$.+#$&*===>;>==***%$#.+#$%**==;;;-==**&$#.+#$&*=>;---;;-==&%#.+#$&*=;;===>>-==*%#.@@$%&**==;;;--=**&$.@$&>>>;;>--==&&$#@+..+@$*=-;;-==;;-=*$@.", "%==;;;>>>>>>>;;;=*%.@$&>;;>>===>>;;;==$.@#%->>;;>>>>>;;;*&#.@#%->>;;>>>>>;;;*&#.@#&->>;;>>>>>;;;*&#.@#&>>;;;->>>>;;;*&#.@#&>>>;;>>>>>;;;*&$.+@$%=--**&&&**--=&#.#%*>>>;;>>>;;;;;=*%.@$%>>>;;===>>;;>==$.@$&>>;;;===>>;;>==$.@$&>;;;;===>>;;;==$.@$&>>;;>=*=>>;;;==$.@#==>>>;;-==;;;;>==.@#&>>>;;>>>-=**&%$#.++#$==-;;-=-;;-==$@.", "$*=;;;--=====;;;>-%.#%*>;;>>===>>;;;-=$.@$&->>;;>>->>;;;=*$.@$&->>;;>->>>;;;=*$.#$&>>;;;>->>>;;;=*$.#$*>>;;;>->>>;;;=*$.#$&>>;;;>->>>;;;=*$.+@%*;;;>>**=>>;;>&$.#&*;;;----->>;;;>-&.@%*>;;;;==*>>;;;-=$.@$*>;;;;===->;;;-=$.@%*>;;;;=*=>>;;;-=$.@%*>;;;;=*=->;;;-=%.#$==>>;;;==-;;;;;-=.+$%=--;;;;;;;;;>*&$..+@$==-;;---;;-==$#.", "$&=;;;--=*=*=;;;>-&.#%*;;;;;-=-->;;;-=%.#%*>>>;;--->>;;;=*%.#%*>>>;;--->>;;;=*%.#%*>>;;;--->>;;;=*%.#%*>;>;;--->>;;;=*%.#%*>;;;;--->>;;;=*%.+@$*>;;;>===>>;;;&#.$*=;;;----->>;;;>-&.#%*;;;>>=*==-;;;==%.#%*;;;>-=**--;;;==%.#%*;;;>>==*=-;;;==%.#%*;;;>>=**=-;;;==%.#%=-;;;>>===>>;;;==.+#%=--;;;;;;;;;;=*$..+#$==-;;---;;-==%#.", "%=-;;;;;---=*->>>>&.#&*;;;;;-=---;;;==%.#&=;;;-=***==;;;>-&.#&*;;;-=***==;;;>-%.#&=;;;--***==;;;>-&.#&=;;;-==**==;;;>-&.$&=;;;--***==;;;>-&.+@#%*==;;;;;;;==*%#.$*=;;;==;;;-->>>>>&.#%*;;;-=*%&*=;;;=*%.#&*;;;-=*%&*=;;;=*%.#&*;;;-=*&&*=;;;=*%.#&*;;;-=*&&*=;;;=*%.@#%*>>;>>===>>;;;*&.+#$==-;;=====>>>>>&..+@$==-;;;;;;;-==%#.", "%=-;;;;;--=*=-->>>*.#%*;;;;;>>>==;;;=*%.$&=;;;-=*&&**;;;>-&.$*=;;;==*&&**;;;>-&.$&=;;;-=*&&**;;;>-&.$&=;;;-=*&&**;;;>-&.#&=;;;-=*&&**;;;>-&..+#%&==;;;;;;;=**$@.$*=;;;==;;;-->>>>>*.#&*;;;-=&%%**;;;=*$.#&*;;;-=&%%&*;;;=*$.#&*;;;-=&%%&*;;;=*$.#&*;;;-=&%%&*;;;=*$.+#%*>>>>>===>>;;>*%.+#$==-;;=====>>>>>&.++#$==-;;;;;;;--=&$.", "%=-;;;;;--=**->>>>*.$&*;;;;;>>;==;;;=*$.$*=;;;*&%##%&-->>>*.#*=;;;*&%##%&-->>>*.$*=;;;=&%##%&-->;>*.#*=;;;=&%##%&-->>>*.$&=;;;*&%##%&-->>>*.++@#&*=;;;;;;;=**#@.$*=;;;==;;;-->>>>>&.#&*;;;==&$%&*;;;=*$.#%*;;;-=&%%&=;;;=*%.#%*;;;==&$%**;;;=*%.#%*;;;-=&%%&=;;;=*%.+@#%*==;;---;;==*%#.+#$==-;;=*=*=>>>>>&.++#$==-;;;;;;;--=&$.", "%=-;;;>>===**-->>>*.#%*;;;>>;;;==;;;=*$.$*=;;;=&$##$&-->>>*.$**;;;=&$#@$&=->>>*.$&=;;;*&$##$&-->>>*.$**;;;*&$##$&-->>>*.$*=;;;=&$##$&-->>>*...@#%*=>>;;;>>=*%#+.$*=;;;=-;;;==->>;>*.#&*;;;==&$%**;;;=*$.#&*;;;==&$%&*;;;=*$.#&*;;;==&$$**;;;=*$.#&*;;;==%$%&*;;;=*$..+@$*==;;>->;;=**$@.+#$==-;;==*==>>>;>*..+@$==-;;===>>;;;*&.", "%==;;;>>==***-->>>&.#&*;;;--;;;->;;;=*$.$*=;;;*&$#@$&-->>>&.$*=;;;*&$##$&=>->>&.$*=;;;=&$@#$&-->>>&.$*=;;;*&$@#$&-->>>*.$*=;;;*&$@#$&-->>>&.+.@#%**>>;;;>>=&%$@.$*=;;;==;;;==>>-;>&.#&*;;;==%$$**;;;=*$.#%*;;;==%$$**;;;=*$.#%*;;;==%$%**;;;=*$.#&*;;;==%$%**;;;=*$..++@#%*>>;;;>-*%#@+.+#$==-;;=====>>>>>&.++#$==-;;===->;;;=*.", "$&=;;;-=**&&*>>>>>*.#&*;;;->;;;--;;;=*$.$*=;;;=&$##$&-->>>*.$*=;;;**$##%&-->>>*.$*=;;;*&%##$&-->>>*.$*=;;;=&$##$&-->>>&.$*=;;;=&$##$&-->>>*..+@$==-;;>>>;;-=*$@.$&=;;;;;>--==;;;>>*.#%*;;;-=&%%&*;;;=*$.#%*;;;-=&$%&*;;;=*$.#&*;;;-=&$%&*;;;=*$.#%*;;;-=&$%&*;;;=*$...++#$&>>;;;>>&%@++.+#$==-;;;>;>>;;;-=&.++#$==-;;=*===;;;=&.", "$&*;;;--*****>>>>>&.#&*;;;-----;;;;;=*$.$*=;;;==&%&&*>;>>>&.#&=;;;==&%&&*>;;>>&.#*=;;;==&%&&*>>;>>&.$&=;;;==&&%**>;>>>&.$*=;;;==&%&&*>;;>>&.+@#%==-;;>>>;;-==%#.$&=;;;;;>--==;;;>>&.#&*;;;==%%%&=;;;=*$.#%*>;;==&%&&=;;;=*$.#%*;;;==&%%**;;;=*$.#&*;;;==&%%*=;;;=*$....+@$&*=;;;=*%#@+..+#%==-;;;;;;;;;;==$.++#%==-;;===*=;;;=&.", "#**;;;-==***=>>>>-%.#%*;;;--->-;;;;;=*%.#&=;;;==****=>;;>-%.$&=;;;==****=>;>>-&.#&*;;;==****=;;>>-%.#&*;;;==****=;;;>-%.#&=;;;==****=;>;>-%.+@#%==-;;>>>;;--=&#.$&=;;;;>>--==;;;>-%.@$*;;;==****=;;;**#.#$*>;;==***==;;;=&$.@$*;;;-=****=;;;=*$.@$*>;;-=****=;;;**#....+@$%*=;;;=*%$@+..@#%=--;;;;;;;;;;=*$.+@#%==-;>=====;;;=*.", "$*=;;;>-====-;;;=*%.#&*;;;-->--;;;;;=*$.#%*>>>;>===--;;;=*%.#%*>;;>>===--;;;=*%.#%*>>;>>===-=;;;=*%.#%*>>>;>====-;;;=*%.#%*>>>;>===-=;;;=*%.+@%*;;;>-=*=--;;>&$.#&*;;;;;-----;;;=*%.@$&->>;;====-;;;*&#.@$&->>;;=====;;;*&#.@$&->>>>====-;;;*%#.@$&->>;>====-;;;*&#....+@$&==;;;==&$#++.@$&=->;;>>>>>==*&%#.+@$&=->;;---->;;;=&.", "%&=;;;>>===--;;;**$.#&*;;;->===;;;;;=*$.@$&>>;;;--=--;;;=*$.@$&>;;;>--=--;;;=*$.@$&>>>;;-=---;;;=*$.@$&>>;;>-=---;;;=*$.@$&>>;;;-=---;;;=*$.+@%*;;;-=***=-;;;%$.#%*;;;;;---->;;;=*$.@#%->>>;==---;;;*%#.@#%->>;>===--;;;*%#.@#%->>;;===--;;;*%#.@#%=>>;;==---;;;*%#..++@$%*=-;;;-=*%$@+.#%*-->;;>>>>-**&$#@.+#$*-->;;>->>>;;;=*.", "%->;;;;;;;;;;>--*%#.#**;;;;;===->;;;=*$.@#%*==>>;;;;;--=&%#.@#%*==>;;;;;;>--&%#.+#%*==>;;;;;;--=&%#.@#%*==>;;;;;;--=&%#.@#%*==>;;;;;;>--&%#.+@#%*==*&%%%&*==*%#.#%*>>>;;;;;;;>--&%#.+#$*==;;;;;;;>>-*$#.+#$*==;;;;;;;>>-*$#.+#$**=;;;;;;;>>-*$#.+#$*==;;;;;;;>>-*$#..++#&==;;;;;;;=**#+.#&*;;;;;>>>**&%##++.+#&=;;;;;>>>;;;;;*%.", "%->;;;;;;;;;;--=%$@.#**;;;;;===--;;;*&$.+@#%*=>>;;;;;-==%$@.+##&*=>>;;;;;--=%$@.+@#%*=>>;;;;;-==%$@.+@#%*=>>;;;;;-==%$@.+@#%*=>>;;;;;--=%$@..+#$&**%$###$%***$@.@$&>>>;;;;;;;--=%$@.++#%*=;;;;;;;>--&$@.++#%*=;;;;;;;>--%$@.++#&*=;;;;;;;>>-&$@.+@#%*=;;;;;;;>>-%$@..++#&==;;;;;;;==&#+.#&=;;;;;>>-*%$#@++..@#&*;;;;;-->;;;;;*%.", "$=>;;;;;;;;;;-==$#+.#%*;;;;;***=-;;;*%#.++#$&*>>;;;;;==*$@+..+#$&*>>;;;;;===$#+.++#$&*>>;;;;;==*$@+.++#$&*->;;;;;==*$@+.++#$&*>>;;;;;===$#+.+.@#%%%#@@+@@#%%%@@.@$&->>;;;;;;;===$#+.++@$&*;;;;;;;>-=$#+.++@%&*;;;;;;;>-=%@+.++@%&*;;;;;;;--=$#+..+@%&*;;;;;;;--=%@+..++#&*=;;;;;;;=*&#+.#%*;;;;;--=%#@++....+#&*;;;;;---;;;;;&$.", "$%&***=**=***&&$#++.@#%&****&%%%&**&%$@..++@#$&******&%##++.+++##$&******&%$#++..++@#%%******&%##++..++@#$&******&$$@@+..++@#$&******&%$#++...++@@@+++.+++@@@++.+#$====*=****&%$#@+..+@@$%&******&&$#@+..++@#%&*******%%#@+..++@$%&**=***&&$#@+..++@#%&*******%%#@+...+@#$&*******&%#@+.@#%&*****&%#@++.....+@#%&***********&$#.", "@#%%&%&&&%&&%$$@@++.+@$$%%%$$##$$$$$#@+...++@##%%&%%$##@++....++@#$$%&&%%$##+++...++@#$$%&%%$##@++....++@#$$%&%%$$#@++....++@##%%&&%%$##@++....++++++...+++++++.+#$*==&&%&&%%$#@@+....++@#%%&&&&%$$#@+....+@##%%&&&&%$$#@++..+++@#$%%%&&%$$#@++...+@##%%&&&&%$$#@++....+@#$$&&&&%$$#@++.+@$$%&%%$##@++.......+@$$%&%%%$%%%%%$#@.", "+@@#####$####@@++...++@@####@@++@@#@@++....+++@@#####@@++......+++@@#####@@++......+++@######@@++......+++@######@+++......+++@@#####@+++.......+.+.......++....++@##$$$#####@@+.......++@@#######@+++......++@######@@+++.....++@@#######@+++......++@######@@+++....++++@@#####@@+++..++@@#####@+++........++@@######@####@++.", ".++++@++@+@+++++......++++++.++++++++.......+++++++++++.........+++++++++++.+........++++++++++.........+.+++++++++.........+++++++++++.........................+++@@@@@@+++++++.........++++@+++++.........++++++++++++........++++@+@++++.........++++++++@+++........+++++@+@++++......+++++++++............+++++++++++++++..", ".....+++++....................++.+..............++++......................................................+++++@+...................................................++++++....................+++++............+++++.................................+++++....................++++++............++++............................", "....+++@@+++................++++@@++...........+++@@++...........+..+.+..+...............................++@###@@++.................................................+++@@+++.................+++@@@++..........+++@@++..............................+++@@+++.................+++@@++++........++++@@++..........................", "..+++@####@+................+@####@++........++@####@@...........+++@+@@+++...............+.............++@#$%%$#@+...............................................+.@@####@+.................+@####@@+........++#####@+...........+....+..+.......+++@####@+.................+@####@++........+@####@@+...........+....+.+......", "...+$$%==$#@++...........+++@$%%==#@++......++@#$*=*$#++.......+++#$$$##$#@++........+++++++++...........@#**--=%#@+...............................................+#$%==$#@++.............++@#$==%$#++......++#$*=*$#@+.........++++++++++........+$$%==$#@++.............++@#$==&$#++.....++@#$*=*$@++.........++++++++++.....", ".+++#%&==&%#@+...........++##&&*==##+.......+@#%&===%#@+......++@#$&&&&&&%$@++.....+++@@@@@@@@++.......++@$*=>>-%$@++............................................+++$%&==&%#@+.............+@#$&==&%$++.....++@$%===&$#@.......+++@@@@+@@@+@++...+++#%&==&$$@+.............+@#$&==&%$++.....+@#%&===%$@+.......+++@@@@@@@+++....", "..++$%*--*&%#@+..........+@#%**===$#++.....++#%&*--=*%#@+....++@$%&*=****&%#@+....++@##$$######++......++#%==>>>&$#@.........+......+................+...+........++$%*--*&%$@+...........+@#$&*--*%$++.....+@#%*=--*&$#++....++@##$#######@+++...++$%*--*&%#@+...........+@#$&*--*%$++....++#%&*---&%#++.....++@##$$######++...", "..++#$&->>-=%#++........++#%*>>>=*$#++.....+@$%>;;;;=*$@+....+@#**=;;;;;;>*%#++...++$&&==%%%==#@+......++#%=>=-===#++.....+++++++++++++++........+++++@+++++......++@$&->>-=$#@+.........++#$==->>&$#++....++#$==;;;>>%$@+....++$%&==%$%==%%#++...++#$&->--=$#++.........++#$===>>&$@++....+@$%>;;;;=*$@+.....++$%&==%%%==#@+...", "..++@$&->>--&$@+.......++#$**;;;=*$@+....++@#%*>;;;;==%#++...+@$*=-;;;;;;>*%$+...++#%&*==&*&-=$#++.....+@$&->--==*$@++....++@@#@@@@@@#@@+++....+++@#@#@##@@@++....++#$&->>>-&$#@+.......++#$&=-->>&$#+.....+@$%=-;;;>>&$#@+..++@%&*==&&&==&&$@+...++@$&>>>>-%#++........++#$&=-->-%$@+....++#$*;;;;;==$@++...++@%&*==&*&-=$#++..", "..+@#%&==>>>&%#++.....++@$%==>--**$@+.....+@%&=---==>-%#@+..++#%=---->>>-=*$#++..+@#&*==-=====%$@+....+@#$*=->>>*&$@+...++@$%%%%$$$%%%%%#@+.+.+@@#$%&&%%%%$$@@....++#$&==>>>=&$#@+....++@#$&*>>>==*$#@+..+++#$*->-----=&%@+..++#%&*--====-**%#+....+@$&==>>-&$@+.......++@$&*>>>**$#++....+@%&*->----=$#++...++#%**--=====$#++..", ".++@$%*==>>>*&$#++...++##%*=->>-=&%#++...+@#&*=----=>-&$@+...@#%=->-->>>-=*%#+...+@#&*=---==-=&$@+...++@$&*->>>>**%#++..+@$%&***&&&*****%$#.++@#$%&***=****&$#+..++@$%*==>>>=*&%#@+..++@#$&*=>>>==*&$@+...+@$&*>>--->-=*&#@..+@$&*=-====--=*&$@...++#$&==>>-*$#+......++@#&*=>>>*&$@+....++@%*=->--=-=$#+....++#%*=--=====%#+...", ".+@#%**==>>>=*%#@+...+@#%&*--->-=*&$@+...+#$*==>>=-->>*%#++.++$%=->-->>>--&%#@..++#$*==>>--->-&$#++..+@#%*=->>>>=*&$@++.@#%*====**=*===**%$.+#$%&*========**&$@..+#$%**==>>>==**%$@..+#$%**==>>>==**%$@.++#$%**>>--->-==*%#.++#$*==->===>-==*%#...+@#%*==>>>*%#++.....+@#%&==>>>*&$@+....++#&*=->--=-=$#+....++#&*=->-=-==$@++..", "++#$=->;;;;;;>*%#++.++@%=>>;;;;;;>&%#@+.++#%=>>;;;;;;;*&#@+.++$&->>;;;;;;;*&#@+.++#%->>;;;;;;;*&#@+.++#$-->;;;;;;>*%#++.@%*;;;;;;;;;;;;;--%.@#%---;;;;;;;;;;*&#.+@#%=->;;;;;;;>--%#.+@#%=->;;;;;;;>--%#..@#%->>;;;;;;;>>-%$.+@$&=->;;;;;;;>>-%$..++@&*=;;;;;*%#+......+@&*=;;;;;*&#+.....++#&==;;;;;*&$@+....++#&==;;;;;*&$@+...", "++#%->>;;;;;;;*&$#+.++#%->>;;;;;;;*&$@+.++#&->>;;;;;;;=&$#+.+@#&>>>;;;;;;;*&$#+.+@#%->>;;;;;;;**$#+.++#%->>;;;;;;>*&$#+.#%*;;;;;;;;;;;;;>-*.@$&->>;;;;;;;;;;=&$.+@$&->>;;;;;;;>>-&%.+#$&>>>;;;;;;;>>-*$.+@$&->>;;;;;;;>>-*$.+#$&>>>;;;;;;;>>-*$...+@&*=;;;;;*&#@+.....+@%*=;;;;;*&#@+....++#&*=;;;;;=&$@+....++#&*=;;;;;=&$@+...", "+@#&=->---=-;;==*#+.+@$&=->---=-;;==*#+.+@$%-->-----;;==*#+.++#%=-----=-;;-=*#+..@$&=->-----;;-=*#+.+@#&=->-----;;==*#+.#$*-->>-;;;-----;;*.#**;;;>>===>>;;;=*$.+#%*;;;>>===>>;;;*&.+#**;;;>>===>>;;;*&.+#%*;;;>>===>>;;;=&.+#**;;;>>===>>;;;=&...++#$**=;;;*&#+......++#$**=;;;*&#@......+@#%**=;;;*&$@+.....+@#%&==;;;*&$@+...", "+@$&-->----=;;-=*$@..@#&-->----=;;-=*$@.+@$%=->--=-=;;-=*$@.+@$%==>----=;;-=*$@.+@#&-->--=-=;;-=*$@.+@$%-->--==-;;-=*$@.#%*-->--;;;--==-;;*.$&=;;;-=***--;;;=&$.+$%*;;;>>=-=>>;;;=*.@$&=;;;>>=-=>>;;;=*.+$%*;;;>>=-=>>;;;=&.@$&=;;;>>=-=>>;;;=&...++@$&*=;;;*&$++.....++@#&*=;;;*&$++.....++@$&*=;;;*&#++.....++#$%*=;;;*&#@....", "+@$&-->--=--;;-==$#.+@$&-->--=--;;-==$#.+@$&-->--=--;;-==$#.+@$&=----=--;;-==$#.+@$&-->--=--;;-==$#.+@$&-->-----;;-==$#.#%*->>->;;;---=-;;*.$*=;;;=**%&&*--=*%#.@$**;;;>>===>>;;;=*.@$*=;;;>>===>>;;;=&.@$**;;;>>===>>;;;=*.@$*=;;;>>===>>;;;=*....++@%&=;;;*&#@.......+@#$&=;;;*&#@.......++#%&=;;;*&$@.......++#%&=;;;*&$++...", "+@$&->>;;;;;;;-==$#.+@$*->>;;;;;;;-==$#.+@%&>>>;;;;;;;-==$#.+@$&->>;;;;;;;-==$#.+#$&->>;;;;;;;-==$#.+@$*->>;;;;;;;-==$#.$*=;;;;;;;;;;;;;;;*.$*=;;;=*&%%&*=-=&$#.@#*=;;;;;;;;;;;;;=&.@$*=;;;;;;;;;;;;;=&.@#*=;;;;;;;;;;;;;**.@$*=;;;;;;;;;;;;;=&.....+@$&*;;;**#@+.......+@$&*;;;*&$@+......++@$&*;;;*&$++.......+@$&*;;;*&$++...", "@#%*>>>;;;;;;;-==%#.@#%*>>>;;;;;;;-==%#.+#%*>>>;;;;;;;-==%#.+#%*>>>;;;;;;;-==%#.+#%*>>>;;;;;;;-==%#.@#%*>>>;;;;;;;-==%#.%*=;;;;;;;;;;;;;;;*.#*=;;;==&&%&&=*=*%#.@$*=;;;;;;;;;;;;;=&.@$*=;;;;;;;;;;;;;=*.@$*=;;;;;;;;;;;;;=*.@$&=;;;;;;;;;;;;;=&....++@%&=;;;*&$@+......++@%&=;;;=&$@+......++@%&=;;;*&$@++.....++#$&=;;;*&$@+...", "+$*=;;;-====;;-==$#.+$&=;;;-====;;-==%#.@#*=;;;-====;;-==%#.@#&=;;;-====;;-==%#.@$*=;;;-====;;-==%#.+$&=;;;-====;;-==$#.&>>>>>==;;;>>>>>>>*.#&*;;;--=**=*===**$.@$*=;;;;;>>>>>>>>=&.@$*=;;;;;>>>>>>>>=&.@$*=;;;;;>>>>>>>>**.@$*=;;;;;>>>>>>>>=&...++@#%&=;;;=*$#@+.....+@#%&=;;;**$#@+.....+@#%&=;;;=*%#++.....+@#%**;;;=*%#@+..", "@#&=;;;=--==;;-==%$.@$&=;;;=--==;;-==%#.@$&=;;;=--==;;-==&#.@#*=;;;=--==;;-==%#.@#&=;;;=--==;;-==&#.@#*=;;;=--==;;-==&$.&>>>>;==;;;>>>>>>>*.#%*>>>;;;>>>>;;;>=$.@$&=;;;;;>>>>>>>>=*.@$*=;;;;;>>>>>>>>=*.@$&=;;;;;>>>>>>>>=&.@$*=;;;;;>>>>>>>>=&...++#$&*=;;;=*&$#@+..+++#$&*=;;;=*&$#@+..+++#$&*=;;;=*&$#@+..+++#$&*=;;;=*&$#@+.", "@$*=;;;-====;;--=&$.@$*=;;;-====;;--=&$.+$*=;;;-====;;--=&$.@$*=;;;-====;;--=&$.@$*=;;;-====;;--=&$.@$*=;;;-====;;--=&$.&>>>>>==;;;>>>>>>>*.@$%>>>;;;;;;;;;;--$.@$&=;;;;;>>>>>>>>**.@#&=;;;;;>>>>>>>>*&.@#&=;;;;;>>>>>>>>=&.@#&=;;;;;>>>>>>>>=&.+++#$%**=;;;==*&$#@..++#$%**=;;;==*&$#@..++#$%**=;;;=**&$#+..++#$%*==;;;=**&$#+.", "@$&=;;;;;;;;;;;;>*%.+$&=;;;;;;;;;;;;>*%.@#&=;;;;;;;;;;;;>*%.@#&=;;;;;;;;;;;;>*%.@$&=;;;;;;;;;;;;>*%.@#&=;;;;;;;;;;;;>*%.&>>;;;;;;;;;;;;;;;*.+#$&*=->;;;>>>--*%$.+#%*;;;;;;;;;;;;;*&.@#%*;;;;;;;>;;;;;=&.@#%*>;;;;;;;;;;;;*&.+#%*;;;;;;;;;;;;;=&..+@#=-->>;;;>>--=$@.++@#=-->>;;;>>--=$@.++@#=-->>;;;;>--=$@.++@#==->>;;;;>--=$@.", "+#&=;;;;;;;;;;;;;*%.+#&=;;;;;;;;;;;;;*%.@#&=;;;;;;;;;;;;>*%.@#&=;;;;;;;;;;;;;*%.+#&=;;;;;;;;;;;;>*%.@#&=;;;;;;;;;;;;;*%.%->;;;;;;;;;;;;;;;&..+@#$*=>;;;>>-==%#@.+@$&>;;;;;;;;;;;;*&.+@$&>;;;;;;;;;;;;*&.+@#&->>;;;;;;;;;;*&.+@$&>;;;;;;;;;;;;*&.++#$=->>;;;;;>>-=$#..+#$=->>;;;;;;>-=$#..+#$=->>;;;;;;>-=$#..+#$=->>;;;;;>>-=$#.", "@#$&-->>>>>>>>>>-&$.@#$&-->>>>>>-->>-&$.+#$&-->>>>>>-->>-&$.+#$&-->>>>>>-->>-&$.@#$&-->>>>>>-->>-&$.+#$&-->>>>>>-->>-&$.%*=>>>>>-==>>>>>=&%...++#%==;;;>-*%$@++.+@#%&*=->>>>>>===&$.++#%&*=>>>>>>>==*&$.+@#$&*=->>>>>>==*%$.+@#$&*=->>>>>>==*%$..+@$==->>>>>>>--=%#.++@$==->>>>>>>--=%#.++@$==->>>>>>>--=%#.++@$===>>>>>>>--=%#.", "+@$%=-->>>>>-->>-&$.+@$%==->>>>>-->--&$.+@$%=-->>>>>-->--%$.+@$%=-->>>>>-->--&$.+@$%=-->>>>>-->--&$.+@$%=-->>>>>-->--%$.#&*->>>-===>>>--&%$...++#%*=;;;>-&$@++...+@#$&*=->>>>>=*&$#.++@#%&*->>>>>>=**$#...@#$%&=->>>>-=**$#..+@#$&*=-->>>>=**%#..+@$*==>>>>>>>-==$@..+@$*==>>>>>>>-==$@..+@$*==>>>>>>>-==$#..+@$*==>>>>>>>-==$#.", "++@%*==------=-==$#..@@$===-----==-==$#.+@@%*==-----==-==$#.+@@%*==-----==-==$#.++#$*==-----==-==$#.+@@%*==-----==-==$#.#$&==---***=---=%$@...+@#%->;;;==%#@+.....+@@$$==----=*&%#@...+@#$%=-----=*&%#+...++@$%==----=&&$#+...+@@$$==----=*&%#+.++@#&*=->-----==*#@.++@#&*=->-----==*#@.++@#&*=->-----==*#@.++@#&*=->-----==*#@.", ".+@#$$%&&&&&&&%%$#@..++##%%&&&&%&%%%$#@..++#$%%&&&&%&%%%$#@..++#$%%&&&&%&%%%$#@..++#$%%&&&&%&%%$$#@..++#$%%&&&&%%%%%$#@.+#$$%%%%%%$%%%%$#@@....+#%->;;;=&$@+.......++@#$$%&%&%$##++....++##$%%&&&%$$@@+...+++@#$%%&&%%$#@++....++@#$%%%&%%%#@@+...+@#$%%&&&&&%%$$#+...+@#$%%&&&&&%%$$#+...+@#$%%&&&&&&%$$@@...+@#$%%&&&&&&%$$@+.", "..++@##$#$$$#$##@++...+@@@##$#$#$###@++...++@@##$#$#$###@@+...++@@##$#$#$###@++..+++@@##$#$#$###@++...++@@#$#$#$$###@++.++@#$###@#######@+....++@#%&**&%$#++........++@@##$####@++......++@###$###@@++......+++@###$###@++......++@@###$##@@++....+++###$$$$$$##@++...+++###$$$#$$##@++...+++###$$$$$###@++...+++###$$$#$###@++.", "..+++++@@+@@@@+@++.....+++@+@@@+@+@+++....++++@+@@@+@@+@++....++++@+@@@+@+@+++....++++@+@@@+@@@+@+....+++++@@@@+@@+@+++..++++@@@+++@@@++++.....++##$%%$$@@+...........++@+@@@+++.+.......+++@@@@@++++........++++@@@++++..........++@@@@@+@+.+.....++++@+@@+@@+++......++++@+@@@@@++++.....+++@+@@@@@@++++.....++++@@@@@@@+@++..", "..++++@@+@++@+@+.+.........+.+.+.+............+.+......................+..+............++++@++.............+.+++++........................................................................+.......................++.+...............+++.+......................................+.+......+++@++++...............................", ".++@##########@@++........+++@+@++++.........+++++++..................++@++++.........++@##@@++............++@+@+@++++.................................................................++++++++.................+++@@@++..........++@+@@++...................................++++@+++...++@####@++..............................", "+@#$$%&&*&&%&&$$#@+....+++@###$###@+++.....++@@##@@++...............++@####@+........+@#$%&&$#@+.........++@#$#$###@+++................................................................+@####@+...............+++###$$@@.........++@#$##@@+................................+.+@###@@+...+#$%&&%$#@+.............................", "+#$&***==***=**%$#+.....+##$%%&%%%##++....++@#$%%$#@++.............++@$$%%$#@++.....+@#$&***&$#@+.......+@@$%%&&%%$$#@+......+.+..+.++.............+.++..............................++@#$$%$#@++..............@@$%%&%$@++......++#$%&&%$#++.........+.+.+..+.+............+@@$$%%$#@++.@$%*=**&$#++...............+.+.+.+.+....", "@$==;;;;;>;>;;--=$@..+++@$%--=-=-=&%#++....+$%&>>*&$@@...........+.@#$&*;;&%#++.....+@$*=;;;=*$@++......+@$*=>>>===**#+....+.++@+++++@+++..........+++@+++...........................++$%*>>*&$#++..........+++#$===>-%#++....+++#$*=>>>&$#++.....+.+++@++@+@++++.......+.++@%&*;;&%#++.#%*;;;;>&$@++...........+++++@+++@+++...", "#$=-;;;;;>;>;;>-=$#..++@$%&>>-----*%$++...++$&*>>=*&$@++.........++@$&*=;;*%$+....++@#&=-;;;-=&#@+....++@#%==>>>====*#@....+@@#########@+++......++@#$##@++..........+.+++++++++....++@$&*>>=*&$#++........+++@$%==->>%$@+....++@$%==;;>*%$@++....+@@#########@@+.......++@@$&*=;;*&%@+.#&*;;;;>*%#@+..........++@##########@@+.", "#%=-;;;;;;;;;;>>=%#..+#$%**>>>>>>-*&$@+...++$&*>;==*%$@+.........+@$%*==;;*&$++...++#$&=-;;;-=&$#++...++#$&==;;>-=-==$@..+++##%%%%%%%$$$@++......+@#%%%%$@@.........+++@@#@#@#@@@++.+@#%*=>;==*%$#@@+....++@@#$%&--->>&$#++..+@@$%*=-;;;=*%$@++.++@##$%%%$%%%%$#@@..++++@@#$%*==;;=&%#+.#&*;;;;;*&$#@@++....+++@#$%%%%$%%%%%##@.", "#%=->>>;;;;;;;==*%#.+@$%-->>>;;;;>*%#++...++#%*==;;>*%#@+.......+@#%*>;;-=*$#@....+@$**>;=-=;;*&$++....@$&*>;;;;;;=*&#@..++@&**->*&*>>**&@+....++@#**>>-&#@++......++@#$$$$%$$$$#@+.@#$%**==;>>*%%$@@++.++@#$$&*=>;;==*%$@+.++#$&*=;;>>->>&%#@+.+@#%*==>-***;;&%$@+.++##$$%&&>>;-==*&$#.@$&=--;;==**&%$#@++.+@@$$&&;;***>-==*$#.", "#$=-->>;;;;;;;==&%#.@#%*->>;;;;;>>*%#@+..++@#%&=-;;;**$$@+.....+@#%&*;;;-=*%#++...+@%*=>;=-=;;=*$@+..++@%*=>;;;;;;=**#+..++#*==>>=*=>>=*&#+.....+@$*=>>>&$#+.....++@#$%&&**&**&&%$@.#$&**==-;;;=*&&$#@+.@#$%&**==>;;==*&%$@.@#$&*==;;->>>>=&%$@.+#$&===>>*==;;**%#@.+#$%&&***;;;=-=**%$.@#%=--;;>>>>>=*&#@+.+#$%***;;=**>>===&%.", "@$*=;;;----=;;>>-&$.@$=->>;-->>>>>*&$@+...+@#&*>>;;;>>&$#@+...+@#%&>>>;;>>*%$@+..+@#%*=>>;;;>>*&%#+...+@$&*>>;;;>>=*%#@.++@#&*=>>;>>>>**%#+....+@#%=-;;;*%#++....+@#$%->>>>>>>>>=*#.$*=>>>=====>>--=$#+.@$*=>>>==*==>>>-=$#.@#==>>;=====>>>-=$#.@$==>>>===*=>>>-=%#.@#==>>>--===-->>>==.+#$==-;;>>>>>==*&#@.@#==>>>>-=*=>>>>>==.", "@$&=>;;--=--;;>>>&$.#$==;;;-->>>>>=&$#+.++@#%**>>;;;>>*&%#@.+++#$&*>>;;;>>**%#@..+@$**=>>;;;>>=*%$@..+@$%*=>>;;;>>=*&$@..+#$*==>>;;;>>=*%$@....+@$%=-;;;*%$++...++#$&*>>>>>>>>>>-=$.$=->>>==**=>;>>-&#@.#$==>>>==*=*>;>>-%$.#%==>>;=====>;>>-&#.#$==>>>==*==>;>>-%$.#$==>>;--=*=->>;>==.+#$==-;;>>>;>-==&$#.#$==>>;>>*=*>>;;>-=.", "@#&=;;;---=-;;>>>*%.#%=-;;;-->>>>>=*&$@..+#%&*=>>;;;>>=*&$#.++#%&*=>>;;;>>=*&$#.+@#%*==>>;;;>>=*&%#.++#%**=>>;;;>>=*&%#.+@#%*==>>;;;>>=**%#..++@#$&--;;;*&$#@++.+#%&*=>>;;;>>;>>==$.%=-;;>==**=>>>>-&$@.#%=->;>==**=>;>>-&$.#%=-;;;=====>;>>-&$.#%=-;;>==*==>;>>>&$.#%=->;>>==*=->;;>-=.+#$==-;;;;;;;;;;=*$.#%=-;;>>-=*=>>;>>-=.", "@#%*->>;;;;;;;;;;=&.#%==;;;;;>>>;;>>-%#.+@$&>;;;;>>>;;;;>&$.+@$&>;;;;>>>;;;;>&$.+@$&>;;;;>>>;;;;>&$.+@$&>;;;;>>>;;;;>&$.+@$&>;;;;>>>;;;;>&$..+@#%&*===-=**&%$@+.@$&>>;;;>>>;;;;;**$.%==;;;==***>;;;;*%#.#%==;;;==**=>;;;;*%.#%==;;;-=**=>>;;;*%.#%==;;;-=***>;;;;*%.@$*=;;;>>===->;;;=*.+#$==-;;;;;>;;;;==%.@$=-;;;>-=*=>>;;;==.", "+#%*>>>;;;;;;;;;;=&.#$=-;;;;;>>>;;>>-&$.+#$*;;;;;>>>;;;;>*%.+#$*;;;;;>>>;;;;;*%.+#%*;;;;;>>>;;;;>*%.+#$*;;;;;>>>;;;;>*%.+#%*;;;;;>>>;;;;>*%.+@$$**===-===***&$@.#$*;;;;;>>>;;;;;*&$.$=-;;;-=***>>;;;*%#.#$=-;;;-=***>>;;;*%.#$=-;;;-=***>>;;;*%.#$=-;;;-=***>;;;;*%.@$%*>>>;>===;;>>>*&.+#$==-;;=====;;;>>&.@$*=;;;>>===->;;;=*.", "+$%*>>>;;;;;;;;;;=*.#$==;;;;;>>>;;>>>&$.+$%*;;;;;>>>;;;;;*%.+$%*;;;;;>>>;;;;;*%.+$%*;;;;;>>>;;;;;*%.+$%*;;;;;>>>;;;;;*%.+#%*;;;;;>>>;;;;;*%.@#%&*=====-====**%#.$%*;;;;;>>>;;;;;=&$.$==;;;-=***>>;;;*%#.@$==;;;-=***>>;;;*%.@$==;;;-=***>>;;;*%.#$==;;;-=***>;;;;*%.+#$&->>;;===;;>>-&$.+#$==-;;=**==>;;>>&.@#%*>>>;>===;;>>>*%.", "@#*=;;;>>====-;;;=*.@$&*;;;>>===--;;;*%.@#*=;;;-==*===;;;=*.@$*=;;;===*===;;;=*.@$*=;;;===*===;;;=*.@$*=;;;-==*==-;;;=*.@$*=;;;-=*====;;;=*.@$=-;;;;;;;;;;;;;&%.$*=;;;=->>>;;;;;=*$.$&*;;;-=***--;;;*%#.@$&*;;;==*&*=-;;;*%.@$&*;;;==*&*=-;;;*%.@$&=;;;-=***=-;;;*%.+@#%*==;;=--;;==*%#.+#$==-;;==**=>->>>*.+#$&->>;;===;;>>-&$.", "@$*=;;;--=*===;;;=*.+$&=;;;>>=*==-;;>*%.@$*=;;;==***==;;;=*.@#*=;;;==***==;;;=*.@$*=;;;==***==;;;=*.@$*=;;;==***==;;;=*.@$*=;;;==***==;;;=*.@$=-;;;;;;;;;;;;;&$.#*=;;;-=>>>;;;;;=&$.$&=;;;-=*&*=-;;;*&#.@#&*;;;-=*&*=-;;;*&.@#&=>;;==*&*=-;;;*&.@#&*;;;-=&&*=-;;;*&..++#%*=;;---;;=*&#+.+#$==-;>===*=-->>>&.+@#%*==;;=--;;==*%#.", "@#*=;;;==****=;;;=*.@#&*;;;-=***--;;;*%.@#*=;;;=*****=;;;=*.@$*=;;;=**&**=;;;=*.@$*=;;;=*****=;;;=*.@#*=;;;=*****=;;;=*.@#*=;;;=**&**=;;;=*.+#%&**=======*=*&%#.$*=;;;>-;;;==;;;=*$.#%*;;;-=***=-;;;*%#.+$&*;;;-=*&*=-;;;*%.@#&*;;;==*&*=-;;;*&.@#&*;;;==*&*=-;;;*%..++@$%*>;;;;;>*&#@+.+#$==-;;---==;;;-=&..++#%*=;;---;;=*%#+.", "@$*=;;;=****==;;;=*.+#&*;;;--***=-;;;*&.@$*=;;;=**&**=;;;=&.@$*=;;;=*****=;;;=*.@$*=;;;=**&**=;;;=*.@$*=;;;=**&**=;;;=*.@$*=;;;=**&**=;;;=*.+@#$&&**====***%$#@.$*=;;;--;;;==;;;=*$.#%*;;;-=***--;;;*&$.+#%*;;;-=***==;;;*&.+#%*;;;-=***==;;;*&.+#%*;;;-=***==;;;*&....+#%*=-;;;-=&$@+..+#%==-;;;;;;;;;>=*$...+@$%*>;;;;;>*&$@+.", "@#*=;;;===**==;;;=*.@$&*;;;--***--;;;*&.@$*=;;;==***==;;;=*.@$&=;;;==***==;;;=*.@$&=;;;==***==;;;=*.@#*=;;;==***==;;;=&.@#*=;;;==***==;;;=*.++@##%**====*&$$#@+.#*=;;;>-;;;==;;;=*#.#%*;;;--*=*--;;;*&#.@#%*;;;-==*==-;;;*%.+#%*;;;===**=-;;;*&.@#%*;;;===**=-;;;*&...+@#&*=-;;;=*%#+...+#$=--;;;;;;;;>>*&#...++#$*=-;;;-=&$@+..", "@#&=;;;>>===->;;;**.@$*=;;;-==*==-;;;=&.@#&*;;;>>===>>;;;*&.+$&=;;;>>===>>;;;*&.@#&=;;;>>===>>;;;*%.@#&=;;;>>===>>;;;*&.@#&=;;;>>==*>>;;;*%..+++@$%=-;;;*%$@++..$**;;;;;-=->;;;;*%#.#%*>;;>>===>>;;;=&$.+#%*>;;>>===>>;;;=&.+#$*;;;>>===>>;;;=&.+#%*>;;>>===>>;;;=&..+@#$&*>>;;;=&$@+...+#%==-;;;;;;;>>>*%@....+#%&--;;;==%#@+..", "@#&*;;;>>===>>;;;*&.#%&=;;;-==*=--;;;=*.+#&=;;;>>===>>;;;*%.@#&*;;;>>===>>;;;*%.@#&*;;;>>===>>;;;*%.@#&*;;;>>===>>;;;*%.@#&*;;;>>===>>;;;*%....+@#%=-;;;*%#++...#*=;;;;;-==>>;;;*%#.@$&>;;>>===>>;;;=*%.+@$&>;;>>===>>;;;=*.+@$&>;;>>===>>;;;**.+@$&>;;>>===>>;;>=*..+@$&*=>>;;;*&$@+...@#%=--;;=====**%$#@..++#%&*>>;;;=&$@++..", "+#$*=->;;;;;;;>--*$.#&->;;;;;===;;;;;>-.+#$&-->;;;;;;;>--&$.+#$*=>>;;;;;;;>--&$.+#%&-->;;;;;;;>--&$.+#$&-->;;;;;;;>--&$.+#$*=->;;;;;;;>-=&$.....+#$==>>-&$@++...$&*;;;;;;;;;;>-=&$#.+#%*==;;;;;;;;;;>-%..@#%*==;;;;;;;;;;>-.++#%*==;;;;;;;;;;>-..+#%*==;;;;;;;;;;>-.+@#%->>;;;;;*&#+....@$&=--;;===**&%##++..+@$&*=>>;;;*&$@+...", "+@#&=--;;;;;;;--=&#.#%>>;;;;;===;;;;;>-.+@$%=--;;;;;;;--=%#.+@$%=--;;;;;;;--=%#.++$%=--;;;;;;;--=%$.+@$&=--;;;;;;;--=%$.+@#&=--;;;;;;;--=%$....++@$&=---%$@+....$&*;;;;;;;;;;--=%#@.+@$&==;;;;;;;;;;>-%..+@$**=;;;;;;;;;;>-..+@$&*=;;;;;;;;;;>-.++@$&*=;;;;;;;;;;>-.+@$&>>;;;;;;*%#@....#&*>;;;;>>>*%$#@++..+@#%->>;;;;;*&#+....", "++#$==-;;;;;;;-==$@.#%->;;;;;===;;;;;>-..+#$==-;;;;;;;-==$#..+@$==-;;;;;;;-==$#.++#$==-;;;;;;;-==$@..+@$==-;;;;;;;-==$@.++#$==-;;;;;;;-==$@.....++#&*===$#++....#&*;;;;;;;;;;-==$@+.+@#%&=;;;;;;;;;;>-%..++#%*=;;;;;;;;;;>-..++@%&*;;;;;;;;;;>-..++#%&*;;;;;;;;;;>-..@$&>>;;;;;;*%#+....#&*;;;;;>>-&$@++.....@$&>>;;;;;;*%#++...", ".++#$%&***=***&%$#@.@$%*******&******&%.+++#$%&***=***&%$#+..+@#$%&***=***&%$#+..++#$%&***=***&%$#@.++@#$%&***=***&%$#@..++#$%&***=***&%$#@......+@@$$$$#@+.....$==>>>==*=***&%$#@+..+@#$%****=**=**&%$..+++#$%****=**=**&%...++#$%****=**=**&%...++#$%****=*****&%.++$%->>>>>>-&$@+....@$&>>>>>>--%#++.....++#&->>>>>>-&$@+....", "..++##$%&&%&&%$#@@+.+#$$&&&&%$%$%&&&%$$...++##%%&&%&&%$#@@+...++##$%&&%&&%$##++...++##%%&&%&&%$#@@+...++##$%&&%&&%$#@@+...++##%%&%&&&%$$@++.......+@@##@+++.....#*=->>**&&&&%$$@@+....++##$%&&%&&%&%$$@...+++##$%&&%&&%&%$$...+++##%%&&%&&%&%$$....++#$$%&&&&&&&&$#.++#%--->---=$#@+....@#%-->->-==$#+......+@#$--->---=$#++....", "...++@@#######@@++..++@@######@######@@....++@@@#######@++.....++@@#######@@++....+++@@@######@@++.....++@@#######@@++...+.++@@#######@@+++.....+..+++++++......##%&&%%$$$###@+++......++@####$#$###@@+.....++@####$#$###@@.....++@@###$#$###@@.....++@####$#$####@..+@#$&&&&&%%#@+.....+@#%%&&&&%%#@++......+@#%%&&&&%%#@+.....", "...+.++++@+@++++.+...++++@++++++++@+@++.....+++++@+@++++.+.....+.++++@+@+++++........++++@@++++++.......+++++@+@++++.......+.+++@@+@+++++...........+++.........+@##$###@@++++++........++++@+@+@@@++++......++++@+@+@@@+++.......+++@+@+@@@+++........++++@+@+@+++...+@##$$$$##@++.....+@@#$$$$$##@++........+@#$$$$$##@++.....", "..............................+++@@@#@@+...........................................................................................................++@+++............+++@++++++++.........+...............++@@###@####@@+++...........................................................................+++++.....................", "...........................++++@#$$%%$$@......++++.++++.......................................................................+..................++@#@#@++.........++@@@#####@@++........+++++...........+@#$%%%$%$$%$%$#@+..........................+..+.+.+......................................+++@@@+++....................", "......+......+.........+++@@@@##$%&**&%$....+@+@++@@@@++++..........+.+++++.+...............................+++++..........++++++++..............+@#$$$#@+.........+@@$$$$%$%$#@+......++@@#@@+..........@#%&&********&&$#+............+.+.........++@++@+@+@++@+++................................+@###$##+....................", "....+++++..+++++.....++@@#$%&$$%==;;;>-%...++#$%###$$$$@+.......+..++@@@@@@@++......+.++.++..+............+@@@@@++.......++@@###@@+.............+@#%=-=%#@+.......++#$========*#@+.....+##%&&#++.........#%*;;;>>>>>>;;>&$@+.........+++@+++.....+@@###$#$#$##$##@@+.............................++@#&**=*$@........+++.........", "..++@@@@+++@@@@@+.+..@@#$$%**&&*==;;;>>&..+@#$&*%$%&&&%#@++...++@+@@@##$$$$##+++...+++@+@@@+@+@++++.....++@##$$##@++.....+@#$%&%$#@+............+@$&->-&$#+++......@#%--==--===$#++...++$$&=*%@@.+.......#&*;;;>>>>>;;;;*%#+.......++@####@++....@@$$&&%&&%&&%&%%$#@.......+@+++++++.............+@#%**===%$......+@@@@+++......", ".++@#$$$#@@#$$$#@+...#$%&**==**==-;;;>>&..+@$%*=&*&*=**$#++..@@##$#$$%&&&*&&$#@+.++@#$$$$##$#$###@+....++@#$&&&&$#@+++...@#%&***&%#@+........++@@#&*>>>*&$#@+++....@$&->-->---=$#++..++@%&*==&$@+++++....$*=;;;;;>>;;;;;*%#@.......+@#$%%$$@++...@$%***=**=******&%#....++@@#####@@++....++++.+.++#%&==--=&%....++@##$$#@+......", ".+@#%=*=$$#%-=&%$+++.&*-->>;;>-->>;;;>-&.+@%&*;;=-=>>>>&$@+..#$%%&&&&==>>>>>&%#+.+@$&&&&&&&&&&%%$$@+...++#%*;;;==%$#@+++.#$->;;;;&$@+........+@#$$*=;;;=*&%$#@++..+#%*;;>>;;--=%#++...+#%*=;;=*##@@@++++.$&=;;;>>>>>>;;;=&$+......++#$---=*#@+...#%;;;;;;;;;;;;;;-=#...++@$%%%&%%%#@@+...++@++.++@$*=;;;;;=*.....+#%***$#++.....", ".@#%*===&%%*--*&%@+..*=->>>;;>->>>;;;>-%.+#%*=;;--->>>>*$#@+.$&***=*=-->>>>>*&$@.@#%*==*=***=****%#@.++@#$&*;;;-=&%$$#@+.#$>>;;;;*%#@+.......@#$%*==;;;=***&%$@+..+$&*;;>>;;--=%$@+..+@#&*=;;=*%$#$###@+.$*=;;;>>>>>>;;;=&$@......+@#&->-==$@++..#%;;;;;;;;;;;;;;-=$..++@$&&**=**&%$#@+..#####++@#%==;;;;;=&.....+$*===&$#++....", ".#%==;;;*&*=;;=*%@+..**>>;;>>---;;---*&$.@$**=;;=-=>>>>=*$#+.%;;;;;;;;;;;;;;>-%$.@%&;;;;;;;;;;;;--%#.@#$%&*=>>>>-===*&#@.#$&=>>>>*&$@+.......#*=->>>;;;>>>>>=*$@.+@$**;;==>;--=&$#@+.+@$*=-;;=*&&****&#@.%*=;;;;;;;;;;;;*&%@......+@$&>>>=*$@+...@$%**===;;;====**%$.++@$*=;;;;;;-==$#++.$*=&%#@@$%->;;;==&$.....@%=-;;=*#++....", ".#%=-;;;=*==;;=*%@++.&=>;;;>>---;;--=*%#.#%*==;;-=->>>>==%$@.&;;;;;;;;;;;;;;>-%#.#%*;;;;;;;;;;;;>-%#.#$&*=*=>>>>-====*%#.@$&=>>>>=*%#++......$==>>>>;;;>>;>>==$#.@#&*=;;--;;---*&$#@.+#%===;;==**====*%#.%*=;;;;;;;;;;;;=*%#......+@$&>>>=*%@@...@#%%*===;;;==****%#.+@$%==;;;;;;--=&$#+.$==**$##$&->;;;=*&#....+@&=-;;=&#@+....", ".$&--;;;====;;=*%@++.&*>;;;>>-=-;;-==&%#.$&==-;;=-=>>>>==&%#.%;;;;;;;;;;;;;;>-%#.#&*;;;;;;;;;;;;>>%$.$&*====>>>>>--===&$.@$&*>>>>=*&$#+......%==>>>>;;;>>;;;==%#.#%*==;;==;;---**&$#.@$%==-;;-========&#.%==;;;;;;;;;;;;=*&$......+@%&>>>=*%@+...@#$%&**=;;;=*=**&%$.@$%*=-;;;;;;>--*&$@.%=-==%$$%&->;;;=*$#....+@&->;;=*#@+....", ".$&>;;;;--=-;;*%#@+..%*==;;=====;;>>>*$#.==;;;;;;;;;;;;;;=*&.%&*===;;;;;;===*%#@.$&=;;;--====;;;=*&#.*=;;;;;;;;;;;;;;;&$.@$&=;;;;>>-%#@+.....&--;;>>;;;>>;;;>-&$.$->>>;;>;;;;;;>>=**.@$*>;;;;;;;;;;;;;%$.&->;;;;;>>;;;;;;>=&.....++@$*>>>=*%@++..#$$%**==;;;=======$.#%==>>>>;;==;;;-=%#.%=-;;*%%%*--;;;*&$@...+@#*;;>-*$#++....", ".#%;;;;;----;;*%#++..$%==;;=**==;;>>-*%#.*=;;;;;;;;;;;;;;=*%.#$%&*=;;;;;;==*%$#+.$&=;;;-==**=;;;=*$#.==;;;;;;;;;;;;;;;*%.@$&=;;;;;>>&$@+.....&->;;>>;;;>>;;;>>&$.%->>>;;>>;;;;;;>==*.#%*;;;;;;;;;;;;;;%$.&->;;;;;>>;;;;;;>=&......+@%&>>>=*$@+...$%&**==-;;;=====-=%.$&-->;>>;;==;;;-=&$.%=-;;*&&&*--;;;*%#+...+@#*;;-=&$#++....", ".#$&*---;;;;--*$#++..#&=->>****=;;;;;=*$.$*==-;;-=->>>>=*&$#.@@$%&*--;;=**%$#@++.$&*;;;-=***=;;;=*%#.%&=-->>;;;==>>>;>*%.@$&=->;;;>>&$@+.....&->>>==;;;==;;;>-&$.&->>>;;>>;;;;>>>-==.$&=;;;=---;;-==*&%#.%--;;;;;>>>>>>>>-*%......+#$*>>>=*%@++..==->>>>;;;;>>>>>>-&.%*;;==;;--==->>;;*$.$&*;;==***;;>>>*$#+...+@%=;;=*&$#++....", ".@#%*==-;;;;--&$@+...$&=->>*&**=;;;;;=*%.$%==-;;=-=>>>>*&%#@.++@#%*->;>=*%$@@++..$&*;;;-=*%*=;;;=*$@.$%==->>;;;==>>>>>*$.@$*=->;;;>>&$@+.....&->>>==;;;==;;;>>&$.%->>>;;>>;;;;;>>-=*.$*=;;;=-==;;===&%#@.%=-;;;;;>>>>>>>>-&$......+#%*>>>=*$@+...==>>>>>;;;;>>>>>>-%.&*;;==;;-=*=->>;;*%.#&*;;-=**=;;>>-%$@+..++#&=;;=*&%##@++..", ".+@#%==-;;;;>=&$@++..$&-->>**&*=;;;;;==%.#$*==;;-=->>>>*&#@+..++#$*--;;*%$@++....$&*;;;-=&%&*;;;=*$#.@$*==->;;;==>>>>>&%.$%*=->;;>>>&#@+.....&->>>==;;;==;;;>-&$.$=>>>;;>>;;;;;>>==*.$*=>;;-=--;;=**$@@+.%=-;;;;;>>>>>>>>-%$......+#%*>>>=*%@++..===>>>>;;;;>>>>>-=%.&=;;--;;-=*==>-;;*%.@$&;;=====;;>-=%#+...+@$&=;;=**&%$##++.", ".++##%*=>;;;=*&$@++..$&>>>-****=;;>>>>-%.@$*==;;=-=>>>>&%#++...+#$*->>>*%#+++....#*=;;;==&%**;;;=*$@.@#%**>-;;;==;;;>-&$.$&>>;;;;==*%#@+.....&->;;;;;;;;;;;;>>&$.#%*==;;==;;>--**%%$.$--=====>>;>*&$@@+..$&*>;;;;;;;;;;;**$#.....++#%*;;;=*$@+...$%&&**==;;;==**&&%#.==;;==;;=***-->;;*&.@#%&*=*---;;=*%$@+...@#$=-;>=*>>**&$@++", "..+@#%*=>;;;==*%#@+..$&>>>-***==;;>>>>-$.@#**=;;-=->>>-&$@++..++#$*->>-&#@+......$&=;;;-=&%&*;;;=*$@.+@$&*->;;;==;;;>-&#.$&>>;;;;==*$#@++++..%->;;>;;;;>>;;;>-&$.#$*==;;--;;--=*%$#@.$--**=*=>>>>*%#@+...#&*>;;;;;;;;;;;=&$@......@#&*;;;=*$@+...###$%**=>;;=*&%$##@.=-;;==;;=*&*->>;;*&.+@#$%**->-;;*&$@++..+@$%=-;;=*>;==*&$@+", "..+@$&*=;;;;;;**&##+.$&>>--==--->>=**&%#.@#&==;;-=->>>>&$@+...+@#&*>;==%#++......$&*;;;-=*&*=;;;=*$@.+@$&*;;>>>=-;;;=*%#.$*;;;;;;=*&%$#@@@++.%==->==;;;==;;;-=%#.@$==-;;==;;-==%$#@+.@$$%&*==;;==%#@+....@%*>>;--==>-;;;*%$+.....+@$**;;;*&#@+...+@@#$%*=;;;*&%##@++.--;>>>;>*&**>>>;;*%.++@#$&=;;;-=*$#@+...@#%*>;--*=--;;;*&#@", ".+@#$*==;;;;;;==*%$@.$&->>-=*-->>>**%$#@.+#&*=;;=-=>>>-&$@+..++#$&*;;=*#@++......$&*;;;-=***=;;;=*$#.@$%*=;;>>>--;;;=*%@.%*>;;;;;==**%%%$##@.$*==-==;;;==;;;==$#.@$==-;;==;;--=%#@+..@@#$%&==;;=*$#++....@$&>>>--==>-;;;*&#+....++#$**;;;*&#@.....++@#%*=>;;**##+++..=-;;>>>>****>>>;;*%..+@#$*=;;;==%#@+....#$&*>;--===-;;;=*%#", ".@#$&*==;;;;;;===*%$.#%->--==->->-*%##++.+#&==;;=-=>>>-&$@+..@@$&*=;;*&#@+.......$&*;;;--====;;;=*$@.#%&*=;;>>>-=;;;=*$@.$&>;;;;;===****&%$#.#&*==*=;;;==;;>=*$@.#%=--;;==;;===$#+...+@##%*==;;=&$@+.....@#%->>-===>-;;;*$#+....+@$&*=;;;*%#++....++#$&*=;;;*%#+.+...=-;;>>;>=**=>>>;>&$.+@@$%*=;;;=*$#++....$&*=;;--==--;;;=*%#", ".#$&*;;;>>==;;;;;-=$.#$*=;;;;;;;==%#@++..+#&*=;;>>>;>>-&$@+..@$%-->>>&$@++.......$&=;;;;;;>>>;;;=*$@.$&>>>>>---;;;;>*%#+.$&==;;;;;;;;;>>--=$.@#$$%*=;;;==**&%$@+.$&;;;--==>;-=*$@++..++@$&*>>-=&$#++.....+@$%&*==>>;;>>>&$#+..++@$%*>>;;;*%#++...+++$%*->;;;*%#@+....&*;;;;====>>;;;=*%#.@#$&*;;>>>*%#@+.....*=>>;;;;;>;;;;;;>*%", ".$%*=;;;->**;;;;;>-%.@$&*;;;>;;;=*$#+++..+#**=;;>>>;>>-%$++..#%&->>>>$#++........#&=;;;;>;;>;;;;=*#@.&*>>>>>=--;;;>>&$@+.$&==;;;;;;;;;>>>>-%.+@@#$&=;;;=*&%$#@++.%*;;;-=**>;-=*$@+...+@#%&*>>=*%#+++.....+@@#$&==>>;;>>-%$@+..+@#%**>>;;>&$@+.....+@$&*>>;;;*%#+.....%*;;;;-===>>;;;*&$@.@$&*=;;>>-&##+......==>>;;;;;;;;;;;;;*$", ".&=;;===**&**=---==$.+#$&==>>-==*$#++....+#&*=;;>>>;--=%#@...$==>>>=*$@+.........#%*>;;==**==->-*&#+.>>>>>=****>>==*%#@+.#&>>=====-=>>>>>==$.+.+@@&*;;;*&%#@@++..%>---**&*>>==*#@++..+@$==---*%#@+........++@#$&*>;;;==*%#+..++@$=->;;=**$#++....++@$&=>;>>>*%#++....$%&*====;;>>=**%$#+.$*=;;--**%$#++......*=;;>>>>>>==->>;;*%", ".*=;;===%%$%&*==-=*$.+@#%*=>>===%#@++....+#%*=;;>>>;--=$#++..$*=>>>*&@+..........#%*>;>=*&&&*---*%#+.->>--&&&&*--**%$@+..#%->==*&===>>>>>=*$...++@%*;;;*&#@++.+..&>--=&%$&--=*&#@+...+@$=--==&#@++.........++@#%*>;;;=*&#@+..++#%-->;;*&%#@+.......@$&*>;>>>&$@+.....@#%&*=**;;>-*&%##++.$*=;;--*%$#++.......==;;>>>>>-==---;;*$", ".&*;;=*&##@##%===**#..+@#&*--=**#@++.....+@%*=;;>>>>-=*$@+...#*=>>-*%@+..........@$%>>>*&%$$%===&$@+.->-==%$$$$==&%$@++..#$--**%%**=-->--=*#.....+$*;;;&%#++.....%>===$$#$==*&%@+....+@#=====$@+............++@$%>>;;**%#++...+#%=->;>*%#@++......++$%*>>>>-%#++.....+@##&*&*;;-=&%#@++..$==;;==%##++........**;;>>>--=*&==-;;&$", ".$%%&%$#@@++@##$$$#@..++@#%%%%$##++......++#$&--=***&%$#++...#$%%&%$#+...........+@$%&%%##@##$%$#@++.$&%%%##@@##$##@+++..@#$$%####$%%&&&%$#@.....+#%=*=%#@++.....#%%%##@@#$$$#@++....++##$%$##+..............++#$&&**&$#@+...++#$===*&%#@++.......++@#$%*&&%$@+.......++@##$%&*&%$#+++...$*=**&%#@++.........$&&***&&&%%%%&&&%$#", ".@#$##@@++.+++@@#@++....++####@@++........+@#%==&%&&$#@++....+@#$##@@............+@@####@+++@@#@@++..##$##@+++@@@@@++....+@##@@+@@@#$$$$##@@.....+##&&*##++......@#$#@@++@@#@@++......++####@+................++#$$$$#@++.....+@#*==%$#@++..........+@#$$$$#@+++......++++@##$$$#@+++....#**&%$#@++..........##$%$$$$$##@##$$##@", ".++@@@+++....+++++++....+++++++++.........++@##$$$#@@++++....+++@@@++.............++@@@++++++++++++..@+@++++.++++++......++++++++++@+@@@@+++.....++@###@++.......+@@++++.+++++.+......++++++++.................++@@#@@++......++##$##@@++...........+++@@@@@++............++@@#@+++......@####@+++...........+@@#@@#@@++++@@@@@+"}; xscreensaver-5.36/hacks/images/matrix2b.xpm000644 000767 000024 00000073641 10046031372 020761 0ustar00jwzstaff000000 000000 /* XPM */ static char * matrix2b_xpm[] = { "160 182 48 1", " c None", ". c #000000", "+ c #061406", "@ c #0B2A0B", "# c #081E08", "$ c #030E03", "% c #165016", "& c #1B641B", "* c #0F390F", "= c #217A21", "- c #279027", "; c #34BB34", "> c #5AD25A", ", c #2BA02B", "' c #81DD81", ") c #E0F7E0", "! c #A7E7A7", "~ c #040E04", "{ c #0E350E", "] c #155015", "^ c #1B651B", "/ c #114011", "( c #0D320D", "_ c #227C22", ": c #45B245", "< c #7ADB7A", "[ c #80DC80", "} c #8BDF8B", "| c #52B552", "1 c #217B21", "2 c #0B280B", "3 c #1A5F1A", "4 c #4EB74E", "5 c #C6F0C6", "6 c #D5F4D5", "7 c #77D777", "8 c #D9F5D9", "9 c #83DB83", "0 c #DDF6DD", "a c #8EDE8E", "b c #268C26", "c c #248624", "d c #77D877", "e c #54C954", "f c #51B051", "g c #0A270A", "h c #0C2E0C", "i c #144C14", ".............+@@#$....$+#+++....$@%&&*#$..+@%&*#$....+##+.................##+......+%=&*$..$*&=%+......+#@#$...............................................#%%*$", "............+*=-&@+..+*%&%&*@+.+#=;>>,%+.+@=>'-%#+.+#%==*#.....+++++....+@%=%#....+*-)>=#..#=>)-*#....+*&-%#+....+$#......................................+%>'&+", ".$..$..$..$$@-!);%+.+@=>>;',%+.+*;!!)>=+$@&>))',%+.#%;''=@+.$.#%&&%@+.$.#%;',*+.$$@->!,&+..+&,)>-@+.$#*=')-%@+.$.#%%*+.$..$..$..$..$..$..$..$..$..$..$..$$@=')=#", "...........$*;!)'=#.+*;!!')>=+.@&>!!)';@#&>!))!>=+$@-'!!;%+..#%;'!>&+...@-')>%+..$%>!!-*+..+*-!!>%$.$*,>!)>;&+..+%>!=@...................................$*;!!=#", "..$..$.....+%>!)'=#.#%>!!')>=++*>!)))!>*@=!!!'!>=++*;'!!'=@.+*,'!''&#..+*>!!,*+..+%>!'&#....#&'!>&+.#%>!))!',#..#&'),*+.$..$..$..$..+++++$.$..$..$...$...#&'!>&+", "...$..$$...$*>!)'=#.+%>!'>);%+#&>!))))>*@=)!'>';&+$*,'!!!,%+$*;!!>>&@+..*;'>&#...#&');%#....+%,)'&#.+%>!)))'-#+@%-!);=*$.$..$..$..+@*%%%%%*$$..$...$....+%,''-*$", "........$..$*;!)'&+.$*-;,,>&@.+%>!)))!>*#&'!!!'>=#$@&>!!!>=$$*;!!';-%+.$@&=%@$...#='),*..$..$*,)'=#.+*->!)';&+#&>>!)'>,@..........#&>>>>>>,@.....$...$..*=!!;%+.", ".$.$........@=');%#..+@****@$.#&;!!')>-@+%->!))!;*.@&>))!;=+#%;!))>',@..$##+..$..#='),*+....$*,)'=#..@-!!');=$*-))))))'*.$..++$$..*-))))))'*.$..$$.....+%,)!,@$.", ".....$..$...#&')-*$...$$$$$$..@-!))))!>@#&>'''!)'*$@,>!))';@#='!)))!>@...+......$#=');%+...$$%,)'&#.$@->>,',%$#&;>!)'>,@...#*%*+.$#&;>>>>;-@..$@*%@+.$.@=!!>%+..", "............+%,;=@............@='!)!!>=#@=!)!!)!>*$#&-'!'!>@@=)!!!)';*......$....+&>!>&#$...#&>)>&#..#*%&%&%#$$#%-!);=*+..+*,>-*$.$#%%%%%%*+..#&;>&+..#%,)>-@...", ".$...$.$.$..+*;>&#.$..........#&>!)!!-*+@=!!)!)',#.+@&>!'!>@@=!!!!)'>*.$.....$...$*;!!-@$..$*-!'>%$...$##$++$...@&')-*+.$.#='!;%$...$.$.++..$+@-'!=@..@->),%#.$.", "..$.........$*>'%#...$..$..$..+%>!))'=@.+*,>!)'=*$..$*,''>-#+%>'!'''>*..$.$......$@->!;&+..+&;!>-@+.............+%>'=@...$*;!!;*+............$@-''&#+.*;!!=@....", "........$.$..#*%@+............#*;!!!'&+..$@&>!=*$...$#*%%%*+$#%&====%+......$.$...+*-)>=+..#&>)-*+..$........$...#*%@+$..+*>'>&#$.$.$.$...$...+@%%@+$.*,>;%+....", "$..$.$........++$.$.$.$.$..$..$#%===&@#....#%&*#......$#++$...++####+.$.$..........#%=&*#..+*&=%#.....$.$..$..$...++$....$@=,&@$...............$+#$...#&=&@$$...", "..+@**@#+.$.+@**#.....#**%*#+...#@*%*#$....+@*@#+.$+@*%%*@+....+#***#$$@*%%%%@#$.$$@***#$...+#***++......$.....$.$.....$..............$...$.$.......$...++##++..", ".#*=;>,&@$$*&-;>%#..$#%,>>;&*+.#%->>;&*#..+*=;;%+.+*=>>>>,*+..#*=;>;&+@=;>>>>;%$.#%=;>,&*+.+*&>;,&*$$.$....$........$..........$.$.$...$......$.$......#*&==%@+.", "$*,'!)!;&+#&'!!!-@$.#%>!!)!>-##%>!!)!>-#..@='!!=@$#=>)))!'&+.#*,!!!!-#*>!))!!!=+#%>'!)!>-#$@='!!!'&+.........$.$.$.....$.$.$+#*@#$..........+@*@#+..$.+*-'!!>=@$", "#&'!)!)';@#&!))),*$.#=!!)))!>*#&'!)))!>*.$*;!))-*$@-')))!'&$$@=>))!!=#*>!)!)))-+#=!!)))!>*#%,)))))-@...#@@#+......#*@#.....@*&-,&#.+@@@@@@@.@&,-&*#$..#&;)))!>&+", "@-)!>;')'*+*=,!)-*+.#&''>;')'*#%>>;>!)'*.#&'!!),*$@,')''>,&+#%,)!'>,%+#%=-,'!!=+@=)!'>')'*@=>)>>!);*$.#&-,%#.....#&-,%#..+*&,>!);@+*=,,,--&+*>)!>,&@+.#=>)>'!)-#", "*-)!;,>)'*.+*-'),*$.$@&=-;!)'*.@%=,>)!>*+*,!!'),*$*->)))!'=+@->)!!';%+.#@*='!>&+@=!!'>!!>*@,');;!);*.+@,!)=*$.$.+*,!)=*.@%=>))!;&##=!!!!!!'@#&,!)!>=%+#&;>;>!)-@", "*-)!;->)'*$.#='),*+..+@&,>)';@.+@-'!)';*#&'!'');%+#&;!'!))-@@,'))))!=@.$+*-!'-*$@=>!)!)';*@=>)>>!);*.+@-'!=@$....*,!!=@.*;'!!';&@+*-!)))))>*.@&;'!!!;@+@&,>!!!=+", "*-)!;->)'*..#='),*...$*-')',%#.+*&>'!!>**-))!!)>,##*=,,;!);@@,')''!);*..+%>!'&#.@=!!!'!)>*#%,!!)));*..#%--%#..$..#%--%+.&'))'>=*#.*,!!!!!!>*.$@=;!))>*.$*-)!>,%+", "*-)!;->)'*$.@='),%+$$@=>!)>=@$+*==-;!)'**-)))!)!;@#%-=&,!);*@,')>>!);*..#='!>%+.@-)!'>!)'*$@='!!));@..+@*%@+.....+@*%@+.%>!!!',&@+*,!!!!!!>*+@%,'!!!>*.$*-)',%#.", "@=)!>;>)'*.@%-!);=*$#%;!)';=*+#&>>,;')'*@-!))))!>@*,>;-;!);*@->)>>!);@$$*=!!>*+.@-)!'>')'*$#&;>'!)-@$.+*==*+..$..#%=&*+.@%->))';&#@-!)!!!!>*#&,'))>-%+.$@=!>&@..", "#&>!!!)',@#%;'!)!>-#*=)))!!>-#*-)!!!)!>@#%,>!!)!>**,!)'!))-##%,))!)),@..*-)'-@$.@=!!!!)!>@$%-'!!!!=#.$@-')=#....+*,!)=#..+*=,'!);@#%--,,,-=#*>)!>;=*#..+@=!>%+..", "$*=>'!'-%+#&'!))!';@*-!)))!';@#&>!)!!,&#.#%,'!)!>@@&;!!!',%+.@&>!!!>=+.$@=!>&#..+*-'!!!,&+#&;!!'>-%+.$@-!!=@+...#&'!'=@....@%=-,&#.#@****@#$@=,-=%@+....#='>*+..", ".$*=>>;%#.+*;>''>>=+#=>'>'>>=++*=>>>>&@$.$#&;>>>=+$@&>>>,%#..$*=>>>=*+..#%;-*$$..#%,>>>&@$+*->>>=*#..$#&>>%#.$..@-'';*+$....+@*@@.....$$$...$*%*@+..$...+%,=@...", "..$#*%*+$$.#*%%%%%@$+@*%&%%*@$.+@*%%*@$..$$#*%%*@$.+#*%**#.$..$@*%*#+$.$$#*@+.....+@%%*#$..+@%%*@+.$..++**#$...+#&,-%#...$....$+.............$$$........$#@@+$..", "...+++$.....+###+....+#@###$.....+####+.+##@##+....+#@#@##+.$+##@#@#+....+###+++$####+###+..###@@#+...$#@#@##..##@+####..+####$..$.+++.++##+.+#+$+##++...++#+...", "$+#%&&%#..$#%==&*$$.#%==-=&*#..+@%===&%+*&=-==%@$.#%==-==&*$#%=-=-==%+.+@%===&%+#%==&%&=&@+@%==-=&*+.$@%====%+#%==&%==%+#%===&*+..#%&%*@*&&@#%&%**&=%+.+@%==%@+.", ".@&;''>%#.+*;'!'=*$$*;'!!!>-*++*=;'!'>;@=>!!!';=*+*;'!!!!'=+*;'!!!!'>@+*=;'!'>;@%;''>;'!>%#%>'!!!>-+.#%>!!!!;@*;!!>;!';@*,!!!>&#..%;!>=&-''%*;'>=,>';@+*=;'';=*$", "+%;'))'-*$+%>!))>&#.%>))))!!=#*,>!!!!!'%,!))!)!!=@%>)))))),@%>))))))!%*,>!)!)!'%%>))'>))!=#%>!!)!',@.#&'!)))'*&>))'>))'*%>!))'=#.$&>)!>,')!=&')!;>!)>**,>!)!!!=@", "#=!!'');=++*;!))!=@.%>!)''!);@&')!>>'!!%-!)!>'!)>**>!)''!);*%>!)''!!!%&')!>>!!!%%;)!'>!)!%+*->!)';&+.+*,>!!!,@%;)!!!)'-#*->)';%+..&>))'>))!&='))>'!)>*&')!'>!)>*", "*-)!!))',#$*-'))!,%$*,')>'!);*=')>-=,''*=')'--')'%*,')>>!!,@*,')>>'''*=')>-->''**,)!'>!)'%.+*-!),&@+..#*-'!>=+*,)!!)!-%++%,)>=@+..&;))!>))!%&'))!'!);*=')>--')'%", "*-)))))',@$*,!!')>=+*,')!)));*=!);&@*%%#&')>=&>!!%*,')'!!;&+*,')'!'-&#=!);=-;>,**-))!!))'*..#='),*$.++#@='!>&$*-))));=@.$*,);&#+..%;))!'))!%&')!)!!);*=!),&&>!!%", "*-)))))';@#&>!!>)';@*,')))))>%=!),%##@#+&')>&&>'!%*,')))!-%+*,')))'=@$=!);=>!!>**-))))))'%..#='),*$.@%&%='!>&$*-))))>=@$$*,);=**@$%;))))!)!%&')')!!);*=!),%&>'!%", "*-)!!))!>@*-!))))!>*@,')'>'!!%=!);&*%&%#&')>==>'!%*,')'!!>,@*,')'!'&+.=!)>-'))'%*,)!'>')'*..#='),%+.&>!--'!>%$*,)!!!);&+$*,)>-,>&+%;)!!)>)!%&')'!!));*=!);==>!!%", "*-)!!')',@%;)!''!)!%*;')>;'!!%&')'-=>''*=')',,')>**;')>''''%*;')>>,*$$&')';>'!!%%,)!>;')'%$#%-!);=@+=!)>;!!>%$*,)!'>)';*#&;)>;');@%;)!>;>)!&&')'>!));*&')',,!)>%", "#&'!!'!>=#&>))''!)!=%>!)''!!'%%>!!''!!'*-!)!''!);@&>!)''!!!%%>!)'>-@..%>!!''!!'*%>)!'>!)!&+*;'!)'>=+&')''!',*$&>)!'>!!'&*;')''!);@&>)!;,>)!&=')!;'));*%>!!''!!;*", "+%;')));&+%>!!'>!!'&%>!!!!!!-@@&,'!!!'-@-'!!!!''&+&>!!!!!!'*%>!!!>=#$.@&,'!!!'-@%>!!';!!'&+%>!!!!'-#*,'!!!;%#.%>!!>,;!'&*>!!!!!!-#%>!';-'!'&%>!!,;'!-@@&,'!!'>&+", ".#%=;>,&*$*=,-=&-,-*@&,,,,-=*++@*&-,=&*+*=,,;,=%@$@=,;;;,-=#@=,;,=*+$.+@*=,,-&*+*=,-=&-,-*$*&-;;;-%+#*=,;-%#$.*=,,=*&==*@=,;;,;-%+*=,-&%=-=*@=,-%%=-%++#*&--=%@$", "..+@***#$.$@**@@@*@+$#***@@@+...+#@*@#+.+@***@#+$.$#@****@#$.#***#+.....+#@@@#$.+#**@@@@@+.+#@***@#..+#@*@#...+#@*@++@@$$#*****@+.+@@@###@@++#@@#+@@+$..+#@@#+..", ".+#+##++.....++++$...+#+#++...$.+++#+++..$#+###++..+#+$++#+..+++$$++++.++++$+#+$.+##++++#+.++#++++++..++###++...+@**#$..+@*@+.......+@**@$...$.+@@#+............", "@%&===&%#$.#*%&=%*+.@%&===%*+..#*&&=&&*+#*&=====%+#%&&%%&&%+@%&&%*%&&#@%&&%*%&&#@%&&&%&&&#@%&&&%&&&#+@%&====%+.$@-;>&@+.@->=*+..$..+@=;;-@+...+*-,%#...$....$...", "%>!!!!'>&++%-'!!',*+%>!!!!'=*++%-'!!!'=#@='!!!!!>*%>!!,>'!>*%>!';='!'&%>!';-'!'&%>!!>;!!'&%>!!>;!!'&#&''!!!!>*.#%>!!,%+.*;''=#.....#%;!!>%+$.$@='!,%+....$....$.", "&'))))!!;**->!))!'-@&'))))!>-@*->)))));@*;))))))'%='))>'))!*&!)!>,!)!=&'))'>!)!=&'))!>))!=&'))!>))!=@=!)))))!%$#=')!,*+.@,>!-%+..$.+%;))'=+..+*;!)>&#$.$........", "%;')'>!)!%&')!>>!)>*&;)!''!)>*%>!)''!);@%;)!!)')!%=')',,!)>*&>)!;->)!&&>)!'!')!&%;)!'>!)'%%;)!'>!)'%@=!!''!)'%.#=');&#+.+%,)'=@+...+@&;)'=#$.#&'!)!-*$..$.$.$...", "*,')>,>!!%=!)>--')!%*,)!>>')'*%>)!>>'!,@*,)!!)>)!%&')>=-');**,)!;->)'%&;)!!)')!%@=>!)!)',*@=>!!')',@#&''>')',@.#='),%+...@='!>&+....$%,)'=#.$@-!!>),%$..........", "*,')>;'!!%=!);&&>!!%*-)!'')!>**;')!!''=#@=>>!)>',*&')>==');**=!!>,')>*%;)!!)))!%$*-'))!;&#+*-')!);&++*-;'!);&+.#='),*$...+%;)!-@$....*,)'=#.+@->>;',%$....$.$...", "*,')!!))>*=!);==>!!%*-)))))>-@*=;'!))!-@+@&-!);=*+&')>==');*#&>!'>)';@%;))!!))!%$@=>))!,%+.+%;!)>=@..#&;!)'-%+.#='),*..$..*=!!>*+.$.$*,)'=#..#*&&%=%@+.$....$...", "*,')!!!!-@=')'>>!)'%*,))!!)>-@%,>>'!)),@.+*=!);&#.&')>--!);*+*;!!>)>=+*;))!'))!%#%,'!!!>=#.+*-!);&+.+@=>!)>>,@.+='),*+....$%,!'=*$..+*,)'=#...+####+$.+#*@*@**@+", "%>!)'';=*+%>!)!!));*%;)!'>)!>*=')'''!);*.+%,!)>=@.%>)!>>!);@.@='!!)-%$*-))!'))'%*,!)!>)!>%.$%,!)>=@.#&>!)!')'%.#=');&#..$.$#&'!>&+..#&;)'=+$.$........*=,,,,,,=@", "%>))!'-*#.@->)))!'>*%>))';!)!%=!)!!!)),@$#=>!)'-%$*,')!!))-@.#%>))!-@$*-))!>))'*&>))!>))!=+#=>))'-%+#=!))!!)!%.#=')'-*+....+*;!!=#$$*-')'=+....$....$.=>'!''!!>*", "%>)!!'=@..@=>)))))>*%>))>-;)'=&>!!))!>=#.#=>))!,%$#%,!))!>&+.$@,!)>&#.#&''>,'';@%>))'>))'=$@-'))),%$#&'!))))>%.+&')!;%+.....@='),@.#&;!)'&#......$....,!))))))!%", "*&---=*+$.+&;!!!!!;@@&--&%&==@*&=-,--&*+.+*=-,-&#$$#%=-,=&@+..#%==&@$.+*&=&%&=%+*&--===-=*.+*=-,-%@$+*&-,,,-=#.+%>!!;&#$....+%>'=#.#%;!)>%+$........$.=>''''''>*", "+#@@@@$...+@%-=-,-%++#@@#++@@$$#@*@@@++...$#@@@#$...+@@@@#...$.+@@+$...$+#+###+$+#@@@@@*@+.$$@@@@#$..+#@***@#+..#%==%@+...$..@&=*+.$@%=-&@+..$.$.$....@*&&&&&&%#", "...+++$........$....$@*@+.............$.$..$$@@@+...$..........+#@**@+..........+@*@+........#@@#.......##@+..+@*@+......++@*@#.....................$...$.......", "$.+@%&*+.$.$.$..$...*=-=*#......$.$.$......+*=-=*+.......$.$.$+*&-,,=#.$..$.....*=-=*#......#%=-%#.$...#%--%#$*=-=*+....+#%=,-%#.$...............$........$.....", "..#&>'=@$....$$$.$.$%')!-@+.$.....$$+......#=')!=+..$+.+$....$@='!))'*....++++..%')!=@+.$.$$@,!)=@$..$$*=)!,@$%')!=@+$...#-!))-@$..+.++.+.$.$++$$+..$....$.+.$..", "..@-!);%+..+@*%%@+..%;)!;&*@+.$+@*%%%*#+$+@%=>))-#..#*%%*@+..#%;!)'>;@.+@*%%%%@+%;)!;&*#$..+*;!)-*...$#&,)!;*.%;')-&**+..+%;!)-*+.@*%%%%%*+.$@*****#$.$+@*%%*#+.", "..#='!'&#.$*=;>>-%#.*,)!'>;=%+#*=;>>>;%+#*=;>'))-@+@&,>>>=%++*;'))!',@#*=;>>>>-@*,)!!>;&*+.#&>!!-*$..@&;!!!;*+*;');;;,*+..@-!),*..&,'>>>',%$*-';;';&*+#*=;>>,&*$", "$.$*=>'&#$#&'!))!-*$*-))))!';@*;'!)))!,@*;'!))))-@#&'!)))!;@#&'!)))!;@*;'!))))'**-))))!>-#+@-'))-*+.+*,')))'&$@,')!!!!&+$.#='),*+.,!!))))!;@&')!!)!>-@*;'!))!'&+", "...+@%;%+.#='))))>&+*-)))!))'*&'))!!));*&'))!)))-@*,!)!!))'*#%'!))!',@&>))!)))'**-)))!)!>*.@=')),*..$*-'!!)'&+*,')!!!'%$..#='),*+.,!)))))!>*&')))!)!>*&>))!!)!,@", "$...$#@#..#='!!!)',#*-))';')!%=!)>,;'!,@=!)>;'))-@%;)!!'!)!%.@=>!!;=*+=!)>;'));**-))'>')!*.+*-!),*+..#*&->!'=+*,'))!>=*+..#='),*..=')!!!!!>*%-))';')'*=!)>;>!);*", "..$.....$.*-)))))',@*-)!>,>)!%=!);==,>=#=!)>,>!)-@%;))))))!%.#&>!!-%#.=!)>;>!)-@*-)!;,')'*.+@='),%+...$#*,!'=+*,'))!;&#$..#='),%+.=')'!!!!>**,)!;,')'*=!);-,!);*", "....$.....*;)!'')';@*,))';')!%=!)',-;>,@=!)';')),*%;))!'!!'%.@&>!!,&@+%>!)))))-@*,)!;,>)'%.#%-!);=@+..$#*-!'&+*;')!!'-%$$+%-!);=@$=')'!!!!>%%,)!;,')'%=!)',>!);@", "........$.*;)!'')!>*%>))!'!)'%&')!''!'>*&')!'!))>**,))!!!!'*+%>!!!'>=+@=;''!!)-@%>)!'>')!&+%;'!)'>=+.+@%=;!'&+%>!)'!!',@$*;'!)'>=+-!)!!!!)'%%;)!'>!)!&&')!'!))-#", "$.$..$....@-!!!!!!>*%>!!!!!',@*,'!!!!!>@*,'!!!!!>*#&>'!!!!>*#%'!!!!',#+%,'!!!!=$%>!!';!!'&#%>!!!!',+$@->'!)>%+%>!';'!!>*+%>!!!!',#,'!!'!'!'&%>!!>;!!'&*,'!!!'>&+", "........$.#*-;;;;;=#@=;;;;;&*+#*=,;;;-%+#*=,;;;;=#+@%-;;;-&#+*-;>>;-%+#&;)))'-%+@=;;-=;;-*$*=,;;;-%+$*;!))!-*$@-;-&-;;=#+*-,;;;-%+%,;,,;,;,**=;;,=;;,*#*=,;;-%@$", "..$..$.....+@*****@$+@*****#$..+#****@#$.+#*****@$..#@****#+.#@*%%**#.+*->'',%#.#@%*@@***+.#@****@#$$@=>'';%+$$@**@***@$.$@*%***#.#********++@******@+.+#***@+$.", "........$.....$.$...........$..........$.$+$......................................................................+++$.....+++$$....+++$..............$.........", "$.$..$.............$...$.......$.........$#*@+....$......$...$..$...$.........$..........$.......................#*&&*+$...#&=*$...+*&&*#................$......", "..+..+..$.$....+........++..$....$.$....+@=,-*+$....$.$........+......$.$.$.....$.$+.$+....$.+.$.$.$.$+.+.$.$.$.+%-;;%+...+*,>&@$..+%,;-%#$.$.$.$.$...$.....$.$.", "+@*%%**@$..+@*%%**@$$+@**@**@+..+@*%**#$+%;!!=%@+.+@*@##@*#++@**@@*%*+$@**@#***+.#**@@**@$+@**@#**@+$#*%%%%@+...@=!!;*+...#&')-*+..$*;!!=@...............$......", "*-;;;;,=%+#%=,;;;;-@+*-,,,;,=@$#%-;;,,=+@='!!>,&*$*-,-&&,,=#*-;;,-;;,**-;,=&-;,*#&,;,-;;-@*-;,=&-;,*#=,;;;,-%+.+*-)'=@+...#='),*....@=')-*+...++#++++.$...$.$...", "&!)))))'-@*,>)))))'*#&!)!!))>*$*-!)))!>@*,)))));%$&')!,-)!'*&'))!'))!=&'))';!)!=*-))!>))!*&!))>,!)!=*>!))))!&+.$%,)'=#..$.#='),*+$..#=!),%..+@%&&&&&%+..........", "%>)))!))'*&!!)!!))>*#&>!))!!>*#&')!!))'**-!)!!'-*$%>)!;,!)'*%>))'>!)!&&!)!!!')!&@=')!')!>*%>))!;!)!&%>)!!)!>&+.#&>)'=#....#='),*$...#=')>&#.#&''!'>'>*$.$..$....", "%,))';')!%=!)'>!)),*$*-!!';,=@+&'!))!';@#='!!,=%#.*,)!;-')'**-'!!>)!>*%,)!!)!)!%+%,'!)!;=+*-')!>)!>**,''))'-*+.#=!)'=#$...#='),*..$.#=')!=#.*-))))!)>*.......$..", "*-))'>')'%=!)'>'))-@.@=!!>=%@+#&>!))!'>*#&>!'-&%@+*-)!;,>)'%#%>!'>)>-@*-))))!)'*$@=>))!,%$+%;!!')>=#@=>!)!>-*+.+&>)'=+..$.#=')-*+...#=')>&#.@-!'!!!';@...$.$....", "*-)))!)!>*%>!)!)))-@+%,!!>,&@$#&'!!!))'*+%>!!>>;=#*-)!'>!)'%$*='!!),%$@-!))!))>*+%;!!!!>=#.+='))!,%$*,')!'''&+.$*,)!=#....#='),*+...#='),*+.#*----,=%+$.....$...", "*,))!!';=+@&;'!!)),@#&>!)''-%$@=))!!!)'%$*,!!!)!;@@=!)!'))!&.#%>))!=@.#&>!!>)';@@=')!')!>*+#&>))>&@$%>!)!!))=+.$*,)'=@....#&')-*+..+@=')-*+..+@@@@@@+........$..", "%;)!',=%@$$@%=,'!),*@=))))),%$#='!!))';*$#&>!)!>=++%-'))!)!=.$@=');%+.$*;'';!;=+@=))'>))'*#&'!))-*$.*>!))))!=+.$#-)!-*+.$.+%>!=#+..$*-!)-@$....$.+....$.$.$.....", "%'))!>%#....#&>!))'*+%=,,--%@.+*==---=%+.$#%=-=&*+.#*=----=@..+*==%#+.$#*&&%&%@+#%=-==--=##=!!!!=@+.#%-,,,-=*+.$#%>>>&+...$@&=*+...+&>';&#.$.................$..", "*->>;=@$....$@=;>>-@$#@***@#$..+#@@**#+..$$+@@@+$...+#@***@+...+#@+$....$#++#+$.$+@*@@@*#$$*=--=@$..$#@***@#+...$@%&%@+....$##+..$.+@%&%@$...$......$...........", ".......$.$..............#@#+.....+++#$...........$.+#++$##+.$...$+..$...$#@**@+$.............+++$.......++$..........$.$......$..........$....+++++...$.$.+.$.$.", ".~{]&^/~...............+%=&*+$..#*&&%*+$..+.....+.$*&=%%&&%+..++**@$..$$@&-,,-&+...++##+$$.+#*%%*@+...+@%%*#+.$..........$.................$.+#*&&*#+...+@**@+..", "(_:<[}|12$.$.$.$.$.$.$#%-)'=*$.#*->>>=*+.#@@@@@@#$@=''>,>>,*..+*,'&@..$#&>!))!>@$+@%&%&%@.+*&,>>,&@+.+@=;>,%#...$..$.......$..$.$.$.$.......+*=;'>,=*+.#*-,,=%#.", "345)))643....$+++....+*=>)!;=++@=!)));&+#*,-==-,=#*,))!>))'%..#&')-*+.+%;!)!!)'*.+%->=>>*$@&>!))!'&#.#%>!!)-@....++++++$.+##@@@#$......$.$..@&>!))!'&+.#&!))!-@.", "_78)))87_...+#%%*+..+*->!))';@$%;!!'',%$#=!!!!!';@@-!)!>)!>*..#='),*..@=>!)!''>@.+*=,=,-*.*,!))))!,@.@='!!)-*+..@%%%%%*++*&=====%+..$.+$$$..*,!))))!,@.#&>''>=@$", "_90))))a_$..+*;'=#..$%>)!'!';@#&>!';-%@.*=!))!))>*+&;!!')>-@$.#=')-*$.*,))))!>;@..#***%*#.&')))))!'*+*;!!!);%$+@&>!>>!;@@=!!!!!!'*.+@*%%%*@+&'!))))!!*.+@&--&*+.", "ba)))))ab...#%;>,*..+&')'>>>-#@='!!>-*+.*-))!'))>*$*-')!);&+..+&'!-*$.*;))!))'>*...++$+$..=!))!!!!!%$*;!!!);&+@=;!!!!)>*@-!!))))!%+*-;'>>>-@=!!)))!!!%..+#@@++..", "ca)))))ac$..#&>',*+.+%')'>>;=#@-!)))>%#.*-)!'>!)'*$@='))!;&+..+&>!-*..*-!))!))!%$.......$.=!))!!!!!%+*,!)))'=+%>!)'!)!-@#%,>>>')!%+%>!))!!>#=!!)))!!!%.....+....", "ca)))))ac$..#='!>%+.+%>!)'!'-#@='!)';&@$@-))!'))>*$@-'))!;&+..+&')-*..#&;!))!)!%..........&>))))))>*$*,!)))>=+%')!!)!>=#.#*%%&,)!%+*,>>>>>-#&>)))!))>*..........", "ca))))8dc..$*-!!>&+..*=>)))'=+@=')!>>;-@@=!))))!>*$@->!)';&+$.+=')-*$.#%,>'!))!*..$.$.$...*-!))))!-@$@=>''>-%$*>')'!))-@..$$+@&>;*.+*%&&&&*+*-!))))!-@$.$.$..$..", "_90)))87_$.+*-))'&#..+*=;)!,%+*,))))))'*+&;>;;;>-#$*-!)))>=$..+&')-*+.@=!!!')>-#........$.#%;'))';&+.+@%==&*#.@&,!!'!)>*.....$@%*+$.+####++.#%;'))';%+.....$....", "345)))643..$*-))'&#$..+*-!>&#.@-!!!!!!>*.@%&%%%&*+$@-'!!!;&+..+%>!=@..#=!!!!!-*+$.........$@&,'';&@$..$##@#+...#%;>>>!,@$......++...........$@&,'';&@+..........", "(_e<[[f_g..$@='!>%+....#*=&@$.#%-;;;;,&#.+##$$+#+$$#%=;;,&*+..+@=;%#..+*,>>;-%#...$.$...$..+#*%%*#$...........$+#*%%%%*+..$.............$....$#*%%*#$..$..$.$...", ".~hi&]{~....+@&&%#.$....+##+...#@****@#+............+@**@#$....+@@#.$..+*%%%@+...............$+++...$......$.....$$$$$$......$...$.$.$....$....$++$..........$..", "..+@**@$.$...........$+@**@$....+***@+........+.............$$#*%%%%*+........$.$...$...$....#@@#+....$+++..............@**@+.....@**#......@%%*@$...$..$.+$....", "$+*=;,&@+....+##+$...$*=;;=*+$.+*=;;=*+...$+@*@$$.$.........$@&,;>>;-#...............$.....+#%-,%#...$@*%**+$.$.$.......&>'=@+$.+.,';&#$++++=>>;=@++#$...#**@+..", "$*=!'!>%#.$.+@&=%+.$.#&''!>=#..#&''!>=#$..#*-,=@....$.$.$...@=''!!!!>*$.$.$.$...$.$.....$..+%,'!=@$.+#%;'>-*+.....$.$...-'!;%#+@@+>!'-@@%&%+;!!';&*%&@...*,>%#..", "#&;)'!!,@+.$#&'!-*#..#&''!'-@+.#&'!)!-*+..@='!-@+.+@@@##@@@.*,)!!))!'*...............$.....$%,!)-*..#%;!'!!-@+.+++$$+.$.,!)'&@%=,#>)!;%&,>;#>'!!'=->'%$.+*;'=@..", "#=>)>!';*$$*&,!);-%+.#&>'!'=@+.#&>!)!,*+.+*-!>&#..*=,-&&,-&#%;)!!))';@...+@@@.$...$.....$..$@=!),*+.@=>)'!!;*$#*%%%%%@$.=')'=&;!!*,)!;=;!',@-')!>,''>*..+&;'=@..", "$%-!'!!=@$#=''!)!!;@.#&>)!>=@..#='!!!;*$..#&-&*+..%')!,-)!'**;)!)))',@..@%-,%+.......$.....$*-!);%+.#=>)>!!;*$*,>;;';=*$=')',;'!>*,)!';'!>-@>'!!!'!'-@.+*-!)-*..", ".@%,>;&*$.@-))))))'*.#=)!!'-@+.@=)'!!,*+..++@#$...%>)!;,!)'**=!))))',@.+@-!)=@+.$.$.....$...*,!)>&#.#&;)'!!-@.%'))'!!>&#;!)!'!!!;*'))!!))!;*>))!!)!'=++*=>))-*+.", ".$+*&&@+..+&;>!)'>-@.+&>'';&#..#%>>';&++....$.....%,)!;,')'*#%,>!))>,@.$@,!)=*......+++....$*,''>&@.#%,!!!>=*$@,')!!!);*,'!!!))!;*'!))))!!>*-!!!!)!'=+#&'!!'=*+.", "...$#+$..$+@&-');=*+.+@&==%@...+@%&&%#+...$...$...*-)!'>!)'%.#%-!))',@..#%-,%#.....@%%*+$..+@%==&*+.#=>)))';*+@=>))!!)>*%-;')!));*=>'!''!!>*%->!)!)!=#@-!)';;=*$", ".$........$#=;'!>-%+..$####.$...$###+...........$.*-))!'))!%.$*=!))',@...+@@#..$.$+%>!=*+....##@++..#%,!!!'-@.*,')!!!);**->)!!));*='!',>)!;@*-')!!)!-@@-)!'>!;=+", "....$.$...#&>''''>=@..................$...$.$.....*-))))))!&+#=;!))!'*$.....$....+@,!)>%+........$..$#*&==%*#.%>))'!!>=#*>!!!!))'*;)';,!!';@&'!!!!)!;@@=!)!')>=+", ".$......$.#=))))))!*$.....$...$...............$...*-)!>,--=@$*;!))))'%...........$*;!)'&+..$.........$+###+$..*,',;>;=*$*,'>>'!)'*,';=,!!!;*&''>>')!;@+%,!)));%+", "..........+%=,,,,-=+..$.....$...$.$..$.$..........@=!'-*+++.$@=>''''>*.$....$....+*,!!;%+....$...$............#*%%%%*@+.#&=&&=>';@&&%%=>>>,#*=&&&-'>=+.#%=---%#$", "..$.$.$.$.$+@*****#+....$.................$.$...$.+%,=*+.....+@%&==&*+...$....$...+&;>&@.$.........$.......$.$.$$++++...$####@*%*$###+@%%%*++##+#*%%@$..$@**@#$.", ".+@%*#$......+@*%@$.$.+@%%*+.$..+#**@+.$.....+......+*&&*+$...+#@@@##+.++@****@+.+@%%#$....$.+#%%@+..$+@%%@$...+#****#$..$@%%#$.......+*%*#...+*&=%#.$.$#*@@@@+.", ".#&';%#$$...$@=,'%#..+@=>!&@...@*-,--*+..+@@*@@#...$@-''-@+..$@&--==&#+#%->;>,=#$#%>,=@+....+@&>'&#..+*=!>=@+.$@&>-,,&@..#&;;&@$$....#*='-*+.$@=>!,%+.$@=,-=;=*+", ".#=>'>%+..$+@&>'>%+..#&'!!;*+.+*,!!!!=@.+@&,,='*#$.#%;'';*+..#&>>''>'*@-;!!!!!!@+*=>)'-%@$+@&-!!>=@++*-'!)'=*.#&;!>'';%+$@&>'>&*+.$+#%,>'-*+.#&>!!!=*$#%;''>'>=#", "$*->!!=@..$@&;!!,*+.$*-'!!'%#.#&>!!!!=@+$*,!'>>&+.+*->!!,%+..@=))))))%%'!!''!!!%*,''!!''&+*,>'!!'>=+*,'!!!!'=#%;'!!!!'=#$*,>!!>-%+$@=,'!';&+$%;'!'!>=+#&>!!'!';@", "#%>'!!,%+.+%;'!!,%+.#&>!!!>&#.#&'!!!>&#.#&>'!'>&#.#%>'!!;%+.+@-!))'>)%&')'=->''%&!))))));@%!))))));@%'))))));@&'))))));@#&'!))!',#+%'!))!',##&'!)!)!;@#&'!)))',@", "$%'!))'=#.+%'!))'=@.#%'!))'=@.#&'!))'=#.#%'!))'=#.#%'!))'=#.$*-)))!!>*=!);&*=-,#*;')>>!),@@;')>>!),@*;')>>!),@%;')>>!);@$*,>!)';=#+*,>!)';=#+*,>!)';=#$@&,!)>-%+", "$@='!)!-*.+@='!)!-*$+@='!)!-*.+#='!)!-*.+*-'!)!-*+$@='!)!-*.#&;)))));*=!),%#@**+*,')>'!!=#*,')>'!!=@*,')>'!'=#*,')>'!'=#.#*-!);&@..#%-!);&@+.#*-!);&@$.+@='),%#.", "+*,!!');&+$*-!!');&+$*,'!');&++*,!!');&+$*;!!');&++*,!!');&+*,'))))!;@=!);&*%%*+*,')!)!,%+*,')!)!,%$*,')!)!,%+*,')!)!,%$.$#=!);*+...@='),%+...#='),%+...#='),*$.", "#&'!!')';@#&'!!')';@#&'!!')';@#&'!!')!;@+&'!!')';@#&'!!')!;@%>!)))!'-*=')!-,;>;@*,')!)!;=#*,')!)!;=#*,')!)!;=#*,')!)!,=#.+@='),%#$.+@=!),%+$.+@='),%+$..@='),%+.", "*,))))))'%*,))))))'%*,))))))'%*,))))))'%*,))))))'%*,))))))'%=!)'!!'>!%%>!)))))>*%;')>'!'!*%;')>'''!*%;')>'''!*%;')>'''!*.@&,!)>=*$.@&,!)>=*$.@&,!)>=%$+@&,!)>=*+", "&>))!'!)!&&>))!'!)!&&>))!'!)!&&>))!'!)!&&>))!'!)!&&>))!'!)!&;!)!)))))%@->!))!!,@&'))))))!%&'))))))!%&'))))))!%&'))))))!%#%>!)))',#+%>!)))',#+%>!)))',#+%>!)))',#", "&'))!>))!=&'))!>))!=&'))!>))!=&'))!>))!=&'))!>)))=&'))!>))!=,!!'!!!)!%$#=>))>&@$%>!)!!!!'*&>!)!!!!'*&>!)!!!!'*%>!)!!!!'*+%>!!!!'-@+%>!!!!',@#%>!!!!',#+%>!!!!'-@", "%;''>;''>%%;''>;''>%%;''>;>'>%%;''>;>'>%%;''>;''>%%;''>;>'>%%,;;;>>>;@.+&')'=@$.@=;>>>>;=#@=;>>>>;=#@=;>>>>;=@@=;>>>;;=#+*=;>>;,&++*=;;;;,&++*=;;>;,&++*=;>>;,&+", "#*&&%%&&%##*&&%%&&%##*&&%%&&%#+*&&%%&&%@#*&&%%&&%##*&&%%&&%##@*******+.$@&=&*+..$@******@$+#******@$+#******@$$#******@+.+@****@#+.+@****@#$.+@****@#..+@@***@#$", ".+$++++.....#*%%**#..$@%%@+..$...$@**#....+*&%*+....#*%%**#$....$$$..$.............$+#@@+..$@%%@+......+@**#$...+*&&*+......+$$.......#*%@+..$#++........@**#$..", "@%&&&&%*+.+#%;'>>;*+.+%>>-@+....$@=;;%+..+@='>-@+..#%;'>>;*+.+#*@**#$....$....$..+@%&&-=*+.+%>>-@+....$@=;;%+..+*='>-@+..+@*@**#+....#%-'=@$#*&%%@$$.$.+@&,;&*+.", "=>!!!'>-%++%-')!'>&+.#&'!>&#.$..#&>!>&#..#&;)!>&#.+*=')!'>%$.#%-=--%@$.#@#+$#@#++*=>!!!!=#.@&'!>&@+$.+@&>!'=@+$#&;)!>&@+$#%-=--&@+.+#%->!-%+*;''>-*$$..#%>!!'=*$", "-!)!!!!!-@@->!))!>=#+#&;!',*#..#%-)!;&#.+@=!'!',*$#&;!))!,%$+*=!>'';*++*,=%*%,=+*,'!!)));@#%-;)';&%+#%=,)!>-%+#&,!'!'>&+#&,!>''>&+#%&-')';=#%>!)'>=*#+$*,!!!)>&+", ",!)!'!!)>*%>!!'!!!>@*-'!!!!!=#*-'!!!!!=#*,')!!!!-#*;!)!!!!-#*,')'!!!-@#='>,-;';@&>!)!!))>**;'!''!!;@*;!!''!!>@*>!)>'!!>@*>!)>'!!>**;'!!'!!>&*>!)!!>;&#+%>!!>)',#", "-!)!>>!)!%&'))>'!)>*&>!)''!)>*&>!)''!)>*&'))''!)>*&'))''!)>*&'))''!)>*@=!)''!!>@=!)'!!!)!%&')!;>!)>*&')!;>!)>*&')!;>!)>*&')!;;!)>*%>!)'>!)!&*,')!!))>*+%>!!!)',@", ";!))'>>!!%&'))!'!)>*=!)>--')!%=!)>--!)!%=!)>--')!%=!)>--')!%=!)>--')!%#&;!)))>=#=!)>)!'!!%&')>=-');*&')'--');*&')>--');*&')'--');**='!'>!!>**,')>>'!!%#%>!)))';*", ";!)!>;>!!%&')!)!!);*=!),&%>'!%='),&%;'!%=!),%&>'!%='),%&>'!%=!),%&>'!%$*-'))!;&+=!)>)!'!!%=')>=-');*&')>==');*&')>=-');*&')>=-');*+*,'!!);=#*,')>>'!!%+%>!!'!)'%", "=!)',,>!!%=')'!!));*=!);&&>!!%=!);&=>!!%=!);&&>!!%=!);&&>!!%=!);&&>!!%+%>!)!)>-#=!))!'!)!%&')>=-');*&')>=-');*&')>=-');*&')>=-');*.#%>!)'=@$*,')!!!)'*#&>!!>>)!%", "=')';;'!'*&')''!));*=')';;')'*=')';;')'%&')';;!)'*&')';;!)'*=')';;!)'*@='!!'!!>@=!))''!)'*%')';;!),@%>)';;!);@%')';;!);@%>)';;!),@.$%,!)>=@.*;')))!!;@#&>!!>>)!%", ",!)!'!!!,@=')!>'));*%;!)!!!!,@%;!!!!!!,@*;')!!!!,@%;!)!!!!,@%;!)!!!!,@@=!';->!>@&'))!!!!,@*,')'!!!-@*,')'!!!-@*,')'!!!-@*,')'!!!-@+@->!)!,%$&>!)!';-%+*-!)!!!)'%", ";)))))!>&+='));>!)-@@&;!))!>&+@&;!))!>&+#&;!))!>&+@&;!))!>&+@&;!))!>&++%-=%*&-&+%>!)))!>&+#&;))))'&+#&;))))'&+#&;)))!'&+#&;)))!'&+$*,!)))>=$&'))!>&*+.*,))!'))'*", "%-,;,,-&@$*=--=&--%+$@%-,-=%@$+@%-,,-&@$$@%=,-=%@$$@%=,-=%@$$@%-,,-&@$.#@@+$#@@+*->;,,-&*$$@%-,,-=*$$@&-,,-=*$+@%-,,-=*+$@&-,,-=*+.#%=,,-=*$*=,-=%#+..#%-,----=#", "#@****@#$.$#**##@@#+.+##**@#$..$##**@#+..$+@**@#$..$+@**@++..$##**@++...$+...$..#@*%**@#...$#@***#+...#@**@#+..$#@***#$...#@**@#$..$##**@#$.$#**@+$...$#@**@**#$", "..+@@+........+##+.....+#@+.....$.$$$...............$#**#$........................#@@+........+#@#$....+#@+...............+@@+...$....+#@#+....+#@+.............", ".+%-=*+.$...++*&,*+...#*=-%+.$.$#*%%%#+...+++#+..$..#&,>%#............$....$..$..+%-=*+$.$...$#%,&@$$.+@=-%#....+#+#++..$+%-=*+......$#%,&@$..+*=-*#..$.+#+##+..", "$#&>>-*+....+*-;>%#$.+*=>'-*+.+@&,;;,&@$.#*%%%%@+..+@,'!=*+.$.+.$.+.$...$.+.+...+#&>>-*$.....#%,'-*$..@&>',%+$.#*%%*%*#+$#&>>-*+.$...#%-'-*+.$*=>'=*+..#*%%%%@+.", ".#%>!'=@.$.+@='!;%+.$#&>))>&#.+%;!))!-*$+@-;;,>%#..+%;'';*+..@**@***#+.+#****@+..#%>!'=*+..$#%;'!=*+.+%;!)!=*$+@=;;-'-%$.#%>!!&#...$#%;''=#.$#&'))>%#.+@=;;,>%#.", "$@=;'!,%#.$@&;'';&#.+*,''>!=@.#&'''!'-*.+*,>!>'=@.+@=>!!,&#.@&,,--,,&##*&,,;,-%+$@=;'!;=*+$@&-'!>-%++@=>'!';&++%,>>>';=+.#%;'!=*...#*-'!,%+.$@->'''&+.$*->'>>&+.", "#%>!))!=*+#%>!))!-*$#&'!))),*$#='!)))-*+#&'!)))-*+#%>!))!-*+%'!!!!!!>**,'!!!!!,@#&>!))!',@#&>!))!',@#&'!)))';@@='!)!)';@+@-'))-*+$.@-')),*$.$*,')!;%+.$*,')!;%+.", "#='!!')>=+#='!!')>=+#='!'')>=+#&'!!')>=+#='!'')>=+#&'!'')'=$&>!!)!!')%&')!'!));**-))!'!)'%*,))!'!)'%*-))!'!)'**,))!'!)'*.#&;!),*$..#&;!),*+..@&;!),*$..@=>!),%+.", "@='!!!)',@#='!!!)',@@='!'!)',@@='!!!)',@@='!'!)',@@='!!!)',@&>!!)!!')%=!)>-,>'-@*,))!'!)!%%;))!'!)!%*,))!'!)!%%;))!'!)!%.$@-!),*+..+*=!),*$..+*-!),*+..+*=!),*$.", "*,!!!!)',@*,!!!!)',@*,!!!!)',@*,!!!!)',@*,!!!!)',@*,!!!!)',@,!)!)))))%=!)>,,;>-@%;))))))'%%;))))))'%%;))))))'%%;))))))'%.+@=!),%+..$@=!),%+$.$@=!),%#..$*='),%+.", "*;)!>>)';*%;)!>>)';@*;)!>>)';@*;)!>>)';@*;)!>>)';@*;)!>>)';*>!!>))!!!%&>!)!!!)'*%;)))!!!'%*;)))!!!'%*;)))!!!'%*;)))!!!'%$@&,!)>=*$+@&,!);=*$$@&,!);=*$+@&,!);=*+", "*;))))))'**;))))))'**;))))))>**;))))))'**;))))))>**;))))))'*>!)))))))%@&;'))!'-@@-))))))'%*-))))))'%*-!)))))'%@-))))))'%+%>'))!',#+%>'))!',#+%>'))!',#+%>'))!',#", "*='!!!!!>**='!!!'!>*@='!!!'!>*@='!!!'!>**='!!!'!>*@='!!!'!>*='!!''!!;*.#&>))>&@$#%->!!!>,@#%,'!!!>-@+%->!!!>-@#%->!!!>-@+%>'!!!',#+%>'!!!',#+%>'!!!',@+%>'!!!',@", "+%-;>>>;=#+*,;>>;;=##%,;>>;;=##%,;>>;;=#+%,;>>;;=##%,;>>;;=#%-;>-,>;%+.#&')!-*$..#*=;>;=%+.#%->>;=%+.#*-;>;=*+.#*=;>;=%++*=;>>>,&++*=;>>>,&++*=;>>>,&++*=;>>>,&+", ".#@**%**#+.##*****#+.##*****#+.##*****#$$##*****#$.##*****#$+#**@***#..+*&-=*+....$#***@+...+@***#+...+#***@+...$#***@+..+@***%*#$.+@***%*#$.+@*%%**#$.+@*%***#$", "$@*****@#....####+....+##+.........#+#$....#**@$.....+#@@++.$.................$..........$.++#+$...$....+@#+.....+#@#.................$+##$$#***#...............", "@=,;;,;-%+.+@%===*#..+*&&*#......+@%=%#+..#%-,=*$$..#*=-=&*$..++.++..$...$++....$.........$#%=%#+......#%=-*+.$.#%==%#.$..$++.++.$..$+#%=%#$*-;-%#...$...+$+$+..", "%>)))))',#+@&>'''-*+.#=>'-*+$.$.+@=;)-*$.+*,!)>&@..+*,'!>>=+.+@%****#+..+#%%@+....++++++..#%,!;=*+.$.+#%;>!&@..#%,!!-%#..#*%*%%@+...#@&;)-%$&'))-*#....+@*%*%*@+", "&'!))))'-@#&>!!)!-*+.#&>!!-*$...#&>!!-*$$#=>!!!-*$$#=>))!>=++@-;>-!-%+.+#&>>&#+..+@%&&&%*+*=;'!>=%#+#*&-'!'-%+#%-'!!!-*+@&,>;,!=*+#*%=>!!;=#%>!)>,=%#+@*=>>->;=@", "%>!!!!)';@%>!!!!!,%+$@=>!)'=*++#&>!)!-%+$*-'!!!,&+$@='))!;=++*,'!'!;&+.$*,!)-*+.+*=!'!'';@=>'>'''>%+%;'>>'!!-@%;'!''!',#%;''>>!',@*;''''''>&*,')!!';&+*;'!';!!'&", "*;)!'')!'*&>)!!!!>=##&;'))!>-@#&;'))!>-@#&>!))!>-@#&;!))!>-@#&>!))!>-@+@&;!)-&@+*->!!!!!'*,!!>,'!!=#&>!';;)!>*&>)!>>!!'*&>)';>)!>*&>!!>;')'&*,'))))!;*&>)!>;!)!=", "*-!)))))!%&>)))!)!>**=)))!))'**=)))!))'**-)))!))'**=)))!))'**-)))!))'*@&,>>>;,=#&'))!))),*,!)>,>))-@%>)!;,!)'*%>)!;,!)'*&>)!;,))'**-!)'>)!'%*,')'>!)'%%;))'>!)'%", "*;)!''')!%%;))'>')'**;)!>>')!%*;)!>>')!%%;)!>>')!%%;)!>>')!%*;)!>>')!%%>!))))!>*=!)'!)));*=')',>!)-@*,)!;,')'**;)!;,')'*%;)!;,')'*#&;!!')>-@*,')>;'!!%*='!!>)';*", "*;)!;,>)!%*,)!>,')'**;)!,,;)!%%;)!,,;)!%%;)!,,;)!%*;)!,,;)!%*;)!,,;)!%*-;>''>>-@=!)')!!);*&')',;!)-@*-)!;,>)'**,)!;,>)'%*-)!;,>)'*$#=>))!-*$*,')!'!)>*$*-'!!);&+", "*;)!>;')'%%,)!>,')'%*;)!>;')'%%;)!>;')'%*;)!>;')'%*;)!>;')'%*;)!>,')'%#*&,''-&*$=')!!!!);@&')';>!),@*-)!>;')'**-)!>;')'%*-)!>;')'%$@=>!);&+.*,'))))!,@.#&>!)'=@.", "*-!)!'!!'*&>))'>!)!&*,!)!'!!'**-!)!'!!'**-!)!'!!'**-!)!'!!'**-!)!'!!>*.$*,!!-@+.='))!!)!-@*;!!'!))>*#='!!'!)!&@='!!'!)!&#='!!'!)!&#%>!)),*$.*;')>>;-%+$*-'!);%#.", "#&>!)))';#&!))!>)))=#&>!)))',@#&>!)))',@#&>!)))',@#&>!)))',@#&>!)))',@.$#=>'&#..='))))!>%+@=>)))))'*+*,!)))))=+*-')))))=+*-')))))=#=!)))-*..&'))!>&*+.#&!)))-*+.", "$@&-,,,=%+*=,,--,,-*+@&-,,,=%+$@&-,,,=%+$@&-,,,=%++@&-,,,=%+$@&-,;,=*+..$@%%@+..-'!;;,-&*$$@&-,,,,=@$#%=,,,,-*.#%=,,,,-*.#%=,;,,-*#&'!!'&@$.*>!!';*$..#&'!!'&#..", ".$#@***#+.+#***@**@+.$##***@+..$#@***#+..$##***#+..$#@***@+.$$#@***#++..$$#++.$.*&&&%*@#$..$#*****#$..+@****@+..$#****@+..+@*****+$@&==&@$..@%==&%#+..$@&==&@$..", ".............$+@*%&*.$.++$+$............$.........$............$........$#*@+....$#@***#+...$#+.....$*%&&&&%@+............$.$$$..................$+@@#..........", "..##+$#+..+#*%&&;'',.$*%*%%*+...++#@@@#...+++$$......#@@#..$+#**@+....$.#%;-*$...+%;;;;&#..+*&%#....#=''''''=#....+##+..+#*%%%*%*#$.........$...+#&=,%.$..++....", "+@%&**&%#+@&-;;;'))>.@&>-,;=*$+*%%&---%@+#%%%%%%*+$$@%--&@+.+&,;=*+.$.+#*-!>=*#$$#=!'!',*$+@=>;*#++$@;))!!))-*..$+*==*#$#=,;;;;;,&..+@%%*@+.$+++#%;>'-..+*%%@.$.", "+&>>=-',%+%>!)!'!)!;+&;)''!>&#*,;>'!!!,%+&>>>;>;-*$@%,)!;=%@@;!)'&#...+&->)!;,&@.*-)!)';%+$*,!!-&%%@*;))!!));%...#&''-@$@>!)))))!-.#%,;',=*+#%%#*,!));..+=';%#..", "@;!);>);%#%'))'')';&@->)''!',%*)))))))!&#-))))))'&@=;;!!'>;&#='!'-*+..*>!!))!!>%+&;)>)'>=*+&>!!;;>;&*;))))));&..$@=!'-@.+&->!)>;,&+*,!))!>=**>,%%>))>=..#;!!=#..", "*>))'>),*+*>!!>>)!>&%'!)!)))'-*>'!))!',%@;)!''!)>&%'!!)))!!=+=')!'&#..%!)!))))'=*'')!))!>-#=!))!!!!=%'))))))!,..+@=!'-@+@&-;!)>>>-@,!!)!!)>&*'!-=>!),%.+*'!>&#.$", "@-''))!=*+@;!',;))'=*>')'!!';&#%=>!!;=*#*,)!;,!);&%>'!)!!!!-+='))!=@..%'!>)!!)!=*'!)!))!'>*;)!!!!'>&*')))!!!!-...*-!'-@$&>''))!'!>*'!!!>'!)=*;)>,'!!=*.+%!!,&@$.", "+*,>))>=@$*>!>,;))!,@->)''!>=@.#&>!'=@+.@,)!;-');%#=>!)!'!!=@,')!'=@.$%'!')!!)!=*>')'))!>,*>!''!',%#*>)))!!!'&.$.*-!'-@$&>''))''',%!!!!;>!)-#=!>>!!>&+.@=!';,&*+", ".@&;))'-%#*>!>;>)'',+=>)''!>%#.#&>!>*+..*;)!;-');%+%,!)'!)'&*'))!;&@#+*')!)!!)'=#->)>)';&*@>,;'!>&#.@-!)!!)),%..+*,)!=@.#%=,');=%*=!!!',>!)-+*=;!!'=@$+%;!'>!'=@", "+%->)))>,%@>!'>'!,&*+=>)''!>%$+*=''=@$..*,)!>;!);%#=;)!'!);%*>))!;-=&**;>>)!!)>%#,')>)',*$+*&;!!-@$.+=!!>'!)-*..#&,)'&#..#%-'),%#$=!!!','!)-$@&;)!,*+.@=!!>>!);&", "@=')!>))!,#=')))>&@++=;)!!!>%$#='!>%#..$@;)))!));**>!!'!)!-@*;!))))!',+%=;)!;-&@*')';)>-@$$*=>';%#..+*=;'!!!=@.#%-!)'%+.+#=>!)-*$.%')!>'!);&+&,)!'&#..&'!)))))!-", "%!!>--;''-+%,''>=@+.$&;)!)',*$*>!'=#....@-)!;;>'-*=!!;,>';%#@>'>>>!!'-++@-)'=*#+*'',-!>=@$$%>'>%#....#*=>)!;%++@,!);=@$.+#=')!-@$.@=;>'!',&@*;)',&#$..&!)!!''!)-", "*>>=*@%,-&.#%,;=*#..$%,!'>;=#.@,>,%+...$+&>;&%-,&#&>;&%=-%#+#-,==,>>;&..+='>%#..*>,%%,=*+.$*,,=#....$.+*,'>=@$$*,''=*+...#%,>>%+..$@%=>>-%#$*>';%@$$..%>'>>,,>'&", "+**#+$+#@#..#**#+....#%,=&*#$.$@*@+..$..$#**###@#$#**#+###$.$@@##@*%*#..+*=%@$..+*@##@#+...#**#...$....+*%*#+..#&,%@+.....#*%*#$...$$@*%@+$.#=&*#$....#*%%%*@**@"}; xscreensaver-5.36/hacks/images/matrix3.xpm000644 000767 000024 00001135345 10046031372 020621 0ustar00jwzstaff000000 000000 /* XPM */ static char * matrix3_xpm[] = { "512 598 91 1", " c None", ". c #020202", "+ c #020602", "@ c #020A02", "# c #061606", "$ c #071E07", "% c #061206", "& c #020E02", "* c #061A06", "= c #0A220A", "- c #0B310E", "; c #0E3E12", "> c #0A260A", ", c #0E2A0E", "' c #134A16", ") c #0E5A0E", "! c #104616", "~ c #124E1A", "{ c #166A12", "] c #127212", "^ c #1E921A", "/ c #168A16", "( c #1A5E2A", "_ c #165626", ": c #227232", "< c #3A965A", "[ c #268A3E", "} c #227A37", "| c #1E662F", "1 c #1E6A32", "2 c #227E3A", "3 c #16320E", "4 c #36822A", "5 c #4A9E72", "6 c #4AAA6E", "7 c #42862A", "8 c #4DAE7B", "9 c #1A3612", "0 c #224616", "a c #264E16", "b c #32621E", "c c #1A3E12", "d c #265A1A", "e c #367622", "f c #3E7626", "g c #5A8636", "h c #4A962E", "i c #669A3E", "j c #82AE52", "k c #3E9222", "l c #4AA232", "m c #66AA3E", "n c #6ABA3E", "o c #82BE4A", "p c #76AA4A", "q c #96BE5E", "r c #1A9E1A", "s c #22BE22", "t c #2AD62A", "u c #6AEE8A", "v c #4AEE4A", "w c #50CE94", "x c #26CB26", "y c #26D226", "z c #1EAE1E", "A c #2ADE2A", "B c #2AE62A", "C c #2EEE2E", "D c #56F24A", "E c #66F65E", "F c #127E12", "G c #42EE42", "H c #3AEE3A", "I c #2B9F4D", "J c #3EBA6E", "K c #2AAA4E", "L c #56F262", "M c #66C29E", "N c #68D6B2", "O c #52BE8A", "P c #3CAE67", "Q c #2A9646", "R c #6AC6AA", "S c #6ACAA2", "T c #C2D672", "U c #B2D26A", "V c #4EAA2E", "W c #9ECE5A", "X c #5EB632", "Y c #62C299", "Z c #8ACA4A", "..............................................................................................................++@@@@@@+++....................+@@@@@@@+........................................................................................................................++@@@@@@+....................+@@@@@@@+................................................................................................................................................................................................+@@@+.......", ".............................................................................................................+@##$$$$$#%@+..................+&##$$$$#&+......................................................................................................................+&#$$$$$#%+..................+&#$$$$$#&+..............................................................................................................................................................................................+&#$#%+......", "............................................+@&%#***%&@+...................+@@@@@@@@@+....................@##=--;;;;;;;->$%@...............%#>-;;;;;-,*&+...................+&%&&@+............................................................@&@@+.......................@%*--')))!;-=%@+..............%*-;;!!!!;-*&+.....................+&%###%@+............................................................................................................................................................@#$-;;;-=*@+...", "............................................%**==,-->=*%@.................@%*$$$$$$$*##%&+................%$--;~'))){))!;-=*&.............&#--;)){)~!--=#@...............+&###$$**%@+........................................................@%**$*##&@....................&=,;']^^/])';,*@.............&$-;)){//]);-=#@+...................@#*==>=*#%@.........................................................................................................................................................&*>;!~))!->*@...", "...........................................+%**===,,>**%%+..............+@&%************%@+..............@#*,;!~~))())_';-=*@............+%*=-;~({_~;-=**%+.............+&%*$**$**%@+........................................................&&#*$*#$%%+...................@*=-!:<<[_~!-,#@.............@=-;'(}[<}_-=*#@+..................@%#**>>>*%%&+.......................................................................................................................................................+%$=-!)))!-,$@...", "..........................................+&*$>,-;;-->$$%+..............@&$$$$>$$$$$>$$*#%&@.............@#>-;'((|(||1(~!--$%+..........+&**,-;_:}2(~;->$#&@............@%*$=>>=>$$#%+......................................................+&$*>=>=**%@..................@&*>3_456<:(~;,*@............+&=;!(:786<(;,$*%+.................@&#*>---,>$##@+......................................................................................................................................................@%*-;_|1|(;-*&...", "..........................................@*=,90abbba3,*$&+............@%#*,333333333393>$#@+............&*,cdbbeeff4febd0;=*+.........+@%>-cabfghifbdc9=$#&+.........+&%$,39c09c3,=$@.......................++@@@++.......................+&#,39c993=*%+................+&*=3;bijjifbac,*@............@&=;adfijjifc9>*#@................+%*>,9abdac3*$&+......................................................................................................................................................&*>9aefggfa;=%...", ".........................................&*=;abgijjigbc9=#@...........@%*,c0db{b_0_db:bdc3=$&+..........&%=9de47kkklllk4ebac=#........+%$>c'be7mnonphebd03=*&+.......+&%=3cd:eeee(a3=*@....................+&&*=*$*##%@+..................+%*30d:1e(d09=%+..............+&$>9cdfmqom7bd09*&............@*>9db4ioqpgbac3=%+..............@#*>;afgmiifac,*%+...................+@&%#&@+........................................................................................................................+&*,;abipnpif03#+..", "........................................&$-~]rstuuuvws/{;-*+........+&#-;)]rsxyszrrssysz/{';$&........+%=-;{/yABCCBCACCtyz^];,+......+%,;!{/sABDvuEvBAsrF{~-$&......@#=-;)/zxBBAAs^{!-*&.................@%$,-;;;!;;;-,*&+...............@*-;)/zytAsr/{;$%+............+%>;~F^sxAvGAs/]);>*+...........@*-~F^sxGvHAsrF);>%+...........@%$-;~]IxDuvDJ/{';>$%@...............&%$>----,$&+......................................................................................................................&=-~]^sADEDtKF',@..", "........................................&=;~FIyHDEvDAsr]~-$&........+#,;)]/zsABxszssAAysrF);-#+.......@#--!]ryBCBCBCCCBBxsrF~,%.....@#>-!)]ryAHGEuELHBxzrF);-#.....@#*-;'{/yBACBByr]!;,*&...............@#=--!!)))))~!;-=%+.............+%=-!]rsBBBtz/];,*@............&=-;]^zxABCByrF);-=%@...........+#=;)FrsACBBysrF~-=#@.........&#>-;!{/KyDDDGAz])';-,=&.............&%=>;;!;;->=%@.....................................................................................................................&=;~]rJAGLDGs])>&..", "........................................&#=-~][6MNNOP[{!->#&........+%*-;)(F^rI^/FF/IrQ/])'-=%........+&>,;~]^rIzKzKsKzr/F(~;=@.....&*>,;!)][IKOwNwOPKQF|~;,*&.....@#$>-;~]/rrzKr/F)->*%@..............+&*=--''~___~';,=*%@.............+&*,-']/rKr/F_!-*%@............@*=-!{2QIIIQ/(;->*&+.............&%=-!(}^IIr/[]);>$&@.........&*>,-;!(1-a|75RNNR5}('-*#@........@&$-!__:[55<}1}}5554|~;-=%+.......&#*,-_1[QQQIIIIIQ[}1('-*@....+&$=-!(:}[QI68OOO66<}(_;-=&.....+%*=;;_|[[QQQ[2|~!->#&.............+@%$-;~(:f774e1_;,$%@.............@#$,;_:<865[1_;,$&@............@#>-~|}}[QQ[|~;>*%@...............&**-'(}[Q[[}|_;=*%@........+&*,;;c~(e#@+...................................................................................................................+&$>3~|}@....@#>-abe7khhlmVmmjqqjgedc9>&.....@*>;adbe47k4k77ebac,*%+...........+&#*,9a:gijqqqjgea3=#@.............@*=;0bgpqUqifdc,$&+............@*,cde7kk777ba3>#&+...............@**,0de4kh7hfb0,$%@........&*,;abbbefiqUUqi4bbbba;,#............@&$3afjjjifc,*&+...................................................................................................................@%=,;df7hhh4fd3*@...", "........................................%*9c:kiqTTTWjl7bc>$&........&$>0d:4ijWqoikhmqTqp7eb0,#+......&*=9cde4hlVVVVmVXVVk72b',&...+&*3a14klVVVVVVVXqWWoi7bdc>#+...+&$3cde4k*&+..........&*=3;d:75jqTTWomk:03=%+...........+&*30b4iqqUWpgba3*%+...........+%=30e[llVVlke_9=*&+...............+#=3cb4kllVlked;,$@.......@%=3d1e47hlpWUUWjhkk44ed9$@..........+%$,cbgqUWqgbc,$&...................................................................................................................&*,9dehllllheac=%...", ".......................................+$-~]zxCDuuEEvAyr{;,*+.......*-!{rsxADEEGABBGuEuGsz/{;=@....+%$;~]/zsAACGHvGvGGHCCAyz/~$...%>;~FzAABCCCBCCCCGvDHtsz/{;$@...&$-~]rzxBCCBCCCCBAs/{;-$%.........@*-')FrstCGLuDvGHtzF~->&...........&=-~FzyBGDEGAs/{;,*@...........&=-~FztACBABxr]'-=@................+*-'{^stBCBCBs/);,*+.....@#,;)/zytBHHDEEEEvvBBtyz^{-#..........@$-;{IxDEEDyI{!-*@.................................................................................................................@$-'{rxAGCAtsr]~-%...", ".......................................@#;~]ryADEEEEvBs^]!-#@......+%-;]^zyBHLLvCAAHvuDHsz/{!*+.....#-;{/zsACCBGLLLLLLGCCBBs/)=+.+*,;~FstCCCBCBtyxytBAAysz/{;*+..+%=-~]rstAABACBBBCtxr]'->*&........@=-)F^syBCCAAxyAAAzF~;=%..........+%-;)FsBACCBAs/]~->#+...........@=;)FzACCCBBs/{;,#+.................@$;)FsABCCCAs/{!-*&.....+$-;)/syBHLLEEuEuELGCBxs/);*.........+#,;~{IALLLDyzF);=%+...................................................+...........................................................@#>;~]IAGvHysz/{;-*+..", ".......................................+@*-;12IOSNSS8I});,*@........@*,;{F2IPwwPI[QIOwO<2|);,%......&=,!{F^IKKJwwNuNwwwJsKr}_;%...@*>;~FIKzKrI^/2F/[QQ^2]|);=&....&*>-!(]/^IKrKrKrrr^]'-=*%@........@*=;)]}^IKIQ2}}/[/]'-**@..........+@*=;(/QIQQ[[]);-*#+............+#>-~2PJwJK[]~;=#@...................&$-!{/IJJwP[(;,=#@......&$,;)F[QPwNwNuNNuNwJI^F);,#.........&**,;~:5wwNO<1_;,$%+............................................+@+++@@&@@@@@@@@+++................................................@#$-;):5wJP[F_!->#+...", "........................................&*=;_2g8RNNR6[:(;=*&........@#=-~(1[5OO6[2}<6M6<|_;-=@......@*,;_1}[QKKOwNNNNSw6KQ[:_-#...@#*-':[IIIQ[[21::}22}:__!->&....+&*,;_(12[[QQQQQQ[2|~->$#@........+%>9'(}}QQQ}:1111|~;>$%&...........@#>-'|[2}}:(~;,*#+.............@%=-_26OYO<:_;,$%@...................@*,3~|[8YS6<(->$&+......@%=-'(14KONNNSNNNSO5[}(~-*&........@&#>,3_|*$%@...........................................&%###%#%#%#####%##%@...............................................&#=,9_1#@........@#=3adb4impifffgpjigdc9>$&.....+&*-;d:4kimpoqWUUUWoplkkea-%...@$*3c:7hhhhhg7feef4febbac3=%....+&*,;a(be7k7h4h7<44ba;>=$%+.......@#>9abe4hik7ebbbbba-=$%%+..........@&*-cde4ebddc->%@+.............@#=9dgjWWjiea3=*&....................+&=-cbgqqUqgb;,$&+......@%*,cd:fijqUTTTTUqji4eda-*&......+@%**>3caegqWWjiba;9==**@........................................+@%$>>>=>=========***%@.............................................+&$>90dfippgba;3*&+....", ".......................................+%*30|7ijTTTUpl4d0=*&........&*>c_be4hiig4ee7iiifdc3=%@......&=3abfhlXqZZZoZWUUZnXVk4d3#...@%$3aehVVlnnnVllhkkk4eba09=%.....@*>3ad:4khllIlVllk7eda9=*&+......&*>0db4hmnmh4}ee:(ac3=$#&.........+@#>,0debdaa93,*#@..............&*>9dhoWWZifd0,$@.....................%,cabgqUWqifa3=#+......@#$,cab4hmoqTTTUZnmk4bdc,*@.....+#*=,c!a(b7mqUUqi7bdcc33=#+.....................................@%#=,333;0cc0;0c;cc;c9,>*%...........................................@%$,;de4hlnmhedc,*%.....", "........................................#-']rxBLuEuEvts/);=%........&$3)F/rzssszrrzsyxs/{!-,#+.....+#-~]rxAGvEEGHHvLEEEGCCts^)$...&$-;{rxCCHvvDGBBCCBAysr/{'-=+....@#,;~F^sACCCCCCACCtyz/]',#@.....+*,;{/zsAGDvtyszrr^F{~;-,=@.........@#=;)F/^])';;-*&..............+*-;(^JvEELtK/{;>#....................+#-~2IyEEEEtK]~3=@......+*-;~]^zxACLEEEELGByz/]~;=&....@*--~)F^rzsxGEEEEHssr^F])!,#....................................@*-;~){]{/^^////////FF]{);=@.........................................@*>;)FzsxABCAs/]_;$%.....", ".......................................+*-;_^stDEEELGAs/)-=&.........%,'{F^/rrr/FF/rzz^]);-*@+.....@*-~{rsAAGLLvCBCHLLLGCCAsF'*+..@#,;)/stBBHvGHCCCCCCBsz/{);>%....@#=-!{/stCCCCCACBBAxz/]!-$&....+@*>;{/zsAvLDBxsszr//F]~!-=#.........+&=-!]]])!;-$%++..............@*-;)^xGEEuAs/);-&....................@$-'{IxGEEDAz]~-#+.......#=;~]^zyBHvLEuLGCBxz^]~;$@....%--!{/IzsJyAvEuELGAtyssr/);*...................................+#-;']/rKzzzsssKszszszzK/])-#.........................................%*-;)/sABCCBys/)!-$+.....", "........................................+*-;~:[PSNNOP}|!-=#@.........+&$-;;;~!!;;;;!'~'-,$#@.......@%>-'(][QPwwJKKKJwwOIQ}F{;>@....+*>-~{F2[QPPKKKKKJJKI/})!-*@....+&*=,;)FQrKKKzKzrr/F{~;>*%+....++%*=;~:2-;([OwNO<:~;=*@....................+%>-!(-;_]QPOJ86PPJJPQ}{);,#.....&$-;|[68OJOYSNNNNNOOO665[_-*...................................+&=-!1<588866666O6666668<}_,%.........................................&*=;~]/IrIQQ2{!-=*@......", "........................................+&*=;_:==,>====>,,*$%&+........@%*>;~(|[5OO6<[[-ab5RRRRRNSNNSNNNRNNRM5b9#....................................#=3af6MMNMNNRNNMNRNNNRRMg(-#.........................................&$,;_:[IIQ2:(;-$#&+......", "........................................+&*>30biqUUjgbc9=*@.............@&*##**$#$*$#$#%@..........@%$=9cdbgpqqmg7giqqjgbbac,%+.....%*>>30dbef7hhlmmoZoik7e09#.....+@#$=90:7hhVmmlkh4edac-=#@......+&$=cabfiqUUjmll74eeeeb_c=#...............+++++...................+&*,9agpWWqgb;,>#@...................+@#*,;dgjWWjib;,$&.......+@#*,cabijqpg7fgjqjibdac=&+...+%>3agjqTTTTTTTTTTTTTTTTUifc#...................................+#>;dgjTTTTTTTTTTTTTTTTTUibc&........................................+#=30b4hhkkeba-=#@@.......", ".........................................@$=3abiqUUqib03>#&..............+@@@&&&%&&&%&&@...........&*,9abe7kpqWjlkipqWoi7e|a3$+....+&*=3c0|e47klVVXXZZoXVk7ea>@.....&*,3cdeklVmXXmVlkke|dc3=%......@#=90d:7iqWWZonXlhk7kk71a9#+......................................+%$-0bgjWUWifa9>*&+...................%*,90eioWUqibc3*%........@#>-0dfioZp57kipWqi4bac>*+...@#>!cgjTTTTTTTTTTTTTTTTTTjf0*...............+@%%%%%@+...........+%30agqTTTTTTTTTTTTTTTTTTjb0#.......................................@#$9a14kVVVk4(c3$&@........", "........................................+%=;~FIADEDDyQ);-*@..................+@@@@@@@@+...........&=-!{^xtvDEEEEvGHDuEDHtyz^)-%...+&=-;)F^sxxxtACCCHGLGHCBAs/!#....@$,~{FzsABCHCHCCCCtxszF);$+....+#,;)FrsxHvvvDvvDGGCHABts/'>@.....................................+&*-!{ryuEEEtKF)'-$@..................+$-;)FrtLEELAK{!-$@......+%=3!{^ztvvHxssyHvGAs/]~3>@...&=30|.............+&*>--;-->$%@+........+#,~e5wuuuuuuuuuuEuuuuuuSX[0$...............+&##**%&+..............+$-!{^sAACCCAs/)!-*@........", ".........................................&--'{rwvLLGy/{;>#+......................+...............+%>;)FKGLuEEuEuELEEEEEGCAyr);%...+*=-~]rzxAAyAAytBACCCBCCBs/)$....&>;{FrsxBBCBGBCCCBCBtsr]!,%....&*,;)/syBACHHvLLLELLHCBBs/),@......................................&=-;)[stvvDAs^{!-=#+.................+*-!)FIyGLLDxr{'-$&.......&$-~{/rsyAyzzrzxAxsr/{~-=&...+#,;~]rsXxwvLEEEEEEGtxxss^]!*+...........+#*,;!~~!;--=*@.........&>;~FrVsXsXxxXxXxxxXsssz/{;#..............@#*=>-,-=#@.............&$;)]zAACCBByzF);,#@........", ".........................................+%*-;|QJYw6[(;>#@........................................&*>;(<8NNNSNNNNNNNNNwJKI/|;=&...+%$=-~]//^^/////^[QIKKKKrF'-#....+*=;~{]F/QIJJKKKzKzIr/|!-*@....@#=-'1/QIIKKJJwwwNNNwKKr/(;*.......................................+&$,;_25PJPI[]~-,$&+.................+&*,;(2;~(:]11_~_)|2](~;->#@.....+%=,-c~(||e[6wNSR542:b(a!->&...........+&#$>-!~)~'-,*#&..........@$>3!!))()d|((|(dd)0_!';-%+.............@&**>=,==*$%+............&*>;~F^IrrQ/F(;-*#@.........", "..........................................@#*-cb<55<1;,*%+........................................+%*-0:58OMRSRRRwMMRO85[}|~-=+...+&*>;_1}[Q<<<[[}[[Q5KIIQ[(!,&....+&*-;!_(|}[QKIIQQQQQ[}|;,$@....@#$-'_}[QQQQIPJYORNSO5[2:~-#+......................................+&%*,!([#&@.................@#$-0(1[--c_(:5RNSO<:d~!;->=%+...........@&#=-'(|1|_!->*@..........+%*=>,3,-3c;c-33----,,>=*%+............+&$=,-;;;-,*#&...........+&*=-!|[QQ}}}(~-$#@..........", "..........................................@#*>cabebb0->*&.........................................+%*,;dfg5i5mm8mm8m5ig7:da9=#+...@%*,cd47>,,-,,==>,,3,=*$#%+........+&**>,39afiqUUjiba09-=$%+...........+&*$,9~bee:bd;,*%+..........+&***>=>=>=,=>===>=>*$*#@.............@%>ccadbda;,$%+.........+&#>=cae4hhfebd0,*%+..........", "..........................................+%$,-0dbbd93=$&..........................................@=,3df7hlVVXXXVmVlVh4ba;3=%....+*>30ekVlXoZWommXnZZZmVh4b0,@.....@&**-99_b4hVVVkkkcd4lVVVllhhhlmoWUol7f1d9$+.......................................@#$9'b4klllk7eac=$&................+%=3017klllk7:a9>#@...........&&#*$>$*$$#$*=$$*%&+..........+&#*,90dfiqUUqifd;3=$&@............@*$-9d:kkkk4bac>$&...........@&#$*$*$*$***$*$#*##&@@+............+#=;abe474ed9=*%+........+#>30~ehmpl7eda9=$&+..........", ".........................................+@*,;_{/^^2{'3,#.........................................+#=c_}zxtAHHCCCCCCCCts^F';>#....+$-'{^yCCCvLvvvGGvGvGBtxrF',%.....+&*>;')]^stCACAyAACBAs/)3%...+#-;{/sCCCBCBCBBCCvLEDHysz^];&.......................................@#,'{^stAACCAs/{;-=&..............+%>;~FzAACCBts^]!-$&...........@&##$>,=*#&##$=*%&+............@#$3!|[KwEEEvAKF);->%+...........+$-;)]ryBHHBAs/{;-#+...........+@%%#%##*=#%#&&&&#%&..............+%-;)FrsABAsr{!-$&.......&=-~]/rsALGtJ/F);-*%...........", "..........................................@*-;'FQzr/{!;,%+.........................................%,;'FryACBHBCCCBCBAyzF)'-=&+....%=;)^sACCBHGLLLLLGCAtzrF)',@.......@#-;)]^sAACBAABCABAz/);*+..@#>;)/stBCCCCCCCBGGLLGHCAsr{;%........................................%=;)FzyBCACAs/{!-=*&.............&=-;)/zACAABAz/);>#&.............+@&%%%&&@.@%%%+...............@*-;)FztLELDxr{~-=#@............&$;~]^sAvLvHts/);,=&..............+.+.+@+++..+.+++...............+*-!{/zxACBAzF~;=%.......#=;~FrzxtGvAz/{~;$%............", "..........................................+&*-;|[I<[(-=*@..........................................&*>-'{F[IKPKKKKzKrQ/]'->$%+.....@%=-)]F2/QIKOwNNwPQ[])';=*&.........+#=-!)F^KzKrrrrKr/F'->@....+#=;)F^KKKJJwwOwOOOOJJO6P2~-&.........................................&*-')F/rIzI/{~;>#@@............+@#=-!(FrKz^//]'->*@...................+.........................+#>-!1-~1[6wNSJI2(;,$&+..............................................@*-!{FQKJJP[_->*@.......&*>;~:2QIPI<:~;,>%+............", "...........................................@#=c15O8<|;>#@..........................................+%*-;_|2}QIIKIIIQ[}|_;-*&+.......@$=-;~_((:[8RNN6<:(!-=**%@..........+#*=;(2QIIIQQQ[[2(;-*@....+@*>;(}[<5YRMMNMMO6P6YRR62a,&.........................................+*=-'(:2QK<[1~;-*#+............+%*,;~|}<<<[:_~;,*&+..............................................@*>9_78YR840->$&+.............@#=-~1[56O852(!-*&+...............................................+#>;(2<8YR6ea-=%@.......@#=-_:2[[<[:(;,*&+.............", "...........................................@#=0bijjib3$%@..........................................+%*>9abe47hlllhh<7ebd9>$&+.......+%*=-339cafiqqqpfd0->$&@............+%$*3_e47477744ebd3=$@....+&*=9a:47ijUUqTqqjiimjqqjg0-+..........................................&*,9cdfgjpieda;>#@............+%$>;dbgppi7ba;,$%@...............................................@#=3agiqjifc3*#@.............@%#=9af7giig7ba3>#&.................................................#=9aegjqqpfa,*%@.......@*=cdf77h77ba;>*&+.............", "...........................................@#>9agggfa9*#&..........................................@#$3c(e4klVVVVlVVlkea9,*&........+@&%#*>>9abhmooifa3>*%&.............+%#>3cdee44ee:bbd03$%@.....@#>,0dbfggiijjjiih4ggjggb3=&..........................................@#=-caemoom7eda3*@............&#,cdb7loZp7ba9,*%+...............................................+%$,9dggggd0,$&+.............+&*-c|4ll5hhfd09=*@+................................................%=9cbggiggb0,$%+.......&$,0|7klllke_3=$@..............", "...........................................&$30ab1bd09>#@..........................................+$-'{/zxtCCCCCCCBBtzF~-=#........@@@&#$--!{/xtHCxK]~-=#@.............+%$,;!)]F///F]()~'->#@.....@#>-!(]}[4hhhkhkQ^^Ik7fbd0,@..........................................@*,;!{rtvvtJz^])-%...........+&=;{/zsADLGK^{!->#@...............................................+%$30_|::(a;-$&+.............%=-'{rxCBBAxzF);-=@.................................................%>;~{:474bdc->#+......+%-!{rxAAAAs/{;-*@..............", "............................................%$-;;'';--$&...........................................+&>;)/rsAACCCCCABByzF~-=@.............+#>;'FzAAxs^]~-=%................%*,;!~'))))~';;->#&+......@#,;;~))){){{]{F]{){(__;,*@..........................................+%=-'(^JGGAsr/{!>#+...........@*;)F^syBwAzF);-#&+................................................+*,-;!'~;;-$%+..............@*,;]rtABxsz^]!;>%+.................................................+#-;!))))~;--#+........*-;{rsyByszF);>#+..............", ".............................................+%*====%&+..............................................%=-~{]FQrKKrIrr^F|'-*&+..............@#=-!{//2]';,$#@.................+&%*=====,,=***@+..........@#$>,--------;-,-,-=,=#+............................................+%*>;~1241(~'-,%+.............@=-;!(14}:~;,#&+...................................................+&#*>=>*#&@.................&*=;)FFFF1)!;>*%+....................................................&#$>-,,==#&+.........&=,;)]FFF{);->*@...............", "..............................................+&&%%&@+...............................................+#-;;~(|}}2}221(~!-**@................@**-'_(_!->#&+....................@&#*&%%&&%#&+.............+@&##*****==*=>***$#&+..............................................+@**-99'c-->$%&+.............+@*=,,-cc3-=#&+......................................................+&&#%&@+.................+@#>>;_(_!--,$%%+......................................................+&&&%##&@...........@#=-;_((_!-->%@+...............", "................................................+..+.................................................+@#,-3cc_db_d_0!;-,*@+.................@#=-9;3-=$%+......................++++.+@@++.................++&%%%%%%#%%%&&@@@+................................................+%**>>,,=**%@+..............+@&#*$>>>**%%@..........................................................+@+....................@&*=3ccc9,>*#@+.........................................................+++@++............+%*39ca_cc,=*&.................", "......................................................................................................+&**=,,3993,>>==>*%&..................+@%*>=>**%&+..................................................++@@@@@@+++@@.......................................................&***$*#%&+.................+%%#%#%%*%&@+.................................................................................+%*=-9c->=*%@+............................................................................+&#>3999c,,*#&.................", "........................................................................................................&#*$$>>$#&&@%#*#@.....................+%***#&@+.......................................................................................................................+&%%#%&@+...................@@&@%&&@++....................................................................................@&*$>>>*%#&..............................................................................+@&#$>>==**%@+.................", "............................................................................................................++++......+...........................+......................................................................................................................................................................................................................................................+.++++++..................................................................................+.+++++.+....................", "................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................", "................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................", ".............++@@@++..........................................................++@@&@@++....................+@@&&&&&@@@@@+.......................+@@@@@++...................++@&&&%@@@@++........................+@@@@@++................++@@&&&&&&&&&@@++....................+@@&&@@@++....................+@@@@@@@@+...........................................................................................................................................................................................................", "..........+&&#*====####@+.................+@%#######@+...................+@####==,=>=*##&+...............+&#*$===>===**%&@.....................@&**$*$*#%@+............+@###==>>,,,>>=*##%@+.................+@#****===###&@........+@###==>,,,,,=,,=>=*#&+...............+@#*====>$**&&@.................@%%**$>$=**#&++................................................................................................................................................................................++@@@@++...............", ".........@#=>-;!~~)!!;-,$*%@+..........@%*$>-;;;!;;;>$#&@..............+&#>-;;;)){)~!;;-,$%@+..........+@$>-;!){{))~!;;-,=#+.................+&*,-;;;;;--$#@.........@#$,-;!)){)))))))!;;-$#@..............+&$=-;;!!~))!;--=%+....+&$>;;!')){{{{))){)~!!;,=%@..........+%*$-;;!)))~';;->=#&+............+%$,-;;!~~~!;--$$%@+...........................................................................................................................................................................+@#$=>>,>$****&+.........", ".......&%#*-;!))]F]])~!;--=*@.........%#=-;;'))))()~';>*&@............@#*,-;'){]//F]{)'!--=*%@.......+&#=,-;'{F//^F]{)~;;->$%+..............@%=--!~))))';-=*&.......@#=;;~)]F///////F]{)';-=%............@%#=,;;!)){]]]]));-=&....@#>;!)]FFFF////F///]{)~!-=*&........@#$--;~)]F/F]{)~';->*%@..........+#*,;!))]]]]))!;--,*&.........................................................................................................................................................................@&#*=---;-;-;---=#&........", "......+&#*$>;;~{]1]1(~;;,>**@+......+@%$*=-;!))(({{);,$%&+............@**=--~){]}/}]|)~;-,>$#@.......@&#*>-;!)]1F}F:{();-,=*#@..............&#$,;!~)~)~!;,*&@......+&$=-;')(F}:}11F:]|_)~;-*&...........+&#*>>-;!)(]F1]()~;-*&...+&$=-')({:F}F}F}F}F}]_)~;-*#@......+@&#*>-;!~(]1F1{)!;-,>$#&.........+&**>-!)({{]|)~!;-=>#%+.......................................................................................................................................................................+&&*$>,----;--->=>*#+.......", "......@%**--;(_:}[}211_!-=>$#+......+&**,-;!((1}2}}(~3=#&+...........@#$>--!_|}}[[[}}2(~;-,=*@.......+%*>-;;_|}}[[[}}:(!;-,=*&.............@#*=-'_((111(!->$&+.....@%*>;!((}}[[}[[[[22:1(!->%+..........@%*$=-;'_(}}[[}21(!-=@....&*>;_(|}}[[[[}[}[[}}:1(!->#+......+&%*,-;;_|:}2}21(_';--=*&+........+%*>-;_(}}2}:11_'-,=*#@......................................................................................................................................................................++%#*=,;;;!!!!;;3-=$*#@......", ".....+&*>,cabff77hk77ebba9,=*@......&#>3;adbeggghigeb;,*%+..........+&*=9cabf7ghhhhhhg7bda;,>&......+&$=3cabf7g7h4hh4g7bda9,=&.............@$>-cbegggg7eb;,=&+....+&#=,;abfghhhhhh7k77eeba-=*+..........@*=3;0befgghhh77fba;>%....&*3cbef77k7hhhh7hh774ebd9=*@.....+&#>,;adbefgkh7k74fbba;3=*@........&$,cabff74k74febba09=*&........................................................................................+..................................................+@++.......................+@#$,3cdbbebeebbb0;,=*&+.....", "....+&=-cabegmmmVVVVmpm7ebac>#.....+%=-'b47kmmoononm7d9>#&..........%*>cd:47lmnmVlVVXnml7eba,#+.....%*,0(e77lpmnVVVmXmmh7eb03$+...........+#=cabgijjjjji7b9>*&....@%$-0de7lpnXlVVlVVVlkk4b0,*&.........@#>9abgipppoonXVVk4b0,#+..+*,c{4hIhlVVVhVVVlVVVllkea9=&.....&#>3abe4hmmmmVVVmpml7eedc>%.......@#=9dgiimlVVVlVlkk7}d0,#+....................................................................................+@%%#%%@+.........................................+@&%*%#&@+.....................&#>90bgippjjppppi7bac,>#+....", "...+%>;)FrzyHvvvHCHHHDGtysrF~-&....&=;)/sABHvEuEuEuvs^);,*+.......+@=-~]zytHGDvvHCHGvvvHBAsr{-%....+$-)FzyBBvDLDGCHGDDvHAys/)-%..........+#-;{^swEEuEEEDy^{;-%....#=-)]rstHDEDHCCCBCBCCAsr{!-%.......+&$-~{^syuuEvEvDGCCBy^]!=+.+%-']zxCCCCCCCCBCCCBCBCCts/);=+...@*-!]rsAAHGDGHCHHHvvGCtsr]!>.....+%*-'{rxDvGCCCCBCCCCBtz]',&.................................................................................@%*$>----->$*&.....................................&#*=---;-->*#@+.................+#-!{/zxDuuuuEuDuHtsrF);,#+...", "...@#-;)/zstHDLvBCBCGLDCtxz/);#...+&=;)ryBCHDEEuEEEuA/{;,*@.......+#=;)/sACBGLLGCBCHDLvHCAyr];*....@*;'/sABHGLLvHCCvLLGCCBsr(;#..........@$;~]rstuEEEELDA/{!-#+..+#,;)/zsyHLLvGBCCCCCCAAxr{;-%.......@*,;)FKsHEEEuLLLGCCBxr]!$+..&>!]ryBCCCCCCCCCCCCCCBCBs/);>&..+%=-)FzyACGvLvHCCCvDLGCCAz/'=@....@#,;'FIAGvvCCBCCBCCBCBs/);*...............+@&&&@+............................+@%%&@+.....................+&##,--;!~~!!;->%..........@&&&&&&&&&&&&&&&&@........&#=--;!'!~!;-,=##&...............&$-!{^sADEEEuEuELEAsz/]~-=%...", "...&*=-!(F[QPJwJJKKJJwOPI/F|;>#....+#=;)2/IPOSNSNSNOQ|!-*&+........&*=;)F^IKJwwJPKKJJwwPKI^]'-&....@%>-)F^IKJOwJPKPJwwOPKr^]!-&..........&*>-~:[6YNSNNwO<1;,=@....&*,;~][QPOwOPKKKKKzrr^F);,*&......+&*$-!)2Q6MNNNNwwJKI^F);,%...+&=;{FrIKQKKKKKKKKJJsKKr});>&....@*>;)F[rIJJwJJKKJJwwJKIrF(;*.....&#=-;(25wwJKKKKKzKsKKK/(!-#..............+@%###%&@..........................+@&&##%&+..................+@&%**=--;!!~'';->#.........+@&&%%%%%%##%%%%%%&+.......@%*,--!'~'!;-,=**#@+.............%*,-!(25OwNNNNNSwOP[2]);-*&...", "..+&*>-'(}[QQ66;_1:[<88RNNS67(;-=&.........&#=-_}[Q<5665Q[[Q586PIQ[1~-%....@%*-'_}[Q<55<[[[%.........+&*>;~|2<6ORMRS8<(;=*&....@$=-__1}<6JPI[[2[[[[}|(!-=#@.......@#>-~:7<88OOO659~(}<66,-;!_{2ee1_c-$+.......+&%%###$$$$$$$$$$###%@......@#>-ab1e:1(~!-->**#&@+..........+&*>-!(1Q5O866868O8<[21(',*@...", "...&*,;de7khhh77ebef4ghhhhhed9%.....@**3c~abffgjqUWjgbc-*&.........@$=-aehhhh77feebe77ihlhhea3%....@#*,0df474eeebeef7hllkh4ba,&.........@#=,0behhihimjZqgb9=*%....@*=3abf4hhik7eeeeee:bba;->*@.......%*,;agpjjmiig44febda93=#&....&*=3c0a_dddbbbee7hklkh4e03*@....@*=3de7hhlkh4fef47hhilkh4b;%....@#*-cdbehhl4eeebe4ipqZpiba9#...........+@%$*>,,>=$*#@......................@&$*==>,=$#&+..............+&#$==-9cabfgjjjpgd9,@......+@&$$>>======,=====**$*&.....@#,cgipjpg7bbacc,,=$%@+..........&*,;abf7hihgffghhlihh7e09>%...", "...&*9a|kVVVlhk4eebe4khVVVlkbc$+....@#*=,90adffpqUWqgb03=%.........@*>3d4klhk4f1b|eekhllVll4b;#....+%$,cdef4eebee1e7hllVVVl4d3#........+&*,;aehlVVV6XoZqibc3>&+..+@$,cde7kllVlhk444444e|d!9=$@......%#30dfioZoV5l*@....@%$=,3c090!a(b14klVVVlkea9=%....%$30_7VVVVVhk4ee4khlVVVlke0>+...@*,0de47lVlk4e1ee7loWWqm7d9*+..........@*=33aadd09,=#@....................&*=39cadda93*#@...........+%*==3c'd(147hmoWZjifa9#.....@&#,3c0c0aadadadaaaa0c9,$&....&*3agqqZnXlk4e:bdcc,=$#@.........&=3ade4kVVh7fe4klVlVVl71a,*+..", "..+$-'FrtCBCBBxszrrzstBBCBByz{,+.....%#--!_|/QsGLEuDyI{;-#+.......+&=-!{rsxszzrrrrzstACCCCCxr(>....+#>;)]//rzrzrrzsxAHHHCCAs^)=.......&*=-~]rsAHHBCBHvLDAK];-#+..+&,;)/zyAHGGGGGGHHHAAysrF);-%.....&>;)FQxGuLGGBCBAtxsz/F{!->%....+&*=--;;!'){F^rxtBCCABxr{'-*+..@$-;{rsCCBCCAtxsssxCACCCAyz];&...#-'{^zxtCCCtsszzssCvEEvts^(-.........+%$-~{/rxxsz/~;,*@.................@#>;~]/rsyys/);-*@........+%*--~)]/rsyyAACHvGGHsrF!*....@*-;)F/rrrzzzsszszzzzr/F{;$+...&=c1KAGGGCCBHtAAsrF{!;->#@......@#-~]^zstACtxsssACCCCBCAr]',@..", "..+*;~]zyCCCBBysrrrrzyABCCCxr{-+......@#--!){^KtLLELxr)!-=&........&$-;'{F////^^//rsABCCCCAyr)=+...+@#-;)){]F/^/rzsAGvGCCABs/)=+......&=-!)/ztvvGCBBCGLLtz]~-=@...#=;)/zsACLELELLLLLGHAxz/{;-#....@#-']^zxHvLvBCBCCBAyzr/]';,#.....+@**>-;-;''{/rsACAABts^)!,#...+#-'{/sBCCCACAysssAACCCCCtz];%..+#-!]rzyABBBAszzrsstGLELHs/{=@........+*-!{/ztHLLtK]'-*#.................@$-;]/sxGGDAK]!-,%......+@%#-;!)FrsxBABCCCCAAysrF)-#...&*=-!]rsyAAyyAAABAAAAtAsz/)-%...@=-!{^zsyBCCLLLvAxrF)!;--=&+....@*-!]/rzyAAAsszsytBBCCCxzF'>&..", "..+&=-!][KzKI^/]_)({]F^IKzK^|;*........+%*=-'(25SwwOQ|;-*%+........+@#$=--;;;;!'~){F^IzKKKr2(;*......@%*=,--;~)(|12IJwwJKK^F)-%.......&*>-!(2KOwJIQQIJwO<1!-=&....@*>;)][IPwwNNNNuNNwJIQF(!-*&....+&=;'{2[PwwJKKIrKrQ/2()!->*&.......+&&#$**>-;~{FrKzr^FF~;=$+....@*>;)FQrKKKrQ/FF/^rKzKIr^1!$+..+&*-!{F/rIKK^2]1112IOwwO52(;*..........%$-'{[#@..................%=-'|[POwwO4_-=*&.....+@&**=--!{F[rKzKzKKI^}}1_;>%+...+%*>-)F//rrrrrrrKrr^rrrQ/(;=@....&==-c(]}QKJwNNwJQ}{~;;,=$%+....+&#=;~)]FF//}]]2/^rKKKK^{~-#...", "...&$-!([QIIQ[|(~';_(|}[IIQ2(;*+........@%*-9_1,,;;'(|}QQIIIQ1~-%......+&%#*==-;'_(11<6OOPIQ[|!-%......+&$,-'(|<6O8<}}[5O8<1'-*%+...@%*-;(1[6MNSNNSNNNY6Q[}(;-*&.....&*-'_|[@+....@%*-;|[[QQQQ[}1:12[QQQQ[}_;*....&*,-_(}}QIQ}:|((1:<6RSO<:~;*+........+@*=;(2--;!(1}QIIKIIQ[}((';>*@....@%$=-_:[QQQQQQQQQQQQQ[Q[}(!,%....+&*=-;~1}Q8YNNR8<}((~;-,=*%....+&#>=;!_(1||((((:2[QIIQ2(;>%+..", "..+&*3cb7hkhk4ba!ccadb44hhk4d;#.........+&#=30biqWWjgdc,*@...........+@%%#*$=>,;aab17khlhh4d9=&.......+&&%*=,;abffgiqqomk7fd9=&......@%*39abfipomh77gpqjib09=&....@%*,;abeioqWUUUqWqopih7fa;=#....+%=3abb7pqqomikhkhk77fbd;,*@...........@&%$*3cde75h7b|a;=$@.....+#$3cb47khikiggeggiklkh7e03#....&*,;abe4hkh7bbbbbfijWWqifa3*.........+&*,cdfijZqpga9>$@.................+&*-0bfijZqpea3*&+.....@#*=9aadbf77hhhhhh7fbaa;9=#+....@#>-9df7,9ae7ijqqqpg4febba0,=#+....@&*>99aadbbb(bbe77khhk4dc=&...", "..+*=9_e#+...........+@##$>>-ca|e4hmnnVlk4b0=&.......+@%$=-9dfgijjqWUZmlk4ba3%......&*-;be7klmmmh7klnZqiedc,#....@%$30db4hmMnppjoonZXopmib09#+...+#=c(e7hmZWZooonmVlmmpigd9,%..........+@&#*,c_b7mnmhfda3=*@.....@#>9~b4khmnooojjjjoomlk4ed9*+...@*>0d:4hmnnk7ee47hpZUTqpgdc*+........+%>3ab7hXnnm7d9=%&.................+%*3a14lnnnm7a9>$@.....&*>;de77hmpXmVVVkk41d0c9=*&+....@*=9deklVVVVVVVVVVVVVVVVk4d9#......@#$=900e7ipppmVVimiigedc>@.....@#=,9c0_d1ee4hlmnXVVh4bc3#...", "..&=;~/ztCCCAAsr/F]/zstCBCBxzF,+.........&>-_:IAEEEvyQ{;-$@............+%*=-;~{^zyAAvvvAAszF);&........&*>-~]rsHuuuuEEvGtysrF'$....+#>-)]zyBACCCBBAAAGLDts/]!>@...&*,;)F/zxBGHtAxtHBGLLDDtKF',&...%-!{^sxCGDEEELLDGHHGDvvyK]!=+.........@&#>;~{/zxGvvtz/{;-=&.....&>;)]^zxtGuEuuuEEuEDGHxxz^(>+...+=;{/zxAvDDHysyyBBGEEEuDs^(-.........&#-']rsACHHyr]'-=%+................@*-!]rsABHHxK]~-=@....+*;~FzxCAHGvDHBCBxs^F{!;;-$@.....&,;)/ztCCCCBCCCBCBCCCBCCBs^(>......@%>,;~{FrssAAHHHHDvDHxz/~$.....+%=-;!)]/zsxttGDDGHCts/)-*+..", "..@=;'FzACCCCtsrF]]/zsABCCBAr{,+.........&=;)FKxLLELyr)!-=%.............&*>-~)/rxABHGvvAsz/]'>&.......+@*,;~]rJxuuuuELvAAxsrF)=+...&$-')/sACCCBCCAAtBGLLHsr]);%...@*=;!)F^stAxszsyxCCGLLDGzF)-#...&-;{rsAAGLELLvvGHCHvLLEtz]'>+.........+%>-;)F/syHGGyz]);-#+....+%>;)FzsABHGvDLuDLLLGHAyyz^{-+...+%;)FzsAHGGHtAABCHvEEuuGs^),@........+*>;)FzstAts/)!-*&+................+%=;)/zsAAxs/);-#@....+=;)FsACCHLLLGCBBsr/]~';-=#+....+#,;)FsAACBCCBCCCCCCBCCCCBxr)=+.....+%*=-;']/rssxACCGLLLGAs/)=+.....+%>-;)]/zxBCCGGGACAyr]'-*...", "..+%>-']QKKKr[F|_;'_]/QzKKK/:!*..........@%=-!:5wNNOQ|'->#@.............@%=,;~:[6OOJ8P<[1)'-,#........+@&#>-;_:4h5lPPJPKIQ/})-%....+#>-!:QJwOJJzKrIIKOww6[})!-&....@&$=-;'){]:|(1]F[IJwww6}(;,&..+@=>;)F[IPwwO6PPIQIKOwww5[_;*...........@%>-!(:}QPPI}(;-=*&......@*,;)}^IIKPJ66P6P6JJPKr^/|;$.....@=-')12IPJOJJJJPJJwNNR5}(;*.........+@%>-;~){{{)!->#@+...................&=-;~){]{)!-=#@.....+%-;)/IKKJwwwPK^/F|';-=$%&+......@*=;)F^IrKKKKKzKKzKKKKzIr2);%.......+&%$>-;_(]2/QKJOwNwOI2{;%.......+%*=-'([IJJJ6PPQ[F{);,*&...", "...&*-'|[QII[}1_;-;__:}QIIQ2(;*+.........@$*-0(%@.........+%#*==9'_b124<%...@%>,_(}[6YM6<[}[22<6YSY51~;$+..........+%*-'(:}[Q<[1!-=#&+......@#>;_1[QQ$#&+....................@&*=------>*#@+......&=;~1QIKPOYO6[}}|~;;==*%@.......@#>-!(2[Q[QQQIQIIQQQQQQQ[:~-#........+&#*=-;'~|:[IPOSNS8<:_-%........@%#=-_28YRO6<}|(~;,>*&+...", "..+%*,cd4hhlk4bbaccad:77hlh4b;#..........@$=30bgqWWjgd;,$%@............@#*=9abfiqTUqigba;,*$%@.......+&%*$$>=,90abbe7hhllkhea-#.....&$-cbiqUqomhhhhlmjqqpkfba9%....+@%*$=>,,,,-39aabfiqWqp7d0,&..+&$>90bfgmqqjffbfbf7pqWqpfd9=@..........@#*3abe77h47bc9$*&......+@*=3dekhlhhhhefff7hhlllk7bc$+....@&#$-cdfhiqTTTqpmnqWWqifa;#..........++&%*$>>==**#&+.....................+@%*$>>=*=$$%@......+&=cae4lVnoqomg4fbbc;,$#&@.......@*,cabf7khhhhhhhhhhkhhhk4ea3#.......+@&$*=3cadbe7hmoWTUjiea3%........+%$>3agjUUqi7bdcc,=*&+....", "..+#=9~ekVVVlk4:dd(bb4kVVVVk|0*+.........@*>3aeiqWWqiba9=$&+..........+#*-c_b7ijqTUqm71dc3>*&@.......+%*>=,3-3c0dbe4kVVVVVl7b9%....+#>caepqUWZXXVVVVXZWWolh7b0*....+%*>,,3--3,-90_bbhpZWWpgba,%...&*-0(e4lpWqjif4eefhpZWZpgb03&..........&*30(47khllk:a3=#@.......%*30(7VVXVVVhk444klVVlVVkea,@....+&#=,cd4kmqTTTZnXXZWWZi7d9*+..........+@%#*=,>=>$#&@.....................+&%#$==>>$*%@+.......#>cd4hVVXZZoXlh74:ba;3>*%+......&*3cbeQllllVVVVVVVVVlVVlh4d9%.......+&*=,90dbe44hVXoWUWoi4d9#........@#*,9bgqWWZp7edc-,$%@.....", "..&=;)FztCBCAAszr/^rzxACBCBtz],+........+#-;(FKtEEELtK/);=#&.........+%-!)]rstGLLELGtsrF);->#@......%=-;)){))~)]//zyACBCCBBs^{=...+%=;{^KtEELvCCBCCCGLEEvHByz]-...+%>;!)({~~~'!~{/rzyGEEEvyrF!*...%-;)^sxAvEvvtsssssyGEEEHsr];%.........@$-~FzxACCCAyr]~;=#......+*-~]ryCBCCCBAyssstCCCCCCBzF;&....@%$-;)/zyAGDEEEGHvLEELHK^(>+..........+&#>,-;---=$*@....................+&#$=,---;-,=@........#;)FzxABHGvGGHHBAyzr]{!;>*&.....%,;)/stACCCBCBCCBCCCCBCCBsr(>......+*=-')F/zytHAHBHGvDGGxzF!*........@=-;(^yGvDDCsrF~;-=%+.....", "..&>-~FzyCCCCByzr^^rzytCCCCyz{,+.......@#=-!{/sALLEGAs/);->*&.......@#-!)F/KAGvGGHHBys^]);-,%+.....+#>;)]//^]{{]/^zsxBCBCCAy/)=+..+#,!{^sABHHCCCCCCCGLELGCBtsF-@..%>-!{F//F))~~){/rKxGLLLDxz]'*..+%>!)/zyBHLvGyszzssyGLLuGyr];#.........&>-)FzABAACBxr]'-#@.......*-!{rxBCCCCBAxsssyBCCBCCtz];&....+%#>-!{^zsAtHACBCCGLLDts/)=+..........+%**>--;--,*#%+....................&#*>---;---=%........@=;)FrzsxACCvGLvHBBsrF{~;-=%....%=;)/zACCCACCCCCCCCCCCCCBx^(=+....&#=;;)]ryAGLLGHCCBBtssr/)-%........+%-;)}sAHHAxs/]~->%+......", "..+#=-~]QKKKK/[F|{(]F2/IKKK/]!*......+@&%*,-!_25wNNO<1(;-=*%@......@&%=;~(][8wwJPII[2]~;-,**@......@#*-!):]|(~'))(]F/rIzKKr[);#....@#,;_][IKKJKJJJJsJwwwJPK/F)=...&*>;~{]|(~'';!'(1:Q6SNS8[|!-#...+#>;):2IPwYPQ}2F:}Q6wNw6[|'=+.........&*=;)F^rKKrQF(;=$&+.......&=-;(^IzKKrr//FFFF/IzKKKr:'=......+&$>,;~1:22[[Q^QPwwww5}~-%...........+&$**=>=,>$*%&+....................@%#$>>,>>=$$%+........%=-;!)(]2QIOwwwwKK^])~;-,*&....&$=-']^zKzKzKzKKKKKKKzKrI/);%....+%*=,-!(FQPONNNJPI[2]_~;;-*+........+@*,;_:QIII2{!;,*%+.......", "..+@>,;(}QIIQ[}:1((_:22QQIQ2_-#+......@%$>,-0_15YSS8<1_;->$*&+.....+&$>-~(|}5YR6>$&+.....@#>-c(|:1(~_~__(1:[QQKIQ2~-%....+%*,c_:[QIIQKIPKPPOSROI[[1'$+..@*=-__|:1(~~~___(1[8YNR8}(;=@....&=-!(145YY5}1(|(:48YSY5e_;*+........+@*>3!|[[QQ[2:~->%@........%*,;_}QIQIQ[}||||}2QQIIQ[1;*+.....+@**=-;_((||:2}[56SS87(;=#...........+%#>>-,-===$%@+....................@%**=>--->**%@........+&#>,-;~(:<6wwwJPQ[:(~';,>%....+%$-'(}[QQQQIIIQQQQQQQQQ[{~-#....+%*>-;'_:[5OSNS8<2:_!c-=$*&..........@*$-!|}[Q2|~->*%+........", "..+@*,;de4hhhh7feb:bf77hkh7ea,%.....+@#**,;cabfiqTUqiebac3>=#@.....@%*3cdffgjqUjih74fbba;3==%@.....@*=9abf7ff1bdbdbf4ghhlkkea-%.....@#=9abe77khlllmmoqWqjihfb0>...@*=3_beeeebbbdbbffgjqWqpfdc>@....@*,;abgiqqigebebfgpqWqmed9*..........&*,;af75hhkfb'-$%@........&*=caekhlhhg7febf47hhllh7bc*......+&*>=3cdbeeef77gmjZqogd9=%..........+&*=-;0a0!c3>$%@...................+&*>,9;a~c0,=*%+........+&#*>39ab7iqqopmkh7fbd0;,*+...@%*,;a:f44747777k4k74774fba,%...+@$,cabbf7kmjqqqp7fd03-,*#&+..........@*$9cb77k4ba3>#&+........", "...@*>9aekhVVmmikkkhlmmVlhkb03#.....&#*-0ad:4gijUTTqph7e1dac,#+....&*,0bgimjqWWomVlkkk4ebdac>#+...+#=-aeimmmikk4[4khmXXXVVh4d3%.....+%>-0dbe7khllXVXZZUWoVlk4a$+..&$-'b4khilihk7kkimpnZoqifa9=@....@*>cad4pqWjlkhhklmoUWWpgb0=+........+%*,cbgmXnmh4bc3=%@........&*-c(4hVVXXmmh,0a1477kkhlmmnonomgbc>&..........+%>9abeggged9=$%@.................+%*,;_b7gigedc>%&.........@%#$>90df4iimVVVVmmiifbc3#...+#*=3adbe4e4e44e4e4e4eeeba;>&...+#>0bgiiihlVmjjihfba3,=*#&+..........+&*=3_eklh7:a;=*#+........", "...&*-!]^sxBGGvGBBBHGvvHAxs/{;*.....#,;)/zsyBBHvuEuEvHABxsr]~,&...&$-~2swDLLEEEGHCCCBCAtsz^]!,&...%>;)/sHDDGHABCCABHvDvGCCAzF!*......&=;!)]/rzxBBBCBvLELGCCAs]*..+#-!]zxACHvGHHBBHGDDGGHHAI]'-&....%=-;_FItEELvCACACGLEEvtJ/{-&.........*-!{rxDDvvyz/);-#@........%>;)/sABHHLGvCCACHvDGHCAxr{,@....+#,;)]rsAABACBHvGDGBHAz2)9$.........+#-!{rsAvDvwV]!-=%................+#>;~FzxAvDDwz1;-#@........+#*=-;~|:/rKsxAHGDDGGyzF'*....%=-;!)]F///F/////F//FFF{!;-&...%>!2yGDGvHHBtysKr/{~;--$#@...........+#,;~FzxBBxzF);,*+........", "...@=,;)/zstAGvvBCCCGGvAAsz/);*+...+*-;]/zyABCCvEEEDGCCBAxz/);*...%>;~FsHGLLLLLvCCCACBCBAxzF)-#...&=;)}swGLvGCCCCCCHGvGBBtxr{-#......+*$;;)]FrsxBCCCCvLLHCCyr)*..+#,']ryBAHvvGBCCHGLvGCBAs^)!>@...+@#=;;{IyGvvHHHCCBHGGLDAzF),@........+%-;{QyvLvGs^{~-=#+........@>-!]ryABBvvGHCCCGGvHCBysF)>@....%$;'{/ryACCCCCHvvHCCtxr{!-&.........@#-~]rxtGvDHy/)-=#+...............%=-;{/sAGHDDGsF'-=%........++&#*>-;){F/rstttGGDGyzF)$+...+@*=;;'_)){{){({{{){))~;;-*+...#,'FJtvvHCAyszr/F)~!->#&+.............%=-!]ryBByzF~;>%+........", "....&%*-;~(:[-'{F/QrIKPJOOOPKzrr/});=%...+#>;_2<8JOwOJJJzKzKzzr^/F);=&...+%*-~1QI5PKKKKKKKPJPPI[F{'-$+.......@&#==-!)]/^IKKJJJJKKr[];#...@%=;~{/[IPJPKKKKPJJIQ[F{~-$%.....+&%$=-_1,;')12[<<<}:_;,@......+@#**,-=,-,->>>->-,,==*#@....&*,014<<[Q}:(~';;->=*@+...............@*>-!{//r2{!,=%+.........", ".....&#*=-;_(2[QQQIQ<[21_!->*%......&*=;(:2[QIIIIPPPIIQQ[}:~-$@...+@=-c|[&.........+%%==-;_1}[IIIIKI>3a(:}QQIIII[Q}}:(!-=%..........@%=3!|[<<2(;,>#@...........+&*=-;!(1[QQIIIQI*&.....@*>;!(|}QQIQII<[}1(_';,=#&..........+%*,;(1[<<<[|!->#@...............+%*=-_45O65Q4:_;=*&...............+&#$>=,,;cca_a_9->#+.......++&%%%**%**$$$%$#%%#%&@+....+&*,90_____;;->=**%@++................+@#=-!:22}_->*&..........", ".....+&#$>,3abe4hhhh7ffdc9,**&......@*=9(ee77hhlkhkhkhk77f:a3$&...+&*90b4khhhhlllhlk5kh47f1a-*&....+%*-9adbf7hhhkhhhh4eda9-=#&..........@&$$-0_b47khhlhhk77eb3%....+#$>-9ab47hhlhhhh4bd03,>*@.........@#=-cabf7hhhhh74bbda9,*&..........+%*,cdf74fdc=*&@............@#*=39ab47hhhlhhh7e003>*%@.....@*=90dbf4hhhhkk7edcc-=$*&+...........&*=cdb47hh4b0,*%+...............+%$=9agjqpk7fb03=#@.................+@#**$>-33999,$*&..........@+++@@@@@@@&@&@+++........+@#=,399333,==$*&&@....................@#=3a14fb_3$*@..........", ".....+@%*>,9cde7kllk74:dc3=*@.......&*-0be7kllVVVVVVVVllk4edc=@...+%=-cb4hlVVllVVVVVVIl9a|7klVVVVlk7|ac9,*%+.........+#*=3ade4kklllh4ebd03**@..........+&*,cde44e0;,$#@............+@%*=90d4klVVlllk7|a33=$#@.....@#>3cd:[klVllhk4ed03>>*%&+...........@*,cae4kkk4b;,$&@...............&#=9afioZol7e|a3>#@...................+@***===,*=**#&............++.+.....................@&#=9993,,,$**&@+.....................@*>3ab44ea9=*&..........", "......+%#>-')F^zxxtxzr/]'-=#+.......#=;~FrsstttBAABBtAAyyzr]'-&...@$-')/zxtAAAAtBtBABtAysz/]!-&.....@*9'{F^rsxtAtAAAyzrF~;3$@...........+@*=-~]^zsAtBttAxszrF~*....+@#>-')/zsttAAtAxzF)!;-=%...........%=-;)]rzxtAtxsz^/]_;=*@...........#,;~F^zr^{'-=#+..............@*-;)FrsxABAAtyz/)!;-#&......@#-')F^zxxAttysr^F);->*&@............+$;)]/zsxsr/~;=#+..............+*-!{FztvvHtsz/{;-=@....................+&%*$>,,=$$%&@.....................................@#*=----->,=#&+......................+&$-!{/rr/{!-=%..........", "........@#--!)]F/rr^F{{~;=#+........+#-!){/rrzszzzszzzzr/F]);$@...+%,-~)Frzzszzszszszzzr^F]';*+......%$;!){{Frzzszzzr/]);->%+............+@*-;'{F/rzzzzzr/F])-@......@%>-~)F/rzzrrr^F)'->*%+..........+&%*-;){F/rrr^/F])';-*&+...........&$>;'{]]{~;,%+................@$;;)]/rrzzzr/F)';-##+......+%=;!){Frzzrr/FF));;$#@+..............&>;){F///]);-$@...............@$-']/syBBtz/F{';$%+......................++@%&%#&+++.......................................@%%*=>=*=#@+.........................+%>;')]])~-=#@..........", "..........&**=--;;;;-->=*@+.........+@*=--;''~~))')~)!!;;-->*&.....+&*>--;~~~)~~~)'~)~'~;;-=*&........+%*=---;!~~)~~!;-,=*%+...............@%$=--;'~~)~'!;;-,%.........@%$>-;;!~';!;--$#@+..............++@*=---!;!;-,--$#&+..............@#==---,=*&...................@#*>--!!~~!!;--$#%+..........+##---;'~';;;--=##+.................+@%=---;-->=#@+...............+%*-'(1}[[2)!--$#+...........................................................................++.+@&@++.............................@#$>-->=$@+...........", "..........+@@%%%**#%%%&@++...........+@&#**=,,,=$>$>>,===**%&........@%*>>=,-,---$$=$==$=**#&..........+@&##=>,>-,>>=$#&&@+.................+@%#====,>>>=**#%@..........+&***$=$$**%%&@+..................@@@%*%***#*%%&@..................+@%%%*#%@.....................+&%*=>=>$*#%%&@+.............+&%*>>=>>==**%%&.....................@&#**#%%%&@@.................+**-;;~((!;,=*&+...................................................................................................................+%#*%**&+............", "...........+..++@@@++++...............+@@&&%#%%&++@@&#%&&&@+..........@&%#####%%%&@+@+@%&&+...............+&&%%&%###%&&+......................++%%#%%###%&&@+.............@%%%#%@+@+++.....................++.+++++++.+......................@&@@@++.....................+@+@@#&&@@++++.................+@&%%#%&&&&&++......................++&@@++.+...................+@&*=>,,,=*%%&+.....................................................................................................................@@&@@+..............", ".............................................++.....+++...+.............+.....++........+.....................++....................................+....+..................+...............................................................................................+..+............................+.+++..............................+.........................+++.+++++++++..........................................................................................................................................", "...........................................................................+................................................................................................+.+.................................................................................................................................+..............................+................................................................................................................................................................................", ".............++@@&@@@@....................................................+@@+.+.........................................................................................++@@@@&@@@@++...................++@&&@@@@++@+.....................................................................................+@@@@@@@+........................+@@@@&@@+................................+..........................................................................................................................................", "............+@%#&%%&&%@...................++++.........................+@&+&@@@@@@+.........................++++@+++++++++.............+@@@@@+@+.......................++&&@&&&%%&&&@@@+..............+@@@@&&%&&&&&&&&+.......................++.+@+....................++@@++....+.+@&@+...............+++@&&&&&&&&+.......................+&@&&&&&&++...............+@@+@@+++++++@++@@+................++@@@+++............................................................................................+..@+..............", "..........+@&%#*$*###%@+................+@&&%&@@&&&@+.................@&%&%&%%&&&&&%&++....................++@&%&%&&&&&&&++.........+@@%&&%&&#&&&@@@+.................@&%&&%%&%%%#%%&%@&@+...........+@&&%%%###%%%%#*#%&@+..................+@&&%%&&&@@@++............+@&#%%%&@@@@&%&&&%&@@@.........+&&&&&&&&%%%%&&&&@+...................&%&%%&%%%%%&@+...........+@&&&%%&&&&&&&&&&%&&%&+............+&&%&%&##&@@@@+...............@@@+............@&&@@@+..........@@@@@@+.....@&@@@@++..................@&&%@&@.............", ".........+%%#*$=>===$**&+..............+@&###$****##&@..............+@%#$$*$$$$$****#%&@+.................+&%%#$$$$**#####&+.......@%#%*$*$$*$*$**#*&@+.............+@&#**$$$**=*=*$$$$#%&++.........&%###*******$>$=****#%@+.............@&%%##*$$$***#%&++........@&#*$*$*#$#%#%#*#*##$%%#@........@%%#$$****$*$*$*###@@+..............+@&*#******$$*#%%&@......+@@%##***$#$###$####$#*#&+..........&%*#**$**$$*%%%&+.............@%%%#%&@+......+@@##%%#%+.......+&#%#%%%&@@+@@&#%%#*%%@@.............+@&%$####*&@@..........", "........&**=,990aaa0c9,**@+...........+&#*==,3333,,==#%............+&*>>33c9cc0cc33,,>*$%@+.............+@#*=,>,,3933,,=,>$*&.....+#=>3339ccccc3933=>*#&+..........+&*>=3393c99c;ccc9933,=*&+......@%*=,,-39ccc0009c9cc933==#+..........+@#*=>,3333333,,>=*#@......&#$=>=333-,=,=>>>,,,3,-,=*+......@%*>>,,339cc9cc333>=$*%&............@##>>33c9ccc939-3>>*#+....@%$==,,3933,,,>==,,,,,,>=*@.......+%*=,3399cc93,=>*#&+..........+%*=>,=>==##&@@@@%*$=>,,=*#+.....@#*=>,,>***%#*$==>,,,>=>#&...........+&**>=,,,===$*%+........", "......+#,;'){]/rrzzr^F{;-$#@.........@#>;;~))]F]]{{~!--&+.........+#=-!){]FFF/^^/]]{))!;,$#&+.........+&#>-;')){{]FF]{{)))';;#+...#-;))FFFF///FFF]{)~;--*&+.......&*,;~)]FFFF/F/^/^/FF]])~;,#+....@*-;~){{FFFF//^^//FF//]{)!-$+......+&%$-;'~){{FFFFF]{))~!;=@....@=;'){{{F]]{))~~)){{{{{{{);$+...@%=;;)){)]]////FFF{{))!;,=@..........&$-;~){]/F////FFF{));,#...+#-;~){{]]]]{))~~)){{{{{)'-*+.....&*-;~)]FFFF^/]])~;-$%.........+#,;!~{{{)~;->=*==--')){{)!-*...@%=-!)))))';;---;'){){{))';=@.......&#*=-!!)){{{{))!;>$%@+.....", "......%=-')]/zxtBHHAxr/);,=*&........@=;~{]F/rzzrr//{'->%.........&$-;{Frzzzzsssszrr/F{~;--*&........@#*,-~)]F/rrrzzz///FF]]~-&..@>']F^rzzzssszzzrr/F)'--=%+......%=-']/rzszszszssszzzzr^F~;$&...+#>-)]//zzsszzssssszzszz/F]),%......@#==;!{]//zzszzr///F]]);=+...#-']F/rrzzrr/F]]]F/rrrrr//]-@..+**-~]F^/rzzzssszszr//F]~;=#+........+#=!)F//zzzzssszzzr/]]!$...+$;)]//rrzzr//F]]F//rrr//]'-%....+%>-)F/rzzzzsszr/F)!-$#+.......#>!)]//r//]);;,-,-;~)F^r//F),&..%=-!{F/^/F])~;;!)]F/rr//F]);%......&#*,;))F/^rr^//F)!;-=*#@....", ".....+&*=;!(F[KJwwwOI}{'-=#%@.......@%*-;)(]}}/2/[F]~;-**+........@*=-)]}/2/[/^/Q/[/2{)';,=*&........@#$=-;~_F}/2^Q/[/}]1{_)'-&..&=;){F/2//Q//[/[/}/|);-=$#@.....+&=,;)]}//Q/Q/Q^/rQ//[/F{!-=&....&*-;(F//[//Q/Q//Q//[/[/F])!>&.....@%#>=-;)_F}/[/Q^[F]1]_)~;$@..+%,;)(]}//[/2F|_)|]}//^[/F]_-@..+%*,;)]F2//Q^I/Q/Q//}]|);-*@.........+#$-~{FF[//[/Q/^[//]|~-*...@#-!):F[^[^[}]|(({]}/[//]);=&....+&*-;(F/2^/[/Q/[F_~;,*@+.......&>;~(]:F/})';->>>,-!)]2/2F(~-&++%=,;)]}F:](~!;--!)]1F[FF|);-%.....+&**=-;)(FF}/2F1{~;->$*#&+...", "....+&$*-;~(}Q56MSSO5[|_->*%@.......+*=-'~|:2[Q[Q[[1(;,>#&........@*=;_1[[Q[Q[QQQ[[[}1(~;->*%+......&**=>-;~1:}[[Q[[[}1}1|((!-%..@,'_(:[Q[[Q[QQ[[[}}:(!--,$*%.....%*-;(1}[[[[QQQ[Q[Q[2[}1|~-=%....&*,!(:[[[QQQ[[QQ[QQQQ[[}|(;-&....+&*$=--!_12}QQ[[[[}}:11(_;=&..+#>;~1}}[[Q[[:|(((:}[[[[2}|(-@..+%$=;_|}}}[[Q[QQQ[[}}1|(!,*%.........@%=-~(::[[[[Q[Q2[[}1(~-#...&$-;(1}2[[[[21(|(|:22[[[1(;=&....+&*>!(}[[Q[QQ2[}}1_;,$%+.......%=-~|:}}}}|_'--=>-;~(1}2}11~-&.+%*,;_122}1|(!;-;'_|2[2[}|('-&.....&#$>,-!_|:}[[[}21('--,$*%+...", "....@%>,;adb4hloqWqqpgfbc->%@.......@$>-adee77hkhgheba-=*%+......+&>,cdf77hhhhh7hh7k74bbba;,*@.....@%$>9;adbf77kkkhk7h77ffeba;%..@>adf47hhhhhk7hhh77febaac,=*+...+#>3abf7khhkhhhhkkhhhkh7fdc=#....#=9aefhhhhkhhh&..@*30de77hhh74febbbe7hhhhh7ed3@..+&$-cdbe77kkhhghhhh77fbdc9*%.........&*=3a:f7hk*&...", "....&*,cde4khllnoZqqoml7b03>#+......&*30(e4klXpppnpm7bac>*&+......#=9d4klVVmXmVllVVlliligfbc,#+...+%=-!d:e7hilllllVlVlmimlkkea$+.&>de7hmpXmVVVllllllhhhg7fdc=#...+$,0|49de7lXppmVlk4447ippmVVk4dc*....&*,c(4#&......+#3a14hmnpmh7eb_a~db47mmppl7bc#.@$;abhlXXmmihebb|e7hlmmmiked9#...@#=ccd:f4hihllllVllhhg7fa9,#+..", "..+%=-!]ryBACCCHGHHGGvGxz/{;,#......%>!]rxtBGDLEEuEvAyrF~-$@.....+>;{^sACAGGLGHCCCCBCGGvvAJF),#...%-;{/syBHGDvHBCCCHHHGvvvHAx/-&.&;/stvDLvvHBCCBBBBCCHGvGwzF'>@.+%-~]rtCCHvDLGHCCCHHGvLDDtJr];%..&,~FzyCCHvvGGHCCCCHHGLLvGCtsF-..+*-~FrsABGGGGHACCCHGvDuvGAAs)*.+*;)/stGGLDvHCBxssyACHGLvDGtsF>+.&=-~FzsAACCGvuvEDHCACCxzF);$@........%-;{ryBCCCBGDLvGCBCBxz{,+..$!]rstGLDLDHCCBAtBvuLvHBBxr(-...&$3~]rxACHGLDHHCCAsz/~;*#+.....+=!]zxBDELvGCAsr^rzxAHvELEvAz(=+@-{/ztvuDDvGtyzzzstHDELLGAyr(>..+#-']rsyBHGvGHBCCCCHHDvGwz]~,&..", "...%>;~]zxBCBCBCCCBCGDLAs/]~;*+....+%,;]rsAAGGLLELuuvts/);,%.....@>!{rxBBCGvLvHCBCCCCGLLDvs^);%..&$-!]zxCBGGvvCCCABCCGLLLvHBy^;+.&;/sBGLLLGHCCCCCCBCHGDDDts/{;#..%,~FryACBvLvGCCCCABHvEuEGyr];#..&,']zyACHGLLGBCCCCCCGGLvGCBsF-@.&>;)/sBBHGvGGBCCAACGvDDLGHAs)%..%;)/zAGLLLvCCAAysxBCCvLLLvHsF-++@$-']rsABACHvLELLGBBBAyzF'-#+.......+%-;]rsAAACCGGLvHCCBByr]-+.+$;{/sAGLLLGBCABABHGLuvCBtsr)=+...*-!]ryBCHLLLvCBBAsrF)-$&+.....+>~FzyGLuELHBAxzrrsyAGLuEuvtz]$+@,(/JAGLDuELGAszsyBAGLELvHsr)=+.+*-)FztCCGvGGCCCABBCGLDvtzF);#..", "...%*-;)FrIKzIrIrQIIJwOP}|';=#......+#=;)][QIJOwYwwOPI[{~->#.....+#=;)FQKKJJwJPIIQIKKJwwwOQ(;,%..@*,-_2KJJJJJPIQQQQQQPJOOJPK/)=..@>_}QPOwOJKIIrIrIQrIJwNw8<|'-&..@#>')/QKKJJJPIQQrIIIJwNSP[|'-&...#-!{/IQKJOJPIQIQrQIJJOJJKIF~#+.&*-!1QPJJJJPPIQQQQQIPJOOJKI};&..@=-~:[PJwOJPK^/FF2^IKJOwO8<2_$...@*,;){F/[QIJNNNOII^/F]);-#+.........+#=;)]F/[QKPJJJPKIr/F_;*...%>;(2QPOOJJKKzrIIKPwJPIQ/:);#....@*-;)F[/IJSwOKQ^/]);-*&........*-~1[6YNNNOKI/F]1/QIJwNNN8<1!%.+$;)29!(|Q-'(}[QI5P<22:::}[8YSY64(c=@...%=-!|}[Q-;!~|:[6YSY8<:|(!;->*@..........+@**-;~((:}QKPQQ[[2_~;>&...@$-'(}QIP6K;_1;_b47hlhh4eeeefgmoWWjgba-&..+*>cbiqqqpg7bbd_0aade77hhk7e9@..+*9ab45lmi74bb(ddbbgiqWWoied3%...@*3cdef4hlihf:b:bfgpqWqpfd;=&..+@*,cdefkhlk7e:bbbbef7k4h74b,+..&*3agpqWqmgfbb_a_adbf7hhhk7e3@..@%=9ab4klllk74:b|be7kkllhhed9#...+@%$=,39abfiWUqpgbd0;>=*#@...........+%#=,9c~db7hhhk4f:d0-=&...@$39df7llmih4hlmmVlhhfdac-=#+.....@&$,30dfiqjpfbdac,=*&.........%,cafgqTTTqik7eb1fkimqTTTjfd3@.+*3ab7hlmoWqji774ffgiqWqjgba3#..@#-cfiqWqpgfed(ddbbgiqWqogfd3%..", "..+&=3cekVVVllQkkkkmnWopk4ea9=%......&*>90de4lmXXXVVVlhed03$&+...+%*,9de7klVVlk74444hpZWWoiea3%..&*9afpZWWoV7ebd_000ae4kkhhh49&..+$cdekVXXml74bdddde4pZWWomkb0#...&>9'bekkllXlk44e44hnZWWpgb0,&...&=30bekhlVVl7e}eee4khkhllk13@..&=9dgoWWZnl4eddaaad:7kllllke9@..@$>cdekhVVVlhk4ee4[klVmVlh4d;#....+@%$,9cdbgpWUWjg:da3,$$&+...........++%$>,90de7lVlhk4ed09$&...@*30d4lVXXVlllVnXXVVl4d03,>%.......&*=90dfmoqmgeba;,$#@........+#-0dgiqTTTWnVk774klXoUTTUjgb9&.+*;aekVXXqWUomlhk74inWWWohed9%..+#3afpZWZnl7eb0addb7nZWWomke0*..", "..&$;~]zyCBCCCCBCCHHvEDGAyz/);#.....&*=-)]^zxCHHGHHCCCBsr])-$@...+$-;)/ztBCCBCAAtAtABHEEELtsF'%..*,)FKAEELGAsz/{))~){/zsxyxxz)@.+&-)FzxCCBCBysr/]{F^sHDLLGHtzF=..+%-!{rsACCHHAtxssxtAGLLDAK/'-%..+#-!{rstCBCCAxsssyxyABAAttyr;@.+*;(^xDLLvGtsr/{)){FrstAABAy^'@..@>;)FzACCCCCCtyxsxAACHGHBts/)*.....+#,-;~FrsvuEEvyI/('-=*@.............+&$-;!)/zxBCCAAxzF);-&..+*-;(/stCHCHCCHHHGHBCts/(;;>#+......&=-!)2KALDGsz^]_;>*%........@,!]rswEuuuEvHAAABBCHDEuuuus/;&.+=)FzxCCHDEEGHBCCtytvEEEGAz/)$..@>)/JtEEEGtsr^]{)FrsHvELGHts/-+.", "..@=;)FztCCCCCCCGvGLLLLHtxz/);*+...+@*,;']^zAHGGHCCCGGCyz/);,#...+#-;)/zyACGvGCBBBBBCvLLLLAz/;&..#;)^sHDLLvAs^F)'!;!'{F^^rrrF;&..%-)FzABCCCtxz^F{){/zAAHGBCBs]-@..%-!]/syACBCCAyxABHGHHCAs/{!,@...#-;]rsAABCAByyxytCCAAtszrr{-@..*;FryGLLDHyz/]))')]^zsyyxyz/;@..&=-~FzxCBCCBCBBBBBCCCBCCCBs/)$......&*>-~{^stLELGsrF);,*@+..............@#=-!)]ryACCBtszF);=%...#>;)/sABCBCGvGGvGvCtyrF);-=&.......+*-;)/KtGLtyr]]~->$@........@$!]^stEEEELLHCAAACHvEEEEDGs/;@.+=!FzyCCHvGGCCCCABAAHLLLLAsF)$+.@-(^sGLLvGyz^])'){FzACHHCCBsF-@.", "..+&=-):rKKzKKKJwNNNNNw8Q2]);=&.....@%*=-'|}PJwJIQIKJwOQ1(!-=%....+*=;)]/IKwwwJKzrKKJwNwNO<}~>@..%,;([6www6Q:);->=>>,-;;;;;;-*+.+&*-_]QIKKr^F|);;--!(2IIKIIr[)=...@*,;)F/QrKKKQ^[I8wJKQ2}(!-=%....@=,;)F^rIzKrQ/}IPOJI/]()!;-*...%-':....#=-~:/KKKKzKKrIrIzKKJKKKI2)-%.......&*$-;_26wNS6[_'-=%@................+@#*=-;)/IKzI^F|'-=%@...&*=-'FQKJJwwwwvwwwK[]);-=*%.........@#,-_:5OwP[1~;>*#&+........+%>!(2%....++&$,;~(}+..@,9_15YSY6}_;-=*$###$$$>>>$*#...@*-;(}QIIQ2|_;->=,;_:}QQQQ[}_$+..@#=-!(:[#@...+@#=;_(2[*&...%-0|[8SSO5:_9-,--3;_((|((~!-*+...@$-;(2QIIIIIQIQIQQQKIIKI[:!=@........@*=-c15YSY5}~-=$%+.................&%$$>-~|[QQ221(;->#+...&*>-'(}IIJwNNNNNSO<1(!-=#%+.........+%*-;b<8O<:(;-$$%@+.........%>-a:[ONNNNwO6<[<;([QIKIIIPPJP<[[[8YNM6[_;-%..@$c(26YSO5:_;->*=,9_12[QQQ[:!*..", "...&*,0b4hlllllppoojoomi4fba3=&.....@&$-0dbfkmmkgffgipmgfba;,#+....%*30bb7ijWqplhlhVmjUUUjgfa>+..&,cdfpqUqpfd9->#%%%%%##$*$$&@...&*30b4hhh74bac,,==3cbf7kkh7fd$..+&*=9abe7ijqjjjjjqqqifda9,*#@...+@*=;_bf7iqqjjjjjqqjgbac,=*&+...&3abgjWUqibdc-,,;0dbeeeebda3*...+@*30d4hlmmllklhllhlVmmlh7e0$+.......+@%=90biqWqpea9*#&..............+@@@@%*$3c_e4hk4ebdc,*%....@*=9ab7hmmZZUUUUWqifdc-$#&@.........+&*,cbijqiea9-**#%+.........&>9abgjWUWqoppjjjppooWUWqif0*..+#3;b7hllhhhmjoopi7gpqWqjgbc3&..@=cbfpqWqiea33>$=,3adf77kk7e0$..", "..+%=9~ekVVXVXlXXXXnXXXVk4edc=%....+&$,cd14klVVlkkkhlVVlke:ac=@...+#=;a:4hmZWZoXVVXVXZWUUqp7b9&.+&3ab7pWUUjgdc9*#%&&&%%%#$*%%@...@=ca:kVVVlk}d;3,>33a:7khlll7b>+..&$3c_e4ijUTUUWUTUWqifb09,>#@....&$=0dekijWUTUUUUUWoiea9,$#@...+%;afioUUqp4bac99a14kkkhk74|a,@...%=9_bklXXXXXVVlVVVVXnnXVhea>+........@$>3aepqWWpgd;3*&...........+@&%#$*$*$,9ab4hllk7eba9=&+...@#3;dekVXnZUTTTUUqm7bac,*#@.........+%*-0eioqp7ba9,>$##%@+.....+#,9d4ioWUWZXnoqUUqnnoWWUZp7a=+..#,a1kVVVhhlmZWZonlmnWUWogea3%..+>abhpWWZpfac3==>,3a:4kllVl7d=+.", "..&=;~FzABHGHHCBHHGBGGGHAys^{;*....@*-'{^sxBBHCCBAtACHCBAys/);#...&>;)/zxtHvEEGHBCCBHGEEELGxz(%.+*!]rsGDEEtJ^]~-,*%%%#$#*$*$$&...#-)FztBBCAAs^{~!;;)]zyACCCAx^;+..%-;{/zxHDEEEuEEEEEvGs^]);-,%...+%-;{/stHDuEuuuEEEELyI{'-=%+...+=)/ztDEEDAJ/]))]^sACCBCCByz/;&..+*;)/ztBHHHBCCCCCCCHCCHCCtz];@........%,;_:KHuEEGs[{!,#.........+&#>---;--;-!)]rsABBBxsr]'-*+..+&=;)/stCHvLEEEEEELGys^{';=#+........%>3!{ItEGGszF(!;----=*&+...@='{/stDuDLvHGLEEEEvGvLEELGJ/-@.+>!]zxCCCCBBGLEEvvHHvLELvAKF~*..@;FKyGLELGs/_~;;;')/zxtCCBCx^-@.", "..&>-)FzACBCBCCGBLLLvLvCCBxr{;*+..@#-;)FzsAACCCCBtABCCCCBxs/{;*+..&=;)FzsAHLLGHCCBCCCvLEEGHyr{#..*']IsGLELHsr]~;,$#%###*$*>*%&..+&;'FzyCCCCxs/{!;;!)FzxBBBBCy/;+.+%-!)/sttGEuEEEELELLtsr/)~;-*+...*-!]^sytEEEEEEEEEEGx^)!-=&+....>~[sAGLELAs^]{)]rsAACCCCAxz/'*...%;)FzyCCBGCCCCBBCCCBGBCCAsF-&.......+%>;)FItELuHs^);-%+........&$--;!)~~';;')]rsBBCAysrF~-*....%,;)FzABCCLLEEEEELHtzr]~;-$@........%,;)FKyGLtyr/{~;;;----=&...+*;)^sBLLLLvCHLEuELvBGLLEvts^;@.@>!FryCCHCCCCGLLLHBBGLLLvtzF)$+.&-FrxGELuHs/{';-;~{/zABACBAy^;+.", "..@*=-_]QKKJKKPJwNNNNwwJKr/|'-&...+&=-!)2^rKKJJJKKPPJJJKK/}{;-%...&%=;_]}[IOOJPKIIIIKJOwOOPI}'*++%-!([8www6Q|!-=*%&&%##*$###&@...@=-~FQKKKI/F(;-,,--!]/rrrKr/)>...@*-;)1^QPORSMYwwwNOK[1{~!-,%....@*,;(F[Q6YRSMMMSwwOQ(;-*#+.....#;~:+........@$=;_25SNw6[(;-$&.........&*,-!!)~!;----!{/IKr^^F|'-=%....@%=;)FQKKJJwwSwwwO8KQ1);->$@........@#>-~:5OO6[|)';->--;--=&....%>;_:IOwNwJII6wOYOPIPwwww6[)=+..$-'F[KKJKIIKJJwJPKPJwNwJ<2),&..@=~1[6wNw52);->=,-;)F^rrKzI/_>..", "..&#=-;|[QIIIIIPOwwNwwOP<[}(;$%...@%$>;(2[$#%%##$$**$$#&...@>-!|}QIQQ2|~;->>,-'(:}[QQ[2'*+.+@$=;_1:[~|[6SSO<:(_!'_|}QIPOO8PQ}(;%...&*-;(}QIIIIQ[22}}[[-~15YSY8}(;=*&+........&=-;_1:}(!;---;_1QQQ[:|('-*%+...+$,-!|[IIII5I55686665[(!-=*&........+%=-c|<8O51(~!---;~~!;,#+..+&=,a|7OSNY8<[<58P<[[<6SSO5}~>+.@#>;(2QII$=-;_:}QQQQ[2~=+.", "..@#=-0b4hhlhhhVmpojjomlkh4bc$@...@&=,cb7hlmoqUUUUqTUUqjmlhfd,%...+%*-0bef7hhhf1bbbbe7hhhkhkfa,++&=cafiqUqpfba3,***#*==-3==>*&...@=9cb4klhhf1a0-,,-9abf7....&*=9abe4khlhk77ipjpg0-*#@......%,0bgjWWqifbdaaab4hmoqZqpi4ec*..+&*90bfkllhh74eb:bf47hlhhkea,%.......@&*=9cfiqWqifd;3*&+........%,;de4hk7ba;;9cdekhk7eba;-*%+...+#=cab7hmmlhh@...%>9abgjWUqige7khkh7fijWUqif0>..+#30d7hhlhhkhhhhhhlpoWUqjgbc,+..+$0dgiqUqieba;3=,3cde7h5hk7e0*..", "..@*>3a1kVVVVVlVVVXXXXXVlhk:a>@..+%$,cdfhmnoqWUqUUUqUUWqnmVke0#...&$,9d14klVVk7e:e:e47+.&,cbfpoZojh4bdc;,>,9cdddda'0>+.+&>c_ekVVVhk4ed~c;0a17hmlllhfa$..+@*-cde4klVVlhkklmonmhk[44e(,@...@*-01e7klVlVhQ4hmppfa,$#@......%9dbhjWWqmhee|b1e4lVnZZZnVh4a*..@#99d:kVVVllk44eee4klVVXlhedc%......+@$>3cdfpqUWjgba9>$%@.......%9ab7lmml7:bb(bekm6Vkke|03$%+...&*3cdekVXXmlhhhklmnonmh4|dc$@......+#=3cdfmoZphebb{de7hhhfd9*..+&-0(fmoWWZpk47khhk44ioUTqp7b,+..#-0:kVVVVlhkhkhlmXnZWUWohfa>@..@>cbgpqWWphe1d!09~dehVmmVVke0*+.", "..%>;~]ztCBCCCBCCCCCBCCCBCyz/!$...*3)]rxGDDLvDDvvvvvvvDvDvvts]>+.@#-')^zyAACCByszzzzstCCCCCBy/;++%;)}stvvvHCAsr/])))]/zxyyszF~&+@*;{^zACBCCAxsr///^rstGvDGAxz{-..+%-'{/sxACCCAByxABHHBBCCBAAz~&..+#-']rstACCCCtyxxAAs[(;,*&.....+*;FrxHGDHHAyszzrzstCCGGBvCAs]*..#>'{/zACBCCCtxszzsxACCCCCAsr{=......#$-;~F^sHEEEGxr/{!->$&+....+>)/stGGvGtszr^rsAGvGBysr]!,*+...#-!]rstCHBCBCAtytCHGGBBAsr];#.....+#=;'{/KAEDHxsszzzsADHGyI{=+.+$;{rsALEEDGysssssssxtDEEEGs/;+.+='FzxCCCBCCBxxyACGDLEEEvyKF;@..%!{^zAGGGHCxsr/F]/rstDGvHByz]-..", "..@$-)FzyBCCCBCCCCCCCCBCCBtzF'$+..#;)FzyvLELvCCBBABBCCCvLELGz]=..+*-!]^syBCCCBAyzzzzyAAACACBx^-@.#-~FryCCCBCAAz//F]F/zABBABxz~&+@*;]rstCCBCBysr^//rssHvLLvAy/{=+.+%-!]rsABCCCCAxyyytABCACBBAz)&...#-)FrsACCCCAAxssssrF~;=*@......*!{/sACCCBCAyszzzssxCCCCCCAs)%.+%-!]rsACCCAAByszrzytBCCCCAsr{-+....#>-;~{/IsGLEuvyr/{)'->*@....+=)/sAvLLvAyzzrzstvvvAxzr]!-#+..+#;~]rsACCCCCBByxyxCBCCBCtzF'=+....&$-;){/JAGLHAszzzsytDLDtz{-+.+$!]rstvLLLBxszzrzzssBHLLvGs/;@.@=)FzACCCCBBxyssxALLEEEuvtzF;%..%-)/zyCCCCCByz///rzxHLLLvAsr{,+.", "..+%=-~]QKKKKrIrIrIrIKrIr^/|!-&..+&>;_:+.@>-'{^KzKKKr//|_({(F//rrrr[];@.+#,!{FQKKKzI//1|{1|}QPwwwJI2);%..+&=-']/^IIKPKQF//2/^^rKrzIr};&..+%=;)F}^IrKKI^F2::1)!-*%@.......&=3_]QKKKKKr[F1F:F2/rKKzKIr};&..&$-;)F/KKzKr^/F]]]/^IKKKKI/|;*...++%=,-;'_:[6RNw8Q1(';-,*#@.....*;_25wwww@..+*-':^KKsKKr^211||2[6wNwJ<2)-%..", "...&*-;(}[QIQQ[[[222[[[[}:(~-=&...%>-_1[8SNRO5[[2}}}[<5OMNR5e!&..+%>-!|}[Q-;~(b:45MNR872|(~;->*%+...+&,~|<8SRO5[2e:1[56O5[|('-=%@....&>-'(}QIPI..+%>;_2+..#-~|[IIP5<[2:(123a17khh9afiqTTUqjmg7f47imjWUTUjg0%...&=;dfipjjqqjjijiijijpppmhf|9%..+%*,0be47kkhiiiiiiiiikhh7eea-+.+%3abgijqqjjpppiiijijjjpmiba9>@...%>9bgipjjjqjpjijijipppppi4f9@...#>9bgipjjqjjjiigebac=*@........+%=9ab47himmiiiiipiiiihh44ba>..+&*9abgijqjjpigfbbfgipjZojpge0*...@#*9adbfgijqTTTqjigfeba9=*@...+%,0dgmjojpjpiiiippmieba;,*%@....&=;aegpjqjjpigebbee7lmpjpied=+...@*=9afgijqUUqjimippjqUUqjf0$...#3cbgiqTUqig:bacade4iqUUUjgb,+.+%3abgjqojjigfbbfgmjWTTTjgbc,&...&*30be7himppiiiiijjpppmgba;#+..", "..+@*>-0b4kllmVl5ihhihh7f|dc3#@...%-afhjqTTTWWZmhk7lpZUTTTTqhb#..+#,0biqqUUUUUTqUTqUWWZWZXifd9#...&$,cd1e4hlVnqqUUWqonmVll7|a,@..#;b4mqUTTUWUqUTUUUUWonmlhba9$+..+#3afiqqUUUUTqUUUUUWWWWWonl40%..+%9afpqWUTUUUUUqoifbc,$&.........&$9!be4hmoWWWWqqUUqXXllk410$@..%,cd4ioUUUWWZph447moWWUWWqp4b=+.+&*-a1khiqqTTTTTTUZpmhked9*&....%>9afkmXnqqUUWWZoXmked03>$@+....#,ab7pqTTTUWom4e1e4hioWWWqm4c&..+%$9agjqUqTTTUWWqWqUUTTTUjg0=+.+%,_ehjWTTUol7ed~ab7hjqTTUqmf9+..$9d7pqUUUTqjhfefkljqTTTqiba3#...&$,9de4kmoZZWWWqWqWomVl7bc3*+..", "...&=-;)/zsAHGDvvvvvvvHtsr/{!>+..+$!FzxvEEEEEEDGAxxBGDEEuEEEA^-+.@=;|IwEEEEEEuuuuuEuEEELEvxz:'$...&*-!{^zzxACGDEuEEELvCCAxs^{-@..*)rsGvEuEEEEuEuuuuuEDCAts/(;>+..+>~2stEEEEEEEuuuuuEEEEEEvHts]*..@=~}zGuEEEEEEuEEvAs/{3>*+........&>;)F/zsHvEEEEEEuEEvHCBxz/(-+.@*;{^xBDEEEEELHxssxGvEEEEEDHxF>..+*-)FsABGDuuEEuEuEEGHAAs/)-*....#,'{rxBHHDEuEuEEGCBsr]);>=@.....$;]zxGEEEEEEvAJrrrzsADuEEDtsF=..+%-!1VNEuEuEEEEEEEEuEuEuuZz:-..+>~FsAGEEEDDHxz/]F^sAGEEEEDts)#.@>~/zHEEEEEuGJrrzytGLuuuuXI];*...&=;~]/rstDDEDEEEEEvvHAyzF~;=@..", "...&*>;~{/zytvvvuLuLLvvAsrF);#+..+$;{rsAtDvDGHHtszsxAtGuvuvAx^;@.@=;{/JtvtHvvDvDvHGGGGHGAAz/]!*...+&>;)]/^zsxBtHGGGAHBAyyz/])-@.+%!FzxyvvGDAGDtDvHvtCBtyz^]~;$+..@=!{rwtGGGNvDDDGGGvtHHAHBtsr(=+.+$!{IytGGvGGvvGHwsr])-$@+........@#-!)F/rsxGtGHGGGGBABtsz/]~=@..&-)/zxAHDvGHGxyzzJytHGHHHBtz]>+.+*-~]rsxttGDDEuDvGGBBAsr]!-#+...%-;)FzsxttHHHHHGHAxz/);,$&+....+%;{^sytvvNGvAsr/F//zsxGtGtyz(*...#>;]zXHvDDGuGGHHHGGDDDDAy^(=+.+$;]rsAHvvGAxs/]){FzyAtDHNAyr)%++>;{^JtvNvHGxz^/^zyytGGGxzF{;*...+%-;)]/rsytGtHGtHGAAszrF{!-#+..", "...+&&$,-!_:Q5JOJOOOO66[|_;-*+....%=;~(:}e}}}}::{(((:}}4}2221~=+.+%=-~{e2442}4}}ee}e2}2}:1(;-*&.....&*=-;;))1:2e}}2}22]()~;;>%+..+*;'|ee24[44[eee24}e:{();-=*&...+%=-'{ee}4}4}}4}4}[4}2}}:](~-&..+&=-!1e}f[}4}}e2:1~;,$@...........+#=,-;!(|:ee}4}}}2:{))';-=%...+%-'(|}42}}e2:1(({:}f}}}22:);%...&*,;)1]2}e:}424[4[}F]{';,#@.....%=--~)1:e}}4[[}2:(~;->#@......+&=-~{:e4[}}}e1~;;;'~(|e1e:|_-@...@$>-~{:ee}}}}[}2}4}4}}}e1'-#..+%>;~{::e222:(~;;;;~(1ee}}:|'>+.+#=,~{e}}ee2:(~!~)({:e}e|_;-=&.....&=,-;;)11:e}24}}2:(~'--=#@...", ".....@%*>,-0_::4[[[[22:_;->*&+....@*>-;0____(__!;9;c'_______'-%...+#>3c~__(((((_((_(___a!;-,*%......@%##*>-9;;'_d____'!;-,=**&...+%*-3c__(((({((d___!!;->=*$&+....@%=-c~__(((((((((((d____';-*+...&*=-c__((((d(_~!9-**@@............+&**>>-9c_~_(((_'!;--==#%.....%=-9a__d(__a!;-990__((_(_!;$+...+%*,-c~~__|(((((|((~!;-=*&+.....@%$>=-;!___((|(~;;-=*%&........@*=-9~__(d__~;-==>>-9;00~!;-#+...@&#>-9'___d((((((((((__~;-=@...@*>-9!____~';-===--30'__~!c-#...@$>-c~___'_!;-,--3;!'_~!-=*&......+@&**=--cca_____~;-,==*#@....", "......+@**=-30aabbbba009,,*#+......&$,3390a00cc93>-339000c9c;,%....&*=330c00aaa000c009cc3,=$%@......+@@%#$==,39c000ccc3-=$$#&@....&*>-39900aaaaa0c0c93->>$#%@.....+&*,39ccaaa0aaaaa000909c;3$#....@#$>9990a0a0a0c9>>$%+...............&&#$=-,99cc090c93>>$$&+.....@#=-3900a00;39,>33909000993#+....@#$,-9cccaaaaaada00;3>*#@......+@%$$>3390aaaaac-=>$#@+........@*$-339cacc9c-,>*$*>>,9993,=&....+@%*-93900caaaaaaaaaacc;3=#+...+&$=,339ccc9->$**=>,-39cc3,=&...+%$>99c0c993=>*>>=,93c93,*%@.......+@%$*>=-,999cc9;3,>$%&+.....", ".......+@**=,3300a00039>=$#%@......@%$>9933099-,==>=>3333999,$&....+#$=3,9339993,3cc999,>=**&+.......+@@&#$$>,,333399,==**&@+.....@#*=,999cc90ccc939->,***@@+......&%*-93990;99990c33393-3,=*&.....@*$,-93ccc9c93,,*%@.................@&#**,,99999-3=>***&+......+&*>-93999333==>==399,3393=#.....+@**>3,9999cc0ac0c-3,=#%+.......+&%**>,999cc0c->=*#%@..........&#*,99ccc9-,,**$#$*===-3,>*&.....@&**,93339990c000;cc99,=*&+....@%$,,399,-,==*#*$=,,-9,3,>*@....@&==9339-3,,*$**>*=,,,>$$&.........++@%*$=>3993-3,=**%&.......", "........&**>-3;!'__'!9->*#&&+......+&$>--;;!;;,>>$$---;-;;-;-*+.....@#$>=>----,----;;;--$$%#@............@#=>--;-;;-;-$*##&@......+%*$,-;;;!!;!;;;-;--=$#%@+.......+&*,-;;;;;;;;;!;;;-;,-3-,*&.....@#$=-;;;;;;;';-,=%+..................+&*$=,-;-;---,=##%@+......+&#>--;;'';--,=,,--;;-;---$&.....++#*>-3-;;'!!'~!;;;--=#@.........+&#%$=,;'';!;--**%@...........+%$>-;;;;;--=$%%%##==>,-->%+.....+&#$-->-;;;;!;!;;!;!;--=$&.....+%#>-,-->-=**##%#$=-,----$%.....+&$,--;---$$*#$*=>>=-,>=%&............+%=,----33->$##&@.......", ".........@##*$===>----$%@+++........+&%*==$=>**&@@@&#*$=**=*#&+.....+@&@&@&@@&&@@%==$#*#&++.+............+&&%#$>-,>>##@++.+.......+++%#$$$>>=>===*=$**%+............+@&$=>--->=>=>---,==**%%&@......+&%**$==>==$#*%@+.....................+.@#$=-,->=%@+...........+&%**$$=,=>***##%*$=-,>$%&+......+@%#*>>=>$>>---->,>*&+.............++%$>>--==$#&++.............+&#*$===$*%&++++.@@#%%%*&+........+&**#%*==========$*$%#@+......+%#==$%&@@@++++@&#%**$$*%+.......+%*=$-=*%++++@%&%%%%#&&+.............+&%**=$**%@@...........", ".............++@+@%&&@+................+..+.........+..++++++.....................+.+++......................+.+@&+@......................+++@++++.+....................@@&&&@.+.+@&&@+..++..............++++@++..............................++@@&++.................+...+@@++.....++++&@++.............++.++@&#%&&@&@@...................@+@@++....................+.+++++++........+...+.................++++++.++++.+.+.............+............++................++@@.......+.++......................+.....+.............", "................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................", "................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................", "...........................................................................................................................................................................................................................................................................................................................................................................++@+@@+@++.................++@&@++............................+@@&%%*#*##%&+...........................+.............................................", ".......+@&&&&%####&&&&@+....................+@&&&&&&&@+................@&&&&&@+++@&&@@+.....................+@&%%&&@++..+.............+&&&&%%#&&&@+++@&&@+................+@@+.......+@&&@+..............+@&@+.........................+@&&&&@+.....+@@&@+..............+@+...+++...+&%&&@@+..........+@&&&&@+...+&&&&&&&%@+.............+@&&&&&&&&&&&&+................+%$--;-;-;---$*&+..........+%*=>>-,$#&@+........................@#>-;!'''''!;-$&+..................+@&%*#**#%@..........................................", ".....+%#*==$>===$>$=>=*#%&@...............@%#**=*=*=*%&@.............+%**=**==$*#*=*$*&@.................+&#$*=*>>==##**%#@+.........&##=$>$>=>==*$%$$**$#%@+.......@%##*#$**#%%#####$==*$##&.......+%#*#$==*##&@@@&%####*##@........@#$***=**&@@@@&&*=**$##&+......@%##*#$#*##*#####$=*==*#&+.......+%*=>=*=######*===$>**#@..........+%#==$>=>=>====*$$##&+..........@#,-'){]]F{{);;,*%+........@#$--;;;--==*&@.....................+&*,-!)]FFF]])~;-$&+................@#*=,,-,>=*%&.........................................", "....+@%*$$=**=$===>*$>**#%%+............+&&%*$$>$>*$$##%@+..........@&%$$>>>=>=>=$>=*$#&+...............+@&%*$=*=$=>=$$**$&@.......++%$$**=**=>>>>>=$>>$$*#@+......+@%*$**==**&&%%*****>$**%%+.....@@%#****$$#%%&%&&**==$==*&+.....@&&%*>>$$*$%%&&&%%$$>$=*$%@.....+&%*$=*=$=******>*$>$$>**%+......+&***$>*>=**#$$*$*=*>>**&........+@&**$=*$=>*>>$>>$*=*$#@..........@#=-!){]]1](~;->$%@........&*=---;;-->*#@+.....................@%*>-;){]}F({)!-=#@.................@#$>=,-->$$%&+........................................", "...+%*$>==,------,-,,=>***%%+..........+@&%*$===,=,,=>**#%@........+&#$=,,-,---->,=>>***#@.............@%#$$>=>-----,,=>=*$%&......+#**=>,>--;-------====$$%@......@#$$=>,>>>$$$*$*>=>>==>=$#@.....&#*$>=,>===*#$##$*>>>=>>>=@.....&#$$>===,>***#$#$$====>==*&.....&#$>=>>>,>,=>>>>=>==,,=,=*%.....&**=,>,=,=>>$=*=>=>>,==,=#+......+&%%**=>--,--,---,,=>=**%..........&*=;_|}}[221(!-=*%@.......+&*,;_((~~;->$%@.....................@%$=-;_|}}}2}|_-,*&+................@#*,-;';;-*#%@........................................", "...@#*=39cc00c000cc9c9c3,=*#&+........+&#$>,3cc9cc9933>=$*%@+.....+&*=,3ccc0c0;9cc9993>=$*&+..........@%*==39cc0c0c0ccc93,=*#@....+&*>,399c;0aaacaac0ccc33=$%+....+%*=>3399933=>=>,9399c93,==&....+*$=339cc9933=*>*>=33c39933%....@%*=339c9393>=*=*=339c9c93=#....@*==9ccc;999933339c999c993=%....@*=,399c99c3939339c39cc993=&.....+@#$$>339c0c0c0c0ccc9993=*@........+%>3abgiimk7fba;>*&+........%*3abe7ebdc3$%&+...................+&*>-;0bf7iiiigb0-=%+...............@%$,;a_bba0,*#%+.......................................", "..+#=c0_bbeeeeeeeeeeb|bdd09>#@.......+#=,99adb|eebe:bdac33>*&+....@$3c_bbbeeeefeeeb|bdcc3=*#@........&*=39ab1beefeeeeeb:bda3=#+...@#-9db:eeeefeefeffeeebbd03=%....%#3c_bb:b:bda9c!a(b1eb1da09$@..+%=-'db1beb{b~0c39c!d|b:b|b03&..+#>c'db:be1b_acc9c~db:b1bbdc>@..+#=9~d|beeebe|bd_db|be1be1b0>+..+%=cadb:b:eb:b(ddd1be1beb1b0,+....@%*,cc~dbeeeeeeeeeeeb:bd03%.......+@*>9bgoqZonVl4bac>$&+......+#,0|7kkk7e{03>*&...................+#*,ca14;{^stAGttGtHHGHAGtGAGty/{;$+..@-;{/sAtGtGtsz^^rzyyABGAtszF;#..@=']rsABtHtAys/]{]^zyAAGHAAsF,+.@,!FrytAHtAtsr/FF/rsxBBHAAyz],++#,)FzytHtAGtAtsszsyAGAHtGAyz)&..@-'FzytBGtHtHyszzsxAAGtGtAyz{=...@$-;)/zsxxtHAGGAGHtGAHHAx/{=+......&#-;{rwvuELGHBxr])->%@......&>;{^sCCCAys/);,=@.................+@=-'{/zyACGvEEvxI{'-$+............+*-!{/zxGGGts/{'-*&+.....................................", ".+*;(/xGLLELuEuLEELELHCBAs/{!>@....&*-;)]^zyACGLLLELLAxzrF)'-*+..+$!FzyCLLLLuLEELLLLHByz/{);-$+....&*-!)/ryHLLLLLELELLLLDHs/);*..&,)FKALLEuLEELLLELELELLLts/)-+..%-)/KtDLELLGCszrzyBBGDLLHBxr)=+.%,)/sBHLLLGCByz/F/zxAHDDLGHyr;@+*-)/sAGvLLvCByzr/rsACHDLLvHy^;@+#;)/stHLLEEELHAxsxHDLEELLGAx{#..@-(ryBGDLEELvHtssxGLELLELGCx/-+..%>-!]zyBCHLLLuELuEELLLLLAz];@......@=-~{IxEEELGBBsr]~;>%+......&$;)/zyBBCBxr]'-=&..................&$-!]/zyBCGLLLDAr{!-#&............%$;~]^JALLLGyrF~-=*@.....................................", ".+%-'1@....&*=-;){FrKJwwNwNwwPI[F('-=&...+#-)}QPwwNNNNNNNNNwJKQF_~;-=*+...+&*>-!|}...&=;([8wwNNNwPQ1FF[IKJwNwJP^]!%..%=;(/IJwwNwJI^F_)|FQKJwNNwJIF-++&,;{[IJwNwwJK^2]{F[IKJwNwwJI]>+.&,'{[KOwNwNNwJI[[IPwNNNwNwK[~&..+*;{[IOwNNNNwJI}[QPwNNwNwwP/(=...&*--~FQKKwwNwNNNNNNwNNww8[_-@......@%>;':%+............&*=;~:[8SNw8Q:);,*#@.....................................", "..#=c(!|Q5YNNNNSNNNSSO8[Q11(!;>*&...+&*=;~(1<8YSNNNSNNwNNNR67(;,@..&=c_e5YNNNNNNNNNNNNNNNNS841;*+..&=3a28YNNNSO5}1(|}Q5OSNSO<[|;*..@>-~}<8YNSOPQ}|___1[+.&=3(}<6SNNNNR8<}}46ONNNNSOP[!&...*;(2+.+&*>;_1[IIPYNNNNSNNNNNNNY84_,@......+%*-a1'_:2[QQ[('->*&...................+%$>-!_:}5OSSO<1!-*#@...........+&*>-~_[5YNR6[|~;>$&@.....................................", "..#>cbfijqoooooojojojpih574ba;#...@*=3abbf7hhmpjqjqojpiiieba3*+...#,0b4iqUUWWoqqjjopmhh4eeba3*@...@#>3abe7hpoqjqjqjoqqWUWjgbc3&..&=0dgmqWUWqqTTTTTUqqWWUWjgdc$+..@>3aepqUWWqmgebdbe4hjWUWji4bc$..@>9afgpqUUqi7fbd0dbfhpqUWqmgb>+.%=3dehpWUUomh7feeefkipqUUqigb>+.&=3degjqUUWqqigfegijqWUTUji4c&..+*;dfgjWUUUqqigff7ijZWUUWjif0>...&*=;deklVmoqqjqqqqqWUUUqpfd=+......@#*-cbgqUWqgfd03>$&@........+&$=;a|e4iikfa3=$#+..................+&%$=39degjWWqibc9$#+...........@#=3;dfgijqqpgebc3$#@.....................................", "..&,cdeimXnnnnmmVlmlmmVVVVhkea$+..%=9d1kklllllmlmVmmmnoqojhba>+..+%-cd7ioWUWonXmmmlVVVVllh710,%..+&*,c17klVXXXmmmmXmnZUUUqhfa9%+.@3cb7pZUWqojqTTTUqpnoWUWogea>+..&=9d7pWWWZml7eb|be7hnqUWol4bc%..&=cdehnWWWom4ebddb:ehpWWUZmh|,++&>cdehnWWWomhkkkkkkklnWUWZm7b,+.&>caehoWUUWonVk444lnoZWUUoi40&..+#9aehjWWWWonlk74klXnZWUUolfd$...&=30bklVVXmmmmlmmpooWUWWjgd,+......@#>90eiqUUqifdc3=#@..........+*>30aehmomgea03=%...................+%$>-0aeiqUTqifa3=%&...........&=-9deklXnnXXVk4b03=%+....................................", ".+*3':rxBCBCBCBBAAtACCBCCCCAxF=..+$!{^sBBCBCBCBAtyAACHDEEvAs/;&..+$!{/stvELLGHBCABBBBCBCBCBs/'$..+*;)/sACCCCCCBAtBBCCvEEEDyK/'$.+*!]ryDEELvGHvuEEEEGGDLELGxKF-@..%;_/sGEEDDHtsz^^rrsyDDEEGts^)>+.%-~FzyHDEEGByzr/F/rsyBDEEvHs/;++%;)/sAGEEEDHABBABBBtBGEEEvHs^;@.%-~]^sGEEELGHBAxAtAHGLEEEDtz0%..@-)]ryGvEEvvHAtyytBHvDEEEGAz(-...#-!]rxCCCBCBCCABCCHGDEELGs2!&......@$3)FKtEEEDts/{'-=@..........+*-;~]^xGDvtsrF);-#+.................@#=-;{FzxvEEEAKF~-=%.........+&$-'{rsACGvHHCCByz]);=&....................................", ".+%-!)^sBACCCCBtyyyyABCCCBCCxF$..+>;]zyCGHCCBAxyssxytHGGvvAsr~%..+*;{/zAHvGvHCCtAxyBBBCCCCBy/)=+.+>;{/sACBCCCCAAyxxtBHGLvHxzF'*+.*!FzJGLLLvHAGEEEEGCCGLELvyz];@..*;)}zAGGGHCBsr/F/rzxBLLLvys/)$..@>'FrsBGGvGtsz^F{FrzyAGGGGtsF-@.*-)FzxHLLLGCBACGGHBBAvLLLLAsF-+.&>!{^KxGLvvvHCBBBCCBHvvGvHx^~&..@=;]/ztGvvGCBCBxyACCCGGGDAs/)$+.+%-!]ryBBCCCCBABABBHGvvvHtzF-&......@$;~FKAGLLLAz/);-*&...........&=-!)}stGCByzr]';$%+................+&*,;)FItGLEEtzF~;=#+........@*,;)]zACHHCCBHCHBzF);-*&...................................", "..@$,;)][IIzKK^FF]]]F^rIKrKzQ~%...$-~2IOwwJKQFF1{{]F[QPPPPIQ};@...&=-~|[KPJJKI^//}F/^IrKzKr[{;%..+#,'{/IKKKKrQ//2FF[/IPPP<2{~-&..&-;1[6wNwJI+..@>;(:IPJKIQ/2)';!~1[Pwww8Q:);%...#>'(1IKJPKQ[]_~!'(12QPKJK[:!*+.&=-~{[PwwNJPIIJwwwPIIJwwNOI2)>@.+%>-'{}[IPJwwJJKKKJwwJP<<[:'=+...#=;~1}Q#@.........@#$,!_:3ae4hlik44ebb:bf47hlhhed3#...&=9de7hlhh47ebbbbbefhk74bcc$&..@>;afpqqqpggiqUTqiggpqWqpfd0*...@*30b7hhhkfbd;3,-cafiqWqpgdc3&..+%*,;dfhhhhfedacccabe4hlh7eac#..&*30dfiqUWqigiqUTqjiipqUWjgbc*...+%$=90df7ijWqpllmoqqpgfbdc,%....+%*,9abb47hhk4f7gppqmgfba9-&....+&*,cdbf44eeeeefgpqqpgfba9>%.......+&*3abiqUUjgd3,$&@..............&*>cab77h47fba9=*&...................@*>9dgjUWqib0-=%@.........+%=-9dfiqjifffipjpfbc3>*@...................................", "..&#=9ab4klV6lk4:bbb:4klllll7d#...*cd7mqWUoi4bac399c(4lVVVVlkb=+..&$=9aellXXmlkk7447hklVVll7d9%..+#>9dellVlVVhhk77447kllh4edc,%..&*3abioZZm7gpqUTUjghmoZqpgdc$+..&=30ekVlVlk4bac99cd4mWWZjhba,#..@#$30d4lVVVk4f1dd_be4lVVVl4d3%..@=9cb4pZUWoXVjqTTUjmljZUWZifa*....&*>30de4moZZnmmnqWZphfbdc>%....+&*=3abe4hVllhhhlnZomhebdc>%.....%*,cd|4f444447kloqoj7fbac=&........%=caeiqTTqib0,=$@..............+&=30b4kllVk41a9>#+.................+&$,cbgjWTqjfa9>$@.........@#>90b7moom7e4inopgbac=*@...................................", "..@=;~FzstACBBxszzrrzxtCBCCCyF$..+-{^sHEEEGts^{~''~)/sACCBCAxr;@.+%-;)/sACHHHBBCBtACCHHCCCAs^)=..+$;~FzyACCHvGHGHAABAAAAtsrF(;%+.#-;(^JtHGtxywEEuuGyxAHGAsQ{~>+..#-~FztCCCCAsr])~~{/JtEELvyKF'*..@=-;{^sBBCBCAxzr^rzxtCCBCts/'*++#-~]^sHvEEDHGvEEEEEHHGEEEvAz}-....&=-!)F^stHDDvGvDvDvAsz/]~;#.....@$-!)/rsACCHGGvvDvGtsr/]'-%.....#>;!{F^rzzsxABCBHGvtsr/{!-&.......+$;~FKtEEEDxI{;-$@..............+&=;)FzsACCCxsr]';#@................&#-;([JDEEEwz4);>%.........&=;_]^ztHHtszzxCGAsr])3,&...................................", "..@*;~FryABCCBAxzzzzsyBACCBBt]*..+-(/stGLLGAzF)!;;;{/ztCCCCCAr;@..*-!)/sBBBCCCBCACCCGLGHCCAz/'*+.+#-!{/sABHGLLuEELGBBBBAyzrF~-*..@>;~)/rsssssGLEEDwxssssz^]';=@.+%-)/zACCCBxs/]~'){^sAvLDGxrF'$+.+#>;)/stCBCBBAsrrrzyBBBCABzF'*..#-~]rJtLLLLGHLuEuEGGCGLLLLtz],+..+&*=-;{FrsACGLLELvGBxz^]);>%+....+@#-~)/zxBBHLLLLvGAyz/{~-$&....+&*-;')]F/rzABCCCBCByz/{~;$@.......&,-~{IyLLEDyr)!-$@...............@%-;)/zAABCBts/]!,$#@..............@>-;{^sHLDDHz]!;,#.........@$-']/zstxszrrzsAyz^]~;$&...................................", "..+&>-~{F^IKKKIQ2[2[^QrKrKzIF~&...$'([6wwwOQ|';,>,-;)][/IrIrQ]-+..@*,;)}rKKKJsKKKKKJwwwJIr/]~-&..+&*=;)]FQIJYwwwNwOJKr^^[F(!-*&...&>=-;'(1::[5ONSwP4:|((_!;,*@...@$-)FIKzKr^F(~---!(26wwYP[|~-%...+#=-)F^rIzIr^/]1]F^rKKzI/F~-@..@=-!{[PwwNwJJOSNNNwJwwwNwOK2~*.....&*>=-!(F[IPwNNwJPQ2]~;->*+.......+%$-;)}IKJwNNwOPI2(!->*@.......+#$,-;~)|F^KKJKKKQ}(!;>$#........&*>-!1%@.........+&=-;~((F1(___(]1](~;-$%+...................................", "...&*-;(|}Q58O85<5<5<,>=-!(}[[QQQ2),+..&#=-~:QKIIPPOJJ8PJ6PKQ[:1~3*&...+*=-;'(|[<5888O888855<-9'~(|[OSRY5:('!;-,=*&@...+#-;|[&....@#-;_:}[[QQ[:(((}[Q[[[2:_,#+..@*-c_:5OwNwOO86M86OJOYNNSO7|!*.....+@*>,-~_}QP66O65<[1_'-=*&+........+#=-'(:Q5YNNM6Q:(!-=*@.........+%*=,;~(1Q6JJ8I[}1~;,>*&........&*==cd30abbf77h5imnqZqqqqifc9$&....+%#*==99afgqWUjib_09->$%&+.....%-cb4hh54fba9->3;afiqWqpfb0=@....&**3a|f44hkhfebbe7hk4feda-#....&>9afiqWUWWqjmgiipqWUWUWjgba*.....+&*=-9ab7hhm6m6lhkfdc9=*%.........+&*>9abfiqqUqifba;,$#@.........@&#=-;ab7ijWqjifbda;3=*%........@#>,cbijUWjgdc,*&..................@%*,9adbeijjgbc,$*@+..............@*,;bgpWWqibc9>#@..........+&%*>>,-=>,>==,-==>*#&+....................................", "...&=3ae4kmqUTTTUTUUWZXXVl7ed,@..+*0d7pqUUql7:da'00db[kVVlVhkb,+.+%$,9_4hVXXZZWUUUUWnll41bac3=&..+@*>330d|e47kklVXoWWUUWWjga9=&.....+&#$>-cdfiqUUqpfdc3>$#%@.....@$3~ekVVVlke(c9399afpZWWpgea3%....@#>3ab44klV.....+%*,9abeklVVVVVVVl4edc3=#+.........@*=cab4iqUTqpebac,*&+........+@#>>3a:7hnZWUom4e|d03,=#@.......&*=9abiZUUoibc9=#+..................@*=90d:7moomfdc3>*+.............+#*30dgjWUqjfa9=*@..........++&%#*$$$$*$***$>$#%&+.....................................", "..@$;~FryAHDEEEEEEEEELCCCAsrF-&..&-(^sGvEELHxszr///rsAACCBCAxr'&.+*,!)/stHHHGEEEEEEEGHAAsrF)'-%...#>;~{F^zsxytCCCBGLELEELGsQ{;#......+#>9')FztLEELAK^{~;=$&+.....%,~FzABCCBAsr]{~)]^stEELvyzF'*...+&=-!]^sxACCBAxsxACCBtysr{!,@..@=!{^stEEEEEELGBBADEEEEEEGAK]-...+%$-;~{/rxACHHHCCBCCxs^]);-&........+#,-~]^sGuEEEGK^]~;,*+........@*,;')FztAGLEEvHssz/F{~!,#.......&=;~FKAuEELyK]~-=%..................+#-;(F^stGvAs^F{!-$@...........+#-;~{rxGEEvAKF!;>%............+&#%#**###*##*==*%+..........+++++&&&&%@+++&&&&%@+.......", "..&$;)FzxtHvLEELLELLGGCCAAzF)-@..@>)/KyvvGHHHAssrzzsxCCGGCCCsF;@+@*-'(^sBBHHCvvvvLvLvGCAsz/]!-#..+%-;{FrzssyxABABCCvGLLLLvyr]'*......+%>-;_]IyLEEEts/]~-,#&+.....%-)FzyCCCBtsr/]{{F^JHLLLHxrF'*....@#=;)/zsACCCAyyABCCCysr/{!*@..@>;{/sAvLvuELLHBBCHLELLLvvxz]=+..@*>-!)]rzyCHCHCCCCCCBsz/{!-*.........&=;!{^KtLEELts/]~->%+.......+#=-;'{^sBCGDLDvAxszsr/])!$+......+*-~{ItLvEDAr]~;=*&..................&$;;{/ryBCBsz/]);-#...........+#-;)FKyvDEutz]~;,#...............+@@@+.+++@@@&&@.........+@&*#%##$$$**#%##$$$**####+...", "..@%>-~1//IPKJ6KI5I5..+&$-!)2IKJJKJKPQKPPOwJK[F|~;=%...%>;'F[Q/^/F/F^[QIIPJwNw8<1~-#.......@*=-;~:#&@......@=-~]QKzKrQ/F__~~(1[Pwww8Q|~-%.....@#=-!)]QPJJK^^QKJJK[])!->&...+#=-_:QPJJwwNwPIQIJwNwwJPP[{;%...@$=-;)(F[IJwJPIIIPJwKQ/|);-#.........&#=-;_:%@......................................+@&%#$$$*=*$$$$>$==*>>$**%#@...", "..@$=-!(:2QI5I<[[[222|(_;;-,*%+..+%=3'|[QI5OOJ5Q[[QQ<6YSN6<:_;%...&*-;_:QIII-'(:}Q5OY8<[}Q6OOP<}2|'-$+........@%>-!_1*&.......+@%*,-!(:$>*@...", "..@*=9ab44hiVih777ffeda933**%&....&*=9affhimqomiiikhipqqqjgf09#...%$90bfhmmmi44feffipjjphg7ba;%...%3ab4immh7eeeeeeffgpZWWjgbc3&......+%*=3;dfijUUjifac9>*&@......+&=;dekhhk74febbbbfgiqqoifd;,@......+%$>-0fippmiiimjpgbc3>$&+...+%$-cdfhlmmoophf77ioqqmmk7ea>&...&=-cdfgiijqqpg7fgiqqpmigfbc,@........&*=9abfgqTUqifd0->$#+.......@*$90dbgiqqjmhh74f7hmlihfa,+......+#*30bgqWWjied0->*&+...................@*>-0b4474eeda-$%..........+@%>-9abgqWWqiba-$%+.....................................+@*=,339c0aac0c;9000c0cc99,>#...", ".+%>;a:khVmnonmlhkk4ed09,>$#&@....@$>9ade4lmXoZqoqoXVmppppi4b0*+.+#-0b4inooonmh74efhmonoXopifa>+.+=9bfmoqqjmkhkkkkklmoWUWniea3%.....+&*>30begjWTUWph4dc3>$&+.....+#=90eklllllhkkkhkhlmnnXifa9=%......+@*=3abhXnopqooXmkea9=#%+....%*30b7VlXonnmhk4kVnoonXXlfa3&..@#30bfijqqqqnmlkkhmnoooqqphea*.......&*=9ab4ijqTTUjgeb03,*%+.....+&$-a17hmjWWomVllhhlmoZom7b9%......@&$3cfiqUUqmh4{a3>*@...................@#=3~b4klllk7|a3#+.........@#=-0dekmqWUqpea9=#@......................................#,;ad(b1ee2ee:e:eeee4ee:bdc>@..", ".+*;)/stCCHvDvvCCCtxz/('--#%+.....&=3~{FrsxBHDEEEuvGCCCCCAAsrF=+.&>!]rsADEEEGHAtszsxAHGDLvvts/;@.@-]rJGuEEuGCCCBACACCDEEEDyKF'*.....%=-~{/zyBvuEEEvttzF{;-$&+....+*-~]rxACBCBCCCCBBBBHHHCtz]~,&......+&>;~FryCGLEuEDGBxrF_;=%....+*-!]ryCCGHGBBBxsxBHBGGHCts/!*..&,)/zxuuEEEvHBtAttBHHvEuEvAsF-.....+&=-;)/zxADEEEEGBxz/)'-$&.....%>;~/stBCvEEDHCCBCCHGLvDHxr{*.....+%=3'{ItEEEEGAtz/{!->&..................@*-'{/zxACCByz/),#........+$-!{/zytGLEEEwz:~;=&.....................................@-)FrzsyxAABtxtyxtyBtBBByxz/~#..", "..#;)/sACCCvLLGBCABsz/);-$#.......&=;!(/rsyBCvLELLLvBGBCCCAyr{,@+&-!]rxHGLLLGCCAszzsBBHvLLLGxr;@.@-{rsGuEELGCCBCCCCCHLEELGtr]!*....+%,;)]^stCGEEEuvCxz/{!->*@....+$-']rsAACACCBBBCCCCCCCCyr]',&.......@$-!{ryABvEELvHAs^{~-=&....+%-~]ryCCBCBCBysytBCCCBCCBzF!#..#-)/sAvEEELGBBAyytBBCvLEuDAs/-+....@#=-~{/sACDuEuLvByz/{!->#@...+#>;)^sBCCHLLLBCCCCBHLELDvyr)=......&*-!{IAvELLGCAsrF);-*&..................%=;)FzyBCCCBs/);%........&$;)]/zyCGLLEDtzF~-=@.....................................#;(/zyyABABCCBBABBABBCCABysr)>..", "..&=;_FrKJJwwwJKKr^}{';=$&+.......@&$-;)12KJwwOOJOwwwwwwJJI[]!*..+*-!{2IJwwwJKI/F|]}^IPJwwOP[|-+.+$;([6YNNwPKKIKrKIKKJwwOP[(!>&....+&*>;~{FQKJwNNSJKQ/(~;=*%+.....&*,;)]/^rKzKzKKrIKKKKKI^|'-%.........@*,;':QKOwSwOKQF'--*&@.....&=-;{/QKsKKKI/}FFQzKsKKK/F~>@..@=-_1<6SNNwJKI^//^IKJJwNwOI[)$.....+&*,;!)2^IJwNNwOKQF_~-=#@.....&*,;)FQKKwwwOPKKzIKKJwww6[|;&......@#$-;1;_(}<6MMOPPJYwNSSYYO<}(-&..+%=;_1#&@.....@#=,;~(1[QIIIQQIQQQQ[[}|~-=%.........@&*,;(}[P8OO5[}_;=*%@......@#*-!|[QQIIQ[:((|}[QQIQQ2(;*+..&*3!12@......+%*>,_25OOPPQ[}('-,$%+..................+&#$-0|4OwY84_->&........@*>-'(1[QP68O6[d;,*&......................................&-!(1}[QQIIIQIQQQQIQIQQQQQ}:!*..", "..&=9ab4hlllmVllhh41ac,$@+.........@#=3abfijWqqmmpZWUUWWWjied3&...&=cdb7kllmlhkfdaa_dbehhli7fd>+.+%>;dfg5i5hkllllhhhhh74fba9,#......+%>-0a:7hlm5mPlh7eda;,*%+.....+&*$,-c_e75hlhllhhh74ebd;=*&........+@&*>9ab4h5l5hfba9>#@.......+%*=cde47777ebdade777k77e0c*...+*3abfh5mmllh4:bb:7hlllmlh7ba*......@*,30be7kllmmmlk7fba;>*&.....@#*-cde47hlmllhlhlhlVllh7ba>........&*>9abhhmlhhkfba;=$#@..................+&%$=9dgpWWpga-*&........@*,90(e4hlVllhea3>*&+.....................................&3abe7h5lihl5ll5h5l5lk5khh4e0$..", "..&=9d:kllVlVVVVVh7ed0,*&..........+%>c_bfhqWWoXXnZWWUWWWom7b3@...%>cde4hVlVVhked00c0b:7llkked,+.+%-9de7khllVllVlVVVlk4fbba9=&......@%$99dbklVVVVVVlk4ba9,$%+......+%*=-9abkhVVVlVlVhk4eba9,*@.........@%$=9abfkllh74|ac=*@.......@&*>9de4k7k4ebaaab47774eba3%+..+%3~bf4hVlVllkebbe4hVVVVVk7b0*......@#=;adekVVVVVVVlk4bac3*&.....@&$,0de7klVVVVVVVVVVVVVl7b0$+.......@*-9aehVVXVVkke(09=#@...................@%*>9agoqZjga9=&.......+%=,cd:4lVVVXVl7d0,$#+.....................................%9(eklVXXXXVVVVXVlVlVXVXVVl4d$..", "..%,!]/zsAytyAAtAsz/]);=&..........@*-~{/rxtvvHABBHvLvLGvtJrF-&..+*-~]/rzyxtysz/])~){{^zsssz/{,+.@$9_{/rzssxxyAAtBBtysr^F{~;=#......@#>;'{/zsttBtAtxsrF{~;$%+.......&*--')FrsxAABBAAxsr/]);>#+.........@#>-;)F^zsssz^F)!-=%.......+&$;!{/rzzrr/]{)]F/rrrr^F);#...+*;(F^zsyAAtys^/F/rsxtAtysrF~=......@=-!{F^sxttAtAtyz^]{';=#+....@%=;'F/rsxAABABAABtAAAtyz/)=+.......&=-~FzxACCBCBxz/{~-=&...................@#=-!|IxvGxI{~,&.......@*-!{FzsACCCCBtsF);>*@.....................................*'/zxBCCHCBCBCCCCCCCCBCBCCBsF-..", "..@$;')F/rrrrrrrr^F)~;-%+...........%,;~)FIzsssssxyAAByyyz/])-@..+&,;~){F/rrr/F)~;;;!){]F/F]{!=+..#-;~_{]/^rrrrrrrrrr^F{)!;,=&.......&$-;!)]/rrrrrrr/])!;=%+........+@*,-!)]/rrrrrrrr/F)~'-$@...........&#>;!){F/F/]{~!-*#@........@*,;'){]F]{)'!!!))){{)));,%+..@#-!))]//rrrr/]))){F/rrrr/])-@......+&>-!']/rrrrrrr/F))!;,$&+.....@&=-')]/^rrrrrrrrzrrrr^F);=........@%-;)^yABBBBtsrF{!,*@....................+*=;~F^rzrF);,&.......+%-;)F/sAAABAByr]!-=#@.....................................*'FrstAACCCCCCBCCCCACBCBCAtz{=+.", "...@#=>-;;'''!'!;;;,=*#+.............@#=,-~(|(()()]]]F]:{)!-$%.....@#=>--;;';;--,>>>>=--;-;->*&...+%*,,--;;''!'~~~'!!;;-=**&+.........+%$=>-;;'''''!;-,##&+...........@&*=,-;;'!''''!;--==%+............+@&**>--;-;--==*++..........+&$=,---,-,>====->>->,=$%.....@#$>,-;;'';;;--->-;;;';!;-,%.........%*>=-;;'!~!'!;-->$*&+.........@#$--;;!!'~~~)~'~~'!;;-$&.........+*=-')]FF]]{)~;->%+......................@#==;!__';,=%.........+%*-;!)]F}F2]{~;=*@+......................................&=;~){]F}F2/2//[/[/[/2F2FF{)>@..", "....@%***>>>,>>>=>$$#&+..............+@**=-;;!;;;;'~_'~!'c-=*&.....+@%**=>>=>=>*%&&%%$***=*=#&......&&*$===,=,,>=>,>==**#%+............+&#$*>>,,,>=>=*#%+...............&%%*>=,>,,>=>=*#&@+...............++&*#*$=***#%@.............+@%%***$%#**#&#%**##&%&+......+&%**$=====*=**$**>==,==$%@.........+&%$*$>,,>,=>=**#%@............+&%**=>,,=------==>=*#@...........@%>=--;;;;-,=**%+.......................+@#$=,-9->$&+..........@#*$,-;;;';;-,=*&+.......................................+#$>--;;!!!~~_~~_~_'__~!';;>#...", ".....+@##**$***$*#%@@+.................&**=,99->>-9;c9c33>>$%@.......+@%###$###%@..+@@%&%*##%+......++@%#**$***$***$*#&@@+..............+@&%**$**$*$$%@+.................@@&$*$$**$%%%&@+...................+@%&#**#&&@@...............@@&#&#&@+++..+@@+++..........+@&%#####&&&&@&&&##%#%%&+...........+@&%##$*$$*$$#&&@+..............+#**$*$*$*$******#&&+...........@&$*==,-,>>$*#%@+........................+&#$==>=#%@...........+@%#$*,,,-,,=$#&+........................................+%***=,,-33-339-9333,333-,>=#...", ".......+@&%&##%%%%&@...................@@%#**>**$*,>,,,>>=#&@.........@%%%&&%%&&+....@+@@@&&@.........+++@@&&%%&&@&@@@+.....................@&&##%&&&&@...................+++&&@&&@@@@+......................++@@@@@@@@..................++@+........++...............++..++++++.+.++.++.+...............++@&&@&@&&@&&@+.................+@&@%&&&%&&&%%&@@+.............+@%##*==*=*#%&+..........................@&%&###%&+..............+&&%*$=$**#%&@..........................................+@%***>$*=$========$=**=**%+...", "..........+@&&@&&&@....................+.@%#&%%&%%#****%%#&+..........+&&%@&@@+@+....+....................++.++..............................+@&&&@@%&@.......................+++++.+.........................+.++.+..+.......................................................................................++@+@+.++....................++++++@@+++.+................@&%##%#*#%#&+++..........................+&&&&&@+..................++@%%*#%&@+.............................................+&%%**#*##%*%#*#*#**#*#%&....", "..............+.....................................+..+..............+++++++..................................................................+..+++++.................................................................................................................................................................................................................+++.++++.................................+.+...........................+........................................................+....+.+.+...+..........", "................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................", ".................................................................................................................................................................................................................++++@+++.......................................................................................+...............................................................................................................................................................................................................", ".....................................................................++@%%&%@++..................................................................+@&&&&@@+....................................................+&%*#$#$*##&+.........................................++&&&&&@++..............................+&%%%&@+...........................+@&&@+.................+@&%&%&@+..........................++&%%%&%&&+............................................................................................................", "..............+&&%&&@@.............................................@%#===>,>=*&@...............................................................+&*$=====*#%&@..............................................@&#*=,,3-3,3,,=*%@.....................................+&#*=,,3,=*#@+..........................+@#*===>=*%+......................+@#*=>=*##@+............@%#*=,3,=*#%@......................+@&*==,,3>==*%...........................................................................................................", "...........+%$$,----=$&+..........................................%=-;;~){)));->%@...........................................................+%=,;;~){))!;->$&...........................................@%=-;')){{{]{{{)';,$@...................................+#--;!)){)~;;,*&+......................+@*>-;;'~~~;>$&+..................+&$-;!)))!;-,*&+........+%$,;!~){))!;-=&...................+@#--;)){{{{)~!-#@.........................................................................................................", "...........%$--;!~'!-,*&+.........................................%>;~)]//^^])!->#@..........................................................%$-;!{F/^/F]);-=#..........................................+#=-!~{F//rrrr//F)~;=%...................................+#-!))F^/^F)!;-=%+.....................+*=;!){]FF])'-=%..................&$-;)]F//])!--=&+.......&*-;~{F^//F)!;-$%+................+&*--!)]^/r^^/F);-#&........................................................................................................", "..........+%*--;!''!-,$#@.........................................&=;~(2[5*@.........................................+@*=>;!(F}[QPPP<&...................................+%-;)|}<<<[('-,$%+.....................@#=-!~1[;(4<;~}[5QQ}(!->*&+................+&#=-;(1Q#&@........................................................+%=,c(4565Q[}(;-*%.........................................+%#$-;(}[QI8OOYYO67(;=@...................................+$-~1[58O652~;,=#&....................+&#>;~:[5Y65e;-$%@...............+@%$-!f58O6<:~;>$%@......+&$-c(9;abe4fbd0-*#+........................................&>cb7ijqqjgfa;,$%&+.......................................................@#=3cbijomih4ea3*#........................................+&*==;ae4iimjqqoqqpgb9>&...................................@$9afgmqZoigbc->*%+....................&*=cdfipqqjga3>#@...............+%#$-agjqqjifdc,*&@.......@*-0fgjqjmi4ba->#%@...............+&=39abgjqqWWqjf09*%........................................................................................................", ".........&*,cdegmppi4b09=#@.....................+@@@+............+#30bflXnZnl4:ac,**&+...............................+.....................&*=,cabhmnXVVl4b03#+...................+++.................&%>9cd7hmnnonnnnnpiga3>#....................++@+...........&=9dekmnoXmkedc3>*%+...................#*9ab7lXoYmgdc=*@...............&%=,cd4mnZnl7:a9>$@......+%*30binnXXVk4ac,=#&@+..............@*,0ab7mnZWUWpgdc,#+......................+@++............................................................++...............", ".........*-']rsHDuEDxz/);=*@.............+&%%%*%$=*$#&+...........*;{/zxHHHHCxs/{~;->$%%@+..............+@&###*****$**$*%&@..............@%$,-')/KxACBCCCxr]'-&..........+%#*#***%#$*#@+............@#=-!{/ztGvELvGHHBBAsQ{'-*+.........+&%###**#*$*$$*##%%&+....#-)FrsCCGCHAyr]);--*%@+..............+@=-~FrxBCHBHs^{;,&.............&#=-;~]QyAHHBHxzF~-=%......+$,!(/sBHBHCAs/)';,=#$#%%@..........&$3'(/KxADLELDx[{;-&............+%###*#***$=$$****%%%@........+&###****#*#*#*##*&+..................+%##*$*=$#*%&+.........", "........+#-!]rytDuEuAs/{;-=&...........&%#*=,--->----=#&@+.......+*;)/zyBBBCABsrF)';--,**%@+...........@%*==,----;-----,-=#%@..........@%#*,;;~]FryACCCCBAzF),&.......+&&#$>,-------->=#@..........@%*,;)]rxAGLELLHCAAysz/{;-#.......+&%##=>,-------------,*#@..+&-!FryACCBBBxs/{~!---=#&@+...........@#-;)FrtABCCAs/);-#+...........@%*,-!)FryCBCCAyzF);,%......+#-;)FzxBCCCByr]);;-->-,=*&.........@#-;)]rsAHLLLGyr]!-#+.........+%#$=,----;;----;----,*#&......+%#=>-,-,--------->=$%&@+..........@&%%$$----->--,,=#%&+......", ".........&*-!1[5wNNw52|!-*#@.........++&%*$>==,-=,,==$$$%@+.......@=;'][rKKKIr^}{~;-->,=*$%&..........+&*#=>=>,--;-----===*%@+.......+&%%*$=-;;~{][^IKKKK/]!-$+.....+@&###$=,>---->,>=**#+.........@%$=-;)][IJwNwwPI^^[F1);=*&......+@&#$$>>,>--;;----->==>$*@...@*-!(FIKzKKr^F|)';-,=*$#%@+..........@%*-;~]2rKKKIF(;,*&............@#$>-;~(][IKzKQF]~-=*&.......&*>-_]}^IKKK^F_;--,,=>>**&+.........+%$-;(1QPwNwO[_!-*@.........+&**=>==>-----;------,>$*@......@%#$=,,,,=>=>>>=>,,>**%&+........+@%%*#==>,,---,,,=$*%%@+.....", "........+&*=3!b<6OY6<2('->%@.........+&%$>---;;;;;;;--=**%@.......&=-!_:QIIIQ[}:((~;;;->$*$#&+.......+&*$>>--;;;!!~~~;;;-,=*%@......+&%*$=--;;__(:}[QIIIQ[(!-#+.....@%#$*>---;;!!;;-;-,>*#@........@#=,-;_:[Q5OOO6<[}}1|(!-=*@.....+@%$**=,--;!!!~~!!;;;;--,$&...+#=;_|[QIIQQ[2:(_~!;--=$#%@..........&$>,;_|}[[IQ[:~-=*@...........@#*=-c!_(:}QIIQ[}(!->#@.......@#>,;(:}[[QQ[|~!;;;;;--,>*@..........&%=-;(}5MNR87_;=*&.........+*=,---;;;!'~!!!;!!!;;-,*#+.....@*=---;;3;-;;;;;;---=*$%&+.......+&#$$=,--;;'!;;;--,=$*%@.....", ".........&%$39afgipig7ea-*%@........+&#*=9;aaa|bbbdda0c,>#&+......&*,;de7hllhh74febb_aa;3==$%@.....+&#$==3;aa_bbbbbbbbdda0->*@.....+&#$=,-;adbbeef7khhllh7bc-%.....@%$*>,3;aadbbbbdda0;,=$*@......+%$,cadb47llmXmmhh74eeba9=#@.....@%*$>,3caddbbbbbbbbbddacc3#...+&*30b4hllhh744eebbda;3=$*&+........+&*=30db47hk74ba->*&+.........+&$>3cadbee7khh47fbd9=*@.......@&$=ca1e4kkh4bbda~dad0a03=&..........+&*>9cbiqWWjgdc,*&........@%>9;aadaddbbbbebbbbbbda;,=&....+#,30a~d_ddaaddbddda09==*%@......@%#*=,-;aa_dbbbbb~cc,>$%&.....", ".........@%*>90b7llVlh4bc3*@........@%>-cab1e444k774eeda3=*&......@*3cb4lVVVVlllkhkk74ed~093=%+....%*=,ca(be4444kkkkk7444bac,#+....%$,;'a(be47kkhhlllVVVVke_3*+...+%*,;'0_b4444k74k44:da03==%+....@*=cd1ekhVlXXnXXllhkk4ed;,*&....@%=99!ad1e4477kk7k7k7k74:d0$+...%>9_bklVlVllhkhkk74eba09,$@........&*>c0(e7kllll4edc,$%+.........@#>9a1e4[kkllhllkk4ba9=#+......@#*30b44kllVk4eee447ee:ba3$+..........&*,9afmqWWogbc9>%+.......&=9_be44747khhkkkk77474eda3$+...%=9_be47744e4474744e|dac3=*&....+%*,;'a_be4447kk74eedac3,#&....", ".........@*=-;~/KxtAABsr{!,%.......&*,;)/rsxAAHBHBBAAAs/{!--%+...+#-'{rxBCCBHHHHHHHBBAAyzr/{!,&...@$;!{/rsxyBCCBBBBCHAHAByzF)-%...&>;~FrzsAtCBHHBHHHHGBCCtzF'>+...&,;)/rzsxABCBCCBBBtxsr/]~;>&....%-']rsxACGHHvvvGHCCBBts^{;,*...+#-;{/rzsAACBCBBCCHACHABtyr];+..+$;)FzxCCCHHGHHHHABBAsz^F)!>&......&$-!{/rytCCHHHts^{;-*&........@#-;{^zxtACACHHHHHAAz/);>&......%=-;{^stACBCByxsyAACAysz/);%..........#=;~]KtEEELyI{!-$@......@=;{/zytBBCBHBCHBCBCCBAAAsr]!#..+>!]rsxABABtAyABABAAAxzrF]~-$+..+%-;)FrzsytBBBBBACCAysz/]);>&...", ".........+&*,-')]rzsyxs/);,#+......&=-~]zytBHGGLGLLLGLBs/)!-$&....&>!{^sACCHvvLLvGLLLLGCBts/);*...%-!)/sxBCHvHCCCBGvLLELuGs^{;*..+%-;]rytBCvGLLvLLLLLGHBCAzF),@..+$-!]rytBCvvHCBCBvDGCBAsr]~-*+..+*-!FzxCCHHLLLLLLGBCBCAxr{'-#+...*-~FzyABBvGCCCBHvLLvLLGHts/-@..+$;)FzyCCCGLLLGLGLLGHAyzrF);*......+=-'(/zxBCHvLLHxr{!-=@........+#-;]rxABCCCBGLvLvGHs/);>#......@*-;{rsyBCCCBBABCHLvHBAxr{;*.........+&>;~]IAvEuvyr]!-=&......@=']zyCHLLLLGLLGLvLLLLLGGBxr{>+.+='FzxCGLLGCBCCCCCCvHHAsr/]!>&..+*-!{rytBCGGHCBCCHGGCBtsr]'-#...", "...........+%*=-;'~{]F]);=#@.......@*>-~FQKKJwwNwNwNwwOQ|!->*&....@$=;)/IKKJwNwNNNwNNwwJKK/F!-%..+%=-~F^KKJwwwJJKJwwNwNNw8<|~-&...&=-)F^KKJwNwNwNwNNNwJJKIF'-*...+%=;)2^IKJwwwJsKJwwwJJz/}';,%....&=-~F^IKJwwNuNwwJJzKzr/|;-*&....%>;(/IKKwwwwJzJJwNwNNNwJK[)-+...%>;_]QKJJwwNNNNwNNwwPI}F(;,#.......%>-;)]/IKwONNOI|;-*%+.........@$-;{/rIzKJJwwNNwwOQ1;,*&.......&$,;)F/^IzJKrQ/PJwwJPr2{!=#..........@#>-':5wNwOQ|'-$#+......+#-)FQJwNwNNNNNNwNNwNwNwwPIF~$..+*;)2IJwNNwJsKsKsPwwwJK^}]~-=@..+%=;)FQrPJwwwJsKJwwwJKKr1);,%...", "............+@**>--'_(_;,*&+.......@#*-~1[QPJwwwNNNNNRO41';-*@....@%>-~:[QI6ONNNwNNwNNYPK<[1~-%...#=;_1[%...#,9_1[QPPwNNNNNNNNSOJPP[|!-%+...#=;_1QIPJYSO8PKPOSOOII[:_;,#+...@*='(}QIJwNNNNNROKIQQ[}(;=#@...+#-;(}[IKJYwJPKP8RNNNNNw8Q}_=+...&>-'_}QIJONNNwNwNNNR6Q[1(!,%.......&#--~(}QI8SNNR<1;,*&..........@*=;(}2QQIKJwwwNNSO7_->*@......+@*=;_(:}Q=3c_a9>$&........&*=9de4hinqZWZZZWZqogeac9>&....@#=3a:7lVmoWUWWqZWqqommlhfd3%...%,;dfhlmXqqqmlhmpqUTTTTjgb0>&...%,;bfkimpqWZqZoWWUWjXmk7bc-#...+#-cbfkmmooWqpmlmoqopmlh7d;,%....@*=;de7hpoWWUUUqpi<77e1a9=%@...@*-ab7himqqqqphmpqUUTUWqphf0=....@*30d4hlmnqWWWZWqWWqmh7f:a3#.......&*,30df7ipWTUqgbc9$%+.........@$=9d1447hlmoZqZWWjgd3>*&......+@#=3ab:4hiVihhiijqqp77bd9>&..........+&*,cbgqWqjgd;,*&........%>cb4mnqWUUUUUUWWUUUUUZjmgea>..+%-0b7pqWUWqnmmmlmmoqoi47eb0,@...%>9bfkimpoqpmhlmpqopmlh4dc,#...", "..............+@#*>999;3=%@........@$3'dekklXnooZooZZWqm7edc3#+...@*>c04hVXnnqZooppnXooonomhea>+.+$9aehmnonZopmhhhmnqTTTTqiea9#..+$9dfhXnonoononnooZooXVVhe_3*+...$9dflpnonooXXmlVXnoooonkfd9*+...@#>cabfklnooZWqqmhk4eeda3>*+...%,cb7innooooXmllmoZZZZZnmked>+...%=3a1kVlXnXZononnnooXVlh4:c$+......@*=9cd:7kjqUTUifa3=%+.........+&>30dbe4khlpnooZWqib0,*&+.....+&*>0_e7klnooXpnjqoolkeba3=&..........@$>9afiqUWqgb03=%.......+#3ab7lnZZZZZZZZZZZZZZZoXVVkb,+.+#,ab7loZZZonXmmllmnnnVVkked,#..+$cdeiXXonZoXlhklXnoonomifdc=+..", "...............+%#>---;-=*@........%,!]/zxtBCCCCCHCDLLvAysrF',&..+&>;)/sAHHvGvCHAyyAHBHGLDDtsF;+.+-{^sGDDLvGHBtxxsAAvLuuuuxKF;$..+-(rsGvLLvHHAtxtCCvCHHCBAzF'=+..+-]rxGvEEDGHHAAABCBHGvDDGxr]-+...%*,;)FrsxHHGGvGCAssr/F{~;-$+...$~FztHDvDvHHtysAAHHGGGHCAs^(-@..+*-~]zABCBCCBHBAtAHBHHBCCxzF-+......@=-;~{/zsGEuEuwz{'-=&.........+%=-'){F^rzsytBCvLvtI]'-*+.....&*-;{^sxBGvLLEvLDvHAys^]);>&..........@$;)FztEEEvxI{'-*.......&=;{FzxCHBGHGHHvCHCGvGGHHBCyr;@.+=!{/ztHHHGBHCCtxtAHHCHCBAs^)$..@-{rsHDEDGCHBxysAACCGvLDHyr];#..", ".................@%#$**%#@+.......+#-;]^zsyBCCCCCCCCLLLHxszF)-%...#>;)/stCBCCCCtssssxACLLELGs^-@.+-(/sHLLLvCttzzzzsytGEuEGy/{!*+.@-]rxHLELvBBysssxACCCBCCtzF)-@..&-{IyGLLLLHCBBABCCCCLLEuGyr{-@...@*,;~{/rsACBCCCCyz/F])!;-$@...+$'FzAvLLLGCtyszsyACCGCCCxzF),+...%;)]zyCCCCCCBxssyxBBCCCCAz]-@......+%$-;){^sAvEDvtr]~-=&..........+%>-;!){F/rzsytGLLyz])-#@.....+$-!)^zyBHLLEEEELGAAsr/{!-$@..........&=-~}KAvEEvyr]'-#+......+=;~{rtABCCBCCCCBCCCCCBCCCCt^;@.+=;)]rtACBCCCBAysstABBCCCBy/)=+.@-]rxGLELvBAxszzsytCvEDLGyrF~*..", "...................+@.+............@=-'{F^/KKJJJsKJJwwRPQ2]_-=@...@$>;~/IKKKKrI/2]1F2[IOwww6}(-...$'([6wNwJQ}F{)_){:}QP65<2_;=@..+=!([6wNwJQ[2]1]2^rKKKKKQF)-*...@>'1<8NNNwwJJPJKJOJwwNNR8[|'=.....@%*-;!1F^IrKzKI/:);;,=*%&.....#-_:-;(:5ONwO5|!->*+...........@&##=>--'_(]2[POO<1!->%.......@=-;)F[IJwNNNNNw8Q}|_;;,*%............%>-~:5wNwO<('-=@........&=-'(2IJJsKKKKKKzKKzKKzIKrQ],+..%=-'(/IKsKKrI/F]}F^IrKKKr[);%..+=;1[6wNwPI2]]|{]2}Q8www6Q|~-%..", "...................................&$,;(2QIKPOOP6IKPYSM5[:_!-*@...@%=-~1[IIQQ[21((((|:48RSO5:'=+.+*9_15YNR841_~;;-;~_|1}}1_;,*&...*c(}POSY541(__(_:[[IIIQ[|!3*+..+=;(g8NSNNMYYRRRSSSSNNNR64(;*+.....@#*=;~1}QQQQQ[1_;-=*%@+......%-;(78SNY8<[}1|1}QIIKIIQ2(;,%....%$>;(1QIK..+&*-;(:QIIIQ[}1_(((:2[III[:~-%..+*0d}6YSY52((~~~~_1[5RSY84(;-&..", "..................................+&*-0b4hlmoWWqnmmpqWqigfba3$@...@#=-ab7hlhg4fbbaaddbgpqWqie0>..+$9depqWqpfbaac93990dbbbd0c,*@..+$cdfpqWqpfbbdaddb47hllh7ba,#...+=cbgjTTTTUUUUTTTTUUTTTTjgbc=......@%$>9a174hhkk4ba;,$#&+.......@=;dgpqWqnih4fffghmpmmlhfd;=#....&$,;d4hlli4febaadbe4hhlh7b0*.........@%*=3;bgjWWqgb0-=%@...............+@%#*,;0bfpqjgd9,*&......+@*=30bf7pqTTTTTqigba0-$#&@...........&*>90bgqUWjgdc>*&+.......@$=;0ehlmhhk7khhhhhhhh7hhhfd>...&*,;0e7hlhh4:bdadb:47hhlhea3%..+*cdgiqWqifbaacccadfiqWqpfbc,&..", "..................................+#=9~ehVXXZWWZonnoWUWph7:dc=&...%*30d4lVVXVk7e:bbb|fhpWWZpgd,+.+=0b7pWUWogeba09-3cadb:bbac3$&..+=abgjZWZpkebdbb:4klVXXlhe_9*+..@,0fgqTTTTUUTUTTTTTTTTTTqgb0=+.....@%*,cdekllVllked9,=$%@.......&>3a7poqZonpmmimmnZZnnXVkb03%....&=3aekVVlVk4e|bbbe4klVVlh4a>@........+#$39abioWUqpfdc,*&+...............@&$>,cab7pZqib09$&+.....@#$3'be7hnWTTTTUWp74b_93=%@..........+&*,9afiqWWoieac>*@.......&*,cd4hVlVlllllVVVVhllllllkb,+..@*3ab4lVVVhk4ebdb:fkkVVVl7b9*..+=0bhnWWWphbbda_ade4pZWWpiba3#..", "..................................%-;)^stHvvDvDvBCHvLEEGBxz^{;%...*-~]rsAHHGHCAyzrrrssHGEELGs/;+.@,]QsHvELGtsr/])!~){/rzrrF)!-%..@-FryGEEEGAszrrrsxtACHGHts/)=+..@-2IwuEEEEEELELEEEEEEEEuuJr:-@.....%=-;(^sACBCBCts^{'-->#@......#9~FrAHHHGDDuvDEDEDDGGGHyr{!>+..+*-']zxCCCCAtsz^/rzstACCCts/;#........@=-!(/zyEEEDtK^]~;=#+.............+&*=;!{/rsHDvtKF'3$@.....&*-;{^stAGLEEEEEEGAtz/{!;=%+........+#>-'{[stEEEvxK/{;-=&.....+%-;{/sACCCCCCBBCBCCCBCCBCCtr;@.+#-)FrxACCBBBxzr^rzxABCCBCyr(>..@-FIxvLELHysr^^/^rzxGLEEGyKF'$..", ".................................+%-~]rxHvLLvGHCCCCHLELGCys/);*+.+#;)FrsACBCBCBxsrrzsxCvELuGs/;@.@-{rJGLELLAyz^])~))F/rzzrF{~;*..&-{IsHLuLvAyszzzsyBCCBHCAsF)-@..@;]rxuEEELvvBHCHCGGvLDvGts/(-@....+%>-!)/sAABCBCAs/])!-=*%&.....%,;{^sABCGvLLDuvELLvvHCBtr]'=+..+*;)FzyCCBCByzrr^/zsACBCBBs/~*.......@#=;~{/KtGDEEAs/]~;-=*+...........@&*=-;){/zJtGDyr]~-*&.....&=-'{rstCBGvLLvvvvGCxrF)'-$@.......@&$-;~]^JALEuvAzF{!;,*&.....*-;)^sBCBCCAACCCCCCACBCCACxz;@.+#;)FryBCCCCtysrr/zttBCCCBtr{=+.+-{ryGLEEvAxzr^^rzyAvLLLGxr]'*..", ".................................+&=-~1QJwwwJI[^[/QIJOwPQ[F_!,&...&=;'{/QKKKKzK^FF]2^IPwwNwP}(>+.+$;([PMNNOIQ}|)';'!)1F2]]_~;=&..+>;1[8wNNOII/2FFFrKzKKKKQF_;*+..+>~:QJwNNwJKKIIIQIQIIIIKQ:);*......@*=-!)FIrKKKrIF|~;->$$&@.....+#=-'{F}QI8886O8JOOJJKKK^]!-%...+%=-~]/KKKrQ/F1){(F/QrKKKr[);%......+&**,;!(2-;'_2PwNNO<}_!-,=*@.....&=-;_/KKJKKrrIzKKzKzIrKzKK/F,+.+&,;)][rKJKK^2F(((]F^IKzKK^]'*..+=;1[8wNNOPQ/](||}[POwNwJQ|',&..", "..................................&$-;148wSO54}::1}[6OO<[}|(;-%...%=-'_:[IIPI-;(:[QQQQQ[2(~;--=*#&......@%>,3!(|2[[<[[[[<-;'~1$#@.........@%$$$=>-;~(1[6M67|;-*@......&*$,;(1}[QIPPI>-;_(:$#+....%==;_}[IPP+..&*-;(1QIPP<[2()_((}}[QIIQ2|;$+..$;_28YNYO<[}:1(1:[QORSM52(;$+..", "..................................&*9cbgpWWqpgf7ffggjqqphffbc,%...%=-0dfhmmpXmihffffghmoqWqib0$...%,abiqZqnmh7ffbbbbff7f7fbba-@...*9afiqqWjikffff7hmmnmmi4fdc>+..+$3afpqWqqmihg77g7ghhilhfbc,#.....&*=,;abf7hhlikh7bbdc09,*#+.....+&*=-30dbffff7777hhhlhhedc=&....#>;db7ilihgffb(dbef7hiVihfd9*....+@**,-0adbggqTTqigbbaa;3$&........+%**,,9;cadbfgmjjgd;,$&......@*=9abf7hhlmikhhmoWqigfbd09%......@%*-;cabffiqTUqifb_ac9>*@....&=-0dfhlmmlh4hhhhhhhhh4hhhhb,+..%=;abehmmmi47bbddbf7hilik7ba=...%3afiqqqjmg4feff7gipWqqpfd9$+..", "..................................&=3aegoWUWommimmmoqWWopmi7d;%...%,0b4hmnoZZooppmimmpooZqjif0$+.+#3aeiXoZoXmmiiiiiiiiimmhkeb9#..+%;aeinZoonmmmiimpoZooonmked,+..+%9afioZZooonpppmXmmXnnmhea9*+...@*=9_beklmjononpmih74eda3*&+.....@#$,c0de4k+....@&=3_be7gijqWTTqjih74eda,#+...%,0d4hmoonmVlllVlnnnnVVVnpm49+.+#,ab4hmnonnmiheee7lmXooonh4b,@.+#3afmnZZonXmliiimXXoqZqifac*+..", "..................................&,']ryDuEEuvLDuvvuEEEEDDHxI(>+.+$!]zABDDEEEuLEuvuDEvDGGGAs[)=..+>;{/yBHHvLvLDDGLvGLDLDGGByr{=..@=~{rsCHHGLLuvvvDDEEEvEEvAs^'&..@>!{rxHHDvvEEDuDuDDDDDvDAsF'=+..+%-!]rxAHGLEuEuEDDDGHtAs^);$@.....&=-'{/rsxtCACCCCCCCCBBs^);$+..@-)^xtvuLuEuvGxssxtDvEEuEvty/;+...%,;)^stBHGuuuEuEuuDHAAxr{-#.....+$-']/rzsyxBBBACHHCs/);-#+....+$;'FsADLDGHCAtxtAEuEEEGGtxz~%...+#-;{rytBvuuuuEuEuEvABts/)-%..+=;FrtHvEELvHCCCCCGvuvGHHvDDJ(@.@>'/ztHDuEEvDGtssstvDuEuEEGtz~@.+>!{rxBHBGLvuvvvDvuDvHGHtr1~,@..", "..................................@>;{^sGvuEuDuLDuLLEEuLGuDyr{-..+>;FrxHGLLELuDDLDDLLLGHCByzF'$+.+*;)FzyACHvLLLLvuDLGuDuDvtxr{>+.+$;)FsxBCGGDLLuLuLLLLLuuvBxr;&..+*;)/sxACHvDvLDLvuLuDDDutzF'>@...*-~]zyBBHvLLEEuuuDGCCAyr);-%.....%=-~]/zsBBBCCBBCCCBCBxzF';*+..+>)rsAGuEuvuDGyssyAvDLvuuDHxr-+..+#>;)^xBBHvEuEEuEEDGHCAyz]!$+....&$;)FrsxAABCBCCCBCts/);>#+....@$;~}zwvGvHCBAtssxvEuuvuDGAz]$...@$-']zxBAGvEEuuEEuvvHCAyr)-*..+$~FzAAGLLLGCBCCCBGvvvHCHvvvx)&.+>)/sAHGDLuuLLAxsxAGvvuEuLHAr~&.@*;)/ztACHGLLLuLuDLvvCCxs/);$@..", "...................................%=-!|[5P666J68O666JO86P<4(;%...#,!1}<588O666686668PIQ[2]_;=&...&*-;):/[<56P8P6K8668P8P<[:~-%...&$-;)]}[I6686JO8O8O6O6P,;~|/^rKzKzKzKKKr^/F);,=@...+*-(:Q<6O6J65<[::2Q566J665Q})>....@$>;)F[[IP6OOY6O66PII/F(;=%.....&*>;_F///rIzKKKKIQ[|!,$#@......&>-'1QP6PII^/F::4<668OPPI[];&....&$-!{F[Q<66OYY6OO8PIQ/]);#@..+%>!12<6686IIQ^QQQIPPPQQIPP<4;+..%-'][QP66J6PP[}:2[-;'_1:2}}}[[[[}[}2:1(;-=@...+&*,-'_(|22[[4[[[[[[4[[:(';*+...@#*--;_(|}}[[[4[[[}}111_;,*&+...@#=-!(|:}42[<[[[[[}:1(~;,*&.....@#=-;_1}QQQII;(1[[QIIIIIIQ[:(!-=%@.......&*>-!b}2}21(__~__:2}}[4[:_!>@....@**-;_(|}}}}727[4[21|(~;=#+...@$-!(:2[[[2:11|1}}4}}2::}}}_,@..&=-!(:}[[[[4}:___|2[4[[[}:(;=...@#*,-;__|:}[}[[[[}e1(_;9-*#@...", "...................................+%*,300dbbbbfbfbbbbbfbba0,*&...&*,90abbbbbfbbebbbbbda9c-=*&....+&*=,,390dbbbbbbbfbbbdda;-=*+...+&*>=390abbbbfbfbbbbebbba9-#.....&#>,33cadbbbfbfbbbddaac3=#@....@%>-9addbbfbffffbfbbda;9=&+.....@#=3ade45llhllmmlh7edcc,$*@.....&=3cabbffbbbd000adbbfbbbbd0-&....@#$$3c0adbbb1fbfbebbda09=*@.....@*>cdf7hhhhllllk4ba;>$&+.......@%$-;abbbbdaaa9c0abbbfbbba;*.....+#$,30addbbbbfbebbbbdac3$%....@*,cadbbfbbb(b(dbbebbbbbbbba=..+@*,c0dbbbffbbd000abbbfbbbda9#....&#$,-3cadbbbbbbbbba0;3=>#&....", "....................................&#*,ca_dbbbb:bebfb:bbba9-=&...@$>3;adb1bb(bb|b:bbdac9,=$*@.....+&#*,-9c0bbebe:b1bbdacc3,=%+....+%**>-cadbbb:bbb:b|b:bdac3#+....@##$,,30ad:b:bbebbdaac3,$#@....@%*>c0ab1b:eeeef1bbaa09,*%......@*>c_b4kVVllXXXXml4ed09>*%+.....%*,cadbeef1ba'9c0ab|be:bda0>&....@&%>,9caab1bbb:b:bbdac;3=%+.....&*=0b43;0adbb:b:bbebbaa0;,=&...+&*>-cab1be1dbddddbb:bdddb:dc$+..@*=30adb:bb:ba0330db:b1bd_0,%....@%*$=399abbfbbb1b003,=>*%+....", "....................................&$=3;_(]//[//[///[///F{~-$@...@$-;~(]2/2F]F}////2]_';3,*%+.....+&#$>-;!)]2//}^//2F:{_';->%......&#*--;)]/[////[//}///](';=@....+&#$33;~(]/}////2F1_~';-=#+....@#,-'))F2/^/rzr^^/F{)~!;-%+....+&=-)F^sxBCCCABCBAAsr]~;-*#@.....%-3!){F/^^/](~';~{F//}//F)!,&....+%#-;'~){F2^/[F[//F{)~!;-#+....+#-;)/sxAABCCBABxzF)!-*&........@%*-!{F/F])_!;;;'_]/^^^F]);*......@*>-!~)]F[/[/////F{)!';>%...+%=-;~(F^^^/F]]]]]F//F{{{]F:)=...@#>;~{F}//[FF{)'~)F}/[FF()~;#.....&#>--;_)]F[//[/]{';;-$#&+....", ".....................................&$=-;!))))_){{{{{()))!;=%+...+&*,;!))))))){)()))~;--,#&..........@*>>;;~))){){){))!;;-=%+.......+&*$-;))))_({))){){)~!;-$@.....++%*>,;!)){({){))~;;--$&+......@#--;!))|)]]{F]]{)~;;-$%%+.....&*,;)]/zsysxysyssr/]);,*&+......+#,-!))(]{)~!;;;;!_{){)));;*+......@%=-;!~){){{{_{))~';->#@......%$-~]^zzsyyxyyzrF{~-=#+.........@*>-~)))~!;----;'~)(]){);,%.......@#>,;!~)){){({)))!;;,$%+....&#=-;~){{)))~'~!))())'!!)))-#+...@*-;!))){)_)!;;;!)_))))~;;$@......+&%$,-!))_){)~);-=#*%@......", "......................................+@@&#==-,->-=,>--===##@.......+@#*==,==>=>->>==>*%&&+.............@&#$$>>>>=>>>$**%&&+...........@@@&$=,,>=>,>=>====#&@+.........++@%#$=>=>$>$$$%%%&@+........+%***>>->--,-,->>=##&++........@#=>-;~)))))))));;,=*&+..........&#$=,,>>==>****==>=>==>*%+........+@@##==>==-,>>>===#&+........+&*=--'~))))))';-,=*&@...........+%*====>*$$*#**>=>,->$*%%+.........&#*==>>->-,-=>>=**%+......+@@#*==->->=>====>>>,===$**&......+&**=>>,,,==****>>->===##@...........@##=,-$=$**%@@..........", "........................................++@@@@&@&&%@%&&%@@@+..........++@&@&&&&&&%&&@@+....................+@&%&&&%&@++...................++&@%%%%%%&&&@&@@+..............+@@@&&&%&@+.+.............+++&&&%&&&&%%%&&%&@+.............@%%%**$====>=**%%&@.............+@&&&%&&@@@@@&&&%&@&@@+............+.+@@&&&@&%&@&@@@............@&&%%##$$***$#%&&@..............++@&%&@@@+@@@&&##%%%@++............+&&&#%%##*%#&&@&+..........+.@&%&*#%%%%%&&&&@&%%@@+++.......++@&%%&%@&@@@&&@&@&&&@@+..............@@@@%@+++.............", "..............................................+...+..........................+........................................................................+...........................+........................+++...++...................++..++++++++++......................+....................................+...+...................++++..+++.+++.............................+@@@@@++.................+..+@&@&&@@@.+..............+++@&&@@+@++.+...+....................................................+...................", ".....................................................................................................................................................................................................................................................................................................................................................................................++............................+............................................................................................................", "................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................", "................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................", ".................................................................................................................................................................................................................................................................................................................................................................................+@@++..........................................................................................................................................", ".............................................................................................................................................................................................................................................................................................................................................................................+@&#*$==#&@.....................+%#***%@...................+@#***##@+..............................................................................", "............................................................................................................................................................................................................................................................................................................................................................................@%%*$3c99>=*&+.................+&#=3999=*&.................@%#=9c;,=#%@@............................................................................", "........................................................................................................................................+@@&%#&@+..........................................................................................................................................................................................................................&**>,30dda9>=*%+...............@%#,;addac,*%...............&*=>3cdd093=>*%+..........................................................................", "......................................................................................................................................+%*=>----=#%&@.....................................................................................................................................................................................................................+%>-!~)]Frr/)';,#&..............+#-;)]/rr/{!-=@.............@*-;')Frr/])~;->%@.........................................................................", ".....................................................................................................................................@&*>-;;!'!--$*%&....................................................................................................................................................................................................................%>-!)]F/rzr/)!--*@.............+%$-!]rzssr]~;-#.............@*--!)/zsz/F])!--#@........................................................................", ".....................................................................................................................................@%$,-;;'~'-,$%&@...................................................................................................................................................................................................................@#=,;~|F}}/}(;-=*&...............&*>-_2IPIQ|;-*%..............&*>,;)F2/}F|);,*#@........................................................................", "....................................................................................................................................+&$=-;!~(1(!-*$%@...................................................................................................................................................................................................................@#*,'(}[[[}:~;=#&+...............&*=9_48OO5:!,=%+.............+#*=-_|[[[[}1~->#&........................................................................", "..........++@++................................+@++@@@++@++..............++++...................................++++...............+@#>-ca(beeea;,$*#&++................++..............................................................................................+@@+++.....+@@++..................................................+@+++@@++++++++...............%$>;dfhhhhfea9>$&+...............@$>9dgqqqjea-=%+..............&$=3abfhkihed;=*%+.......................................................................", "......+@&#***######*##&&@+...............+&&%###********%##&+..........@&%*#&##%*#%#%%%&&@+................+@&&##*##%#&&&@+........+%*30d:44kkkedcc,=*#&@............+@%%#%@+.....+@&%%@+............+@%#%#%%%%&&%&&%##*%#%%@........@@&%%%#&&@++...+@&%%%%@.........+@%#%**#&&&&&%#%**#&+..........+@&%%%&&&@++..+&%%%%%%&+...........+@&#%************%@+............+&=3abhmonV7:d;=*&+..............+%*,0biqWWqgdc>*&.............@%#>3d:7innXifa9>*@.......................................................................", "...+%%=----;-;;;;;-;-;->$#%&@+........+%##=---;-;;-;-;---,,$#+.......@%*=,-;------;-;-;--$*@+............@%$=,--;-;;-;--->$%@......&$-~]rzytBBBsr/{)!;-=$%+.......+%*=>----$##%%##$----,=*%%@.....+&%$>-;>-;---->--,--;;--;->&.....@%$=,--;-->=*=###$-------*@.....&*$$--;----,->---;--;-$*@+....+%%$>------==#$#$$>-------$%+.......@&#>---;-;;;;;;-;--->*&+.........+%$;'FstEvvHs^]);>%..............+&=-'1KtEEEDxI{!-%.............&*=;!{^stDDDGs/)3,%.......................................................................", "...@#,-;!!~~~'))''~!!!!--,>*#@.......@#*=-;;!!!~'~~~~'~'!;;->%.....+%$>--;''!!!!!!!!!!!!;-,=%+.........@%*>,-;;''~!!!!!;;;--=&.....#,;)FzsyBBCAyz/F{)!;-,=#%+....@*--;;;;;;-->,>$---;;;;--,*#&....@#=-;;!~'!~!!;;;;;!!!!~!!;-=@...&$>--;!!!!;--->----;;!!!;;,#+...&$>-;;''~'';;;;;;'!~';;-==#+...@$,-;!!!!;;---=-,-;;!!!;;--=&......@#>--;'''~'~))~~~''!;--=#@.........%,-~FJAvuvHs/{';=&..............+*=-!{IAGELGyr]!-#+............+&=-')FJALLLGs/);=#.......................................................................", "..+%*=-;'!!~~~'~'~~'';;--=$$%@......+&*$>>-;;'!!'~!!~~~'!';-,#.....+%*,-;;;;;;;;;;!''';;--=*%+.........@#$>,-;!!!~!';';;;--=*&....+%*,;)F/QrKzK^/:{)~!;-=$*%@....@*=,-;;;;-->==>*>--;;;;-=>$%@....@#*,;;!'!!'';;--;;!!'!'!!;-$@...@*>,--!'';;-->==>>--;!!!;;-*@...&*=,-;!!!!;;---;!''!!!;-=$#@...&*=,-;';!;-->===>,-;!!!!;--=&......&#=,-;;!!~~~)_~'~!;;;-,>*@.........@*,-~[6www5}_;-=%+..............+&#>-'15wNwO<('-=&..............+&*,;!2IOwwO[_;>*@.......................................................................", "..+%=-;_(1111|({:1:1(((';--=*%+.....&$*,-;;~((1::111({:1{|(!;*@...+#*>-;~_)|{1)__)(||(((~;->#@.........&*=--!~(1{::|)((__~;->%+...@%>-c|}<=--c_|)(~!;,*#@....&*>;!(b|{b1||_!!!_b{1b1{1_'-#..+&*,;;_(b||(~;;---;;~(1b1)~;-&..+&=-!~(b:1b1)~!!_)|b:1b|~;=#@..+%,;;~1b11(_;-->,-;~({11b(!;,#.....@%*>-!~((1:1e1e:11{1(~!;=*@.........&*,3ae5MSY5:~-=#&...............+@#*-;(3;aabe4gimppikgiijiigbd9&...@#=,adf7giiiffefgihig4edc3*&........@#>3cabe4iijpig7fffeba-*@...@#>9aeijqqqqqjjjjppigba9,*%+...%,cbegipied03-3cafgig7fba;=*@...+#,;dbgijppijgebdbeipppijigbc*..+#>cdegimiigebaa0adbegipiigbc*..+#=cbgimjpiigbbbfgpijmiiea9*@..+%3abgiipigebac9;0degiijigba;*....@%$=cabf7gijpjpjjjpig7fbd9>@........+#*-cafpqUqiea3=%@...............+&#$9cbijWWjgd9=*&................%=3cbiqUqjgdc-$@...............+@&#&%###&%&@&@@@++.....................................", "..&,cb4ioqWZomXXoWWonVlkeeba9=%....%=3cde47hVXoqWZnmVXqWWomhe0*..+@*>c(7klmoqomkhhmqZnmVh7bc3#+......&*=3cd:4hmoZWWoXVVllkkea,&...&*3abioWWUTTUUWWWWWqmgba9>%@...#cb4ioqqqmebda0dfiqopVhkedc=%+...*9dfkmqqWWWqoi777iqqWWWWomhb,+.+*cdehpqWqomh7eb{b4hhpqWWjmhb,+.+*3agjqqWWWoi7f7ijqWWUWjib9,#...$_ehmpWWonh7ed_db4hmoqWnphea>+...@*=-aeklVoZqWWWqWWWqnVhkea>#........@*,9abgjWUUpfa9>$@................@*=90fiZWWogbc3$%+..............+#=9afjqUUqibac>#+...........+&&#*==>>===>=*==>=**#&....................................", ".+$!]zxHGDEEvCGDDEDvDBCAtsz/{;$...%,;{/rsxACCGDEEEvGGvELEDHts/-..+*-;]rtCCHvDvHCCCGDEGHBCyz]',&.....%$-!)/rstBHGvEDDHCBCCBtsF~$..+%-~FKtvEEEEEEEEEEEEEGyzF);-%..+>{zyADEEvGxzr/^^sAEDGHCAy/{;,@..+=)^yBGDEEEELDHxtAGDEEEEEvvAz'@.+-(rxBGDEEDCCAszzsyBCHvEEvHtz;@.@-)^JDEEEEEEHAxyBDLEEEEDwr:;=..+,FsAGvEEvvCAszrrstBHvEEDDAx/;@...%,;)/sACCGLEEEEEEEEDGHCtzF!$........#,;)/ztDEEvGKF~;=&................%,;~FItEEEvyr]~-$@..............@$3~:KwEEEvAs/{;-*@........+%#,-;;'))~)))~~'~~~!;;;-%+..................................", ".+*!]zyCGLLLvGGHLvDLHCCCCAyzF~$+.+*-)]rsxBCCCCGGDvGvCvLLLvHAs],+.+%-']rtACHDLvGCCCvvvGCCBAzF);*....+%-!)F/zyBCHvLGLGHCCCBCBs/)$+..#-~]IyvLEEEuEELLLvLvAxrF);$@...>(ryCHDLDHysrr^rKtHvHCCBxr]!-#..@,)/sBHLELLLDHAByAHGLLLLLvHAr;@.+-)^yBGLLLLBCByssstCCGLLLvHAz;@.@=)^sGvvLLLvHAABCvLLLDvGtr{;$+.@-FstHLLLDHCAyzzzyACBLLLLGBsF;&...%-')/sBBCGGLLLLLLLLLvBBAsF;*+......+#-!{/syGLLEAsF~;,%................%,;)FKyLLELyr]~-=&..............@$;~FztLEuLts/]~-=#+.......%=-;!~)]F///FFF]{]]]])~;;,&..................................", "..&>;{}IJwwwwwwJJJJJPKJKJKI[|;*...%>;~2IKKPsPJPJJJJwwwwwwOP[]~$..+@*=;{F^QPwwwwwJJJJJPsKK^F~-=&....+&>-~{F[IKJwJJJJJKKKzKzI/)-%...@*-;([8JOwOOOOJ6PP85Q|~!-=%....$;{2IJwwwP[2{((1:QPJJKKr^{!-*@..+*;)}QPwwNwOJPI[/[IPOwwNNwK[1-...*;)}IJwNNwKIr/Q^^QIKJwNwwP[{=+.+*-_}<6JOwwwPI[QKOwwOJ65[(;,#..+$!:[PwwwwJKI/F:F[IKJwwwwPQF~=....@*-;(FIKKJJJJJJwwwwwJKQ/]'-&.......+&$-!|[5OwNw6}~->*@................&*=-~2-_e5wNwwPQ:!->%@.......+&*=-!~)|}[[}}:]_))_]]1)!-$@..................................", "..&$-!|28OwwwOO6<[[QQQIPOO8<|;*...#>c([8Ow65QQQ[[IP6OYRwO6<1_,#...&#>-!(12>#&+...&,_|[8RRM5[1(_a_(:[QQKIQ2(;,*@..+%=;(15OSwO8...%>c~:2Q56YO6[}[3c|%..................................", "..+#,cdfhmppppig7fbee7hpqWqigc>...%-abiqWWoi7fffef4mmpnmni4b0,#...@%*,;abfijWUWWqqmg44774ea3=#......&$3ae7hmnqZpikhhhhlhhk7ba,%...@#*,;df7kkhlhh4eebbba9,*$&@....#>cbfpqZqmg:bdaabb77hhlkfb;,*@...#,9abijqZomk7feef47inqWqjgbc*..+*,cbfpjWWji47hlmhhghpqWqpgfc$...%=9adefhponig4gijopi7fbac=*@..+#>cafgmmmjppgfbeginjXmihfdc,&.....%=-a17hhhhhhilmmoqqigbba-=&.......@**3ae7moWWqiec9*&+................@%*30biqqUjgd9-*&...............+%=30biqWWomhea->%@.......&*>9~bf7gpjopihg77f77kh7b0,&..................................", "..+#,cdfhVVXXVVkeeeee4hnWUWj7b,@.+*9dgpqUWqm441eef4hVVVXVV7ba3%...@#$>9ab4ioWWWqopi4ffeeeda9>&+....+&=3deklloZWonpmmVlVlVh7:c3&...@#$,0dekhlVVVkkeeb_a09,>#&+....&30b7mXoomk4bddbb4klVVVVk1a9*@..+@=;abhXoonmVlk4e4kVmnoZophb0%..+%90d7mXZonVlmmoonmllpoZZnhfd$+..&*,cabeglnoommmmoXXh7bdc3>#@...@=90:7klXnZom744ioZZmVh7ba9=%....+#=9ae7klllVmnjoooqqi7edc3*@.......&$>9dellZWWqpfac>$@................@*>30fiqUWqgb03>&+..............@#>9ceiqWWZXl4dc=*&......+&=3afhmmmnZoononpmmlVVVl4d9#..................................", "..+$;~FzACCCCCBxszrzzsADEEEvy^!@.@-(^svuEEDHsszzzsxACCCCCBs^{;*...@#=;'{/sADLvvHHAszr^//])~;-%....+%=-~FrxBHGvEEDvDvHCCCAts^{;*...@*,;)FzxBCCBCtxz//(~';-,$&@....#;)/sBGBCCtsz^/^rsxACCCAAz]~-%..+#-'{/sACBGCBBxssstCCHHHCtz2~*..@>!)/zAHGHHHBvDuEEGHBHHHGHyr],...+$-!)FrzxHHvDvDGGHBsz/{~;-=@...&$!{^sxtHGvDHtyttDDDHAts/(!,&....&=-!{/zxytBCHEEuDDHHxz/]~;>&.......@=-~FsAHGLEvAJF)3=@................&>;~:QAEEEvyI]'-=@.............+#=;~{rtDEEDGts/~->*+.....%-;{^xHuvvGGHGvDuEuDvHCAAs/)*..................................", "..@$;)FztCBCBCCBszszsyAGLELGx^;&.+-{/JAvELvHxsszzsyCBCCCCBs/);*+..+#=-!)/ztvDDCAxsz^F]{))!;-$%....+*=;'FrsACvLLEuLLvCABAAyz^{!*...&*=-'FryABCCBAsrF{)!;-,=*%+....%-(/ztCCBBysr]FF^zyACCCCxzF)-%...&$;~FryBCCCCBAssyABBCBAysr];*..+#;)FzyBBCHCHGEEELGCCCBCCtsr)=+..+*-;)]/zstCGLLEvHAxs^]);-$%+...+#>~FrzyAGLLvCACHGGHByzr]~-#+....&$-;)FrzsyABHLELLGCtsrF]~;$@.......@#-!{ryAvLEDHzF~;=&................%>;)FKALEuDxr]';*@..............%=;)FKALLLGAyz]'-$&+.....%-']IyGLLLvBCvLLEEELvHBCBs/'$..................................", "..+&=-):^KKJPJJIQ/}[/QKOwww82(-+..#;)25wwwOPQ/[[/QIJJJJKKr[);$&....+%$,-!1QJwJK^}]_~;-->>**#@+.....&#>-'{/^KJwNNNNwwPK^^//F(;-%...+&*>-~{F/rIzI/})!;->==$%&@+....@>;)2rKKKI/F(_')(]F^QKKz[F';=@...+&=-'(]/^IKKrQFF//IzKr^[F);=&..+&=-~]^KKJJKKJYSNNOPKKJsKIF(;%....@*=-;'{2QKJwNNwPI}F~;-->%+.....+@*-')|}I6OJOOJOJJ5[F(!;$&+.....+&*,;~{]FF[Q8wNNwJKQF1~;-*%.........+%=-~:QOwww6}_->#@................+#=-_:@...............@*>;~:5wNwOQ}(;-$&.......@=-!|&.....@**-;d46Y8<}1(';>=*$*$%@.......@#*,;(|}[KOwwSwOOP>$*$%&@....+%-'([QIIQ2|(~!!(|}}QQIQ}|~,*+....@%=-!(|}[QI<}}:1[-;_2Q88RRRY8<}(;->*&+.......@$*-;_(|}4<6YSSO5[}|_'->>&+.........@*>-_e6RSO5:;-=#@................+&*-;b*$##&@.......@#*,;abefgimVmXmpnjmih7ebc,&...+@%*-;dbe4khk4bd0;-,=>***%@....+%>cb7hhh77ebddadbe4khlh7ba3#.....+%*,;abb7ipmg4ffhppifbdc9=&....%*,;afhhllllpqWUUqqjpmmh7ea,%....@%$,;0de7ipWWWjmkfba;,>$&+.......+%$,;af7ijUTUqigea9,*%@........@**-cdbfgijjjjpmh7ebbdc9>*+.........@#=3afjqUqiec3**@................+%*,0bgqUWjgdc=$@................#*-0biqWqjfd3=#&+.......+&*,cbgggheeffgigihi77b1dc-#...................................", "..+#=9aehVVXoWZZnpnmXnXooXpgb;%+..&=3afinnnXVlVVlmnZZoXXVh4b0,%....+#>,;afhoZoikeed!c3>**%%+.......&*,9abe4kkklVVVXXZZZnVlk4d9#....@#*3ab4[hlVlkeb(a~c09c3>=*&...+*9_ekVVVlk7ee1b:4khVXVVk4dc=@....+@*=3adfhnZomhkhmoom7ba;=$%....&*,017lVXmXnnZWUUWWZoXXVhea3&...@#$,30_e4hVoWWWZmlk4dac,=#@.......@#=99bekmqUTUqmkba9=$&........+&$,9'b:7ioZonXVlh444ee{ac=#........+&*>3afjWUqpfac,*%@...............+*,30fiqUUqgbc3*&...............+#,9aeiWUWogb03=&.........&#=90bbfbbbbbffefff4ebdac,%+..................................", "..+$;)/zACCHHHGvvDvvGHCHtysQ{!*...@>c{^sxtGCHCCCCCHGGCCBCByr]'*...+#,;_]^stDLDAAssr/{);-,*$@.......#-')/zxtBCACBCHCGvLGvHHBy^{=....&=-!{^sxACHHAyszzrrr^F])!-$+..@='FztCCCCCAyssssytBGGGHAsr]-#.....&*-;{FrxHvvHHBHGDDtK/{'-$%....*-!{^xACBGvvLLLLLEELGHBCtzF;%...%>;'{/rxtCGLEELDGHByz/]);-*+......%=-'(/stCGEEEDys^{;-#@........@#-'{/zstCDLvHHCCCAxtyyzr{;*........@*,;)2JGEEEGK/{;,*@..............+%=;~]KtDEEvyQ);-%...............%-;_[VwEEEvJr]~-*+........@*,;_1///}//}/}//^//^F]);-%...................................", "..&*-)/sABCCCCCGvLvvGCAtsz/F)-*+..@*,!]/zsyACCBBCBCCBCCCCAsr]!$+..&=-~]/zyALLGCBtxsz/]~;-,*&.......#-!]rxBBCCCCCCCCCBHGGGLGtr(>+...+%-;(^zyAHGGCBtyyAAyxzr/]!>%..+>'FzyCCCBCBByyxABCCGvLGHyrF~#.....+#=-!{[zABGvvLvGHHAzF);-$@...+%,;{/sABCBGLLvCHGLELLCCAAz{;@..+*-!{/zsACGGGHHHHGGCAAsr]~-$%.....@#--']rsACHGvGtsrF);$#+........&=-~FzyACvGLvCCCCACBBBAtz/~=+.......&*,;)/KALvuts/)'-=%...............%=-;]KyvvLvy/);-*+.............+%>!{/sALELGxrF~-*.........+%$-!~)){))){)]){]]]))~',*&...................................", "..+#=-~FIKJJJKKKP6PPIQ/:{)!;-#&....@#>c'){F2^QrQIrKKKJJJzI}{!-&...&*=-)|};){}IJwwJKIrQrKrI/[]_-=@..+*-!{/KzKzKzrQ^/rIKJwwwwJQ:)-&......+%*=-~:QIPwwwNwKI2(!-=%+.....+*=;~]/IKJwwwPIQIJwNOPI^/{;*+..+&=-']/QKJwwJQQIPJwwKI/2);,*@.....+#=--~{[IIKPKKQ}(;-$&+.........@*=;'FQKKwwwwKKrKrrzzKzr[{;*.........&*-;_}8Mww6}_;->*@...............@#$-;1>>>=->-,--,--==*#+....................................", "..+&,-~|[QIQQQ[[}21:|(_~9--**%......&#$>-;!((|11:}2QQIPPI[}_;>&...+$>;~:2[5OYO6Q[[22:(!;>$#&+......%*-;|[QIIPPIIQQQQQI6YNNY<:;*+....@%$-;(|[5OYP$&.....&*>-;_1}[III-~|[#@..............@&*-9_:5OSR8ea-=#@.............@@&%%&&&@&%*#$$#%%@@+.....................................", "..+%,;ab4hhlhh7ffbbda0c99>$#&@......@%*$=3390addbee44ilmlke0c,%...@*,0bf7kpqWqmhk774ebac3=#&+.....+#*,0|45lllmlhhkhhhipqUUjibc*.....@&*,3adfiqoplkhkhhkk74e03*@...&$,0b4hhhVlih7hhhlmoWWqpgba-@.......+%*,9af4ijWZopl7b0->*&.......@#*30bf7ijqjgffgiqqphfeb;,*+...%=;dfghioqqigf7ioqomhh7bc,*&....&%=3adbe7hilllh4bc-**@..........@#=-ae7hmjqWomhhhh5hllkked9#.........@*$,0fiqWoiedc-*#&+..............@@#>3abkhh7bc3*%@.............+&#=3cdfiqWqpf0-*#@.................+..+.+@@&&&&+.+.......................................", "..+#,a14lVXlllh7e:bdac9,=**#&........+@#$$>-cadb:e4khVVVVl7ba3#...%,9d7kmmoZWqoVlhlmh7ed03=#@.....@&$-c:kVVVVXlXmnmnnnnjqqjgb9%.....+%*=3cbfinonmnmXXVVlk71a9=@...@*,9de4kVmXnmmmlmVXZWWWoke03#........@*>9ae7lnoZZnh41c,*#@.......&%>3a1f4inomh7egmoomk4ed03*@..+*3afkXmooZomk74loWZonmi7bc,%...+#>cdeghimpnXonXhea9>#&..........&*>9deklXnWZqnnmXmnXmVVl4d9*.........@#>3a7pWWWphbac>$#@..............+%$=3aekllkb0,>#@.............@#*>9db7mZWWjgd9>*@........................++++...........................................", "..#-)/zxAHHHCCCtssr^]);-,=#&@.........+&*=-;!{FrzsABCHHHHBAz/)=..+*;(/yvDDuLEvGGCHGGvAs/]~-=%.....&#-;)^xCCCCCHvvDvvDvvvGGxK2)$......%=-;~]/stGGDLGvHCCtxz^]!-@..+%>;~{FrstCHvLDDGGHHvLELDts/'*........&#-!{/zxHHHHAszF);-#+.......%$-'{/zsxAHAyzzzyHBAssr/);$@..+>)/sGDDvvvHAAxxHvvEvvvHy/(;*...&,~]KtDvDEEEDvDDAKF';=*+.........%>-~FstCCGLEvvLDvDDvHCCAs/!$.........@$-!{KAvDDGyz^{!-=%+.............+%=-;{rxtys/);>*&............+#=-!)/zxGDLLAK:)3=&.......................................................................", ".+*;)^sAGvLLLvGCBssr]~--*&+............+&*>-!{/zxxCGGvLLLvBtr(>+..*;)^JGGvDvLGHCCAHvGxz/]~-$&+....+#=;)/sAACBCBGGDLvLDGAxsz^];#......+#,-!~FzstGvGvGCBtyzr/);*+...+$-;'{FrstCCvGLvHCBGvLGGAzF!#.........#>-;{/zxBBAyz/]~-$%+.......+%--)]^rsttyzr^rsxAxsr/])-$+..@='1zwGLDHCAAssstGvLLDDvy^);*+..#-'/swvLvuuuEuvutz]~->&+.........&=-']ztACHvLLLvLLGLGHBAxz];*+........@*-;)[sAHBAAyrF~;,#@..............@*>;~]rzz/{!-=#+............+#-;'_rsABAGAyr{;-#+.......................................................................", "..%-;|[PONNwwwwJK[}]~;$#@................@#$,;)F[IPwwNwNNwKQ]'*...@=-~1<56P6PIIQQQ<<<2(!--*&.......&#=-')]F/[[[Q565655<[1();-$@.......@%*=,-_(}Q<85IQ2F{)~!-=&.....@#$=-;)1/[I5P6I$&+.........+%*-;!){{]{)!'!({]1))~;-*&....%,!|[55KIQ[/]1:}<55655[:0-*&...@$-~2I8JOOOOOO8P<1'-=#+...........%*,;)]}^-;|2Q[[}1(!-=*+........................................................................", "..&$;_}[POSSSYO5Q}:~;>*&+.................&*=3~(}[IOwSNSY852(;*+..+%*-c_(1|||1((((|(a'9->*&.........@%*,-;;~_(((|111|1(_;--,*@.........@&#$=--ca||1_(!;;-->=&+......+&*=>-;_((|111((((|||_;-,#+..........&%$==-;!'!c->=#+............+#**,--;---->--;---,==#&+....&$>9'_|1((~~';;0_1111(_9-*#+....&=9a14[[2<<[<[}|';=*@............+%*>-;;_(111|||1111(_';->*&...........+%#-9!_((|(~;-**%+................@%#>$>>=$*&@...............@%=>;'||1(_~;-$*@.........................................................................", "..&*3abfgimipi5g4b1a9=#@..................@#=3cdbfgiipipii4ba3%....&%$,,3c00000ccc;c9,>*%&+.........+%#*>,-39ccc;cc0;cc99>**%+..........@&#$>>,39;0cc,,>$*##@.........&#$=>39cc0c0c00;c;993>*&...........+@%$$=,-3,>=$#&..............+%#$*===*=$>>*,,=>$##&+.....@%*>,99cccc3-,,399ccc39=>*&.....&$,0abfbfffffbbd;3*%+.............+%*$>,99c0000c0c0cc9,,=*&+............&%$33c00a0c=>$&@..................@@#%%%%%@.................+&**,9'ac0c9,>#%+.........................................................................", "..&=30d:47hhhkk4ebd03$%@..................@#$,0ab|47khhhh7fba3#....@%**,,-99c9c939,,,=*#&+...........@%***==,,,3>--3>-,,,*$#@............@%%$*=,,,,,,,****&+...........+&#$,,3-399933,33->=**@............+&#$$>$>==**%+...............@@&##$**%*##*#%*#%%@@......@%#*=,3,,,,,>>=>,,,9,,>$*#&....+&*39dbeeeeeeeeba9>*&+..............@%*$=,3,-3-399c99,,=*$#&............+@#*$=>--3-,>*%&+...................@@@&&&+..................+@#$=,3-93,,=*%+..........................................................................", "..#,;)]^zssyyxsz^F])!-*#+.................@#=-~{F^zssysxssrF(;*....+&#$>3,9;;;;-,---->=#+............@%%#*>>--,333-3,---=*#&+............+&#*=>,>,3---=*##&+...........+&*=>--,--;;3;,-,-=$%#+............+@#**===$$#&&+.................+@&%%%%&&&@#%##%&++......@&##*>------>==-----3-,=##@.....%>;_F^rIrrKr^^/{~3$&...............@#%*$------->-;;---$###@............+&**=>------,$%+.....................+.++.....................@#=>--->--=#%&+..........................................................................", "..@*,!)]/^zzrz^/{{~;>*&...................+&*>;~){F^zrzz^^/{'-&.....++@#*$$*#*#$$$**%%@+...............+++&***=$$==$$*#%#&@+...............+&%%%$$*$##@+................++&%%***$****$**&@@+...............+@&%%#%&@.+..........................++.+..++...........+.+&&%*%*%%##%%%#%%*%##&+......+%>;)({{]]]{{()~->#+.................++@&#**$#$=$****%%+................+&&&%*#$***%+.................................................+&**#$$**&@+............................................................................", "...+@#*=---;;;-->$$%@++......................+&#=>--;--;---=$%+............+.+.+.+.+........................+.+..+.................................+.........................++...+...++.................................................................................+.++..+..++..++............+@#*$=$=$>=**#&+.......................++.+..+..+.+........................+.++........................................................+..+.+...............................................................................", ".....+++++++.+@+.................................+..+@@+@+++....................................................................................................................................................................................................................................................................................................................................................................................................................................................................", "................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................", "................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................", "...+@&&&&&&&&&%&&&&&&&@+........................................................+...........................................................................................................................................................+&*%%%%*%%%@+.......................................................................................................................................................................................................................................................................", "..+&*%#**#*$$>*=*$=>=**&+....................................................&%#%###%&+........................@&&&&%&@+................................................@&%%%@+.....@&%%@+.................+&#####&@+....................@&#$>>---->-,=*#@+.................................................+@&&&&&&@+........................+@@@@+.......................................................................................................................+@%&%%&@+............................................", "...+&&&&&&%#*-,>=>,--==%@..................................................++@%#***%#%@......................+@#%%#%%%@@+.............................................+@#%%%#%%@@&@@&&%##&&@+..............@%**#%##&@+..................+&#*$>==,=,=,>=*$&&@..............................................+@@&%%##%%&@+.....................@@+@&%%&+.....................................................................................................................+@@%&%##&@++..........................................", "...@&&&&%#*=3;;;-;!;c;-,*@.................................................+&#**>>=>**&@...................++&#*$$$$$*#%&@...........................................+&#*$$$$$*##%###$#$*$*%@.............@%#$$=>>*#%+.................+@**>,----;----->=$*&@............................................+&&%####$$#%%%&....................@%%%#%%%&+...................................................................................................................@&%%##$$*$#%@@+...................+@&@@@@@+............", "..+&&&%#$,c0adbddaddaaa0;,#+..............................................+&%$>,3c93,>#&+................+@%**$=,,,->>*$%@+........................................+&&#$,-3,,,,=$*$>=>,,,=>$#+...........+&*=3-c33>*$@+...............@%#>=39aad~dddaaa;9,>$@................+++++++++@+...............+&%*$$>>,=,=>>**#@+................+@%$**===$$*&+...............................................................................................................++&#$*>==,====*#%@+...............@&#*$#$#**#&@+.........", "..@%%*>30_b|447744eb:b:ebd9$..............................................@%>,ca1e1bac,$%+..............+%*=3ccaaadada03=$&+.......................................@%$,9!adddaa0ccccaaadaac9=#...........&$=3~be:bac=*@..............&%$>3'be7giiiiig74eba3=#+............+&%%#####*#*%%@+............+%$=>39;aadaaac;9,*#&@.............+#*-900a00c3=**&............................................................................................................+@%*$-90caaaaa00c3=*#&.............&#**>=3=3,,==*#%@.......", ".+#=>-)FrzyxBCCHABAxxxxxsz/~%...........................................+#=-!)FzyBByrF);>*@...........+&#,;'{F^rzzzzzr/{!;-*@..........@&%%%%%@+....+%#%%%@+......@#-;)Frzszszz/F]F/rzzzzr/])>@........+&#-'{rxBAxr]~-=@...........+&=-;']/sBGGDvNvGGABAsr);>&..........+&#=,,-,,,,-----$$%@........+%$>-!)]/^rrzzrr^/]{!;-=%+..........&*-;)]//rr//])!-=%+.........................................................................................................@#>-;')F/rrzzzrr/F{~;->%+.........@%>-;!)){)){))!;-=$&......", "..%==;)rzyAGGvLGLGvGvGGCtyz{>...........................................@#-;)FrsACCtzF)!->#&+.........@*>-')FrzsxAtxxsrF)'-=#.........&#=$>>>=*#%&%##$=>>==#&.....%>-;{rsBAtAxszr^/zsxytAyz/{;#.........%=;'FsABCBzF~;>#............#,-!)/sAHGGDDvDDvHCBAr]!-#.........@&*>-;;;;;--;;'!!;-=#+......+&*>;')]/rssxxyxszr^F]);-$@.........&*,;)]/rzzszrr/{!-$&+.......................................................................................................@*=-!'{FrzssyyyxzzrF])!;,%........+#>-!){F//^^/^F{~;->*&.....", "..%$=-~][IJwwwwNNwNwNwwwK[F~>@.........................................+&#=-;_2IJJJKQ|~;-=*&@.........@%*-;~2QIPIPJKPI[|!;-*%........&%#**=*$$**#**$***=$=$*#+....&*,-~}IJJJJPK[}]2[IPPPJKI}_-%.........%*,;)[KJJK})->*&...........+#=;!~:[PJJJJJJJJJJKKrF~-=%.......++&%*=,-;!;;->-;~~'-,*%+.....+&&$,;;~1}QIKPKPKPIQ}:)';,$@.........@#*-'(F2F/[/QQ[(!>*&+.......................................................................................................@*=-;~):[IPIKPPKI<[1(~;-=%.........%=,;)12Q<<3~(}5OwY6[1_;-,*#%@.......@#$>-!176OYwOYYOO5}(!-=#+......@@#>,-,--->=>*>=>>,---,=%@....@*,;(78OYRRM6<}:}<8YSMRR8[(;*.........@$>3([OOO84~-=#@...........+*,;~(:<6O85<<<<-;~()!--;_{:(!,$%+.....@&#*,;(12<8OYOMwYYO8<}1(~3=%........+&*>-'|}[[}2Q565}'-$#@......................................................................................................@&$>;__1[58OYOYOMOO6[:(_;-#+........&$-~:[<8OOOYO5}('->*@+....", "..&*,;abgpqWUUWUWUUTUTUWoifbc*.......................................+&#$=-cdbgmqUWoifba;3>*&+.......@#=,;afiqWWWUWWWqjgba9=*+.....+%**3900cc;c3939399;c0cc3*@....&*3cbgqTTTTTqigffiqTTTTUqgb3#........+&*,;bgqWqjgd9=%@..........+%=-;dbgpqojlhhhhhkhll7ec9*%........@&*=-;adbba!c;deee0-*%@.....@#$=;abf7iqWWWWUWWWqp74bdc>%.......+@%*-cde47777ipqjga9=#@...........................................+++....+++++..............................................+&#*30defkjqWWUWWWWqji7ebc-%........+#*9afimqWWWWWqgba;>*&.....", ".+&-,0d4moWUTTTUUUUTTUTUqnhfd,@...............+@&%&@+................@#=,c~be7ijUUUomh4|d0c>$&.......@*>3abfpZWUUWUUUWjhed;3*&.....@#*-;d(bb:bbd(ddd(dbb1ddc3#....&$9cepqUTTTTUjhgijWTTTTTqib9%........+#=3abiqUUoib03>&..........%#>cdbehpWWnmlllllVVVVkea-=&........@%$,c0dbee(0cab4ked3$#@....+&*3ca:7klnZWUUUWUUWWnVkked9*.......+%$,9_ekllQllVoZqib9,*%................+@+++++&&@@@@@@+........+@&%%&#%###**###%&&&+........................................@*=9cd4khmnWWUUUUUUWZXhk410,@.......&#,c|7lnZWUWUWqmed03=&.....", ".+%-!{^sGDEEEEEEEEEEEEEEEvts^'&.............&&**>-=$$#&@...........+&*-!{FrzyBHDEEEEHAAsz/]'-%......@#-'{FzyGLELLLLEELGsrF);-%.....&>-~]rsssxysxsxsysyyxssrF~;&...%-'1IwDEEEEEuvAttvuEEEEEEAI)=........&$-)FKAEEEDyr]~-$+........@=-!{^zxAvEEDCBCCCCBCCCAz]~;*........&*-;)]/rzr/{)]^sxzF~-=%....&>-~]rsBHHGvLLLEELLLLDHHAtrF-&.....&*=-~{^stACACBHGLvyI{'-=@............&#*$>=$*$=>,,,>==**&.....+@#=,---;;;;;;;;;;;--,>*%&+....................................%,;)FsyCCGLLEELELELLvGHAAs/($.......#-;)^yAGLLLLLLGtz}{!-=@....", "..%,;{/sHLEEEEEEEEEEEEEEELBsF;&............@#>=---;--=*%@..........@#-;)FrsACGLLEEELELGtsrF);*+.....@>;)FrKxCLLGCCCAHAys/{';$&....+#-')/stBBHHGGGGGGGHCCBAs/);*...%>;)^sAGGvvLvHByAHLEEvvGts/)*.......+&=-']KtGLuLxr]!-$&........@$;~FrsyCvLLLCCCABABAAAxzF~-*+.......@%-;))]F^/])))Frr/]!-=&....#,!{/stGGGLCvGLLLLLGHGvGGts/~#.....&*-;){/sACCCCCBvLDAr]~-=%..........+%*=--;-;-;--;;;;---=#&...+%==-;;'!!))))))))~~~!'--=*@...................................+%-!{/sGvGLLLLEELLLGGGGLGHtz{,+.....+#>-)/zyBBCBHCHAsr]);,*&....", "..+#>;_48wNNNuNuNuNuTuNSNw52)=+............@&$>=,---,$$%@+.........@%$-!{/[IJwwNwwNwNwwI[|);,%.....+@*>;)12QPwwPQ[2}}}|(!;=*%+....+&$-!{/rKKwwwwNwwwwwJJzI^]!-&...+#=-~|}QIPOwOPQ[QPOwOKIQ}|!-@........@#>-':-;)]/IKzKKKJJwO<1~-=#@.........+&%**,,----;----;--,,>*@...@%$=,-;!!!~~)_)~~)~!;;;--*$@.................+.++..............+%=-~:IJwwwNuwNuNwwJJJwwwOK})=.......+%*-'(]}22[}}22(~;,>$&+....", "...&>c_}5RwNNNNNNTuNTNNNSO<:~=+............@#*=---;;-,*%&+........+&%=-!(}[*@.........+%-9_e[,,=**=---,=*%@+....@=-!(}%@.........@%$>--;'!!!!!'!_~~;;--*@...+*=-;_(1b:1::b:1:111{|1_c-*&..............++@@%&&%&&@@@+........%=;_|<6OwwwwNwOwwOJJJOOw8<:~>+.......+#=-;___((___~;-=$#@+.....", "...@=9afpqWUUTTUTTTTTTTTUjibc$.............&$>3caa_ac9>#&@........+%$=;de4hhlmmiigiimmiged0;=@.....@%$,;dbf7imi7fbaa0;93,=#&+.....@#*3ab7hllVnmmmmmmnmmllk7ec3&....@%$3;dbfgpqqmh4gmjqpgfbdc,*.........@%$,9bgqWWjgd;=$&.........+#-0fipjojppjjojpih7e:bba3=%@...........@%**$$$$***>>>$#&@.....+&=9abgkmmXoqqppppmlmllmmmkge0*.....@%>c0bb4hhk77khpqjib09>$&........+%*=3cdbbeeebbdbeefbba0-%...&*-cbgiijijijpijpijpiiigbc,#........+@@&%&%###**#**#%%#%+.......#,0bfhimmnqWqopmmmooommmikfb>.........&*=-,cc;cc993,>**&++.....", "...&=9d4oZUUTUTUTTTTTTTUWZif0#............&%=-ab1eee1a3$#@........@*=9abklVlVVlh744khVl74:d0,#.....+*=3a|4kklVlh4:ba!99,>$#@......@*>9aekVlVXVXVllVVVXlXVVhed3#....+%*>ca|ehnZZpllVXZZnhebac,#+........@#*-0biqUWqgb03=%.........&,0bgpZWZoXXoWWWZnllhk4|dc,$@............+@%%#%%%%##**#&+.......%,017lVmXXoWWZnVVVVlXXVVVlh4d=....+%>-~be4klVVlhhVoZqi7dc3*&.......&#*3;a:4khkhkk4ekklll7eb0*..+%,0biqqWWWWWWWWWWWWWUWWjgbc$@......@%**===,,,,333,,,,>==*%+....+#;_eklVVVnZWWoXVmnoWonmVVlhe9&........+%*=,=,,,>-,,***&+.......", "...#-_/JGEEEEuEEEuEuEEEEELw/!#...........@#,;)Fzzsssr/'-*#+......+%=;)FztBCHCBBtsssxACBxsr/);*.....&>;)/zxACCCCBxsr/{);;-,*&......%>;)/sACCCCCCCCCCBCCCBCBBs^)=....+%*-!{/zxvDDGHCHvDEvxz^]~;$@........&=3c(kAEEEGxQ);-=&.......+*!FztDLELDHGvEEEELHCAtyz/{~-%..............+@@@&%&&%&%&@........*!]zxCBCCHDvEGHHCCCCCCCCCCCxr;....@$-~FrsxCBCCACBHGDDAs^{~-$@....+%>;;)]rxACCBCBAyyABCCCAxr{-..+$!{IxEEEEEEuEEEEEEEELEEDyKF!#....+&*,-;!))))(){]]{)))~';->*+...&,)/sABCCCGLELGHBCHDEEGHCCBAs{#.........&#*$>,----==**&@........", "..+%-_/sHLLDEELEEuuEuEEEEvy^;%...........+#,;)/zssxszF);>*@.......&=;)FzACCCACByszzytBtsz^]);*+...@#-;)/sACCCCCAAssr/{~;-=*@.....+%-;)/sACCBCCBCBABCCCCCCCAs^)$+...+&>-;)/zsHLvvCHCvGvHyz/]~-*+.......+&$-;{rJvLuvy/{;-$@........$'FKAGLLLvCHvLEELGCBCBAxr]);*+...................++.++.........+='/zACCCCCGLLvBCACCCCCCCBCAA^-+...@*-)FrstABCCCACCGLLts/]~;=@....%=-;~]/zyCCCCCCAAABCACAAyr{=+.+$;{kyHGvLDvLDDDLDLvLLLLDAzF)$....@#-;'~{]F//^^^/^/^//F])~;-#...&!{ryBCCCCHGLLGCCCGvvvCBCCCAs{$...........+@@%***%##%&@.........", "...&=;_[6wNNNuSNuuSuSuNNNw<1;&............&*-;~]FFFF|)-,*&........+#=-):rKKKKI^/2F:F}//]_~;=*%....@#>-':QKJJJwJJKII[1);,$%@.......@*--~FIKzKKIrI^rQrIKKKKKr});%.....+%*,;!1[!1QOwNwwJPJJOOJJPKJKPI[_;,%...................................*;)F/KKzKJwwwOKQ/QrIKIIrIKr^|>+....&*-!(]/QzKzrKIKJOJ<2{';=&.....%=-;!):[IKJKIrIrrrKzKzK/F_;*...%=;_}<5P6P6J6666JOJwwNwO<})-#....&%=;')|}}-~1}[[2(!-=%@.........@>9_48SwYOPII<%+...+&*-;(1}Q5OP<[[[QQIIIII[}('-%...@#>3_12}[[[[[[[[[Q<6YwS6<1!,%...+&$>!(|2<66OOOOOY8Y6YY6<(3=%...+#;(}QQQQQ5OSYOPIIIIPIIQQQQ[}-+.................................", "...&=9afpqWUUUTTTTTTTTUUWqgb0*............&*=3cadbbbda-=#&+.......+%=3ab7klhk4fe1bbdbbdac9>$#&....@#$9agpqWUUTUWWqqpgba-$#@.......@$>-a:7hlhh74feeee7khhlhhe09%......+%*,3abfhpqTTTqmh4bdc3=%@..........&%>90bffffdc,>#@.........@*30fiqWqjmkhkhhhhlpqWWqiea3#...................................%>0b7hllmmooqpif4e4khkkhkhk4b>....+&*,;a(efhlllmlVlmh7eba;=%+...+#,;de7gpjqoi44775ilhlh7ba;=%...@%$3cadbbbbbebfff7gpqWWjgba3#...+#$-abf7ijqqqqqqWqWqqqjif0,%....*9de4hkhkijWWqpmmlllkhhhkhkf9+.................................", "..+%,0d7jWUUUUTTTTTTTTUUWqmfc*............@*30de47744(0,$%+.......+*=9_}kVVVll<7444444e:dc9,*&....@*,3afpoqqUUUWZZom4eac,*%+......@*,ca4llVlVVhkk7kkllVVVlh4d3%.......&=3cdeklnqTTTqXVk4bac>$&..........@$>9dekhk7eac=*&.........@*,cbgpnnnXmnmpmmmXnWUUqp7b9*+..................................%301klmnnnZZWZpmilimmVVllll7b=+...@%$3adb4hXnXnXonXnXh4:ba9$@...%=3dfimmoooomlllmXnnVllk:d9,&...@#*,30aadddddbbbe4hmZWWqmfd3%...@%>9aeehlXoZoZZoZoZoZojibc>%...+*0bQkhhlVXqUUonnXXVVVVllllkec&.................................", "..&>;(^JvEEEEEEEuEEuEEEELDyI)*...........@#-~FzyBCCAxz]~->#+......&=;~FzACBCCCCBAytABAAsrF{!-*....&$;_2zyHHGDEEEGBCAsrF);-=%+....+%>;)/sACCCCCCABBCABCCCCCAs^)$......@$;)]^stBGLEEEEvCAsrF)!-%.........+#-;)^stCAAzF);,*@........&=9~:^zxAHCHvDDGGGHDEEEDts^{,+.................................+*;{/sAGDvDEEEELvLEGvvvHCCCAsF-+...&*,!{^zxBDLEDvLEDDvAsz^]!>@..+*;{^xGvDvvGCCCCBHDDDCAysrF~;*...@#$,3!~_))_{]]]F^zsGDEEvAK^)=...&$-!]/zsxAACCCBCBBCHBByK2~9$...+=)/sACCBHGDEEDHHCBCCHCCCBBtz~%.................................", "..&-!{/svLEEEuuuuuEuEEELELy^'*...........&>;)/sACCCCBs/);,#@......@=-'FzyACCCCACBBBBACAyz/{'-#+...+=-~]rstCCGLLvCCBxzrF{!--*&.....#-')/zACCBCBCCCCACCCCBCCAs/)=+.....&=;)FrsACvLEEELCCtsrF);-%.........&$-')/sBCCtz/);-*+........@*-;~]^zsxtABHGGGGLLGGGGAzF)=+..................................*;{^sAGLDEELLEEuLEuLLvBCCAAs/-+...&*,;)/ztAvLLLELLELvHxzr]!>@...*-{QyDLLLGCBCCBCHLLGCAxzr])-*+...@#=>--;;;;!'))]F/sALLLDAz/)>+..+#>!{/rzssyyxAAAAAtxysz^]'-%+..+=~/zyBCCBHLLvGCBCCCHCBCCCByr'&.................................", "..@*,;([6NNSuuuuNuNuSNuwNO<|-&..........+%*-;1[KJJJJPQ|!->&+.......&$,!{^rKzKzKzQ/rrIKr/]_!-=&.....&=-'(F[IKJwwJIIQ[]|';-==*#+....+*,;)2rKKKKzKzrKrKzKsKKKr})-%......@*=;!(F[KPwNNNwPK^/('-,*&.........@&*-;_/IKzI}~->*&.........+%=,-;~(]F22[QQIPwwwwJKI[(!-#...................................%$;)}QJwNwNwNNNNNNNNNwJKzK/F!*....+&*=-~(25wwNNNNwNwOK}:)!-%....&=;($$=>>-'_}$%@....+&=-!1}QKIPPI-9'(11:::1[[>;_1[6OwwwwwMO6[1_!;=%....&=9~[8ORY8PIQQQ<6YY8<[}1~;-*&......+.++@&&&%%#$==9_26OO52(;-%.....@*>--;'______(_((_~!!;-=#+....#=;_|[QKPOwSwP9agpqTTTTTTTTUTTTTUWjgb;%..........+&*-aepqWUTTqiec9=@........@#$,9d:f4hhmpjjjjmk7eda9>*&.....%*,;dbf7ioqqpgeebbba~0;3,*&+....&*,cb7khlmpojjjoojopmhk7b0,&......@$=-cdbf7ijUTUji7ebdc-=*@.........+&$-cdgmjjiea9=#@..........@*=;abbfeeeeef7gjqqpik4b03*@...................................+%=9abgmjnpnoXpnnooqomlhh7:a3%.....@&$=3cdfgiiiVimiihfda9,*&....&*-0fgmppjjpih7hippm5k74bc9=&............+@@&&%$=,0bfgggba9=&....+@%*=>--;99cc9;cc;cc9-,$#@.....&*-0de7hmXoWqplhhippnmmlkfb0*..................................", "..&*,abgjUTTTTTUUUUTTTTUUqmfa$..........@*,0a7jZUTTTUjfa9>#+.......@&*>9ad:ekVXqUUUqoml4bc9,*&....+%=3db[klmoWZph44eee:b|bd03=+....&*9aeklVXoZZWZWWWUWZXVlkea,&......@*>cabekhpqUTTqmh[ebac>$@.........@#=3abioZWoib03=%..........&=caekkkk444e47loWZnhkf(c,>&...................................+%=90b7lXXXVXXXXmXnnXXXVV7e03&.....+%*,90abe44hhhhh7fbac9,*&....@=,9d44lXoZoXlhlVVXXVVVhedc=&...............+@%%$,9abfebd;,*+.....+&%#$*==>,-,-,,,3,,==$*@......&*=3dekVVnZZZnmlVXZZnXXVh4d9*..................................", ".+*-'FztvEEuEEELEuEEEEEELvtK]-+.........&,;{QsDEEEEuuuz});>@.......@%=-;)]/zyBHDEEEEDCxz/)!->%....@>;)FztCHHvEEvAAxyysxysyz^{;%...@*,']zxBBCGLLELLEELDGHCAyr{;%.....+#-;)FrsxBGDuuEEGAtsrF{;-%.........@*-']rtLEvvyr]~-=@........+$;{rsBCCCAxxsxxHvDDGByz/);,#...................................@#-;)FztBCCCCHCBHCGHCBCBBx^{-%.....+#*-;~)F^zzsssszr^:(';-*&....@$9~FrsAHGDvGBBBCCCBCCCBsr{!$................+&#=-'(F//F(!-*+......@#*>=,-----,-,>---,$#&+......#,;~FzxBCCDDvDHHBGvDvGCCAz/~>..................................", "..*-']IyBLLELLLLELELLELLvHyzF-+.........#,!{[sHLEEEEEtzF~;,#........+@*,;)]^zyBGuEELHtsr]~;-$+....#-!]^sBvLLEEELvHGHGGHGvHAs/'$...@*,;{/sxtABCCCBCAAHHABtys^),%.....&#-!)/rxBGLEEEELLGBsz/]'-*.........&=-~]IyGLLvtr]~-=&........&>;]ryBAACBByxyAAvLvBtsrF);=&...................................+#=;']^sABCCCCCLvvCBCCByxzF),+.....+@*=-;!){F/F////F{)';-$%@....@$-'(/rsxBHCCCBCCACCCCCCyzF)=+.................@#>;')())!;=%.......++&&%####%*#%%#%**%%+........&$-!)/zxyBCCGGGvvvvGCBAysr{;#..................................", "..&=-~1}IPwwNNNNNNNNuwwwP<}(;$..........@*=;_[6wNNSNN8}_;=*@.........+@#=,-!)1QPwNwO<2{);,*%@.....@=-!|-;~1}[IKKKKzI^QrKKKK/}_;*...................+&*=,-==#%@................+...+....+...........+@*=-'){F[QKPJwwwwsKI[F{)!-*+..................................", ".+%*,;(1}Q#@...........+&#=,;_1-''___~~';;;;;;'__';;=&......@%*,;_|[8MNNNNNNwY52(~;-*@..........@*-'b*****$*#%@+.........@%*=-;(:}[[QQQ[21[QIIQ[:(;*....................+@&%%%&&+.......................................+@*=>-!~|1[IJwNwOPQ}:_!;-=%+..................................", "..&*>;_b:f7g5iiiiii30be47k774eef4hhkeba3#......................+@++............................................@#>,30defimqqqpi7e(a0->*&...................................", "..@#=3abb}ef7474477777feba09=@..........@#>9afpqWUqUqifc3>%@.............@#$,cdgpqjifc3>*&........@*>cdfpqqWWWWqZoZoZZZZZopgb3%......@*>>-9-3-,,,>>>=-9;93-$*@......@#$>90bfmoqqUUWWqoi7dac>$@.........+%*,cbiqUWqgbc3*@..........&=cdeklVnZWWqZZZooifd;9>*@........................................+@#$>99abegmpopi4ed~33=#@..............++@&@&&@+................+&#=,9ade444eeb|e4774edc3%......................................................................+%*>330de4imjnmh4bda3,*#@...................................", ".+&=-;)/^rrzrQ^QrKrrKrr^])!;-@..........%=-!:rtGvvvDGyQ{!-=&.............@*,9!{rxtyP^|;3=&........&>3~:rxtGGHHGHGHHHHGHHHAtKF'*......+%$------->======-;--=##@......@#,-')FQstGGGvGGAAsK/{~-=@........+@=3c{IxDEEGx[);,%.........+*-~FrsyBHGGvHHHBAxK/{';>#@.........................................+%*,;!)]/rzsKzK/]_~;--#+...............+@@@++...................@%>;!){]/^///FF/^/^/F{~;#.......................................................................&*--;')F/zsszKr/{)~;-*#@...................................", "..&$-;)_]]///FF///^^//F]);;-#+..........@*-;)^stCBCCtsr);-$&..............%$-;'F^zz/{';-%+........&*-!)/rssxsxxxyxxAttxxssr/(;#.......+@&*$$$*$####%&%%*#*%@........+#=-;~_FrssxsxsxssrF])!-#@.........@#,')QyGGLvs/);,#+.........#-!]/zsxtBBBAAyssrF{!;,#&...........................................+@#=;;!){]FFF]{~';->%+..........................................+%=-;;)){{)))))){)))!;$@........................................................................@#>--!~{]1FF]{)!;->%@.....................................", "..+&$=--,;-;;;;;;;-!!;;,-=*%+............&*=-~][^QrQ^F_;,*@...............+@#>,;~~~!-,*&+..........+%=-;'(({{{{]]]]]]]1{()~'-*+............++.@+...+.+.+.............+%**,-;!(({1{1{({~;-,=*@...........&*,;([58P52_-=*@..........@#=-!)1]F////}/1(~;-=*&...............................................+@##=>-------=$$%@..............................................@%$*=>>-->>->,--=>=*&..........................................................................@%$*==>--,3--->$#&+......................................", "...@%#%%%%#%#%%#**$***%%%&@+.............+%$=;_|:}12|~;>*&+.................+&*>>-->>#&+............+&#>,-;--3;;;;3;-;;;--->*&+........................................@%**=--;-3--;---=**%&+...........@#$,c(}[2:_;,*&............@#>-;!__(|(((_~';,=*@+..................................................&&##**=***#%@+................................................+@%%%#&&##%###%$#%&+............................................................................+@&#%#*$***%&&@+.......................................", "......++++++..+++...+++..+................&*$,caa_da09,$&@...................@&*#**%%&&..............@%#*$=,,,,=,,,-,>=>=**%&...........................................@%##*$=,,,>===$$%@++.............&*>9adbbdc9>%@...........+@%#>,339;000cc3-=$%&......................................................++&@&@@&++........................................................+.+@&&@%@@@@+.................................................................................++@&&&&@@+.........................................", "..........................................+&#=,,99399,=*&.....................@&%%%&@@...............+&%#***$=*>=*******#*&@+............................................+@&#****$***#*&@+...............@%=,00bdac=*%@............+@%*$>,,3>,,,,>**&@..........................................................+..................................................................++@+.........................................................................................+@+.............................................", "..........................................++&%=>>-,=>>*%+......................+@@@+..................@@&##%#%%#%%%***#%#%&.................................................@%#%%####%%@.................+&#=-;~~';=*%+.............++%**$$>==>=**##%@..........................................................................................................................................................................................................................................................................", "............................................+++++@@@+++..........................+......................+..+.++.++++++.+.......................................................++.+..+...................+++@&%##&&@+...................@@++@@+@++..............................................................................................................................................................................................................................................................................", "................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................", "................................................................................................................................................................................................................+...++...............................................................................................................................................................................+@&&&&@+.......................+@&&@+..........................+@%%%%%%&@+.................................................", "............+@&&&&&@@+......................................................@&%&%%%%&@+...................+&&%&&&&@++....................................................................................+@&&%#####%*####%&@..................................................................................+@@@@+..............................................................................+%##==,,>$$%@+.................+%%$=,3>$*%@+....................&%$>3-3333=$##&@..............................................", "..........+@#=>333,>*#@...................................................@#*=,3--33=*%@................+@*=>-3333==#@+.................................................................................+%*=,3,39;9c;9c9;33$%+.............................................................................+&%***$*#@+............................................................................#=,ccddddac3=#@................%>9cadddac3=#@+.................+*3caddb{b(a0c,=*&+............................................", "........+%=,;~{]]]{';->#@...............................................@#=-;){]{F]]);->%+............+&=-;~{]FFF])!-$*@+.......................+&&&@+................................................+%$,;')]F/^^^^r^^//F{~-#...........................................................................@%$>-;'~!!;,*&+....................@%##**%%@+...........................................%>']/rsxysr/]'-$%+.............&,)Frzxxxz^F);$#@.......+@+.....+$~]/zxyxAxysrF]~;,##@@@@@+.....................................", "........%=-;']F/r/F]~;-=#@.......................@@@+..................@#>-!)]Frr^//]);-=#@...........&=>;!{]//^//])!-=*%@..................+&%%##==*#@.............................................@#$>-;;)F^rrzzszzszzr//{;=+.........................................................................@&*,-!){{])!;-=@.................@%#*$=>,>,==##@........................................+%-)FrstBAAxrF);,*&+............&-]rzxBBBxzF]~-=*@..+@&%##$#&...@,{/zyBBCCBBxsr/]~-,*$#%%*#*&..................+@@&@+...........", "......+&*=,-!)(]]{_);-,=*@...................+@&@&&&@+.................&*=,-!){]]F]_);-=$%@..........+&$=-;~{|F1]|)~;-$*@@..................+&%#$$$>*#&+...........................................++%$==-;!)]F]FF/FF/}FF]_'-%.........................................................................+&#*>-;!)))~;=*$@................+&#$$=>=,,-=>**%&.......................................+%=;)F/rrKr/F_'-=#@++....@@+....@$;{F/rKr^/|!;=*%&@+@%%%#***%+..+$;)]/rzzzzK^F]_~;,*#%%%#$$*%.................@@%&%&&@+.........", "......@&#=-;!_(|||1(_;->*&+..................@%#*$$*#&+...............+%#>-!_(||::11('-,**&+.........@%*>;~((|::||((!-,$#@+................+&%***===>*#%+..........................................@%*=,;!~((:}}4}44[}4}}:1!-#+........................................................................@#*$,-!_|||('->%&................@%*=,--;;;;--,$*&&.......................................%=;_|2QI<<}|_;=$%&@.@+@&@%&@...+$!(}[QI<[:(!->$%%&%##$==>>=#@...*!(:[QQIIIQ[}|(~;,>*$$$*===#+...............+&##$#$#%&+........", "......&*$-0dbeeefeeebd;,>*@.................+%*>333,>$&@..............+%*=cdbefeef4eeba;,=%@.........&*=9abeee4444ebbc9>*&+...............@&*>339cccc>*%@.........................................+%$>90abefgipjjjjijijipigb;#........................................................................+&#=-cabfgiigbc-*#+..............+&#$3;adbdbdaa;3>$#@......................................%=3ab7ipmphfd0,*#&@@&&&##$$*+...*cbfimpmi7ba;=$##%#*=,9cc09=@..+$0be47hhkhh77eedc->**=339cc-&..............+&**====$$%@........", "....+&#>-0|7klhklkklk4d03=*@...............+#*3caadac,$#@.............@#$90ekkkkhklVk4edc3>%+.......+%*-c|khlkhkllhk2bac>*&..............+&=>;ad(bbedc3$&+........................................&*=3_e7hlmoqqqTTTUUUWWqqpgd,@.......................................................................&#>30degmqUqjgb9,*&+............@#*=3!be7kkkk4ebac,*%@.....................................#,0beinZZomke0;,$##%#*>>333,*..+>_bkmoZZXh4b0-==*=>3;adb4ebc#..+>dek-~{/stHDuEuw^{'-#@..........+&=-;~{^stBCBCCAAsr]);,$@...................................+*;{/stDEEDHtz/);-,---;!){FF]-@.+-FzxHLELvAs^{';;;!~{FrzsAyz],..@;FsxACCCACCCCCByrF{))F/rsxsr;@............+*-~]zssrF)-=%.......", "...@*-!)F/sACBBAABBCCAz/]);-#@...........&=,;!]zxHAxr{;->*%+..........&=;~FztABABABCAAs^])-=&.......&$-']ryBBACBCHGByz/])-=&............&*-!)/zyAAtsz]~-=&..........+&%%%##%&@@...+@%%##&+.......@$;']rAGGvLvDvEEEEEEvvGGvtsF;%.......................................................................&=-;)FzyCDEEDtr]~-=&..........@*>-~{FzxBBABBABBts/{~;=#+...................................#;)FzyBHHGHyz/);;--;')]F/rr/;@.@-]/stGGGHAsr]~;;')]/zsyAyyz{>+.@-FrytAACCCCBBBAsz/F]/rzsAAxr;@............&=;)/sAAx/);=*@......", "...@%>;!(][rKrr//^rKzQ/()~->&+..........+&*=-;(Q6wwP[~;,*#&@..........@#>-~{/^^/^rIzK^F)!->*@........&*,;)F^^rIKJwwKQ]_;-*%@............&#=-~]/rrr^F(!-$%+..........@&%#%#*%%%%&@@&&%&%#%&@......&*,;)}6wNNw6IPwSNSwOPKIIQ4:~=+.......................................................................+%*=-'(}%@..........@#=-;){/rKr/^^rrKr/]);-=&............+++.....+..............+&=-'([IKPKI[F~;>>=>,-~(]F[^F-@.+$;_:QKPKKQF_~;--;~)F//^//F{;$..@=;)]F^QKJwwJK^/F](_({F//r^/(=+............@#>;_F^^/(;,#%+......", "...@%*-'(12QQQ221}[Q[[}1(~-*&+.........+@#$>-c(7OSM64(;->*#%&.........@#*,;_11222}[QQ[(~--*&........+@*,;_|2[2QQIOO84_!-=$#@...........+@*$-!|[IQ[1(~->*&+.........@&##*$=$$*####*###$$>$$%%+....+&>3_b5MNNM5<5YSNSO6I-!~|}QQ[2222QQQ}|~!-=%+.......++@@@@@&@@@&@&@@+...........@*-;_|[IQI[}(_;->>=,;_|:}}[1-@.+*,'1}QII[[}(!;--;_(:[QQQ}1_-%...#-;(|}[QPOO8<2::(((|:}2[[[2~>.............&*,-_|221~-=*&+......", "...@#>9adefkhh7e1f7hh74bda3$@.........@%*=,90dfiqWWjgba;9>*##+........+%*,9_be:e447hkfba9,*&........+&*-9abe477hpoqpgbac=$%@............@*=30b4h<7edc3$%&..........&**>-33->==**$*>>,-33,,=#&....+%,cafiqTTqigijUTWqolh77bbc3%.................+++++...................................................+&*,9abijUUjgb0-$%@..........&*,;ab:7kh7fee44hh4bba;=*+......+&&%#$#%*&%%%##%&%@+.........&*,cde4hhk74bd03>>>3adee477f9@.+$,0b4khhh4ebd00cadbf#%+......", "...+*>9abeklVVh74kkVll7eba9=&.......+%*=-9cdbbgpWUWqm7ed~c93*%........@#$-0be47kkkllkk1a;3*&+.......+#*-cd:4kkllXoonhedc9=%&............&*>3_e4khk:ac,*#@.........&*,c!ad(da093,=,3cddbddac3$&...+#-cbfjUTTTjmmqUTTWZnVhk41a-#+...............@&##%&@+..................................................&>,cafiqWUWieac,*@..........@*9'be4kllIk[kklVlk4:ba9*&....+%*>,3333,=,,-3,-,,=*%@........&>9ab4lVVVlk7ed'c;0d|47kh@......+&=-'{/zxBBBCCCAsrF~;-*@.......@$-;)/zsABCBHHvHtszF);=*+...........#>;~]^ssyz/{~;=#+........+=;{/zsxAxzr/])~)]zxAtxszr]!$+..+$!1QJwuuTEGHHvEEEEGHCAtyrF~,@.............@#>>---->$*%@..............................................+%-;{FzADEEEtKF);,*+........@$-~]rzyACCAtyxBACCByz^]~-#...&#-;){FF]]{){{]]]]{)';-=%@.....+*;)FzsCCCCAAyzz^//rzxtCCCAxz'&.+-~^zACCCCCyyzrrzstACCCCAsz/(>..@;FrsttBCHvGGHCACBAABCACBys^(=............%,;~]rzyyyrF)-=%......", "...@$-;)]rsABCBBBBBCAAz/]);>#+....&*>-')/rzsxABvEEELHBAxyzr{);#.......#=-!]^stACCBBtxz/{~;,=%.......&$-;)/zxBACCBCBCBsr/);>*@...........&=-;{F^rr/]~;-*@.........&>'FryABBBAxr/F){/JGLHCBts/)-%..+$!]^svEEEuvBGLEEEvGCBBAxzF'>@............@#>-;;'~;;->=#+..............................................%-;)FKAvLEuAzF);,#+........@#-~]^syBBCByxtABBCBxsrF~,%...&=-!{/rrr/FFF/F//r/F{';->#&....+*;)FrxBCBCBAxszrrrsyABACAys/;@.@-]^stCCBCAAxszzstBCACAAAsrF)=+.@;/sAACBACCCCCCCACBBCBCAAxrF~$+..........+#-;)FryBBtzF);,#+.....", "....@**,-'{/IrrQ^^rI^/1~;-=#+.....@%*=-~1/QQQIKONSNwJPIrQ[2(!>%.......&$=-!(/IrKKzr^/F(;-=*%@.......@%>-;|2[rIrKKKKI^F]);,$%+............%$=-;~)~;-,*#+..........@*-)F^IzsKK^F|)!!([PJJKKr/{!>&..+#=;_25MNNwJJJwNNwwJKzQ/F{~-#............+&*=,;!!!;;->#&+.............................................+@==;!:$&+.......@**-a:<5>#&+............#-9(2<8OJ8[:(_~~_1<5IKQQ[|;,%...@=-c(}56O68OYNNNSOPIQ[2|(;-%+...........+&*,;!(1:1~;=*$&..............................................@$,-a|;(1[Q5IIIQ[[[}:[[[QQQQ[}(;>..+$;|}[-!(1QI=3~a|:e2f1d_0->>#&.......+%$,0eiqqWWWWUTTTTTWqWWqjibc$.......@*=9_ek9afh5lnoqWUTTUqmhk7ebb9-%...........@%#>9ad:777ea;=#%+............................................+@*,;dfiqTUqpgdc-*%+........@&$>30_b4hhh<77khhh4bdc-=&+...+%=;d7hhhhk74ff7ijji7bda9=$&....%>0bfhhllh5lkh777hh..+>dekhllmmlklkhlklllhlhlhk4b0$..+*cd:7khhlhlkkhkhh9dioonlhkllVk[edc9>%@................+@&&&@@+.............+#3ab7mZWWqmhfbdbbekhVVVll4d3#..+&*-9dehlVnZWUTTTUWnVlk441a3#+..........@#>9~beklVlkea3$%@............................................+&>3abgiqTTWp7ea9>#&........@%#=9!beklVVllllVVlkeda9=*+...&=,0|kllVVVVhkkhXqZjl741ac>#+...%-aekVVVVXlVVVVVlVVVVVlllked,+.+,bklVVXlXXXVVXVXXVVXV6Vlll7b>+..=0b4kVVXVVVVllllVVXVlllk4bc3%.........&#>-ab4kmoZZohbc>*%+.....", "......+&$-;_{F^zzr^]{~;>=%@.......&$-~FKGLEEuEEEEEuEEEEEEvvAk(>......+*-!]rxBCACBCCCByz^{'->&+......&=-!2JDvGBBCCCCAsz/);-*%................+@@@&@+..............%,!]rsHvELvHxsz^rrsACCCCCAs^'$...%,;)/ztACHvEEEEEEEDHCBxsr]~,@..........&=-)FrsABCCtzF~->&............................................%$-~FrxGDEEEGxzF);,*@.......@#=-~]^stBCCCCCBCBBxs^{~-=@...%-!]ryCCCCCCCACHvDEGHAAsr])-%..+$;FzxBCCCCCCBCCBCBCCCCCCByzF;@.@;/xBCBCCBCCCCGHHHHBCBCCBCBy^;@.@,(^zxCBCCCCCBBCBCHHHBCCAsrF'*.......&%>-')/zACHLLEDxQ{;-#@.....", "........@#,;;){F/F])';-$%&........@$-!{IxtBHGGLuEuEEEvGHGGGs^)=+......#-;)rsABBABBABAsrF)!-#&.......&=-!FztBABBABBAyz/{);=%......................................@$!{/stHvGGAyzrr^rsAACBCCBs/)$+..+$-!]rsytCHGDuEEELvCCAAsr]!>@..........&$-)FzyBCHHBzF~;=#+................+@&&@+....................+%>;']rsyGDGGAszF~;-*&.......+#=;~{/zyBCACACBCCByz/]~-$&...%-!)^yACBCGHCCBCHGvvvHHBs/{!*+.+>;]/syABACBCBCCCCCCBCCCGCAz/;@.@-FzxBBBCBCCCBCBHCHCCCCCCCCAz!@.+-)FrstBACBCCCvCGHBBGGHCCyrF!*.......%,;;)]/sACHLvLDy/{;,*+.....", ".........+%*=,-;---=>#&+...........%*=-~1:}}[2$@+.......+#*>;d:2[////FF]_!-=*&+......................................+%>;_:QKPJKI[2{(((]/QKKKKI/~-%....@#=-;){][[IJwNwNwJKK^/F|!-%...........+&*-~][PwwwK['-=%@................+@@&&&@+...................+%*>-'1}[4[[<[2]'-=$%@........+%=-;){FQrKzKzKKrQF]_;-=%+...@#=;'{F[IJwwJKKKIPPOwwwJQ:'-%...#=-;){FF/2/Q^QKKKKKKPwwwOK}(=+.+*;~]FF//QrKKKKKKKKII/QIIJOP}-...%-;')]F/2^QPJwwwJJPwwwwJQ1~-%......+&=-;!)1/IKJOSO8Q(;>$&......", "...........&&%*****%&@+.............&*=,3c!_(12-c_((||:((!;==$#+........................................%$-;(}QIIQ[}|(__(_:}[III[:_-&.....@%$>,;!_12<6SNYOPIQ[}|(;>#+...........&*>;_1Q6O65|;>%&................+&######&+..................+&**-;~((||||1(_'->*#+.........@*=;!_:[QQ,;_(:QKOOPIQQI..+%,-!__|:}[QIQQQ[Q[Q[22[<885|>+..@%*--'_(|:[-'(::[Q<<555[1~->*%+.....", "............+@%%&&&++...............+&$>=,90abfgpqjpgbd093-=*&........+@#$,3c_____0_cc,*#@+...........+#$>99aa_0dac3-$*&&.........................................&$,cdfhhlh7f1bdddde47hlhhed,%......@%*=-30dfgjUUUqplk4fbd0>%............&$=30dfgigfd9>&+................+&$*$*>$*&+..................@#*=9;aaaaaaaac3=$#&.........+%=,;ab7gmmmmpmmii7bac3*%+...+&=39abbginXmlhhhkimWUWqifd9#...+%*=,;0adbe47hhmlikhijWWqpf0>...&=9adb:f47hh77774477777hmigb$...@#$>,30d:f7imjnpmiljWUqjgbc,&.....@%*-cb47hhhhh7efbbc9=**+.....", "..............+@+.+..................@%*>99adbehmnnmkfda93=*#@.........&#**>999c9cc99,$*%@.............@*==--c9c3-9,$*%@..........................................%*3c|7lVVllk742ee47hVVmXlkb0*.......@#$,90bfioWUUWnVlk7e|a9#+...........@%$,c0abbbac,*&................@*>,9c0c93>*%+................+&%$=33393!93-9>$#@@.........@*=0d:7inqZWZZWqZXi7ed03#+...@#>30d|4klmXVXVllllnWUUqp7bc$...@&#*3cad|ekhlVVVVVlVnZWUZpgb,+.+%-9_b4kklVhlk7e4f4kklVVllkgd=+..&#*>3c!b4klVmXXVllXoWUWjhea9#....+&*>cb4hVlVVVl[4eedac3>*#+....", ".....................................%>-3;!)FrstCCCAyz/]~;-,$%.........+%#=>--;;;;;;--$#&@.............+%$---;;;;-->=#&...........................................*-'{rxBCCCCCBtyyxABBHHGGGtz{-.......&==;!)/zxvEEEEDHCAysr]~>@...........@#=,c!a_a09c3=#...............@=-;)Frzr/{';>*@................@&*>--;;;;;;-->=*&+........@%-;]/zxGvEEuEEEEELHszr]'-@...%=-~]^zsyCCHBCCCCBHvEEEEGyr{-...@#=-;(FrzstBCBCBCCCHHLEEEGs^;@.+=;~FzxACCCCAxszzzsxACCBCAxz],+..&=,-!)FrxBCCCBCHCHBvEEEDAs2)*....@$-'{ryBCCBCCAysszr/{~!;-*@...", "....................................+%=-;;!)]^sABBCBxz/]~;;,=&+.........+&&#$---->>$$%%++...............+%%#*$$=>-=*&+...........................................+*-;{^yCCCBCCABBABBCCBLLLGAzF,+......&*,-!)FIyGLEELvCCBAsrF',@............+%=,-;!;;--$#@+.............+#>;)Frytyz/)!-=#.................@%#*,>,-,->>$##&+.........+%>!(/zstvLEEuEEELLtxz/]!>&...&>;~]/zsyACBCCCBCCBGLEELtsr{=+...@$-!{FrzyBCCCCCCCCBHLLuLGyr;@.+$;)FryBACBAAszzrzzyBBCCBByz]-+.+%$-;~]^zyACCCCCCCCCvLELGts/)$+...+=-~]ryBCCCCCBtszzr//])~;-*...", ".....................................&#*>--!_(FQIKKI/}_~;->*%@............++@@&@%%&+++....................++.+++@&&@..............................................%=,;)/IJJsKzKrrrrrKJJwwwOP}~=.......&#*>-;):Q6NNwOJJKr^/1);*...............+&%**##%&@+...............@#=-;(/KKK/|';,*%...................++&&@&&&@++.............+&%=-!(2<6OwwOwOwOJ<:(~;-&+...+#=-~(F[QKKzKKKKKKKJwwwO<2(!*.....&=,;)]F/IrKKrIrIIKPwwNw6[|-+.+*,;)F[rrIrI/F|{(]:[IPPKIr}];*...@%=,;'|F^IKKrIIKrKKwwNwO<}_;%.....%=-'{/IKKKrI^/}]:F}F|)!;,#...", "....................................+@#>-;!!(1}}Q[Q221(~!;-,*@.................+..................................................................................&*=;_}QPPKIKIQ[[[[IKJwwSO<|!*+.....@&#$,-!_|46RNNYJP-~14P66<:~;-=%+......................+....................+%*=-c~12<[<<<[<421~;-,*&.....&,;_:}[[QIIIQ[[<866665<}(!,%.....@*,;~1}[QQQQQQQQQIKOSNR84_,+..%-!_:[QQQ[21__~(|}[QIIQQ}:_;#...@#>-!(}}[Q[QQ[QQQ,93caddd0daaa;9,=*%@....+#>cb4khllhhk777iqqomh7eb03=&....+&*-0b44hkkhhhhkhhhmoWUqpgb,+.+%9abf;df7kkk4k7k7khhmjWTUjgfd9%.....@*,;dekhlhk7f:ebef7kebd03*...", "...................................+&$,cd:44[kkhkllkkk4ee:da3#+..................................................................................................+%*,cb4lXVXoZZqZoonXXZZWWZphb,+....+%$,cabe7hmqUTUZoXXmVlhea,@.......................................&$>9dehpWUWoi4dc3*&.............................................&#%>=99990c0c399,>*$%@+....&$9d4hVlVVVVlkhhXoWomhk4ba3$&....+#=9_ekVVlklhllhlVlnZWUWol49@..*cd:kllVh4:bddbe4hlllllkkeb0*..+&*3ceklllIlhkklkhVXZWTUqm7e0*.....&*3!b[lVl6VVhk47kIllk4eda>@..", "..................................+%>-~]rsytBACCCACBBBAyysr/)-%..................................................................................................@=-'{^sBHHGLLEELDvvHBvLEEDHtr;@...+%=-~]/zxAGvLEEEELGvGGGHs/!#......................................+#-;)/stvEEEDBsr{!-=@............................................+%#=3-cc00~0'0;;3-=*@.....+*-)FstCCCCBCBBABGvLGAysz/);>&....%>;~/sABBCABACBCBCHGEEELvAs)@.@-(^zxBCBxzr//F/zxACCCBCAtyr(-...#-']ztBCAABAAtACACHGEEEDHxz{=....+#,!]rxCCCCBCCBAAACCCBxs/];%..", "..................................+*>;)/stCCCCBCBCCCCCCCBCxz]!$..................................................................................................@$-!)rxCBHGGGvGvGHHABBHHGHxsF;+...+%=;)/rsAHLLEEEELLLLLLLGx^~*......................................@#>!{/sBvvELGHsr]'-=&.............................................++%$,>----;->--$*%@+......*;~FzABBCBBBAtyAAHGtysr/]~-$+...+%,;~FstAAAyyAtBABBABLLLLvAz)&.+,{/zyAAAsr/]]F^zyCCBCBCCCtsF,+.+%>;]ryAAAyysssyxAABvLLLvCyr(=+...+#=;)^stCCCCCCBBBBCBCAysrF;#..", "...................................%*,!|5JwwwwwwwwwwwwwwwOK[(-%..................................................................................................+&*-;)}rPJKP5;)|}QJwNNNuNwNNNNwwO<|;&.......................................%*-~1[IOwNwOK}(!-*#+.................................................&@@&#&#%&@@++.........@$-;(F^^^//FFFF2[[[2|)~;-=%@.....@#=-')FFF]]]]]]]]/2IJwNwJQ1-@..*;')]]]]{!;;;;_:QJJJKIKKJPQ($...@*=;)FFFF]]))){]FFQPwNwJI[]!*....+&#=;)F/rIKsKKIrIKKzKI/F(~,+..", "...................................@$=9|IOOYYwYwYwSwOwYOOM84_-#...................................................................................................&$=-_:QQI#+.....+&*=;_|[5OwwSNNNwwwSwR84~,&.......................................&$,;(}<8RSR6[:~-=$%+......................................................+................+&=-!(::(__~___(||(~;-,=*#%+.....+&#=-!!(_';;-;;!!_145OYO52(-+.+&=-;;;!;--==,-c([6OPQQQ<865_$+..+&*-;~__!;;;;-;;~(}<6wY8<:~-&.....+&#=-_11[%...................................................................................................@#=3a:7hlh7fbd0c033->>===#%+.......&*>3cafgijjjjjjjjpjppgfc=+.......................................@$>;af7ijqjigb0-*%&+.......................................................................+&*,;00_a9,390000a0;3=>$#&&.......&%$,99cc9-,=,,-3cabgimigea$...&*>,3,-,,>**>-3afgii7f47iiga#....&#>390099>>-=,-90bgiipgfa03&.....+@%>,;adbgjqZqqWqZqjgba9,%...", "...................................+%$,3dbffg777g7gg7g7gfgba3=&...................................................................................................@*>-aehlVh4eb09,>*%&%&&&&&.........@#$,-0affg7g7g7g7ggffb09*........................................@%>3db4hmpihedc->#&.........................................................................&#>>999999,9,3,;99,>>*&@+.........&*=--9,->>>*$>-90cdfffba3*+..+**=>>$=**$$=*33abfbebbfbbd3#....+%*,93>-=>**>=,330abffba03=@......@#$=30aehoZWWZWWWZoibc9>#+..", "...................................&*=39ad12F4///F///[F::1dac>%..................................................................................................+%=-!]rytBxr/]_9,#%+................@#=-9'_1]}/[//F2FF1:(d!9$+.......................................%=-!]/zsxtys^]~;=*&........................................................................+&#=>-;;;;------;--,==*&++.........@#$--->===>===--;~a(b{(!3%....%*==-=,==**=,9ca_|{]]{|1da,%....+%*=>--==>=*=,-;;'ad(1{_';-&......@#=-;_(FIyGHHHHHGCxKF~;,#...", "...................................+&#=-;!~){())))))({))~~;--#+...................................................................................................&*,;)FrszzF{~;-*%...................+&$-;;!~~'~)))))~)~~;;-#+......................................+&#>;)F/zsysr/);-$&+..........................................................................+%$>,>->,=,=>$$$*%%%+.............+%*#*#$**=$**=,--;;';;;>&....+&%*%$##%&%#*=,-;;''''!!!->@.....+&%#**%%@&&#%$->-;;!;;;-,#+.......+%>,;')F/rrrzzrrr^])'-*+...", ".....................................+@%*>==-->===,-->>,===*&+....................................................................................................@%#=-'){{)'->=*++.....................+@%#==,>=>>=,,>,>=#%&+........................................+@#=-;'({]1)'-=*&+.............................................................................+@@@&&&@&@&&+.++.+...................+@@@@&&@@#*&%*$*%%@........+.++.+....@%#*$*#***#$#@...........+++...+.+&%&%*$*%%&&+.........+&%#$>3;;!;!!c!;;-==#@....", ".......................................+@@&&#%**#*%%%##%#%&@@.....................................................................................................+@&#=-';!!;=$%@+........................++@%##$*%$##%%%%@.............................................+%*$--;;;-==%@......................................................................................+.....................................+++++...+......................+&@+@++.+++......................+.++..+................+@%#*=>=======**&@.....", ".........................................+++@@@@@&@@@@@@++...........................................................................................................@%*,,,=*%&++............................+@@@@+@@+...+...............................................+&&%%#%*%&%@..............................................................................................................................................................+.......................................................+@&&%%##%%%%@@+......", "...............................................+..++...................................................................................................................++@@@++.+...........................................................................................+++++.++..........................................................................................................................................................................................................................+.+.......+........", "..........+++@++++.............................@@@+@@@+@+....................++++@@++.........................+++++++..................................................++@@&&&@@&@@++...........................+.......................................................+@+@@@@@@++............................+++@@@++....................+++&&&@++.....................................................+++++++................................+++++++++..................++&#$$$#&++..........................................", ".......+&*>=-,-->$*&+........................@#*$=>----=*#+...............+%*$------>*%+................@&%%#*$$>>>>$*#%@..............................................+@#=,-;!;;-,>$#%+.....................@+@@&@@@@@@&&@...........................................+##>>,--,==$*&.........................+%*>>,-,>>$#@................&*>--!;--=*#@................@&&&%%%##%%%%%@+...............+%*==----=*#%@.........................+&#*$---->>*#&@.............+%$>-)~))~;>$*#&+.............................+........", ".......+#*-;!~';-=$%@+......................+@%=,-;;~'~;**@...............+*=-;!)));-=*@...............+&%#*$=,>>>>>,=$##@..............+++++++++@@++++...............+&%=-;'))({)!->$&@...................+@%%&&%%%%&%&&&&++..............++@@@@&&@@+@&@+............+%*,;'~!;-,=*#+........................&#*--!~;--=$#+..............+%=-;')~!--=*%+...............@&%&#$%%#*#$##*&+..............+#*,-!~';-***&+........................+%*=>;!';;-=$%@.............@#,-!)]1|)';=*#%+................++++@++.++@@@+........", ".......&*=-;~(1_;-=$#@......................@%$>-;;((1~;=#@..............@#*>;!((||_;-*#&..............+&$$=-;;;;;;;-,=*%&..............+@&&%%%%%&&%&&&@..............+&#>-!(|221|';>*#+..................+&##*#*#**##$####%@.............+@%##**##*##%%%&+...........@#*-!(1(~;-->*&......................+&%$=-;((_!-,*%&.............@%*>;_(||(!-,>*&+.............&&%#$$*>>$*$*>$*#%@+............&*>-;~|(~-=*$#%+.....................@&%#*=-;(1(;-,=#@............@#>-;~|}[[:_!-=*%@..............+@&%%&&&&&&%&&&&&.......", "......@%$=90deeba;,*#%+...................+@#*=3ca_bbedc,*%+............+&$=30abeeebc9=*%+............@%#*>3;aaaaaaaa;3>*#@............+&&##***######%%&+.............@%*,;abe474edc3*#@.................@%*=>>>=>>,,=>>==>>#+..........+@%#**>>==>=>==*$$&+..........@#*-abeb_a0;,>*@+...................+%#*>,;abeba;3>#&+...........@&*>3abeeebda3>$%+............+%#$=3-3-3>3-33,,=>#&+..........@%*=3ade:dc9=$*#@+...................+&%#$>3cdbeb_c3=#@...........+%*,;ade77kfbd03=*@.............@%%%#$*#%%#%####&%@+.....", "......@$=,;de4k4bdcc,*%+.................+&*=,ca1ee444:a3>%+...........+&$=9~b}7khk[b~c,$#@..........+%=,99dbe44eeee:bac,=#&..........+#*=>,-3-,,==,,-=$*@...........+&*>3_b2khlhk4(c3*#@..............+%*,30caaaaaaadaaaacc>#........++&#=>3ccaaaaaaac93,,=#+.......@%$,c(4444e|dc3=*&+................+&**,9ca(ekk4|a9=>#@..........&#>-9a{4khkke|d93=*&..........@%*>-ca1bd~aa_dbdaa93=#+........+&#>3;de[7eb~ac,>*&+..................&%$>3;a(e4k4ea;3=&..........+&*,9a14khllk41d03=#+...........&*=>,,,,=*>>,,3-==>*#@....", ".....+&>;;)FsxBAxsr/{;-*@...............+#=-')FrsAAtysr]!->&..........@$>;~]rsABBCCAsr]~-=*+........+%>;)]/zxACBHHtAAyr/);,*+........@#-;~){]FF{~~){]F{;-=&.........+&=-;{^sxCACBtyrF);=#+...........+&*>;){/^rrrrzrrrzrr^/F)-@....+&%$$--!~{F^^rrrr^/F]]{)!,%.......%=-'{/syAtAxz/{);-$%+.............@#=-;~]rzxyBByr]);-=*+.......+%=-;)]rsyCACAAyrF);-*@........@#=-!)/zyyzzrrzsxsr^F{!,#@.......&$,-~)/stBAssrF);->#&+..............+%=,;!{/zsxAAyz/{'-#+.......+@#=;~FrsACCCCCBxzF)!-#@........@#,;~){{]])!!~)]]]{)~;-=&...", "......#--!)/zAABBAsrF)-=&...............%=-;)F^stBAByz/{'-=%+........&*>-!{/sBACCCBBAz/);-*&.......@%*-)]rzyHvLLLLLHCAsr]~-=%........&=-'{F^rzr/]{]/zz/);,*&........@*=-~]rxBABBBBys/{;-#&...........@%=-!]/rzzzzssssszszzz/];#....@#=,-;~)]/rzzzzzzzzr/FFF)!>+.....@#-;'{/zyABCByz/]~;-=#@.........@&##$-;!]^stBBABxrF);-,*&......@#=,;'{rstBACCCAByr]~;>*&@.....+&=-!)FryttyszsxyAxsr/F)-=%......+&*=;'{/zACBBAxzF);-,#&@...........+@#*--!)/sytBBByrF);-=&.......@*=-')^sBAACACBCByr]~;-#@......+&>;']F/rr/F{)]//r//F]~;>#...", "......&*,-;)]^rrIr/F_;=*&..............@%*,-!)]/rKzr/]~;-*&+........+&#=,-~{/rKzKzKr/}{!-*%+.......@#*=;~]}QPwwwNwwOJI/|!-=&@.......+&*,;!)]}/}])')]}F(;-*%+.......+&$=-;)]^rrr/^^FF(;,$%@...........@%$>-']}/[Q[/^Q/[[^[/}:_;&....@#*,--'~(]}/[/[/[/22F:|();*......@#>,;'(]F^KzK/F|~;-==*%+.......+&#*$>--;)]/rrrI^/|);->$%@......@&*=-;~]/rIzKzKKr/]_;-=$&@.....@#>,;~(]^r^^/}//rr^/F|)',*&.......@#$=-')F/rrIr/})!-=>$#&+..........@%**,-;)]/rrrr//(~;=*%+.......@#*=-~{/IzKrKzIzI/F~;>=*@......@&*,;'_{]2]|)~){F2F{_~;>*&...", ".....+%>>;!_|2}[[[[1_-,*&+............+&$>-;~(|}[[Q}|_;-$#&+........+@#>-!~|}QQQQQ[[2:~;=$&+.......+&$,;_(:[;!(|22}|((((||);=$%+.......@&*>-;_12[Q[Q[21(~;$%@+...........@%*>c(}<<55555<555<555@....+%$>;;__:}}QQQQ}|(!;-->*&.......@#*$-;;!~(1}[Q[[21(~!;,*%@.....+&$>-;'(1}[Q[QQQQQ2|(~;-*#@.....&*=-'(|1[[[[}2}[[[[}1|_;,$%+......+#*,;;_|}}QQQ[21~;;,=*#@.........+&#$>-;!(1[[QQ[2:(!-->#@.......&*>-;~(}[QQ[[[QQQ[|~;->*@......@#$>;_(|:}}1(((|:}::(_;-=&...", "....+&#>3cddb:f7k77fb0-$*+............@%>9cabbe4777fda-=$%@.........@%*3;dbef4k47444f1dc,$%+.......@&$,;dee47hhihihh4ed0-*#%+.......@*=3cadee77fbbbbbba;=*%+.......&#=3cad1f4<7<47bdc9=%&+...........@#*9agiqqqUqUqWqqqqqqUqgb*..+&#>9adbfijjqqqqqqqqqqqjpgfd,&...@&*-;aab:f477hk774ebdac9=#+.....@&$,3;adbbe74h<474fbbda9>*&.....@#,9!db:7477447k7h7febac,*&....+%=3;0bee4h4h44e7777eeedc-=%+.....+@$$-cdbbe44k774fbda;3=*#+.......+&#=-30abb74*@.....+@#=-0_b:477[7444h77ebba3=&.....+&$>-0dbef77feeee474ebba;=#...", "....@%=3adee44kcd1e7Illlhk4k7eb03=#@......+@$=3ae4khhklVVVVh7edc3>#&+......+%*,cd:e4klkk[444e1dc,$%@......@%=30d144khlVVVh71a;>*%@...........@*,3agoWUTTTTTTUUWWUTTTjb>..@#>3~b47hpZWWWWUUUUUUWWZnXhea*..+#>3abe47kkhhhllVlhh774eda,#+...@*>-adee47kklllllhhkk74edc3$@...+#3cde47khlllhhkllllkk74ba3$+...&#,cde4khllllllh5lllhh471a9=%....+&*=30d|e44k;)]rzxACCCCCBByrF);-$&.......&=-!]rsyBCCCCCCCCBsr]~-=&.......#,-)/sABCCBCCCCCCAzr]~->%@......%=-~]rsxBCBCBCCCByz/{!-*&......%-;)FzsABCBCCGCByz^{',$%+..........&-;(/stGLEEEEvHBCCBAHBAx/-@+#-~FPtvLGGCHBAyyxAtCCCCCCCAs/,++*-'FsGGLLLLELLLLLLLLEELutzF),&.+*;'/sGGLLuLLLLLLLLLEuEEExr]!=+.+*;)/JGGLLLLELLLLLLLLEEEvwzF)=+.+$;{/JGLLLDELLLGLLLLEEuEDwr{;*+...&=-']/zsABBCCCHCCBBAxsz^]!,%....@#,;)FrzyxBCCCCCCCCBysz/{!-#....#=;~FzsABCCCCCBCCCCCAAxzF)-%...+#>;)FzyBBCCCCCCCCCCCBtyzF),&..", "....@*-!{}/IKJJwwwwOI}_'-=&.........&$=;(F[IKJwwwwOPQ}(',=#+.......@%=-'][rKJJwwwwOPI[{;->*@.......@*=-)/QrKJwwwwwOPI2{~;=$&.......@*>-)]/QKJwwwwOJKIF{~->#@......@*-!(}/IKJwwwwwJI}{!-*&@...........@*,;~2QPONNNwJKI/[[[rIK/(=++&=-)[8wwwJKI/}]1|1:[QrKKIIr})*.+&>;_[6wwNwNNNwwwNwwNNNNS6}(;=@..&,;_[8wwwwNNNwwwwwNNNNNS52~-%...&=;(QOwNwNNNNwwwwwwNNNNw5}_;%...%-':QJwwNNwNNwwwwwwNNNNw5{~-%....+%*,'{/[IKJJwwwwwwJKK^[]~-$@....+%*,!{F[QKJwwOwwwwJJI/[]~-$@....@#=-']/IKJJwwwwwwwJJKr/F_-$+....&#=-)]^rKJJwwOwwwwJJzI/F(;$+..", "...+@$>;(}QI6YMNRNRY52(;,*&+........@%-;(2[<6YMNNMN65:(;,$%@.......+%$,'|}[I6OSSNNS8<1('-*#@.......@*=-!:[QKJMMNRNN6<1(~->&@.......@%*-'1}QIPOSYMNM8<:(!-=#@......@$>;(2[IPOMNNNMY5}(;,$#@...........+$>-a1[<8SNNS8&+........@#=;de4hjqWTTTTqjeba-=#&.......+&*,0b47hpoWUTTTqieba;>$@.......+%*3a|44ipqUTTTTjifba3>&@.......@%*3a:fhhjqWTTTTjifba9=#@......@*>cde4hmoWUTTTqigbc3$%@...........@*=9afgmjWUWqpi77fe47k7bc%..&>cdgpqWqmgeba99-90def7774fb3#..@*,cdfgg5i5mgggffggijUWqieac*@..&*-cdf7hhi5mi77fgggiqWWjiea9#...&$-9dfg5ilmmi77777giqWWqgfc9#...&=3abekhi5mmh77777gjqUWjiba-&....+&*>cdeehpjqUTTTTTqjikfb_3#......@*,;de4hmoqWUTTTqqji4fba,#.....@%*,0be7hpoqUTTTUWjmi7fba,#.....@%*3a|f7lpoqTTTTTqqph74b0,#...", "....+&>3cbe7mooWUTTWjl71c3>#+......+@#>3!be7mjqWUTTUoi71c3=&+.......@*=;db4hmnoUTTTWmh71a3*#+......+@*,9db4kmoqUTTUqmk4103>&+......+%$,cde4hXnqTTTTqmk4(c3*&+.....@#*30df7lpoTTTTUjh4(03>%+.........@&$-0b4mooqZoonVVllkkkk4b;#..#3aehoWWZmhedc93339cbe4444ed9&..@%-;ab4khVVVI74ef}4ioWWqifd9=@..&*,cae7khlVlhkf44k#+.....+&*,;~]rztAvDEEuuGHxzF~;>%.......+$-;)FrstCvvEEuEGBtzF);>%+......&=-;(F^stHvLEEELHBxz]';$@......@*>-!{FrsAHvEEuuEGAyr]~->%+....@*>-~]rstHvDEuEuvHyzF);=%+.......+#=-~]rxDDDvGGHCCCCCCCtsz/'$+.*~FKADEEEtxrF)';;;'~]/rrrr/]!%..&$3_FrsBACCBAysssxBAGvLGxKF_-&..&=;_FzsACBCCAyssytAHvLLGyI{;$...&=9_FzyACBHHAxssxxBGvvvGyQ{;$...%-;)/zxtCCHGAxssxtBGvLvGsQ{;*.....&=-;~{/rzswvEEEEAxsK^F{!3*......+*,;~{F^zstGEEEvGysr^])!-*.....@%$-;){F^zstDEuEvAysI/])'-=@....@&$,;~)F^KxtuEEEEHyKr^]);-*+..", ".....@$-')]zyCCvLEELGHAs/)'-=&......%=>;'{/zyCGvLEDvvCBs/);-*&.......#=;~]/sACHDvELLvHAzF);-$&......@*-;!{/zABGvuELGGCAzF);,#......@#=-!)/zsBCvLEEEvGCtzF);,*@....&$*-;{/zyBGLEuEvvHAs/)!-=%+......@*-;)/KAvLvCCBCCBCCCCCBsrF'*.+>'/ztvLEuHsr]);;--;;)]F/^^F)-%..+$-!FrxABCCCAyssxACCCBCts^{!,@..@$-'FryAACCCAxssyBCCBCCAs/);*+..&=-)FryAACCBByssyBCCCBBszF);*+.+#>;)FzyABBCCAyssyBABCCtxzF);*+....+%=-;'{F^zstEEEuAsr/F)!;,%+......@#-;!){/zsHLEuDAsz^])!-,%+....+%#=-;')F/KyHLEuDAzr^])';,%+.....@#>-;;)]^zyGEEuHAsz/]);;,%...", ".....+#>-;_1QJJJP6P6JOPQ|~-=*&......+%*>-!_2*@......@#*,-!)2KJJJP68JJJI[('-=%+.....+%$=-!):[KJJJ866JOJK}('-=$@....@%#=-;(2QJJJJ888JOKQ1';=*%@......&*>-;(:5JwwJsKsKKKKsKKr2{~-%..%-_:$*$$=-;;!!'!-$+...&=-'1F/QIKK^/2F[rKKIQ^[{~-=%...+#=-'{F^rIKrQF2F[IKrIQ^}{!-=%...@$=;~{F^IKKKI/}/^QKIQ^[1(;-$&...@*>;_1/[rIKKQ/}2^IKIQ^2:);-#@......+&#==-;_(45wwNO<}(!;->$#+.........%$=-;;1[5MNNO<}(';-=*%+......+@%*>,-;~1[8wNw6<:_';-*#&........+&*>=-;_|[6wNw6[1)!;-=*&+...", ".....+&=;!_:<6O5<[4<8Y6<1~!3=#+.....@&$=;'_:58Y5-'(}<6O5<[Q56Y6[1~;-*&.....+&%$,;~(156O5<[Q<6O841~;-=@.....+&#>;!(1[6OO5<[[56Y5[(!;-*&....+&*>-!(1<8O6<[Q<6Y8<:('->#@......@#>3!_:Q6JPPIII6666665<:_;=@..#,!b[6MSO<:~;=*##%#$*=,>,=>>&+...%*,;__}[QQQ[}::}[QQQ221~-=&+....&*,;_:22QIQ[}11}[*#+...........@%$=-9_e5YRY5}_;-=*%+.....", "....+%=-cdbfiqqmgffgpqjifbd03*@....+&#>3cdbgiqqpgffgjqjieba0,#+.....@%=-adbgpjqigffijqjifba0,#.....+&*=3adbgmqoige7ijqpiebd;,%......@*,;abegpqoig7fijqjgfba;,#+...@#=30dbfiqqpgffgpqoiebbc3=#+.....@*,;abb7imlliVmoqUWWqqifd9>@..%3cbgjWWqifa;,=$###*$>=>>=**@....%*-cdbe4hmhh4}f7hhh7feda3>&.....%*-cde44hmi74e44hlhhfed03$&....+%*-9db44lih4ff475ihfedac3*&+....&=,cde4hhli7fee4hlhfeda9-*&..........@#$>90biqUUjgb03=*#@............@**>30biqWqpfbc3>*%@...........@%#$>-0fiqUqjfa0-*%&............+&#=9;0fiqUqifdc,*%@......", "...+&#>0de7hnoZph[7koZZnh7edc,&....+%*30be7hpZophkkinWZph4ed9>&....+#>3a(e7hnZZnh4hloWomh4edc$@....@#>9abekkpZqXhhhloZomk7ed9$+....+#=3_b47koWqmh7hmqZom74bd9$@...&*9c(e7hnoqnhkkhoZqnl72dc,*&....@*>9d:44lVlXVXXoZUUUUUqjgb0,&..#3aeioWWqp7bd03-,>,,3-3-3-,*%....&*,~b4klmonmlllhnnXh7:dc3=#+....&=-a|ehlmoomllhVnnmh4eda3=#+...@#>3_b4klXoomllhmonmkebac,>&....+%=9a1ekhnonmlllmnpl71bac-$%+.........@%*,cafiqUUjiba;,$%+............@%$,9dfiqWWjgba9=#%+............@#*390fpqUUjgb9,>#+.............@%$>0bfjWUWjgd;,>#.......", "..+#,;~FzxAHGELvHABHDEDGCtxz]~=...+#=;~FzxCCGELvGBAHDEvGCtyr];$...+#,;)/zAAHGEvvCAAGvLvGAAsr];#...+#,;)/syCHvELvHAHHDLDHCtsr{;%...+#-;{^stBGvEEvHtAvLLvHAAsr{;%..&=-)FzyBHGDEDHBBHvEvGBAyzF)3$+..+*-']rstBBHGGGGHGDEEEvDvts/{;%..*_FztGELDHssr/{)~~){{{]]{{);>+...*-!{^stHvLLvGCCGvvvtszF{~;>&...@$-~FzstGvuEvHCGHvDvtsr/]~;=&...&=-~FrstHvLLvHBHvvvGxz^]);-=@...@=-~FzsAHGLLGACCGDDGyz^]);,=@.........@*,;(/KtEEEDyI]~-=*@...........+&=,;)}ztEEEGJr{~-=*@............&>,;(FKtuEEvJ/(;-*+.............&$3;(}JtuEvvs});-$+......", "..@#-;)^sBCBGLLLHCCHLLLHCCAs/)>+..&$-;]^yBCCGLEvHCCHLLLHCBts/)>+..+*-~]rxBCHvLLvCCHGLELHCCtsF!*...&$-!]rxBCCLLLvHHGGLLGCCBtzF'=...&=-~]zyBCHLLEvBCHGLEGCCBtzF'$++%>!)/sACBvLLLHCBCLLLGCBAs^)!>&..&$;)FztBCHLLLLLLvGHCHHHAyr]),%..*;FIyGLLLHAszrF]]]FF/rrrr/F),&..+*-!]^syAGLLvBCCGvLvAsr/]~;-*+..+*;~FrxAAGLLvCCBGvLGysr/]);>%...&=-~]zsAAGLLGCCBGLDGyzrF)~;,%...%=;~FryxHvvLvCCBGLLtxz/F)~;-#.........@$-;)/KAuEEDxr]!;=#+............&*-;)FPALEEvy^{'->$@............&*,!)/JALEvGs^);-$+.............@$-;)/VALuuGs/);-$&......", "..+&=-!{/IKPwwNwwJKJwNwJJKr/|;*...@#=-!]/IKJwwNwJJKJwNwJJzQF(;*...+%=-!]/IKJwwNwJJJJwwwJJKr});%...&*>-~FQrPJwwNwJJJJwNwJKKrF_;#...&*,;'FQKKJwwNwJJJwwNwJsK/F)-%..@*-'{/IzJwwwwwJJJwwwJJzr}{!-*@..&*=;(/rIKwwNwNuNwJPKQIQ[2(~;$+..@$;([6wwwJIQ}]|)~)1]}}}/2F_'>+...&=-!)F[IJwwJKKKJwwO<}]_~;->&...+&=-'1/[KJwwJPKPJwwOQ}:_~;-=&...@*>-~12QIJwwJPKKJwO8Q}|)~;-=&...@#>-~]2QIOwwJKKPJwwPQ:{(!;,*&..........@*-;_e5wNwOQ|'->#@.............@&*,;~}5wNwJ<|!-=*%@............@%*,;~26wwwJ[|;-=%@..............&=--)26wNw6[(;,>#@......", "...&$,;(}QI5OSSOJPIPYSSOK#+...&*-;(:2<8OO6III6YY6[1(__;3=%...+%=-~_:[<8YO6I<<8OY6}1((~;-=#...@%>-!(:}<8YO8III6OY54:(_~;-=%..........&*=-c|5YSR84(;-=#&.............@%$=9_|#&+...........+@#$=-a:5YSY84(;-$$@+............+&*>-a15YSR5e_;,*%&......", "..+&=3cb7hmmjZqommlmjqqoplh7d9*...@*=9ab4hmmoqqqpmmpoqoXmlhfbc*....#=-cbkhmmoWqomlmmqWqommhfd3%...@$=9af7immoqoopnmjqqZXmlhfdc$...@*=9aekimmoqWjmmpoqWopmlgfd9#..@$3cdfilpoqWopmmnqWWomlh7bc3*@..@*3cb7himjqWWUUqqjih77febba0$+...%>0d7hilpopmhk77khimjjjifbc$+...@*-cdefgpoomlkhmpqjgfbbdaa9*+..+&*3cdffhpoomihhmjqpgfbbdda3*...+%*-0de4hpoomihhmjqpgbbbbac3#...@%=3cde4ipoomhhimjqigfbbbaa-&........+@%*,9abiqWWjgb;3=$#+...........+&%>-cafiqUqjgd0->*%@...........+&#>-cafpqUqjg_c9=$&+...........@&*$3;dfiqTqjeb03=#%+.....", "..@=-'b7inXoYZoXXVVVnZZoZomifd=+..@*-!b7mXoonZZnnXXXnoZooonlfd,+..@$3ab7mnnooZnnXVVXnoZoooXie0$...%=9~b4mXonZZoXXXXnoZoooonhfa=+..#>c_bhmnXoZZonXXXnnZXZnomkea*+.%-0d4iXooZZoXXVXnooqZooXi4dc,&..%30d7inXoooqoqqZoXVlk7k444e_9%..+%>9de4lmnZZoXVVVVVXZZWZph:a,@..+#,cdb4klXnXmlhklnopmhkk44ed,&..+*=9~b4klXnXVlhhmmnmVkk444e_=+..&*>9ae4hlXonVllhmnjmik7444e0$+..&$,0de4klXXXmhklmnomlk4444:a$........@*=33adgiWUUoiea03,=*@.........+@*>,30bfpqUUogedc3>=&+.........@#*>,0abgjUUWjged;3,$#@.........@&$=39abgjWUWjhbdc93*#@....", ".+*;)FzxHEEDDCCBCBCCHHGDLEDHs/'@.+$;)FzyvLLLLvHGCBCCBHvLvLDGs/;@..*-)/zyDEELvvvCBCCCCGvvLDDts/;@.+=!{/sADvEEvGCCBHCBCGGLvLDAsF;+.+=!{/stvEEvGGHHCBCHBvvLLLDtKF-@+$'FzxGvDEDvHCBCCCBGGDLEDGyrF!$++$'FzxGDDDvGHHGGGHBCCAxyyAAAz{=..+#-!]rstAGDLDHHCHHHHLEEvGyzF;%..%,'{^zxABHvBHtAttBHCCBBBABxr{*.+*-;(/zytBHGHBABtCCCCCBCCABxr;@.+*-!)/zxABCHHBttAtCHBCCBCBBy^;+.+*-~FrsyBCHGCCAxtACHHACCBAty/;+....+&#=;'){FrsHuEELtsrF{)'-$@.......&#>;!)]/rxGuEEvtK^]{~'-#+......+&$,;'{F/zsvuEEDAz^]{'!-=@......+%=-;~)]/zyGEEEvxzr/]);-$&...", ".+#;)/zyvLELLGCCCCCCCBGGLEuGxr;&.+$!(/KtLEEEGCCBCCCCCCBLEEDHxr~&.@$!{^KtLLELLCCCCCCCCBvLLuLGyr;@.+>;{/stLLLLLCCCCBCCCBCLEEuGs^;@.+>;]/KGLEELLCCBCCCCCCGLEELHs/;@+*)^zyvLELLCCCCCCCCCCGELuvxzF)$++=)/zAGLELGBBCBCBGCCABAtABCCsF-+.+%-!{rzyAHGGGGCGvBBCGGvvtsr]-&..#-']rsACCBGGCAtyABCCBCCCCCAs{>++%;~]rsACCBCCCBtytBBCCCBCCAAr~&..*;)]rsACCBHHCBAxBCCCCCCCCBAr;&.+#;)FzxCCCBHCAtyABCBCCCCCCCxr;@....&*=;!{F/rzxHLEuEBxzr/])!-#......&#>-~{F/rKyGEEuLByz^/]);,#......+*>;!)]^KsxGLEEGtsr/F]);>#......@=>;~]F/zzxvLELuAszr/]);=#...", ".+%>;(2....%$-')]}QIPJwwwwJJKPI5<21_-$+..&>;)}IPJwwwwJIrIrIKKJJJJKzQF'*.+&,-~}'1[5MNNYOPQQ2}2[QIPRNNR6<|,+..%-~|[5MNNSOKQQ2}}[QIORNNR8[|-+.%-(}-9~|:[QPJJJPQ[}:(_0,$#+...%,9_25OYwSYw8PKIIIIPOwwO6<[|!*..%=;_26OYYSSY8PPPIKPKOwYOPI[(-@..&=3_48OSYYwYJ5KIIIPKOYwO6<[)>+..#=9(48OSMSNY8PKIIIPJOwwOP<[(=....+%$>-_(}}[Q58SNNR8IQ[}1(;-#+.....&#>;_|2}[<58SNNR6;_|:[Q<5MNNNM6;_|}[[Q6MSNNY6QQ}}1(;=&...", "..%>cbfiqUTUqmlkfee4kimqUTUqif9@..%,cb7iqUTUjmkkfee4hhmqTTUjie3+.+%3ae7mqUTUomh74ef7hlpqTTUjhf-+..#-0bgjUTUUjpk7eee4hloqTTUjgb3+..*9afhpWTTqomh4eee4hloqTTUjgb,@+%cd7iqUUUqmkkfef4hhpqUTUqigd3%+.#;bgiqTTWjmmjWUUUUWWopnpjWqid>.....+&#$,cabfhmmVmikfbac3>*&.....@>;dgjWWUUUWopmmmpmnqWWZni71c*..%,0bgjWWUUUWqmmmmmppqWWZjl7b3+..&=cbgqWWUUUWqnlmmmnoZWWZni4b>+..#,0bgqWWUUUqopnpmppoqWWZph4d>....+&*,;defkh5mqTTTTjmkh74ba-*@.....@*=9de4khlpqTTTqjlhh4fba-#.....+%*,;de47klpqTTTqjlhk74ba-#......&*,cde47klpqTTTqplh77eba3#...", "..%,abhmqUUUqXll7444lVXZUTUqm7c@.+#,a:hXqUTUZnVh444kllnWTTUoVec@..#3_ehpZTTUnXVk74kklVnWUTWoie9+.+%3d4ipWUTUZXVk447klXnWTUUom49@.+*;b4ljWTTWoXVk447hVXoUUUWome9+.*;e4moUUUZnVl7447lVXqUTUqmkbc#..*cehjqUUWZmmoWTUUUUWZnnXoUqjb,......@#$,cdeklVXXXlhed03=*&+.....%=9bgoWWUUUWZnnnXnnoZUWWoVhec#..%3abiZWUWUUWoXVXXnnZZUWWnmke9@.+&,;bioWWUUUWZnXXXnnoZWWZnVkb,+..%9cbioWUUUUZonnXnnnZWUUZoVkb,+...+#*3ab4khVlnqTTTUoXVlhk4dc=&....+%*3a:7kllVnqTTTWoXVlkke(9$+....@#>3ae7klVVXqTTTUoXVVkked3$+....+#=9_e7hlVmnqTTTZXVVVkkea,*+..", ".+*!]rstvEELDHCtysyxACHLEEEDHs)%.+=']zyHvEELDHBBsssxCHGDEEEGAs)&.+=!FzyHvEEEDHCAxsxtCCGDEELGAs~&.@=~FzAHDDEEvGCAssxtACGDEEEGtz!@.+='/ztvLEEEGBCtssxAAHvEEELvtz'%+=_rxAvvEEvGCtysxxBCGDEEEGHxr{=++>(rxGDEEEDGHvDEEDLEDGGGCGDDwe,+.....@#,c)/sxBHGvGHxzF~;,=@......%-_/xHvLEEEvGHCGCHCvvLLvGByr)*.+*;]IsGDLLLLLGCBCBCHvLELLGCxz'&.+*;_/xGvLDLvvvBCCCCCGvLLvvAy/-@.+*!1IyDLLLEELHBCCCCHvLELGGAs/-+..+&=-!{rxtACCHvEEEEvGBCBxs/)3%....&=-'{rstCCBGDEEEEGBCCBxs/)-%....&$-~FzxAACCGvEEELvCCCAyzF~-&....@$-~FztACCBGDEEEEvBCCAyzF~,@..", "..$;)/zyAGHHBBAyszssABAAHBHtxz)&.+*;{/sxBACHACBxsssytAAAHHHtyr~&.+=;{/stAHGGCCtyszsttABBGHHBs^~@.+$!]rsxAHHHBBtxsssyAACAHAHts^'@.@>;]rstHHHHCBAysssyBACAGGAty^;@+$)^zyAHAHBCAysszyAABCAHHAxs^)$++>)^sxtHHBCBACCBCCHBCCBCBCHtsF-......@$-;)/sBHGLvvtsr{'->%+......&>!1ztCCCHGCCBCCCBCCCHHCAyz/'*+.#;)/sABCCCCHCCCCCCCCCCCCBxsF;@.+%;']zACCCHHCCCBCBCCCCBHCByzF-+.+*;)/stCBHCHBCCCCBCCCBHCBAyz]-+...@*-;)rzyABBACAHHHCABtyyzF),%....@%>;]/zyABCCBGGGHBCABxsrF)-&....+*-;]/syBAACHHGGHACAAxsrF',&....+*-~]rsttBBCAGGGACBBtysr]~>&..", "..@=-_(:}[[[Q^/F]{]]F2[[[Q2}:_,+..&>;~(}2[[Q[^/F]|{]F/[[2[[2{_-...%>;~1:[[[[[^F]{(]{F[/[[[}2]~=+.+%>;_1:}[2[^^/F{{{]/[^[[[[2{~>..+#,;_11}[2[[^FF{{]]2[[[[[[}{~=+.%-~(:}[[Q[//F{){]F2[^[[[2]{',&..%-~1:}[[[[//[^QQQQIIrIrQ^[}_-%.......@*,;(2IJwwwJQ:_;-=%+.......+%-;(:}[Q[III^rrQ^Q/QQ[[/:(~>@..+*,;(2[/QIQQrQQ^Q/QQQQ[/2](!$...@=,;_:[[QQIIQ^Q^I/Q^QQ^[2F(;$...&*,!(2[/IIIIQrQrQ^QQQQQ[F:)!*.....@*,;~]]F/^[Q[[[[Q^/FF]_!-$+.....@#=;))]F/[^QQ[Q[Q^//F{(!-*+.....+#,;){]F/[^2Q[[Q^[/F]])!-#+.....@*-;)]]F/[Q[Q2QQQ//FF])!,&...", "..+#,-!_(_(||(__!!!!~(((|((_!,*+..@%=3'~((((|(__!!!'__(|1((_!-%+..&*-;!___|||((';;!__((((|(~';*...@*-;!_((1(((_'!!!'_((((((_';*+..#*-;'_((1(((_'!!!__(|_||(_!-%.+@=-!~_(|(1__!;;!!~(_((((_';;$+..&>3;~_(||(__((({|||:::::|(_;=@.......@%*-'(}<668<:~;,$%@.........@*>;~)(|::::1111:|:||((_~;-#+..+%*-;~_(1|1:|:1]|1{|||__~';-%+...&#-;~(((::1::1:|1|1(|(__!;-#+..+#*-;~((11::11|1:||||||(_~;>%.....+&#=;;__(((||1|||1((~~'-=@.......@*>;''_((_||1||(((_~';-$&.......&#,;;__((|1|1|||(((_!;-#&......+&*--!__((|||1(|((((~~;-*&...", "...&*>33cc0;0cc9-9939c90cccc9=&...+%$>,9900c0c99-333c9c909cc3=&...+&*,39cc;c0;9-3--9cc009ccc9,#....&*,33c90090c933333000c9c9-=&...@%=,39;9c09cc93339ccc0c0;c-#+..+*>339c090099--3999cc09093,=#+...#,-39cc0cccca00a0c~a_aac0c3%........+@#*9;abbffba3,>#&+..........%$,39c!a_aaaa0c'0a0!0cc93=&....@%$>;c9_aaaa~aa~c00000cc9-=&....@&=3-c0cc'a'a~a~0cc000c99,*@....&#>>;cc0aaaa~cc0'0000c099,=&......+%$=,330900~a0;0cccc-3=*&.......&*$=333c0c0~a000;9c;3,=#+.......@%$,339cc0c000aa0cc33,>&+.......&%>,3939c0a0000!;c993,>%@...", "...+&#=,,3,3,3>->,=,3,9,3-3,,=&....@%*$>-,>-3,-,>,,,,3,-39,,>=&....@#$=,-,33>3-,>>==>>-3-3-,=*@....@#*=,,9>>-,,,,>,=,>>>--,3>*&...+&#*=,,9-,-3-=,==>,,-,3,3==%+...%*=,-,,-,>-,$>>,,9,,3-,,>**@....@#>>-,-,99399999999933-9,>=#+.......+%%*=3-00a003,**%+...........+%*>-933339;939333;93-,=**&....+%#$,>3-33;993999-3-3-,=>*#@....+&%*>--939-39c9-3--3>-,-=*#+....+&#>,,-3-3;999993--3,9>-=$%+.......+%*=>,,-33399939-,=>$*&........+&#$$=,-,-33993339,=>*#@.........&***,>-333-3333-9,,>$*&.........&#*=>-9--939,-33,-,>$%&....", "...+@%$->---------,-------->-$&....@%=>=---,-----,>>-------->*@....+&**-,----,-,>,=>->-----,>#@....+&%$>----,---,----3----->>#+....+&#$>--------,-->------->=%....&**>------>,==>----------#%+....@#$>--->----;;;;;;;;;;;--,#@.........@&#=-;;!cc;;-*%&............+%$>--;;;;-;;;-;;,----,$#&@.....@#$,--;-;;;;;;;;-;-----==#@.....+%*>---;;;;;;;;-;-;---->#&......@#$>---;;;;;;;>-;-;>--->*#+.......+#$>-----;-;;-;----=#&+.........@#*=,------;;;---->=*%@.........+%#$>---;,;;;;--,-->##@.........+#*>-,--;;-;-;---->=*%@....", ".....+&%**%*%*%#%**#%#***#*#&@.....+&&%***$**#%#%%##%*$###%*%&+.....++&%##*#**%%#%##%****%**%@.......++&**$**%*%**%**$$**%%*#@......+.@&##$*%*%%%&%#**#**#**#&.....+%##$$***%%%%##%*#$*##%%%+.......@%%%*=*$*$#$*=$$>>====*%@...........+@#$==>>>>##&+..............+&%**$$===$=$*#$>*#*%%@++.......+&*%#$$***$==*#=$=$**%%@+........@%#*=====$*$$>$=#**%%&+........+&#**$*$=$##$=*#=$$*%%##@..........+@%%*#*$=***$$**%%@+...........@%#**$==$**$*#**%#@+++.........+.++%%##*$$$$$=$*%%%&+............&%%*$==$=$===$#%#%&+.....", "...........+..++..+.+.+++.++............+.+.+.+++....++++...............+.+.++........+.+..................++.+..+.......++.............+....+..+....++++.+.............+..+.++.+..+.++++..................+.+.++.+..++++..................+++++++........................+++...++..++.++..............+...++.+.++.......+..............+++++......++..+++.................+.++...+...++.................+.++.++.+....++....................+..+.++..+....................++........++...................+..+++++.+.++.+........", "................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................", "................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................", "..........................................+@&%%%**%%&++++..................@&%&@+...............................+@%%%@+.....................+@#****&+.......................+@&%%%%%%&++................................................................................................................+@%%#*%%@+.............................+@%%%%@+....................@%%****%@+............................................................+@%%&++........................................................................", "...................++...................+&=-;!))~{)'!--,-=$&+..........+%*=-~);;--=*&+.......................%*=>;''!-,$%&+.............+%**=-~({~);->*&+..............+%*>>-;!))))'~!-->>*&+..................................................................................+++.+@&&@+.............+&*-;!')!;-,$%@+......................@%$,;;;~!-,%&+...............@#,!))())'-,*%@+...................+++..............................+%*>>;;';-=*%@................................................+%*****%&+...........", "......@&%%&%##%%&%#%%%&@+.............+%#>-;))F/^//F])))'!--#@.........%>-;)]]]~)';--%+....................+%=>;!)]]])~-,*&+............&$-;!]/^//])~;-*%+............+%*-;!))(F/FFF]]))';-=%+...........+&%&#%%%#%&%%@+....................................................+@%#*###**==###@..........@$-;~]]]{)~'-,*@.....................+#>-;!)]]]~;-*%.............+#$-!)F/r/F])!-,*%@..............+&%##*%%%##%%%@.....................+&$-;!))))';-=*&...........@&%&&@+...........................+@#$>--;--*##&@........", "......@&%$#%**#$*#*$#%%&@.............+#*=-;)_]}/}F]_()))!-=*@.........&*-;~{{1{)~;-=#+....................@%>=;;'{]]~'->$&............+@*=-;)F//}]{';-*&+............@%*=;!)(]1F}]({_()~;>*%+..........+@%#%###%*$#%%@+..................................................+@&&#%#*#*$$=>**%%+........+&*=-!){({()!-=*@+..................+&&*,-;!){{)!->*%+...........+@%*,;)]}/}F();->*@+.............+@%##%#%%%%*%&&@+....................@*=-;!)({{';,*%@..........+&###$%%&@@........................&%*>,--;-,$##%@+.......", ".....&%#$*>$**>**=$*$*##%&+..........+&%$>;~(:}[2[}}:1}1(~;>*@........+&$=;(1}}1}('->#@...................+%#=-;~(1}}1!-=*&............+#$,-~|}Q[Q}|(!->*&+..........+&#$-;(|}[[[[}21::1(!->#@..........@#$$$*#*$**$$$#%@................................................@%&#$*$=>,>---->**%@.........@#>;_|}2}21~;>$#@..................@&#*-;~(|}[1_;,$#@...........+%$,-;_}[QQ[:(~;=$#@............+&%#**$*$$$$$$$#%&+..................&#$>;'_(}}1(;-$#&.......+&&%*$$$*$*#%%&......................+&*>,--!;;-,=$#%@.......", "...+&*$*>=333333,-3,,>=*$$#&+........&%*=-0de44hhh74f44fedc-*&........+&$,cbe7774e~9-*#+..................@*$-;adbe74ea9=*%...........+&%>-0df75kh7eba;,$%@..........+%*>9abe4hhhk7eeeeeba-=#@........+@%*=,,,>=>,-=,>**%+.............................................+@%$*=>,,-3cc90c0c>=*&........+@#=;de4774e_c,*#%@................+&#$=;0dbe47edc3**@+..........@#*-cab4khkkeedc3$$%@..........+&#*$,-,==*=,-==>**%@+...............@%*>3a~be47eb0-=#&+.....+&$$>,,3>,>=**##@....................+%*=,;0ad_dc93=$#&+......", "...&=,3cc_a_d~dd_dddaa0c3,==*&......&%>,30_e7klVVlllhhhk4|a3=%........@#=9'e[lllhkea93*&+................+%$30d|e4klhedc3*#+..........+&>3ad:klVVVlk4:dc,$%+........+%*,3a14kkllVVlhkkk4edc>*@........+*$,;!aac;cc0aa993>*%..........................................@%#=>39ccadd(bbbee1da9=#+.......&$=99b4klllk7d09=*#&+.............+&**3c_be[kll4e_;3=#+.........+%$-0d:4klVVVk4ed03=>#&........+&*>>;0~aac;c!aa0933==#+...........++&#$>ca(e4kkVked03=*@.....%*,3ca0_daac9-,=*%+.................+&#-0dd1ef4ee(a03=*#+.....", "..+*!{F^zssssssxsssssz/F]{)!-$+....+$-')]/zxBCBCCCBHCCBysrF~-=+......+%>-']rxBACCAyr]);>#&+.............@%,;)/zyyBACts/{'-=@.........+#$;)/zyACCBCCCxs^F';>#+......@#,;~]/sACCCCCCCHHCAyz^);,%.......+#>-~Frzr^/F/rzz/F{)!-#+.........@@@&&@+.........+@@@@+........@*-;!){F^rssssyyAABBxrF!-&.....+%$-;)]rstBCCAyz/{~;-=#%@+.......@%#=-;;)FrsxAACBxr/{';,*@......+&*,;)FzyACCCCCBAyz/])!-=@......+%*-;)]rzzrFFF^zzrF]{);-#+........+&$=,;;~]rsytBCBts/]);-#....&>-)]rzssssz^FF{~;,$%+..............@#,;)/zstBBHAAxsrF);-*&+...", "..%-~FrsxBACCBBBBAABAAyz//]{;-%...+#=;)]/rsBCCCCCCGvGHBxs^{~;>%......@#=-!{/zxBCBAyz/]~->*&+............#>-~FryABCBtyz/);-=#+........@#,;]ryABBACCCABxz/]~-$#+.....+*-!{/ztACCCBCBHGGBtsrF)-,#.......%*-;)/ytyzzzzxAysr/F);>%........&%$>==*%%@+..+@%%#*$***&......@$>;!)]/zsABBBBACCGLDGy/{;$+....@*>;~)FrzyAACCBxr/)!--=**&......&*=--;;){/yBCCBBxsrF)!--=%......%>-;~{rsABBAAAACBAsr/]);>#+....@&*,;']rsyysr/zsyyyzr/]);=%......@%#*=-;;~{/stCBBBAsr/{~;-*+..+%-!]ryBABAAAxzr/]~->*%+............@#=-!]rxBCGGLLHCAs/{';,*@...", "..@$;)F^IzKsKsKzKzKzzKr^F1(~;>&...+&*,;)1F[rKKJJJJwwwJQ2F)~-=*@......@&$>-;){/rzKzQF|';>>#&@..........+@#>,-)FrKzzr^F|);-*#@.........@#=-~F^rKrrrrKzr[]_~;,$%@.....+#,;!)]/IKzPJJJwwwI[]_!-=%@......+&#=-']^r//1FF/rQ/]()!-*#+.....+@&#*$$>$*#&@@@@&%#*****#%+....+&*=-;~{F/QrzKzKsJJwwwO<|!>%....+@%$=-!~{]F^KzrI/F{~;-,>*%&......@%$==--!)]/Izzrr/F|)!;-=*&.....+%*>-;~]/rKrrrIrKzr[F]);->#+....@&$=-;)]/Ir/F|F/rr//F|);-=&.....+&#*$=>-;;']/rzKzr/F])!;-$*+...&=-)F^zKzKzKr/F|);-=*#&@...........@#=,;']^IJwwwwwKK^]~;-*#@...", "..&$-!(2%&+.......+&#$,!|}Q[[[}[QQQ}:(~;>*%+......&=;'(|}[IKIPPPOOO<}(_;-$%@......@%$$-;|[Q[}:|2[QQ}:(~;,$%@......+%#>----=*#%%&%##*>--->>*@....+%*-;((:}<$&+....@%$=>--;'_|[QIQQ22|1~_;->*%+....@%*,-!_|2QQ[[22QQQ[}:(('-=$&...+&#*,;!_:[Q[:|1|}[[[}1|(!-=#+....&#*>=---;!_|}QIQQ[[1|(_;-=*&..+%*-!1[QIPPP5Q[}1(~-,$$#%@.........+&*>-;(1*@...", "..&=9abgmqoqnmlhkhh-;abe4h*%@........+#*>,90be45h-0:4hk7747hkh7ebdc-*#@.....+#=;adb44hllmVmoojifbac-$%+.....+&#=>;ab7h744f77<77ebdc3$#@......&*=9caa09=$*$#**$39aaac,=@...+&=,cbefgmjjphkhmoqWWWWqifa3#....@#>9!adb:ee44kk44eebdda;33*@....&*>-caadbbe7kk<774ebbbdcc,$@...+%$=90dbe7,;adbe7hkf:bb44h774eed0-*@...@%$,9;aa_dbb:77=**&+........+%=3cdbgioopigimjoigbda3$&...", "..#=;_ehnZWZoXVVllllVlXoWUWpgb,+.+%=-a:4kklVVVlllmXnXVVkk74|dc#.....&%=,39d:4klVVVlhk4eda93$#+......@*=,-c_e4kVVVVllk4e(d03>%+.....@#*>3abekllVlllVVVk4:ba93*&....+&*,c~b}7lVVXXXXXXXl7:ba9,*&.....+*=,ca14>33;abebd0,#...%*30b4klVoZZnmllXZZUUTUqp7b0$+..+#>9de4k7kkkkk7k7kkkkk74e(a9*...@#>9a|44kkkk9ad|e47k7kkkllllIVlkkk4410>+.+&=3aeklmnZWoXVkk44bd0c3=$%+.......&*,0de4hmZomlhlmoZni4ed0>%...", "..*;{^stDEELDCCCCBCCCCHLEEEGs^!@+&=;{/sBCCCCCBAtxABCHBHCCAAsr{=+..+%=-;~]FzsABBCCBCCAysz^F);-%.....&=-!){/ryABCCCCCCCxsz/F)!,&....+#-;~{/zxtCCCCBCCBCBysr^{~-*+...%>;!{/rsxBCCCGBGCGHAxsrF{!-$+...@*-;~]/zxACBCBBCCCCtysz^]~;#.....#-;)^zsszrF{)~~))]FrzssrF'>+..*-)FzACCHGLEGHCHHDEEEEEDGsrF-#..%-!]rxBCBCCAAysyyBBBACAAAsr],+.+$-!]zyBABCCAAyxxABBCCBCBAyr],+.+%-~FzxBBCCCCAyssxCCCCBCAtsr];+++$;'FztBCBCCAxsssxACCACCAtsr{=+.+$;{/zxBBBBBCCABABCCCCCCBAAs^;@.+*;']ztCHGLEvHCCBtysr/F{)!;=&......*-']^zxBvLDHBACHDLDBxzr]!>+..", ".+$-)/zAGGLGGCCABBABBABGGLDGA^'%+%,')^yBCBCCBCByttBCCCCCCCBxr{-+..@*,-~]/rsACCCCCCCCCCAysr]);$+...@*-!)F/rsACCBHHCCCBCyysrF~;=+...%,-!)FrzyCBCCHHBCCCCAysz/{!>%..@#-;)]rzsACCBCCCCCCBBAysr]~;>&..+#=;~{FrsABACCCCCCBCCAyszF);$+...+$-~]ryBBxzr/F]{]//zsABAs/)=+..*;)FstBGCvGvHCCBCGLLELELtxrF~#..#;~FsBCCBCCCAsssytCCCCCCByz{-@.&$;)FsACCCCCBAyssyACCCCCBBxz{-+.+*;)/sCCCCCBBysssyABBCHCCBxr{;%.+>;{/sCCCCCCByszsyBCCCBCCByr{-..+=']rsBCBCCCCBBAAtBCCBCCCCByz~@.+*-~]ztBCvLLLGCBCCAxszr/F)!-$@.....%-!]rstAGGvCBBBCLLGAysrF'=+..", "..#,;~:[IJJJJIrI^^^^[QQPJJ6KQF-@.@*-'(QJwwwwJJrQ//QrPJwwwJK[{;*...+&=-!(F[IKJJKKKzKKzKJKIQ|~-=+...@#>;~]}[QKJJJKJKKKKKPPK[:!-*@...&=,;~|F^QrKKKKPKKKKJJPKQ|~;=@..@#*-!(F[/rKKKKKKKKKKJJKI[|!-=@..@**,;)]}^rKzKKKKKKKKJJPI[('-#.....%=-~2IJPKQ2F|))(]}QIJPJQ1;*...&=;)[PJwwJPPIIIIKPJwJOOJPQ})-%+.&,-)[KwwwJKr[FFFF[IKJwwJK^]~=+.@%,;([JwwJJKr/FFFF^IKJwwJK/1!=...%,;(QKwwJJKr^F]F2^IJOwwJK[]!=@..%-;1QJwwJKKr[F1F2/IJwwwJI[{;*..+#-']/IJwwwJJzQ//F^IKJwwwJKQ(-+..&=-;{/QKJwNNwwwJJJJIQ/}]);-*+....+&=-!)}[QPJPIQQQPwwOK/}{~-#...", ".+%*-'_:QKPPQQ[}:1||11}Q5PIQ[1;@+@#=-(<6OwSSY8<[}}[[<6OSYO<}(c#...&$>;_1}Q5JOPPQQQQ-'|[QQIIIIIQQQIIK8MMO<:'-*@..@#>-~|}QQIIQQQ[Q[QQP8OYO<1!-$+...+&=3(78OOOI<}:_((2[QKOOO5:c*+..&=c([6wSOP<[[[}[[IIIPPP3_46OwOP5[:(_(11[KOYYO52(;*+.+%>,d[OYwOP<[1(((|}[8JSYO<}(;=@..%=;(<6OwOP<2|(_(|2Q5YYYO<}(;*+..&>;_1<8YNYO%+..", "..&=90bfimpXik77eb:bbbfgillhhfc@++#>cbgqWWUUUji7ff44hpWUUqieb;%...&=-cbf4hmoqomk7khhljqWWjgbc3&..+&*-ab4khmoZomh4khhmpZWWjgbc>%..+*>3ae4;ae7hlhllkhk7khhmjWWqpfdc>@..@*,;df70bgjWUqpg477774hhlmmlik74b9%+.&=3dgqWWZp57ebadd1fiqWWqm7bc*+.+&>9dgjWWqnk7ebad1b7iqUUqi7bc*...%>cbgqWZqmh7ed0ddbgmqWWqieb;=@.+%>cbiqWWomk4bd_abegpqWUqiedc%...&=9abgjqUqqik4:bb47hpqqWqiea>...&*>-abfgiqqUWqqqqqqmllh7fbc3&.....@*,;def4hihhghijqUjifed0-#...", "..#,cdehmoZoopnlk7444e4hmVVVhk0%.@*,ceiZWUUTUZmhkkkhlnWUUqpkba*+..#,0(4hVVnZZomlhkllXoWWUoifd9*..@*3cb4hlXXZZnmhkklVVoWUWoiedc#..&*3017lVlVVVlhkhhlVVoWUWjhea3#..@=3a:7VVVVVVVhkhklVmqWWWjhba3#++&=3a:klXVVVVVlhkhlVXoUUWjgba3%...+&*9cegmnmnnmlhhhmXonmmigbc#+..%9afioWUWpikkllVlllVmmVVVVkea*..&,cbioWWZnVke1bdbf7pqUUZj4ea>+.@$>cbiZZWZnVk4|bdbfkmZWUqmhba$+..%3cbioWWZnV+.%;)FzAHGGCCCCtyttBBCGvLvvAs^)=++#;)/ztHHGBCCAAxxxtACGDLvGts/)*..#;)/stHHHCCCAAAxytBHvDEDGAz/'*...+#>;_2rsyGDEvGBAHvDLGAys[{'=+.+=)/stLLELGAtACCCCBCBCCBCBCBs/,++*!{rtvLLDGCts^/^^zsHEEEEvxz]-@.@>'{zyvLLvvCtz^//rzxHvEEDGyr{-+..*!{KtGvLGHCtzr/FrsyGDEEEGyz];%.+=!{rtvDvGHBxs^/^rsyHvEEDHxr]-...%>;(^sACHGCHCAysstACCHHHHxr(>...%,;)/zytCBHHAyyyyAAACBCCCBsF-....+*-~]rytBBGvvDLEEEELHtxz/);&..", ".+$;]ryHLLEEEELGCBtxszsxABCCBy]#+&>']ryCCCCHGCBCCCABAHLLELAsr{=+.+>)/zAHLvvHCtszzzssAABHGHCAz{-+.%;)/sAGLvGHCxyzzzssxACHHHBxz]>++%;{/sAGDLGCBtsszssxxCCHHCAyr{=+.&;{/sHvLLGCAAszzzsyABBHHCAyr(>++*;]rsHGLLCCAAsszzsxAAHHHCtyr)=...+#=;~]^zsAGLLGHCHDLLvAsr/{;$..+>_/KAvLLvHyABACACBABCCCCCCAs]-@+=!FryCCCCCAyz/]F^rstGELLHyr]-@.@=;{rxCBCCCAsz/{{FrstGLLLtsr],+.+$;]ryCCCCBAyzF]]FrstLLEGHyr];%+@$!]zACHCCCByr/FF/KsALLLLtsr{=+..&=;)FzyCBCBCCBtyxyCCBCCCAs^)=+.+#,')/zsABCBAyssszsyBACCCCAy^-@...+#-)]zsACCCHLLLEuEEGHByz/{;*..", "..%,!1[IONNNNNwJKQ/FF{]/^QrIr[~%+@*-!]QKKJsPKKKKKKr[QPwNwOP}(;*...*-(}PwNwwI[/:()(]{2QKKKKIr}_=+.@,;(}PwwwJI[F]()({]2QKKKKKQF_=..@>'1[6wNwJK^F]{){)F}QKKKKIQF~*++&-!|Q6wwwJI^F]()({]2QKKKKI^]'*..%-!:QJwNwJI^F])))(][IKKKKI/1'*....@%=,;~1}+++*=;([KKJKI^}|~;;'(2;1^IKJrI/:{';;'(25wNwOP}|!>@..%-;|[KKKKQ/}('!!~{25wwwOK2(;*....&$-;(F/^IPJJKI/^IJJJKI^2]~-#...@*,;)F2^IKKr[2]:F:/QrIKKzI^{=+...+%*-!]F/rKKJwwwwNwNOPI/2{~-&..", ".+%=;(1<6SSNNYJ5[221__(|}[[[Q[!&+@#=c_}QQIIIIKIPP5Q[[5OSS8<|_-%..+%-0:5YSS6[:('!';;_(2[QIIQ[2(>+.@=9_15OwY6[1(!;;;'~(}[QIQQ[}~>+.&=;_ePRNS6[1(_!;;;~(}[QIIQ[1~=+.&=;(}6RNR8[:__'';!_12QQIIQ[1~$+.&,c(46SNY5[1(~;;;;_(}QQIQQ[:;*.....@#=,3!125OwYOO6OY8<1(~;-*&...%-01c_}QIIQ[}(~---;_1QOSSO<1_3*@..&,9(}QIQQ[1(~---;~{+.@$cdfiqWqpgba9-9-90ae7hkhh7fd=+.&=cdfpqWqpfb_c-3-30de7khkhkfa=..&,cbfjqWqifba;3-33cde7khhhkf0$+.@,cbgpqWqifd0;9--3cde47hkk7ea*.....@#*,9cbfhioqWUqjpigba0->*&..+%3abgjWWqi7f7hlh74ff74hkhh4e0*.+&=3afkhlk7edac,--9dgjWWqieac#...%=9afkhhh7eda3-,9;bgjWWqgea3%...%=cdfhhhh4:b03,>9abgqqWjgbac*@.+&,0d4hhhh4edc3,,-0bijWWjiba3#....@%#=3aab7ioqmi4hioqpgeda9,#+...@#*9abe4hhhkfbbbdbb47khhhkfd>.....%*3cdb47hhlhhg7gimpjjjpgd3%..", "..#,cbflnWWWoXlh4ee1bbb4kklllka&.@*30|7lXVVVVVnZonmhhXZUWZifdc%...$0d4pZWWjhbac33,39deklllllkb,+.&,cbgpWWWphba99>,-c(ekkllllkb,+.&,ab7pWWZj7ba99>-99beklllVl7b>+.%30egnWWWp7b~93-,3cb4kkllVh7d>+.#9aegoWUZpfdc9,3,9adekklVll4d>+....&*>30d14hmnWTUUoXVk4bac3*&...$9demoUUZphkklVll[4kklllllh40*+.&=cd4lVVVh4e0;339abhoZWqm7dc*+.+%,;b4lVVVk41ac39cabioWWqmfdc*...%3cb4VVllk71ac3-caeiZUWZm7d9=+..#3cb7VVllh4|dc-39abiZWWoifd3%....+@*>-0db4poZnVllmoZohedc9=#....@*=;a14klVVlk42ee44klllVll7b,+...+&=-ab4kkVVVl744..@-{rsHLELvyr]);;;~)/ztAABBCtr'@.%;]/yHDEEGyKF)!;;'{^stCCCBBx^;&+*!FIxvEEEGyrF_';;~{^stCCCCBy/;@+*_FKxDEEvtJ^]_!;;~]^sACBBCAy/;@+*~FzAvELLHK^(~;;;~]rstCCCCAs/-@...+*-;)FrsxBHGEEEEGGHAsr/{~-*...>)/zAEEEEGCCBCCCAyxxACCCCCts]-++*;{FsBBCCAyz/(~)(/rxDEEvtJ^(-+.@$;{^sBCBCCyzF{'){/zyvEEvHs^{=+..*;{rxBCCCAtz/(~~)FzADEEDts^)-&.+$!]rxBCCBByz/(~~)2zAEEEvtK^)=....+@#=-']^ztDvGGGGGDDHxIF);>#....#-;)/zxACHHHBtyyyxAAHHBCCAsF-+...+*3~FrytACCCAxssxAHHLELvtKF-+.", ".+%-~{rsACCCCBtyzrr^^^zsBCACBx]#@&>!]ryCCCCCBCBCBHCBCHLLLLAs^(=+.+-F^JtLLLvxz/)~;'~]^sACCCBBA^;&+*!]rsGLELvxz/)~;'~{/sAACBBCyr;@.*;FrsGLLuGyrF)!;')]rsBACCABx/;@.*;FryvLELHsrF)!;'){rsBBBCBBx/-+.='FKxGLLLAsrF)!;!)]ryBBACCBx/;&..+%=-~]/zxBGvvGvHvGvvCxsr/);*+.+=)}stLuELGCACCBABxyABBBCCCBsF,++*;)^sBCCCBxz^])){/KAGLLLBs/{=+.@=;{/xBCCCByz/])){/KtvLLLts/(>+.+$!{ryBCCCBxz/])){/KtLLLuAs^{-&++>!]ryCCCCtxrF{)){/KAvLLLAzF)>+.....@*-')]KyBGGLELLGHts/{'->%+..+&,;)/zyBHGLGCBCBBCCGGLvGCyzF-+...+*;~]zsBBBCCAysssxxCGLEDHsF-@.", "..@=-;(2IKJKKr^FF()))(]}rIrKr['%+@*-!]/KKJKKIrIKKPKPJwwNww52(;#..+=;([8SNwO<11~;--;!)/rzzKzI^],++&,'([6wNw8Q})';-;;'{/rKzzKr/(>+.&>!1[6wNw6Q1(';--;']/rKzKzr/)=+.&,!1<6wNY8Q|);;--;~]/IzKzKr/(>++%-_:;)/IKzK^/](~;;!(2!{/KKKK^/|)';;!(}PONwOI2_,%......+@*=-'(}IPOwNNSJ<[]_;=*%@...+@*,;):/QJwwwJJzzKsJwwwwJI[{-*.....&>-~]FQrIKr^F:F:F[KOwww<2_=..", "..@*=-~|[IIIQ[2:__~;!_1}[QQ[Q};@.@#=c(2QIP5Q[[[[[QIIJOwNS6<:_-%...*;_:5RSR8[:(~;;-;~(}[QIIQ[2~>+.@=c_15YSM821~!;;;;~(}QQIQQ[1'$+.&>cd}8RSY6[1(!;-;;_(}QQIQQ[:!*+.&=c_28YSR6[|(';-;;_1}QIIQQ[:'$+.&-;(48RRY5}1~!;-;!_|}QIIIQ[|!*+...@#>-'(|[#...#-~1-~:[IQQ[}(('!;'_:[OSSO<{~-%+..&>;_}QI0bgpqWqigbbaaa0ad:7hilk77d9%...+&*,;ab7gijqoihhimqjpi7fba>#...%-cbgjqWqomlh774eee4hillkhfd3&..&=3abkhhh74bbdaaabbijWUqiba3%...&>9a:7hhh7ebbaaaadfgjWWqiba3%...@=3abkhhk7eeddaaabfgoWWjiba-%...%=3aekhhk7f:daaaabeiqWWjgba-&........@*=-caegpUUUjieba9,$%&+....@#=;abfgpqWWomllhlmpqqopfba,%....@*=3cdee7hh<7ebbbefgjZWqgfc$..", ".+%>30d4mnonmlk74ee:e47hmnXmhe9@.+$3abhnnnplhk774klVXoUTUqifdc*...$9abinoZnVk74e:1e47lpXoml7ea*+.@=9afioZonlk44e1e24khnnnmh7ba$..&=3dfioZoXVk7e:e1e47lpnnmh7ba*+.@=9afmnooXlk4ee:eeekinonmh4bc*..%,3dfmoqonlk4e:1eef7lXnnmh4dc#...+*=3afimXnonnlkkhmnonmmmgbc*+..&,0bgpZZZoooml9_ehIVlll74eee:f7mqWWqifc3#...&=c_ekVVllhkeee1efhmqWWoifa3%........@$>9a(e7pWUUqi7:d03**%@....%=9ab4klpWWZonXVVVVXmpigfac,&...&#=30(4[lllVl+.", ".+*;~]^svvELGHBtyysxxABvDEDHxz~%@&,!]zxDvvDHCAxyxxBCGDEEEEts[)=..+=!:rxHCHHCCAtyyxxAAHDDLvts/_>+.&-~]rxHvHHCCAAyxyxAAGvDvvAs/_>+.#-~|IxHCHBHCBAxyxyAAvDLvvtz/)=+.%-'FzyBGCHBCAyxxxttBGvvDGtz^)*..&9~FztHHHBCCAyyxxAtHGDLDHxKF'*..+%-;{ryvvvvGHtysssxCHGvvGGK],+.+*c)/sAHGGGLvvHAAAAAHGvDDtyrF;$..%,~]rxACCCCAAyssxyAGDEEGtK/~=+..%-'FzyACCBCAyxsxxtAGEEEEtIF~>...%-)FzyCCCBCAtysyyAAHDEEvyI{;$+.+#-)/zyCCCCBAxsssytBGDEEvyI{'$.......@*-!)FrsAGuEELAxz^]~;,*%...+>!{/syAHGEELGBCCBCCByssQF)!,%...%>;~FzxtCCCBCCBBBCCAvDEEvGKF-+.", "..*;)FzxvLELLCCCBBABBCHvLvvGs^~&+%-']IADLLGvCByyyABCHvEEEuAsF)>+..$;(/stCBCCCCCABBCCCGvLGGyz/)=+.@>!{rsABCBCCCABBACCHGvLvGxzF~$++@>;)/ztCCCCCCABBBBCHvvLvHyzF'*..@>'{ryBCBCCCCABBCCCCHvDvHsz];*+.&,;]rtACCCCCCCBBCCCCGLvGtsr]!*...+$!{/JGDvHAxszrrzsytHGvDAK{=+..*;)^sBCBCvDLGCCCCCCGLLLLAs/{;%+.@>;]^sAABBCCCABABCCHGGLDyr]'>+.+&>;{rsBBBCCCBAxACCCGvLLDyr{!$+..%,!]ryAAACCCBBABACCHvLLvxr);*+..%-']rxAACBCCCABABCBGvLLGxr{;*.......%>;~]/stHLLEELHAsrF);-,#@..+=;]/sBCCvLLLHCCCBBAxsrF{)!-$+...#-;)FzyCCBCCCCCCBBCCvLELDts/-@.", ".+&>;(:+.@=-~15wNNNwJKIFF/^IPwwNNY52(;%...&$-~1F[^QKKKJPJPJJJJP6P<}(!-#...@$-~]2^QrKKKJJPJPJJOP6P<2(!>&..+&*-'(F[^QrKKKJJJPJJ868P<:(;>&...#>;)]2^QrKKJJJKJPJJPP65Q:_;>@..+#=;~F}^QrKKKJPJKJJJJJ6PQ:_;,&...+&=;_}[5<<[2{_'~~)]}[<5<4(;*...&>;)2rKKJJJJJJJJJJJJO685[:);=+...&=-)]F^QKJJJJPJ6JJJJJJP[_;-&...@*=-)]/^IKJJJJPPJJJOOJ6P[(;>&...+%=-)]/^IKJJJJPJJJJJJJJK[_;=%...+*=;)]/^KJJJJJPJJJOJJJ8K}_->&.......#>-;~:QIJwNwNNOPQ}(~;,*@....*-~]QPJJwNwwJKKrQ/2{~~;-==*@....&*-!([IJJwwwJJKrKKJJwNNwO5:_$..", "..%=;(2-!(|:}QKPOOYYYYY65Q[2(;-*@...@*=-;(_:2QKPOOOYYOO6<[}|_;-#+..+@$=-!((1}QKPOYYYYYO5Q[}(~9-#+...@*>-'((12QIKOwOMYY86<[2(_;>#+....@#>3a(1:((';;->--c'(111_c-#+..&*,'([QIIPK6OYSYSYYO8<[2|~-=%+...&*=-'(([5OwYYYRSRYO6<<[|~-=&....&*,-'_|}POYYRMRYYY8P<<41'-#+...+%*,-'(:[6OwYYYRRYYO6<<4|;,>@...+&*=;~(|[6wYSRRRRRROP<<}('-#+......+&,;~(158MRNNNNMY5}|_;-*@...+%-_:0b7ioWUUUUUUWWWUTUqpg7ed0,%..+*-cbiqWUUUWjgeb1e4hmqWWjgba-%....&$,90_(e7hmqWUUUWqmhfbd09*%+....&*,90_be4hmZUUUWWWph4fd09=%+....%*,-0a1e7lpZWUUUWqigbbdc3=%....+%*,9a_bekhpWWUUUUqigfba0-$&....+%>=9cdbehinqUUUUWqmgffdc3*%.....@%*,;00aa;3,>>$==,30caa03=%...&*,cbf7hhmmnoWUUWWqoi47bd9-#@....@#>>9adfioWWWUUUUWjmh4fd0,$&....@#>,;abfpqWWUUUWWWjihffac=#.....&*=-9abepqUUUUUUWWjih4fac=$&....&*$-9abgpqWUUUUUUqjik7fa3=%.......+#,cabfiqWTTUUTTWjgeda-=@...@#,0fiqWUUUWjmk4eba;3==$#&@......@*-;bijWUUUWqph7hpqWUWWWjgb3%..", "..%,0ekmoWWUUTUUTUUUUTWph4edc>%..@#30fiZWWUUWoifebf7hnZWWqibc>%....+%=-0adekVpZUUUUWZph4edc->&....+&$=-0adehVnZWUUUWZjh7eb09>#.....@*=39abfhVnZUUUUWZmh4bdc,=&....+&*,90ab4kXnZUUUUUZm7f1d9,=%.....@*,-0d14kVoZWUUUWZmh4edc,=&....+@#$,9c00c9>=*$$$$,,900093*&...&>>017llVXnXZWUUUWWomh4edc,$@....+%*--cdfpZWWUWUUUWZmhkebc,*&....@&*,30d7pZWUUUUUUWomkked9=%+....@%$=9cdgmWWUUUWUUUomh4ed9>#+....@#*39cb7oZUUUUUUUWoVh7ed9=&.......@*3cde7pZWUUUUUUUoiebac=&...@>9aepZWUUUWZVlk4ba3>$$%@........@*,cbiZWUWUWZphhlpWUWUUWqgd3#..", ".+*;{rsAGLLvLLEELELELEvtxKrF)3*.+&>;(/yDvELEvvyz^^rsxHvLDGs[);*....+%=-!)]rsAHDDELEDDtsI/F_;-#.....@=-;!)FrstHGLELLLvHxzr/);>#.....+*-;!)FrxAHGLDEELGtJr/]_;>%....+&$-;~)FzsBHDLEDLvvtsr/{~;$&.....@$-!)F/zyAGGLLELDDAsz^F~->&....+&#=-;''';-->=***>,3;!!~;;>%...%>;)^sBCCCCHHLLLLLLHtsz/]'-=@....@%$-'_]rxDLLvLLLELHAtszF~-$&....@%$3;(FKALLLEELLLLGBxsrF~;*+....@#>-')FzADLELLLLDDGBAsz]~-$+....@#>;')FKADLLvLLEELGAysr]',$.......&=;~F^sAvLLELLELvHxz/]);%...@,;{rxDELLLDGtAszF);-$#@+.......+%>;_/sGvLLLDGHttAADDLLLDHK:-#..", ".+*;~FrsxBABBBBAHABBBtwsrF])',&..+*;):rsAttAtsz/]]F/rsytxs^{',&.....+%=;!)FrzsyAAAAtxsr/{)!-=&+....+&$-;!)]/zsABABtAysr/])',$@......+#>;;)F^zsAABBAAsz^F{';,%+......+#=;')FrzsABAAtAyz/F{~;,%+.....+@$-'){FrzsABBAtAysrF{)',%+......+&#--;;--$%%&&##=>--;;->#+...@=;'/zytAtytBCBBBAtyz/F{~;,#+.....+#=;!(FKyABBBBBtAysr/]);,#+.....+#>;;(/zyABAHBBBAxsr/F)!,%+.....+%-;!{2zxAABBBBBxyzr/])-*&......@%>;'{^zAABBBBABxyzr/]);,&+......@#,;)]/KytBAABAtysr/{);>%...@$;)1ryAABAtssr/])!->#+..........@$-'{rsAABBAyszzzsxAAAyxz/)-&..", "..@#=-;~)({|{|11:1|((()a!;-,*&+...@*,-!_(((((_!;---;;~_(_~;-=#+.......@*=-;'~)((1(((_~;;->=&@........@&*=--;'~)((((((_!;-,=%+........+@*=,-;'_((((((_!;--=*&+.........+%=,-;~)(({(((__!-->*%.........+%*,--'~_((((((_~!--=*&.........++&&&%&@@++..+.@&#$***%@....+&>-']FFFF{){{{{{(((~;;->$&+........@#$,-!_({({({((__';--$&+.......+@#=,;!_(((11{_()_!--=#%+........@*=-;'()(({{{1))~!;-,*@........+&*=,;~(((1111((_~;;-=%@........+&#*=--!)({|{(1(((!;-,*%+...+@#,;!_((((((~!;--=#&+...........+&*=-;_()(|(((_~__)((((~0-=%...", "...@#*=--------;;;-99---,**%&+....+%*=>,--,3--,==***=,,-,>**&+.........+%#*=>--;;3---,=**%@++.........+@%*>>>------,,,,**#&............+#*=>,-,-----,>**#%++...........@%#$>>,---9,-->>**&+............@%*>>,------>-,>=*#&+.........................++++++.......@%=-!___!;--->---,--=**#&@..........+&#>>,,--------,>>*%&@..........@@*$>>--------,,>=*%+..........+@%**,-----;----=>$$#&..........+@&%>,>----;9---==**%&...........+&#*==-3-----3-,,=*#%......+&*$>=-----,->**#&&..............+%**>>---------,3----,==*#@...", "....+%#*$*>*>,>>,,==>$$***#%@.......&%*$$=$**$$######***$$%&@...........+&%***>=>>=$>$*&&@+.............@&#**$>>$>==$$$*&@+.............@&%##$*>>>$>*$*&@+..............@&#**$$**>*$=**&@+.............+&&%**$>$>$>$***%&@.........................................@*=39333,>=,=*$==$$*&&&+............+@&#$*>*=$$$$*=**#&+.............&*$$$>**$>>>**$*%@..............&%*$$====,>*>***%&+............@@%*$$=>>=-=*>**#%@.............@%#$***,*,$$*$$*#&@+........@%*$$>$$>*=$*&@.................@%%#***$>$=$>>**=$*$=*$%@....", "......@&*$*$***********%%@++.........@@%*#****%&@&&@&%&%%#&+..............+@#*##$***%*&+.................+++&##%**##**%++..................+%#$****%*#@+.................+@&%$$$$*$*##+..................+@@%%#*****$*%%@..........................................+@**>>,=$>$$***##**%&+................@&#***$=****#&@++..............+&##*****###$*%&@@..............+@%**##*$#**##&@@...............+&%#*#***%$$%$#@@+.............++@%#$$**$=*$*%&@@+..........+&%*%**%*#%@+...................+@&#*$*****#*$*****##&@.....", ".......+@%&%%%%**##%%&@................+&&%%%&@+..+..+.+@&@.................&%%&%%%%&@+...................+.+@%%&%%&&%&.....................+@#####%%@+...................+@@%######%%+.....................&&%%&%&&%%&&+...........................................+%*$$*%%%%**#%%%%&@+..................+&%#%%*%%#&@+...................@%&#**%%%&%%&+.................@&&%&%&%%%%&&+...................+&%%%##&&#&&&+................++&&&&%&#%*##@...............+@#%%#%&#&+......................+&&&%&%&%&&%%&%&#%%&+.....", "..............+.+........................+...................................+.+................................++++++......................................................+@&&&&&&@...........................+.+...................................................++++++.++++++..+......................++++.++.........................+.++++..........................++..............................++.......+.......................+.+.+.......................+..+............................+.+.++++..+.+..........", ".............................................................................................................................................................................++++++++........................................................................................................................................................................................................................+..................................................................................................................", "...........................................................................................................................................................................+@@@@&&@&+.......................................................................................................................................................................................................................+++.................................................................................................................", ".........+@@@@@++.................................+@+@+........................+@++........................................................................................+@%####%%&+...................................................................................+++@+@+..................................+@@@@++....................+@@@++++....................................................++@@+++.................................+@++@++.........................+@+............................................", "........+&%##**#&@+...........................+@&%%**%%@...................+@%%*#*#&+.....................................................................................+%$*,,>,=>$%@.................................................................................@%##**#*%+..............................+&####%##&+.................+@***$*#&@+.................................................@&*#*$#%@+..............................@&#****%%+.................+@&%#%**%@...........................................", "........&=--;;;;-$#&+.......................+@#=--;;;;,$&+...............+%=--;!;;;>$%@...................+&#******%%&@..................................................+#-;'~{){)!;=#+..............................................................................+%=--;;;;--*&+..........................@%*=-;;';--$#@..............+&==-';';;>##@..............................................+&=>-;;;;-$#@...........................@&*>-;;;;--*@..............+@#=-;;;;;-=%+.........................................", ".......%$-;!)]])!-,=#@....................+&#*-;;~)]]);>*@..............+%>>;')]]]~;,*&................+&&#$$-------->*%+.................+@@&&&@+..++...................%=;'{F/^//]~-$#+.............................................................................@*,-!~{])!;-=&.........................+&*=-;)]])~;-=#@.............@*,;~)]]]~;-*#&................+@&@@@@@+@@@.................&$>;!)]{);-=$+.........................&*$--~)]{~!->$&............+%==-;){]{)'-$%+.................+@@@@@@@&&@+...........", "......+&#=-;!)(~;,=$%@+...................+&#*=--;~)~;-*%@..............@%$=-!){_)'->*&................@%%#>=->>,,,,->=#&+..............@@@&&&&&@@@@@@+.................+%*-;)(F[F});,*%+............................................................................+&*>-;!)();,=$%+........................@&#*,-'))';-=$#@............+&*$-;')_)'-=$%@..............@@&@&&&&@@@@@&++..............+%$=-;~_)!-=**@.........................@%$>-;)))';-**&+...........+&*=,-~)))!;>*%@................++&&&&&&&&&&@+..........", ".....++%*$-;_((_;->*#&+..................+%#*$>;!~~((',$#+.............+&$=-;~~(1(!-=*%+..............+@#*>,-;;;-;;-;-,=*#@............+@&%#%%%&&&%&&&@@................@%*,;_1}}[1(;->*&............................................................................+&#$>;'((_;-,=#&+......................+&#$>-;_((_;->*&+............@%*=-;((1(~;-**&+............++&%%#&%&&&&&%&%@@+............+%*>-!(11~;->*#+.......................+&#*=-'~|(~-,>#%+..........+@%$>-;_(|(~;,$#%+..............+@&&##%&%%%%%%&@+........", "......@%*>-cdbbda;9,$#@+................+@%$>-cadbbb_a-*#@............@%#$,;adbeebdc9=*@.............+&%$=,9cdddadaaa0;3=$%+..........+@%$$$=**$$#$$##%@+...............@#>3cdb4774ba3>$#+...........................................................................@%*>,;0beba!93=%&+.....................@#*=-;abbbd!3>*&.............&#>,;abeebd0;>*#&...........+%%#$***$###$#*###%@+...........@%*>-cbbeda;9,*%.......................@*>>-cabbb_c-*#%+..........+%*=-;0bbebbc9>*#&.............+&%#$$$$*####*$$#&+.......", "......@#>=cae[k4ee(ac=$&................+%=,3'be4444ea9>*&............@%*-ade47kkke(a9=*&............&*,30~bf7ggkgg74ebac=$#+.......+@%=,3ccc93=,33cc3=#@...............@*,cd47kkk74bac=*@...........................................................................@%$>90b4444e{ac3*%@...................&*=30db14k4ea93$&............&*>3ab47kkk4eda3=*&.........+%*>-cc093,,,3cc-3=*$&+..........+#$,ca:474eeda9$%....................+%*>9aa|e4k4ba9>*&@.........+%*>9d:27kkk41d93$%@...........+%*,39c'c3-,,-c99=#@+......", "......@*-;)FzxCAAAsz]~-=%+............+%*>;~]rsACBAsrF'-,#+..........@$-;)/sACBABAAsr]!-=@..........&=-~]/zstGvvvvGHAAsr]~;=%......@#=-;){/^rF{)){F//{;-$@............+&$-']ryBCCAyszr]!>#+............+&&&&&&%@@@&&&&&%@+.................+@&%%%%&%&&&%@+...........@#-;~{^xABAxyz/);-#%+...............+&=-~{/zyyAAAs/);-#..........+%=-']rstBBCCAAs^);-$@......+@#-;~{F/r/])))]/^F)~;-$%+.........@=-;)]zxCAAxsr]!-#.................+&*,;~]rzyABByr{~->*@........+%>;!]rxBCCBBAsr]~-,#+.........&*-;)]F/^^{)))]//F~-$&+.....", "......&*,;~FzyACBBts/);-*@............&#=-!]/zACBBtsr]~;=#+.........@#>-']rxBBCCCCAxrF~;=#+........+%=;)/zsAHvDLDLDvCCyz/);,%+.....@*,;)]/rzzrF]]FrzrF~-=%+...........@#>-)/zxBABAyyzrF~-$&.........+&##$$>>>$*$$$*>$$$**%+............+@###*====>,=>>$**&@@.........+#>-!)rsBACBAyr]~-,*#@..............&*-;)FzxyBABtz/);-%+.........+#=;)]zyBCBCBCCxz]~;,%+.....+*>-'{F/zzr/F]F/zz^])!;-$&.........&#-;~FzyBCAByzF)-$%................@*>-!)/zytBBAsr{'-$&+........&=-;)/sBCCCBCAyz/);,#@........+#,-~)F^zsz^F]F/rz/);>*+.....", "......&%$=-!{/^rrr//(;,=*@...........+&#=,-~{F/rKr^F(~->$@.........+&#=,;~]/rKKrIrr/1);>#&+.........&*-!):[QP8JOOOJJKI/])!,*@......+%*-;'(]F}F{_){{F]);>*@+...........@#=,;)F/r^r/^FF|~->%@........++&#*****=$*##$***=$***%@+..........&&%**>>>>=>>=*=$*$#@@.........+&*>-;)F^rrrr[]);-=#%&+............@#*,-!)F/rrrQ/]';=*&..........@#*,;)F/rIKzIrr/F);-$%+.....+#*,-!){F}F|_({{FF{)';,>#%+........+&$>-~]F^rrr/F~;>*&................&$=,;~{F/rr^/F~->#&.........@%*=-!(/QrKrIrI/F);-$#+.........@*=-;')]FF]_((]F1);=*&+.....", "......@%#>,;_(2}[Q[}(;->#&+.........+@%#$,;~_:2[[21_~-,*%&.........+&$>-;_(2[[[[[[[}:_-=$&+.........&$=;(:1[[<<*@.......&*=;'(_:1:|(|(:1_!-*#%+...........+%$=;~1}2[[Q[}(~;-*#@........@%#*$,>,,>,,===>,,>,,>=**%+.......+@&#*$>=,,--,-,->,>=*$&+.........@#=-;_(:2[Q[[1~!;>*#&+...........&**=-;~(}[[[2}|~;,>*&.........+&#>,;_}[[[[[[[[2|~!-,*&.....+%$,-;~_|}::(((|111(~;-=*%+........+@#=-'~112[[}|_-,$&...............+&*>-;~|}[[[:|~;,*#+.........+&$,;'(1[[[[[[21|~->*@..........@*>-;_(|::|1((_|(_->#&......", "......&#*=-cdb:e7hk4ba;,*%@..........@$*,-0d:f4474eda9,$#@.........+&*-;0dbe474f4e74eb0,>#@........+&$,;def4747khhhk4fbd;>$#@......@#=-cabbeeeeee1eeba;>$%+..........+&*>-cab44*#+.....+&##$>,3cccc;c00;09cc3=*%@........&%$$-;ad1f4kk7fbac9=>*&+........+&%*>,;abb47=%+.......+&$*,90bf74444477f:bac9=&.....@%$,90abbeebbbb:febbaa9>*%@........+&$=-0d1ee774edc,*%...............@%*-cabe4<74bd0->%&+.........@%$,;0be4744ff4eba3>*&.........+@#=-cabeefeeeebeda;=*@......", "....+&%=>c'dbe43cadb(bbddddd(b(bbd(ac9=#.....&**,39c_dbb:b1b:b(bbda03>#+......&*$=3cd1eekhlVhk4:dac3>$%.......@#*,3;a_b}kklllh4e1dac3=%.......@*=,3a(4hIlhkkk*@........@%*,ca|e4#+.............&*>3;db2klllkedc3=$&..........@%=3~be7klhkkkk4e(03*&.........+%*>9abe4kkk77744ed9,$&......", "....&=,;)]^zsxtBCCHAAsr]);-$&......@*-~{/rsxACACCBtxr/{;--%+......+*-!{rzyACCCABCCCAts/{!-$&......@#,;{^sACCBCCCCHGBCAsrF~;,*+....%,;)FrssAACHBBCCCAxz/);-#+.......+%-;!{/rstCCCHCBAxz/{~->%+....+$-!{/zsssssszszssssssssz^]'>@...%>-')]F/zzssyyxsxyssssz/{!,&.....&$-;~]/rsyyCCHBCBAyzr/]);-%.....@*-;~{F^zsAACHCCAAxsz^]);-%.....@*-;)]/zyACACABHCBBAszrF);%...+*;']/zsyBBBABABBCBxyzz/]'-*+......@*,;~{^zytACBCxzF);=&............&$;'{FrsxtCBAAz/);-$@..........#,;)FrstBCABBBBys/{;-%.........&*-!)FrstCCCCBByxz^);-%......", "...@%=-)]rsyBGvGLGLHCAs/{!-,#+....+%-;]/zsAHvGLvGHCByrF);-$%+.....&=-)FzyBBGGLLGvHCCBy^{'->*&.....@=-;{/xtCCCGLLvLGHCCxz]);,*&....&-;)/zyBCCvvGLGCCCAz/);-$&.......@$-;]/zyACvvLvLvCByzF)!-=#@...&=;)/sAHGGHHAAAAABHGGGGHAxr];#..+%-;)FrzstCHGHGGGGGHGGGts/);*....+#=;~]/zytBGGvGvvGHCtxzr/);$+...@#=;']rzstCGvGLLvGGHAyszF);*....@#,;)FrsACGvGLvLGvvGCBys/{;*+..%>;)FrxyBCGvvLGLGHHCAAsrF~-=%......&*-~)/rxGGLvvGHs/);>#...........@*,;)FzyHGvLLGHs^{!-#@..........%-'{/zxBGGLLLGHxz/);=#+........&=-']/zxBGGvGvHAyz/);>#+.....", "..+@%*,;{}QKJwNwNNNwJKr:);-$%+....+&=-)][QKwwNNNNwJKI/_;->*&+.....&*>;(/QIJwwNNNwwwKr[{'-=*&@......&*=;)/IrKwwNwNNNwJK/}~;,$#&...+@*-'{/IKJwwNNNwwJJr[('->*&......+@*=-'][IKJwNwNNwwKI/('-=$%+...@=-_}POwwNNwJJzKJJwwNNwwJI[{;%..@%>-~|F^IPwwwwwNNwNwwNNY5}~-#....+#*-;(F[IPwwNNwNwNwwPI/}]~-%....@#*-!)}/IPwwwNwNNNwwJKQ/1'-#....@%=-;1/QIJwwwNwNNNwwJKI^]'-%...%*>;(FQIPwwwNNNNNwwJKI^});-*@......@#>;!(25wwNNNw6[_-=*@...........@#=-!(2IOwNNNwJ[|'-=&..........+@*-!)1QPwNNwNwJQ1~-=#&.........@%>-'(:[6wNNNNwP[|~->$&......", "...@&$=;(}[<8OSSwSSOOPQ}(;-=$&.....%=3~1}Q5OYSwwSwOP<[(!-=$#+.....@*=;_}[Q5OSwSNSOOPQ[|~;-$#@.....+@*>-_:[QI6YSNNwYO6KQ:(;-=*@....@$>;(}[<8OSSNSSYOP<}(~-=$&.......@%=-_1}Q5OOSwSSYO6<[1';-*%@...@*-015OwRNSYO8KPPOOwYMRY65[:;*..@*,9_1[Q<6YSSRRMRSSSNNNY51~-%+...@*>-'1}[<6OYNNNwSwYOP53!:}[<6OwSSNwwSSOP<<[:~;$+...@$>-~1}#&...........+&>-;_|<8YNNNM64~-=$&...........@*=-;(15OSNNNR52(;-$@+.........+%*-'_(}5OSNNNR5}_;-*&++.....", "...@#*,;de47iipppmpmppmgbd0-*&....+%=;a:7hhipppppmpppied0;=*@....+&$>cae4hiipppjjpppmgfda3>*@......@%>30|f7h5ppppjpmppi7bd;3*&....@*>cde4hipppppppjppheda3=#+......@%=-ae44hippppppjnmifba;,*@...@*3cbgippjjjoqqqjXppppppppmga$+.@*-afgppppjjjppippjqUTTqjed9*....@*=9dgijjjopjppijjpompppgfc=+...&*-0dgijppjjpjipijjjXppigbc=+..+@*,!bgipjojjjjpijjojopppgb0=...%>9afippjojppippjjojjjpied9,&......+&#>9cdfipqqTWjgd9>#&...........+&*-30dfimqWTWjgac,*&...........@#$-90deijqUUqjea9,$@...........&%=-0abgijqUUqpba;,*&.......", "...&%>3a14klll5hilhmooomked03*@...+#-0bekkllhh5ihmXZomhe|ac>&.....%*,cb4kcd:47khhhhhilXoZXi7edc,&...+@>3a17kh5h5hihimoZom7eda9*&+.....&*>c(4kll5hhh5hmnooph4bdc=&..+&=3ab7lVVVXmqWUWWnmlhhhmmoqib>+.%,0bgpqZZomlggf4ghVjUTTTjgb0$+..+%*90bioZWqnmmhihhVVXZZWZngb3%..+%,9dfpoWZoXm5hhghhVnoZWZpgd3#..+%=3afmqZWonm5hghhlmnoZWqngb,@.+%3afioZWZnm6ihghlmnoWWWoiea3#.......@*=-9abfgjWUWqgb03=&............@*$,cabegpWUUjgbc3*&...........+&*,,0abfijWUWjgb;=*&...........@%$=3;abfipWUWjgb9,$&.......", "..+#,;~]zyAACCCBBABBDDvHxsr/~-%..+#-'FryBACCBBtBBBGvDGAyz/{;-@....*-'{rsACCCABABAHHLDvtyz/{;>&....&#-;{/zxtBCABBtABGDLDAxzr]!-@..+%-)/zyABCBAABBBAvEvGtszF);$&...+&=-!]rsACCCBBABBAGLDGAyz^]'>@..#-~FrxBCCCCCDEEEEGABBBBCvEEwQ-&+*!]zADEELGCAsI^rzsAHuuEuuV/{,+..@=3~FKtEEELvCAAyxABBGDEEEvAr(=++#-!{/sGEEELHCtyyyyBAGDEEEvyr($+.&=3)FsHvEELGCBtyxAACCLEEEGyr'@.+=)/stEuELvHCAyxAAHGvEEEvxK]'=.......@#>3'(}rsGLEuvyI{!-$+...........@#>-'(FKsGuEuDy[{'-*@..........+%=-;!|2ryGuEEvs^{;-#...........@&=,;~|/zyvuEuGK^);-#.......", "..+*>;)/ztBCABCCABBBGLvGAxz/);*+..%-)]ryABBCCBBBACHLLGBss^]!-#...+*;!]ryBBBBBABBBCGLLGBys/{!-#+...&$,;(/zyBABCBABBCHGLGBAsrF~-#..+*;)FzyBBCCBCBABHvLLHAxz^);-#....%>-~]rxAABCCBBBACGLLvBxsr]!-%..%;)FryBACCCCvEEELvCBtAABGvEA^;++$)FztHLLLGAsr/FF^rsxtuvGtz/)>@..@$;)FKALELLCCBAxyyACCLLELvtz]>++*-~]rsGLEEGHCBAxxyACHLLELGtr{=..&>;_/KGLELGHCCAxyACCCGLLuGx^;&.@-)/JALEELHCCBxyxBCBvELEDAzF'$+.......@$-;~]^JtLEEvxr]'-$&...........@#*-;)F^stLLuvyr{!-=&..........+&*=-;)]QsGLEuGs^{!>#+...........+%>-;)FIsGLEDHs/{!>%.......", "...%=-;(F^QrKIKKPKPJwwwPQ}]);$&...&=-~]FrIKKKKIPIPwwwOI[F(!-*&....&=-!(//rIKKKIPI8OwwPI2F)!-=@....@&=-;)F/QrIKPKPIPOwwOP[/]_-#&..+%=;~]/QrKKKIKIPPwwMJQ[F);,*%....@*=-!(/^IrIKKIPKPOwwOI}F|'-=&..@=;_]/QrIKPJMNSNwJIIQrIIJMY81>+.%-_:-!)25wNwOQ|!->&@............@&$>-!([8www8[|!-$#@...........+%#*=-'(}6www6[(;-*%+............+%$>-!|[6wSSP}(;,$@.......", "..+&*=;_:2[Q5688Y6YRMNM5[:)!-$&..+%=-;(}[QI66OM8MMMNM6[}|(;=*&....%>-'(}[QI686M6YMRNM8[21_;=*&....@#*-;(1}[Q868R6RMRNRO52|_;-$@...#,-_|}[Q58OY8OORRNR5[:__-=#@....@%$-;(}[Q<8O6Y6YYMNM6<2|(;=*@..%,;_1}QQI66MRNNNR8KQQQ<<8MM5b=..&-!(<8SSO<}(_;;-c!_d|:21(~;-%+...#=3a15RNNOPIQQ[QQQI5ONNS8[(c*..&*-c_e5RNNOPI,-_|5MNR8e_;>$&+............+@**--a15YNR5e~->%@.......", "...&>,cdekhimqUUUTUUTTqjgfba3=&...%=;0b44iioqUUUUUTTqjgfbd0,*&...+#=3ab77imqWUUTUUTTUjgfbac>*&....+#*-0bekhipWUUUUUTTTqifbbc3$@...%>;de4himqqUUUqTTTUjgeba9=*@....@*=9ab4ghijqUUUUUTTTjgfe_0,%@..&-0be4hhmoqTTTTTUjmhkhlmjWqib>++&,0bgjWWqigbbdacaadbbefbbac-*...+#-cdfjqTTqpl5lkhhllmjUTUjgb9#..&*-0dgpqTUqpVlmlhllhmjWTUjgd;%+.@$-0dgjUTWqmll5hhlhlpqUUqpg0,+.+%3afiqTTWjVh5hhhllloqTUjiba3#.........@%*>3cfijUWjgd9-*#@.............@%$=-abiqUqjgdc-*#@.............@#*,3afiqUqpf09,$#@.............@$$,9afiqUqpea;,$%+......", "..+#=caehlmnoqWqUqUqUUqjh7ed9=&...#,0b7hmmnoqUUqUqUUUqik4b!9>%...@$9a|7lVmnqWqUqUWWUqji7e1c3>&....&*3cdehmmXoqWqUqWWWUqph7:a9=&..+*3ae7lVmXqWqWWWWWUqjh7ed;3*&...+&*-0b7kVmoqWUqWqqUUWolkf1a9>@.+*0(43cdfpqUUjiba9,*%@............&#=,caeiWUUogbc9,*&@............@*>30dgpqUWjgba9=*&+...........+&*=-abgpWUWjgb09=#@......", "..&>!{/stGGLvDDDDDDDDvDGAys^{;*..+>)/ztvLvDDDGDDDvDvvHBxsrF'-=@..%-)/sxDDDvvDDDvvvvDDGCtsr]!-#...+#-~FzyGGvLvGvDvvvvDvvHByz/)-%..@-)/stvDDLGvDDvGvvDGGCtsr{'-%...+*-)FzAvvvvDDvvDDvvDDGBtsrF~-#.@,/sABBCBCGvDEEuEELHCBCBHHvGx[;++%9)/sAGDvDvGHABBABABHGHGtAzF;+..%-~]QJvuuEEGHCBCBCCCHGGDDHyz],+.#-_FQsuuEuEvHHGHCCCCCGvDvHxr{=++*;_FKxuuEEEGBCCCCCCCHGDvvHsr!@.@-(/JGuEEEvHBCCCCHBHGGvvHAz/_>.......+%*,-~{^sGLEEvAK/)'-,*&..........+#,;~{/JtEEEvAK])'-=*@.........+@#-;~]rsGEEEvyrF);-=%+.........+&*-;~]rsGEEEGsrF);-=%+....", "..%-!FrxGLLLvCAAAxAACCBCBts^);*+.+,)^JALuEGHBtyytBACBCABszF);=&..&;{/sHGLLvHCtAyytCHCBAAsr]~-*+...*;)FKtvLLLvCBtAxAACCCCAxz/);*..+,{rsHLLLvCBAtxAACCCCAAs^{!-*+...*;)/stvLELGBAAxtBBBCCCAxzF)-%.@-FsBCCCCBCtALEEEEvBCCCCCCCAy^-@.#-~:rxBCHvvLGCCCCCCHvvDLGAs^-@..&-~]^sGEEEEvCCCCCCCBBCCBCAsr{=++&-~FrsGEEELGCCBCCCCCCCCBCtsr(>++#;)FryvuEELGCCBCCCCBCCCCCBs^'&.+,{^KvuEELvCCCCCCCCBCCCCAxz/)=+......&#=-;)]^JtLEEvAz/{~;,=*&........@#>-')F/JALELvAzF{!;-*%+.......+%*=-;)FrJtLEuvxzF{'->*@........@%*>-;)FrsGLuuGy/F)'-,*#@...", "..@>-~1[8wwwJ<^[/[/QIKKI^/F|!-%..+*;(2PwNNOKQ/[/[^IKKKrQFF(;-*@..@=;(28wNwOII[/[[[KJKK^^/1~-=%....&=;_2&.+=)}rIKKKIrQQ6SNSNOJKKKKKKKI[)$+.@#>;_F[II8OwJJJsJzKJJOwJPQF)=+..+*-!([6SNSNJJKzKKKzKKKKKKI[|!*..@*-'|46SNSwJJzKKKKIKKKKKKQ}{!%.+@*-!|7ONSNwJKKzKKzKKKKKKIQF_-+.+*;(}5NSNNwJKKzKKKzKKKKKI[]);*......+&**,-;'(2PYwwO<}(!--=*%@.......+@#=-;!)1[8YNwOQ:)!-,=*&+.......@%*=--;'|[6Mww8Q1_!-,=$%+.......@&#>--;~1[6www6[|_;--=#%@...", "..@*,0(48SSR8[}}:}2}&..*;:[QIII3!(|}Q56OJOO6PI,9~((f5MNR6[:(~;-,$*@.......@%*>-;~_1}5RNR841(!;-,*#@......+@#$,;;_(|45MNM84|(~;->>*@...", "..@*,0dgpqWqji74777hppplk74ea3#..+%3afiqWWqig77ggiijjpih7eb;3*&..&>cafiqUWqih7777gmpjph47ed0,#....&=9cbgjUUqph7777gipjjih74ba-%..+$cdgiWUqji47777gjjjmh77edc=%....&=3afiqWUqig7777hijopik74b0,&++$0ekimpppmipjTTTUqjmmhhhmmiga$...@*$>3cabf4imqWZomlhhh74ba0,#...@*=30bijjqjopmlkhhlhlmpjpied3#..+#=9abijqjoopmlklhhhlpjppied9#..+%=30bijqqojjpikhlmppojopgf0,+..%>0bgjqqqjoXmklhhlhmjjjigbc3%.....+&*>;abbbfgjqTTqigeeb~c3*%......+%*=;0abffgjqTTqigebdac9$&......+%$-cabbefijqTUji7fbba0-=@......+#*,;abbffijUTqqifeb_a;,$&...", ".+&=901gnWUWZmVVVVmnoWZoXVl7bc*+..$cbemqUUWoXVVXnnqUUoXVlked9>%+.@>0bgpZUWZnVVVVVmoUWqnVlkea,*+...#=cdfiqWWWnmVVVVXXWUWXmVk7d9#..+=0bgjWUWZXVlVVVnoUWqXllkba3#+..+#30dfmqWUWnXVVVlmoWUqnVVhed3#..=d4kXnZZWqWWUTTTUWZZnXVXnooib$+..+&*=,30(ekVnZWWZnVlhk771ac=%...@#>30b7mnXoZZoXXVVVVXnWWWjgbc%..+%$30bhVnnoZZoXXVlVVnoWUqjgb;#..@#$90bgmmXoZWZnXlXXZZWWUqp7d,+.+#,3dfinnXZZonXVXlVmoWUUqiba-#.....@#>9_e4khlmoUTTUoVlkk7:a9#+.....&*=0d:7kkVmqUTTWpVhkk4ba3#+.....@#,9de7khlmqUTTWnVlk72ba3#+.....%*9cb27khlmqUTUqnVlk74ba,%...", "..#-']rxvEEEGHCCHHHvEELGHCCxr]=+.+=(^stDEEvvHHCGGvDEEDHHCtz/),*..#;{^stEELvvHCCHGvDEEDvCCtz/'=@...#3~/ztDEELDCCBCGGDEEEGCCAy^)=..@-]rsGLEEGHCCHGHGvEELvCAAz]'=+..+*;_/zAEEELvHCHHGvDEEEvHBAs/'$+@-FsAGDLELELEEEEEEEEvGCHCGDDxe,....&=-;!)/zyBvLEEvGCBCAxz^{~-#...@$-;(^sACHLLEvGBCBCHHvEEEDJ/)*..@*-!|^sACHGvLvCCCCCCvDEEEDP^(=++&=-9_}ztCHGvLvHCHGvDEEEEEwse-+..*9_FzxCGvDLLGCCCCHHDEEEuwr{9$....+#-'{^sACBCHvEEEEGHCCAAs/);&....+$-!]rsACACGDEEEEGHCCAAs/)-&....+$-~]rxABCBGDEEEEGCCCBAs/),&....+*-']rxABCBHDEEELHCCCAAz/~>+..", "..%>'{^KAGvvHCCCCBHHGGGHBCAyr(=+.+=)FKAAHGHCCCCBCBGGGGCBBAzF~;%+.@>)FKyBGvvBCCCCBHHGGGCCCyzF'>+..+%-']QyAGvHCBCCCBHGGvGCBBAs/)$+.+-_/sxGvGHCCBCBHHGvGGCCBxr]'>@...%-~FKxHGvGBCBCBHBHGGGCCCAz/'*++>]zyBHGGvGvGvDvDvvGHHBCCCGtz{$+...+&*>;)]rstHCvGGCCBysr/]';>%...+%$;)FryAAAHGHCCCCBCCGvHvAzF;%...&$-)FzyAABHHHCBCCCCHHGGtxzF;#..@#=;']^syACHHHCCCCHGGvvGGxz{-+.+#-!)^sxABHGvHCBCCCCHvGvtJ/);*+....*-!)rsyABCBHvDvGCCABBtsr);*....+$-']rsyBCCBHvLvGCBCBBxs/);*....@$-~]rsxBACCGvLvGCBCBBts/);%....+#;~FrsyBBCCGvLvHBCCBBtsF)=+..", "..+%=-'1}QQQIKIKIKKKIIKKIrQF);*..+%>;):[[IIKKKKKKKKIIIIrQ/|!-=@+.+%>;(}[QIIIQIKKKII@......+%*>;)]2IKJJKKI/F{~;-$#@+....+&*>;~(]22QIIKKIKKKIQ[4e1d;$+...+%*,;~)]2^QKIKKKKKrQQ[72b';$+..+&#$,-'){:[QQIIIKKIIIQ4}e|_,*....%=;!)]F}[QIIKKKKIIQ442e(!-*@.....@*-;)]F^QrIIIIIIKIrr^/F_;*@.....%=,;)FF^QrIIIIIKKIzr^/])-*@.....#=-!{FFQ^KIKIIIIKIr^^/])>$+....+&=-!{F/QrIKIIIIKIrrr//]'-*...", "...@%*-9(1}[}Q[[Q[[QQQ[[Q[}(',&...@*,9_|2}[[2[Q[Q[[}[[[Q}:~->#@...+*-c_|:2[[[[[Q[Q[[}[[[}|!-=%+...+&*>3~(:}[[[QQ[QQ[[[[[[2:_;=&...&*-0(12}[[Q[Q[Q[[[[[[}}(!-*%+...+*$,9_|22[[[[[Q[Q[}}[[[}|~3*&..%,;_(}[[Q-;(1[IP6IQ[2('-=*%+........@#=--;'(:}2[[Q[[[[::(__c-#+....+&**-;;~|2[Q[[[Q[Q[}1__!->@.....+&*==-;~(:2[Q[[[QQ4:|_~;3>&....&**--;!(:}[[[[/[Q[}:(_!c-*#+.....@#=-'_|}}[QQQQQQ[Q[221_!-$@.....@%=;'_|}}QQQQQQ[Q[[}}|_;-#+.....@$=;~(:2}[QQQQQQ[Q[}}|_;-%......@#=;'((:[[QQ&+..", "...+%$-;abeef777k7777744f4ea;=%....%$30dbe477777774fff44eb'-=%+....&=30bbf47777774ffefffebc,*@.....+#$,00bff4777777fffef4eb03*@...@#>9abee44777774feee4eed;,$&....+&*$30deef47k77774ffffeeba-*&..&>9cdb74477ffbdbbf47774fb0c=#........@#$9abfipoomhfba;=*&+.........+@#>>39abef7477774bba09,*@......@%#$,9;db47777477feda0c=$&......@%$*=39abef77k774fbdc03,*&.....&#>>,30dbf4777774ebdac->#@......@%=-0d(b47777777747f:bdc,%......@%*-0ab:f7777777744f:bdc,#......@#>3addee7777777744eebd;>#......+%>30db:f477777h47fe:bdc>%...", "...+&*=9adbee4477744eeeeeeba9=&....&=3cdbee447744febeeeebdc,*&.....%*90dbee4474744ee:eef|dc3=%......@=,cdbbee4444744ebeeee|09=@...@*=3adbeef477744eeeeeeba9,*&....+%#$30abeee47777eee:eeeed09*@..@*,c'befeeeebdddbbeeeee:d03=%+......+@*,;b7lnZWWXie1c3>#@...........@&%=>90dbee4444febda;9,*@......+@#*>,9abee4444efebda;3,*@.......@&#$>9adee444eefebac9,*%+.....+&#=,9cdbee4774eebda03>*%+......+%$30adbe47k77k774eebbac,%+.....@#>30adbe47k7k7k44ef1bd0,#+.....+%*-00dbe47k7kk774eebbd0>&......+#=30adbf4k7k7k7k44bbbac=&...", "....@$-;){]F]^rrzrr/^FFFFFF)',%...+&=;~{{]/^rzrrr^^/]FFFF)'3=%.....#=;~{{F/rrrrrrr^F///FF{';>#.....+&=-')]FF^rrrrr^///]FFF{);=@...@#-;~{]]/F^r^rr/^F/F/FF)'-$@.....&#$-'){{//^rrrr^^FFFFFF{';=%..&=-;~{FF/FFFF(({{]/F/FF](!;>&.......+#=;{rxBGDvDvtz/);-#+...........+&%$,-~)]FF^^F/FF{_);3>#@......+@%#>-;~{F/rr^//FF]()!3$#@.......+@#>-;~)]]///F/FF{)!;-=%.......@#$-;!){{F/F//]F]{)';-*&.......+&$-')){F/^rrrzrr///]])!-%......+#>;~){]]^rr^rrrr//FF{)~,*......+*=;~){{F/rrrrrrrr//]])'-#.......%,;~)]]F^rzr^rrr^/F]])'-%...", "....+&*-;!')))(FF{{{{{)))'';>*@....&#=;;~~)]F]F]]{){))'~!'-,$&.....@$--;')){{{{{{]{){))~~;;-=&......&#>-;!~){{]{({{{{))'~~;;>%+....@%=;;!~~){{{]{]{){))~''-$%+......+#,-!~~')){{]{]{)())~'!->#+...%=-;!'_)~)'~'~!''~~~~'~;->*@.......+%=-)FzxBtHGyz/]~;=#+.............+@#,;!'))){{))'~;--,%&.........+@#=;;!)){{{)))~~;;->%+..........@#$-;!~)))))))'';-,$%+.........@#=-;!)'))))))~;;->*&+........&#=--'!_){{(]{]{))~)!'-=%......+@#$,;!!)){{]{]{{{))~'!->&+......+#$-;!~){{{{{F{{){)~!;->%+......@#$;;!~_{{{{(){{))~!!;;$&...", "......+@#==>-,,-----,->==$*&@.......+@%%==>>------,,=>>==**&++......+&%#$=,--------=>=>==*%&@........@@##$==,-,---->-=>>==#%@.......+@%===,=>----,->,===***@+.........&%*===>,,>,,---=====*%@......@##=>=,=,=====>=>=,>=>*%@..........+%*>;~(::|:b_;-=#&@.................@*$=>>>,>=,=>$%&@.............+@%$==---->=>==$%@++............@@@&*===,=>==$*%&&+............+@#*=>====>==>$%%@+...........+@%**>=>-----,-,-==*=*+.........+@%*=>=>->--,,,,===*$%@.........++%*===,,------>>,=*$&&+........++%$>=>----->-->===$#%@+...", ".........+&&&%&&%&%&%&&&%&+............@+&&%&&&%%%%%&%%%&&+...........++@&%%*#%%%&##%&&&&@+...........+.+@&&&&%&&&%&&#%&&@+...........++&#%%%&&%&%&%%%%&%&+............@&&##$#%##%%#%*%%&@+..........&&@&&%&%%&%%&%&%&&&&&+.............@#$=--3;,-$*%%&+..................++@&@%%&%%%&@@+.................+@@&@&%&#%&&@+...................++@&&&#%%%@+++.................@&&%#%#%&%@@+................+@%&%%&%%%%##%%%%%@@+............+@&&%&%&&#%%%#%&@+.............+&&&&%%*#%#&&&&@&&.............+++@&&%%#%&&##%#%&&+......", "................+.+.++..........................+..+.....................++.+..++++.+.......................+.+...++..+.+.................++.+.+.++.......................++@@++@@@@+@++..............+..++.......+......+...............++@%%%#%&+++........................+..+.+..+.......................+..+.++.+............................+...........................+.++.+......................+++++.+.++@@....................+..+++..+......................++++.+++@@+++.........................++.++............", "................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................", ".........+..+++.+............................................................................................................................+.+..................................+.............................................................................................................................................................................................................................................................................................................................................", ".....+@&#%##***#%*#*#*####&@+................+@@@@@@@@+........................................................+@@&@@++....................@%%#%###%@......................+@@&&%%&&+++++......................................................................................................................................................+&&%%%&@+..................@@&&%&@+..............................................................................................................................................", "....+@&&****==,===*=>=**%%%@+..............+@@&&&&&&&%&@+................++&@@++..............................+@&&%&&@@@..................@&#**=***#&+....................+@&&%&&&&&&&&@+................................................................................................................+@@@@@@..............................+@@&&&&&@@+................+&&%&%%&@@+...............................................................+@@++...........@%######&&+..................................................", "...+&%#$$>,,--;--------=$$##@.............+&&####*#*#%#%&@..............@&#&%%#&@+............................+@&%##%%#@&................@&#*$>>,>=*#&+...................&%#$#$*$####%%&@...............................................................................................................@&%%##%&............................+@%##*#$*#&+................@&%%*#*##&%@...........................................................+@%%%&#&@.........@**=>---=>*%@.................................................", "...@#$*,39;ccaaa000c0cc;,=**&............+&##*==>>>>=***%&+...........+&%#$$$*$*&&+.........................+@@%#**=>*$%&+..............+&#$=33999->$*&+................+&#$*==>,,==*=*$#%+............................................................................................................+@%#*=*=$*&+..........................&%$*$>=>>*#&+.............+@&*$>>>>=>*%@+........................................................+@#*=$>*$*&+.......&%*=3;acc93>$*@................................................", "..+#=3cad:beee4e:e1eeeebdac3$@..........@&*>3ccaac09cc9,>**@..........@%=>3cc03,>*#@........................+%$=,-0aac3=*%@.............%$,90~be:bdcc,>#@...............&*>3c'adaaaccc33,**@..........................................................................................................+&*$-9c;c3,=*%+.......................@*>3c9cc0c3>*&.............@#=,99aaac93>*@.......................................................@&*=,caaa9,>%+.....+%=-0dbfee|acc=*&...............................................", "..&,!]/zxAGAGAGAAAAtABttsr^{;$+.......@%=-;']/rrzrr^rr/{~;-=%.......+%=-!)FrrrF{~;->%+.....................@$-;!)FzsyrF'-,*@..........+%>;)]rsyAHysrF);,*&............+%$-'{/rssszz^//FF]~-=%+.............+....+@&&%&@+......................+@&&&@+................................................+#>;!{FrrrF)~;>$%@...................@#>;)]F/rrr^{!-=%+.........+%$-')F/zssz/)!;=%....................+++..+@@@@@@+...................&#>-;~{/sys^{!-*&+...&,'{/stGAAAsrF)-=%+......................+&%%%&%&@&&&%&@@+......", ".+#;)/zAGLLLELLGCCCCGGLCByz/)-%......@#=--!]/sttyxysssz/)';-#&......@*-')FrstxrF)~;-$%+...................@#>;~)FIyvGy/);-=%..........&$-!{/sAGLLLAs/]!-=*&...........&$-!)FzstABAxzzrrr/]',#@........@%###%#####**$***#&...................@##**$**#@............................+@@+...............&$-!)FzytsrF)!;-=*&................+&#$-!]/zsytxs/);,*@........+%=-;)FrsAABxzF~;-$#..............+&####*####=$$$$*#@+................&*=-;'{/KAGAsF~;-*&...@>']KwuEEvCAs/{!-=#@..................@&%##$$$>*=$*$>**$*#&+....", "..&,;(}IJwNwNNNwJKJJwwwJI/F_;>&......@%==-;~]/^r^^/^Q/F{!-,$%+......@&*-!)F/r^/_~;->*&+..................+%*=-'~(}5OO<1'-*%@.........@%*>-~12PwwwwP[]~;=*&@...........&*>-~{F^rKrr//}F{]_~-$%+.......+@%*********>*$$**##+................+@&**>*>***&+........................+@@@&&@++............+%*,;~)F^rQF_~;->**@...............+@@**>-~]F/^rr/]'-=#@.......+&%*=-;)F/rKzIF(!->*%+............+@%*******$****=**#&@+.............+@&$$=-;!1[8O6[_;>=*@...+*;~}6wNwwJK/{!-=*%&+.................@@%#****$$*$**$>****&@....", "..%=;_:[8ONNNNYOPIKPJwO6Q2:_;>%.....+&$$--;(1[Q[[Q[QQ[:(!-=*&+......+%$,3~|}[[:1('-,>*&..................@%*>;!((2<66<(;,$%+.........@#*=;'(}>,,,>>==,,=>$*#%@...............@%$$>,--->$$%+.....................+&%%%%%%%%&@+..........&#$,-!_:[[}1(_'-=$*%&+............@%%#$>-;_(2}[[[[(;-$#@.......@&#>,-!(:}QQIQ}|';,$$&+.........+&#*$$>>,,,>=>>,,,,>*##@+..........+@%%#*=--9_|46O54_;->*&....%-~b5RSYOPQ[('->$#%&+...............@###$>,-,,=,=,>,=,>>**&+...", "..&=cafgmjoqqWqoojpooomi7f|a3=&....+&#=,;ad:fk*@.......@&#>-0be77efeba;>>#@................@#$=-0dee7ipigd0-$#+........+&$>30bbgipjqpigeba3>*&..........&*=-0dee75hl5iggfebdc,*&......+@#$=,9c;0c9939c0cc3,=*@+.............+%*=3c0aac9=*#@...................@&%%###******##%&@......+&*$-90db7774ebba;,>=#&@.........@@%$$*=,9abf7<774ebc-=*%+.....@#$=,30dee4khkh7eba;=>#&+........@#$=3399;ccc339caaa03*$#@.......+&&%%$$$>,;abbfgipifdc9>*&....%,0bgjqjplh7bac3=$*&&+............+@%$*==c0aa0999900c999,=#@...", "..%,cb4hlXXnnooqWWWZqnXlk4bac=%....@*=-0be7klVVXooZnmVke_9,*&.......+%*,9abeQkllkkedc3=#&+.............&%*,3ab4khhlihfdc3=#&........@#=3;d4khVlmmmllk4(a9=%+........+&=3cdekVVVXVXnXni4:b03$&......+#>-0a(b4ee(ddd|e2bdac,$&+...........@**,0d|e444d0,*&+................+#*$=>-33-333333,==#+.....&*$-9ad|e[kkhlk7ed093>=*%+.....@%**>,39;ad:4klVlk7e1dc3>#&....+#=3;adbekIlVlVVlk7edc3,**@......@*=,;!dd:e4:b(ddfgigfac3=#+.....+&*==>,3330dekhlllih4ed03,#+..+#,cb7imXXVlk4b_cc3,,**%+.........&%*>,99abgii7bdd1e4ee{da03*+..", ".+*;]rsBBCBCCBGvEEEEEGHAxsr/);*...@$;'{/sABACCHGvLELGCAz/);-=@.....+%$,;~FrsxAABCByzF)!-$#@..........+&*-;)]rstCBCCBxz/)'-*#@......+#,;)FryACBBAtBBCByz/{;=#@......+#-;)FrsACBCCHGDLvAsr^{!>%.....&#>;)F/zxtAyzzzsxAAxz^])-#@..........+*,;~FrstBBtz/~;=#@.............@%=-;;~){]]]]]]]]])~!;$+..+#=;;){/rzsxACBCCAsr/]{)!;,%+...+#>-!~{]]F^rstCBCAAyzz/F)';=&...&-!)F^zsxACCCCACCBBxr/{~;,$@....@$-!)//zsxyBAszzzyGDGsI]);-%....+*>-'~)){]F/ryACBCCAAsz//]{;#...*c_FQtAAHCCtyzrFF]{)!;-=%&.....+&$-;~)]F/sHvGysrrsxBBxysr/{;#..", "..*!)^syBCCCCCCGDvuvvGBCAyz/];*+..%,!)/zAACCCBBGvLvHHCts/{';>&......&=-;)]rxBCCCCBAsrF);-=#+.........&*,-!]/zyCCCCCAyzF{!->%@......&$-!{/zyBCCCBBACCAyz/{;-*@......&$-!)FzxBCCBCHGvvGtsrF{;,%.....%$-~]/rsyBAByyxyBBAyzrF);=&..........&*,;)FzxCCCCs/);-*@...........+&#=-;'{]F^rrrrrzrrr/F{)-%..&$-!)]/zssxyyABBBBAxzr/]]~;,&...&>-')]/rrzzssyABABBxxsz/]);-#..+=;)FrzsyABAABACBACCAsrF]~-=%....&=;)FrssxBBAByzzzxtGGAz/]);$@...&>;~)F///rrrzyABBBABtxszrrF),+.+*-!{^sACBCCCxyszrr/F])';-*%.....%-;){//zsytGGtzzzsACABtAsz/)=..", "..&,;)]/QKKKKII<$@......@*=,;~]}rKzKzKrQ/|~-,*%@........+&*=-;)F/IrKzKKr[});-=$%@......@*=-!)]/QKzKKzKzKr2])!-*#@......@*>-;'{/IKzKKJKJPKQ1(';>$@.....@%*-'){F/rrKrrrrzr^F]_~-,*@..........@%$-!)2IJwwJI1!-=%@...........+%*=-;~{{}//[/[/[/[/}F_);%..&*-!)1F[/Q//F/////^/^[F:{~-=&...@=-;){1/[/}FFFF//^QrQ/[F|~;=%...$;)|FQrrIr^/^//^rrKrQ/1)',*&...+%=;~{2^rrrr/FF1::[,;)F/QKKzKrI/Q^^}](~';,*&....+%>-~_F2[QII5<[1]F//rKrrrQF{~>..", "..@*-;_1[QIQQQ[[[24<8YY6-;~12[QIIII[[}1~;->*&+......+&#$>-'(}[QIIIIQQ[:~'->*%@.....+&*,-!_(}[QQIQQIQQ[}(!;,>*&+.....@#*=-'(1[QKIIIII,;~(1}QQQQQIIQI[1(';-$#&..........@#=-;(:QPYS8<(;=$#@..........+&#$>-;(1[[QQQQQ[QQQQ[}:(;*..&*-'(2}QQQ[}||((|1[[QQ[}:~;>%...&*-'_:[2Q[21_|(1|:2QQQ[21~;=&..+%;(::[QQ[[2::|:12QIQ[[2|!-=%+...&=-_|2[QQQ[}1(1(1:[QQQ[}:_;=%...@$;__}[[QQ[}21|||:2[[QQ[Q}|_>+.+&*=3~(}2QI5KIQQQQQ2}((~;->#+....#=;_12QQQQQQ[2(((1[[QQI[[[:_=+.", "..@*-cde4hlhh77ff47gjqWjmh7ed3#..+%=9d:4hhlhk447hhhhhk4edc-=*&.....+&*,;0de4khhlllhh4ebcc,=*&......+#*,9;a:77hhlllhh4fbac9>$#+....@#>-cabbehkhllhlhh7fbac3>$%+....+&*>-;abekhllllllh7fbda;=$%+....@%=30db:7kkhl5kl5k7eba;3>*&.........+%*=9abfijWUqib0,**&+.........&#*-90abekkh5hhlhhkhhhkfba*+.%*3abf7+..@*>-abe44lmmhhhhkhk4bbba;>*@....#>cde47klhhh4fbdbe4khhlhh4ed>+.", "..@*30d4kVVllhhhhhhmqWWomVl7ba$+.+*-0b4klVVVlhhlVVVlVlh4ed0c,#+....@$9cd1e7klVVVVVVVhke:d0c>$&....+#=9cd|e7lVVVVVVlVVk4e(a;3*&....@*,cd1e[hlVVVVVVXVVk4e1ac3$%....@#>9a|e4klVVVVVVVVVk4ebdc3$&....&>-cd147hlVVVVVVVVlk4eba3=#+.......+&*>3c_ehmoWWqied;3>$#@.......@%=30d1e[hlVVVVVVVVVXVVlked$..&,cd}klVXVlk41b|bekhlVllk4b9$+.+&,9(eklVVVh741b|beklVVllk4b9*...=a1khVVVlh7eeee}klVVlVk7e'3=%...#-014kVVVVh72e:be4hVVVllked9#...@=ab4;'{]^zxtHvGGxK^])!;,=&+....@$-;{/sxBAHGHCCBCGGvHBCCCyzF,++*;{/stAGGGHAssrrrsyCCCCCCyz]-%.+*;{/sAHGGGCAxzrrrsxACCCCByr(-+.@-FztAvvvHAAsszzsxCCCBCBAz/~;#..+$!]rsAGGGGAAszrzzxtBBCCCAx^)=...&-{^sAHvGGHCtyszzytBCHGvvAy^'@..%,;{/sxBHGvHHCCCCBCHHHGtsr]'$..+>!]rsAHGvHHCByszsyACHGvvHAxr'#.", "..&,;)FzyCCBGvLLLLuEuEEEELGGsF-@.%,!]rxBGLLLLLvGCCCCGLvCCAxr{!*..@*-~]zyCCCGLGBCCBGGvGBCByr]!-%..&$;~FztCCGGvGCCCCGLvGCCAs/);>%..@=;{/sACCGGLGCCCBHLvHCBBs/);=+..&>;{/yACCvGLvHBCCGLGCCCAy/{;$@..%-;]rxBCBGGLvBCCBGLGCCAAzF)-*....@#$=;!)]/rzsytBAAsz^F)~!;,$@....%>;~]zyCCGvvvHCCCCLLvCBCBxz{-@+*;)/sAGvLvHByzrrrsyABCCCBtz]!%.+*!{rsAGvLLGBysr^/zyCCCBCByz]-+.@-]zyHGLLGCyxzrzzyACCCCCtsF);*+.+>;]ryBvLLLHAyzrrzsACCCCBByr(>+..@-(/sAHGGGBCCyszsyACCGvDGAs/;@..#,;)/zyAHLLLHCCCABBHvDuvAsr{=+.+$!{/stHGGGCCCyszsyBCHvvGGBsF;@.", "..&*=-~{/IKKwwNNNNuNSuNNNNwP[_>+.@*,;{}IOwNNwNwwJKKJwwwJKI/]_-#..@*>;)/IKJJwwwJKKKJwwwJzK/:~-=&..@*,;)/IKJJwwwJKKJJwwwsKK/|;-*@..&=-'{^KzJJwwwJKJJJwwwJzI/{!-%...&=-']/IKJJwwwKKKJJwwJJzI/{!-%...@=-!{/KKJwwwwJKKJwwwwsKz/_;>#....&%$=-;~)_{]2F[/[/}F(()';->$&....@*,;)2rKJJwwwJKKJJwwwJKKr}{;#+.&>;)2IJwwwJI[F(((]^IzKzKK^]',&.+&=;(}IJwwwJI[F|{(F[rKzKzK^{;*..+>_:[PwwwwKQ/|{]][rKKzKKr});=&...#-!([KONNwPI/}{){F/IKzKzI/(;*....#-'(}IPPPKKK^/}F/QIKPPPI[1'$...@$=;)F[IPwwOI[^[^[QIPPJPIQF'=...&=-~1}IPPJKKrQF2/[QKPPPPI[1;$..", "..@#>-'(}[QI6MNSNSNNNNNSNSY6}_=@.@#,;_:<8wNNNww6KIIIOwOPIQ[:'-%..+*,3~}QKIJwYOPIQI8OOOPII[:!-*@..@*=;_2QKIJOw6IQQIPwJOPKQ[1;-$@..@*-;(}QIKJwOOIQQIJYw6PII2(;>#+..+$,;(2IIPOwY6IQQ#+..@=-'12QIKJJw6IQIKJwOP5KQ}_;>%....@$=>-!_((|::::e::||{(_(';-=%....%=-;~}QIIOOYJPI-!|25MwY6[1((___:QQIIIQ[|;=@..%=;~:[6RwO6[}(_~_(}QQKIKQ}(;*+.+*;(}5Oww8<}|(___:[QIQKIQ:!-$&...#=9~:-'1}QQIQIQ[2|}}QIII&..@$,cd7immpojmh47hmpoppmm7ec3>@+.&=cabgijppommhh7gmjqjpmm4ba-*...@$3cb7lmpjqoph47hppoppmi7b0-%...&>9degmppnommk77ipooXpmi7bc,#...+@*39cbffggggggggggggfgeebc,#....&=9ab7impoqqpmkhljoqoommkfa,%..@>30beiooomgebdad(e7hhllk4b;=@..&$3cbgmoooi7fb_ddbe7hhllk4b3*..+*cdfijqophfbb0ad:4hhllk7ea3=&...%>9abgmoqoigebdadbekhlllhe_3#....@#=-cbe7hhlih7ff7iilh74bdc,%...@#=3abf7ipji7bb(bbefhhhhh4fd=....@%$9abe47ili44ee7ilih7fbd9$@..", "..&*9ab7ioqooojjjiipipjWUUUpgb,+.@%>3a1kmnnZnnXlh47hlXXXVVl4b9*++&>9deiXoZojmik477hmnoZoomgba,&..&,cdfiXZZnXmik777kmpoZZop7b0,&..@,cb7moqZommh4474kmpoZoom7b0$@.+&-0b7mooZopmh7777hmnoZZom4d0=+.+%-ab7moqZnpmh777khmpooZnifdc$+...#-!bfijjjojqqqqqqojjjjjjif0=+..+#,cdeioqZoppmVVVXnZZZZqomhb0%..&*9cb7lnnnVh7e|bdbeklVVVVkea3&..&=9~b7lnXnlh4ebdbb}klVVVlk:0*+..*cdehXnnXlke1bbbe7lVVVVl4dc>%...%=90:4mnnXlk4ebdb14klVVVVkb0*....+&$>c_bekmnXm5hkipoph4bdc9=&...@*>9a:4kmnnmh4eeee4khVVVll7d>+....@*,0abekmXnmhhhlnnmh4bdc3#...", "..#-~FrxGvEEvGCAxJsJxAGvEEEvxr!&+&*-!]^sAHHGHHBtysssABCBCCCyr(>+.*!]/sHDELDHxsszzzsyAGDEEvtzF)$+.%;]rsGDEEvHtsszzzstHvEELDAzF~$++*!]rsHvEvvAyszzzssyCvvEEHyz]-@..*'FrxGEEvvAyszzzssACDLEGGxr]-@..*~FzADEEEvtyszzzzstHvEEvHsr]-@..+>'/syvuuEEuEuEuEuEEEEuuuNs4-@..%-!]rsHDEEvHBCCCBCGHDLEEEvAK]-.+#,')^stHBHCAysrr/rsxBCCCCtzF;%.+#>;{/stGHHCtxzr^rrsxACCCBAz],+.+=~/ztHHHHAysz^rrzxtCCCCAs^{;*..+#-'{^sABHBCyyzr^rrstACBCCyz(>+...+@*,;~]/stvGGHvGGDGGyz/{;-*@..+#>;)/zxAGvLGAAyxyxyAGvHHAtsF-+.....%>;)FrsAvGvGHvHGvAsrF);-#...", "..%-~]zyGLLGvCxxsszzsstvLLLGy^;%.+*-~]rsCCBHCCBysszsxAACCCCyr),++%!]rJtLELGAssrrrrzsAGLELLAz/)>++#!{rJtLELGtyzr/rrzstHLELutzF)$+.*!FrxGLELvAszrrrzzstHLLuvxzF;@.+*!FryGLEDDyszrr/rzstHLLDGyr{-+..*'/KxHLLuGAszr/rrzsxvLLLGsr{-+..+=~FzxAGHuDvuDuEuuuvuDDvDAz]-+..&-~]rsHLELvCCBBCCCCBCLEELGtz{=@.&=;)FzACCBCBxsrr^rzytCCCCAzF;#+.&-~_/zACBCAAszr/^rzyBCCCBAz]-@.+>~]zyBCBCBxsr/^/zsyBCCCBs/);*+..%-']^sBCCCAAxzrr/rsyBCCCCxr{-.....+%=-;)FzyCGvLLLLGHts/]~-*@....%,')/zyBGLLLBBABBBAGLLEvByr]>+.....@*;!{/zyCCGLLLvGCAzF);-$&...", "..@=;'1Q8wNwPI2F||]1:2Q6wNw8[(,@.+%$-;{2rKJKKQ^/]]]:F^IKKKK^{!*.+&-'1[6wNwO<2]((((1:[PwwNO<1_-%..@-!{[8Yww8Q}{1((({:[PwwwO<:_,%.+#-~1[8www6Q2:((({1:[PwNw8Q|;=+..&-~1Q6wNwP[}](((({2[6Sww6[1~>..+%-):QOwNw642{()({:2Q6wNw6[(!=+...%>;_|e472<<<<-']QKKKrr/2{()|]/^QKKKr}~-@..@*-;):QKzKI^/]1(({]F^QKKKQF_=+..&>;1[KzKIr2F1){)]F/IzKKIF{!-%...&*-;)}IKKKr^}]((({F2/KKKz/];#.......&*=-;1[IKwwNNwJKQ](;-$+.....@*-;)2[QPYwwJKKKrIKJYNwOI}(;*......+@*,;_|[IJJNwNwKI[|!-,*&+...", "..&*-c(46YSY5}1(____(|}5YSM52_>+.+&#=-'1[IIIQ[}|(~_(:}[QIQQ2_;%+.@=;~:5ORY8[|((~___11+..%,c(}6YYY54((_____|}8YSY54_;*+..%-c146YMO52___!~~(128YSY5}(;$@...@*>3c!a_|b|||1::1|||d__!;-$&+..@$-c_15YSSO+.+%=;_}QIIQ2}(____(|}QQIQQ}_;=%...@$=-~:[III[21____((}2[I;~|[<6RNSO5[:(;-$%+.....@%*-!(1[5ORYO8865868OOO5[|_-&.......@#*>;_:2@.+&#=3ab7hlhh4fbdaad:e4khlk4bc*..&=cafiqWqpgbbd0aaabfiqWWjgba-%..%>cdeiqWqpgbdaaadabfiqWWjgbc,%..&,cdfjqWqpfbdaaaadbfiqWqpgbc$+..&,0bgpqWqigbdaaaadbfpqWqpfbc*+..&3cbgpqWqifbaaccadbgpqWqigdc*....+%*>,,30aadbbbbbbbda033,-=*@...@*>cdfiqWWjihhhllh77gpqWWjgbc*+.+#*-cd4hlh<74ed_ad:f4khlk7e03%..@#*3cb7+..#9abhoWWZp7f:dd(befhpWWZp4b0$+....@%#=,390dbeef77febdc9,,=*#@...@*30bgmWWWZXmlmXXVhhhpWUWoifa*..@%>9a:kVVVlhk4e1eeekklVVVkebc*+.+*>-a:kVVVIlk4eb|e}khVVVVked>@..%,914llVVh74e:b1e[kVVVVl4ba3#...&*>9a}kVVVlk72b::e4klVVVVk:a>+.....+&#>-0d1kijUTUoi4da9>#&......&$=c_e7hmqUUUTUUUUWoVlh7eac=&......@%$=3'be7ljWUUjieb0->%@.....", "..*-_FryvEELvAxyzzzzsyBGLEEGx^c%.@=-~]^sBCCCCBAszrrzsBACCCCyzF;@+#;{/sGDELGAAyszzzsxBGLEELxK{~$+.%;]rsGLELvAtssrzzstAGLELGyI];*+.*!:rxGEEEvAxyzzzzsxBvEEEvyQ(-@..*;FKxDEEEGAxszzrzsxHvEEEGy^(-+..*)FztDEEEvAyszrrzsxHGEELGsI{,+....@&**39~(/rsttHGAJrF(!;,=*#@..+#-~]^sGLEEvvGGHBGCCBHvEEELyr_>.+@=-~]zyCBCBCtysszsxBCBCCCAsr(=+.&=-~]zyCCCCBAxszzsyACCCCCAs/;@.+*!{^yCCBCBAtsszsytBCCBCCyr])=+..&=;)FzBCBCCCtyszssyACBCCBxzF;+.....&=,;)F^stCCvEvHtz/{!-#@.....+#-;{/sxCHGDEDDDvDvvHAxsrF)!,@.....+#=-!)FrsAHvEvDGsrF);>*&.....", "..#-'FrxHLLLvCCtxsssACCvLLLGsr;@+@*;)FryACBCCBtxzzzsytCCCCCAs^;@+#;]^stLLLGCCAysssACCvLEEDyr{;*+.%;{/sGvLLDCBAxssxABCGLLLvy^{;#.+*;FrJBLELDCCAxsssABCvLEEvs/),@.+*!]ryGLLLGCBAsssxACHvLLuHs/)=+..*!FIyGLLLGHAyszsstCCHLDuts/(-@.....+@*=-;)FzACGuLLAr]~;-$#&+....&>']rsGLEEELLvGCCACCBvLLLGy^)*+.&$-']rxBCCCCCAyssxACCCBCCBsr{>++&$;~]rxBBCCCAAyxsytBBCCCCAsr;&.+$;)^sACCCCCBxsssxCCBCCCAxr]'>+..%=;~FzxCCCBCBAsssAACCCCBCAs/;@....@*=;!{/ryACCCHHtyzF);>%@.....@=-!{/sAABCHCHtAyxysszrF])!,#+.....@*,;~]/zyBCCCHHtsr]~-=%+.....", "..@*,;(}6OwwJJKI^[[QQKJJwwOP[_>+.+#,;)][rKJKKIr[F1]F2^KJJJKQF_-+.&=;_25ONwwJKKr[^QQKPwwwYJ[(;>&+.@$;_}5OwwwJKKQ[[^IKJJwwwP[_-$@..&=;(2PwwwOJKrI[[[IKPJwwO8[(;*+..&=;(}6OwwwJKrQ[[[IKJOwwO5}~-*...@$!([6wwwOJKI[[2[IKJwwwO5}~;#.......+&%*=-'1[PJwwO<|!-=#@.......+#-!([5wwNNNwwPQIIKKJwwww6[_-&..+&*=;)/IKzKKKrQ/[QrKJJJJKK[{;*..+&$-!{^IKKKzKr[/^QrKJJJJKI/{-+.+%=-~F^KKzKKKI/[QIKKJwJJK/:';%...@#=-~]QKzKKzKrQQ^QrKJJJJKr}_-.....@#*--'{F[QKPJKKI2(!-=%+......+#=-'{F^IKKJII[22::{(~!;-==%+......@#>-;)(FQKKPJKKQ1);,$&@......", "..@#=-c|[P8OJ8P85555888OO654|;*..@#=;_1<5O6O8554:1|}[586OO8<}(,@++*=;([58888P855556666668<1!-$&..+*,!([P8PJP8K655566PO6O5<|;-#+..@#-0|[586O88P555586O8888[1;,%...@*,;|[PPJ6P8K5555668O886[1c>#+..@#-~1<588J885555556P6JP54(;=%+.......+&&$=;(:[88854(-=*@.........%=;_1<6OOwSSY655568PP6P5<:!$@...+&$=;(}[QIPPP5<556PPOYO8<[|!#...@#*-~|}[Q-!(|}<88J6J6<}_;>#&........%,;_(}[QP6P5Q}}:|_!;->=**@........&*=-~(:}<66OJ68Q:!-=%@.......", "...&*,caf7hipoWWUUqTUqqjih7bd9#+.+$,cb7pqUTTUqqigbfgpqUUUUqjge-+++$=9abghimjqWUqoUqUqjmh7fd9,#@..+%=cab7ilpoqWqUqUUqqpli4fd9,#...+&=cae7hipoqWqUqUUqqjih4bd3=#...&*,3cbghinoWWWWqWWWqji77bac=%...+%,;df7hipqWqTTqTqWqpih7ba9=&.........+&*>3abe7i5fba9>#@........+#=9ab75mmoUUUWqWUqWqpmh7fd9$+...+&*>-adefipqqWqqqqWqWUUUjied*....&*>cabe7ijqqqqWqWqWWUUUjie9@..+#*,cdbegpqqWqqqqWqWUUTqjgbc*....+%$,;ab:gijqZqqqqWWWWUUqjge3+...+%*3abfgijUUUqWqifa3=#@.......+#=;de7hijqqoih7f|a93=*$%%@.......+%>3ae47ijqUqWqoie03$#@.......", "...&*,9ab4klnZUTTTTTTTWolk4b09#..+*3dfljqTTTTTqjk77ijUTTTTTZm4c@.+&>-a1ekhXWUTTTTTTUUomh7fac>*@...&$-ab4hkXZWUTTTTTUWolk7eac=#+..+%>3ab4hloWTTTTTTTTWolh7ea9>&...@#=9a|4kVpZWUTTTTUUWolh7ba9=%...+%>9ae7hlnWUTTTTTTUWXVh4ba3*&..........@$=3~be77<7ba3**@........+#=!aekVVXoWTTTTTTTUWolh7:a9*.....@#=3ade7mZWUTTTTUUWUTTTWphb,+..+&$=9~be4mZWUTTUUUUUTTTTqm7a&..@%>,c!b4koWUUTTTUUUUTTTUjl7d>+...+%*=9adb7mZWUTTTTUUUTTTUqm4c@...&*-017lVmoUTTTUWogdc>*&+......@*,a|kVXXZUUZXVlkeac,>$&&+........%$,a|7lVnZUTUUUqpfa9=*@.......", "...&=3!|^stBGDELEEEEEEEGAys/{;$+.&>'FsBvEEEuEEuDtxxBDuEEEuEEGx(#+@%>;(/stAGvEEEEEEEEEvAAszF~-#@...%>;(/zxtGvEEEEEEEEEGBxsr{'-$+...%-;{^zxAGEEEEEEEEEDvtysr]!-#...&=,~{^sxCGLEEEEEEEELvAxs^{!,%...+*3']rstBHDEETEEEEEEDAxs/{;-#.........+%=-!{/zxyxs^('-*@........@>;)FzxCCHGEEEEEEEEEEvHtsr1!$+....&=,;{FrstDEEEEEEEEEEEEEEDtr;@...&=-'{FrsHvEEEEEEEEEEEEEEGx{%..@#,;')FzxDEEEEEEEEEEEEEEEHs/-+...+%$,!{FrsGvEEEEEEEEEEEuEEAx)&..+%-!]zxCCHDEEEEEEGs2)3,*+......&-!]zxACCvEEvHCBtzF);-*&+........+*-~FztCHGEEEEEEvGKF~;>&.......", "...+#-!{/zsAtGDuuuuuDvGHyxz/)-#..@-~FzxBDEuuuuuttssxGuuuEuuHAz)&.+#>-~]rsytGDEuuEuuvGBysz^{!-$+...%>;)FrzttGDvEuuuDvHHtyz/);-%@..+%=;)FrzytGvEuuuEuDvtysr/{;,%+..+#-;)/zsAAGuEuuEuvvGHyyz/);#@...+%-;)/zyAtGLEuuuuvuvAyszF);=&..........@$-;)]/zssrF);-#+........&,;)/zABCBGvEEuEuuEuvtxsz/];*.....+%>-;]/zyGGLvEELLDDEuuuvty/;@...+%$-']^zxGGEuEuEEvEEuuuGAx)&...+#>;~{^stGDvEEEELvEEuuDAts]-+.....&>;)]/KxGvvuEEuEDEEuuDGAs)&...#-!]zyACHDvEDDDvts/~;=#+......@>']ryCCCHvvGHCByr{!-=#+..........#-!FzAABHvEEELDDxz]~-*@.......", "....+%*-;~(:}4[k$+.....+#=-!~):24<<5kh<7[42:)~;-=%@...........+%*-;')))~;>*#@.........+#,;(F[KKKP<<<<<<<<[[2:(~;-$+.......%$=-;~1}[<-;00_~__d___a';-,>*%+......+%%*--99aa~__a__a~!;--=*&+.......+#=,-;0aaa~_da_d_~;-,=*%@.....+@%#=--;0aa_0~__~_~!;-,=*@......+@%*$-3c~a~ad_d____';->=*&@.............+&%$>>,->$$%@...........&>;~12QQQ[}:|(_d(d_a~;-->$&+........&#*=-90_a________d__a!-$+......@&**=-90a_a_a__(_d~__~;;#+.....+&**>9c0a__d(a____d__';-$@.......+&#=,-90_a__d__d__d~_'!-#+...@%>-!:}[[QQ#+........", "......+%**==->,3999033,-,>$*%@....+%$>,3,9c99993-3,3333333333=@.....@%#*$=-393399933,9-=**#@........+&%$>,,3339033333,,=$*%@........+&#*$,,3,939c09333==$$*@.......+@%#*$,-9-cc999333,==$$%+.......+&##*=,,-339c9333,,>>$#%@...............@&****#*%&+............%,;_bbf4fbbaaa0909933,=**&@.........+&#*$,,33,3333399c3933=&........+&%*$,,3333333909993,,=&......+@%$*=,,339cc99333cc93,*#+........+@%*>,>339999c9c3c093,#@....@&*-9def44fffffba0,$&..........@#>cdbe4777febbda-*%&............@#=-abef44f4ffeba;,*&+........", ".......@&##==->,,>-33>,=$*%%@......@&*>=>,3--,>=>=,=>>,,=>==**@......+%%**=,=,3-9,>,>==$*#@+.........+%#%$=,>9,3,,>,>,=$#%%+.........@%%**==,=9-9>-3,=>**%&+........+@%#**==,9-9,,,=,=>*%&@.........+@%$$*=>,=-39,,>>,$$&%@.................++&&%%&@+............+&*99addbddc0c933-9,>,*$#%&...........+&#***>,>,,,,,,-3,,>=$&.........+@&*=>=,,,,,3,39>>,>>*@........@&#$*>>3-3,-,,,39,,=$*@...........&%*=,=,--9-39,,3,3,=#+....+&*>9aadbbe|bbda03=*&..........&*=99dbbbbebddaa9>>#@+............&#=3!dbbbebddaac9**@.........", ".......+@&##$>---,,-,,,>=#&&+......+&#=,>,33>>==$==>3-,-3,,-$%........@&#%*>,,-,3--,,==*%&+...........@%%#*>>3,-3--,,>=#%@&...........&&##=>-,--3->,,==#&@@..........+&&%#=>>-,-3,,,,==#@+..........+&&#*>=>,3,,3--,,,=*%&+...................++@@@+..............&$,;!''_~~'!!;---,,>,=$#&+............+%#**$,,,-3--3-,,>,=*&..........+@##$>-33333-3-333>=#@........@&@#*=,-,-,3-3--,-,,=#+...........+&#>=>3,3-,9-3-,,>==%......+%>;;)~]{{(){);';,*&..........&$>;;))(]{{{();!;-$%+.............&=-;;'){({({~~!;-=%+.........", ".........++@%#**#$$*%#%#@@+..........@%%#$#*###%%&##%%$$**%%%+........+..+&%%#*$***%##%%+.................&&###%#**%%%&&++...............@&#%##*%%#%#%&+++.............+++@%%%#%%%%%%%&@+............@&@@@%$$*$$$**##%%&+........................+.................&*==-,-,->=>=>***%#%%&+...............+.+@%%##%%****#%##%&..............+@%%%%%*##*****%%@...........++&%%*$*****#*$%%%&@..............@&*#*$#$===**#%#%&+.......@#$>=-,,---,=-=$#@............&*$>,,->-;---->#%&@+..............@*=>-,---->-->$*%@..........", ".....................+.+.................+......+........+..................+.....+............................+..+........................+++....+.............................++++...........................+.....................................................+.+.+.++++.+.++.+................................++..........................++.....+.....................+...+...+.+.....................+..+++++..+............+++++@@+@+.+.+...............+++++@@++++..+++..................+..+++@@@+.+...............", "................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................", "................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................", "......................................................+@%%%%@.......................................................................................................................................................................................................................................................................+&%%%%%%#%%%%#%%#%@+........................................................................................................................................................................", "................................................+&%**=>-;;;--$%...........................................................................................................................................................................+@*****#%+...................@%***$$**$**$*#%@.................+@@+.....................+#>,;;;!;;;;;;!!;!;;->=*#&.......................................................................................................................+@&%%%%+.....................................", "........................................+@@&%%%##*=--;!)))~~;-*+.........+@@&&@+@@&%%@+..................................................................................................................................................+%=>----=##@.................&#*=,---;;-;--->=*%@..........+&%%%#**#@....................%,;~))))))))))))))))'!;,=#@...........................................++@@@@++..+@@@+..........................................................@%#*=$>=$##@...................................", "......................................++@&&&%#***$>,-;~)(()';-*+.......@@%&%%&&&&&%%%&@+++...........................++...............................................................................+++@@&&+...........................@#$,---,=**@+................@#$>,----------,>$%@..........@%%&#*$$#&@+..................%-;)(((()~~~_~)_~)((~!-=>%@.......................................+@@@&@&&%&@&@@@@&%@@@@+.....................................................+%#*$>>,==**@...................................", ".....................................+&%###$>*$$>=--!(17<7}:(;$+......&&##*#####***$$$#%&+........................++&@@@@+...................................................++&&@@+.................@&%#&%#&#&+........................@#$,-;~!;->#&................+&#=-;!!!!!!!!!;;-=#@..........@&#$*>,=*#&@+................+$;b}4<4}::::|:::2}4[7:_9=$@...................+@+................@%%#%###*#$#*#######%##%&+...................................................@%*>--3;;;-*%+..................................", ".....+++@@+......+@@@@+.............@%**$$=,333333;abeijqjpgfd-+.....+#*>>,>=*==,>>,==*$%&+..................+@@@@%&##$#$%&@+..............................................@&%%##%%&+..............+&***$*>$*$&@+......................+&$=3cbebdc,*#&+..............+%*,0dbbbbbbbbbddc-$&+.........&%$=3c99,>$%&+...............@-agjjqjihh777774hijqjjec-*&+.................+@&&&&++...........+*$***>=>,>,=>>==>>===$**%&+.................................................+#*=9;a0ddac>*@..................................", "....@&#*%%#%@@@&%%%####&...........&=>,339caada_addb4hjWWWoPl49&....+#=,9cc0999c90c00c9,**&..........++@@&&&&#*$=>=,33,3,>**&+......+@@&&&&&@+.++@@@@@@@@+...............+&*==,,>==$#%++..........+%$,39399393>*&+....................+%$=3014k7edc-=#&@............+#=3cd4444444744eedc=#&........+#>3cadd~a-=>*&+..............#9biqWWZoVVVVVVVVVoZWWqgb9,*@...............+%*$=****&@.........+#=3-ccc0c0c0cc9c0c00;c93,>*&................................................&*=30dbbeeeed;,#@.............+@#%&&+.............", "..+#=---;--,=$*==---;;->%@........&>!){]]F/rzzrrrrrsxBGLELGHAs)#...&*-;~]/^^F]F]///^//]);-=%+......+#*$>-,,--;;!~~)){{]{{)!;-*+....&*$>,--,-,>=>>---->->,$%@............+%>;!){{{{)'-,$$@+........#-!){]FF/FF{~;,*&+................+&$-;!)/zABBxrF)';-=%@..........%>;~FzAABAABBCBBys/{'-*@......+#-;'{/rzz^{~;->#&@+...........-]KALEELvCBCCBCCCHGLEELxQ(;-#+............+&$>;;!''!;-=%+.......&,~{]F/^/^^^^/^/^^^^///]{)!;*+........+@%**$*$$*$$**#%@+....................%>-!{FrssyAtsr])-*+.........@%*>>;---=%+...........", "..%>-;')~~';--,,-;~))~!--*&+......#;{F/rrzzyytyzzssyBCvLLLvHBz)%..&=-;~]rsysrr/rrrzzzzrF);>*&.....+#=-;-;;;!'~)){]F//rrr/F{);=%...&=--;!!!;;;;!!;;;!;!;;---$#&........+##-;~]/rr//F{!;-=*#@......+=!{F/zsxxssQ]~->*@...............&$--;!)]/xACCAsrF)!--=##+.......&$-;)/yACCBABCBCBAsr]!-=#+.....@>;!)]rsyyz/])!-,$*#%%@@+.....+,FztDLLLHCCCCCCBCCGLLLGyI]~-%.............&*-;!){{))~;-*&+......$~FrsssxyxyxyyAyyxxyyxJsrF{'=+.......+&*,---;-;;;;--=$*@+.........+@@@.....%$-!)FrxtCCCCAs/{!>+........&*=-;'~)~;-=#&..........", "..%==;!~~);-=>*=-;~)();-=*%@......$;(]}/[/IPJJII[//QKKOwNwwKQF;&..@*=-;([PPI[FF2/[/Q^QF(;,*$&.....+#=---;;;;'~))){1F:/[F}F(~-=#...@*=-;;;;;;;;;;;;!!!!;;-->*%&+.......@#*=-':#@..............+#*==--;~:IJwwKQ|);;-,=**&+......+%$,;1IJJKKrKzzr//F]'-**&+.....@$=-!)}<66<:(!;,>$*#&&&&@+.....>~}PwwNwJJKKIIrKKKwwNNw<2~->&............+&*>-~({{{)~;,*%+......#_[K6OJOJOJOOwOOOJOOJOO6<}|!$+......+@%$>>>-----;--,=*#&&+........@&&&+...+%*>-'([PJwJwwPQ:)-*........+&#$>-'~~!;,*#&+.........", "..#=-;_(1(';>=>,-;)1:(~;-*%@.....+>_12[[QQ<6YY8<[[[QQPOwwYP<2(=+..@$,-~|5665[:::}Q[QQQ}|!->*%+....%=-3;'~~~_~((1::}[QQQQQ[1_;-&...&$>3'_(_~~~~~~~~_____!;;-=>#@......+%*=-;(48OY6<}(~;,=**#%&....+=!|[5OYMSSR5:c-**@..............&*=,-;!~(}**&@.......+&%%%&@+@&%$=;~|[6YRSSO6Q|'-%+.......+%$=-!~(((;->*&@.........", "..*30df4gebc99-9!df7gedc-=$&.....+>b47hhimpjqjmi74hhiXpjopm7e0=+..@=3cdeijqp7ff47hhhkh4ea;,=*@....%3abefeegffgggggiiipipiigb0;%..+&>0affgefffegeeffegefebbc3,*&....+@%**,9abgpjopi7bdc;9-,>*%@+..@,0b7ioqqUqqjfa9>*&..............#,90ad_begiqUUji7bbbdaa;3>*&.....@#*9ceiqqphkhk,>==$&@...$cfiqTTUjmilimmmmpooWqjgba9=#+...........@&$-0be47fedc-$&@......*agipjjojqqqqqWWqqqjqjjjigbc*+....+@%$>3;adbbeefebbac9,>#&+......@$,==#%%&%#*,0dfgjWUUWjpgd0>%+.......@#*,;dbfeed;-=#&.........", ".&,a17ipjmged~adbfipnhedc3*%+....&c:klXnZoooojmhhhlmoonXmm7fba>+..#,0de7pZZnhhQhlVlVVlI7edc9=%+...>bgpjjjqjjqjooooooZZWWqqmhfd=+.+=cbgppjjjjjjqjjjqjqjjjig4bc,%+..+%*=3;cade7mXnmlkk4eb(daac,*@..@>ab7lmnooopi7ba3>*&............@,a:e47kkkloUTTWphhkkk4e|a9>%+...&*=3cd7mqZXlllVVVlk4edc3>*&.....#,cdb4ijWqpheeba'aaaaaaa09>*@.+=afjqTTTqXXXoooooZooXomhed03*@...........@$=cdekllk2ba9=$@......%3dfggghiiiipoooopimiiiggba0$.....@%>3cd:ekhijjqjjg7e|d9-*&.....+>adac-****$,3~e7mZUTUjpgfd9-%........&*,cbe7imigba9=&.........", ".$~rsBGvDvAsrrrrzsHDDys/{~3$&....%(rtBGvLELvGHCBAACDLvGHtxsr/)-+..=)/zsxGLEDBttAACCCCCCtxrF);,#..+;VwEuuETuuuEDDLLvLEDuuEEDAxr;@+&;{IxvDEEEEEuuEuuuuEUuuuGAz]~$+..%>;~)]/rrsxBCCBCCAyyzzzrr]);*+.%;{^stCBCBHCBxKF(!-=&...........=]rsABBBBHHvEuEEGHBCBBABsr]~>@..+*;!)F^sHDDGBBABCBBtys/])'-$&...+,!]/zytGLLHtszr^//^rrrrr/]'-%++;2suuuuEDHGDvEEELEGGHGCyz^{'-%..........+#-;{/sBBAtyzF~;,%+.....#9_b}^rKsssyHCHHHAAsssKzQ2]~,+...@$-;)FzstAHDEuuuDvBtyr]~;,#@...&!rz/]);;-3;!)^stGEEEEGys^]~3%+......@*-']/yAHDDtz/);$@........", "+={rxHDLLLtJrrzzsyHGvAJ/{';=@....%!zABHLLLLGCCCBBBCGLLHAAsz^]'=@.+>(^zsAGLLGtyABCABCCAACyz/{!-*+.@~zGDEEEEEEEEEEEEEELEEEuLvHy^;@.#-]zAuEEuEuuEEEEEEEEEEEEGtz/'$+.&=;~)F/rzzsyBCCCCCCByssszr/);*+.&-)/zyACCCCCByr/]'-=#@.........+-]zyABCBCCCLEEEEGCCCBCCBxz/)>%..%,!))FrsGDLGBABCCCABAsr/)~;;*%..%,!]rzyBvLLCAyszzrzzzsszzrF~-#+&-^svEEEEvGCvLLLEELLCBBCts/F);%..........@*=;)/stBCBxrF);$%......&-;))F/^rzsytCBCCAyszKr/F])!>+...#,-')/sABCHvLEEEuDHByz/{';=#+..&~^sr/{!;;;;']ryBHvvELHsKF);,%......&*,;~]rxBvLvAs/{;>&........", ".*;1IPJwwOP[:F1F2QPwOK1);-=%+....+-(/IJwNwNJKrQ^/QIOwwPI^2F(;-*+..>~F}[KOwYOIQIrKKKKKKKK/}]~;,%..+-15OYRNSNNNNwNNwNNNSNSNS6I})>+.&=':8wNNNNSNNSSRNNNNNuSMPQ2)-%..@=;'(|:}}2[IKKPKKKKI^QQQ/}{!-%..@=;_]^IKKJKKI[]{~;-*%+..........=):/rKzKzKJONNNwJPKKKJzI/F);=%..&,;!_{}QPOwPIQIKKKr^^/F{~;--=&..@=-~]2[IOww8I[[[222[Q[[/[1)-=&.+,{[6SNNNwJJwwNwNwwwwwJJI[:(;-&..........+%#,;_//Kr^F{)->#+......+$>-;;!)_|F2QKJJKQ2}]]())';-#....%=-;_]/^IzJwwNSNROKIQ}{);-*#+..+-]F}]~;-->--!|/IPwNwO5[(!-=#+......+&*=;_FQPJwO5}_-=%@........", "+*_25PJOJ8<42:::2[6O6<(0-=#@......$~:[5OSNY6<}}:}}<6RY6Q[}1_;=&..+>(4<56YMSY855586JO86885<}_;-*+..*_:<<5558RRNSOOOwwNSO855[:(9*++@,015MNNMO88556558pMSNNM<}(~-#+.&>;(:4<<<5558OO8886656555<1_-&..+$-'|[58O8J65Q}1(!-$$+.........+$'1[QQQIIIPJMNNR6II6JJPK[:_;=%+.*;_(1:}[6YY6(45MNNROPIPOOOOOOJOOYJ5<4:~-%+.........+&*>;_1[Q[2:(;-*%+......+#*=-,;!_(|}[IKIQ}11((((__!-*+..+%=-!(}[QI#+..@-(24[2d;->,-!(1[<6OO8<|!3=*@.......@%$,;(}5P8654_9-$%+........", ".=dijjXmmlh774474ijqjgd9=$%@......$0begoqWqmfeb|bfgjqqpi74ea;=%...3fpjqqUTTUqWqqZqWqWUWqojgfac*+..%,cadbffgpqqon6mnqqjigffba9,#+.@3afiqWqjig7ffffffgjqUqjgba;,&..%3agijqqqqqqTUTUUUqUqUqWqjib9%..+$3abijqUWWqomh7fb;=*@+.........*d47hklllhmjWUUqpmmoWqqpifb;=%.+>0ee77hiqqWpimpoqjmmk5h74bbd;*+.@>0b4hhmoqUUqUqUqUqUqqqWjje0=&.+3egpqUUWjmmlhilllmoqUUWqqjgb0*+..........@*>;de77771d03*&.......+#,9c0aaabef7kl5h4e1bbbbbbb0,@..@$-abf4hhkhlmmmmiipoqopgf_0,*@..+,bgijiga;--9ade7glli5fd;,*#@.......@#$,;bijjmigba9>*%+........", "+$biqZnVVVVlkkhhhVoZoibc,*%+......*014loZWZm7eeeefioWWnmVh7ba3*+.@9gpWWUUTTTUWWWWUWUTTUWWomfb0>+..%=990dbfgmoZXXVXnZZXifbdac-=%..%cbgjWUWohk4eeebffgpqTWjied0>#..%cbhpZWWUUTTTTTTTUUTTTTUWZpe0$+.@=cb7pqUUUUZZXlVbkVVVVVlVXoWUUWoXnZWUWoVh:a,&.+,:7kllVXoUUonXoWWZnnXVVVhke1d=++#3d4hVXXZZWUUUTTTTTTTUUWWjgc,&+@9elnWUUWZnXVVVVVXXoWUUWWWoif0$..........+%*30b4hVlkeb_9=%+......%90_db1be47klVXmVhk4444k[74(9#..&3a:7klVVVVVXXXVlhmoWZomkfbc=@+.@3ekpWoibd00~de4kllVVl7b0,>#@......+&*=3cfpqZnl7109,*&@........", "+=eJtHCCCCCCCHHGGvvGHx^(;-*@......>{ryAGGvGtszrrrsxvuEDvGHtz/)-@.@;KtGvLEEEEDLvDDGGDDEDDDHyrF{;@..#>c'_1/IsAvGvGCHGHvAsr/](!3,&.+$)/sHEEEvHyszr^^rzsvLELvtz/{;*++$_^sAHvLvEEEEEEEEDEEDEvLvDtz:,+.&;(/sAHLDELvDHCCBzF);=%........+;^AACCCCCCHvEEELGHGDEEEDHtsF'=@&;ztBCCCGvEEvGHGEEvGGHHCBAAys^;@+>(rsBCCHBGLGDvEEEEEEDDvDGAIbc%+&~sBHDLDLDvGHHBCCBHGDvvvDDHtr{-+.........@$-!{rxBCBtsrF)-=@.....+-]rzsxsyABCBHvvvGHAtBBBBBAxr)$.+=)/ytHCCACCBHCBCBAHGDvvGGAzF;#+.@'^xGLvHsr/F/zsACHCCCAs^(;-*@......@#>-'FVADDGts/(!;,=%@.......", ".=)FrsxtBCCCBHvLLGGCxz/';=#+.....+-{zxCCCCByzrrrrzyvuEELLGAsr{-+.+-]zABHvEELHCCCBCCCCCCCxsr:);=+..&=,-!)]/rsACCCCCCByzrF(~!--#@..#~/sHuLLvAysr^]FFrsGLLLvys/(;$+.%;]rsyBCCCHvEEEEEHAACCCHCBtr(-@+&-{/zxBCCCCCCBCCtz/~->%+.......@;rtCCBCCABAGLLLLBAAvLELvBAs/)*+@'rtCACBCvLLGBHvLLvCCCCBCCBAs^;%@,]rxBCBCCCCCCCCGLELGtxysz/F~-#+&~rACBCCvvLvHBCCCCCBCCCCCCBs/~*..........%=-~]ryABCAsrF';=&.....@;/sBBBAABACCGLEELGCCCACCCByr)$++>{rxDGHABCCCCCBAyyACBCHGvHJF;#+.@;/sGvLtxzr^rztGLGHCCAs/);-%+......+#=-!FstLLAyzF{~;->*+.......", ".&>-'(]2^rKJJwwNwwJQ[:~->#&.......$'2^rIKII/1((((1<8wNNwNw6[1'=@..*;]2[IJwwPI//IrKzKKKI/F{~;,=%+...+&*=,;!|}QKKsKKr[](~--==*%+...+>~:5wNwJI[](';;'([6wwwJQ:~->&..+*-~(2[^IKKJNNNRPQ[QIIIKKI[{'$+.@,;(][QIKKKKJsKKQF)-,*@.........-1/IrIrI/^QJwNNOPQKONNwJKQ2);%.+-|^rrrKPOwwJJJwwwwJJsKKKrQ/F)-@+$']/KKKzIQ^Q^^IPOwO<[::|_';>*+.+-1^IKKJJwwwJKKzKKKKKKKKKQ[F~,&..........+%>-!{/^Kr/F{~->&+.....+-]^rrIrrKKzJwwNNwJKKzKrKrr^];*+.*;:5OwPIQrKKI^Q/[/^QIKPwwJ[_-%...>!26OOPQ21||}*$%@+......", ".+&=-;~1:2...#c_|}46MM522}}QQIQQ[[:(!3=*&+.....+&**-;~|}[QQII[1_;->*#%&.....+*0:5MSR6[:(!---'_:@+*!(2QIIQQ}}}}}[&..+%-(<8O52:(((1<8YOIQ21_-=*@+........@*>-~:5MO**#&+.....", "..@$>9abbf4hmoWUWqmgba3=$#@.......*cb477kk7edaaadbgpqWWWqjmgba>+..#3abbgpqqjgff7hhhhhk7ed9,=*&+......+%$,3ab4khlhh4:a-,**%@.......=aepqTqjgfd99-9c0fiqWqpgbc3=&...&*3cab:f7hmqqWji7f7khhhhkfac#+.&>cde47khkmppmhked;,*#@.........=b7khkkk74gpqTUqiggjWWWpi7ba3&..*cbe777kpqqnimponmmhhh77eeb_c$++*0bf7hk74eeef47ijpigbac;>$$%@...=ae4kllmoWWopmmmimmmmihh7ba9#+..........@&$,cd7kih7:dc,*#+......=dbef44777k5pqWWjmh774444e|a-%++>cfijpi47kllh7ebbb:e4hijqpga>@...&,0gipgfebbbeijqji7f10-=*@........+#$,9dfiqjieb_ac;3->>*%@....", "..@*=3ad:4kVnoWUUWphedc3=#@.......=d4klllhke1dddbehjZWZXonXh4b,+..%9a|fhjqUjhh7kllVlllk4dc9$$&.......+#*30(e7kVVVlkba3=$%+.......@,dgpWTWohfb_c99abfpqWZog:ac,%...@*,cade4klmXZoni4khlVlVlh4b9$.+%cb4khVlVXnZomh7edc,$#@........+,1kllVllllVoWTUqpmmqUUWomk4d9#.+%cdb44kioWZXVVXnnXVlkk4ebdac3#++,b47[77k447khlhVnXm4ba0,=#&@...+>deklVXnWUUWWqqqZqooooXi7b~,=@..........@$=3afinoni7ba3>*@.....+*cad|beee[7hmXoonlh74eebbdac=@.@,b7lnnVlhmnom44e:ee7khXZWjgd9#...%>cbggefee4kkmoZol7eac,*&+.......+%*=9dekmopiffe4e|d_a9,>#@...", "..&>-'{F^stCHvEEEuvyz/{~;,$@.....+;rxBCBBCAszrrrzsyHLLvvCCCAy^;&..$~FrzyDuEvAtBBCCCCCCtz/);-=&.......@=-'{/stCCCCAx^{!-=&........&'QsvEEuvAsz^{)(]^JtLLEvtz/(;*+..&,-')]rstCCCGGGAttBBCBCCAs/)>++=]zABCBCCGDDGCyzrF);-=%&@......+;zAACCCCCCGDuEEEGHHEEEELCAs/)=.+%!{/rzsyvEDDHACCCCCBAxz^]{~!-*+@'ryyssssssxtCBCCHAtz/{~3=*&+....-(rsACCGEELEuEEEEDEEEvDtz/{'-%+.........%>-~FKtvuvHsr]~-=%+.....*-~({1F//zsxBCGGBtsr^/F]{)!;=&.@!rACHCCACvDDAxzzrrsABHvvEvxr(>+..%,0(2^^zzsABBHLDGxzF)!;=#+......+&=-;{^stCHAAssyBtysr/F)~->%+.", "..%=,;)FrzACGvLEEEGxzrF);->#@....+;^yACBBAAxzrrzsstGvGHBCBBAsr;@.+*'F^zxvuDGBAAABACACAAz]';,$&.......&>-!{/sAACAAAs/_;-$+........&!/xGuELGAyz/]))F^zALELHAK/);*...@*-;~]/sBACCCCGCAACCCHBCyzF;*++={sABCCHHGGGGtsz/]);--=*%&&+...@;ryCCCCCCAHGEEEEvBHvLLGvByz/!*+.#-']/zsxvGLHACBCBCCAysrF)';;,&.@;^zzrrrzzssBCCCCBByr]~;,$&+....+=)^sBCCHGDDuEvuDuEuELvvAK]~;,&..........%>;)/sGLLvtJr]~-#@......@,!'~~){F/rsxCCCCyz^F))'!;>=#+.&~zxACBCCBHGHttzrrrytCCCvvGy[~*...+$;')F/rzxACCGHGAJ/]';,$@.......+*>-'{rsBCBByxstBBByyzr/)!-$@.", "..@#*-;'{}IJwwNNNw6I[2(!;-=*%+....-(/IrrIr^/]|F2/[IPPKI[/F]])!$+..%-~(148OwPIQ/IrzKrKr^])-=$&+.......@*=-!)}rrK^^F]'->#@.........+>_[8wNwOI[:)';!_([PwwwOQ:)-=&...+&$,-!{/rKKsKJKQQIJJwwPIF{!>%+.#!FIKJwwwwwJPQ2F(~;,=>$#%&&++..+>(/^IrQrQQIJNNNYPIIIJJJKI2{!-#..@=-'(F}QPwOPIQrKIzQ^F]);-,=#&+.+*;~)~'){]F[PJwJJI[]_;,*%@+......&,)FQKKKKPP555I5666OJJP[{!-=#+..........%*-;([6wwwP[(;-*&+.......#=>==--!_(F^KKKr[])!--==#&@...@-:^KKKKIKKPP<2|||]FQrKKJPI2(,%+...%*=-')(2IPJwJP5[1~;-=%+........@#$=;)]QrIrQ[F2/^KKPPIQ1~;,*@.", "..@*$,;_(2<8SNNNSSO>&+...+*~:[Q[[[2:|(|1}[[QQ[:|_!;--=%+..&>;~125YY522}}[QQQQ[}(;->*@.......+%$>-;(2[Q[}11'-=#%@.........+>~:5MSM6[}|_!!~_(}5ORY6}|0->&...+%=>-;(:[III%..%;_[IJOwwJPIQ}:__'3->=*$$##%&+..*!(12[[[2}[5YNSO<}2Q**&+.....&31}QIIQQQQIQ}((~~(}[QQQII[:0,@....@#>,;;(:*&+.........@*=-;(}[QQ[}}(|12[6OYO5:_c,*+.", "..@$=-cabeiqWTTTUqolh4bbac9>#&...+$~b747hk7f:bef774747bdc-,,=*&+..&=9abeiqqjg7fe7khhh7fb93*#+.......@%*>;ab4k<7:b_c-=#&+.........+$0fpqUWjg7bdaaadbfiqWqpgba3=@...@#=,;abeklhhkhh77gpqWqpgba9=@..#cbhmnWWWqnmh4ebda09--,-=*$#%+..#9dbeeeeebfiqWUjiff7hlh4eb03*@..@*3cbf4gpqjiff7hh74ebd9-$*&......%$>=-;adbgjqWqjfda3=*%+........+*cb7khk74ffeeff77hhlhkfa3=*@..........@*=9c_gpqWqif03=*@........+&%##*>-cab4hhl7:a3,*$%@......%9b4khhkkhhh7fbdadbf7hkhhh7b0=&....@%*3;abeiqWqpgba;,$*&..........@$3;dbekk44eebb:fhpqWqigdc-=&+", "..#=30(e4hpqUUTUUWoXVhk4e1d'-*...+=aeklVllhk747klklll7e_9,,$$#@...&,0de7pWqoikkk*&......+%=3ca|4kllk4bd03>*&+.........@3dgjWTWoVh44eee}4hpqWWohbac=&..+%>9ad|eklVVVVVllhVoZWZnkb'3=&..*a4hXnZWWZZXlh74feebb_aa'0c-=&..#9ab:ee4e47pWUUqih7hlVlked!3*&..&3014khlnqomh4hllVkkeb03=#@+.....&*=>90d:7hjWWWpgba3$*&+........+*cd4khhk774447khkVVVVl4dc,$&.........%*=,;aehpWUqpbc3$$@........+@@%*>,ca14kVVVledc,>#&+......%ceklVXVVVVVl4ebb1e7lVVVVV7b0>&....&$3;abe7pZWZnhe_9,=#+..........*,0_b4hVllhk7[47hmoWWWohfd0-%.", ".@>!)/sAAHGvLELDvLDvvGGGAts^{-@..@-{rytCHGHCAACCCCCAAsr]!c->=*@...*;{/zxGEEvHBBACCCCCBtz/);-%......#>;)/rsyBCCxz/F)!-#@..........&'/JHuEEvHAAAtxAtAAGEEEDxK/)-#+.@=)]rzsxBBCCCCCCHHvGvLvGs^{!-%.+>{zACHLDvvvGHHHHHBBtysszzr/]'$+.%;{F//rzzzxGEEEuGxxtAAxs^F);>#++>)/sAHHGGvGtxxBCCCBys^{;-=%......#>-;'{/sxCHDLLts^{;,=%.........@,~FrsyyxxyAttBACHCHCCts/);-&.......@%>-;)FrsAGDDvAK]~3=&+........&%=,;']rsyBCCBts/);-*@.......#~rsAHGGGGCAtxszzzytHHGHBAs/)-#...@$;~]^zytGGDDHs/{~c=&..........+-{FzsABHHHCCBABAGDDuEEvHtz/)=+", ".#;)FzyDDGGHCBBtBHGLLLEuDGAs/;&.+&-)/zAGvGvGCCCACACByzF);->=*@+...*;{/zsHuDvHCCCCCCCBBys/);=&.....+*-)FzyAACAByr/]'-*+...........%!/sHDELLHCCCBCACCCvLELHAKF);#.+%;{/stBCCCCCCACCGLLDHCCxzF);$&++=]rsxCCCCCCCHGDLLLLLCCABAxsr{>++&>;'){]//zstuLEvtsszzzr/]'!-=@.+={zxHLGvGHAysstCBBBxzr)'-*&+.....%,-;~]rsBBCCBAsr]';>#@.........@>!)]/rzzsAABBCCvvvBCBAz/)-=@......@#>-;~{/sBCCHHHyr]'->&.........@%>-')/ztBCCCCAs/);=%+.......@;/sALLGLGHByszzzsAHvLGGAsr]'-&...%,;)FzxACCCCAyzF);-#+..........@;FzxtCGGvGBCBCCGLEEEEuLvByr),+", ".%-~_[6OwwPKQ[2F2QIwwNNNwOKQ{-@..+*-~1QPOwwJJzKKzKr/])!-=$#&+.....&=;~|[8MwOKIrKKzKKrI/F~->%+......#-'(/QrzIr^F)!-=$@.............-([PMwwJPKKKKzKzKPJwwwJ[|~-*@..&-'|/rzKzIrr^/QIJwYwPKI[1!-=#+..&;~F[rKKJzJKJwwNwwwwJKKIrI/]'*...&*=,--!_126wwwO<21_)~;;-=>#@...$'2;'{}^KKKIIQ:(;,=#+...........+-(2^KJJwwJJKzKJJwNNNSNwJKQ1;$+", "+*;b4<5665<}:((_(|4558O685<:~=@...%=;~|<586KIIQQQ[2:('-*#%@+......&*-!(}5YY6IQQQIIQQ[2}(;-*&+.....@*;~|}[Q[[21(;->#@+............+$;1<6OOPIQ[2[22[[Q5J88<}_0-*@.+#;(:2QQQ[}}::::[5885Q22(~-=*@+..&>~|}[[Q[Q[Q<5688OOPPIQQ[[}|;*+..@%#$$=,-!1>>*#&++..+>~1[566P[}((_(2Q[2}|(!-*#@.......%*,;_(1}2[}|(~;->*&+............+&#==-;!(|}QQIORS6Q[}1_3=%@.......&#>-;_(}-;):[QIIIQ[|'-*#@.........%-~:<5665Q2:}[4[<<<5P<[|~3,*&....#3'14[$#&............@-_2Q5POJJKIIIIIPP6OMMMO6P[|;*.", "+>bgppig74bbdaaccadfegiiig7ba>@...&*390be777hk444e:(93=#%&+.......@*3cbeiqZpmhhhlhhk74:a;=*&......&,abe7hh44e(03=$&@+.............*9bglmlh7eb|b|b1be4hih7ba;=%@.+*0e77k74eb(dd_bf7gg7fbda9>$#+...@3ae747f4eeeffhghillllhh44ed;*...++&%#*>3cbijUWqgb09>$$*%@+.....,b7ghhg7fd000de474:ba;,*%@+......&=;abbee4e|ac-->$%+..............+&*$>-9_bf%&...........+&#=9cdeklllhh4bc,*$@.........&=3abbffefbfgjjqpi7febdc3-=%.....>0bgppm44ebd~;=$*&@............+,d7ioonmmlhhhkh77ghi5ipojifc*.", ".,fpqoik4ebac9999ccabf4Q4[f:a,...+&#>30d:f4h#%+..............*0bklVVh7e|bddadbb4khk4ba9,$+..=bkhlllk4|ddaadbe774eb(09=*&+...%317kk44eebbee477klVVlVll7edc%....+@@%>=90fiWWUjgb03,$*%+......@3ellhk74ed0c00b774ebd03*&+.......%,0|447k4ed03,=*%++...............+&#*-9abklVXoWWjheba9,$%@+.....@*>3de4lmoZoied09>*#@...........+&$,9'b4llVVVVkbc3>%+.........@*,90abeebe7pZWWom7ebac9,*#@+...@,b7pqoml7:d09,>*%%+............@,bgjWWoXVVVlllk747[hhlnoZpf0*+", "@;IwDDAsz/F)';;;;'~1/zsyxszr]-+...@$,;~F^zsyBAtysz/]'-=#&+........&;~F^sGLLGCCCCCCBCtxzF)3$@......={rstBBBts/F~;-*&+..............>)^sACCtsr/F]{){]^zyyys^F~9=@.+-ryBAAAsz/F]({{Fzssz^F]);-=%....%~/xAyszrr^/F/zssxAACCCBAxz/_=+....++#>-'{IyDEEux[_93=#+.......@'sBCBxys^]'!~{rsxsz/]~;=#+.......*;{rsyyxsz/)!-,*&+.................@#$;!{/sBBHGEDHxz^]~;>*&......%>;)/stCHDDDyrF)!-=#@...........+%=-~{^sBCCCCBs^)'-#+.........@=-;'_//r/rJtDLEvts^](!93=%@....@'rxHDLGtsr])!-,=*&.............@!^xHEvGHCCBBCCtysssxtAGvEtI|=+", "+;rtHAxKr/{!;;---;'~{/rzzrr/{-@...@%=-~{//rssyszz/F);-$+..........@>']^sAGGHBBCBACBAyzr]'-$+.....+=)/zyAAAyzF{!-$#@..............+$;FzAAttr^{{'!!~)]^zssr/{!,#@.+-Fsxyyyzr{'~'~~]FrzrF(~;-$&+....@;/zxszr/F](]F^rzyABAAAttzrF~=+......+$-;)/yGGGxzF)-,#++.......@'ryAxszrF)!;!)/zsz/])!-$+.......+*;{Fzsssz/{';,*%@...................@$-;~FzABCCGGts/F)'-#%+.....+#=;)FzyACHGtJ/{!,>#+............+&=-')/stBBABAs/);=%+.........+&*>;!{FFFFryHDGttI])!;,#@+.....&'^sAGGAyzF);--=*@..............&;/stvvHAABBBtxyzr^zzyytGtw^)=+", "+$ae2e1_!;-=*#%#***=-;!~~~!;-%.....+&*,-;;')))))~';,#%+............#,;~1[;))){])~;-*#@+................&=;)]]])~!--=>>,--!)()';-*&+...#-)){{)~;-,,=,,-;'!;;->*#+.......$;~))~!;;---;!')){{F]]]{)~;>@........@#=-~:[<<410-*#@..........$!]])))!;>=>,-;))~;--=*&+........+$-!~)))~;-=*&+......................@%*,;)]F[[[[e1';-=#@+.......@%=-']F^[Q[e(;-=#&................&*>-!(]]F]]{);-$%@............+&*=-;;;;_:}[7}:~;-=*&+.......+-)2[Q4}(~;-=**&+................=~(e4[[}2FF]]])~~!~))1224:~,%.", ".&>;;c3,,$$#%+.++@&&**>,=>=*#@......+@&*==------,>>#@..............&*=-'(:::(__'_~!;--,*%@........+*==-----,>*%+..................+#>--;--,==**%*#**=,>>>=%&+....+*,-----,=*###**=>==*##&+........&=,---,===*$>>,,--;;;;--,,=%+........+&*=-0_((a9=*#&+..........+$-----,*$#%#$=>>>=*%%@+.........+@#,-->>->**@+........................@#$=-;!!_~ac3,$#%@.........@%$-;~(||(c99,*#+..................@*=,-;;;;;--=*%&...............&%**>>,-9cc009,$#&@+........+=_(__ac3,=**&+.................+#=9'__a!'!;;;-;--,-,--;0;3>>%+", ".+#*==**$#%&+......+@&**$**%&.........+&&*$*******%@...............@&*>9cdba9333333,==$#%@.........@%$$$>=*$$%@....................&*==,=>>*#@@@&&%#*$*##&&@+.....@#$=$*$$%%&&&&&####&@+..........@&**$**##%##*#*$**==,>>$$**@..........@&$>9c009=*$%@............#**=*$*%%@@&&%****%%&+............&**$*$$%%@..........................+&%*>,,3933=>$#%@..........+@#=-0adac3->*%@+..................+&%$==,-,,=**#@+...............++&%%#**=,-3,=**%&+..........=0a033,==*%&....................@#=,9,333-,,,=>$$*$*=>,===$*@.", "..&*#$**%&&+........+@&&@&@+............+@%#****#%@+...............+&#*,99c993,>,===*#&&&@.........@%%*#*$*%@@+....................+&%##$##&@+..++@@&@&&@@+.......+&##*#&&&+@++..+++.++............&%%%&&&@&@@@@&&#*******%&&...........+%#=>33,>=$%&+............&**#*&@@....+@@&&@&@+.............+&###&@@++............................&#**====>**%%%@..........+@&*,90cc3==*%@+....................+@&#*******#&@...................+&&%##$*==**&@...........+%33,,==$#&@.....................+%*=====$=$=*$**#$%##**>*$*&+.", "..+&%%%#&@+............+.+...............+@&%#%&&@+.................+&**=>>>=$*****##&&&&...........+&&&%#%%+......................+@&%&&&&+..........++@@+.........@&&&&&++.......................@@&@++.......+@%&#**%&&&@+...........+&&&%***$%#&@+............&&&&+........+++..+.................@@@+++..............................@&%#****%%#&@@+............+%*>>=>$**@+......................+@&&%###*%##@+....................+@&&%#%**%%+.............&$$$$**%@+.......................&#***#%%*#*%&%&&@@%&%**%#&@..", "....+++................................................................++@@++++.+.++......................+.............................+..........................................................................+.+++....................++++.+..........................................................................................+.++++++...................+.+@+++++................................++.............................++++................++....+...........................+++.++.+.++++.+..++++++...."}; xscreensaver-5.36/hacks/images/osx_10_2.xpm000644 000767 000024 00000355212 10612445770 020572 0ustar00jwzstaff000000 000000 /* XPM */ static char *osx_10_2[] = { /* width height ncolors chars_per_pixel */ "468 256 35 1", /* colors */ " c #000000", ". c #A9A9A9", "X c #9D9D9D", "o c #959595", "O c #6B6B6B", "+ c #595959", "@ c #E8E8E8", "# c #E4E4E4", "$ c #E2E2E2", "% c #E0E0E0", "& c #DEDEDE", "* c #DCDCDC", "= c #292929", "- c #D4D4D4", "; c #D0D0D0", ": c #CECECE", "> c #CCCCCC", ", c #CACACA", "< c #848484", "1 c #4C4C4C", "2 c #363636", "3 c #E3E3E3", "4 c #E1E1E1", "5 c #DFDFDF", "6 c #DDDDDD", "7 c #2A2A2A", "8 c #D9D9D9", "9 c #242424", "0 c #D1D1D1", "q c #CFCFCF", "w c #CDCDCD", "e c #1A1A1A", "r c #101010", "t c #BDBDBD", "y c #060606", /* pixels */ "&55555555&5555555&&&555555&555555555555555555&5555&5555555555555&5&5555555&5&555555555555555555555555555555555&55555&555555555&555555555&555555555555555&5555&55&5555&5555&555555&5&55555&55555555555555&5&&5555555555&5&&555&5&55&5&&5555555555555555555555555555&5555555&&5555555&555555555&555&&&555555&&55555555555&55&55555555555555&&555555&5&&555555&5&55&555&5&555555&5555&5&5555&&&5&5555555555555&&&5555555&5555555555555555&555&5555555555555&5555555&5555555555555555&55", "555&555&5555555&5555&5&55555555555&55555&55555&&55555555555&555&55555&&555&55555555&555&555&555555555555555&55555&555555555555&555555&555&55555555&555&&55&555555555&5555555555555&555555&555555555555&&555555&5555&555555&555555555555555&5555&5555555555&555555555&&55&5&555555555&55&5555&55&555555&55555&5555555&55555555&5&55&5555555&55555555555555&55&55&&&5555&55555555555555555&5555&555555555&555&555555&555&555&&&555&&555&555555&&5555&55555&&55555555&555&5555555555&55", "555555555555555&5555555555555555555&5555555555&55555555555555555555555555555555555555555555&5555555555555&55&5555&55&555&555&5555&555555555&55555555555555555555555&&5&&5&&5555555555&55&55555&555555555555555555&&&&55&5&5555555555555555&5&55555&55&5&555555&5555555555555555&555&55&55555555555&555555555555&55555555555555&&&&5555555&555555555&&5&555&55555&5555&5555555555&5&5555&55555&5555555555&5&555&555555555555555555555555555&555555555555&55&5&&5555555&555555555555&5", "5&55&5&55&55&5&555&55555&&&5&&55&555&555555555&555555555555555555555555555555555&5555555&5555555&5555555&5555555555&55555&&5555&5&55&5&55&555&55555&55555555&5555555&&555555555&555555555555&5555&55555&555555&5555555555555555555555555&555555&5555555555555555555&5&5&555555555555555555&555&55&555555555555555555&55&5&5555555555555555&5555&555555&&55&55&5&&55555&55&55&5555&5555555&&&5&55&5&555555555&55&5555&55&&5555555555555555555555555555555555555555555&5555&5555&&5555", "5&555&55555&&5&55555&555555555555555&&55&&55&55555&55555&55&555&555&555&&&555&555&5555&&&55555&5555555555555555555&&5&5555555555&555&55555555&55555&555555555555555555555555555555&5&55&55555555555&5&5&55&5555555555&&5555&5555555&555555&55555555&5555&55&55555&5&55555555555&555555555&5&55555555&555&5&555&55555555&555&555555555&555&555555&&5555&555555&555555&5555555&5&55&555&5555555555555555555&555&5555&5555555555&55&555&55&55555&555&555555&555555555&55&55555&&55&5555", "5555&55555555&55555555555555555555&&55&55555555555555&&55&&5555555555555&5&5&5&555&55&555555&555555555555555555&5555&55555555&5555555555&5555555555555555555555555555&5555555555&5555555555555555&5555555555555555555555555&5&55555555555555&&555555&55555&55&55555555&55555555&5555555555555555555&&555&5555555555&555555&555&&5555555555&55555555&5&5555555&5555&5555&5555555&555555&5555555555&5&555555555555555&555555555555555555555&&5555&555555555555555&5555555555555&5&5555", "5555555555555&55555555555&5555555555&5555&555555555555555555555&5555555555&55&5555555&555&5555&5555555&5555555555&555&55555&55&5&5555555&55&5555555&55555555&5&&5555555&555555555&5&555&55&555&555555555555555&5555&55&&5555555555&5555&&555555555&55&5&55&5&5555555&555&5&55&55555&5555555555555&5&55&555555&5555555555555&555555555555555&&5555&5&55&55&5555&555&5555&555555555&&5555&5555555555&&5&55&5555&5&5555555555&5555&55&55&&5555&55555555&5555555&555555&55555555&5555555", "&55555555555&555555&555555&55&555555&&55555555555&5&&5555555555555&55&555555555555&5555&555555&5555555&&5&55&55&555555555&555555&555555555555555&5555555555555&5555555555555&555555&555555&5&5555555&55&&5555555555555&5&55555555555555&55&55&&555555555555555555&&55&5555555555&5555555555555555555&&555555555555&&55&555555&&5&5555&5&55555&5&55555555555555555&5555555&55&55555&555555555555555555555555555555&55&555555&5555&5&55555&5555&555&5555555555&55&5555555&&&555&555555", "55&55555&555555555&55555&555555555555555&5&555555&&55&&&555&555&5555555555555555555&555&55555&55555555&&&55555&555&5&55555555555555555555&555555&5&&&&55555555555555555555&555555555&55&555&5555555555555&5555555555&555&55&&555555&55555&5555&55555555&555&5555555&5555555&555555555555555&55555555555555555555&5555&5555555555&55555555555555&5555&&&55555555555555555&5555555555555555555555555555555555555&55555&&55555&5555555&&&5555555555555&555&555555555555555555&&&5555555", "&&55555&&5&5555555&555555555&55555555&5&555&55&555555555555555555&&55555555555555&555555555555&555555555555&555&&&5555&5555555&&555&5&5555&5555555&5555555555555&555&555&555555&5555&55555&55555555555555&&5555&5&&5&55&55555555&5&5555&&55555&5&5555555&&555&5555&5&5&5&555&555555555&555&55555555&555555&55555555555555555555&55555&555555555555&55555&55555&&55555555&&55555555555555555555555&&&555555555&&55555&555&55555&5555555555555555555555&555555555555555555555555555555", "555&555&5555555555555555&5555&&555555555555&55555&5555&55555555&5555555555&55555&5555555555555555555555&55&&555555555555555555&&&55&&&5555&555555555555&55555&55555555&555555555&&55&5&5555&555&555555&5&55555555&555&555555555&555&5&&555&55&555&&&&555555&5&5&55555&&&555&5&55555&&55555555&55555&5&555555555555555555&&55&555555&55555&55555&55&55555555555555&5555&55&55&5&5555555555555555&5555&55555&&55555555555555&555555555&555555555&555555&5555&55555&&&555555&&5555&5555", "55555555555555&5555555&555&55555&5555555555555555555&5555&5555&55555555&5555&55555&5&&&55555555555&5555555555&55555&55555555555&5&55&5555555&&5&5555555&&&5555555555&5&&555&5&5&555&5555555&55&5555&555555555&55&55&555&5&555555&55&5555&555555&5&55555555&&&555&5555555&55&55555555&&55555555555&55555555555555&5555&55555&5555555&555&55&55555555555555555&555555555555555&&5&&555555&555555555555&5555&555555&55555555&&5555555555555555&&5555555555555555555555&555555555555&555", "&5555&55555555555555555555&5555555555&5555&&&55555555555555555555&555555555555&555555&&5&55&555555&55555&55&55&555555555555555&5555555555&5555&555555555&55555&5&5555555&55555555555555555&5555555&5&55&555555&&&5555555&5555555555555&55555555555&5&55555555555555555555555&5&5555555&5555&5555&555555&55555555555&&55&&5555555&55555&&555555555555&&55&55&55&&55&555555555555555&555555555&5555&55555&&5&55555555&55555555555555555&5555&555&5555555&55&5555555&55555&&55&5&555555", "555555555555555555&5555555555&55&555555&55555&555555555555&55555555555&&&5&55&55555&55555555&&&55555555555555&55555555555555&55555&&555&&555555555&55555555&5555555555555&555555555&5555&555555&&5&5&5555&5&5555555&55555&55&555555555555555&5&55555555&&555555&55555555&555555555555555&5555555555555555555555555555&55&&5555555555555&5555555555555&&5&5&55&55&555&5555555555555&&5&5555555555555555555&5&555555&555&555555555555555555555555555&5555555555&5555555555555555555&55", "5555555&5555555555555&55&555555555&55555555&55555&555&555&&5&5&55&55&&555&&5&55&555555555&&5555555555555&5&55555&&555&555555555&&55555555555&55555555&5555555555555&&555555555555&5&5&555555555&555555&5555555&555555&5&55&&555555555555555555555&&5&5&555555555555555555&5&5&&55555&5&5&5555555555555555&&5555555555&&5555&5&5&5&555&55&5555555&5&555555555555&5555&5555555555555555555&5555&5555&5555&5555&&55&555555&55555555555555555555&5555555555555555&555&55555&55555&55&&&5", "&5&55&5555555555555&555555555&555555555555&5555555&55&555&555555555555555&5555&5555555555555555555555555&555555555555555&5555&55555555555555&55&5555&55&&&55&555&55555&&&555555555555&5555&&5555&&55555555&&55555&5555&555555555555555&&&5555&5555&5555555&555&&&5&55&5&5555&5&555555&55555555555&55555555555&555&555555&5555&555555555&55555555&55&555&55555&55&&55555&555&55&&&55555555&555555555555555555555555555555555555&555555555555&5555555555555&555555&&&55&&55555&5555555", "55&5555&&&&555555&55555564655%%5&5%%646%5&55555555555555&55&55555555&&55&5555&&56%45&%65&5&&5555555555&&5555&555&555555555&5&555555&55&&55555555555555555&&555&&555555555&55&5&555555&55555555&55555&555&55555&555&5&5555555&5&55&&55555555&55555555&55&5*45&56%55&4%&%655&5%&%55&4&5&%&5555555555&&56%&&555555555555555555555&&555&555&6*%565555555555555%5&&5%&5&*5%555&555&5&5&55555&5555&5555&36%&555%&&%*4555555555&5555555555&&55555555&55&555&55555555555555555&5555555555555", "&5&5&5&5&5&&55&5&5555555%4%%66#65&653&6555555555&555555&5&5&&5555&&55&55&555555&36&5*45&55555555555555&555&5555555555555555555&55&555&55555555&555&555555555555555555555&5555&55&&5555&555&555&55555555555&55555555555555555&5555555555555555555555555&55%66%&%55$4*&%*46%55&%65%&556%*%555555555&4$&&%5&5555&5555&5&5&&555555555&555555%5%56%6%55&55555&5&5%#*5%6535*&&55555555&555555&5555&555548%6%%6555&%5&4&555555555555&5555555555555555555&&55555555555&55555&55555555&&55555", "555555&555555555&5555&556&%&&5*%4&3&*4%&5555&55555&&&5555555&5555555555555&5555&546%3*%%555555&55555555555&&55&555555&55555&555555&555555555555&55555&5555555555&555555&555&55&55&55&5&555555&5555&&55&&&55&555555&5555555&555555555&&55555555555555555&48%4%5$64*%&$&%%%&5$4*&%6$%*54455555&555&%&&6%$&&55555&555&555555&5&&5&&5555&555&&65$&5&&5555555&%%6&*$*55&654%65555555&5555555555&555&5%6&456%4*&4%*%%&&5&&555&5555&5555&555&5555&55555&555555555&5555&&55555555555555555&5", "&5555555&55555&5&555&&5&4%5564&%6*&$546655&5555&5555&55555&555&555&5&555555&&55&*5%&*3&6&555&5555555&&55&&55555555555555555&5&55555555&555555555&5555&555555555&55555555&5555&555555555555555555&555555&5555&5555555&55&5555&5555&5&555&5555555555&555556#65*$&554645&&5&%5*6#*%5&554&&555&55&55$6&%5%*%5555&5&555555555555555555555&555535*6&%&55555555%*&%5%5464%54&6%555555555555555&55555555&%*4%&*&34*5%6%&555555&5555&5&5555555&555&5555555&5&55555&5&5&5&5555555&5555&5555555", "555555555555555555555&&5&68%466&5#6%%*5%55555555555&555555&55&555555555&555555555%5656&%55555&55555&555&555&5&55555&&5555&55555&555555&55&5&55&555555555555&&55&55555&5555555&555555555555&555555&555&&555&5&5555555&555&55555&5&55555555555555555555&&5&*%&$5&%65&65%$655%%5&5&%6%%65545555&5556%5&55545555&5&5555555&5555555&555555&55*5&45%6%555&&&55&45*5&6555&55&&45&5&555555555555555555&555356%4%*65*4&5%5&5&5555555&555555555&5&5555555555&5555&5&55&&55&5555555555555&55555", "55555555555&5&555555555&4%#&66%5%86&%5&5555&555&555555&&5&5&555&55555555555&555565*%5$4&&5555&&5555&&5555&555555&555&5&5555555555555&5&5555555&5555&5&555555&5555&555555555555555555&5555555555555555&&5555&55&555555555555555&&5555555555&55555555&5555%4555&%&4&%*%%*%$6*%56356%%5$*#*&5555&5555845%&&&555555555555555&&55555555555555%55&655*&&555555%56$55%&4*&$6645&55&555&555555555555&555$*64&&4*$&#&*4%555&&5&5555&5&5&555&55&55555555&555555&55555555555&5555555&5555555555", "55555&55555555555555555564*55%5%4%5%5%&45555&555&555555555&55&5555555555555555&554%66&*5555&55&5&55&5&55555&555555555555555&5555&5&&5&55555&5555&55555555&&&555555555555555&&5555555555555555&55555555555&55555555555555&555&5555555&&55555555555555555&6556655%66&46&%55*$6%*%&5$565%*5555555&546%%6&%5&5555&&555555&5555555555555555&5%65%&53555555&5&55&&&%5%54%%%5&555555555555&&&5&555555555%%&55*4&%*%&%555&5&5&55555555555&55555555&55&555&5555555555&5&55555555&55555&&&5555", "5555555555555555555555555<<&%&5X<&6$*5%&5&55&55&5&&555&5&5&55555555555&555555555%+=$*46%55&555&55&55555&&5&&5&&555555555555555&55555555555&5555555555555&5&5555555555&5555&555&555555555555555555555555&5555555&55555&55&55555&555555555555&5555&&5555555*%$t+5&%$oO&%5&&%6&557+5&6%55+=&5&5&555&%& o$&&555555555555555555555&5&555555555X %5&6%55555555*36&%++++.%5*%655555&55555555&555555&55&&&%6%5% o&%555&%&5&5555&55555555555555555&&555&555555&555&55&5555&5&555555555&55&55&", "&5&55&555&5555&5555555556X .$4wr.%5%*%656%465%5&555*$&%%%&%&%5&5%*$*5%*4$5&%555%*+756545&.t&5%*%554645*&5555*536%*%%66%*555%*t.55%&5%5*4466466%o:*%%55%&%&$6%%*%*446%55&64&%455%&4&%&%55%&3&*%*5*44&%55565$&55*%5&5%&5&%%*$%&*%555&.t5&555%6%5&5555%6%54555%X 46&6+75645&5&55%=+%&%%&4+=*4%*35&5&%% X5&%&5%&55%%%5&%65%&&&4&$55%654*:o%5&X 5&545&465&&%*465%& 1+2 <5%636&%&556555555%&*%&%%5%6*4&&5%5*% o&*$6%&5&55%55&.t%&%oq%55&6%65%5&55&555%5555555&555555&&555555&555&555&55555", "&&555&5555&55555&55&5555%&17*511&6&4oo45%&&6%555563554&*&..56&4%..*$$&%to4%*45wo;+7645%6%=+64*%5oX6%*545556$5o*%6to653*%.o0&3+7&&&%qoX4*&%4*.w6 o365*4&5&&6&5&66tXt4&6&5%44%*5655tt*4%465&.ot5&&tXt$6&&&3tX56qX,5&5&&:ot&555&4&5%&&7+*&4%>o:&%&%55oA*56$5X &%4&+=566%oX5%*&7+6%&wX,+7%&6&&%64..& o5$5.X,5%&5*&&$5%*5%645..5%65*63o 55%o $to%6%5%to5%%6%&45 o&527*&%oo&*4$&%%65&%*636&Xt$*55%*.q56%3* X;Xt&&%5$5*65&5=+*%5 X6&5%,X.*555%5qX,5*5&5&555&555555555&5&&55555&555555555", "55555&555&55&55555555555&&t Xtrw%*.r9er.5&7+5&+=556&&%+71er1%%>eer1%*41ree,&4< =r9=&%&63+ o4.reer.%%&%*$=1e=551re9q*%er72%o +5Or7re%%+92=.7 64&6y.35>r<&o 24w e0*e+3* 7,$Or%5 o54=+%57+56t t5+2%$=rt555&&&55%%o ++++7=6$r+6%+r&&=+%, X&w2=&65&4*1=56X o61755o t5&w .%5*&%=+5$%22oo174t 1>6%&+=5%&55.o X4+=555* X4*$&%%1e%5rt62154512$X *%$ o4o 56%%&&%. t*4*5215%&124X 54* o%5=+%6 o55% o5 X*57+*%=+%5OeXoO 557+56%56%455%%o ++++7=5.y:5%, .%=+&$6X &%&6 otyt=<12.e&o ===7.6+=6&%&*$&6 o5%4 o& X%4=+%&7+3%* X&*+=$5*X *5 X$*=+&555555555555555555&555555555555&5&55", "55&55555555555555555&5&5&55%=+5%5. :*60 .4=+4&1=%5%55&+7*$o %%r<56$*$11&56%6+=#5$+=%$*&%3=+%6. q63w .&&5*#=+%5*11%4*5$5%*< .$+=646r1*# o&+755%5 o4&&&4&5=19o6%21%4*125X 55: o*X *4*%545t t*&%*21%4*125X 5%% o36=+4& o4%t t$ X64e+3*7+555X .5%>4. .%.r=655&&&72%&5r+%6+r%%&45&7+55$o .45w5w&%> .6+r4&$ <&t X%+=4645 <&&&&554%,t:,=+;0-o+8*&6&5o %65%+=%%r+45+r5%=+%. .&.r756$*5%22461 o6175%X t%Orr&%rr<&5+7&&o 54%5%&o t&5X *45 o5o .&%w5556%% o5&$*5r+6&+r*42r25t rt45=24&5q6+7%5%6$6$& +65+e6% <5< +*4=1464 <&6t X&&=1&5 o%&=+%55&&555&5555&5&5555555555555&5555555", "&555555&5&&5555555&555555%5%=+%&&%.reer.&5< 7e1=56645&+=5%o 5&52r7rO5%O 7e2%42r=e1=565%55< 7.&.r9er.4*%5&57+6%6&O =92%.y7r2$5tye<%1r7==r.+=%&551r=&&5556&r<6$6&1r=r1&$&err< o4o 5555&555.rr7y531y7r15&X &55 o%67+54 7rer.*51r92=+q0< 9Xw9+>00+ 888***o &&%5+755.reer.5%=+552y=91=&%&55&.r9r< o%>=r7r<5&. 15$2 w&%+7%*X 5&5565%er15X &5& o5%O =92&%665% X&5%6$.reer.&4O <6&r9&%5ter7r.6+7%635%&65 7rer.561re27+6%< 7.&1r=%%Or=r=w65 X557+*555&555555555555555&5555555&55555555", "555&&5&5&&&5&5&&5555&5555565%&8355%6XX*5%&*tX%5$5$5*5%*56%%*5%5%tX>556#wot5*6#.X*4*5%%*&4&to%4*$oo54*5$*56&%*&%5*:Xt*%&qX.%6&&qo0%&..%;o64&&%55&..$%&%55tr4%6$*%tot54*%&Xt555545&55&555553oo6&65tot*$55&&%556%%&&65 oto88--0XX-0:-ww.o;:qq->:0:q;0-0---8**64&&4*%oo&5%&5%5%6.o5%&$&&%&%5wot6#&&35.o,%36$&5%64&55%%665564%64%%%%ot5&5%5655&5&qXt6#535&%5*%*$5645oo555&%%84$4%*%56%.X&6$56&55*$5&4o6to%%*#*..65&$55to$5*..456>X.64%&556&4&45&&&&55555&55555555555555555555555&5", "555555&5555&55&5&55&55555%66564%&$*6555$%&3*5%&*6%%5$6#645%6*%5&5654%5&5&%$5%&*5%5%&%5&%&663*6&5%*&5565&&55*#%*4%$*$5%4*%6%&535%**4&636*55%5&&556%6%%&*41+5*%&4%54%&&%6&5&6%5564555&55&&*%54553%&65%&&5&$6&546*565* o8-;w:,:,,,q>www;w;;q;0;0-0w;:wq,w::;,>w>;0-8*8*5&6465%%&$6%5*36%46%5*%6565*%55*5%&5%$$*&$&556455%*564&5%55%56&*$54563%%*5%*%65%6&4**556&5&4&565&&*%&4$*5555&6%5%%%&&45%4&%%45$4*55%6&$*555558$55&*54&*3&&5%&5$64%*54*&%5&&%555555555555&55555555555&5555555&555", "&555555555555555555555555%5&45*&$&54&5%656&&&*%44&%4*55%65644*$545$*%6&5%%6%&6$%5&565%4&%&&63&45*4%&%45%&%5&6&&%*5$845&$%5&%**$5*4%%%65%&5656%6455&*5%%&O:66&4&656&%4*%4%%%55%5&5555&555%6&&4&*&&3%*&4&&664&555**-0+.q:q0>0q;;qwqq-q:;>:::qq::>qw0>;;:;>:0ww:qqwq::0-886*$&5%&$65%65%&5%*%45$%6$*4%64%%5*55&%%&%%546454%3*%%5556%6$566%%&&%*3%8#&&45&%6%%&%546&*%&4%6%4*&*5%%&6&%#*46*&5%&55*$%5*%**45%6$4%646*45%56%$%&65$*5%%5646%6%4$*54*4%&&5&5&&5&555555&555555&5&555555555&555", "5555&5&&5555555555555555%&6565#5666$65%&%$*4&5&556554&6&54&&&$&&*&548$$**4*&6%$*%4*#&55%*%4&*5654%*%655&*55%5636%6%%%5&&*555$5&5548&%*%&554%5&%*55&$6*$&3&5$*%$&6455%6&5&6&5&46$5&555&555566&54%5*5%%5*454*%888-0:;,;w,;w0;;>;0;;:,;::;;;q>0qw;q;w::w;:q;w0q00w:w,w>00-8**&*563%&%&5%5%5%&&*555&4&55565%#6%55*$*4*85%6&%6$*3&6%465&54%&555645&6&%%*&4&&5&%56*535&55*%6%$4&%4*454&%465%%%&%%%5%*5%%&%66*35853*3555%5$6&6&54%5%&&&%6&%5&&*55%&&5*$5&5555555555&&5555555555555555555555", "5&55555555555&55555555555%5*$65655$*$5*%&*$55&%5&$%*5$%5%*$55&5%%6%64&&4%&%%$664&6%*5%5*55&5$%*%6&5&$&&%466&$5&46556*5%*456&&65%*5$6&%55%*&6&$&3%56&5&$&6%6455*4565%%645636$5*%&55555555%6$*%&564&%5*63&6*6--q,w>:,0;w0;;:;qw->:;w0qq:w;wqqwq;q::q0w;ww::qq:q:w0q:0:,:,>>--654*5545$*%%6&%6$55&%5&455646*46%&56%*%45%6%6564&%%%6%4564&5*5%&6&&$5*4&4&5%*656356&5%&&4&5&6585*$5%&5&4*64&&556%5&55&8%%B%%46&&%&5&&46%4%6%*5645464%*$%6$5&8$553*5555555&5&&55555&55555555&555555&5&5", "555&555&5555555&55&55555&%&%X.&4%&5%5546*$*55$5&%655&%*%5%6555&&6%56$&55&%&566%56%%56*54&%&6&&6&%*%%*#55&%&56%5&4%6536%%564&546646&%&5%6&$&54%6566$&%5&&%3&&*55&%&46564&%**646&555&5555554555&&455*&$6**--00:,;:q>0:q00,q;>w0:q;>0w:w0:w;q-qw;>;wqq0>;:q::;;wqqqw00w->ww::0q--8&66%535&3%&554655%&*4&$*%&*%5%556&655&4&$%&$&*%5%56456%55&6454&5546$*%&63%6%6&%&%553*%%*%%6%%556%%5&$&%5&%*5455%5%$%*4565%*&5&%%&6&%&6%4455*5&5555646%%%$%*6%6&&&5555&&5&55&555555555&55555555555&", "5&5&5555555555&55555555555wreeo5&%65%6$5555&4&5%564556%&6555&%*%&55*&&&&%56$*$5655%&4%66o 6%455%*3*$%&5%%*%&%555655%&%&655&55&455&%%&5%%5o 5*%%6%4*456&4&&%&55&&&%55%&&56%46&%%&555555555&&555%*6%466&8-0q:>;q0::q:;+9:0:q:;:qwq;q>q::::++++Xq;qq;q>0;,;qqq>0;w;;>:;:;;qq;>w:q88*5&565%&+7556%&5&4&6$*%&&36&6&&5%5%5556&6554&%*%55646&%5%4*5655&55%6%$&655&&5%6645&%$*3*&%5*4%%&%6%565&%&$&5%*%&&%&%&&55%65655&%6%6%%&&%66556455&4&&55%*5556&%5%&55555&5555555&55&5&555&555555555555", "555&555555555555&555555565Oe5&%54654*55&55&4*4&5%5%&5%555*$&6$&555&%5&%5555&%%55&%6%%*%&o 555555&%55%6%5&5%456&5655&4*&$&46%5%64&4&65%*%5o %6&464*3&5%4&5&%%64*%%*%%6&%5&5$64&$5&4*$5%%6&%&4&&&$&*5&80:q:;w;:qqtoqw:+9:qqwq:qqq:;:;:q:;; 2+2 <;:qw0qw;;w:q;;:qot:0::wqqq:q;q:q:.X8*65*5%+=%55%%&5%48$%&5qo&5%t.55%645&6%554&63*5%*46&6%5555555555555&55555555555555555&5555555&555555555555&555555555&55555&55555&5555555555&5&5555&5555&555&55555555555555&55&5&5555555555&&55555&5", "555&&555555555555555555555+=36%4wo.*$555*q.*%5%5&>o.5%*50o:%%*%56&45%&>o,#*5565o55:oo$66o 5555555*oX*$&&&Xt*5464to.44%$oo%%%&64&ot45&*%otX *%%>X.56%36&%&&oo*5&&65%o3&*5%&5&.X66%*#*tt&%:o;855$tXt8;w>Xot;:w:;:o ,0:+=,XX,-qw;XXww;0:qwq o:q2=w;;qo.:wwqtoXq;: o:;wqXo.q0,:>tX>+=;;***%6+75.X*45&&535&$&o 55&+=5*4&&.o0655&6%ot5%&5$&4&455555555&&55&5&55555555555555555&5555555&55&55555555555555&&5555&5555&&5555555555&555555&5555555555555555555&555555&5&555555&&5&55555555555&", "555555555&555555&5555555&+ +8:17;:Xy9rOqq< 9eo:= ;>re9 -**6+919r9,4+=*%X %5 7o +$:=r=y<%&=1e= <6*$&6%4*5&55555555555555&5&5555&55555555555555555555555555&555555555555555&5&555555&555555555&5&5555555555555555555555&5555555&5&5555555555&55555555", "5555&5&55&55&555555&5555%%+=54t o*%=15$ =:5635&&=1&45%t t5+2$Or%$*rtt t6+2*&7rt5&w&5> o4o 55555&+954%54r<%Xr5&1e:6r+56+r%5=r.*1=*$e+6%+ &%=+6&56&55&5r+64+r64=rt$*%%&6+ <5:rO&o 1%%t t%+256 <0:>,o t0wq:q;,;o q0;+ O;< ;>22qtrXw0;>qq o:OrXq;rO:orww91:;q:, o0,0twq19q: 9tq0+9>:0,q0-+ <*wrO&+7#6o 55X *%&+=%5617%6X t5=r.%1=%$6&55*$555555555555&&55&&5555555555555&55555555&5&555555555&555&5&55&555555555555555&5555555555555&5555&5555555555&&5&5&55&555555555555555555555555", "55555555&5555555&&555555%6+7*&Oe&45 o*<25O9oXO $%=+%5%54.o o6X 5&5&&5< O*56. ooX X&r<%&%&. >5%q .&=1%%+7&t t%5o $*1yX545$655. :5%; .*=+&%%*%$%+=446+75o %*&OeXXO *-re.:qq. 2tq;,-::;o wq>+e0:o q;yOooe+qw:0qq r.qqX ooo o;2row:0; o:0>wto2=w: o::q+9;>q:w,q+=6&%+=$+=65o *%o 356+7*&5r<4%*eO5=1%5+7*&5565%%55555555555&&55555555555555555555555555555555555&555&&555555555&555555555555&555&555555&5555555&55555&555555555555&55555555&55555&5&&5555&55", "555555&5&5555&555555&555%*+=%5+7%5&o %* X54565%6,1 9t*+r=77=%5214=<&+r7=7=6%=+4%*.rr7 o#o &5&&55%OrrX%X 77==.$ X555&o &%65 o%7+6&+=4X 6&%o 8%:1 et%&%&$o %*65 o47+4%5%6*&+7&&$+=%o 64%+r====0>.= 2q;:or O:0>q>wo ::;+9:qo wq e9=9O;,;wq: +9q:0:w:0+9***+=5+75$o $5o &%*+=%&5 X&&%7+%7+&5+=5%%%&&%*555555555555555555555&5555&555555&55555555555555555&555555555555555555&55555&555&5&555&&555555555&5555555&55555&&555555555555555555555&55555", "5555&&555&5555555&555&55&%+=&5Oe5%% .5=+%%+7&o 655X %*5%,e2$56%*. :54w .*=+&&&%%5&+7&5521&X 655Or5*-q,qw:XrO0:0;O Xq:q;-o q;:+9:;o 00rO0qq>q->0:; o0OyX>. .:>0;,-0te2q0 o;,Or.>+=:w oq>0+9qqq:0;:+9w-8125+=5&< 65o 5&5+75%&r<56%eO&=+#*+7555*%*4555555&&55&55555555&5555555555555555555&555&55&555555&555&55555555&5&5555555&55555&55555&55&55555555555555555&555&5&&555555555555&55&555555&5", "&55555555555&55&555&5555%&+7*4t o6$71%6 o&55%%6%>5412%>rO&5w%%&rr+45>rO5&:667+5%5 <%t o%o 555&55>%65+ew%6;*r+&5+r4%=+55+756yO6w7 %6w5%12555%%*e+5%+r657+4654&5%+rt%:r<%o %55>rOqwtw0t;:eOqtw;t X:q:q:o .q:+=;:o :>+rtq:tqqw;:: oq>2etw92q;qt0tw;120w O:0+ew;29:0 oq:>+rq::qq>0+r.qtr<&+96w9 55o t5%+r5551=45o t67+&%+=56X+54*%5555555&55&&55555&5&555555&5555555555555555555555555&55555555&555555&555&5555&55&55&55&555555&555555555555555555&5555555&555&55555555555&&&5", "55555&&5&55&5555&555&55556+756545*Xre=r5%7+5%51r77=r.o %65%5&Or= <%*ter7r.*q=r=r.6.reer.&%=+55+7*4< =rO %&2eer.&64%5&.re9r.%&=+5546&&5+rr=r236o 448*ore9rw;r9ret0Xr=r2w;q:;>0er1;+9qqo :::2r9r+;:;::q oq>te2q.er=rXq2eerXqq1r9q.ree1 1: o>q;.yeO;;qqq+rr9r208trerO &%&er15tre<5w=e=r<557+5%+=$*+ %&%65555&555555555&555555&555555555&&555555555555&5&5555&5555555&&5555555555555555&55555555555&55555555555&555555555&5&5555555&&5555555&55&5&555", "&55&5&55&555&55&555&&&55%5&*%5&%qo.64**46%*%6%55%.o;&%&%6o.6*%656%*4$%&X.5&&54$*&5..*;X55&64&%5%4tXt**365.o%%&&5.X,&4%*Xo54665%&%5%5*%tX,3&466.X:%%565%%5*XX6%555*%5*5$&%+7$ot66$655880;;oXqqwqoo;:,0toXq:q;;0w:wo.0:0;w::;:;:.otw0;q;wq:q:q:wq0w-Xo;q::Xot::qqXX0qtot-X.::wq;:qtot;w;qw..;o.;q-8,o>$&5&%$ot*&>X0*54.Xw65454*5&553*%%65&&555&555&55555555555555555&555555555555&55&5&555555&55555555&5555555555&55&555&55555&5&5&5555555&&&&5555555555&5&5&555555&555555555555&5&555", "&55555&555555555555&5555555456%6&%665$46$63&*%%5&5&6%*#&%%64%&6%45556&4**$*%6&*#4&65&65%6%*&#*&%&*44$45%*358%54&*&#*4&5%$66%55&&&%65%%6&5*556%$&%*4&&5%645&5664&6#*45%4&&+=6&%$5&%%880,::w:;qq:w:>0;>0w0q;;w:>qwwq:q:>w;;q:q;;>q,-,qww0;;>;qqq>qw;:qw:,-;qwq;qw;;qq;wq:w;q0:wq;;:;>>;::;qq:::;w:q-8&6%4&6&%%5%5%8%%%%5%5*%&&%6%56456%$6%555555555&5555&55555&555555&555&5555555&5555&5555555555555555555555&555555555555555&5555&&555&555555555&55&&&5555555555&&55&555555555555&555", "5555&555555555&5555&5555%6&5&3555*5$6%5%*65*465%4&4&4%&&5*46&%%&55355%5%5%%5$54&*4$5*3&64&%%6%55%%&%&&65%65%%5&5%584%*$&*$&54&%5*4$&%64%4*%4*5555%5$%656&456%554%55*%%&%5o<555*%6%8-;,q:;q0::>w0q;;:q:;:;w:0w:;w0:q;:;;::q;w;:0q;q;:-:;,:w>>>>0;;0>w:q0>>q0;>wqq>qqqqqq-:>;;;>:>q;;;w0::;>::q,::wq-85*&45&4*%4654&&5%&55&%$655*%56555&*%5555555555&5&&5555555555555&&55555555&55555&555&5555555&5&555555555555&5555&5555&&55555555555555&555555&5555&55555&5555555555&55555555555555", "555&555&55555555555555&&635*%*%&4548*566$%*5%6%&*5655&%%63&5$6656$*54%5%4&*%&66%%&*%*536&%*%5&%%5*46$45%6$*%%5%5&&$&45%*45&&&&&436*$*&&&%*%545455566*%&%6%5*4*6&5&&45565%%6%5%%5**-w>q:q:,q;>00:qq>0:>q>:q0,0;w;q>;:qq>;;q;:,q0>0w:q:qw:wq:0qq>wq>;;q:qw0>;q;;;q0w;0q;>q:0:>:q:;qq>;0>:;:0q;:0;,:q,-6&64%453*%55&466%5*%546&$*4555%56%$65555&555555&55&5555555&555555555555&5555&55&5555555555555555&555555&55555555&555555555555&&55555555555555555555&55555&555&&55&&5555555&55&5&", "555&&55&555&55&5555555553*5$55&%&653%545*&4%*%4645*45*4&&&6%&6%4&5%5$&&5*65%&%5&5$&$3*55&&&%%655%5&6*%&&4&4&5*4546%66%&%*$*53$*&5%4&%466&#&6*$*4%%5%$5*5%*53*35554$5*4$&5&%*%&&680,>;;wwq>q0:ww00q:::q;0qqw:0,0q:0::wqq::;;w;0>;>;q;>>0;0*888-0:,0;,0wq;>-w>q,q::q:,::qw>q,0;>q;;;:;w-wq:;:w:>0::0:w:86&55*6&54*5555&4*4&&5%546%&4664**%555&555&55&555555555&55555&5&55&55&5555555555&555555555555&&5555555555&555555&&55&55&55555&5555&5555555555&55&55555555&555555&555555&5555&55", "555&5&55555555555&55&5555&5853&5%6555*%&555645&4*%&&54*%&&663&65*3*5655&&3&64*%6%&*65%&&5%%555%5*5&%%*4%%*5%*$*55&&3&&&45%&66%&%&&54*$555*63%&%%5&56*6$**4&5%554%*%&556%%&4%&5*80>:00,:;w0q:0ww>w:0w;q:>:w;q,0q>:0qwq:wq:wqwqww:qww;0,-8#%#@44--;>:0ww>w:>;00qqw>;;;;w;:;q0>:->qqw;wq>:0qw0qqq>;q>:wq;-5&5545&*$&&6456&%$*3&*&&%%%%$&6%55555555&5&55&5&55555&5555&55&5555555555&5555555&555&&55&&5555555&555&5&5555555555555&5&555&55&555&5&5555555555&555555&5555555555555555555555", "5555555555555555555555&5&%5%&$6%&%55&%56&%5&%*$5645554%6&54*&5%6%6$56%5%%6555%%&6$55%&5%&%&&466%5555*3*&55&%%6%55&%*545*%&3655%64&*5%5&&5%%*5&&&55%5&$6%&46%56%&6%6554&5&5&548-qw;0,;;:q:;::>0qqq0>:qqq:0>:;:wq;;:q;:q;w:q0>;;w;:;q>:08$33#$###80wqw;;:;qq:q>:-:;:;>;;wqq;w0:w;qqq;q:;0:;wqqw:::0:qq;w;866%&5&4*53&65&$*5&&554655&&*4555&55555&5&5555&&555555555555555555555&555&5&&55555&&555555555555555&&555555555555&55&55&555555&55555555555&5&&5555&555555&&55555555&55&5&5555", "5&555&555&5555&55555555555555&555&555&55&&55555555555&55555555&5555555555555555555555&55&&555555555555555&55555&55555555555555555555&55555&5555&555&5&5555&55555%5555555%65%6-;:qq::qqqqqq::qqqqqqqqqqq::::q:q:qq::qqqqq:::q::::;w;w:-6#@######&-q>;:wq::q:q::::q:qqqqqqqq:qqqq::qqqqq:qqqq:qq::qq::::::-6%5&55&55555555555&5555555555&5555&5&555&555&5555555555555&55555&55&5&55&5555555555555&&55555&5555555555555555555555555&55&555&&55&5555555555&5555555555555555&55555&555555", "5&55555&&5555&5&55555&55555555&55555555555&55555555555&55&&5555&555555555&&555555&&555&5555555555555&555555555&55555555&5555&555555&5555555&55&55&&55555555&55555555&555&&5*-;q:qq:qqq::qq:qq::qqq::qqq:q:q:qqq:q::::::qqq:q:qqqq:qw:8%####33@#%8q>qqwqqq:q:q:q:qqq:qqq:qq:qq::qq::q:qq:qqq:::q::::qqq:q;-655&&%55&55555&&555555555555&555555&555555&55555555555&555&55555&5555555555&55555&&&5&5555&55555555555555555555555&5555&555555555555555&5555&5&555&55555555555&555555&5555", "555&55555&55555555&555&&5&555&&5555555&5555555&55&55&55555555&55555555555555&55&5&55555555555&55555555555555&5&&555&5555555555555555&55555&55&5555555555555555555555555565*-;w:;q::q:q::qq:::qq:qqq:qqq::q:q:q:qqq:q:::qqq::qqq:qwq>q*3@########8qw:qq::q:q::qqqq:q:qqq::qqq:qq:q:::qq:qqqq::qqqqq:qq:q:>;-6555%&5555555555555555555&555555555&&55555555555555555555&5&5555555&55&555&55&&55555&5555555555&5555555555&&5&555555555555&&5555&5555&&555555&55555555555&5&55555555555&&", "555555555&55555&55555&5555555555&555555555555555555555555555555555555555&&555555555555555555&555555555555555555555555555555555555555555555555&55555&&55555&555&5555555&55*8;q:qqq::::::qq::qq:q:q::qqqq:q:qqq:q:qq::q:q:q:::::q:qq:,q&#@#3##3#@#*;,w:qq:qqq:q::::q:qqqqq:q:::::qqqqq:qqqq:::q:q::qqqqqqq:w;-*%565555555&555555&5555555&555&55555&5555&5555555555555&555555&5555&5555555&&&555555&&&555555&55555555555555&55555555555555555555&5555555555&&55555&55&555555&5555555555", "555&5555555555555&555555555555555555555555&5&5&55555555&&555555&555555&5&&5555555&&555&5&55555&5555&555555&555555&&555&5&5555555555&5555555555&555555555555&555555555%45&-;q:q:qq:qqq:q:qqqqq:qqq:qqqq::q:qq::qqq:qqqqqqq:qq:::qq:q,:&######$3##&;,w:qq:q:qqq::qqqqqq:qq:q:::qqq:::qqqqq:q:qq:q:qqq:q::q;qw;-*55555&&5555555&55555555555&&55555555555555&5555555&55555&&5&5555&5&55555&55555555&555&5555&5555555555555&5555555555555&55&&5&5555555555555&&55555555555555&55&55&&555&", "5555555&5&5555555555555&5555555555&555555555555555555555&&5&5555555555&&5&55555555&555555&5555555555555555555555555555555555&5555&&5555555555555555555&&5555&55&555&5556-0w:qw:qq:qqqqqqqqqq:q::qq:q::qq:qq:qq:q:qq:q:qqqq:::q:qq:q,q6######3#@#&;,w;:q:qqq:q:qq:qqqq:q::qq:qqq::qqqqq:q:q::qqqq:::qq:qqq;qwq-*%5&5555&555&&555555555&5555&555555555555555555555&55555555&5&&5555555555555&&55&55555&5555555&5555&55&5&5555&5&55555&5555555&5555&&55&555&555555555555555555555555555", "55555555555555&55555555&555&&5&&555&55555555555&55&&555555&555555555555&&55&55&555&555&555&555555&5555555555555555555&5555555555555555&555555555555555&5&555555555555&*8;qw:q:qq::qqqq:qq::q:qqqq::::q:qqqq::q::::qqqq::qqqqq:q::q:,;&#@####3#@#6;,:;q:qq:q:qqq:qqq:q:qq:q:qq::qqqqqq:qq:qq:q:qq::qq::q:qqq:w08&5555555555555&55555555555555555&55&5555555555&&555&555555555555555555555555&555555&5555555&555555555&5&&555555555&555555555555&555&555555555&&555&55555555555&55&555", "5&55&55&5&55&555&55&&555&555&&5&555&5&555555555555555555&&5555555&555555&5&&&&&&55&&55&5555555&&55555&555&5&55555&&5555555555&555555&&555&5555555555&55&&55555556555&&8-:q::;;;wq::qqqqqq:qqq:::qq:qqqqq::q:::qq:qq:qqqq:qq:::q:::q>;6###$######&;,q;:qq:qqq:qqqqqqq:::qqqqqqqqq:::qqqqqqq::q:q::qqq::q:qw::qw0855555&5555555&5555555555555555&55&55555555&5555555&5555&55&55&5&555555&555&555&5&555&55&55&&&555555555555555555555555555&555&5555555555555&555555555&555555&&5555555", "5&5&&55555555555555555555&5%5*54646%6&4&55&5555&55%*%%&%565*%5&55555&55555&555&555555555555&5&55%6%5&%55&&55&6%&55555&&5555&5555&55&5&5555555&5555555&&5&&&55555%&655*-qqq:;;q,0:::qqq:q:::qqqqq:qqqqqqq::q::q:qq0>:;q;::qq:qqqq:;w,;*###4###$#@&;,qqqqqqqq:qq:qq::q:qqqwqw:qw0::;::qq;:w;q>;:;q;q::::>;:;w;::>0*&&555&&555&5&5&555555&55&555%&%5555&&55%554&&&%5&5&5555555555555&&555&56$*5&56&55&55&555&&55555&$*&55&6555555555555555&&555&5555555&&55&555555&555555555555&5555555", "&55&&&&55555&555&5&5555&&$&&&$46%&663%*%5555555558$&%54&%$&%&%*%5555555&5&&555555555555555555555&$55*5*4%&5%6&5555555555&5555555555555555555555555&555555&5555555555*-qwq00qw:0:qq:qq::q::q:qqq:q::qqqq::qq:q:qq>;0q>q;wqqq:qqq:;qw,q5@@@##3##@36;,qq:::qqqqqq::;;::::::w0;;:qq:q>q0q>>q;>q;::w0:w0q;0;:0;>:wq0w-*555555555555&5555&5555%%*%5%55555555&&656*53&&55&55&555&&5&&5&5&&555555*$5&6%4&5&5&555&55&55555*355&%455555555555&5555555555555&555555555&&555&5&&555555&555555555", "55555&555&55555555555&55565&55*3&&5585&%55555&5&5$65*556&6*54&465&55555555555&555555&5&5&5555555%55%$53665%6$*3*555555555&555&5555555&55&55555555&5&555555555555%&5*-w>qq:,:w:0wq:::qq:qqqqqqq::qqqqqqqqqqqq:qq:0>w0q0,0qqq::qqq;>::q*##4####$@#&;,::qq:q:q:qqq:qq:w::qq0>w;:::qqqw>qq0qq0w0q>0q;w;;>ww:w::;qw;>:-*55%5&55555555&55555&5&6%&55465&5555554*%456645&555555&&&5555555555555%%*%&55&5555555&5555&555%%*%&55&555555555&&5&5&5&555555555555&&55555555555555555555555555555", "5&555555555555555555&555*36%*46*&45%4*4*&&5555555*%*3%*%5356&&%%&55555555&5&5&555555&5555&55&5555*566&6$644*%5*4555555555555555555555&555555555555555&&55&&555555568qww;:0;0>;q;q:q::qq:qqq:qqqq:qq:qq::qqqq:::::q>;w:0:qqq:q:qq;w:>;&#@###$##3#&;,qqqq:::::q:qq:q;;;;;qq,-:;>0q:0>00w:q;w;wwqw;:qqq:qq;;;;>;q:q,08*5%55&55555&&5555&5555%*$6%5%5555&5555&5%5&55&555&5&5555&&&5555555555*&$55%4%55&555&555555&5565455%4%55&555&555555555555&&5555555&5555555555555&&555&5555&&5555&5", "55&555&555555555&&5555554*%6655%&&&564%555555555%&4&&5%655*$55&655555&555555555555&5555&5&55555555%&55$*566&45&555555&55&5&5&55&5&555&555&55555&5555555555555&&55&80>>q;q:w:;0>;qqqqq:q:q:::qq::qqqqq:qqqqqq:qqqq:>0>0wwqq:q:qqq:;:,;5##$3#4$@#@&;,:qq:q:qqq::q::qqqqwwwqwqq>;;>w::0,0:q::;w0:;q>0q>q0qww>-:w;;q>:086555555555555&55555555%65%&&55&5&5555#55$6&%5&&&55555&555555&5555&5538$&%&65&5&5&55&55&55555384&%&&55555&&5555&555&5&555555&555555555&&55555555555&5555&5&555555", "5555&5&55555555555555&5556$55%6&&%6$%56%55&555&&&&55&*$45*%55%%&5&55555555555&55&555&555555555&54&65%*%wXq5%&%$65555555555555555&5555555&55555&555555555555555555*-:>q;q;q0w0:w::q:q::qqq::qq:q::::::::q::qq::q:;w0>-w>;::::qqqqw;w>0*#@#43@3###6;,qqqqqqq:qq:q:;qq:qq;;>0w>-wwq:-::-:wqq;q0,qq:q;:qq>q00,;-ww;w:ww-*&55&5555&555&555555*%&%$6*4555555556&65*&4655&5555&5555555&555&55&&&$5&%56%5555&55555555&556$5&%5&%5&55555&555555555&55555555&555555&5&555555555555555555555555", "&555555555555555&5&555556<<556%&<.5&6%55&&55555&%&+t%X &&+=65&&455555555555&55555&5555&555555555*7+65%*91456665555555&5555&555&5555555555555&555&5555&555&555&&5&8;wq:qq:q>0>>-:qq:qq:qq:qq:q::qq:qqqq::qqqqqq:q< wqwq*@#%@%###@36;,q:qqqqqqq::::,>>>w>>>qO+.w0qwO+q;,q>0:qqoO;wqqww0;q0>w->q;q;>qww;8*555&5555555555&5554*$&8$+755&55555$&455$*55555555555&5555&555&&5556 o5%55&555&&555&55555556 o&%55&&555555555555&5555555555555555555&5555&55&55555555&5555555&&", "5&555&5555555555555&55&55Or4&55%rt%5&56555555555&$7.5X %5+76%555&&55555555555555&5555555555&5555%=+&%&<1*5&%%%65&555555555555555555555&5&5555555555&55555555555580>:;::q:.X:0:q:qqqqq:q::qqq::q:qqqqqq:q;:q::qq;o 88O10wqqqq:::::;:>q4#t.3#3##@@6;,:qqqq:qqq:qq:-8888-0;:9 1q>:t q;;q0:;qqO10>0;wqqw0>.X:;>q:;:w;q:0*5555555555555555554*%5$6+=5&5555555*4%&t.%55555555&55555&5555&5&555 o&555%55555555555&5&5&5 o5555%5&5555&&55555555&555555555&55&5&55555555555&555&&55555&55&55", "55555&5555&5555&55555555&wr<&65Xe%55to555%55%%&&&&55%X 4%+=%&%*Xt&&456%65&&%4%*4%5&X%&5..&%56%to%=+6$&;ow55&%%&ot55..&6%&tX.4%65&&.q65%tt6&qow5%%&55o%55%&556%&*-,;Xot;w;+9:;:wq;owqq.o;:0::;;wqtoX;:q;:wtX>;;oto #$#58-wwqo.:;:q.oX:&@+7##$3#Xt60,qq:0w0wqq,q.t5###$%6--9rr>00Or :;;tooqq>w;:qqq;o.q:q+9;;q::o.0,0>,-..&&5&*..55%&%&455556555+=%%%to.5%&$*&4+75*365oX*56$%654*$5&55.ot55 oqXq6%6&wX,&46%6$%$*..% X&5&tX556&%55%&555555555555555&55&55&555555&5555555&55555&55555&55", "555555555&555&5555555555%*12*4&1O6&2ree:5* X*%7+5% X6o 55+7&4.r7rO%&= 7%*545&=19=6;9er25%&1r=rr+5&w0qw>Or9r9t>; +e1>.r9r7 ##+76891e9 e1 0;Or=rew-+=::91e9 9t0*e+##+ ##+=#&=rX:19::t;:< &#+=#$3r<@Xr0w+9qqo 0wo 164####@##@4=+e1>.ro ;,tw:t o0+900=yXq1=0w+=>0qrO>or;w+ O:< 5%1240r.4*%$>r1556555+=5&;&%< 5%5&66+=548r+64+r*4=+55+75%e2$6556 e>%e+4t t3+2&5$5*$1765X X6 o-*t ,#3X 3#+=@571w;+9q::woO 5#+7$#. XXX o,+9qqo ::o 8###3###3@#37+Orq11o wq>0Xo o;+9wq91w0+9::+9-,X ooo o;+e;wo 4&rOooe+%55>9=*55&555+=55&%oO &56364+7&*. >&6> .*7+6%+=%. t*45$5 <5&=+&O9ooO 465&$*r<645 X&22oX2=*&4665&55&555&5555&5&555&55555555555&55555555555&555555555", "555555&5555&55555&555555%6%Oe*1<%&=r=77164 o$4=+5% o5o 5$+75X ==7=.55>e15$5*4*%5=+#%* e===<*7+%*%7+%+y=77=557+&4+95%X 4%Ore9 64+=*#6o $5%+y7==754=+55&55&*. toew0 o,0:=+0+90>09+;,09r==91;qw;;+9w0:o ;q o5#X #4#X #3O=#@=+,;+=;qOree 8#O73$X =7==X,+9;:o w;< 443@#%##$@4#7+t .r.o q;Xrr9 ow+9:q=+0,+9;;+=:;o 99==Xw+9w;o 5& e777<*4&29q455&55&+75$ o q5%22$*&$6% o*%e+*4 o%o 5&+=*t t&64*5&79>555355&57+556r<44&5&7+&%67+5+=>qw9+::;22qwqw::q;>Oe;w:+=;:< ;;oy8##4@@3$#%@#7+#eee0o ;wr1>- oq+=qw9+00+=;>+=,>. .;q:w0+90:o 86e<4&6&46+r.*6556555+76ty<&X 5$%*4%+=65. w%6; .57+%%1=6t t6&3$4 X&47+5Oe&5%&%5%&55 X565 o5115&&&5&5*&5&55555555555555555&555555&55&55&55&&5555&&5555555555", "&5&55&5555&55555&&55&5556$652r2&5&oy.5&>%* <5< +5& X6o 5%+7%4=25%5;51rq5464*5&3*=+%6&+r,*4w%Or;&< +#,yO%6q%*7+6&+=$&o 5X w5< 48+=3*4X %6%qrO65;6%7+%4*6%565Orrt>q29q;o .q+rq:;=+>;0< Xqqtw:;>;. o>;=2-8 X4@$rO#07 $#+7@#=+q,+=:o tqO *@+r##%72@#6t,+e>te qw< *$#@+X#4####7+#O <8o ,w <:. oq+9;,=+>:+=>:+r::;=2w;:t,+=0>< -5+rw#6w&< .&&%5&&&55+=4o :5< %6&%55+r5&%r+%5+r$5=16.r7%%72*%,55yo&%=+%qrO%5w&555*%22451 X6X .4%,4&&%%&55&5555555555555555555555555555555555&555&555&555&55", "555555555555555555555555%*%6< <5*%%O =e26%1r927+&$ o$o 5&+=&5ter=r.4 7&456%&7+%6%%2r7rO*qere17+65Xye7y45=+55+755X 6%9re1re$+=&&6o &4%*ore=y4&=+5&%556%6, 1:;;t=r9rO::.reOw=+:q>qO 9e2;;:;qwOr=r9t*% X#$#< =rO 33+=@$=+ww+9w;ere1r9$,re<@t9r7rX,.rerO :0o 63## +$@#3##7+#0X0%o qq1r999rX+=q09+qw+9:0.reO>.er9rXq+=:qo 0*52r=rO%= 55&&55+75&9re1re%5%&&tr9<&.re9r.55< =91=56.re=r55 X%5=+&%ore7r%55&45.r9r< o55O =e2&6555&&5555&5&555&555555555555555555&55555555555&5&5555555", "55555555555555&5&55555555&&&&5&5&%*%:ot%55&..&55&&&555555$65546.o&%5556%&55&5555&%5%&3*toq%5&%X.4&555%5o.645564&%5%*5%&%5ot5t.&55555555556&%X.4&555%56&555&-ww;:w;wXot:q;wtot;q:;::qwto.0qwq:qw;toX0&%#@3#$##tX03#$$###5-qw:;ww;:o.,..@@;X;###.X&;,:tot:q;:>w-5########3###3####38-:wXXwto;qqqqq::::qqqqtot0qqXo:qqq:qq;;,-5&to:&55555555&555555&%6ot4t.%&6664,Xw%&5Xo%564&to&555&%5oX65555555555&$o.&455&6$6wXt%5&6&$,Xt*$&%&%&555555&555&55555&&5555555555&5555555&5555&55&5555555", "55555&&55555555555555555%&&4$6&3%*4*$%5&&&5%%566&5555&5&*4%5%*4*&%*%6%555&&55555%5646636*&&4&5&5&54&%6%&*4*%5%$*&4&45*%65%%*$&55&5&&555&&5&4*&&5%&5%&&5%55*-::;:0>;0>:q:q>-:qq:-:q>0:qw;>q;:qq;:ww-8%@3%$3##$#3#####@#%80>q0>w->>0:,q&###3$3#3##5;,0w;>qq:qww08%@################%600,;;;:qq;wqqqqqqq:qq;qw;:>qqq::qqqqq,-0*55%65555&555555555556&%5465&6&%$5536*$6%&%565%*6455&55$&3655&&&55&55&5&*3%*%55*%&&&%65%$&536&$&&%*5%555555555555&55&5&5555555&5555&555555555555555555555", "55555555555555555555555&6*$6545*%&54*54&5%*&664&&5555555&55635*$36#&*%%5555&55&5&555%664%%6&%*&55%%6&3633*&3655&566555*35%&&*4%6555555555%&654%&6&&*$*#6568qwq::qq>;:w-:qq:;>:;wq;;q:w0>-:>0;>0,>-*%######4$##4######480w:,;0qw:qqw>0&#@3#@4#@##*0>ww:0>qwwqww-83#####3#3####3##@#4*0wwwq>q;>;;w:qqqq:qq>;;>q0q;q:q::::q-,0856555555555&55555555$*&4&5*5%%*65**55*355&*4&%5&&&&45$*5&65&&555&555&48%5*&%55%&&64*%4*&56*5466%55&655&555555555&5&5555555555&55555&&&555555555&55&55555", "55555555&5&55&555&5&5&55%365%*%%6%*4&*$655$5&45555555555554664&6*65*4&5%5555555&6%%*54&&&&3584*%%5&$*56*&6%&6$55%%%%%655&&&5%663&55555555&46556%&$46%5*$5*-::;:q,;-;:;::w;:q-wq:;w;>0;,0>w:::;w:-85@@#@$#####34#####480,>;q:>q0q::;,w4#@#%##33@#5q,q:0:0:w:qw>:;85###$###########@3%6-,0q:;;;::qqq::qqqq->w;w::wqq::qqq:>:>085*%55&55&&555&&555&6%5*%4&5&%564345%&65#&%*&654564*6&%6&&5655555555*5$55$566&%&4384&%5643%566456%%&55555555555&55555&5&5555&5555&5555555555&55555555555", "&555&&5555&5555555&&5&55666&5$&5536%%5*%55*4%*5&555&5555%&5%*5453%*5%6%&&&555555%*%5&%645655%*$66%*%5*%3545*%56%%*5&5%54%545%&5&&5555555&%&%3*&$&*5&%&64*8;>q;qq;:q:::,;0q>;>w:;;:::wwq:00:0;,q0843####43$##4@@4##$580:>q::;;w>::q0,0*##$####4@#*0,w0;>:q:qq:q:>08%3###############$%*0,,0,::;w;:q:qqq:qw0;0;>q;qq::q:qq->q>85%65555555555555&55&%4%%*%6%%%&*65%&%5*555%%$&&&$6463&%&&%555&555555&%&5*%6%56%*&55%%%6*65%46%&5%*%5555555555555555555&5555555555&55&55555555555&&55555", "&555&5555&55555555&5&&55%%55555%5*5&*..&&4&5564&555&5&55&%*%%%5**64%*%%655555555%*%$55&65466#*65&%%*%4&*6544%6%&&&%.o%5*55*&&55%55555555%&%5855,o:5$6%368-ww;;q::0:wq;qqqq:;>-q>wq:-::0w>qq:ww;84@###$####%##%###368;>>qq;q:0:;qw0,w;&@#@$#%#@##*q>0:,0qq;;wq;:>:0-&3@@###3###3##4##@&8-q:00>->:q::qq:q:;wqw;0>;::qq:q:qqq:q-*&%5555&55555&5555&%*5&63%55*5454%&564$*5$**&555%*&566%%&*5555&5555%5%&&%45556$%&465*5%&$%&&&554%*455&&555555555555555555555555&5555555&55555555555&&5&", "5&55555&555555&55555555&64*5&%o 555%>0;;::::>;;:w< 0-5####4$@#3#$##@@$%*-0w>:;qq;w>0>o ,:,;*$#34###3@#&0Oo>;:wqqqq:qqq:wq-*$#######3##@#33@#&-:w,>;>q;:q:qqqq:;::;q>;qqqqq:qq:q0>0q-+7555&&5&55&55&555546$4*656&%6*&55&46&%&35=+&6&%46XO%&5&$&&&555555%*555%*45556%&6&6&%&*55&4$4&&55%55555&55555&5555555555&5555&555555&&5&555&5555555555", "5555&55&&55&55&555555&555&$555o 5%&w2.5555%5545555555555%6*$55&&&%5&%*4555555&&5&%555&65%%&&5&%6546%6545&655$6&%6. >%%5&4%565655&555&5556$*5&6<1555&%%66-:w;:wqq;>q:q;w:;q:qqqq:w;qqq:0:qqqo -5########3######t.80qw:qwqw::;qq0o ;:,:&@#$##333@#5w1O0q:;:q:;qww;w:q:08%#########333#$##5-:w0;:;w:::q::q:w;;:q;;wqqq:::qq:w::q-+=5555&&5555555555555656%%%6%5%56$55$54*&57+%4*55%<156%6&&&5555555&5%&$55%&4&56%45%&%&%564566555%&55&&5&5555&5555555&5555&5&&555&&555555555&&55&55&55&", "&5555555&55555&55555&555%%&4otX 6%%%..655&&5to&%wX>&5&&oX,$66%%w.&&6&X&65oXq&%&5..5*4655:o:5555%6554ot3*55%6..654o &%&5%XX6%&&5%%ot$*5%&to.%46qoq5*3&&ot-,;qqwqq;>.ot;>0:.oqww0q:tot;w:q:o.o *##tX.#4###3..3##+=0:>w;::::0Xo;,0o ,0,;*###3##;X.#6;,:w0:tot:0qwqqqw>qq;8%X@#0X.3####$3#tXt;>qwtot::w-qXo.;q,.o.w::;:;.ow;:qqtot+=&&%qoq&&5%tXt555&$&54:o.&&%64&&%%5%55655=+5X.%$&%&555%ot%6%555..%*5$%555>Xo&55*%%tX>%%&5&:Xt%655&&%&*%&55&%55&5,o,4*4%&55%*5556555555&555555&5555555", "&555&55&55&5&&55555555555*.yer= %*weer1%3oyq;;o OrerX->2reet0: Orey.qqXrer= 6$2r7r1#3+71ey1#o +;::wq+=2eret,o -,+=6@X ##< =9X*-9+;,Or9rX::=+ww+9>:91e7#< 79X43##3@1r7r8qwOr9rXw:Xrr9rw;1y=r1w0o Orre>;qO 9re=%4*4 o%*7+5554&671e=r245+763.r7rO$5+71ey1%%6363Or7re$&X r.5X 2&: e:6e+5,%4%e+$* 7;5%=rt&&>$*%e+59+;. .0+2ww=+;:+=:w=y.-*714#$####3# <@#8-. .>+20:r2w:;;Oyt>trOwo 2qt o:t oqt2=%t t%+264 <45%%&*&6t o%5724& o%$=+&*#8&47e.%. .5+756r<6Xr5&+ O%< $%%*4*:5&> o4o 14%2246 =q5Oy%%=+%6+7%o q22oo29;q <;w=+w. .>;o $##$XO #4+e#@X -;+9;>q:0,;+9:>0+90o :q+=%#X ##1rX$@*-9+:OeooO ;q9+;;+9w09+w0-2rX#@####@#r9t#$8OeooO ;X .0q:;21:0q12qoyt;q o:Orq-,+=*OeoXO %6eet%&%53&%O9*6%=r=9=1>; o,:9+qo ,0-X @40q+9;;;+9;o ;:+=&#X #4q1 9t6w=+q+r9=990:9+:>+=0>9+,,w,1 et##4#%#t7 2#4+y==9=wo :;>:;9+ww>+9qo q>w oq+=>,;+=6+r==7=6%t= 25%6655+7%5&X %& o4&=+6555%%=+*667+&+=5X =777.%+755X %4%6%6.rr= o5o %5%o %$ X*%& X57+&$+766123r.*+y====*44.r<%%%%*%45&5&5555555555&55555", "555555&555555555&55555556o %6&o *5r<%*$65X 654 o%*=+527w$=+45 X&5&=+%552=w%7+41265, o%0:::;w:o ;;:Or022q;,;;: oq;=+wo :05X #t <3X 3#+=#&o ,0+9;q,00>w+9:,q22;o :;+9&#o ##3#0e2%q9+>Orq:,0:>=+:019;;9+:>>08>92#3#####3.rO4+9q0:+98e+%or<<7 o6wrO%5>4*%*&%72%&%w%+75%o 55X &*6r+&&+r$5=+&5+=6$+e>&%,;rO5%;*%=20w:tw;;:0o <;>=2wo Xw:t:; oq>9+q0rO8q7 3X 0#< @%+7%8o q>+r::0;>>0+r.:trOqo -:+e5-e #3w##12&:9+;trO:0tw0=1wXr9>;9+-;,t0812###3##0@&9O#wrO,-t>>=2q:t:Ort;trO:o 0ww o;X XqXr=8,rO5&0&5q55eO46455t o3*=164 <4< +&&5*$6=2,&o t4+75672%5%w&+=4*X $&*$%6 <5t o%o o64=14& +*$+r44=1*.r=66%rrO%%>rO%6w$;e25&%448$4655555555555&55&55555", "55555555555&5555&5&55555&5< 7rO 54&2r7rO5X 5%% X56=+5< 7e1r<5 o55&=+55%< 7e2r<6<=2. X&%ore=r6%$655ter=y.6+=5%o 55o *54.reer.6%=+55+=5&>7r=r.5ore=r%*ter9rXq>;q:o =eret>;O 9e2q> owq=+::O =rO #49re1ye@+=60o q:.yeOqw;0>+rr9r2w:o :w.rerO #329er.*09+:;ore=y0:< 9e19qq=+:w07eer.@####3r=ee0##ore9r;;Xrr9r:,1r9r1;qo w;: o:;2r9e1=-&or97r5&r=re0*%64*4&$1y92=+%55%6%7er= <56+76$tee=r.3+=5$o 56$5&41r=77r.o =9req55 =eer.$*< 7e1=546Or&&55ore7r5o +5%&%55555555555&5&55555&&", "&55555555555555555555555%*6to:$&55&6tow$555&555&4*5$56to5&ow65%5&656%555to&%X,$56%t ,5%&5X.465455%6$.X%6&55&555554&*$5&5Xo$&*%%%555&&555.Xw6%&5o.%%&*-Xoqw:;:q;o ;XX,:;:qto.q:q;::w;q:;;tX0#@#$#Xt#t.#4&-;wwqqqtotw;;>0+9wo.0qqqw0:,to-##3##.X-#&;,q:qq:oX,;wq.o::q::qq:qqwXot&3###$#3XX#@#36*oX;w;;qoo>;qw.o.0:q:qqqqq:qwqXo;w>0*55X.55&5Xo5%&%6%6%5,o.5556&..&55555555.:>o:&%5%5&5&5.X&5&555555555&555..&,X5o &..%5&% otX&6%65to$*56&&2O5%55&5X.&5&&5%55555&55555&555&5&5555555&55", "5555&5555&555555555555&565%4*5&5$6%646&&5555&&555$&&&46&%%5$54&$%$&%6%*%%&5&54.1X<9=U&5%655&%556%%&5555&5555&4*&35*555%&56%&&55555555%5&5&5&&&5*&8;,-:q:qwq>o :w;-q>wq:q;w;:>>00>-q>0%$3##3##$####@%-qwqq;:w>:qwqw;>+90w;:>0w;qqw;6####3#33@#&;,q:qqqq,;0w;;>::qq:::q;>qq>;8%####$####3#@#50q,q;>;qq;:q;;::ww::q:q::q:q;0>;;,w5*6$6$&%&%&45%555*4&3&5%54*4*5655555555%*4&54&&6%%&%55&55555555555555&%#*&X $663*55 X4*%%*$4*$&$&$5wy:55*5%&%8#&6%%&55555&555&5555&555555&55555&", "&5555555555&5&5555555&555%*6$6%5*%%*%$6%55&&55555*4&&%*45*%5*63*6665$64*&4&465>17=+:%*33%6&%&4*55*%**4&%55&55&556#*5&45&65&&455&555&&&%*&554&%&$*8;::;0:q:q:.+:q0wq;;0wq>0qw;qq:ww:w85@3#4###$@#@#5*-,q0q:;:;;wq;qq>oO,;;qq;wq,w>q6#@$$34#@##6;,q:q::;;>;q>0wqq:qqqq:;0,::,-*$####$#5#3###68q;:w;w;q::;qwqqq;qq:::qqqq0>::,-,:8564*&4%&%&65&5&%&5&63&&*55&5%55&55&555&56%6$54&5&5%&&&5&&55555555&5555%6&%56t+6%56*%%+t5$&%64&4&65**$.<6&4646%56&%5656555555555&555555555555555555", "55&55555555555555&5555&5&&4$&5&&44*%5*%&&5&55555&4*$%&&6&%&$5554535&&6%%*%4&365$&445*%5*5&554&&56$%556&&&55555&5565&$5%5%&%46*$*55555555&4565%*3&$&*-:>:w>::0wq;0,;:>0wq,0>w0:w:q>0:q0-*#%@@3#$#@%###$8>q:>w;;>;:;;>:q0q:-:wqw:w0;q,-*@3@#3@3$@#&;,:qqqq:qq>w;qqq:q:qqq:>00:q::-5##$##4#$#$###8-,q;w;q:0;w;0:q;wqq:::qq::q0>0;;,;-*#&465*#*%455%55%5$5*4%$5%%5*%555555555$%5&6%6%5&5%64455555&5&55&55&55&%6%$%*%*5%%&&&6%%&46%%*&*463&4$%%*64*$&$4*%5&5%5555&5555555&555&5555&555&55", "&5555555555555&555&555&5&6&&&$*%5*5%&5%6555555556446*%%%%55*44*&55*35&66%%*$&6%&%56&%&%56#6&5&%&&45*&&&$555&5555%$&%66&5%&4&55545555&55&56$55&56&%**-wq:q;0,q;>;:0::0>;0qw0q,0:q;qq;>,8&##$4#3###$#@%80,w:0::qwq::q;ww:qw>qqq:q;>:0,w&#@5#$##3@#&;,:::qq;:;q;;>;:qqqq:::;,::qw,-8#$#43#####3#%$-q,w:;>::;w>:;:>;q::qqqqqq:wq0ww:q-8*6&44%%&5&465%&466%5%6&6*&44*555&555556*#5*%5&6%46&&*5555&55&55&5555&554**&$&%%5655&4&%56%5&%&%%*&4*&6$%555%5*66&%%6&555555555555555555555&5555&5", "5&555&5&5555555555555555*$5*54%&4&%*5%6&5&&555&5%**%$*56&%6%&*4%5*%&5%%&5*$6*44555%5%%6%%8%%&5554*6$%%4*555555556&6&45&&%665$56*5&555&5&4&%55%..%5*8q:w;;,qqq:0>qq:qq>>w::q:qq::;>w::;-##@3###$##@#3*-:wqqw:q,0:qwq0:q;;;q:q0;:w0q:>q54@##34$###6;,:::::;q:qq:w:q:qq::q::qq:::q>-64##3#$3####$@8wwq0wq0:>00wq;;;:::qq:qqw0;q::;q:0854%46*&%%54*4*&&%&$464&%45*%555555&556366%5&%%&5&*$%%555555555555&55555%535*%&&545*$654&5$&65%&&6#6555*%6%%&5%%3*6554555555555&&5&5&5555&5555555&", "&55&&5&&5555&5555555&555%&&%&*5&655&%6&455555&5&55+7*54&5*&$*%*66+=&566%4655464*4%*4*$5&5%%&$&556%65%64%55&5555&4%465&57+5%5*%5%5555&55565%$*q;.+:qwwq;;Oow;;;wq;q;9+>-+t#3$@$######3*qw>q:>0oOwwq;w:;;w::;;w>q;q,0q,0*###$##$$##6;,:qq::wqqqqq;:qq::qqq::q:q:>w,q8###3$@##$#3@#6-q>q:;ww->w;;:q::q:qq:q:q>;ww::q,0-&&5*$3&&%*54&&4&&%665&%56%&6555&5555&565%4&5&*54%65&&5555555555555&55&4*36*3&456&&$*5*%5%*4555%55*555$5&%65$*5656%$5*55&5&555&55&55555&5555555555", "&5&55555555555&&55&55555%556&$5&%5%564%&5555&5&55&+=%%6564$&55555+7&%5555&%5%&%%55&54*5%&:o&&$*5%%&55%&5555&5555&*%%6557+&55$5*%&5&55555%&6&q2.%65.=,w:qqq>;0>X9w;.X;::1O:q:>0>q:;=+08=.#@####@#3##&->>.X-:qO1:;;;qqwqqqq>:;q:w::0>>q&#@3#3##3@#6;,:::q:;:;:w;:q:qq:qqq:wq;w;;,qq-6####$#33#3#@$8;q:::;:q:qq:w:;q:qqq:qq::qq;w0::,855%&665%&%%*5%&%65%&%555%555%5555555555&%&%&%%566$4%%55555555555555555%55%5&%55555%5%%&&5&5*5&555%5555&*%%*$5%%%4&6&%555555555555&55&555&5555&5&5", "555555&55555555&55555&55%5%tot%&55$*54&&55%,.%&%63+=3*%5ot*5%55&5+=5.o&%56%tot%%%5*%$55&&X 5&555.X>64*$6%..%%&4555&5tX&=+*&%wow65%%55&455o%65..%5&*;,wq:0XXq:0::::+9;;:;:::qXo.;;:9+;*3@###XX#3##-Xo0,q+=>0>:wqw;:oo>::qq::o.:qw0w;>q&#@####3#@#6;,:qqqq:qqqq::qqq:qqq:q:qqqqqq:>083#$3#########*->w:qwqqq:qqq:::q:q:qqq::qqq:;;w>0*55&5555555555&5&555&5555555&555&555555555555&5555555555&5555555&&&55555&555&55555555555555&55555555555&5555555555&555555555555&&555555&55&&5555&", "555555555&555555&&&555&56*1r=r$&% o#*=+%5 +91%&5%8+=*4.y7y<**$&&4+=1ere>5&1r7y1**X %*& X6 75,7r=r<%%+=1er1*%*%66%1r=rr+$5Or7y.6%*$&5=1e7*q9er1%*o q>+92er1:>o wo y +q=+;wye= =+-6 X3tre7+3#Or7rewo +;+90>XreerX:091e9 <:0w:>,0&#@####$#@#&;,qqqqq:q:qqq::q:::q::q:qq::q:q>;8%############*-w:qqwq:qqqqqqqq:q::::::q:q:q;;w>0*5&5555555555555&555555555555555555555&555&55&555555555555&555&5&&5&555555&55555&555&55555555555555555&5555&55&555555&555555555555555555555555555", "5555&555555555555&&5&5&&&# <%%6%5 X55=+6% 7>%&*$54+7%*r<*or5%6*4&+ <*:eO4< qwo :;+9qq09+q:t>,190w9+-5 X$+e33###-$5t o;+9::;+=q-r+w;+rq>9rX:19q:qq;,06#####3$#@#&;,qqqq:::q:q:::qqq:::qqqqqqqq::,:-*3#######33##5-:>qqqqqqqq:::q::q:q::q::q::::;:>0*555&55555&&555555&55555&55555555&5&55555555555555&5555&&55&55&55555555555555&&&5555&5555&555&555&555&555555555&5555555555555555555555&555555&555", "555&5555&55555&&55555555%8ret&&%5 o&4=+$5 o4&54&56+7&. oXX o%4*%5+=5%%+7&21555126o $%& X%X *&%r<*%5eO*+e5%o 4&656411%45=+5OeooO %5556%7+&5%rOoXe+8o ww+e:;< :qo w:+9>::9+>0>to29:;9+83 X#< O#4$#$4.o o>+9q:q+9:X t;qt Xq91:0+9q;q:;,;*######3#@#&;,:q::qqq:qq:q:q::qq:qq:::q:::q>:084##$####3###48:w:qqq:qqqqqq:q::qq:qqqq::qqq;ww08&5555&5&55&5&5555555&555555555&55&55555&&&5555555555&5&555&555555&555&55555555555555&55555&5&555&55555&555555&55555555555555555555&5555555555555", "5555555555555&5&5555&&555$t= 2%5$ o4%=+&4 X5&6%*4&+=4o 7===.56$&%+7&&*+=5=+&5&+=5X &&6 o6X 44& o$56=+5+755o &4&%557+*%*7+4+r777=*5*%%%7+$&5 e==7<6o w;+9q;o 0wo w0+9q;q=+;w1 9r=qq9+*# X4#OrrX#$.er9 o:+9;q:+9qo ;qq: o>9+q:+9qww;,,05######3#@#&;,qq:qqqqqqqq::qq:q:qq:qqqq:q:qq:q-5##$####3###380:w:q:qq:::q:qqqq:q:q:q::qqq:qq>;8*5&5&5&5555&555&55&55555555&&5555555&55555555555555555555555&5555&5&5555555555&55&55555555555&55&55&5&5&55555555555&5555555&55555555&555&555555&", "55&555555&555&5555555555*55&.rO*6 o4*e+6* X644*$6%+=6t t%%%&*%5*6+=5%&11%215&&12&o &5q X%o 56$y<&5$eO*+=&5o %*%&%&=+%55=+6q+=:qo ;0o ;w+=q;q9+qOr.;+9:q9+8# X#%@%2r##r1-q oq+9ww;+9;X t:;t X0=+q;+9q;q:-,:6#@####$###&;,:q::::qq:qq:q:q::qqqqqqqqq::q;qw0*##3##3##3###*0::::qq:q:qqqqqq::q:q::qqq:qq::>;-*&%55555&5&5555555&55555555&555555555555&55&5555555&&5&5&55555&&555&5&&5555555&55&55555&55555555&5&555&5555555555555555&555555555555555&5555&555", "&&555&555&5555&&55555555$6w55eO%6 <4< +5% o5*&&&5&+7%6726*4>66%&3+et6;y<*55&%%&=+34*+r:*4;-o >w+9:wo w,o q;+rw:q9+;+eqq29q:9+%@ X#033or#3 OO:,;5#@####$#@#&;,qq::qq:q:q::qq:::q::qq:qq:qqqq:wq83#######3###&-qwq:q:q::::q:qqq:q:qqq::qqqq:qwq-85%55&5555&5&555&5555&&55&5&5555&55&55&5555555&555&55555555555555555555555555&5&&5&5&5555555&55555555&5&5&5555&55555&555&5&5555555&5555555555555", "555555555555&555555&5555&&r=ee;&41re1=+%5 X5$&%&5%+7%&ter=r.$&%&5+rr7r1&%*1r7r1%64err< X55er1$w7r7r<$*+=%*o 56&4&3,9r917+&6Xye=r5&55&%7+65462r7rO8o wq+9q;o q0< qq.reO;9+w.ree1 1>=+6# X#Or7 <##1r9=9rX.reOq+9;wXreerX>w9+:q+9;q=9q,;5######3#@#6;,:q:q:::qq::q:qqq:qqq:q:qq::::::,q84####$######5-;w:::qq:::q:q:q::qqq::q:q:qqqq:q-86%55555555555555&55555&5&&55555&55&5&555555&5555555&555555555555555555555555555555555&&55555&555&555&&555555555&55555555555555&5&5555555&555555", "&55555&55&&555555555555&%&5oo5&%&4..&48%55555555555&5555.o&56465$tt5ot5&556tXt3&465ot546$65ot54&.o,5%&%&55555555&54&X.*5&46%5o.55555555&4&5*%tX>5-;w;qqq:q:qqqqq:q;totwq;w:tot>X.,085@#4##tXt###%.Xwtoqwtotq0w;:q:oo:0q>::q:qqq:q::,q6#@####3#@#6;,q:qq::qq:::qq:qqqqq:qqqqqqq::qqw;-6###########%8q,qqqqqqqqqq::q:qq::q:qqqqqq:q:q08%65555&55555555555555555555555555&55555&55&5&5555555&5555555555&55555&5555&555555555555&5555555&55&555&555555555555&5&&5&&5555555555555&5&55555", "555&&55555555555&55&555&&%&%4&%555&55&%%555555&5555555&&5&5%&56%&%%6%66%5555%$%6&&%5$5&&&&%5$55&56$&$655555555556$*&&5$&&4*55&4&5555&555*6%%555%&0;w;:qqqqq::q:q-w;q:0>:q;;0w;qw:::8$#3@########*q0wqw::00q>0wqq;:;wqw:q:qqqqqq:::q,q&#@####3#@#6;,qq:qqqqqq:::q::q:q::::q:qqqqqq;w:-*###########48q,:::qq:qq::qq:q::qqqqqqqqqq::::0-5&&&55&5&&&55555555555&5555555&5&5555&55&555555555555&5555&55&5555&55&55&5&555&&55555555&5&55&555555555&55555&&&5555&55&555&555&5&55&5&55555555", "555&&5555&5555555&55555555&&&5555*%&5465&5555&&555&5&&55*3*&%%%6%5&%*$%*&4&*&5&6%&6$8*46%&&48*4&63*&56%65&55555556%&%6&%55$4*%&*555555556#66$&&&50q:qqqqq:qqq:qqwqw>;:qqww;wqq0:q,w6#####3#3%#@38-wqw;;ww>>0>:;q;:0wqqw;:q:q:qq:qqq,;6#####33###&;,q:q:q:qq:::qq:q:q:::q::qqq:q::qwq0*######3####$*q,qq:q:qqqq:q:q:qqq:qq::qqqqq::q0-555&5&55555555555&555&555555&55555555555555555&5555555555&55555&&555555555555&555555&5&555&555555&55&&55555&&5555555555555555&555555555&5555555", "55555555555&55555&5&555545&%%&5%5%%46&%$55555&555555555&%*$&&6$&6654%&545&43&546%54&44%&%5$6$4%6%*&$5%5555555555%&&4%%*5%*5*#4&4555555556%%5%5*%5;:::qqqq:q:q::q:q:-::;w;0;qw::::>0*4###3#$#@@#380;,q;0>0>0::0ww>;:00w0::qq::q:q::q,;&#@####$###6;,q::qqq:q:::qqqqqqq:q::qqq::qq:q:q08############*;,qqq:qqq:qqqq:::q::qqqqq:qq:qqq;-55555555555&555555555&55555555555555&5&5555555555555555555555&5555&5&55&&555555&&555555&555&&555&5&&555555&55555555555555555&5&55555555555&5&55", "5555&55&&5555555555&55&&6$55&5$65&*%&&4*55555&555555&5556665%%664&%66&46%566%45%6484%6*46$84%**$%&%6&%&45555&555&%*66%6455%%**5555&55555$6%&65&55:>wq:;qq:qqqqqq;ww>;>:0:q>;0;,00,;&#####3##33##8:;>-:,;>;w,;qq:0w::w:::qqqqqqq:::q,;6#@####3#@#6;,qq:q:q:q:qqqq:qqqqq:qq:q:qq:q::::q8############&0,q::q:::::::qq:q::qqqqqqqqqqq::q055555555555555&555555&555555555&5&55555555555555555555&5555555555555555&5&5&555&555555555&5555&55&55555&55555555555555&55555555&55&555&&&&55555", "&5&5&5555&&5555555555555%6%55%6%&$56%5*$55&5&555555555&544&&5564&45$*466*$$**555*$6$&54&64*4&5%6&44&%&&*555555&&%5%45538%5*%55$55555&5&5%5*5$&6$5>,q:w;:qqqq:qqqw:->;qqq;:;q>:0w:,0%@####$334@@48w:q>>-:qq:0;>q:>q0:00,0q:::q:q::::,;&####3#3###&;,:qq::qq:::qq:::::qqqq:qq:::q:qq:::-############50,qqq::qq:qq:qqq:::::::qq:qqq:qww-5555555&5&5&55555&&55555555555555555555555&5555555&555&555555555&55&55&5555555555555555&55&&555555&&55555&5555&&5555&555555555555555555555&5555", "555555555555555&&5555555&%&55&%5%645&566&5&55&555&5&&55558$5&5&55*5%&6%4%*6%55%5%*&55556%6555&56566%5&$5555555556%%&&*5%*%%*%&%&&555555&*544*&%*5,,:qwqqq:::q:::0>>;w;w:w;;w0qwq;,-6####3#####3#->;q;q,q>0;>wqw0q:>;w;q:q::q:::q:q:,;6#@3###33@#&;,qqq:qqq:qqqqq::q:q::q:q:q::q:qqq:>-############%0,::::q:::::q:qq:q::q:q:qq::qq:w>055555555&55555555&55555555555&5555555555&555555555555555555555&&5555555555&555&5555555&55&5&5555555&55555&5555555555&5555&55555555&555555&5555&", "5555555&5555555555555555555555&&&%&%%&45&&555555555555&5&555%4%5&%&6%%655%%5555&555555&%5555&5&%%&%56%&%5555&55555&%5$5%55%%545555555555$&55%%&4&,,qqw;q:q::::qqwq;q:wq;:;:::;w;q,0*@###$3######->qw;q;qwqqq0w;:qqq;:0w;:qqqq:qqqqq,;&#@###333##&;,qqq:q::qqqqqqq:qqqq::qqqqq::q:qqqw-############40,w:qqq:::qq::qq:q::qqqq:qqq:qq:w055&5555555&555555&&5555555&55&5555555555555&5&&&555&555555&555&5555555555555555555&55555555555555555555555555555555&5555555&55555555555&5555555", "5&55555555&&5555555555555555&5555555&55555555&55&55&555555555555&55555&555555555555555555&&5&5&5555555555&&5555555&555555&555555&&555555555555555,,qq:;w:qqqq:qq:q:qq::qqqqqq:q::,0%######3#####->qqqwq:qqqqqqq:qq:qq:q:::::qqqqw;:,;&##########&;,qq::w:q:::qqq:q:qqq:qq:qq::qq;:qw,-############5-,;q:::q:qqqqq:qqq:::q::qqqq:qqw>;6555555555&555&5&5&55&55555555555555555&5&5&55555555555555555&55555&5&5&55555&55555&&55555555555555555&555&55&5555555555555555555555&55555555&5", "5555&555555&5555&55&555&5&55555&55555555555555&5555555555555555555555555555&555555555555&5555&5555555&5555555555555555555&55555555555555&5555555&,,:qq;w:qqqqq:q::::q:qqq:::q::q:,0%#3##########->qqqwqqqq:qqqqq::qqq::q:qqq:qqq:;:,q*3#####3$##*:,q::;:::q:q:qqqqqq::qqq:q::qqqqqqq,-###########@50,;:q:qqq::qqq::qq:qqq:qq:qqqqqw>0&55555&5555&5&&5&5555555555555&5555&555555555555&55555&55555&55555555555&&&5&555555555&5555&&55555555555&55555555&5&&555555555&5&&555555555&&5&", "5555&555555&5555555555555&555555555&555555555555555555555555555555555555&5555555&5555&5&55&555555&&&5555555&5555&&55555555555555555555555555555&5,,::qqq:q:qq:q::q:::q:q:::qqqq:w,0%####3#######->::;:q::::::qqq::qqq:qqqqqqq::qq;w,q84########$8w,q:qq:qq::::qq:q::q:qqq:qqqq:qq:q:,-###########@%-,:qq::qqq:qq::qqq:q::qq::q:::::>05%5555555555555&5555555&55555&55555555555555&5555555555&5555555555&5&555555555555&55555555555555555&55&555&5555555&55&55&5&55&55&55555555&55555", "55&5555555555555&55555555555&5555555&5555&55&55&55555555555555555&5&555555555555&5555555&&555&555555&5555555555555555555555555555&555555555555&55,,::qq:q:qqqq:q:qq:qqq:qq::q:qq:,05############->q:;qq:qqq::::qqq::qqqqqqqq:::q::wwq-5#@#3##@#5-:>:qqqw::qqqqqqqqq:qqqq::q::q:q:qqq>-###3###3####5-,:q:q:qq:qqqq:qq:qqqqqq::qqqq:ww0&5&5&555555&555555555555&55&555555555555&55&&&55&555555555555&55555555555555555&55&555&5555&55&&55555555555555&5555555555555555555555&55&555&&5", "5555555555555555&55555555555&5555&&555555555&5555555&55&&&&555555555&&555&5555555&55555555555555555&555555&55555&5555&&55&55555&555555&5555555&55>>>:q::::q:q:qq::q:q:::q:qqqq:q:,05############8w:q;:qq:qq:qqqq::::::::q:qqq:qqq:q::084######480:w:q::q:qqqqq::qqqq:qq:qqq::::::qqqw8############50,:::q::q::::::q:::qqqqqqqq:q:q:w-&555555555555555555555&55555&&5555555555&5&5555&5555&&555&5555&&5555&55555555&55555555555555&555555555&55555555&5&55&&555&55555555555555&555555", "5555555555&&5&55555555&5&5555&555555&&5555&5&5&5&55555555&55&&5&5555555555&55&55555555555555555555555555555&555&5&&5&&55555555&555555555555555555w>>::q::::qqq:qq:qqq::qqqqq:qqq:,06#######3####8q:w:qqq::qqqqqqqq:qqqqq:::q:qq:::qw>w-8%$##4&8-ww::q:q;qq::qq:q:::q:q:qqqq::q:qq:q::8############&0,:qqqq:qq:qq:::q:q:::qqqq:q::q::-555&5&555555555555555&&5&55&555&555&555&&555555555555555555&555555&55&5555&&&555555555555&55555&&5555555&5555555&5&5555555555&5&555555&&5555555", "555555555555&5&555&555&55555&55555&55555555&&&555555555&5555555555&555555555555&55&55555555&5555&5&&5555555555555&5&555&5555555555&555&5&55&55555q:>qq:;qqqq:qqq:::::q:q:qqqqqq::,q*$###3#######8q:w::qqqq:qqqq::q:qqqqqqqqqqqqq:q:::>q0-8**8-0q>wq:q:q;qqq:qq::qq:qqqq:qq:q::qqq;w:;8############*0,q::q::qqq:qq::qq:q:qqqqqqqqq:w:-55555555555555555555555555&555&5&5555555&5555555555555555555&5&5555555&55555&555555555555&55&55&55555555555&555&555555555&5555&5555555555555555", "555555555555&555555&5&555&5&5555&5&&&555555&&5&555&555555&5555&555555555555&55&555&55555555&&&5555555&&5555555&&&555&5&555555555555555555555&555&::>q:q;::::::q::qq:q:qq:qq:q::::,;*$##3########*;qw:qq::q:q::qq::qq:qq::q:qqqq:qqqq:::wq:w;;:w>>q;:q:q:q:q:qq:qq::qq::q:qqq::::q;w:08###########3*q,;q:qqqqqq::qqqq:qq:qqq:q:qqqqq;-555&55555&555555555&5555555555555555555555&&55555&5555555555555555555555&555555555555&55&55555555555&&55555&55555555&555555555555555555&5555&55", "555&55&&5&55&5555555555&5&&64%5%&%6%5&5555%5546%5&&&%6%66&3&5&$&55&65%*%%5&5%55&5&5%5&555556%$6%&6$%65%&%&&4&%%646645&4&6%&&55*$5555%554%&&%5&5%5->>;::;;wwq;>0;;>q;qq,0w:qq;:w;;,08%#####3###@$6-0>q;:;w0wwq;>qq>qw;:0>w0w:0q:qq;w::qw:w,:,,w:q::0>;::q>q;qq:;qqww;q:::qqq:>q0wq>q;-*###@4##3##@4*w>:w;;;,:;:q;;:>0:wq:qww:w0w;:::;8555645*$&45%*5&&5%6556%5&$&%6%5&%5&4645%&554556%*%&6%%&&&6%554&5%*%5556&%&5&5%&%6&%55555&55&5555555&5555&55555555&5&5555555&55&555555&55555&555", "55555555&555555&555555&5&5%5566665455%55&55&*&3*45&53%*55566%%*%&5&4*545*4*%654%%4%555%54&*#6&$6%%*6$5*&5%56%6&466556365&6%5544*6&%*%&$65%6%54&*&q0;w;:w:::;:;:wqw;q:::q:0:qw;q:w,q833@4#$######*-;,w;qw;w0q0>:;;:0qqq>qw:q:::wq;,;q;;>;w>q0;0w:q;>qq;:00,:q>q::qw0:w::ww:>0w0qw;;,q8&#@#$###3###**:,;:q>:;q;q;:qq;qw0q;w:-wwq;>w0w-86$*5%&4&&**%&$5*%%54&%5566%66*4*%&%%&6%5%556%5%*4&5&5*5$*$555&56&45485$*&66%&*5644&55&55555&55555&55555&5555&&55&5&5&55555555&555&55555&5&55555", "555555555555555&55555555%$&5&&3$&36*%&54%%5%35*5&645&*5$%635&4%6&%&&55&45$$*455*&&464*5&5%$**%&%5&45&4$5%%%*63&*54&64*%55%6%&5&46#64%*%55%4*66$4%-qwqq;qq:0,0q>0:0,qw;ww;wqw::;:;ww8%##@####3##3$80>;w>0::w;,;0:w0ww;::;;q>wq0>0:qq;,0;w0wqqw,0>:qw;0w0,,0>w0qqq;:>q;>;;:0;q0:>qw:>q-5#3#3##3####4-0;:ww0q:;;:q:;w;;:w:;;ww;:w0;w>:085*43565%5#&*5%&66&5*%%*5$5555&43&6%554&$*%5%6*$4*55*#$5&%&66$5%5*&%65%%55%455$5$65%555555&5555&&55555&555555555555&555555555&&555555555&5555555", "5555&5&55&5555555555555548&%%%&&%&7&&55&&*4&%46635%$6555&%5&&%5%%%6%&5*%$&54564%655&$&55456%6&%5&&&56*%*%466%656%*46%56&&4*#*$*%6&%%5%&6%6%6&*8;0,:>0qw>0>q:q;>0;::0q>:0>:q:;ww006@####$#####3-w>,;;wq;:>0q,;qw:0q0qq::;;q>->qqw0wq>qww:;:0qq0wqq,w:;0wq:0>qq:w0qw0:,;,;w>:0q:>,0*3#####3#$3##*8,,,-:qqq>wq0>w0w:q0;,w0w;w0>w-,q-85$6*5%&%584$55&$56&44*5%*%%&&*&&645&5&55&4&4&%6*#5%4*6&%655%65554&%&3*5*%4*&$&5%6%&&5&5555555555555555555&5&55555&5&5555&55555555555&5555555555", "555&5&55555&55555555555&&4:1=1<%5-qq>;wqq:;:;q>;0;qq:>,8*#@4#@%#33$##50w>>;:wwqw;:;q>0;w>q:w0q,qw:>q;q:>;:w0::;;:>:;,;;w0;;:wq0www0>:q:q:>:0;0>;;q:>;w>q*#344@##X<###6Oo;;:;>qq;09+w:>;:q;w00>w;q;w0,,;884*5&q1=2<55::;;:;:0:,::qqq:0:,0;wqq,:>;q;wq843.t3#@%####6-:w0::0qww;:w:qw0qw;0::q0:q0,;,0w;qq;w:;>q;0towq>q;q;w:qq;>0:qX.>:q0;;:;::::w0q,q-&#@#####+=###8=+w>w;q:::,=+;;otw::0qqqqq>wqwqq:8846%%e2o<+551<53*5#*4&46&35664&& o64*%58&3&%54664653%&4&*455&5%*#55 o4.7655554*4564$55555555555555555&55&555555555555555&555&5&555555555555&55&5", "555&555555555&5555555555*X &546$5453*%:o:%%5&5%%&&%Xt&&..%5%5&44&464*,o.$*&%tot55&%to&&&%*5>X;%5%%8$&=+5% oqXw%554&w.*%6..4%*54%..5%*$&6&t .&%$%4880.o.:;>;:w.o;qtot,;0w:to.:0;w::,w8%@7+##$@;Xq@38;q,oq>>0:q:q.o:;qqq.oqq:wqw;:0>;w>w;wq.o.w0o q:;qqootqqw:0..q9+0:0,tot;q0;q0o.,-83##3#5#3O7$@%-=+>;q.oXw;-9+0>y<;0;,tot:q;;;qo.08*5%&o %%5&%6&46&%>oq*456%6&%6..$ o55%oX:5&5%5*6554&&6$*4&$*65%5*..& X*54566&..$&&55*55&&555&555555&&555555&555&5&5555555&55555555555555555555555", "&555555555555555&55555555t <&5%6&=+5&q o>>9+3+ X@o Orre:;w2reet:; oqq9+;qq;:q1r9rqw 9qX 9er.qo OeO+ o>Oy=rX:q=1e= <-8##3###3#+=##%09+:w2r=r1q>=+:= y :qOr=rXqw91e9 <*&565t <5&&%67+45Or=r.646%&%wer9= X*. 7ert%+ 467+55+=555%%&>9re7 o%X 45:eer25&*6$555&5555&5555555&5555555555&55555555555555555555555&5&555555", "55&55555&555555555555555&$< 1:%65=+%t t5+2&&5$&5=r.%1 <&< %%+=3*o 6&=1*$&4* <*6&5%e+5555&$=+&& e>%9+54 =w%5125wy.5+ <&o %&5&56=+656%%&*q oqq9+:w:;:: <;;:0o w;qt::qe+:o 1;wq=+0>. .w+2wq=rX:19-%#@#####3+r++++r+qwtq;< 0:=+qw o,0. .0+2;:=rXw1=8%&%%%O 1:5&&7+%t t4+2&&5&$6176%o o%w&5%e+$*5&:r1&6=+6%+7&%5&%&17&5X o&o &521%qr.%&&55&5&55&&55&&&5555&55555555&&55555555555555555555555&55555555", "&&555555&555555555&&&555&5$X=r<55=+5O9ooO &%56&%7+55+=55X 65+7*$o 5#1rX*%%4ret%&621XX2=%5 <%*7+&&4&%&=+&5 <%67+&& o&56rOXoe+4+e&5o %5%5547+&55*%&521,;>12:o wqw o::9+0: oq>; o> owq=+8$7+#$OeXXO @&7+w>::qw;o tw0 o;22;wqw;re.qq,o qw>;w.oe+wo q,0:=+>0Oe:oO :w9+00 ow>OeooO >q91>q+=&*%4*%&X=r<%%=+6O9XoO %%6%5%rO$&% X*55toe+4%&;e7*54=+5&+7*5456%rO$*4 o$o %%rOoo9+5%45&55555555555&555555555555555555&&5&55555555555&55555555555&5", "5555555&55555555555555&5%**5*+r:$=+6+r7=77%%&5&57+56+7*%o %&+=%5o 5*w1 9t*%t7 24&=r=97164 X%*7+%4*%657+%% X%*7+%5 o6$& e77=O$+=56X 55&&%5214564&#*7+,,q+=qoy,>0 o:0=+;> o0:> o; o:,=+-47+##+r=7774@7+:q>w0qwo w-w o>=r==91w: oqq9+;;www;.= 2;-o :qqt9r=r+:o :>:;9+0:+r=999:>=+>>+=%###$334##+7#&8;=+:wOree :;=+:w o0q+r9999qq=+0q+=64*%$5&*4+yq&7+%+y=7776%6556 o&5% o3q=r=r+6%52e>$6&=+6%+7&&$546 X%$5 X6oy8$ e777<%6%655&55555&5555&5&55&555555&555&555555555555&555555&&555555555", "5555555&555555&5555555&546%$55 X&=+$q12qo 0;> o:,9+:w o,0. .> o0:e+057+#3>;o ;w: o022;qq0q; oq:e+:,-:qwq:Xr+,o qqq29tq=+;o ::->=+::Or,0;>0w=+w,+=5@#4@##$##+7#%0:9+0. <:o :>9+q: o:0Or:00:0:9+q,+=65&4*&$3*4yo67+5*%w*+756X %&*45%>e2w%*wo4o wqq oq;=+q; +0q+r;: <;O +w8=13#-rO33q@#=+->,w0;:o ::0 owo X>wtq, <>O +qq:;0wtw:eOqo .q>91,te+;o :>0;92:>trOqwt;w9+w,+=##<<#$###4+748w,=+,o t;O :;=100 OwwtyO>0twq9+wq+=5*%&%tt&4o t%7+$>rO5%,%&656522461 o%=1%we+5< .%56%&715.r=&3&&4&223*1 X%o 4&+r:%5w5&%6555555555&5&555&55&55555555555&5&&555&555&55555&555&5&555555", "5&5555555555555555&555&55tre=r<&49+$5ore7r6&*4%&7+&5+=%5o &4trerO 3&2eer.4*r7req56O 7e2&5 o$*=+%4&6%5=+55 o$*=+%6 X56$%2r=rO4+=%&o %$*%%65t= =7 16*1y=r1:;o ;>; oq;9+>0 9rerX:q1re2=+q-< 7.$Xre7r##7+8q>,:wwo 0:> o:;O =e2ww1ye2=+;:qwq;y=retq:er1:< =e2rOo :;>w< =Xwore=r,091,;+=@#7=##4#$3+7$-q,9+0,ere1rew=+:>1y=qqore9r0>=+w,+=*%5%5trr7r<5&=+*&or9=r5*3%6&.rer< o&< 7e1r<7 56< =91=3*%%54.reeO o&X *452r=rO6664555555&5&5555555555555&5&&55555555555555555555&5&55555555&55", "555&55555555555555555&55$65.o;6%53&*%*%o.6%%45&5*4$*54655%*64>X:5%*4%.o:%*45oX5%$%6qot56&%5645$*64%5%%*%64564&$6&55%&&*$tX>&55%54*%%555&55&%toow$&5*.o.w;qqq;www;qw0>q: o.ow;>:;XXww>,0&tX####X.3$3##68,:>w0>::qq:q:;qto.,q0:XX:w;;w:0,qqoowq0,;o.0>.o0:otqq,;qq:.o::wqoXw;0q,0-*@$3#@3##3###4*-,::>q0:o.:.X-qw;;,XX:>0>oX>q::;,q-6&4%&665.oq6%4%4*65$o.$6%*565&:Xt&5$$*to$5X>6&5$%*%%6to%*$*%$&*&4>ot4&$&&64&&&toq35%3*555555555555&5555555&55555555555&55&55555&555&5&55555&555&&5", "&5&555555&555555555&5&555555$&555&55&%*45$*5%6&5%6&4*&5%5&54&5&&5&65%5&&&%6%%6%&6&55%6%5%*55&6%%55&5%&45%6556&%%46%&6%%*5&%55&%&&$655&55%65%&5%&64%*8q,;:q;::qwqw0w:;qw o::;w;qqw;0>;>q-4#$3##@3#####$80,:;>0:q;;:q::>0q;0>w:;:q;wq::q::;wq;::;w:;q;>0>;w0>q0q::;>q;w0:q;0>>w:08####3$####3##$-w:,;0q:;::0;>qw:q:qq:w;;qw;q;:wq>>8864&%&%6$4&45555%%5%&&&&555&%66%65%56%%55&54%&%*45%&%%%&65%655544&%&64*3&65&&%556*54*%555&55&55555555&55&55555555555555&55555&&&&55&&555&555555555", "55&5555&555555555&5555555665%56%64*5$5*&6%65%%&55%64*555&$5&%55%6&54&&%&555565&5%564*&$*5$*&55$&&$*5%*465&5%5655&&%65&%5&&&4%655456%655&5555%6%&5*&%8;,q:0w:;qqqq;:w:q;+.:::qw;:;0,qq>,-*##@##3#4@3##348qw,q:qq:0>qq:ww:q;q>;0wq::q;>;;qqw;w:;:;w;w:::0>w::0w>;qq>q0wqw;0qw,>;85##3##3$#$##@3*-q>>w:;q:;:>0>:q;qqwq;>;qq0>q0qqq,,8*%4*%&%5&&%&55&4*&%&%55%%556$&565%5&5555&6%46%%65%6%6%56$6&3*555%6%*545%%555&%564%665%&%6%&&6%555&5555&5555555&555&5555555&5555&55&555555555555555", "55&5&5&5&5555&55&5555555$&&5*38%6&&5&&35464&&%55&665$$5%5&*5%6%&$%%%*4&5%%65&$&66*%%%4&4&6465&%55*$&5%&$%4%555%55&&36%%6%%%*&&556&455*$*&5%5&6%&454&80ww>:;0,;;:q:q0>::,q:w::w0>qq0:q;ww*5#####3#3#4@#%*0>:,qw;w>;;w;q;w:;;;0w,;0,-w:;,;q:qq:-;>0w:q:::0q::,;q-,w0q,:;:w>::::0*$##33$#@3#3#33*q,w;:wwqqw0:w-,qqq;;qw;:>ww;:w:;w,-84&*&5&64&%5%&5&%4&&456&&*6%$*%%4%555%5%6*#&&4&55&$5*%6*%*%565%63*$&5&6&&6%6%5&&%6&#&%555%6#&46&5555555&55&555555&5555555&&55555555&55&555&5&55&555", "5555555555555555&5&&5555*&%6%&5%4$&%45*&5&6%&%*5&4%*555**3&%54%6*4&6*5%%64&*46&535*&&6564*554&&55555&&5666%64*5&4&6&554&556%4&$554&553*56455%%5&55*4*0:>:;wq0>:ww-w:;q0::0w;;qwq:;:w>q,q063######3###@3$*0>>q;w;;;,00w0:qww0,q;ww;w;w::qwq;:;>w;w>q:::qwqq>::q,-q:0w;;;q0>,>;83#3#3##$333##3&;q::>;;:;qqw:w>0wq::;q:qwq0:qwqq:>;-*4464%%%65%664448455&3&&%$46&4*&&%&$*5&5%$*646%5%656365554%56%55*5&%5%&4545&&45&45&6&&6%46&6&6%55555555&5555555&&5555555555555&555555&&555555555&&5", "&55&55&5&55555&5&5555555%%&5$546&&&5&&&5%5&3844%4&&46&%%&*%65&5$38%44456%&54*&$%&*%%&%&%5455&6%556%5&46%644655&4&$6%4*5&*%&365565&5&4*4%5%55565%554&5-q>:qqw;::0qq>;0,>0ww;w>q:;q0>0;,qw;84#$#3##3###5@34-www,;,q>0q>qw0;;q;0w;:0w>0>q:q;w;:w;0q;;qw->;q:;:0ww0,;q,0,>0q>:,;*64#$##$$@#$@#$$-;,>q,;:>;w;;;;0wqw;;>>0q;:>w>0;w:>:86*%&%666356$5%*4%&*%%*5&*%&*5%%64%&55&4&&5%5&%6*555$64&5$&84%545&$%64%%*&*554&%4*%6#%&4**$664%555555&555&&555555&5555&55&555&5&555555555555&5555555", "555555555555&555555555555&<++++X%>;*$##$#3$@3#@3@4$ o,w:0q;;wqq0>wq:>qqw0>;qw;:;q>;:0>qq>w0w:> o:qw:wq:0ow..w0;:>,,0-+7#######3$@#@#8-,w0;;:q;wq:>o q:q:;:;q:w:;;0:;>;w,0**+=5&%5546&tt6X**5%36%6557+5%*5%555*4&5&&665445$&555,272<%5>q;:>0w1e<<2:>0w>;qqqo >:;q;;:w;wq-3$@####44##3### o:,w,:0>;qq:w;q;;::qqq;q>:q>qq:w:qqq;qwqqq o;;q;q:;>90OO;:q>>q>8&+=##33#3.t#43#58q>w:::ww;ww;:o q0>;ww0>:0,q:w0q>0>,-84+=*%5&&5&5<<6754$&*5&%4&=+554&6%*5#*%55543&&6&645&$92o<+&$1<56*35%$&%*&%&6%565 o%<1%%&%*%4&64655&55&55555555&555&55&55555555555&555555555555555555", "555555555555555555555555%5=+55644*3&456wo>454*.Xw45*$;oo44+7$..6555:Xo56&X &5+=6%5=+*#66to.4*5%tXt%65 o%55%to5665%**5%4Xt4$*5&5%45%Xt*646$&*5to$%%&&%wot0qwq>q; o:q0:w;:XX>qwo 0;::>q0qq>q;-%#@3Xt@###$..@ X8q,XX;qqw;q.<;>0w:0>:w.o:;0q:;;o.;>qq0XX0 oqw;:Xtq;qwqw:;w,,oo,#+=####$#7+@##5*q,wqoo0;:0q>o.o >qq0o.0q;>0qXt;,0:w:,Xw+7%64&5X*4565%6&5*$to.5%7+5&6555%to5&&%*5wo;%54&&5o *%%55&55&%4,o>&%55%&&36..5 X&*%&55&Xt6%%&5555555&555555555&&5&55555555&5&555555&5&555555&55555", "555555555&55555&5&5&555&&&7+564&%7+45 Orert5&ee=2&541 7=+5+72er155Or=re5%oy5o ++ o52r7r1351r=r5%= 562r9ew%55%$*.r7rO55+76%=1e7 <557+4&< 7er+%$Or=rXq:q0::r1q;>0:teer2qqo q:2et:=+qq+98*=1e7 <#30er97 X*,eer2:0o Orreqqq;w;;O 9er+::Xr9rO;qtere9 o;+=29Xw o:w9+>,Oye=2#+7#0r2#+ X450w>XreerX>;Xrer= qqXr=rO>q+92=X;q:>:O =re=&5=1e=5+=5%o 55:=r=eo5=+5. <561r9ew%% Orert66&45t <655&%=+5&%%64 X5o 55+=&6&7+&%%>6%< %% <54*45 o55r+&t t&+2,->0q;Xr9X:::22qtrX;o 0OrXw09+wq+9:87r.#17##1=3#X X#22wtrX:o 2wt ow-qqq. o;tr+:wrOqorqw19:wo oq+ <:;w o;;9+:. O#+=#290%#7+##%8>>,r+qq+r:we+q;+ w;rO:orq:+ <;:0:wwt o4,2=5&7rt&5+765X 4&29w65557+,e25$Oe567O&& e>%e+554*55< 2q%*57+%t t%+2%*%&4%1756o o5+=5&r<&Xr%&$&5555&5555&55&555&5555555555555&555555555555555555&55", "&&55555555&55555&55&555545==++O4&=+&* <65=+6t 2:54&21#8%$5+e%&o %%%6.X X5o 3*+75%%7+5*&%5oO 6&ret5%*5 o&621XX2=%5*4&. oXoyo$+75&71%%+=%&7+4Oe*%5=+%O9ooO ,,;q::q.2 1w:rOoo9+:o < <0;w9+ww+=,-=13#+=#%e<##$ X3rOooe+wo t0; ow;q::Oe;,:=+qX ooo owrO:0w o,+9;q:qyo>q9+,Or5####+7+rt3@37O#%8;;,X t0;t X. .w:o :Xyooo o;+9>:;:>;,Or5&*+7&6=+4&5+=%%o 55r<&64&&=+7e*$*22oX27%5 <%*7+5%*3%6&o7r<#5=+5OeooO &$65%*r<*%5 o5+7&. oXo o4555555&55555555555555&&55&&555555555555555555555&55555", "55555&55&555&555555555556%=+3$&667+%4 o%5=+%6Xr O&%=+64**4+=45o &6.er= o5X *&+=55&7+&35w;9+q:+9,:9+##+=$@ X##3 X# e779O>o 0,>yo>>qwq+9>;0=+wo =999X0 <:q; o;+9>w;q o;,=+0+7$##$3+r 1###3=+3$-w,wo w>q; oo :-qo 0o 9===X:+90q:;;,q+=55%+74*7+&5%+=46o 36 X53*55=e <$65=r7771%% X4*7+%*55*%%4*+r,5=+*+r=7775*$%6% o&%5 o%+=6o 7=77.*5555555555&55&55555555555555555555&&55555555&5555&&555", "5555555555555555&&&&555&&%7+&*63%7+&% o&&7+5&65q=+qrO>:0wqo Xr+;;q9+w:19:,=+6#+73# X$4# X#r<4&6;qo ,q0 o;;;w:Or;w>e+;. .0qwq: o:;w oq+90>;; o,>e+8.y.0>0;:+9q:q:q>:+7&&5+=567+%55+=&5< 65r<&*$4&7+2r:6%11&&&%65 o&%=+*$6448%6&5 o5=+&5+=5*X $& <5t X%o &4+r&5%=165o :5< *3,%&eO5& <%6X .%5,5$*$5&=255*:5+=5%7+5%+=4&=+*:r+X7e+5>yO64,0,q:0:o;0trO;+rt;>tqo qXrOw091;Xr=:>9+8%+=#$22#@1 X3+r0$#,8o >,, owwqqqty+o9r+ww92;w:tq22q:1 o:+9q:,: <:< +$0r<##-#+73qq:r+qq+rqqrO:t= qw92w;:tq+9qqw0:wq. .$.r76$=+%*5+96>9 &%+e;*5>%=+429;5o .&6q5% X54=+5%8%&tt5%o t47+5:rO%&>%*4*%%22$%1 o%+7$&=256$q&*65&&55555555555&555555&&55555555555555555555555&55555", "555555555&5&55&5555555555&= 767+$& o&67+%.r7y156%1 7eO5+7$&o 541r=7=r.o %&tre<4< 7.5er91re%r7re:$61r=56O 7e2&&5&%&t9r=r.4+=3*=+65+=*%7+35.22<=+%%or9=r8:,ww;9r9r10q>2r9rOwo qqO O:< 9e1=,>=+:*+7@#.rer< X@$2r7rO%o q>, q>w1re2=O##qqwwXreerX0>O 9rO w-.er9rXw+=0>:;,,881r=91=457+45&trerO $%w=r=r.47+&qeeq%O 7e2&5 o$*=+%5$%&trr=r<%&=+&5oy9=r%%6$$*.rer< o%+=5%t9r=r.%4&5555&5555555&55&5555555555555555&5&5555555&555555&55", "&5555&55555555555555555&%6456%656%$5&*#&5%6%4,X.5*4&5tot&*3%*$%&653..&>X%46&%&>X:55to%&5ot&t.*%XX$56&$..3%&qot5&56$*$**.X*5555%4%5%&65%5&$*%%%*%r<55&5X.58w:>;qq.otw>qq;.0,-:;;.oq:;00:,q0*6###;Xt#$##3#tX0##4580q,w,,,>:::q>0r<;;wqXo0qq:to.>qqww>,,,:-..#$#@##;X.##4#5#3@#&*.0w:oo:w,:;.ot;;q:q;Xo:w>:;w;:q,08&%.X&6%4&%5655$,X,%%*%5&.X:%*%5&6&4565;ot%%&%&64&4*&4&&45.Xw$&%5&5%%4o.*&%5&63%>ot&3%&545&4&.o&%8355555555555&555555555&5555&5555555&5&55555&5555555&55", "5555555555555&55555&5555&%&64&%5%5654&&%55%**%5&6$&$&%%&5555%*5%%6&%6$&5&55*%5%5&%&5%*45%5%6%5&55&6%&&45&6554&%&%5*56$%5&%&6%5&6&%&5%555%%&&1%*$&645*-,w>qqq;>;;qqqw0:;;::;:q,;wqqqqq:q:ww,w0*$##@###$#$####3###$3*8-q:>w>>,20>:0wqqw:>:;,,w>>>0-88$3##@3####$########%80>,,qwq;;w;wwq;0:;w;;>:qq:0:qq0q;:w;:,w0&5&55%5&55*%&555%%55&%&&4%6%&55&5%5&5&&&$&5&%*&&&64%56%55%5%55&45%%&5565%5$&5%5*$&55*4*%5556%*446$*555555555555555555555555&5555&55555555555555555555&55", "&5555555555555555&&5555556$6%6%%55%*%5&565$66&$56&5*$65%%*4*5555%&%*&$*5&%&6%&%5%6&46%66&$&&5$66%6%65465%6&5%6&55%56$&45&5555&5555555555%655O771t*3&%5%6668:,w:q:qqqqq:qq:::qq:qqqqq::q:qq::ww:w,w0853##3##3#3##3#####3#$58--0:w>+9=2.:>:wqqw:>w:>>>,,>q;0-*5$########33###3#####58-:,>wqqq:::qqq:qq:::q:q:qqqq:;qw:;qqqw,q8*5%555555555555&55&&&55555555555555&5555555&5555&5555555&&5555555&5555555&5555555555555&5555&55&555&5555555555555555555&55555555555555555555&5555555&555", "5555&555&5&55555555555555&%%65$*%$&465%&4*$$4%64455&5%5&546%6%$&&%5#6&&%5%55466%5%8%5&5&%66%&5&4&%&4&5%65&$55%%4%*5%63*%55555555555555&5&%5%%*$&&3&&%65%55*0>w:ww:w:ww:w:www::w:ww:w:::wq:q:wwww:>w084#####3###$####3#####$5*8-0wq;,q>;:www::ww:>>:::q0-8*5$###########33###$###$*0:>>:q:wwwwwwwwwww::ww:::w:w::wwwww:w:,>-*&5%55&555555555&&55555&5555555555555&5555&55555555555555555555555555&555555555555&&55555555555&5555555555&&&55&&55555&&&&&5555&55555555555555555555555&5", "555555&555&555&5&&555555%&4*53*548&*6%*3&%5*$%*5663&%&5%*5555665&%6*&%45*$*%645*&54&%&455*4%6&%5&%5&4%6%55&46&&66%&*4&*55555&555&55555&5&%$6%%5&$66%55&6%4&8;,,www:w::::w::w:ww:ww:wwwwwww:ww::wq>,w0*%######3##########@###345688---w>,,,,,,,>w;0--88*&3$####################348-w,>::ww:wwwwwwwww:w:w::ww:ww::>:::>w:w,;8&55%&5555&5555555&55555555555555&55&55555&555555&5555555555555&&&55555555555&555555&55&5555555&55555&555&&&55555&55555555&55&5555555555555555&&5555555555", "555555&55&5&5555555555554*&%&6545645545*45*$*%5%54&465%5%5$645&%55#6%&*&%*455&54%566&*&6%*%*555%56&64&4%%%%85%$5%%&4555$55&5555555555555%*63*5&%6&45*%%&55&*->,ww::w:www:::w::w::::ww::wwwwww:wwww>,>085####3####################6%***-8------888**5%4####################$###580w,>wq:>w:ww:wwwwwwwwww:::ww:w:ww:ww:::ww-65555&5555555555555555555&555&55&55555555&5&55&555555555555555&5555555555555&&5555&5&55555555&5555555&&&555555&55555555555&&555&&5555&555&55555&555555555&", "5555&5&&&5555555555555555&ww>,>0-53#######3#########3####%#@$@4$###3#$3######3#3####3########3########5-;w>w::ww:ww:ww:www:www:::::ww::ww:ww:::>,q855655555555&55&5555&&5555555555&5555555555&555555555555555555&5&5555555555555555555555555555555&5555555555&55&555555&5555555555555&&55555&55&5555555555555", "5555&&5555&55555555555556%= X$%$ o&6%6%6&$*5%&$&4554%5&45wo%%46&56%454%5%5&.t$455%%*5t+++r=+++%6%%84&%54%6&6$o;5&5*4$4&%55555&55555&55555%5%$&6&6&554%*%&5%5*-w>:w:ww::ww:wwww:wwww:wwwwwwww:wwwwww:>>ww-*3###3############3##3###$#4#@$##@@############3#########3########3&-;>>>wqww:q::w:wwww::w::w:www::wwwww>>ww>>>-*566555&55&&555555555&&5555&555&5555555555&555&5555555555&55&555555555555555555555555&55555&5555555&&55555555&55555555&5&&55&5&55555555&55555555&555555&55&", "555555555555555555&5555&$&7r965* X%55to%&&%%&%5%&%&6tot&%o &*&46oX>%%6*%tt%=+&&%%*&4*54%*7+*%&%%to.%&&5>X.356 X6%%4>ow6455&5555&55555555&%65*%3%444&&55%&555&80>w:ww:w:ww:::w:w:::ww:www:w:::ww:w:ww:w>,q-*%$###########3#########@3####################$######$#########$%*-:>www:w:>:qw::::www:www:::::ww::w:ww>>:w>w086565&555&&5&5555&&55555555555555&5&555555555555&55555555&5&55555&5555&5555555&5&5555555555&55&5555555555&55555&5&5555555&55&55&55&5&&55555555&&5555&55&555&", "&&5555555555555555&55555&5=1rO&% X6&1eee;65 o54=+&&1y=r65 7%.y7ert&o Oe<+ X&555%&%6&4=+%6%52r7y1%5< 7eo%7 56>:w,q-*55&%%655555&5555555555555555555&55555555555555&555555&55555&5&5555555555555&55&55555555&5&5555555555555555555555&55&555&5&5&5555555&5&55&555555555555555555", "555&5&5&55555555&555555&&%7+5%5e+&X 155%7+4555&6%6%6&&=+5&%&>5&< &5=1%65%% o%5t t&+25&&56455%5555555555555555555555555555%58-::>wwqw:w:w:wwww::w::::::wwwwwww:www:www>,,q-8&$#######33############3#3####################3#######@#358-:,,>www::w::www:::www:wwwwwww:w:wwwwwww::w>>0*5555&555&&5&5555555555555555&55&55555555555555555555555555555&55555&55555&555555555&55555&5555555555&5&&555&&555&555&555&55555&5555&555&&55&&55555&&55&555&&", "55&&55555555&55&5555555555=+*925 X*21XX1=6% o$*7+5%ret%55o 6$636to9+5X 65*4=+%&woXooX*5%&=+645&45oO &&1yo4*&5 X54OeooO &%55%&55*5&55555&5555&555555&555&&5555%*8;w,w:w>:wwwwww:w:www:wwww::::::www:www:::>,,,q-64##3######3####3############3##########3##3##3##3####%*8w>,,wwqww:ww::wwwww::::::www::w:ww::w:ww::w>wq8&5555555555&5555555555555&&55&&&55&555555&55555555555555555555555555555555&&&555555555&5555555&555555555555555&555555555&555555555555555555&5&5555555&55&555&", "55555&555555555555&55555457+3o . o%=r===14& X%&7+56t7 25*X 565>7r7r+4o 3*5%7+*$.=7===%46*=+56%&:w>:wwwwww::w:::ww:www:w:www::wwwww::ww>,,:08*%33#####3#####3####3###############3#######3####$%*8-q,,>wq::>www::www:w::wwww:wwww:w:w:wwwwww>qw>:-6%5555555&&55555555&5555&55&555555&5&5555&5555555&55&&55555555555555555555555&5555&5&55555555555&5555&5&5555555&55555555555&5&55&555555&55&555555555555555&555", "555&&5555&5&5555555&5555*57+552= o%125%55*5 X*&9+&4%*.rO%X 64%27;5=+5o 6$5*7+4664&%%665%57+6%$t <#o &%65>e2&* X%&w:::w:w:www::w:wwww:www:::::w::w::w:ww:qq>,>w08*%3#####3###########################3########3%680:>,:w:qwwwww:w::ww:ww::w:wwww:ww:wwww:w:wwwww>w-*5555555555555&5555555555555555&55&&&555555555555&&55555&5555&555555555&55555555&5555555555555555555&55555555&&5&555555555&5&5&5555&5&5555555555555555555555&55", "5&5&5&55555&555&5&5&5&554&7+&6wr o%X .%5:$& <3O +%*w66eO%o t%6716>9+&o 65*4=2$4%&*%6%$&*%=+&5*X w6< %$:&4126% O6%>rO%*q56<<*%%555&5555&55&55555&5555555555555555680>>wq::w:::w::wwwwwww:w:w:::wwwww:www:qw>www>>>::0-*%3#@#####33##3###########3##############$%*80w>>>>wwww>ww:::wwwwwwww::wwwww:w:w:wwww::w::www>08655&5555555555&5555555555&5555&&5555555&5555555555555555555555555555&&55&&55&55&55&555&555&&555&55555555555555&&55&55555555&555555555&5&55555555555&&55&5555555", "555&&5&555&&555555555555&6=+%&$+ X6&O 7e2&*1re17+%&r7re:&5er1%< 7e2yw:w::w::::w:w:www:w:ww::w:ww::w:w:w:ww:>>wq,,,w:0-86%3##@@#####################@@@###$4%&88;q>,,>:w>w:w::::ww:wwwwwww:www:w:w:w:w::w:www:ww>>q-*555555555555&555555555555555&55&&5555555&555555555&5555555555555555555&55555555&5555555&5&&5555&55555555555&555555555&555555&55555555&55&&555555555555555&55555", "55555&55555555555&&55&55&#&5%6&5555%6:Xt%&44..4*5%&4oo3*%%*Xt65to&3X>$&46%45tX465&%5*58$%%*&*%65Xt5t.6%.Xw&%&&..4&5%X.3*46&%&&5%55555555555555555555555555&5555&56*-q>>www::wwwww::ww:w:wwww:w:w:ww::w:w:wqqww:w>,>>>,>:0-8*5333$#####################3345*8-0:>,,,>>wwww:qwwww:w::::ww::wwwww::www:::ww::www:ww>q-*55&555&55555555&5555555&5&555&555&55555555555555&5&55555555555&5&&555&555555&5&555555&&55555555&555555&5&55555&555555555555555&55&5555555555555&55555555555555&5", "&55555555&5&555&55555555%6555$%555&55&&%56&65%6%&%5*$&*4%*%&%55&%65&%5&5%&%5%&%64&*4%5%&&&5465556%5&&$656%%*$56$&%&55&55%&56%5%&&555&5&&555&&55&555555&5%55&&5554%580>,:w:wwwwww:w:ww:w:w:w::w:www::::w:::>wwwwwqqwww,,wwq;;-88865%$3$##########$3$%5**8--0q:w,,,>:w::w:ww:>www:wwww:w:::www::ww::ww:w::wwww:w:w>08&&55555555&555555555&555555555&&&555&5&5&&55555&5&&5&55555555&555555555&5555555555555555&5555&&555&55&55&&5&555555555555&55555&&555555&555555&555&55555555&55&555", "555555&5555&555&5555&555&555555&555555555555555555&55&&&55&&&555555555555555&555555555555&55&5555&555555&&55555555555555555555555555555555&555555555555555555&5555%580w>>w::wqw>www::ww:ww:www::wwwwwww:wwww:w::www:ww::>>,,>:;0--888**&555&5&&6*888--00>,,,>>>::::wwwwwwww::wwwwww:www::w:w::w:w:w::ww:w:w:::>>0865555&55555&5555&5555&5555&&555555555555&55&55&555555&&55555555555&55555&5&5555555&55555&55555&5555555&5555555555&&&55&55&&&&55555555&&555555&5&&&555&555555&55555", "&55&555555&5&&55555&&555&55&&5555555&5&5555555555&5555555555555555555555555555555&5&55555&5555555555555555555&5555&55555555&55555&5&555555555555555555&5555&&5555555*-;>>ww:>:w:ww:wwww::w::w:w:www:w::ww:wwwwwww:w:w:::,,,,,,w>ww::q::;000000;;qq:qw:>,>w,>>wwqw::w::w:www:w:w::ww:w::www::wwwwww:ww::w:>>:q>wq-*%%5555555&&5555555&555&5555555&555555555555555&55555555&55555555555555555&555&55&5&55555555&5&55555555555555&5555555555&&5555555555&5&&55555555&55555555555&55&555", "&5555&555&555555555&55&55555555&5555&5&5&5&5555555555555555555555555555&5555&55555&55555&5555555555555555555555555&555&555&5555&5555&5555&5&&5555555555&55&5555545&55*-q>www:>>q:::w:www:ww:w:wwwww:::www::wwwwww:www:wwwwww:>>>,,,,,,,,,,,,,,,,,,,,,,,,w>>:::w::www::ww::::ww:::w:wwww:wwwwwww:wwww:w:::>>qw>;-65%5&55&55555555&55&&55&5&555555&&55&5&5555555555555555&&55&5&5&5555&55555555555555&5555555&&555&5555555555&5555&&5&55555555555&55&&&&555555555&&55555&&55555555&5&5", "5&55&&55555555&55555&55555&5555555555555&555&55&&55555555&&55&5555555555555555&55&5&5&5555555555555&55&&55555555&55555555555555&55555&5&5&5555555&&5&&55555&55555&55%58-:>>q::>:w:ww:ww:::w:w:w:ww:ww::ww:wwwwwww:w:w:w::wq:w::wwwwwwww>w::w:::w>>>www:www:ww:wwwww:::ww:::wwwww:ww:wwwwwww:ww:ww:ww:w:ww::w>>-*&&556555&55&555&555&5&555&555555555555555555555555&&5555&55&5&5555555555555555555555555&55555555555555&55&55&5555&5&55555&5555&55555&55555&555555&55555555555555&&55", "555&555&55555555555555&555&55555&5&55555&55555&5555555&&&5555&555&5555555555555555555555&55555555555555&5&555555555&555555&555555&&555&555555555555&5&5555555&55555554&80:,>w:w>ww::w:ww::::w:w::w:wwww:ww:wwwww:www:w:w>w:ww:ww:ww::www>>>w>>:w:w::::www:ww:ww:ww:www::www:ww::w::::w::::wwwww:wwwwwww::::ww-856&&&55555&555&&55555&55555555555555&55&5&&5555&55&555555555&55&5&55&55555&555&5555555555555&55555555&5&5555555555&5555555555&555555555&&5&555&555&5&5&&&555555555&&5", "5555&55&555&55&55555555555555555555555555555555555555555555555&555555555555&5555555555555&55555555555555&55555&55&&&5555555555555555555&55555555555555555555555&5555555&8-w,>:wwww:w::www:wwwwwww:wwwwwww:www::w:www:ww:wqww:w:w:::w:ww::q:qq::qw:wwww:w:::w:w:wwww:ww::ww:w:w:w::w::ww:w::wwwwww:www:w:qw>w0*5&555&5&5&5555&5555&5&5555555555555555&5555555&5555&55&55&55&55555555&5&5&5555&555555555&55555&5&&55555&&5&555&5555555555&5&5555&5&5555&55555555&555&55&55&&555&555&5&", "55555&555555555555555555555555555555555&5555555555555555&5555555&555555555555&5555&5&5555555555555555&55&555555555555&&&5555555555555555555555555&555&5555&55555555555&5680w>w::w:www:ww:ww::w:wwwww:www::::w::::w:www:wwwwww>>wwwww:wwww:wwwww:ww::wwwww:w:w::wwwwwwwwww::w:::www::::::::wwwwwww:ww:ww::w:-8&56%5&55&&5555555&555555&555555&55&&&&55555&55&&&555&5555555&5555555555&55&5555&555&5&&55&55555&5&55&5555555555&5&5555555&555&&55&5&555555&555&5&555555555555&5555555&5", "555555&5555555555&555555555&55555555555&55555555&&555555&5&&5555&5555&5555555555555555555&555555555555555555555555&&5555555555555&&&&55555555&&55555&555&5555555%565%565&&80w>::www::::w:w::ww:w::www:wwww:ww:www::www:ww:::qw:ww:www:wwww:www:::w::w::::qw:ww:w:w:www:w::::::ww:ww:wwww:www:wwww::::w:w>w086&5%5555555%5&55555555&55555555555&55&5555&555555555555555555555555555&&5&555555555555555&5555&&555&55555555&5555555555555&5555555&&5555&5&5&5555&55&&55555&55&55555555&", "5&555&55555555&5555555555&5&5555555&55555555555555555&5555555&&5555555555555555555555&555&55555&55&555555&&5555&55555555555555555555&55555&5555&555&&&55&55&5555555555555&68-:>w:www:::>wwww:::wwwww::wwww:ww:www:w:w:::www:wwwww:ww::wwwwwwwwww::w::::ww:w:wwwwwwwwww:w:ww::::wwwwww:w:w::ww:ww:w::w>www-8&5555555555555&555555555555&5555&5&555&&555555&555555555555555&5555&&555555555&55555&555555&55555555&&555555&555&5555&&5&555&&&555555555555555555&5555555555&555555555555", "5&5555&&5555555555555&5555&5&5555555555555&555&&5&5555555&55555&5555&55555&555555&55555555555&&55555&55&555555555555555&5555555555555555555&5&&555&555555&5&55&5555555555&5*80:,>wwwwwwww::::www:wwww::wwwww:::w:www:ww:::ww:::ww::www:w:wwwww:w::w:w:w:w:ww:w:w::w:w:w:::ww:ww::w:www:w::wwwww:w>>::>>w-86545&555&55555&&&55555555555&555555&5555555555&&5555555555&55555&555555555555&555555555555&555555555555555555555555555&&555&5555555&555&5&55&5&555&5555555555&&55&55555555", "555&55555&&55555555&555555555555555&55&55&5555&&55555555555&5&555555&55&5555555&5&55555555555&555&55&&555555&55&55&555&55555555&5555&55555&5555&5&55555&555555&55555555555%5&80>,>wwww:w::wwww::wwwwww:ww:www:w::ww:::ww:wwwwwwwwww::::w::::w::www:w::ww:w:ww:www:ww:w:wwwwww::wwww:wwww::ww:::wwwww>>q0865%%55555&55&55&55555555555555555555&&&5&5555&5555555555555&5&5555555555&55&&5&55555555555555&5555555&5&5555&5555555&55&55555&555555555&&55555&&555555555555555555555&555&5", "555555555&5555555555555555555555555&555555555&&&55555555555555&555555555555555555555555&555&5&555555555555555555555555&5555&55555555555555555&555&5&5555555555555&555&&555555&8-w>>>www>ww::wwww::ww:w::w::ww::wwww:ww:wwwwwww:ww:ww::wwww:::::::w:ww:www:::wwww::www:::wwwww:w:::::w:ww:w:w:w::wq:>,w-8*&5&55555555555&555555&55555555555&5&555&&555&555&55555555&5555555&5555555555&55&&555555555555&555555555&5555&55555555555555555555555&55555555&5&555&55&55&555555&5555&5&5&5", "55555555&5555&&55&5555555&55555&5555555&5555555555555&55&555555&555555&5&55555555&5555&5&5&55555555&555&5&&&555555&555&5&&555&&5555&5555555555&&55555&55555&555555555555555&&5&8-q>,>ww>ww:w:::w:w:wwwwwwww:ww:www:w:wwww:::wwwwww:ww:wwwww:www::w:wwww:ww:wwww:www:ww::w:www:ww:ww:::::wwww:wwww>>>q085&55&&6&55555&55555555&5555555555&&555555&5555555&5555555555&555&5&55555&5555&&&5&55&555&555&555555555555555555&55&5555555555&55&&55&555555&55555555&5&55555555&5&55555&&555&", "55&5555&5&55555555&5&55&555&555555&555555555555&5555&555&55555555555555&55&5&555555555555&55555555555555555555555555&5555555555&5555555&555&555555&5&5&5&&&5555&5&555555&5&5556**-q,,>ww:ww:wwww::ww:ww:w::w:w::wwwwwwwwwwwwww:www:wwww:www:ww:w:ww::w:w:www:w::w:w:w:::w:wwww:ww:w:www:wwwwwwww>,,;-*655&5&6&5&5&5555555&55555555555&555555&55&5555&55&555&5555&5555555&&55&55555555555555&55555555&555&555&5555555555555555&555555555&555&555555555555&555555555555555&55&55555555", "55&55555555555&5555&5555555&5555555&5555&55555&&5555555555555555555555555555555555&&55&555&5&555&&55555555&55555555&5&555&555555555555&5555555555&5555555555555555555&55&5555&6&5*-0:>>www::www::wwww::wwwwww::wwww:wwwwwww:ww:w:ww:www:ww::w:w:ww:www::ww:www:w:::ww:::w:www:w:ww:www:www:www>>>>;8*55&55555&555555&55&55555555&55&5555555555555555&555555&55&&5555555555&555555555&555555555555555&55555&555555555&5555&55555&&5555&555555&5555&55&55&55&5&555&&55&5&5555555555555", "555&55&55&5555555555&555&5555&5555555&5555555555&55555555&5555&5&555555555555&&5555&5555555555&555555&55555555555&&555&55&55&5555555&&&55&5555555555&555&5555555&5555555%&&5555%5&*80>,,ww::w:ww:ww:ww:::::www:www:w:::www:wwwwwww:www:www::w:ww::wwwwwwwwwww:::w:www:ww::www:w::www:w:wwwwww>>,:08*5&5%6&&55&55555555555&5555555555&555555&55&5555555555555555555&55555&5&5555&555555&555555555&555&55555&5&5&55555&&5&5&55555555555555555555555555555555&555555555&555&&5&55555555", "5&55&55555&55&555555&555&&5%5%&55&55%%66%%&5%55&%&%6%%5%5555&55&%55%%&5%5%*%5555555555554*%%5&5%&46%6&55&55$*46&65%%%&&%55%&&%&56$&6%&&%566$6%*%$*5%&5*66&&$56665%5&5&%555&66%&%%5658-0,,w,;qq:>w:>:q>;,:>,:q>q:>:::,ww>>qwqwq:wq,qw>q:wwq,;:wq::wq;>:>>:wq>,:w>w:w:::ww:,q>q::>:w::wwwww:ww>,>:-8%56$5*5&%%&$&%*%56&$6&5%&5%65%5%&6556%55%&%&%&&$6%4*5545*%&%65%%65%&5655&#*5%5&5&564&5&&&455%5&$%65%&5%%&&%%*5&3**%6&%&%%%6&$&5&%5&&%%&555&6%&%%&5%*5%5555&55&555&55555555&5555555", "&55&&&&55555&555&55555556%%&6%45$*&5*&5$645&5554*3*445565&55&%5%*456*545&6%46836&5555555&%5%*%%64&%64%&%%556&4$%%%&*&%6&%&*4564&*%&&%5565%%*&*4&*%4*5*$5%&&8$%%45*644%655&%%4*5&5%&65*-0w>,,>q:wq>ww,wwq,w0>:::>:>qwq>;>w:,0w,w:>w,;>>qww,;q>qqw>;:,qw;w>;:;:,qq>::q>q>:qq,qq>w;qw:wwww:qww>,>0-*%*53*545%6&&&65$6655&4&%&*4%&%%5854*$5&5&*355555*%*645%*%%635&&64565&5$%*%6$%*%55&5$&#*54&65*55%5*5&6%5665%*55$&545&64*%*&455$65&*$$63&55%%5%&%&*$5*46%555&5555&5&55555555555555555", "555555555555&555555555555$6$5&5&*$&&35&&%6%56%&*%%&%*5%655&5%11t$*$*3%55455&&4&%555555&5366&$5&O.5&35&%556$5o.$*&63$:oXooXXooXoXq&6#O.54&&&*438woX+2<5.O65%$56&**%+6*6%5$*$*&355&%&%%*&802Ow>>,wwwtoooooowqt+w>q::ooww:w,:q::w..,qq;q:,q::;,>>O.>>:qw,q>:q,;1:>:wq:w:wwwww:>,>:086&5%5%5&5&*$*4454646%56%%5%%$&&%66%%*465%53X**%6&5%&&555555&555555&5555555&555&55", "5&555555555555555555555&&666&3%455%6&%46>*5&4&6%&&6%3o7%555%o;.+++29+=2+++0>>w; :qw:X21>>++:qto.ww>:,1w:wqw>:;,=o>q>,0;,;>,qq q;>w,>:w::w::>,>q-*65>X*5t.X12:*5.XooXooXow%&&545&5%%%5%4*4%&6$ 44.7+o&56%:rq6&55&$*4>*5546&%*54%&5$59t45q&%5%<++o2.%9&66&>291,5&6=%56%%=+++=5r+++7*3%+o6r++r++7*5&3eX%5*3&6455&5555555&&555&&555&&555555", "55&555&5555555555&5555555*$7 =5*%621>&&$*34*&56X7*$*4%t11t%&55%55545*45*355555555&5&&%5$1 =er5&5.7==r7=e7.*#&465&6=%*84&4*17r9=.5&&X+5.=7er==4o+%65%<+++2= ===1%55%.X.5115&6$**%56-.=tetq,,tooO2o2+oo:w:w:tew,>>t+Oo:o9=re9e9+.>:wq;9X9+oeOww;,X2+++r22=ew,:O+++29 =991:wwwwww>w>:-8*5%5Xe%4X2O.O.3%72++++++r<5&%5**%56%5*&&5*$55& %64<546&3*1 79r&*3621>66$6$$6*%.7==y77e=.&6;o+2++.<2oXXt%&o+5%1675=46577=7=%y=7=7%,o1Ot=5%7*5=4%*%r>6&4556555&55555555555&5555&5&555555", "55&5&5555555555&5555555&4%656%5%56o=%5%&&2e.5*$*<<455o7*&5,+rX4%5*%&%%55*5&&4&*5&555&55555555Xe,*%&O1&4&45&et&3*56%&55r7=7r=77r5&465+o%55&5o+%*.oO1X.1er=y&*XooXot 4&5,4465%5%2155%384$&6=**-O+,,:qo9+29+92+rq>:to+r+O:trow:w>:w+ow:1,w>>:,q9+O:w.r,q:,0Xoooe+.>>0w>oow:>w,,,,0-*665&&<245*rqO<$**7o*%%3&% w55*%$5%%665&4451===7 =7==16$&&o9,$&5O155&%&2e.5*3*<<%55559t566#6&4t+1 r+<11+72ot+1=+4e%=%2.4*765*7*76&4=%t+=1oeooeXX=&356 %%%&*#*5555&5&5555555555555555555555", "555&55555&55555555&55555*5%&66%5%5X=5%8356<15$6%7<5&&o7q<2e+>*5&%%65&6&564*%6%%555555&&&6366.r..53*r.56545+1O+,%6q645&=65%7*&*755t++71+o7==e+54=+2=+=&X+% 3654&<=+ 654*%*45*;=O%&56%%*5O%7%*te.ow,,<+q<+>+o,=w>t9+=1o12>Xe>qww;>+O1+eq:ww;>:r2w>:qeX:w:,.q:>=o0,;w>,,,:q08*5566&51O%649t%%*%%=o56*&%tr%45$*%56%%66465*4&%%% 5&$*445*.r..65%r.%55&&6<154*%7<55%4+1O+:*%>$6&q=1+=. X&+o&wo27o.2&7&X1&57=771&==777&8%+X&r++r++7$*%& 565$66%55&5555&55&5555555&&5555555&5", "55&&&5555555&55555&555555&%554&5&5X=55%55%56%46<96%%%ore2o*%$5&46551==7=e&&555<+++++++++<*3or..r15O7*%%56. 2<<2<1ro%55r777r777r5$,oX2OXt=%6556%=+17+75+O4r&%%&o15o 465$5565q=21=2<5&5%.25=&$=oqet;,; wq2O>;q,+r2o22eOwww,:r:=oww:;299=re++o;,;>qo2wo :wwq>>>,,q-8*&5555%%6e.%5&1O&65%51.%&%56<2&%&<+++++++++<5%5%rq& %wr%66%Xr..e1%O=46&%%&%5*%%&&$75X+%=5+o&76%65+X%, .566%55.r7,=.:,ww;w,:trwqw >w.r>;>2O+ote>trXw>;, t>w;,eo:::>wq:w+o,w:q:wqw+o:t X;,>,,,w--6656$*54&&tr55&%.e44664%*%55*%=o465<+++++++++<5%5.e56 %52X5565t65%29r.5&%&&55$*%%.r.4*%Xr<5wO 1.4&5*0>e%&.q2:r5%6X2172:57*2o5575%r+++r%&755t7ro=%%=54=4&%5 &%655%1t5&55555555555&55555555555&55", "&555&555555555555555&555*5%&&&%5&&o766%%4*5%*Xr<%%55*X=%655&5%4&6%*%%5*o+&4654545&55&55&%4&5$&6%57+84&55.o%.eOe5*&#*to9ooXeXXXeX;6+X+97O=&46+X&1=er715=t5=3*5#o7o1rX5%&%&.ro&4%5*4e.64et5=<2545>r*.=== ===r=99;ww++qw:yq>>OtwX2>+o2<:w++q>w09qw:wtr:>>q:>X++=O>w:>:q>>o9o2ro,>,,q-885*&%6&$56&%1+%6&6$9X&538535&5$O=5565$*%&*%4&&5%4&51O&% %*<2%%%56$&%%=+5%&%&$4*5%*Xr<4&%4.o*.eOe%%*$5.=re=r=52++&%>e<+t5o==X=%*5=*%r+++r567&X22X&r==r===&5%5 5&%6$wy5&55555&5555555555555555555&5", "55555&555555555555555555$%&5&%5%5&X=&&$6546t1y.%&556$o756%4*5&*4%5%%5*3+O&54&*%*&5&55555*6%**4&512*455*$%5>r.57&4%*%o+e+++++++r+t521+oμ%=t&XXO1o.wr5&7654&6X+Xr,5%&*6*t5=72.46e.5o=55r2&4*2%2<6582O0:X9,w:>>wr.>,o9>:::>:+2O>ww,>,;w>12:;q,:27;>>o+ortq:-0-1e7w*554*%%*3.r>*45&%orw%5358%66r.5=5%4*&5076:,Oe;>qq,;;>,Oet>ww:: qq:1oo92tw>,;:,,2+:q0-5.26%%27O44>6X+#4%te<44557&*r+++r&%=4&&+X6*45=5*%6%5&2O53>+e>%5555555555&5555555&&&5555555", "5&5555&&5&5&&5555&55&5555&66&$%45%.15464r1<%&5%&*35555<2=77=1<5%5%==777y=71%*5%&555&55555*&%t2r<&%5%&654%&41e+++2e&6&57&*5%65&75&X25+=OooXooX<;o+2e21rt&<+%&*64&5t+eo9*5&X2%554*&XO=1+e1.,,tr.Xr=r.wq>>;wt22O;<291tww,>w:o1r2t:;q>>q+e+1et:w1tw;,,,1<66%*6465>O&*%%&5*%>+*4$*6or+,%&%&46&5%565%%&465*X3&5% $*6%<&4*t2r<*53&&&53*r1<%55%&5*454&$1e+++2e4&5%<712te<&21w%&X+6t+eo546557*4eXoXo5675&&+o45&%7%55$&5#>9e=r2;&55&5&5&555555&&&5555&5555555&", "5&&55&&55555&55555&5555554*4565&6&65%655&4&8$5&5$&*%%5%%%6%%55&5&%555556%&544656&5555555%%&&q+;*6%6&4%55&&6%:Xoot36%5515&%%.771%4o.$5wo++++++ot+ooq*+e71<>%**o=O-0X:>,<.:,>;:q,,q::,to>,>>:w;,:.+.>w>w,w0,>to,,w,,ww:Oo-*%&54*6<=+&5&%%55%55*65&%&5$%56544&3*:6$&*%5&55%%$&&4*%&%&%85&5%+64$4%%*&q+q&$5&&54&6%5$583&55%64&65&5>Xoot5$*te+&*Xro%&41+%4o+w,w:ww,>q,>,,q>w,,w:,w,>:,w>ww,>>:,;:,,q,,w>,ww;;886*3%*6$*%4*5&%%655$5**5%45%&5&*555%6*%&554*44*%&%%6*4%&4%5&&%&4&4&&55466%54%*&56546$565%&56&364&%55556564%4*%$*&4*%6$&$w55&6545%&5&$*5$&4%*58%4%&3*$*$%*%56&&4%6$#*5*&%5%65545&5&5&&55&5&55&555&555555&555&55", "55555&5555555555555&5&555&5%54&55&&%553*55%55&%&%555&$6%&%&%%6*%55&6%5&&&$&&4%&55555&5555%55&6%665%5$&&5&%&54%65%*%%54*4%&465555%*%&5%*4%*5%%&%&55%%*%55%6%%%&&5546%&&455%*$6%5&&%*46&%6&%&%$65%56555%&4%*65%**5&*88-0q:,,,,,,>,w,>w,q:>:>::>;w:w,>w,,>,,,,,,>;;---8*8&65%*%#*5%&$&6%&%55&&5%5&65&555$55&&455556555&$6565%&5%&54*4555&4&%&%&6%555563&636&56$55565&%5&&%5%&&55%$*56466%5&%5%&5&%55%&5&%55&$66$56555%%&%&5&46%6&%&%&44&6$6*5&5555&54*455*%5555&5&&555555555&5&&5&55555", "555&5555555555&&&55555&5&5%6&55%38$&55$&64&%&%5&5&%555%5555&65*4%5&4&56&%*53*5$6555555&5556645*%%4&5*53&65%%6&5%%&&%5%*%555%65%64556%5*45&$*%%6&5%*55&4&%6&$6%5*565&4655&%654*6%564&655555%*45555%%&5%&%5%*%45*%6%66*88--q0;qww>>>,,,,,,,,q>,,,,w,,,>w>w:w::-0-88&&*%5%*6$5&55%6&%5555565&4644&555&&5555555&555&5555&555&&55555&555555555&5555555555&5&5&&&555555&5555&555555555555&55&555555555555555555555&555&&55555&&5&55&5555555555555555555&5555555555&5555555&555555555555555", "555555&555555555&&555555566$&555&45&555%$&&5&%6%%5*%5*4*%&64%6$6&555554%5%*6356%55555&55%4556*$&&&%5$&64$*%&%44*55545*%6655%646%&*%5%4566555564%6&%4565545%*5*$46&55%6555&&5%4%5&$%%%5*%&%5$5*5&&6*46&%&6%%5*5%*$&&$&556*588-88--0;::w;,>,,,,,wq:>0:-0--888*8*&64*5&6%5$4*&&%*55%545&*%45%*&%6$&55555555555&55555555555555&555555&55&55555555555&&&55&5&&555&55&55&55&5555555555&5555555&&55&&55&5&&555555555&555&5555555555555555555555&5&&&55&555555555&555555&5&5&5555&5555555555", "55555555555555&&555&5555%35o<5%&51$565&6t5#6&5t.565%56&%&4$*&5&55%*5<.5&5*3556*5555&5&&5*55*%3*4%6%464&&5&&4*6%5%%&*53&445664*&4$55%5o%5%5&%&&$6%$&6o%5&&$6&*4*:5&%545%56%*%35&et45:553*$+o6r++r++765%5eX664546555445&5%&&64t56*%&5&:e13*5&*%4,e%5%.2+O*5$&$4%2o&84&56q.6&%45%56&%&%&55&555555555&5&5555&55555&55&55&55&55&&55555555&5555&5555&5555555555&555&5555555&55555555555555555&5555&555&55555555&5555&55555555555555555&55555&5&&5&&5555555555555555555555555555", "5&5555&55555&55&55&&5&55&t=1X1XoX9XoX66&2.&45%o7556%66.o.&22$*565*$*e56&&<5&#&%6&55555&5564%6 %%&*X=%4%&555 55*%%8$5&54*5554*65%&4&5# %555%554*%55&4 *45<3$&%5&1 79r555521:&5*64545&.===y7=9=.660o1Ot=5&7%47&&&5r>%5&%46$55<277=err r<*365%&we1*6&%%%%4o2o<55+ot4*%*5*&X2o+96%&X765&5*o.6%%6%6&55555&55555555&55&&5555&555555&555555555555555555555&&55&55555555555555555555555555555&55&5555555555555&5555555555&5&5555&555&55555555555555555555&5555555555&&5&&5555555&555&55555", "555555555&55555555&5&555%5<12:O++r++O5547*tooXOr11%&%&*4&11%*6354o+1 72o%11&845%55555555$&*$6 *&$6o=&56&654 %.XO+7O%&*6:6+:6%.t*&&&&& %&%6665&417==7 ====1*%6&X9q&&%O1&46%51e.6$%*<<*%6459t&&*3*%5t+71Xeooeoo=5%5$ %%*5&&%6%56eo%5%&55&55&556%555 $5&*X=5&%&+2= ==+Ooro&6%<14O+&5+O36A <:&44&&$*356%% #55%55%5.r..&4&r.4*%*46<1655$=<36&6+1O+:56w46*$+o%r++r++=%&%6 3&%%6%5%6&5*%*%2<55%%%&&&:r55et6%5*%% 1r1t5%664*5r:& 6:r5%*%or..r1&<75&&555%5*556%%%65&&%&5%rq5<+ooow&4465%%%5e.&5%&%r*$6&$4>y;&55&&5&55&555555555555555&5555555555555555555555555&55555&55&55555555555555555&5&5555555555&&&5555555&5&55555555555&555&555555555555555&5&55&555555555&55&&55555&&55555555555&5555555&&5", "55555555555555&5555555555.72=17%.:.%=*%%76t%64X=5&%56.y7<;5t1=&5%66r:6&=o&5e.%5&%4&%5*%&&553&+55%&<1%*$55*% 55q115%555&1<*Xwo=%555&55 %>+r+;%&%5.e65 *52o5556t%&%1er.*$65%*%5*%4.r.554or<%wO 1.%5&&t=ro=55=&5=$&64 %%&5551t6%555*et&%5655&4wr<&5%*%&6&%5t95&%65&55%&6*t+=772e%*56% &5w%&551O$&%6%6$*555%555555&555&55&55555555555555&5&555555555555&5555&5555&5555&55&5&55555&55555555555555555555555555555555555&55555555555&5&&555555&5555555555555555555&55&555555&555555&55555&5", "555555555555&55555555555&%OX+OO&=67&<4*5=O+&%*<15&55.yX%%65&5e.66%X2*5$e.5%&55tr:55 56%r.*4&%6551145*45665%6t1r.5&5%5%*;r.&7&55&%6%+o3O65=63<*55$ q*5&*1+56%644%=O5%&5&%*5%5&1e:$6&%*%%e.5<1$6$%&&4*2<5&&4&55&%&6O+&9t&54>r551e7w&5%&5455555&555&555555555555&5&55&5555555555&55&55555555555&55555&5&5&5555&55555555555&&5555&555555&5&555&5&5555&555&5555555&5&5&555&55555&5&&55555&5555555&5555555555555&&55555&5", "&&55&55&5&&5&55&55&55555&*2X+15<2%76Oo&5=2655%56%t=1%65%6%%;o<2r+w%&5&$*5&o9&5.*&$&545+X%65&7%%655*52O$&q+e,%5&4*%&.r+t64&&44**44Oet54653.9*%O2*36&w$*41O%$*4&t%5*%5;r1=545*4;&.1%e<5*%%%65*%6&5%+r2t*4%*%&44*6%45tw4&&5%65*45%55&>XXo5%5&$6%%%*%45&*&%&4<=+&$64*%*55555&555&5555555&555555&555&555555&555555555555&5&55555&555555&555555555555555555555555555555&555555&555&555555&555555&&55&55555555&55&555555&55555&55&&55&5&&5555555555555", "555&5&555555&&55555555&5%44:t556$556&%*554&3&&*455*5345&6%%&465&6$5&5&45&4&%%8%66$&*4*&45*&465*&$&%&%&%%38$%656%%5&*4%*%5%656**356&56$55%64664%&465$&36$&*3%&&%*%&4&$6*4&8%&%&%65&%4**%&&4&4*65556&6455%%*55654%4*65&%%5%%*4465%&$4&646%*%5*%*34$*4&%%5&%*$655%%%66%$6%&*456$5&5%%%*45*445%6%5*$564&6%555&55&&&5&55&5555555555&555555555&555555555&5555&5555&55&5555555&5555555&&5555&5555&5555&55555555555&555555555555555555555&555555&55555555&5555555&55555&55&&5555555&55&55555", "555555&5555&555555555555*4664*%&5&5%55%5565&&%%&&5%%*65&&&5%*%%&%56$5555%5%*6%%%55*4&&%664655%%556%55&&55%556$6&5&%566$6&&$%&5$*55%64&&55*%46&5&&%565&4*&$&65%5%54*%5&5555%5%6&%%&5&%%*%4*55&&&&5%5%&&&6546%%&56&%%%64*%&&5%*5%65&*5%&%55%*%546&55&566%555544&555546%&&%%6&%5&%54&&%56546%&565%&555546645555555555&&5&55&55555555555555&5&55555555&55&5555&55&&5&55555555555&5555555555555555&55&55555555555&&5555&55555555555555555&555555&55&5&5555555&&5&5555555555555555&5555&&5", "55555555555555555555&55555&5&5555555&555&55&555&55555&555555&5&5&&55555555555&555&&555555555555555555&5&555&555555555555&555555&55&5&55555555&&55555555&555555555555555&555555555&555555555555&5555555&5555555&5555555555555&5555&55555&55555&5555555555555555&5&55&&5555555555&55555555555&55&555555555555555555&555555555555&555555555555&555&55555555555555&&555555&55&&555555555555555555555&555&55&55555555555555&55&55555555555&5&&5&5555555&&555555555&55555&555&5&&55&555&55", "555555555&555555555555&55&55&555555&555555555&5555&55555&5555555555555&5555&5555&&5555555555555&555555555555555&&55555555555555555555&5555555555&5555555555555&&5&55555&5&55&55&5&5555&5&555555555&&555&555555555555555555555&5&&55&5555555555&555&5&55555555&&&5555&55555555&&5&555555555&5555555555555&555&&5&&&555&55555555&&55555555555555&555&5555555&5555&555555&555555555&5555555555555555555555555&555555&55555555555555&5555&555&555&5555555555555555555&5555&555555555&5&5", "&5555&55555&5&5555&55&55555555555555555&55&55555555&555&5&5&5555555555&&&55&55555&555555555&&5555555555555&55555555&5555&5555555555555&5555&55&55555555555&555555&555555555&555555555555&555&&555555555555555555555555555555555555555555555555555555&55&5555555&55&5555&5555&5555&&555555555&55555&5555555555&5555&555555555&&55555&5&5&55&5&555555555555&5&55&5555555555555555&555555555&&555&555555&&5555555&555555555555555&&5&5555555&555&5555555&55555555555&555555555555555555", "5&&5555555&5555&5&5555&5&55&5&55555555&&&5&55555555555&555555&5555555&5&5&5555555&555555&5555555&5&555&5&555&5555&5&555555555555&555&555&55&555555555555555&5&5555555555&55&5&&5555555&55&5555&5555555555&&55555555555555&55555&5555555&555555555&555555555&555555555555555555555555555555&5&555555555555555&5&55555555555555555&5555555555555555555&5555555555555555&555555555&&555555&5555555&55&55&555&555555&555&5555&555555555&5555&&5&55555&&55555555555555555555&&5555&555555", "55&55555555555555&&555&55&5555&55&555&55&5555555&5&555&555555555&555555&5555555555555&5555&5555555555555555&5555&5555&55&5&5555555&5&5555&5&555555&5555&5555555555&555&555&555555555&555555&5555&5&55555555&5555555555555&5555555&555&&55555&5555555&5555&555555555555&&5&5555555&&5&555&55555&555555555555&555&55&55555555555555555555555555555555&55555555555&555&555&55555&555555555&5555&55555&5555&5555555555555555555555&&555&55555&555555555555555555555555555&555555555&55&5", "5555555&555555&5&555555555&5555555&&55&55&&555&&55555555555555&55&5&5&5555555&555555555555555555555555&55&5&555&&5&55&555555555&5&55&5&&55&55555555&&555555555555555&55&55555&5&5555555555555&&&555555555&5&55&55555555&55555555555555&55&555&555555&5&55555&5555555555&5555&555&&5555555555&55555&5555&5555555555&555555&555555555&5&55&555555555555555555555&555555&5&555555555555555&5555&5555555&5555555555&5555555&5555&&55555&&5&&5&&5&55&5&55555555&55&55555&55&555&55555555&", "555555&&555555555555&5555555&5555555555&5555555&55555555555555&&5555555&5&555555555&555555555555555&&55555555&5&&55555555&555&555555555555&555555555555&&5555555&5&5555&555555555555&55555555&&555555&&5&555555555&&555&5555555&5555&555&&555&55&55&55&5&5555555555&55555&555555555555&555&555&&&&5555&555555&5555&55&5&5&555&55&5&555&5555&5555555&55&5&5555&55&&&5555&5&55555555555555555555555555555555&55555555&5555555&5&55555555555555555&5555555&55&55555&55&5555555555555555", "555555555555555&55&5555555&&5&5&&5&5&&555&&5&&&5555555&5&5555&555&&55555555&55&555555&&55555555555&&5555&55555555555555555555555&5&5555&555555555555555555555&5555555&555&555555555&55&555555&5&555555555555555555555555&55555555&5&555555555555&5&&5&5&555555&5&5555555555&5&555&555&555&555&&55&5&55555&5&55&555555555&&55&55&55&555&5&55555555555555&5555555555555555555&5555&55555555&5&5&55555555&55555555&&5555&5555555555555555555555&&55555555&5555555555555&555&55&55&5&5&5", "555555&5555555555555&&55&5555&55555&5&55555&5&55555&55555555&5555555555555&5&5&55&5555555555555&5555555&5&5555555555555555&555&555&5555&5&5&55555&555555&555&5&&55&5555555&5&55&55555555&55&555555&55&5555&&&&55555555555&55&&&&555555&&55555555&55&5555555555&555&555&55555555&&555&&55&55&55555555555555&5555&55&5&55555555&5555555555555&5555555&555&55555&&5555555&555555&55555555&5555&55555555&555555&&55&5555555555&555555555555555&5555555555&&55555555555&555&5555555&55&5&", "55555555555&5555&5&55&&5&555555555&555&55555&&555555555&55&&&555&55&555555&555555555555&55555555555&&555555555555&&&55555555555&&55&55555&5&5555555555555555555&5&555555555555&555&555555555&5555&5555&55&5&5555555555555&&555555&555555555&&55555&555555555555&55555555&555&5&5&555555&5555&555555555555555555555555&5&5555555555&&5&55555&5&55555&55&5555555555555555555555&55&5555555555555555&&&55&5555&5&5&555&555555555555555&55555&5555&55555&5555555555&5555555555555555555&", "5555555555555555&&55&&5555555&5&55555&5555555555555555&555&55&5&5&&55&&55555555&&5&55555555&555&55555555555555555555&55555&55555&&55555&555555555555&555555&55555&555&5&&55555555&555555555555555555555&5555&5555555555555555&55555555555555&55555555555555555&55555&555555555&55555555&5555&&55555&555555555555&&5&5&55&&5&&&5555&5555&55555&555555555&55&55&55555555&555&5555555555&55555&55555&555555555555555&&&555555&5&555&5&5555555&555&&55&55555&55555&5555555555&5555555555", "55555555&&5&55&5555555555&&5555555&5555555555555555555555555555555&&555555&555555&&5&&5555555555&555555&&5&555&55555555555&&55555555555555&5555&555&5&&55555&5555555555555555555555&5555555&5&555&555555555555555&5555&5555&5555&555555&5555555&555&5&&555555&5&5&5555555&555&555555555555&5555555&55555&55555555&555555555555555555555&5&555555&5555555&555555555555&555&55&5&&55555555555555&5555555555&55555555555555&555&5555&5555555&&555555&55555555555555555555&555555&555555", "55&5&5555&555&5&5555&&5555555&5555555&5555&555&55555555555&555555&55555555&55555555555&55555&5&5&555555&5555555555555555555555555555&&5555&555555555555&55555555555555555555555&55&&555&&&5555555555555555555&5&5555&555&55555555555555&55&5555&55&55&55555555&555&5555&555555&5555555555555555555555&5555&&&55555555&555&5555&&5555&5&5&5&5555&&55&55&555555555&5555&55&55555555555555555555&&5&55555&&555&555555&55555555555555555555&555&55555555555&555555555555&555&555&55555&&", "&5&5&5&&5555555555555555&55&&555&&55&5&555555555&555555555&5&55&5555&55&5555&5555&55555&&5555555555555&5&5&55555&555&5555555555&55&555555555&55555555555555555555&555555&5555555555555555555&55&5555555555555555&55555555&5555555555555&&555&&55555&5555&55555555555555555555&555555555555&55&&55&555&555555555555&55&55&555&55&&5555&555555&5&&555555&55555555&555555555555555&55555&5555&&&55555&55&&555&5555555&55555&55&5&55555555555555555555555555555&555555555555555&55555555", "&55&555555555555555&55555555555&55&5555&5555555555&5555&&555555555&&5555&55&5555555555555555555555&555&55555&55&5&55555555555&555555555555&5555555&55&555&55555555&555&55555555&5555&5555555555555555555555&5555555555555555&&55555555555555&55&555555&5555&5555555555&55&5555555555&555555555&5&5&5&5&555&5555555555&5555&55555555555&&5&5&55&5555&&5555555555&5555555555&555&5555555&555555555555&5555555555555555&555&5555555555555555555555&55&555555555555555555555&55555555555", "&555555555555&5555555555&55555555555&&55555555555&555&5555555555&555&55555555555&5&5555555&5&&55555555&5555555555555555&55&5&55555555&55555555555&55&55555555555555555555&5555&555&&&55555555555555555555&555555555555&&55555555&555555&55555&5555&55555&5555&55555&5555555555&555555555555555555555555&55555555&55&55555555&5555555&&&555&5&5&55555555&555555&55555555&5&55555&5555&555&55555555555555555555&5555555555555&5555&5555555555555555555&55555&555555&55555555555555&555", "555555555&55&555&5555555&555555&5555555555555555555555555555&5555555555555555&555555555&5&555555&5&555&55&555555555555&55555555555&55555555&55&55555555555&5555555555555&5555&555555555&5&5555555555&&555555555&55555&5&&&55555&555&&&55&&555555&5&5555555555&55555555&5555555555&555555555555555555&55555555555&55555&5&5555555555555555555&&&&55555555&55555555555555&5555&55&5&&55555555555555555&555555&555&5555&5555555&55555&5555&555&5555555555555555&5&5555&55555555&5&55555", "&55&&55555555&55&55&555&&5&555&55&5555&&55555555555555&&555&55555&&&5&55555&55555555555555555555555&55555555&555&5555555555555555&55&5555555555555555555555&555555555&55555555555&5&55&55&5&5&&55555555&5555&55555&555&5&55555555&55&55555555555&&555&5555555555&5555&5&55&55555555&&5555555555555555&5&55&55&&5555&55555555555&555555&5&55555&&&555&555555&5555555&555555&55555555555&5&5&555&55555555555&55&5&5555&&555555555&555555&5&555&555555&&555&5555&5&&555&5555&5&55555555", "555&&5555&5555555&55555555&5555555555&55&55555&555&555&55555&555555555555555555&5&&5555&5&555&5555555&5&5&555555&5555555&55555555555&&55&55555555&5555555&5555555&555&5555&5555&5555555555555&55555555555&555555555&5555&55555555555555&555&55555555&5&5555&5&55&5&555555555555555555555555&&5555555555555555555555555&55&5555555&555555&5&555555555&5&5555555555&5&55555&555555&5555&55555555555&55&55555555555555&555555&5555&55&555&&5&5555555&5555555555&55&555555555555&&55555&", "55555555555&5555&&5&&55555&55&55555555&555555&55555&555&55&55555&55555555555&55555555555555&55555&&&55555555555&&5&5555&55&&55555&55555555&5555&55555555555&5&&55555&5555&55&&&55555&5555555&55555&&5555555555555555555&555&55&55&5555555555&5555555&&555555&55555555&555555&555555555&5555&555&55555555&55555555&555&&55555&55&5555&55555&55&5555&&55555555&555555555&5555555&555555555555555&5555555555&55&&55&5555&5555555555&&555&55&&55555&55555555555555555&5555555555555&5&55", "5555555&55&55555555555&&555&55555555&55555555&5555&5&555555555&&555&55555555555&5555555555555555&55555555555&55555555&5555&555555555&55555555555555555555&5555555&555&&555&555555555555&555&555&555&555555555&&&555555&55555555&55555&55555&5555&5555&555&5&5555&55555555&555555555&55555555555&555&55&55&5555&&55&55555555555555555&5&555&55555555&555555&55555555555&55555555555555555555&5555555&555555&5&555&555555&5&555&55555555555555&5555555555555&555&55555555&5555&&55555&", "5555&5555&&55&5555555555555&5555555555&&55&5&&55555555&55&5555555555&55&5&55555555555&555&5555&55555555555&555&&55&55555555&5555555555&5555555&55555&&5&555555555555555555555&&&55555555555555&5555&5&555555555&55&555555&&55&5555&555555555555555&555555555&55&&555555555555&5&55&&5&555&55555555555555&55555555555555&&5555555&5&&555555555&&5555555555555&&55555555555555&55555555&5&55&5555555&55&55555&5555555555555555&55&55555555555&5555555&55555&55555555555555555555555555", "555555555555555&55555555&&55&5&55&55555555&555555&5&&55&55555555555555555&&5555555&55555&555555555&&55555555555555555&5&555555555&55555555555555555&55&5555&55&55555&555555555555555&555&5555555555&5555&55&55&555555&555555&5&555&555555&5555555555555555&555555&5&55&555&5555&555&5555&555555555&555&555&555&5&555555555&555&5555555555555555&55555555555555555555&55555555555555&55&555555555555&&&555555555&5555&555555555&555555555&55555&55&5555555&55&5&55555555&55555555555&", "5555555&5555&5555555555555555&&55&55&5555&55555&555&5&&5555&5555555&5&55555555555555555&5&5&555555&&5&55555555555555555555&55555555555555555555555555555&5&&&5555555&&555&55555555555555&5555555&5555555555555555555555555555&5555555555555&5&55555555&55&55555555555555555555&5555555555&5555555&5&5&5555&5555&55555&55555&5555555555555555555&555555555&55555555&&555555555555&5555555&555555&555&55555&5555555555&55&5555555555555&555555&55555555555&5555555&5555555555&55555555", "55555555&5&&55555555555555555555&555555555&55555&&55555555555&55&&&5&55555555555555&555555&55555&5555555&5555555&5&55555555555555&55555&5555555555555&555555555555&555&555555555555&555555555555555555555555555&55555555&55555555555555555&5555&5555555555555555&55555&55555555555555555555555&555555555&555555555555&5&5555555555&55555555555555555555&555555555555555&5555&555&5555555555555555&555&55&5&5555&55555555555555555555555555&&555&55&55555555555&&555555555&555555&5&5", "5555&5&5555&&555555&5555&555555&55555555555555555555&5&5555555&5555&55555555555&55555&55&&&55&5&5&555&555555555555555555555555555&&55555&55555555555555555555555555&55555&5&55555555&555555555555555555555&55555&5555555&555&555555&5555555&55555&555555555&5&555555&&555&5&&55555555555&5&5555&555555&5&55555555&&55&555555&55555555555555&555555&&&5555&5&&555555&5555&&55555555555&55555&55555&5555&&55555&&&5&555555555555555555&555&&555555555555555&555555555&55&5555555555555", "5&55&55555555&555&555&555&555555555&5&555555&5&5&5555555555555555&55555&&5555555&5555&5&55&5&5555&55&&55555&55555555555&555555555&5555555555555&5555555555&5555&555&5555&&555555&555555&555&555555&55555&&55&555&&5555555555555555555555555&55555555&555555&&&5555555&555555555555555&555555555&555555555&55555555555&55&555555&&555555555555555&555&55555555555555555555&5555555&555555&5555&5&55555555&55&55555555555555555555555&555555555555&555555555&5555555555&55&55555&55555", "55555555&5555555&&5555555&&5&55&555&55555&5555&55555555&55555&55555&55&55&55555555555555&&555&55555&&5555555555555555555555&55555555&555555&55555&55555&5&5555&5555&555&55555&55555&5555&555555&&55&55555555&555555&55555555&5&55&&55&5555&555&555&5555555555555555&55555&5&&555&5555&55&&555&555&5555555&55&55555555555555&555555555&5&5&555555&5555&555555&5555555555555555&555555555555&5555&5&555555555555555&5555555&5&5555&5555555&55555&5&55&555555&&55555555555555&55&5555&5", "5555&5555555&555&55555555555&55555&555&5555555555555&555&5555555555&&&&5555555555&55555555555555555&55555&&5555555555&555&55&55&555555&&55&5&&&5555&&5&&&5555&555&555&&&5&555555555555555555555555&55555&55555555&5555&&555555555&555&555&5&5&555&5&5555&55555&55555&5555555&&&5&555555&&555&555&&5&55&&5&555&5&55555&55555555&5555&5555&555555555555&55&5&5555555&5555555555&&&555555&55&&555&5555&55555&5555555&555&55555555555&55555&55&&55555555&5555&&55555555&5555555555555555", "5555555555&&5&55555&5555&5&55&5555555&5&55&5&5&5&555555555555&5555555555555&555555555555&55555555555555555&&&5&&555&&55555555555555&5555555555555555&555&&&555&55&5555555555555555555555&555&&5555&5&5555555555555555555&5&5&555&&5&5&55555&5555555&5&5555&&55555555&555555&&5555555&5555555&55&5555555555555555&5&555&5&555555&55555555&5&5555555555555555&5&5&&5555555&&55&555555555&555555555&555555&5&55555&5555555&555555&5&555555555555555555555555555555555&5&555555&55555555", "555&555&5555&55&555&55555555555555&5555555555555&555555&555&&&&5555555555&55555555&555&555555555&55&5555555555555&55555&5&5555555555555555555555555555&555555555&5&&&5555555555&&55&555&55&55555555555555555555&55&5555555555555555555555&555555555&555&555555555555555&55&5&555555555555555555&55&555&5555555&555555&55555555555&5&5&55555&5&555555555555555555555&5&5&55555&555555555555555555555&&&55555&55555555555555555&&55555&555555&55&5&55555555&555555555555&555555&555&5&", "55555555555555555&5555555&5&&555555&5555555555&555&5555555&555&555&&555555555&5&55555555555&5&55555555&5555555&555555555555555555555&5555555&555&5555555&&5&555555555555555&5&&&5&55&5555&55&555555555555555&&555555&555555555555555555555555&&555555&5&555&55&55&&555555555&5&555555555&5555&&&55&&55555555555&5555555&555&555555555555&555&55555555555&&5555&5&555555555555555&55&555&555&55555555&55555555&55555555&555&5&555555555555&&55555&555555&&55555555555555&5555555555&5" }; xscreensaver-5.36/hacks/images/osx_10_3.xpm000644 000767 000024 00000357555 10612446051 020600 0ustar00jwzstaff000000 000000 /* XPM */ static char *osx_10_3[] = { /* width height ncolors chars_per_pixel */ "474 256 16 1", /* colors */ " c #7D7D7D", ". c #5F5F5F", "X c #393939", "o c #E4E4E4", "O c #1F1F1F", "+ c #191919", "@ c #151515", "# c #A2A2A2", "$ c #4E4E4E", "% c #F9F9F9", "& c #444444", "* c #404040", "= c #2A2A2A", "- c #1A1A1A", "; c #181818", ": c #C5C5C5", /* pixels */ "+;;;;@;+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;+;@;-++;;;;;;+;;;;@;--;;;;;@;+;;;;@;--;;;;;@;+;;;;@;--;;;;;;;+;;;;@;--;;;;;;;+;;;;@;++;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;+;;;;+++;;;;;;;;;;;@@;++;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;+", ";;;+;@;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;+;;;;;;;@;-+;;;;;;;+;;;@@;++;;;;;;;;;;;;@;+;;;;;;;;+;;;;@;++;;;;;;;+;;;;;;++;;;;;;;;;;;;@;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;++;;;;;;;;;;;;;;++;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;+", ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;+;;;;;;;;;;;;;;++;+;;;;;;;;;;;++;;+;;;;;;+;;;;+++;+;;;;;;+;;;;+++;+;;;;;;;;;;;++;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;+++;;;;;;;;+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;+", ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;", ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;++;;;;+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;", ";;;;;+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;+;;-;;;;;;;;;;;++;;+;;;;;;;;;;;;;;+++;;;;;;;;;;;+;++;;;;;;;;;;;;+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;++;;;++;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;@", ";;;;++;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-;@@;;;;;;;;;+;;+;;;;;;;;;;;;;;+-+;@;;;;;;;;;+;;-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;++;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;@", ";;;;;+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;+;;+;@@;;;;;+;;;;;;+;@@;;;;;;;;;+;;+;@@;;;;;;;;;;;++;@@;+;;;+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;@;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;@", ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;", ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;", ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;", ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;", ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;", ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;", ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;", ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;", ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;@;++;;;;;;;;;;;;;;++;@;;;@;;;;;;;;+++;;;;;;+;;;;@;++;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;", ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;@;++;;;;;;;+;;;;;;-+;;;;;;;+;;;;;;++;;;;;;;+;;;;@;-+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;", "+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;++;;+;;;;;;;;;;;;+;;+;;;;;;;;;;;;+;;+;;;;@;;;;;;+++;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;", ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;", ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;+;;;;;;;;;;;;;;;+;;;;;;;;;;;;;;;+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;", ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;+;;;;;;;;;;;;;;;+;;;;;;;;;;;;;;;+;;;;;;;;;;;;+;;+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;", ";+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;+;;;;;;;;;;;;;;;++;;;;;;;;;;;;;;+;;;;;;;;;;;;;;;+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;", ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;+;@;;;;;;;;;;;;++;;;;;;;;+;;;;;;;;;;;;;;;;;;;+;;+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;", ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;+;;;++@@;;;;;;;;++;;+++;;;;;;;;;;;+;;;;;;;;;;-+;;;;;;+;;;;;;+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;", ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;+++;;;+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;++;;+;;;;;;++;@;;;;;;;;;;;;;;;;--;;;;;;;@;;;;;+;;;;;;-;;;+;;;;;;;;;;;;;;;;;;;;;;;;;;---;;;++;;;;;;;;;-OO-;;;;;-$-;;;;;;;;;+=O;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-OO;;;;;;;;;;;;;;;;;--OO--;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;", ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; :-;;;.#+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;=% ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;+;;;+;;;;;@;;@@;;@@;;;++;@;;;;++;;;;;;@;;+-@;+;;;;;;;;;;;;--;;;;;;;;;;;;;;;;;;;;;;;=o=;;;&#O;;;;;;;;;#o=;;;;; %=;;;;;;;;;;##O;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-: ;;;;;;;;;;;;;;;;;*%%o:&-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;", ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;*%.-;Oo&;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;&%&;;;;;+O;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;+OO;;;;;;;;;;;;;;;-O+;;;;;;;;;;;;;;;;;;;;;@;;;;@;-;;;;;;;;;;;;;;;+;@+;@;;@@@;;+;;;@@;;;;;;;@;;+;;;@;;;O==-;;;;;;;;;;;;;;;;;;;;;;X%=;;; %O;;;;;;;;;:%O;;;;; %=;;;;;;;;;+::O;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-=O;;=:#+;;;;;;;;;;;;;;;;*% o%.+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;", ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;+#%O+:o+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;O%X;;;;;=%O;;;;;;;;;;;;;;;;;;;;++-++;;;+-++;=o +-++++++;+-++--O O+;;;+OO;;;+--+-OOOO--O=O+O=OO===X=-@;+;O=XX=OO=XXX=--O==XX=O=X=-+O=====O--=O--==OX XO;-OOO-;--OOO-;;;;;;;;X%=;;+#%O;;+--+;;-::=;++++$%=;;;;;;;+-+##O;;--++;;++;;--;+O--O--++;;;;;;O: -+O: ++-;;;++----;;;;;$o*O*%#--OOO-+-O-;-O-----;-OO--;-OOOO-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;", ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-:: %=;;;#ooo=;;#o-;.oO;;;;;=o#:%#-;;O:%:-;;-#o%=;;+#%%o% ;;;;O%%%:+;$ooo=;;;;;;O##o ;O:oo +;=oo% - %%%$-#%o:.;O::#:$%o%#+;;O##-;+=:=O#ooo.== :=+Xo.= o#%#O@+;O&:o%o==#o%o == : oo#$::#*-=# :::$O=#.==##X#o%%.OX:o%&O-:#o%O;;;;;;;;*%=--+.%=;-:o%%=++:%O;O#%o%%X;;;;;+X:%:o#-+&o%%#+XoO;$: -O:$&o#:%:=;;;;;.%%%&O:# %o*;;O:%% -;;;;;.o=-X%#-&%oo#-=o&;X%#-=# O&%%:&-=::#:X;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;", ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; %%#-;;#%*-#%O;:%-;.%O;;;;;&%o*.%=;&%#+#:+;:#- %O;#%=-:%$;;;;; %.;;$%.+ %*;;;;;=%:X++#:O$%&- :=OO+=%:-+O.XO#o-Oo% --&oX-;;;-&%$-O#oO %$X#o$X#:=-&%$X#%#$=O;+-*oo.&$= % $#o.=.%%. %o .%#=X%% $:%XX% =XooX&o:$=X::X %=Oo%#=-;;;;;;;;Xooooo%%O+#%*=#%=+:o=+#%X=o%=;;;;;.%#O %#-*%#O$%.=%$+ %:OXoX$%%*.%.;;;;;=o --O:%#=#:-O#:=$%$+;;;;.oX=ooX*%#=.% Xo -.%:OX%&=o#=#:O=o% OO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;", ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;+:%=+;+o +;-o ;#%-;$%O;;;;;.%X;O%=;#%.O %=O%#O %X-o ;;X%$;;;;;.%=;;#:+;;#:-;;;;$%$;;=o:=$o#-#%.-+;=%#+;;--+Xo=Oo:-;;=%=;;;;;=o:-=%.=:#O-&%:* oX-&%.X o&O-;;+=.%.=OOX::*=&:o& %$=&% X&%:XX% X=$%.&% =Xo:XXo:X= % &.%&Ooo=-;;;;;;;;;Xo#. :%=-o.-+Oo +:%O=%*+-.%*;;;;+#oO+-:#-#o=;+#:X: O#%:= o=$% -=: ;;;;;O:#+;O::O+ oO=%:=.o#-;;;;$%o%o$O o=-O#:&o#=#oo**o=.%.&#%$=o:O;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;", ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;+:%O;;Oo=;;+:#;:%O; %O;;;;;.%O;-%*;#%o%%%O.%%%%%==%$;;*% ;;;;;.%=;-:#;;;$:-;;;;$%$;;X%%%%%#+O:%o$+=%#+;+$%%%:O=%:+;;=%=;;;;;O o=.oO=% O-*oo& oX-&%.X#oX;+;;+= o*-;-*%#X-X:o$ o*O*% =*%:X*%.XO&% &%.=Xo:XXo:X=#%%%%%.O:o=;;;;;;;;;;*%XO;- %O=%=;;+:#-:oO.%=;; %X;;;;;:#O;;##-##O;;#%O#: :#oX# -$%.;Oo ;;;;;O: ;;O: ;; oOX%%%%%#-;;;;$%&=OOO##O;-&o& :.o#o##:O#%o%%o.=%:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;", ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;+:oO;;+o*+;+:#;#%-;$%=;;;;;.%X;-oX;#o=+++; %$;+-;O%$;;O%&;;;;;.%=;;##;;;##+;;;;$%X;;=%#+--+++-=#oX=%#;;Xo -$o=O%:+;;=o=;;;;;+X%#:#-=o#O-&o#*#oX=.%.X#oX++@;+=$%$OO=*:#*=$::$ %$X$% &$%:$$o *X.%.$% X&o:XX%oX= %.&XXOOooO;;+-;;;;;;&%=;;+ %==o*+;-:.+:oO.o=;;.%=;;;;+#:O;;#:O#oO;;#oO$:%#=#:o.;$%$;O:.;;;;;Oo ;;O: +;.oOX% -OO-+;;;;.%=;;;O :O;O o=&%#:X:o:.O o*===O=oo-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;", ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;+:%O;;;:oO- %O;#%O=o%=;;;;;$%X;-%X;$%#+;=--::-;O-+::+-o%$;;;;;$%=;; %=;=o#;;;;;*%.;;O#%=;-O;O=- %&Oo:-+=%$-#o=O%:+;;=% -+;;;;O:%:O;O#o$& %.X %..%%.X oX;++--O&%:.$ $#% $ o $ o$&$% $$%:$$%o..o%..o:. %oXXo%$=$%:$**==o:=;;*#O;;;;;X%=;;+#%O+:oO-.%X+:%=Oo#O=o%=;;;;;#%&-&%#- %.+=% +=o%&+ %:=;$% ;Oo ;;;;;-:#-;Oo ;;.oO-:%=+O=+;;;;.o=;;;;.%.OXo#-X%% O %:=;&%#=O===%:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;", ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;+:%O;;;-:%o%.+;=:%o:%=;;;;;.%=;OoX;+.%o%o=;=o%o%*;=o%:o% ;;;;;-:%:+;#%%%:+;;;;;*% ;;;O:%o%#+ %o% ++.%o.Oo%ooo:&%#;;;O:%#-;;;;O&%#-;-X:%o%#XO*o%o %.=#o=--O===* %o%o$.:%o%:.$#%$&.%#$$%:$$ooo%% $&:%%:o:$X %o X.o%%%.Xoo=+-#%=;;;;;*%X;;+#%=;O:o%% -+:oO+.%%oo%X;;;;;-:%%#o:--#%%%:O;O:%X; %#-;.%.;Oo ;;;;;-.%%*O:#;; oO+=:%o%#+;;;;.o*;;;;O#%o%:=+=:o$-&%#-;O.%%%o&=o:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;", ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;+OO;;;;;-OOO+;;;+O-+-;;;;;;+-+;;-+;;;----;;;+---;;-+--+-+;;;;;++++;;+---;;;;;;;-O+;;;;+O--;;+-OO-;;-OO-+-OO--O---;;;;O==+;;;;-*%X-;;OX&&*=-+=*&&XX=O=*===XXX**$....&&.....&&$.&*&.$*&..$$o#..$$&*$.....&&$..&XX&&$&=OXXO;-=XO;;;;;-=-;;+-O-;;-OOO+;;-O-;+OO--O-;;;;;;--O----;+-OO-+;;OO+;+O--;-=O;+--;;;;;;+OO-+O-;;+-+;;-OOO-;;;;;O=-;;;;+O===O-;-==O;OOO;;;O===OO-==-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;", ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;O#oO+;;-+-----+-+-OOOO==XX******&&&&$&&&&&&&&&&&&&&&&**&&$$.% $$&&**&&&**********XXX==OO---++---+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;", ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;=#.O@@;;;@@;@;;;;+OO=XXXX********&**&&&&&*&&****&*&******&&$o $&&&******************XX==O;;;;;@;;@@;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;", ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;O=O-@;;@;-+;;;--O==XX************&&***********************&&$$&***&********************XX=O--+@;+;;+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;", ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;++;;;;;@;;;;;++;--;;-O===X*****************************************&&&***************************XX==O+;-+++-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;", ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;=O+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-X-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;O=-;;;++;@@@@;@;-;;-;;;;+;;--==XX****************$.$**************&******************************************X=OO-+;@;;;++;;O=O;;;;;;;;;;;;;;;;;+++++;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-=O;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;", ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;+#:O;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;X%%o=;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;XoX;@@--@@-;;O;@--+;;;@;-+O==XXX*****************$o *************&&&&&*&&&*************************************X=O-+++++O-;+Xo=;;;;;;;;;;;;;;;;+#oo%#O;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;X%$;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;", ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;+:%O;;;;;;;;;;;;;+O+;;--;;;;;;;;;;;;;;;;;;;;;;;+:#--+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;&%X-;@@;@@@@;+;@;;;@;+;+O==XX********************.% &***********&&$$$&&&&****************************************X=OO-+=$=@O$%X;;;;;;;;;;;;;;;;+:o :% -;;;;;;;;;;;;;;;OO+;;;;;;;;;;;;;;-O-;;;;;;&% ;;;;;;;;;;;;;+=O;;-O=;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;", ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;+:oO+-+;;+--;;+;;$oO;;#o-;;;;;;;;;;;;;;;;;;;;;;-:X;;;;;;;;;;;;;;;;;;;;;;;+;;;+++++++;;;;;+;;++++;+--O-+-OOO-;;&%&O;;;+O=X=O-@-=X=O--O=*&$&**$$$$&*&$&$$$&**&$$$.%#$&$$$$&*****&....$$$$$$$&****&$$$$$&*&$$$$&&$$$$&*&&$&&&**&&&&*X==O.o$X=.%&OO-;;;+;++;;;;;;;:#O-:%O;;;+++;;;++++++ o=+;;-+++;;-O--;Xo&++;;;;*% +++;;++;;;+++-##+;O: O-++--O--;+---O--;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;", ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;+::::o#-;&oO;O#O-:%o: o%% ;;#%ooO;; ##:o&;;;;;-#%%%&;$oo%X;;$::%.;;;;- o%:O;+&o%:OOo ;;O# +X%o:O+=::::*$o%o#O+$%$O@;;O&#%o.OO*:oo.==* ooo & o%%:$&.o##o:.&&.#oo#o $ ooo#&****&.oooo.$$o:oo$****.o ooo$&$o#oo$$:o%#$&.:oo:$&#:%%$***XX:%o%*$o.#%:=;+=:%%=;;;;;+:#-+#oO;- %%#O;O#o%:-*%%%#- o%o O;.#:o##%o:=;;;;X%:#%o=;-# ;;$#-X%%% =%%%#-=:%%#=-=::#o#&-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;", ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;+#%:= %=+#%=;=%=; %X+-:%=-;.o$O#%=; %:X#%=;;;;;Oo -+&o.O#%X; %:=+;;;;&%.-OO;=%.=:#O:#+;&%X=%.=:#-=%% =O& = %$O&o$O@+-*::.$$=X:o. %.$#%#....o% %:$.%%: %o$$:% :%#.%%...&****$o% %%.$%%#.&**** %% %o.$o% .$:% %.$:o.. &$% $ &***** %.&=$o% .o O=:#O:oO;;;;;::$#%*++ %X=:.+#%&O=O-#%$-+. O#%&; %:*-&%#O-;;;;X%%#=#:=O: ;;$oOOo#O-=:#=O=o:X.%#-X%o#$o#-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;", ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;+:o=+-::-.%=;=oO;$oO;;#oO;;:#;;-: ;#oX;&%=;;;;;-:&;;#:+;+##;$%X;;;;;;X%#-;;+ oXO#o=Xo*+.#-.o&=#%==%#O;;OOO&% =$%$O@@;X:o.X=O$%#. o:.%o$&&& o &$#%..%#$.oo$.o:$$.% .%% $$****&.% .. %..%:.&***** % $$#%..o:.$.%: %:.o%#$&*.%:.&&*****.%.X=.o X*:#X %.X %O;;;;+#%%%$+;-::X=o:O$%#O+;+#oX;;+-+$% ; %.+;.% ;;;;;;&%#-+$% O:#;;.oO-:#+;O:#-;.%.-O.%*X%:O=:#-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;", ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;+:oO;;:o-.o=;OoO;.o=;;#oO;-:O;;;##; o-;Xo=;;;;;-:*;+:.;;; :;$o=;;;;;;+$oo.;;#oo:o:OOo.-:.-#o:oo:X=o#-;-=#o:o =$%$O@@;O$o%:$=$%o%%%:.%#&X*$#o$*&.% .%#$$:o$.% &*$% $ :%:.&***&#% .$ % .%:$*****$ %.*$ %..%#$* o%%%%:..:o%.&& %%#$&**** %.*X.%$O=:#&:%%%%%O;;;;;::=::-;O:%%%%o=-#%%.-+#%=;+=:o%%$- %X;;&%.;;;;;;X% ;;=% O: ;;.oO-:#+;O:#-;.%X;;&%.X%#-O#:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;", ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;+:%O;;:#-.oO;=oO;$:O;;#:O;+:*;;;# ;.:-;=:=;;;;;-:X;+#$;;; #;X:O;;;;;;;;+$oX; #O---;+ #.#-- #=O---=:#-;=:#& o.=$o$O@;-O=*.o:*$%#...$.%:$*&$ o.*$ o..%#&$oo$.% &&$% &$. %o$***$ % $$ %..%#$*****$#o.$$ %..%#$*.%#. ..$$. oo$&$$ %:$****.%.**.%$O=o#* % $&XO;;;;+:#OXo$+Oo#=OOO++-O %X+ %X;Oo#= %.- %*;;&% ;;;;;;&%.;;*o*O:#;+ oOO: ;;=:#-;.o&+-$%.=o#-=#:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;", "+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;+:o&+O:X;&:=O :O;X:O;; :-;; #-;=:O;$:-;=:=;;;;;+:=;;*:O;-:X;X:-;;;;;;+-;-:*;=:*+;-+;O::$+;=:$-+OO=: -;X: &.: =$o$O;+-=&&$#o&$:o.$$ .:% $...%:..o%$.%#&$oo$$%:$.o: &...:%$***&.%: o%..o:$*****$#%#..oo..%#$*.o% .. $ .$#%$$.$.o:$**** % $&.%$=X:#X.%:$&$X-;;;+::-+#%=+:%$--O-==-$%X; %=+&%.O#%.O %*;;$%.+;;;;;X%:OO#o=O#:O.%:O-::-+O::=-*%#O=:#OX%#-O#:-O..-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;", ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;+:oo::#+;-##: :O;+## +-##X++####=;;.#-;=#O;;;;;+#O;;;$:#:*;;X#-;;;;;;-####+;;&####-;-##O;;+&####O=# -;= :# ##X&:&O@;+X:%oo#X& %%oo#&.:%oo $#%o%%.&$%:&$oo&& %oo:% $ooo%#$&*&&$ %o%% $.%:$*****& %:%oo.$.%#$*$.ooo%#$#%o%#$.o%oo &****$:%o. %.XX::X=.o%o%&O--;-#:-;-::-O:%o%:O.oo%:O;=:%#O#%%::%*.%&;;-#%o=;;;;$%%oo%.+;$%%##o=;&o%.-X%% O.%%oo&-X%:-O::-=o#-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;", ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;----O+;;;-OO--+;;++-;;+-+;;+---+;;++;;;+;;;;;;;;;;;;;+;+;;;;;;;;;;;;;+++;;;;;---+;;;++;;;;+-O-O--=O-;O=XXXXX=OX=-;;+OX&$$$**&....$*&$...$*$....&*&$$&&$$&*&...$.$&....$&&**&$$. ..$$$ $&*****$ % ...$*$..$**$.. .$$....$&&...$&*****&$..&&.&*X&XO;=&&$&=-;@;-=O-;;OO+;-O=OO+-OO=O+;+-=O-OX====O==-;;;O=O+;;;;-OO==O+;;-O=OOO+;-==O;O===;O==X=-;OXO+-O=+-=O;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;", ";+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;++;++-------+++;;@@;OO=X***&***********&&*&&&*************************&&**&&&$$$$$$$&*******& %.**********************************************XO;-OOOO-;;@;+-++;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;", ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;+;;++;;;;;;;;@;+;;;;O=XX****************&***********************************&&&&&&&&&&******& :.***********************************************=O+@;--+;;;+;;-+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;", ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;++;;@;+;;+;;@;-O=X***********************************************************************$$&***********************************************X=O;@+;;;;;;;;--;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;", ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;++;;-+;@+O=X***********************************************************XXXXXX**********************************************************X=O;@;;;@@+;;++;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;", ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;+-O=X*&********************************************************XX======XX*********************************************************X=O-;;;@@;@;++;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;", ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;+;;;;;;;-O=X**********************************************************XX=OO--OO=XX*********************************************************X==O-+;;;@@;+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;", ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;+;;-O=X***********************************************************X=O;;++@+O=X**********************************************************X==-+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;", ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;++;-O=X***********************************************************X=O+;;;;@;+O=X**********************************************************X=O-;;;;;+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;", ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-O=XX***********************************************************X=-+;;;;+;;-=X***********************************************************X=O-;@;;+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;", ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;+O=XX************************************************************XO;;;;;;;;;+OX************************************************************X=O+@;;;;;;;;;;;;;;;;;;;;;;;;;+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;", ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;O=X**************************************************************XO;;;;;;;;;+OXX************************************************************X=O+;;;;;;;;;;;;;;;;;;;;;;;;;+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;", "+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;@;+-;;;+O=X***************************************************************XO;;;;;;;;;+OX**************************************************************X=O+;;;++;;;;;;;;;;;;;;+++;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;", "+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;+-;;;O=X****************************************************************XO;;;;;;;;;;OX***************************************************************X=O;@;++;;;;;;;;;;;;;;+++;;;;+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;", ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;++;;O=X&&***************************************************************XO;;;;;;;;;;OX****************************************************************X=-@;;;;;@;;++;;;;;;;;;;;;;++;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;", ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-=X******************************************************************XO;;;;;;;;;;OX***************************************************************&*X=-;;;;;;;;;;;;;;;;;;;;;;;+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;", ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;+-+;@;-OX*******************************************************************XO;;;;;;;;;;OX*****************************************************************X=O;@;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;", ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;+-;;;-O=*&******************************************************************XO;;;;;;;;;;OX******************************************************************X=O;;;;;;;;;;;;;;;+;;;;;;;;;;;;;;;+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;", ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;+O=X********************************************************************XO;;;;;;;;;;OX*******************************************************************X=O+;;;;;;;;;;;;++;;;;;;;;;;;;;;++;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;", ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-=X********************************************************************&XO;;;;;;;;;;OX***&****************************************************************X=-@;@;+;;;;;;;++;@;;++;;;;+;;;++;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;", ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;--+;;;;;;;;;;;;;;;;;;;;;;;;;;O+;+O+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;--+;;;;-=;;;;;;;;;;;;;;;;;;@+;;OX*&**************************************************&****************&XO;;;;;;;O=OO*&&*****************&*********&**********************&&&****&&&******XXOOO;;-;;+;@;+;+;@;-;+;;;;++;;+++;;;;;;;;;;;;;;;;;;;-=O;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;O=O;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;", ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;$ O;;;+ =;;;;;;;;;;;;;;;;..+-:=;*o=;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;Xo=;;;O:.;;;;;;;;;;;;;;;;@;;;;O=X*&***********************************************&********************XO;;;;;;;$:O=##$&***************&$&********&*&*******************& :.&**& :.********.#X-@;+;;;+;+--;@;+;;@;;;@;+-;@;;;;;;;;;;;;;;;;;;;;X:.+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;X:X;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;", ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;.%X-;;O%=;;;;;;;;;;;;;;;;:#+O%X;.%X;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; %X;;+##O;;;;;;;;;;;;;;;;@@@@-=XX***************************************&$.*****X*&******&*************XO;;;;;;;.%==#:$&&&&&&*******&*&$ $&**&&&&**&&&&&****************$#%#$**$:%.*******& :*-@;+@@@;+=*=+@@@@@@;;@@@@@@@;;;;;;;;;;;;;;;;;;;;*% -;;;;;;;;;;;O=O;;;;;;;;;;;;;;;;;;;;;;;;;X%*;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;", ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;Oo#O;-$oO;;+++;;;;;;;;;;;++;=%=;$%=;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;$%X;;+---;;---O-----+;;-====OOX*&&&&&******&&***&**&&*****&&****&**&*&**$::&&X*&&*X&&&&&*&******&&&&&**X=O-++--O$%=O$.$$$$..$&&*&$$$&&$#o.$&&$$$&&&$$&$$&&*&&&&&********&:%%.*& o%.*&$$$$*&$$XOO====O-O.o.XO;O===O-O====O+;;+---;;--O----+;;;;&% -+----+;;;;-=:.O+;+---+;;--+;+--;;+----+X%X---;;;----;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;", ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-#%=;-:#O;=#:o=;+ +;.#-;$.+Oo*;.%*;;&o: -;.:o:::=;;;;;=##o=;O:o:O;;O#:#:%*;+$o: O;X# #: =#:#=-X:::#$=.#:#: ##: & o:#$*.:#o#***&##&*&$:&&#o:#$&#o%:#.:#::X* oo#$&****&.::o#&*$###:OO:o##%==##$.: #:# $$ :oo &.o%o:$$:::#$$ :.. :.*.##:#$*******&:o% &$:o%.*.::o:$$ :$= # ::.=X:%o:X=.o:#X=$# #:#X+-X#o:=+X::::: =;;;;*% -=:::#=;;;;O#%%:$-X::: -;&#*;=# --=#:: -Xo :: O;-&::#O+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;", ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-.%X-=%*-O:#=::O+:#-;#%O;##+O%X;$%X;.%.Xo$;-XO=:%X;;;;; %: --o#O#:++#o.$o%*;$o $o.-$%o %:##% O&#. %#* oo:..:%# $.o: o:&.%o#.***& % *$:o$#% %:$.%o $.%o#$X.o .% $***&$oo #o &$%o *O:o. %%==o%..%%o %o.$##.:%&&:% $&:% #o .#%.. %.* %:#.&*******&:#o:$$o#%.*.# #o $ % X#%o.:%$X#%#$= o .o X.%%##%.-=o#*::OO$&X#%#O;;;;&% -X#$ % -;;;O.%:*OX%:&#%.-$% ;=%#-=oo$&.-X%o %*-Xo .o#-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;", ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;O:#O :=-.% = %X+:#-;#%O;:#-O%=; %=+#:OO::O;;;X% +;;;;; %$;; %.- %&Oo#;;#%X-::=X::O$% O*%:O=:#=OX*$::&.oo.X$:o$&$:%..:o$.%#&*****.%:&.% $%#&& %#.:%$X$%:*OX:o..::.&**$#%.&$:%$.%#=;=%$O=#o==#%..%o :%.&$$$ %&X#%$=&o: %:.#%.. %.* % $&********&o#:%. o o.*$.. ::.#% *#% * %.= %.=X#:..:o&.%#*$o O % X %.;;-=::=+;;;;&% --OO=o#-;;;;X%#-- o=-=#:O*% ;X%#O %&O;;;X% OX% O#o$X o=;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;", ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-#%X:.O-:%%%%%=+:#+;:oO;:#-O%*;.%=-:%%o%oO;;X% +;;;;;; %=;; %o%%%XX%=;;.%==o%oo%:O$%.-*%#-=:#==.o:%#&.%:&*$::&*$%%%o%o..% ******$#o.#o$.% *&.%#.ooXO&%#=;*%%oo%o&X**$:o$*$#%$$o O;$%O;-$%==:%..o:..:%.&.#:o%*=#%*O.oo%%%o.#%.. %.* %.&*********$:# o :# %.$.#::%:. % &:%$= %.= %.O*:%oo%o&.%.=$: O %%%%% ;;=o:=-;;;;;&% -O.::%#-;;;;X%#-O:#O;-$%=&% ;X%#=::O;;;;X%*-*%#=o%o%%:X;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;", "+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-&% oX;-#%.*&=--:#-+#%=;:#-OoX; %=-::O=OO+;Oo:+;;;;;;; %=;; %.OXO+.%=;;*%X=%#O=X=O.%$;Xo#O=:#X :. o#*.%:&*.::&&.o:. .$&.%#&*****&.%#o:&.% &X.%#.ooX+&%#=;*%o.$$$=X*&$:%$*$#%$.%.O;.%O;O$%=X:%..%:.$:%..o . %*=#%&O$% .....#%.. o.&.%.**********$o:.:o%. o $#o o#.#% &:o$= %.= %.OX::..$&=.%.=$o.O %.X$=O+O:oX-;;;;;;&% -.o$$o -;;;;*%#-O#:O;-.o=&%.-X%:O :O;;;;X%X;X% =ooX$X=O;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;", "+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;O:%o=;+&% OO=O-::O=ooO+#:-OoX;.%X+#%X;+-;Oo#-;;;;;;;; %=;;$%#;;-+=%#;-:%*-#o=+-OO$%.;X%#OX##*#:..::$.%:&*$#:&*&#% &&.&.%#*******$o%o$X.%:.$#%.$:o&=&%#=;=#%.**&=X*&$ % $.%:$.%.O;=% O*:o=X:%..%:$$#%. %.$#%$X#%$=Xoo$&&$$:% :%.$ %.**& $****$o#.#%o$.% .:o o:. % $:%$= %.= % X=#%.&*X= %.=&: -.%#OO=O=::*O--+;;;;$% O:#=Xo#O;;;;*o#O-.%$O=o:OX% = %#-$% OOX-X%*;X%#O %$OO=O;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;", "+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-#% O;;O.%o:%X- %o:o%=;:#-=%&;.%$;O:%:::- %%::o=;;;;; %X;;+ oo:oX+ %::%%.;O:%::#O.%.;&%#=*o#X.%o:o% .o:**.::&*&$:%oo:$ %#&******&#%:&*$ %oo% X=.%: =%#=;O*:%:o:=X**&$:%:o%.&.% O;O#%:%o%==:%$$%o$&o%.$oo:#%:X$oo#X.oo:o#& %:o:%.. %.**$o:$****$o:..##$ %.$#%::%% #% &:%$= %.O*:o#X&:%:o:X.% =&o.;O %o:oX.%%:::#O;;;;$% O.%o#o%.;;;;O#%#$O#%:oo=+=:%:o%#-O#%:o:-X%*;X% O=#%:::=;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;", ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;+=&O;;;;OX$&$O;OXX===-;==+-=O;OX-;+O=&*=+O=XXXX-;;;;;O=-;;;-====-;+=*OO*-;+OXX*=-OX=+=$*O=&&O=$. . .$..**&..****$ .&$ .*******&$..**&$. XOO=&$=O&X-;-O*..$.==X*&&. .&&$ X-;-O$$$=$O=. &*..&&. &X&. &$.==$.$==&$..&=X . $$. $&*&..$****&..$&$$&$.$&. . .. $&. *=X$=-O&..=OX$..$=X$XO=&=;;O*$*$O=X&$$$&-;;;;O&=+O*&XX&=;;;;+O$&O-=&$$=-;-=&*XX=++OX.&=-OXO;O*=++=$&*&-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;", ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;+;+OO+;----=*&&&&&***********************************&&X=O;--;;;;;;;;+;-OOOOOXX***&$$$&&*&XO+;;;;;;;;;O*&*********XOOO-OO+;OOO-+-OOOO-O=*&$$&&$$&&&********************&$$$&&&&&&*&&XOOO--;-OO-+-OOOO--O--+-+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;", ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;@@;O=**************************************&***X=O-+;;;;;;;;;;;;;;+;;OX****&&&&****XO;;;;;;;;;;OX**********X=-@@@@;+;;;;;;;@;-;+O=X***&&&*&&&&********************&**********X=-+;+;;;@@-;@;;;;;@@;+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;", ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;@@;;OX**************************************&**X=O;++;;;;;;;;;;+-;@++-=X&**********XXO;;;;;;;;;;OX***********=-;;;;+;;;;;;;;;+;;@;O=X******************************************XO-@@;+-;@;;;++;;;+;;;+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;", ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;+;@;+;;;;@;;-=X****************************************X=O-+;;;;;;;;;;;;++;@+;OX**&**********XO;;;;;;;;;;OX***********XO;@@+;;;;;;;;;;;;;--+O=X***********&&****************************X=O;@++;@@@;;;;;;;++;;+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;", ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-=O;;;;;;;;;;;;;;;;;OO+;;;;OO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-;@;;;;@@;-;OX************&&$$$&**********************X==XX-;;;;;;;;;;;;;;;-OO=X**&&******&&*XO+;;;;-=O+;O*************=O;@+;;;;;;;;;;;;-=XO-O=X*********&&$$&***************************XO-+;;@;;;;;+;;;;;;;;+;;;;;;;;;;;;;;;;;;;;;;;;;O=-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;O=-;;;;;--+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;", ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;=:=;;;;;;;;;;;;;;;;; :O;;;=oX;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;+;@;;@;;;;=X************& o%#**********************X==$:X;;;;;;;;;;;;+@@+O=X****&&****&****XO-;;;;O:#-;O*************XX=-+@;;;;;;;;;;;O##X-+O=X********&$.:.&**************************X=-;@;;;@@;;++;;;;@;;;;;;;;;;;;;;;;;;;;;;;;;;;;$#=;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;O #-;;;;;=#=;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;", ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;*%X;;;;;;;;;;;;;;;;+#%=;;O: -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;@@@+;;+++O=X************$%:..*********************X=OX##O;;;;;;;;;;;+-@@O==*&************X*XO;;;;;=%:O;OX************&.$=-;;;;;;;;;;;;Ooo=-@-O=XX**&&&&&$.o $***************************=-@;;@@@@;;;;@@@@;+@@;;;;;;;;;;;;;;;;;;;;;;;;; o=;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;O#:-;;;;;=o=;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;", ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;---*%=;;+---;;;;;;;;;;+#%=;;+O-;;;;;;++;;++;;;;;+++;;;;++;;;;++;+++--;;;+----;;;-==O-;-+;+-OX&&***X**&&*&&.% &***&&********&*&***&&*=OO=*=-;;;----;;;;-;O==*&*&**&*&&&&*&&$&&*O;;+--O%:O+=*&***********&:#$=O-;;+-----+;Oo:=-OO-OX&*&&$.$&$...&*&$$&&*&&&*&&&&&&&$&&&&$$&*XO;;;O===O-;-==O-@;OO---+;+---+;;+-----;;;;---.o=;;+---;;+-O--;;;;;;;----;;;;;;;;;;;;;;O#:O---;;O=O;;----;;+-+--+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;", ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;O :##%X;-X#:#O;;;;;;=#: :o=;-.#:X+;$ $#:X= # O;O#:# -;=### =. #:=O#:# =;-&####&;+X#:#$O;-;;-*#:: &&.##::#*.o%o:.& ::: **.# ::#&*&.::: OX :#$-;-.:##O;;@;OX: ::#.&*&#::#&&.#.:##=--*:: %:OO::::.&&# ::#$& %%:#XO+;- #::=-Ooo=- $O= #$$ #o:...#.&& ::#$&.:.*$##$.# :#$.#:o#&*=-+=.###XOO$#:#*-+X##:#=-=#::$O;X# : =;+=###::=;O #:$-;=#::$;;;;;+= :# O;= .-O. -;;;;=#:$::.-;=#=;O.:: -;=#$:# O;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;", ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;- %# o%=-&%#.: O;;;;O::. %%=;.o.#o=;#%% :o:#:%X;*#$#%X;&%%#O=:%#X-X# #%.-Xo: :% ;=::.#:*O@@-X#o #% & %o::%.$#%:.&.o: :o.*.%o::o &.oo $X o$#oXO$o#.%.O@;-=.%%o#:o$&#% o $ %:#:o&=Xo#.:%#OO## %:&&%o: %:&.%o .XXO;O%o:.%oOOoo=-o#=X::..o: :.$ % &.o# o#$.% *$::$.oo# $#%# &*XOO$:#. *O&o#.o#XX#%#$.=Xo:.#%&-$%%# %.-=::.#%:=O :. oXO :. $;;;;;=:%.#o -X%:-O#:-;;;;O#%# #%&-=%*O$%. %$-=%o##%$+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;", ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;Oo#=O.%X-#%$X:%X;;;+.o$--:%=O:#==o +#o.-$% -=o&;--+=o.;$%#-;O::O;;-OO=: O#oXO$% -.% . % =@;O$oo %:& %#$.%#& % *$#o$&.o:&.%#$.%#&#%.X==$o:X&%:=:o*X::=@O=X.%o.&.% $%o. %o$#% $.% =#o=-=%:O-X$$:%&&o:.$o:$$o:$X**XO=o#X-*%&O:o=-o =Xoo..o: .$$ %.$:o .:%..%.*$::$.o#.&$:% $&**XOO.%#$XOO#% . %..% O-;- %$OO#o=*%#=Xo -$%.OO#o==o:X$o O#o*O-;;;;;&%.OO oX=%#-O#:-;;;;O#o=O=o:OX%&=:o**o:O=%#O=%:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;", ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;X%*-;X%*-:%oo%%X;;;+#o=;+#%O$%ooo%#-#%=;$%&;Oo.;-.::%.;&%.;;O: +;;-.::% =: -;*% -.%ooo% =@@=.%%o%%:& %.* % *.% *.o:**$:o& %.*.%#$o:*=;-$%:%o%:=%%oo%o=-=X&.%#&*.%:$%oo%%o$#%$&.%.X%:O;O%:OO.::o%$&% &&%:&&%:$**&*X*% -;Oo#Ooo=Oo O=:o$*#%o#.$ % $:%%o%%..%.*$::..% $*& o%:.&**=OX %o X=#%%o%%. %$;;;-#:=;-.%*&% -=:#- o=;-.o=$%%oo%#-Xo%:=-;;;;&%X;;X% =%#-O#:-;;;;O#:-;=#o-X%*=%%oo%:-=%&-=%#-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;", "+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;X%X++X%X-:%.&&XO;;;-#%O;+#%=.% =&XO+#%=;.%$;Oo$+#:..o$;X% ;;O: +;- :. o O:#O+*%#-.% ..$XO@;= %: .* %.*.% & %#*.o:&*$:o&.o.*.%#$o:XO;O&%#&$&==%o* $&==X*&.%#&X.%#$%: ..$#%$*.% X%:O;O%:O$o# :%$&% $&%:$&o:$&***X$o#O;O%.OooOOo#O=:o&=$ #%:. %.$:% .$ %.&$::..% ***$.#oo.**XOOX$#% X#% ..$X %&+;;-#o=;- %X&% ;=: - :=;-.:=&%#*.$=+-= o:=;;;;$%X--*%.=%:-O#:-;;;;=#:-;O#:OX%X=%o*.$=-X%*;=%#-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;", ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;Oo#O=#%X- %.OO=O;;;- %=+=o%OO::O+--+#%=;$%.;Oo*O:#-=%.+$%.;;Oo ;;O:#=Xo#O %$X#% -$%#$XXXO@+=.:o.$$$* o.* %#*.%#*&#o.& %:&.% *.%#&#%.XXX&%:=OO=O:o*=X*=XX&&.%:..#%.$oo.$$.$ %$*.% =:o=O.%:O:%..o%$$% &$%:$&%o$*&**X$%:&=.%=Ooo=Oo#=$%o&=.. oo. % $#% $$.$.% .#%:..% **&...:% **X==&*.o#X % &XX=$o#=OOO.% O=::O&% ;=: -.%$OX:o==::=OO=;=OO %.;;;;*%#OO#o==%#O.%#O;;;;O#o&OX%#-X%XO#oXOOX-=%&;=%#-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;", ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-.%:oo%X+=:o::oX;;;;O:o:o%%=+Xoo:o.-#%=;.%X;=o*+#o:#o%=X%$;;Oo ;;- %:#o%&=:%oo% -O %::o O@-=& oo:o#* %.* % * %#&*$oo:o:$&.% *.%#&$:%::#=.%o::#OX:%#::&**&&.%%oo%#&& %o:::$#o$*$%.=X%::%%:O&%::o%:$%#&&%o$&#%: &***$oo::% OOoo=-#%::%o&X:::o $ % $.:%:::.$:oo:%:$ % **&:%:%:$***=$::oo.OX#%:::$= oo::=O#%:ooX-.% ;=o#-O:%::o:X-&oo#o ; o#o#O;;;;O %::o$-O#%:oo:-;;;;O#%o::o=+X%&-X:%#::O=%$;=%#O;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;", ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;O*$.X&O;+O$..$O;;;;;O$$XX=O;+=$$$O+OX-;O&O;-XO;OX.X=&O-XO;;-XO;;;O&.&X.=-OX* % -;=$...XO;OX&&. # *$ &*$ $*$ $**&$ # $**& $*$ $XX&. .*+O*$.$=--=.. &&***.%:# &**&. # .&. &*& *-OX.$$&*-O. #. #$ $&& .&*&.#.****$o# .=--&&O+=$.X*$==$ $$. $&&$ ## $&$ ...&$.$**&. #$&***XX. $=++X. .XO=*..XO-=...X-;=$=;O&=++=..&X&O;OX$..=;=..$=+;;;;-O$..*O;+O. $XX-;;;;-=$$$.=-;O$O;-=$..X-O&O;O$X-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;", ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;$#$.o:X+;+OO=O-;+OX*&&*&***********&&******&************=OO=O+;;;;;;;;;;O=*&&****$%#&*******&&&******&*=;;;;;;;;;;OX&***&*********&******$%#$X=-;;;;;;;;;;;++-O=*&&&&$&&**&&&&**&&&&***********&&*****X=OOOO--+-O==O-;;+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;", ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;=:o%:*-;;;;@;+;@-=X***X********************************XO;+;;;;;;;;;;;;;OX*******$o &*****************XO;;;;;;;;;;OX*********************&: $XX=O+;;;;;;;;;;;;@+=X*************************************=;@;@@-+;@@@;;-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;", ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-O&*O-;;;;;@;;;;O=************************************X=;@+;;;;;;;;;;;;OX*&******&.$******************XO;;;;;;;;;;OX**********************.$&*&X=-;;;;;;;;;;;;;;OX***X*********************************=-;;;;;+;;@@;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;", ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;+;;;+-O=************************************=-@@;;;;;;;;;;;;-=******************************XO;;;;;;;;;;OX**********************&&**&X=O;;;;;;;;;;;;;;-=X*XX*********************************XO;@;+;+--;@;;@;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;", ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-==-;;-OX******&$$**************************XO;;;;;;;;;;;;;;+OX******&$$&********************&&-;;-+;;;;;OX&**&*******&&*********&.$*&&X=-;;;;;;;;;;;;@@OX*&&&&*******************************X=;@;;;++++;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;", ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;X# O@;;=X***&**$##&*************************=O-@;;;;;;;;;;;;OX*******&##&*******************$:#O;O =;;;;;OX**&#.&****&.#$*******& :$& $XO-;;;;;;;;;;;;+-=&.:.&*******************************X=-;;;;;;;++;+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;", ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;&% O@;+=X******$::***********************.&X=-;@;;;;;;;;;;;+=********$oo&*******************#o&-;Oo&;;;;;-X**$o#&&.**&#o&*******&:%.&#:$X=;@;;;;;;;;;;OXOOX.o.&********************************=-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;", ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;----+;;;;----;;;;--++;;;;;;;;;;;;;;;;;;;;+;;;;;+++;;+;;;;;;;;;;;;;;;;-+;;;---;;;;&%#O@-=X&******$::*************&*&*****&.:.XO-OO--;;;;;--OOO=********$:o&***&&&*****&&&&&&*&..X-;-=O;;+--=X***.&& :$&*$.&**&&***&#%.&..&*X=OO+;+-O-+;+=#&==&.$&&&$&&&***&&&&&&*****************=O;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;", ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;$###.O+& .###O-& .## -;O O;;&X=#O+;;X&+O ##O;; ### O;;;;-$#: ;;X O;X#=;X :$;;;;&%#=O$#:#.X****$:: :: **& ::#.*& **$#.$o%: ==.## X+-&.=:#.XX*****.##:oo&*$###.&****$ ##:.& ###=;O X;X =## &*&#.&:%::& #&& ::# &&#%.& $& ###=;X### O-#%:#&.#.&& ###.&&$# #: $&****************XO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;", ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;.# :%=-#%%##% O#%o##o -=%X;;:#Xo -;Oo.-#:.::O;$.*#%:O;;;;$o#$ ;; o=;.%.;$%o#X;;;;&%#=&::#o#$****$:%o##% &.o:#oo$&:o&*.%.$:%:$= o# o:=O#%:#::.****&$:%#o%o&&#%#:o$****$:%: ..o:#% -O% ;$%:##%.&$% $:%##&:%$&#: %%$&#%.$%o$.o: #=+*# #%&O % X.% &.o:#oo$&#%%:o%.$&***************XO;;;;@;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;", ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OOO&%X- % OO#%=.%#OO#%=OoX;+::- %=; %=X%#O o&;;;O:oX-;;;;$% ++;;.o=;.%$;.% O+;;;;&% X o .:o ****$:o.&.%:&:o$*.%#&:o&*.%.&.o.=X::=O&o#= %.=.% &***$#o.&.oo&.%:. % $***$:%.&$:% .:%OO%.;.% =$%#&$%#$ %$*&:%$*$$&#%$&#%.$oo..%#$XO;OOO=o#O*%*O=.%.$:% &$o:$ %:$.% $&***************X=-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;", ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-O ##%X- %=;- %X.%X;-.%=O%*;+#:-=%$-: + %ooo%&;;O#%&+;;;;;O#%:X+; o=;.%$;.%$+;;;;;*%#*#%:oo% ****$::&*$::$o:&*$::$::&*.% $.%.O*% -;=o:O o=O&% &***$o:&*$:%$ %ooo%#$***$:o$*$%%ooo%OO%$;.%O+X%#&$% $ %$*&:%$*$##:%.&:%.$oo.$#%: =-O.##%#O=%*-O.% $::.*&:%.#%.&.% $&&&*************X=-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;", ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;O#: #%X- %X+- %X.%X;- %==%X;+#:O-:# o=; %#.&.O;-#%.-;;;;;;;O$:oX; :=-.%.;.%$;;;;;;$%#*#o # .****$::&*$::$o:&*$#:$::&& %.$ %$OX% -;=o#=#o=-$% $&**$oo&*$:o$ %# # .$***$:o$*.%% .$OO%.;.%O;X%#&$% $ %$*&#%$$::##%.$#%.$o:$&$ :% X o $o -=%X-O.%.$o:$*&:%$#%.* %.$$$$&************X=-;;;;;;;;++;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;", ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;=o.O$%X-#%#O=::= % O=::OOo$-&o#-; %%#-;=o#-+---.o -;;;;;;;-O+X%.; oX=:%$;.%$;;;;;;*%#X % $$.$****$:o.& %#&#o$& %#&#o$ :% $ %.OO::OO$%.O#o=O.% $&**$#o.$ %o$.%#$$$.&***$:%$*$:o $*XOO%.;.%=;X% &.%#$ %.&&:%$ %..#%.$#%.$o:.$.$.%o&::OOo -=%&=O$% $#% &.%#$#%.*.% .. .&*************=O;;;++;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;", ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;O::##%o= %o#:o&O %o#:o$+-#o::%#O;O:%X;;; o:#o==%%:###O;;;;*:#oo=;$%o#o%$; %.;;;;;;$%#=*:%:::.****$:%::o:$&.oo:o:$&#%::o% $.%o.O*o:#o#OO#o==.% $***&.oo:%%o&$#oo::#&***$:%$*&.:%:#oOO% ;.%O;X%#&.%#$$%:#$:%$$oo::%:$#%$$oo..o::%.X:%##%%XOoo:=$%.&.oo#oo$&#%.*.%.. % $*************=O;;;++;;;;+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;", ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-=. X& O %.. *O- % . X-;;O. =XX+;+#:O;;;+X..#--*X .$O;;;;O. =+;O& $$.=;=.=;;;;;;=.&OO* ###$****$ # $***.## $&&& # $&$. $;-X ..=+-X$O=$ .&****& # . &*$ ###.&***$ &**&. # .--.O;= -;= .&$ .&&.##&. &*.##. #&.#&& $$### XO*. $X.=-X #=X $&*. ##$&&$#$*$ $$.#.&*************XO+;;;+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;", ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-+-#%X;;;;- %*;;;;;;;;;;;;;;Oo +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OO--OX&&&&*******&&******&&&****&&&&&&*X=O;;;;;;;;;;-O=X*********&&&&*****&&&&&************&*=O;;;;;;;;;O*&&&&&***&**&********&********&&&&*XOOO-;;;;;;--+-=X**&&&&&**&&****&&&&&**************XO+;;+++;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;", ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;+.oX;;;;+.o=;;;;;;;;;;;;;;X:O;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;+OXX********************************XO;;;;;;;;;;;@+=X************************************XO;;;;;;;;;;OX**********************************X=+@;;;;;;;;;;+OX*&********************************XO+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;", ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OXO;;;;;==-;;;;;;;;;;;;;;-O+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-+@+=X*********************************=O;;;;;;;;;;@;O=X************************************XO;;;;;;;;;;OX**********************************X=+;+;;;;;;;;;;OX**********************************XO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;", ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;++;-=X********************************X=O;;;;;;;;;;+;O=*************************************XO;;;;;;;;;;OX**********************************X=O;@;;;;;;;;;;-X**********************************XO+;;;;@;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;", ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;+;-=X********************************X=-;;;;;;;;;;+;OX*************************************XO+;;;;;;;;;OX***********************************XO-@;;;;;;;;;;-=X*********************************X=+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;", ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;=X*******************************XX=-;;;;;;;;;;-+OX*************************************XO+;;;;;;;;;OX***********************************X=-;;;;;;;;;;;+=**********************************X=-;;;+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;", ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;@@+=X*******************************XX=-;;;;;;;;;;--=X*************************************XO+;;;;;;;;;OX***********************************X=-+;;;;;;;;;;;=**********************************X=-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;", ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;@@-=X*******************************XXO+;;;;;;;;;;+O=X*************************************X=-+;;;;;;;-=X***********************************X=O;;;;;;;;;;;;=***********************************=-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;", ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-=X*******************************XXO+;;;;;;;;;;;O=**************************************X=O+;;;;;;;OX************************************X=O+;;;;;;;;;;;O***********************************=-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;", ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-=X*******************************XXO-;;;;;;;;;;;O=***************************************X=O+;;;;+O=X************************************X=O;;;;;;;;;;;;OX*********************************X=-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;", ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-=X********************************XO;;;;;;;;;;;;O=X**************************************XX=OO-+O=X***************************************=O+;;;;;;;;;;;OX*********************************X=-;;;+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;", ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-=X*******************************XXO+;;;;;;;;;;;O=****************************************XXX====X****************************************=O+;+;;;;;;;;;OX*********************************X=-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;", ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;+=X*******************************XXO+;;;;;;;;;;;-=*******************************************XXX******************************************=O-;;;;;;;;;;;OX*********************************X=-;+;;++;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;", ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;=X*******************************XXO+;;;;;;;;;;;O=X***************************************************************************************=O-;;;;;;;;;;;OX*********************************X=---;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;", ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;+;;=X********************************X=-;;;;;;;;;;+O=****************************************************************************************=O;;@;;;;;;;;;OX*********************************X=-++++;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;", ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;+;;=********************************XX=-;;;;;;;;;;;O=X***************************************************************************************=O+;;;;;;;;;;;OX*********************************X=-@;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;", ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;+-=********************************XX=-;;;;;;;;;;;O=X***************************************************************************************=O-;;;;;;;;;;;OX********************************XX=-;+;@;++;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;", ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;+-=X*****************************&*XX=-;;;;;;;;;;+O=*&**************************************************************************************=O+;;;;;;;;;;;OX*********************************X=-O-;@+-+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;", ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OO-;;;-=X***************************&$$&&X=-;;;;;;;;;;+O=X***************************************************************************************=-;;;;;;;;;;;;OX*********************************X=O=XO-+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;O=-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;", ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OX.$*O+X$-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;=&O;X#O;;;;=X************************&&.### $X=-;;;;;;;;;;;-=X***************************************************************************************=+@;;;;;;;;;;;OX******************&..$**&. $*****X==.#*O--+;+;;;;;;;;;;;;;;;;;;;-=. *O;=.=;;;;;;;;;;;;;;;;;X#=;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;", ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-.:o:o=-#:O;;;;;;;;;;;;;;;;;;;;;;;;;;-;O;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;.%$;.o=;@;;=X************************&#o%%oo#*=+@;;;;;;;;;;;OXX********************&&*****************************************************&$&*******X=+@@;;;OO-;;;;OX******************&#o.**$#o.&&&&*X=X#%.==XO;+;;;;;;;;;;;;;;;;;;-Xoooo&;$o&;;;;;;;;;;;;;;;;;$o*;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;", ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;=o =*.O-==O;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;.%$; o=;--;OX&&&&*&&&&**&&&&&&******& o: . # *X=O-;;;;;;;;OOOX&&***&&&&&*********&$: &**&*&*****&*********&&&****&&******&**********&&&&*&.:$&&*&&&&XOOOOO+- O+;;-=******&&&&*********&#% **$:%.$&$$$*XX#%$X. XO-+---;;;;;;;;;;;;;;O#:XX.=;=XO;;;;;;;;;;;;;;;;O$%X;-OO;;;;-OO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;", ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;X% O-;;-*&O;O& =-;;;;+=X=..OO$.X+;O*-;+=O;;= $-;-= *;;+X. O;;=** X+;;;;;.%$;.o. &OO$# # &$## $&& # .&****$:o.&&&&*$&. .=++X.X .&&## &*&# ## &&&#$*& &#%o#$*&###&&& #*****. .##.&**$## $&&#$&& &****&.###.&:%##$$ ###&=X.$ $$o%#*;O&##.&& .##.&********& % $$$#%...### ** %$$oo#*OO*# XO;X$$. XO;;;;=:#=-;;;=.=;O& &O;;;;;-=. .#:X;X# *O= . .$== XOO.*-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;", ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;O#%#=-;-:%=- o#oo=;;;;-#%o#:::::%O; %X;Oo$;Xo: #O;*%:#.;+ %#::O; %o#o:=;;;;;.%.;$%::o:&=.%o: $#o#o:$$%%o:%#&****.o#$*****$ o:#:#=O#%o#o: o:o.&$%oo:%#&$% *$%:&#%o#$$:o#o#&&%oo#&***&#%:::%$&.o::%:&&%#&&%o&****&:o#:.&:%::$.:::% X.%:: .o%:&O o:oo$&:%o:oo.********& %### o% . ::o%.$#%.$o%#&=$:::o*; %o#oo*;;;;O.%:*O;; %.O*o::o$-;;;;=#o#:%:*; :#::==## #%:=X%#OX%:O;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;", ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;+= oo.O-:%==o#X$%.-;;;-#%#+ %#-O%X;$%=;O%*;#%$;;;; %X;;;=%#O$%.; % O.%$;;;;;.%.;$% O$%.X % && %#. % .oo..o:$***&.%#&X**&&$%#&=.% O % O*%#$.%#&.%:.$#%$$%.*$% &$%#&$ % $#%&&%o$&****& %#$.% $#%..:%&$o#&&o:&****&%:$&&& %.&&$$$.:o&.o#=-O:o=-=o:. % $:%#$#%.********& %oooo%o ... %.$#%.*#:&O*o:X&o O %#=$%.;;;;;= oo =;.%$=#:$$:#O;;;;$%#=X#o*;==O$% OOO= o$O&% O*%#O;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;", ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;+-.oo&-:o= %::#%#O;;;-#oO;$%=;OoX;.%=;-o$;O:o#O;;=oo#O;&%o#:% ;.:=;.%$;;;;;.%.;.oX;$% X o.** %::o%# o:$.::$&*&$ %#&****&.% =+=%:O#:O;=%.=$%:&.% &&$%.$o *$%#&$%:&$:%:o:% &%:&*****&#%$*$% $%%::o%$&o#&&%:$****&#%o $&.%.**&.##%o&.%$-;Ooo=- %:::%#.:o.$ %.********& %# . :o $. :%.$#%.X#:*=$%o#:%#= %&-$% ;;;;;;O&:% O.%$*oo##o:=;;;;.%&OO&%XO=& #% ;;= o.O;$% OXo:O;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;", ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-=%#O:o=.%# ##X-;;;+#%=;.%O;OoX;&%*;OoX;;O o:O;;O %:-.%: # =; :=; %&;;;;;.%$;.o=;.%.X.%.&$ %:###. %:..::.&&&$.%:$*&&&$ %#=+=%:O oO;=%.=&%#$.%.&&.%..o &&%:&$%#&$:o####$&%#&*****&#%&*$%#$%%####&&%#*&%:&*****&#:%:$ %$*& o:#%o&.%&+;O:o=- %#### .:o.$#% &*******&#% $$.:% .#o::%.$#o.X##&=.%:## $O %$;.% ;;;;;;;-=::=.%$*oo # $O;;;;.oX;O$%X=#o#:% ;=.%#O;;*% OXo:O;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;", ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;O=O-=o O:o=X%.OOOO;;;;-#%=;.%=;Oo=;.%X;.%X;--;X%$;-+;#%&Oo#-+--; :=;.%.;;;;;.%.;.o=;.%.= %.&& %#.$$$.%:..::.$&&&$#%#.&$ ..%o&=$o.O#:O;=%&O&%#&.%#$.#%$.% $#%#&$%o$$#%.$&$$$%#&*****& %&*$%#$:%.&&$&&o#$ %:$*****$&$o%$.%.&$o% .oo$.%&-;-:%=-X%#.$.$.oo.$#% $..$****& % $$.:% .o: % .#%.X#o$=*:#=OOO; %.;$% ;;;;O==O=#:=.%.=::====O;;;;$%.O=#oX&%#=.%.= o#=O;;&% =.%:O;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;", ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;=## oo=-:%=O.%: #.;;;;-#%=; %=;O%*;Oo:#:%X;*# :o=; :.::O+$%#&:$; o=;.%.;;;;;$%.;.oX;$% = %.&&.#o:#: .%:$.::.$&&&&.:%: #o#$ o# o:O=#o-;=%&O&%#&.%o#:%#$$o%#%%#&$:%#.$:%##:.$%:&****** %&*$%#&$:%# o&&o%#o%o&****&:##%:&$oo#.#%##o% .%X-;- %#&= %:#:#.oo.$#% $#%.****&#% $&$:% .:o##%:.#%.= %:X=$%: # ; %&;.%.;;;;O :.:%$O.%.O*oo.##O;;;;=:o :o:XX:o :o#.%%#. $=Xoo o%:O;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;", ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;O*###X--$ O;O.###X;;;;+& O;=#O;- O;;X##*XO;O###=;;=###=;;-$###=;X O;X#=;;;;;= =;= O;X#&=&#.&*&.##:#.$# &$ $&&**&$. :::#.X$### X+-$.-;= =-X# &.%##:#$*& #: # &&.##.&$#::#$$# &******$#&*&#.&&.#:::&&.##.# &****&####$*& #:..## . & O;;+=.#.=*#:#:.$ #.$ #.$ #.&&**&.#.$&$ #.$.#: #$. *=* #&OO&###X;&#=;= *;;;;-X ##$O;X#X;O*#:#.O;;;;OX##.$.=O&# .. # ### =O&##. $O;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;", ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;----+;;;;;;;---O+;;;;;;;;;;;+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-+;;;;;+-+;;;;;;---OXX****&&&&&&&&***********&&&&&&&*&&X=O+;;;;;;;;;;+=X&.%.&&&****&&*****&&&***&&&$&&&&********&&**&***&&&&&&***&*&&******&*&&***&&&***X=O=O-+;;;;;-OOOX&$$$$$$$&&&$&$$$&&**&&&$&&&&&$&&&$$&XX===O-O==O++-----;--+;---;;;;;;OOOO;;-O-;;-OOO-;;;;;;-OOO;;;;OOOOOOOOOOOOOO;-OOO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;", ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;@;-=X******************************&**XO@@;;;;;;;;;;;;=X.:.***************************************************************************X=+@@@;;;;;;;;;@OXX*&&&&&&&******&****&&&&***&*&&*&*X=O-+-;+;;;+;+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;", ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;@;-=X*********************************X=-;+;;;;;;;;;;;-=$ $***********************************************************************X**X=O--@;;;;;;;;;;-=X*****&*&************&&*******&&***X=-+;;@;+;;+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;", ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-OX*******************************&&X=O+-+;;;;;;;;;;-OX&**************************************************************************X=O-;;@;;;;;;;;;;O=X*****&&&&&**********&&*******&&&&*X=-+;;;@;+;;;+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;", ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;+O-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-+;;;;;;;;;;;;;OO+;;;;;;;;;;;;@;O=*******************************&&&X=-+;;;;;;;;;;;--=X****************************&$$*************************&$&&***********&*XX=O;@;;;;;;;;;;;+OXX****&&$$$&******&&&&&&****&**&.$&*XO-+;;-++-;;++;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OOO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;", ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;=#=;=*O;;;;;;;;;;;;OX$&$*-+=-;;;;;;;;;;;;;;;;;;;;;;+#X;;;;;;;;;;;;;*#O;;;;;;;;;;;;;-O=*&****************************&&. *=-;;;;;;OXX-;;;@OX&*************&. .&********$:.&************************&:#&*************X=O;;;;;;;;;;;;;;-=X****&&$##.&&****&$$$$$&******&$##$*=O-++;;+--;;;;;;;;;;;;;;;$ O;;;;;;;;;;;;;;;;;;;;;O .O;;;;;;;;;;;;;;;;;;;;=#.O;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;", ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;*%X; o=;;;;;;;;;;;;.%oo%:OXo=;;;;;;;;;;;;;;;;;;;;;;Oo.;;;;;;;;;;;;;.o=;;;;;-OO;;;;@;-OX&******&$$*******************&$#o&=O;;;;;;=:#-;;;@;=X************& :%%:.********$%#&************************&%o&***********X*XO;;;;;;;;;;;;;;;OXX***&&$.oo.$&*&**$... .&****&&&$::.*=-+==O;@@;;;;;;;;;;;;;;;; o=;;;;;;;;;;;;;;;;;;;;;=:#O;;;;;;;--;O;;;;;;;;;*%#O;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;", ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;X%X;=XO;;;;;;;;;;;; %.=OO++X-;;;;;;;;;;;;;;;;;;;;;;Oo.;;;;;;;;;;;;; o=O $-;=#&-;;-O=O=X&&&&**&$#.&**&&&**********&&&&$..&X=OOO+;;OXX-;;OOO=X**X&********$oo.. .***&&&&&$% $**&***********&&&&****&&&o:$*************XO@;;;;;;;;;;;;;O=*&&&&$...:% .$$$$&$.....$&&$&$$&.::.*=OO$#&=O;;;;+O-;;;;;;;;;O :=;;;;;;;;;;;;;;;;;;;;;=:#O;;;;;;;+;;O;;;;;;;;;*%#O;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;", ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-X.. %X-=XO;-X X-;;;;;.%=;;;;-X+;-==$&O;;+=.$*-;;=$.X+-: O*X-;-X...=+; o=X%:.& %:$=O$ ..&X$. # $$#%: $&.# .$*****&$ #.$$..&$ .$.$=+O*&-;O ....X*&# .*****$%:$&***&.# $&$% &$ $& &*$ &&. $# .&*&$ %:&&& $*&.. &O;;;;;-&..$.O;-$ #.$$&. :o.. . .. $&. .$$. ##..::.&.$X#%#.=-@@;OX.. XO;-=$.&#o=;O&..XO;=*$.=;;;;O=.. :#O=$$$&==XO;=*=;OX...=*%#O=$X;O=..$=OO&$*$&=O;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;", ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;+&o::o%=-#%X-Xo::oX-;;;; % OX+; %=;#%%#o:O;Xoo##O;Ooo::O-:o::% +O#o#o:=;.:=*%o#. %o#X=#o:o#*.oo::.$:%o#$.oo:% &****$ o::#..:o$.%%::%#-=o:-O %:o%:X& %:oo.&***$:%#.&*&.:::% $$% $:o.$o%$& %$&#%o:o%$&$:ooo%:&&#%:%:&&oo%#%#=;;;;-&o::%%=-*:o:o $.#%:o%o. oo::.:%.$#% $ oo:o.$::. o &#%o#XO;;O*#o#ooX-=#o::%#=O.::o:=;.%o:$;;;;=#%:o%#O&%%: &:#O;&%*OX:%::$X%#= o&;=:%#o#OX%%::o#O;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;", ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;O::== %X- %XO::XXo#O;;;; %%o%=;.%X;#%#+ %X;#%&;;;-::O;+;-:%=-#:--=OO %&; o==: O-&% O+OXX& %$.%:.$$& % $$#o .::$****.%: %#.#:$.oo.$::O=ooO&%.*$%oX&%:. %o*****$#%% $$:%..o%$.% #o.&&:o&& %$& %:$.%#$:%.& %:$.o#$ %.&o% $:%*+;;;O::==:%==:% oo. % . oo. %:.$.:o.$ % .:% ..$$:: : X= %.X-;;@O %.O=:#=.% OX::=Xo#X.% ; %.=-;;;O o$=.%#O&%:XOX:#O;.oX=#:$=O=*o:.o$OO&%.X %&X%o$X#oO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;", ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;=%*-;X%X- %X=oo##o:X;;;;.%#. -;$%*;#%O;X%*;Ooo O;X%*;;;;O: ;; oO+O$$#%$; o==: -;*%#-;-X..#:$.:%#.&$ %#&.oo::oo.****.%o:o%:.::..::*X#oO=o:O oX-*%:X*%o::%:&*****&#:% .%%::oo$$%:%.**&:%&& %$& o$&&%#&%%$*&%:&:%:::%#$o:&=#%X;;;;*%X--#%XX:o::%% :%.&.:o. % $&.:o $ % o $&&&$:o%#*-= %.=;+;;=#:=;O %X oX;O :=.%o#:% ;.oX;;;;;=##=;=:#O$% O;=::O;$oX*%#O;;;Xo%o#O;= %#::% X%:==#:O;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;", ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;&%X+;X%X- %XXoo###.O;;;;.%=;;;;.%=;#%O;&%&;;O#%:-=%X;;;;-o.;;.:-O#:#o%$; o==o -;*% -;=:%#::$X$#%o & o#&.oo#::#$**** %:::# .#:..:o*X#oO=o:= oXO*o:X&%o#:#.&******&.oo.%%#:##&$%o%.&*&:%&&#o$*#%&*&%#&o:&*&%:&:%:::#.$ooX=#%=;;;;&%X--#%&X:%:#: .o:.$.:o. % $&.:%.$ % o $&&&$:o%#&O= %.=+;+;=#:=;O %* :=;O.:X.%:###X; oX;;;;;=##=;=:#=&%#O;=##==$o**%:=;;;Xo%o#=;=#o:## XXo:O=#:O;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;", ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;=o#OO %X- %*O::=OOO;;;;; %=;;;; %X;#%O; %X;++;X%X-o#+;++Oo$;; :-$%.O %$-.o=O:#O+&%#-; %.$ o$X$$ %:$ % &$:o.$$$&****.%#.$$$.#o..o:&*#o=Xo:=.% &.%oX*%#.$$$&***&.$&.oo.:%.$$$&$% :% &&:%$.:%&& %&*&o#&oo$&.%o& % &&$$$oo*=#%=;;;;=o:==#%$*:% ....:% ..oo. % $$.:% .:% .o: ..$$:# %#*=.%.=O++@= %$O=::= %&O=#:=X% =O==; oX;;;;;=#:XO$%#O&%#O;=##=X:o&=#:XOO=&%:.% ==$%.====*o:==#oO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;", ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;- % %%*- %X-.%#$ ;;;;; % $X.+&%X;#%=;$%*;X#&:o=;&%:$#O-o ;;#:-X%: :%#O.o=O o ==:o.O$%# oo $:##o#&.%o $.%o #:$****$#%# ##$::$.%o&$#o=X%:=X:%:%ooX= %# ##&***$:: #% $.oo# :&$% $:% &#%#:%%&& %&*$% & %##:%:&&#%# : &ooX=#%=;;;;O %:oo%$* oo #:..o: :%o. % $&$#%##o% .#%:#: $::$.%#X$o:.=-@@O&o:.#o&OXo:.#%:X=.%:$#.; oX;;;;;O&o: :%#O&%#O;O o :%o*O*oo. .X%#= % ==oo..#XX%:O=#:O;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;", ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;=#:: #=-&#=;O&#:: ;;;;;X#:#::O=#O;&#-;O#O;O::#*+;+$#:#O+ =;;= +-&:#. #=X =+=#o&-X:#&O :# # $#:: $&$ :#.&.:::#$*****$#::: $##&$##&& == #=O*.# o:=-= #:#.&***& ::: &*& #:::&&:.&&#:&&#o# :&*$#&*&# && ::###&*$#:::$X =O$#O;;;;;-$#.:%.&$ :::#.$ #:###..:.$&&.#:# :.&$ ::o.$ ==.#*=.:#*-@@+OX#::.O;O&:: . =;=.#::&;X =;;;;;;O$:: $O=#$O;O=#:.$ =;O$#:#*=#.O= #=O=#::#== OO$ O;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;", ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;+--O-+-;+-;;;;----;;;;;-+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;+------;;;;----;+---;-O=O=OO=*&*&*&&&&&*&&$&&&******&&&&&&&&*&&**&&XO+OOO=.$. % =;;O====X*****&&&****&&&&&&**&*&&&&&&&&&&***&***&&***&**&***X*&*XOO=O+;--+;;;;+X*&.o#.&&$$..$$$&$$$&&&&$&&&&&$$&&&&**&$$$&&*=O-O=OOO==O-;@;;-OOO-;;;OOOO;;;;;OOOOO;;;;;;;;;;;OOOOO;;OOO;;;OOO=;;;;;OOOOOOOO;OOOO;OOOOOO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;", ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;@@@@;-=X************************************X=+@;-Xoo%% XO;@@@@@-=XX**************************************************X==-@@@;;;;;;;;;;-#:o%o.$***&&&&&&***************************X=O+-;@@;@@+@;++;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;", ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;@@;--OX*********************************&**X=O-+;O* .=O+;@;+-;;-=X***********************************************X*XX=-;;;;;;;;;;;;;;;O$ $$&************************************X=+@;;;@;;+-@;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;", ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;@;--O=X**&*****************************&***X=O;@+O==OO;@;+;;;;-+;OXX*********************************************XX=O-;-+;;;;;;;;;;;;;;OX**&************************************X=O+;@;;;;;-+;;;;;+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;", ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;+;;;;-=X**&********************************&*X=O;++@@+;;@;--;;;;;;+O=X*******************************************X==-+;@@;;;;;;;;;;;;;;;O=XX*************************************X=-;;@+-;;;;;+-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;", ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-=$X=O+=X-;;;;;;;;;;;;;;;;-#O;-O+;;;;;;;;;;;;;OO;;;+-+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;++;+@@;;OX**********$ .***************&&&*X=O;@;++;;+;;;;--;;+;@;O=X***************************************X=O-;@;+;;;;;;;;;;;;;;;+O=XX*************************************X=O;@;;+-;;;;;;+;;@;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;", ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-$:o:o=-#:=;;;;;;;;;;;;;;;;Oo=;*o=;;;;;;;;;;;;O::-;;-:.;;;;;;;;;;;;;;;;;;;;;;;-O-;;;;;;;+;;@@;;=*&*********.%%%%%%% **************&$&***X=-;@;;;@;+;;;++;;;;@;+-==X**********************************XXX=O-@@@;;;;;;;;;;;;;;;;;O=XX**************************************X=O;;;;++;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;", ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;Oo#X$ =-XXO;;;;;;;;;;;;;;;;OoX;-X-;;;;;;;;;;;;O:% ;;Oo.;;;;;;;;;;;;;;;;;;;;;;+X =-;;;;++;@;OOOOX &&&******$..#%:..$&***********&&.:.&**&*XO+;;@;@;;;;;;;;;@;;;;+OO=XX****************************XXX==O-;;;;;;;;;;;;;;;;;;;;;O=XX***************************************X=+;;+;;;;;;;;+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;", ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;X%.O;;;-XXO;O=X.=-;;;;;-=X=.o=;-O+;;O*=O+;;;;;O:%o=;-o.;;O=XO+;-$O;O=O+-=$$*OO#%#XOO$.&X=O=$..$ %: .&********&.%#&**&. .$&&. .$$#%# &$. $=+@;-;;;;+++;;;;;;;;;;;;O==XXX**********************XX===O-;@@;;;;;;;;;;;;;;;;;;+O=X****************************************X=O;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;", ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;O#%.=-;-#%=-.oo%:O;;;;+=:ooo%=; %=;-:ooo=;;;;;Oo#:#+-o$;-:o:%X;$% ;=: -=:o::==:%o#O.o:oo.=.o%o %o# &*********.% &**.:oo%#$.oo::.$%%o#$.oo:o$O;+;;;;++;;;;;+;;;;;;;;;;-OO=XXXX**************XXXX==OO-+;;;;;;;;;;;;;;;;;;;;;-O=XX****************************************XO-;;;;;;;;+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;", ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;+X#%:X--:%==o#=$%.-;;;-::=- %=;.%=;#oO-::-;;;;Oo*X%*Oo$; %=+#:-X% ;=: -$% OOO-.%$--O=O&% =.%#&=$%#&X*..$$$$*** % &**$ $.:o$.%#.$&&.% ..:o %oX-+@;;;+;@;;;;;;;;;;;;;;@@@;OO===XXXXXXXXXXXX====OOO-;@;+;;;;;;;;;;;;;;;;;;;;+O=X*****************************************X=O+++;;;;;;++;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;", ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;+O %%X-:%= %:##o#O;;;=o$-;OoX;.%=-#o:#ooO;;;;Oo*+::*:$+::##o%=X% ;=: -=:% =-;.%.;;OXX %#=.%.OO.%#=X.::::: *** %#&**&. ::$.o%#.$*.% $.%%#:oo&=O;;;;+;@;;;;;;;;;;;;;;;+;@@+---OO=OOOOOOOOOOOO-+++;;;;;;;;;;;;;;;;;;;;;;;;;O=X*****************************************X=O;+-+;;;;;;++;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;", ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-Xo O#o=.%::::&-;;;=%$+;=o=;.o=-oo::# -;;;;Oo$;Oo:o.+:o::#.O*o ;=o --=#%oX- %$;O o::%#=.% O-$%#==.#::::.***.%#&*&.:oo%:$&.:oo.$.% *.%o:::#&*=O+;;;;;;;;;;;;;;;;;;;;;;;;;++;@;+-----;;++;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;+O=XX*****************************************X=O;;+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;", ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;O=O-Oo O:o=X%$O-OO;;;;O: O-$%=; %=;::-;;+;;;;;Oo.;;.%%X;#:-;;++&% O$% ;OOO$%#-$%.-X%#O*% =.% O-$%#XOX&&$$$&*** % &*&#o..::$$.$ %:$.% $.oo...$&$.*=-;;;;++;;;;;;;;;;;;;;;;;;;+;;;@@;;@;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-==XX*****************************************X=O-+;;;;+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;", ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;=# &:oX-:%=O %#& $;;;;- % o%X;.%X;&%:=&.-;;;;Oo*;;-#%$;=%:X$ O=o: :% ;&#& %.-$%:==::X#%:X.% O;&::.X==X*******.%#&*$#% #oo..: #%#$.%:.$ o:. :$.% X=O+;;+-;;;;;;;;;;;;;;;;;;;;;;++;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;+O==X******************************************XX=O--;@;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;", ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;O&:::&-- #=;O o:o$;;;;;O ::##=;*:O;;=#:o#+;;;;-#=;;;X:=;;O:::#O-$::# &;=:o: O;-.:#-=oo .: =:&-@O$::.O=X*&*****.: &*&$#o: :#.ooo#$&$#o#$$ ooo#&.:#*X=OO;;;+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-O=XX*******************************************X=O-+-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;", ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;--O-+;;--+;;-----;;;;;;---;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;+;++;;+----;;+-O-+;;;;+++;+++;----+;;;O==O+O=*******&&&***&$$$$$&&$$$&&*&&$$&*&$$$&&&$&&*XX=O;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-O==X********************************************X==+;++++;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;", ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;O=X********************************************XX==O-+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;O==X*********************************************XX=O+@;;++;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;", ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;++;;-=XX*********************************************X==O-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;+-O=XX**********************************************X=O-;;@;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;", ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;--;;O=**********************************************XXX==O-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;++-O=X************************************************XX=-+;;@;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;", ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;++;-=X************************************************XX==O--;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;+-OO==X*************************************************XX=O++;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;", ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-O=X************************************************XXXX=OO--++;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-O==XX***************************************************X=O-;;;;++;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;", ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-O=X***************************************************XX==OO---;;;;+;;;;;;;;;;;;;;;;;;+-+;--OO==XX****************************************************X==-;;;;;++;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;", ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-OX*******************************************************X====OOO---;;;;;;;;;;;;;;++--OOO===XX*******************************************************==O+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;", ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-=X********************************************************XXXX====OOOO-OO----O-OOO=====XXXX********************************************************X=O+;;+++;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;", ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;O=X**********************************************************XX*XXX=============XXXXXX************************************************************X=O;;;;;+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;", ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;+++-=X*****************************************************************XXXXXXXXXXX*****************************************************************X=O-+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;", ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;++;;O=X*******************************************************************************************************************************************X=O++;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;", ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;O=X*****************************************************************************************************************************************X=O;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;", ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;@;O=****************************************************************************************************************************************X=O-;;+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;", ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-=X**************************************************************************************************************************************X=OO+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;", ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;+;+;;O=X***********************************************************************************************************************************XX==-+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;", ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;@;;;;;;O=X**********************************************************************************************************************************X==O+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;", ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;+@;;+@;;@;O=X********************************************************************************************************************************X==O-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;", ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;--;+;@;+-O=X*************************************************************************************************************************&&&*X=O-+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;", ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-O-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-O+;;;;;;;;;;;;;;;;;;;OOOOO=;OOOOO+;-OXO--OOOOOO=*&&$.$&$$&********&$&********************&.$&******&$$$$$$$$$$$&***&&&****&$&***&&$&************************&$$********&*&$$&XO-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OOO+;;;;-O-;;;;;;;;;;;;;;;;;;;;;;;+--;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;", ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-O-;;;;- :#O;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;.#-;;;;;;;;;;= O;;;;;;&# ###.O-O&#&=X$$$$XOX.. #: $ #$&*******$:$******&......$******$%: $$$$**.###:#######.***$#.***$ :.&**& #$*&&&****&..$...$********$: $****&&$$$$.:.XO-;;;;;;;;;;;;;;;;;;;;;;;==XO;;;;O==O==OO;;;;;;;;;;;;;;;;;;;;XX+O o#-;;;-$#O;;;;;;;;;;;;;;;;;;;;;;;O O;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;", ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-==XXXXX==O;;-XXO;;;;;;;;;;X%X;;;;=#$#=;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-#:O==O-;;+O=O#:=O=O+;;.####:o#### ==& : $ ooo% =$%%%o ..##$&&&$$$$. %...$&**$:%%o%o.******$.oo#.o **.#::%%:%%::#$***.%.***.%:#&$$.:o.. #.****$::.#:#.$***$....o: ..$&$$.... o &X=O;;;;;;;;;;;;;;;;= X;= #%.;O& # # #$-;;;;;;;;;;;;;;;;;;+ #+O#o O;;;-#:====O+;;O=O-;;;;;;;;;O==.oX===-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;", ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-#oooooo%%X;;+#%.=+;;;OO-;;=o$;;+-=#:X+;;;;;;;;;;;;;;;;;;;;;;;;;;;;-&o:oo%% ;;+#ooo:ooo#O;;+O=== :====OO&:o%o#**&$##X.#::o##.#: .&.::::%o%o%o#$&&$. %:$******$...o %.**$ # %o#o: #.$*$$ %.$$$.## $.ooo%oo%:.****$o %# o:.***.oo:#%%%o%.$$#::#oo%ooo:=;;;;;;;;;;;;;;;;X%$;=::$#.;O#%######o:O;;;;;;;;;;;;;;-==X=##==.$O;;;-$o:ooo%#+;;X%#=-;;;-OO;;.%o%o:oo:O;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;", ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;+-OOOO-OX%X;;+-$%#O;;- :=;;=o$--=#%#-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;+X:#-++=:&;;++- :O-+;;;;;;$%ooo%::%#O-X$.:.$*$$.##X& :: ##%o%o$$ ## o.$$$&&&$$. %.$&****&$.%$$.o#$$*$oo:%o#o%#%#&$.#oo::..o:.$*$$.: :.$****$%o#$$.%.&**$. o: .$$ o$OOO-;;;;;;;;;;;;;;;O$:X;O:.$ =;O#:XOOOOO##-;;;;;;;;;;;;;;X:ooo%%oo::X;;-=: ---=o&+;;-Ooo=;;;=:.;;--$:=O----;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;", ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;*oX;;;;-X#=;;O::=;;=o .:o:=+;;;;;-OO=O=-;;;;-OOOOOOOO==O;+=:#=X-- :-;;;+X%::#-+OO-;;.#OO.#O=.:=O.::%:##oo::.=$%%%%%:. # o$&$$ ::oo$&&&&&&$. %:..$&**&$:.%$$ o.#$*.: o o : $$o#%# #%. o.$&&$.#o:o% .$&&&.o%.&*.o#$**& .. %####.&&$$. o:%*;;;;;;;;;;;;;;;;;;;O#:=;O:#=O-;O#:=;;;;=:.-;OOOOO==OOOOO;--OO- #-OO+-;-=:#*$OO#:O;;;;-O#&;;-*%=;;-=%:::=O==-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;", ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;X%X;;;;;+--;O o*-;;=oo:.-+;;;;;;;.oooo%&;;;;Xoo:oooooo:X;O:#O % Xo +;;;=:% X:o#::-;;=%ooo%ooo#=O$ # $ :$XX==$%#::#:.:#.o$*&$:: #o.$&&&&$. %%:o%#.&*$#%.o$.%..% $$#oo:%oooo:.&&$.%.$.%..oo.&$.:%% %oo:.$&&.o#$&&.o#$&*$:oooo%:##.*XX&.:.$%$O;;;;;;;;;;;;;;;;;;O##=;O.o&;;;O..O;;;O$o$;;&o::oo::oo:X;;-##- #-##O;;O:#= %.&%.+;;;;;+--;-X: +;-=:%#.:o#::=;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;", ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;X%X;;;;;;;;-$o.O;;;=oX++;;;;;;;;;++++Oo.;;;;=##########X;+--;+=:%#-;;;-::-+ oo$+;;;- #--$:--*:=O$: : $.:=-=&X$o ::##.:..o$*&.:# #% $&&&$.#%: $$.oo.*$:#.% o#$$#:$... % .....$*& o$*$o.$.%.&.%## o..%#$**.%.&**$o#$&&$. :# .$&X==X #$Xo#O;;;;;;;;;;;;;;;;;OXo$O;;=o.O;;;;;;;;-=:#O;;=##########O;;Oo + #+.o=;;+-O-+=:%#O;;;;;;;;;+=::O;;O#:XO*:%.O-+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;", ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;*%*;;;;;;-O o:O;;;;=oX;;;;;;;;;;;;;;;X:=;;;;;;++++++++-+;;;;;;+.%=;;;;-X--#:: ;;;;;&:o..:o .:o$=&: :%:#:X=$%$$o%%o% .o$.o$*&$#o#%o $&&&$ % ...$$.% *.%..%o:$$..%.#%o%ooo%%ooo.*$:#$&.o.*$#.$#o.:#%#$$:o$**$:$**&.%.$&*$.#::%o .$*=OO=$o#:% =;;;-=X=O;;;;;;;;;O#o=;;;O#:XO;;;;;;;= %&-;;+---------+-;-.o=- #-=: -;;;;;;- oX-;;;;;;;-O*o:=+;;-*OO:o:#+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;", ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;+O======$%X;;;-==&:%.O-;;;;X%*+;;;--+;;;;;;;+ :O;;;;;;;;;;;;;;;;;;;;;- oX;;;;;;;;#:;=#;;;;;.:%######:o -&o:#.&.o.$ :&&:#:o# .o$.o$X*&$ #:o.&**&$$..%oo $.%.* o. %:$&.%.o#$$.o# . :.$$&$.%.$$#%.*&&&$:#.:%o$$.%#$**&$&*&$:o$&*&.oo o%%:.&=O-O=& %XO;;;O#o%.O;;;;;;;O$o$O;;;O=o#=;;;;;O= o.O;;;;;;;;;;;;;;;+=: -; --&:=+;;;-O oX-;;;;;-O=X#%#O-;;;;;-.oO=#-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;", ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-:%%oo%:o%*;;O.#oo:=-;;;;;;-##XOO* =;;;-OOOO#oXO-;;;;;;;;;;;;;;;;;O=:o=;;;;;;;;-##-O=-O+;;+*#++++--*:O;&%:o.&$:%%% *&# :: #: $ :*=X*&. % $&***&&.## #% o:$*$ %o.&$.%...$* :%%o% .$$*$:o...:#$****$#o %o...#o.&****$$.o%.&*&&.o : :%$=O-O==X#:=;;;;X:X.:=;;;;;;;=::=;;;;;O$%.;;;;OX#% =;;;;;;;;;;;;;;;;-#:O;;O=;;O:#-;;O=#o=-;;;;;;X#:%:*--;;;;;;O#:==XO=O+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;", ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;+-OO--OO=#=;;-#: O--;;;;;;;+O:%ooo:#O;;; %oooooooO;;;;;;;;;;;;;;;;;.%#O;;;;;;;;;;Ooo::o% ;;;.#+;;-O= #O;#.X:o# ..:ooo:::..##=O==$:% $&****&&&.%%:oo:$&* :o#%...::$*&$. ##o #o%#.$$o..o%o.$****&$:%#. %%:.$***** :%o.&***&$ o::o.&. &=--O=.o:=O;;;;=:.:#=;;;;;;;O$=O;;;;;;O$X;;;;=:o&O;;;;;;;;;;;;;;;;;+OO-;;-=;;-OO-;;.%:=-;;;;;;;=o =--;;;;;;;;+=:%#::%#+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;", ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;+-+;;+---;;;;;;;;;;;++++-++++;;;++++++++++;;;;;;;;;;;;;;;;;..-;;;;;;;;;;;;;O==O;;;;;=$;;;O %o.-;O;-O= ######$X&**&$#. %:*O;+O*#.&&***&***&$$. .$$&**$#..#%%oo &*&#oo##$$$$ oo$&.$$$ .$******&$$$&$ .$&******$#.$&******$.. $X==X=O---O..=O;;;;;OXo:=-;;;;;;;;;;;;;;;;;;;;;;;;-O=O;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;$$-+;;;;;;;;---;;;;;;;;;;;;+OOX&XO-+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;", ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;--OO-;;;;;;;-O-OOO=OOO---O===*XO-;@-O===XXX*&***&&&********&$&&$$$$$&**&$$$$$&***$$$&******************************&&&******XXXXXX=OO-O-+;++;;;;;;;;;;;OOOO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;", ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;+-+;;;;--+O;;+;;;+-OO==XXX***&**&***********************************************************************XX===OO--;+;+;;+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;", ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;++;;-;;;@@;;;;--O==XXX***************************************************************************X==OOO-+;;;;;;;++;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;", ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-OO;;-O-;;;;;;O=-;;O-;;;;;;;;;;;;;;;;;;-+;-----;;;;;;;;;;;;;;;;;;-OO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;--+;;;;;;;;;;;+++-;;++;;;-O;;--OO===XXX&&&***********************&$$************&$&&$..$****&$$****************X==OO-+;;;;;;;;;+-=O;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;---;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;", ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;.X#&$ =#$;;;-O= %*;-#X;;;+& .. OX .O;+#&+X # =;;;X.-;;;;;;;;;X#XO== .O--;;-=+;;;-&=;;;;;O======-;;;;;;O:=;;;;;;;;;;;+-++++++;;-=X=-O=X*=OOO=X&.&***&*******************$#$************$#$$##%.&***$: ***************X=O-O--;O &O;;;;;;O:=O. =;;O$$O;;;;;;;;;;;;;;;;;;;;;;;;;;OX =;;;;;;+.X;;-=#.-;;;;;;&.-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;", ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; o: o#Oo&O;;O#%%XOOO:$O-;-#ooo%=#o::%&;+#.+#o#o:#%$;;;#:O;;;;;;;+O X :#o%::.;;Xo=;;;O:.+;;;;X%%o%%:=;;;;;;Xo=;;;;;;;;+;++;;;;--+;;O&o*OOX#o*O--O=$%$*&&&&&&***&&&&&&&&&**&&.%.$&*****&&&$$.%.$ %# &**$.% ....$&&$..$*X====OO-O=XXo *X*O;;;-o&=:o#%##%&;;O:#O;;;;;;;;O=XX=XXXXX*O;;;;;O=#oX;;;;;;O:.O-O:o:=;;;;;;$%XOOO+;-X=-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;", ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;O$#:o:. o# $OO&o&-:X:X: --#%::%= %::%*;&o:=:.+# +#.;;;# -;;;;;;;O#%## . ::* O;;.:-+-+O:#O-;;;OX&=*o.-;;;--O.:OO-O -;;;;;;;;@;;++;;;O$o$OOX o$O-OOX.o.$$...$***&$$.$$$.$&&&&$ % .$&&**&$. o # .&&&.:ooo%%%.&X$:o $X=O===O;=:o%oooo%$;;O.%#$%$=o$=:&;;=o$O;;;;;;;;.:ooo%o%%%:=;;;;O=#oXO;;;;-O*o:#=+X =-;;-===X::#o +;O:#+;;;O =-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;", ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;O#:%%o#:##%:.X#:o%=:X:X. =-#.OO:X#$OO:&; oo*:#.::$o.;;;##;;;;;;;;+=#% X#:oo##X;;$#;=#.#oo:$;;;;;O$o&-;;;;O#oo%oo=Oo#+;;;;;;;;;+++;;+=.o$OOX o$O-=&$ % ::%#*X&...:.$. $&*&$ % .$$&&&&$:%oo%%%ooo:$&&.#o . :o.X=X. % XOO= :=;O=Xo.XX=OO;;X#oo$o# %# %&;;=:&;;;;;;;;;X.$X== o.=OO;;;O&o:XO;;;;;Xo%%::&O=OO;;;.%o%%oo#X-+;O:#-;;;O#:O;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;", ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-=::#o o#= =-=#% *:=:*=:*O#%o%o= %%o%&;+#*+#o#oo#o.;;;# ;;;;;;;;;- o#...$. .O;;.#;&###o:O+;;;;O %.==O;;;O# o.- o-=%X+;;;;;;;;;+-;;-=$o$-OX o&OO*::%%oo# %.==*#% ::..o#$**&$ %: ..$&&&&. #o .&&.#o .. %.&=O==*.#=+;=o#O;;=#:#o$===O;--:$=::#o:#%*;;=:*;;;;;;;;;;;;;=##XO;;;;;-.%#=O;;;;;;+-$#OO.#:% ;;;-+---=#.-;;;-##+;;;-=: -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;", ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;=o. .=:#o=:$;;O:%.:#=:&O:#O:.-X$. O-#$;+##=:X+#&+#$;;+#.+;;;;;;;-=:##%:%%o%% ;;. ;;;;-:#;;;;+O.%o:%o.=+;-+=o*+=%=-#o+;;;;;;;;;+-;;+O&o*OO*#:&OOX . : $. : *=O=.o..o. %.&XXX&.%ooo .$&**$.o. % %.&*& o..o: #%.=OO-OOOOO;= oXO;O$:% #%##o ;;Oo.&%&=o$=:&;;O:&;;;;OOO;;;;;O :XO;;;;;;=: OO;;;;;;;;;##+O##X&O;;;;-O==O#:=;;;-.#-;;;;-.:O;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;", ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;O=X%&=&=o$oX;+&#:o%*=:*##O-:*-#oo:%&+:X+=:% : -# -:.;;;# ;;;;+ #;-#ooo%$-OO-$#;; #-O;;-:#;;;+O#%:XOO*o:-;;+&:-;=%=+=o=;;;;;;;;;;;;;+-=#=-O&: XO-O=X$o$X$o#&=--O*# $..#o.X===*.% #oo &XX$ %. % .% &XX*&*&. %%.*=--;;;;;;=$%.=;;&o#=& ooXO++O=o%.:.X:.*oX;;O:&;;;;O#.;;;;;-: O;;;;;;;-#:X-;;;;;;;;O:.;-+++;;;;;-O o%%:o -;;; #-OO-;;=o$-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;", ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;X:%oo%%=#o:=;Oo#:$O=:% oX+-:$-#o##%$+:$=#%&+$%o%%o%$;;+ +;;;O# ;+X #:#O&#. -;;;X%#*;;O:.;;;-#:OO=O--&o=;;=##+;XoO;O&=---;;;;;;;;;;;;---;O&o =-++OO&%X=$#*=O+;-=XXX&.o.X=OOOX.% &$.o#*=X.:#. %.$.:.X====X& %#$=O++;;;;O=.%#=;;;=.=.%#%=-;;-#:%&=:%%%%o%X;;O:&;;;;=oX;;;;;-#.-;;;;;;;+-#%.O+;;;;;;&oO; ;;;;;;;=::=--=::O;;;.o==:X;;O:#-O=OO-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;", ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;+Oo&.#=O&%$O; .$#X;-O=o.O;-:$-##.$o$+#.++#$;$O+#.+XO;;+##-;;- o&;; : o*+ .X#;+;;X%#;;;&:O;;;;-O=%%:=O.:=;-Xo=--X:-;;;;X#O;;;;;;;;;;;;;;;O=#:*O-;;;-Xo=-O===O+;+OO=X.:#*O----=.o.X=X$*==*.o.*.o.&$o X=OO=&.:#$=O-+;;O==&:%$OO;;;;;=o.O:=;;;--Oo*=.X=:&=$O;;O: O;-O :O;;;;;-#oXO;;;;;;;++&o#O-;;;;;##+=o=;;;;;;; o=-;;----;;;=: .#O;;-* -*o%#O;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;", ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;O o%$OO:o:&O;;&:X-O=::=;;-:$-#o::%&+#$;+:$;;;;#$;;;;;; o$OO % -;; : :&X:=$#O:O;&%*;;Oo ;;;;;;O#.O#:=o#-;O :==Xo#+;;;;.% O;;;;;;;;;;;;O=$o:XO+;;;;;=% =XX #O+;+-=*.ooXO+;;;-=.%.=OO=OO=&% &X.%.XX.%XOO=&.%:$=O+;;;= #%%:XO;;;;;;;*o&O&=OO-;;Oo*;;;=o*;;;;;-#o&O=#%*-;;;;;+O:%.=O;;;;;;;+Xo#O+;;;Oo$;=o -OOO+;;*o$OOOO==;;;;-$oo +;;;--O O:$;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;", ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-= :#%.:#=.o.O;X:X=:% O+;;-:$- #XX*O-#&+-:.;;;+: ;;;;;;-.%%%o*-;;; #$=:#+.#X#-;=:=;O%#-;;;;;;;=%#:%o*-+;X%XX%%:X-;;;;O&%.;;;;;;;;;;;;=o%:O-;;;;;;;= %%%%o:O;;;-= % =O;;;;;+O$%$=-----OX$*==.%$=-O$O;;=:% $=-;;;;;O:: =OO;;;;;;;;O oo:#%oO;O=oX;;;Oo=;;;;;--#%%%:X-;;;;;;;-O.o%X;;;;;;;;-=o#-;;; :O;;X:%%%oO;;-.%o::o%.;;;;;O .-;;;;;;;.:$:=;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;", ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;=::=-Xo O+- :=;X##o#XO;;;;-#&;-+;;;.%:O-#%=;;;+ .;;;;;;;+O*O-+;;;;;= ##+;=o:X;;;;;;-O+;;;;;;;;+O=&O-+;;;O=--=*=-;;;;;;O. ;;;;;;;;;;;;-==-+;;;;;;;;-O=====O-;;;;O==O;;;;;;;;-X#*O-+++;-O==O=*#=-;;;;;;=#*X=-;;;;;;O=OO;;;;;;;;;;;;OO=&$=O-;=::=;;;-:=;;;;;;--OX=--;;;;;;;;;;--O-;;;;;;;;;-X=-;;;--+;;+++++++;;;+O=&$=--;;;;;;;;;;;;;;;;O#%X-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;", ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;+OO+;-O-;;;--+;--OO--;;;;;;--;;;;;;++++;+++;;;;;;;;;;;;;;;;;;;;;;;;;O-++;;;;+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-=O-;;;;;;+--+O==O;;;;;;;-O--+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;----;;;--+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;----;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;", ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;--+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;", ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;", ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;", ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;", ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;", ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;", ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;", ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;", ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;", ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;", ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;", ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;", ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;", ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;", ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;", ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;", ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;", ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;", ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;", ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;", ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;", ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;", ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;", ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;", ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;", ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;", ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;", ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;", ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;" }; xscreensaver-5.36/hacks/images/sball-bg.xpm000644 000767 000024 00000204736 10370617741 020727 0ustar00jwzstaff000000 000000 /* XPM */ static char *sball_bg[] = { /* width height ncolors chars_per_pixel */ "256 256 92 1", /* colors */ " c #1D6868", ". c #284848", "X c #DF0305", "o c #4B4646", "O c #165757", "+ c #80B4B5", "@ c #0C7271", "# c #092A29", "$ c #3B595A", "% c #4C3636", "& c #7F393A", "* c #7F3030", "= c #A80406", "- c #2F7F7F", "; c #B80405", ": c #2F9596", "> c #855D5D", ", c #3B7777", "< c #A01818", "1 c #409596", "2 c #177271", "3 c #1F3637", "4 c #A67E7D", "5 c #382828", "6 c #56A8A8", "7 c #350304", "8 c #548585", "9 c #176060", "0 c #480506", "q c #5D5A59", "w c #758181", "e c #CB5F5F", "r c #37393A", "t c #386969", "y c #74999A", "u c #B0CBCB", "i c #3F8B8A", "p c #CF3B3B", "a c #980405", "s c #055051", "d c #790304", "f c #874343", "g c #86504F", "h c #9D2827", "j c #EE090A", "k c #075859", "l c #CC2727", "z c #609696", "x c #963637", "c c #880305", "v c #C71818", "b c #290707", "n c #6F1717", "m c #73A5A5", "M c #1E1313", "N c #208988", "B c #491919", "V c #287272", "C c #419F9E", "Z c #137D7E", "A c #0A6868", "S c #073637", "D c #B29D9D", "F c #2E2222", "G c #686868", "H c #6E7271", "J c #734A4B", "K c #680305", "L c #716060", "P c #175050", "I c #486969", "U c #795454", "Y c #547778", "T c #064949", "R c #285050", "E c #074040", "W c #482727", "Q c #4F9697", "! c #308A89", "~ c #7B2121", "^ c #1A4242", "/ c #A53D3D", "( c #1A2121", ") c #580405", "_ c #09605F", "` c #571E1E", "' c #C70405", "] c #81C4C4", "[ c #207E7F", "{ c #285C5C", "} c #608A89", "| c None", /* pixels */ "2[2[-[----i-iii!iii!i!!!!!-!!N!!N!!!!!!!!!!!!!!i!!i!i!iiiiiiiii8i888YYYHGLqUJffxxh<=acnn`B5F^^TPk 22[[N!!!!:!!:!!!!!-[[V22 99OPP^...3.r3rrrrrrrrrrrrrrR...RRR{{{{{{{t {t t ttttttttttttttI,I,IYI,YYYY}Y}wwwwyD+u]uuu]y}8It{99A A2222VV tt tttttVtVVVVV2[22[22[2", "2V[VVV-,-i,ii,iiiiiiiii,!-!-!--[!-N[![!N-!!!!!!!!i!!!i!!i!iiiii8i8Y8YYGGGqLUJffxh<GqJoJ%J%%o%%ro%oooJqqLGHwwwyD++]]]]]]]]", "6mm6mz6zQzQzQ}Q}Q}z}zzzyzmyym]]]u]u]u]u]D+mww8GIIt${{{OOOO___AA 2 2 Vt$$qoo&``~dddcddddKKK)))0)00000))))KKKKddcdcdcn~*~*&foJJqqqqqqqIGIqGIGYqGIqGqqLqJqJJJ&x&x~hnLLqJJJo&oJ%J%ooJJqUqHHww4y++]]]]]]]]]6", "m66Q6QQQQQ8Qi8Qi8QQi8Q}zzzzymm6]]]u]]uu]]+DywwHGI$$$R{RPOOOk___A@ 22{V{$$$oJo``n~ddcddddKKKKK))))))))K)KKdKdddccdc~~n~&%JJJoqoqqIqqIIIIIIYIIYIItGIIYqqqLqJJJf&&x~h~<H>LLJJqJJJJJJqJqJLLHHwwyy+++]]]]]]6]66", "6Q6QQQ181i8iQiii8ii8i8Q8QQzz6mm6]]]]]]u]u]++mw}wYqIo${RRPPPOk___AA 2 $$R$oJ%~`nddcdddddKdKKKKKKKKKKKKKdddcddccd~~*~&%JJoqqqIqI$IIIIIYIY,I,,tIIIIIIIGIqqqqJJJJ&&x*c<~acccdddKK))B0FbF(F#(S3ETsk__@22ZNN::CCCC]66]6++yyy4wHHLLUqUJoJqJqJqqLH>HwwwyDm+]]]]]6]]666", "Q6QQ1Q1iiiiiiiiiiiiii8iQ8QzQzz6m6]]]]]]u]]u+yywwHIqIR$RRPPPsOk___A A V{{t$oo%%&`n~dddcddddKdKKKKKKKKKdddddddcdddn~~~%JJooqq$$qIIIItIt,t,V,,t,I,,,IYIIIqqqqqqJof&&***~L>LUqUJUqUq>L>HH4w4my+m+]]]]]]66666", "6QQQ11i1iiiiii,iii,iiiiiQ8QQzz6mm6]]]]]]]u+]DyywYHIq$$$R.PPPkkk__AA 9V{$R$oo%%~nKdddddddddKdKdKKKKdKdKdddddcdc~n*`&&%JJoqoqI$IIItI,,,t,t,t,-,,It,tIIIIIIqqqJqJJJ&*h*<~cccccdddK))00BbFM((#3SE^Tkk_A2ZNNN::CC66666]6+mmywwwHHHLLULUUqUUL>H>Hwwywyy+++]]6]C]6]666", "QC111iiii!!--!--!,:,iii8i8QQQzz66m6]]]]u]u]]++ywwHIq$$r.R^^PsOk___AA {{ $qooo%~`ndddcddddddddKdddKddddddcdcddnn~~&%J%oqq$q$qIttt,,t,t,-,-t,t-,,,t,,IIIIIqqqqJqJ&&&*~~H>L>GL>LLLHLwH4wwyD+m+]6]]]]C66666", "CQ1111i!i!i-i-!------iiiiii8QQQzm6]6]]]]]]]u++DwwHGq$o$$..P^Pskk___A9 At{$Roo%%``ndddddcddddddddKdddddddcddddcn~`~%J%Joqoq$ItItttt,VV-VtVVV-,V-t-,t,,tIIIIIqqqqoJo&&~h~~cccccdddK))0B0bB(M((#SEETsk_A@@ZNN::CCC6C666+mmyyyw4wH4wLH>LLLH>HHHwwwDyy++6+]]6]C]6666C", "C111!!!!!--!--------i--iiiiiQQQQ6zm6]]]]]u]]++mywwHGq$o...P^Psskk_A_ A{{{$$.oo&W*nndddddcddddddddddddddddcdddn~~~&%&ooo$$IItIttt,VtVVVV-V-V-V-VV,t,t,,ItII$qIoqJJJ%&&~*<~cccdddKKK))00FbBM((3(SEEssk_A2ZNNN::CCC66]66+6+yywywwH>wLw>H>wH4H4wwyyy+m++]6]666666C6C", "1111!i!!-!--[--[---------iiii1QQQ6666]]]]]]]u+DywwYqIqo$...^^PPkkk_A_ {{$$oo%%``ndddcddcdddddddddddddcdddd~nn~%&oooqq$q$$$tttVtVVVVVVVV[VVVV-V-V-V,t,tIII$IqqqoJf%&~~~ccccccdddKK)000bbBM(((#3ETsk_A@@ZNN::CCC6C666+myyyDww4www>H4HHH4Lwwy4yyymm]6]6]6]6]666CC", "1:1!!!!-N-[[-[[-V[[-----!-iiiiQQQ6m66]6]]]]]]++mywwHqq$o...P^Tssk___ _A {{$$oo%%`nnKdddddddcddddddddcdcddddnnn~`%%oJo$oqI$ttt VtVVVVVV[V2V2[V2VVV[V,V,t,tIIqIqqqJoJJ*&~*~ccccdcddKK)))07FbFM(3#SSETsk_A@@ZNN::CCC6C]C66+mzyywww4H4HH>w>wwwwwyyy+m++6]]666]CC6CCC", ":1:!!!![-[-[[[V[V[V[V[[----!iii1QQQ666]]]]]]]u+yDwHHGq$o.o3^^P^ssk___9 {{R$ror&%`nnKdddcdcddddddddcdddddddc~`*%&Jooqo$$t$ttttVVVVV2V2V2[2V2[V[V[VVVtV,,tttII$$qqoJ%J%*~hncdccddddKK))007bBM(M(#3EEss_A@@ZZ:::CCC6CC]666mmyyywwwwwww4ww4wy4wyDymm+6]]C]]666C6CCC", "1:!!!![![[[V2V[22[V2[V[-[-!-i!i11Q6Q66]6]]]]]]++yywHHqqooR.rT^Psskk__A999{{$.oo%``nndddddddcdcdcdcddcdddddnn`*`%o%oooI$$t$t tV VV2V2V222V22V2222VV[VVVVttttIIqIoqqoJJ**~n~~ccdcdddKK)))007bFMM3##SETsk_A@ZZNN::CCCC6C66+6mmyyy4wwwwwwwwwwwyyyymmm]6]666666C6CCC:", ":!:!![N[[[2[2[22V22V2V[V[---!!ii11Q666C]]]]]]]+D+wwwHqq$oor^.^T^sskk__A {{R$oo%%``nKKdddcddddcdddcddddddnnn`~%&oJoq$$I$$ttt VtV V2V22V222222[2V222VVVVVV,tttI$q$qqoo&%&~nncdccddddKK))00B77b(M(#3SETsk_A@ZZN::CCCC666666myyyywyw4w4ww4wy4yyymy+66]66]66]6C6CC:C", ":!!N![[[[[2[22222222222[[[[--!!ii11QC6666]]]]]]++y4}HGqooRr.3^^^Tskk___99{{{$.o%%``nndKddddcdcddcdddddddKnn`*W%o%o$o$o$t$ t V 2V22 22222222222222V2V2VVV,Vttt$I$qqoJJ%&&~*wLqooorr^^^^TTskk__999{R.oo%%%`nn`KKdKdKddKdKKnKnnW`%%J%ooR$$R{t{ { A2AAAAAAAA AAAA AAA @A@ 2 2 V Vttt$t$$oqoJ%*%*nn~ddcdddddKK)))0077bMM((#SETsk_A@@ZZN::::CCCC6C6m6zy6yzymyyz6y6m6m66666C]C66CCC::::", "!N[NZ[2Z@2@2AAA9A_A___ _A A 222[[[!!!:CC6C66]]]]++yDwwHLqJ%orrr33^ETskk__999R{o..%%W```KnKKdKdKKdKdKnnnW*`%%%oRo.o$${{{9t9 A A A A A AAAAAAAAAAAAAA A2A @ 2t t$t$q$ooo%&`~~ndddcdddddKK))00077bMM#(SSETsk_@ZZZNN::C::C6C66666z6z6yzmzmzmz6m6+66C]CC66CCC:C::!", "NNN[[Z222@AA AAA_9__9__9A_ @ 22[[[!!!:CCC6666]]]]++ywwHLqqoo%r33^^ETssk___9O{{R.oo%%`W`nnKKKKKdKKKnn)nWnW%&r%oo.$$R{{{ tA AA AAAAA_A__A_AAA AAA A@ A2 2 t $t$$$$oJoo%*`nndddcddddKdKK))0077MMM((#SSTsk__@@ZNNN::CCCCC6C66zm6zyzzmzzm6zm666666C]C66CCCC:::N", "NNN[ZZZ2@2A2AA__________9_AAA2222[[N!N:CCC66]C]6+++yy4HLLJoo%rr333^Tsskkk_99P{Ro.r%%W```BKnKdKKKKn)nnnW``W%%oooo$${$ {{9 9A9A A AAA_A_A_A_A_A___A_AAAA A A 2 tV{$$$$ooo&%J`~nnddddcddddKK)))00777MM((#SETsk_A@ZNNN:::::CCC6Q666z6z6mz6mzmz6666666CC6CC6CC::::N", "NNNZ[Z2@@@ AAA______k______A A22Z[[N!!:CCC666]]]]+myywwHLqJ%orr33^EETss__k999{R.o.%%W``nnnKnKKnKnKn````%`%%oro..$$R{{{{ 9 AA_A9AA_A_______A_A__A_AAAAA2 {t$$$o$oo%%~%n~dddcddddKdKK))00777MMM##SSETk_A@@ZZNN::::CCCC6CQ6zm6zz6zz6z6m666666C6C6C6CCC:::N", "NNNZ[ZZ22@@A_A____k9k_Ok__9_A2A22[[[N:::CCC666666+++y4wLGUoo%Wrr333ETsskk__9O{{Ro.r%%%```Bn0nnKn)n`n`n%``%%oroor$R${t{9{ 9 9A _AA_A_______________A_A_AA A A t{V{t$$$oooJ%%~nnddddddddddKKK))0077bbM((#SETsk_A@ZZNNN::C:CCCC666C6Q6mz6zm6z66666C666C6CCCC::::N", "NNN[ZZZ@@@AA _A__kkk_kk_k____AA2@2Z[[!!:CCC66]]]]]+yyywH>qJoo%rrF3^^ETskk_k9OO{R.ro%%W`W``nnKBKnnKBn```%%%%oo..$$RR{{9{99 9A9A_A___A________________A_AAA A A A 9t{{$$$ooo%%%~`nndddcdcdddKKK)))0077bMM(##SETs__A@ZZNN:N:C:CCCCC6Qz6zCzm6z6mQ66666C6C6CC6CC:::::", "NNNZ[ZZ2@2AAA____k_kkkkkkkk___AA@22[[N:::CC6C6666]m+mw4HHUqJ%%W3333^ETskkk_99P{RR.rr%%W````B`nn0n`n``%``%%%oroo$r{{{{{9V999A _ __A_________k_k_________A_AAA 9 { {$$$$ooo&%`%~nKdddddddddKKK))00777M(M##SSTsk_A@ZZZNN::::CCCC6C66Q6zz6z6Qz666C666C6C6CCC:C:::N", "NNN[ZZ2@@@AAA___k_kkkkkkk_k_9_A 2@ZZ[NNN:CCC66]6]6]my4yH>GJoo%rrF33SETsskk_k9O{RRo.or%WW```n)nBn`B````%%%%ror..$R{R{{9{99 9A9A__A_______k_k_k_k_______A__AA9 9 9 {{{$R$ooor%%~`nnddddcddddKKK))00077bMM((#STTskAA@ZZZN:N:::CCCCC6Q6CmCz6z66zQ66C6C6CC6CCCC:::NN", "NNN[ZZZ@2@AAA____kkkkkkkkkkk___AA22Z[[N:::CCC666]6++mywwHUqJ%%%r5rS3^TTskk_O9OORR.rr%%W%``)``Bn``nBn%`WW%%%ro.o.$${9{{999999A_9________k_kk_kk_kkkk_____A__AAA 9 {{{{$$R.oo&%`%nnKddddddddddKK))0077bb(M##SEEsk_A@ZZZNNN::::CCCCCC6QQQ6zQ6zC66C66C66CCCCCC:::N:", "NNZNZZ2@@@AAA___kkkkkskkkkkk___AAA22Z[NN::CC666]]6]mmy4HH>JJo%%5rF33SETssk__k9{{RR.rr%%W``%`)```K`````%%%ror.o..RR{R{99{99AA9_______kk_k_kkkkkkk_k_k______A_9A9 99V{{{$.$ooor%`*nnKddddcddddKKKK))0077bMM((#SETsk_A@ZZNNNN::C:CCCC6Q6CmQ6Q6Q6z6C6C6CC6CCCCC:::N:", "NNNZZZZ2@@AAAA_k_kkkkkskskkkkk__AA@2Z[ZN::CCCC66C]6+yywwHLqoJ%%%53FS^ETsskkk9OOOR.orr%%WWW```n)````W`W%W%%ro.o.o{R{{O{999999______k_k_k_kkkkkkkkkkkkk_k____A_A 9 999{R{$$Rooo%%W``nKddddddddddKK)))0777bM(##SSTsk_A@@ZZNNN::::CCCCQ16QQQ6QQ6Q6C6C6C6CC6CCC:::::N", "NNNZNZZ@@@AAA___kkkssssskskkk___A @@2ZNNN:::C6]66]6++y4wH>>J%J%WrF333EETskk_k9O{RR..r%rWW`W``````````%W%%%rrrRoRR{R{{O999_9A_9_____k_kkkkkkkkkkkkkk_k_k_____9A_99 {{ {{R$o.ooo%`%nndKdddcdddddKK)))00777MMM##SETsk_A@@ZZNN:::::C:CC6QC6QQzQ6Q6C6C6CCCCCCCC::::N:", "NNNNZZZ2@@@AAA___kkkkskssssskkk__AA@2ZNNN::CCCC6]6]6myywwLUq&%%%553(S3ETskkk_OOORR.rrrr%WW`W```````WWW`%r%roo.R.RR{{O{99999_9___k_k_k_kkkkkkkkkkkkkkkkk_k_____9A99999{{R$Ro.oWJ```nnKddddcdddddKK))0077bbMM##SETsk_@@ZZZNNNN:::C1CQCCQQ6Q66QQQC6CC6C6CCCCC:C:::N", "NNNZZZZ@Z@AAA___kkkksssssssskkk___A@2Z[ZNN:CCC6666]6+mw4HH>JJ%%Wr53r3SETTskkk9OOOR..or%%WWWW`````W``%WW%%%rr.o.RR{.O{O9999_9_____k_k_kkkkkkkkkskkkkkkk_k_k____A99999{{{{R$.oro%%`n`nKdddddcdddKdKK))00777MMM##SETsk_A@ZZZNN:::::CCC1C16QQQQCQ6Q6C6CCCCCCCC::::N:", "NNNN[ZZZ@@@AAA_k_kkkksksskssskkk__A@@2ZNN:::C6CC]66+mmywwHUJJJ%%W5FFS3EEsskk_k9ORR..rrrW%WW`B`B`W`W`W`Wr%roor..oRRR{O{O9O9_9____k_k_kkkkkkkkskkskskskkkkk_k_____A99999{{R$o.oo%%%``nKKddddcddddKKK)))077bbMM##SSTsk_A@ZZZNNNN::::1C1CQ1CQ6QQ6QQC6CCCCCCCC:C:C::N", "NNNZNZZ@2@@AA___kkkksssssssskskk__AA@2ZZNN::CCC666]66+yw4H>qJ%%`W5rF^3^ETskkk_OOORR.rrr%WWWW`W`B`B`WWW%%%rrr.o.RRR{{OO{O99k9_k_k_k_kkkkkkskskskskskkskkkkk______9_999{O{RR$.oro%`W`nnKdddddcddddKKK))00777MM((SSETs__A@@ZZNN:N::C:CC1C6Q1QQQQQQCC6C6CCCCCC:::::N", ":NNNNZZZZ@A@AA____kskssssssssskkk__A@@ZZZN::CC6CC]66+yywwHLJJ&%%%55F#3SETsskkk9OOP...rrrrWWW%`B``%`WWWWWrr%rrr..RRRP{OO99O9_9____kk_kkkkskkssksssksskskkkkkkk____99999{{{RRo.ro%%``BnKKdddcdcddddKK)))077bbMM##SETsk_A@ZZZNNN:::::11CQ1CQ6QQQQ6QCCCCCCCC:C:C::N:", "NNNNZZZZ@@@AAA__kkkksssssssskskkk__AA22ZNNN::CC6C66]6myw4H>UUJ*WWW5F333ETTskk_kOO{R..rr%%WWWBWW`W`WWWW%%r%rr.o..RR{RO{O9O9_kk_k_k_kkkkkkksskssskssksskskkk__k____9_9O9O{RRR.o.r%%WW`nKKdddddcddddKKK))00777MM(#SSTTk__@@ZZZNNN::::C:1CQQ1QQ6QQQ6Q6CCCCCCC:C::::N", ":NNNNNZZZ@@@AAA___kkksssTTssssskk__AA@@ZZN:::CCCC]66mmmwwHGUJ%&%%W5F3(SETTskkk9OOPR.RrrrrWWWW``BWW`WWWWW%rrrr^o.RRRO{OOOO9O9_9_k_k_kkkkkskskssssksssskskkkkk_k_k___99O9O{{$Ro.ro%%``nnKKddcdcdcdddKK))00777MMM##SETsk_@@@ZZNNNN::::C11CCQQ1QQCQQCCCCCCCCCC::::::", "N:NNZZNZ@@@@AA___kkkssssssTsssskkk__A@@@ZZNN::C6CC666+mwy>H>JJ%%`W5F3(3SETsskkkOOOR..rrrr%WWWWB`B`WW`W%Wr%rr.r...RRRO{OO9O_O_k_k_kkkkkskksksssssssksksskskkkkkk__O_O99O{P{.R.or%r%`W`KKKdddddcdddddKK))0077bMM(#SEEsk_A@@ZZNNN:N:::C1C1QCQQQQQQQQQCCCC:C::::C::N", ":NNNNNZZZ@@@@AA___kkksssTsTssssskk__AA@ZZZN::CC6C66]6myyw4>>JJ&*%W553F3EETssk_k9OPPR..rrrrWWWWWW`W`WWWWWr%rroro..RPRRP{OO9k9k9k_k_kkkkkskskssksssssssssskskkkk_k_k__99O9{ORR.Rr.%%%```KKKddcdcdcdddKKK)0077bb(M##SETk__A@ZZZNNN::::::111Q1Q1QQQQCQCCCCCCCCC:::::", "N:NNNZZZZ@@@A@A___kkskssTsTTsTssskk__A@2ZZNN:::CC6666+mwyHH>UJ%%`WW5F#33ETsskkkOOORR.r.rrW%WWWB`BWBWWW%Wr%rrr....RRROOOO9O9k9k_kkk_kkkkkskssssssssssssskskskkkk_k_O_O9OOO{{RRo.r%%WW``nKKddddcdcdddKK)))0077MMM##SETsk_A@@ZZNNNN:::1C1111QQQ1Q1QQQCCCCC:C:::::::", "N:NNNZNZZZ@@@AA___kkkssssTTsTsssskk_AA@@ZZNN::CC6C6666yywwLLUJJ&`WW5FF#3ETTsskk_OOPR..r5rr5WWWWBWB`WWWWWF%rrrrr...RPRR{OOOOk9k_k_kkkkksksksssssssTssssssskskkkkk_k_k_999OOORR^o.r%WW`BnKKKdddcdcddddKKK)00777MM(#SSEsk_A@@ZZZNN:N::::1111Q1QQQQQ1QQCC:CCCCC:::::", ":NNNNNZZZZ@@@AAA_k_kssssTsTTssTsskk___A@@ZZN:::CCC]C]66yw4w>UJ*%`%W55333SETskk_kOOPR..rrr%5WWWW`W`WBWWW5%5rrrrrR..RRPPOOO9O_O_k_k_kkkkkksssksssTssssssssssskkkkkk_k9kOOOO{RRR..rrr%W```KKddddcdcdcddKK)))0777MbM##STTs__A@ZZNNNN::::1111Q1QQQQQQQQ1QQCC:C:C:::::", "N::NNNNZZZ@@@@AA__kkkksssTsTTTssskkk__A@@ZNN:::CCCC66mmywwHLUfo&&`WF5FFSEETsskkkOOPP...rrrrWWWBWBWBWWWWWW%%rrr.r...RRR{OOOO_O_O_kkkkkksksksssssssTssTsssssksskkkkkk_k_99OP{ORR.orr%WW``)KKddddcdcddddKK))0077bMM(#SETskAA@@ZZNNNN::::11111Q18Q8Q8QQQ1CCCC:C:C:::", ":N:NNNZNZZZ@@AAA___kksksTTTTsTTssskk__A@@ZZNNN:CCC6C66myww4>LJ&%`%`WFF333ETsskk_kOOR^.^rrrW5WWWB`B`BWWW5%5rrrrr...RPRPOOOOOO_O_k_kkkkkkskssssssssssTsssssskskkkk_k_k9kOOOOORR...rr%rWW``KKKddcdccdcdddK)))0777MM(#SSTsk_A@@ZZZNNN::!:1111QiQ8QiQQ8Q1QQ1:CC:C::::", ":N:NNNNZZZZ@@@AAA__kksssssTTTTsTsskk__AA@@ZZN::CCC66Cm6yywwHUUJ&&`WW5FF(SEEssskkOOPP..r.5rrWWWBWBWBWBWWWW%5rrrr.....RPROOOOOk9kkk_kkkksksskssssssTsssTssssskskskkkkk_k_9OOOOPR.r.rr%W`)``KKddddcdcddddKK))007bbM((#SETkk_@@ZZZNN:NN:::11818QQ18QQQQ8Q1QCC:C:::::", "::N:NNNZZZZ@@@AAA__kkksssTTTTsTssssk__AA@@ZZNN:::CC6666ywwH4JU&%~`%BF5F^3EETskk_kOOPR^.rrr5W5WWBB`WBWBWW5Wrrrrrr....PRPPOOOOkO_O_kkkkkkksksskssssTsTssssssssskskkk_kk9kO9OORRRR.rrrrWWB`KKKdddcdcccdddKKK)0077bMM##SETskAA@@ZZNNN::::i11181iQ8QQ88QQiQQ11CC::C::", ":N:NNNNNZZZZ@@@AA___kksssTsTTTTTssskk_AA@@ZZNN::CCC6666ymwHH>JJ*J``W5FF#3STTsskkkOOP^..3rrr5WWBWBWB`WBWWW5W55rrr3....RPROOOOk9kkkk_kkkkkskssssssssTsssTssssskskkkkkkkk9kOOOOPP...rrr%WW``)KKddddccdcdddKK))077bM(M#SSTsk_A@@ZZZNNN:!1:i1iC8Q88Q8iQ8iQ81Q1:C:C:::", ":::NNNNNZZZ@@@@AA___kkssssTTTTTTssskkk_A@@ZZNN:::CCC666yyww>>>f&%*W`WFFF^3ETskkk_kPPR..rrr5WWWWB`BBWBBWWWWr%rrrr.r..PPRPPOOOOk_k_kkkkkksksskssssTsssTssTsssssskskkk_k_kO_OOORRR..rrr5WW``KKKdddcdccdcddKK))0077bMM##STsk__@@ZZNNNNN::!11iQi8iQ8Q8QQ8QQQ1Q11:::::", ":::N:NNNNZZZ@@@AAA__kkkssTsTTTTTTsssk__A@@ZZZN:::C:6C66zywww>UJf%~``B5FFSSETTsskkOOPP..r3rr55WBWBW`B`BWBW5W5rrr3r3...^RP{POO_OOOkk_kkkkkksksssssssTsTsTsssssksskskkkkkk_kOOOOPP...rrr%W0``KKKddcdcccddddKK))077bM((#SETs__@@ZZZNNN::!:1i18iQQ8i8i88Q8Qi81111C:::", "::N:NNNZNZZZ@@@@AA__kkssssTTsTTTsTskkk__A@@ZZNN:::CC6C6mywwH>UJ&&`%`WFFF#3EEss_kkkOPP..^r5rWWWBWB`BBBBBWBWW5Wrrr.r....PPPPOOOk_k9kkkkkkskkssssssTsssTsssTssssskskkkk_kOkOOOOPPRR..rrr5WWB))KKdddccdccdddKK)00077bM(#SETsk_A@@ZZNNNN:!:i1ii8888Q}8}i888QiQi111:1:", ":::N:NNNNZZZZ@@AAA___kkksTsTTTsTTssssk_AA@@ZZNN::CCCC66zyww4L>fJ&*~`BBF3(3EETsss_kOOP^.3rr555BWBBBB`B`WBWW5W5r5rr^r^.^.RPPPOOOkOkk_k_kkkksksksssssTsTsTssTsssksskskkkk_k_kOOOOPP.^.rrrWWW`KKKddddcccccddKK)))777b(M#SSTsk_A@@ZZZNN:!::!181i8Qi8}8Q8}i8Q8Q811111:", ":::N:NNNZNZZ@Z@@AAA_kksssssTTTTTTssskk__A@@ZZNNN:::6C666y}wH>Ug&*``%BWFFF^SETsk_kkOPP...rrr5WWBB`B`BBBBBBWW55rrrrr^r..^RPPOPOkOk9kkkkkkkkksksssssssssTssTsssssskskkkkkkkOkOOOPRP..r^rrrWB``)KKddcdcccdcddKK)0077bMM##STTk_A@@ZZNNNN:!!1iii8Q88QY}}8}8Q8i8Ci11:1:", ":N:::NNNNZZZZ@@@@A___k_ssssTTTTTTTsskk__A@@ZZZNN:::CCC6zzwwwH>UJ&`*``WFFFS3ETsskkkOOP^..3r555WWBBBBB`B`BBBWWW55rr3r.^..PRPPPOOOOkk_k_kkkkskksksssssTsTsTssssssskskkkkkk_k9kkOPPRP...5r5WWB)KKKdddcccccdddKK))007bb((#SETk__@@ZZZNNNN:!1i1Qi8888}8888}88Q8Q81ii1:", ":::N:NNNNNZZZZ@@AAA__kksksTsTTTTsTTsskk_AA@@ZZNN:::CCC66yyww>>UJ&&```BFFF#3ETsskkkOOPR^^rrr5WBBB`B`)B`BBBWB5W5r5rrr3...^^RPOPkOkOkkkkkkkkkskskssssssTsTssTssssssksks_kkk_kOOOOPP^..^rrr5WB`))KdddcdccccdddKK)0077MMM#SETsk_A@@ZZNNN:!:i!i8i8i88Y88}YQY8i8QiQi11!", ":::::N:NNZNZZZ@@@AA___kksssTTTTTTTsTkkk_AA@@ZZNN::CCCCQ6zwwHH>gJ&&`~`BWFF33EEsss_kkOPP.r3rrWFWBBB`BB)B`BBBBW5W55rr3rr^...PPPOPOOOkO_k_kkkkkkkssssssssssTssTsssskskskkkk_kOkkOOPPR^.^rrr5WWB`)KKdddccccccddKK))077bMM#SSTskAA@@ZZNNNN!!i1iii888}8}Y8Y}YQ}i88ii1i1", "1!:N:N:NNNZZZZ@@@AA__kkksssTTTTTTTssskk__A@@ZZNNN:::C66Czzyw>H>f&&`*BWBFF#3SEsskkkOkO^..^r35WWBBBB)`0`)BBBBWW555rrrr^.3P^.PPPOOkkOkkkkkkkksksksksssssssssssssssskskkskkkk_kOOOPOPR...3r5WWB`)KKKddcdcccddddK))0077M(##STsk_A@@ZZNNN:N:!ii88888Y8Y8w}8Y8888Q81i11", "::::::NNNNNZZZ@@A@AA__k_ssssTTTTTTTsssk__AA@ZZZNN::CCCC6zywww>gJ&&*```B5FF3^ETssk_kOPPP3r3%5WFBB`B)B)B)B`BBBFWW553rrr3....^POPPOOkOk_k_kkkkkkkskssssssTsTsssssksskskkkk_kkOkkkOPPP^.^rrr5WB`))KKdcdccccccdKKK)0077MM(#SETkkA@@ZZZNNN!!iiii8iY8Y8H}Y8Yw8888ii8ii1", "i:!:N:NNNNNZZZZ@@@AA__kksssTTTTTTTTsskkk_AA@@ZZNN::::C6CQzwwH>>Uf*~```BFFF#SETskkkkOOP..^r555WBBB)B`)`)B)B`BWB5W5rr33.3.^PRPPPOkOOkOkkk_kkkkskkssksssssssssssssskskkkkkkk_kOOOOPPP...3rrr5BB`)KKdddcccccdcdKK))077bMM#SETkkAA@ZZZNNN:!!ii8iY8Y8wY8YwY8Y}888Q8i1i", "1i:::N:NNNNNZZZ@@@AA_k_kksssTTTTTTTTsskk_AA@ZZZNNN::CCC6zzwwHH>gJ&~*n`BBF333ETsskkkkOP^^r3r5WFBBBB`)B)`)B`BBBBW5555rrr.3..P^PPPPOkO_k_kkkk_s_sksksssssssssssssssskskskkkkkk_kOkOPPP^3..555WB`)KKKddccccccdddK))0777M((SSTs__@@ZZZNNNN!!iiii88Y8Y8HYY}Y}YY888i8ii", "i:!:N:NNNNZNZZZ@@@AA___kssssTTTTTTTssskk__A@@ZZNNN:::CCCQzyww>>gJ*&````WFF(SEEssk_kOOP^..3r55WBB)`))))B))B0`BBFW55rr33r.^^.^PPPOOkOkOkk_kkkkkkkksksssssssssssssskskkkkkk_k_kkOOPOPP...33r55BB`)KKddcdcccccddKK)0077MM##EEsk_A@@ZZNNN!:!ii8Y8Y8H}YYH}GYwY88Yi8Qii", "ii1!::::NNNNZZZ@@@@AA__kkksTsTTTTTTTsskkkAAA@ZZZNN:::CC6Qz}wHHHgfJ~*~`BBFFF3^EssskkksOP^3rr55WBB0`0`)))`)`)BBB`FW55F%r33..^.PPPPPPkOkk_kkkkkkkkskkskssssssssssksskskskkkkkkkkkkkPPPP^3.rrr5BB`)KKdddccccccddKK))077MM(#SETk_A@@ZNZNNN!!i,i88Y}YYYHYHYH}YY}Y8888i", "ii:!:N:NNNNZZZZZ@@AA___kksssTTTTTTTTsssk__A@@@ZZNN:::CCCQz}yw>>>f&&~```BF5#(SETs_k_kOPP..3r55BBBB))))))))0`0`BBBW5553rr3r3.P^PPPOOkOkOkk_k_kkkkkksksksssssssssssskskkkkk_k_k9kOOOPP^...3555WBB))KKdccccccccddKK)0077M(#SEss__A@ZZZNN!!!ii8Y8YYYwHHYHHYHYwY88Yii8", "iii:!:N:NNNNNZZZ@@@@A___kksssTTTTTTTssskk__A@ZZZNNN:::C6QQ}www>>J&&*nn`BBFF3^ETsskkkOO^^^53r55BB`B)`))))))`)`0BBBW55r53r^.^..^PPPPPOkOk_kkkkkkkkkkskkskssssssssskskkskkkkkkkkOkOsOPPP^^r3rr5WB))KKdddccccccddKK))77bM((SETs__@@@ZNNNN!!i,iiY}YYGYHHHHHHYH8Y8888i", "iiii:!:NNNNNZZZZ@@@AA__kksssTTTTTTTTTsskk_AAA@ZZNNN:::C:6QzwwH>>gf*~*``BWFF33ETskkkkOOP^.3r55WBB0))))))))))0B)BBBFW55rr53r^^^.^PPkOkOkOkk_k_kkkkkkkksksskssssksksskskkkkk_k_k_kOOOPPP...3rF5WBB)KKKddcccaccdddK))077bM##STsk_A@ZZZNNN!!!iiY8YYHHYHYHHHHHYYwY88i8", "iiii!!:N:NNNNZZZZ@@AAA__k_ssssTTTTTTssskk__A@@ZZZNN:::CCQQz}wHH>Uf&~*~)`BFF(3EEsss_kkOP^.3rr5FBBB)`)))K)))))`)BBBBWB5553r3^r^^PPPPPPOOk_kk_k_k_kkkkkkskksskskssskskskkkkkkk_k_OkkPOPP^^^r3r55BB))KKddcccccccddK))077M(((SEskAA@@ZZZNN!!i,iY8YYHYHHHHYHYHHGY8YY88", "8ii!:!!:NNNNZNZZ@@@@A__kkksssTTTTTTTTsskk__AA@@ZZNNN:::C1Qz}ww>>gg&&~`nBWB(F^3TTs_kkOkPP..355WB0`0))K))K)K)))0`0BBFWF5r53r3.^^.^PPPkOkOkO_kkk_kkkkkkkksksksskskskskkskkkk_kk_kk_OkPPP^...3r55WBB)KKddcccccccdddK))077M(#STTk_A@@ZZNNNN!ii,8YYYYGHGGGGGHHYHYH88Yi", "i8iii:N:NNNNNZZZZ@@@AA__kkksssTTTTTTTssskk_AA@ZZZNNN::C1CQz}wHH>>f&**`n`BBFF#^ETssk_kOO^^.535FBB0`))))K)K)))))B)BBBFW55rr3r3.^.P^PPPPOkOkk_k_kk_k_kkkkkkksksksskskkskkkkkkkkk_kOkOOOPPP^r3rr5FB`))KKddcccacccddK)0077MM(SETs__@@ZZZNN!!!iiY8YYYHGHGHGHGGHHHYY8Y8", "Yiiii!!!:NNNNZZZZ@@@AA__k_ssssTTTTTTTsssk__AA@@ZZZNN:::C1QQ}}wH>>ff&~*nBBB5F#3ETs_kkkOPP.33rW5BBB)))K)K)K)KK)))0`BBBBW5Fr3r3r^^^PPPPkPOkO_kk_k_kkk_kkkkskkskskskkskskkkkk_k_kkk_kOkPPP^^^r3355WB0)KKddcccccccddKK)077MM#(ETs__@@@ZNNNN-i,,8YYYHHGGGGLGGGHGHYHY8Y", "iY8ii!!:NNNNZNZZZ@@@@A___k_sssTTTTTTTTskkk__A@@@ZNNNN::11QQzwwHL>gf&*~n``BF3F3^Tssk__kPP^.r355BBB))))K)K)KK))))))0BBBF5555r33r^^.^PPPOkOkOk_k_k_k_k_kkkkkskkskskskskkkk_kkkk_k_OkOkOPPP^^^3r55FBB)KKKddcacacccdKK))777M3#STskAA@ZZZN[!!-i,8YYGYGGGLGGHGLGYHGYYY8", "8ii,ii!!N:NNNNZZZZ@@AAA_kksssssTTTTsTsTskk__AA@ZZZNN::::CCQ}}wH>Ugf*~*`n`BBFF3EEsskkkkOP^P3355BB0)))K)KKK)K)K))))B0BBBF5553r3.3.^P^^PPOOkO_kk_k_k_kk_kk_kkkskkkskkkkskkkk_k_k_k_kOkPOPP^..r3r55BB))KdddcccacccddK))077M((STsk_A@@ZZNNN!!i,8YYYHGGGGHLLGGGGGHHYYY", "8Y8ii!!!:NNNNZNZZ@@@@AA___kksssTTTTTTssskk__AA@@ZZNNNN:C11QQ}}w>Hgf&&~~K`BB5F#^ETsk__OkP^.3rr5FB0`)))K)KKKKK)K))))`0BBBF555rr3r^^.PPPPsOkOkO_k_k__k_k_kkkkkkkskkkskkkkkkkk_k_k_OkkOkOPPP^^3r355BBB))KddccaccccddK))077MM#SETk_A@@ZZN[N-!,iYYGYGGGGGLLLLHLGGHHYG8", "Y8,i,i!!!NNNNNZZZZ@@@AA__kksssTTTTTTsTsskkk_AA@@ZZZNN::::1Q8}wwH>gff~*n*B`BFF33ETskkk_kO^P.355WBB)))K)KKKKKKKK))))0)BBBB555Fr33^^^^^PPPOOkO_k_k_k__k_k_k_kkkkkkskkkkkkkkkkk_k_k_k_kOPk^P^.^3rr55BB)KKKdccccacccddK)007MM(3STs_A@@ZZZNN!-i,8IYHGGGLLL>GL>GGGGHHYY", "8Y88iii!!:NNNNNZZZ@@@AA___kkssssTsTTTTssskk_AA@@ZZZNNN::11QQ}}wH>>gf&*~nn`BF5(3^Tskk_kkPP^r3r5F0B0))K)KKKKKK)KKK))))0BBBBF55Fr3r^r^P^PPPPkOkOk_k__k_k_k_kkkkkkkkkkkkkkkk_k_k_k_k_kOkOOPPP^^r3355BB0)KKddcccacccddK))77bF##ETsk_@@@ZN[N-!i,,YYIHGLGL>LLLLLLGGGYGY", "YY8i,i!!!NNNNNZZZZ@@@@AA_k_sksTTTTTTTsTskkk__AA@@ZZNNN:::11Q}}wHL>gfx~*nnBBB5F^EEss_kkOk^P^3F55BB))))KKKKKKKKKK)K)))B0BBFWF55(r33^.^^PPPsOPkO_k_k___k_k_k_k_kkkkkkkkkk_kkk_k_k_k_k_OkPOPP^^^rrF5FB`))KddcccacccddKK)077MM(STsk_A@ZZZNN!-i,8YGHGGLLLLL>LLLLHGGHHY", "YY8Y1,ii!:NNNNNZZZZ@@@A__k_ksssssTTTTTssskk__AA@ZZZNNNN::11Q8}}H>Lgff*~~n``BFF33Esskk__OO^^r3rFBB0)K)KKKKKKKKKKKK)))))B0BB55555r3r^^^^^PPPOkOkOk__k__k__k_kkk_kkkkkkkkkk_k_k_k__k9kkkOkP^P^.333rFBB))KKddccacaccdKK)077b##3Esk_A@@ZZN[N-,iYYYGLGLLLULU>L>LLLGGGY", "YYY,8i-!!!NNNNZNZZZ@@@AA__kkkssTTTTsTTssskk__AA@@ZZZNN::::1Q8}YwH>>ff**nnnBBFFFSETsk_kkkPP^^3W5FB))))KKKKdKdKKKKKK)K))0BBBFF55F333r^^^P^PPPOkO_kk______k__k_kkkk_kkkkk_kk_k_k_k__k_OkOPPPP^^.r3W5FB0)KKddcccacccddK))07bF(SETk_A@@ZZNN[!-,YYGIGLLL>LULUULL>LGGGH", "HYY8,i,i-!:NNNNZZZZ@@@AA___kksssTsTTsTTsskk__AA@@@ZZNNNN:111Q}}wH>>ffx~~`n``F5F3^Tssk__kOP^^r3FBBB))K)KKKKdKKdKKKKK))))0B0BBF555Fr33^^^P^PsPPkOkO_k_k___k__k_k_kkk_k_kkk_k_k____k_k_OkOsO^P.33r3FBBB))KddccacacccdK))07MM(^3TskA@@ZZZ[N-i,IYYGGG>qUU>UUUULLLLGGG", "YYYY8,ii!!NNNNZNZZZ@@@AAA_kkksssTTTTTTssskkk_AA@@ZZZNNN:::1188}wH>Ugf&h~nn`)BFF^3Tss_k_kOPP^3r5BB00))KKKKdKdKdKKKKKK)))))BB7BF55F3r3r^^^^PPPPkOkO_k_______k_k_k_kkk_kk_kk_k_k_k___k_kOkOPPP^^r3F55BB0)KKddccaacccddK)077MMSSTs__@@ZZNN[!-,8IYLLqL>UUUUU>LUL>LLGG", "GGYY8,i,-!!NNNNNZZZ@@@@AA__kkkssTsTsTsTssskk__AA@@ZZZNNN:::1Q8}YHH>>ff*~~n``BFF3S^Tskk_kkP^Pr35FFB)))KKKdKKdKdKdKKKKK))))00BBBFF55(r33r^P^^TPPOkOk_k__k________k__kk_k_k_k_k_____k9__kOOkP^P^^r3r5FB0))KddccccaccddK)007MM#3Esk_@@@ZZN[--iIYGIqG>q>UUUgUUUULLLGG", "GYYYY8,!i!!NNNZNZZZZ@@AAA___kssssTTTTTsTskkk__AA@@ZZZNNN:::18Q8wwH>>ffx*~nn`BWFF3^Tkkk_k9sP^^3F5BB0))KKKKdKddKdKdKKKKK)))))0BBF5F5FF3rS.^^P^PsPOkOk_k_______k_k_k_k_k_kk_k___k__k__k_OkOPPP^P^3rF55BB))KddccaacacddKK0077((SEsk_A@ZZZ[N-,,YIHGLLUULUgUgUgUUU>qLG", "GGGYIYi,--!NNNNNZZZ@@@@AA__k_kssssTsTTTssskk__AA@@ZZZNN:N:!11Q8}HHL>ff&h~nnn`BFF3^Ess_k_kOP^^r35FBB)))KKKKddKddddKdKKKKK))0)00BBBF55F33r3^^P^PPPkOkO__k____________k_k__k__k__k_____k_kkOkPT^^r33F5FB)))KdccccacccdKK)07MF#3^Tk_A@@ZZ[[--,,YIGLLqUUUgUgfUgUUU>LG", "GGGYYY,ii!!!NNNZNZZZ@@@AAA__kskssTTsTsTssskkk_AAA@@ZZZNNN::118i}YH>>gf&~*nn``BB5(3^Tkk__kOOP^3r5BB0))KKKdKdKdddKddKdKKK)K))))0BbBF5FFF333^.^^PPTOOkO_k___k_____k_k__k_k_k_k_______k_O_OkPPPP^P^.3r5FBB)KKddccaacacddK)007b#(STs__@@ZZN[!-,YIGqGLUUUfUfggfUgUULq>", "LGYGYY8,,-!-NNZNZZZZ@@@@A___k_sssssTsTTssskkk__A@@@ZZZNNN!::i18}wHHL>fx&h~nnnBW3F^^Tskk__kk^^.3(5FB0))KKdKddddddKddKdKKKKK))))00BBBF555F333^P^^PPsOkO_k___________k_k__k____k_________kOkOkP^^^33FFWF00)KKdccacaccddK))77MF#3Ts_AA@ZZZ[[-iIYIGLq>UgJgfJfUfgUUULL", "LqGYYYYii-!!NNNZNZZZ@@@AAA__kksksTsTsTsTsskkk__AA@@ZZZNNN::!1i888wH>>ff&*gfx*~nnn`BWF33^Tskk__kO^^335FB0))KKKKddddddddddddKdKKKK))))00)BFBF55F333^^P^PsPkOkk___________k___k__________k___9kkkOTP^^^3r3FBBB))KdccccaaccddK)077((3ETk_A@ZZZ[[-iIYIqLqUUggfffgffgfgUUL", "LLLGGYI8,-!-!N[NZZZZ@@@@AAA__kskssssTssssskkk__AA@@ZZZZNN:N::1iQ}}HL>gfx&h~nnnBBFF3^Tkk__k9kPP.r55FB0)KKKddddddcddddddddKdKKKK))))0B0FFFF3F3r3^^^^PPkOk_k________________k__________k_k_OOkPP^P3^3F55F00)KKdccacacccdK)007M(#ETk_A@@ZZ[[-tIYGLqUUJJffffffgJfgUUU", "ULGGIYYIi,--![NNZNZZZ@@A@AA_k_kkssTsTsTsssskk___A@@@ZZZNNNN:!ii88YHHL>g/**~nn``B5F3S^ssk__kkO^^^F5FB0))KKKKddddcdccdddddddKKKKK))))0B0BFBF5F333^^P^TPOkOk_k__________________k__________kkOkPPP^^r3F5FB0)KKdcccaaaccdKK)77b3(S^s__@@ZZ[[--,IIqLUUUfgffffffffffUU", "UqLGGGI8,ii-!NNZNZZZZ@@@AAA__kkkssssTsssTskskk__AA@@@ZZNNN:N:1i8QYwHL>gf&h~~cn`BB5F^^Tkk___OkP^^3FFB0))KKdddddddcddcddddddddKKKK))))000BbFB(5F33^^^PsPkO_k____________________________O_OkOPsP^P^^3F55BB))KddccacaccdKK)07MM(^TskAA@ZZZ[-,IIGGqUUJfffffffffgfggU", "UULqGIYY8,---[NNZNZZ@Z@@@AA___kkksssssTsssskk___AA@@ZZZZNNN!:!1i8}HwLL>fx&h*nnn`B5F3^^skk__kOP^^3FWFB0))KKKddcdcdcccdccdddddKdKKKK))))000BFFF3F333^^^PsPkO_k____A______________________k_OkkPPP^^^r3F5F00)KKdccaaacccdK)077M#S^sk_A@@Z[[[tYIILqUUgfffffxf/ffgffU", "UULLGGYIIi,-!![NNZZZZZ@@@AA__k_ssksssTssssskkk__AA@@@ZZZNNN:!:ii888HH>>ffx~gfx*~hnnn`BFF^^^skk__kkP^^3FBF0))KKKKddcdccccccccccdcddddddKKK))))0B07FF3F333^^TPsOkkk_____________________________kOkPT^^P3r3FFBB))Kddccaaaccdd))7773#E^k_A@Z@[2[t,IqGJUUfffffx&/xxfffff", "fUUqLGIYIi,---N[NZZZZZ@@@AA___kksssssTssssskkk__AAA@@@ZZNNNN:!:ii88YHH>gffx*~nnnBBF53^^sk____OsP^^35FB0))KdddddcdcccdccccccdcddddddKKKK)))00BBFFFF33^^PPTOkO_k___A_A__A_________________O_kkPkPP^^^3F55F00)KKdccaaacccKK)07MM(^Ts_AA@ZZ[[,t,qGqfJfffxxxx&xx&/fff", "fJUULqGGYY,i-![NNZNZZZ@@@@AA__k_kkssssssssskkk___AA@@ZZZZZNNN!!iiiY}HHL>f/&h~>gxx*~ffx~h~n~n`B553^^sk___kkOP^335FB0))KKdddccccaccaccacacaccccccdddddKK)))00bFB(F33^^TPsOkkk____A_A___A___A____A___9_k9kOsPP^P^3rF3FB0))KdccaaacccdK007FM3STk_A@@Z2[t,IqqUJJfxxxxxhhxhxx&/&", "fffJUULLIYIt---[[NZZZZZ@@@AAA____skkssssssskkkkk__AA@@@ZZZNZNN:!!ii8YYHLLgffx*~>f/&h*~nnn`BF53^TPk____kOP^^r(FB0))KKdddcccacacacaaaacaaacacccccdddKKK))0BbBFF#33^PTPsOk_______A__A___A_A__A______kOkkPkP^^^rFF5FB0)Kddcaaaaacdd))77((3TskAA@@Z2VtIqqJJ&fxxhhhhxhxhxxx&", "xfffJUqGqIYI,---[ZNZZZZZ@@AAAA___kkksksskskskkkk__AA@@@@ZZNZNNN!!!iiY8HGLUgfx~hcggfxh*~nnn`B553^^sk____kOT^^3FFF0))KKddccccacaacaaaaaaaaaaaaacacccdddK)))07BFFF^S^E^ssOk_______A__A___A_A_A_______kOkOPs^P^3335FB0))KdccaaaaccdK)77F((ETk_A@@2ZV,tqqqffxxhhhhhhhhhhhhx", "xx*ffJUqLqG,I,V-[NZZZZZZ@@@AAA___kkkkskskssskk_k__AAA@@@ZZZNZNNN!!!i88YHHLggfx~h~gf/&h~gfxx~hg/&hhn<~nn`B5r3P^kk____OkT^^3FFM0))KKddcccaaaaaa==a======a==a=aaaacccdKK)00bBF5#3^^T^skkkk_______A_A_A___A_____k_kksOs^T^^3(3FFF))KddcaaaaacdK)07M#3^skAA@@2V tqqJJx&hhhLgffx*hcgffx~h<<~nnn`W53^^Pk9____kOTE^#FFb0)K)ddccaaa=a=====;==;=;=;=;=====aaccddKK00bBM3(S^E^sskkkk______A___A_______k_k_sPkTPE^^33FBF0))Kdca=aaacdK)07M(3Esk_AAA V$qo&x*hhv<<<<===v=<=<", "<<Uffxxh~<~c~nnB`5r^^PO_____kOT^33FF70)KKdccaa===;=;;;;=;;;;;;;;=;=;====accdK))77FF(#3ETTsskkkk________________k_kkkPsTPT^S33FFB00KKdca=a=acdK)07F(SEs__AA {$oJ*&h<<=;;=;;;;;;=;=", ";;;;/////x", "/x////e/e//eepeeepppppjlv;=a~n~%rr3P^ssssssssssssssssTsTsssssssskskkkkkk_____A__A_A99{{{$ooJ*~<<;;'v;<=ccK)BFF(####Mb7Ka;XXjjXjX'''v=<<;<=/eg/g/fxfx", "x/x/g/g//e>/eeeeeeeeeeeppplv;=a<`nWrr3^^^TTTTTTTTTTTTTTTTTTTTTTTTTssssssskkkkk_k_k_k9ORRoo%&~<<;''vvv/g///&/x", "x&/x//f//>ee/eepeeeeepepppjlv;=cnnWWrr^^EETTTTTTTTTTTTTTTTTTTTTTTsTsssskskkkkkkkk_kOOO{.oo&~*=='vvvvhvacK)0FM((M#bb)c='XjjXjjvvvh<>ge/g/f&/&&", "xfx&/fxefe/geeeeeeeeeeeeppplvv=acnnW5r33^^EETETTTETETETEETETETTTTTTTTsssssskkkkkkkkOORR.%J%~<<;;'vvhv<>>/g/ff&x&&", "x&x&&//g/gge>e>eeeeeeeeeeeppllv;acnn`W5333^EEEEEETEETEETEEEETETETETTTTsTsssskskskkkPPRorr&~<<=''vlllh</ffx&fx&", "&x&xff//g/e/egeeeeeeeeeeepeppjlv=acn`W5r33^^EEEEEEEEEEEEETEEEETETETTTTTTssssssksskPPP..o%~*~=;vvjllhv4g>/gffx&x&x", "&&x&x&f/g/g>e>ee4eeDeeeeeeeppplv==cdn`W5F33S^EEEEEEEEEEEEEEEEEEEEEETETTTTTssssskssPP..ro%`~<=;vlllllheg/g/&fx&&&", "x~&&xxf/g/>ege>e4eeeeDeeeeeeppplv=acdnBW53333EEEEEEEEEEEEEEEEEEEETEETTTTTsTsTssssPP^.rr%*~<=;vjllplh<~dK)77MMbbb)c;XXjjjjvlhl/h/hhh*~hnhnchn>>ggfff*&*x~", "&&&x&&ff/g/gge>e4eeDeeeeeeeeeppllv=adn`B55F3S3SESEEEEEEEESESEEEEEEEETEETTTTTsTsTPTPP.o%%`~<;;vvlplph<4>/gffx&x&&&&", "~&*&x&ff/g/>ege>e4eeeDeDeeeeepppll=acdn`WFF3(33SSESSSSESSEEESESEEEEEETETTTTTTTTTT^^^^r%`*e>/gff&*&*~&", "&***&x*ffgg/g>e>e4eDeeDeDeeeeeppplv4>gggfff&*&&&&", "~&&&&&fff/gge>>e4e4eeDeDeeDeeeeppllv=cdK`BF5F^(^SSSSSSESSSSESSSESESEEEEEETETTTTT^^^rr%`~<=;vjlpplp/h>fff*f&*~&~", "&*&*&*xfff>/gg>e>4eDeDeeDeDeeeeeppp>>gff&&&*&&*&", "&~&&*&&fff/>ge>>e>4e4eDDeeDeDeeeeppll=acK`BB5F#F3#3SSSSSSSSSSSSSSSSESEEEEEETEE^^^3rrW~nc=;vlppppp/x4gggff&&*&&~&~", "&&~&*&&xfg/gg>e>>e44eDeeDeDeDeeeeepplv4>>ggff&f&*&&~&", "~&&*&*&f&ffgg/>>44>44eDDeDeDeeDeeepppl>>gfg&&&*&*`&&", "&~*&&&&&fffgg>>e>>e4eDeDeDDeDDeeeeeppll4>>gffJ&&*&&&&~", "&&&*&*&f&fffg>g>e>44444eDDeDeDeDeeeeppll>>gf&f&&*&~&~&", "&`&*&*J&&ffggge>>>4>4eDDeDeDDDDeDeeeepplv>>gJfJ&J*&%&*&&", "&&*&*&*Jf&gfgg>>>4>44444DeDDDeDeDeeeeeppl<=cdK)`7BFMF((3(#########S#S#3#3#3#rF55`ndc=vvpppeeeep/h>ggf&&&&*&*&~&", "&~&%&*&&&fffggg>>e>4>44eDDDeDDDDeDDeeeppplhacdK)0B7F(5M#((3((#(#(###(#(^(3#FF5F``ncavvlppeeepe//*nK)0700Kc;Xjjjvl///ggggggfJgJJfJ&J&J&J&J&&J&&J&&f&ff&fxff/f//////lllvjXjjjjXXX;=acd))07bbbMMbMbMbMbMMbbb7))dc=;XXjjj'X;>ggJJf&&&*&&~&&", "&*&*&J*&Jffggg>>>>4>44444DeDDDeDDeDeeeepppl>gggJgJJfgJffJfJfJJJJf&J&J&f&ffxffg/fg/f////pllljjjjjjjXX';=acdK)007bbbMbMMMbMbbb00)Kdc='XXjjjX'v;>UgJJ&&J*&&*&&&", "&&&*&J*&f&gfgg>g>4>>4>w44DDeDDDDDDDeDeeeeepllgg>UgUfUgfUgJUJgJfgJff&JJf&fJ&f&fffffg//g/f///l/llvjXjjjjjjX';=ccKK)00777bbbbbbbbb70)Kdca;'XXjXjXvv<>UJf&f&&&*&&*&&", "*&*&&&&J&fJJgg>>>>>H>44444DDDDDeDDDDDDeeeepphl/*~K))00)c='XjXjl/xgUg>>>U>UgUgUUgU>U>U>UgfJgJfJfJJfJfJfgffffgfg/g/////llljjjjjjjX'X;;acdK))00777bbbbbbb00)KKca='XXjjXXXv<<<~dK)))nheeDDDuu+DmywwHH>>UJg&J&*J&*&&&*", "&*f&&J*&JgffgUg>>>4>4w4w444DDeDuDeDeDeDeeeeppphLL>UgUUU>UgU>Ug>UggU>UgJUfJJfJfJfgfffgfgfg/g/f///l/lljjjjjjjjjX';=acddK))00777777000))Kcc=''XjjjjXvvv<~cK)))n*/eeDuuuDumywyw>>LUUfJf&f&&*&&*&&", "*&&&&&J&f&Jgfg>>>>>>w>4w4wD4DDDDDuDDDDDDeeeepplh<~cdK))000bBb7F7FB7FbF0B0))dcc=vlppeeeeeeeeefxnn))))Ka;XjjjvlxfgLU>LULLg>g>U>U>>Lg>>U>gUU>UJgggJfgfJfJgfgfgggfg/g////lllvjjjjjjX'X';=acdKK))00)00000)))dcc=;'XXjjjXvvvh<>UfJ&f&f&&&&&*&", "&&&J*f&JJJfJJ>gg>>4>4H4w4y4DDDDDDDDDDDeDDeeeeppplL>>LLL>L>>>>>>>>>>U>>UgUUgJUJJUgggggggfgg/g/g///l/lljjXjjjjjj'';=aaddKK)))))0)))KKddca;'XXjjjXXjvhh<~nKK)n~/eeDuuuuD+yywwH4ULUJJfff&&&&x&*f&", "&f*&J&f&ffggUgg>>>H>>H4w444y4DDDDDDDDDueDDeeeepphlhf&~n)))Kc='Xjjvl/fJULLLLL>LL>>L>>>H>>H>>>>>>LgU>UgUUgggJgUgJgggggg>gg/g////llljjjjjjjjXX''=aacddKKK)))K)KKddca;''jXjjjjvvl>>>>4H4L4wwyDwDDDDDDDDDDDDeDeeeeppph<<~cddKK)))))))))KKKdcc<LL>L>H>>w>4>H>H>>>>U>UU>UgUUgUgUgUgggggggg/g////llljjjjjjjjXj'';=aacdddKKdKKKddcca;;XXXjjjXjjvlhhL>JUgJf&fff&fx*f*", "&f&fJ&fJfJJgUUg>>L>>H4Hw444y4yDDDDuDuDDDDDDDeeeeppplh<HLH>H>H>>w>4>w>H4>4>L>L>LgU>UUgUUUgUg>Ug>gggggg/g//phllvjjjjjjjXXX';=aaacddddddccaa=;;XXXjjjjjlvlhhh~nnK`nf/eDDuuuu+6mz}wHHHLUUfJf&fff&x&&f&f", "f&f&&fJfJfUfUU>L>>H>4H>4wwwDy4mDDDDDDDuDDDDeDeeeeppphl<<HLHH4H4H4H4H4>w>G>4>L>>UUUgUUU>UU>UgU>ggg>gg/gf///pllljjjjjjjXXXX';;aaaaccccccaa==''XXjjjjXvjlhhhhhnnnn~xeDDDuuu+mmzz}wHH>LUUJfgffffxff&fxf", "fffJfJfJgJgUgU>>L>H>LHwww4ww4y4+DDDuDuDDDDDDDDDeeeeppphhgx~`KKKd='XXXjhxJfqqqGGGLH>HHL4>w>w>H4H4>H4H4H>H>L>L>LLU>UUUgUU>U>g>g>ggg>/f////lljjXjjjjjXXX'';;==aaaaa=a==;'XXXjjjjjjlllh/hh~nn`n&/eDDuuuu+m6zw}wHLLUUUJfJf&&ff*fxfff", "f&f&JfJfJUJUUU>L>L>H4>wwww4y4yDyDDDDDuDuDDDDDeDeeeeeppp/phhh<<<<wHH4w4w4w>w4w>4LH>H>>L>>L>LUL>ULU>Ug>g>U>ggggg/g//lllvjjjjjjjjjXXX'';;;======;;''XXjjjjjXjllh//h~~~nn*fe4Duuuu++6zz}8wHGLLUgJfffffffff&f*f", "ff&gfJfJUfUUUL>L>>HLHH4H4wwwywyDy+DDDuDDuDuDDDeDDeeeeepplp/lff~nKnda;'XXXv/&&JqIGIGHGHHHHwH4www4w4w44w4HH4>w>HH>HL>L>L>LU>>L>L>LLg>U>>ggg/////llljXjjjjjjXX'X''';;;;;;;''XXXXjjjjjlvll//xx*n~n~x>eeDuuuu+mQzQ}YHGLLUUUfgJfff&fxfffff", "fJfJfJgUJUUUU>>LLH>>wHHwww4ywDywyD+DDDuDuDDuDDDDeDeeeeeepppppplp/lpppppeeeeeDDeDDDDee4>>f&*nndc<'XXXvlhJJqqqIHYHHHHH4Hwww4wwy4www4w4HHH4L4LH>>H>LLL>LL>L>LU>>LULgUggggf//l/lljjjjjjjjjjXXXX'X'''''XXXXjjjjjjjvjll//hh~h~n*~fe4Duuuu]m66Q}}}HHGLUUJJffffxffffxfff", "g&gfJfJgUUUU>LL>L>H>w>w>wwwwwwyyDmD+DuDuDuuDDuDDDeDDeeeepeepppppppppeeeeeeeDeDDDDeD444>gf~nnnd<;'XX'v*&Jq$qIGHHHHH>Hww4ww4y44y4y4www>w4H>HH>HL>HL>LL>LL>LL>LLLU>g>Uggfg/x/pllljjXjjjjjjjjXXXX'XXXXXXXXjjjjjjjvll///xxf~*`~Jgeeuuuuu+66QQ8YYHG>qUUUJfJffff/&fffff", "fJJJfUUUUUUULL>LHLHHHHH4wwwy4yyyyymD+DDuDDuDuDuDDDDeDeeeeeeeeeeeeeeeeeeeeDDDDDDDDDeD4>/f&~nndH>H>HLH>LH>LLL>LL>L>LLULU>ggff////llljjjjjjjjjXXjXXXXXXXXjjjjjjjjjjll///xxx~*~*&fe4Duuuu]+6QQQ}}HHGq>UUJfgffffffff&fff", "JffgJUJUUULU>LL>H>HL4HwHwwwwywwyDymmDmuDDuuDuDDuDDDDDeDDeeeeeeeepeeeeeDeDDDDDDDDDDD>4>>&*~~n~=vXXXvh&&oq$IIYGYwHwwwwwwywy4DywDwyw4w4www>HHwHHH>H>HH>HLLHLLLLG>q>LU>UUggfg/h/llljvXjjjjjjjjjjXjXXXjXjjjjjjjjlll/l///x&&***fg4euuuuu]6CQQQ8YYGGLqUUfJfffff&ffffg&f", "JgJUUUUUUUL>GLGH>HHHHHHwww4wwwywyyDmm++DuDuDuuDuDDDDDDDeDeeeeeeeeeeeDeDDDeDDDDDDeD44>/g&~*nw>w>H>HL>GHLH>LGLLLLL>GLLLUUUggf/f//llvljjXjjjjjjjjjjjjjjjjjjjjjjjvlp//xxffx&~&&fe4Duuuu]6661188YYHGLLUUJgJffffffffffJg", "gfUJUUUULLLLLL>GHH>HHHHHwwHywywyyyyymmD+DuDuDuuDuuuDDDDDDDDDDDeDeDDDeDDDDuDDDDDDD44>>g&&~nnw4wHHHHHGHHLHLGLGG>GHLLGLLULLL>UUgfg/h//llljjjXjjjjjjjjjjjjjjjjjjjjjlll///g/ff&&&*JgeDDuuuu]6Q118iYHYGqLJqfJgffJfffffJfgfJ", "JUUUUULLULLLGLHLHLwHHHwwwww}wwywyyyyDm++++uDuuDuDuDDuDDDDDeDeDDDDeDDDDDDDDDuDDDD44>4gf&~*n<<w>HHH>HHGHHGHGLGGLGGLGLLULqgUUfgf////llvljjjjjjjjjjjjjjjjjjjXjvlll///f/gff*&&Jge4Duuuuu66Q11i88YGGLqUUUJfJgfffffffJfJf", "UUUUULULLLLHLHGHHHHHHwHwHwww}w}ywyyymyy+D+DuDuuuuuDuuDDDDDDDDDDDDDDDDDDDuDuDDDDDw4H>gf**~~4euuuuu]6C11ii8YYIGLLqJUfJfJffJgfgfJfUJ", "UUJUULqLLGGGGGHHHHHHwHwwwww}wyw}yyzymmy+m+++uDDuuuuuDuuDuDDDDDDDDDDDuDuDDDuDDDDw44>>f&&~*<4Duuuuu66C1iiiY8YHqGqUUJUJfgfJfJfJJfUJU", "UUGUqLLLGGLGGHGHHHHwGwYwYwY}w}}wzwzyyymy+D++DuuuDuDuuDuDuDuuDuDuDuDuDuDuDuDDD4y4wL>gJ**~eDuuuu]]611:!i,iIYGqLgqJUfJJfJffJfJUgJUU", "qULGLLqGGGGHHHHHYHwY8wYwY}w}}w}y}yzyzmmmm6++++DuuuuuuuuuuuDuuDuDuDuuDuuDuDDD+y4w4>>J&&~*hqUUfJfgxx//hlllvvjvjjjvjjljllll///fggggggfJJJf>44DDuuuu]C1!!ii,8IYILqLqUJJfJJfJJfJfJUUJU", "ULqqLGGGGHGHYHHYH8YHwY}Yw8}w}}}}z}zzzyQmy+y++++uDuDuDuuDuuuuDuuuuuDuuDuDDuDmDw4w>>gJ&x*hhvvX'vh*%o.${tt,Y88}}}yyyyyymmymyyyyyywyw}ww}wYw8HYH8YYGYHHYGYHYHIHIGGGGGIGqGLLqUqJUJgff/h//hllllvllvljljvllll////g/ggggggfgf>>eDuuuuu]611!!!!iYYYGqLqJJUJgJfJJfJUJUJUUq", "LqLLGGGGHYHYGYYH8H8Y8H8w8}Y}}}}}}yzzzzmz6mym+++++uuuuuuuuuDuuuDuDuuuDuDuDmDmwywH>>Jf*~hhvvv';<~~oro{Vt-,iYi}}zzyyymm+ymymyyyyywywyw8wY}YwY}HYHH8YGYYHYYLYHGHIHIIGGGqGqqGqLqJUUJff//x//lhlllllllllll//////ggg>>gUgJJUg>44DDuuuu6Q1!!!!,,iGIGqGqJLJJJUJfUJUfJUqqUU", "GLGGGGYYGYYHYY}8Y}YwY}}Y}}}}}}}z}z}zzzzzzmmmmm++++DuDuuDuuuuDuuuuuuDuDuD+myy4w>w>>J&&&hhlv''<**%o.{{{,,,888}}zzzmymyy+ymmyyyywyw}w}w}YwwYHYY}YYYHYGYYGIYYIYYGYGGGIGIqIGqLqUqqJgJfff/xx//l/hllhlhl////x/ffggg>g>U>UU>>>4Duuuuu]6Q!!!!-,iIIIqqqLqJJJJJUJJJJqUqUUqL", "qGGIHYGYYGYY}YHY8H8Y8}}Y}8Y8}}}}8z}zzz6z6z6mmmm+++++uuDuuuuuuuDuuDuuDu+DmDywyw4L>fJx&hhlvv';<~~%.o{{Vt-i,8Qzzzyzmmymyymymyyyy}y}}}}}}H8Y}H8YHYYYYYYIYYYGYGIGIYqYIGGILIqqqqqUJqJJJJffxxxx////h/////h/xfgggUU>LU>UUgUg>44Duuuuu+Ci!![!--,YYGIqqUqJqJqfqUJUJUqLqLGL", "GIGYGIYYYY}YY88Y88888Y8888z8}Q8Q}8zQzQzzzz6z6m6mm++++++uuDuDuuuuuDuD++mmyyyw4wHLUJ&&&hhhv';<<`%o.R{ Vti,8i8zzzzmmymmmmymyyyzyz}}}}}Y}8Y}Y8YYYYYYYYGYGYGYYGYYYGYIGGIGIGqIqqqqqJLqJfJJfffxxxx/h//x/xf/gfgUU>U>LgLU>g>>44DDuuuu]6Q!![N--,iIIIqqqqqJqJJUJJqJqqUqLqqG", "GYYGYYHYY8Y88Yi88i88Q8Q8888}8i}8Qziz8zQQmz6zm6mmmmm++++++uu+uDuD+u+++y+ymywywH>>Uff&hhlvv;;<~*rr.{{tV-,iQ8Qzzzz6y6mmmmymmzyz}}}}}}}Y}YYY8YYY8IYIY,YIIYIYIYIGIYGYIYGIGqIqGqIqqqqJqJJfJfffff/f/f/&/ffffgUUULLUL>>LU>L>44Duuuuu]1i--[-[--IYIGIqqqUqJqJqJqJqLJqLqGIG", "qYYIYY,88Y8,88Yi8888i88i8Qi8Q88}Q8Q8QQQzQQzQ6z66+6mm+++++++++++++++y+myyywww>HLUfJ&*/hhv;;<~`%rr.{9VV-ii88QzQzm6mzmm6y6zyzzzzz}}}88Y8Y88Y,8I8I8IYIYIY,IYIIYIYItGIIGIIIIGIqqqqqqqJqJqJJJJfff&ffffgfJUUUULLLLLLL>>L>>H4Duuuuu]68i![[[--i,IIIqqLqJqJqqJqUqLqqqqGqGI", "YII8Y,8,,-iii,1i8iiii8i8Q88Q8i8Qi8QQQzQQQQ6zQmz666m6mm+m+++++++++mmmyymyywywH>LUgffxhllv;=<~`%r.P{9VV,-iiQQQz6zz6mz6y6yzzzz}}}8888i88,8,IiI,,,I,I,I,IIYtIYIIIIG,IYIIIGIqIqIqqqqqqqJJqJJJJJfJfJfJJJUJqUqLqLLLLLL>L>44DDuuuuu+zi-[[[[--t,IIIGIqqqqJqJqqJqqLqGqIGIH", "I,Yi,i,ii1,i,iiiiiiiiii8ii8i88iQ8Qi8Q88QQQQQQQQ6zm66m6m6mmmm+mmmmmmmmmzyw}ww>HUUJfxxhl<;;<~~%%..R9 V--,iQ8QzQy6m6z6zmz6zzzzz8Q8i888Y,i,Y,,I,,I,,I,I,YIIYI,IIY,IIIIIIIIIIqIIG$IqqqqqqqJJqJJqJJqJqJUJqqLqLLLLG>H>LH>w4Duuuuu]68i-[[[[[--,,IIqqqqqqqqqUqqqqqIqIGIYI", ",8,,i,i,i,iiiiiiiiiiiiiiiiiiiQi8i8Q81QQ8QQQQ6QCQC666666mm6+6m6m6m6m6yzyz}wwHHLUUffx/hl<'=Ufffxhhv;;a~~W%3..O92V--iii1QQzQCm6z6zz6zQQzQQ8Q8,i,i,,,,t,t,ttttttttttt,tIt,I,I,IIIYIIIIIIIIIII$qIqIoqqoqqqqqqUqqqqqLqGqGGGLHLH>H>wDDDuuuu]mQ,-V22[[V-t,,III$qqqoqqqqqqIqqIYIYIY,", ",-,--!-!!-!!-!!!!!i!!!i!ii1iiiiiii8i1Qi181Q1Q1QQQQQ6Q6C6z66m66z66mzzz}}w8wGLGUUJff/hlv==w4w4D+uuuuu]z8iV2[22[V[,tIII$qqIqqqqqqIqIGIIII,Ii,", "---!-!-!-!!!!!!!!!!!!!!i:!i!i1i1ii1iiiQi11i1Q1Q1Q1CQQQQ6Q6QQ6Qz6zQzQzz}}wHHGLUJfxxxhv<;a~n`W33^PO92V--!ii11QQQQz6QQQQQQQQQiiii,--V-tVtV{V$t{${{t{{t{t{t$tttttttIttt,ItItIIIIIIIIqIIqI$I$q$qqqqqIqqIqGIGIHGHLwHHH4yDuuuuu]m},-V2222[VVV,ttIIII$q$Iq$qIqIII,IY,,-,", "-----N-![![!!!!!!!!!!:!!!!:i!!i!iiii1ii1iiQi111Q11Q16QQQQQQ6QQQQQQzQ}}Y}YHGLLUgffx/hla= c #3A2C8C", ", c #12D6EE", "' c #22A6D6", ") c #2A76B6", "! c #2AEAFA", "~ c #16CEEA", "{ c #228BC6", "] c #0EF2FE", "^ c #47BEE8", "/ c #3A2286", "( c #2EAEDA", "_ c #4A76C6", ": c #1EEAFE", "< c #3B95D5", "[ c #16DAF2", "} c #1EFEFE", "| c #36F8FE", "1 c #3EBBE5", "2 c #32A2D2", "3 c #3A1E82", "4 c #2EEEFA", "5 c #36D6FE", "6 c #2A7EBE", "7 c #3BA8DE", "8 c #2F60AA", "9 c #23C2EB", "0 c #268AC6", "a c #419EDD", "b c #0AFAFE", "c c #387EC1", "d c #56B2F2", "e c #3A1A82", "f c #16FEFE", "g c #50FEFE", "h c #32BAE6", "i c #2ECCF3", "j c #3E127E", "k c #43D5F8", "l c #4896D6", "m c #2BFDFE", "n c #436AB9", "o c #4AA4E4", "p c #4060B0", "q c #22BEE6", "r c #4656AE", "s c #46F4FE", "t c #318CCC", "u c #2883C0", "v c #38167E", "w c #393E97", "x c #404AA0", "y c #50ABEC", "z c #4381C6", "jjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjj", "..........................v/>>>/.....v.........................v", "jjjjjjjjjjjjjjjjjjjjjjj>8u--{)%=.j..e>w%w>3.jjjjjjjjjjjjjjjjj.jj", "..................../%-&###-{)%=...v/=%$)6)%>e...............j..", "jvvvvvvvvvvvvvvvvv/6'#&####'{)$=.j..vew%66{6{+>3vvvvvvvvvvvvv.jj", ".jjjjjjjjjjjjjj.>8-#&######&-6%=.v....v/%+)u)uu83jjjjjjjjjjjj.v.", "..jjj..jjj..jj.=#######&##&&-{8=...v/>>/./=uu{u6u%>...j..jj.j.jj", "j....jj...j..v)&&&##########-{$w...e>w$8%/v=$)uuuu+3...jj..j.j..", "jjjj..jjj...>)##########&##-)%vv...3>%8)6)$.3=)666u)%3...j.j.jjv", "v...jj.....%-######&##&#-8=v3/%=..ve=%8)u6u$=e=8{u6{)8vj..j.j..j", ".jj..jjj..=&###&######&)vv%,@~{8.../=%+666uu68v/))uuuu%3j.j.jj.j", "...j.....w{&#########-//)~]]],{8..v/w%)6u{u)66=3%)6u666$.j.j..j.", "jj..jj..=-##&####&#'8>8#bbbbb@{+..v/%%6)6){{6u)%v=8{6u)u>v.jj.jj", "..jj.../&&########'/38]bbbbb]@-8vv.=%8){u{)u6u{)>e=)u){6)=...j..", "j..j...$###&#&##&'8%#]bbb]bbb]'+..v>%8666{6{)6uu+=386u666+w..jjj", ".jj...%-########-==,]]b]]bb]]]-).vv=$8uuu6uu{u{6{8==8)uuu68vj...", "..j..v'&#######'>={]bbbbbbbbb]&).vv=8){{{{{{u6uu{)8v%+u6u)6/v.jj", "j...v%&#######&)/'@bbbbbbbbbbb#6.v3%860{u0u{{{{{u{)//$){uu{$>...", "..../+&#######uw-@bbfbffbbfbbb#{..v%)){tt8u66uu{$v.", "..v$'####9#~#+89fff}}fffbbbbb]]'.v/+)uuutu<<<<<<<-t{)w%)u6u)u8ej", "..v{&#####99-$#]bf}fffffbbbbbbb&vv/66uuuttt<<<<<", "..8&####9i9'w+b}}}}}}fbfbb]bb]],..vvv3.v$c0<8tooooaa.&]@]@@::@i/=naoo7oo2z/x<<0uuuu$", "v%{#&##99ii=%2mmmmm}}}f93=-]bbb~v&@@@@@]:]!z=xlodooooc3x8}fb]]bbbv&@@@@::!!4;i)xlyyyoar>c<6##99iiik58%;mmmm|4<%h}}}fbfbb.#@::::!!444t=j/_lolw/z<<<wo2<raa<-t0u)6=", ".v$&#q99ii55k2=7;hev/3c;|mmmm(.ph4|4|!c>>ks*lwe=/xzya&##q9iiii;k<===/e/wcz.3ni4mm2j$(m4;arjp1g4gdrjj3looo<ejv/=///r^**ssg1xj/pyyoa<_ddyoaae.jj", "......$-qq99iiik5k;k^_/cgggggggggggggggss^n>_ldyyoa<<-tu6u8e....", ".......8&##99iki5kkk*kp/r1*gggggggggggg*r//dddyyaoaattt0u+=..vvj", "j...v../'##9i9ii;i;ki*k^=j=d*gggggggs*n=/_yddyoooa<rzoddyyyoalaaxpzzaa<<.....j..jj.jj", ".j....j.jj.j..jj=8-qqq99iiih12c833e3/xpnt)'99999i9h(cpeee3/=r8cu0uu)=/.......j..jj.jjj", "j....j.j..j..jjjjjjv>%-&q99q#(0n//ej3>w$)66w=e...j...jj.jj..j...", "jjjj.j.jj.jj...j..j...e>8u-#&#t+//3v3/==w>/.......v...j..jj.jjjj", "....j.j..j..jj...j.j....vje/=w%w>/ej.v.v.v...j.....jjj.jj..j...."}; xscreensaver-5.36/hacks/images/scales.xpm000644 000767 000024 00000043206 11046627777 020522 0ustar00jwzstaff000000 000000 /* XPM */ static char *scales[] = { /* width height ncolors chars_per_pixel */ "128 128 69 1", /* colors */ " c #B1B1B1", ". c #AFAFAF", "X c #ADADAD", "o c #ABABAB", "O c #A9A9A9", "+ c #A7A7A7", "@ c #ECECEC", "# c #EAEAEA", "$ c #E8E8E8", "% c #E6E6E6", "& c #E4E4E4", "* c #E2E2E2", "= c #E0E0E0", "- c #DEDEDE", "; c #DCDCDC", ": c #DADADA", "> c #D8D8D8", ", c #D6D6D6", "< c #D4D4D4", "1 c #D2D2D2", "2 c #D0D0D0", "3 c #CECECE", "4 c #CCCCCC", "5 c #CACACA", "6 c #C8C8C8", "7 c #C6C6C6", "8 c #C4C4C4", "9 c #C2C2C2", "0 c #C0C0C0", "q c #BEBEBE", "w c #BCBCBC", "e c #BABABA", "r c #B8B8B8", "t c #B6B6B6", "y c #B4B4B4", "u c #B2B2B2", "i c #B0B0B0", "p c #AEAEAE", "a c #ACACAC", "s c #AAAAAA", "d c #EBEBEB", "f c #E9E9E9", "g c #E7E7E7", "h c #E5E5E5", "j c #E3E3E3", "k c #E1E1E1", "l c #DFDFDF", "z c #DDDDDD", "x c #DBDBDB", "c c #D9D9D9", "v c #D7D7D7", "b c #D5D5D5", "n c #D3D3D3", "m c #D1D1D1", "M c #CFCFCF", "N c #CDCDCD", "B c #CBCBCB", "V c #C9C9C9", "C c #C7C7C7", "Z c #C5C5C5", "A c #C3C3C3", "S c #C1C1C1", "D c #BFBFBF", "F c #BDBDBD", "G c #BBBBBB", "H c #B9B9B9", "J c #B7B7B7", "K c #B5B5B5", "L c #B3B3B3", /* pixels */ "VB32nbc:<6Fy uLtSN1cl&$#fzBDFD98765V76NM22m<,b5r.. LKF3lgkMFKyJewFZvg@*3euuteFqDDGLp.LtHwqDSSqeHew", "NMmb>><4AGJyKJreAM,cx;-=*kz:>vv>cccbNB4N3M21<>x:1BBmv;xn6S987654M34M1xzx2Srtrewq0S72:l=k**kxn3B55VVVV79C2CJLJF9AA8765BNM1bbnn,c;-=kl<8HrGFq0A64BZqwF098CVB2b1CFeGqS876V8GJrGqS98CVCZ5321n", ";zl==:4DeGq0AZC6Bm>;xc,x;-=j&-2GaOXuKteA42m1<,cxcm54=&;3Z8ZCVBN21MC8754N32nbv<6euuKrwq0S7mx=kj&*cVJXpyFCMnM5VBNM21:;:3FKytHGFwHw9Z7C5432Nq.XitG0ADHtJHw098C652>zlkkx4w . tGD9SF06Mn,>cx;>VHKqVmvx-=zn8LspeCn:;-kj&=cv>c:x;:nCGyutD63", "yuuLytJGZm:z-=k*x4qrHwDS889A64NNM1<1,-kjjl,VFJtrGFFe", " uKrGFDS7m;=**k-4FKKJeFDSDqACV5BN2<*h=v4Sq6>j$h:40eeGqS9Ft", "rewDS8C6BMBDGFDS876C753mm14G.p LLuJq98CV5BCG iyH0V<;xM0tKJGqSZV58GttrG0AZ52c:-*h&*l>3ADS8ZCV4M3431,>:;llc6r LKrHHF8V5432MVwKtew0ZB3BAwGFDS87V57DGGq09Z6BN48eup. uJqCNNC99876BN35Z", "CV5BNMnbnCHu ytJJe8Mb>:x;;x>c-jkc2ZwrwAVB4M1b<3V41>-k&*vZHreFDSS85Mm1<,>MDKKJGFD9ZAetwZ421:z=k>CGHGDSAZ7Vmxzcn4ZDerHHtyyKtrw8N,x-=z2q iKwA5M35ZZCV5NM2m,zkj&*;mBV5N32<x:<332nbv:z-xMSwFDSA7V5ZHiLFVmvxl**xm", "DZN<:lj*>V00A7CVB3Mm13C0GrrrHrLLKrGFDSZNv=%hc6r LtGq98AZ6B32mnb>c;j%%&=>m22mnbv>n47CMbcxzx,Bqy HCbl&jl,VwtGC<-h$&:5GrD7B321<1CeLyrwAB,l=b9L", " yrFA6NN4N3M22nb>x;<8eJHwqSA77998C6543Mn>lkcVDwqS87C5VAwF8Bm,xljj;39wrKyeCnz*kcN0JyyH93xjlnZHu tqV,=kv6Hi e841,c:x-zb7qqSAZC5N3B54N32mn,>:vMC99A8765N2M8tLJFA5m>z;MGpaX. tDBv-xM9HrHGq9Vml=,VZC6542nx;bZerewD97V58HLLJewDS87C790098C65NM4AwGwDSA7VBNV0HewD98ZVN<;-v34N321b>:bVS0S", "NM21<>:n9KLKHwDS8CCZCMbv>:;-k*-:;khggk,Ce .iJA2cz-=*=vCDDS9875N36DGwq0A7654BC88CV5NMmnb1C9987CV421n38DS8ZC5B3mbc:vbbb,vc;ll>4C6V", "b,vcx-znAHHGqSA76BNVZVm>zk&hh=<66m:k=,7eyLKJeS4:&$$g=<6Z7CV54Mnb2C88ZCVB32nn3BBN2mnb>::<686B3M21b>,NSq8V43Mm<>:cbVweDAZC6B3m1Vwr04v=%%-m0Lur9VVAetJHGq0A5vh#glnC86432mnbc:nBVB4N3mn,cc:;xn8JJ0B1bvcxz;n6Z3:*%f$hx4wLH73", ";k%gjcVriK0CBN3m<,1ZyXuG71c,VGioX tHrHeGq098CVN<;;nCeLHZ3<,>:;;>NA73nb,>:z-:M6B&fhc6H.a wA", "n;%hc6rXouF6M<,>:>3q p tw9AFypX.LtHrteD98CV5N211N9J XaLq54FyeCnxl**=xM0JG6b=ggz3qyi r92x**x4FyLKHS4vkh=1AJ .iyrw", "51c<7ri.iywZ2c-k=vCHyyJeFDGL.iLJewDDwD7VBNMmn,>nZyXXp KGA3:**cBwupuq4cjg&x3DLpueCb-x3DtLKJG06nx:30rJeFD96mxznAtiiLteD90GKLLtHGFD", "5BV0JLLtHGq8Nc*%k19eHwqSAADrtrGq09Z7ZCNmn:zzbAyiLtrGq9V1cb6GLi KeA2;k:BFy yHDC5ZFJJHwqS8C4MB9GGq98ZCBMmNStuyJew09DHKKJeFDSAZ", "237wJreF098CN,kh;40qDS87V57SDSA87V4NN3MC88765N223VC6554M1bbbbbbNZ8C654Mm:,34M21<,>x-;nC9876VBM1<<24N3Mm1<,c", "znZDA5M1n,>:>M0u.eC2<,>:;zz:>>c:xz--:3DJtJewqS9SS632mnbvx;:mV7CVBN3mn<3AD9Z65N3m:zlzb5VMxzl;nZJpXt9Mc-=*&&*-;lk*kl;,NDKyJGq098C66N<>cxzl**znNN32mnb>c,BFG9VN21b>cnZJtqV1:l*&jcCHH83>-*%gk2Fut05mb>;-lx276mc-*h%h", "GLXpKDB,-j*c5GyuyrD5v*g$%k>21:=k;<4Awyurq98C653M3mv-k&%g%kvBVM:;-xmSyLG7M,c;-:3Fu J05blhgl4rXptD5nxk=<0 X HAN,zj&ln0Lt9M:j$%k", " ..utGAM:kzM0JJHwq071-hj:MSrGZ3MV0etKyKG865432n<24M>kgfg-1AHwCn;=*jk>Cr tDB,-*k,ZrLKHFA4>=-2Fia.uJF8N1NSyi KHq72:kkb9uopKDBv;vN", "uLtHwq9Vm,2Zwew0A87V3<<4SJ piKrHJKKJeGGD6321<,vn5qwZ1;zb6Gupuw5>*$gzNFKytHFZ2xkz30HHwDS8V21BFLiutJeF9C7qtytHwqS8B1vm8t..uteS7C0H", "reqSAZC5NB70DS87654M2B0K.pi LyuuyrGF099ZN<>x;x,4DKLr08SGuppiLr9M;h*nAeHGFDSZBn>1C0D09ZCV4MB0tyJeFqSAC57FHeF098CV4M49rLLtHwqS9FJK", "0S87VBN22B78765BN2nbz=lc30JyKHGrui. yJeF9V2bmC0qDSAZ6532M5Z87C654M11BqHGqS87C532NZ998C654311BqrrGFDS8CCSww", "6V543m<,b3CVN2m1<,:x>BeytHwqS90D9Z65BN21vM8D098ZC5NN57C", "mm1nb>:::xzk*;N0wFDS876CCVNM2mn,vnBC8SFGewqS88SGewqS8C54B9KpuDV3221b>:b5S8Bm<,>:x>3qLrABMmnb>x:,331:z-;<5C6V543mn<13M", ">c:xzl-v5H r7n;kj&hj:48A8765NMMMmb,>cx;cNqKLytG08765B6A987CVB3M5quaiw61,vc;z:3FLrA3v;l=z1AypLDB<>x;zzv49ZM>;l=*j*:MVB32mnbvccnN4", ",:ljh*:NF pLF5vkhj-,60964NMmnb,,>;z-=*kv7J uKrqZ543m1245BNM21xz-;vBDw", "C2x&%-M0K LJGA4b,2CqyuG6mbv>xz-;c:;-*j-20rJewqA5M1b>:cb<c>2AeHGwD8M;hfhc6H yrD61cb6wttHGq83:kl<7eL yw6v&%l1ZriuF5,-*j=>BFui", "w8Mc:MSHtJGF0AZZDrL p.J8m:lkjh*cN6V3nbM7qwqSA8CNljhhkc,x*%$h>BAA7C543mb:vNSeeF098C55C9DDS8CV5NMMV0HtJGF09ZCZFK iuyJG0V<:xzkjl>n22m1n,c::xzlx3wiaXyDVM1<,c;;>n<,>cxzl=zx;-kk:M66VBN2mM7eu KeqS8ZC5N3nx=kkkklv6H .iutHwDqD7M,x-kjk,Zt uyJq61c;-ll:mVN,zkjj*zbV973mn<,c;zx15V5B432nb>v2BB4N3M2", "V8DFwqZ2;jh%g&;nM221nb>vbnm49t uyJHwD980Jtw7Mvz=:4FttHGF06nzjj=>4DJFB>k&lvN9HrSN,:zl=kl>464mn<,>xzlz,1<<:x:n6FHewFFD74Mmnb>xxb59DFFweyiLHwqS87V5AyapKFZN24AwGq0987Bn-*lMNb", "A8ZC5NMn:lz,NAGF6n;k*;28qqS98874nvcx;-=-mqLiuytJKyHDA8C5B3NZtp.LJw00qqD98765N2b>,N0JuuyrwD0FryLytrwAN:**>NSJiuwBc*%ghlbCwFV,z-v2", "65BN2n,v*&:NZA8CV4N31czlk*hh-4r uyJewwwD75B4Mmn2ZryKHGq0DFSC5BN3m1N", "M2mn,c;x3e.Xpi yHS3cz,NVV5NMnbbvx-l=k*=bZHJrGqS98874mnnb>c:xc30HrHwDS87ZDHHwDSAZC5N4ZGyuytrGF9B<>1Zeu.iLJF7NMM", ">vc;-=*z5KX.LJHGqSCNmm222mn,cxxv122MMM49GGqSAZCVB43ncxxzllvV9987654NN2,:x:xx:>1CFwqS87654479SA8765N2n3SJKJeFDS8CVVAeL iLJeGqS6m,", "-zlk*&jc7JyJGqS98CV55Nmbv>:z=kzM0rrHGwGtJ0765BNM1nbc-=k*j=vBC65BN2n<<c:xxvBDGw0AZC6B3M4Z96M<>;=&&:7ypiLKrHrGZN22mn,cx;:c::::v24NM21<,>v<3M1mB790qwHeA5321x-->47ZC65BNmnnBFJrwqSA76B43nv", "8888779GHD8CV54N2>:z=k;MZS9AAS95nv>:xx>1VqreweHHGFqqDC2,>:xz--;ccx;z-l==;<4B4N3Mmnb,n5DF098CV43m1M6A", "LytJewGre8B3M2mn,>>4HaaurFAVN59HJrGq09ZC63>zllkjh*<0L LKJte7b-kkl>MZwy..LJeF09877Bl**=-x,3ZAB1bbb,vbmB9F9C54321>:zl:5J.iyrw0AZSwwqSAZCVBN32>b135CAAN>xcx-;mwi", "JHFDS87C63,:zll*hh;6HKJGqSA7C8SAZ654NMm:17FrrGFwGq8C5BN2n,m580DqqDZ2c;z-l=*zMqK", "q0A87V433N3n>x-*hj>CFFD9876BNBVBNM21nb>:,CtiuteFFrtrGq0S8C5B5C80weGqSA8AZ532mnb>:,6eKKJrGFDDwt i LyKeqD9C5680Fq0S8Z6mx==l--zb6DG", "ZCV54M1<28wF9C4mbc:;llb9uXiLJHHtHD987C5N34AHyrwDS8CV55Bm,v>xz=kc7rKJeFD98Z0ti yJew0Z78S0qqD09ZC5BNmbbn2346SwqS", "NM2mnb>>3w.puJGDA9085N32m1b>x>m42,:z=j%kmqyLJHGqqwD754N3213CwuiJ07VBN321nvx-lkj%hx6FwqSAZC557wrHwqS97BN58S0987VB4M11N8qGeeeeJJq7", ",>>cxzlxBrp.uKrwDqqCmbbv>:z==>Cwq7M,xk&zBFreFDS8Z87N1n:>,,cx-k&*>BZ87654NM2480SA87VNmn1N665BN321bvbVr iuKreeGS5", "l==kj&&xCrytHwqSA88Bbx;;-kjhk2eppKFAB1bM8qqS8ZC5443n>xxxv38weGwq7mv:xzl-,5A8CBM1245BN3M2mnbvn4665BN2n,cv25BM1:z-c13Mmnb>xz;b6DA4bx-=*k;20rrwqS876V54", "Mmn,>cb4AS9AZC54M1M8GGDZ52n2ZHLLJHwD98AS74M2mnbvc>b1>==>4Z9A76BNM>kgf$*10y LJeF0DwD5nc;-=*&=,4B2bcz=*kc5r.y03ck%%lmSttF98CVB3223", "uKHwDSDq9CV5BN2nbvmDpo.KHF0FrtrGqS8765564n,>cxxxc15AZMn2BVV5431x-=z=%%zNwia.tSNc=;M0L.yq75NM1<,bM", "+sputrreA4m1n;ll;,N8wrHF9VN22m1b>:c1VA90FeHGqSAZC56GppKDV<;;:x;-*j-3GLyJHwDSDFS7V5BN2n,,4S9Bb:c16qHJreGq61v>>c;llvCt.pp JF98765N3VGipuJF8V7qypp KG9BM5DJytrGF0A80HyytHGDC2>-k*z3q", "LteFqSAAC1;=*jhgg-4FewqS8766CV3m11k%*--,CHKJeFD0S61:;zllv5SDSAZCVC9qDS8765NM4787V54N2nbM8DD", "54N32mD puKrGHJq52mnb,>x;:13mv;==>CHKtrGFFq8C5N32n<29yLHDZZSFeGqSAZCCBblj&h*vBZZCVBNMM5CC65BN2n121nnb>:x>30tur0", "21<,>xz:NHXXiyJeeH03v:x;-=*l<9JH0CN4ZFHeF0988Z53mn<,cv4GpXiKrJtGD9876543m,-kk=x144N32mn,,1222m1<,>vNqrwZ3<:-kj*;,,cxxz=kz1Suaayw", "MbxlkjjxVr LJGF0SS8Mcl*&gf%x6KaXurwGrGqS87654N2b>x;z-,Zt. yJeHHD75B432nb,x;:=h%-15Mv-*%$hcCJ..iyJ", "V1-h$fh>ZerGqS8Z6V6VM>lhddkMw . KreHHqZV5BN2nn,xl*&&lm0tKrGqSS0731nnb>x;cNDJKyyr8m:l==lx16ZB<;k&&zMqKyJG0C2:lc5eyeCnz%fk3FyLtreG", "C2;%$jcB0FD98CVB3M6FH05<;;m9JyJHwDSSD842m17erGq09ZB239yos.rS4,cmAHrewqSA", "Nm>:b5qtJDZV543mcxz--:<2>2SuXiyrrttGD98765NMM1clkj&k:MAwF9CCZ7CV5432nbv,,>xlh$%x6etrGq098C3:;:m8D9Vm,<49wwq987V5NNVSHJreF0S8CCSHe9VN3Mm18HJHFqS8CCAA6B4321b,", "-cVJi yJrw82x*&kvCGrGFDSA9S63mn<,>::b47Vm,1ZeLLKrGwGDB,:xxzlkkcCya.tw0qwD98Z654Mmnm6qGwqS87C5B7eiuq5mb,>x--,6Dq0AZC5N3N4mnb,>cxz", "=v7rtrGqDSZ3:&gkn8qqSA8C55534FyyeFGJKKrGqSAA84>-=*hgg=2wpo.yJHJHS6BNMmnb>>nC0SZCV5432NAtpiHZM>zkj&k>477654N2n,,ljhh*xNDyi LuLJHw098CV5CZBn:kg#gc8KiuKrGqFq72Nqe9532mnb<30KuyrDVb=&&k:MV5NM21<,>xx*$g-M0JyKJrJrFS8765NMMCetwZmxl:BwtJeFDS8ZZB,;zzl=l:MDuuwV1,>::,BqrHGq0CMv><4AGqV1v>cxz-l:5eKJHFS87", "DF9VN3M21b,1Ceu H7Mnb,>xx,5qGAm:cM9ereFqDqD8VBN3m<3w.a.uteFD", "8ACM4FuiKF9SDFwqSA87CC52n:vNqLiutHwFewS87C65N2nN0tuuKH0B>*h=nCA8765NMB0tuuLyJDBbcv<24CFupiyJGqSS", "B5N<:z-==;18HKKrGS4:&gj:NDy utrJtG098765N331v:xzllv6eKJewDS0FS64NN32n,c>NqreD9SwJKJHFD96n-k;mB5B432n<4qKyJewq0AZZ90qFGt yHwqS8CC", "1mMMn:=jk>5qHeFDSA5vhgzNDJytHwqwGSC5B432nb,clkjh%*:>N0eeFDS88SGJtJreGerG0AZC54N", "vnVDDC1>vNAqqS9ZCVN<;cNSHrGq0988ACN21n2M1,bMVZZC54N2cx", "18J KJHeD754N32nz;20rrGqDS9852n<,>c18K.iyGZm-$dg;mN3M21<,,2CZ7CVBNM2M1vx-=*j", "8GKKrGwFFA4mn<,>cb39Kir8BNN32nv>>cxz-,ZLapLH0C569FFD987CV5M,:;-lxM0tKrGF95<;zbB5M<,>cxzzvMNNM2mxzx2DKtDVn:b6r.X.uKJr0Nclk*j&=1DuiLteFS9DFS8CV54N21bxkjj*c5qGwqSAZ65C0rywV,;=*&%h->bb,v>c,3AqZm-%%=", "qqD9ZC54NM,-j&k:MAeJJJG82:-lk*=,ZKXpyeS9Ft yJewD08N:j%$fgzBGtJeFDS8Z99VNM2mn>cx;l=x1BVC8SS87654M2N9LaaiKw7bjg&;mV5nzk=v49GrrGDZ6CC", "BN3M21b>cb3N1n3ZqFD987C5m;%d#*nStyJew0SqHHFS98CV4M23577V579SSAZCV5N2n1mbx-l*&h%k10KLyKJqCNM21b:;;v4qJHGF0SAZ6543212ZwHGq09ZC7997V5BN2nbb4qu.uyLKq7BN32mnvcvm31cl&$#%cZyp.uytFV1,>:xv4DrrGD9ZCCSJiaoX rDA8SqDSA8CVBVA9", "VM,xlkl>4qL.i JS6BN321b,m7qeHJrwD987654NB421nnbv:;,CKoop iLqBn,v>c;l-bAJr9Nvlkx5e uKHGw0Vbzk&*c50qD97VB46G.oa.utHeeF098CV5N2mBFK", "JDB,l=c4FyuLyyHZ2x;>BepaXpKD7VBNMmnbbv:;;;z-=ln0upiyJJr0Ncl=kj&hzBtOsiHS6B7FJJeqS9AZB,*f#h>58ZC5N211NqLuLJeF0DF0754321b,nCKo", " JD62mVqtKJGFFD6<;-l=k-n9LX.uLrSB2nbv>x-lz;z-ll==;NFKKHwq0SZN>l*h%%kmq.oX KeFFeew098C65Nm>*%j:M55NMmn,>>m9eewDS87CZCN120yiLtreq0qGDZ65543mbv::nVDFABmb>xzl:3SqSAZCV433Mbx;z-==:BGyy", "q0989qFqS8ZC5N3Mn>zkj-2SHrGqSS973c-l-zz:m0KLtHwDDFwDA8765N2m50GF0S0HLuKeFq09Z89C4Mmmnb>xz:3w.opr83b;kjln9HFA6BNM1b,v:;zzzzcm8eHG", "8765VZ8765BN2nx-kkcZ ss.KFZ3>l=,8K rS52n,cz-x3DyutHrHq8C6543mm4Z0FwGweyXX yJGFqq0V2nnbvxx<8KiuKJJJHD8C5BN21<25VN2n,xl*=cx--v6riiyttH95N32m:zll:b,:zkj&l1StytHwwFZM<,vc;-cVetJGFDSDwwDSZCV43M:;lxNH. KHF0Z6ZqeGq09Z65BNB9wGFqSA7B1x*kvZt yJGFDS8B1,", "=*&&-m7CMv-&jcVFHGFD9AA6n;-=*&&x5qwqS9ZC788C65NM1b,vcxlj%j:BA987CV433mbc;-=j&;VrLKrGqS878DS87CVB321n2CSSA876BM1bz=&&>7GeFDS87VBVZC432mnb,>>m687VBNM1bb28taaLF98765N31:=", "-lzn9uoX rFS9S98765BN21n,c:;zz>25554N32nbbbv>cxzl=cVHuLrGwwAN1nn<,ccnCD0Z4nv,NAD0AZ7VB323C741,cxz-->B0D7N1bvc:,VHpsXKDC4N32nbb,>", "Z7AwLp. KHwFFD74N321<,cvMZSS9SDDZM1n<,>xzz;;;;zl=;3FiXiytreAmcx;z-lc4wLyrq87ZS9ZCV543m:>mV9", "tty LtHFDSA984nb,vcxz-v7ypiuLytS2>x;-lk*=cnmm1:vBeiyD4>k%*5wKu", "GFwGq98C65N2116r utHGq09Vmv,bn2B0yp.uKrHJteqSAZC544688644CSqqS87C54B8DZm:=&%h:VeLLteD8669Greq0986422VA0S8765BM>*&x4qttJ", "9889ZV4N32n,>bN6654Mm2CFJJeF098CC790qFwGHLXpuKrGFwFS8C554M1M9y.utJJwS8C54NM2NDLyDN:&$*1SHrGqSAZZ0wGqS8765N2mNVCC65BN2nbcxvB0eewq", "V5B542nx--bSyuKrwDDeHw098CVBNNCeuiuytJy yrw09AAA7B32mnb,3q.op LKwZBN3mn<1VH.pKDBvx,VDFDS876BB7997V5BN2n,,M554M213AwwqS8Z", "3211nv:x;-=*l2eXXiyrGGHw9CV543mnnBGuuKrGFGHw0876V5BN1b,>:;c4G iyJHGD622AJLyJwA6V6ZA8ZC6B3m13VVN2m1B98Bm,c;-l;MF e9C55", "<,>cc:;;zzl-vCtiutHwq0D0CN221BDHHGqS88Dq9CBNNMmb>>mVV3nv:;l=-10yt0Bn:=jkbA sprABM2", "xz==:1M3NNN5AGttHqSA8CCCNb>>cx-lxMA0SA8CV5VBMm1<,>b22nc-kkvCDq0A7655Mc*%%=<7Dq098CV7wtGZN1bvc;z>5qF84N7765BN2mmnvc:;z:mZ096M<<378ZC65N2mcxlkjjlbCGJHF9ZZ8C5BN3M1b>>vv>bMVC65BN21MZJ ur0Bvkg%:CJiiyHD73mNSJKJeFD9Z6ZDHreq0986Mv", "kl>5GuLKrGq0DDZ42m1nbv>>v>v147SFHr93,>:xz-zx-j%j>VFrHGqSA9ABmn40eHGS5Mm1n,v28HtrGD7m;&lMqKytHwSZ6C9FGwDS8ZC5570qD98765N2<", "58FJtJew09ZCCCB1,,b<kkxn59wGDAAS0SAZCV4M35V3cb23M2m1nb,n3", ".i ueAVB432nbbmB7AS00S9ADtLKrGq0987B1,m6DeJJreHGSZ65B4M1CJ iLJHG93;h$hxM665B4Mnbn5S08CV54M1bvnBV31cx;xb50", "LJrHqCMn>MDupLGA5BZGKKrGq0SZ4,zz>1NN32mn,>>29rF6M2mn,:;cM90Vncz=kklcMV3v-*&*x30t", "HwDqSVc:;zc5HiiLrwqwHrGFDS8C6BNBZ0FD6m,>cx;xnZt.t7n>:;lk-nAKLw5>*g%l<6wJFN;gf*<8HK", "w0AA8B>k&hjlvVGH0876543mm46V54321<,b4qrewqSA76552>;lll==vZKuyJeFFerG0987VBNM3ZKoou9n:zl==:BGiau9<;lk&&z5JXXLDmjd%,8Jpau0b$@l4FrH" }; xscreensaver-5.36/hacks/images/sea-texture.xpm000644 000767 000024 00000043131 07262045502 021474 0ustar00jwzstaff000000 000000 /* XPM */ static char *sea_texture[] = { /* width height num_colors chars_per_pixel */ " 128 128 64 1", /* colors */ ". c #b1b1b1", "# c #afafaf", "a c #adadad", "b c #ababab", "c c #a7a7a7", "d c #a5a5a5", "e c #a3a3a3", "f c #f0f0f0", "g c #e0e0e0", "h c #dedede", "i c #dadada", "j c #d8d8d8", "k c #d6d6d6", "l c #d4d4d4", "m c #d2d2d2", "n c #d0d0d0", "o c #cecece", "p c #cccccc", "q c #cacaca", "r c #c8c8c8", "s c #c6c6c6", "t c #c4c4c4", "u c #c2c2c2", "v c #c0c0c0", "w c #bebebe", "x c #bcbcbc", "y c #bababa", "z c #b8b8b8", "A c #b6b6b6", "B c #b4b4b4", "C c #b2b2b2", "D c #b0b0b0", "E c #aeaeae", "F c #acacac", "G c #aaaaaa", "H c #a8a8a8", "I c #a0a0a0", "J c #9c9c9c", "K c #929292", "L c #e9e9e9", "M c #e5e5e5", "N c #e3e3e3", "O c #dddddd", "P c #dbdbdb", "Q c #d9d9d9", "R c #d7d7d7", "S c #d5d5d5", "T c #d3d3d3", "U c #d1d1d1", "V c #cfcfcf", "W c #cdcdcd", "X c #cbcbcb", "Y c #c9c9c9", "Z c #c7c7c7", "0 c #c5c5c5", "1 c #c3c3c3", "2 c #c1c1c1", "3 c #bfbfbf", "4 c #bdbdbd", "5 c #bbbbbb", "6 c #b9b9b9", "7 c #b7b7b7", "8 c #b5b5b5", "9 c #b3b3b3", /* pixels */ "PPilW0w65w2tZYpoUTlkRQQQjRRjPhNMLMMNNOTY38B7y42sWlPgPUZ4B.#abGGGbbFaE#D.A5v0qVljOhQTWZsoSONLMMNghOPQRkkkkkkjQPPPPiQQjRRkSWt5.HHH", "PPilW0w65w2tZYpoUTlkRQQQjRRjPhNMLMMNNOTY38B7y42sWlPgPUZ4B.#abGGGbbFaE#D.A5v0qVljOhQTWZsoSONLMMNghOPQRkkkkkkjQPPPPiQQjRRkSWt5.HHH", "PPQTp0w6y4v1srXWnmTSkjjjRkkRihgMMMNNNPmrwB97y42sWlihinsx9DEabGGGbbFaE#D.A5v0YoTRPhjmps0WlPNLMNNghPijkSSSSlSRjiPPiQQQjRRkSWt5.HHH", "iijmp0w6yxwvutZYponTlRkSmnooUSjPhhhggPUZ499z4uZXnljPkW1yC#EaFbaED.9BB88Ay420YWmkPOkVYuvZoSPhhOPiQklmnooWpppVUlkRjjQiQQQjRVsxCGHH", "jjRUX0w6yy5x4vu0rqpVmSlUWY00rpVTSRiPhQV05.9y2rVmTSkRUYvzDEEaaaD9A6xxxxx5wv10rpnlQPTp0452ZWTkkSllmnWqrs0t1u1sqWUTSRQPPPPPPmrwBbGG", "RRSnX03y66z665wv1sYpVTmWZu45wu0YpnlRPRW1yDCxtokjRklmWt48EaaEE#97xvtt11u2u1t0ZqVTjQnYv685v0qWWoWopYs123456z6wusXomSQOOOhhhSXvAFbb", "SSlVq03y67A8B76x3u0YpUnYu5B.Bz531roTjkpuzEC4rlhhiRmorv6CaFaE#.7xurWpXYrZsss0sYWUkRo0xBDB64ut0ssZsuvx67BCDaD8yv0qVlQhhggggjou7aFF", "TTmWYt3y6A9CD98z5wusqVo04BFHb#CA52YVklqv7aC3XQNNORnY1xADbba#D9yvrVlTUVopqrZt0rpnSSXuzDbECAyxww32vx68C#aGcdca96vspTjhgNNNNPnt6Eaa", "YYr01v4y678B9A6xv10ZYpqu59bHbE.86vZWlmr3Aa.wYkghQmq1w6B#bF#.9Ax2rWmnWqZ0t1uv2tZXVVZ3AEGECA54w3v2vxzB.EFGHdH#8y20qVlQPOhgNin0yDDD", "xx5555y6y6zzzxvtZqYYYYsvyBabaD9AyvspmnZwAE.xsUijUXt468C#aE.B7yw2sYpY024yy55543u0YYu58EbD86w2uuu12468.#EaaF#B6w1sYpoUlkiPhjo0x9CC", "###D9876yy54wusXVUoprs246BDED98z5vsXVWs4AE.6uXTUqt47BC.#EDB7y43210su4z9#DCBAzy4vu14z9EF.7xu000001wy8.DDD..B642sZZrrYpnljPSW04888", "eeedbDBz5xw21rWmRQTor14yz8C.9876xv0YWXt4A#.7wspY147.#####CAy422222v58EHdcGaDBAzyx468CEa963srrrZZtvyA.DC9A7yw2trZstu2tYVTjTp0w777", "KKKJeG.z5wu0YoTQhgjnrv6778BBA7654v0rXY1x8#D85v0uxA.bGFa#DB64vt1v34yBadIJIecbD.9B8ABCDEE8xuYpXqqYs25A..BAy4v10ZXrt2x641YVSUX03yyy", "KKKJebBxvtrXVlQhNNPTqu5y67887765xwutst3z9aEC75347CEHHbFEDB6xvt2w57BEHeIJJedGE#DDD.D##E#AxurXYrs0uw68..9A6xw2u1s1v4y752ZWmVY14zzz", "KKKJdD61ZXVmkQOgNMhkVZ2wx6A877zyyxw3vw6B#GbE97568DaHHbFED9z5w2wyA.aGcdIIedHbEEEaFFFaEEDA5v0stuvw5z8C#DCBAzy55x4x5y6zx2ZpnWs2y888", "KKKJHB3qomkQOhNNLLgQTps135zA777zz66yyzB#GdcGECA8CEbHHbFE#CA6x358DbcddddddHGaEFbHccHba#CA642u3x67B9.#EED.9B888BBBA7zy4usqoqtw7CCC", "KKKIbz0UkQOgNMLLLLNORUpZ146A7777AA88BCEGdeecGEC.#FGHHbFE#C8zyx7.bdIIedcHGFFEEbHdeedHFD9Az54wy79#aaaFFaE#D..DEFFa.Bz5wu0Ypr25B#EE", "KKKIE4XjOgNLLLLLLLMgPkUpsvyAA7AAB9.DEFHdeIIedHaaFGHHHbFE#.BAzyBadIJJIdGE####EGceIJIdbDBA7zy68.FHdHHGbFFaaaFGcdedF.7x3u0rq03z.Fbb", "KKJdC3WQhNMLLLLLLLNgPjlWswz99999.DEaFGcdeIIecGEEaFbbFaED.9876y8#HeIIdFDB9CD#aGHdeIdHECAA77z7CEGddcGFE#EEaFbHdIIeHD74v10rqt48EHHH", "IIebA2pkPhNLLLLMNghPijlp159EEEEEaaFFFGHddIedGEC9.D##D.C9BAzy5x68.Eba.B7y78.#FbbbbbaD9Az7777ACEGcdGE.8ABCDEbHdIJIHD7w2tsrqtxBFddd", "GGbCy1qmRPgMLMNghPiQjRlq27EHHHHHHGGbFbHcdddGEC77A8B9B8A7zy54w34xy676543vx7CEGa#.B8A7z6y6z7AB.EbHHaC7xx6AC#FHeIJIHDzv10ZYq1yCHeII", "BBB6wtYVlihNLNgPjSkkRRlYw9HedddddcHGFFGHcdHaCA5xy6z77z65x4w3v22u1ttt0ss0vy9aHE9z4v3w4x5yz789DEbHGDAxu1w68DFHeIJIHD62tsZYqu6DcIII", "44wvusrpURONMgPRTVUmSRlrx#dJIIIIedcHFFbGHHbDAy3vw4x55x43v22uu10rpVUnVVoXtxBaH#7wsqr01v45z7BCDEbHF9yuYY147CFHeIJIHD6u0ZrYquzEdJJJ", "222uuttZpmQhNOjToqWVmSmZyEeJJJIIedHF#D#EEF#9z42uv3w443vu1t1tt0rpmkijkSmVZwAEH.y1XnWY02w5zA9.D#EaD7wsWp03zCaHeIJIH.y1srrYY27EdJJJ", "333wwww30pmQOjTVqZqpoUV06EdIIIedcb#97z78B9B7y4vvww4x43utsss0t0YoSihOiRlUY2z.FBx0omoY0vx6AB.D.9BA6w1rWp03zCaHdIJIb9xtZrrrZv7EdJJJ", "xxxy6z77w0pljlVqs1srXop16#dIeddHFD8y3vwx5665x4ww4x554v1ZqYrZ00qnjhNgOikmX15BD73ZnlVY035z8C#D97yw2tZqWX03zCaHdeIda8wsZrZZ03AEdIJJ", "yy67BCD#A3somVXs1v10ZqY2zDcedHGFDA52Zrstuv3www4x55y6x20YWpqrs0XmPNLMgOjlW0w79yuqmknqtw6A9Da#ByvZqXXWoqtwzCaGHdecD7vZrrs0148EdIII", "77A9DFHH#zvrWqsu34vutZs37DHdHbE.8x2roVWXYstuvw55y6zzx2spnVpqs0plhMfLNgiSoZ2yA40plRUqt4z8C#FEAwZVmUnVoqtwzCabHcdGC62YYrstux8EcIII", "88B.aGdda84sXZtv45wvu0t3zCFGa#C8yvspmTUopYs13xz7777z52ZpUVWqs0WkgLfLMgiSorux63ZokQmXt47BC#F#72XSjkTUVqtw69#abHcFB51qqrstu4ADHddd", "99C.#abbCy2YWqsuwx321ss2xzC.98zy4usXnnopqZ1w68##.B8z5v0YWpXYZsoRgLfLNhknX02xy2YnjPlWs367BC#Cy1pSjRlTUpZ2xAC#EbHa8xtXXqrZ0vy8#GGG", "......DCz3sWnprtv4vu0rrt246z654w2tZqWWXYZt369acHFD9z53usYYrrZZVjNLfLNPmXZ1vxx1XmiOkVr2x678984sokQRSlTVYt368CDab#A4tXpXXYrt3yBDDD", "DD#.CB8zwtqnTVq02w21sYqZ0u3w3vu10sZYqYrst2xBadIIdFCz5wv10ssZZrnQNLfLgjos12344tplPhjUq1wxyzA6vrVkQjkklUXZu468C#FD7w0pWWWpXZ13yAAA", "EEE.Bz5wtYolkmpZuvu0ZqpqYZ00ssZrYrrrrs0123z#cIKJIHDz5xwvu1t0ZYUiNffLhSqv3ww4wsokhgiTp0v345yxuqnRiQjRkToY0vxz8.E.6vsWVoVVoXZt3xxx", "###C7xv0YWmRQloYtutZqWVWWpXqqqXXXYrZst123w7adJKKIH.y4w3v21tsrqmiNLfLOms444wwvrnjgNPlp0v3w4xwtXUkQjRRkToXZuwyA9D9y2ZonnUUnWqZ1vvv", "777ywu0qomkPPRmWrsrXoUTUnopXXXXXXYrZstt1u25CGIJJdD6u0sZrYqXppolPNLfNQn04w32utXmQgNiUrvyyyyyxurWmSlTmUVXr0uw579D9y2ZonnUUUWqs2444", "33320rXVmkihhiSUpqpVTkjSTnWXXXXqqYrZs0000037DHIdEz2qWVnUmmmmUmkPhNLhkWt43v10roSPNNjotyB8A7z530qoUVoWXqZ012w579.B5urVUUUUUWYt3555", "ZZZYpVUlRiOgNhQlnonljPOjSmopXXqqYrZss0sZZrtxA#HaAvYmkRQiPiQjkSjPOggimX14vusYpmRONNRpv8EDC9A642sqpqYrs0t12vw57B.B5urVUUmmUWru4zzz", "VVVUmSkQPhgMMgPjlmSjPggPjlVpXXqYrrZsssZYqprux8D8wrUihgNNNNghPQiPPPPkVYu42trpnSQhNNkYx#HbED975w1srstuvvvv33w57BC8x1YnmmmmUWZ25AAA", "kkkRjiPOhNNLLNhPRSjPgNMhikUWpXXqYYrZZrYXWVps25Ax0VjgMLLLLLMNhPiijRkUpZ2wusXnljPhNNls6becbECA6xv1tuv455x443w5z8B74tqnmTTTmWZvyBBB", "QQQQQiiPOgNMMNhiRSjPhNNhPRTnnUUUUUnVVoVVVUWr1w6wZnjgNMLLLLNhQkSlTTmVqs23troTRQPhghUt7bdHFDBz5wut02wy7765xw34x5yx2ZXUmTTlTVYuxAAA", "PPPiiiQQPhgNNgOQklRiOgNhPjSTSkRjQQjRRklTmmoYtv5vrnjhNNMLLMhilVVVVVVpYsu2sXUkiPPPhiouAbdHEC75wvtss2xz99A65wvvvvv1sqWUmTlSSUXtw666", "hhOPiQjRQPhgNhPjSTkQPhghPQRkQPOgggghhOiRlToqsuwuYnRhgNMMLNPkVYYqqXXqZ011rWlQOPPPikXv8bdG#B64v1srZ258##97yw2ut0ZYqWoUmlSkRTWZ2555", "gghOPQRSRiOhghPRlmSjiOhOPiQQOgNLLLLLLNgPRlVXZtvtqnROggNMMgjUY11t0ZZZs0t0qnRPghPQRmrwBbcb.Axv10rqr26CbbD86wu0rXoVVnnUmlkRQSVY1www", "gggOPjSTSjPhgOikTUlRQPOPPPPPgMLffffffLNhQlVpr0u0qnkPhhgNNhSW0wwv21t0000ZpmQhNhPjlo04BbHa963u0ZqpY26.HHEBy3trpUlSTTmUmSRQPRUps222", "iiQklUoWnljPhPjSmnTSRiPPPQQQOgNLLLLLLMgPRTVprt21sXVmkjPhgPSoZ2v22uu1t0sYVlPgMgOikUYuyC#9z4u0rqpopsvy9B6wtrpnTRiijkSTlRQPOikmWYYY", "mmUopYZsqnSQPiRlUVmlkQiQQRkkQPhgNNggghPjlmoXZ1vvu0ZYWUkihiSnqst1u2vutsrXUkONMNhPQlWZv67y420rXponVprtv2sqVlRQPhggPijkRiPhghPjSUmm", "YYrstuv30XURPjSmnoUTSjQjRSlTSkRQiiQQQRSlmnWqsu3www3vtYVkPQSmoXr01vw2tZqWTjhNLNghPRUps2wv1srXWonmmUnoWVTRPhgNNMMMghPQiOhgNNghPiPP", "vv3wxy6z3ZoSQRlUVWnmlRjkSTUnnUUUmmUUUnnnVVpY02w5yz7AxuYURRSTUnprt34vtrXnSigMLMNghPkUprsZrqpWnUTSkRjQiPgNMLLLLLLLMNhPPhgNMMMNNNNN", "zz7A89CCy1qTjkTnopVUTkRSTUVWWpXqqqqqqqXpWoprtv46A9Da95tplkSSllVqtw531rWmRPgMLLMNgOQkmVWWWVVnmTSRjPgNMLLfffffffffLMghhNNMLLLLLLLL", "666z7A88xtqmkSTUnVmlkQijklmnWXr00ssZrYXoVUVq024z8.EbD62qmTTmUnX0vy7xuroljOgMLMNhPikTVpqpWVnUmUmmlQhNLLfffffffffLMNhPPhhNNNMMMMLL", "44xxx5y5vsXUlllTTTkjiOhOPQRlVXs2vutsrqWnTSTWZu4zBDaG#zvYUUVWXYtvy8CzvZoSQOgNMNhPRlnWqZ0rXoUmUoWXWlPgLLfffffffLLNgOQkkjQPPOhhhhgg", "vvvvv3vvtrpnmllSkRiPhgNghOPjUXt4x3u0rXVTkQRnY147BDFHE73rnVpY01wy8.E8wsVkiOgNNgPRTVXrt220YomTnpY0ZnRhLfffffffLLNhPRlUUmTSSkRRjjQQ", "111ttt0srXWVUTSRQPhgNMMMNNgPTXu67x3trpnSQOPTXt479#bHaAwZopYtvxzB#FGCx0VjPOgNNhQToY0u3xxuZWTlVYt32XlhLfffffffLNOjSmVppWWooVnnUUmm", "ZZZZrYqXpWWoVTSQPhgNMLLLLMNhSqv89z4uZWmRPghkW0479#bcF84sWq0vy8.EGcdEy0VQPOgggPSVYtv4y77w0WTlosvzysUPLffffffLMhRmnWqZZZZZZZrrYYqq", "XXqXppWWWpXqXVmkQPhgNMMNghOjotyDF.8ywtqnkPPlWZvyACEGEAxtqs2yB#bHddeFztVQiPOhhjmXt3x67BBxuqnUXtw7ysUPLffffffLNPknWY02vvvv3v2utt00", "VVoooooopqrssqWUSRQiPhOPRlnX1yCHdHbE.A40pllnprt357CE.7xusux8EHddeIIb7uoRQiPPiloZv5zABCC63spWr1w6xZmhLfffffLMgPknXsv5y6zz765x3v22", "TTmmUnVoXr0u20rpnTllSkSUWYt3z.GeIIIedH.yuXWpXqrtv579Bz5vu47DHeIIIIIGA2WkRjjjRnq1x789CD.7xurY0uwy4YThLfLLLLMghiknqux89C.D#.BAyx44", "RRkSlmUVXs1wxv1ZpooVVVWr1wz9aceJJJKKKJd#zuZrqXWY0v577y5436CGeJJJJJIHBvpSkSSSTWs3z9..#E#By3101vw53qSgLfLLMNghPQknr37#FGHHcGa.87zz", "PPijklmVqtvy7ywuZYYYrZ03z9FceIJKKKKKKKJdEyvtYWUVq0vxy5555BadJKKKJJJc93XllTTmnYu5B#EEFFa.7532v3wx2pkgLfLMNhPiQjknsxCHdeIIIedbD9BB", "PPiRSUVXs2x78z42srZs01v58#HdIJJKKKKKKKKea6v0XnklVq0u3wx5y9FdIJJJJJIHB3qmmnVWXtw7.FbbGbFDAy3233wx2pSgLLLgORSlSlTWty.HdeIIJIdGD8AA", "jjRTnprtvx68Bz4uZqZs1v468.FHdIJJKKKKKKJd.4tYVSiQSnpr0u34y8#HeIIIeedE7vYnopqr0369aHHHHHbDA5212vwxvqlhLLNORUoooooY2yCbcdIIJecEB655", "SSlnXZuw5zA9C741rXr02w5z8C#FHdIJJKKKKKIG8vrolihhikmoqsu35ACaHddcHGF9yurWXr0u3y8#GcccccH#741012w53YmPMMhjUqrrrrr036BEGceIIeG.zwvv", "TTUpZ2x789C..741Yprtv5z789.#FHdIJJJKKJeE6tpmjhNNgPjSnq0v57B.EFaE#.9741rXrt246BDbcdddddH#7w0Zt2w5wrniNNPTX122uu12xz8.aHdeIdFBx100", "nnoruxAD####D74tqortw6A888B9DFHdIIJJJJcC4rnkPNLLMNhPkoru5678B9B8A76xvtZY0vx79#Fcdeeeedc#73ZYsuw54sojghRo04y5xx44yzABDbceIdE7vrqq", "ppX0369aE#D.963sXor1xA9B8A77BDaHddIIJeb83qUjhMLLLMghjnYuxy6666y5x43v10ssu47CEGHdeIeeddG.6vZqs1vxwsokhPmYvz8Az6556z7ACaHdIH.y1XWW", "rrZu469#.987y31rpWZ2y9D98z55zB.aGHdeIdE7vqURPNLLMNghjnYux55x4w3vu1tt000t369aHddeIIedHFD85v0rstuvuroliRo0xBCBA6556z7A9#bHdbBx0WVV", "tt1vxzB.B75w2tZqpWs3zDEC8y3vxz8.EFHHdG.62qnkPgMLNNgOjnYux54321tsZYqrZst2x8#HeeIIIIdHaCA64vtss00tsqomkmq2zD#C8z55y6z7B.EbH#73Zonn", "vv34y7897xvtrqqpWpt48abDAxut2468CDEFGEB5uqVlihNMNghPRnYuxx3u0rYXWoVpYZ136CGeIJIIIIdbC7xwv21t0sZrYponmo04BFF#B75x5y6zA9DEFCy2YVUU", "xx5yz7885v0qVVoooX159GH#AwsY0246ABC.#Cz41qVTjhNNghhPRnYux420YponmllnXZux8EdIJJJJJIcEA4uuu2210ZqpWWoooY26DHHaC75x5y6z7B9CD84tXUTT", "66z6z77zwtqVlTnVWY26.Hc#A3rXr02w5yz78zxv0qomRPhghhhPRUq1431sXonmlkkUpr14A#cIJJJJIIHDz3t1122u0ZXoVoWWpZvz#cHEB6w3w4x5yz7A8yvZWmll", "zzz666652ZpmkTVpY0w7DHH#73ZXYrs01u22v21srXoUljPPPOhhilWZuutsrqXWVUUVpqZ1wzCbddddedGDA53vvv2u0ZqpWWWWWYu5Cba9630s0t1u23w4xv0Xnlkk", "zz76y5xwtYVSjTVqsv58#HH#7wsqqqXXXqqqqqqXXXWVUlkQiPhgPkUXs000ssZrqpppppXqsvx7CDEFHHFDBzyxw3210ZYqXpWoVX04A#.z3spopXqYrs01u0qoTkRR", "7776543uZpmRQlorux79EHHD7w0qXWnmTTlllTUnopWoVUmSjPhghQlVXrs0tuutsZrqpWVnWYsuwy79#aEDCBA6xwu10srYqXWonWZv69A40pTSTmUnVWpqYXomSRQQ", "AAA6x320qVliPlW0wzB.aHGD741YWnSQPPOOhPjSUWpWpWoUSihNgPjTVXrt2ww32u1ZpVTRSmnoX0vyB.DDDD.864ut0ssZrqWVUVq147y1qTiPiQjRSlmUnUTkjQii", "zzzywu0YWUkiPTptxA9.EFaCz41roTQhgNNMMNhQlopXqqqomjhNgPQSUpr1v5x432urWmjPPQjRlWZ2y89CD##B6wtsZZZrrXWVmVqtw6x0WSOhOPPiQjklTlkjQiPP", "www2tZqWVmlkknXtwyz78997531roligNNMMLNhQlopXqYrXVTRPQkmVpYs1v43u0rqVljOghPijSnX0vx6z8BBz4uZqXpWooVVVnpZ258zvZVkjRkSlTmUnnUlkQPPP", "000rqWVUmmmmUWY02w4x5yy4321ZoSPNMMLLLMgiSVpXYrZrXonTUVpYZ0tu2v1ZXVTRPhNNNhPiRmoqs1vw5664usXonmTSSTUVWY147.952rVUnVooWWpXpoUSjPPP", "ppponmlSlmnoXYZ01u2u2u2u111ZokONLLLLLMgPSVpqrZ0sZrqXqrs1u2uuuuZpURPhgNMLMghPjSmVpYstvw4usqVmSRQPPRTVXs369a#85urYYrrrZZZZrXVTRPPP", "TTTSkjQikmoYssss0ssrrYrrs01soRhLLLLLLLNPknpqZs111111u23w4w321tqURhNMLLLLLNgPQRSTUnpYs1usXVTRQOhNgPSVYuxA#HGDA52uu22222uutZWUkPPP", "QQQiPPOOQTWZ1tsZrqqpWoWXr0utWkOMLLLLLLgPSoqZtu3ww4xx55yyyx3u0rokONLLffffLLNhPiQjRkmVqZsqoTRPhgNLMhkos3zCbdcF.A5555555x4wvtqVSiPP", "PPPPOOhOQSUXrYqXpWppXXYs13x40WlPggNNNhjmp0246A999BB87654v1sYpoligLLffffffLLNghhOPiSUprsXnlQOgNMLMOlXu58#HddG#9z66zz77z6yxvZWTjii", "hhOOhOhOiRlnooVnnnWpYrt2468A4tXmkRjQiRnYux7CEGdcHGF#9z4uZqWnTSihNLffffffffLLMNNNghjTWrsXUkPgNNMLMPUZ4A.aHedHaCAAA8BBB88A741qURjj", "gghhhhhOPQjSlllllTVXZtv579##852ZXWonUoZv6CaceIJJIIdH#AwsWUlRiPhNLLfffffffffLLLLMMNPSor0XmRONNMLLMiVt6CEGdeeHFDBBBC.DD..C96vrVSRR", "NNggghhOPPPPiQQjjknX0v5A.aHHaC742u0ZYsw7DHeJKKKKKJJeb8vqljPhgNMLLfffffffffffffLLLMhRVr0XTQhNMMLLNjW28EbcdIecGECC.#EaaaaE#840WTSS", "NNNNghOPPPOOOPPiQknYuxA.Fceedb#Bzy4vu37DHIJKKKKKKKKJcB2oihgNLLLLffffffffffffffffLLhRVs1qmQgMMMLLNkqw.GHdeIedHaDD#abGGGbbF95tpmll", "MMMNghPijRSlTmnVopsvyBDFHdeecFD86x310uyCHIJKKKKKKKKJcBuVPgNMLLLffffffffffffLLMNNhPSWs3xuYVkiOhgNhmZ5DHcdeIedGECC.#abFa#DC6vYnRQQ", "LLLMNhiRTnpYs01u23yA.FHccdddG#97531ZqZw8FeJKKKKKKKKJcBuVPgNMLLfffffffffffLMgOiRlUWruxAB63tqomSjPjW16#HcdeIecbD88B.#a#.BA6vZVkOhh", "LLLLNOQloY1wyz7A8C#bHdeeddcHa.8ywuZXVpu6#dJKKKKKKKKJH8uVPgNMLLfffffffffLLNPkUWqZtv5ACaFD86w1ZXnlmYv7EHdeIIecaCzzAB.#.86xvZoSPNNN", "fffLNORUquy9abGHHdeIIJJIedHFDBzxv0qVlnsx.cIKKKKKKKKJH8uVPgNLLfffffffffLLNiTp0246ACEbHddcb#C7xurWptx8aHdeIIeHEByy6A9.B6w1rolPNLLL", "fffLNPSW05CHeIIJJJJJKKKJIdG#9AywuroTjlq3BHIJKKKKKKKJH82oigNLLffffffffLLNPTXuy8.aHdeIIJJIIdcbC6vZZv69FHdeIIeH#A445zA9741YoligLfff", "fffLgjVswAEdIIJJJJJKKKJJeHaCA6420YWUkmr38FeJKKKKKKKIGA2WQhgNMLLffffffLNhRoswA.FceIJJJJJJIIdH#7wssv6CbcdeIIeHD7w3wx56xuZpUkPgMLLL", "fffMPmrwz.GdIIJJJJJJJJJIdb#BzxvtZqpVUoswAEdJKKKKKKJIbA2pRPPOhgNLLfffLNhjUqu59EHeIJJJJKKJJIIdEAwsZv6CbcdeIIeG.z3222vvuZXomkihNLLL", "fffNjW2A.FceIIJJJJJJJJIdHaCA5w1ZYqXpWqt47.GIJKKKKKJeFAvXSRRjjQONLffLMhQTp0w7.bdIJKKKKKKJJJIda8wZZv6CGddeIIebC6v1t0sZYpoUTkQOgNNN", "fffglZ6EGcdIIIJJJJJIIIdHFDB642sqpXqqYs2xz9adJKKKKJJeaAvqTlTmmmRONLfLgilWZvyBEHeJKKKKKKKKJJJebBwZrv6CGddeIIdF9y2tZYpoVUmTSkjPOhgg", "ffLhnuCdeeIIIIJJJJIIedHFD975vtYWoXYZ0u3x6ADcIKKKKJIdEAvYUUoWXqnjhMLMOkVZuxA.bdIJKKKKKKKKKJJIGBwZrv6CGddeIIdF9y2sqWUSSSkkkkjQiPPP", "LLLQX4EeIIIIIIeeddcHHbaD9A6xvtrpWqrstv4y79adJKKKKJId#Aw0pXr0uvZVkhNhjUXt3y8DbdIJKKKKKKKJJIIdE7vYq26CGddeeIdF96v0qoTRRkkSSSRjQiPP", "NNhT0zGIIIIeedHFED...C987zy4v1ZqXYZ0tvxzB#GeJKKKKJeH#B52Z0246Ax0pSPRmpru4zB#bdeJJKJJJJIeddHaBxtpX1yCGddeeedFCzw1rWTjjkSlTTSRQiPP", "iiRpv9cJIIeedb#B6x55yy6y55x4vusrYZs0t35ADbdIJKKKKJeH#9z4u36B#FC51XmVpZtvx79EbcdIIJIIedcGFEDBy2ZoWt5CGdddeedb.AxuZWTQjklmUmlkjiPP", "mmn0y#eJJIedH#A41Zstu2333w4wvutsss0tt369aceJJKKKJIdG#CA64zCFdIH.6uYrs12wyACEbHddeIdcHFE.9875v0Xno05CGddddedbD8yvspTQQklUonTkjiPP", "qqr3BGIJJIecFB40omnWXr0tu23wv21tttttt3z.GeIJKKKKJIdb#.987CbeJKIcD6vvvwwxz8.abHHcccGaD9A6543usqoTnsx9Gddddddb#9zw0pTiQkTVpomSjiPP", "tt15CHIJJedG#72qmRlUVprs1v4x4321tt00026CHeJJJKKKJeH#CBA769beJKJd#62uuuu2468.EaFGHHa#C87yxwv1Zqomnrv7DbGHHHHbE.ByuYUjjlmopWnTSRjj", "vvwz.HeJIdHaCy1XTjSTnWqs2467yxvut0sZrt59GeIJJKKJIdaB76x43z#dIKIHBwZYYYqY02x7B.#abHa#.9Azyx4vtrpnVqtwy89.#FFFaED840WSSTUopWVnUmTT", "55y8#GdIdHFD840WSQRlmVXsvy89Ayw2tsrqXZw8FeIJJJKJeG.64321049HIJIaztWVnUmUWr1wyA9#FGaEDCBA7654u0qoopYstvxz8.#EFFb.62qmTUnoWpWWWWWW", "AA8CEGddcFDB6vZokijkTUWsw7DE97x2tZYpoqv7adIIJJJId#AwutZYquzaeJdDxYTkRjiiSnqt35ACEbaa#DCB87zy31rpoooWWq0v5AC#FHdF84sonVVoWpXqrrrr", "CC.#aGHcb#97xuqnRPQRSTos48FG#8yvtrXoUWu6EdIIIIJeG9y1ZYpVnZxDdJdB2oiPhgNNORUX03yB#baaE#D.98Az420YWnmlRlWZ2y8DbcecD6uXoWooWpYZt111", "EEaFbHHHFDBz4urWlRSlmnp1y.HdF9y2sqomSmZx.ceeIIIdEAwsqWnTSp28beb71ViPhhggOjToY14zCE#E#DDC98Az42sqoUlkQSVr2yBEHeJebB40rrYYYrstu222", "bbGGHccdG#9753trpVoWXqsw8adeG9y1YomRPRpu7FHHccdbC6vZXVmkQUZxCG.y1WSkRRjRkTUoXs2x7B9CCCCBAzyx20qonUmmTVYux8#GdIJJdE84vv22uuuuu111", "HHHccdddHECAy4vu0Zss0t26DHIIHC5tpUkPgOmZx.aaFFFD852ZpnSQPkp1yC74tXnnnVVoVVVoWY0vx67A8BBAz54v0YWUTmUVoqt47DbdIJKJIcE87z66yxwvut00", "ddddddedHFD86y5xw333ww5BbdJJc.xsVSPgMNjp2ACCCCC86w1rWmROgPmq25420rXqYZs0rqponpY02wxyzAAz5w2tYWUSSTnpYtwzCbdIJKKKJIcF##D.9Aywu0ZZ", "eeeeeeeedb#B7777777z7zAEdIJJd.xrmjhMLLOUsxz7777y420YoligNgjUY11t0sstu34x20qomVpYs1v45z7yw2tZpnljjTortw69FdIJKKKKKJIddcHHbDAxuZrr", "eeeeeIIedb#B77AA88A77zA#cIJJdC4qTQgMLLhTYw5555542trXnkPgMgPlors0t1u3x6A8yvsXnopqZs1vw5542trqoUlRknXt368#HdIJKKKKKKJIedddHaByvsZZ", "ddddddedHa.Ayy555x4w3vwzDGeea7vqmRPgMNinZw5xxx4v1ZXVmRPhNhQTorstuv4yz8C.Ay31rZs0001u2vvu0ZqXWooVWYt3yACEHdIJKKKKKJIeddHHb#Bz42uu", "HHHHcdddG#9zxw3vu1tsZrZv69Fb95uqnlQPgOkWsw5x4wwusqVmSjiOhPRmoYs13x6AB.#E.Bzx3322u111tt0ZYXWppqYZ024yACDFHdIJJKKKKJIdcHba#.B76x44", "aaFbGHcHF.8y321srqXoVUVYuxABy30qVmSRiRUqtwx4w3vtrWmkjQQPPjSUoqs24z8C#abGFE.B7z543u10ZYqpWoVoqs13x67BC#abHdeIJKKKJIecGbEDC9B8A7zz", "DD#EabHHaC7x2trXoUmSRQjmX034vtZqWVUmlmWr1wxw322sXVSiPiQQjkTnoqsvy8DabHcdcHGFE.8zxv1sYWVnUUmVY1479CD#aFbHHcdIJJKJJIdHFED988BB9999", "AA89.#FFDB64usYWnTSQPOPknqt2utsZYqXXXqs13x5w3u1rWURPPijRSTmnoXsv69abHcddddcHGECA5vtZXnUTTTTVr2yCEaFbGHHHHHdeIJJJIecbE#CBA89.#EEE", "vv3x6AC.97y4v10rXWnlRiiTWsvxxx44wwwwwwxyzA75w1sqWnljjRkSlTmnVWZv6CabGHHcHHGba.8642tZqWVnUUmVr2y9#abGHHHHHGHcdeeedHGE##D..DEFGHHH", "qqYs24zA76543vu10sqVTkRnYu5AA89CCCC.....DD96wtrponmllllllTmUnor26CFbGGGGbFE#.Bz53utsrXpoVnUVr2y9#abHccHHGFbbbGGbFaED#EEaFGHcdddd", "SSTVqtw555x444ww3vtqoTlW0w7.#aGHdddddddHHG#A40XooVnnUUmmTTmUUnY26CFbbFFaE#.CB754210sZrYXWonor25BDabHddHGbaEDD.CCCCCCDEbHcdeeIIII", "hhOjmX0vww44x5yyz6w0qVUYuyCFHdIJJJJJKJJIedbBxsWnVoWWWVnUmTmmmUqu6CbbFa#D.98Azy4v1000sssYXWVor258.abcddHGa#.BAzy6z788.aHdeIIJJJJJ", "LLMhjnruvwx56zA8996vspos37DHdIJKKKKKKKKJJIHCxZVUVWXYqponmTTTTTXt59FFEDCB876yxw210ss0011sYXWpsvyBDaGcddHF#C8z54v34yzA.aHeIJJJJKKK", "LLMhkW0wxyzAB9..#DA41YXsvyBEHeJKKKKKKKKJIda8wZVnWXr0ZqonlSSkkkVrv6998765432100ZZYrZ0t1ut0sYZ258#FGHcdHaDBzyxw3v3xy78.aHdIIIJJJJJ", "LLMOlX2y78C.#EaaFa9630Y02469adIJKKKKKKJIdb.6vrVVpr0u0YWUSRjjQQTW036yxw210ZqpWWWppXYstuv2uu12xADGHHHHHF.Ay3vvvvvw56AB.EbHdeeIIIII", "LLMPmrw89DaFGHHHHGDAxustuvw6CGeJKKKKKJIdGDAxuYVoqsuwuZWmRQiPPPRUX0v210rqpVmlklTUnWqZt23wwww5ADbdedcHb#85vss01234yz89.EFGHcddeeee", "LLMPn0y.EbHdddddddF96311111wAadJJJJJJJeH#8y3tqVWrt3530pTQPPhhgPknpZYXWnmlRPOhPQkTVprtv4x5y6A.bdIIedGa96vsppYsu3x67BC.#EFbGHHcddd", "LLMPV17aGcdeIIIIedGDAx2110Z1yDcJJJJJJIda96wusqVWZu4z4tpTiOhggNhiSUWVUTkjPhNMMNhikUWrtvxyzA8.FdIJJIdG#A4tXmUpr13x67BC.##EEaFbGHHH", "LLMPV17aGcdeIIIIedGDAx21tsrt5.HIJJJJJIcEBy31ZXVWZu4z4tplPhhgNNhPkmonmlRQPhNMLNhPRmoYtvxyzA8.FdIJJIdbD7w0pTmWYt3x67BC.DD##EaFbGGG", "LLMPV17aGcdeIIIIedGDAx21tsrt5.HIJJJJJIcEBy31ZXVWZu4z4tplPhhgNNhPkmonmlRQPhNMLNhPRmoYtvxyzA8.FdIJJIdbD7w0pTmWYt3x67BC.DD##EaFbGGG" }; xscreensaver-5.36/hacks/images/timetunnel0.xpm000644 000767 000024 00000204453 10256614436 021505 0ustar00jwzstaff000000 000000 /* XPM */ static char * timetunnel0_xpm[] = { "256 256 84 1", " c #5D699C", ". c #5A6EC7", "+ c #596FD1", "@ c #576FD7", "# c #566FDE", "$ c #6172B3", "% c #5670E6", "& c #6477BF", "* c #6076D2", "= c #6377C6", "- c #6277CC", "; c #5876F6", "> c #607AE7", ", c #5D7AF0", "' c #627BDE", ") c #6982D1", "! c #6582DE", "~ c #6882D8", "{ c #6D7FDC", "] c #6284FD", "^ c #7088D1", "/ c #6886F6", "( c #738ACC", "_ c #7185EF", ": c #6C89EC", "< c #698AF4", "[ c #648DFD", "} c #6C8EE7", "| c #748BE7", "1 c #738FDE", "2 c #6D94FF", "3 c #6B9BFD", "4 c #7796FA", "5 c #709DF5", "6 c #7A9EDD", "7 c #7C9BEB", "8 c #8A99D1", "9 c #73A1E8", "0 c #8198F6", "a c #8895F3", "b c #819CE6", "c c #7D9DF7", "d c #89A0E3", "e c #78A6FE", "f c #76ACFD", "g c #83AAE9", "h c #72B3FF", "i c #89ABFC", "j c #80B6FD", "k c #92AEF9", "l c #7DBFFE", "m c #8DBCEE", "n c #9BB7EC", "o c #8DBCFA", "p c #9FB4F8", "q c #97B8F9", "r c #7AC7FF", "s c #AEB7EF", "t c #80D5FF", "u c #8DD1FD", "v c #99CCFD", "w c #89DDFF", "x c #B1CAFB", "y c #A8D3FB", "z c #82E6FF", "A c #9AE1FE", "B c #CCCCFA", "C c #B3D9FC", "D c #87F4FF", "E c #93EFFF", "F c #A8EAFE", "G c #B6E6FD", "H c #C5E0FC", "I c #99FDFF", "J c #AEFCFF", "K c #BDF7FF", "L c #E7E9FA", "M c #E4F0FD", "N c #D9F6FF", "O c #C9FFFE", "P c #D7FDF8", "Q c #D5FFFF", "R c #ECFFFE", "S c #FCFFFD", ";%%;,,,;,,,#,,,,,,/>++#@@#+.+++@+@@+@#++..++.+@+++':|1gAAFAv9e}32<::||01|44cc111e777iikc77ibGSSRRRRRRQOJIIIIIDIEEwwttwwzztj& ^$ iJEIDDIIIJIIOOIOROJEEJKKOQQMSBqqddb(bb^b1^^^&=~~:!<'{!!!!~|{::<::|{:{'{'''''*'''*''+'*++.'++++@+++@@#@@@@#>@####%%%%,#@###", "%##%%%,,,>#>###,//#@+@@@@@@++@++.+#@+@+#+++++++....*}55jAAttvAvomf71}:~~|~!~~)1~))1117c|}c1dHSSSSROOJJJEIDDEztrllhjjrrjjju2= $)= GulEEwwEIIIIIJOJJORQJJFKKQNSSBndd(((((((^^&&====~~!{{:<'{!:::::':!{:{:{:''''''''{'''*'@@+++.+*++++@@@#%#>>>##%###%#%#%####", "%#%%%%%,##%#,,,/,,#@@++###@++++.+@++@.+@+..+.+++++..*!5ehturrhjlvvvvvvmmoobbb7^^^(((d8d88CHLLSSSNKKFFEEEEDDDztwtrljheeeffj/- $)&$ AjflEttwzIIIIIJJOJIORRQKKGHLSssd(((^^((^(^&&&&)====~-'*''{<'{<<{!'''~'''<:{'*''''''>''''''>>@@+@@+#@#,;%%#,,%%%%%%%###%#%%", "%%%%,%%,%%,,]/,###,##++#@@@+++.+@@++.++++++.....++***-!}5erwljfhfffjhjjjjooommmomyCHNNRRRLLLSSSSSNKFFFFEEEEEwrllhrhhhffjef[-$$$)^$$ j32eEEEzwIEEIIIIIJOQJOPRRMMLSBs8(((^^(&$&$&&&&&=&&===--**_'_'_/_<_'''////__'''_'*'''''''''''>>>@@@####;%;%,>%%%;%%##%%#%%;", "%%#%#%%%%,,/#%%#####%@@+@@@@@+.++++++..+.......*.***-!}!:43jrleffe553c5e5b7igovvGKKQQQKCvmnCLSSSSSNFAutAwtwturjjhlfefeee33[-$$&=)$$$ $4342lzEEEIEwtwEIIIIJOQPQRRSSSB88(((^)&$&&&&&&&&=&&&====--*{'{'>>/_'_><'''<<<<<<<<<<<<<[<<_>#,###,%%,>,%%###%@##%##%%", "%#%,,##,,>###%%#######@@#@###@++.+@..++...+......**--!!!:::>,>>>>''>''<:::__//////]]/242[//]>>,>,>,,###@####%##%;;", "#,,,/>>##@#####%%########@@##@+@+++.+.........-*****!!!!:_/<<2hh55efefjfeiiivvvvoii7pbbbdgnySSSSSSSSRKAuuuuurlhhfe55e3333[[-$$==1(($$$_{!!:fztzwhhoruAEIJIJJFGGNSSSLd88(((^^&&)&&&&&&&=&&=&====-==--****+@>>@>>_>>___'<<<>__2,,,,,>,,],###,%##%,##%%", ",,/>@#%%###%%%%###%###@#%@#@#@+##++.+++.+....+***'''|!!!>,>>>>/>>/////_'_'__/__/<2/>],,,],,,;>%,%,%,,,#,%,", ",##%####%@#%#####%%#@##%%@@#@@@@@@@++@+.+..+***''*'!~!!|::<42cc3hrrtturje3:|~||~}177^^^^((8xCxMNNKKQROJJFrglo99f55}34322>>,>//>/>'_>_'>_/'<_<__/<32/>,,>,,],,,,,%,#%,##,]", "%%%##%%@%#####@@###@@@###+@@#+@++#@.@++>+++****''*!|7eeie43ceie33fffee2<2<:|~~~~~|77)1^^(((sdnHHCGKJORJIJErlj9iee5}344<<<<[)&&===&&$$$!---===1oh5efjjvEzAAAJJKGNSSSB8(((^^^^^^)^&==----=----=--=-=-*-***+.++@'*'_>]]]/////////,,,]]],],;%,,,],,#", "#####%%%%%%%####@##@#####@+@@@.+@>.*++'*+''*'*!!|cfjfi333233[/]_'':[22232<<4|~|||1c)~1^^((dd66xnvyAJIOOJIIIurjb55534:<<<<_/!&&=-=&&$$$-==---==1e551b9rtuuuwAAAKRSSSBs((((^^^^(^(&&&=----=---==&=--*--**''''>_'_<__>>///////_<]],#%%%", "%#%;;;;;%%%%#@##@++##@@@@@@##+++@+**''''''{!}9ei33e5222/[//]/'=-&==!<<<2222:34|}17|~)1^(sxsddgxnoouAEIQOIIIIwof555332<:::_/~&$&~==$$$$=-====&&&~33177luuuvmuvyCNSSSB8d8((^^^^^^&&)&=======**--*-*--****''*'_''///'_/////,//2>]///[<22[/]]]]]//];%%%%%%", ";;%%%%%%%@#%%###@@##%%@@+@@@+++++**'''':}5e5e3::<[2<[[[//_>>*-==&===!<_<242444}c7c~)~^b(dxnddxLCymvvvFJQQOIEEu9b75344<'{__/!$&=)~=&$$$&-==&=&=&&~}1}5jommmvvmmvNSSSLss((((^^^)^^&&)=&==-*''___'**'!'*''_'''>_///_'__////[2[////]>>>],,,,,//<[[/[3[[]]];;];;;;;;;", ";%%#%%%#%%#%###@@#@@###@@++++++''{'':4ce3342<<<'<__/[[2ce2///>>#,>>>,,,,,,//2[22]//]]];;;;;;;;;;", ";;%%%%%##%%##%#@#%@@@@##@@@@+@@':|||44:4::<'_>>>>>>>>,,,,,,/3e2]];;;;]/]];;;;;;", ";;;;%%;%%%%%########@@@@@@@+'''{044|::!:<<'>////[<<::!!-~-{--===&&&&&&==!:::4eij3::!~)))^^^(xxvyAuvrmlrlrEJOKwtAj771||:::_2{===-~)))^&$$-=&&$&$&&&$&^99966gggovvnxLLLSB8((^(^^&^&^&~!:{'{!~!~-!~{'''_''''{'''<<<<<222522[[/''_>>>>>>>>>,>,,,][//]//;;;;;;]/];;;;", ";;;;;;;;;%;%#%########@@@@>>'':244:::<<<<'::::'!!-=--===&&&&&$&&&&&)::4eqc2<:!!~~)))^ds86ovwEEulllruDIJKwwAmjiccccc42{===--=&&&$$$=-&&&&$$$&$$^969bbbbggmngnLBBLLL8(((^^^^&^)~~{!!!!~'{!{{!{{_<'!'::'<<<<<<242<<<<>/_'_>>>,>>>/>,;,///;];;;;;;]]]]]", "]]]];;;;;;;;%%%%#@@###@@>>_/__<<<:<<<<<_!!!:!!{'~=--!====&=&=&&&&&&&)|0qc2<<::!!|!))^dd((66guAEEwrruEIIJAtwu77c7eieci~)&)--==&&&&&===&&$$$$$$$(b996bbb6goqqdBBBBBLBs8(^^^^^&)~~~!!~!~{{'{!!!{''':<<<<<<<<<<__<_<<_<<<_<___///_//_>'>,#,,>]]]//]]]];;;;;;;;", ";;;;;]]];;;;;;;;%#%#%@+___/_]]>_'*!!:|!!!!~~~{!~==&===&&&&&&&&&(de::3<:::|!~~}7bb^(bbb9jrtuuutAIIIOurwf}}55335511c|||~))&&&$&)=&)1^^^^^$(b666bbbbgo8gdssssBBBBsd(^^)))~)~~!~~)~!!!~!~!:{!::<<<:<<<<::<<:_<<::':'______/__///_,,,,,%,,;;]]]]]]];];;;;", "]];;;;;;;]//]]];;;;%;@____''_/<<<>''!!!:}}}::|~-!:~~)&&====&==&&&&(8():<<2<<:!}|}171b^^^^11b9jruljlzzDJFrtr7333533:}}11cicc1^^&$$&&&^^($(((((og66bbbbgonq8sssssssssspbb^))))~~~~~)~~!!!!~|4:::!'<<@>,,>,/>>,],]];;;;;;;;;;;", ";;]]/]]];;;;]]////]]/3///_<<<<<<<<[///>'>+*''!!:}:::|!!!||~~=)=====&=&&&&(d(&&&!<<2[+.@@@#,/,,///]]]]];;;;;;;", ";;;;;];]/][/];]]]][3e33222[[/<>>'*'*<44::!!!!:!~!~~))~)===&&&$(d8$$)&&$~<<222!|771771111177775hjllrutrJe35fljllj5~~==~~}~~)))^^^111^^&&^$$$$(og6666dgoqqqxssspsBBpppdkbb711)))~~~~||||||}c:2:4<<<:::{{:{::::<:::::{{{'::_''>@@@+@++@@@@>@>/<332[/]];;;;", ";;;;;;;;;;;]//[[/[422223eff33232//[_/__''*>''<2:<:!~!|:{!~~~~~)))==&&^(n8$&&=&&&==:<<20acc111111111177555hhjjruAr552[<<<''!!!~~}}}!~~))^&&^^11^(&^($&$66g66666ggddxsppppssssdkbbbb7b1111||~bb7c4|c044::::4:::{{~!:{:'::{*:':{::{'**+++@+++++@+@@@##>@>,;,//2[//]", ";;;;;;;;;;];;]]/[2e333333333eeee3324[//<'>@'<<<<<'!:!:{:!|!~~~~)~|11bkd(&&&&=&&&&&=!:4c4011111111111}1715efhlruEwf322*--~~!|}}1~~))&&&$(^^^^^^(($$(6gg66(6g6dsBspppppssssdpdb7717cccc7oyxCi0|}||:<||:_:<::{!!!|:{::{!:{::{'-**'+'++++.@++@+@@@##%#%%;;;;;;;;", ";%;;%;;;;;;]]]//2222233fhlhlfe33eehlfe532<>_/<<_'''::<'<:||!!|~~~)1171==&&===&&=&&&&7c04401111171111}}5115efhjrAte332[//***--!!!}}~~)))=)&&$$^)^^^((($(66gg666g6bnxppddppdpdpddpkiiecc7e77oi7bpcc||{|:||!:<{:::|{:{~{{::{::{*''**'*''.++++++@++@@@@#@###%;;;;;;;", ";;;;;%%%;;;;//[222[23e3ehhfflhheeeeehfhhjl53<<_'''{'{<<<:::!~||~))17)==--====&&&&$$11^14244}71111}51}}}5}55ffhrEuee32<<'*****!!!:!!~~}~))&&&$$)))^&$^^(666gggjggbnppppdddpdpdkpkkqkii7cc77j77cp7c||!|:{{{::::{::!|{!!:{|!!**'****''''.+++@+++.+@@+@#####%%;%;%%;", ";;;;;;;;;%,]]//<33333eef33eeeefefejjfjheejtuhh3::'!!'<:24:::!|||)11)---=-=-==&=&&&11^^^1c5e577751}}}}55}}}5ehhlEhfee32/'*+'**'!!!!~~~~====)=&&^&)&)&&&((oogjoogoggspppddddppppkkkppki7cc7ij7c1pkic1||:!|!::::{::::!!!::!*-*'{*-**'>'>++++++++++@@+@@#@#%%#%%;;%;", ";;;;;;;;;]],/23flffeeee3223333e3e3ee5fjljjrumhhjje554|::::{!|||cc~---=----!~==))11ki77777efjfeeee55}555}}}3flhrIe333e3<''.''*!!!!!~~!-===&&=)&^^&=)))=))brvvoggoggnnpppddddpppiikpkkkkieiiji77kiiccc||||!{:::|{::!{!{!**-!'!*{{{**'''@+++++@+.+@@@@##%%%###%%%%;", ";;%;;;;;/33efjhhfee33ee33322[[2233e3335efhrrmvjfffljjfe}|4:!:|0||!!---=---!!|}75c7eb7171117fffee7555eee533fljhzw33223[[<''***!!::!!~!~=~~====^^)1)~~154}~9momvmmmgnndddddddppp77kkkbkkk7i7k77dpkiccac0:|~||:|:{{{|~!'*''--!*'{'{{:::'@+++@@@+@+@@@@@###%%@#%%%;;", ";%#,;,:jjrrhrllje333e3333322[2[[23e5333cefeeefvujheffjomjee10c~~!{------!-!}33ccc17b5bbb7bberttrof55fe533hlllrEr3333[[//>''**!!!!!!!!~!!|}}}15ehjjlhe}~~^^9mvvmmmmnnqdddddkkppbiikbiikkpkbkbiqqjkii77|||||44:|||!!!!<:'-*!*-{'{***|:+@@+@@+@++@@@@@@###%###%#%;%", ";%,,}hrhfefhfhlhff33333[[22222[[22332[223jfeceeooojihifffomvj7}!!{!-!---!24c5cc3355ff99999hjjtEurlrrlfeehflllrJeehh3322/'''-.-'232", "th322[22233e2[//2//]//[[22////[//<<<<[3eie22cecijecciic0ccc4|||||}eifjjoAroh555551}~19h55155ejjjjurrrruEDzzDJwhhfhhfhlhjfe5235fff5332:::!!!!-!~=~~~=))))))=))=&^gAGuyuoyvvvvvvxxqkkdddddddgoqdddgkkb^77111c}|0a||ac|))~-!:{----*---*---**.++++@@+@+@@##@@@#<323f", "f3322[2/[2[2///////]][//[[[////<[2<<<<222ec4443ciooic33ceccc|}||ceeeeefolruvllf5}~~~~5ff5fefjhltwurruwEEzutDArlrrrlhhhlflfeee3333e33}}:!!!!!!!!!!}~~~=)))))=)&&&^GRNAAvvvCxvvyyxxpdddddgdggogddbbbdbb7717c11cc|||a1|1|a~~-----*'--****-'...+@@+.@@@+@###%>3223hu", "3[////[/222///[/,//]]]///[/////<<2<<<<22<234:444ciiie44c0c0cc00ciieeefjffhojmuwj1:!!}}jheehjhrAwtuutrtEEwzwwrhffhhllllfefhhff3333333333:!:!!!!!~!~)~)))~))))))~))nGQRJEAmmyxxCCyvvqgdddddggogbbbdbbbb77777c7c11ccc1)|aaa~-==--*-*-*****''....@@@+@@#+@@#<323frll", "/]/]]]/[[2/]]///]]]]]/],//[[////<<<<<3322434400cc0:4cicc40cc00ciiifefjhjjhffjofiff1}:3jlhlrrtAwtwwuruzwzEwuAhfe3353fhllllhhfhff33223::}2:}}::!}~!~)~))))))^~~~~~)oCyFQKEAvmHCyyGyvnggbkd6dgojkbbbbbbbb77777711cc71|||||a|{{-=--=--*--*******+@@@+@+@++@}233htle[", "]];]]///[[;]/]]],]]/,>],/],/////2<[<43332224ccc}::24|0eicccciiiiiiifolroffehfcc5eifj55flurwEwuwwurrrzzzwrrAtjeefe3e3efhlrllhhhefe332<:335535}}}}}~}}~~~}~~}}~}}}}oGxowKQFAAvGCyyCGvnqbddgdqo9bg6dbdbbbb7b7b111ci1||||~)||~~~===-*=------'*+>@@>++++.+#533hrlf32[", "2[[[/////]];]]]]]]/,,,/]/>,/////<:'>>++@+@/lfhwzrhee33", "//233333[[/]]]]]/],]>,]>//]/>////:<234::44eof44!!{|:|00acikkiceiifvvoohf5hh444343fifotEJIIEDtrrrttDIElrlltujfhfeeffjlrfeffhfflllhjlhhffee3533}3}333}333}3}::::}1^6xndddguKOJEFQGGFGGymgggooogggg6gdddb777b1117o71)1~~~)~~~~|||~~=-------!'*'*_>+,,/3rhrwrhff3[22", "//[22[22/2[[[[//]//,,,/>,>>////>/_<4444444ie344|{:||||0cccckojiiiovurojhjf34:333ei5hrEJJOJEturtttDEurljfjAhffeehhhhhllhhlhfflrrrrrrrljrhheeee3535353333}::}}}1^^^(xndgdd8gFOKEFQKKKKGCmoomogqggggd68dbbb^b777gd111))~)~~||~||||1)~---!---{**'>.@/2errrrhf3e322[]", ";]][//[[/];]]]///[[[[//////'_>>///<34::|434434|||||00||acciijovovuAFvjjlh33335eefhrwIIIJJJJEwtutDAlejlhhturtwwwzwwzwzDrrrrrwzzzzzzwtrrrhljfffeeeee3ee533c}1111^^((xndg66d66uKOJFOOKKKFyxmvooggggggggdddb^bbbbg^^1^11c11}1|11||c7||1~==-!!:':<>>[[errrhfee33[//];", "]]]]]/]][[]];],]],]//////////>>//<34224334444344||0|||10cciffjouFEFAAuAve3eeeeehrwIIIIIIIIJJEwwArhloAEEDOIDDDIIDDDzDDIDDDDDIIIIIDDzwwruurlrljhjhfeefe5555b7^^^^^^dxnd6666666mFOJKOOKOKKCCCngogggg86ggddbbbbbgb11711111111}}11}17c1c1|~~~!:<_/<[/3wwlfffee[/]]]/;", "]]/]/]]]]],]]]]]],,,],/]]////////222:c34:<44444400|||||ccejvvvvAEJJEFFAvvjjhfhltDIJJJJJJIIJEJEtruFJOJJJQOOJJIIIJJIJIJOJJJJJIIIIIDDzzztutttrurlllhhef55517999^^^^(6xndddd666666uFOOROOQOKFGvnogogonggggdbdbbgg^)^1111111)1111111111cc111}!:/4j3[2tzrlhffe3/]]]];]", "]]]//]];;;]]]/]]]],/]]],,>>>///[[e33344::::4404c||||||0ioGGCyuFOQOEJJJJKKKFEEEJOQOOOORJJIEzEFEJKJIIIIIIOIIJOOQRSRRRQNQNMNNGKKOOQOOOJJJIIIIIDEAzwtrhhh999999^^^(((6npddd66dd6d66gyKQRQOOQQKGCvmnggooggg6dbddvb^^11111111111111111}1177cc1c7ehl35wztlfee3e[]]]]];]", "]]//]]];;;,,]]]]]],]]]]/]>,>>///[335e2<<<<444cccc||00ciCGAvuurEJEwttAAFFJEJOOOOOOJJJJOIIEEEEJORJIIIIIIOOOOOQOKJEAzurrtlefe3eflrtrwwzDIDzwwtttwtutwtuwtrml69((^(66oyngg6gd(ddd6666mGQRROOROKKGymmmmmgg66bd6mgbbbb1^111111111111111111c77eovoujfwIIDzulle3/]]/]]]/", "]//]]];;;]],//,//],,],/]]]/,>///2232222244424333c400cjFFvvuuAAIwAtuuvlAFJOQQRRQOJIIIIIIIIEEIIOJJEEIEDIQIIJEwturrllhlltte332333hhffffhjlruurrrhh9h99jjllgjjgj9gg66oynggg6d6666d66666mNRRQRRQKKKGvnmgg6gggggC6bb77^bb7711^1111111111177cjvyvFtuFwhflrtzrf3/]]]]]//", "/[///,,;;],],,]]/]],]]///,,,///23322222<<<4223ieecccjEAvvAyuFEEEwuurjlwJOORSRRRQOJJIIIJJEEDIIEJJEIDIIOJzztrllfffflluuzDre33e5lrrllffeeehe5eehlhhh999999b999996696vGymmm66666d8666666nyMRQQRROKKGymgggooggymbbbbb7bbbb77b7)11)1111177iovvuAJEJEle2[2fuwuf/]]]]]//", "[/]/];,]],>/>]],>,]]]///>/]>/[/e332<4222<<<[23hooi4fJwvuFAFAEEDElrrrrwIJQRQQOQQQQOOJOKEzEEIIJIJKOOJJIJttrjjhefhfjlruzEDIttwzwEzwrljfefe323335}115f9997711999999((6Cxmggoogg66666ddd6gqmGRRQQRRKOKymogggomGndbdbb7bbbb7^771111111^b9ovooeiAJIJwlh3<[[,,,>],]/,//>/////3e242<<22<<<2233eruhjJEtAJFAKFEJAllrtAJJQRJOJJJJOOOQRRJJJEIEIIIEEJROEEJwurjfefhflrrrwEDJOOOOOOQJDrlffe3333::}}}~}}~11151117^^^^^^^^6nnqg6g66b6gg6gg66666gxmGQQRRROJKCvmmvmCCgqggkbbb^bbbb1b^1779gjgfecc4cefjAJAuofi53,],>>,,/]>/////23i3[<<222[2<2233eeefrEIIJJIEFKFJFjlrAKJQRJIIIJJJIJJRROJOQJJEJIIIIJJOJEIEuullhhhjtIurzJJOJIDIIIIOQzrle5f23::::!!}}|~}~)~))^~^^^^^^^^^byqd66gg666666g6ggg66nnnnCGQQQOOOJFCvyyNxqggggdbbbdbkbbggoooq9i70|:4444ijFErooiiec52<[rwhe2[[[/", "/[]]]]]],,,]>,,>>,,>>/////223e3<[[<2223222323333etIDIIIIIEKKJvuAJJQQJIIIIIIIIIOQFEJOOROOOJJJJJJEKOIJwuurrrrttzwEKJEIIDDDDDIJQthhf325c334|:}:}}}}~}~~=))=&&&&^1^^^gngb66666ggggg666g6ggmoxxnxyGQRRROJKKGGMynnoooymqgggomomomoogia000cicccioAFmojfjjcic[22utfe[//2", "2[//_/]]]>/>>/>>>>>]>_/<2242e32<2<2222333243542elEEzEIIEJJJOKKKJQQJIIIDIDIIIJKEEAFFJOROOQQQOJEEEOQJJwzuttwEzEJJJIDDIDDEEJOQArffh523:c3}:44}:|}|}~)~=====)&)&&&&&^6ngbbbd6d66666gggggggonnCHCHGCKRRRROOKQRGCyyyxCHCGGCvnxnddb77ccccc0c00ijAvuAvooqvvqqqieiAtmf343", "iccccc4424422<<<::<_|a44442352:2422233efe33e322fzEzAAIIIIIORRRRQJIIIIIEEIIJKAutwFEEJOQOQRRQQOKEKRRJDEzzIIIJOJDDDEDDIEEJEFwrffe3e333:}c3}||}|}!!!~)))==~==&&&&&&&^^kd^((dd(dd((68666666gggnxnnnyyCGQRSRQRSNQQNNQRRRNMMMLLLLCxxssssppppppxyAvvGGyyxqxCxxxoqvKAvoji", "jiiiccc0c4c0cc4000iiiiiiiijjiceccciiiiiojfffeefuIzDtwEJJJQQRSROJIIIIIIIJOKurlrutwJJIJJJOOQQOQQQRSRJIIDDIOJJIDIEDDDDEwrurlllfe35e222:43c4|}}|!:!~}~~~)===)&&&&)))^^dd^((((((((66666666d666dnssdnnnmCGRRSSSSSSSSSSSSSSSMRSSMnppppqpppppppxCGvoyyyyyyxxxCxqxvyFFAyo", "iii44444222444ac0a0a0ciicckc0ccciiiiqqooovyvyyAKJKJKJJKRSSSSSRQJJIIJJJJFAvmomvuwwEEIIJJFEJJOQRSSSRJIIJOOIIIIIDEzDzwwrrrlhhfe3333<:::::::}}::|!!!~~}~~~==))&&^&))^bdd(((((((((666((((((((666nnnnnnvvvAKRSSSSSRSRRSSSSRMRRRMCvoqkkki7cccikoooqqqoqqxxppqxCHCxGGyyo", "kkkiccc00000c44442444444ce44:440cciiiiiijooovFOQOOJJORRSSSSSSSSOOOOOQKAAAvvyvyttAJJJJIEEIEEJQSSSSRRQROIIIEzzzDDzzttrlrrlfe332[2<'<:2:!::}}::|!!!~}!~)~~~~)=^))&)^bdg(^^((((((((((((((bd6666gnxvvvvvvvyCNRSSSRRMSMMMMRRRRRSGyvxvvoqjjieeijfiiiiiiiikkpkoxyxxyNGAy", "occccc00iciic0044404444cc3442:4cc43cc4ciiiijjvKQOJQRSSRRRSSSSSSRRQRQKGGGGKNNKKKQQROOJJJJJIKRRRSSSSSSRQJIEDEEzEzzwrrlhfhhf33223[///':::!::}||:!!!!|!!~)~=&==&&)&)^bdg(((((((((((((((^(9999jjjovxvmmnxnnnxCCNSSSSRNGCGHNRRRRMyvvmnvvyvoojjfiii5eeiic00ccqxqqxCCNKG", "Gxicc40cc4404440404ccccic34000ci00ccccciccijoAJJRRRSSRRRSSSSSSSSROKKOOOOQQQQQQQRRQQRQQQQRRSSRRSSSQRRRRRQJEzwzwwturhfffefee32[3///<::4::22::::}!!!:!~~~)&))^111^^^^d(b((((((((((((((99jf999966gnnn888psnssBLSSSSSRQKFGvNRRRQCvooooqnvCCuvjiie77iii0cceiiiiiiipCGG", "CGoccckii000c424244c444cc0c0ciiqkkpkpqqxxxyGKRSSSSSSSRRRRSSSSSSSSRRRQRRQRRRSSSSSSSSSSSSSSSSSSSSSRJJORROQRQKFAwtwrlfeee5333e332[[2<<[:3}}}}:!}|!!!~))~~~)^^&&&))^&^b(^(((^(((^^^9999e9969b^^(((888d888pssBSLLLHGNRRRRQNQQRRQGmoooqqvvoCAAmifee7eiiceeeiiiiiiickyG", "GGyqicc04cicicc44444c40cikpppxxxxxCHCyxxqxCNSSSSSRRRRRRRRRSSSSSSSSRQQOOORRRRQQRRRSRSSSSSSSSSSSSSQOOJOQKOOQQQKAtwuhffe33233e332[[[<22/<:!}!:!}}}}1}5}1~)&=)&=)))^^(bbb9b6^(99b77b9^^71^(($$$$$$(8d8dd88dsLLLLHxpqvFKQRRQRSSRSNGxoijjvvmFKuoee7eiceicikqckiicic0iC", "yCKyoqc0424c4ccciickqxxxxxxppkkkppppqppxHNRSSSSSRRRRRRRRRQQSSSSSSSSSRQQOOOOOOOOOORSSSSSSSSSSSSSSROKFwuuvyGKKQQKFuffee3ee3ff2222[['!!!}5f91)$=&$$$$$$$$$$$$$$$$$$&&&&$$$$$$$$$$$&^k7bbbBsBBsxyvo7c11|17ikxHgmyAFFKKFKKQKGCqqqqqjvHn02<22[2224", "2ccvKRRRNHGCCCxxqiiiiBMHyGNRSSSSSSRQOJFEJOQJIIJEFJJJJQOQRRRRSRRRRSSSSSSSSSSSSSSSSSSRSRRSSSSSSNRyfiefffffhjojjolifhhfe5eovGQRNGAmjhf333:[<<<:1oc<''>>//2551~&=$$$=$$$$$$$&$$$$$$$$$$&&&$$$$$$$$$$&&))&^kkb7dBBBsspyvo771117kbnNd7iomwJJJQRNKKCkkkjoHH7>-&&&&=$&&&$$$$$$$$$$$$$$$$&$$$$$$$$&$$$=)==)^pdbbsBspskkyvq77771i7kNp77c7jtFJOROOJCojovNvc2<<__<<<2[//", "e3322floGNRRHCHMSMHHKNRSSSSSRJJFKKAvlolwORJJIJJJIJQRRSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSRRQNRSNNRGHGe35e5533e55fhmlvflvlofie52<2>,_-=$=$&&$$$$$$$$$$$ $$$$$&&&$$$$&&$&&=&===-=^pbbdLspsp7kCvk71^17bbyC7i7ceooAKOOJJKAAGK94:4c4:_//[[/24", "ee3323jljvvoxHMSMMRSSSSSSSROOOGGGyoojjvJRROOJJOQRRSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSRRRRRNNyojv533333efe35ehjljfficccc4<<:<::!:ciCMMCq}:::!!!!!-{!{***-*++*+>>*-&$$$&$$$$$$$$$$$$$$$&&&&&&&&$&=====&===&(pddsLssxk7jyvkxd1^i7gH7kioojjmruNOJJKKyjic444444_/_///2", "c433c43jhfejjiiyMSSSSSSSSRSRNKQNyxvxvCKRSSOOQRRSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSNQGCvffov55efeeeff5ee33323c_<<<44_4_2::||::|cxHMHqc|!:|!!!!{:--***'***+>>>@.&&$$&$$$$$$$$$$&$$&&&&&&&&&&====&&===&&^pddLBssp77jyvCGb1i77Gkkiijfmuj7jvHxm97ccicc044c42_///4", "2e3444ciffhevoHRSRSRRSSSSSSSSSSMHHHHNORSSSRQRSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSMNCyAujiffjove5ef533<<2[[<][[<>____<44::::::::::{{|pxMHxb|~|!|!!!---*********+>,+-=$& $$$$$$$$$&$$&==&&&&)=&=&&&=&&==&&&bpdsLspxk7ioCKQm177iCgi7jooug777fj!|0440444ci000044223", "e2222243fjuGRSRQQQQOJFGHMMSSSSSSSSSSRSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSQNCqfhjuffffjfij2<2<<<<[/<<[[/[[>@*>@>>/<__/_:_:4:__|:{|7nHMCq7~~~!!!~-!*'**-*{**'++>@*=$$$$$$$$&&&$&&=&&&=&&&&&&&&=&&&&&&&&1kpLBsspii7vGNKg77kyoiijvto}}75j5~{{:444::440icciqooe", "i33e323jyMSRQOOQOJJAwvjjjppxLMSSMLRRSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSRKGvrjffhuhe5c3340c<<_/>__//<<<22<_*''*@@@>/_>>_____4_a____|~|pxMMxd1~~!~!!-!***---***'**+>*-&$$$$$&$&$&&=&===&=&&&&&&&&&&&&&&=&bksBBspkk7bCGQGbijmyiilwu7}11bj1'*{{'_:::<<4eiijjoyv", "voiffvMSRQOOQRROEEAwlic44cjoqqxMMSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSRRSSSRNGAlolfe3je<<<<<::|:{<__'''>>//,//>@'*>+@>'+>>@+++_*_____4aaa__||bsHMHqb~!!~~~!!*----*****+++>'-=$$$$$&&&&&=====&&&&&&=&&=&&&&&&)&bdBBBsbi779AQQvjojHjjwwe7111f9:''''/>>'_4<<24ciivyy", "vvyHMSROJJQRQJIIDFufc4|4443iovvoxyHRSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSRQOQQNGvljjfii423f[_<<<::|0|:{'!'''>/////@+++++.+>@@'>#@++@+'>'''_{_|_aa_|{1pCMMyd~!!-----!-------'-*+''''=$$$&&&&===&==&&&&&$&&&&&&$&&&=&^bsBLBpk777vKQKojgGjuE971}579e''___/_>_'>>_2223ifvv", "NMSRQOJORROIIIIEIAicc0004cecijvyCCGRSSSSSSSSSSSSSSSSSSRRRRRSSSSSSRRQKFArof35333442////++..@*@++@@+@>>@++@@'>++@+''____aa_aaabnHMHq1~!~=---~---=---.'**'>>*-=&&&=====&&$&&&&&&$&&&&$&&&=&&^bBBLxkk779AQRGjoGjFo}57}}555{*_///>_>_'>'__4i5efj", "SQOJORRROJDIIAwuuueic004ciiiiijvFKRSSSSSSSSSSSSSSSSSROOJJJJJIJJOJFAvjjjee3222222>/'*.+*@@++@@@@@+@@>>>@+@@@+++.*''{__{{|aaa7dxMNnb1}~)===-!~!{---**-**'__*===&&=&&$&&&&&&&&&&&&&&&&=&)&^dBLLpik7ivQRQvgFmm1}77}}5e}'''>>'_>>>'>>>/23eyHM", "OJORRQOIDIEurtlhejfcccciiiiiiifjmKSSSSSSSSSSSSSSSSRRQOOJOJIIIIIEwrheeie332@@@@@@@@+++++.+...**+*{{{||aaabsHNyk1~)))=---!||1---*'**_/>'*==&=&&&&&&&&&&&&&=&&==&)~~^bnBMBkki7oKSRGoKr7|}e55555~*+>>*'_/>>>>//3fyMSRR", "SSSSSOIEErjojovjeeoeiiijjifiifijAQSSSSSSSSSSSRRRQJJJOOOOJIEJEwtrre323e24[///_//_/i<<':{:{!!~--~!*''!''<''.*....+.+@@@++'>@@@>@@>@++@+.+@++..++**{'{|||aa7pxNHob})=~=-~-~~|~----*'///<:*===&&&&$&&&&=&&&=&&)))~)))bxLSsiqiiyRSMvFf5|c7fe55e!'>''_>_/<[33fyMSSSRRR", "RQOOOSJtliec4covofjofiifjjjiqjouQSSSSSSSSSSSSROJIIIIIJIJJJAtvjjfe32/2322[/__////c<_'{!!!{{!!={!--'!!''<'*.-..++.++++++@@@@@@@@@>>>@.++.@++.+....**-~{{|{)a7knHNyk1~~~~!!-))~---*''':<_''_'<<25oHSSRROOORR", "KIDIORAlj3e44c5oojovyojjiiijjoAKSSSSSRRRSRRROJJIIIIIIAwtwvooojef54/[<2[[///___/5c{'{:{!~!-{!-!!--{-'''**..*+..@+@@@@@+++@#++#@#@>@>+++++..++++.....***--{|||7kpxMCq7}~~~~~))-!!!*{!:'__/>_--&&&===&&&&=&)&&))~~)))1sBSspxqoGRRNye7}}7ff5e:>>'_<<25jHRSROOJOJOQRO", "zEIIIGeiiiicccefmvmmuyoqqfjjvAKSSSSRQOJJKQRQOJJIIIIIwurlfeeiiiif42//____<3:@+..++..+.........**-{{{aa7dxHHxg1}~~~~~!~!:!!{'{''_''_{-=&&=&&&&====)=)~~~)~~bBLMpyvoyRSSv7i}cefh5h<''<<3fyMRRQOJOOJJOQOKE", "IIDEw32<<44eecccoAuvmvvovvvvAFQSSSROJJEFFJORQKJEEzttulfe52<3cecc42//<@+.++.++.+........-.---{{|1bksCHHmb71}}~~|:!!!!{{'''''__'*=&&=&=======~)~~~~~)xBSxxCvyRSSm7e}ifjhjh<<:5qHNRQOJOJJJJOQOEzwD", "zrffe/:<[<2<4cefoAtrjrAAuvAFJQSSROOOJFAFFJJJKQQKAuullhe32<2444c42___<<__<<''_3}{~!-*!------~!~!!!'!!--**'**++++@++++++++#@++@@+@#@##@@@@++..++.+..........=-.-=-{{|1bsxHHyok71}}}}~~!!!'!!'{'____*==&&===)))~~~)~~~-^HLMqCvyNSSC7f5efljl5}qHNQOQOJJJIIORQJEEwDDI", "3e33[/<<<[<<[<3ejoAAmovwuAEJOSSROJJJJJJFJJJAAFNRQAvjjf2#@+.....+..+.......-.*=----~|1bsBHNGvoi771}}}~!!!{!-!'<___/*-&&===~~|~)=~)~~-nxSCyCoCSRMefeejurAyMQJOQOJIIIJOROJwrjruzzr", "222[<<<<<<[/[2ee5eoAAruAFEEJRSRQQOKKFJJJOOJFAuvCRRKof3<__<422<22<<<<:<<:|:_<3:{!!!:{**------~-~~!!!!!!!*'*'***+@'+++@@@@++@@+@@##@@+@@@#>>>@...+.++++...-....---==-==~)17pBMNGGv9757}}|!!!!!!!'**''_<'-==)))|!~=~~-!!)HLMCxqxSSM7oouEFNQOJQQJIIIJOQQJEtlhhrutth3", "2[2<<<<[<[[<3332323ltrlvEIJQSROJJJKOKJJJOKFKGyvGGGMMC4<:<<:<<<<2<<<:::<:{!<3<:!!!!-{{*-===--=~)~115}}}5:'.'*+@@.+.++@@@@@@#@#@@#@@@+++@+#@@>++...+@...+...-.-..==-*----=)17dBHMGGvmf7c13}~!!:!!{{**'''/<~~))~!!~~~-~~~dBSxxqvRSMfFFNRRQOQOIIIIOQOJIErh5hhlffhre2", "[32/<'<[//23ee333333rhfjtIOSROJJJJJFKOQQOKGGNKQKyyyRRxa||:<<<<_<<<:<<<<<:_3<'{{{-{:!-----~==~}77}}~!15!:'**+.++.+@@@@@@@+@+@+@+@#@#@@@@@@@@#>@....++.......-.--===---.--===~17sLMCvvuo917~}}}:!!''{-'''<_<~~--~~!{{{!~~HLBxxoMSRGSRRRRRJIIIJQKIIDzlfefef32233233", "/2[><'@+@.+.+.........------*------=--=~akBMCoomvje71}}::<:!{{''{'/<'++.+@@@@++@@@######@#@@+@##+@@@@++#@+@@+..++.......*-----.----=-=.--=-==)|sLLCofjjhhhe5}}|:::<<@@@@++......*....--.**....--!!~!|}~-----)dBMMyoi755555efeifjjvAKJJQRNKOGMSRSSSSQREul97}}}~=-!'!!-{{<'<<<[[[/23", "[////[f33e353333eeerOQQIwuDtrrDDtrutEzljhjmhfhfee553}4332444c3:<:::4c4<:{|c|||~!|}!!~~~!|}}|---***-''+.++++++++.+@@@@++@@@##%##%#%#@@#####@@@@@+@@##@@@@+**+*.****...**....**!!!-*!~!-----=-)(nMMCofjfeeeifjlAFKKFwEFFKJumHSSSSSSSKm91}}~~---!!!!--!!'<<@@@>+..+.******..*-..-*!!-!-*--!--**-----~bnLRGyoiifjrFJFFtAAFFJJwtwwySSSSSSRm1~~-==---'{!-----''''''<2[2eh", "2[2[[2fehf32[[2eefrIRQItlhhAJuwAJJEAEEGyxnqvNGoojjfiec3c444<::4343i4440}||}}|||!!!{!!!}!!!-!*-**-.*.*..+.+@+..@@###@@@#@@###@####%###@@@@#@#+@#@+@+#@@+@+@+.+++'**++*+.-*'''!!-*-***!***''{{!~!~~^nMRNGyGKFArmmAFEJEwutEzEJMSSSSSC~~====---'------'''''{'<<22335", "233333je332[[23eflEJSOItlouvFJEJEEEwwEJOvyoqvFAvfieiee5c444::::4ce4:2:}}}|:|~!!:!!~!!!!!''!-_'''+**++++@##@>%%;;;;;;;;];,,,,%%#%%%@@##@###@@@@+@@@@@@@++++>_+.*'**'''>>_/<<<'<'''''*'**-**{{{~!~~-~^xMSRQAutuAEFKJAuwAEEIIOSSSSSS)-===-==*'*=---**'''<':<<223333", "3e3422fje2ceiiijvJORROJwuAvolKJEFEEAtwIRyvofjoAumjiffecc2232::4e54c44:}|}4!!:}!!}}:!:''''*-'>****++++++++#>,;%;;;;%%;;%;;,],;;;;;;;;;;,,;,,#+@+.@@@+@++.++++''@'_<<<<:<<<<2<<<<'/__<<<___'_:<:::!|7orvCMSRKNKJJJJwrrttAwAJRRSSSSH===-----------'*'>'<<42<<225333", "yxppccoyyovoqjjjFJQROJIEtmlrAuGJAzEzAwEOOAmhjfgtulrojhfe534:ceoe44c44}4::::::||}3}:!*****--***-**..+*+@#,;%;;;%##%%%%%%%;%;;;;;;;;%;;;,%,;;],,,>>>,@@#++++@+''.+..-**-!'!!'!'!!!<<<::{<<<:<444cejuurommuNSSSSROJJFEAAFFJJQNGMSSSd-----------******'<:cca|0cijovC", "qki77cqjovofoovAJJSOJIIErlurhhlFEztAEEJJJOwjjjf9ttrtwwrojefoule33cc33:::::!::!}}!:!-'*-*-*-**.*...++@>,;;;%#%##%#@#%###%%##%%%%%%%#;%%%%%;;%%,,,,,],,,,>>>@>@'''++++++.******-***********-*!!:5jj9b5eijmuFQSSRQQQKEAEJJJQGyxMSSSi:'**--!---'--*'*-!7xCHBLSMMHHHC", "oiij7ivojottvruJJQQJIIIEutujefjjAJzzDIQJOOOAumjjjutwEAuvvvvjec5544}!!|:!!|!::}!!!-'!-****-.**+*+*.+>>>,%###@############%%#%%%%;%%#%%##%@#%%%#%@##,,%,,,,,@+*.+**''''****..**'--.*-!}}}}~~11119orwuyMSRRSSQKJJQNyyvxMSSM3332<<''*--***-~}bovoojjoGGCvvyy", "ooojffrjhjluwwEJOROIIIIIIzrljrlhltJIIONKFKJKug99b9bjomoji71|}}}~~~~!!!!!|}}}!~!~!'*!********..*..+@>>>@##,,###@#@###%##@#%%%##%%%%%%#%%##%%%%%%%%%%%%,,,,>>>>>///''@>*''+''**+*''*---'<:|!~~~~^1bjojj9996yRRRSRQRRyvoHHMRSSM33333<'<<<<':}7jfjojfhjjoojyyvvv", "olfbe9ljlllruIOORRJIIIJJDzwttrujhhjvAvrrrAAKKmbbb^^b^^^^^~)~)}|~~~!!~!~}}}!!!!!!**'!-**-.*...++*+>>>@@@#@,####@####@#######%%#%%%#%%%%%@##%%###%%#%%,,#,>>>>>>>>>/]//////<:/>+'*+''+'!!!:::!!!~~~~19holf5559fbmHRRQNHHGxqoxCxSSMnoe3332:}}7ijojluttullrrjejoCvmu", "wwrllltrruuruEOOROJIIIIJztutulje5b5bbb966oovKNn(bd(bb^^^^)~~})~~)~~!~}~~}!:~!!!-*!*-***..*.*'+*>>@@@@@@@+@@#@#@@@+@###@#@######%;%%%%%#%%%%%%%%%%#%,%>@#,>>>>>>@#>>>,>,,>>>],>@'''--:::!!!!!!!~~~59fhh577eee579jCSSGmvvGHyCxxMSMCGAytwAAFEEEzwEEEEzwzzAwtllfvwAE", "wujj9jjejjffjEJOOIIJIIIOvjhfe557717bb66(dggqnCMn(8dd(^^^^11)~~~-=~~}~~~~~!!-!!-!--**+'**.*.-'@>>>+*@@@+++@+@##@@@#@@###@####%%%%%%#%#%%%#%#@#%%##%#%,#>,>,,>>,>>,#>>#,,;,>>],@*''*!:!,#>>>@@@>,>@,>,]]>>,,'''''!:!!!~!!~=}}7ifff77}55eefjvvvoijqCSNGGAGRSRSSSROJJEEEIIDEzzEEzwuturjrrrllhflut", "1~)&&^<<2455tEJQIArrrlrrutulojoruuuvrmmmmnCCLLLBd(^^1b71^^1)^~=)~1~~-~~~---------=---**..'-'*+++@+@+@@@@+@@@##@@@@%%###%##%%%###%%%#%#%%#%;%#%%##%#>,,,,,###>####,@>,,>;],]>>*'!''!!-!-!!!!~}55eee7}}5c}}5hoCv7ijojjnMRRKFFGRSSQQOJJEEztututrjfhhfh95555555}~bfh", "!&$$$&<':<<3zEJJEujjhjjhhhjuwumgggmmogggggpsss8d((bbb111711~^11~~))~=--~~-=---!----*+-.-'-**..+@@@+@@*+@@@@@@#@+@#####%%%##%##@#%%;%;%%%%;%%%#%#@,,>##>;#>>>#,,###>>,]]]]/>>'''''!!!!!!-!~!}c3e5571}3c}3eioo7bikiiiekjHRRKAvCNSROJJJEFzwtwwEtrhhfhe}4<::'''*=&c3", "$$$ &<':2####,###@##>@>>,,///'*{-'*-*'*!!!!-~}}c35}}:}533ceii5}|1iki7cejeioNRQFFFRNKJEtrurltwtrrrjhje2:<<::<* $(", "$ &<<<23tDIQIzrjjffhhfh99googgggmnnxxnxnnggggoo9bb117^111~~))==~--------****!'--**-'*..**--...+@@@@++++@+++@###@@+##@%#%##%%;%###%##%%%%%%%,,%%%%,,%#%#@#,,,,@>,,,2h<>*'****---*'!!::|}:3}5}}}2244ce3}4cie5cccikivjiiekvKOKNSNAAEJJDtrrlrhhe32:'{!--=---& $(", "$$$ &[/<2hzIIQIwrljhhjhffffgoooooggggqxxBBddgggoggbbbbb1^^^)~~=--!~-==-----.---*!!*****-**......++++@@@++@+@#@+###@+@####%###%;%%%%###%%%;;%%;###%##,,#,,##,##,,,,,25''@'''-'--'''<{:<<442334}444c4c4333c777cccc4cqvoiiiikyCAQSSNJJAEIzwwurf35322<'!-=-==-= (", "$$ &2[23jDIIRDwrllhjhjjjjjoooooggoooqnBxnnxyvgg6dbbbbb11^))~~~-{----=-!----!!!*{!-*-****+.+...+++++++@++@@@@#@#@##@####%%##%%%;%;;%%%%%%%,,#;,%>#,########%%,,,,/2}>@'>''*****''<<<22433eeec3343fc3<:!|))1)))))}}7poiiiikxvFNSSSOJEAAAAtrljhf3322{!!!!-*'- $", "$$ $4325lIIIRIztrrljjhljojjhjjogooovxCxoqovGmoj9bbbbb^^7^))))==--------=-!!!---'-{-*-*.***+..+...@+@++@@@@++#@@+#######%%#%#%%%%%%#%%;;%%,,%;%,,%;,>#%%;;,;,,>/[2++@+.**++.-***-!!:|:<<<* $", "$ $:e23rIIIQIEturrlllloggjjmojjooqoxCggggjoqii9b1111^^11)))))==--**--~|~~!{**{***'*-**.*.+....+.++++++@@#++#@++@####%##%###%%%%%#%#,;;%%;%,%####%,##%#,%,>,,/2:@++++.++++*-''--!!<:::!-!~}7|~!---))))))))))))~~}}1bxppnxokgMSSRQOJJJEzEzwzulhfe522<* $", "( >/2'@+@#@@++@@>'!-'':!!!!~}}1~~--=-===&&&))&)))))~~~)}~}cqxxyxqqqCMSSROJEEEDEEztwturjhee2<,* ", "( 'eljuIIIOOIEztruuuurmmmogomonnxHx9jj996ljgjf7c111111)}~)~)-===)|---****-...*--..-.''***.+.++++@,@@@+#@@#@>####%#%###%%%%%%%#%%##%%######,%##@#@>####>,><:'+@@+@+#++@>_''''{'*-~c7~=--==&===&==&&&)==))))))))))11bxyxxdgdBMMSSRROJEEzDEEwuuurljf32[<[[! ", "$ ~etEDIIIORJDzEtuuttuuvmoommxyyHHki77ijoug9ieb1111711~))=)=-~-~~=-***--**..-.*.+....-.'*..++++++@#@@+@++#@@@@@######%%%;%%%;%%%##%##%#######@####,%#>>/['@@@@+@@++++@>>/_''{*~71~----=-==&=&====)=&&&)))~))^))1c77dxMxpqnLLHQRQQQROJDDztwrrrrtuuhh3233! ", "$ ~elwzDIIJOOIIDEwwwwwAuvmmmmmxnxpb7e7efeibbie777111|c}~~~~)-~!~~-=-----**'***.**.*....-'*-*++++.+@@@++++@@>@@@#@@#%%%%%;#%#;%%%%#%##%###@#######,,,>><<@@+++@@@@+++@@++_'''*{k|--{---=--====&)))&))~~))~~~~)~)1c17kqNHxqnMMGKOQOOJJOOOJEwtrrlhlrulh332{ ", "$ *hjwDIIIIJQOIIDzzwwwwAAAAGKNMLHdbbbbbee71771771111|}1|~~~~~~~)~~~-***--.*.**.*.-.......+*'@++++@+@@+++@+@#@@#@##%###%%%%%%;###%%%,#%####@#####>,>>>::++@+@+++@#+@+#@++_'{{-{p~{{---==^^(^^11777bb999bc<::||~|1117kpGKynnLMHGFKJJJIIIIIDEIFwtuljhurh22| ", "$ =hutDIIIIJJROIIJEEEFAAAFKQQRSSxgd66bb17cc5}c1c}1}~}}~~c}|||!|~~~{-{---****'*.........*++.....@+@@#@@+@+@@@@+@@@#%###%#@%#%%#%%%%%,#%#@,#>,%@>,>>'>>><<+@@++@+@@@+++.+..+.+..*''{{bxxk|~~~~}1cciiiic5c77c433<42444000cii7mGHxMNHyAKEJEIDIEDDEEttutttzDDJFt} ", " 'uJIIIJJJOOQJORJIIIEJJKKKNNRSHqoggb(bbbb^)1|||{:::|~~~}~}|:::::::'*{{{'{'*''''*+.*+++++....+.+@@+.@#@++++@>@@######%%#%#%%%%##%##%%%,,,>#>@%>>'*'''*''+'*++.+++++@+++@##@@@@#>@#%##%%#%######%%%%;,,;;,%,,,,#;,>,@@@@@#@++@+@+#@+@@@++.++++@@.+'::1oFyAuoi5}422<::|0c|44cccccce7iiikkieijCSSSNQNQQQOJJIIIIIIEEzzwAzzEEwr! $", "$ $GuuIEwEDIIIIIOOIOQRKJJFKKQMSSnpdd(^(((((^^&&===-~~:'!::'!!::::::{!{:':{'''*''''''''+*+>@**.*+*+++++@@##@##>@#%##%##,#%####%%#%%%,,,,,##,#>,/>@+@@@@@@.+@++.+#@@@+@++++++++.+.*|55jAEAAuvvjje}|::!~||||~)}1}111177a|cc7xSSSSRQQOJKJIIIDEztrljlhrrrrruf! $", "$$ 8AleAwttwEIIIIIJOOIJQRQOKKGMMLss8(((^(((^(^&&&====~~{-'*''!<'{<':!!''~:{'{{{''_''''''''+'''@++++>+@@@#%;,,#,,%%###%%%@%%##%%#%%%%%,##%,>,,//,,@@++###@++++.+@@++++@@..+.++.+...*}57hwtrrolmuvvvmoogg6b1)}~))^^)^^1((8nxHSSSNQKKFEEEIEDEEtwtrllhfeefhj3' $&", "$$ 8j33lJzzwAIEIIIJIJOOOJORRNNMLSB8((((^^(&&&$&&&&&&&====*-*'_<_'_<<<<'''///___**'''***'''''+''>>>>@@@##,#;%;%,>%;%%%%##%,#%%%%#%%%%%%#%%,,/,##%,%#@+#@@@+++.+@@++..+++++.....++****!}5frwrjffjfjoooovomomvmmomvyyHMMSSMLMSSSSSNKGEFFEzDDEEurrjrhjhffhef3'$$$&", "^$$ &3342FEEIEEEwzEIIIIJOQRQKRSSSSB8(((^)&&$&&&&&&&&=&&&===---'{''_>>//'__'''_<<<<>>>##,###,%%,>,%%#%##@##%@%%%;%#%#,%%%,>],#%#####,@@@@+@+@+..+@++++.++......*.***-!!~|35julfhfee5}55ee9bibqooyGKQNQOKyxnxLSSSSRNFAttAzwwttrljjlfehfeeee['$$&=", "1&$$ &_:24eAwwEEzAurwIIIIIJJKQRSSSSB8((($^&&&&&$&&&&&&=&&===-==---*+'''>>>,>/_>'''''{!::>>,#,#,,,##########%;;%#%%,,#,,],##%%#######@@@#%#@@++.+@+.+............**-!~!::::eree5e533c57c17iqnvvAAAFKyogoooyLSSSSSSNGuwwAwAtrljhhjfeeeffe3/'$$&=", "1(&$$&_{!:4uwuztjjruAEEIJIJFFFKNSSSB88(((^^&&&)&&&&&&&=&=======-=---***'@>>>>>>_>>__2//>,],,,>,,],###%%%#%%#%%%%,,,,>/>>@######%#@#@@#@#@@##@@++++.+.........-*****{!!~:>>>>_>>>///____<_'<____<2@#%####%%%%######@#%@#@#@+##++.+++....-..*'****!!!!:_/>/_:jjjfjfjfjjoovvqkccc7bpdbbbd6nLMMSNQSSRRQuuururjjff55353332[[{$$&=", "))$$$$!!--=-9twlhf9jorAEJJJKQNSSSSSB8((((^^^(^&==========-=-===-==.****.*+.*+@>,,,>//>/>'>/'''__<____/_<3<,,,,,,]],,,,%;,##,#,,],>#%####%###%@%#%#%%@###%#@##@+@@@@++++.++.+*******'!!!|<<<444c3fvjvuruvjfc0|||}117bb1^1((8nHxLRNKKRROOKFrlll999e5cc34322[[:&$$=", "=)&$$$!---===9lfeefjjuzEEEFKKGGNSSSB8(((^^^^(^))&==--=-=-----=-=-=-*****'.++>''>>>]]]/////////,>,,],,],,;%,,,,>,#%%%##%%###########@#@@###@@##@@@+##.@++++++****''*{|}cc7c443eei3ehjlhf322<<||)|~~|77)1)^(((snnCMGGKJQRJIJErgo99fe5}}4322<<<|&&&=", "=&&$$$~=----==9e55b99rtuuuAFAGQMSSSB8(((^^^^^^^^&&=-----=---=-==-----**''++'>'{'__,]///////_<+.+++'+*'*'**!:|7iffeee23322//<':[23242<<4|~||||71)1^^(((d66nxxyFJJOOJIIIur99555c44<<<<''//_'_/]///]//<///[//[[2[//,,]]]//],;%%%%%%##;;%;;%%%%####@@@@#@#@@@@@#@+++@+.++'''''!|15eccei33222[///>*-==-!,>/>,,,///<[[[22//]]]];;;;;;%;;;;;;;%%%%###%###@+@%%%@@+@@#@+++@+*'''':|}c7e7}}2<22<[>>-==&===!<<<24<444|17c})~)b(dsnddnHxmommvFJQQJIIEu9be5c442<::__'**--{'__>__'___>_'___/[/2232[//>>>,>>,,,,,,,/<2[['//2222ejc///>>>>>>>>>,,,,,,]2ce[];;;]]]];];;;];;;;%%%%%##%%###%@@##@@@###@@+@++'::{|44432::<@>_>>>>,,>,,]/[<[]/];;;;;][];;;;;;;;;%%;%%##%%#####%#@#@@@@@++>>{|044|:!:'<<'/////<<<:'{-{!{**-==&&==&&==!<<<4ceje:||~)^)^^^(nCvCAvvvmrrmmEJOQzwto71c||::://_=~&{", "-=&&$$$&==&&&&$$$$$&1999bb96gmvnnxLBLLLn((((^^^&^^)~|:!!!~~{!~{!'''_<''':{'<<<<_<232<<<<___>>/>>,>>>/>,]][//;];;;;;;/]]];;;;;;;;;;%%%##@%##@##@@@#@>>'':<44:::<:<<'//]]/<::::!!{-=---==&&&=&&&&&&&~:::5ji4<:!!~)))&^(pdgovwFwulllrrDJJKwtAoq77c00042:====", "===&&&&&=-&&$$$$$$$$^996bbbdggoggsBBBBLLB8(^^^^&&&))~!|!~~-{{!{{!:{_''{:<<<<<<<<<_[<<<<<<<<_<___//__//>>>>]>,%,]]]/]]]];;;;;;;;]]]];;;;;;;;;%%%##@@####@+>____<<4:<:<<<>'!~::!!'-==-{====&=&&$&&&&$&)|4ii4<<<:!~|~))^dd((66muEEAurrrzIIJFtAAb7cc7eecc|=&=~", "~~=&&&&&&==&)^(^$$&$(9966bbbdgogddssBBBBBxpd(^)^))~)~~!~)~~!!!!~!!!{'<<<_<:<<<<::_<<__<<:'{___'__//_/>_/_>,,,,%,,,]]];]]]];;;;;;;;;]]]]];;;;;;;%%#####@>___/<<<<<:<<<_'!!|:!!!!~~~{!~~====&=&&&&&&&(^bq::3<<:!|!~~~1bb^(bbb9outwwttwIIIKwuwh7}c55c5ec1c|~", "c111^&&$$&)&)((&^^(((g666bbbbqnngssssssBsBspkb^^)~~)~~~~~=~~~!!!!|4:::!{__24c7<<<2<:'{::'_'''<<'''____>>>,,,],,>,;;]]];;;;;;;;;;;;;;;;;;]]]]];];;%;%;@____<'>>''!!!}}}::|!~~!!!)=&&===&&&=&&&(8d):<<<<<:|}!~177b^^^^71b9lruljlEDIIGutr53535333~~11c", "c1777b1^&&)=)&(&$&$$(mvmggbbbqoqpnsssssssssspkb11)))))~~~~~~|!||}||!:::c333ci00:::<::':{:'{{:_'*{'___+>++@@@,,/,///,]]]];;;;;;;;;];]]];;;;];/]//]]]]]2<_/_<<<<<<<<[////>>>*''!!:}:::!|!!!:~~))=====&=&&&&(d8$))!<<2<>@@+.@+@@@>>>>//[32[/]];;;;;;;;;]]]]]]]]];]]]//3c332[[[<<<<>>'>*'*':}:::!!|:!~{~~))~===&=&&&$(8($&&$$~<<222!|771771111177775jlrlrutuEo5fjuljjhf}~~)~~", "~}~)~))&&^^111^(^^$$&(gg66666gggpsxsppppsssdkkbdbb7^1))}:|~}10}||c00::::<4::::||{:{:::{{{:''{::{'+'+++@+.@++@@@@#>@@@>>]//[3]//;;;;;;;;;];]]//[///[223233fe3222[//[@''<<<''::!:!:!|!~~~~))|1117kd$$&&==&&&&=!:**!~~~}", "}}}})=)=&&&$&))^^^(($$(6ggg666g6bxxppddppdsspddpkciccc7e7eoi7gkcc||!|:||{<<{:::|{:{!{:::{:::{''**'*+++++.++@@+++#@##@###;;;;;;;;;%;;%;;;;;;]]]]/[322233effhhfe3efffjf332<'>'_<:_'''':<{<:!|!!|~~~)1^77^&&&===&&=&&&&)c044|1111171111}}51155hhlutFf333[//'*----!!", "!!~~~~~)&=&&$&))^^((^^(666gg69ogbxpppppddppdpdkkpqii7ecc7bi77cp7c||||::{'::::{:{!|{!!:!|||***''****''.+.+@+++.+@@@@###@#%%%;;%;;;;;;;%%;;;;;]/[/[3[[233ellhfllhe3e3fhjhjff3[<<<''''{!:<<::|!!||~~)171&=--&===&&&&$$(b^14440|c111115}}}}5155efhlwFfe32<@.++@@++++@@@@###%%#@%%%%%;;;;%%%%;][[23hfllff33ee333[2223333e3333fhjuumrhf9hljfe7}|4:|||0c}-!---=----!~|77c7ii7711115fffee55555fe5c:5hlhrEf32232[<'''**!!!", "!!!!!~~~}!~~115f9jghe}}})1omvmvmmmnngdddddkpppb7kkbiikkkbkkbbopki777c|||||4::~|!~!~!<'{-!{--{'{{{{a''@@+@@+@+@@+@@@#%######%#%;;;;%%;;,3hrrlrljhe3333e333322[[2223e52333eiiffjuujfefhooof75}|0c~!!------!--|43cccc7b51bb17bejtulh555eeec3ellllzA33332[/<_''**!!!", "'-!!!!!:}:}55e5he1111))^&&(grmmmvynnngqppdppppbikikikkkdddkbbxqdbbb777ac0||::|~~{{{@++@@@++@++@@####@###%;%%%%%%%,>}rrffhhhhllff333332[2232[[[[23332422ffeceeovojffiifjooof7|!!!!-----!::3cccc3c7fiibbbb9jjuzurllljfe5fhllllzlefh32[[<_''-**'<", "'332flrh32/]];]],/[/2]]/]]],,]],,],////////[<2<<33322244ccc|:<440eicacciciieiifjoloffifjec57iff53erlruzzttwwrrrtzzztuuAlffee333efhjrllffhff", "fee2233333535c3}}~}}}}}}}}|}!}}}}vyogguQQJEAAGCCGGynggggggoo9bggbbbbbb77bb^1117b|}1|~~)~~|~{~~=----------'+>'>@@@@+@'fffrwlh3333[///////[]];]]]]]]]],,],/>,>////<2<[2343434ei7}||:|4400cpkic7kjiicefoouyvmfje4435efjoohtEzDztwwuurruzEwrruErhfeffeeffhffhlhllrff", "fhhffffe53533}3}}}}}}33}}}::::}11nxgd86mFQJEEGNGGFGCmngggmoogkggggdddb177bb117qb1))~~~)~~~|||~~~=------*''*''/@+#>>3llrwtlfe3222[[233333[//]]]]/]],]>,/]////>///<:<<34:4433fjc4!|{::|00ackqkiceiiijvoojh5ej544333eihjvAJIIEDzuurtuzIEtlrlrAlfhfeeffhllheeehfflll", "rrrllhlff5ee53355333333}:::}}1^^^dxqdddd6uKOJFGQGFKGCynoqmogqggggdddbbb7^b777qb11)))~)|~||)||||)~~=--!---'*-'>.@/[errrulfee322[///223233[22[[///]/],,,/>/>>////>/_<234:444ei544|{:{|||0acccjojiiijvvvojffj54:433eieelAJJJJDwuruttzIEtllhhArhffffhhhhllhhlhffhlll", "wtturllhlhef55e5ee5e5333}}}1^^(^$dxn6g6dd6mFOJEFOKKOFGvmmmoggdgggg66ddbb^bb7bg^^1^1111)}}||}||c1||~--=-!!:-<<@><[3rruhhf3e3[//];;]]/[/[[/]]]////[[[////>]//__/>////32:::43343<4||||00||acceijovoovvAujhjle4343eeffhrEIIJJJJzttutzEufflhflwhlrrrututttzrlllrrtwzz", "DDztwurrrlljhhjhf55ffe55551^1^^^^gxqg666g866uKOJKOOKOKGyCvgogg6gggggdddbbb7bgb1b71^11c111}111}17c1c}~~~~!<<_/>>///222<4334444344||||||1acciiffovAAFAAvvvf335eeefjrzIIIIIIIJJEwtEwlhfrzwzKIDDDIIDDzDDDIDzEDDDDDII", "Dzwtwrrrrrhrlhhhffef55511999^^^^(gxgddd666666mFKOQQOOQOFGymgogogng6gg6dbdbbgg^^11111111111)111111cc11}~~!:_2i2<[wzrlhhee2/]]/;]]]]]]]]]]]]]]]]]]/,,,],/]////[/>//[2223334<4:44440|0||||00cijjoouAEJEFAFvofhfifhlzIJJJJJJIIIJJEArltFKQOOOROJIIIIIIIIIIIIIIIIIIIII", "OOOJJJJJIDDDwtwtrrhff999999^^((^(gnddd(66d66666mFORQOOOQKFGvmmngogogggddbdgv^^1111^111111111111a}1777c11}}cjl33wwtlfef3e[]]/]];]]]]]/]]];;;,]]]]]],]/]],,>>>]/[/[3334:4::::440400||||||7ivCKHCKOQQJJJJJFKFAAwwFJOOJJQQJJIIEwEEAFJIIIIIIOIIIOOQRSSRRSSSSSRRQOOOOQ", "AIDDIDDDwEwAFEzAzwuuurlgg69(^^(66mxq6666dd66d6666uKRRQOQROKGCmnmmmgg66bbb6ggbb^1111111111111}1)11111c7c7oojrhfwIIzwlhh32/]]]];]/]]][]]];;;,]]/]]]],]]]]//,>>>////3eee4<:<<442cccc|||00coGGuvrrwJJFtwAFFFKJKJJOOQOJJJJOJIDEEEEJROIIIIIIJOJOJQRQOKFEAwttthlhehhttA", "3effrutwttlrrjh9h9jllrrmojj9g966gmyggg66(d66666666gGRRQQRROKKGymmogg6g66ggydbb77^b111^1^111111111177ccjvvvFtrAAlrwtwtle2]]]/]]/]]]//]]];,]],]/,/],],],]]/,/,>///<223222224422333c400c7vKuvvAAwEzAwutrvuFJJOQRRROJJJIIJIIIJEIIOOJIEIDIIOJJJJEzwttrllhltue333333hh", "hlfeeefh5hfhllh9h999999999996669gvGvmmg66666dd666666yNRRQRRQKKKymngggogggymbbbbbbb^b7777111111111117iovyyAJEJAh32[5lwrr3/]]]]/////[]]];;;]]],,,,//,,,,///]>,>//[3232222<<24223eeeccceyFuvuAuAEEzwtrrlouFJORRSRRQOJIIIJIJEEEIIJJJJEIEIJOEEwullhfhfjhrrwEr33333fll", "ljhfefe33333515b9f9995777999999(6gCmmmoog66668668dddqnCNRRQRRQKOGmgggggomG6bbbbb7bbbb1b77111^111bbiovoofjFJJJwje2/[[ewth2/]]]///////];,]],>]>]]],]]]]]//>/]/>//333222222<<<2[3fjji35AEurwAFAFEIEurtuluEJORRRRQQQQOOJJOEEEEIIJIJJOJJJIJztullhhfhfhjrrtEDIrlrurwzw", "lffe5333::}}}}}}1117b5111b^^^^^^(6xngg6g669gg66666d66gnyCNRQRRRKKGvmmmxmCyggggbbbbbbbb11b1177b69qfi7e4eefrEJAroje32[]3ttf2////]][/]/]]]]],]]>]],>],]////>>////2e442<<22<:<<[23eluhitJttFEAFAFJEulrutFJJQQOOJJOOQOORROJEEEEIIIDEJQOJEEEuulhffhfhlrrtzEIJJOOOOOJIt", "heee34::::!!}}}}}))~~)1^1^^^^(^^(6ygdgggg666666ggggg66nnnxGQQQQOOJKCvmyyMnqggqgbbbdbbb7bbdgggjji7c|:4433flKFrvoiie33[[5zrf3[/[/]/[[]],],,],,>>],>>,,//>//>//[2ee2<<222<2<22333eejlwJIEKJJFKFJJvoluFJOQOJIIJJJJJJORQOOQJJJEIIIIJJQJEEJtujlhfhhrEwruEJOOIIIIIIJRDr", "e33e334:|:}:}}}}}~)~=~)=^^^^^1(^(gndb6666ggg66666666ggmnxnnyGNRRRQJKKGCGMmoqqonxodgddqoomovomgic0000ic0cevEFojjfjicc4[[eAlf3[/[2[//]],]],,,]>,,>>,,,>>/////22ee<2[<<223222322e333lEDIIIIIEFKJAmtFJOROJIIIIIIIIJQKJJOOROOJJIIIJJEKOJIFuurlrrrutzwEKKIIIDDIIIIOKll", "323}}3}:43}:}}|}~)~)====&))&&&^^bgng6d(b6d6666gggnggqgonxHHCHGGQRRROOKKRMCyxxmnyyyCCyvmmqggbb7acacccc0cjjAvFuvooovoqqicclArj3222[[]]>,,]],>>>>>>>,,,>_//<2243e3<2<22223332423323fADAEIIEIJJOKFKJOROIIIIIDIIIIOKEAFFJOROOQOOOJEEEKQJJzwuurrwzzIJJIDDDIDDzDJOKwhff", "333:cc3}:|}|~|~!~)))=~===&=&&$&&^^dd^bb(6d6d6d66666666gggnxnnCyCGNRRRRQRSNNQNNNQQNNMMLHBHxxxsppppkkkkkpvyAvyGyvoqqyxqqoqiyFuoiice4444022222_2________:<42442e22<442232eee53ee225uDwzwIJIIIJORRRROJIIIIEEIIJJFtAwFEFJORORQRRQOKEFQRJEEztEDDIJOJDDDEDIJIJJKFtlff35", "22::43c4}|c|!:!~}~~~)====&&&&)))^(d(^((^((((((66666666668gns88nnnyFNRSRSSSRRRSSSSSSSSSSSSMnnxpxxxspppppxGCovCCHCyxxxHCxqxvGFFFvookkkiiccc0c0cc0400cikiiiiiijiccc4ccceeeffeee3cehEEDwwEJJIOQRSSQJIIIIIIIIJOGtlrutAEJJJJJOOQQOQQOQRROIDDEIIJOIDDEIIIDDzuttrllfe35f", "::4::4}:}}:!!!!!!~}~~~=))&&&)))&^bd(((((((((6666(((((b((66gnnnnnnmvuFQSSSSSSSSSRSSSSMMRRRMxqkkeiiiccccjovoooooooxyxqqxCCCxxGyuvoicc424044222444000c00ciki0jicccciiiiqooovvCvvovFJFJFFEJQSRRSSRQJJIIIIIJJFtvomvuwwEEIIJJEEJJQQQRSSSJIIIIOOIIIIDDzDzzDrrrlhhff3233", "<<::::::}}||}!!~~}!==~)~~)&^^^)&^bdd((((((((((((((((6bd(666gxxmvmvyyvAGRSSSRRRMSMMRMSSSRRSCvyvvmqkkkicifjfiiiijikkkkpkxxCxyHKGAvqpkiccc40444044aa44444c3cce44440ciciikiqjooovFKQOOJJJQRRSSSSSSSOOOOOOOFwyvvvvvutAEJIJJEEEJEJORSSSSROOQJIIDzEEDEzzttrrrrrffe3322[", "/'<:::!:}}!!|!:!!}!~~~~===&&&^&^^dgo(((((((((((((((^(999699gvxyvvmmvmmnCHNRSSSSRNHCHGNRRRRHyvvvvvyvoojfjiiji5eiik400cioxqxxyHNGGoiiiic0cciiii044444440444c44<:44c4ccccciiifjjoKROJOQSRSRRSSSSSSRRQOQKGGGGGGGGKFGKOOJJJEEIIJQRRSSSRSSSOJIIDEzzDDzzuurjhlhe332222/", "/'<2::!2:}:}|}!!}!!~~~~&)))^1)^^1bddb(((((((((((((^99j999996gqnnn6d8qnnxnxHSSSSRQKFGCCNRRRNvvoqqoovvyymmjiee7eiie00cciikiikpxNGKGvic044000400000400000cci34044ccc04cc4eiicijovJJQRRSSRQRSSSSSSSSRROKOOOQQQQQOQQRRQQRRROQRQRSRRSSSRRRRRRQJJEzzzwwurlfffefef32[3[]", "2<<[23:}4}}|}}~!!!))~~)^1^))))&&^^b(^((^((((^^^99b9999999b^(((8888888psxBMLLMLNRRRQQKGQRQRQyoooooovovAAujiieceiiiceciiiiiiicioCGGGoicckii0440424244c04ccccc0ccciiikiikkqqpoyCQRRSSSSSRRRRSSSSSSSSRQQQQRQRRRRSSSSSSRSRRRRSSSSSSSSSJJORRQRRQKAAwtwtrffeeee33e323[[", "[<2['::}}::!}}}~1}5111))=&&))))^^(bbbbb(^(9977b9991b1^((($$$$$(8d8d88ddsLLLLHxqvGKORRRQRSSRMHyoqijoxvvFFvfee7ei7eieikkikicii00oGGGyqi0cc0iiiic0444444444cckkkpxxxxCHCyyxxxyGRSSSSRRRRRRRRRSSSSSSSSRROOOOQRRRRRRRSSSSSSSSSSSSSSSSRJOOOQOOOQQQKAtwtrhfe53233e332[[", "2<,]<:}551^&$$$)$$$$$$$&$$$$$$$$$$&&&$$$$$$$$$$&&&)&bkbbbsBBBspxyvkc1111ikkyH77ovuFJJOOQNKKxqkijjCGe>>>>*=&&=$&&$$$$$$$$$$$$$$$$$&&$$$$$&&$&&=====-&dpbbsBspsp7oAm77111kbdGo7ec7iovFOQOJJGvvGKq4243<:__>+>>'-=&$$$&$$$ $$$$$$$$$$&&&&&&$&&$&=====&===$dpbdBBpss77mCobnb117byy7iiqoojvwGQJIEKQCo704444:_//_///2ee3323jjouyyHHHMMMRRRSSSSSSQOOFGGGvojfoEOROJJJJOOQRSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSRRNRSNNNvove53355efe33ehjrojjjiiec42<<_<{{}i", "|bpHMHx7|:':!!!-!{:-****'*++>>>>.=$&$$$$$$$$$$$$$&$$&&&&$&&&&=====&&===&&bkdsLssxp77oymNn11i7dH7kkkojmu9bvGGGug7ceicc444c2__][/ee433c33jjhijjipyMSSSSSSSSRSRQQKQHvovvvFORSOOOQRRSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSRQNGyoijve55e35effeef5e33352<:<44__22:::|:", ":{{|kxHMCk|!!!!:!!!---*'*****''+>>.&$$$ $$$$$$$$$&$$===&&&&)=&=&&&&&&==&&&kkdBBssq77kvCQKd1k7kGi77jjjwj77ej9}}c04040ccc400022/<32333444ifffejfxNSSSSSSSSSSSSSSRMHCCyGKQSSSQORSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSRMHyFvjifjovfeehe3332222[/<2[/__<_<44:::2::::", "_::{{~7pCNHqc~|~~!!!--**********'@>>+=$$$$$$$$$&&&$&&==&&=&&=&&&&&=&&==&&&^kksBBpskii9CGQGb779Cbiilrto155ej7!{|4444::4ccic0iqif3c22222c3ihlvGMSRQORQJKNMSSSSSSSSSMRMRRSSSSSRSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSRNNyojhAfifjjjjo52242<<[//<[<<[[/@'>>>/_2____:__4", "4_a__{_{|kxMNxb1~!!!~!!-***----****++@@*&$$$$$$&$&$&=&&===&=&&&$&&&=&&&&&&&^bkBBBpkk77oGNOvbioymiirwv5}11fj~'*{{'<4::<<3iiijkvyoi3433223jHRSRQOOOOJEztmooqxHSSSSMLMSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSNNGvjifhruffec5cce:>>_//<[<[2[<@@'*@>@>>/>>_::__", "___:a_a__:{7pHNHn1)|!~=~!-*--*-******+*@>*&&$$$&$&&&&&=====&&&&&&&&&=&&&=&&&^bsBLspki77vFQK9joqx9jAt55111he:''''>>':<44243effyyyvoii5iyMSRQOOQRQJEEtuji44ckokqCMSSSRSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSNAmorof5fl2<<<<::44:<_/>''>>//,///>'*>@+>>*>>+@@+_'_", ">____{{|a_aa|~dxMNHd)~!!-~-!!-------*'.*''>*-&$$$&&&&======&&&&&&&$&=&&&&&&=&1dBBLsdi77byOQCojoyjuF97}}7597''___//>_>___<223fovvvvovHSSROIORRQJIEEtre4|0443ioovoxHHSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSROQRRNGrrmjff342h2_<<<::|0|:<_''''>>////>+@+*+++@@@@>#@++++>", ">*+@''____|aaaa|7sHNHn7~~~==---~------**'**'>'=&&&&&=====&&$&&&&&&&&&&&&&&&=&)1dBLBsik77oFQQujmCjFj157}55e5**_//_>>>>>''<4ce5efvyHSSRQJJORROIIIJIJjcc0004ccciovyyCCNSSSSSSSSSSSSSSSSSSSRRRRSSSSSSSRRQKFCvjee5e3332>>@+@+'", "@+@+++*'''___{aaaaadxMMyb1~~~~==--~--!--****'''_*-&==&&=&&$&&&&$&&&&&&&&&&&=&=&bnBMBbki7iFQRKjoFmm1}55}}55}''>,___>>>'>_>/4efmCMSRQOJORRRJIDIEEtwwfcicc4ceeiiejvGFQSSSSSSSSSSSSSSSSSSROOJJJOOOOOQKGCmoofi33222442<4e/<{{::{{~||!!**''>>>>>'+...@@+++@@@@@@@@@>@.", "+@++++.+..*''{_{||aaabsHMCq7~~~==---!!||)---*'*'_>>*-====&&&&&&&&&&&&&&&&==&)~)^bxLMsikiivQSRvoFo7}5e75}55!*'>>*'_>>>_>//3eoMSSROJJORRQOJIEAtwujijjccccciiiiiifjvFSSSSSSSSSSSSSSSSSRQOOJJJJJIIIIztlfeff3322'.'-++++++++@@@@@@@@@@@", "@++@+.@+....++*'{_{|aaa7pxHGnb1~)=-=~~-~||=-*--*_///<{====&&&&$&&&&&&&=&&))))~))1pBMLpkkijGSSGvFic|cfe5557-'>''>>_//<225oMMSSRQRRRSSSQIIEwvvvovjeeoieiijiiiiiiijvKSSSSSSSSSSSSSRROJOOQOOJJIEIEAtuje43e332////_/@@@@@@@", ">@+++.+@.+.+....**{{{||||7bpHMCq1)~~~~~~-)~~!--*>'<:2__'-=&&&&&&&=&=&&&==&&))~)))bxBSBkqiiyRRSCyic}}ejf5e5'>_'_/'<<<3jyMSRRQQQRRSRRQQROzuhii3covoijjfiifjjiijjjvGRSSSSSSSSSSSRQOJIJIIJJJJJEAwlohfe3/2322@>+++.@..+++.....-**--{~||77pxHHni1~~~~=~))-!!**'::'_//_'-=&&&=&=&&&&=&)&&))~))))kBLLpqqjoQRSNv77}}efe5e!_>>_'<23fyMSSQOOOOOQRQOJDIJRKro3e340cmojovyojjiiijjovFRSSSSRRSSRRSROOIIIIIIEAAAAvvojiie3>+...+++.+....-..**-*{{{~akppHNyg7})~))~~!-{!!!!'''__'''-=&=&==&&&===&=)~~~))~1sBMCqxvoGRSRo77}ceff5f'''<<25mHRSROJJOJJOQQOEzzDIJOlfjiiccceioooovCoqjiijoyFQSSSSRQOJKQRQOOJIIIIIEuurleiijiij32//<<<>@..++.++...........---{||a1ppxMHn971~~~~~::!{!{*'''''___*==&&&====)===~~~~)~~^BBMxyyvGSSMj77cefjfhe<<::fCSRROJOJJJIOQQJAtEIIIIIl2<24ciecccfAwvmvvoovvvvwKSSSRQJKJEEJQRRJIIDEzwtrjee32cecci42*+>@++++@+@@+++@@++", "#@@@@+@+.+.+++.+.....+.-..=.-=={||1bpsHNCok77}}~||!!!!{'!{{'__/_*-&=&&=&))=)~~~~~|~)sBMCoyxyRSSo7i5ejlhr::5yNQOQOJJOIIJQQOJDzDIIIzlfh[22[<2<4ccijAtromtAyvyFKORSRROOJFAFAEJJKRQJAtulrjfe22<443c32<<_<<<_<<_'_#++..+.++.........-...=---{|a7pBHNGyqi7c1}~}!!!!!!!!'<____'-=&&===~~~~)=~)~~)BBMxHyoNSSyeieeorrumHROOQOJJIIIJQQJEtlrrzzuff333/{:<[[2<<4ijowtvovwutFEORSSOJJJJJFKEJJFFFNROAvljh52//<422244_/_<<<<<<{'_e<{!~--{------!!--!!'!!--*'**'*@++'@@++++@+@@@@@+@#", "#@+++@#@>#@+.+.+.+++....--..-.-=====~~17pBHMNGvjbc71}||!!{!!!{'*'___'-=&=)~~|~==~)~!!dHLHCvqHSSCcjjrwFQROJOOOIIIIJOQOJzrhlltwzhe3222/<<<<<[/[2eeeeoAwmrAAzEEOSSRQOJJEJJJJOJFAAvCRRGvhi2_/<:42<<2<<<<:<<:::<<3:{!!!!{*-----~-~~~)!-!!!-!-*'+*++@@>++@@@@+@+@@++##", "@@@+++@@>@>@.+...+@.......--...==------=117sHMNGCofb1c}}|~!!!!{{{**'__'{~~)~~{!~~~~~~~xBMxxqCSSCjAFQRRQJOQJIIIJOOOJDthehhllllr332[22<<[<[<2/2332333jwurvAIJKSRQOOKOKKKJJOOKKGyvyFNMGyc<<:<:<<<<2<<<<::<::!<24:{!!!!!!{-===-!--~~~1}}}}3:'.*'+@'++.+@@@@@@+#@#@@#", "#@@+++@@@@@>>+...+++.......----==-------==~|7pHMHCvuof771}}:|:!!'{{{''_<@++...+.........-------------=-=~1kBLHvmmmof7}1}}:::{!!'''{{<_{~~~~!{::::|xLLCGySSRRSRRSSOQRRQJJIIAl55ee322[<[2[[33/[2/<'<'</'<<23ff533[2233fftIIROIDwrrwutwzzEuuujhjfifiiibkvCiccc0||444::::<4:e:<:::{{!!!||!:~||~~||!|:!!!!!**'''++.++@@+@+@#@#%######", "@@@@@@@#@@+++@+++@@+.++......---=----------=--=--===-^dBMHxjibhjffe534::<::#@#@>+++@.+.....-*.*..--***-...=.!!!!}}---=-~^xLMCofi775e537eeijjjouEJJQRRNQNSSRSSSRQREtlj153}~=-!'!!-!'<'<'<<[[[3332////2f32ee32333fjfAJJOIIDtutzzttuwzwtlAwjee3ee335:2432:40c42:<<<::<23<::{!!!!!|~~~|}~::!}1-!{-!--*'+++*@++++++++#@@@#@@#%##@@#", "#,@@@###%#@@@@@@@@@@#@@@+.+...***-.-*.*..*..*!!!!*!!------=)^nLRHofffeeeiffjjuAKOEFJKFFJwmMSSSSSSRKmg1}}!----!:!!--!'''***+.*-****.**-.-**!!!!-*-!*---!-----)nLRNyvfeeiflwFKFAwwFAJJAwuvHSSSSSSNm1}!-==---!!!----!'''<_'<[[2eh[////[h3eeee33[[eeerKROEultDttzDwwwEIErf3ioujhhf55771c3544444c444<233<44||||!~}~|!-!!!~|!:!:----.-.''*...++++++.+##@@+@@#@#@@@##", "####@@@@@#@#+@@#@@@#>@@@@@*.+.+'*++++*.-*'*!!!**.**--***{{{{{~!~)8LRNGvvyFKAurvuFEJJAuuAzEFSSSSSSm~~-===---'!-----''''<''<2[23e3[[[[[/h3hfe3[[[3eelEORJwrjfwJwtzEJEEEIKvqpkoHGjjjjjfic55}44<4:4432e34:4}|||}|}}|!!!!!!|!-!!!****-.+.**.+.+@@..++@@@@@@@#@@##@###", "#%@##@@##@#@@@@@++@#@@+++@>'+.*'**+''>>'_<<'''''*'*''***'*!{{-!~~~~8LRRROAtuvuFFKJAutwEEIIOSSSSSM1=-==-=-'**=-----''!<':<<22233322333[jfee2/[[4eifwIRQIwrjluFEEEJJEwwEJQHCxovFAvfiiie5534444:::44e5:24|}}|||~!::!!!!!!!!''!!''''*.*++*+@@#@@##%;;;;;;;,;%##%%##%", ";;;,;;,%,#%@+@+++@@+@++++++''>+':<<<<<<<<<<<_'''{::{|~|79myMSRNFGKJJJJtrutwwwEJRRSSSSx===-----*----***'''<:22<222533335532'''*''++@+++##,;;;;;;%;;;;;;]/];;;;", ";;%;;,,;,;,,,,%@#@#@@@+.++@+'@...**-!!:'!{:::{{'<<<:<{<<<<<:443cfruvlooGRSRSRQOJJAAwAAFEJRRNSSSM(-----------*'*'*''<:34::24efjoooqkkc0oyyqooqqjjuJOROJIEwvmoAwFEEAEzEtEOQAvfjfgwullojff5334::3ff34c43::::::::|||}3:!{**-**-*'*-**...+++@#;,;;;%%%%%%%%;%%;;;;;;;", "%%%;%%%%;;;%,,]],/],,,>@@@@@'''+++++*+**.****-****-*{*'*'*!|||emoofffjmvuKRSSRQOOJzAEJJJQKyxSSSMc'*----!---'-**'**'cnxHBLLMMGGGHxqki7aioovjfjoolJJRRJJIIulrrljlGEwwzEwEOJOwojjf9uuruwtljf55imrj33354c}::::!::!|}}::!''**.*-**.**.*.+@@#,;;%#,#%%###%%##%%#%%%%%%", "%##%%#%%##%%%###>,,,,,],]/'>>++**.'.''*'.***.*'**-..**!}}}}1}1111fluAAMSRRRSNKJJJQNCyxxSSSH233<'''*---*****~boyxokkvKNyvvyvvkii77oofouurrrEJOROIIIIrrwjffjlwJzwEDJOJOOtrmjjjutwAFwvvvvrje5544c|||::!|!:}4!~!!!{-*-*..--***+*..@>>,,%##@###%##@####%%%#%%%%;", "%%%%%%%##%%%%%%%%%%%#>,>,>>>>>////>_''*+'+>*+''**+*''*-**'<:}!~~~^11bfojlg96nMRRSSRQQNHvvGHMSSSC23332<'<<{'''!1iijoiffjomovCvvvvoooofivmjomtAuwJJROJIIIIDzrjfjjhjtJIIJROKQJOAoj9999mvulofe9}c}}}~!~~!|!~!}}}|!!!!'*!!**-*'.*..+...+>>#@#####@#@%@@%#%#@##%%%##%%", "%#%%%%%@##%%%###%%;,;#>,>>>>>>>>>/]//[///:<'*'**+*'+'-'!:::!!-~~~159jmlfb1b999ySRRORMNCoooyHHSSHie3333<:::}7fjjovuurojolfejvGvvuoofb57lhhjhjrDIJQROIIIIOIEwttutljhltKCuuuAFJKmbbb^^^^^b^^~)~~}||~~!|~!!|}}}!!!!!!{'-!-'-..**.++..>,>@@@##,,%#@@#@##@######%%%#%%", ";%%%%##%%#%%%#%%%#%%%>@#,>>>>>>>#>#>,,,,>/,]/@@*''*'::!:!!!~!~~~~19fjh977eee759mMSRymvHNyxyxxSSMNGyvvuuuuAAAwtAEEzAwwAttujffvutAtwuoofwururuuzQORQJIIIIJDttwwulfeb59eb99gvoyKQndbb(^bb^^^)~)}~~~)~~!~~~~}!|!-!--*{*-***.-*-**++>>>>@>@@@+@@#@###@@@@####@#%####%", ";%#%%%%%%%##%%,,#%%,,>>,>>>>>,##,#,>>,,;>>>],@***'!:::!~~!!}}~)15fhfe555ife55fhmGxSRGvovGMHCHRSMvvuuFJIIEIDEEDIDwtwtDDEwtuwlAJIDEwllofuhjljhlAJIRJIJIIIJAlhfe557577bb6(6d6ooxHMnd8dp(^)^^11~~)~~=~~~~~~~~!!~!!*---**'+**.**-*@>>>@*@@@@++@+@@#@@@@@###@###@###%%", "%%%#%%%%%%##,%##%######,,>>>#@>>,#>>,,;]]>>;>''''!!!!!~~!!~~}~7eff971}55eefjovyo7knMRNyyyKRMNSSRQOJJEEDIDEzzEIEzztwwtlurrrujltwwrlb^^^3<333ehEIOOIIIJJJJulhffe999b7b96666d6gqxLLddbd^^(^71)))~~~)=~}}~~~-=~!*--!--***'******>>@@@@+++@+@+@++##@@#@#@######@###%%", "%%%#%#%##;%%#;%##%#,,,,>#####>#@#,>>,>,],,]>'''''!!!!!~!!!!~15eeef71}555}efoCokijojoHSROJKQMSSSRQOJEEEzwttwtrljlhhlhe5fheff57foh71~)&&3<235erEDQIEwtrrruuwulljlmvummmgmgg6nnBBLLdd(^^b711^^})))~~11~~~~~=------------***.*'*'*+@++++@>+@+@@@#@@@@##%#######%%%##", "%%;%%%%#%;%%%%,##,,>#,,,#>>>##,##,>>,]];]/>>'''''!'!!!!!!~~}cc55771}3c3}efjoqiikiiiijxMRKFuvGRSQOJJJEEzttutwrjffeh5}::::'''-&)c4|=$$$$2'::<2uEJQItljjjjlhllrtrmgmmmmmoomooxxBBs8((bbb71^1^11^1^~~)~~---==~=--------.*-.-*--***++@@@+@@+@+@@@@#@+@#####%%%##%##@#", "%#%%%%%%%;%,%%;%#,,#>>####,#,#@##>>>>,]///'-'-''--'{!!!!-!}}335}}}}c3}ceiiec17kki7cijiqCRRKyFGSQOJEwuturwzwtrrjjlf:2<####,,,,>###,,,,23/'***''''-*{!!!|}3}5c55}}:55ceicc}}cc1cii7c7jeeivQQQKuRNAEEtrrrtrhhjjhje}:- $($$ $2'<22fEIOIEwrlhffhf999jggmmvuymggg6ggnnpd66j9bbb1^111}}1))~~)--------{--!!**-***'*''****++.++@++++++@+@@@@+@@@@@##%%@#%#@#", "%##%%%#%,;%%%%,%%%%%,,%#,@@#,,,#@>,,,3h<'*'*'*--*--'!!::}}}}c5}}}22c4ce4::c55ccccikioiiiioGQKGRSGyAEEEEurljlhh52>,,2e'>'''*-*-*!{''!:<:::43}:}:<444c4333eeeeeecc0kqvoiiiioGGFRSRFJEEIEwwtulf5e32:{!!-=-==-& $($$$ $2/<,#,,#####%,#,,,/35@>>>''****-''<<<<2233eeee353ife3<:||1)})))~}|1ivoiiiijxAKRSSROEEAEEwullhfe322,/2'@@++*'+***-*'':::|:222>= $$$ $:323hEIIRIztrrlljhjjjjjhjjogooooxxCqqoxGyoo99bbbbb^11))))~=--*-=-----*!!---''{-*.*.***+..+...@+@++@@@+@+@#@@###%##%%%#%#%%", "%%%%%%,;%%%;%%%#%#,%,#%%%;;,,,]/22@+++++++++-*'''-!!<:<= $$ |e23hEIIQIEturrljjlogjjjlojjooqoxCnooojookibb1^b1^^^1))))))=---*---~~~!!!*{***''=****-*+...+.++++++@+#@+@@++@#####%#%#@%%%", "%####%##,%%#%######@#@###,,,@,/2'@+@##@++++''!*!!!:!!!!}~11}~-======))))&))))))~~)1|}7xxxxxqjqMSSSQOJEEEDEzzwwurjhf33<<<<_>= $( !ee5rDIIQJIEtrurtrrlmmojjojoovonCxgoog99bbb9k7c11^1^1^))))==)----~~!!*******-***'**.***......++@++++@##@###@@#%%;%%%%%##%%", "##%##%#,######,%###@#,####,>><:'+@@+@@#++>__''*'''*~~}71~-=-=====&=&&&))&)))))~)~)))17dxCxndgqHMSSSROJEEDEDEwwrtrrjhe32[<[/= $( !3hhrEIIJQIIzuurtuurrmmoggmoooxCHp9j969gf9jjb7111111)~~)))=====~!---*-*-.*.*-*..****'**++.@+++@#@+@+@@##@>####%%%#%#%%%%#%", ";%%%#%###%#,###%#@#@##,%#>,/<<++@+@@@+@+@>>>//''{*~c7|----=-=====&=&=&=&&))))))^)))1c7bqCHndgnLLNRRQRQOJEEEztwurrutulfe2233~ $ =3rzzIIIJRJIzzwuuutuummooomvxxHMqiibb9juojiib7111111))))))-~--~~---*-***..----...-.-***..+++++@@#@@+@@+@@@@@@@##%###%%%%%%", ";%%%#%%##%########>>#%#>#>/<'#+++@@@@.+++@+>_'*'{{k)-----==-=====&==)&=))))))~~))))1c1ikyNyqqxSMGKQQOOJOOJJEzwrlrllrurjf232- $$ &5lwwDIIIOQIDDEtwtwtwummmmmmxnxxbbe7e9fj9bbe77711c}11~~~~~=~~~~~---*--**'.**.****.....**..++@+.+@#@++++@@#@@@##@#%%#%%;%%#", ";#%%%%%,,%#,########>%>>>2:++@+@+++@@+@+#@++_'**-a7{{{---===&&)))^11}1117b1|:|!~|~1111bkqKKxoxMMHGKKJJIIIIIIIEEwtrlhhrrl322- $$ =5jtDDIIIJOOIIDzzwwwAwAACGGGMLLpbbb5bie771777711}1|1c|~~~~~~~~~~----{--.*.**.**..-...-.+*'>++++++@@+++@+@@@@@@#@%###%%%#%%", "%@%%%%;,#,#@,#>,##>,>,>>>[<@#+++@+@@+++++...+.+..'*{{~sxpc||~|}1777ijiiee575c3344424440aa7ikbCNCCMGyyGKJJEIDIDDEEzturrttEEJJtt) $ =}wwwIIIJIQJRQJJOOIJJJAFFKGMSSn666ddb^7111|||c||}~)}~|}111|||~!~!{-!!-*{*-'***.**-.+....+.++..++++##+@@+@+@@@@@@#@##%#@###", ",%##%##;#,%,###>##>> c #544F4E", ", c #5A5553", "' c #5F5353", ") c #605B59", "! c #655A59", "~ c #666160", "{ c #6A5F60", "] c #6B635D", "^ c #6F615D", "/ c #6B6665", "( c #706465", "_ c #756A6A", ": c #736C65", "< c #716C6B", "[ c #786A66", "} c #7B716B", "| c #777271", "1 c #7C7071", "2 c #807771", "3 c #7D7877", "4 c #827677", "5 c #827D7C", "6 c #867D77", "7 c #877C7C", "8 c #8B837C", "9 c #898482", "0 c #8E8282", "a c #90827D", "b c #938983", "c c #8F8A89", "d c #948889", "e c #978F89", "f c #95908F", "g c #9A8E8F", "h c #9E908B", "i c #9B9694", "j c #9D968F", "k c #A09495", "l c #9F9A99", "m c #A69A9A", "n c #A49C95", "o c #A39E9D", "p c #A8A3A1", "q c #ADA1A1", "r c #ABA39C", "s c #AFA7A1", "t c #AEA9A8", "u c #B4A7A8", "v c #B9AAA5", "w c #B4AFAD", "x c #BAADAE", "y c #B9B4B2", "z c #C0B3B3", "A c #BDB7B6", "B c #C1BCBA", "C c #C6BABA", "D c #C4BCB5", "E c #C6C0BF", "F c #C9C1BA", "G c #CCBFC0", "H c #C9C4C2", "I c #CDC7C6", "J c #D2C5C6", "K c #D2CCCB", "L c #D7CBCB", "M c #D6D0CF", "N c #DAD4D3", "O c #E0DAD9", "P c #E6E0DF", "Q c #ECE7E5", "R c #F3EEEC", "S c #F9F4F3", "li93::|9ic|{>-%%%$+. .@%-*%*,),,>-%*>~3gquqmmikuupc3|3cg95coAIMMIKKKIEABEIIIKKKHEBEHIKMIEHEIMNMNNKKIHEEEHIKIEEEKKKIKNOOPQQPQQQRRQOOOOLLLKFFEzzxvvvssssmmmmmmmssssssssssvvvvvvzzzCFFILLLLOOOOPPPQPOOLLFFzvstqqllkgggddgdehquuuwyAAxzyyzAwwplf777225foolifffifcci", "fi953}<3fl9<,>%#$#+. .#**%%-)),,>%$*,_0kqqqmkkqupi1(/|0c59itEKMKIIIHHEEIIIIHIIHBwwAAEIHEEEKNNNOOONMKHEBEIKIGEAAHEGHFKMMOOOPPQRRQOOOOLLKFIHBzzvvvvsrrrmmmmmmmrrrrrrrrrrrvvvvvzzzCDFHLLLMNNOOPPQQPONLLFDzvspmmjjkkggddddhehqquuyAyuxzwxywwpoi9576329ioliffffc99c", "b0c955|<5ff3~>*###@+....@%*%%%>,,,,-%%-)_cmquqmkkuuo9<)~|9550iwEKKIIIHHEEIIKIHEEEBwwAwABEBBEIKKMOOOOONKHEEHKMIBBAEEEGEFKMNOOPPPRRQPOONMLKKIHzzvvvvsssrrmmmmmmmmrrrrrrrrrrvvvvvzzzCDFHLLLNNNOPPPQQPONLHFCzvrrmmjjkkkggddddeejquuuAyuuxwwyAwwpof950059iooifcifd098", "799dc9|(/|99<,-%#@@#@+++@$**%%*>>,,,-%*>~3gmqumkkmuul3/!/35379iwEIIHEEEBBEHIHEEBBBAAAAyAAAAAABEHMNOOOONKIHIKNNKEHEIIIHKMNNOOOPPQRPPOONMMKKHEzzvvvsssssrmmmmmmmmmrrrrrrrrrrvvvvxxzDDFHLLMNNOOPPQQQPONLHFCzvrmmmedggkkkggddeeemquxxAxqutwwywwpolf00cdcciiiccffc988", "99ccc9|(!)|95/>*$@#$$##@#$*-*%%*->>,,>->)/0kmqqkgluuuf1!)_7||39lAHHEEAwwtyABEBAyAAAABBywyyAywAABEKNNNNMKIIIIMONMKKIKKIIMMNNOOOPPQPPOOMNNKLFEzzvvvsssssrmmmmmmmmmhrrrrrrrrrvvvvxxzDDFHLLMNNOPPPQQQPONLHFzzvrmmeeddggffkggddeemmuxyxwqqxtwwywwpoif99cd999cccfff995", "9955553_),~393)-%##%*--%%%->>-%%*->>)~)>,~|fmqumkkquxm7{)(3|<13ctBEEByppttwyyytolpwyAAwtppwwwyAAAEKKKKKHEEEEHKMKHHHIIEEHIKKMMNOPPPPOONNNMFFCzzvvssssssmmmmmhhmmmmmrrrrrrrrrvvvxxzDDFHLLNNOOPPQQQPPONLHFzzvrmmeeddddbhhkgggeeemqtAyutqqpwxzwwpoif9500d079cffiicc9", "92||333|/),~39|,-%%*>,>-**>)),-%%*->)/~,,)/7imuqkmmuxug<){|3<_19mAEEEypoptwtttpidfltyAwpoioppttwwAHIHHHBAAAyBEHEzyAAEBCCEEFIKLNOPPPPONNMKIFCzxvvssssmmmmmmmmmmmmmmmmrrrrrrrvvvxxzDFHLLMNNOPPPQQQPPONLHDzzvrmmeeddddbbbgkkgjeemmuzAuqmqupwxwwwpif9569d0779fillif9", "2|:::|||<~,,~35<,-->,>>-*%-,~~,-%%*->)~,>,~),->)~3gquqmqqtuqc_~{|4<~/5lAEEByoilpppppoicclwAwtollloomrqqwBBABAwswwyAEEBxuwwyAzzzEFFLLOOOOPOONMKFFzzyvtussmmmmmmmmmmhmhmmmmmmmrrrrvvvxxzDFHLLNNOOPPQQQQPPNNLHDzzvrmmmeeddd888dggkkjjjmquzzuqsmqptuwywtlfaaa507479lttoi9", "221<**,)(9kuqmmqpuuo7/(<|1{{<5pBEBAtiiotpopppi9ftAAytoolooqqmqtyyyAAtpsttwABAyuqtxzzzzCEHILMOOOOOONMKHECzAyttsmmmmmmmmmmmkkkkkkhmmmmrrrrvvxxzDFHLLNOOPPQQQQQPONMLHDzzvrrmmeedddd88dddgknjjjquxxxuqmmqptuwwwpic8a634439iptof9", "59553<(//<<<~))/|33<)*#+....+*~//,-%*->,-*>)~|fqumopuuuuk3_/<|/){_fyBCBypfgoolopqoifowBAwppqppttppwAywwyupoooqtAAwxuqtwxwzADFFILONNOOONMLIGCzzztusmmmmmmmmmhmkkkkkkkkhmmrrrruvxvzDFHLLNOOPPQQQQQPONMLHDzzvrrmmeeddddddddddgjjjjquxuuuqmmquutxwwtpica666859cilof9", "9cff93|(~~/--,)(9kqqomquuuqc|((__~)<5oABCAwmcfigkooppllpyEAwwttuuwwyAywtwytlinllpxywxuqtxzwwzCBFFLLLNNOONMKFGCCzAttsmmmmmmhmmkeebbbkkkkkkmmrrrvvxxzDFHLMNOPPQQQQQQPONMLHDzzvrrmmeeeddddddddddjjjlouxuquuqmmqotuxwwtpfa6aa9cc99ciic", "ffiic731/))~~/~/<|59<-$@. ...#>~<~,**->,,->,~|gmqmmquuuuk5<~/_({(5fpABAAtg9ccglmptpoouAABByyyyAEEAAwtwAwojjiiouwwsuqrtwxwxzABFILLNNOONMKIGCCAztutmmmmmmhmmeebbbbbbkkkkhmrrrvvxxzDFEJKMNPPPQQQQPPONMLHFCzvrrmmmeeddddddddddeejnopxuqquuqmmqptuxwttofc9ccc9575cff", "filic541<~),,)~<<<39|,%#@.. .+%,~/~--*>,,>>>!/9kqqmmtuuuqc|/~///(49iwAAAypc90dioppwpolpwEEEEEBEHEBAytwAyplliinuwxtpqqttyxxzzAFFILLNNNNMLFGCCzztttmmmmmeeeeeebbbbbbbkkkkkrrrvvvxzDEJJMMNPPPPQQQPPONMLHFzzvvrrmmeeeddddddddeeeejoptuqqqqqqmquutuwwttplie98655379c", "cilic5||>)~~<3|~-%$#@...+#-)~),---,,,>,)~|gmqolquuuuk7_((///<7ftyAyyti059floqppogioyEHIHEEHEBAyttwypooihjpttwpqqqtuzxyzDzFFILMNNMKFIHCCAzuttmmmmeeeeeeebbbbbbbbkkkkkrrvvxxDDEJJMMNPPPPPPQPPONMLHFDzvvrrmmmeeeedddddeeeeejnptxuqmqqqqmquttutwwwtlf866444426", "3clic54<<<~'-**--,~||~,>--*$+++#*,)),,;-,,))))~{5kpmllquuuq0|<(((~/3gpyAywwpf70fiiiioplcfpyEIIEHHEBAwolptpookfeotttsommqtxxyxAzzFHKMLLMKKHHCzzAtttmmmmeeeeeeebbbbbbbbbhkkkrrvvxxDDEJJMNOOOPPPPPPPONMLHFDxvvrrrmmmeeeeeeeeeeeeeejotpuqqqqqqmmqutwwyBBypc662|11[}}", "<3fif93|*%%%-~||/))),>*%#+@%>)),>,>,,)//~~~,,>,)/<-%%%>))>>,>,)~/%##$-))~//~/<|*-)~,>>>,)~{/<(~(7kmmfgmquuqi9995<{)|fpyAyppqpppof059cittrififiopttpiiptpllljifisttqomljmmrnqmssvCCHILLIIHEzzyytsmmmmjeeeedbdddddddbbbkkkrrvvxxADEJMMNNOOOOOOPOPNMNLLHFDzxxvvvrrrmmmmmmmmmmmmmmquqmmmqqqquuquxABywurpppic6|1(][", "/~~(~~<5953<~),-$##%-->)~~<39c93/)>,),>->,~/<<||(~|gmmgckpquuog9997<~/5ityywpoppolic76acottpf9889fiiilouwtooleiiiottppjjhnmqrnmmstzCCIIKIIHGzzyxuvmmmmjeeeddddddadadbbbkkhrrvvxxADJJMMNNNOOOOOOOONMMMLLHFDAxxvvvrrrrmmmmmmmmmmmmquqmmmmqqloppppttttsqolpli86|_^[", "{~~{{))<|55|/~),*$#%*%%*>)<3cff93<~)),>-->~/|353<~*%%*$##%>~|355955|>)/|3|/~)>**-%@+#*,///<39fc9|,~<|<~~),>>-$@@%>,,)/|9fiif93/>$$-/9ili5||0gmmg7dkquumg517c7;--->,~///~~)),%#@$*--,~<359cili9/-%%,|ioli515gmqk75gmquqmd1|5c3/{/3iwAytlgf9566862259dflptwwwwywtpicbc999fnppooihdehehebdjnuxzBGGEEFFzzvvvssmmmmheeeeeddddddbbbkkmrpvxxDDEJIMMMMMMMNNNOOOONNMMMJJJLHFFFDDAzxxxxvvvvvrrqswyqmmmmmqnoolnppkggmquqqific953}", "3|1/{';-*--**;>)/////~>%#%***,~|||||3cooc/-*-~9lpoi59giqmg40mmppqi3<|00|{~19pyAytif9566762223099dimopppppolfcc988biooolihhhbgbabbgnrxzBCGGCBBzzvvvsrmmmmeeeeeeedddddbbbkmmrvvxxDDFIIIIMMMMMMNNNOONNNNMMMKJJLLFHFFDDDzzxxxxvvvvstwywmmmmquonjjjnmmkgkmqunjefd967}", "253|_{';**-*&%*-,~<<||~>%*-->)/<33|)3lppof9fkqpi77fmqpumc|<5d3_/<5itAAypid76266|}1|1|4509d9cdgklkiif9669flomligbhbbhb8bbkrszzzCCBBBBzvvvvrrmmkheeeeeeddddbbbemmrrvvxxDDIJJJJIIMMMMMMNNONNNNNMMMMJJLLLHHFFFDDDzxxxxvvvyyywummqquujeehjmmmkkkqppoieb963|", "}55531/)>--*=%&%*-~<35|~>>,,)~/|5995|/|9fc|~))|iptpidflqqmd7dkouuum9|7dc3<~|dowAAwoi9311||1__(__37777750ciillf9268cjlollihcabaa86ejmqxzzzCCBBDzvxvvrrrkkhheeeeeeddbbbbkmmqrvvvzDEJIJJJJJIMMMMMMNNNNNNNNNMMMMKLLLLKHHFFFDDzzxxxvyBAwtsqquuqheeedgmmmkkipppmiida31", "2359993<~,>-=***%*>)|99|~)~/<<|59fff9|<|59|~))-=*&%%%%>)|c9|<|335cfc9cfic5|373~,>~3pwwtpllqqpmicgkquuuof0cif9=%$####%%,|95559cfllifffilf9355<,--)9ptwtppuutpmgilqquuulddiif5<_|0qwAytplf91^]^^^[::(]]!{!{{(159a2}26abfgiiigbaaa2226hhlruxzxzzADBDwuuvvrrrkkkhhhheeeeeehhhrrvvxxDDFJJJJJJJHJJIMMMMMMNNNOOOOOOONNNNNNNNMLLLLHHFFDCzCEEAAAuqmeeeeddddgklonoppppomif0", "d56359cfc9|<~,=%$####%>/||9flpttpoollllf5593/>*-~9opttuuxxwumikmmqqpplfioic3<<4ipyyytog92[{!!^^]::^]!!!{{(|462}}228cffiiifc9aa2}}68hnouxxyzzCADDAuuvvsrrrkkhhhhheeeekmmmrrvvvzDDEJJJJJHJJHJJIMMMMMMNOOOOOOOOOOOONNONNNNLLLLHFFFCCHIHEAqmmeeedddddgklooompppomiii", "pigfccfiifcc5|/)>*%%%$*,))/5lwyywttttpoid955|~>-,<9iotutxzywtmmmmmqqpploqof951|9lwyywoi93[^^!!!^](^]]^{{(_1||2}2268bffkgigc0082}}6ablnrtxzyzCABADxuuvvvrrrkkhhhhhmmmkmmrrrvxxDDEJHDEDEEHJJHJJMMMMMMNNOOOOOPOOOOOPPOOOONNNLLLHFFECIIIAwmmmeeeddddggkinonmptwwttpt", "tpllc99cccffc03<~))>>->,),,/9oyAAyyAywtpli953<)>,/39copqtxxzxuomqqmmqqopqplg9547fpwAytlc6}:^^!!!]]^]^(____||<}22270dfiiiifc9071}}28bhnqsxzxzzCADDyxuuvsrrrrkkhhhhmmmmmmrquvxxDDEEEEEEEEEJJJHJIMMMMMNOOOOOPPPPPPPOPPPPOOONNLKHFFFCJIHztmmmeeeddgggggeiopptABAAywt", "tolic57555555953,~~<3copttofflpABEEAywpi933999fpwuuyAAyuppqppqppuwyywoigfdflwEEEAwoic93<<:[::::<__11|23559ccfilifdc954_(_128bhgmrqsuxzzCGADAvxuuvvvvsvrvvvqqssvvwxxADDEDDDDDDDDDDDEJJJJKKLMMOOOPPPPQQQQQQQQQPPPPOONNLLIFFBzxvrrmmmjjggkmpppqnoooooptyyto", "ifgd52_~!!,,>;>--->,)),,,))~<5fqttogccfltAEEBAypic99fiiptwuwzAzxpqpuqqppppwywpiffifgpAHHEAwoif954}|}<<<|1_|__}|3659cfgiiffc951_({}47bhhjnruuwxACCAzADvwuvvvvvvvrvvvqsvvvvxzDDDDBDDDDDDDDDEDEJJJIKKMMOOOPPPPPQQQQQQPPPPPPPOONLLIFFFzzvvpmmqjjgkmpqpqmlnlollilpwwp", "lfdd961(!!';;=*&%&%*->>,,)~)~|clppofc99cfpwABBAytlfcfllltwwxzCzyuqpputpppptyywojfifcitBHHEAplfc953}:<<__<_<<}123559cfiiifgc95}_{{_47ahhjmnrpsxwACCzAAyvwuvuuvvvvvvvvvvvvvxzDDDDDDDDDDDDDDDEDJJJIKKMMOOOPPPPOOOOPPPPPPPPPPOONNLKIFFAzvvsuqqjjoqppqmmmmiiiiifhipwt", "oifdd94_{!'>;-*&$$$$$$%*-,~~/|ciopi953359fptwAAyytoilpolpwyyCGCzwtputppppoqwyywmmlifflwEHHBypiffc93|}:<_||||2355599cfiifgff92:^{{(120hhhjnrrstxvAzCAADyvvtvuxxvvvuuvvvvvvzDDEDADDDDDDDDDDDEEJJJJKKMMNOOOOOOOOOOOOOOOPPPPPPOONKLHFECzvvstqqqppqqqmmmmkeeehhebhltt", "tlgdd56_~!'';=**&$$$#####%>)/|clpoi5|<<<|9iptwwwtollottttyAABEHEAwtttupmqpptyAytoiiffipAEHHEAtoiikf953|1||4355555cccffiigfd52[^!![1700hejnnrrstvzAACAzADvywzxxxxvvuvvvxxzzBDEDDDDDzzDDDDDDDEEJJJKKMMNOOOONONNNNNNOOOPPPPPOOONNKLHFEzzytuqquttqqmmmkkggbbbfebbfot", "poid055_/!'';;*%&%$$##@@@@%->/5lppi9|/~)~<5ipwwwti9cipwwwyABEHIIGAywwwuopxwwyAAyumifilotBEHHEEypppolf905755599090cccfifffc96}[^!!(1400behjnrrstvyyzAAzAADADDAzxxxxwxxxxxADDEDDDzzzxzzyDDDDDDEJJJKKKMNONMMMNNMMMMMNNNOOOOOOOONNLLHFECzzvtwuxtpmmmmkggggdbbbhbbafo", "polfd071_{'';;%&%&$####@+@#$%>|gifc93<),,)/3itzAtg3|5foppotyBJKKHEEAAzywACEEEBBBAtooppttyBEHHHEBAAwtppoliiffcc95559cd990962}[^!!^_1700eejjjrrssswyDzACCCAAADAAzyvxvxzADBFDDDzzxxxxxxxzDDDDDEJJJIMKMMMMMMLJJJJJJJIJKMMNOOOOOONOMLHFFBzAyAxxuookgggddeddddbbeehae", "flligd541({!';;%&$$####@@@@#$$*!59953|<~~~~~<5itxxtf430floiitxAEJEEBAAAAtwAEEEBBBAytpoopptABEEEEEBAwtpoolifffc9955550d050762}[^!!]_1700deejjnrrssvwyAAACGGACBDADAzzzzADBFDDDzzxxxxxxxxxyDDDDEIJJIKMMLMMKJJJJJJEEJIJJLLLNNLLNOOOMLKFFCCBEAAuunjjgddddeedddddbhhbb", "biiiid061/{!''-=%&%$$####@@@#$%'|95;%&$$&$$$##@##$%;_57_!>-=-,)~/<3ftxBAuifiomigipwABGBzwtttmfimwyywtppoic5590cipwwwwywttoiifdc957590cfiifc9d95|[[]!!^^176adeejjnnrqsxwvyADACGGGGEEDDDDDDBDDDBzzzzvxxxxxxxxwDDDDEEIJJMKMIJJJEEDDDDDDDDFFFHLKLNNNNNNNKMIIIEGCyyqqmjheeeeeeeeeedddgkhe", "eciiid999|>,,)/3iwACAwptttpoiluyBECywtppmg0dipuupmomkc953459iutttttttpoliigc9009cffffcccc9531[^!!^^1470abeehhnhqqsxDvAAAzCGGHJEEBDDDDBDADzxxzzzxxxxxxxxxzDDDEEJIJMIJIIEEDDDDzzxyzAzDDEFHKKNNNNNNMMMKIIGCAxummmeeeeeeemmeeeedggkk", "kehffd99971({!'';&%&$$$%$###$&&&,|77(;*-,,;--;;)|fwABAwwyAywpmpxAEEAxwtpok05cimliiiiigc05337doutpptttttpppoifcccccc99599905531:]]]_177a0behhhhhmqsxDvyADzGGHHJHEEBDDDDDAAxxxxzvvvvuxxxxxzDDDEEJJIJJIJEEDDDzxxxvxxxvxzDFHHLLMNNNNOMMKKICCAtummmmeeeeemmmmmeeejgkk", "mhccffd5903_({!,;***$%&&$$$#$%**>/77<,;,{,*%%%%*>|iwAAtptyAAywtwCGJCzzwtpog59fkkkgikgfffc959cipttppppttpppplifd9995537535433||1}:}|45799aeehhhhmqvuyDyAACBHJHGGGEEEDDADzzxxxxvvvvvuvxxxxzDDDEFJJJJJJEDDDzxvxvsvvsvvvvzCDFHLLMNNOOLMMLIECyyusmmmmeeemmmmmmmhjhjnm", "mlfdgfd06873<{!',;**&%%&&$$$%%---)104),~_!*$$&$$*,|owAwlltyCBAwyACJJEzAwwtoc0dkmqmiiiffkifcccfmptwtpolooppolifcc955333|||1<__<<}}35509dbeehhhhhmqvuyDDyDCEHGHGGEEEBDDAzxxxxxvvvvvvvuxxxxzDDDDEJJJJFEDDDzvxvvvvvvvsvvxzzzDFHLKMOOONNNKIEzvvspmmmmmmmmmmmmmmqqqnno", "policfd02505|_{'';--*=%%&&&%%=;;-,<75()~<_'=%$$$%*{5pwxofityAAyzAAGHEAAAwtui75gquumkkfccffgcd0diopppliiilooliiffc95531_<>{45<~~(||~>=&**%>{9pxtifowyyyyyABEEAyzwtum0|5gquqggd73570d0579fiilllilloolliifc995|1|>!|7|/~~_33(),>-%=;/cuuiffotxwxxzBGGzwxwttti415iomdd051<14507770ddgfiilolollliiic953||<_{~)!'';'{:|0dcfjnlolnnqqvuxyDABDABBBDDAADAxwvuuvvuuvvvvvvvvvxxxxzDBDEEEFDDDxxvvvrrrkkhhmmmmrsswvzxDFIMMOOONKFFCzvvrrsmmmqqqxwyCAABAxuuu", "xupoffiikccgc541_)'-;--;>=%%*=;'>>,/44_~!{390|<{>;=*,|lpofciuwutwzABGBxttuutp9<<39c90901_(_|3777590099cfilllooooolif953|<(~~)';;;'^[400eejllqmruquuxyzBAAABDADDAADwuuvvvvvuuvvvvvvvvvuxxxzDDBDEDDDDzxxvvrrrmmkkhhmmmmmptvvzzFFIMNOOMMIFDzzvvspstqqqwwwwABEEBAAxx", "wtpooiiiliiiif997,,,>*%%&=;>>'{451~~/7mpi9|)>**>(9opkdfpwtutwyAEGAuppptuo5,!|7|/~|dqtpoc|!;->{3kppfciutttxwzAEBypooptug4{~_47007|_({(_1359000077670cfiiffffffffcc93|/),';!{_}70bbejnnnmqvxxzCCCBBBBADyywtuuuuvvvuvvrvvvssvvvvvxxxxDDDBDDDzxxvsvrrmmkeeeeeeeeemmmpsxwzAHKKNMMLIFFCzzvvuuwwwwwwuACHHIHEAAA", "qlkllicfkmiiiigccc95|!<9ouodfotwwxxwyCEAwpommpqf|~/<3555|_{{!{<|35999d97243230995595555599995|/~){{<}20beejnjjmqvuuzCCCDBBDAyxtvuuuvvrvvurrrrvvqsvvvvvuxxzzDDBDDyxxxvvrrmmkeeeebdddeeemmmptyyzEIFKMKKHFFEzzzyzwutttwxABEIIHEECyw", "qqomloiffilkifgc9553|-*&&%%*-'~|3<~<3dlf09d9|~!!~|dpukciptwxxwwzCCywpmioppc|<_|1353_]~)){_|359cdd06||2122|3||||<||||459553|||||60dejnnnmmmquuxzzzCDDAzxuvuuvrvvvvnnrqrrrvvssvvvvvxxxyDDDDzxxxvvrrhhmkeebbbbddddeeemmttyAEEHIIKLLHHFAzzzAyststwCEHJIJGCAzAw", "wqomolifffkifdfd0743|;=%%*->!/4|~/<507||499|{!)(3mtpfdltwwxuwxzCAwtpiiopm91____471(~]))~/<159dgd967321|||<<<_((/(((<<|3359999d9dfhjnnnqqquwwzzAAADzxuuuurvqqqqnnnnmrrrvvvsqvvvvxxxzzDDzxxxvuvrrhhheedbbbbbddddeeemmstzCEEFFLLLHFFCzCzAvvwvzCEHHHGECzzzzA", "wqomlilfc9dggddfd0333|-;'')<|/~/|4|7d03354<{~_5muukdiqutuutxyzwtpollqupf3,~|5cflopppprrrqvuuxwxxxxuuvuvssssnnnnnnnnnmrrrvvvqvvvvvxxxzzxxxxvvqqrkhheeddd88888888ddeeqquyyAyzzFFHJHFEEzzxyvzBEHECCzCFFBzzzz", "Awqnkhb9aa3589575093|||||||||<<~~)',))/||~~|449mqf5573_/_4gtwpgflpututuxyxupomlqppoc|<<|75|/)'>>''''~_|0900765342||||<_/~~)),>;=->)<|5clopttttppqvxuxwxuuvvvvqvqrornnnnnnnnnrrrvvvqqvvvsxxvvxxxxvvvqqmkkeeddd8886666888ddhjquuywywxDFEEFHFEzzzvABEHEBCCzCFFFBzzC", "Axqqkhab9644307||774_//<_|||3||///({{{/|4>'>'!{_3a9006332}<<<_<<<>-==>'~_25dioptwwvwuutuuuuuvvqqqrrnnjlnnnnkkhhknrrrvvvqvvvsxxxvvxxssvrrqmmkeedd888666666688dgjnuusstwxxDDEHHFDCzzzGEHHGCCzCHFFFFCCC", "zzwqjkhb88634704|4751~~~~~/<|33||<>')/:77657633|}__<(<<<-*=>,](<|7cfiostywyxxwxxussqqqqnjnjjjjghhkkkkkkrqrqvvqvvvvsxxvvxxvsvrrmmmeeddd886666666668bggopwuqurvxzDEFEFDEAzCGHHHGCCBCFFFIFFBC", "CAwsnkie999535873|703_)),)))/_1333-->,)/<|35bginpswwyzxxztvuvqqjjjjjjhhghhhkkhmmmrrrrqvvvvvsxxxvvvvvrrrmmmeedd8886666666666bbgmppummpvvxzACFDDDCCCGHGGCCzCFFFKFFHEE", "GEAwxtqijfd0539d73799|~),,,,),{_|53,'!{_|22322|4|__//{),,>>>>>--'']/<|25dcfinnpttwxxzzxusvnnnjjjhhghgghkhhhmnrrqrrrvvvvvvuuxvvvvrrrmmmeedd886666666666a8bhmqpommhrvvzzzzzDFHHHGGCCzzCEFFFKKIFII", "NMMKIBzytpolgccfd97905<~,'>,,>'')<||<<<|0iic00dfiikmtpi9900imuxwpfcgkmptqqqqupoi539iqppoikmmk9_{',',,',{:|42732|1<_(]{~),>-;*=&%*>'~_<|279cfijjoppqsxxzzwwsnnjjghgghhgghkkmnnnutpsurvvvvuvvuvvvvrrrmmmeeedd886666666666688ilomnjmmppvzzzzzAFIIIECzzzBEIIIFKMMMMN", "POPPONIIHEAwtoillidcc93/~',>,,;;>>)/||<<3clkfgiif95cimoicddioptwtmfcfmppqooqqqold3|9fmppppmqmg9;;=&&$$*;)(<3359ffginnoporvuxwtupppohgghgghghhhkhjknrputttutttvvvvvvvrrrrmmmeeddd886666666666688ellmgjemmstwwvxzzBIIIHBACBEIIILMNOOOOO", "PPQQOMIIIIEBAtooppliifd3<{'>,,,;--->)<1||5fliilol9459gmolmklmquxwulggippuqomqqoom91|0imqpppupof7|~~!)!]{][:}652641_(]]'>,>;==%$##%=,)]<35cfffilnoonmnrsrrspppmmkkggggggghghkhkrrqtuutwwvvvvvvvvrrrmmmmeedd88666666666666aafiifhgehmmtwvvvzzCHIIHECEEIIFMNOOPPPPP", "QPOOKEAzAAwttpiiloolilof5<~',,)''-*--)/|359fiiotpi9339fmppppommtwxtidfkoqqqmmmmomm0|40gmquttupi97|//~!!]]]:}473a71|:]]''>--=%%$##%=;,]/|29cijlloonnqqqqnqnnojmmmmmkkgggkkjkjkhrrrusuwywvvvuvvvqrrrmmmmeedd886666666}}}}68bfihebddejmmsvvvyzCGHHFFFFFFKMNOOPQQQQQ", "POMKEzAwuppligf9cfiiilptl9|/),)))'-**>)/|55cfiotwpf5459iptutqplqxwwqgdgmqqpmmmmlmmk5159imptuupmg77|<(({{{[_[}26672}:({]'>-*=%$$##%=->!~_170dijlororoqrrnmjjjgkkmmommmmmlmnmmmkrqrrptwyywxvuvvurrrrmmmeeedd886666666}}}}28biih8b8dgjmmrprvAACGCHFFFFFKMNNOOQQQQQP", "NNMIHEAwtpoifiid9cgiilptpi9|(~~~/{,;;->)/|5cfikpxwofc09cmtttqqolqwwui9dfopppmmmkkmmc||5cgoqputqic5311<_((_:[1a5a731<]{{''>-*&$#@#%=;,!~::479hfioprrrpqqnnjhhhggkkmmqpppoomqqmrrrrrpvxwwvvwvvvrrrrkmmmeeeddb8666666}}}22268iiba68bggjmmrptzCCCzAFFIIKNNNNOPQQQQPO", "NNNKIHBAxwtoooooliiopoppplc5||//<>-*&#@@$=;>!]_<435dbgilnnrprrnjjihhggggklmpppqpqpprrpqrrsuvwtvvvvvrrrrqmmmmeeeddbb666666}}}2226bccc8666bggemmstwyBAzzEFKMNNNOOOPPPPPOO", "OOONNMMKIHEEAywwwttttwtppof053|||33|{'')~/_3cillotutpommmuwtqptpqtxxumd9ckmpqqmligki91|7ddgkoppoi97733377742}2677a311_{!'>--*%$#$%==>'{/:4750cbginnnmnnniijggggggkkkklmqqutttrqprruvwutvvvvvrrrqmmmnmeeeddbbb666662}}226acc9666668egehmnwwyzyyzBFMMNNOOOOPPOOPPP", "QQPPOONMMKMKIHHEEAwtwyxtppl0533|3553|////(<<3flloptwwtpquwzxppuuttxwxqf90dkpqqmmkgggd7<|0dgglmolic077|335066aa65723|1<({)'>-*%$#$%=>>'~~_4790bbgginnihnnjihhggggggggggkmmptttprprpsvvsvvvuvrrrrrmmmmmeeeddbbb6666622}22aacc862}6a8hbdemqquwwvyzCIMMMNOPOPOOPQQQQ", "QQQPOONMKIKKIIIIIIEAABAywwtl53||3|33|<<<||,')]_1359dddfhjjkhjhhjgggkgggggggggkmqqtttttprxuvvvvvvrrqrrmmmmmeedddb888a6222}2}}}26cc662}2688bdgjquuwtsyCGIKMNOOOOOOPPQRQQ", "QQQQPOONKIIIIIIIKIIIHHHEAAAyo9333<;;=%&&&->''{/_1457bhbggijikhjejdfgkgggggkkkgkkmpprtstswvvvuvvvrrrrqqmmmmeeggbb888222}}}[[[[}26bc62}[22866bgjnuuqstzBJHKNOOONOPPPQQQQQ", "PQQQQOONMKIIIHKMKKKKKKKIHEEEAtig9|/{~<|353>==&&&*--']~(_1375abcfikjhhejefddgggggkkmkkkkkrrnrrrwwwvwxvvvrrrrrrkkkmeeddb88aa2}}}}}}_____16b96}}}}22666bkoouqmsyEEHKNOOOOPPPPQQQQQ", "PPQQPOONKIHEEEHIKMKMMKKMKIIIIEypi5-*&$%*-;,)](<1357acdgfinhjhjgfddddggggkkkkkkkmooopstxwxyywxrrrrqqmkkkeeddb888222}}___(((((([79562[[}2226aekmooqquABEIKOOOOPPPPPPQQQQ", "PPPPPONKIIEBAAAAEIIIIIKKMKKKKIEApg5|/~{_|7974|<19gltyAyplltEEEHHHGEzyxywqc3379mqqqmmg05731147dcgfcc03790d05a7888ab07241_{~,;;*%$$%->,)(/1|350ddcgfinjjnnfgddddddddggkkkkoonnnssvvwvyywtttpprmmmmeedbb88a2222__(({^^^!^^(|774_[[}}2}28bimonqquAAEIMNNOPPPPOPQQQQQ", "QPPPOOMMIEAzwtppwwwtyEHIKKKKKMKHBpic3({!(<7907770diowBBwoipyHIIHHHHEzzyxum0445cmqqqmkd033113500diiic5750d998008a8aa722*&&&&->,{(_11550cbbgfgjhnnqiigddddd0ddggkkooonovsvvuvvvttutttsmmmmmeeddb6622}}___^^^^^^^^^[}32|(_[}}}}26bflmniuwxAEKKMNOPPOOPQQQQQQ", "PPPONMKIHEAwwttpplikipwEHIKKKMMKIEwoc|(!!{_7999ccfiipAAypootBIIHHHHECAyzwug7345gqqqqmk0744|43570diif97570dcdcdc8bac0522_({!'>-*%%=-'']{_|450acbggghjhjlmllgggddd0dddggmonmnrvsssttvsussttqmmmmmghggb882}}}_((^^^''''''!]12}:{{_:}}}26bfimklpxwBIKKKOOOOOPQQQQQQP", "PPPOOMIIEBEyywwtpogc9flpwEIIIKKMMIEwl93/{)~<59cfilllowAwpoopwEIIIJHGEBAAAxqd3439mqqpqmg74414409779cfcc090dhcfegbb0a857}}({{'';*%%=;'!{{_<159abcggiijhhfiiilggdddddddgiljnlqvrsstusrsspummqmqqmmjegbb886}}_(^^]!!''','''{<||]^!(::_[269eeikmpwxBIKKMNNNOPQQQQPQPP", "PPPOONKIIHEAzywppolf09ccflyEIIKKKKHApi93<{{/<39ciopptyAAtollpwEHIHHEEAAAzAum0775cmqqqqld741347007359dgddddd9figgbbb8a53}:({!';;===;'!{{_<1789cfggggjhhggfiigggddddddikiljnrqrsvvrrrusmmmmmmmqqmjggb88622_(^^{'','''''''{_|_{]^^(:__26c9fimqtpzEIHKMMMNOPQQQPPPPP", "QPPPONMHHEAyxwttpllfd99999iwBHIKKIIEwplf92:::269ciptwAABypiiopwEHHHHECAAzAzumc075iqqqqpkc743479093379fffidbdhejkjhhbaa7|[[{]'';;;;''!{(_12a8a9ggiijjhgggfggigggdddgiilkinmmqvvsrrqrmmmmmmmmmmmjjggb88621_^^{!''';>;;>;'!<_/]'^^((__<69cfciqptBHIIKKIMNOPQPPPPPPP", "QPPONKFCCAuwttppollicdccdcfmtyEHIIIEAtpoic5}:}268clpwyABAukfiopwEEHJJECzAzAzukd57dmqqqqqm0333570d07359fgighgbejkkjehbaa74[[(!';;;;'!{(__22669dgggfjhhgggggffddddggkkmlnmnmmrrrnrqrmmmmmmmmmmmmjjgea8622_(^^!'';;--;;--,)<<('''^]({(1688chnqqwBHEIKIIMOPPPPPPPPPQ", "QPPOMLFBzwqqnmlloiiffcccfiilptwAEIIIEAywtpi9714370fltwyABymfflptyBEEHHEAzAAAxpfd00goqqqqqk055670dd95770gflkggeejkmjjhbaa74[[^'';;''{([[}2260cdfggjjhjgggffgfgfhhhiilloqnnnrrvnnokkmmmqmqmmmmmmjkkebba21_^]!!'''--===*;>)/,]<~';'){{!{[3389cnnqAEHHIHHMNONNOPPPPPQQ", "QPOOOLIFzvsmedgbab989cfiifiilptwwAEKMKIEBAAwoi9550dfimwAEEyqiiotwAAAEHIHEAyAAwtlcddgmppquumkcd999dggd00dggomnmjjjkmmjjjb864<_^^!!^^^:<13779cdgiheeehhggggffdhheijjjnrrqrvrrrnnhhkkmejnrprppqppqqmkidaa4[:{''';;--=&&&=;,/<~>;''!^^^_|388fllpAEEIEEIMOONMOPPPPPQQ", "QPPOOLHEzvsmmedb886868cfffiiilptwyAHKMMKHEAwtplfbbcffiqwBHEytppptyAAAEHHHBAAzzwuifgilqqquuupigd9dddgggddhhomqpnknkmmmljeb8621(({{((_|17790cfhhghheeheeehjjeheeheihjnonmrqppnnhkkkejjorpspppppppqoikfb05}_/!,>;--==%%%%;'{<{>;''!!^^:<158cfltBEHIGEKNNMMMNOPPPQPQ", "QPPONLHFzvssmed8a662a689bccfiilptyABIKMNMIBywwtpibdfiiipyEKEAwpppwAAzAEHHGBAAAzwuiiilopuuuuupkcddcdgggggjkmmmqnnnnmmmmnjea662__((__14479acefffhhfeehhhehhheehhehjjnnnmmqrrorkhkhhhjnqqqqppprpppmokjgcd06|<~!,--=%%%%$%*>{/);-;,''^^[:159cfltBEEHBHMNMIKMNNOPQPPQ", "QPPPNLLFzzvsmeeda666268b988fiiilpwyAEKMMMKHByyywplfffiiowAEIHBwpopyAAyAEEHGAAAACytolmmpuxtxxtuidddgggggjjloomnqnnnmmmmmjefa622}[[}2266a8cbffffhhhehhghehehehhhhjhjnnnmmnqnnhmmmjjknmqqmmmmpprppmmijcc0763|<~,>=*%%%&&%*>)()-->'''!^[[:40cciwBEEECINNKHIKNNOOPPPQ", "QPPPNMLHCzvsmmedbb66886a9668fppptwyAEIMMNNMIEAAytplifiilowAEHHBwttyAAyyAEEHBAAACBzwqlmqxxxwxxxpkgggiggkkgilljmmloommmnmmjhbba6}[[}22a6abcfffffhhheehhghhhehhehjjjhmnqnnnjnkhkjjkmmooollllmmnnlnmifea90221||<~'>*%&&&&&&-)~'-=-''''{:::40c9iyEEByBIMMHGIKMMOOPPPQ", "RQPPOMLFFzvsmmeddb6668abbbadiptwwyAABHKMMNNMIEAwtpoiiiijiptyEHHEAyAAAyyyAEHECAyABBAyuqquxzyxxzxumkkkijkkkjjjkkmjnommmmmmmhbbba2}}226a89bhffhffheeeehhhheeehhhjjjjnnrrmmmlnhheegklpolijhhjjkkknnkhhh8a3}1___(/{,>*&&&&&&-)~'-=;''''{_:1250clABEAwEKKKEGIKKLOOPPQQ", "RQQPONLIFzvssmeedbb6666a88bciopwyAAABEKNNNNNNKBytpillllifipwAEEEEEBAAywwyAEHHAAzABCAxpmpxAAzAzzxxqmmkjjkkkjjjhmmnnpmmnmmmmhha886688bbhfjieffhffeeehhhhheeehehjjjjhmmmnrlnhhbhdbiiolliieeehhkkkjkeb666|[_(({{~{~,>-&$$&&;)~!=*-'''){(_}250coyAAzyHKIIEGFFKMOOPPQQ", "RQQPONLIEzvssmmhddbbb666889jloopwyyAABIMNNNNONKEypoiopoiffipwyABEHEEAwtwwABGIHAAAzCCzwuquyzACzAzzxuqnmmllljnhhkmhnrmmmmmmmkkeb86688bbbejiffefhheeejhhhhhhhheehhjjmmqmrnnghhbdbbhiiffc9ahbbbeegggeb6661[{{!)!)!)),'-%$$&;)~);*=-;''{/(}437cpyAAwAIIIIEGGIILNOOPQR", "RQQPONLHFzvvsmmeeddb88bbbbhimmmmqttyAABHMNNNOONKEypplptoiffotwAAAABBAwttwABEIIGBAAAzzzxtwwyACAzzzAyuqpqoonkjkkhmjnnmmmmmmmkkggb88bbehhfhifhehfehehhfhhhhhehhhhhhhmqqmmnnhhba88bebcbd8aaa8bbbeghgebb62_[{!'''>,,,',>-*&%-'~);*=>''')//_227cpwywwBKIEHEGGFILNOOPQR", "RQQPONKIFzzvummhjgdddbbbbhgkmmkjnpptwyyyEMNNNOONMEytppttpigjowyyyyAAywtptyBEEIIHEBBAAAzAyyAABAAAzzzzxtppppmmnmmqqnnnmmmmmmkkjggddgggechfjihfhgeehehhhhhheehhjhhmmrqmnjjhhba888bc9098aa66aa8bbhkgebb62_^{!',>;--->>,,-**;'~);-;;'''!((<227ftwtttBKHEEEGEIILNOOPQR", "RQQPOOLIFBCAwwqqjjgggdddddgknnijjqptwwwuwBKMNNOONKHBwwwwwoifotwwwwwwwttttwABEEIKIEEBAAAAAzBBBCCzzzAAAytppmqqqqqqqnnnmmmmmmkkjjjedgggejeehihfhhheeehehhhhhhhjhhmmnmqnnjhgba8aa8aa8aa4316666a8cbekhba62[^{!'';;**==;>>>>->,~)>-;>'''!~/<126fpwttwEIEEEEGHIIMNOOPQR", "RQQPOOMKKHCByyuuornkkgggddfjnjmmmqpttwwwuxAHKMNNONMIEBABAwolmptAAAwttpttttyAEEHKKIHEBBBAAACCEGGEECAAAAwttpqpqqononnnonmmmkkkjjjeehggejeejhhhfeheeeghhhhehhhhhhmmmmmnjjgb0a68a8a86531_111266aabbheba62}^{!'>;-=%%&%*->>,'~/~'-->'''!{(<<26ittppwEHEEHEGGFILNOOPQR", "RQQQPONMKECAwyuuuppprmmnjjhjqqnmmqupwwwywtuABIKMNONMKIHEBAtolnpyAAwwtppttptyBBEHKKIHEEEBAAABEEHIIEECBAywuuptuprprnnnrmmmmkknjjjeehggejhehihhfefhehhhhhhhhhhhhjmmmmmnjhgb086266873}[[:[__112aa8bhebb861^^!'>;-=*&&&%%=>,)/,''!{((|39ittptwHHEEHECEFIMNOOPQR", "RRQQPONKFCzzwwuuqnnnnnooonqqqqmmmmqppttwAwutyAEIMNNNMKKIEBAtoopyABAwtpooppptyABEHIIIEEEBAAAAEHIIKIHEEAAAxutuptttpprnrnmmmkknjjjedggghhbhehieffehehehhhhhhhhhjhkhhnnljhba8662aa53}:[]^^^^__12aa8bbhbaa1_^{!';-=*%&&$$%=;)(||)>;>'''!{(/|39iptppAIEAyBEGIFILNOOPQR", "RRQQPOLIFCzyzwyqqqjjjjnnouuquqtmmmqloppwxAyttwABHMNNMIHHEEByppptAAAywtpooppptwAEEHIIGEBAyAABEHIKKIIHEBEBywwttttttuqmmmmmmmknjjgddgbebbbhhehheheechhhhhhhhhhhkhkhhjnjhhba6622634}[:^]^^^^^(_12288bhba64_[{!'>-=*%&&&$$%*'~|3(,>>'''!{{(<39lppppAIEwxAEGIIILOOOPQR", "RRQQOOLIFFzyAyyqqmmmmmmmqquuyywqmmqnlotwwyywttwABIKMMIBABEEBwpoptyABAytpnoppptwBHHIIIEBAyyAEEHIKIIIIIEEAAAAwtttutuqqpqqmmmkkgggd8b88bbbhaabbbbcbbhhhdhhhhhhhhhhjjhjjhba8662244}[[{!]!]{^^^(_1228bbbaa41[{!';-=*%&$&##$&=,<3<~,,'''){((<49lppopAHAwxAEGIIILOOOPQR", "RRQPOOLLFFzzzwwqrnmmmmmmmmqtwyyuqqqqnpwyxyAyvtwABBEIKKHAAAAEAwpoppyABAytppoppptAEIIIKIHCAyyBEIIIKIIIIHHEECAywttutuqquupqqmmkkbb8668aa888aaa8bbbbbdddddddddddgghkjkjggb8662224}[[]]!!!!!!{^^(_122abba64|[{!'>-=%%$&&###&&>~|_/))!''!~((<39lpploAEAtxABGIIIMOOOPQR", "RQQPONLLFFEGCCAyqqqrqqqmmmpuuwyuuupupwyAAAAAAwwwABBEKKKEywwyBytpootyBEAytpqppptwAHKKKKIHEByABHHHIHIIKIIHHEBAxwttuqpopoppnoljhe8666a6aaaaaa880999dc9000aa0dddggggghhh8a862}221[[({,,',,'!!{]^__222ab8631:{!'>-=%%$&&###$%*)/~/~{/(~'){(_|5coppooAAwtxyCCEIKMNOPQRR", "QQPPOOONMMKIEEAAAAzywuwttpqwvwttquwyABywyyyAABAwwyEEEIKKIytptttppoopxAAAAtpmpptwAABHKMNNMKIEBABEBGHHHIHIHEEEEBAyvwpponijjiffefb66222264434244226aaaaaaaaaaaaaaabddda066}}2}:::(]'''>;''','!^^(_}22aa6|1:{!',>-*%%$&###$&&>){)'~(/{~~(_|5coppooAywtxyCCCIKMNOPQRR", "QQQQQOPOMMLHHEEAAABBAAyywtxwvxptmqtyBEAwuttwAEEBwwBEHHIKKHytppopppopuwAAAytpoptwyyABHKMOONMKIEBBEEHHEEEEEEBBEEEBAywtppllijgeb8886626|14111}}}}222644477770aaaaab800a722}2}_[_<]!'>>>;;>''''!^^(_}26a24_[{!',>=*%&&$####$&-){)',{/((((/|5copplpwwptxuyABFKMOOPQQQ", "QQQQPPPONNMKKIIIEEEEBAAyyAAywwqttmqwAEEypolptwEEBAAEHHIKKKHAtppopporpuwzAAypprtwwwyAEHKMNOONMIHEEEHEBBAABAAABBEEEBAwwtpniec8662226434||::[}}}1|11111444377770008aa67a2}[}[[[:({'';;;;;;;;','^^^[}}2221:[{]!'--*%&&$$###$&=,)'->){{(___|3coppopttpsxuyABFIMOPQQQQ", "QQQPPPPOPOOOOOONMKKIHEBEBBACywpttmmuzEEyplfilpwBHEBBEIIKMMMIBwtptrpopqtwABzwsqppwwwyAEHKNOOONMMKHEEEBAzAAyyAAAABEEBBAtpoljca662}2|3||}}}}____<|:_1111}42277700067a622}}[_[:_:(!''-;;=-;;;;''!]^(_}2221_[{{''-=*%&&$$$##$&=>),>>''!(_11|39oppoptpoqxuyzzFIMOPQQQQ", "RRQQQPQPQQQQQQPPPOOONNKIEEBCAAytttqqwBBAtofcffowEHHEEHKKMNNMKEywttppputwAEEAyuqutwtwyEEIMNOOONNNKHEEEEAAAyyxywyyAEEEAywtolfc862<_((:[}21<:<((_______11144777776777a2}}[[[^[([{!,---===-;;;;''^^^[}2}21^[{!''-=*&%&$$$$#$$%>),>;>''!_34350ltppoppoqxuyzzFIMNPQRRR", "RRRQQQQQQQQQQPPPOOOPPOOMKIECCAAwwwwtwAAAwpjiccfltBHHBEIKMMNNNKEAwwtptuwwCEEBAwtuutwtwAEKMNOOOONMKKIHHHEEBAAwxwttwAAAAAywtpoib531_(^^[_<|<<___(((__::[1}1227777767342}[[[^][(({'>;;===**=;;;''^^^__}}}_^{!!,;>;*%&$$$$$$#&%-,)>;>'''{1459dotpppppppxuyAzFKNOQQRRR", "RRRRRRRRRQQPONMMKMMNNNNOONKHEAABAAAyyBAAwtpoifffltAEEAEIKMNNNMIBywtptwwwABEHHEzwvwyywyEKMNOOOONMMKKKIIHEHEEAAwtttwtwwwyyywtpic53::^(]{{/___<<__///____<1}}244734733}}[[(^^((^{'>-=====*=;;;;''^^][}}}[^{!'';;**&%$$$$$$#&%-,),;;'''!_|59iptpppttpuxuyAzFKNOQQRRR", "RRRRRSSRQQONMIGGGEHIIIKMNONMIEEEBBBAAEBAwtptpliffltAEBBEKMNNNMKEAwwtstwwyACEHHEAyAABBBBIKMMNNOONNMMMMKIIIIIHEBAwwtppppttwywtpic5|}_/(~{{{{(/<<<<((((__<:1}}24421144}1[^(^^]{]!,;===%=====;;;''^^{_}}}_^!!''>;**%%$$$####&&*,{);>,''!(_|9ipwtpptttttuyAzFKOOQQQQR", "RRRRSRRQQPNKIHBCCCCGGGHIKNOOMKHEEEEEBEEAtppttpoifiipAEEBEKNNNNKHAwywwwttxAEHIKHEEBEEEHEIMNNNNNOONNNNNNKKKKKMKKHEBytpooooptttpoif95|<_((~~)~~((_<<<(/<_<<<:111|}1}12|:[[{^^{({!';==*%%==*=;;;;'!^{[}}__^!''>-=**&%$$######&=>~)>>'''!{<|5ipywppttswtuyAzHFOOQQPQQ", "RRSSRRQPPONMKFFBCCCCCCGGIKNNNNMKIIIIHHHEAtptwwwplifipAEBBEKNNNMIBwyyyzutuyABEIIHHHEEEHIIMNONNNNOONONNONNNMNNONNMKIBytollilopppoolf933|__~~~~~~/))>>''''~/<3coyytptttwwuwzzFKOOPPPPQ", "QRSRRQQPOOOMMKKHEGGGGGGEHKKMMNOONNMKKIIIEwpwAEEAwoiiltBEEEIKMNNKEAAwAAwtuyyEEHHIHHEEEHHIMNOOONNNNNNNNNOOOOOOOONONNMHBwpiffiiloppplif953|<<<'!^{[[[^^!',;-=%&&$$$######&&-)),;;''')(<|9lwAwtwwwywxyAzFLOOPPPPQ", "QRRRQQPOOOOONNMMKIKIIIHHIILKKMOPPPOMKIIIIBwyBHEBAwpllpyEHHHIKMNMKEAyyyxtwyABEEEHHEEEHEHIMNOONNNNMMMMMMNNOQQPONMMNONKIBwoic9cffiiiillifc53||'!!^[[^^{''>;-*%&&$$########&*,));>'''!(/19ftyywAywywxyACIKMOPOOOP", "QRRQQPOOOOOOOOOOOOONNMKKIKIIKKNOPQPOMIEIMIBBEEBBEBAtppyEIKIIKMNNNKEAAAyyzAABEBEEEEEEEHIKKMNNNNNNMMMMMKMKNOPQPNMKKMMKKHBtlf63333359ciiiic953|/~)))))~{/<<<<<_<__](:::]]!!!!(_:{';**%%%%%&%==;;>'!!^{^^^''>;-=*%&$$#########&&>))'>'''!((|6cpwwwBAAAwxyACFKMONNNOP", "RRRQPPOOPPPQQQQQQQQPPOONMKKKKMMMNPPPOKIIMMHEEEEIKIHBwtyEIMMKIKNOONMEBAyyAAyACCCBEEEEGEHIKMMNNMMMNNNNMKKKIMNOOONMKIIKKIEAtlc6}/~~(<|59fffc953<~))!!!!!!{((<|<<(_(:::(]^!'!'{(:~'--**%%%%&&%=;;>'!!^^^^^'';;-=%&%$########$#$&-)~'>,''!(_}29ottwABBByxyCGFKNONNOPQ", "RRQQPOOOPQQRRQQQQQQQQPOOONNMMMMKKNOPOMIHIIHEEEHIKIIIEBBBHMMMIIMOPPONHBAyABABACzzEEEEEHEHKMMMMNMNOOOONNKKIKKMNNNONMKKIHEBAwof9<~)')~/|599c9953!!{^{^^'';=*=%&&$#########$&&*)),;'',!//}29ltttyBHHAxyCGKKNONMOPQ", "QQQOOOPQQQRRRQQQQQQQQQPPOPOOONNMKKMNNOMHEHHEEEEHEBEHIIIEHKNNMIKNOQQPNHBABEEHEEBCBEEEEHHIKMMNNNNNPPPPOOMMKIKIIIKNNNNMIEAAABAti9<{',,))/|3599995|!!{^!!!';-=*%%&$$#########$&&*,))>''')~_}29lttpwBIIByACHKLNNNOOPQ", "QQONNNOQQRRQQQQQQQQQQQQQPPPPPOONMKIIKMMKHEHHEHHEAwwAHKMKKKNOOMKMOPPPONIEHHIIKIIHEEEEHIIKMNOOOOPPPPPPPOONNMMKEEEIIIMMKIBwwABByo9|/~))!)~(<|59cc953|;;*&%$&$##########$$%*>))'>''){_}29ltwtwAEHBAAEGKKNNNOOOP", "PPNKKMOPQQQQQQQQPPPQQQPQQQQQPPOONKHEHHIMKIHEEHIHBwwAEKNNOOOOONKKMOPPPPOKKIKMNMKKIIHEHHIKMOOPPPPPPPPPPPPOOONMIEBAAAEEIKIAtptAAwpf5|/~~~!)~/|59ccc93|''!!!!!!';;=*&%$$#####@##@@@$$&%>)~'>'')![:}5iwwtwyEEBABEJKLMNNNNNO", "ONKKKNOPQQQQQQQQPPOOOOOOOPQQPPOONKHBBABIKKIHHHIIIEBBEKMNOOOOONMIINOPQQQPOKKNNONNMKKIIIIKNOOOOOOOONONOPPPOONMKHBywtwAAEEAwppptwywl9|/~~!)))~<39ccc953|'']]!!!!';;=*&$$##@####@#@##@#&&-,~)'''!{::}0itywwwBBAzAEIKKKNNMKLN", "OMHCHMOPPOPQQQPQQOOOOOOOOOPPPPOONKIBAyBEHKMKIHIMMKIEHIKMOONNNMKIEINOPQQQQOOOPPPPOOONMMMNNNNONNONNNNNNOOPOONNMKHBywtttwwyyywtpptwwo9|/~)),,,)~<39ccc995|->,~<|59ccc53|-**%%%%&%%=;;;'!!]^!'';-*&%$$#@###@@@@@@@@#$&%>~{)'''!]::4dpwwwwBEAzAEHKIIKKHEIM", "NKHEHMNPOOPQQPOONOOOMMMNNOOOOOONNNMKHHEHIIKMNMMKKIEwpptAEIKMKKKKKEBHKNOOOOPPPQQQRRRQQPOONNNNNMNNNNNNNMMMMMNNMMMKHEBwtolootwBEApfciolc3<~),,-;=-,)/|5999953|<<<<(]~]]/_/^''''!)'>---***&%%===;;''!!!',;;-*=*&%$###@@+@@@@#@#$$%;)~~'''!^[:39ltwwwBHBAyBGIHIKIEEIM", "MIEIKNOOOOPQPONMMNOONNNNNOOOOOOOONNNKKIIKMMMNNMIEAwpliotwAHKKKKKMKEEIMOOOOOPPPPQQQRRQQPPOONNONNNNNNMNNMKMMMKMKKKIHEBAwpooptAHIEtiilifc9|~)',-==;-,)<3599953|<<<_/~]{]//]!)!!)]'-*********=*;;;,',!'';;;=*&%&$$####@@@@#####$$%='~~!'']^^|39ipwwwBHEAACGGGHKIEEEK", "MKIHINOOOOPPONMMMMNNNNNNNOOOPPOOOOOOONMMMMMMMMMIEytpliklopwEIIIIKKKKKNOOPOOOOOOPPPPQQQQQQPPPOONONNNNNONMKKKKIKIKIIIHEEAAwptyEKMKHApf9cc9|(~)>-**=*>,~<3599971|<<)/{!!!^]|39ipwywAHHBACCCAEKIBAEI", "KKEHIKNNMMNNMKMMMMKMMMNNNOOOPPOOOOOOONNNMMKKIIKKIEwpoikiilpwEIIHIIIIKMNOPPOOOOOOOOOOOOOOPPPPPPPOOOOONOONMKKIIEHHIIIIIIIIEBABEHKOPOEl539c93;==**->)~|359953||<]]]](/!!'!)~~)'-*%%%%&*=;;;;'!]!'';;=*%$$###@@@@+@@@##$$$%%&**;~--****->)/|559553|//]](/{!'',)~),-**%%&%&%*=;''!]]'',;-*%&###@+++++++++@###%&%**;)<<_/([:|79fowAyAEHEBBBAwAEHzAEK", "OMEABHNNIHEGGHEHKKKKMKKMNNOOOOPONNNNOOONMMKIEBEIKMKEwpttppootAEHIIIHHHIKKKMMKMMNNONNMMNNNNOOOPQQQQQQPQPPOONNMKKHEEBEEEHHHHHEEAAAEKONEpf5|3599|~,>-****->,~<359905|<]{(/]!'''))!'-**%%&&%===-;',!'''';-=*&$#@@++++++++++@##$$%%*;,(<_//::179flwBAAEIHEAAyyAEBAAGM", "NKAwAEKKHAzCBGCCEIKMKMKMMNNOOOOONNNNNNNNMKIHEBBEIKMKEywwwwtppwAIIIIHEEEEEEEHEEEIKMMMNNONOOOPPPPPPQQQQQQQQQQPONMIIEEBBEEBEAAAAywyyBKNNHwi5||5cc5<),>----->,)<|599933<(//]{''')!)'>*%%&&**==;;>'''''>;;-=&%$$#@@@++++++++@@@##$%%=-)<_(~:[_|5cipwAABHIBBAyyxzzyzAI", "KIAwwAIIEAzABCzzCHIKMNNMMNOOOOOONNNNMMMNMKIHHEEBEIKMKBywwywtttwEIKIHBAAAAAAAAABBEIKKMNNOOOOPPPPQPQQQQQQQRRRRQPONKKIHEEEBBAABAywyABEHKMHwi5<|3cfc3/),>>>>>>,~<|599993<',)),>-=*&&%%==;;;','';;;=*%&$#$#@@#@@@++@+@#@@##$%%=-,/_({]^_|38cltyyzEIBxuuuuyzrrwE", "IIBwwAEIAAyBBCCCGHIKNOOOOOOOOOOOONONMKKMMKKIIHHHHIKMMKEAwtwwtpwAHKKIEAwyyAyAABBBBEEIKNNOOOPPQQQQQQQRQQRRRRSSSRQPOOOMMKKKKKIIKIEEIKIEEKNKAo9|<|9ff5<~,,>>>>,)~/|599953||<],'>>,),,>--***%*==;-''';;;;=%$$###@+@@+++@@@###$#&&%%==-,{_>>>,,)(|3599555|:),';',,,>>>;>---;;>;'''>;;=%&$$##@@++++++@@@@###$%==-->>)/11_::_1379fpyyAzEBtpruuttqmuA", "EEByAEHIAyxAAAHEEGGHKMNOPQPPOOOPPPPONMKHHIIKKKMMMKKKMMMIypoopoolotBEHHEAwtwwAAABBBEBEIKMNOOPPQPPPQQRRRRRRSSSSSRRRRRRQQQQQQQQQRRQQQOHAEOPPOKAti99fopi9|/~)),,!!~<|3555953|~,,>,,,>--->>>,;>>>'','>-==%&$$##@@++++@@@+++@###$&&*;>')(|33}::|35cfoyyAAAAtpprpttqqpy", "ABAwyEIIAxuyABEBEEHIKKMNPQQQQPPPPPPOOONIIEEIIKKMKKKIIKKKEtllloliiotABEEBwtptwyyAABEHHHIIKMNOOOPPPQQRRRRRRSSSSSSSRRRRRRRRQRRRRRRQQPOIBEIOPPOKBwl9cflppi9|,,,>****->,,,,,'!!,;;;=%$$#@#@++++@##@+@++@##$&%*;-;,{<|72[[||59clwAAzAzwqqmpqtpnpw", "yBAwwBKKEwxwzEEEEIIIHKMNOOPQQQQQQPPPPONKHAyABHIIIIIIHHIKIApolooolopwABEBAtpptwwwwyEKKIIKKMNNOOOOPQQQQQRRRSSSSSSSSRRRRRRRRRSSSSSRQQQOMHHIOQQOHAti999iptoc5|<<<<||||33599995|/)))),>****->,,,){]]!'>;=&$$##@+++++@#@@+++@###%*->',,)/_3952}|159cityAAAywrqqqutpoot", "yBEAyAIMIBwAzAyEEEEECEIKMOPPPQQQQPPOOONKEAwtwyAEHIKKIHHIKIAtoopoooptyBEBAywttttttwAHIKKMMNNNNNNOOOPQQQQQRRRSSSSSSSSRSSRRSSSSSSSSRRRQQPNNOQQQMBwti955fotof5|<<<<||<|||355c95|>-;;;'',))]]{),;-*%$###@++++++++++++##$%-,~)){/|35fc94335bcipyAAAytppppwwtrot", "yABAwyBIIByAAyzAEAyAABEIKNNOOPQQQPPPOOMKEBytttwyBIIKKIIIIIHAtpooooopwBEEBAwtttppopwyBEIKMNNNNMMMMNOOOOPPQQQRRSSSSSSSSSSSSSSSSSSSSRRQQQQQQQRQOHAAwof99fptpi93<<<<|<<<<1||555||<>>>'')!{{]))),>>-=$##@++++......+++@$&=>!)~/<|35ff953799fiowABBAwtpppwytppt", "tyBAwwAEEAAywyAzyywAACzEFKMOOPQQQQPPPPNMHBAwwwwwwBHIKKIIIIHEAtpooollpwAEEByttpolloptyABEIKMMMMMMMMNNNNNNOPPQQQQQRRRRRRRSSSSSSSSSSRQPOQQQQQQONEwAEyof99fpwwof53||11<,>'',){]])'',,'>-*=*%###@++....++++#$&*->,)/(_|5cc52459fiopyAAywtppptwwppp", "twBAwwABEBzyyyBAwuyyzyzAEKMMOPQQQQQQPPNKIBBAwtppptAEHIKIHHHEBypoopoilptABBAwpolffilptwyAABHIIKKKKMMMNMMMMNOOPPPPQPPPPPQRRRSRRRRRRQPOKMNPQPOIyoipBBti933cowwpf95|33||<(/~/<|||<<<;',,)!{]),',>--;*=**%%%$##@@+++@@+#$$$&*;;,'!/|7952|70filpwBBAAwpoptwwtop", "ptyAwtyABBAxzBEAzxwywyzzFKMNOPQQQQPPPOMIHAAywpoiilptBHIHHEEEBAtppttoiiopwAAytpliffilptwyyABEHIIIIMNNMNNMMNNOOOOOPOOOOOOPPQQQQQQQPPPOMKKMNNKAoc9iyHyi5<<|5fpplc53333|<(~))~/<<<<|||/),',''''',){)''>--*=%%%%$%%%%$$########$$%&*=;;''!{122}:457filtABBBAtolowwoop", "opwAwttyBEBAzAEAwxxuwwzBEKMNOOPPQQPPPOMIHAAwupokiilptAEHHEEEEBAwtwwtoiiloptwwtplifdgioptwyBEEHHIIMMNNNNOOOOOOOOOOOOOONNNNOOOPPQQQQPONMMMNNMIAoioAIAi9|/~/|9ili933||<<~)>;'))~~/<|||/)),,,'',,,,'',>-*&%%$####$$$$$$$$%$$%%&***---;'!!!{13}[_1|85cipwAywpiijopoll", "iopwwtptyABwtwzywtwuqwAAEKKNMOOPPPPPPONMIEAyutpolllootAHHHHHHEEBAAAytpliiilptttplifdfilotwABEEEHIKMMNOPPQPPOOOOOOOOONONMMMMKNOPQRQQPOMKMNNNNNHAwAAti93/~~~<9iiic53|>,)~/<;*&$$$##@@@@@@@@#$$$$*=*->->,''!!{){<43:^_1|439iptppifccgiifi", "filpwpootyAtppwxptpuqwxABEIKMOOPPQPPPOOMKICAywtqpppppptBIKIIIIIIHEBAwtpoiiilptwtpolifiilmpwABEEHIKKKMNPQQQQPPPPPOONMMMMMMMNMKKMOPQQQOMIKMKIKNNHApof993**%**=->)////)),>;;;;>>';;>-*&%$##@+@@@++++@@@##$%*->>,)~{//~(/<|52:<<__|29looli9589cfcc", "cfiottllpwAtlltpqqpoqqwAyzEIKMNOOPPPOONMKKEBywttqpppoppwEIIHEHIIIIEAwwwtplilotwAAywwtppoopwyBEHHIHKKKMOQQQQPQQQQQPONMMMKMNNNNKIKMNOPPONMMHBBEHEypf953|||/~))/5iolc5|/~)>**%%*&*->)///~),>>-;;;>>;;--*&&$###@+++++++++++##$$%*->,'{{////||5832}:}269ioolic977cc99", "fiiowwpoopAwpopplmmlqqwuxzBFKKMNOPOOOONKKKHEyttpppooolotwBEEBBEEHHEBwtttpoiilowAEEEEAAyyyyABEHIIKKIIKKNPRQQPPQRRRRQQONMKKMMNNMMMMMMNOOOOOKEAyyAwtof5|<<|3<),~<9lpi9|-*%%*&%*-,~//~~),,>>;;;>;;*=%%&$##@+++++++++++@###$&&*-;''''!!~~_|593321359fptpoic90dcfc", "illpwAwpotwywtpolikinuuwxzAEIKNNOOOOOONKKIEBytuoolololooptwBBAABBBAAwpllllifcflpwyAAAAABBABEEIIKMMMMKMNPQRQQPQQRSSSSRQPONNMMNMMMNNMKKKNOOONKEAwtttpi93|353/))/3cilf5|<~,-=*%%&%&*-,~///~)),,>;;;;;-*%%%$##@@+++++.++++@@##$&*=-;'';''''')/|3|<<<<|39ipppoic9cfif", "iilpyEBwttyEEywpiikgjquwtxzFIKMNOOONONMKHEBAytplkilllollloptyAywwwywwtoifiif999cilptttttwwwAABEIIKKMKKNOQQRQQQQRSSSSSSSRQPPONKKKMMMIIEEHINOPPNHyttwwpi9995|///|39ilf5|/)-*%%*%$$$%-,~~~)~)),,>>;;;-*%%%%$#@@@++++...++@###$&%=*;;;;;;;''''/<<~~!){/|5ioolifc9cff", "cciltAEAwtwEIHAyoiigjiqqtwzDEKKMMONNNNKIEBAxwtqplkllllliililpwwwtptttpplififc55599floooppppwyyAABEEEIIIMNOQQQQQQSSSSSSSSSSRQQONMKKIHHHBBABIMOPOIBAABAwoc53|<<<<|39ilc3<~,*%%%%$###%*,,)))))),'>--;-*=%&%%$$#@@+++++++@@###&%%*;;;;;;;;;;;')/({''''!{_5fifc95599c", "59cciwBBwptAIIEAtligdemmtwzAEIIMMMNNNNKIEAyuuppqollifeffiiiiiptwtppppppoliffc955555cilloppptwwyAyyAAAEEHIKMOPPPPQSSSSSSSSSSSRRQPOMKHHIEEBABEIMMMMIHHEBwoc5|<<<<|35fiic|/)>%$%*%####&=>>>,)))),,>>--*=%&%$$$##@+++..+@@####&%&*;;;;;;;;;;;;'!~{';;;''{<0cc953|359", "95359lyBypptBIEAtiebdemmquxAEHIMMMMMMMKIEAAuqomqpomiicccfffgilpttppopppooifffc9553359filooppptvwywyyyABEHHIMOPPPPQRRRSSSSSSSSSRRQPNKIIHIIEEEEEEHIKMMKIEyoc53|||5559fol9|/)-%%%%$#@@#%*-->,,))),,>>>-*%&$#####@+++..+++##@#&%&*;*;;;;;;;;;;;')),---->,~|9995||||5", "95259fpAypopyEBypicedeempvuAEHIKMMKMKMKIECAwuqmmoppoifccccffiilpttppoooooiifffc9533599fillopptwwwwwwxwyAAEEHKNOOOPQQQQQQQPPPPQQRRQPNIHEHHEEEEBAyAEIMNMMKApic5339c95cotl9|/,-%%*%#@@##%***-,)))),,>>-*%$########+++++++@#@$&%*******;=;;;;;;->),;===->,~39995||<3", "35359flwytolpwwppifeggjmpqvxDHIIKKKKKKKIECAysrnjoppuplfccccfilllppppooollliifffc9555559cilopttwwwwwwwxwwyyCEIIMNOOPQQQQPONMMMNNOPPPOMIIEBAwAAywwttyEKMNNNIAtlc9cfc9cltti5<)>*%%*%#@@#$%%%*-,))),,,;=*%%$###@###@+@+@+@###$%&***=*&%&**==;=*==',>-*%*=>)<5c905||3", "5559ccfowwoifooppofffgjmmrsuDFHIIIKKKIIICCAvurnkmnpppolfcccfloolloppplllliiifffcc9557550cfipptttwwwwwyywwyABBHIMNNPPQQQPOMKKKKKKNNNONNMKHAwwttttpoopwBIMNNNMHAtppoolotwo9|~,-***%$#@@#%%%%*>,,,,,,>=*%%$$###@##@@@@@@##@#$%&***%%%%%%&*=**&%%-,,>****->{3cc99953", "5555599fopofdilptpihhgjmmruuDDEEIIIIIIIHCByvqqmnmolilllifccfioooooooooliiiffffcc9955333599fiopppptttwwyyyyyAAEEIKMOPPPPPONMKKIHEHEHIMNOONKEAytpoliiffipBKMOOOOMIHEAywAytf5/)>>**%%##@#$%$$%*->,,,,>-*%&%$$$#@@@#@@@@+###$&%&****%%%%%%**%&%%&&;'>==&&->,<9ffffc5", "333||425fomgc9ipwtibegemmrtuxDBFEIIHHHIHEAyvuqqnmoifgiiifffffioppolooooliifffcc95595533335afilooooppppwwxwyAAAEHIKNOPPPPONNMKKHEBAAABHMOOONKIEwoifcc99cltBINOOONMKIHBBAyo9|~),-*%%$###$%$$$%*->,,,,>-*&%%$$#@@@@##@@####&&%%******%%%**&%%%&&=*>,,-;;->)<5iiiif9", "1<<|_<139ipld0fowwocfgjmmrsuuxDBEEEHHHIHHBDvtqropomfddgfifcccfiopololloliifcc9955555553337adfjilllllppptwwwwzzBBEIINOOOOOONMKIIIBAwwwyAIMNOOOMHwof999599flpwEKNMKIHHBBAyti5|/~)>-*%%$$%%%%$%*->,)),,>=*%%$#@@@@########$&%%****%******&%%&==***>)~),>,'!/|ciffc5", "_(<<<<122cloidcitypffhhmmrvvsuxDBEEEHHHIIEDyuusppmlfc0cdfffc99cioooolllliifc99553355557735a0behiikilooooputwAyAAEEJMNNNOOONMKIKICytqpptABHIKMMKEwof953599ccfowBEEAwwwwwwti953-*%%%%**%%%*=->))),>-;*%$$####$##$$$$$$&%&****===*===**=;--**->)//)>>>,)/|9c995", "<((<-%%%%***%%%=->,))),,>-*%&$$$%%%$$&&&$%%*=*--*=--=-;-*=;--*=**=-,)'-*-->,~|9995", "|_(__<(_}39loifciopifkljmmponrruuABBBBEHHHEBywxttpoofb99cffifc9059cffffififfc955333599990999ddcchgeiijonlrqptxxzECCHIMNNNNNOMKIHAuqjjkhinloooptyBBypf5||35559clpwwplifc99|<|3|/~~)>-*%****%%$&*=>>,,,,>>-*%%%%%%%$$&&&%%&*****=*==*=**&&*%%&&%%&%=>';%%**>)/3999", "5|_(<*%%*-*=&%%%**->>>>---=&$$$$$$$#$$$$%&%&*%%&&&&&&%$$$$$#$&$###$*;;*&%%=;,<599", "93<_<<-*%*---*&%%%**---;-***&$#######$###$$$%%%%$$$&&$$#@####$####@@#%=*%$#$&>)<55", "953:_<|<}}}5fooic9c9bcijmolqmmppuwxAABABEEEEAyywwwttpoieccdcc999997333599ffffffcc99535599ccc88a99cdhfilonorqpxxAACEHIKMMMNMMNNMMKEAuqjjg8664}||59fiopyBBytl93||39iwBBtlf953|3|/),,,>-*%%=>,>-*******--**=%%$############&%&%%%$$$$#$###@#######@@@@#%=&$#$&=>)|5", "5954||3|22239ipoicc9acfiooolqpqttwwyAABABEEEAyywwttpplkicccfc99999553|3559ccffiiiffc99cccjiiffcccdchiklooorqtxwyyBCEKKNNMMNMMNNMKIEAuqjg8a24:<<<|359ipyBEEAti93339ipwtplic533|>-**%*-,,>=*-*==**=***=%$$##########$$%&%&%$$$$###@@#####@@@+++@@$&=%$$&&->~|", "35553|3352226fotoifccciioooolpmmttwyAABEEEEEAyxtttqoooiiifcfc995999955559cffiloooooliiiiilloliiifiilloopppttwyxAABCHIKNNNNMNMMMNMKKEwuigaa21:_(///<|9ipwAEIHAof5535ciptpoic533|>--*%&=>,,---*=***=*****%$##@@######$$%%%%%&$$####@@@####@+++..+@#$==&$$&*-'<", "|599955555559cittoieciilioomlnmopttwyABEEEEBAwtprrppoookggf9c999999cccfcciiiilppppppoollliiiiiiiiillooopttwyyAAEEEHIFMNNONMMNMMNMMMIExuke861[_(~////|9fowAEIHAtf95559ipttpif953||~)>-*****-,,,-*=&%%%=***--*%$$#@@#######$&=&%%$$###@@@#####@@++..+@@#%;*%%&*-'~", "<59ff99999599cfowtlfffiiilooonlomttpxwAAEBBBAytpqqpqplllgccdfcccffiiioliiiiilillloooolllliicddccfgiillloppswyAAEEIIKMNOOPPONNNMMNKMMIEymib64_[]{//(/||5iptyBEHBtic999cipttpiffc95|/)>**%%%*-,,>**%%%$&%**---**%$#######$#$&**=%&$###@@@@@##@@@@++++++#$=;-*==-')", "/39fifcc999599cipwplfifffilooolimmoouutwyADAAAywtrrmmmiiiggdgiiilpptpppliiiiiiifiilllllooolic9099cfigiiknopuwzzBEHIKMNOOPPPPOONNMKKMMKEwoia61[]/<||||||9fiopyBEBwoicccflppoiffffc95<)--***=-,),-*%%$$&%%**----*%$###$####$&%%**%$$#@@@@#@#####@+++++@#$*;,>>;>,)", "~|5fiifc9999559fottpliiffcilllkikkglnrpuuyAAAAywwpqrnliiiilikllmopwAywtplliifififiilllloooolic0899dffiijnlrutxxAEEGKMMNOPPPPPOOOONKMMKIBwof94}<_|33|>>>>>,~~>-=%%&$$%%*->->--*%$$&%$$$$$%****%&&####@###$$###@@@@@$$=>)))>,,)", ")<3ciiiifccc999ciottoifc988fffgdhgggmlrquwAAABAwturpqomoploollllopwyyttptplliiffffffiiillliiifd99999fiijnloqtxwABEGILMNNOPPPPPOPOONMMMKIEtic62<_|33>>,,>,)~)>-*%&%%%%-->>>>>-;**&**&&%%*;**=*&&%%$&$$$%%%%$######$%%=,~{),,,", "~/|0ioooiiffc95559iolfc986a9cfegfbggijmmquyAAAAwuqquuttttpoooiiiilopttttttpplic99999ccfiiifcfccdc800cffilloqtxxACBCIKKNOOPPPOPOOONMKKKMMKEtl92__<|3->,,,,,)~,-**&%%%%*->->>>>>------=*=--*****&%%&&$%$%**%%$#####$%&&-)//),)", "/<|5cioolic995|||19fic999626bcfgdbgggiinmqwyAyyytpquttwttuppllifffiloopttwttplf955599ccffffc9c9cc990dccfjjmqsuuyCEEHFMMOOPPQPOPOONMKJHHIKIEyoc3|/_|<-&&%%$$%**;->>>>>-----------***==%%&&$$$%***%%$$$$$%*=*-,/-==%%%&&&*-->>>>>--->>>>>>-;--=*%%&$%$$%*---=%%%%%*--->,)<<>,~~,>==*%%%%*-->>,,,,,>>>;,,>>>>>---***%*%%*-->--**&%%**=**->,~/~", ")'''')/|9993|<<<((/(<7c9056266dcfghgkkooqrqtwyABBAAywtpommlkiiiiffcc99ccfiiiiopwyytlfccfccc99ccccccfiiiiloqppxAEEGFFIMMNOOPPPPOONMKKHEAywwwyAywoc53353|<|553|3359fflliiltBHHEyo933333||=&%%%%%%*-->>,,,,,,,>>>>>>>---**=*%%%$$%**%%%%####$&&%%&-,)~", "!!''>,){|553|<<<_({~(|9c90566689ffgfkknlqrqtyBEEBBAywwpolkkfggccfcfccc9cffffffipwAAwpiffc9999c9cccfgifilloqpxwBHHHIFILNNOPPPQPOOOLIFCBAxtpptwAAtl9533533599533359fiiliiopyAEEBApc99993||,,>&$######$%**-->-----;--*=-***&%%%&$$#####$$#$###@##$$$&&*;>!", "!!';-;''~|553|<<__{{{(|9cc0866889fgikklinnqtABEEEEAAywtrllidd90999cfiiifffcc9cffiotwwtoif9999c9ccccfiiilinmpuwAEIIKKMMONOPPPQPPOOLIFAAyurmmoptAytof5||||59fccc99cciiloopptABAABApifff53||<~),>**-,,>*$$#@@####%%**=------=*%**%%%&$##$###@@@#######@@#####&%%&*>", "'!!>;;;-,~|553|<__({]{_49cc066aa0fkifkglnrptyABEEBBBAAwpolif9999099ccffffffc99c9ccfiotttoi999c9dccffiiilnnmruuAEHIMMNMOOOPPQQPPOOLLFBvwqrmieiiptwwplc5|||39fiopppiiiloopppwBAAABAplii9533|/))>--;>>>-&#@#@@@@@#$%**-----;=&%%&%%%$######@++++@@##@@++@@#@#$$&%%-", ";'!,';--;,~|5531<_>-->>-&#@@+++++@#$$%*----*=&%$$&$##@@@@@@@.+++++@@@@+@@##@##$&%==", ";;'),'-=->,~|553|<|<_(~][20cc969afgkimioptuuwwwyzAAAAAwwtpoifffc995573559cfiiifc955599flppoliccccgfiiiooopqppuyyBGFKNNOOPPPQQQPOOOLIFzvtqkeb96259iopoic99599ftINIAwwtpoollowBEHEEAtlf955993>-*$#@@@++++@##$%******&&$$$####@+++++....+++@@@++@##@##$&%==", ";;;,',>--=;,(|5353|1<_]/_}29cc98ccfiommpptuuwwwxwyxwxwwwttpolifcc9533333559ciilic953599cfloollicccfiiiiolpqqpuuyACHKNNOOPPQQQQPPOOMKFzzwqkij96}||5ciif93359cipEKEtooppttpoopwAEEEBwpif99cf93|<>--&$#@@@++++@##%%*****=&$$#$$##@@++++++.+.++@@@@#@##@$#$%%=;", ";;;;,,,>===;,(|35533|1_/(:}5cffccbfipppupsuuwwwywwwwtpptttppolifc99533333559cfilli955559cfiilooliiiiiiillloqrwuyCCEKMNOPQPQQQQPPOONMKCByumjjc9}<_|39cc9|<<39flAIBpc9cipwwtppttwyAAytoifffi93|<--*&##@@+++++@#$$%**%%%*&$$$$##@@++++.+++++++@@@#####$$&%==;", ";;;=>>,,-==*-,~|35577|1,';***-,~|555733||}:15ciilfffltutppqptvwwttttttpppoomoliiiifc955333355559fillif9909ccflottpoolnlmlloqqpuyyACFKMNOPQRQQQQPPOOOKHBAupojeb52<(/<<399|<~/|9iwEAl9599cilptwwtliiottpifc95||,'-***-,/|55557552}|38dfllikipqqppqpttttttttttppppollliiiiiffc953333353359filiic9009cflpttpppppppoooppxuyBCFLNNOOQQRQQQPQOONMICwurmjeb564|(]{<355|/~~3fpABtfcffiiilopwwtiffiptoic93-****$#@++++++#$$%%%%%%&&%$$##@@@@++++++++++++#####&%$%==;;", ";;===**->>>-***-,/|59599c96|458ciloooqmpoqqpsttttttttttpppooliiiffiiifcc955333333559fiilic909cloptwtwwwwtpppptwwABGHKMNOPQQQRQQQPOONMICzqlkfa85434_~{~<355|~~/5iwAwicfltwpolipwwtlffiptpof5|/~/~,,)~)>*&**%##@+++.+@#$$%%%%%%&&%$##@@@@+++++++++++@@@#$$&%&&=;;;", ";;;===**=->>-***-,~|5599cfc556a8flpttpmooqqpppputttttttpppooomiffccfffiic995553335599cflolifcdiotwABEEEAwwtwwwAABEHIMMOPPQQQRRRQQOONMICAwqkbb67}<1|>--*-;,/|599cfid9a66cipwwwppopqqprpuuttttpttpppoollifcccccffiiffc955755999cfloppollotyBHIKIEAywwyAEBHIIIMNOPPQQQRRRQQPOONLEztqjhb64[_/(/>>-*;;,(|599cfifc66bfopwwtttuqmopppoppttptttppoooliiifcccfffiillfc99999cccfilppttpppwAEIIIHEAyyyAAEHHIKNNOOQQRRRRRRQQPOOMIBxqjhb62_[{{{~//~~/|53|<<|5cooiipyEIKIHAywywwtpllpttof3/~)),>,))>*%%*%#@++..+@#$$$$%***&**%$#@###@++.+++++@@@###&*=-;;;;;", ";;;;;-=**&==->>>;;>>)/|55ccggf99ccimpwwywtpmmmponoppptpttpppoooiiiifffiiiiloolifcdf9ccffiiilpttttwwABEEEEEBAAyAEHHIKNNOOQQRRRRSSRQQPONMJAulkb861[({'!)~~~~<|33|<||5fiiilwBHHBAAAAAywwtplllopoc|/~/~,,'~)>*%%%&@++..++#$$#$%%*=&***%#@@##@@@+++++@@@####&%=-;';';", ";;;;;-=***===->,';-;''(|59ccgffcfehklptywtppopmmnnoooppttpppppolliiiiiiilllooooliiiffcdcff9bfltwyyyyyAABBEEEECAEBHKKMNOOQQRRRRSSRRQPOONKHzrmf861[({!,,,)))~<3553|||5cfiltAAwppttyBAywwwplilptpf3|',';-''!{|99cfefilifgjmqttwtppoomlnoopopppttppppoooooliiiiiiopppooolifc999d99ciotwAAywyAAAEEIIHEGBEIIIMNOPPQRRRSSSRQQOOOMKHAulia7}_({),,,,))~<3995|||39fopwyplillpwBAyyyypliowwtic53|//~/~,-&%&%#@++@@@####$%**=****%#@@##@@@+++@@@@##@#$%*;;''!!", "!'';;;=;;***===;',,',''{_26cifiopplkiimoppppololkinoopoppppttpppppoliifffffoptpopmlic97759a99cfiotyyyywwyABBEEHHEEHEHKMNOPPQQRRSSRRQQONMKIBysric0a|_~)',',,,)<3995|||3clptwtoiffiptwAyyAytllpwywpi953|*%&%%#@@@@@@##$$%*-*****&&####@@@@++@@@###@$%%*=;''^^", "^!'';;;;;****--;>,,!'''!{:29fiipptpojiiimmopooiiikiolooppppptttttpoliififfiottplifcc99079909099dioptwttttyAABEEIHHHEGKKNNOPQQRRRRRQQPONMKIEywpolfc93|(~))',),~<3999|||5fllopplc99foptwwyAytpopwwwtof99|<<<)-%$$%$#@@@++@##$$%*=-***=&$@##@@@@@@@@@####$%&*=;;'^^", "^^!,';;;;;;**----;,!{!!)^]16bflppwwplkifhfllmlliiggilloppppttwwwtpoiiiiiiilpwtlfc055999c05508888cfilpppptwAABEEIIKIIHKMMNOPQQQRRRRQPPOMLIIEAwtolffc953|<~))))){<59c93<|9fffillc559fioptwyAywwwwwwwwpic53||/,*%$$%$#@@++@##$$%==--=*=*$####@@@@@@@@####$%&*=;;'!]", "!^^!''';;;;;*----;>'{]{{^]_16cipptwtpokddccfililfffgfilmopttwwwttpoliiiiloottoic933375599009d909ccfflopttwyABEHHIKKMKKMMNOOPQQRRRRQQONMFGEEAwppigcdc9953!!", "{!]^!'''';;;;;;;;;;'!~]:^(:228ioopptpplgcd09ciiiiffddfilmptwwwtttpolliilppptpic9553|433599ccccccccfcilptwyyAEHKIKKNNNMMNOOPPQRRRRRQQPONLEBAxtplfifcc99554|<%&%%%$@++@##$%%&*---*&=%$###@@@@@@@@@####$%&*=;;!!", "{!!^{{!!''';;;;;;;'',!{[::_}26biopppppolgd00a9fffiffddfilpttwwtttpooolopttttoic9554|}1|35dfcfffeffgilopwAEEEIMNOOOOPOOPOOPQQRQRRRRRQPONMHCAxtnied9999555543||||<--&&%%###@@@@@@@+@@####$%*=;;'!", "!{{!^^{!)''''';;'''''']^:11}26bbeiloooooifd0786ddgfffddiiopppptttppppopttttpofc95511<|13559cfilliloptwyBEKMNOPQQQQQRQQQQQQQQRRRSSRRQQPNMKECxsqib8967575555533333|<<|59fc53599ciof5|||5cfiffioyEEEEBywtpoli9**%$$$#@@#$$&&**----=&%%$##@@@@++++@@@###$%&%=;;!", "!!{{{]^^!!!''''''''''!^^_162668abcfilllliic9776500dfifgillliopptttttpptppttplfc953|||3543559ilptttttwAAEIKNOPQQQQQQRRRRRRRQRRRRSSSRRQQOONIHBytpkb85633755555337553|<|3cc9559ccili93<|5cfili99itAEHIBAwtplic5|~,--%%$$$###$$&&**-;--=&%%&##@@@+++++++@@###$%&==;;", "'!!{{(^^^{!{{!)'''''^^^(_}2aaab888bffiiiiiic9725500cfiiiiifiiloppttwwwtppppoic9555333555559fiottwttwyBEHIKKNOPPPPOPPPPQQQQQQQRRRSSRRRQPONKIEAywplf9a4773334333335553||599559cfiiic3<<3ciilic59fowBEEAywtoic95<~,;*%$%%%%$$&$%%*----==%%%$#@@+++++++++@@#@#$%%=;;", ";!!{{{({^^^^({{!!'!^^^^(_}}26cba8aa99cfjffffc9732357ciiiiifffiilpptwywtpptplf995555595999ffiiloptwwyAEHHEEEEIKMMMKMNOOPPQQQQQQRRSSRRQQQOONKHBAAwtoi995573||||33||3555359c95559fiif9|<3ciloif9559fpyBBAwtplc95|/~,>*%%***%&&$%%*=----=%%%$##++++++.++++@@#@#%&%=;", ";;!!{{((({^^^[[[^^^{^{(_}}}28bb98aa868accffccc9743570ciifffffiiloppwwttttwpic953559999cfiiiffioptABBBBAywyyyAEHKKMKNOPPPQQRQQQRRSSRRQQQPONKKEAywytqlf9053<<_<<||||335359cc95359fiif9339ciolic54|39ltAAyytpi95|*%*->>*&%%***-->>==%%&#@++++....++++@##@#$&%=", "=;;!{{((_(((^^^^^[^_[(__}}2268ca698a6a6689cccfc976357ccccfffffiilptttpptwwpic95359cffiiifccciotwAAAywwwwtwyABEIMNOOPPQQQRRSSSRSSSSSSRRQQPOMMIBwwtttplc997|<<(//<<|||33359ffc5339ilif9559ciiif951<|9ityyywtpi93**->>-*%%%***;>>;=%$$#++++.+.....+++@##@#$%=", "=;;'!{{(____(((__1111122}}}66866a6aa2}}}65999cc9d959999999cfffiilptpooptwwpic9559cfilifc99flpwyAywtppwyAAABEHIMNOPQQQQQQRSSSSSSSSSSSSSSRQPONKHAwpppoifd0554|_/(/~/<||33359fic535cilifc959cccfc9|<<|5fptywtplf93--;>>-****=*->>;=%#$#@++..+++....+++@#@@#$%", "%=;'!!{___}}__[___1122222266a22226662}[:[2355999cc99d95559ccffiioppollpttplifc9ccfiiic999ipwAytppppttyEHIIHEEEIKMOOPQQPQQRSSSSSSSSSSSSSSRQPONKHBwtpoifc9577553<<{//<||33|39iif959fiiffc99959cc93<;-;>>>-;;***->>;%$#@@@...++++....++++@@#$&", "&%=;'!{___}}}}}}}}}2226a686a222222662}}:[:}225799cccd9955799cfilopplilpppliifffiillc535clwAAypllotwyyBEIIHEAAyBEKMNOPPPPQRRSSSSSSSSSSSSSRQQQPONKHEAyplifd5559553|>>--;-->>>>*=*;>>;%$#@@+............+.++@@#$", "$&%=;'!(__}}}}2}}}}}}2268aa86622}22222}[:[[}}32399dff99555599cflppolilopliffffiopof5|3fpABBytooptyAAyAAyAABAAAEIMNOOPPPPPQQRSSSSSSSSRRRRRQQQQQQPPNKKEAwtlf95555953||<-->>>->,,>**->>;*$#@@@+..............+@@@#", "#$&=;>'!(}}}}2222222226866626662222}1}}}1::}}[}|300c9999955999fipolliiooiffffiiooi935cpAEAywtttwwyyytppptAEHIIMMNNNNNOPPPPQQRRSSSSSSRRQQQQQQQQQQQQPOOMIEypic53|33|33||<|3|||39ilfc9cfiiffc553553|<<->>>>>>),,--->>-*&#@@+++..............+@+@", "@#$%=;'!^:}}22886666666666626662222}}}}:_:::__::|3795999c9999cfloliiilooiffifillf999coAEBwtwwwwwwwtoiiopAEKMNNNMKIIIKKNOOPPQQQRRRRRRRQQPPPPPPQQQQQQQPOOMIEwpic53|<<|33335955|39fifccfiliic93|333|<,,'>,,),,--;>-*%#@@+++...............++@", "@@#$%=;']{_}}2866666666666}222222222}}::::<:}[::}|3335799999cciiiiifiioliiiiiiic559coAHEAttwwwttpliffotAHKMNNMMIHBEEEHKMNOPPPQQRRQQQQQPOONNNMNNOPPPPOOOOOMIEAwpi9|/<||3335993335cfccfiooli953|<|--;-=%#@+++.................++", "+@#$&*=;'^]_}}866666666666}}22222221}1[_::_:}}:_||11|439999cffiliiiffilliiilllf559ciwEHBwwwtttplfcciowBHIKKIHEHEBABAAEEIMNOPPQQQQQQQQQPNNMKKIHIKMMMKMKMOONNMKKIApc3<<<|||35555335cfccflopoic9|//~~~)))~//<39iif9335995|/~~{)){!)),>---*%$@++++.......... .. ...+", "++@#$&*;;'](_}266666666666}}222}22}}[:[::[[/}||:|}1<<||55999filliifffilifiloplc59fltAEAwtwtpptlc79itAHKHHEByyABABABAABEIKMOPPQQQQQQPPPONNMKIIHHHHIEBBABIMMMMNNNMEti93;--%$#++++...... . . . ..+", "++@@#%*;;'!^(_}26666666666}}222}22}[::::]]]:<<||334_|||33559filliifcfiiifioppicciopAAyttptpttof50fpBIMKEEAwptwyyAACBABBHIKNOPQQQQPPOOOMMMKKIIHHEEHEAAwtwABBEIMNNMHyoc5|////<<||||59cfffloppoi93/!,,)),,)<<<<|59c953||5cc93|<-*$#++++...... . . ...", ".+@@@$%*;;'^^(}}2666666662}}222}}2}[::^^]]]::::}363||||1|355cilliifffiiiilopiccipwAEytppppptpi99itBHKMKHAwpoppwwyAEEBEBEHHKNOPPQOOOONKKIIHEEBBCBAEBAAwttppptwBHKKIEwpi93|///<<|3359ffffiloppoi9|/))))),,)/(//<35995335cffc95|,)~~~/<|595559fiifc93-',))))~<359999fllif93*%@@++... ", " ..+@##&%=;''!^(_[}66666666226222a642}}}<<::_::}|1_<:|1|3557cfiiffffioopptplffoAHIHypollppi95fpEHBywtpolproppwywttuzEHIECCFFKNOOOONMHIIEBxxppmlhjffffgfloomlliffiotwAABAAwtpf53||350ciopifcfiiiic5|---,,),,)/|59555fioif93>-;->,,,,)~|55559fillf95_/!)),>>-$#++... ..", " ....+#@#%=*;''^^_}}}6a6a99899889b99652|}1:_:]:<<_(//<_|||359fffcc99flopppliltEMMKApifipti95iwHIAtpopptwwwwAzwpnnquAEAEEJHIFKNNOMMMIHEEEAAAtqqlgeba87976809cgiifffiffilpwBEBAtplic95439cfc99cfioolc5|>>---,,,,)/|3559cfiolic5<{~),>--*$@+.... ", " ...+@##&%=;;''^(_[26a688aa99cccfg99522|||<:<:||<__/__|<||59cfc9999floppoiioAKNMEwlfclto939oAIEwpppwBBBAABAwppnquwEBAABGKKKKLNMKIHHHHBBAAwtpooiica8774263779ccccfcffccfltAABAwtof9533|599ccciiopoi95|>>>>',)),)/|399cfioooic5|<~,>--*%$@+++... ", " ..++@##$&%*;;'^^{[}}6689aaabbcfif9956333|||||4|||<|_<|<||79ccc9959flopoiilpEMNIApiffpti53fpAHEwppwEIIEBAytuprrtxAEACzCCKMMNMMKKICEHHBByAwwqroolfda573}24347759999cc989ciowyAAwplf957||359ciiloooic93||/),>>,>>>>,)))/<59cilooolic93<),>-**%$@++.. ", " ..+@+@##$%=*;',^{_[26688a98999cif995532533}||||<|<1__|||359ccc9959flopoiiowHMIBtliflwwf90ltwBEAttAEEEAywtpqtttwyABAAAzBFLMNNKFFECBEEEAyywtupoooigca74}}1|14335355999999dgltwyAwpoif973359cffilooic9533<~!,>,,>-->,))~/|9cflllliiif9|/'>-*%%%#@+.. ", " ...++#@##&%*;;,!](}}2aaa66809a9fic9966333}:1<|1:<___||||3599999559flopliotBIIBwoffipAtf9foptABAywwywttttptpttwuuAAEBCCGHKMOOMKIBCCCBEAAwwuupppplifc77}}211114|33369909999ciptyAywtoof95599999filif9533|-->)///<39ciiiiifffc5<),>*%$$##@+.. ", " ...++##$$&=-;'!^[_[266622aa86dcec9965334|1_<|}:<___|<||3399995559flopllpAEIEypifflwApcclooptyywtpojnoptttpspuuxyAEEGEIKMOOOONKCCBEBEBEAywwwtppoiie97322|1||1|||||7589999cfiotyAAAwtpic55555359ffc53||||<<~~),>>->)/<||359fiiffcccc9|<~,>%$#$###+... ", " ..+@@$%%=-;','^^(_}6662269989bb900077574|||||<|1__|<||1399995559fopplowBIIEwofcfowwlcflolloopligceiopptqttwxuAAEHIJIKMMOOOOOMIJEEEHEIHEAAAwwtpollc9722|1|11<||_<|2695099cfiopyABAytof953333|39c953||||||>--,~/|35999cfcc9955553<~,-*%$#$$$#@@.. ", " ..+@#$&&**=;-;>'!{[[26622a8888dd0076777734333341|<||<|14599995555flooiowEIIEwl99fpwti9fiiiififcc9cellopqqpzyzBBEEEHHKMMNOONOONMKKKKIKMMKIEEBAwtppplic96733|11<|_<<|||23350ccilpwyAAwpic53|33|||5553|<<<|||->,)~<399999c99953||555|/,>*%$$$%%$@+. ", " ..++@@###$&%=*-;;,!!([[226aa88d00d077424633333574||||||||4599955339flolipyEHHBti99fpwoc5cff999ccdccffijoomptAAABBEBCCILLMNOONNOOOOONMKKMMNMIEBAypppppolie0955|1|||||<<:<<|379dggilpwAAwpi933353|<|33||>>,)~<|59c99c99553||3595|/,>-%$####@+. ", "....+++@@+##$%*=*;'!!([[286660dd000a666224233355531|3||3||3999975359flolipAEEBAoc59fpwoc59c03439cddchfiloqqpxwyBAEEGCEFFKNNNONOONOONKIHHIIMNKHAAypolloollfe9090334|||<<_<::|25ciiifiptyAytlc55995|<|||<<~~~<|33|/),>>,)/<|3599c995553|||555|/)-%$#@@@@+.. ..", ".......+++@##$&*-;>'!([[286000ddbbca6622}}}43435311|||3|||3999995359flolltABAyti959itwl939c931409999cfiioqrpwwBEHEEHIKKMNOOOPOOONNNMHEAAABHKMKEBAwpoiliiifc999099953||<|<<|<}39fifffiptyAAyof9ccc9|>,,{<|||-*%$$##@+. ", " ...+++@##$%&*;'^{[[260088bbggkkgd07744411355||<|||_<|3599995335flolpBEytoi955coAwf3|3|||<||279fiigikopxAEHIIHIKMMOOPPPONKIHCGEIIKIHHEEHIKMOOOONIBywttolfc909999cccc963||2|433||||359ipwABAwpoi9|{]~)'>,>>,~/|3||*%$#++++.. ", " ....++@##$&&*;']{([28088bbkggkkgd07a46662553|||||<<_|3599995333clolwEEwpif535coAtc||31_<13769fffffjmpwAEBEBBEHIKNOOPPOONIFECGEHEIHIHEEEIIMOPPPPOMHEAwwtpliilifcccffcc86532||4|<_<<||3dotABBAtoic|~!)),,,,>,)/|33||%$#@+..... ", ". ....++@##$&%*;;!{^[280b8ggkgggklifd98676265334||||_<|3599995333clllyIEwlfc5|3coyt9||3|--'/|3331|<||39c97|555553|<<~,>->)<||~>%$#@+.....", "........+++@##$&%==;!!([28abghggggmlligfd866533952||||1_||3599995333ciloyIEwlc9||3coyp93334-=;,/|35533559cgf953333||-%*,~||/,*$#++....", ".++.....+++@##$&%==;!!([280hhggglljmliffd9668a6952||||1|||35999953339ioowEEwic9||5cpyp93334|<<|769fillpxwwutwvxzDFIMNPPPPPOOONOONKIIHIMNOOOOONNNOPQQQQQQPPPPPNIHEBywtpollf99999553|1|_/_<|3|359ipwywtpic|/~~),>;-=-)<39c9c99cfffc72|<<;*%%-)/|<)-%#@+...", "..+++...+++@###&%*=;'!(:2a0ghhgllllmliffcd95607055|4|1||||3599c953339ioowBBtic9||5cpwo931|4555099filopttuqsrvxzDHILNPPPOOOONONOOKIIIKMNNOPPPONMKKMNOOOOPOPPQPPPOMKEBAtpoolif97565533|<<<<<|353|5citwwtpl93>>>,/|59ccccc9c99931>-%%*>~<|/,*%#@+.", "+..++++++++@###&%*=;!!([280gghilllplmifdcd997868554|1|||||3599c953|39ioptAApfc5|39ftwo93||49filliiiottuommrtvxCFILMOPOOONOONOOONKKKNNNONOOOONMIEEEEEHHHIKMMOOPPPPONMIEwpppoic85555753|1<<<|5333|49iptwwtlc5|<~,,,>>>)~|359cc9999053|<_())!~~~),>>-*%%*,/||~>*$@+", "@+..+@##@+@####&%*;;!!(:2abkgjjjopqlmkfcd90870600541||||||35999953339ioopywoc95||5fpwoc53|4cioppoioptpmhmqrvxBEFKKNOOOONNOONONNMKMOPPOOOOONMKEAywwwwAAAABBEEHIKNONNOONIEywtoic9975355573|||33|33435cotwwtof9|/,>>>>->)~<359dcc999572_(/),',,!)),,>>-%$%-~<|<)-%#", "##@+@@#########&&*;;!!([28bknjjnrrrmlifcb90990850541||3|3|35999953|39foopwwi953||5fpwofc535copppoopwpmjmmrswzEHILKNOOOOOOOOOONMMNOPQPPPPONIHEAwwpppttAAAAAAABABEIIIKNNNMKEAtpiiif955559053|||||333339lpttoif5<)>>>>>-')/||7ccfcc99721<(~]!'>,')),,,>-%$$%>/||/>%", "-%$##@@@##$$$#$&&*;'!{[[26bknmjmrrrmllggc9009d09055533333|35999953335flopwti953<|5ftypic9|3clppootwpnkjmrpxzBHHLKNOOOOOOOOOOOMMNOPQPPPQPNKHBAAAwpooptyEHEEEEBBBBEHEEEHIKMMKEAtoolf995590953|||1437|||9ilpoli93/,>>>>;;,):<359iifcc964|,',)),,>-*%$%-~|3|)", "~,*%$##@@#$%%$&%&;;'!{[[2abknlrmqrqmllkgc9089dddd055553333359ccc53335floptti553<<3ftytif9330lpplpwtlhghmrwyzFEILMNOOOOOOPOOOOMMOPQPPPQPOMIEAAABAwptttyEIKKKIIHHHIKKEBAAEHIKKIEytplf953335555||11273||35ciooif5|/)'>>';'']_|30fiigc95241<~!)',>;'',),,>--%$$*,/||", "|<~>*%%$$#$&%%=*=;;'!{[}20bkorqrqrrrlmifgc988cgfcd59555553559fff95559floptwl553/<3ftAwoif530lppotwpfggmmszzBFEIKNOOOOOOPPOOOONOPQQPPQQPOKHEABBEBAywwywAEKMMNMMKMNOONKEAAAyABHIEBwpic953||35553345993||35ciiif95|/)>;',,!]/|26bcfiff9631|;>,,,,,,>>=%$%-)/", "/||<~>-*%&&$%%*->;''!{[}60bkosrquusromliifc9cdggigc999955599ciiic9559foptwyo993/<3ftAytpi95cmoopwpihgemmtAzDEIIMNOPOOPPPPPPOOOOQQPPQQPNMIEEBBAEEEAywyyAEKNOPPPOOOPQQPNIBytpppwBEBytlf953|1|35555dfg9933359fifc95|/),,))]!(}269ccecfc9534|_(~!,>>>;>'>,,,,,>-**-,", ">)<||/)>-=&%%=*;;''!^_[}a0bhutsuussuooolifd9dddfkigc99999599fiilic999fptwABpcc5||5iwAAAwofciooowtlhhgemqwzzBCHIMNPPPPPPPQPPOOOPQQPPQPNKHEABBAACEEAyyAAEKOPPPPPPOOOPQQQPMEypliiowABAtoic931||359ccfiic953339cfc953|/!))~]{([}0accbcc999053|<<~!',>>>--;''!),,>-**", ";>)/|||(!'>-*=-;>'){]<}a6dkovtuuuusuroolifcccccdgiicc9995999filiic999fptwBEtic5||5iyBBBBwliopptwplehgjmqwyzDCHILOPPPPPPPQPPOOPQQPOOPOKHBEAzzwyAAyyABEHKNOOPPOONMMMNOQQQPNKBtlffiotyAwplf931||359dfiif9993||5ccc93||>;;;-',,),,;;", "'',,~<1|>>,'!]_126adknvtxuuusqqqoiifgc900ddiifc9955559cfiif9959clptAEtic5||5iwByAByoopptwwolfegjqwwyzBEJIMOPPPPPPPQPPOPPQQPOONKHBBzwxptwxwwAEHKMNMMMMKIIHHIIIMNPPPPONKApiccfltyywoic73|359cgiliic953|35ccc5|||||:<_}}}6bbebc8a5269977||-=*;->,)))'", "~~),,)/<|||(!)),'!!^_228bbknruuuuuuqpqpokgga90009iifc95555559cfff95359iptyBti95|<3ftytpppopppwwpolhhknuywzzDEJKMOPPPPPQPPPPOPQQPONMIHBBywuurpttutyEKNOMIIKIHEBBEEEEHMOPPPPOONIyoiccfltwwtlf055559dillifcc93|55ccc53333|1|21668bheca97424375541<<({),>>-==%*->,)!", "~~~~))~/<|3|;=*=%&&=;", "->)~{(<|55||<|34||}|4268dbhnvuuttuqqqnlnkhdda0999ccc9995353359ccc93335citBHyi93/~<9iooooofcilifggeeknrtwwyyEEINOPOOPPPPPPPOPPQPOMKHEHEAxprnnmpmkiopAKNMMNMHAABHHHHEBABEKOPONOOOOOONHwoifiotwtoicc990ciid3|355335cffc909c99dchgggghb8877}2__<|35554|<((),--==&&&%", "*=>,)~/<|7|<<|14376786bbhhknquvtvvqqqqmmmkgd09b9cccc8995353359ccc953359itEHAi95/~<5floooicflifddfchkruqtwxzDEINOOOOOPPPOOPOPQQOOMIEHHHApprnkmqmhkjltEKKKKIByyAEHIHEAyyyBHKKIIMNOOOONMEtlffipttpifc9599fc9|<355559cfcfc9cccffkllkkeeb985321_<__|7555||_~)'>;==&&%", "*=>;','{/<<(_<|436509cffgjmnrvvtvwwtuqmmmkfdccbccccc9599553359ccc953359itEHAoc5<~/3fiopliiloicabbbhknqqptxzDILNNOOOOPPOOPOPPQPOONIIKKHtppnkkmqmkkjiotBHKKHBAyyAEHIEBAwwwAEEEBEHKMNNNONHwoicflppoifc955cfc3<<|3595cfiiiiffcfimppnmmffb953}}1_<(__|333|_,,,,)~(/__|36709cfgiknnstssuwvvvttqmmmiifcbbcccc9999995599cffc9555citEHEpf5>''',,'!{((<|589cfcfiloqttxtutvvwvwwuppoliifbcbccc9999cd999cfiiic999fltEKIwi9|<<5fipwABAtlcb88bcimlmprsuDDJIMMONNOOONONOOPQOOPNMMOMEvqqmkkkmmmmhefhiopyAAyyyAAEHIIEAwtwyAytpptwABEINNMIAof09cilliffc9cfc92||359ccilllliiiiloopppqiif9953}}<__/({(/(<_1<;>''{<<11<", "1|44322}[[[[:_12|226bekopuwyyyyABBAyvwywtttrliffccccc8990999999fiifc99cioBMMEp9;;->;'{_<|", "|35599652}[1142a6268abhiottwzyyyAABAyyAywwwpolifeccfcc990509999cffc9559ciyKMIwc|>,~<", "~|49cccdd0755766aa8abhhjmpuxxxxwyAAAAABBAAywpoiifffffcc90999999ccfc93335ftHMIwc3|<|9959fgb968bbcioomkoruyDGGIKMNNNNNMMKKIIKNOKCEMOONHtoioonilnoptuuptttpollpttpoffccfiolfcccfiotwtpooic99cffmtyAwtpoppwAytpooifcccc9cfjioptwtuuuqqqnnmmjiliifc0|[:!'';;------->,", "'!_49ciifdefc898abbbbgehmptxwxxxxyAAAABEEBBAwpolieffiffcc909999cffc95335coBKIyf|>;;>>,,)~~/<<<<;>;;->->>,,)~/<|||||<<<11375cfiiowABHIKKMKIHHKKIHHECGEHGEHIIKIKIIIFIKKMMKKMLKKMOOOOOOMKKIIJKMMMKKMKNNNNNNO", "ONNNMIJEDzxvvnnnhggbbbaa7744411111112}411423599cc52200adiptwywzAzzzAEEBAABCBECCCGMMMMJCzCEEHEBFGIIMNNOOOONMKIEAzwwwttstttxwwwwttmhgghbiec8833|_[^{)!',>>;>>>>>>>,!!~/<|||33111|3779cioopwAEIKMMIHHIIIHHHEGEGGGGHHIKKKIIIFIIIKKKIKLLKKMNNNNNNMKKIJIKLMLLLLLLLMMNO", "LMNNLIEEDxxvvnnkhgbbb0a7774441}[[[}111}11134459cc5220dadjpwwzwywzzAAzEBBAAEEECCCHMNNMIGBBEEEEDFGIJMMNNOOONMKFFzxzvwvssssuwwwwtummegbcfb906|1_(^^^!!',;>;;>->->>>,'!~~/_||3373||376acglpttzEIKMKIIHHHGEEHHHGGCCHHIIKKMKIFFHFIFKKKIIKKKKMNNNNNMMKKIJJKMMLKLLLLLLLL", "LLLLLJEEDvuvrnkggaaba0aa222}}}}[[:}}[1_:1112239995345badiowwyzwwwzAAzBBEEEEHGGCGIMNNMKHCCGBEDDFEIJMMNNOOONMIFDzxzxwxsssstxwwussmedgebe8622_(((]]{'''>;>;-*-=---->>,))~/__1137337aa9dilptwzAHKKKKIHEEGEGHIHEECCHHIKIKMMKIHHHFFFKIHIIIIIKMMKKMKKIHHEEHIIIIHHHHLLLL", "ILLLLHDDzvvvrnghbab00a6a6}}[[[[[[::[[_1_:11211|441247adhhmtwyzwwwvzzAzBBEEEHHGEIIMNNMKIFCCEEEDEEIIKMMMNOOOMLHFDzzwwxssstwwwtsummegecba62}__({^^^'''>;--=**======->',)){(__<|4508600chkptyACEKKKKIECCEECHIIHEEEHHKKIKLMMKFHFFFFFHHHFFIIIKMKKLKKIFFFDFFHFHHFEFHHHI", "FFHHHHDDwvvvrkghba0066622}}[[[::[::[:[[__[11|1|111135a0henpwyxwwxwwzzzBBEEHJHHIFKMNONMIHFHEEDDDEEIIMMMNNOOMKHFDzxzvvvsstwwwtmmmeggccaa2}_({{!!^^'';-=*=***&=====->>,,!){_<_|4609ddhbflowyAzEHIKKIECCCBzBHIHEEGHHIKKKKMMKFFFFFFHHFFFHHHHIKKIKKKHEEDBBBFFFFDDDFFFF", "FDFFEFDDxvvrnkgbb00662222}}[[]]^]^^][[::__[1111111112a0hhjrwywxuwwwwzzBBEEGJIKFFKMOONNKHEHFEFBFEEIIMKKNNOOMKHEDDxzxvvsstwwwsmmmeghfb62}[(^{!!!^!';;-=*&%%&&&=====->',!){(<1}2269cfhehjruABAEBHIKIECzAzzAEHHHHIIIIKKIKMMKFFHEEEBEFEEEEEEEIIIIIIIFBCAAzzAACCCzDDDF", "CCDDDDDzxvvrnkgbb00a22222:[[[]^]^^]^^^:^[__:|111111124abhjqwyyxuuxwwyyzBEEJIKKKFKNOOONKIHHHFEFFEHJKKKIKMMMKKJHFDzzzvvwtwwwttmmegkbb62}[(({{!!!!'';;-**&%%%&&&====->','){(_}}2770bhfinjnqyCBBEEHIIHCAzyAzBEEHIKKIIKKIKIKKIIHECCCCCBBFEEEEHIIEHHEBzzzxxzzzzzzzzzzz", "zzxxxzzxxvvrhkgb006a2222[[:[:]]]^]]]^^^]^:_[:1111114277bhjnuwwxuuuwwwzzBBEJIKMKKMNOOONKIHEFHEFFEHKKKKIKMMMMKIEDDzzzvvvtwwwummmjkicb2}[(({{!!!!!'';-=*&&%%&&&&====->','){(_}}7559bchlmrqszCECAAEHIIEAAzAAzAEHIKKKKKKHJIKKIHCCCCCCCzAzBEEEBEECCECCzzzzxxwzyyvzzzzz", "vvvxxvxxxvrrhkbb00a2222}}:::]]^^^!^]]^{]]^:_[111[[124770hhnptwvuuuutwzzBBEGIKMMMMNOPONMIHFFHFEEEHKKKKKLMMMMKIJEFDzzzvwywwusmmjgkeb6}[[({{!!!!!'';;==*&%%&%&%%%===--;,'){(_}270aabhjnpqtxzEECAzzEHHEEAAAzzzAGIKKKKKIJJHIIHGCCGGCCCzzzzCCCCCGCCCCCAzyxwvwwyvwvvvvv", "vvxvvvvvvvrrhhbba66222}}[[[:]]{!!!!!^]^{^]]__:_[_:}}47a0hhnpuwwtuuuwwzyzBEEJKMNMMOOOOOMKHFHFEFDHHKKKHHHKKKIHHEFEFBzzvxzwwtsmejkjb82}[(({!!!!!''';;==*&%%&$%$%%===*-;,'){(_}27aaabjhnqqtxAEEBBxzCEEHEBAzAyAzEIKKIIKIJGEHHEGCGEEEBAzzzzCCCCCCGCACBCzyzwwwvsttsssvv", "srrrrrvvvvrrhkb0a6222}[}[[[:{{{!!!''!!^^^^]]_[[[[:}}26aahhhnttwtpuuuttzzBEEJLMLMNOOPOOOKIIHEEFEHHKHIHHHIKIFEFEFDFFzzzvAAttmmhkjcb2}[[({!!!!!''';;;==%&%%$&&$$%&==*-;,'!{(<}478bbhjjmmqxxABBBBCzzBEEEEEAzyyzEHIIIIKIIHEFECCCEEEEEAAzzxzBGCzCBBzCBCAAutusstuusssss", "srrrrrrrrrrkhbb0a6222[::[:(^]{!!!''''!!^^{^^:_}[:}}}466ahhjiputspuuuttxzBAEGKMMMOOOPPOONIIIFEFEHHHFHHFFFFIFDBDDCAzzzvvAwtmmejkhc82:[({!!!!!'''';;;=%%&%$$$$$$%&==*-;,'!{(_}45abhhjmmruxzAEBBBCCzBEHIIHBzyAAEEHIIIKIIHEECCCCBEEEEBBzxwwzBBABBBCAAyywtttsspmmmmmmm", "mmmmmmmkkkkkhbb08622[[[[:((^{{!!''',''!!^^^^[_1__}}4a666hheipputrrruutxzBAEGIMMNOOPPPPONMIIHHHEHIHFFHEEHIIHEBAACCzvvvtwtmmjjkic92}[[({!!!!''>'';;==%&&$$$$&$&%%&=*-;,'){(_}47abhjmmruuyzAEEBCCAAAEHIIIEBAAACEEHIKKIIHFEAzzzCBBEEEBBzwwyBEBCBBByyyywwtqmmmmmmmmmm", "mmmmmmmkkkhkkbb08222}[[:::(^{!!!''','''!^^^^^:111}}47666bghhlptpppquuttxxAEGIMMNOOPPPPONMLIHHGHHHHFHEEFHIIEAzzCCBzvvtwwqmjjgkjb82[[({!!!!'''''';==&%&&$$$$&$$$%&=*-;,'){(_}47abhjmruuwxzABEBCAAADBEHIIHEBAABCGEEIKKKHFEzzzzzAyAAABBBywzAEBBBAAyyyywqqqmmmmmmmmmm", "eeeeeeeeebbbbba08222[[[[__^]^^!!''',,','!^]]^]11}}}47a68bhghjppqpnppustxxAEGHKMLNOPPPPPNMKLLHHHIHIHHFEEHHECzzzCBAzvsuwqmmhggeca2}[[({!!!!;''''';=*&%&&$$#$&$$$&%&*-;>',{(_}47abhjmuuwwzzCABBAAAAADEHIHHEEBzBECEEHIIKHEECzzzywyyAAyBBzzyAEEAAAAyyyuuqqqqmmejjjeee", "eeeeeeeeebbbbb006222[[[[__({^^!!';;;'>,''!^]^^:1}}}78aa68bhgjnpppopqqqtxxAEGGKMLMOOPPPPOMKLLLLLLIIHFEDEEECCzzzzAAtstqqqmeeghcba2[[({!!!!';>'';;;==&%&&$$$$$&&&%%&*-;>',{{([4aahhmnuuxzzACzBBAAAAAABHHEEEEBAACECGGJIIHEGzAAzwwwyAAwyywytwAAAAAAAuuuuuqqjjjjjjjgdd", "dddddddddddaaa00822}}[[[_({^^^^',';;;''''!^^^]_}}}3666a6a88hhoppqoopqqtxxAAGGKMNNOOPPPPOOMKLLKLKIIHFEDAACCCyAzzywusmqqmjhggfba2}[[({!!!';;;;;;;;=*&%&&$$$#$$&%&&&*-;>'!{{_[4aahemnuxzzzAzAAAAAADAABEEEEEEEBACCEGGGHHHHBCAzAuwwyyAyywwuutwAAAAAxuuuuunnljjggggddd", "8888888888888888822}}[[(_((^]]!,'';;;;',,!!^^([}}2a66666aa8ahlpppnnpqqppxAACHIMMNOOPPPPOONMKLLKKIIHFFCAzCCCAzAzywumqqjjjggebb82[[((!!!!';;;;;;;;=*&%&&$$##$$$%&&%*;;>'!{]_:78ahjmnuxzCzzzCAzyzAAABBDEEEEEEBBBBGGGGGGEEBCAzwuxwyAAAAywwtttyAAAwxwuuuoonnkgggdbbb8", "8888888866666666622}[[[[[(^^^{!''>;;;;;,,'!^^^[[}26a6666aa8abhopqnnppqssxxAEGIMMNOPPPPPPOONMLLKKIIHEFCzzBBCAAyAysmmqnjjghecb82}[[({!!!';;;;;;;;;=*&%$&$#$#$$$&&%%*;>>,!{([[788hjmnuxzCCzzBAAyyAABEBDBEFBEEEBCCGGGGGCABzzAAwxwwyAAAAyywuutwyAxwxxuuonllkkggbbbbb8", "6666666666666666662}[[:[({]^^!!',>;;;>''!!!{^^[:}46aa226aaaabhoppoorrqssxxACGHKMNOOPPQPPOONMMMKKIIFEFBzzCBBAyyAuqmmjnjggbebc82[[[({!!!';>;;;;;;;=&&%$&$####$$&$%**=>''!{([1468hjmvqwzzzzzCzAyyyABEBAABEEEEEEEHGGGGGBADxzAAyywywAAAAAyywtttwuwxwxuroolkkkebba6666", "66666a666666622}}}}}[[[[((]^^!{!'',''''']{{^[[[}25a66a6668abbeottppprqupxwACCGKMNNOPPQPPOONNMMKKKIFEEAzzABCyyywtqmjnngdbebcb22[[((!!!!;;>;;;;;;;=%&%%&#$####$%%%*=;-',!{([1488ejnvwwAzzzzCCAyyyyAEEAABEEEEEJGJHJGGGADDxxyAAyywyyBBBAAywwttqutxxwupnokkkeeb888666", "66666a22222222222}}2}}}__:^^{]]!!''',,''!]^^^^[}44a6666666a0cemtwtpppuuuxwAGCGKLNNOPPQQPPOOOMMMKLIFFFAzzABByyytuqjjnggabbhca2}[[({!!!!;;>;;;;;;;=%&%%$&$$#$$$%%*=;-;,'!{_[168bbknvwAAAzzzABAyyyAADBBAAEHHEHJGGJIIHEAAxxxxzyyywyAABBBAyywttquuxxxppomkkhfa8888666", "}}}}22}2}}}}}}}}}}}}}}}__(]^{~{]'''''','']^^^^[[}2222222266abckpttqpruuuxxABEHKMNNOPPQQPPOOONLNLLIIFFBAzBEAywquuqjjkggb8ceb22[[[({!!!';;;;;;;;;==%&%%$$$$%$$%%%%==-;,'!{[[266bjhnqwAAAzzzAAAyyyADAADAABHIHHHGGIIKIEBxxuusptwywAAAAEEBAyywqquuxwxpppmkfheb888822}", "}}}2}}}}}}}}}}}}}}}}}}}_:]]]{{!!!'''',',!{]^^[[1122222622260abkotprrrqqtxxAAGJKMMNOPPQQPPOOONNLLLIKHECAABEAwtquujjkkgbb8cf62}[[(({!!!';;;;;;;;;==%&&%%&&$%%%%%&==-;'''{{[_468bjhnvwAAAzzzyAAAyyAAyyABBBHIIJIHJIIKKHByxurspstuuyAAAEEEBAAuuquuuxpprmmmjfbbaa8222}", "[[}}}[[}}}}}}[___[[[_}}::]^]({{{!'',,!!]]]:[_122aaa66aaaaaabfhlpttpppquuxxAzBGIMMNOPPQQQPPPOONLMLMKHEEzCBEAwqqunjjkkbbabfb62[[[(({!!!';;;;;;;;;==%&&%%&&&&%&&&&&**;>'!{{[1468benqvwAAAAwwzzCAyAAxuuAABCEJIIIIIHHIIIBzxxsspquqquAAAAEEEBAxuuuuuxpppmmijbccb8222}[", "[[[[[}}}}__[_:_:([(__[[___[:_//(({!!]{{((<1|1356988999a9cccfjiotyywttxuuzzAAEGHKMNOOPQQQQPPPPONNLMKFEHAAEEAwqqunikkkbb8bf62}[[[(({!!!';;;;;;;;;==%&&%%%&&&%&&&***;-',!{[[166bbknqsyAAAwwyAAAzAAwwuutACEEJKKIIJJHIIKEEAxwwuutquuyAAyABEEAyxuuuuxpspmmjjbbbb62}}}[", "[[[[[}}____(([((((((:_1:|1:}1____({{{{(((_1|}34688a8abda9ecchmptAAyyyAAACAEEHJIMMLNOPQQQQQPPOOOOMMMKIHBBEEAwqqunjjkeb88bc62}[[[(({!!!';;;;;;;;;==%%&&%*%%%&%%%**=;;''!{^_166bhknqsyyAwwwxAACAAzxutuuxBEEIKKIIKIKIKHHEAAywtttuuxyAAwwABEAyxxuuupppqomiicbb6a2}[[[", "[[[[[____((((^^^^:[:[[[1|}[[_<<__({{{{{((_<11|366a68899a8bbdflouwAAyyAAACCCEIIKNNOOPQQQQQQPPOOONONMKIHCCEEAxqqunjkkbb8acc62[[[[(({!!!';;;;;;;;;===%%&=%%%%%%%%==;;;''!{^_166aekvqwyyAwwwxzCBCBzxxuxxxAEHHKKKKMMMKIEEEAAwxtuuquuyAzxwyAyAyyxpprpppqqmjfbcba62}[[[", "[[[(___]]((^^^^[[[:[[[:[[1:[_<___{{!!{{(((_}_|266a6668668aa9filotyAyzzAACCCHIIKNOOOPQQQQQQPPOOONOMMKIIEEEHAyuuunjjkb88bb822[[[[(({!!!!;;;;;;;;;===&%*&&&&%%&&=*-=;;''!^^126bagjrtvyywwwxxzCEEAzxuuuxxCCHHKMMMMNNKIEBDyyxxuupqquwyAwtwuwyztprppprrqqlifbb6622}}[[", "((((__(](^^^^^^[(((((:[[:[:[}__<,'^^_122bbgjmstvvywwwxxzAEzxxxuxxzzzEIKMNOOMMKIECvvqqqronppoqtxywuqlnmptpoiiijjllliecba222}}((", "((((({^^^^^!{{{{{{{{]{{]{(([:_((:<]]!!!!]^{]:[^[:[:_2}2}266a8ahimpwxustwzxAAEEGIMMMOPQQQQQQQPPPPPPPOOMMMKIEyyxxppmmjbbhba2}[[[[[(({!!!!';;;;;;;;;===;=-=====;;;;'''^^(_2268hgjmvvvvywwwwyzABzxxxxxzzzBIIIMMNNMMKIGzvtqqqmnnnonquwyxuqnkklppoifiifiiifecb622}}_((", "(({(({^^^^{{{!!]!]]{^{{{{{(](_((__]]!!!!^^]^(^^_[[1[[}}2226668gelqwttupwxxAACBGGKMMNOPQQQQQQQPPPPPPPONNNNKHAAxwpomkiififa22}[[[[(({{!!!!;;;;;;;;;==*=;====;;;;;;,'^^^(_2288bgmmsvvvvwwxwyzzAxxxxxzzzCEHIIKKMMMKIEGCvsqqmnnnnnhmquwwuonkjiiooliiijiiiief86222}_((", "({{({^^^^{!{!!!!!!!!{{{{]{](]((](<(!!]!]^^^]]^^[[[[[[122226668bgkqtwsrtuuuyyBCGGILKMOPQQQQQQPPOOPPPPOOOOONKIEAyxokkhjhifb622}[[[[(({!!!!';;;;;;;;;;;;;;;;;;;;;','!^^(_}228bgjmvvvvvvywwwyzAAAxxxxzzCEEHHHIIKMMKKEEAwuqqmnjnnnjhmqtuunkkjfiloiffffccbife8622}}_((", "{{{({^^^^!!!!!!!!!!!{!!!{{{]]//(/_(]]!]!{^^]^[[[[[_[[222222888hghmwwsruuuuyxzACCHFIMNPPQQQQQPPOOOPPPOOOOONNMIIBAtpkkeffbb8622}}[[[(({!!!!';;;;;;;;;;;;;;;;;;;''!!!^(_}}2aabgjmvvvvvvywwwyzzAzxxxzzCEGHHHEIIIKMKIEEAvuqmmmjjjnhjjmuuonkheheiiifcfccc9bb98622}__((", "{{{({^^^{!!!!!!!!!!!{{!]!{^]{]:<:::]{]^]^^]]]][^[[[}2}2222668adghottsuuuuzyxzzACHIFKNOPQQQQQPPOOPPPPPOOOOOMMKIECwtqmiifbaa866a22}[(({{!!!';;;;;;;;;;;;;;;;;;>!!!!!{__}}28bdjmmvvvvvvyzwwwyAAzAxzzzCEEHHEHIIIJKKHEBAvuqmnmjjjjjjhmqunkkhbb8bfffbccc999988a62}__({", "{{{({^^^{!!!!!!'!!!'!!{]]!{^]]:::::(]]]]^^]^]^[^[}}}}}2}2666a0dhjotxxuuuuwxxAzzCEIFILNPQQPQPPPPOOPPPPOOOOOMKKIHBBywtponc888826a22}[(({!!!!';;;;;;;;;;;;;;;'!!!!!{{([[}2a8bdhmsvzzvvvvzzwwzAAzAzzABEEHHEEHHIIHHIHGEDvuqmnnjjjjjhhmquokfbbb888ffc9cc998866662}__({", "{{{(^^^^{!!!!!''!'''!!!!]]{{{(:_:::({]^]^^^]:[[[[}}}}}}266aaaaeejnuwxuuuwwwwzzACGIIKMNOPPPPPPPOOOOPPOOOOONMMKHHCAwwxwwplhba8a226222}_({!!!!';;;;;;;;;;;;;;'!!!!{{^([[26aabhmmsvzzzvvvzzzwzAAAAABEEHHEEEEHHHIHEIHHEDwuqmnnjjjjjhhmqomkjcb8a68bc99995555866222__({", "{{{({^^^{]!!!!'!]'!'!!!!{]]{{(:_:_<_]]]^{^^^[[[[[}}}}}226aaabbehmquywuuwwwwwzzzCGFHFKNOPPPPOPPPOOOOOOOOOOOOMKIEEAytwwxtpoheb888222222_{!!!!';;;;;;;;;;;;;;',!^^(([[[}266ademvvxzzzzvvzzzABzAACBEHHHEEEEHGHHIHEHEEBDwuqmnhjjjjjhkkmomjeh888a85095555335544222__({", "{{{({^^^{!!!!!'!'')!!]{!{{]{{(_<<<1_(]]^{^^^::_[[[}}2227aaa8bbhkmquxxvwwvwwzAzACGHHFKNOPPPPOOOPOPOOOOOPOOOOMKIEEzxxtwwtppplifba8222}2<(]^!!';;;;;;;;;;;;';'!,^(([[[[}668bhhhvuxzzzzzvvzzzCCzzBEHHHEEEEHHHHGHECBCEBAyuqnnnjjjjjhkkmomifea6aa475534224443||||2__({", "{{{({^^^{!!]!!!!'!!!]{{{{{{]](__|_1__]^]^^]::::[[[}2227778888hhkmquyAxwwwwxzzzACGHFFKNOOOOPOOOOPPOOOOOOOOOONIHHBBwxxwwuqqppolihha22}__(^^^^';;;;-;;;;;;;'''!,{([[[[}668abekrvuzDzzzzzzzzAABBABEHHEEEEHHHHHHHEEzBEBDyturnnjjjjhkkmnnmkjjc8a744432}22}}}}|1<_<<_((", "({{({^^^{!{]^!]!')!]!!]~{({((:[<}|11_]]]^^^:::_[[22277777888bgkkmpuyyyxxwDAzyACCGHHFKMOOOOOOOOOOPPOOOOOPOOOMIHEEAAxxttpqqqnopllih8a2__(^^]^!'';>;;;;;;>;'''!!{([[}}6668abkkqvxDDDzzzzzzzACBCCEHHIEEHHHHHJEHBEEzCGBDAxurmmjjjjkkkmmnmkhheba541}22}}22}}}::^(_((((", "{{{({^^^{{]!^!]!!]]!]!{]{/(((_1|}}111:::_([_::}222277777a888bghkqptyAywzyDAAyyCCGHFFFKMOOOONONOOOPOOOOOPOPONKGCByyuxyyppmmmmooplmfc61_{!^]^!!!!''>;;;;;;;;'!!{([[[2228abkhrvvxAADDzzzzzzzACABEEEHHHHHHHIHGHBCAAzAAAAxuqrnjjjmkkknmlmlfcfec74[}2221111_}:::]^]{{{", "!!{{(^^^^{{!!!!]!!]{{!{{(/(_<_143|||1<::__[[}22222777770a888bghmmrtzCBAzAAAAAzzCGHFFFKMNOOONNNNOOOOOOOPPPPPNKHCzzwwuxxupormmmmoolifc9|_^]!!^{~{{'';;;--;;;'!!{(:[222600bkknvuDBBBDDDzzzzzAzABEEEEGEEHHHIHGEBEACCAAAAxxsqmjmnkkkmmmlmlifiic04}}}1_<<<<;-;;'''!{[[2260bagnnvuDDBECDBCzzyADzAAEEBAAAEEHHHHHEEECBBAADAyxxuummnmkkkkkmjmmifiic92}}_<|',''!{[[2260bhgmvutyCGEBDBzzzyDxyABBBAzAAAEEHHIHHHCBCAAADAAzzxupmnmmhkkkmjklifffd922}_<<<(((/{{{)),''>;", ";;'''{^^^:{({{{{{{{{({]((__:__|114414}_____111226666aaaa9behjilqqqtyEECCCzCAzzzCEHEFFIKNNNNMMKLMOOOOOOPQQQQONKHFAzzyywprssmqqlife9aa7445cd95}<]^]!'''''';',''!{[:22a0ahnnvvvDBGBBDBzzwyzyDBEzxxAzAABHIIHHIHGCEABAAAAAAAzturmnhhkkkjkiidccd5221_<<__((({{{!'',;;;", ";;;'''{^:[{]{{{{{{{{{{{^(__::<|11442|}[[[_[}}222aaaa0898abbbejlquuwyBEEEEEEEBBBEEHEEFIKNNNNMIKLKNOOOOOPQQQPONMIFDAzzzvvvrrsmhgfbe8a85375955743}:^]!''''''',''!]^[22608gnjvuvDAGBBDzzzwvwyABAzxxxzAABHIHHHHHEEBAAAAABAAAAwuqmnmhkkhkkiicccd963|<<<<_(~~~)),''';;;", "=;;;'']{:[(({]^]{{~{{{(((_::<1|4443332}[[}}1222000aa9c9aaaabejoquuuyBEECHFIHHEGEEHEEEHKMNNNMKLKLMOOOOOPQQQPPNMIHFDAzzzvvvvrmegbabaa777753}}}3437}_]!'''''!!!'!{^[2260agljqqwDADBBDzzzwywzAzzxxxxxABBEEEEBHHHBAAzyyAAAAAzwtqrqnmhhhkkiifcccc654|____~{~~))''>;;;=", "==;;'''{([[((]((]]{/(((((__<:11|4353552}}}42770ddabbdccccdhgiopptxwABEGEIHIFIFFFEHECEHIMNNNMKIKLMOOOOOPQQQPPOMKHHEEEAzxxvvrmedaa222|7572[<[:|1|742|[!)'''!]!!{]][22678gjjqqwDDDDDDxzwxvxzAzxuuuxxzBEEEEBEHHBAAwxyyyAAAAwttqrqqljkhkkkiiecdc954|___//{~)),>>>;-==", "%==;;''!](:((](((]]/(((((_<_<1|435575955775700ddihhggfffikimopptwwxABHEEHIKKKIFFEIEECEIMNNNMFILMMNPOOOPQQQQPONKLHHHEFzzxxxrmed862}}1774[[:[::[|4443|:{!''!!]^{([[}}6a8gjjqquDAADDDxzwwuwzwxuuuuxxxBEEEEEHHBAyyxxzyyyzAzwwtpqpooljjjkkiifcdc993|<__//)))),>>--*%%", "%%*;;;,!{{(_((:(((:(/<:__<_1|4377590990775000ddijifikfiiimmmmpqppwwABHHHHIKKKIIIHIHECEIKNNNMIIIMMOOOOOPQQQQPOOMLKHIFHDDzxvrmed862}}131_^]:^::_14|1233}({'!!!](__:}2778gjjrquDAADDDxxwwwwzxusuuuxxzzBBBEHHByyxxxxxywwyyAwwupuqnoomkkkmiieffc995|<__//~))),>;--*%%", "&&**-;'!]]([(__:_::/_<<<<|11|4355599900557909ciiiigggkfiikkkkmnnrtxxBHHHIKKLLKIIKKIEEEIKMNNKIFILMOOOOPPQQQPPPOOMKLKIHFDzxvrmed862}}1|_{^^]^_<_1111:}334<^]!!!{(:}22778dikmquwADDADxxwwwyyuuqvvuxzzzBzEEEAAwuuuuxxwwuxxxwwtrqooopmmmmmllffffc97||;-=%&&", "$&&=--'']{]_______<<<<||||3||47579999990099ccgiiiijgggcfghhgggijjquuyBEEEIKMKKKKKKIHEHIKNNNMIHIIMOOOOOPQQPPPPOONMLLMLHDzxvrmed862}2__{{{{{((__111<_[}323|:]!!{{[}62088djjmqtwAADAxxxxzwyuuqvvvuxzzzzBEEAywuuuuuupstpuxxtwuqqlnnmmmmmmoliffc9673|_//~~),,,>-**%$$", "$$%==-''!{((1<_<1<<|<||||||33347799ccffdccccfgjkkggddggcdbbdhheehmqqwAEECGIKFFLKKKKIHIKMNNNMKFIILOOOOPQQQPPPPOONNNMMLHDzxvrmed86222_({{!!{((_11311_[<:}2|11:({/:[220agdjmmqtvAADDyvxxywyuqqvvuuxxxzBEEAywutuxuspppsqutxuwtrnmlkmomliloonifc9663|1>>-**%$$", "#$%%==>''{(_1<|<|111||||||33357709cccffcc99cghhhhjghddgdbbhbdgeehmmqwABBCBHIKIFIIKKIHIKMNNONKFFIMNOOPPQQQQQPPOOONLNMLHDzxvrmed8622}[(({{{{{{__2221__](:<11|||1_::220bghjmmquvyADDyuxwzyyvqqqqrruxxzGEAywxuxxtpprrppquuxtwtqqnjkjjillnilolif9a63||>>-*&&##", "##$%*=>>'!{(__1_111||11||33355900ddccfgc99ddhehhhhhhddddbbbabheeemmmtyCBCCHIFIFIIKIHEHKMNNOOMKFKKOOOPPPQQQQPOOOOOONMLHFzxvrmed8a22}[(({{{{((([}}2|__^](::<||752}}2609gglmnqtvyADDxvxwAyxqqqqsrquxzBEBAyxxuuxtutsssppstxtwtummkhkehijiilolij9aa3|1>>==&&##", "##$&**;>,!{(_|||||1||1|33335599990dccfffddhhhghhhhhghdddabbbhheeehmmqyABBCEHFKIIIKIEEHKMNNOONKKKMOOOPPQQQPPPOOPPOONMKHFzxvrmed88a}[[(((((({{[[[}}_1<<]^]^[_1459556678gglqqqtvyADyAvxxAwwqqqqvrruxzBEAywxwxxttwwyvvwwtxywyutpmmkheehhiiloilic9673|_<~~),>>;==&&##", "@@$&&*-;'){{(_|11|||11133555569990cccghfebhhhghkkhjfgdgggbbehhhjjhmqqyABCCEFIIFIIKKIHIKMNNOONMKMNOPOPQQQPPPPOOPPPONNKHFzxvrmedb8a2[[[(((((([:[[}[}<__]^^]^]_|3999990adgjqqquwAADDDwxwzwwmmqqunruzACyyywxwxwyAEEEEBAAAAAAAwwsomkhhbbbejliiiif9673|_;===%$@@", "@@#&%=*>>'!)(__1<1||43347555599999ddghfifghggklnjmmmiigghhfhghggjjqquyAEBCCHFKKIFKKIHIKNNOOONNMMNPPOPQQQQPQPOOPPPONNLLFDxvrmmhb88}[[[[((([[[::1}}}_|__]/](^<<1599cfdbggkqpqwyAAADDxxyAwtsmqqquoxzzywwxwyAABEHKMKIIHEEBAAAAAwpmmjjbbbfiiiiiifc953||-==%%$#@", "@@#$%%=;;,,!~(__|_|||33555550999cccdggiiijkjlooommmollkkkffghghkjjnquAAEBCEFIKKKKKKHHIKMNOOONNMNNOPOPQQQQQQPPOPPPPONLLFDxvrmmjga6}[[[[[[[[::}22}}}}_<_<_:/(__137ccfgfigimmqvyACADDzzzAztsmqqqquxAAvtwwABEEHIKMMIEEBAAywwyABytqnjjgbhhhgiiiifd99531;==%%$@@", "@@##$%%*;;,!{/_<<||1|145559709cccffiillllllopprpppppoommiiikkkkkknmuuAAEECEFIKKKKFKFHHKMNNOONNNNNOOOPQQQQQQPPPPPPPONLLHDxvrrmhgba6}[[[[[::[}22662}}(//<_<__<_}|580fiimomrqqwyAEADDAzAywusmqqqvxzAwtwxyBEHIKKKKEBAwwwxwtwyyAywqmoijijhfhfiijif8853|<<~)),;=%%%#@@", "@@##$&&**-')){/<_<<|||3755999dcfffiilooooooooppppqppppopllommmpmmpptwABEEGCIFKKKKLKIHIKMNNOONNMNNOOOOPQQQQQQPPPPPOONMLHFzxvrmjgb66}}[[[[[}}2288864}}({{(1||1_}|298fgiopprqqvvACADDDzzvvsssqqquxzzttwyAEIIMKIHBAywtttxwwwyyAywtpmlmihehcfiiiff9973||'!~/_<<|||3355999ccdgfgiillllollnoorrpmoqoommoloompqpqttyyEHIHGHKKKKKLKKFFIKMNMNONNMNNOOOOPQQQQPPPPPOOOOONLHFzxvsmhdd666}}[[}}266ccff996}(({/<||1_|2269dfmotttutvyACEBBBBzxvvstqqqtwzxtwyAEHIKKIEBAyAAyyyyAyAAAAywtpmlnlgfhfeeifgfc8953|,!~/<<<<||3335599ccggfiijllnnlloooopppqqpoomomlmmmopqqttyAEIKKIIMMMMMKKLKIKKMMMMNMMMNOOOOPPQQQQPPPPOOOPPOOKLFBxvsmmed8666}222a6bbfeifif92[((/_|<_}}2269dfmmpwwwwwyABEBDEEzxvvtutqqxwxxwyABHIIHHHEEEEEHEEEEEBBABAAytpoliiiighceffgcc8953|;%%$#@+", "+@@##$%%*;>,){//<<||||355599ccggfiijllonpppppttwwtxwttpttpppppputtwAAEIKKKKNOOONNMMKKKLNNNNNNMMNOOOOPPPQQQPPPOOOOPPPOMLIDzvssmed86666226bbbccjjefc6|[(((((/(::2669dckkptwwAAAACEGEHEAxxxwstuuxxxxwAEEIIHEHIKIKIIIHIIHIEEBEBAAwppojhfiffcddddc88653|;*%$#@+", "+@@#@#$%*->,,)//<<<||||35599ccfiiillooppttwwwwyyyyAAyywwywwwtxzzyyABCHIMKKMNOOOOOOOMMMMNNNNNNMMNOOOOPPPQQPPPPOOOOPPPOOMIFBzytmmed86688abcbccehgif86}}[(({{{^:[}659dekoouuwABEBEEEEHEEzxvvwswyDuxzBBEHIHHIKMMMKKIIEHIHIIIHHEBBAwponijijfcccccc98655||<~),>;*%$#@+", "++@@@#$$*--,,)~//<<||||35599ccfiiloppttwwywwwwyyywyyywwtwwtttwAAAAEEEIKMMMNNOOPPOOOOOOOOONNNNMNNOOOOPPPPPPPPPOOOPPPOOONNIHzztmmeddba88bbcciikggfc82}[:[{{^]^^::27dffkooptwABEHHGHIEEBAxzvvwwzyuxABBHHHHIKMKKKMKIIHHIHIIKIHHEEBAtpnjffefffcd9c996533|,)~///<|||335599cfiilopppttwwwwwwwwywwwwywwuppppptwwyzABEHMNNMOOOPPPPPPPOPPPPPOOONNOPPPPPPPPPPPOPOOOPPPOOOONMIEAzsmmeggbehchfilokkkf962}::::::[][:}2a0ckkmrpuwAAEJIIIKIEBCAzzyyAzyAzCEIHHIIKKKIIKMKIIEEHHIIKIHHEEBBypljfbeffcc9cc95333||,)~//<<||3355599cffillppptwwwwywwwyyyywyywwwutttttwwwyyABEIMMMNOOPPQPQQQPPQQQQPPOOOPPPOPOOOPPPPOOOOOPPPOOOONMMKGAwtqjjkkkhfhgkmmonkg6a6[::[:[[[:::2}60agkoupuwyABHIKMKIHBDDzzzACAyACEHIKHIIIIIHIIIIHHEBBAEEEEEHEEEBytoifbhcfdcccc9533|||;%$#@+", "+++@@##$%*-->)~/<<<|||355599ccffiiloptwwwwywwwyyAAAyyywwywyyAAAAACEHHKMNNNNOOOOOOOPPPPQQQQQQQQQQQQQPOOOPPPPOOOOOOOPOOOOOOMMKGEAAxuronljeejjjqmhd8666}:[:[::[[22608ggjppuwyAAEEEKMNMIIEBDEBEEBEEHIIKKKIIKKHEEBBBBBAzyywtwwwAEBBBAwpoijedd99cc9953|||<<<~),>;%%#@+", "+++@@@#$%*->,,~/<<<||||335599ccfiiloppwwwwyAyyyyyyywwwwwwwtwwxyyAEEEKKNOOOOOOPOOOOOOOOPQQQQQQQQRQQQQPOOOPPPOOOOOOOOOOOOOOONKHHHEEywuoljeemmqmmed8aaa}}[[:[:[422a08ggioqqwyAAEEHKMMMKKIEEEEEGGHIIKMKKKKMKIEBAAAAAAAAAywttpuwAABAAwtolifdda8c995531|<<<<~~,>;=%#@+", "+.+@+@#$%%->,)~//<<<|||3355999cfiilopptwwyyywwwyvwwuutttpstquuuxAAAEHIMOOOOPPPPPPOPPOOOPQQQQQQQQQQQQQPPOPPPOOOOOOOOOONOOONMMMJIIHHAyuqqmmqqqpmhdd8662}:[:[:2226788glinqqwAAEEEIKMMMMKKKHHHFHHFKKKMKIKMKIEBAABzAAABAAAwxupqtwyAAAwtpoljgd890999541<<<;=%$@+", "+.+@+@#$%*->,))~//<<<||335599ccfiillopptwwwwwwwywwwvxxwwwwwwwwyAAACEGHKNOOOOOPPPPQPPPPPPQPPPOPPQQQQQQQQPPPPPOOOOOOONNNNOONNMNNMKKHHEwuuqqqwtpkked82222[:[:22}267agglrrqtwyAEEHKKMMMMMMKKKIIIHKMNNMKMMKIHGEABBAAyyDyyyyuupttwwyyAywtpoifd09999953|1>=%$@+", "+.++@##$%*-->))~//<<|||355599ccffiilllpptwwyyyyAAABBAABBEBABBBBEEHGIIKMOOOOOOPOOPPPQQQQQQQPOOOOPQQQQQQQQQQQPOOOOOOOONNNOOOMNNNNNMKEEEBAyyywtpkmeda82222222222607aggkqrqvvAACEIKKMMMMMMMMMMKKKMNNNNMMMKEEEECAywwstsstzwuuutwwwwwyywtpplic98999953|<=&$#+", "+.++@##$%*-->,)~~//<<<||35599cccgffiloptwwAABBBEEEEEEEEEHHHHGHHKKKMMNOOOPPPOPPPOPPPPPQQQQQQQPOOPQQPPQQQQQQQQPOOOOOOOONNOOOOMMMNNMKIEEEBBABzypmkb0082266689889909ggkjmquvvABBEIKMMMNMMMMNMMMMMMNNNNONKIHIBBzzzxssrrruuuuuputwwwwwywwtolifcb955553|=&$#+", "+.++@##%%*-->,,~~/<<<|||335599ccfiiloppwyABBBBBEEEEHHHHHHEEHHHIKKMMNOOOPQQPQQQQPPPPPPPQQQQQQQPPQQQPPPPPQQQQQQPPPPPPOOOOOOOONMMMMKKKHHEHIIEAAtmme0088688cccfjiigfkglmnqtvwyBBIIKMMNNNNMNMNNONOONNNOONMIHEEAzxxuuuuuuqusuuttuwtwtwwwwtooiib9955553|<-&&#+", "++++@##%%*-->,,~~//<<|||333599ccfilopttwwyAABBEEEEEEEEIHEEEEEEHHIIKMNOOPQQQQQQQQQQQQPPQQQQQQQQQQQQPPPPPPQQQQQPQPQPPPOOOOOOOOMNMLKIJIKIIIIIHBwtmefd9ccffccfiilklqmporqqwvyCAEHIMMNNNNNNMNNOOOOOONOONNKKJEBzAxuuuuuvvqqqqtuspttttwwywwpoliec957533|<-&&#+", "+++@@##%%*-->,,~///<<<||335599cfilloppptwwyyAABBBBEBBEEEEAACCBCCEIKMNNOOPQPQPQQPPPQQQQQQQQQQQPQQQQQPPPPPPPOOPPPQQQQPPPPOOOOOONMKFIIIKMKIIIHECwmmigkilifccffkkllpptupqtvvyCBHHIMMNNNOONONNOOPPPPOPOMMMIHHGAzAxuvuuuvqqqsttqutttwwwyywppliec95733||-*&#+", "+++@@##%%*->>,))~//<<<||335599cfiloooppptwwwAAAAAAAAAADBBBAAAAEEHIKMMNNOPPPPPPPPPPPQPPQQQQQQPPQQQQQQQQQQQPOOOOOPQQQQPPPPPOOOOOMMKIIILMNNMKEEEAupnomoijfeccgggjomttxxuvyAyCBBHIKMMNNOOOOOOOOPPPPPPONMKIJGECzyxywvuvuqqvsuupuwwwwwwyywtplif9997731<<({~!),,>>-*&$@", "+++@@##%%*->>,)~~///<<||355599cfiloooppptwwwyAABBBBBBAAABEDBDEEHHIKMNNOOPPPPPPPPOOPPPPPQQQQQPPQQQQQQQQQQQPOONNOOPQQQQQPPPPPPPOOMMLIKKMNNNKHCBAxxttqoifbc9dddeekmpuwwyAAyAACBIIKMMMNOOPOOOOPPPPQQPONMKIJJECBzxwwwwwtttvstqstuwwwwwyywwtoifc9973||--**$@", "+++@@#$%%*->,,)~~~/<<|||355559cfiioooopptwyAAEEEBEEBEEEBEEEEEHFIKKMMMOOOPPPPOPPOOOOOOOPQQQQQPPPQQQQQQQQQQQPOONNOPPQQQQQQQQPPPPOOLMMMKKMMMKIGCAyBywpokgddd00bbggoostxAAADyABEEIIKMMNNOPPPOPPPPPQQPONMKKIGGGCzzzvvwttttsvsuvttttwywyyywtplicc053|||>-=**$@", "+++@@#$%%*->,,))~~/<<<|||35559cfiilooopptwyAABEEEEEEEEEEHEHHHIIKMMMNOOOPQQPPOPPOOOOOOOPPQQPPPPPQQQQQQQQQQQQPPOOOPQQQQQQQQQQPPPPOONMMMMMMKKHEEABABywmkgdd00bbgggmlpuwAAAADAAEHIIIKMNOOOPPPPQQPQPQPPONKKIIGGCCCzDytuutssvtvusuutvwwwwywttoicc973||<>--;=*$@", "++@@##$%*-->,,))~//<<<<||35559ccfiillmopptwwyBBEEEEHIEHHHIIIIKKKMMNNNOOQQQPPPOPPOOOOOOOPPPPPPOPPQQQQQQQQQQQQPPPOPQQQQQQQQQRQQQQPPOOONLMLIIEEEEEAzwtpmgdd0bbbggllqruwAAAAAAAEHHIIIMMNOOOPPPQQQQQPPPOOMKLKIHGCCAAAxvvvvvvtwuusuttvvwwwwttplic973||--**=*%@", "@#@@##$%*-->,,)~~//<<<<||355559cffiikllopppwwAABBBEHHHIHEGJHJJIIMMNNOOPQQQPPPOOOOOOOOOOPPPPPOOOPQQPPPPQQQQQQPPQQQQQQQQQQQQQQQQQQPPOOOOOMIFECEEHAytpppligecbgggnmrqquwwADDAABHHHIKKMNOOOPPQQQQQPPPPOOONKKKIIGCBAAzvvvvvvtwxxvutwwwwwwwwtpoifc95||<-;**%&%#", "@##@#$$%*-->,,)~~///<<<||335559cffiiiillooptwyAzAAzEEHHHIIJIIIMMMLNOOPPPQQPPOOOOOOOOOOOPPPPOOOOOPPOPPPQQQQPPPPPQQQQQQQQQQQQQQQQQQQPPPOOLIFBCEEEAywppppoljekggnlrvqttttxDABDEEHGIIKMNNOOPPQQQQQQPPPPOOONKKKIIHGGCCzzzzxwvxxxuuwwwyytwwwtpoifc95|1<--=*%&$#", "@##@#$$%**->,,)~~///<<<||3355599fffiiillopptwwyAAzABEHHIJIIIKKMMOOOPPPPQQQPPOOOOOOLNNOOPPPPPOOOOPPOOOPPQQPPPPPPPQQQRRRRRRQQQQQRRQQQQPPOMIHECBEAwwwpooppolmmkknnquutuutuwDDEEEHEHIKKNNOPPPQQQQQQPPPOOPOONNMKKKKHGCCCCzzzxxxxxvwvyyywtttwtoifc9531--;=%%$$#", "@####$$%*-->,,)~~///<<|||3355599ffiffiiloppptwyyAAzBHHHIIKIKMMNOOOPPPPPPQQPOOOOOONMNNNOOPPOOOOOPPPNNOOPPPPPOPPPPQQQRRRRRRRRRRRRRRQQQQPOMKIHCCAwwuuuoooppuqmmqmrruttqqqutwDBEEBGEIIKNNOOPPQQQQQQQPPPPOPOOOOMMFIIHGCzzzAAzzxxxvwyyAAywwtttolfc9531>-*=%&$$#", "@@#$#$%%*->>,))~~///<<<|||355599ffifgiiloooppwwyAAABEHHIIKKMMNNOOOOPPPPPQQPOOONNONMMMMNOOOOOOOOPPPNNNNOPPPOOOOPPPQQQRRRRRRRRRRSRRRRQQPONMKKCzytuqqtuoooutuqtqqvvutuuuqqquwBEEBGEEIIKNOOPPQQQQQQQQQPPOOPPOOOMKIIHFECzzzAAAzzyyyyAAAywwtttplfc953|>-*%&&$##", "#@#$#$%%*->>,))~////<<<||335599cfffgfiiloloopwwyAAABEGEIIKMNNOOOOOPPPPPPQQPOOONNNNMMMMNOOOOONNOOPPONNNNOOOONOOOPPPQQQRRRRRRRRRSSRRRQQPPOOMKEAxutmqqutuuquuuwtxuuuuqquqqquwAEEBAECHIKMNOOPPQQQQQQQQQQPPPPPOOMLIFFHEEzAzzzABAAzAAABBAyywttpoic953|--*%%&#@#", "#@#$$$%%*->>,,)~////<<|||335999cffifiiililopptyyAABEEEHIIKMNNOOOPPPPPPPPPQPOOONOONMMMLNNOONONNNOOONNNNNNNNNNNNNOPPQQQQRRRSSRRRSSSRRQQPPOONNHCyputmqquuutupwywyxxwuuqqqquuuyEEEBAEEIKKNOOPPPQQQQQQQQQQQPPOPNNMMKIHHEEDDDDABBBBABEEEBAywwtpoic9531-**%%&#@@", "###$%$%**->>,,)~//<<<<||3335599cfffffiililooptyyAABEHHHIKMMNOOOOPPPOOOOPPQPOOONNONNNNMMNOONMMMNOOOMMNMMMNNNMKMMNOPPQQQQRRRSSSSSSSSRQQPPOOONKEAyttmmqquuuupwwAAyxwuuuuqqquuyAEEBBGEHIMNOOOPPPPQQQQQQQQQPOPOOONNMKIIIHEDAAABBEEEEEEEEBAAwwpoic953|-**%%$#@@", "###&%$%**->>,,)~//<<<|||3335599ccfcffiiiilopppwyyAAEEEHIKMNNOOOOOOOOOOOPPPPOOONNONNNLMMNONNMMKNOOOMMMKKKKMMMMKKMNOOPQQQRRRRSSSSSSSSQQPPOPONKJEAttmmqmqquuwwwAAAzyxuuuqqqquxyDDEEBEHHKNNOOOPPPPPPQQQQQQQPPPPPPONMKKIHHEDAABBEEEEEBEEBBAwwtplf953|-*%%%$##@", "#$$&%%%**->>,))~~/<<||||||3359cccfcffiiiloopptwAAAAEEEEIIKMNNOOOOOOOOOOOOPPOOONNOMMMMKKMNNMMKKKNOOMMMKIHHKKMKKKKMNNOOPQQRRRRSSSSSSSQQPPOOOMKIHEwutqqqmqqwwwwyAAAAyxxuuqquuwyyABEEEHIKNNNOOOOOPPPQQQQQQQQQPPPPOONMKKIHHBBACBDEIHBBABEBAywtpoic95|<-*%%%$##@", "@#$&%%%*-->,,)~~//<<||33333559cfffffiillloopttwyAAAEHEEEIIKMNOOOOPOONNOOOOPOOONNMMMLMIKMNNKKKKKMNMMMMKIEEJHIKKIKKNNNOOPQQRRRSSSSSSSRQQPOONMIIHHAwwwqqqqttwwAyzAABAxxxuuuuuwwwyABEEEIKMNNNNOOOOPPQQQQQQQQQQPPPPOONMMIIHEEBCCBEIHBAAAABBywwppif953|-**%$$##@", "@#$&&*%*->>,))~~//<|||3333559cffiffiiilllopptwxAABBCEHHHHIKKKMMNOOOOOOOOOPPOOONNMMMMKIKKMMKKKIFMNMKKKKIHEECGHHIIKMNNOOOPPQRRSSSSSSSRRQQOOMKKHHEEywwwyywtttwAAzzABAzxxuuuuuxwwyyAEEHIMNMMNNNOONOOPPQPQQQQQQQQQQQPOOMKIHHEGBAEEHEBAAAABAAywtplfc53|>,))~~/<<|||3335599cffffffiiiillooptwyABBEEHHIIIIKKMMNNNNNNNNOOPPPONNNMLLMKIIKMMKKIFKMNMKKMKFHEECCCEGHIKMNNOOOPPQRRRSSSSSSRRQQPMKFEGCByywwwywtppzAAzzDEBAzxxuuuxxwwwyABEHIKNMMMNNNNNOOPQQQQQQQRRRRRQQQPPONMIHEEEEEEEEEAAyyAAyyywpoic95||//~),--*%$$##@", "@@$%%*--->>,,)~~/<<||333355599ccfccfgfiiiiloopptwAABEGHIIKKKKMMNMNNNNNNOOOPOOONNMKLMKKIKMMKKIIIMMKIKMKFEEEzzzzCGGIKMNNOOPPQPQRRSSSSSRRRQPOMMIGAzAyyywwwtuxwxzAAEDAAAzyxxxxywtuwDBEHIKMMMMMNNLNOOPQQQQQQRRRRRQQQQPPPONKIIIHHEEEGBBAyywwywwwtpif993|-*%%$##+", "@@#%&---->,,,)~~/<<||3|3335559ccc9ccffifiiiloopptwyABCEHHIKKMMMNNNNNONOOOPPPOOOONLMMKKKKMMKIIHFKMKIKKKFFFEzzzzzzEEHHKNNOOPPPPQQRRSRSRRRQQPONMICAAzyAywwtxtttzABEEEAAAAxxxzyxuttxBEIKKKKMMMMMNNOPQQQQQQRRRRRQQPPOOOOPONKIHIIIHHEEAAyytwwttttplfc953|**%$##+", "@#$&==--->,)))~~//<<||33333559ccccccdfffiiiilnrptwyyAEEHHHIKMMNNOOOOOOOOOOPPOOONNNMMKKKMMMKIHHFKMKIFKKIFHEzzzzzzCCCGGINNOOPPPPQQRRRRRRRRQPPONKHBzAzyAyzywttxxAEEEEEAAAAyzAyxutuxAEIMMKKKMMKKKNPPPPQQQRRRQQQQPPONNONOONMKIIKIIHEEBBAwttwttppplfc953|<--%$#@", "#$&&*-->>>,))~~~~//<<||3333599ccfdcffcfffiinnrpttwyAABEHHHHIIIKMMNNNNNNOOOOOOOOOOOOOMKKMNNKIIHIKKFFHIIIIHEBzzvxxzCCCCGHKNOOOPPPQQQQRRRRQQQPONMIEAzAzBBBzywxxuzBEHDEDAAzAAAAxuuxyABIMMKKKMKKKKMOOOOPQRRQQQQPPPPOONNNMNNNMKKKKKIHEEEBywtttpppolfc953|>-%%#", "$&**;>,,,,))))~~~//<<||335559ccfccfffffiilnlnpptwyyAABEEHHEEHHIIKKKMMMNNNNOONNNNOOOOONMNOOMIIEEHIIEEIIIHIIBzzzxwxyzzCCCEKMNOPQPPPPQQQRQQQQQPONKHEAzAABEBAzxxwDAEEHEDAAAAEBAxxuxxzEIMMMKKKKLKMMOOOPQQRQQPPPPPPPPOONMMKMNNMKIIKIIHHHBAytwtppoolic953|>-*%%$", "##%=;>,)))))~~~~//<<|||355999cccccffffeiiiloppttwwwAAAABEEHGEGGJIIJIKKMNNNONMMKKMMNOOOOOOONKIEEHIHBEHIIHIICzzzwwvvvvyzzCCIKMOPQPPOPPQQQQQQPPPONKHEAAyAABBCAxwyAAEDEAAyzAEECzxxxzAEIMMMMKKIKKMNNOOPQQQQPPPPPQPQQPONMMKMNNNMIIIIEHEHEBAwwttpoolif953|>-*%%$#", "+@#%*-,,))))~~///<<||33559cccffccffcfeiiilloopppptwwwAABBEEEHJHHIIJIIKKMNNOOMKIIKKMNOOOOOONMKIIIKIGCGIIEIIEzzzxvvvvvvxyzCCELNOPPPOPPOOOPPPPPPPONMKHAzxzzBBCzzyADEDDBAyAzBEEAzxxzAEKMMMMKIIIKMNNOOQQQQPOOPQQQQQQPPONMKKNNNNKIIIEHEEBAyywtwppoolic933|<~))>--*%$#+", "+@#$%=->,,,,))~//<||335599ccfffcfffffiiiillllmmooqssvyADBEHIIHIIILIIKLKLMNNNNMKFIIIKMNOOPONKKIKKMKHGGHEEHIECzzvvwvvwwvxyAzCHMNOOPOOONNMNOOOPPPPOONMHAxxyzAACAzADDDEBAzAABCCBAzzzAEKMMNNKIIKKKMMOPQQPPPPPQQRRRRQQPPONMMMMNMMKIHHHHBAAywtttpooolif955||/~),>-*%#@+", "++#$%%;>>>,,,))~/<<||335559cccccffffiiiijliiiiillmqtwwDABEHIKKKIIMKKKKKKMMNNMMKKKIIKMMNOPPNKIIIKMIHEGHECEHECzzxxwvvwvvwzyyzCIMMNOOOOOMKIKNOOOOPPONNKBwxwxzABCzAABBAAAzAACEBBBAAzBHKMMNNMIIKKMMOOPQPOOPQQRRRRRRRQQPPOOMKKKMMKIHHHEBAAAywtpoolllifc9953|/~),>-%#@+", "++@#%&=;>'>,)))~/<<<||33555999ccfffiiiffffgfggkkmmqptwyDBEHIIIIIIIIIKKKKIKMNMMKKKLKKKMMNPPOMKHEIIIEEGJHHHHICCzwwvvrrrppwyzzCGHKKNNOONKIHIKMOOOOOOONMIBwxwwyACCCBBEAyzAzAEEAABBBBEIKKMNMMKIFKMNOPPPONOPQRRQRRRRRQQQQPONKIIKMKKIHIEEBBByywtpoiiiffc9553|'',){~~//<|||33355999ccfffffccfccccggkkmoqqutwyABBEEHHIHHHIIIKKKKMMKKKKKKKMMMMNOPONMIHIIHBCBEIJIIIECzxwvqrrrrrssxzzGGEIMNONKIHJEHIMONNOONNMKEAAxxwzACBCBBAzzAzBEEBAABEHIKMMMMMMKKKKMNOOOOMNOPQQQQQQQQQQQQQPPOMKIKMMKIIIHEBAAAyttpoiiifc9953|<-%#+", "@#$%%*->''){~{///<<||||3555999cfcccccccccccgggimmpquutuwyABBEHHIIIIIIKMKMMMMMKKIHIKKMMMNOPPOOMKKIHDzABEEIIIHGCyvvqrrrrrsssvzBCCEKMMMIIHEEEHKKNNNNNNNKHEAzwxwyCBCBBAAyABBEECAAAEIKNMMMMKIMMMMNNNOOMMNOPQQQQQQQPQPPQQPPONMKKMMMKKKIEBAAywttpoiiifc995|<*%$@+", "+@#$%*>>)!~{/(/(<<|||3355599ccfccccc9cccccgggkkmmqqqqutuwyBEEHIKKKKKKMMMNNNNNMKKIIIKMMMNOPPOOONNKIDzzzACEIHHHEAAussrrrrssstzBAzCEHIIIIHEEHHEHKNNNNNNKIEEAAwwwyACBCBBzCCGEBzACAEINONNNMIIKMNNNNOONKMOOPPQQQPPPPPPPPPPPOONMMNNNMMKIEAyywwtppoiiffc9953|<~),>*%$#+.", ".+##$&*>,){~//<__|||335559ccfccccccccfcccfggilmoomqquuxwyAEHIKKMMMMMMMMMNNNONNMMMKKMNNNOOPPOOOOOOMEBAzAzBHEEGEEBwtsummmmssswCAvzCHHGCEHHHHEEEEIMNNNNMKIEBBzwwwyABCBBBCEHHBzzCEEIMOONNMIHKMNNNOOOMMNOOPQQPPPOPOOPPPPPPOOONMNNNNMKIEAywwwtppoliffc953||/~),-*%$#+.", "+@#$%&*>>,!)]~(((<|2335999ccfffffffffffffkilooooppptwxzACEEHIKMMMNNNNNNMMNNONNNNNMMNNOOOPPPPOOOOONIEABAABGEEEEEBwwummqqmmmtwwzvzCEECCBEEBBBEEEEHKNNNNMKIEBBAwwwyAACBEEHIIEAAAEHINOOOOMIFIMNNNOOONNOPPPPPOOOOOPOOPPPPPPOONNNNNMMKIHBywwwttpoliifc953|-*%$#@+", "+#%%=*=>>,!~{](/__<|335999cccfccffffffffiiloloppptwzAABEEEEEHIKKMNNNNNMMMMNNNNNMNMMMNNNOPQQPPPPOOOMHEBEEEHGCCEBzxxwuuuqqmmqwwtwvABBAzCABBAABBBBBEINNNNMKIHEEAwxwxzzzBEHIKHBBBEKMNOOOOMIIIMNNNOPOOOOOOPOONNOOOPOOPPPPOPOOOONMMMMKIHEAywwwwtpliffc933|-*%$#@+", "+@$%**->,'!!~]/<__135999ccccccccfccfccdfiilllopptwyAAAABEEEEHIKMMNNNNMMMKMMMMMKKKKMMNNNOPPQPPPPOOONKIHHHHHGCCBAwttquuuuqmmqquspvAAAzwwyABAAAABBBBEIMNNNMMKIEEAxwwwzzyBGHIHEEAEIMNOOOONKIKMNNOOPOOOONNNNNNNNNOPPPPPPPOOOOOONNMKMKIEEAywwwwwtplic9553|-*%$@+.", ".+@$&%=->,,']/<<<1|5cfffccccffffffffcdfiililoptwwyyAAAAAEEEHHIKMMNMMMMKIIKIIIIIHHHIKMMMNOPPPPPPPPOONMKHIIKIECBBwtuqquuuuqqqqqssuwwusuwyAABAAAAAAAAEIMNNNMMMKIEAzxwzzyyAEHEEEAzEKNOOOONMKKMMNOPONNOOMKKKMMMMNNOPPPPPOOOPOOONNMKKKIEEAywwtwwtpoifc993|*$#+. ", " .+#$%&->,')]]_1||79filiffffiiiiiiiiiiilllopttwwwyyyyyAEEEEEEEIKKMMKKKKIIHHHHHEEEEEHIKKKNOPOOPPOPPOONNKKKMKIHEEwtumqquuuuuuuqtswwwssstwyABBAAAAAABBEIMNNNNNMKIEAAyzAyyAEEEEECABHMNOOONMMMMMNOPONNONKIKKIKMMONOPPPPPOOOPOOONNMKMKIHEBAwtpttpoliffcc93|,')]_<1359dfifcfiilllliiiiiilloopwwwwwwwwyyAABBAAAABEIIKKKKKIIIHEHHGEBBACBEHEEIMNMNOOOOOOOOONNMNMKIHEAwtmqquuuutxxqmtwwwtssttwyAAAAAAAABBBEIMNNNNMMKHByzyAAAAEEEBBAACHKMNNNMMMNMMNOPOMNNMKIIKFKMNOOOPPPPOOOOOOOOONNMMMIHEBAwtpppplifcc99953|,')]_<|359900009dfiiiiiiiiiilooptwwwwwwwwwwyywwxxxzzAEEIKKKKIIIIHIIHEBAAzzCABEHKMKIKNNOOOOOOOOOONMKIIByuquuuomnpzyuqquuqmmmmstwyyyyABAAAAABEIMNNNMMKKHEywwwyyAABBBBBBHKMNNMKKNNMMOOOONNMKIKKKKMNOPPPPPPPPOOOOOOOONNNMMMIEAAwtpppplfc99553333|*$@.", "@@#$%&**-''')~(<}357527755799ccffffilloppttttwwttppttwtttutxxxABEEIIKIIIIIIKKIEEBAAAyAABHKMIHIIKMNNNOOOOPPONMKKEEzyyAtrnnrtzxuuuuqmmmmmmswwtwwAAAAAABEHKMNNNMKKKIEAwwyABAyyABEHIKMMMKKKMONNOOOONNMIJIKMMMNOPQQQPPQPPPONOOOOONNMMKIEAywtpppolif955||<<<*%#", "#$%*;>>,,))!~](<|35772447777709cccfiiopptptttttptppppuwwwwwxwyyAEEEHHHIIHHIKKKHEEEEAABBBHMNMIIIIKMMMNOOOPPPPOMMIHEEGEytnlopxxuuxuqmmmmmmmsttuuwAAAAABEHHIKNNMMKKKIEAAABEBAyAEHIKMMKKKKKMNOOPOOOONKIIKMMNNNOPQQQQQPQPPOONNOOONNMMKIHAAwwpppplifc95||<-*%$#", "+#%*>,,~~~~///<|2552243277777090ccgiloppopttttppppppptwyywwwwxxADBFFHHIIIHHIKKIEEEEABEEEHMONMKKIIKKKKNNNOPPPPOOMKEEHHEwprptxuuxzxqmmmmmmmssssstyAAABBEHHHIMNNMKIHHHEBABEEAAAEIKNMMMKKKMMMOPPOOOONKIIKMMNNNNOPQRQQQQPPOOMMNNONNNMKKIEAwwttppoifc953|-*%$#@+", ".+@$=-,)~//<<11555575a7657509099cgfiooolopppppoloppptttwxttuuuuyAEEEEEHHHEEHIIIHEEEBEEEEHIMNMMKKKKIIIKKKNOPPPOOONIHEEEAtpptpuuxyxuqmmmmmmsssssswyABBABEHIIKNNNMKHEEEAwwAAywwAEMNONMKIKMNMNPQPOOPOKIIKMMMNMNOOPQQQQPPPONMKKMMONNNMMIHBywwttpolic953|-%$#+. ", " .@#$*->,!~]<149999909a888999ddcffilollloppooooopptttppprqpuuuuwDEFEEEEEEEGHIKIIIHHEHIIIIIMMMMMKKMKIIKKIKNPPPOOOOMKHEEBwtttpppptsuuqqmmmmpspssutwABEBAAEHIKMNNNMIEACAwwwwwwwyBINOONKIKMNNNOPPOOONMIIIIIKMMNNNOPQQQPPPONMMKKMNNNNMMKIEAywttpplic953|*%$#+. ", " .@#$%-->,)~/<|56596999cdccffggiilooliloppooloptttutpollqrqruquwAEBBDBDDABEIKMMKKKKIKKMMKMNNNMNNMMMKKKKMKMNOOOOOONNMIHAwwwwtpppppnuuqqmmmrssusttyABEEBAABHIKMNNNMHEEEBywwtttwAEMOOOKIIKMNOOPPPPONMKKIIHIMMNNOOPQQQPPOONMKKIKMNNNNMMKHEAwttppoif953|-%$#+. ", " +@#$%-;;'!](_||322565599gfffiiloppolllppplooptwwtpollllprprqquwABAAADDAABEIMNNNMMMKKMMNMNOONNNNNNNMKMMNNMOONMNNONOONMEwtwwwtpppnjnquuqmmsssupuwBCEEHHHAABHIKNNNMKIHHHEAwtuttwBINNMIIIIMNOOOPPPOMMMMIHGHIMNOOOPPPPPPOONMKIIIKMNNNMMKIEBywppooifc53|-%$#+. ", ".+@#$*=;>,!](_<}}|346769099cfiiooppoilpttppoptwwtpplllooprrmqquyBADyDxxyAAEIMNNNNMMMKKMMKMNOONNNNNNMMMOOOOPPOMIIIMNONNKAwwwwupppnjhqqquqqssspuwACBBBEEHEAAEHKKNMMMKIIIIEypopptyEKKIEEHIINOOOOOPONMMMIGEEHKMOOOOOPPPPOONKKKIHIKNNNNMKKHEAwtpollic953<*%$#+. ", ".+@#%=-;',](_<|:|||776599989fiilooliiotwtttptwwttpooooollqrqquuABADxtuxxzAEIMNNNNMKKKMMMIIMNNNNNNNNMNNNOOPPQPOKIEHKNNNMIEBwutwtqnhjjmqquwttpsvwzABAwwyABAABEIKMMMMKIHEHEBwtptwAEEEHEEEHIMNOONNPPNMMKIGCCEFKMNNOOOPPOONNMKKIIHKMNNMMKKIEAwtpollif993|-%$#@..", ".+@#&=;>,)](_<1:}|4114700099filoolffiotttppttttppoopooolnqqvvuxABDxuuuxxxzGKMNNMNNMMKMMMHHKMKIIKKKMMKNNOOPQQQPNKGEEIKMMKKIBxuwxupjhemmqqwwwuvxwtwywtutxAAAABHKMKMMKKHEAABywptwAEHEEHHIIIKNOONNOONMKIHGCCBHIKKMNOOOOOOONMKKKIIIMNNNMMKKEAywpollifc953-%$#+.", ".+#&%;;,]((<<:<||1114770770fioollffgkpppqppooigllooolikilrprruxEBwuxvstwwxzEKNNMKMMMNKIIEHKMKIHEHHHHEHKMNOPQQQPOKHHEEBAAHKMKGCAxuppnqqmmtwwwxtsmquuqmmmmwyyyAEIKKKMMMIEBxqoputyBBAABEKMMNOPONOPOONKIEEEBCGHHIIKMNNNOOOMMMKKKKKKMNNMMMKKEAywpoliifc953,]((_::<|_114470770dflooiifcgmppppqpoiigglmolikjiimmnruwAAxussvvupptyHMNNMKKKKIIHHEIMMKIIIIHEABIKMOOPQPPONKEEEAtuwEIKKKHAutttxuquttxwqqqmquqqmmmmmwywwyEIMKMMMKIHAqmmuuAAAwxwAEIKNPPPOOPPONMIEGGECBHFFIIMNNNNNNMMKMKMMKKKNNNMMMKIEAytpliiifc93|/~),>*$#+.", "+@#&=->){((___<|__14770070cilpliggdflpppppplggggkoolikikjnmmqqwAAxsstunqqpptyEKNMMKIIIHEEEIMNMKIIIIEAAEIMOPPPPOOOMIHEAumotAEKMMHAwwyAAxwwuqqquuqlnnjmhmmmqwwwwyAIMMMMMKKEumlptABywttyAAHMOPPOOPPONKIJECCCEHIIIKKKKMMMMMMMMKKKMKKMONNMMKIHBywpoiiffc953|/),>*%#@.", "+#&&->'!{(((___|__1477770dgimoliiddglloppoigggggkkolikjkkmmnqqtwyzutvoonoppttyEIIKKKIIEEEBEKNMKKKKKIEABIMOPPPOOONMKKKHwolootAIMMHBAABAzAyqqqqnorooonjemmmqqwwwwuAIMMMMNMKApopwBEAwtttyyBINPOOOPPOMIIHGECCEGIIIKIKKKMMKMMMMKKKKKMMNONNMMKHEAytpoiffc953|<~),-%$@+", "+#&*->!{{(((__<_[_1}23246dklopmliddfiilllifc9agkkiollillknqpuuuwxxwunnoookkmqwABBAEHHIHIHHEIMMMKKIIIHEEIKOOPOOONNMKMMKEwpojipyIKKHEBCAyxuuunnlmmmmmkifjjqqpwywwquCIMKMNNMHytpwBIHAtttwyAEMOONNNONKHHHJGBBGEIIKIIIIIIIIMNNMMKKKMMMNOONMMKIHBAwpoiifc955|*$#+", "+#%*>'!{{((::___[_1}34226bkmppoliddciiigifc9a8akmkkollllmprsuuuuxwzxrnnkkkkmmqtwywwyyEHHIIHKMMMMKIHHEEEIKMOOOOONMMMKMMKAwpiiipyGIIIHEAzxxrookkmmqqqmkgjjjqquAyywqwBIKMNONMHAwtBKMHytuwyyEINNKKMMMIJEEEGBCEHHHIIIIIIIIIKMNNNMMMNNNNOONNMMIHEAytplifc995|*&#+", "@#%-''{{({](<:<__:<}3222adjouuqligd9fiddddd9aaakmkglolmomrqpuuuuuuyttqkkmmmmmmtwuqtutuAAEEEKMNMMKIHIHEEEIKKNOOONNMMMMMKIEApfhlpxzEIMICztppmkkfjiloppmkkjjquwAAAyuuyEHMNOONMIBAEMNKBttttwyHKKIKMMKJHEBEEECCEHHHHIIHHIIIKMNNNMNMOOOOOOONNMKIEBywpoifc9953|/~)>-%#+", "@$=;,){(~/]<:<:___:}422269iotwtmig9acgddgdd0788cmkgloooomqqqqsuvuswtwtmmmmkjmmuwuqmmppuwwyABIMMMMKIIHEEEIEIMNONNMMMNMMMKIIAoooopuyEMMJAwqqmjeecbcfopomkgjnwwwAAAuutABHMNOONKIHIMNNHwppptwEIIEHMMIHHEBCBCEEEEHEHIIHHHIIIKMNMMMNOOPOPOOONNKIEEAwtolicc953|<~),;*$@", "#&=>,!~(](/(:<::__<}211179iotxwpmg9a0ggggfd07a8cmkggoooooqrmqquurrtpwtuqmmmmhjuwwuqmmmutuwwxCIKKKKIIEEEEEEIIMKKKIKKMNNMKKKIAttpmmpwHIKHzuomiec9abbfiolkggluuuwyAAtuuyAHMOONMKKKKMMHypqptwEIEEEMNIEBEEAABEGEBEHHIHHHHIIIIIKMMMNNOPPPPOOONMIHEBywpolfc955|))~(]//<;&#", "%*;,){/]/*%", "*;,)~((/::<<<<<_::11211147dipwAAztlgdddccca0008aemkklooputxussuuuuorpkmmqoppptwyAyttpuuuxxxxCEEEBBAABBBAAwAEHEywwwyAEKMMMMMMMNMIBwqmoptAEEyolifca668ciilmmonqqwyAAyxuoptzIKMMMMNONMKBwqotAIEEEHEEEBABBBADEIHEEIIIIIKKKKIIIKKMMKKMNOOOOPONKHEBBAwtpoifc9953|<~)>*", "-,)~/_|<||||1__<}|2|4411470gmtyCBypkgbdfgfdd008bbmmkkonpptywwttusuvookkmmlnoopptwwprolluutuuzEHEEEAzAwtwwwwBHEypppptwBHIIMKKMNNNKGzpooptAEBwpiif9a6aceiinqpnuuxAAAByxtopxEIKMMMNOONMIAwqtyHHEBEEEEEBABEEEHIIHEHKKIIKKMKKIIKKKMKKKMNNOOOOOMIEEAywwtoigc9953|)~/(_||||1||__}|14434}470dkpyzEAzulfhffffgdddabmmmkkorppwyyxwuustprmmmmiikillmptplnjinqqqquAEEBEAwwwptttwAIHAtlilptwyAEIKKMNOONKEwpoolpyEEyplifd866fiioqqpxzAEEEByxwppuAEIMNNNOOONKHAttyHHHBEEEEEByAAEHHIKIHHIIIIKKKKKFIIKKMKKKKKMNOOPONKIEAyywtplid995||/~)>-", "*-,)~/_<|}|||<__:<|2442}}470dlpwABAAtoifcffggdhbbkmmmkgoopuxyzywwuuppummmeefefgkopmkijhijijquyBAAywttuuuppowHIAwpliloppptBEIIMNONMIBwpiiiowEEAtliff98biilotwwAEIKIHEAywptyBEKNNNOOOOMKEywAIKIEHEEEEAAyAEEIIKKKIIIIIIFFKIIHIIIKMMKKKKMNOOPOMKEEyywtpoifc0531,!~/<_|}|___<_<:_<1422}}2770cilpuxwwwtplifggikmmmmomkoloouuwAABAAAwtmkkkbbbcdgmtplggddeijjnpwwvttqmoollllltABAwpoiillfflttyBIKMMKIEAtoffipyEEypliiifiiilpwBIKKKKKKIECwwAEEHKNOOOONNNNKEHKMKEIIHEEBAyyAAEHIIKMIHEEEHIIFFHHHIIKMMKKIKMNOOOONKIHByytpolic054|(~';", "=;,)~/_<|}|<1<<__((<14222227770bhkmoptttupolkgjimmqqqqmkllmmppwAABBBwupkkkbbbbdglpumgddddgkknpxzwwwqlolnlifipyAAAwpolllifioopyBHIKKIEAwpicccmwBBxpllliillootBIMMKKKKHHEAyABEEHKOPPONNNNNIIKMMHEHHEEBAywwyAEIIIKKHFEFFEIIFHIIKKMNNMKIKMNNOOOOMKIHBAwtpolid571_/';", "=;,~/<<||||11<|__::_1}222227777abdgekloptttpqmlimmqpqqqknnnorppwyAABwtpkkkkbbb0glppmgdddggmmmuwAAywtolnllecclwAAAywpoopoiiiiltyABHHHEEAtof57dipyypoiiillllotzHMNKKKKKKEEABBBEEINPPPONONNMIKMKEBEEBBAwwtttwAHIIKKHBBEEEFIIIIIMMOONMMKIKMNOOOONMKHHBAytpoifc96}_!;", ";'!~/<<|||21|1|__:___}}22227777880888bfioopputpoqmmmpqqmomnnrppuwyAzAtpmkgkhcb0dkoqmgdddgkmmmqtAAyywooooif98fotyywwtpopplifciowwtwBEEEByti0730gmutpiiiillilotCKMKIIIKIIEEBBAABEKOPPONMNNMIKKEEDAABAywttpptyEIIIKHEABAFGHIIIKKNOONNNMKKKMNOOOONMIHBAAytpoif952_!-", ";')~/<|1||3114|<1:[_[1}12267000a0aaa66aadfloqutttppommmmprnoopqpwxwyywtpkkkfehddkmqmggggkkkkkmqtwwwpolollic89ilotwwwtqptpoiccippoptyBEBAxqf5347dltwoiiiiliifowEKKHEAEEHHEEAyyAAHMOPONKKIIIIIEBAAyABAwtuuqutAIIIKIHBAzACFHIIKKNNOOOOONKKMOOPOOONMIHBAywtpoif97:);", ";'~/<1|1453442|11::___:[}227000bdaaaaaa6a8cfkmutwxtuqmmmqprnnopptwxxzzwtmmmmheedgmpmkbcfffbbbeipttopllillif99fcipyywtpopmpof9flpoilpwABAAuld3||7dlutoiiiififioyEIJAwwABEHEBywwwAINOPNIEHHHIIEAyAyABAwqprpptyEIIIIHECzAABEGHIKMNNOOOOOONNOPPPPOONKIHBAywttlif5}{'", "'!~<<|347555333311:___1:[}47770008a6aaa66a0adglowwyxuupmpppronpppwxxwywwtmmqjjedgmoojeeehbbbbhfoooooljfiiifccddcowywpilommplccilliilptAAAyuid7|47dmwtoiifffbilwAEEAtppxAEEEAwpwAHKOOOMHCBEIIIBAwwAEEwqmprptwEHHHJHHBzzzzABEEIKNOOOOOPPPONOOOOOONMKIEEAywtpol92[,", "!~(||355055957|211}}__1}[}447787066aaaa8668a0degmuwwxwwuttppqrqppwwwxxywwqqpllidgkmpjffhfb9bhbfiopooofccffcb50ccitAypiglllppiffiiifilptyAAytmf0770itzwpliiifcipwBEypolqtwBHEwppyEKNOONKBABHIIEyywxAEwumpqqtwAEHHEHHECzzzzzCCGKNOONNOPPQPONOOOOOONMKIEEAywtpof7}!", "~/1435990999577314}}1111}44247a76222666a6868ddbkkmquuwwwywttpprrqxxxzxwtwpqqqonggkmqljfeea8bbb8elponifccccc770dcfpywoffiiklpoliififiioqtyAAzwpmd77dmwAwmgiiiffotAAwtoiilpyEIBtotAIMOONMHyABEHHAtwwyBytqppruwAEHHHHHHECzzzzzCCGKNONNNNOOOONONOOOONNMKHEBAAwtpi93:", "~<|7599cddcc099544}22114244477776}22226a66a8ddekkkkmmquwAzywwupqqwwxzyxttwuutlliggmqoiiheb8ba88clpoolibcccc5750dfltwofdfifimpppliffiiimptwAAAyulc0dkuAAwoimoilotwwtplifcipAEIAtpyHKNOONKBwyzEEBxwwwAxwutrpptyEHIIHHHHECCACzCCBHMNNNMKKKMNOONOOONONNMKIEBAywplc|:", "]<|5559ccdfcc9a90772244444477776622222226268ddekkkkkkmmqwAAAywttpwwxzzzytwquuojigkmooljieb8a888ciopoli999cc95|399fowpf9cfdglotwticcfffgouwABEEBwpifipwAAwpppqppwyytpplffeioyHIAttBIMNONNIywAAEAzxtuwwwuwsrpuwBEIIHEEEEGBCCCAABEIMNNMIIHHIKNNNOOONNNMKKHEBywpid3]", ":|35099dfdgbc0d9975224477777787a2222[}22622a00bkkkkkkkmmtwyAAAywtwwvxzzzwuwqtuljkkmmoliifb678889fopliic88c097||59clwwofcfccilqwwofcfiiiotAAEEHHEApliipwAAyttttpwAytpppliccipAIIytyHMNOONMEwyAEBAwwwzwxuytprptyBEHIEEEEEEBAAzAABHKMNKHHHEEGIMNNONNMNMMKKIEBypli5:", "}6599ccfffgfc0dd9706657777777776222}1}16666800bkkkkkkkmmpputAAAAyAwwxzzyytuquuoojkmmooiihc666888elpllic9999951|45clwywpif99cgipwwlfiopootyAABEHHEwpiiiowAAytututyytolopoiiiltHKHzwEKNOOONKAwAEEAyyAzwtuwwtrrpwABEEEEEEHEBAzAzABEEMOMIEEEBGGKMNONNMKKKKIHHEAwpic4", "|609cgiiiliiecdd0000675777708066266}2226a66800bkkkkkkkmmqpuqwwAAABAzzxywyttqquppoklmqoljheaa68aabjplllic99055|||5fotyAwoi9599glwBypopppoptwyyAEEEAtmifglwAAtpqptwAwlcfiooifflwIIEABKNOOOONIAABEEwyyAwuuwywpppswzAEEEBEEHEAzyzzAAEKNNKEFEBCCIKMNNNMMKKKHHEEAtoib5", "_}599fgiklliifgd9c006665500cb0aa6a4242228aa8dehkkkkkkkkprqrsstwyACBAAzzvxxttquxppmmoppojifb666aabfolloic99575|1|5iptyAtoic509clwEEypoppplotwwyAEEAwplf99itzypompwAwofcfqoliffoAIIEAHNOOOPOMHABHHBvxwuuutxwtppptwwAEEEBEHECyyvwwzBHMMMIEECCCHIKMMNNMMKIIIHBAwpi81", "_|290cggiiiiifdcdc90d0899bcfdgc9807a666a8a8bghemkkkkkkkrrrqpuuutwBEEEEAzvxtwquxttpmppppniee866a88elllllf997553115iptwAtliiccfilpAEAwpoppootwAAABEBAyulf99iwzwpllpyAtf9ioolkdfipAEByBKOOPPPOMHBHKHytwtuquttwtqqtwwyAEEBBEHEAytwwyAEIIKIEECCGIIKMMMMMMMMIIHEAwpj82", "}478dcggfiiiifdchd00d09cdfffggeff9b99999fccfhjmmmmmmkkkprrrpruptyAAGEHEzxwttquutttqqttpojfeb668a8ciillif885553335fpwABApoooliigipyAAtooppopyEEEEBEBAwpf979iuxulgipyti9ciolffcdipABAwENOOPPONMIHKKBwppuqqutuqmmpswwyBBEBEEHEwxwwwyzABHHEEEEHKMNNMMMMMKKKIEEAwpj9}", "[458ccfgiiiliifhfffdggcfffiigffffcc9dcccffhimnqqmmmmmmprqrrrrrqqwvzCGIIECzwttquupttttxwplfehb6a88bfllliic885557339lwABEAwwtoic9fotwwwpoppptAHIEBAAAzwpg5413guuogditwlc9cillfc0cipyAyAINOOPOONKIKKIAtppopttupqmmqqwyABDBBEHEzxxwyuxzAAEEEHHIKNOONMMMMKKIIHHBwpj8}", "[659cffiiilllikiiiigkkfffiiigc9cc8956aa9bfgimouuqqqqmmpprpprrrrrxxzzBIKHGAzttqqupptuwwwtnifhbb6a8aclloiic9959994}6ftwAEIHAticccfloppxwtpptwyEHEyxwwwwpk0|<_4gqpicfpwticcktttld9dltAAAEKNOOOONMKIKIEwttppppptqmmmquuyABABEEEByxxzuxyzzAABHHIIMNONNNNNMKKKHHBwulb}", "}6addfgiillolllmlilikikffffdd96622|2327689ahknqquuuuqttutrrrrprtvwxzAEIHHEAttuqquppuxAzypjfhbbb888bioollfc909954[3cpwAHKHyof9cccfilotAAtpwwwAEEAwwpppqmd4_/<9kqofcmyApifoAAAwof9iqwBAAHMOOOONMKIHKHAwuttttttpolmquuuwABAABEEAywsuxxyxwAAFEGHKMNNNOONNMKKKIEAtqc6", "669ddfiilmmpooollilffffg9bc0d056}}:}[}2}a68dhhmnmqpswwwwtttuprrvvxxAEDEEGGEBwtmqqopstABCyoifbbbb88bfllollfcfd95333cpAEIHBtlfccc9ciiopyAAwtttwBEEAwpoomif5|<_49mqkfiwytiipAAAAtlfcfpwBABKNOOONMKIHIIBwwwtutwwwtooouttuxBBABEEEAuuuuxzxuyyyCBGKKMNNOOONNMKIIEAtqh6", "6abfiikllmpqppomlmiigffgf9906622}}[[::[}66addbkmmmmtttxvwwwttuwvvxxzBFEEBCEEAwqmqqnotyEIEwmhbbbb888cipopoiff995756cpEHEytpliif959clpptAEAwttyEEEAwpmkmmg93<<<|9mmgfmwwoiotwttwplccfqyAyBKNOOONKHHHIHAwtpttwyywttppttuxAEEEEEEExxxxxzzxywwAzCEIKMNNNNNNMKIIHEzrk8", "6bhilllomppppppmllilgggig997a222}}}_[[:[22adbbkkkkrrquttwwwwvyxvxxyDBEFEBzCEAAwqqqooptBIICtlgbbaba8biooptofcb90799ftEEypopplifc55cloptyEHyttyBEywpoomlmld7|_((|dolcfqupllliilptpicfipyyyEMOOONKIEEHIEwtppptwwwwwwyywwyzEEEEEHBAzxxxzzyxywAAzCHIMMNMNNMMKKIHEzxk8", "8bjilooopppppppmloiifgkkica76222}}2}}[[[2280bkkkrrqrrrrpttwwzzzyzxzDDEFEEzzAEBAuqqqoppxEKHymkggbdb88fltttof990900flwBAtiiopoifc569iotwwEIEwtwyAtpooomopplc51_(/3goicippliiiflpttpfciowAyAIMOOOMIBABIIBwoilpttttyAEEBAACEIHHEHBBAxwyzzAyAyAzzCFIKMMKMMMMMMMIHBxnd", "dhinommppqppprrmloiigggkkf00a222}}22}}[22280bkkppprrrrvqrqvxzAACzAEEFEEFDzzzAAByuqqnprtAHIBtmgggbbb8cltwtpiccc90cipwywpfcippifc959fopwwAHKBwtwwplmllmoptpod7|>>->!<1<(_||||/~/4cilkggiddfoxAtpic7||3fpAEIKMMKMKIAwyHKMNMMKIBAywoilpwwwtpotAHKKNNKHBABBAxwuwACEIKKMMKKKMNNNOOPPO", "OOLNNNNNLKIIEDDzxxwtwwwuuqqqqnigggggggeemmrrvvvwxxzzDFFFIIMMMNOOOPPPONLHFDzvvprmmmqquuqmmmqwyAIIKKIBypof997735illooliiiloptpptttppwwof5|(~~),>>-=='!<_{)///~~,,{3gklkgiigfotyytpi95335fpwBIKIIKKIBwyEKMNMMKKIIHEyplloptwywyBKNNNNNKIEEEEzuwwzCGGKKKKIIIMLMNOOPPP", "POOOOOOMMJIJEEDzzwywwwwqqqmmmjhjhggggiijmmtsvvvvzzzDDFFHHLLMMOOOOQQQOOLIFCzvpsmmmmmjnuuqmmmtwAHHIHEEztpic99542cllopoiiiiilpppppollptof3<())))'>;=&*>~<~,)~~)),>,~5ilkiliiiopuyywpf95599kowEIIHHIIEwwAIKMNNMKIKMMIAtolllpwAyEKNNMNNMKKIKIEzAwwCBEHIKKKIILLLMNOPPP", "POOOOOONKLLHFFDzzyAwwttmmmmmmmeeedgghjjmmsswxyzzzzzEFHFIIKMMOOOOQQQPONLIEzzvppmmmmejjnruqmmtuyBHIEHEBwpofc95439iopttpolliiopolliffilli5|~),,'-*==%%;~11(~//~)~),);**=-,)),)~<<~~/<<<|<))<5fluqqoommuxAyticcf9335itEKIIKKIAttyHIHHHHHIKMNOOMBwoliowBHKOOOOMIHIIMNMKIHIIHHIKKKKMMMNOOPQR", "RQPPOONLLLIFFFECCyvtsrrmmmmmmrmmmmmmmmmpssvvvvvzzAEFFIILLLMOOOPPPPQOOLKFECAwwqqjjjjjjjjnpxuqqwyBHEEEEEEAtpic0975cipwwwtplililllllif99flf3~,>***-,),-*-)~~),)~~~~)>)<3clqqmmikmtyytlfffc5|39lAIIIIKKIAtwEIIHEEEEHKMOONMEwpoptABEMNOOOKHIHIMMIIHKMMKKMMMMNNNNOPPQR", "RQQOOONLLIFFFGCzyxvsrrrmmmmmmmrmmmmmmmmrrvvvwvzzzzFFFIKKKLOOOOPPQPPOOLIFCAzwuqqjjjggggjjnuuuqwyAEBCBBEEAytof009669ipttplifiioloolid3}5fi9/)>*&*-->*#@#*>,>-->,',,>>)/|dlqqmkggmtxuiccffc559itEIIIIKKHytyEIIHHHHEHKMNNMIEywwyBEEIKMNMKIHIIKMKIHHMMMMOOOOPPPPPQQQR", "RQPOOOMLLIFHFECzvvvssssmmmmmmmssmmmmmsssvvvvvxzzzCFFIILLLMOOOPPPQPPOMMFFzyzxuuljjggggggjjjuuuqwABEAAyABAwtpi0097269lppoifffiliilii93:<5ff|~,-=***%#+.+@%--*%-),,,---,{|foqqmkgkqtul959fif99fpEKKKKKKKEwwBEIIIKKIHHIKKMMKEBEBEIKIMKKKKIHEIIKKIHHKMMMNOOPQQQQQQQRR", "RQOOOOLLLKFFEzzxvvvssssmmmmmmmssssssssssvvvvvvzzzCFFILLLLOOOOPPPQPOOLLFFzvstqqllkgggddgdehquuuwyAAxzyyzAwwplf777225foolifffifccili93::|9ic|{>-%%%$+. .@%-*%*,),,>-%*>~3gquqmmikuupc3|3cg95coAIMMIKKKIEABEIIIKKKHEBEHIKMIEHEIMNMNNKKIHEEEHIKIEEEKKKIKNOOPQQPQQQR", "RQOOOOLLKFIHBzzvvvvsrrrmmmmmmmrrrrrrrrrrrvvvvvzzzCDFHLLLMNNOOPPQQPONLLFDzvspmmjjkkggddddhehqquuyAyuxzwxywwpoi9576329ioliffffc99cfi953}<3fl9<,>%#$#+. .#**%%-)),,>%$*,_0kqqqmkkqupi1(/|0c59itEKMKIIIHHEEIIIIHIIHBwwAAEIHEEEKNNNOOONMKHEBEIKIGEAAHEGHFKMMOOOPPQR", "RQPOONMLKKIHzzvvvvsssrrmmmmmmmmrrrrrrrrrrvvvvvzzzCDFHLLLNNNOPPPQQPONLHFCzvrrmmjjkkkggddddeejquuuAyuuxwwyAwwpof950059iooifcifd098b0c955|<5ff3~>*###@+....@%*%%%>,,,,-%%-)_cmquqmkkuuo9<)~|9550iwEKKIIIHHEEIIKIHEEEBwwAwABEBBEIKKMOOOOONKHEEHKMIBBAEEEGEFKMNOOPPPR", "RPPOONMMKKHEzzvvvsssssrmmmmmmmmmrrrrrrrrrrvvvvxxzDDFHLLMNNOOPPQQQPONLHFCzvrmmmedggkkkggddeeemquxxAxqutwwywwpolf00cdcciiiccffc988799dc9|(/|99<,-%#@@#@+++@$**%%*>>,,,-%*>~3gmqumkkmuul3/!/35379iwEIIHEEEBBEHIHEEBBBAAAAyAAAAAABEHMNOOOONKIHIKNNKEHEIIIHKMNNOOOPPQ", "QPPOOMNNKLFEzzvvvsssssrmmmmmmmmmhrrrrrrrrrvvvvxxzDDFHLLMNNOPPPQQQPONLHFzzvrmmeeddggffkggddeemmuxyxwqqxtwwywwpoif99cd999cccfff99599ccc9|(!)|95/>*$@#$$##@#$*-*%%*->>,,>->)/0kmqqkgluuuf1!)_7||39lAHHEEAwwtyABEBAyAAAABBywyyAywAABEKNNNNMKIIIIMONMKKIKKIIMMNNOOOPP", "PPPOONNNMFFCzzvvssssssmmmmmhhmmmmmrrrrrrrrrvvvxxzDDFHLLNNOOPPQQQPPONLHFzzvrmmeeddddbhhkgggeeemqtAyutqqpwxzwwpoif9500d079cffiicc99955553_),~393)-%##%*--%%%->>-%%*->>)~)>,~|fmqumkkquxm7{)(3|<13ctBEEByppttwyyytolpwyAAwtppwwwyAAAEKKKKKHEEEEHKMKHHHIIEEHIKKMMNOP", "PPPPONNMKIFCzxvvssssmmmmmmmmmmmmmmmmrrrrrrrvvvxxzDFHLLMNNOPPPQQQPPONLHDzzvrmmeeddddbbbgkkgjeemmuzAuqmqupwxwwwpif9569d0779fillif992||333|/),~39|,-%%*>,>-**>)),-%%*->)/~,,)/7imuqkmmuxug<){|3<_19mAEEEypoptwtttpidfltyAwpoioppttwwAHIHHHBAAAyBEHEzyAAEBCCEEFIKLNO", "PPPPPONMKHHzzvvxsssmmmmmmmmmmmmmmmmmmmrrrrqvvvxxzDFHLLNNOOPPQQQQPPONLHDzzvrmmeedddd88bbgkkgjeemqwzxqtmquttwwwwofc645d07|5coppof92|:::|||<~,,~35<,-->,>>-*%-,~~,-%%*->)~,>,~),->)~3gquqmqqtuqc_~{|4<~/5lAEEByoilpppppoicclwAwtollloomrqqwBBABAwswwyAEEBxuwwyAzzzEFFLLO", "OOOOOONMKHECzAyttsmmmmmmmmmmmkkkkkkhmmmmrrrrvvxxzDFHLLNOOPPQQQQQPONMLHDzzvrrmmeedddd88dddgknjjjquxxxuqmmqptuwwwpic8a634439iptof9221<**,)(9kuqmmqpuuo7/(<|1{{<5pBEBAtiiotpopppi9ftAAytoolooqqmqtyyyAAtpsttwABAyuqtxzzzzCEHILM", "ONNOOONMLIGCzzztusmmmmmmmmmhmkkkkkkkkhmmrrrruvxvzDFHLLNOOPPQQQQQPONMLHDzzvrrmmeeddddddddddgjjjjquxuuuqmmquutxwwtpica666859cilof959553<(//<<<~))/|33<)*#+....+*~//,-%*->,-*>)~|fqumopuuuuk3_/<|/){_fyBCBypfgoolopqoifowBAwppqppttppwAywwyupoooqtAAwxuqtwxwzADFFIL", "LLNNOONMKFGCCzAttsmmmmmmhmmkeebbbkkkkkkmmrrrvvxxzDFHLMNOPPQQQQQQPONMLHDzzvrrmmeeeddddddddddjjjlouxuquuqmmqotuxwwtpfa6aa9cc99ciic9cff93|(~~/--,)(9kqqomquuuqc|((__~)<5oABCAwmcfigkooppllpyEAwwttuuwwyAywtwytlinllpxywxuqtxzwwzCBFFL", "LLNNOONMKIGCCAztutmmmmmmhmmeebbbbbbkkkkhmrrrvvxxzDFEJKMNPPPQQQQPPONMLHFCzvrrmmmeeddddddddddeejnopxuqquuqmmqptuxwttofc9ccc9575cffffiic731/))~~/~/<|59<-$@. ...#>~<~,**->,,->,~|gmqmmquuuuk5<~/_({(5fpABAAtg9ccglmptpoouAABByyyyAEEAAwtwAwojjiiouwwsuqrtwxwxzABFI", "ILLNNNNMLFGCCzztttmmmmmeeeeeebbbbbbbkkkkkrrrvvvxzDEJJMMNPPPPQQQPPONMLHFzzvvrrmmeeeddddddddeeeejoptuqqqqqqmquutuwwttplie98655379cfilic541<~),,)~<<<39|,%#@.. .+%,~/~--*>,,>>>!/9kqqmmtuuuqc|/~///(49iwAAAypc90dioppwpolpwEEEEEBEHEBAytwAyplliinuwxtpqqttyxxzzAFF", "FILMNNMKFIHCCAzuttmmmmeeeeeeebbbbbbbbkkkkkrrvvxxDDEJJMMNPPPPPPQPPONMLHFDzvvrrmmmeeeedddddeeeeejnptxuqmqqqqmquttutwwwtlf866444426cilic5||>)~~<3|~-%$#@...+#-)~),---,,,>,)~|gmqolquuuuk7_((///<7ftyAyyti059floqppogioyEHIHEEHEBAyttwypooihjpttwpqqqtuzxyzDzF", "FHKMLLMKKHHCzzAtttmmmmeeeeeeebbbbbbbbbhkkkrrvvxxDDEJJMNOOOPPPPPPPONMLHFDxvvrrrmmmeeeeeeeeeeeeeejotpuqqqqqqmmqutwwyBBypc662|11[}}3clic54<<<~'-**--,~||~,>--*$+++#*,)),,;-,,))))~{5kpmllquuuq0|<(((~/3gpyAywwpf70fiiiioplcfpyEIIEHHEBAwolptpookfeotttsommqtxxyxAzz", "zFIKMLLKKIHCzzvtttqmmmheeeeeebbbbbbbbbkkkkrrvvxxDDEJJMNOOOOPPPPPPONMLHFDzxvvrrmmmmmeeeeeeeeeeeejoppouqqqqqqmquxwxABAypf96221__[:<3fif93|*%%%-~||/))),>*%#+@%>)),>,>,,)//~~~,,>,)/<-%%%>))>>,>,)~/%##$-))~//~/<|*-)~,>>>,)~{/<(~(7kmmfgmquuqi9995<{)|fpyAyppqpppof059cittrififiopttpiiptpllljifisttqomljmmrnqms", "stzCCIIKIIHGzzyxuvmmmmjeeeddddddadadbbbkkhrrvvxxADJJMMNNNOOOOOOOONMMMLLHFDAxxvvvrrrrmmmmmmmmmmmmquqmmmmqqloppppttttsqolpli86|_^[/~~(~~<5953<~),-$##%-->)~~<39c93/)>,),>->,~/<<||(~|gmmgckpquuog9997<~/5ityywpoppolic76acottpf9889fiiilouwtooleiiiottppjjhnmqrnmm", "mtwCCGJIHFIFAzyvussmmmhjhedddddddadabbbkkkrrwvvzDEIIMNNNNNOOOOOOONNMKLLHFFDzxxvvvvrrrrrrmmmmmmmmquqmmmmjjlopttpnopttqmlloic84<^]{~~{{))<|55|/~),*$#%*%%*>)<3cff93<~)),>-->~/|353<~*%%*$##%>~|355955|>)/|3|/~)>**-%@+#*,///<39fc9|,~<|<~~),>>-$@@%>,,)/|9fiif93/>$$-/9ili5||0gmmg7dkquumg517c7;--->,~///~~)),%#@$*--,~<359cili9/-%%,|ioli515gmqk75gmquqmd1|5c3/{/3iwAytlgf9566862259dflptwwwwywtpicbc999fnppooihdeheheb", "bgnrxzBCGGCBBzzvvvsrmmmmeeeeeeedddddbbbkmmrvvxxDDFIIIIMMMMMMNNNOONNNNMMMKJJLLFHFFDDDzzxxxxvvvvstwywmmmmquonjjjnmmkgkmqunjefd967}3|1/{';-*--**;>)/////~>%#%***,~|||||3cooc/-*-~9lpoi59giqmg40mmppqi3<|00|{~19pyAytif9566762223099dimopppppolfcc988biooolihhhbgbab", "bbkrszzzCCBBBBzvvvvrrmmkheeeeeeddddbbbemmrrvvxxDDIJJJJIIMMMMMMNNONNNNNMMMMJJLLLHHFFFDDDzxxxxvvvyyywummqquujeehjmmmkkkqppoieb963|253|_{';**-*&%*-,~<<||~>%*-->)/<33|)3lppof9fkqpi77fmqpumc|<5d3_/<5itAAypid76266|}1|1|4509d9cdgklkiif9669flomligbhbbhb8", "6ejmqxzzzCCBBDzvxvvrrrkkhheeeeeeddbbbbkmmqrvvvzDEJIJJJJJIMMMMMMNNNNNNNNNMMMMKLLLLKHHFFFDDzzxxxvyBAwtsqquuqheeedgmmmkkipppmiida31}55531/)>--*=%&%*-~<35|~>>,,)~/|5995|/|9fc|~))|iptpidflqqmd7dkouuum9|7dc3<~|dowAAwoi9311||1__(__37777750ciillf9268cjlollihcabaa8", "8bjnquwzzzCADBDzxvvvrrkkkhheeeeeeeebbemmmprvsxDDEJJJJJHJJIIMMMMMNNNNNNNNNNMMMMMLLLLLHHHFFDDzzxzyBEAtuwuuqjheeeddgmmmjjmpplllifc32359993<~,>-=***%*>)|99|~)~/<<|59fff9|<|59|~))-=*&%%%%>)|c9|<|335cfc9cfic5|373~,>~3pwwtpllqqpmicgkquuuof0cif9=%$####%%,|95559cfllifffilf9355<,--)9ptwtppuutpmgilqquuulddiif5<_|0qwAytplf91^]^^^[::(]]!{!{{(159a2}26abfgiiigbaaa22", "}68hnouxxyzzCADDAuuvvsrrrkkhhhhheeeekmmmrrvvvzDDEJJJJJHJJHJJIMMMMMMNOOOOOOOOOOOONNONNNNLLLLHFFFCCHIHEAqmmeeedddddgklooompppomiiid56359cfc9|<~,=%$####%>/||9flpttpoollllf5593/>*-~9opttuuxxwumikmmqqpplfioic3<<4ipyyytog92[{!!^^]::^]!!!{{(|462}}228cffiiifc9aa2}", "}6ablnrtxzyzCABADxuuvvvrrrkkhhhhhmmmkmmrrrvxxDDEJHDEDEEHJJHJJMMMMMMNNOOOOOPOOOOOPPOOOONNNLLLHFFECIIIAwmmmeeeddddggkinonmptwwttptpigfccfiifcc5|/)>*%%%$*,))/5lwyywttttpoid955|~>-,<9iotutxzywtmmmmmqqpploqof951|9lwyywoi93[^^!!!^](^]]^{{(_1||2}2268bffkgigc0082}", "}28bhnqsxzxzzCADDyxuuvsrrrrkkhhhhmmmmmmrquvxxDDEEEEEEEEEJJJHJIMMMMMNOOOOOPPPPPPPOPPPPOOONNLKHFFFCJIHztmmmeeeddgggggeiopptABAAywttpllc99cccffc03<~))>>->,),,/9oyAAyyAywtpli953<)>,/39copqtxxzxuomqqmmqqopqplg9547fpwAytlc6}:^^!!!]]^]^(____||<}22270dfiiiifc9071}", "}2aahjpqpwxzzCABAyyxvuvvrrrrrrhhmmmmmmrprvuxxDDEEEEEEEEEEJJJHJKMMMMNOOOOPPPQQQQQQPPPPPOONNMLKHFFEGEBtsmmmeeedgggggghlpttwAEEAwpptolic57555555953,~~<3copttofflpABEEAywpi933999fpwuuyAAyuppqppqppuwyywoigfdflwEEEAwoic93<<:[::::<__11|23559ccfilifdc954_(", "{}47bhhjnruuwxACCAzADvwuvvvvvvvrvvvqsvvvvxzDDDDBDDDDDDDDDEDEJJJIKKMMOOOPPPPPQQQQQQPPPPPPPOONLLIFFFzzvvpmmqjjgkmpqpqmlnlollilpwwpifgd52_~!!,,>;>--->,)),,,))~<5fqttogccfltAEEBAypic99fiiptwuwzAzxpqpuqqppppwywpiffifgpAHHEAwoif954}|}<<<|1_|__}|3659cfgiiffc951_(", "{_47ahhjmnrpsxwACCzAAyvwuvuuvvvvvvvvvvvvvxzDDDDDDDDDDDDDDDEDJJJIKKMMOOOPPPPOOOOPPPPPPPPPPOONNLKIFFAzvvsuqqjjoqppqmmmmiiiiifhipwtlfdd961(!!';;=*&%&%*->>,,)~)~|clppofc99cfpwABBAytlfcfllltwwxzCzyuqpputpppptyywojfifcitBHHEAplfc953}:<<__<_<<}123559cfiiifgc95}_{", "{(120hhhjnrrstxvAzCAADyvvtvuxxvvvuuvvvvvvzDDEDADDDDDDDDDDDEEJJJJKKMMNOOOOOOOOOOOOOOOPPPPPPOONKLHFECzvvstqqqppqqqmmmmkeeehhebhlttoifdd94_{!'>;-*&$$$$$$%*-,~~/|ciopi953359fptwAAyytoilpolpwyyCGCzwtputppppoqwyywmmlifflwEHHBypiffc93|}:<_||||2355599cfiifgff92:^{", "![1700hejnnrrstvzAACAzADvywzxxxxvvuvvvxxzzBDEDDDDDzzDDDDDDDEEJJJKKMMNOOOONONNNNNNOOOPPPPPOOONNKLHFEzzytuqquttqqmmmkkggbbbfebbfottlgdd56_~!'';=**&$$$#####%>)/|clpoi5|<<<|9iptwwwtollottttyAABEHEAwtttupmqpptyAytoiiffipAEHHEAtoiikf953|1||4355555cccffiigfd52[^!", "!(1400behjnrrstvyyzAAzAADADDAzxxxxwxxxxxADDEDDDzzzxzzyDDDDDDEJJJKKKMNONMMMNNMMMMMNNNOOOOOOOONNLLHFECzzvtwuxtpmmmmkggggdbbbhbbafopoid055_/!'';;*%&%$$##@@@@%->/5lppi9|/~)~<5ipwwwti9cipwwwyABEHIIGAywwwuopxwwyAAyumifilotBEHHEEypppolf905755599090cccfifffc96}[^!", "!^_270deejnnrrssvyyAzAAAADADAAzxxxxxxxzzBDFDDDzzzxwxxzyDDDDEEJJJIKKMMMMMLMMMMMMMMMMMNNOOOOOOONMLLHFFzyywyxxppomkkgggddddbbehbabipolfd071_{'';;%&%&$####@+@#$%>|gifc93<),,)/3itzAtg3|5foppotyBJKKHEEAAzywACEEEBBBAtooppttyBEHHHEBAAwtppoliiffcc95559cd990962}[^!", "!]_1700deejjnrrssvwyAAACGGACBDADAzzzzADBFDDDzzxxxxxxxxxyDDDDEIJJIKMMLMMKJJJJJJEEJIJJLLLNNLLNOOOMLKFFCCBEAAuunjjgddddeedddddbhhbbflligd541({!';;%&$$####@@@@#$$*!59953|<~~~~~<5itxxtf430floiitxAEJEEBAAAAtwAEEEBBBAytpoopptABEEEEEBAwtpoolifffc9955550d050762}[^!", "!]_17709eejjnnrqsvwvDAAzCGGGGBBDDADDDADFBDDzzzxxxxxxxxxzDDDDEIJJJKLMMKIJJJEEEDDDDEEHILLMNNLNNNNNLLIHFCEEAyuqqjjedddeeeeeddddgfehbiiiid061/{!''-=%&%$$####@@@#$%'|95;%&$$&$$$##@##$%;_57_!>-=-,)~/<3ftxBAuifiomigipwABGBzwtttmfimwyywtppoic5590cipwwwwywttoiifdc957590cfiifc9d95|[[]!", "!^^1470abeehhnhqqsxDvAAAzCGGHJEEBDDDDBDADzxxzzzxxxxxxxxxzDDDEEJIJMIJIIEEDDDDzzxyzAzDDEFHKKNNNNNNMMMKIIGCAxummmeeeeeeemmeeeedggkkeciiid999|>,,)/3iwACAwptttpoiluyBECywtppmg0dipuupmomkc953459iutttttttpoliigc9009cffffcccc9531[^!", "]]_177a0behhhhhmqsxDvyADzGGHHJHEEBDDDDDAAxxxxzvvvvuxxxxxzDDDEEJJIJJIJEEDDDzxxxvxxxvxzDFHHLLMNNNNOMMKKICCAtummmmeeeeemmmmmeeejgkkkehffd99971({!'';&%&$$$%$###$&&&,|77(;*-,,;--;;)|fwABAwwyAywpmpxAEEAxwtpok05cimliiiiigc05337doutpptttttpppoifcccccc99599905531:]", ":}|45799aeehhhhmqvuyDyAACBHJHGGGEEEDDADzzxxxxvvvvvuvxxxxzDDDEFJJJJJJEDDDzxvxvsvvsvvvvzCDFHLLMNNOOLMMLIECyyusmmmmeeemmmmmmmhjhjnmmhccffd5903_({!,;***$%&&$$$#$%**>/77<,;,{,*%%%%*>|iwAAtptyAAywtwCGJCzzwtpog59fkkkgikgfffc959cipttppppttpppplifd9995537535433||1}", "}35509dbeehhhhhmqvuyDDyDCEHGHGGEEEBDDAzxxxxxvvvvvvvuxxxxzDDDDEJJJJFEDDDzvxvvvvvvvsvvxzzzDFHLKMOOONNNKIEzvvspmmmmmmmmmmmmmmqqqnnomlfdgfd06873<{!',;**&%%&&$$$%%---)104),~_!*$$&$$*,|owAwlltyCBAwyACJJEzAwwtoc0dkmqmiiiffkifcccfmptwtpolooppolifcc955333|||1<__<<}", ":}79ccffjjhhhhhmqvuxyDDBEEEGGBEEEAADDzxxxxxvvvvvvvvvuxxxxDDDDEIJJEEDDDxxxvvvrrrrrrrrvwwzzDFHKKNOOONNMIFzzvrrrmmmmmmmmmtwwqqssuuppolicfd02505|_{'';--*=%%&&&%%=;;-,<75()~<_'=%$$$%*{5pwxofityAAyzAAGHEAAAwtui75gquumkkfccffgcd0diopppliiilooliiffc95531_<>{45<~~(||~>=&**%>{9pxtifowyyyyyABEEAyzwtum0|5gquqggd73570d0579fiilllilloolliifc995|1|>!|7|/~~_33(),>-%=;/cuuiffotxwxxzBGGzwxwttti415iomdd051<14507770ddgfiilolollliiic953||<_{~)!'';", ";'^[400eejllqmruquuxyzBAAABDADDAADwuuvvvvvuuvvvvvvvvvuxxxzDDBDEDDDDzxxvvrrrmmkkhhmmmmmptvvzzFFIMNOOMMIFDzzvvspstqqqwwwwABEEBAAxxxupoffiikccgc541_)'-;--;>=%%*=;'>>,/44_~!{390|<{>;=*,|lpofciuwutwzABGBxttuutp9<<39c90901_(_|3777590099cfilllooooolif953|<(~~)';;", ";'{[}0bbehjjnnquuuxxzzBDADDDAyDDxuvuuuvsvvvuuvvvvvvvvvxxxxADBDDDDDzxxsvrrrmmkkeeeeemmmmspwvzzFIKNNOMMIFFzzvvwstwwwwwuuyABEHBBAAxwtpooiiiliiiif997,,,>*%%&=;>>'{451~~/7mpi9|)>**>(9opkdfpwtutwyAEGAuppptuo5,!|7|/~|dqtpoc|!;->{3kppfciutttxwzAEBypooptug4{~_47007|_({(_1359000077670cfiiffffffffcc93|/),'", "){{<}20beejnjjmqvuuzCCCDBBDAyxtvuuuvvrvvurrrrvvqsvvvvvuxxzzDDBDDyxxxvvrrmmkeeeebdddeeemmmptyyzEIFKMKKHFFEzzzyzwutttwxABEIIHEECywqlkllicfkmiiiigccc95|!<9ouodfotwwxxwyCEAwpommpqf|~/<3555|_{{!{<|35999d97243230995595555599995|/~", "|||||60dejnnnmmmquuxzzzCDDAzxuvuuvrvvvvnnrqrrrvvssvvvvvxxxyDDDDzxxxvvrrhhmkeebbbbddddeeemmttyAEEHIIKLLHHFAzzzAyststwCEHJIJGCAzAwqqomloiffilkifgc9553|-*&&%%*-'~|3<~<3dlf09d9|~!!~|dpukciptwxxwwzCCywpmioppc|<_|1353_]~)){_|359cdd06||2122|3||||<||||459553", "59999d9dfhjnnnqqquwwzzAAADzxuuuurvqqqqnnnnmrrrvvvsqvvvvxxxzzDDzxxxvuvrrhhheedbbbbbddddeeemmstzCEEFFLLLHFFCzCzAvvwvzCEHHHGECzzzzAwqomolifffkifdfd0743|;=%%*->!/4|~/<507||499|{!)(3mtpfdltwwxuwxzCAwtpiiopm91____471(~]))~/<159dgd967321|||<<<_((/(((<<|33", "<39fiiiilljnnrqruuxxzxywyxxvvuuvsvrvnnnnnnnrrrrvvqqvvvvxxxxyDzxxxvvurrkhheeddbb88888dddeeemqxyBCCBDHHHHFFFCCzyxxyzBEHEGCEFBzzzvAwqomlilfc9dggddfd0333|-;'')<|/~/|4|7d03354<{~_5muukdiqutuutxyzwtpollqupf3", "->)<|5clopttttppqvxuxwxuuvvvvqvqrornnnnnnnnnrrrvvvqqvvvsxxvvxxxxvvvqqmkkeeddd8886666888ddhjquuywywxDFEEFHFEzzzvABEHEBCCzCFFFBzzCAwqnkhb9aa3589575093|||||||||<<~~)',))/||~~|449mqf5573_/_4gtwpgflpututuxyxupomlqppoc|<<|75|/)'>>''''~_|0900765342||||<_/~~)),>;=", "=>'~_25dioptwwvwuutuuuuuvvqqqrrnnjlnnnnkkhhknrrrvvvqvvvsxxxvvxxssvrrqmmkeedd888666666688dgjnuusstwxxDDEHHFDCzzzGEHHGCCzCHFFFFCCCAxqqkhab9644307||774_//<_|||3||///({{{/|4>'>'!{_3a9006332}<<<_<<<>-=", "=>,](<|7cfiostywyxxwxxussqqqqnjnjjjjghhkkkkkkrqrqvvqvvvvsxxvvxxvsvrrmmmeeddd886666666668bggopwuqurvxzDEFEFDEAzCGHHHGCCBCFFFIFFBCzzwqjkhb88634704|4751~~~~~/<|33||<>')/:77657633|}__<(<<<-*", "->,)/<|35bginpswwyzxxztvuvqqjjjjjjhhghhhkkhmmmrrrrqvvvvvsxxxvvvvvrrrmmmeedd8886666666666bbgmppummpvvxzACFDDDCCCGHGGCCzCFFFKFFHEECAwsnkie999535873|703_)),)))/_1333-", "-'']/<|25dcfinnpttwxxzzxusvnnnjjjhhghgghkhhhmnrrqrrrvvvvvvuuxvvvvrrrmmmeedd886666666666a8bhmqpommhrvvzzzzzDFHHHGGCCzzCEFFFKKIFIIGEAwxtqijfd0539d73799|~),,,,),{_|53,'!{_|22322|4|__//{),,>>>>>-", "*>'~_<|279cfijjoppqsxxzzwwsnnjjghgghhgghkkmnnnutpsurvvvvuvvuvvvvrrrmmmeeedd886666666666688ilomnjmmppvzzzzzAFIIIECzzzBEIIIFKMMMMNNMMKIBzytpolgccfd97905<~,'>,,>'')<||<<<|0iic00dfiikmtpi9900imuxwpfcgkmptqqqqupoi539iqppoikmmk9_{',',,',{:|42732|1<_(]{~),>-;*=&%", "$*;)(<3359ffginnoporvuxwtupppohgghgghghhhkhjknrputttutttvvvvvvvrrrrmmmeeddd886666666666688ellmgjemmstwwvxzzBIIIHBACBEIIILMNOOOOOPOPPONIIHEAwtoillidcc93/~',>,,;;>>)/||<<3clkfgiif95cimoicddioptwtmfcfmppqooqqqold3|9fmppppmqmg9;;=&&$", "#%=,)]<35cfffilnoonmnrsrrspppmmkkggggggghghkhkrrqtuutwwvvvvvvvvrrrmmmmeedd88666666666666aafiifhgehmmtwvvvzzCHIIHECEEIIFMNOOPPPPPPPQQOMIIIIEBAtooppliifd3<{'>,,,;--->)<1||5fliilol9459gmolmklmquxwulggippuqomqqoom91|0imqpppupof7|~~!)!]{][:}652641_(]]'>,>;==%$#", "#%=;,]/|29cijlloonnqqqqnqnnojmmmmmkkgggkkjkjkhrrrusuwywvvvuvvvqrrrmmmmeedd886666666}}}}68bfihebddejmmsvvvyzCGHHFFFFFFKMNOOPQQQQQQPOOKEAzAAwttpiiloolilof5<~',,)''-*--)/|359fiiotpi9339fmppppommtwxtidfkoqqqmmmmomm0|40gmquttupi97|//~!!]]]:}473a71|:]]''>--=%%$#", "#%=->!~_170dijlororoqrrnmjjjgkkmmommmmmlmnmmmkrqrrptwyywxvuvvurrrrmmmeeedd886666666}}}}28biih8b8dgjmmrprvAACGCHFFFFFKMNNOOQQQQQPPOMKEzAwuppligf9cfiiilptl9|/),)))'-**>)/|55cfiotwpf5459iptutqplqxwwqgdgmqqpmmmmlmmk5159imptuupmg77|<(({{{[_[}26672}:({]'>-*=%$$#", "#%=;,!~::479hfioprrrpqqnnjhhhggkkmmqpppoomqqmrrrrrpvxwwvvwvvvrrrrkmmmeeeddb8666666}}}22268iiba68bggjmmrptzCCCzAFFIIKNNNNOPQQQQPONNMIHEAwtpoifiid9cgiilptpi9|(~~~/{,;;->)/|5cfikpxwofc09cmtttqqolqwwui9dfopppmmmkkmmc||5cgoqputqic5311<_((_:[1a5a731<]{{''>-*&$#@", "@$=;>!]_<435dbgilnnrprrnjjihhggggklmpppqpqpprrpqrrsuvwtvvvvvrrrrqmmmmeeeddbb666666}}}2226bccc8666bggemmstwyBAzzEFKMNNNOOOPPPPPOONNNKIHBAxwtoooooliiopoppplc5||//<>-*&#@", "$%==>'{/:4750cbginnnmnnniijggggggkkkklmqqutttrqprruvwutvvvvvrrrqmmmnmeeeddbbb666662}}226acc9666668egehmnwwyzyyzBFMMNNOOOOPPOOPPPOOONNMMKIHEEAywwwttttwtppof053|||33|{'')~/_3cillotutpommmuwtqptpqtxxumd9ckmpqqmligki91|7ddgkoppoi97733377742}2677a311_{!'>--*%$#", "$%=>>'~~_4790bbgginnihnnjihhggggggggggkmmptttprprpsvvsvvvuvrrrrrmmmmmeeeddbbb6666622}22aacc862}6a8hbdemqquwwvyzCIMMMNOPOPOOPQQQQQQPPOONMMKMKIHHEEAwtwyxtppl0533|3553|////(<<3flloptwwtpquwzxppuuttxwxqf90dkpqqmmkgggd7<|0dgglmolic077|335066aa65723|1<({)'>-*%$#", "$==>,')]_1359dddfhjjkhjhhjgggkgggggggggkmqqtttttprxuvvvvvvrrqrrmmmmmeedddb888a6222}2}}}26cc662}2688bdgjquuwtsyCGIKMNOOOOOOPPQRQQQQQPOONMKIKKIIIIIIEAABAywwtl53||3|33|<<<||''{/_1457bhbggijikhjejdfgkgggggkkkgkkmpprtstswvvvuvvvrrrrqqmmmmeeggbb888222}}}[[[[}26bc62}[22866bgjnuuqstzBJHKNOOONOPPPQQQQQQQQQPOONKIIIIIIIKIIIHHHEAAAyo9333<;;=%&", "&*--']~(_1375abcfikjhhejefddgggggkkmkkkkkrrnrrrwwwvwxvvvrrrrrrkkkmeeddb88aa2}}}}}}_____16b96}}}}22666bkoouqmsyEEHKNOOOOPPPPQQQQQPQQQQOONMKIIIHKMKKKKKKKIHEEEAtig9|/{~<|353>==&&", "%*-;,)](<1357acdgfinhjhjgfddddggggkkkkkkkmooopstxwxyywxrrrrqqmkkkeeddb888222}}___(((((([79562[[}2226aekmooqquABEIKOOOOPPPPPPQQQQPPQQPOONKIHEEEHIKMKMMKKMKIIIIEypi5-*&$", "$%->,)(/1|350ddcgfinjjnnfgddddddddggkkkkoonnnssvvwvyywtttpprmmmmeedbb88a2222__(({^^^!^^(|774_[[}}2}28bimonqquAAEIMNNOPPPPOPQQQQQPPPPPONKIIEBAAAAEIIIIIKKMKKKKIEApg5|/~{_|7974|<19gltyAyplltEEEHHHGEzyxywqc3379mqqqmmg05731147dcgfcc03790d05a7888ab07241_{~,;;*%$", "&&->,{(_11550cbbgfgjhnnqiigddddd0ddggkkooonovsvvuvvvttutttsmmmmmeeddb6622}}___^^^^^^^^^[}32|(_[}}}}26bflmniuwxAEKKMNOPPOOPQQQQQQQPPPOOMMIEAzwtppwwwtyEHIKKKKKMKHBpic3({!(<7907770diowBBwoipyHIIHHHHEzzyxum0445cmqqqmkd033113500diiic5750d998008a8aa722*&&", "%=-'']{_|450acbggghjhjlmllgggddd0dddggmonmnrvsssttvsussttqmmmmmghggb882}}}_((^^^''''''!]12}:{{_:}}}26bfimklpxwBIKKKOOOOOPQQQQQQPPPPONMKIHEAwwttpplikipwEHIKKKMMKIEwoc|(!!{_7999ccfiipAAypootBIIHHHHECAyzwug7345gqqqqmk0744|43570diif97570dcdcdc8bac0522_({!'>-*%", "%=;'!{{_<159abcggiijhhfiiilggdddddddgiljnlqvrsstusrsspummqmqqmmjegbb886}}_(^^]!!''','''{<||]^!(::_[269eeikmpwxBIKKMNNNOPQQQQPQPPPPPOOMIIEBEyywwtpogc9flpwEIIIKKMMIEwl93/{)~<59cfilllowAwpoopwEIIIJHGEBAAAxqd3439mqqpqmg74414409779cfcc090dhcfegbb0a857}}({{'';*%", "==;'!{{_<1789cfggggjhhggfiigggddddddikiljnrqrsvvrrrusmmmmmmmqqmjggb88622_(^^{'','''''''{_|_{]^^(:__26c9fimqtpzEIHKMMMNOPQQQPPPPPPPPOONKIIHEAzywppolf09ccflyEIIKKKKHApi93<{{/<39ciopptyAAtollpwEHIHHEEAAAzAum0775cmqqqqld741347007359dgddddd9figgbbb8a53}:({!';;=", ";;''!{(_12a8a9ggiijjhgggfggigggdddgiilkinmmqvvsrrqrmmmmmmmmmmmjjggb88621_^^{!''';>;;>;'!<_/]'^^((__<69cfciqptBHIIKKIMNOPQPPPPPPPQPPPONMHHEAyxwttpllfd99999iwBHIKKIIEwplf92:::269ciptwAABypiiopwEHHHHECAAzAzumc075iqqqqpkc743479093379fffidbdhejkjhhbaa7|[[{]'';;", ";;'!{(__22669dgggfjhhgggggffddddggkkmlnmnmmrrrnrqrmmmmmmmmmmmmjjgea8622_(^^!'';;--;;--,)<<('''^]({(1688chnqqwBHEIKIIMOPPPPPPPPPQQPPONKFCCAuwttppollicdccdcfmtyEHIIIEAtpoic5}:}268clpwyABAukfiopwEEHJJECzAzAzukd57dmqqqqqm0333570d07359fgighgbejkkjehbaa74[[(!';;", ";''{([[}2260cdfggjjhjgggffgfgfhhhiilloqnnnrrvnnokkmmmqmqmmmmmmjkkebba21_^]!!'''--===*;>)/,]<~';'){{!{[3389cnnqAEHHIHHMNONNOPPPPPQQQOOONLFCzvsmjghbffccfffffilloptwyHIKIHBAyytof05770dfluyABApkgiptwyAEHIHCAzzAzwoddddkoqqqumgd90070dc0570dcimmkjjjjkmnjha884}[^^^!", "!^^^:<13779cdgiheeehhggggffdhheijjjnrrqrvrrrnnhhkkmejnrprppqppqqmkidaa4[:{''';;--=&&&=;,/<~>;''!^^^_|388fllpAEEIEEIMOONMOPPPPPQQQPOOOLIFzvsmedgbab989cfiifiilptwwAEKMKIEBAAwoi9550dfimwAEEyqiiotwAAAEHIHEAyAAwtlcddgmppquumkcd999dggd00dggomnmjjjkmmjjjb864<_^^!", "{((_|17790cfhhghheeheeehjjeheeheihjnonmrqppnnhkkkejjorpspppppppqoikfb05}_/!,>;--==%%%%;'{<{>;''!!^^:<158cfltBEHIGEKNNMMMNOPPPQPQQPPOOLHEzvsmmedb886868cfffiiilptwyAHKMMKHEAwtplfbbcffiqwBHEytppptyAAAEHHHBAAzzwuifgilqqquuupigd9dddgggddhhomqpnknkmmmljeb8621(({", "(__14479acefffhhfeehhhehhheehhehjjnnnmmqrrorkhkhhhjnqqqqppprpppmokjgcd06|<~!,--=%%%%$%*>{/);-;,''^^[:159cfltBEEHBHMNMIKMNNOPQPPQQPPONLHFzvssmed8a662a689bccfiilptyABIKMNMIBywwtpibdfiiipyEKEAwpppwAAzAEHHGBAAAzwuiiilopuuuuupkcddcdgggggjkmmmqnnnnmmmmnjea662__(", "[}2266a8cbffffhhhehhghehehehhhhjhjnnnmmnqnnhmmmjjknmqqmmmmpprppmmijcc0763|<~,>=*%%%&&%*>)()-->'''!^[[:40cciwBEEECINNKHIKNNOOPPPQQPPPNLLFzzvsmeeda666268b988fiiilpwyAEKMMMKHByyywplfffiiowAEIHBwpopyAAyAEEHGAAAACytolmmpuxtxxtuidddgggggjjloomnqnnnmmmmmjefa622}[", "[}22a6abcfffffhhheehhghhhehhehjjjhmnqnnnjnkhkjjkmmooollllmmnnlnmifea90221||<~'>*%&&&&&&-)~'-=-''''{:::40c9iyEEByBIMMHGIKMMOOPPPQQPPPNMLHCzvsmmedbb66886a9668fppptwyAEIMMNNMIEAAytplifiilowAEHHBwttyAAyyAEEHBAAACBzwqlmqxxxwxxxpkgggiggkkgilljmmloommmnmmjhbba6}[", "}226a89bhffhffheeeehhhheeehhhjjjjnnrrmmmlnhheegklpolijhhjjkkknnkhhh8a3}1___(/{,>*&&&&&&-)~'-=;''''{_:1250clABEAwEKKKEGIKKLOOPPQQRQPPOMLFFzvsmmeddb6668abbbadiptwwyAABHKMMNNMIEAwtpoiiiijiptyEHHEAyAAAyyyAEHECAyABBAyuqquxzyxxzxumkkkijkkkjjjkkmjnommmmmmmhbbba2}", "688bbhfjieffhffeeehhhhheeehehjjjjhmmmnrlnhhbhdbiiolliieeehhkkkjkeb666|[_(({{~{~,>-&$$&&;)~!=*-'''){(_}250coyAAzyHKIIEGFFKMOOPPQQRQQPONLIFzvssmeedbb6666a88bciopwyAAABEKNNNNNNKBytpillllifipwAEEEEEBAAywwyAEHHAAzABCAxpmpxAAzAzzxxqmmkjjkkkjjjhmmnnpmmnmmmmhha886", "688bbbejiffefhheeejhhhhhhhheehhjjmmqmrnnghhbdbbhiiffc9ahbbbeegggeb6661[{{!)!)!)),'-%$$&;)~);*=-;''{/(}437cpyAAwAIIIIEGGIILNOOPQRRQQPONLIEzvssmmhddbbb666889jloopwyyAABIMNNNNONKEypoiopoiffipwyABEHEEAwtwwABGIHAAAzCCzwuquyzACzAzzxuqnmmllljnhhkmhnrmmmmmmmkkeb86", "8bbehhfhifhehfehehhfhhhhhehhhhhhhmqqmmnnhhba88bebcbd8aaa8bbbeghgebb62_[{!'''>,,,',>-*&%-'~);*=>''')//_227cpwywwBKIEHEGGFILNOOPQRRQQPONLHFzvvsmmeeddb88bbbbhimmmmqttyAABHMNNNOONKEypplptoiffotwAAAABBAwttwABEIIGBAAAzzzxtwwyACAzzzAyuqpqoonkjkkhmjnnmmmmmmmkkggb8", "dgggechfjihfhgeehehhhhhheehhjhhmmrqmnjjhhba888bc9098aa66aa8bbhkgebb62_^{!',>;--->>,,-**;'~);-;;'''!((<227ftwtttBKHEEEGEIILNOOPQRRQQPONKIFzzvummhjgdddbbbbhgkmmkjnpptwyyyEMNNNOONMEytppttpigjowyyyyAAywtptyBEEIIHEBBAAAzAyyAABAAAzzzzxtppppmmnmmqqnnnmmmmmmkkjggd", "dgggejeehihfhhheeehehhhhhhhjhhmmnmqnnjhgba8aa8aa8aa4316666a8cbekhba62[^{!'';;**==;>>>>->,~)>-;>'''!~/<126fpwttwEIEEEEGHIIMNOOPQRRQQPOOLIFBCAwwqqjjgggdddddgknnijjqptwwwuwBKMNNOONKHBwwwwwoifotwwwwwwwttttwABEEIKIEEBAAAAAzBBBCCzzzAAAytppmqqqqqqqnnnmmmmmmkkjjje", "ehggejeejhhhfeheeeghhhhehhhhhhmmmmmnjjgb0a68a8a86531_111266aabbheba62}^{!'>;-=%%&%*->>,'~/~'-->'''!{(<<26ittppwEHEEHEGGFILNOOPQRRQQPOOMKKHCByyuuornkkgggddfjnjmmmqpttwwwuxAHKMNNONMIEBABAwolmptAAAwttpttttyAEEHKKIHEBBBAAACCEGGEECAAAAwttpqpqqononnnonmmmkkkjjje", "ehggejhehihhfefhehhhhhhhhhhhhjmmmmmnjhgb086266873}[[:[__112aa8bhebb861^^!'>;-=*&&&%%=>,)/,''!{((|39ittptwHHEEHECEFIMNOOPQRRQQQPONMKECAwyuuuppprmmnjjhjqqnmmqupwwwywtuABIKMNONMKIHEBAtolnpyAAwwtppttptyBBEHKKIHEEEBAAABEEHIIEECBAywuuptuprprnnnrmmmmkknjjje", "dggghhbhehieffehehehhhhhhhhhjhkhhnnljhba8662aa53}:[]^^^^__12aa8bbhbaa1_^{!';-=*%&&$$%=;)(||)>;>'''!{(/|39iptppAIEAyBEGIFILNOOPQRRRQQPONKFCzzwwuuqnnnnnooonqqqqmmmmqppttwAwutyAEIMNNNMKKIEBAtoopyABAwtpooppptyABEHIIIEEEBAAAAEHIIKIHEEAAAxutuptttpprnrnmmmkknjjje", "dgbebbbhhehheheechhhhhhhhhhhkhkhhjnjhhba6622634}[:^]^^^^^(_12288bhba64_[{!'>-=*%&&&$$%*'~|3(,>>'''!{{(<39lppppAIEwxAEGIIILOOOPQRRRQQPOLIFCzyzwyqqqjjjjnnouuquqtmmmqloppwxAyttwABHMNNMIHHEEByppptAAAywtpooppptwAEEHIIGEBAyAABEHIKKIIHEBEBywwttttttuqmmmmmmmknjjgd", "8b88bbbhaabbbbcbbhhhdhhhhhhhhhhjjhjjhba8662244}[[{!]!]{^^^(_1228bbbaa41[{!';-=*%&$&##$&=,<3<~,,'''){((<49lppopAHAwxAEGIIILOOOPQRRRQQOOLIFFzyAyyqqmmmmmmmqquuyywqmmqnlotwwyywttwABIKMMIBABEEBwpoptyABAytpnoppptwBHHIIIEBAyyAEEHIKIIIIIEEAAAAwtttutuqqpqqmmmkkgggd", "668aa888aaa8bbbbbdddddddddddgghkjkjggb8662224}[[]]!!!!!!{^^(_122abba64|[{!'>-=%%$&&###&&>~|_/))!''!~((<39lpploAEAtxABGIIIMOOOPQRRRQPOOLLFFzzzwwqrnmmmmmmmmqtwyyuqqqqnpwyxyAyvtwABBEIKKHAAAAEAwpoppyABAytppoppptAEIIIKIHCAyyBEIIIKIIIIHHEECAywttutuqquupqqmmkkbb8", "66a6aaaaaa880999dc9000aa0dddggggghhh8a862}221[[({,,',,'!!{]^__222ab8631:{!'>-=%%$&&###$%*)/~/~{/(~'){(_|5coppooAAwtxyCCEIKMNOPQRRQQPPOOLMKKIIEEBBAuxxupqmtpppwuwwuttwywyyAAAAAAywwAEEHKKIAwtwyywpomotABEAwppppttwyEIKMMMMIHEAABEEEEHIKKKIIHEBAzwtttppqljjjiiihba8", "6222264434244226aaaaaaaaaaaaaaabddda066}}2}:::(]'''>;''','!^^(_}22aa6|1:{!',>-*%%$&###$&&>){)'~(/{~~(_|5coppooAywtxyCCCIKMNOPQRRQQPPOOONMMKIEEAAAAzywuwttpqwvwttquwyABywyyyAABAwwyEEEIKKIytptttppoopxAAAAtpmpptwAABHKMNNMKIEBABEBGHHHIHIHEEEEBAyvwpponijjiffefb6", "6626|14111}}}}222644477770aaaaab800a722}2}_[_<]!'>>>;;>''''!^^(_}26a24_[{!',>=*%&&$####$&-){)',{/((((/|5copplpwwptxuyABFKMOOPQQQQQQQQOPOMMLHHEEAAABBAAyywtxwvxptmqtyBEAwuttwAEEBwwBEHHIKKHytppopppopuwAAAytpoptwyyABHKMOONMKIEBBEEHHEEEEEEBBEEEBAywtppllijgeb888", "26434||::[}}}1|11111444377770008aa67a2}[}[[[:({'';;;;;;;;','^^^[}}2221:[{]!'--*%&&$$###$&=,)'->){{(___|3coppopttpsxuyABFIMOPQQQQQQQQPPPONNMKKIIIEEEEBAAyyAAywwqttmqwAEEypolptwEEBAAEHHIKKKHAtppopporpuwzAAypprtwwwyAEHKMNOONMIHEEEHEBBAABAAABBEEEBAwwtpniec86622", "2|3||}}}}____<|:_1111}42277700067a622}}[_[:_:(!''-;;=-;;;;''!]^(_}2221_[{{''-=*%&&$$$##$&=>),>>''!(_11|39oppoptpoqxuyzzFIMOPQQQQQQQPPPPOPOOOOOONMKKIHEBEBBACywpttmmuzEEyplfilpwBHEBBEIIKMMMIBwtptrpopqtwABzwsqppwwwyAEHKNOOONMMKHEEEBAzAAyyAAAABEEBBAtpoljca662}", "_((:[}21<:<((_______11144777776777a2}}[[[^[([{!,---===-;;;;''^^^[}2}21^[{!''-=*&%&$$$$#$$%>),>;>''!_34350ltppoppoqxuyzzFIMNPQRRRRRQQQPQPQQQQQQPPPOOONNKIEEBCAAytttqqwBBAtofcffowEHHEEHKKMNNMKEywttppputwAEEAyuqutwtwyEEIMNOOONNNKHEEEEAAAyyxywyyAEEEAywtolfc862<", "_(^^[_<|<<___(((__::[1}1227777767342}[[[^][(({'>;;===**=;;;''^^^__}}}_^{!!,;>;*%&$$$$$$#&%-,)>;>'''{1459dotpppppppxuyAzFKNOQQRRRRRRQQQQQQQQQQPPPOOOPPOOMKIECCAAwwwwtwAAAwpjiccfltBHHBEIKMMNNNKEAwwtptuwwCEEBAwtuutwtwAEKMNOOOONMKKIHHHEEBAAwxwttwAAAAAywtpoib531", "::^(]{{/___<<__///____<1}}244734733}}[[(^^((^{'>-=====*=;;;;''^^][}}}[^{!'';;**&%$$$$$$#&%-,),;;'''!_|59iptpppttpuxuyAzFKNOQQRRRRRRRRRRRRQQPONMMKMMNNNNOONKHEAABAAAyyBAAwtpoifffltAEEAEIKMNNNMIBywtptwwwABEHHEzwvwyywyEKMNOOOONMMKKKIIHEHEEAAwtttwtwwwyyywtpic53", "|}_/(~{{{{(/<<<<((((__<:1}}24421144}1[^(^^]{]!,;===%=====;;;''^^{_}}}_^!!''>;**%%$$$####&&*,{);>,''!(_|9ipwtpptttttuyAzFKOOQQQQRRRRRRSSRQQONMIGGGEHIIIKMNONMIEEEBBBAAEBAwtptpliffltAEBBEKMNNNMKEAwwtstwwyACEHHEAyAABBBBIKMMNNOONNMMMMKIIIIIHEBAwwtppppttwywtpic5", "95|<_((~~)~~((_<<<(/<_<<<:111|}1}12|:[[{^^{({!';==*%%==*=;;;;'!^{[}}__^!''>-=**&%$$######&=>~)>>'''!{<|5ipywppttswtuyAzHFOOQQPQQRRRRSRRQQPNKIHBCCCCGGGHIKNOOMKHEEEEEBEEAtppttpoifiipAEEBEKNNNNKHAwywwwttxAEHIKHEEBEEEHEIMNNNNNOONNNNNNKKKKKMKKHEBytpooooptttpoif", "lf933|__~~~~~~/))>>''''~/<3coyytptttwwuwzzFKOOPPPPQRRSSRRQPPONMKFFBCCCCCCGGIKNNNNMKIIIIHHHEAtptwwwplifipAEBBEKNNNMIBwyyyzutuyABEIIHHHEEEHIIMNONNNNOONONNONNNMNNONNMKIBytollilopppoo", "plif953|<<<'!^{[[[^^!',;-=%&&$$$######&&-)),;;''')(<|9lwAwtwwwywxyAzFLOOPPPPQQRSRRQQPOOOMMKKHEGGGGGGEHKKMMNOONNMKKIIIEwpwAEEAwoiiltBEEEIKMNNKEAAwAAwtuyyEEHHIHHEEEHHIMNOOONNNNNNNNNOOOOOOOONONNMHBwpiffiilopp", "iillifc53||'!!^[[^^{''>;-*%&&$$########&*,));>'''!(/19ftyywAywywxyACIKMOPOOOPQRRRQQPOOOOONNMMKIKIIIHHIILKKMOPPPOMKIIIIBwyBHEBAwpllpyEHHHIKMNMKEAyyyxtwyABEEEHHEEEHEHIMNOONNNNMMMMMMNNOQQPONMMNONKIBwoic9cffii", "59ciiiic953|/~)))))~{/<<<<<_<__](:::]]!!!!(_:{';**%%%%%&%==;;>'!!^{^^^''>;-=*%&$$#########&&>))'>'''!((|6cpwwwBAAAwxyACFKMONNNOPQRRQQPOOOOOOOOOOOOONNMKKIKIIKKNOPQPOMIEIMIBBEEBBEBAtppyEIKIIKMNNNKEAAAyyzAABEBEEEEEEEHIKKMNNNNNNMMMMMKMKNOPQPNMKKMMKKHBtlf633333", "(<|59fffc953<~))!!!!!!{((<|<<(_(:::(]^!'!'{(:~'--**%%%%&&%=;;>'!!^^^^^'';;-=%&%$########$#$&-)~'>,''!(_}29ottwABBByxyCGFKNONNOPQRRRQPPOOPPPQQQQQQQQPPOONMKKKKMMMNPPPOKIIMMHEEEEIKIHBwtyEIMMKIKNOONMEBAyyAAyACCCBEEEEGEHIKMMNNMMMNNNNMKKKIMNOOONMKIIKKIEAtlc6}/~~", "')~/|599c9953!!{^{^^'';=*=%&&$#########$&&*)),;'',!//}29ltttyBHHAxyCGKKNONMOPQRRQQPOOOPQQRRQQQQQQQQPOOONNMMMMKKNOPOMIHIIHEEEHIKIIIEBBBHMMMIIMOPPONHBAyABABACzzEEEEEHEHKMMMMNMNOOOONNKKIKKMNNNONMKKIHEBAwof9<~)", "',,))/|3599995|!!{^!!!';-=*%%&$$#########$&&*,))>''')~_}29lttpwBIIByACHKLNNNOOPQQQQOOOPQQQRRRQQQQQQQQQPPOPOOONNMKKMNNOMHEHHEEEEHEBEHIIIEHKNNMIKNOQQPNHBABEEHEEBCBEEEEHHIKMMNNNNNPPPPOOMMKIKIIIKNNNNMIEAAABAti9<{", "/~))!)~(<|59cc953|;;*&%$&$##########$$%*>))'>''){_}29ltwtwAEHBAAEGKKNNNOOOPQQONNNOQQRRQQQQQQQQQQQQQPPPPPOONMKIIKMMKHEHHEHHEAwwAHKMKKKNOOMKMOPPPONIEHHIIKIIHEEEEHIIKMNOOOOPPPPPPPOONNMMKEEEIIIMMKIBwwABByo9|", "5|/~~~!)~/|59ccc93|''!!!!!!';;=*&%$$#####@##@@@$$&%>)~'>'')![:}5iwwtwyEEBABEJKLMNNNNNOPPNKKMOPQQQQQQQQPPPQQQPQQQQQPPOONKHEHHIMKIHEEHIHBwwAEKNNOOOOONKKMOPPPPOKKIKMNMKKIIHEHHIKMOOPPPPPPPPPPPPOOONMIEBAAAEEIKIAtptAAwpf", "l9|/~~!)))~<39ccc953|'']]!!!!';;=*&$$##@####@#@##@#&&-,~)'''!{::}0itywwwBBAzAEIKKKNNMKLNONKKKNOPQQQQQQQQPPOOOOOOOPQQPPOONKHBBABIKKIHHHIIIEBBEKMNOOOOONMIINOPQQQPOKKNNONNMKKIIIIKNOOOOOOOONONOPPPOONMKHBywtwAAEEAwppptwyw", "wo9|/~)),,,)~<39ccc995|->,~<|59ccc53|-**%%%%&%%=;;;'!!]^!'';-*&%$$#@###@@@@@@@@#$&%>~{)'''!]::4dpwwwwBEAzAEHKIIKKHEIMNKECGINPOOPQQPPPPPNNMMNNOOOOOOOONMKEBBBEEIKMMKKMNMKBAAEIMNMMKKKIEEHMNOOPPPPPQQQQQQPPOONNNNNNNNNNNNNNMMNNNNNNNNKIEAwttppptyAAwpll", "ciolc3<~),,-;=-,)/|5999953|<<<<(]~]]/_/^''''!)'>---***&%%===;;''!!!',;;-*=*&%$###@@+@@@@#@#$$%;)~~'''!^[:39ltwwwBHBAyBGIHIKIEEIMNKHEHMNPOOPQQPOONOOOMMMNNOOOOOONNNMKHHEHIIKMNMMKKIEwpptAEIKMKKKKKEBHKNOOOOPPPQQQRRRQQPOONNNNNMNNNNNNNMMMMMNNMMMKHEBwtolootwBEApf", "iilifc9|~)',-==;-,)<3599953|<<<_/~]{]//]!)!!)]'-*********=*;;;,',!'';;;=*&%&$$####@@@@#####$$%='~~!'']^^|39ipwwwBHEAACGGGHKIEEEKMIEIKNOOOOPQPONMMNOONNNNNOOOOOOOONNNKKIIKMMMNNMIEAwpliotwAHKKKKKMKEEIMOOOOOPPPPQQQRRQQPPOONNONNNNNNMNNMKMMMKMKKKIHEBAwpooptAHIEt", "HApf9cc9|(~)>-**=*>,~<3599971|<<)/{!!!^]|39ipwywAHHBACCCAEKIBAEIMKIHINOOOOPPONMMMMNNNNNNNOOOPPOOOOOOONMMMMMMMMMIEytpliklopwEIIIIKKKKKNOOPOOOOOOPPPPQQQQQQPPPOONONNNNNONMKKKKIKIKIIIHEEAAwptyEKMK", "POEl539c93;==**->)~|359953||<]]]](/!!'!)~~)'-*%%%%&*=;;;;'!]!'';;=*%$$###@@@@+@@@##$$$%%&**;~--****->)/|559553|//]](/{!'',)~),-**%%&%&%*=;''!]]'',;-*%&###@+++++++++@###%&%**;)<<_/([:|79fowAyAEHEBBBAwAEHzAEKNKEABKMNMIKIIIKMKMMMMMMNNNNOPPPONNNNONONMMKKEEIKMKHwploollopwEHHHHHHIKMNOOONNNNOOONNNNNNOOOOPPQQQPPPOPOOONMKIHEHEEEHHIIIIIHHEEBI", "EKONEpf5|3599|~,>-****->,~<359905|<]{(/]!'''))!'-**%%&&%===-;',!'''';-=*&$#@@++++++++++@##$$%%*;,(<_//::179flwBAAEIHEAAyyAEBAAGMOMEABHNNIHEGGHEHKKKKMKKMNNOOOOPONNNNOOONMMKIEBEIKMKEwpttppootAEHIIIHHHIKKKMMKMMNNONNMMNNNNOOOPQQQQQQPQPPOONNMKKHEEBEEEHHHHHEEAAA", "yBKNNHwi5||5cc5<),>----->,)<|599933<(//]{''')!)'>*%%&&**==;;>'''''>;;-=&%$$#@@@++++++++@@@##$%%=-)<_(~:[_|5cipwAABHIBBAyyxzzyzAINKAwAEKKHAzCBGCCEIKMKMKMMNNOOOOONNNNNNNNMKIHEBBEIKMKEywwwwtppwAIIIIHEEEEEEEHEEEIKMMMNNONOOOPPPPPPQQQQQQQQQQPONMIIEEBBEEBEAAAAywy", "ABEHKMHwi5<|3cfc3/),>>>>>>,~<|599993<',)),>-=*&&%%==;;;','';;;=*%&$#$#@@#@@@++@+@#@@##$%%=-,/_({]^_|38cltyyzEIBxuuuuyzrrwEKIAwwAIIEAzABCzzCHIKMNNMMNOOOOOONNNNMMMNMKIHHEEBEIKMKBywwywtttwEIKIHBAAAAAAAAABBEIKKMNNOOOOPPPPQPQQQQQQQRRRRQPONKKIHEEEBBAABAywy", "IKIEEKNKAo9|<|9ff5<~,,>>>>,)~/|599953||<],'>>,),,>--***%*==;-''';;;;=%$$###@+@@+++@@@###$#&&%%==-,{_>>>,,)(|3599555|:),';',,,>>>;>---;;>;'''>;;=%&$$##@@++++++@@@@###$%==-->>)/11_::_1379fpyyAzEBtpruuttqmuAEHByyAHHBAAAyCEEGHIKMNOPPPOOOOOOOOOOMKIIIKKKKIIKKKKMNNKEwppttoptyEIIIEAywyyAABBEBBBEHKMNOOPQQQQQQQQRRRRRRRSSSSRQQQQQOOOOPOOPQPPO", "QQOHAEOPPOKAti99fopi9|/~)),,!!~<|3555953|~,,>,,,>--->>>,;>>>'','>-==%&$$##@@++++@@@+++@###$&&*;>')(|33}::|35cfoyyAAAAtpprpttqqpyEEByAEHIAyxAAAHEEGGHKMNOPQPPOOOPPPPONMKHHIIKKKMMMKKKMMMIypoopoolotBEHHEAwtwwAAABBBEBEIKMNOOPPQPPPQQRRRRRRSSSSSRRRRRRQQQQQQQQQRRQ", "QPOIBEIOPPOKBwl9cflppi9|,,,>****->,,,,,'!!,;;;=%$$#@#@++++@##@+@++@##$&%*;-;,{<|72[[||59clwAAzAzwqqmpqtpnpwABAwyEIIAxuyABEBEEHIKKMNPQQQQPPPPPPOOONIIEEIIKKMKKKIIKKKEtllloliiotABEEBwtptwyyAABEHHHIIKMNOOOPPPQQRRRRRRSSSSSSSRRRRRRRRQRRRRRRQ", "QQQOMHHIOQQOHAti999iptoc5|<<<<||||33599995|/)))),>****->,,,){]]!'>;=&$$##@+++++@#@@+++@###%*->',,)/_3952}|159cityAAAywrqqqutpootyBAwwBKKEwxwzEEEEIIIHKMNOOPQQQQQQPPPPONKHAyABHIIIIIIHHIKIApolooolopwABEBAtpptwwwwyEKKIIKKMNNOOOOPQQQQQRRRSSSSSSSSRRRRRRRRRSSSSSR", "RRRQQPNNOQQQMBwti955fotof5|<<<<||<|||355c95|>-;;;'',))]]{),;-*%$###@++++++++++++##$%-,~)){/|35fc94335bcipyAAAytppppwwtrotyBEAyAIMIBwAzAyEEEEECEIKMOPPPQQQQPPOOONKEAwtwyAEHIKKIHHIKIAtoopoooptyBEBAywttttttwAHIKKMMNNNNNNOOOPQQQQQRRRSSSSSSSSRSSRRSSSSSSSS", "SRRQQQQQQQRQOHAAwof99fptpi93<<<<|<<<<1||555||<>>>'')!{{]))),>>-=$##@++++......+++@$&=>!)~/<|35ff953799fiowABBAwtpppwytpptyABAwyBIIByAAyzAEAyAABEIKNNOOPQQQPPPOOMKEBytttwyBIIKKIIIIIHAtpooooopwBEEBAwtttppopwyBEIKMNNNNMMMMNOOOOPPQQQRRSSSSSSSSSSSSSSSSSSS", "SRQPOQQQQQQONEwAEyof99fpwwof53||11<,>'',){]])'',,'>-*=*%###@++....++++#$&*->,)/(_|5cc52459fiopyAAywtppptwwppptyBAwwAEEAAywyAzyywAACzEFKMOOPQQQQPPPPNMHBAwwwwwwBHIKKIIIIHEAtpooollpwAEEByttpolloptyABEIKMMMMMMMMNNNNNNOPPQQQQQRRRRRRRSSSSSSSSS", "RQPOKMNPQPOIyoipBBti933cowwpf95|33||<(/~/<|||<<<;',,)!{]),',>--;*=**%%%$##@@+++@@+#$$$&*;;,'!/|7952|70filpwBBAAwpoptwwtoptwBAwwABEBzyyyBAwuyyzyzAEKMMOPQQQQQQPPNKIBBAwtppptAEHIKIHHHEBypoopoilptABBAwpolffilptwyAABHIIKKKKMMMNMMMMNOOPPPPQPPPPPQRRRSRRRRR", "PPPOMKKMNNKAoc9iyHyi5<<|5fpplc53333|<(~))~/<<<<|||/),',''''',){)''>--*=%%%%$%%%%$$########$$%&*=;;''!{122}:457filtABBBAtolowwoopptyAwtyABBAxzBEAzxwywyzzFKMNOPQQQQPPPOMIHAAywpoiilptBHIHHEEEBAtppttoiiopwAAytpliffilptwyyABEHIIIIMNNMNNMMNNOOOOOPOOOOOOPPQQQQQQQ", "QQPONMMMNNMIAoioAIAi9|/~/|9ili933||<<~)>;'))~~/<|||/)),,,'',,,,'',>-*&%%$####$$$$$$$$%$$%%&***---;'!!!{13}[_1|85cipwAywpiijopollopwAwttyBEBAzAEAwxxuwwzBEKMNOOPPQQPPPOMIHAAwupokiilptAEHHEEEEBAwtwwtoiiloptwwtplifdgioptwyBEEHHIIMMNNNNOOOOOOOOOOOOOONNNNOOOPPQQ", "RQQPOMKMNNNNNHAwAAti93/~~~<9iiic53|>,)~/<;*&$$$##@@@@@@@@#$$$$*=*->->,''!!{){<43:^_1|439iptppifccgiifiiopwwtptyABwtwzywtwuqwAAEKKNMOOPPPPPPONMIEAyutpolllootAHHHHHHEEBAAAytpliiilptttplifdfilotwABEEEHIKMMNOPPQPPOOOOOOOOONONMMMMKNOPQ", "PQQQOMIKMKIKNNHApof993**%**=->)////)),>;;;;>>';;>-*&%$##@+@@@++++@@@##$%*->>,)~{//~(/<|52:<<__|29looli9589cfccfilpwpootyAtppwxptpuqwxABEIKMOOPPQPPPOOMKICAywtqpppppptBIKIIIIIIHEBAwtpoiiilptwtpolifiilmpwABEEHIKKKMNPQQQQPPPPPOONMMMMMMMNMKKMO", "MNOPPONMMHBBEHEypf953|||/~))/5iolc5|/~)>**%%*&*->)///~),>>-;;;>>;;--*&&$###@+++++++++++##$$%*->,'{{////||5832}:}269ioolic977cc99cfiottllpwAtlltpqqpoqqwAyzEIKMNOOPPPOONMKKEBywttqpppoppwEIIHEHIIIIEAwwwtplilotwAAywwtppoopwyBEHHIHKKKMOQQQQPQQQQQPONMMMKMNNNNKIK", "MMMNOOOOOKEAyyAwtof5|<<|3<),~<9lpi9|-*%%*&%*-,~//~~),,>>;;;>;;*=%%&$##@+++++++++++@###$&&*-;''''!!~~_|593321359fptpoic90dcfcfiiowwpoopAwpopplmmlqqwuxzBFKKMNOPOOOONKKKHEyttpppooolotwBEEBBEEHHEBwtttpoiilowAEEEEAAyyyyABEHIIKKIIKKNPRQQPPQRRRRQQONMKKMMNNMMM", "NNMKKKNOOONKEAwtttpi93|353/))/3cilf5|<~,-=*%%&%&*-,~///~)),,>;;;;;-*%%%$##@@+++++.++++@@##$&*=-;'';''''')/|3|<<<<|39ipppoic9cfifillpwAwpotwywtpolikinuuwxzAEIKNNOOOOOONKKIEBytuoolololooptwBBAABBBAAwpllllifcflpwyAAAAABBABEEIIKMMMMKMNPQRQQPQQRSSSSRQPONNMMNMMM", "MMMIIEEHINOPPNHyttwwpi9995|///|39ilf5|/)-*%%*%$$$%-,~~~)~)),,>>;;;-*%%%%$#@@@++++...++@###$&%=*;;;;;;;''''/<<~~!){/|5ioolifc9cffiilpyEBwttyEEywpiikgjquwtxzFIKMNOOONONMKHEBAytplkilllollloptyAywwwywwtoifiif999cilptttttwwwAABEIIKKMKKNOQQRQQQQRSSSSSSSRQPPONKKK", "KKIHHHBBABIMOPOIBAABAwoc53|<<<<|39ilc3<~,*%%%%$###%*,,)))))),'>--;-*=%&%%$$#@@+++++++@@###&%%*;;;;;;;;;;;')/({''''!{_5fifc95599ccciltAEAwtwEIHAyoiigjiqqtwzDEKKMMONNNNKIEBAxwtqplkllllliililpwwwtptttpplififc55599floooppppwyyAABEEEIIIMNOQQQQQQSSSSSSSSSSRQQONM", "OMKHHIEEBABEIMMMMIHHEBwoc5|<<<<|35fiic|/)>%$%*%####&=>>>,)))),,>>--*=%&%$$$##@+++..+@@####&%&*;;;;;;;;;;;;'!~{';;;''{<0cc953|35959cciwBBwptAIIEAtligdemmtwzAEIIMMMNNNNKIEAyuuppqollifeffiiiiiptwtppppppoliffc955555cilloppptwwyAyyAAAEEHIKMOPPPPQSSSSSSSSSSSRRQP", "QPNKIIHIIEEEEEEHIKMMKIEyoc53|||5559fol9|/)-%%%%$#@@#%*-->,,))),,>>>-*%&$#####@+++..+++##@#&%&*;*;;;;;;;;;;;')),---->,~|9995||||595359lyBypptBIEAtiebdemmquxAEHIMMMMMMMKIEAAuqomqpomiicccfffgilpttppopppooifffc9553359filooppptvwywyyyABEHHIMOPPPPQRRRSSSSSSSSSRR", "RQPNIHEHHEEEEBAyAEIMNMMKApic5339c95cotl9|/,-%%*%#@@##%***-,)))),,>>-*%$########+++++++@#@$&%*******;=;;;;;;->),;===->,~39995||<395259fpAypopyEBypicedeempvuAEHIKMMKMKMKIECAwuqmmoppoifccccffiilpttppoooooiifffc9533599fillopptwwwwwwxwyAAEEHKNOOOPQQQQQQQPPPPQQR", "PPPOMIIEBAwAAywwttyEKMNNNIAtlc9cfc9cltti5<)>*%%*%#@@#$%%%*-,))),,,;=*%%$###@###@+@+@+@###$%&***=*&%&**==;=*==',>-*%*=>)<5c905||335359flwytolpwwppifeggjmpqvxDHIIKKKKKKKIECAysrnjoppuplfccccfilllppppooollliifffc9555559cilopttwwwwwwwxwwyyCEIIMNOOPQQQQPONMMMNNO", "NNNONNMKHAwwttttpoopwBIMNNNMHAtppoolotwo9|~,-***%$#@@#%%%%*>,,,,,,>=*%%$$###@##@@@@@@##@#$%&***%%%%%%&*=**&%%-,,>****->{3cc999535559ccfowwoifooppofffgjmmrsuDFHIIIKKKIIICCAvurnkmnpppolfcccfloolloppplllliiifffcc9557550cfipptttwwwwwyywwyABBHIMNNPPQQQPOMKKKKKK", "HEHIMNOONKEAytpoliiffipBKMOOOOMIHEAywAytf5/)>>**%%##@#$%$$%*->,,,,>-*%&%$$$#@@@#@@@@+###$&%&****%%%%%%**%&%%&&;'>==&&->,<9ffffc55555599fopofdilptpihhgjmmruuDDEEIIIIIIIHCByvqqmnmolilllifccfioooooooooliiiffffcc9955333599fiopppptttwwyyyyyAAEEIKMOPPPPPONMKKIHE", "BAAABHMOOONKIEwoifcc99cltBINOOONMKIHBBAyo9|~),-*%%$###$%$$$%*->,,,,>-*&%%$$#@@@@##@@####&&%%******%%%**&%%%&&=*>,,-;;->)<5iiiif9333||425fomgc9ipwtibegemmrtuxDBFEIIHHHIHEAyvuqqnmoifgiiifffffioppolooooliifffcc95595533335afilooooppppwwxwyAAAEHIKNOPPPPONNMKKHE", "BAwwwyAIMNOOOMHwof999599flpwEKNMKIHHBBAyti5|/~)>-*%%$$%%%%$%*->,)),,>=*%%$#@@@@########$&%%****%******&%%&==***>)~),>,'!/|ciffc51<<|_<139ipld0fowwocfgjmmrsuuxDBEEEHHHIHHBDvtqropomfddgfifcccfiopololloliifcc9955555553337adfjilllllppptwwwwzzBBEIINOOOOOONMKIII", "CytqpptABHIKMMKEwof953599ccfowBEEAwwwwwwti953-*%%%%**%%%*=->))),>-;*%$$####$##$$$$$$&%&****===*===**=;--**->)//)>>>,)/|9c995_(<<<<122cloidcitypffhhmmrvvsuxDBEEEHHHIIEDyuusppmlfc0cdfffc99cioooolllliifc99553355557735a0behiikilooooputwAyAAEEJMNNNOOONMKIKI", "BuuomorpwwwyABEEBypf5||39999cipwytpoooooi9355|<~)>-%%%%***%%%=->,))),,>-*%&$$$%%%$$&&&$%%*=*--*=--=-;-*=;--*=**=-,)'-*-->,~|9995<((<-*%****%%$&*=>>,,,,>>-*%%%%%%%$$&&&%%&*****=*==*=**&&*%%&&%%&%=>';%%**>)/3999|_(__<(_}39loifciopifkljmmponrruuABBBBEHHHEBywxttpoofb99cffifc9059cffffififfc955333599990999ddcchgeiijonlrqptxxzECCHIMNNNNNOMKIH", "ByqmjggeebbcccipwyAytof5553335clpwwtof95|*%%*-*=&%%%**->>>>---=&$$$$$$$#$$$$%&%&*%%&&&&&&%$$$$$#$&$###$*;;*&%%=;,<5995|_(<-*%*---*&%%%**---;-***&$#######$###$$$%%%%$$$&&$$#@####$####@@#%=*%$#$&>)<5593<_<<-*%%=>,>-*******--**=%%$############&%&%%%$$$$#$###@#######@@@@#%=&$#$&=>)|5953:_<|<}}}5fooic9c9bcijmolqmmppuwxAABABEEEEAyywwwttpoieccdcc999997333599ffffffcc99535599ccc88a99cdhfilonorqpxxAACEHIKMMMNMMNNMM", "KIEAuqjg8a24:<<<|359ipyBEEAti93339ipwtplic533|>-**%*-,,>=*-*==**=***=%$$##########$$%&%&%$$$$###@@#####@@@+++@@$&=%$$&&->~|5954||3|22239ipoicc9acfiooolqpqttwwyAABABEEEAyywwttpplkicccfc99999553|3559ccffiiiffc99cccjiiffcccdchiklooorqtxwyyBCEKKNNMMNMMNNM", "MKKEwuigaa21:_(///<|9ipwAEIHAof5535ciptpoic533|>--*%&=>,,---*=***=*****%$##@@######$$%%%%%&$$####@@@####@+++..+@#$==&$$&*-'<35553|3352226fotoifccciioooolpmmttwyAABEEEEEAyxtttqoooiiifcfc995999955559cffiloooooliiiiilloliiifiilloopppttwyxAABCHIKNNNNMNMMMN", "MMMIExuke861[_(~////|9fowAEIHAtf95559ipttpif953||~)>-*****-,,,-*=&%%%=***--*%$$#@@#######$&=&%%$$###@@@#####@@++..+@@#%;*%%&*-'~|599955555559cittoieciilioomlnmopttwyABEEEEBAwtprrppoookggf9c999999cccfcciiiilppppppoollliiiiiiiiillooopttwyyAAEEEHIFMNNONMMNMMN", "NKMMIEymib64_[]{//(/||5iptyBEHBtic999cipttpiffc95|/)>**%%%*-,,>**%%%$&%**---**%$#######$#$&**=%&$###@@@@@##@@@@++++++#$=;-*==-')<59ff99999599cfowtlfffiiilooonlomttpxwAAEBBBAytpqqpqplllgccdfcccffiiioliiiiilillloooolllliicddccfgiillloppswyAAEEIIKMNOOPPONNNMM", "MKKMMKEwoia61[]/<||||||9fiopyBEBwoicccflppoiffffc95<)--***=-,),-*%%$$&%%**----*%$###$####$&%%**%$$#@@@@#@#####@+++++@#$*;,>>;>,)/39fifcc999599cipwplfifffilooolimmoouutwyADAAAywtrrmmmiiiggdgiiilpptpppliiiiiiifiilllllooolic9099cfigiiknopuwzzBEHIKMNOOPPPPOONN", "ONKMMKIBwof94}<_|33|>>>>>,~~>-=%%&$$%%*->->--*%$$&%$$$$$%****%&&####@###$$###@@@@@$$=>)))>,,)~|5fiifc9999559fottpliiffcilllkikkglnrpuuyAAAAywwpqrnliiiilikllmopwAywtplliifififiilllloooolic0899dffiijnlrutxxAEEGKMMNOPPPPPOOO", "OONMMMKIEtic62<_|33>>,,>,)~)>-*%&%%%%-->>>>>-;**&**&&%%*;**=*&&%%$&$$$%%%%$######$%%=,~{),,,)<3ciiiifccc999ciottoifc988fffgdhgggmlrquwAAABAwturpqomoploollllopwyyttptplliiffffffiiillliiifd99999fiijnloqtxwABEGILMNNOPPPPPOP", "ONMKKKMMKEtl92__<|3->,,,,,)~,-**&%%%%*->->>>>>------=*=--*****&%%&&$%$%**%%$#####$%&&-)//),)~/|0ioooiiffc95559iolfc986a9cfegfbggijmmquyAAAAwuqquuttttpoooiiiilopttttttpplic99999ccfiiifcfccdc800cffilloqtxxACBCIKKNOOPPPOPOO", "ONMKJHHIKIEyoc3|/_|<-&&%%$$%**;->>>>>-----------***==%%&&$$$%***%%$$$$$%*=*-,/-==%%%&&&*-->>>>>--->>>>>>-;--=*%%&$%$$%*---=%%%%%*--->,)<<>,~~,>==*%%%%*-->>,,,,,>>>;,,>>>>>---***%*%%*-->--**&%%**=**->,~/~)!!{{/|9c953||1____|7cc977626bcfgdfkkkmrrqqtwyyAAAywtuqpmmloooliifcccfffilopptttplfcccfffcccccc9ccddgfeiliqqpuyyBBGHILMOOOPQQPPO", "NMKKHEAywwwyAywoc53353|<|553|3359fflliiltBHHEyo933333||=&%%%%%%*-->>,,,,,,,>>>>>>>---**=*%%%$$%**%%%%####$&&%%&-,)~)'''')/|9993|<<<((/(<7c9056266dcfghgkkooqrqtwyABBAAywtpommlkiiiiffcc99ccfiiiiopwyytlfccfccc99ccccccfiiiiloqppxAEEGFFIMMNOOPPPPOO", "OLIFCBAxtpptwAAtl9533533599533359fiiliiopyAEEBApc99993||,,>&$######$%**-->-----;--*=-***&%%%&$$#####$$#$###@##$$$&&*;>!!!''>,){|553|<<<_({~(|9c90566689ffgfkknlqrqtyBEEBBAywwpolkkfggccfcfccc9cffffffipwAAwpiffc9999c9cccfgifilloqpxwBHHHIFILNNOPPPQPOO", "OLIFAAyurmmoptAytof5||||59fccc99cciiloopptABAABApifff53||<~),>**-,,>*$$#@@####%%**=------=*%**%%%&$##$###@@@#######@@#####&%%&*>!!';-;''~|553|<<__{{{(|9cc0866889fgikklinnqtABEEEEAAywtrllidd90999cfiiifffcc9cffiotwwtoif9999c9ccccfiiilinmpuwAEIIKKMMONOPPPQPPO", "OLLFBvwqrmieiiptwwplc5|||39fiopppiiiloopppwBAAABAplii9533|/))>--;>>>-&#@#@@@@@#$%**-----;=&%%&%%%$######@++++@@##@@++@@#@#$$&%%-'!!>;;;-,~|553|<__({]{_49cc066aa0fkifkglnrptyABEEBBBAAwpolif9999099ccffffffc99c9ccfiotttoi999c9dccffiiilnnmruuAEHIMMNMOOOPPQQPPO", "OMLFFzvqnmebb9ciotttoi953359itHMHwtpollollpAEBBEBwoif95595<~))>>-->>-&#@@+++++@#$$%*----*=&%$$&$##@@@@@@@.+++++@@@@+@@##@##$&%==;'!,';--;,~|5531<_>-*$#@@@++++@##$%******&&$$$####@+++++....+++@@@++@##@##$&%==;;'),'-=->,~|553|<|<_(~][20cc969afgkimioptuuwwwyzAAAAAwwtpoifffc995573559cfiiifc955599flppoliccccgfiiiooopqppuyyBGFKNNOOPPPQQQPO", "OOMKFzzwqkij96}||5ciif93359cipEKEtooppttpoopwAEEEBwpif99cf93|<>--&$#@@@++++@##%%*****=&$$#$$##@@++++++.+.++@@@@#@##@$#$%%=;;;;,',>--=;,(|5353|1<_]/_}29cc98ccfiommpptuuwwwxwyxwxwwwttpolifcc9533333559ciilic953599cfloollicccfiiiiolpqqpuuyACHKNNOOPPQQQQPP", "OONMKCByumjjc9}<_|39cc9|<<39flAIBpc9cipwwtppttwyAAytoifffi93|<--*&##@@+++++@#$$%**%%%*&$$$$##@@++++.+++++++@@@#####$$&%==;;;;;,,,>===;,(|35533|1_/(:}5cffccbfipppupsuuwwwywwwwtpptttppolifc99533333559cfilli955559cfiilooliiiiiiillloqrwuyCCEKMNOPQPQQQQPP", "OOOOKHByxrljc921_/_|5993>,,-==*-,~|35577|1,';***-,~|555733||}:15ciilfffltutppqptvwwttttttpppoomoliiiifc955333355559fillif9909ccflottpoolnlmlloqqpuyyACFKMNOPQRQQQQP", "QOONMICwurmjeb564|(]{<355|/~~3fpABtfcffiiilopwwtiffiptoic93-****$#@++++++#$$%%%%%%&&%$$##@@@@++++++++++++#####&%$%==;;;;===*->,'-***-,/|55557552}|38dfllikipqqppqpttttttttttppppollliiiiiffc953333353359filiic9009cflpttpppppppoooppxuyBCFLNNOOQQRQQQP", "POONMICzqlkfa85434_~{~<355|~~/5iwAwicfltwpolipwwtlffiptpof5|/~/~,,)~)>*&**%##@+++.+@#$$%%%%%%&&%$##@@@@+++++++++++@@@#$$&%&&=;;;;;===**->>>-***-,/|59599c96|458ciloooqmpoqqpsttttttttttpppooliiiffiiifcc955333333559fiilic909cloptwtwwwwtpppptwwABGHKMNOPQQQRQQQ", "QOONMICAwqkbb67}<1|>-***-,~|5599cfc556a8flpttpmooqqpppputttttttpppooomiffccfffiic995553335599cflolifcdiotwABEEEAwwtwwwAABEHIMMOPPQQQRRRQ", "QPOONLEztqjhb64[_/(/>--*-;,/|599cfid9a66cipwwwppopqqprpuuttttpttpppoollifcccccffiiffc955755999cfloppollotyBHIKIEAywwyAEBHIIIMNOPPQQQRRRQ", "QQPOOMIBxqjhb62_[{{{~//~~/|53|<<|5cooiipyEIKIHAywywwtpllpttof3/~)),>,))>*%%*%#@++..+@#$$$$%***&**%$#@###@++.+++++@@@###&*=-;;;;;;;;;==***==->>>-*;;,(|599cfifc66bfopwwtttuqmopppoppttptttppoooliiifcccfffiillfc99999cccfilppttpppwAEIIIHEAyyyAAEHHIKNNOOQQRRRRRR", "RQQPONMJAulkb861[({'!)~~~~<|33|<||5fiiilwBHHBAAAAAywwtplllopoc|/~/~,,'~)>*%%%&@++..++#$$#$%%*=&***%#@@##@@@+++++@@@####&%=-;';';;;;;;-=**&==->>>;;>>)/|55ccggf99ccimpwwywtpmmmponoppptpttpppoooiiiifffiiiiloolifcdf9ccffiiilpttttwwABEEEEEBAAyAEHHIKNNOOQQRRRRSS", "RRQPOONKHzrmf861[({!,,,)))~<3553|||5cfiltAAwppttyBAywwwplilptpf3|,';-;''(|59ccgffcfehklptywtppopmmnnoooppttpppppolliiiiiiilllooooliiiffcdcff9bfltwyyyyyAABBEEEECAEBHKKMNOOQQRRRRSS", "SRQQOOOMKHAulia7}_({),,,,))~<3995|||39fopwyplillpwBAyyyypliowwtic53|//~/~,-&%&%#@++@@@####$%**=****%#@@##@@@+++@@@@##@#$%*;;''!!';;;;;=;***===>',';-''!{|99cfefilifgjmqttwtppoomlnoopopppttppppoooooliiiiiiopppooolifc999d99ciotwAAywyAAAEEIIHEGBEIIIMNOPPQRRRSS", "SRRQQONMKIBysric0a|_~)',',,,)<3995|||3clptwtoiffiptwAyyAytllpwywpi953|*%&%%#@@@@@@##$$%*-*****&&####@@@@++@@@###@$%%*=;''^^!'';;;=;;***===;',,',''{_26cifiopplkiimoppppololkinoopoppppttpppppoliifffffoptpopmlic97759a99cfiotyyyywwyABBEEHHEEHEHKMNOPPQQRRS", "RRQQPONMKIEywpolfc93|(~))',),~<3999|||5fllopplc99foptwwyAytpopwwwtof99|<<<)-%$$%$#@@@++@##$$%*=-***=&$@##@@@@@@@@@####$%&*=;;'^^^!'';;;;;****--;>,,!'''!{:29fiipptpojiiimmopooiiikiolooppppptttttpoliififfiottplifcc99079909099dioptwttttyAABEEIHHHEGKKNNOPQQRRR", "RRQPPOMLIIEAwtolffc953|<~))))){<59c93<|9fffillc559fioptwyAywwwwwwwwpic53||/,*%$$%$#@@++@##$$%==--=*=*$####@@@@@@@@####$%&*=;;'!]^^!,';;;;;;**----;,!{!!)^]16bflppwwplkifhfllmlliiggilloppppttwwwtpoiiiiiiilpwtlfc055999c05508888cfilpppptwAABEEIIKIIHKMMNOPQQQRR", "RRQQONMFGEEAwppigcdc9953!!!^^!''';;;;;*----;>'{]{{^]_16cipptwtpokddccfililfffgfilmopttwwwttpoliiiiloottoic933375599009d909ccfflopttwyABEHHIKKMKKMMNOOPQQRR", "RRQQPONLEBAxtplfifcc99554|<%&%%%$@++@##$%%&*---*&=%$###@@@@@@@@@####$%&*=;;!!{!]^!'''';;;;;;;;;;'!~]:^(:228ioopptpplgcd09ciiiiffddfilmptwwwtttpolliilppptpic9553|433599ccccccccfcilptwyyAEHKIKKNNNMMNOOPPQRRR", "RRRQPONMHCAxtnied9999555543||||<--&&%%###@@@@@@@+@@####$%*=;;'!{!!^{{!!''';;;;;;;'',!{[::_}26biopppppolgd00a9fffiffddfilpttwwtttpooolopttttoic9554|}1|35dfcfffeffgilopwAEEEIMNOOOOPOOPOOPQQRQRR", "SRRQQPNMKECxsqib8967575555533333|<<|59fc53599ciof5|||5cfiffioyEEEEBywtpoli9**%$$$#@@#$$&&**----=&%%$##@@@@++++@@@###$%&%=;;!!{{!^^{!)''''';;'''''']^:11}26bbeiloooooifd0786ddgfffddiiopppptttppppopttttpofc95511<|13559cfilliloptwyBEKMNOPQQQQQRQQQQQQQQRRRS", "SSRRQQOONIHBytpkb85633755555337553|<|3cc9559ccili93<|5cfili99itAEHIBAwtplic5|~,--%%$$$###$$&&**-;--=&%%&##@@@+++++++@@###$%&==;;!!{{{]^^!!!''''''''''!^^_162668abcfilllliic9776500dfifgillliopptttttpptppttplfc953|||3543559ilptttttwAAEIKNOPQQQQQQRRRRRRRQRRRRS", "SSRRRQPONKIEAywplf9a4773334333335553||599559cfiiic3<<3ciilic59fowBEEAywtoic95<~,;*%$%%%%$$&$%%*----==%%%$#@@+++++++++@@#@#$%%=;;'!!{{(^^^{!{{!)'''''^^^(_}2aaab888bffiiiiiic9725500cfiiiiifiiloppttwwwtppppoic9555333555559fiottwttwyBEHIKKNOPPPPOPPPPQQQQQQQRRR", "SSRRQQQOONKHBAAwtoi995573||||33||3555359c95559fiif9|<3ciloif9559fpyBBAwtplc95|/~,>*%%***%&&$%%*=----=%%%$##++++++.++++@@#@#%&%=;;!!{{{({^^^^({{!!'!^^^^(_}}26cba8aa99cfjffffc9732357ciiiiifffiilpptwywtpptplf995555595999ffiiloptwwyAEHHEEEEIKMMMKMNOOPPQQQQQQRR", "SSRRQQQPONKKEAywytqlf9053<<_<<||||335359cc95359fiif9339ciolic54|39ltAAyytpi95|*%*->>*&%%***-->>==%%&#@++++....++++@##@#$&%=;;!!{{((({^^^[[[^^^{^{(_}}}28bb98aa868accffccc9743570ciifffffiiloppwwttttwpic953559999cfiiiffioptABBBBAywyyyAEHKKMKNOPPPQQRQQQRR", "SSSSRRQQPOMMIBwwtttplc997|<<(//<<|||33359ffc5339ilif9559ciiif951<|9ityyywtpi93**->>-*%%%***;>>;=%$$#++++.+.....+++@##@#$%==;;!{{((_(((^^^^^[^_[(__}}2268ca698a6a6689cccfc976357ccccfffffiilptttpptwwpic95359cffiiifccciotwAAAywwwwtwyABEIMNOOPPQQQRRSSSRSS", "SSSSSSSRQPONKHAwpppoifd0554|_/(/~/<||33359fic535cilifc959cccfc9|<<|5fptywtplf93--;>>-****=*->>;=%#$#@++..+++....+++@#@@#$%=;;'!{{(____(((__1111122}}}66866a6aa2}}}65999cc9d959999999cfffiilptpooptwwpic9559cfilifc99flpwyAywtppwyAAABEHIMNOPQQQQQQRSSSSSSS", "SSSSSSSSRQPONKHBwtpoifc9577553<<{//<||33|39iif959fiiffc99959cc93<;-;>>>-;;***->>;%$#@@@...++++....++++@@#$&%=;'!!{___}}__[___1122222266a22226662}[:[2355999cc99d95559ccffiioppollpttplifc9ccfiiic999ipwAytppppttyEHIIHEEEIKMOOPQQPQQRSSSSSS", "SSSSSSSSRQQQPONKHEAyplifd5559553|>>--;-->>>>*=*;>>;%$#@@+............+.++@@#$&%=;'!{___}}}}}}}}}2226a686a222222662}}:[:}225799cccd9955799cfilopplilpppliifffiillc535clwAAypllotwyyBEIIHEAAyBEKMNOPPPPQRRSSSSS", "SSSSRRRRRQQQQQQPPNKKEAwtlf95555953||<-->>>->,,>**->>;*$#@@@+..............+@@@#$&%=;'!(__}}}}2}}}}}}2268aa86622}22222}[:[[}}32399dff99555599cflppolilopliffffiopof5|3fpABBytooptyAAyAAyAABAAAEIMNOOPPPPPQQRSSSS", "SSSSRRQQQQQQQQQQQQPOOMIEypic53|33|33||<|3|||39ilfc9cfiiffc553553|<<->>>>>>),,--->>-*&#@@+++..............+@+@#$&=;>'!(}}}}2222222226866626662222}1}}}1::}}[}|300c9999955999fipolliiooiffffiiooi935cpAEAywtttwwyyytppptAEHIIMMNNNNNOPPPPQQRRSS", "RRRRRQQPPPPPPQQQQQQQPOOMIEwpic53|<<|33335955|39fifccfiliic93|333|<,,'>,,),,--;>-*%#@@+++...............++@@#$%=;'!^:}}22886666666666626662222}}}}:_:::__::|3795999c9999cfloliiilooiffifillf999coAEBwtwwwwwwwtoiiopAEKMNNNMKIIIKKNOOPPQQQRR", "RQQQQQPOONNNMNNOPPPPOOOOOMIEAwpi9|/<||3335993335cfccfiooli953|<|--;-=%#@+++.................++@@#$%=;']{_}}2866666666666}222222222}}::::<:}[::}|3335799999cciiiiifiioliiiiiiic559coAHEAttwwwttpliffotAHKMNNMMIHBEEEHKMNOPPPQQR", "QQQQQQPNNMKKIHIKMMMKMKMOONNMKKIApc3<<<|||35555335cfccflopoic9|//~~~)))~//<39iif9335995|/~~{)){!)),>---*%$@++++.......... .. ...++@#$&*=;'^]_}}866666666666}}22222221}1[_::_:}}:_||11|439999cffiliiiffilliiilllf559ciwEHBwwwtttplfcciowBHIKKIHEHEBABAAEEIMNOPPQQQ", "QQQPPPONNMKIIHHHHIEBBABIMMMMNNNMEti93;--%$#++++...... . . . ..+++@#$&*;;'](_}266666666666}}222}22}}[:[::[[/}||:|}1<<||55999filliifffilifiloplc59fltAEAwtwtpptlc79itAHKHHEByyABABABAABEIKMOPPQQQ", "QPPOOOMMMKKIIHHEEHEAAwtwABBEIMNNMHyoc5|////<<||||59cfffloppoi93/!,,)),,)<<<<|59c953||5cc93|<-*$#++++...... . . ...++@@#%*;;'!^(_}26666666666}}222}22}[::::]]]:<<||334_|||33559filliifcfiiifioppicciopAAyttptpttof50fpBIMKEEAwptwyyAACBABBHIKNOPQQQ", "OOOONKKIIHEEBBCBAEBAAwttppptwBHKKIEwpi93|///<<|3359ffffiloppoi9|/))))),,)/(//<35995335cffc95|,)~~~/<|595559fiifc93-',))))~<359999fllif93*%@@++... ..++#@&%&=;',^{_}}26666a62}}222222}[[::^:::[<:::||1|}33|35359fiiifffioooppplfcitBHIBtpollpoid9kwEEEEEAwppoooptwwwwyABHEECCFIKNOP", "OONMHIIEBxxppmlhjffffgfloomlliffiotwAABAAwtpf53||350ciopifcfiiiic5|---,,),,)/|59555fioif93>-;->,,,,)~|55559fillf95_/!)),>>-$#++... ......+###&%*;''^](_}26666666889886067222}}::::]]:}<(/:_<||3559fffccccioopptpiioyIKKEtoliotpf59lAIBytploloprpwyytpnquzEEHHEEFIKNOO", "MMMIHEEEAAAtqqlgeba87976809cgiifffiffilpwBEBAtplic95439cfc99cfioolc5|>>---,,,,)/|3559cfiolic5<{~),>--*$@+.... ....+#@#%=*;''^^_}}}6a6a99899889b99652|}1:_:]:<<_(//<_|||359fffcc99flopppliltEMMKApifipti95iwHIAtpopptwwwwAzwpnnquAEAEEJHIFKNNO", "KIHHHHBBAAwtpooiica8774263779ccccfcffccfltAABAwtof9533|599ccciiopoi95|>>>>',)),)/|399cfioooic5|<~,>--*%$@+++... ...+@##&%=;;''^(_[26a688aa99cccfg99522|||<:<:||<__/__|<||59cfc9999floppoiioAKNMEwlfclto939oAIEwpppwBBBAABAwppnquwEBAABGKKKKLNM", "KICEHHBByAwwqroolfda573}24347759999cc989ciowyAAwplf957||359ciiloooic93||/),>>,>>>>,)))/<59cilooolic93<),>-**%$@++.. ..++@##$&%*;;'^^{[}}6689aaabbcfif9956333|||||4|||<|_<|<||79ccc9959flopoiilpEMNIApiffpti53fpAHEwppwEIIEBAytuprrtxAEACzCCKMMNMMK", "FECBEEEAyywtupoooigca74}}1|14335355999999dgltwyAwpoif973359cffilooic9533<~!,>,,>-->,))~/|9cflllliiif9|/'>-*%%%#@+.. ..+@+@##$%=*;',^{_[26688a98999cif995532533}||||<|<1__|||359ccc9959flopoiiowHMIBtliflwwf90ltwBEAttAEEEAywtpqtttwyABAAAzBFLMNNKF", "IBCCCBEAAwwuupppplifc77}}211114|33369909999ciptyAywtoof95599999filif9533|-->)///<39ciiiiifffc5<),>*%$$##@+.. ...++#@##&%*;;,!](}}2aaa66809a9fic9966333}:1<|1:<___||||3599999559flopliotBIIBwoffipAtf9foptABAywwywttttptpttwuuAAEBCCGHKMOOMK", "KCCBEBEBEAywwwtppoiie97322|1||1|||||7589999cfiotyAAAwtpic55555359ffc53||||<<~~),>>->)/<||359fiiffcccc9|<~,>%$#$###+... ...++##$$&=-;'!^[_[266622aa86dcec9965334|1_<|}:<___|<||3399995559flopllpAEIEypifflwApcclooptyywtpojnoptttpspuuxyAEEGEIKMOOOON", "MIJEEEHEIHEAAAwwtpollc9722|1|11<||_<|2695099cfiopyABAytof953333|39c953||||||>--,~/|35999cfcc9955553<~,-*%$#$$$#@@.. ..+@@$%%=-;','^^(_}6662269989bb900077574|||||<|1__|<||1399995559fopplowBIIEwofcfowwlcflolloopligceiopptqttwxuAAEHIJIKMMOOOOO", "NMKKKKIKMMKIEEBAwtppplic96733|11<|_<<|||23350ccilpwyAAwpic53|33|||5553|<<<|||->,)~<399999c99953||555|/,>*%$$$%%$@+. ..+@#$&&**=;-;>'!{[[26622a8888dd0076777734333341|<||<|14599995555flooiowEIIEwl99fpwti9fiiiififcc9cellopqqpzyzBBEEEHHKMMNOONOO", "OOOONMKKMMNMIEBAypppppolie0955|1|||||<<:<<|379dggilpwAAwpi933353|<|33||>>,)~<|59c99c99553||3595|/,>-%$####@+. ..++@@###$&%=*-;;,!!([[226aa88d00d077424633333574||||||||4599955339flolipyEHHBti99fpwoc5cff999ccdccffijoomptAAABBEBCCILLMNOONNO", "NOONKIHHIIMNKHAAypolloollfe9090334|||<<_<::|25ciiifiptyAytlc55995|<|||<<~~~<|33|/),>>,)/<|3599c995553|||555|/)-%$#@@@@+.. ......+++@@+##$%*=*;'!!([[286660dd000a666224233355531|3||3||3999975359flolipAEEBAoc59fpwoc59c03439cddchfiloqqpxwyBAEEGCEFFKNNNONOO", "NNNMHEAAABHKMKEBAwpoiliiifc999099953||<|<<|<}39fifffiptyAAyof9ccc9|'!([[286000ddbbca6622}}}43435311|||3|||3999995359flolltABAyti959itwl939c931409999cfiioqrpwwBEHEEHIKKMNOOOPOOO", "MMMMIHAyzyAEKMMKIEAtooilifc955709995533|||<|||59cc99cfipwAAAtlfcff5<~~//~),,)/|33|/~),,)/<||13675334||<<(//<|3<)-*%$$$$$$#@+.. ....++@@##&%-;;'!{[[28a0a0dccceba60a6744444331||||||||3999995555flplltAAwtof539lwwi937905337675dfiimmopuxyEEIIKKMNNOOOPPPPON", "IIIKKKEEBABEHMNNNMKEytppoiic9577790c99953|}}||35553755cfotyAAwoiiic|/~~{~,>>,,{<|||-*%$$##@+. ...++@@##&%&;;'!{[[26000abbchkgd00a64441114||||<||<||3599955335flployAytplc559oywi533553|1|246cilkjmmouxBEIIKKNNNNOOPPPPNMK", "CGEIIKIHHEEHIKMOOOONIBywttolfc909999cccc963||2|433||||359ipwABAwpoi9|{]~)'>,>>,~/|3||*%$#++++.. ...+++@##$%&*;'^{[[260088bbggkkgd07744411355||<|||_<|3599995335flolpBEytoi955coAwf3|3|||<||279fiigikopxAEHIIHIKMMOOPPPONKIH", "CGEHEIHIHEEEIIMOPPPPOMHEAwwtpliilifcccffcc86532||4|<_<<||3dotABBAtoic|~!)),,,,>,)/|33||%$#@+..... ....++@##$&&*;']{([28088bbkggkkgd07a46662553|||||<<_|3599995333clolwEEwpif535coAtc||31_<13769fffffjmpwAEBEBBEHIKNOOPPOONIFE", "HIIIEEEHHEEEIKNOQQQQQPONKEBAwtppttplifgffc999a5||||1_/(/<<|9ftAEBytoi9|/~))),,>--'/|3331|<||39c97|555553|<<~,>->)<||~>%$#@+...... ....++@##$&%*;;!{^[280b8ggkgggklifd98676265334||||_<|3599995333clllyIEwlfc5|3coyt9||3|-=;,/|35533559cgf953333||-%*,~||/,*$#++............+++@##$&%==;!!([28abghggggmlligfd866533952||||1_||3599995333ciloyIEwlc9||3coyp93334;-=-)<39c9c99cfffc72|<<;*%%-)/|<)-%#@+....++.....+++@##$&%==;!!([280hhggglljmliffd9668a6952||||1|||35999953339ioowEEwic9||5cpyp93334|<<|769fillpxwwutwvxzDFIMNPPPPPOOONOO", "KIIIKMNNOPPPONMKKMNOOOOPOPPQPPPOMKEBAtpoolif97565533|<<<<<|353|5citwwtpl93>>>,/|59ccccc9c99931>-%%*>~<|/,*%#@+...+++...+++@###&%*=;'!(:2a0ghhgllllmliffcd95607055|4|1||||3599c953339ioowBBtic9||5cpwo931|4555099filopttuqsrvxzDHILNPPPOOOONONOO", "KKKNNNONOOOONMIEEEEEHHHIKMMOOPPPPONMIEwpppoic85555753|1<<<|5333|49iptwwtlc5|<~,,,>>>)~|359cc9999053|<_())!~~~),>>-*%%*,/||~>*$@++..++++++++@###&%*=;!!([280gghilllplmifdcd997868554|1|||||3599c953|39ioptAApfc5|39ftwo93||49filliiiottuommrtvxCFILMOPOOONOONOOON", "KMOPPOOOOONMKEAywwwwAAAABBEEHIKNONNOONIEywtoic9975355573|||33|33435cotwwtof9|/,>>>>->)~<359dcc999572_(/),',,!)),,>>-%$%-~<|<)-%#@+..+@##@+@####&%*;;!!(:2abkgjjjopqlmkfcd90870600541||||||35999953339ioopywoc95||5fpwoc53|4cioppoioptpmhmqrvxBEFKKNOOOONNOONONNM", "NOPQPPPPONIHEAwwpppttAAAAAAABABEIIIKNNNMKEAtpiiif955559053|||||333339lpttoif5<)>>>>>-')/||7ccfcc99721<(~]!'>,')),,,>-%$$%>/||/>%##@+@@#########&&*;;!!([28bknjjnrrrmlifcb90990850541||3|3|35999953|39foopwwi953||5fpwofc535copppoopwpmjmmrswzEHILKNOOOOOOOOOONMM", "OPQPPPQPNKHBAAAwpooptyEHEEEEBBBBEHEEEHIKMMKEAtoolf995590953|||1437|||9ilpoli93/,>>>>;;,):<359iifcc964|,',)),,>-*%$%-~|3|)-%$##@@@##$$$#$&&*;'!{[[26bknmjmrrrmllggc9009d09055533333|35999953335flopwti953<|5ftypic9|3clppootwpnkjmrpxzBHHLKNOOOOOOOOOOOMMN", "PQPPPQPOMIEAAABAwptttyEIKKKIIHHHIKKEBAAEHIKKIEytplf953335555||11273||35ciooif5|/)'>>';'']_|30fiigc95241<~!)',>;'',),,>--%$$*,/||~,*%$##@@#$%%$&%&;;'!{[[2abknlrmqrqmllkgc9089dddd055553333359ccc53335floptti553<<3ftytif9330lpplpwtlhghmrwyzFEILMNOOOOOOPOOOOMMO", "QQPPQQPOKHEABBEBAywwywAEKMMNMMKMNOONKEAAAyABHIEBwpic953||35553345993||35ciiif95|/)>;',,!]/|26bcfiff9631|;>,,,,,,>>=%$%-)/|<~>*%%$$#$&%%=*=;;'!{[}20bkorqrqrrrlmifgc988cgfcd59555553559fff95559floptwl553/<3ftAwoif530lppotwpfggmmszzBFEIKNOOOOOOPPOOOONOP", "QPPQQPNMIEEBBAEEEAywyyAEKNOPPPOOOPQQPNIBytpppwBEBytlf953|1|35555dfg9933359fifc95|/),,))]!(}269ccecfc9534|_(~!,>>>;>'>,,,,,>-**-,/||<~>-*%&&$%%*->;''!{[}60bkosrquusromliifc9cdggigc999955599ciiic9559foptwyo993/<3ftAytpi95cmoopwpihgemmtAzDEIIMNOPOOPPPPPPOOOOQ", "QPPQPNKHEABBAACEEAyyAAEKOPPPPPPOOOPQQQPMEypliiowABAtoic931||359ccfiic953339cfc953|/!))~]{([}0accbcc999053|<<~!',>>>--;''!),,>-**>)<||/)>-=&%%=*;;''!^_[}a0bhutsuussuooolifd9dddfkigc99999599fiilic999fptwABpcc5||5iwAAAwofciooowtlhhgemqwzzBCHIMNPPPPPPPQPPOOOPQ", "POOPOKHBEAzzwyAAyyABEHKNOOPPOONMMMNOQQQPNKBtlffiotyAwplf931||359dfiif9993||5ccc93||>;;;-',,),,;;;>)/|||(!'>-*=-;>'){]<}a6dkovtuuuusuroolifcccccdgiicc9995999filiic999fptwBEtic5||5iyBBBBwliopptwplehgjmqwyzDCHILOPPPPPPPQPPOOPQQ", "POONKHBBzwxptwxwwAEHKMNMMMMKIIHHIIIMNPPPPONKApiccfltyywoic73|359cgiliic953|35ccc5|||||:<_}}}6bbebc8a5269977||-=*;->,)))''',,~<1|>>,'!]_126adknvtxuuusqqqoiifgc900ddiifc9955559cfiif9959clptAEtic5||5iwByAByoopptwwolfegjqwwyzBEJIMOPPPPPPPQPPOPPQQ", "ONMIHBBywuurpttutyEKNOMIIKIHEBBEEEEHMOPPPPOONIyoiccfltwwtlf055559dillifcc93|55ccc53333|1|21668bheca97424375541<<({),>>-==%*->,)!~~),,)/<|||(!)),'!!^_228bbknruuuuuuqpqpokgga90009iifc95555559cfff95359iptyBti95|<3ftytpppopppwwpolhhknuywzzDEJKMOPPPPPQPPPPOPQQP", "OMIHBEEzxuonpuupotAKOOMIKMIEBBBEEBABIOPQQPPOOOMEwpiccfowwwoic99559gioif99953|59cc9533537222a6dbbhba874111355553|<;=*=%&&=;,{{(((__1||||||<__[[}2268ekoruuuuqqqomolkfd900099cccc955353359ccc53335cltAEwi93/~<9lpplillfiopoiiifjmpwwzyADEIMOOOOPPPPPPOPOQQQP", "MKHEHEAxprnnmpmkiopAKNMMNMHAABHHHHEBABEKOPONOOOOOONHwoifiotwtoicc990ciid3|355335cffc909c99dchgggghb8877}2__<|35554|<((),--==&&&%->)~{(<|55||<|34||}|4268dbhnvuuttuqqqnlnkhdda0999ccc9995353359ccc93335citBHyi93/~<9iooooofcilifggeeknrtwwyyEEINOPOOPPPPPPPOPPQPO", "MIEHHHApprnkmqmhkjltEKKKKIByyAEHIHEAyyyBHKKIIMNOOOONMEtlffipttpifc9599fc9|<355559cfcfc9cccffkllkkeeb985321_<__|7555||_~)'>;==&&%*=>,)~/<|7|<<|14376786bbhhknquvtvvqqqqmmmkgd09b9cccc8995353359ccc953359itEHAi95/~<5floooicflifddfchkruqtwxzDEINOOOOOPPPOOPOPQQOO", "NIIKKHtppnkkmqmkkjiotBHKKHBAyyAEHIEBAwwwAEEEBEHKMNNNONHwoicflppoifc955cfc3<<|3595cfiiiiffcfimppnmmffb953}}1_<(__|333|_;','{/<<(_<|436509cffgjmnrvvtvwwtuqmmmkfdccbccccc9599553359ccc953359itEHAoc5<~/3fiopliiloicabbbhknqqptxzDILNNOOOOPPOOPOPPQPOO", "NKMNNEtpqlkkkmqmkeihlpwEIIHEBBBEHIIEBAwwyBEAywyBHIKMNONIApf9dioplifc90cgf92_:|5999fillliiiiimopppmljfc954}}1,,,,)~(/__|36709cfgiknnstssuwvvvttqmmmiifcbbcccc9999995599cffc9555citEHEpf5>''',,'!{((<|589cfcfiloqttxtutvvwvwwuppoliifbcbccc9999cd999cfiiic999fltEKIwi9|<<5fipwABAtlcb88bcimlmprsuDDJIMMONNOOONONOOPQOOP", "OMMNMEwtpmnkejmpmmhbheiioppolooopwBEBAwttttwtollooptwEIKKIypg009flollifcfic953|35ccfilloolommnqopppoiibb953}[:((({))))~_||<;>''{<<11<<(/_/_((/{([[[:13669fhloptwyyyyAAAywsvwtttpolieeccbbc999dcdcccfiloic999ioEMIAl5<~~|95559dc89898ccnoonmrsuDDHHKMMNNNONMNMKKNNNKIN", "PPNKEwpttpnnllloutwplhjijejif98cfilpttpoliiipwwtoiiffffioptwAytofcfltwwwqolif9956269cfoppttppuuqrqopmollifc9741[:])''>;;->;'{_<|1|44322}[[[[:_12|226bekopuwyyyyABBAyvwywtttrliffccccc8990999999fiifc99cioBMMEp9>,~<|35599652}[1142a6268abhiottwzyyyAABAyyAywwwpolifeccfcc990509999cffc9559ciyKMIwc|,~|49cccdd0755766aa8abhhjmpuxxxxwyAAAAABBAAywpoiifffffcc90999999ccfc93335ftHMIwc3|<|9959fgb968bbcioomkoruyDGGIKMNNNNNMMKKIIKNOKCE", "INONHpjkloliinonmmmqrtwwwttwyytlc9909cfif9999ciptttppoic9999flpwyAAwtppwwyuopoifciifccfloptwzxyuuqqnonkjjiliifc5}:(!'';;*-=-==--'!_49ciifdefc898abbbbgehmptxwxxxxyAAAABEEBBAwpolieffiffcc909999cffc95335coBKIyf|>;;>>,,)~~/<<<<;>;;->->>,,)~/<|||||<<<11375cfiiowABHIKKMKIHHKKIHHECGEHGEHIIKIKIIIFIKKMMKKMLKKMOOOOOOMKKIIJKMMMKKMKNNNNNNOOOONLIJEDDwvsvnnhkkggb88aaa222222222274132259999953700adoswywxzzzAAAEBAAAACBABCCHKMMKHCzCGIIHEFGJIMMOOOOONMIHEzzwwytsuuttwwwwwwt", "mhgghbiec8833|_[^{)!',>>;>>>>>>>,!!~/<|||33111|3779cioopwAEIKMMIHHIIIHHHEGEGGGGHHIKKKIIIFIIIKKKIKLLKKMNNNNNNMKKIJIKLMLLLLLLLMMNOONNNMIJEDzxvvnnnhggbbbaa7744411111112}411423599cc52200adiptwywzAzzzAEEBAABCBECCCGMMMMJCzCEEHEBFGIIMNNOOOONMKIEAzwwwttstttxwwwwtt", "megbcfb906|1_(^^^!!',;>;;>->->>>,'!~~/_||3373||376acglpttzEIKMKIIHHHGEEHHHGGCCHHIIKKMKIFFHFIFKKKIIKKKKMNNNNNMMKKIJJKMMLKLLLLLLLLLMNNLIEEDxxvvnnkhgbbb0a7774441}[[[}111}11134459cc5220dadjpwwzwywzzAAzEBBAAEEECCCHMNNMIGBBEEEEDFGIJMMNNOOONMKFFzxzvwvssssuwwwwtum", "edgebe8622_(((]]{'''>;>;-*-=---->>,))~/__1137337aa9dilptwzAHKKKKIHEEGEGHIHEECCHHIKIKMMKIHHHFFFKIHIIIIIKMMKKMKKIHHEEHIIIIHHHHLLLLLLLLLJEEDvuvrnkggaaba0aa222}}}}[[:}}[1_:1112239995345badiowwyzwwwzAAzBBEEEEHGGCGIMNNMKHCCGBEDDFEIJMMNNOOONMIFDzxzxwxsssstxwwussm", "egecba62}__({^^^'''>;--=**======->',)){(__<|4508600chkptyACEKKKKIECCEECHIIHEEEHHKKIKLMMKFHFFFFFHHHFFIIIKMKKLKKIFFFDFFHFHHFEFHHHIILLLLHDDzvvvrnghbab00a6a6}}[[[[[[::[[_1_:11211|441247adhhmtwyzwwwvzzAzBBEEEHHGEIIMNNMKIFCCEEEDEEIIKMMMNOOOMLHFDzzwwxssstwwwtsumm", "ggccaa2}_({{!!^^'';-=*=***&=====->>,,!){_<_|4609ddhbflowyAzEHIKKIECCCBzBHIHEEGHHIKKKKMMKFFFFFFHHFFFHHHHIKKIKKKHEEDBBBFFFFDDDFFFFFFHHHHDDwvvvrkghba0066622}}[[[::[::[:[[__[11|1|111135a0henpwyxwwxwwzzzBBEEHJHHIFKMNONMIHFHEEDDDEEIIMMMNNOOMKHFDzxzvvvsstwwwtmmme", "ghfb62}[(^{!!!^!';;-=*&%%&&&=====->',!){(<1}2269cfhehjruABAEBHIKIECzAzzAEHHHHIIIIKKIKMMKFFHEEEBEFEEEEEEEIIIIIIIFBCAAzzAACCCzDDDFFDFFEFDDxvvrnkgbb00662222}}[[]]^]^^][[::__[1111111112a0hhjrwywxuwwwwzzBBEEGJIKFFKMOONNKHEHFEFBFEEIIMKKNNOOMKHEDDxzxvvsstwwwsmmme", "kbb62}[(({{!!!!'';;-**&%%%&&&====->','){(_}}2770bhfinjnqyCBBEEHIIHCAzyAzBEEHIKKIIKKIKIKKIIHECCCCCBBFEEEEHIIEHHEBzzzxxzzzzzzzzzzzCCDDDDDzxvvrnkgbb00a22222:[[[]^]^^]^^^:^[__:|111111124abhjqwyyxuuxwwyyzBEEJIKKKFKNOOONKIHHHFEFFEHJKKKIKMMMKKJHFDzzzvvwtwwwttmmeg", "icb2}[(({{!!!!!'';-=*&&%%&&&&====->','){(_}}7559bchlmrqszCECAAEHIIEAAzAAzAEHIKKKKKKHJIKKIHCCCCCCCzAzBEEEBEECCECCzzzzxxwzyyvzzzzzzzxxxzzxxvvrhkgb006a2222[[:[:]]]^]]]^^^]^:_[:1111114277bhjnuwwxuuuwwwzzBBEJIKMKKMNOOONKIHEFHEFFEHKKKKIKMMMMKIEDDzzzvvvtwwwummmjk", "eb6}[[({{!!!!!'';;==*&%%&%&%%%===--;,'){(_}270aabhjnpqtxzEECAzzEHHEEAAAzzzAGIKKKKKIJJHIIHGCCGGCCCzzzzCCCCCGCCCCCAzyxwvwwyvwvvvvvvvvxxvxxxvrrhkbb00a2222}}:::]]^^^!^]]^{]]^:_[111[[124770hhnptwvuuuutwzzBBEGIKMMMMNOPONMIHFFHFEEEHKKKKKLMMMMKIJEFDzzzvwywwusmmjgk", "b82}[(({!!!!!''';;==*&%%&$%$%%===*-;,'){(_}27aaabjhnqqtxAEEBBxzCEEHEBAzAyAzEIKKIIKIJGEHHEGCGEEEBAzzzzCCCCCCGCACBCzyzwwwvsttsssvvvvxvvvvvvvrrhhbba66222}}[[[:]]{!!!!!^]^{^]]__:_[_:}}47a0hhnpuwwtuuuwwzyzBEEJKMNMMOOOOOMKHFHFEFDHHKKKHHHKKKIHHEFEFBzzvxzwwtsmejkj", "b2}[[({!!!!!''';;;==%&%%$&&$$%&==*-;,'!{(<}478bbhjjmmqxxABBBBCzzBEEEEEAzyyzEHIIIIKIIHEFECCCEEEEEAAzzxzBGCzCBBzCBCAAutusstuussssssrrrrrvvvvrrhkb0a6222}[}[[[:{{{!!!''!!^^^^]]_[[[[:}}26aahhhnttwtpuuuttzzBEEJLMLMNOOPOOOKIIHEEFEHHKHIHHHIKIFEFEFDFFzzzvAAttmmhkjc", "82:[({!!!!!'''';;;=%%&%$$$$$$%&==*-;,'!{(_}45abhhjmmruxzAEBBBCCzBEHIIHBzyAAEEHIIIKIIHEECCCCBEEEEBBzxwwzBBABBBCAAyywtttsspmmmmmmmsrrrrrrrrrrkhbb0a6222[::[:(^]{!!!''''!!^^{^^:_}[:}}}466ahhjiputspuuuttxzBAEGKMMMOOOPPOONIIIFEFEHHHFHHFFFFIFDBDDCAzzzvvAwtmmejkhc", "2}[[({!!!!''>'';;==%&&$$$$&$&%%&=*-;,'){(_}47abhjmmruuyzAEEBCCAAAEHIIIEBAAACEEHIKKIIHFEAzzzCBBEEEBBzwwyBEBCBBByyyywwtqmmmmmmmmmmmmmmmmmkkkkkhbb08622[[[[:((^{{!!''',''!!^^^^[_1__}}4a666hheipputrrruutxzBAEGIMMNOOPPPPONMIIHHHEHIHFFHEEHIIHEBAACCzvvvtwtmmjjkic9", "2[[({!!!!'''''';==&%&&$$$$&$$$%&=*-;,'){(_}47abhjmruuwxzABEBCAAADBEHIIHEBAABCGEEIKKKHFEzzzzzAyAAABBBywzAEBBBAAyyyywqqqmmmmmmmmmmmmmmmmmkkkhkkbb08222}[[:::(^{!!!''','''!^^^^^:111}}47666bghhlptpppquuttxxAEGIMMNOOPPPPONMLIHHGHHHHFHEEFHIIEAzzCCBzvvtwwqmjjgkjb8", "}[[({!!!!;''''';=*&%&&$$#$&$$$&%&*-;>',{(_}47abhjmuuwwzzCABBAAAAADEHIHHEEBzBECEEHIIKHEECzzzywyyAAyBBzzyAEEAAAAyyyuuqqqqmmejjjeeeeeeeeeeeebbbbba08222[[[[__^]^^!!''',,','!^]]^]11}}}47a68bhghjppqpnppustxxAEGHKMLNOPPPPPNMKLLHHHIHIHHFEEHHECzzzCBAzvsuwqmmhggeca2", "[[({!!!!';>'';;;==&%&&$$$$$&&&%%&*-;>',{{([4aahhmnuuxzzACzBBAAAAAABHHEEEEBAACECGGJIIHEGzAAzwwwyAAwyywytwAAAAAAAuuuuuqqjjjjjjjgddeeeeeeeeebbbbb006222[[[[__({^^!!';;;'>,''!^]^^:1}}}78aa68bhgjnpppopqqqtxxAEGGKMLMOOPPPPOMKLLLLLLIIHFEDEEECCzzzzAAtstqqqmeeghcba2", "[[({!!!';;;;;;;;=*&%&&$$$#$$&%&&&*-;>'!{{_[4aahemnuxzzzAzAAAAAADAABEEEEEEEBACCEGGGHHHHBCAzAuwwyyAyywwuutwAAAAAxuuuuunnljjggggddddddddddddddaaa00822}}[[[_({^^^^',';;;''''!^^^]_}}}3666a6a88hhoppqoopqqtxxAAGGKMNNOOPPPPOOMKLLKLKIIHFEDAACCCyAzzywusmqqmjhggfba2}", "[((!!!!';;;;;;;;=*&%&&$$##$$$%&&%*;;>'!{]_:78ahjmnuxzCzzzCAzyzAAABBDEEEEEEBBBBGGGGGGEEBCAzwuxwyAAAAywwtttyAAAwxwuuuoonnkgggdbbb88888888888888888822}}[[(_((^]]!,'';;;;',,!!^^([}}2a66666aa8ahlpppnnpqqppxAACHIMMNOOPPPPOONMKLLKKIIHFFCAzCCCAzAzywumqqjjjggebb82[", "[({!!!';;;;;;;;;=*&%$&$#$#$$$&&%%*;>>,!{([[788hjmnuxzCCzzBAAyyAABEBDBEFBEEEBCCGGGGGCABzzAAwxwwyAAAAyywuutwyAxwxxuuonllkkggbbbbb88888888866666666622}[[[[[(^^^{!''>;;;;;,,'!^^^[[}26a6666aa8abhopqnnppqssxxAEGIMMNOPPPPPPOONMLLKKIIHEFCzzBBCAAyAysmmqnjjghecb82}[", "[({!!!';>;;;;;;;=&&%$&$####$$&$%**=>''!{([1468hjmvqwzzzzzCzAyyyABEBAABEEEEEEEHGGGGGBADxzAAyywywAAAAAyywtttwuwxwxuroolkkkebba66666666666666666666662}[[:[({]^^!!',>;;;>''!!!{^^[:}46aa226aaaabhoppoorrqssxxACGHKMNOOPPQPPOONMMMKKIIFEFBzzCBBAyyAuqmmjnjggbebc82[[", "((!!!!;;>;;;;;;;=%&%%&#$####$%%%*=;-',!{([1488ejnvwwAzzzzCCAyyyyAEEAABEEEEEJGJHJGGGADDxxyAAyywyyBBBAAywwttqutxxwupnokkkeeb88866666666a666666622}}}}}[[[[((]^^!{!'',''''']{{^[[[}25a66a6668abbeottppprqupxwACCGKMNNOPPQPPOONNMMKKKIFEEAzzABCyyywtqmjnngdbebcb22[[", "({!!!!;;>;;;;;;;=%&%%$&$$#$$$%%*=;-;,'!{_[168bbknvwAAAzzzABAyyyAADBBAAEHHEHJGGJIIHEAAxxxxzyyywyAABBBAyywttquuxxxppomkkhfa888866666666a22222222222}}2}}}__:^^{]]!!''',,''!]^^^^[}44a6666666a0cemtwtpppuuuxwAGCGKLNNOPPQQPPOOOMMMKLIFFFAzzABByyytuqjjnggabbhca2}[[", "({!!!';;;;;;;;;==%&%%$$$$%$$%%%%==-;,'!{[[266bjhnqwAAAzzzAAAyyyADAADAABHIHHHGGIIKIEBxxuusptwywAAAAEEBAyywqquuxwxpppmkfheb888822}}}}}22}2}}}}}}}}}}}}}}}__(]^{~{]'''''','']^^^^[[}2222222266abckpttqpruuuxxABEHKMNNOPPQQPPOOONLNLLIIFFBAzBEAywquuqjjkggb8ceb22[[[", "({!!!';;;;;;;;;==%&&%%&&$%%%%%&==-;'''{{[_468bjhnvwAAAzzzyAAAyyAAyyABBBHIIJIHJIIKKHByxurspstuuyAAAEEEBAAuuquuuxpprmmmjfbbaa8222}}}}2}}}}}}}}}}}}}}}}}}}_:]]]{{!!!'''',',!{]^^[[1122222622260abkotprrrqqtxxAAGJKMMNOPPQQPPOOONNLLLIKHECAABEAwtquujjkkgbb8cf62}[[(", "({!!!';;;;;;;;;==%&&%%&&&&%&&&&&**;>'!{{[1468benqvwAAAAwwzzCAyAAxuuAABCEJIIIIIHHIIIBzxxsspquqquAAAAEEEBAxuuuuuxpppmmijbccb8222}[[[}}}[[}}}}}}[___[[[_}}::]^]({{{!'',,!!]]]:[_122aaa66aaaaaabfhlpttpppquuxxAzBGIMMNOPPQQQPPPOONLMLMKHEEzCBEAwqqunjjkkbbabfb62[[[(", "({!!!';;;;;;;;;==%&&%%%&&&%&&&***;-',!{[[166bbknqsyAAAwwyAAAzAAwwuutACEEJKKIIJJHIIKEEAxwwuutquuyAAyABEEAyxuuuuxpspmmjjbbbb62}}}[[[[[[}}}}__[_:_:([(__[[___[:_//(({!!]{{((<1|1356988999a9cccfjiotyywttxuuzzAAEGHKMNOOPQQQQPPPPONNLMKFEHAAEEAwqqunikkkbb8bf62}[[[(", "({!!!';;;;;;;;;==%%&&%*%%%&%%%**=;;''!{^_166bhknqsyyAwwwxAACAAzxutuuxBEEIKKIIKIKIKHHEAAywtttuuxyAAwwABEAyxxuuupppqomiicbb6a2}[[[[[[[[}}____(([((((((:_1:|1:}1____({{{{(((_1|}34688a8abda9ecchmptAAyyyAAACAEEHJIMMLNOPQQQQQPPOOOOMMMKIHBBEEAwqqunjjkeb88bc62}[[[(", "({!!!';;;;;;;;;===%%&=%%%%%%%%==;;;''!{^_166aekvqwyyAwwwxzCBCBzxxuxxxAEHHKKKKMMMKIEEEAAwxtuuquuyAzxwyAyAyyxpprpppqqmjfbcba62}[[[[[[[[____((((^^^^:[:[[[1|}[[_<<__({{{{{((_<11|366a68899a8bbdflouwAAyyAAACCCEIIKNNOOPQQQQQQPPOOONONMKIHCCEEAxqqunjkkbb8acc62[[[[(", "({!!!!;;;;;;;;;===&%*&&&&%%&&=*-=;;''!^^126bagjrtvyywwwxxzCEEAzxuuuxxCCHHKMMMMNNKIEBDyyxxuupqquwyAwtwuwyztprppprrqqlifbb6622}}[[[[[(___]]((^^^^[[[:[[[:[[1:[_<___{{!!{{(((_}_|266a6668668aa9filotyAyzzAACCCHIIKNOOOPQQQQQQPPOOONOMMKIIEEEHAyuuunjjkb88bb822[[[[(", "({!!!!';;;;;;;;;===%***&&&&&=***;;''!{^_126bhgjqtvyywwwxxzBEBAxxuuuxxzEHIMNONMMMKHBByxxuxtspqrquwyxtuuttwtqmmmommmmljfbb662}}}[(((((__(](^^^^^^[(((((:[[:[:[}__<,'^^_122bbgjmstvvywwwxxzAEzxxxuxxzzzEIKMNOOMMKIECvvqqqronppoqtxywuqlnmptpoiiijjllliecba222}}(((((_(((^^^^^{{{{{{{((((((_:[:<<<<_]{!]]]^]]][[[[}}}2}222268a8bhipwwxuwwwzzBBEGJKMMOOPQRRQQQQPPPPPOONMKIIIHBwzwzppmkeabcc62}[[[[[", "(({!!!!';;;;;;;;;===;=-=====;;;;'''^^(_2268hgjmvvvvywwwwyzABzxxxxxzzzBIIIMMNNMMKIGzvtqqqmnnnonquwyxuqnkklppoifiifiiifecb622}}_((((((({^^^^^!{{{{{{{{]{{]{(([:_((:<]]!!!!]^{]:[^[:[:_2}2}266a8ahimpwxustwzxAAEEGIMMMOPQQQQQQQPPPPPPPOOMMMKIEyyxxppmmjbbhba2}[[[[[", "(({{!!!!;;;;;;;;;==*=;====;;;;;;,'^^^(_2288bgmmsvvvvwwxwyzzAxxxxxzzzCEHIIKKMMMKIEGCvsqqmnnnnnhmquwwuonkjiiooliiijiiiief86222}_(((({(({^^^^{{{!!]!]]{^{{{{{(](_((__]]!!!!^^]^(^^_[[1[[}}2226668gelqwttupwxxAACBGGKMMNOPQQQQQQQPPPPPPPONNNNKHAAxwpomkiififa22}[[[[", "[(({!!!!';;;;;;;;;;;;;;;;;;;;;','!^^(_}228bgjmvvvvvvywwwyzAAAxxxxzzCEEHHHIIKMMKKEEAwuqqmnjnnnjhmqtuunkkjfiloiffffccbife8622}}_((({{({^^^^{!{!!!!!!!!{{{{]{](]((](<(!!]!]^^^]]^^[[[[[[122226668bgkqtwsrtuuuyyBCGGILKMOPQQQQQQPPOOPPPPOOOOONKIEAyxokkhjhifb622}[[[", "[[(({!!!!';;;;;;;;;;;;;;;;;;;''!!!^(_}}2aabgjmvvvvvvywwwyzzAzxxxzzCEGHHHEIIIKMKIEEAvuqmmmjjjnhjjmuuonkheheiiifcfccc9bb98622}__(({{{({^^^^!!!!!!!!!!!{!!!{{{]]//(/_(]]!]!{^^]^[[[[[_[[222222888hghmwwsruuuuyxzACCHFIMNPPQQQQQPPOOOPPPOOOOONNMIIBAtpkkeffbb8622}}[", "}[(({{!!!';;;;;;;;;;;;;;;;;;>!!!!!{__}}28bdjmmvvvvvvyzwwwyAAzAxzzzCEEHHEHIIIJKKHEBAvuqmnmjjjjjjhmqunkkhbb8bfffbccc999988a62}__({{{{({^^^{!!!!!!!!!!!{{!]!{^]{]:<:::]{]^]^^]]]][^[[[}2}2222668adghottsuuuuzyxzzACHIFKNOPQQQQQPPOOPPPPPOOOOOMMKIECwtqmiifbaa866a22", "2}[(({!!!!';;;;;;;;;;;;;;;'!!!!!{{([[}2a8bdhmsvzzvvvvzzwwzAAzAzzABEEHHEEHHIIHHIHGEDvuqmnnjjjjjhhmquokfbbb888ffc9cc998866662}__({{{{({^^^{!!!!!!'!!!'!!{]]!{^]]:::::(]]]]^^]^]^[^[}}}}}2}2666a0dhjotxxuuuuwxxAzzCEIFILNPQQPQPPPPOOPPPPOOOOOMKKIHBBywtponc888826a2", "222}_({!!!!';;;;;;;;;;;;;;'!!!!{{^([[26aabhmmsvzzzvvvzzzwzAAAAABEEHHEEEEHHHIHEIHHEDwuqmnnjjjjjhhmqomkjcb8a68bc99995555866222__({{{{(^^^^{!!!!!''!'''!!!!]]{{{(:_:::({]^]^^^]:[[[[}}}}}}266aaaaeejnuwxuuuwwwwzzACGIIKMNOPPPPPPPOOOOPPOOOOONMMKHHCAwwxwwplhba8a226", "22222_{!!!!';;;;;;;;;;;;;;',!^^(([[[}266ademvvxzzzzvvzzzABzAACBEHHHEEEEHGHHIHEHEEBDwuqmnhjjjjjhkkmomjeh888a85095555335544222__({{{{({^^^{]!!!!'!]'!'!!!!{]]{{(:_:_<_]]]^{^^^[[[[[}}}}}226aaabbehmquywuuwwwwwzzzCGFHFKNOPPPPOPPPOOOOOOOOOOOOMKIEEAytwwxtpoheb8882", "222}2<(]^!!';;;;;;;;;;;;';'!,^(([[[[}668bhhhvuxzzzzzvvzzzCCzzBEHHHEEEEHHHHGHECBCEBAyuqnnnjjjjjhkkmomifea6aa475534224443||||2__({{{{({^^^{!!!!!'!'')!!]{!{{]{{(_<<<1_(]]^{^^^::_[[[}}2227aaa8bbhkmquxxvwwvwwzAzACGHHFKNOPPPPOOOPOPOOOOOPOOOOMKIEEzxxtwwtppplifba8", "a22}__(^^^^';;;;-;;;;;;;'''!,{([[[[}668abekrvuzDzzzzzzzzAABBABEHHEEEEHHHHHHHEEzBEBDyturnnjjjjhkkmnnmkjjc8a744432}22}}}}|1<_<<_(({{{({^^^{!!]!!!!'!!!]{{{{{{]](__|_1__]^]^^]::::[[[}2227778888hhkmquyAxwwwwxzzzACGHFFKNOOOOPOOOOPPOOOOOOOOOONIHHBBwxxwwuqqppolihh", "h8a2__(^^]^!'';>;;;;;;>;'''!!{([[}}6668abkkqvxDDDzzzzzzzACBCCEHHIEEHHHHHJEHBEEzCGBDAxurmmjjjjkkkmmnmkhheba541}22}}22}}}::^(_((((({{({^^^{!{]^!]!')!]!!]~{({((:[<}|11_]]]^^^:::_[[22277777888bgkkmpuyyyxxwDAzyACCGHHFKMOOOOOOOOOOPPOOOOOPOOOMIHEEAAxxttpqqqnoplli", "mfc61_{!^]^!!!!''>;;;;;;;;'!!{([[[2228abkhrvvxAADDzzzzzzzACABEEEHHHHHHHIHGHBCAAzAAAAxuqrnjjjmkkknmlmlfcfec74[}2221111_}:::]^]{{{{{{({^^^{{]!^!]!!]]!]!{]{/(((_1|}}111:::_([_::}222277777a888bghkqptyAywzyDAAyyCCGHFFFKMOOOONONOOOPOOOOOPOPONKGCByyuxyyppmmmmoopl", "lifc9|_^]!!^{~{{'';;;--;;;'!!{(:[222600bkknvuDBBBDDDzzzzzAzABEEEEGEEHHHIHGEBEACCAAAAxxsqmjmnkkkmmmlmlifiic04}}}1_<<<<;-;;'''!{[[2260bagnnvuDDBECDBCzzyADzAAEEBAAAEEHHHHHEEECBBAADAyxxuummnmkkkkkmjmmifiic92}}_<|',''!{[[2260bhgmvutyCGEBDBzzzyDxyABBBAzAAAEEHHIHHHCBCAAADAAzzxupmnmmhkkkmjklifffd922}_<<<(((/{{{)),''>;;''!^^^^]({{{{{{{{~{{{]](____}11|4|221____1114446aaaa0adbeffehmmmqtwEECCAzzzzzzCEHIFFIMNNNNNMKLNOOOOOOPQQQQOMKFBzzwytusmmmqqurmf", "e9aa7445cd95}<]^]!'''''';',''!{[:22a0ahnnvvvDBGBBDBzzwyzyDBEzxxAzAABHIIHHIHGCEABAAAAAAAzturmnhhkkkjkiidccd5221_<<__((({{{!'',;;;;;'''{^^^:{({{{{{{{{({]((__:__|114414}_____111226666aaaa9behjilqqqtyEECCCzCAzzzCEHEFFIKNNNNMMKLMOOOOOOPQQQQONKHFAzzyywprssmqqlif", "e8a85375955743}:^]!''''''',''!]^[22608gnjvuvDAGBBDzzzwvwyABAzxxxzAABHIHHHHHEEBAAAAABAAAAwuqmnmhkkhkkiicccd963|<<<<_(~~~)),''';;;;;;'''{^:[{]{{{{{{{{{{{^(__::<|11442|}[[[_[}}222aaaa0898abbbejlquuwyBEEEEEEEBBBEEHEEFIKNNNNMIKLKNOOOOOPQQQPONMIFDAzzzvvvrrsmhgfb", "baa777753}}}3437}_]!'''''!!!'!{^[2260agljqqwDADBBDzzzwywzAzzxxxxxABBEEEEBHHHBAAzyyAAAAAzwtqrqnmhhhkkiifcccc654|____~{~~))''>;;;==;;;'']{:[(({]^]{{~{{{(((_::<1|4443332}[[}}1222000aa9c9aaaabejoquuuyBEECHFIHHEGEEHEEEHKMNNNMKLKLMOOOOOPQQQPPNMIHFDAzzzvvvvrmegba", "222|7572[<[:|1|742|[!)'''!]!!{]][22678gjjqqwDDDDDDxzwxvxzAzxuuuxxzBEEEEBEHHBAAwxyyyAAAAwttqrqqljkhkkkiiecdc954|___//{~)),>>>;-====;;'''{([[((]((]]{/(((((__<:11|4353552}}}42770ddabbdccccdhgiopptxwABEGEIHIFIFFFEHECEHIMNNNMKIKLMOOOOOPQQQPPOMKHHEEEAzxxvvrmedaa", "2}}1774[[:[::[|4443|:{!''!!]^{([[}}6a8gjjqquDAADDDxzwwuwzwxuuuuxxxBEEEEEHHBAyyxxzyyyzAzwwtpqpooljjjkkiifcdc993|<__//)))),>>--*%%%==;;''!](:((](((]]/(((((_<_<1|435575955775700ddihhggfffikimopptwwxABHEEHIKKKIFFEIEECEIMNNNMFILMMNPOOOPQQQQPONKLHHHEFzzxxxrmed86", "2}}131_^]:^::_14|1233}({'!!!](__:}2778gjjrquDAADDDxxwwwwzxusuuuxxzzBBBEHHByyxxxxxywwyyAwwupuqnoomkkkmiieffc995|<__//~))),>;--*%%%%*;;;,!{{(_((:(((:(/<:__<_1|4377590990775000ddijifikfiiimmmmpqppwwABHHHHIKKKIIIHIHECEIKNNNMIIIMMOOOOOPQQQQPOOMLKHIFHDDzxvrmed86", "2}}1|_{^^]^_<_1111:}334<^]!!!{(:}22778dikmquwADDADxxwwwyyuuqvvuxzzzBzEEEAAwuuuuxxwwuxxxwwtrqooopmmmmmllffffc97||;-=%&&&&**-;'!]]([(__:_::/_<<<<|11|4355599900557909ciiiigggkfiikkkkmnnrtxxBHHHIKKLLKIIKKIEEEIKMNNKIFILMOOOOPPQQQPPPOOMKLKIHFDzxvrmed86", "2}2__{{{{{((__111<_[}323|:]!!{{[}62088djjmqtwAADAxxxxzwyuuqvvvuxzzzzBEEAywuuuuuupstpuxxtwuqqlnnmmmmmmoliffc9673|_//~~),,,>-**%$$$&&=--'']{]_______<<<<||||3||47579999990099ccgiiiijgggcfghhgggijjquuyBEEEIKMKKKKKKIHEHIKNNNMIHIIMOOOOOPQQPPPPOONMLLMLHDzxvrmed86", "222_({{!!{((_11311_[<:}2|11:({/:[220agdjmmqtvAADDyvxxywyuqqvvuuxxxzBEEAywutuxuspppsqutxuwtrnmlkmomliloonifc9663|1>>-**%$$$$%==-''!{((1<_<1<<|<||||||33347799ccffdccccfgjkkggddggcdbbdhheehmqqwAEECGIKFFLKKKKIHIKMNNNMKFIILOOOOPQQQPPPPOONNNMMLHDzxvrmed86", "22}[(({{{{{{__2221__](:<11|||1_::220bghjmmquvyADDyuxwzyyvqqqqrruxxzGEAywxuxxtpprrppquuxtwtqqnjkjjillnilolif9a63||>>-*&&###$%%==>''{(_1<|<|111||||||33357709cccffcc99cghhhhjghddgdbbhbdgeehmmqwABBCBHIKIFIIKKIHIKMNNONKFFIMNOOPPQQQQQPPOOONLNMLHDzxvrmed86", "22}[(({{{{((([}}2|__^](::<||752}}2609gglmnqtvyADDxvxwAyxqqqqsrquxzBEBAyxxuuxtutsssppstxtwtummkhkehijiilolij9aa3|1>>==&&####$%*=>>'!{(__1_111||11||33355900ddccfgc99ddhehhhhhhddddbbbabheeemmmtyCBCCHIFIFIIKIHEHKMNNOOMKFKKOOOPPPQQQQPOOOOOONMLHFzxvrmed8a", "a}[[(((((({{[[[}}_1<<]^]^[_1459556678gglqqqtvyADyAvxxAwwqqqqvrruxzBEAywxwxxttwwyvvwwtxywyutpmmkheehhiiloilic9673|_<~~),>>;==&&####$&**;>,!{(_|||||1||1|33335599990dccfffddhhhghhhhhghdddabbbhheeehmmqyABBCEHFKIIIKIEEHKMNNOONKKKMOOOPPQQQPPPOOPPOONMKHFzxvrmed88", "a2[[[(((((([:[[}[}<__]^^]^]_|3999990adgjqqquwAADDDwxwzwwmmqqunruzACyyywxwxwyAEEEEBAAAAAAAwwsomkhhbbbejliiiif9673|_;===%$@@@@$&&*-;'){{(_|11|||11133555569990cccghfebhhhghkkhjfgdgggbbehhhjjhmqqyABCCEFIIFIIKKIHIKMNNOONMKMNOPOPQQQPPPPOOPPPONNKHFzxvrmedb8", "8}[[[[((([[[::1}}}_|__]/](^<<1599cfdbggkqpqwyAAADDxxyAwtsmqqquoxzzywwxwyAABEHKMKIIHEEBAAAAAwpmmjjbbbfiiiiiifc953||-==%%$#@@@#&%=*>>'!)(__1<1||43347555599999ddghfifghggklnjmmmiigghhfhghggjjqquyAEBCCHFKKIFKKIHIKNNOOONNMMNPPOPQQQQPQPOOPPPONNLLFDxvrmmhb8", "6}[[[[[[[[::}22}}}}_<_<_:/(__137ccfgfigimmqvyACADDzzzAztsmqqqquxAAvtwwABEEHIKMMIEEBAAywwyABytqnjjgbhhhgiiiifd99531;==%%$@@@@#$%%=;;,,!~(__|_|||33555550999cccdggiiijkjlooommmollkkkffghghkjjnquAAEBCEFIKKKKKKHHIKMNOOONNMNNOPOPQQQQQQPPOPPPPONLLFDxvrmmjga", "a6}[[[[[::[}22662}}(//<_<__<_}|580fiimomrqqwyAEADDAzAywusmqqqvxzAwtwxyBEHIKKKKEBAwwwxwtwyyAywqmoijijhfhfiijif8853|<<~)),;=%%%#@@@@##$%%*;;,!{/_<<||1|145559709cccffiillllllopprpppppoommiiikkkkkknmuuAAEECEFIKKKKFKFHHKMNNOONNNNNOOOPQQQQQQPPPPPPPONLLHDxvrrmhgb", "66}}[[[[[}}2288864}}({{(1||1_}|298fgiopprqqvvACADDDzzvvsssqqquxzzttwyAEIIMKIHBAywtttxwwwyyAywtpmlmihehcfiiiff9973||'!~/_<<|||3355999ccdgfgiillllollnoorrpmoqoommoloompqpqttyyEHIHGHKKKKKLKKFFIKMNMNONNMNNOOOOPQQQQPPPPPOOOOONLHFzxvsmhdd", "8666}222a6bbfeifif92[((/_|<_}}2269dfmmpwwwwwyABEBDEEzxvvtutqqxwxxwyABHIIHHHEEEEEHEEEEEBBABAAytpoliiiighceffgcc8953|;%%$#@++@###$&==;>,!~/<<<<||3335599ccggfiijllnnlloooopppqqpoomomlmmmopqqttyAEIKKIIMMMMMKKLKIKKMMMMNMMMNOOOOPPQQQQPPPPOOOPPOOKLFBxvsmmed", "86666226bbbccjjefc6|[(((((/(::2669dckkptwwAAAACEGEHEAxxxwstuuxxxxwAEEIIHEHIKIKIIIHIIHIEEBEBAAwppojhfiffcddddc88653|;*%$#@++@@##$%%*;>,){//<<||||355599ccggfiijllonpppppttwwtxwttpttpppppputtwAAEIKKKKNOOONNMMKKKLNNNNNNMMNOOOOPPPQQQPPPOOOOPPPOMLIDzvssmed", "d86688abcbccehgif86}}[(({{{^:[}659dekoouuwABEBEEEEHEEzxvvwswyDuxzBBEHIHHIKMMMKKIIEHIHIIIHHEBBAwponijijfcccccc98655||<~),>;*%$#@++@@#@#$%*->,,)//<<<||||35599ccfiiillooppttwwwwyyyyAAyywwywwwtxzzyyABCHIMKKMNOOOOOOOMMMMNNNNNNMMNOOOOPPPQQPPPPOOOOPPPOOMIFBzytmme", "ddba88bbcciikggfc82}[:[{{^]^^::27dffkooptwABEHHGHIEEBAxzvvwwzyuxABBHHHHIKMKKKMKIIHHIHIIKIHHEEBAtpnjffefffcd9c996533|,)~///<|||335599cfiilopppttwwwwwwwwywwwwywwuppppptwwyzABEHMNNMOOOPPPPPPPOPPPPPOOONNOPPPPPPPPPPPOPOOOPPPOOOONMIEAzsmm", "jjkkkhfhgkmmonkg6a6[::[:[[[:::2}60agkoupuwyABHIKMKIHBDDzzzACAyACEHIKHIIIIIHIIIIHHEBBAEEEEEHEEEBytoifbhcfdcccc9533|||,)~//<<||3355599cffillppptwwwwywwwyyyywyywwwutttttwwwyyABEIMMMNOOPPQPQQQPPQQQQPPOOOPPPOPOOOPPPPOOOOOPPPOOOONMMKGAwtq", "qnokkkggggillqjg862[}[[:::[[[222788glouuuyAAEGGKNNKIEBBDzzBBAABEEIIKIIIKKIHHEHHEEAAyyAyyAAEEBEBAwpljeedcc9ccc953||||<<~),>;%$#@++++@@#$%%*--,)~/(<||||355999ccfiilopptttwwwwwwyyyyyAAAyywwwyyyAAAAzEEIKMMMNNOOPPOPQQQPQQQQQQQPPPQPPPOOOPPPPOOOOOOPPOOOOONMKGEBwq", "xuronljeejjjqmhd8666}:[:[::[[22608ggjppuwyAAEEEKMNMIIEBDEBEEBEEHIIKKKIIKKHEEBBBBBAzyywtwwwAEBBBAwpoijedd99cc9953|||<<<~),>;%%#@++++@@##$%*-->)~/<<<|||355599ccffiiloptwwwwywwwyyAAAyyywwywyyAAAAACEHHKMNNNNOOOOOOOPPPPQQQQQQQQQQQQQPOOOPPPPOOOOOOOPOOOOOOMMKGEAA", "Eywuoljeemmqmmed8aaa}}[[:[:[422a08ggioqqwyAAEEHKMMMKKIEEEEEGGHIIKMKKKKMKIEBAAAAAAAAAywttpuwAABAAwtolifdda8c995531|<<<<~~,>;=%#@++++@@@#$%*->,,~/<<<||||335599ccfiiloppwwwwyAyyyyyyywwwwwwwtwwxyyAEEEKKNOOOOOOPOOOOOOOOPQQQQQQQQRQQQQPOOOPPPOOOOOOOOOOOOOOONKHHHE", "HHAyuqqmmqqqpmhdd8662}:[:[:2226788glinqqwAAEEEIKMMMMKKKHHHFHHFKKKMKIKMKIEBAABzAAABAAAwxupqtwyAAAwtpoljgd890999541<<<;=%$@++.+@+@#$%%->,)~//<<<|||3355999cfiilopptwwyyywwwyvwwuutttpstquuuxAAAEHIMOOOOPPPPPPOPPOOOPQQQQQQQQQQQQQPPOPPPOOOOOOOOOONOOONMMMJII", "KHHEwuuqqqwtpkked82222[:[:22}267agglrrqtwyAEEHKKMMMMMMKKKIIIHKMNNMKMMKIHGEABBAAyyDyyyyuupttwwyyAywtpoifd09999953|1>=%$@++.+@+@#$%*->,))~//<<<||335599ccfiillopptwwwwwwwywwwvxxwwwwwwwwyAAACEGHKNOOOOOPPPPQPPPPPPQPPPOPPQQQQQQQQPPPPPOOOOOOONNNNOONNMNNMK", "MKEEEBAyyywtpkmeda82222222222607aggkqrqvvAACEIKKMMMMMMMMMMKKKMNNNNMMMKEEEECAywwstsstzwuuutwwwwwyywtpplic98999953|<=&$#++.++@##$%*-->))~//<<|||355599ccffiilllpptwwyyyyAAABBAABBEBABBBBEEHGIIKMOOOOOOPOOPPPQQQQQQQPOOOOPQQQQQQQQQQQPOOOOOOOONNNOOOMNNNNN", "MKIEEEBBABzypmkb0082266689889909ggkjmquvvABBEIKMMMNMMMMNMMMMMMNNNNONKIHIBBzzzxssrrruuuuuputwwwwwywwtolifcb955553|=&$#++.++@##$%*-->,)~~//<<<||35599cccgffiloptwwAABBBEEEEEEEEEHHHHGHHKKKMMNOOOPPPOPPPOPPPPPQQQQQQQPOOPQQPPQQQQQQQQPOOOOOOOONNOOOOMMMNN", "KKKHHEHIIEAAtmme0088688cccfjiigfkglmnqtvwyBBIIKMMNNNNMNMNNONOONNNOONMIHEEAzxxuuuuuuqusuuttuwtwtwwwwtooiib9955553|<-&&#++.++@##%%*-->,,~~/<<<|||335599ccfiiloppwyABBBBBEEEEHHHHHHEEHHHIKKMMNOOOPQQPQQQQPPPPPPPQQQQQQQPPQQQPPPPPQQQQQQPPPPPPOOOOOOOONMMMM", "KIJIKIIIIIHBwtmefd9ccffccfiilklqmporqqwvyCAEHIMMNNNNNNMNNOOOOOONOONNKKJEBzAxuuuuuvvqqqqtuspttttwwywwpoliec957533|<-&&#+++++@##%%*-->,,~~//<<|||333599ccfilopttwwyAABBEEEEEEEEIHEEEEEEHHIIKMNOOPQQQQQQQQQQQQPPQQQQQQQQQQQQPPPPPPQQQQQPQPQPPPOOOOOOOOMNML", "FIIIKMKIIIHECwmmigkilifccffkkllpptupqtvvyCBHHIMMNNNOONONNOOPPPPOPOMMMIHHGAzAxuvuuuvqqqsttqutttwwwyywppliec95733||-*&#++++@@##%%*-->,,~///<<<||335599cfilloppptwwyyAABBBBEBBEEEEAACCBCCEIKMNNOOPQPQPQQPPPQQQQQQQQQQQPQQQQQPPPPPPPOOPPPQQQQPPPPOOOOOONMK", "KIIILMNNMKEEEAupnomoijfeccgggjomttxxuvyAyCBBHIKMMNNOOOOOOOOPPPPPPONMKIJGECzyxywvuvuqqvsuupuwwwwwwyywtplif9997731<<({~!),,>>-*&$@+++@@##%%*->>,))~//<<<||335599cfiloooppptwwwAAAAAAAAAADBBBAAAAEEHIKMMNNOPPPPPPPPPPPQPPQQQQQQPPQQQQQQQQQQQPOOOOOPQQQQPPPPPOOOOOMM", "MLIKKMNNNKHCBAxxttqoifbc9dddeekmpuwwyAAyAACBIIKMMMNOOPOOOOPPPPQQPONMKIJJECBzxwwwwwtttvstqstuwwwwwyywwtoifc9973||--**$@+++@@##%%*->>,)~~///<<||355599cfiloooppptwwwyAABBBBBBAAABEDBDEEHHIKMNNOOPPPPPPPPOOPPPPPQQQQQPPQQQQQQQQQQQPOONNOOPQQQQQPPPPPPPOOM", "LMMMKKMMMKIGCAyBywpokgddd00bbggoostxAAADyABEEIIKMMNNOPPPOPPPPPQQPONMKKIGGGCzzzvvwttttsvsuvttttwywyyywtplicc053|||>-=**$@+++@@#$%%*->,,)~~~/<<|||355559cfiioooopptwyAAEEEBEEBEEEBEEEEEHFIKKMMMOOOPPPPOPPOOOOOOOPQQQQQPPPQQQQQQQQQQQPOONNOPPQQQQQQQQPPPPOO", "ONMMMMMMKKHEEABABywmkgdd00bbgggmlpuwAAAADAAEHIIIKMNOOOPPPPQQPQPQPPONKKIIGGCCCzDytuutssvtvusuutvwwwwywttoicc973||<>--;=*$@+++@@#$%%*->,,))~~/<<<|||35559cfiilooopptwyAABEEEEEEEEEEHEHHHIIKMMMNOOOPQQPPOPPOOOOOOOPPQQPPPPPQQQQQQQQQQQQPPOOOPQQQQQQQQQQPPPPO", "POOONLMLIIEEEEEAzwtpmgdd0bbbggllqruwAAAAAAAEHHIIIMMNOOOPPPQQQQQPPPOOMKLKIHGCCAAAxvvvvvvtwuusuttvvwwwwttplic973||--**=*%@++@@##$%*-->,,))~//<<<<||35559ccfiillmopptwwyBBEEEEHIEHHHIIIIKKKMMNNNOOQQQPPPOPPOOOOOOOPPPPPPOPPQQQQQQQQQQQQPPPOPQQQQQQQQQRQQQQP", "PPOOOOOMIFECEEHAytpppligecbgggnmrqquwwADDAABHHHIKKMNOOOPPQQQQQPPPPOOONKKKIIGCBAAzvvvvvvtwxxvutwwwwwwwwtpoifc95||<-;**%&%#@#@@##$%*-->,,)~~//<<<<||355559cffiikllopppwwAABBBEHHHIHEGJHJJIIMMNNOOPQQQPPPOOOOOOOOOOPPPPPOOOPQQPPPPQQQQQQPPQQQQQQQQQQQQQQQQQQ", "QQPPPOOLIFBCEEEAywppppoljekggnlrvqttttxDABDEEHGIIKMNNOOPPQQQQQQPPPPOOONKKKIIHGGCCzzzzxwvxxxuuwwwyytwwwtpoifc95|1<--=*%&$#@##@#$$%*-->,,)~~///<<<||335559cffiiiillooptwyAzAAzEEHHHIIJIIIMMMLNOOPPPQQPPOOOOOOOOOOOPPPPOOOOOPPOPPPQQQQPPPPPQQQQQQQQQQQQQQQQQ", "QQQQPPOMIHECBEAwwwpooppolmmkknnquutuutuwDDEEEHEHIKKNNOPPPQQQQQQPPPOOPOONNMKKKKHGCCCCzzzxxxxxvwvyyywtttwtoifc9531--;=%%$$#@##@#$$%**->,,)~~///<<<||3355599fffiiillopptwwyAAzABEHHIJIIIKKMMOOOPPPPQQQPPOOOOOOLNNOOPPPPPOOOOPPOOOPPQQPPPPPPPQQQRRRRRRQQQQQRR", "RQQQQPOMKIHCCAwwuuuoooppuqmmqmrruttqqqutwDBEEBGEIIKNNOOPPQQQQQQQPPPPOPOOOOMMFIIHGCzzzAAzzxxxvwyyAAywwtttolfc9531>-*=%&$$#@####$$%*-->,,)~~///<<|||3355599ffiffiiloppptwyyAAzBHHHIIKIKMMNOOOPPPPPPQQPOOOOOONMNNNOOPPOOOOOPPPNNOOPPPPPOPPPPQQQRRRRRRRRRRRRR", "RRRQQPONMKKCzytuqqtuoooutuqtqqvvutuuuqqquwBEEBGEEIIKNOOPPQQQQQQQQQPPOOPPOOOMKIIHFECzzzAAAzzyyyyAAAywwtttplfc953|>-*%&&$##@@#$#$%%*->>,))~~///<<<|||355599ffifgiiloooppwwyAAABEHHIIKKMMNNOOOOPPPPPQQPOOONNONMMMMNOOOOOOOOPPPNNNNOPPPOOOOPPPQQQRRRRRRRRRRSR", "RRRQQPPOOMKEAxutmqqutuuquuuwtxuuuuqquqqquwAEEBAECHIKMNOOPPQQQQQQQQQQPPPPPOOMLIFFHEEzAzzzABAAzAAABBAyywttpoic953|--*%%&#@##@#$#$%%*->>,))~////<<<||335599cfffgfiiloloopwwyAAABEGEIIKMNNOOOOOPPPPPPQQPOOONNNNMMMMNOOOOONNOOPPONNNNOOOONOOOPPPQQQRRRRRRRRRSS", "SRRQQPPOONNHCyputmqquuutupwywyxxwuuqqqquuuyEEEBAEEIKKNOOPPPQQQQQQQQQQQPPOPNNMMKIHHEEDDDDABBBBABEEEBAywwtpoic9531-**%%&#@@#@#$$$%%*->>,,)~////<<|||335999cffifiiililopptyyAABEEEHIIKMNNOOOPPPPPPPPPQPOOONOONMMMLNNOONONNNOOONNNNNNNNNNNNNOPPQQQQRRRSSRRRSS", "SSRQQPPOOONKEAyttmmqquuuupwwAAyxwuuuuqqquuyAEEBBGEHIMNOOOPPPPQQQQQQQQQPOPOOONNMKIIIHEDAAABBEEEEEEEEBAAwwpoic953|-**%%$#@@###$%$%**->>,,)~//<<<<||3335599cfffffiililooptyyAABEHHHIKMMNOOOOPPPOOOOPPQPOOONNONNNNMMNOONMMMNOOOMMNMMMNNNMKMMNOPPQQQQRRRSSSSSS", "SSSQQPPOPONKJEAttmmqmqquuwwwAAAzyxuuuqqqquxyDDEEBEHHKNNOOOPPPPPPQQQQQQQPPPPPPONMKKIHHEDAABBEEEEEBEEBBAwwtplf953|-*%%%$##@###&%$%**->>,,)~//<<<|||3335599ccfcffiiiilopppwyyAAEEEHIKMNNOOOOOOOOOOOPPPPOOONNONNNLMMNONNMMKNOOOMMMKKKKMMMMKKMNOOPQQQRRRRSSSSS", "SSSQQPPOOOMKIHEwutqqqmqqwwwwyAAAAyxxuuqquuwyyABEEEHIKNNNOOOOOPPPQQQQQQQQQPPPPOONMKKIHHBBACBDEIHBBABEBAywtpoic95|<-*%%%$##@#$$&%%%**->>,))~~/<<||||||3359cccfcffiiiloopptwAAAAEEEEIIKMNNOOOOOOOOOOOOPPOOONNOMMMMKKMNNMMKKKNOOMMMKIHHKKMKKKKMNNOOPQQRRRRSSSS", "SSSRQQPOONMIIHHAwwwqqqqttwwAyzAABAxxxuuuuuwwwyABEEEIKMNNNNOOOOPPQQQQQQQQQQPPPPOONMMIIHEEBCCBEIHBAAAABBywwppif953|-**%$$##@@#$&%%%*-->,,)~~//<<||33333559cfffffiillloopttwyAAAEHEEEIIKMNOOOOPOONNOOOOPOOONNMMMLMIKMNNKKKKKMNMMMMKIEEJHIKKIKKNNNOOPQQRRRSSSS", "SSSRRQQOOMKKHHEEywwwyywtttwAAzzABAzxxuuuuuxwwyyAEEHIMNMMNNNOONOOPPQPQQQQQQQQQQQPOOMKIHHEGBAEEHEBAAAABAAywtplfc53|>,))~~//<|||3333559cffiffiiilllopptwxAABBCEHHHHIKKKMMNOOOOOOOOOPPOOONNMMMMKIKKMMKKKIFMNMKKKKIHEECGHHIIKMNNOOOPPQRRSSSS", "SSSSRRQQPMKFEGCByywwwywtppzAAzzDEBAzxxuuuxxwwwyABEHIKNMMMNNNNNOOPQQQQQQQRRRRRQQQPPONMIHEEEEEEEEEAAyyAAyyywpoic95||//~),--*%$$##@@@$&&**-->>,))~~/<<|||3335599cffffffiiiillooptwyABBEEHHIIIIKKMMNNNNNNNNOOPPPONNNMLLMKIIKMMKKIFKMNMKKMKFHEECCCEGHIKMNNOOOPPQRRRSS", "SSSSRRRQPOMMIGAzAyyywwwtuxwxzAAEDAAAzyxxxxywtuwDBEHIKMMMMMNNLNOOPQQQQQQRRRRRQQQQPPPONKIIIHHEEEGBBAyywwywwwtpif993|-*%%$##+@@$%%*--->>,,)~~/<<||333355599ccfccfgfiiiiloopptwAABEGHIIKKKKMMNMNNNNNNOOOPOOONNMKLMKKIKMMKKIIIMMKIKMKFEEEzzzzCGGIKMNNOOPPQPQRRS", "RSRSRRRQQPONMICAAzyAywwtxtttzABEEEAAAAxxxzyxuttxBEIKKKKMMMMMNNOPQQQQQQRRRRRQQPPOOOOPONKIHIIIHHEEAAyytwwttttplfc953|**%$##+@@#%&---->,,,)~~/<<||3|3335559ccc9ccffifiiiloopptwyABCEHHIKKMMMNNNNNONOOOPPPOOOONLMMKKKKMMKIIHFKMKIKKKFFFEzzzzzzEEHHKNNOOPPPPQQR", "RRRRRRRRQPPONKHBzAzyAyzywttxxAEEEEEAAAAyzAyxutuxAEIMMKKKMMKKKNPPPPQQQRRRQQQQPPONNONOONMKIIKIIHEEBBAwttwttppplfc953|<--%$#@@#$&==--->,)))~~//<<||33333559ccccccdfffiiiilnrptwyyAEEHHHIKMMNNOOOOOOOOOOPPOOONNNMMKKKMMMKIHHFKMKIFKKIFHEzzzzzzCCCGGINNOOPPPPQQ", "QQQRRRRQQQPONMIEAzAzBBBzywxxuzBEHDEDAAzAAAAxuuxyABIMMKKKMKKKKMOOOOPQRRQQQQPPPPOONNNMNNNMKKKKKIHEEEBywtttpppolfc953|>-%%##$&&*-->>>,))~~~~//<<||3333599ccfdcffcfffiinnrpttwyAABEHHHHIIIKMMNNNNNNOOOOOOOOOOOOOMKKMNNKIIHIKKFFHIIIIHEBzzvxxzCCCCGHKNOOOPPPQ", "PPQQQRQQQQQPONKHEAzAABEBAzxxwDAEEHEDAAAAEBAxxuxxzEIMMMKKKKLKMMOOOPQQRQQPPPPPPPPOONMMKMNNMKIIKIIHHHBAytwtppoolic953|>-*%%$$&**;>,,,,))))~~~//<<||335559ccfccfffffiilnlnpptwyyAABEEHHEEHHIIKKKMMMNNNNOONNNNOOOOONMNOOMIIEEHIIEEIIIHIIBzzzxwxyzzCCCEKMNOPQPP", "POPPQQQQQQPPPONKHEAAyAABBCAxwyAAEDEAAyzAEECzxxxzAEIMMMMKKIKKMNNOOPQQQQPPPPPQPQQPONMMKMNNNMIIIIEHEHEBAwwttpoolif953|>-*%%$###%=;>,)))))~~~~//<<|||355999cccccffffeiiiloppttwwwAAAABEEHGEGGJIIJIKKMNNNONMMKKMMNOOOOOOONKIEEHIHBEHIIHIICzzzwwvvvvyzzCCIKMOPQP", "POPPOOOPPPPPPPONMKHAzxzzBBCzzyADEDDBAyAzBEEAzxxzAEKMMMMKIIIKMNNOOQQQQPOOPQQQQQQPPONMKKNNNNKIIIEHEEBAyywtwppoolic933|<~))>--*%$#++@#%*-,,))))~~///<<||33559cccffccffcfeiiilloopppptwwwAABBEEEHJHHIIJIIKKMNNOOMKIIKKMNOOOOOONMKIIIKIGCGIIEIIEzzzxvvvvvvxyzCCELNOPP", "POOONNMNOOOPPPPOONMHAxxyzAACAzADDDEBAzAABCCBAzzzAEKMMNNKIIKKKMMOPQQPPPPPQQRRRRQQPPONMMMMNMMKIHHHHBAAywtttpooolif955||/~),>-*%#@++@#$%=->,,,,))~//<||335599ccfffcfffffiiiillllmmooqssvyADBEHIIHIIILIIKLKLMNNNNMKFIIIKMNOOPONKKIKKMKHGGHEEHIECzzvvwvvwwvxyAzCHMNOO", "OOOOOMKIKNOOOOPPONNKBwxwxzABCzAABBAAAzAACEBBBAAzBHKMMNNMIIKKMMOOPQPOOPQQRRRRRRRQQPPOOMKKKMMKIHHHEBAAAywtpoolllifc9953|/~),>-%#@+++#$%%;>>>,,,))~/<<||335559cccccffffiiiijliiiiillmqtwwDABEHIKKKIIMKKKKKKMMNNMMKKKIIKMMNOPPNKIIIKMIHEGHECEHECzzxxwvvwvvwzyyzCIMMN", "NNOONKIHIKMOOOOOOONMIBwxwwyACCCBBEAyzAzAEEAABBBBEIKKMNMMKIFKMNOPPPONOPQRRQRRRRRQQQQPONKIIKMKKIHIEEBBByywtpoiiiffc9553|'>,)))~/<<<||33555999ccfffiiiffffgfggkkmmqptwyDBEHIIIIIIIIIKKKKIKMNMMKKKLKKKMMNPPOMKHEIIIEEGJHHHHICCzwwvvrrrppwyzzCGHKK", "MNONKIHJEHIMONNOONNMKEAAxxwzACBCBBAzzAzBEEBAABEHIKMMMMMMKKKKMNOOOOMNOPQQQQQQQQQQQQQPPOMKIKMMKIIIHEBAAAyttpoiiifc9953|<-%#++@#$%**;>'',){~~//<|||33355999ccfffffccfccccggkkmoqqutwyABBEEHHIHHHIIIKKKKMMKKKKKKKMMMMNOPONMIHIIHBCBEIJIIIECzxwvqrrrrrssxzzGGEI", "KMMMIIHEEEHKKNNNNNNNKHEAzwxwyCBCBBAAyABBEECAAAEIKNMMMMKIMMMMNNNOOMMNOPQQQQQQQPQPPQQPPONMKKMMMKKKIEBAAywttpoiiifc995|<*%$@+@#$%%*->''){~{///<<||||3555999cfcccccccccccgggimmpquutuwyABBEHHIIIIIIKMKMMMMMKKIHIKKMMMNOPPOOMKKIHDzABEEIIIHGCyvvqrrrrrsssvzBCCE", "EHIIIIHEEHHEHKNNNNNNKIEEAAwwwyACBCBBzCCGEBzACAEINONNNMIIKMNNNNOONKMOOPPQQQPPPPPPPPPPPOONMMNNNMMKIEAyywwtppoiiffc9953|<~),>*%$#+.+@#$%*>>)!~{/(/(<<|||3355599ccfccccc9cccccgggkkmmqqqqutuwyBEEHIKKKKKKMMMNNNNNMKKIIIKMMMNOPPOOONNKIDzzzACEIHHHEAAussrrrrssstzBAzC", "CHHGCEHHHHEEEEIMNNNNMKIEBBzwwwyABCBBBCEHHBzzCEEIMOONNMIHKMNNNOOOMMNOOPQQPPPOPOOPPPPPPOOONMNNNNMKIEAywwwtppoliffc953||/~),-*%$#+..+##$&*>,){~//<__|||335559ccfccccccccfcccfggilmoomqquuxwyAEHIKKMMMMMMMMMNNNONNMMMKKMNNNOOPPOOOOOOMEBAzAzBHEEGEEBwtsummmmssswCAvz", "CEECCBEEBBBEEEEHKNNNNMKIEBBAwwwyAACBEEHIIEAAAEHINOOOOMIFIMNNNOOONNOPPPPPOOOOOPOOPPPPPPOONNNNNMMKIHBywwwttpoliifc953|-*%$#@++@#$%&*>>,!)]~(((<|2335999ccfffffffffffffkilooooppptwxzACEEHIKMMMNNNNNNMMNNONNNNNMMNNOOOPPPPOOOOONIEABAABGEEEEEBwwummqqmmmtwwzvz", "ABBAzCABBAABBBBBEINNNNMKIHEEAwxwxzzzBEHIKHBBBEKMNOOOOMIIIMNNNOPOOOOOOPOONNOOOPOOPPPPOPOOOONMMMMKIHEAywwwwtpliffc933|-*%$#@++#%%=*=>>,!~{](/__<|335999cccfccffffffffiiloloppptwzAABEEEEEHIKKMNNNNNMMMMNNNNNMNMMMNNNOPQQPPPPOOOMHEBEEEHGCCEBzxxwuuuqqmmqwwtwv", "AAAzwwyABAAAABBBBEIMNNNMMKIEEAxwwwzzyBGHIHEEAEIMNOOOONKIKMNNOOPOOOONNNNNNNNNOPPPPPPPOOOOOONNMKMKIEEAywwwwwtplic9553|-*%$@+.+@$%**->,'!!~]/<__135999ccccccccfccfccdfiilllopptwyAAAABEEEEHIKMMNNNNMMMKMMMMMKKKKMMNNNOPPQPPPPOOONKIHHHHHGCCBAwttquuuuqmmqquspv", "wwusuwyAABAAAAAAAAEIMNNNMMMKIEAzxwzzyyAEHEEEAzEKNOOOONMKKMMNOPONNOOMKKKMMMMNNOPPPPPOOOPOOONNMKKKIEEAywwtwwtpoifc993|*$#+. .+@$&%=->,,']/<<<1|5cfffccccffffffffcdfiililoptwwyyAAAAAEEEHHIKMMNMMMMKIIKIIIIIHHHIKMMMNOPPPPPPPPOONMKHIIKIECBBwtuqquuuuqqqqqssu", "wwssstwyABBAAAAAABBEIMNNNNNMKIEAAyzAyyAEEEEECABHMNOOONMMMMMNOPONNONKIKKIKMMONOPPPPPOOOPOOONNMKMKIHEBAwtpttpoliffcc93|,')]]_1||79filiffffiiiiiiiiiiilllopttwwwyyyyyAEEEEEEEIKKMMKKKKIIHHHHHEEEEEHIKKKNOPOOPPOPPOONNKKKMKIHEEwtumqquuuuuuuqtsw", "wwtssttwyAAAAAAAABBBEIMNNNNMMKHByzyAAAAEEEBBAACHKMNNNMMMNMMNOPOMNNMKIIKFKMNOOOPPPPOOOOOOOOONNMMMIHEBAwtpppplifcc99953|,')]_<1359dfifcfiilllliiiiiilloopwwwwwwwwyyAABBAAAABEIIKKKKKIIIHEHHGEBBACBEHEEIMNMNOOOOOOOOONNMNMKIHEAwtmqquuuutxxqmtw", "uqmmmmstwyyyyABAAAAABEIMNNNMMKKHEywwwyyAABBBBBBHKMNNMKKNNMMOOOONNMKIKKKKMNOPPPPPPPPOOOOOOOONNNMMMIEAAwtpppplfc99553333|*$@...+#$&%*;>,')]_<|359900009dfiiiiiiiiiilooptwwwwwwwwwwyywwxxxzzAEEIKKKKIIIIHIIHEBAAzzCABEHKMKIKNNOOOOOOOOOONMKIIByuquuuomnpzyuqqu", "uqmmmmmmswwtwwAAAAAABEHKMNNNMKKKIEAwwyABAyyABEHIKMMMKKKMONNOOOONNMIJIKMMMNOPQQQPPQPPPONOOOOONNMMKIEAywtpppolif955||<<<*%#@@#$%&**-''')~(<}357527755799ccffffilloppttttwwttppttwtttutxxxABEEIIKIIIIIIKKIEEBAAAyAABHKMIHIIKMNNNOOOOPPONMKKEEzyyAtrnnrtzxuuu", "uqmmmmmmmsttuuwAAAAABEHHIKNNMMKKKIEAAABEBAyAEHIKMMKKKKKMNOOPOOOONKIIKMMNNNOPQQQQQPQPPOONNOOONNMMKIHAAwwpppplifc95||<-*%$##$%*;>>,,))!~](<|35772447777709cccfiiopptptttttptppppuwwwwwxwyyAEEEHHHIIHHIKKKHEEEEAABBBHMNMIIIIKMMMNOOOPPPPOMMIHEEGEytnlopxxuux", "xqmmmmmmmssssstyAAABBEHHHIMNNMKIHHHEBABEEAAAEIKNMMMKKKMMMOPPOOOONKIIKMMNNNNOPQRQQQQPPOOMMNNONNNMKKIEAwwttppoifc953|-*%$#@++#%*>,,~~~~///<|2552243277777090ccgiloppopttttppppppptwyywwwwxxADBFFHHIIIHHIKKIEEEEABEEEHMONMKKIIKKKKNNNOPPPPOOMKEEHHEwprptxuuxz", "xuqmmmmmmsssssswyABBABEHIIKNNNMKHEEEAwwAAywwAEMNONMKIKMNMNPQPOOPOKIIKMMMNMNOOPQQQQPPPONMKKMMONNNMMIHBywwttpolic953|-%$#+. .+@$=-,)~//<<11555575a7657509099cgfiooolopppppoloppptttwxttuuuuyAEEEEEHHHEEHIIIHEEEBEEEEHIMNMMKKKKIIIKKKNOPPPOOONIHEEEAtpptpuuxy", "suuqqmmmmpspssutwABEBAAEHIKMNNNMIEACAwwwwwwwyBINOONKIKMNNNOPPOOONMIIIIIKMMNNNOPQQQPPPONMMKKMNNNNMMKIEAywttpplic953|*%$#+. .@#$*->,!~]<149999909a888999ddcffilollloppooooopptttppprqpuuuuwDEFEEEEEEEGHIKIIIHHEHIIIIIMMMMMKKMKIIKKIKNPPPOOOOMKHEEBwtttppppt", "pnuuqqmmmrssusttyABEEBAABHIKMNNNMHEEEBywwtttwAEMOOOKIIKMNOOPPPPONMKKIIHIMMNNOOPQQQPPOONMKKIKMNNNNMMKHEAwttppoif953|-%$#+. .@#$%-->,)~/<|56596999cdccffggiilooliloppooloptttutpollqrqruquwAEBBDBDDABEIKMMKKKKIKKMMKMNNNMNNMMMKKKKMKMNOOOOOONNMIHAwwwwtpppp", "njnquuqmmsssupuwBCEEHHHAABHIKNNNMKIHHHEAwtuttwBINNMIIIIMNOOOPPPOMMMMIHGHIMNOOOPPPPPPOONMKIIIKMNNNMMKIEBywppooifc53|-%$#+. +@#$%-;;'!](_||322565599gfffiiloppolllppplooptwwtpollllprprqquwABAAADDAABEIMNNNMMMKKMMNMNOONNNNNNNMKMMNNMOONMNNONOONMEwtwwwtppp", "njhqqquqqssspuwACBBBEEHEAAEHKKNMMMKIIIIEypopptyEKKIEEHIINOOOOOPONMMMIGEEHKMOOOOOPPPPOONKKKIHIKNNNNMKKHEAwtpollic953<*%$#+. .+@#$*=;>,!](_<}}|346769099cfiiooppoilpttppoptwwtpplllooprrmqquyBADyDxxyAAEIMNNNNMMMKKMMKMNOONNNNNNMMMOOOOPPOMIIIMNONNKAwwwwuppp", "nhjjmqquwttpsvwzABAwwyABAABEIKMMMMKIHEHEBwtptwAEEEHEEEHIMNOONNPPNMMKIGCCEFKMNNOOOPPOONNMKKIIHKMNNMMKKIEAwtpollif993|-%$#@...+@#%=-;',](_<|:|||776599989fiilooliiotwtttptwwttpooooollqrqquuABADxtuxxzAEIMNNNNMKKKMMMIIMNNNNNNNNMNNNOOPPQPOKIEHKNNNMIEBwutwtq", "pjhemmqqwwwuvxwtwywtutxAAAABHKMKMMKKHEAABywptwAEHEEHHIIIKNOONNOONMKIHGCCBHIKKMNOOOOOOONMKKKIIIMNNNMMKKEAywpollifc953,)](_<1:}|4114700099filoolffiotttppttttppoopooolnqqvvuxABDxuuuxxxzGKMNNMNNMMKMMMHHKMKIIKKKMMKNNOOPQQQPNKGEEIKMMKKIBxuwxu", "qnjhmmmqwwwwypsuwywtpqtwyAAAEIKKKMMMKEAAAtpptwAEEEEEIKMKMNOONNOONMKHEECCBGHIIKNNOOOOOONMMKKKIIKMNNMMMKHEAwtplliifc93|-%$#+..+@$&--')]((<<_1}|114770799cfilolfffiopttpppopoooopoolmllrvrruxEBzuxuutwwxBIMNMMMNNNMMMKEHKKKHEEHHIIIMNNOOPQQQOMHEEHHHIIKMKBywxx", "uppnqqmmtwwwxtsmquuqmmmmwyyyAEIKKKMMMIEBxqoputyBBAABEKMMNOPONOPOONKIEEEBCGHHIIKMNNNOOOMMMKKKKKKMNNMMMKKEAywpoliifc953*$#+..@#&=;>,]((_::<|_114470770dflooiifcgmppppqpoiigglmolikjiimmnruwAAxussvvupptyHMNNMKKKKIIHHEIMMKIIIIHEABIKMOOPQPPONKEEEAtuwEIKKKHA", "AwwyAAxwwuqqquuqlnnjmhmmmqwwwwyAIMMMMMKKEumlptABywttyAAHMOPPOOPPONKIJECCCEHIIIKKKKMMMMMMMMKKKMKKMONNMMKIHBywpoiiffc953|/),>*%#@.+@#&=->){((___<|__14770070cilpliggdflpppppplggggkoolikikjnmmqqwAAxsstunqqpptyEKNMMKIIIHEEEIMNMKIIIIEAAEIMOPPPPOOOMIHEAumotAEKMMH", "HBAABAzAyqqqqnorooonjemmmqqwwwwuAIMMMMNMKApopwBEAwtttyyBINPOOOPPOMIIHGECCEGIIIKIKKKMMKMMMMKKKKKMMNONNMMKHEAytpoiffc953|<~),-%$@++#&&->'!{(((___|__1477770dgimoliiddglloppoigggggkkolikjkkmmnqqtwyzutvoonoppttyEIIKKKIIEEEBEKNMKKKKKIEABIMOPPPOOONMKKKHwolootAIMM", "KHEBCAyxuuunnlmmmmmkifjjqqpwywwquCIMKMNNMHytpwBIHAtttwyAEMOONNNONKHHHJGBBGEIIKIIIIIIIIMNNMMKKKMMMNOONMMKIHBAwpoiifc955|*$#++#&*->!{{(((__<_[_1}23246dklopmliddfiilllifc9agkkiollillknqpuuuwxxwunnoookkmqwABBAEHHIHIHHEIMMMKKIIIHEEIKOOPOOONNMKMMKEwpojipyIK", "IIIHEAzxxrookkmmqqqmkgjjjqquAyywqwBIKMNONMHAwtBKMHytuwyyEINNKKMMMIJEEEGBCEHHHIIIIIIIIIKMNNNMMMNNNNOONNMMIHEAytplifc995|*&#++#%*>'!{{((::___[_1}34226bkmppoliddciiigifc9a8akmkkollllmprsuuuuxwzxrnnkkkkmmqtwywwyyEHHIIHKMMMMKIHHEEEIKMOOOOONMMMKMMKAwpiiipyG", "zEIMICztppmkkfjiloppmkkjjquwAAAyuuyEHMNOONMIBAEMNKBttttwyHKKIKMMKJHEBEEECCEHHHHIIHHIIIKMNNNMNMOOOOOOONNMKIEBywpoifc9953|/~)>-%#+@#%-''{{({](<:<__:<}3222adjouuqligd9fiddddd9aaakmkglolmomrqpuuuuuuyttqkkmmmmmmtwuqtutuAAEEEKMNMMKIHIHEEEIKKNOOONNMMMMMKIEApfhlpx", "uyEMMJAwqqmjeecbcfopomkgjnwwwAAAuutABHMNOONKIHIMNNHwppptwEIIEHMMIHHEBCBCEEEEHEHIIHHHIIIKMNMMMNOOPOPOOONNKIEEAwtolicc953|<~),;*$@@$=;,){(~/]<:<:___:}422269iotwtmig9acgddgdd0788cmkgloooomqqqqsuvuswtwtmmmmkjmmuwuqmmppuwwyABIMMMMKIIHEEEIEIMNONNMMMNMMMKIIAoooop", "mpwHIKHzuomiec9abbfiolkggluuuwyAAtuuyAHMOONMKKKKMMHypqptwEIEEEMNIEBEEAABEGEBEHHIHHHHIIIIIKMMMNNOPPPPOOONMIHEBywpolfc955|,!~(](/(:<::__<}211179iotxwpmg9a0ggggfd07a8cmkggoooooqrmqquurrtpwtuqmmmmhjuwwuqmmmutuwwxCIKKKKIIEEEEEEIIMKKKIKKMNNMKKKIAttpm", "mmpwBHIEApmkifba88beinikglnqquwyAwuuutyEMNNNKKKMMMIBtomqtEIEEEMMIEABEBzAEHEBBHHIIHHIIFIHHIKMMMNOPPPPPOOOMKHEEBytpolfc953|<~)>;&##%->))~(]//<*%%*;,){/]/**;,)~((/::<<<<<_::11211147dipwAAztlgdddccca0008aemkklooputxussuuuuorpkmmqoppptwyAyttpuuuxxxxCEEEBBAABBBAAwAEHEywwwyAEKMMMMMMMNMI", "KGzpooptAEBwpiif9a6aceiinqpnuuxAAAByxtopxEIKMMMNOONMIAwqtyHHEBEEEEEBABEEEHIIHEHKKIIKKMKKIIKKKMKKKMNNOOOOOMIEEAywwtoigc9953|-;>)~/(_||||1||__}|14434}470dkpyzEAzulfhffffgdddabmmmkkorppwyyxwuustprmmmmiikillmptplnjinqqqquAEEBEAwwwptttwAIHAtlilptwyAEIKKMNOO", "NMIBwpiiiowEEAtliff98biilotwwAEIKIHEAywptyBEKNNNOOOOMKEywAIKIEHEEEEAAyAEEIIKKKIIIIIIFFKIIHIIIKMMKKKKMNOOPOMKEEyywtpoifc0531,!~/<_|}|___<_<:_<1422}}2770cilpuxwwwtplifggikmmmmomkoloouuwAABAAAwtmkkkbbbcdgmtplggddeijjnpwwvttqmoollllltABAwpoiillfflttyBIK", "IKKIEAwpicccmwBBxpllliillootBIMMKKKKHHEAyABEEHKOPPONNNNNIIKMMHEHHEEBAywwyAEIIIKKHFEFFEIIFHIIKKMNNMKIKMNNOOOOMKIHBAwtpolid571_/';=;,)~/_<|}|<1<<__((<14222227770bhkmoptttupolkgjimmqqqqmkllmmppwAABBBwupkkkbbbbdglpumgddddgkknpxzwwwqlolnlifipyAAAwpolllifioopyBH", "BHHHEEAtof57dipyypoiiillllotzHMNKKKKKKEEABBBEEINPPPONONNMIKMKEBEEBBAwwtttwAHIIKKHBBEEEFIIIIIMMOONMMKIKMNOOOONMKHHBAytpoifc96}_!;=;,~/<<||||11<|__::_1}222227777abdgekloptttpqmlimmqpqqqknnnorppwyAABwtpkkkkbbb0glppmgdddggmmmuwAAywtolnllecclwAAAywpoopoiiiiltyA", "twBEEEByti0730gmutpiiiillilotCKMKIIIKIIEEBBAABEKOPPONMNNMIKKEEDAABAywttpptyEIIIKHEABAFGHIIIKKNOONNNMKKKMNOOOONMIHBAAytpoif952_!-;'!~/<<|||21|1|__:___}}22227777880888bfioopputpoqmmmpqqmomnnrppuwyAzAtpmkgkhcb0dkoqmgdddgkmmmqtAAyywooooif98fotyywwtpopplifcioww", "optyBEBAxqf5347dltwoiiiiliifowEKKHEAEEHHEEAyyAAHMOPONKKIIIIIEBAAyABAwtuuqutAIIIKIHBAzACFHIIKKNNOOOOONKKMOOPOOONMIHBAywtpoif97:);;')~/<|1||3114|<1:[_[1}12267000a0aaa66aadfloqutttppommmmprnoopqpwxwyywtpkkkfehddkmqmggggkkkkkmqtwwwpolollic89ilotwwwtqptpoiccipp", "oilpwABAAuld3||7dlutoiiiififioyEIJAwwABEHEBywwwAINOPNIEHHHIIEAyAyABAwqprpptyEIIIIHECzAABEGHIKMNNOOOOOONNOPPPPOONKIHBAywttlif5}{';'~/<1|1453442|11::___:[}227000bdaaaaaa6a8cfkmutwxtuqmmmqprnnopptwxxzzwtmmmmheedgmpmkbcfffbbbeipttopllillif99fcipyywtpopmpof9flp", "liilptAAAyuid7|47dmwtoiifffbilwAEEAtppxAEEEAwpwAHKOOOMHCBEIIIBAwwAEEwqmprptwEHHHJHHBzzzzABEEIKNOOOOOPPPONOOOOOONMKIEEAywtpol92[,'!~<<|347555333311:___1:[}47770008a6aaa66a0adglowwyxuupmpppronpppwxxwywwtmmqjjedgmoojeeehbbbbhfoooooljfiiifccddcowywpilommplccil", "iifilptyAAytmf0770itzwpliiifcipwBEypolqtwBHEwppyEKNOONKBABHIIEyywxAEwumpqqtwAEHHEHHECzzzzzCCGKNOONNOPPQPONOOOOOONMKIEEAywtpof7}!!~(||355055957|211}}__1}[}447787066aaaa8668a0degmuwwxwwuttppqrqppwwwxxywwqqpllidgkmpjffhfb9bhbfiopooofccffcb50ccitAypiglllppiffi", "fifiioqtyAAzwpmd77dmwAwmgiiiffotAAwtoiilpyEIBtotAIMOONMHyABEHHAtwwyBytqppruwAEHHHHHHECzzzzzCCGKNONNNNOOOONONOOOONNMKHEBAAwtpi93:~/1435990999577314}}1111}44247a76222666a6868ddbkkmquuwwwywttpprrqxxxzxwtwpqqqonggkmqljfeea8bbb8elponifccccc770dcfpywoffiiklpolii", "iffiiimptwAAAyulc0dkuAAwoimoilotwwtplifcipAEIAtpyHKNOONKBwyzEEBxwwwAxwutrpptyEHIIHHHHECCACzCCBHMNNNMKKKMNOONOOONONNMKIEBAywplc|:~<|7599cddcc099544}22114244477776}22226a66a8ddekkkkmmquwAzywwupqqwwxzyxttwuutlliggmqoiiheb8ba88clpoolibcccc5750dfltwofdfifimpppl", "iccfffgouwABEEBwpifipwAAwpppqppwyytpplffeioyHIAttBIMNONNIywAAEAzxtuwwwuwsrpuwBEIIHEEEEGBCCCAABEIMNNMIIHHIKNNNOOONNNMKKHEBywpid3]]<|5559ccdfcc9a90772244444477776622222226268ddekkkkkkmmqwAAAywttpwwxzzzytwquuojigkmooljieb8a888ciopoli999cc95|399fowpf9cfdglotwt", "ofcfiiiotAAEEHHEApliipwAAyttttpwAytpppliccipAIIytyHMNOONMEwyAEBAwwwzwxuytprptyBEHIEEEEEEBAAzAABHKMNKHHHEEGIMNNONNMNMMKKIEBypli5::|35099dfdgbc0d9975224477777787a2222[}22622a00bkkkkkkkmmtwyAAAywtwwvxzzzwuwqtuljkkmmoliifb678889fopliic88c097||59clwwofcfccilqww", "wlfiopootyAABEHHEwpiiiowAAytututyytolopoiiiltHKHzwEKNOOONKAwAEEAyyAzwtuwwtrrpwABEEEEEEHEBAzAzABEEMOMIEEEBGGKMNONNMKKKKIHHEAwpic4}6599ccfffgfc0dd9706657777777776222}1}16666800bkkkkkkkmmpputAAAAyAwwxzzyytuquuoojkmmooiihc666888elpllic9999951|45clwywpif99cgipw", "BypopppoptwyyAEEEAtmifglwAAtpqptwAwlcfiooifflwIIEABKNOOOONIAABEEwyyAwuuwywpppswzAEEEBEEHEAzyzzAAEKNNKEFEBCCIKMNNNMMKKKHHEEAtoib5|609cgiiiliiecdd0000675777708066266}2226a66800bkkkkkkkmmqpuqwwAAABAzzxywyttqquppoklmqoljheaa68aabjplllic99055|||5fotyAwoi9599glw", "EEypoppplotwwyAEEAwplf99itzypompwAwofcfqoliffoAIIEAHNOOOPOMHABHHBvxwuuutxwtppptwwAEEEBEHECyyvwwzBHMMMIEECCCHIKMMNNMMKIIIHBAwpi81_}599fgiklliifgd9c006665500cb0aa6a4242228aa8dehkkkkkkkkprqrsstwyACBAAzzvxxttquxppmmoppojifb666aabfolloic99575|1|5iptyAtoic509clw", "AEAwpoppootwAAABEBAyulf99iwzwpllpyAtf9ioolkdfipAEByBKOOPPPOMHBHKHytwtuquttwtqqtwwyAEEBBEHEAytwwyAEIIKIEECCGIIKMMMMMMMMIIHEAwpj82_|290cggiiiiifdcdc90d0899bcfdgc9807a666a8a8bghemkkkkkkkrrrqpuuutwBEEEEAzvxtwquxttpmppppniee866a88elllllf997553115iptwAtliiccfilp", "pyAAtooppopyEEEEBEBAwpf979iuxulgipyti9ciolffcdipABAwENOOPPONMIHKKBwppuqqutuqmmpswwyBBEBEEHEwxwwwyzABHHEEEEHKMNNMMMMMKKKIEEAwpj9}}478dcggfiiiifdchd00d09cdfffggeff9b99999fccfhjmmmmmmkkkprrrpruptyAAGEHEzxwttquutttqqttpojfeb668a8ciillif885553335fpwABApoooliigi", "otwwwpoppptAHIEBAAAzwpg5413guuogditwlc9cillfc0cipyAyAINOOPOONKIKKIAtppopttupqmmqqwyABDBBEHEzxxwyuxzAAEEEHHIKNOONMMMMKKIIHHBwpj8}[458ccfgiiiliifhfffdggcfffiigffffcc9dcccffhimnqqmmmmmmprqrrrrrqqwvzCGIIECzwttquupttttxwplfehb6a88bfllliic885557339lwABEAwwtoic9f", "loppxwtpptwyEHEyxwwwwpk0|<_4gqpicfpwticcktttld9dltAAAEKNOOOONMKIKIEwttppppptqmmmquuyABABEEEByxxzuxyzzAABHHIIMNONNNNNMKKKHHBwulb}[659cffiiilllikiiiigkkfffiiigc9cc8956aa9bfgimouuqqqqmmpprpprrrrrxxzzBIKHGAzttqqupptuwwwtnifhbb6a8aclloiic9959994}6ftwAEIHAticccf", "filotAAtpwwwAEEAwwpppqmd4_/<9kqofcmyApifoAAAwof9iqwBAAHMOOOONMKIHKHAwuttttttpolmquuuwABAABEEAywsuxxyxwAAFEGHKMNNNOONNMKKKIEAtqc6}6addfgiillolllmlilikikffffdd96622|2327689ahknqquuuuqttutrrrrprtvwxzAEIHHEAttuqquppuxAzypjfhbbb888bioollfc909954[3cpwAHKHyof9ccc", "ciiopyAAwtttwBEEAwpoomif5|<_49mqkfiwytiipAAAAtlfcfpwBABKNOOONMKIHIIBwwwtutwwwtooouttuxBBABEEEAuuuuxzxuyyyCBGKKMNNOOONNMKIIEAtqh6669ddfiilmmpooollilffffg9bc0d056}}:}[}2}a68dhhmnmqpswwwwtttuprrvvxxAEDEEGGEBwtmqqopstABCyoifbbbb88bfllollfcfd95333cpAEIHBtlfccc9", "9clpptAEAwttyEEEAwpmkmmg93<<<|9mmgfmwwoiotwttwplccfqyAyBKNOOONKHHHIHAwtpttwyywttppttuxAEEEEEEExxxxxzzxywwAzCEIKMNNNNNNMKIIHEzrk86abfiikllmpqppomlmiigffgf9906622}}[[::[}66addbkmmmmtttxvwwwttuwvvxxzBFEEBCEEAwqmqqnotyEIEwmhbbbb888cipopoiff995756cpEHEytpliif95", "5cloptyEHyttyBEywpoomlmld7|_((|dolcfqupllliilptpicfipyyyEMOOONKIEEHIEwtppptwwwwwwyywwyzEEEEEHBAzxxxzzyxywAAzCHIMMNMNNMMKKIHEzxk86bhilllomppppppmllilgggig997a222}}}_[[:[22adbbkkkkrrquttwwwwvyxvxxyDBEFEBzCEAAwqqqooptBIICtlgbbaba8biooptofcb90799ftEEypopplifc5", "69iotwwEIEwtwyAtpooomopplc51_(/3goicippliiiflpttpfciowAyAIMOOOMIBABIIBwoilpttttyAEEBAACEIHHEHBBAxwyzzAyAyAzzCFIKMMKMMMMMMMIHBxnd8bjilooopppppppmloiifgkkica76222}}2}}[[[2280bkkkrrqrrrrpttwwzzzyzxzDDEFEEzzAEBAuqqqoppxEKHymkggbdb88fltttof990900flwBAtiiopoifc5", "59fopwwAHKBwtwwplmllmoptpod7|>>->!<1<(_||||/~/4cilkggiddfoxAtpic7||3fpAEIKMMKMKIAwyHKMNMMKIBAywoilpwwwtpotAHKKNNKHBABBAxwuwACEIKKMMKKKMNNNOOPPOONNMNMNNMMJIEDDzxvvtuwwuuuuunokkhebbbddehmmqwwvwzzzzEFFFFKKMMMOOOOPPONLKHDzxvrrsmqquqqmmmqwyABEIMMICyplc99575floppppoootwytppttt", "ppwwof5|(~~),>>-=='!<_{)///~~,,{3gklkgiigfotyytpi95335fpwBIKIIKKIBwyEKMNMMKKIIHEyplloptwywyBKNNNNNKIEEEEzuwwzCGGKKKKIIIMLMNOOPPPOOLNNNNNLKIIEDDzxxwtwwwuuqqqqnigggggggeemmrrvvvwxxzzDFFFIIMMMNOOOPPPONLHFDzvvprmmmqquuqmmmqwyAIIKKIBypof997735illooliiiloptppttt", "llptof3<())))'>;=&*>~<~,)~~)),>,~5ilkiliiiopuyywpf95599kowEIIHHIIEwwAIKMNNMKIKMMIAtolllpwAyEKNNMNNMKKIKIEzAwwCBEHIKKKIILLLMNOPPPPOOOOOOMMJIJEEDzzwywwwwqqqmmmjhjhggggiijmmtsvvvvzzzDDFFHHLLMMOOOOQQQOOLIFCzvpsmmmmmjnuuqmmmtwAHHIHEEztpic99542cllopoiiiiilpppppo", "ffilli5|~),,'-*==%%;~11(~//~)~),);**=-,)),)~<<~~/<<<|<))<5fluqqoommuxAyticcf9335itEKIIKKIAttyHIHHHHHIKMNOOMBwoliowBHKOOOOMIHIIMNMKIHIIHHIKKKKMMMNOOPQRQPPPOONNLLHFFFCzzAzssssmmmmmmmmmeeeeemmmssvvvwxzzzFFFIIMMMMOOOOPQQQPOMKKECAtummmjjjjhjjouuqquwAEIEBABBywplf00725fotwywtollliliff", "lif99flf3~,>***-,),-*-)~~),)~~~~)>)<3clqqmmikmtyytlfffc5|39lAIIIIKKIAtwEIIHEEEEHKMOONMEwpoptABEMNOOOKHIHIMMIIHKMMKKMMMMNNNNOPPQRRQPPOONLLLIFFFECCyvtsrrmmmmmmrmmmmmmmmmpssvvvvvzzAEFFIILLLMOOOPPPPQOOLKFECAwwqqjjjjjjjjnpxuqqwyBHEEEEEEAtpic0975cipwwwtplilillll", "lid3}5fi9/)>*&*-->*#@#*>,>-->,',,>>)/|dlqqmkggmtxuiccffc559itEIIIIKKHytyEIIHHHHEHKMNNMIEywwyBEEIKMNMKIHIIKMKIHHMMMMOOOOPPPPPQQQRRQQOOONLLIFFFGCzyxvsrrrmmmmmmmrmmmmmmmmrrvvvwvzzzzFFFIKKKLOOOOPPQPPOOLIFCAzwuqqjjjggggjjnuuuqwyAEBCBBEEAytof009669ipttplifiioloo", "ii93:<5ff|~,-=***%#+.+@%--*%-),,,---,{|foqqmkgkqtul959fif99fpEKKKKKKKEwwBEIIIKKIHHIKKMMKEBEBEIKIMKKKKIHEIIKKIHHKMMMNOOPQQQQQQQRRRQPOOOMLLIFHFECzvvvssssmmmmmmmssmmmmmsssvvvvvxzzzCFFIILLLMOOOPPPQPPOMMFFzyzxuuljjggggggjjjuuuqwABEAAyABAwtpi0097269lppoifffiliil"}; xscreensaver-5.36/hacks/images/timetunnel2.xpm000644 000767 000024 00000406453 10256614436 021513 0ustar00jwzstaff000000 000000 /* XPM */ static char * timetunnel2_xpm[] = { "256 512 84 1", " c #100A08", ". c #120C13", "+ c #171021", "@ c #18112D", "# c #1C150F", "$ c #18103A", "% c #1A1049", "& c #1B105D", "* c #1B1076", "= c #241492", "- c #21149D", "; c #2012AC", "> c #2112C7", ", c #332A1C", "' c #382A2F", ") c #36245C", "! c #39274A", "~ c #331F8A", "{ c #372375", "] c #2714F8", "^ c #2B15EE", "/ c #2E17E3", "( c #4021D9", "_ c #441DFC", ": c #4B2AC6", "< c #5031B4", "[ c #5728F7", "} c #6822FD", "| c #5A4382", "1 c #5B3CAE", "2 c #5E439A", "3 c #5E34ED", "4 c #60514F", "5 c #655D38", "6 c #7A2FFA", "7 c #665471", "8 c #9027FE", "9 c #7540F9", "0 c #8D38FB", "a c #7748EC", "b c #6E4FE4", "c c #784ED8", "d c #9447F8", "e c #AB3BFD", "f c #A340FC", "g c #9559FA", "h c #B052FC", "i c #9A64E7", "j c #9267F5", "k c #8D72CE", "l c #8E6EE3", "m c #BF5AFC", "n c #AC64FB", "o c #907EBF", "p c #9386A0", "q c #999C57", "r c #D066FD", "s c #B978FB", "t c #AD83F7", "u c #CD72FC", "v c #A19F91", "w c #CF84FB", "x c #B197F3", "y c #C793F9", "z c #B2A8C4", "A c #B2A8E4", "B c #DE8FFC", "C c #CAACF7", "D c #DAA7FB", "E c #D1BEF8", "F c #CDC7EB", "G c #DFBCFB", "H c #CED1C5", "I c #CECEDA", "J c #E5CBFA", "K c #DBE2A4", "L c #E6D7FB", "M c #E4DEF9", "N c #E6E9DF", "O c #EAE7F6", "P c #EDF1D0", "Q c #F2F0FC", "R c #F9F8FC", "S c #F9FAF6", "_[[0nDJMOOOMMMMMOOQQQQQQOMJCysngggitCJLMMLLGDwumhff0000fhsyCCCtc~%$$$&=:agc). ..+$%&**=-;>>/////>;=****=-;;>:blAFOOOOMMMOQRRRRRSSSSSSSSSRRRQMFCtjad9ddnniic2!'# ..++@$%&&&&%$$$%&=>///^^^", "__}0gBGLLMMMLLMMOQQQQQQOMLGysngdggixELMMMLJGywmhdf006660hsyCCDtccclxFORRRRRQQQQQQQQRRRRRRRRRRRRRRRRQOMLLLLLLJJDBumf93(={%%&~:3dhg~+ ..+@%&*=-;>>//^^^^^/>;-==--;;;::lAFOQQOOMMMOQRRRRRSSSSSSSSSRRRQOLCtjg999dgggb1)+.# ...+$&&**=**&%%$%&=;///^^^", "__[6dsyGJJJLLLMOOQQQQQOOLEDtngd9dgsxELMMMLJDyshd006}}}60hsyCCCxlllxFORRRRRRRQQQQQQRRRRRRRRRRRRRRRRRQOLLJJJJGGDBurhf63(-~{*~:(dhmd:).. ...+$&*->>//^^^]]]]^^//>;;;;;>(blAMOQQQQOOMOQQRRRRRSSSSSSSSSRRRROMEyjg999999:<)+.# ...@%*=;;>;;-*&&%&*=;>//^^^", "]__[0hsyDDGJJLMOOQQQQOMLGysnd9399gtCLMOOMLGDwnh006}}}}}0hsDGECCkkxEORRSSSRRRRRQRRRRRRRRRRRRRRRRRRRQQOLLJGGGDDBurhf063(:=~=:(0dmmh3~@+............+@&=;>//^^]]]]]__]^^//>>>>((bkFOQRRRQQOOOOQRRRRRRRSSSSSSSSRRRROMEyja93333(<)@+. ..@%*;>////>>-=*&**=;>>////", "^]_}6dhuwyDGJLMOOOOOMLJCysg96[[39jyELOOOMLGysgd06}}___[6dsDEJEACCAMORSSSSRRRRRRRRRRRRRRRRRRRRRRRRRQQOLJGGDDBBurmef063(::::33dmrmh0:&@+++..++.+++@$&=;//^^]]_______^^^///(((alxFORRRRRQQQOOQQRRRRRRRRSSSSSSSRRRQOLCtj933((>=%@.. ..+%*;/^^^^^/>>-=**=--;;;>>>", "^^^^[6dhmuBDGJLLMMLLJCysg93[[[[3aixFOOOOMLGysh06}}____}6gtCELFEEEFORSSSSSSRRRRRRRRRRRRRRRRRRRRRRRRQQOLJGDDBwurmef00633:::33dhrrrh0(=&%$@@@@@@@@$%*->/^^^_______[[[[[33333ackFMQRRRRRRRQQQQQRRRRRRRRRRSSSSSRRRRQMExja3(/>-*%+.. ..+$*;/^]]]]]^/>;-=========--", "//^^[}60dmuBDGGJJGGDysg96[[[[/(3btEMOQQOMLCynd06}_____[6gtGJMLFFFMORSSSSSSRRRRRRRRRQRRRRRRRRRRRRRRRQOLJGDBwurmeef00033::3adhmuurm03>-**&&&******-;//^^_____}[[669999aaaaclAFORRSRRRRRQQQQQRRRRRRRRRRRRRSSRRRRROLCla3((;=&$+.. ..+$*;/^]]]]]]^/>;-==***&&&&&&", ";>/^^[}60dmuwyyyywsng96[[^^^//(3iCLOQQQOMLCtnd6[[_____[6gtGLMMFFMORRSSSSSSRRRRRRRRQQRRRRRRRRRRRRRRRQOLJGDBurmhee000093aaaddmruuume6/>>;;;;;;>>>>//^^^[[[}66660dgnjtjiiltCFORRSSSRRRRRQQQQRRRRRRRRRRRRRRRRRRRRQMEtb3((-*%@+.. ..+$*;/^]]]]]]]^/>;-=**&&%$$$$%", "-;//^^_}}0dhmnnngd06[[[^^^^^//3bxJOQQQQOMJCtnd6[_____^[6gtELMMMMMQRSSSSSSSRRRRRRQQQQQRRRRRRRRRRRRRRQOLJGBwummeee00099aaaddhruwuume6[/////////////[[[[660000ddnsyDCCCxCAFMORSSSSSRRRRQQQQRRRRRRRRRRRRRRRRRRRRQOFxj93(;=&$+... ..+$*;/^]]]]]]]]^/>;=**&&$@@++@@", "*->/^^^__}6600066[[[^^___^^^/3atEMOQQQQOMJCwn06[_____^[3gyELMMMMOQRRSSSSSRRRRRRQQQQQQRRRRRRSSRRRRRRQOMJGBwrmeee00009daaddhmruuwume6[////////[33399aggnnnnnnswyGJLMLLFFMORRSSSSSRRRRRQQQRRRRRRRRRRRRRRRRRRRRRQMCta3((;~&@+.. .+@&;/^]]]]]]]]]^/>-=**&%$@++++@", "*->/^^]_____[[[_^________^^[39iCLOQRRQQOLJDwg06[[_^^^^[9nyEMMMMOQRRRSSSSRRRRRRQQQOQQQRRRRRSSSRRRRRRQOMJDBurmfe000099dddddhmruwurme6[[////[33ajitxxCCCCCCDDDCGJLMOOOOOORRSSSSSSSRRRRQQQQRRRRRRRRRRRRRRRRRRRRQMExj33((;=&$+.. ..@&->^]]]]]]]]]]^/>-=**&%$@++++@", "*-;>/^^]]_______]]]]]___^[[[9jxJOQRRQQQOLGysh06[^^^^^^[9sCLMMOOOQRRRSSSRRRRRRQQOOOOQQRRRRSSSSSRRRRRQOMJDBumhee000099aadddhmruuurme6[[//(3ajtxEFMMMMOMMMMLLLLLMOQQRRRRRSSSSSSSSSRRRQQQQRRRRRRRRRRRRRRRRRRRRROLCla3[//>-*$@+......+%*>/^]]]]]]]]]]^/>;-=**&%$@@@@@", "*->>/^^]]]]]]]]]]]]]___[[[39jyEMOQQQQQOMJDwnd0[[^^^^^^[gtEMOOOOQRRRSSRSRRRRRRQOMLLMOQRRRRSRRSSRRRRRQOLJDyumhff000099aaddhmruuuurhe6[[(3abtCFMQQQQRRRRRQQQOOOOQQQRRRRSSSSSSSSSSRRRRQQQQRRRRRRRRRRRRRRRRRRRRQMEtj93[//(;~%@+.....+$*;/^]]]]]]]]]]]^/>>;;-=*&%$@@@$", "=;>//^]]]]]]]]]]]]]]__[[39ajtALOQQQQQOMJGBsh06}^^^^^^[3nCLMOQQQQRRRSRSSSRRRRQQMLJLLOQRRRRRRRSRRRRRQQOLJDyumhf000009daaddhmruuurme06333bckEMORRRRRRRRRRRRRQQQQQQRRRRSSSSSSSSSSSRRRQQQQQRRRRRRRRRRRRRRRRRRQQMExia96[[//>-&$@+...+@&->/^]_]]]]]]__]^^//>>>;-*&$$$$$", ";>>/^^]]]]]]]]]]]]]__[[39ajtCJMOQQQQOMLGDwnf6[_^^^^^^[9sEMOQQQQQRRRSRSSSRRRRQOLJGGLOQRRRRRRRSRRRRRQQOLJDBumff0000099adddhmrrurrhe033:<1kAIRSSSSSSSSRRRRRRRQQQQQQRRSSSSSSSSSSSRRRRQQQQQRRRRRRRRRRRRRRRRRQQMExsg936[[[/>;*%@+++@@&=>/^]]_]]]]]___]^^^^///>;=&%$$%%", ">>/^^]]]]]]]]]]]]]]__[39gjtxEMOQQQQOMLGDwrf0}__^^^^^^[gtJMQQQQQQRRRSRSSSRRRRQOLGDCJMQRRRRRRRSRRRRRQOMLJDBsmff000099999ddhmrrrrme003:<1koINNSSSSSSSSSSSRRRRQOOMOQQRRSSSSSSSSSRRRRQQOOQQRRRRRRRRRRRRRRRRQOMExtgd966[[[/(;*%@@@@$&~;//^]]]]]]______]^^^^^^/>-*&%&&*", "/^^]]]]]]]]]]]]]]]__[39gitxELMOQQOOLJGDwrh06}__^^^^^^[gyLOQQQQQQRRRSRSSRRRRRQMJDyDGMQRRRRRRRSRRRRRQOMLEDBsmhff00099999ddhmmrmme003:<2||pINNSSSSSSSSSSRRRRQOMLJLMOQRRSSSSSSSRRRRQOOMOOQRRRRRRRRRRRRRRQQOLExiga93666[[/(;*%@@@$&~;(/^]_]]]]]______]]]]]^^/>-*&&*=-", "^^]]]]]]]]]]]]]]]__[[9gitxEFMOQQOOLLGDwuhf6}__]]^^]]^[gDLOQQQQQQRRRSRRSRRRRRQMGyByGLQRRRRRRRSRRRRRQOMLGDBsnhdf000099900dhhmmme063:<{||7pHNNSSSSSSSSSRRRRQQMJGCCGLMQRRSSSSSRRRQQOMLLMOQRRRRRRRRRRRRRRQOLExiga9900666[/(;*%@@$%*;>/^^_]]]]]________]]]]]^/>-***-;>", "]]]]]]]]]]^^]]]]]_^[9gjtxEFMOQQQOMLJDBumf0}___]]]]]__6gDLOQQQQQRRRRSRRSRRRRROLCywyCLQRRRRRRRRRRRRQQOLJGDBsnhdf000009900fhhhhe06[(:~{)!7pvNNSSSSSSSSRRRRRQMJCtsstDEMQRRRRRRRRQOMLJJJLOQQRRRRRRRRRRRRQOMExigd9999d006[/(-&%$$%&=>/^^]__]]]]_____^__]]]]]^/>-==->>/", "]]]]]]]]]^^^]]]]__[9gjtxEFMOQQQQOMJGyumd06}__]]]]]]__[dyJOQQQQQRRRRSRSSRRRRROLDwswDLORRRRRRRRRRRRQOOLJGDysnhdd000066660fffff06[[(-{)!!7pzHNSSSSSSSSRRRQOMEDwnggmsyGLOQRRRRRQOLJGDDGJMQQRRRRRRRRRRRRQMJCtja999ddddd6[/>-&%$%&*;>/^]]]]]]]______^^^^^^^^/>;--;>>/^", "]]]]]]]]^^^^]]]__[9gtxCELMQQRRQQOMJDBuh06[[__]^^]]]__[dwEMQQQRRRRRSRRSSRRRRROJDwswDLORRRRRRRRRRRRQOMLJGDwumhdd0006666600fff06}[/>=))!!77zIRSSSSSSRRRRQOLEDsnhdddhnwDJMQQQQQMLGDBBBDJMQQRRRRRRRRRRQQMJCtjg999dhgmhd06/>-&%%%*->/^^]]]]]]]____[[^^^^^^^//>;;;>>/^]", "]]]]]]]^^/^^^]]_[3gtxEFMMQRRRRRQOLGDsnd06[__]]^^^]]]_[9sGMQQRRRRRRRRSSSSSRRROJysnsDLOQRRRRRRRRRRRQOMLJGDwumhf00066[[[6000006}_^/;*%!!!77zIRSSSSSRRRQQOLGyshdd0000fhsyGLMOMLJDyuuuBDJOQRRRRRRRRRRQQMLGysgd99dhnnnnh06/(;*&&*=;>/^^]]]]]]]____}[^//////>>>;;>>/^]]", "____]]^^///^^^^[3gtCFMMOQRRRRRRQOLCtnd06[___]^^^^^]]_[9sGMQQRRRRRRRSSSSSSRRROJysssDLOQRRRRRRRRRRQQOMLJGDwumff0066[[[}}60006}__^/-&%$!!|ozIRSSSRRRRQOMJCyshd00000000dnwCJJJGDwumruwDLOQRRRRRRRRQQOMJCysga999dhnnnmd0[/(;=**=->/^^]]]]]]]_____[[//>>>>>>;;;>>/^^]]", "____]^^////^^^^[atELMOOQRRRRRRRQMEynd66[___]^^///^]]_[9sEMQRRRRRRRSSSSSSSRRROLCwwwDLOQRRRRRRRRRRQOOMLLEDBumff066[[[}}}}66}}__]^>=&$@!)|ozORRRRRRQQOLEDwnhd0000086660dmsyDDywummmuBGLOQRRRRRRRQQOMECtjgd9000ddhggd9[[/(>-=-->>/^^]]]]]]]_____^//>;;;;;---;>>/^^]]", "__[^^^//>>//^^[9lCLMOQQRRRRRRRQOLCsd0[}___]^^/>>>/^^^[9tEOQRRRRRRSSSSSSSSSRROLGyByGMQRRRRRRRRRRRQOOMMLJCysmf006}}}_}}}}}}}___]^>*%$@!)|oIORRRRRQQMLEDsndd00000886}660dmswwsrmhhmuyJMQRRRRRRRQQMLEDsng996666000096[[//>>;;;>>//^]]]]]]]]_____^/>;-----==-;;>//^^^", "[[[[//(>>>//^[3jxFMOQQRRRRRRRQQLGtg0[}____]^>;;;>>/^^[gyLORRRRSRSSSSSSSSSRRRQMECDDJMQRRRRRRRRRRQQOOOMLJCysnf006}}____}}}}___]^/;*%@@!|ozIQRRRRQOMJCysgd000008888}}}}60hnusumhhhmwDJOQRRRRRRRQOLEDsn9966[[[[[[[[[[////>>>>>>>/^^]]]]]]]______^/>;;--=====-;>>//^^", "[[[[/(>;;;>//3atEMOQQRRRRRRRRQMJyn96}____]^/;=*=->/^^3jCMQRRRRSRSSSSSSSSSRRRQMJGGGLOQRRRRRRRRRRRQOOOMLJGywnf06}}______}_____]^/-&$@@!|pzORRRRQOMJCtjgd0000088886}}}}60hnsuurmmmuBGMQRRRRRRRRQMLCtja9[[[[[[[[[^^^///>>>>>>>>/^^]]]]]________^^/>>;;--=***=--;>>//", "////(>-=~-;((3jxFMQQRRRRRRRRQOLCsd6[____]^/;=&&*=;//[atJORRRRSSSSSSSSSSSSRRRQOLJJJLOQRRRRRRRRRRQQOOOOMLGDwnd06}}___________]]^>-&$@@!|pIORRRQOMJCtng906600088886}}}60dnswBwwuuuyDJOQRRRRRRRQOLEyia93[[[[^^^_^^//>;;;;;>>>//^^]]]___________^^//>>>;-=******==;;>", "(((>;=*&&*->(atEMOQQRRRRRRRQQMGtg3[^__]]^/>=&%%&*;>/3jCMQRRRRSSSSSSSSSSSSRRRQOLLJLMOQRRRRRRRRRRQQQQQOMLJDwnd06}___________]]]/>=&$@!!7zIQRRRQOLCtja9666600088886}}66dmwDCGGDDDDGJMQRRRRRRRROMExlb93([//^^^^^^//;-==-;;>>//^^]]]_____}}}}____^^///>>;=**&&&&&&**=", "----~&%$%&=:3jxFMOQQRRRRRRQQMEyn3[/^^^^^/;=&%$%&*;>(ayJORRRRRSSSSSSSSSSSSRRRQOMLLLMQQRRRRRRRRRRQQQQQQOMJDwnd0}[___________]]^/;*%@@!!pzIQRRROMEyia96666600888886666dhsCJLLLLLJLLMOQRRRRRRRQIFxlc:((((////^^//>>-=*=-;>>//^^]]____}}66686}}__^^^^^/>>-**&&&%%%%%&", "&&&&%$@@@%*>>>>>>-*&$$$%&=;(3jCMQRRRRRSSSSSSSSSSSSRRRQOMMMMOQQRRRRRRRRRRRQQQQQOMJDwnd6[[__________]]]^/;*%$@!7pINRRROOFCtg93[666000888886660hsCLOOQQQOOOOQQRRRRRSSNIzok11<==--;>(////>>;-==-;>>/^^]]]___}60feeee06}}__^^^^^/>;=*&&%$$@@@@", "@@@@+++++$&1cxFOOQQRRRRRRQMJxi<~{&&&****&%$@@$%*->(atEOQRRRRRSSSSSSSSSSSSRRRQQOMMOOQRRRRRRRRRRRRQQQQQOMJDwnd6[___________]]^^>-&%$!!7zHNNNQOMExia96[6600088888060fhsDLOQRRRRRQQQRRRRRRSNNHp77))))%&&{~-;>(((>>;;;;>>//^^]]]___}0fhmmmmhe06}}_^^^^^/>;-**&%$@++++", "........+@)2kAMOQQQRRRRRQMExl1)$@@@@@$$$@@@@@%&=;((ayJORRRRRRSSSSSSSSSSSSRRRQQOOOOQQRRRRRRRRSRRRRQQQQOMJCwg96[[^________]]]^/>=&%$!7pHNNNNQOFAtja3666000eee88800dhuyJOQRRRRRRRRRRRRRSSNHvv4''!@@@@@$){~-:>((>>>>///^^^]]]____}0fmuuwwwumh06[[^^^^^/>>;=*&%@+++..", ".........+!|AFOQQQQRRRQQMFxl2)@+....+++++++@$&*;>/3gyLOQRRRRRSSSSSSSSSSSSRRRRQQOOQQQRRRRRRSSSRRRRRQQQOMJDsg9[[[^_______]]]^^/;=&$$!7vHNNNNNOFAtja366600eeeee800fhnyGMQRRRSRRRRRRRRRRSNHv54'''++++++@!)~<<:(((////^^^]]]_____}0dmuwBDDDBwnh0[[[^^^//>>;=*&%@++...", " ..''pzIQRRRRRRQQMFxk2)@+........++++@%*->//3gyLOQRRRRRRSSSSSSSSSSSRRRRQQQQQQRRRRRRRSRSSRQQRQQQOMJDsg9[[[^^^^^^^_]]]^/>;*&$!!pHNNNNNNOFAtca936000feeeeeefhnyGMQRSSSSSSSRRRRRSSNHv5,,##....++@!){21cba3(//^^^]_______}}0fmuwBDGGGGDwnd6[//////>>;=*&$@+....", " #'4vHNNRRRRRQQMJxl2)!+.. ....++@$&=>/^[6gyJOQQRRRRRSSSSSSSSSSSRRRRQQQQQQRRRRRRRRSSRRQQOQQQOMJCsg9[[[^^^^^^^^]]^^/>-&%$!7vHNNNNNNIFAtca9900000ee0e0edmwDLORSSSSSSSSSSSSSSNHv5,,##....++@!)|2kkliga3[[^^_______}}}00hmuBDGJLLLJCtga33(///>>;;=*&$@+... ", " #,5KHNSSRRRQQMJxl1{)+.. ...++@%*;>/^^6gyGMOQRRRRRSSSSSSSSSSSRRRRQQQQQQRRRRRRRSSSRQOOOQQQOMJDsg9[[^^^^^^^^^^^^^>;*&%$!7vHNNNNNNIFClca990000000000fhnDJORSSSSSSSSSSSSSSNHv5,,##...+++@))22kxxytia9[[[[_____}}}600fhmuyDJLMOMLExib33(((>>;;-*&%@+.... ", " #,5qPNNSSRRRQOFClc1{$+.. ...++$&=>/^^[6hsCLOQQRRRRSSSSSSSSSSSRRRRRQQQQQRRRRRRRRRRQOIIOOQQOMExia3[[^^^^^^^^^^^^/>-*%$!!4HPPNPNPNIzxlba366600000000fmwGMQRSSSSSSSSSSSSSNHv5,,##..++@@$%{11lyDxytng96[[}}}}}}}66000ffmsyGLMOOOMLCtiaa3((>;;-=*&$@+... ", " #,5KHNSSRRRQOMAlb:~%@+.. ..++$&->/^^[6dsDJLOQRRRRSSSSSSSSSSSRRRRRQQQQQRRRRRRRRRRNIIIOOOOOMExja3[^^^^^^^^^^^^//;=&$$!7vHPPPPPPHIzklb9366666666660dsxJORSSSSSSSSSSSSSNHv44'#...+@@$%{~</^^[6dnyCJMOQRRSSSSSSSSSSSSRRRRRRQQQQRRRRRRRRRRIIIIIOOOMFAtb93[^^^^^^^^^^^^/>;*%$@!4vKPPPPPPHIAkia93[[[}}66666dgtGMQRSSSSSSSSSSSSRIvp4'#...+@@%&*=-:acittwssnhdd000666686886800fhwCLMQQQQOMExtiga::;-=*&$@++... ", " ##4vHNRRRQQOMFxja-{$+... ..++$&->/^^[6dgsyGLMQRRSSSSSSSSSSSSRRRRRRQQQQRRRRRRRRROFzzzIIIIMFxla3[^^^^^^^^//^//>>-&%$@!4vPPPPPPPHzAkca36[[[}}}}}60dnxFORSSSSSSSSSSSSNIzp4''...+@@%&*-;:(3agnissnnmhhdff00068886}6600hwGLOQQQQOMExtljba:;=*&%@++.... ", " .'7pFOOQQQOMLCla:~%@.. ..+@%*->/^^[60hnsyGLORRRSSSSSSSSSSSRRRRRRQQQQRRRRRRRROIzppzIIIIIAxia3/^^^^^////////>;*&%$!!4vPPPPPPHHzolca3[[[[}}}}}69gtCMORSSSSSSSSSSSNHIp4''...+@$%&*=;;>((3agnnususurmhffe0066}}}}}6dnyJMQQQQOMLExytica:-~&%@@+...... ", " ..+!2kAFOOOOMLExb:-&@+.. ..+@%*;>/^^[60dgnyCJORRSSSSSSSSSSSSRRRRRRQQQQRRRRRRRQOFAoppvHHIIAkca(/^^^/////////>>-*%$@!7vHPPNNPPHIzxlcd3[[[____}[6diyJMQRSSSSSSSSSNNHHp4''...+@$%&=-;;>>((33dhnwByyywwumhf006}}}}}}0gwGLOQQQQOMJGCCxtib:=*%$@+........ ", " ..+${/^^[69dhnsDJOQRSSSSSSSSSSSSRRRRRRQQQQRRRRRRQOMAooopvHHIzAkc3(/^^////((////>;=&%$$!4vHNNNNNNNIAxlg93[[[____[[9gtEMORRRSSSSSNNNNHvp4'''+++@$&*=;;>>>>((30dmwDDGGGDDwumhf06}}}}}6dsDJMQQQQOMMJEECCxlc<~{$@++.........", " ...+@&-:bxCJLLLExia3-&@.. ..+$&=>//^/[660dhsyJORRSSSSSSSSSSSSRRRRRRRQQQRRRRRRQMJxkkopvIHIzAkc3(/^///(((((//>>-*&%$!7pHNNNNNNNIIAxlga3[[[___[[6aiCJMORRRRRNNNNNHHvp7'!'++@$%&=;>>>>>((((3dnwDGJLLLJGDwuhf06}}}[69nyJMOQQQQOMMLLLLECxl1~)$@+..........", "...+@&=>(alxEJEExta3(=%@.. ..+$&->///[[669dhsDJORRSSSSSSSSSSSSRRRRRRRRRRRRRRRQOMExkkozzHIIFAkca(///(/(((((>>>;-*&%$!7vHNNSSNNOIFExtja9[[[__[[[9jxEMOOQRRQNOIIHHvp77!!!@@$%&~->>////////39hsDGLMOOMLJDysmd06[}}[6gtEMQQQQQQOMMMMMMLJCl1{)!@+..........", "..+@%*;/(9ixCEExtg3(:*$+.. ..+$*->///[339ddgsDLORSSSSSSSSSSSSSRRRRRRRRRRRRRRRQOMCklkozIIIIFAkca3///(((::(>>>>;=&%$$!pHNNSSRRQOMFECysgd6[[[[[[9jtCFMOOOOOIIFzzzpp7|)))))%&~-;>////////[3dnwDJLMOOOOLJGysgd6[[[[[9sCMOQRRRQQOOOOOOOOMAk2{)!@++.........", ".+@%*;>/[9ixCECyja3(-&@+. .+@%*;>///[39dddnwCMQRSSSSSSSSSSSSSRRRRRRRRRRRRRRRQOFAxkkozIIIIFAkca3//(((:::>>>>;-*&%$!7pHNNRRROOMMFECytjgd6[[[[9gtxEFMMMMIFFAAooo|22{{{{~~~=;>(///[[[[[39gsyGJLOOOOOMLJCysh0[[[[[9gxLOQRRRRRQQQQQQQQOMFo2{)$@+++........", "+@%*;>//[atCEECtj3(;~%@.. ..+$&=>///[39ddddnyGMQRSSSSSSSSSSSSSRRRRRRRRRRRRRRRQMFCxkkAzIIIIFAtb33//(((::::>>;-*&%$@@7vHNRRROOMMLJJECDtsg99669ajxCEFMFFFAAokkkl11<<<----:::((([[[[[[39gsyCJLMOOOOOMLJCysg96[[[[[9tEMQRRRRRRRRRRRRRRQOFo2{)$$@++........", "$%*;//^[6gtCEECta3(-&@+.. ..+$*;>///39ddddgsyEORRSSSSSSSSSSSSSRRRRRRRRRRRRRRQQMJCkkoAzIIIFFxlb33//(((::::;;;=*%$@@+4vHNNQOOMLLJJJJECDtng9999gtxCEEFEACxkkllicc::((((((::a33333[639gsyCJLMOOOOOMLLECysg9[[[^^[[atFOQRRRRRRRRRRRRRRROFk2{{)$@++........", "&~;(/^^[9nxEEExla(;*%@.. ..@%=>///[6ddggdgsyGMQRSSSSSSSSSSSSSRRRRRRRRRRRRRRQOMExkkoAFIIMFAxja33[/((:::;;;;-*&%@@++'vHHOOMLJJEJJJJEGCysgd999gjxCCCCCxxklllicba333(333aaaaa993339gntCJLMOOOOOMLLGCysnd6[[^^^^^3gxLOQRRRRRRRRRRRRRRQOAk1~{%$@++........", "=;(/[[[[9jyCECxja:=&@+.. .+@&->//[39dddddgsyJMQRSSSSSSSSSSSSSSRRRRRRRRRRRRRQOLCxlkoAFIMFFCtb33[//(((:;;;;-=*&$@++''4vIILLJGCCGEEJEGDysg9999ajttxxxxxtktttliga933339abbjbba9999gntCJMOOOOOMLJGDtsgd9[[[^^^^^^3jxLOQRRRRRRRRRRRRRROMAl1~{)$@+........+", ":(([[[[6djtyxtia(;*%@... .+$*;(/330ddddddgsyJMQRSSSSSSSSSSSSSSRRRRRRRRRRRRQOMExlllkAFFFFAxia3[///(((:;;;;-*&%$@+++'4pzJJGDDyDDCGGGDywnd96[39ajitttxxxCCCxytjga999abjjiijbaa9dgnsDGLMOOOOMLECysgd96[[^__]]^^^3jxLOQRRRRRRRRRRRRRQOFxl<~{$@+........+@", "(([[[[[69gjssja3>=&@+.. ..+%~:(330dddddddgsDJOQRSSSSSSSSSSSSSSSRRRRRRRRRRQQMJCtjclkCEFFECtb33[^^///(>;;;;-*&%$@+++'7pAADywwwwyDDDDDBshd6[[[39abiltxCAEEECCytjgaagjjillijbaaaggnwDELMOOOMLGDwnh06[[[____]]]^[[gyJOQQRRRRRRRRRRRQOFAlc<{)@+... ..+@$", "(([[[[[[69dga93(-*$+.. .+@)<:339ddd9399dgtCLORRSSSSSSSSSSSSNNNRRRRRRRQQQQOLExibbilxAEECxia3[^^^^//(>;;;;-*&%$@+++'77oyysiinswwyyDywnh06[[[[39ajitxEEFFJECxtijjjjltllljjbbjgjnsyDGJLLLLECyshd06[[[_____]]__[6gyEMOQQQQQQRRRRRRQMEkc<~{$@+.. ..@%{", "[[[[[[[[[[66[[(;~%@+.. .+!{<:aaddda3339dnyGMQRRSSSSSSSSSSNNHHIINRRQQQQQOOMExlbabblxCCCxtj93[^^^^//(>>>;;-=&%$@+++'!|2linggdgnswBywsnd0[[[[[[39gitxEEFFJECyttiillttllliiilltstwyyDGGGGDysnh0066[[[_________[6hwGLOOQQQQQRRRRQQMExib<~%@+.. ..+$*-", "[^^^^^[__[[[[/>=&@+... .+@)21ccgdaa33339gsDJOQRRSSSSSSSSSNHHzppzIOOQQOOOMLECtjaaabltxCxtig9[[^^^^^//>>>>;-=&%$@++++!)21caa39dhnswwwsnd0[[[[[[[9ajtxCEEEECxyttiitttlllllltxxxyyyyyyyyywsnhd066[[[[__________}6hsDJMOQQQQRRRQQQOLClb:<~%@+.. ..+@&->", "^^^^^_____^^//;&$+... ..+!22lligaa:::(39gtCLORRSSSSSSSSSNHvp777pzIOOOOMMLECtja99agitxxytna3[[^^^^^///>>>;-=&%$+++.+@){1<::(33dhnuwwsnh96[[[[[[69gjttxxxxtttiiiiiliiilltxCAECCDyywsssnhdd0666[[[[[__________}0hsDELOOQQQRRQQQOLEyib:-*%@+... ..+@&=>/", "^^^________^/>*%@... ..+$)2kkktic::::(3aiyEMQRRSSSSSSSSNHzp7777ozIOOOMMLECtjg999ajityytig9[[[^^^^^////>>;-=&%$+++.+@!{~<:::((3dhswywsgd6[[[[[[[39gjjjiiijjjjjjjjjjjilxCEFFFJECyysnnhd0066}[}[[[[[[________}0fmwDGLOQQQRRRQQOMJCtb::-*%@+.....+@%=>//", "__________]^/-&@+.. ..+@)2koACxtic<<::abtCLORRRSSSSSSSRIzp7!!!|ozFOOMMLECysg9999ajittttig9[[[^^^^^^///>>>-=&%$++..++!{~==--;:(9giwywsnd0[[[[[[[669dggggaaaaaggggjjjlxCEFMMMLJCywshd0066}}}}[[[[[[[______}}0dmuyDJLOQQRRRRQQOMJxib::-~&$@+...+@%=>//[", "_^________^/>*%@.... ..@%~1kAFFAxlc<<::aixEMQRRSSSSSSSNIzp|!!!!)|AFMMMLECtjg99399ajitttsnd6[[[^^_^^^////>>;=&%@++..++@%{*~===-::anwwwsnd96[[[[[[6699999999999aaaabjitCEMOOOMLJCysnd066}}}___[[[[[[[____}}60hnwyDGJMOQRRRRRRQOMExlc::-~&$@++++!{=:(/[[", "[[[}}}____^/;*$+... ..+${>;=&%@++...+@$%&&&**~=:aisttsng906[[[[[6669999999999999aajtCEMOOOOOLECysg966[}____}[[[[[[[}}}}}60huBDCGJLMOQRRRRRRQOMGxlc:<=*&%@@+!){1:3366[", "6666[}}}__^/-&@+... ..+@%~>;=&%@++...++@$%%%%&&~<:ciwtsngd96666666999993366663339aglxEFMOOOOMLCysnd06[______}[[666[[}}}}60hsyDGJJLLMQQRRRRRRQOLEkl<<=~{%$$!!)21cgddd00", "000066}}__/>=%@... ..+$&=cxFOOOIAk1>;=*%@+.....+@@$%%%%%{~*$+... ..+$&>;=*%$+.....++@$$$%%%&{1clttsingdddddddddd99936[[[[399ajtxCJMMOOMFExtng9[[[______[[6666666}}60fnwDGJJJJLLMOQRRRRRRQMFCl1<~~{&)))|ooCCDysnhdd", "dfff06}}_^/;&@+.. ...+${>;-*&$+.....++@$%%%%%%{11kxyttinggggghhgddd993[[[[699gjstyCELMMLJCxsgd0[[[______[[669000666660dnBDGJJJJLLOQQRRRRRQOMAkl1~~{{{{{2oAEJJCywnhdd", "fff006}__^/-&@... ...+${1kFOQQNIAlb:39aiyEMQRRRRRRRIzo|)!@+++@!)|oAAxtj93[[[[3339aaaa93[[[________]]^^^//>>-*&$++....++$%&&&%%%{2kkxxytsssssnnnnngad93[[[[69agjttyDCCEEEGDyig96[[_______[[660ddd000000fhsyGJJJLLLMOQRRRRRRQOFok11~~~*~~1kAFMLLGysnhfd", "ff006}}__^>=%@.. ...@${1oINRQIFola333ajyEMQRRRRRRIFpo|)!@+++@!)|oAAAtj93[[[[339aaaa99[[[[_________]^^^///>;-*%@+....+@%&***&&%{2koCCxxttttssssinga933[[[[9ajjttyyyyyDDytsgd96[[[______[[[69dddddd000ffnwDGJLLLMOQQRRRRRRRQIAk2~~~~~=<1kAFOOMLEDsnhdf", "ff00}}__^/>*$+.. ..+@%{2AINNNIFkca3339jtGMOQRRRROIAo|))@@@+@@!|oAFFAtj93([[339aaaa993[[[[_________^^^^^^//>;=&$+++++@%*=--=*&&)|2oAACCyytttwtsngga33[[[[39gstyyyyywwssngd96[[[^_______[[69ddgnhhfdfdhnsyGJLLMOOQQRRRRRSSSNIo|{{~~==-;*&$@++@%*-;;;-*&&){2oAEECDyyywtsngaa33(/[[[9gjtyyyyyssnggd93[[^^_______^[[69ddgnnnhhhhmnsyDJLMMOQQRRRRRSSSSNHp7|){{~-::cxFMQQQOLEDwshhh", "ff0}}__^/>*%+.. ..+${1kzIOOIFxia3[[[6gsCLMQQOOIAo||))$@@@@@!)|zIIFFxia3((33aabbba996[[[[___[[[^^^^^^^^]]^^/>;*%$$$%*->>>>;=&&%{2oAEEECDyttsnga33(((//[[9gstyyyysnghd06[[[^^________[[[99gnnnsnnnnuwBDCJLMOOQQRRRRRRSSSSNHp7)){~=::cxFOQQQQOLJCysunm", "hf0}__^^/;&$+... .+@%~1kzIIIFAkb33[[[6dsyJMOOOIzo|))!@@@@@@@!)7zIIMExia3(33aajjjgad966[[}}}[[[[[^^^^^]]]]]]^/>-*&&&*;>///>>=*&%{2kAFFECDytigaa3((>>(//[39gsyyyysnhd06[[[^^^]]]]]___[[[69ggnnssssswyDGEJLMOQQRRRRRSSSSSSNNv7!)){~=%@+.. ..+$&~1kAFIFAxla3[[[[6dnyELMMFzp|!!@@@+@+@@@!|pzIIIFxlb:33abjjjjgad000666}}}[[[[^^^^^____]]^^/>-==-;>/^^^/>-*&%{2kAFFJECysga33((>>>>(((3djstytsngd06[[/^^^^]]]]]___[[69dgnsssswwyDCELLMOOQQRRRRRSSSSSSSNHv7!){~<;*%@... ..+@%*=;;>//^^^^/>=&%%)2kAFFJECtia3((>>;;;;>((3ajsttssgdd6[[/^^^^^]]]]]]__[[69gnjsttyyyDGJLMOOOQQQRRRRRSSSSSSSNHp7|{~<=&$+.... ...+$&=-:lkAAAxklja9000dhsyGJFzp7!'++++++++@@$)|pFIIFAxlcbbbittttsnghhffeeeeeee066[[[[_______]^^/>>>//^^^^//;=&%$){2oEFJCxiba::>;;;;;;;>(3ajsttsngd96[[//^^^^^^]]]]_^[[99gjstyDDCCGELLMOOOQQQRRRRSSSSSSSNNHp|211ckAMORRRRRRRQOMLJEGCDy", "d0[[//>;*&@+.... ...+$&*;>:blkxxxxttigdddhnwDGEFzp7''.+...+++@@)||AFIFFAklcccitxxxytsnmhhhheeeehff06[[[[}}}}____]^//////^^^//>-*%$$!)|oAEACtcb::;;;;;;---;::acittingd33[/////^^^^^]]]^^[[9gjttDCGGGEJJLLMMOOOQQRRRRRSSSSSSNNIpk11lkAMORRRRRRRQQOMLLJGCDB", "0[[//>>-*%@+... ...+$&*;>((:clkxxCCCytnmmnsyDGEzp74''....+++@@$)2oAFFFExklccitxCCCxytsnmmmmhhmmmmmff06[}}}}}____]^//////////>-*%$@@+!!|oAokl<<===--;;;--==-:bcitlingd33/////////^^^^^^^[39jtyCEJLLLLLLLLLLLLMMOQRRRRSSSSSSNNzokllkAFORRRRRRRRQOMLLJEGDBw", "[[//>>-*&$++... ...+$&=;>///(ablxAEJJGDywsswDCGEzp4''.....++@@$){2oAFFFAxllcilxCCCCDywsurmmmmmmrrrrmhff0066}}}___^^//(3333((>-*%$++++''77oo22{{{**=-----====<>-*&%@+.... ...+@&*;>////(3alxEMMMLJCDyyDDGGzzp4''#....++@$){2koAFFEAxliiltxCEECDywuurrrrrrrruuurrmhhfe00}}___^^/39ajga3:={)@++.##''4477|)))%%&*=---=***~~>>>>>>>>>////[9jtCFMOQQQQOMLJCDyyxCEMOQRRRRRSSSSQIAokxAFORRRRRRRRRQOMLJJEGDysn", "[/(>-**&$++... ..+@%*;>/^^^//3alAMOOOOLJGDDDGGEzp44''#...++@@$)22kAAFEACtliilxCCEECDywwuurrrrrruuwuuwuumhffe0}}__^[[9gtytlc<{)!+.###,,,,447!!@@@$%&*===*****~~1cilicba:(>>>>>>;;;;;;>>/(3atCFMQQRRRQQOLEDttttCEMOQRRRRSSSSROFAoxAFORRRRRRRRRQQOLLJEGDywnh", "//>-=*&%@++... ...+$&->//^^^^/3atEMQQQQOLJGGGGJJzp44''#...++@$){2koAEEEAxliiltxCEEECDyBwuurrrrrruwwBBBBwwurhf06}}_[[9gtxDxtl2)!''###,,,,,44'''++@@$%&******&&*~<1ccccb:::;;;;;;-==**=-;>(3ixJMQRRRRRRQOLEDtttxELOQRRRRRSSRRROFAAAFOQRRSRRRRRRQQMLJEGCDysh9", "/>;=*&&%@+.... ..+@%*;>/^^^^^/3bxLOQRQQOMLJGGJJJzp4'''#..+++!))22koAAAAxtliiltxCEEEGDyywuurrrrruuwBBDDDDDBwrmf06}}[6dntDCxk2|!'''##,,,,5544'''+++@$%&&***&&&&{{~<;=*&&%@+.... ..+@&=>//^^^^/[9iCMQRRRQQOLJJGJJFzp4,''#..++!!)||oooCACxtijjjlxCEEJEGCDywuuurrruuwBBDDGJJGGDBumd06669ditxxtk2|!'''',',,555544''+++@@$%&&&&&&&&&{~<<<<<<==~*****&&&%%%&*=:blCMORRRRRRRRRQMECxCEMOQRRRSSSRRRRQOMFFMOQRRSSRRRRRRQQOLJGCDysnd0[", "/>-**&%$@+.... ..+$&->//^^///3atFORRRRQQOLJJJJJFzp44,,''''!!77ooooCCCxtljbjitxCEJJJEGDDBBuuuuuuuwBBDGJLLLJGDyumd0009gnstll2|)!!+''''445vvv477!++@@@$%%&&%%%%%%&*~=<--=~*&%%%%%%%$$$$%*-:cxEMQRRRRRRRRQOMJEEFMOQRRSSSSSRRRQOMMMMOQRRSSSSRRRRRQQMLECDysnd9[[", ">>-**&%$@+... ..+$*->//////(3jCMQRRRRRQOMLJJJFFzv44,,,''477ppzzAAACxxtijbjlyCELLLLJGGDDBwuuuuuwBBDGJLMOOMLJDBuhdd9ddgnic12))!!!!!)77ppvvzpp7!!!@@$$$%%%%%$%%%%&*~==~*&%$$@@@$$$$@$%&~:biCJOQQRRRRRRQOMLJJLMOQRSSSSSSSSRRQOMMOOQRRRSSSSSRRRRQOMLGCywsg96[[", ">;=*&&%$@+... ..+%*;>////>((btFORRRRRRQOMLLJLLIIvv555555vvHHIIIFFAAxtljjjitCELLLMLLJGDDBwuuuuuwBBDGLMOQQOMLGDwsghdddaab12)))))){22|ozzIIIzpo|))$$$$$$$$$$$$$$%%&*~**&%$@@+++@@@@@$%*-:aiCJMOQQRRRQQOMMLLLMOQRSSSSSSSSRRRQOOOQRRRRSSSSSRRRRRQOMLGCysnd9[[^", ";=*&&%%$++... ..+@&=;>//(>>::iAIRRSSRRRQOMLLLLMIIHvqqqqqKPPNNNNNIFEAxtljjitxELLMMMMMLJGDDBwuuuuwBBDJLOQQQQOMLGDwngddda:<2)))){21///>;;<1kFQSSSSSRRROMLLLMOOHHKKKKKPPPNNSSSROMJAxtljjiyCJLMOOOOMMLJDDBBwuuuwBBDJLOQQRQQOMJGywngaaa<2{)!||21cclxAFMOOOOMFAk2{)$$@@@++++++++@@$%%%$@@+++.+++++@@%&->3ajtDGLLMOOMMLLLLMOQQRRSSSSSSSSSRRQQQQRRRRRRRSSRRRRRRRQOOLLGDtnd[[^/", "%%$$$$$@+... ..+@&=>>//(>;-12oINSSSSSSRROMLLMMONNNPPPPPPNSSSSSSSRMFExtljitxGLMOOOOOOMLJGDDBwuuuwBBGJMQQRRRQQOLJGDtigbc12|777okktxxEFMOOQOOOIzo2{)$@@++++++..++++@@@@@+++....++++@@%*-(3djsyCGJLLLLLLLLMOQRRRSSSSSSSSSRRRQQQRRRRRRRSSRRRRRRRRQQOMLEDtg9[///", "@@@@@@@@+... ..+@%*;>//((:;=12zISSSSSSSRROMMLMOQRNNNNNNNSSSSSSSSSROFCxtiistCELMOOQQQOMLJGDBwwuuuwBBGJMQRRRRRRQOMLECyti1277ppzzAACCELMOQQQQQOOIAo|!@@++..........+++++++......++++@@%*;(3ajsyDCGEJJJJLLMOQRRRSSSSSSSSSSRRRQQRRRRRRRRRRRRRRRRRQQQOMLGysa3[//;", "+++++@@++... ..+@%*;>///((:;<1kzNSSSSSSSRROMLLMORRSSSSSSSSSSSSSSSSROFCttiisyCJLMOQQQQOOLJGDBwuuuuuBBGJMQRRRRRRRQOOMJGCxopvvHHIIFFJFLMOQQQRRRROIzp|!+++........................++++@$&=>(3antyDCGEEJJLLMOQRRRSSSSSSSSSSRRRQQQRRRRRRRRRRRRRRRRRQQOOLJCtg9[//>=", "++++++++... ..+@%*;>////((>:<3djsyDCCGEJJLLMOQRRRSSSSSSSSSSSRRQQQRRRRRRRRRRRRRRRRRQQOOMJCtn9[[/>;*", "....+++.... ..+@%*;>//////(>::=&", "........... ..+@%*;//^^/[[/((>(:lFORSSSSSSRQOMLLMRSSSSSSSSSSSSSSSRRRQMCtsinssyDJLMOQQQOMLGDywurrrruuBBDJMQRRRRRRRRRRRRQONNNNSSSRRQOMMOOQQQQRRRRRRNIp7''+............ ...++@$%&=:3gsyCGGEJLLLMOOQRRRSSSSSSSSSSSRRQQQQRRRRRRRRRRRRRRRRQOMMLECynd6[^^>-&%", ".......... ..+@%*;//^^^[[[//(((3iEORSSSSSSRQOMLMORSSSSSSSSSSSSSSSRRROLCtsnnswyDJLMOQQOOMJGDBwurrrruuBBDJMQRRRRRRRRRRRRRNNNSSSSSRRQOMMOOQQQQQRRRRRNIz4''++.++......... ...+@$%*-:bixCGEJLLLMOOQQRRRRSSSSSSSSSSRRQQQQRRRRRRRRRRRRRRRQQOMMLJCysg9[^^/;*%@", ".......... ....@%*;/^^^__[[[/((((3bCMRSSSSSSROOMLMORSSSSSSSSSSSSSRRRRROLCytssswyDGLMOOOOOLJCywwurrruuuBBDJMQRRRRRRRRRRRRNSNSSSSSSRRQMMMOOQQQQQQRRRRRIzp7!+++@@++++..... ...+@@%*=&@+", "..............+$&->/^^__}}[[/(((/3bxMQRSSSSRROMLLMORSSSSSSSSSSSSSRRRRROLGCytwwByDJLMOOOOMLGDywwurrruuuBBDJMQRRRRRRRRRRRRSSSSSSSSRRQOMMMMOOQQQQQRRRRROIp7!!@@@$$$@@++.... ...+@%{=&@+.", ".............+@&=>/^^__}}[[(((>(/(axLQRRSSSRROMLMMORSSSSSSSSSSSSSRRRRROMLGCDyyyDGJLMOOOOMJGDywwuuruuuwBBDJMQRRRRRRRRRRRRSSSSSSSSRRQMMLLLMMOOOQQQRRRROFo|!$$$%%%%%$@+.... ...+@){1ctDCEJLMMOQQRRRRRRSSSSSSSSSSSSRRRRRRRRRRRRRRRRRRRRRRQQOOLJDwn9[/>-&$+..", " ...........+@%*;/^^__}}6663((>//(9tEORRSSRROMLLMMORSSSSSSSSSSSSRRRRRRQOMLLEGCDGJLMOOQOOMLGDywwuuuuuwBBDGJMQRRRRRRRRRRRSSSSSSSSRRROMJEEJLLMMMOQQQRRQOzo|)$$%%&&&%$@++... ..+@${1clxCGJLMOQQRRRRRRRSSSSSSSSSNSRRRRRRRRRRRRRRRRRRRRRRRRQQOMLGyn93(-&$+...", " .........+@$*->/^^_}}60003(((//[9lEMQRRRRQOMJJLMQRRSSSSSSSSSSSRRRRRRQQOOMLLJJJLMOOQQOOMLGDywwuuuuuwBBDGJMQQRRRRRQQQRRSSSSSSSRRRQOLEGGGEJLLLMOQQQQOFA2{)$$%%&&&%$@+.... ...+${/^^_}}60fd03(((//[3jxMOQRRQOMFEGJMORSSSSSSSSSSSSRRRRRRRRQQQOMMLMMOOQQQQOMLGDywuuuuuwBBBDGLMQQRRRRQQQQRRSSSSSSSRRRQMLEGCCGGGJLMOQQQQOFo2{)$$$%%%$$@++.... ...+$&<:bixCJMOQRRRRRRRSSSSSSSSSNNNNRRSSSSSRSRRRRRRRRRRRRRRRQQQMLCwg3(-&@+.. ", " .......++$&=>/^^__}}0ddd03((////3atEMOOOOMFGCCGLORRSSSSSSSSSSRRRRRRRRRRRQQQOOOOQQQQQQOMLGDywuuruuwBBDDGLMQQRRRQQQQQRRSSSSSSSRRRQMLEGDDDDCGJLOQQQQMEk2)$$@$$$$@+++...... ...+$&-(ajtCJMOQRRRRRRRSSSSSSSSNNNNNNSSSSSRSSRRRRRRRRRRRRRRQQQOLJDsa3>~%@.. ", " ......++$&=>/^^]__}60ffd03(///^^[3iCFMOMMJCDyDGLORRSSSSSSSSSSRRRRRRRRRRRRRQQQQQQRRRQQOMJCywurrruuBBBDGJLMQQQQQQOOOQRRRSSSSSSRRRQMLEGDDDDDCELOQQQOMAk2)$@@@@@+++........ ....@$&-(3gtCLMQQRRRRRRRSSSSSSSNNNNINNSSSSSSSSRRRRRRRRRRRRRQQQOMJCwg9(;*$+.. ", " ....+++@%*;/^^]___}60ef03((//^^^/3axAFMFFAxywyDJORRSSSSSSSSSRRRRRRRRRRRRRRRRQQRRRRRRQOMGDwurrrruwBBDGGJLOOQQQOOMMOQRRSSSSSSRRRQOMLEGDyyyyDGLOOQQOFCl{)$@@++++.......... ...+@$*;(3bxEMOQRRRRRRRRSSSSSSNNNHHINSSSSSSSSSRRRRRRRRRRRRQQQOMJGynd3(-&@.. ", " ....++@%*->/^]]__}}60e003(//^^^^^[9lxEEEAxtsswDJOQRRSSSSSSSRRRRRRRRRRRRRRRRRRRRRRRRRQOLGysrmmmruwBDDGJLLMOOOOMLLLMOQRRSSSSRRRRQMLJGDyywwwyGLMOQOMFx1{)$@+++............. ...+@%*;(3jxFMQQRRRRRRRRRSSSNNNNHHINNSSSSSSRSSRRRRRRRRRRRRQQOMLGysg93:*$+. ", " ...+@$&->/^]]]__}}800063///^^^^^[3btCAAxysissDJOQRRSRRSSSRRRRRRRRRRRRRRRRRRRRRRRRRRQOLCwummmrrwBDDGJJLLMOOMLLJJJLOQRRRRSRRRRQOMJGCDywuuwyGLMOQOMAk1{)@@++............... .....+@%*;(bxFMOQRRRRRRRRRRSSSNNHHHIINNSSSSSSRSSRRRRRRRRRRRRQQOLJDwnd3(=%@.. ", " ..++@%*;/^]]]___}}66666[//^^^^^^^3alxxxxtinnsDJORRRSRRRRRRRRRRRRRRRRRRRRRRRRRRRSSRRROJDwnmmmruBDDGJJLLLMMMLJGGGGJMQRRRRRRRRQOMJGCDywuuusyGLMOOMFAl1{%@++........................++@%~:alEMQQRRRRRRRRRRRRRNNHHzzIHNNSSSSSSRSSRRRRRRRRRRRRQQOLGysg9(-{@+. ", " ..++$&->/^]]]____}}}6[[[//^^^]]^^39jtxxtijnnwDLORRRRRRRRRRRRRRRRRRRRRRRRRRRRRRSSSSRRMJDwrmmmrwBGGJLLLLMMMLJGCCDGJMORRRRRRRQOMJCDyywwurrsyGLMOOMExl<{%@+.......................+++@$&=:lAMQRRRRRRRRRRRRRROIzzpppzHNNSSSSSSSSRRRRRRRRRRRRRQOMJDtna3:~$+. ", " ..+@%*;>^]]]]]___}}}}[[[/^^^]]]^^[3bltttinnsyGLQRRRRRRRRRRRRRRRRRRRRRRRRRRRRRSSSSSSQMJDwnmmruBDGJLLMMMLLJJGDDDDCELOQRRRRRQQMJCyyywwuumrsyGLMOMLAkc<~%@+... .....+++....+++++@@$&*:jAMQRRRRRRRRRRQOFAk12{))!7vHNNSSSSSSSSSSSSSRRRRRRRRQOJCtg93:~)+. ", " ..+@%*;>^]]]]______^^^^^]]]]]]]]_^[[9gnistDGJMQRRRRRRRRRRRRRRRRRRRRRRRRRRRRRSSSSSNNOLGywuwwBDJLMOOOMLJGDBwwyDGJJLLMMOOOMLGysnnruwBwwwuwyGJLLLExj3(>-&@+... .....+@$%&*=-;>>>>>>>>(alAMOQRRRRRRRQQOLAkl1{)))|pvHNNSSSSSSSSSSSSRRRRRRRRQOMEDsa9(-{@+. ", " ...+$&->/^]]_____}[^^^^]]]]]]]]]__[[9dgntyCELOQRRRRRRRRRRRRRRRRRRRRRRRRRRRRRSSSNSNROLGywwwBDGLMOOOMLJGDwsstDGJLLLLLMMMMLEDtnnnuwBBBBwwBDGJLLExia3/(;&$+.........++$%&*-;>>////>>>/(atEMOQQRRRQQQOMLExl<1{{))7pHPNSSSSSSSSSSSRRRRRRRRRRQOLGyia3:~)+. ", " ..+$&->/^]]___[[[[^^^^]]]]]]]]]__[[69gntDCJLOQRRRRRRRRRRRRRRRRRRRRRRRRRQQQRRSNNNSQMLGDBBBBGJLMOOMMJGDwunsyCJLMMMMLLLLLECtsnnswBDDDBBBBDGJJECtb3///;*$+.........+@%&*-;>//////////(atCLMOOQQOOOMLJExlc<<~{{|7vHNNSSSSSSSSSRRRRRRRRRRRRQMJCtga3<{@+# ", " ..+@&=>/^^]_[[[[[[[^^^]]]]]]]]]___[60dntDGJMOQQRRRRRRRRRRRRRRRRRRRRRRRQOOMOORNNNQOMJGDyBBDGJLMMMMJGDwumnsyELMOOMMLLLJECyssnswBDDDDDBByDGGGCtj93^//;*$+........++$&*=;>>//////>>>/(aixELMMMMMMLJECxlca:<~{{|pHNNNSSSSSSSSSRRRRRRRRRRRQOLGysga:~!+. ", " ..+@&=>/^^^^[6666[[^^^^]]]]]]]]____}0dntCELMOQQRRRRRRRRRRRRRRRRRRRRRRQOMLFFMOOQQOMLECDBBDDGLLMMMLJDwughgsCJMOQOOMLJEGDysnnnuwyDGGDDByDDCCDtj93^^//;*$+........+@%&*-;>>/////>>>>//3btxCEEEEEECCxtlba::<~~2ozHNNSSSSSSSSSSSRRRRRRRRRRQMJCwna:<)@+# # ", " ..+$&->/^^^[[6666[[^^^^]]]]]]]]____[0dntCELMOQQQRRRRRRRRRRRRRRRRRRRRQOMJGCCEFMOOMLJGDDBBDGJLLMMLJDysngggtCLOQQQOMLECytsnghnsBDGGJGDDDDDDDyja3[^^^/;*%+.......++$&**-;>>>>>>>>;;>>((9jityxxxxxxttiba3(:<<12pIHNNSSSSSSSSSSSSRRRRRRRRQQLGDsna<{!+. ", " ..+%=>/^^^[[6666[[[^^^]]]]]]]]]]___[6dntCELMOQQQRRRRRRRRRRRRRRRRRRRRQMJCytyxCEFFJEGDDBBBDGJLLLLJGDwngdgiyEMOQQQOMJCysngddhnuBGJJJJGDDDDyysg9[^^^^/>*%+.......+@%&*==-;>>>>;;---;;>((3aggjiiiiiibaa3((:<<2ozHNNNSSSSSSSSSSSSSRRRRRRRQOLGysb:~)+.# ## ", " .+$*;>^^^^[[666[[[^^^^]]]]]]]]]]___}60ntDGJLOOQQQRRRRRRRRRRRRRRRRRRQOLCysiistDCCCCDyBBBBDGGJLLJJDBshddgixJMQQQQOLEDtngdddhuBGJLLLLJGDDywsg9[[^^^^/>=&@+.....++$%&**=---;;--=***==;>((333aaabccba:(((>:<12oINNNSSSSSSSSSSSSSSSRRRRRRQOLCyic1{!+## # ", " ..@&->/^^__}[[[[[[^^^^]]]]]]_]]]_____69gsyCJLMOQQQQRRRRRRRRRRRRRRRRQOMGDwngggiswyyywwwwwBDDGJJJGDyundaaaiCFOQQQQOLEDsndddhuBDJMOOOMLJDDBsgd6[^_]]^/>-&$+.....+@%&***======***&&&&**=;>>((::::::::((((>::1ozINNNSSSSSSSSSSSSSSSRRRRRRQOLCyic2)+.#### ", " ..+%*>/^]]__}}}[[[^^^]]]]]]]]]_]______[0dntDGJLMOQQQQRRRRRRRRRRRRRRRQOLCysndddgnnsssuuuuuBBDGGGGDywnd93abiCFOOQQOOLGDsnghhrwDJMOQQQOMJGysnd6[[__]]^^/;*$++...+@$&**======***&&%$$$%%&*=----=<<<::((((((:blAINNNSSSSSSSSSSSSSSSSSRRRRRQOLGyl1)!'#### ", " ..+$*;/^^]____}}[[^^^^]]]]]]]___]_____}[9dnsyCGJLMOQQQRRRRRRRRRRRRRRQOMEDsnddddddhgmnrrruuwBDDDGDBwmd93::bixFOOQQOMLEDwsnnswDJMQQQQQQMLGysg9[[^__]]]^/>=&@++++@$&*=---===***&%$$@@@@@$%&&***~~=<::((((((:ckAIQNSSSSSSRRSRSSSSSSSSRRRRRQOJCk2|!'##### ", "..+$&;>^^]________^^^^]]]]____________[[69dgswyCEJLMOOQQRRRRRRRRRRRRRQOLCyuhd00660ddhhmmrruwBBDDDBwrd03::::ixJMOOQOOLJGDBwwBDJMOQRRRQQOLGynd6[[^___]]^^>-&%@@@@$&*=;;;;--=**&%$@+++++++@@$%%&{*~=-:((((33alxFORRSSSRRRRRRRSSSSSSSSRRRRRQMJCk|!'#### ", "++$&->^^]]_____________]_____________[[69ddgnsyDDGJLMOOQQRRRRRRRRRRRQQLEDsmdd0666600ffhmmruuwBBBBwrh03(:-<>>;;;-**&$@++......++@$%%&{~~<::(333aixEMOQRRRRRRRRRRRRSSSSSSSSRRRQOMAk2!'### # ", "@%*;>^^]]___________________________[[6dggnnsswyyDGGJLOOQRRRRRRRRRRRQOLDBrhd0666[660ffhmmrruuuwwumh03(:-===*&%&&*-;>>>>>;;-*&$@+..........+@$)){{~<<:aaagitCJMOQRRRRRQRRRRRRSSSSSSRRRRRQMJxk|!'## ", "&=;/^^]]___________________________[[9gnsssssswwByDDGJMOQQRRRRRRRRRQOLGysmhe066[[[60ffhmmmmrrrmmhf03(>;===-*&&&*-;>>>>>>;;=&%@+..... ..++@$)){211cccityCJMOQQRQQQQQQRRRRRRSSSSRRRRRQOFCl2!'## ..", "->//^^________^____________________[9gsyDDDyywwwwwBDDJLMOQQRRRRRRRRQOLDBuhfe06}}}[60fhhhmmmhhhff033((;-===;****=;>>>>>>>;=*%@+.... ..+@!!))|2kkkkxDGFMOOQQQQQQQQQQRRRRRRRRRRRRRQOLEt1|!'# .+@", "(((/^^[[}}[^^^^___________________[6gsCEJEGCDywwsuwBDGJLMOQQRRRRRRQOLGDwrhee066}[[60dhhhhfff0063(((>>;===-:cyGLMMOOOOQQQQQQQQRRRRRRRRROLGytsjjnnng96[[//>;**&*=;>>>>>>;=*&$+.... .+++!!!!||ooCAEFMMOQQQQQQQQQQQRRRRRRRRRRRRRQOMExl1)@. .+@)", "ba93[[[6[[[[[^^^__________________[dsCJLMMLJGDywsswwBDGJLMMOQQRRQQOMLDBumhee066}}660dhhhdd0633(((>>;-=~==-:ixGJMMMOOQQQQRQRRRRRRRRRRRRQMJCyyyyyttng96[//>-*&&*=-;>>>;-=*&$++... ..++!!!77ppzzFMOOOQQRQQQQQQQQQRRRRRRSRRRRRQOMLCtc1)+. .+@)~", "xtingdddd066[[^^_________________[0gyEMOOOMLJGDBwsswBDDGGEJLMOQQQOOLJDwumhee866}6600dddd0663((>>;;-=***=-:bixELLMMOOQQRRRRRRRRRRRRRRRRQMLECCCCCDysgd6[//;=*&&&*=;;;;-*&%$@+... ...+@@!!77pzzFIOOOQQQQRQQQQQQQRRRRRRSRRRRRQOOLExi:~)+. ..@)21", "JECyttsnngd96[[^________________}[9sCLOQQQOMLEDywsuswwBBByDCJMMOOOMLGywrmhee066666099d9033((>>;;-==****=;:btCELLMMOOQRRRRRRRRRRRRRRRRRQOLJEGGEGCysg9[[/>;*&%%%&*=--=*&%$@+.... ..+@@!!!77pzFIOOOOQQQQQQQQQQQRRRRRRSSRRRRQQOMJCtb:~$+. .+!|2o", "OMLLECDytsgd3[[[________________[6dtEMOQQQQOLJCywsuuuuunnnntxELMMLLEDywrmhee006666699333(((>;;-==*****=;:3gtCELLLMOOQRRRRRRRRRRRRSSRRQOMLJJEGGCDtn9[[//>=&%$$$%&***&&%$@++.... ..+@@$))||opzFIOOOQQQQQQQOOOQQRRRRRRSRRRRRQOMLExja<&@+. ..+)|oF", "RQQOOLJGDtna96[[_______________[[6gtEMOQQQOOLJCywsrnmhhd999ajtCELLJGDywrmmee80666[66333/(>>;-===***==-;>(3iyCJJLLMMQQRRRRRRRRRRSRSRRROMLJGGGCDysn9[[^/>-*%@@+@$$%&&%$$@++.... ....+@%&*~22kAEFMOOOOQQQOOOOOOQQRRRRRSRSRRRQQOMFCtb:~$+.. .+!|oFI", "RRRRQOMJGxig93[[[}__________^^[[[6dsCJMOOOOMLGDwsnmhhd06[[[39jtCEEGCDywummhee0066[[[[//(>>;-======-;;>>(3asyGJLLLLMQQRRRRRRRRRSSSSSROMJECDDyttjg9[[^//;*%@+++++@@$$$@@+++.... .....+@%*=-:>;-=====-;>>(//[3gtCEJLLLLOQQRRRRRSRRSSSSRROFEDytsnngg9[[^^^/>=&@++....+++++++++..... .. .....++$&=;>(actCEJLLMMMOMMMLLLMOQRRRRRSRRRRRQOMMFClc<{@+.. .+!7INSS", "SSSSSSQOFCtja9066}}}}}_[/////((>>((:bilkxxxytigdd0066[[/^^^^/3ajtyDDDyBwurmhhd006[[////>;;-===-;;>////[6dsDGJLLLLLOQRRRRRRSRSSSSSQIExljggdd96[[[^^^^>-&$++.......+++++++...... ......+@%*;>((ajtCCEJLLLLLLLJJJLMOQRRRRRRRRRRQOMMFAtc<~$+.. ..+!7zNSSS", "SSSSSRROFAxigd9066}}}[[//(>;;;------<<<<1cccaa33333[[[/^^^^^^[9gttyyyyBywwummhd06[[////>;;----;>>//[[[3dnyCJLLLLLMOQRRRRRSRSSSSSQFAlba336[[[[[__]^^>-&$++.........++++@++.............+@%*;(/39jtDCGGEJJJEGGCCELMOQRRRRRRRRRQOMFECxib<{$+.. .+!7pHSSSS", "SSSSRROOFAxtjgdd066}[[/(>;=********~~~~~~~<<::(((///////^^^^^/3ajsyyyDDDyywurnd96[[////>>;;;;;>(/([39dgntCELLLLLMOQQRRRRRRSSSSRQIClb3([[[[[^__]]^^>;*$++..........++@!!!@++...........+@%=;//3aitDCCCCCDCDDyyyCJMQRRRRRRRRRQOMJExtjb:=&$+.. ..+@!pINSSSS", "SSRRRQOMMJECysnhd06[[/>;=*&%%%&&&&&****{{**~=-;>>((//////^^^^^[9gstyyDDDDDyBsng93[[////>>>>>>>((33agjstDCELLLLLMMOQRRRRRRSSSSSOIxla((/^^^____]]^^>;*$@+.........++@!)))))!@++.........+@%*;(/3aiyDDDDyyBwwtstyCLOQRRRRRRRRQMLECxtjb::=&@+.... ...+!|oINSSSSS", "RRRQQOOOMMLJECyshd93(>-*&%%$%%%&&&&*&*&&&&&**==-;>>>>////^^^^^[9gjtyDDCGGGDywsg96[///////(>>(((39gitxCGELLLLLMMMOQRRRRRRSSSSSOFCla((/^^^]]]]]]^^>;*%@+.........+@$){22222{)$@++.......+@%*;>/3gsyDDDywwunnnisyELOQRRRRRRRQMFECxtjba(:=&$@+.........+@!|ozNSSSSSS", "RQQOOOOQQQOOMLGysh93:-*&%$$$%%&&&********&*****=-;>>>///^^^^^^[3gjtyDCGGEGGDysg9[[///////////[39gtCEJLLMMMMMMMMOQRRRRRSSSSSSQMAla3(/^^^]]]]]]^^/;*%@+........+@$&~1<1lcc<<~{%@+........@%*;>(3gsyDDywsnmhhgntxEMQRRRRRRRQOLECxtiba3(:=&$@++.....++@$)2kzIRSSSSSS", "OOOOOQQRRRQQOMLCyia:;~*&%%%%%&&**=====********==-;>>>//^^^]]]^[3antyDCGEEGGDysd9[[[[[[[[///[[69gtCJMOOOQOOOOMOOQRRRRRSSSSSSRIAkb3(/^^^^]]]]]^^/>=&$+.......+@$%*=::bbbcb::-~&$@+.......@%*->(3gsyyyBsnhdddgiyELOQRRRRRRRQMJCxtljba3(:-*%$@+++++@@%&~1kAIRSSSSSRR", "MMMOQQRRRRRRQOMExia:-~*&&&&&&**=--;;;;;---====--;;>>/^^^]]]]]_^[9nsyDGGEEEGDwnd6[[[[[[[[[[[669gsDEMOQQRQQQQOOOQQRRRRSSSSSNNIzkc33/^^^^^]]]]]^/>-*%@+......+@$&~->((33aa3(:-=*%@+.......+$&=;(3gsyywsnhd09djtCJMOQRRRRRRROMExtiija33(>-~&%%$$$$%&*=-:lAIRRSSSRRRQ", "FLMOQQRRRRRRQQMExib:-=**&***==-;;>>>>>>>>>>;;;;>>>//^^]]]]]]]_^[9nsyCGGEEGCysg9[[[[[[6660600dgsyELOQRRRRRQQQQQQRRRRSSSSSPPHzo1:((//^^^^^]]^^^/>-*%@+......+$&=;>(((333((>;-=&%@+.......+$&*->3aitssnhd069diyELOQRRRRRRRQOLExtija93((>;-=*&&&**=-;>(cxFORRRRRRQQO", "EFMOQRRRRRRRQOFCtc::-=~****=--;>>>>///////////////^^]]]]]]]]]__[9gsyCGGEGCytnd6[[[[60dfdhhdhmsyGLOQRRRRRRRQQQQRRRRRSSSNPKKv7|1:((/////^^^^^^//>-*%@+.....+@%~;>(/////((;-=~*&%@+.......+@%*-:(aninnd06669gtCJMOQRRRRRRRQOLCytjga33(/(>>;;--;;>>//3bxFOQRRRRQQOMF", "CELOQQRRRRROMFAklc:-=~*****=-;>>>///^^^^^^^^^^^^^^]]]]]]]]]]]]^[9gsyCCGGCDtsd96[[[60dhmrrmmruwDJOQRRRRRRRRQQQQRRRRSSSNPKq54'!{=;>(//////[[[[(/(;=&%@+...+@%*->((/[///(;-**&&%$@+.......+@%*=;:agggd06[[39gtCLMOQRRRRRRQOMEDtiga33(/////>>>>/////3bxEMOQRRQQOMFEC", "xEFMOQQOOOIFAolc<<<~~*&&&**=-;>>//^^^]]]]]]]]]]]]]]]]]]]]]]]]]^[3gsyDCCCDtsgd06[660dmuwwwuwwBDGLOQRRRRRRRQQQQRRRRSSNPKqq5,,'@){=;>(((33aabbbaa3::~&$@+++@$&=:(333[[/(>-*&%%%$$@++......+@%*=;(aagdd3[[[39gtCLMOQQRRRRRQOLCyiga33[////////^^^^^[3btEFOQQQQOMFAxtl", "tCEFMMMIFAokk211~~~{&%%%%&**-;>/^^^^___]]]]]]_________]]]]]]]]^^[ajtyDyytsgd906600dnuwBBBBwByDJMQRRRRRRRRQQQQQRRRSNNHq5,,##.+@%*-::abblxCCACxtib:<{%$@@@%*=:33aad333(:=&%$$$$$@@++.....+@%*=;:3ada33(/(39jtCJMMOQQRRQQOLGysga93[///^^^^^^^]^^[3btCFMOOOOMFAxijba", "ltxCAAAoo||22{{{{{&%%$$$%&*=;>//^^______]]]]]__[[[[[^^_]]]]]^^^^[9gjtttsngd99000dhnuBDDDDBBBDGLOQRRRRRRQQQOOQQQRRNHv5,,### ..@${~//^_______]]]]]__[39999[[^_]]^^^^^^[3dgnnggd990090dhnsBDDDDDDBDDJMOQRRRRRQQOOMMOOQOOIv4,### ..+${1clxEMOQQRRQOMEyi1{))%{=::aityxxttja::={%%%%&&&&%$@++++@%&*=-:::a:3((((39gsyDGJLMOOOOLEDsg9[[^^^^^^^]]]]]_^[3gtCELMMFFECxja99339", "9aaab<1{{))))))))))%%%%&*=;>//^_________]]]__[9ajjjg93[^^^^^^^^^/[39dd99666609dhnswBDGGGDDDDGJMOQQRRRQOMLLLLMMMMzp4'## ..+${1lkAMOQRRRRRROJx22{)&*=:agtxCCECCxtja:=~&&&&*****&%$@@@$%&*~=<<:::((((33dgityDGJLLLLLGDsg9[[^^^^^^^]]]]]_^[9gtCEJFFFECxtja9936[6", "333(::=~~{{{{{{{{{{{{*~=;>(//____}______]]__[6ajttttj9[[^^^^^^^^/[[6366[[[[660dgnsBDDGGGDDDDGLMQQQQQQOMLEGCCCECoo7'## ..+${>;;---<<<::<:-:::((/[[}}}}}}_____]_]__[9nsyyytja3[^^^^^^^^/[[[[[[[[[[60dhnuwBBDGGGDDDCGLMOQQQQOLECyttttll2)!'. ..@%~:ctEMQRRSSSRRIzo2{{{~::gtCELMMMLLECtb::;--;;;>>>>>>;-=~~~~~~~~1<<::((333dggnnswyDDDysnd6[[___]]]]]]]___[[3aitCAACxtljbaa99999936", "[[///////((333aa93333333[[}}}}}}}}_____]]__[[djtyyysnd6[^^^^^^^^^[[[[[[[[[[60dhnuuwBDDDDDDDGJLMOQQOMLGDsjgaac1{)++.. ...@%~:aiAMQRRRRRRIzo22{{~::btCJLMMMMMLECtb:::>>>>>////^//>>;;--=~~~11<::33339dghggnsswwsng96[____]]]]_____[[[3ajtxxCxklcbaa9dddddd996", "[[^^^^^[[[69dddhddd00066666}}}}}}}____]]]__[6dnswwsnh9[[^^^^^^^^[[[[[[[[[[[60dhmuuwBBBDDDDDGJLMOOOMLGyja93(:~{!@+.. ..+@&=>3bxFOQRRRROIAk2~~<::btCJMMOOMMMMEClc:(>>>////^^^^^^///>>;-=~~11<::33399dddhhgnnsnng96[[^___]]___^[[[[69agittkkllcbaaaddhhhhhd06", "[[[[_[}[660dhmmmmhhfee0008888}}}}____]]]]__[6dgnnngd06[__]^^^^^^[[[[[[[[[[60dhmrruuuwwBByyDGJLMMMMLGyja3((-*%$++.. ..+@&->(atEMOQQOOFAk1<<::abtCJMOOOOOMMLExlb:(((////^^^]]]^^^///>:-<111cba3999ddddhhhnnngg96[[________[[[699dgggjiiliccc:aadddhmmnmhd06", "[____[}60dhmmuuurmhfeee8888888}}____]]]]]__[60dhhdd06[___]]]^^^[[66[[[[[[[60dhmrrrruuuuuwwyCELLMLJGysa3((-*%@+.... ..+$*;((3jxJMMMMExlc::((3aiCJMOOOOOOMMFExia:(((///^^^^]]]__^^//((:<<//3aixEEAxtca3((33diyEMOQQQOOOMMJCtb:(((////^^^]]]]___^^//((:-&$@+... ...+@%*;///^[[[999933[/[[[6dsDLOQQRQQQOMLJCtja3((/////^^^]]]_____^^[(((:abnitwyyDCGEJJJJGDysnhdf006600dmsyCGEECylcc:::::300fhmrrrrmhe06}}_", "___}}60fhmuuwuurmfee00086}}}}}___]]]]]]]____}}}}}}_____]]]]_^[0dhmmhdd0ddhnwBBwwrmhe0000dntCGJJEDtj93[/>-&$@+..... .....+@&=>///[^^[[[[[[[^^^[[6dnyJMQQRRRQQOMLExlba3((////^^^^]]]]]]__^^[/(33agisyyDGEJLLMMMMLGDwsnhhfffefhmsyCGEECxlcb:::(3300femmrrmmhe06}}__", "____}60fhmuuuurmhf000666}}}}}____]]]]]]]____}}}}}______]]]__[60hmmmmhdddhuwyDyBumhe06660dntCEJEGytg93[//;*&@++........+@$*->//[[[[^^^[[[_^^___}0hBGMQQRRRRQQOMLExib33(////^^^^]]]]]]]__^^[/(3aansyDCGJLLMOOOOOMJCywurrmmhhhhnsyDCCCxlca::(33660eemmmrmmhe06}____", "____}}0dhmuuuurhd00666}}}}}}____]]]]]]]]___}}}}}_______]___[[6dhmmmmhhhmuwyDDDBumf06}}60dsyGEJECytg93[//>;*%$@+++++++@@%*;>/[[[[[[[^^^_______}6duDLOQRRRRRQQOMJCtja3(////^^^^]]]_]]]]___^//(3agsyDCGJLLMOOQQQOMLGDBwwwurrmmmnswyyytiba33336660eemmrrrmme06}}____", "____}}0fhmuuuumhf0066}}}}}}____]]]]]]]]____}}}}____________[}0fhmmmmmmnuwDCGGDBrh06}}[69gtCEJJECytg93[[//>;*&%$@@@@@@$&*;>//[666[[[/^^______}6fmBJOQRRRRRRQOMLGxia3((///^^^^^_____]]]___^^/(3aitDGJJJLLMOOQQQOMLGDDyyBwwuurmniiiicba:33336660eemmrrrrmhf06}____]", "____}}00hhnrrnhd006}}}}}}}_____]]]]]]]_____}}}}__________[[[60fhmmmmmnsyDGJJGDwnd6}}_[69jyCEJJECytja9[[^^/>;=&&%$@@$$&*;>//[[6663////^___}}}60hwGLQRRRRRRRQOLECtg93(///^^^^^_____]]]]]]]^^/(3atDGJJLLLLMOOQQQOMLGGCDDDDBwunnggaaa::(((3[[660eemruuwuumhf06}____]", "___}}60dhhnnnhd0066}}}}}}}____]]]]]]]]____}}}}}_______^[[[[600fhmmmmrswDELLLJDwh06}_[[6atxEEJEECytjg9[[^^//>-*&%%$$$%*=>///[6633(((/[[}}}}60fmuDLOQRRRRRRQOLECtg93(///^^^^^______]]]]]]]^^/(3btCJLLLLLLMOOQQQOMJJGGGGGDDBwngaa::::((([[[660efmrwBBBBwrh06[[____]", "___}}60dhhnnhhd0666}}}}}}}____]]]]]]]____}}}}}}}____[[[[[6600fhhmmruswDELMMLJCsh0[[^[[3gtCEEEEGCxttga9[[^//>;*&%$$$%&*;>/^/[333((((//[[600dhuwDJOQRRRRRRQOMJDtg93(/////^^^]______]]]]]]]^^//3cxGJLLLLLLLMOOOOMLJJGGJJGGDysic:::::((([[[660ehmuwBDDDywnh06[[____]", "___}[60ddhhhhd0066}}}}}}}_____]]]]]]____}}}}}}}}}_}[[[6999ddhhhmruuwBDELMOOMLGwg0[[^[[9jtCEEEEECCxtjg9[[///;=*%$$$$%&=>//^[[[3((>>(([66dhnwyDJLOQRRRRRRRQOLCtn93(//////^^^]_____]]]]]]]]^///3bxGJLLLLLLLMOOOOMJJGGGJJGGDBic<<:::((([[[60efhruBDGGGDysnd6[[[_____", "___}}60ddhhhdd0666}}}}}}}____]]]]]]____}}}}}}}}}}}6699ggnnnsssswwwyyDELOOQQOMEyn9[[[[39jtxCCCCCCCxtsg93[(/>-*%$@@@$&*->/^^^[///(>>(/[6dnwDGLMOQQRRRRRRRRQMJDjd3[///////^^^]]____]]]]]]]^^//((bxGJLLLLLLLMMOMMLJGCCGGGGDysic<:::((/[[660fhmuwDDGJJGDysg9[[[______", "___}}00ddhhdd006666}}}}}}____]]]]]____}}}}}}}}}}6609gnstyyDDDCDDDCGEJLOQQQQQOLDsd3[[[3ajtxxCCCCCCxyig93((>-*%$@@@$%&=>/^^^^^^///////6dnyGLOQQRRRRRRRRRRRQMEyg93(/((/////^^]_____]]]]]]]^^//((cxELLLLLLLMMOOMLJGDDDDDDDytic<::>(//[[60fhmuwBDGJJJJGysg9[[[______]", "__}}600dhhhdd00066666}}}}____]]]]____}}}}}}}}}}609dnstDCEJJLLLLLLLLMMOQQRRRQOMGtg93339ajittxxxCCCxtib33(;=*%$@@@@$&=;>/^^^^^^^/////[0myJMQRRRRRRRRRRRRRRQLGtg3(/(>>////^^^]_____]]]]]]^^//>>:lxJLMMMMMMMOOOMJGDwssswtttic<::((/[[[6dhmuwBDGJJLLJGDwn9[[[______]_", "__}}60ffhhfdf00006666}}}_____]]]]____}}}}}}}}6600dnsyCELMMOOOOOOOOOOQQRRRRRRQMJyia93399gjjiltxxCxysja::-~&%$@@@@$&*;>/^^^^^^^^^^^^[6hwJMQRRRRRRRRRRRRRRQQMCta3(((>(////^^]_______]]]]]^^/>>>:lCLMOOMOOOOOOOLGDtingniiiicc::((/[[60dhuwBDGGJJLLJGCynd6[[_____]]__", "_}}60fdhhhfff00000088}}}_____]]]____}}}}}}}66600dnsyCJMMOQQQRQQQQQQQQRRRRRRRQMJxia999999aaajityyytib:<~{%%@@@@@$&*;>/^^^^^^^^^^^^^[dsGMQRRRRRRRRRRRRRRRQOLCta3((((///^^^__________]]]]^//>;:bkEMOOOOOOQQQOMJCticaaacciccb:3([[[60hnwyDGJJLLLLJGDysd6[[______]___", "}}}60ffhhhfffe0000086}}______]]______}}}}}6000dhnsyCJMOQQRRRRRRRRRRRRRRRRRRRQMExja933333339ajistiib<<~{%$@@@@@$&*;>/^^^^^^^^^]]]_[9nCMQRRRRRRRRRRRRRRRRQOLCtb93((((//^^____________]]]^/>;;-ckFMOOOQQQQQQOMExl1<:::ccccba336[60dhsyCJJLLLLLLJGDysg9[[___________", "}}60efhhhhffee008086}}_____]]]_______}}}6600dhnstyCJMOQQRRRRRRRRRRRRRRRRRRRQOLCta93333[[3333abjjbb<1{)$@@@@@@$&*->/^^^^^^^^^^]]]^[gCLQRRRRRRRSSSSRRRRRRQMExtga99333[[[[____}}______]]^^/>;-<1kFMOOOQQQQQOOFAk21<<::acccgad9099hnwDGLMOOOMMLJGDBwnd0[[___________", "}800ehhhhhfeee0806}}}}__^^^]]]]______}}600dhnssyDEJMOQQRRRRRRRRRRRRRRRRRRRROMEtb933(///////3333a:<~{!@@+++@@$&*->/^^^^^^//^^^]]^[atLQRRRRRRSSSSSSRRRRRQOLExtjbggggad966[}}}}}}_____]]^^/;-==1kEMMOOOOQQOOMzo211<:::aagggggddhnsyCJMOOQQOOMLJGDwuhd6[[___________", "880ehhhhhefee0066}}}[^^^^^^^^^]]____}[60dhgnsyDGJLMOQQRRRRRRRRRRRRRRRRRRRQOMEtj93((/(//////((((:<~)!@++++@@$%*->//^^^^/////^^]^^3sEORRRSRRSSSSSRRRSRRRQMJCytiiitstsjndd0066}}}______]^//;-==////^^^^^[[[60dgnstyCELMOQQRRRRRSRSRRRRRRQQQQQOOMFCtba3((((>>(//////(:={)@++..++@$%*->>/^^^//>>>//^^]^[axMQRRSRRSSSSRRRRSRRRQOLExttittyyDDytsnhdd006}_____]]^//>-==>>;;>>///^^^[[[9dgnstyDCELMOQRRRSSSSSSSRRRRRRQQOMMLJCxlba::::::;>>(////(>-*%@++..++@$%*->>//^///>>>>>/^^]^[jEORRRSRSSSRRRRRRRRRQOMExttistyDCCCCCyyssnhd06}____]^^//>;-<>>;;-;;;>///^^[[[9gnsyDCCGJLMOQRRSSSSSSSSSSRRRRQQOMLGCylccc:<<<<<-;;>/////>;~&$++...+@@%*->>//^//>>;--;>/^^]^3tLQRRSRRRRRRRRRRRRRQOMExtjnnistyDCGGGCDyywshd6[___^^^///>;-<>>;;----;;>(///^^[[9gstDCGGJLMOQRRSSSSSSSSSSSSRRRRQOMLGDtic<1111111<-->>/////>-*%@++..+@@%*->>/^^//>>-===;>/^]][9yMQRRRRRRRRRRRRRRRQOLEDsnggdgnswyDGGGGGGCDysg06[^^^^^///(>:::cityyDDyytic1<=-;>(/36660dhnsyDGLMOQQRRRRRQQOLGywsnggd9966666}}}}}}", "}}}}}[[////(>>;;;-----;>>/////[[[6dntyCGJLLMOQRSSSSSSSSSSSSSSRRRRQOMJCyic<1222|221<<:>//////>-*%@++++@$%*->>/^^^//>-***=;>^]]_[axMQRRRRRRRRRRRRRRQOMJDtndd0ddhnuwyDCGGGGGCDynd6[^^^^/////(((abittyyyttic<<~=-;>(/[[6600dhnwyGJLMOQRRRRRQOMEDwnnggdd99666666}}}}}", "___[[///>>>>;;;-----;>>/////^/[[[6dnsyCEJLMOQRSSSSSSSSSSSSSSSRRRRQOMJDtic122|oook1<:(///////>-*&$@@@@$%*=>>/^^^//>;=***=;/^]]_[gxMQRRRRRRRRRRRRRQQOLGyshd0000ddmmuwyDGGGJECysg9[[^^^/////((3agistwwssic<<~~=->(//[[}}660dhswDGJLOQQRRRQQMLCtngdddd999666666}}}__", "^^^//(>>;;;;;;----;;>///^^^^^^[[[0dgsyDGLMOQRSSSNNNSSSSSSSSSSRRRRQOMJDti112|ooooklb((/^^^^//>;-*&%$$%&*->>/^^^^//>-****=>/^]__[gxLOQRRRRRRRRRRRQQOMJCwnd0000000fhmrwBDGGJJGDtnd6[[[[[[[[[339agissssincc<~~~=;>(/[[}}}}660dgswyGJMOQRRQQOLCtnd9909999966666[}____", "^//>>;------;;;;;>>>//^^^^^^^^[[[60hntyCLMORSSNNNNNSSSSSSSSSRRRRRQOLExli1122kokklca3/^^^^^^//>;-=*&&*=->//^^^^//>;-***=;>/]]__[gyLMOQQRRRRRRRRRQQOLEDtnh00000000fhmuwBDGJJGDynd9[[[[[[66639agiisssinga:<~**=;>//[}}}}}}660dnstDGLMQQQQOLCtg96[[[66366[[[[[[____]", ">>;;-=***=-;;>>>>///^^^]]]__^_}}}60dgsyGLOQSSNNNNNNSSSSSSSSRRRRRRQOLCxlcc<1lllllba3[^^^_^^^^///>;;---;>//^^^^^//>;-==-;>/^]]__6gyELOOQQQQQQQRRQQQOLECtsgdd000000ffhmuwDGGJGDysg99660999ddagjisttsinga:<~{{*-;(/[[}}}}}}}60dhnsyCJMOOOOLCtg9[[[[[[[[[[[[[[[^_^^^^", "-==******=;;>>///^^^^]]]_____}}}}60dgsyEMOSNNNNNNNSSSSSSSRRRRRRRQOLExlibbbbbccbb93[[^___]^^^^^////>>>//^^^^[[[//>;;;;>>/^]]___6dtGLLMMMMOOQQQRQQQOLECysngddddddddfhmuwDDGGGDysngdgggnnnnniistyytsngaa:~{&{~->//}}}}}}}}}00dhnwyCELMMMFAtb3((////[[[[[[[[/^^^^//>", "**&&&&**=;>///^^^^^]]_____}[[}}6600hsyCLOQSNNNNNNSSSSSSSRRRRRRQOMLECticbaaaaaa933[[[^____]]^^^^^^^///^^^[[[[[[/(>>>>>//^]]]___6dsDGJJJJLLOOQQQQQQOLJGDtsnngnnnnnnnmuuwyDGGGDyssnnsswttttttyxCCCxtiga:<{%%&~;(/[}}}}}}}}60fhnswyCELLMFAxl::>>>>>(((((((/////>>>;;", "&&&&&**->>//^^^^]]]___^[[[6600000dhnyCLMORSNNNNNSSSSSRRRRRRRQOOLJGxxtijgaa99933[[[[[____________]]^^^^[[60dd063(((>//^^]]]____6dnyDGGGGJLMOQQQQQOMLJGCytsssstyyywwwwwyDDGGCDyywwyyDDCDCDDCCEEEECxtcb<{)%%&~;(/}}}}}}}}800fmuBDCEJLLLFAk1<--------;:::::::;;;--=*", "****=-;>//^^_________[[[09dhhhhhhnsyGLMORSSSSNSSSSSRRRRQQQOOMLECDxytttsigga993[[[[[_________________[[0dgusnnd3((///^^]]]_____60nuBDDDDGJLOOQQQOOMLJGCytstyDGGGGCDyyyyDDGGCDDyyDDGEEEEGGGGELLMLJCxic~))$%&=>/[}}}}}88880ehuBDGJLMMMMFAk11=========<<<<--======~*", "--;;>(//^^__________[[9answtwwwwwyDGLMOQRRSSSSSSSRRQQQOOMLLECDytttyxDDxytijgd93[[[[[_______________[60hsByDysnd3(//^^]]_______}0huwBBBDDGLMOOOOMLLJEGCyttyCELLLLJEGDDDDDCCDDDDDCGJLLLJEGGEJLMMMMJCk1{)!$%{->/[}}}8888880fmwDGLLMOOOOMAok1<======<<<<<<111<<=----", "((////^__}}_______[[[9ntDCGEEEGGGJLLOOQQRRRRSRRRRQOMMLJGCDytsiiisyDGEEGCCytjga996[[[[___[[[[[[}}_}}6dmwDGJGCysg33/^^]_________}0hmuwBBDDGJLLMLLLJEGCDyttyCELMOOMLLJGCDDDCDDDDDGGJLLLLJEGGGJMMOOOLAk2|!!!%*;(/[}}6688880efuyGLMOQQQQOOFAkc<<::::::>>", "[[[[}}}}}}}______[[6ajxGLLMOOOMMMOOOQQQQQQRRQQQOMMFECxtsnnggagjiyCELLMLLECytsngd99[[[[[[[[66666}}}6dmwDJLLLECtg93[^^__________}0dmuuwBBDDGJJJGGCCDDyysssyCJMOOOOMLJGCDDCDGGGGGGJLLLLLJGCCCELMOOOMFo|!!!!)~;([[}}68888800hsDJMOQQRRRROOFCtca3333aacitkxCCxkiba333", "[}}}}}}}}}}}____[[3ajxEMOQQQQQQQQQQQQQQQQQQQOMMLECxtiga993399gixGFMOOOOMLJGCytjng9966[6660dddd0000fhuDJLMMLJCtg93[^^__________}6fhrruwBBDDDDDDBBwwwssnnstCLMOOOOMLEGCDDCGGGGGGJJLLLLJGDyyDCLMOQOOFA77!!!&=>([[}688866660hwCLOQQRRRRRROMJCwngdddgitxCEFFFECxigd66", "6}}}}}}}}}}}}__[[3aixEMOQRRRRRRRRRRRRQQQQOOMLLGCytjg93[[[[[3aixEMOQQQQOOMLJECytsjgd9999ddgnnnmhdfdhuyGLOOOMJDla3[^^____________60hmruuwBBBBBwwuuumnnhhhnwCJMOOMMLEGCDDDCGGGGGJJJLLLJGDywttCEMOOOOIzp7!!){<((66600086}}60hyGLOQRRRRRRRROMJDysnnnswyGJLMMMLECtnd00", "666}}}}}}}}}}}}66ajtAFOQRRRRRRRRRRRRRQQQOOMLJCytjg93[[[//[3aiCFOQRRRRQQOOMLJECytsjggdggnswByBwummmuBGLMOOOLExia3[^^____________}0fhrruwwBBBwuummhhhhddhnsyGLLLLJECyyyyDDGGGGGJJJJJJGDyssnsyEMOOOOIzp77!)~:(360000006}66dnyJMQQRRRRRRRRQOLGDBwsswyDGLLMMLLGDsgd00", "666}}}}}}}}}}}60dgtxEMORSSSRRRRRRRRRRQQQOMLJGysnd9[[////((alCMORRRRRRRQQOMMLJECysjnggnswyDCGDDBwwwBDJMOQQOLGtg33^^_________]]__[6fhmruwByyBBurmhfff000ddnsyCGGCxytssswyDGGGGGGGJJJJDywnggntCFOOOOIIpp7|21:addhhhhf00660hwCLOQQRRRRRRRRQOLJDBwwuwBDCJLLLJGDwnd006", "8888}}}}}}}}6600gjxCFINNSSSSRRRRRRRRRQQOOMLGDynd93(/(>>::blAIRSSSSRRRRQOOMMFJECytsnnnstDCEJJJJGDDDGJMOQQQOLCta3[^^______]]]]]^^[6fhmuByDGGDDwumhd0006600dgnstssnnggnswyDGGGGGGGGGGDDwngddgtCJMOOOIIvpp721innssuurmhd00hsDJOQQRRRRRRRRRQOLJDBwuuuuwyDGEEGDwnh0000", "66888888888800dhntxEFINNNSSSSRRRRRRRQQQOOMLGDsgd3((:--=<>>>(3dsDJMOQQQOMLGysh06[[^^^^______[[[69dnsBDDDBBwuuuuumh06[[[3alCFFIIzzzzzFFLMOOOQQQOMLJEELMOQRRRRRRRRRRQQOLGDwuhffffhnwyDDDywsnddf0", "66686000effhmuwyDCJLMOOOOOMLLLLLMMOOOOMMLJCyib::<~{{||pzHNNSSSSSSSRRROMFAzAFEECxtsnswyCJLLMMMMMMMOQQRRRRRQOEtb3(//^^^^^//>;==;(aiDJMQQRRQQOLGysh06[[^^^^_______[[60dnswyBBwurmmhhd006[[^/(3btCAzzzzAAzFMOORRRRRRRQOMMMMOQRRRRRRRRRRRQOMJDBumhfffdhsyCGGGCDtsnhdd", "[[[[[6660fhmuwyCGJLMMOOOMFJGCCCGJJLLLLLLECxiba:<~~{||pzHNSSSSSSSSSRRQOFAAAAAEECCtssstyGEJLLLMMMMMOQQRRRRRRQMCia3(//////>;=*&*=:cxJOQRRRRRQOLGysh06[^^^^^_^[[[[[[600hnuuwwwumhff0066}___^//(aikooooooAEFOQRRRRRRRRRQQOOQQQRRRRRRRRRQQQOMJDBumhffdhnyCEJJJGCysngd0", "////((336ddmsyCGJLMMMOMMFECxywwyyDCGGGGCxtja::<<~22ozINNSSSSSSSSSRRRQMFAooAFFFECytssyDCGJJJJLLLLLOQQRRRRRRQOFxc::((>>>;-*&%%&~;;=&%$@@%{1CMQRRRRRRQOLGysh06[[[[/[39gjjjjnnnnnmmrrmmhff06}}_____]]^/>>:<11222kkxEMORRRSRSSRRRRRQQQRRRRRRQQQQQQQQOLJDwumhddhnsDGJJEECxlca:::", "**&***~=<:ciDELMOOOOMMLJCywsnhdddgggggga33(:--<11kAINSSSSSSSSSSSRRRQOEoooozFMMMJCyttyyDDDDDDDDDGJLOQRRRRRRRROFAk1<:--~&%$@@@${kEOQRRRRRQOMGysg96[[[//[3btxCEECDywwuurrmmhee0}}_____]]]]^/>;--<1111llxAMORRRSSSSRRRRRRRRRRRRRQQQQQQQQQOLJDwumhfddgsyDCCDxlcc<<-=~", "%%%%%&{~<;--=<1kAIORSSSSSSSSSSSRRRQMAooopzIOOMLECyyyyyyBBwwwwBBDJMQRRRRRRRRROFok1<==*&$@++@!|kEMOQRRRQOLCtng96[[[//(3bxELMMMLJGDywuummhe00}}____]]]]]]^/>;--=<111clkAFOQRRSRSSRRRRRRRRRRRRRQQQQQQQQOOLGDwnhdddddgistiicb<<~~*&&", "%%&&&*~~<1kALOOQQQOMLLGDBumhd0333((((((>;--==<1kAIORSSSSSSSSSRRSRRROFoo7pzIIOOOMJCyytyBBwwuuruuwBGLORRRRRRRRROMAk1<~*&%@@++@!{kCFMOOOOFExig96[[[///(3btFMQQQQOMLGDBwurhee0}}_____]]]]]^//>;;--<<<>;-===<1kAIORRSSSSSSSSSRRSSRROzp77pvINRQOMLEyttssuurmmmmrrwDJOQRRRRRRRROLCk11{&%$@+++@${1kxGEEACklba3(//^^///(3lEMQRRRRQOLJDBwrmhe0}}_____]]]]]]^//>;;::<<::bclxEMQRRRRRRRRRRQQQQQRRQQQQOOOOOOMLGysgd063[((3333((>>;---==*", ">>>>((3alCLOQQQQQOMLJCysnhd66[///(((>;-=~~~11kAIORRRSSSSSSRSSRSSSSRIzpppvHNNRQQMLCyssnnnmhheeehmrBGMQRRRRRRRQMJCk1{)!@+++.++${1cittlicb::((////////(axFQRRRRRQOLJDBurme06}_____]]]]]]^^/>>::::::::bbjtAFOQRRRRRRRRQQQQQQQQQQOOMMMMLLJCysh96[[//(((((/////>>>>>>>", "^^^^/[9iCLOQQQQQOMLEDBsmd06[[///((((:-=~~~1koFOQRRRSSSSSSSSSSSSSSSSIzppvHHNRRQOMFCtjgdddffeeeeeehuDLOQRRRRRQOLGk22)@++....++${~>(////////(axMQRRRRRQOLGDwumhe0}}_____]]]]]]^//>:::bbbb:::bblxEMOQRRRRRQQQOOQQQQQOOMLLJGGCCxtia93[///(((///////////^^^^", "]__^[9nyJMOQQQQOMLGDwnh006[[[//((((::<1122oAIORRSSSSSSSSSSSSSSSSSSSNHvvvHNSRRQOMExjg990000088880fmyJOQRRRRQOLCy12)@+.......+${~>>(//^^^^^^/[gxMQRRRRRQOLGBwrmee6}_____]]]]]]^^/>::ccllccb:::bclCFOQQRRRQQQOOOOOOOOMLJGCyttsijga3[/////((///^^^^^^^^^__]]", "___[6gtGLOQQQOOLJCysg006[[[[[/((3abc112oozIIRSSSSSSSSSSSSSSSSSSSSSNNHHHHNNSRRQOLCtg96[[[}}}}}}660hBGMOQQQOMJDtc1)@+.......+@${1ccba3((((//^^^^^^^^^[gyMQRRRRRQMJDBurme86}______]]]]]^/(>:clkkklc<<:::bixEMOQQRQQQOMMMMMMMLJGDtiggdd9933//////>>///^^____________", "__[[9sCJMOOOOMLGysgd06[[[[^^[[3abclkoAzIIINSSSSSSSSSSSSSSSSSSSSSSSNNHHHNNSSRRQMEyj93[[[______}}}6dsCLMOOMJCtib<~)@+......++@)22lliba3(///^^^]]]]__[6gyLOQRRRQOLJDwumhe06}______]]]]]^/>::1kzIIIzo22{{~=<:clALOOOOMLGxtttsssng96[[[[_^^_^^^^^^^///^^______________]", "_[6gtCELLLEDwnd6[_____^^^[[33blxFMORSSSSSSSSSSSSSSSSSSSSSSSSSSSSRRONNNSSSSRRQMEta3[^^^^^^^^]]]___[0gsssiga::;;;;-=*&%$$$%&~1oFMMMECta93[[[[[[[___}}6fnyGLMOMLJDBwurmee06}}______]]^//:<2ozIIIzoo|)){~<:bjxEMMMMLEytjngggd90[[[___________]^^^^^^^_____________]]", "_[9jyCEJJGDwnd6[^^^^^^^^^[33ajxAMORSSSSSSSSSSSSSSSSSSSSSSSSSSSSRROOOQSSSSRRRQMCl9[^^^//////^^^]]_[[9daaa::;;;>>>>>;-**&&&~1kAMOOMFCtb93[[[[[[[}}}}}6fhuDJJLJGDBBurmmhe06}}______]^^/>:1ozIIHHIp7|)){~-::blxEFLECxtja999066[[[_____________]^^^^^]___________]]]]", "[9gtCEEEGCynd0[^^^^^^^^^[339blCFORSSSSSSSSSSSSSSSSSSSSSSSSSSSSSROOOORRSSRRRQOFxj3[^^//>>>>>//^^^^^/[3(::---;>>/////>;=**~=1kFOOOMFCla3[[[[[[[[[}}}}60hrBDGGGDBwurrmhe006}}}}____^^/>:<2oIHNNHHv77!){~-((3aixCCCtjg99666[[[}}}}}}__________]^^^^]]__________]]]]]", "6atxEJJJCDsg96[/////////[33ajxEORRSSSSSSSSSSSSSSSSSSSSSSSSSSSSRQOOMOQRRRRRRQMEta[[^^/>;;--;>>//////>;;-==~=;>/^^^^//>-=*~~1oFOOOMExja3[[[[[[6666}}600fmuBDDBBwurrmhee0066}}}}___^//>:1kzINNNNHv47!){=;(((3ajlttja96[[[[[}}}}}}}6}[}_______^^^^^^]_________]]]]]]", "gtxEJLJECyia3(((>>>>(//((3abtAMQRSSSSSSSSSSSSSSSSSSSSSSSSSSSSRRQOOOOQRRRRRQMJxj9[^^//>;=**=-;>>>>>;-=*****-;>/^]]]^/>-***~2AFIMMExla3[[[[[66666666600emruwwuurrmmeee0066666}}__^^/(>:lAINNNNNHvv7!{~->//^[39aga99[[[}_[_[_}[6660666[[____^^^^^^^]]]_______]]]]__", "txELLLLExtja::-====-;>((3ablCFORRSSSSSSSSSSSSSSSSSSSSSSSSSSSSRRQOOOOQQRRQQOLxj9[[_^^/>-=***=-;>>;-**&&&**=;>/^]]]]^/>-*&{{2ozFFExla3[[[[[399900666000ehmruurrmmheee006666666}}_^^//(bkFNNSNNNPHv7){=>//^^[[[366[[[[_____[[[660ddd906[[[^^^^^^^^^^]]_______]]]__[", "xEJLMLJCxic<<~{{&{{~=<::bckAFORRSSSSSSSSSSSSSSSSSSSSSSSSSSSSRRRQQOOOOQQQOMLCsa6[__^^/>;=***-;;;;-**&&&&*=->/^]]]]]^/>=*&&{|oAAAxla3[/^[[[9dddd000000eehmrrrrmmheee0066666666}}_^^//3cCMRSSSNNPHv7){->/^^^^[[[[[[[_______[[69ddnnngd0[[[[//////^^^^]___________[[", "EFLMLJCxlc11{)!!!!)){~11koAIORSSSSSSSSSSSSSSSSSSSSSSSSSSSSSRRRRQQOOOOOOOMJCtg9[[___]^/>;---;;;;-=*&&&&**-;>/^]]]]]^/>=&%%)||ookcb((///[[9dgggdd0000eeemrrurrmmeee8088666686}}___^/(alFORSSSNNPHv7)~;(/^^____[__________[[[69gnsssng96[[////////^^^^^^^^______[39", "EEFJECkl12{)!!!+'+!!!||ozIINSSSSSSSSSSSSSSSSSSSSSSSSSSSSSRRRRRRQQQOMMLLLEDsg9[____]]]^//>>>>>>;-**&&&**-;>/^]]]]]]^/;*&%$))||21<::>>///39dggghd0000eehruuuuurheee0006666866}}___^/3bxFORSSSSNPKv7|~:(/^^______________[[[39gjsttssga3[(/////////^^^^^[[[____[[9g", "CCCxxkl22{)!!++''''''4pvHPPNNSSSSSSSSSSSSSSSSSSSSSSSSRRRRRRRRRRQQQOLLEGCyjg6[____]]_]^^/////(>;-*&&&**-;>/^]]]]]]]^>-*%$$@!)){{{*~=;>(/3dhhhhdf000eeemuwBBBwrmfee8000666066}}__^^[9lAORSSSSSNPKv72<((/[[____________[[[[39ajjstttsga33(((>>>(////^^^[[[[[___[[9g", "tllic11{{)!!!+''''',45qKKPPPNSSSSSSSSSSSSSSSSSSSSSSRRRRRRRRRRRRRQOMLGDysn96[[___]]]__^^[[3993(:=*&&**-;>//^]]]]]]^/>=&$@@@@$)))%%%&~;>(6dhhhdfe000eemrwBDDDBumhffee80800006}}__^[3bxFORSSSSSNPHvo2<33[[[[[_^_______^[[[399gjtttttiga33((>>>>>(////^[333[[[__[[39", "aaa:<~{{%)$!@+++'',5qqKKKPPPNSSSSSSSSSSSSSSSSSSSSSRRRRRRRRRRRRRRQOLEDwnd9[[___]]]____[[9gistib:=*&&*=;>>/^]]]__]]^/-&$@+++@@@@@@@$%&=>(0fffffe0088eemuBDGGDywuhhfeeee800806}}_[[3alAORRSSSSSNNHzolba36[[[[[^^^___^^[[[339aajjtttija93((>:>>>>>(///[33993[[^^^[[3", "(((;=~{&%%$$@++'',5qqKKKKPPPSSSSSSSSSSSSSSSSSSSSSRRRRQQQRRRRRRRRQOLGynd9[[___]]]____[9gsxGEEClc<~**=-;>/^^]]___]^/>*%@+++++++++++@$&=(30fffee8008eemrBDGJJGDwrhffeeeee80806}}[[39jxFORSSSSSSSNHzolca9996[[[^^^^^^^^[[3333aabjjijjba3(::::;;>>>>(/(3aaaa3[[^^^^^[", "/>>-=*&&&%%$@++',5qqKKKKPPPPSSSSSSSSSSSSSSSSSSSSRRRRQQQQRRRRRRRRQOJCsg9[[[___]_____69nyELMMLJxl1~~=-;>//^^]___]]^>=&@++.....+++++@$&;(600eee80888eemuBGJJJGDwnhdfeeee88008}}}[[3bxFORSSSSSSSSNIFAkiggd996[[^^//^^^^^//(3333aaaabaa:::---;;::>>>>((abjjja3[^^^^^/", ">>;-=**&&%%$@@',5qqKKKKPPPPSSSSSSSSSSSSSSSSSSSSRRRRQOOOQRRRRRRRRQMJDsd9[[^_______}6dsDJMOOOOLCk11=-;>//^^]____]^/;&$++.........++@%~:(6608e88888eehrwDGJJJCyshdf0000008086}}}[3alAORRSSSSSSSSROFAxljgg996[[///////^////(((33333:::<=~~~==-;;;;:::aclxtlb93//////", ">>;-=**&&%%$!!45qqKKKKPPPPSSSSSSSSSSSSSSSSSSSSRRRRQOOOQQRRRRRRRRQMEysg9[[[______[6dsDJMOQQQOLGlc<-;>(/^^^_____]^>=%@+..........++$&-([668888888eeemuBDGJJGDwnd00000000686}}}[[3jxFQRSSSSRSRRRROFAxtjgd96[[[//>>>//////((((((((:;=~{&&{{~~<<<<-::;-=~*&&%)!!45qKKKKPPPPPSSSSSSSSSSSSSSSSSSSSRRRRQOOOOQRRRRRRRRRQMJDwnd0[[[[_[[60gwCJMOQQQOMJxib::>(//^^______^/;&$+...........+@%=>/[68888888eeehmuBDGJGDysh0066}}}}}}}}}}}[6atEORSSSSSSRRRRROLCyigd96[[[//>---;>>>>>>;;;;;;;-~&%$$$$){~11<<<11koAFFFAxia3((((/", "((>;-=~{{))74vKKKKKPPPPSSSSSSSSSSSSSSSSSSSSSRRRRQOMMOQRRRRRRRRRRQMLGywnh906660dgsyGLMOOQQOMLCtga(((///^^_____^^>=%@+..........+@%*;/[}6888888eeeehruBDGGDysh066}}}}}}}}}}__[[3jCMQRRSSSRRRRRRROFCtja96[[[^/>-*&**-;;;;-======*&%$@@++@!)|222222oAIIOOOFAtib:((((", "//(>;=~{{|7vvKKKKPPPPPSSSSSSSSSSSSSSSSSSSSSSRRRQMLLMOQRRRRRRRRRRQOMLECywsnggnswDGLMOOQQOOMLGynd3((///[^______^/;&$+.........++@$&;(/}}88888eeeeehmrwBDDDysnd06}}}}}}}}}}___[[atFORRSRSRRRRRRROMExia96[[[^^/>*&%%&&*===**&&&&&%%@@+++++!77ooooopzHNNRROOFClcb:333", "[//(:-~2|pvHKKKKPPPPPSSSSSSSSSSSSSSSSSSSSRRRRQQMLLLOQRRRRRRRRRRRQQOMLLJGCDyyDGJLMOOQQQOOMLGynd6[/////[[_}___^/>*%@+....++++++@$&=>/[}68888eeeeeemmuwyDDysnd06}}}____}}_____[3jCMQRRRSRRRRRRRQOJCtg93[[[__^/-&%$$$%&&&&&%%$$$$$@+++..+''7pppppzHHNNSSRROFAklca333", "[[((:<2|pvKKKPPPPPPPSSSSSSSSSSSSSSSSSSSSSRRRRQOLJJLOQRRRRSSRRRRRRQQQQOOMLLLLLMOQQQQQQOOLJCBnd6[//////[}}____^/-&@+...++@@@@$$%&=;/[[60888eeeeehhmruwyyBsnh06[}_____}}}}___[[9tEORRRRRRRRRRQQOLExia3[[[__^^>=&$@@@$%%%%$@@@@@@+++....''4vvzzzvHHNNSSSSROMExlcaa36", "[[((:1opvKKKKPPPPPSSSSSSSSSSSSSSSSSSSSSSRRRRQOLJJJMORRRRRSSRRRRRRRRRQQQQQQQQQQQRRRQQQOLJDwnd6[^^//////[}___^/>*%@+.+++!))%%%&&~;(/660eeeeeehhmmmmruwwwsnh066}_____}}}}}}__[3gxMQRRRRRRRRQQQOMJDib3[[[[^_^/>*%$@@@@$$$$@+++++++......'44vvIIHHHPNSSSSSRQMFxlca996", "[[(3ckpHKKKKPPPPPSSSSSSSSSSSSSSSSSSSSSSRRRRRQOLJGJMQRRRRRSSRRRRRRRRRRRRRRRRRRRRRRRQQOLJDwnd0[[^//>>>///___^^>=&@+++''!||{~***~->(6dhhhfeefhmmmmmmussssnhd06}}____}}}66}}}[[9tEMQRRRRRRRQOOMMJCtja3[[^^_^^/>*%$@@@@@$@@++...........''4vvIIIHHNNNSSSSSROMAxiaa6[[", "^[3bkzHPKKKPPPPPSSSSSSSSSSSSSSSSSSSSSSSRRRRRQMLGGJLORRRSSSRRRRRRRRRRRRRRRRRRRRRRRRQQMJDBuh0}_^^/>;;;;(//^^^/;*$@++''47po21~~~=:(dgussurmmmmmrrrmnnnsnngd06}}____}}}60006669jxLQRRRRRRRQOOMLJGDsb3(/^^^_^^/;*&$@@@@@@+++...........+'7pzIIIIIHNNSSSSSRROFCtca3[[[", "^3alAIHPPPPPPPPSSSSSSSSSSSSSSSSSSSSSSSSRRRRQOMJGCGLMQRRSSSSSSRRRRRRRRRRRRRRRRRRRRQQOLGBuhf6}_^^>;****->>//>;*%@@+''4vpzok1<==-:anyDCDDywuuuruurnnnnghd066}}}___}}}60df0069gtEOQRRRRRRQOMLLJJCxia3(/^^^^^^/>~&$@@@@+++............+'77pzIIIIIHNNSSSSRRQMExia3[[[_", "^3bxFNPPPPPPPSSSSSSSSSSSSSSSSSSSSSSSSSRRRRRQOLJCDDEMORRSSSSSRRRRRRRRRRRRRRRRRRRRQQOLGDwrh0}}_^/;*&%$%&**==*&%@@++'4vvIIAkl<<<::ctGLLLJDywuuuurnhhddd0066}}____}}}600dddd0djCMQRRRRRRQQMLLLJECyia3(/^^^^^//>=&$@@++++.... ....''77ozFFFFIIINSSSSRRQOLClg9[[^__", "^3lFINNNPPNSSSSSSSSSSSSSSSSSSSSSSSSSSRRRRRRQOLGDyyxGFORSSSSSSSRRRSRRRRRRRRRRRRRQQOMJDBumf0}_^/>=&$@++@@$%%$@@@+@@7pzIIIAkl1<<:biDJMMLLGDwsunnhhdd0066[}}______}}}600dddddnyJOQRRRRRRQOMLLJJGCtib((//^^^[[(:=&$@@+++.... ###''77zzFMMFFIINNSSSSRRQMEyja3[^^__", "[axMRSSSNSSSSSSSSSSSSSSSSSSSSSSSSSSSSRRRRRRQOLGysiitCFIRSSSSSRRRRSSSRSSSRRRRRRQQOLJGDwume0}[//;*%@+....+++++++@@)|ozIIFAkc<::::ixJMMLLGysnnhdd00666[}}________}}}}6000ddntEMQRRRRRRQOMLLJJJGCtc<:>(///[33a:<{$@+++.... ###'44pzFMMMMMFIIRSSSSRRROLCtg33/^^__", "3jAORSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSRRRRRQOLCyigbclkAFIQSSSRSRSSSSSSSSRRRRRQOMLJGDBwumf0}[/>-&@+...........+@${2oAFFAkcb:::(3btCJLJGDtngd00666}}______________}}}6600hsCLORRRRRRRQMLLJJJGCxic<-;>//33bjll2|)!++.... ##,,5vvIIIOOMMMMOORSSSRRRQOLCtb33[[^__", "axMQRSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSRRRRRQOLCwna:<122opzIIQRRSSSSSSSSSRRRQQMLGDDDBBBurhf6[(>=%@+... ....+@%~>((3jtCCCysnd9666[}}__________________}}}60gtEMQRRRRRRQOMLJEEGCDtic<=->/(3btCAAAo7!''.# ##,,55vHHNOOOOOOMOORRSSSSRRQOLCtja33[[[[", "tEORSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSRRRRQOJDsb::=~{{)||opzIORSSSSSSSRRRQOLGDyyBBBBBwumd63(:~%@+... ....@%=:bbbba:(>>>///[9gsssjnd9666}}}}___________________}}6dsCMQRRRRRRQOMLJGGGCDysc<<=->(3atAMMOIzp7'''#######,55qKPNNRRQOOOOOOORRSSSRRRQOMExlcba3399", "EMQRSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSRRRQMJyia::=*&%))))||ozIQSSSSSSRRQMJCtsuuwBBBBBund03(:=&$+... ...+%=:(((((>>>>//^^[[9gnnngdd9666}}}}__________________}}6dtJOQRRRRRQQOLJGGCDDyysg:<-;>(3jCLOQQOIIp44'#####,,5qqKPNNSRRQQOOOOOQRRRRRRRRQOLExkklcbjit", "MORRSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSRQOJCsb:(;=*&%%$$)){2koFIRSSSRRQMFxsnhhnuwBBBBsnhd93:-~%$+... ...+$*;>>>>;;>>//^^^[[9dgnnnnngd00066}}}}__}}}}}}}}}_}}}}60nCLQRRRRRQQOLJGGCDDDywsg::;:((atEMQQRROIzp74'',,,5qqKKPPSSSRRQQOMMOQQRRRRRRRQOMFAoookkkxCE", "OQRRSSSSSSSSSSNNNNNNSSSSSSSSSSSSSSNNNNNNNOMJxib3((>-=*&%%%%{~<1loFIRRRRQOMExjgddhhuwwBwsngdda3:<~%$+.. ...+@&=;;;--;;>/^^_^[60hnswyyyysnhff0066}}}66006}}}}}}}}}0dwEMQRRRRQQOMLGGDDDDDyytna::>(3atJOQRRQQOMzpp7445qqKKKPNSSSSRRQOMMMOQQRRRRRRRQOLEAoo7oooAFM", "QQRSSSNNPPPPPKKKKKKPPNNNNNHHIIIIHHHPKKKHIAxlba3(((>;-=~***~=-::ixFIRRRRRQMLCtjgddhgnsssssngggga:<~%@+.. ..+@%&*====-;>^^]_[[0hnsBDGJJGGDwumhee00fffffee0066}}}60dnDLOQRRRQQOMJGDDDyyyDDyyib:(((3bxJMQQQQQOMFFAzpvvKKPPNSSSSSSRRQOMMMOQQRRRRRQQMLGxko777ooEMO", "QQRNPPKKKKKqqqqqqqqvvvpppooo||||||7744447|1<(((//>>>>;;;;::::actAMORSSRRRQOMExjgdddgnnsssssssiig:~)@+. ....+$%&&&&*=;/^^^[[6dgnwDGJMMMLJDBwrmmmmmuuuurmhff000000hsCLOQQQQQOLJGDByBBBBDDDDtia:((3axEMOQQQOOMMMLLIINNNSSSSSSSSSRRQOMMMOQQRRRRQQMJCtl2|!!77oAMO", "QONKqqqqqq5555,,,,''!!)){){{{{{{{))!!'+'!){=;>>>>>((((3333adnsDJMRRSSSSSRRRQMJxjgd9ddgnnsswyyytic~)@.. .....+@$$%%%&=;/^^^[[9dhnwDJLOOOOLJDBwwuwwBDDDDBwumhff00fhnyELOQQQOMLJDBwwuuuwBDDGGDic:((3bxEMOOOOOOOOOOOORRSSSSSSSSSSSRRQOMMMOQQRRRQQOLCyic1)!!!)2xFO", "QIvq555,,,,,######.+@$%%&&&&&&&&&&%$$@+@@$&*-;>>>((:abjinnnwyGLORRSSSSSSSRRRQMJxtga9ddgnssyyDxti1{!+. ....++@$$$$%&*;/^^^[[09dgsDJMOQQOMLJGDDDDGJJLJJGDyumhfddhnsDJMOOOOMLGDwurmmmmuwBCGGCtc::(3jxJMOOOOOOOOOQQQRRRSSSSSSSSRRRRROMMMOQQQQQQOLGynd:~)!@@)2lEO", "Oz5,,,######## .+@$%&&&&***====*&%$@@$%&*-;>>>(ajtxCCyDDGJMQRRRSSSSSSSSSRRQMExjga9ddgnstyyyl12!+. ...+++@$$$$$$%*;>/^^[[[60dnBGLOQQOOLJJJJJJLMOOMMJGDwunhhhgsyCJMOOMLJGywumhhffhmsyCGECkc:::blAMOOQOOOOOOQQQQRRRRSSSSSSSRRRRQOMMMMOQQQQOLJDsh3:~)$@@)~cDM", "Jo'###### ..+@%&&**==-;>>>>;-*&&%&&*=-;;>:bkAFLLLJGJLOQRRRRSSSSSSSSRSRRQMEyjgaddggnsssi1|!+. ..++@$$%%%%$$$%*->/^^^[[[[0dsDLMOOOMMLLLLMOOOOOOMLGDwsnhhgntDELMMMLJGywumhfe00ffnwDGGCkc<:biCFOQQQQOOOOQQQQRRRRRRRSSSSSRRRRQOMLLMMOOOMLJDwmd3:~%$$$&~btJ", "y1!# ..+@$&*=-;>>>//^^//>;-=**==-;;>:lxFMOOOMLLMOQRRRRRRSSSSSSSSRRRQMFCtjg99dagggc1|!'# ...+@%&&***&&%%%%*->//^^^^[[[0nyGLMMMLLLLMOOOQQQQOMLGysnhddgiyCLMMMLLGDwumff00000fhsyCCCtccccxFORRRRRQQOQQQQQRRRRRRRSSSRRRRRRQOMLLLLLLLJGDwrh03(={%%&~:anD", "n:)+. ...+$&*-;>>//^^]]]]^^/>>;;;;;>(blAMOQQQQOMMOOQRRRRRRSSSSSSSSRRRQOMEyig999999a<)@.# ...+$&=-;;;;-*&&%&*=;>//^^^__[6dsDGJLJLLLMOOQQQQQOMLGDsngd9dgsxELMMMLJDysmdf066}}60hsDCCCxlllxFORRRRRRRQQQQQQRRRRRRRRRRRRRRRRRQOLLJJJJJGDBwrhf63(-~{*~:3drB", "m3~$+............+@&=;>//^^^]]]]__]^^//>>>>>(bkFOQRRRQQOOOOQRRRRRRRSSSSSSSSRRRQOMEyja93333(<)@+ ..@%*;>////>>-=*&**=;>>//^^^__[0hsyDDGJJLMOOQQQQOMLGysgd9399gtCLMOOMLEDwnhd06}}}}}0hsDGEECkkxEORRSSSRRRRRQRRRRRRRRRRRRRRRRRRRQQOLLJGGGDDBurhf063(:=~=:(0huw", "h0:&@+++..++.+++@$&=;//^^]]_______^^^///(((alxFORRRRRQQQOOQQRRRRRRRRSSSSSSSRRRQOLCtj933((>=%@.. ..+%*;/^^^^^/>>-=**=--;;>>//^^^}6dhuwyDGJLMOOOOOMLJCysg96[[39jyELOOOMLGysgd06}}___[6dsDEJEACCAMORSSSSRRRRRRRRRRRRRRRRRRRRRRRRRQQOLJGGDDBBurmff063(::::33dmuB", "h0(=&%$@@@@@@@@$%*->/^^^_______[[[[[33333ackFMQRRRRRRRQQQQQRRRRRRRRRRSSSSSRRRRQMExja3(/>-*%+.. ..+$*;/^]]]]]^/>;-=========;>/^^^[6dhmuBDGJLLMMLLJCysg93[[[[3aixFOOOOMLGysh06}}____}6gtCELFEEEFORSSSSSSRRRRRRRRRRRRRRRRRRRRRRRRQQOLJGDDBwurmef00633:::33dhruB", "h0(>-**&&&******-;//^^_____}[[669999aaaaclAFORRSRRRRRQQQQQRRRRRRRRRRRRRSSRRRRROLCla3((;=&$+.. ..+$*;/^]]]]]]^/>;-==***&&&&*=>/^^[}60dmuBDGGJJGGDysg96[[[[/(3btEMOQQOMLCynd06}_____[6gtGJMLFFFMORSSSSSSRRRRRRRRRQRRRRRRRRRRRRRRRQOLJGDBwurmeef00033::3adhmuwB", "he6/>>;;;;;;>>>>//^^^[[[}66660dgnjtjiiltCFORRSSSRRRRRQQQQRRRRRRRRRRRRRRRRRRRRQMEtb3((-*%@+.. ..+$*;/^]]]]]]]^/>;-=**&&%$$$%&=>/^^[}60dmuwyyyywsng96[[^^^//(3iCLOQQQOMLCtnd6[[_____[6gtGLMMFFMORRSSSSSSRRRRRRRRQQRRRRRRRRRRRRRRRQOLJGDBurmhee000093aaaddmruBB", "he6[/////////////[[[[660000ddnsyDCCCxCAFMORSSSSSRRRRQQQQRRRRRRRRRRRRRRRRRRRRQOFxj93(;=&$+... ..+$*;/^]]]]]]]]^/>;=**&&$@@+@@%*;>/^^_}}0dhmnnngd06[[[^^^^^//3bxJOQQQQOMJCtnd6[_____^[6gtELMMMMMQRSSSSSSSRRRRRRQQQQQRRRRRRRRRRRRRRQOLJGBwummeee00099aaaddhruwBB", "he6[////////[33399aggnnnnnnswyGJLMLLFFMORRSSSSSRRRRRQQQRRRRRRRRRRRRRRRRRRRRRQMCta3((;~&@+.. .+@&;/^]]]]]]]]]^/>-=**&%$@+++@$&=>/^^^__}6600066[[[^^___^^^/3atEMOQQQQOMJCwn06[_____^[3gyELMMMMOQRRSSSSSRRRRRRQQQQQQRRRRRRSSRRRRRRQOMJGBwrmeee00009daaddhmruwBB", "ee6[[////[33ajitxxCCCCCCDDDCGJLMOOOOOORRSSSSSSSRRRRQQQQRRRRRRRRRRRRRRRRRRRRQMExj33((;=&$+.. ..@&->^]]]]]]]]]]^/>-=**&%$@+++@$&=;/^^]_____[[[_^________^^[39iCLOQRRQQOLJDwg06[[_^^^^[9nyEMMMMOQRRRSSSSRRRRRRQQQOQQQRRRRRSSSRRRRRRQOMJDBurmfe000099dddddhmruwBw", "ee6[[//(3ajtxEFMMMMOMMMMLLLLLMOQQRRRRRSSSSSSSSSRRRQQQQRRRRRRRRRRRRRRRRRRRRROLCla3[//>-*$@+......+%*>/^]]]]]]]]]]^/>;-=**&%$@@@@$&=;>/^^]]_______]]]]]___^[[[9jxJOQRRQQQOLGysh06[^^^^^^[9sCLMMOOOQRRRSSSRRRRRRQQOOOOQQRRRRSSSSSRRRRRQOMJDBumhee000099aadddhmruwwu", "e06[[(3abtCFMQQQQRRRRRQQQOOOOQQQRRRRSSSSSSSSSSRRRRQQQQRRRRRRRRRRRRRRRRRRRRQMEtj93[//(;~%@+.....+$*;/^]]]]]]]]]]]^/>>;;-=*&%$@@$%&=;>/^^]]]]]]]]]]]]]___[[[39jyEMOQQQQQOMJDwnd0[[^^^^^^[gtEMOOOOQRRRSSRSRRRRRRQOMLLMOQRRRRSRRSSRRRRRQOLJDyumhff000099aaddhmruuwuu", "e66333bckEMORRRRRRRRRRRRRQQQQQQRRRRSSSSSSSSSSSRRRQQQQQRRRRRRRRRRRRRRRRRRQQMExia96[[//>-&$@+...+@&->/^]_]]]]]]__]^^//>>>;-*&$$$$&*->//^]]]]]]]]]]]]]]__[[39ajtALOQQQQQOMJGBsh06}^^^^^^[3nCLMOQQQQRRRSRSSSRRRRQQMLJLLOQRRRRRRRSRRRRRQQOLJDyumhf000009daaddhmruuuur", "0633:<1kAIRSSSSSSSSRRRRRRRQQQQQQRRSSSSSSSSSSSRRRRQQQQQRRRRRRRRRRRRRRRRRQQMExsg936[[[/>;*%@+++@@&=>/^]]_]]]]]___]^^^^///>;=&%%%%&=;>/^^]]]]]]]]]]]]]__[[39ajtCJMOQQQQOMLGDwnf6[_^^^^^^[9sEMOQQQQQRRRSRSSSRRRRQOLJGGLOQRRRRRRRSRRRRRQQOLJDBumff0000099adddhmrruurr", "63(:<1koINNSSSSSSSSSSSRRRRQOOMOQQRRSSSSSSSSSRRRRQQOOQQRRRRRRRRRRRRRRRRQOMExtgd966[[[/(;*%@@@@$&~;//^]]]]]]______]^^^^^^/>-*&%&*=;>/^^]]]]]]]]]]]]]]__[39gjtxEMOQQQQOMLGDwrf0}__^^^^^^[gtJMQQQQQQRRRSRSSSRRRRQOLGDCJMQRRRRRRRSRRRRRQOMLJDBsmff000099999ddhmrrrrmm", "3(:<2||pINNSSSSSSSSSSRRRRQOMLJLMOQRRSSSSSSSRRRRQOOMOOQRRRRRRRRRRRRRRQQOLExiga93666[[/(;*%@@@$&~;(/^]_]]]]]______]]]]]^^/>-*&&*=;>/^^]]]]]]]]]]]]]]__[39gitxELMOQQOOLJGDwrh06}__^^^^^^[gyLOQQQQQQRRRSRSSRRRRRQMJDyDGMQRRRRRRRSRRRRRQOMLEDBsmhff00099999ddhmmrmmee", "(:<{||7pHNNSSSSSSSSSRRRRQQMJGCCGLMQRRSSSSSRRRQQOMLLMOQRRRRRRRRRRRRRRQOLExiga9900666[/(;*%@@$%*;>/^^_]]]]]________]]]]]^/>-***->>/^]]]]]]]]]]]]]]]__[[9gitxEFMOQQOOLLGDwuhf6}__]]^^]]^[gDLOQQQQQQRRRSRRSRRRRRQMGyByGLQRRRRRRRSRRRRRQOMLGDBsnhdf000099900dhhmmmee0", ":-~{)!7pvNNSSSSSSSSRRRRRQMJCtsstDEMQRRRRRRRRQOMLJJJLOQQRRRRRRRRRRRRQOMExigd9999d006[/(-&%$$%&=>/^^]__]]]]_____^__]]]]]^/>-==->/^^]]]]]]]]]^^]]]]]_^[9gjtxEFMOQQQOMLJDBumf0}___]]]]]__6gDLOQQQQQRRRRSRRSRRRRROLCywyCLQRRRRRRRRRRRRQQOLJGDBsnhdf000009900fhhhhee6}", "-~{)!!7pzHNSSSSSSSSRRRQOMEDwnggmsyGLOQRRRRRQOLJGDDGJMQQRRRRRRRRRRRRQMJCtja999ddddd6[/>-&%$%&*;>/^]]]]]]]______^^^^^^^^/>;--;>/^^]]]]]]]]]^^^]]]]__[9gjtxEFMOQQQQOMJGyumd06}__]]]]]]__[dyJOQQQQQRRRRSRSSRRRRROLDwswDLORRRRRRRRRRRRQOOLJGDysnhdd000066660fffff06}}", "=*%)!!77zIRSSSSSSRRRRQOLEDsnhdddhnwDJMQQQQQMLGDBBBDJMQQRRRRRRRRRRQQMJCtjg999dhgmhd06/>-&%%%*->/^^]]]]]]]____[[^^^^^^^//>;;;>>^^]]]]]]]]]^^^^]]]__[9gtxCELMQQRRQQOMJDBuh06[[__]^^]]]__[dwEMQQQRRRRRSRRSSRRRRROJDwswDLORRRRRRRRRRRRQOMLJGDwumhdd0006666600fff06}}^", "*&%!!!77zIRSSSSSRRRQQOLGyshdd0000fhsyGLMOMLJDyuuuBDJOQRRRRRRRRRRQQMLGysgd99dhnnnnh06/(;*&&*=;>/^^]]]]]]]____}[^//////>>>;;>>/^]]]]]]]]]^^/^^^]]_[3gtxEFMMQRRRRRQOLGDsnd06[__]]^^^]]]_[9sGMQQRRRRRRRRSSSSSRRROJysnsDLOQRRRRRRRRRRRQOMLJGDwumhf00066[[[6000006}__^", "&%$$!!|ozIRSSSRRRRQOMJCyshd00000000dnwCJJJGDwumruwDLOQRRRRRRRRQQOMJCysga999dhnnnmd0[/(;=**=->/^^]]]]]]]_____[[//>>>>>>;;;>>/^^]]]___]]^^///^^^^[3gtCFMMOQRRRRRRQOLCtnd06[___]^^^^^]]_[9sGMQQRRRRRRRSSSSSSRRROJysssDLOQRRRRRRRRRRQQOMLJGDwumff0066[[[}}60006}__]^", "%$$@!)|ozORRRRRRQQOLEDwnhd0000086660dmsyDDywummmuBGLOQRRRRRRRQQOMECtjgd9000ddhggd9[[/(>-=-->>/^^]]]]]]]_____^//>;;;;;---;>>/^^]]____]^^////^^^^[atELMOOQRRRRRRRQMEynd66[___]^^///^]]_[9sEMQRRRRRRRSSSSSSSRRROLCwwwDLOQRRRRRRRRRRQOOMLLEDBumff066[[[}}}}66}}__]^^", "%$@@!)|oIORRRRRQQMLEDsndd00000886}660dmswwsrmhhmuyJMQRRRRRRRQQMLEDsng996666000096[[//>>;;;>>//^]]]]]]]]_____^/>;-----==-;;>//^^^^^^^^^//>>//^^[9lCLMOQQRRRRRRRQOLCsd0[}___]^^/>>>/^^^[9tEOQRRRRRRSSSSSSSSSRROLGyByGMQRRRRRRRRRRRQOOMMLJCysmf006}}}_}}}}}}}___]^/", "$@@@!|ozIQRRRRQOMJCysgd000008888}}}}60hnusumhhhmwDJOQRRRRRRRQOLEDsn9966[[[[[[[[[[////>>>>>>>/^^]]]]]]]______^/>;;--=====-;>>//^^^[[^//(>>>//^[3jxFMOQQRRRRRRRQQLGtg0[}____]^>;;;>>/^^[gyLORRRRSRSSSSSSSSSRRRQMECDDJMQRRRRRRRRRRQQOOOMLJCysnf006}}____}}}}___]]^/", "@@@@!|pzORRRRQOMJCtjgd0000088886}}}}60hnsuurmmmuBGMQRRRRRRRRQMLCtja9[[[[[[[[[^^^///>>>>>>>>/^^]]]]]________^^/>>;;--=***=--;>>///[[[/(>;;;>//3atEMOQQRRRRRRRRQMJyn96}____]^/;=*=->/^^3jCMQRRRRSRSSSSSSSSSRRRQMJGGGLOQRRRRRRRRRRRQOOOMLJGywnf06}}______}_____]^/>", "@@@@!|pIORRRQOMJCtng906600088886}}}60dnswBwwuuuyDJOQRRRRRRRQOLEyia93[[[[^^^_^^//>;;;;;>>>//^^]]]___________^^//>>>;-=******=-;>(////(>-=~-;((3jxFMQQRRRRRRRRQOLCsd6[____]^/;=&&*=;//[atJORRRRSSSSSSSSSSSSRRRQOLJJJLOQRRRRRRRRRRQQOOOOMLGDwnd06}}___________]]^/>", "@@@@!7zIQRRRQOLCtja9666600088886}}66dmwDCGGDDDDGJMQRRRRRRRROMExlb93([//^^^^^^//;-==-;;>>//^^]]]_____}}}}____^^///>>;=**&&&&&&*=;>((>;=*&&*->(atEMOQQRRRRRRRQQMGtg3[^__]]^/>=&%%&*;>/3jCMQRRRRSSSSSSSSSSSSRRRQOLLJLMOQRRRRRRRRRRQQQQQOMLJDwnd06}___________]]]^>;", "@@@!!pzIQRRROMEyia96666600888886666dhsCJLLLLLJLLMOQRRRRRRRQIFxlc:((((////^^//>>-=*=-;>>//^^]]____}}66686}}__^^^^^/>>-**&&&%%%%&*=--=*&%$%&=:3jxFMOQQRRRRRRQQMEyn3[/^^^^^/;=&%$%&*;>(ayJORRRRRSSSSSSSSSSSSRRRQOMLLLMQQRRRRRRRRRRQQQQQQOMJDwnd0}[___________]]^/>;", "@@@!7pINRRROOFCtg93[666000888886660hsCLOOQQQOOOOQQRRRRRSSNIzok11<==--;>(////>>;-==-;>>/^^]]]___}60feeee06}}__^^^^^/>;=*&&%$$@@@$%&&&%$@@@%*>>>>>>-*&$$$%&=;(3jCMQRRRRRSSSSSSSSSSSSRRRQOMMMMOQQRRRRRRRRRRRQQQQQOMJDwnd6[[__________]]]^/>=", "@@@!7zHNNNQOMExia96[6600088888060fhsDLOQRRRRRQQQRRRRRRSNNHp77))))%&&{~-;>(((>>;;;;>>//^^]]]___}0fhmmmmhe06}}_^^^^^/>;-**&%$@+++++@@@+++++$&1cxFOOQQRRRRRRQMJxi<~{&&&****&%$@@$%*->(atEOQRRRRRSSSSSSSSSSSSRRRQQOMMOOQRRRRRRRRRRRRQQQQQOMJDwnd6[___________]]]^>;=", "@@!7pHNNNNQOFAtja3666000eee88800dhuyJOQRRRRRRRRRRRRRSSNHvv4''!@@@@@$){~-:>((>>>>///^^^]]]____}0fmuuwwwumh06[[^^^^^/>>;=*&%@+++..........+@)2kAMOQQQRRRRRQMExl1)$@@@@@$$$@@@@@%&=;((ayJORRRRRRSSSSSSSSSSSSRRRQQOOOOQQRRRRRRRRSRRRRQQQQOMJCwg96[[^________]]]^/>-*", "@@!7vHNNNNNOFAtja366600eeeee800fhnyGMQRRRSRRRRRRRRRRSNHv54'''++++++@!)~<<:(((////^^^]]]_____}0dmuwBDDDBwnh0[[[^^^//>>;=*&%@++............+!|AFOQQQQRRRQQMFxl2)@+....+++++++@$&*;>/3gyLOQRRRRRSSSSSSSSSSSSRRRRQQOOQQQRRRRRRSSSRRRRRQQQOMJDsg9[[[^_______]]]^^/>=&", "@!7pHNNNNNNOFAtca936000feeeeeefhnyGMQRSSSSSSSRRRRRSSNHv5,,##....++@!){21cba3(//^^^]_______}}0fmuwBDGGGGDwnd6[//////>>;=*&$@+.... ..''pzIQRRRRRRQQMFxk2)@+........++++@%*->//3gyLOQRRRRRRSSSSSSSSSSSRRRRQQQQQQRRRRRRRSRSSRQQRQQQOMJDsg9[[[^^^^^^^_]]]^/>;*&", "@!7vHNNNNNNIFAtca9900000ee0e0edmwDLORSSSSSSSSSSSSSSNHv5,,##....++@!)|2kkliga3[[^^_______}}}00hmuBDGJLLLJCtga33(///>>;;=*&$@+... #'4vHNNRRRRRQQMJxl2)!+.. ....++@$&=>/^[6gyJOQQRRRRRSSSSSSSSSSSRRRRQQQQQQRRRRRRRRSSRRQQOQQQOMJCsg9[[[^^^^^^^^]]^^/>-&%", "@!7vHNNNNNNIFClca990000000000fhnDJORSSSSSSSSSSSSSSNHv5,,##...+++@))22kxxytia9[[[[_____}}}600fhmuyDJLMOMLExib33(((>>;;-*&%@+... #,5KHNSSRRRQQMJxl1{)+.. ...++@%*;>/^^6gyGMOQRRRRRSSSSSSSSSSSRRRRQQQQQQRRRRRRRSSSRQOOOQQQOMJDsg9[[^^^^^^^^^^^^^>;*&$", "!74HPPNPNPNIzxlba366600000000fmwGMQRSSSSSSSSSSSSSNHv5,,##..++@@$%{11lyDxytng96[[}}}}}}}66000ffmsyGLMOOOMLCtiaa3((>;;-=*&$@+... #,5qPNNSSRRRQOFClc1{$+.. ...++$&=>/^^[6hsCLOQQRRRRSSSSSSSSSSSRRRRRQQQQQRRRRRRRRRRQOIIOOQQOMExia3[[^^^^^^^^^^^^/>-*%$", "!4vHPPPPPPHIzklb9366666666660dsxJORSSSSSSSSSSSSSNHv44'#...+@@$%{~</^^[6dsDJLOQRRRRSSSSSSSSSSSRRRRRQQQQQRRRRRRRRRRNIIIOOOOOMExja3[^^^^^^^^^^^^//;=&$@", "'4vKPPPPPPHIAkia93[[[}}66666dgtGMQRSSSSSSSSSSSSRIvp4'#...+@@%&*=-:acittwssnhdd000666686886800fhwCLMQQQQOMExtiga::;-=*&$@++... #,,vHNNSRRRQOMExb:=&$+.. ..++$&->/^^[6dnyCJMOQRRSSSSSSSSSSSSRRRRRRQQQQRRRRRRRRRRIIIIIOOOMFAtb93[^^^^^^^^^^^^/>;*&$@", "44vPPPPPPPHzAkca36[[[}}}}}60dnxFORSSSSSSSSSSSSNIzp4''...+@@%&*-;:(3agnissnnmhhdff00068886}6600hwGLOQQQQOMExtljba:;=*&%@++.... ##4vHNRRRQQOMFxja-{$+... ..++$&->/^^[6dgsyGLMQRRSSSSSSSSSSSSRRRRRRQQQQRRRRRRRRROFzzzIIIIMFxla3[^^^^^^^^//^//>>-&%@@", "4vHPPPPPPHHzolca3[[[[}}}}}69gtCMORSSSSSSSSSSSNHIp4''...+@$%&*=;;>((3agnnususurmhffe0066}}}}}6dnyJMQQQQOMLExytica:-~&%@@+...... .'7pFOOQQQOMLCla:~%@.. ..+@%*->/^^[60hnsyGLORRRSSSSSSSSSSSRRRRRRQQQQRRRRRRRROIzppzIIIIIAxia3/^^^^^////////>;*&$@@", "vvPPPNNPPHIzxlcd3[[[____}[6diyJMQRSSSSSSSSSNNHHp4''...+@$%&=-;;>>((33dhnwByyywwumhf006}}}}}}0gwGLOQQQQOMJGCCxtib:=*%$@+....... ..+!2kAFOOOOMLExb:-&@+.. ..+@%*;>/^^[60dgnyCJORRSSSSSSSSSSSSRRRRRRQQQQRRRRRRRQOFAoppvHHIIAkca(/^^^/////////>>-*%$@@", "vHHNNNNNNNIAxlg93[[[____[[9gtEMORRRSSSSSNNNNHvp4'''+++@$&*=;;>>>>((30dmwDDGGGDDwumhf06}}}}}6dsDJMQQQQOMMJEECCxlc<~{$@++......... ..+${/^^[69dhnsDJOQRSSSSSSSSSSSSRRRRRRQQQQRRRRRRQOMAooopvHHIzAkc3(/^^////((////>;=&%$@@", "HHNNNNNNNIIAxlga3[[[___[[6aiCJMORRRRRNNNNNHHvp7'!'++@$%&=;>>>>>((((3dnwDGJLLLJGDwuhf06}}}[69nyJMOQQQQOMMLLLLECxl1~)$@+..............+@&-:bxCJLLLExia3-&@.. ..+$&=>//^/[660dhsyJORRSSSSSSSSSSSSRRRRRRRQQQRRRRRRQMJxkkopvIHIzAkc3(/^///(((((//>>-*&%$@!", "HNNNSSNNOIFExtja9[[[__[[[9jxEMOOQRRQNOIIHHvp77!!!@@$%&~->>////////39hsDGLMOOMLJDysmd06[}}[6gtEMQQQQQQOMMMMMMLJCl1{)!@+.............+@&=>(alxEJEExta3(=%@.. ..+$&->///[[669dhsDJORRSSSSSSSSSSSSRRRRRRRRRRRRRRRQOMExkkozzHIIFAkca(///(/(((((>>>;-*&%$!!", "NNNSSRRQOMFECysgd6[[[[[[9jtCFMOOOOOIIFzzzpp7|)))))%&~-;>////////[3dnwDJLMOOOOLJGysgd6[[[[[9sCMOQRRRQQOOOOOOOOMAk2{)!@++...........+@%*;/(9ixCEExtg3(:*$+.. ..+$*->///[339ddgsDLORSSSSSSSSSSSSSRRRRRRRRRRRRRRRQOMCklkozIIIIFAkca3///(((::(>>>>;=&%$$!7", "NNSRRROOMMFECytjgd6[[[[9gtxEFMMMMIFFAAooo|22{{{{~~~=;>(///[[[[[39gsyGJLOOOOOMLJCysh0[[[[[9gxLOQRRRRRQQQQQQQQOMFo2{)$@+++.........+@%*;>/[9ixCECyja3(-&@+. .+@%*;>///[39dddnwCMQRSSSSSSSSSSSSSRRRRRRRRRRRRRRRQOFAxkkozIIIIFAkca3//(((:::>>>>;-*&%$!!4", "NNRRROOMMLJJECDtsg99669ajxCEFMFFFAAokkkl11<<<----:::((([[[[[[39gsyCJLMOOOOOMLJCysg96[[[[[9tEMQRRRRRRRRRRRRRRQOFo2{)$$@++........+@%*;>//[atCEECtj3(;~%@.. ..+$&=>///[39ddddnyGMQRSSSSSSSSSSSSSRRRRRRRRRRRRRRRQMFCxkkAzIIIIFAtb33//(((::::>>;-*&%$@@'4", "NNNQOOMLLJJJJECDtng9999gtxCEEFEACxkkllicc::((((((::a33333[639gsyCJLMOOOOOMLLECysg9[[[^^[[atFOQRRRRRRRRRRRRRRROFk2{{)$@++.......+@%*;//^[6gtCEECta3(-&@+.. ..+$*;>///39ddddgsyEORRSSSSSSSSSSSSSRRRRRRRRRRRRRRQQMJCkkoAzIIIFFxlb33//(((::::;;;=*%$@@+'4", "NNOOMLJJEJJJJEGCysgd999gjxCCCCCxxklllicba333(333aaaaa993339gntCJLMOOOOOMLLGCysnd6[[^^^^^3gxLOQRRRRRRRRRRRRRRQOAk1~{%$@++.......+$*;(/^^[9nxEEExla(;*%@.. ..@%=>///[6ddggdgsyGMQRSSSSSSSSSSSSSRRRRRRRRRRRRRRQOMExkkoAFIIMFAxja33[/((:::;;;;-*&%@@+''4", "HIMLLJGCCGEEJEGDysg9999ajttxxxxxtktttliga933339abbjbba9999gntCJMOOOOOMLJGDtsgd9[[[^^^^^^3jxLOQRRRRRRRRRRRRRROMAl1~{)$@+.......+@&-(/[[[[9jyCECxja:=&@+.. .+@&->//[39dddddgsyJMQRSSSSSSSSSSSSSSRRRRRRRRRRRRRQOLCxlkoAFIMFFCtb33[//(((:;;;;-=*&$@+++'4", "IIFJGDDyDDCGGGDywnd96[39ajitttxxxCCCxytjga999abjjiijbaa9dgnsDGLMOOOOMLECysgd96[[^__]]^^^3jxLOQRRRRRRRRRRRRRQOFxl<~{$@+........+%~:([[[[6djtyxtia(;*%@... .+$*;(/330ddddddgsyJMQRSSSSSSSSSSSSSSRRRRRRRRRRRRQOMExlllkAFFFFAxia3[///(((:;;;;-*&%$@+++'4", "zzGCywwwwyDDDDDBshd6[[[39abiltxCAEEECCytjgaagjjillijbaaaggnwDELMOOOMLGDwnh06[[[____]]]^[[gyJOQQRRRRRRRRRRRQOFAlc<{)@+... ..+${;([[[[[69gjssja3>=&@+.. ..+%~:(330dddddddgsDJOQRSSSSSSSSSSSSSSSRRRRRRRRRRQQMJCtjclkCEFFECtb33[^^///(>;;;;-*&%$@+++''", "ooytsiinswwyyDywnh06[[[[39ajitxEEFFJECxtijjjjltllljjbbjgjnsyDGJLLLLECyshd06[[[_____]]__[6gyEMOQQQQQQRRRRRRQMEkc<~{$@+.. ..@%=(([[[[[[69dga93(-*$+.. .+@)<:339ddd9399dgtCLORRSSSSSSSSSSSSNNNRRRRRRRQQQQOLExibbilxAEECxia3[^^^^//(>;;;;-*&%$@+++''", "oklinggdgnswBywsnd0[[[[[[39gitxEEFFJECyttiillttllliiilltstwyyDGGGGDysnh0066[[[_________[6hwGLOOQQQQQRRRRQQMExib<~%@+.. ..+$~>//[[[[[[[[66[[(;~%@+.. .+!{<:aaddda3339dnyGMQRRSSSSSSSSSSNNHHIINRRQQQQQOOMExlbabblxCCCxtj93[^^^^//(>>>;;-=&%$@++++'", "|2ccaa39dhnswwwsnd0[[[[[[[9ajtxCEEEECxyttiitttlllllltxxxyyyyyyyyywsnhd066[[[[__________}6hsDJMOQQQQRRRQQQOLClb:<~%@+.. ..+$&;(//^^^^[__[[[[/>=&@+... .+@)21ccgdaa33339gsDJOQRRSSSSSSSSSNHHzppzIOOQQOOOMLECtjaaabltxCxtig9[[^^^^^//>>>>;-=&%$@++.+'", "22<:::(33dhnuwwsnh96[[[[[[69gjttxxxxtttiiiiiliiilltxCAECCDyywsssnhdd0666[[[[[__________}0hsDELOOQQQRRQQQOLEyib:-*%@+... ..+@&->/^^^^^_____^^//;&$+... ..+!22lligaa:::(39gtCLORRSSSSSSSSSNHvp777pzIOOOOMMLECtja99agitxxytna3[[^^^^^///>>>;-=&%$++..++", "){~<:::((3dhswywsgd6[[[[[[[39gjjjiiijjjjjjjjjjjilxCEFFFJECyysnnhd0066}[}[[[[[[________}0fmwDGLOQQQRRRQQOMJCtb::-*%@+.....+@%=>/^^^^________^/>*%@... ..+$)2kkktic::::(3aiyEMQRRSSSSSSSSNHzp7777ozIOOOMMLECtjg999ajityytig9[[[^^^^^////>>;-=&%$++...+", "){~~=--;:(9giwywsnd0[[[[[[[669dggggaaaaaggggjjjlxCEFMMMLJCywshd0066}}}}[[[[[[[______}}0dmuyDJLOQQRRRRQQOMJxib::-~&$@+...+@%=>//^^^________]^/-&@+.. ..+@)2koACxtic<<::abtCLORRRSSSSSSSRIzp7!!!|ozFOOMMLECysg9999ajittttig9[[[^^^^^^///>>>-=&%$++....", "%%{*~===-::anwwwsnd96[[[[[[6699999999999aaaabjitCEMOOOMLJCysnd066}}}___[[[[[[[____}}60hnwyDGJMOQRRRRRRQOMExlc::-~&$@++++!{=:(/[[[^________^/>*%@.... ..@%~1kAFFAxlc<<::aixEMQRRSSSSSSSNIzp|!!!!)|AFMMMLECtjg99399ajitttsnd6[[[^^_^^^////>>;=&%@++....", "$%%&&&**~=:aisttsng906[[[[[6669999999999999aajtCEMOOOOOLECysg966[}____}[[[[[[[}}}}}60huBDCGJLMOQRRRRRRQOMGxlc:<=*&%@@+!){1:336[[[[[}}}____^/;*$+... ..+${>;=&%@++....", "@@$%%%%&&~<:ciwtsngd96666666999993366663339aglxEFMOOOOMLCysnd06[______}[[666[[}}}}60hsyDGJJLLMQQRRRRRRQOLEkl<<=~{%$$!!)21cgdd0066666[}}}__^/-&@+... ..+@%~>;=&%@++....", "@@@$%%%%%{~=%@... ..+$&=cxFOOOIAk1>;=*%@+.....", "+@@$$$%%%&{1clttsingdddddddddd99936[[[[399ajtxCJMMOOMFExtng9[[[______[[6666666}}60fnwDGJJJJLLMOQRRRRRRQMFCl1<~~{&)))|ooCCDysnhddd000066}_^/>*$+... ..+$&>;=*%$+.....", "++@$%%%%%%{11kxyttinggggghhgddd993[[[[699gjstyCELMMLJCxsgd0[[[______[[669000666660dnBDGJJJJLLOQQRRRRRQOMAkl1~~{{{{{2oAEJJCywnhdfdfff06}}_^/;&@+.. ...+${>;-*&$+.....", "+@$%&&&%%%{2kkxxytsssssnnnnngad93[[[[69agjttyDCCEEEGDyig96[[_______[[660ddd000000fhsyGJJJLLLMOQRRRRRRQOFok11~~~*~~1kAFMLLGysnhdffff006}__^/-&@... ...+${1kFOQQNIAlb:39aiyEMQRRRRRRRIzo|)!@+++@!)|oAAxtj93[[[[3339aaaa93[[[________]]^^^//>>-*&$++....", "@$%&***&&%{2koCCxxttttssssinga933[[[[9ajjttyyyyyDDytsgd96[[[______[[[69dddddd000ffnwDGJLLLMOQQRRRRRRRQIAk2~~~~~=<1kAFOOMLEDsnhdfff006}}__^>=%@.. ...@${1oINRQIFola333ajyEMQRRRRRRIFpo|)!@+++@!)|oAAAtj93[[[[339aaaa99[[[[_________]^^^///>;-*%@+....", "$%*=--=*&&)|2oAACCyytttwtsngga33[[[[39gstyyyyywwssngd96[[[^_______[[69ddgnhhfdfdhnsyGJLLMOOQQRRRRRSSSNIo|{{~~==-*$+.. ..+@%{2AINNNIFkca3339jtGMOQRRRROIAo|))@@@+@@!|oAFFAtj93([[339aaaa993[[[[_________^^^^^^//>;=&$++...", "&*-;;;-*&&){2oAEECDyyywtsngaa33(/[[[9gjtyyyyyssnggd93[[^^_______^[[69ddgnnnhhhhmnsyDJLMMOQQRRRRRSSSSNHp7|){{~-::cxFMQQQOLEDwshhfff06}___^/;&@+.. ..+@%~kAINNOIAlb3[[[9gtCLOQQRQOIAo||)!@@@@@@!|ozFFAxj93((339aaaaaa93[[[[_____^^^^^^^^^^^^/>;*&$++++", "=;>>>>;=&&%{2oAEEECDyttsnga33(((//[[9gstyyyysnghd06[[[^^________[[[99gnnnsnnnnuwBDCJLMOOQQRRRRRRSSSSNHp7)){~=::cxFOQQQQOLJCyssnhff06}__^/>*%+.. ..+${1kzIOOIFxia3[[[6gsCLMQQOOIAo||))$@@@@@!)|zIIFFxia3((33aabbba996[[[[___[[[^^^^^^^^]]^^/>;*%$@@$", ">>///>>=*&%{2kAFFECDytigaa3((>>(//[39gsyyyysnhd06[[[^^^]]]]]___[[[69ggnnssssswyDGEJLMOQQRRRRRSSSSSSNNv7!)){~-*&&&&", "//^^^/>-*&%{2kAFFJECysga33((>>>>(((3djstytsngd06[[/^^^^]]]]]___[[69dgnsssswwyDCELLMOOQQRRRRRSSSSSSSNHv7!){~<=%@+.. ..+$&~1kAFIFAxla3[[[[6dnyELMMFzp|!!@@@+@+@@@!|pzIIIFxlb:33abjjjjgad000666}}}[[[[^^^^^____]]^^/>-===-", "^^^^^/>=&%%)2kAFFJECtia3((>>;;;;>((3ajsttssgdd6[[/^^^^^]]]]]]__[[69gnjsttyyyDGJLMOOOQQQRRRRRSSSSSSSNHp7|{~<;*%@... ..+@%*=;;>>", "^^^^//;=&%$){2oEFJCxiba::>;;;;;;;>(3ajsttsngd96[[//^^^^^^]]]]_^[[99gjstyDDCCGELLMOOOQQQRRRRSSSSSSSNNHp|211ckAMORRRRRRRQOMLJEGDywmf6[^//>=&$+.... ...+$&=-:lkAAAxklja9000dhsyGJFzp7!'++++++++@@$)|pFIIFAxlcbbbittttsnghhffeeeeeee066[[[[_______]^^/>>>//", "^^^//>-*%$$!)|oAEACtcb::;;;;;;---;::acittingd33[/////^^^^^]]]^^[[9gjttDCGGGEJJLLMMOOOQQRRRRRSSSSSSNNIpk11lkAMORRRRRRRQQOMLLJGDysh0[[//>;*&@+.... ...+$&*;>:blkxxxxttigdddhnwDGEFzp7''.+...+++@@)||AFIFFAklcccitxxxytsnmhhhheeeehff06[[[[}}}}____]^//////", "^///>-*%$@@+!!|oAokl<<===--;;;--==-:bcitlingd33/////////^^^^^^^[39jtyCEJLLLLLLLLLLLLMMOQRRRRSSSSSSNNzokllkAFORRRRRRRRQOMLLJEGDBrd6[//>>-*%@+... ...+$&*;>((:clkxxCCCytnmmnsyDGEzp74''....+++@@$)2oAFFFExklccitxCCCxytsnmmmmhhmmmmmff06[}}}}}____]^/////[", "(((>-*%$++++''77oo22{{{**=-----====<-*&$++... ...+$&=;>///(ablxAEJJGDywsswDCGEzp4''.....++@@$){2oAFFFAxllcilxCCCCDywsurmmmmmmrrrrmhff0066}}}___^^//(339", "a3:={)@++.##''4477|)))%%&*=---=***~~>>>>>>>>>////[9jtCFMOQQQQOMLJCDyyxCEMOQRRRRRSSSSQIAokxAFORRRRRRRRRQOMLJJEGDBnd6[//>-*&%@+.... ...+@&*;>////(3alxEMMMLJCDyyDDGGzzp4''#....++@$){2koAFFEAxliiltxCEECDywuurrrrrrrruuurrmhhfe00}}___^^/39gii", "ic<{)!+.###,,,,447!!@@@$%&*===*****~~1cilicba:(>>>>>>;;;;;;>>/(3atCFMQQRRRQQOLEDttttCEMOQRRRRSSSSROFAoxAFORRRRRRRRRQQOLLJEGDysg9[//>-**&$++... ..+@%*;>/^^^//3alAMOOOOLJGDDDGGEzp44''#...++@@$)22kAAFEACtliilxCCEECDywwuurrrrrruuwuuwuumhffe0}}__^[[9jtxC", "l12)!''###,,,,,44'''++@@$%&******&&*~<1ccccb:::;;;;;;-==**=-;>(3ixJMQRRRRRRQOLEDtttxELOQRRRRRSSRRROFAAAFOQRRSRRRRRRQQMLJEGCDynd6[/>-=*&%@++... ...+$&->//^^^^/3atEMQQQQOLJGGGGJJzp44''#...++@$){2koAEEEAxliiltxCEEECDyBwuurrrrrruwwBBBBwwurhf06}}_[[9gsxCG", "k2|!'''##,,,,5544'''+++@$%&&***&&&&{{~</^^^^^/3bxLOQRQQOMLJGGJJJzp4'''#..+++!))22koAAAAxtliiltxCEEEGDyywuurrrrruuwBBDDDDDBwrmf06}}[6dntCGG", "22)!'''',',,555544''+++@@$%&&&&&&&&&{~<<<<<<==~*****&&&%%%&*=:blCMORRRRRRRRRQMECxCEMOQRRRSSSRRRRQOMFFMOQRRSSRRRRRRQQOLJGCDysnd6[/(;=*&&%@+.... ..+@&=>//^^^^/[9iCMQRRRQQOLJJGJJFzp4,''#..++!!)||oooCACxtijjjlxCEEJEGCDywuuurrruuwBBDDGJJGGDBumd06669ditxDx", "2))!!+''''445vvv477!++@@@$%%&&%%%%%%&*~=<--=~*&%%%%%%%$$$$%*-:cxEMQRRRRRRRRQOMJEEFMOQRRSSSSSRRRQOMMMMOQRRSSSSRRRRRQQMLECDysnd9[[/>;=*&%$@+.... ..+$&->//^^///3atFORRRRQQOLJJJJJFzp44,,''''!!77ooooCCCxtljbjitxCEJJJEGDDBBuuuuuuuwBBDGJLLLJGDyumd0009gnsttt", "))!!!!!!)77ppvvzpp7!!!@@$$$%%%%%$%%%%&*~==~*&%$$@@@$$$$@$%&~:biCJOQQRRRRRRQOMLJJLMOQRSSSSSSSSRRQOMMOOQRRRSSSSSRRRRQOMLGCywsg96[^/>-**&%$@+... ..+$*->//////(3jCMQRRRRRQOMLJJJFFzv44,,,''477ppzzAAACxxtijbjlyCELLLLJGGDDBwuuuuuwBBDGJLMOOMLJDBuhdd9ddgnii1", ")!!))){22|ozzIIIzpo|))$$$$$$$$$$$$$$%%&*~**&%$@@+++@@@@@$%*-:aiCJMOQQRRRQQOMMLLLMOQRSSSSSSSSRRRQOOOQRRRRSSSSSRRRRRQOMLGCysnd9[[^/>-*&&%$@+... ..+%*;>////>((btFORRRRRRQOMLLJLLIIvv555555vvHHIIIFFAAxtljjjitCELLLMLLJGDDBwuuuuuwBBDGLMOQQOMLGDwsghdddaab<1", "!)){21;*&&%%$++... ..+@&=;>//(>>::iAIRRSSRRRQOMLLLLMIIHvqqqqqKPPNNNNNIFEAxtljjitxELLMMMMMLJGDDBwuuuuwBBDJLOQQQQOMLGDwngddda:<~{", "7||21cclxAFMOOOOMFAk2{)$$@@@++++++++@@$%%%$@@+++.+++++@@%&->3ajtDGLLMOOMMLLLLMOQQRRSSSSSSSSSRRQQQQRRRRRRRSSRRRRRRRQOOLLGDtnd[[//;*&%%%$@+... ..+%*;>///>;;<1kFQSSSSSRRROMLLLMOOHHKKKKKPPPNNSSSROMJAxtljjiyCJLMOOOOMMLJDDBBwuuuwBBDJLOQQRQQOMJGywngaa:<~{)", "ppokktxxEFMOOQOOOIzo2{)$@@++++++..++++@@@@@+++....++++@@%*-(3djsyCGJLLLLLLLLMOQRRRSSSSSSSSSRRRQQQRRRRRRRSSRRRRRRRRQQOMLEDtg9[//>*&%$$$$@+... ..+@&=>>//(>;-12oINSSSSSSRROMLLMMONNNPPPPPPNSSSSSSSRMFExtljitxGLMOOOOOOMLJGDDBwuuuwBBGJMQQRRRQQOLJGDtigbc1||7", "vzzAACCELMOQQQQQOOIAo|!@@++..........+++++++......++++@@%*;(3ajsyDCGEJJJJLLMOQRRRSSSSSSSSSSRRRQQRRRRRRRRRRRRRRRRRQQQOMLGysa3[/>=&$@@@@@@+... ..+@%*;>//((:;=12zISSSSSSSRROMMLMOQRNNNNNNNSSSSSSSSSROFCxtiistCELMOOQQQOMLJGDBwwuuuwBBGJMQRRRRRRQOMLECyti12|74", "NIIMFJFLMOQQQRRRROIzp|!+++........................++++@$&=>(3antyDCGEEJJLLMOQRRRSSSSSSSSSSRRRQQQRRRRRRRRRRRRRRRRRQQOOLJCtg9[//;*$@+++@@++... ..+@%*;>///((:;<1kzNSSSSSSSRROMLLMORRSSSSSSSSSSSSSSSSROFCttiisyCJLMOQQQQOOLJGDBwuuuuuBBGJMQRRRRRRRQOOMJGCxoppvv", "NROOMMMMOQQQRRRRRROIp7!++.........................+++@@%&->3djsyDCCGEJJLLMOQRRRSSSSSSSSSSSRRQQQRRRRRRRRRRRRRRRRRQQOOMJCtn9[[/>=&@+++++++... ..+@%*;>////((>:<//////(>::-&@+.......... ..+@%*;//^^/[[/((>(:lFORSSSSSSRQOMLLMRSSSSSSSSSSSSSSSRRRQMCtsinssyDJLMOQQQOMLGDywurrrruuBBDJMQRRRRRRRRRRRRQONNNNSS", "RRRQOMMOOQQQQQRRRRRNIz4''++.++......... ...+@$%*-:bixCGEJLLLMOOQQRRRRSSSSSSSSSSRRQQQQRRRRRRRRRRRRRRRQQOMMLJCysg9[^^/;*$@+......... ..+@%*;//^^^[[[//(((3iEORSSSSSSRQOMLMORSSSSSSSSSSSSSSSRRROLCtsnnswyDJLMOQQOOMJGDBwurrrruuBBDJMQRRRRRRRRRRRRRNNNSSSS", "RRRQMMMOOQQQQQQRRRRRIzp7!+++@@++++..... ...+@@%*=%@+.......... ....@%*;/^^^__[[[/((((3bCMRSSSSSSROOMLMORSSSSSSSSSSSSSRRRRROLCytssswyDGLMOOOOOLJCywwurrruuuBBDJMQRRRRRRRRRRRRNSNSSSSS", "RRQOMMMMOOQQQQQRRRRROIp7!!@@@$$$@@++.... ...+@%{=&@+...............+$&->/^^__}}[[/(((/3bxMQRSSSSRROMLLMORSSSSSSSSSSSSSRRRRROLGCytwwByDJLMOOOOMLGDywwurrruuuBBDJMQRRRRRRRRRRRRSSSSSSSS", "RRQMMLLLMMOOOQQQRRRROFo|!$$$%%%%%$@+.... ...+@){1ctDCEJLMMOQQRRRRRRSSSSSSSSSSSSRRRRRRRRRRRRRRRRRRRRRRQQOOLJDwn9[/>-&$+...............+@&=>/^^__}}[[(((>(/(axLQRRSSSRROMLMMORSSSSSSSSSSSSSRRRRROMLGCDyyyDGJLMOOOOMJGDywwuuruuuwBBDJMQRRRRRRRRRRRRSSSSSSSS", "RQOMJEEJLLMMMOQQQRRQOzo|)$$%%&&&%$@++... ..+@${1clxCGJLMOQQRRRRRRRSSSSSSSSSNSRRRRRRRRRRRRRRRRRRRRRRRRQQOMLGyn93(-&$+...............+@%*;/^^__}}6663((>//(9tEORRSSRROMLLMMORSSSSSSSSSSSSRRRRRRQOMLLEGCDGJLMOOQOOMLGDywwuuuuuwBBDGJMQRRRRRRRRRRRSSSSSSSSS", "QQMLEGGGEJLLLMOQQQQOFA2{)$$%%&&&%$@+.... ...+${/^^_}}60003(((//[9lEMQRRRRQOMJJLMQRRSSSSSSSSSSSRRRRRRQQOOMLLJJJLMOOQQOOMLGDywwuuuuuwBBDGJMQQRRRRRQQQRRSSSSSSSSS", "QQMLEGCCGGGJLMOQQQQOFo2{)$$$%%%$$@++.... ...+$&<:bixCJMOQRRRRRRRSSSSSSSSSNNNNRRSSSSSRSRRRRRRRRRRRRRRRQQQMLCwg3(-&@+.. ........+@$&->/^^_}}60fd03(((//[3jxMOQRRQOMFEGJMORSSSSSSSSSSSSRRRRRRRRQQQOMMLMMOOQQQQOMLGDywuuuuuwBBBDGLMQQRRRRQQQQRRSSSSSSSSS", "QQMLEGDDDDCGJLOQQQQMEk2)$$@$$$$@+++...... ...+$&-(ajtCJMOQRRRRRRRSSSSSSSSNNNNNNSSSSSRSSRRRRRRRRRRRRRRQQQOLJDsa3>~%@.. ........++$&=>/^^__}}0ddd03((////3atEMOOOOMFGCCGLORRSSSSSSSSSSRRRRRRRRRRRQQQOOOOQQQQQQOMLGDywuuruuwBBDDGLMQQRRRQQQQQRRSSSSSSSSR", "QOMLEGDDDDDCELOQQQOMAk2)$@@@@@+++........ ....@$&-(3gtCLMQQRRRRRRRSSSSSSSNNNNINNSSSSSSSSRRRRRRRRRRRRRQQQOMJCwg9(;*$+.. ......++$&=>/^^]__}60ffd03(///^^[3iCFMOMMJCDyDGLORRSSSSSSSSSSRRRRRRRRRRRRRQQQQQQRRRQQOMJCywurrruuBBBDGJLMQQQQQQOOOQRRRSSSSSSRR", "OMMJEGDyyyyDGLOOQQOFCl{)$@@++++.......... ...+@$*;(3bxEMOQRRRRRRRRSSSSSSNNNHHINSSSSSSSSSRRRRRRRRRRRRQQQOMJGynd3(-&@.. ....+++@%*;/^^]___}60ef03((//^^^/3axAFMFFAxywyDJORRSSSSSSSSSRRRRRRRRRRRRRRRRQQRRRRRRQOMGDwurrrruwBBDGGJLOOQQQOOMMOQRRSSSSSSRRR", "MMLEGDyywwwyGLMOQOMFx1{)$@+++............. ...+@%*;(3jxFMQQRRRRRRRRRSSSNNNNHHINNSSSSSSRSSRRRRRRRRRRRRQQOMLGysg93:*$+. ....++@%*->/^]]__}}60e003(//^^^^^[9lxEEEAxtsswDJOQRRSSSSSSSRRRRRRRRRRRRRRRRRRRRRRRRRQOLGysrmmmruwBDDGJLLMOOOOMLLLMOQRRSSSSRRRR", "MLEGCDywuuwyGLMOQOMAk1{)@@++............... .....+@%*;(bxFMOQRRRRRRRRRRSSSNNHHHIINNSSSSSSRSSRRRRRRRRRRRRQQOLJDwnd3(=%@.. ...+@$&->/^]]]__}}800063///^^^^^[3btCAAxysissDJOQRRSRRSSSRRRRRRRRRRRRRRRRRRRRRRRRRRQOLCwummmrrwBDDGJJLLMOOMLLJJJLOQRRRRSRRRRQ", "EGCCDywuuusyGLMOOMFAl1{%@++........................++@%~:alEMQQRRRRRRRRRRRRRNNHHzzIHNNSSSSSSRSSRRRRRRRRRRRRQQOLGysg9(-{@+. ..++@%*;/^]]]___}}66666[//^^^^^^^3alxxxxtinnsDJORRRSRRRRRRRRRRRRRRRRRRRRRRRRRRRSSRRROJDwnmmmruBDDGJJLLLMMMLJGGGGJMQRRRRRRRRQQ", "CDyyywwurrsyGLMOOMExl<{%@+.......................+++@$&=:lAMQRRRRRRRRRRRRRROIzzpppzHNNSSSSSSSSRRRRRRRRRRRRRQOMJDtna3:~$+. ..++$&->/^]]]____}}}6[[[//^^^]]^^39jtxxtijnnwDLORRRRRRRRRRRRRRRRRRRRRRRRRRRRRRSSSSRRMJDwrmmmrwBGGJLLLLMMMLJGCCDGJMORRRRRRRQQM", "ttwwwwuumrsyGLMOMLAkc<~%@+... .....+++....+++++@@$&*^]]]]]___}}}}[[[/^^^]]]^^[3bltttinnsyGLQRRRRRRRRRRRRRRRRRRRRRRRRRRRRRSSSSSSQMJDwnmmruBDGJLLMMMLLJJGDDDDCELOQRRRRRQQML", "ssswwwuuruwDELMMMFClb:~%@+... ....++++++++@@$$$%%&*-:lFORRRRRRRRRRRRQOMAok|||7pIHNNSSSSSSSSSSSSRRRRRRRRQOMJDtga3:{$+. ..+@%*;/^]]]]]____}}}[[/^^^^]]]]^[3ajltiiiswDJMQRRRRRRRRRRRRRRRRRRRRRRRRRRRRSSSSSSSQMGywumruwDGJLMMMMMLJJGDDDDDCELOQQRRRQQMJC", "nnsuwwuuuswDJLMMMExj::=%@+.. ...+++@@@$$%%&&****~-:bxFORRRRRRRRRRRQOFAk22))|7pHNNSSSSSSSSSSSSSRRRRRRRRQOLGyia3:=&@+. ..+@%*;/^]]]]]______^^^^^^]]]]]]^^[9gjiiiswyGLOQRRRRRRRRRRRRRRRRRRRRRRRRRRRRSSSSSSSQLGywuruwBDJLMOOOMLLJGDyyDDDGELMOQQQQQMJCt", "nnsuwwwuuwyCJLMMJClb3:-&@+... ....++@$$%&&*=------;>:jAMQRRRRRRRRRRQOFAk12{))!7vHNNSSSSSSSSSSSSSRRRRRRRRQOJCtg93:~)+. ..+@%*;/^]]]]]______^^^^^]]]]]]]_^[3ajiistyDJLORRRRRRRRRRRRRRRRRRRRRRRRRRRRRSSSSSSSOLGywuuuBDGLMOOOMMLJGDyyyDCGEJLMOQQQQMJCtn", "nruwBwwwuwyGJLLLExj3(>-&@+... .....+@$%&*=-;>>>>>>>>(alAMOQRRRRRRRQQOLAkl1{)))|pvHNNSSSSSSSSSSSSRRRRRRRRQOMEDsa9(-{@+. ..+@%*;>^]]]]______^^^^^]]]]]]]]_^[[9gnistDGJMQRRRRRRRRRRRRRRRRRRRRRRRRRRRRRSSSSSNNOLGywuwwBDJLMOOOMLJGDBwwyDGJJLLMMOOOMLGysn", "ruwBBBBwwBDGJLLExia3/(;&$+.........++$%&*-;>>////>>>/(atEMOQQRRRQQQOMLExl<1{{))7pHPNSSSSSSSSSSSRRRRRRRRRRQOLGyia3:~)+. ...+$&->/^]]_____}[^^^^]]]]]]]]]__[[9dgntyCELOQRRRRRRRRRRRRRRRRRRRRRRRRRRRRRSSSNSNROLGywwwBDGLMOOOMLJGDwsstDGJLLLLLMMMMLEDsng", "uwBDDDBBBBDGJJECtb3///;*$+.........+@%&*-;>//////////(atCLMOOQQOOOMLJExlc<<~{{|7vHNNSSSSSSSSSRRRRRRRRRRRRQMJCtga3<{@+# ..+$&->/^]]___[[[[^^^^]]]]]]]]]__[[69gntDCJLOQRRRRRRRRRRRRRRRRRRRRRRRRRQQQRRSNNNSQMLGDBBBBGJLMOOMMJGDwunsyCJLMMMMLLLLLECtsng", "wBDDDDDBByDGGGCtj93^//;*$+........++$&*=;>>//////>>>/(aixELMMMMMMLJECxlca:<~{{|pHNNNSSSSSSSSSRRRRRRRRRRRQOLGysga:~!+. ..+@&=>/^^]_[[[[[[[^^^]]]]]]]]]___[60dntDGJMOQQRRRRRRRRRRRRRRRRRRRRRRRQOOMOORNNNQOMJGDyBBDGJLMMMMJGDwumnsyELMOOMMLLLJECysnnn", "BDDGGDDByDDCCDtj93^^//;*$+........+@%&*-;>>/////>>>>//3btxCEEEEEECCxtlba::<~~2ozHNNSSSSSSSSSSSRRRRRRRRRRQMJCwna:<)@+# # ..+@&=>/^^^^[6666[[^^^^]]]]]]]]____}0dntCELMOQQRRRRRRRRRRRRRRRRRRRRRRQOMLFFMOOQQOMLECDBBDDGLLMMMLJDwughgsCJMOQOOMLJEGDysnnnh", "DDGGJGDDDDDDDyja3[^^^/;*%+.......++$&**-;>>>>>>>>;;>>((9jityxxxxxxttiba3(:<<12pIHNNSSSSSSSSSSSSRRRRRRRRQQLGDsna<{!+. ..+$&->/^^^[[6666[[^^^^]]]]]]]]____[0dntCELMOQQQRRRRRRRRRRRRRRRRRRRRQOMJGCCEFMOOMLJGDDBBDGJLLMMLJDysngggtCLOQQQOMLECytsngghm", "DGJJJJGDDDDyysg9[^^^^/>*%+.......+@%&*==-;>>>>;;---;;>((3aggjiiiiiibaa3((:<<2ozHNNNSSSSSSSSSSSSSRRRRRRRQOLGysb:~)+.# ## ..+%=>/^^^[[6666[[[^^^]]]]]]]]]]___[6dntCELMOQQQRRRRRRRRRRRRRRRRRRRRQMJCytyxCEFFJEGDDBBBDGJLLLLJGDwngdgiyEMOQQQOMJCysngddhhm", "JJLLLLJGDDywsg9[[^^^^/>=&@+.....++$%&**=---;;--=***==;>((333aaabccba:(((>:<12oINNNSSSSSSSSSSSSSSSRRRRRRQOLCyic1{!+## # .+$*;>^^^^[[666[[[^^^^]]]]]]]]]]___}60ntDGJLOOQQQRRRRRRRRRRRRRRRRRRQOLCysiistDCCCCDyBBBBDGGJLLJJDBshddgixJMQQQQOLEDtngdddhmu", "MMOOOMLJDDBsgd6[^_]]^/>-&$+.....+@%&***======***&&&&**=;>>((::::::::((((>::1ozINNNSSSSSSSSSSSSSSSRRRRRRQOLCyic2)+.#### ..@&->/^^__}[[[[[[^^^^]]]]]]_]]]_____69gsyCJLMOQQQQRRRRRRRRRRRRRRRRQOMGDwngggiswyyywwwwwBDDGJJJGDyundaaaiCFOQQQQOLEDsndddhrwB", "OQQQQOMJGysnd6[[__]]^^/;*$++...+@$&**======***&&%$$$%%&*=----=<<<::((((((:blAINNNSSSSSSSSSSSSSSSSSRRRRRQOLGyl1)!'#### ..+%*>/^]]__}}}[[[^^^]]]]]]]]]_]______[0dntDGJLMOQQQQRRRRRRRRRRRRRRRQOLCysndddgnnsssuuuuuBBDGGGGDywnd93abiCFOOQQOOLGDsnghhrwDG", "QQQQQQMLGysg9[[^__]]]^/>=&@++++@$&*=---===***&%$$@@@@@$%&&***~~=<::((((((:ckAIQNSSSSSSRRSRSSSSSSSSRRRRRQOJCk2|!'##### .+$*;/^^]____}}[[^^^^]]]]]]]___]_____}[9dnsyCGJLMOQQQRRRRRRRRRRRRRRQOMEDsnddddddhgmnrrruuwBDDDGDBwmd93::bixFOOQQOMLEDwsnnswDGL", "RRRRQQOLGynd6[[^___]]^^>-&%@@@@$&*=;;;;--=**&%$@+++++++@@$%%&{*~=-:((((33alxFORRSSSRRRRRRRSSSSSSSSRRRRRQMJCk|!'#### ..+$&;>^^]________^^^^]]]]____________[[69dgswyCEJLMOOQQRRRRRRRRRRRRRQOLCyuhd00660ddhhmmrruwBBDDDBwrd03::::ixJMOOQOOLJGDBwwBDJLO", "RRRRRQOLCyn96[[[^___]^^/;*&$$$%&*-;>>>;;;-**&$@++......++@$%%&{~~<::(333aixEMOQRRRRRRRRRRRRSSSSSSSSRRRQOMAk2!'### # .+$&->^^]]_____________]_____________[[69ddgnsyDDGJLMOOQQRRRRRRRRRRRQQLEDsmdd0666600ffhmmruuwBBBBwrh03(:-<=*&%&&*-;>>>>>;;-*&$@+..........+@$)){{~<<:aaagitCJMOQRRRRRQRRRRRRSSSSSSRRRRRQMJxk|!'## .+$*;>^^]]___________________________[[6dggnnsswyyDGGJLOOQRRRRRRRRRRRQOLDBrhd0666[660ffhmmrruuuwwumh03(:-==-*&&&*-;>>>>>>;;=&%@+..... ..++@$)){211cccityCJMOQQRQQQQQQRRRRRRSSSSRRRRRQOFCl2!'## .+$*;/^^]]___________________________[[9gnsssssswwByDDGJMOQQRRRRRRRRRQOLGysmhe066[[[60ffhmmmmrrrmmhf03(>;===;****=;>>>>>>>;=*%@+.... ..+@!!))|2kkkkxDGFMOOQQQQQQQQQQRRRRRRRRRRRRRQOLEt1|!'# .+$*;(/^^________^____________________[9gsyDDDyywwwwwBDDJLMOQQRRRRRRRRQOLDBuhfe06}}}[60fhhhmmmhhhff033((;-===;**&*=;>>>>>>;=*&$+.... .+++!!!!||ooCAEFMMOQQQQQQQQQQQRRRRRRRRRRRRRQOMExl1)@. .+${:((/^^[[}}[^^^^___________________[6gsCEJEGCDywwsuwBDGJLMOQQRRRRRRQOLGDwrhee066}[[60dhhhhfff0063(((>>;===-:cyGLMMOOOOQQQQQQQQRRR", "RRRRRRQMJCyyyyyttng96[//>-*&&*=-;>>>;-=*&$++... ..++!!!77ppzzFMOOOQQRQQQQQQQQQRRRRRRSRRRRRQOMLCtc1)+. .+!{>;-=~==-:ixGJMMMOOQQQQRQRRRRRR", "RRRRRRQMLECCCCCDysgd6[//;=*&&&*=;;;;-*&%$@+... ...+@@!!77pzzFIOOOQQQQRQQQQQQQRRRRRRSRRRRRQOOLExi:~)+. ..@)1lllijgdddd066[[^^_________________[0gyEMOOOMLJGDBwsswBDDGGEJLMOQQQOOLJDwumhee866}6600dddd0663((>>;;-=***=-:bixELLMMOOQQRRRRRRRRRR", "RRRRRRQOLJEGGEGCysg9[[/>;*&%%%&*=--=*&%$@+.... ..+@@!!!77pzFIOOOOQQQQQQQQQQQRRRRRRSSRRRRQQOMJCtb:~$+. .+!2kxCCCyttsnngd96[[^________________}[9sCLOQQQOMLEDywsuswwBBByDCJMMOOOMLGywrmhee066666099d9033((>>;;-==****=;:btCELLMMOOQRRRRRRRRRRR", "SSSRRQOMLJJEGGCDtn9[[//>=&%$$$%&***&&%$@++.... ..+@@$))||opzFIOOOQQQQQQQOOOQQRRRRRRSRRRRRQOMLExja<&@+. ..+!2oFMMLLECDytsgd3[[[________________[6dtEMOQQQQOLJCywsuuuuunnnntxELMMLLEDywrmhee006666699333(((>;;-==*****=;:3gtCELLLMOOQRRRRRRRRRRR", "SSSRROMLJGGGCDysn9[[^/>-*%@@+@$$%&&%$$@++.... ....+@%&*~22kAEFMOOOOQQQOOOOOOQQRRRRRSRSRRRQQOMFCtb:~$+.. .+!|oFOOQOOMLJGDtna96[[_______________[[6gtEMOQQQOOLJCywsrnmhhd999ajtCELLJGDywrmmee80666[66333/(>>;-===***==-;>(3iyCJJLLMMQQRRRRRRRRRRR", "SSRROMJECDDyttjg9[[^//;*%@+++++@@$$$@@+++.... .....+@%*=-:>;-======-;;>>(3asyGJLLLLMQQRRRRRRRRRSS", "SRQOFEDytsnngg9[[^^^/>=&@++....+++++++++..... .. .....++$&=;>(actCEJLLMMMOMMMLLLMOQRRRRRSRRRRRQOMMFClc<{@+.. .+!7INSSSSSRRROMFxtgd96[}}}______[///////33glxEFLLLJGywsghdd06[[[^^/[9jtCCCDDywurmhff0066[[[///>>;-=====-;>>(//[3gtCEJLLLLOQQRRRRRSRRSSS", "ROIExljggdd96[[[^^^^>-&$++.......+++++++...... ......+@%*;>((ajtCCEJLLLLLLLJJJLMOQRRRRRRRRRRQOMMFAtc<~$+.. ..+!7zNSSSSSSSSSQOFCtja9066}}}}}_[/////((>>((:bilkxxxytigdd0066[[/^^^^/3ajtyDDDyBwurmhhd006[[////>;;-===-;;>////[6dsDGJLLLLLOQRRRRRRSRSSSS", "IFClba336[[[[[__]^^>-&$++.........++++@++.............+@%*;(/39jtDCGGEJJJEGGCCELMOQRRRRRRRRRQOMFECxib<{$+.. .+!7pHSSSSSSSSSRROFAxigd9066}}}[[//(>;;;------<<<<1cccaa33333[[[/^^^^^^[9gttyyyyBywwummhd06[[////>;;----;>>//[[[3dnyCJLLLLLMOQRRRRRSRSSSSS", "Akla3([[[[[^__]]^^>;*$++..........++@!!!@++...........+@%=;//3aitDCCCCCDCDDyyyCJMQRRRRRRRRRQOMJExtjb:=&$+.. ..+@!pINSSSSSSSSRROOFAxtjgdd066}[[/(>;=********~~~~~~~<<::(((///////^^^^^/3ajsyyyDDDyywurnd96[[////>>;;;;;>(/([39dgntCELLLLLMOQQRRRRRRSSSSSR", "lca((/^^^____]]^^>;*$@+.........++@!)))))!@++.........+@%*;(/3aiyDDDDyyBwwtstyCLOQRRRRRRRRQMLECxtjb::=&@+.... ...+!|oINSSSSSSSRRRQOMMJECysnhd06[[/>;=*&%%%&&&&&****{{**~=-;>>((//////^^^^^[9gstyyDDDDDyBsng93[[////>>>>>>>((33agjstDCELLLLLMMOQRRRRRRSSSSRQO", "a3(//^^^]]]]]]^^>;*%@+.........+@$){22222{)$@++.......+@%*;>/3gsyDDDywwunnnisyELOQRRRRRRRQMFECxtjba(:=&$@+.........+@!|ozNSSSSSSRRRQQOOOMMLJECyshd93(>-*&%%$%%%&&&&*&*&&&&&**==-;>>>>////^^^^^[9gjtyDDCGGGDywsg96[///////(>>(((39gitxCGELLLLLMMMOQRRRRRRSSSSSOMF", "3((/^^^]]]]]]^^/;*%@+........+@$&~1<1lcc<<~{%@+........@%*;>(3gsyDDywsnmhhgntxEMQRRRRRRRQOLECxtiba3(:=&$@++.....++@$)2kzIRSSSSRRRRQOOOOQQQOOMLGysh93:-*&%$$$%%&&&********&*****=-;>>>///^^^^^^[3gjtyDCGGEGGDysg9[[///////////[39gtCEJLLMMMMMMMMOQRRRRRSSSSSSQMAx", "(//^^^^]]]]]^^/>=&$+.......+@$%*=::bbbcb::-~&$@+.......@%*->(3gsyyyBsnhdddgiyELOQRRRRRRRQMJCxtljba3(:-*%$@+++++@@%&~1kAIRSSSSSRRQQOOOQQRRRQQOMLCyia:;~*&%%%%%&&**=====********==-;>>>//^^^]]]^[3antyDCGEEGGDysd9[[[[[[[[///[[69gtCJMOOOQOOOOMOOQRRRRRSSSSSSRIAki", "//^^^^^]]]]]^/>-*%@+......+@$&~->((33aa3(:-=*%@+.......+$&=;(3gsyywsnhd09djtCJMOQRRRRRRROMExtiija33(>-~&%%$$$$%&*=-:lAIRRSSSRRRQOMMOQQRRRRRRQOMExia:-~*&&&&&&**=--;;;;;---====--;;>>/^^^]]]]]_^[9nsyDGGEEEGDwnd6[[[[[[[[[[[669gsDEMOQQRQQQQOOOQQRRRRSSSSSNNIzkca", "///^^^^^]]^^^/>-*%@+......+$&=;>(((333((>;-=&%@+.......+$&*->3aitssnhd069diyELOQRRRRRRRQOLExtija93((>;-=*&&&**=-;>(cxFORRRRRRQOOMMMOQQRRRRRRQQMExib:-=**&***==-;;>>>>>>>>>>;;;;>>>//^^]]]]]]]_^[9nsyCGGEEGCysg9[[[[[[6660600dgsyELOQRRRRRQQQQQQRRRRSSSSSPPHzo1b3", "//////^^^^^^//>-*%@+.....+@%~;>(/////((;-=~*&%@+.......+@%*-:(aninnd06669gtCJMOQRRRRRRRQOLCytjga33(/(>>;;--;;>>//3bxFOQRRRRQQOMFFFMOQRRRRRRRQOFCtc::-=~****=--;>>>>///////////////^^]]]]]]]]]__[9gsyCGGEGCytnd6[[[[60dfdhhdhmsyGLOQRRRRRRRQQQQRRRRRSSSNPKKv7|1::", "(///////[[[[(/(;=&%@+...+@%*->((/[///(;-**&&%$@+.......+@%*=;:agggd06[[39gtCLMOQRRRRRRQOMEDtiga33(/////>>>>/////3bxEMOQRRQQOMFECEFLOQQRRRRROMFAklc:-=~*****=-;>>>///^^^^^^^^^^^^^^]]]]]]]]]]]]^[9gsyCCGGCDtsd96[[[60dhmrrmmruwDJOQRRRRRRRRQQQQRRRRSSSNPKq54'!{~-", ">((((33aabbbaa3::~&$@+++@$&=:(333[[/(>-*&%%%$$@++......+@%*=;(aagdd3[[[39gtCLMOQQRRRRRQOLCyiga33[////////^^^^^[3btEFOQQQQOMFAxttxCFMOQQOOOIFAolc<<<~~*&&&**=-;>>//^^^]]]]]]]]]]]]]]]]]]]]]]]]]^[3gsyDCCCDtsgd06[660dmuwwwuwwBDGLOQRRRRRRRQQQQRRRRSSNPKqq5,,'+$&~", ":::abblxCCACxtib:<{%$@@@%*=:33aad333(:=&%$$$$$@@++.....+@%*=;:3ada33(/(39jtCJMMOQQRRQQOLGysga93[///^^^^^^^]^^[3btCFMOOOOMFAxijjjtxEFMMMIFAokk211~~~{&%%%%&**-;>/^^^^___]]]]]]_________]]]]]]]]^^[ajtyDyytsgd906600dnuwBBBBwByDJMQRRRRRRRRQQQQQRRRSNNHq5,,##.+@%&", "//^^______]]]]]__[[[[[^^_]]]]]^^^^[9gjtttsngd99000dhnuBDDDDBBBDGLOQRRRRRRQQQOOQQQRRNHv5,,### ..+$%", "//^_______]]]]]__[39999[[^_]]^^^^^^[3dgnnggd990090dhnsBDDDDDDBDDJMOQRRRRRQQOOMMOOQOOIv4,### ..+$%", "clxEMOQRRRRRROJx22{)&*=:agtxCCECCxtja:=~&&&&*****&%$@@@$%&*~=<<:::((((33dgityDGJLLLLLGDsg9[[^^^^^^^]]]]]_^[9gtCEJFFFECxtja9936639aaab<1{{))))))))))%%%%&*=;>//^_________]]]__[9ajjjg93[^^^^^^^^^/[39dd99666609dhnswBDGGGDDDDGJMOQQRRRQOMLLLLMMMMzp4'## ..+$%", "clxEMQRRRSSRROzo||){{=:agtCEJLLJECxlb::==~~=--;;;-=*&&%&&*~~~<<<:::(((33dgnstyyCGEEGCynd6[[^^^^]]]]]]]__^[3gtxEEEEACxtjga9996663333(::=~~{{{{{{{{{{{{*~=;>(//____}______]]__[6ajttttj9[[^^^^^^^^/[[6366[[[[660dgnsBDDGGGDDDDGLMQQQQQQOMLEGCCCECoo7'## ..+$%", "ackEMQRRSSSRRIzo2{{{~::gtCELMMMLLECtb::;--;;;>>>>>>;-=~~~~~~~~1<<::((333dggnnswyDDDysnd6[[___]]]]]]]___[[3aitCAACxtljbaa9999996[[[(/(>>;;---<<<::<:-:::((/[[}}}}}}_____]_]__[9nsyyytja3[^^^^^^^^/[[[[[[[[[[60dhnuwBBDGGGDDDCGLMOQQQQOLECyttttll2)!'. ..@$&", "3alAMQRRRRRRIzo22{{~::btCJLMMMMMLECtb:::>>>>>////^//>>;;--=~~~11<::33339dghggnsswwsng96[____]]]]_____[[[3ajtxxCxklcbaa9dddddd006[[///////((333aa93333333[[}}}}}}}}_____]]__[[djtyyysnd6[^^^^^^^^^[[[[[[[[[[60dhnuuwBDDDDDDDGJLMOQQOMLGDsjgaac1{)++.. ...@%&", "(3jxFOQRRRROIAk2~~<::btCJMMOOMMMMEClc:(>>>////^^^^^^///>>;-=~~11<::33399dddhhgnnsnng96[[^___]]___^[[[[69agittkkllcbaaaddhhhhhd06[[^^^^^[[[69dddhddd00066666}}}}}}}____]]]__[6dnswwsnh9[[^^^^^^^^[[[[[[[[[[[60dhmuuwBBBDDDDDGJLMOOOMLGyja93(:~{!@+.. ..+@%*", "/3atEMOQQOOFAk1<<::abtCJMOOOOOMMLExlb:(((////^^^]]]^^^///>:-<111cba3999ddddhhhnnngg96[[________[[[699dgggjiiliccc:aadddhmmnmhd0[[[[[_[}[660dhmmmmhhfee0008888}}}}____]]]]__[6dgnnngd06[__]^^^^^^[[[[[[[[[[60dhmrruuuwwBByyDGJLMMMMLGyja3((-*%$++.. ..+@&=", "/(3jxJMMMMExlc::((3aiCJMOOOOOOMMFExia:(((///^^^^]]]__^^//((:<<", "^^[[[999933[/[[[6dsDLOQQRQQQOMLJCtja3((/////^^^]]]_____^^[(((:abnitwyyDCGEJJJJGDysnhdf006600dmsyCGEECylcc:::::300fhmrrrrmhe06}}___}}}60fhmuuwwurmhfee088888}}}____]]]]]]____}}}}}}}____]]]]]^[60dhhdd0000dhrswwurmheee0ddntDGJJECyja3[/>-&$@+... ...+@%*;(/", "^^^[[[[[[[^^^[[6dnyJMQQRRRQQOMLExlba3((////^^^^]]]]]]__^^[/(33agisyyDGEJLLMMMMLGDwsnhhfffefhmsyCGEECxlcb:::(3300femmrrmmhe06}}_____}}60fhmuuwuurmfee00086}}}}}___]]]]]]]____}}}}}}_____]]]]_^[0dhmmhdd0ddhnwBBwwrmhe0000dntCGJJEDtj93[/>-&$@+..... .....+@&=>//[", "[^^^^[[[_^^___}0hBGMQQRRRRQQOMLExib33(////^^^^]]]]]]]__^^[/(3aansyDCGJLLMOOOOOMJCywurrmmhhhhnsyDCCCxlca::(33660eemmmrmmhe06}_______}}60fhmuuuurmhf000666}}}}}____]]]]]]]____}}}}}______]]]__[60hmmmmhdddhuwyDyBumhe06660dntCEJEGytg93[//;*&@++........+@$*->/[[[", "[[[^^^_______}6duDLOQRRRRRQQOMJCtja3(////^^^^]]]_]]]]___^//(3agsyDCGJLLMOOQQQOMLGDBwwwurrmmmnswyyytiba33336660eemmrrrmme06}}________}}0dhmuuuurhd00666}}}}}}____]]]]]]]]___}}}}}_______]___[[6dhmmmmhhhmuwyDDDBumf06}}60dsyGEJECytg93[//>;*%$@+++++++@@%*;(/[[66", "[[[/^^______}6fmBJOQRRRRRRQOMLGxia3((///^^^^^_____]]]___^^/(3aitDGJJJLLMOOQQQOMLGDDyyBwwuurmniiiicba:33336660eemmrrrrmhf06}_________}}0fhmuuuumhf0066}}}}}}____]]]]]]]]____}}}}____________[}0fhmmmmmmnuwDCGGDBrh06}}[69gtCEJJECytg93[[//>;*&%$@@@@@@$&*;>/[[666", "(////^___}}}60hwGLQRRRRRRRQOLECtg93(///^^^^^_____]]]]]]]^^/(3atDGJJLLLLMOOQQQOMLGGCDDDDBwunnggaaa::(((3[[660eemruuwuumhf06}_________}}00hhnrrnhd006}}}}}}}_____]]]]]]]_____}}}}__________[[[60fhmmmmmnsyDGJJGDwnd6}}_[69jyCEJJECytja9[[^^/>;=&&%$@@$$&*;>//[6666", "(((/[[}}}}60fmuDLOQRRRRRRQOLECtg93(///^^^^^______]]]]]]]^^/(3btCJLLLLLLMOOQQQOMJJGGGGGDDBwngaa::::((([[[660efmrwBBBBwrh06[[________}}60dhhnnnhd0066}}}}}}}____]]]]]]]]____}}}}}_______^[[[[600fhmmmmrswDELLLJDwh06}_[[6atxEEJEECytjg9[[^^//>-*&%%$$$%*=>///[6663", ":>((/[[600dhuwDJOQRRRRRRQOMJDtg93(/////^^^]______]]]]]]]^^//3cxGJLLLLLLLMOOOOMLJJGGJJGGDysic:::::((([[[660ehmuwBDDDywnh06[[________}}60dhhnnhhd0666}}}}}}}____]]]]]]]____}}}}}}}____[[[[[6600fhhmmruswDELMMLJCsh0[[^[[3gtCEEEEGCxttga9[[^//>;*&%$$$%&*;>/^/[[333", ";;>([66dhnwyDJLOQRRRRRRRQOLCtn93(//////^^^]_____]]]]]]]]^///3bxGJLLLLLLLMOOOOMJJGGGJJGGDBic<<:::((([[[60efhruBDGGGDysnd6[[[________}[60ddhhhhd0066}}}}}}}_____]]]]]]____}}}}}}}}}_}[[[6999ddhhhmruuwBDELMOOMLGwg0[[^[[9jtCEEEEECCxtjg9[[///;=*%$$$$%&=>//^[[[[((", ";>(/[6dnwDGLMOQQRRRRRRRRQMJDjd3[///////^^^]]____]]]]]]]^^//((bxGJLLLLLLLMMOMMLJGCCGGGGDysic<:::((/[[660fhmuwDDGJJGDysg9[[[_________}}60ddhhhdd0666}}}}}}}____]]]]]]____}}}}}}}}}}}6699ggnnnsssswwwyyDELOOQQOMEyn9[[[[39jtxCCCCCCCxtsg93[(/>-*%$@@@$&*->/^^^[///(", ">///6dnyGLOQQRRRRRRRRRRRQMEyg93(/((/////^^]_____]]]]]]]^^//((cxELLLLLLLMMOOMLJGDDDDDDDytic<::>(//[[60fhmuwBDGJJJJGysg9[[[__________}}00ddhhdd006666}}}}}}____]]]]]____}}}}}}}}}}6609gnstyyDDDCDDDCGEJLOQQQQQOLDsd3[[[3ajtxxCCCCCCxyig93((>-*%$@@@$%&=>/^^^^^^///", "///[0myJMQRRRRRRRRRRRRRRQLGtg3(/(>>////^^^]_____]]]]]]^^//>>:lxJLMMMMMMMOOOMJGDwssswtttic<::((/[[[6dhmuwBDGJJLLJGDwn9[[[__________}}600dhhhdd00066666}}}}____]]]]____}}}}}}}}}}609dnstDCEJJLLLLLLLLMMOQQRRRQOMGtg93339ajittxxxCCCxtib33(;=*%$@@@@$&=;>/^^^^^^^//", "^^[6hwJMQRRRRRRRRRRRRRRQQMCta3(((>(////^^]_______]]]]]^^/>>>:lCLMOOMOOOOOOOLGDtingniiiicc::((/[[60dhuwBDGGJJLLJGCynd6[[___________}}60ffhhfdf00006666}}}_____]]]]____}}}}}}}}6600dnsyCELMMOOOOOOOOOOQQRRRRRRQMJyia93399gjjiltxxCxysja::-~&%$@@@@$&*;>/^^^^^^^^^^", "^^[dsGMQRRRRRRRRRRRRRRRQOLCta3((((///^^^__________]]]]^//>;:bkEMOOOOOOQQQOMJCticaaacciccb:3([[[60hnwyDGJJLLLLJGDysd6[[______]____}}60fdhhhfff00000088}}}_____]]]____}}}}}}}66600dnsyCJMMOQQQRQQQQQQQQRRRRRRRQMJxia999999aaajityyytib:<~{%%@@@@@$&*;>/^^^^^^^^^^^", "_[6nCMQRRRRRRRRRRRRRRRRQOLCtb93((((//^^____________]]]^/>;;-ckFMOOOQQQQQQOMExl1<:::ccccba336[60dhsyCJJLLLLLLJGDysg9[[____________}}60ffhhhfffe0000086}}______]]______}}}}}6000dhnsyCJMOQQRRRRRRRRRRRRRRRRRRRQMExja933333339ajistiib<<~{%$@@@@@$&*;>/^^^^^^^^^]]]", "[[gCLQRRRRRRRSSSSRRRRRRQMExtga99333[[[[____}}______]]^^/>;-<1kFMOOOQQQQQOOFAk21<<::acccgad9099hnwDGLMOOOMMLJGDBwnd0[[___________}}60efhhhhffee008086}}_____]]]_______}}}6600dhnstyCJMOQQRRRRRRRRRRRRRRRRRRRQOLCta93333[[3333abjjbb<1{)$@@@@@@$&*->/^^^^^^^^^^]]]", "[gyLQRRRRRRSSSSSSRRRRRQOLExtjbggggad966[}}}}}}_____]]^^/;-==1kEMMOOOOQQOOMzo211<:::aagggggddhnsyCJMOOQQOOMLJGDwuhd6[[__________}}}00ehhhhhfeee0806}}}}__^^^]]]]______}}600dhnssyDEJMOQQRRRRRRRRRRRRRRRRRRRROMEtb933(///////3333a:<~{!@@+++@@$&*->/^^^^^^//^^^]]]", "atEORRRSRRSSSSSRRRSRRRQMJCytiiitstsjndd0066}}}______]^//;-==//^^^^/////^^]]]", "jCMQRRSRRSSSSRRRRSRRRQOLExttittyyDDytsnhdd006}_____]]^//>-==////^^^^^[[[60dgnstyCELMOQQRRRRRSRSRRRRRRQQQQQOOMFCtba3((((>>(//////(:={)@++..++@$%*->>/^^^//>>>//^^]]]", "xJORRRSRSSSRRRRRRRRRQOMExttistyDCCCCCyyssnhd06}____]^^//>;-<>>;;>>///^^^[[[9dgnstyDCELMOQRRRSSSSSSSRRRRRRQQOMMLJCxlba::::::;>>(////(>-*%@++..++@$%*->>//^///>>>>>/^]]]^", "CMQRRSRRRRRRRRRRRRRQOMExtjnnistyDCGGGCDyywshd6[___^^^///>;-<>>;;-;;;>///^^[[[9gnsyDCCGJLMOQRRSSSSSSSSSSRRRRQQOMLGCylccc:<<<<<-;;>/////>;~&$++...+@@%*->>//^//>>;--;>/^^]__", "EMQRRRRRRRRRRRRRRRQOLEDsnggdgnswyDGGGGGGCDysg06[^^^^^///(>:::cityyDDyytic1<=-;>(/36660dhnsyDGLMOQQRRRRRQQOLGywsnggd9966666}}}}}}8800066[[[////>>>;;----;;>(///^^[[9gstDCGGJLMOQRRSSSSSSSSSSSSRRRRQOMLGDtic<1111111<-->>/////>-*%@++..+@@%*->>/^^//>>-===;>/^]]_[", "JMQRRRRRRRRRRRRRRQOMJDtndd0ddhnuwyDCGGGGGCDynd6[^^^^/////(((abittyyyttic<<~=-;>(/[[6600dhnwyGJLMOQRRRRRQOMEDwnnggdd99666666}}}}}}}}}}[[////(>>;;;-----;>>/////[[[6dntyCGJLLMOQRSSSSSSSSSSSSSSRRRRQOMJCyic<1222|221<<:>//////>-*%@++++@$%*->>/^^^//>-***=;>^]]__[", "JMQRRRRRRRRRRRRRQQOLGyshd0000ddmmuwyDGGGJECysg9[[^^^/////((3agistwwssic<<~~=->(//[[}}660dhswDGJLOQQRRRQQMLCtngdddd999666666}}}_____[[///>>>>;;;-----;>>/////^/[[[6dnsyCEJLMOQRSSSSSSSSSSSSSSSRRRRQOMJDtic122|oook1<:(///////>-*&$@@@@$%*=>>/^^^//>;=***=;/^]]_^[", "JMOQRRRRRRRRRRRQQOMJCwnd0000000fhmrwBDGGJJGDtnd6[[[[[[[[[339agissssincc<~~~=;>(/[[}}}}660dgswyGJMOQRRQQOLCtnd9909999966666[}_____^^//(>>;;;;;;----;;>///^^^^^^[[[0dgsyDGLMOQRSSSNNNSSSSSSSSSSRRRRQOMJDti112|ooooklb((/^^^^//>;-*&%$$%&*->>/^^^^//>-****=>/^]]_[[", "ELOQQQRRRRRRRRRQQOLEDtnh00000000fhmuwBDGJJGDynd9[[[[[[66639agiisssinga:<~**=;>//[}}}}}}660dnstDGLMQQQQOLCtg96[[[66366[[[[[[___]^^//>>;------;;;;;>>>//^^^^^^^^[[[60hntyCLMORSSNNNNNSSSSSSSSSRRRRRQOLExli1122kokklca3/^^^^^^//>;-=*&&*=->//^^^^//>;-***=;>/]]__[[", "ELMOOQQQQQQQRRQQQOLECtsgdd000000ffhmuwDGGJGDysg99660999ddagjisttsinga:<~{{*-;(/[[}}}}}}}60dhnsyCJMOOOOLCtg9[[[[[[[[[[[[[[[^_^^^^/>;;-=***=-;;>>>>///^^^]]]__^_}}}60dgsyGLOQSSNNNNNNSSSSSSSSRRRRRRQOLCxlcc<1lllllba3[^^^_^^^^///>;;---;>//^^^^^//>;-==-;>/^]]__[6", "CELLMMMMOOQQQRQQQOLECysngddddddddfhmuwDDGGGDysngdgggnnnnniistyytsngaa:~{&{~->//}}}}}}}}}00dhnwyCELMMMFAtb3((////[[[[[[[[/^^^///>;-=******=;;>>///^^^^]]]_____}}}}60dgsyEMOSNNNNNNNSSSSSSSRRRRRRRQOLExlibbbbbccbb93[[^___]^^^^^////>>>//^^^^[[[//>;;;;>>/^]]___[6", "DGJJJJJLLOOQQQQQQOLJGDtsnngnnnnnnnmuuwyDGGGDyssnnsswttttttyxCCCxtiga:<{%%&~;(/[}}}}}}}}60fhnswyCELLMFAxl::>>>>>(((((((/////>>>;-=*&&&&**=;>///^^^^^]]_____}[[}}6600hsyCLOQSNNNNNNSSSSSSSRRRRRRQOMLECticbaaaaaa933[[[^____]]^^^^^^^///^^^[[[[[[/(>>>>>//^]]]___}6", "yDDGGGGJLMOQQQQQOMLJGCytsssstyyywwwwwyDDGGCDyywwyyDDCDCDDCCEEEECxtcb<{)%%&~;(/}}}}}}}}800fmuBDCEJLLLFAk1<--------;:::::::;;;-==**&&&&**->>//^^^^]]]___^[[[6600000dhnyCLMORSNNNNNSSSSSRRRRRRRQOOLJGxxtijgaa99933[[[[[____________]]^^^^[[60dd063(((>//^^]]]____}6", "wByDDDDGJLOOQQQOOMLJGCytstyDGGGGCDyyyyDDGGCDDyyDDGEEEEGGGGELLMLJCxic~))$%&=>/[}}}}}88880ehuBDGJLMMMMFAk11=========<<<<--======******=-;>//^^_________[[[09dhhhhhhnsyGLMORSSSSNSSSSSRRRRQQQOOMLECDxytttsigga993[[[[[_________________[[0dgusnnd3((///^^]]]_____}6", "uwwBBBDDGLMOOOOMLLJEGCyttyCELLLLJEGDDDDDCCDDDDDCGJLLLJEGGEJLMMMMJCk1{)!$%{->/[}}}8888880fmwDGLLMOOOOMAok1<======<<<<<<111<<=------;;>(//^^__________[[9answtwwwwwyDGLMOQRRSSSSSSSRRQQQOOMLLECDytttyxDDxytijgd93[[[[[_______________[60hsByDysnd3(//^^]]_______}6", "muwwBBDDGJLLMLLLJEGCDyttyCELMOOMLLJGCDDDCDDDDDGGJLLLLJEGGGJMMOOOLAk2|!!!%*;(/[}}6688880efuyGLMOQQQQOOFAkc<<::::::>>((////^__}}_______[[[9ntDCGEEEGGGJLLOOQQRRRRSRRRRQOMMLJGCDytsiiisyDGEEGCCytjga996[[[[___[[[[[[}}_}}6dmwDGJGCysg33/^^]_________}}", "mruuwBBDDGJJJGGCCDDyysssyCJMOOOOMLJGCDDCDGGGGGGJLLLLLJGCCCELMOOOMFo|!!!!)~;([[}}68888800hsDJMOQQRRRROOFCtca3333aacitkxCCxkiba33[[[[[}}}}}}}______[[6ajxGLLMOOOMMMOOOQQQQQQRRQQQOMMFECxtsnnggagjiyCELLMLLECytsngd99[[[[[[[[66666}}}6dmwDJLLLECtg93[^^__________}}", "hmruuwBBDDDDDDBBwwwssnnstCLMOOOOMLEGCDDCGGGGGGJJLLLLJGDyyDCLMOQOOFA77!!!&=>([[}688866660hwCLOQQRRRRRROMJCwngdddgitxCEFFFECxig966[[}}}}}}}}}}____[[3ajxEMOQQQQQQQQQQQQQQQQQQQOMMLECxtiga993399gixGFMOOOOMLJGCytjng9966[6660dddd0000fhuDJLMMLJCtg93[^^___________}", "fhrruuwBBBBBwwuuumnnhhhnwCJMOOMMLEGCDDDCGGGGGJJJLLLJGDywttCEMOOOOIzp7!!){<((66600086}}60hyGLOQRRRRRRRROMJDysnnnswyGJLMMMLECtnd0066}}}}}}}}}}}__[[3aixEMOQRRRRRRRRRRRRQQQQOOMLLGCytjg93[[[[[3aixEMOQQQQOOMLJECytsjgd9999ddgnnnmhdfdhuyGLOOOMJDla3[^^____________}", "fhmrruwwBBBwuummhhhhddhnsyGLLLLJECyyyyDDGGGGGJJJJJJGDyssnsyEMOOOOIzp77!)~:(360000006}66dnyJMQQRRRRRRRRQOLGDBwsswyDGLLMMLLGDsgd06666}}}}}}}}}}}}66ajtAFOQRRRRRRRRRRRRRQQQOOMLJCytjg93[[[//[3aiCFOQRRRRQQOOMLJECytsjggdggnswByBwummmuBGLMOOOLExia3[^^_____________", "fdhmruwByyBBurmhfff000ddnsyCGGCxytssswyDGGGGGGGJJJJDywnggntCFOOOOIIpp7|21:addhhhhf00660hwCLOQQRRRRRRRRQOLJDBwwuwBDCJLLLJGDwnd006666}}}}}}}}}}}60dgtxEMORSSSRRRRRRRRRRQQQOMLJGysnd9[[////((alCMORRRRRRRQQOMMLJECysjnggnswyDCGDDBwwwBDJMOQQOLGtg33^^_________]]___", "0fhruByDGGDDwumhd0006600dgnstssnnggnswyDGGGGGGGGGGDDwngddgtCJMOOOIIvpp721innssuurmhd00hsDJOQQRRRRRRRRRQOLJDBwuuuuwyDGEEGDwnh00066888}}}}}}}}6600gjxCFINNSSSSRRRRRRRRRQQOOMLGDynd93(/(>>::blAIRSSSSRRRRQOOMMFJECytsnnnstDCEJJJJGDDDGJMOQQQOLCta3[^^______]]]]]^^^", "fhmuyDGJLLJGDwnhd066[[[[6699999999dgnsyDGGGDDDDDDDywuhd99aixEMOOIIIzppookyyDDDDDyysnnnsyEMQQRRRRRRRRRRQOLGDwurmmmuwyDDDDysnd000066888888888800dhntxEFINNNSSSSRRRRRRRQQQOOMLGDsgd3((:--=<>;>>(", "yCJMQQRRQQOLGysh06[[^^^^_______[[60dnswyBBwurmmhhd006[[^/(3btCAzzzzAAzFMOORRRRRRRQOMMMMOQRRRRRRRRRRRQOMJDBumhfffdhsyCGGGCDtsnhd006686000effhmuwyDCJLMOOOOOMLLLLLMMOOOOMMLJCyib::<~{{||pzHNNSSSSSSSRRROMFAzAFEECxtsnswyCJLLMMMMMMMOQQRRRRRQOEtb3(//^^^^^//>;==-:(", "GLOQRRRRRQOLGysh06[^^^^^_^[[[[[[600hnuuwwwumhff0066}___^//(aikooooooAEFOQRRRRRRRRRQQOOQQQRRRRRRRRRQQQOMJDBumhffdhnyCEJJJGCysndd066[[[6660fhmuwyCGJLMMOOOMFJGCCCGJJLLLLLLECxiba:<~~{||pzHNSSSSSSSSSRRQOFAAAAAEECCtssstyGEJLLLMMMMMOQQRRRRRRQMCia3(//////>;=*&*=::", "MOQRRRRRRQMJDwnd0[[^^^^^[[3999990dhhmuuuurmhf006}}____]^//(:<1lkookkAFFORRRRSRRRRRRQQQQQRRRRRRRQRRQQQOLGDwumhdffmsyGJLLJECysgd333(//((336ddmsyCGJLMMMOMMFECxywwyyDCGGGGCxtja::<<~22ozINNSSSSSSSSSRRRQMFAooAFFFECytssyDCGJJJJLLLLLOQQRRRRRRQOFxc::((>>>;-*&%%%~>:<11222kkxEMORRRSRSSRRRRRQQQRRRRRRQQQQQQQQOLJDwumhddhnsDGJJEECxlca::::;;;;::((3aiwDELLMMOMMLLEDywsnnnstwyyyttjaa3::<<12ozIONSSSSSSSSSSSRROFAoooAFFFJExtttyDDGGGGGGGGJLMOQRRRRRRRQMAk1<::>;;=&%$@@${1k", "QRRRRRRQOMGysg96[[[//[3btxCEECDywwuurrmmhee0}}_____]]]]^/>;--<1111llxAMORRRSSSSRRRRRRRRRRRRRQQQQQQQQQOLJDwumhfddgsyDCCDxlcc<<==~******~=<:ciDELMOOOOMMLJCywsnhdddgggggga33(:--<11kAINSSSSSSSSSSSRRRQOEoooozFMMMJCyttyyDDDDDDDDDGJLOQRRRRRRRROFAk1<:--~&%$@@@${2o", "OQQRRRQOLCtng96[[[//(3bxELMMMLJGDywuummhe00}}____]]]]]]^/>;--=<111clkAFOQRRSRSSRRRRRRRRRRRRRQQQQQQQQOOLGDwnhdddddgistiicb<<~~*&&&%%%%&{~<;--=<1kAIORSSSSSSSSSSSRRRQMAooopzIOOMLECyyyyyyBBwwwwBBDJMQRRRRRRRRROFok1<==*&$@++@!{2o", "MOOOOOFExig96[[[///(3btFMQQQQOMLGDBwurhee0}}_____]]]]]^//>;;--<<<;--==<1kAIORSSSSSSSSSRRSRRROFoo7pzIIOOOMJCyytyBBwwuuruuwBGLORRRRRRRRROMAk1<~*&%@@++@!{2k", "JEEEACklba3(//^^///(3lEMQRRRRQOLJDBwrmhe0}}_____]]]]]]^//>;;::<<::bclxEMQRRRRRRRRRRQQQQQRRQQQQOOOOOOMLGysgd063[((3333((>>;---==****==-;:clCLOQQQQQOMLJCysnhd633((/(((>>;-===<1kAIORRSSSSSSSSSRRSSRROzp77pvINRQOMLEyttssuurmmmmrrwDJOQRRRRRRRROLCk11{&%$@+++@${1l", "tttlicb::((////////(axFQRRRRRQOLJDBurme06}_____]]]]]]^^/>>::::::::bbjtAFOQRRRRRRRRQQQQQQQQQQOOMMMMLLJCysh96[[//(((((/////>>>>>>>>>>>((3alCLOQQQQQOMLJCysnhd66[///(((>;-=~~~11kAIORRRSSSSSSRSSRSSSSRIzpppvHNNRQQMLCyssnnnmhheeehmrBGMQRRRRRRRQMJCk1{)!@+++.++${1c", "icga::::>>(////////(axMQRRRRRQOLGDwumhe0}}_____]]]]]]^//>:::bbbb:::bblxEMOQRRRRRQQQOOQQQQQOOMLLJGGCCxtia93[///(((///////////^^^^^^^^/[9iCLOQQQQQOMLEDBsmd06[[///((((:-=~~~1koFOQRRRSSSSSSSSSSSSSSSSIzppvHHNRRQOMFCtjgdddffeeeeeehuDLOQRRRRRQOLGk22)@++....++$)~<", "caa:((>>>(//^^^^^^/[gxMQRRRRRQOLGBwrmee6}_____]]]]]]^^/>::ccllccb:::bclCFOQQRRRQQQOOOOOOOOMLJGCyttsijga3[/////((///^^^^^^^^^__]]]__^[9nyJMOQQQQOMLGDwnh006[[[//((((::<1122oAIORRSSSSSSSSSSSSSSSSSSSNHvvvHNSRRQOMExjg990000088880fmyJOQRRRRQOLCy12)@+.......+$)~<", "ica3((((//^^^^^^^^^[gyMQRRRRRQMJDBurme86}______]]]]]^/(>:clkkklc<<:::bixEMOQQRQQQOMMMMMMMLJGDtiggdd9933//////>>///^^_______________[6gtGLOQQQOOLJCysg006[[[[[/((3abc112oozIIRSSSSSSSSSSSSSSSSSSSSSNNHHHHNNSRRQOLCtg96[[[}}}}}}660hBGMOQQQOMJDtc1)@+.......++${11", "tiga3(///^^^]]]]__[6gyLOQRRRQOLJDwumhe06}______]]]]]^/>::1kzIIIzo22{{~=<:clALOOOOMLGxtttsssng96[[[[_^^_^^^^^^^///^^_________________[9jyELMMLJGysd0[[____^^^[[33blxAFIQNSSSSSSSSSSSSSSSSSSSSSSSSSSSSQNNNNSSSRRQOFxj9[[^^^^^_______}0hsyCCDtna::;-=*&$@@++@@$){2oFM", "MExta93[[[[[[[___}}6fnyGLMOMLJDBwurmee06}}______]]^//:<2ozIIIzoo|)){~<:bjxEMMMMLEytjngggd90[[[___________]^^^^^^^_____________]__[6gtCELLLEDwnd6[_____^^^[[33blxFMORSSSSSSSSSSSSSSSSSSSSSSSSSSSSRRONNNSSSSRRQMEta3[^^^^^^^^]]]___[0gsssiga::;;;;-=*&%$$$%&~2oFIO", "MFCtb93[[[[[[[}}}}}6fhuDJJLJGDBBurmmhe06}}______]^^/>:1ozIIHHIp7|)){~-::blxEFLECxtja999066[[[_____________]^^^^^]___________]]]__[9jyCEJJGDwnd6[^^^^^^^^^[33ajxAMORSSSSSSSSSSSSSSSSSSSSSSSSSSSSRROOOQSSSSRRRQMCl9[^^^//////^^^]]_[[9daaa::;;;>>>>>;-**&&&~1kAIOQ", "MECla3[[[[[[[[[}}}}60hrBDGGGDBwurrmhe006}}}}____^^/>:<2oIHNNHHv77!){~-((3aixCCCtjg99666[[[}}}}}}__________]^^^^]]__________]]]]_[3gtCEEEGCynd0[^^^^^^^^^[339blCFORSSSSSSSSSSSSSSSSSSSSSSSSSSSSSROOOORRSSRRRQOFxj3[^^//>>>>>//^^^^^/[3(::---;>>/////>;=**~=1kFOOQ", "FEtja3[[[[[[6666}}600fmuBDDBBwurrmhee0066}}}}___^//>:1kzINNNNHv47!){=;(((3ajlttja96[[[[[}}}}}}}6}[}_______^^^^^^]_________]]]]__[9jxEJJJCDsg96[/////////[33ajxEORRSSSSSSSSSSSSSSSSSSSSSSSSSSSSRQOOMOQRRRRRRQMEta[[^^/>;;--;>>//////>;;-==~=;>/^^^^//>-=*~~1oFOOO", "Axja3[[[[[66666666600emruwwuurrmmeee0066666}}__^^/(>:lAINNNNNHvv7!{~->//^[39aga99[[[}_[_[_}[6660666[[____^^^^^^^]]]_______]]]__[9jyEJLJECyia3(((>>>>(//((3abtAMQRSSSSSSSSSSSSSSSSSSSSSSSSSSSSRRQOOOOQRRRRRQMJxj9[^^//>;=**=-;>>>>>;-=*****-;>/^]]]^/>-***~2AFIOO", "tja3[[[[[399900666000ehmruurrmmheee006666666}}_^^//(bkFNNSNNNPHv7){=>//^^[[[366[[[[_____[[[660ddd906[[[^^^^^^^^^^]]_______]]__[3gtEJLLLExtja::-====-;>((3ablCFORRSSSSSSSSSSSSSSSSSSSSSSSSSSSSRRQOOOOQQRRQQOLxj9[[_^^/>-=***=-;>>;-**&&&**=;>/^]]]]^/>-*&{{2ozFFF", "ba3[/^[[[9dddd000000eehmrrrrmmheee0066666666}}_^^//3cCMRSSSNNPHv7){->/^^^^[[[[[[[_______[[69ddnnngd0[[[[//////^^^^]___________[atCFLMLJCxic<<~{{&{{~=<::bckAFORRSSSSSSSSSSSSSSSSSSSSSSSSSSSSRRRQQOOOOQQQOMLCsa6[__^^/>;=***-;;;;-**&&&&*=->/^]]]]]^/>=*&&{|oAAAA", ":(////[[9dgggdd0000eeemrrurrmmeee8088666686}}___^/(alFORSSSNNPHv7)~;(/^^____[__________[[[69gnsssng96[[////////^^^^^^^^______[9jxEFLLJCxlc11{)!!!!)){~11koAIORSSSSSSSSSSSSSSSSSSSSSSSSSSSSSRRRRQQOOOOOOOMJCtg9[[___]^/>;---;;;;-=*&&&&**-;>/^]]]]]^/>=&%%)||ookk", ";;>>///39dggghd0000eehruuuuurheee0006666866}}___^/3bxFORSSSSNPKv7|~:(/^^______________[[[39gjsttssga3[(/////////^^^^^[[[____[[alxEEFECkl12{)!!!+'+!!!||ozIINSSSSSSSSSSSSSSSSSSSSSSSSSSSSSRRRRRRQQQOMMLLLEDsg9[____]]]^//>>>>>>;-**&&&**-;>/^]]]]]]^/;*&%$))||221", "*~=;>(/3dhhhhdf000eeemuwBBBwrmfee8000666066}}__^^[9lAORSSSSSNPKv72<((/[[____________[[[[39ajjstttsga33(((>>>(////^^^[[[[[___[[ajtxCxxkl22{)!!++''''''4pvHPPNNSSSSSSSSSSSSSSSSSSSSSSSSRRRRRRRRRRQQQOLLEGCyjg6[____]]_]^^/////(>;-*&&&**-;>/^]]]]]]]^>-*%$$@!)){{{", "$%&~;>(6dhhhdfe000eemrwBDDDBumhffee80800006}}__^[3bxFORSSSSSNPHvo2<33[[[[[_^_______^[[[399gjtttttiga33((>>>>>(////^[333[[[__[[9ajiiic11{{)!!!+''''',45qKKPPPNSSSSSSSSSSSSSSSSSSSSSSRRRRRRRRRRRRRQOMLGDysn96[[___]]]__^^[[3993(:=*&&**-;>//^]]]]]]^/>=&$@@@@$))$$", "@@%&=>(0fffffe0088eemuBDGGDywuhhfeeee800806}}_[[3alAORRSSSSSNNHzolba36[[[[[^^^___^^[[[339aajjtttija93((>:>>>>>(///[33993[[^^^[[33a3:<~{{%)$!@+++'',5qqKKKPPPNSSSSSSSSSSSSSSSSSSSSSRRRRRRRRRRRRRRQOLEDwnd9[[___]]]____[[9gistib:=*&&*=;>>/^]]]__]]^/-&$@+++@@@@@@", "+@$&=(30fffee8008eemrBDGJJGDwrhffeeeee80806}}[[39jxFORSSSSSSSNHzolca9996[[[^^^^^^^^[[3333aabjjijjba3(::::;;>>>>(/(3aaaa3[[^^^^//(((;-~{&%%$$@++'',5qqKKKKPPPSSSSSSSSSSSSSSSSSSSSSRRRRQQQRRRRRRRRQOLGynd9[[___]]]____[9gsxGEEClc<~**=-;>/^^]]___]^/>*%@++++++++++", "+@$&;(600eee80888eemuBGJJJGDwnhdfeeee88008}}}[[3bxFORSSSSSSSSNIFAkiggd996[[^^//^^^^^//(3333aaaabaa:::---;;::>>>>((abjjja3[^^^^^//>>-=*&&&%%$@++',5qqKKKKPPPPSSSSSSSSSSSSSSSSSSSSRRRRQQQQRRRRRRRRQOJCsg9[[[___]_____69nyELMMLJxl1~~=-;>//^^]___]]^>=&@++.....++..", "+@%~:(6608e88888eehrwDGJJJCyshdf0000008086}}}[3alAORRSSSSSSSSROFAxljgg996[[///////^////(((33333:::<=~~~==-;;;;:::aclxtlb93//////(>;-=**&&%%$@@',5qqKKKKPPPPSSSSSSSSSSSSSSSSSSSSRRRRQOOOQRRRRRRRRQMJDsd9[[^_______}6dsDJMOOOOLCk11=-;>//^^]____]^/;&$++..........", "@$&;([668888888eeemuBDGJJGDwnd00000000686}}}[[3jxFQRSSSSRSRRRROFAxtjgd96[[[//>>>//////((((((((:;=~{&&{{~~<<<<-::>;-=**&&%%$!!45qqKKKKPPPPSSSSSSSSSSSSSSSSSSSSRRRRQOOOQQRRRRRRRRQMEysg9[[[______[6dsDJMOQQQOLGlc<-;>(/^^^_____]^>=%@+...........", "$&=>/[68888888eeehmuBDGJGDysh0066}}}}}}}}}}}[6atEORSSSSSSRRRRROLCyigd96[[[//>---;>>>>>>;;;;;;;-~&%$$$$){~11<<<11koAFFFAxia3(((((>>;-=~*&&%)!!45qKKKKPPPPPSSSSSSSSSSSSSSSSSSSSRRRRQOOOOQRRRRRRRRRQMJDwnd0[[[[_[[60gwCJMOQQQOMJxib::>(//^^______^/;&$+............", "&*;/[}6888888eeeehruBDGGDysh066}}}}}}}}}}__[[3jCMQRRSSSRRRRRRROFCtja96[[[^/>-*&**-;;;;-======*&%$@@++@!)|222222oAIIOOOFAtib:((((((>;-=~{{))74vKKKKKPPPPSSSSSSSSSSSSSSSSSSSSSRRRRQOMMOQRRRRRRRRRRQMLGywnh906660dgsyGLMOOQQOMLCtga(((///^^_____^^>=%@+..........++", "=;(/}}88888eeeeehmrwBDDDysnd06}}}}}}}}}}___[[atFORRSRSRRRRRRROMExia96[[[^^/>*&%%&&*===**&&&&&%%@@+++++!77ooooopzHNNRROOFClcb:33((((>;=~{{|7vvKKKKPPPPPSSSSSSSSSSSSSSSSSSSSSSRRRQMLLMOQRRRRRRRRRRQOMLECywsnggnswDGLMOOQQOOMLGynd3((///[^______^/;&$+.........+++@", ";(/[}68888eeeeeemmuwyDDysnd06}}}____}}_____[3jCMQRRRSRRRRRRRQOJCtg93[[[__^/-&%$$$%&&&&&%%$$$$$@+++..+''7pppppzHHNNSSRROFAklca333[//(:-~2|pvHKKKKPPPPPSSSSSSSSSSSSSSSSSSSSRRRRQQMLLLOQRRRRRRRRRRRQQOMLLJGCDyyDGJLMOOQQQOOMLGynd6[/////[[_}___^/>*%@+....++++++@@$", "(/[[60888eeeeehhmruwyyBsnh06[}_____}}}}___[[9tEORRRRRRRRRRQQOLExia3[[[__^^>=&$@@@$%%%%$@@@@@@+++....''4vvzzzvHHNNSSSSROMExlcaa36[[((:<2|pvKKKPPPPPPPSSSSSSSSSSSSSSSSSSSSSRRRRQOLJJLOQRRRRSSRRRRRRQQQQOOMLLLLLMOQQQQQQOOLJCBnd6[//////[}}____^/-&@+...++@@@@$$$%&", "/[660eeeeeehhmmmmruwwwsnh066}_____}}}}}}__[3gxMQRRRRRRRRQQQOMJDib3[[[[^_^/>*%$@@@@$$$$@+++++++......'44vvIIHHHPNSSSSSRQMFxlca96[[[((:1opvKKKKPPPPPSSSSSSSSSSSSSSSSSSSSSSRRRRQOLJJJMORRRRRSSRRRRRRRRRQQQQQQQQQQQRRRQQQOLJDwnd6[^^//////[}___^/>*%@+.+++!))%%%&&*=", "30dhhhfeefhmmmmmmussssnhd06}}____}}}66}}}[[9tEMQRRRRRRRQOOMMJCtja3[[^^_^^/>*%$@@@@@$@@++...........''4vvIIIHHNNNSSSSSROMAxia93[[[[(3ckpHKKKKPPPPPSSSSSSSSSSSSSSSSSSSSSSRRRRRQOLJGJMQRRRRRSSRRRRRRRRRRRRRRRRRRRRRRRQQOLJDwnd0[[^//>>>///___^^>=&@+++''!||{~***~=;", "gnsssurmmmmmrrrmnnnsnngd06}}____}}}60006669jxLQRRRRRRRQOOMLJGDsb3(/^^^_^^/;*&$@@@@@@+++...........+'7pzIIIIIHNNSSSSSRROFCtca3[[[[[3bkzHPKKKPPPPPSSSSSSSSSSSSSSSSSSSSSSSRRRRRQMLGGJLORRRSSSRRRRRRRRRRRRRRRRRRRRRRRRQQMJDBuh0}_^^/>;;;;(//^^^/;*$@++''47po21~~~=-:", "wyCCDDywuuuruurnnnnghd066}}}___}}}60df0069gtEOQRRRRRRQOMLLJJCxia3(/^^^^^^/>~&$@@@@+++............+'77pzIIIIIHNNSSSSRRQMExia3[[[[[[alAIHPPPPPPPPSSSSSSSSSSSSSSSSSSSSSSSSRRRRQOMJGCGLMQRRSSSSSSRRRRRRRRRRRRRRRRRRRRQQOLGBuhf6}_^^>;****->>//>;*%@@+''4vpzok1<==-::", "CJLLLJDywuuuurnhhddd0066}}____}}}600dddd0djCMQRRRRRRQQMLLLJECyia3(/^^^^^//>=&$@@++++.... ....''77ozFFFFIIINSSSSRRQOLClg9[[^^^[3bxFNPPPPPPPSSSSSSSSSSSSSSSSSSSSSSSSSRRRRRQOLJCDDEMORRSSSSSRRRRRRRRRRRRRRRRRRRRQQOLGDwrh0}}_^/;*&%$%&**==*&%@@++'4vvIIAkl<<<<::", "JLMMMLGDwsunnhhdd0066[}}______}}}600dddddnyJOQRRRRRRQOMLLJJGCtib((//^^^[[(:=&$@@+++.... ###''77zzFMMFFIINNSSSSRRQMEyja3[^^_^[9lFINNNPPNSSSSSSSSSSSSSSSSSSSSSSSSSSRRRRRRQOLGDyyxGFORSSSSSSSRRRSRRRRRRRRRRRRRQQOMJDBumf0}_^/>=&$@++@@$%%$@@@+@@7pzIIIAkl1<<:::", "JLMMLLGysnnhdd00666[}}________}}}}6000ddntEMQRRRRRRQOMLLJJJGCtc<:>(///[33a:<{$@+++.... ###'44pzFMMMMMFIIRSSSSRRROLCtg33/^^_^[axMRSSSNSSSSSSSSSSSSSSSSSSSSSSSSSSSSRRRRRRQOLGysiitCFIRSSSSSRRRRSSSRSSSRRRRRRQQOLJGDwume0}[//;*%@+....+++++++@@)|ozIIFAkc<<-:::", "CELLJGDtngd00666}}______________}}}6600hsCLORRRRRRRQMLLJJJGCxic<-;>//33bjll2|)!++.... ##,,5vvIIIOOMMMMOORSSSRRRQOLCtb33[[^^[3jAORSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSRRRRRQOLCyigbclkAFIQSSSRSRSSSSSSSSRRRRRQOMLJGDBwumf0}[/>-&@+...........+@${2oAFFAkcb:::>(3", "txCCCysnd9666[}}__________________}}}60gtEMQRRRRRRQOMLJEEGCDtic<=->/(3btCAAAo7!''.# ##,,55vHHNOOOOOOMOORRSSSSRRQOLCtja33[[[3axMQRSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSRRRRRQOLCwna:<122opzIIQRRSSSSSSSSSRRRQQMLGDDDBBBurhf6[(>=%@+... ....+@%~>(/(", "gjsssjnd9666}}}}___________________}}6dsCMQRRRRRRQOMLJGGGCDysc<<=->(3atAMMOIzp7'''#######,55qKPNNRRQOOOOOOORRSSSRRRQOMExlcba339jtEORSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSRRRRQOJDsb::=~{{)||opzIORSSSSSSSRRRQOLGDyyBBBBBwumd63(:~%@+... ....@%=:bbbba:(>>>////", "9ggnnngdd9666}}}}__________________}}6dtJOQRRRRRQQOLJGGCDDyysg:<-;>(3jCLOQQOIIp44'#####,,5qqKPNNSRRQQOOOOOQRRRRRRRRQOLExkklcbjtxEMQRSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSRRRQMJyia::=*&%))))||ozIQSSSSSSRRQMJCtsuuwBBBBBund03(:=&$+... ...+%=:(((((>>>>//^^^", "9dhgnnnnngd00066}}}}__}}}}}}}}}_}}}}60nCLQRRRRRQQOLJGGCDDDywsg::;:((atEMQQRROIzp74'',,,5qqKKPPSSSRRQQOMMOQQRRRRRRRQOMFAoookkkxCFMQRRSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSRQOJCsb:(;=*&%%$$)){2koFIRSSSRRQMFxsnhhnuwBBBBsnhd93:-~%$+... ...+$*;>>>>;;>>//^^^^", "0dhnswyyyysnhff0066}}}66006}}}}}}}}}0dwEMQRRRRQQOMLGGDDDDDyytna::>(3atJOQRRQQOMzpp7445qqKKKPNSSSSRRQOMMMOQQRRRRRRRQOLEAoo7oooAFMOQRRSSSSSSSSSSNNNNNNSSSSSSSSSSSSSSNNNNNNNOMJxib3((>-=*&%%%%{~~1loFIRRRRQOMExjgddhhuwwBwsngdda3:<~%$+.. ...+@&=;;;--;;>/^^__[", "hhnsBDGJJGGDwumhee00fffffee00686}660dnyLOQRRRQQOMJGDDDyyyDDyyib:(((3bxJMQQQQQOMFFAzpvvKKPPNSSSSSSRRQOMMMOQQRRRRRQQMLGxko777ooEMOQRRSSSNNPPPPPKKKKKKPPNNNNNHHIIIIHHHPKKKHIAxlba3(((>;-=~***~=-::ixFIQRRRRQMLCtjgddhgnsssssngggga:<~%@+.. ..+@%&*====-;>^^]_[[", "gnuwDGLMMMLJDBurmhhmmuuuurmhfe000000hsCLOQQQQQOLJGDByBByBDDCDtia:((3bxEMOQQQOOMMLLLMINNNSSSSSSSSSRRQOMMMOQQRRRRQQMJCyl2|!!77oALOQRRNNPKKKKKqqqqqqqqvvvppppo||||||77444447|1<(((/(>>>>;;;;::::actAMQRSSRRRQOMEyjgddddnnssssssssig:<)@+. ...+@%&&&&*=;/^^_[[[", "gnswDJMOOOOLJDBwuuuwBDDDDBwumhff00fhnyELOQQQOMLJDBwwuuuwBDCGGDlc:((3btEMOOOOOOOOOOOORRSSSSSSSSSSSRRQOMMMOQQRRRRQOLCyic1)!!!)|oFOOQNKqqqqqq5555,,,,,'!!)))))){{{{))!!'''+@){=;>>>>>>((((3333dgsyEMQRSSSSSRRRQMExjgd9ddgnnsstyyytic1)@.. ....+@$$%%%&=>/^^^[[9", "hhnsDJMOQQOMLJDDBBDDGJJJJGDBumhhfdhnsDJMOOOOMLGDBwurrrruwDGEECkc::(3btEMMOOOMMOOOQQQRRRSSSSSSSSSRRRRQOMMOQQRRRQQMJysa:~)@@@!|kEOOHqq555,,,,,######.++@$%%%%%%%%&%%$@+++++@%*=;>>>>((3abgggnnyCJOQRSSSSSSSSRRQMEtja999dgnswyDCDxsc2!+. ....++@$$$%&*;/^^^[69", "ddgsDJMQQQQOMJGDDDGJLMMMMJGDBsmhhhhnwCJMOOOMLGDBurmmhhmmuyGJJGkc<:::bxELMMMMMMOOQQQQRRRRSSSSSSSSRRRRQOMMOQQRRQQOLGwn9:{$@++@)2AINKq5,,######### ..+@$$$%%%%%&&&%%$@+++@@%*=-;>>>(:bitttwwyGLOQRRSSSSSSSSRRROLxtg999ddnswDCGCDt1)!. ....++@@@$$&*;/^^[[69"}; xscreensaver-5.36/hacks/images/toast.xpm000644 000767 000024 00000043613 07634066633 020400 0ustar00jwzstaff000000 000000 /* XPM */ static char * toast_xpm[] = { "128 128 91 1", " c None", ". c #744933", "+ c #A87B45", "@ c #AF8856", "# c #C9AB78", "$ c #DCCB86", "% c #EADA98", "& c #90673B", "* c #F5EAB1", "= c #D4B777", "- c #AC7443", "; c #C8A463", "> c #EDDE9C", ", c #E4D38F", "' c #9F6A3D", ") c #D8BE80", "! c #C09C6A", "~ c #B27B46", "{ c #EEE2A1", "] c #825538", "^ c #A37649", "/ c #A26F40", "( c #EBD493", "_ c #BC9668", ": c #E7C58D", "< c #8B5E33", "[ c #997246", "} c #D9C383", "| c #F3E5B3", "1 c #E4CC87", "2 c #BF8155", "3 c #9E6F4B", "4 c #916745", "5 c #BB8A5B", "6 c #F3E3A1", "7 c #8B5D3F", "8 c #F2DAA6", "9 c #BA7F54", "0 c #FEF6C6", "a c #E4CA93", "b c #AB7250", "c c #DFC488", "d c #E5D299", "e c #B17B53", "f c #E6DAA1", "g c #FBEFC1", "h c #EADEA6", "i c #EECD98", "j c #976243", "k c #EBD29E", "l c #986E48", "m c #F0DEA7", "n c #E4CE96", "o c #DFB980", "p c #A46E4B", "q c #D1AF6F", "r c #B08256", "s c #F3E2AB", "t c #97663C", "u c #FEEEB8", "v c #8F6240", "w c #BA9263", "x c #986645", "y c #ECDAA3", "z c #F3E6AB", "A c #ECD6A0", "B c #E5D69C", "C c #D7B982", "D c #EEE3AA", "E c #A77D56", "F c #F8EDBA", "G c #A5724C", "H c #CFAA7A", "I c #EACE9A", "J c #9F6A47", "K c #E0C590", "L c #B2926B", "M c #AE7650", "N c #E2BE85", "O c #DAC48D", "P c #FAECB3", "Q c #FAE6B5", "R c #986B3B", "S c #B67D54", "T c #DECB91", "U c #925E42", "V c #C7A473", "W c #D3B17C", "X c #DBBE89", "Y c #996A46", "Z c #AE8A62", "5SeMbGpppppppppbGGGGpppppp3JJYxx44&v&vvvvvvv&v&44vj&tRRRx''3''J''''''/ppppGGpGGGMGMM~M~e~~SSS2r92S2299292225555522222S9SSSSMeSe2", "2SMMbp333JJJJJppppppp/pppJxJxxxxvvvvvv<<<<ykKKX:oWWXcHc=c))=)}=q;c;=qH##q##;!;!_w55@~+-+-+~--~~-~9MSMS9SSSS2SSMeS", "S~bbbbjpJxJxJxJYYY3'Yl33/^Er@Z!L!!w!VWWCnBKkIkkIAnaacn}mAnm8qcCInaK)=IKKan)d}O}K)Kcn1}=1)a)=Cq=#V!_5@++--++--~---M9SS9SSSSSS9SS9", "SSSMbbpJxJxJxxtxx'JY3J3/^+@_!V!#VWCq#XkXaakkBInsymmmmmIysk(dc8ck=IIa:8:a}nCnAnATTkydInAdTyAaKKKKCW;;w_~+-/-+/--~MMMSMS2MSMMSMSe9", "9~M9bpppJpJJtxxt'Y3J3J3E+5_!V=WCCW#XWqCKKCakyTaknyByknamk}8AAnk8=A8Kaaacynk}}}CaOAknAm8A|dTOAdAaKaXXW;_wr---/----MMbSSSMSSSMSMSS", "229M-bbpG3YJjx'xx'Jl33^r5!#WWWa:aXNWXiXIkCAKTOymAmQmTnTQT8K8n:sCAkKaacoAQOnkTnOnTddBddPm*{hzsdA|mIIkC);;5++-/^---bMMMS2MMMSMSMMS", "29M~MbpJJpYtRjjttYYJG^E@!W=CWCICcaCcX:C8OIk8O8kQdmOAdymndmkOIC:Wmim:AO8Kc)=anAAycyddBdDdfs%fd|BmmnOAIc=;!5++^/^^----SbMSSMM9bSMS", "22S2Mbp'pY'R4txx&4JY/~5!qWHKK:IXakAK8kKiXAK|CDOmTDdsmT|nmaKIyKci:k8dIIKykTK)d=BkAkAmnfBDfshshhsmTfmya1c);wr/^/-//--MMMMSSMMMMMMM", "2S9S-bb'JYxt&vjjRRlGEZ5HqCNCK:IXcaa)aC)anAkOkBQnknhATFkkmKaaaKIKoKXOAAKXXdTIk=ndOaaBdhydfDsBDmhf*snByIacX;w~+/+///^-eMMbbMMbMM~M", "2S99MbpJ'JY&v4vv4t[r@_qCXCX:KciIAAannnAskdsAmXOOfABOmnB=k=OIOq8q8Kk=IOn8aXKTBOsdydmAyh|BDfhODBhhB,|BA%s1Xq_w++^^/GG-pbbMMbbMbMMM", "222S-bbJxxv4vvvjxpE@__HCiXI:KCicc)nAsdcO=IIT8sFI|An;TOCdyTOanaCiCCXTKdTKXCannTXnOAdyaBsAfh*DDBfffDhDhBhBc}#!@++^//^+bbbbMbbMbMMM", "2229b-p/xx4v4vvvl^@5!=o:KKoKic8oaqIc:k:annamBOmOOOnIhXnAOaOkKXIOcKXKnkn8OITKaOh}kd8kTynT|ddmQdmdfnBhdhymn==q!w~+^^^MpbbbMbbMbbMM", "2999Mb''tjvvv7vj3^Z!H;WNNIiINIn=AckaInkkkd8KykAdAO=aOXfnkXCQKCCXI#XkaTOknX)OIOk)A)daCAAafyDhABmdDmfhy*DdT}c}q_@~^bpbppbbbMMbbbbM", "29M9Mb'jj4v7777UYE@;;oo:Cqaaa)ii8NiNi::iKAAkafC8|XnOfIO=nOTanCHK;inXKaAdkTAATOd=sd8dsKknA=TkyABmdBDm|BBh1}1=X!wS+GGppbpbbbbbbbMb", "S9SMMb/xj4vvv7vvxEr!;HoNK:cIa(8(i8kaiW:iackCIIOWBCkWaCCXnCKX8c:qKkCTnmmTAXkOAkyyCaAnAKknmABdB8TkdysBsBdOnna}cHV@e/G-pbbbbbbMbbGM", "99SeMp''4vv7v774vEwVHHo:Niak(1()}((=8cooiIckaK8CIkIOAndVX#K:cCaXaWnddhXC8AOOdnO8mdKAkKaaaTnn8nhOTmBfAmdnKdacKC__@^GppbMbbbbbbbbp", "9SSMbpxx4777<7>(}86%6d}BT|Tyn}zz6O>Ana:c!wrE3xYxYJxJpJJppb", "9eSMbb3pYJJxJYJJJJpb22;;qNNIdcdOIkydCaaAACOCmmBD0nd,,{{BBmOhDFO|d|||dTDTBDDfFBFh*hQ8%6}PA%n1a8mQd$A6BBm6d,NCoWLE^Y4jjYxxJJJJppbb", "9eeMGb3plJ3xJY33/3pp~5;qNqo1>cBc%Kn}yAdInK=|mhyD|g%h66,6OmnBQhD|||TdBDhfgTDfBDgDh*z6%%((((($,1)mmAy}>$Oy>d)c;!r3lxY4UjxxJjJJpbbb", "eMebb^p3plJ3J3J3R3GGS2;oNokakdkBcannnTI8|d|dBBh*yP$>,,>{%nQdQdfhh|T*DsD}FDDFm|zhgP{(6%6zm(%PksdsnfdODz6mm8:o_w3Y47vUjvjjjJpjJpJp", "Se+MGppJJJxpxJJp/Gp^@5H;qNK}A$}nAkynk}TAm=nf||dD*Fz{P>%(%{hzf>DzBmB*z,>{>>BDmymffBzz6P%m)}c8}AdammB,gFm(m(=W!@^j4vv7vv4jxJJJpppp", "SeMG^bpppJJJJJppGGGe2wWHI}BATmmOnmaKdK8kDddmyh$D,z*{*>(%$B%>zzm>BB,6${{>$*szs|*s,zh6z(1}(86(=,(m11>F*0(1)A:WVEJUUv777v74xjJxJJpp", "eeeb^bppppJJJJ3J/G^r@!;;iaKdykkdnaKTdTTann|n)*F{,f{%{%>%%zP6,>%,$>%>>}%>6z>*zs|sdF|g*zz>z>m%8%6(,u=*$,6(,m=q_rxj77777vUvxxYxJppb", "eee+MbpppJ'JJJ'p'^~@wWWXcCdKdfkkKdkkIIIyBh|zfBDz|hP>P%%*66>1%>}nm%%,%%B%*hz|*D|hFz**Fz(mz}1(%11yQ|*Dz$d,AnkWVE37777777vv4jxxJJpJ", "9eMM^GpbpJJJpppp--~@!oWKiCTakdCOIOOOnTAkdsyh{FhFuB%$>*s>,1{%6%,y{O1)%z,{z>z|P*D**BF*DFBPmP16s%s1}ssmd1AAcIKCVEpjU7777777vjYxJJpb", "eeM^MppJJpppJJp//+5wHoooKIIBdd8dKTAITaKddB**h{u*zz*B*,>>z6Q1I>y>$%%,Q6>>*hFz**|*FfDhF*{QAPAQmQ)B1m86ym1AOnKXVZEl4v7U7]77vUxxJJpp", "eeeM^ppppJxJpJpp^+@_WWCCKkyXddnOAKKQCdaOOzBz{{{*}m{B*$DPzz6*(66h**(,16>f*hzFzFzhF**FDzh6AuTsmfdyA1a61$m}skOCV_E[4v<7<777vjxxJJpG", "9eMM+bppJJJJJp3'-rw;#WKaaKKdOkTdkTBOOTnT,>z,*{zPP066***z{6{${zz6z>(6>*6***zzg*DD,fh*F>Ps>PF$>sBym(61(m8)Aa8CCWLZEl777777UUxxxJpb", "eeMbbppp3'JJYJG^-2!;WiCakIn8kKaka:Kak)kdyT6{{*,66*{>%{z{*>z{6*{P*{,6P6{>z{***h*zFfDFf{ynP>sz$zyQy1%8%81y1QkkOC!!rEJ777]&7vjjJpJp", "SMMMGbpp'JYYJ3[^-5_HCWICanIaCCIN8KKnOITA$>666>P6666>>*h*F*{{{*>{z%*6>{>B{$*,*f*D*{z{FBP%{,sy>s%,(P%Q81n1n(ysOOWHw@E[&<<77jjxJJpb", "MMMbppJJYJJlpG+E@VVCXCXAakaa:aIXKakKOykd,,%*61(666>$hzz>hz>*{>Dz{6,{>%>{z*{{F{,$*{}>>BPKh6P%ss*,m16%{z%dAm6$n8CVVwrE[&$,>6%6z>h{*{B$**h{z*$6z%%hs{*{{D*>f,{>F%zs,zQ>,sAszy%>(B,>z$1y,|mT)C!HLE[&v7UvjxJJGG", "eMbbJp3xx'xYY+@_!WoCOKkaIkTXKK8WKaaXnAA8AP88*1,$6>%>6{F***F*,{zszns>%>A*{z{>z{,{*6,(>Q%%s$%BsPzudP(%B6z,%>(>myIkNW!Z^<<7vvjx'JGb", "SMbbppJ'xxJJGEw!VCCXITIOOOXaXN:kkXk}ncdk>1,6>%((P6%>*Fzf{f{{*{{{m%QAmm6%$f*{s,z$z6*$,,msm,,sPmA,*sz>},%%(1%%(1=C=C_Z[&v7Ujxxx'b^", "SMbbpppJxJYY^r_VCXCXa}AnaAkICK::aakIanycz61%6>>66**>6>*fz{{f%fD{,>>6n>,%*>,z}>>f%$>,6%=(6>fAn{%uhz>%1((1:(%,(=8:WV!@[v<(*$(>>>{{z{>*>*z{z>%%>((n,(66(6(>P>P{>6>6>,%A>y$zfsdyDFzQ161:,(1((ioWHH!Z^v<7vvjYJpGM", "MMMbppJxYxxlEZVCXakXdkkyakKkakaand8TkK888(1%%>%(>%>%%z{zzz{zz>%({z%%*6%*%%81$>f$,%>1%>,(%66B${*s{z6((6(6(118i:ioXWVr[vUUvvjxJpGM", "SMbppJJJJxYxE5!W=aAkkTndyTnOkAoIckka(aaAA>18>>6,%*{>%6>zzz6>>%66z>z%6,%68186(>>{,6%,>>A,(6>>P6%{%s6Q(i((%(c()cAHNHH@GvUUv44xJJpM", "MMbpJpJxYxJYELVXKTKnBd8kkkdTaak:Kaaaac,m8z1m>(66>6%*zz*Pzz{{6*P6{>P666((>,>6%s%,%*6>}>P{(,m%6{Bzz(m1(((661>{%mcC1q_5^4v7U4YxJpbM", "9~bbpJJJYYxJELVWTITkdnfdsmAnanKKa:cyAzAys{>(,66,%{,*z{{>z*,{6>{6>*66%>6{6>6z6P6}%(%(,(,,(I61,%6P>66>>%6((,*$,==k:WW_E4U7vv4xJpGM", "SMbbJpJxxYjJ+@VWdnOTTkdBdnyykykKaa))dBzdzh,z*%*zzzP**{z>,*P*u{zz{z>666666>6%>,}%>>((%,%8%%1m($%>8(,>>6%u%P*6,$,naWVwE47]vj4xJJbM", "SbbbpJJJJYj3^w#XayBndyhhBnAnda%cnay%Ads{fh*D,**z*{$>*{z>z{*{>z*zFz*{**>%z>*>6{*>c(6%(%1>c8%,,(%>>(66>Pz%>P,$,%dkoNHLZ[U]v4YxxpbM", "SMbbJJJxJYj3EL!XndnfmydmfAAsO8}8c)A}andB{fD*,Dfz*z{F*{{F***z*0D0{Df%{PzPPzP>>>(6P>6}>c6$(>i(%%1>%%*P0>{%{%,0BBOAcWVVE[v7Uv4YJJbM", "SMbbpJJJxxjJEwVXTddyhfDhyddm,amkByd$dnydhBD,*,{00*{D,D$F0gDhFF{*gg*0D*6{zg$$s>61P>6%>$%6%(1>(1>,{z6{z,zzf{*BmOT#:oH!E4U7v4YxJpGM", "M~bbbJJJYYxGr_VWa}yymyymyyAmy$,B$fs,}By,d$d$*F$fzzf*zDfD*{*F0{DF*0DhDgD|Fz{BD{d>%(,>6a(K111((%u*F*0F0{{{$0z}ycc:CHV!Z377UUjxJpGM", "~~-bpJJJJxj3@!WaIdm%f%sd8AAyB,B6z>{,sdAdThfThhzhh${*,fBfDB*hFh**fgf|DPDf*fDPBz}11(dAOmKmyyA}1%%%*Fz**fF${)*,TkKCaWoLrxj]vvvt'p^M", "S--'pp'xJJxpr!q)I(%%%zs>A>(%Qz6{6zzf%,%mydBdyhBzF,hTf{Bhhh*DDDDBDhF|DTh*fB|yyBuyyd**F*BTdAnsc,z*,{{Fzz{$0DdyakONXWHLrYx7jjxY'/GM", "~~-'p''JYYx3Z_qc(%>*>%%(%(>%6>%%{,*zzmnnhmhdhAdy$hBB}msDf$DDffDDf*hfDm|yDAsmmIn}sds*hdmyy,acA$,h{FB{f*zhB|fnaaHIHHH!r37U4vtR3pGM", "S-~-bb'YYjx3r!W)a6%{>>{s6z(,6{>6z,zs|%DmdTOByBd|ATmdfnnf|DfDDD*ffhfDhhByOdydmak)yfhhhhm$KdaA6$gf{{{ff*FDzAdOK=KKKHHLEJU]jjxY//GG", "2-~/pJJ'3xx3ZVqc1,{6z{zz%%>>>{6D{{zDz,shBBhKfydyBnTnymdfDfhDDhh*DDffhAOB}nTnaddABA$yBDnn$Bnky%fffh{,F{DB$TPnTIXWKWHLrYUUU4Y'3/Gb", "S~-b'bJJlxx3Z!#Oay>>{h{s>%{6{{z{*FFzz|smydddnfhdAdBDmAmTDdhfDDDfh||hDsshD}fhnAyAmnyTd,BnOdA)A$,*$BDDfBDfQnKnOkICXHVLEYUvUjxJ3/G-", "9-~/-p/J[YJGZ!WKA>{{*zs6>6{%{%0{{{hhhhdmyhTdnfdyddnyndnf$h*hDDDhDhDmBfyAfdBAyAAsdmTByandAsyA11%fdPs}hTh*aAaanXCKKXVVElxvv4YY'GM+", "~~~M-p'pJYJpr!WanA{h{{zh{*{*6*z{*DFzzD|hd{hDBBfDdymmABByDdDf**DffBhQhBfsTTTnnmydyyddBQKyndOf,TKsAOBABynBdPdcKnOaXKWVZ[vvUvR'/-MM", "9~~--p/p3JJGr_W:d${{{{zz{>{*z%{gzfFzz|BB,dmBhBBmy|ddyDB|ffffhfDhQ|BDdsBByAdsyddsfBBnBOm)$n%nmm,nOBmnOdAOkamACCaXKCVVLEljjttt/^+-", "9-~--/'3333^Z_WNaA{*z{FP{%f{*{{{zzhzF|dfD||hDyhfssdynnBhhDBffBDBhmsdTfdyAnBATksadB)nkaKannk$ddy$yddAynO}BkT)daaXCWWVZ[l4jt'tpb+M", "~~~--pJp3Ypbr_qCa}>>{{*z{>{{*f,*f*{z*zBhDDDhBDD|BshhhTBfhfDffBDhyhdy*AfBdnAAPyydOAnyAdnKm}ynyTKA8AdnA=OOICkKTXCkWC#V_ElU*z{%{{{{$*z{*zDhBfDDfDDdhfDh|BdhDhBBdDsDfQyAyBydBnynyBmnnnddAnakaKkncymkyaAnKd)TAaOTAaKXIKaOCV!LE4zg>{zhhBB|d*Dh|DBh|yBhmmyyBddBnnmQndnnAATkOnAdkTTadcAankkcak$akmInanXCnOK8KaXC:K#XVL^v7>{f,{{*{%{*{{zzfDhDBf|mmdhDfDfDyhyfAmmmBBmsKsyBTAAdBTdddnnAkcnaIIIAIn8cnncaan)aA8OXKCXI:X#KXVZlY<%6*{6>{%6{z{{{{{{{h{DDh|fh|fyQBfmfnBBfyymysd8yOAyydymAmTdaTK)AIIacc,cdOaak)}k):=IAaaKanCICKoKCWLZl77%%6>{>>>{*>zsmsBh|D||BhDhQhyBBByyBydddsyBnAndBTByBAnOkIk)$kaAydT1Odc(XNcOK=kXOmOcKKiKKWWW!E4vv%,1{{,>,{%%{>**66{z**fDD|Dy||DhhhAAQhhdBmdymyAyBddAdnmOOskAcI):nd}k}n}%Ak}kk=:iaaaKakdaIa:KCC##LZv]77v4R'/Me", "9~M--bGp/'J+r_H=N1(1(1%%>>>,z%%{{>>{{h|DDmD|d*h|hDgffshBBmQydAAnsByasyTABmydd}$kcCnaAndTn$}ann8n:IIK8Oka$AndOIIXOC#LE77]<>z,6{6z{6{*zf*zhhfyfDhh*|*B|fhdyfyBmyyddAAAmyAnyndddAycAkIIcck=8nAAAKad)nKWaOIIdKkdnkdOKXC##LE7]7]6>*${%6{{{z**zzh*|fD|DDfD||D|*Df|||mhhdysAyAymdndAyByyAndcakcac}nydTdycknaankIAdBA$sI8aaCKCC#L[4]]<6z{*f*{>>>{**zD{|DfyhmhhyfDDhfDf|hDfdyyAAdmddnnBynBdnT%ynnd1a1cK$kAmBAd8IK8KIykkK8nB$yAKOkOX##LE4].7]&t'p-M", "2~--b-/ppx'[^5;o%=>>%*6{,%f{z{z*{zDhf*D|g|Dy|D||DDDD|DdmfDmyDyAymadA8sdAO,nTnayn:cc%nk>Onaf)kKnOATXd8ndm8dAAnKdCXOVLE4]]]6%*f*z{{z{>zf{D{DhhDf*dh|BfDDBhhDDDdf|BQBAyBsydATByAnyAdnnn}nnkAaAyyyfdA}IadaT8nmd8sddAdKIKXXWLZ4]]<]jt'b-~", "99---p''''tY[+wH:11${{{>{fz{{{%fzD**DDDf|D|DDgfDDhhhBfhmhD|mhdydyBfyDdyfmhn%1A)Tkk8daKsnTyABynAAATAAmnAnBnskanIKOC#!Z4<]<{,%%{{,{{%{z{zD***FD*hDDDfhhD|hD|fh|hDDyhdhmddBmndmyTAdOnB%BnaddOkyA{TAdnAn}dABdmmddBndAyyKTK##!Z47]]%%{{D{DFDDD*FhD|hD|DDyDDD|DdmffDsmmByBsmBfyymfBBsnky,md$AAAh,%TABTdByyBnhdydnB8KAXOOWWVZ[<]<6%>{%*{**FD0fDhDhDDdDd*|ByDhhhDhyyByBysOfsAdBBAdAdnTdynKyAdTnndDdydBByyfByBdymydDKnOXkX)VZ47]]{>66%%%{B{*{hF*DDDDDfD|DhfhhBD||m|hhyyhyAmDyBAmydnhnhDdThmyy%BBBynBydhBfyBfmydBB|mdadKkTn=)O#VZ[v]]>{>,%*%z{h{*{**hFh*D*DDhhfBBhfD|hhBhfshhs8BBmhyffTmmyhBfDyndABAnfndnmnBfhmyKAIkAATTdnOKmOOOC#LZl7]7>>%{{{f*F{*D{DF**DfhDD|hhhDffhhhy|D|Bmmd|mB|BddBA|Bfd|smDTmysfmmdydymmDhfnmnmmdAcyndnIakO#OV#L[v]]7jJJb-M", "29~---''/&t&[Z!qCc11(,>6>>{z>**{DDF*****DDfhDDBTBdmhd|fDn|yhy|hd|d|mmdfABDyhDhBgBDD|DBBOyQdDynydAAnn8kAkBmnsnkOTKOO!L[<<7Ujxpb-e", "2~9~-//'RR4R^@_qN:(((866*{{**F{*D*{DDDD*D*Df|hhffdnBhDh|hmBAfBf|DhhhyBnyDBBDBDDhhfD*Dyhmh|fmyyysmmA8mdkdyTkkaAkaOX#VL[&]7Uj''-MS", "229---/''x&&^Z!q=:a1(1%>6zz*{***{**D*DFfDD*hhfBfmDD|DDfhddfm|fhDDm|dhByBsyhDhDDDDDDD{f|ymy*hDmyBymmmsAAnnsdnAKkKXOC#L[4]7UjxJb-e", "222~---G'xtR^_VqoN:ii(>>*,*{****D{FD*D,Ffhh|BDnBBndDBDfDyBhDhfhhh|DDBsmsf|B*fDDg|FDDDhfsDmyDmm||sAsAmnQkyndAAnkanCW_Z[4<7UxJJpbM", "22~~S-/'ptj&+Z!;o:Ni((i%{{*F**{***hD*hF*h*hDf|dhmhBfmhnDByfhDh|f|Dh|hhffhhBh*DDFDF*gDhBmhysff|myzymAsAPdmBmynAKnOO#VEl7]]7UxJGbe", "299MeM-G'jxY^w;oq::((1(,{****{*{**D**D*Dh*Fffhmhyk8BBDDBhhyfDDD*Fh|*DhDmhD*FhF*DDDD*g*DDy||hDzD*m>z>m1AaynAAkTdXXC#!Zlv]]7Ujx3GM", "299~M-//'xx3EwVqoNN(1((>6{**0******DF***DDDhBmmAmnm8By|8BhD|DhDDD*|DDDhDhf|D*D*DFFfDg*DD||zD*zs*smDsm%hymy8T8nAXO#VZ[vv]]7]UU''b", "992~M-bGJxJ3EwHooNN1i(>>{{{**F**0D**h**D*D|z|shhnmAm8Tnhfffhf*FDDBD|hmf|fDDF**FDDF***h|f*z{By{fDzmsy{syykT|IaAOOW#LE[<]]]]77jx'G", "29MS~MbpJJxJEwVHoo:(11%66{*****{*D*Fh*DDFD*DhsAsTmyBfBDffD|DDDDDDDf*D|**|DhFDFDDDFD*DDDF*zzzFz{zzD*B>s|ymAOKKIC##LL[&v]]]].]7Ujb", "22SeebMp3xJJEw!q=N:1((%%{{{***F*FD*DfFDF*DzzmB8|I8AB8hBhDfhDhfFDDD|*DgDD*DfD|DFDDD|*F|*zF*FzFz{*Fz*P>sssmmAIIOX!LE[&v]].].]]]Ujp", "99MSMbMppYYJG@Z;;)N1(%%>6{{{{F*{D*FDDDDDzhfffhTyTfABTydBhTBDhfBh*BhhDfDD|g|hDhD|hDFDDDB|D**Dz|**zDmBm%TydyAIIXWVZ[&<].......]UU3", "9SSb~bMGGpxx[^@_;==N1%(>>f{{{{*DDD*DDhD{{B>%AyyhAkdAm|nffdddfDDffh*h**DfDDhhhhDffffhD*D*D{*D***zDzsQzsAy88IaX##Z[&&<]]......]7Ux", "S9MM~b-G'''x'[E@w;=}1($,$h{ffff{fDh{DhfhdyyTAfnBddTyddnAdTBfBfBdhffhDh*fdfhDhDfhf|fBhfDhDD{zhDfmy,%s(11nTBKIIW!Zlv77]........]vx", "S2SeeMGb/pJ'jtR+@w;qq})$$$$,{,hffffhBBfdTnknATdnThAnOkTnOTOdTfBffBDhdBfffhfhBBfdBBdBBBBfBhdfdBd%A$naKdndnIaOX!L^lvv7]]......]]Ux", "2SSMSM-M--'pxY4[EZ_;;W==}}}}$)$$$d,TnOTOKOXKXOOTXnTXCTXOCOCOXOOOOTOOOOOOOOOOOOWCOOOOCOOXKnCnTKX}CCC=cXXOXCC##VEElvv77].......]vx", "99S9reM-//pJY44l[^E@L_L_LV!##==))=CCCCW##V####VC#CWXC##VVLVVVLVVV#######!#LV!VV#VVV#####=##W##V!!_V!V_V!V!!LLZEYYvv7<]]....]]7&Y", "2299Me~MbbpJJJxjl[[^E@@@@@ZZLLLL!!!!!!LL_ZLLLLLLLLL!LLLLZEE[EZZZZZZZZLZZZELEZZZZZLEZZZZZLLLLLZZ@@EEEZZZZEZEEEE[lYY4vv<]]]].]]7tp", "22252~e~MbppJJxYYYl[^[[[&[[[[[[E[ZEEZEEZEll4lll[EElZEEE[ll[4ll[[E[Z[l4[4E44[[4[4[l444l[l[^E^[[llllllll[[lYll4xRtJxxvv<<]<]77UUYG", "52222SeeMMbpppJJJllllR[R&R[[[[[[[[&[&&vv44l444444[4[[[[l4v4444l4l4l[[[[llll4l[[4l444444v&&l&&&<<&<&&4444vv4Y&&YYRxYY4&& c #928D42", ", c #A29D55", "< c #F2F2E9", "1 c #AAA26A", "2 c #958627", "3 c #B7A64F", "4 c #313C1E", "5 c #7B8260", "6 c #E1E2D8", "7 c #989858", "8 c #A69948", "9 c #677635", "0 c #787328", "q c #D8D8CF", "w c #A9A458", "e c #67684C", "r c #49662B", "t c #B8B577", "y c #E6E8E3", "u c #697651", "i c #D0CE9F", "p c #D3BF6D", "a c #C8B976", "s c #121416", "d c #888837", "f c #BDB061", "g c #464921", "h c #ECEBE5", "j c #9E9974", "k c #4B5929", "l c #BBC28D", "z c #85884E", "x c #CFCDC5", "c c #0C1216", "v c #4E4E39", "b c #83832E", "n c #9C922C", "m c #585832", "M c #A9AD88", "N c #C4BA9F", "B c #C4C395", "V c #ACB37A", "C c #B8B893", "Z c #C3A955", "A c #666A35", "S c #7A8438", "D c #8A9476", "F c #161A18", "G c #586827", "H c #90955E", "J c #9A9E75", "K c #C9C8AD", "L c #3C3F29", "P c #B9C0B4", "I c #767947", "U c #61692F", "Y c #7A7041", "T c #2F2C29", "R c #98A386", "E c #DDD6A2", "W c #B4AA87", "Q c #0A0C15", "! c #A59639", "~ c #8B9247", "^ c #A7A67D", "/ c #3B482A", "( c #1A261A", ") c #989339", "_ c #B6A867", "` c #60614E", "' c #26291F", "] c #767A35", "[ c #3A5525", "{ c #7B795B", "} c #6C762B", /* pixels */ " h qMt-1X,zIIDRVIHH@J#ftV1fta+iifC < K6~z9>zCHH9H59U5rzw,)]--7%f]oJ,f{zYHfttp+Coh< ", " +_,7VK%1Ct31-w1^wf,,X-9SSwH=I%Juz-w#3Y,w99-!16^jC<]qD*7f+a+++Chxy ", " 61SH`R<@H1^wZ_838,H311w]Swv=PH5M~_w->]N&U^A>,3p7718-wwwJf1VV+1K%q ", " tWZ8#zuz1t>]w7-I97w#f,JJwIwSKIt,S~SUI7d73w#~~S;S-ww,H~7+JVaVx6xh ", " hK^+_HK_tV,X8_1YH]~-3-J,X~zI3DzI;9A;Ad>-X3d-fd;S~Iz>Ia1H@^CV6 %x ", " 6 PR3f#pa##pfzwf8-~-]~~~,Hz-SH;5rrU9A99>dz]>8H7fwfpf-#+CMllMq R ", " qxK8p#appwX*-X-W1IIr%Iz-Hdw~zIz5KAA K^x)~--]wdd>3-X,X,w7Rq< D% ", " 6d]r/Hj*S9->}IrIo q%N,>SS;)X~~Xw]]-~9~>wz`P%Pu% ", " hPffat81>,*I~DzIIYv@H8-->-Sd9$$]]M*wS;dIrbI}dSd]d)~KD>~HHD%{vv ", " Pe%NH>IKx8]U9u6]II9]d>3X>SA;;/k[`r9;;;9d;]99[r0^j DS99MR`Dv{ ", " +oNCD@uRKP1*K^599zdd&dI9U>-/>9`]k[[/rIIb;AGrdUASrAq^eK M-]IGI%RD= PD ", " qN+f3fI*Cq@xP%6P%<5Av{7&CqI4II'I]SS;;rU@`;8eW,*UI1-)1oYN <6%AdA]IH%`DxDP ", " C3ppppHjJYRJ%PPP`%%L4sFT%RI]rA5=);r;[;S-3]>)73WN1_bzz^ q 6&RI-t787+++a_%x ", " Kt< %zp^33##1##f3XX1a5tvgFF`vL5,A};/38ddk`d)-!*g*m*>w]S8-1q9*o6Dj*1WKot*fa_#fx ", " MCq << DCt##pp3w>)83zP1m{TF_t{*>Yk/$S9d]9[`r[dYm]f3#p#bS)]S9kzNh6R1fj>,qDh@Ivy ", " DMK PKajZ,aZp3#)fZp3#p&]8]A1)w-1RLDm]]r;;r99XSr;df#f8))-&}5I^Ho hzHHdIz6y P@D ", " RKP,o< %eWx^8,f##fX)X#pX-fz--]3-}{Grg9veg$[r`rr9[r]!nb}r9)SdH@9S9r% yKqID ", " 6 5KHMiCN+N%1pf_tZ#_3_3ZX-3#wddzd])w~5;79k99VA]rr;;d/k;;}};rbdG%5u[J~0Aq P 6 ", " %hHH76C,~a)9w>~*__f*f-Z3!#3,~)HMMI8]zqyKY[vDr9->b]rg;G9]r[r}}-]IK %%2)S* h%q ", " xP@rrN%yU[rrr;;9-Xh6]Z8>33,8-8)w#!-XtN1D(/Tgze/$k==[9>S>SI;[;r[[^MUIxH- h ^H*xh ", " K% yR %;[9]rrIdI* 6^17H tMd9S,a>3&~ISUYv'FgA~`$`($k/;S99}5UPR%@[IK6%M1qKoHIq ", " D% D@HoRzI76x h x8XS-,wS})8)]S)m.=eU`Ue4=/k;%``;I yy DRHr0GtJxq%w__aE% yfZ8)->))dz,`;999Gd0*A4/b8Ikuq Dx PPPHm]}Jk]Kx ", " hI%vNW]~-Sm>U;]~I}U}L=}.0b//% `Igr/k%% ", " 5;*xPKP)!U)X83ZX)XzxHd8I!)}]g;9>Xm$U&{`b'./U[R% 6%U;7 ", " hRiahq,J&gz03XdI&)3w0}!]3)}ddz)wU(.z4v3kXI*H6 qB8d)3)*m-)d8bbb)b4/csFXm>m&>zH q x ", " q!K CPi+_3ap*YjwI0)dmGI>]mH;}bGYm(=(..1bA]~m%<@y < ", " KPK%z_p#p+3XtDH}!&z7z9]ddw.'zz4G{cFvv(U;.gbU`$k]b0)i ", " D)~d*>!S3-Kxo%t1mvY'>mUm'ee'cQcsvscvvg4=4GHy`G]gn;Ki h ", " M%Kb@H%`TmZj)f__*`Fs'F*g0'4;AsTcFcQFs4Gmk]q%e C]}0;S;r;JMAz^qI%< ", " yP$F`Dh WC%W3Z#3AY'ssYL'vTL`s'5scFcc4G[;M`u19;kr[;`}SG;b99d~zK9]x ", " iKH)4=)X8Y{gY3)-;*YdmsL.{A'T8!I4s'$U(%KH@gvjK%5K%k`vr}S}d!d-+-;;zh ", " qd88Ifu4!>gs`vI!90db8b4^Fumm]Z3#3'!((]VYg[G)ah<>J9.y`D%z7z-&*zHq@P9h ", " qIbS-3w3&TL>YZ*`emI)!!!b-#ZnZm{0Xg!sgs'U8UU]9XZ*sLccF'{8CH8#Z)_)!8!0Hz9NmmN)0>mw%h J9>Kh ", " qhK Pu9]9AIK{[[zZp]zS8>>##3-33bUU-d)0{;!*m'LTj3b)bn!20{)f87>]IXw_@MI7kH1zd@K}k{IKh ", " ^~~9r[/kjYUkre//r]ddz))83XZXZ-d9->SS]V-}8Z0m{sm>>&&I0wz&dYmge>_d,de45m`'eM1j94r%h ", " ~I;rr;9z[/k]k[md73,d}}IX)&n3nd!SU)]b8-rb!>S{45L0vgXn!!aw0X0!e.0w>;rGUR'/GIm]ArSM ", " qKh '$$=Jvvm(L4=g'4Y@>)9]])3#Z)z,9;;U;]m]}k$9G;m=4=~`QggInZZ2)!Z!gA]&00=GkG[4I7bIU/r9D ", " _pa30(FcvFcYv]ZbG==IHt,KMU7~83X!b8;Idmkm4//$$[[9;4F0)mTQQ.0)2!!X_Xn0&db)&0;[k;]h {9PPP ", " LmZ>>'>8emvww!04AI1>IUMdbt]d>S]!)Y3X_'FT*0mg('[GkGvXX#)Z04F'2)Y..bzH0m.'F=G$(=/H y ", " x/&II3TT>*pZ8b0r0b>0d!&Y)d]d]MI)003!)p#&g/v'{Qc(===.=mu&2'(F.mv,0)>IGYe)UzGgQFkz]} ", " Kw#3&3Z#pw]#))gkGU&G&&&!8!nd7z7^GUvFvgY^#Deg'=4(gcsFc(4Fs:Qcs((mv'mb.d;b}YSG/cckS>C ", " R/o^t&#Z!Ge33SGrk[kG.{'4Um4s`K^yDDvFs5TF4QT((=GkF('`v$k.4:::v((4/sF/r[;Ib)X}bS09;dd)q ", " DF`5Y!!2mmb&rrkk0_44F4=:Lv ` %x yuFsGmd/0gQFc(=./QQQF[mg.4vYQQT`@9AU.$}r;r};]kG[9IrSSM ", " `ccs'mFmbSUk}0&}I``vQ:vqx `%@ xsQ:4=kgL:QQQ4('s(cg202G.dbG4v%5KhyRRUHU$$kUkePP=/kk[[@ ", " DFsQe`w3Ukm[v'gvWhKoxL<g20G.UUM {Hq PohK%(4]>4PP yGb9=F` ", " hPPvg,>YA'4/>(FPhxKK-Nhh vD:v `vsTT::::::Tss`c(FF'emv]Lcgg(q 6 yH1%RCh5y Rr%x^H ", " i,wd_ZsQQ'QcQTRoP h<<< 6vQ:Tvxqs`4mFvQQT:::QF4(vLTvPRL'4'sL4^ Kxy yh ", " Rx1Xt*DvDILvY`KNP 6RF:QTsvTQF:'LQ:T:::QccmmmD%j{v'DK`44.zaK ", " hP6N%Z#papafa_tNh %xqvT@`::TQ:Qssgk(`JyQ:QQQQc4T%RYm< oAm0G0G ", " q 6jXN_a1>*WP yxsPRv::v:::L0m40v4`B5QQccQTR`sQvu@.HM=Pq4G0K ", " 6PPqx^K< %%`vR@T:::::Q'Fv9(/L0gv:QQQ::::::R yqP% ", " 6hh6 hR4{#XZ{`gdU&zww]I{{.'T:QcQQ:Q:Q'>% q4 K u/^y ", " PQUn))ppZ333w>>J-b`]mA-mcQQ:`vT.*N oiR5Uh9zM ", " K1Z#&&)`2XZ3Gbbz;bb}zI0k;&UF(Qssv:% y RzMB0UUgIC ", " Xp#XX)GtvYGGk/[}db0;GG]0G.'4[k$'Q:T a0G.G&=/4Gb3>Cq ", " 6t8f5A>TQ'm.kU4.))0;SrG([r[]'T($vLT` %;0;;U>D`{9}}}bKh +< ", " qqxyD`$I~-;[/kG}bbrk.gG;rG[k[=4csT` h @vvu`$;>dm`(v=G2tz!@y ", " `[$kG[G$$gkGG;r[0Sk[$/v[IkA=4RD _e` ", " 6C*oPqP0Tvm44}v/(4'G./G;GGGr$F=k(QFm4dYmUgF% x% @5U/9rb/P ", " yz7,Kh0mFTQTmU7c::sgg-mD44.9G(===(FH>vmm@)~X~H %kD};rS1K ", " >*+)dmY!ZZ3)0bgF=.=bd{qqx D=}g/==480^AsD DKuy x hx[H ", " CK]tv8t3###))G==F4G0b7>MRIUgKRzmcc'9U8fLN yx ", " tBCi^#I]!)X!$.Um3-'4gMhC-MK%GKgQc(g$/>Zt,+ ", " hCI h5^{&,0z&m}372g]30!h `x'Qcs94s/H/,-% ", " +Wy ", " PHH)K qxD9bbXX>%0YXG>b) c #424242", ", c #454545", "< c #494949", "1 c #4e4e4e", "2 c #525252", "3 c #565656", "4 c #595959", "5 c #5d5d5d", "6 c #616161", "7 c #666666", "8 c #6a6a6a", "9 c #6e6e6e", "0 c #727272", "q c #6e6e6e", "w c #707070", "e c #7d7d7d", "r c #818181", "t c #858585", "y c #898989", "u c #8e8e8e", "i c #929292", "p c #959595", "a c #9a9a9a", "s c #9e9e9e", "d c #a1a1a1", "f c #a5a5a5", "g c #a9a9a9", "h c #aeaeae", "j c #b1b1b1", "k c #b5b5b5", "l c #bababa", "z c #bebebe", "x c #c1c1c1", "c c #c5c5c5", "v c #cacaca", "b c #cdcdcd", "n c #d1d1d1", "m c #d5d5d5", "M c #d9d9d9", "N c #dedede", "B c #e1e1e1", "V c #e5e5e5", "C c #e9e9e9", "Z c #ededed", "A c #f1f1f1", "S c #f6f6f6", "D c #fafafa", "F c #fdfdfd", /* pixels */ "FFFFDDSAAZVNMnzg,ihzvvvbbvcxxkgp;eahllzzzzlkjhau-qpfhjkklkkjhdpw-tagjkkllllkjgau-wpgjklzzzzlljfi;rdjzxcvbbvvvxlf,pkvMNBCZASSDDFF", "FFFDFDSSZZVBMbxg,ihzcvvbbvvxzkgp;eahkkllzllkjgay-qifhhjkkjhgdae-epfhklzzzzlkkhdu-wagkklzxxzzljfi;rdjzxcvbbbvvxlf>pkbmMVCZASDDDFF", "FFFFDDSAACVNMnzg,ihzvcvbvvcxzkfi;eahkkllzllkjgat-0udgghhhhgape-rafhklzxxzxzlkhdu-wahkllzxxzzlkfi;rdkxxvvbbbvvclf,pkbMNVCZASDDDFF", "FFFDDDSAACVNMbxg>uhzccvvvvcxzjfi;wagkkllllkjhfar=9yaffgggfaiw-eafjlzxxccxxxzljfu;wahklzxxxxzljgp;rdkzxcbbbbbvxkf,pkvmNVCZASDDDFF", "FFFDDDSAZCVNMbzf>ihzccvvvvczljfu;wpgjjkllkkjhdpr=9tadfffdauw=epfhkzxccccvcxzlkfi;eahllzxxxxzlkgp:rdkxxcbbbbvvxlf,pkbMNVCZASSDDFF", "FFDDDSSAZCVNmbzf>ugzcccvvcxzljdu;wpfjjkkkkjhgdpe*8tpaadapuq-wpdhklxccvvvvcczljfi;eajllxxxcxzlkfp:rdkxxvvbbbvvxlf,pkvmMVCZASSDDDF", "FDDDDSAAZCBNmbzf>uglxcccccxzlhdu-qpfhjjkkjhggaiw*7riappiyq=wpdhkzxccvvbbvvcxzkfi;rahllxxccxzzkgp;rdkxxvvbbbvvxlf,pkvMNBCZASSDDDF", "DDDDDSAZZCBMmblf>uglxxcccxxlkhdy-qidhhjjjjhgfauq*5wyiuyr9*qidhkzxcvvbbbbbvcxzkgp;rajllxxcxxxlkfp;tdkzxvvbbbvvxkf>pkvmMBCZAASSDDD", "FDDDSSAZCCBMmvld>uflxxcccxzlkhay-qudghhjjhgfday0&5qryte8*0uagjlxcvvbbnnnbvcxxkgp;rajlzxxccxzzkgp:rdkzxvbbbbvvxkf,pkvmMBCCZASSDDD", "DDDSSSAZCVBMnvld>ufkxzxxcxzljgay=0uagghhhhgfapt9&30eeq7&8yafjkzccvbnnnnnbbvczlgp:rdjlzxcccxxlkgp;rdkzxcvbbbvvxkf>ikvmMBVZZASSSSD", "DSSSSAZZCVNMnvld:yfkzzxxxzlkjgat-0uaffgggffaair8%17095&8tpfhkzxvvbnnnnnnnbvcxlgp:rajlzzxcxxzzkgp:rdkzxcvvbvvvxkd>ijvmMBVCZASSSSD", "SSSSSAZZVVNmnckd:tfjlzzzzzlkhgat=9yadfffffaapyw6$<563%6riahjlzcvbbnnmmmnnbvczlgp:rajllxxccxzljfp;rdjzzcvvvvvcxkd,ijvnmNVCZASASSS", "SSSAAAZCVBNmbcka:tdjllzzzlljhfpr=8tpdddfddaaitq5#:1<$4wuafjkzxcvbnnmmmmnnbvcxlgp;rajlzxxxcxzljgp:rdjzxcvvvvvczkd>ijcnmNVCZZAASSS", "ASSAAACCVBMnbxja:tdjllllllkjgdpe*8tpaaddaaaiye93@-;@29tpdgjlxcvbnnmmmmnnnbvcxkgp;rdjllxxxxxzljfi;rdkzzccvvvcczjd>ihcnmNVVCZAASSA", "AAAAZZCVBNMnvxja:rajkklllkjhgdiw*7riaaaaapiytw7<+$+<8wuafjkzxcvbnnmmmmmmnnvcxlgp:rahllxxxxxzljfi;eajlzxcvvvcxzjd>uhcnmMBVCZZAAAA", "AAAZZCVVBNmbvzhp;rahjjkkkjjgfauq*6eupppppiute94:oX;5qtpdgjlxccbnnnmmmmmnnnvczlgp;rahllzxxxzlljdi;eajlzxccccxxzja:uhxbnMBVCCZZAAA", "ZAZZCCVBNMmbczhp;eagjjjjkjhgdayq*5wyiiiiiute07<& #18euafhjlxcvbbnmmmmmmmnbvcxkgi;eahklzzxzzlkjdi;eahllzccccxzlja:yhxbnMNBVCCZZZZ", "ZZZCCCBBNMnvclgi;wpfhhjjjhgfdpy0&4qtyuuuuteq84-oX*30ruaghklxcvbnnmmmmmmnnbvxzkgi;eahlllzzzzlkhdu;eahklzxcccxzlha>ygzvnmNBVVCZZZZ", "ZCCCVVBNMmbvxkfi-wifghhhhgfdair9%30rttttreq84:O%O-5qyiagjklxcvbnnmmmmmnnnbvxzkfi;eahkklzzzzkkhdu-wahklzxxxxzzkha:ygzvbmMNBVVCCCZ", "CVVVBBNMmnbczkfu-0idgggggfdapue8%28wrrrew074:+=-O:6eypdgjkzxcvbnnnnmmmnnbbcxzkfi;wagjklllzlkjhau-qpgjklzxxzzlkgp:tflcvnmNNBVVVVC", "VVVBBNMmmnvxljdy-0uaffgffdaapye7$17qwewq084>+-,>@>7eupdgjkzxcvbbnnnmnmnnbvcxzjfu;wagjjllllkkjgay-qpfjklzzzzlljfi;rflcvbmMNNBVVVV", "BBBBNNMmnbczlhat=9yaddddddaputq5$<60qq0974>+;11<@,7eupdgjkzxcvvbnnnnnnnbbvczljdu-qpfjjkklkkjhgat-0ifjjklzlllkjfi;rdkxcbnmMNNBBBB", "NNNMMMmnbvxlkgar=8tpaaaaaapuyr04#,5798763:@:233<@,8ruadgjklxccvvbbnbnbbvvcxlkhdy-qidhhjkkkjhhfpr-0udghkkllkkjhdu;eajzxvbnmMNNNNB", "MMMMmnbbcxzkhfpe*7eupaaaapuytw82@:266541;+:24541#,8rupdghklzxccvbbbbbbvvcczlkhay-0udggjjjjhhgdpr=9uaggjjkkkjjgay;wahlzcvnnmmMMMM", "mmmnnbbvcxljgdiw*6wyiiiiiiyteq71+-1342<-+;146642#,8rupaghklzzxcvvvbvvvvccxzkjgat=0yafghhhhhgfaie*8yaffhhjjjhgfat-qpgklxcvbnmmmmm", "mnnbbvcxzljhfay0&5qtuuuuuyteq95,+=><<,=O-<356652#<8eyiafghklzxxcccvvvccxxzljhfpr=8yadfgggggfdauw*7tpdfgghhhgfdpr-0pfjkzxcvbbnnnn", "bbvvcxxzlkhfapr9&39ertttrreq972:O&-:;&O=,2466641@,7wyiafghjklzzxxxxxxxxzzlkhgdie*8tpadffgfdaaiy0*6riaadfgfffdaie=9uahjkzxccvvvbb", "cxxxzzlkjhfaaue7$18qeeeewq0874<=o#&*$o&:1356664<@>6wtupadfhhkkllzzzzzzllkjhgdayq*6euaaaaddaapur9&4wypaaddddaapyq*7tafgjklzzxxccc", "xxxzlkkjhfaaitq5$,690qqq008641:&X+#@X$-,1355653<@:5qryiadfghjkkkllzzllkkjhgfapt0&5wyipaaaaapuye8%30tiipaaaaapur0&6epafhjjllzxxxx", "kkjjhhgddaputw83@:36788876531>=$.Xo.@&;,1244442>+;38weyipadffghhhhjjjhhggfdapue8%29ryyuiiiuyte05$18wtyuuiiiuytw7%3qypadfghjjjkkk", "daaaappiutew084>+*,2333321<>;*$O o#%-:,,<1<<>-O*<579wetyuipaaaaaaaaaaapiutrw93#,59qweeeewwq961@:480qweereww083#,7qrtuipaaaddad", "rreewqq997642<:%X+&--;---=&%#+o. .X+@$&*=---=*$X@=>1356890qqwwerrrrreeww008751;O&>24456665432,=o%:<3455665543<;O*,46790qweerrrr", ";;;-;--=**&%$#@o XO++++++OooX. .XooO++++@+Oo.X+#$%&**==--;;;;;;;;;;;--=**&$@.O#$%&&&&&&%%$#+.o@$%&&&*&&&%%$+.O#%&*=----;;;;;", "iiiuuutrew0864<-o$-:>>>>:;=&#+X O#&=;:,,<<<,:=o%>3680wertyuiiippppiiiuuytew961@;36890q0009863,+=1578900009974<@;480wrtyyuiiiii", "ffddaaapuyteq84>+*>132211,:=%O.. o$=:,134555643,+;49qetippaddfggggggggffdaaiutq6$18wrrtyyttreq83#,60werttyttew95$19eyupaadffffgf", "kjjhggfdaaiyrq71@-1455442<:=#.O+.@*>146899000862#,7wtupadggjjjkklllllkkjhhgdait9%4qtuipappiuurq6%29eyyippppiuye8%4wypadfghjjjkkk", "llkkkjhffapite83@:2566543<;%X#%$X$:14780qwwwwq85$19tiadfhjkllzzxxxxxxxzllkjgfauq*6eiaaaadaaapue8%4qyipaaaaaapit0&6rpafghjkllzlzz", "xzzllkjhgfaiyr93#:3676541,*o%=-&o%,4780werrrre06%3qyaafhjklzxxcccvvvvccxzlkjgdie*7tpaddffdfaait0&5eupaadddfdapyq*7tadghjkllzzxxz", "ccxxzlkjhgaair04#>367652<-O*:,>-O=169qertyyyttw8%5eiafhklzxcvvvbnbbbbbvvcxzkjgar=9yadfgggggfaauq*7rpadfgfggfdaue*8yaghklzzxccccc", "vccxxzljjgdaitq4#>466531-O-,221>+;39qetyuiuiiyr0&6rafhjlxccvbnnmmmnmnnnbvcxzkhay-0udgghhhhhgfaie*7tadfgghhhgfair=0udhjlzxcccvvvv", "vvvcxzlkjhfaptq5#>35642;O;14543<@:50eryiippaputq*8yagjkzccbbnmmMMMMmMmmnnbcxzjdu-qifhhjjjjjhfdpe=9yafghhjjhhgdpt=0ifjklxccvvbbbb", "bvvccxzljhfaiyq4#>2442:+:2567751@,7qttipaaaaapyw*8udhkzcvbnmmMMMMNNNMMmmnbvxzkfu;wpgjjkkkkjjhdar=9uagghjjkjhhfat-qigkkzccvbbbbbb", "bbbvcxzlkhfaiyq4#:131:@>36890973#<8eyupaaaddaaue=9ifjlzcvnmMMNNBBNBBNNNMMmbcxlgi;eagjkllllkjhfat=0idhhjkkkkjjgay-qpgklxcvbbnnnnn", "nnbvvczlkhfait04@;<<;+>489qqw095$20ruiaddffffapr=0pgkzcvbmMNNBBBVVVBBBNNMmnvclhp;rahkllzzzlkjgay-qifhjkllllkjhay;wahlzxcvbbnnnnn", "nnbbcczlkhfait03@-:;+:480wweew06$30tiaaffggffdat-qahlzvbnMNNBBVVCVCVVVBBNMnbczja:rajllzzxzzkkhay-qpfjjkllllkjhdu-wahlzcvbbnnmnmn", "nnbvvczljhfair91+&*+:38qerrttrq7%4wyaadfgghggfay-wahzxvnmMNBVVCCCCCCCVVBNMmnvxja:tdkzzzxxxzlkhdu-wpgjkklzzzkkhdu;eahlzcvbnnmmmmn", "mnbbvxzljhdaue7yfkzxxcccxzljfu;eahklzzzzzlljfi;rakzxvbnnmmmmmm", "mnbvcxzkjfair03* #,60etuippiiut0&6rpdfhjkkkkjhdi;rdlcvnMNBVCCZZZAAAZZZCCVBNmbckd>yfkxxccvcxzljfi;eahklzzxxzlljfi;rakzxvbbnmmmmmm", "nnbvcxlkhfayw7:OX*39eruiaaaapitq*7tafghjkkkkkhfi;tflcbmMBVVZZZAAAAAAAZZCVBNmnvld>uglxxccvccxlkgi;rahllzxxxxzljfp:rdkxxvbnnnmmmmn", "nbbcxzkjgair91@*+;5qtyipaaaaapyw*8taggjkllllkjfp:tfzvbmNBVCZZAAAAAASAAZCCVBMnvld>uglcccvvvcxzkgi;eajllzxxxxzljgi;rdkxxvbnnmmmmmm", "nbvcxlkhdatq3#>,@,7eyuaadddddauw=9uaghklllzllkga:ygzvnMNBVZZAASSSSSSSAAZCVBMmvlf>uglccvvvvcxzkgp:rahllxxxcxzlkfi;rdjzxcbnnmmmmmn", "nbcxxljgaie5$142#19rupaddffffaie=9udhjklzzzzlkha:ygxbnMBVCZZAASSSSSSSAAZZVBMmvzf>uhzcvvvvvcxxkhp;rajllxxccxzlkfi:rdkzxcbnnnmmmnn", "bvcxzkhdpt7%4774$20yiaaffggffapr=0idhjkzxzzzzkha>yhxbnNBVCZZASSSSDSSSSAZZCBMmbzf>uhzccvbbvvxzlgp;rdjlzxxcxxzlkgp:rdkxxvbnnnmnnnn", "vcxzkhday8&60q06%4wuaafgghgggdpr=0ifjjlzxxxxzlja>uhxnmNBVZZASSSDDDDSSSAAZCBNMbzf>ihzvvvbbvvxxkgp:rdjlzxcccxzlkfp;rdkzxcbbnnnnnnb", "cczljgay9*7wrrw8%5eiadgghhhhgdat-qpgjkzxxccxxlja:uhcnmNVCZAASSDDDDDSSSAAZCVNMbzg,ihzcvbbbvvcxlgp;tajlzxxccxzlkgp;rdjzxcbbbnnnbbv", "cxzkgdu0*8eyyyr0&6rpdfghhjjhhfat-qpgklzxcccxxzjd>ujcnMNVCZASSSDDDFDDDSSAZCVNMnxg,ihzvvvbbvvcxlga:rdjzzxxcxxzlkfp:rdjzxcvbbbnbbvv", "xzkhdpw=0ruiiutq*7tpdghjjjjjhgay-qphklzxccccxzja>ujcnMNVCZASSDDDDDDDDSSAZZVNMbzg,ihxvvbbbvvcxlhp:rdjlzxxccxzljfi;rajzzcvvbbbbbvc", "zkhdpw-qupaaapyw*8yafghkkkkjjgay-wahkzxcccccczkd>ijvmMBVZZASSDDFFFDDDSSAAZVNMnzg,ihxvvbbbbvxxlgp:rdjlzxxcxxzlkfi;rajlzccvvvvvccz", "khfiw=wiaaaddaue=9uaghjklkkkjhdu;wahkzxcvvvvczkd>ijvmMBCZASSDDDFFFDDDDSAZZVBMnxg,ihxvcbbbbvcxlhp;rajlzxxxxzzljfi;eahllxccvvccczz", "hfpe-wiadffffapr=9udghjklllkjhdu;wajzzxvvvvccxkf>ikvmMBCZZSSDDDFFFFFDDSSAZVBMnxg,ijxvvbbbbvcxlgp:rdjlzzxxxxzljdi;eahllxxccccxxzk", "fae-wiafghhggdpr=0idhjkllllkkhdu;eajlzxcvvvvcxkd>pkvmMBCZASSDDFFFFDFDDSAAZVBMnxg,ijxvvbbbbvcxkgp;rajllzxxxzlkjdi;wahklzxxxxxxzkh", "pr;epdghjjjhhfat=qifhjkllzlkkhfu;eajzzcvvvvvvxkf,pkvmMBCZASSDDFFFFFFDDSSAZVBMnxg,ihxcvvbbbvxxlgp:rajllzxxxzlkjdu-wpgkklzxxzzlkhf", "q-radhjkkkkjjgay-qifjklzzzzlkjfi;rdjzzcvbbbvvxkf,pkvMNVCZASSDDFFFFFFDDSAZZVNMnxg,ihzvvvbbvvxxkgp;eahklzzzzllkhau-wpgjjlllzlkkhfa", "-epfhjkllllkjgay-qpgjklzzzzlljfi;rdjzxcvbbbvvckf,pkvmMVCZASSDFFFFFFFDDSSAZVBMnxg,ihzvvbbbvcxzkgi;eahklzzzzlkkhdy-qpfhjkllkkjhfpe", "tafhkkzzzzlkkhdu;wpgkklzxzzzljfi;rdjzxcvbbbvvxlf,pkvMNVCZASDDDFFFFFDDDSAZCVNMnxg>ihzccvbbvvxzkgp;eahklllzllkjgay-qidhhjkkjhgdae;", "afhlzzxxxxzlkhdu;wahklzzxxxzljfp;rdkzxvvbbbvvxkf,pkbMNVCZASSDDFFFFFDDDSAACVBMbzg,ihzvvvvvvcxzjfi;eahkkllzllkjfat-0idgghjhhfdpe-r", "gjkzxxcccxzzljfi;wahklzxxxxzljfp:rdkxxcvbbbvvxlf,pkvMMVCZASDDDFFFFFDDDSAACVNMbzg>uhzccvvvvcxzkfi;eagjjllllkjhfar=9uaffgggfaiw-ea", "jkzxccccccxzljfi;eahllzxxxxzlkgp;rdkzxvvbbbvvxlf,pkvMNVCZASSDDFFFFFDDDSAZCBNMbzg>ihzccvvvcczlkfu;wagjkkllkkjhfpr=8yaddffdauw-epf", "klxccvvvvccxzjfi;eahklzxcxxzlkfp;rdkxxvvbbbvvxlf,pkvmNBCZASSDDDFFFDDDSSAZCVNmbzf>igzcccvvcxzljdu-wpfjjkkkkjhgdie*8tpaaaapuq-wpdh", "zzcvvvbbbvcxzkfi;eajllxxccxxlkgp;tdkxxvvbbbvvxlf,pkvMMBCZASSSDDDFDDDDSSAZCVNmbzf>uglccccvcxzlhdu-qpfhhjkkjhhfaiw*7eiappiy0=wpdhk", "xcvvbbbbbvcxzkgp;rajlzxxcxxxzkfi;tdkzxvbbbbvvxkf,pkvmMBCZAASDDDDDFDDSSAZZCBMmvlf>uglxxcccxxzkhdy-qidhhjjjjhgfauq*6wyiuyr9*qpdgkz", "ccvbbnnbbvvxxkgp:rdjlzxxcxxzzkgp:rdkzxvvbbvvvxlf>pkvmMBCZAASSDDDDDDDSSAZCCBMmvld>yflxxcccxzlkhay-qidghhhjhgfday0&5qryrw8*0uahjlx", "vvbnnnnnnbvxzlgp;rajlzxxccxxzkgp:rdkzxcvbbbvvxkf>ijvmMBVCZASSSDDDDSDSSAZCVBMnvld>yflzzxxxxzlkhay-0uagghhhgfdait9%40eeq7*9yafjlzx", "vbbnnnnnnbvcxkgp;rajllxxcxxzlkgp;rdkzxcvbbvvcxkd>ijvmMBVCZASSSSSDSSSSAAZCVNMncld>yfkzzxxxzlkjgat=0uaffggggfaair8%27095&8tpfhklxv", "bbnmmmmnnbvcxlgp;rdjlzxcccxzlkfp;rdkzxcvvvvvcxkd,ijvnmNVCZZSSSSSSSSSAAZCCVNmnvka>tfjzlzzzzlkjfar=9yadfffffdapyw6$,463%6riagkzzcv", "bnnmmmmnnbvczlgp:rajlzxxxcxzljfi:rdkzxcvvvvcczkd>ijcnmNVCCZAASSSSSSAAAZCVBNmbcka:tdjllzzzlkjhfpr=8tpdddfddapitq5#:1<$4wuafjkzxcb", "nnnmmmmnnbvcxlgp:rajllzxcxxzlkfi;rajzzccvvvcczjd>ijcnmNVCCZAAAASSSAAAACCVBMnbxka:tdjllllllkjhdpe=8tiaadddapiyr93@-;#29tpdgjlzcvb", "nnmmmmmmnnvcxlgp:rajlzzxxxxzljfi;rajlzxcvvvcxzjd>ujcnmMBVCZZAAASSAAAZZCVBNMnvxja:rahkklllkjhgaiw*7riaaaaapiutw7yhxbnMNBVCCZZZZZAZZZCVBNMmbczhp;eagjjkjkjhfdayq*5wyuiiiiute071% #18euafhjlxcvvn", "mnmmmmmnnbvczkgi;eahklzzzzzlkhdu;wahklzxcccxzlha:ygzvnmNBVVCZZZZZZZCCVBBNMnvclgi;wpfhhjjjhgfdpt0&4qtuuuuyteq73-oX*30ruafhklxcvbn", "nnmmmmmnbbvczkfi;eahkklzzzlkkhdu-wagklzxxxxzzkha:yfzvbmMNBVVCCCZCCCCVVBNMmbvxkfi;widhghhhggdair9%40ettytreq84:O%O-5qyiagjkzxcvbb", "nnmmmmnnbbcxzkfi;wagkklllzlkkgdu-wpgjklzxxzzlkgp:tflcvnMNNBVVVVCCVVVVBNMmnbczkfu-0udfggggfdaaue8%29wrrrewq84:+=;O:6eupdgjklxcvbb", "nnmmnmnbbvczljdu-wpgjjllllljjgay-qpgjklzzzzlljfi;rflcvnmMNNBBVVVVVVBBNNmnnvxzjdy-0uaffffffaapyw7$17qewwq084>+;,>@>7eupdgjkzxcvbb", "nnnnnnnbvvczljdu-qpfjjkklkkjhgat-qifhjklllllkhfi;rdkxcbnmMNBBBBBBBBBNMMmnbczlhat=9yaddddddaputq5$<69qq0974>+:<1,@,8eupdgjkzxcvbb", "bbnbnbbvvcxzlhdy-qidhhjkkjjhgfpr=0udghjllklkjhdu;eajzxvbnmMMNNNBNNNMMmmnbcxlkgar=8tpaaaaaapuyr94#>5798763:+:233<@<8euadgjkzxccvb", "bbbbbbvvcczlkhat-0idgghjjjhhgdpr=9yaghjjkkkjhgay-wahlzcvbnmMMMMMMMMMmnnvvczkhfpe*7riaaaappuytw82@:356541:+;24541#,8rupdghklzxccv", "vvvvbvvccxzkjgat=0yafghhhhhgfaie=8yafghhjjjhgfat-qpgklxcbbnnmmmmmmmmnbbvcxljhdiw&6eyiiiiiuyte071@-1342<-O-146652#,8rupaghjlzzxcv", "vcvvvccxxzljhfpr=9yadfggggffdauw*7tpddghhhhggdpr=0ifjkzxcvbnnnnnmnnbbvcczlkgfayq&5qtuuuuyyteq95,+=>1<,=O-<356651#,8eupafhjklzxxc", "xxxxxxxzllkhgdie*7tpaddfffddapy0&6eiaaffffffdaie*9udhjkzxccvvbbbbvvvccxllkhfapt9%30etrtttrwq973:O%-:;&O=,2466651@,7eyiadfhjklzzx", "zzzzzzllkjhgfayq*6euaaadddaapur9&5wypaaadddaapyq*7tafgjklzzxcxxccxxxzllkjhfapye7$18qeeewwq0964<-o#&*$o&:13566641@>6qtypadghhjkll", "lllllllkjhgfapy0&4wyippaaaapiyw8%30tuipaaaaapir0&6rpadgjkklzzxxxxzxzlkkjhfaaitq5$,690qqqq98641:&X+#@X$-,2346653<@:5qryiadfghjkkl", "jjhjjjhggfdapue8%29ryyuiiiuyte05$18wttuuiiiuytw7%4qypadfghhjkkkkkjjjhhgddaputw83@:36888886531>=#.oo.@&;,1334432>+;39wryipadffghh", "aaaaaaaapiutrw93#,59qweeeeww0961@:480qweereew073#,7qrtuipaaaaddddadaappiytrw084>+*,2333321<>;=$O o#&-:,,<<1<>-O*<579wetyuippaa", "rrrreeewwq98751;O*>24456655432,-o%:<3455665543<;O*,4689qqweeerrrreeewwq997642<;%X@&---;--=&$#+o. .XO@$&*=---=*$.@=>1356890qqwee", "::;;;;;;--=**&$@.O#$%&&&&&&&%$@+.o@$%&&&&&&&%%#@.O#%&*=---;;;;;;;;;;--==**&%$#@o .O++++++OooX. .XXoO++++@+Oo X+#$%&**==--;;;", "pppppiiuuytew061@;369900q099863>+=1578900009974<@;48qwetyuuuiipiiiiuuytrew0864<-o$-:,>>>:;=&#+. O#&=;>,<<<<,:=o&>3680qertyuuii", "ggggggfddaaiutq6$18wrrtyyttreq83#,60wertyttrrw95$18eyupaaddfffgffffdaaapiyreq84>+*,132211,:=%O.. o$=:,134555642,+;48weyuipaddfff", "lllllkkjhhgdait9&4qtuipappiiurw6$29eyuiipppiute8%4qupadfghjjjkkkjjjhhgfdaaiyrq71@-1455542<:=#.O+.+=>246789009962#,7wtupadghjjkkk", "xxcxxxzzlkjgfauw&6euaaaadaaapye9%4qyipaaaaaaait0&6rpadgjjklllllzlllkkjhffaaiye83@:2566543<;%X#%$X$:14690qwwwwq85$10tipdfhjjlzzzx", "vcvvcccxzlkjgdie*7tpaadfffdaait0&5euaaaddfdaapyq*7tafghjklzzzzxxzzzlkkjhgdaiyr93#:3676542>*o%=-&o%,4780werrrre06%3qyaafhjklzxxcc", "bbbbbbvvcxzkjfar=9yaffgghgfdaayq*7riadffggffdaue*9yafhklzzxccccccxxzzlkjhgaaur04#>367652<-O*:,>-O=169qertyyyyrw8%5eiafhklzxcvvbb", "mmmmnnbbbcxzkhay-qudghhhjhhgfaie*8tadfgghhggfdpr=0udhjlzxccvvvvvvvcxxzlkjgdaitq5#>366531-O-<221>+;48qetyuuiiiyr0&6rafhjlxcvvbnnm", "MMMmMmmnnbcxljdu-qifhhjjkjjhfdpe*9yafghhjjhhgdat=0ifjklxcvvvbbbbvvvcxxlkjhfaptq4#>36641;+;14553,@:50eryippppputq*8yagjlxxvbbnmmM", "NNNNNMmmnbvczkfu;wpgjjkklkjhgfar=9uagghjjkjhhfat-qpfjkzxcvvbbbnbbbvccxzljhfaiyq4#:2442:+:2567751@,7wryipaaaaapyw*8udhjzxvvnmmMMM", "NBNBNNMMmnbcxlgi;eahjkklllkjhgat=0idhhjkkkjjhgay-qpgklxcvbbnnnnnbbbvcxzlkhfaptq4#:132:+>36899973#<8eyupaaddaaaue=9ufjlxcvbmmMNNB", "VVVBBBBNMmnbclhp;rahkllzzzlkjgay-qifhjkllllkjgdy;wahlzxcvbbnnnnnnnbvvxzlkhfaitq4@;<<;+>479qww085$19rupadfffffapr=qpgkzcvnmMNNBBB", "VVVVVVBNNMmbczja:rajllzzzzzkkhay-qpfjjklzllkjhdu-wahlzcvbbnnmmmnnnbvvczlkhfait93@=:-+>480weeew06%30yiaaffggffdat-qahlzvbmmNNBBVV", "CCCCCVVBNMmbvxja:tdklzzxxxzlkhdu-wagjjllzzlkkhdu;eajlxcvbnnmnmmnnnbbcczlkhfaur92@**+:380errttrq7%3qupadfgghggfay-wahzxvnmMNBVVVC", "ZZZZCCVVBNMnbxka:tfkzzxcxxzlkjdu-wagkklzzzzlkhdi;eajzxcbnnmmmmmnmnbbvczlkgdpue7yfkxxxcccxzljfu;wahklzzxzzlljfi;edjzxcbbnmmmmmmmnbvcxzkjgdiyq6:oX=37qrtuuiiuyr9&5epafghjjjjjgdi;rdkxcnmMNVVCCZZ", "AAAZZZCCVBNmbcld>yflxxccccxzljfi;eahklzzxxzzljfi;rdjzxvbnnmmmmmmnnbvvxzkjfair93* #,60etuiippiut0&7rpdfhjkkkkjhdi;rdlcvnMNBVCCZZZ", "AAAAAZZCVBNmncld>yglxxcvvvxxzkfi;eajllzxxxxlljfp;rdkxxcbnnnmmmmnnnbvcxljhfayw7>oX*39eruipaaaaptq*7tafghjkkkkkjfi;rflcbmMNVCCZZAA", "SAASAAZZCVBMnvld>uglxccvvccxzkgi;eahllzxxxxzljfp;rdjzxcbnnmmmmmmnnbcczkjgair91@*+:5qryiaaaaaapyw*8yafgjklllkkjfp:tfzvbmNBVCZZZAS", "SSSSAAAZCVBMmvlf>ugzccvvvvcxzkgp:rdjllxxcxxzzjgi;rdkxxvbnnmmmmmnnbvcxlkgdayq3#>,@,7eyipaddddaauw*9udghkklzzzljgp:ygzvnMNBVZZAASS", "SSSSAAAZCCBMmbzf>ugzccvvbvvxzlgp;rajllxxcxxzzkgi:rdkzxvbnnnmmmnnbbcczljgaie5$142#19ripadfffddaie=9udhhklzzzzlkga:ygxbnMBVCZAASSS", "SDSSSSAZZVBNmbzf>ihzcvvbbvcxxkgp;rdjlzxccxxzlkfi;rdkxxvbnnnmnnnnbvcxzkhdpt7%3774$20yiaaffggffdir=0idhjlzzzzzzkha>yhxbmNBVCZAASSS", "DDSSSSAAZCBNmbzf,uhzvcvbbvcczlgp:rajlzxxccxzlkfp;rdkzxcbbnnnnnbbvcxlkhfay8&60q06%3wuaafgghgggdpt-0ifjklzxxxxxlha>uhxnmNBVCZAASSD", "DDDDDSAAZCVNMbzg,ihzvvbbbvvcxlhp:rdjlzxcccxzlkgp;rdjzxcbbbnnnnbvvczljgay9*7wrrw9&5eiadfghhhhgdat-qpfjkzxxccxxljd:uhcnmNBCZAASSDD", "DDDDDSSAZCVNMbxg,ihzvvvbbbvcxlgp:rajzzxxccxzzkfi;rdjzxcvbbbbnbvvcxlkhai0*8rtuyr0&6rpafghjjjhhfat-qpgklzxcccxxzja>ujcnmBVCZASSSDD", "DDDDDSSAACVBMbxg,ihxvvbbbbvcxlgp:rdjlzxccxxzljfi;rajzxxvvvbbbvccxzkhdpw=0tuiiut0&7taffhjjkjjhgay-wpgklzcccccxzjd>ijvmMNVCZASSDDD", "FFDDDSSAZZVNMnzg,ihxvvbbbbvcxlhp:rajlzzxcxxzljfi;rajlzxvvvvvvccxzkhdpw=qypaaapyw*8yafghkkkkjjgdu-wahklxccvvcczjd>ijcmMBVZZASDDDD", "FFFDDDSAAZVNMnxg,ihzvcbbbbvcxlgp:rdjlzxxcxzzljfi;eajlzxccvvvccxzkhdpw-wiaaaddaue*9uaghjklkkkjgau-wahlzxccvvcczkd>ijvmMBCZASSDDDF", "FFFDDDSAAZVBMnxg,ijxvvbbbvvcxkgp:rajlzxxxxxzljfi;eahklxxccccxxzkjfpe=wiadffffapr=9udghkklllkjhdu;eajlzxvvvvccxkf>ikvmMBCZZSSDDDF", "FFFFDDSAZZVBMnxg,ijxcvvbbvvcxlhp;rdjllzxxxzlkjdu;wahklzxxxxxxzkhfar-eiafghhgfdpr=0idhjkllllkkhdu;rajlzxcvvvvcxkd>pjvmMVCZASSDDDF", "FFFFDDSSAZVBMnxg,ihxvvvbbbvcxlgp:rahllzxxxzlkjdu-wagkklzxxzzlkhfar-epdghjjjhhfat-qifjjklllllkhdi;rajzzcvvvvvvxkf>pkvmNBCZAASDDFF", "FFFFDDSAAZVBMnxg,ihzvvbbbvvxzkgp;rahklzzxzllkhau-qpgjjlllllkkhfpe-radhjkkkkjhgay-qpfjkkzzzzlkjfi;rajzxcvvbbvvxkf,pkvmNVCZASDDFFF" }; xscreensaver-5.36/hacks/images/tunnel1.xpm000644 000767 000024 00000012455 07624345300 020622 0ustar00jwzstaff000000 000000 /* XPM */ static char *texture1[] = { /* columns rows colors chars-per-pixel */ "64 64 64 1", " c #1b0b06", ". c #2a160c", "X c #2b1c15", "o c #34180e", "O c #361d16", "+ c #280d07", "@ c #382718", "# c #2b2416", "$ c #392925", "% c #3b3426", "& c #4a2918", "* c #472c24", "= c #483728", "- c #573729", "; c #573c36", ": c #493a35", "> c #643e1c", ", c #4a1b15", "< c #584738", "1 c #4e4431", "2 c #674d38", "3 c #605c28", "4 c #595248", "5 c #5f4a46", "6 c #655448", "7 c #675c52", "8 c #6e4f46", "9 c #6a6457", "0 c #766b55", "q c #797065", "w c #3c4e24", "e c #867a6e", "r c #907155", "t c #958a76", "y c #8e8a75", "u c #b5a27e", "i c #a59a71", "p c #9b9787", "a c #978c81", "s c #9ca68e", "d c #a69b88", "f c #b49c8d", "g c #a9a286", "h c #aca693", "j c #b5ac98", "k c #bbb499", "l c #b9ae8d", "z c #b9b5a7", "x c #acadac", "c c #c4ba9a", "v c #c8b18d", "b c #c5bba7", "n c #c3bcb6", "m c #cac3ab", "M c #cac8b8", "N c #d4c5ad", "B c #d7ccb4", "V c #d8d3ba", "C c #e8d8b9", "Z c #e4da9c", "A c #d6d5cb", "S c #e8dcc8", "D c #f0e9d2", "F c #f4f4e9", /* pixels */ ".:&=<5<:::<=<0evnBDSSSVbdaivnbCFj=*47$=:78ti0eetqAbBgbhMNBvldhkh", "*$@@$oOO@O#:%**:eMzbbMBbfhdhfbBAh=@15:#X%287=-&*r80sDDMcBCmbbkbbkVm", "5O* X$.$%1<:$..4xzkkkxVVBttdhhhe<;&&&;02<2&&-8esFFSBlmcmzkjmszk", "*.$@@=##@X@:%#O@9jghbbskBjdadkhhp2*o=@><-<488:5ehFFSBkBmzmbzbszp", "=@*O.@$=O@#oo&X$9zmkBmkmVMmgpxjxq1. X&;2<<<@2=2raFFFBulBcbcckhhg", ":#XX@#@@o.@X#$$$7kzhcMbmMzziaspp9@$%=X*:1=,*52&8aFFFFCSSCvuccxhh", "X#X##X#@@&=:+#%@7mBdgbASzAppqeep4%:@=$*---&&<--6eFAFDSDCDCbckAhh", " .#@@$@%==:60@XX1gkkhmAAnzsaeeasq#@@#$OO=@$=;=@qjAADDCCCDNbjxhxp", "149900tyfeyuht976@=97eetqaqq9q9999qe0ihkhyghjpilaq7:6evbbfvdtteq", "*=15<2@@#=@X=4szzMmlVhSCclkNAe=$*228*62&.@#.@", "1fNNNABvbkcbFCDDi<262:-7;*:$=#=<=7-*4;%", "3hfjlubBABSMAbuv9X*=15*,<**@@*O19nbzzMSmbjzAbdpd4$@#. ,@-2-2=:->", "1pdhjhtkbBSNbdph7..@o:5:%::<+.@*4ABAMCzndhxzldhgqX.o,,&2-;*&-&-<", "1yadgjmBNcvbjpdh7XOO*::%@@,@O.OO0MBVVVBbjznzfhdd9.X#O*<2-,;-2226", "wyyydhbBANbjsfph7..XO=-1:$OX.+..9MmbVCBkhbhmhjdd5 .o.118-<,*0338", "wipddjfbBNAzhdpd4X O$*$;4%X++.OX5mBSmSmblimbjhdiq@o@&*22>2,>2>2-", "&tkdtdjzbMzhsihp7# .O#@:$XX@O.+X6bbBmAzztcjjhhhjy*2<**->*&o-2212", "%pdtptpzhbhhhxhpq.@X..@%$ X +X.4xghzjbbphtlzjndy@o-=ooo,=*<<2--", ":ggdatddzbjfpaye7 X +$X... .$X4jhhhbpapphdbjzAd=o,Xo o&,&<8<<", "1hhzjfnvvzaysdye1. $..$ #. X XX;dpbNbhddgtkjghxq=Xoo&#.o+,@13<-", "%jhlnbMnnhpaddey4 .X #$+ .+X# c #495956", ", c #5b635a", "< c #586965", "1 c #675a45", "2 c #67604b", "3 c #686857", "4 c #75654e", "5 c #776b55", "6 c #7c7059", "7 c #797666", "8 c #6d736b", "9 c #445e64", "0 c #74807c", "q c #7c8882", "w c #84745d", "e c #8c765e", "r c #846a54", "t c #8a7c65", "y c #947d65", "u c #847e74", "i c #8b826b", "p c #898675", "a c #98856b", "s c #948974", "d c #9b8c76", "f c #9c927b", "g c #a58d75", "h c #a8957a", "j c #b4997c", "k c #a4866b", "l c #9a9686", "z c #90948a", "x c #9ca09c", "c c #a99984", "v c #b49e83", "b c #bc9e83", "n c #aca08c", "m c #aaa397", "M c #b4a38c", "N c #bca68b", "B c #bca284", "V c #baa995", "C c #bcb29b", "Z c #b8b3a6", "A c #c5aa8b", "S c #c3ad95", "D c #c9b498", "F c #d4b99a", "G c #c8b8a4", "H c #d4bea4", "J c #c4bfb0", "K c #d9c4a9", "L c #d7c8b4", "P c #e6cdb0", "I c #f3e8d1", "U c #e1d4c3", /* pixels */ "XXOOXXXXoXX#XO@#XO#OOO$#O$##$$OOO@:0ip8O$$OOOO$OOOOOOOOX+.+++++O.+XXX+XXX.XXXXXXO+++OX.XXXXX.OXXXX,8-XXXXXXXX.XXX...X.XX.Xoo@X.X", "OOO#$==>>::,:,<,,,:,,:,:,<8<<8,,:80s00p3:::>==#--$;:-$->$$$$@@$O#$#O#$O@OOOOOO##@+O+OO@OOX.#XXXXO>888;@@O+@XOX+O@#@X@@@@=@#====#", "XOO$:=@>->-:=;=,::::<8838738838u63706:3,;3,,3,<8338<368833838833,3<3873<8833888<<88<3<883,<<,>,,88783383,,,,,,,,,,,:>:>>>-;>->#O", "OX@8mJz7:,<:,<833888z7878<877uz8,3%200l0p03070888833<,,<08,23,-83,,,,,,>,$,,:3:,,,,,,:---:::-,33,,33:--:,;:,,,,,3,83383888838<>X", "<3slcmllllmxmmmmGmVSmVGJCCCSJCx;--,0JFLLKKDDPVDCKKLLKDKGDCCnVCCKfnCZGGCmGCZVJZxmCZlllzlmmzxlzx0:=-,8pxlzl0nlllzxxzpzulzzzcxusuu8", ":,sccllulvcSccGHHSSHSHbGM3-37:;%-;:8fDDSDDFFZHHKKCMKGPKKPKCLLUKFLLHLKLnKKSLScHGSDCGVmLCNVscSs&=+++OlV5lhVnCMGVVVmGGVVcVmmMnSGcuu", "qslluyscCcvcVSVDcMgclcMASt;3-%8=#%#7Vc4nfMghhndMlhMst6lsn0isis207;fNcawdVCMChsasVSCDnfidMKMhfs@@+@+laKSnDcDhjNccdvallheySMMyccuw", "ulVulzcyytacttdauycuySVcggGatcdX$-#zKMFslnMediahfhc6clfaf36nipff3iddinnaisitMsf7iwuiMs8dGcdu62@X@@@fNadjdcydhdttlslcvhchyyyyuwuu", "uwu5zsdhVglswccccMadcdf6tt7DsclX@#$zKhhhagjjjchnNhhViaasfMMnhdhiMdchaNdhh6cMdvhhNsicaicChSdSin-XX@XchggggsnanacccNchslffdlcgluz7", "wullnycctuhccSdscscehfhjds7ttp6X+@@mSAdjDAhbABcienddDdhDniiaNwgjfiaawdhhlcsaDggcchMapfDVFcssa6XXOXOmVjchMggdccNhcyvcccvcvuglynly", "cyctsdcsfgyygircwiiinHhMSadn2ipX@$$LNjhhgjDbjheMNDSaaaDwaNjheVaf4gh6hhi1iwhaBhhh6addiwihntiiNt.XXO%nhjjghjhjhfVhMtahfsahcngdgsgs", "VugyftftgVclhhsccGhnM5nhawr3o58XO@#LadAASAAgghMShNnhjNhgDdhaMiaFAhMFSBSSDaBSjhgAhnjMwiiapliyttX.++:ZBBNvhgcgvMcvccvscccdcglgydly", "ulttslscMctsudldafyacnihwsM3Vi:O@$@ZhHjjagADgBkjjgjghBaiaahgnhhjveid6adahghkjjkjgaygjc7d7icDS;o.+O8GSjgjaccdchdhhddckihddcfhlugd", "lylgddtd5tcasdyCditah1MMdnncd&-X@@#ZMDBAMAgkjBAAaDajjaihCgajCADg5iAihhaNhBBhBagjwgaMDscMMnchg;XXX@3GSjhjaggcghtvyhgscccsSylctnsc", "gnluwgcdfhcmvMvhtclhMjhid&s7c>-X+@@ZLAhghjjgDgjeMaNMMDgh6haMjj5;6ahidjNjrjNAjhyhSgt5a4sVGscat2X.+O,DMgjNghvvgchhshhvvidtacgsdtyd", "dt6tactfVtdhssdasfansicincfth1;oX@=DDjhDagAjyhjVajjjBahaNhn62hsMDji5hh6iNjgkjkDrghVKNcsNw7ihd3X.+#,nhgdhcdddadpiahghvdhccfcffhvd", "2sdflhss6dcwtdtsdcMhanwc6iahDn2X@@@GGycggcNgbjjhgvFjaeMAhhaA4udgiadNMgMggyjghBaAjk6*2csstdmcd8Xoo@>SMbggedihMassgcgktcdndaisseud", "sfcsdiwsncdaasgtcddMlhMMamthh2=XO@@GFbgygbbbgbjkvMaakahgB4dtSMrhVehgcs6HDaihhajhjkaKjaGMKstp53XXX@=GNgygMcjhtghdcf65cdaahhcciufw", "tdcaiMfwtdsaVatdifdjahCaM6nsdf@O@#XJGcygMgyvahjSSgdhNBNd&aMttrvkiFFcwwV4;1VNkBrgjhNiaM66tut3t%.XX@XVbycjavgNcccdtsfffsddacapadhM", "diahdhijnatcians6Mi3indadfhiht3O@#@GAyHygdMttbggaavjagggfVdcSMhthi6hPh4npiSahhasa5aha63ivNlvt;X.XOXmgchhvchghagvcthcgdddchhftsg5", "cisahhldhdidVMhCDnifmfahnMMdhv&XX=%GbFyybaykHvgjgFagnddgDgig65igacVa44Mw5Vy5n76666adaffAHctgg;XXXOXmAhyyehcvaca6bcdidcdstshdniiM", "6schiwdwntnMwahtawai5anhiiadhj-OX##mFgvbjyADbAgvhhahaaAjg45gChyiahawhhejaAMjh;i5fwsaffwhc1ccl:XX@@Xcgagvchbadywc6yhsth8ldgsaaica", "wsaddeiafahwaMdiadaMChjCwhnCMh%OXO#GAbcjhSgShvhv6kNhahjtaaANhaNNt5gVkhacaihheNhMsiagNMNMVMstc-XX.#XmgyhchcycctNaMic5cs5cdcydfhid", "DsisidfceawdcMwadFjn66niShVwth&OX@@HFbccykvgbhvwShaawwi6thwtiMwgNggyjiaacaaaa5hjDjNhawhahh1swXXXX@oMchhhhchvhcwcthdcvtccchnassii", "ttc5ccauiicjdisict3;sccafnacngtX@@=UHSbcjVbjekyhaat4jFjavgVhNtaceaBawcVgvdMghjahhaghafScVMsfs=XXXOXcMryVaaMyMegcivaicahgistddwss", "Mt56ligyvhcaaMdatf1lthgch6NdMg5@OX>HbbvyhAjkkDnhaiNDhjhhh6duytdtai4ahadecadwSNcfwdwsy525gtist3.XXXXGcvgcwDMMeMgtftihgtcldfhvdgha", "tifMtthvsccwcwdvNccsndudycSgajw#@#=HPKyvdajaBaghejasghgakDdthsMtdMidgaaDdnNh3;1wwf6CDnnhh83ty:O XXomgygcBaahtadcdhcdfcdcdcsdyffs", "6cttn5ctst5ttscdbvhMhcvcccvddNf+@#=JHgSbajgghhBaeAciaBMSttdhatitaihDwa5t1dtntchvhsVi4wMMcvdcf8X.OX@VSgygtdcdcaieasdhssyccchdzydf", "cifsssfzststcdBNtdffhs6tVgvadA2@X=@GjghgCnhdaakcBjagh5ctMdtdgMNnhhg6ccDhSc4avv6iaVjsfniMscdvgfXXX@ocgyjjhacidlcdhdtcggchhiycscgl", "tctfifd4afacnNgdDhutcfcpgNdScN2XX#-JSFDdfgagacMaecDggNggecsghaytah6sBSitgwcvhg6cag40i6ai1;uft%XXXOXNDewjyvMSvctstsgtcscgdlcsdhsf", "mtcsfauhnMcfc6Sau57mthcdcMDaVjc-X#=GHbaacDggwaghDtehcccgetydgwVg7htMedicjNSgcacsfsMcNhhfcGcts5X XOXSbAvghgtdtssdhdclachccahisacl", "slccfddsatdftdrdlwVcf6ucHcartbdXo@%SjbNVghhcVGehaaVdtiasynMMctsctghcA6Miy5edtMct*wwf0wMhwvcvc&XXXXXnbASyyacdsiwuchyilhayfdccfacg", "t7fwthasCsiddcft7cw4uwdhpwVlVF5o+@@CSgScgvcjStVhNcjcvMGvVghcafhafSdccMrlcccvCdwhVMgydcgtgc6hc5X.XOolFbycccgydycsttncdtfclcdpfdia", "clcsVdlcidtptissmcwZsncsdiadteh+@@@cASjgcfvjVeaDacNchcytVcMd5tcncatcshgytdhtcyahctlgaMdac4ss6-.XXOXZbbyegMMguchsvlsycccfstsdciic", "6gdcdtwttsMhsccffhfiuscMsmmcnjs++@@mgkghhcuVhScMDcfdMtVncastVVjifsccassVcVMchhDgcgcclyysvcScc;..XO@GSyyMyyccccdcs6lgfauscccfcscn", "ccdsgsdmccsualddhMidncMhflKsdhioXX@nFAjjsdchcsSc73hVvfaChMcmaiMacdstccgauwt1fwdceec6cydcyNyt3-.XXX@VbGuSjgyuvssdccccfstsctltscss", "snssscgutddtlMcndHhldfnsfi4Mhido.X+fDbjadjVds6&t6ifcddjadcsctvaNcyptw6MawvdVMhtgSccSvvSbNvjc73X.XXXVguMyAbccueccudfdffsclcchsdfd", "nyyssdlvcccSccdti6fhhAisljVaaD&+.@OfubAje5wdanKVLD6ijnCniGgAFNSANhvSDHjVhHvcMMVDbvNySutd5Mct5;.XXOXmbbevcctGcNycvccccfNcscsdtdsa", "nlldtutw6wi61afVNi3taictfeeVa5+.XXOps6g5thc6dcyyjdsdhhMNcchvtitwadNidyahNAaaaMaht5t7MvdgVMaal>XXXoXmvygVagcMbcbcidhfpdddfshhfccd", "8553533323;333;2;&&-&-&;-%;;+o++O#X83o@%%%%@o%2ldafii522&3556tyHtisc6p7s4uii6piw7ydF64s&%;ac;@XXXoXmcVgycllgygldfspttutiuiii0667", ";=%-@@+@X@====%@#@#@@#%#->=%-=XX@#O38+@@@@+#@@+o++++@+@@##@%%+@@+@+%%%@@@@@@@+@@o=X%%:@%#@XoXXX.XXoz42&112=;%@%%&252;;-;-;-%-;;;", "XXoXooXO@@+X++XX%@###%@#;-#-=XXX@OO8;73%%@%@@=@%+++@@@#@#--@$@#@@X@%#@#%#=#==@@@=X@@XX#%X=@X%#X.XXoz,+X@+oXX+ooo8XXoXXoX..ooXo+X", "XoX.XXX+oXXXXXXXX+XoX@+oXoXoXXXX#@#@.@o@++@o++o++++++++@@@@@@@+@+%XX++@@@@@+@@+@XX==%XXXXX@OXXoXXOo=%=XoXOXoXX@XoooXXXXXXX+XoXXX", "..o.oo....o.o.oo...Xooooo.ooooXXOOXooo.Xoooo+oXXo...oooo++Xooo.oXXooooooXXXOoo..oXoXooXXX...o.o.OOo. . . ...o . oo . ... .o", "o X.........o..o.X.X.XXXXXoX.XXX@X@XXXX.XXXXX..oX.X.OOX+Xo+.......oX.o..XX...XX.X.X o.o.. . ..XXOOX. o .o . o ... . ..", ".....X..XX.+.XXOXXOXXXXOOOOOX#O$$$##$++OX@OO@OXOOOOOXX++OO+OXXOXOXX+XXO.O.X.XoX....XoX..X.X.X.XX.X.o . . o o . ..o.", "XXX+>>>>>$>9,9,88<,,<<8888888z89X#>8ZUZ0<,-->>>>#--#$$$$$>=$-$$@$@$$@$@#$OOO@$$#OXOOXOXXOXOXOOOXOO$O>,=XoX#o..X..X..OOXO@X##$$#.", "+X+8038ppppsmmmpmmmlCmVGVKSGSccHfmKSciMKLGcJZmVZZZKZZZZLLZCZZUZGZJmZZZGZZZZZZmxxxmmxxzxzxxzxxq#O#9>xUUUGZxzzzu0u088878888777u7#.", "XX,Z3sVVMJGgSDPDHLbcGSHDHDDSDPShHDSdcGNSjSDcybyFSbSMytydsgjkhhctw7wMMayyMrgrsyNbFvFPPDhcMVSyyvu=uGcLecclrcbbMDSvSVcmVDMMVGGGMfXX", "XO8spvNJGvhVHSVcvcVHyLVHDHAKgheShtvyVNDHULFPHSKFAPSMDHLHHDKHckVVPKFPbDLLGLHLiuDcSAaSgHHGPSGHclyGHwccHHHSHHPGHcc7tnc4Vigacygggu%X", "OX7tgHcdptmlsslncccMyccDcVHaDvmcNztSncVyscPyvKDDbyMycycagvcvaGPBwFMccvc2u1yNgNHDHGvjPbaCyudvGHwwmmSGcgdsltVSHHMhwlyLtVVcdsscv4oo", "XXzcFyczyhyastdVnycuSbgl4f7amAsScvVceVMsVtdhccgygMVSSdgMSu5djvwNhcs5vCVwGcMwtMaGhHvhjhMnclcMmlMGgJVlwcrllecccbMVSNGcdhMfwcVNs2X.", "O@VgFgtltDCcVdVitdnnclgcVnSnDGSMMVylmvcwVcsDSgMMhSjcbcvvaVcVNvckcgbSGvghbvcgstcvcvMSNSADNSymyccMGVcyycgAgGVcclsscvcdMvatcgdvt=XX", "O=GcSccctftttcfVmStylgcliMcwMtaccyyyySccacKcvMhMShddgcbAjtcg6chDcVghdtNgVAvgctSNMavecvAvSScSVcrvrgymgJgccyydcsygcchcddMcs2cgy;XX", "X-SyvccucdtilccansmccMvMKchdaVchlyGlbvgvhdhuyhMVjdkSDyySccahSyctdgdgVNjNahy5lbDSNraSyASAVNScgVVcgdywGycdytmVyVVngccccf55tDvNw&XX", "@>Zbvy5yn6pcMsMcacdfcSscwMVDGhhsMccncDSgaNccNHNiasbcDDHcNydMcMhvVGShgyvASGassVAgMhGahHDhySuGMVcgcynVdwygcGSychscdaycuwasVyau2X#X", "O=cgbydsctmffcddcdfdC4MMMhc4thcNctyyvNaGMiSAhh6cVhftygySBhhcydbhADMNgfSadyNaMgDDec54Mhh1c5uvlruclcaydcSvgSgbjsccHdaChSMctitu3@XX", "@#lSGvcldsycn6scslMcpChnaMcfccadccgHhMcaMchhtccyaatvDVVh5MGDjvBvA4sDrMhyjgvNVgvrtgch4ec3ucHvchgcswdtVcyCghySaMfvcshaVt6ws6lc6;XX", "@XsvgdtuivlacsMdMds6hwStwdMhMdMFVcGcCdtfaSvGhSScNcNvgyDyNBkvSjhha7lgcDjhbehSyAthSbSFPFDhUcgSSSSSgaHacscsdNvgdtyccwtf35lcvsftt@X.", "OXzgbhscdlMMaCitstMgcdhMnMMVwaadcc5cccgGSNhhVtchvGHNhjvAgaGBeAgaHtuytgvStSGyhKckhgDhNjwagrcScgMMvcgNyGySvaahhcceahncccdtstcf5=.X", "#XpvcrflissdfcincchsMdCVahhaDCMVVvSdydjDSSiSNGjDhaytnSSe4SddSSvcNitdatchkFbghaaLSSjVhhcVStSctVcdctMgdahtahgVg7dMVhattyvcMsccu+X.", ".@zcv6dfdccVMvMVacSVcNcatsadjehhvcwVdaNbijKCkhSAjShyMhhcvAvayaMvNNcHMMjcdycGjASaSHva4jSNadHyMVwyh6scdh4yMdy4yhdsjcSacdtptff65@XX", "@XuccthcsccsdswccVgiMhaSKLLSiaCdHgKyNujcjggdtDcaFhMVSdighAbSHSyAhhGScSjSaHcjvNHNMdvcSFNvSMyaghwVszVvaMSvjhSjSdcdVatthdgcmssst%XX", "XXlthhVsfiaccsCaiaMcnfMwngjnMVhhgvlsMMftvGtSwhdNyVjjaGGDSDcMSSADvvbtgaSSNSDAAv5jaagycMgvbGHHNKHgvtVNcdddaiwacivcNchvVcMNttsct@XX", "O+z6gcwztsVMaacsMfhMetsjPBghCNSGa6VtctmcFdhSNSchAgvNtNhADvg5jhvDtHVNcNgkyg5ucgSjSPSHGtDSgVMdGcyyacywycygNgbyycahgtfdtypsfc5h6%X.", "XO76VcdtmftdMMDVMahMasVaBFA66hihMGcGcccjMSMgBggcdSSNSvahAADPFcvyAFScVacbghcbHcvShgNyhbGyyMSctycgggkbVyjctyhjhhjMcLwtcMaMhasi6%XX", "O+pyBtcMi6nnyHvDdaScVMSaAa23iSFDgacttdSLtVhSgvFSvjahvahvyevFNvADvNASaaGcuSvFawDabvcNVyyHGcggAycttccDtdhattthiytcattvMdch6usc3%XX", "X+pvShta6tcinchtwsnsgNaNh62idnaScyfdhchwDhaNVvhjgNA6GcbaGbAjwhgjvvdhGaagDSFNNcaycbbgMDGyhyHNdgyvSgygatvvcvNNdtytvhc7gidtctdv5-.X", "X+zKy5ssinchii6t7dsdGhSdaGCgDMhncsVwgNDDgaaStcSDhSSyavNhagjyvwftdgVdyHMySAyhtVgcbgtdhlgbgcb4bSSvg4vStVt1iiSgggVidttcySdvnddu5%X.", "+XibncMgsavtcvn5picSMgjMVehjM6cDcMyvKLHMhdScatcrda4bShdeFeAbggDgNSSdydySStvgywjgFvaywt4gegbDcc4gVjagGycwcakNMaMdcatcachdddsf3%X.", "XOpgsctpmcdMhcs7sfLSDMSjhhALhdHhyvcSMrg5tiDBvhdcvhgkFSSPhvjgAbDjPyddbMyaebjaDKguggvSHDMjSMclycuvaAVysckcdahatgidVhDMhMguagdc2+.X", "XO7af5scycgcMcthdcKDwMNhVKSwSKhNGawwNSMLKKSNMDvhcGaKgkaawbFbgbAagccjHcuSddArDebvSgljcAbMSKgDvybyatwacajhgc4d76aMggctsaMcSsMc3X.X", "#Xugccc6MMddhssGVLDwifhMhniNhhhDyNNDvvAbddyyAaNhvvSttSSSAKajFMhASycgy5bHcSbysMHMcjaSckFbrNvhNDjnNjDadVvVNvDi5wnaccdfcifcdaa7;+X.", "XXughdtddhcflcdDNVtjVKgcjjhMDfjhCyaGgVDNMaShHvS4gcglMSFShjAMjDgBgjvgFgbeybjGSrgydHbavStgSgNNccNvycyavNg6MySbhDg5ccicMMdccsnw;O..", "XXzHatd6VcccaaKDBidMiSVhMCDhhCShcc6tcMacScFFvvvDvNgaKHjgahnhKaehbHbcchScvSHabLAGSgMMSjSgNPcMMSVhyNcvhvdvhjvhhgvVafhadaNVtadu8@..", "XOubgdtfsdffhGtttdjnhCcSjnhgjgFwcaHLKSgvyNh2aGcgdyFHAkMhBNhAjcVjbycbSFAKNSkyreggSeyHGrbSScaedthnGMgNDhbgvNcMcvctsvcGVcMhddiu2=XX", ".OpSatwSinchScaiVNMGhcNnjDjMnKAhGSSNgSAvLKSnygtSHSyt4vcFMMeiSajNFSjSgAArkHvHGFGvbVScjKFDgcStGLVKdtSGchDcVFcvS5cscfdtfccalca7,O.o", "XXihw6MisD6hiVcMVcMjKVDdAaNDnjDFbcDNSSjHgldyDSNggggDSbdkFKHFkFAjygFgHSygAycSvAyvggggbccyhGHcasi4tGv62tMttyantsVssccvatscfwci@+..", "XO0AdacjnaancdfVchVSNMKNMVhidhNaSSvavgGadchVASVvjMbSHkgciawFDjahyHSvdHVFSMvNggdgvccHyVccVNjtVMmhDAstclSvyccgccaccfS6ddfa7cs;-X..", "XXpNsnDVMcMMMNcShGdGhcBNHDVGPLhKgGdcsGggvgcgSatAKNgMybLdgCnaABhkjkyaMtvDgyFDPHDHgbjPPchDVFvVMa6MKa6PhdVgglVSvcdctcShnDhcMas63X..", "X#pN1rttsyffstcaVSFhDSnKVhn66iwhScyJChSSPDnDKHADgjPSjSjcDgFKDjKDAbDKMgDPKSNhjihiDFNhaKjhVhgaGLiSafhhFiichiMtdVtmaahcccahwc7t,=o.", "XOpVultt7u723;1722;;;232266;,;06343542d6a6pt45iwaDfhsasNKVhiMBaiSDjtwtcafdwhei0lBhajniiMjnFShHKKnpDNhCKCaDDMNhNvcMS6kii572;%-%..", "XXzs7uut7333883>3::,,,:;;--;>,::--8:;-=%-=---=;=--&-&%%&;&&%%&%%-;&&@@=-%;2;%&-%&;&&%-%-;&&&22;&&%2%&&;&%;%&;3;;i127;3533#@+O-.X", ".X85,257,33,,,,3-;;-;-#%-##--@--$==--#,=%-=#----#=-@==#=@=@#$%@%-#=--=@@-#@@#%z-@#$$#-@%@####+XO+@@@@O@@@#@#@@@@+@@o@++X++O+XX..", "XX8=#===%%%+%%@@@@%@%X@%@@++@@+@@@%@@%@+@@@@+@@%@@+++%@@@@+@+@++@+%+@%@@+@%@@+-.@@@@#@+@+%@%@@++@@@@@++@X@+@OXX%+X+X@++OXXXXX@..", "OX,@@@XX+O+XXX++X@++@%XX+o+o++++@#++++XX+++++++o+ooXoXoXo+++o+o+ooXo.o@o+++X+++++++.+++++X+X+o+XO+++Oo+ooXo+oXoXoXXXoXoXXXXXoXXX", "OO$@@XXoXX.OXOOXXOXOXOX@+O@++@OO@@@@@@++@@@@@+@+XO+O+XXX@@+OO++O++OX+.+.OXX++.X..+.+..ooXXX.XXXX..X.......o.oooo.ooo.oXoXX..X.XO", "$#>0z,@@O#O##@#@O##@##$$#$#$O#@#@@#$@####$#$$$#$$@O@##OX#@$$@O@O@OOO@@OXOOOO@OOOO+O+OOoOXXXOXXXXO.+.......XoXXXX+XXXXXXXX.XXXOXO", "$87zizp0z7708zzzxzxzzzzzzzxlzxz>++#-zxZl0zz7<8883<3>:>>-9>>:>>-$$$-$$$>9>99>$O$$$$$$#$$O$$$O##OO@OOOOOOOXXX#@###$>=>::-,:::3,8=#", "z7ZLf5307:833772ttsMu7assfVmcms#+X#,UmZPIIIIIIIIIIIIIIIIIIIPIUUPULULKKLZLLLJJKZmn8pp3,808q0q8<$X+@$$$$O$$>>:>->:>,,,><:9<<<<<>8q", ";sSGLGDDDSvGHHGGDVDBHSKSc22t5;;#O+X:7cyPFFPAFHPHbPDKDNvABDFPFFFPKPHLKPFNAFNDjAAFDBFCGcfjVMtVVcX@@$3ZxcpmmzfucmVZGCCclzcmzl7uzz58", "4cddyiBNScjAAAAvDFNFHFAjSHNs;3c@@X#3l=vPPKaFANhBAbgAhygBhgBhAgjjhhaa*hgw6i206aiaSh6wtAFAvrMhc8..O+pi3lsia6KPDFSABbbFbSMhgdtudcyl", "HCtDgNaadaFSggVDjBAgjhNvAcyHHZ2o.#-8d&sDFhshNvNSjbbgajjbjAjAjgkAbkhgjggArBkihhagvgagSgAjwhFa5;.X@#fnw6iKdvFhAavahdaghags7tdzccMG", "ctcdhMghcSardcg4hatdc6wctsGFgDcX@#XZHSHSgcvbhghgbjBbAjABjAjNgbAjjjjkhjAjjkjkAjhkagjbggjPFBjiH;XXO@fsjnHDDSByaveh25wvta16;:46Vaht", "disvdi6wVhhNf6ptMhSshnlcSggjhV5-##:PUHPjcvtgvcchvjgNjjhjaahaykkgjkgAjFjjjAjAAkhNhgkAAgADjFkja;.OO@ldjFHhyrtyh4wtccaahdgu-3cSyats", "cshafdahahNa6vhchatSSsjhaccvvct=##:PbKjhAevDvSgMNhAvkNjngjjahjgAkjjjjjjkjaahkjjjkhjgkejkehhD*,XX@@nbBiwachagchfSjAgkaaNp5Svajttc", "tt6tacthFhw4itvB0BAihDaBhBABaf2$@@;UKajAADMNajjBMMjNNdvvMjvhvhSSNDgajgjjjdFjjhjhjjhjjjhjAaja*0XO@-Gnyadajhajaa0ahkaaijaahAiaaahi", "ca7MhejSah606hhABBhf0aFhfMhhAN3-+$$PFPjjaM*fVDDAvjjNvSavjBhjNAvAjjgFFjjBjjkAAjaaajhjjkkDajhAf*X+O%GgghaBi0aaiihhiaajaehaBhajhjha", "d6aidisai6ahhBhf2iDDFDhA5ahivi0;##3UiaFAjMGCNghnBDDAvbMvAahBFAShBhhMhNhjAjjjjjjhhjAAijhaBAhj0%XX$@CgahMwiijhjajahaaa0kjhjhAhhiah", "ihhj6chajh0hhaAADBiDhiFf0aBADff*O@;PPPFAKjjhAAVDijSDgFSvjADvggjSDjjhjiDFjjhhaNhFNajhjjAkaiji4%O+O+Jgbi5sijiahgggjhaahhjahi0h4fa6", "iajhfaDjBhDDhhBh0ahvhFCBBhh0BC*$+=3Pj5hhdhBjfNjBDbjDbHAgNjjvjkBaiaAKNDjgjNjDjjhdaDNNjhADAAh*&-X+@;ChAgbkDihh0hjkaahhhhahaiBBhh0a", "aMaiMMNaDBh6hAhvaBhi6hhaBFBhAh;%=$,LjjPjjjAANNBBbkSvgAhAhMAgADSddhaahajNAhjhjhFFFNNhjahhjkh-@-XXO-LjDjahjhh2ihhhr0ahihahihah6aij", "AghjjagNBhhfNvaDBAFvDAhBAAiAaB0%@@&KhjDFDDjACAjjSFDAgDgSjjAhykawLMFhDNAMjhNNdjjFjjjjajDAakh;@@+XO+HhaekiaAja4i0rjjAhhijjNihahfa6", "jahiighh6ivhhihhDABDFaBFhfKAA0*@@$-PFFjjgghDhASjjejAvAvjNMBggSSca5SghkjhNjhDjhjahhaDihakDh0:20XO@@GhBjDaaaahAkhhkjhiajihaiaaafjj", "nd5ijfjDjNfsABaahhfhAFAAjK6hh;0O+@-UKjPKNajjCjNNgNvbjvhFhgjgFANDDBKDHDjDjjMhhCjjjjhkjjDAak0;i%XO@@VagjkhgaaihDjaBa40Bii6050haka5", "jiNNjhhjhh00ejhABfjhhi6Ajhaf366@@@-PkPDjjFPjCNjfSDFyAADjjAkDVjgvSAAAgSBFhNjjjjjjjjhAjhaaaBja0;.+@#mBAaajjnkajjahhwahafhBahBjajBB", "hNhhhiaa040jAjAAhA6hAFDhBDhN;fN:O@2IKPjhjFjFCjjMShgFFFFDjgFNHVDSywDtDAkgNjjDfjajDjFhjkjhjajaF0o+O@MDhae5iNgjiakjtavhhvawBhhaBh6h", "Cahijhhh4haha0DABaBDFAaaiaA60JfO@@,PjAAKDhahhCKjSvhvjFAgFgFhVyhtSMFahjhFhjhhiajDajhjjaFAAAaBh&+++@CgadshgahdaifaiaffAwhhBaaii5fa", "ihdajjhNajjjFAhDaAfAhhDi0iD50i*@O$0PPIFAjhDNKAFCMaASBjgagjDMahjSADvNhjggjfhjjjhkAjjkakjAjhBh6%XX#+MDVhaSkkkkMNjjht0haaaBkihavhBB", "aaikDjahBAAi0hhBhhhAvihKFFKBwh5X@@6PPjDjjAgCjhNjgShaAghMKvgyhjAhyhhahKDMjjjjFjAFjjajAFhaBjBBj&XXO@VBw5jajgigiakihhB6jahfwhhhaaai", "NghahiahBA6ihahAhhBfvihahAAAPPfO@@jPAAijjdjhsFhCBkVgMshNjtDvNhdMbLggFvcvhkAjaAjajiAjjhDhjjhi4+.X@+CgyShhagNhajMahhaai0wwih00haaf", "fadhjjhNaiBBAFBaAAihDAFDjAiBBh%-+%NFjPKKjjCDDjNiwfcDDNsNaNMvMgDchajASvghjCjjjhhjhDhkhjjajhaFa%+X@+mhfi44hgaagj0rBhBtavaaahfAiava", "Df6hhhajBaiah6ihaiBBBhahBhFhAFi7XOvPFjFBhfhBAfNNCGDhhaMCDKaMgDFCMvcAhhMcgjjjgjjgi6ahFjkhhhBji@.+OOCaaBhDthhhtifhhataa6iahafafaif", "AaBBaahBhDBAi5iAhhvBhiFBhhFhKhv3++fKBAjFjBDAjDhihADMCjDfhfsGHahacjhvvNVNBANBghghhAjjjaBAhBjh6%XXOOCahaihi6fhhBt66aaaChhaahiBaDhh", "hBafBhBah6aBBDAahi6fBBhD6vBhhAiO+%0PFFFjDjh0MhhDAHfhhDjpNjMhaCDHSbchhdaakwhaiijBAkABkBjhhBkB**XX@@CvaaAahhhhh6hv0hBfhaaffhiifiBB", "ihah6ihh6Dfh6hfiAAKKhhaFDhhBFh6-+@;PFFBjahAKhDNhCNfajfjDFNfDjafhVgNSgjASDcggNNjBhaBhahhABhBB0+XX@OAhAh6iaftBfi6hva366ta6A6iihii6", "ii6ihfihifhfhDBi6hBfBDFhifANhBf*+%2FKjjBBaKDjjhFHMMFMMCjjMJhjKCjeccjNghBhFhBhaedAvaiBhahajAja+XOO+DiahBahaA66Bhf6afafhah6ih6iiih", "AafhihDfBCaifiiDDAKhDAihhvDCAh*O+X0KKKFDABAhBDNfMhNDjNjhhfhHjfhhvNDASjBHShhBkAhaahjjhBBBAhBa5++.OOCahAaih6a0h6iavaNAhi0faBfaBBfa", "AiBhFAfBhaiBfCDh6CfCBhDFKi6CBi2;X@%KjDDjABDDNCAjjhKjNDjNCAfFaDhjNaahgSBijhBhNABKFBBAAiahhjjBv%.XOOn5hht64hhBthiBhiaaiaffiaiiiiih", "6aiffiBBfBfDABiaiBiB0DKDhDNNh*;O+$-APPjNBBFjNFNNNhNDADjNCjjNCjCfhDDSShhjhMBASNhaaBBAhhjjBhjj0++XOOCfBj6vhBBaihhh6fatfiaBBiiiihha", "fiihihf46hhhfChCChKFDhaBfBKADhf%+@@HFKaNADDANFjACFFHahDDCDjhjhjAjFdjDhjjNDjhaaDhBhAhaaBajBAh2+O+O+Cs0a0ahahwvahifhBAhhvi6ii6fiaf", "fifiahaBBBvNBANNABBBBDhDFKDAfaf-@%%AFjjFAAjCDDjADjAjjKDjjjFAADCFjjjDhFhjDhjdjFNaFhhAAhABAAh06%+@@+CiAjjhDahhhhavhhai6i6hBvFAhfai", "6iifCBBAhhhNBhChfCBABAhvAfaAh*3;%-;hDjBAjNjADDjaajjCDjAAFAjFhjjjDjhjMhjNhjkhAhhjaajhBBBaBBjhw;$$%%nfhBaai0aihhaa66i0fiiii66ii6fa", ";36i66i60h6373if6iiiiiifBhf326i--&-0h3sjDDFKNNhjCNjCAHjDjhDkhAjFjDAahjjNADDNFjhjhBABBBBhAAhh5%@---n66tahahhhiiiiiiifaihifi6336ii", "-*-*73332;3333*;3-;2*-;*-***33-;---03;&*204040242*2i00aihhjjjDjajNDNFNFAjaiiihMFjjBDBAFAAAjB0*2;;2l34s0hh0taf0iifhfi266i6632333;", "-%@%---*-*%%--%%%%%O+%@+++O+OO@O@OO;&+++++++++%+@%@%@+o+++@@@%%%&&%-&&&%%%+@%&*2562**%;**%%%%%@@@+0;***2***3*;***;;*%*-+%%%*-O%-", ".OX+-OOO++++OO+%+@@@%++@@O+O++O-@$O$@@+@++++O+O++-%++%+++O++@@+@@+++@++++++++O+O++.O+O.+X.OX.+OOOO;+XX+..O+.O+XXXXOOXXX+OX+O@%OO", "O.O+OOOO.X+OOOOO+OOOO+@@++O+++OO+OO;;-+++.ooX++++++++++o++O++O.+++++++++@@+O++O+O+X+OO++.+.X.XXOOOO+X+OXXXOOXXX.OXXXX.XXOO+@O+OX" }; xscreensaver-5.36/hacks/images/tunnel3.xpm000644 000767 000024 00000041537 10075423462 020627 0ustar00jwzstaff000000 000000 /* XPM */ static char *texture3[] = { /* columns rows colors chars-per-pixel */ "128 128 16 1", " c #8C7D6A", ". c #8F806D", "X c #91826E", "o c #9A8B77", "O c #9F907C", "+ c #A1927E", "@ c #9F9280", "# c #A89A87", "$ c #AEA18E", "% c #AFA291", "& c #B0A28F", "* c #B6AA98", "= c #BCB09F", "- c #BCAFA0", "; c #BDB1A1", ": c #C0B4A4", /* pixels */ "&$$$####+$$$$$##$#$$#$$#++###%**%**;--=*%%%$**-*---=*=****;==&#$##&#$$##@###+#+++######&######&&#&###@#&$$&$#$$#$$#$$+@O$#$*****", "$$$$$###+$$$$$$##$#$$$$##$###=::;-;;;;;;-%#$%***************=&##$##&&&####$##+##+#####&&#####&&&#&$##@#&&&&$$+$##$$$$@$$@$%==:==", "%$$#$#%#+$$%%$$$$$#$$#$$$$$##*==---*-----$#%#%&&&&&*****=**==&$$$#&##$&#$%$######&###&&&&&&##&&&$$#&&@##*&&&$$$$$$##$$#$%#$====*", "&&%#$$$+#%%***$&$$#$$+$*$$$$#===***------$#####&#$#&#&*****-*&$&&&&##&&&#%#######&###&*&&&&#@&&&##&&#@$&&**&$&$$$$@$%%$$$$$=*=**", "$#####$+o#######$++$$$&&%$#$$*==--=*=---*###@+#&&#####&&&**-*&+#+##$#&&&$$$#+####&##&&&&&&#######@#&#O@##$+###++@$$#$$$#$#*;;;==", "%##&%**$ooO+##XoO+++$++$$$##$=::;---:===*######&#####%###&&&&+++O######$###$#+##&&&&*&+######&&#&&***@ O+##OX+++###$$$$$#%%;;;==", "***=====%**==*@####$++$$$##$%=::-*-:=--**$$##########&%#&#++#++#+##+##$$$#$#####&&&##+ +@ #@&***:-=-:****==&####$+@+#$$##$*;;-**", "***====;======###++$$$$+#$##%=;==--:*-==*%$#########%%&#+#&&#########$#$##########+++#+ @#&@#**--*--=:*-;==&###+O$$$$+$$##*;;--;", "*===-******-*=$#$++$####$$##$====:---*=**&&#+&&+#####&#+#$&###&#+&++###$%##$######+### +O####-*----&****:--*##++######%$##%:=;;=", "***=--*****-=*$#&+$+###$$$$$$*:=:::**-***&##&++##$$#&&###$##+&&#++&$##$$$$#$#$########+OO@#@#-***--******--%$$$##+####$#$%*;;::;", "*%*=*****=--*=$@$+++#####$$$$=:::==--***=&&&+++&#$+#&&+++&#+++##++++$+#&$$#############O+@#@@*&*:****-*=-***####+#+$##%%#$%::;;;", "*****%**==-**=@oOOooOoOoOOo++=:=----==***&#&&++++++##$+++++++++o++OOoOoOOO@O@@###&####&&###o@****-%%&==--*-$OooooOOOOOOO@@%::==;", "=**==%%*=***=*%%$$++%%%$$$$@#*:=-:--==-**&#&*&#&&&&&##$$#+#####&&$$&%##%&##$&*&&##&&&#&&&&&o@:***:*%*******%%$%#+$%$%#$%#@%;:==;", "**===*%**=*****-==::;;===:*#$*=:-=::;--**#+#+##*=:==****=;***=-:====::;:;&&****&++++##&&&#& @-**==**&-:**-**==;===::;;:;#%%-;;;;", "*%==*%****;;=*====::=*=;::*$**===:::-*-**+o+++#&*=*&&***====**========;=;*&*=*=*ooO##@#&&#@ @*&*=*%%*-**:-=*========;;;=%***;;=;", "*****&*===;;;==*=:::===:==*%**:=-;:::-***@O+++#*&****=*==;;===-=====*=;==*&****&+o+#@#&*&&o @-********---:-=*==;:==*-;==%**-;;;;", "%********===**=====*%=*===*%**;:--;;;;=%%#O#+##*%*******--=**-*-==***----*%**%**#+####&=*&+X#*&&*******===*======**=====%**=;:;=", ":**==*==*=*=*%*****=*===:;****;:====-==%%#OO#++==*-=*--=-**&*=***==*-*-;-****=**$$%$#&#*-*#o$:-*==*====***%*****=*=*=;;=***=:;-=", "=;*=**=====**=*==*======:=****:=*=====*####O+##***-**=;-=**==*-*====--;;*****-==***=*-%**&##&::-==**=====**=*=*=========*=*;:;*=", "%=*=*#%**==*==**========-*%%%$%**&*%$&%%##$####$#*-%$%*-*=*==**-=====-;-*%%$%%*=**%%%%%##&&*&%*-==$$%==***=**==========%#%#%%%%*", "*=**%$##%*=**=**=****=*=**#$%*%*=*%%%$$$##%&##$&%**####%*-*--&*-***=*=***#%**%*=*%*%%%%#&&&&%&****$##$%==*==********===%#%*%****", "==%*$##O#*=**=**=*****===*%%****==%%%%%$#%&&&####**###@$*-**-**-****==*=%#%****=*%%%%%%#####%-:**%$##@%*=*=**=*=%****=*%%*****=*", "=***%$$#%%%*******%**=****%*****-=***%*$#%%&#####$*####&&********%***;=********;;*%**%&####@%:-**%$##$*%*******%***===********==", "==*%%$@@%====*******=*=*********-****%%%##%&%#####*&###*----*******;*****%*****=****&%%#@##@$::**%$$@#**==********=**********==*", "==****%#%====*==========*==**===-**%*%%*%#%%$#####***$#*::-**---;=======*=*=====**%*%*%#####$--***=%%#=;=*****=======*=***====-*", "=%%%%**%$%$%$#%%***=*=********=*-*%***%*%%*%%$$###&***$$&&##$&&**=*************=*%***%*%%###$:*$%%***$%$$$$$%**=**=********=***%", "=*%%%%*%$$$$##%$$$%%***********=*%%**%*%%%***%%###%%%*$##&##$&&&%%*%*******=*==*%$****%%%%##$**%%$%%%%%$$##$%%%%*%*%***=****--*%", "****%**$$$$###$#$$$$$$$$%=*==*==*%$%-%***%&**&%###%%**#%&&&##$##%$%$$%%***=*=-**%#**%***%##@$--**%%*%#%$$#####$$$$$%%****===-*%%", "=*%*%**%$*$##$##+#$$##$$$$%***=*%*%******%**%%%$##****$%&&####@#$$$##$$$*%**==*$*******%%%$@&--%$***%#%%####@###$#$#%%%%%*=**%%*", "*%@%%#%%$%$##+#++$$####$$$#$****%**%***%%#%%*#####$##%#$&&#@#+###$######$$%****%*%%*%**$#$###-&##$#$%$%%$####@#$#######$%%******", "%$@##%%%%%%%#####$######$##$##$#$%%****%%$$%########%%$$&*######$$####$$#$$@##%$****%%%##$$##&%#+##%$$%*%######$#####%##%###%%%%", "#$@@@o@#$**$%###+#$#@##$%$#####@#*;;;==*-=-**#@##@o@o#$%*&&&###@$##+@$$$$@@$@##%*----**-***%@@&#OOOo#$%*%$$##########%%%#@##@@%;", "o@@OooO$$%**%$$@##++##$&&&++#&&##*====-=*-=*=#Xo#@ooo@$%*%*%$###$+#+##$&#+##%##&*=-=====**-*+o++Oooo##***%%###+#@###$$$++$$&##&=", ".ooXo+$$$***%$@$#####$#&&++&&&#+#*====**-*=**#oXooX@##$$***&#####+$#$#&&###$####**=-*=*==-=&+ooOXoO#$$$**%%$########$$$O+$$#+#&*", "OOo.o+O$***&$$$$$+$$###&&#+#$+#+#&==*==*==;=*#OOoX o+#$*%*&$&$##+&&###&&#+####+$*==-=*=*===*+++O.X+O#%***%$$##@#$$##$$$O+$$$+#$*", "@@@oooo@%*&$O$$++++#+#$&$#++###+#*=*==*==*=**#O@O#oooo#***#####++##+#&&##++#####**=*===**-**++++OoOoO$%*%##$##+#$#+$$$$$+$++#+&*", "#@OOOOoO$$$$O$$$O#$+#+#++#+#OO#++&*====*=**=*#O#++O#oo#%%%#+#$$O$##++#++++#OO#O#**--==*=**-&##++OOOOo+%%%#@$##O#++++$O+@++O+++&*", "##@OOOoO$$$*$&$$&$$$+oXoooX XXo&*=*===*==**#$$##OO#O#$$%&$%&&&&&&+XooOoX XXo+&---=;=*===&+&&+OOOOO$$%%%$%%%%$&$ooooOo XoX#&", "$$$#+O+$$$$&$$$$$$+$$$+#&#OXo#OOo#====**=*==*##$%##OO#&&$%*$%$$%#$&&+##$#oXO+OoO**===**====&+&&&#++++$$$*%#$$$$#$$$@@$$+oo+++o+*", "%*%%$$$$$$$$$$$$+$$$$$%%&####&&#+&=*=**=*===&@$&%&#####&$%&$%%##$+#&*&&&####%&##%*==**=*-*=&+*&&$$$##$%$%%$$$#$#@$$&*%$+##&&&##*", "$%%$$%$$$$&&&$$$%&##$$**%$$##&&$$***===*=*=*%O%%*&%%&##%*%&%$$$%&##$%**%&##$&&$#**=*=**===*&+&&&$$$$#$%%%%$$%$%$##%%*&%$##&&&#&=", "$$$$$$@$$$$&**&%%%$#%%%**$$#&&#%+%*********=%O#$#####$%&&%%**%%%&##&*%**%$$&$$%#***=*--**=*&+#&&$##$#%%%%%**%%%%##*****%##&%%##*", "@@@$O@@$$&&&$***&$#@$*****%$&&#&$&*********%%+#########%*%%%%**$####*****##%$$$$%=*******&&&++++$@O#@%%%%%%%**%#@#&*****#&&#$&$*", "%**-***-====*%%=**%%*****%&%%&$*$$$##O##$#$$$$%*%*****====**#*=**&$*****&&&%%%&####+#######+#***=***-;;-=**%****%%*****%&&&&&&##", "$*;;;-;;;;;;-*$*****=**%%%*$##&*#OOOoXoXoooOO###*;:;-:::==;=*&**=*-***&&&%##$&&#@oooXXXoo Oo+#&::;;;;;;;=;=%%****-***%%%%$#$*&#+", "$$-=---**----*$%%$***%*%#&%###%&$OO@+###++OooOOo#=-=*-**===;&%*$%***$*%#&*%##&&##o#O####+####+&-===*=*-====$%%%%**%%*$%%$###&%##", "$%==****--;-;*%*%$$%%***$$#$#+#&###O$O#+%$@ooOO##*-****=;;:;%&*%#%%%***%######$##O##+O##&#&++#&*==****=;=:=$**%%%%***%%#####$#+#", "$*------;;---%%*%*$#%%%%$$###$&&@O#O+++$+O@OOO+##-;---=;;;;*%&*%*##%%&*%##@#%&##+#O+####+#+++#&*======:;==*$*%%*$#%%%*%#@##$&#O#", "$&:::;==;==**&&*&&$$&&%*&&$##&&##O#+########O+###*::==::-=**$%*%%&&*&%*&$##$%%############+###&=:;;;;;;--**$*&%%%%%%&*&###$&$#+#", "$*::;;*;=-;==*#&%$$&%*****$&&**&$#+#########+OO##;:==*:*-;-=$#%%#%%*%*=*%%%**%%#++#######&#&##&;:;;*;;*--**##%%%%*&**=*#&*&*&$#+", "#*====;;=-;;=*&*-:*::::-==&$&&&&%#+#+$########+#&===---=--==%**--=::;-=;-%#$%%%###+#+########+&:;;*;;;=-;-*$*==;=:;;--:*$$$&&%##", "+*==;;;;*-=**&-:::::----==&oo+ooO###$++#+#+#####*==::--*=****;;;::;-;;-;=#oo@@o#+####++##+#####-;;;;--*;=***:;;;;==;--;-OXo+oo#+", "#%;;;:;;*-*****-:::::::-::&Xoo+++#++++########@#*;;:::-*****%-;;-:--;::::# o@+##+@+##++#####&+#*;;::;-*****%=;;-:=;;;::=+Xo+#+#+", "#=;;;;;;*-**-**---**-:::::&oo++##+#++##+O##+#$##*::;---==*****;--*-::::;:#oO@@###+#+++######&+&-;;;;-==***=*=;-=-=::::;=+oo+####", "#$;;;=;=-*--***:--*:=::::=*+++###+#####+###O@$##*;:----=*--**-;;-=*:;:;;-&@++#@#######+#+# &&##*;;;;-==--***-;;---=;;;;;#+O+##+#", "#$;;==;=;-*****-:-===:--==*++++##+++#+#+@###$$##*::-==----**%*--:---=;;;:&@++@#@o++##+####&&###*;;;;=----**%*;----;;;;;;&+OOO#Oo", "O#=;;;:::=****&**--*-;;;--*@+++++o O#+###$$&%$##*---;;::;-*-***-----:----$@#++@+X ooOo++#$$&#O+*;:;;===*=****=*---;;:---#++#+#o ", "#######+#&&&*&**---:--;---*#$$#####@$&$&&&&$%*$$*---;;:;-*****--------*--&#####&##+@#@+##$$&&###@$##$$$$$&*%**---;-:--*-&#######", "OoooXooooo+++&&----**---==*&$#$$&###&&%*&#%$####%--:;:;;;***%*-----*-----*&$&##&&##+@#+#####&#oooooXooXo@+#%==---=*--*-**&$#$&&#", "@@#@####Ooo+++&--:-***--=**&$$$%&&###%&&&$$$#%##%;::;;;;;-*%%*---***---**&$$&&#&#####+++++##&#+#@##$#+ooOOO#*---***----*&$$$$&&#", "+##++###+ o+#+&;-:--*-*-***$#%$##&#$#&&&&&#%&&%#*;;=-=;--*%#*-;-;;---*--=*#$&&$$&&###+##++##&#+#+++&$+OoO++#-;;;----**-*&#$%$$$#", "+O+####+#+O##+&:-:--*-:-==-#$*%$$$##$&%&&****&##&;=-*-*-*-%@%-;;;;-*--**=*$&&&#$###++++oX+#&*&++##+++++OO###-;-;;**-----&%&&$#$$", "#########+++#+&&****%*%%%%&%%%%#$####**&&%&*&####%*%**%%%*%##%%%%%%%%*&%#%%&$$$###++++oooo+#&&++$+####++O+##%****%*%&***%%&$$$##", "#########++++#&---**-****%#%%&%$$$#$***=-******%%%$%%%#%%%$%%%%%$####@####&&&$$$&###+++++OOo#*###$##$#+#OO##*=;;*-****%##&&$$$$#", "++$++$$$+$#++#%==;=**=*=**O$$$$$$$$$&%****%*%$$%%$%%*%#**&**=*=*******%#&&%%$$$$$$$#O@O++O++&&+&+&#####+#+#%*;;;=-*=*=*##%$$$$$$", "$$+$++++#+###$*=======*==*+$$$$$$$$$&$$$**%**$$$$$@#$#%==**===*=***=******$$$$#$$$OOOOOOooO++&&+++#++#+&###&====-*=*=*=$#%$$#$#$", "+++++$$+###$+$*===*==**==*$$$+$#O$$$**&$$#*%*%$$@@##$#$=***=*==**********%$##%##$#O@#OOO+o++&&++##++++&####%*===*-*===*$@$#$$###", "$+$++++#$+$$+$*====*====**+##$+$$@@$*&&%#$%%*&#$@$#%%#$=****==***********$######@$OOOOOO+O+#&*+++++&#&#+$##*=-*=-**====$########", "+$$++$+#+O#$#$%=*====*==**##$+$#@$+$&&$$%%*%*%%$$$%%##%**%*******&&&%%$%*#########OoOooOooo+&$++##+++#++%#$%**==-=*==**%#+######", "++++++$+$$$#+#%*===**=**=*#+$+++O++OOOO####$#%%%$$$#%%%*$$%******%%%%#######@@oO#OOoOO@@++O+&$+++#+#&##&%@@***==-*;*==*$+###@@@@", "Xo+$#$$$%$$$#$**===**=*=**#+++OoO#$+####$##$$$***=*==**%%%$$%&&*%$$%#$#####+@o.o$*-***;;=:*$&+o+##+$&&&&$#%$***==*=**=*$#+@@oo@#", "+$$$$*$&&$%$$$%**==*=*===*#+$+oXo&**%**=*=*&*=;;;;;;;*%%#%###%&$$$########+##o o=;;;;;;;;;=**&+&&&*&&&&&$#%%*===*=*====####@XX#=", "$$$$&&$$$$####**=*=*==*==*++$OXXo*=;;=;:-;;;*%--===*=;###+##$$$$$$#$$###$##++o o*==*=**----*%*#%&$&&#&%####%*=*=*==**=*$O#OO.X#;", "$+$$&*$$$$$$$@%**=*=*****&+++oXXo*======---;-$*=**&&**+O$+####$$$#$###+###+##XXo%==****;;-;-$%##&&*&$%$#&&##**=**=***=*#+OOo.X$=", "$$$$%&&&$$$$$#$*-*****=**$++$++OO*==****--;;-$%*&&%$%%##$O#$###$###$$##$$#####++*-;-;*-;;-=*$$#$&&&&%&%%%$##%***=***=**####OOo$=", "$+$%%%**%**$#@$$####%#$$$$$$$+$O+*==*===;;;;=#$$&&%$$###$+++#####$$#$#$####$+++#-;;;--;;--=*###%&&&*%**%%$##$#####$#$#%##$##$O$=", "+$$***%$%**$$#######@@##+$+$+&++@-;;;==---=**#&&$$#$###$$O$$######$###$##&#&$#+&;;;--;;=-=-*$#@$***%%*%*%%##%###$#@####+$$+$O+$=", "$&*=*==****$%%$$$%*%%$%%$$$$+&+$$;:;;=-;==-**$$&$$$#%$#$$$++####&&#&$####&#++#+&;;--=;;*--=*##%**********%%%%&%*%$#$*%#$$$++$O&:", "$$&&****$*$$%*$##$*$$#$%&$+$&+++#=;-=---====*#$#$++$$$+O+OOO@@@#######+######++&;;;;---*=**%#$%%%%******#%%%##$%%$#$&&#$$@@$++&:", "$$&$$&&*$**$$$$#@$$####$$$$$&&$+#*;-----*=***#&&+$&&**#XO@@#@ooOO#####$#&#&&##+&;;;;;;=***=*#$$**#%**%%**%#%###$$####$##$$$O$$*;", "$$*&&$#%%%&&$#@#+$$$O###$#$#$+$+#=;;;;;;==***#***=;;*;=%**=;*@#####+##&$#%#$####==:==:******#%#%*%%#%%%**%###@$%$$+$$$$$$$$+$+*=", "O%&*%%%%*%**$#@$$&$#+$#$#$$#$+$+#*:=;;;;=****%*****;;;;=*=;;*##$+######$###%#$#$=::=-------%#%#***%#%*%%%%#@##%%#+$+$+$+$++$$+*=", "@$%$%%%%%*%%%%$$$$$$$+$#$$$$+$$+#=::=;;;*==**%**===;**=***==*#$##+#####$%######$*::=-----***$%@%%%%%%%%**%%$%%%##$+$$$$$$##$$$$=", "%%%*%*%%%****%$##$#$$####$$#$$$$#*:;;;;;-=***%***;*****%*==**#$$#######$#%#%#$#$=:==-:::--**$*%%%%%*%%%****%#$#$$#+$+$$$$+$$$$&=", "***==*=*====*=####@@##$#$$#$$$$O#%;;=;:::==*=%%***=****====**##########$$$#####$=;=-:::--***#***--***=*==***@##@+#$$+$$$&+$$+$$=", "*%*=*%%*===**=#ooooo@OO@oOOOOOO##*;;;;;;;*=**#%*****%%*===*=*@oooXo+OOo+OO++O+##*;;;:-:-***%#*&*-**%**===*=%@o@ooOOOOoOOOOo+++$*", "=***=%%**=****$$$$##%%%#$&$#$$&%$%;;=;;;;=***#***===***=*****$$$##$&$$$$$#$#$&%%*::;-:----*%#-*=-**%*==**=*%%%%#+$&$$$$$+&$&&&$*", "**===***=***=**=;;==;;;-*;*$*&**%*;:;;;;;=-*%#*-**=**%*==*=***====*:=:=::%&**=*%-::*-----*###-**=-**%*=**=***;;-===:====$*****&*", "=%==*%***=====*==-;;;--=;;*$*=*;**=:======*%%#**%==*%**==;==*-*=::----;;;%%***-**:=---*-**###***=**%**==:=**=*=;;--=;;;-$&*=*=**", "*%******=*=====*;;;;==--;-***=%**=::=*====-#@@%********====---*:::-*--;;;*%**%%$###&%$#$$####**%**%***==;:====;;;-*=;;;-&******=", "%%*******===**==---****-;--%*%*%*%%%%%*$%%*%#@%*%*******=-=%==*-*=****---*%%$#####$#########O#*&*******-=**=**==-***-;;-&*&***&%", ";=*;=**==*==%%=******---;;*******$#$%%$#%*%#@$%*=*==**=--*=%******=*--;:-=%#%$##$$#**%$$##@##*:*==*==*--**%**=*--*=*-;;-*=*****#", ";;==**====*==*===--=--*-;-*****=;***=*****%$#$%=;-=**--===***===:------;=*%##OO###%%%##$####+&:*=;**=;;=***=---*-;-=-;;-*=*=*==*", "%=*=*#%*===*==*%*--=----;-$%%%%*==%*%*%%$$$%%*%=****$%*=*-*==**=-*------*##O#@######%#$#%####$=***%%%==*=*;=**----=-;--%#%#%**=*", "*=**%$$#$%=**=***--***---*$#%*%*==%*%%$$###%%%*=**%$$$$$*-*==**-=****--**#%##@######%####&###&=***%##$%==*=-**-*****--*%#*%*&*=*", "=***$$#@#*=*==**-******==%$$*****=%%%%%$$#$$%%%==*%$$@@$***==********--*&#%###@######%%###$##&:**%#$@@%*=**********--**$$*****=*", "=***%#$#%*%*******%***==***%=***--*%**&%#####&*-***####%&*******%***--***%%#########$$######$%****###$*%*******%***==*******=---", "==*%%%#@%===********=******%****--***$%%#####%*-***%&##**--********==******#########$$$$$$#$#*;**%%$@#**==*********=****%*****-*", "==*%**%#%===***===*==;=;=*===*--;**%*%%*######*-*****$#*:--***-*-=--===*=**####@#######$####O&==***%#$;;==*%======;==*==**==---*", "**$%%**%$$$$$$$&&*=**=*******=-*-*%****%%#####***%#***$%&&#$$$&**=*=**=*****&$%%##%%%$%$##O#$*=%%%**%$%%%##$$%***=*==****=**=-*%", "=*%%%%*%$$$$#$&%&&$&*****=*****=*%%%*%***%%#$$****&%%*%$&$##$&&&&*&**********===%%*****%&$$#$*=%%%%%*$#%$@$$%%$$%************=*$", "=***%**$$&$#####$$$$$%$$****====*%$%**%***###%****%&*%##&&###$##%$$$%*%*=**===*%#%%*%**%&$$O$=***%**%$%%$##$$#$$$$%%%****==*-*%$", "=%%%%%*$$%$###@###$$$$#$$%%*****%*%***%*&%%%$%**%%***=%%*########$####$&*%**=**&%**-*%*%$$$O$=*&%*%=%$%%$####O#$$$###%%%***=;%%*", "*%#$%#$$$%%###$O@$$####$$$$$****%*******#####$%%$#%##%##&&#@##+##$##$##$##&**=*&**%****#@$$#$=&$#%#$$$%*####O#$######$#$$$***%**", "%#@##$%$#%*$#####$$#O$+$##$$++$$#*%**%$%######$&####&&#&*&$#####&$###########$#%%***&&%##$$#O&$+@#$%&#&&&$+####%##+##$####$+$$&*", "#$OO@o+$%*%%$###$####+$$%$$++$++#*=;;;==--=*&+++#+OO@@$&*&&#$##@###+##$%$#######--:;-=--*=*$OO%+@+Oo#$***$$##########$$$##O$++&=", "o#@OoX@#$****$$++#+#+#$+%$OO+$&$#*--;==*=**=*#OO@@ooo#$&*&*&########$##&#+O$$##$*-----*==*=*OXO#Oooo$#&**&$######O##$$&$O@$%+$$=", "XooXo##$%**%&$$#+###$#$$%$O$$$$+$%==;=*=-*==*+ooooXo@$&&***&$########$%&#+$$####*---**=**==&OooOXXO#$&%***$$#+###$##$$&+#$$#$+$=", "OoXXo@+$****$$$#$#$$$$+$*+++$$++#%==-=*==*;-*++ooo @@+&***&&&$#@######%%+O#$$O++*----*-====*+++o.XO@@****$$$#@+#$####%#+O$$$+$$*", "@@OooOo#&%*%##$+OO$@+$$&$$+++$++$*=***=**--**$++@OoOOO#&*&#####@######&#$O##@$+$*-*--**===**++++@oooO$&&%#####O###+#$$##O$++++&=", "#+OOOOo+$%$#+##$OO+$+++++++++O++@%*---*====**+++#@O+Oo#$&$#@#&#@###+###+#OOOO#@$%*==*===**=&+$++OO@Oo$$$$#O$$#O##++#+#++O+OO$+$*", "$##OOOO+$#$%$%%%*$$$+oooO+X..XoXo$**--==**=-*#$##@O@OO###*&$%&%&&&&OXXoOo....X.O%**-==**=*=&#&$+@O@OO$$$&&$*$&&$&$ooooOo...XXX+&", "&&&++++#%$%&$$$$$###%$@$$@OXOOOOO&====*=*===*+&$&$+++#$$$&%$$$$$##&&#@###ooo##oo&===***====&#&&&##O+#&%$%&#%&&%##&$+#### o@#Oo@*", "&*&&#$##%%&*$$$$$$##$%%*%$@@$$$$+&*==*=*=*=**#$&&&&#$+$$&*%&$$#$###&%%*%#####%##**===*==*=*&+**&&####$$&*&&&&####$$*%&*####%%##*", "$&&&$&$#$%&&$$$$$%##$$%*&$$$$$$$#&*=*=*=*=*=&+&**&$&&#$&&%%&$$$%%##$***%###%&&##**==*;***==#+&&*%&*$##%&&&&$#%%%##$***%###$%%#$*", "$$#&#$$#%%$&&%%%&%$@$****%$#$$$$#&*==**=****&+#&&#$#&#$&&$&%*%%%$##&%****##%%$&#***==**=***&+#&&$####$&%$*%*&**##$&&***&#$%#$#$*", "++$$+#+$$&$$$%**&$#O$*****$$$$$$&&*=***-=*=*&+#++$++#+#$*$$&*%*$###%*%***##&$#&$&**=*==;***&+#++##+###*&&%%%*&##+#&*****#$&$$%%*", "&&******====*%%-**%%*****$$$$$%&&+#+++#+#$++++$&&*=***====**%*=**%%%*=**&%%%&&*#&#++++#&###+#*&*=*&&*-====%%**-*%%****%%$$%&%%##", "$*::;=======-*%****=***%$$*$$$%*&++OooooooX+++++*=::;;;;;;==*%****==**%%&&$#$&*#++Oo o ooo++&*=::;;--:-:-=%***=*=***%%%%##&*&#+", "#*==========-*%%%%***$*$$%&$@#$%&++++++#+$+++&++*=====*=====%$$$%**%%*%#*%###%%#+++#++#+++++#+#=--==-*----=*&%%&**&*%%%*%$##&$#+", "#&==****=--;;*%**$$$*&**%$$$@@$$#+++#++#$$##%%##*==****--;;=$%*$#%%*%=*%####@$$#++#++##&##$+##$*=*****-;::-%%*#$%%%**%%%####$##+", "$*======-----*%*%&$#$%$*%$@@#$$$###+#@++O@#$%$$#*=-*--*---;=$****#$%%%%$$#@#$&$O+#+##++##+#O##%*:-----;;--*$%**&#%%%&*%####$&###", "$&;::-=-;---*$$*%%$%%%&*%%$$$&&$#+######$@#$$$$$*:::-*::-=-*#%*%%%$%%**%$$#$$$$O#+#+##########*=:::--;;;-**%*%%$%%%%**%###&&$#+#", "$*::=-*=-*==**@%%%$%***==%$%&*&$#++#####$$$$$$*$*:::--;--;**$#$%#%*%**=*$$$%*$$$#+#########$#O%=::-*-;-;-**##%&%%**%***%&&*&&##+", "#*;;--;;==;==%%==;;;:;====&&$&&&&##+##+#$#$$$%%%;;;;-;;----*%*---;;;;;;==&$$$$&&@###+#########$;;--;;;----*%**---:;-==-*$&&&&&##", "#*;;=;=-*-=***=;;;;;====:=&XoO+O++#######$$$#%%%-;;;---=-****;;;;;;;;;;;=+XoOOo#+######+#######=;;;;--*-*-**:::;:;;;:--*OXO+OO#+", "#%;;;:;;*=*%***;;;;;:==:::&Xo+O++##++++#+#####%#*;;::;-*-**-%-;;;;;;;=;;=$XoOO+++++++#+##+###@#=;;;;;-**&***-:-;;;;;-;:=OXo++++#", "#&:;;;=;=*=*=**-;--==:::=:&ooO+###+++##+#####$##*;;;;;-*******;;-;;;:;;==$ooO+$$##+#++#+###$##$-;;;;;--**=***----;:::::=#Xo+###+" }; xscreensaver-5.36/hacks/images/tunnel4.xpm000644 000767 000024 00000012455 10074051100 020606 0ustar00jwzstaff000000 000000 /* XPM */ static char *texture4[] = { /* columns rows colors chars-per-pixel */ "64 64 64 1", " c #201C02", ". c #2C2703", "X c #332B06", "o c #352C17", "O c #393311", "+ c #3D3626", "@ c #1D1B00", "# c #453917", "$ c #443C0A", "% c #453B24", "& c #4F4516", "* c #4D4328", "= c #574927", "- c #585033", "; c #645630", ": c #72623A", "> c #57544F", ", c #645B53", "< c #6A645D", "1 c #70684F", "2 c #6B6867", "3 c #746C68", "4 c #7A736D", "5 c #7A7876", "6 c #6F6F70", "7 c #7F7F80", "8 c #7F807E", "9 c #7F8081", "0 c #857A6A", "q c #847C78", "w c #82775A", "e c #817F80", "r c #89827C", "t c #93867B", "y c #958E72", "u c #A1927D", "i c #92805F", "p c #8B8886", "a c #948D88", "s c #98928D", "d c #9A9796", "f c #908F90", "g c #9F9EA0", "h c #A3958C", "j c #A39C98", "k c #AD968D", "l c #A19FA0", "z c #A7A29D", "x c #B3A59C", "c c #A4A085", "v c #AAA7A5", "b c #B3ACA8", "n c #B7B2AD", "m c #B9B7B4", "M c #B0B0B1", "N c #C3BCB7", "B c #C3B5AC", "V c #C1A799", "C c #C6C1BD", "Z c #C9C7C5", "A c #D2CBC7", "S c #D7D5D2", "D c #E2E0DF", "F c #E2DBD8", /* pixels */ "M6a5ClMCg9<*=B4bfdzBm0>adbtxzsl5krtd4sr4hv8AznbqkjNhZdqjzvge4fZf", "6bvCg,855mf*&Cbarldr3sCNmjvvz6sndjt4jkbzflvszrhxtpshfdMpbbpMlNpv", "mav4>gCZDz4*-cyrxa4mavd5rrja6fbvCadxCmtr8sal0hztbajqfvMfd7gpggvd", "vbddMS9d96s*-jzzzCnbssddajppvvzvdraavpppvaNdxmdNqdjjvvpvvdgvmvpf", "pddjpp9vpd,-&rbadjfbaBbjhxprppp83jpavvvZfMpfdzsrebm7fasldtvmppvm", "vMjvfdga7gS1&bjhxaarsjjs3azNavmmvCnndpmrglgvvdsrzd45jbMjMvMfpdMm", "dfdplrvfdv3.&nsstBxtsta3zk6alsssr2mjfdddldMdjpqxzvvvdpplfpglvvvp", "gvp6mMvdpfC+*absa0qh2tqbnkCzrbxzsdvdzzazdffvrjjsseadfljevnMpdv6f", "mvMZvvvaffp+#xxqrNNBFhmMq4apBvt2vvfpddfafCjpshCz4rvaajCjv6szz<5m", "dfffvd8dsfbo#anvAab45hdqjSANpjbSddmAbmplMdzzmvapNCdjnzpr5hdmaMSv", "ddMsjdCdfds+-aldps5jNzdNC,qerqv6pmM45gdva6dszjnAgvjZjsejfj", "hakbnv1aaspo*6cnajBznffsnvvgpMvfldc5vvbbpfa6mddrpAbjdd8sC5tshpdZ", "pNajjkvdvm2O=dg8Cnjzfvbs5dddvffszfvmmp6rjMd6f5dvdse>o;1-8,1411-8;o--+-pu18:-;111;-<1-ky10tiyy4iu8xitqic,s", "o O%.X$#@@.&&XX.X$.&.$XO&&OO$XX#$X&$&&O&$$&&$X&#OXOOXXX.X$X.OXX&", "y0hhyyuyyuu&&>yy11y&yy11101==000&i-1:*1=;*w11:wi1ywtxdzyt5*;vfdfg9smzzsjqxhexj2v88vCg>6fvsrdzjvdarbzmvrjdzpvZap", "MdvvpMgr6naO=Cdzdplz2dvCemjaxseNzcMfsamgdCpnjdma4sbNazbdgM9ZmNml", "g8NrfvvMmfd+=spddMMNl8azlqqpzzhvvdxsdM>>mdvdrvsjbnqqbfpfbp3NvNn>jaqqjuzjl5", "mmCvdvb2snaO;jrajmbhxzjqebseqCjMevxvjfenxkualBbZbjbBrvdAjNbajjbb", "dglpsnrxvf5O&0pjvqpjjbpVnxjeNvdeMgfseqqjq3VNamgdqvCeCsaBq3afsgpqqNZCxsspbvdfvl", "gdvdscCszz5*&xd5jdpbpqtavSNvvMlefmvvexeqBeejvlMvdbBpq2akebsddqfg", "fqdzbadhxp5O=0asddjpq5j0jvpgvjvvvfrejpsNhpZxbvd4qsaMeCm0pknqpvln", "fmdvfadbtjr-&vjsrdmppmdCnqpZdfdasjMnjjvk3NalepjzAhspCvjbjj4NAMvb", "Mdrvsamdzbl%;sqjBmq0z0vqfvNdpfevjppfss5dAaapfnbdefNm3qeqnddddjjs", "pfbvjnvpjsq*&rjnvbhmjtjvnjfpq5zqbmMkkvMpabedvjqzlmbe4jabkbMvdgjn", "bNjxad65M5q>=jd>atsqjChhtzff5lhjjhdaBdfbaqhf5lMdsvd6d6vbe5ajMdev", "a5x5zMgSsjN*$0sSaaAjz6pmnjavM,3bjkqBj0ssdCZsmv7ll55Mjjh3jmemfjja", "dAv5p>vd5v c #544B4B", ", c #564D53", "< c #58514D", "1 c #5B5557", "2 c #4F5053", "3 c #5C5A63", "4 c #5E615D", "5 c #5F6469", "6 c #635A5B", "7 c #61534C", "8 c #665D63", "9 c #715D68", "0 c #69625D", "q c #70635E", "w c #6B6567", "e c #6E6A72", "r c #6E7073", "t c #74696A", "y c #756C74", "u c #79726E", "i c #7A7477", "p c #6E706E", "a c #7D7982", "s c #7E8183", "d c #816E77", "f c #82756C", "g c #84797A", "h c #907F73", "j c #857C84", "k c #947F8A", "l c #8A827D", "z c #94877B", "x c #8A8488", "c c #8C8892", "v c #948989", "b c #958C94", "n c #9B938B", "m c #9B9497", "M c #8E908D", "N c #9D99A1", "B c #A3948B", "V c #A49898", "C c #A59397", "Z c #A49AA4", "A c #ABA099", "S c #A9A3A9", "D c #ABA8B2", "F c #B5ABB0", /* pixels */ "o4iiy38j9yt6dd6tkNZkZZk93*j,;1ewyccwecccaw:t98e88e8,3a,9939e#+&*", ";2raaa,3*9ddd9qjkZZZDkka9:39eiaiacci%2jcj98yyiaeeya8339999ey**;*", ";:1ayad7dgdt66dvNZZZZDk999jadgxxjcbcg,:aj1,dyiiaaaaa33:a3339:*:;", "*,*;yjkjd96,,9jxbkbZZkkjt*k9wikcmmNbbj91d7@iiair9aaaaaaa53*9:*,%", "%:&*9gt>,9969yjvcbCZbcbdj,kjggcbmZZCbkt9tto;iiitaaaaaaaaa8,8,***", "%*O:89,>,yjytdkbbbbCvkkdk*ivkbCCZNCmct7t666+2irr5aaajjcaaa93,#**", "#*o*8w9,9gjagxcvbmCbvkjik7dxvbmNZZZmx99gy369#>traaaakkkkjae8,+**", "%*.*9ee69jkjjcvvvcbvxjigd99kxCmCZZZmc<9giw96w@,t9a3aajakaae9,o*%", "**X1yy7>6gvjxcvxxkcvvhgu<68icbbcbZmbc<9glji88tO:eyyeaajsaaa93o**", "&&o6ykh7=;1,1wiaddjkhkg7666>6jvvvckkjkt9dq,uvcgigl=tMmbcxe69<.;:*+$oo +o+9*+&", "**&,dvgu6tt66wtdf6;&&&66j67fgd<0gjhxl;wmmmbMgt7w7>7<01<;%+%*6,+*", "*,**i8886yyttygdgtittq1199qtfhhq1wgjx<6cmbmbxx66f8ugj1w113,893+*", "&&*o8:39yglgghggguuyfut9wt97666tutwug61xcbmbccaet1ycj80w399y99+o", "....*,tggvvxxxvxgljgutd87gufuuqqulgtg6,xscbbcvjg8;imce192:*,76*o", "&,69&6dvxnCnvvvvxxxjjii>tgihlutwttugg6*76696*", "+&,:@6dnmVmCmbbbxxxxxlw>glMnvluttwtflw=uuivbkcjey1,8ww66686<>*#O", "+;1;O6jbmmmmCbvvvxlxlg,gxcji86,>;ww6>6;*&;,:1>*", "7tlw@8bZVVmbmbvgfigxlgq7uxnbmbittpttft8&gxcy96;7<6tt1=;O#*,1w911", "wyyw*0xZZbvggq6#&>&>6fp=2116ugguuitwlli&iMawp<<68tpt8<;O$;1we9w8", "yew,#1ei3*&&--qq&utwtfuttfgw,>,660pulxx>wx8uw068euew83>+#:5eeeey", "ie8>,*><769ufhvz&fbgt0wt99tdgtyut7<><0u9@wwu6w1qyyyw1::&@>88eeaa", "ye9*gdfghguytigv<6mgutut69yijgthzguqwwtg6tgu<0VliigiuxxlMvxxxgt686,66th977nxxjxxgxccmmMbvi8,,;&+>ff;8iijjjw8xbVZbxb6gmMglirxmmmmmvxw;,8,*&6dy;67qgiiteww>;;1##<,;:", "6w83bmCvjavVASmMcu0mmxggxbmMZmbgt<1<,,>7ww67q7quuuuiyw:;;2,=>w66", "bmVbvcbZSSmmvj>vVnxvMbmmmbkt<60<111,68,w60quuiliuw<:;>,,69w<", "+o*&jmbbmmVDFSSmbk>gnbmbxbmmCcg6<10<,t6116:tqq6ppsaiw<>,>1@&;yvxbVNZDFSmbbbt,bbbMxccbjdt;<761;6;4r38:+", "2:&:yacjmNZSDVxxxji:vmMbcxbj;t,><166tep661<<><2->1<<>&****ware;#", ",;+:jiccbSVZZbggddv66vxxcay*6l;#>>60pyyw101rt0<&&&&>;**#:,eaae:%", ">;::aucZmZmbbbgggnnv-tlgiw#7hzu#;<<4www10<1wwtutq>&&;<;;6eaaaa;$", ",;3#uimNbNvbcxxvfvvvf1gii%>dggx1#<1<1e1:1;wt8,6wuutqw6&wisxaaa:%", ";+32ibmbixdtivVv6Czvv66u6@1wgxgl-=<<1w1,1=0rp1,68ty6i23iaccser%%", ";#e;weyt888dlfhg,ncgjj>t;@3rlsllg#<<6113<;10gxlMxx1&<1121<0pxxjaity:11:upscccsa%:", ">;yiaduyuuq0dz7gxfkvvzvtfu6gMMNMjj2&<<1:6uxxxxiarw;6;1iagxxcci#:", "1;8<66680w41gv,vhBvffgzhvl1uxMANcjv&;11;wgxxxsxjtwo+;#;8eiaiww*1", "w1;*>wwwtaglg;ukCCnlfggvng;wiMSNNxjt<11>ygxcxcxxii0=601>;<<;;=2w", "52,pwtiixbmbpgxvxxxgiuu06weewwqwp22w", "=16618xcbNZwuvfzBnVvggt6zl=0lMSSZcxigt1;wgixMxxgi<12;618ewww,71=", "160wjivcNmb7guvvBvnguiigxz;1gMNSDNcipuw;wi1uxxui6<44133wttpu,**6", "=118jgbjmmi6yuVnbnvillxmzl14xMNDDZcjayt=8i6qlluu>0wpe513wpiu8;#&", "<61eNicxmVuttzBvvnVhxvmnzz4", "<12emtcmCB6u6BVgMVBnzzzffu01xwcNmx7gwAABVBBBvnzzhzt>ixmSDSNmxiewww1##;;pacsaeww2eeiar311", "40<;xycNmtwdqAABAABnzzzzhlf@5ajccxirra2wtiut0w1", "4expij>,>gB9BCBkzAAABnnVVvi,O;raxcxcsaaj18tutpw53", "3pcyyxi669kdBzBzznAAAVVBVniwtdfBBBBzzMVNASVmnlgt>plxxbxje9t97@>wscaccccaiiw6tyryye5", "55acnBnBnzzVAAZVbgggw>wxcMxt60ut#;4acsacbcxxaje8eutpp55", "00pw&8jjugvx&-fzBBBzznAZVMffq6u&1xaetijgw#1racaaxjjcbaxybmiwixVmcx8$.,raaeaayjgijj1044:$23", "5311:jcd,,vCCCBiakj818,;66;;;$#33", "2323ead>tvkjyyj6imNZZNx16w6<*gnnijmca2;ij9,9:%%%+$*%+*3181;#o#::", "$2raae,9vt9yy6#,vCCZCCbtw*6gkxjcccbi*,accy,yaae93:,,,;;::1we%#;$", " 3sia89dud91du>6vbbbZmv98,mvge9yxcceejccc9,y88ee8e83:;,89ett@#%%" }; xscreensaver-5.36/hacks/images/tunnelstar.xpm000644 000767 000024 00000203776 10256615416 021446 0ustar00jwzstaff000000 000000 /* XPM */ static char * tunnelstar_xpm[] = { "256 256 64 1", " c #020202", ". c #040404", "+ c #070707", "@ c #0B0B0B", "# c #0E0E0E", "$ c #121212", "% c #161616", "& c #1A1A1A", "* c #1D1D1D", "= c #202020", "- c #252525", "; c #282828", "> c #2C2C2C", ", c #2F2F2F", "' c #333333", ") c #363636", "! c #3A3A3A", "~ c #3C3C3C", "{ c #3E3E3E", "] c #414141", "^ c #454545", "/ c #494949", "( c #4C4C4C", "_ c #505050", ": c #535353", "< c #575757", "[ c #5A5A5A", "} c #5F5F5F", "| c #626262", "1 c #666666", "2 c #696969", "3 c #6D6D6D", "4 c #707070", "5 c #747474", "6 c #767676", "7 c #797979", "8 c #7B7B7B", "9 c #7F7F7F", "0 c #838383", "a c #878787", "b c #8A8A8A", "c c #8E8E8E", "d c #929292", "e c #969696", "f c #999999", "g c #9D9D9D", "h c #A0A0A0", "i c #A4A4A4", "j c #ACACAC", "k c #AFAFAF", "l c #B3B3B3", "m c #B6B6B6", "n c #BABABA", "o c #BEBEBE", "p c #C2C2C2", "q c #C5C5C5", "r c #C8C8C8", "s c #CCCCCC", "t c #CFCFCF", "u c #D1D1D1", "v c #D6D6D6", "w c #E2E2E2", "x c #E6E6E6", "y c #EAEAEA", "wqljjjkkkllkkkjjjjjjjjkllmmmmmllkkkjkkklllllllkkkklmnnnnmlkkkkkklmmmlkkkkklmnonmmlkkklmmmlkjjjjjkkkkkjjjjjjjjjjjjjjkkkkkkkkklmnmmlkkjkkklllkkklmnonmllklmopponmlkkklllllkkklmnnonnmmlklmmnnnnmmlllmnoooonmllllmoqstsrqponmmmoqsuutsrponmmmmmnoqrrrqpponnmmlmnpvy", "qc1<<[}}|11||}[[<<<<[[}|234443221|}}}}||122221||}}|2577531|}[[}|23332||}}}14687531|}}13442|[[[[[}}}}}[[<<[[[[[[[[[[}}|||}}}|245431|}[}||111|||24787421|248009642|||22221|||1357875421|13577654211247909753221250cfgfdb0864459cfiihec0864323580cddcba087542236bjv", "l1,*&*=-;>,>>;-==****=-;,)~~~!)),>;---;>,'''',,>;;>'{^/^{)>;---;,)!!',>;-;,!^((^~'>;;,!]{)>-=*==-;;--==**==--======-;;;;;;;>){]{),;---;,,,,>>,)]((/{),,']_[<_^!'>>,'))',>;>,!^((/^~),>'!^//^]!),,)](:<_/]!'''~(}47752}:(^{]/[380073}:(]~!!{/:}1221}[:(^{!)!]_2es", "j<*+.+@#$%&&&%$#@@+++@#$&=;>>;;-=*%$##$%&=====*&%%%*;')),;*%$##$&-;;-*&%$$&-,!!)>-&%$&->,-&$@@@##$$$##@+++@###@@@@#$$%%%%$$&->,,-*%$#$%&***&&&-'~~)>=&&-']/^~';*%%*=-=*&%%&=>)~~),;=&&=>)!)'>;=*=;']^^~'>-==-'^[232|:/{),,)^[26741;;>'](<[[<:(^~),;;;,~(2es", "j:&. .+@#$%%%$#@++...+@$%=-;;;-=*%$####$&****&&%$$%*;')';=%##@#$*=--*%$##$*;'!)>-&$#$*;>-&#++++@#$##@+..++@@@++++@#$$$$$##%=;,>-&$#@#$%&&&%%%-,!!';*%&-']^])>=%$%&==*&%$$%=,)!)';=&%&-,))'>;=*&=;)]]{)>-=*=;!_|22|<(]),>,~_|4641--;,~/:[[<_/]!'>;-->!/[5gt", "j:&. .+@#$%%%$#@++...+@$%=-;;--=&%$#@#$%&****&%$$$%=>'),-&$#@#$%=--=&%###%-,)),;*%$$&-;;*$@+++@#$##@+...+@@@+++++##$$$$##%=;,>-&$#@#$%&&&%%&-'!!,-*%&-)]^{);=%$%*==&%$$$&-,!!),-*%%*;')),;-*&*-,~]]!,-=**-'^[221[(]),>,!(}4652[(])>;--,!^_<[<_/]~'>;-->!/[29iu", "j<&. .+@#$%%%$#@++..++@$&=-;;-=*&%##@#$%&****&%$$$&-,)'>=%$#@#$*=-=*%$##$*>))'>=%$#%=;;=%@+++@##$#@++..++@@+++++@#$$$$##%=;,>-&$#@#$%&&&%%&-'!),-&%&;!^^~'-*%$%*=*&%$$%*;)!!'>-&%&=>))'>;=*&=>)]]~';-**=>{:|21}:^~'>>)^[3652}_]),;-->)^_<[<_/]~),;-->!/[250iu", "j<&. .+@#$%%%$#@+...++#$&=;;;-=*%$##@#$%****&&%$$%=;'),-*$#@#$%=--=&%##$&-')),-&$#$*-;-&#++++@###@++..++@@+++++@#$$$$##%*;,>-&$#@#%&&&&%%&;'!)>=&%*>~^^!,-&$%&*=*&%$$%=,)!),;=&%*;,)),;-*&*-'~]{),-=*=;)(}22|>']:2563|:^!,;-->)]_<[<:(^~),;-->!/[2469ht", "j<*+ .+@#$%%%$#@+...++#%*-;;;-=*%$#@##%&****&%$$$&-,''>=%$#@#$&=-=*%$##$=>)),;*%$$&-;;*$@+++@#$##@+..++@@+++++@#$$$$##$*;,>-&$#@#%&&&%%%*;)!)>=&%=,{^])>=%$%&=*&%$$$&-'!!'>-*%&=>')'>;=*&=>)]]!';=**-,^[121[(]),>,~_|464|:^!';--;'](:[<:(^~),;-->)/[24557fs", "j[=+ .+@#$%%%$#++...++#%*-;;--=&%$#@#$%&****&%$$%*;'),;*%#@@#%=--=&$##$&;')'>=&$#%=;;=%@+++@#$##@+..++@@+++++@#$$$$##$*;,>-&$#@#%&&&%%%*>)!';=&&-']^]);=%%%*=*&%$$%=>)!)';=&%*-,)),;-*&*-'~]{)>-=*=>~:|21}_^!,>>)/}4641--;'{(:<<:(^{),;-->)/[245434dr", "j[=@. .+@#$%%$$#++...+@#%=-;;-=*&%##@#$%&***&%%$$%=>''>-&$#@#$&=-=*%$##%=,)),-*$#$*-;-%#+++@####@++..+@@+++++@#$$$$##$*;,>-&$###%&&&%%%=>)!';*%&-)]^{';*%%&*=*&%$$%-,)!),-*%%=>')'>;=*&=>!]]!,;=**-)/}22|>'^[2552[(])>--;,{/:[<:(^{),;-->)/[24542|2bq", "k}-#+. .+@$$%%$#@++...+@$%=-;;-=*&$####$&****&%$$$&-,)';*%####%=--=&$##$*;))';=%$$&-;-*$++++@###@++..+@@@++++@#$$$$##$*;,>-&$###%&&&%%%=,)),-*%&;!^^~,-&%%&*=*&%$%*;'!!'>-&%&-,)),;-*&*;'{]{'>-**=,]<121[(]),>']:1553}_]),;-;,~/:[<:(^{),;-->!/[24542}<}0p", "k}-#@+. .+@$%%%$#@++...+@$&=-;;-=*%$###$%&****&%$$%=;'',-&$#@#$&=-=*%$##%-,))>-&$#%=;;=$@+++@#$##@+..+@@@++++@#$$$$##$*;,>=&$##$%&&&%%%=,!),-&%*>~^]!>=%$%*==*%$$%=>)!),;=&%=;')'>;=**=,!]]!,-=*=;!_|21}_^!,>,!_|454|:^!,;--,!^:<<:(^{),;-->)/[24542}:(<9o", "j[-#@++. .+#$%%%$#@++..++#$&=-;--=&%$#@#$%&***&%$$$&-,'';=%####%=--=&$##$*>)),;*%$$*-;-%#+++@#$##@++.++@@++++@#$$$$##$*;>>=&$##$%&&&%%&-,!)>=&%=,{^]);=%%%*=*&%$$&-,)!'>-*%&-,)),;-*&*;){]~';-**-'/[12|:/~'>,)/}3541!^_<[:_^]),;-->)/[24541}:/^(7n", "j[=#@@@+. .+#$%%%$#@++..++#%*-;;--=&%##@#$%&***&%$$$*;,',-*$#@#$&=-=*%$#$&-')'>=%$$&-;-*$+++@####@++.++@@+++++##$$$$#$*;,>=&$##$%&&&%%&-'!)>=&&-']^{';*%%&*=*&%$%*;'!)';=&%*;')',;=**-,!]]),-=*=>]:12|[(]),>'^[2552[({'>-->)^_<[:_/]!,;-->)/[24541}:/]~^5m", "j[=#@@@@++. .+#$$%%$#@++..+@#%*-;;-=*&$####$&***&&%$$%=>''>=%$###%=--=%$##%=,)),-&$$%=;;=$@+++####@++.++@@+++++@#$$$$#$*;,>=&$##$%&&&%%&;')';=&&-)]^~,-&$%&==*%%$%=>)!),-*&&=>'),;-*&=;){]~';=*=;)(}21}_^!,>,{:1552}(])>;->)](<[<_/]!,;-->)/[24541}:/])'{3m", "j<*@@@@@@++. .+@$$%%$#@++..+@#%=-;;-=*%$#@#$%&***&%$$$&-,',;*$###$*=-=*%$#$&;')';=%$$*-;=%#+++@#$##@+.++@@+++++@#$$$$#$*;>>=&$##$%&&&%%*;')';*&&;!^]!>=%$%*=*&%%%&-,))'>-&%*;,)',;=&*-,~]{)>-=*-,^[12|:/~'>,!(|453}_]),;-;'](<[<_/]!'>-->)/[24431[:/{),>!3m", "j<*+++@@@@++. .+#$$%%$#@++.++@$&=-;--=&%$#@#$%&***&%$$%=;'',-&$###%=--*%$##%=,)'>=&$$%-;-&#+++@#$$#@++++@@@++++@#$$$$#$*;>>=&$##$%&&&%%*;)),-*&*>!^]);*%%&*=*&%$%*;'!),;=&&=>'),>-*&=;){]!,;=*=>{:|2|<({),,)/}354|:^!,;-;'{(:<<_/]!'>-->)/[24431[:/{),;;~4m", "j<*+.++@@@@++. .+#$%%$$#@+++++#$&=-;--=&%####$%&**&&%$$&-,'';*%###$&=-=&%$#$*;'),-*$$%=;;=$@++@#$$#@++++@@@++++@#$$$$#$*;,>=%$##$%&&&%%=>)),-&&=,{^{';*%%&==*%%$%=,)!)>-*%*-,)',;=**-,~]{)>-==-)(}11[_]),>']<2541-->)/[24431[_^{),;;,^7o", "j[*+..++@@@@++. .+#$%%$$#@+++++#$*=-;-=*&$####%&***&%$$%*;'',-&$##$%=--*%$##%-,)';=%$$*-;=%#++@#$$#@++++@@@++++@#$$$$#$&;>>=%$##$&&&&%%=>)),=&&-']]~,-&%%*==&%%%&-'!)';=&&=>')'>-*&=;)]]!,-=*=,]<|1}:^!'>,{:1442[({'>-;,!/:<<_/]!'>-->)/[2443|[_^~'>;;>!:aq", "j[=@...++@@@@++. ++#$$%$##@+++++#%*-;;-=*%$###$%&***&%$$%=>''>=%###$*--=&%$#$=>)),-&$$&-;-&#+++@#$##@+++@@@++++@#$$$$#$&;>;=%$##%&*&%%%=,))>=&&-)]]!>=%%%*=*&%$%*;)!),-*&*-,)',;=**-,~]~';=*=;!_}1|,!(|442}(])>-->!^:<<:(]!'>-->)/[2443|[_^~'>;;,!/1ds", "k}=@+...+++@@@++. ++#$$%$##@++++@#%*-;--=&%$###$%&***&%$$&-,',-&$##$%=--*%$#$&;'),;*%$%=;;*$@++@#$$#@++++@@@+++@#$$$$#$&->>=%###%&*&%%&-,)';=&*;!]]);*%%&*=*&%$%=,))'>-&&=;')'>-*&=>)]]),-==-'/[1|[(]),>)^[353|_])>;->)^_<<:(^~'>;->)/[2442|<(^!'>;;,!(}6ht", "k}-#++...+++@@@++. ++#$$%$#@+++++@$%=-;--=&%####%&***&%$$%*;''>=%$##$*--=&$##%=,)'>=%$$*-;=%#++@#$$#@++++@@@+++@#$$$$#$&->>=%$##%&*&%%&-,)';*&*>!]{';*%%&==*%%%&-')),;=&&-,)',;=**-'~]~';=*=>{:||}_^!,>']<244|:^!,;->)^_<<:(^~'>;->)^[1442|<(^!'>;;,{(}39iu", "k|;$@++...+++@@@++. ++#$$%$#@+++++@$&=---=*%$###$%&***&%$$&-,',;*$##$%=--*%$#$&;'),-&$$&-;-&#@+@#$$##@+++@@@+++@#$$$$#$&->>=%$#$%&*&%%&-,),;*&=,~]~,-&%%*=*&%$%*>)!)>-*&=;')'>-**=>!]{)>-==;)(}|}:/~'>,~_1441;->)^[1442|<(]!,>;;'{_}360it", "k|;%#@@+...+++@@@++. +@#$$$$#@+++++@$&=---=*%$###$%&***&%$%*;,'>-%$##$*--=&$##%-,)';=%$%=;;*$@++#$$$#@+++@#@+++@#$$$$#$&->>=%$#$%**&%%&;'),-*&='{]!>=%%&*=*&%%&-,))';=&&-,'',;=**-'{]!,-=*-,^<||<(]),,!(}342[({';;;'](<[:(^~'>;->)^[1342}<(]),;;>']:|3568gs", "l1>%$##@++...++@@@+++. ++#$$$$#@+++++#$&=---=&%$###$&***&%$$%=>',;*%##$%=--*%$#$*>'),-&$%*;;=%#++@#$$#@+++@#@++++#$$$$$$&->;=%##$%**&%%*;''>-&&-)]]);*%%&==*%%%*;'!),-*&*;')'>-**=>!]{)>-*=>~_}|[_]),>)^[243}_])>;;,{(<[<_^{)>;->)^<1332}:/]),;;>)^:|45435dr", "l1,&%$##@++...++@@@@++. ++#$$$$#@+++++#%*=--=*&$###$%&***&%$$&-,',-&$##$*--=&$#$%-,),;*%$&-;-&#@+@#$$##+++@#@@+++#$$$$$$&->;=%##$&**&%%*;''>=&*;)]{';*%%*==&%$%=>))'>=&&=>'),;=**;'{]!,-==-)/[|}:^!,>']<243|:])>;;,~/:[<_^{)>;-;)^<1332}:/]),;;>)^<14542|1bp", "l2'*%%$##@++...++@@@@++. .+@#$$$$#@++++@#%*=--=*%$###$%&***&%$%*;,';=%##$%=--=%$#%=>''>=%$%=;;*$@@@#$$$#@++@##@+++#$$$$$$&->;=%##$&**&%%=>'';=&*;!]~,-&%%*=*&%%&-,)),;=&*;,)'>-=*=,!]~';===,]:}};-;)^<1331}:/{),;;,!/[24541[:[0o", "l2'=&%%$$#@++...++@@@@++. .+@#$$$$#@++++@#%*---=*%$###$%&**&%$$%-,',-&$##$*--=&$$$&;'',-&%%*;;=%#@@#$$$#@++@##@+++#$$$$$$&->;=%##%&=*&%%=>',;=&=,~]!>=%%&==*%%%*;'))>-*&=>'),;=**;){]!,-==;!([}[(]),,)(}342[/!,;;,!/:[<_/]),;-;)^<1331}:/{)>;;,~(}24531[_/_7n", "l1,=*&&%$$#@@++..++@@@@++.. .+@#$$$##@++++@$&=--==&%####$&***&%$%*;,'>=%##$%=--=%$$%=,'';=%$&-;-&$@@#$%$$#++@##@@++@#$$$$$&->;=%##%*=*&%%=>',-*&=,{]);*%%*==*%%%=>))';=&*-,)'>-=*-,~]~';==-'^<}[_^!,>'^[242[({'>;>!^:<<:/]),;-;)^<|221[_^~'>;;'{_}3553|<(]~^5n", "k|,*&*&&%%$##@++.+++@@@@++.. .++#$$$##@++++#$&=--=*%$###$%&**&%%$%=>',;*$##%*-;-&$$$*;''>-&%%=;;*$#@#$$%$#@+@###@++@#$$$$$&->;=%##%*=*&%%=>',-*&-)]{'-&%%*=*&%$&-,)),-*&=>'),;=*=;)]])>-==>~_[[:/~'>,]:243}_]'>;>)^:[[:/]),;-;)^<|22|[_^~'>;;']:|3542}:/])'{4m", "k};&%&*&&%%$##@++.+++@@@@+++.. .++##$$#@@++++#$&=-==*%$#@#$%&**&%$$&-,'>=%##$&=;-=%$$%-,',;*%%*;;=%#@@#$%$#@+@###@++@#$$$$$&->;=%#$%===&%&=>,>=&*;)]~,-&%&==*&%%*;')'>=**-,)'>-=*-,~]~';==-)/<[<({',,!_|43|:])>;>)]_[[:(]),;-;'^<|22|[_^!'>;>)^:|3442}:^{),>!2m", "k}-$$%&&&&%%$##@++.+++@@@@@++... .++##$$#@@+++@#%&===*&%$#@#$%&**&%$%*;',;*$##%*-;-&$$$*>''>=%%&-;-&$@@#$%%$#@@###@++@#$%$$$%->;=%#$%===&%&-,,;=&*>!]!>=%%&==*%%%=,)),;=*=;'),;=*=;)]{)>-==,]:[<(]),,)/}341<^!,;>']_<[:(]),;-;'^:|22|<(]!,>;>)^<14431[_^!'>;;)3m", "j[-$#$%&&*&&%$$#@+++.++@@@@@+++.. .++##$##@++++@#%*===*&$#@@#$%&*&&%%&-,',-%$#$&-;;=%$$&-,',-&%%=;;*$#@#$%%$#@@####@+@#$%$$$%->;=%#$&=-=&%&-,,;=&=,~{);*%%*==&%%&-'))>-**-,)'>-=*-'{]!,-==;!(<[_^!,>'^[242[/!,;;'](<[<(]!,;-;'^:|22|<(]!,>;,!/[2443|[(]!,>--;{5n", "k}-#@#$%%&&&&%$$#@++++++@@@@@+++....++@####@++++@#%*===*%$#@#$%&**&%%%*;,';=%##%=;;-*%$%=>',;*%%*;;=%#@#$%%$#@@####@+@#$%$$$%->;=%$$&=-=&%*-,,;*&=,{{'-&%%*=*&%%*;))';=*=;'),;=*=>!]{);==-'^:<:/~',,{:142}({'>;,{(<[<(^!,;-;']:|21}<(]),;;,~([2442|',-&$#$&-;;=%$$&;,'>=&%&-;-&$##$%%%$#@##$#@+@#$%$$$%=;;=%$$*--=&%*;,>-**-'{~,=%%&==*%%%=,)),-**-,)'>-=*-'{]!,-==>~(<:({),,!_|33|_])>;,~(<[<_^!,;-;']:|11}:/]),;;,{(}2442}:/~)>;-->)^}cr", "k|;$#@@##$%&&&&%%$##@+++++@@#@@@+++...++@####@++++#$&*==*%$#@@#$%&&&%%$&-,'>=%##%=;;-&$$%=>',-*%&=;;=%###%%%$#@##$#@+@#$%$$$%=>;=%$$*--=&%*;,>-**;){!>=%%*==*%%&;')'>=*=;')';=*=>!]{';==-)^::(]),,)/}33|:^)>;,!/<[<_^!,;-;']:}1|}:/{),;>']_|3431[_^!'>---,!^<4fs", "k|>%##@@@#$%&&&&%%$##@+++++@@##@@+++...++@####@+++@#$&*==&%$#@##$%&&&%%%*;,,;&$#$&-;;=%$$*;,,;=&%=;;-%###$%%%#@##$#@@@#$%$$$%=;;=%$%=--=&%*;>;=&*>!{);*%%*==&%%=>)),;=*-,)',-=*-'{])>-=-,]_:_^!,>'][231<^!,;,!/:[<_^!,;-;']:}1|[:/{'>;>']:|343|[(]!,;--;,{([28ht", "l1,&$$#@@@#$%%&&&%%$##@+++++@@##@@+++...++@###@@+++@#$&*=*&%$#@#$%&&*&%%%=>'>=%##%=;;-*%$%-,'>-&%*->-*$##$%&%$###$$#@@#$%%$$%=;;*%$%=;-=&%=;>;=&=,!~'-&%&==*&%&-,))>-*=;')';=*=,!]~';==;!/:_/~'>,{:132[/~,>>)^:[[_^!,;-;,]:}||[_^~'>;>)^<1342|)]:}248gt", "l1,*%$$##@@##$%&&&%%$$#@++++++@##@@@++...++@###@@+++@#%&*=*&$#@@#$%&&&%%%&;,,;*$#$&->;=%$%*;,,;*%&-;;=%##$%&%$###$$#@@#$%%$$%=;;*%$%=;-=%%=;>-**=,~!,=%%&==*%%*;')';=*->)),-==;)]])>==-,](_/]),,!(|32}({'>>)^:[[:/~';-;,]:}||[_^!'>;>)^<1442}:/~'>;-;,!/<|3446er", "l2'=&%%$##@@##$%&&&&%$$#@++++++@###@@+++..++@@##@@@++@#%&**&%$#@@#$%&*&%%%=>,,-%$#%=;>-*%$&-,,>=&&=;;-&$#$%&&%###$$#@@#$%%$$%=;;*%$%-;-*%%=;>-**-'{!>*%%*==&%%=>)),-==;,)'>=*-,~]~,-==>!/_(]),>)/}23|:])>>)]_[[:/~';-;,]_}|}<(^!'>;,!/[2431[_^!'>--;,{([134212cq", "l2'=*&%%$$#@@@#$%%&&&%%$##@+++++@###@@+++..++@@##@@@+@@$%&**&%$#@@#$%&&&%%&-,,;*$#$&->;=%$%=>,,-*%*->-*$#$%&&%$##$$#@@#$%%$$%=;;*$$&-;-*%&=;;-**;)~);&%&===&%&-,)'>=*=>'),-==;)]]);==;)^((^!,>']<23|:^),>']_[[:/{';-;,]_[|}<(]!,>>,~(}233|[(]),;-->)]:}2332}<}0p", "l2'=**&&%%$##@@##$%&&&%%$##@+++++@####@@++..++@@@@@@@+@#$%&**&$#@@#$%&&&%%%*;,,-&$#%=;>-*%$&;,,;=&&->;=%##%&*%$##$$$#@@$%%$$%=;;*$$&-;-*%&=;;=*=>!~'-&%&==*&%*;'),;==;,)'>-=-,~]!,-=-,{/(^~'>,~:131'{_[[:/{';-;,]_[|}<(]),;>'{_}232|,>=%#$*;>;=%$%=>,>-*&=;>-&$#$&*&%##$%$#@@$%%$$%=;;*$$&->-*%&-;;=*=,!!,=%%*==*%%=>))>-==>'),;==;)]{);==;)^(/{),,!(|32[(~,>,{(<[<({';-;,{_[}}:(]),;>']:|232}:^~'>;-;'{([1332}<(^{/6n", "k|,******&&%$$##@##$%%&&%%$$#@+++++@#####@++..++@@@@@@@@@#$&**&%$#@@#$%&&&%%*;,,-&$$%=>>-*%%*;,,;=&*;>;*$#$&**%$#$%$#@@$%%$$%=;;*$$*;>-*%&-;-=*=,!!>*%%=-=&%&-,)';==-,)'>-=-'{]!,-=-,]//]),>)^[22}({'>,~(<[<(]'>-;,{_[}[:/{)>;>)^:|231[_^!,;-->)]:}2321[:/]))]4m", "k};&&&****&&%%$##@@#$$%&&&%$$#@+++++@#####@+++..++@@@@@@@@#$&*&&$#@@@#%&&&%%%=>,>=%$$*;>;=%$&->,>=&*->;=%$$%**%$#$%%#@@$%%%$%=;;*$$*;>-*%*-;-**-'~);&%&=-=&%*;'),-==>'),;==>!]{';==>!^/]!,>']<12|:]),,!/<[<(])>-;,{([}[:/{'>;>)^<132|[(]),;-;,!/<|232|<(^~),>~3m", "k}-$$%&&****&%%$$##@##$%%&&%%$#@@++++@#####@@++..++@@@@@@@@#%&&&%$#@@#$%&&&%%&-,,;*$$%=>>-*%%=;,,-*&=;>-&$$%**&$$$%%$@@#%%%$%=;-*$$=;>-&%*-;-**;)!'-&%*=-*&&=,)'>==-,)'>-=-'{])>-=-']^^~'>,~_|21<^),,!/<[[_])>--,{(<[[_^~'>;>)/[132|;-;'{([1321}:/]!'>;;~4m", "j[=##$%%&****&&%%$##@##$%%&&%%$##@++++@#####@@++..++@@@@@@@##%&&&%$#@@#$%&&&%%*;,>-%$$*;,;=%%&-,,;=&=;>;*$$%***%$$%%$#@#%%%$%=;;*$%=>>-&%*--=*=>)!,=%%*-=*%&-'),;==;'),;==>!]~'-=->!^^{),>)(}21[/!,,)^:[[_])>--,~(<[<_^!'>;,!([122}:^~'>;;>)^:}222|[_^~),;;;,^7o", "j[=#@##$%&*****&&%$$#@@#$$%%&%%$##@++++@######@++..++@@@@@@@#$%&&%%##@@#$%&&%%&=>,;*$$%=>>-*%%=>,>-**->;=%$$&=*%$$%%$###%%%$%=;-*$%=>>-&%*--=*=>!)>*%&=-=&%*>))>-=-,)'>-=-'{]);==;)]^]),>'^[22}(~',)^:[[_^)>--,~(<[<(^!,>>,~(}221[_^!,;-;,!/<|221}:/]!'>;;;,~:aq", "j[=@+@@#$%%&*****&%$$##@##$%%&%%$##@++++@######@++..++@@@@@@@#$%&&%$#@@@#%%&&%%*;,,-&$$*;,;=%%*;,,;=*=;>-&$$&==&$$%%$###%%%$%=;-*$%-,,-&%*--=*=,!);&%&=-*&&=,)';==;'),;==>!]~,-=-,~]]!,>,]:12}_{',)]:[[:^)>-;,~(<[:(]!,>>']_}22|[(]),;-;'{([122|[_^~),;;;>)]_2es", "j[=@+++@##$%&*****&%%$##@##$%%%%%$$#@++++@##$$##@++.+++@@@@@@@#$%&&%$#@@#$%&&&%%=>,>=%$%->>-&%%=>,>=*=;>;=%$%==*%$%%%###$%%$%=;-&$%-,,-&%*--**-'!'-&%*-=*%&-'),-=-,)'>-=;)]]);==>)]]~'>,!_|2|:]),']_[[:^)>--,~(<[:(]),>>']:|22|:/{'>;;>)^:}121}:(]!'>;;;,~/<|7ht", "j[=@++++@@#$%%&****&&%$$####$$%%%%$$#@++++@##$$##@@+++++@@@@@@##$%&%%$#@@#$%&&%%&-,,-&$$*;,;=%%*;,>-**->>=%$%*=*%$%&%$##$%%%%=;-&$%-,,-&%=-=**;)!,=%&=-=&&=>''>-=;'),;=-,~]!,-=-'~]~),>)/}21<^),'{([[:^!,;-,~(:<:/]),;>)^<|21}:^!';;;,!/<|21|[_^{),;;;,)]_}249ht", "j[=@++++++@##$%&*****&%%$#####$%%%%$$#@++++@##$$$##@++.++@@@@@@##$%&%$#@@@#$&&&%%*;,>=%$%->>-&%&->,;=*->>-&%%*==&$%&%$##$%%%%*;-&$%;',=&&=-=*=;))>*%&=-=&&-,),;=->)'>-=;)]{';=->!]{),>'^[11[/!,'~(<[:/!,;-,~/:<:/{)>;>)/<|21[_]),;;;'{([|11}<(]!'>;;>'{(<|3448fs", "j[=@+++++++@@#$%%&****&&%$#####$%%%%%$#@@+++@##$$$##@+++++@@@@@@#$%%&%$#@@#$%&&&%&=>,;*$$*;,;=%%=;,>-*=;,;=%%&==&%%&&$##$%%%%*--&$&;',=&&===*=>));&%*--*&*;''>-=;,),;=-,~]!>-=;'~{!,>,{:|1}(~''!/<[:/!,;-,!/:<_/~'>;,!/[12|<(])>;;>)]_}11|[_^{),>;;,!^:}244324dr", "j[*@+++++++++@##$%&****&&%$$##@#$$%%%%$##@+++@@#$$$##@+++++@@@####$%%%%$#@@#$%&&%%*-,>=%$%->>-&%&->,;==;,>=&%&==*%%%&$##$%%%%*--&$&;',=&&===*=,)'-&%=-=*&=>'';-->''>-=;)]{'-=-,!{!'>,!(}1}_{''!/:[!/::_^~'>;,~([11|;;,!^:}1|}<(]!'>;;>']([13432}[|ap", "j<*++++++++++++@#$%%&****&%%$##@##$%%%%$##@+++@##$$$$#@+++++@@#####$%%%%$#@@#$%&&%%=;,;*$$*;,;=%%=>,;==->,-*%&==*%%%&%##$%%%%*--&$&;'>=%&==**-,),=%&=-=&&-,',-=;,),;=-,{])>==;)~!),>)/[1|:])')^:[<(~,;;>!/::(^!,>;,{(}11}:^!,;;;,{([|||[_^{),>;>,!^:|2432|[_(:8o", "j<*+..++++++++++@##$%&****&&%$$####$$%%%$##@+++@##$$$$#@+++++@@#####$%%%$#@@#$%&&&%&->>-&$%->>-&%*;,>-==;,;=%&=-=&%%&%$#$%%%%*--&%&;'>=%&==**;')>*%*--*&*;'';-->''>-=;)]~,-=-,!~),>']<1|<^)')^:[<({,;;>!/_:(^!,>>']_}1|[_]),;;>']_[||}<(]!'>;;>)]_[13431}:(]~/5n", "j<*+....++++++++++@#$$%&****&%%$#####$%%%$$#@+++@##$$$$#@+++++@@#####$%%%$#@@#$%&&%%*;,;*%$*;,;=%&=>,;==;,>-&%*-=&%%&%$#$%&%%*--&%*;'>*%*==*=;'';&%*--*&=>',;-;,),;=-,{{);=->)!),>,~:|1[/!')]_[<({';;>!^__(]),>>)]:}1|<({'>;;>)^:[}}[_^{),>;>'~/<|2331}<(^~',~3m", "j[*+.....++++++++++@@#$%&*****&%$##@##$%%%$$#@+++@@#$$$$#@+++++@#####$$%%%$#@@#$&&&%&=>>-&$%->>-&%*;,>-=->,-*%*=-*%%&&$#$%&%%*--&%*>';*%&==*=>),-&&=-=&&-,'>--;'',-->!]!,-=;'!!'>>)(}|[(~')]_[[_]';;>!^__/]),;>)^<||}:/~';;;,~/:}}[:(]!'>;;,)^:}2332|[_^{),;;)2l", "j[=@+......+++++++++@@#$$%&****&%%$####$$%%$$#@++++@#$$$$##++++@@#####$%%%$##@@#%&&&%*->>=%$*;,;=%&->>-=->,;=&*=-=&%&&$#$%&%%*--&%*>,;*%&==*=,),=&&--=&*;',;--,)';--'{{';=-,)!),>'^[|}_{)'{([[_]';;>!^(_/]),;>)/<||[_^!,;;;'](<}}<_^{),>;>'{([1332|[:/]),;-=-)2m", "j[=@+++.....++++++++++@@#$%&*****&%$#####$$%$$##@+++@#$$$$##++++@@#####$%%%$#@@#$%&&&&=;,;&%%->>-&%=;>;==;,>-&&=-=&%&&%#$%&%%*--&%*>,;&%*=**-,'>*%*--*&=>',--;'',-->!{!>--;'!),>,]:|}:]))~(<[_]';;>!^((/{)>;,!/[||[(])>;;>)]_<[[:(]!'>;>,!^:|2331}<(]!'>-===;{5n", "j[=@+++++....+++++++++++@#$%%&****&%%$####$$$$$##@+++@#$$%$$#@+++@@#####$%%%$#@@#$&&&&*->>=%%*;>;*%*->>-=-,,-*&=--*%&&%$$%&%%*--&%=>,-&%*=**-,';&&=-=**-,,;--,'';-;'{~'-=-,))'>,~_}}:^)'!/<[:^)>;>!^((^{'>;,~([|}<({'>;;,!^_<[<_^{),>;>)]([1332|<_^~'>;-==->)(9o", "k[=#++++++....+++++++++++@@#$%&*****&%$#####$$$$##@+++@#$$%$$#@+++@######$%%%$#@@#%&*&&=;,;*%%=>>-&&=;>;=->,;=&*--*%&&%$#%&%%*--&%=>,-&%*=*=;',-&&=-=&*;,,;-;'',-->!{)>-->))',>)/[};>)^((^~'>>,{([|}:^!,;;;,~/:<<:/]!'>;>,~/<|232|[_/{),;-==-;,!^[ap", "k}-#@@++++++++++++++++++++@@#$$%&****&%$$####$$$$$#@+++@#$%%$$#@+++@#####$$%%%$#@#$%&&&&=>>-&%*;>;*&*;>;--;,>=&*--=&&*&$$%&&%&--&%=,,-&&*=*=>',=&*--**=>,>-->'';-;'{!,-=;')),>'^<}[(~))^:<:^)>;>)^((^!'>>']_[}[_^),;;>'](:<:(^~),;;,)]_}1321}:/]),;-==-;,)]^_|bq", "k}-#@@@@++++++++++++++++++++@@#$%&*****&%$####$$$$$#@+++@#$%%$$#@++@######$%%%$##@#$&*&&*->;=%%=;;=&&->>-=;,,-**--=&&*&$$%&&%&--*&=,,-&&*=*=>'>=&=--**-,,;-;,',-->!~);=-,)),>,{:}[({))]_<:^)>;>)^((^!,>>']:}}<(])>;;,)](::_/]!'>;>'~(<|222}<(]!'>-==-;,)]^(_:|bq", "k};$##@@@@+++++++++++++++++++@@##$%&****&%$#####$$$$#@@++@#$%%%$#@++@##$$#$$%%%$#@#$%&*&&=;>-&%*->-*&=;>;-->,;=*=--*&&&$$%&&%&--*&-,,=&&*=*-,';*&=-=*=;,>-->'';-;)~!,-->')'>,!([}:]))]_<:/!>;>)]//]!,>>)^:}};-=-;,){^(____[0p", "k};$####@@@@+++++++++++++++++++@@#$%&*****&%$####$$$$##@++@#$%%%$#@+@@##$$$$$%%%$###$%**&*->>=%%=;;=&*->>--;,>=*=--*&&&%$%&&%&=-*&-,>=&&**=-,,-**--=*=>,;-;,',--,!~';-;,)',>)^<[:^!)](<:/!,;>)]//]),>,)^:}[:^!,;;>'{/__(/])'>;>'{([|22|[:/{),;-=-;,){^(___(//:9o", "k};$$#####@@@++++++++++++++@@@+++@##$%&*=**&%$####$$$$##@++@#$%%%$#@@@@#$$$$$$%%%$###%&**&=;>;*%*-;-*&=;>;-;,,-*=--*&&&%$$&&%&=-*&-,>=%&**=;',=&=--**-,,;->'';-;)~)>--,)),>']:[)]//]),>,!/<[[_])>;;>)]/((/]!',>>,!^:}121}:(]),;-=-->'~^((__(/^]{(7n", "k};$$$######@@@@+++++++++++++@@@++@@#$%&**=**%$#####$$$##@++@#$%%%$#@@@##$$$$$%%&%$##$%****->>=&%=;;=&*->;-->,;==--=&&&%$$%&%&=-*&-,>=%&**=>'>=&=-=*=;,>--,',;-,!!,;-;')',,~_[)]/^]),>,~(<[<({'>;;,)]/((^{),>;>)]([|21}<(]!'>-=-->'~^/(__(/^]!))]4m", "k}-$##########@@@@+++++++++++@@@@@@@@##$%&*=**&%$####$$$$#@@+@#$%%%$#@@@#$$$$$$%&&%$##$&***=->;*%&-;-&&=;>-->,>-*--=*&*%$$%&%&=-*&-,>*%&**->';**--=*->,;-;,'>-;)!);-;,)',,)/<<({)!^::(~,;>)]/^{),>,{(<[:/!,;;;,!^/(/]!'>;>,~/<|11|[_^~'>---->'!]/(__(/^]!)'>>!3m", "j[-#############@@@@+++++++++@@@@@@@@@@#$%&**=*&%$####$$$$#@@+@#$%%%$##@##$$$$$%%&&%###%&***=;>-&%=--*&=;>;-;,,-==--*&&%$$%&%&=-**-,;*&***-,,-*=--=*->>-;>',;;,!!,-->'',,'^:<_])!^_:({,>>)]^^{',>'](<<_^),;;>'~^//^{),>;,)]_}11|}:/{),;---;,!]/(_((/^]!),>;-;)3m", "k[-#@@############@@@@++++++++@@@@@@@@@@##$%&*==*&%$####$$$##@+@#$%%%$$###$$%%$$%&&&$##$%****->;=%&-;=&*->;-;,,;==--*&&&$$%&&&=-**->;*&*==-,,-*=--*=;>;-;,,>->)!';-;')',,{_<_^!!](:({'>,)]^^~'>>)]_<<(])>;;>){^^^]!'>;>'~(<|11}<(]),;---;,)]^((((/^{!),>;---;~4m", "k}-#@@@@####$$$#####@@@@+++++++@@@@@@@@@@@#$%&*==*&%$####$$$##@@@#$$%%%$###$%%%$$%&&%$##$&***=;>-&%*--*&=;>;->,>-=--=&&&%$%&&&=-**->-*&**=;,>=*=-=*->>;->,,;;,!)>-;,)',,!(::^!!](:(]'>,)]^^~'>,)^_<:/~';;;,)]^^]~),>>,)^:}11|<(]!,;---;,){^/(((/]{!),>;----;,^7n", "k|;$##@@@@####$$$$####@@@@+++++@@@@@##@@@@@##$%**==*&$####$$$##@@@#$%%%%$###$%%%%%%&&%$#$%*=**-;;=&&=-=&*->;->,,-=--=&&&%$%&&&=-**-;-&&*==>,;==--==->;-;,,>;>)!';->'),,)^::/~!](:(]'>,)]^]!'>,)^_:_^!,;;;,!]^]{)'>;>'{([|1|[_^~'>---;>)~^/((/^]{!',>;---;;,){:0p", "l1,&$$##@@@@####$$$$#####@@@+++++@@@####@@@@@#$%&*==*&%$####$$##@@@#$$%%%$##$%%%%%%%&&%$$$&*=*=;>-*&*-=*&=;;;;,,;=--=*&&%$%&&*=-**-;=&&*=->,;==--==;>;->,,;;,))>-;')',']_:({!{/_(])>,)]^]!,>,!^_:(])>;;>'!]]]!',>>,!^:}||[:/{)>;--->'~]/((/^]~!',>;---;>,){]/[ap", "m2)=&%$$##@@@@###$$$$$$####@@@+++@@@@######@@@##$%**=**%$####$$$##@@#$%%%%$##$%&&%%%&**%$$%*===-;;=&&=-*&*;;;;,'>--;-*&&%$%&&*=-**-;=&&*=->>-=--==-;;-;>,>;>)),;;,)',,~(:(]!~/__]),,)]^]!,>,!/::({'>;;,)~]]~),>;>)]_[||}<(]),;--->'!]^///^]~)',;;---;>'!{^/(_}ap", "m4~;=*&%%$###@@@###$$$$$$$###@@@@@@@@@#######@@@#$%&*==*&%$###$$$##@@@#$%%%$$$$%&&%%%&*&%$$%*===-;;*&*==&&-;;;>,,----=&&%%%&&*=-**--=%&*=->>-=--==->;-;,,;;,)'>;>'),,)^_(]!!^_(^),,)]^]),>,~/__/~,;;;,)~]{!',>>,!/<}|}<(]),;---;,){^///^]~)',;;---;,'!]^/(((([0p", "n6^,>;-=*&%$$##@@@###$$$$$$$###@@@@@@@@########@@##%&*===*%$###$$$##@@##$%%%$$$%&*&&%&**&%$%&====;;-&&==*&=;;;;,,;---=&&%%%&**=-**--*&&*=;,;==--==;;-->,>;>)),;;,)',)]((^!!]((^),,)]^]),>'~/_(^),;;>'!~{~),>>,)]_[||[_^!,;---;,)~]^/^]{!)'>;---;>,)~]^/(((/^^:9o", "n7/)',>;-=*&%$$##@@###$$$$$$$$$##@@@@@@@#########@##$%&*==*&$$###$$$#@@##$%%%$$$%&**&%&**&%$%*===-;;=&*=*&*-;;;,'>---=&&&%%&&*=-**--*&*==;,;=---=-;;-;,>;;,),;;,)','{/(^~!]/(^),,)]]{),,'{/(/])>;;>'!~~!',>>'~/<}|[:/~'>---;>'!]^^^]{!),>;---;>'){]/(((/^^]{~(7n", "n6^))'',,;--=&%%$#######$$$%%%$$$##@@@@@@####$$###@@##$&*==*&%$###$$$##@@#$%%%$$$&***&&&**&%%&====;;-*&*=&&=;;;>',;-;-*&%%%&&*=-**=-*&*=-;>-=--==-;;;>,>;>''>;>'),,!^(^~!{/(^!,,)]]{),,)]/(^~,;;;,)!~!),>>,)^_[}}<(])>;--->'!]]^^]~!',>;---;>'!{^/(((/^]]~!))]5m", "m4{,,'')'',>;-=*&%$$######$$%%%%%$$###@@@@@###$$$$#####$%&*==*%$###$$$##@##$%%%%$%&*=*&&*=*&%%*===-;;=&&**&*-;;;,,;-;-*&&%%&&*==**==*&*=->>-=--==;;-;>>;;,',;>')',)](/{!{^(^!,,)]]{),,)]//]!,;;>,)!!)',>>'{(<}}<(]),;---;,){]]]{~)',;;--;;,)!]^/((//^]{!)',>>~4m", "l2)-;;,,'''',>;-=*&%$$#####$$%%%%%%$$$##@@@@###$$$$$####$%&*==*&%$##$$$#####$%%%%$%&==*&&*=*&%&=-==-;-*&**&&=;;;,'>;;-=&&%%&&*=-**==&&*=->>--;-=-;;-;>>;>''>;,)),'{//]!~^(^!',)]]{),,)]//])>;;>'!!!),>>,!^:[}[_^!,;-=-;,)!{]]{!)'>;;--;>,)~]^/(//^]]~)),,>;;;~4m", "l1,**=-;>,,''',,>;-=&%%$#####$$%%&&&%%$$##@@@###$$$$$$####$%*===&%$##$$$$####$%%%%%%*===**==*&%&=---;;=&&*&&=;;;>',;;-=&&%%&**==**==&&*=;>;--;-=-;-;>>;;,',;>')''!^/]!~^/^~'')]]~',,)]^^~'>;;,)!!)'>>>)](<[[:/~';-=-;>'!~{{~!),>;---;>,){]^/(//^]{!)',>;;;;;,^6n", "l1,*&&**=-;>,'''',>;-=*&%$$####$%%&&&&&%%$###@###$$$$$$$###$%&*==*%$$#$$$$####$%%%%%&*===**==*&&*----;;=&&&&*-;;>,,;;;=&&%%&&*===*==&&==;>;---==-;-;>>;>',>>')'')]^]!!]/^~''!]]~',,)]^]!,;;>,)!!),>>,!^:[[:({'>-=-->')!~~!)',>;---;>'!{^////^]{~)',>>;;;;>,){:0p", "l2'=&&&&&*==-;,,''',,;-=*&%$$###$$%%&***&%%$###@###$$$$$$####$%*==*&%$#$$$$####$%%%%%&=--=*===*&&=---;;-*&&&&=;;;,'>;;-*&%%&**==**=*&&=-;>;-;-=-;-->>;;,',>,))'){^]~!]^^~''!]]~','!]]{)>;;>')!)',>,)](<[<(])>--=-;,)!!!!)',;;---;,'!]^///^^]~!)',>;;;;>,)!]/_|cq", "m3!-=**&&&&&*=-;>,,'',,>;-=&%%$$##$$%&**=*&%%$######$$$%$$$###$%&*==*%$$$$$$$###$%%%%%&=--=====*&*----;;=&&&&*-;;,',;;-*&%%&**===*=*&*=->>--;-=---;>>;>,,>,')''~]]~!{^^{)'!]]!','!]]~'>;;,'))',>>'~/:<<_^!,;-=-;,')!!)',>;----;,)!]^^//^]{~)',>>;;;>,'!]^(:<[2dr", "m4~;--==**&&&&*==-;>,,,,,>;-=*&%$$#$$$%&*===*&%$######$$%%%$$##$$%*==*&%$$$$$$###$%%%%%*=--===-=**=---;;-*&&%&=;;>',>;-=&%%%**===**&&*=->;---==---;>;;,,>>')''!]]{!{^^{)'!]]!','!]]!,;;>,)))',>,)](:<_/~';-=-;>'))))',>;---->,)~]^^^^^]~!)',>;;;>,'!{^(_:<[[[1bq", "n5],;;;--==**&&&&*==-;>,,,,>;-=*&%$$$$$%%&*===*&%$$####$$%%%$$$##$%&*=*&%$$$$$$$##$%%%%&*-;-===-=**=---;;=&%%%*-;>,'>;;=&%%%**===**&&*=;>;-;-=---;>;;>,,>,))'){]{!~]^{))!]]!','!{~),;;>'))),>,'{/:::/{'>-=-->,'))',>;;---;>,)~]^^^^]{!)',>;;;;,'){^(_:<[<<:__[0o", "n5],>>>;;;--==**&&&&*=-;;>,,,>;--=&%%$$$$%&*==-==&%$$####$$%%%%$$$$%&*==*%$$$$$$$##$%%&%&=-;-==--=*=---;;-*%%%&=;;,',;;=&%%%**===**&&*=;>;-;-=---;>;;,,>,')')!]{!!]^{))!]{!','!~!'>;;,'))',>,!](::(])>----;,'''',>;----;>'){]^^^]]~)',>>;;;>,)~]/_:<<<<:_(^]](7n", "m4{,>>>>>>;;;--==**&&&**=-;>>,,>>;-=*%%$$$$%&*=---=*&%$###$$$%%%$$$$$%&*=*&%$$$%$$$$$%&&&&=-;;----===-;;;;=&%%%=-;>',>;-*&%%&*=-=**&&*-;;;;;-=---;;;>,,,'))'!{{!!{]{!)!]{)','!!),;;>,))),,,'{/_:(^!,;-=-;>,'',,;;----;>'!{]^^^]{!)',>;;;>,)!]/(:<<<<:_(^]~!)']4m", "l2);;;>>>>>>>;;;--==**&&&**=-;>>>>;;-=*&%$$$$%&*=---=*&%$###$$%%%%$$$$%&*==&%$$$%%$$$$%%&&*=;;;----==-;;;;-=%%%&-;>,',;-*&%%&*=-=*&&&=-;;;;-=---;;;;,,>,))')~{!!{]{!)~]{),,'!!'>;;,'))',,'!^(__^~';-=-;>,,,,>;--==-;,'!{]^^]{!)',>;;;>,'!]^(_:<<::_/^]~)',>;>!3m", "k|,**=--;;>>>>>>;;;--==**&&&*==-;;>>;;-=*&%%$$%%&==---=*&%$###$$%%%%$$$%%*==*&%$$%%$$$$%%&&*-;>;----==-;;;;-&%%%=;;,',;-=&%%&*=-=*&&*=-;;;;-=---;;;>,,,')))!{~!{]]!)~]{),,'))'>;>,)))',,){/__/{'>-=--;,,,>>;--=--;,)!{]]]]~!),,>;;;>'){^/_::<::(/^]~)',>;;--;!3m", "k};%$%&*==-;;>>>>>>>;;--==*&&&&*==-;;;;;--=*&%$$%%&=--;-=*&%$##$$$%%%%$$$%&==*&%$$%%%$$$%%&&*-;>;----=-;;;;;=%%%*-;,',>;=&%%&*=-=&&&*=->;;;-=--;;;>,,,')))!~~!{]]!!~]{),,')),;;>'))',,'!^((/])>----;>,,>;;-==-->,)!{]]]{!)',>;;;>,)~]/(::::_(/^]!)',>;;----->{5n", "k};$##$$%%&*=--;>>>>>>;;;--==*&&&&*==-;;;;--=*&%%$%%&=--;--*&%$##$$%%%%%$$%&*==*%%%%%%$$$%%&&=->>;;-----;;;;-&%$%=;>,',;=&%%&*=-=&%&*=;;;;-==--;;;>,,'))))!!!~]]~!~{~),,')'>;;,'))',,)]/(/]!,;---;>>>>;--==-;>,)~{]]{~)',>;;;>,'!]^(_:::_(/^{!)',>;;----;>,'!(8o", "k|>%$$####$$%&*==-;>>>>>>>;;--=**&&&&*==--;;--=*&%%%%%&=-;;;-=&%$$$$$%%%%$$%%*==*&%%%%%%$$%&&*=;>,;;;---;;;;;=%%%*->,',;-*&%&*=-=&%%*-;;;;-==--;;>,,,))))!!!!]]~!~{~),,'',>;>,)))','!^//^~';---;;>>;;-===-;>')~{{{~!),,>;;;>'){^/(_:__(^]{!),>;;----;;>,)!{^(}bq", "l2'*&%%$$###$$$%%&==-;;>>,,>>;;-==*&&&&&*==-----=*&%%%%%&=-;;;-=&%$$$$%%%%%%%%&*==&%%%%%%$$%&&*=;,,;;;;--;;;;-*%$&=;,',>-=&%&*=-=&%%*-;;;;-=--;;;>,,'))))!!!{{~!~{~),,',,;;>'))',')]^/^{)>---;;>>;;-===-;>')~{{~!)',>;;;>,)~]/(___(/^]~)',>;;---;;>,')~]^(_:[2cr", "m4~;==*&%%$$$$$$$$%%&*=-;>>,,,>>;;-==*&&&&&*==----=**&%%%%&=-;;;-=&%$$$$%%%%%%%&*==*&%%%%%%%%%&*=;,,>;;;;;;;;;=%$%*->,,,;=&%%*=-=&%%*-;;;--=--;;;>,'))))!!!~{~!~{!',,,,>;>,)))'')~]^^]),;---;;;;--===-;,')!~~!)',>;;;>,'!]^/((((/^]~)',>;;---;;,')!]^(_::<<[[2cr", "n6^'>;;-==*&%%$$$$$$$$%&*=-;>>,,,,>;;-==*&&&&&*===--==*&%%%%&=-;;;-=&%$$$$%%%%%%%*==*&%%%%%%%%%&*=;,,>>;;;;;>;-*%$&-;,',;=&%%*--=&%%*-;>;-==-;;;>,,)))))!!!~~!~~!',,,,>;>,)))''!{^^]!,;---;;;;--===-;,)!!~!!)',>;;;>')~]/(((/^]{!)',>;;--;;>,)!{^/(_:<<[[<<:<|bq", "n7(!)',,>;;-==*&%%$$$$$$%%&*=-;>>,,,,>>;-==*&&&&&*======*&&%%%&=--;--*&%$$$$%%%%%%&*==*&%%%%%%%%&*-;,,>>;;;;>;;=%$%=;,',;=&%&=--=&%&=-;;;-=--;;>>,'))))!!~~~!~~!',,,>>>,'))'')~]^]!'>;--;;;;-====->,)!!!!)',>;;;>,)!]^/((/^]~!',>;;;-;;>,')~]^(_:<<<<<<::_((([0o", "n7/!)))))',,>;;-==*&%%%$$$$%%&*=-;>,,,,,,>;-==*&&&&&**====**&%%%&=--;--*&%$$$$%%%%%&*==*&%%%%%%%%&*->,,>;;;;>>;-*%%&->,,>-*&&=--=&%&=-;;;---;;;>,')))))!~~~!~~!',>>>;>,)))')!{]]~)>;-;;;;;--==-;>,))!!)',>;;;>,'!{]^//^^]~)',>;;--;;>,)!]^/(::<<<<<::_((/^]]{(7n", "m4],,''))))))',,>;;-==*&&%%$$$%%&*=-;>,,,,,,>;-==*&&&&&**===**&&%&&*=---=*&%$$$$%%%%%&*==*&%%%%%%%&*->,,>;;;;>>;=&$%=;,',;=&*=--=&&*-;;;-==-;;>>,'))))!~{~~~~)',>>;;>')))))!]]{),;;;;;;;-===-;>,))!)),,>;;;>,)~]^^^^]{!)',>;---;>,')~]/(_::<<<:::_((/^]{~!)')^5n", "l2'---;>,,'))))))'',>;;-==*&&%%%%%%&*=-;>,,'',,>;-=*&&%%&&**==**&&&&&*=---=*%$$$$$%%%%&*==*&&&&%%%%&=->,,>>;;>>;-*%%*-,',;=&&==-=&&*-;>;-=--;;>,')))))!~~~~!)',>>;>,'))))!~]{!'>;;;;;;-===-;,'))))',>;;;>,)!{]^^^]~!),>;;--;;>,)!]^/(:::<<::__(/^]]{!))',,>>,]4m", "k|>&&&*==-;;>,'')))))'',,>;--=**&%%%%&&*=-;>,'''',>;-=*&&%&&&**=***&&&&*==--=*%$$$$$%%%&*===*&&%%%%&&=->,,>>;;>>;-&%%=>,,;=&&*===&&*-;>;----;>,')))))!~~~~!),,>>;>,)))))!{{!'>;;;;;;--=--;,')))',>;;;;,')~]]]]{!)',>;---;>,')~]/(_::::::_((/^]{~!)'',,,,,,,')/7o", "k|>%%%%%%&**=--;>,,'))))))',,>;;-==*&&&&&&*=-;>,'''',>;-=*&&&&&******&&&&*==-==&%$$$$$%%%&*==*&&&%%%&*=->,,,>>>>>;*%%*;,,>-&&&==*&&*-;;--=-;;>,')))))!~~!!),>;;>,'))))!~~!),>;;;;;--=-;>,'))',,>;;;>,)!{]]]{!)',>;;-;;>,)!]^/(_::::__(/^^]{!))',,,,,,,')!~]^(}bq", "l1,*&%%%%%%%%%&*==-;>>,''))))))',,>;--=**&&&*==-;>,'''',>;-=*&&&&&******&&&*====*&%$$$$$%%&*==**&&&&&&*=->,,,>>>>;-&%&->,,;*&&*=*&&=-;;----;>,')))))!~~!!',>;;>,'))))!~!),>;;;;;----;>,'''',>;;;>,')!{{{~)),>;;-;;>,'){]/(__::__((/^]]~!))',,,,,,')!~]^/(:<[|4es", "m3!-==**&&%%%%%%%%&&*=--;>,'')))))))',>;;-==****==-;>,'''',,;-=*&&&&&******&***===*&%$$$$$%%&*==*&&&&&&*=;>,,,>>>>;=%%=;,,;=%%*=*%&=;;;----;>,'))))!!~!!',;;;>,))))!!!)'>>;;;;----;>,''',>;;;>,')!~~~!)',>;;;;;>,)!]^/(_____(/^^]{!))'',,,,,')!~]^/(:<[}|12237fs", "n5],>;;--==**&&%%%%%%%%&*==-;>,'')!!!!))'',>;--======-;>,'''',,;-=**&&&**********==**&%$$$$%%&*==**&&&&&*=;,,,,>>>;-*%&->,;=&%*=&%&-;>;---;>,'))))!!~!)',;;>,'))))!!)',>>;;;----;>,',,>>;;;>,')!!!)),,>;;;;>,')~]^(((_(((/^]]~!))',,,,,')!~]^/_:<[}|1122222114er", "o8(~))',,>>;;--==**&&%%%%%%&*==-;>,'))!!!!!))',>;;-====--;>,'''',,;-=**&&***********=*&%%$$$$%%&*==*&&&&&*=;>,,,>>>;=&%=;,>=&&*=&%&-;;----;>,)))))!!!)'>;;>,)))))!)',>>;;;---;;>,,,,>;;;>,'))!))',>>;;;;>')!]^/(((((/^^]{~!))'''''')!{]^(_:<[}|1111111||}}[<<|bq", "o9:]{{~~!!))',,>;;--==**&&%%%%&&&*=-;>,'))!!~~!!)',,>;------;>,,''',,;-==***************&%%$$$%%&**=**&&&&*=;,,,,>>>-*%*;,>;**==&%*=;;---;>,'))))!!!)'>;;>,))))))),,>;;;---;>>,,,>;;;>>,'))))',>;;;;>,')~]^//((//^]]~!))'''''))!{]^(_:<[}||1111|||}[[<:__(/^^:9o", "n7(~~~{{{{~~~!!)))',,>;;-==**&&&%&&&&*=-;;,'))!~~~!!))',>;-----;>,,''',,;-==*****==*******&%$$$$%%&*=***&&&*=;,,,,>>;=&&->,;=*==&&=--;--;;,'')))!!!),>;>,'))))))',>>;;;--;>>,>>;;;;>,,'))'',>>;;>,')!{]^////^^]{~!))'''))!~]]/(_:[[}||||||||}[[<:_(//^]]{!!))^6n", "m4{,,,')))!!~~~~~~!!!))',,>;;--==*&&&&&&&*==-;>,')!~~~!!))',>;;---;;>,,'',>;-==***=====****&&%$$$$%&*****&&&*=;,',,>>-*&=;,;===*%&=;;---;>,)))!!~!),>;>,')))))',>>;;;-;;;>>>>;;;>>,'''',,>>>>,,)!~]^^^^^^]]~!!))))))!~]^/(:<[[}||||||}}[<::_(/^^]{~!))''',,,,]4m", "l1'====-;;>,,''))!!!~~!!!!))',,>;;--=**&&&&&&**=-;>,'))!~!!!)),,>;;--;;>,,,,,>;--=========***&%%$$$$%&****&&&*=;,'',,;-**->;===&%%->;--;;,'))!~~!),>>>,)))))',,>;;;;;;;>>>;;;;>,,,,,,,>>>>,')!{]^^^^]]{~!)))))!!{]^/(:<[[}}||}}}[[<:_((/^]]~!!))'',,,,,,,,,,'^6n", "k|>%%%%%&&**==--;>>,''))))!!!))))',,>;;--=***&&&&**==-;>,'))!!!))',>;;;-;;>>,,,,>;--========**&&%%$$$%%&****&&*=>,'',>;=*=;>;-*%$%=;;;-;>,'))!!)',>>,'))))',,>>;;;;;;>;;;;;>>,,,,,>>>,,')!~]]]]]]{~!!))))!!{]^/(:<[[}}}}}[[<::_(/^]]{!!))'',,,,,,,,'''))!~]]/[ap", "k|>%$$$$$$$%%%%&&**==--;;>,,''')))))'',,,>;;--==**&&&**==-;;,,'')))'',>;;;;-;;>>,,>>;---======**&&%$$$$%&*****&*=;,,,>;-**;,>=&$#$&=--;;,''))!)'>>>,')))',,>>;;;;;;;;;;;;>>,,,,,,,,'))!{]]]]{{~!)))!!!{]^/(_:<[}}[[[[<:_(/^]]~!!))'',,,,,,'''')!!{]^^/(_:<[}|5fs", "l1,*&%%%%%%%$$$$$%%%%%%&&*===--;;>,,,,'''',,,>>;;-==****&&**==-;>>,,'',,,>;;---;;;>>>>>;;--======*&&%$$$%%&***&&*-;>,>>;=*->;*$##$&=--;>'''))),>;>,'))'',>>;;;;;;;;;;;>>>,,,,,,'')!~{{{{{~!)))!!!~]^/(_:<<[[<<<:_(/^]]~!!))'',,,,,'''))!~{]^//(_:<[}|122344560iu", "m3!;-===****&&&%%%%%%$$$%%%%%%%&**===--;;;>>>,,,>>>;;;--==******===-;;;>>>>;;;;-----;;>>>;;;---====*&%%$$$%&*****=-;>,,>-==--*$#$&=---;,'))))',>>,')'',,>;;;;;;;;;;;>>>,,,,,'))!!~~~~!!))))!~]^^/(_::::::__(/^]{!!)'',,,,,,'''))~{]^//(_:[}||12234455666666670iu", "n5^',>>>;;;----===***&&&%%%%%%%%%%%%%%%&&**==---;;;;>>;;;;---===****====-----;----------;;;;;;-----==*&%%$$%%&****==;>,>;==--=%$%=-;-->'))))',,,,''',,>>;;;;;;;;;;>>>,,,''))!!!!!))))))!~]]^/(___((((/^]{~!))',,,,,,''))!~]]^/(_:[}}|1123445555555555444332225fs", "o8(~)))))''',,,,>>;;;;---===***&&&%%%%%%%%%%%%%&&*===----;;;;;;-----======================---;;;;----==**&%%%%%&***==;>,>-=-;-*%&=---;,)!)),,,''''',,>;;;;;;;;;>>,,,'''))))))))))))!~{]]^////^^^]{~!))',,,,,'''))!{]^/(_:<[}}|122344444444444332211||}}}[[<:<|bq", "o8(~!!!!!!!!!))))))))'',,,,>>;;;;--===***&&%%%%%%%%%%%%&**====---;;;-------=========*********==--;;;----==*&%%%%&&***=-;>;----*&&=--;,)!!)',,,''',>>;;;;;;;;;>,,,'''))))))''''))!!~]]]]]]]]~!)))'',''''')!~]]^/(_:<[[}||122222222222211|||}}[[<<::__((//^^^]^:9o", "n5^)''''')))))))!!!!!!!!!)))))))))'',,,>>;;--===***&&%%%%%%%&&&**====--;;;;------====***&&&&&&&&*==-------==*&%%%%&***=----=--=**=-;>'!!)',,,'',,>;;;;;;;;>>,,,'''''''',,'')))!!!!~~~!)))))'''''))!{]^//((_:<[}}}||||||||||}}}[[[<<:::_(((//^^]]]{~~!!!))))')^6n", "m3!;--;;;;;>>>,,,,''''))))))!!!~~~~~~~!!!!!)))'',,>>;;--====**&&&&&***==-----;;;;;;;;---==**&&&%%%&***=-----==**&%&&&*****=---===-;>>,)',,'',,,>;;;;;;;>,,,,'',,,,,,,,,'''))))))))))))))))!{]]^^^/(_:<<<<<<<[[[[[<<:::__(((//^^^]]]]{{~~!!!)))''''',,,,,,,,,'^5n", "l2'=****======------;;;;;>>,,,'')))))!!!~~{{]]{{{~~!!!))))'',>>;---===========--;;;;;;;;;;---==*&&&%%%&***======**&&&**&%&=----==->,,,,,>,'',>;;;;;;>>>,,,,,,,>>>>,,,,''''''))))))!~~{]]]^/((___________((///^^^]]]]{{~~!!!)))))''''')'''''''''''')))))!!!!~]_9o", "l2'=************===========----;;;;>>,,,,'')))!!!!~~~{{]]]]{~!!)))'''',,>;;---------;;;;;>>>>;;----=*&&&&&***======****&%&=--===*->',,,,>,,,>>;;>>>>>,>>>>;;>,,,,,,,''''))))!!!~{]]^^^^^^^^//^^^]]]]{{{~~!!)))))))))))))))))))))))!!~~{{]]]]^^^^^///(((__:::<1cr", "m3!;----------==================---------;;;;;>>,,,,'')))!!!!)))!!!!!~~!))'',,,,>>>>;;;;;;;;;;;>>,>;--====*&&&**======*&&&*====**->',,,,>>>>>>>;>>>>>>>>>>;>>,'''''')))!!~~~{{{{]]]]]]{~~~!!!!!))))))))))))!!!!!!~~{]]]]^^^^///(((__::<<<[[[}}}}|||||111222237gt", "n6^',,,,,,,,,>>>>>>>>>>;;;;;;;;;;;;;;;;;;;;;;;;;;;;>>>>>,,,,,,,,,,'')))))))'''',,,,,,,,>>>>>;;>>,,,>;;;;>;-=====-==**=***&&&**=*=->,>;;;>>>;>,,>;;>>>>,,,,>,,'))!))))!!!!!!!!!!!!!!!!!!!!!!!!!!~~{]]]^^///((((___:::<<[[[[}}}}}|||1112222333334444444444444459ht", "o9:]{{{{{~~~~~~!!!!!!!!!!!)))))))))))))'''''''''''''''',,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,>>>>>>>>,>>;;--;;>>;;;;;>;-=&*====&&&&*==-;'',;--;>;;>')',>>>,,''',,,,'))))))))))))))!!!~~{{{]]]]]]^^^//(((_:::<<[[}}}}}}}||||||||||11111111122222222222222222111111125fs", "pa}_((((((/////////////^^^^^^^^^^^^^^^]]]]]]]]]]]]]{{{{{~~~~!!!!!!)))))))'''',,,,,,,,,,>>>>>>>>>;;;----;;;;>>>,,>-=**-;;-=*====-;,')'>;-;>>>'!~!)',,,,'',,>>,,,''''))))))!!!~{]]]]]^^^^^^////((((____::::<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<::::::::::|bq", "qb|:_____((((((((((((((((((((///////////^^^^^^^^^^^^^]]]]]]]]]{{{{~~~!!!!)))))'''',,,,,,,>>>>>;;;;;----;;;>>>>>;;-==-;>>>;;;;--;>,')),>;>,,)~]]{!)'',,,,,>>>>>>,,,,,'''')))))!!!!!!!!!!!~~~~~~~~~~{{{{{{{{]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]:9o", "p0<^^^^^]]]]]]]]]]]]]]]]]]]]]{{{{{{{{~~~~~~!!!!!!!!!))))))))))))))))))''''''''',,,,,,,,,,,,,,>>>>>;;;;>>,,'',,>;---;,''',,;;;;;>,,,'',,,,'){^^]!'',,',,,,>>>>>>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,''''''''''''''''''''''''')^6n", "n6^),,,,,,,,,,,,,,,,,,,,,,,,,,,,,,>>>>>>>>>>>>>>>>>>;;;;>>>>>>>>>,,,,,,,,,,,,,,,''''''''''))))'''',,,,'))!!!!)'>--;>')'',;;;;;>>>>>,,,,,,,){/^~'>>,')))',,,>,,,''''''''''',,,,,,,,,,,,,,,,,,,,,>>>>>>>>>>>>>>>>>>>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,>,]4m", "m3!;------------------------------------;;;;;;;;;;;;;;>>>>>,,,,,'''''')))))))!!!!!!!!!!!!!!!!!!!!!))'')!~!!))!),;-->,,,>;----;>;;;;>>;;;>>,)]{'>>,))!!!)',,,'')))))'''''',,,,,,,,,,,'''''''))))))))))))))))))!!!!!~~~~~{{{{{{{{{]]]]]]]]]]]]]{{{{~~~~!!!!!))!/7n", "m2)-=========-------------;;;;;;;;>>>>>>,,,,,''''')))))))!!!!~~{{{~~~~~~~~~~~~~!!!!!!!!!!!!!!~~{{~!)'')))',>>,,>;--;>;;;---;;;>;--;;;----;;,)'>>,)!!)!!!)',')!!)))'''',,,,,,,,,,>>>>,,,,,,,'''''))))))!!!~~{{]]]^^///(((((_____::::::<<<<<<<<<<<<::::::____(_}ap", "m3!;;;;;;;;;;>>>>>>,,,,,,,,'''))))))!!!!~~~{{{]]]]]]]]]]]]]]]]]]]{~!!))))))))))))))))!!!!~!!!!!!!!)'>>>>>;;-;;;;;;-;;;-----;-;>>;;;;;------;>;;>,'''))!!!)))!~!))))))))''''',,,,>>>>>;;;;;;;;;;>>>,,,,,'''))!!~~{]]^^///((___::<<<[[[}}}|||1111111111111||||14er", "n5^'''''''))))))!!!!~~~~{{{]]]]]]^^^^^^^^^^^^^^^^^]]]{{~!!))))))))'',,,,''')))))!!~~~~~~~~!))',,,>;;-=---;;;;>>;;;-----;--;;-------;;;;;-==----;>>>,,,'))))!~~!!)))!))))))))))))'',,,,,,>>;;------------;;;;>>,,,'''))!!~{{]]^^//((__::<<[[}}}|||||11111122237gs", "o8_]{{{]]]]]]]^^^^^^^^^/////////^^^^^^]]]]{{~!!!)))''',,,,>>>>,,,,,''''))!~{{{{{{{{~!!))',,>;;--=====--;;>,>>>;---===-;>>;;;--==**=-;>,,;=====---;;;>>>,,,')!!!!!~{{~~!!!))))))))))))))))'',,,,>>>;;;---------------;;;;>>,,,,'')))!~~{]]^^^//(((__:::<<[[[[}3dr", "p0[(/////((((((////////^^^^]]]]{~~!!))''',,,,>>;;;;;;;>>>>>,,''))!~~{]]]]]]]]{!!))',,>;;--========-;;>,,>>>;;--=====-->,>;--;-=*&&=--;,,;-==**==---;;;;;>>>,''')!!!~{{]]]{{~~!!))))')))))))))))))))''',,,,,>>;;;;----------------;;;;>>>,,,''')))!!~~{]]]^^^([ap", "pa}_((((////^^^^]]]{{~!!))''',,,,>>;;;;--;;;;;;;;>>,,''))!!~{]]^^^^^^^]{~!))',>>;;---====**===-;;>,,,,>>;;;--==**==-;;,>;==-;;-*&*=---;;;--==****=--;;;;;;;>>>,''''))!~{]]]^^^]]]{~!)))))'))))))!!!!!!!!!~!!!))))''',,,>>>;;;------------------;;;;;>>>,,,'')/7n", "p0<^]]]{{~!!)))'',,,>>>;;;------------;;;>>,,''))!~{]]^^^^^^^^^^]{~!!)',>>;;---=====****==--;>,,,,,,>;;;;---=***=--;>>>;=*=->>-==*=--===-----=**&**=-------;;;;>>,,''')))!~{]]^^///^^^]]~!))))'''))))!!!~{{{]]]]]]]]]]{{~~!!)))'',,,>>;;------=========-----;!3m", "n7/)',,,>>>;;;;--------------;;;;>>,,''))!~{]]^^////////^^]{~!)),,>;;;-----======**===--;>>,,,,,,>>;;-----=****=--;>>>;-=*=->;---==--==*==-----=*&&**==---;-----;;;>,,'''')))!!{]^^//((((/^^^]!))))''''')))!!~{]]]^^^^^///////^^^^^]]{~!))'',,>>;;-----=====-)2l", "m4!;-----------------;;;>>,,,'))!!~{]]^^/((((((((/^^]{~!)',>>;;;--------===========-;;>,,,,,,,>;;;---;;-=*&&*=---;>>>>-=**=-;;;;;-=---=***=--;-==*&&&&*==-;;;------;;>>,,''')))))!!~]^//((_::_(//^]{!)))'''''')))!!~{]]^^//((((___:::__(((///^]]{!!))',,,>;;;!3m", "m2)-====-----;;;>>,,''))!!{]]^^//(((_____((//^]]~!)',>>;;;------------========--;;>,,,,,,,>>>;;----;;-=*&&*=-----;>,>;==*=-;;;>>>-=-;;-=***=----==*&&&&&*==-----------;;;>,,''))))))))!~{]^((_::<<:_((/^]{!))''',,''')))!~{]]^^/((__:::::<<<<<:::__((//^]]{!~/7n", "m3!;;;;;>>,,''))!~{]]^^//((_________((/^]]~!)',>;;;;----------------======--;;>,,,,,,,>>>;;;;---;;;-=*&%&*=-----;>,>;=**=->,,,,,>-==;;-==**=-------=*&&&&&*==-------------;;;>,'')))))))))!!{]^/(_::<[[<::_(/^]~!)''',,,,,''))!!~{]^^//((_::<<<<[[[[[[[<<::_:}ap", "n5^)''))!!{]]^^//((__::::::::_((/^]{!))',>;;;;-----;;;;;;;;;;;---=====---;>,,,,,,,>>>;;;;;;--;;;;-=*&%%&=-----;;>,,;-***=;>,,,',;=&&-;;-=**=--------=*&&&&&&*==--------------;;;>,''))))))))'))!~{]^(_:<[[[[[<::_(/^]~))'',,,,,,,''))!!~]]^^/((__::<<[[[[[[[}3dr", "o9_]]^^//((__::::::<:::_((/^]{!))',>;;;;----;;;;;>>>>>>>;;;---====--;;>,,,,,,,>>;;;;;;;;;;;;;;;;=*&%%&*=-----;;>,,>;=**=-;>;;>,,;*%&-;;;-=**=---------=*&&&&&&**==---------------;;>,,')!!!!!))'''))!~]^/(:<[[}}}}[[<:_/^]{!)'',,,,>,,,,''))!!~{]]^//((_:::<[2dr", "pa}:_:::<<<<<<<::_((/^]{!))',>;;;;----;;;>>>,,,,,,,>>>;;---===--;;>>,,,,,,>>;;;;;;>>;;;;;;;>;;-*%%$%&=------;>>,,,;-*&*=;>,;-->,;*%%=;;;-==**=---------=*&&%%&&&**==-----==----------;;>,')!~~~!!))''''))!{]^(_:[[}}|||}[[<:(/^]{!)',,,,>>>,,,,'')))!~{]]^^/(}aq", "rc2[<<<<::__(//^]~!)',,>;;;;;--;;;;>>,,,''''''',,>>;;---==---;>>,,''',,>;----;;>>>>;;;;;>>>;-*%%$%&*-;;----;>,,,,;-*&*=-;>,>;->>;*%%*->;;-=***=---------==*&&%%&&&&**==----====--;;------;>,')!~{{~!!))''''')!~]^/(:<[}}|||||}[[<_(/^]~!)',,,>>>>>>,,,'')))!{_9o", "rc1<__(/^]]~!)',,>;;;-----;;;>>,,''))))))))'',>>;;------;;>>,,''',,>;;-----;>>,,>;;;;>>,>;-*&%$$%*=-;-----;>,,,>;-*&&*=;>,,>;-;>;=&%&->>;--=*&*=----------=*&&%%%&&&&**==----====--;;;------;;,')!~{]]{~!))',,,'')!{]^(_:[}}||111||}[[:_(^]{!)',,,>>>;>>>>>,'^6n", "p0<^{~))',>>;;;-----;;;>>,,')))!!!!!!!)))',>;;-------;>>,'''''',>;--===-;>,,,,>>;;;>,,>;-*%%$$%&=-;;--=--;>,,,>;-=&&&*-;>,>;;;;>;=*&&->>;;-==*&*=----------=*&&&%%%&&&&**==---======--;;;;------;>,)!~{]]]{~!))',,,,'))~]^/(:<[}||11111||}[<:_/^]{!)',,>>>;;>{4m", "n6^'>;;-------;;;>>,,''))!!~~{{{{~!!)',,>;;-----;;>>,'')))'',>;-====-;>,''',>>;;;>,,>;-*%%$$$%*-;;--==--;>,,,>;-=*&&*=->,,>;;;;>;==&&=;>>;--=*&&*=----------==*&&&%%%&&&&&**==--==***==-;;;;;--===-;;,')!{]]]]]~!)',,,,,,')!{]^(_:<[}|1122221||}[<:(/^]~!)',,]4m", "m3!;-----;;;>,,''))!!~{{]]]]]{{!!)',>;;------;>>,'))))))',>;-=**==-;,'))',>>;;>,,,>;-*&%$$$%&=-;--===--;>,,,,>;=*&&&*-;>,,>;-;>>;-=&%*->>;;-==*&&=------------=**&&%%%%&&&&&**==--==****=--;;;;;--===--;>')!{]]^^]]~!)',,>,,,,')~]^/(:<[}||12222221|}}[:_(^]](8n", "m3!;;;>>,,''))!~{]]]^^^]]]]~!)',>;;------;>>,'))!!!))',>;-=***=-;,')))',>;;;>,,,>;-*&%$$$$%*--;--====-;>,,,,>;-*&&&*=-;>,,>;-;>>;-=%%&->,>;--=*&&&=------------=**&&&%%%%&&*&&&**=====**&**=-;;;>;;--====-;>,)!{]^^^^]]~!)',,>>>,,')!{]^(_:<[}|1222233221|}[[|bq", "m4]',''))!~{]]]^^^^^^]]{!)',>;;------;;>,'))!!!!!)',>;-=***=-;,')!!)',>;;>>,,,>;=*&%$$$$%&=-;--=====-;>,,,,>;-=&&&&*=;>>,>;--;>,;-=&%&=>,>;;-==*&&*=-------------=*&&&&%%%%&**&&&&*=====*&&&**=-;;>>;;--====--;,')~]^^/^^^]~!)',>>>>>,,))~]^/(_:[[}|1223333336fs", "n7(~!~{]]]^^^^^^^^]{~)',>;;------;;>,'))!~{{~!!),>;-=***=-;,')!~!)',>;;>,,',>;=*&%$$$$$%*-;;-=====-;>,,,,,>;-=*&&&*=-;>>>>;--;>,;-=&%%=;,,;;--==*&&*=-------------=*&&&&%%%%%&**&&&&**====*&&&&*=--;>>>>;--====--;>')!]]^///^^]~!)',>>>>>,,')!{]^/(:<[}||22348gt", "o9:^^^^^//^^^^]{!)),>;;------;;>,'))!~{]]{~!),>;-=***=-;>')~{~!)',>;;>,'',>;=*%%$$$$$%&=-;-======-;>,,,,,>;-=*&&&&*=;>>,,>;-;>,,>--*%%*-,,>;;--=**&&*--------------=**&*&&%%%%&&***&&&&*====*&&%&&*=-;>>>>>;--=====-;>,)!{]^////^^]~!),,>;;;>>,'))~{]^(_:<[}|5fs", "p0[(///^^]]{!)',>;;--=----;>,'))!{]]]]]{!)'>;-=***=-;>')~]]{!),>;;>>,'',>;=*%%$$$$$$%*----======-;>,,,,,>;-=*&&&&&=-;>>,,>;;;>,,>;-=&%&->,,;;--==*&&&=---------------=*&***&%%%%&&***&&&&*====*&&%%&&*=-;>>>>>;--=====-;>,'!~]^/(((//^]~)',,>;;;;>,,')!~]^/(:|cr", "p0[/^]]~!)',>;;--===--;>,,')!{]]^^^]]~)',;-=***==;>')~]]]{!',>;;>,,'',>;=*&%%$$$$$%&=-;-=**====-;,,,,,,>;;=*&&&&&*=->>>>>>;;;>>,>;-=&%&=;,,>;---==*&&&=-------=-------=*&&***&%$%%&****&%%&&*===**&%%%&&=--;>,,,>;--==*===-;,')~]^/(((((/^]~)',,>;;;;;>,'))!]:0p", "o9:]!)',>;--====--;;>,')!~]]^^^^^]{!',;-=***=-;>')~]]]]~),>;;;>,''',>;=*%%%%$$$$$%*---==***===->,,,,,,>;;-=*&&&&&*-;>>>>>;--;>>,>;-=&%%=;,,>;-;--==*&%&=-------=-------=*&&***&%%$%%&****&&%&&*====*&%%%%&*=-;>,,,,>;--==*===-;>,)!{^^/(((((/^]~)',>;;;;;;>,'^7n", "n6^,>;--====--;;>,')!~]]^////^]{!',;-==*==-;>,)~]^^]]!',;;;;>,''',>-=*&%%%$$$$$%&=---=******=->,,,,,>;;;-=*&%%&&*=-;>>>,>;--;;>>>;-=&%%*;,,,;;;;-==*&%%*=;;-----=--------=*&&***&%%$%%&*==*&%%%&**===*&%%%%%&*=-;>,,,,>;--==**==-;>,'!{]^/((((((/^]~)',>;;;;;~4m", "m3!-=====--;>,'))~{]^//(//^^{!),;-=====-;>')~]^^^]~),>;;;;,,''',>-=*%%%%%$$$$$%*=--=*******=->,,,,,>;;;-=*&&%&&&*=;>>>>,>;--;;;>>;-=&%%*->,,>;-;;-==*&%&*-;;-----=---=----=*&&**=*&%$$$%*===*&%%%&&*===*&&%%$%%&*=-;>,,,,>;--==**==--;,')~]^/((___((/^]!)',>>~4m", "l2)-=--;>,,')!{]^^/(((//^]!),;-=====-;>,)~]^^^^]!',;;;;>,'')',>-=*&%%%%%$$$$%&=--==*&*****=->>>,,,>;;;-=*&&%&&&*=-;>>>>>>;--;;;>>;-=*&%*-;,',;;;;-===*&%&=-;-----===--==----=&&&*==*%%$$%%*===*&%%%&&*====*&%%$$%%&==-;>,,,,>;--==***=--;>,)!{]^/(____((/^{!!^5n", "m3!>;>,')!~]]^/(((((/^]!),;-=====-;>,)~]^///^{),>;--;>,'))',>-=&&%%%%%$$$$$%*=--=*&&*****=;>>>>,,>;-;-=**&%%%%&*=;>>>>>>;--;;;;>>-===&%&=;,',>;-;;-==*&%%&=-;---;-===---==---=*&&*===&%$$$%&*===*&%%%%&*====*&%%$$$%&*=-;>,,,,,>;--=****==-;>,')~]^/(_____((/<9o", "n5^)))!{]^/((((((/^]!',;-=====-;>,)~]^/(/^]!',;--;;>,'))',>-=&&%%%%%%$$$$%&==-=*&&&***&*=;>>>>,,>;-;--=*&%%%%&&=-;>;;>>>;--;;;;>>;-==*&&=;,',>;-;;-===*&%%&=-;---;-===---==---=*&&&*==*&%$$$%&*===*&%%%%&*====*&%%$$$$%&*=-;>,''',>;-==****==-;>,')!{]^((__::|bq", "o8(]]^^/((((((/]{!',;-=====-;>,)!]^/((/^{),>;--;;>,'))',>-=&&%%%%%%$$$$$%*===*&&&&***&*=;>>>>,,>;----=**&%%%%&*=->>;>>>>;--;;;;>>;--=*&&=->,',;;-;;-===&&%%&=-;---;-===---==----*&%&*===*&$$#$%&==-=*&%%%%&*====**&%$$$$%%&*=-;,,''',>;-==*****=--;>,)!{]^/(:|bq", "o0[((((__((/]{!'>;-=====-;>,)!]^/(((/]!',;---;>,')))',;-=&&%&&&&%%$$$$%&====*&%&&**&&*-;,>>>,,,;----=**&%%%%%&*=;>;;>>,>;--;>;;>>;---*&&*-;,',>;-;;;===*&&%&*=;;---;;-==---===---=&%%&*===*%$##$%*=--=*&&%%%&*=====*&%%$$$$%%*=-;>,,''',>;-==*****==-;>,')!{^<0p", "qb}:__(/^]~)'>;-=====-;>,)!]^/(((/^{),>----;>,')))',;-=&&%&&&&&%$$#$$%*===*&%%&**&&&*->,>;>,,,;----=**&%%&%%%*=->>;;;>,>;--;>;>>>;---*&&*-;,''>;--;;-===*&%%&*-;;--;;;-==---===---=*&%&*=--=&%$##$%*=--==*&%%%&*=====*&%%$$$$$%&*=-;>,'''',>;-==*****==-;;,')(8o", "qb}_/^]~),>;-=====-;>,)!{^/(_((/]!',;----;>,')))',;-=&&%&&&&&%%$$$$%&*===&%%%&**&&&*->,>;;,,,;----=***&%%%%%&*=;>;;;;>,;---;>;>,>;---*&&*=;>'',;;-;;;====&&%%&*-;;--;>;-==---=*==---*&%%&*=-=*&$###$&*=--==*&%%%&*======*&%$$$$$$%&*=-;>,'''',>;-==**&&**=-->]5n", "p0<]~),>;-=====-;>,'!{^/(__((^{),>-----;>,')))',;-=&&&&&**&&%$$#$%%*===*&%%%&**&%&*->,>;;,',;----=***&%%%%%%&*->>;;;;>,;---;>;>,>;;--=***=;>,',>;;-;>-===*&%%%&=;>;--;>;-===--=**=---=&%%%*=--=*%$##$%&=----=*&%%%&*===-==*&%$$$$$$%%&*=-;,,'''',>;-==*&&&**-)3m", "n7^';-======-;>,'!{]/(___(/]!'>;-==-;>,'))))',;-=&&&&&***&%$$#$$%&*==*&%%%&&*&&%&*;>,>;;,',;-=--=****&%%%%%&*=;>;;;;;,>;--;;;;>,>>;--=***=->,'',;;-;>;-===*&%&%&=;>;--;>;-===--=**==--=*%%%&*=--=&%$##$%*=-;--=*&%%&&*===-==*&%%$$$$$$%%*=-;>,''''',>;-==*&&*,1l", "m3!-==*==--;,')~]^(____(^{),;-==--;>,'))))',;-=&&&&*****&%$##$%%*==*&%%%%&&*&%%&=;,,>;;,',;==--=**=*&%%&%%%&*-;>;-;;>,>;--;;;;>,>>;--=***=->,'',>;;-;>;====&&&&&&=;>;--;>>-===---=**=---=&%%%*=---*&$###$%*--;;-=*&%%&&*==---==*&%$$$#$$$%&*=-;>,'')'',>;-===,1l", "l2'===--;,')~]^(__:_(/]!'>;-===-;>,'))))',;-=&&&&**==*&%$$#$$%&*==*&%%%%&*&&%%%=;,,>;;,',;===-=****&%%&%%%%&=->;--;;>,>;--;>;;,,,>;--=**==-;>,)'>;;-;>>-====&%&&%&=;;---;,>-=*=---=**=---=&%%%&*---=*%$###$&=-;;;-=*&%%&&*==---==*&%%$$##$$%%&*=-;,,')))',>;;)2l", "l2)--;>,)!]^/(_::_(^{),;-===--;>,')!!)',;-=&&&**====*&%$##$%%**=*&%%%%%&&&%%%&=;,,;-;,',;===-=***=*%%%%%$%&*=;>;--;;,,;;--;>;;,,,>;--=====-;>,'',>;;-;,;====*&%&&%*-;;--->,>-=*=---=&&*=--=*%$$%*=---=&%####$&=-;;;-=*&%%&&*==----=*&&%$$###$$%%&=-;>,'')))'']4m", "m4{,,)!{^/(_:::(/]!'>;-===-;;,'))!!)',;-=*&&**====*&%$$##$%&*=**%%$%%&&&&%%%&=;,,;-;>'';=*===***=*&%%%%$$%&*->>----;,,;;;-;>;;,,,,>---====-;>,'),>;;-;,,-====&%&&&%*->;--->,>-=*=---=&&*=---=&%$%&*=---*%$####%*=;;;;-=*&%%&&*==----==*&%$$###$$$%&*=-;>,'))!/7n", "n6/~{]/(_:::_(^{),;-====-;>,'))!!)',;-=*&&*======*&%$##$%&****&%$$%%&&&&%$%&->,,;-;>'';=**===**==&%%%%%$%%&=;>;---->,,;;;-;>;;,,,,>---===-=;>,,)'>;;;->,>=*=-*&%&&%&*->;--->,>-=*=---=*&&*=--=*%$$%&=---=*%$###$%*-;>>;-=*&%%&**==-----=*&%$$####$$$%&*=-;>,)/7n", "o9:/(_::::_/]!'>;-===--;>,'))!!)',;-=*&&*==---==&%$##$$%&*=**&%$$%%&&&%%$%&->,,;-->''>=**===&*==*%%%%%$$%&*->>----->,>;;--;>;;,',,>---==---;>,,)),;;;-;,,;====*%%&&%&=;>;--;,,,-=**---=*&&*=--=*&$$%%*=---=&$####$&=-;>>;-=*&&&&**==-----=*&%%$$####$$%%&==->]5n", "pa|::::_(^{),;-====--;>,')!!!)',;-=*&**==----=*%$$#$$%&**=*&%$$$%%&&&%$$%*-,,,;-->''>=**===&&*==&%%%%$$$%&=;>;----;,,;;;;->>;;,',,,;--==---->,,'),;;;-->,>-*=-=&%&&&%&=;>;--;,',;=**=---*%%&=---=&%$$%&=---=*%$#@##$&=;>>>;-=*&%&&**=------==*&%$$#####$$%&*-)3m", "qc1<:_/]!'>;=====-;>,'))!!!)'>;-=*&**==----=*&%$##$%%**==*&%$$%%&&&%%$$%*-,,,;-->''>=&&*==*&*==&%%%%%$$%%&->>-=---;,,;;;-->>;;,',',;--==-;-->,,,)'>;>;-;,,;=*=-*%%&*&%&=;>;--;,',;=&*=-;-*%%&*=--=*%$$$%*=---=&%##@#$%*=;>,>;-=*&%&&*==------==*&%$$#####$$%&,1l", "qb|_^{),;-=====-;>,'))!!!)'>;-=****=------=*%$##$$%&*==*&%$$$%%&&&%$$$%*;,,>-=->''>-&&*==*&*==*%%%%%$$$%&*;>;-=--->,,;;;-->>;;,','';--==-;--;,,,)),;;>-->',-*=-=*%%&*&%&->>;--;,',;=&*=-;-*&%%&=--=*&$$$%&*----*&$#@@#$%*-;,,>;-=*&&&&*==-------=*&&%$$#####%;|k", "p0:~'>;-====--;>,')!!!!)'>;-=****=--;;;-=*&$$##$%&*===*&%$$$%%&&&%$$$%*;,,>-=->,'>-&%&==*&&=-=&%%%%$$$$%&=>>;==--->,>;;;-->>-;'',''>--=*=;;-;,,,'),;;>;-;,';=*=-=&%&**&%*->>;--;,',;=&&=---=&%%&*=--=&%$$$%*=---=*%$#@@#$&=->,,,;-=*&%&&*==-------==*&%$$###$-}k", "n6]>-=====-;;,,')!!!!)'>;-=***==--;;;;-=&%$##$$%&*==*&%$$$$%&&&%%$$$%=;,,;-=-;,'>-&%&*=*&&*-=&%$%&%$#$%%*->>-=--=;,,>;;;-->>-;'',''>--===;;-;,,,,)'>;>>-->',-**--*%%&**%%*->>;--;,',;=&&=-;-=&%%%*=--=*%$$$%&*----=&$#@@@#$&=;>,,,;-=*&%&&*==-------==*&%%$$$-}k", "m3)-====-;>,,')!!!!)'>;-=***==-;;;;;-=*%$###$%&*===*&%$$$%%&&&%%$#$%=;,,;-=-;,'>-&%&*=*&%*=-*%$%%%$##$%&=;>;==-==;,,;;;;-->>-;'',))>---==;>;;,',,)),;;>;-;,'>=*=--*%%&*&%%*;>>;-->')';=&&*-;-=&%%%&==-=*%$$$$%*=---=*%$#@@##%*-;,,,,>-=*&%&&*==--------=*&&%%;}k", "l2'==--;>,'))!!!!)'>;==***==-;;;>;;-=&%$##$$%*====*%%$$$%%&&&%$$#$%=>,,;===;,'>-&%%***&%*=-=&$$%%%##$$%&->>-==-=->',;;>;-->;->'',)),---==;,;->',,')';;>>-->'';**=-=&%%**&%%*;,>;-->')';=&&*-;;-*%$%%*===*&%$#$%&*=---=&%##@@#$%*->,'',;-=*&%&&*==--------==**,|k", "l2);;;>,'))!!!!),>;==***==-;;>>>;-=*%$###$%&*====&%$$$$%&&&&%$##$&=>,,;=*=;,',-&%%&**&%&=--*%$%%%$##$%%=;,;=====-,'>;;>;-;>;->)',)),---==;,>;;'','))>;>,;--,),=**--*%%&**&%%=;,>--->')';=&&*=-;-*%$$%&====&%$##$%&=---=*%$#@@@#$%=->,'',;-=*&%&&**==-------=-'2l", "m4~,>,'))!!!!),>;==***==-;;>>>>;-*&$###$%&*=--=*&%$$$%%&&&%%$##$&->,,;=*=;,',-&%%&**&%&=--*%$$%%$###$%&->>-*====;,'>;>>--;,;->)),)),---==;,>;;,',,)),;;>>-->'';*&=--&%%&=*%%&=>,>-=->')';=&&*=-;-*%$$%&*===*%$$#$$%*=---=&%$#@@@#$&=;,''',;-=*&%&&**==------;)2m", "n5])')!!!!)),>-=****==-;;>>>>;-=&%$###$%&==--=*%$$$$%%&&&%%$##$&-,,,-**=;,',-&$$%**&%%*--=&$$%%%$##$$%*;,;=*====;',;;>>--;,>;,)),)),---==-,,;;,),,')';;>,;--,),-&*--=%%%*=*%%&->,>-=->))'>=&%&=-;-=%$$$%*===*&%$##$%&==--=*&$#@@@##%&=;,')',;-=&&%%&**==----;!3m", "n7/!!!~!!),>-=****==-;>>,,>>;=*%$###$%&*=--=*&%$$$$%&&&&%$$##$*-,',-**=;,',-&$$%&*&%%&-;-*$$%%%$###$%&=>,-=*==*=>',;;>>-->,>;,)),)!,---=*-,'>;,)','))>-;,>--;))>=&=--*%$%*=&%%&->,;-=->)))>=&%&=-;-=&$$$%&*===&%$##$$%*=---=&%$#@@@#$%*->,')',>-=&&%%&**==--;!3m", "o8({~!)),>-=****==-;>>,,,>;-*&$###$$%*=---=*%$$#$$%&&&&%$###%*;,,>-*&=;,',-&$$%&*&%%&=--=%$$%%%#@#$$%*;,>=*===*-,'>;;,;==>,;-,!),)!,-=-=*-,),;>'),,)),;;>,;=-,)'-&&=--&%%&==&%%&->,;-=-,)!)>=&%&=-;-=&$$$$%*===*%$###$%&*=--=*&$##@@@#$%*->,))',;-=&&%%&**==-!3m", "o9_{!),>-=****==-;;>,,,>;-=&%$###$%&=----=&%$##$%%&&&&%$###%*;,,>-*&=;,',;*$$$&*&%%%=-;=%$$%%%$#@#$$%=>,;=*==*=;,'>;>,;=->,;-,!),)!'-=-=*=,),;;'),,')';->,>-->))>=&*--=%$%*==&$%*;,,;-=;,)!)>=&%&*-;;=&%$$$%&*==*&$$##$$%&==--=*%$#@@@@#$&=->'))',;-=&&%%&&*-)2m", "o8(),;-=**&*==-;>>,,,,>;=*%$###$%&*=-;--=&$$#$$%%&&&%%$###%=;,,>=*&=;,',;*$$$%&&%$%*-;-&$$$%%$#@##$%&-,>-**==*=;',;;>,;=->,;-,!),)!'-=--==>)';;,)',,))>-;,,;--,)'-&&=--*%$%*=*%$%*;,>;==;,)!)>=&%%*=-;-*%$#$%&**=*&%$###$%&*=--==&%##@@@@#$&=;,'))',;-=&%%%&*'2l", "n6]>-=**&*==-;>>,,,,>;-*%$####$%*=-;;-=*%$##$$%&&&&%$$##$%=;,,;=&&*-,',;*$$$%&&%$%&-;-*%$$%%%$@@#$$%=;,;=**=**=>',;;,,;=->>--'!),)!);---==;))>;,)),,)),;->,>-->)),=&&=-=&$$&==*%$%=;,>;==;,)!)>=&%%*=-;-*%$#$$%&***&%$####$%&*=--=*%$#@@@@##%*=;,'))',;-=&%%&,1l", "m3!-**&*==-;>>,,,,,;-=&%$###$%&*-;;;-=&%$##$%%&*&&%$###$%=;,,;=&&*-,',;*$#$%&&&%%&=;;=%$$$%%$#@@#$$&-,,-**==**-,'>-;,,-=->>--'~),)~);---==;)!,;>)),>'!);-;,,;=-,));&%*--=%$%&==&%$%=;,>-==;,)!),=&%%&=---=%$##$%&&**&%$####$%%*==-==&%$#@@@@#$%*->,)))',;-=&*,|k", "l2'=&*==-;;>,,,,,>;=*%$####$%*=-;;;-*%$###$%%&**&%$###$%=;,,;=&&*-,'';*%##$&&&%$%=-;-&$#$%%%#@@##$%*;,>=**==**;'';-;,>-=-,>--'~),)~)>---=*-'!';>)!'>,)),-;,'>-=;)!,=&&=--*%$%*-=&$$&->,>-==;,)!),=&%%&=---=&$##$$%&**&%%$####$%&*====*&$#@@@@@#$%*->')))',;-=,1l", "l1,=*=-;;>,,,,,>;-*%$####$%&=-;;;;=*%$##$$%&&**&%$###$&=;,>-*&&*-,''>=%##$%&&%$%*-;;*%#$%%%$@@@#$$&->,;*&*=*&=>',;->,>==;,>--'~),)~!>---=*-'!)>;'!),,)!';->',;=-,!);*%*-;-&$$%=-=%$$&->,>-==;,)!),=&%%&*---=&$###$%&&**&%$####$%%*=====&%$#@@@@@#$&=->')))',>!2l", "l2'--;;>,,,,,,;-=&$####$$&*=;;>;-=&$###$$%&**&%%$#@#$&=>,>-*%%*->''>=%##$%&&%$$&-;;=%##$%%$#@@##$%*;,>-&*==*&-,',-->,;==;,>--){),){~,---=*-,!)>;,!),>'!)>-;,'>-=;)!'-&&=--=%$$&=-*%$$&->,;-==;,)!),=&$%%*---=&$###$$%&&&&%$#####$%&*====*&%$#@@@@##%&=;,'))))^5m", "m3!;;>,,,',,>;=*%$####$%&=-;>>;-*%$###$%&&**&%$##@#$&->,>-*%%*->''>=%##$%&&%$$%=;;-&$#$%%%#@+@#$$%=>,;=&*==**-,'>-;,,;*=;,>-;){),){~,---=*=,!!,;>)!'>,)!,-->',;=-,!)>*%&=;-*%$%*--*%$%*;>,;-==;,)!),=&$$%*=--=*%####$%&&&&%$#####$$%&*====*%$#@@@@@#$%*=;,')!(7n", "m4{,,,,'',>;-*%$####$%&*-;>>>;=&$####$%&***&%$##@#$&->,>-&%%*->''>=%###%&&%$$%*-;-*$##$%%$#++@#$$*;,,-*&==*&*;'';-;,,;*=>,;=-){),)]{,---=*=>!~';>)!'>,)!';-;,'>-=;)!'-&%*-;=&$$%=-=&$$%*;,>;===;,)!),-&$$%*=--=*%$###$$%&&&%$$##@##$%&*====*&%$#@@+@@#$%*-;,)(8o", "n5]','',,;-=&$#####$%*=-;>>;-*%$####$%&***&%$#@@#$&->>;=&%%*->''>=%###$%&%$$%*-;;=%##$%%$#@+@#$$%=>,>=&&==*&=>',;-;,,-*=>,;=;){),)]]'----*=;!{);;'!),>'!)>--,)';=-,!!>*%&=--=%$$&=-=&$$%=;,>;===;,)!),-&$$%&=---*%$###$$%%&&%%$##@@#$$%&*====*&%##@++@@#$%*->^6n", "n5^)',,>;=&%$####$%&=-;>,>;=&%####$$%**=*&%$#@@#$*-;>;=&%%*->,'>=%###$%&%$$$&=;;-&$##$%%$@++@#$$&-,,;*&*==*&-,',-->,,-*=>,;=;){),)]]'----**;){)>;,!!,>,!!,--;''>-=;)~)-&%*-;-*%$$*--=%$$%=;,>-===;,)!),-&$$%&=---*%$#@##$$%%%%%$##@@##$%&*=====*%$#@@++@##$&=!4m", "n6^),>;=*%$####$$%*=;>,,>-=&$####$%&*==*&$##@@#%*-;>;=&%%*->,'>=%###$%&%$$$%=;;-*$##$%%$#++@#$$%=;,>-&&==*&*-,'>-->,>=&=>,-=;)~),']]'-=--**-'{!,;,)~'>>)!);-;,)';=-,!!,=%%*-;-&$$%*--*%$$&=>,>-===;,)!),-&$$%&*=--=&$####$$%%%%%$##@@@#$$%&*====*&%$#@+++@##%,1l", "n6^,;-*%$#####$%&=-;>,>;-*%$###$$%&*==*%$#@@@#%*-;;-*%%%*->,'>-%###$%&&%$$%*-;;=%##$$%$#@++@#$$&-,,;*&*==*&*;'';--,';*&->,-=;)~)>'{]'-=--=*-'{{';>)~)>>'!!,-->))>-=;)~);&%&=;-=%$$%=--*$#$&->,>-=*=;,)!),-&$$$%*=--=&$##@##$$%%%%$$#@@@##$%%&*====*&$##@++@@$;|k", "n5{;=&%#####$%%*=;>,,>;=&$####$$%*==*&%$#@@@#%*-;;-*%$%*->,'>-&#@##%%&%$$$&-;;-%###$%%$@++@##$%*;,,-&&*==*&=>',;=;,,;**->>-=;)~'>'{]'-=--=*=,{]);;'~!,;,!!';=;')';=-,!!,=%%*-;-*$$$&-;=&$#$&->,;-**=;,)!),-&$$$%*=--=&%#@@@##$%%%%$$#@@@@#$$%&*=====&%$#@@++#-}k", "m3)=%$#####$%&=->,,,;-*%$####$%&*==*&%$#@@@#%*-;;-*%$%&=;,,>-&$###$%&%$$$&=;>-*$##$%%$#+++@#$$&->,>=&&=-=&&-,',-=;,,-**-,>=*;)~'>'{])-=--=*=>~])>;,!~';>)!)>--,))>==;)~);&%%=-;=&$$%*--=%$#$*->>;=**=;,)!),-&$$$%&==-=&%#@@@##$$%%%$$##@@@##$%%&*====*&%$#@+@=[j", "l1>%##@##$%&*-;>,,>;=&$##@##$%&====&$#@@@@#%*-;;=&%$%&=;,,>-&$#@#$%&%$#$%=;>;=$###$%$#@++@##$$*;,,;*&*=-*&*;,'>-=;,,-&*;,;=*;)~'>,{])-=---*=;!]!>;,!~)>;'!!,-->))'-=-,!!,=%$&=;-=%$$%=--=%##%*->>;=**=;,)!),-&$$$%&*===*%$#@@###$$%%%$##@@@@#$$%&*=====*%$###=[j", "k};$###$$%*=->,,,>-=%$####$$%*===*&$#@@@@#%*-;-=&%$%&=;,,>-&$@@#$%&%$#$%*-;;=%#@#$$%$#+++@#$$%=>',-&&=-=*&*;'';=->,,=&*;,;=*;)!'>,~]);=-;-**;)]{,;>){)>;,!!';=-,))>==;'!);&$%*-;-*$$$&=;-*$#$%=;>>;=**=;,))),-&$$$%&*===*%$#@@@##$$%%%$$#@@@@##$%%&*====*&%$$-[j", "k}-###$%&=-;>,,,;=&%##@##$%&*===*%$#@@@@$%*-;-=&$$%&=;,,>-&$@@#$%&%$##$&-;>-&$@##$%$#@++@##$$&-,';=&&=-=&&=>',-=->,>=&*;,;**;)!'>,~]!;=-;-**-)]]';;'~!,;>)!)>=->)!,-=-,)!'-%$%=;;=&$#$*-;-&$#$%=;>>-=**=;,)))>-&$$$%&*===*%$#@@@###$$%%$$##@@@@#$$%&**====*&%;}k", "k}-$$$%*=;>,,,>-=%$#@@##$%&====*%$#@+@@$%*---*%$$%&=;,,>-&$@@#$%%%$##$&=;;;*$#@#$$$#@+++##$$%=>',-&&*--=&&-,',-=-,,;*&=;,;**;)!,;,~]!;=-;-=*-']]);;,!~';;'!!,-=;'!)>==;'!)>*$%&-;;=%$$%=;;=&$#$&=;>>-*&*=;,)))>-&$$$$%*===*%$#@@@@##$$$$$$##@@@@##$%%&*======,|k", "k};%%&=-;,,,,;-*%$#@@##$%*=--=&%#@@+@#$%*--=*%$$%&=;>,>-&$@@##%%%%$#$%*-;;=%#@##$$$#+++@#$$$&-,'>=&&=--*&*;,'>==;,,;*&=>,-**;)!,;,~]!>=---=*=,{^!>->!{)>;,)!';=-,)!,-=-,)!'-%$%*-;-*$$$&=;;=%$#$&-;>;-*&*=;,')'>-&$$$$%&*==*&$#@@@@###$$$$$##@@@@@#$$%&&*===-)2l", "k|>**=;>,,,>-=&$##@##$%&*=-==&$#@@+@#$%*=-=*%$$%&=;>,>-*$#@@#$%&%$##%*-;;-&#@@#$$$#@+++##$$%=;'';*&*---*&=;'';==;,,-&&=>,-**;)!,;,!]~>==--=*=>~^~,->){!,;>)~!,-=;)!)>==;'!)>*$$&=;;=&$#$&-;-*%##$*->>;=*&*=;,')'>-&$#$$%&*==*&%#@@@@@##$$$$$$##@@@@##$%%&*==-)3m", "l1'--;,,,,;-*%$#@@##$%&=--=*%$#@++@#$%*===&%$$%&=;>,>-*$#@@#$%&%$##$&=;;-*$@@##$$#@+++@#$$$&-,',-&&=-;=&&=>',-*=;,,-&&=>>-&*;)!,;>!]~>==-;=*=;!^]';;'~~,;;'!!'-=-,!!,-=->)!'-%$%*-;-=%$$%*-;-&$##%*->>;=&&*=;,')'>=&$##$%&*==*&%#@@+@@###$$$$$##@@@@@#$$%&&*-)3m", "l2!>>,',>;=&$##@@##$%*=--=*%$#@++@#$%*==*&%$$%&=->,>-*$#@@#$%%%$##$%=-;;=%#@@#$$$#++++##$$%*;,'>=&&=;-=&&-,',-*->,>=&&->>=&*;)!,;>!]{,==-;-**;)]]);;,!{);;,)~);=->)~);==;'!!>*$$%=;;-*$$$%=;;=&$#$%*->>-=&&*=;,')'>=&$##$%&**=*&%$@@++@@###$$$$##@@@@@##$%%&='2m", "m4]',,,;-*%$#@@##$%&*=--=*%#@+++@#$%*==*%$$$%&=->,>-*$#@@#$%%%$###%*-;;=%#@@##$$#@+.+@#$$$%=>',-*&*-;-*&*-,';=*->,;=&&->;=&*;)),;>!]{,==-;-**-']^);->!{)>->)~!,-=;'~!,-=->)!'-&$$&=;;=&$#$&=;;=%$#$%=->;-*&&*=;>'',>=&$##$%%&*=*&%$#@++@@###$$$$$##@@@@##$$%*,2l", "n5^',>;=&$##@@##$%&=---=&%#@+++@#$%*==*%$$$%&=->,>-*$#@@#$%%%$###%*-;;-&$@@@#$$#@+..+##$$$*;,',=&&=;;-&&=;,,;=*->,;*%*->;=&*>)),->)]],==-;-=*=,]^~>-;){!,-;,!~';=-,!~);==;'!!,=%$%*-;-*%$$%*-;;=%##$%=;>;-*&%*=;>,',>=&$##$$%&***&%$#@+++@@###$$$$##@@@@@##$%>1l", "n6^'>-*%$#@@@##$%*=---=&$#@+++@#$%*=*&%$$$%&=->,>;*%#@@#$%%%%$##$&=;;-*$@@@##$##++.+@#$$$%=>'';*%&-;;=&&=>',-**-,,-&%*->;*&*>))>-;)]],==-;-=*=,{^{,-;'~~';-,)~)>==;)~!,-=->)!);&$$%=;;-&$$$%=;;-*$##$&=;>;-*%%&=->,',;=&$##$$%&***&%$#@+++@@###$$$$###@@@@@#$;|k", "n5]>=&$##@@##$%&*=--=*%$#@+++@#$%***&%$$$%&=->,>;*%#@@##$%%%$##$%*-;;=%#@@@#$$#@+..+#$$$$&-,),-&%*->;=&&->'>=*=;,,-&%*->-*%*>))>-;)]]'==-;;=*=>~^]';-,!{);->)~!,-=-,!{);==;'!),=%$$&-;;=%$#$&=;;-&$##$&=;>;=&%%&=->,',;=&$##$$%&&**&%$#@+++@@@###$$$$##@@@@@$-}k", "m4!=%$#@@@##$%&=---=*%$@@+++@#$%&**&%$#$%&=-;>>;*%#@@##$%%%$###%*-;;-&#@+@##$#@++.+@#$$$%=;''>=%&=;>-*%*-,,;=*=;,>=%%*;>-*%*>))>-;)]]'-*-;;-*=;!^^);->){!>-;,!~);=->){!,-=->)!);&$$%*-;-*%$$%*-;;=%$##$&-;;;=&%%&=->,,,;=&$##$$%%&**&%$#@++++@@###$$$$##@@@@#-}k", "l2,%##@@##$$%*=---=&%#@++++@#$%&*&%$##$%&=-;>>-*%#@@@#$%&%$###$&=-;-*$@+@#####++..+#$$$$&-,)';*%*->>-&%*;,,;*&=;,>=%%=;;-&%=>))>-;)]]'-*=;;-**;)^^!>-;){~,-->)~!,-=;'~{);==;,)),=%$$&=;;-&$$$%*-;;=%###%*-;;-=&%%&=-;,,,;=&$##$$%%&***&%#@@+++@@###$$$$$##@@#=[j", "k|;$@@@##$%&*----=&$#@++++@#$%&&&%$##$%&=-;>>;=%#@@@#$%%%$###$&=-;-=%#++@####@+..+@#$$$%*;'),=&&=;>;=&&=>,,-*&=>,;*%%=;;=&%=>))>-;)]^)-*=;;-**-']^{,-;'~{';-;'~~'-=-,!{!,-=->'!);&$$%*-;;=%$#$&=;;-*$##$%*-;;-*%%%&=-;,,,;=&$###$%%&**&&%$#@+++@@@###$$$$##@#=[j", "k}-#@@##$%*=----*%$#@++++@#$%&&&%$##$%&*-;>>-=%#@@@#$%&%%###$%*-;;=%#++@@###@+...+#$$#$&->)';*%&->,;*%&->,>=&*->,;*%&=;;=%%=>));-;']^)-*=;;-=*=,{^],--,!{);-;,!~);==;){{);==;,)),=%$$%=;;-*%$$$&-;;-&$##$%*-;;-*%%%&=-;>,>;=&$###$%%&&**&%$#@++++@@###$$$$###-[j", "k[-#@#$$%*=-;-=*%#@+++++@#$%&&%%$##$%&*-;>>-=%#@@@#$%%&%$###%&=;;-&$@++@###@++..+@#$$$%*;')'-&%*-,,-*%*-,,;=&*->,-&%&=;;=%%=>)';=-']^)-*=;;;=&=>~^]'-->){!,-->)~!,-=-,!]~,-=->')';*$#$&=;;-&$#$%*-;;=&$##$%=-;;=*%$%&*-;>,>;=&$###$$%&&*&&%$#@++++@@###$$$$$$-}k", "j[-$#$%&*----=&%#@+++++@#$%%%%$$##$%&*-;;;-=%#@@@#$%%&%$#@#$&=-;-*$@++@@###@+...@#$$#$%=>')>=%&=;,>-&%*;,,;*&*;>>-&%&-;-*%%=>)';=-']^!;*=-;;=*=>!^^);-;){~'-=;'~~';=->)]]);==;,)),-%$$%*-;;=%$$$%=;>;=%###$&=-;;=&%$%&*-;>>>;=&$###$$%%&&&&%$#@++++@@@###$$$$;}k", "k}-$$%&=----=&$#@+++++@#$%%%%$###$%&*=;;;-=%#@@@#$%%&%$#@#$%*-;-=%#+++@###@+...+@$$$$$&-,)';*%&->,>=%%=;,,-&&=;>>=%%*-;-*%%=>)';=-,{^!;*=-;;-**;)^^!>-;'~{);=-,!~)>==;'~]~,-=->')';*$#$%=;;-*%$$$&=;;-*%###$&=-;-=&%$%&*=;;>>-=&$###$$%%&&&&%$#@@++++@@###$$%;}k", "k};%%*=-;--*%$#@+++++@#$%%%%$###$%&*=;;;-=%#@@@#$$%%%$#@@#%*=--=&#@++@@##@++..+@#$$#$%=>'),-&%=;,,;*%&=>,>=&&=;>;=%%*-;-*%%=>)';=-,{^!;*=-;;-**-']^{,--,!]!>=->)~!,-=-,!]]);==;,)),-%$#$&-;;-&$$$%*-;;-&$##$%&=-;-*%$$%&*=-;>;-=&$###$$%%&&&&%$#@@++++@@###$%;|k", "k|>*=--;-=*%$@++++++@#$%%%$$###$%&*=;;;-=%#@@@#$$%%%$#@@#$&=---*$@+++@##@@+. .+#$$$#$&-,))>*%&=>',-&%*-,,;=%&=;>;*%%*-;-&%%=,)';=-,~^!;=*-;;-**-,]/],-->){~,-=;'~~);==;){]!,==->')';*$#$%=-;;=%$$$%=-;;=&$##$%*=;;-*%$$$&*=-;>;-=&$###$$%%&&&&%$$#@++++@@###$;|k", "l1'---;-=&%#@+++++@@#$%%%$$###$%&*=-;;-=%$@@@##$%%%%#@@#$&=---*%#+++@@##@+. +@#$$#$%=;')'-&%*-,',=%%*;,,;*%&-;>-&%%*-;=&$%=,)';=-,~]~>=*-;>-=*=,{^^)--;){{'-=-,!~!>-=;,~]]);==;,)),-%$#$&=;;-*%$$$&=;;;=%###$%*=--=*%$$$%*=-;;;-=%$###$$$%%&&&%%$#@++++@@@#$;}k", "l2);;;-=&$#@+++++@@#$$%%$$###$%&*=-;;-=%$@@@##$%%%%$#@#$%*---=%#+++@@##@++. .+#$$$#$&-,)),=%&=;''>*%%=;,>-&%*->>-&%&=--=%$%=,),-==>~]~>=*-;>;=*=>!^^!;=;'~{);=->)~~'-=->)]]!>==->')';*$#$%*-;;=&$$$%*-;>-*%###$%*---=&%$$$%*=-;;;-*%$####$$%%&&&&%$#@+++++@@$-}k", "m3~>;-*%$#@+++++@@#$$%$$####$%&*=-;;-=%$@@@##$%%%%$#@@#%&=--=&$@+++@@@@++. .+@#$$$$%*;'));*%&->'';&%&=>,>=%%*->;=&%&=--=%$%=,),-==>!]~>=*=;>;=*=;!^/~>--,!{!>==;'!~)>==;'{^]';==;,'),-&$#$%=;;;=%$$$%*->;-*$###$%*---=&$$$$%*=-;;;-*%$####$$%%&&&&%$#@@++++@#-}k", "m4~;=*%$#++++++@##$$%$$####$$%*=-;;-=%#@+@@#$%%%%$#@@#$&=---*$@+++@@@@@+. .+#$$$#$%=>)),-&%*;,),-%%&->,;*%%*->;=%%&=--*%$%=,),-*=>!]~>=*=;>;=**;)^/{,-->){~,-=-,!~!,-=-,!]^!>==->,)'>=%##$&=;;-*%$$$&=;>;=&$###$%*---=&$##$%*=-;;--*%$####$$%%&&&&%$#@@++++#=[k", "m4!-&%#@++++++@##$$$$$####$$%*=-;;-=%$@@@@#$%%&%$#@@#$%*---=%#++++@@@@++. .+@#$$##$*-,))>=%&=>')>=%%*-,,;*%&=;>;*%%&=--*%$%-,',-*=>!]{,=&=;>>-**-']/]'-=;'~{);==>)~~';==>)]^]'-==;,'',-&$##%*-;;=&$$$%*-;>;=%$###$&=---*%$##$%&=--;-=*%$####$$%%&&&&%$$#@+++@=[j", "m2'*$#@++++++@##$$$$$####$$%*=--;-=%$@@@@#$%%&%$#@@@$%*=--=&$@++++@@@++. .+#$$$#$%=>)!';&%&-,));*%%=;,>-&%&=;>-*%%*=--*%$&-,',-*=;!]{,=&=;>>-**-,{/^);=;'~{);==;'!{)>==;,~^^!>==->,''>=%##$%=;;;=%$$$%*-;>;*%####$&=---*%$##$%&=--;-=*%$####$$%%%&&&%%$#@++@=[j", "l1>%#@++++++@##$$$$#####$$%&=--;-=&$@@@@#$$%&%%$@@@#%&=---*$@++++@@@++.. .+@$$$##$&-,)),=&%*;')'-&%&=>,>=%%&=;;-&%%*=-=&$$&-,',-*=;)]],=&=->>;=*=,~//!;=-,!{~,==-,)~!,-=->)]^]'-==;,'',-&$##$&-;;-*%$$$&=;>;-*$####%&=--=*%$##$%&==---=*%$####$$%%%&&&&%$#@+@=[j", "k|;#@++++++@##$$$$#####$%%*=----=&$#@@@#$$%&%%$#@@#$&*=--*%#+++++@@++.. .+#$$$#$%=;'!);*%&=>)),=%%&->,;*%%&-;;-&%%*=-=&$$&-,',-*=;)]]'=&*->>;=*=>!^/{>-->){{'-*=>)~~);==;'{^]!>==-;,''>=%##$%*-;;=&$$$%*=;>;-&$###$%&=--=&%###$%&*=---=*%$####$$%%%&&&&%$#@#=[j", "k}=@++++++@##$$$$##@##$%%*=----=&$#@@@#$$%%&%$#@@#$%*=--=%#+++++@@+++. .+@$$$##$&-,)!'-&%*-,))>*%%*-,,;*%%*-;;=%%%*=-=%$$&-,',-**;)]]'-**->>;=&*;)^/],-=;'~{);==;'!{!>==-,!]^{'-==;>'',-&$##$&=;;-=%$$$%*-;>;=%$###$%*=--=&$###$%&*=---=*%$####$$$%%&&&&%$#$=[j", "j[=@+++++@##$$$$##@##$%%*=----=&$#@@@#$$%%&%$#@@#$%&=--=&$@+++++@+++. +@#$$$#$%*;'!)>=%%=;)!);&%%=;,>-&%%*-;;=%$%*--*%$$&-,',-**;)]])-**->>;=**-']/]'-=;,!]!>=*-,)~~'-==;)]^^!;==-;,''>=%###%*-;;-&$$$$&=->>;=%$###$%*=--=&$###$%&*=---=*%$####$$$%%&&&&%%%-}j", "j[=@++++@##$$$$##@##$%%*==---=&$#@@@##$%%&%$#@@@#%&==-=*$@+++++++++.. .+#$$$##$&=>)!';&%&=,)!,-%%&=;,>=%%&=-;-*%$&=-=*%$$&-,'>=&*;)]])-**-;>>-**-,]/^);=-,!{~,-*=>)~{);==-,!^^{,-==;>,',;*$##$%=;;;=%$#$%&=;>>-*%####$%*=--*%$###$%&*==--=*%$#####$$%%&&&&%&;}k", "j[=@++@@##$$$###@##$%%&==---=&$#@@@##$%%&%%#@@@#$&*=--=%#++++++++++. .@#$$$##%*;,!!,=%%*-'!!>=%%&->,;*%%&=;;-&%%&=-=*%$$&-,'>=&*;)]^)-**=;,>-**-,{//!;=->){{)-*=;'!{!,-==>)]^]);==-;,''>=%###$&-;;-*%$#$%*-;>;-&$####$&*=-=*%$###$%&*==-==*%$#####$$%%&&&&*>|k", "j[=@+@@#$$$$###@##$%%&==---=&$#@+@##$%%&%%$#@@#$%*=--=&$@+.+++++++. .+#$$$$#$%=>)!);*%%=>)~);&$%*->,;*%%&=;;-&$%&=-=*%$$&-,'>=&*-']^!;**=;,>-**=>!//{>==;'~]);=*-,){~';==;'~^^{,-==;>,',;*$##$%*-;;-&$$$$&=-;>;=&$###$%&=--=*%$###$%&*==-==*%$#####$$%%&&&*,1k", "j[=@@##$$$$##@@##$%%&*=---=&$#@+@##$%%%%%$#@@#$%&==-=*$@+.+++++++. .@#$$$##$*-,!!'-&%&-,!~'-%$%=;,>-&$%&-;;=&$%*=-=&$$$&-,'>=&*-']^!;*&=;>>;*&=;)^(],-=;,!]~,=*=>)~{)>==-,!]^]);==-;,''>-%###$&=;;;=%$#$%&=;>>;=%$###$%&=--=*%####$%&*==-==*%$#####$$%%%&*,1l", "j[=###$$$$##@@##$%%&*=---=&$#@+@##$$%%%%$#@@@#%&*=--*%#+..+++++++. .+@$$$##$%=;'!)>=%%*;'!!,=%$&=;,>=%$%*-;;=%$%*===&$$$*-,'>=&*-']^!;*&=;>,;=&*;)^(^'-=-,!]{'-*=;'!{!,-==;){^^{,-*=;>,',;*$###%*-;;-*%$#$%*=;>>-*%####$%&=--=&%#@@#$%&*=====*%$#####$$%%%*,1l", "j[-$#$$$$##@@##$%%&*=---=&$#@+@@#$$%%&%$#@+@#$%*=--=%#++.+++++++. .@#$$$##$&-,)!';&%&=>)~);*%%&->,;*%$%*-;;=%$%*=-=&$$$*;,'>=&*-']^!;*&=;>,;=&*-']/^);=->){]);**-,){{);==-,!^/]);==-;,',>-&$##$%=-;;-&$$$$%*-;>;-&$####$%&=--=&$#@@#$%&*=====*%$#####$$%%&,1l", "k}-$$$$$##@@##$%%&*=---=&%#@+@@#$$%%&%$#@+@#$%*=--=&$@+.+++++++. .+#$$$##$%*;'!!,=%%&-,!~)-&$%*-,,;*%$%=-;-*%$%*=-=&$$%*;,'>=&*-']^~;*&=->,;=**-,{//~>==;'~]!>=*=>)~{!,=*->)]^^~,-*=;>,',;=%###$&=;>;=%$#$%&=-;>;=&$####$%*=--=&$#@@#$%&*=====*%$#####$$$&,1l", "k};%$$$##@@##$%%&*=---=&%#@+@@#$$%%&%%$#@@#$%&=--=*%#+..+++++++. +@#$$$##$&=>)!);*%%*;'~~,=%$%=;,,-&$$&=;;-&%$&====%$$%*;,'>=&*-,{^~>*&*->,>-**=,~/(],==;,!]~,-*=;'!{~'-==;'~^/]);==-;,''>-&$##$%*-;;-*%$#$%&=;>>;=%$####$%*=-=*%$#@##$%&*=====*%$#####$$%>|k", "k|;%$$##@@##$%%&*=---=*%#@++@##$%%&&%$#@@@#%&*=--=%#++.+++++++. .+#$$$###%*;,!!'-&%&=>){!>*$$&=>,>=%$%&=;;-&$$&===*%$#%*;,'>=&&-,{^~>*&*->,>-*&=>!^(]'-=-,){{);**-,){{);=*-,)]/^~,=*=;>,',;=%###$%=;;;=&$#$$%*-;>>-*%##@#$$&*=-=*%$#@##$%&*=====*%$#####$%>|k", "k|;%$##@@##$%%&*=---=*%#@++@##$%%&%%$#@@@#$%*=--=&$@+.+++++++.. +@#$$$##$&=>)~!>=%%*-,!{);&$%&->,;=%$%*-;;=%$%&===*%$#%*;,'>=&&-,{^{,*&*-;,>-*&=;)^(^)-=->){]!>=*=>)~{!,-*=;'{^/]';==-;,,',-&$###%&-;>;=%$#$%&=-;>;-*$####$%&*=-=*%$#@##$%&*=====&%$#####$;|k", "k|;%##@@##$%%&*=---=*%#@++@##$%%&&%$#@+@#$%&==-=*$#+..+++++++. .+#$$$###%*-,!~);*%%=;)~~'=%$%*-,,;*$$%*-;;=%$%&===*%##%*;,'>=&&-,{^{,=&*-;,,;=&*;'](/!;==;'~]~,=*=;'!{~';==-,!^/^!>=*=;>,',;=%###$%*-;;-*%$#$%&=-;>;=&$####$%&==-=*%##@##$%&*=====&%$####$;}k", "k};$#@@##$%%&*=---=*%#@++@##$$%%&%$#@+@#$%&*=--*%#+..+++++++.. +@#$$$##$%=;)~!,-%%&=,!{!>*$$%=;,,-&$$%=-;;=%$%*===&$##%*;,'>=&&-,~^],=&&=;,,;=&*-'](/~>==;,!]{'-**-,){{)>=*=>)]^/]'-*=-;,,,,-*$###$&=;>;-&$#$$%*=;>>;=%$####$%&=--=*%#@@##$%&**====*%$###$-}k", "k}-#@@##$%%&*=---=*%$@++@##$$%%&%%$@@@@#%&*=--=&$@+..++++++.. .+#$$$###$&-,)~)>*%%*-'~{);&$$&=>,>=%$$&=-;-*%$%*===&$##%=;,'>=&&-,~^],=&&=;,,;=&*-,~/(],==-,){]);*&=>)~{~,-*=;'~^/^!>=*=->,',>=%###$%*-;>;=%$#$$%*-;>>-=%$####$%&=--=&%#@@##$%&**====*%$##$-}k", "k}-#@##$%%&*=---=*%$@+++@#$$%%&%%$#@+@#$%*=--=*$@+..+++++++. +@#$$$##$%=;'!~'-&%%=;){{'-%$%*->,;=%$%&=;;-*$$%*===&$##%=;,'>=&&=,~^]'=&&=;>,;=&&=>!/(^'-=->){]!>=&=;,!{{);=*->)]//]'-*=-;,,,,;*$###$%=;>;-*%$#$%&=-;>;-*%##@##$%*=--=&$#@@##$%&**====*%$#$-}k", "k}-###$%%&*=---=*%$@+++@#$$%%&&%$#@+@#$%&=--=*%#+..+++++++.. .+#$$$$##$&->)~!,=%%&-,!{!,=%$%*;,,;*%$%*-;;-&$$%*===&$#$%=;''>=&&=,~^]'-&&=;>,>-*&=>)^(^);==;'~]~,-&*-,){{!>=*=;'~^/^!>=*=->,',>-&$###$&=;>;=&$#$$%*=;>>;-&$####$$%*=--=&$#@@##$%&**====*%$$-}k", "j[-$#$%%&*=---=*%$@+++@##$%%&&%$#@+@#$%&*=--=&$@+..+++++++. +@#$$$##$%*;'!~);*%%*-'~{);&$$&=;,,-&$$%*-;;=&$$&*===&$#$%=;,';=&&=>!^])-&&=->,>-*&=;)](/!;==;,!]{);*&=>'~]~'-**-,!]//{,-*=-;,,',;*%###$%*-;>;=%$#$$%*-;>>;=&$####$%&*=--=&$#@@##$%&**====*%%;}k", "k}-$$%%&*=---=*%$#+++@##$%%&&%$#@++@#$&*=--=&$@+..+++++++.. .+#$$$$##$&=>)~!,=%%%=;){{'-%$%&->,>-&$$%=-;;=%$$&===*%$#$%=>'';=&&=>!^^)-&&*->,,-*&*;'](({>==-,){]!>=&=;,!{{);=*=>){^/^);=*=->,',>-&$###$&=;>;-*%$#$%&=-;>>-=%$#@##$%&*=-=*%$#@@##$%&**====**>|k", "k};%%%&*=----*&$#+++@##$$%%&%%$@@+@#$%*=--=*%#+..++++++++. +@#$$$##$%*-,!~)>*%%&-,!]~,=%$%*->,>=%$$&=-;;=%$%&===*%$#$%=>'';=&&=>!^^)-&&*->,,;=&*-,{/(],=*->)~]~,=&*-,){]!,-*=;,!^//{,-**-;,,',;=%####%*-;>;=&$##$%&=-;>;-*%##@##$%&=--=*%$#@@##$%&**=====,|k", "k|;&&&*=----=&$#@++@##$$%%&%%$#@+@#$%&==--=%$@+..+++++++. .+#$$$###$&=>)~~'-&%%*;'~]);&$$%=;,,;*%$%&=;;-*%$%&===*%$#$&=>'';=&&=>!^^!;&%*->,,;=&*-,~/(^)-==;'~]{'-&&=>'~]~';**->)]//^);=*=->,',>-&$###$%=->>;=%$#$$%*=;>>;-&$#@@##$%&=--=*%$#@@#$$%&**===-'1l", "k|>***=----=&$#@++@##$$%%&&%$#@+@#$%&*=--=&$@+..+++++++.. +@#$$$###%*-,!~!,=%%&=>){{)-%$$&=;,,;&$$%*=;;-*%$%*===*%$#$&=>'';=&&=>!^^!;&%*-;,,;=&&=>!^(/);==;,!]]);*&=;,!{{)>=*=;'~^//~,=**-;,,',;=%####$&=;>;-*%$#$%&*-;>>;=&$#@###$%*=--=*%$#@@#$$%&**==-)2l", "l1'-=-;;;;-*%$#@@##$%%&&**&%$#@##$%*=-;;-=&$@+++@@@@@@++++..++@$%%%$$$%*->){{)>=%&=;'~]{'-&%%*-,',;*%%&=;>>;*%%&=---=&$$%*-,)'>=**-,~//{>*&=->'',-**->!^_({,-=;,!]^{,-*=;,!]]{';==;,!^((^!>==-;,')',;=%$#$%&=;>,>-*%$$%&*=;>,,;-&%$##$$%*=-;;-=&$###$%%&*==-;!3m", "n5^)))!!!)'>;-===--;;>,,,,>;-===-;,'))!!),;=****======**&&&&&*-;>>;;-;>,)]/_(^!,>>'~^_:(]'>;>'!]^]),;;,'!{{),;;,')))'>;-;,)]^^{),,){(<[_{,,,)~]^])',)~/:}}:])')]/_:_^),')]/_:_/~'')]/_[[<(])''!{]^^^{)>;---;,)~]]!'>;-;;>,)~]]{!'>;----;>,')!!),>--=--;>,,')!(7n", "sf632333321|}[[[[}}}||111||}[[[}}|1223332|}[<<<[[[[[[[<<<<<<<[}}||}}}}|23589852|||24799741|||245542|||1234421||122221|}}|13465421124800841|1245543112469aa95222468996311246899742124680a095312345565431}}[}}|2344421}}}||123454421}}[}}}||123332|}}[[}}||11237gt", "xsnmmmmmmlkkjjjjjkkkkklllkkkjjjkkklllmmmlkjjjjjjjjjjjjjjjjjjjjjkkkkkkkklmnoonmlkkllmnoonmlkkklmnnmlkkkllmmmlkkkkllmllkkkklmmnnmlkllmoppomlkllmnnmmlllmnopponmlmmnooonmlllmnooonmlllmnoopponmlllmmnnnnmlkkjkkklmmmmmlkkkkkklmmnnmllkkjjkkkkllmmmlkkjjjjkkkkllmnsx"}; xscreensaver-5.36/hacks/images/wood.xpm000664 000767 000024 00000011323 11766726261 020212 0ustar00jwzstaff000000 000000 /* XPM */ static char *wood_texture[] = { /* columns rows colors chars-per-pixel */ "128 32 32 1 ", " c #6C2A14", ". c #7C3A24", "X c #945644", "o c #9C5A44", "O c #A45E4C", "+ c #A46254", "@ c #A4624C", "# c #9C5E4C", "$ c #AC6A54", "% c #AC6654", "& c #B46E5C", "* c #B4725C", "= c #BC7664", "- c #CC8674", "; c #AC6E5C", ": c #AC725C", "> c #C47E64", ", c #A46A54", "< c #9C624C", "1 c #94523C", "2 c #8C4E3C", "3 c #AC665C", "4 c #844A3C", "5 c #7C3E2C", "6 c #000000", "7 c #000000", "8 c #000000", "9 c #000000", "0 c #000000", "q c #000000", "w c #000000", "e c #000000", /* pixels */ " . . . .... . . . . ........ 5 ", " 2X#XooXooooooO++@oO#@@#@@+$$@Oo@$@OO@@@%$$$$@@@O@@@O%$%@@%>>->>=&========***;$;%$;&;%%$$$$$$%+@$;$:*&;;$+**=**$$&**;;*=>>>--, ", " 4=>-=>>=>>=>>>>->>>>>>>>>>--->>>>->=>>>>>--->>>>>>->>>>->----------------->-------------->>>>===>>>==>>>>>---->==>>>>>-------< ", " +#+X##O3OoO+O@@%$$$+O<+@++@@%$$$$@@@@@@$&$@@$*@@$&*&$*=*=*>=;%$&@;$$%%%$@@$;**==>=>=*=***&*&$;;==$&*;***;***&;**$&*=***&&==>, ", " X###O#OooOo11@oo#@@@XoooO#oo%*=$$@O@%$%$&$@@$*$$$&&%O$***&&$@;=*&=$O@%++$$$$$;=*&***===**;;=*$$**;$;*=*;&,$$;;;$&&***==&&===2 ", " .###X#Xoo#oo121Xo#@+@oo#o#O%@%$&$@%OO%&&%$%@@%&$$$*&%o$*&&%+OoO&%+&+O@+@+%,;;;&==*:&&=***&;&=*;$;;+%;***&$;&**=****=====>=>*=< ", " .X2X2oXoO#oX12ooo#O#XXo#oo#%%$&*&%$@@$$&$&&@%$*&&&*&$O$=*$&$%O@&%%&%@O@@%+$$;**===;$,*&$;&;**;$$;$O@;*;;$+;&;*******=*=*&&&;:4 ", " #XXX##+Ooooo#O#@@@#oXooXooO@&=*=*$%@$$@*>=$%&=*&***$O&==*=&&@$=$&*&$@%@@%$;**=>=*$+%;$;$$;&&;;&;&@#$*$+$@%,$;;&;$$$&$$$&$===# ", " 5<++#+@#O#oooO##@+$$%XooX1oo@&*>>=&$$$&@=>=$$*=***==&%$>==&$@O$&$&*&&$$$%+;*=====;,%$&;$$%$$;;$&:&$o;*%+&@+%+$$$$%$$$,$%%%*==X ", " .XXX21211ooooX%%+$$+@@#@OO#&**$*=*=*&*=*=*===*&=**=>*&*>>*=*&%&=$&$&*&&*=;*====**&***&$$+%,$:&;&$;&+;**&$$*&&;;;&;&*****=*>=>, ", " .#o#X+##11XOO%@$&*=&;O@+@+%==>=**>=*===&>=>>>=*=*=>>>*=>=>>*&@&*%>*=*&=*=*==>=*=&*==:;;%+%$;&*;$$$$$&**=&&*:;$$$$&;*****=&===X ", " 4oo#@#OoooXo#@&%$*=*;@ooO%$*>>=&=>>>>>>*=>===*==>=>>>>=>>->====*==**%$=========*$;*;$&**&++%;$$&;&;%;***;;**&&;;;&&**=**%%&+;X ", " 52o#OXoO#o1XoO@#%&==*+O#oOO@&>>>>>=>>>==>-->>>>>=>>>>=>===>>=***=>==&*==****=*;O+*=$@@+%%@%$&&&&&&&$;*=***=*=*===&;**===$%=+;4 ", " 5o@+@o#111111XXXo@%$$%@#1241%*>>>->>>>>=->>>=>>>==>>=>=>===>>>*=====&*=======*&@+==$+&&&&$&;&*&*;&&%$;&;;;*******&***====&=3=4 ", " 4oXooo+o##@+@%%$&&&****&+Oo%&=>>====**==>>=*==>>=>>>=&*=*&$*>>>*>===&*=*=====*$#O@%@$==**&&&&;&;&;;%$;$$$$%+$$$$;&;&;***===&=4 ", " 54221Oo@+$$;$&*&&*&*&**&*=&***&&&**&&$&**&&&==&&&&*$@%&&;$&*=%$*===&&=*****$+#2Xo#<%;$$%$$$$%$%$$$$;&&;$;+%,$;$$;;+%+$$&&&3=4 ", " X$$$&+$$+$$;$;$$$&&&&=*&&;&==>>-==*=>==&>>==>>>>>>-->=*$&***>&***&&&@%&$$%$$;$@===*;$$;&$%%%%+%%;$&@@@@##@+@%+%@#%3+%,@%@%%+,5 ", " X@#@+%$+@+$;&$&$&&*&;%+$&&$&%@$$%@@%$$@oO@OOoO@@@%$$%$@11oOO@%%%%%@@oO@@O#O@+@+o#o#oooo@OO@%@%%$$&*;&;&$$;$;***$$3$;;;$$&&&%;5 ", " 1o@@@o1XX1XoXoo+@#O@@oO@Oo#@%%@@&=*===*&$======%$&*==*==*%@$@@%%@@%%OO%@@o#@#o##@@#oXoooo1Xooo11o#o1oXXoo#ooo#ooXooo#@+$%O%%34 ", " 522222211Xooo#XoooooO#o%+OO&&*&&*=**=**&*=***==*&***$$&===$$%%$$%%%$O@%@%#+%@@@O@+@@@O#O#oooOooo#@#oXoo##o##O****&;&+&&*&*&****==***=*&&&**&&&***&&&&$$&&&$&*%%&&*$$$$;$&$@@&$%+$;$%+@@+@oo+%%+@+%%@@%$$O#@@@+@#@%+@+@+++%++@@%OOO:X5", "5XO@@@+@$;$;&**+$;&&$%*=*%&=%$$&&&%&&&&**$%@%$&*%$$$$%%%%%&&%$$%%$&&%oO$*%@+$+@+@++@+@OO@+@@%@@O@%%o+@@@@+%+@+@@@+%+%+@@@%@%O<45", "5@+++%$+++%$$;&;&***&+*==*&=*===*=$&;&$$&$%%$&**$$&*&$$$&*&$%$$@%$$&$oo$&+@+$+@@$$@O@+@+%@@O@+OOO+@oO#@@+%@%@+@@+@+%+@<@O@%%O,45", "5+@oo@+@$$$;$;$&&&*&$@&*==*&*==&&=$*&&$$$$&&**&&$&&=**==**&&$$$%@$@&$Oo%$;@+%@++++oX%$%%%@O#O%@#O@+oX#O++++$+%@+@+OO++@O#@++#355", ".,$%++@+$;$;$;*&;&==***=***&=====*&=*&$&*&$$*==**===**==***$$$@@$*$%%@@@@++@@@@+@===;&:$$$**&$$@%@+%@+@++@@OoO@@%+@@#@@@@#@++Oo+$;%@,+@+<@@++OOO++O#####. ", ".;;;$;,$$$;$$$&$$&**=*&&&$&$&&&&&$&**;$$;$%$*****===**&;$;$&&&:&:&:$$,$+$@+@+@+@@##o##+@@##o#@@#@@@#oo@@#oO=>======>>>=**=>>=**=====>>=>->=***========>=*$$+%@+%#@+@@@<@#O#oO@+@#o#oO#O<@+oO@++@@@#o###o#%+@+++%++,++5.", " oooXooXo#oXoo#XoOo#O##oo#oooo#o#oOO#ooooooo#o#ooOo#o#ooOoOo#####X+@#O#O#O@@O@##@@@@@@#o##O<@###O@@#oo#oooo#oo#oooXo#oooo#++#X. ", " 22222221112221222222212121242221122112222221222221111Xo1X1XXXXoX1X1212121222211121221221211111221121X112112222212XXXXXXXX1224. ", " . . . .......5..5.55555555555..555.555555.555555..555.5..5.................... 5 " }; xscreensaver-5.36/hacks/images/bubbles/blood.pov000644 000767 000024 00000000777 06461546365 021771 0ustar00jwzstaff000000 000000 #include "colors.inc" #include "shapes.inc" #include "textures.inc" /* The following make the field of view as wide as it is high * Thus, you should have the -W and -H command line options * equal to each other. */ camera { location <5.8, 0, 0> up <0, 1, 0> right <1, 0, 0> look_at <0, 0, 0> } sphere { <0,0,0>, 2.5 texture { Blood_Marble scale <2, 2, 2> rotate <0, 20, 0> } finish { Dull } } light_source {<6, 1, 0> color White} /* light_source {<6.1, 1, 0> color White} */ xscreensaver-5.36/hacks/images/bubbles/blue.pov000644 000767 000024 00000000706 06461546370 021605 0ustar00jwzstaff000000 000000 #include "colors.inc" #include "shapes.inc" #include "textures.inc" /* The following make the field of view as wide as it is high * Thus, you should have the -W and -H command line options * equal to each other. */ camera { location <5.8, 0, 0> up <0, 1, 0> right <1, 0, 0> look_at <0, 0, 0> } sphere { <0,0,0>, 2.5 texture { Blue_Agate scale <0.7, 0.7, 0.7> } finish { phong 1 } } light_source {<6, 1, 0> color White} xscreensaver-5.36/hacks/images/bubbles/glass.pov000644 000767 000024 00000001063 06461546373 021767 0ustar00jwzstaff000000 000000 #include "colors.inc" #include "shapes.inc" #include "textures.inc" /* The following make the field of view as wide as it is high * Thus, you should have the -W and -H command line options * equal to each other. */ camera { location <5.8, 0, 0> up <0, 1, 0> right <1, 0, 0> look_at <0, 0, 0> } sphere { <0,0,0>, 2.5 texture { Glass scale <0.7, 0.7, 0.7> rotate y*clock normal {bumps 0.4 scale 0.1} finish { Shiny } # finish { phong 0.4 } } } light_source {<6, 7, 0> color White} light_source {<6.1, 1, 0> color Blue} xscreensaver-5.36/hacks/images/bubbles/jade.pov000644 000767 000024 00000000771 06461546376 021571 0ustar00jwzstaff000000 000000 #include "colors.inc" #include "shapes.inc" #include "textures.inc" /* The following make the field of view as wide as it is high * Thus, you should have the -W and -H command line options * equal to each other. */ camera { location <5.8, 0, 0> up <0, 1, 0> right <1, 0, 0> look_at <0, 0, 0> } sphere { <0,0,0>, 2.5 texture { Jade scale <0.7, 0.7, 0.7> rotate y*clock } finish { phong 0.4 } } light_source {<6, 1, 0> color White} light_source {<6.1, 1, 0> color White} xscreensaver-5.36/hacks/images/bubbles/blood1.xpm000644 000767 000024 00000002150 10374533774 022033 0ustar00jwzstaff000000 000000 /* XPM */ static char *blood1[] = { /* width height ncolors chars_per_pixel */ "10 10 58 1", /* colors */ " c #000000", ". c #250000", "X c #415050", "o c #013232", "O c #000606", "+ c #0E2E2E", "@ c #60C0C0", "# c #002020", "$ c #102222", "% c #4D5454", "& c #043737", "* c #000505", "= c #65A0A0", "- c #7ED6D6", "; c #196969", ": c #0C4545", "> c #642525", ", c #385C5C", "< c #002525", "1 c #6D8686", "2 c #354F4F", "3 c #5A7D7D", "4 c #030A0A", "5 c #001E1E", "6 c #71B1B1", "7 c #274E4E", "8 c #287373", "9 c #0D1A1A", "0 c #053333", "q c #001717", "w c #374343", "e c #000303", "r c #070000", "t c #537272", "y c #520B0B", "u c #0C3636", "i c #297D7D", "p c #AF5C5C", "a c #003737", "s c #010000", "d c #042727", "f c #0C3C3C", "g c #000202", "h c #042020", "j c #419A9A", "k c #420707", "l c #064949", "z c #071212", "x c #1D4F4F", "c c #154747", "v c #000101", "b c #264747", "n c #002828", "m c #000707", "M c #364949", "N c #001414", "B c #002121", "V c None", /* pixels */ "VVV*.drsVV", "VVkuxi;yoV", "Vv:8jtpbd<", "Vac,@-=Mfn", "VOuw3612$q", "V.z7X%ji+B", "V#0u>7c9&N", "VVeo4l0hVV", "VVVrm5grVV", "VVVVVVVVVV" }; xscreensaver-5.36/hacks/images/bubbles/blood10.xpm000644 000767 000024 00000012333 10374533774 022117 0ustar00jwzstaff000000 000000 /* XPM */ static char *blood10[] = { /* width height ncolors chars_per_pixel */ "60 60 92 1", /* colors */ " c #000000", ". c #020F0F", "X c #000D0D", "o c #7F9A9A", "O c #571010", "+ c #70D0D0", "@ c #000606", "# c #121111", "$ c #001313", "% c #236060", "& c #1F0000", "* c #002020", "= c #002D2D", "- c #637777", "; c #001919", ": c #206D6D", "> c #163535", ", c #020707", "< c #023535", "1 c #437878", "2 c #044444", "3 c #001212", "4 c #022121", "5 c #091E1E", "6 c #1D2B2B", "7 c #114040", "8 c #000B0B", "9 c #366E6E", "0 c #7ACBCB", "q c #0D4949", "w c #021A1A", "e c #233737", "r c #171E1E", "t c #6A8D8D", "y c #474D4D", "u c #2F3C3C", "i c #000404", "p c #354F4F", "a c #0A2828", "s c #012929", "d c #364646", "f c #5B6767", "g c #0F0202", "h c #001E1E", "j c #183C3C", "k c #325C5C", "l c #000A0A", "z c #053333", "x c #115959", "c c #022626", "v c #031D1D", "b c #001010", "n c #0C1515", "m c #102626", "M c #AF5C5C", "N c #033030", "B c #2E0808", "V c #285151", "C c #001616", "Z c #4A5858", "A c #0C3C3C", "S c #5AB0B0", "D c #7FB0B0", "F c #000202", "G c #000F0F", "H c #176464", "J c #001C1C", "K c #031515", "L c #081010", "P c #713232", "I c #1E1F1F", "U c #4F6666", "Y c #000808", "T c #420707", "R c #064949", "E c #001515", "W c #322525", "Q c #0D3232", "! c #154747", "~ c #328181", "^ c #000101", "/ c #023E3E", "( c #085151", ") c #204E4E", "_ c #906D6D", "` c #060D0D", "' c #063B3B", "] c #000707", "[ c #050202", "{ c #609393", "} c #4A9191", "| c None", /* pixels */ "||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||", "||||||||||||||||||||||||GXXJccsNcCF@G|||||||||||||||||||||||", "|||||||||||||||||||||]l$^XXGEh*$]ls/'R(((RzalNxB((RNh4<=<&[BE||||||||||||", "||||||||||||8XX3$;NR2NN'R(x(75LQxOA5L`,li.*J*=shY|||||||||||", "|||||||||||iEs=X@KN2zcaQ(xx77mQdH7#5Qq7z4K,l^E*GXi||||||||||", "||||||||||ls<<<4XK4aaQQAqqmrm6HPxjr7qqx(N4w`l3$3@Fi|||||||||", "|||||||||GB&B<2/v`LL5Q>rm>>>!%9:)m7)xxHOxq<4.K=sCGbE||||||||", "||||||||bN&mTgBWzaQQ#mr6))%)%%~~VIjHHH%WHyO(zKlCNl*m[|||||||", "|||||||Cg==m2szT(uOx>mj%V%:VV:1~VeV:%HkOpxHT(4w3s<3BBh||||||", "|||||||gbbmreedpy1}S{{{ooD00-0Doo-f-UU1kpu66mmn544c=*^*w|", "||G]Xlh22cLA!rrI)kpy1t}{{ttooD0__+0{tffU11pue6e6rmL`v=4ElCC|", "||Ci8FX/Ranq!rrjVpdy1-ttt-ttoo00_++D{fUUZyuuujj>mm5,4=J$Fl;|", "||$]J*@22cLQQ>r6uudyZUU--f---oD0__+DtfUZZZpue666m5Ll.sCC|i*|", "||;3*J^N2wLmmrre6udpZZZZff--toD+_oD{-fUZZ9pde6rmmnLLw<=h$X;|", "||;bJ$l/N.n5mr6j)uddyZUUff-ft{D0_+S{t--119kVejrr55LLN<<=s*]|", "||h$XXcB3`Lnn#>jVVdupZUUU---fft{S_SDS}}}}~:)e6r#5L,vc/))%VeppdZUUUUUZZU-}-_-PyPyPP:)m#nm4Kl4C4g**&|", "||lg@*&=X.4wLQ>7!)V6dpdZyZZZZZZZUU1}}__PPW~H7r#5Q4vilX*g*CG|", "|||g@s&=EXv4Lm7!77jIuduuyyZZZZZZZZZk11~~PPy%7rmA'avll3cc$3||", "|||33$r<;Y.w`5Aq!j666eedkkkkZyyyyddpk9:%%:P)Q5AqR/cii]=cXw||", "|||XXXcgNXlKvz7q!!jmII6uVpk999pdduuddkVV):Hj#Q(6I64$lb=c;X||", "||||8CJ=B4KKzRRqq!>m6I6)%k:999kdud)eu)V))r755AWBIAs$FXs& |||", "||||^X*mNN*czA((qAQ>76j)%:::%::)eVu6e))Hyxm#m7BT2=h]FF**]|||", "||||@Y*sNN=Nzj>6rr!VOu)(QLa'IQc;XYlJwXY||||", "||||||@|FJ==&&&/ccNj>mQquOeORN`4s'NCl8b*#&L|||||", "|||||||^|^E;N[Bm c #000C0C", ", c #163535", "< c #286E6E", "1 c #437878", "2 c #001212", "3 c #010909", "4 c #040202", "5 c #360505", "6 c #2B8181", "7 c #616767", "8 c #000B0B", "9 c #366E6E", "0 c #021A1A", "q c #171E1E", "w c #474D4D", "e c #77CBCB", "r c #000404", "t c #012929", "y c #364646", "u c #264A4A", "i c #0F3D3D", "p c #516A6A", "a c #325C5C", "s c #6CA2A2", "d c #2B3E3E", "f c #262222", "g c #001717", "h c #115959", "j c #002424", "k c #040707", "l c #043535", "z c #031D1D", "x c #192C2C", "c c #000303", "v c #0F1515", "b c #AC6A6A", "n c #001010", "m c #150707", "M c #062323", "N c #0D2020", "B c #5AAAAA", "V c #001D1D", "C c #054646", "Z c #0C4343", "A c #031616", "S c #060F0F", "D c #000909", "F c #033030", "G c #001616", "H c #4A5858", "J c #142323", "K c #042727", "L c #489191", "P c #000202", "I c #000F0F", "U c #0C0707", "Y c #0B4B4B", "T c #001C1C", "R c #0B2A2A", "E c #713232", "W c #205C5C", "Q c #233434", "! c #194B4B", "~ c #7B7070", "^ c #262D2D", "/ c #0D3232", "( c #000101", ") c #023E3E", "_ c #637979", "` c #003535", "' c #001414", "] c #382A2A", "[ c #609393", "{ c #213E3E", "} c None", /* pixels */ "}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}", "}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}'8#o>'22>Pc}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}", "}}}}}}}}}}}}}}}}}}}}}}}}}}}ccP#I2=---jGIcoo2+v}}}}}}}}}}}}}}}}}}}}}}}}}}", "}}}}}}}}}}}}}}}}}}}}}}}}c(8##G=g+gno22o(G` mNtjj}}}}}}}}}}}}}}}}}}}}}}}", "}}}}}}}}}}}}}}}}}}}}}}D}D#Vt=t-+22>>8o88jtC45UX5F=V}}}}}}}}}}}}}}}}}}}}}", "}}}}}}}}}}}}}}}}}}}}nGDr'F`),Z)`-zA...A=jt)))f5m Xf++}}}}}}}}}}}}}}}}}}}", "}}}}}}}}}}}}}}}}}}V8I#cgt`C54$^CC)lF&kAF)55XXCC)^X 4`jj}}}}}}}}}}}}}}}}}", "}}}}}}}}}}}}}}}}}cGIcP+t`QQ)CQ@Y@Y))K3&l!5^]YCFjt``` `$m}}}}}}}}}}}}}}}}", "}}}}}}}}}}}}}}}##88PIg-)^CFll)@]h@/NvSih5YlMKF033&jjt))`=G}}}}}}}}}}}}}}", "}}}}}}}}}}}}}}8D++#2GK`YCKMl)Yh@YZiNvZd]YRSvMz0A34++8IjtVgD}}}}}}}}}}}}}", "}}}}}}}}}}}}}}nj-jn83Kl)lRF/ZhhhZ//viy%YRvR/YYZlK0.k3c2'+PDP}}}}}}}}}}}}", "}}}}}}}}}}}}8j/```j23zKFRli/ZYY,JvJ,%]%YRNi!Yhh@F&&koo2g2##Pc}}}}}}}}}}}", "}}}}}}}}}}}o-mX``)lzkS0Sv///NJJxxx!W%%hiqi!hhhw;@iRzk.Aj-VcnI2}}}}}}}}}}", "}}}}}}}}}}n-5$5C55YlMNRRvN,q,!!!!WWW96W{^uW%%%;$;$d@CAkA&t+#==&}}}}}}}}}", "}}}}}}}}}G-$F$55C)UCZhhZqJq,!!W#}}}}}}", "}}}}}}}tD#+>23.zFYdwW%%HfE69a91LLEELL19ww91L~E666Ha%%WZvS0lCCF2=tI}}}}}}", "}}}}}}To#=+o3kSRZYh%a%%HHE6199LL[wB[L1pHH1LEEEL616%%%h/vS0lC^)-P`t2}}}}}", "}}}}}}M8DVrg3SlCh%yw%%<6LwL1LLLBbbB[p_pHp[B~LEL_66W!WWRvSNR)$5f=2mX}}}}}", "}}}}}o=#2>T&zRC;$%OE%<<66EELL[BbbB[__7Hp_B~E_E_L6g+}}", "}}8otR-/f]CFNvvJJQ{Q^ywH1BBssssseeeb_:ees__777HHppaa^^QQJqvRZl&tF`=cTVo}", "}}#>gjjFm^CFSvRRqfQ^ddyw1[BBs[ssseeeebeesss_77ppp1aay^QQ,Jvv/FKt-`j#'TG}", "}}>8I22j`5CMSR/,qf^QOaHw1[[ss[[ssssseb:esss_7__p11aad^^Q,JvvSA&K-j+c>g'}", "}}+(P##+-XCMviY,J^^uaaww1[[[[___sssse:_eees[_7ppp9aydQQQiJNRSS0tF+GcP2g}", "}}Ur8o#Dt$CKvZYiqJ{OOyyH1_[[[_____ssee:bees[77ppHwydddQQiRNRNkAF-G2P(2G}", "}}m82T=(j5)MS//,xJ^dddOwHpp___7____sse:bees__ppHHHay^QQQxRNNSSk&-'GcP>2}", "}}48G=V#&5l0SR/RJJQ^^yaHHHHp777____ssebbess__HHHH9aOd^^qJNvSSS.K`tV22PG}", "}}UDG+2c=$tSSNNNqx{{ddyywHppp77___[ssebb*Bs[_pp119aauQ{xqNNvvS&l``t=jDg}", "}}UDo''I``S3AvvNq,{uudydwHpppH__77__[s*~*BBB[[11L19OdQQJvvNSS0&``)`- g8}", "}}S''##=Uj4ASSSvqi!uaaydaHHHpp____77_[B*7bbBB[LLLL6WuQJqqvvSSAzF)`55t=#}", "}}>+GDDjJ&30SkvvN!W!WWudOawHpp_p___77_[B*7b7E[EEE76o##}}}}}", "}}}}}}}(8'VMXX`$$5CFRFRZZ]hYYuwfyWi,i,xJqJ!h;$hu@ivzl),x-+28D8gj+>}}}}}}", "}}}}}}}crD#=-tJ5 $)tMFFlC$@ZYh;;vhii,i,/R,Zhvd^]ClS0Kt)`=>#onVmm+U}}}}}}", "}}}}}}}}}#P#+VtU $)lttlC]]/R/ZYY^5hYYYZiiZ@^$$;])0.0&KF=+n>o2tVVU}}}}}}}", "}}}}}}}}}}#P#2'F`XUJ))fk5)l&N/YZ@$^$5YYZZY]vv5U5l.0&K&t=+g>gVz+2}}}}}}}}", "}}}}}}}}}P((#oD2=j`X5/$5)FtSS&l/ZCiZ]$YY{^^)Ck$,t4At&==g>##+VUg}}}}}}}}}", "}}}}}}}}}}rP}#PrIVjF-j--&0.4.k00&MKlCf5UiCFR)]f)&rGj=go8(c#2mAr}}}}}}}}}", "}}}}}}}}}}}c#}P(#>D>Ggn+2344444.A.S0KFFlFM&&l))t2o=+g##P#(2VSD}}}}}}}}}}", "}}}}}}}}}}}}8D8>>c#r(D>#8P#3#443k43A0300AzKKjt=2#G+o#(cPD#8G }}}}}}}}}}}", "}}}}}}}}}}}}}>nG'g+>}D8r#2VVV+A.3.V-KA3ro+&&V+GD8++>#PP}#Dr>}}}}}}}}}}}}", "}}}}}}}}}}}}}}ogm=g'8D#D88+j+T=28IgjtjG>#8G++g8#I+ncDn+2'>r}}}}}}}}}}}}}", "}}}}}}}}}}}}}}}344VT+g22PD2'I2GIrDGTj=GorrIgo>P2>#P8Gg+ U}}}}}}}}}}}}}}}", "}}}}}}}}}}}}}}}}}8ImVVVgoD#>#D8r(82G+jjT28#Prr#Pr#2+mTm2}}}}}}}}}}}}}}}}", "}}}}}}}}}}}}}}}}}}#(8+U VGn'nDDP}D2V=jjt+GDPr#8oGT +o 8}}}}}}}}}}}}}}}}}", "}}}}}}}}}}}}}}}}}}}}c}82T4+g2o}#ccr8G'+TnD}DD8'TU2228}}}}}}}}}}}}}}}}}}}", "}}}}}}}}}}}}}}}}}}}}}}P}##8VU=V2I>882I#P(r(#Ig0gIno}}}}}}}}}}}}}}}}}}}}}", "}}}}}}}}}}}}}}}}}}}}}}}}(((#2+UUVGoo8nD#DDrc(D2Sr}}}}}}}}}}}}}}}}}}}}}}}", "}}}}}}}}}}}}}}}}}}}}}}}}}}}>c8InGUG222oD88o>#P}}}}}}}}}}}}}}}}}}}}}}}}}}", "}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}k8(}(rD>4 8}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}", "}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}", "}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}" }; xscreensaver-5.36/hacks/images/bubbles/blood2.xpm000644 000767 000024 00000003004 10374533775 022034 0ustar00jwzstaff000000 000000 /* XPM */ static char *blood2[] = { /* width height ncolors chars_per_pixel */ "12 12 82 1", /* colors */ " c #000000", ". c #002E2E", "X c #250000", "o c #000D0D", "O c #212A2A", "+ c #000606", "@ c #213030", "# c #636A6A", "$ c #072A2A", "% c #445C5C", "& c #4D5454", "* c #163535", "= c #000505", "- c #052E2E", "; c #041616", ": c #044444", "> c #76C1C1", ", c #0C4545", "< c #767F7F", "1 c #002C2C", "2 c #000B0B", "3 c #030404", "4 c #280404", "5 c #385C5C", "6 c #354F4F", "7 c #001111", "8 c #347272", "9 c #6E3B3B", "0 c #71B1B1", "q c #000A0A", "w c #270C0C", "e c #001717", "r c #253838", "t c #418888", "y c #013C3C", "u c #192C2C", "i c #000303", "p c #164040", "a c #032A2A", "s c #520B0B", "d c #001010", "f c #435555", "g c #0C3636", "h c #8EAFAF", "j c #282A2A", "k c #515C5C", "l c #1B5555", "z c #002A2A", "x c #2B3030", "c c #4F3939", "v c #AF5C5C", "b c #003737", "n c #010000", "m c #001616", "M c #042727", "N c #0C3C3C", "B c #030F0F", "V c #002323", "C c #0C4949", "Z c #011A1A", "A c #176464", "S c #0F0000", "D c #001C1C", "F c #8A5B5B", "G c #419A9A", "H c #064949", "J c #041919", "K c #001515", "L c #071212", "P c #031B1B", "I c #044040", "U c #0F4E4E", "Y c #242424", "T c #031414", "R c #063B3B", "E c #2B5C5C", "W c #396363", "Q c #182525", "! c #001414", "~ c #506969", "^ c #002121", "/ c None", /* pixels */ "////!IByn///", "//qV$UAp-7i/", "//.w&8F89,:/", "/z4cGv#05Qj1", "/bgrt>h c #102222", ", c #4D5454", "< c #163535", "1 c #043737", "2 c #4F6363", "3 c #73C8C8", "4 c #044444", "5 c #001212", "6 c #0C4545", "7 c #767F7F", "8 c #360505", "9 c #000B0B", "0 c #003939", "q c #385C5C", "w c #6D8686", "e c #000404", "r c #001111", "t c #5AABAB", "y c #001E1E", "u c #71B1B1", "i c #274E4E", "p c #0D1A1A", "a c #2B3E3E", "s c #053333", "d c #121515", "f c #270C0C", "g c #418888", "h c #374343", "j c #031D1D", "k c #020505", "l c #192C2C", "z c #000303", "x c #537272", "c c #120E0E", "v c #001010", "b c #062323", "n c #282A2A", "m c #040000", "M c #0C1515", "N c #515C5C", "B c #1B5555", "V c #002A2A", "C c #2B3030", "Z c #4F3939", "A c #000909", "S c #001616", "D c #042727", "F c #247B7B", "G c #074E4E", "H c #0C4949", "J c #011A1A", "K c #55A1A1", "L c #000F0F", "P c #042020", "I c #419A9A", "U c #064949", "Y c #1D4F4F", "T c #000101", "R c #286A6A", "E c #044040", "W c #693030", "Q c #001B1B", "! c #0C4141", "~ c #031414", "^ c #011212", "/ c #172121", "( c #002828", ") c #2B5C5C", "_ c #000707", "` c #343A3A", "' c #AA7979", "] c #506969", "[ c #002121", "{ c #213E3E", "} c None", /* pixels */ "}}}}}[[rV8}}}}", "}}}yjb#>pb~v}}", "}}.0a/RF)Wf~.}", "}}e6R+Ixg+BME}", "} U=CW*w3KiOnJ", "}f4Ohtu'7Nh/P%", "}J1<`]:u32`lk_", "}A&cRox-,ZRdL(", "}e^b!nqhh)YG_9", "}};E;X@{lfM0A}", "}}T(ms!cH8(5j}", "}}}JeQSDLA}r}}", "}}}}}9L5z$}}}}", "}}}}}}}}}}}}}}" }; xscreensaver-5.36/hacks/images/bubbles/blood4.xpm000644 000767 000024 00000003615 10374533776 022047 0ustar00jwzstaff000000 000000 /* XPM */ static char *blood4[] = { /* width height ncolors chars_per_pixel */ "20 20 89 1", /* colors */ " c #000000", ". c #002E2E", "X c #250000", "o c #000D0D", "O c #212A2A", "+ c #013232", "@ c #571010", "# c #0D5858", "$ c #000606", "% c #196A6A", "& c #60C0C0", "* c #002020", "= c #2E6E6E", "- c #0A1616", "; c #77D3D3", ": c #000C0C", "> c #549393", ", c #001919", "< c #002626", "1 c #043737", "2 c #000505", "3 c #052E2E", "4 c #044444", "5 c #012A2A", "6 c #001212", "7 c #385656", "8 c #0C4545", "9 c #030404", "0 c #001818", "q c #142525", "w c #485858", "e c #000404", "r c #340909", "t c #739999", "y c #264A4A", "u c #094B4B", "i c #001E1E", "p c #040E0E", "a c #000A0A", "s c #648D8D", "d c #053333", "f c #001717", "g c #418888", "h c #374343", "j c #040707", "k c #031D1D", "l c #000303", "z c #070000", "x c #AC6A6A", "c c #120E0E", "v c #001010", "b c #6A7878", "n c #0C3636", "m c #000909", "M c #003737", "N c #446666", "B c #042727", "V c #002323", "C c #295555", "Z c #000202", "A c #0E2A2A", "S c #287878", "D c #63A8A8", "F c #042020", "G c #567777", "H c #001C1C", "J c #8A5B5B", "K c #419A9A", "L c #064949", "P c #001515", "I c #194B4B", "U c #1D2E2E", "Y c #2D8686", "T c #3C1B1B", "R c #123A3A", "E c #023E3E", "W c #693030", "Q c #3C5656", "! c #242424", "~ c #2C3939", "^ c #0C4141", "/ c #031414", "( c #063B3B", ") c #020909", "_ c #000707", "` c #364949", "' c #001414", "] c #213E3E", "[ c None", /* pixels */ "[[[[[[[_ v*m35[[[[[[", "[[[[[62EX4B1zE 5[[[[", "[[[[P:+B#^A^ndjPo[[[", "[[[3rTnAIIS!%T@/+A[[", "[[Xm/r%S=gJhYYT85fa[", "[[ F8`SWKJGNxKyqBz<[", "[P&x;bDs`](Lst;DbN7OqF.*", "[_$BnOhNGbDxsw`Uq)fl", "[6 c #002D2D", ", c #000C0C", "< c #163535", "1 c #6F8989", "2 c #020707", "3 c #000505", "4 c #052E2E", "5 c #012A2A", "6 c #385656", "7 c #040202", "8 c #2B8181", "9 c #040F0F", "0 c #093838", "q c #000B0B", "w c #033232", "e c #001818", "r c #485858", "t c #092424", "y c #425252", "u c #739999", "i c #490D0D", "p c #030A0A", "a c #001E1E", "s c #142B2B", "d c #71B1B1", "f c #8DA5A5", "g c #6EC5C5", "h c #001717", "j c #013C3C", "k c #002424", "l c #031D1D", "z c #1B5C5C", "x c #011B1B", "c c #000303", "v c #0F1515", "b c #AC6A6A", "n c #120E0E", "m c #001010", "M c #282A2A", "N c #5FA5A5", "B c #606E6E", "V c #054646", "C c #225252", "Z c #003737", "A c #001616", "S c #241F1F", "D c #042727", "F c #0C3C3C", "G c #1E4747", "H c #011A1A", "J c #000F0F", "K c #3E8787", "L c #5E3030", "P c #042020", "I c #0F0000", "U c #4E9090", "Y c #031515", "T c #8A5B5B", "R c #000808", "E c #041919", "W c #0C5C5C", "Q c #001515", "! c #233434", "~ c #000101", "^ c #3C1B1B", "/ c #044040", "( c #637979", ") c #085151", "_ c #2D6B6B", "` c #364949", "' c #002121", "] c #0C4747", "[ c #213E3E", "{ c None", /* pixels */ "{{{{{{{{{c#'>Jon{{{{{{{{", "{{{{{{{Q*j/l9'jS e{{{{{{", "{{{{{#qh+w))vWw4pkjA{{{{", "{{{{qZklD0@v=@[W42m#c{{{", "{{{Qw&IW-Y&=r__KT`_8LS]PV4{{", "{{tapV`=KKKb.rNL8Cs-&';{", "{{5Z&WL8U1bNBddbXM-0Mj>{", "{;7Iiz=81dTguugbyXG%);~n", "{*Z^0v!6KNgffd1(O`S-F4ox", "{q*i9<+6.NuugguB.6+-9DHe", "{q'&9<+:rBB(dbdOy`!s9PA,", "{R*ZY-[[y.BBuTdUKC!v9Z$e", "{nHlx-Cz`yO.OUTLLL--YHIH", "{q'kY9@I", "{{h;YV]&j4V]i@<%]:VE0,m;{{", "{{{c#m$%/9wV^)M255'#a{{{", "{{{{q,3RqR77EED5#oc3 {{{", "{{{{{pahc*ARkoJ,,qx{{{{{", "{{{{{{{{xh{cQx{qIm{{{{{{", "{{{{{{{{{,JImRoc{{{{{{{{", "{{{{{{{{{{{{{{{{{{{{{{{{" }; xscreensaver-5.36/hacks/images/bubbles/blood6.xpm000644 000767 000024 00000004707 10374533777 022055 0ustar00jwzstaff000000 000000 /* XPM */ static char *blood6[] = { /* width height ncolors chars_per_pixel */ "30 30 91 1", /* colors */ " c #000000", ". c #002E2E", "X c #214B4B", "o c #2F5252", "O c #013232", "+ c #094747", "@ c #115C5C", "# c #186666", "$ c #0E4F4F", "% c #314040", "& c #70D0D0", "* c #000606", "= c #270808", "- c #8B6A6A", "; c #1F0000", ": c #002020", "> c #4F0E0E", ", c #000C0C", "< c #001919", "1 c #3E9191", "2 c #0F0A0A", "3 c #636363", "4 c #000505", "5 c #437878", "6 c #044444", "7 c #2E3232", "8 c #001212", "9 c #010909", "0 c #1D2B2B", "q c #360505", "w c #023B3B", "e c #093838", "r c #485858", "t c #002525", "y c #5C9393", "u c #011C1C", "i c #121C1C", "p c #274E4E", "a c #163A3A", "s c #813D3D", "d c #000A0A", "f c #053333", "g c #121515", "h c #396666", "j c #021919", "k c #001717", "l c #040707", "z c #000303", "x c #070000", "c c #502A2A", "v c #226666", "b c #001010", "n c #021F1F", "m c #718282", "M c #1B5555", "N c #AF5C5C", "B c #5C7777", "V c #042727", "C c #0C3C3C", "Z c #5AB0B0", "A c #002323", "S c #374F4F", "D c #000202", "F c #021111", "G c #000F0F", "H c #444B4B", "J c #1E1F1F", "K c #002929", "L c #2E7777", "P c #000808", "I c #0A2C2C", "U c #001515", "Y c #233434", "T c #315C5C", "R c #154747", "E c #2D8686", "W c #000101", "Q c #000E0E", "! c #085151", "~ c #1C3D3D", "^ c #042C2C", "/ c #0C4141", "( c #080F0F", ") c #172121", "_ c #516767", "` c #003535", "' c #7FC2C2", "] c #6D9696", "[ c #001414", "{ c #020202", "} c None", /* pixels */ "}}}}}}}}}}}}G,tKtDG}}}}}}}}}}}", "}}}}}}}}}A}<:GU4Wt;;Kn}}}}}}}}", "}}}}}}}}G4K/;!6Vn=xww .}}}}}}}", "}}}}}},,[O6^+@/(@C(l{::KP}}}}}", "}}}}}d``,VIe+I)#@i+@^j9[4z}}}}", "}}}}b;q=feg)XvMLo~#v#>f9O:x}}}", "}}}}b`u^X>#vvLLcSTvL>#@IfK=}}}", "}}}kuFk/S@>Lh1H1rh31E##g^64k}}", "}}[W4[+pTLE11]ZBryNsEX~gV=6t,}", "}}2U`=@#cE1sZZ]3]ZNmT70i/0J8g}", "}};`q7>MLBsN'&]m]ZZNHhX)+>2Kk}", "}8q`=!R~YT1ZZ-&&Zm]y_SX)CC6KdG", "}*.q+i)07S5Z]Z&-&]33_h7agCVw}2", "}G,n6(R)XS5y]m]&-'m35SYYi(uAdk", "}[u*6(e)%%rBBBBZ-&m_rSYY)(Fk}:", "}J^DK }", "}}*:O.f+ee~#cHppJYR@gif=`[P[,}", "}}}D2wkVAQ[[}}}", "}}}}4Wz:)O^j9VI+>qflVn:Q}nz}}}", "}}}}}d,4D,,*{9ljuuVt*kW}, }}}}", "}}}}}},;k,d<<88.b9 c #084242", ", c #030505", "< c #3E9191", "1 c #163535", "2 c #474E4E", "3 c #011D1D", "4 c #000505", "5 c #57A6A6", "6 c #052E2E", "7 c #033939", "8 c #360505", "9 c #2B8181", "0 c #012323", "q c #000B0B", "w c #366E6E", "e c #033232", "r c #021A1A", "t c #233737", "y c #0A0E0E", "u c #171E1E", "i c #002525", "p c #6A8D8D", "a c #77CBCB", "s c #000404", "d c #5FBABA", "f c #739999", "g c #0A2828", "h c #012929", "j c #364646", "k c #001111", "l c #030A0A", "z c #5C9999", "x c #0C5151", "c c #000A0A", "v c #332525", "b c #2B3E3E", "n c #064B4B", "m c #262222", "M c #173E3E", "N c #0E1E1E", "B c #192C2C", "V c #AC6A6A", "C c #062323", "Z c #5C7777", "A c #001616", "S c #051111", "D c #042727", "F c #4A0909", "G c #776D6D", "H c #7FB0B0", "J c #000202", "K c #000F0F", "L c #042020", "P c #0F0000", "I c #001C1C", "U c #260606", "Y c #713232", "T c #5A6767", "R c #000808", "E c #021717", "W c #135959", "Q c #385959", "! c #194B4B", "~ c #000101", "^ c #044040", "/ c #264747", "( c #0F0C0C", ") c #2B5C5C", "_ c #000707", "` c #003535", "' c #343A3A", "] c #495F5F", "[ c #182525", "{ c #245858", "} c #0C4747", "| c None", /* pixels */ "||||||||||||||||cX&&J|||||||||||||||", "||||||||||||sq%;+k&XA $hi|||||||||||", "||||||||||kR&`1^:&K&i7^8 m+|||||||||", "|||||||||As+`O>xx^DL!Oneh` U||||||||", "|||||||c+_A`nC^W}-Nb}yCrl+ci3R||||||", "||||||c@`0lDg-}xu[**@M}W6LXk&%s|||||", "|||||k88FnCg(11!!#w{O{*oo'>,L+;L||||", "|||||he7LF/.!b##))Y)t##Y'Wv6,`+8||||", "||||Ic:&rUo*2##w=JX|||", "|||I_+ly>W)*]9wU/*'Y9<25VzpTzdHV5Q'O[N-OFh:$|", "||y`mmboW*oYY2dVHfpfddV52w/t[xvU-sL|", "||;P8$FWW!{wz5dVHaHfpzz5]Q{/uxnO^s;|", "||i`-m-NutbQ<5daaVHapppZ]Q'mug-7eXE|", "|_A0$>S@ut'j=5zffaaaffT]]QjO1N@D:i&A", "|+J%:>SxuO)2=zppffapaHZ]TQ'tMNyreAJA", "|$k;i^S-BOb.]TZTZpHHaHZ]2QtOBNS,:AJ&", "|PA&;hSNubbj2]TTZpHVdzZZ=Q/buNSL`h0E", "|y&%P,Syu!)jQ2]ZZTp5TV5<<9/[uSy378h_", "||A+7lrNNW#..j]TZT]Z5GZY'o{[ygEE3P3|", "||;i`X3S-M!bbj'2222]]=<n--M!*o#))O/OWWv@N}F6+4_&||", "|||_IUm$8>6>xF**o!MBuMWv!gg$7;cRX_||", "||||s4:u 7C6nxxFyM11g}(OnSD7;%k$+|||", "|||||4_&`P7mF7N}xtFx}v(PerDh+X3+||||", "|||||s|JK0::0KKrLD>8M67m0A;X~_$s||||", "||||||ccX4~Xq%%,,lrrEDi;%+4sRc |||||", "|||||||X$Aq%q++;qAhA%A+qKkc+&s||||||", "|||||||||K33X%_q~&+0&_s4s&$$||||||||", "||||||||||sqI+&|ssA+k|c&P&c|||||||||", "||||||||||||~~kP3Xcccs~&s|||||||||||", "||||||||||||||||c|sX |||||||||||||||", "||||||||||||||||||||||||||||||||||||" }; xscreensaver-5.36/hacks/images/bubbles/blood8.xpm000644 000767 000024 00000007032 10374533777 022051 0ustar00jwzstaff000000 000000 /* XPM */ static char *blood8[] = { /* width height ncolors chars_per_pixel */ "44 44 92 1", /* colors */ " c #000000", ". c #214B4B", "X c #250000", "o c #000D0D", "O c #0D4B4B", "+ c #7B6868", "@ c #013232", "# c #094747", "$ c #4A5C5C", "% c #283434", "& c #002727", "* c #190101", "= c #000606", "- c #121111", "; c #236060", ": c #213030", "> c #4F0E0E", ", c #77D3D3", "< c #000C0C", "1 c #206D6D", "2 c #242222", "3 c #7FA6A6", "4 c #163535", "5 c #474E4E", "6 c #000505", "7 c #263E3E", "8 c #437878", "9 c #001212", "0 c #5DA5A5", "q c #2E4C4C", "w c #000B0B", "e c #021A1A", "r c #135C5C", "t c #001818", "y c #171E1E", "u c #739999", "i c #452A2A", "p c #001111", "a c #5B6767", "s c #001E1E", "d c #022D2D", "f c #183C3C", "g c #032424", "h c #134E4E", "j c #000A0A", "k c #374343", "l c #6ABABA", "z c #618D8D", "x c #043535", "c c #192C2C", "v c #000303", "b c #AC6A6A", "n c #044242", "m c #021212", "M c #0D2020", "N c #0A0606", "B c #718282", "V c #0C1515", "C c #113E3E", "Z c #002A2A", "A c #348B8B", "S c #5C7777", "D c #2E0808", "F c #142323", "G c #000F0F", "H c #021E1E", "J c #001C1C", "K c #0B2A2A", "L c #081010", "P c #2E7777", "I c #020A0A", "U c #4F6666", "Y c #305858", "T c #000808", "R c #041919", "E c #001515", "W c #002222", "Q c #0D3232", "! c #020303", "~ c #000101", "^ c #032828", "/ c #085151", "( c #396A6A", ") c #7C3232", "_ c #0C4141", "` c #385F5F", "' c #003535", "] c #343A3A", "[ c #001414", "{ c #033B3B", "} c #4A9191", "| c None", /* pixels */ "||||||||||||||||||||||<|||||||||||||||||||||", "||||||||||||||||=Tv6wZZtvtss-|||||||||||||||", "||||||||||||||vvsWZEoG=op&N**Qs|||||||||||||", "||||||||||||=j<@n*>n^eR9dn_>> !XJ|||||||||||", "||||||||||~96=Z##n#//{KR#X%#xW'@ *V|||||||||", "|||||||||~EoEd#x^{//OQV/>QLRLG=HjZWE||||||||", "||||||||=d's6^xKCCrhK-O1OMQh/{HLT<[6~|||||||", "|||||||&X{{{GLLKQMFc4rPr4CrrY]_K=mdtp<||||||", "||||||DXcX/>xO_yyC;1.;A1:.115>rD/RG&pd-|||||", "|||||eJsnHHirDrOr;1PYP)(%Y;;(irirxG^{oDJ||||", "|||||e6WsR^D>1>PP;P8A)+8k`AAP))2>#g^4d<[||||", "||||!wsoIHCr);$:P`8A)}AU58z]AA$11QLHn{sM9|||", "||||[E~mR#]k11PaAAA0b}SS$}5}SAP..KVgx*cTX|||", "|||E[=&x>>-2PPP})}0b0zaSzla)S8q%:y-Qn>nZ&W||", "|||X&ZiDO/ri))A+50bl0zSz,lbb0`k]:FFC/=>'<&||", "||s*'Di%-kr1))a)+l+,luBBlllbB$``.7FC/%*2:2H69DJ||", "||||J^ys&{O/_Q444;1P111%.%:.r1rMV_D2dt=vW9||", "||||j&d'@{nnQQCrk)i);.7:::frr-hVKiX{&Tj6o|||", "|||||e&yNX>nxK#r.ri2rfCcFc..>r_Lx>{WGv<9=|||", "|||||vv&ZD*{gKx:hO]>rC44KQrD%Odm^{^j-iO_O>D=nGR&ds99WEo||||", "|||||||~ojs@D':dg=gd{QO>fD{#={!&Ws<6E*j|||||", "|||||||j|vwjttJo!!!LLRdx{^exnWGs[T=6sN||||||", "||||||||op9 c #043737", ", c #020707", "< c #123131", "1 c #000505", "2 c #437878", "3 c #001212", "4 c #360505", "5 c #000B0B", "6 c #366E6E", "7 c #021A1A", "8 c #226E6E", "9 c #051313", "0 c #280404", "q c #0B2626", "w c #385C5C", "e c #022727", "r c #67C2C2", "t c #171E1E", "y c #6A8D8D", "u c #474D4D", "i c #000404", "p c #001111", "a c #5B6767", "s c #256060", "d c #8D6A6A", "f c #001E1E", "g c #000A0A", "h c #332525", "j c #2B3E3E", "k c #053333", "l c #270C0C", "z c #115959", "x c #253838", "c c #002424", "v c #031D1D", "b c #192C2C", "n c #093030", "m c #63A9A9", "M c #054646", "N c #113E3E", "B c #000909", "V c #5C7777", "C c #033030", "Z c #285151", "A c #001616", "S c #4A5858", "D c #142323", "F c #000202", "G c #000F0F", "H c #0C0707", "J c #001C1C", "K c #713232", "L c #154747", "P c #000101", "I c #023E3E", "U c #000E0E", "Y c #085151", "T c #0F4E4E", "R c #82C2C2", "E c #1C3D3D", "W c #204E4E", "Q c #060D0D", "! c #063B3B", "~ c #032121", "^ c #000707", "/ c #003535", "( c #343A3A", ") c #050202", "_ c #021616", "` c #012C2C", "' c #364949", "] c #001414", "[ c #609393", "{ c #0C4747", "} c #4A9191", "| c None", /* pixels */ "||||||||||||||||||||||||||||||||||||||||||||||||||", "|||||||||||||||||||ii5Ae/`:oi1Ge||||||||||||||||||", "||||||||||||||||i^i]ffAAp5B^$4 4/::|||||||||||||||", "||||||||||||||o3Bf//MI:o99g3$/I!lH)f:|||||||||||||", "||||||||||||BBU1o`M4#YMM>eX`Y4){ICn 4:f|||||||||||", "|||||||||||1]PPo/@I>IYYYC~_MHMIIc3`:/D0:||||||||||", "||||||||||io$UACYk~>Yz{{n-z(>Q-~v9ioU3:op|||||||||", "|||||||||g`/`3XCkeN>TzED&Lsz->NYY!~9ggpA^|||||||||", "||||||||c#4/Ic,_QqNqtDbbW+OLDLzz(WNeg3f`pUB|||||||", "|||||||-)n4H4Me>n&qDWssZs+8E@sO8K'Z*Yv=9CP`:||||||", "||||||fColIeIEj4TM$opg||||", "|||||$=AoX9ez*OOSK+s6+}yd}2SS6}a++6uOOeQ`M/G4=||||", "||||pBo]givNTO8O%K+26+mK}VV%a}d(}++OOT-QeMMCBti|||", "||||#PoA77{*O*88+}a}}mdmyVVSVydy}}8WEN&-e!44$:#|||", "|||1e1]e!044*h8++}K}}ymm[aVymydK}2'j@b&D>MhM`i)o||", "|||oqfI#4LzOOhh2+VKmmdmm[V[rRmddmw'j@@DqNYH#Ioc#||", "|||04/4@N&WzzKKKdKSdrdmmyy.mrrrdmSw6WxbD{Yh4#:^:||", "||J~HI#H4**zW882}mmrRdRRRyy.mmmrm2u6sZ@DNYYhH`Pfo|", "||ot#/M0TYLEExjw2+mmrRdRRRRy.ymm}au''Z@tN{MM/eFoJ|", "||p#D#<@!--t@jjwS}mmmRrRd.RmyVyVaSSw(@@DD>!C`/53o|", "||1f`I4I~QqD@x('SymmmymRRRRRy[aaSS2w'@@b--k~e/f5f|", "||1=3:#M9qND;xwwuV}m[yyymR.RmyVaaV2w(@@<--9v`:31A|", "||FB13;IQNLt@Zs'u2}yyVyyyRRRRR[aaaS'(jxEDqQ7Cfp|A|", "||=of14!9n>b;xj'u%aVVaVVymRdrmya%SS'@x@bD-9ieAAi3|", "||gooFICQqDtbxx'uuSSaaVyymrdrmVa%S6wWx@DD9Q_/C$o1|", "||g3A34QQ--&EZW'(S%VSVaaymmdmm}y222wW@b&-QQc//`#p|", "||ogF`C,_Q&tLWsZ(wSSVVVVaV[madmm}}2+Z@Dt&Q,_I/)cf|", "||oB3/`g_,--TWsZ@''SaaVVS%VymSdKKKKKsEt&-~99f$4f&|", "||35o#civv9nENWZ@''uuSSSSSSV2+}ddK@+O<&-n~vgU$0$o|", "||^ofH`Xi~Qn{LEx;jj(wSSSSuSSSS62+aKKWq-NIC91U::3Q|", "|||f1C/]i79eNLL<;@@jww66w''''''ssss'L&>YN!91|too||", "|||1]f CX,eM{TLED;@xsZ666w'''@jZZWOzqqY4@{{N<<<@Ws88888jWZ@xWWOOn&nN0MCoBi$#1||", "||||i$~`CCk!M!>>>TzOKh8sZZx@x;LzO*z-&NH4>:Bgi]5|||", "||||^=f C##;M>C>{zlzsZ*sEE@DtEzzlWT-~M0>c3B1gi=|||", "||||||=ott/i4kee>{W{z**W<<,C!>ep=gf$=||||", "|||||Pi|Acl)4>eCM*N>{zj@T{{N>{@lhL~7c``o^Gfv |||||", "|||||||iF3AC4#bN0M>7e{{4Y4{{{*44,IXve:$o=o:J5|||||", "|||||||PP5i3://C>evggeeekMlhlIkh4>i~cf3B|A)5||||||", "||||||||g|FiBBA]o=ii,,_X_eC>C~c>>vU$A1P1=fH|||||||", "|||||||||==ppBP=1iG39,iXvei=3c::oPo]|FFPP=||||||||", "||||||||||]#JoBiBgo$ffUp$eoUB3Jog1oG1G33i|||||||||", "||||||||||| Hfo]]|B=UAiUAc$]B^p51giBA7Qg||||||||||", "||||||||||||BF3)&op3^g|5ofc:oGFi1Go)p)g|||||||||||", "|||||||||||||||i=AfApFi1^3p3BiB=A#pGB|||||||||||||", "||||||||||||||||iF|U##A]==p^^FPgH31|||||||||||||||", "|||||||||||||||||||=i=pA9A355pgi||||||||||||||||||", "||||||||||||||||||||||||||||||||||||||||||||||||||", "||||||||||||||||||||||||||||||||||||||||||||||||||" }; xscreensaver-5.36/hacks/images/bubbles/blue1.xpm000644 000767 000024 00000001702 10374534000 021644 0ustar00jwzstaff000000 000000 /* XPM */ static char *blue1[] = { /* width height ncolors chars_per_pixel */ "10 10 47 1", /* colors */ " c #000000", ". c #2A2A47", "X c #2E2E4E", "o c #1D1D30", "O c #1B1B2E", "+ c #0C0C12", "@ c #0A0A10", "# c #17172A", "$ c #25253E", "% c #12121E", "& c #20202F", "* c #141423", "= c #2F2F4E", "- c #1A1A2C", "; c #333355", ": c #1D1D2B", "> c #282843", ", c #303051", "< c #111122", "1 c #161620", "2 c #0A0A14", "3 c #25253F", "4 c #2B2B48", "5 c #2F2F4F", "6 c #101020", "7 c #18182B", "8 c #353558", "9 c #15151E", "0 c #191925", "q c #13131F", "w c #0D0D19", "e c #151524", "r c #343456", "t c #1F1F34", "y c #0C0C14", "u c #0A0A12", "i c #494967", "p c #23233B", "a c #0C0C17", "s c #292944", "d c #121223", "f c #BCBCD7", "g c #1A1A2E", "h c #0B0B15", "j c #262640", "k c #171724", "l c None", /* pixels */ "lll13p32ll", "llw.5=5j0l", "l->6;r;5p2", "l9:5Of8,7t", "lh#=;id=s*", "la$4XgX4$1", "lq%ks<&3tq", "lleo1q1oyl", "lll+eue@ll", "llllllllll" }; xscreensaver-5.36/hacks/images/bubbles/blue10.xpm000644 000767 000024 00000012274 10374534001 021733 0ustar00jwzstaff000000 000000 /* XPM */ static char *blue10[] = { /* width height ncolors chars_per_pixel */ "60 60 90 1", /* colors */ " c #000000", ". c #0D0D1A", "X c #2A2A47", "o c #282845", "O c #151525", "+ c #303050", "@ c #111121", "# c #2E2E4E", "$ c #0F0F1F", "% c #1D1D30", "& c #0E0E17", "* c #0A0A13", "= c #25253E", "- c #23233C", "; c #21213A", ": c #10101C", "> c #262638", ", c #121221", "< c #2F2F4E", "1 c #2D2D4C", "2 c #333355", "3 c #282840", "4 c #2E2E49", "5 c #0F0F1A", "6 c #1F1F2D", "7 c #0D0D18", "8 c #0B0B16", "9 c #282843", "0 c #262641", "q c #11111F", "w c #0F0F1D", "e c #19192A", "r c #323253", "t c #040408", "y c #212135", "u c #1F1F33", "i c #08080F", "p c #23233A", "a c #212138", "s c #10101A", "d c #181825", "f c #25253F", "g c #202030", "h c #2B2B48", "j c #181828", "k c #141424", "l c #313151", "z c #2F2F4F", "x c #1C1C2F", "c c #1A1A2D", "v c #18182B", "b c #161629", "n c #202036", "m c #1C1C32", "M c #090912", "N c #13131F", "B c #11111D", "V c #2A2A46", "C c #131322", "Z c #2E2E4D", "A c #38385A", "S c #343456", "D c #151527", "F c #06060B", "G c #1B1B30", "H c #0C0C14", "J c #DDDDEB", "K c #494967", "L c #23233B", "P c #0C0C17", "I c #1C1C2A", "U c #292944", "Y c #0A0A15", "T c #161624", "R c #141422", "E c #0E0E1C", "W c #2B2B49", "Q c #121223", "! c #1E1E32", "~ c #0B0B12", "^ c #090910", "/ c #07070E", "( c #15151F", ") c #222239", "_ c #202037", "` c #1E1E35", "' c #262640", "] c #696985", "[ c #151522", "{ c None", /* pixels */ "{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{", "{{{{{{{{{{{{{{{{{{{{{{{{F&N,eOeeRj7&q{{{{{{{{{{{{{{{{{{{{{{{", "{{{{{{{{{{{{{{{{{{{{{:7e8x((!uuqbD,8xjH[{{{{{{{{{{{{{{{{{{{{", "{{{{{{{{{{{{{{{{{{/de8q&((a))cxP@CP78d%x*&B{{{{{{{{{{{{{{{{{", "{{{{{{{{{{{{{{{{Fdcxx(I)p-=v..E=.d=Id!nn!x&dF{{{{{{{{{{{{{{{", "{{{{{{{{{{{{{{{Hex(P)d-=fkL@@kLOI00'fwbu)T*NO:{{{{{{{{{{{{{{", "{{{{{{{{{{{{{*Pc!vCwq%6099@wIe@`'0O990'==pE(!cjB{{{{{{{{{{{{", "{{{{{{{{{{{{8jMPnP:c)09UVC$$hIC0_CgVVU90'E`[n!qeR{{{{{{{{{{{", "{{{{{{{{{{{B:c,Tp,.k9UVhhWW-1U1@@hyWhhVUg)6=p(b8eR{{{{{{{{{{", "{{{{{{{{{{i:8vOL)E$$VhhW111ZZZZZLc111Whgkv6'=Lc.*eH{{{{{{{{{", "{{{{{{{{{&exEvLLEE:ghW11ZVXcfg>>@_=>Z1Ox,,`6d=LcxPe/{{{{{{{{", "{{{{{{{{qj:7.Ldv9UXhW1Z#zvvmz0r%hv_D+z2>0vGcl+gcWcg)L30'x)n%eO{{{{{{", "{{{{{{NjP:a:m0pEhW1Zz++lrr>9W>2ce_vmhlym0yCgCg60=.ad8MN{{{{{", "{{{{{^/N%njBq9UmW1Z<+ygr22@z+vkx222<2rvQggy>OhU9k.)nCMT/{{{{", "{{{{{NP8javv6U601Z$`WWk<2ccQk%SSSS1222+mkzkcv2QbVk+zZ1WhwL'=)nj*T^{{{", "{{{{qiMqOx;x9V6Q@L0vlf@22Xvc>SS9uSQ>vODZb2Sv9SSSSS>2>SSkvvrl+23k`3AAAA>cSSS2Vkrl+zZ1,w6E[=)n8cii{{", "{{{qdw8:[O@EE@g1g0D@Dg22ck`!rlKKKAASS2v=rl+z#1;EvE:=pnd.di{{", "{{{CjMb[D@k9g@D1#61vc#2Skx)>A]]]]KAASS2Lkl+z#1f`vI=wLa!eOC{{", "{{~Ne8([emI9I6$1#zzD@1DSxlAK]]JJ]]KASS2vvl+z#1@,v6xcLau(*R~{", "{{&8e5uaaBu96h`6#z+lD`bSS24]JJJJJ]]ASS2l@@>z#1bL$0k.dauxMO&{", "{{s[D7PIC)69Vhv9gz+le@OSbuA]JJJJJ]]AAS2o__@kZ1gvxw$@RadN:/s{", "{{:Te%8aBm:gV6IG@e+ll_>2cg]]JJJJJ]]AA2vzVDG=g1$;EGEb_d&P:s&{", "{{:T(%uaLC':x,=Q1=y+lm`2m!4]]JJJJ]KAuhcc+@v9g1WhgEEC,ad8e:7{", "{{:TexuaLp'qv,@@V-g+lf_2hxKK]]]J]]KyvbvG@@oyg1hXU)DBLaqkqR:{", "{{:&eP8ap=',v@kxjg<+mbkr2ke4KAK]]KAvQrrlyyr4KAASk@yl++z#Z1WhV90.d)nPTMs5{", "{{s[s,8P)L='9LEwy1Z@@W+lLk3S<2!ASS2>mk++z+,`k+#@hllll++_`Z#G#@vWc+zzz<#ZZ$gWhXUUII=@OP8%(8/:F{", "{{{HRM78Pn)Lw.,IUVXh,$D1ZZZ#DQ`<<#ZZZ11D@EXVU90'=e8qbxe:*^{{", "{{{FqTj8Pxa[nDEg9UUXx@$W111ZZDhZZZ11)cm;@,UU90'=Ln878(eM&H{{", "{{{F:[dk88naqkcC09IUUmG@9g311_$g11WWWC$LIE000I=-)a88xcdi:/{{", "{{{{5HTi8*!nCvC='09O$$k`,6WWWgVDWWWhhheVU9G.)q-maneOceT~5{{{", "{{{{MH[H58duk8d-='0EEwggVXXhhIE,hhXXVgUU90=L..Pwn(.Oed[7F{{{", "{{{{t5NT7Mc!qDIp-NTE.099UUUVgd@@EVUUg0g0C'fB@v!Eux.:jTNFF{{{", "{{{{{HHRMMBx!YTa))E.@'00999dC`cxm999IL@q-w=Lddcc!x8:DR:H{{{{", "{{{{{t&qM*McxkYna)POB='''00CgbEjp0006I6==-L)an,%xcMR[/&F{{{{", "{{{{{{i5:OReNM7dnax8.d===''.xCD=%'''===-L))anuY8c(P*HFt{{{{{", "{{{{{{{H:/&seb&xe`n85)LL-==xvC.w====-LL))an`,kBHe:i/FF{{{{{{", "{{{{{{{FH:NOd[M.Y!u7kqTd)pPP`kx-LLLp))).Tnu8CDcPdN/&FF{{{{{{", "{{{{{{{{i&iiO:MC.x%!8D8c(a:PD[N%)))a(anPu!%d:858HN://{{{{{{{", "{{{{{{{{{^&:N/Mdecxx%&8c`dq.:aaannnn`u8*%xxcMi7/M:&t{{{{{{{{", "{{{{{{{{{{^7HH/[djec(*je!:.duuuuuu!!!(5((cesOqqi/7^{{{{{{{{{", "{{{{{{{{{{{FHsqC[Td&MRB(xPPN%Nj%%%%(c8ccNjs/*8&FH^{{{{{{{{{{", "{{{{{{{{{{{{F/57/7*i:MeeH.scxxxxxccceeej~CiC*^~*/{{{{{{{{{{{", "{{{{{{{{{{{{{F*^5FiR[TDd*P8eee:eeeejjdDiMMFHFFtF{{{{{{{{{{{{", "{{{{{{{{{{{{{{{i^H~:qNR[OT8&RM*dsHTTO[RNi:^FtF{{{{{{{{{{{{{{", "{{{{{{{{{{{{{{{{FFF75:BqN~////HRsRRNNqFH5*/tF{{{{{{{{{{{{{{{", "{{{{{{{{{{{{{{{{{{tFi^755H*F8i&BBB::557H*tF{{{{{{{{{{{{{{{{{", "{{{{{{{{{{{{{{{{{{{{{Fi*~^^HFF^&H7HH^*tF{{{{{{{{{{{{{{{{{{{{", "{{{{{{{{{{{{{{{{{{{{{{{{FFtttFi^^iFFF{{{{{{{{{{{{{{{{{{{{{{{", "{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{", "{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{" }; xscreensaver-5.36/hacks/images/bubbles/blue11.xpm000644 000767 000024 00000015434 10374534001 021735 0ustar00jwzstaff000000 000000 /* XPM */ static char *blue11[] = { /* width height ncolors chars_per_pixel */ "72 72 90 1", /* colors */ " c #000000", ". c #282845", "X c #191929", "o c #151525", "O c #303050", "+ c #2E2E4E", "@ c #0F0F1F", "# c #1D1D30", "$ c #29293F", "% c #17172A", "& c #2F2F48", "* c #0E0E17", "= c #1B1B31", "- c #272740", "; c #181824", ": c #25253E", "> c #10101C", ", c #1E1E2D", "< c #0C0C18", "1 c #1C1C2B", "2 c #1A1A29", "3 c #262638", "4 c #121221", "5 c #1A1A2C", "6 c #161628", "7 c #333355", "8 c #24243C", "9 c #151520", "0 c #202038", "q c #0B0B16", "w c #282843", "e c #262641", "r c #151523", "t c #0F0F1D", "y c #1B1B2C", "u c #19192A", "i c #323253", "p c #131324", "a c #040408", "s c #111122", "d c #212135", "f c #1F1F33", "g c #23233A", "h c #10101A", "j c #0A0A14", "k c #25253F", "l c #12121F", "z c #202030", "x c #0E0E1B", "c c #2B2B48", "v c #181828", "b c #141424", "n c #313151", "m c #2F2F4F", "M c #1C1C2F", "N c #1A1A2D", "B c #0B0B11", "V c #202036", "C c #22223B", "Z c #11111D", "A c #0D0D19", "S c #2A2A46", "D c #171726", "F c #131322", "G c #111120", "H c #2E2E4D", "J c #38385A", "K c #343456", "L c #151527", "P c #06060B", "I c #0C0C14", "U c #DDDDEB", "Y c #494967", "T c #080810", "R c #23233B", "E c #0E0E19", "W c #0C0C17", "Q c #292944", "! c #2D2D4B", "~ c #0E0E1C", "^ c #2B2B49", "/ c #1E1E32", "( c #18182C", ") c #07070E", "_ c #222239", "` c #1E1E35", "' c #090913", "] c #696985", "[ c #2C2C49", "{ c None", /* pixels */ "{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{", "{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{T'o*DDZooI){{{{{{{{{{{{{{{{{{{{{{{{{{{{{{", "{{{{{{{{{{{{{{{{{{{{{{{{{{{)ZWqyMMMlMMMM>u56TF{{{{{{{{{{{{{{{{{{{{{{{{{{", "{{{{{{{{{{{{{{{{{{{{{{{{lDvxM#r;;DVVAq<(xFb#Mx'>F{{{{{{{{{{{{{{{{{{{{{{{", "{{{{{{{{{{{{{{{{{{{{{{oXyq(6lV0___2W>5qxMN0;x'yD*{{{{{{{{{{{{{{{{{", "{{{{{{{{{{{{{{{{{I5M/Ax_r<8k--2wxG>`R4b5oxw--2_;R_l6/Mv6{{{{{{{{{{{{{{{{", "{{{{{{{{{{{{{{{TFy#f2Ab=Zo,wwQb`toS1f=b8-1QQww-e:2Nx9f#Gvl{{{{{{{{{{{{{{", "{{{{{{{{{{{{{{*'Aqx00AxozwwQSSzS@o[X(k%FSbcSSQww-8x_00`6yvF{{{{{{{{{{{{{", "{{{{{{{{{{{{{F>E;MyR_b(4wQSSc[[[!!!d!!6@@[[[cSS,DV_k8R;4WWXr{{{{{{{{{{{{", "{{{{{{{{{{{{T'ru/`R44b4~SSc[[!!!HHHHHHo6%!!![[czbMt-r:R=qjxXI{{{{{{{{{{{", "{{{{{{{{{{{)vMGE#RAAxGGDc[[!!Hz`(p6Qwgm8[0HH![@6G~@2G2:0MA>MvB{{{{{{{{{{", "{{{{{{{{{{lvyAV4R2x8FQSc[!!HHm5%G6LGN(bC=NCmHHy(p@`tD(e:2M9XW>l{{{{{{{{{", "{{{{{{{{{ID5x#qx8;>wQSc[!!HmmOmC8c=(3y0NspkOmmHwp@G@~w-kyA0f#5'Z{{{{{{{{", "{{{{{{{{{*uu#'5jA0>6edz~8[!HHmOOnnii3+sp37#3[Ls=cnncee3o0Xbz,-e2#0fj5IB{{{{{{", "{{{{{{{Iu'/V=8V-w,N[[!HmOdLni77%%`w(b(777737inmmb#3Qz,cQw-4b_V9tZr{{{{{{", "{{{{{{BF5WD0`4AwQzk[!Hmw`+6z773(`S63KKK777777ie%ommH!,cSQ>RMR0`xWDl{{{{{", "{{{{{{r*'j(MA02wQbNXy=bLspSs77LCp(=3KKKbL#573d(mLOm+H![cQ_F28_;M4'r{{{{{", "{{{{{ID5q6q4A%wQ1kesp%C.3^pS77LL=N`KKK3L3NM33wpN`SmmH![cGR1e:R09DvD*{{{{", "{{{{{FDqxtqRVtwQ:6Gp=wednc0b77[iVKKKKK$K3s!$pCse6OOmH![d`Gw-:8_V#WvF{{{{", "{{{{B)u'5q4((_wSc[@G_`G33n=77K(c3KKKKKK3K3KK3+6zinOmmH!,0,w-k8_VM4uEq{{{", "{{{{lhBqq/#NAM/Sc[RsS-%`ppb775bkbJ3JJJJ63KKK7#6!inOOzH!FbtQ~,8g09q5Dl{{{", "{{{{FvxjF<#VAG6%w[!y(b%p6L37Kp(pw&$nYYJJ&KKKK76L3nOOmH!FN=FN~8R0`AZ(:N%=t@!H(H%sp077Kpb(_nnYY]]YJJKKK7Ls3nOOmH!0teF2>r8_V9W>rB{{", "{{{>)u'o/ARx`wQ4SS!HmG8Rsi(7K(-$S]Y]]]]]YJJKK7$LsnnOmH!G4~G1/`8_V/9'oB{{", "{{{lTux9#_FA2w:~d%!Hm3c6p=S7KVJJJ]]UUU]]]YJKK738N3OOmH!FvR_1M/l_V/9'Zl{{", "{{{l*'x;0_%1fwQ:Q@,HmOOnL6p7K$7$]]UUUUUU]YJJK73ksC#OmH!@e~%Nbxx_0fMqTl{{", "{{PlDoj9;9~`2wQScC(6mOOn6p+7K(/Y]]UUUUUU]]JJK7$(NCwz3H!5p~_4Fpo_0yM**lB{", "{{IEDW#j026`1XQSc`ppQmOnzkc7SK/]]]UUUUUU]]JJK7(CCs-CNH!yR0L(GAM_0buW*EI{", "{{*ZD*#90_#Av211zS@CNsOnnpL7HwVJY]UUUUUU]YJJKpO!0`seFH![F~tNG:GA0jBI>Z*{", "{{*lD5MfV_81eD-4G%%=Q_OOn%s73O53]]UUUUU]]YJMpssLmGG=0z![cSkss%AxVAM'DEB{", "{{*TD5M/V_R2e,%s~G@QNCmO3Qsw7SMJ&Y]]]]]]YJ#Sp7p6bG.cH![[cSQNGtR_VuF5T)P{", "{{BZh9WGV_R:e4R~GFMF$+mO=sGi73budJYJY]]YJJ%N(innd3d+H!,XwQwGx1R_qjM''B){", "{{B)>>'qA0g8k-pGL(-z!Hmsm8%ni76(fi&3&JYJJKpN=nnOOmmH!![gSQw-xxg0EoA9oTB{", "{{PIhE4Wt0_8:ezxGG4,wHHcGk4nnspdKy!m3JJKK7dkLnOOmmHH![ccSQw2%;_0;j*uhWI{", "{{B)oXjBjx_R:e-v_0~F[!H!Gs5OdL(d!zC86KK77inwpzOmm+H![[cSQwGD=l_0fAWXo)T{", "{{aZovFjAj_R8k-woNps[!!3ebwOObcLnp`C6iiinnOzcF:m+H!![c-SQw,1M<_V/b5v*IB{", "{{P>FDq6450_8:e-zRSGc[!!6p@mOepk`(GFnnnn$OOOO8`+H!![ccSQw-e;@20`/ZIh))P{", "{{{ETDFDu>;_R8k-kx_~c[[!![6mmy`GbG8vOOO3OOOmm,s3!![[cSQ,z-kN6Myf#WWB)E{{", "{{{*'o'q*bV0_8:e@e-XSc[[!o!H+mm0ss`GpOOmmmmm+HLb![[cSQQ11e8Goob/Moq)**{{", "{{{I>r'qxjlV_R8,62bQSScczN`!HH33,`(p=zmmm+HHH!bp[,cSSQw-e:;AAqZjM>FZlI{{", "{{{BBFDFqjqV02x<`f2wQSScw@-!!!HHH8=@wHHHHHH!!!os@`zSQw-ek:R_qGb6yuoq>B{{", "{{{{Plo>*Mo;V;qE{{{", "{{{{PZlDloG*`0;WG84--w,1RC_=s=dz[!!8@b!![[[[cS4CzzG`z21:8R_0jjFyuDqZP{{{", "{{{{ThIovx*6/V4qMx:ke-zR@~~C=4,c[[[zSN[[[ccccz,QQwN%N:l6(;0VuZM5voBha{{{", "{{{{{*>FDx''9flx/R8:keyG=F>1X1SccccF~_ccccSSSzQQww,FAA>>AlV9b'5XDF>*{{{{", "{{{{{ahIo't'b/fq0fR8:kFA4wwQQQSSSS1G~_@SSSS1sbyw--e;0Mt#4tfjyAuDolBB{{{{", "{{{{{{*PFb6'F#/(M0_R<(=xt--wwwQQQ1zNGt`bQQQz(t-vo4:Flx#>Wr/#4IvoFZT{{{{{", "{{{{{{PBl)xTuM#9j;0_;GuAAke---wwGp>_o~t,www1MoGtur8Rg_0*M9#vWB'rlEB{{{{{", "{{{{{{{IBloT'5M#ulV0_>W95jWllPPP{{{{{{", "{{{{{{{{BElhq>uqAyoF:::888RRg_00Vf*4AW5uo)lBqP{{{{{{{", "{{{{{{{{{IEB)oDuD'xj/fq>4x2vgRR;;f<0V88888RRg__>9VVfj>j959DBql)a{{{{{{{{", "{{{{{{{{{)I>PloDq'FE9#/AbAMAl__qot;rbx;gg__f000j;f/9'Pa{{{{{{{{", "{{{{{{{{{{TIPlFolTDXMM#/;>4tMVy5A/;r;__000;VVVjq//#MFqI>)WIl>Ia{{{{{{{{{", "{{{{{{{{{{{TIhlB*'ru5yMM#A>4bfyvjqffffffff///5>D99y5u>ol*))*IT{{{{{{{{{{{", "{{{{{{{{{{{{{TPI>lFooDvuF'lqMMqj'##>vv#####xxIy>WuvT4B'TPP)T{{{{{{{{{{{{", "{{{{{{{{{{{{{{aB*)llThTTBqo55yv'hMMMMMMMMM>j55uXvDoBWTP*)T){{{{{{{{{{{{{", "{{{{{{{{{{{{{{{PBIP)EB*ooDDvvx'95555555555uuvvDB*BTT)*BPPP{{{{{{{{{{{{{{", "{{{{{{{{{{{{{{{{{Ta)T)llFrooDo'TDvv>''vvvvDDDoITlTPTqPPa{{{{{{{{{{{{{{{{", "{{{{{{{{{{{{{{{{{{aPPPE>lllFrro''T'TBrr'hoohrFlI'PBP)BP{{{{{{{{{{{{{{{{{", "{{{{{{{{{{{{{{{{{{{{aPI*E>>lllBTB))*IF*FFFlllBBBE*PTa{{{{{{{{{{{{{{{{{{{", "{{{{{{{{{{{{{{{{{{{{{{PaPPTEE>E*PT)>*lllZZ>>EE*IBaP{{{{{{{{{{{{{{{{{{{{{", "{{{{{{{{{{{{{{{{{{{{{{{{PPaBII*PBBPPBEEEE**IIBBPP{{{{{{{{{{{{{{{{{{{{{{{", "{{{{{{{{{{{{{{{{{{{{{{{{{{{PPaaPaTPaTIIBBBBaPP{{{{{{{{{{{{{{{{{{{{{{{{{{", "{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{aaaaaPPPPaP{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{", "{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{", "{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{" }; xscreensaver-5.36/hacks/images/bubbles/blue2.xpm000644 000767 000024 00000002536 10374534001 021654 0ustar00jwzstaff000000 000000 /* XPM */ static char *blue2[] = { /* width height ncolors chars_per_pixel */ "12 12 71 1", /* colors */ " c #000000", ". c #323252", "X c #303050", "o c #0F0F1F", "O c #1B1B2E", "+ c #17172A", "@ c #1F1F35", "# c #181824", "$ c #25253E", "% c #10101C", "& c #20202F", "* c #0E0E1A", "= c #292945", "- c #141423", "; c #242436", ": c #2D2D4C", "> c #333355", ", c #313153", "< c #0D0D15", "1 c #24243C", "2 c #262641", "3 c #232334", "4 c #3C3C5D", "5 c #19192A", "6 c #303051", "7 c #111122", "8 c #1F1F33", "9 c #08080F", "0 c #212138", "q c #12121F", "w c #0E0E1B", "e c #1E1E2E", "r c #2B2B48", "t c #2F2F4F", "y c #1C1C2F", "u c #18182B", "i c #353558", "p c #15151E", "a c #1C1C32", "s c #26263F", "d c #13131F", "f c #0F0F1B", "g c #2A2A46", "h c #131322", "j c #2E2E4D", "k c #0F0F1E", "l c #343456", "z c #151527", "x c #1F1F34", "c c #0C0C14", "v c #494967", "b c #23233B", "n c #FFFFFF", "m c #0C0C17", "M c #141422", "N c #2D2D4B", "B c #0E0E1C", "V c #161627", "C c #333354", "Z c #141425", "A c #1E1E32", "S c #1C1C30", "D c #0B0B12", "F c #18182C", "G c #090910", "H c #222239", "J c #0F0F19", "K c #1B1B28", "L c #262640", "P c #151522", "I c None", /* pixels */ "IIIIO1wKAIII", "II9bgNjN-ba2&0I", "I5uo;Fil,Ns5", "If8ezCn47:ZS", "ImLSaZv+3ewy", "IhbH:@6X:=Vm", "IcA$kegr=q5D", "IIM#*sVsbxmI", "IIGPp%xApqGI", "IIIIJDcdJIII", "IIIIIIIIIIII" }; xscreensaver-5.36/hacks/images/bubbles/blue3.xpm000644 000767 000024 00000003116 10374534002 021651 0ustar00jwzstaff000000 000000 /* XPM */ static char *blue3[] = { /* width height ncolors chars_per_pixel */ "14 14 83 1", /* colors */ " c #000000", ". c #2A2A47", "X c #282845", "o c #111121", "O c #2E2E4E", "+ c #1B1B2E", "@ c #0A0A10", "# c #17172A", "$ c #101019", "% c #181824", "& c #21213A", "* c #10101C", "= c #20202F", "- c #0C0C18", "; c #161628", ": c #07070F", "> c #24243C", ", c #0B0B16", "< c #282843", "1 c #11111F", "2 c #0F0F1D", "3 c #1B1B2C", "4 c #19192A", "5 c #151526", "6 c #303051", "7 c #111122", "8 c #19192D", "9 c #23233A", "0 c #212138", "q c #0E0E18", "w c #0A0A14", "e c #272741", "r c #23233D", "t c #202030", "y c #1E1E2E", "u c #2B2B48", "i c #181828", "p c #28283B", "a c #2F2F4F", "s c #2D2D4D", "d c #1C1C2F", "f c #18182B", "g c #353558", "h c #15151E", "j c #191925", "k c #24243D", "l c #13131F", "z c #11111D", "x c #0D0D19", "c c #262642", "v c #151524", "b c #2E2E4D", "n c #343456", "m c #06060B", "M c #0C0C14", "N c #494967", "B c #23233B", "V c #FFFFFF", "C c #0C0C17", "Z c #292944", "A c #0A0A15", "S c #2D2D4B", "D c #0E0E1C", "F c #1A1A2B", "G c #373758", "H c #181829", "J c #161627", "K c #141425", "L c #313152", "P c #121223", "I c #1E1E32", "U c #1C1C30", "Y c #18182C", "T c #222239", "R c #11111B", "E c #1E1E35", "W c #0F0F19", "Q c #0D0D17", "! c #0B0B15", "~ c #1B1B28", "^ c #262640", "/ c #2C2C49", "( c None", /* pixels */ "(((((vTx-I((((", "(((CDZ5E=Z>5((", "((4k.bKLobY2M(", "((jZJYXnLPb=z(", "(i>U#3KNg7a#>i", "(12uasNVNptY2Q", "(h>oyc4NGLb=%;", "(i0e/O&L6o/ei$", "(l+;<8y^Sr<>w!", "((l,fe<;A$(", "((WHIUxB9~qRW(", "(((mv1xqdF:@((", "(((((qQ*zq((((", "((((((((((((((" }; xscreensaver-5.36/hacks/images/bubbles/blue4.xpm000644 000767 000024 00000003614 10374534002 021655 0ustar00jwzstaff000000 000000 /* XPM */ static char *blue4[] = { /* width height ncolors chars_per_pixel */ "20 20 89 1", /* colors */ " c #000000", ". c #282845", "X c #303050", "o c #111121", "O c #2E2E4E", "+ c #1D1D30", "@ c #17172A", "# c #212137", "$ c #2F2F48", "% c #101019", "& c #181824", "* c #25253E", "= c #10101C", "- c #1A1A29", "; c #2F2F4E", ": c #2D2D4C", "> c #1A1A2C", ", c #161628", "< c #333355", "1 c #07070C", "2 c #141426", "3 c #313153", "4 c #0D0D15", "5 c #090911", "6 c #22223A", "7 c #13131E", "8 c #0D0D18", "9 c #1D1D2B", "0 c #0B0B16", "q c #282843", "w c #1D1D2E", "e c #131324", "r c #040408", "t c #111122", "y c #1F1F33", "u c #08080F", "i c #161620", "p c #0A0A14", "a c #272741", "s c #25253F", "d c #0E0E1B", "f c #2B2B48", "g c #0C0C19", "h c #292946", "j c #2F2F4F", "k c #101020", "l c #1C1C2F", "z c #1A1A2D", "x c #2A2A40", "c c #18182B", "v c #09090F", "b c #15151E", "n c #1C1C32", "m c #191925", "M c #24243D", "N c #13131F", "B c #1F1F2E", "V c #2A2A46", "C c #171726", "Z c #151524", "A c #131322", "S c #0F0F1E", "D c #38385A", "F c #343456", "G c #1F1F34", "H c #1B1B30", "J c #0C0C14", "K c #DDDDEB", "L c #494967", "P c #23233B", "I c #0C0C17", "U c #292944", "Y c #161624", "T c #141422", "R c #2D2D4B", "E c #181829", "W c #161627", "Q c #0B0B12", "! c #18182C", "~ c #222239", "^ c #202037", "/ c #11111B", "( c #1E1E35", ") c #0D0D17", "_ c #0B0B15", "` c #262640", "' c #696985", "] c #2C2C49", "[ c None", /* pixels */ "[[[[[[[=_iyWlT[[[[[[", "[[[[[JimsoPasGp/[[[[", "[[[[=&8hfMRffh9i-[[[", "[[[E8cVRjn;Wj]`9m=[[", "[[N=nd:X3q<^fnAB*mN[", "[[>8q,kW<2FeFeXR9M0u", "[Nbn9:j:lLK'F@X:czGT", "[Y0nVHX^z'K'DjHRd,8%", "[)_M@l;,<$LLe3;wUmT5", "[T=Pae:kG;W3oj:w9do4", "[vI#*GfnOkzjOSfU*gi/", "[rC0kA-nqRSR]6a9~0C1", "[[N57P&aUVtVBas@G/N[", "[[uZN&lm*gW`*M~G>Qr[", "[[[)ZA+WiIN~iI+_J1[[", "[[[[JACTlNE+>>%_4[[[", "[[[[[uQNZ8QJZN5r[[[[", "[[[[[[[1QJ5)v1[[[[[[", "[[[[[[[[[[[[[[[[[[[[" }; xscreensaver-5.36/hacks/images/bubbles/blue5.xpm000644 000767 000024 00000004152 10374534003 021655 0ustar00jwzstaff000000 000000 /* XPM */ static char *blue5[] = { /* width height ncolors chars_per_pixel */ "24 24 91 1", /* colors */ " c #000000", ". c #2A2A47", "X c #303050", "o c #2E2E4E", "O c #1F1F32", "+ c #1D1D30", "@ c #08080E", "# c #25253B", "$ c #1F1F35", "% c #25253E", "& c #20202F", "* c #0E0E1A", "= c #0C0C18", "- c #292945", "; c #161625", ": c #121221", "> c #2F2F4E", ", c #2D2D4C", "< c #1A1A2C", "1 c #333355", "2 c #07070C", "3 c #090911", "4 c #0B0B16", "5 c #282843", "6 c #262641", "7 c #11111F", "8 c #2C2C4A", "9 c #BABAC8", "0 c #19192A", "q c #151526", "w c #323253", "e c #040408", "r c #0C0C13", "t c #08080F", "y c #212138", "u c #1C1C29", "i c #0A0A14", "p c #272741", "a c #25253F", "s c #12121F", "d c #0E0E1B", "f c #1E1E2E", "g c #181828", "h c #2F2F4F", "j c #101020", "k c #1C1C2F", "l c #18182B", "z c #161629", "x c #333356", "c c #07070D", "v c #1E1E34", "b c #0F0F18", "n c #1C1C32", "m c #24243D", "M c #22223B", "N c #11111D", "B c #0D0D19", "V c #2A2A46", "C c #2E2E4D", "Z c #0F0F1E", "A c #38385A", "S c #06060B", "D c #0A0A12", "F c #494967", "G c #10101B", "H c #0C0C17", "J c #292944", "K c #161624", "L c #141422", "P c #242435", "I c #2D2D4B", "U c #0E0E1C", "Y c #1A1A2B", "T c #161627", "R c #141425", "E c #313152", "W c #121223", "Q c #1C1C30", "! c #1A1A2E", "~ c #0B0B12", "^ c #090910", "/ c #15151F", "( c #222239", ") c #202037", "_ c #0F0F19", "` c #0D0D17", "' c #262640", "] c #151522", "[ c #0F0F1C", "{ c #2C2C49", "} c None", /* pixels */ "}}}}}}}}}c4kQkYL}}}}}}}}", "}}}}}}}s!smBd*uTO0}}}}}}", "}}}}}t+BN5LqOm-5%*+s}}}}", "}}}}t0MRV{ICCzI{LpMi`}}}", "}}}`ddN.I>>.P!a>RZpB+N}}", "}}}Yy'UIhEw:18nE6)&'y<}}", "}}]iB5!n::qlxR$jXPXf,{-pT$H_", "}D;iy=uV5ICm5CCIZVp%4z;D", "}}r[O4%pZMf{V{.&-lsK0Y~}", "}}`LLl(lZ5JujLJZqL+]:;^}", "}}}NLlKy*%'(T''%My$/HS}}", "}}}@S;L+RB(ZRM(yg/L__e}}", "}}}}^S]0/sG$$$OG/0sc^}}}", "}}}}}2SD;g3<<<0gbtr2}}}}", "}}}}}}}S_s~crLsD_t}}}}}}", "}}}}}}}}}2e^^~^2}}}}}}}}", "}}}}}}}}}}}}}}}}}}}}}}}}" }; xscreensaver-5.36/hacks/images/bubbles/blue6.xpm000644 000767 000024 00000004706 10374534003 021663 0ustar00jwzstaff000000 000000 /* XPM */ static char *blue6[] = { /* width height ncolors chars_per_pixel */ "30 30 91 1", /* colors */ " c #000000", ". c #2A2A47", "X c #131323", "o c #303050", "O c #2E2E4E", "+ c #1B1B2E", "@ c #19192C", "# c #101019", "$ c #181824", "% c #25253E", "& c #12121E", "* c #10101C", "= c #292945", "- c #141423", "; c #2F2F4E", ": c #10101F", "> c #2D2D4C", ", c #333355", "< c #202035", "1 c #1A1A2F", "2 c #24243C", "3 c #22223A", "4 c #2E2E49", "5 c #0D0D18", "6 c #0B0B16", "7 c #282843", "8 c #11111F", "9 c #0F0F1D", "0 c #19192A", "q c #151526", "w c #323253", "e c #040408", "r c #111122", "t c #08080F", "y c #161620", "u c #14141E", "i c #212138", "p c #10101D", "a c #0E0E1B", "s c #2B2B48", "d c #181828", "f c #161626", "g c #2F2F4F", "h c #0B0B11", "j c #18182B", "k c #161629", "l c #333356", "z c #07070D", "x c #202036", "c c #1E1E34", "v c #1C1C32", "b c #26263F", "n c #24243D", "m c #1F1F2E", "M c #0D0D19", "N c #2A2A46", "B c #262642", "V c #252537", "C c #131322", "Z c #2E2E4D", "A c #363658", "S c #151527", "D c #06060B", "F c #0C0C14", "G c #DDDDEB", "H c #0A0A12", "J c #080810", "K c #23233B", "L c #0C0C17", "P c #1C1C2A", "I c #292944", "U c #0A0A15", "Y c #121220", "T c #141425", "R c #313152", "E c #1E1E32", "W c #1C1C30", "Q c #28283F", "! c #222239", "~ c #202037", "^ c #11111B", "/ c #0F0F19", "( c #0D0D17", ") c #090913", "_ c #262640", "` c #696985", "' c #151522", "] c #424262", "[ c #212131", "{ c #2C2C49", "} c None", /* pixels */ "}}}}}}}}}}}}Du00-5&}}}}}}}}}}}", "}}}}}}}}}z@8yi!+8L6WUp}}}}}}}}", "}}}}}}}}@y!2%K:KPB%k!Uq}}}}}}}", "}}}}}}6)xp!7N9sC~[N7_>ZZK>>s-m%@HF}}}}", "}}}}&*M$7.{Zgjg;S:gZ9_Y%$5&}}}", "}}}}^0$9.{ZoRW~,BWR[{[KB+x@}}}", "}}}tWd8={Zo[,roTl,,j[iq=T!Cf}}", "}}F@6Y78%:c>,7~lV@,kXg>sKnxUh}", "}}'UpjI{vrVkl7AAQQljRoZPIb!C'}", "}}f6'8a[[SS,@cw]]AljwoOijpK$f}", "}h0u0PP9OgrS+A`G`]A,joOrj+KcHh", "}#fLCmNj[o0qkAGGG`A,~rZmW9-$^#", "}^ucKb+n>VRcv4`GG]c1oj[{[aY$0(", "}^06K_jTd;vT,@]]`AXRV;>fIaK-LD", "}##6!%7aVZ:o3Q;EA,vogZ{.mn!Wdh", "}DfTy2BWq>CVYTOsRRos=BMi^#(", "}D'Ly!%SPs>VOOj1ggOZ[s=P%q6yzz", "}}&dLixa7=W9>>ZsZ>!v:=7bK6605}", "}}/f6ECCb79XY{{N{{s0=W!2i0+f/}", "}}e&5+&P2$M7I=[ra=mmC%8Ecad&z}", "}}}5))WUiLpb_BmaKBmmnKiYW)'5}}", "}}}}*505@xaK2njM%n2K!xYp0tD}}}", "}}}}tt-)aW66ypf&!!yxcW*/F^z}}}", "}}}}}JFzf@udEacccEE/u@-&zJ}}}}", "}}}}}}D/zU*0F#++++@0htHhz}}}}}", "}}}}}}}}Jh&--6-H#f--the}}}}}}}", "}}}}}}}}}et(/H65p^/(HD}}}}}}}}", "}}}}}}}}}}}}zeettzz}}}}}}}}}}}", "}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}" }; xscreensaver-5.36/hacks/images/bubbles/blue7.xpm000644 000767 000024 00000005514 10374534003 021662 0ustar00jwzstaff000000 000000 /* XPM */ static char *blue7[] = { /* width height ncolors chars_per_pixel */ "36 36 89 1", /* colors */ " c #000000", ". c #2A2A47", "X c #151525", "o c #2E2E4E", "O c #0F0F1F", "+ c #1D1D30", "@ c #17172A", "# c #1B1B31", "$ c #181824", "% c #25253E", "& c #21213A", "* c #0E0E1A", "= c #1C1C2B", "- c #292945", "; c #1A1A29", ": c #121221", "> c #2D2D4C", ", c #161628", "< c #26263B", "1 c #333355", "2 c #05050A", "3 c #282840", "4 c #090911", "5 c #151520", "6 c #2E2E49", "7 c #0D0D18", "8 c #282843", "9 c #262641", "0 c #252536", "q c #0F0F1D", "w c #2C2C4A", "e c #1D1D2E", "r c #19192A", "t c #323253", "y c #131324", "u c #303051", "i c #111122", "p c #08080F", "a c #212138", "s c #0E0E18", "d c #0A0A14", "f c #25253F", "g c #23233D", "h c #12121F", "j c #2B2B48", "k c #181828", "l c #141424", "z c #2F2F4F", "x c #1C1C2F", "c c #1A1A2D", "v c #0B0B11", "b c #18182B", "n c #07070D", "m c #202036", "M c #0D0D16", "N c #11111D", "B c #2A2A46", "V c #262642", "C c #171726", "Z c #131322", "A c #111120", "S c #2E2E4D", "D c #38385A", "F c #343456", "G c #151527", "H c #212136", "J c #1F1F34", "K c #DDDDEB", "L c #0A0A12", "P c #494967", "I c #23233B", "U c #10101B", "Y c #0C0C17", "T c #292944", "R c #161624", "E c #2D2D4B", "W c #0E0E1C", "Q c #1A1A2B", "! c #030307", "~ c #1E1E32", "^ c #1E1E35", "/ c #0F0F19", "( c #0B0B15", ") c #262640", "_ c #696985", "` c #151522", "' c #212131", "] c #2C2C49", "[ c None", /* pixels */ "[[[[[[[[[[[[[[[[4sCR([[[[[[[[[[[[[[[", "[[[[[[[[[[[[hkx`$m7Y*lx4Z[[[[[[[[[[[", "[[[[[[[[[[L=x5&gq**AI;Ja~dp[[[[[[[[[", "[[[[[[[[[Q~*`g9;*qIlX89&Ih~k[[[[[[[[", "[[[[[[[77Ua*'8B'O]b@.jB89*aJ=Z[[[[[[", "[[[[[[p`~I::BjwESSSX@Ewjlq`I(*M[[[[[", "[[[[[h=mI*Z.]>ScAGcl#&S=yJC);5Yh[[[[", "[[[[[r+NeA.wSzubiEt.iju%^yb8%*Jr[[[[", "[[[[4da,HW]Szuttoy10G#tj9Xr'9;adM[[[", "[[[LcCJ7-fEz^,10^,FF111VXzEj-IIJYh[[", "[[[C((78=9yI0y1G#^F00x0y^zSwA=%aCC[[", "[[4rc:b8jO&A0#1b0FFFFF<,tuzEa8)&xr([", "[[ZUZ+7,8>b@,cZWIJhZ[", "[[nd~IJ-B>zgibF9BP__PDF3itz>:A~gm5R[", "[[sUa@J-TezuGyF1_KKK_DF9@l*axp[", "[MC+a,=-jyTu'.B~_KKK_DFbI9c>IGAxarsM", "[sCxmg)9A@-uti0c_KKK_DyizAaEj)i7mxCL", "[4/YmI)IAx3z#A1l0PP_D@bt0HSe88*I(x4n", "[2/:q&%'A:8SA:tyFE)8u.t^,ttuj%o>w3Tex&~csv", "[[pZr$Iff&jw>,zJlguuuuzi>wj-'f,=+Yn[", "[[U4*h&g,lBj'^S0eb#zzSSl]jB8)$7NxZh[", "[[2XsXm(I;8--IXE>'>>>Er#,A89%I7xc(/[", "[[p(k7~:x%)'OW#e]wBw]jje-cchbarxkv![", "[[[/XqlJaI%Z:8-BB=WOBBi=9)aq:J=rXL[[", "[[[2hUr+da$r7)98AqXq88xArgIax+Y4hL[[", "[[[[spZcd$m7*g%)el,;))%gI&mJYcYhn[[[", "[[[[[/nCC*~(:;II$YmggII&5mddcC(n[[[[", "[[[[[p2ZhCx+$:x=7$$&a$md~+Z(p(U![[[[", "[[[[[[4vp`kQ5,+U(JJJJ~QC5Qqhns4[[[[[", "[[[[[[[!shppLRck/xxxxUcrkXY2nn[[[[[[", "[[[[[[[[[!phZXC4Ck4kkCCMh2(2[[[[[[[[", "[[[[[[[[[[!(/UhvLp(sZhh4/2![[[[[[[[[", "[[[[[[[[[[[[2!(sL24//s(Ln[[[[[[[[[[[", "[[[[[[[[[[[[[[[[!!2n![[[[[[[[[[[[[[[", "[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[" }; xscreensaver-5.36/hacks/images/bubbles/blue8.xpm000644 000767 000024 00000007012 10374534004 021657 0ustar00jwzstaff000000 000000 /* XPM */ static char *blue8[] = { /* width height ncolors chars_per_pixel */ "44 44 91 1", /* colors */ " c #000000", ". c #303050", "X c #1D1D30", "o c #17172A", "O c #08080E", "+ c #25253B", "@ c #0E0E17", "# c #1B1B31", "$ c #25253E", "% c #10101C", "& c #2B2B47", "* c #0C0C18", "= c #1C1C2B", "- c #292945", "; c #242436", ": c #2D2D4C", "> c #5C5C7A", ", c #161628", "< c #07070C", "1 c #05050A", "2 c #151520", "3 c #22223A", "4 c #2E2E49", "5 c #282843", "6 c #262641", "7 c #0F0F1D", "8 c #2C2C4A", "9 c #BABAC8", "0 c #19192A", "q c #151526", "w c #131324", "e c #111122", "r c #212138", "t c #272741", "y c #25253F", "u c #161623", "i c #23233D", "p c #12121F", "a c #10101D", "s c #202030", "d c #0E0E1B", "f c #2B2B48", "g c #181828", "h c #121222", "j c #2F2F4F", "k c #101020", "l c #1C1C2F", "z c #353558", "x c #333356", "c c #202036", "v c #090912", "b c #24243D", "n c #40405F", "m c #0F0F1B", "M c #1F1F2E", "N c #0D0D19", "B c #2A2A46", "V c #282844", "C c #262642", "Z c #171726", "A c #111120", "S c #2E2E4D", "D c #0F0F1E", "F c #1D1D2F", "G c #1F1F34", "H c #0C0C14", "J c #1E1E2C", "K c #0C0C17", "L c #0A0A15", "P c #0E0E1C", "I c #2B2B49", "U c #1A1A2B", "Y c #333354", "T c #313152", "R c #222236", "E c #1E1E32", "W c #1A1A2E", "Q c #18182C", "! c #28283F", "~ c #090910", "^ c #222239", "/ c #202037", "( c #11111B", ") c #1E1E35", "_ c #0F0F19", "` c #0D0D17", "' c #1B1B28", "] c #090913", "[ c #171724", "{ c #11111E", "} c None", /* pixels */ "}}}}}}}}}}}}}}}}}}}}}}H}}}}}}}}}}}}}}}}}}}}}", "}}}}}}}}}}}}}}}}Hppl[XXXXLUNu}}}}}}}}}}}}}}}", "}}}}}}}}}}}}}}g(qmcr^**7*Nl[XL%}}}}}}}}}}}}}", "}}}}}}}}}}}}glKr'3$W,hP3y$$N*ra{g}}}}}}}}}}}", "}}}}}}}}}}{UEo'7Zt5hdhrPhA5tdb^*E(u}}}}}}}}}", "}}}}}}}}},qNK*#t5-BqgBPD0MB-5th{^GKZ}}}}}}}}", "}}}}}}}}OKN^Qb5-&f8:::SMw08f&-lJ$^K]Z}}}}}}}", "}}}}}}}Zl%l7NWsf8:S:oQReVfS:eqPP7$q,2O}}}}}}", "}}}}}}u=L,$D-B8:SjjjV:#.okRjShkDJt$QGp_}}}}}", "}}}}}@U2Z=NPB8:Sj.wWeQT-6Cs.!h6fq56QrEU<}}}}", "}}}}}g0c{'=P8:Sj.TT+/!xFyq6Tqf;3hs5yocL{}}}}", "}}}}2U2m{'-b:SjWFTYeS#8xxxYTw/SSsf-bP^[K2}}}", "}}}}%LdG$5JADee6.xx3QsxxoE-,/h.j:8BPy32]@}}}", "}}}pU7dkh-seqysqwx!I&zz!zq+,ho.jS8r5tbr@pp}}", "}}}O]LWQb-fwieeVwx3xzzzz;zxxqRT.s:r-Z$^ZWH}}", "}}~ZLG[W7kh:Mkk6+xiqX4nnnzzx8;T.j:Wt)h3c*Z`}", "}}p0L[,,5gk:j3/o!xV3z>>>>nzx-fT.j:6-=/3c(Kp}", "}}@0l=UJ5qhUj!+e5xX4>999>nnx;oU.j:3q7#7rXLh}", "}}v0EEkP5Bs)j.T3#x^n>9999>nxxe30;:,ehd{rE_2}", "}}%2KrFassMq=.TRfxYn>999>>nxoQ)B;:o3lW7rl(v}", "}}uUEr3'=bhWy-.qox,!n>99>n;,Qek#k:fBdG'r0h@}", "}n>nnY;T.;j:Ms-=r3mhHm<", "}}m20W^$t3#qBSWQFTf;!!!nzx/0T.jS:8B5'W^cL@2}", "}}@g]K^b65Q78:kq;.k!+BqxYT;W8jS:8f-5[)^Gdg<}", "}}OZuKr3$t=6y8::Q.keWqTTT..l5S:8fB5t$*rEv_<}", "}}%q0LF^b6P/sf8B,j,ohh;..jjjoM8fB-J6WX{XNN%}", "}}~2@KKr3pWq-BfftSS;=krjjSSSs#qB-56$*hqlvO@}", "}} c #333355", ", c #07070C", "< c #242439", "1 c #282840", "2 c #22223A", "3 c #0F0F1A", "4 c #0B0B16", "5 c #282843", "6 c #090914", "7 c #262641", "8 c #11111F", "9 c #0F0F1D", "0 c #2C2C4A", "q c #19192A", "w c #040408", "e c #1F1F33", "r c #08080F", "t c #1C1C29", "y c #25253F", "u c #23233D", "i c #10101D", "p c #202030", "a c #2B2B48", "s c #292946", "d c #181828", "f c #313151", "g c #2F2F4F", "h c #1C1C2F", "j c #1A1A2D", "k c #18182B", "l c #09090F", "z c #161629", "x c #07070D", "c c #202036", "v c #0D0D16", "b c #0B0B14", "n c #090912", "m c #11111D", "M c #2A2A46", "N c #171726", "B c #151524", "V c #131322", "C c #2E2E4D", "Z c #38385A", "A c #343456", "S c #151527", "D c #212136", "F c #DDDDEB", "G c #0A0A12", "H c #494967", "J c #10101B", "K c #0E0E19", "L c #292944", "P c #141422", "I c #242435", "U c #121220", "Y c #2D2D4B", "T c #1A1A2B", "R c #161627", "E c #141425", "W c #313152", "Q c #121223", "! c #1E1E32", "~ c #0B0B12", "^ c #090910", "/ c #15151F", "( c #222239", ") c #202037", "_ c #1E1E35", "` c #0D0D17", "' c #262640", "] c #696985", "[ c #151522", "{ c #11111E", "} c #2C2C49", "| c None", /* pixels */ "||||||||||||||||||||||||||||||||||||||||||||||||||", "|||||||||||||||||||xVU;[Jhhh9qnP||||||||||||||||||", "||||||||||||||||PdUU!ecDD4.h4.4@3=P|||||||||||||||", "||||||||||||||PJh4/K(2uU==.uu[UKc!{JG|||||||||||||", "||||||||||||vdh/c(%&yuR9$2ct7'yE8(c6hKJ|||||||||||", "|||||||||||4;@4o=8i75BuoppE(&L57'&uh{@z[||||||||||", "||||||||||366Dj.k7LsMTSd}k}o*aMsL7S*tD=KR|||||||||", "|||||||||rhh82Vc5sMa0YY-CCC+EY0aMsyi&2=.SN||||||||", "||||||||RhRSu..2Va0YC@jEokXEySV7Eo7t(_hr,||||", "|||||~//c!+59p0CgXIWWIEE)k<>>hWW5kIpI*M59_(`T[||||", "||||Jn6hVotLU0-p;sS<>QS2EAAA>>>W57gO-0ML+.(34d~|||", "||||[;==oR5qMSook$Ek>SE_AAASoz>oo_XgCYaU2'uD46[|||", "|||3B6;=E9LM7k20<@5:>k@AAAIAh:I5ESWXO-}_@7u(e6Nv||", "|||Uq64!kksa0oMoSg5>AQEAZZZ:}AAjjpWXYC2Qs*&2cqqU||", "|||Uq6K2Voy5YRCokk:>jSj##HHZ:AA>QESe#H]]]ZZA>@WWXgCoU9t+u(!nN~|", "||JN4/[oi5*pQCggjo$>hf#]]F]]]ZA>A:H]FFFF]HZ>zSoosCY7Ey.9h`UJr|", "||xdhe(@i*V*yk$XWWo>&!]]FFFF]HAkyM$oUC0V7kSo%Ui{G|", "||bdhe(u2*hojo5VXko>7uHH]]F]H#u$_oS2V-0as.zueKPnx|", "||xdq4D2DPkokkDgX$oW>$pZHH]HZIQWWXIgCY*uL.h2DPUnn|", "||x3n=D2&799kS-C$okWWS:Dg1ZZAIoIWXgC-0aM57S2D44Nr|", "||{Nn6e(u'5h_5YC2oEXs5:k}kA>>W5EXgOCY}Ms*V@(cR[N,|", "||JNnV4(2&7*jV}YCs)Xg2IM0qWWWWXo2OCY}ap57&((e`T`~|", "||3[.44%2u'io9a0YRSgIzooEXXIXXggECY0aM'5'z=c!8/x3|", "||vP`=Vc(u&.h8Ma0M$CO0aoajXgggOC7Q0aMs5t&9e;@/r{v|", "||G{Ni4=DhVkt5sMakjY-CCOojgOCC-Yq97Ms57'uodR6Tr{G|", "|||i[{nSc%_(U75sM9u(pY--o0---Y0o$jS*57'&2(hkJd^i||", "|||vUNGG!cjkk'75S9k7M*00IEI00}aSU*L.u9%m(c.mTNx~||", "|||wJ[K4KekU2&'7oo9PDMaa'9paaMM*s55tV=k=D{9;d[Jx||", "||||`UNV4@{;(2P%9U55LsMM*o$pMsp5ep'yic9=e/nqNUG|||", "||||xr^nKh@4D(=9.d'775po5j7N55N$V_Uu@({e@qnbPi^|||", "|||||v{[4q/q/c(US%&y''7i..877''y&u2((cKBh`Nrmw||||", "|||||wK`i3T49ecD422uu&&(Ei;y&&uu22(Dce=iT=rbw,||||", "||||||^3`Pd6n6!qiqU%228U(huu222((%ce6q4Tdbr~,|||||", "|||||||~~rB3n3q@!==_/%.S%U((((/c=/!@dn{nbU3w||||||", "||||||||~3riP/T;h@ize/4eccccc_e!hhh;Ti4b,3~|||||||", "|||||||||,v{iNNqT/q;@6q!!!!!!@@Gh4{qGbUr^~||||||||", "||||||||||wKwUGmnNd;;;6hhqhhhh6;qdNKnx3w,|||||||||", "|||||||||||xbxxxPNNNd=qqTTTqqqdNNm`xxlwr||||||||||", "||||||||||||w,v~mUP[BNGPrGN~RNB[PGK^xw,|||||||||||", "||||||||||||||wwv3im{xrrinPPUU{mi3vx,|||||||||||||", "||||||||||||||||,wwv`xGww~ii3^`v~l,|||||||||||||||", "|||||||||||||||||||,,w,www~~G^w,||||||||||||||||||", "||||||||||||||||||||||||||||||||||||||||||||||||||", "||||||||||||||||||||||||||||||||||||||||||||||||||" }; xscreensaver-5.36/hacks/images/bubbles/glass1.xpm000644 000767 000024 00000002244 10374534004 022034 0ustar00jwzstaff000000 000000 /* XPM */ static char *glass1[] = { /* width height ncolors chars_per_pixel */ "10 10 62 1", /* colors */ " c #000000", ". c #27274E", "X c #29293F", "o c #2C2C63", "O c #353579", "+ c #242447", "@ c #222245", "# c #25253E", "$ c #1C1C3F", "% c #2B2B47", "& c #252544", "* c #222251", "= c #323264", "- c #212146", "; c #37374B", ": c #22223D", "> c #252536", ", c #232337", "< c #34346C", "1 c #303068", "2 c #26264A", "3 c #5D5D97", "4 c #363674", "5 c #2C2C6A", "6 c #2E2E5B", "7 c #242451", "8 c #343464", "9 c #3C3C6F", "0 c #353572", "q c #38386B", "w c #242454", "e c #181831", "r c #28285B", "t c #37377A", "y c #20203F", "u c #26265C", "i c #4C4C60", "p c #383874", "a c #333379", "s c #444458", "d c #272756", "f c #32326E", "g c #30306C", "h c #40407F", "j c #292944", "k c #212150", "l c #323271", "z c #2D2D76", "x c #21213F", "c c #25255A", "v c #35356D", "b c #313169", "n c #2C2C6E", "m c #18182C", "M c #232344", "N c #292961", "B c #202037", "V c #1C1C33", "C c #242452", "Z c #45456F", "A c #242455", "S c None", /* pixels */ "SSSiZZZsSS", "SS;8v39=;S", "S%6q5lp<6,", "SxrfOt4go2", "S$bunzaNrM", "SeAc5hg1d-", "Smykw0r*@V", "SSB7C.k+:S", "SSS>j&X#SS", "SSSSSSSSSS" }; xscreensaver-5.36/hacks/images/bubbles/glass10.xpm000644 000767 000024 00000012237 10374534005 022120 0ustar00jwzstaff000000 000000 /* XPM */ static char *glass10[] = { /* width height ncolors chars_per_pixel */ "60 60 88 1", /* colors */ " c #000000", ". c #41416E", "X c #1F1F46", "o c #2C2C63", "O c #404066", "+ c #28285F", "@ c #212137", "# c #2E2E68", "$ c #25253E", "% c #2C2C3E", "& c #24244A", "* c #4A4A62", "= c #35357F", "- c #252558", "; c #26264F", ": c #404083", "> c #22224B", ", c #2D2D63", "< c #2B2B61", "1 c #21212C", "2 c #343463", "3 c #2F2F68", "4 c #2D2D66", "5 c #30305F", "6 c #31316D", "7 c #4C4C6D", "8 c #2A2A45", "9 c #2D2D69", "0 c #3E3E73", "q c #22223D", "w c #2A2A5C", "e c #28285A", "r c #333372", "t c #212149", "y c #171728", "u c #2C2C4D", "i c #34346C", "p c #32326A", "a c #303068", "s c #242445", "d c #2A2A62", "f c #2D2D5B", "g c #292957", "h c #232351", "j c #26264A", "k c #B3B3D1", "l c #282838", "z c #2D2D5E", "x c #3A3A78", "c c #343472", "v c #252556", "b c #30306E", "n c #27275B", "m c #1B1B38", "M c #35356C", "N c #58588B", "B c #262653", "V c #282841", "C c #1D1D40", "Z c #13131F", "A c #242454", "S c #1B1B2A", "D c #2B2B68", "F c #4C4C85", "G c #2D2D6D", "H c #20203F", "J c #1E1E3D", "K c #333376", "L c #505064", "P c #3636B1", "I c #383874", "U c #272756", "Y c #191931", "T c #353553", "R c #2A2A66", "E c #2A2A52", "W c #3E3E55", "Q c #464674", "! c #292933", "~ c #3A3A68", "^ c #22224D", "/ c #1C1C33", "( c #242452", ") c #222250", "_ c #484868", "` c #212145", "' c #353573", "] c None", /* pixels */ "]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]", "]]]]]]]]]]]]]]]]]]]]]]]]LLLLLLLLLLLLL]]]]]]]]]]]]]]]]]]]]]]]", "]]]]]]]]]]]]]]]]]]]]]*L**L777LLL7LL7*LLL]]]]]]]]]]]]]]]]]]]]", "]]]]]]]]]]]]]]]]]]**L_777_77L77777777__L7*L]]]]]]]]]]]]]]]]]", "]]]]]]]]]]]]]]]]W***7777_777_7777Q777_77_***W]]]]]]]]]]]]]]]", "]]]]]]]]]]]]]]]****_W_O7QQQ_Q.Q7.7.OQ.Q_7_WO*W]]]]]]]]]]]]]]", "]]]]]]]]]]]]]*W_OW_____QQ.O_QF...QQ~..Q_.OOOOWWW]]]]]]]]]]]]", "]]]]]]]]]]]]WW*W~OW~.__.Q...~..._0.N..~.O2OOOO*WT]]]]]]]]]]]", "]]]]]]]]]]]TTWTT~W~.O~~..OFF.0~Fk00.~..~~O~O~~WWWW]]]]]]]]]]", "]]]]]]]]]]WWOW5~T~~~~O~~0iFN~NNFFFO~.2200~~2TWWWWTW]]]]]]]]]", "]]]]]]]]]TTWWT~~5~~2~2~00NNNNN0N##Q~00222~225W~WTW%%]]]]]]]]", "]]]]]]]]WTWWTTTT522~~~M2MiNN0NNN~Nki0I~M2p22~555TTT%T]]]]]]]", "]]]]]]]%TTTTuff5f220paapiMkNQNN0~I:MiiMpr2p,Ef255TuuTT]]]]]]", "]]]]]]]8TTTuf522ff~i2aipp9F~NNxNN0~FFxp2o5f25fz25uu8TT]]]]]]", "]]]]]]%8qTEuf55B2fp5,ipopbIFMkNkNFIx:i9Mi,4ap5gfff5E%V!]]]]]", "]]]]]!l8$T$Ef5ff22ii6pIiM0kF0N6bNFxrMp3+i,MpppEffEEEq8%%]]]]", "]]]]]!uVu&E52f2,ffpi4apipcN:F:r:FNFc'xMr'3paM4vffjEEVu8T]]]]", "]]]]1u8suu;Ef555aM~3<'6'9bxbFcrNNNxKI:66'#iipzfwff;uqu@@1]]]", "]]]]1@qsuj;g5U,-z5a3b'6cGKx'FK'NFFFrb:x64#iMp5fpfB`&usqqS]]]", "]]]]18;mH&>ff^e43ip6#39'xNK==PrKKNQIcxx'oo'i+25p5E&j&j$@S]]]", "]]]11Ysjjs&;gUg,#93prGr9rxxr==PK=xk'rx'b93o#i<5z55g;$8H/S1]]", "]]]@/Yq>E^f;awoM'b'Ir9GRGPrrPKKxP=:'rGrr4r#pppU,U5BvE`YyYy]]", "]]]1@@8;EUff,2w'II3b9bcbxrr=P:N=PPKxrr=Gop6Mapze-;5;^EmyZ/]]", "]]S1y&H(uXgUew34ii6'#''=Kr6==rx=KPP''rr6do6'MaznogfgX`jH@1Z]", "]]Z@@8`Hff5Bnn4a3o3I'x'P=+bP=xxP9PP:=rr'9Ro6M#z(<2f2&`ss/ZZ]", "]]1yY&s`wfUpdAw#DAp99'brcxP=PPKPG==xxxxxG+66o33pdAzgCE`mYyy]", "]]Y@Y`sHEfg2-wd3pdM6brbr'=9RPPP==K9''xcI'or'6op,g^mmHYZ]", "]]ZymC&;&>ww^gev4d+64#9r'=:GPK=PKr:9bRo33463-+Awz>U;;&HYyZZ]", "]]ZyJm`J&^get),e-n446roRrKKrP==xN=9'bG9#owd4,o-#5A^^&E`@YZZ]", "]]ZyYJH&st>`)n>AUvn-4o66D9r:kKP:Kx=oF6+4o44a4eww)U^B>`C`HY@Z]", "]]]/yyH`mv^UA^w<)--p4oKx#'r4=:xQNk9Gx+++44o64(ehB>XHsYmy]]", "]]]ZyyJ&s;;g&;ap<--+-66'oob6I4x6r3NI:9ooo4e43dw-(;>t`tm/yZ]]", "]]]ZZymJs&wfC;e<4+dw-+966x3663#QxI9'r6no44vvUe)(X`Jm/mmYyy]]", "]]]]yyYJJJm(C;vtet)Avn46ox4d6#k#F#4#`gBe^(e+A+pw,#ooMo+kNw'+xM4+nA))ewBtC`m@@YyS]]]", "]]]]Syyy@CHsHCev^>)+4e@Y/1S]]]", "]]]]]Sy/@HYJ;`XU(hv-XUe>wveA)4v+-(--++-vAU-A-(ht>((g^Xtq;m/1y1]]]]", "]]]]]]1yYYHmCJqt((^&^UawvvAAwAEeewn-(w(>>;(AftsHt$$mYY1]]]]]", "]]]]]]]S1Y@qJX$X`tth&hv)(^-v-wEh-A(4<;A-jt;(Xt$qmmJml1]]]]]]", "]]]]]]]1l@/mCJVss`^->;h&&>ev^hewe-(;v;(h&&sJss$JmmJ@S1]]]]]]", "]]]]]]]]1@@@@HXX&t(X(veA(^&;(;;(Ah^()(h&^tstHlV!q@/l1]]]]]]]", "]]]]]]]]]l@@m/J@`XVt&^A(w^j^h;&^>jj>>>>&t`>&X$$@q@l1]]]]]]]]", "]]]]]]]]]]l1!qHs$s8j>&(^&&&(^(A(U>&jjjuu&ts`H@q1@@1]]]]]]]]]", "]]]]]]]]]]]1@@lV$$%ss&ts&uuuu8&tju88V(st`$sV@V@!l!]]]]]]]]]]", "]]]]]]]]]]]]11l@l$8j&V8sjj88^&jj^s8s8Vst`$$$qlll1]]]]]]]]]]]", "]]]]]]]]]]]]]1!/qVqVH8VsV$&t&u888>tVsHV&V8ll$ll1]]]]]]]]]]]]", "]]]]]]]]]]]]]]]!11lVqVV888VjV8s88s88Vl$Vq%$ll!]]]]]]]]]]]]]]", "]]]]]]]]]]]]]]]]!1!ll$$8VVVVs88Vjss$VVlll%l!!]]]]]]]]]]]]]]]", "]]]]]]]]]]]]]]]]]]11l$%l%V$%$%%Vll%%VVl!l!1]]]]]]]]]]]]]]]]]", "]]]]]]]]]]]]]]]]]]]]]!l%%V!llllV!!l!l!!!]]]]]]]]]]]]]]]]]]]]", "]]]]]]]]]]]]]]]]]]]]]]]]!!!!l!ll!!!!!]]]]]]]]]]]]]]]]]]]]]]]", "]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]", "]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]" }; xscreensaver-5.36/hacks/images/bubbles/glass11.xpm000644 000767 000024 00000015377 10374534005 022131 0ustar00jwzstaff000000 000000 /* XPM */ static char *glass11[] = { /* width height ncolors chars_per_pixel */ "72 72 88 1", /* colors */ " c #000000", ". c #54548E", "X c #4A4A6D", "o c #25254C", "O c #323266", "+ c #3B3B68", "@ c #23234D", "# c #29293F", "$ c #242444", "% c #3E3E78", "& c #2C2C63", "* c #2A2A61", "= c #28285F", "- c #353579", "; c #2E2E3D", ": c #242447", "> c #25253E", ", c #363673", "< c #2B2B47", "1 c #30306D", "2 c #26264C", "3 c #29295C", "4 c #252558", "5 c #464675", "6 c #21212C", "7 c #262652", "8 c #343463", "9 c #2F2F68", "0 c #4A4A68", "q c #2D2D66", "w c #22223A", "e c #262655", "r c #282843", "t c #2A2A5C", "y c #28285A", "u c #2F2F6E", "i c #2D2D6C", "p c #23234B", "a c #171728", "s c #1F1F47", "d c #2C2C4D", "f c #32326A", "g c #2C2C64", "h c #2D2D5B", "j c #292957", "k c #232351", "l c #B3B3D1", "z c #222246", "x c #282838", "c c #252556", "v c #27275B", "b c #323273", "n c #1B1B38", "m c #35356C", "M c #33336D", "N c #242451", "B c #27274A", "V c #22224F", "C c #2E2E5E", "Z c #333384", "A c #1D1D40", "S c #13131F", "D c #353572", "F c #242454", "G c #1B1B2A", "H c #2E2E61", "J c #3D3D80", "K c #21214A", "L c #3F3F6E", "P c #20203F", "I c #3636B1", "U c #48485C", "Y c #191931", "T c #353553", "R c #2A2A66", "E c #1F1F3A", "W c #343473", "Q c #2A2A52", "! c #323271", "~ c #292933", "^ c #3C3C56", "/ c #313169", "( c #2B2B63", ") c #3D3D64", "_ c #1C1C33", "` c #2D2D68", "' c #1F1F43", "] c None", /* pixels */ "]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]", "]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]000000UU00U]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]", "]]]]]]]]]]]]]]]]]]]]]]]]]]]U00U00000000000000U]]]]]]]]]]]]]]]]]]]]]]]]]]", "]]]]]]]]]]]]]]]]]]]]]]]]UU00U00U000000U00000U0000]]]]]]]]]]]]]]]]]]]]]]]", "]]]]]]]]]]]]]]]]]]]]]]UUU00XXXXXX0XX00XXXXX0000U00U]]]]]]]]]]]]]]]]]]]]]", "]]]]]]]]]]]]]]]]]]]]0^00X00XX00XX0XX0XXX5X0X0XXX0U0U0]]]]]]]]]]]]]]]]]]]", "]]]]]]]]]]]]]]]]]]UUUUU0^0))X555XX5LLXXXX))XXLXXU0UU)UU]]]]]]]]]]]]]]]]]", "]]]]]]]]]]]]]]]]]UU0UU0)00)05LXLX5X5LLLLLLL5XL50L00UUU^^]]]]]]]]]]]]]]]]", "]]]]]]]]]]]]]]]U^)U)^))))))X.55L))L55XX5XLLLXmL0)+))))^^^T]]]]]]]]]]]]]]", "]]]]]]]]]]]]]]^UU^^^)^++L)))LL)L.L+m)LLL5555LLLL))C)++^U^^^]]]]]]]]]]]]]", "]]]]]]]]]]]]]^T^^^^+^++5)++)LL)5lLLLm5l.%LLmmL)mmL+))8+^^^U^]]]]]]]]]]]]", "]]]]]]]]]]]]^^^^^C+^+++++)+mLLm5lLL...5lL+mLLO+LL)++8C^^^^^T^]]]]]]]]]]]", "]]]]]]]]]]]TT^^^+^^C8++++8mmLm5l.lll%l.9.LmLL888/mmC+C^+^dT^;;]]]]]]]]]]", "]]]]]]]]]]TT^^^^+^^h888+mm8mOm%L.55...%fD.mmmmmm89O8++C^CTTT^~T]]]]]]]]]", "]]]]]]]]]T;TT^TCCCCCCC8mmmm8Ofml..L.l%mml.LmmmmLmmmOCC8CC+T^TdTT]]]]]]]]", "]]]]]]]]]T;TBTPdQhhjh8Omm91m/mDD%.l%%lM1.l%DMDfm=HmHmqfOOjQChCQQr#;<]]]]]]", "]]]]]]~<<#dzphOhCHhhhf9Dqq/m91%ll...1-,...D9L%/qm9ff/,qtjCh2Qdr>d66]]]]]", "]]]]]]#T#BdB7QC8O9HChmmmH/mm,1!Di`JW1.l..J1b5mfbm9M9qq*j4hh2QQ$Bdd>]]]]]", "]]]]]6;r>rQBoehhhCH/mmHqqDDb!ib-,..uD.l..-b!.,b1b9mf/fHH9HQjBB6]]]]", "]]]]]Sx>BBQB7NhhyHetCHm91m11!bb-1JWb-.JJl.,!%JDuqq9mD9Hhhfh7'$Q:B>E6]]]]", "]]]]Gw'2hjhhH*H9m,DDD,uRu1!u-b-IIJ.JZIZ-,W!i-uqm9bmOm9jHyhhe@:'nSSYG]]", "]]]aaYE<7oQNheh9&9mmDM1Dq,,!WD!1-IZ%J-II--%,-b!1(911,99Hj**eO@zp2PYSaG]]", "]]]SYEB$eBo@jjt4gqqmmM,D/D,WZ-u`-ZZb-ZiZII,-!!DM*q(bmm9HtqqhhhpzoBPESG]]", "]]]S_>r$2QChCe3v*999g`M,,,,bIb=ubIJ--IRIIIJJW!DWiR=19m9hy4fChHooB::aaY]]", "]]S6aa::ozhheHq4cv9`44991-!!!W-ZZII--IbbII-%----i=(!m*9qfy&jhh'7B'Aaa_S]", "]]a_Yn::zoQhjm**k(qM=q19u!ubb,ZbiZiIIIZbbi-D,-D%D*i-b/qf9H=NOhP7QzaE_aG]", "]]Sa_az'P2QhjHh4yf9/9,-11!ubWWZbiZIZZIIIIb---,D-,1iWMbqq((vHHOrBpBYnAa_]", "]]S6waP'2sQjjhyV*fq*ff!!u!!uuuibIIIRRZIZZZIIbb--D!i(1,qq/qFeoeB''$_naYS]", "]]SSw__'psQe&ej*y&g&M=R11!!iiRRZ-b-RRb=ZIIZZub-uu`==9,*FHCkjK7P''nazSaY]", "]]aaPw$AzNQ@Vy/&h(/f`v*!--1RRiu-ZbZibZI--IZ-IZZi*=*4qfgv9hFhCh@:zPYYSSS]", "]]SaPYYnANKKAhHk4//=*vR`-,1iubZbiiubZIIIZ-iZWZ!1Rg`=9`9f*=hHte7''PBP_SS]", "]]S_6_nn'@Ktehhsk*q=1(R1M1*iJWZbiZRIIIbZu=*R!-iu`W`M9=q&hjHhjK@QAn'AEaS]", "]]SaY_p$PQ2Nh&@7yey91((u`g`ub-IbIbbbIIbZZuR`J!q`1111=K4Fcytee7e@7na_EaS]", "]]SSaYno::2@hHA7hyF=v4&9R9RR-,Z-uZbbIIJ1ZZZ-u*q1q=(1(&(c*&jKN77'2PEESYS]", "]]SGYnAz:'7@eeKkFHy=4(99MD9*R1W.!ZIZ-WDi.`-b-R`q&==vq&&=q/hKkNoppPEYESS]", "]]]aSnAA:'z@@@Kc4KFe44qW,-biR11JZZ.JJiZZZ(u,i1!`9qv3tcq=4ttsNezoAn_aaa]]", "]]]Sa_a_n''A@eNkskeKFc*q(b!`iub.-Zl-lI.Zi9.u*(`R`qqq=y*=kNj@e7z'A'P_aS]]", "]]]SSYYnnAKsNeKk@thFF==Rq(qb11WJlIJ.Z...i1-I*=(=q/(99tNecNeoj@A'n:YASa]]", "]]]SS_aAoPAeKjhKeqHvcc44*11D,==.mq-9l...lR`bq/&=*q39M9vqeeeoeszQpA_Y_S]]", "]]]]SSYn'P2ojhozj/mq=y33Nq1WDq(1%9%qJ,!(%.Z!!9(qgq3y=*=jN4oeAzA'zY_aS]]]", "]]]]SaanYnBzjhKzeeyq4&==4y*11919J.D,9%D*m1bW1vv(q93Fecyk@s'sAnwnnYYSS]]]", "]]]]SaaE_PnAn@A'hkKtKNVccv=1Mq%q(J,,l1J.q(9q4Fv==&tVFF3NtsKPPP>wnYaaS]]]", "]]]]]SY_Y_nnEEzAsj7t@eNy3cc19y.fg.*(gv,,%3J=gf&*vv=kkVy4j@Kn'AExn_aa]]]]", "]]]]]SG_aYw'Ar'As*e@pKv(qvyH*Fm=3m=9%*%q3=(**9/9qF@VNkthe'zz'@EE__aS]]]]", "]]]]]]aGY_wnAPnPANNKVKk*q==(ykN444(,9yFc*4q*yvcq&vyyjNNjN$P'AKaYYG6]]]]]", "]]]]]]GY66nPYAp7zAjtkyc4=FNy3c=gcccf&Ft4v433cceFk4c@y@VeAsAzz'_E_a6]]]]]", "]]]]]]]66__AAnAz''FyKNFeh4F*=F=4eNHvyv4ccVec4ce@@z@KVjyp'zK#pnYEYE]]]]]]", "]]]]]]]a6YnYPnAAPPKNNN2@@7Hq4ccFkF4FQ433=v4NvFo@@2FKjjK::'wP>nnE_G]]]]]]", "]]]]]]]]a_6nn>nAP$sK'NKookeykkkc4N4cQ7yyc4H=jNe4BoNeeKK>>PnnnA6E6]]]]]]]", "]]]]]]]]]666_AAA>$:''@NyK2k@NN@4y4N444vFkOy37@c@2KpzAzz>EEnn>A6G]]]]]]]]", "]]]]]]]]]6x666_PP'':zzkk@NyNKNN@kNe7NFtyeN@N@KKoKK$zz$>x>xPE_w66]]]]]]]]", "]]]]]]]]]]66w6wEAPPpzzz'@ec4yek22kk7277N7VN@@N@@N':Kz'#>xwwxEx6]]]]]]]]]", "]]]]]]]]]]]6w6___PEKAprKppNN@e@Bo@@7KNk@>wEwx666]]]]]]]]]]", "]]]]]]]]]]]]xwExwA$>$>#@@K@@opoo@NNNFNeNooBBBBBBpz:$'PE>6wx66]]]]]]]]]]]", "]]]]]]]]]]]]]6Ew6#>>#r#$$op:p:BBBBBBpKoBB<$w#>x~~~]]]]]]]]]]]]", "]]]]]]]]]]]]]]~6~~E##$#r$r<>BpB<<:K2B@z:<w>#E~~6]]]]]]]]]]]]]", "]]]]]]]]]]]]]]]6~xw>>w#r:$rwrBB$p:2B<:>#>>#>xx~6]]]]]]]]]]]]]]", "]]]]]]]]]]]]]]]]];x6E#>#>#;r:##BzzoBr<r>xx#xxx]]]]]]]]]]]]]]]]", "]]]]]]]]]]]]]]]]]]~~_~x#>>#>rrrrBr##:rw;6~]]]]]]]]]]]]]]]]]", "]]]]]]]]]]]]]]]]]]]];~>~x>>#>#rxxwx#xx~]]]]]]]]]]]]]]]]]]]", "]]]]]]]]]]]]]]]]]]]]]]~~x>xx;###;xx;<#>#x#;###~~;;~]]]]]]]]]]]]]]]]]]]]]", "]]]]]]]]]]]]]]]]]]]]]]]]~6#~xxxxx#;~~~#xx;#;xx~~~]]]]]]]]]]]]]]]]]]]]]]]", "]]]]]]]]]]]]]]]]]]]]]]]]]]]6x;;;~xx#~~;~x~~T~~]]]]]]]]]]]]]]]]]]]]]]]]]]", "]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]~6;~~~~;~~~]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]", "]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]", "]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]" }; xscreensaver-5.36/hacks/images/bubbles/glass2.xpm000644 000767 000024 00000002652 10374534006 022042 0ustar00jwzstaff000000 000000 /* XPM */ static char *glass2[] = { /* width height ncolors chars_per_pixel */ "12 12 76 1", /* colors */ " c #000000", ". c #25254C", "X c #23234A", "o c #212148", "O c #2E2E62", "+ c #29293F", "@ c #272754", "# c #414188", "$ c #20202C", "% c #2E2E68", "& c #242447", "* c #25253E", "= c #B9B9ED", "- c #6767A3", "; c #2B2B47", ": c #29295C", "> c #252544", ", c #29295F", "< c #1F1F3E", "1 c #2F2F68", "2 c #2D2D66", "3 c #30305F", "4 c #4C4C6D", "5 c #2B2B53", "6 c #2F2F6E", "7 c #34346C", "8 c #3B3B55", "9 c #303068", "0 c #2C2C64", "q c #26264A", "w c #5D5D97", "e c #363674", "r c #3C3C66", "t c #252556", "y c #30306E", "u c #3E3E54", "i c #2C2C6A", "p c #4C4C68", "a c #20204A", "s c #2E2E5B", "d c #343464", "f c #16162C", "g c #292938", "h c #333384", "j c #3C3C6F", "k c #1E1E37", "l c #38386B", "z c #242454", "x c #31316E", "c c #181831", "v c #232349", "b c #272739", "n c #23234C", "m c #37377A", "M c #1E1E3D", "N c #313174", "B c #3C3C78", "V c #383874", "C c #1B1B33", "Z c #40407F", "A c #292944", "S c #212150", "D c #2D2D76", "F c #191937", "G c #313169", "H c #22224D", "J c #18182C", "K c #2D2D65", "L c #232344", "P c #292961", "I c #27275F", "U c #242452", "Y c #484868", "T c #262657", "R c #242455", "E c None", /* pixels */ "EEEE4pppYEEE", "EEurr7wlj8uE", "EE5@OywB733E", "E;nK%-NV0dvk", "EA39eIm#i%s&", "ELSGm6DhP03c", "EMnRVxZ612UC", "EfFatB=%,:n.zqXk$E", "EEEEb+;*bEEE", "EEEEEEEEEEEE" }; xscreensaver-5.36/hacks/images/bubbles/glass3.xpm000644 000767 000024 00000003307 10374534006 022041 0ustar00jwzstaff000000 000000 /* XPM */ static char *glass3[] = { /* width height ncolors chars_per_pixel */ "14 14 91 1", /* colors */ " c #000000", ". c #27274E", "X c #383858", "o c #2E2E62", "O c #292967", "+ c #3535A1", "@ c #272751", "# c #23234D", "$ c #29293F", "% c #353579", "& c #272754", "* c #20202C", "= c #2E2E3D", "- c #242447", "; c #25253E", ": c #3E3E67", "> c #1C1C3F", ", c #6767A3", "< c #2B2B47", "1 c #29295C", "2 c #2B2B61", "3 c #29295F", "4 c #1F1F3E", "5 c #2F2F68", "6 c #2D2D66", "7 c #222251", "8 c #2D2D69", "9 c #33335B", "0 c #37374B", "q c #22223D", "w c #28285A", "e c #2B2B53", "r c #2C2C36", "t c #424266", "y c #232337", "u c #525265", "i c #32326A", "p c #1B1B2F", "a c #303068", "s c #232351", "d c #363674", "f c #3C3C66", "g c #252556", "h c #27275B", "j c #363663", "k c #4C4C68", "l c #2E2E5B", "z c #29294C", "x c #27274A", "c c #252548", "v c #16162C", "b c #292938", "n c #353572", "m c #38386B", "M c #4C4C85", "N c #2F2F83", "B c #20203F", "V c #313174", "C c #333379", "Z c #444458", "A c #272756", "S c #47477C", "D c #32326E", "F c #1B1B33", "G c #30306C", "H c #40407F", "J c #23233E", "K c #141422", "L c #343473", "P c #2D2D76", "I c #2E2E6D", "U c #40406E", "Y c #21213F", "T c #8080BA", "R c #25255A", "E c #1B1B39", "W c #35356D", "Q c #262651", "! c #18182C", "~ c #373786", "^ c #2B2B63", "/ c #202037", "( c #1C1C33", ") c #242452", "_ c #484868", "` c #1F1F43", "' c #2C2C5D", "] c #3535DD", "[ c #262657", "{ c #242455", "} c None", /* pixels */ "}}}}}k_uk_}}}}", "}}}Z9:UUUft0}}", "}}=ejW,TSio9X}", "}}99liMDMDalx}", "}/&oOOC+Md5'.(", "}!lgR%C~]%n3.!", "}J.23LCP]VRoQE", "}F@{1DHNI835#p", "}K..36GiS^[A>v", "}}yYsmh23)wBp}", "}}*Y`))[Q74q*}", "}}}bYxzc<-;;}}", "}}}}}b$<;r}}}}", "}}}}}}}}}}}}}}" }; xscreensaver-5.36/hacks/images/bubbles/glass4.xpm000644 000767 000024 00000003653 10374534007 022047 0ustar00jwzstaff000000 000000 /* XPM */ static char *glass4[] = { /* width height ncolors chars_per_pixel */ "20 20 91 1", /* colors */ " c #000000", ". c #4A4A6D", "X c #25254C", "o c #23234A", "O c #252538", "+ c #1E1E3B", "@ c #2A2A61", "# c #353579", "$ c #272754", "% c #2E2E3D", "& c #21214E", "* c #2E2E68", "= c #242447", "- c #3E3E7B", "; c #222245", ": c #2B2B5B", "> c #1C1C3F", ", c #444459", "< c #9090C8", "1 c #292931", "2 c #26264F", "3 c #252544", "4 c #31317E", "5 c #21212C", "6 c #2F2F68", "7 c #30305F", "8 c #262655", "9 c #31316D", "0 c #1A1A32", "q c #252536", "w c #2B2B53", "e c #46467E", "r c #2F2F6E", "t c #2C2C36", "y c #212149", "u c #303068", "i c #232351", "p c #272741", "a c #44446E", "s c #353552", "d c #23233D", "f c #363674", "g c #12121F", "h c #3535BF", "j c #181828", "k c #2A2A68", "l c #29295D", "z c #27275B", "x c #58588B", "c c #22224C", "v c #2E2E5B", "b c #303074", "n c #29294C", "m c #242451", "M c #27274A", "N c #292938", "B c #282858", "V c #353572", "C c #1E1E37", "Z c #38386B", "A c #262656", "S c #242454", "D c #212147", "F c #36366C", "G c #2D2D6D", "H c #222241", "J c #313149", "K c #505064", "L c #4C4C60", "P c #2C2C65", "I c #1E1E40", "U c #383874", "Y c #32326E", "T c #1E1E2C", "R c #30306C", "E c #373780", "W c #323271", "Q c #2D2D62", "! c #3C3C6A", "~ c #35356D", "^ c #191937", "/ c #33336B", "( c #343462", ") c #2A2A41", "_ c #2B2B63", "` c #292961", "' c #202037", "] c #252549", "[ c #1F1F43", "{ c #2C2C5D", "} c None", /* pixels */ "}}}}}}}LL.KKLK}}}}}}", "}}}}},L.a.a.a.,,}}}}", "}}}}ss(!axZ-ZZ!(,}}}", "}}}sss(Z~XuuzfG4bb#G`Pz:;0", "}j]ccAl*fGEbr6Rl{2Ig", "}g0>S8zYG<-4R_u:AcDC", "}g^o>@@l9R*UW_8z[^^j", "}}j>I8&zSzVlz*i:;c0}", "}}50IycAASwlmcmyy+5}", "}}}''[m8m22i&X=Odq}}", "}}}}'p)Xononpy3)q}}}", "}}}}}tqp)M33))d1}}}}", "}}}}}}}t%NNtNt}}}}}}", "}}}}}}}}}}}}}}}}}}}}" }; xscreensaver-5.36/hacks/images/bubbles/glass5.xpm000644 000767 000024 00000004115 10374534007 022042 0ustar00jwzstaff000000 000000 /* XPM */ static char *glass5[] = { /* width height ncolors chars_per_pixel */ "24 24 89 1", /* colors */ " c #000000", ". c #27274E", "X c #2F2F6D", "o c #25254C", "O c #2E2E62", "+ c #2A2A33", "@ c #35354B", "# c #20203D", "$ c #24242D", "% c #272751", "& c #1E1E2A", "* c #2E2E68", "= c #242447", "- c #181824", "; c #25253E", ": c #424257", "> c #242436", ", c #202049", "< c #2F2F68", "1 c #4A4A68", "2 c #2D2D66", "3 c #30305F", "4 c #31316D", "5 c #4C4C6D", "6 c #2A2A45", "7 c #2C2C72", "8 c #2D2D69", "9 c #2B2B53", "0 c #333372", "q c #2F2F99", "w c #424266", "e c #26265B", "r c #34346C", "t c #32326A", "y c #1B1B2F", "u c #303068", "i c #21214C", "p c #2C2C64", "a c #282860", "s c #333364", "d c #17172E", "f c #B3B3D1", "g c #222246", "h c #5D5D97", "j c #2B2B5C", "k c #3A3A64", "l c #252556", "z c #1B1B35", "x c #30306E", "c c #2A2A68", "v c #3E3E6B", "b c #4F4F75", "n c #2B2B62", "m c #2E2E5B", "M c #323276", "N c #22224F", "B c #292938", "V c #333384", "C c #1D1D40", "Z c #13131F", "A c #282858", "S c #38386B", "D c #262656", "F c #242454", "G c #272739", "H c #1F1F45", "J c #28285B", "K c #23234C", "L c #37377A", "P c #3B3B56", "I c #46466E", "U c #4A4A5E", "Y c #3636B1", "T c #383874", "R c #242449", "E c #323271", "W c #3E3E80", "Q c #34345F", "! c #2A2A3E", "~ c #35356D", "^ c #313169", "/ c #22224D", "( c #18182C", ") c #2D2D65", "_ c #262654", "` c #242452", "' c #27274B", "] c #353573", "[ c None", /* pixels */ "[[[[[[[[[UU5555U[[[[[[[[", "[[[[[[[:5511151I1U[[[[[[", "[[[[[::wvIIwIIvSww:@[[[[", "[[[[P:kkkSrvhhSsvkPPP[[[", "[[[@@QQ3~srhfSvrSssk@@[[", "[[[69j_sO2xvhfTtr<3P3@[[", "[[;'%sOrO~E84hxr~unm9';[", "[[6=KA)t*EhVM]TWp]s^R'z[", "[-z.mn~]XxMqbYT820~Om=-&", "[-6%3eu8]MaYLqWE84*Dmo=y", "[(g.ADuTX0VVVYM]T]2nO'd-", "[-g`Np^eLcX77MVVaepj3=dZ", "[(R%j%Jn8Xq7qVcE44eJ_/d-", "[(#HKlFeT74VWVXx=;K/o`F`''Rgz>&[[[", "[[[[[&>#=#'=6/og;;>$[[[[", "[[[[[[[+G;!=6=;GGB[[[[[[", "[[[[[[[[[$!B++++[[[[[[[[", "[[[[[[[[[[[[[[[[[[[[[[[[" }; xscreensaver-5.36/hacks/images/bubbles/glass6.xpm000644 000767 000024 00000004707 10374534007 022052 0ustar00jwzstaff000000 000000 /* XPM */ static char *glass6[] = { /* width height ncolors chars_per_pixel */ "30 30 91 1", /* colors */ " c #000000", ". c #25254C", "X c #23234A", "o c #35354B", "O c #2A2A5E", "+ c #3A3A71", "@ c #24242D", "# c #3535A1", "$ c #1F1F49", "% c #404066", "& c #BFBFDC", "* c #2E2E7C", "= c #2E2E68", "- c #242447", "; c #2C2C66", ": c #181824", "> c #25253E", ", c #21213A", "< c #2A2A50", "1 c #4A4A62", "2 c #252558", "3 c #292948", "4 c #363679", "5 c #1F1F3E", "6 c #343463", "7 c #353585", "8 c #2C2C5B", "9 c #4C4C6D", "0 c #27274C", "q c #28285A", "w c #3F3F56", "e c #19192A", "r c #5D5D91", "t c #2F2FB0", "y c #34346C", "u c #525265", "i c #303068", "p c #2A2A62", "a c #232351", "s c #191930", "d c #34345B", "f c #2F2F60", "g c #3A3A78", "h c #2B2B5C", "j c #494980", "k c #343472", "l c #3A3A64", "z c #2C2C6A", "x c #27275B", "c c #1B1B38", "v c #35356C", "b c #2E2E5B", "n c #24243A", "m c #27275E", "M c #323276", "N c #31316B", "B c #4D4D62", "V c #282841", "C c #292938", "Z c #13131F", "A c #38386B", "S c #242454", "D c #31316E", "F c #2D2D6D", "G c #46466E", "H c #2C2C65", "J c #272756", "K c #30306C", "L c #40407F", "P c #292944", "I c #212150", "U c #2A2A3B", "Y c #202045", "T c #323271", "R c #2D2D62", "E c #40406E", "W c #292933", "Q c #21213F", "! c #1D1D3B", "~ c #2A2A55", "^ c #22224D", "/ c #424273", "( c #232344", ") c #262654", "_ c #1C1C33", "` c #1F1F2C", "' c #242452", "] c #1D1D41", "[ c #353573", "{ c #262657", "} c None", /* pixels */ "}}}}}}}}}}}}uuuuuuu}}}}}}}}}}}", "}}}}}}}}}BB999B999919u}}}}}}}}", "}}}}}}}}BBw%GGGGGGGG9w1}}}}}}}", "}}}}}}w1lwE1GElEGGGl%%%1o}}}}}", "}}}}}w%ddlll/jArj%E6+ldwww}}}}", "}}}}wwodd6Avvr+rA&+A66ldooo}}}", "}}}}oob68A6yNjrgrAjNRbfhd>bb6yD+v&/Drgv=yvie}", "}}_QY$.)'2{<{'pS0)$>!5n}}}", "}}}}@,,YX''q'.'0S^Ia^-QVQ_`}}}", "}}}}}CWQ>P^'X.^SJ..0X(5Qn`}}}}", "}}}}}}@nCP-P03^0^3P-Y>>n@}}}}}", "}}}}}}}}@nQVPVV(3PV>Q>C}}}}}}}", "}}}}}}}}}@nUU>>UCUVCC@}}}}}}}}", "}}}}}}}}}}}}WWCCWWC}}}}}}}}}}}", "}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}" }; xscreensaver-5.36/hacks/images/bubbles/glass7.xpm000644 000767 000024 00000005534 10374534010 022044 0ustar00jwzstaff000000 000000 /* XPM */ static char *glass7[] = { /* width height ncolors chars_per_pixel */ "36 36 90 1", /* colors */ " c #000000", ". c #27274E", "X c #2F2F6D", "o c #4A4A6D", "O c #2E2E62", "+ c #41416E", "@ c #3C3C73", "# c #2A2A5E", "$ c #313172", "% c #404066", "& c #28285F", "* c #353579", "= c #414188", "- c #28284B", "; c #2E2E68", ": c #2B2B47", "> c #2C2C3E", ", c #484860", "< c #29295C", "1 c #27275A", "2 c #282851", "3 c #3C3C54", "4 c #333355", "5 c #1F1F3E", "6 c #48487A", "7 c #2D2D66", "8 c #11111C", "9 c #262655", "0 c #282843", "q c #333372", "w c #2F2F99", "e c #212149", "r c #1F1F47", "t c #1A1A38", "y c #34346C", "u c #303068", "i c #242445", "p c #2C2C64", "a c #2D2D5B", "s c #292957", "d c #272755", "f c #26264A", "g c #333364", "h c #17172E", "j c #242448", "k c #B3B3D1", "l c #282838", "z c #2D2D5E", "x c #161623", "c c #1C1C40", "v c #252556", "b c #24244B", "n c #1A1A2A", "m c #252559", "M c #58588B", "N c #363663", "B c #22224C", "V c #2B2B62", "C c #33336D", "Z c #2E2E72", "A c #242451", "S c #333384", "D c #242454", "F c #2B2B68", "G c #2D2D6D", "H c #222244", "J c #3636B1", "K c #383874", "L c #1B1B33", "P c #2A2A66", "I c #23233E", "U c #1D1D38", "Y c #292933", "T c #3A3A68", "R c #262651", "E c #313169", "W c #4F4F62", "Q c #22224D", "! c #28283F", "~ c #292961", "^ c #252532", "/ c #2D2D51", "( c #1F1F2C", ") c #222250", "_ c #484868", "` c #3D3D7B", "' c #1F1F43", "] c #20203A", "[ c #353573", "{ c None", /* pixels */ "{{{{{{{{{{{{{{{{WWWWW{{{{{{{{{{{{{{{", "{{{{{{{{{{{{WWW_WW_W_W,WW{{{{{{{{{{{", "{{{{{{{{{{_Wo_o_oo_o+__o__W{{{{{{{{{", "{{{{{{{{{,,__%+ooo++++o++_,3{{{{{{{{", "{{{{{{{3,3%T+%+%MT%+6+++%4T333{{{{{{", "{{{{{{333TNNTT+yM@M6+T@N@TN3333{{{{{", "{{{{{333T3NgTgg`M6M`[yyTNgN4O433{{{{", "{{{{{>:/aNagu7gKMM``ETENXaOaN4/:{{{{", "{{{{>f//OdaEOEOX6TMMC`y7y;OOaaO0>{{{", "{{{Y:/jg4zau7Eu`kMXKM[@EyEE7sa20/^{{", "{{{>I/bazOyO7[$Z[M[k6$MqqyEOu/f:-I{{", "{{n:5'BaQ7uy;F*M*S$*kK*`pX7gEaj/:U^{", "{{^hjs2dsuFC$X~SXSSS=[$[V7EOgdd.5L!{", "{{x]R2azpy[X7[[$*S=J*`*$VXKus~gH.Lh{", "{{L0.OOj!Hb0:e:500l>^{{{{{{{{", "{{{{{{{{{{>IlI:!!i:00I0^llY{{{{{{{{{", "{{{{{{{{{{{{Y>lll>Y!l>^YY{{{{{{{{{{{", "{{{{{{{{{{{{{{{{^Y^>Y{{{{{{{{{{{{{{{", "{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{" }; xscreensaver-5.36/hacks/images/bubbles/glass8.xpm000644 000767 000024 00000006755 10374534010 022053 0ustar00jwzstaff000000 000000 /* XPM */ static char *glass8[] = { /* width height ncolors chars_per_pixel */ "44 44 89 1", /* colors */ " c #000000", ". c #25254C", "X c #323266", "o c #212148", "O c #2E2E62", "+ c #3A3A71", "@ c #23234D", "# c #242444", "$ c #2C2C63", "% c #2A2A61", "& c #404066", "* c #212137", "= c #26265D", "- c #1B1B31", "; c #1E1E2A", ": c #242447", "> c #181824", ", c #191932", "< c #252558", "1 c #404083", "2 c #464675", "3 c #363679", "4 c #1F1F3E", "5 c #343463", "6 c #2F2F68", "7 c #45456D", "8 c #2D2D66", "9 c #30305F", "0 c #3535B0", "q c #31316D", "w c #4C4C6D", "e c #2A2A45", "r c #2C2C72", "t c #222251", "y c #22223D", "u c #28285A", "i c #212132", "p c #333372", "a c #2F2F99", "s c #1A1A38", "d c #21214C", "f c #292957", "g c #2D2D5E", "h c #343472", "j c #2A2A68", "k c #27275B", "l c #35356C", "z c #2E2E5B", "x c #323276", "c c #262653", "v c #242451", "b c #31316B", "n c #4F4F64", "m c #292938", "M c #13131F", "N c #242454", "B c #1F1F45", "V c #22223E", "C c #4C4C85", "Z c #2A2A5D", "A c #A9A9BF", "S c #21214A", "D c #38385D", "F c #292941", "G c #17172C", "H c #272756", "J c #2A2A4F", "K c #212150", "L c #242449", "P c #2A2A3B", "I c #353553", "U c #2A2A52", "Y c #3E3E55", "T c #2E2E6D", "R c #40406E", "E c #292933", "W c #464660", "Q c #1D1D3B", "! c #3A3A68", "~ c #313169", "^ c #2D2D65", "/ c #3D3D78", "( c #2B2B63", ") c #27274B", "_ c #2D2D68", "` c #212145", "' c #1D1D41", "] c #353573", "[ c None", /* pixels */ "[[[[[[[[[[[[[[[[[[[[[[n[[[[[[[[[[[[[[[[[[[[[", "[[[[[[[[[[[[[[[[nnWnwnnnwnnnn[[[[[[[[[[[[[[[", "[[[[[[[[[[[[[[Wnwww7nwwwwww77nw[[[[[[[[[[[[[", "[[[[[[[[[[[[Wn7n777ww77ww777wwWWW[[[[[[[[[[[", "[[[[[[[[[[WW&7&w&77777R7777777&&&YW[[[[[[[[[", "[[[[[[[[[YWY!Y!7&RRRR&&7!72R&R!&!YWY[[[[[[[[", "[[[[[[[[Y&I!Y!&!!!+2C7R2AR+l!+!&!YYYY[[[[[[[", "[[[[[[[IYY!!9!!!!+/AAA/C8+++XX!X5Y&DYI[[[[[[", "[[[[[[PDY99999!!!X]AC/C++AlllblX959DDJI[[[[[", "[[[[[IIIJz95z52^65lCCAqC+lClX8999zzDJ9eP[[[[", "[[[[[eFJezgc9X9b~$q+/2CCA+1l6lO669f9zzFF[[[[", "[[[[Ee)#fz995b]6+O]ACC6hCCq+qO6b+6U9UJ4)I[[[", "[[[[IFJUU9z9O+~^]3qhj3qAA1T26p6b6ggzUJV)F[[[", "[[[>JLU)H9%Hz66qqpx31x]CCCp1+88lq9f9c:U:e;[[", "[[[*4y#BfzK66l~T_313x0xx3Cp33T$q%96OUH)UV*[[", "[[>-Q.fV@^Zlqq]_T%xxxx333Cppp_q6669f9ZU#,-;[", "[[M-ecUfz^Ol]qp_hppp33C1033xx(~6]~c%cfoc-M>[", "[[>*:.fUH=$6bq]+]aTp01xr003q]q%ql^9^zHB:`Q*[", "[[*GV:gf6=k6=%6]Tp31a0xxx0333]=p666ZHX')GG-[", "[[>G'4UUX[", "[M>*oBfKZ^Z~q[", "[[>-):.c%cZ<^=T__x1aTx10xpjT8qqq[", "[[M4##)vfK%u<$8q8jp1xxrqx_xp_8==O$=XKH.c-,>[", "[[>-V`B@cNtH@>so.Uz`glZu==q]%q]C3q%ATq($^Z^%cHco'`-G>[", "[[[M,s4`H'HKt=kO%+q^x6qA(j8==%6vu<@''Bys,>[[", "[[[>G-s**`@ccNu%k~<6+(68qZ=b^%=tKufosB*Q;>[[", "[[[[>-i'VVKv@d%%%uv=<6qZkk%Zub< c #343463", ", c #2F2F68", "< c #30305F", "1 c #22223A", "2 c #262655", "3 c #31316D", "4 c #2A2A45", "5 c #3E3E73", "6 c #28285A", "7 c #2B2B53", "8 c #333372", "9 c #27274F", "0 c #1F1F47", "q c #424266", "w c #2F2FB0", "e c #34346C", "r c #32326A", "t c #303068", "y c #242445", "u c #2D2D5B", "i c #292957", "p c #232351", "a c #191930", "s c #26264A", "d c #393956", "f c #242448", "g c #B3B3D1", "h c #202044", "j c #2D2D5E", "k c #3A3A78", "l c #1E1E42", "z c #30306E", "x c #24244B", "c c #27275B", "v c #1B1B38", "b c #35356C", "n c #58588B", "m c #2D2D64", "M c #292960", "N c #242451", "B c #282841", "V c #292938", "C c #38386B", "Z c #414156", "A c #242454", "S c #272739", "D c #4C4C85", "F c #23234C", "G c #21214A", "H c #22222D", "J c #313174", "K c #505064", "L c #17172C", "P c #222244", "I c #3636B1", "U c #383874", "Y c #1B1B33", "T c #212150", "R c #353553", "E c #2A2A66", "W c #23233E", "Q c #323271", "! c #464674", "~ c #2E2E6D", "^ c #292933", "/ c #1D1D3B", "( c #22224D", ") c #2B2B63", "_ c #343479", "` c #1D1D2A", "' c #353573", "] c #3B3B65", "[ c #262657", "{ c None", /* pixels */ "{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{", "{{{{{{{{{{{{{{{{{{{&KKKKKKKKKKKK{{{{{{{{{{{{{{{{{{", "{{{{{{{{{{{{{{{{K&K:K&::KKK:::K&&KK{{{{{{{{{{{{{{{", "{{{{{{{{{{{{{{&Z&:K:::::::::::K::::&K{{{{{{{{{{{{{", "{{{{{{{{{{{{Z&&&:qq:!!:!.!:!:q!]:::Z]Z&{{{{{{{{{{{", "{{{{{{{{{{{ZZ&Z:q:]!!.q.n..!.C..!:]qqqZ&{{{{{{{{{{", "{{{{{{{{{{ZZdd]]].q.!]n.C..5!...].q]]]ZZZ{{{{{{{{{", "{{{{{{{{{RZRd]Z]]]]C.Cn5!.5g.CC]b5C]]>C>]>C5C>begDDnDknC5UCrt>]]D@rrrkgnnD55r5r>CU>><7<mbr3bkn55QDg83brXe<3r><7<<,uutbm>r3-nnDQknnkekr3,emb6u>UUrQEQz'J_wkn_IJk8%J)e,btbi[iuF9vaL`{", "{{#YPWxf9i6Xrbb3'3'__J'*__*+w''Qb%m3'eX6)=jxhsf#`{", "{{##WPh>uiMXr@MmU'U+JEJw__++w-k_'z%M33m6jsff#o#{", "{{YYaol7i6NctXQ%3QQ~~~**JM~+IIJz__zM3Uc>i22fhoY;a{", "{{aWfo(9Tirm@rmcQkQM~JI+IJI**w_*_EMM),ct6juFPPY##{", "{{LYaaFG0jFTr=mM3_E~z+~+E_I*+EJ_zz@M,m3M=(N9GhW#Y{", "{{##LhPfFGpcp=2m'D8%%Q_-IQ~z!Qkz3mmcXc)=i06GFoaY#{", "{{##aaxh02A0ATccmm3%%'8J--'_)+3M%)@t)6jp2x2hhho`#{", "{{###Ph0G22Nm2AAM3,_m!DJnn3g3~Qe)M@X3XXN9f(hxW;##{", "{{{#Lvh9ijhirrM[=c,',m3%kD-@J*'3))m6cXiNN2flovaa{{", "{{{#LahPh20i(6TccXMz@@nn@3DbmD'2MMt2Acp2ovhB;a#`{{", "{{{`#`v/;;G02=Fp=X23=n@nmXMkMUMrXMc6TA[2(vh;1Y##{{", "{{{{`LL;oyo0X9FT)X==AD=C3'mMce6XX3[pN2jNPG(v`Y`{{{", "{{{{H`YWvoif0=pc66A=[tcAXMA2cMMANAc2cpNolG2vo`H{{{", "{{{{{HaY;/ohhiGNN6=mA=2pc[cC222[N(f(pi0hFBoY;;{{{{", "{{{{{#`YaWhofp((9(i[pA6A27[=6X6ip(9N=hfPov/aY#{{{{", "{{{{{{#HHvoofPhF[9pFNF6[p[62NN[9N9xfohWo;voHH{{{{{", "{{{{{{{^aS;/hGhNh[22NN9N99NAFpTN(x(f0PVSW1;H{{{{{{", "{{{{{{{{^HvYWho4GfN(2(9(N(p(4xFFsxPGhW1;;`^{{{{{{{", "{{{{{{{{{La1PBB$hfGxs9FFxNF(9ffFPfPfoWWS^`{{{{{{{{", "{{{{{{{{{{HVVBWyBsssFs4fsfFf44yfsF/y1BSSH{{{{{{{{{", "{{{{{{{{{{{HV1S;Bf4o4yGh944x(yyWWo$WS1^S{{{{{{{{{{", "{{{{{{{{{{{{HS`S$W4B44B44y44BBBWSW$WVH^{{{{{{{{{{{", "{{{{{{{{{{{{{{VVV1WB$4BB4$BWBWVSVSB1H{{{{{{{{{{{{{", "{{{{{{{{{{{{{{{{$^SVVWS$VVBB$$SS^^V{{{{{{{{{{{{{{{", "{{{{{{{{{{{{{{{{{{{^^$VVB^$VVVV^{{{{{{{{{{{{{{{{{{", "{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{", "{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{" }; xscreensaver-5.36/hacks/images/bubbles/jade1.xpm000644 000767 000024 00000002166 10374534011 021627 0ustar00jwzstaff000000 000000 /* XPM */ static char *jade1[] = { /* width height ncolors chars_per_pixel */ "10 10 59 1", /* colors */ " c #000000", ". c #69E169", "X c #35CB35", "o c #149914", "O c #179317", "+ c #158B15", "@ c #148914", "# c #148514", "$ c #0F890F", "% c #0D830D", "& c #0F730F", "* c #0F6F0F", "= c #0E6B0E", "- c #077307", "; c #0E630E", ": c #0B630B", "> c #026502", ", c #046104", "< c #0A550A", "1 c #0B530B", "2 c #065306", "3 c #054F05", "4 c #074B07", "5 c #064706", "6 c #003700", "7 c #042B04", "8 c #011901", "9 c #21B621", "0 c #1AAC1A", "q c #18A818", "w c #17A217", "e c #189E18", "r c #127C12", "t c #107C10", "y c #0F7A0F", "u c #0B800B", "i c #0E720E", "p c #0A760A", "a c #106A10", "s c #0F6A0F", "d c #0A6E0A", "f c #0B620B", "g c #0D580D", "h c #076007", "j c #045E04", "k c #015E01", "l c #015201", "z c #034803", "x c #044604", "c c #083E08", "v c #014601", "b c #044004", "n c #063606", "m c #052E05", "M c #013401", "N c #042404", "B c #002600", "V c #022002", "C c None", /* pixels */ "CCC4=#*4CC", "CCf#eopjsC", "Cm@$uu>khg", "C5yw-.90:6", "CaO,iXqx+5", "CMrtz3%l&1", "CV;*td&v6n", "CCcbx2<;8C", "CCC7BcmNCC", "CCCCCCCCCC" }; xscreensaver-5.36/hacks/images/bubbles/jade10.xpm000644 000767 000024 00000012313 10374534012 021703 0ustar00jwzstaff000000 000000 /* XPM */ static char *jade10[] = { /* width height ncolors chars_per_pixel */ "60 60 91 1", /* colors */ " c #000000", ". c #22B922", "X c #1CB11C", "o c #1AA71A", "O c #169F16", "+ c #159715", "@ c #179317", "# c #149114", "$ c #108B10", "% c #108710", "& c #138113", "* c #108110", "= c #127D12", "- c #137513", "; c #0F7B0F", ": c #0C790C", "> c #0F6F0F", ", c #0E690E", "< c #0A6F0A", "1 c #087108", "2 c #0F650F", "3 c #0E630E", "4 c #0B670B", "5 c #0B610B", "6 c #086508", "7 c #0D5B0D", "8 c #0B5D0B", "9 c #085F08", "0 c #095909", "q c #075B07", "w c #0A550A", "e c #025F02", "r c #055505", "t c #0A4B0A", "y c #094709", "u c #074907", "i c #034F03", "p c #084508", "a c #074107", "s c #014901", "d c #024302", "f c #063B06", "g c #013F01", "h c #053705", "j c #053305", "k c #013901", "l c #013301", "z c #022D02", "x c #022902", "c c #032703", "v c #022102", "b c #021B02", "n c #011701", "m c #001100", "M c #000B00", "N c #1FA81F", "B c #19AA19", "V c #18A418", "C c #189A18", "Z c #129412", "A c #148A14", "S c #148614", "D c #0C820C", "F c #117811", "G c #0B7C0B", "H c #117211", "J c #0E740E", "K c #0E720E", "L c #0A760A", "P c #0E6C0E", "I c #0F6A0F", "U c #086A08", "Y c #046A04", "T c #0D580D", "R c #036403", "E c #0A520A", "W c #0B4E0B", "Q c #025A02", "! c #065206", "~ c #084E08", "^ c #015401", "/ c #034C03", "( c #083E08", ") c #024602", "_ c #044004", "` c #053005", "' c #042404", "] c #002400", "[ c #011E01", "{ c #9AE59A", "} c None", /* pixels */ "}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}", "}}}}}}}}}}}}}}}}}}}}}}}}xtzWtfEhlyx]c}}}}}}}}}}}}}}}}}}}}}}}", "}}}}}}}}}}}}}}}}}}}}}`hfa7llzwgudtu_y7ah}}}}}}}}}}}}}}}}}}}}", "}}}}}}}}}}}}}}}}}}jxl_I3II>FF!l5P>g!u7Taalv}}}}}}}}}}}}}}}}}", "}}}}}}}}}}}}}}}}jlEu3lgdF,Hqq)_~))/&5w!Hklftj}}}}}}}}}}}}}}}", "}}}}}}}}}}}}}}}(T7u/Pg2/PS=;4sSli=)q>r)0_gu~lh}}}}}}}}}}}}}}", "}}}}}}}}}}}}}jfuugw8qq&4J;AJ>usius9ri44)//!PIwyz}}}}}}}}}}}}", "}}}}}}}}}}}}xz77g555qF;SAAC#AK^L9#PJqqSl22a_ax}}}}}}}}}}", "}}}}}}}}}}ff~0-_FS;@A*C*:CV%A4LL5KSJ:&6SOoA1OBL#JUegARLAAkkyx}}}}}}}}", "}}}}}}}}xyEI5~&dk``}}}}}}", "}}}}}}}xk705-&F0eH!57pc}}}}", "}}}}'l`Ew!/rA9R^k<$BLD+VDJr+iGDB.X%RRe+r*iegS#@S9HrFI3Thb}}}", "}}}}`l7d)>3s=6U&e$oDJLDXGYBO$B.X.Z+or.4qi@r<%L+%)R$BqZ....{{{NCJAVBBLeDLL###*r&F==5wEa]c}", "}}vxawI~5!qs@J^6^RRYZXVGKV.NAC..AACZB%GBL;)k/KS=K*<^gADCOD:+BVXYq&G+DYRYZXBAOGo&i^@SFJF!0wlhcn}", "}}n`zT~l855FJ@Sr^,=QGO$QLXX$1RYVXODQQCLV$%L^^56ASq&,323ly([}", "}}mvzW_w3H8P=&6ee~^Uo%GeQGDXRRLOBVYq$L)uIklh`][b}}}", "}}}}M[vp]kl_3H_5F&>AK4rr;<*AACi0-Hkztkyvh'M}}}", "}}}}}'zhzlluTul!HF4&Jq/_qH4rs~q<=/FP>/&qPS4J=FF4q5iKS5HI!>8,~I3wlzf[vn}}}}}", "}}}}}}}'cjyzh7EwuggHI,45=F>54F&44)i4JF7!54PI7IwTWzhxvn}}}}}}", "}}}}}}}Mcb`(jfT7wdI72w,0I40,&/5i,400>5~-2PwEw~pytph[vM}}}}}}", "}}}}}}}}Mb'j(hWT7E_klu7g)Ig/Pg!00/5iw!!25w3~TpElncvvn}}}}}}}", "}}}}}}}}}MbnchWEaw7T~_pEu0ddppt)d0!0HWIwT7apTtlxzccn}}}}}}}}", "}}}}}}}}}}Mc``fyfllfkhkd2EE2ku2tuI7)ku2Eklfpp(zz`'n}}}}}}}}}", "}}}}}}}}}}}Mbb[x(xytWk7l3EkawI3l~ukWw7Ttlfyy(cjj'm}}}}}}}}}}", "}}}}}}}}}}}}Mbb`xzxahlfTp_(Ek_lk7Wa`Tplhhfa(c[''M}}}}}}}}}}}", "}}}}}}}}}}}}}Mmn[cfjhthyaffh]kTWWWaah(xxxf(h[vbM}}}}}}}}}}}}", "}}}}}}}}}}}}}}}mmvz`fhh]]`(ytt((xyc````(fz''bm}}}}}}}}}}}}}}", "}}}}}}}}}}}}}}}}MMm'`j`xx`zhz]`zncbfc`x`cnbnM}}}}}}}}}}}}}}}", "}}}}}}}}}}}}}}}}}}MMnnnmmc']]vn[bvbvc`vvmMM}}}}}}}}}}}}}}}}}", "}}}}}}}}}}}}}}}}}}}}}Mmnnbnnnmnnvbv'vmmM}}}}}}}}}}}}}}}}}}}}", "}}}}}}}}}}}}}}}}}}}}}}}}MMMmmnnmmmMMM}}}}}}}}}}}}}}}}}}}}}}}", "}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}", "}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}" }; xscreensaver-5.36/hacks/images/bubbles/jade11.xpm000644 000767 000024 00000015472 10374534013 021716 0ustar00jwzstaff000000 000000 /* XPM */ static char *jade11[] = { /* width height ncolors chars_per_pixel */ "72 72 92 1", /* colors */ " c #000000", ". c #22B922", "X c #1AA71A", "o c #159F15", "O c #199719", "+ c #169916", "@ c #159515", "# c #159115", "$ c #129512", "% c #158715", "& c #148314", "* c #108910", "= c #118111", "- c #117D11", "; c #107910", ": c #0A7B0A", "> c #0E730E", ", c #0F6F0F", "< c #0A770A", "1 c #0E6B0E", "2 c #0A710A", "3 c #0E690E", "4 c #0F650F", "5 c #067106", "6 c #0E630E", "7 c #0B630B", "8 c #0B610B", "9 c #0D5B0D", "0 c #0B5D0B", "q c #085F08", "w c #046104", "e c #075B07", "r c #0B530B", "t c #025F02", "y c #075507", "u c #025B02", "i c #035503", "p c #054F05", "a c #074707", "s c #084508", "d c #024D02", "f c #074107", "g c #034703", "h c #014501", "j c #014101", "k c #053505", "l c #023902", "z c #042B04", "x c #012F01", "c c #022902", "v c #022702", "b c #022302", "n c #011F01", "m c #011901", "M c #000D00", "N c #1CB41C", "B c #1FA61F", "V c #19AA19", "C c #148A14", "Z c #108E10", "A c #108610", "S c #0C800C", "D c #107610", "F c #117211", "G c #106A10", "H c #0B6A0B", "J c #0C660C", "K c #076C07", "L c #086608", "P c #046804", "I c #0A5A0A", "U c #036403", "Y c #0B560B", "T c #0B4E0B", "R c #085008", "E c #025802", "W c #084C08", "Q c #074A07", "! c #025202", "~ c #014A01", "^ c #083E08", "/ c #044004", "( c #063C06", ") c #063806", "_ c #013E01", "` c #053005", "' c #013601", "] c #033203", "[ c #022C02", "{ c #011401", "} c #9AE59A", "| c None", /* pixels */ "||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||", "|||||||||||||||||||||||||||||||)^kfWfck(z)||||||||||||||||||||||||||||||", "|||||||||||||||||||||||||||^sT`')sfY9a/rsrsWkk||||||||||||||||||||||||||", "||||||||||||||||||||||||`x[]Q6rgG)a48,,4agY_v9rT`|||||||||||||||||||||||", "||||||||||||||||||||||[(lQ9466FFF,IYjg,,F/l_c6(c'x[|||||||||||||||||||||", "||||||||||||||||||||cWWa6vRphG39dJy;_lFpdy=,Q~Y/'4kTs|||||||||||||||||||", "||||||||||||||||||bs96Wa8gxgp1%&-&7Fd'!~/%e>>re0fgar9kz|||||||||||||||||", "|||||||||||||||||)rrgQ6Fe;dy7H-H>eC8g3epFJqDe7QIlQgGG9f`||||||||||||||||", "|||||||||||||||cfTl9v0I87e!eHC#AA>,,w!I/!C'Ce>C>&==F,G9fck||||||||||||||", "||||||||||||||z[r/GRe7ye-@@+C=@A@<--J0!ww,E-p=!>D8'9yh_Wrbk|||||||||||||", "|||||||||||||kW'sG3,7J-@2>C=P2@C=P>CwPh/@E22+l81!i/&[r__T/zv||||||||||||", "||||||||||||)W_YrF/>=>-@C=C@2<++#PJ=<EPUP!Ed08Qiqhhhd/9l)c|||||||||||", "|||||||||||^f'4r6Y&1%@-C=22o@X*:@XCte#e5E7E2PAAA2-8!8!/j_l9rT^||||||||||", "||||||||||zsfGYe9&7!~';=QPSXV#-dd22=HPVoNU8:@Z#V@X2E/'dxyeF,a^c)||||||||", "||||||||cs'94Jd8q~IE;#X+5+KS:SFiC3jFG4scv|||||||", "|||||||zvf9IFp0q2-!w#o+CUANNo*PXV5:@;=ie-D-FyG9rsn|||||", "||||||)(rY87JdJC>w>w+KZoo+Vo.Sd;oJoU@SoNo=d#y2++CC@yH,7Y99f^|||||", "|||||nk)9ape,h&JL!w&<#Not5:ZV5dP5CNZoV..$SU2UChHN;tCe<==>=~3yF,G9W^b||||", "|||||^f9gre33;C2LPH,SoNA5o@<:1uCJd~L>D17Gascn|||", "||||zWf68gYⅆ_ePXZ#SoVVo+Ze5*SZN@%%X..oK@$VZeUt7''J;=-8aG9f`|||", "|||bcxf4agY~l~q2we2Xo+oXNoS5@:oS.OOO.OO%=%5NNo;ag`zcm||", "|||z(Q/R_Q0ayH=;ow#5SXN$NNN:e5S;O.}}}}.O%9S.VVS:X>EdXEE_ww~3D>JIW]W)cb||", "|||`k9/W_fd,iC=@+2g;t5*5Z.VotPCB.}}}}}}.OB+o.NSPPoNt5P_1/I@!%eJIgs9szc||", "||mnWW6R~h7h!;@+CCEup,EPSVNApA...}}}}}}}..BN.V*N:P55A&y78p99x(v{|", "||nks9a9lj0h!e++@@@5Z.55$B.}}}}}}}}}OAoVZ5USS5*oZw++o@SUC$N.A,;F.BWPK$oV:ZN$Po;2qyH&D37gsrTkzb|", "||m`[f'/Q,;d=%HHww2@!C:XX$oP8:+XooP.PAHC@H5ZV@VNo$A#~uL#CA=>H1eYR_ls`kb|", "||{z)'fa_9ph8&&;H=;E@uUXXNZt:XV+VX<.0:Z5NUPS+VXNooZ2H7g!CC=>,,eI6alxkkm|", "||Mzc`9QgY7h,%>CC;HE~AES@@XS+oNVXZNhA<$$ZPPoPVVVZ+AD%>qww1EwwX:oU+U:St=PP<$NNZPeS*E;=/ee%D-DF,96Q(xnb||", "|||v^nff'/9F7-&%~%id1+!u,wXPElKwtE+EeUS@uJoS$Zwp22H_&W!=e&D;;7WWr9fv{n||", "|||mk^Tf(sWFF7;-,,8Wl'g3w=+SP+hXwwu+tp:SEA#PC#P_g>lp_~~!H->3FQ')asTcnm||", "|||Mbk)Wlv/6,eejRhWl'a!i=@oA<u<2!Lqd--~H,-1y,664TrxWzvM||", "||||vz`TT'WgFee;aR''Fiii-o+##oCSXX+2XCyH>@7#I/%P2=JeiH%%;ggg464'(Wsbn|||", "||||bz`'T]_'IG6jhh=,~J2q-++;wH2wZoXCC&-%78p(RTYYcx)n)zn|||", "||||mmzkTxrfQFy_GR/8&~>-C=@A>222#o+o+w_h7I;A2J=CH!HJ,eyfId'fl_Q9c^bzM|||", "|||||mbkssx_969~Gjdd!hJ-D&@+A=;@@+o+;2=rpq2LJ2#LeCdR!lrpFe4''c9lk`nm||||", "|||||{mn^xz_6/GhGYe3,8,%>LHH;C;A+@++;22iiw!3r!=-H!;_'hpFF3(lxl)sn)Mm||||", "||||||nb^snlx_QrlRI;-D&&17e_3wH;-=@C2CC=JL!1,eCC&8Fad08,,rg_9'ck`zm|||||", "||||||Mvk)))''r4Wxg3FF7&,e~,hiq2qH&=HL>>qJ~F/yD%-y,p7F4099R]xWxs)nm|||||", "|||||||bbz^(cr9Y69Yrg3F;Jed/heH%>DC@;eq>>ee!7>%7jQp-3rY6G4Ylz^`z{n||||||", "|||||||{mb`)ksQrWRl9QGI-,>y;he1&>J-;D-H7ee!,->elGpF7I4W996r[z`cm{M||||||", "||||||||mvkkWx[99QR_/v~,G8I07FDDH7>-%1,e%p7,>JadyFFFFG4499fczknbm|||||||", "|||||||||bzb^^c)996YRrWFF,F,,-,8,7ey7dy,ye87,pdF3G6IY49aQsf(^nb{||||||||", "|||||||||MbMz^cbf99r9l('/_rWdI3yphl-833738y0Ifp488GYlYQTW))kbzmM||||||||", "||||||||||Mnbc^cfrrsrYr/G_fs'0IWg,'jdpgFy7g40(F99rR6R9fTkvvmnb{|||||||||", "|||||||||||M{nc`kWTfsr9rr'R((90g_/f_(__rIR8G6YIY99_WfTT`cz``vm||||||||||", "||||||||||||Mmnk^)sf(x'/lW'/Q4rG(g_Q4x/r4Ygl/94RlxklTs^bzkzb{|||||||||||", "|||||||||||||{{zmzzc)cx'nlfx_4Wl)/9GG/lGRlbQ999ss'fWf^nkkzmM||||||||||||", "||||||||||||||Mbmzb`cmxx['sl9rs_c_TrfWf9r_9Q_sfWTTss^zvnbnM|||||||||||||", "|||||||||||||||Mmmzzbks(Wf^Wr'xWTxc`Ts99Tfx)x[xcck^^znzbmM||||||||||||||", "|||||||||||||||||M{mmb)k)fkk(TTf)c]Ws(sss(fcnvv`kk^bn{n{||||||||||||||||", "||||||||||||||||||MM{bkz`^`czcc(ss(s((xkv)`cvz)^)v{mm{M|||||||||||||||||", "||||||||||||||||||||MMmb`kzzcz`zkkvc```nmb)c`b`zz{{{M|||||||||||||||||||", "||||||||||||||||||||||Mmnmm{mzzvzcznbn)`bnvk`zmmMMM|||||||||||||||||||||", "||||||||||||||||||||||||MMmm{b{mmzmb{Mmm{mnvb{MMM|||||||||||||||||||||||", "|||||||||||||||||||||||||||MM{mMmm{mm{mmmm{{MM||||||||||||||||||||||||||", "|||||||||||||||||||||||||||||||MMMMMMMMMMM||||||||||||||||||||||||||||||", "||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||", "||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||" }; xscreensaver-5.36/hacks/images/bubbles/jade2.xpm000644 000767 000024 00000002670 10374534014 021633 0ustar00jwzstaff000000 000000 /* XPM */ static char *jade2[] = { /* width height ncolors chars_per_pixel */ "12 12 77 1", /* colors */ " c #000000", ". c #35CB35", "X c #1AA71A", "o c #158B15", "O c #148914", "+ c #158715", "@ c #137513", "# c #107710", "$ c #0F6D0F", "% c #0E6B0E", "& c #0E690E", "* c #0F650F", "= c #0E630E", "- c #0A5F0A", "; c #036703", ": c #0B570B", "> c #075D07", ", c #0A550A", "< c #0C4F0C", "1 c #0A510A", "2 c #045704", "3 c #065106", "4 c #074D07", "5 c #074B07", "6 c #094709", "7 c #063B06", "8 c #073907", "9 c #033D03", "0 c #033B03", "q c #053505", "w c #003D00", "e c #053105", "r c #003700", "t c #042904", "y c #012301", "u c #011501", "i c #1CB41C", "p c #17A217", "a c #189E18", "s c #189A18", "d c #119011", "f c #128A12", "g c #0F8C0F", "h c #148214", "j c #138013", "k c #0F7A0F", "l c #0B800B", "z c #0A7A0A", "x c #0A780A", "c c #0A760A", "v c #0B720B", "b c #0F6A0F", "n c #0A6A0A", "m c #056C05", "M c #056A05", "N c #076407", "B c #0D580D", "V c #0A5C0A", "C c #046404", "Z c #075A07", "A c #045E04", "S c #055605", "D c #035003", "F c #015201", "G c #B1FFB1", "H c #034803", "J c #044604", "K c #074007", "L c #083E08", "P c #024402", "I c #044004", "U c #013A01", "Y c #052E05", "T c #042C04", "R c #012A01", "E c #000A00", "W c None", /* pixels */ "WWWW=&9jrWWW", "WW8IosxC-PRW", "WW@FCp>Sx3$W", "WeJ5;livmaZK", "WI2HgfGsMw+B", "W,ZNdp.dcsh:", "W c #0E750E", ", c #0F730F", "< c #0F6F0F", "1 c #0F6D0F", "2 c #0E6B0E", "3 c #077307", "4 c #0E630E", "5 c #0B630B", "6 c #0A5F0A", "7 c #085B08", "8 c #0A550A", "9 c #0B530B", "0 c #0C4F0C", "q c #094F09", "w c #045704", "e c #0A4D0A", "r c #065306", "t c #0A4B0A", "y c #065106", "u c #015901", "i c #054F05", "p c #074B07", "a c #084908", "s c #084508", "d c #064706", "f c #074107", "g c #073907", "h c #033D03", "j c #053505", "k c #063306", "l c #042B04", "z c #042904", "x c #011D01", "c c #011901", "v c #21B621", "b c #1CB41C", "n c #FFFFFF", "m c #18A418", "M c #189A18", "N c #149C14", "B c #149014", "V c #0F8C0F", "C c #128612", "Z c #148214", "A c #138013", "S c #107C10", "D c #0A760A", "F c #0F6A0F", "G c #0A6A0A", "H c #0C660C", "J c #0A660A", "K c #0B620B", "L c #0C600C", "P c #056A05", "I c #066806", "U c #076407", "Y c #0D580D", "T c #076007", "R c #046404", "E c #0A5A0A", "W c #095409", "Q c #035003", "! c #034C03", "~ c #034803", "^ c #044604", "/ c #083E08", "( c #024402", ") c #053805", "_ c #023802", "` c #012E01", "' c #042604", "] c #022802", "[ c #042404", "{ c #022002", "} c #011E01", "| c None", /* pixels */ "|||||qGT#yLg|", "||xjhErHr48t'|", "|||[])f9_et[||", "|||||z'}kc||||", "||||||||||||||" }; xscreensaver-5.36/hacks/images/bubbles/jade4.xpm000644 000767 000024 00000003614 10374534015 021635 0ustar00jwzstaff000000 000000 /* XPM */ static char *jade4[] = { /* width height ncolors chars_per_pixel */ "20 20 89 1", /* colors */ " c #000000", ". c #1CB11C", "X c #1AA71A", "o c #179B17", "O c #179517", "+ c #149914", "@ c #158B15", "# c #158715", "$ c #138913", "% c #148514", "& c #108710", "* c #127D12", "= c #0D830D", "- c #127912", "; c #0F7B0F", ": c #107710", "> c #0F730F", ", c #0E730E", "< c #0F6F0F", "1 c #0F650F", "2 c #0E630E", "3 c #056B05", "4 c #086508", "5 c #0D590D", "6 c #046704", "7 c #0B570B", "8 c #085B08", "9 c #026302", "0 c #075907", "q c #074B07", "w c #094709", "e c #084508", "r c #064706", "t c #014F01", "y c #034903", "u c #014B01", "i c #024302", "p c #073907", "a c #B4F0B4", "s c #023D02", "d c #033903", "f c #003700", "g c #022B02", "h c #042504", "j c #011901", "k c #001100", "l c #010D01", "z c #2CC42C", "x c #21B621", "c c #1CB41C", "v c #22AA22", "b c #1AAC1A", "n c #18A818", "m c #17A217", "M c #189E18", "N c #149014", "B c #119011", "V c #108210", "C c #0B800B", "Z c #0B7C0B", "A c #117211", "S c #0B720B", "D c #0F6A0F", "F c #087408", "G c #0C6A0C", "H c #0A6C0A", "J c #067006", "K c #0B620B", "L c #0D5E0D", "P c #076007", "I c #0A540A", "U c #025E02", "Y c #055405", "T c #084E08", "R c #094A09", "E c #055005", "W c #015201", "Q c #074207", "! c #083E08", "~ c #014601", "^ c #063606", "/ c #052E05", "( c #013201", ") c #032803", "_ c #002400", "` c #022002", "' c #011C01", "] c #011601", "[ c None", /* pixels */ "[[[[[[[/Q(sRw^[[[[[[", "[[[[[!qiD;%*<8q^[[[[", "[[[[pDH,FVo,P>#1Q[[[", "[[[wKH%FM%+9FNU0Dp[[", "[[!L(WmZ.J8mH3XEqL_[", "[[/Y$W&=C+Cc9YUNP-5[", "[`L2S6ox$cmxZJBMt-5j", "[^r#;mmbFvz@xCbXKGf/", "[w5~N3%B&zaz=6FZu,2p", "[gDYO49c,vz@nbro@Arj", "[_Ty*H@o+.V=3bZt%-Ih", "['(A*W;6yUEJ=yWW>EI`", "[kQf8-:NHOSOHH;42I)k", "[[`d2K<4;@HP>#~0fd^[", "[[l^5dy<84:0,A c #0E670E", ", c #0E630E", "< c #056F05", "1 c #056B05", "2 c #0D5B0D", "3 c #0A5F0A", "4 c #046704", "5 c #0A550A", "6 c #0A530A", "7 c #0A4D0A", "8 c #0A4B0A", "9 c #055105", "0 c #015701", "q c #074107", "w c #014901", "e c #014501", "r c #073907", "t c #014101", "y c #033D03", "u c #053705", "i c #063306", "p c #053105", "a c #042904", "s c #011501", "d c #8DF08D", "f c #1CB41C", "g c #1AAC1A", "h c #17A217", "j c #189A18", "k c #159C15", "l c #199419", "z c #159615", "x c #148A14", "c c #128A12", "v c #148614", "b c #108610", "n c #0F760F", "m c #0F720F", "M c #0A6E0A", "N c #0B680B", "B c #0A660A", "V c #0B620B", "C c #0C600C", "Z c #0D5E0D", "A c #0D580D", "S c #0A5C0A", "D c #046404", "F c #075E07", "G c #046204", "H c #0A580A", "J c #075A07", "K c #0B500B", "L c #025C02", "P c #045604", "I c #074A07", "U c #054C05", "Y c #025002", "T c #074607", "R c #044604", "E c #073C07", "W c #044004", "Q c #013C01", "! c #033603", "~ c #003800", "^ c #052E05", "/ c #042C04", "( c #013001", ") c #022C02", "_ c #012A01", "` c #022602", "' c #012201", "] c #011E01", "[ c #011A01", "{ c #000E00", "} c #000A00", "| c None", /* pixels */ "|||||||||E^TA6Tu||||||||", "|||||||8,9>Ny9+w~7||||||", "|||||`!SVFonLW~n+$Zu||||", "||||r5Wmxoj4&mD03Fe2_|||", "|||aW>YM0j+#D&Q&XRvV_s||", "|||q$FYjDzhGFgPo&b9Q*p||", "||r5Nxn1kkUBofGb+Pjl*2E|", "||pZRoIX4o%fff;c1-jLJSq|", "|`qR!;;kfe3V9qCHIu'{||", "||||}uT(yWKR>5R2y!Eis|||", "|||||}/i88((KA()_Ea{||||", "|||||||}^/pi^]r'as||||||", "|||||||||{[s[[s}||||||||", "||||||||||||||||||||||||" }; xscreensaver-5.36/hacks/images/bubbles/jade6.xpm000644 000767 000024 00000004706 10374534015 021642 0ustar00jwzstaff000000 000000 /* XPM */ static char *jade6[] = { /* width height ncolors chars_per_pixel */ "30 30 91 1", /* colors */ " c #000000", ". c #73E573", "X c #23BD23", "o c #20A920", "O c #17A317", "+ c #1A991A", "@ c #159B15", "# c #159115", "$ c #129512", "% c #158B15", "& c #138713", "* c #108710", "= c #117F11", "- c #127912", "; c #0E790E", ": c #0D730D", "> c #0F6D0F", ", c #0E690E", "< c #0F650F", "1 c #086F08", "2 c #0E630E", "3 c #0B670B", "4 c #0B610B", "5 c #0A5F0A", "6 c #0B5B0B", "7 c #0B570B", "8 c #085908", "9 c #035703", "0 c #055305", "q c #094909", "w c #074B07", "e c #044F04", "r c #024D02", "t c #044904", "y c #014301", "u c #073907", "i c #013F01", "p c #063306", "a c #013901", "s c #042D04", "d c #012701", "f c #012101", "g c #011D01", "h c #011901", "j c #011501", "k c #001100", "l c #010D01", "z c #1CB21C", "x c #19AA19", "c c #189E18", "v c #189A18", "b c #159615", "n c #119011", "m c #148814", "M c #108C10", "N c #138213", "B c #127C12", "V c #0D840D", "C c #107C10", "Z c #0D7E0D", "A c #117611", "S c #0A7A0A", "D c #107010", "F c #106A10", "G c #0C6E0C", "H c #087408", "J c #0A660A", "K c #056C05", "L c #0D5E0D", "P c #066806", "I c #076407", "U c #0D580D", "Y c #076007", "T c #036403", "R c #0A540A", "E c #045C04", "W c #094E09", "Q c #015401", "! c #044604", "~ c #064206", "^ c #073C07", "/ c #053605", "( c #013C01", ") c #013601", "_ c #033203", "` c #012E01", "' c #022A02", "] c #042604", "[ c #042404", "{ c #000A00", "} c None", /* pixels */ "}}}}}}}}}}}}d`qR)''}}}}}}}}}}}", "}}}}}}}}}p)FFD-`>iwU~f}}}}}}}}", "}}}}}}}}Uw><,=J&ryDy(w)}}}}}}}", "}}}}}}d6i48;m:#69)aYN80Rp}}}}}", "}}}}}uWA-C%v;O%S5GP9592q}}", "}}[sRrmTa*S@Z9eZXVTb=E&#Y9FUg}", "}}u<0!%;KxTz@OOzX*xYKECTY84Ug}", "}}/FRm:Q@nxMKKx%X1zH1nv)(A-W/}", "}j`!er;PKOzxHAX..oXnxx&y4A,)^k", "}[qL4rm#xJSxVX...%X$Z1Z,im4D^p", "}gRWL0Y=HZ#zMo...+T@VnvEmmyFfs", "}f~F48#QQTnO:X%X%+xSH!GI%N6!Us", "}[^~,,NI#POH*@SzHz$@c#x=m,rWq[", "}j`W65:&Q=SMHz1KzZ9SMHQI&N22qg", "}lp)63B~rCc&t#OeVGVZTQwr:A!Rgj", "}}f~/D0`~Qmcbvvv8;iQGr9Cy5L7W/f}}}", "}}}}{[^WL~`L!(>065R042URhfj}}}", "}}}}}{pu^_() c #0A710A", ", c #0F650F", "< c #067106", "1 c #0E630E", "2 c #0A690A", "3 c #086908", "4 c #0B5F0B", "5 c #0B5B0B", "6 c #026302", "7 c #0C4F0C", "8 c #094D09", "9 c #025502", "0 c #004D00", "q c #024302", "w c #063706", "e c #023502", "r c #022D02", "t c #042904", "y c #012901", "u c #022302", "i c #011F01", "p c #011901", "a c #001100", "s c #000B00", "d c #4FD64F", "f c #1CB41C", "g c #1AAC1A", "h c #18A618", "j c #17A017", "k c #189A18", "l c #159615", "z c #148A14", "x c #108E10", "c c #148414", "v c #108810", "b c #0D7E0D", "n c #117611", "m c #107210", "M c #0A760A", "N c #0E6A0E", "B c #0E680E", "V c #0A6E0A", "C c #0B620B", "Z c #046A04", "A c #0D580D", "S c #056405", "D c #075E07", "F c #0A560A", "G c #075A07", "H c #095409", "J c #0A520A", "K c #025E02", "L c #055605", "P c #065206", "I c #015A01", "U c #084808", "Y c #035003", "T c #054C05", "R c #074607", "E c #B1FFB1", "W c #074207", "Q c #034803", "! c #083E08", "~ c #024602", "^ c #033E03", "/ c #043C04", "( c #023A02", ") c #053205", "_ c #023602", "` c #052E05", "' c #013201", "] c #011C01", "[ c #011601", "{ c None", /* pixels */ "{{{{{{{{{{{{{{{{!WWw`{{{{{{{{{{{{{{{", "{{{{{{{{{{{{`rUJNR4;RFyJ){{{{{{{{{{{", "{{{{{{{{{{y818qNTL^mT$UF_wR{{{{{{{{{", "{{{{{{{{{JQ1GTC&-zQGmDDU(QNW{{{{{{{{", "{{{{{{{`JNGL&@z@@&B9K9Y9neP^Jw{{{{{{", "{{{{{{w^H^$&zzVk#2MKIS904L~qq/y{{{{{", "{{{{{tWF4C0*TbgMS%gZX23v@DNzF88`{{{{", "{{{{{A,1N0$#IZ<&*fVgf4l#l>q0LmRy{{{{", "{{{{yAn5V9#lSjgj<2Dx+LfxMk*P0':,w{{{", "{{{uR,P0*9Mq+ff6Z6XZ6%Xvh<@bGnmNJi{{", "{{{w4P:cSKMXK=gTf$ZIZj90G51Wp{", "{{tW4F0*Gh#+h+Gvx@z.+lhDKx2Lz*Q,,/U]{", "{{[t7JTPN^c-z@->#kk^C*>%2V;L5e(Uyua{", "{{{[!t1NNG;;-V**kl*>L9H$V*eYm!'wia{{", "{{{a)weJ8QnC;0~DDcV-D0qn&:C,48'rw]{{", "{{{{p)wU8(U5:P~N-&nVDY&GNn58AJ`y[{{{", "{{{{{t!yA188mn;;;DCLP4:TN1FAUW!u{{{{", "{{{{{su!WJJJNWe5QeTQPQ5m588Wwyi[{{{{", "{{{{{{si!U/e/eTJ/(,q,Qq,/)7!`t[{{{{{", "{{{{{{{s[uy'rRARy8WWJ4^W7R!tus{{{{{{", "{{{{{{{{{a]www/7w'UURW]y)!]i{{{{{{{{", "{{{{{{{{{{s]``y))y`)pw)`t[s{{{{{{{{{", "{{{{{{{{{{{{s]a[p[ap[iuas{{{{{{{{{{{", "{{{{{{{{{{{{{{{{sssss{{{{{{{{{{{{{{{", "{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{" }; xscreensaver-5.36/hacks/images/bubbles/jade8.xpm000644 000767 000024 00000007031 10374534016 021637 0ustar00jwzstaff000000 000000 /* XPM */ static char *jade8[] = { /* width height ncolors chars_per_pixel */ "44 44 92 1", /* colors */ " c #000000", ". c #35CB35", "X c #19A719", "o c #169B16", "O c #159715", "+ c #159115", "@ c #129512", "# c #158715", "$ c #148514", "% c #108B10", "& c #127F12", "* c #0F7B0F", "= c #127312", "- c #0F750F", "; c #0C790C", ": c #0A770A", "> c #0D6D0D", ", c #0C690C", "< c #067106", "1 c #0D650D", "2 c #0E630E", "3 c #0B630B", "4 c #0C5F0C", "5 c #0B5B0B", "6 c #075D07", "7 c #025F02", "8 c #065706", "9 c #025702", "0 c #084D08", "q c #035103", "w c #064706", "e c #074307", "r c #034903", "t c #014B01", "y c #073F07", "u c #063D06", "i c #053105", "p c #023502", "a c #013301", "s c #022D02", "d c #022B02", "f c #022702", "g c #022302", "h c #011F01", "j c #8DF08D", "k c #21AC21", "l c #1CB41C", "z c #1BAE1B", "x c #18A418", "c c #17A217", "v c #199419", "b c #148A14", "n c #118E11", "m c #148214", "M c #108610", "N c #0E820E", "B c #127A12", "V c #0D7E0D", "C c #0C720C", "Z c #0F6A0F", "A c #076C07", "S c #0A660A", "D c #0A600A", "F c #046804", "G c #0D580D", "H c #076007", "J c #046404", "K c #0A580A", "L c #075A07", "P c #095409", "I c #0A520A", "U c #035C03", "Y c #0B4E0B", "T c #065206", "R c #064E06", "E c #084808", "W c #024602", "Q c #034203", "! c #063A06", "~ c #014201", "^ c #033E03", "/ c #043804", "( c #003E00", ") c #053405", "_ c #013801", "` c #052E05", "' c #013001", "] c #011C01", "[ c #011801", "{ c #011401", "} c #000E00", "| c None", /* pixels */ "||||||||||||||||||||||!|||||||||||||||||||||", "||||||||||||||||id_^I2^I0K)yy|||||||||||||||", "||||||||||||||)Q22Z>>T44=(0puas|||||||||||||", "||||||||||||/IP0e=TZmDP5BrDr3ZQa)|||||||||||", "||||||||||`YWLZrZ6**,53BPL3SmWEZ2Y[|||||||||", "|||||||||sI2r33b$+b;;DQ1UWq&S-8WL0Ke||||||||", "||||||||uw5T-m*Vb>V+C>FJrmVLQ8#WW((wd|||||||", "|||||||y_PW$&bVC:O+:XN>WFWJCb*bqt4r_a)||||||", "||||||y42RB3q9H9boN7CA%zRr>qVxnCczoV7FLT3;oO*H&42)|||", "|||`!QT&#CS->o;J:zWoXOll@@HxS+,L4G`||", "|||!GZW>8bo,:zn%l%Uoxllnx;;#...#=Xl%HF9O9QZT#=re!)|", "||gE2(LW**oL1rWpy|", "||!I20_wHNoCJ(UL#WT2'`|", "||ye)5T#68,+:x~:XFzk.jjjvk:cB=T2E!|", "|]`_003Wq1UHXFmUoc@(VXlvl;lL%ooxnnX;NCCm5P!Gh|", "||`'eQDL&bN--9Oo%7XolFCn14C#DZ>ZYY`|", "||hEIa4ZmBq69vHo+bUF7<7%n9FU$mT>&BK2efh|", "||dfeyw=3Z'5aT$*XF(UWmPQSSbOCHHvoN&+WNFHOSmBD02E04')i||", "|||ggY)^40wrr#&-+bmvoo;oZJSHbHt0q2=rZee))g||", "||||gyhp_5d5B&&S9>H*MOCb*H>T#$q>T5Z0aaYf)|||", "||||giepaI0(3>&DWt8-C&>S>HtP-&>T=LZK_h'){|||", "|||||[)Y)IG_f(B-RWH$S#->3H6mD_T34045sfg[||||", "|||||}`y'!54PP==BBB1>1Z83R1>~=Z2P2QY/!h{||||", "||||||{h!sE52QEY0(Zrr'L1L5RLr2420EEsfg[|||||", "|||||||}]`iYY5PQee=WWpdW502s2K5eII!d`h||||||", "||||||||{`dyyppQaEII^P0sZ0)G4ad!eii`[|||||||", "|||||||||[{dgEy/sGEYpE^_IQppuEYYy]g}||||||||", "||||||||||}{ii)y!eEaiuYEEy/iyd)`]h}|||||||||", "||||||||||||}f``)di`!d!d[fe`f`]]{|||||||||||", "||||||||||||||{{[{ggfffh[[``]{}|||||||||||||", "||||||||||||||||}}}{[][]hg]{}|||||||||||||||", "||||||||||||||||||||||}|||||||||||||||||||||", "||||||||||||||||||||||||||||||||||||||||||||" }; xscreensaver-5.36/hacks/images/bubbles/jade9.xpm000644 000767 000024 00000010145 10374534016 021640 0ustar00jwzstaff000000 000000 /* XPM */ static char *jade9[] = { /* width height ncolors chars_per_pixel */ "50 50 92 1", /* colors */ " c #000000", ". c #22B922", "X c #199919", "o c #169916", "O c #179317", "+ c #129512", "@ c #149114", "# c #158715", "$ c #108B10", "% c #108710", "& c #128312", "* c #137D13", "= c #117F11", "- c #127912", "; c #107B10", ": c #0D7F0D", "> c #107710", ", c #0B7B0B", "< c #0C770C", "1 c #0F6F0F", "2 c #0C690C", "3 c #0D650D", "4 c #0E630E", "5 c #0B610B", "6 c #096309", "7 c #0B5B0B", "8 c #085F08", "9 c #075B07", "0 c #025F02", "q c #025B02", "w c #065306", "e c #064D06", "r c #094709", "t c #024D02", "y c #074307", "u c #014901", "i c #014501", "p c #063906", "a c #013D01", "s c #063306", "d c #013901", "f c #033503", "g c #033103", "h c #042B04", "j c #022D02", "k c #022902", "l c #022502", "z c #012301", "x c #011F01", "c c #011D01", "v c #011901", "b c #000D00", "n c #4FD64F", "m c #1CB41C", "M c #1FA61F", "N c #1AAC1A", "B c #18A818", "V c #16A016", "C c #159615", "Z c #148A14", "A c #118E11", "S c #0D840D", "D c #117211", "F c #0E740E", "G c #0F6A0F", "H c #0A720A", "J c #0C6E0C", "K c #0A6E0A", "L c #0A6A0A", "P c #0A660A", "I c #056E05", "U c #0D5E0D", "Y c #046804", "T c #0D580D", "R c #036403", "E c #0A580A", "W c #085808", "Q c #0A540A", "! c #0B500B", "~ c #084E08", "^ c #035603", "/ c #094A09", "( c #035203", ") c #035003", "_ c #054605", "` c #B1FFB1", "' c #073E07", "] c #044004", "[ c #014001", "{ c #052E05", "} c #011401", "| c None", /* pixels */ "||||||||||||||||||||||||||||||||||||||||||||||||||", "|||||||||||||||||||kzjsaTTg/rrp{||||||||||||||||||", "||||||||||||||||kkf!44QQDw4D]~Qf/rh|||||||||||||||", "||||||||||||||zT_E77wtitG1j5w*wg~!Upr|||||||||||||", "||||||||||||{/Ue57_iG#1*Z#_-591iW[deU'p|||||||||||", "|||||||||||hT]EW59-8FOoL]^*]^Z)F2G55D4rz||||||||||", "||||||||||j~_u795&OO&OVHwG-R^o#Gt>PdW[G/s|||||||||", "|||||||||'geDi>#F=;=K@@ReIHa^RLu5(u&i-]'aj||||||||", "||||||||pfG4wP#ZZ>HBVZAVYWqY0BY:=>F^ewuar/c|||||||", "|||||||'/U5i-G>#F7%BV@iN,oV*6^u%NH0Y.,HmBB.mB+R)=t&9IROK0GfG7UQrl||", "|||sk44u1)&X=uAN$S.V)+B.oN..$[0RoIAR<*0&8^2GG!yv||", "|||h74i4itod=S$:mm+,I$Sm%Z..+8+ouH,CI;Fd_P**w4Ts||", "||vrQ4eie6>Ke@NVN.Am:+HXM..->I.VSPIIq*3[Fu#-G_ykz|", "||}k!_i77F;VJHAVV.N9H=#.nnnM-..N$IONBqwY5G#13dpjz|", "||s'a_QuQZ&XRiXHHBVARB.n```n.OV.$00R3Wag/h|", "||zg/U[3]P&@=^Z#*1G_Qy'|", "||{s/]4iJ*8uqXJRVNV0mBBOX.;DN,BoCVA=*YXFJ2&557]gs|", "||x'/]Quw#Z6&65RNNCPCmNoR7SIOY%mB+V%w1OO*>*W5!fr{|", "||{j!~TGe#FO=tW[KSV<$NB:VV+A$Rt*t-(W;OVVquYJZ%eIAw;S@^^L(5dZ9F--_7Q/hc|", "||bxjys]4797~aa*^Zo=K<,A0RRYq9q:H^q*5u5#9*GdQg/z}|", "|||lsQ/r7Wwja]uP0ooZO=oBZ^aF@5#>oKZ8^F*1u[4d/!'x||", "|||lzgk~]1t1i]DJLZX;8L=VVSVi^6=(KO6Z*2u[a4eU/hcx||", "|||}cvffd5e[[w)t*;OZ%&oVo;(uOKH6@6#Zuj[D]d'7k'l}||", "||||cxyzad4Dt>&1&FP(;F%ZOK=J8^FGZ*ti[e51djpgpph|||", "||||}vksddQe45*3#J)~^LPK;P>;8)Du;#WDWD44!fflpsv|||", "|||||lhpp'44/faG>5ef^F>FZ;PLF99*>-4GWQQ44gzsxl||||", "|||||blxrg/QE]Da15WwGF>5##>5uW1>Dt1DD7UUTsshzb||||", "||||||}l{'r/47e[1415-539t5tDWwG7wDG7Q4/Q/'hl}|||||", "|||||||bxs'pQ~E]Ukyd_7i[7wWt7wQi1574~Qrpvzlc||||||", "||||||||bxsp/rrT!_/4eE][7r_QQU4]QETa'!s{h{c|||||||", "|||||||||}hx''pda]d]U~!e~e'7Ua444fpg!ykhh}||||||||", "||||||||||}c{zzkkfp'7_pyT_TU/k~rr!!rrz{lb|||||||||", "|||||||||||}bllpsrp!pg/rgyTQQ'fxjlp'xcz}||||||||||", "||||||||||||bcxhhpplls///''cxg{s'pslvcb|||||||||||", "||||||||||||||bbxlzzhhsshkhhczs{{v}cb|||||||||||||", "||||||||||||||||b}cvxvvhcv}}cvhx}bb|||||||||||||||", "|||||||||||||||||||bbb}}vx}vcbbb||||||||||||||||||", "||||||||||||||||||||||||||||||||||||||||||||||||||", "||||||||||||||||||||||||||||||||||||||||||||||||||" }; xscreensaver-5.36/hacks/images/noseguy/nose-f1.xbm000644 000767 000024 00000006335 07301420705 022152 0ustar00jwzstaff000000 000000 #define nose_f1_width 64 #define nose_f1_height 64 static unsigned char nose_f1_bits[] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0xff, 0xff, 0x07, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0xf8, 0xff, 0xff, 0xff, 0xff, 0x3f, 0x00, 0x00, 0x08, 0x00, 0xc0, 0x1f, 0x00, 0x20, 0x00, 0x00, 0x08, 0x00, 0x30, 0x60, 0x00, 0x20, 0x00, 0x00, 0xf8, 0xff, 0x0f, 0x80, 0xff, 0x3f, 0x00, 0x00, 0x00, 0x02, 0x02, 0x00, 0x82, 0x00, 0x00, 0x00, 0x00, 0x03, 0x01, 0x00, 0x84, 0x01, 0x00, 0x00, 0x00, 0x81, 0x00, 0x00, 0x08, 0x01, 0x00, 0x00, 0x80, 0x80, 0x00, 0x00, 0x08, 0x02, 0x00, 0x00, 0x80, 0x40, 0x00, 0x00, 0x10, 0x02, 0x00, 0x00, 0x40, 0x40, 0x00, 0x00, 0x10, 0x04, 0x00, 0x00, 0x40, 0x20, 0x00, 0x00, 0x20, 0x04, 0x00, 0x00, 0x60, 0x20, 0x00, 0x00, 0x20, 0x0c, 0x00, 0x00, 0x20, 0x20, 0x00, 0x00, 0x20, 0x08, 0x00, 0x00, 0x20, 0x20, 0x00, 0x00, 0x20, 0x08, 0x00, 0x00, 0x10, 0x20, 0x00, 0x00, 0x20, 0x10, 0x00, 0x00, 0x10, 0x20, 0x00, 0x00, 0x20, 0x10, 0x00, 0x00, 0x10, 0x20, 0x00, 0x00, 0x20, 0x10, 0x00, 0x00, 0x10, 0x40, 0x00, 0x00, 0x10, 0x10, 0x00, 0x00, 0x10, 0x40, 0x00, 0x00, 0x10, 0x10, 0x00, 0x00, 0x10, 0x80, 0x00, 0x00, 0x08, 0x10, 0x00, 0x00, 0x10, 0x80, 0x00, 0x00, 0x08, 0x10, 0x00, 0x00, 0x30, 0x00, 0x01, 0x00, 0x04, 0x18, 0x00, 0x00, 0x20, 0x00, 0x02, 0x00, 0x02, 0x08, 0x00, 0x00, 0x20, 0x00, 0x0c, 0x80, 0x01, 0x08, 0x00, 0x00, 0x60, 0x00, 0x30, 0x60, 0x00, 0x0c, 0x00, 0x00, 0x40, 0x00, 0xc0, 0x1f, 0x00, 0x04, 0x00, 0x00, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0xfe, 0xff, 0xff, 0xff, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x0f, 0xc0, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x40, 0x10, 0x20, 0x10, 0x00, 0x00, 0x00, 0x00, 0x20, 0x60, 0x30, 0x20, 0x00, 0x00, 0x00, 0x00, 0x20, 0xc0, 0x18, 0x20, 0x00, 0x00, 0xc0, 0x7f, 0x10, 0x80, 0x0d, 0x40, 0xe0, 0x01, 0x70, 0xc0, 0x18, 0x00, 0x05, 0x40, 0x1c, 0x06, 0x10, 0x00, 0x0f, 0x00, 0x05, 0x80, 0x07, 0x08, 0x08, 0x00, 0x06, 0x00, 0x05, 0x80, 0x01, 0x08, 0x08, 0x00, 0x18, 0x00, 0x05, 0xc0, 0x00, 0x10, 0x04, 0x00, 0x30, 0x00, 0x05, 0x30, 0x00, 0x10, 0x04, 0x00, 0x00, 0x80, 0x08, 0x18, 0x00, 0x20, 0x04, 0x00, 0x00, 0x80, 0x08, 0x00, 0x00, 0x20, 0x04, 0x00, 0x00, 0x40, 0x10, 0x00, 0x00, 0x20, 0x24, 0x00, 0x00, 0x40, 0x10, 0x00, 0x00, 0x22, 0x24, 0x00, 0x00, 0x40, 0x10, 0x00, 0x00, 0x22, 0x44, 0x00, 0x00, 0x40, 0x10, 0x00, 0x00, 0x11, 0x84, 0x01, 0x00, 0xc0, 0x18, 0x00, 0xc0, 0x10, 0x08, 0x00, 0x00, 0x80, 0x08, 0x00, 0x00, 0x08, 0x30, 0x00, 0x00, 0x80, 0x08, 0x00, 0x00, 0x04, 0xe0, 0xff, 0xff, 0xff, 0xf8, 0xff, 0xff, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}; xscreensaver-5.36/hacks/images/noseguy/nose-f2.xbm000644 000767 000024 00000006335 07301420705 022153 0ustar00jwzstaff000000 000000 #define nose_f2_width 64 #define nose_f2_height 64 static unsigned char nose_f2_bits[] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0xff, 0xff, 0x07, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0xf8, 0xff, 0xff, 0xff, 0xff, 0x3f, 0x00, 0x00, 0x08, 0x00, 0xe0, 0x0f, 0x00, 0x20, 0x00, 0x00, 0x08, 0x00, 0x18, 0x30, 0x00, 0x20, 0x00, 0x00, 0xf8, 0xff, 0x07, 0xc0, 0xff, 0x3f, 0x00, 0x00, 0x00, 0x02, 0x01, 0x00, 0x81, 0x00, 0x00, 0x00, 0x00, 0x83, 0x00, 0x00, 0x82, 0x01, 0x00, 0x00, 0x00, 0x41, 0x00, 0x00, 0x04, 0x01, 0x00, 0x00, 0x80, 0x40, 0x00, 0x00, 0x04, 0x02, 0x00, 0x00, 0x80, 0x20, 0x00, 0x00, 0x08, 0x02, 0x00, 0x00, 0x40, 0x20, 0x00, 0x00, 0x08, 0x04, 0x00, 0x00, 0x40, 0x10, 0x00, 0x00, 0x10, 0x04, 0x00, 0x00, 0x60, 0x10, 0x00, 0x00, 0x10, 0x0c, 0x00, 0x00, 0x20, 0x10, 0x00, 0x00, 0x10, 0x08, 0x00, 0x00, 0x30, 0x10, 0x00, 0x00, 0x10, 0x08, 0x00, 0x00, 0x10, 0x10, 0x00, 0x00, 0x10, 0x10, 0x00, 0x00, 0x10, 0x10, 0x00, 0x00, 0x10, 0x10, 0x00, 0x00, 0x10, 0x10, 0x00, 0x00, 0x10, 0x10, 0x00, 0x00, 0x10, 0x20, 0x00, 0x00, 0x08, 0x10, 0x00, 0x00, 0x10, 0x20, 0x00, 0x00, 0x08, 0x10, 0x00, 0x00, 0x10, 0x40, 0x00, 0x00, 0x04, 0x10, 0x00, 0x00, 0x30, 0x40, 0x00, 0x00, 0x04, 0x10, 0x00, 0x00, 0x20, 0x80, 0x00, 0x00, 0x02, 0x18, 0x00, 0x00, 0x20, 0x00, 0x01, 0x00, 0x01, 0x08, 0x00, 0x00, 0x60, 0x00, 0x06, 0xc0, 0x00, 0x08, 0x00, 0x00, 0x80, 0x00, 0x18, 0x30, 0x00, 0x0c, 0x00, 0x00, 0x80, 0x00, 0xe0, 0x0f, 0x00, 0x04, 0x00, 0x00, 0x80, 0x01, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0xfe, 0xff, 0xff, 0xff, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0x0f, 0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0x04, 0x10, 0x00, 0x00, 0x00, 0xe0, 0x00, 0x07, 0x02, 0x10, 0x00, 0x00, 0x00, 0x30, 0x00, 0x8c, 0x01, 0x20, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x90, 0x00, 0x20, 0x00, 0x00, 0x00, 0x04, 0x03, 0x60, 0x00, 0x20, 0x00, 0x00, 0x00, 0xc2, 0x00, 0xc0, 0x00, 0x20, 0x00, 0x00, 0x00, 0x42, 0x00, 0x00, 0x01, 0x20, 0x00, 0x00, 0x00, 0x21, 0x00, 0x00, 0x02, 0x20, 0x00, 0x00, 0x00, 0x21, 0x00, 0x00, 0x06, 0x20, 0x00, 0x00, 0x00, 0x21, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x70, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0xc0, 0xff, 0xff, 0xff, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}; xscreensaver-5.36/hacks/images/noseguy/nose-f3.xbm000644 000767 000024 00000006335 07301420705 022154 0ustar00jwzstaff000000 000000 #define nose_f3_width 64 #define nose_f3_height 64 static unsigned char nose_f3_bits[] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0xff, 0xff, 0x03, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0xfc, 0xff, 0xff, 0xff, 0xff, 0x1f, 0x00, 0x00, 0x04, 0x00, 0xf0, 0x07, 0x00, 0x10, 0x00, 0x00, 0x04, 0x00, 0x0c, 0x18, 0x00, 0x10, 0x00, 0x00, 0xfc, 0xff, 0x03, 0xe0, 0xff, 0x1f, 0x00, 0x00, 0x00, 0x81, 0x00, 0x80, 0x40, 0x00, 0x00, 0x00, 0x80, 0x41, 0x00, 0x00, 0xc1, 0x00, 0x00, 0x00, 0x80, 0x20, 0x00, 0x00, 0x82, 0x00, 0x00, 0x00, 0x40, 0x20, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x40, 0x10, 0x00, 0x00, 0x04, 0x01, 0x00, 0x00, 0x20, 0x10, 0x00, 0x00, 0x04, 0x02, 0x00, 0x00, 0x20, 0x08, 0x00, 0x00, 0x08, 0x02, 0x00, 0x00, 0x30, 0x08, 0x00, 0x00, 0x08, 0x06, 0x00, 0x00, 0x10, 0x08, 0x00, 0x00, 0x08, 0x04, 0x00, 0x00, 0x10, 0x08, 0x00, 0x00, 0x08, 0x0c, 0x00, 0x00, 0x08, 0x08, 0x00, 0x00, 0x08, 0x08, 0x00, 0x00, 0x08, 0x08, 0x00, 0x00, 0x08, 0x08, 0x00, 0x00, 0x08, 0x08, 0x00, 0x00, 0x08, 0x08, 0x00, 0x00, 0x08, 0x10, 0x00, 0x00, 0x04, 0x08, 0x00, 0x00, 0x08, 0x10, 0x00, 0x00, 0x04, 0x08, 0x00, 0x00, 0x08, 0x20, 0x00, 0x00, 0x02, 0x08, 0x00, 0x00, 0x08, 0x20, 0x00, 0x00, 0x02, 0x0c, 0x00, 0x00, 0x18, 0x40, 0x00, 0x00, 0x01, 0x04, 0x00, 0x00, 0x10, 0x80, 0x00, 0x80, 0x00, 0x04, 0x00, 0x00, 0x10, 0x00, 0x03, 0x60, 0x00, 0x06, 0x00, 0x00, 0x30, 0x00, 0x0c, 0x18, 0x00, 0x01, 0x00, 0x00, 0x20, 0x00, 0xf0, 0x07, 0x00, 0x01, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0x80, 0x01, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x80, 0xff, 0xff, 0xff, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x20, 0x00, 0xff, 0x00, 0x00, 0x00, 0x00, 0x08, 0x40, 0xe0, 0x00, 0x07, 0x00, 0x00, 0x00, 0x04, 0x80, 0x31, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x04, 0x00, 0x09, 0x00, 0x30, 0x00, 0x00, 0x00, 0x04, 0x00, 0x06, 0xc0, 0x20, 0x00, 0x00, 0x00, 0x04, 0x00, 0x03, 0x00, 0x43, 0x00, 0x00, 0x00, 0x04, 0x80, 0x00, 0x00, 0x42, 0x00, 0x00, 0x00, 0x04, 0x40, 0x00, 0x00, 0x84, 0x00, 0x00, 0x00, 0x04, 0x60, 0x00, 0x00, 0x84, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x84, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0xc0, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x00, 0xf0, 0xff, 0xff, 0xff, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}; xscreensaver-5.36/hacks/images/noseguy/nose-f4.xbm000644 000767 000024 00000006335 07301420705 022155 0ustar00jwzstaff000000 000000 #define nose_f4_width 64 #define nose_f4_height 64 static unsigned char nose_f4_bits[] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfc, 0xff, 0x01, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x03, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x80, 0x01, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x10, 0x00, 0x80, 0x1f, 0x00, 0x40, 0x00, 0x00, 0x08, 0x00, 0x60, 0x60, 0x00, 0x80, 0x00, 0x00, 0x08, 0x00, 0x10, 0x80, 0x00, 0x80, 0x00, 0x00, 0x04, 0x00, 0x08, 0x00, 0x01, 0x00, 0x01, 0x00, 0x04, 0x00, 0x08, 0x00, 0x01, 0x00, 0x01, 0x00, 0x02, 0x00, 0x18, 0x80, 0x01, 0x00, 0x02, 0x00, 0x02, 0x00, 0x68, 0x60, 0x01, 0x00, 0x02, 0x00, 0x02, 0x00, 0x88, 0x1f, 0x01, 0x00, 0x02, 0x00, 0x02, 0x00, 0x08, 0x00, 0x01, 0x00, 0x02, 0x00, 0x02, 0x00, 0x10, 0x80, 0x00, 0x00, 0x03, 0x00, 0x06, 0x00, 0x60, 0x60, 0x00, 0x80, 0x02, 0x00, 0x0c, 0x00, 0x80, 0x1f, 0x00, 0x40, 0x01, 0x00, 0x14, 0x00, 0x00, 0x00, 0x00, 0x20, 0x01, 0x00, 0x28, 0x00, 0x00, 0x00, 0x00, 0x90, 0x00, 0x00, 0x50, 0x00, 0x00, 0x00, 0x00, 0x48, 0x00, 0x00, 0xa0, 0x01, 0x00, 0x00, 0x00, 0x26, 0x00, 0x00, 0x40, 0x1e, 0x00, 0x00, 0xc0, 0x11, 0x00, 0x00, 0x80, 0xe1, 0x03, 0x00, 0x3c, 0x0c, 0x00, 0x00, 0x00, 0x0e, 0xfc, 0xff, 0x83, 0x03, 0x00, 0x00, 0x00, 0xf0, 0x01, 0x00, 0x78, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0xff, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x80, 0x03, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x80, 0x02, 0x00, 0x14, 0x00, 0x00, 0x00, 0x00, 0x60, 0x04, 0x00, 0x12, 0x00, 0x00, 0xc0, 0x7f, 0x10, 0x04, 0x00, 0x22, 0xe0, 0x01, 0x70, 0xc0, 0x18, 0x08, 0x00, 0x61, 0x1c, 0x06, 0x10, 0x00, 0x0f, 0x30, 0xc0, 0x80, 0x07, 0x08, 0x08, 0x00, 0x06, 0xc0, 0x3f, 0x80, 0x01, 0x08, 0x08, 0x00, 0x18, 0x00, 0x02, 0xc0, 0x00, 0x10, 0x04, 0x00, 0x30, 0x00, 0x05, 0x30, 0x00, 0x10, 0x04, 0x00, 0x00, 0x80, 0x08, 0x18, 0x00, 0x20, 0x04, 0x00, 0x00, 0x80, 0x08, 0x00, 0x00, 0x20, 0x04, 0x00, 0x00, 0x40, 0x10, 0x00, 0x00, 0x20, 0x24, 0x00, 0x00, 0x40, 0x10, 0x00, 0x00, 0x22, 0x24, 0x00, 0x00, 0x40, 0x10, 0x00, 0x00, 0x22, 0x44, 0x00, 0x00, 0x40, 0x10, 0x00, 0x00, 0x11, 0x84, 0x01, 0x00, 0xc0, 0x18, 0x00, 0xc0, 0x10, 0x08, 0x00, 0x00, 0x80, 0x08, 0x00, 0x00, 0x08, 0x30, 0x00, 0x00, 0x80, 0x08, 0x00, 0x00, 0x04, 0xe0, 0xff, 0xff, 0xff, 0xf8, 0xff, 0xff, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}; xscreensaver-5.36/hacks/images/noseguy/nose-l1.xbm000644 000767 000024 00000006335 07301420705 022160 0ustar00jwzstaff000000 000000 #define nose_l1_width 64 #define nose_l1_height 64 static unsigned char nose_l1_bits[] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0xff, 0xff, 0x07, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0xf8, 0xff, 0xff, 0xff, 0xff, 0x3f, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0xf8, 0xff, 0xff, 0xff, 0xff, 0x3f, 0x00, 0x00, 0xf0, 0x03, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x0e, 0x0c, 0x00, 0x00, 0x80, 0x01, 0x00, 0x00, 0x03, 0x30, 0x00, 0x00, 0x00, 0x01, 0x00, 0x80, 0x00, 0x40, 0x00, 0x00, 0x00, 0x02, 0x00, 0x40, 0x00, 0xc0, 0x00, 0x00, 0x00, 0x02, 0x00, 0x20, 0x00, 0x80, 0x00, 0x00, 0x00, 0x04, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x10, 0x00, 0x00, 0x01, 0x00, 0x00, 0x18, 0x00, 0x20, 0x00, 0x00, 0x01, 0x00, 0x00, 0x08, 0x00, 0x40, 0x00, 0x80, 0x00, 0x00, 0x00, 0x08, 0x00, 0x80, 0x00, 0x40, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x01, 0x20, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x06, 0x18, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0xf8, 0x07, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0xf8, 0xff, 0xff, 0xff, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0x0f, 0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0x04, 0x10, 0x00, 0x00, 0x00, 0xc0, 0x00, 0x03, 0x03, 0x10, 0x00, 0x00, 0x00, 0x30, 0x00, 0x0c, 0x01, 0x20, 0x00, 0x00, 0x00, 0x08, 0x00, 0x98, 0x00, 0x20, 0x00, 0x00, 0x00, 0x0c, 0x03, 0x60, 0x00, 0x20, 0x00, 0x00, 0x00, 0xc2, 0x00, 0xc0, 0x00, 0x20, 0x00, 0x00, 0x00, 0x42, 0x00, 0x80, 0x00, 0x20, 0x00, 0x00, 0x00, 0x21, 0x00, 0x00, 0x01, 0x20, 0x00, 0x00, 0x00, 0x21, 0x00, 0x00, 0x01, 0x20, 0x00, 0x00, 0x00, 0x21, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x70, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0xc0, 0xff, 0xff, 0xff, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}; xscreensaver-5.36/hacks/images/noseguy/nose-l2.xbm000644 000767 000024 00000006335 07301420705 022161 0ustar00jwzstaff000000 000000 #define nose_l2_width 64 #define nose_l2_height 64 static unsigned char nose_l2_bits[] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0xff, 0xff, 0x07, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0xf8, 0xff, 0xff, 0xff, 0xff, 0x3f, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0xf8, 0xff, 0xff, 0xff, 0xff, 0x3f, 0x00, 0x00, 0xf0, 0x03, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x0e, 0x0c, 0x00, 0x00, 0x80, 0x01, 0x00, 0x00, 0x03, 0x30, 0x00, 0x00, 0x00, 0x01, 0x00, 0x80, 0x00, 0x40, 0x00, 0x00, 0x00, 0x02, 0x00, 0x40, 0x00, 0xc0, 0x00, 0x00, 0x00, 0x02, 0x00, 0x20, 0x00, 0x80, 0x00, 0x00, 0x00, 0x04, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x10, 0x00, 0x00, 0x01, 0x00, 0x00, 0x18, 0x00, 0x10, 0x00, 0x00, 0x01, 0x00, 0x00, 0x08, 0x00, 0x20, 0x00, 0x80, 0x00, 0x00, 0x00, 0x08, 0x00, 0x40, 0x00, 0x40, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x80, 0x00, 0x20, 0x00, 0x00, 0x00, 0xe4, 0x00, 0x00, 0x03, 0x18, 0x00, 0x00, 0x00, 0x26, 0x03, 0x00, 0xfc, 0x07, 0x00, 0x00, 0x00, 0x12, 0x0c, 0x00, 0x00, 0xf8, 0xff, 0xff, 0xff, 0x11, 0x10, 0x80, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x08, 0x20, 0x60, 0x60, 0xc0, 0x07, 0x00, 0x00, 0x04, 0x40, 0x10, 0xc0, 0x20, 0x08, 0x00, 0x1f, 0x02, 0x40, 0x08, 0x00, 0x21, 0x10, 0xc0, 0x60, 0x02, 0x40, 0x04, 0x00, 0x12, 0x20, 0x20, 0x80, 0x02, 0x20, 0xc2, 0x00, 0x14, 0x40, 0x18, 0x00, 0x03, 0x20, 0x22, 0x00, 0x0c, 0x80, 0x04, 0x03, 0x02, 0x10, 0x12, 0x00, 0x08, 0x80, 0x86, 0x00, 0x04, 0x10, 0x12, 0x00, 0x10, 0x80, 0x42, 0x00, 0x18, 0x08, 0x12, 0x00, 0x10, 0x40, 0x42, 0x00, 0x00, 0x04, 0x02, 0x00, 0x20, 0x40, 0x42, 0x00, 0x00, 0x04, 0x02, 0x00, 0x00, 0x20, 0x42, 0x00, 0x00, 0x02, 0x04, 0x00, 0x00, 0x20, 0x02, 0x00, 0x00, 0x01, 0x04, 0x00, 0x00, 0x20, 0x02, 0x00, 0x00, 0x01, 0x08, 0x00, 0x00, 0x20, 0x04, 0x00, 0x80, 0x00, 0x10, 0x00, 0x00, 0x20, 0x0c, 0x00, 0x80, 0x00, 0x60, 0x00, 0x00, 0x10, 0x08, 0x00, 0x40, 0x00, 0x80, 0xff, 0xff, 0x0f, 0x30, 0x00, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0xff, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}; xscreensaver-5.36/hacks/images/noseguy/nose-r1.xbm000644 000767 000024 00000006335 07301420705 022166 0ustar00jwzstaff000000 000000 #define nose_r1_width 64 #define nose_r1_height 64 static unsigned char nose_r1_bits[] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0xff, 0xff, 0x03, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0xfc, 0xff, 0xff, 0xff, 0xff, 0x1f, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0xfc, 0xff, 0xff, 0xff, 0xff, 0x1f, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0xc0, 0x0f, 0x00, 0x00, 0x80, 0x01, 0x00, 0x00, 0x30, 0x70, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x0c, 0xc0, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x02, 0x00, 0x01, 0x00, 0x40, 0x00, 0x00, 0x00, 0x03, 0x00, 0x02, 0x00, 0x20, 0x00, 0x00, 0x00, 0x01, 0x00, 0x04, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x18, 0x00, 0x00, 0x80, 0x00, 0x00, 0x08, 0x00, 0x10, 0x00, 0x00, 0x80, 0x00, 0x00, 0x04, 0x00, 0x10, 0x00, 0x00, 0x00, 0x01, 0x00, 0x02, 0x00, 0x30, 0x00, 0x00, 0x00, 0x02, 0x00, 0x01, 0x00, 0x20, 0x00, 0x00, 0x00, 0x04, 0x80, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0x18, 0x60, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0xe0, 0x1f, 0x00, 0x00, 0x80, 0xff, 0xff, 0xff, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x20, 0x00, 0xff, 0x00, 0x00, 0x00, 0x00, 0x08, 0xc0, 0xc0, 0x00, 0x03, 0x00, 0x00, 0x00, 0x04, 0x80, 0x30, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x04, 0x00, 0x19, 0x00, 0x10, 0x00, 0x00, 0x00, 0x04, 0x00, 0x06, 0xc0, 0x30, 0x00, 0x00, 0x00, 0x04, 0x00, 0x03, 0x00, 0x43, 0x00, 0x00, 0x00, 0x04, 0x00, 0x01, 0x00, 0x42, 0x00, 0x00, 0x00, 0x04, 0x80, 0x00, 0x00, 0x84, 0x00, 0x00, 0x00, 0x04, 0x80, 0x00, 0x00, 0x84, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x84, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x00, 0xf0, 0xff, 0xff, 0xff, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}; xscreensaver-5.36/hacks/images/noseguy/nose-r2.xbm000644 000767 000024 00000006335 07301420705 022167 0ustar00jwzstaff000000 000000 #define nose_r2_width 64 #define nose_r2_height 64 static unsigned char nose_r2_bits[] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0xff, 0xff, 0x03, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0xfc, 0xff, 0xff, 0xff, 0xff, 0x1f, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0xfc, 0xff, 0xff, 0xff, 0xff, 0x1f, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0xc0, 0x0f, 0x00, 0x00, 0x80, 0x01, 0x00, 0x00, 0x30, 0x70, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x0c, 0xc0, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x02, 0x00, 0x01, 0x00, 0x40, 0x00, 0x00, 0x00, 0x03, 0x00, 0x02, 0x00, 0x20, 0x00, 0x00, 0x00, 0x01, 0x00, 0x04, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x18, 0x00, 0x00, 0x80, 0x00, 0x00, 0x08, 0x00, 0x10, 0x00, 0x00, 0x80, 0x00, 0x00, 0x08, 0x00, 0x10, 0x00, 0x00, 0x00, 0x01, 0x00, 0x04, 0x00, 0x30, 0x00, 0x00, 0x00, 0x02, 0x00, 0x02, 0x00, 0x27, 0x00, 0x00, 0x00, 0x04, 0x00, 0x01, 0xc0, 0x64, 0x00, 0x00, 0x00, 0x18, 0xc0, 0x00, 0x30, 0x48, 0x00, 0x00, 0x00, 0xe0, 0x3f, 0x00, 0x08, 0x88, 0xff, 0xff, 0xff, 0x1f, 0x00, 0x00, 0x04, 0x10, 0x00, 0x00, 0x00, 0x00, 0xf8, 0x01, 0x02, 0x20, 0x00, 0x00, 0xe0, 0x03, 0x06, 0x06, 0x02, 0x40, 0xf8, 0x00, 0x10, 0x04, 0x03, 0x08, 0x02, 0x40, 0x06, 0x03, 0x08, 0x84, 0x00, 0x10, 0x04, 0x40, 0x01, 0x04, 0x04, 0x48, 0x00, 0x20, 0x04, 0xc0, 0x00, 0x18, 0x02, 0x28, 0x00, 0x43, 0x08, 0x40, 0xc0, 0x20, 0x01, 0x30, 0x00, 0x44, 0x08, 0x20, 0x00, 0x61, 0x01, 0x10, 0x00, 0x48, 0x10, 0x18, 0x00, 0x42, 0x01, 0x08, 0x00, 0x48, 0x20, 0x00, 0x00, 0x42, 0x02, 0x08, 0x00, 0x48, 0x20, 0x00, 0x00, 0x42, 0x02, 0x04, 0x00, 0x40, 0x40, 0x00, 0x00, 0x42, 0x04, 0x00, 0x00, 0x40, 0x80, 0x00, 0x00, 0x40, 0x04, 0x00, 0x00, 0x20, 0x80, 0x00, 0x00, 0x40, 0x04, 0x00, 0x00, 0x20, 0x00, 0x01, 0x00, 0x20, 0x04, 0x00, 0x00, 0x10, 0x00, 0x01, 0x00, 0x30, 0x04, 0x00, 0x00, 0x08, 0x00, 0x02, 0x00, 0x10, 0x08, 0x00, 0x00, 0x06, 0x00, 0x0c, 0x00, 0x0c, 0xf0, 0xff, 0xff, 0x01, 0x00, 0xf0, 0xff, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}; xscreensaver-5.36/hacks/images/noseguy/nose-f1.xpm000644 000767 000024 00000010747 10373062446 022201 0ustar00jwzstaff000000 000000 /* XPM */ static char * nose_f1_xpm[] = { "64 64 7 1", " c #000000 m #000000", ". c #000000 m #FFFFFF", "X c #BEBEBE m #000000", "o c #FFFF00 m #000000", "O c #EEEE00 m #000000", "+ c #A020F0 m #000000", "@ c #7D26CD m #000000", " ", " ", " ", " ", " ", " ..................... ", " .XXXXXXXXXXXXXXXXXXX. ", " .XXXXXXXXXXXXXXXXXXX. ", " .XXXXXXXXXXXXXXXXXXX. ", " .XXXXXXXXXXXXXXXXXXX. ", " .XXXXXXXXXXXXXXXXXXX. ", " ........................................... ", " .XXXXXXXXXXXXXXXXXX.......XXXXXXXXXXXXXXXX. ", " .XXXXXXXXXXXXXXXX..ooooooo..XXXXXXXXXXXXXX. ", " .................ooooooooooo............... ", " .OOOOOOO.ooooooooooooooo.OOOOO. ", " ..OOOOOO.ooooooooooooooooo.OOOO.. ", " .OOOOOO.ooooooooooooooooooo.OOOO. ", " .OOOOOOO.ooooooooooooooooooo.OOOOO. ", " .OOOOOO.ooooooooooooooooooooo.OOOO. ", " .OOOOOOO.ooooooooooooooooooooo.OOOOO. ", " .OOOOOO.ooooooooooooooooooooooo.OOOO. ", " ..OOOOOO.ooooooooooooooooooooooo.OOOO.. ", " .OOOOOOO.ooooooooooooooooooooooo.OOOOO. ", " .OOOOOOO.ooooooooooooooooooooooo.OOOOO. ", " .OOOOOOOO.ooooooooooooooooooooooo.OOOOOO. ", " .OOOOOOOO.ooooooooooooooooooooooo.OOOOOO. ", " .OOOOOOOO.ooooooooooooooooooooooo.OOOOOO. ", " .OOOOOOOOO.ooooooooooooooooooooo.OOOOOOO. ", " .OOOOOOOOO.ooooooooooooooooooooo.OOOOOOO. ", " .OOOOOOOOOO.ooooooooooooooooooo.OOOOOOOO. ", " .OOOOOOOOOO.ooooooooooooooooooo.OOOOOOOO. ", " ..OOOOOOOOOO.ooooooooooooooooo.OOOOOOOO.. ", " .OOOOOOOOOOO.ooooooooooooooo.OOOOOOOOO. ", " .OOOOOOOOOOOO..ooooooooooo..OOOOOOOOOO. ", " ..OOOOOOOOOOOOO..ooooooo..OOOOOOOOOOO.. ", " .OOOOOOOOOOOOOOO.......OOOOOOOOOOOOO. ", " ..OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO.. ", " .OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO. ", " ................................ ", " ", " ..... ...... ", " .+++++. .++++++. ", " .+++++++.. ..+++++++. ", " .++++++++.. ..++++++++. ", " ......... .++++++++++.. ..++++++++++. .... ", " ...+++++++.. ..+++++++++++. .+++++++++++. ...++++.. ", " .+++++++++++....@+++++++++++. .+++++++++++@....++++++++. ", " .+++++++++++++..@@+++++++++++. .++++++++++@@..++++++++++. ", " .+++++++++++++++..@++++++++++. .+++++++++@@..++++++++++++. ", " .+++++++++++++++++..@+++++++++. .++++++++@..++++++++++++++. ", " .++++++++++++++++++++++++++++. .+++++++..++++++++++++++++. ", " .++++++++++++++++++++++++++++. .+++++++++++++++++++++++++. ", " .+++++++++++++++++++++++++++. .++++++++++++++++++++++++. ", " .+@.++++++++++++++++++++++++. .++++++++++++++++++++.+++. ", " .+@.++++++++++++++++++++++++. .++++++++++++++++++++.@++. ", " .+@@.+++++++++++++++++++++++. .+++++++++++++++++++.@@+. ", " .++@@..+++++++++++++++++++++.. ..+++++++++++++++++..@@++. ", " .++@@++++++++++++++++++++++@. .@++++++++++++++++++@@++. ", " ..@@@@@@@@@@@@@@@@@@@@@@@@@. .@@@@@@@@@@@@@@@@@@@@@@. ", " ........................... ....................... ", " ", " ", " "}; xscreensaver-5.36/hacks/images/noseguy/nose-f2.xpm000644 000767 000024 00000010747 10373062453 022200 0ustar00jwzstaff000000 000000 /* XPM */ static char * nose_f2_xpm[] = { "64 64 7 1", " c #000000 m #000000", ". c #000000 m #FFFFFF", "X c #BEBEBE m #000000", "o c #FFFF00 m #000000", "O c #EEEE00 m #000000", "+ c #A020F0 m #000000", "@ c #7D26CD m #000000", " ", " ", " ", " ", " ", " ..................... ", " .XXXXXXXXXXXXXXXXXXX. ", " .XXXXXXXXXXXXXXXXXXX. ", " .XXXXXXXXXXXXXXXXXXX. ", " .XXXXXXXXXXXXXXXXXXX. ", " .XXXXXXXXXXXXXXXXXXX. ", " ........................................... ", " .XXXXXXXXXXXXXXXXX.......XXXXXXXXXXXXXXXXX. ", " .XXXXXXXXXXXXXXX..ooooooo..XXXXXXXXXXXXXXX. ", " ................ooooooooooo................ ", " .OOOOOO.ooooooooooooooo.OOOOOO. ", " ..OOOOO.ooooooooooooooooo.OOOOO.. ", " .OOOOO.ooooooooooooooooooo.OOOOO. ", " .OOOOOO.ooooooooooooooooooo.OOOOOO. ", " .OOOOO.ooooooooooooooooooooo.OOOOO. ", " .OOOOOO.ooooooooooooooooooooo.OOOOOO. ", " .OOOOO.ooooooooooooooooooooooo.OOOOO. ", " ..OOOOO.ooooooooooooooooooooooo.OOOOO.. ", " .OOOOOO.ooooooooooooooooooooooo.OOOOOO. ", " ..OOOOOO.ooooooooooooooooooooooo.OOOOOO. ", " .OOOOOOO.ooooooooooooooooooooooo.OOOOOOO. ", " .OOOOOOO.ooooooooooooooooooooooo.OOOOOOO. ", " .OOOOOOO.ooooooooooooooooooooooo.OOOOOOO. ", " .OOOOOOOO.ooooooooooooooooooooo.OOOOOOOO. ", " .OOOOOOOO.ooooooooooooooooooooo.OOOOOOOO. ", " .OOOOOOOOO.ooooooooooooooooooo.OOOOOOOOO. ", " ..OOOOOOOO.ooooooooooooooooooo.OOOOOOOOO. ", " .OOOOOOOOO.ooooooooooooooooo.OOOOOOOOO.. ", " .OOOOOOOOOO.ooooooooooooooo.OOOOOOOOOO. ", " ..OOOOOOOOOO..ooooooooooo..OOOOOOOOOOO. ", " .OOOOOOOOOOO..ooooooo..OOOOOOOOOOOO.. ", " .OOOOOOOOOOOOO.......OOOOOOOOOOOOOO. ", " ..OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO.. ", " .OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO. ", " ................................ ", " ", " ......... ", " ........ .+++++++++. ", " ...++++++++... .++++++++++. ", " ..++++++++++++.. ..++++++++++++. ", " ..++++++++++++++++. .@++++++++++++. ", " .++++@..+++++++++++..@@++++++++++++. ", " .++++..++++++++++++++..@++++++++++++. ", " .+++@.+++++++++++++++++.@+++++++++++. ", " .+++@.+++++++++++++++++++.@++++++++++. ", " .+++@.+++++++++++++++++++..++++++++++. ", " .+++@.+++++++++++++++++++++++++++++++. ", " .++++++++++++++++++++++++++++++++++++@. ", " ..@++++++++++++++++++++++++++++++++++@. ", " .@@+++++++++++++++++++++++++++++++++@. ", " .@@++++++++++++++++++++++++++++++++@@. ", " .@@@++++++++++++++++++++++++++++++@. ", " ..@@@++++++++++++++++++++@@@++++@@. ", " ...@@@@@@@@@@@@@@@@@@@@@@@@@@@@@. ", " .............................. ", " ", " ", " ", " "}; xscreensaver-5.36/hacks/images/noseguy/nose-f3.xpm000644 000767 000024 00000010747 10373062462 022201 0ustar00jwzstaff000000 000000 /* XPM */ static char * nose_f3_xpm[] = { "64 64 7 1", " c #000000 m #000000", ". c #000000 m #FFFFFF", "X c #BEBEBE m #000000", "o c #FFFF00 m #000000", "O c #EEEE00 m #000000", "+ c #A020F0 m #000000", "@ c #7D26CD m #000000", " ", " ", " ", " ", " ", " ..................... ", " .XXXXXXXXXXXXXXXXXXX. ", " .XXXXXXXXXXXXXXXXXXX. ", " .XXXXXXXXXXXXXXXXXXX. ", " .XXXXXXXXXXXXXXXXXXX. ", " .XXXXXXXXXXXXXXXXXXX. ", " ........................................... ", " .XXXXXXXXXXXXXXXXX.......XXXXXXXXXXXXXXXXX. ", " .XXXXXXXXXXXXXXX..ooooooo..XXXXXXXXXXXXXXX. ", " ................ooooooooooo................ ", " .OOOOOO.ooooooooooooooo.OOOOOO. ", " ..OOOOO.ooooooooooooooooo.OOOOO.. ", " .OOOOO.ooooooooooooooooooo.OOOOO. ", " .OOOOOO.ooooooooooooooooooo.OOOOOO. ", " .OOOOO.ooooooooooooooooooooo.OOOOO. ", " .OOOOOO.ooooooooooooooooooooo.OOOOOO. ", " .OOOOO.ooooooooooooooooooooooo.OOOOO. ", " ..OOOOO.ooooooooooooooooooooooo.OOOOO.. ", " .OOOOOO.ooooooooooooooooooooooo.OOOOOO. ", " .OOOOOO.ooooooooooooooooooooooo.OOOOOO.. ", " .OOOOOOO.ooooooooooooooooooooooo.OOOOOOO. ", " .OOOOOOO.ooooooooooooooooooooooo.OOOOOOO. ", " .OOOOOOO.ooooooooooooooooooooooo.OOOOOOO. ", " .OOOOOOOO.ooooooooooooooooooooo.OOOOOOOO. ", " .OOOOOOOO.ooooooooooooooooooooo.OOOOOOOO. ", " .OOOOOOOOO.ooooooooooooooooooo.OOOOOOOOO. ", " .OOOOOOOOO.ooooooooooooooooooo.OOOOOOOO.. ", " ..OOOOOOOOO.ooooooooooooooooo.OOOOOOOOO. ", " .OOOOOOOOOO.ooooooooooooooo.OOOOOOOOOO. ", " .OOOOOOOOOOO..ooooooooooo..OOOOOOOOOO.. ", " ..OOOOOOOOOOOO..ooooooo..OOOOOOOOOOO. ", " .OOOOOOOOOOOOOO.......OOOOOOOOOOOOO. ", " ..OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO.. ", " .OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO. ", " ................................ ", " ", " ......... ", " .+++++++++. ........ ", " .++++++++++. ...++++++++... ", " .++++++++++++.. ..++++++++++++.. ", " .++++++++++++@. .++++++++++++++++.. ", " .++++++++++++@@..+++++++++++..@++++. ", " .++++++++++++@..++++++++++++++..++++. ", " .+++++++++++@.+++++++++++++++++.@+++. ", " .++++++++++@.+++++++++++++++++++.@+++. ", " .++++++++++..+++++++++++++++++++.@+++. ", " .+++++++++++++++++++++++++++++++.@+++. ", " .@++++++++++++++++++++++++++++++++++++. ", " .@++++++++++++++++++++++++++++++++++@.. ", " .@+++++++++++++++++++++++++++++++++@@. ", " .@@++++++++++++++++++++++++++++++++@@. ", " .@++++++++++++++++++++++++++++++@@@. ", " .@@++++@@@++++++++++++++++++++@@@.. ", " .@@@@@@@@@@@@@@@@@@@@@@@@@@@@@... ", " .............................. ", " ", " ", " ", " "}; xscreensaver-5.36/hacks/images/noseguy/nose-f4.xpm000644 000767 000024 00000010716 10373062471 022176 0ustar00jwzstaff000000 000000 /* XPM */ static char * nose_f4_xpm[] = { "64 64 6 1", " c #000000 m #000000", ". c #000000 m #FFFFFF", "X c #BEBEBE m #000000", "o c #FFFF00 m #000000", "+ c #A020F0 m #000000", "@ c #7D26CD m #000000", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ............... ", " ....XXXXXXXXXXXXXXX.... ", " ...XXXXXXXXXXXXXXXXXXXXXXX... ", " ..XXXXXXXXXXXXXXXXXXXXXXXXXXXXX.. ", " ..XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX. ", " .XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX. ", " .XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.. ", " .XXXXXXXXXXXXXXXXXX......XXXXXXXXXXXXXXXXX. ", " .XXXXXXXXXXXXXXXXX..XXXXXX..XXXXXXXXXXXXXXXX. ", " .XXXXXXXXXXXXXXXX.XXXXXXXXXX.XXXXXXXXXXXXXXX. ", " .XXXXXXXXXXXXXXXX.XXXXXXXXXXXX.XXXXXXXXXXXXXXX. ", " .XXXXXXXXXXXXXXXX.XXXXXXXXXXXX.XXXXXXXXXXXXXXX. ", " .XXXXXXXXXXXXXXXXX..XXXXXXXXXX..XXXXXXXXXXXXXXXX. ", " .XXXXXXXXXXXXXXXXX.X..XXXXXX..X.XXXXXXXXXXXXXXXX. ", " .XXXXXXXXXXXXXXXXX.XXX......XXX.XXXXXXXXXXXXXXXX. ", " .XXXXXXXXXXXXXXXXX.XXXXXXXXXXXX.XXXXXXXXXXXXXXXX. ", " .XXXXXXXXXXXXXXXXXX.XXXXXXXXXX.XXXXXXXXXXXXXXXX.. ", " ..XXXXXXXXXXXXXXXXXX..XXXXXX..XXXXXXXXXXXXXXXX. . ", " ..XXXXXXXXXXXXXXXXXXX......XXXXXXXXXXXXXXXXX.X. ", " .X.XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.XX. ", " .X.XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.XX. ", " .X.XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.XX. ", " .X..XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX..XX. ", " .XX....XXXXXXXXXXXXXXXXXXXXXXXXX...XXX. ", " ..XXXX.....XXXXXXXXXXXXXXXX....XXXX.. ", " ...XXXXXX................XXXXX... ", " .....XXXXXXXXXXXXXXXXXX.... ", " ................... ", " ...oooooooooooooooo.. ", " .+.oooooooooooooooo.+. ", " ..+++.oooooooooooooo.++. ", " ......... .+++++.oooooooooooooo.+++. .... ", " ...+++++++.. ..++++++.oooooooooooo.++++.. ...++++.. ", " .+++++++++++....@+++++++..oooooooo..++++++@....++++++++. ", " .+++++++++++++..@@+++++++++........+++++++@@..++++++++++. ", " .+++++++++++++++..@+++++++++++.++++++++++@@..++++++++++++. ", " .+++++++++++++++++..++++++++++. .+++++++++..++++++++++++++. ", " .++++++++++++++++++++++++++++. .+++++++..++++++++++++++++. ", " .++++++++++++++++++++++++++++. .+++++++++++++++++++++++++. ", " .+++++++++++++++++++++++++++. .++++++++++++++++++++++++. ", " .+@.++++++++++++++++++++++++. .++++++++++++++++++++.+++. ", " .++.++++++++++++++++++++++++. .++++++++++++++++++++.@+@. ", " .@+@.+++++++++++++++++++++++. .+++++++++++++++++++.@+@. ", " .@@+@..++++++++++++++++++++@.. ..@++++++++++++++++..@++@. ", " .@@+++++++++++++++++++++++@@. .@@+++++++++++++++++++@@. ", " ..@@@@@@@@@@@@@@@@@@@@@@@@@. .@@@@@@@@@@@@@@@@@@@@@@. ", " ........................... ....................... ", " ", " ", " "}; xscreensaver-5.36/hacks/images/noseguy/nose-l1.xpm000644 000767 000024 00000010747 10373062512 022201 0ustar00jwzstaff000000 000000 /* XPM */ static char * nose_l1_xpm[] = { "64 64 7 1", " c #000000 m #000000", ". c #000000 m #FFFFFF", "X c #BEBEBE m #000000", "o c #FFFF00 m #000000", "O c #EEEE00 m #000000", "+ c #A020F0 m #000000", "@ c #7D26CD m #000000", " ", " ", " ", " ", " ", " ..................... ", " .XXXXXXXXXXXXXXXXXXX. ", " .XXXXXXXXXXXXXXXXXXX. ", " .XXXXXXXXXXXXXXXXXXX. ", " .XXXXXXXXXXXXXXXXXXX. ", " .XXXXXXXXXXXXXXXXXXX. ", " ........................................... ", " .XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX. ", " .XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX. ", " ........................................... ", " ......OOOOOOOOOOOOOOOOOOOOOOOOOOOOO. ", " ...ooOOOO..OOOOOOOOOOOOOOOOOOOOOOOOOOO.. ", " ..oooOOOOOOO..OOOOOOOOOOOOOOOOOOOOOOOOOO. ", " .oooOOOOOOOOOOO.OOOOOOOOOOOOOOOOOOOOOOOOOO. ", " .ooOOOOOOOOOOOOO..OOOOOOOOOOOOOOOOOOOOOOOOO. ", " .ooOOOOOOOOOOOOOOO.OOOOOOOOOOOOOOOOOOOOOOOOOO. ", " .ooOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO. ", " .ooOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO.. ", " .oooOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO. ", " .ooOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO. ", " .ooOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO. ", " .ooOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO. ", " .ooOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO. ", " .ooOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO. ", " .oooOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO. ", " .oooOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO. ", " .oooOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO. ", " .ooooOOOOOOOOOOOOOOo.OOOOOOOOOOOOOOOOOOOOOOOOOO.. ", " .ooooOOOOOOOOOOoooo.OOOOOOOOOOOOOOOOOOOOOOOOOO. ", " .oooooooOOOOOoooo.OOOOOOOOOOOOOOOOOOOOOOOOOOO. ", " .oooooooooooooo.OOOOOOOOOOOOOOOOOOOOOOOOOOO.. ", " .oooooooooooo.OOOOOOOOOOOOOOOOOOOOOOOOOOOO. ", " ..oooooooo..OOOOOOOOOOOOOOOOOOOOOOOOOOOO.. ", " ........OOOOOOOOOOOOOOOOOOOOOOOOOOOOOO. ", " .............................. ", " ", " ......... ", " ........ .+++++++++. ", " ...++++++++... .++++++++++. ", " ..++++++++++++.. ..++++++++++++. ", " ..++++++++++++++++. .@++++++++++++. ", " .++++@..+++++++++++..@@++++++++++++. ", " .++++..++++++++++++++..@++++++++++++. ", " .+++@.+++++++++++++++++.@+++++++++++. ", " .+++@.+++++++++++++++++++.@++++++++++. ", " .+++@.+++++++++++++++++++..++++++++++. ", " .+++@.+++++++++++++++++++++++++++++++. ", " .++++++++++++++++++++++++++++++++++++@. ", " ..@++++++++++++++++++++++++++++++++++@. ", " .@@+++++++++++++++++++++++++++++++++@. ", " .@@++++++++++++++++++++++++++++++++@@. ", " .@@@++++++++++++++++++++++++++++++@. ", " ..@@@++++++++++++++++++++@@@++++@@. ", " ...@@@@@@@@@@@@@@@@@@@@@@@@@@@@@. ", " .............................. ", " ", " ", " ", " "}; xscreensaver-5.36/hacks/images/noseguy/nose-l2.xpm000644 000767 000024 00000010747 10373062517 022207 0ustar00jwzstaff000000 000000 /* XPM */ static char * nose_l2_xpm[] = { "64 64 7 1", " c #000000 m #000000", ". c #000000 m #FFFFFF", "X c #BEBEBE m #000000", "o c #FFFF00 m #000000", "O c #EEEE00 m #000000", "+ c #A020F0 m #000000", "@ c #7D26CD m #000000", " ", " ", " ", " ", " ", " ..................... ", " .XXXXXXXXXXXXXXXXXXX. ", " .XXXXXXXXXXXXXXXXXXX. ", " .XXXXXXXXXXXXXXXXXXX. ", " .XXXXXXXXXXXXXXXXXXX. ", " .XXXXXXXXXXXXXXXXXXX. ", " ........................................... ", " .XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX. ", " .XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX. ", " ........................................... ", " ......OOOOOOOOOOOOOOOOOOOOOOOOOOOOO. ", " ...ooOOOO..OOOOOOOOOOOOOOOOOOOOOOOOOOO.. ", " ..oooOOOOOOO..OOOOOOOOOOOOOOOOOOOOOOOOOO. ", " .oooOOOOOOOOOOO.OOOOOOOOOOOOOOOOOOOOOOOOOO. ", " .ooOOOOOOOOOOOOO..OOOOOOOOOOOOOOOOOOOOOOOOO. ", " .ooOOOOOOOOOOOOOOO.OOOOOOOOOOOOOOOOOOOOOOOOOO. ", " .ooOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO. ", " .ooOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO.. ", " .oooOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO. ", " .ooOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO. ", " .ooOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO. ", " .ooOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO. ", " .ooOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO. ", " .ooOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO. ", " .oooOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO. ", " .oooOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO. ", " .oooOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO. ", " .ooooOOOOOOOOOOOOOOo.OOOOOOOOOOOOOOOOOOOOOOOOOO.. ", " .ooooOOOOOOOOOOoooo.OOOOOOOOOOOOOOOOOOOOOOOOOO. ", " .oooooooOOOOOoooo.OOOOOOOOOOOOOOOOOOOOOOOOOOO. ", " .oooooooooooooo.OOOOOOOOOOOOOOOOOOOOOOOOOOO.. ", " .oooooooooooo.OOOOOOOOOOOOOOOOOOOOOOOOOOOO. ... ", " ..oooooooo..OOOOOOOOOOOOOOOOOOOOOOOOOOOO.. .++.. ", " ........OOOOOOOOOOOOOOOOOOOOOOOOOOOOOO. .+++++.. ", " .............................. .+++++++. ", " ...... .+++++++++. ", " ..++++++.. ..... .++++++++++@. ", " .+++++++++.. .+++++. ..... .+++++++++++@. ", " .++++++++++++. .++++++. ..+++++.. .++++++++++@@. ", " .++++++++++++++. .++++++++. .+++++++++. .@+++++++++@. ", " .++++..++++++++++. .+++++++++. ..+++++++++++..@++++++++@@. ", " .+++.@@++++++++++..@++++++++++. .+++++..+++++++.@@+++++++@. ", " .++.@+++++++++++++.@@+++++++++. ..++++.@@++++++++.@@+++++@@. ", " .++.@++++++++++++++.@+++++++++. .++++.@+++++++++++..++++@@. ", " .++.@++++++++++++++.@++++++++. .++++.@+++++++++++++++++@. ", " .@++++++++++++++++++.@+++++++. .++++.@++++++++++++++++@@. ", " .@@+++++++++++++++++++++++++. .++++.@+++++++++++++++@@. ", " .@++++++++++++++++++++++++@. .+++++++++++++++++++++@. ", " .@@+++++++++++++++++++++++@. .++++++++++++++++++++@@. ", " .@@++++++++++++++++++++++@. .+++++++++++++++++++@. ", " .@@@+++++++++++++++++++@@. ..+++++++++++++++++@@. ", " ..@@@@@@@@@@@@@@@@@@@@@. .@@@+++@@@++++++@@@. ", " ..................... ..@@@@@@@@@@@@@@.. ", " .............. ", " ", " ", " ", " ", " "}; xscreensaver-5.36/hacks/images/noseguy/nose-r1.xpm000644 000767 000024 00000010747 10373062531 022210 0ustar00jwzstaff000000 000000 /* XPM */ static char * nose_r1_xpm[] = { "64 64 7 1", " c #000000 m #000000", ". c #000000 m #FFFFFF", "X c #BEBEBE m #000000", "o c #FFFF00 m #000000", "O c #EEEE00 m #000000", "+ c #A020F0 m #000000", "@ c #7D26CD m #000000", " ", " ", " ", " ", " ", " ..................... ", " .XXXXXXXXXXXXXXXXXXX. ", " .XXXXXXXXXXXXXXXXXXX. ", " .XXXXXXXXXXXXXXXXXXX. ", " .XXXXXXXXXXXXXXXXXXX. ", " .XXXXXXXXXXXXXXXXXXX. ", " ........................................... ", " .XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX. ", " .XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX. ", " ........................................... ", " .OOOOOOOOOOOOOOOOOOOOOOOOOOOOO...... ", " ..OOOOOOOOOOOOOOOOOOOOOOOOOOO..OOOOoo... ", " .OOOOOOOOOOOOOOOOOOOOOOOOOO..OOOOOOOooo.. ", " .OOOOOOOOOOOOOOOOOOOOOOOOOO.OOOOOOOOOOOooo. ", " .OOOOOOOOOOOOOOOOOOOOOOOOO..OOOOOOOOOOOOOoo. ", " .OOOOOOOOOOOOOOOOOOOOOOOOOO.OOOOOOOOOOOOOOOoo. ", " .OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOoo. ", " ..OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOoo. ", " .OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOooo. ", " .OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOoo. ", " .OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOoo. ", " .OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOoo. ", " .OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOoo. ", " .OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOoo. ", " .OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOooo. ", " .OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOooo. ", " .OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOooo. ", " ..OOOOOOOOOOOOOOOOOOOOOOOOOO.oOOOOOOOOOOOOOOoooo. ", " .OOOOOOOOOOOOOOOOOOOOOOOOOO.ooooOOOOOOOOOOoooo. ", " .OOOOOOOOOOOOOOOOOOOOOOOOOOO.ooooOOOOOooooooo. ", " ..OOOOOOOOOOOOOOOOOOOOOOOOOOO.oooooooooooooo. ", " .OOOOOOOOOOOOOOOOOOOOOOOOOOOO.oooooooooooo. ", " ..OOOOOOOOOOOOOOOOOOOOOOOOOOOO..oooooooo.. ", " .OOOOOOOOOOOOOOOOOOOOOOOOOOOOOO........ ", " .............................. ", " ", " ......... ", " .+++++++++. ........ ", " .++++++++++. ...++++++++... ", " .++++++++++++.. ..++++++++++++.. ", " .++++++++++++@. .++++++++++++++++.. ", " .++++++++++++@@..+++++++++++..@++++. ", " .++++++++++++@..++++++++++++++..++++. ", " .+++++++++++@.+++++++++++++++++.@+++. ", " .++++++++++@.+++++++++++++++++++.@+++. ", " .++++++++++..+++++++++++++++++++.@+++. ", " .+++++++++++++++++++++++++++++++.@+++. ", " .@++++++++++++++++++++++++++++++++++++. ", " .@++++++++++++++++++++++++++++++++++@.. ", " .@+++++++++++++++++++++++++++++++++@@. ", " .@@++++++++++++++++++++++++++++++++@@. ", " .@++++++++++++++++++++++++++++++@@@. ", " .@@++++@@@++++++++++++++++++++@@@.. ", " .@@@@@@@@@@@@@@@@@@@@@@@@@@@@@... ", " .............................. ", " ", " ", " ", " "}; xscreensaver-5.36/hacks/images/noseguy/nose-r2.xpm000644 000767 000024 00000010747 10373062536 022216 0ustar00jwzstaff000000 000000 /* XPM */ static char * nose_r2_xpm[] = { "64 64 7 1", " c #000000 m #000000", ". c #000000 m #FFFFFF", "X c #BEBEBE m #000000", "o c #FFFF00 m #000000", "O c #EEEE00 m #000000", "+ c #A020F0 m #000000", "@ c #7D26CD m #000000", " ", " ", " ", " ", " ", " ..................... ", " .XXXXXXXXXXXXXXXXXXX. ", " .XXXXXXXXXXXXXXXXXXX. ", " .XXXXXXXXXXXXXXXXXXX. ", " .XXXXXXXXXXXXXXXXXXX. ", " .XXXXXXXXXXXXXXXXXXX. ", " ........................................... ", " .XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX. ", " .XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX. ", " ........................................... ", " .OOOOOOOOOOOOOOOOOOOOOOOOOOOOO...... ", " ..OOOOOOOOOOOOOOOOOOOOOOOOOOO..OOOOoo... ", " .OOOOOOOOOOOOOOOOOOOOOOOOOO..OOOOOOOooo.. ", " .OOOOOOOOOOOOOOOOOOOOOOOOOO.OOOOOOOOOOOooo. ", " .OOOOOOOOOOOOOOOOOOOOOOOOO..OOOOOOOOOOOOOoo. ", " .OOOOOOOOOOOOOOOOOOOOOOOOOO.OOOOOOOOOOOOOOOoo. ", " .OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOoo. ", " ..OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOoo. ", " .OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOooo. ", " .OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOoo. ", " .OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOoo. ", " .OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOoo. ", " .OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOoo. ", " .OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOoo. ", " .OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOooo. ", " .OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOooo. ", " .OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOooo. ", " ..OOOOOOOOOOOOOOOOOOOOOOOOOO.oOOOOOOOOOOOOOOoooo. ", " .OOOOOOOOOOOOOOOOOOOOOOOOOO.ooooOOOOOOOOOOoooo. ", " .OOOOOOOOOOOOOOOOOOOOOOOOOOO.ooooOOOOOooooooo. ", " ..OOOOOOOOOOOOOOOOOOOOOOOOOOO.oooooooooooooo. ", " ... .OOOOOOOOOOOOOOOOOOOOOOOOOOOO.oooooooooooo. ", " ..++. ..OOOOOOOOOOOOOOOOOOOOOOOOOOOO..oooooooo.. ", " ..+++++. .OOOOOOOOOOOOOOOOOOOOOOOOOOOOOO........ ", " .+++++++. .............................. ", " .+++++++++. ...... ", " .@++++++++++. ..... ..++++++.. ", " .@+++++++++++. ..... .+++++. ..+++++++++. ", " .@@++++++++++. ..+++++.. .++++++. .++++++++++++. ", " .@+++++++++@. .+++++++++. .++++++++. .++++++++++++++. ", " .@@++++++++@..+++++++++++.. .+++++++++. .++++++++++..++++. ", " .@+++++++@@.+++++++..+++++. .++++++++++@..++++++++++@@.+++. ", " .@@+++++@@.++++++++@@.++++.. .+++++++++@@.+++++++++++++@.++. ", " .@@++++..+++++++++++@.++++. .+++++++++@.++++++++++++++@.++. ", " .@+++++++++++++++++@.++++. .++++++++@.++++++++++++++@.++. ", " .@@++++++++++++++++@.++++. .+++++++@.++++++++++++++++++@. ", " .@@+++++++++++++++@.++++. .+++++++++++++++++++++++++@@. ", " .@+++++++++++++++++++++. .@++++++++++++++++++++++++@. ", " .@@++++++++++++++++++++. .@+++++++++++++++++++++++@@. ", " .@+++++++++++++++++++. .@++++++++++++++++++++++@@. ", " .@@+++++++++++++++++.. .@@+++++++++++++++++++@@@. ", " .@@@++++++@@@+++@@@. .@@@@@@@@@@@@@@@@@@@@@.. ", " ..@@@@@@@@@@@@@@.. ..................... ", " .............. ", " ", " ", " ", " ", " "}; xscreensaver-5.36/hacks/images/m6502/amiga.asm000644 000767 000024 00000006647 11112071062 021031 0ustar00jwzstaff000000 000000 ; super mega amiga emulator :) :) :) ; (c)by Thorex start: lda #$b jsr setcol jsr delay lda #$f jsr setcol jsr delay lda #$1 jsr setcol jsr delay ldx #0 cp: lda pic,x sta $200,x lda pic2,x sta $300,x lda pic3,x sta $400,x lda pic4,x sta $500,x dex bne cp rts setcol: ldx #0 s:sta $200,x sta $300,x sta $400,x sta $500,x dex bne s rts delay: ldy #29 d1: ldx #0 d2: dex bne d2 dey bne d1 rts pic: dcb 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 dcb 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 dcb 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 dcb 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 dcb 1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0 dcb 0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1 dcb 1,1,1,1,1,1,1,0,$e,$e,$e,$e,0,$f,$f,$f dcb $f,$f,$f,$f,0,0,0,$f,0,$e,$e,0,1,1,1,1 dcb 1,1,1,1,1,1,1,0,$e,$e,$e,$e,0,$f,$f,$f dcb $f,$f,$f,$f,0,$e,0,$f,0,$e,$e,$e,0,1,1,1 dcb 1,1,1,1,1,1,1,0,$e,$e,$e,$e,0,$f,$f,$f dcb $f,$f,$f,$f,0,$e,0,$f,0,$e,$e,$e,$e,0,1,1 dcb 1,1,1,1,1,1,1,0,$e,$e,$e,$e,0,$f,$f,$f dcb $f,$f,$f,$f,0,0,0,$f,0,$e,$e,$e,$e,0,1,1 dcb 1,1,1,1,1,1,1,0,$e,$e,$e,$e,0,0,0,0 dcb 0,0,0,0,0,0,0,0,0,$e,$e,$e,$e,0,1,1 pic2: dcb 1,1,1,1,1,1,1,0,$e,$e,$e,$e,$e,$e,$e,$e dcb $e,$e,$e,$e,$e,$e,$e,$e,$e,$e,$e,$e,$e,0,1,1 dcb 1,1,1,1,1,1,1,0,$e,$e,$e,$e,$e,$e,$e,$e dcb $e,$e,$e,$e,$e,$e,$e,$e,$e,$e,$e,$e,$e,0,1,1 dcb 1,1,1,1,1,1,1,0,$e,$e,$e,$e,$e,$e,$e,$e dcb $e,$e,$e,$e,$e,$e,$e,$e,$e,$e,$e,$e,$e,0,1,1 dcb 1,1,1,1,1,1,1,0,$e,$e,$e,$e,$e,$e,$e,$e dcb $e,$e,$e,$e,$e,$e,$e,$e,$e,$e,$e,$e,$e,0,1,1 dcb 1,1,1,1,1,1,1,0,$e,0,0,0,0,0,0,0 dcb 0,0,0,0,0,0,0,0,0,0,0,$e,$e,0,1,1 dcb 1,1,1,1,1,1,0,0,$e,0,0,1,1,1,1,1 dcb 1,1,1,1,1,1,1,1,1,1,0,$e,$e,0,1,1 dcb 1,1,1,1,1,0,1,0,$e,0,0,0,0,1,1,$e dcb $e,$e,1,$e,1,$e,1,$e,1,1,0,$e,$e,0,1,1 dcb 1,1,1,0,0,1,1,0,0,1,0,1,1,0,1,1 dcb 1,1,1,1,1,1,1,1,1,1,0,$e,$e,0,1,1 pic3: dcb 1,1,0,1,1,1,0,1,1,1,1,0,0,1,1,1 dcb $e,1,$e,1,$e,1,$e,1,1,1,0,$e,$e,0,1,1 dcb 1,0,1,1,0,1,1,1,1,1,1,1,0,1,1,0 dcb 1,1,1,1,1,1,1,1,1,1,0,$e,$e,0,1,1 dcb 1,0,1,0,1,1,1,1,1,1,0,0,1,1,0,$f dcb 0,1,0,1,1,1,0,0,0,1,0,$e,$e,0,1,1 dcb 1,0,1,1,1,1,1,1,1,1,0,1,1,1,1,0 dcb 0,$f,1,0,1,$f,1,0,1,1,0,$e,$e,0,1,1 dcb 1,0,1,1,1,1,1,1,1,1,1,0,0,0,0,0 dcb 0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1 dcb 1,0,1,1,1,1,1,1,1,1,1,0,1,1,0,0 dcb 0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 dcb 1,0,1,1,1,1,1,1,1,1,1,0,1,0,0,1 dcb 0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 dcb 1,0,1,1,1,1,1,1,1,1,1,0,1,0,1,1 dcb 0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 pic4: dcb 1,0,1,1,1,1,1,1,1,1,1,0,1,0,0,0 dcb 0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 dcb 1,0,1,1,1,1,1,1,0,0,0,0,0,1,1,0 dcb 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 dcb 1,0,1,1,1,1,1,1,0,1,1,1,0,0,0,1 dcb 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 dcb 1,1,0,1,1,1,1,1,0,1,1,1,0,1,1,1 dcb 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 dcb 1,1,0,1,1,1,1,1,0,1,1,1,0,1,1,1 dcb 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 dcb 1,1,0,1,1,1,1,1,0,1,1,1,0,1,1,1 dcb 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 dcb 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 dcb 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 dcb 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 dcb 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 xscreensaver-5.36/hacks/images/m6502/breakout.asm000644 000767 000024 00000014323 10762436155 021577 0ustar00jwzstaff000000 000000 ; Brick Out by Blake Ramsdell http://www.blakeramsdell.com ; A poor attempt at brick out with no player involved. Maybe someday I'll ; let you play it, or you can view this as an exercise for the reader to put ; in a paddle that is user-controlled. ; I guess this is Copyright (C) 2007 Blake Ramsdell, and you have a license to ; do whatever you want with it, just tell me what you did and give me a ; mention. If you want to sell it, and you make a billion dollars, then good ; for you. You might at least throw a party and invite me. ; The gist of it is pretty simple -- you have a ball, and the ball has an X ; and a Y velocity. When it hits something, it bounces off of it. If the thing ; that it hits is not a wall, then it erases it. Pretty dead-simple behavior. ; I don't like the vertical movement -- there's a shortcut in here somewhere ; to make it less computationally expensive I think. Right now it just does a ; two byte add and subtract of $20. ; The ball motion is also a bit weird looking. I don't know if this is an ; artifact of the simulation environment combined with a normal tearing ; artifact related to refresh or what. ; Blake Ramsdell, May 2007 init: lda #$fe sta $2 ; X velocity (0 = fast, ff = slow) ; (low bit is direction, 0 = down or right, 1 = up or left) lda #$ee sta $3 ; Y velocity drawbox: lda #0 ; Use $0-$1 as a screen address for drawing the field sta $0 lda #2 sta $1 ldx #$20 ; Loop $20 times boxloop: lda #2 ; Line color (red) sta $1ff,x ; Top line sta $5df,x ; Bottom line ldy #0 sta ($0),y ; Left line ldy #$1f sta ($0),y ; Right line cpx #$1 ; If we're just before the bottom line... beq noblocks ; Don't draw any blocks there lda #3 ; First block for this row, Cyan in color ldy #$17 ; It's at X position $17 sta ($0),y ; Draw it lda #4 ; Second block for this row, Purple in color iny ; It's at the next X position sta ($0),y ; Draw it lda #5 ; Third block for this row, Green in color iny ; It's at the next X position sta ($0),y ; Draw it lda #6 ; Fourth block for this row, Blue in color iny ; It's at the next X position sta ($0),y ; Draw it noblocks: clc ; Get ready to increment the row, clear the carry for add lda $0 ; Get the low byte adc #$20 ; Add $20 to it for the next row sta $0 ; Put it back lda $1 ; Get the high byte adc #0 ; Factor in the carry sta $1 ; Put it back dex ; Decrement the loop counter bne boxloop ; Do it again unless it's zero ldx $2 ; Load the X velocity ldy $3 ; Load the Y velocity lda #$44 ; Pick a start point sta $0 ; Ball position low lda #$02 sta $1 ; Ball position high drawball: txa ; Preserve X pha lda #1 ; Ball color (white) ldx #0 ; Clear X for indirect addressing for writing to screen sta ($0,x) ; Draw the ball pla ; Restore X tax decloop: dex ; Decrement the X velocity beq updatexpos ; If it's zero, time to adjust X dey ; Decrement the Y velocity bne decloop ; If it's not zero, loop, otherwise fall through to adjust Y updateypos: txa ; Preserve X pha jsr clearball ; Put background over the current ball position updateyposnoclear: lda $3 ; Get the Y velocity and #1 ; See if it's down bne moveup ; If not, then it's up, otherwise fall through to down movedown: clc ; Prepare for moving to the next Y line and doing the add lda $0 ; Low byte of the current ball position adc #$20 ; Next row sta $0 ; Put it back bcc ycollision ; If no carry, go on to check for collision inc $1 ; Had a carry, fix the high byte of the address bne ycollision ; Z flag is always clear ($1 will never be zero) moveup: sec ; Prepare for moving to the previous Y line and subtracting lda $0 ; Low byte of the current ball position sbc #$20 ; Previous row sta $0 ; Put it back lda $1 ; High byte sbc #$0 ; Factor out the carry sta $1 ; Put it back ycollision: ldx #0 ; Prepare for indirect read lda ($0,x) ; Get the current pixel at the new ball position bne ycollided ; If it's not zero (the background color) then we hit ldy $3 ; Otherwise, load up the current Y velocity pla ; Restore the X velocity tax jmp drawball ; Back to the top ycollided: cmp #$2 ; Border color? beq ycollided2 ; If so, then we just bounce, don't eat a brick ; Erase brick lda #0 ; Background color (black) sta ($0,x) ; Erase it ycollided2: lda #1 ; Get ready to change direction eor $3 ; Flip the low bit on the Y velocity (change direction) sta $3 ; Put it back jmp updateyposnoclear ; Go back to make sure we didn't hit anything else updatexpos: jsr clearball ; Put background over the current ball position updatexposnoclear: lda $2 ; Get the current X velocity and #1 ; See if it's right by testing the low bit bne moveleft ; If not, move left moveright: inc $0 ; Move right bne xcollision ; Z flag is always clear moveleft: dec $0 ; Move left xcollision: ldx #0 ; Prepare for indirect read lda ($0,x) ; Get the current pixel at the new ball position bne xcollided ; If it's not zero (the background color) then we hit ldx $2 ; Otherwise, load up the current X velocity jmp drawball ; Back to the top xcollided: cmp #$2 ; Border color? beq xcollided2 ; If so, then we just bounce, don't eat a brick ; Erase brick lda #0 ; Background color (black) sta ($0,x) ; Erase it xcollided2: lda #1 ; Get ready to change direction eor $2 ; Flip the low bit on the X velocity (change direction) sta $2 ; Put it back jmp updatexposnoclear ; Go back to make sure we didn't hit anything else clearball: lda #0 ; Background color (black) tax ; Clear X for indirect sta ($0,x) ; Black out the ball rts ; Return to caller xscreensaver-5.36/hacks/images/m6502/byterun.asm000644 000767 000024 00000004210 10762436155 021445 0ustar00jwzstaff000000 000000 ; testing byterun compression start: lda #logo sta $1 lda #$00 sta $2 lda #$02 sta $3 decrunchLoop: lda $3 cmp #$6 bne moreWork rts moreWork: ldy #0 lda ($0),y cmp #$ff bne notCrunched iny lda ($0),y ; repeat # sta $4 iny lda ($0),y ; color ldy $4 drawLoop: ldx #0 sta ($2,x) jsr nextPixel dey bne drawLoop jsr getNextByte jsr getNextByte jmp decrunchLoop notCrunched: ldx #0 sta ($2,x) jsr nextPixel jsr getNextByte jmp decrunchLoop getNextByte: inc $0 lda $0 cmp #$00 bne notHi inc $1 notHi: rts nextPixel: inc $2 ldx $2 cpx #$00 bne notNextLine inc $3 notNextLine: rts logo: dcb $ff,43,1,$f,$f,$f,$c,$f,$f,$f,$ff,24,1,$c,$f,$c,0 dcb $c,$f,$c,$ff,24,1,0,$f,$c,0,$c,$f,$c,$ff,24,1 dcb $c,$f,$c,0,$c,$f,$c,$ff,24,1,0,$f,$c,0,$c,$f,$c dcb $ff,24,1,$c,$f,0,0,$c,$f,$c,$ff,24,1,0,$f,$c,0 dcb $c,$f,$c,$ff,24,1,0,$f,$c,0,$c,$f,0,$ff,24,1 dcb 0,$f,$c,0,$c,$f,0,$ff,23,1,$f,0,$f,$c,0,$c,$f,0,$f dcb $ff,22,1,$c,0,1,$c,0,$c,$f,0,$c,$ff,21,1 dcb $f,0,0,1,0,0,$c,1,0,0,$ff,21,1,$c,0,$c,1,$c,0 dcb $c,1,$c,0,$c,$ff,19,1,$f,0,0,$f,1,$c,0 dcb $c,1,$f,0,0,$f,$ff,17,1,$f,0,0,0,1,1,$c,0 dcb $c,1,1,0,0,0,$ff,16,1,$f,0,0,0,$f,1,1,0,0 dcb $c,1,1,$f,0,0,0,$f,$ff,13,1 dcb $c,0,0,0,$c,1,1,1,$c,0,$c,1,1,1,$c,0,0,0,$c dcb $ff,10,1,$c,0,0,0,0,$c,1,1,1,1,0,0 dcb $c,1,1,1,1,0,0,0,0,0,$c,$ff,8,1 dcb 0,0,0,0,$c,1,1,1,1,1,0,0 dcb $c,1,1,1,1,1,$c,0,0,0,0,1,1,1,1,1 dcb 1,1,1,1,0,0,$c,1,1,1,1,1,1,1,$c,0 dcb $c,1,1,1,1,1,1,$f,$c,0,0,$ff,18,1,$f dcb $ff,53,1,0,$f,1,0,0,0,0,0,$f,1,$c dcb $c,1,1,1,$c,0,0,0,1,1,0,$f,$f,1,1,1 dcb 1,1,1,1,$c,0,0,1,1,1,0,$f,1,1,$f,0 dcb 0,$f,1,1,0,$f,1,$c,$c,1,0,$f,1,1,1,1 dcb 1,1,1,1,0,$f,0,$f,1,1,0,$f,1,1,$f,$c dcb $c,$c,1,1,0,1,1,$f,0,1,0,$f,1,1,1,1 dcb 1,1,1,1,0,1,$c,$f,1,1,$c,$f,1,1,0,$f dcb $f,0,1,1,0,$f,$f,0,$f,1,0,$f,1,1,1,1 dcb 1,1,1,$c,0,$c,0,0,1,1,0,$f,1,1,0,$c dcb $c,0,$f,1,0,$f,0,$f,1,1,0,$f,1,1,1,1 dcb 1,1,1,0,$c,$f,$f,0,$f,1,$c,$f,1,$c,$c,$f dcb $f,$c,$c,1,0,1,$f,$c,1,1,0,$f,1,1,1,1 dcb 1,1,$f,0,1,1,1,$c,$c,1,0,$f,1,0,$f,1 dcb 1,$f,0,1,0,$f,1,0,$f,1,0,$f,$ff,16,1 dcb $f,$ff,5,1,$f,1,1,1,$f,$ff,38,1 xscreensaver-5.36/hacks/images/m6502/cellular-30.asm000644 000767 000024 00000001007 10762436155 022001 0ustar00jwzstaff000000 000000 ; Rule 30 cellular automata ; by D.S. lda #1 sta $20f l3: lda #2 sta 3 sta 5 sta 7 lda #1 sta 9 sta 6 lda #255 sta 8 lda #0 sta 2 lda #32 sta 4 ldx #30 l1: ldy #31 l2: lda ($2),y ora ($6),y eor ($8),y sta ($4),y dey bpl l2 lda $2 adc #32 sta $2 lda $3 adc #0 sta $3 lda $4 adc #32 sta $4 lda $5 adc #0 sta $5 lda $6 adc #32 sta $6 lda $7 adc #0 sta $7 lda $8 adc #32 sta $8 lda $9 adc #0 sta $9 dex bpl l1 ldy #31 l4: lda ($2),y sta $200,y dey bpl l4 jmp l3 xscreensaver-5.36/hacks/images/m6502/cellular-600.asm000644 000767 000024 00000004443 10762436155 022073 0ustar00jwzstaff000000 000000 ; Code 600 cellular automata - by D.S. lda #1 sta $22f l3: ldy #29 l2: lda $220,y adc $221,y adc $222,y tax lda rule,x sta $201,y dey bpl l2 ldy #$c0 sec ll2: lda $503,y sta $523,y sta $53b,y lda $504,y sta $524,y sta $53a,y lda $505,y sta $525,y sta $539,y lda $506,y sta $526,y sta $538,y lda $507,y sta $527,y sta $537,y lda $508,y sta $528,y sta $536,y lda $509,y sta $529,y sta $535,y lda $50a,y sta $52a,y sta $534,y lda $50b,y sta $52b,y sta $533,y lda $50c,y sta $52c,y sta $532,y lda $50d,y sta $52d,y sta $531,y lda $50e,y sta $52e,y sta $530,y lda $50f,y sta $52f,y tya adc #$df tay bcs ll2 ldy #$e0 sec ll3: lda $403,y sta $423,y sta $43b,y lda $404,y sta $424,y sta $43a,y lda $405,y sta $425,y sta $439,y lda $406,y sta $426,y sta $438,y lda $407,y sta $427,y sta $437,y lda $408,y sta $428,y sta $436,y lda $409,y sta $429,y sta $435,y lda $40a,y sta $42a,y sta $434,y lda $40b,y sta $42b,y sta $433,y lda $40c,y sta $42c,y sta $432,y lda $40d,y sta $42d,y sta $431,y lda $40e,y sta $42e,y sta $430,y lda $40f,y sta $42f,y tya adc #$df tay bcs ll3 ldy #$e0 sec ll4: lda $303,y sta $323,y sta $33b,y lda $304,y sta $324,y sta $33a,y lda $305,y sta $325,y sta $339,y lda $306,y sta $326,y sta $338,y lda $307,y sta $327,y sta $337,y lda $308,y sta $328,y sta $336,y lda $309,y sta $329,y sta $335,y lda $30a,y sta $32a,y sta $334,y lda $30b,y sta $32b,y sta $333,y lda $30c,y sta $32c,y sta $332,y lda $30d,y sta $32d,y sta $331,y lda $30e,y sta $32e,y sta $330,y lda $30f,y sta $32f,y tya adc #$df tay bcs ll4 ldy #$e0 sec ll1: lda $203,y sta $223,y sta $23b,y lda $204,y sta $224,y sta $23a,y lda $205,y sta $225,y sta $239,y lda $206,y sta $226,y sta $238,y lda $207,y sta $227,y sta $237,y lda $208,y sta $228,y sta $236,y lda $209,y sta $229,y sta $235,y lda $20a,y sta $22a,y sta $234,y lda $20b,y sta $22b,y sta $233,y lda $20c,y sta $22c,y sta $232,y lda $20d,y sta $22d,y sta $231,y lda $20e,y sta $22e,y sta $230,y lda $20f,y sta $22f,y tya adc #$df tay bcs ll1 jmp l3 ; Rules, uncomment only one line of the following. rule: dcb 0,2,0,1,1,2,0 ; CODE 600 ; dcb 0,2,1,0,2,0,0 ; CODE 177 ; dcb 0,1,2,0,2,0,1; CODE 912 xscreensaver-5.36/hacks/images/m6502/colors.asm000644 000767 000024 00000000752 11076310430 021247 0ustar00jwzstaff000000 000000 ; submitted by Anonymous jmp $700 *=$700 ldx #0 ldy #0 ;init screen lda #0 sta $0 sta $3 lda #2 sta $1 loop: lda colors,x bpl ok inc $0 ldx #0 lda colors,x ok: inx sta ($0),y iny bne ok2 inc $1 lda $1 cmp #6 beq end ok2: jmp loop end: inc $3 lda $3 and #$3f tax ldy #0 lda #2 sta $1 sty $0 jmp loop colors: dcb 0,2,0,2,2,8,2,8,8,7,8,7,7,1,7,1,1,7,1,7,7,8,7,8 dcb 8,2,8,2,2,0,2,0,2,2,8,2,8,8,7,8,7,7,1,7,1,1,1,1 dcb 1,1,1,1,7,1,7,7,8,7,8,8,2,8,2,2,255 xscreensaver-5.36/hacks/images/m6502/crunch6502.asm000644 000767 000024 00000017353 10762436155 021570 0ustar00jwzstaff000000 000000 ;; Show "6502" on the screen waving up and down. ;; Jeremy English 29-December-2007 ;; ;; Each digit is stored as a pattern of vertical bits. ;; For example: ;; ;; 111111 This is the digit six. We think of the digit ;; 111111 by it's column pattern. The column patterns ;; 110000 are labeled at the bottom of the example. ;; 110000 Pattern B is 1100110011. The basic algorithm ;; 111111 is that we get the pattern, paint the first ;; 111111 bit (1 foreground, 0 background) then dec y ;; 110011 and get the next bit. ;; 110011 ;; 111111 The pattern for each digit is: ;; 111111 6 = AABBCC ;; ------ 5 = DDBBCC ;; AABBCC 0 = AAEEAA ;; 2 = CCBBDD ;; Addresses $0 and $1 are used by the paint subroutine. ;; Addresses $2 through $6 are used by the display pattern subroutine ;; Address $7 is used in the main loop ;; Address $8 through $1a are used for the start positions ;; Address $1b is used by the display pattern subroutine ;; Address $1c is used as the color row offset. ;; Addresses $d0 through $ef store the font table jmp init_font_table start: ;; Initialize the pointers to the start position. lda #y_start_pos1 sta $c lda #y_start_pos2 sta $e lda #y_start_pos3 sta $10 lda #y_start_pos4 sta $12 lda #y_start_pos5 sta $14 lda #y_start_pos4 sta $16 lda #y_start_pos3 sta $18 lda #y_start_pos2 sta $1a lda #0 ; start position to use sta $8 main_loop: inc $1c ; increment the color offset. inc $1d ; increment the starting x position ldy $8 ; load the current start position index ldx $b,y ; get the lsb from the table txa sta $9 ; store the msb of the start position pointer iny ; move to the next position in the table ldx $b,y ; get the msb from the table txa sta $a ; store the lsb of the start position pointer iny ; move the index up by one tya cmp #$10 ; have we looked at all 16 start positions? bne store_idx ; if not then keep the index and store it lda #0 ; set the index back to zero store_idx: sta $8 ; save the index back in memory ldy #0 lda #$ff sta $4 ; initialize the column to FF display_loop: inc $4 ; increment the column ldx $d0,y ; load the lsb from the font table stx $2 iny ldx $d0,y ; load the msb from the font table stx $3 sty $7 ; save y in memory jsr dis_pat ; Jump to the display pattern subroutine. inc $4 ; increment the column jsr dis_pat ; Each pattern gets painted twice so we have a thicker font ldy $7 ; get y out of memory iny ; increment the index tya cmp #$20 ; Did we display all of the columns? bne display_loop ;if not continue jmp main_loop rts init_font_table: ;;Setup a table in the zero page that contains the string "6502" lda #pattern_a sta $d1 lda #pattern_b sta $d3 lda #pattern_c sta $d5 lda #pattern_null sta $d7 lda #pattern_d sta $d9 lda #pattern_b sta $db lda #pattern_c sta $dd lda #pattern_null sta $df lda #pattern_a sta $e1 lda #pattern_e sta $e3 lda #pattern_a sta $e5 lda #pattern_null sta $e7 lda #pattern_c sta $e9 lda #pattern_b sta $eb lda #pattern_d sta $ed lda #pattern_null sta $ef jmp start ;; Display a pattern on the screen. The pattern to use is ;; stored at $2 and $3. The current column is stored at $4. dis_pat: ldy $4 ; Load the current column into y lda ($9),y ; Get the start position for y tay sty $5 ; Store the starting position in memory ldy #0 ; We have 12 bits that need to be painted dis_pat_loop: lda ($2),y ; get a bit from the pattern pha ; save the color on the stack tya ; move the index into the accumulator clc ; clear the carry adc $5 ; add the starting position to the index sty $6 ; store the index tay ; The calculated y position ldx $4 ; The x position is the current column pla ; pop the color off of the stack beq go_paint ; black just paint it clc ; get rid of any carry bit sty $1b ; save the y coordinate tya clc adc $1c ; add the color offset and #$7 ; make sure the look up is in range tay ; move the new index into y so we can look up the color lda color_row,y ; if not black get the row color ldy $1b ; restore the y coordinate go_paint: jsr paint ; paint the pixel on the screen ldy $6 ; get the index out of memory iny ; increment the index tya cmp #12 ; Have we looked at all of the bits? bne dis_pat_loop ; if not then continue looking rts ; else return from the subroutine ;; Paint - Put a pixel on the screen by using the x registry for ;; the x position, the y registry for the y position and ;; the accumulator for the color. paint: pha ; Save the color lda yl,y ; Get the LSB of the memory address for y sta $0 ; Store it first lda yh,y ; Get the MSB of the memory address for y sta $1 ; Store it next txa ; We want x in the y registry so we transfer it to A tay ; and then A into y. pla ; Pop the color off of the stack sta ($0),y ; Store the color at the correct y + x address. rts ; return from the subroutine. ;; Paint uses the following two tables to look up the ;; correct address for a y coordinate between ;; 0 and 31. ;; Y cord MSB yh: dcb $02, $02, $02, $02, $02, $02, $02, $02 dcb $03, $03, $03, $03, $03, $03, $03, $03 dcb $04, $04, $04, $04, $04, $04, $04, $04 dcb $05, $05, $05, $05, $05, $05, $05, $05 ;; Y cord LSB yl: dcb $00, $20, $40, $60, $80, $a0, $c0, $e0 dcb $00, $20, $40, $60, $80, $a0, $c0, $e0 dcb $00, $20, $40, $60, $80, $a0, $c0, $e0 dcb $00, $20, $40, $60, $80, $a0, $c0, $e0 ;; A zero is on the end of each pattern to clean up ;; residue left by waving. pattern_a: dcb 0,1,1,1,1,1,1,1,1,1,1,0 pattern_b: dcb 0,1,1,0,0,1,1,0,0,1,1,0 pattern_c: dcb 0,1,1,0,0,1,1,1,1,1,1,0 pattern_d: dcb 0,1,1,1,1,1,1,0,0,1,1,0 pattern_e: dcb 0,1,1,0,0,0,0,0,0,1,1,0 pattern_null: dcb 0,0,0,0,0,0,0,0,0,0,0,0 ;; Table that store the current start position ;; of each y column. y_start_pos1: dcb 10,10,9,9,8,8,7,7,6,6,7,7,8,8,9,9,10,10,9,9,8,8,7,7 dcb 6,6,7,7,8,8 y_start_pos2: dcb 9,9,8,8,8,8,8,8,7,7,8,8,8,8,8,8,9,9,8,8,8,8,8,8 dcb 7,7,8,8,8,8 y_start_pos3: dcb 8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8 dcb 8,8,8,8,8,8 y_start_pos4: dcb 7,7,8,8,8,8,8,8,9,9,8,8,8,8,8,8,7,7,8,8,8,8,8,8 dcb 9,9,8,8,8,8 y_start_pos5: dcb 6, 6,7,7,8,8,9,9,10,10,9,9,8,8,7,7, 6, 6,7,7,8,8,9,9 dcb 10,10,9,9,8,8 color_row: dcb $7,$8,$9,$2,$4,$6,$e,$3,$d,$5 xscreensaver-5.36/hacks/images/m6502/demoscene.asm000644 000767 000024 00000020073 10762436155 021724 0ustar00jwzstaff000000 000000 start: ldx #0 c:lda bottombar,x cmp #$ff beq init sta $4e0,x sta $5e0,x inx jmp c init: jsr initDraw lda #0 sta $10 ; scrptr sta $11 ; txtptr loop: jsr drawMain jsr putfont jsr scrollarea jmp loop scrollarea: ldx #0 g:lda $521,x sta $520,x lda $541,x sta $540,x lda $561,x sta $560,x lda $581,x sta $580,x lda $5a1,x sta $5a0,x inx cpx #31 bne g rts putfont: lda $10 ; scrptr cmp #0 bne noNext inc $11 ldx $11 lda scrolltext,x tax lda fontSize,x sta $10 noNext: dec $10 ldx $11 lda scrolltext,x cmp #$ff bne notResetText lda #0 sta $10 sta $11 rts notResetText: asl tax lda fontlookup,x sta $2 inx lda fontlookup,x sta $3 lda #fonts adc $3 sta $1 ldy $10 lda ($00),y sta $53f tya clc adc #6 tay lda ($00),y sta $55f tya clc adc #6 tay lda ($00),y sta $57f tya clc adc #6 tay lda ($00),y sta $59f tya clc adc #6 tay lda ($00),y sta $5bf rts initDraw: lda #picture sta $21 lda #$00 sta $22 lda #$02 sta $23 ldx #$0 rts drawMain: ldx #0 lda ($20,x) cmp #$ff beq done sta ($22,x) inc $20 lda $20 cmp #$00 bne n1 inc $21 n1: inc $22 lda $22 cmp #$00 bne done lda $23 cmp #$05 beq done inc $23 done: rts picture: dcb 0,0,0,0,0,0,0,0,0,$b,$b,$c,$f,$f,$f,$f dcb $f,$b,0,0,0,$b,$b,$c,$c,$f,$f,$b,0,0,0,0 dcb 0,0,0,0,0,0,0,0,0,$b,$c,$c,$f,$c,$f,$f dcb $b,$b,$b,$b,$b,0,$b,$b,$c,$f,$f,$c,0,0,0,0 dcb 0,0,0,0,0,0,0,$b,0,$c,$b,$f,$c,$f,$f,$c dcb $c,$b,0,$b,$c,$c,$c,$f,$f,1,$f,$c,$b,0,0,0 dcb 0,0,0,0,0,0,0,0,$b,$b,$c,$c,$c,$f,$f,$f dcb $c,$c,$c,$c,$c,$c,$f,$c,$f,$f,$f,$f,$b,0,0,0 dcb 0,0,0,0,0,0,0,$b,0,0,$b,$c,$c,$f,$f,$f dcb $f,$c,$f,$f,$f,$f,$f,$f,$f,1,$f,$f,$c,0,0,0 dcb 0,0,0,0,0,0,0,0,0,$b,$b,$b,$c,$f,$f,1 dcb $f,$f,$c,$f,$f,$f,1,$f,$f,$f,$f,$f,$f,0,0,0 dcb 0,0,0,0,0,0,0,0,0,$b,$b,$b,$b,$c,$f,1 dcb $f,$f,$f,$f,$f,$f,$f,$f,1,$f,$f,$f,$f,$b,0,0 dcb 0,0,0,0,0,0,0,0,$b,0,$b,$c,$b,$c,$c,1 dcb 1,$f,1,$f,1,$f,1,$f,$f,1,$f,$f,1,$b,0,0 dcb 0,0,0,0,0,0,0,$b,$b,$b,$c,$c,$b,$c,$f,1 dcb 1,1,$f,$f,1,$f,$f,1,$f,$f,$f,$f,1,$c,0,0 dcb 0,0,0,0,0,0,0,$b,$b,$c,$c,$c,$b,$c,$c,$f dcb 1,1,1,$f,$f,1,$f,1,$f,1,$f,$f,1,$c,0,0 dcb 0,0,0,0,0,$b,$b,$b,$c,$c,$c,$f,$c,$c,$f,$f dcb 1,1,1,1,$f,$f,$f,1,$f,1,$f,$f,$f,$f,0,0 dcb 0,0,0,0,0,0,$b,$c,$c,$c,$f,$c,$f,$c,$f,$f dcb 1,1,1,1,1,$f,$f,1,$f,$f,$f,$f,1,$f,$b,0 dcb 0,0,0,0,$b,$b,$b,$c,$c,$f,$c,$f,$f,$c,$f,$f dcb 1,1,1,1,1,$f,$f,$f,1,$f,$f,$f,1,$c,$b,$b dcb 0,0,0,0,$b,$b,$c,$f,$c,$f,$f,$f,$f,$f,$c,$f dcb 1,1,1,1,1,$f,$f,$f,1,$f,$f,$f,$f,$f,$b,$b dcb 0,0,0,0,$b,$c,$c,$c,$f,$f,$f,$f,$f,$f,$f,$f dcb $f,1,1,1,$f,$b,$f,$f,$f,1,$f,$f,$f,$f,$b,$b dcb 0,0,0,0,$b,$c,$c,$f,$c,$f,$f,$f,$f,$f,$f,$f dcb $f,$f,$f,$c,$b,$f,$f,1,$f,$f,$f,$f,$f,$f,$c,$b dcb 0,0,0,0,$b,$b,$c,$c,$f,$c,$f,$f,$f,$f,$f,$f dcb $c,$c,$b,$c,$c,$f,$f,1,$c,$c,$f,$f,$f,$f,$c,$b dcb 0,0,0,0,$b,$b,$c,$c,$c,$f,$f,$f,$f,$f,$f,$f dcb $f,$f,$f,$f,$f,1,$f,$c,$b,$f,$c,$f,$c,$f,$c,$b dcb 0,0,0,0,0,$b,$c,$c,$c,$c,$f,$f,$f,$f,$f,$f dcb $f,$f,$f,$f,$f,$c,$b,$c,$c,$c,$f,$f,$c,$f,$c,$c dcb 0,0,0,0,0,$b,$b,$c,$c,$c,$c,$c,$f,$f,$f,$f dcb $f,$f,$f,$c,$b,$b,$c,$c,$c,$f,$c,$f,$f,$f,$c,$b dcb 0,0,0,0,0,$b,$b,$b,$b,$c,$c,$f,$c,$f,$f,$f dcb $c,$c,$b,$b,$b,$c,$b,$b,$c,$c,$f,$c,$c,$f,$c,$c dcb 0,0,0,0,0,0,$b,$b,$c,$b,$c,$c,$c,$c,$c,$c dcb $b,$b,$b,$b,$c,$b,$b,$c,$c,$f,$f,$f,$c,$c,$c,$b dcb 0,0,0,0,0,0,0,0,$b,$b,$b,$c,$c,$c,$c,$c dcb $c,$c,$b,$b,$b,$b,$c,$c,$f,$f,$f,$c,$c,$c,$c,$c dcb $ff fontSize: dcb 5,5,5,5,5,5,5,5 ;abcdefgh dcb 2,5,5,5,6,6,5,5 ;ijklmnop dcb 6,5,5,4,5,6,6,6 ;qrstuvwx dcb 6,5,2,3 ;yz.[SPACE] ; ; a=0, b=1, c=2, d=3.... ; scrolltext: dcb 0 dcb 14,13,11,24,27 ; "only " dcb 03,04,15,19,07,27 ; "depth " dcb 12,0,10,4,18,27 ; "makes " dcb 8,19,27 ; "it " dcb 15,14,18,18,8,1,11,4 ; "possible" dcb 26,26,26 ; "..." dcb 19,7,8,18,27 ; "this " dcb 8,18,27 ; "is " dcb 19,7,4,27 ; "the " dcb 5,8,17,18,19,27 ; "first " dcb 3,4,12,14,27 ; "demo " dcb 12,0,3,4,27 ; "made " dcb 8,13,27 ; "in " dcb 19,7,8,18,27 ; "this " dcb 4,13,21,26,26,26,26,27 ; "env.... " dcb 7,14,15,4,27 ; "hope " dcb 24,14,20,27 ; "you " dcb 11,8,10,4,27 ; "like " dcb 8,19,26,26,26,27,27 ; "it... " dcb 22,22,22,26 ; "www." dcb 3,4,15,19,7,26 ; "depth." dcb 14,17,6,27,27,27,27,27 ; "org " dcb $ff ; end of text fontlookup: dcb $00,$00 ;a dcb $20,$00 ;b dcb $40,$00 ;c dcb $60,$00 ;d dcb $80,$00 ;e dcb $a0,$00 ;f dcb $c0,$00 ;g dcb $e0,$00 ;h dcb $00,$01 ;i dcb $20,$01 ;j dcb $40,$01 ;k dcb $60,$01 ;l dcb $80,$01 ;m dcb $a0,$01 ;n dcb $c0,$01 ;o dcb $e0,$01 ;p dcb $00,$02 ;q dcb $20,$02 ;r dcb $40,$02 ;s dcb $60,$02 ;t dcb $80,$02 ;u dcb $a0,$02 ;v dcb $c0,$02 ;w dcb $e0,$02 ;x dcb $00,$03 ;y dcb $20,$03 ;z dcb $40,$03 ;. dcb $60,$03 ;" " fonts: dcb 0,1,1,0,0,0 dcb 1,0,0,1,0,0 dcb 1,1,1,1,0,0 dcb 1,0,0,1,0,0 dcb 1,0,0,1,0,0 dcb 0,0 dcb 0,1,1,1,0,0 dcb 1,0,0,1,0,0 dcb 0,1,1,1,0,0 dcb 1,0,0,1,0,0 dcb 0,1,1,1,0,0 dcb 0,0 dcb 0,1,1,0,0,0 dcb 1,0,0,1,0,0 dcb 0,0,0,1,0,0 dcb 1,0,0,1,0,0 dcb 0,1,1,0,0,0 dcb 0,0 dcb 0,1,1,1,0,0 dcb 1,0,0,1,0,0 dcb 1,0,0,1,0,0 dcb 1,0,0,1,0,0 dcb 0,1,1,1,0,0 dcb 0,0 dcb 1,1,1,1,0,0 dcb 0,0,0,1,0,0 dcb 0,1,1,1,0,0 dcb 0,0,0,1,0,0 dcb 1,1,1,1,0,0 dcb 0,0 dcb 1,1,1,1,0,0 dcb 0,0,0,1,0,0 dcb 0,1,1,1,0,0 dcb 0,0,0,1,0,0 dcb 0,0,0,1,0,0 dcb 0,0 dcb 1,1,1,0,0,0 dcb 0,0,0,1,0,0 dcb 1,1,0,1,0,0 dcb 1,0,0,1,0,0 dcb 1,1,1,0,0,0 dcb 0,0 dcb 1,0,0,1,0,0 dcb 1,0,0,1,0,0 dcb 1,1,1,1,0,0 dcb 1,0,0,1,0,0 dcb 1,0,0,1,0,0 dcb 0,0 dcb 1,0,0,0,0,0 dcb 1,0,0,0,0,0 dcb 1,0,0,0,0,0 dcb 1,0,0,0,0,0 dcb 1,0,0,0,0,0 dcb 0,0 dcb 1,0,0,0,0,0 dcb 1,0,0,0,0,0 dcb 1,0,0,0,0,0 dcb 1,0,0,1,0,0 dcb 0,1,1,0,0,0 dcb 0,0 dcb 1,0,0,1,0,0 dcb 0,1,0,1,0,0 dcb 0,0,1,1,0,0 dcb 0,1,0,1,0,0 dcb 1,0,0,1,0,0 dcb 0,0 dcb 0,0,0,1,0,0 dcb 0,0,0,1,0,0 dcb 0,0,0,1,0,0 dcb 0,0,0,1,0,0 dcb 1,1,1,1,0,0 dcb 0,0 dcb 1,0,0,0,1,0 dcb 1,1,0,1,1,0 dcb 1,0,1,0,1,0 dcb 1,0,0,0,1,0 dcb 1,0,0,0,1,0 dcb 0,0 dcb 1,0,0,0,1,0 dcb 1,0,0,1,1,0 dcb 1,0,1,0,1,0 dcb 1,1,0,0,1,0 dcb 1,0,0,0,1,0 dcb 0,0 dcb 0,1,1,0,0,0 dcb 1,0,0,1,0,0 dcb 1,0,0,1,0,0 dcb 1,0,0,1,0,0 dcb 0,1,1,0,0,0 dcb 0,0 dcb 0,1,1,1,0,0 dcb 1,0,0,1,0,0 dcb 0,1,1,1,0,0 dcb 0,0,0,1,0,0 dcb 0,0,0,1,0,0 dcb 0,0 dcb 0,1,1,0,0,0 dcb 1,0,0,1,0,0 dcb 1,0,0,1,0,0 dcb 0,1,0,1,0,0 dcb 1,0,1,0,0,0 dcb 0,0 dcb 0,1,1,1,0,0 dcb 1,0,0,1,0,0 dcb 0,1,1,1,0,0 dcb 0,1,0,1,0,0 dcb 1,0,0,1,0,0 dcb 0,0 dcb 1,1,1,0,0,0 dcb 0,0,0,1,0,0 dcb 0,1,1,0,0,0 dcb 1,0,0,0,0,0 dcb 0,1,1,1,0,0 dcb 0,0 dcb 1,1,1,0,0,0 dcb 0,1,0,0,0,0 dcb 0,1,0,0,0,0 dcb 0,1,0,0,0,0 dcb 0,1,0,0,0,0 dcb 0,0 dcb 1,0,0,1,0,0 dcb 1,0,0,1,0,0 dcb 1,0,0,1,0,0 dcb 1,0,0,1,0,0 dcb 1,1,1,0,0,0 dcb 0,0 dcb 1,0,0,0,1,0 dcb 1,0,0,0,1,0 dcb 1,0,0,0,1,0 dcb 0,1,0,1,0,0 dcb 0,0,1,0,0,0 dcb 0,0 dcb 1,0,0,0,1,0 dcb 1,0,0,0,1,0 dcb 1,0,1,0,1,0 dcb 1,1,0,1,1,0 dcb 1,0,0,0,1,0 dcb 0,0 dcb 1,0,0,0,1,0 dcb 0,1,0,1,0,0 dcb 0,0,1,0,0,0 dcb 0,1,0,1,0,0 dcb 1,0,0,0,1,0 dcb 0,0 dcb 1,0,0,0,1,0 dcb 0,1,0,1,0,0 dcb 0,0,1,0,0,0 dcb 0,0,1,0,0,0 dcb 0,0,1,0,0,0 dcb 0,0 dcb 1,1,1,1,0,0 ; z dcb 1,0,0,0,0,0 dcb 0,1,1,0,0,0 dcb 0,0,0,1,0,0 dcb 1,1,1,1,0,0 dcb 0,0 dcb 0,0,0,0,0,0 ; . dcb 0,0,0,0,0,0 dcb 0,0,0,0,0,0 dcb 0,0,0,0,0,0 dcb 1,0,0,0,0,0 dcb 0,0 dcb 0,0,0,0,0,0 ; " " dcb 0,0,0,0,0,0 dcb 0,0,0,0,0,0 dcb 0,0,0,0,0,0 dcb 0,0,0,0,0,0 dcb 0,0 bottombar: dcb $b,$9,$b,9,8,9,8,$a,8,$a,7,$a,7,1,7,1,1 dcb 7,1,7,$a,7,$a,8,$a,8,9,8,9,$b,9,$b dcb $ff xscreensaver-5.36/hacks/images/m6502/disco.asm000644 000767 000024 00000000273 11075762557 021071 0ustar00jwzstaff000000 000000 ; DISCO DISCO ; submitted by Anonymous start: inx txa sta $200, y sta $300, y sta $400, y sta $500, y iny tya cmp 16 bne do iny jmp start do: iny iny iny iny jmp start xscreensaver-5.36/hacks/images/m6502/dmsc.asm000644 000767 000024 00000015565 10762436155 020722 0ustar00jwzstaff000000 000000 ; By DMSC - daniel.serpell@gmail.com ; ; This demo was programmed in ACME: ; http://www.esw-heim.tu-clausthal.de/~marco/smorbrod/acme/ ; ; If you want the source code, send me an email :-) ; dcb 76, 94, 11,133, 32,162, 8,160, 8,145, 16,136,208,251,165, 16 dcb 24,105, 32,133, 16,165, 17,105, 0,133, 17,165, 32,202,208,231 dcb 96,230, 48,165, 48, 41, 63,133, 48,170,189,106, 6,170,189, 8 dcb 3,105, 1, 41, 3,157, 8, 3,138, 73,231,170,189, 0, 2,105 dcb 1, 41, 3,157, 0, 2,165, 48, 73, 63,170,189,106, 6, 73,224 dcb 170,189, 8, 2,105, 1, 41, 3,157, 8, 2,138, 73,231,170,189 dcb 0, 3,105, 1, 41, 3,157, 0, 3, 96,224,192,160,128, 96,225 dcb 64,193,161,226,129, 32,194, 97,162,227,195,130,228, 65,163,196 dcb 98,229,131,164,197,230,231,132,165,198, 99, 66, 33, 0,199,166 dcb 133,100,167, 67,134,101,135, 34, 68,102,103, 69, 35, 70, 71, 36 dcb 1, 37, 38, 39, 2, 3, 4, 5, 6, 7,166, 48,189,198, 6,170 dcb 254, 24, 3, 73, 7,170,254, 16, 3, 73,231,170,254, 24, 2, 73 dcb 7,170,254, 16, 2, 96, 0, 32, 1, 33, 64, 2, 65, 34, 96, 66 dcb 3, 97, 35, 98, 67,128, 4,129, 36, 99,130, 68,160, 5,161,131 dcb 100, 37,162, 69,132,192,163,101, 6,193, 38,194, 70,164,133,195 dcb 102,224, 7,225, 39,165,226,196,134, 71,227,103,197,166,228,135 dcb 198,229,167,230,199,231,166, 49,189, 21, 7,170,189, 0,160,157 dcb 0, 5,230, 49, 96,195,227,194,162,228, 97,226,128,129,130,225 dcb 64,161,163,224, 96,160,193,196, 32, 98,192, 65, 0,131,229,164 dcb 33, 99,197, 66,132, 1,230, 34,165, 67,100,198, 2, 3, 68, 6 dcb 35,133,166, 5,101, 4,199, 7, 36,231, 69,134,167, 37, 38,102 dcb 135, 70,232, 71, 39,103,136,200,168, 8, 11, 10,169,233,104, 9 dcb 12,137,201, 13, 40, 44, 72, 43,170, 42, 45, 41,105, 73,202, 14 dcb 138,234, 74, 75,106,203, 76,171, 46, 77,235,107,139, 15,108,172 dcb 174,140,173,141,142,204,109,206,207,205, 78,175, 47,236,239,143 dcb 237,238,110,240,241,111,208, 16, 79,176,209,242, 48,144,243, 80 dcb 177,244,112,210, 17, 49,178,179, 52, 53,147, 18, 81,211,145, 19 dcb 146, 51, 85,180, 20, 54,113,148, 22, 50, 84,212, 21, 55,115,245 dcb 83,114,116, 23, 82, 86, 88, 89, 87,118,117,119,149,213, 56, 57 dcb 181,214, 90,121,122,150,151,182,183,215,246, 58,120,247, 24,153 dcb 184,152,216, 25, 26, 59, 91,248,123,185, 27, 60,217,154, 28, 92 dcb 249, 29,155,186, 61,218, 93,124,250,187, 30,251, 62,156, 94,125 dcb 219,188, 31,252,254,220,253, 63,126,255,157,221, 95,159,191,222 dcb 127,189,223,158,190,165, 66, 41,224,208, 72,165, 66, 24,105, 1 dcb 41, 31,133, 66,165, 67,240, 7,198, 67,169, 0, 76, 97, 8,198 dcb 69,240,247, 16, 37,166, 64,230, 64,189,177, 9, 16, 15, 41,127 dcb 133, 67, 73,127,208,228,169, 1,133, 70, 76, 42, 8,170,189,117 dcb 8,133, 69,234,234,189,181, 8,133, 65,166, 65,230, 65,189,245 dcb 8,133, 68,165, 66, 24,105,224,133, 66,166, 66,169, 1,102, 68 dcb 42,157, 0,160, 96, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 2 dcb 3, 2, 3, 3, 3, 3, 3, 1, 2, 3, 1, 5, 3, 3, 3, 3 dcb 3, 2, 2, 3, 3, 5, 4, 3, 3, 5, 4, 4, 4, 3, 3, 4 dcb 4, 1, 3, 4, 3, 5, 5, 5, 4, 5, 4, 4, 3, 4, 4, 7 dcb 4, 4, 4, 2, 1, 0, 3, 6, 9, 12, 15, 18, 21, 24, 27, 30 dcb 32, 35, 35, 38, 40, 43, 46, 49, 50, 52, 4, 55, 55, 60, 63, 65 dcb 68, 71, 73, 75, 78, 78, 33, 83, 86, 89, 94, 98,102,106,109,112 dcb 116, 94,120,123,127,130,134,139,144,148,153,157,161,164,167,171 dcb 178,171,182,186, 5, 56, 68, 56, 36,124, 4, 76, 84, 36, 68, 84 dcb 40, 24, 40,124,100, 84, 88, 56, 84, 72, 76, 80, 96, 40, 84, 40 dcb 36, 84, 56, 44, 28,124, 36, 24, 24, 36,124, 24, 52, 16, 60, 80 dcb 24, 37, 30,124, 32, 28,188, 1,190,124, 24, 36, 60, 32, 28, 32 dcb 28, 24, 36, 24, 63, 36, 24, 36, 63, 60, 16, 32, 52, 44,120, 36 dcb 56, 4, 60, 56, 4, 56, 4, 56, 57, 6, 56, 44, 52, 36, 12, 48 dcb 208, 48, 12,252,164,164, 88,120,132,132, 72,252,132,132,120,252 dcb 164,132,252,160,128,120,132,164, 56,252, 32, 32,252, 8, 4,248 dcb 252, 48, 80,140,252, 4, 4,252, 64, 60, 64,252, 64, 48, 8,252 dcb 120,132,132,132,120,252,144,144, 96,120,132,134,133,120,252,144 dcb 144,108, 68,164,164,152,128,252,128,248, 4, 4,248, 4, 8,240 dcb 224, 28, 16,224, 28, 16,224,204, 48, 48,204,140,148,164,196, 0 dcb 0,133, 41, 10, 28, 29, 63, 63, 63,136, 15, 10, 28, 29, 14, 27 dcb 63, 63, 63,132, 55, 17, 18, 28, 62, 18, 28, 62, 10,136, 27, 14 dcb 10, 21, 21, 34,143, 15, 10, 28, 29,142, 39, 40, 48, 50,149,145 dcb 10, 23, 13, 62, 23, 24, 32,136, 28, 24, 22, 14,136, 11, 14, 10 dcb 30, 29, 18, 15, 30, 21,128, 14, 15, 15, 14, 12, 29, 28, 63, 63 dcb 63,144,159,255, 55, 17, 18, 28, 62, 18, 28, 62, 10, 21, 21,129 dcb 15, 24, 27, 62, 23, 24, 32,136, 11, 34, 14, 63, 63, 63,141, 63 dcb 63, 63, 11, 34, 14,150,159,143, 11, 34, 62, 39, 48, 54, 38, 2 dcb 0, 0, 7, 63, 5, 63, 2, 9, 11, 34, 62, 39, 48, 54, 38, 2 dcb 0, 0, 7, 63, 5, 63, 2, 9, 11, 34, 62, 39, 48, 54, 38, 2 dcb 0, 0, 7, 63, 5, 63, 2, 9,143,159,255,169, 0,133, 42,169 dcb 1,133, 44,133, 45,169, 0,133, 32,169,160,133, 33,165, 42,133 dcb 43,162, 15,160, 15,145, 32, 24,101, 44,230, 44,136, 16,246,165 dcb 32, 24,105, 32,133, 32,165, 33,105, 0,133, 33,169, 1,133, 44 dcb 165, 43, 24,101, 45,133, 43,230, 45,202, 16,215,169, 0,133, 32 dcb 169,160,133, 33,169,224,133, 34,169, 3,133, 35,169, 0,133, 36 dcb 169, 4,133, 37,169,240,133, 38,169, 3,133, 39,169, 16,133, 40 dcb 169, 4,133, 41,169, 15,133, 46,160, 15,177, 32, 74, 74, 74, 74 dcb 170,189, 62, 11,209, 34,240, 18,145, 34,145, 36,170,152, 73, 15 dcb 168,138,145, 38,145, 40,152, 73, 15,168,136, 16,221,165, 32, 24 dcb 105, 32,133, 32,165, 33,105, 0,133, 33,165, 34, 24,105,224,133 dcb 34,165, 35,105,255,133, 35,165, 36, 24,105, 32,133, 36,165, 37 dcb 105, 0,133, 37,165, 38, 24,105,224,133, 38,165, 39,105,255,133 dcb 39,165, 40, 24,105, 32,133, 40,165, 41,105, 0,133, 41,198, 46 dcb 16,150,230, 42,165, 42, 41, 63,240, 3, 76, 95, 10, 96, 0, 11 dcb 12, 15, 1, 15, 12, 11, 0, 11, 12, 15, 1, 15, 12, 11, 0, 11 dcb 12, 15, 1, 15, 12, 11, 0, 11, 12, 15, 1, 15, 12, 11,169, 1 dcb 162,255,134, 16,162, 1,134, 17, 32, 3, 6,169, 2,162, 7,134 dcb 16,162, 2,134, 17, 32, 3, 6,169, 3,162, 7,134, 16,162, 3 dcb 134, 17, 32, 3, 6,169, 31,133, 66,169, 0,133, 70,133, 67,133 dcb 64,169, 1,141,109, 8,169, 0,141,114, 8,169,160,141,115, 8 dcb 169, 63,133, 48,169,128,133, 49,169, 3,141,109, 8,169, 0,170 dcb 157, 0,160,232,208,250, 32, 33, 6, 32,170, 6, 32, 6, 7, 32 dcb 21, 8,165, 66, 73, 31,208, 13,173,109, 8, 24,105, 2, 41, 3 dcb 105, 3,141,109, 8,165, 49,208,221,173, 17, 7, 73, 1,141, 17 dcb 7,165, 70,240,209, 32, 29, 12, 32, 91, 10,169, 31,133, 66,169 dcb 0,133, 70,133, 67,141,109, 8,169, 0,141,114, 8,169, 3,141 dcb 115, 8, 32, 29, 12, 32, 21, 8,165, 66, 73, 31,208,247,173,115 dcb 8, 73, 7,141,115, 8,165, 70,240,235, 76, 94, 11,169, 0,170 dcb 157, 0, 2,157, 0, 3,157, 0, 4,157, 0, 5,232,208,241, 96 xscreensaver-5.36/hacks/images/m6502/dragon-fractal.asm000644 000767 000024 00000000764 10762436155 022653 0ustar00jwzstaff000000 000000 ;; dmsc ;; ;; PostPosted: Thu Dec 13, 2007 11:57 pm Post subject: Dragon curve ;; fractal ;; ;; ;; Hi! ;; ;; This draws the dragon curve fractal (really a "twin dragon"): lda #0 sta $0 lop: lda $0 sta $1 lda #3 sta $6 lda #232 sta $5 ldx #0 lpN: lsr $1 bcc nos lda $5 clc adc tL,x sta $5 lda $6 adc tH,x sta $6 nos: inx lda $1 bne lpN inx txa ldy #0 sta ($5),y inc $0 bne lop rts tL: dcb 32, 31, 254, 190, 128, 132, 8, 8 tH: dcb 0, 0, 255, 255, 255, 255, 0, 1 xscreensaver-5.36/hacks/images/m6502/fullscreenlogo.asm000644 000767 000024 00000005412 10762436156 023006 0ustar00jwzstaff000000 000000 ; ; draw image ; start: lda #logo sta $1 lda #$00 sta $2 lda #$02 sta $3 ldx #$0 l: lda ($0,x) sta ($2,x) inc $00 lda $00 cmp #$00 bne notReset1 inc $01 notReset1: inc $02 lda $02 cmp #$00 bne notReset2 lda $03 cmp #$05 beq done inc $03 notReset2: jmp l done: rts logo: dcb 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 dcb 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 dcb 1,1,1,1,1,1,1,1,1,1,1,1,1,6,6,6 dcb 6,6,6,6,1,1,1,1,1,1,1,1,1,1,1,1 dcb 1,1,1,1,1,1,1,1,1,1,6,6,6,6,6,6 dcb 6,6,6,6,6,1,1,1,1,1,1,1,1,1,1,1 dcb 1,1,1,1,1,1,1,1,6,6,6,6,6,6,6,6 dcb 6,6,6,6,6,1,1,1,1,1,1,1,1,1,1,1 dcb 1,1,1,1,1,1,1,6,6,6,6,6,6,6,6,6 dcb 6,6,6,6,6,1,1,1,1,1,1,1,1,1,1,1 dcb 1,1,1,1,1,1,6,6,6,6,6,6,6,6,6,6 dcb 6,6,6,6,6,1,1,1,1,1,1,1,1,1,1,1 dcb 1,1,1,1,1,6,6,6,6,6,6,6,6,6,6,6 dcb 6,6,6,6,6,1,1,1,1,1,1,1,1,1,1,1 dcb 1,1,1,1,6,6,6,6,6,6,6,6,6,6,6,6 dcb 6,6,6,6,6,1,1,1,1,1,1,1,1,1,1,1 dcb 1,1,1,6,6,6,6,6,6,6,6,6,6,6,6,1 dcb 1,1,1,6,6,1,1,1,1,1,1,1,1,1,1,1 dcb 1,1,1,6,6,6,6,6,6,6,6,6,6,1,1,1 dcb 1,1,1,1,1,6,6,6,6,6,6,6,6,6,6,6 dcb 1,1,6,6,6,6,6,6,6,6,6,1,1,1,1,1 dcb 1,1,1,1,1,6,6,6,6,6,6,6,6,6,6,1 dcb 1,1,6,6,6,6,6,6,6,6,1,1,1,1,1,1 dcb 1,1,1,1,1,6,6,6,6,6,6,6,6,6,1,1 dcb 1,1,6,6,6,6,6,6,6,6,1,1,1,1,1,1 dcb 1,1,1,1,1,6,6,6,6,6,6,6,6,1,1,1 dcb 1,6,6,6,6,6,6,6,6,1,1,1,1,1,1,1 dcb 1,1,1,1,1,6,6,6,6,6,6,6,1,1,1,1 dcb 1,6,6,6,6,6,6,6,6,1,1,1,1,1,1,1 dcb 1,1,1,1,1,6,6,6,6,6,6,1,1,1,1,1 dcb 1,6,6,6,6,6,6,6,6,1,1,1,1,1,1,1 dcb 1,1,1,1,1,6,6,6,6,6,1,1,1,1,1,1 dcb 1,6,6,6,6,6,6,6,6,1,1,1,1,1,1,1 dcb 1,1,1,1,1,2,2,2,2,2,1,1,1,1,1,1 dcb 1,6,6,6,6,6,6,6,6,1,1,1,1,1,1,1 dcb 1,1,1,1,1,2,2,2,2,2,2,1,1,1,1,1 dcb 1,6,6,6,6,6,6,6,6,1,1,1,1,1,1,1 dcb 1,1,1,1,1,2,2,2,2,2,2,2,1,1,1,1 dcb 1,6,6,6,6,6,6,6,6,1,1,1,1,1,1,1 dcb 1,1,1,1,1,2,2,2,2,2,2,2,2,1,1,1 dcb 1,1,6,6,6,6,6,6,6,6,1,1,1,1,1,1 dcb 1,1,1,1,1,2,2,2,2,2,2,2,2,2,1,1 dcb 1,1,6,6,6,6,6,6,6,6,6,1,1,1,1,1 dcb 1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,1 dcb 1,1,1,6,6,6,6,6,6,6,6,6,1,1,1,1 dcb 1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2 dcb 1,1,1,6,6,6,6,6,6,6,6,6,6,1,1,1 dcb 1,1,1,1,6,1,1,1,1,1,1,1,1,1,1,1 dcb 1,1,1,1,6,6,6,6,6,6,6,6,6,6,6,6 dcb 6,6,6,6,6,1,1,1,1,1,1,1,1,1,1,1 dcb 1,1,1,1,6,6,6,6,6,6,6,6,6,6,6,6 dcb 6,6,6,6,6,1,1,1,1,1,1,1,1,1,1,1 dcb 1,1,1,1,1,6,6,6,6,6,6,6,6,6,6,6 dcb 6,6,6,6,6,1,1,1,1,1,1,1,1,1,1,1 dcb 1,1,1,1,1,1,6,6,6,6,6,6,6,6,6,6 dcb 6,6,6,6,6,1,1,1,1,1,1,1,1,1,1,1 dcb 1,1,1,1,1,1,1,1,6,6,6,6,6,6,6,6 dcb 6,6,6,6,6,1,1,1,1,1,1,1,1,1,1,1 dcb 1,1,1,1,1,1,1,1,1,6,6,6,6,6,6,6 dcb 6,6,6,6,6,1,1,1,1,1,1,1,1,1,1,1 dcb 1,1,1,1,1,1,1,1,1,1,1,1,6,6,6,6 dcb 6,6,6,6,6,1,1,1,1,1,1,1,1,1,1,1 dcb 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 dcb 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 xscreensaver-5.36/hacks/images/m6502/greynetic.asm000644 000767 000024 00000001725 12727405342 021753 0ustar00jwzstaff000000 000000 ;Port of Greynetic ;Jeremy English 2013 lda #$0 sta $0 lda #$2 sta $1 start: lda $1 cmp #$6 bne randOffset lda #$2 sta $1 randOffset: ;move position by some random offset clc lda $fe adc $0 sta $0 lda $1 adc #$0 sta $1 cmp #$06 ;Did we go out of range bne setRect ;Nope lda #$02 ;Start back at the top sta $1 setRect: lda $fe and #$f tax inx ;at least 1 stx $2 ;width stx $3 ;working copy lda $fe and #$f tax inx ;at least 1 stx $4 ;height lda $fe sta $5 ;color ldy #0 draw: lda $5 sta ($0), y dec $3 beq down lda $0 clc adc #$1 sta $0 lda $1 adc #$0 sta $1 cmp #$06 ;Did we go out of range beq done ;yes jmp draw down: ;;Move back to the start of this row ldx $2 ;The width of the rectangle dex lda $0 stx $0 sec sbc $0 sta $0 lda $1 sbc #$0 sta $1 ;;Move down one row dec $4 beq done ;;Are we done drawing? lda $2 sta $3 ;reset the width counter lda $0 clc adc #$20 sta $0 lda $1 adc #$0 sta $1 cmp #$06 ;Did we go out of range beq done ;yes jmp draw done: jmp start xscreensaver-5.36/hacks/images/m6502/keftal.asm000644 000767 000024 00000001276 10762436156 021235 0ustar00jwzstaff000000 000000 ; awfully slow.. be patient init: ldx #0 stx $0 inx stx $2 stx $3 inx stx $1 loop: lda $2 cmp #$20 bne notIncF2 inc $3 lda #0 sta $2 notIncF2: inc $2 ; CALCULATE START lda $2 sta $f1 lda $2 sta $f2 jsr multiply lda $f4 sta $f8 lda $3 sta $f1 lda $3 sta $f2 jsr multiply ; CALCULATE STOP lda $f4 clc adc $f8 lsr lsr lsr lsr lsr ldx #0 sta ($0,x) inc $0 lda $0 cmp #$00 bne notNextY inc $1 lda $1 cmp #6 beq exit notNextY: jmp loop exit: rts multiply: lda #0 sta $f4 sta $f5 ldx #8 a:asl $f4 rol $f5 asl $f2 bcc b clc lda $f4 adc $f1 sta $f4 bcc b inc $f5 b:dex bne a rts xscreensaver-5.36/hacks/images/m6502/life.asm000644 000767 000024 00000007227 12727405342 020704 0ustar00jwzstaff000000 000000 ; Conway\'s Game of Life ; http://rosettacode.org/wiki/Conway\'s_Game_of_Life ; Submitted by Anonymous randfill: stx $01 ;$200 for indirect ldx #$02 ;addressing stx $02 randloop: lda $fe ;generate random and #$01 ;pixels on the sta ($01),Y ;screen jsr inc0103 cmp #$00 bne randloop lda $02 cmp #$06 bne randloop clearmem: lda #$df ;set $07df-$0a20 sta $01 ;to $#00 lda #$07 sta $02 clearbyte: lda #$00 sta ($01),Y jsr inc0103 cmp #$20 bne clearbyte lda $02 cmp #$0a bne clearbyte starttick: copyscreen: lda #$00 ;set up source sta $01 ;pointer at sta $03 ;$01/$02 and lda #$02 ;dest pointer sta $02 ;at $03/$04 lda #$08 sta $04 ldy #$00 copybyte: lda ($01),Y ;copy pixel to sta ($03),Y ;back buffer jsr inc0103 ;increment pointers cmp #$00 ;check to see bne copybyte ;if we\'re at $600 lda $02 ;if so, we\'ve cmp #$06 ;copied the bne copybyte ;entire screen conway: lda #$df ;apply conway rules sta $01 ;reset the pointer sta $03 ;to $#01df/$#07df lda #$01 ;($200 - $21) sta $02 ;($800 - $21) lda #$07 sta $04 onecell: lda #$00 ;process one cell ldy #$01 ;upper cell clc adc ($03),Y ldy #$41 ;lower cell clc adc ($03),Y chkleft: tax ;check to see lda $01 ;if we\'re at the and #$1f ;left edge tay txa cpy #$1f beq rightcells leftcells: ldy #$00 ;upper-left cell clc adc ($03),Y ldy #$20 ;left cell clc adc ($03),Y ldy #$40 ;lower-left cell clc adc ($03),Y chkright: tax ;check to see lda $01 ;if we\'re at the and #$1f ;right edge tay txa cpy #$1e beq evaluate rightcells: ldy #$02 ;upper-right cell clc adc ($03),Y ldy #$22 ;right cell clc adc ($03),Y ldy #$42 ;lower-right cell clc adc ($03),Y evaluate: ldx #$01 ;evaluate total ldy #$21 ;for current cell cmp #$03 ;3 = alive beq storex ldx #$00 cmp #$02 ;2 = alive if bne storex ;c = alive lda ($03),Y and #$01 tax storex: txa ;store to screen sta ($01),Y jsr inc0103 ;move to next cell conwayloop: cmp #$e0 ;if not last cell, bne onecell ;process next cell lda $02 cmp #$05 bne onecell jmp starttick ;run next tick inc0103: lda $01 ;increment $01 cmp #$ff ;and $03 as 16-bit bne onlyinc01 ;pointers inc $02 inc $04 onlyinc01: inc $01 lda $01 sta $03 rts xscreensaver-5.36/hacks/images/m6502/matrix.asm000644 000767 000024 00000001723 10762436156 021270 0ustar00jwzstaff000000 000000 ;;Matrix :) loop: lda $fe and #$1f tay tax lda matrix,y sta $1 tay lda #0 jsr paint inc $1 lda $1 and #$1f sta matrix,y tay lda #5 jsr paint lda $fe and #$1f tay tax lda matrix,y sta $1 tay lda #$d jsr paint lda $fe and #$1f tay tax lda matrix,y sta $1 tay lda #$5 jsr paint jmp loop paint: pha lda yl,y sta $2 lda yh,y sta $3 txa tay pla sta ($2),y rts yh: dcb $02, $02, $02, $02, $02, $02, $02, $02 dcb $03, $03, $03, $03, $03, $03, $03, $03 dcb $04, $04, $04, $04, $04, $04, $04, $04 dcb $05, $05, $05, $05, $05, $05, $05, $05 yl: dcb $00, $20, $40, $60, $80, $a0, $c0, $e0 dcb $00, $20, $40, $60, $80, $a0, $c0, $e0 dcb $00, $20, $40, $60, $80, $a0, $c0, $e0 dcb $00, $20, $40, $60, $80, $a0, $c0, $e0 matrix: dcb 5,16,19,19,17,26,10,14,11,4,1,2,20,1,8,30 dcb 17,26,19,19,31,21,11,19,3,24,4,24,13,8,8,26 xscreensaver-5.36/hacks/images/m6502/noise.asm000644 000767 000024 00000000344 10762436156 021077 0ustar00jwzstaff000000 000000 ; static noise start: ldy #$ff ldx #$0 loop: lda $fe sta $200,x and #$7 sta $300,x and #$3 sta $400,x and #$1 sta $500,x inx dey bne loop rts xscreensaver-5.36/hacks/images/m6502/random-walk.asm000644 000767 000024 00000002422 10762436156 022175 0ustar00jwzstaff000000 000000 ;; Jeremy English Dec 11 2007 ;; Random walk lda #16 sta $0 ; The current x pos sta $1 ; The current y pos lda $fe ; Get random color sta $5 ; Store the color lda $fe ; Amount of time to use this color sta $6 loop: ldx $0 ldy $1 lda $5 jsr paint jsr walk dec $6 bne loop ;; get a new color lda $fe sta $5 ;; get a new duration lda $fe sta $6 jmp loop walk: lda $fe and #3 cmp #0 beq right cmp #1 beq left cmp #2 beq up jmp down right: inc $0 jmp done left: dec $0 jmp done up: dec $1 jmp done down: inc $1 jmp done done: lda $0 and #31 sta $0 lda $1 and #31 sta $1 rts paint: pha lda yl,y sta $2 lda yh,y sta $3 txa tay pla sta ($2),y rts ;; Y cord MSB yh: dcb $02, $02, $02, $02, $02, $02, $02, $02 dcb $03, $03, $03, $03, $03, $03, $03, $03 dcb $04, $04, $04, $04, $04, $04, $04, $04 dcb $05, $05, $05, $05, $05, $05, $05, $05 ;; Y cord LSB yl: dcb $00, $20, $40, $60, $80, $a0, $c0, $e0 dcb $00, $20, $40, $60, $80, $a0, $c0, $e0 dcb $00, $20, $40, $60, $80, $a0, $c0, $e0 dcb $00, $20, $40, $60, $80, $a0, $c0, $e0 xscreensaver-5.36/hacks/images/m6502/random.asm000644 000767 000024 00000000463 10762436156 021244 0ustar00jwzstaff000000 000000 loop: lda $fe ; A=rnd sta $00 ; ZP(0)=A lda $fe and #$3 ; A=A&3 clc ; Clear carry adc #$2 ; A+=2 sta $01 ; ZP(1)=A lda $fe ; A=rnd ldy #$0 ; Y=0 sta ($00),y ; ZP(0),ZP(1)=y jmp loop xscreensaver-5.36/hacks/images/m6502/random2.asm000644 000767 000024 00000000463 10762436156 021326 0ustar00jwzstaff000000 000000 lda $fe ; A=rnd sta $00 ; ZP(0)=A lda $fe and #$3 ; A=A&3 clc ; Clear carry adc #$2 ; A+=2 sta $01 ; ZP(1)=A lda $fe ; A=rnd ldy #$0 ; Y=0 sta ($00),y ; ZP(0),ZP(1)=y jmp $600 xscreensaver-5.36/hacks/images/m6502/rorschach.asm000644 000767 000024 00000002261 10762436156 021736 0ustar00jwzstaff000000 000000 ; "Rorschach test" ; Not at all what it was supposed to be, ; but it turns out pretty cool and can ; create some interesting patterns. lda #8 tax dr: sta $3cb,x sta $40b,x dex bpl dr sta $3f3 sta $3eb lda #1 sta $3ec ldx #255 mk: lda $fe sta $1200,x lda $fe sta $1300,x lda $fe sta $1400,x lda $fe sta $1500,x dex cpx #$ff bne mk ; smooth it ldy #0 re: lda #1 sta $3ec,y ldx #255 sm: lda $1201,x adc $11ff,x adc $1220,x adc $11e0,x lsr lsr sta $1200,x lda $1301,x adc $12ff,x adc $1320,x adc $12e0,x lsr lsr sta $1300,x lda $1401,x adc $13ff,x adc $1420,x adc $13e0,x lsr lsr sta $1400,x lda $1501,x adc $14ff,x adc $1520,x adc $14e0,x lsr lsr sta $1500,x dex cpx #$ff bne sm iny cpy #7 bne re lda #1 sta $3f0 ;copy it clc ldx #255 cp: lda $1200,x lsr lsr tay lda colors,y sta $200,x lda $1300,x lsr lsr tay lda colors,y sta $300,x lda $1400,x lsr lsr tay lda colors,y sta $400,x lda $1500,x lsr lsr tay lda colors,y sta $500,x dex cpx #$ff bne cp rts colors: dcb 0,0,0,0,0,$9,$9,1,1,0,0,0,0,0 xscreensaver-5.36/hacks/images/m6502/santa.asm000644 000767 000024 00000007123 10762436156 021072 0ustar00jwzstaff000000 000000 start: ldx #0 cs: lda $2000,x sta $500,x dex bne cs stx $20 loop: inc $20 lda $20 and #$7f tay and #$1f tax lda sinus,x tax d: lda #0 sta $1e0,x sta $2e0,x lda $1000,y sta $200,x lda $1080,y sta $220,x lda $1100,y sta $240,x lda $1180,y sta $260,x lda $1200,y sta $280,x lda $1280,y sta $2a0,x lda $1300,y sta $2c0,x lda $1380,y sta $2c0,x inx iny txa and #$1f bne d jmp loop ; 32 ($20) long sinus: dcb 0,0,0,0,$20,$20,$20 dcb $40,$40,$60,$80,$a0,$a0,$c0,$c0,$c0 dcb $e0,$e0,$e0,$e0,$c0,$c0,$c0 dcb $a0,$a0,$80,$60,$40,$40,$20,$20,$20 *=$1000 santa: dcb 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 dcb 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 dcb 0,0,0,0,0,0,0,0,$a,$a,0,0,0,0,0,0 dcb 0,0,0,0,0,$a,$a,0,0,0,0,0,0,0,0,0 dcb 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 dcb 0,2,2,2,1,0,0,0,0,$9,$9,$9,$9,0,0,0 dcb 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 dcb 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 dcb 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 dcb 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 dcb 0,0,0,0,0,0,0,0,$a,$a,$a,0,0,0,0,0 dcb 0,0,0,0,0,$a,$a,$a,0,0,0,0,0,0,0,0 dcb 0,0,0,0,0,0,$9,$9,0,0,0,0,0,0,0,0 dcb 0,1,1,2,2,0,$9,$9,$9,$9,$9,$9,0,0,0,0 dcb 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 dcb 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 dcb 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 dcb 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 dcb 0,0,0,0,0,0,$a,$a,$a,$a,$a,$a,0,0,0,0 dcb 0,0,0,$a,$a,$a,$a,$a,$a,0,0,0,0,0,0,0 dcb 0,0,0,0,0,0,0,$9,$9,$9,0,0,0,0,0,0 dcb 0,1,2,2,$9,$9,$9,$9,$9,$9,$9,0,0,0,0,0 dcb 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 dcb 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 dcb 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 dcb 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 dcb 0,0,0,0,0,0,0,0,0,$a,$a,$a,$a,$a,$a,$b dcb $b,$b,$b,$b,$b,$b,$a,$a,$a,$a,$a,$a,$b,$b,$b,$b dcb $b,$b,$b,$b,$b,$9,$9,$9,$9,$9,$9,$9,$9,$9,$9,$9 dcb $9,2,2,$9,$9,$9,$9,$9,$9,$9,0,0,0,0,0,0 dcb 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 dcb 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 dcb 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 dcb 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 dcb 0,0,0,0,0,0,0,0,0,$a,$a,$a,$a,$a,$a,$a dcb $a,0,0,0,0,0,$a,$a,$a,$a,$a,$a,$a,$a,0,0 dcb 0,0,0,0,0,0,0,$9,$9,$9,$9,$9,$9,$9,$9,$9 dcb 2,2,$9,$9,$9,$9,$9,$9,$9,$9,$9,0,0,0,0,0 dcb 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 dcb 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 dcb 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 dcb 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 dcb 0,0,0,0,0,0,0,0,0,$a,$a,$a,$a,$a,$a,0 dcb $a,$a,0,0,0,0,$a,$a,$a,$a,$a,$a,0,$a,$a,0 dcb 0,0,0,0,0,$a,$a,0,0,$9,$a,$9,$9,$9,$9,$9 dcb $9,$9,$a,$9,$9,$9,$9,$9,$9,$9,$9,0,0,0,0,0 dcb 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 dcb 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 dcb 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 dcb 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 dcb 0,0,0,0,0,0,0,0,0,$a,0,$a,0,0,$a,0 dcb 0,$a,0,0,0,0,$a,0,$a,0,0,$a,0,0,$a,0 dcb 0,0,0,0,0,$a,0,0,0,$a,0,0,0,0,0,0 dcb 0,$a,0,0,0,0,0,0,0,0,0,0,0,0,0,0 dcb 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 dcb 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 dcb 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 dcb 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 dcb 0,0,0,0,0,0,0,0,$a,$a,0,$a,0,0,$a,$a dcb 0,$a,$a,0,0,$a,$a,0,$a,0,0,$a,$a,0,$a,$a dcb 0,0,0,0,0,0,$a,$a,$a,$a,$a,$a,$a,$a,$a,$a dcb $a,$a,$a,$a,$a,$a,$a,$a,$a,$a,$a,0,0,0,0,0 dcb 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 dcb 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 *=$2000 dcb 0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0 dcb 0,0,0,0,0,0,0,0,0,0,0,0,$c,1,1,1 dcb 0,0,0,0,0,0,0,0,0,0,0,1,1,1,$a,$a dcb 0,0,0,0,0,0,0,0,0,0,$c,1,1,1,1,1 dcb 1,1,$c,0,0,0,0,0,0,0,0,0,1,1,0,0 dcb 0,0,0,0,0,0,0,0,$c,1,1,1,1,1,1,1 dcb 1,1,1,1,1,$c,0,0,0,0,0,1,1,1,1,0 dcb 0,0,0,0,0,0,$c,1,1,1,1,1,1,1,1,1 dcb 1,1,1,1,1,1,$c,0,0,0,0,1,1,1,1,0 dcb 0,0,0,0,0,$c,1,1,1,1,1,1,1,1,1,1,1 dcb 1,1,1,1,1,1,1,1,$c,0,0,1,1,0,0 dcb 0,0,$c,1,1,1,1,1,1,1,1,1,1,1,1,1 dcb 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 dcb 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 dcb 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 dcb 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 xscreensaver-5.36/hacks/images/m6502/selfmodify.asm000644 000767 000024 00000000230 10762436156 022115 0ustar00jwzstaff000000 000000 ; A very simple example of ; self-modifying code ; and code entry points lda $fe sta $1001 jmp $1000 *=$1000 lda #$00 sta $3ef jmp $600 xscreensaver-5.36/hacks/images/m6502/sflake.asm000644 000767 000024 00000006726 12727405342 021235 0ustar00jwzstaff000000 000000 ;; Jeremy English 01-December-2008 ;; Snowflakes ;; Main loop Count lda #7 sta $f ;; pattern number lda #0 sta $10 ;;Cells lda #$00 sta $4 lda #$10 sta $5 ;;Tmp lda #$00 sta $6 lda #$11 sta $7 ;;Init Cells Buffer ;;------------------------------------------------------------ ldy #$ff initCells: lda #0 sta ($4),y sta ($6),y dey bne initCells ;;Set start position ldy #115 lda #1 sta ($4),y ;;Setup offset lda #15 sta $d lda #16 sta $e ;;Start of main loop ;;------------------------------------------------------------ mainloop: ;;init indent ;;We want to indent every other line lda #0 sta $a lda #0 sta $9 ;; Display Cells ;;------------------------------------------------------------ ;; 248 is the total number of cells ldy #248 display: lda #0 sta $8 lda $a beq stop16 lda #15 sta $b lda #1 sta $8 jmp toggle stop16: lda #16 sta $b toggle: lda $a eor #1 sta $a ;; Set the stop position ldx $b inner_display: dex txa pha dey tya pha lda ($4),y beq display_continue ldx $8 ldy $9 lda #1 jsr paint ldx $8 ldy $9 inx jsr paint ldx $8 ldy $9 iny jsr paint ldx $8 ldy $9 inx iny jsr paint display_continue: inc $8 inc $8 ;;Life Cycle ;;------------------------------------------------------------ pla tay pha ;;Store y on the stack tax dey lda ($4),y iny iny clc adc ($4),y sta $c txa sec sbc $d tay lda $c clc adc ($4),y sta $c txa sec sbc $e tay lda $c clc adc ($4),y sta $c txa clc adc $d tay lda $c clc adc ($4),y sta $c txa clc adc $e tay lda $c clc adc ($4),y sta $c pla tay ;;Pull Y off of the stack lda $c and #1 beq dontset sta ($6),y dontset: pla tax ;;Pull x off of the stack beq exit_inner_display jmp inner_display exit_inner_display: inc $9 inc $9 tya beq display_exit jmp display display_exit: ;;Copy Temporary Buffer ;;------------------------------------------------------------ ldy #248 copybuf: dey lda ($6),y sta ($4),y tya bne copybuf dec $f lda $f beq reset_main jmp mainloop ;;Reset main counter ;;------------------------------------------------------------ reset_main: lda #7 sta $f lda #$ff ;;Delay Count sta $11 delay: ldy #$a0 inner_delay: nop dey bne inner_delay dec $11 lda $11 bne delay ;; init buffer ;; and clear screen clrscr: lda $fe and $f cmp #1 beq clrscr ;We don't want a white background ldy #$00 ldx #$0 cs_loop: sta $200,x sta $300,x sta $400,x sta $500,x pha lda #0 sta ($6),y sta ($4),y pla inx dey bne cs_loop ;; Setup new pattern ;;------------------------------------------------------------ inc $10 lda $10 and #3 sta $10 cmp #0 beq pattern1 cmp #1 beq pattern2 cmp #2 beq pattern3 cmp #3 beq pattern4 pattern1: ldy #114 lda #1 sta ($4),y ldy #115 lda #1 sta ($4),y ldy #116 lda #1 sta ($4),y jmp mainloop pattern2: ldy #113 lda #1 sta ($4),y ldy #118 lda #1 sta ($4),y jmp mainloop pattern3: ldy #115 lda #1 sta ($4),y jmp mainloop pattern4: ldy #102 lda #1 sta ($4),y ldy #128 lda #1 sta ($4),y jmp mainloop ;;Paint subroutine ;;------------------------------------------------------------ paint: pha lda yl,y sta $2 lda yh,y sta $3 txa tay pla sta ($2),y rts ;; Y cord MSB yh: dcb $02, $02, $02, $02, $02, $02, $02, $02 dcb $03, $03, $03, $03, $03, $03, $03, $03 dcb $04, $04, $04, $04, $04, $04, $04, $04 dcb $05, $05, $05, $05, $05, $05, $05, $05 ;; Y cord LSB yl: dcb $00, $20, $40, $60, $80, $a0, $c0, $e0 dcb $00, $20, $40, $60, $80, $a0, $c0, $e0 dcb $00, $20, $40, $60, $80, $a0, $c0, $e0 dcb $00, $20, $40, $60, $80, $a0, $c0, $e0 xscreensaver-5.36/hacks/images/m6502/sierpinski.asm000644 000767 000024 00000000326 12727405342 022136 0ustar00jwzstaff000000 000000 ; Sierpinski ; Submitted by Anonymous start: lda #$e1 sta $0 lda #$01 sta $1 ldy #$20 write: ldx #$00 eor ($0, x) sta ($0),y inc $0 bne write inc $1 ldx $1 cpx #$06 bne write rts xscreensaver-5.36/hacks/images/m6502/sierpinsky.asm000644 000767 000024 00000004232 10762436156 022162 0ustar00jwzstaff000000 000000 ; 6502 assembler Sierpinsky Triangle ver.2 ; by Magnus Wedmark 2007-05-02 ; This program is especially written for ; the 6502asm.com competition and ; uses the 32*32 pixel display used in that ; virtual platform. The sierpinsky ; fractal is one of the simplest to ; implement. Here is a walk-through: ; 1) Specify 3 points that form a triangle ; 2) Choose one of them as a starting point ; 3) Choose one of them as targetpoint randomly ; 4) Set the new current position half-way ; between the current point and the target ; point. ; 5) Goto 3 LDX #0 LDY #0 new_rnd: LDA $FE ; random 0-255 AND #3 ; only 0-3 left CMP #3 BNE good_rnd JMP new_rnd good_rnd: ; random = 0-2 PHA ; transform X and Y values according to: ; X=X/2+(P*8) and Y=Y/2+(P*16) ASL ASL ASL STA $F3 ; P*8 PLA AND #1 ASL ASL ASL ASL STA $F4 ; (P AND 1)*16 TXA LSR ADC $F3 TAX TYA LSR ADC $F4 TAY JSR set_point ; use and restore regs JMP new_rnd set_point: ; uses both X,Y,A and restores them PHA ; backup all reg-value (X,Y,A) TXA PHA TYA PHA PHA PHA ; triple Y push, two for int. use STX $F2 ; transfer X to Y using $F2 LDY $F2 LDA #0 STA $F0 LDA #$2 STA $F1 ; set base vector to $200 LDA #0 PLA ; transfer the pushed Y-coord to A AND #$07 ; the value %0000'0111 ASL ASL ASL ASL ASL CLC ADC $F0 STA $F0 BCC no_carry INC $F1 no_carry: CLC PLA ; transfer the pushed Y-coord to A AND #$18 LSR LSR LSR ADC $F1 STA $F1 CLC TYA ADC $F0 ADC $F1 LDA #1 ;1 = white for trouble-shooting JSR set_toning_point ; use for shading STA ($F0),Y ; set pixel PLA ; restore all reg-value (X,Y,A) TAY PLA TAX PLA RTS ; sub routine to shade the current pixel ($F0),Y ; lighter on a scale: $0, $B, $C, $F, $1 ; Black, DarkGrey, Grey, LightGrey, White set_toning_point: LDA ($F0),Y CMP #$00 BNE not_black LDA #$0B RTS not_black: CMP #$0B BNE not_dgrey LDA #$0C RTS not_dgrey: CMP #$0C BNE not_grey LDA #$0F RTS not_grey: CMP #$0F BNE not_lgrey LDA #$01 RTS not_lgrey: ; white stays white RTS xscreensaver-5.36/hacks/images/m6502/softsprite.asm000644 000767 000024 00000005662 11075762557 022201 0ustar00jwzstaff000000 000000 ; software sprites ; by PJP loop: ldx $90 inx stx $90 lda #4 ; *** NUMBER OF SPRITES sta $3 lda #0 sta $4 multiple: lda $90 clc adc $4 tax lda sinus,x ldy cosinus,x asl tax lda ypos,x sta $00 inx lda ypos,x sta $01 ldx #0 lda #5 ; **** HEIGHT OF EACH SPRITE sta $2 draw: lda image,x sta ($0),y inx iny lda image,x sta ($0),y inx iny lda image,x sta ($0),y inx iny lda image,x sta ($0),y inx iny lda image,x sta ($0),y tya clc adc #28 tay inx dec $2 bne draw lda $4 clc adc #18 ; *** DISTANCE BETWEEN SPRITES (FROM TABLE) sta $4 dec $3 bne multiple jmp loop ; SINUS (AND COSINUS) sinus: dcb $0e, $0e, $0e, $0f, $0f, $0f, $10, $10, $10, $11 dcb $11, $11, $12, $12, $12, $13, $13, $13, $14, $14 dcb $14, $14, $15, $15, $15, $16, $16, $16, $16, $17 dcb $17, $17, $17, $18, $18, $18, $18, $19, $19, $19 dcb $19, $19, $1a, $1a, $1a, $1a, $1a, $1a, $1a, $1b dcb $1b, $1b, $1b, $1b, $1b, $1b, $1b, $1b, $1b, $1b dcb $1b, $1b, $1b, $1b, $1b, $1b, $1b, $1b, $1b, $1b cosinus: dcb $1b, $1b, $1b, $1b, $1b, $1b, $1b, $1b, $1b, $1b dcb $1a, $1a, $1a, $1a, $1a, $1a, $19, $19, $19, $19 dcb $19, $18, $18, $18, $18, $18, $17, $17, $17, $17 dcb $16, $16, $16, $15, $15, $15, $15, $14, $14, $14 dcb $13, $13, $13, $12, $12, $12, $11, $11, $11, $10 dcb $10, $10, $0f, $0f, $0f, $0e, $0e, $0e, $0d, $0d dcb $0d, $0c, $0c, $0c, $0b, $0b, $0b, $0a, $0a, $0a dcb $09, $09, $09, $08, $08, $08, $07, $07, $07, $06 dcb $06, $06, $06, $05, $05, $05, $04, $04, $04, $04 dcb $03, $03, $03, $03, $03, $02, $02, $02, $02, $02 dcb $01, $01, $01, $01, $01, $01, $00, $00, $00, $00 dcb $00, $00, $00, $00, $00, $00, $00, $00, $00, $00 dcb $00, $00, $00, $00, $00, $00, $00, $00, $00, $00 dcb $00, $00, $00, $00, $00, $00, $00, $01, $01, $01 dcb $01, $01, $01, $01, $02, $02, $02, $02, $02, $03 dcb $03, $03, $03, $04, $04, $04, $04, $05, $05, $05 dcb $05, $06, $06, $06, $07, $07, $07, $07, $08, $08 dcb $08, $09, $09, $09, $0a, $0a, $0a, $0b, $0b, $0b dcb $0c, $0c, $0c, $0d, $0d dcb $0e, $0e, $0e, $0f, $0f, $0f, $10, $10, $10, $11 dcb $11, $11, $12, $12, $12, $13, $13, $13, $14, $14 dcb $14, $14, $15, $15, $15, $16, $16, $16, $16, $17 dcb $17, $17, $17, $18, $18, $18, $18, $19, $19, $19 dcb $19, $19, $1a, $1a, $1a, $1a, $1a, $1a, $1a, $1b dcb $1b, $1b, $1b, $1b, $1b, $1b, $1b, $1b, $1b, $1b dcb $1b, $1b, $1b, $1b, $1b, $1b, $1b, $1b, $1b, $1b dcb $1b, $1b, $1b, $1b, $1b, $1b, $1b, $1b, $1b, $1b dcb $1a, $1a, $1a, $1a, $1a, $1a, $19, $19, $19, $19 ; 5x5 BYTES image: dcb $0,$0,$0,$0,$0 dcb $0,$c,$c,$c,$0 dcb $0,$c,$1,$c,$0 dcb $0,$c,$c,$c,$0 dcb $0,$0,$0,$0,$0 ; YPOS LOOKUP TABLE ypos: dcb $00,$02,$20,$02,$40,$02,$60,$02 dcb $80,$02,$a0,$02,$c0,$02,$e0,$02 dcb $00,$03,$20,$03,$40,$03,$60,$03 dcb $80,$03,$a0,$03,$c0,$03,$e0,$03 dcb $00,$04,$20,$04,$40,$04,$60,$04 dcb $80,$04,$a0,$04,$c0,$04,$e0,$04 dcb $00,$05,$20,$05,$40,$05,$60,$05 dcb $80,$05,$a0,$05,$c0,$05,$e0,$05 xscreensaver-5.36/hacks/images/m6502/spacer.asm000644 000767 000024 00000006404 10762436156 021242 0ustar00jwzstaff000000 000000 ; "spacer", move a space ship through an ; endless tunnel. You die once you hit ; the walls. ; ; Controls: ; ; W - move up ; X - move down ; Any other key will stop the ship ; ; Ps: this game runs awfully slow =) ; start: jsr init loop: ;; jsr drawShip jsr drawMap jsr genMap jsr readKeys jmp loop ;-- drawShip: lda $82 ; mychange ; asl tay lda ypos,y sta $00 iny lda ypos,y sta $01 ldx #42 lda ($00,x) cmp #0 beq noCrash cmp #5 ; bne crashed ;my changes noCrash: lda #5 sta ($00,x) lda $60 cmp $61 beq ret lda $61 asl tay lda ypos,y sta $00 iny lda ypos,y sta $01 lda #0 ldx #42 sta ($00,x) lda $60 sta $61 ret: rts ;-- crashed: lda $fe sta ($00,x) jmp crashed ;-- readKeys: lda $ff cmp #119 bne notUp dec $60 rts notUp: cmp #120 bne noMove inc $60 noMove: rts ;-- init: ldx #0 drawLogo: lda bottomLogo,x sta $500,x inx cpx #0 bne drawLogo lda #10 sta $60 sta $61 ldx #0 lda #$c c:sta $200,x sta $400,x dex cpx #0 bne c lda #16 sta $80 ; origin ldx #15 set: sta $81,x ; target dex bpl set rts ;-- drawMap: lda #0 sta $78 lda #32 sta $79 lda #192 sta $7a lda #224 sta $7b ldx #15 drawLoop: lda $81,x sta $82,x tay lda ypos,y sta $00 iny lda ypos,y sta $01 lda #$c ldy $78 sta ($00),y iny sta ($00),y ldy $7b sta ($00),y iny sta ($00),y ldy $79 lda #0 sta ($00),y iny sta ($00),y ldy $7a sta ($00),y iny sta ($00),y inc $78 inc $79 inc $7a inc $7b inc $78 inc $79 inc $7a inc $7b dex bpl drawLoop rts ;--- genMap: lda $80 cmp $81 beq done lda $80 clc sbc $81 bpl plus bmi minus done: lda $fe and #$f asl sta $80 rts minus: dec $81 dec $81 rts plus: inc $81 inc $81 rts ypos: dcb $00,$02,$20,$02,$40,$02,$60,$02 dcb $80,$02,$a0,$02,$c0,$02,$e0,$02 dcb $00,$03,$20,$03,$40,$03,$60,$03 dcb $80,$03,$a0,$03,$c0,$03,$e0,$03 dcb $00,$04,$20,$04,$40,$04,$60,$04 dcb $80,$04,$a0,$04,$c0,$04,$e0,$04 dcb $00,$05,$20,$05,$40,$05,$60,$05 dcb $80,$05,$a0,$05,$c0,$05,$e0,$05 bottomLogo: dcb $0,$0,$0,$0,$0,$0,$0,$0,$0,$0,$0,$0,$0,$0 dcb $0,$0,$0,$0,$0,$0,$0,$0,$0,$0,$0,$0,$0,$0 dcb $0,$0,$0,$0,$0,$0,$1,$1,$1,$6,$1,$1,$1,$0 dcb $0,$6,$1,$1,$6,$0,$0,$1,$1,$1,$6,$0,$1,$1 dcb $1,$0,$1,$1,$1,$6,$0,$0,$6,$1,$6,$0,$6,$0 dcb $1,$0,$6,$1,$6,$1,$6,$0,$1,$0,$1,$0,$6,$0 dcb $6,$1,$6,$0,$6,$0,$1,$0,$6,$1,$6,$0,$0,$6 dcb $1,$1,$6,$6,$1,$1,$1,$0,$6,$1,$0,$0,$1,$0 dcb $1,$6,$0,$6,$6,$1,$1,$1,$0,$6,$1,$0,$6,$1 dcb $0,$6,$6,$6,$6,$6,$1,$6,$1,$1,$6,$6,$6,$1 dcb $1,$1,$1,$6,$1,$6,$6,$6,$6,$1,$6,$6,$6,$6 dcb $1,$1,$1,$6,$6,$6,$6,$1,$1,$1,$1,$e,$1,$1 dcb $e,$6,$6,$1,$1,$6,$1,$6,$1,$1,$1,$1,$e,$1 dcb $1,$1,$1,$6,$1,$1,$6,$1,$6,$6,$6,$1,$1,$1 dcb $6,$e,$1,$1,$6,$e,$6,$1,$1,$e,$1,$e,$6,$1 dcb $1,$1,$6,$e,$1,$1,$1,$e,$1,$1,$6,$1,$6,$e dcb $e,$e,$6,$e,$e,$6,$e,$e,$6,$e,$e,$6,$e,$e dcb $6,$e,$e,$6,$e,$e,$6,$e,$e,$6,$e,$e,$6,$e dcb $e,$6,$e,$e xscreensaver-5.36/hacks/images/m6502/starfield2d.asm000644 000767 000024 00000000720 11112067705 022151 0ustar00jwzstaff000000 000000 ; 2d starfield ; Submitted by Anonymous i:ldx #$7 g:lda $fe and #3 adc #1 sta $0,x lda $fe and #$1f sta $20,x dex bpl g f: lda #$ff sta $10 delay: nop dec $10 bne delay lda #$00 sta $80 lda #$02 sta $81 ldx #$7 l:lda $20,x pha clc sbc $00,x and #$1f sta $20,x lda $20,x tay lda #1 sta ($80),y pla tay lda #0 sta ($80),y lda $80 clc adc #$80 bne n inc $81 n:sta $80 dex bpl l jmp f xscreensaver-5.36/hacks/images/m6502/wave6502.asm000644 000767 000024 00000005341 10762436156 021243 0ustar00jwzstaff000000 000000 ;;; 6502 logo Jeremy English 12-January-2008 start: ldx #0 stx $20 lda #5 sta $21 lda $fe sta $22 loop: dec $21 lda $21 beq randcolor jmp pastrandcolor randcolor: lda #5 sta $21 ldx #33 inc $22 lda $22 and #7 tay rl: lda $1000,x beq pastcolor1 lda color_row,y sta $1000,x pastcolor1: lda $1040,x beq pastcolor2 lda color_row,y sta $1040,x pastcolor2: lda $1080,x beq pastcolor3 lda color_row,y sta $1080,x pastcolor3: lda $10c0,x beq pastcolor4 lda color_row,y sta $10c0,x pastcolor4: lda $1100,x beq pastcolor5 lda color_row,y sta $1100,x pastcolor5: lda $1140,x beq pastcolor6 lda color_row,y sta $1140,x pastcolor6: lda $1180,x beq pastcolor7 lda color_row,y sta $1180,x pastcolor7: lda $11C0,x beq pastcolor8 lda color_row,y sta $11C0,x pastcolor8: lda $1200,x beq pastcolor9 lda color_row,y sta $1200,x pastcolor9: inx txa and #$3f bne rl pastrandcolor: inc $20 lda $20 and #$3f tay and #$1f tax lda sinus,x tax d: lda #0 sta $2e0,x sta $3e0,x lda $1000,y sta $300,x lda $1080,y sta $320,x lda $1100,y sta $340,x lda $1180,y sta $360,x lda $1200,y sta $380,x lda $1280,y sta $3a0,x lda $1300,y sta $3c0,x lda $1380,y sta $3c0,x inx iny txa and #$1f bne d jmp loop ; 32 ($20) long sinus: dcb 0,0,0,0,$20,$20,$20 dcb $40,$40,$60,$80,$a0,$a0,$c0,$c0,$c0 dcb $e0,$e0,$e0,$e0,$c0,$c0,$c0 dcb $a0,$a0,$80,$60,$40,$40,$20,$20,$20 color_row: dcb $7,$8,$9,$2,$4,$6,$e,$3 *=$1000 dcb 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 dcb 0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,0,0,1,1,1,1,1,1 dcb 0,0,1,1,1,1,1,1,0,0,1,1,1,1,1,1,0,0,0,0,0,0,0,0 dcb 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 dcb 0,0,1,1,1,1,1,1,0,0,1,1,1,1,1,1,0,0,1,1,1,1,1,1 dcb 0,0,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 dcb 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0 dcb 0,0,1,1,0,0,0,0,0,0,1,1,0,0,1,1,0,0,0,0,0,0,1,1 dcb 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 dcb 0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,1,1,0,0,0,0 dcb 0,0,1,1,0,0,1,1,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0 dcb 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 dcb 0,0,1,1,1,1,1,1,0,0,1,1,1,1,1,1,0,0,1,1,0,0,1,1 dcb 0,0,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 dcb 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1 dcb 0,0,1,1,1,1,1,1,0,0,1,1,0,0,1,1,0,0,1,1,1,1,1,1 dcb 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 dcb 0,0,0,0,0,0,0,0,0,0,1,1,0,0,1,1,0,0,0,0,0,0,1,1 dcb 0,0,1,1,0,0,1,1,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0 dcb 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 dcb 0,0,1,1,0,0,1,1,0,0,0,0,0,0,1,1,0,0,1,1,0,0,1,1 dcb 0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 dcb 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1 dcb 0,0,1,1,1,1,1,1,0,0,1,1,1,1,1,1,0,0,1,1,1,1,1,1 dcb 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 dcb 0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,0,0,1,1,1,1,1,1 dcb 0,0,1,1,1,1,1,1,0,0,1,1,1,1,1,1 xscreensaver-5.36/hacks/images/m6502/zookeeper.asm000644 000767 000024 00000007053 10762436156 021771 0ustar00jwzstaff000000 000000 ; We all love zookeeper !!!! ; muhmi Nov 13, 2007 9:45 am ldx #0 lda #0 hupsu: sta $200,x sta $300,x sta $400,x sta $500,x bne hupsu lda #1 ldx #0 fill: txa tay lda seko,x tax lda kuva,x sta $200,x lda kuva_0,x sta $300,x lda kuva_1,x sta $400,x lda kuva_2,x sta $500,x tya tax inx bne fill rts seko: dcb 46,93,219,97,168,170,196,63,204,201,206 dcb 56,238,25,2,186,209,191,138,226,80,128 dcb 58,171,81,115,42,44,102,193,69,231,107 dcb 78,5,218,103,11,13,221,130,149,16,227 dcb 105,213,232,182,17,255,27,190,205,137,192 dcb 222,233,94,52,229,96,18,220,202,122,166 dcb 43,153,131,246,177,4,70,22,7,86,173 dcb 141,151,164,32,143,40,156,185,121,132,165 dcb 62,249,252,139,154,251,85,236,12,134,245 dcb 184,39,195,119,242,244,162,74,1,77,51 dcb 33,75,35,76,34,10,89,47,189,237,71 dcb 159,9,38,101,180,116,147,140,183,157,123 dcb 14,19,126,199,100,45,241,28,125,210,155 dcb 41,254,31,144,55,247,111,95,57,53,223 dcb 152,108,203,36,214,37,113,200,66,67,197 dcb 29,250,20,212,68,87,207,163,145,211,48 dcb 136,24,98,215,169,83,124,224,181,187,142 dcb 84,240,54,110,234,59,243,79,50,30,114 dcb 6,178,0,172,148,146,179,120,60,225,65 dcb 230,208,15,72,117,248,198,106,129,92,127 dcb 175,160,49,216,176,133,64,109,112,82,90 dcb 235,104,158,194,8,161,167,88,91,174,23 dcb 73,118,150,3,99,61,217,26,239,21,253 dcb 135,188,228 kuva: dcb 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 dcb 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 dcb 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0 dcb 0,0,0,0,0,1,1,1,1,1,0,0,0,0,0,0,0,0,1,1,1,1,1,1 dcb 1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0 dcb 0,0,0,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,1 dcb 0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,0,0,11,11 dcb 11,0,0,0,0,0,0,1,0,0,0,11,11,11,0,0,0,0,0,1,1,1,1,1 dcb 1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 dcb 0,0,0,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0 dcb 0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1 kuva_0: dcb 1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 dcb 0,0,0,0,0,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1 dcb 1,1,1,1,1,1,1,1,1,1,0,0,0,0,1,1,1,0,0,0,0,1,1,1 dcb 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,1,1 dcb 1,0,0,0,1,1,0,0,0,0,0,0,0,1,1,1,1,1,0,0,0,0,0,0 dcb 0,1,15,0,0,0,1,1,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,1 dcb 0,0,0,0,0,0,0,0,0,0,15,0,0,0,1,1,1,0,0,0,1,0,0,0 dcb 0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,15,0,0,0,1,1 dcb 1,0,0,0,1,0,0,0,0,1,1,1,0,0,0,1,0,0,0,1,1,1,0,0 dcb 0,0,15,0,0,0,1,1,1,0,0,0,1,0,0,0,0,1,1,1,0,0,0,1 dcb 0,0,0,1,1,1,0,0,0,0,1,0,0,0,1,1 kuva_1: dcb 1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0 dcb 0,0,15,0,0,0,1,1,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,1 dcb 0,0,0,0,0,0,0,0,0,0,15,0,0,0,1,1,1,0,0,0,1,1,0,0 dcb 0,0,0,0,0,1,1,1,1,1,0,0,0,0,0,0,0,1,1,0,0,0,1,1 dcb 1,0,0,0,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1 dcb 1,1,1,0,0,0,1,1,1,0,0,0,1,1,1,1,1,1,1,1,1,1,1,0 dcb 1,1,1,1,1,1,1,1,1,1,1,0,0,0,1,1,1,0,0,0,1,1,1,1 dcb 1,1,1,1,1,0,0,0,0,0,1,1,1,1,1,1,1,1,1,0,0,0,1,1 dcb 1,0,0,0,1,1,1,1,1,1,1,1,1,15,15,15,1,1,1,1,1,1,1,1 dcb 1,1,15,0,0,0,1,1,1,0,0,0,1,1,1,1,1,1,1,1,1,15,15,15 dcb 1,1,1,1,1,1,1,1,1,1,15,0,0,0,1,1 kuva_2: dcb 1,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 dcb 1,1,1,0,0,0,1,1,1,0,0,0,1,1,1,1,1,1,1,1,1,15,15,0 dcb 15,15,1,1,1,1,1,1,1,1,1,0,0,0,1,1,1,0,0,0,1,1,1,1 dcb 1,1,1,1,1,15,15,0,15,15,1,1,1,1,1,1,1,1,1,0,0,0,1,1 dcb 1,0,0,0,15,1,1,1,1,1,1,1,1,15,15,0,1,1,1,1,1,1,1,1 dcb 1,1,1,0,0,0,1,1,1,0,0,0,0,15,15,15,15,15,15,1,15,1,1,1 dcb 1,1,15,1,15,15,15,1,1,15,0,0,0,0,1,1,1,0,0,0,0,15,15,15 dcb 15,15,15,1,15,1,1,1,1,1,15,1,15,15,15,1,1,15,0,0,0,0,1,1 dcb 1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 dcb 0,0,0,0,0,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0 dcb 0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1 xscreensaver-5.36/hacks/images/molecules/adenine.pdb000644 000767 000024 00000003300 07253633127 022562 0ustar00jwzstaff000000 000000 HEADER Adenine: Vitamin B4; Purine base nucleotide COMPND jb09aden AUTHOR Created by Dave Woodcock at Okanagan University College AUTHOR email:woodcock@okanagan.bc.ca AUTHOR Date revised: Mon Sep 18 15:35:27 2000 GENERATED BY BABEL 1.6 HETATM 1 C 1 0.000 0.000 0.000 1.00 0.00 HETATM 2 C 1 1.394 0.000 0.000 1.00 0.00 HETATM 3 C 1 2.084 1.211 0.000 1.00 0.00 HETATM 4 N 1 1.337 2.342 -0.002 1.00 0.00 HETATM 5 C 1 -0.017 2.313 -0.003 1.00 0.00 HETATM 6 N 1 -0.710 1.149 -0.001 1.00 0.00 HETATM 7 N 1 -0.391 -1.291 0.006 1.00 0.00 HETATM 8 C 1 0.731 -2.049 0.010 1.00 0.00 HETATM 9 N 1 1.843 -1.276 0.007 1.00 0.00 HETATM 10 N 1 3.485 1.257 0.004 1.00 0.00 HETATM 11 H 1 -0.567 3.254 -0.004 1.00 0.00 HETATM 12 H 1 -1.347 -1.630 0.010 1.00 0.00 HETATM 13 H 1 0.738 -3.139 0.017 1.00 0.00 HETATM 14 H 1 3.799 2.220 -0.037 1.00 0.00 HETATM 15 H 1 3.839 0.818 0.847 1.00 0.00 CONECT 1 2 2 6 7 CONECT 2 1 1 3 9 CONECT 3 2 4 4 10 CONECT 4 3 3 5 CONECT 5 4 6 6 11 CONECT 6 1 5 5 CONECT 7 1 8 12 CONECT 8 7 9 9 13 CONECT 9 2 8 8 CONECT 10 3 14 15 CONECT 11 5 CONECT 12 7 CONECT 13 8 CONECT 14 10 CONECT 15 10 MASTER 0 0 0 0 0 0 0 0 15 0 15 0 END xscreensaver-5.36/hacks/images/molecules/adrenochrome.pdb000644 000767 000024 00000004556 07253633130 023635 0ustar00jwzstaff000000 000000 HEADER Adrenochrome: a nerve cell transmission inhibitor, and hallucinogen COMPND adrenochrome AUTHOR Created by Dave Woodcock at Okanagan University College AUTHOR email:woodcock@okanagan.bc.ca AUTHOR Date revised: Tue Aug 29 08:56:34 2000 GENERATED BY BABEL 1.6 HETATM 1 C 1 0.000 0.000 0.000 1.00 0.00 HETATM 2 C 1 1.400 0.000 0.000 1.00 0.00 HETATM 3 C 1 2.056 1.235 0.000 1.00 0.00 HETATM 4 C 1 1.351 2.436 -0.011 1.00 0.00 HETATM 5 C 1 -0.047 2.437 -0.027 1.00 0.00 HETATM 6 C 1 -0.714 1.206 -0.013 1.00 0.00 HETATM 7 O 1 -0.597 -1.046 -0.002 1.00 0.00 HETATM 8 O 1 -1.918 1.181 -0.023 1.00 0.00 HETATM 9 N 1 2.243 3.571 -0.065 1.00 0.00 HETATM 10 C 1 1.825 4.648 0.846 1.00 0.00 HETATM 11 C 1 3.553 3.011 0.321 1.00 0.00 HETATM 12 C 1 3.538 1.506 -0.050 1.00 0.00 HETATM 13 H 1 4.088 0.906 0.675 1.00 0.00 HETATM 14 O 1 4.023 1.295 -1.381 1.00 0.00 HETATM 15 H 1 1.962 -0.934 -0.006 1.00 0.00 HETATM 16 H 1 -0.608 3.370 -0.059 1.00 0.00 HETATM 17 H 1 1.674 4.250 1.849 1.00 0.00 HETATM 18 H 1 0.895 5.089 0.489 1.00 0.00 HETATM 19 H 1 2.596 5.418 0.873 1.00 0.00 HETATM 20 H 1 3.683 3.101 1.400 1.00 0.00 HETATM 21 H 1 4.364 3.531 -0.190 1.00 0.00 HETATM 22 H 1 4.963 1.501 -1.423 1.00 0.00 CONECT 1 2 6 7 CONECT 1 7 CONECT 2 1 3 15 CONECT 2 3 CONECT 3 2 4 12 CONECT 4 3 5 9 CONECT 4 5 CONECT 5 4 6 16 CONECT 6 1 5 8 CONECT 6 8 CONECT 7 1 CONECT 8 6 CONECT 9 4 10 11 CONECT 10 9 17 18 19 CONECT 11 9 12 20 21 CONECT 12 3 11 13 14 CONECT 13 12 CONECT 14 12 22 CONECT 15 2 CONECT 16 5 CONECT 17 10 CONECT 18 10 CONECT 19 10 CONECT 20 11 CONECT 21 11 CONECT 22 14 MASTER 0 0 0 0 0 0 0 0 22 0 22 0 END xscreensaver-5.36/hacks/images/molecules/bucky.pdb000644 000767 000024 00000011604 07253633130 022274 0ustar00jwzstaff000000 000000 HEADER Buckminsterfullerine: Bucky Ball COMPND bucky AUTHOR GENERATED BY SYMAPPS 1.0 ATOM 1 C 0.994 0.523 -3.137 ATOM 2 C 0.418 -0.689 -3.232 ATOM 3 C 1.239 -1.587 -2.654 ATOM 4 C 2.172 0.376 -2.500 ATOM 5 C 2.323 -0.928 -2.202 ATOM 6 C 1.297 -2.968 -0.779 ATOM 7 C 0.727 -2.610 -1.946 ATOM 8 C -0.608 -2.733 -1.813 ATOM 9 C -0.863 -3.172 -0.565 ATOM 10 C 0.315 -3.321 0.074 ATOM 11 C -1.429 -1.836 -2.393 ATOM 12 C -0.916 -0.814 -3.106 ATOM 13 C -1.675 0.277 -2.878 ATOM 14 C -2.657 -0.070 -2.024 ATOM 15 C -2.506 -1.376 -1.724 ATOM 16 C -1.096 1.488 -2.779 ATOM 17 C 0.239 1.614 -2.915 ATOM 18 C 0.658 2.557 -2.049 ATOM 19 C -0.417 3.018 -1.381 ATOM 20 C -1.503 2.359 -1.834 ATOM 21 C 1.833 2.405 -1.409 ATOM 22 C 2.596 1.319 -1.640 ATOM 23 C 3.167 0.957 -0.474 ATOM 24 C 2.760 1.823 0.475 ATOM 25 C 1.935 2.717 -0.104 ATOM 26 C 3.314 -0.348 -0.175 ATOM 27 C 2.899 -1.293 -1.041 ATOM 28 C 2.384 -2.314 -0.328 ATOM 29 C 2.486 -2.003 0.979 ATOM 30 C 3.063 -0.788 1.074 ATOM 31 C -2.321 0.938 2.198 ATOM 32 C -1.237 1.597 2.651 ATOM 33 C -0.417 0.699 3.231 ATOM 34 C -2.170 -0.366 2.497 ATOM 35 C -0.993 -0.514 3.135 ATOM 36 C 1.671 -0.268 2.871 ATOM 37 C 0.916 0.824 3.104 ATOM 38 C 1.430 1.846 2.390 ATOM 39 C 2.506 1.386 1.722 ATOM 40 C 2.653 0.079 2.018 ATOM 41 C 0.609 2.745 1.813 ATOM 42 C -0.727 2.622 1.945 ATOM 43 C -1.298 2.984 0.779 ATOM 44 C -0.315 3.332 -0.075 ATOM 45 C 0.863 3.183 0.564 ATOM 46 C -2.378 2.321 0.325 ATOM 47 C -2.896 1.302 1.038 ATOM 48 C -3.315 0.358 0.172 ATOM 49 C -3.062 0.797 -1.076 ATOM 50 C -2.485 2.012 -0.982 ATOM 51 C -3.159 -0.945 0.470 ATOM 52 C -2.593 -1.310 1.637 ATOM 53 C -1.837 -2.402 1.409 ATOM 54 C -1.939 -2.714 0.103 ATOM 55 C -2.759 -1.815 -0.477 ATOM 56 C -0.658 -2.546 2.045 ATOM 57 C -0.238 -1.605 2.914 ATOM 58 C 1.097 -1.482 2.780 ATOM 59 C 1.503 -2.349 1.832 ATOM 60 C 0.418 -3.010 1.379 CONECT 21 25 CONECT 26 27 CONECT 2 3 CONECT 1 4 CONECT 7 8 CONECT 8 9 CONECT 9 10 CONECT 27 28 CONECT 28 29 CONECT 29 30 CONECT 26 30 CONECT 6 10 CONECT 11 12 CONECT 3 7 CONECT 8 11 CONECT 3 5 CONECT 1 17 CONECT 5 27 CONECT 12 13 CONECT 13 14 CONECT 14 15 CONECT 11 15 CONECT 16 17 CONECT 6 28 CONECT 4 5 CONECT 18 21 CONECT 1 2 CONECT 4 22 CONECT 17 18 CONECT 18 19 CONECT 19 20 CONECT 16 20 CONECT 21 22 CONECT 23 26 CONECT 6 7 CONECT 2 12 CONECT 13 16 CONECT 22 23 CONECT 23 24 CONECT 24 25 CONECT 36 40 CONECT 41 42 CONECT 33 37 CONECT 38 41 CONECT 33 35 CONECT 31 47 CONECT 35 57 CONECT 42 43 CONECT 43 44 CONECT 44 45 CONECT 41 45 CONECT 46 47 CONECT 36 58 CONECT 34 35 CONECT 48 51 CONECT 31 32 CONECT 34 52 CONECT 47 48 CONECT 48 49 CONECT 49 50 CONECT 46 50 CONECT 51 52 CONECT 53 56 CONECT 36 37 CONECT 32 42 CONECT 43 46 CONECT 52 53 CONECT 53 54 CONECT 54 55 CONECT 51 55 CONECT 56 57 CONECT 32 33 CONECT 31 34 CONECT 37 38 CONECT 38 39 CONECT 39 40 CONECT 57 58 CONECT 58 59 CONECT 59 60 CONECT 56 60 CONECT 10 60 CONECT 29 59 CONECT 30 40 CONECT 24 39 CONECT 9 54 CONECT 15 55 CONECT 14 49 CONECT 20 50 CONECT 19 44 CONECT 25 45 MASTER 0 0 0 0 0 0 0 0 60 0 0 0 END xscreensaver-5.36/hacks/images/molecules/caffeine.pdb000644 000767 000024 00000004751 07253633130 022724 0ustar00jwzstaff000000 000000 HEADER Caffeine: Trimethylxanthine; a cardiac stimulant and diuretic AUTHOR Created by Dave Woodcock at Okanagan University College AUTHOR email:woodcock@okanagan.bc.ca AUTHOR Date revised: Fri Sep 29 14:53:27 2000 GENERATED BY BABEL 1.6 HETATM 1 C 1 0.000 0.000 0.000 1.00 0.00 HETATM 2 C 1 1.392 0.000 0.000 1.00 0.00 HETATM 3 N 1 2.076 1.164 0.000 1.00 0.00 HETATM 4 C 1 1.373 2.321 -0.003 1.00 0.00 HETATM 5 O 1 1.978 3.365 -0.017 1.00 0.00 HETATM 6 N 1 0.017 2.344 0.003 1.00 0.00 HETATM 7 C 1 -0.710 1.202 0.002 1.00 0.00 HETATM 8 O 1 -1.915 1.218 -0.006 1.00 0.00 HETATM 9 N 1 -0.404 -1.287 -0.019 1.00 0.00 HETATM 10 N 1 1.830 -1.279 -0.020 1.00 0.00 HETATM 11 C 1 0.715 -2.048 -0.031 1.00 0.00 HETATM 12 C 1 -1.795 -1.761 -0.044 1.00 0.00 HETATM 13 C 1 3.546 1.178 -0.016 1.00 0.00 HETATM 14 C 1 -0.690 3.634 -0.013 1.00 0.00 HETATM 15 H 1 0.720 -3.138 -0.055 1.00 0.00 HETATM 16 H 1 -1.813 -2.850 -0.090 1.00 0.00 HETATM 17 H 1 -2.307 -1.428 0.860 1.00 0.00 HETATM 18 H 1 -2.302 -1.352 -0.918 1.00 0.00 HETATM 19 H 1 3.894 1.455 -1.011 1.00 0.00 HETATM 20 H 1 3.929 0.190 0.239 1.00 0.00 HETATM 21 H 1 3.911 1.904 0.710 1.00 0.00 HETATM 22 H 1 -1.557 3.583 0.645 1.00 0.00 HETATM 23 H 1 -0.027 4.428 0.329 1.00 0.00 HETATM 24 H 1 -1.020 3.851 -1.029 1.00 0.00 CONECT 1 2 2 7 9 CONECT 2 1 1 3 10 CONECT 3 2 4 13 CONECT 4 3 5 5 6 CONECT 5 4 4 CONECT 6 4 7 14 CONECT 7 1 6 8 8 CONECT 8 7 7 CONECT 9 1 11 12 CONECT 10 2 11 11 CONECT 11 9 10 10 15 CONECT 12 9 16 17 18 CONECT 13 3 19 20 21 CONECT 14 6 22 23 24 CONECT 15 11 CONECT 16 12 CONECT 17 12 CONECT 18 12 CONECT 19 13 CONECT 20 13 CONECT 21 13 CONECT 22 14 CONECT 23 14 CONECT 24 14 MASTER 0 0 0 0 0 0 0 0 24 0 24 0 END xscreensaver-5.36/hacks/images/molecules/capsaicin.pdb000644 000767 000024 00000007215 11632336412 023113 0ustar00jwzstaff000000 000000 HEADER Capsaicin: 8-methyl-N-vanillyl-6-nonenamide; Pepper; a mucous membrane irritant AUTHOR Marvin REVDAT 1 05-MAY-09 0 HETATM 1 C UNK 0 3.607 -1.127 0.361 0.00 0.00 C+0 HETATM 2 C UNK 0 4.334 0.075 0.158 0.00 0.00 C+0 HETATM 3 C UNK 0 3.650 1.279 -0.101 0.00 0.00 C+0 HETATM 4 C UNK 0 2.246 1.299 -0.172 0.00 0.00 C+0 HETATM 5 C UNK 0 1.494 0.118 0.015 0.00 0.00 C+0 HETATM 6 C UNK 0 2.190 -1.085 0.285 0.00 0.00 C+0 HETATM 7 O UNK 0 4.263 -2.208 0.588 0.00 0.00 O+0 HETATM 8 O UNK 0 5.598 0.109 0.186 0.00 0.00 O+0 HETATM 9 C UNK 0 3.863 -3.458 0.839 0.00 0.00 C+0 HETATM 10 C UNK 0 0.011 0.136 -0.126 0.00 0.00 C+0 HETATM 11 N UNK 0 -0.660 -0.367 0.987 0.00 0.00 N+0 HETATM 12 C UNK 0 -2.024 -0.105 1.237 0.00 0.00 C+0 HETATM 13 C UNK 0 -2.604 -0.886 2.327 0.00 0.00 C+0 HETATM 14 O UNK 0 -2.896 0.656 0.691 0.00 0.00 O+0 HETATM 15 C UNK 0 -3.159 -0.033 3.504 0.00 0.00 C+0 HETATM 16 C UNK 0 -3.849 -0.911 4.584 0.00 0.00 C+0 HETATM 17 C UNK 0 -4.419 -0.081 5.764 0.00 0.00 C+0 HETATM 18 C UNK 0 -5.132 -0.923 6.711 0.00 0.00 C+0 HETATM 19 C UNK 0 -4.516 -1.628 7.675 0.00 0.00 C+0 HETATM 20 C UNK 0 -5.206 -2.525 8.600 0.00 0.00 C+0 HETATM 21 C UNK 0 -4.662 -3.972 8.454 0.00 0.00 C+0 HETATM 22 C UNK 0 -5.081 -2.006 10.057 0.00 0.00 C+0 CONECT 1 2 6 7 CONECT 2 1 3 8 CONECT 3 2 4 CONECT 4 3 5 CONECT 5 4 6 10 CONECT 6 5 1 CONECT 7 1 9 CONECT 8 2 CONECT 9 7 CONECT 10 5 11 CONECT 11 10 12 CONECT 12 11 13 14 CONECT 13 12 15 CONECT 14 12 CONECT 15 13 16 CONECT 16 15 17 CONECT 17 16 18 CONECT 18 17 19 CONECT 19 18 20 CONECT 20 19 21 22 CONECT 21 20 CONECT 22 20 MASTER 0 0 0 0 0 0 0 0 22 0 44 0 END xscreensaver-5.36/hacks/images/molecules/chlordecone.pdb000644 000767 000024 00000004340 07253633130 023443 0ustar00jwzstaff000000 000000 HEADER Chlordecone: Kepone, an insecticide and fungicide COMPND al1113 AUTHOR Created by Dave Woodcock at Okanagan University College AUTHOR email:woodcock@okanagan.bc.ca AUTHOR Date revised: Tue Aug 29 17:54:52 2000 GENERATED BY BABEL 1.6 HETATM 1 C 1 0.000 0.000 0.000 1.00 0.00 HETATM 2 O 1 1.206 0.000 0.000 1.00 0.00 HETATM 3 C 1 -0.741 1.303 0.000 1.00 0.00 HETATM 4 C 1 -0.875 1.738 -1.482 1.00 0.00 HETATM 5 C 1 -0.879 0.377 -2.249 1.00 0.00 HETATM 6 C 1 -0.745 -0.666 -1.117 1.00 0.00 HETATM 7 C 1 -2.247 0.958 -0.112 1.00 0.00 HETATM 8 C 1 -2.380 1.999 -1.247 1.00 0.00 HETATM 9 C 1 -2.237 -0.385 -0.887 1.00 0.00 HETATM 10 C 1 -2.379 0.045 -2.350 1.00 0.00 HETATM 11 C 1 -3.162 1.358 -2.394 1.00 0.00 HETATM 12 Cl 1 0.142 3.061 -2.080 1.00 0.00 HETATM 13 Cl 1 -0.299 2.574 1.159 1.00 0.00 HETATM 14 Cl 1 -2.803 3.653 -0.734 1.00 0.00 HETATM 15 Cl 1 -3.272 1.132 1.330 1.00 0.00 HETATM 16 Cl 1 -3.275 -1.723 -0.285 1.00 0.00 HETATM 17 Cl 1 -4.883 1.128 -1.986 1.00 0.00 HETATM 18 Cl 1 -2.936 2.229 -3.931 1.00 0.00 HETATM 19 Cl 1 -2.805 -1.246 -3.509 1.00 0.00 HETATM 20 Cl 1 0.141 0.211 -3.696 1.00 0.00 HETATM 21 Cl 1 -0.301 -2.317 -1.612 1.00 0.00 CONECT 1 2 2 3 6 CONECT 2 1 1 CONECT 3 1 4 7 13 CONECT 4 3 5 8 12 CONECT 5 4 6 10 20 CONECT 6 1 5 9 21 CONECT 7 3 8 9 15 CONECT 8 4 7 11 14 CONECT 9 6 7 10 16 CONECT 10 5 9 11 19 CONECT 11 8 10 17 18 CONECT 12 4 CONECT 13 3 CONECT 14 8 CONECT 15 7 CONECT 16 9 CONECT 17 11 CONECT 18 11 CONECT 19 10 CONECT 20 5 CONECT 21 6 MASTER 0 0 0 0 0 0 0 0 21 0 21 0 END xscreensaver-5.36/hacks/images/molecules/cocaine.pdb000644 000767 000024 00000010262 07253633130 022557 0ustar00jwzstaff000000 000000 HEADER Cocaine: Carboxylicacid methyl ester, an anesthetic COMPND al3078 AUTHOR Created by Dave Woodcock at Okanagan University College AUTHOR email:woodcock@okanagan.bc.ca AUTHOR Date revised: Wed Aug 30 12:33:12 2000 GENERATED BY BABEL 1.6 HETATM 1 C 1 0.000 0.000 0.000 1.00 0.00 HETATM 2 C 1 1.399 0.000 0.000 1.00 0.00 HETATM 3 C 1 2.099 1.211 0.000 1.00 0.00 HETATM 4 C 1 1.400 2.423 -0.002 1.00 0.00 HETATM 5 C 1 0.001 2.423 -0.007 1.00 0.00 HETATM 6 C 1 -0.700 1.213 -0.005 1.00 0.00 HETATM 7 C 1 -2.156 1.218 -0.022 1.00 0.00 HETATM 8 O 1 -2.759 0.175 -0.044 1.00 0.00 HETATM 9 O 1 -2.806 2.379 -0.075 1.00 0.00 HETATM 10 C 1 -4.168 2.239 0.272 1.00 0.00 HETATM 11 C 1 -4.872 3.590 0.031 1.00 0.00 HETATM 12 C 1 -4.061 4.678 0.674 1.00 0.00 HETATM 13 O 1 -4.560 5.346 1.542 1.00 0.00 HETATM 14 O 1 -2.741 4.690 0.497 1.00 0.00 HETATM 15 C 1 -2.091 5.352 1.560 1.00 0.00 HETATM 16 C 1 -6.281 3.587 0.659 1.00 0.00 HETATM 17 N 1 -6.101 3.424 2.109 1.00 0.00 HETATM 18 C 1 -7.084 2.348 0.212 1.00 0.00 HETATM 19 C 1 -6.737 1.277 1.267 1.00 0.00 HETATM 20 C 1 -5.765 1.998 2.226 1.00 0.00 HETATM 21 C 1 -4.304 1.831 1.755 1.00 0.00 HETATM 22 C 1 -7.322 3.768 2.857 1.00 0.00 HETATM 23 H 1 -0.544 -0.944 -0.002 1.00 0.00 HETATM 24 H 1 1.944 -0.944 0.000 1.00 0.00 HETATM 25 H 1 3.189 1.211 0.001 1.00 0.00 HETATM 26 H 1 1.945 3.367 -0.004 1.00 0.00 HETATM 27 H 1 -0.544 3.368 -0.019 1.00 0.00 HETATM 28 H 1 -4.624 1.481 -0.363 1.00 0.00 HETATM 29 H 1 -4.942 3.777 -1.041 1.00 0.00 HETATM 30 H 1 -2.425 6.389 1.609 1.00 0.00 HETATM 31 H 1 -2.320 4.851 2.501 1.00 0.00 HETATM 32 H 1 -1.014 5.330 1.395 1.00 0.00 HETATM 33 H 1 -6.802 4.513 0.416 1.00 0.00 HETATM 34 H 1 -6.806 2.035 -0.795 1.00 0.00 HETATM 35 H 1 -8.152 2.564 0.250 1.00 0.00 HETATM 36 H 1 -6.275 0.397 0.819 1.00 0.00 HETATM 37 H 1 -7.641 0.988 1.803 1.00 0.00 HETATM 38 H 1 -5.872 1.638 3.249 1.00 0.00 HETATM 39 H 1 -3.995 0.793 1.881 1.00 0.00 HETATM 40 H 1 -3.664 2.470 2.364 1.00 0.00 HETATM 41 H 1 -8.166 3.167 2.523 1.00 0.00 HETATM 42 H 1 -7.551 4.823 2.706 1.00 0.00 HETATM 43 H 1 -7.155 3.591 3.920 1.00 0.00 CONECT 1 2 2 6 23 CONECT 2 1 1 3 24 CONECT 3 2 4 4 25 CONECT 4 3 3 5 26 CONECT 5 4 6 6 27 CONECT 6 1 5 5 7 CONECT 7 6 8 8 9 CONECT 8 7 7 CONECT 9 7 10 CONECT 10 9 11 21 28 CONECT 11 10 12 16 29 CONECT 12 11 13 13 14 CONECT 13 12 12 CONECT 14 12 15 CONECT 15 14 30 31 32 CONECT 16 11 17 18 33 CONECT 17 16 20 22 CONECT 18 16 19 34 35 CONECT 19 18 20 36 37 CONECT 20 17 19 21 38 CONECT 21 10 20 39 40 CONECT 22 17 41 42 43 CONECT 23 1 CONECT 24 2 CONECT 25 3 CONECT 26 4 CONECT 27 5 CONECT 28 10 CONECT 29 11 CONECT 30 15 CONECT 31 15 CONECT 32 15 CONECT 33 16 CONECT 34 18 CONECT 35 18 CONECT 36 19 CONECT 37 19 CONECT 38 20 CONECT 39 21 CONECT 40 21 CONECT 41 22 CONECT 42 22 CONECT 43 22 MASTER 0 0 0 0 0 0 0 0 43 0 43 0 END xscreensaver-5.36/hacks/images/molecules/codeine.pdb000644 000767 000024 00000010272 07253633130 022565 0ustar00jwzstaff000000 000000 HEADER Methylmorphine: Codeine, a cough reflex inhibitor COMPND al3083 AUTHOR Created by Dave Woodcock at Okanagan University College AUTHOR email:woodcock@okanagan.bc.ca AUTHOR Date revised: Wed Aug 30 12:33:12 2000 GENERATED BY BABEL 1.6 HETATM 1 C 1 0.000 0.000 0.000 1.00 0.00 HETATM 2 C 1 1.400 0.000 0.000 1.00 0.00 HETATM 3 C 1 2.107 1.211 0.000 1.00 0.00 HETATM 4 C 1 1.445 2.445 -0.038 1.00 0.00 HETATM 5 C 1 0.048 2.457 0.012 1.00 0.00 HETATM 6 C 1 -0.629 1.242 0.047 1.00 0.00 HETATM 7 C 1 -2.076 1.497 -0.256 1.00 0.00 HETATM 8 C 1 -2.718 0.335 -1.023 1.00 0.00 HETATM 9 C 1 -2.362 -0.955 -0.251 1.00 0.00 HETATM 10 C 1 -0.830 -1.234 -0.281 1.00 0.00 HETATM 11 C 1 -1.864 2.827 -1.015 1.00 0.00 HETATM 12 C 1 -2.785 1.642 1.099 1.00 0.00 HETATM 13 C 1 -2.549 0.335 1.888 1.00 0.00 HETATM 14 N 1 -2.944 -0.846 1.100 1.00 0.00 HETATM 15 C 1 -2.815 -2.080 1.892 1.00 0.00 HETATM 16 H 1 -3.800 0.464 -1.011 1.00 0.00 HETATM 17 C 1 -2.286 0.268 -2.470 1.00 0.00 HETATM 18 C 1 -2.002 1.392 -3.142 1.00 0.00 HETATM 19 C 1 -1.354 2.572 -2.453 1.00 0.00 HETATM 20 H 1 -2.774 3.428 -1.022 1.00 0.00 HETATM 21 O 1 -0.789 3.474 -0.352 1.00 0.00 HETATM 22 H 1 -1.514 3.472 -3.047 1.00 0.00 HETATM 23 O 1 0.051 2.305 -2.404 1.00 0.00 HETATM 24 O 1 2.148 3.606 -0.170 1.00 0.00 HETATM 25 H 1 1.942 -0.944 -0.064 1.00 0.00 HETATM 26 H 1 3.196 1.191 -0.044 1.00 0.00 HETATM 27 H 1 -2.856 -1.789 -0.750 1.00 0.00 HETATM 28 H 1 -0.570 -1.581 -1.281 1.00 0.00 HETATM 29 H 1 -0.575 -2.018 0.429 1.00 0.00 HETATM 30 H 1 -3.852 1.800 0.945 1.00 0.00 HETATM 31 H 1 -2.368 2.484 1.653 1.00 0.00 HETATM 32 H 1 -3.143 0.370 2.801 1.00 0.00 HETATM 33 H 1 -1.498 0.252 2.165 1.00 0.00 HETATM 34 H 1 -3.495 -2.034 2.743 1.00 0.00 HETATM 35 H 1 -1.796 -2.189 2.261 1.00 0.00 HETATM 36 H 1 -3.075 -2.943 1.279 1.00 0.00 HETATM 37 H 1 -2.526 -0.630 -3.039 1.00 0.00 HETATM 38 H 1 -1.938 1.338 -4.229 1.00 0.00 HETATM 39 H 1 0.396 2.184 -3.295 1.00 0.00 HETATM 40 C 1 2.068 4.090 -1.493 1.00 0.00 HETATM 41 H 1 2.413 3.325 -2.189 1.00 0.00 HETATM 42 H 1 1.038 4.360 -1.728 1.00 0.00 HETATM 43 H 1 2.699 4.974 -1.590 1.00 0.00 CONECT 1 2 2 6 10 CONECT 2 1 1 3 25 CONECT 3 2 4 4 26 CONECT 4 3 3 5 24 CONECT 5 4 6 6 21 CONECT 6 1 5 5 7 CONECT 7 6 8 11 12 CONECT 8 7 9 16 17 CONECT 9 8 10 14 27 CONECT 10 1 9 28 29 CONECT 11 7 19 20 21 CONECT 12 7 13 30 31 CONECT 13 12 14 32 33 CONECT 14 9 13 15 CONECT 15 14 34 35 36 CONECT 16 8 CONECT 17 8 18 18 37 CONECT 18 17 17 19 38 CONECT 19 11 18 22 23 CONECT 20 11 CONECT 21 5 11 CONECT 22 19 CONECT 23 19 39 CONECT 24 4 40 CONECT 25 2 CONECT 26 3 CONECT 27 9 CONECT 28 10 CONECT 29 10 CONECT 30 12 CONECT 31 12 CONECT 32 13 CONECT 33 13 CONECT 34 15 CONECT 35 15 CONECT 36 15 CONECT 37 17 CONECT 38 18 CONECT 39 23 CONECT 40 24 41 42 43 CONECT 41 40 CONECT 42 40 CONECT 43 40 MASTER 0 0 0 0 0 0 0 0 43 0 43 0 END xscreensaver-5.36/hacks/images/molecules/cyclohexane.pdb000644 000767 000024 00000015234 07253633130 023464 0ustar00jwzstaff000000 000000 HEADER Cyclohexane: 1,2,3,4,5,6-hexaisopropylcyclohexane COMPND al3063 AUTHOR Created by Dave Woodcock at Okanagan University College AUTHOR email:woodcock@okanagan.bc.ca AUTHOR Date revised: Sun Sep 3 10:20:00 2000 GENERATED BY BABEL 1.6 HETATM 1 C 1 0.000 0.000 0.000 1.00 0.00 HETATM 2 C 1 1.565 0.000 0.000 1.00 0.00 HETATM 3 C 1 2.185 1.436 0.000 1.00 0.00 HETATM 4 C 1 1.565 2.409 1.058 1.00 0.00 HETATM 5 C 1 0.011 2.333 1.199 1.00 0.00 HETATM 6 C 1 -0.636 0.914 1.102 1.00 0.00 HETATM 7 C 1 2.238 -0.920 1.062 1.00 0.00 HETATM 8 C 1 3.676 -1.279 0.632 1.00 0.00 HETATM 9 C 1 1.540 -2.282 1.218 1.00 0.00 HETATM 10 C 1 2.217 2.309 2.471 1.00 0.00 HETATM 11 C 1 1.987 3.605 3.278 1.00 0.00 HETATM 12 C 1 3.745 2.126 2.455 1.00 0.00 HETATM 13 C 1 -0.726 0.166 2.473 1.00 0.00 HETATM 14 C 1 -1.806 -0.942 2.413 1.00 0.00 HETATM 15 C 1 -1.162 1.048 3.662 1.00 0.00 HETATM 16 C 1 -0.814 3.472 0.513 1.00 0.00 HETATM 17 C 1 -0.477 3.821 -0.947 1.00 0.00 HETATM 18 C 1 -0.663 4.782 1.320 1.00 0.00 HETATM 19 C 1 -0.573 0.185 -1.439 1.00 0.00 HETATM 20 C 1 -2.077 0.514 -1.474 1.00 0.00 HETATM 21 C 1 -0.420 -1.124 -2.240 1.00 0.00 HETATM 22 C 1 2.365 2.070 -1.423 1.00 0.00 HETATM 23 C 1 3.380 3.248 -1.378 1.00 0.00 HETATM 24 C 1 2.947 1.067 -2.454 1.00 0.00 HETATM 25 H 1 -0.308 -1.011 0.219 1.00 0.00 HETATM 26 H 1 1.866 -0.481 -0.919 1.00 0.00 HETATM 27 H 1 3.219 1.312 0.276 1.00 0.00 HETATM 28 H 1 1.800 3.418 0.741 1.00 0.00 HETATM 29 H 1 -0.171 2.602 2.221 1.00 0.00 HETATM 30 H 1 -1.683 1.071 0.864 1.00 0.00 HETATM 31 H 1 2.274 -0.432 2.031 1.00 0.00 HETATM 32 H 1 4.296 -0.395 0.523 1.00 0.00 HETATM 33 H 1 3.659 -1.819 -0.314 1.00 0.00 HETATM 34 H 1 4.129 -1.913 1.395 1.00 0.00 HETATM 35 H 1 1.366 -2.731 0.241 1.00 0.00 HETATM 36 H 1 0.598 -2.162 1.743 1.00 0.00 HETATM 37 H 1 2.167 -2.946 1.814 1.00 0.00 HETATM 38 H 1 1.784 1.476 3.021 1.00 0.00 HETATM 39 H 1 0.931 3.795 3.446 1.00 0.00 HETATM 40 H 1 2.426 4.454 2.754 1.00 0.00 HETATM 41 H 1 2.462 3.505 4.254 1.00 0.00 HETATM 42 H 1 4.206 2.819 1.750 1.00 0.00 HETATM 43 H 1 3.992 1.100 2.194 1.00 0.00 HETATM 44 H 1 4.144 2.311 3.452 1.00 0.00 HETATM 45 H 1 0.232 -0.273 2.732 1.00 0.00 HETATM 46 H 1 -1.609 -1.663 1.627 1.00 0.00 HETATM 47 H 1 -2.784 -0.492 2.238 1.00 0.00 HETATM 48 H 1 -1.828 -1.479 3.361 1.00 0.00 HETATM 49 H 1 -1.986 1.697 3.365 1.00 0.00 HETATM 50 H 1 -0.323 1.642 4.019 1.00 0.00 HETATM 51 H 1 -1.487 0.415 4.488 1.00 0.00 HETATM 52 H 1 -1.870 3.206 0.555 1.00 0.00 HETATM 53 H 1 -0.618 2.957 -1.586 1.00 0.00 HETATM 54 H 1 0.544 4.192 -1.014 1.00 0.00 HETATM 55 H 1 -1.151 4.606 -1.289 1.00 0.00 HETATM 56 H 1 0.380 5.094 1.338 1.00 0.00 HETATM 57 H 1 -1.015 4.632 2.341 1.00 0.00 HETATM 58 H 1 -1.262 5.567 0.860 1.00 0.00 HETATM 59 H 1 -0.035 0.957 -1.972 1.00 0.00 HETATM 60 H 1 -2.246 1.523 -1.106 1.00 0.00 HETATM 61 H 1 -2.630 -0.201 -0.864 1.00 0.00 HETATM 62 H 1 -2.439 0.465 -2.501 1.00 0.00 HETATM 63 H 1 -0.991 -1.924 -1.768 1.00 0.00 HETATM 64 H 1 0.625 -1.418 -2.300 1.00 0.00 HETATM 65 H 1 -0.791 -0.971 -3.254 1.00 0.00 HETATM 66 H 1 1.430 2.438 -1.818 1.00 0.00 HETATM 67 H 1 4.327 2.902 -0.962 1.00 0.00 HETATM 68 H 1 3.011 4.079 -0.782 1.00 0.00 HETATM 69 H 1 3.557 3.619 -2.388 1.00 0.00 HETATM 70 H 1 2.183 0.367 -2.790 1.00 0.00 HETATM 71 H 1 3.780 0.521 -2.010 1.00 0.00 HETATM 72 H 1 3.306 1.606 -3.330 1.00 0.00 CONECT 1 2 6 19 25 CONECT 2 1 3 7 26 CONECT 3 2 4 22 27 CONECT 4 3 5 10 28 CONECT 5 4 6 16 29 CONECT 6 1 5 13 30 CONECT 7 2 8 9 31 CONECT 8 7 32 33 34 CONECT 9 7 35 36 37 CONECT 10 4 11 12 38 CONECT 11 10 39 40 41 CONECT 12 10 42 43 44 CONECT 13 6 14 15 45 CONECT 14 13 46 47 48 CONECT 15 13 49 50 51 CONECT 16 5 17 18 52 CONECT 17 16 53 54 55 CONECT 18 16 56 57 58 CONECT 19 1 20 21 59 CONECT 20 19 60 61 62 CONECT 21 19 63 64 65 CONECT 22 3 23 24 66 CONECT 23 22 67 68 69 CONECT 24 22 70 71 72 CONECT 25 1 CONECT 26 2 CONECT 27 3 CONECT 28 4 CONECT 29 5 CONECT 30 6 CONECT 31 7 CONECT 32 8 CONECT 33 8 CONECT 34 8 CONECT 35 9 CONECT 36 9 CONECT 37 9 CONECT 38 10 CONECT 39 11 CONECT 40 11 CONECT 41 11 CONECT 42 12 CONECT 43 12 CONECT 44 12 CONECT 45 13 CONECT 46 14 CONECT 47 14 CONECT 48 14 CONECT 49 15 CONECT 50 15 CONECT 51 15 CONECT 52 16 CONECT 53 17 CONECT 54 17 CONECT 55 17 CONECT 56 18 CONECT 57 18 CONECT 58 18 CONECT 59 19 CONECT 60 20 CONECT 61 20 CONECT 62 20 CONECT 63 21 CONECT 64 21 CONECT 65 21 CONECT 66 22 CONECT 67 23 CONECT 68 23 CONECT 69 23 CONECT 70 24 CONECT 71 24 CONECT 72 24 MASTER 0 0 0 0 0 0 0 0 72 0 72 0 END xscreensaver-5.36/hacks/images/molecules/cytosine.pdb000644 000767 000024 00000002761 07253633130 023020 0ustar00jwzstaff000000 000000 HEADER Cytosine: Pyrimidine base nucleotide COMPND jb09cyto AUTHOR Created by Dave Woodcock at Okanagan University College AUTHOR email:woodcock@okanagan.bc.ca AUTHOR Date revised: Fri Sep 29 12:35:29 2000 GENERATED BY BABEL 1.6 HETATM 1 C 1 0.000 0.000 0.000 1.00 0.00 HETATM 2 C 1 1.398 0.000 0.000 1.00 0.00 HETATM 3 C 1 2.070 1.227 0.000 1.00 0.00 HETATM 4 N 1 1.356 2.375 0.001 1.00 0.00 HETATM 5 C 1 0.004 2.350 0.002 1.00 0.00 HETATM 6 N 1 -0.667 1.176 0.001 1.00 0.00 HETATM 7 O 1 -0.611 3.389 0.004 1.00 0.00 HETATM 8 N 1 3.477 1.271 0.003 1.00 0.00 HETATM 9 H 1 -0.548 -0.942 0.000 1.00 0.00 HETATM 10 H 1 1.954 -0.938 0.001 1.00 0.00 HETATM 11 H 1 -1.681 1.178 0.002 1.00 0.00 HETATM 12 H 1 3.791 2.109 0.480 1.00 0.00 HETATM 13 H 1 3.844 0.453 0.477 1.00 0.00 CONECT 1 2 2 6 9 CONECT 2 1 1 3 10 CONECT 3 2 4 4 8 CONECT 4 3 3 5 CONECT 5 4 6 7 7 CONECT 6 1 5 11 CONECT 7 5 5 CONECT 8 3 12 13 CONECT 9 1 CONECT 10 2 CONECT 11 6 CONECT 12 8 CONECT 13 8 MASTER 0 0 0 0 0 0 0 0 13 0 13 0 END xscreensaver-5.36/hacks/images/molecules/dna.pdb000644 000767 000024 00000112116 07306400143 021714 0ustar00jwzstaff000000 000000 HEADER DNA: Deoxyribonucleic acid ATOM 1 O ??? 1 4.674 19.391 -10.106 ATOM 2 C ??? 1 4.459 17.981 -9.876 ATOM 3 C ??? 1 5.288 17.571 -8.673 ATOM 4 O ??? 1 4.895 17.956 -7.317 ATOM 5 C ??? 1 5.700 16.166 -8.515 ATOM 6 O ??? 1 6.993 16.174 -7.868 ATOM 7 C ??? 1 4.606 15.591 -7.605 ATOM 8 C ??? 1 4.489 16.741 -6.607 ATOM 9 N ??? 1 3.143 16.925 -5.903 ATOM 10 C ??? 1 3.127 17.319 -4.578 ATOM 11 O ??? 1 4.173 17.497 -3.993 ATOM 12 N ??? 1 1.955 17.554 -3.958 ATOM 13 C ??? 1 0.773 17.466 -4.621 ATOM 14 N ??? 1 -0.393 17.691 -3.955 ATOM 15 C ??? 1 0.722 17.134 -5.985 ATOM 16 C ??? 1 1.945 16.843 -6.625 ATOM 17 P ??? 1 7.833 14.873 -7.879 ATOM 18 O ??? 1 6.913 13.703 -8.299 ATOM 19 O ??? 1 9.116 15.075 -8.639 ATOM 20 O ??? 1 8.137 14.505 -6.390 ATOM 21 C ??? 1 9.093 15.196 -5.586 ATOM 22 C ??? 1 8.913 14.574 -4.231 ATOM 23 O ??? 1 7.518 14.735 -3.865 ATOM 24 C ??? 1 9.081 13.086 -4.262 ATOM 25 O ??? 1 10.078 12.703 -3.397 ATOM 26 C ??? 1 7.686 12.473 -4.029 ATOM 27 C ??? 1 7.063 13.543 -3.201 ATOM 28 N ??? 1 5.563 13.566 -3.134 ATOM 29 C ??? 1 4.657 13.394 -4.141 ATOM 30 N ??? 1 3.380 13.664 -3.752 ATOM 31 C ??? 1 3.485 14.024 -2.465 ATOM 32 C ??? 1 2.474 14.525 -1.574 ATOM 33 O ??? 1 1.309 14.806 -1.867 ATOM 34 N ??? 1 2.958 14.808 -0.289 ATOM 35 C ??? 1 4.279 14.700 0.121 ATOM 36 N ??? 1 4.596 14.961 1.424 ATOM 37 N ??? 1 5.242 14.292 -0.749 ATOM 38 C ??? 1 4.801 13.971 -2.035 ATOM 39 P ??? 1 10.462 11.185 -3.172 ATOM 40 O ??? 1 9.914 10.272 -4.247 ATOM 41 O ??? 1 11.949 11.216 -2.975 ATOM 42 O ??? 1 9.792 10.862 -1.765 ATOM 43 C ??? 1 10.265 11.478 -0.528 ATOM 44 C ??? 1 9.204 11.248 0.526 ATOM 45 O ??? 1 7.918 11.627 0.016 ATOM 46 C ??? 1 9.052 9.838 1.036 ATOM 47 O ??? 1 9.614 9.642 2.306 ATOM 48 C ??? 1 7.597 9.524 0.982 ATOM 49 C ??? 1 6.965 10.887 0.744 ATOM 50 N ??? 1 5.832 10.810 -0.183 ATOM 51 C ??? 1 4.534 11.009 0.257 ATOM 52 O ??? 1 4.306 11.269 1.440 ATOM 53 N ??? 1 3.534 10.905 -0.642 ATOM 54 C ??? 1 3.770 10.552 -1.926 ATOM 55 N ??? 1 2.773 10.591 -2.855 ATOM 56 C ??? 1 5.043 10.250 -2.374 ATOM 57 C ??? 1 6.091 10.396 -1.479 ATOM 58 P ??? 1 9.660 8.226 2.989 ATOM 59 O ??? 1 9.518 7.127 1.928 ATOM 60 O ??? 1 10.794 8.089 3.999 ATOM 61 O ??? 1 8.355 8.291 3.834 ATOM 62 C ??? 1 8.139 9.269 4.865 ATOM 63 C ??? 1 6.937 8.745 5.644 ATOM 64 O ??? 1 5.814 8.819 4.753 ATOM 65 C ??? 1 6.948 7.295 6.225 ATOM 66 O ??? 1 6.417 7.199 7.512 ATOM 67 C ??? 1 6.148 6.464 5.250 ATOM 68 C ??? 1 5.222 7.503 4.599 ATOM 69 N ??? 1 4.918 7.267 3.140 ATOM 70 C ??? 1 5.599 6.623 2.107 ATOM 71 N ??? 1 4.919 6.594 0.951 ATOM 72 C ??? 1 3.772 7.259 1.254 ATOM 73 C ??? 1 2.598 7.558 0.439 ATOM 74 O ??? 1 2.404 7.232 -0.737 ATOM 75 N ??? 1 1.575 8.214 1.141 ATOM 76 C ??? 1 1.613 8.566 2.471 ATOM 77 N ??? 1 0.502 9.125 3.046 ATOM 78 N ??? 1 2.702 8.309 3.210 ATOM 79 C ??? 1 3.753 7.669 2.570 ATOM 80 P ??? 1 6.301 5.803 8.277 ATOM 81 O ??? 1 6.480 4.589 7.476 ATOM 82 O ??? 1 7.156 5.937 9.499 ATOM 83 O ??? 1 4.740 5.694 8.620 ATOM 84 C ??? 1 3.911 6.858 8.929 ATOM 85 C ??? 1 2.515 6.690 8.311 ATOM 86 O ??? 1 2.653 6.561 6.911 ATOM 87 C ??? 1 1.684 5.487 8.712 ATOM 88 O ??? 1 0.539 5.815 9.516 ATOM 89 C ??? 1 1.353 4.792 7.399 ATOM 90 C ??? 1 1.556 5.869 6.393 ATOM 91 N ??? 1 1.967 5.365 5.052 ATOM 92 C ??? 1 3.193 4.822 4.658 ATOM 93 N ??? 1 3.258 4.448 3.362 ATOM 94 C ??? 1 2.043 4.779 2.883 ATOM 95 C ??? 1 1.417 4.673 1.562 ATOM 96 N ??? 1 2.034 4.100 0.514 ATOM 97 N ??? 1 0.156 5.177 1.374 ATOM 98 C ??? 1 -0.498 5.699 2.441 ATOM 99 N ??? 1 -0.077 5.807 3.720 ATOM 100 C ??? 1 1.230 5.336 3.901 ATOM 101 P ??? 1 -0.488 4.701 10.028 ATOM 102 O ??? 1 0.013 3.297 10.287 ATOM 103 O ??? 1 -1.183 5.233 11.229 ATOM 104 O ??? 1 -1.483 4.559 8.784 ATOM 105 C ??? 1 -2.385 5.609 8.332 ATOM 106 C ??? 1 -3.291 4.910 7.309 ATOM 107 O ??? 1 -2.610 4.636 6.060 ATOM 108 C ??? 1 -3.923 3.568 7.700 ATOM 109 O ??? 1 -5.162 3.352 7.126 ATOM 110 C ??? 1 -2.961 2.582 7.123 ATOM 111 C ??? 1 -2.754 3.200 5.763 ATOM 112 N ??? 1 -1.583 2.605 5.066 ATOM 113 C ??? 1 -0.368 2.242 5.588 ATOM 114 N ??? 1 0.486 1.776 4.665 ATOM 115 C ??? 1 -0.189 1.878 3.525 ATOM 116 C ??? 1 0.183 1.571 2.180 ATOM 117 N ??? 1 1.377 0.958 1.920 ATOM 118 N ??? 1 -0.730 1.786 1.174 ATOM 119 C ??? 1 -1.964 2.218 1.475 ATOM 120 N ??? 1 -2.439 2.500 2.716 ATOM 121 C ??? 1 -1.479 2.331 3.718 ATOM 122 P ??? 1 -5.924 1.982 7.353 ATOM 123 O ??? 1 -5.172 0.938 8.012 ATOM 124 O ??? 1 -7.186 2.593 7.897 ATOM 125 O ??? 1 -6.252 1.347 5.938 ATOM 126 C ??? 1 -6.944 2.135 4.921 ATOM 127 C ??? 1 -6.715 1.372 3.651 ATOM 128 O ??? 1 -5.286 1.133 3.458 ATOM 129 C ??? 1 -7.407 0.057 3.644 ATOM 130 O ??? 1 -8.489 0.026 2.771 ATOM 131 C ??? 1 -6.310 -0.990 3.438 ATOM 132 C ??? 1 -5.156 -0.150 2.865 ATOM 133 N ??? 1 -3.757 -0.647 3.037 ATOM 134 C ??? 1 -2.979 -0.923 1.905 ATOM 135 O ??? 1 -3.374 -0.727 0.747 ATOM 136 N ??? 1 -1.687 -1.340 2.116 ATOM 137 C ??? 1 -1.144 -1.494 3.381 ATOM 138 O ??? 1 0.074 -1.754 3.445 ATOM 139 C ??? 1 -1.948 -1.227 4.501 ATOM 140 C ??? 1 -1.422 -1.319 5.892 ATOM 141 C ??? 1 -3.248 -0.795 4.314 ATOM 142 P ??? 1 -9.378 -1.306 2.603 ATOM 143 O ??? 1 -9.127 -2.221 3.726 ATOM 145 O ??? 1 -8.753 -2.007 1.349 ATOM 146 C ??? 1 -8.460 -1.252 0.127 ATOM 147 C ??? 1 -7.623 -2.192 -0.688 ATOM 148 O ??? 1 -6.477 -2.562 0.073 ATOM 149 C ??? 1 -8.255 -3.511 -1.016 ATOM 150 O ??? 1 -8.724 -3.527 -2.285 ATOM 151 C ??? 1 -7.224 -4.587 -0.757 ATOM 152 C ??? 1 -6.004 -3.753 -0.494 ATOM 153 N ??? 1 -4.890 -4.263 0.346 ATOM 154 C ??? 1 -3.627 -4.303 -0.238 ATOM 155 O ??? 1 -3.413 -4.052 -1.439 ATOM 156 N ??? 1 -2.559 -4.547 0.575 ATOM 157 C ??? 1 -2.672 -4.694 1.927 ATOM 158 O ??? 1 -1.603 -4.845 2.510 ATOM 159 C ??? 1 -3.962 -4.607 2.537 ATOM 160 C ??? 1 -4.169 -4.666 4.067 ATOM 161 C ??? 1 -5.072 -4.416 1.690 ATOM 162 P ??? 1 -9.083 -4.896 -2.982 ATOM 163 O ??? 1 -9.692 -5.915 -2.114 ATOM 164 O ??? 1 -9.784 -4.333 -4.195 ATOM 165 O ??? 1 -7.769 -5.544 -3.501 ATOM 166 C ??? 1 -6.988 -4.787 -4.548 ATOM 167 C ??? 1 -5.787 -5.605 -4.680 ATOM 168 O ??? 1 -5.186 -5.816 -3.381 ATOM 169 C ??? 1 -6.160 -6.983 -5.172 ATOM 170 O ??? 1 -5.775 -7.049 -6.554 ATOM 171 C ??? 1 -5.475 -7.989 -4.170 ATOM 172 C ??? 1 -4.470 -7.095 -3.471 ATOM 173 N ??? 1 -4.143 -7.481 -2.064 ATOM 174 C ??? 1 -2.880 -7.900 -1.674 ATOM 175 O ??? 1 -1.981 -8.028 -2.497 ATOM 176 N ??? 1 -2.644 -8.106 -0.357 ATOM 177 C ??? 1 -3.593 -7.906 0.580 ATOM 178 N ??? 1 -3.294 -8.029 1.897 ATOM 179 C ??? 1 -4.887 -7.515 0.234 ATOM 180 C ??? 1 -5.144 -7.290 -1.118 ATOM 181 P ??? 1 -6.271 -8.185 -7.504 ATOM 182 O ??? 1 -7.612 -8.682 -7.077 ATOM 183 O ??? 1 -6.109 -7.701 -8.887 ATOM 184 O ??? 1 -5.255 -9.348 -7.127 ATOM 185 C ??? 1 -3.864 -9.233 -7.443 ATOM 186 C ??? 1 -3.265 -10.503 -6.982 ATOM 187 O ??? 1 -3.388 -10.408 -5.569 ATOM 188 C ??? 1 -3.913 -11.848 -7.400 ATOM 189 O ??? 1 -2.906 -12.861 -7.541 ATOM 190 C ??? 1 -4.865 -12.134 -6.218 ATOM 191 C ??? 1 -3.937 -11.700 -5.115 ATOM 192 N ??? 1 -4.370 -11.653 -3.684 ATOM 193 C ??? 1 -5.572 -11.359 -3.092 ATOM 194 N ??? 1 -5.502 -11.208 -1.750 ATOM 195 C ??? 1 -4.184 -11.405 -1.464 ATOM 196 C ??? 1 -3.484 -11.398 -0.187 ATOM 197 O ??? 1 -3.973 -11.294 0.939 ATOM 198 N ??? 1 -2.117 -11.651 -0.293 ATOM 199 C ??? 1 -1.432 -11.934 -1.458 ATOM 200 N ??? 1 -0.114 -12.247 -1.341 ATOM 201 N ??? 1 -2.059 -11.968 -2.664 ATOM 202 C ??? 1 -3.452 -11.687 -2.620 ATOM 203 P ??? 1 -2.430 -13.413 -8.952 ATOM 204 O ??? 1 -3.259 -14.642 -9.185 ATOM 205 O ??? 1 -2.433 -12.356 -10.046 ATOM 206 O ??? 1 -0.882 -13.756 -8.697 ATOM 207 C ??? 1 0.079 -12.685 -8.383 ATOM 208 C ??? 1 1.266 -13.194 -7.564 ATOM 209 O ??? 1 0.999 -13.349 -6.166 ATOM 210 C ??? 1 1.851 -14.504 -7.958 ATOM 211 O ??? 1 3.274 -14.536 -7.758 ATOM 212 C ??? 1 1.034 -15.479 -7.076 ATOM 213 C ??? 1 1.061 -14.732 -5.783 ATOM 214 N ??? 1 0.018 -15.063 -4.744 ATOM 215 C ??? 1 0.371 -15.193 -3.394 ATOM 216 O ??? 1 1.555 -15.059 -3.043 ATOM 217 N ??? 1 -0.605 -15.422 -2.469 ATOM 218 C ??? 1 -1.903 -15.490 -2.823 ATOM 219 N ??? 1 -2.850 -15.626 -1.852 ATOM 220 C ??? 1 -2.311 -15.339 -4.167 ATOM 221 C ??? 1 -1.315 -15.115 -5.135 ATOM 222 P ??? 1 4.029 -15.922 -7.818 ATOM 223 O ??? 1 3.416 -16.861 -8.809 ATOM 224 O ??? 1 5.487 -15.559 -8.011 ATOM 225 O ??? 1 3.714 -16.639 -6.402 ATOM 226 C ??? 1 4.699 -16.656 -5.290 ATOM 227 C ??? 1 4.464 -17.877 -4.385 ATOM 228 O ??? 1 3.153 -17.818 -3.885 ATOM 229 C ??? 1 4.685 -19.342 -4.849 ATOM 230 O ??? 1 5.420 -20.114 -3.884 ATOM 231 C ??? 1 3.295 -19.890 -5.050 ATOM 232 C ??? 1 2.531 -19.057 -4.020 ATOM 233 N ??? 1 1.056 -18.734 -4.183 ATOM 234 C ??? 1 0.273 -18.422 -5.264 ATOM 235 N ??? 1 -1.031 -18.317 -4.953 ATOM 236 C ??? 1 -1.093 -18.575 -3.620 ATOM 237 C ??? 1 -2.226 -18.671 -2.719 ATOM 238 O ??? 1 -3.418 -18.578 -2.959 ATOM 239 N ??? 1 -1.866 -18.877 -1.414 ATOM 240 C ??? 1 -0.581 -18.991 -0.915 ATOM 241 N ??? 1 -0.396 -19.286 0.409 ATOM 242 N ??? 1 0.472 -18.926 -1.725 ATOM 243 C ??? 1 0.163 -18.734 -3.100 ATOM 244 O ??? 1 -6.680 -19.825 7.699 ATOM 245 C ??? 1 -6.306 -20.194 6.315 ATOM 246 C ??? 1 -5.053 -19.445 5.920 ATOM 247 O ??? 1 -4.418 -19.699 4.659 ATOM 248 C ??? 1 -4.994 -17.972 6.135 ATOM 249 O ??? 1 -3.710 -17.604 6.687 ATOM 250 C ??? 1 -5.163 -17.510 4.681 ATOM 251 C ??? 1 -4.498 -18.548 3.817 ATOM 252 N ??? 1 -5.087 -18.713 2.382 ATOM 253 C ??? 1 -4.235 -18.653 1.283 ATOM 254 O ??? 1 -3.023 -18.634 1.498 ATOM 255 N ??? 1 -4.753 -18.618 0.009 ATOM 256 C ??? 1 -6.087 -18.707 -0.208 ATOM 257 N ??? 1 -6.569 -18.815 -1.491 ATOM 258 C ??? 1 -6.991 -18.809 0.869 ATOM 259 C ??? 1 -6.468 -18.783 2.177 ATOM 260 P ??? 1 -3.519 -16.827 8.069 ATOM 261 O ??? 1 -4.231 -15.537 8.035 ATOM 262 O ??? 1 -3.821 -17.708 9.240 ATOM 263 O ??? 1 -1.956 -16.549 8.073 ATOM 264 C ??? 1 -0.947 -17.650 8.003 ATOM 265 C ??? 1 0.325 -17.111 7.352 ATOM 266 O ??? 1 0.066 -17.132 5.962 ATOM 267 C ??? 1 0.613 -15.669 7.661 ATOM 268 O ??? 1 1.856 -15.388 8.203 ATOM 269 C ??? 1 0.265 -14.853 6.465 ATOM 270 C ??? 1 0.285 -15.854 5.380 ATOM 271 N ??? 1 -0.824 -15.536 4.452 ATOM 272 C ??? 1 -2.113 -15.141 4.752 ATOM 273 N ??? 1 -2.810 -14.728 3.684 ATOM 274 C ??? 1 -1.957 -14.896 2.652 ATOM 275 C ??? 1 -2.142 -14.574 1.260 ATOM 276 O ??? 1 -3.179 -14.132 0.774 ATOM 277 N ??? 1 -1.001 -14.804 0.451 ATOM 278 C ??? 1 0.192 -15.336 0.902 ATOM 279 N ??? 1 1.184 -15.515 0.002 ATOM 280 N ??? 1 0.382 -15.672 2.205 ATOM 281 C ??? 1 -0.729 -15.444 3.059 ATOM 282 P ??? 1 2.293 -13.866 8.376 ATOM 283 O ??? 1 1.086 -13.042 8.626 ATOM 284 O ??? 1 3.396 -13.816 9.377 ATOM 285 O ??? 1 2.922 -13.420 7.025 ATOM 286 C ??? 1 4.007 -14.108 6.407 ATOM 287 C ??? 1 4.054 -13.498 5.013 ATOM 288 O ??? 1 2.780 -13.607 4.393 ATOM 289 C ??? 1 4.326 -12.019 4.962 ATOM 290 O ??? 1 5.715 -11.793 5.178 ATOM 291 C ??? 1 3.795 -11.615 3.565 ATOM 292 C ??? 1 2.647 -12.603 3.423 ATOM 293 N ??? 1 1.244 -12.133 3.536 ATOM 294 C ??? 1 0.427 -12.102 2.410 ATOM 295 O ??? 1 0.835 -12.492 1.323 ATOM 296 N ??? 1 -0.850 -11.713 2.533 ATOM 297 C ??? 1 -1.391 -11.421 3.723 ATOM 298 N ??? 1 -2.628 -10.831 3.762 ATOM 299 C ??? 1 -0.649 -11.574 4.913 ATOM 300 C ??? 1 0.708 -11.938 4.796 ATOM 301 P ??? 1 6.336 -10.366 5.128 ATOM 302 O ??? 1 5.449 -9.428 5.909 ATOM 303 O ??? 1 7.745 -10.482 5.620 ATOM 304 O ??? 1 6.290 -10.020 3.569 ATOM 305 C ??? 1 7.055 -10.811 2.615 ATOM 306 C ??? 1 6.734 -10.308 1.217 ATOM 307 O ??? 1 5.297 -10.192 1.100 ATOM 308 C ??? 1 7.286 -8.975 0.718 ATOM 309 O ??? 1 7.393 -8.945 -0.714 ATOM 310 C ??? 1 6.225 -7.973 1.221 ATOM 311 C ??? 1 4.974 -8.794 0.845 ATOM 312 N ??? 1 3.773 -8.455 1.602 ATOM 313 C ??? 1 3.640 -7.981 2.890 ATOM 314 N ??? 1 2.384 -7.801 3.240 ATOM 315 C ??? 1 1.667 -8.192 2.129 ATOM 316 C ??? 1 0.216 -8.383 1.898 ATOM 317 O ??? 1 -0.692 -8.327 2.724 ATOM 318 N ??? 1 -0.115 -8.589 0.569 ATOM 319 C ??? 1 0.807 -8.696 -0.461 ATOM 320 N ??? 1 0.345 -8.866 -1.749 ATOM 321 N ??? 1 2.149 -8.691 -0.209 ATOM 322 C ??? 1 2.524 -8.455 1.086 ATOM 323 P ??? 1 7.575 -7.564 -1.471 ATOM 324 O ??? 1 7.955 -6.449 -0.479 ATOM 325 O ??? 1 8.741 -7.728 -2.458 ATOM 326 O ??? 1 6.254 -7.373 -2.307 ATOM 327 C ??? 1 6.024 -8.272 -3.442 ATOM 328 C ??? 1 5.019 -7.727 -4.455 ATOM 329 O ??? 1 3.633 -7.467 -4.002 ATOM 330 C ??? 1 5.448 -6.462 -5.147 ATOM 331 O ??? 1 5.043 -6.461 -6.529 ATOM 332 C ??? 1 4.765 -5.380 -4.322 ATOM 333 C ??? 1 3.522 -6.055 -3.759 ATOM 334 N ??? 1 3.349 -5.765 -2.284 ATOM 335 C ??? 1 4.280 -5.485 -1.291 ATOM 336 N ??? 1 3.718 -5.218 -0.101 ATOM 337 C ??? 1 2.389 -5.311 -0.337 ATOM 338 C ??? 1 1.210 -5.068 0.470 ATOM 339 N ??? 1 1.297 -4.554 1.713 ATOM 340 N ??? 1 -0.018 -5.382 -0.038 ATOM 341 C ??? 1 -0.107 -5.816 -1.309 ATOM 342 N ??? 1 0.900 -5.988 -2.198 ATOM 343 C ??? 1 2.136 -5.713 -1.640 ATOM 344 P ??? 1 4.958 -5.104 -7.365 ATOM 345 O ??? 1 5.978 -4.099 -6.859 ATOM 346 O ??? 1 5.021 -5.615 -8.756 ATOM 347 O ??? 1 3.560 -4.533 -7.033 ATOM 348 C ??? 1 2.362 -5.321 -7.154 ATOM 349 C ??? 1 1.273 -4.376 -6.720 ATOM 350 O ??? 1 1.389 -4.141 -5.316 ATOM 351 C ??? 1 1.322 -2.993 -7.366 ATOM 352 O ??? 1 0.329 -2.831 -8.391 ATOM 353 C ??? 1 1.333 -1.991 -6.194 ATOM 354 C ??? 1 0.897 -2.852 -5.006 ATOM 355 N ??? 1 1.537 -2.528 -3.709 ATOM 356 C ??? 1 2.863 -2.388 -3.374 ATOM 357 N ??? 1 3.059 -2.100 -2.081 ATOM 358 C ??? 1 1.825 -2.100 -1.562 ATOM 359 C ??? 1 1.312 -1.785 -0.242 ATOM 360 N ??? 1 2.105 -1.419 0.792 ATOM 361 N ??? 1 -0.035 -1.681 -0.088 ATOM 362 C ??? 1 -0.863 -1.975 -1.112 ATOM 363 N ??? 1 -0.516 -2.341 -2.360 ATOM 364 C ??? 1 0.871 -2.352 -2.537 ATOM 365 P ??? 1 0.096 -1.455 -9.141 ATOM 366 O ??? 1 1.403 -0.827 -9.454 ATOM 367 O ??? 1 -0.784 -1.681 -10.328 ATOM 368 O ??? 1 -0.708 -0.618 -8.042 ATOM 369 C ??? 1 -2.026 -1.063 -7.621 ATOM 370 C ??? 1 -2.460 -0.283 -6.398 ATOM 371 O ??? 1 -1.482 -0.424 -5.323 ATOM 372 C ??? 1 -2.702 1.209 -6.627 ATOM 373 O ??? 1 -4.034 1.463 -6.980 ATOM 374 C ??? 1 -2.262 1.804 -5.316 ATOM 375 C ??? 1 -1.039 0.909 -5.075 ATOM 376 N ??? 1 -0.210 0.993 -3.836 ATOM 377 C ??? 1 -0.736 1.017 -2.546 ATOM 378 O ??? 1 -1.957 0.851 -2.314 ATOM 379 N ??? 1 0.164 1.108 -1.498 ATOM 380 C ??? 1 1.538 1.199 -1.677 ATOM 381 O ??? 1 2.250 1.226 -0.672 ATOM 382 C ??? 1 2.054 1.179 -2.992 ATOM 383 C ??? 1 3.521 1.367 -3.242 ATOM 384 C ??? 1 1.153 1.065 -4.071 ATOM 385 P ??? 1 -4.609 2.928 -7.269 ATOM 386 O ??? 1 -3.623 3.841 -7.848 ATOM 387 O ??? 1 -5.862 2.588 -8.032 ATOM 388 O ??? 1 -4.884 3.503 -5.838 ATOM 389 C ??? 1 -5.822 2.805 -4.954 ATOM 390 C ??? 1 -5.829 3.570 -3.680 ATOM 391 O ??? 1 -4.506 3.511 -3.227 ATOM 392 C ??? 1 -6.172 5.046 -3.735 ATOM 393 O ??? 1 -7.441 5.291 -3.123 ATOM 394 C ??? 1 -5.006 5.747 -3.052 ATOM 395 C ??? 1 -4.274 4.597 -2.370 ATOM 396 N ??? 1 -2.767 4.703 -2.324 ATOM 397 C ??? 1 -2.085 4.842 -1.117 ATOM 398 O ??? 1 -2.678 5.024 -0.043 ATOM 399 N ??? 1 -0.697 4.808 -1.172 ATOM 400 C ??? 1 0.014 4.669 -2.366 ATOM 401 O ??? 1 1.237 4.636 -2.312 ATOM 402 C ??? 1 -0.682 4.595 -3.576 ATOM 403 C ??? 1 0.027 4.511 -4.924 ATOM 404 C ??? 1 -2.079 4.607 -3.526 ATOM 405 P ??? 1 -8.018 6.766 -2.948 ATOM 406 O ??? 1 -7.635 7.566 -4.152 ATOM 407 O ??? 1 -9.476 6.706 -2.680 ATOM 408 O ??? 1 -7.320 7.281 -1.652 ATOM 409 C ??? 1 -7.634 6.745 -0.332 ATOM 410 C ??? 1 -6.740 7.536 0.578 ATOM 411 O ??? 1 -5.356 7.300 0.129 ATOM 412 C ??? 1 -6.992 9.072 0.483 ATOM 413 O ??? 1 -7.500 9.642 1.681 ATOM 414 C ??? 1 -5.648 9.640 0.010 ATOM 415 C ??? 1 -4.683 8.515 0.475 ATOM 416 N ??? 1 -3.379 8.489 -0.149 ATOM 417 C ??? 1 -2.166 8.504 0.541 ATOM 418 O ??? 1 -2.158 8.517 1.779 ATOM 419 N ??? 1 -1.010 8.423 -0.184 ATOM 420 C ??? 1 -1.042 8.316 -1.562 ATOM 421 N ??? 1 0.083 8.179 -2.370 ATOM 422 C ??? 1 -2.249 8.284 -2.244 ATOM 423 C ??? 1 -3.426 8.372 -1.520 ATOM 424 P ??? 1 -8.072 11.149 1.769 ATOM 425 O ??? 1 -8.359 11.946 0.569 ATOM 426 O ??? 1 -9.253 11.131 2.697 ATOM 427 O ??? 1 -6.842 11.901 2.427 ATOM 428 C ??? 1 -6.195 11.442 3.679 ATOM 429 C ??? 1 -4.912 12.282 3.817 ATOM 430 O ??? 1 -3.876 11.994 2.873 ATOM 431 C ??? 1 -5.090 13.728 3.629 ATOM 432 O ??? 1 -4.492 14.502 4.643 ATOM 433 C ??? 1 -4.542 14.026 2.249 ATOM 434 C ??? 1 -3.391 13.126 2.230 ATOM 435 N ??? 1 -2.856 12.707 0.897 ATOM 436 C ??? 1 -3.473 12.442 -0.319 ATOM 437 N ??? 1 -2.637 12.015 -1.293 ATOM 438 C ??? 1 -1.436 12.007 -0.688 ATOM 439 C ??? 1 -0.127 11.608 -1.179 ATOM 440 O ??? 1 0.172 11.212 -2.291 ATOM 441 N ??? 1 0.874 11.683 -0.204 ATOM 442 C ??? 1 0.686 12.119 1.100 ATOM 443 N ??? 1 1.749 12.103 1.939 ATOM 444 N ??? 1 -0.519 12.555 1.528 ATOM 445 C ??? 1 -1.544 12.446 0.633 ATOM 446 P ??? 1 -5.127 15.894 4.858 ATOM 447 O ??? 1 -5.425 16.629 3.561 ATOM 448 O ??? 1 -6.250 15.527 5.754 ATOM 449 O ??? 1 -4.002 16.793 5.584 ATOM 450 C ??? 1 -3.238 16.255 6.678 ATOM 451 C ??? 1 -1.830 16.039 6.216 ATOM 452 O ??? 1 -1.871 15.509 4.883 ATOM 453 C ??? 1 -0.873 17.253 6.173 ATOM 454 O ??? 1 -0.153 17.520 7.416 ATOM 455 C ??? 1 0.090 16.942 5.027 ATOM 456 C ??? 1 -0.595 15.819 4.260 ATOM 457 N ??? 1 -0.730 16.057 2.785 ATOM 458 C ??? 1 0.227 15.578 1.903 ATOM 459 O ??? 1 1.293 15.046 2.291 ATOM 460 N ??? 1 -0.055 15.614 0.600 ATOM 461 C ??? 1 -1.197 16.106 0.107 ATOM 462 N ??? 1 -1.457 15.971 -1.213 ATOM 463 C ??? 1 -2.157 16.670 0.937 ATOM 464 C ??? 1 -1.890 16.634 2.320 ATOM 465 P ??? 1 0.085 19.035 7.891 ATOM 466 O ??? 1 -1.103 19.918 7.465 ATOM 467 O ??? 1 0.455 19.118 9.333 ATOM 468 O ??? 1 1.304 19.503 6.967 ATOM 469 C ??? 1 2.588 19.092 7.215 ATOM 470 C ??? 1 3.346 19.369 5.986 ATOM 471 O ??? 1 2.968 18.509 4.924 ATOM 472 C ??? 1 3.325 20.751 5.383 ATOM 473 O ??? 1 3.907 21.749 6.266 ATOM 474 C ??? 1 4.203 20.393 4.162 ATOM 475 C ??? 1 3.516 19.074 3.711 ATOM 476 N ??? 1 2.407 19.227 2.697 ATOM 477 C ??? 1 1.165 19.783 2.799 ATOM 478 N ??? 1 0.472 19.784 1.639 ATOM 479 C ??? 1 1.290 19.206 0.763 ATOM 480 C ??? 1 1.097 18.852 -0.624 ATOM 481 O ??? 1 0.123 18.893 -1.321 ATOM 482 N ??? 1 2.227 18.334 -1.206 ATOM 483 C ??? 1 3.438 18.092 -0.570 ATOM 484 N ??? 1 4.500 17.628 -1.280 ATOM 485 N ??? 1 3.571 18.322 0.734 ATOM 486 C ??? 1 2.483 18.897 1.373 CONECT 1 2 CONECT 2 1 3 CONECT 3 2 4 5 CONECT 4 3 8 CONECT 5 3 6 7 CONECT 6 5 17 CONECT 7 5 8 CONECT 8 4 7 9 CONECT 9 8 10 16 CONECT 10 9 11 12 CONECT 11 10 CONECT 12 10 13 CONECT 13 12 14 15 CONECT 14 13 CONECT 15 13 16 CONECT 16 9 15 CONECT 17 6 18 19 20 CONECT 18 17 CONECT 19 17 CONECT 20 17 21 CONECT 21 20 22 CONECT 22 21 23 24 CONECT 23 22 27 CONECT 24 22 25 26 CONECT 25 24 39 CONECT 26 24 27 CONECT 27 23 26 28 CONECT 28 27 29 38 CONECT 29 28 30 CONECT 30 29 31 CONECT 31 30 32 38 CONECT 32 31 33 34 CONECT 33 32 CONECT 34 32 35 CONECT 35 34 36 37 CONECT 36 35 CONECT 37 35 38 CONECT 38 28 31 37 CONECT 39 25 40 41 42 CONECT 40 39 CONECT 41 39 CONECT 42 39 43 CONECT 43 42 44 CONECT 44 43 45 46 CONECT 45 44 49 CONECT 46 44 47 48 CONECT 47 46 58 CONECT 48 46 49 CONECT 49 45 48 50 CONECT 50 49 51 57 CONECT 51 50 52 53 CONECT 52 51 CONECT 53 51 54 CONECT 54 53 55 56 CONECT 55 54 CONECT 56 54 57 CONECT 57 50 56 CONECT 58 47 59 60 61 CONECT 59 58 CONECT 60 58 CONECT 61 58 62 CONECT 62 61 63 CONECT 63 62 64 65 CONECT 64 63 68 CONECT 65 63 66 67 CONECT 66 65 80 CONECT 67 65 68 CONECT 68 64 67 69 CONECT 69 68 70 79 CONECT 70 69 71 CONECT 71 70 72 CONECT 72 71 73 79 CONECT 73 72 74 75 CONECT 74 73 CONECT 75 73 76 CONECT 76 75 77 78 CONECT 77 76 CONECT 78 76 79 CONECT 79 69 72 78 CONECT 80 66 81 82 83 CONECT 81 80 CONECT 82 80 CONECT 83 80 84 CONECT 84 83 85 CONECT 85 84 86 87 CONECT 86 85 90 CONECT 87 85 88 89 CONECT 88 87 101 CONECT 89 87 90 CONECT 90 86 89 91 CONECT 91 90 92 100 CONECT 92 91 93 CONECT 93 92 94 CONECT 94 93 95 100 CONECT 95 94 96 97 CONECT 96 95 CONECT 97 95 98 CONECT 98 97 99 CONECT 99 98 100 CONECT 100 91 94 99 CONECT 101 88 102 103 104 CONECT 102 101 CONECT 103 101 CONECT 104 101 105 CONECT 105 104 106 CONECT 106 105 107 108 CONECT 107 106 111 CONECT 108 106 109 110 CONECT 109 108 122 CONECT 110 108 111 CONECT 111 107 110 112 CONECT 112 111 113 121 CONECT 113 112 114 CONECT 114 113 115 CONECT 115 114 116 121 CONECT 116 115 117 118 CONECT 117 116 CONECT 118 116 119 CONECT 119 118 120 CONECT 120 119 121 CONECT 121 112 115 120 CONECT 122 109 123 124 125 CONECT 123 122 CONECT 124 122 CONECT 125 122 126 CONECT 126 125 127 CONECT 127 126 128 129 CONECT 128 127 132 CONECT 129 127 130 131 CONECT 130 129 142 CONECT 131 129 132 CONECT 132 128 131 133 CONECT 133 132 134 141 CONECT 134 133 135 136 CONECT 135 134 CONECT 136 134 137 CONECT 137 136 138 139 CONECT 138 137 CONECT 139 137 140 141 CONECT 140 139 CONECT 141 133 139 CONECT 142 130 143 145 CONECT 143 142 CONECT 145 142 146 CONECT 146 145 147 CONECT 147 146 148 149 CONECT 148 147 152 CONECT 149 147 150 151 CONECT 150 149 162 CONECT 151 149 152 CONECT 152 148 151 153 CONECT 153 152 154 161 CONECT 154 153 155 156 CONECT 155 154 CONECT 156 154 157 CONECT 157 156 158 159 CONECT 158 157 CONECT 159 157 160 161 CONECT 160 159 CONECT 161 153 159 CONECT 162 150 163 164 165 CONECT 163 162 CONECT 164 162 CONECT 165 162 166 CONECT 166 165 167 CONECT 167 166 168 169 CONECT 168 167 172 CONECT 169 167 170 171 CONECT 170 169 181 CONECT 171 169 172 CONECT 172 168 171 173 CONECT 173 172 174 180 CONECT 174 173 175 176 CONECT 175 174 CONECT 176 174 177 CONECT 177 176 178 179 CONECT 178 177 CONECT 179 177 180 CONECT 180 173 179 CONECT 181 170 182 183 184 CONECT 182 181 CONECT 183 181 CONECT 184 181 185 CONECT 185 184 186 CONECT 186 185 187 188 CONECT 187 186 191 CONECT 188 186 189 190 CONECT 189 188 203 CONECT 190 188 191 CONECT 191 187 190 192 CONECT 192 191 193 202 CONECT 193 192 194 CONECT 194 193 195 CONECT 195 194 196 202 CONECT 196 195 197 198 CONECT 197 196 CONECT 198 196 199 CONECT 199 198 200 201 CONECT 200 199 CONECT 201 199 202 CONECT 202 192 195 201 CONECT 203 189 204 205 206 CONECT 204 203 CONECT 205 203 CONECT 206 203 207 CONECT 207 206 208 CONECT 208 207 209 210 CONECT 209 208 213 CONECT 210 208 211 212 CONECT 211 210 222 CONECT 212 210 213 CONECT 213 209 212 214 CONECT 214 213 215 221 CONECT 215 214 216 217 CONECT 216 215 CONECT 217 215 218 CONECT 218 217 219 220 CONECT 219 218 CONECT 220 218 221 CONECT 221 214 220 CONECT 222 211 223 224 225 CONECT 223 222 CONECT 224 222 CONECT 225 222 226 CONECT 226 225 227 CONECT 227 226 228 229 CONECT 228 227 232 CONECT 229 227 230 231 CONECT 230 229 CONECT 231 229 232 CONECT 232 228 231 233 CONECT 233 232 234 243 CONECT 234 233 235 CONECT 235 234 236 CONECT 236 235 237 243 CONECT 237 236 238 239 CONECT 238 237 CONECT 239 237 240 CONECT 240 239 241 242 CONECT 241 240 CONECT 242 240 243 CONECT 243 233 236 242 CONECT 244 245 CONECT 245 244 246 CONECT 246 245 247 248 CONECT 247 246 251 CONECT 248 246 249 250 CONECT 249 248 260 CONECT 250 248 251 CONECT 251 247 250 252 CONECT 252 251 253 259 CONECT 253 252 254 255 CONECT 254 253 CONECT 255 253 256 CONECT 256 255 257 258 CONECT 257 256 CONECT 258 256 259 CONECT 259 252 258 CONECT 260 249 261 262 263 CONECT 261 260 CONECT 262 260 CONECT 263 260 264 CONECT 264 263 265 CONECT 265 264 266 267 CONECT 266 265 270 CONECT 267 265 268 269 CONECT 268 267 282 CONECT 269 267 270 CONECT 270 266 269 271 CONECT 271 270 272 281 CONECT 272 271 273 CONECT 273 272 274 CONECT 274 273 275 281 CONECT 275 274 276 277 CONECT 276 275 CONECT 277 275 278 CONECT 278 277 279 280 CONECT 279 278 CONECT 280 278 281 CONECT 281 271 274 280 CONECT 282 268 283 284 285 CONECT 283 282 CONECT 284 282 CONECT 285 282 286 CONECT 286 285 287 CONECT 287 286 288 289 CONECT 288 287 292 CONECT 289 287 290 291 CONECT 290 289 301 CONECT 291 289 292 CONECT 292 288 291 293 CONECT 293 292 294 300 CONECT 294 293 295 296 CONECT 295 294 CONECT 296 294 297 CONECT 297 296 298 299 CONECT 298 297 CONECT 299 297 300 CONECT 300 293 299 CONECT 301 290 302 303 304 CONECT 302 301 CONECT 303 301 CONECT 304 301 305 CONECT 305 304 306 CONECT 306 305 307 308 CONECT 307 306 311 CONECT 308 306 309 310 CONECT 309 308 323 CONECT 310 308 311 CONECT 311 307 310 312 CONECT 312 311 313 322 CONECT 313 312 314 CONECT 314 313 315 CONECT 315 314 316 322 CONECT 316 315 317 318 CONECT 317 316 CONECT 318 316 319 CONECT 319 318 320 321 CONECT 320 319 CONECT 321 319 322 CONECT 322 312 315 321 CONECT 323 309 324 325 326 CONECT 324 323 CONECT 325 323 CONECT 326 323 327 CONECT 327 326 328 CONECT 328 327 329 330 CONECT 329 328 333 CONECT 330 328 331 332 CONECT 331 330 344 CONECT 332 330 333 CONECT 333 329 332 334 CONECT 334 333 335 343 CONECT 335 334 336 CONECT 336 335 337 CONECT 337 336 338 343 CONECT 338 337 339 340 CONECT 339 338 CONECT 340 338 341 CONECT 341 340 342 CONECT 342 341 343 CONECT 343 334 337 342 CONECT 344 331 345 346 347 CONECT 345 344 CONECT 346 344 CONECT 347 344 348 CONECT 348 347 349 CONECT 349 348 350 351 CONECT 350 349 354 CONECT 351 349 352 353 CONECT 352 351 365 CONECT 353 351 354 CONECT 354 350 353 355 CONECT 355 354 356 364 CONECT 356 355 357 CONECT 357 356 358 CONECT 358 357 359 364 CONECT 359 358 360 361 CONECT 360 359 CONECT 361 359 362 CONECT 362 361 363 CONECT 363 362 364 CONECT 364 355 358 363 CONECT 365 352 366 367 368 CONECT 366 365 CONECT 367 365 CONECT 368 365 369 CONECT 369 368 370 CONECT 370 369 371 372 CONECT 371 370 375 CONECT 372 370 373 374 CONECT 373 372 385 CONECT 374 372 375 CONECT 375 371 374 376 CONECT 376 375 377 384 CONECT 377 376 378 379 CONECT 378 377 CONECT 379 377 380 CONECT 380 379 381 382 CONECT 381 380 CONECT 382 380 383 384 CONECT 383 382 CONECT 384 376 382 CONECT 385 373 386 387 388 CONECT 386 385 CONECT 387 385 CONECT 388 385 389 CONECT 389 388 390 CONECT 390 389 391 392 CONECT 391 390 395 CONECT 392 390 393 394 CONECT 393 392 405 CONECT 394 392 395 CONECT 395 391 394 396 CONECT 396 395 397 404 CONECT 397 396 398 399 CONECT 398 397 CONECT 399 397 400 CONECT 400 399 401 402 CONECT 401 400 CONECT 402 400 403 404 CONECT 403 402 CONECT 404 396 402 CONECT 405 393 406 407 408 CONECT 406 405 CONECT 407 405 CONECT 408 405 409 CONECT 409 408 410 CONECT 410 409 411 412 CONECT 411 410 415 CONECT 412 410 413 414 CONECT 413 412 424 CONECT 414 412 415 CONECT 415 411 414 416 CONECT 416 415 417 423 CONECT 417 416 418 419 CONECT 418 417 CONECT 419 417 420 CONECT 420 419 421 422 CONECT 421 420 CONECT 422 420 423 CONECT 423 416 422 CONECT 424 413 425 426 427 CONECT 425 424 CONECT 426 424 CONECT 427 424 428 CONECT 428 427 429 CONECT 429 428 430 431 CONECT 430 429 434 CONECT 431 429 432 433 CONECT 432 431 446 CONECT 433 431 434 CONECT 434 430 433 435 CONECT 435 434 436 445 CONECT 436 435 437 CONECT 437 436 438 CONECT 438 437 439 445 CONECT 439 438 440 441 CONECT 440 439 CONECT 441 439 442 CONECT 442 441 443 444 CONECT 443 442 CONECT 444 442 445 CONECT 445 435 438 444 CONECT 446 432 447 448 449 CONECT 447 446 CONECT 448 446 CONECT 449 446 450 CONECT 450 449 451 CONECT 451 450 452 453 CONECT 452 451 456 CONECT 453 451 454 455 CONECT 454 453 465 CONECT 455 453 456 CONECT 456 452 455 457 CONECT 457 456 458 464 CONECT 458 457 459 460 CONECT 459 458 CONECT 460 458 461 CONECT 461 460 462 463 CONECT 462 461 CONECT 463 461 464 CONECT 464 457 463 CONECT 465 454 466 467 468 CONECT 466 465 CONECT 467 465 CONECT 468 465 469 CONECT 469 468 470 CONECT 470 469 471 472 CONECT 471 470 475 CONECT 472 470 473 474 CONECT 473 472 CONECT 474 472 475 CONECT 475 471 474 476 CONECT 476 475 477 486 CONECT 477 476 478 CONECT 478 477 479 CONECT 479 478 480 486 CONECT 480 479 481 482 CONECT 481 480 CONECT 482 480 483 CONECT 483 482 484 485 CONECT 484 483 CONECT 485 483 486 CONECT 486 476 479 485 END xscreensaver-5.36/hacks/images/molecules/dodecahedrane.pdb000644 000767 000024 00000007634 07253546325 023746 0ustar00jwzstaff000000 000000 HEADER Dodecahedrane COMPND al3056 AUTHOR Created by Dave Woodcock at Okanagan University College AUTHOR email:woodcock@okanagan.bc.ca AUTHOR Date revised: Sun Sep 3 10:20:00 2000 GENERATED BY BABEL 1.6 HETATM 1 C 1 0.000 0.000 0.000 1.00 0.00 HETATM 2 C 1 1.540 0.000 0.000 1.00 0.00 HETATM 3 C 1 2.016 1.465 0.000 1.00 0.00 HETATM 4 C 1 0.771 2.369 0.000 1.00 0.00 HETATM 5 C 1 -0.476 1.465 0.000 1.00 0.00 HETATM 6 C 1 -0.476 -0.655 1.309 1.00 0.00 HETATM 7 C 1 -1.246 0.404 2.118 1.00 0.00 HETATM 8 C 1 -1.246 1.714 1.309 1.00 0.00 HETATM 9 C 1 -0.476 2.774 2.119 1.00 0.00 HETATM 10 C 1 0.770 3.179 1.310 1.00 0.00 HETATM 11 C 1 2.016 2.774 2.120 1.00 0.00 HETATM 12 C 1 2.786 1.715 1.310 1.00 0.00 HETATM 13 C 1 2.785 0.405 2.120 1.00 0.00 HETATM 14 C 1 2.016 -0.655 1.310 1.00 0.00 HETATM 15 C 1 0.769 -1.059 2.118 1.00 0.00 HETATM 16 C 1 0.770 -0.250 3.428 1.00 0.00 HETATM 17 C 1 -0.476 0.655 3.428 1.00 0.00 HETATM 18 C 1 2.015 0.656 3.429 1.00 0.00 HETATM 19 C 1 0.000 2.119 3.428 1.00 0.00 HETATM 20 C 1 1.539 2.119 3.428 1.00 0.00 HETATM 21 H 1 -0.389 -0.536 -0.866 1.00 0.00 HETATM 22 H 1 1.929 -0.535 -0.866 1.00 0.00 HETATM 23 H 1 2.645 1.669 -0.866 1.00 0.00 HETATM 24 H 1 0.771 3.031 -0.867 1.00 0.00 HETATM 25 H 1 -1.105 1.670 -0.867 1.00 0.00 HETATM 26 H 1 -1.105 -1.521 1.105 1.00 0.00 HETATM 27 H 1 -2.264 0.073 2.321 1.00 0.00 HETATM 28 H 1 -2.264 2.044 1.104 1.00 0.00 HETATM 29 H 1 -1.105 3.639 2.324 1.00 0.00 HETATM 30 H 1 0.771 4.249 1.105 1.00 0.00 HETATM 31 H 1 2.645 3.640 2.327 1.00 0.00 HETATM 32 H 1 3.804 2.046 1.106 1.00 0.00 HETATM 33 H 1 3.803 0.073 2.325 1.00 0.00 HETATM 34 H 1 2.645 -1.522 1.106 1.00 0.00 HETATM 35 H 1 0.769 -2.130 2.322 1.00 0.00 HETATM 36 H 1 0.771 -0.912 4.294 1.00 0.00 HETATM 37 H 1 -1.106 0.451 4.294 1.00 0.00 HETATM 38 H 1 2.644 0.453 4.295 1.00 0.00 HETATM 39 H 1 -0.387 2.655 4.295 1.00 0.00 HETATM 40 H 1 1.928 2.654 4.295 1.00 0.00 CONECT 1 2 5 6 21 CONECT 2 1 3 14 22 CONECT 3 2 4 12 23 CONECT 4 3 5 10 24 CONECT 5 1 4 8 25 CONECT 6 1 7 15 26 CONECT 7 6 8 17 27 CONECT 8 5 7 9 28 CONECT 9 8 10 19 29 CONECT 10 4 9 11 30 CONECT 11 10 12 20 31 CONECT 12 3 11 13 32 CONECT 13 12 14 18 33 CONECT 14 2 13 15 34 CONECT 15 6 14 16 35 CONECT 16 15 17 18 36 CONECT 17 7 16 19 37 CONECT 18 13 16 20 38 CONECT 19 9 17 20 39 CONECT 20 11 18 19 40 CONECT 21 1 CONECT 22 2 CONECT 23 3 CONECT 24 4 CONECT 25 5 CONECT 26 6 CONECT 27 7 CONECT 28 8 CONECT 29 9 CONECT 30 10 CONECT 31 11 CONECT 32 12 CONECT 33 13 CONECT 34 14 CONECT 35 15 CONECT 36 16 CONECT 37 17 CONECT 38 18 CONECT 39 19 CONECT 40 20 MASTER 0 0 0 0 0 0 0 0 40 0 40 0 END xscreensaver-5.36/hacks/images/molecules/dthc.pdb000644 000767 000024 00000010102 07255346003 022073 0ustar00jwzstaff000000 000000 HEADER Tetrahydrocannabinol: Delta 9-THC, an hallucinogen ATOM 1 O UNK 0 -1.791 -1.420 0.434 ATOM 2 C UNK 0 -0.536 -1.012 0.033 ATOM 3 C UNK 0 0.565 -1.346 0.828 ATOM 4 C UNK 0 1.855 -0.978 0.446 ATOM 5 C UNK 0 2.038 -0.295 -0.757 ATOM 6 C UNK 0 0.940 0.052 -1.556 ATOM 7 C UNK 0 -0.363 -0.272 -1.148 ATOM 8 C UNK 0 -1.599 0.113 -1.985 ATOM 9 C UNK 0 -1.568 1.523 -2.537 ATOM 10 C UNK 0 -2.681 2.231 -2.781 ATOM 11 C UNK 0 -4.068 1.708 -2.479 ATOM 12 C UNK 0 -4.085 0.222 -2.091 ATOM 13 C UNK 0 -2.892 -0.061 -1.162 ATOM 14 C UNK 0 -2.908 -1.421 -0.435 ATOM 15 O UNK 0 1.151 0.702 -2.747 ATOM 16 C UNK 0 -2.610 3.628 -3.338 ATOM 17 C UNK 0 -2.824 -2.642 -1.364 ATOM 18 C UNK 0 -4.125 -1.570 0.485 ATOM 19 C UNK 0 3.056 -1.332 1.325 ATOM 20 C UNK 0 3.365 -0.156 2.260 ATOM 21 C UNK 0 4.569 -0.467 3.158 ATOM 22 C UNK 0 4.872 0.726 4.074 ATOM 23 C UNK 0 6.079 0.425 4.969 ATOM 24 H UNK 0 0.400 -1.896 1.747 ATOM 25 H UNK 0 -1.626 -0.566 -2.849 ATOM 26 H UNK 0 -4.720 1.866 -3.352 ATOM 27 H UNK 0 -4.004 -0.399 -2.997 ATOM 28 H UNK 0 2.079 0.837 -2.898 ATOM 29 H UNK 0 -3.163 4.315 -2.681 ATOM 30 H UNK 0 -2.839 -3.562 -0.762 ATOM 31 H UNK 0 -3.995 -2.460 1.119 ATOM 32 H UNK 0 -4.210 -0.687 1.134 ATOM 33 H UNK 0 2.828 -2.232 1.917 ATOM 34 H UNK 0 2.480 0.048 2.884 ATOM 35 H UNK 0 4.349 -1.356 3.772 ATOM 36 H UNK 0 3.994 0.938 4.706 ATOM 37 H UNK 0 6.286 1.290 5.618 ATOM 38 H UNK 0 3.036 -0.022 -1.076 ATOM 39 H UNK 0 -0.602 1.973 -2.755 ATOM 40 H UNK 0 -5.037 -0.005 -1.590 ATOM 41 H UNK 0 -2.881 0.709 -0.374 ATOM 42 H UNK 0 -1.565 3.966 -3.407 ATOM 43 H UNK 0 -3.058 3.644 -4.342 ATOM 44 H UNK 0 -1.884 -2.619 -1.933 ATOM 45 H UNK 0 -3.674 -2.652 -2.061 ATOM 46 H UNK 0 -5.048 -1.683 -0.102 ATOM 47 H UNK 0 3.928 -1.546 0.687 ATOM 48 H UNK 0 3.578 0.739 1.654 ATOM 49 H UNK 0 5.449 -0.681 2.531 ATOM 50 H UNK 0 5.086 1.616 3.462 ATOM 51 H UNK 0 5.873 -0.453 5.600 ATOM 52 H UNK 0 6.967 0.224 4.351 ATOM 53 H UNK 0 -4.467 2.295 -1.638 CONECT 1 2 14 CONECT 2 1 3 7 CONECT 3 2 4 24 CONECT 4 3 5 19 CONECT 5 4 6 38 CONECT 6 5 7 15 CONECT 7 2 6 8 CONECT 8 7 9 13 25 CONECT 9 8 10 39 CONECT 10 9 11 16 CONECT 11 10 12 26 53 CONECT 12 11 27 40 13 CONECT 13 8 12 41 14 CONECT 14 1 13 17 18 CONECT 15 6 28 CONECT 16 10 29 42 43 CONECT 17 14 30 44 45 CONECT 18 14 31 32 46 CONECT 19 4 20 33 47 CONECT 20 19 21 34 48 CONECT 21 20 22 35 49 CONECT 22 21 23 36 50 CONECT 23 22 37 51 52 CONECT 24 3 CONECT 25 8 CONECT 26 11 CONECT 27 12 CONECT 28 15 CONECT 29 16 CONECT 30 17 CONECT 31 18 CONECT 32 18 CONECT 33 19 CONECT 34 20 CONECT 35 21 CONECT 36 22 CONECT 37 23 CONECT 38 5 CONECT 39 9 CONECT 40 12 CONECT 41 13 CONECT 42 16 CONECT 43 16 CONECT 44 17 CONECT 45 17 CONECT 46 18 CONECT 47 19 CONECT 48 20 CONECT 49 21 CONECT 50 22 CONECT 51 23 CONECT 52 23 CONECT 53 11 xscreensaver-5.36/hacks/images/molecules/dynamite.pdb000644 000767 000024 00000004103 07253633130 022765 0ustar00jwzstaff000000 000000 HEADER Trinitroglycerin: Dynamite, an explosive COMPND jb09trin AUTHOR Created by Dave Woodcock at Okanagan University College AUTHOR email:woodcock@okanagan.bc.ca AUTHOR Date revised: Tue Sep 19 21:46:02 2000 GENERATED BY BABEL 1.6 HETATM 1 C 1 0.000 0.000 0.000 1.00 0.00 HETATM 2 C 1 1.540 0.000 0.000 1.00 0.00 HETATM 3 C 1 2.063 1.449 0.000 1.00 0.00 HETATM 4 O 1 3.467 1.429 0.127 1.00 0.00 HETATM 5 N 1 4.015 2.776 -0.152 1.00 0.00 HETATM 6 O 1 4.998 3.268 0.635 1.00 0.00 HETATM 7 O 1 3.773 3.351 -1.351 1.00 0.00 HETATM 8 O 1 2.004 -0.755 1.098 1.00 0.00 HETATM 9 N 1 2.641 -0.291 2.107 1.00 0.00 HETATM 10 O 1 3.090 -1.154 3.047 1.00 0.00 HETATM 11 O 1 2.879 1.030 2.268 1.00 0.00 HETATM 12 O 1 -0.458 -1.330 -0.079 1.00 0.00 HETATM 13 N 1 -1.911 -1.339 -0.361 1.00 0.00 HETATM 14 O 1 -2.745 -2.029 0.450 1.00 0.00 HETATM 15 O 1 -2.357 -0.902 -1.560 1.00 0.00 HETATM 16 H 1 -0.365 0.561 -0.860 1.00 0.00 HETATM 17 H 1 -0.369 0.458 0.918 1.00 0.00 HETATM 18 H 1 1.886 -0.486 -0.912 1.00 0.00 HETATM 19 H 1 1.620 2.013 0.821 1.00 0.00 HETATM 20 H 1 1.793 1.925 -0.943 1.00 0.00 CONECT 1 2 12 16 17 CONECT 2 1 3 8 18 CONECT 3 2 4 19 20 CONECT 4 3 5 CONECT 5 4 6 7 CONECT 6 5 CONECT 7 5 CONECT 8 2 9 CONECT 9 8 10 11 CONECT 10 9 CONECT 11 9 CONECT 12 1 13 CONECT 13 12 14 15 CONECT 14 13 CONECT 15 13 CONECT 16 1 CONECT 17 1 CONECT 18 2 CONECT 19 3 CONECT 20 3 MASTER 0 0 0 0 0 0 0 0 20 0 20 0 END xscreensaver-5.36/hacks/images/molecules/glycol.pdb000644 000767 000024 00000002302 07253633130 022443 0ustar00jwzstaff000000 000000 HEADER Ethylene Glycol: Ethane-1,2-diol, Anti-freeze COMPND al2034 AUTHOR Created by Dave Woodcock at Okanagan University College AUTHOR email:woodcock@okanagan.bc.ca AUTHOR Date revised: Tue Aug 29 17:54:52 2000 GENERATED BY BABEL 1.6 HETATM 1 C 1 0.000 0.000 0.000 1.00 0.00 HETATM 2 C 1 1.542 0.000 0.000 1.00 0.00 HETATM 3 O 1 2.027 1.347 0.000 1.00 0.00 HETATM 4 O 1 -0.485 -1.347 -0.041 1.00 0.00 HETATM 5 H 1 -0.360 0.537 -0.878 1.00 0.00 HETATM 6 H 1 -0.367 0.494 0.900 1.00 0.00 HETATM 7 H 1 1.902 -0.512 -0.893 1.00 0.00 HETATM 8 H 1 1.908 -0.520 0.885 1.00 0.00 HETATM 9 H 1 1.743 1.800 0.802 1.00 0.00 HETATM 10 H 1 -0.202 -1.823 0.747 1.00 0.00 CONECT 1 2 4 5 6 CONECT 2 1 3 7 8 CONECT 3 2 9 CONECT 4 1 10 CONECT 5 1 CONECT 6 1 CONECT 7 2 CONECT 8 2 CONECT 9 3 CONECT 10 4 MASTER 0 0 0 0 0 0 0 0 10 0 10 0 END xscreensaver-5.36/hacks/images/molecules/guanine.pdb000644 000767 000024 00000003416 07253633130 022607 0ustar00jwzstaff000000 000000 HEADER Guanine: Purine base nucleotide COMPND jb09guan AUTHOR Created by Dave Woodcock at Okanagan University College AUTHOR email:woodcock@okanagan.bc.ca AUTHOR Date revised: Tue Sep 19 21:46:02 2000 GENERATED BY BABEL 1.6 HETATM 1 C 1 0.000 0.000 0.000 1.00 0.00 HETATM 2 C 1 1.392 0.000 0.000 1.00 0.00 HETATM 3 C 1 2.082 1.215 0.000 1.00 0.00 HETATM 4 N 1 1.339 2.346 -0.001 1.00 0.00 HETATM 5 C 1 -0.017 2.313 -0.003 1.00 0.00 HETATM 6 N 1 -0.709 1.149 -0.003 1.00 0.00 HETATM 7 N 1 -0.392 -1.291 -0.028 1.00 0.00 HETATM 8 C 1 0.730 -2.047 -0.044 1.00 0.00 HETATM 9 N 1 1.842 -1.275 -0.028 1.00 0.00 HETATM 10 O 1 3.285 1.253 -0.010 1.00 0.00 HETATM 11 N 1 -0.723 3.523 -0.019 1.00 0.00 HETATM 12 H 1 1.811 3.244 -0.007 1.00 0.00 HETATM 13 H 1 -1.347 -1.629 -0.048 1.00 0.00 HETATM 14 H 1 0.738 -3.137 -0.077 1.00 0.00 HETATM 15 H 1 -1.640 3.377 -0.427 1.00 0.00 HETATM 16 H 1 -0.213 4.205 -0.570 1.00 0.00 CONECT 1 2 2 6 7 CONECT 2 1 1 3 9 CONECT 3 2 4 10 10 CONECT 4 3 5 12 CONECT 5 4 6 6 11 CONECT 6 1 5 5 CONECT 7 1 8 13 CONECT 8 7 9 9 14 CONECT 9 2 8 8 CONECT 10 3 3 CONECT 11 5 15 16 CONECT 12 4 CONECT 13 7 CONECT 14 8 CONECT 15 11 CONECT 16 11 MASTER 0 0 0 0 0 0 0 0 16 0 16 0 END xscreensaver-5.36/hacks/images/molecules/heroin.pdb000644 000767 000024 00000011466 07253633130 022451 0ustar00jwzstaff000000 000000 HEADER Diacetylmorphine: Heroin, an opiate COMPND al3084 AUTHOR Created by Dave Woodcock at Okanagan University College AUTHOR email:woodcock@okanagan.bc.ca AUTHOR Date revised: Wed Aug 30 12:33:12 2000 GENERATED BY BABEL 1.6 HETATM 1 C 1 0.000 0.000 0.000 1.00 0.00 HETATM 2 C 1 1.400 0.000 0.000 1.00 0.00 HETATM 3 C 1 2.108 1.210 0.000 1.00 0.00 HETATM 4 C 1 1.452 2.447 -0.065 1.00 0.00 HETATM 5 C 1 0.055 2.457 -0.018 1.00 0.00 HETATM 6 C 1 -0.624 1.244 0.041 1.00 0.00 HETATM 7 C 1 -2.081 1.501 -0.201 1.00 0.00 HETATM 8 C 1 -2.725 0.343 -0.973 1.00 0.00 HETATM 9 C 1 -2.367 -0.953 -0.210 1.00 0.00 HETATM 10 C 1 -0.836 -1.236 -0.253 1.00 0.00 HETATM 11 C 1 -1.913 2.852 -0.934 1.00 0.00 HETATM 12 C 1 -2.752 1.623 1.177 1.00 0.00 HETATM 13 C 1 -2.503 0.306 1.943 1.00 0.00 HETATM 14 N 1 -2.936 -0.856 1.147 1.00 0.00 HETATM 15 C 1 -2.820 -2.103 1.920 1.00 0.00 HETATM 16 H 1 -3.807 0.473 -0.972 1.00 0.00 HETATM 17 C 1 -2.256 0.283 -2.408 1.00 0.00 HETATM 18 C 1 -1.948 1.398 -3.085 1.00 0.00 HETATM 19 C 1 -1.494 2.675 -2.413 1.00 0.00 HETATM 20 H 1 -2.820 3.452 -0.859 1.00 0.00 HETATM 21 O 1 -0.799 3.480 -0.318 1.00 0.00 HETATM 22 H 1 -1.885 3.520 -2.982 1.00 0.00 HETATM 23 O 1 -0.083 2.674 -2.462 1.00 0.00 HETATM 24 O 1 2.142 3.620 -0.142 1.00 0.00 HETATM 25 H 1 1.942 -0.945 -0.044 1.00 0.00 HETATM 26 H 1 3.198 1.180 -0.006 1.00 0.00 HETATM 27 H 1 -2.866 -1.782 -0.712 1.00 0.00 HETATM 28 H 1 -0.588 -1.599 -1.250 1.00 0.00 HETATM 29 H 1 -0.574 -2.010 0.465 1.00 0.00 HETATM 30 H 1 -3.823 1.785 1.052 1.00 0.00 HETATM 31 H 1 -2.320 2.456 1.731 1.00 0.00 HETATM 32 H 1 -3.068 0.334 2.874 1.00 0.00 HETATM 33 H 1 -1.444 0.211 2.184 1.00 0.00 HETATM 34 H 1 -3.492 -2.057 2.778 1.00 0.00 HETATM 35 H 1 -1.799 -2.234 2.280 1.00 0.00 HETATM 36 H 1 -3.099 -2.953 1.298 1.00 0.00 HETATM 37 H 1 -2.414 -0.639 -2.967 1.00 0.00 HETATM 38 H 1 -1.797 1.313 -4.161 1.00 0.00 HETATM 39 C 1 3.076 3.567 -1.091 1.00 0.00 HETATM 40 O 1 2.786 3.826 -2.230 1.00 0.00 HETATM 41 C 1 4.523 3.509 -0.695 1.00 0.00 HETATM 42 H 1 5.012 2.691 -1.224 1.00 0.00 HETATM 43 H 1 4.600 3.345 0.380 1.00 0.00 HETATM 44 H 1 5.008 4.450 -0.954 1.00 0.00 HETATM 45 C 1 0.390 3.733 -3.117 1.00 0.00 HETATM 46 O 1 0.845 3.595 -4.223 1.00 0.00 HETATM 47 C 1 0.417 5.083 -2.459 1.00 0.00 HETATM 48 H 1 1.199 5.692 -2.913 1.00 0.00 HETATM 49 H 1 0.619 4.970 -1.395 1.00 0.00 HETATM 50 H 1 -0.547 5.574 -2.594 1.00 0.00 CONECT 1 2 2 6 10 CONECT 2 1 1 3 25 CONECT 3 2 4 4 26 CONECT 4 3 3 5 24 CONECT 5 4 6 6 21 CONECT 6 1 5 5 7 CONECT 7 6 8 11 12 CONECT 8 7 9 16 17 CONECT 9 8 10 14 27 CONECT 10 1 9 28 29 CONECT 11 7 19 20 21 CONECT 12 7 13 30 31 CONECT 13 12 14 32 33 CONECT 14 9 13 15 CONECT 15 14 34 35 36 CONECT 16 8 CONECT 17 8 18 18 37 CONECT 18 17 17 19 38 CONECT 19 11 18 22 23 CONECT 20 11 CONECT 21 5 11 CONECT 22 19 CONECT 23 19 45 CONECT 24 4 39 CONECT 25 2 CONECT 26 3 CONECT 27 9 CONECT 28 10 CONECT 29 10 CONECT 30 12 CONECT 31 12 CONECT 32 13 CONECT 33 13 CONECT 34 15 CONECT 35 15 CONECT 36 15 CONECT 37 17 CONECT 38 18 CONECT 39 24 40 40 41 CONECT 40 39 39 CONECT 41 39 42 43 44 CONECT 42 41 CONECT 43 41 CONECT 44 41 CONECT 45 23 46 46 47 CONECT 46 45 45 CONECT 47 45 48 49 50 CONECT 48 47 CONECT 49 47 CONECT 50 47 MASTER 0 0 0 0 0 0 0 0 50 0 50 0 END xscreensaver-5.36/hacks/images/molecules/hexahelicene.pdb000644 000767 000024 00000010216 07253546325 023610 0ustar00jwzstaff000000 000000 COMPND Hexahelicene AUTHOR Created by Dave Woodcock at Okanagan University College AUTHOR email:woodcock@okanagan.bc.ca AUTHOR Date revised: Fri Sep 1 09:41:05 2000 GENERATED BY BABEL 1.6 HETATM 1 C 1 0.000 0.000 0.000 1.00 0.00 HETATM 2 C 1 1.404 0.000 0.000 1.00 0.00 HETATM 3 C 1 2.104 1.206 0.000 1.00 0.00 HETATM 4 C 1 1.402 2.413 -0.064 1.00 0.00 HETATM 5 C 1 0.002 2.407 -0.063 1.00 0.00 HETATM 6 C 1 -0.705 1.209 0.071 1.00 0.00 HETATM 7 C 1 -2.102 1.180 0.220 1.00 0.00 HETATM 8 C 1 -2.847 2.295 0.643 1.00 0.00 HETATM 9 C 1 -4.192 2.360 0.266 1.00 0.00 HETATM 10 C 1 -4.858 1.229 -0.190 1.00 0.00 HETATM 11 C 1 -4.166 0.012 -0.273 1.00 0.00 HETATM 12 C 1 -2.782 -0.001 -0.086 1.00 0.00 HETATM 13 C 1 -2.082 -1.204 -0.224 1.00 0.00 HETATM 14 C 1 -0.685 -1.210 -0.107 1.00 0.00 HETATM 15 C 1 -2.318 3.332 1.420 1.00 0.00 HETATM 16 C 1 -1.206 3.177 2.264 1.00 0.00 HETATM 17 C 1 -0.519 4.289 2.729 1.00 0.00 HETATM 18 C 1 -1.052 5.582 2.503 1.00 0.00 HETATM 19 C 1 -2.286 5.716 1.895 1.00 0.00 HETATM 20 C 1 -2.936 4.583 1.371 1.00 0.00 HETATM 21 C 1 -4.216 4.717 0.815 1.00 0.00 HETATM 22 C 1 -4.881 3.585 0.350 1.00 0.00 HETATM 23 C 1 -0.789 1.905 2.707 1.00 0.00 HETATM 24 C 1 0.400 1.759 3.421 1.00 0.00 HETATM 25 C 1 1.155 2.887 3.765 1.00 0.00 HETATM 26 C 1 0.669 4.165 3.443 1.00 0.00 HETATM 27 H 1 1.945 -0.947 -0.019 1.00 0.00 HETATM 28 H 1 3.191 1.206 -0.002 1.00 0.00 HETATM 29 H 1 1.942 3.359 -0.131 1.00 0.00 HETATM 30 H 1 -0.523 3.350 -0.198 1.00 0.00 HETATM 31 H 1 -5.918 1.264 -0.433 1.00 0.00 HETATM 32 H 1 -4.698 -0.901 -0.555 1.00 0.00 HETATM 33 H 1 -2.617 -2.140 -0.409 1.00 0.00 HETATM 34 H 1 -0.142 -2.150 -0.180 1.00 0.00 HETATM 35 H 1 -0.520 6.457 2.886 1.00 0.00 HETATM 36 H 1 -2.751 6.690 1.806 1.00 0.00 HETATM 37 H 1 -4.715 5.680 0.815 1.00 0.00 HETATM 38 H 1 -5.917 3.654 0.008 1.00 0.00 HETATM 39 H 1 -1.407 1.021 2.524 1.00 0.00 HETATM 40 H 1 0.734 0.774 3.725 1.00 0.00 HETATM 41 H 1 2.090 2.777 4.328 1.00 0.00 HETATM 42 H 1 1.225 5.042 3.772 1.00 0.00 CONECT 1 2 2 6 14 CONECT 2 1 1 3 27 CONECT 3 2 4 4 28 CONECT 4 3 3 5 29 CONECT 5 4 6 6 30 CONECT 6 1 5 5 7 CONECT 7 6 8 8 12 CONECT 8 7 7 9 15 CONECT 9 8 10 10 22 CONECT 10 9 9 11 31 CONECT 11 10 12 12 32 CONECT 12 7 11 11 13 CONECT 13 12 14 14 33 CONECT 14 1 13 13 34 CONECT 15 8 16 16 20 CONECT 16 15 15 17 23 CONECT 17 16 18 18 26 CONECT 18 17 17 19 35 CONECT 19 18 20 20 36 CONECT 20 15 19 19 21 CONECT 21 20 22 22 37 CONECT 22 9 21 21 38 CONECT 23 16 24 24 39 CONECT 24 23 23 25 40 CONECT 25 24 26 26 41 CONECT 26 17 25 25 42 CONECT 27 2 CONECT 28 3 CONECT 29 4 CONECT 30 5 CONECT 31 10 CONECT 32 11 CONECT 33 13 CONECT 34 14 CONECT 35 18 CONECT 36 19 CONECT 37 21 CONECT 38 22 CONECT 39 23 CONECT 40 24 CONECT 41 25 CONECT 42 26 MASTER 0 0 0 0 0 0 0 0 42 0 42 0 END xscreensaver-5.36/hacks/images/molecules/ibuprofen.pdb000644 000767 000024 00000006371 07253633130 023155 0ustar00jwzstaff000000 000000 HEADER Ibuprofen: Advil/Motrin, an anti-inflammatory AUTHOR Created by Dave Woodcock at Okanagan University College AUTHOR email:woodcock@okanagan.bc.ca AUTHOR Date revised: Fri Sep 1 09:41:05 2000 GENERATED BY BABEL 1.6 HETATM 1 C 1 0.000 0.000 0.000 1.00 0.00 HETATM 2 C 1 1.399 0.000 0.000 1.00 0.00 HETATM 3 C 1 2.098 1.212 0.000 1.00 0.00 HETATM 4 C 1 1.391 2.419 0.004 1.00 0.00 HETATM 5 C 1 -0.008 2.417 0.005 1.00 0.00 HETATM 6 C 1 -0.712 1.206 -0.003 1.00 0.00 HETATM 7 C 1 -2.224 1.136 -0.009 1.00 0.00 HETATM 8 C 1 -2.900 2.504 -0.232 1.00 0.00 HETATM 9 C 1 3.611 1.210 -0.042 1.00 0.00 HETATM 10 C 1 4.094 0.909 -1.477 1.00 0.00 HETATM 11 C 1 5.635 0.868 -1.503 1.00 0.00 HETATM 12 C 1 3.590 1.996 -2.450 1.00 0.00 HETATM 13 C 1 -2.686 0.573 1.305 1.00 0.00 HETATM 14 O 1 -3.846 0.297 1.466 1.00 0.00 HETATM 15 O 1 -1.792 0.321 2.277 1.00 0.00 HETATM 16 H 1 -0.539 -0.948 -0.004 1.00 0.00 HETATM 17 H 1 1.943 -0.945 -0.009 1.00 0.00 HETATM 18 H 1 1.930 3.366 -0.006 1.00 0.00 HETATM 19 H 1 -0.533 3.371 0.004 1.00 0.00 HETATM 20 H 1 -2.536 0.461 -0.807 1.00 0.00 HETATM 21 H 1 -2.546 2.944 -1.165 1.00 0.00 HETATM 22 H 1 -2.676 3.171 0.600 1.00 0.00 HETATM 23 H 1 -3.980 2.365 -0.292 1.00 0.00 HETATM 24 H 1 3.986 0.442 0.635 1.00 0.00 HETATM 25 H 1 3.990 2.181 0.277 1.00 0.00 HETATM 26 H 1 3.707 -0.061 -1.792 1.00 0.00 HETATM 27 H 1 5.991 0.094 -0.823 1.00 0.00 HETATM 28 H 1 6.034 1.834 -1.192 1.00 0.00 HETATM 29 H 1 5.978 0.645 -2.513 1.00 0.00 HETATM 30 H 1 3.941 2.975 -2.122 1.00 0.00 HETATM 31 H 1 2.500 1.993 -2.477 1.00 0.00 HETATM 32 H 1 3.970 1.793 -3.451 1.00 0.00 HETATM 33 H 1 -1.689 -0.648 2.383 1.00 0.00 CONECT 1 2 2 6 16 CONECT 2 1 1 3 17 CONECT 3 2 4 4 9 CONECT 4 3 3 5 18 CONECT 5 4 6 6 19 CONECT 6 1 5 5 7 CONECT 7 6 8 13 20 CONECT 8 7 21 22 23 CONECT 9 3 10 24 25 CONECT 10 9 11 12 26 CONECT 11 10 27 28 29 CONECT 12 10 30 31 32 CONECT 13 7 14 14 15 CONECT 14 13 13 CONECT 15 13 33 CONECT 16 1 CONECT 17 2 CONECT 18 4 CONECT 19 5 CONECT 20 7 CONECT 21 8 CONECT 22 8 CONECT 23 8 CONECT 24 9 CONECT 25 9 CONECT 26 10 CONECT 27 11 CONECT 28 11 CONECT 29 11 CONECT 30 12 CONECT 31 12 CONECT 32 12 CONECT 33 15 MASTER 0 0 0 0 0 0 0 0 33 0 33 0 END xscreensaver-5.36/hacks/images/molecules/lsd.pdb000644 000767 000024 00000011317 07253633130 021742 0ustar00jwzstaff000000 000000 HEADER Lysergic acid diethylamide, a potent hallucinogen AUTHOR Created by Dave Woodcock at Okanagan University College AUTHOR email:woodcock@okanagan.bc.ca AUTHOR Date revised: Fri Sep 1 09:41:05 2000 GENERATED BY BABEL 1.6 HETATM 1 C 1 0.000 0.000 0.000 1.00 0.00 HETATM 2 C 1 1.397 0.000 0.000 1.00 0.00 HETATM 3 C 1 2.012 1.258 0.000 1.00 0.00 HETATM 4 C 1 1.246 2.433 -0.052 1.00 0.00 HETATM 5 C 1 -0.155 2.405 -0.125 1.00 0.00 HETATM 6 C 1 -0.773 1.155 -0.096 1.00 0.00 HETATM 7 N 1 -2.065 0.769 -0.378 1.00 0.00 HETATM 8 C 1 -2.092 -0.602 -0.503 1.00 0.00 HETATM 9 C 1 -0.810 -1.103 -0.242 1.00 0.00 HETATM 10 C 1 -0.159 -2.415 -0.700 1.00 0.00 HETATM 11 C 1 1.178 -2.555 0.075 1.00 0.00 HETATM 12 C 1 2.056 -1.321 -0.019 1.00 0.00 HETATM 13 H 1 0.916 -2.675 1.126 1.00 0.00 HETATM 14 N 1 1.899 -3.768 -0.346 1.00 0.00 HETATM 15 C 1 3.394 -1.430 0.057 1.00 0.00 HETATM 16 C 1 4.101 -2.765 0.134 1.00 0.00 HETATM 17 C 1 3.115 -3.899 0.470 1.00 0.00 HETATM 18 H 1 4.565 -2.960 -0.830 1.00 0.00 HETATM 19 C 1 5.121 -2.704 1.237 1.00 0.00 HETATM 20 O 1 4.720 -2.413 2.335 1.00 0.00 HETATM 21 N 1 6.434 -3.000 1.089 1.00 0.00 HETATM 22 C 1 7.305 -2.925 2.274 1.00 0.00 HETATM 23 C 1 7.755 -4.340 2.686 1.00 0.00 HETATM 24 C 1 7.047 -3.307 -0.215 1.00 0.00 HETATM 25 C 1 6.736 -4.755 -0.646 1.00 0.00 HETATM 26 H 1 3.094 1.350 0.014 1.00 0.00 HETATM 27 H 1 1.757 3.398 -0.079 1.00 0.00 HETATM 28 H 1 -0.732 3.319 -0.249 1.00 0.00 HETATM 29 H 1 -2.858 1.432 -0.658 1.00 0.00 HETATM 30 H 1 -2.917 -1.177 -0.924 1.00 0.00 HETATM 31 H 1 0.025 -2.349 -1.772 1.00 0.00 HETATM 32 H 1 -0.811 -3.260 -0.484 1.00 0.00 HETATM 33 H 1 4.015 -0.538 0.044 1.00 0.00 HETATM 34 H 1 2.844 -3.840 1.524 1.00 0.00 HETATM 35 H 1 3.586 -4.865 0.286 1.00 0.00 HETATM 36 H 1 6.768 -2.468 3.105 1.00 0.00 HETATM 37 H 1 8.181 -2.318 2.047 1.00 0.00 HETATM 38 H 1 8.376 -4.772 1.903 1.00 0.00 HETATM 39 H 1 6.879 -4.969 2.844 1.00 0.00 HETATM 40 H 1 8.332 -4.283 3.609 1.00 0.00 HETATM 41 H 1 8.129 -3.199 -0.132 1.00 0.00 HETATM 42 H 1 6.693 -2.606 -0.971 1.00 0.00 HETATM 43 H 1 5.663 -4.894 -0.765 1.00 0.00 HETATM 44 H 1 7.103 -5.451 0.107 1.00 0.00 HETATM 45 H 1 7.230 -4.962 -1.595 1.00 0.00 HETATM 46 C 1 2.198 -3.813 -1.786 1.00 0.00 HETATM 47 H 1 2.586 -2.854 -2.128 1.00 0.00 HETATM 48 H 1 1.292 -4.053 -2.342 1.00 0.00 HETATM 49 H 1 2.936 -4.591 -1.982 1.00 0.00 CONECT 1 2 2 6 9 CONECT 2 1 1 3 12 CONECT 3 2 4 4 26 CONECT 4 3 3 5 27 CONECT 5 4 6 6 28 CONECT 6 1 5 5 7 CONECT 7 6 8 29 CONECT 8 7 9 9 30 CONECT 9 1 8 8 10 CONECT 10 9 11 31 32 CONECT 11 10 12 13 14 CONECT 12 2 11 15 15 CONECT 13 11 CONECT 14 11 17 46 CONECT 15 12 12 16 33 CONECT 16 15 17 18 19 CONECT 17 14 16 34 35 CONECT 18 16 CONECT 19 16 20 20 21 CONECT 20 19 19 CONECT 21 19 22 24 CONECT 22 21 23 36 37 CONECT 23 22 38 39 40 CONECT 24 21 25 41 42 CONECT 25 24 43 44 45 CONECT 26 3 CONECT 27 4 CONECT 28 5 CONECT 29 7 CONECT 30 8 CONECT 31 10 CONECT 32 10 CONECT 33 15 CONECT 34 17 CONECT 35 17 CONECT 36 22 CONECT 37 22 CONECT 38 23 CONECT 39 23 CONECT 40 23 CONECT 41 24 CONECT 42 24 CONECT 43 25 CONECT 44 25 CONECT 45 25 CONECT 46 14 47 48 49 CONECT 47 46 CONECT 48 46 CONECT 49 46 MASTER 0 0 0 0 0 0 0 0 49 0 49 0 END xscreensaver-5.36/hacks/images/molecules/menthol.pdb000644 000767 000024 00000006036 07253633130 022630 0ustar00jwzstaff000000 000000 HEADER Menthol: Mentha arvensis oil COMPND menthol AUTHOR Created by Dave Woodcock at Okanagan University College AUTHOR email:woodcock@okanagan.bc.ca AUTHOR Date revised: Fri Sep 1 09:41:05 2000 GENERATED BY BABEL 1.6 HETATM 1 C 1 0.000 0.000 0.000 1.00 0.00 HETATM 2 O 1 1.431 0.000 0.000 1.00 0.00 HETATM 3 C 1 -0.501 1.458 0.000 1.00 0.00 HETATM 4 C 1 -2.042 1.485 -0.004 1.00 0.00 HETATM 5 C 1 -2.576 0.746 1.240 1.00 0.00 HETATM 6 C 1 -2.072 -0.710 1.236 1.00 0.00 HETATM 7 C 1 -0.528 -0.726 1.258 1.00 0.00 HETATM 8 C 1 -0.005 -2.181 1.381 1.00 0.00 HETATM 9 C 1 1.486 -2.197 1.780 1.00 0.00 HETATM 10 C 1 -0.183 -2.997 0.081 1.00 0.00 HETATM 11 C 1 -2.539 2.945 0.003 1.00 0.00 HETATM 12 H 1 -0.367 -0.497 -0.898 1.00 0.00 HETATM 13 H 1 1.761 0.410 -0.806 1.00 0.00 HETATM 14 H 1 -0.129 1.968 -0.889 1.00 0.00 HETATM 15 H 1 -0.127 1.969 0.888 1.00 0.00 HETATM 16 H 1 -2.409 0.987 -0.903 1.00 0.00 HETATM 17 H 1 -3.666 0.750 1.224 1.00 0.00 HETATM 18 H 1 -2.229 1.249 2.142 1.00 0.00 HETATM 19 H 1 -2.440 -1.211 0.342 1.00 0.00 HETATM 20 H 1 -2.455 -1.222 2.119 1.00 0.00 HETATM 21 H 1 -0.200 -0.175 2.139 1.00 0.00 HETATM 22 H 1 -0.565 -2.673 2.176 1.00 0.00 HETATM 23 H 1 1.633 -1.600 2.680 1.00 0.00 HETATM 24 H 1 2.100 -1.796 0.975 1.00 0.00 HETATM 25 H 1 1.794 -3.223 1.980 1.00 0.00 HETATM 26 H 1 0.434 -2.578 -0.713 1.00 0.00 HETATM 27 H 1 -1.228 -2.993 -0.228 1.00 0.00 HETATM 28 H 1 0.127 -4.026 0.261 1.00 0.00 HETATM 29 H 1 -2.165 3.462 -0.880 1.00 0.00 HETATM 30 H 1 -2.178 3.451 0.898 1.00 0.00 HETATM 31 H 1 -3.629 2.960 -0.005 1.00 0.00 CONECT 1 2 3 7 12 CONECT 2 1 13 CONECT 3 1 4 14 15 CONECT 4 3 5 11 16 CONECT 5 4 6 17 18 CONECT 6 5 7 19 20 CONECT 7 1 6 8 21 CONECT 8 7 9 10 22 CONECT 9 8 23 24 25 CONECT 10 8 26 27 28 CONECT 11 4 29 30 31 CONECT 12 1 CONECT 13 2 CONECT 14 3 CONECT 15 3 CONECT 16 4 CONECT 17 5 CONECT 18 5 CONECT 19 6 CONECT 20 6 CONECT 21 7 CONECT 22 8 CONECT 23 9 CONECT 24 9 CONECT 25 9 CONECT 26 10 CONECT 27 10 CONECT 28 10 CONECT 29 11 CONECT 30 11 CONECT 31 11 MASTER 0 0 0 0 0 0 0 0 31 0 31 0 END xscreensaver-5.36/hacks/images/molecules/mescaline.pdb000644 000767 000024 00000006235 07253633130 023123 0ustar00jwzstaff000000 000000 HEADER Mescaline: Peyote, an hallucinogen COMPND jb12mesc AUTHOR Created by Dave Woodcock at Okanagan University College AUTHOR email:woodcock@okanagan.bc.ca AUTHOR Date revised: Wed Sep 20 16:26:54 2000 GENERATED BY BABEL 1.6 HETATM 1 C 1 0.000 0.000 0.000 1.00 0.00 HETATM 2 C 1 1.398 0.000 0.000 1.00 0.00 HETATM 3 C 1 2.098 1.213 0.000 1.00 0.00 HETATM 4 C 1 1.399 2.424 -0.005 1.00 0.00 HETATM 5 C 1 -0.001 2.422 0.013 1.00 0.00 HETATM 6 C 1 -0.700 1.211 0.014 1.00 0.00 HETATM 7 O 1 -2.062 1.209 0.026 1.00 0.00 HETATM 8 C 1 -2.564 1.047 -1.282 1.00 0.00 HETATM 9 O 1 -0.682 -1.180 -0.024 1.00 0.00 HETATM 10 C 1 -0.867 -1.664 1.288 1.00 0.00 HETATM 11 O 1 2.078 -1.180 -0.002 1.00 0.00 HETATM 12 C 1 2.225 -1.657 -1.321 1.00 0.00 HETATM 13 C 1 2.154 3.735 -0.007 1.00 0.00 HETATM 14 C 1 2.388 4.190 1.447 1.00 0.00 HETATM 15 N 1 3.124 5.464 1.464 1.00 0.00 HETATM 16 H 1 3.188 1.207 0.000 1.00 0.00 HETATM 17 H 1 -0.549 3.364 0.023 1.00 0.00 HETATM 18 H 1 -2.231 0.093 -1.690 1.00 0.00 HETATM 19 H 1 -2.208 1.859 -1.916 1.00 0.00 HETATM 20 H 1 -3.653 1.064 -1.252 1.00 0.00 HETATM 21 H 1 -1.432 -0.938 1.873 1.00 0.00 HETATM 22 H 1 0.101 -1.837 1.758 1.00 0.00 HETATM 23 H 1 -1.419 -2.603 1.248 1.00 0.00 HETATM 24 H 1 2.775 -0.929 -1.917 1.00 0.00 HETATM 25 H 1 1.244 -1.825 -1.765 1.00 0.00 HETATM 26 H 1 2.777 -2.597 -1.303 1.00 0.00 HETATM 27 H 1 1.574 4.490 -0.538 1.00 0.00 HETATM 28 H 1 3.114 3.603 -0.507 1.00 0.00 HETATM 29 H 1 2.966 3.432 1.976 1.00 0.00 HETATM 30 H 1 1.427 4.321 1.944 1.00 0.00 HETATM 31 H 1 2.590 6.179 0.982 1.00 0.00 HETATM 32 H 1 4.024 5.350 1.012 1.00 0.00 CONECT 1 2 2 6 9 CONECT 2 1 1 3 11 CONECT 3 2 4 4 16 CONECT 4 3 3 5 13 CONECT 5 4 6 6 17 CONECT 6 1 5 5 7 CONECT 7 6 8 CONECT 8 7 18 19 20 CONECT 9 1 10 CONECT 10 9 21 22 23 CONECT 11 2 12 CONECT 12 11 24 25 26 CONECT 13 4 14 27 28 CONECT 14 13 15 29 30 CONECT 15 14 31 32 CONECT 16 3 CONECT 17 5 CONECT 18 8 CONECT 19 8 CONECT 20 8 CONECT 21 10 CONECT 22 10 CONECT 23 10 CONECT 24 12 CONECT 25 12 CONECT 26 12 CONECT 27 13 CONECT 28 13 CONECT 29 14 CONECT 30 14 CONECT 31 15 CONECT 32 15 MASTER 0 0 0 0 0 0 0 0 32 0 32 0 END xscreensaver-5.36/hacks/images/molecules/methamphetamine.pdb000644 000767 000024 00000014426 07253633130 024332 0ustar00jwzstaff000000 000000 HEADER Methamphetamine: D-Desoxyephedrine ORIGX1 1.000000 0.000000 0.000000 0.00000 ORIGX2 0.000000 1.000000 0.000000 0.00000 ORIGX3 0.000000 0.000000 1.000000 0.00000 SCALE1 0.100000 0.000000 0.000000 0.00000 SCALE2 0.000000 0.100000 0.000000 0.00000 SCALE3 0.000000 0.000000 0.100000 0.00000 ATOM 1 C 1 0.729 4.473 -1.914 1.00 0.00 ATOM 2 C 1 -0.451 3.821 -2.014 1.00 0.00 ATOM 3 C 1 -0.995 3.421 -3.398 1.00 0.00 ATOM 4 C 1 -0.293 3.722 -4.513 1.00 0.00 ATOM 5 C 1 1.052 4.465 -4.399 1.00 0.00 ATOM 6 C 1 1.529 4.816 -3.184 1.00 0.00 ATOM 7 H 1 1.115 4.756 -0.934 1.00 0.00 ATOM 8 C 1 -1.251 3.478 -0.743 1.00 0.00 ATOM 9 H 1 -1.947 2.896 -3.478 1.00 0.00 ATOM 10 H 1 -0.678 3.440 -5.492 1.00 0.00 ATOM 11 H 1 1.618 4.708 -5.298 1.00 0.00 ATOM 12 H 1 2.481 5.342 -3.104 1.00 0.00 ATOM 13 C 1 -0.489 3.986 0.496 1.00 0.00 ATOM 14 N 1 -1.279 3.647 1.750 1.00 0.00 ATOM 15 H 1 -1.378 2.398 -0.674 1.00 0.00 ATOM 19 H 1 -2.229 3.957 -0.790 1.00 0.00 ATOM 20 H 1 0.489 3.507 0.542 1.00 0.00 ATOM 21 C 1 -0.310 5.512 0.398 1.00 0.00 ATOM 22 H 1 -1.403 2.587 1.817 1.00 0.00 ATOM 23 C 1 -0.528 4.148 2.972 1.00 0.00 ATOM 24 H 1 -0.401 5.229 2.903 1.00 0.00 ATOM 25 H 1 0.451 3.670 3.019 1.00 0.00 ATOM 26 H 1 -1.094 3.905 3.871 1.00 0.00 ATOM 27 H 1 0.229 5.871 1.275 1.00 0.00 ATOM 28 H 1 -1.288 5.991 0.352 1.00 0.00 ATOM 29 H 1 0.256 5.755 -0.501 1.00 0.00 TER 30 CONECT 1 2 CONECT 2 1 CONECT 2 3 CONECT 3 2 CONECT 3 4 CONECT 4 3 CONECT 4 5 CONECT 5 4 CONECT 5 6 CONECT 6 5 CONECT 6 1 CONECT 1 6 CONECT 1 7 CONECT 7 1 CONECT 2 8 CONECT 8 2 CONECT 3 9 CONECT 9 3 CONECT 4 10 CONECT 10 4 CONECT 5 11 CONECT 11 5 CONECT 6 12 CONECT 12 6 CONECT 8 13 CONECT 13 8 CONECT 13 14 CONECT 14 13 CONECT 8 15 CONECT 15 8 CONECT 8 19 CONECT 19 8 CONECT 13 20 CONECT 20 13 CONECT 13 21 CONECT 21 13 CONECT 14 22 CONECT 22 14 CONECT 14 23 CONECT 23 14 CONECT 23 24 CONECT 24 23 CONECT 23 25 CONECT 25 23 CONECT 23 26 CONECT 26 23 CONECT 21 27 CONECT 27 21 CONECT 21 28 CONECT 28 21 CONECT 21 29 CONECT 29 21 MASTER 0 0 0 0 0 0 0 6 26 1 52 0 END xscreensaver-5.36/hacks/images/molecules/morphine.pdb000644 000767 000024 00000007616 07253546325 023021 0ustar00jwzstaff000000 000000 HEADER Morphine, an opiate COMPND al3058 AUTHOR Created by Dave Woodcock at Okanagan University College AUTHOR email:woodcock@okanagan.bc.ca AUTHOR Date revised: Wed Aug 30 12:33:12 2000 GENERATED BY BABEL 1.6 HETATM 1 C 1 0.000 0.000 0.000 1.00 0.00 HETATM 2 C 1 1.400 0.000 0.000 1.00 0.00 HETATM 3 C 1 2.106 1.211 0.000 1.00 0.00 HETATM 4 C 1 1.444 2.446 -0.039 1.00 0.00 HETATM 5 C 1 0.047 2.458 0.013 1.00 0.00 HETATM 6 C 1 -0.629 1.243 0.051 1.00 0.00 HETATM 7 C 1 -2.081 1.500 -0.228 1.00 0.00 HETATM 8 C 1 -2.727 0.342 -0.999 1.00 0.00 HETATM 9 C 1 -2.363 -0.953 -0.239 1.00 0.00 HETATM 10 C 1 -0.832 -1.231 -0.285 1.00 0.00 HETATM 11 C 1 -1.885 2.839 -0.975 1.00 0.00 HETATM 12 C 1 -2.772 1.631 1.137 1.00 0.00 HETATM 13 C 1 -2.525 0.318 1.912 1.00 0.00 HETATM 14 N 1 -2.930 -0.855 1.119 1.00 0.00 HETATM 15 C 1 -2.790 -2.096 1.899 1.00 0.00 HETATM 16 H 1 -3.810 0.470 -0.978 1.00 0.00 HETATM 17 C 1 -2.300 0.287 -2.447 1.00 0.00 HETATM 18 C 1 -2.022 1.415 -3.116 1.00 0.00 HETATM 19 C 1 -1.406 2.612 -2.428 1.00 0.00 HETATM 20 H 1 -2.795 3.439 -0.953 1.00 0.00 HETATM 21 O 1 -0.796 3.478 -0.328 1.00 0.00 HETATM 22 H 1 -1.616 3.510 -3.009 1.00 0.00 HETATM 23 O 1 0.011 2.407 -2.414 1.00 0.00 HETATM 24 O 1 2.143 3.606 -0.184 1.00 0.00 HETATM 25 H 1 1.942 -0.943 -0.066 1.00 0.00 HETATM 26 H 1 3.195 1.192 -0.045 1.00 0.00 HETATM 27 H 1 -2.861 -1.784 -0.739 1.00 0.00 HETATM 28 H 1 -0.580 -1.568 -1.291 1.00 0.00 HETATM 29 H 1 -0.568 -2.021 0.414 1.00 0.00 HETATM 30 H 1 -3.842 1.788 0.997 1.00 0.00 HETATM 31 H 1 -2.350 2.469 1.692 1.00 0.00 HETATM 32 H 1 -3.107 0.346 2.833 1.00 0.00 HETATM 33 H 1 -1.471 0.235 2.174 1.00 0.00 HETATM 34 H 1 -3.461 -2.058 2.757 1.00 0.00 HETATM 35 H 1 -1.767 -2.205 2.257 1.00 0.00 HETATM 36 H 1 -3.054 -2.955 1.282 1.00 0.00 HETATM 37 H 1 -2.529 -0.612 -3.019 1.00 0.00 HETATM 38 H 1 -1.956 1.362 -4.203 1.00 0.00 HETATM 39 H 1 0.343 2.320 -3.313 1.00 0.00 HETATM 40 H 1 2.435 3.917 0.680 1.00 0.00 CONECT 1 2 2 6 10 CONECT 2 1 1 3 25 CONECT 3 2 4 4 26 CONECT 4 3 3 5 24 CONECT 5 4 6 6 21 CONECT 6 1 5 5 7 CONECT 7 6 8 11 12 CONECT 8 7 9 16 17 CONECT 9 8 10 14 27 CONECT 10 1 9 28 29 CONECT 11 7 19 20 21 CONECT 12 7 13 30 31 CONECT 13 12 14 32 33 CONECT 14 9 13 15 CONECT 15 14 34 35 36 CONECT 16 8 CONECT 17 8 18 18 37 CONECT 18 17 17 19 38 CONECT 19 11 18 22 23 CONECT 20 11 CONECT 21 5 11 CONECT 22 19 CONECT 23 19 39 CONECT 24 4 40 CONECT 25 2 CONECT 26 3 CONECT 27 9 CONECT 28 10 CONECT 29 10 CONECT 30 12 CONECT 31 12 CONECT 32 13 CONECT 33 13 CONECT 34 15 CONECT 35 15 CONECT 36 15 CONECT 37 17 CONECT 38 18 CONECT 39 23 CONECT 40 24 MASTER 0 0 0 0 0 0 0 0 40 0 40 0 END xscreensaver-5.36/hacks/images/molecules/nicotine.pdb000644 000767 000024 00000005201 07253633130 022763 0ustar00jwzstaff000000 000000 HEADER Nicotine, an insecticide COMPND nicotine AUTHOR Created by Dave Woodcock at Okanagan University College AUTHOR email:woodcock@okanagan.bc.ca AUTHOR Date revised: Fri Sep 1 09:41:05 2000 GENERATED BY BABEL 1.6 HETATM 1 C 1 0.000 0.000 0.000 1.00 0.00 HETATM 2 C 1 1.400 0.000 0.000 1.00 0.00 HETATM 3 C 1 2.082 1.223 0.000 1.00 0.00 HETATM 4 C 1 1.361 2.420 -0.060 1.00 0.00 HETATM 5 C 1 -0.037 2.388 -0.103 1.00 0.00 HETATM 6 N 1 -0.698 1.182 -0.064 1.00 0.00 HETATM 7 C 1 2.135 -1.320 0.103 1.00 0.00 HETATM 8 H 1 -0.543 -0.944 0.043 1.00 0.00 HETATM 9 H 1 3.168 1.256 0.062 1.00 0.00 HETATM 10 H 1 1.886 3.375 -0.067 1.00 0.00 HETATM 11 H 1 -0.604 3.318 -0.148 1.00 0.00 HETATM 12 H 1 2.087 -1.661 1.139 1.00 0.00 HETATM 13 N 1 1.561 -2.374 -0.749 1.00 0.00 HETATM 14 C 1 3.616 -1.255 -0.318 1.00 0.00 HETATM 15 C 1 3.943 -2.708 -0.713 1.00 0.00 HETATM 16 C 1 2.580 -3.434 -0.690 1.00 0.00 HETATM 17 C 1 1.359 -1.946 -2.144 1.00 0.00 HETATM 18 H 1 4.247 -0.910 0.502 1.00 0.00 HETATM 19 H 1 3.736 -0.608 -1.187 1.00 0.00 HETATM 20 H 1 4.627 -3.166 0.001 1.00 0.00 HETATM 21 H 1 4.371 -2.732 -1.715 1.00 0.00 HETATM 22 H 1 2.475 -3.968 0.255 1.00 0.00 HETATM 23 H 1 2.490 -4.135 -1.520 1.00 0.00 HETATM 24 H 1 2.299 -1.632 -2.594 1.00 0.00 HETATM 25 H 1 0.648 -1.122 -2.190 1.00 0.00 HETATM 26 H 1 0.956 -2.781 -2.717 1.00 0.00 CONECT 1 2 2 6 8 CONECT 2 1 1 3 7 CONECT 3 2 4 4 9 CONECT 4 3 3 5 10 CONECT 5 4 6 6 11 CONECT 6 1 5 5 CONECT 7 2 12 13 14 CONECT 8 1 CONECT 9 3 CONECT 10 4 CONECT 11 5 CONECT 12 7 CONECT 13 7 16 17 CONECT 14 7 15 18 19 CONECT 15 14 16 20 21 CONECT 16 13 15 22 23 CONECT 17 13 24 25 26 CONECT 18 14 CONECT 19 14 CONECT 20 15 CONECT 21 15 CONECT 22 16 CONECT 23 16 CONECT 24 17 CONECT 25 17 CONECT 26 17 MASTER 0 0 0 0 0 0 0 0 26 0 26 0 END xscreensaver-5.36/hacks/images/molecules/novocaine.pdb000644 000767 000024 00000007154 07253633130 023145 0ustar00jwzstaff000000 000000 HEADER Procaine: Novocaine, a local anesthetic COMPND al3080 AUTHOR Created by Dave Woodcock at Okanagan University College AUTHOR email:woodcock@okanagan.bc.ca AUTHOR Date revised: Wed Aug 30 12:33:12 2000 GENERATED BY BABEL 1.6 HETATM 1 C 1 0.000 0.000 0.000 1.00 0.00 HETATM 2 C 1 1.399 0.000 0.000 1.00 0.00 HETATM 3 C 1 2.099 1.211 0.000 1.00 0.00 HETATM 4 C 1 1.398 2.422 0.001 1.00 0.00 HETATM 5 C 1 -0.001 2.421 0.002 1.00 0.00 HETATM 6 C 1 -0.702 1.211 0.002 1.00 0.00 HETATM 7 N 1 -2.104 1.210 0.003 1.00 0.00 HETATM 8 C 1 3.511 1.212 0.000 1.00 0.00 HETATM 9 O 1 4.107 2.255 -0.002 1.00 0.00 HETATM 10 O 1 4.172 0.056 0.011 1.00 0.00 HETATM 11 C 1 5.562 0.269 0.112 1.00 0.00 HETATM 12 C 1 6.275 -1.096 0.162 1.00 0.00 HETATM 13 H 1 -0.542 -0.946 0.000 1.00 0.00 HETATM 14 H 1 1.942 -0.945 -0.001 1.00 0.00 HETATM 15 H 1 1.940 3.368 0.001 1.00 0.00 HETATM 16 H 1 -0.544 3.367 0.004 1.00 0.00 HETATM 17 H 1 -2.613 0.334 0.002 1.00 0.00 HETATM 18 H 1 5.776 0.831 1.021 1.00 0.00 HETATM 19 H 1 5.912 0.827 -0.758 1.00 0.00 HETATM 20 H 1 5.949 -1.682 -0.697 1.00 0.00 HETATM 21 H 1 5.984 -1.614 1.076 1.00 0.00 HETATM 22 N 1 7.741 -0.935 0.107 1.00 0.00 HETATM 23 C 1 8.433 -2.206 -0.184 1.00 0.00 HETATM 24 C 1 8.171 -3.279 0.896 1.00 0.00 HETATM 25 C 1 8.301 -0.239 1.281 1.00 0.00 HETATM 26 C 1 8.683 1.204 0.891 1.00 0.00 HETATM 27 H 1 -2.613 2.087 0.004 1.00 0.00 HETATM 28 H 1 9.505 -2.021 -0.249 1.00 0.00 HETATM 29 H 1 8.091 -2.587 -1.146 1.00 0.00 HETATM 30 H 1 7.118 -3.559 0.896 1.00 0.00 HETATM 31 H 1 8.444 -2.898 1.879 1.00 0.00 HETATM 32 H 1 8.770 -4.162 0.675 1.00 0.00 HETATM 33 H 1 9.205 -0.743 1.624 1.00 0.00 HETATM 34 H 1 7.579 -0.223 2.098 1.00 0.00 HETATM 35 H 1 7.804 1.747 0.546 1.00 0.00 HETATM 36 H 1 9.424 1.176 0.092 1.00 0.00 HETATM 37 H 1 9.105 1.714 1.757 1.00 0.00 CONECT 1 2 2 6 13 CONECT 2 1 1 3 14 CONECT 3 2 4 4 8 CONECT 4 3 3 5 15 CONECT 5 4 6 6 16 CONECT 6 1 5 5 7 CONECT 7 6 17 27 CONECT 8 3 9 9 10 CONECT 9 8 8 CONECT 10 8 11 CONECT 11 10 12 18 19 CONECT 12 11 20 21 22 CONECT 13 1 CONECT 14 2 CONECT 15 4 CONECT 16 5 CONECT 17 7 CONECT 18 11 CONECT 19 11 CONECT 20 12 CONECT 21 12 CONECT 22 12 23 25 CONECT 23 22 24 28 29 CONECT 24 23 30 31 32 CONECT 25 22 26 33 34 CONECT 26 25 35 36 37 CONECT 27 7 CONECT 28 23 CONECT 29 23 CONECT 30 24 CONECT 31 24 CONECT 32 24 CONECT 33 25 CONECT 34 25 CONECT 35 26 CONECT 36 26 CONECT 37 26 MASTER 0 0 0 0 0 0 0 0 37 0 37 0 END xscreensaver-5.36/hacks/images/molecules/olestra.pdb000644 000767 000024 00000120475 07253633130 022637 0ustar00jwzstaff000000 000000 HEADER Sucrose octaoleate: Olestra-like non-hydrolyzing fat COMPND jb15oles AUTHOR Created by Dave Woodcock at Okanagan University College AUTHOR email:woodcock@okanagan.bc.ca AUTHOR Date revised: Wed Sep 20 16:26:54 2000 GENERATED BY BABEL 1.6 HETATM 1 C 1 0.000 0.000 0.000 1.00 0.00 HETATM 2 C 1 1.543 0.000 0.000 1.00 0.00 HETATM 3 C 1 2.023 1.465 0.000 1.00 0.00 HETATM 4 C 1 1.448 2.115 1.276 1.00 0.00 HETATM 5 C 1 -0.094 1.986 1.258 1.00 0.00 HETATM 6 O 1 -0.446 0.620 1.189 1.00 0.00 HETATM 7 O 1 -0.682 2.630 0.148 1.00 0.00 HETATM 8 C 1 -0.713 4.011 -0.142 1.00 0.00 HETATM 9 C 1 -1.600 4.135 -1.401 1.00 0.00 HETATM 10 C 1 -1.324 4.924 0.946 1.00 0.00 HETATM 11 O 1 0.576 4.533 -0.389 1.00 0.00 HETATM 12 C 1 0.436 5.938 -0.395 1.00 0.00 HETATM 13 C 1 -0.617 6.269 0.681 1.00 0.00 HETATM 14 C 1 1.756 6.671 -0.084 1.00 0.00 HETATM 15 O 1 2.227 6.278 1.183 1.00 0.00 HETATM 16 O 1 -1.499 7.264 0.209 1.00 0.00 HETATM 17 O 1 -1.029 4.475 2.250 1.00 0.00 HETATM 18 O 1 -1.000 3.465 -2.486 1.00 0.00 HETATM 19 C 1 -0.514 -1.457 -0.089 1.00 0.00 HETATM 20 O 1 -1.922 -1.490 0.008 1.00 0.00 HETATM 21 O 1 2.044 -0.707 -1.115 1.00 0.00 HETATM 22 O 1 3.434 1.488 -0.024 1.00 0.00 HETATM 23 O 1 1.870 3.459 1.361 1.00 0.00 HETATM 24 C 1 -2.482 -2.432 -0.753 1.00 0.00 HETATM 25 O 1 -3.315 -2.099 -1.556 1.00 0.00 HETATM 26 C 1 -2.336 -3.895 -0.434 1.00 0.00 HETATM 27 C 1 -3.583 -4.668 -0.927 1.00 0.00 HETATM 28 C 1 -3.416 -6.194 -0.736 1.00 0.00 HETATM 29 C 1 -4.686 -6.939 -1.212 1.00 0.00 HETATM 30 C 1 -4.492 -8.472 -1.146 1.00 0.00 HETATM 31 C 1 -5.779 -9.194 -1.608 1.00 0.00 HETATM 32 C 1 -5.580 -10.727 -1.651 1.00 0.00 HETATM 33 C 1 -6.868 -11.389 -2.094 1.00 0.00 HETATM 34 C 1 -6.933 -12.683 -2.447 1.00 0.00 HETATM 35 C 1 -5.725 -13.593 -2.433 1.00 0.00 HETATM 36 C 1 -6.164 -15.030 -2.794 1.00 0.00 HETATM 37 C 1 -4.957 -15.993 -2.791 1.00 0.00 HETATM 38 C 1 -5.423 -17.419 -3.153 1.00 0.00 HETATM 39 C 1 -4.225 -18.393 -3.146 1.00 0.00 HETATM 40 C 1 -4.700 -19.818 -3.505 1.00 0.00 HETATM 41 C 1 3.344 -0.983 -0.999 1.00 0.00 HETATM 42 O 1 4.098 -0.665 -1.882 1.00 0.00 HETATM 43 C 1 3.844 -1.849 0.124 1.00 0.00 HETATM 44 C 1 5.081 -2.680 -0.284 1.00 0.00 HETATM 45 C 1 5.532 -3.506 0.946 1.00 0.00 HETATM 46 C 1 6.768 -4.378 0.668 1.00 0.00 HETATM 47 C 1 7.108 -5.157 1.969 1.00 0.00 HETATM 48 C 1 8.283 -6.109 1.808 1.00 0.00 HETATM 49 C 1 8.489 -6.845 3.177 1.00 0.00 HETATM 50 C 1 9.603 -7.867 3.101 1.00 0.00 HETATM 51 C 1 9.838 -8.686 4.139 1.00 0.00 HETATM 52 C 1 8.989 -8.622 5.392 1.00 0.00 HETATM 53 C 1 9.509 -9.601 6.463 1.00 0.00 HETATM 54 C 1 8.612 -9.509 7.718 1.00 0.00 HETATM 55 C 1 9.090 -10.491 8.808 1.00 0.00 HETATM 56 C 1 8.155 -10.395 10.033 1.00 0.00 HETATM 57 C 1 8.599 -11.385 11.130 1.00 0.00 HETATM 58 C 1 3.954 2.643 0.391 1.00 0.00 HETATM 59 O 1 4.364 2.722 1.520 1.00 0.00 HETATM 60 C 1 3.833 3.903 -0.422 1.00 0.00 HETATM 61 C 1 5.113 4.138 -1.254 1.00 0.00 HETATM 62 C 1 5.001 5.470 -2.030 1.00 0.00 HETATM 63 C 1 6.274 5.721 -2.868 1.00 0.00 HETATM 64 C 1 6.142 7.042 -3.658 1.00 0.00 HETATM 65 C 1 7.424 7.302 -4.480 1.00 0.00 HETATM 66 C 1 7.292 8.604 -5.302 1.00 0.00 HETATM 67 C 1 8.567 8.842 -6.080 1.00 0.00 HETATM 68 C 1 8.673 9.819 -6.994 1.00 0.00 HETATM 69 C 1 7.518 10.739 -7.321 1.00 0.00 HETATM 70 C 1 7.962 11.764 -8.388 1.00 0.00 HETATM 71 C 1 6.793 12.704 -8.749 1.00 0.00 HETATM 72 C 1 7.240 13.712 -9.829 1.00 0.00 HETATM 73 C 1 6.069 14.649 -10.192 1.00 0.00 HETATM 74 C 1 6.510 15.654 -11.277 1.00 0.00 HETATM 75 C 1 1.563 4.034 2.524 1.00 0.00 HETATM 76 O 1 0.994 5.094 2.507 1.00 0.00 HETATM 77 C 1 2.204 3.624 3.820 1.00 0.00 HETATM 78 C 1 1.081 3.461 4.864 1.00 0.00 HETATM 79 C 1 1.646 2.985 6.219 1.00 0.00 HETATM 80 C 1 0.495 2.893 7.242 1.00 0.00 HETATM 81 C 1 0.991 2.293 8.574 1.00 0.00 HETATM 82 C 1 -0.180 2.239 9.577 1.00 0.00 HETATM 83 C 1 0.252 1.529 10.878 1.00 0.00 HETATM 84 C 1 -0.909 1.516 11.848 1.00 0.00 HETATM 85 C 1 -1.007 0.609 12.832 1.00 0.00 HETATM 86 C 1 0.023 -0.485 13.013 1.00 0.00 HETATM 87 C 1 -0.255 -1.246 14.326 1.00 0.00 HETATM 88 C 1 0.758 -2.396 14.494 1.00 0.00 HETATM 89 C 1 0.465 -3.168 15.798 1.00 0.00 HETATM 90 C 1 1.443 -4.352 15.937 1.00 0.00 HETATM 91 C 1 1.138 -5.136 17.229 1.00 0.00 HETATM 92 C 1 -1.640 3.717 -3.628 1.00 0.00 HETATM 93 O 1 -1.012 4.078 -4.590 1.00 0.00 HETATM 94 C 1 -3.121 3.488 -3.752 1.00 0.00 HETATM 95 C 1 -3.553 3.549 -5.232 1.00 0.00 HETATM 96 C 1 -5.083 3.368 -5.331 1.00 0.00 HETATM 97 C 1 -5.545 3.449 -6.801 1.00 0.00 HETATM 98 C 1 -7.080 3.295 -6.870 1.00 0.00 HETATM 99 C 1 -7.563 3.372 -8.334 1.00 0.00 HETATM 100 C 1 -9.099 3.230 -8.385 1.00 0.00 HETATM 101 C 1 -9.579 3.302 -9.818 1.00 0.00 HETATM 102 C 1 -10.886 3.239 -10.119 1.00 0.00 HETATM 103 C 1 -11.934 3.095 -9.037 1.00 0.00 HETATM 104 C 1 -13.340 3.036 -9.669 1.00 0.00 HETATM 105 C 1 -14.403 2.883 -8.561 1.00 0.00 HETATM 106 C 1 -15.815 2.830 -9.181 1.00 0.00 HETATM 107 C 1 -16.867 2.668 -8.064 1.00 0.00 HETATM 108 C 1 -18.283 2.619 -8.671 1.00 0.00 HETATM 109 C 1 -2.001 7.975 1.218 1.00 0.00 HETATM 110 O 1 -3.001 7.595 1.768 1.00 0.00 HETATM 111 C 1 -1.156 9.034 1.872 1.00 0.00 HETATM 112 C 1 -1.534 10.432 1.344 1.00 0.00 HETATM 113 C 1 -0.625 11.493 2.001 1.00 0.00 HETATM 114 C 1 -0.976 12.902 1.479 1.00 0.00 HETATM 115 C 1 -0.062 13.955 2.143 1.00 0.00 HETATM 116 C 1 -0.432 15.365 1.636 1.00 0.00 HETATM 117 C 1 0.472 16.432 2.289 1.00 0.00 HETATM 118 C 1 0.070 17.801 1.786 1.00 0.00 HETATM 119 C 1 0.739 18.910 2.133 1.00 0.00 HETATM 120 C 1 1.947 18.864 3.043 1.00 0.00 HETATM 121 C 1 2.466 20.301 3.261 1.00 0.00 HETATM 122 C 1 3.707 20.302 4.178 1.00 0.00 HETATM 123 C 1 4.204 21.750 4.364 1.00 0.00 HETATM 124 C 1 5.448 21.780 5.275 1.00 0.00 HETATM 125 C 1 5.933 23.236 5.440 1.00 0.00 HETATM 126 C 1 -1.676 5.203 3.160 1.00 0.00 HETATM 127 O 1 -1.395 6.362 3.326 1.00 0.00 HETATM 128 C 1 -2.722 4.564 4.031 1.00 0.00 HETATM 129 C 1 -3.529 5.657 4.765 1.00 0.00 HETATM 130 C 1 -4.616 5.007 5.648 1.00 0.00 HETATM 131 C 1 -5.417 6.088 6.405 1.00 0.00 HETATM 132 C 1 -6.505 5.421 7.274 1.00 0.00 HETATM 133 C 1 -7.276 6.485 8.085 1.00 0.00 HETATM 134 C 1 -8.342 5.803 8.967 1.00 0.00 HETATM 135 C 1 -8.999 6.835 9.859 1.00 0.00 HETATM 136 C 1 -10.265 7.250 9.698 1.00 0.00 HETATM 137 C 1 -11.161 6.729 8.595 1.00 0.00 HETATM 138 C 1 -12.519 7.460 8.650 1.00 0.00 HETATM 139 C 1 -13.450 6.941 7.534 1.00 0.00 HETATM 140 C 1 -14.810 7.665 7.610 1.00 0.00 HETATM 141 C 1 -15.745 7.150 6.496 1.00 0.00 HETATM 142 C 1 -17.110 7.866 6.583 1.00 0.00 HETATM 143 C 1 2.842 7.281 1.802 1.00 0.00 HETATM 144 O 1 2.205 8.253 2.118 1.00 0.00 HETATM 145 C 1 4.220 7.092 2.370 1.00 0.00 HETATM 146 C 1 4.473 8.156 3.459 1.00 0.00 HETATM 147 C 1 5.893 8.017 4.051 1.00 0.00 HETATM 148 C 1 6.113 9.105 5.125 1.00 0.00 HETATM 149 C 1 7.536 9.013 5.717 1.00 0.00 HETATM 150 C 1 7.731 10.123 6.772 1.00 0.00 HETATM 151 C 1 9.153 10.065 7.368 1.00 0.00 HETATM 152 C 1 9.319 11.173 8.385 1.00 0.00 HETATM 153 C 1 10.461 11.337 9.067 1.00 0.00 HETATM 154 C 1 11.643 10.413 8.868 1.00 0.00 HETATM 155 C 1 12.819 10.884 9.749 1.00 0.00 HETATM 156 C 1 14.028 9.942 9.572 1.00 0.00 HETATM 157 C 1 15.194 10.418 10.464 1.00 0.00 HETATM 158 C 1 16.397 9.465 10.312 1.00 0.00 HETATM 159 C 1 17.555 9.936 11.217 1.00 0.00 HETATM 160 C 1 18.753 8.973 11.081 1.00 0.00 HETATM 161 C 1 19.907 9.437 11.992 1.00 0.00 HETATM 162 C 1 7.637 -11.294 12.332 1.00 0.00 HETATM 163 C 1 8.066 -12.287 13.432 1.00 0.00 HETATM 164 C 1 -3.503 -20.792 -3.494 1.00 0.00 HETATM 165 C 1 -3.976 -22.215 -3.853 1.00 0.00 HETATM 166 C 1 2.094 -6.341 17.349 1.00 0.00 HETATM 167 C 1 1.786 -7.131 18.637 1.00 0.00 HETATM 168 C 1 5.336 16.589 -11.634 1.00 0.00 HETATM 169 C 1 5.771 17.593 -12.721 1.00 0.00 HETATM 170 C 1 7.177 23.279 6.350 1.00 0.00 HETATM 171 C 1 7.661 24.734 6.509 1.00 0.00 HETATM 172 C 1 -19.327 2.450 -7.548 1.00 0.00 HETATM 173 C 1 -20.747 2.406 -8.149 1.00 0.00 HETATM 174 C 1 -18.044 7.350 5.470 1.00 0.00 HETATM 175 C 1 -19.412 8.057 5.560 1.00 0.00 HETATM 176 H 1 -0.368 0.553 -0.864 1.00 0.00 HETATM 177 H 1 1.874 -0.482 0.920 1.00 0.00 HETATM 178 H 1 1.632 1.978 -0.879 1.00 0.00 HETATM 179 H 1 1.826 1.557 2.131 1.00 0.00 HETATM 180 H 1 -0.503 2.395 2.180 1.00 0.00 HETATM 181 H 1 -1.766 5.183 -1.654 1.00 0.00 HETATM 182 H 1 -2.562 3.672 -1.182 1.00 0.00 HETATM 183 H 1 -2.404 5.015 0.817 1.00 0.00 HETATM 184 H 1 0.079 6.263 -1.372 1.00 0.00 HETATM 185 H 1 -0.107 6.607 1.580 1.00 0.00 HETATM 186 H 1 1.568 7.745 -0.111 1.00 0.00 HETATM 187 H 1 2.495 6.425 -0.844 1.00 0.00 HETATM 188 H 1 -0.089 -2.043 0.726 1.00 0.00 HETATM 189 H 1 -0.191 -1.883 -1.040 1.00 0.00 HETATM 190 H 1 -2.226 -4.025 0.643 1.00 0.00 HETATM 191 H 1 -1.448 -4.280 -0.936 1.00 0.00 HETATM 192 H 1 -3.732 -4.461 -1.987 1.00 0.00 HETATM 193 H 1 -4.457 -4.327 -0.372 1.00 0.00 HETATM 194 H 1 -3.242 -6.413 0.317 1.00 0.00 HETATM 195 H 1 -2.560 -6.535 -1.319 1.00 0.00 HETATM 196 H 1 -4.902 -6.654 -2.241 1.00 0.00 HETATM 197 H 1 -5.527 -6.653 -0.579 1.00 0.00 HETATM 198 H 1 -4.259 -8.767 -0.123 1.00 0.00 HETATM 199 H 1 -3.666 -8.756 -1.799 1.00 0.00 HETATM 200 H 1 -6.047 -8.844 -2.605 1.00 0.00 HETATM 201 H 1 -6.588 -8.955 -0.918 1.00 0.00 HETATM 202 H 1 -5.310 -11.089 -0.659 1.00 0.00 HETATM 203 H 1 -4.783 -10.967 -2.355 1.00 0.00 HETATM 204 H 1 -7.781 -10.795 -2.125 1.00 0.00 HETATM 205 H 1 -7.896 -13.091 -2.754 1.00 0.00 HETATM 206 H 1 -5.275 -13.588 -1.440 1.00 0.00 HETATM 207 H 1 -4.997 -13.243 -3.164 1.00 0.00 HETATM 208 H 1 -6.618 -15.028 -3.785 1.00 0.00 HETATM 209 H 1 -6.898 -15.374 -2.065 1.00 0.00 HETATM 210 H 1 -4.502 -16.000 -1.801 1.00 0.00 HETATM 211 H 1 -4.222 -15.655 -3.522 1.00 0.00 HETATM 212 H 1 -5.875 -17.411 -4.145 1.00 0.00 HETATM 213 H 1 -6.163 -17.753 -2.425 1.00 0.00 HETATM 214 H 1 -3.773 -18.402 -2.155 1.00 0.00 HETATM 215 H 1 -3.486 -18.063 -3.876 1.00 0.00 HETATM 216 H 1 -5.150 -19.810 -4.498 1.00 0.00 HETATM 217 H 1 -5.441 -20.147 -2.777 1.00 0.00 HETATM 218 H 1 3.046 -2.532 0.416 1.00 0.00 HETATM 219 H 1 4.102 -1.216 0.975 1.00 0.00 HETATM 220 H 1 5.884 -2.006 -0.580 1.00 0.00 HETATM 221 H 1 4.829 -3.337 -1.117 1.00 0.00 HETATM 222 H 1 4.717 -4.156 1.264 1.00 0.00 HETATM 223 H 1 5.773 -2.820 1.759 1.00 0.00 HETATM 224 H 1 7.605 -3.757 0.345 1.00 0.00 HETATM 225 H 1 6.511 -5.083 -0.123 1.00 0.00 HETATM 226 H 1 6.244 -5.737 2.294 1.00 0.00 HETATM 227 H 1 7.378 -4.451 2.755 1.00 0.00 HETATM 228 H 1 9.158 -5.517 1.539 1.00 0.00 HETATM 229 H 1 8.056 -6.812 1.007 1.00 0.00 HETATM 230 H 1 7.572 -7.372 3.439 1.00 0.00 HETATM 231 H 1 8.718 -6.129 3.967 1.00 0.00 HETATM 232 H 1 10.222 -7.926 2.206 1.00 0.00 HETATM 233 H 1 10.647 -9.413 4.074 1.00 0.00 HETATM 234 H 1 7.960 -8.886 5.148 1.00 0.00 HETATM 235 H 1 9.015 -7.611 5.799 1.00 0.00 HETATM 236 H 1 10.534 -9.341 6.725 1.00 0.00 HETATM 237 H 1 9.481 -10.616 6.068 1.00 0.00 HETATM 238 H 1 7.586 -9.753 7.443 1.00 0.00 HETATM 239 H 1 8.644 -8.493 8.111 1.00 0.00 HETATM 240 H 1 10.108 -10.239 9.105 1.00 0.00 HETATM 241 H 1 9.070 -11.507 8.415 1.00 0.00 HETATM 242 H 1 7.136 -10.633 9.726 1.00 0.00 HETATM 243 H 1 8.182 -9.380 10.429 1.00 0.00 HETATM 244 H 1 9.611 -11.139 11.453 1.00 0.00 HETATM 245 H 1 8.585 -12.399 10.730 1.00 0.00 HETATM 246 H 1 3.697 4.738 0.262 1.00 0.00 HETATM 247 H 1 2.973 3.837 -1.086 1.00 0.00 HETATM 248 H 1 5.244 3.316 -1.956 1.00 0.00 HETATM 249 H 1 5.973 4.181 -0.585 1.00 0.00 HETATM 250 H 1 4.873 6.289 -1.322 1.00 0.00 HETATM 251 H 1 4.136 5.428 -2.692 1.00 0.00 HETATM 252 H 1 6.415 4.896 -3.567 1.00 0.00 HETATM 253 H 1 7.137 5.781 -2.205 1.00 0.00 HETATM 254 H 1 5.987 7.867 -2.962 1.00 0.00 HETATM 255 H 1 5.288 6.976 -4.332 1.00 0.00 HETATM 256 H 1 7.592 6.466 -5.158 1.00 0.00 HETATM 257 H 1 8.273 7.389 -3.801 1.00 0.00 HETATM 258 H 1 7.117 9.443 -4.629 1.00 0.00 HETATM 259 H 1 6.453 8.510 -5.991 1.00 0.00 HETATM 260 H 1 9.432 8.207 -5.887 1.00 0.00 HETATM 261 H 1 9.620 9.946 -7.519 1.00 0.00 HETATM 262 H 1 7.205 11.266 -6.419 1.00 0.00 HETATM 263 H 1 6.685 10.153 -7.709 1.00 0.00 HETATM 264 H 1 8.285 11.232 -9.283 1.00 0.00 HETATM 265 H 1 8.793 12.353 -8.000 1.00 0.00 HETATM 266 H 1 6.474 13.244 -7.858 1.00 0.00 HETATM 267 H 1 5.958 12.114 -9.129 1.00 0.00 HETATM 268 H 1 7.559 13.171 -10.720 1.00 0.00 HETATM 269 H 1 8.073 14.304 -9.450 1.00 0.00 HETATM 270 H 1 5.753 15.194 -9.302 1.00 0.00 HETATM 271 H 1 5.234 14.057 -10.566 1.00 0.00 HETATM 272 H 1 6.824 15.110 -12.168 1.00 0.00 HETATM 273 H 1 7.346 16.246 -10.905 1.00 0.00 HETATM 274 H 1 2.891 4.405 4.144 1.00 0.00 HETATM 275 H 1 2.753 2.690 3.706 1.00 0.00 HETATM 276 H 1 0.360 2.729 4.502 1.00 0.00 HETATM 277 H 1 0.578 4.420 4.999 1.00 0.00 HETATM 278 H 1 2.396 3.692 6.575 1.00 0.00 HETATM 279 H 1 2.104 2.004 6.094 1.00 0.00 HETATM 280 H 1 -0.293 2.257 6.838 1.00 0.00 HETATM 281 H 1 0.092 3.890 7.420 1.00 0.00 HETATM 282 H 1 1.792 2.910 8.980 1.00 0.00 HETATM 283 H 1 1.366 1.285 8.397 1.00 0.00 HETATM 284 H 1 -1.010 1.689 9.134 1.00 0.00 HETATM 285 H 1 -0.503 3.254 9.807 1.00 0.00 HETATM 286 H 1 1.090 2.062 11.326 1.00 0.00 HETATM 287 H 1 0.555 0.509 10.641 1.00 0.00 HETATM 288 H 1 -1.682 2.279 11.759 1.00 0.00 HETATM 289 H 1 -1.860 0.654 13.508 1.00 0.00 HETATM 290 H 1 1.020 -0.047 13.053 1.00 0.00 HETATM 291 H 1 -0.037 -1.180 12.176 1.00 0.00 HETATM 292 H 1 -1.264 -1.658 14.297 1.00 0.00 HETATM 293 H 1 -0.170 -0.560 15.169 1.00 0.00 HETATM 294 H 1 1.769 -1.990 14.531 1.00 0.00 HETATM 295 H 1 0.675 -3.076 13.646 1.00 0.00 HETATM 296 H 1 -0.557 -3.546 15.772 1.00 0.00 HETATM 297 H 1 0.580 -2.498 16.650 1.00 0.00 HETATM 298 H 1 2.466 -3.977 15.971 1.00 0.00 HETATM 299 H 1 1.331 -5.015 15.078 1.00 0.00 HETATM 300 H 1 0.108 -5.493 17.202 1.00 0.00 HETATM 301 H 1 1.269 -4.481 18.090 1.00 0.00 HETATM 302 H 1 -3.652 4.262 -3.197 1.00 0.00 HETATM 303 H 1 -3.371 2.511 -3.339 1.00 0.00 HETATM 304 H 1 -3.052 2.758 -5.791 1.00 0.00 HETATM 305 H 1 -3.275 4.517 -5.650 1.00 0.00 HETATM 306 H 1 -5.575 4.153 -4.757 1.00 0.00 HETATM 307 H 1 -5.358 2.397 -4.919 1.00 0.00 HETATM 308 H 1 -5.072 2.653 -7.376 1.00 0.00 HETATM 309 H 1 -5.259 4.415 -7.219 1.00 0.00 HETATM 310 H 1 -7.548 4.093 -6.294 1.00 0.00 HETATM 311 H 1 -7.365 2.332 -6.447 1.00 0.00 HETATM 312 H 1 -7.105 2.569 -8.910 1.00 0.00 HETATM 313 H 1 -7.275 4.333 -8.761 1.00 0.00 HETATM 314 H 1 -9.553 4.035 -7.808 1.00 0.00 HETATM 315 H 1 -9.385 2.270 -7.955 1.00 0.00 HETATM 316 H 1 -8.852 3.405 -10.623 1.00 0.00 HETATM 317 H 1 -11.195 3.293 -11.162 1.00 0.00 HETATM 318 H 1 -11.879 3.949 -8.362 1.00 0.00 HETATM 319 H 1 -11.753 2.177 -8.477 1.00 0.00 HETATM 320 H 1 -13.398 2.184 -10.347 1.00 0.00 HETATM 321 H 1 -13.526 3.954 -10.227 1.00 0.00 HETATM 322 H 1 -14.340 3.732 -7.880 1.00 0.00 HETATM 323 H 1 -14.217 1.964 -8.007 1.00 0.00 HETATM 324 H 1 -15.880 1.984 -9.865 1.00 0.00 HETATM 325 H 1 -16.006 3.752 -9.729 1.00 0.00 HETATM 326 H 1 -16.797 3.511 -7.377 1.00 0.00 HETATM 327 H 1 -16.675 1.743 -7.519 1.00 0.00 HETATM 328 H 1 -18.353 1.777 -9.361 1.00 0.00 HETATM 329 H 1 -18.478 3.545 -9.212 1.00 0.00 HETATM 330 H 1 -0.105 8.848 1.652 1.00 0.00 HETATM 331 H 1 -1.308 8.997 2.950 1.00 0.00 HETATM 332 H 1 -2.576 10.642 1.584 1.00 0.00 HETATM 333 H 1 -1.400 10.458 0.262 1.00 0.00 HETATM 334 H 1 0.416 11.272 1.765 1.00 0.00 HETATM 335 H 1 -0.761 11.465 3.082 1.00 0.00 HETATM 336 H 1 -2.016 13.126 1.716 1.00 0.00 HETATM 337 H 1 -0.839 12.933 0.398 1.00 0.00 HETATM 338 H 1 0.978 13.741 1.894 1.00 0.00 HETATM 339 H 1 -0.189 13.915 3.224 1.00 0.00 HETATM 340 H 1 -1.473 15.574 1.885 1.00 0.00 HETATM 341 H 1 -0.309 15.403 0.553 1.00 0.00 HETATM 342 H 1 1.512 16.236 2.027 1.00 0.00 HETATM 343 H 1 0.356 16.395 3.372 1.00 0.00 HETATM 344 H 1 -0.793 17.892 1.125 1.00 0.00 HETATM 345 H 1 0.403 19.871 1.743 1.00 0.00 HETATM 346 H 1 2.729 18.261 2.583 1.00 0.00 HETATM 347 H 1 1.666 18.429 4.003 1.00 0.00 HETATM 348 H 1 1.680 20.901 3.718 1.00 0.00 HETATM 349 H 1 2.733 20.734 2.297 1.00 0.00 HETATM 350 H 1 4.496 19.701 3.725 1.00 0.00 HETATM 351 H 1 3.443 19.879 5.148 1.00 0.00 HETATM 352 H 1 3.412 22.349 4.815 1.00 0.00 HETATM 353 H 1 4.461 22.170 3.391 1.00 0.00 HETATM 354 H 1 6.241 21.182 4.827 1.00 0.00 HETATM 355 H 1 5.192 21.369 6.251 1.00 0.00 HETATM 356 H 1 5.138 23.834 5.886 1.00 0.00 HETATM 357 H 1 6.186 23.646 4.463 1.00 0.00 HETATM 358 H 1 -2.234 3.917 4.760 1.00 0.00 HETATM 359 H 1 -3.391 3.970 3.410 1.00 0.00 HETATM 360 H 1 -3.999 6.312 4.032 1.00 0.00 HETATM 361 H 1 -2.855 6.243 5.391 1.00 0.00 HETATM 362 H 1 -4.143 4.340 6.369 1.00 0.00 HETATM 363 H 1 -5.294 4.431 5.018 1.00 0.00 HETATM 364 H 1 -5.887 6.762 5.689 1.00 0.00 HETATM 365 H 1 -4.741 6.657 7.044 1.00 0.00 HETATM 366 H 1 -6.034 4.719 7.961 1.00 0.00 HETATM 367 H 1 -7.201 4.881 6.631 1.00 0.00 HETATM 368 H 1 -7.762 7.185 7.405 1.00 0.00 HETATM 369 H 1 -6.577 7.027 8.721 1.00 0.00 HETATM 370 H 1 -7.858 5.057 9.599 1.00 0.00 HETATM 371 H 1 -9.075 5.305 8.334 1.00 0.00 HETATM 372 H 1 -8.416 7.259 10.676 1.00 0.00 HETATM 373 H 1 -10.661 7.994 10.389 1.00 0.00 HETATM 374 H 1 -11.324 5.660 8.731 1.00 0.00 HETATM 375 H 1 -10.692 6.909 7.628 1.00 0.00 HETATM 376 H 1 -12.360 8.530 8.520 1.00 0.00 HETATM 377 H 1 -12.985 7.281 9.620 1.00 0.00 HETATM 378 H 1 -13.603 5.869 7.659 1.00 0.00 HETATM 379 H 1 -12.992 7.129 6.563 1.00 0.00 HETATM 380 H 1 -14.657 8.738 7.488 1.00 0.00 HETATM 381 H 1 -15.267 7.476 8.582 1.00 0.00 HETATM 382 H 1 -15.891 6.077 6.614 1.00 0.00 HETATM 383 H 1 -15.293 7.348 5.524 1.00 0.00 HETATM 384 H 1 -16.964 8.939 6.466 1.00 0.00 HETATM 385 H 1 -17.561 7.667 7.556 1.00 0.00 HETATM 386 H 1 4.947 7.200 1.566 1.00 0.00 HETATM 387 H 1 4.294 6.092 2.798 1.00 0.00 HETATM 388 H 1 3.737 8.034 4.255 1.00 0.00 HETATM 389 H 1 4.363 9.148 3.021 1.00 0.00 HETATM 390 H 1 6.629 8.137 3.256 1.00 0.00 HETATM 391 H 1 6.005 7.031 4.501 1.00 0.00 HETATM 392 H 1 5.382 8.976 5.924 1.00 0.00 HETATM 393 H 1 5.977 10.088 4.673 1.00 0.00 HETATM 394 H 1 8.269 9.137 4.920 1.00 0.00 HETATM 395 H 1 7.673 8.038 6.185 1.00 0.00 HETATM 396 H 1 7.001 9.993 7.571 1.00 0.00 HETATM 397 H 1 7.579 11.095 6.302 1.00 0.00 HETATM 398 H 1 9.884 10.192 6.570 1.00 0.00 HETATM 399 H 1 9.304 9.100 7.851 1.00 0.00 HETATM 400 H 1 8.493 11.861 8.565 1.00 0.00 HETATM 401 H 1 10.536 12.152 9.787 1.00 0.00 HETATM 402 H 1 11.947 10.429 7.821 1.00 0.00 HETATM 403 H 1 11.362 9.399 9.150 1.00 0.00 HETATM 404 H 1 12.509 10.880 10.795 1.00 0.00 HETATM 405 H 1 13.103 11.896 9.462 1.00 0.00 HETATM 406 H 1 14.343 9.946 8.529 1.00 0.00 HETATM 407 H 1 13.743 8.930 9.859 1.00 0.00 HETATM 408 H 1 14.872 10.428 11.505 1.00 0.00 HETATM 409 H 1 15.489 11.425 10.168 1.00 0.00 HETATM 410 H 1 16.727 9.459 9.273 1.00 0.00 HETATM 411 H 1 16.099 8.457 10.601 1.00 0.00 HETATM 412 H 1 17.219 9.951 12.254 1.00 0.00 HETATM 413 H 1 17.860 10.940 10.923 1.00 0.00 HETATM 414 H 1 19.093 8.960 10.046 1.00 0.00 HETATM 415 H 1 18.446 7.968 11.372 1.00 0.00 HETATM 416 H 1 19.573 9.448 13.030 1.00 0.00 HETATM 417 H 1 20.221 10.440 11.703 1.00 0.00 HETATM 418 H 1 20.748 8.752 11.891 1.00 0.00 HETATM 419 H 1 6.625 -11.535 12.006 1.00 0.00 HETATM 420 H 1 7.653 -10.282 12.735 1.00 0.00 HETATM 421 H 1 9.075 -12.048 13.767 1.00 0.00 HETATM 422 H 1 8.046 -13.303 13.036 1.00 0.00 HETATM 423 H 1 7.378 -12.215 14.274 1.00 0.00 HETATM 424 H 1 -2.762 -20.465 -4.223 1.00 0.00 HETATM 425 H 1 -3.052 -20.802 -2.502 1.00 0.00 HETATM 426 H 1 -4.423 -22.213 -4.847 1.00 0.00 HETATM 427 H 1 -4.714 -22.551 -3.124 1.00 0.00 HETATM 428 H 1 -3.123 -22.895 -3.842 1.00 0.00 HETATM 429 H 1 3.124 -5.987 17.380 1.00 0.00 HETATM 430 H 1 1.964 -6.995 16.486 1.00 0.00 HETATM 431 H 1 0.758 -7.491 18.610 1.00 0.00 HETATM 432 H 1 1.921 -6.484 19.504 1.00 0.00 HETATM 433 H 1 2.464 -7.981 18.713 1.00 0.00 HETATM 434 H 1 5.023 17.135 -10.744 1.00 0.00 HETATM 435 H 1 4.500 15.996 -12.005 1.00 0.00 HETATM 436 H 1 6.079 17.053 -13.616 1.00 0.00 HETATM 437 H 1 6.604 18.192 -12.354 1.00 0.00 HETATM 438 H 1 4.935 18.248 -12.965 1.00 0.00 HETATM 439 H 1 7.973 22.680 5.906 1.00 0.00 HETATM 440 H 1 6.926 22.873 7.330 1.00 0.00 HETATM 441 H 1 6.871 25.336 6.956 1.00 0.00 HETATM 442 H 1 7.919 25.143 5.532 1.00 0.00 HETATM 443 H 1 8.540 24.757 7.153 1.00 0.00 HETATM 444 H 1 -19.255 3.289 -6.856 1.00 0.00 HETATM 445 H 1 -19.135 1.523 -7.009 1.00 0.00 HETATM 446 H 1 -20.826 1.565 -8.838 1.00 0.00 HETATM 447 H 1 -20.947 3.334 -8.684 1.00 0.00 HETATM 448 H 1 -21.476 2.286 -7.348 1.00 0.00 HETATM 449 H 1 -18.187 6.275 5.583 1.00 0.00 HETATM 450 H 1 -17.597 7.553 4.497 1.00 0.00 HETATM 451 H 1 -19.276 9.132 5.443 1.00 0.00 HETATM 452 H 1 -19.866 7.853 6.529 1.00 0.00 HETATM 453 H 1 -20.065 7.687 4.770 1.00 0.00 CONECT 1 2 6 19 176 CONECT 2 1 3 21 177 CONECT 3 2 4 22 178 CONECT 4 3 5 23 179 CONECT 5 4 6 7 180 CONECT 6 1 5 CONECT 7 5 8 CONECT 8 7 9 10 11 CONECT 9 8 18 181 182 CONECT 10 8 13 17 183 CONECT 11 8 12 CONECT 12 11 13 14 184 CONECT 13 10 12 16 185 CONECT 14 12 15 186 187 CONECT 15 14 143 CONECT 16 13 109 CONECT 17 10 126 CONECT 18 9 92 CONECT 19 1 20 188 189 CONECT 20 19 24 CONECT 21 2 41 CONECT 22 3 58 CONECT 23 4 75 CONECT 24 20 25 25 26 CONECT 25 24 24 CONECT 26 24 27 190 191 CONECT 27 26 28 192 193 CONECT 28 27 29 194 195 CONECT 29 28 30 196 197 CONECT 30 29 31 198 199 CONECT 31 30 32 200 201 CONECT 32 31 33 202 203 CONECT 33 32 34 34 204 CONECT 34 33 33 35 205 CONECT 35 34 36 206 207 CONECT 36 35 37 208 209 CONECT 37 36 38 210 211 CONECT 38 37 39 212 213 CONECT 39 38 40 214 215 CONECT 40 39 164 216 217 CONECT 41 21 42 42 43 CONECT 42 41 41 CONECT 43 41 44 218 219 CONECT 44 43 45 220 221 CONECT 45 44 46 222 223 CONECT 46 45 47 224 225 CONECT 47 46 48 226 227 CONECT 48 47 49 228 229 CONECT 49 48 50 230 231 CONECT 50 49 51 51 232 CONECT 51 50 50 52 233 CONECT 52 51 53 234 235 CONECT 53 52 54 236 237 CONECT 54 53 55 238 239 CONECT 55 54 56 240 241 CONECT 56 55 57 242 243 CONECT 57 56 162 244 245 CONECT 58 22 59 59 60 CONECT 59 58 58 CONECT 60 58 61 246 247 CONECT 61 60 62 248 249 CONECT 62 61 63 250 251 CONECT 63 62 64 252 253 CONECT 64 63 65 254 255 CONECT 65 64 66 256 257 CONECT 66 65 67 258 259 CONECT 67 66 68 68 260 CONECT 68 67 67 69 261 CONECT 69 68 70 262 263 CONECT 70 69 71 264 265 CONECT 71 70 72 266 267 CONECT 72 71 73 268 269 CONECT 73 72 74 270 271 CONECT 74 73 168 272 273 CONECT 75 23 76 76 77 CONECT 76 75 75 CONECT 77 75 78 274 275 CONECT 78 77 79 276 277 CONECT 79 78 80 278 279 CONECT 80 79 81 280 281 CONECT 81 80 82 282 283 CONECT 82 81 83 284 285 CONECT 83 82 84 286 287 CONECT 84 83 85 85 288 CONECT 85 84 84 86 289 CONECT 86 85 87 290 291 CONECT 87 86 88 292 293 CONECT 88 87 89 294 295 CONECT 89 88 90 296 297 CONECT 90 89 91 298 299 CONECT 91 90 166 300 301 CONECT 92 18 93 93 94 CONECT 93 92 92 CONECT 94 92 95 302 303 CONECT 95 94 96 304 305 CONECT 96 95 97 306 307 CONECT 97 96 98 308 309 CONECT 98 97 99 310 311 CONECT 99 98 100 312 313 CONECT 100 99 101 314 315 CONECT 101 100 102 102 316 CONECT 102 101 101 103 317 CONECT 103 102 104 318 319 CONECT 104 103 105 320 321 CONECT 105 104 106 322 323 CONECT 106 105 107 324 325 CONECT 107 106 108 326 327 CONECT 108 107 172 328 329 CONECT 109 16 110 110 111 CONECT 110 109 109 CONECT 111 109 112 330 331 CONECT 112 111 113 332 333 CONECT 113 112 114 334 335 CONECT 114 113 115 336 337 CONECT 115 114 116 338 339 CONECT 116 115 117 340 341 CONECT 117 116 118 342 343 CONECT 118 117 119 119 344 CONECT 119 118 118 120 345 CONECT 120 119 121 346 347 CONECT 121 120 122 348 349 CONECT 122 121 123 350 351 CONECT 123 122 124 352 353 CONECT 124 123 125 354 355 CONECT 125 124 170 356 357 CONECT 126 17 127 127 128 CONECT 127 126 126 CONECT 128 126 129 358 359 CONECT 129 128 130 360 361 CONECT 130 129 131 362 363 CONECT 131 130 132 364 365 CONECT 132 131 133 366 367 CONECT 133 132 134 368 369 CONECT 134 133 135 370 371 CONECT 135 134 136 136 372 CONECT 136 135 135 137 373 CONECT 137 136 138 374 375 CONECT 138 137 139 376 377 CONECT 139 138 140 378 379 CONECT 140 139 141 380 381 CONECT 141 140 142 382 383 CONECT 142 141 174 384 385 CONECT 143 15 144 144 145 CONECT 144 143 143 CONECT 145 143 146 386 387 CONECT 146 145 147 388 389 CONECT 147 146 148 390 391 CONECT 148 147 149 392 393 CONECT 149 148 150 394 395 CONECT 150 149 151 396 397 CONECT 151 150 152 398 399 CONECT 152 151 153 153 400 CONECT 153 152 152 154 401 CONECT 154 153 155 402 403 CONECT 155 154 156 404 405 CONECT 156 155 157 406 407 CONECT 157 156 158 408 409 CONECT 158 157 159 410 411 CONECT 159 158 160 412 413 CONECT 160 159 161 414 415 CONECT 161 160 416 417 418 CONECT 162 57 163 419 420 CONECT 163 162 421 422 423 CONECT 164 40 165 424 425 CONECT 165 164 426 427 428 CONECT 166 91 167 429 430 CONECT 167 166 431 432 433 CONECT 168 74 169 434 435 CONECT 169 168 436 437 438 CONECT 170 125 171 439 440 CONECT 171 170 441 442 443 CONECT 172 108 173 444 445 CONECT 173 172 446 447 448 CONECT 174 142 175 449 450 CONECT 175 174 451 452 453 CONECT 176 1 CONECT 177 2 CONECT 178 3 CONECT 179 4 CONECT 180 5 CONECT 181 9 CONECT 182 9 CONECT 183 10 CONECT 184 12 CONECT 185 13 CONECT 186 14 CONECT 187 14 CONECT 188 19 CONECT 189 19 CONECT 190 26 CONECT 191 26 CONECT 192 27 CONECT 193 27 CONECT 194 28 CONECT 195 28 CONECT 196 29 CONECT 197 29 CONECT 198 30 CONECT 199 30 CONECT 200 31 CONECT 201 31 CONECT 202 32 CONECT 203 32 CONECT 204 33 CONECT 205 34 CONECT 206 35 CONECT 207 35 CONECT 208 36 CONECT 209 36 CONECT 210 37 CONECT 211 37 CONECT 212 38 CONECT 213 38 CONECT 214 39 CONECT 215 39 CONECT 216 40 CONECT 217 40 CONECT 218 43 CONECT 219 43 CONECT 220 44 CONECT 221 44 CONECT 222 45 CONECT 223 45 CONECT 224 46 CONECT 225 46 CONECT 226 47 CONECT 227 47 CONECT 228 48 CONECT 229 48 CONECT 230 49 CONECT 231 49 CONECT 232 50 CONECT 233 51 CONECT 234 52 CONECT 235 52 CONECT 236 53 CONECT 237 53 CONECT 238 54 CONECT 239 54 CONECT 240 55 CONECT 241 55 CONECT 242 56 CONECT 243 56 CONECT 244 57 CONECT 245 57 CONECT 246 60 CONECT 247 60 CONECT 248 61 CONECT 249 61 CONECT 250 62 CONECT 251 62 CONECT 252 63 CONECT 253 63 CONECT 254 64 CONECT 255 64 CONECT 256 65 CONECT 257 65 CONECT 258 66 CONECT 259 66 CONECT 260 67 CONECT 261 68 CONECT 262 69 CONECT 263 69 CONECT 264 70 CONECT 265 70 CONECT 266 71 CONECT 267 71 CONECT 268 72 CONECT 269 72 CONECT 270 73 CONECT 271 73 CONECT 272 74 CONECT 273 74 CONECT 274 77 CONECT 275 77 CONECT 276 78 CONECT 277 78 CONECT 278 79 CONECT 279 79 CONECT 280 80 CONECT 281 80 CONECT 282 81 CONECT 283 81 CONECT 284 82 CONECT 285 82 CONECT 286 83 CONECT 287 83 CONECT 288 84 CONECT 289 85 CONECT 290 86 CONECT 291 86 CONECT 292 87 CONECT 293 87 CONECT 294 88 CONECT 295 88 CONECT 296 89 CONECT 297 89 CONECT 298 90 CONECT 299 90 CONECT 300 91 CONECT 301 91 CONECT 302 94 CONECT 303 94 CONECT 304 95 CONECT 305 95 CONECT 306 96 CONECT 307 96 CONECT 308 97 CONECT 309 97 CONECT 310 98 CONECT 311 98 CONECT 312 99 CONECT 313 99 CONECT 314 100 CONECT 315 100 CONECT 316 101 CONECT 317 102 CONECT 318 103 CONECT 319 103 CONECT 320 104 CONECT 321 104 CONECT 322 105 CONECT 323 105 CONECT 324 106 CONECT 325 106 CONECT 326 107 CONECT 327 107 CONECT 328 108 CONECT 329 108 CONECT 330 111 CONECT 331 111 CONECT 332 112 CONECT 333 112 CONECT 334 113 CONECT 335 113 CONECT 336 114 CONECT 337 114 CONECT 338 115 CONECT 339 115 CONECT 340 116 CONECT 341 116 CONECT 342 117 CONECT 343 117 CONECT 344 118 CONECT 345 119 CONECT 346 120 CONECT 347 120 CONECT 348 121 CONECT 349 121 CONECT 350 122 CONECT 351 122 CONECT 352 123 CONECT 353 123 CONECT 354 124 CONECT 355 124 CONECT 356 125 CONECT 357 125 CONECT 358 128 CONECT 359 128 CONECT 360 129 CONECT 361 129 CONECT 362 130 CONECT 363 130 CONECT 364 131 CONECT 365 131 CONECT 366 132 CONECT 367 132 CONECT 368 133 CONECT 369 133 CONECT 370 134 CONECT 371 134 CONECT 372 135 CONECT 373 136 CONECT 374 137 CONECT 375 137 CONECT 376 138 CONECT 377 138 CONECT 378 139 CONECT 379 139 CONECT 380 140 CONECT 381 140 CONECT 382 141 CONECT 383 141 CONECT 384 142 CONECT 385 142 CONECT 386 145 CONECT 387 145 CONECT 388 146 CONECT 389 146 CONECT 390 147 CONECT 391 147 CONECT 392 148 CONECT 393 148 CONECT 394 149 CONECT 395 149 CONECT 396 150 CONECT 397 150 CONECT 398 151 CONECT 399 151 CONECT 400 152 CONECT 401 153 CONECT 402 154 CONECT 403 154 CONECT 404 155 CONECT 405 155 CONECT 406 156 CONECT 407 156 CONECT 408 157 CONECT 409 157 CONECT 410 158 CONECT 411 158 CONECT 412 159 CONECT 413 159 CONECT 414 160 CONECT 415 160 CONECT 416 161 CONECT 417 161 CONECT 418 161 CONECT 419 162 CONECT 420 162 CONECT 421 163 CONECT 422 163 CONECT 423 163 CONECT 424 164 CONECT 425 164 CONECT 426 165 CONECT 427 165 CONECT 428 165 CONECT 429 166 CONECT 430 166 CONECT 431 167 CONECT 432 167 CONECT 433 167 CONECT 434 168 CONECT 435 168 CONECT 436 169 CONECT 437 169 CONECT 438 169 CONECT 439 170 CONECT 440 170 CONECT 441 171 CONECT 442 171 CONECT 443 171 CONECT 444 172 CONECT 445 172 CONECT 446 173 CONECT 447 173 CONECT 448 173 CONECT 449 174 CONECT 450 174 CONECT 451 175 CONECT 452 175 CONECT 453 175 MASTER 0 0 0 0 0 0 0 0 453 0 453 0 END xscreensaver-5.36/hacks/images/molecules/penicillin.pdb000644 000767 000024 00000007760 07253546325 023326 0ustar00jwzstaff000000 000000 HEADER Penicillin G, an antibiotic COMPND al3077 AUTHOR Created by Dave Woodcock at Okanagan University College AUTHOR email:woodcock@okanagan.bc.ca AUTHOR Date revised: Wed Aug 30 12:33:12 2000 GENERATED BY BABEL 1.6 HETATM 1 C 1 0.000 0.000 0.000 1.00 0.00 HETATM 2 C 1 1.542 0.000 0.000 1.00 0.00 HETATM 3 C 1 1.415 1.509 0.000 1.00 0.00 HETATM 4 O 1 2.209 2.398 -0.083 1.00 0.00 HETATM 5 N 1 0.066 1.475 0.061 1.00 0.00 HETATM 6 N 1 2.125 -0.528 1.243 1.00 0.00 HETATM 7 C 1 2.235 -1.858 1.457 1.00 0.00 HETATM 8 O 1 2.669 -2.251 2.509 1.00 0.00 HETATM 9 C 1 1.827 -2.860 0.414 1.00 0.00 HETATM 10 C 1 1.446 -4.153 1.098 1.00 0.00 HETATM 11 C 1 0.143 -4.328 1.578 1.00 0.00 HETATM 12 C 1 -0.216 -5.521 2.214 1.00 0.00 HETATM 13 C 1 0.729 -6.540 2.373 1.00 0.00 HETATM 14 C 1 2.034 -6.363 1.902 1.00 0.00 HETATM 15 C 1 2.393 -5.168 1.268 1.00 0.00 HETATM 16 S 1 -0.818 -0.450 1.519 1.00 0.00 HETATM 17 C 1 -1.605 1.127 1.810 1.00 0.00 HETATM 18 C 1 -1.800 1.394 3.317 1.00 0.00 HETATM 19 C 1 -2.966 1.138 1.082 1.00 0.00 HETATM 20 C 1 -0.629 2.147 1.173 1.00 0.00 HETATM 21 C 1 -1.351 3.368 0.682 1.00 0.00 HETATM 22 O 1 -1.537 3.505 -0.499 1.00 0.00 HETATM 23 O 1 -2.048 4.114 1.557 1.00 0.00 HETATM 24 H 1 -0.466 -0.363 -0.916 1.00 0.00 HETATM 25 H 1 1.982 -0.387 -0.919 1.00 0.00 HETATM 26 H 1 2.409 0.115 1.973 1.00 0.00 HETATM 27 H 1 2.660 -3.033 -0.268 1.00 0.00 HETATM 28 H 1 0.971 -2.493 -0.151 1.00 0.00 HETATM 29 H 1 -0.596 -3.536 1.454 1.00 0.00 HETATM 30 H 1 -1.232 -5.657 2.584 1.00 0.00 HETATM 31 H 1 0.449 -7.470 2.868 1.00 0.00 HETATM 32 H 1 2.772 -7.155 2.030 1.00 0.00 HETATM 33 H 1 3.412 -5.032 0.906 1.00 0.00 HETATM 34 H 1 -0.839 1.345 3.829 1.00 0.00 HETATM 35 H 1 -2.470 0.644 3.739 1.00 0.00 HETATM 36 H 1 -2.233 2.384 3.459 1.00 0.00 HETATM 37 H 1 -3.586 0.322 1.454 1.00 0.00 HETATM 38 H 1 -2.811 1.012 0.010 1.00 0.00 HETATM 39 H 1 -3.480 2.082 1.263 1.00 0.00 HETATM 40 H 1 0.108 2.446 1.919 1.00 0.00 HETATM 41 H 1 -2.798 4.548 1.098 1.00 0.00 CONECT 1 2 5 16 24 CONECT 2 1 3 6 25 CONECT 3 2 4 4 5 CONECT 4 3 3 CONECT 5 1 3 20 CONECT 6 2 7 26 CONECT 7 6 8 8 9 CONECT 8 7 7 CONECT 9 7 10 27 28 CONECT 10 9 11 11 15 CONECT 11 10 10 12 29 CONECT 12 11 13 13 30 CONECT 13 12 12 14 31 CONECT 14 13 15 15 32 CONECT 15 10 14 14 33 CONECT 16 1 17 CONECT 17 16 18 19 20 CONECT 18 17 34 35 36 CONECT 19 17 37 38 39 CONECT 20 5 17 21 40 CONECT 21 20 22 22 23 CONECT 22 21 21 CONECT 23 21 41 CONECT 24 1 CONECT 25 2 CONECT 26 6 CONECT 27 9 CONECT 28 9 CONECT 29 11 CONECT 30 12 CONECT 31 13 CONECT 32 14 CONECT 33 15 CONECT 34 18 CONECT 35 18 CONECT 36 18 CONECT 37 19 CONECT 38 19 CONECT 39 19 CONECT 40 20 CONECT 41 23 MASTER 0 0 0 0 0 0 0 0 41 0 41 0 END xscreensaver-5.36/hacks/images/molecules/salvinorin.pdb000644 000767 000024 00000016436 11411353541 023347 0ustar00jwzstaff000000 000000 HEADER Salvinorin A: A dissociative hallucinogen, kappa opioid receptor agonist ATOM 1 O 0 -1.578 3.509 1.054 0.00 0.00 O+0 ATOM 2 O 0 -0.661 -3.341 -1.950 0.00 0.00 O+0 ATOM 3 O 0 -0.961 -0.736 -2.292 0.00 0.00 O+0 ATOM 4 O 0 0.223 4.284 1.789 0.00 0.00 O+0 ATOM 5 O 0 4.133 -2.520 1.067 0.00 0.00 O+0 ATOM 6 O 0 4.305 -2.225 -1.047 0.00 0.00 O+0 ATOM 7 O 0 -5.473 1.972 2.519 0.00 0.00 O+0 ATOM 8 O 0 -1.864 -4.598 -3.067 0.00 0.00 O+0 ATOM 9 C 0 1.875 -0.263 -0.355 0.00 0.00 C+0 ATOM 10 C 0 -0.335 1.379 -0.322 0.00 0.00 C+0 ATOM 11 C 0 0.290 -0.090 -0.402 0.00 0.00 C+0 ATOM 12 C 0 0.295 2.080 0.949 0.00 0.00 C+0 ATOM 13 C 0 2.416 0.613 0.838 0.00 0.00 C+0 ATOM 14 C 0 2.218 -1.798 -0.082 0.00 0.00 C+0 ATOM 15 C 0 1.854 2.057 0.955 0.00 0.00 C+0 ATOM 16 C 0 -1.892 1.349 -0.054 0.00 0.00 C+0 ATOM 17 C 0 -0.312 -1.076 -1.312 0.00 0.00 C+0 ATOM 18 C 0 1.427 -2.783 -1.008 0.00 0.00 C+0 ATOM 19 C 0 2.599 0.182 -1.678 0.00 0.00 C+0 ATOM 20 C 0 -0.152 2.242 -1.623 0.00 0.00 C+0 ATOM 21 C 0 -0.102 -2.502 -1.056 0.00 0.00 C+0 ATOM 22 C 0 -2.483 2.720 0.438 0.00 0.00 C+0 ATOM 23 C 0 -0.364 3.344 1.274 0.00 0.00 C+0 ATOM 24 C 0 3.632 -2.188 -0.023 0.00 0.00 C+0 ATOM 25 C 0 -3.721 2.668 1.259 0.00 0.00 C+0 ATOM 26 C 0 -4.516 3.764 1.594 0.00 0.00 C+0 ATOM 27 C 0 -4.363 1.580 1.857 0.00 0.00 C+0 ATOM 28 C 0 -1.768 -3.894 -2.073 0.00 0.00 C+0 ATOM 29 C 0 5.353 -2.949 1.401 0.00 0.00 C+0 ATOM 30 C 0 -5.577 3.309 2.365 0.00 0.00 C+0 ATOM 31 C 0 -2.903 -3.782 -1.178 0.00 0.00 C+0 ATOM 32 H 0 -0.032 -0.494 0.566 0.00 0.00 H+0 ATOM 33 H 0 0.021 1.488 1.831 0.00 0.00 H+0 ATOM 34 H 0 2.176 0.125 1.788 0.00 0.00 H+0 ATOM 35 H 0 3.509 0.668 0.818 0.00 0.00 H+0 ATOM 36 H 0 1.806 -2.023 0.910 0.00 0.00 H+0 ATOM 37 H 0 2.250 2.682 0.154 0.00 0.00 H+0 ATOM 38 H 0 2.226 2.485 1.891 0.00 0.00 H+0 ATOM 39 H 0 -2.454 1.020 -0.933 0.00 0.00 H+0 ATOM 40 H 0 -2.074 0.590 0.706 0.00 0.00 H+0 ATOM 41 H 0 1.574 -3.811 -0.660 0.00 0.00 H+0 ATOM 42 H 0 1.827 -2.744 -2.026 0.00 0.00 H+0 ATOM 43 H 0 2.260 -0.386 -2.545 0.00 0.00 H+0 ATOM 44 H 0 2.509 1.228 -1.923 0.00 0.00 H+0 ATOM 45 H 0 3.681 0.081 -1.611 0.00 0.00 H+0 ATOM 46 H 0 -0.558 1.749 -2.507 0.00 0.00 H+0 ATOM 47 H 0 -0.638 3.215 -1.562 0.00 0.00 H+0 ATOM 48 H 0 0.868 2.520 -1.836 0.00 0.00 H+0 ATOM 49 H 0 -0.497 -2.735 -0.061 0.00 0.00 H+0 ATOM 50 H 0 -2.764 3.279 -0.460 0.00 0.00 H+0 ATOM 51 H 0 -4.357 4.736 1.321 0.00 0.00 H+0 ATOM 52 H 0 -4.064 0.605 1.821 0.00 0.00 H+0 ATOM 53 H 0 5.360 -3.151 2.472 0.00 0.00 H+0 ATOM 54 H 0 6.112 -2.193 1.186 0.00 0.00 H+0 ATOM 55 H 0 5.605 -3.873 0.875 0.00 0.00 H+0 ATOM 56 H 0 -6.323 3.886 2.756 0.00 0.00 H+0 ATOM 57 H 0 -3.222 -2.742 -1.105 0.00 0.00 H+0 ATOM 58 H 0 -2.636 -4.143 -0.184 0.00 0.00 H+0 ATOM 59 H 0 -3.759 -4.370 -1.521 0.00 0.00 H+0 CONECT 1 22 23 0 0 NONE 65 CONECT 2 21 28 0 0 NONE 66 CONECT 3 17 0 0 0 NONE 67 CONECT 4 23 0 0 0 NONE 68 CONECT 5 24 29 0 0 NONE 69 CONECT 6 24 0 0 0 NONE 70 CONECT 7 27 30 0 0 NONE 71 CONECT 8 28 0 0 0 NONE 72 CONECT 9 11 13 14 19 NONE 73 CONECT 10 11 12 16 20 NONE 74 CONECT 11 9 10 17 32 NONE 75 CONECT 12 10 15 23 33 NONE 76 CONECT 13 9 15 34 35 NONE 77 CONECT 14 9 18 24 36 NONE 78 CONECT 15 12 13 37 38 NONE 79 CONECT 16 10 22 39 40 NONE 80 CONECT 17 3 11 21 0 NONE 81 CONECT 18 14 21 41 42 NONE 82 CONECT 19 9 43 44 45 NONE 83 CONECT 20 10 46 47 48 NONE 84 CONECT 21 2 17 18 49 NONE 85 CONECT 22 1 16 25 50 NONE 86 CONECT 23 1 4 12 0 NONE 87 CONECT 24 5 6 14 0 NONE 88 CONECT 25 22 26 27 0 NONE 89 CONECT 26 25 30 51 0 NONE 90 CONECT 27 7 25 52 0 NONE 91 CONECT 28 2 8 31 0 NONE 92 CONECT 29 5 53 54 55 NONE 93 CONECT 30 7 26 56 0 NONE 94 CONECT 31 28 57 58 59 NONE 95 END NONE 96 xscreensaver-5.36/hacks/images/molecules/sarin.pdb000644 000767 000024 00000003634 07253633130 022277 0ustar00jwzstaff000000 000000 HEADER Sarin: S Enantiomer, a chemical warfare agent COMPND al3023 AUTHOR Created by Dave Woodcock at Okanagan University College AUTHOR email:woodcock@okanagan.bc.ca AUTHOR Date revised: Wed Aug 30 12:33:12 2000 GENERATED BY BABEL 1.6 HETATM 1 P 1 0.000 0.000 0.000 1.00 0.00 HETATM 2 F 1 1.779 0.000 0.000 1.00 0.00 HETATM 3 C 1 -0.611 1.725 0.000 1.00 0.00 HETATM 4 O 1 -0.599 -0.840 1.463 1.00 0.00 HETATM 5 O 1 -0.599 -0.841 -1.466 1.00 0.00 HETATM 6 C 1 -1.898 -1.369 -1.304 1.00 0.00 HETATM 7 C 1 -1.817 -2.772 -0.672 1.00 0.00 HETATM 8 C 1 -2.555 -1.476 -2.694 1.00 0.00 HETATM 9 H 1 -0.248 2.240 -0.890 1.00 0.00 HETATM 10 H 1 -0.248 2.239 0.891 1.00 0.00 HETATM 11 H 1 -1.701 1.724 0.000 1.00 0.00 HETATM 12 H 1 -2.510 -0.718 -0.679 1.00 0.00 HETATM 13 H 1 -1.372 -2.712 0.320 1.00 0.00 HETATM 14 H 1 -1.203 -3.414 -1.303 1.00 0.00 HETATM 15 H 1 -2.818 -3.194 -0.591 1.00 0.00 HETATM 16 H 1 -1.961 -2.124 -3.339 1.00 0.00 HETATM 17 H 1 -3.561 -1.885 -2.595 1.00 0.00 HETATM 18 H 1 -2.613 -0.482 -3.136 1.00 0.00 CONECT 1 2 3 4 4 5 CONECT 2 1 CONECT 3 1 9 10 11 CONECT 4 1 1 CONECT 5 1 6 CONECT 6 5 7 8 12 CONECT 7 6 13 14 15 CONECT 8 6 16 17 18 CONECT 9 3 CONECT 10 3 CONECT 11 3 CONECT 12 6 CONECT 13 7 CONECT 14 7 CONECT 15 7 CONECT 16 8 CONECT 17 8 CONECT 18 8 MASTER 0 0 0 0 0 0 0 0 18 0 18 0 END xscreensaver-5.36/hacks/images/molecules/strychnine.pdb000644 000767 000024 00000011045 07253633130 023344 0ustar00jwzstaff000000 000000 HEADER Strychnine: Nux Vomica COMPND al3061 AUTHOR Created by Dave Woodcock at Okanagan University College AUTHOR email:woodcock@okanagan.bc.ca AUTHOR Date revised: Wed Aug 30 12:33:12 2000 GENERATED BY BABEL 1.6 HETATM 1 C 1 0.000 0.000 0.000 1.00 0.00 HETATM 2 C 1 1.395 0.000 0.000 1.00 0.00 HETATM 3 C 1 2.124 1.193 0.000 1.00 0.00 HETATM 4 C 1 1.414 2.398 -0.067 1.00 0.00 HETATM 5 C 1 0.014 2.401 -0.115 1.00 0.00 HETATM 6 C 1 -0.709 1.203 -0.087 1.00 0.00 HETATM 7 C 1 1.911 -1.410 0.160 1.00 0.00 HETATM 8 N 1 -0.471 -1.291 -0.057 1.00 0.00 HETATM 9 C 1 -1.720 -1.604 -0.472 1.00 0.00 HETATM 10 O 1 -2.589 -0.778 -0.359 1.00 0.00 HETATM 11 C 1 0.645 -2.239 -0.189 1.00 0.00 HETATM 12 C 1 -1.941 -2.698 -1.483 1.00 0.00 HETATM 13 C 1 -0.687 -3.549 -1.797 1.00 0.00 HETATM 14 H 1 0.525 -3.093 0.477 1.00 0.00 HETATM 15 C 1 0.573 -2.674 -1.656 1.00 0.00 HETATM 16 H 1 -0.775 -3.908 -2.822 1.00 0.00 HETATM 17 O 1 -0.654 -4.641 -0.904 1.00 0.00 HETATM 18 C 1 0.221 -5.671 -1.313 1.00 0.00 HETATM 19 C 1 1.595 -5.446 -0.726 1.00 0.00 HETATM 20 C 1 2.356 -4.403 -1.088 1.00 0.00 HETATM 21 C 1 3.723 -4.222 -0.464 1.00 0.00 HETATM 22 C 1 1.893 -3.351 -2.072 1.00 0.00 HETATM 23 H 1 0.431 -1.791 -2.279 1.00 0.00 HETATM 24 H 1 1.803 -3.769 -3.074 1.00 0.00 HETATM 25 C 1 2.942 -2.222 -2.062 1.00 0.00 HETATM 26 C 1 3.199 -1.816 -0.595 1.00 0.00 HETATM 27 C 1 2.322 -1.641 1.618 1.00 0.00 HETATM 28 C 1 3.109 -2.956 1.512 1.00 0.00 HETATM 29 N 1 3.783 -2.911 0.202 1.00 0.00 HETATM 30 H 1 3.212 1.188 0.059 1.00 0.00 HETATM 31 H 1 1.957 3.343 -0.078 1.00 0.00 HETATM 32 H 1 -0.520 3.349 -0.172 1.00 0.00 HETATM 33 H 1 -1.798 1.219 -0.127 1.00 0.00 HETATM 34 H 1 -2.263 -2.218 -2.408 1.00 0.00 HETATM 35 H 1 -2.740 -3.355 -1.139 1.00 0.00 HETATM 36 H 1 0.290 -5.733 -2.400 1.00 0.00 HETATM 37 H 1 -0.163 -6.618 -0.935 1.00 0.00 HETATM 38 H 1 1.974 -6.159 0.006 1.00 0.00 HETATM 39 H 1 4.483 -4.272 -1.243 1.00 0.00 HETATM 40 H 1 3.923 -5.012 0.260 1.00 0.00 HETATM 41 H 1 2.578 -1.363 -2.625 1.00 0.00 HETATM 42 H 1 3.871 -2.566 -2.519 1.00 0.00 HETATM 43 H 1 3.898 -0.980 -0.573 1.00 0.00 HETATM 44 H 1 1.464 -1.724 2.285 1.00 0.00 HETATM 45 H 1 2.987 -0.840 1.943 1.00 0.00 HETATM 46 H 1 2.413 -3.794 1.551 1.00 0.00 HETATM 47 H 1 3.833 -3.042 2.322 1.00 0.00 CONECT 1 2 2 6 8 CONECT 2 1 1 3 7 CONECT 3 2 4 4 30 CONECT 4 3 3 5 31 CONECT 5 4 6 6 32 CONECT 6 1 5 5 33 CONECT 7 2 11 26 27 CONECT 8 1 9 11 CONECT 9 8 10 10 12 CONECT 10 9 9 CONECT 11 7 8 14 15 CONECT 12 9 13 34 35 CONECT 13 12 15 16 17 CONECT 14 11 CONECT 15 11 13 22 23 CONECT 16 13 CONECT 17 13 18 CONECT 18 17 19 36 37 CONECT 19 18 20 20 38 CONECT 20 19 19 21 22 CONECT 21 20 29 39 40 CONECT 22 15 20 24 25 CONECT 23 15 CONECT 24 22 CONECT 25 22 26 41 42 CONECT 26 7 25 29 43 CONECT 27 7 28 44 45 CONECT 28 27 29 46 47 CONECT 29 21 26 28 CONECT 30 3 CONECT 31 4 CONECT 32 5 CONECT 33 6 CONECT 34 12 CONECT 35 12 CONECT 36 18 CONECT 37 18 CONECT 38 19 CONECT 39 21 CONECT 40 21 CONECT 41 25 CONECT 42 25 CONECT 43 26 CONECT 44 27 CONECT 45 27 CONECT 46 28 CONECT 47 28 MASTER 0 0 0 0 0 0 0 0 47 0 47 0 END xscreensaver-5.36/hacks/images/molecules/sucrose.pdb000644 000767 000024 00000010406 07253633130 022641 0ustar00jwzstaff000000 000000 HEADER Sucrose: Sugar COMPND nat0013 AUTHOR Created by Dave Woodcock at Okanagan University College AUTHOR email:woodcock@okanagan.bc.ca AUTHOR Date revised: Fri Sep 1 09:41:05 2000 GENERATED BY BABEL 1.6 HETATM 1 C 1 0.000 0.000 0.000 1.00 0.00 HETATM 2 C 1 1.542 0.000 0.000 1.00 0.00 HETATM 3 C 1 2.041 1.457 0.000 1.00 0.00 HETATM 4 C 1 1.414 2.181 1.207 1.00 0.00 HETATM 5 C 1 -0.117 2.034 1.128 1.00 0.00 HETATM 6 O 1 -0.472 0.668 1.149 1.00 0.00 HETATM 7 H 1 -0.566 2.548 1.978 1.00 0.00 HETATM 8 O 1 -0.572 2.607 -0.076 1.00 0.00 HETATM 9 C 1 -1.867 3.149 -0.193 1.00 0.00 HETATM 10 C 1 -1.993 3.815 -1.579 1.00 0.00 HETATM 11 C 1 -2.960 2.084 -0.002 1.00 0.00 HETATM 12 O 1 -2.117 4.104 0.816 1.00 0.00 HETATM 13 C 1 -3.516 4.220 0.978 1.00 0.00 HETATM 14 C 1 -4.167 2.959 0.369 1.00 0.00 HETATM 15 H 1 -0.368 0.500 -0.896 1.00 0.00 HETATM 16 H 1 1.901 -0.501 0.899 1.00 0.00 HETATM 17 H 1 1.728 1.949 -0.923 1.00 0.00 HETATM 18 H 1 1.774 1.726 2.130 1.00 0.00 HETATM 19 H 1 -1.836 3.065 -2.355 1.00 0.00 HETATM 20 H 1 -2.981 4.259 -1.698 1.00 0.00 HETATM 21 H 1 -3.133 1.511 -0.914 1.00 0.00 HETATM 22 H 1 -3.871 5.100 0.441 1.00 0.00 HETATM 23 H 1 -4.821 2.452 1.081 1.00 0.00 HETATM 24 C 1 -3.859 4.364 2.474 1.00 0.00 HETATM 25 O 1 -5.279 4.442 2.639 1.00 0.00 HETATM 26 O 1 -4.897 3.325 -0.807 1.00 0.00 HETATM 27 O 1 -2.638 1.202 1.079 1.00 0.00 HETATM 28 O 1 -0.995 4.834 -1.694 1.00 0.00 HETATM 29 C 1 -0.513 -1.453 0.003 1.00 0.00 HETATM 30 O 1 -1.944 -1.459 -0.055 1.00 0.00 HETATM 31 O 1 2.039 -0.690 -1.152 1.00 0.00 HETATM 32 O 1 3.468 1.480 0.101 1.00 0.00 HETATM 33 O 1 1.772 3.567 1.189 1.00 0.00 HETATM 34 H 1 -3.396 5.270 2.866 1.00 0.00 HETATM 35 H 1 -3.480 3.504 3.024 1.00 0.00 HETATM 36 H 1 -5.622 5.216 2.180 1.00 0.00 HETATM 37 H 1 -5.302 2.544 -1.199 1.00 0.00 HETATM 38 H 1 -2.661 1.671 1.919 1.00 0.00 HETATM 39 H 1 -1.056 5.255 -2.558 1.00 0.00 HETATM 40 H 1 -0.180 -1.958 0.910 1.00 0.00 HETATM 41 H 1 -0.118 -1.977 -0.868 1.00 0.00 HETATM 42 H 1 -2.305 -1.058 0.741 1.00 0.00 HETATM 43 H 1 1.728 -0.261 -1.956 1.00 0.00 HETATM 44 H 1 3.781 2.391 0.099 1.00 0.00 HETATM 45 H 1 1.428 3.987 0.394 1.00 0.00 CONECT 1 2 6 15 29 CONECT 2 1 3 16 31 CONECT 3 2 4 17 32 CONECT 4 3 5 18 33 CONECT 5 4 6 7 8 CONECT 6 1 5 CONECT 7 5 CONECT 8 5 9 CONECT 9 8 10 11 12 CONECT 10 9 19 20 28 CONECT 11 9 14 21 27 CONECT 12 9 13 CONECT 13 12 14 22 24 CONECT 14 11 13 23 26 CONECT 15 1 CONECT 16 2 CONECT 17 3 CONECT 18 4 CONECT 19 10 CONECT 20 10 CONECT 21 11 CONECT 22 13 CONECT 23 14 CONECT 24 13 25 34 35 CONECT 25 24 36 CONECT 26 14 37 CONECT 27 11 38 CONECT 28 10 39 CONECT 29 1 30 40 41 CONECT 30 29 42 CONECT 31 2 43 CONECT 32 3 44 CONECT 33 4 45 CONECT 34 24 CONECT 35 24 CONECT 36 25 CONECT 37 26 CONECT 38 27 CONECT 39 28 CONECT 40 29 CONECT 41 29 CONECT 42 30 CONECT 43 31 CONECT 44 32 CONECT 45 33 MASTER 0 0 0 0 0 0 0 0 45 0 45 0 END xscreensaver-5.36/hacks/images/molecules/thalidomide.pdb000644 000767 000024 00000005722 07253546325 023457 0ustar00jwzstaff000000 000000 HEADER (S)-Thalidomide, a teratogenic enantiomer COMPND jb03stha AUTHOR Created by Dave Woodcock at Okanagan University College AUTHOR email:woodcock@okanagan.bc.ca AUTHOR Date revised: Mon Sep 18 15:35:27 2000 GENERATED BY BABEL 1.6 HETATM 1 C 1 0.000 0.000 0.000 1.00 0.00 HETATM 2 C 1 1.402 0.000 0.000 1.00 0.00 HETATM 3 C 1 2.128 1.197 0.000 1.00 0.00 HETATM 4 C 1 1.396 2.389 -0.011 1.00 0.00 HETATM 5 C 1 0.003 2.388 -0.010 1.00 0.00 HETATM 6 C 1 -0.728 1.196 0.001 1.00 0.00 HETATM 7 C 1 -0.415 3.783 0.056 1.00 0.00 HETATM 8 O 1 -1.550 4.177 0.150 1.00 0.00 HETATM 9 N 1 0.698 4.553 0.096 1.00 0.00 HETATM 10 C 1 1.812 3.785 0.053 1.00 0.00 HETATM 11 O 1 2.946 4.181 0.146 1.00 0.00 HETATM 12 C 1 0.702 6.005 0.319 1.00 0.00 HETATM 13 C 1 1.020 6.278 1.801 1.00 0.00 HETATM 14 C 1 1.130 7.799 2.000 1.00 0.00 HETATM 15 C 1 2.180 8.336 1.068 1.00 0.00 HETATM 16 O 1 2.814 9.307 1.391 1.00 0.00 HETATM 17 N 1 2.428 7.747 -0.124 1.00 0.00 HETATM 18 C 1 1.757 6.647 -0.538 1.00 0.00 HETATM 19 O 1 2.022 6.158 -1.607 1.00 0.00 HETATM 20 H 1 -0.535 -0.949 0.010 1.00 0.00 HETATM 21 H 1 1.938 -0.949 0.010 1.00 0.00 HETATM 22 H 1 3.217 1.203 0.020 1.00 0.00 HETATM 23 H 1 -1.817 1.201 0.022 1.00 0.00 HETATM 24 H 1 -0.272 6.423 0.067 1.00 0.00 HETATM 25 H 1 1.968 5.808 2.060 1.00 0.00 HETATM 26 H 1 0.228 5.873 2.432 1.00 0.00 HETATM 27 H 1 1.408 8.016 3.031 1.00 0.00 HETATM 28 H 1 0.173 8.268 1.775 1.00 0.00 HETATM 29 H 1 3.142 8.141 -0.727 1.00 0.00 CONECT 1 2 2 6 20 CONECT 2 1 1 3 21 CONECT 3 2 4 4 22 CONECT 4 3 3 5 10 CONECT 5 4 6 6 7 CONECT 6 1 5 5 23 CONECT 7 5 8 8 9 CONECT 8 7 7 CONECT 9 7 10 12 CONECT 10 4 9 11 11 CONECT 11 10 10 CONECT 12 9 13 18 24 CONECT 13 12 14 25 26 CONECT 14 13 15 27 28 CONECT 15 14 16 16 17 CONECT 16 15 15 CONECT 17 15 18 29 CONECT 18 12 17 19 19 CONECT 19 18 18 CONECT 20 1 CONECT 21 2 CONECT 22 3 CONECT 23 6 CONECT 24 12 CONECT 25 13 CONECT 26 13 CONECT 27 14 CONECT 28 14 CONECT 29 17 MASTER 0 0 0 0 0 0 0 0 29 0 29 0 END xscreensaver-5.36/hacks/images/molecules/thymine.pdb000644 000767 000024 00000003244 07253633130 022635 0ustar00jwzstaff000000 000000 HEADER Thymine: Pyrimidine base nucleotide COMPND jb09thye AUTHOR Created by Dave Woodcock at Okanagan University College AUTHOR email:woodcock@okanagan.bc.ca AUTHOR Date revised: Tue Sep 19 21:46:02 2000 GENERATED BY BABEL 1.6 HETATM 1 C 1 0.000 0.000 0.000 1.00 0.00 HETATM 2 C 1 1.399 0.000 0.000 1.00 0.00 HETATM 3 C 1 2.068 1.228 0.000 1.00 0.00 HETATM 4 N 1 1.356 2.377 -0.004 1.00 0.00 HETATM 5 C 1 0.004 2.350 -0.006 1.00 0.00 HETATM 6 N 1 -0.667 1.176 -0.004 1.00 0.00 HETATM 7 O 1 -0.611 3.385 -0.006 1.00 0.00 HETATM 8 O 1 3.272 1.261 0.006 1.00 0.00 HETATM 9 C 1 2.173 -1.300 0.014 1.00 0.00 HETATM 10 H 1 -0.549 -0.941 0.006 1.00 0.00 HETATM 11 H 1 1.840 3.268 -0.003 1.00 0.00 HETATM 12 H 1 -1.681 1.178 -0.004 1.00 0.00 HETATM 13 H 1 1.632 -2.055 -0.555 1.00 0.00 HETATM 14 H 1 2.293 -1.638 1.044 1.00 0.00 HETATM 15 H 1 3.155 -1.146 -0.433 1.00 0.00 CONECT 1 2 2 6 10 CONECT 2 1 1 3 9 CONECT 3 2 4 8 8 CONECT 4 3 5 11 CONECT 5 4 6 7 7 CONECT 6 1 5 12 CONECT 7 5 5 CONECT 8 3 3 CONECT 9 2 13 14 15 CONECT 10 1 CONECT 11 4 CONECT 12 6 CONECT 13 9 CONECT 14 9 CONECT 15 9 MASTER 0 0 0 0 0 0 0 0 15 0 15 0 END xscreensaver-5.36/hacks/images/molecules/viagra.pdb000644 000767 000024 00000013715 07253546325 022446 0ustar00jwzstaff000000 000000 COMPND Viagra AUTHOR Created by Dave Woodcock at Okanagan University College REMARK from a model provided by Dr Eric Walters AUTHOR email:woodcock@okanagan.bc.ca AUTHOR Date revised: Mon Oct 16 12:17:54 2000 GENERATED BY BABEL 1.6 HETATM 1 C 1 0.000 0.000 0.000 1.00 0.00 HETATM 2 C 1 1.398 0.000 0.000 1.00 0.00 HETATM 3 C 1 2.105 1.207 0.000 1.00 0.00 HETATM 4 C 1 1.417 2.427 -0.037 1.00 0.00 HETATM 5 C 1 0.017 2.422 -0.014 1.00 0.00 HETATM 6 C 1 -0.692 1.216 -0.005 1.00 0.00 HETATM 7 H 1 -0.545 -0.944 0.023 1.00 0.00 HETATM 8 H 1 1.939 -0.946 0.029 1.00 0.00 HETATM 9 H 1 -0.531 3.364 -0.022 1.00 0.00 HETATM 10 C 1 2.100 3.733 -0.053 1.00 0.00 HETATM 11 N 1 3.453 3.848 -0.302 1.00 0.00 HETATM 12 C 1 4.091 5.067 -0.302 1.00 0.00 HETATM 13 C 1 3.259 6.246 -0.033 1.00 0.00 HETATM 14 C 1 1.897 6.080 0.190 1.00 0.00 HETATM 15 N 1 1.310 4.840 0.169 1.00 0.00 HETATM 16 O 1 5.271 5.168 -0.544 1.00 0.00 HETATM 17 H 1 4.029 2.992 -0.569 1.00 0.00 HETATM 18 N 1 3.538 7.572 0.006 1.00 0.00 HETATM 19 N 1 2.406 8.264 0.248 1.00 0.00 HETATM 20 C 1 1.373 7.363 0.369 1.00 0.00 HETATM 21 C 1 4.863 8.163 -0.230 1.00 0.00 HETATM 22 H 1 4.799 9.247 -0.133 1.00 0.00 HETATM 23 H 1 5.200 7.907 -1.235 1.00 0.00 HETATM 24 H 1 5.570 7.774 0.501 1.00 0.00 HETATM 25 C 1 -0.079 7.701 0.624 1.00 0.00 HETATM 26 C 1 -0.226 9.225 0.805 1.00 0.00 HETATM 27 H 1 -0.415 7.190 1.526 1.00 0.00 HETATM 28 H 1 -0.680 7.372 -0.224 1.00 0.00 HETATM 29 C 1 -1.702 9.584 1.072 1.00 0.00 HETATM 30 H 1 0.112 9.732 -0.099 1.00 0.00 HETATM 31 H 1 0.383 9.550 1.649 1.00 0.00 HETATM 32 H 1 -1.796 10.663 1.198 1.00 0.00 HETATM 33 H 1 -2.043 9.083 1.978 1.00 0.00 HETATM 34 H 1 -2.315 9.264 0.229 1.00 0.00 HETATM 35 O 1 3.461 1.164 0.124 1.00 0.00 HETATM 36 C 1 3.859 0.886 1.450 1.00 0.00 HETATM 37 C 1 3.396 1.998 2.414 1.00 0.00 HETATM 38 H 1 4.947 0.824 1.480 1.00 0.00 HETATM 39 H 1 3.443 -0.069 1.771 1.00 0.00 HETATM 40 H 1 3.774 1.788 3.414 1.00 0.00 HETATM 41 H 1 2.307 2.037 2.446 1.00 0.00 HETATM 42 H 1 3.786 2.959 2.077 1.00 0.00 HETATM 43 S 1 -2.443 1.230 0.022 1.00 0.00 HETATM 44 N 1 -3.045 -0.296 -0.555 1.00 0.00 HETATM 45 C 1 -4.498 -0.382 -0.345 1.00 0.00 HETATM 46 C 1 -4.996 -1.765 -0.804 1.00 0.00 HETATM 47 N 1 -4.674 -1.957 -2.227 1.00 0.00 HETATM 48 C 1 -3.222 -1.855 -2.442 1.00 0.00 HETATM 49 C 1 -2.728 -0.471 -1.980 1.00 0.00 HETATM 50 H 1 -5.005 0.395 -0.919 1.00 0.00 HETATM 51 H 1 -4.725 -0.254 0.715 1.00 0.00 HETATM 52 H 1 -6.076 -1.822 -0.662 1.00 0.00 HETATM 53 H 1 -4.513 -2.539 -0.208 1.00 0.00 HETATM 54 H 1 -2.998 -1.979 -3.502 1.00 0.00 HETATM 55 H 1 -2.707 -2.629 -1.872 1.00 0.00 HETATM 56 H 1 -3.222 0.303 -2.569 1.00 0.00 HETATM 57 H 1 -1.651 -0.407 -2.135 1.00 0.00 HETATM 58 O 1 -2.929 2.282 -0.818 1.00 0.00 HETATM 59 O 1 -2.893 1.442 1.364 1.00 0.00 HETATM 60 C 1 -5.177 -3.257 -2.700 1.00 0.00 HETATM 61 H 1 -4.954 -3.372 -3.760 1.00 0.00 HETATM 62 H 1 -6.257 -3.305 -2.557 1.00 0.00 HETATM 63 H 1 -4.703 -4.065 -2.142 1.00 0.00 CONECT 1 2 2 6 7 CONECT 2 1 1 3 8 CONECT 3 2 4 4 35 CONECT 4 3 3 5 10 CONECT 5 4 6 6 9 CONECT 6 1 5 5 43 CONECT 7 1 CONECT 8 2 CONECT 9 5 CONECT 10 4 11 15 15 CONECT 11 10 12 17 CONECT 12 11 13 16 16 CONECT 13 12 14 14 18 CONECT 14 13 13 15 20 CONECT 15 10 14 14 CONECT 16 12 12 CONECT 17 11 CONECT 18 13 19 21 CONECT 19 18 20 20 CONECT 20 14 19 19 25 CONECT 21 18 22 23 24 CONECT 22 21 CONECT 23 21 CONECT 24 21 CONECT 25 20 26 27 28 CONECT 26 25 29 30 31 CONECT 27 25 CONECT 28 25 CONECT 29 26 32 33 34 CONECT 30 26 CONECT 31 26 CONECT 32 29 CONECT 33 29 CONECT 34 29 CONECT 35 3 36 CONECT 36 35 37 38 39 CONECT 37 36 40 41 42 CONECT 38 36 CONECT 39 36 CONECT 40 37 CONECT 41 37 CONECT 42 37 CONECT 43 6 44 58 59 CONECT 44 43 45 49 CONECT 45 44 46 50 51 CONECT 46 45 47 52 53 CONECT 47 46 48 60 CONECT 48 47 49 54 55 CONECT 49 44 48 56 57 CONECT 50 45 CONECT 51 45 CONECT 52 46 CONECT 53 46 CONECT 54 48 CONECT 55 48 CONECT 56 49 CONECT 57 49 CONECT 58 43 CONECT 59 43 CONECT 60 47 61 62 63 CONECT 61 60 CONECT 62 60 CONECT 63 60 MASTER 0 0 0 0 0 0 0 0 63 0 63 0 END xscreensaver-5.36/hacks/images/molecules/vitaminb6.pdb000644 000767 000024 00000004574 07253633130 023066 0ustar00jwzstaff000000 000000 HEADER Pyridoxine: Vitamin B6 COMPND c8h11no3 AUTHOR Created by Dave Woodcock at Okanagan University College AUTHOR email:woodcock@okanagan.bc.ca AUTHOR Date revised: Fri Sep 1 09:41:05 2000 GENERATED BY BABEL 1.6 HETATM 1 C 1 0.000 0.000 0.000 1.00 0.00 HETATM 2 C 1 1.399 0.000 0.000 1.00 0.00 HETATM 3 C 1 2.095 1.214 0.000 1.00 0.00 HETATM 4 C 1 1.381 2.418 0.018 1.00 0.00 HETATM 5 C 1 -0.018 2.390 0.005 1.00 0.00 HETATM 6 N 1 -0.688 1.189 -0.006 1.00 0.00 HETATM 7 C 1 -0.754 -1.311 0.010 1.00 0.00 HETATM 8 O 1 2.079 -1.180 0.011 1.00 0.00 HETATM 9 C 1 3.608 1.210 0.001 1.00 0.00 HETATM 10 O 1 4.077 1.576 1.303 1.00 0.00 HETATM 11 C 1 2.102 3.747 0.058 1.00 0.00 HETATM 12 O 1 1.197 4.767 0.493 1.00 0.00 HETATM 13 H 1 -0.583 3.322 0.008 1.00 0.00 HETATM 14 H 1 -0.438 -1.905 0.867 1.00 0.00 HETATM 15 H 1 -0.543 -1.858 -0.909 1.00 0.00 HETATM 16 H 1 -1.824 -1.114 0.078 1.00 0.00 HETATM 17 H 1 2.145 -1.522 -0.886 1.00 0.00 HETATM 18 H 1 3.977 1.922 -0.737 1.00 0.00 HETATM 19 H 1 3.973 0.214 -0.250 1.00 0.00 HETATM 20 H 1 5.040 1.579 1.315 1.00 0.00 HETATM 21 H 1 2.472 3.988 -0.939 1.00 0.00 HETATM 22 H 1 2.940 3.690 0.753 1.00 0.00 HETATM 23 H 1 1.650 5.617 0.520 1.00 0.00 CONECT 1 2 6 7 CONECT 1 2 CONECT 2 1 3 8 CONECT 3 2 4 9 CONECT 3 4 CONECT 4 3 5 11 CONECT 5 4 6 13 CONECT 5 6 CONECT 6 1 5 CONECT 7 1 14 15 16 CONECT 8 2 17 CONECT 9 3 10 18 19 CONECT 10 9 20 CONECT 11 4 12 21 22 CONECT 12 11 23 CONECT 13 5 CONECT 14 7 CONECT 15 7 CONECT 16 7 CONECT 17 8 CONECT 18 9 CONECT 19 9 CONECT 20 10 CONECT 21 11 CONECT 22 11 CONECT 23 12 MASTER 0 0 0 0 0 0 0 0 23 0 23 0 END xscreensaver-5.36/hacks/images/molecules/vitaminc.pdb000644 000767 000024 00000004104 07253633130 022766 0ustar00jwzstaff000000 000000 HEADER Ascorbic Acid: Vitamin C COMPND vit-c AUTHOR Created by Dave Woodcock at Okanagan University College AUTHOR email:woodcock@okanagan.bc.ca AUTHOR Date revised: Fri Sep 1 09:41:05 2000 GENERATED BY BABEL 1.6 HETATM 1 C 1 0.000 0.000 0.000 1.00 0.00 HETATM 2 C 1 1.512 0.000 0.000 1.00 0.00 HETATM 3 C 1 1.927 1.264 0.000 1.00 0.00 HETATM 4 C 1 0.730 2.091 0.015 1.00 0.00 HETATM 5 O 1 -0.382 1.359 0.113 1.00 0.00 HETATM 6 O 1 0.759 3.270 0.261 1.00 0.00 HETATM 7 O 1 3.197 1.690 0.245 1.00 0.00 HETATM 8 O 1 2.283 -1.055 0.386 1.00 0.00 HETATM 9 H 1 -0.390 -0.463 -0.907 1.00 0.00 HETATM 10 C 1 -0.565 -0.653 1.264 1.00 0.00 HETATM 11 H 1 0.050 -1.475 1.629 1.00 0.00 HETATM 12 O 1 -0.674 0.397 2.229 1.00 0.00 HETATM 13 C 1 -2.028 -1.077 1.106 1.00 0.00 HETATM 14 O 1 -2.543 -0.906 2.429 1.00 0.00 HETATM 15 H 1 3.383 1.620 1.187 1.00 0.00 HETATM 16 H 1 2.156 -1.784 -0.228 1.00 0.00 HETATM 17 H 1 -0.774 1.222 1.738 1.00 0.00 HETATM 18 H 1 -2.112 -2.110 0.766 1.00 0.00 HETATM 19 H 1 -2.545 -0.402 0.425 1.00 0.00 HETATM 20 H 1 -2.081 -0.175 2.830 1.00 0.00 CONECT 1 2 5 9 10 CONECT 2 1 3 8 CONECT 3 2 4 7 CONECT 4 3 5 6 6 CONECT 5 1 4 CONECT 6 4 4 CONECT 7 3 15 CONECT 8 2 16 CONECT 9 1 CONECT 10 1 11 12 13 CONECT 11 10 CONECT 12 10 17 CONECT 13 10 14 18 19 CONECT 14 13 20 CONECT 15 7 CONECT 16 8 CONECT 17 12 CONECT 18 13 CONECT 19 13 CONECT 20 14 MASTER 0 0 0 0 0 0 0 0 20 0 20 0 END xscreensaver-5.36/hacks/images/molecules/vx.pdb000644 000767 000024 00000010030 07253546325 021615 0ustar00jwzstaff000000 000000 HEADER VX: a chemical warfare agent, cholinesterase inhibitor COMPND VX AUTHOR Created by Dave Woodcock at Okanagan University College AUTHOR email:woodcock@okanagan.bc.ca AUTHOR Date revised: Fri Sep 1 09:41:05 2000 GENERATED BY BABEL 1.6 HETATM 1 C 1 0.000 0.000 0.000 1.00 0.00 HETATM 2 C 1 1.541 0.000 0.000 1.00 0.00 HETATM 3 O 1 2.000 1.333 0.000 1.00 0.00 HETATM 4 P 1 3.580 1.768 -0.723 1.00 0.00 HETATM 5 O 1 3.908 3.507 -0.453 1.00 0.00 HETATM 6 C 1 3.536 1.434 -2.522 1.00 0.00 HETATM 7 S 1 5.089 0.633 0.149 1.00 0.00 HETATM 8 C 1 6.652 1.113 -0.581 1.00 0.00 HETATM 9 C 1 7.173 2.394 0.105 1.00 0.00 HETATM 10 N 1 8.475 2.827 -0.436 1.00 0.00 HETATM 11 C 1 9.247 3.677 0.492 1.00 0.00 HETATM 12 C 1 9.948 2.776 1.531 1.00 0.00 HETATM 13 C 1 8.388 4.729 1.230 1.00 0.00 HETATM 14 C 1 8.465 3.210 -1.863 1.00 0.00 HETATM 15 C 1 9.881 3.493 -2.414 1.00 0.00 HETATM 16 C 1 7.562 4.422 -2.181 1.00 0.00 HETATM 17 H 1 -0.362 0.520 0.887 1.00 0.00 HETATM 18 H 1 -0.367 -1.026 0.006 1.00 0.00 HETATM 19 H 1 -0.363 0.510 -0.892 1.00 0.00 HETATM 20 H 1 1.902 -0.524 -0.885 1.00 0.00 HETATM 21 H 1 1.904 -0.507 0.894 1.00 0.00 HETATM 22 H 1 2.728 2.007 -2.976 1.00 0.00 HETATM 23 H 1 3.367 0.370 -2.691 1.00 0.00 HETATM 24 H 1 4.485 1.727 -2.970 1.00 0.00 HETATM 25 H 1 6.489 1.278 -1.644 1.00 0.00 HETATM 26 H 1 7.377 0.311 -0.444 1.00 0.00 HETATM 27 H 1 7.282 2.161 1.162 1.00 0.00 HETATM 28 H 1 6.438 3.191 0.006 1.00 0.00 HETATM 29 H 1 10.030 4.205 -0.044 1.00 0.00 HETATM 30 H 1 10.539 2.021 1.012 1.00 0.00 HETATM 31 H 1 9.216 2.282 2.169 1.00 0.00 HETATM 32 H 1 10.608 3.383 2.151 1.00 0.00 HETATM 33 H 1 9.041 5.368 1.825 1.00 0.00 HETATM 34 H 1 7.675 4.243 1.895 1.00 0.00 HETATM 35 H 1 7.847 5.345 0.515 1.00 0.00 HETATM 36 H 1 8.094 2.362 -2.434 1.00 0.00 HETATM 37 H 1 10.574 2.735 -2.048 1.00 0.00 HETATM 38 H 1 10.223 4.483 -2.116 1.00 0.00 HETATM 39 H 1 9.853 3.454 -3.503 1.00 0.00 HETATM 40 H 1 7.928 5.308 -1.665 1.00 0.00 HETATM 41 H 1 6.533 4.222 -1.886 1.00 0.00 HETATM 42 H 1 7.584 4.609 -3.255 1.00 0.00 CONECT 1 2 17 18 19 CONECT 2 1 3 20 21 CONECT 3 2 4 CONECT 4 3 5 6 7 CONECT 4 5 CONECT 5 4 CONECT 6 4 22 23 24 CONECT 7 4 8 CONECT 8 7 9 25 26 CONECT 9 8 10 27 28 CONECT 10 9 11 14 CONECT 11 10 12 13 29 CONECT 12 11 30 31 32 CONECT 13 11 33 34 35 CONECT 14 10 15 16 36 CONECT 15 14 37 38 39 CONECT 16 14 40 41 42 CONECT 17 1 CONECT 18 1 CONECT 19 1 CONECT 20 2 CONECT 21 2 CONECT 22 6 CONECT 23 6 CONECT 24 6 CONECT 25 8 CONECT 26 8 CONECT 27 9 CONECT 28 9 CONECT 29 11 CONECT 30 12 CONECT 31 12 CONECT 32 12 CONECT 33 13 CONECT 34 13 CONECT 35 13 CONECT 36 14 CONECT 37 15 CONECT 38 15 CONECT 39 15 CONECT 40 16 CONECT 41 16 CONECT 42 16 MASTER 0 0 0 0 0 0 0 0 42 0 42 0 END xscreensaver-5.36/hacks/images/pacman/eyes-d.xpm000644 000767 000024 00000010541 10210157757 021655 0ustar00jwzstaff000000 000000 /* XPM */ static char * eyes_d_xpm[] = { "64 64 3 1", " c None", "+ c #DEDEDE", "# c #2121DE", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " +++++++++ +++++++++ ", " +++++++++ +++++++++ ", " +++++++++ +++++++++ ", " +++++++++ +++++++++ ", " +++++++++ +++++++++ ", " ++++++++++++++++++ ++++++++++++++++++ ", " ++++++++++++++++++ ++++++++++++++++++ ", " ++++++++++++++++++ ++++++++++++++++++ ", " ++++++++++++++++++ ++++++++++++++++++ ", " ++++++++++++++++++ ++++++++++++++++++ ", " ++++++++++++++++++ ++++++++++++++++++ ", " ++++++++++++++++++ ++++++++++++++++++ ", " ++++++++++++++++++ ++++++++++++++++++ ", " ++++++++++++++++++ ++++++++++++++++++ ", " +++++#########++++ ++++#########+++++ ", " +++++#########++++ ++++#########+++++ ", " +++++#########++++ ++++#########+++++ ", " +++++#########++++ ++++#########+++++ ", " +++++#########++++ ++++#########+++++ ", " ######### ######### ", " ######### ######### ", " ######### ######### ", " ######### ######### ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " "}; xscreensaver-5.36/hacks/images/pacman/eyes-l.xpm000644 000767 000024 00000010541 10210157757 021665 0ustar00jwzstaff000000 000000 /* XPM */ static char * eyes_l_xpm[] = { "64 64 3 1", " c None", "@ c #DEDEDE", "# c #2121DE", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " @@@@@@@@@ @@@@@@@@@ ", " @@@@@@@@@ @@@@@@@@@ ", " @@@@@@@@@ @@@@@@@@@ ", " @@@@@@@@@ @@@@@@@@@ ", " @@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@ ", " @@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@ ", " @@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@ ", " @@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@ ", " @@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@ ", " #########@@@@@@@@@ #########@@@@@@@@@ ", " #########@@@@@@@@@ #########@@@@@@@@@ ", " #########@@@@@@@@@ #########@@@@@@@@@ ", " #########@@@@@@@@@ #########@@@@@@@@@ ", " #########@@@@@@@@@ #########@@@@@@@@@ ", " #########@@@@@@@@@ #########@@@@@@@@@ ", " #########@@@@@@@@@ #########@@@@@@@@@ ", " #########@@@@@@@@@ #########@@@@@@@@@ ", " #########@@@@@@@@@ #########@@@@@@@@@ ", " @@@@@@@@@ @@@@@@@@@ ", " @@@@@@@@@ @@@@@@@@@ ", " @@@@@@@@@ @@@@@@@@@ ", " @@@@@@@@@ @@@@@@@@@ ", " @@@@@@@@@ @@@@@@@@@ ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " "}; xscreensaver-5.36/hacks/images/pacman/eyes-r.xpm000644 000767 000024 00000010541 10210157757 021673 0ustar00jwzstaff000000 000000 /* XPM */ static char * eyes_r_xpm[] = { "64 64 3 1", " c None", "@ c #DEDEDE", "# c #2121DE", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " @@@@@@@@@ @@@@@@@@@ ", " @@@@@@@@@ @@@@@@@@@ ", " @@@@@@@@@ @@@@@@@@@ ", " @@@@@@@@@ @@@@@@@@@ ", " @@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@ ", " @@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@ ", " @@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@ ", " @@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@ ", " @@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@ ", " @@@@@@@@@######### @@@@@@@@@######### ", " @@@@@@@@@######### @@@@@@@@@######### ", " @@@@@@@@@######### @@@@@@@@@######### ", " @@@@@@@@@######### @@@@@@@@@######### ", " @@@@@@@@@######### @@@@@@@@@######### ", " @@@@@@@@@######### @@@@@@@@@######### ", " @@@@@@@@@######### @@@@@@@@@######### ", " @@@@@@@@@######### @@@@@@@@@######### ", " @@@@@@@@@######### @@@@@@@@@######### ", " @@@@@@@@@ @@@@@@@@@ ", " @@@@@@@@@ @@@@@@@@@ ", " @@@@@@@@@ @@@@@@@@@ ", " @@@@@@@@@ @@@@@@@@@ ", " @@@@@@@@@ @@@@@@@@@ ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " "}; xscreensaver-5.36/hacks/images/pacman/eyes-u.xpm000644 000767 000024 00000010541 10210157757 021676 0ustar00jwzstaff000000 000000 /* XPM */ static char * eyes_u_xpm[] = { "64 64 3 1", " c None", "@ c #DEDEDE", "# c #2121DE", " ", " ", " ", " ", " ", " ######### ######### ", " ######### ######### ", " ######### ######### ", " ######### ######### ", " @@@@@#########@@@@ @@@@#########@@@@@ ", " @@@@@#########@@@@ @@@@#########@@@@@ ", " @@@@@#########@@@@ @@@@#########@@@@@ ", " @@@@@#########@@@@ @@@@#########@@@@@ ", " @@@@@#########@@@@ @@@@#########@@@@@ ", " @@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@ ", " @@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@ ", " @@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@ ", " @@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@ ", " @@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@ ", " @@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@ ", " @@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@ ", " @@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@ ", " @@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@ ", " @@@@@@@@@ @@@@@@@@@ ", " @@@@@@@@@ @@@@@@@@@ ", " @@@@@@@@@ @@@@@@@@@ ", " @@@@@@@@@ @@@@@@@@@ ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " "}; xscreensaver-5.36/hacks/images/pacman/ghost-d1.xpm000644 000767 000024 00000010601 10107246354 022107 0ustar00jwzstaff000000 000000 /* XPM */ static char * ghost_d1_xpm[] = { "64 64 5 1", " c None", ". c #FF0000", "+ c #DEDEDE", "# c #2121DE", "@ c #000000", " .................. ", " .................. ", " .................. ", " .................. ", " .................. ", " .................................... ", " .................................... ", " .................................... ", " .................................... ", " .............................................. ", " .............................................. ", " .............................................. ", " .............................................. ", " .............................................. ", " ...................................................... ", " ...................................................... ", " ...................................................... ", " ...................................................... ", " .........+++++++++..................+++++++++......... ", " .........+++++++++..................+++++++++......... ", " .........+++++++++..................+++++++++......... ", " .........+++++++++..................+++++++++......... ", " .........+++++++++..................+++++++++......... ", " ....++++++++++++++++++..........++++++++++++++++++.... ", " ....++++++++++++++++++..........++++++++++++++++++.... ", " ....++++++++++++++++++..........++++++++++++++++++.... ", " ....++++++++++++++++++..........++++++++++++++++++.... ", ".........++++++++++++++++++..........++++++++++++++++++.........", ".........++++++++++++++++++..........++++++++++++++++++.........", ".........++++++++++++++++++..........++++++++++++++++++.........", ".........++++++++++++++++++..........++++++++++++++++++.........", ".........++++++++++++++++++..........++++++++++++++++++.........", ".........+++++#########++++..........++++#########+++++.........", ".........+++++#########++++..........++++#########+++++.........", ".........+++++#########++++..........++++#########+++++.........", ".........+++++#########++++..........++++#########+++++.........", ".........+++++#########++++..........++++#########+++++.........", "..............#########..................#########..............", "..............#########..................#########..............", "..............#########..................#########..............", "..............#########..................#########..............", "................................................................", "................................................................", "................................................................", "................................................................", "................................................................", "................................................................", "................................................................", "................................................................", "................................................................", "................................................................", "................................................................", "................................................................", "................................................................", "................................................................", "..................@@@@@..................@@@@@..................", "..................@@@@@..................@@@@@..................", "..................@@@@@..................@@@@@..................", "..................@@@@@..................@@@@@..................", "@@@@@.........@@@@@@@@@@@@@..........@@@@@@@@@@@@@.........@@@@@", "@@@@@.........@@@@@@@@@@@@@..........@@@@@@@@@@@@@.........@@@@@", "@@@@@.........@@@@@@@@@@@@@..........@@@@@@@@@@@@@.........@@@@@", "@@@@@.........@@@@@@@@@@@@@..........@@@@@@@@@@@@@.........@@@@@", "@@@@@.........@@@@@@@@@@@@@..........@@@@@@@@@@@@@.........@@@@@"}; xscreensaver-5.36/hacks/images/pacman/ghost-d2.xpm000644 000767 000024 00000010601 10107246354 022110 0ustar00jwzstaff000000 000000 /* XPM */ static char * ghost_d2_xpm[] = { "64 64 5 1", " c None", ". c #FF0000", "+ c #DEDEDE", "# c #2121DE", "@ c #000000", " .................. ", " .................. ", " .................. ", " .................. ", " .................. ", " .................................... ", " .................................... ", " .................................... ", " .................................... ", " .............................................. ", " .............................................. ", " .............................................. ", " .............................................. ", " .............................................. ", " ...................................................... ", " ...................................................... ", " ...................................................... ", " ...................................................... ", " .........+++++++++..................+++++++++......... ", " .........+++++++++..................+++++++++......... ", " .........+++++++++..................+++++++++......... ", " .........+++++++++..................+++++++++......... ", " .........+++++++++..................+++++++++......... ", " ....++++++++++++++++++..........++++++++++++++++++.... ", " ....++++++++++++++++++..........++++++++++++++++++.... ", " ....++++++++++++++++++..........++++++++++++++++++.... ", " ....++++++++++++++++++..........++++++++++++++++++.... ", ".........++++++++++++++++++..........++++++++++++++++++.........", ".........++++++++++++++++++..........++++++++++++++++++.........", ".........++++++++++++++++++..........++++++++++++++++++.........", ".........++++++++++++++++++..........++++++++++++++++++.........", ".........++++++++++++++++++..........++++++++++++++++++.........", ".........+++++#########++++..........++++#########+++++.........", ".........+++++#########++++..........++++#########+++++.........", ".........+++++#########++++..........++++#########+++++.........", ".........+++++#########++++..........++++#########+++++.........", ".........+++++#########++++..........++++#########+++++.........", "..............#########..................#########..............", "..............#########..................#########..............", "..............#########..................#########..............", "..............#########..................#########..............", "................................................................", "................................................................", "................................................................", "................................................................", "................................................................", "................................................................", "................................................................", "................................................................", "................................................................", "................................................................", "................................................................", "................................................................", "................................................................", "................................................................", ".........@@@@@.............@@@@@@@@@@.............@@@@@.........", ".........@@@@@.............@@@@@@@@@@.............@@@@@.........", ".........@@@@@.............@@@@@@@@@@.............@@@@@.........", ".........@@@@@.............@@@@@@@@@@.............@@@@@.........", ".....@@@@@@@@@@@@@.........@@@@@@@@@@.........@@@@@@@@@@@@@.....", ".....@@@@@@@@@@@@@.........@@@@@@@@@@.........@@@@@@@@@@@@@.....", ".....@@@@@@@@@@@@@.........@@@@@@@@@@.........@@@@@@@@@@@@@.....", ".....@@@@@@@@@@@@@.........@@@@@@@@@@.........@@@@@@@@@@@@@.....", ".....@@@@@@@@@@@@@.........@@@@@@@@@@.........@@@@@@@@@@@@@....."}; xscreensaver-5.36/hacks/images/pacman/ghost-l1.xpm000644 000767 000024 00000010601 10107246354 022117 0ustar00jwzstaff000000 000000 /* XPM */ static char * ghost_l1_xpm[] = { "64 64 5 1", " c None", ". c #FF0000", "@ c #DEDEDE", "# c #2121DE", "+ c #000000", " .................. ", " .................. ", " .................. ", " .................. ", " .................. ", " .................................... ", " .................................... ", " .................................... ", " .................................... ", " .............................................. ", " .............................................. ", " .............................................. ", " .............................................. ", " .............................................. ", " ....@@@@@@@@@...................@@@@@@@@@............. ", " ....@@@@@@@@@...................@@@@@@@@@............. ", " ....@@@@@@@@@...................@@@@@@@@@............. ", " ....@@@@@@@@@...................@@@@@@@@@............. ", " @@@@@@@@@@@@@@@@@@.........@@@@@@@@@@@@@@@@@@......... ", " @@@@@@@@@@@@@@@@@@.........@@@@@@@@@@@@@@@@@@......... ", " @@@@@@@@@@@@@@@@@@.........@@@@@@@@@@@@@@@@@@......... ", " @@@@@@@@@@@@@@@@@@.........@@@@@@@@@@@@@@@@@@......... ", " @@@@@@@@@@@@@@@@@@.........@@@@@@@@@@@@@@@@@@......... ", " #########@@@@@@@@@.........#########@@@@@@@@@......... ", " #########@@@@@@@@@.........#########@@@@@@@@@......... ", " #########@@@@@@@@@.........#########@@@@@@@@@......... ", " #########@@@@@@@@@.........#########@@@@@@@@@......... ", ".....#########@@@@@@@@@.........#########@@@@@@@@@..............", ".....#########@@@@@@@@@.........#########@@@@@@@@@..............", ".....#########@@@@@@@@@.........#########@@@@@@@@@..............", ".....#########@@@@@@@@@.........#########@@@@@@@@@..............", ".....#########@@@@@@@@@.........#########@@@@@@@@@..............", ".........@@@@@@@@@...................@@@@@@@@@..................", ".........@@@@@@@@@...................@@@@@@@@@..................", ".........@@@@@@@@@...................@@@@@@@@@..................", ".........@@@@@@@@@...................@@@@@@@@@..................", ".........@@@@@@@@@...................@@@@@@@@@..................", "................................................................", "................................................................", "................................................................", "................................................................", "................................................................", "................................................................", "................................................................", "................................................................", "................................................................", "................................................................", "................................................................", "................................................................", "................................................................", "................................................................", "................................................................", "................................................................", "................................................................", "................................................................", "..................+++++..................+++++..................", "..................+++++..................+++++..................", "..................+++++..................+++++..................", "..................+++++..................+++++..................", "+++++.........+++++++++++++..........+++++++++++++.........+++++", "+++++.........+++++++++++++..........+++++++++++++.........+++++", "+++++.........+++++++++++++..........+++++++++++++.........+++++", "+++++.........+++++++++++++..........+++++++++++++.........+++++", "+++++.........+++++++++++++..........+++++++++++++.........+++++"}; xscreensaver-5.36/hacks/images/pacman/ghost-l2.xpm000644 000767 000024 00000010602 10107246354 022121 0ustar00jwzstaff000000 000000 /* XPM */ static char * ghost_l2_xpm[] = { "64 64 5 1", " c None", ". c #FF0000", "@ c #DEDEDE", "# c #2121DE", "+ c #000000", " .................. ", " .................. ", " .................. ", " .................. ", " .................. ", " .................................... ", " .................................... ", " .................................... ", " .................................... ", " .............................................. ", " .............................................. ", " .............................................. ", " .............................................. ", " .............................................. ", " ....@@@@@@@@@...................@@@@@@@@@............. ", " ....@@@@@@@@@...................@@@@@@@@@............. ", " ....@@@@@@@@@...................@@@@@@@@@............. ", " ....@@@@@@@@@...................@@@@@@@@@............. ", " @@@@@@@@@@@@@@@@@@.........@@@@@@@@@@@@@@@@@@......... ", " @@@@@@@@@@@@@@@@@@.........@@@@@@@@@@@@@@@@@@......... ", " @@@@@@@@@@@@@@@@@@.........@@@@@@@@@@@@@@@@@@......... ", " @@@@@@@@@@@@@@@@@@.........@@@@@@@@@@@@@@@@@@......... ", " @@@@@@@@@@@@@@@@@@.........@@@@@@@@@@@@@@@@@@......... ", " #########@@@@@@@@@.........#########@@@@@@@@@......... ", " #########@@@@@@@@@.........#########@@@@@@@@@......... ", " #########@@@@@@@@@.........#########@@@@@@@@@......... ", " #########@@@@@@@@@.........#########@@@@@@@@@......... ", ".....#########@@@@@@@@@.........#########@@@@@@@@@..............", ".....#########@@@@@@@@@.........#########@@@@@@@@@..............", ".....#########@@@@@@@@@.........#########@@@@@@@@@..............", ".....#########@@@@@@@@@.........#########@@@@@@@@@..............", ".....#########@@@@@@@@@.........#########@@@@@@@@@..............", ".........@@@@@@@@@...................@@@@@@@@@..................", ".........@@@@@@@@@...................@@@@@@@@@..................", ".........@@@@@@@@@...................@@@@@@@@@..................", ".........@@@@@@@@@...................@@@@@@@@@..................", ".........@@@@@@@@@...................@@@@@@@@@..................", "................................................................", "................................................................", "................................................................", "................................................................", "................................................................", "................................................................", "................................................................", "................................................................", "................................................................", "................................................................", "................................................................", "................................................................", "................................................................", "................................................................", "................................................................", "................................................................", "................................................................", "................................................................", ".........+++++.............++++++++++.............+++++.........", ".........+++++.............++++++++++.............+++++.........", ".........+++++.............++++++++++.............+++++.........", ".........+++++.............++++++++++.............+++++.........", ".....+++++++++++++.........++++++++++.........+++++++++++++.....", ".....+++++++++++++.........++++++++++.........+++++++++++++.....", ".....+++++++++++++.........++++++++++.........+++++++++++++.....", ".....+++++++++++++.........++++++++++.........+++++++++++++.....", ".....+++++++++++++.........++++++++++.........+++++++++++++....."}; xscreensaver-5.36/hacks/images/pacman/ghost-mask.xpm000644 000767 000024 00000010526 10107246354 022544 0ustar00jwzstaff000000 000000 /* XPM */ static char * ghost_mask_xpm[] = { "64 64 2 1", " c None", ". c #000000", " .................. ", " .................. ", " .................. ", " .................. ", " .................. ", " .................................... ", " .................................... ", " .................................... ", " .................................... ", " .............................................. ", " .............................................. ", " .............................................. ", " .............................................. ", " .............................................. ", " ...................................................... ", " ...................................................... ", " ...................................................... ", " ...................................................... ", " ...................................................... ", " ...................................................... ", " ...................................................... ", " ...................................................... ", " ...................................................... ", " ...................................................... ", " ...................................................... ", " ...................................................... ", " ...................................................... ", "................................................................", "................................................................", "................................................................", "................................................................", "................................................................", "................................................................", "................................................................", "................................................................", "................................................................", "................................................................", "................................................................", "................................................................", "................................................................", "................................................................", "................................................................", "................................................................", "................................................................", "................................................................", "................................................................", "................................................................", "................................................................", "................................................................", "................................................................", "................................................................", "................................................................", "................................................................", "................................................................", "................................................................", "................................................................", "................................................................", "................................................................", "................................................................", "................................................................", "................................................................", "................................................................", "................................................................", "................................................................"}; xscreensaver-5.36/hacks/images/pacman/ghost-r1.xpm000644 000767 000024 00000010601 10107246354 022125 0ustar00jwzstaff000000 000000 /* XPM */ static char * ghost_r1_xpm[] = { "64 64 5 1", " c None", ". c #FF0000", "@ c #DEDEDE", "# c #2121DE", "+ c #000000", " .................. ", " .................. ", " .................. ", " .................. ", " .................. ", " .................................... ", " .................................... ", " .................................... ", " .................................... ", " .............................................. ", " .............................................. ", " .............................................. ", " .............................................. ", " .............................................. ", " .............@@@@@@@@@...................@@@@@@@@@.... ", " .............@@@@@@@@@...................@@@@@@@@@.... ", " .............@@@@@@@@@...................@@@@@@@@@.... ", " .............@@@@@@@@@...................@@@@@@@@@.... ", " .........@@@@@@@@@@@@@@@@@@.........@@@@@@@@@@@@@@@@@@ ", " .........@@@@@@@@@@@@@@@@@@.........@@@@@@@@@@@@@@@@@@ ", " .........@@@@@@@@@@@@@@@@@@.........@@@@@@@@@@@@@@@@@@ ", " .........@@@@@@@@@@@@@@@@@@.........@@@@@@@@@@@@@@@@@@ ", " .........@@@@@@@@@@@@@@@@@@.........@@@@@@@@@@@@@@@@@@ ", " .........@@@@@@@@@#########.........@@@@@@@@@######### ", " .........@@@@@@@@@#########.........@@@@@@@@@######### ", " .........@@@@@@@@@#########.........@@@@@@@@@######### ", " .........@@@@@@@@@#########.........@@@@@@@@@######### ", "..............@@@@@@@@@#########.........@@@@@@@@@#########.....", "..............@@@@@@@@@#########.........@@@@@@@@@#########.....", "..............@@@@@@@@@#########.........@@@@@@@@@#########.....", "..............@@@@@@@@@#########.........@@@@@@@@@#########.....", "..............@@@@@@@@@#########.........@@@@@@@@@#########.....", "..................@@@@@@@@@...................@@@@@@@@@.........", "..................@@@@@@@@@...................@@@@@@@@@.........", "..................@@@@@@@@@...................@@@@@@@@@.........", "..................@@@@@@@@@...................@@@@@@@@@.........", "..................@@@@@@@@@...................@@@@@@@@@.........", "................................................................", "................................................................", "................................................................", "................................................................", "................................................................", "................................................................", "................................................................", "................................................................", "................................................................", "................................................................", "................................................................", "................................................................", "................................................................", "................................................................", "................................................................", "................................................................", "................................................................", "................................................................", "..................+++++..................+++++..................", "..................+++++..................+++++..................", "..................+++++..................+++++..................", "..................+++++..................+++++..................", "+++++.........+++++++++++++..........+++++++++++++.........+++++", "+++++.........+++++++++++++..........+++++++++++++.........+++++", "+++++.........+++++++++++++..........+++++++++++++.........+++++", "+++++.........+++++++++++++..........+++++++++++++.........+++++", "+++++.........+++++++++++++..........+++++++++++++.........+++++"}; xscreensaver-5.36/hacks/images/pacman/ghost-r2.xpm000644 000767 000024 00000010601 10107246354 022126 0ustar00jwzstaff000000 000000 /* XPM */ static char * ghost_r2_xpm[] = { "64 64 5 1", " c None", ". c #FF0000", "@ c #DEDEDE", "# c #2121DE", "+ c #000000", " .................. ", " .................. ", " .................. ", " .................. ", " .................. ", " .................................... ", " .................................... ", " .................................... ", " .................................... ", " .............................................. ", " .............................................. ", " .............................................. ", " .............................................. ", " .............................................. ", " .............@@@@@@@@@...................@@@@@@@@@.... ", " .............@@@@@@@@@...................@@@@@@@@@.... ", " .............@@@@@@@@@...................@@@@@@@@@.... ", " .............@@@@@@@@@...................@@@@@@@@@.... ", " .........@@@@@@@@@@@@@@@@@@.........@@@@@@@@@@@@@@@@@@ ", " .........@@@@@@@@@@@@@@@@@@.........@@@@@@@@@@@@@@@@@@ ", " .........@@@@@@@@@@@@@@@@@@.........@@@@@@@@@@@@@@@@@@ ", " .........@@@@@@@@@@@@@@@@@@.........@@@@@@@@@@@@@@@@@@ ", " .........@@@@@@@@@@@@@@@@@@.........@@@@@@@@@@@@@@@@@@ ", " .........@@@@@@@@@#########.........@@@@@@@@@######### ", " .........@@@@@@@@@#########.........@@@@@@@@@######### ", " .........@@@@@@@@@#########.........@@@@@@@@@######### ", " .........@@@@@@@@@#########.........@@@@@@@@@######### ", "..............@@@@@@@@@#########.........@@@@@@@@@#########.....", "..............@@@@@@@@@#########.........@@@@@@@@@#########.....", "..............@@@@@@@@@#########.........@@@@@@@@@#########.....", "..............@@@@@@@@@#########.........@@@@@@@@@#########.....", "..............@@@@@@@@@#########.........@@@@@@@@@#########.....", "..................@@@@@@@@@...................@@@@@@@@@.........", "..................@@@@@@@@@...................@@@@@@@@@.........", "..................@@@@@@@@@...................@@@@@@@@@.........", "..................@@@@@@@@@...................@@@@@@@@@.........", "..................@@@@@@@@@...................@@@@@@@@@.........", "................................................................", "................................................................", "................................................................", "................................................................", "................................................................", "................................................................", "................................................................", "................................................................", "................................................................", "................................................................", "................................................................", "................................................................", "................................................................", "................................................................", "................................................................", "................................................................", "................................................................", "................................................................", ".........+++++.............++++++++++.............+++++.........", ".........+++++.............++++++++++.............+++++.........", ".........+++++.............++++++++++.............+++++.........", ".........+++++.............++++++++++.............+++++.........", ".....+++++++++++++.........++++++++++.........+++++++++++++.....", ".....+++++++++++++.........++++++++++.........+++++++++++++.....", ".....+++++++++++++.........++++++++++.........+++++++++++++.....", ".....+++++++++++++.........++++++++++.........+++++++++++++.....", ".....+++++++++++++.........++++++++++.........+++++++++++++....."}; xscreensaver-5.36/hacks/images/pacman/ghost-s1.xpm000644 000767 000024 00000010563 10210157757 022140 0ustar00jwzstaff000000 000000 /* XPM */ static char * ghost_s1_xpm[] = { "64 64 4 1", " c None", ". c #2121DE", "# c #FFB897", "@ c #000000", " .................. ", " .................. ", " .................. ", " .................. ", " .................. ", " .................................... ", " .................................... ", " .................................... ", " .................................... ", " .............................................. ", " .............................................. ", " .............................................. ", " .............................................. ", " .............................................. ", " ...................................................... ", " ...................................................... ", " ...................................................... ", " ...................................................... ", " ...................................................... ", " ...................................................... ", " ...................................................... ", " ...................................................... ", " ...................................................... ", " .............#########..........#########............. ", " .............#########..........#########............. ", " .............#########..........#########............. ", " .............#########..........#########............. ", "..................#########..........#########..................", "..................#########..........#########..................", "..................#########..........#########..................", "..................#########..........#########..................", "..................#########..........#########..................", "................................................................", "................................................................", "................................................................", "................................................................", "................................................................", "................................................................", "................................................................", "................................................................", "................................................................", ".........#########.........##########.........#########.........", ".........#########.........##########.........#########.........", ".........#########.........##########.........#########.........", ".........#########.........##########.........#########.........", ".........#########.........##########.........#########.........", ".....####.........#########..........#########.........####.....", ".....####.........#########..........#########.........####.....", ".....####.........#########..........#########.........####.....", ".....####.........#########..........#########.........####.....", "................................................................", "................................................................", "................................................................", "................................................................", "................................................................", "..................@@@@@..................@@@@@..................", "..................@@@@@..................@@@@@..................", "..................@@@@@..................@@@@@..................", "..................@@@@@..................@@@@@..................", "@@@@@.........@@@@@@@@@@@@@..........@@@@@@@@@@@@@.........@@@@@", "@@@@@.........@@@@@@@@@@@@@..........@@@@@@@@@@@@@.........@@@@@", "@@@@@.........@@@@@@@@@@@@@..........@@@@@@@@@@@@@.........@@@@@", "@@@@@.........@@@@@@@@@@@@@..........@@@@@@@@@@@@@.........@@@@@", "@@@@@.........@@@@@@@@@@@@@..........@@@@@@@@@@@@@.........@@@@@"}; xscreensaver-5.36/hacks/images/pacman/ghost-s2.xpm000644 000767 000024 00000010563 10210157757 022141 0ustar00jwzstaff000000 000000 /* XPM */ static char * ghost_s2_xpm[] = { "64 64 4 1", " c None", "# c #FFB897", ". c #2121DE", "@ c #000000", " .................. ", " .................. ", " .................. ", " .................. ", " .................. ", " .................................... ", " .................................... ", " .................................... ", " .................................... ", " .............................................. ", " .............................................. ", " .............................................. ", " .............................................. ", " .............................................. ", " ...................................................... ", " ...................................................... ", " ...................................................... ", " ...................................................... ", " ...................................................... ", " ...................................................... ", " ...................................................... ", " ...................................................... ", " ...................................................... ", " .............#########..........#########............. ", " .............#########..........#########............. ", " .............#########..........#########............. ", " .............#########..........#########............. ", "..................#########..........#########..................", "..................#########..........#########..................", "..................#########..........#########..................", "..................#########..........#########..................", "..................#########..........#########..................", "................................................................", "................................................................", "................................................................", "................................................................", "................................................................", "................................................................", "................................................................", "................................................................", "................................................................", ".........#########.........##########.........#########.........", ".........#########.........##########.........#########.........", ".........#########.........##########.........#########.........", ".........#########.........##########.........#########.........", ".........#########.........##########.........#########.........", ".....####.........#########..........#########.........####.....", ".....####.........#########..........#########.........####.....", ".....####.........#########..........#########.........####.....", ".....####.........#########..........#########.........####.....", "................................................................", "................................................................", "................................................................", "................................................................", "................................................................", ".........@@@@@.............@@@@@@@@@@.............@@@@@.........", ".........@@@@@.............@@@@@@@@@@.............@@@@@.........", ".........@@@@@.............@@@@@@@@@@.............@@@@@.........", ".........@@@@@.............@@@@@@@@@@.............@@@@@.........", ".....@@@@@@@@@@@@@.........@@@@@@@@@@.........@@@@@@@@@@@@@.....", ".....@@@@@@@@@@@@@.........@@@@@@@@@@.........@@@@@@@@@@@@@.....", ".....@@@@@@@@@@@@@.........@@@@@@@@@@.........@@@@@@@@@@@@@.....", ".....@@@@@@@@@@@@@.........@@@@@@@@@@.........@@@@@@@@@@@@@.....", ".....@@@@@@@@@@@@@.........@@@@@@@@@@.........@@@@@@@@@@@@@....."}; xscreensaver-5.36/hacks/images/pacman/ghost-sf1.xpm000644 000767 000024 00000010564 10210157757 022307 0ustar00jwzstaff000000 000000 /* XPM */ static char * ghost_sf1_xpm[] = { "64 64 4 1", " c None", ". c #DEDEDE", "# c #FF0000", "@ c #000000", " .................. ", " .................. ", " .................. ", " .................. ", " .................. ", " .................................... ", " .................................... ", " .................................... ", " .................................... ", " .............................................. ", " .............................................. ", " .............................................. ", " .............................................. ", " .............................................. ", " ...................................................... ", " ...................................................... ", " ...................................................... ", " ...................................................... ", " ...................................................... ", " ...................................................... ", " ...................................................... ", " ...................................................... ", " ...................................................... ", " .............#########..........#########............. ", " .............#########..........#########............. ", " .............#########..........#########............. ", " .............#########..........#########............. ", "..................#########..........#########..................", "..................#########..........#########..................", "..................#########..........#########..................", "..................#########..........#########..................", "..................#########..........#########..................", "................................................................", "................................................................", "................................................................", "................................................................", "................................................................", "................................................................", "................................................................", "................................................................", "................................................................", ".........#########.........##########.........#########.........", ".........#########.........##########.........#########.........", ".........#########.........##########.........#########.........", ".........#########.........##########.........#########.........", ".........#########.........##########.........#########.........", ".....####.........#########..........#########.........####.....", ".....####.........#########..........#########.........####.....", ".....####.........#########..........#########.........####.....", ".....####.........#########..........#########.........####.....", "................................................................", "................................................................", "................................................................", "................................................................", "................................................................", "..................@@@@@..................@@@@@..................", "..................@@@@@..................@@@@@..................", "..................@@@@@..................@@@@@..................", "..................@@@@@..................@@@@@..................", "@@@@@.........@@@@@@@@@@@@@..........@@@@@@@@@@@@@.........@@@@@", "@@@@@.........@@@@@@@@@@@@@..........@@@@@@@@@@@@@.........@@@@@", "@@@@@.........@@@@@@@@@@@@@..........@@@@@@@@@@@@@.........@@@@@", "@@@@@.........@@@@@@@@@@@@@..........@@@@@@@@@@@@@.........@@@@@", "@@@@@.........@@@@@@@@@@@@@..........@@@@@@@@@@@@@.........@@@@@"}; xscreensaver-5.36/hacks/images/pacman/ghost-sf2.xpm000644 000767 000024 00000010564 10210157757 022310 0ustar00jwzstaff000000 000000 /* XPM */ static char * ghost_sf2_xpm[] = { "64 64 4 1", " c None", ". c #DEDEDE", "# c #FF0000", "@ c #000000", " .................. ", " .................. ", " .................. ", " .................. ", " .................. ", " .................................... ", " .................................... ", " .................................... ", " .................................... ", " .............................................. ", " .............................................. ", " .............................................. ", " .............................................. ", " .............................................. ", " ...................................................... ", " ...................................................... ", " ...................................................... ", " ...................................................... ", " ...................................................... ", " ...................................................... ", " ...................................................... ", " ...................................................... ", " ...................................................... ", " .............#########..........#########............. ", " .............#########..........#########............. ", " .............#########..........#########............. ", " .............#########..........#########............. ", "..................#########..........#########..................", "..................#########..........#########..................", "..................#########..........#########..................", "..................#########..........#########..................", "..................#########..........#########..................", "................................................................", "................................................................", "................................................................", "................................................................", "................................................................", "................................................................", "................................................................", "................................................................", "................................................................", ".........#########.........##########.........#########.........", ".........#########.........##########.........#########.........", ".........#########.........##########.........#########.........", ".........#########.........##########.........#########.........", ".........#########.........##########.........#########.........", ".....####.........#########..........#########.........####.....", ".....####.........#########..........#########.........####.....", ".....####.........#########..........#########.........####.....", ".....####.........#########..........#########.........####.....", "................................................................", "................................................................", "................................................................", "................................................................", "................................................................", ".........@@@@@.............@@@@@@@@@@.............@@@@@.........", ".........@@@@@.............@@@@@@@@@@.............@@@@@.........", ".........@@@@@.............@@@@@@@@@@.............@@@@@.........", ".........@@@@@.............@@@@@@@@@@.............@@@@@.........", ".....@@@@@@@@@@@@@.........@@@@@@@@@@.........@@@@@@@@@@@@@.....", ".....@@@@@@@@@@@@@.........@@@@@@@@@@.........@@@@@@@@@@@@@.....", ".....@@@@@@@@@@@@@.........@@@@@@@@@@.........@@@@@@@@@@@@@.....", ".....@@@@@@@@@@@@@.........@@@@@@@@@@.........@@@@@@@@@@@@@.....", ".....@@@@@@@@@@@@@.........@@@@@@@@@@.........@@@@@@@@@@@@@....."}; xscreensaver-5.36/hacks/images/pacman/ghost-u1.xpm000644 000767 000024 00000010601 10107246354 022130 0ustar00jwzstaff000000 000000 /* XPM */ static char * ghost_u1_xpm[] = { "64 64 5 1", " c None", ". c #FF0000", "@ c #DEDEDE", "# c #2121DE", "+ c #000000", " .................. ", " .................. ", " .................. ", " .................. ", " .................. ", " #########..................######### ", " #########..................######### ", " #########..................######### ", " #########..................######### ", " @@@@@#########@@@@..........@@@@#########@@@@@ ", " @@@@@#########@@@@..........@@@@#########@@@@@ ", " @@@@@#########@@@@..........@@@@#########@@@@@ ", " @@@@@#########@@@@..........@@@@#########@@@@@ ", " @@@@@#########@@@@..........@@@@#########@@@@@ ", " ....@@@@@@@@@@@@@@@@@@..........@@@@@@@@@@@@@@@@@@.... ", " ....@@@@@@@@@@@@@@@@@@..........@@@@@@@@@@@@@@@@@@.... ", " ....@@@@@@@@@@@@@@@@@@..........@@@@@@@@@@@@@@@@@@.... ", " ....@@@@@@@@@@@@@@@@@@..........@@@@@@@@@@@@@@@@@@.... ", " ....@@@@@@@@@@@@@@@@@@..........@@@@@@@@@@@@@@@@@@.... ", " ....@@@@@@@@@@@@@@@@@@..........@@@@@@@@@@@@@@@@@@.... ", " ....@@@@@@@@@@@@@@@@@@..........@@@@@@@@@@@@@@@@@@.... ", " ....@@@@@@@@@@@@@@@@@@..........@@@@@@@@@@@@@@@@@@.... ", " ....@@@@@@@@@@@@@@@@@@..........@@@@@@@@@@@@@@@@@@.... ", " .........@@@@@@@@@..................@@@@@@@@@......... ", " .........@@@@@@@@@..................@@@@@@@@@......... ", " .........@@@@@@@@@..................@@@@@@@@@......... ", " .........@@@@@@@@@..................@@@@@@@@@......... ", "................................................................", "................................................................", "................................................................", "................................................................", "................................................................", "................................................................", "................................................................", "................................................................", "................................................................", "................................................................", "................................................................", "................................................................", "................................................................", "................................................................", "................................................................", "................................................................", "................................................................", "................................................................", "................................................................", "................................................................", "................................................................", "................................................................", "................................................................", "................................................................", "................................................................", "................................................................", "................................................................", "................................................................", "..................+++++..................+++++..................", "..................+++++..................+++++..................", "..................+++++..................+++++..................", "..................+++++..................+++++..................", "+++++.........+++++++++++++..........+++++++++++++.........+++++", "+++++.........+++++++++++++..........+++++++++++++.........+++++", "+++++.........+++++++++++++..........+++++++++++++.........+++++", "+++++.........+++++++++++++..........+++++++++++++.........+++++", "+++++.........+++++++++++++..........+++++++++++++.........+++++"}; xscreensaver-5.36/hacks/images/pacman/ghost-u2.xpm000644 000767 000024 00000010601 10107246354 022131 0ustar00jwzstaff000000 000000 /* XPM */ static char * ghost_u2_xpm[] = { "64 64 5 1", " c None", ". c #FF0000", "@ c #DEDEDE", "# c #2121DE", "+ c #000000", " .................. ", " .................. ", " .................. ", " .................. ", " .................. ", " #########..................######### ", " #########..................######### ", " #########..................######### ", " #########..................######### ", " @@@@@#########@@@@..........@@@@#########@@@@@ ", " @@@@@#########@@@@..........@@@@#########@@@@@ ", " @@@@@#########@@@@..........@@@@#########@@@@@ ", " @@@@@#########@@@@..........@@@@#########@@@@@ ", " @@@@@#########@@@@..........@@@@#########@@@@@ ", " ....@@@@@@@@@@@@@@@@@@..........@@@@@@@@@@@@@@@@@@.... ", " ....@@@@@@@@@@@@@@@@@@..........@@@@@@@@@@@@@@@@@@.... ", " ....@@@@@@@@@@@@@@@@@@..........@@@@@@@@@@@@@@@@@@.... ", " ....@@@@@@@@@@@@@@@@@@..........@@@@@@@@@@@@@@@@@@.... ", " ....@@@@@@@@@@@@@@@@@@..........@@@@@@@@@@@@@@@@@@.... ", " ....@@@@@@@@@@@@@@@@@@..........@@@@@@@@@@@@@@@@@@.... ", " ....@@@@@@@@@@@@@@@@@@..........@@@@@@@@@@@@@@@@@@.... ", " ....@@@@@@@@@@@@@@@@@@..........@@@@@@@@@@@@@@@@@@.... ", " ....@@@@@@@@@@@@@@@@@@..........@@@@@@@@@@@@@@@@@@.... ", " .........@@@@@@@@@..................@@@@@@@@@......... ", " .........@@@@@@@@@..................@@@@@@@@@......... ", " .........@@@@@@@@@..................@@@@@@@@@......... ", " .........@@@@@@@@@..................@@@@@@@@@......... ", "................................................................", "................................................................", "................................................................", "................................................................", "................................................................", "................................................................", "................................................................", "................................................................", "................................................................", "................................................................", "................................................................", "................................................................", "................................................................", "................................................................", "................................................................", "................................................................", "................................................................", "................................................................", "................................................................", "................................................................", "................................................................", "................................................................", "................................................................", "................................................................", "................................................................", "................................................................", "................................................................", "................................................................", ".........+++++.............++++++++++.............+++++.........", ".........+++++.............++++++++++.............+++++.........", ".........+++++.............++++++++++.............+++++.........", ".........+++++.............++++++++++.............+++++.........", ".....+++++++++++++.........++++++++++.........+++++++++++++.....", ".....+++++++++++++.........++++++++++.........+++++++++++++.....", ".....+++++++++++++.........++++++++++.........+++++++++++++.....", ".....+++++++++++++.........++++++++++.........+++++++++++++.....", ".....+++++++++++++.........++++++++++.........+++++++++++++....."}; xscreensaver-5.36/hacks/images/pacman/pacman-0.xpm000644 000767 000024 00000010524 10110315356 022052 0ustar00jwzstaff000000 000000 /* XPM */ static char * pacman_0_xpm[] = { "64 64 2 1", " c None", ". c #FFFF00", " ........................ ", " ........................ ", " ........................ ", " ........................ ", " ........................ ", " ............................................ ", " ............................................ ", " ............................................ ", " ............................................ ", " ............................................ ", " ...................................................... ", " ...................................................... ", " ...................................................... ", " ...................................................... ", " ...................................................... ", " ...................................................... ", " ...................................................... ", " ...................................................... ", " ...................................................... ", " ...................................................... ", "................................................................", "................................................................", "................................................................", "................................................................", "................................................................", "................................................................", "................................................................", "................................................................", "................................................................", "................................................................", "................................................................", "................................................................", "................................................................", "................................................................", "................................................................", "................................................................", "................................................................", "................................................................", "................................................................", "................................................................", "................................................................", "................................................................", "................................................................", "................................................................", " ...................................................... ", " ...................................................... ", " ...................................................... ", " ...................................................... ", " ...................................................... ", " ...................................................... ", " ...................................................... ", " ...................................................... ", " ...................................................... ", " ...................................................... ", " ............................................ ", " ............................................ ", " ............................................ ", " ............................................ ", " ............................................ ", " ........................ ", " ........................ ", " ........................ ", " ........................ ", " ........................ "}; xscreensaver-5.36/hacks/images/pacman/pacman-d1.xpm000644 000767 000024 00000010525 10110315356 022220 0ustar00jwzstaff000000 000000 /* XPM */ static char * pacman_d1_xpm[] = { "64 64 2 1", " c None", ". c #FFFF00", " ........................ ", " ........................ ", " ........................ ", " ........................ ", " ........................ ", " ............................................ ", " ............................................ ", " ............................................ ", " ............................................ ", " ............................................ ", " ...................................................... ", " ...................................................... ", " ...................................................... ", " ...................................................... ", " ...................................................... ", " ...................................................... ", " ...................................................... ", " ...................................................... ", " ...................................................... ", " ...................................................... ", ".............................. ..............................", ".............................. ..............................", ".............................. ..............................", ".............................. ..............................", ".............................. ..............................", ".............................. ..............................", ".............................. ..............................", ".............................. ..............................", ".............................. ..............................", ".............................. ..............................", ".............................. ..............................", ".............................. ..............................", ".............................. ..............................", ".............................. ..............................", "......................... .........................", "......................... .........................", "......................... .........................", "......................... .........................", "......................... .........................", "......................... .........................", "......................... .........................", "......................... .........................", "......................... .........................", "......................... .........................", " .................... .................... ", " .................... .................... ", " .................... .................... ", " .................... .................... ", " .................... .................... ", " ............... ............... ", " ............... ............... ", " ............... ............... ", " ............... ............... ", " ............... ............... ", " .......... .......... ", " .......... .......... ", " .......... .......... ", " .......... .......... ", " .......... .......... ", " ", " ", " ", " ", " "}; xscreensaver-5.36/hacks/images/pacman/pacman-d2.xpm000644 000767 000024 00000010525 10110315356 022221 0ustar00jwzstaff000000 000000 /* XPM */ static char * pacman_d2_xpm[] = { "64 64 2 1", " c None", "+ c #FFFF00", " ++++++++++++++++++++++++ ", " ++++++++++++++++++++++++ ", " ++++++++++++++++++++++++ ", " ++++++++++++++++++++++++ ", " ++++++++++++++++++++++++ ", " ++++++++++++++++++++++++++++++++++++++++++++ ", " ++++++++++++++++++++++++++++++++++++++++++++ ", " ++++++++++++++++++++++++++++++++++++++++++++ ", " ++++++++++++++++++++++++++++++++++++++++++++ ", " ++++++++++++++++++++++++++++++++++++++++++++ ", " ++++++++++++++++++++++++++++++++++++++++++++++++++++++ ", " ++++++++++++++++++++++++++++++++++++++++++++++++++++++ ", " ++++++++++++++++++++++++++++++++++++++++++++++++++++++ ", " ++++++++++++++++++++++++++++++++++++++++++++++++++++++ ", " ++++++++++++++++++++++++++++++++++++++++++++++++++++++ ", " ++++++++++++++++++++++++++++++++++++++++++++++++++++++ ", " ++++++++++++++++++++++++++++++++++++++++++++++++++++++ ", " ++++++++++++++++++++++++++++++++++++++++++++++++++++++ ", " ++++++++++++++++++++++++++++++++++++++++++++++++++++++ ", " ++++++++++++++++++++++++++++++++++++++++++++++++++++++ ", "++++++++++++++++++++++++++++++ ++++++++++++++++++++++++++++++", "++++++++++++++++++++++++++++++ ++++++++++++++++++++++++++++++", "++++++++++++++++++++++++++++++ ++++++++++++++++++++++++++++++", "++++++++++++++++++++++++++++++ ++++++++++++++++++++++++++++++", "++++++++++++++++++++++++++++++ ++++++++++++++++++++++++++++++", "+++++++++++++++++++++++++ +++++++++++++++++++++++++", "+++++++++++++++++++++++++ +++++++++++++++++++++++++", "+++++++++++++++++++++++++ +++++++++++++++++++++++++", "+++++++++++++++++++++++++ +++++++++++++++++++++++++", "+++++++++++++++++++++++++ +++++++++++++++++++++++++", "++++++++++++++++++++ ++++++++++++++++++++", "++++++++++++++++++++ ++++++++++++++++++++", "++++++++++++++++++++ ++++++++++++++++++++", "++++++++++++++++++++ ++++++++++++++++++++", "+++++++++++++++ +++++++++++++++", "+++++++++++++++ +++++++++++++++", "+++++++++++++++ +++++++++++++++", "+++++++++++++++ +++++++++++++++", "+++++++++++++++ +++++++++++++++", "++++++++++ ++++++++++", "++++++++++ ++++++++++", "++++++++++ ++++++++++", "++++++++++ ++++++++++", "++++++++++ ++++++++++", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " "}; xscreensaver-5.36/hacks/images/pacman/pacman-ds1.xpm000644 000767 000024 00000010531 10210157757 022412 0ustar00jwzstaff000000 000000 /* XPM */ static char * pacman_ds1_xpm[] = { "64 64 2 1", " c #FFFF00", ". c None ", "................................................................", "................................................................", "................................................................", "................................................................", "................................................................", "................................................................", "................................................................", "................................................................", "................................................................", "................................................................", "................................................................", "................................................................", "................................................................", ".... ...................................... ....", ".... ...................................... ....", ".... ...................................... ....", ".... ...................................... ....", ".... .............................. ....", ".... .............................. ....", ".... .............................. ....", ".... .............................. ....", ".... ...................... ....", ".... ...................... ....", ".... ...................... ....", ".... ...................... ....", ".... ...................... ....", ".... ............ ....", ".... ............ ....", ".... ............ ....", ".... ............ ....", ".... .... ....", ".... .... ....", ".... .... ....", ".... .... ....", "......... .........", "......... .........", "......... .........", "......... .........", "......... .........", "......... .........", "......... .........", "......... .........", "......... .........", "............. .............", "............. .............", "............. .............", "............. .............", "..................... .....................", "..................... .....................", "..................... .....................", "..................... .....................", "................................................................", "................................................................", "................................................................", "................................................................", "................................................................", "................................................................", "................................................................", "................................................................", "................................................................", "................................................................", "................................................................", "................................................................", "................................................................"}; xscreensaver-5.36/hacks/images/pacman/pacman-ds2.xpm000644 000767 000024 00000010531 10210157757 022413 0ustar00jwzstaff000000 000000 /* XPM */ static char * pacman_ds2_xpm[] = { "64 64 2 1", " c #FFFF00", ". c None ", "................................................................", "................................................................", "................................................................", "................................................................", "................................................................", "................................................................", "................................................................", "................................................................", "................................................................", "................................................................", "................................................................", "................................................................", "................................................................", "................................................................", "................................................................", "................................................................", "................................................................", "................................................................", "................................................................", "................................................................", "................................................................", "................................................................", "................................................................", "................................................................", "................................................................", "................................................................", " ...................................... ", " ...................................... ", " ...................................... ", " ...................................... ", " ............ ", " ............ ", " ............ ", " ............ ", " ", " ", " ", " ", ".... ....", ".... ....", ".... ....", ".... ....", ".... ....", "......... .........", "......... .........", "......... .........", "......... .........", "................. .... .................", "................. .... .................", "................. .... .................", "................. .... .................", "................................................................", "................................................................", "................................................................", "................................................................", "................................................................", "................................................................", "................................................................", "................................................................", "................................................................", "................................................................", "................................................................", "................................................................", "................................................................"}; xscreensaver-5.36/hacks/images/pacman/pacman-ds3.xpm000644 000767 000024 00000010531 10210157757 022414 0ustar00jwzstaff000000 000000 /* XPM */ static char * pacman_ds3_xpm[] = { "64 64 2 1", " c #FFFF00", ". c None ", "................................................................", "................................................................", "................................................................", "................................................................", "................................................................", "................................................................", "................................................................", "................................................................", "................................................................", "................................................................", "................................................................", "................................................................", "................................................................", "................................................................", "................................................................", "................................................................", "................................................................", "................................................................", "................................................................", "................................................................", "................................................................", "................................................................", "................................................................", "................................................................", "................................................................", "................................................................", "................................................................", "................................................................", "................................................................", "................................................................", " .............................. ", " .............................. ", " .............................. ", " .............................. ", " ", " ", " ", " ", " ", " ", " ", " ", " ", ".... ....", ".... ....", ".... ....", ".... ....", "............. .... .............", "............. .... .............", "............. .... .............", "............. .... .............", "................................................................", "................................................................", "................................................................", "................................................................", "................................................................", "................................................................", "................................................................", "................................................................", "................................................................", "................................................................", "................................................................", "................................................................", "................................................................"}; xscreensaver-5.36/hacks/images/pacman/pacman-ds4.xpm000644 000767 000024 00000010526 10210157757 022421 0ustar00jwzstaff000000 000000 /* XPM */ static char * pacman_ds4_xpm[] = { "64 64 2 1", " c #FFFF00", ". c None", "................................................................", "................................................................", "................................................................", "................................................................", "................................................................", "................................................................", "................................................................", "................................................................", "................................................................", "................................................................", "................................................................", "................................................................", "................................................................", "................................................................", "................................................................", "................................................................", "................................................................", "................................................................", "................................................................", "................................................................", "................................................................", "................................................................", "................................................................", "................................................................", "................................................................", "................................................................", "................................................................", "................................................................", "................................................................", "................................................................", "................................................................", "................................................................", "................................................................", "................................................................", "................. .................", "................. .................", "................. .................", "................. .................", " ", " ", " ", " ", " ", " ", " ", " ", " ", ".... ....", ".... ....", ".... ....", ".... ....", "............. .... .............", "............. .... .............", "............. .... .............", "............. .... .............", "................................................................", "................................................................", "................................................................", "................................................................", "................................................................", "................................................................", "................................................................", "................................................................", "................................................................"}; xscreensaver-5.36/hacks/images/pacman/pacman-ds5.xpm000644 000767 000024 00000010531 10210157757 022416 0ustar00jwzstaff000000 000000 /* XPM */ static char * pacman_ds5_xpm[] = { "64 64 2 1", " c #FFFF00", ". c None ", "................................................................", "................................................................", "................................................................", "................................................................", "................................................................", "................................................................", "................................................................", "................................................................", "................................................................", "................................................................", "................................................................", "................................................................", "................................................................", "................................................................", "................................................................", "................................................................", "................................................................", "................................................................", "................................................................", "................................................................", "................................................................", "................................................................", "................................................................", "................................................................", "................................................................", "................................................................", "................................................................", "................................................................", "................................................................", "................................................................", "................................................................", "................................................................", "................................................................", "................................................................", ".............................. ..............................", ".............................. ..............................", ".............................. ..............................", ".............................. ..............................", ".......................... ..........................", ".......................... ..........................", ".......................... ..........................", ".......................... ..........................", ".......................... ..........................", "................. .................", "................. .................", "................. .................", "................. .................", "............. .............", "............. .............", "............. .............", "............. .............", ".... ....", ".... ....", ".... ....", ".... ....", ".... .... ....", ".... .... ....", ".... .... ....", ".... .... ....", ".... .... ....", "......... ............ .........", "......... ............ .........", "......... ............ .........", "......... ............ ........."}; xscreensaver-5.36/hacks/images/pacman/pacman-ds6.xpm000644 000767 000024 00000010531 10210157757 022417 0ustar00jwzstaff000000 000000 /* XPM */ static char * pacman_ds6_xpm[] = { "64 64 2 1", " c #FFFF00", ". c None ", "................................................................", "................................................................", "................................................................", "................................................................", "................................................................", "................................................................", "................................................................", "................................................................", "................................................................", "................................................................", "................................................................", "................................................................", "................................................................", "................................................................", "................................................................", "................................................................", "................................................................", "................................................................", "................................................................", "................................................................", "................................................................", "................................................................", "................................................................", "................................................................", "................................................................", "................................................................", "................................................................", "................................................................", "................................................................", "................................................................", "................................................................", "................................................................", "................................................................", "................................................................", ".............................. ..............................", ".............................. ..............................", ".............................. ..............................", ".............................. ..............................", ".......................... ..........................", ".......................... ..........................", ".......................... ..........................", ".......................... ..........................", ".......................... ..........................", "..................... .....................", "..................... .....................", "..................... .....................", "..................... .....................", "..................... .....................", "..................... .....................", "..................... .....................", "..................... .....................", "................. .................", "................. .................", "................. .................", "................. .................", "............. .............", "............. .............", "............. .............", "............. .............", "............. .............", "................. .... .................", "................. .... .................", "................. .... .................", "................. .... ................."}; xscreensaver-5.36/hacks/images/pacman/pacman-ds7.xpm000644 000767 000024 00000010531 10210157757 022420 0ustar00jwzstaff000000 000000 /* XPM */ static char * pacman_ds7_xpm[] = { "64 64 2 1", " c #FFFF00", ". c None ", "................................................................", "................................................................", "................................................................", "................................................................", "................................................................", "................................................................", "................................................................", "................................................................", "................................................................", "................................................................", "................................................................", "................................................................", "................................................................", "................................................................", "................................................................", "................................................................", "................................................................", "................................................................", "................................................................", "................................................................", "................................................................", "................................................................", "................................................................", "................................................................", "................................................................", "................................................................", "................................................................", "................................................................", "................................................................", "................................................................", "................................................................", "................................................................", "................................................................", "................................................................", ".............................. ..............................", ".............................. ..............................", ".............................. ..............................", ".............................. ..............................", ".............................. ..............................", ".............................. ..............................", ".............................. ..............................", ".............................. ..............................", ".............................. ..............................", ".............................. ..............................", ".............................. ..............................", ".............................. ..............................", ".............................. ..............................", ".............................. ..............................", ".............................. ..............................", ".............................. ..............................", ".............................. ..............................", ".............................. ..............................", ".............................. ..............................", ".............................. ..............................", ".............................. ..............................", ".............................. ..............................", ".............................. ..............................", ".............................. ..............................", ".............................. ..............................", ".............................. ..............................", "................................................................", "................................................................", "................................................................", "................................................................"}; xscreensaver-5.36/hacks/images/pacman/pacman-ds8.xpm000644 000767 000024 00000010531 10210157757 022421 0ustar00jwzstaff000000 000000 /* XPM */ static char * pacman_ds8_xpm[] = { "64 64 2 1", " c #FFFF00", ". c None ", "................................................................", "................................................................", "................................................................", "................................................................", "................................................................", "................................................................", "................................................................", "................................................................", "................................................................", "................................................................", "................................................................", "................................................................", "................................................................", "................................................................", "................................................................", "................................................................", "................................................................", "................................................................", "................................................................", "................................................................", "................................................................", "..................... ............ .....................", "..................... ............ .....................", "..................... ............ .....................", "..................... ............ .....................", "..................... ............ .....................", "............. ......... .... ..........................", "............. ......... .... ..........................", "............. ......... .... ..........................", "............. ......... .... ..........................", "................. .......................... .............", "................. .......................... .............", "................. .......................... .............", "................. .......................... .............", "........................................... .................", "........................................... .................", "........................................... .................", "........................................... .................", "......... ...............................................", "......... ...............................................", "......... ...............................................", "......... ...............................................", "......... ...............................................", "............................................... .........", "............................................... .........", "............................................... .........", "............................................... .........", "................. ...........................................", "................. ...........................................", "................. ...........................................", "................. ...........................................", "............. .......................... .................", "............. .......................... .................", "............. .......................... .................", "............. .......................... .................", ".......................... .... ......... .............", ".......................... .... ......... .............", ".......................... .... ......... .............", ".......................... .... ......... .............", ".......................... .... ......... .............", "..................... ............ .....................", "..................... ............ .....................", "..................... ............ .....................", "..................... ............ ....................."}; xscreensaver-5.36/hacks/images/pacman/pacman-l1.xpm000644 000767 000024 00000010525 10110315356 022230 0ustar00jwzstaff000000 000000 /* XPM */ static char * pacman_l1_xpm[] = { "64 64 2 1", " c None", ". c #FFFF00", " ........................ ", " ........................ ", " ........................ ", " ........................ ", " ........................ ", " ............................................ ", " ............................................ ", " ............................................ ", " ............................................ ", " ............................................ ", " ...................................................... ", " ...................................................... ", " ...................................................... ", " ...................................................... ", " ...................................................... ", " ...................................................... ", " ...................................................... ", " ...................................................... ", " ...................................................... ", " ...................................................... ", " .................................................", " .................................................", " .................................................", " .................................................", " .................................................", " ..................................", " ..................................", " ..................................", " ..................................", " ..................................", " ....................", " ....................", " ....................", " ....................", " ..................................", " ..................................", " ..................................", " ..................................", " ..................................", " .................................................", " .................................................", " .................................................", " .................................................", " .................................................", " ...................................................... ", " ...................................................... ", " ...................................................... ", " ...................................................... ", " ...................................................... ", " ...................................................... ", " ...................................................... ", " ...................................................... ", " ...................................................... ", " ...................................................... ", " ............................................ ", " ............................................ ", " ............................................ ", " ............................................ ", " ............................................ ", " ........................ ", " ........................ ", " ........................ ", " ........................ ", " ........................ "}; xscreensaver-5.36/hacks/images/pacman/pacman-l2.xpm000644 000767 000024 00000010525 10110315356 022231 0ustar00jwzstaff000000 000000 /* XPM */ static char * pacman_l2_xpm[] = { "64 64 2 1", " c None", "+ c #FFFF00", " ++++++++++++++++++++++++ ", " ++++++++++++++++++++++++ ", " ++++++++++++++++++++++++ ", " ++++++++++++++++++++++++ ", " ++++++++++++++++++++++++ ", " ++++++++++++++++++++++++++++++++++ ", " ++++++++++++++++++++++++++++++++++ ", " ++++++++++++++++++++++++++++++++++ ", " ++++++++++++++++++++++++++++++++++ ", " ++++++++++++++++++++++++++++++++++ ", " ++++++++++++++++++++++++++++++++++ ", " ++++++++++++++++++++++++++++++++++ ", " ++++++++++++++++++++++++++++++++++ ", " ++++++++++++++++++++++++++++++++++ ", " ++++++++++++++++++++++++++++++++++ ", " +++++++++++++++++++++++++++++ ", " +++++++++++++++++++++++++++++ ", " +++++++++++++++++++++++++++++ ", " +++++++++++++++++++++++++++++ ", " +++++++++++++++++++++++++++++ ", " ++++++++++++++++++++++++++++++", " ++++++++++++++++++++++++++++++", " ++++++++++++++++++++++++++++++", " ++++++++++++++++++++++++++++++", " ++++++++++++++++++++++++++++++", " +++++++++++++++++++++++++", " +++++++++++++++++++++++++", " +++++++++++++++++++++++++", " +++++++++++++++++++++++++", " +++++++++++++++++++++++++", " ++++++++++++++++++++", " ++++++++++++++++++++", " ++++++++++++++++++++", " ++++++++++++++++++++", " +++++++++++++++++++++++++", " +++++++++++++++++++++++++", " +++++++++++++++++++++++++", " +++++++++++++++++++++++++", " +++++++++++++++++++++++++", " ++++++++++++++++++++++++++++++", " ++++++++++++++++++++++++++++++", " ++++++++++++++++++++++++++++++", " ++++++++++++++++++++++++++++++", " ++++++++++++++++++++++++++++++", " +++++++++++++++++++++++++++++ ", " +++++++++++++++++++++++++++++ ", " +++++++++++++++++++++++++++++ ", " +++++++++++++++++++++++++++++ ", " +++++++++++++++++++++++++++++ ", " ++++++++++++++++++++++++++++++++++ ", " ++++++++++++++++++++++++++++++++++ ", " ++++++++++++++++++++++++++++++++++ ", " ++++++++++++++++++++++++++++++++++ ", " ++++++++++++++++++++++++++++++++++ ", " ++++++++++++++++++++++++++++++++++ ", " ++++++++++++++++++++++++++++++++++ ", " ++++++++++++++++++++++++++++++++++ ", " ++++++++++++++++++++++++++++++++++ ", " ++++++++++++++++++++++++++++++++++ ", " ++++++++++++++++++++++++ ", " ++++++++++++++++++++++++ ", " ++++++++++++++++++++++++ ", " ++++++++++++++++++++++++ ", " ++++++++++++++++++++++++ "}; xscreensaver-5.36/hacks/images/pacman/pacman-r1.xpm000644 000767 000024 00000010525 10110315356 022236 0ustar00jwzstaff000000 000000 /* XPM */ static char * pacman_r1_xpm[] = { "64 64 2 1", " c None", ". c #FFFF00", " ........................ ", " ........................ ", " ........................ ", " ........................ ", " ........................ ", " ............................................ ", " ............................................ ", " ............................................ ", " ............................................ ", " ............................................ ", " ...................................................... ", " ...................................................... ", " ...................................................... ", " ...................................................... ", " ...................................................... ", " ...................................................... ", " ...................................................... ", " ...................................................... ", " ...................................................... ", " ...................................................... ", "................................................. ", "................................................. ", "................................................. ", "................................................. ", "................................................. ", ".................................. ", ".................................. ", ".................................. ", ".................................. ", ".................................. ", ".................... ", ".................... ", ".................... ", ".................... ", ".................................. ", ".................................. ", ".................................. ", ".................................. ", ".................................. ", "................................................. ", "................................................. ", "................................................. ", "................................................. ", "................................................. ", " ...................................................... ", " ...................................................... ", " ...................................................... ", " ...................................................... ", " ...................................................... ", " ...................................................... ", " ...................................................... ", " ...................................................... ", " ...................................................... ", " ...................................................... ", " ............................................ ", " ............................................ ", " ............................................ ", " ............................................ ", " ............................................ ", " ........................ ", " ........................ ", " ........................ ", " ........................ ", " ........................ "}; xscreensaver-5.36/hacks/images/pacman/pacman-r2.xpm000644 000767 000024 00000010525 10110315356 022237 0ustar00jwzstaff000000 000000 /* XPM */ static char * pacman_r2_xpm[] = { "64 64 2 1", " c None", "+ c #FFFF00", " ++++++++++++++++++++++++ ", " ++++++++++++++++++++++++ ", " ++++++++++++++++++++++++ ", " ++++++++++++++++++++++++ ", " ++++++++++++++++++++++++ ", " ++++++++++++++++++++++++++++++++++ ", " ++++++++++++++++++++++++++++++++++ ", " ++++++++++++++++++++++++++++++++++ ", " ++++++++++++++++++++++++++++++++++ ", " ++++++++++++++++++++++++++++++++++ ", " ++++++++++++++++++++++++++++++++++ ", " ++++++++++++++++++++++++++++++++++ ", " ++++++++++++++++++++++++++++++++++ ", " ++++++++++++++++++++++++++++++++++ ", " ++++++++++++++++++++++++++++++++++ ", " +++++++++++++++++++++++++++++ ", " +++++++++++++++++++++++++++++ ", " +++++++++++++++++++++++++++++ ", " +++++++++++++++++++++++++++++ ", " +++++++++++++++++++++++++++++ ", "++++++++++++++++++++++++++++++ ", "++++++++++++++++++++++++++++++ ", "++++++++++++++++++++++++++++++ ", "++++++++++++++++++++++++++++++ ", "++++++++++++++++++++++++++++++ ", "+++++++++++++++++++++++++ ", "+++++++++++++++++++++++++ ", "+++++++++++++++++++++++++ ", "+++++++++++++++++++++++++ ", "+++++++++++++++++++++++++ ", "++++++++++++++++++++ ", "++++++++++++++++++++ ", "++++++++++++++++++++ ", "++++++++++++++++++++ ", "+++++++++++++++++++++++++ ", "+++++++++++++++++++++++++ ", "+++++++++++++++++++++++++ ", "+++++++++++++++++++++++++ ", "+++++++++++++++++++++++++ ", "++++++++++++++++++++++++++++++ ", "++++++++++++++++++++++++++++++ ", "++++++++++++++++++++++++++++++ ", "++++++++++++++++++++++++++++++ ", "++++++++++++++++++++++++++++++ ", " +++++++++++++++++++++++++++++ ", " +++++++++++++++++++++++++++++ ", " +++++++++++++++++++++++++++++ ", " +++++++++++++++++++++++++++++ ", " +++++++++++++++++++++++++++++ ", " ++++++++++++++++++++++++++++++++++ ", " ++++++++++++++++++++++++++++++++++ ", " ++++++++++++++++++++++++++++++++++ ", " ++++++++++++++++++++++++++++++++++ ", " ++++++++++++++++++++++++++++++++++ ", " ++++++++++++++++++++++++++++++++++ ", " ++++++++++++++++++++++++++++++++++ ", " ++++++++++++++++++++++++++++++++++ ", " ++++++++++++++++++++++++++++++++++ ", " ++++++++++++++++++++++++++++++++++ ", " ++++++++++++++++++++++++ ", " ++++++++++++++++++++++++ ", " ++++++++++++++++++++++++ ", " ++++++++++++++++++++++++ ", " ++++++++++++++++++++++++ "}; xscreensaver-5.36/hacks/images/pacman/pacman-u1.xpm000644 000767 000024 00000010525 10110315356 022241 0ustar00jwzstaff000000 000000 /* XPM */ static char * pacman_u1_xpm[] = { "64 64 2 1", " c None", ". c #FFFF00", " ", " ", " ", " ", " ", " .......... .......... ", " .......... .......... ", " .......... .......... ", " .......... .......... ", " .......... .......... ", " ............... ............... ", " ............... ............... ", " ............... ............... ", " ............... ............... ", " ............... ............... ", " .................... .................... ", " .................... .................... ", " .................... .................... ", " .................... .................... ", " .................... .................... ", "......................... .........................", "......................... .........................", "......................... .........................", "......................... .........................", "......................... .........................", "......................... .........................", "......................... .........................", "......................... .........................", "......................... .........................", "......................... .........................", ".............................. ..............................", ".............................. ..............................", ".............................. ..............................", ".............................. ..............................", ".............................. ..............................", ".............................. ..............................", ".............................. ..............................", ".............................. ..............................", ".............................. ..............................", ".............................. ..............................", ".............................. ..............................", ".............................. ..............................", ".............................. ..............................", ".............................. ..............................", " ...................................................... ", " ...................................................... ", " ...................................................... ", " ...................................................... ", " ...................................................... ", " ...................................................... ", " ...................................................... ", " ...................................................... ", " ...................................................... ", " ...................................................... ", " ............................................ ", " ............................................ ", " ............................................ ", " ............................................ ", " ............................................ ", " ........................ ", " ........................ ", " ........................ ", " ........................ ", " ........................ "}; xscreensaver-5.36/hacks/images/pacman/pacman-u2.xpm000644 000767 000024 00000010525 10110315356 022242 0ustar00jwzstaff000000 000000 /* XPM */ static char * pacman_u2_xpm[] = { "64 64 2 1", " c None", "+ c #FFFF00", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", "++++++++++ ++++++++++", "++++++++++ ++++++++++", "++++++++++ ++++++++++", "++++++++++ ++++++++++", "++++++++++ ++++++++++", "+++++++++++++++ +++++++++++++++", "+++++++++++++++ +++++++++++++++", "+++++++++++++++ +++++++++++++++", "+++++++++++++++ +++++++++++++++", "+++++++++++++++ +++++++++++++++", "++++++++++++++++++++ ++++++++++++++++++++", "++++++++++++++++++++ ++++++++++++++++++++", "++++++++++++++++++++ ++++++++++++++++++++", "++++++++++++++++++++ ++++++++++++++++++++", "+++++++++++++++++++++++++ +++++++++++++++++++++++++", "+++++++++++++++++++++++++ +++++++++++++++++++++++++", "+++++++++++++++++++++++++ +++++++++++++++++++++++++", "+++++++++++++++++++++++++ +++++++++++++++++++++++++", "+++++++++++++++++++++++++ +++++++++++++++++++++++++", "++++++++++++++++++++++++++++++ ++++++++++++++++++++++++++++++", "++++++++++++++++++++++++++++++ ++++++++++++++++++++++++++++++", "++++++++++++++++++++++++++++++ ++++++++++++++++++++++++++++++", "++++++++++++++++++++++++++++++ ++++++++++++++++++++++++++++++", "++++++++++++++++++++++++++++++ ++++++++++++++++++++++++++++++", " ++++++++++++++++++++++++++++++++++++++++++++++++++++++ ", " ++++++++++++++++++++++++++++++++++++++++++++++++++++++ ", " ++++++++++++++++++++++++++++++++++++++++++++++++++++++ ", " ++++++++++++++++++++++++++++++++++++++++++++++++++++++ ", " ++++++++++++++++++++++++++++++++++++++++++++++++++++++ ", " ++++++++++++++++++++++++++++++++++++++++++++++++++++++ ", " ++++++++++++++++++++++++++++++++++++++++++++++++++++++ ", " ++++++++++++++++++++++++++++++++++++++++++++++++++++++ ", " ++++++++++++++++++++++++++++++++++++++++++++++++++++++ ", " ++++++++++++++++++++++++++++++++++++++++++++++++++++++ ", " ++++++++++++++++++++++++++++++++++++++++++++ ", " ++++++++++++++++++++++++++++++++++++++++++++ ", " ++++++++++++++++++++++++++++++++++++++++++++ ", " ++++++++++++++++++++++++++++++++++++++++++++ ", " ++++++++++++++++++++++++++++++++++++++++++++ ", " ++++++++++++++++++++++++ ", " ++++++++++++++++++++++++ ", " ++++++++++++++++++++++++ ", " ++++++++++++++++++++++++ ", " ++++++++++++++++++++++++ "}; xscreensaver-5.36/hacks/compile_axp.com000644 000767 000024 00000033766 12777052475 020266 0ustar00jwzstaff000000 000000 $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,STANDALONE)/INCL=([],[-],[-.UTILS]) ABSTRACTILE.C $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,STANDALONE)/INCL=([],[-],[-.UTILS]) ANALOGTV.C $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,STANDALONE)/INCL=([],[-],[-.UTILS]) ANEMONE.C $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,STANDALONE)/INCL=([],[-],[-.UTILS]) ANEMOTAXIS.C $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,STANDALONE)/INCL=([],[-],[-.UTILS]) ANT.C $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,STANDALONE)/INCL=([],[-],[-.UTILS]) APOLLONIAN.C $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,STANDALONE)/INCL=([],[-],[-.UTILS]) APPLE2.C $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,STANDALONE)/INCL=([],[-],[-.UTILS]) APPLE2-MAIN.C $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,STANDALONE)/INCL=([],[-],[-.UTILS]) ASM6502.C $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,STANDALONE)/INCL=([],[-],[-.UTILS]) ATTRACTION.C $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,STANDALONE)/INCL=([],[-],[-.UTILS]) BARCODE.C $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,STANDALONE)/INCL=([],[-],[-.UTILS]) BINARYRING.C $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,STANDALONE)/INCL=([],[-],[-.UTILS]) BLASTER.C $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,STANDALONE)/INCL=([],[-],[-.UTILS]) BLITSPIN.C $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,STANDALONE)/INCL=([],[-],[-.UTILS]) BOUBOULE.C $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,STANDALONE)/INCL=([],[-],[-.UTILS]) BOXFIT.C $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,STANDALONE)/INCL=([],[-],[-.UTILS]) BRAID.C $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,STANDALONE)/INCL=([],[-],[-.UTILS]) BSOD.C $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,STANDALONE)/INCL=([],[-],[-.UTILS]) BUBBLES.C $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,STANDALONE)/INCL=([],[-],[-.UTILS]) BUBBLES-DEFAULT.C $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,STANDALONE)/INCL=([],[-],[-.UTILS]) BUMPS.C $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,STANDALONE)/INCL=([],[-],[-.UTILS]) CCURVE.C $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,STANDALONE)/INCL=([],[-],[-.UTILS]) CELTIC.C $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,STANDALONE)/INCL=([],[-],[-.UTILS]) CLOUDLIFE.C $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,STANDALONE)/INCL=([],[-],[-.UTILS]) COMPASS.C $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,STANDALONE)/INCL=([],[-],[-.UTILS]) CORAL.C $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,STANDALONE)/INCL=([],[-],[-.UTILS]) CRITICAL.C $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,STANDALONE)/INCL=([],[-],[-.UTILS]) CRYSTAL.C $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,STANDALONE)/INCL=([],[-],[-.UTILS]) CWAVES.C $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,STANDALONE)/INCL=([],[-],[-.UTILS]) CYNOSURE.C $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,STANDALONE)/INCL=([],[-],[-.UTILS]) DECAYSCREEN.C $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,STANDALONE)/INCL=([],[-],[-.UTILS]) DECO.C $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,STANDALONE)/INCL=([],[-],[-.UTILS]) DELAUNAY.C $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,STANDALONE)/INCL=([],[-],[-.UTILS]) DELUXE.C $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,STANDALONE)/INCL=([],[-],[-.UTILS]) DEMON.C $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,STANDALONE)/INCL=([],[-],[-.UTILS]) DISCRETE.C $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,STANDALONE)/INCL=([],[-],[-.UTILS]) DISTORT.C $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,STANDALONE)/INCL=([],[-],[-.UTILS]) DRIFT.C $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,STANDALONE)/INCL=([],[-],[-.UTILS]) EPICYCLE.C $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,STANDALONE)/INCL=([],[-],[-.UTILS]) ERUPTION.C $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,STANDALONE)/INCL=([],[-],[-.UTILS]) EULER2D.C $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,STANDALONE)/INCL=([],[-],[-.UTILS]) FADEPLOT.C $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,STANDALONE)/INCL=([],[-],[-.UTILS]) FIBERLAMP.C $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,STANDALONE)/INCL=([],[-],[-.UTILS]) FIREWORKX.C $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,STANDALONE)/INCL=([],[-],[-.UTILS]) FLAG.C $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,STANDALONE)/INCL=([],[-],[-.UTILS]) FLAME.C $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,STANDALONE)/INCL=([],[-],[-.UTILS]) FLOW.C $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,STANDALONE)/INCL=([],[-],[-.UTILS]) FLUIDBALLS.C $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,STANDALONE)/INCL=([],[-],[-.UTILS]) FONTGLIDE.C $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,STANDALONE)/INCL=([],[-],[-.UTILS]) FOREST.C $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,STANDALONE)/INCL=([],[-],[-.UTILS]) FPS.C $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,STANDALONE)/INCL=([],[-],[-.UTILS]) FUZZYFLAKES.C $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,STANDALONE)/INCL=([],[-],[-.UTILS]) GALAXY.C $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,STANDALONE)/INCL=([],[-],[-.UTILS]) GOOP.C $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,STANDALONE)/INCL=([],[-],[-.UTILS]) GRAV.C $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,STANDALONE)/INCL=([],[-],[-.UTILS]) GREYNETIC.C $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,STANDALONE)/INCL=([],[-],[-.UTILS]) HALFTONE.C $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,STANDALONE)/INCL=([],[-],[-.UTILS]) HALO.C $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,STANDALONE)/INCL=([],[-],[-.UTILS]) HELIX.C $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,STANDALONE)/INCL=([],[-],[-.UTILS]) HEXADROP.C $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,STANDALONE)/INCL=([],[-],[-.UTILS]) HOPALONG.C $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,STANDALONE)/INCL=([],[-],[-.UTILS]) HYPERBALL.C $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,STANDALONE)/INCL=([],[-],[-.UTILS]) HYPERCUBE.C $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,STANDALONE)/INCL=([],[-],[-.UTILS]) IFS.C $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,STANDALONE)/INCL=([],[-],[-.UTILS]) IMSMAP.C $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,STANDALONE)/INCL=([],[-],[-.UTILS]) INTERAGGREGATE.C $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,STANDALONE)/INCL=([],[-],[-.UTILS]) INTERFERENCE.C $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,STANDALONE)/INCL=([],[-],[-.UTILS]) INTERMOMENTARY.C $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,STANDALONE)/INCL=([],[-],[-.UTILS]) JUGGLE.C $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,STANDALONE)/INCL=([],[-],[-.UTILS]) JULIA.C $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,STANDALONE)/INCL=([],[-],[-.UTILS]) KALEIDESCOPE.C $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,STANDALONE)/INCL=([],[-],[-.UTILS]) KUMPPA.C $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,STANDALONE)/INCL=([],[-],[-.UTILS]) LASER.C $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,STANDALONE)/INCL=([],[-],[-.UTILS]) LCDSCRUB.C $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,STANDALONE)/INCL=([],[-],[-.UTILS]) LIGHTNING.C $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,STANDALONE)/INCL=([],[-],[-.UTILS]) LISA.C $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,STANDALONE)/INCL=([],[-],[-.UTILS]) LISSIE.C $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,STANDALONE)/INCL=([],[-],[-.UTILS]) LMORPH.C $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,STANDALONE)/INCL=([],[-],[-.UTILS]) LOOP.C $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,STANDALONE)/INCL=([],[-],[-.UTILS]) M6502.C $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,STANDALONE)/INCL=([],[-],[-.UTILS]) MAZE.C $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,STANDALONE)/INCL=([],[-],[-.UTILS]) MEMSCROLLER.C $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,STANDALONE)/INCL=([],[-],[-.UTILS]) METABALLS.C $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,STANDALONE)/INCL=([],[-],[-.UTILS]) MOIRE2.C $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,STANDALONE)/INCL=([],[-],[-.UTILS]) MOIRE.C $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,STANDALONE)/INCL=([],[-],[-.UTILS]) MOUNTAIN.C $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,STANDALONE)/INCL=([],[-],[-.UTILS]) MUNCH.C $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,STANDALONE)/INCL=([],[-],[-.UTILS]) NERVEROT.C $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,STANDALONE)/INCL=([],[-],[-.UTILS]) NOSEGUY.C $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,STANDALONE)/INCL=([],[-],[-.UTILS]) PACMAN_AI.C $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,STANDALONE)/INCL=([],[-],[-.UTILS]) PACMAN.C $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,STANDALONE)/INCL=([],[-],[-.UTILS]) PACMAN_LEVEL.C $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,STANDALONE)/INCL=([],[-],[-.UTILS]) PEDAL.C $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,STANDALONE)/INCL=([],[-],[-.UTILS]) PENETRATE.C $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,STANDALONE)/INCL=([],[-],[-.UTILS]) PENROSE.C $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,STANDALONE)/INCL=([],[-],[-.UTILS]) PETRI.C $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,STANDALONE)/INCL=([],[-],[-.UTILS]) PHOSPHOR.C $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,STANDALONE)/INCL=([],[-],[-.UTILS]) PIECEWISE.C $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,STANDALONE)/INCL=([],[-],[-.UTILS]) POLYOMINOES.C $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,STANDALONE)/INCL=([],[-],[-.UTILS]) PONG.C $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,STANDALONE)/INCL=([],[-],[-.UTILS]) POPSQUARES.C $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,STANDALONE)/INCL=([],[-],[-.UTILS]) PYRO.C $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,STANDALONE)/INCL=([],[-],[-.UTILS]) QIX.C $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,STANDALONE)/INCL=([],[-],[-.UTILS]) RD-BOMB.C $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,STANDALONE)/INCL=([],[-],[-.UTILS]) RECANIM.C $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,STANDALONE)/INCL=([],[-],[-.UTILS]) RIPPLES.C $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,STANDALONE)/INCL=([],[-],[-.UTILS]) ROCKS.C $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,STANDALONE)/INCL=([],[-],[-.UTILS]) RORSCHACH.C $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,STANDALONE)/INCL=([],[-],[-.UTILS]) ROTOR.C $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,STANDALONE)/INCL=([],[-],[-.UTILS]) ROTZOOMER.C $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,STANDALONE)/INCL=([],[-],[-.UTILS]) SCREENHACK.C $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,STANDALONE)/INCL=([],[-],[-.UTILS]) SHADEBOBS.C $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,STANDALONE)/INCL=([],[-],[-.UTILS]) SIERPINSKI.C $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,STANDALONE)/INCL=([],[-],[-.UTILS]) SLIDESCREEN.C $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,STANDALONE)/INCL=([],[-],[-.UTILS]) SLIP.C $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,STANDALONE)/INCL=([],[-],[-.UTILS]) SPEEDMINE.C $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,STANDALONE)/INCL=([],[-],[-.UTILS]) SPHERE.C $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,STANDALONE)/INCL=([],[-],[-.UTILS]) SPIRAL.C $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,STANDALONE)/INCL=([],[-],[-.UTILS]) SPOTLIGHT.C $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,STANDALONE)/INCL=([],[-],[-.UTILS]) SQUIRAL.C $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,STANDALONE)/INCL=([],[-],[-.UTILS]) STARFISH.C $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,STANDALONE)/INCL=([],[-],[-.UTILS]) STRANGE.C $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,STANDALONE)/INCL=([],[-],[-.UTILS]) SUBSTRATE.C $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,STANDALONE)/INCL=([],[-],[-.UTILS]) SWIRL.C $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,STANDALONE)/INCL=([],[-],[-.UTILS]) T3D.C $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,STANDALONE)/INCL=([],[-],[-.UTILS]) TESSELLIMAGE.C $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,STANDALONE)/INCL=([],[-],[-.UTILS]) TESTX11.C $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,STANDALONE)/INCL=([],[-],[-.UTILS]) THORNBIRD.C $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,STANDALONE)/INCL=([],[-],[-.UTILS]) TRIANGLE.C $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,STANDALONE)/INCL=([],[-],[-.UTILS]) TRUCHET.C $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,STANDALONE)/INCL=([],[-],[-.UTILS]) TWANG.C $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,STANDALONE)/INCL=([],[-],[-.UTILS]) VERMICULATE.C $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,STANDALONE)/INCL=([],[-],[-.UTILS]) VINES.C $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,STANDALONE)/INCL=([],[-],[-.UTILS]) WANDER.C $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,STANDALONE)/INCL=([],[-],[-.UTILS]) WEBCOLLAGE-COCOA.M $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,STANDALONE)/INCL=([],[-],[-.UTILS]) WEBCOLLAGE-HELPER.C $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,STANDALONE)/INCL=([],[-],[-.UTILS]) WEBCOLLAGE-HELPER-COCOA.M $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,STANDALONE)/INCL=([],[-],[-.UTILS]) WHIRLWINDWARP.C $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,STANDALONE)/INCL=([],[-],[-.UTILS]) WHIRLYGIG.C $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,STANDALONE)/INCL=([],[-],[-.UTILS]) WORM.C $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,STANDALONE)/INCL=([],[-],[-.UTILS]) WORMHOLE.C $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,STANDALONE)/INCL=([],[-],[-.UTILS]) XANALOGTV.C $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,STANDALONE)/INCL=([],[-],[-.UTILS]) XFLAME.C $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,STANDALONE)/INCL=([],[-],[-.UTILS]) XJACK.C $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,STANDALONE)/INCL=([],[-],[-.UTILS]) XLOCKMORE.C $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,STANDALONE)/INCL=([],[-],[-.UTILS]) XLYAP.C $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,STANDALONE)/INCL=([],[-],[-.UTILS]) XMATRIX.C $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,STANDALONE)/INCL=([],[-],[-.UTILS]) XPM-PIXMAP.C $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,STANDALONE)/INCL=([],[-],[-.UTILS]) XRAYSWARM.C $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,STANDALONE)/INCL=([],[-],[-.UTILS]) XSCREENSAVER-SGIGL.C $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,STANDALONE)/INCL=([],[-],[-.UTILS]) XSPIROGRAPH.C $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,STANDALONE)/INCL=([],[-],[-.UTILS]) XSUBLIM.C $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,STANDALONE)/INCL=([],[-],[-.UTILS]) ZOOM.C xscreensaver-5.36/hacks/compile_decc.com000644 000767 000024 00000033766 12777052475 020374 0ustar00jwzstaff000000 000000 $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,STANDALONE)/INCL=([],[-],[-.UTILS]) ABSTRACTILE.C $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,STANDALONE)/INCL=([],[-],[-.UTILS]) ANALOGTV.C $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,STANDALONE)/INCL=([],[-],[-.UTILS]) ANEMONE.C $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,STANDALONE)/INCL=([],[-],[-.UTILS]) ANEMOTAXIS.C $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,STANDALONE)/INCL=([],[-],[-.UTILS]) ANT.C $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,STANDALONE)/INCL=([],[-],[-.UTILS]) APOLLONIAN.C $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,STANDALONE)/INCL=([],[-],[-.UTILS]) APPLE2.C $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,STANDALONE)/INCL=([],[-],[-.UTILS]) APPLE2-MAIN.C $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,STANDALONE)/INCL=([],[-],[-.UTILS]) ASM6502.C $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,STANDALONE)/INCL=([],[-],[-.UTILS]) ATTRACTION.C $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,STANDALONE)/INCL=([],[-],[-.UTILS]) BARCODE.C $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,STANDALONE)/INCL=([],[-],[-.UTILS]) BINARYRING.C $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,STANDALONE)/INCL=([],[-],[-.UTILS]) BLASTER.C $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,STANDALONE)/INCL=([],[-],[-.UTILS]) BLITSPIN.C $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,STANDALONE)/INCL=([],[-],[-.UTILS]) BOUBOULE.C $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,STANDALONE)/INCL=([],[-],[-.UTILS]) BOXFIT.C $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,STANDALONE)/INCL=([],[-],[-.UTILS]) BRAID.C $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,STANDALONE)/INCL=([],[-],[-.UTILS]) BSOD.C $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,STANDALONE)/INCL=([],[-],[-.UTILS]) BUBBLES.C $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,STANDALONE)/INCL=([],[-],[-.UTILS]) BUBBLES-DEFAULT.C $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,STANDALONE)/INCL=([],[-],[-.UTILS]) BUMPS.C $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,STANDALONE)/INCL=([],[-],[-.UTILS]) CCURVE.C $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,STANDALONE)/INCL=([],[-],[-.UTILS]) CELTIC.C $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,STANDALONE)/INCL=([],[-],[-.UTILS]) CLOUDLIFE.C $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,STANDALONE)/INCL=([],[-],[-.UTILS]) COMPASS.C $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,STANDALONE)/INCL=([],[-],[-.UTILS]) CORAL.C $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,STANDALONE)/INCL=([],[-],[-.UTILS]) CRITICAL.C $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,STANDALONE)/INCL=([],[-],[-.UTILS]) CRYSTAL.C $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,STANDALONE)/INCL=([],[-],[-.UTILS]) CWAVES.C $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,STANDALONE)/INCL=([],[-],[-.UTILS]) CYNOSURE.C $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,STANDALONE)/INCL=([],[-],[-.UTILS]) DECAYSCREEN.C $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,STANDALONE)/INCL=([],[-],[-.UTILS]) DECO.C $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,STANDALONE)/INCL=([],[-],[-.UTILS]) DELAUNAY.C $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,STANDALONE)/INCL=([],[-],[-.UTILS]) DELUXE.C $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,STANDALONE)/INCL=([],[-],[-.UTILS]) DEMON.C $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,STANDALONE)/INCL=([],[-],[-.UTILS]) DISCRETE.C $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,STANDALONE)/INCL=([],[-],[-.UTILS]) DISTORT.C $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,STANDALONE)/INCL=([],[-],[-.UTILS]) DRIFT.C $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,STANDALONE)/INCL=([],[-],[-.UTILS]) EPICYCLE.C $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,STANDALONE)/INCL=([],[-],[-.UTILS]) ERUPTION.C $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,STANDALONE)/INCL=([],[-],[-.UTILS]) EULER2D.C $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,STANDALONE)/INCL=([],[-],[-.UTILS]) FADEPLOT.C $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,STANDALONE)/INCL=([],[-],[-.UTILS]) FIBERLAMP.C $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,STANDALONE)/INCL=([],[-],[-.UTILS]) FIREWORKX.C $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,STANDALONE)/INCL=([],[-],[-.UTILS]) FLAG.C $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,STANDALONE)/INCL=([],[-],[-.UTILS]) FLAME.C $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,STANDALONE)/INCL=([],[-],[-.UTILS]) FLOW.C $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,STANDALONE)/INCL=([],[-],[-.UTILS]) FLUIDBALLS.C $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,STANDALONE)/INCL=([],[-],[-.UTILS]) FONTGLIDE.C $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,STANDALONE)/INCL=([],[-],[-.UTILS]) FOREST.C $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,STANDALONE)/INCL=([],[-],[-.UTILS]) FPS.C $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,STANDALONE)/INCL=([],[-],[-.UTILS]) FUZZYFLAKES.C $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,STANDALONE)/INCL=([],[-],[-.UTILS]) GALAXY.C $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,STANDALONE)/INCL=([],[-],[-.UTILS]) GOOP.C $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,STANDALONE)/INCL=([],[-],[-.UTILS]) GRAV.C $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,STANDALONE)/INCL=([],[-],[-.UTILS]) GREYNETIC.C $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,STANDALONE)/INCL=([],[-],[-.UTILS]) HALFTONE.C $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,STANDALONE)/INCL=([],[-],[-.UTILS]) HALO.C $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,STANDALONE)/INCL=([],[-],[-.UTILS]) HELIX.C $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,STANDALONE)/INCL=([],[-],[-.UTILS]) HEXADROP.C $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,STANDALONE)/INCL=([],[-],[-.UTILS]) HOPALONG.C $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,STANDALONE)/INCL=([],[-],[-.UTILS]) HYPERBALL.C $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,STANDALONE)/INCL=([],[-],[-.UTILS]) HYPERCUBE.C $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,STANDALONE)/INCL=([],[-],[-.UTILS]) IFS.C $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,STANDALONE)/INCL=([],[-],[-.UTILS]) IMSMAP.C $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,STANDALONE)/INCL=([],[-],[-.UTILS]) INTERAGGREGATE.C $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,STANDALONE)/INCL=([],[-],[-.UTILS]) INTERFERENCE.C $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,STANDALONE)/INCL=([],[-],[-.UTILS]) INTERMOMENTARY.C $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,STANDALONE)/INCL=([],[-],[-.UTILS]) JUGGLE.C $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,STANDALONE)/INCL=([],[-],[-.UTILS]) JULIA.C $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,STANDALONE)/INCL=([],[-],[-.UTILS]) KALEIDESCOPE.C $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,STANDALONE)/INCL=([],[-],[-.UTILS]) KUMPPA.C $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,STANDALONE)/INCL=([],[-],[-.UTILS]) LASER.C $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,STANDALONE)/INCL=([],[-],[-.UTILS]) LCDSCRUB.C $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,STANDALONE)/INCL=([],[-],[-.UTILS]) LIGHTNING.C $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,STANDALONE)/INCL=([],[-],[-.UTILS]) LISA.C $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,STANDALONE)/INCL=([],[-],[-.UTILS]) LISSIE.C $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,STANDALONE)/INCL=([],[-],[-.UTILS]) LMORPH.C $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,STANDALONE)/INCL=([],[-],[-.UTILS]) LOOP.C $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,STANDALONE)/INCL=([],[-],[-.UTILS]) M6502.C $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,STANDALONE)/INCL=([],[-],[-.UTILS]) MAZE.C $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,STANDALONE)/INCL=([],[-],[-.UTILS]) MEMSCROLLER.C $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,STANDALONE)/INCL=([],[-],[-.UTILS]) METABALLS.C $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,STANDALONE)/INCL=([],[-],[-.UTILS]) MOIRE2.C $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,STANDALONE)/INCL=([],[-],[-.UTILS]) MOIRE.C $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,STANDALONE)/INCL=([],[-],[-.UTILS]) MOUNTAIN.C $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,STANDALONE)/INCL=([],[-],[-.UTILS]) MUNCH.C $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,STANDALONE)/INCL=([],[-],[-.UTILS]) NERVEROT.C $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,STANDALONE)/INCL=([],[-],[-.UTILS]) NOSEGUY.C $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,STANDALONE)/INCL=([],[-],[-.UTILS]) PACMAN_AI.C $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,STANDALONE)/INCL=([],[-],[-.UTILS]) PACMAN.C $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,STANDALONE)/INCL=([],[-],[-.UTILS]) PACMAN_LEVEL.C $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,STANDALONE)/INCL=([],[-],[-.UTILS]) PEDAL.C $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,STANDALONE)/INCL=([],[-],[-.UTILS]) PENETRATE.C $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,STANDALONE)/INCL=([],[-],[-.UTILS]) PENROSE.C $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,STANDALONE)/INCL=([],[-],[-.UTILS]) PETRI.C $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,STANDALONE)/INCL=([],[-],[-.UTILS]) PHOSPHOR.C $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,STANDALONE)/INCL=([],[-],[-.UTILS]) PIECEWISE.C $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,STANDALONE)/INCL=([],[-],[-.UTILS]) POLYOMINOES.C $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,STANDALONE)/INCL=([],[-],[-.UTILS]) PONG.C $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,STANDALONE)/INCL=([],[-],[-.UTILS]) POPSQUARES.C $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,STANDALONE)/INCL=([],[-],[-.UTILS]) PYRO.C $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,STANDALONE)/INCL=([],[-],[-.UTILS]) QIX.C $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,STANDALONE)/INCL=([],[-],[-.UTILS]) RD-BOMB.C $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,STANDALONE)/INCL=([],[-],[-.UTILS]) RECANIM.C $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,STANDALONE)/INCL=([],[-],[-.UTILS]) RIPPLES.C $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,STANDALONE)/INCL=([],[-],[-.UTILS]) ROCKS.C $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,STANDALONE)/INCL=([],[-],[-.UTILS]) RORSCHACH.C $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,STANDALONE)/INCL=([],[-],[-.UTILS]) ROTOR.C $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,STANDALONE)/INCL=([],[-],[-.UTILS]) ROTZOOMER.C $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,STANDALONE)/INCL=([],[-],[-.UTILS]) SCREENHACK.C $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,STANDALONE)/INCL=([],[-],[-.UTILS]) SHADEBOBS.C $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,STANDALONE)/INCL=([],[-],[-.UTILS]) SIERPINSKI.C $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,STANDALONE)/INCL=([],[-],[-.UTILS]) SLIDESCREEN.C $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,STANDALONE)/INCL=([],[-],[-.UTILS]) SLIP.C $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,STANDALONE)/INCL=([],[-],[-.UTILS]) SPEEDMINE.C $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,STANDALONE)/INCL=([],[-],[-.UTILS]) SPHERE.C $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,STANDALONE)/INCL=([],[-],[-.UTILS]) SPIRAL.C $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,STANDALONE)/INCL=([],[-],[-.UTILS]) SPOTLIGHT.C $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,STANDALONE)/INCL=([],[-],[-.UTILS]) SQUIRAL.C $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,STANDALONE)/INCL=([],[-],[-.UTILS]) STARFISH.C $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,STANDALONE)/INCL=([],[-],[-.UTILS]) STRANGE.C $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,STANDALONE)/INCL=([],[-],[-.UTILS]) SUBSTRATE.C $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,STANDALONE)/INCL=([],[-],[-.UTILS]) SWIRL.C $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,STANDALONE)/INCL=([],[-],[-.UTILS]) T3D.C $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,STANDALONE)/INCL=([],[-],[-.UTILS]) TESSELLIMAGE.C $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,STANDALONE)/INCL=([],[-],[-.UTILS]) TESTX11.C $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,STANDALONE)/INCL=([],[-],[-.UTILS]) THORNBIRD.C $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,STANDALONE)/INCL=([],[-],[-.UTILS]) TRIANGLE.C $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,STANDALONE)/INCL=([],[-],[-.UTILS]) TRUCHET.C $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,STANDALONE)/INCL=([],[-],[-.UTILS]) TWANG.C $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,STANDALONE)/INCL=([],[-],[-.UTILS]) VERMICULATE.C $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,STANDALONE)/INCL=([],[-],[-.UTILS]) VINES.C $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,STANDALONE)/INCL=([],[-],[-.UTILS]) WANDER.C $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,STANDALONE)/INCL=([],[-],[-.UTILS]) WEBCOLLAGE-COCOA.M $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,STANDALONE)/INCL=([],[-],[-.UTILS]) WEBCOLLAGE-HELPER.C $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,STANDALONE)/INCL=([],[-],[-.UTILS]) WEBCOLLAGE-HELPER-COCOA.M $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,STANDALONE)/INCL=([],[-],[-.UTILS]) WHIRLWINDWARP.C $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,STANDALONE)/INCL=([],[-],[-.UTILS]) WHIRLYGIG.C $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,STANDALONE)/INCL=([],[-],[-.UTILS]) WORM.C $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,STANDALONE)/INCL=([],[-],[-.UTILS]) WORMHOLE.C $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,STANDALONE)/INCL=([],[-],[-.UTILS]) XANALOGTV.C $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,STANDALONE)/INCL=([],[-],[-.UTILS]) XFLAME.C $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,STANDALONE)/INCL=([],[-],[-.UTILS]) XJACK.C $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,STANDALONE)/INCL=([],[-],[-.UTILS]) XLOCKMORE.C $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,STANDALONE)/INCL=([],[-],[-.UTILS]) XLYAP.C $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,STANDALONE)/INCL=([],[-],[-.UTILS]) XMATRIX.C $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,STANDALONE)/INCL=([],[-],[-.UTILS]) XPM-PIXMAP.C $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,STANDALONE)/INCL=([],[-],[-.UTILS]) XRAYSWARM.C $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,STANDALONE)/INCL=([],[-],[-.UTILS]) XSCREENSAVER-SGIGL.C $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,STANDALONE)/INCL=([],[-],[-.UTILS]) XSPIROGRAPH.C $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,STANDALONE)/INCL=([],[-],[-.UTILS]) XSUBLIM.C $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,STANDALONE)/INCL=([],[-],[-.UTILS]) ZOOM.C xscreensaver-5.36/hacks/link_axp.com000664 000767 000024 00000016177 11745403037 017556 0ustar00jwzstaff000000 000000 $! We fisrt test the version of DECW/Motif ; if 1.2 we need to link with new $! X11R5 libraries $@sys$update:decw$get_image_version sys$share:decw$xlibshr.exe decw$version $ if f$extract(4,3,decw$version).eqs."1.2" $ then $! DECW/Motif 1.2 : link with X11R5 libraries $ link/exe=attraction.exe screenhack,attraction,vms_axp_12.opt/opt $ link/exe=blitspin.exe screenhack,blitspin,vms_axp_12.opt/opt $ link/exe=bouboule.exe screenhack-xlock,bouboule,xlockmore,vms_axp_12.opt/opt $ link/exe=braid.exe screenhack-xlock,braid,xlockmore,vms_axp_12.opt/opt $ link/exe=bubbles.exe screenhack,bubbles,bubbles_default,vms_axp_12.opt/opt $ link/exe=coral.exe screenhack,coral,vms_axp_12.opt/opt $ link/exe=decayscreen.exe screenhack,decayscreen,vms_axp_12.opt/opt $ link/exe=deco.exe screenhack,deco,vms_axp_12.opt/opt $ link/exe=drift.exe screenhack-xlock,drift,xlockmore,vms_axp_12.opt/opt $ link/exe=fadeplot.exe screenhack-xlock,fadeplot,xlockmore,vms_axp_12.opt/opt $ link/exe=flag.exe screenhack-xlock,flag,xlockmore,vms_axp_12.opt/opt $ link/exe=flame.exe screenhack,flame,vms_axp_12.opt/opt $ link/exe=forest.exe screenhack-xlock,forest,xlockmore,vms_axp_12.opt/opt $ link/exe=vines.exe screenhack-xlock,vines,xlockmore,vms_axp_12.opt/opt $ link/exe=galaxy.exe screenhack-xlock,galaxy,xlockmore,vms_axp_12.opt/opt $ link/exe=grav.exe screenhack-xlock,grav,xlockmore,vms_axp_12.opt/opt $ link/exe=greynetic screenhack,greynetic,vms_axp_12.opt/opt $ link/exe=halo.exe screenhack,halo,vms_axp_12.opt/opt $ link/exe=helix.exe screenhack,helix,vms_axp_12.opt/opt $ link/exe=hop.exe screenhack-xlock,hop,xlockmore,vms_axp_12.opt/opt $ link/exe=hypercube.exe screenhack,hypercube,vms_axp_12.opt/opt $ link/exe=ifs.exe screenhack-xlock,ifs,xlockmore,vms_axp_12.opt/opt $ link/exe=imsmap.exe screenhack,imsmap,vms_axp_12.opt/opt $ link/exe=julia.exe screenhack-xlock,julia,xlockmore,vms_axp_12.opt/opt $ link/exe=kaleidescope.exe screenhack,kaleidescope,vms_axp_12.opt/opt $ link/exe=laser.exe screenhack-xlock,laser,xlockmore,vms_axp_12.opt/opt $ link/exe=lightning.exe screenhack-xlock,lightning,xlockmore,vms_axp_12.opt/opt $ link/exe=lisa.exe screenhack-xlock,lisa,xlockmore,vms_axp_12.opt/opt $ link/exe=lmorph.exe screenhack,lmorph,vms_axp_12.opt/opt $ link/exe=maze.exe screenhack,maze,vms_axp_12.opt/opt $ link/exe=moire.exe screenhack,moire,vms_axp_12.opt/opt $ link/exe=noseguy.exe screenhack,noseguy,vms_axp_12.opt/opt $ link/exe=pedal.exe screenhack,pedal,vms_axp_12.opt/opt $ link/exe=penrose.exe screenhack-xlock,penrose,xlockmore,vms_axp_12.opt/opt $ link/exe=pyro.exe screenhack,pyro,vms_axp_12.opt/opt $ link/exe=qix.exe screenhack,qix,vms_axp_12.opt/opt $ link/exe=rd-bomb.exe screenhack,rd-bomb,vms_axp_12.opt/opt $ link/exe=rocks.exe screenhack,rocks,vms_axp_12.opt/opt $ link/exe=rorschach.exe screenhack,rorschach,vms_axp_12.opt/opt $ link/exe=sierpinski.exe screenhack-xlock,sierpinski,xlockmore,vms_axp_12.opt/opt $ link/exe=slidescreen.exe screenhack,slidescreen,vms_axp_12.opt/opt $ link/exe=slip.exe screenhack-xlock,slip,xlockmore,vms_axp_12.opt/opt $ link/exe=sphere.exe screenhack-xlock,sphere,xlockmore,vms_axp_12.opt/opt $ link/exe=spiral.exe screenhack-xlock,spiral,xlockmore,vms_axp_12.opt/opt $ link/exe=strange.exe screenhack-xlock,strange,xlockmore,vms_axp_12.opt/opt $ link/exe=swirl.exe screenhack-xlock,swirl,xlockmore,vms_axp_12.opt/opt $ link/exe=goop.exe screenhack,goop,vms_axp_12.opt/opt $ link/exe=starfish.exe screenhack,starfish,vms_axp_12.opt/opt $ link/exe=munch.exe screenhack,munch,vms_axp_12.opt/opt $ else $! Else, link with X11R4 libraries $ link/exe=attraction.exe screenhack,attraction,vms_axp.opt/opt $ link/exe=blitspin.exe screenhack,blitspin,vms_axp.opt/opt $ link/exe=bouboule.exe screenhack-xlock,bouboule,xlockmore,vms_axp.opt/opt $ link/exe=braid.exe screenhack-xlock,braid,xlockmore,vms_axp.opt/opt $ link/exe=bubbles.exe screenhack,bubbles,bubbles_default,vms_axp.opt/opt $ link/exe=coral.exe screenhack,coral,vms_axp.opt/opt $ link/exe=decayscreen.exe screenhack,decayscreen,vms_axp.opt/opt $ link/exe=deco.exe screenhack,deco,vms_axp.opt/opt $ link/exe=drift.exe screenhack-xlock,drift,xlockmore,vms_axp.opt/opt $ link/exe=fadeplot.exe screenhack-xlock,fadeplot,xlockmore,vms_axp.opt/opt $ link/exe=flag.exe screenhack-xlock,flag,xlockmore,vms_axp.opt/opt $ link/exe=flame.exe screenhack,flame,vms_axp.opt/opt $ link/exe=forest.exe screenhack-xlock,forest,xlockmore,vms_axp.opt/opt $ link/exe=vines.exe screenhack-xlock,vines,xlockmore,vms_axp.opt/opt $ link/exe=galaxy.exe screenhack-xlock,galaxy,xlockmore,vms_axp.opt/opt $ link/exe=grav.exe screenhack-xlock,grav,xlockmore,vms_axp.opt/opt $ link/exe=greynetic screenhack,greynetic,vms_axp.opt/opt $ link/exe=halo.exe screenhack,halo,vms_axp.opt/opt $ link/exe=helix.exe screenhack,helix,vms_axp.opt/opt $ link/exe=hop.exe screenhack-xlock,hop,xlockmore,vms_axp.opt/opt $ link/exe=hypercube.exe screenhack,hypercube,vms_axp.opt/opt $ link/exe=ifs.exe screenhack-xlock,ifs,xlockmore,vms_axp.opt/opt $ link/exe=imsmap.exe screenhack,imsmap,vms_axp.opt/opt $ link/exe=julia.exe screenhack-xlock,julia,xlockmore,vms_axp.opt/opt $ link/exe=kaleidescope.exe screenhack,kaleidescope,vms_axp.opt/opt $ link/exe=laser.exe screenhack-xlock,laser,xlockmore,vms_axp.opt/opt $ link/exe=lightning.exe screenhack-xlock,lightning,xlockmore,vms_axp.opt/opt $ link/exe=lisa.exe screenhack-xlock,lisa,xlockmore,vms_axp.opt/opt $ link/exe=lmorph.exe screenhack,lmorph,vms_axp.opt/opt $ link/exe=maze.exe screenhack,maze,vms_axp.opt/opt $ link/exe=moire.exe screenhack,moire,vms_axp.opt/opt $ link/exe=noseguy.exe screenhack,noseguy,vms_axp.opt/opt $ link/exe=pedal.exe screenhack,pedal,vms_axp.opt/opt $ link/exe=penrose.exe screenhack-xlock,penrose,xlockmore,vms_axp.opt/opt $ link/exe=pyro.exe screenhack,pyro,vms_axp.opt/opt $ link/exe=qix.exe screenhack,qix,vms_axp.opt/opt $ link/exe=rd-bomb.exe screenhack,rd-bomb,vms_axp.opt/opt $ link/exe=rocks.exe screenhack,rocks,vms_axp.opt/opt $ link/exe=rorschach.exe screenhack,rorschach,vms_axp.opt/opt $ link/exe=sierpinski.exe screenhack-xlock,sierpinski,xlockmore,vms_axp.opt/opt $ link/exe=slidescreen.exe screenhack,slidescreen,vms_axp.opt/opt $ link/exe=slip.exe screenhack-xlock,slip,xlockmore,vms_axp.opt/opt $ link/exe=sphere.exe screenhack-xlock,sphere,xlockmore,vms_axp.opt/opt $ link/exe=spiral.exe screenhack-xlock,spiral,xlockmore,vms_axp.opt/opt $ link/exe=strange.exe screenhack-xlock,strange,xlockmore,vms_axp.opt/opt $ link/exe=swirl.exe screenhack-xlock,swirl,xlockmore,vms_axp.opt/opt $ link/exe=goop.exe screenhack,goop,vms_axp.opt/opt $ link/exe=starfish.exe screenhack,starfish,vms_axp.opt/opt $ link/exe=munch.exe screenhack,munch,vms_axp.opt/opt $ endif xscreensaver-5.36/hacks/link_decc.com000644 000767 000024 00000016341 11756272244 017661 0ustar00jwzstaff000000 000000 $! We fisrt test the version of DECW/Motif ; if 1.2 we need to link with new $! X11R5 libraries $@sys$update:decw$get_image_version sys$share:decw$xlibshr.exe decw$version $ if f$extract(4,3,decw$version).eqs."1.2" $ then $! DECW/Motif 1.2 : link with X11R5 libraries $ link/exe=attraction.exe screenhack,attraction,vms_decc_12.opt/opt $ link/exe=blitspin.exe screenhack,blitspin,vms_decc_12.opt/opt $ link/exe=bouboule.exe screenhack-xlock,bouboule,xlockmore,vms_decc_12.opt/opt $ link/exe=braid.exe screenhack-xlock,braid,xlockmore,vms_decc_12.opt/opt $ link/exe=bubbles.exe screenhack,bubbles,bubbles_default,vms_decc_12.opt/opt $ link/exe=coral.exe screenhack,coral,vms_decc_12.opt/opt $ link/exe=decayscreen.exe screenhack,decayscreen,vms_decc_12.opt/opt $ link/exe=deco.exe screenhack,deco,vms_decc_12.opt/opt $ link/exe=drift.exe screenhack-xlock,drift,xlockmore,vms_decc_12.opt/opt $ link/exe=fadeplot.exe screenhack-xlock,fadeplot,xlockmore,vms_decc_12.opt/opt $ link/exe=flag.exe screenhack-xlock,flag,xlockmore,vms_decc_12.opt/opt $ link/exe=flame.exe screenhack,flame,vms_decc_12.opt/opt $ link/exe=forest.exe screenhack-xlock,forest,xlockmore,vms_decc_12.opt/opt $ link/exe=vines.exe screenhack-xlock,vines,xlockmore,vms_decc_12.opt/opt $ link/exe=galaxy.exe screenhack-xlock,galaxy,xlockmore,vms_decc_12.opt/opt $ link/exe=grav.exe screenhack-xlock,grav,xlockmore,vms_decc_12.opt/opt $ link/exe=greynetic screenhack,greynetic,vms_decc_12.opt/opt $ link/exe=halo.exe screenhack,halo,vms_decc_12.opt/opt $ link/exe=helix.exe screenhack,helix,vms_decc_12.opt/opt $ link/exe=hop.exe screenhack-xlock,hop,xlockmore,vms_decc_12.opt/opt $ link/exe=hypercube.exe screenhack,hypercube,vms_decc_12.opt/opt $ link/exe=ifs.exe screenhack-xlock,ifs,xlockmore,vms_decc_12.opt/opt $ link/exe=imsmap.exe screenhack,imsmap,vms_decc_12.opt/opt $ link/exe=julia.exe screenhack-xlock,julia,xlockmore,vms_decc_12.opt/opt $ link/exe=kaleidescope.exe screenhack,kaleidescope,vms_decc_12.opt/opt $ link/exe=laser.exe screenhack-xlock,laser,xlockmore,vms_decc_12.opt/opt $ link/exe=lightning.exe screenhack-xlock,lightning,xlockmore,vms_decc_12.opt/opt $ link/exe=lisa.exe screenhack-xlock,lisa,xlockmore,vms_decc_12.opt/opt $ link/exe=lmorph.exe screenhack,lmorph,vms_decc_12.opt/opt $ link/exe=maze.exe screenhack,maze,vms_decc_12.opt/opt $ link/exe=moire.exe screenhack,moire,vms_decc_12.opt/opt $ link/exe=noseguy.exe screenhack,noseguy,vms_decc_12.opt/opt $ link/exe=pedal.exe screenhack,pedal,vms_decc_12.opt/opt $ link/exe=penrose.exe screenhack-xlock,penrose,xlockmore,vms_decc_12.opt/opt $ link/exe=pyro.exe screenhack,pyro,vms_decc_12.opt/opt $ link/exe=qix.exe screenhack,qix,vms_decc_12.opt/opt $ link/exe=rd-bomb.exe screenhack,rd-bomb,vms_decc_12.opt/opt $ link/exe=rocks.exe screenhack,rocks,vms_decc_12.opt/opt $ link/exe=rorschach.exe screenhack,rorschach,vms_decc_12.opt/opt $ link/exe=sierpinski.exe screenhack-xlock,sierpinski,xlockmore,vms_decc_12.opt/opt $ link/exe=slidescreen.exe screenhack,slidescreen,vms_decc_12.opt/opt $ link/exe=slip.exe screenhack-xlock,slip,xlockmore,vms_decc_12.opt/opt $ link/exe=sphere.exe screenhack-xlock,sphere,xlockmore,vms_decc_12.opt/opt $ link/exe=spiral.exe screenhack-xlock,spiral,xlockmore,vms_decc_12.opt/opt $ link/exe=strange.exe screenhack-xlock,strange,xlockmore,vms_decc_12.opt/opt $ link/exe=swirl.exe screenhack-xlock,swirl,xlockmore,vms_decc_12.opt/opt $ link/exe=goop.exe screenhack,goop,vms_decc_12.opt/opt $ link/exe=starfish.exe screenhack,starfish,vms_decc_12.opt/opt $ link/exe=munch.exe screenhack,munch,vms_decc_12.opt/opt $ else $! Else, link with X11R4 libraries $ link/exe=attraction.exe screenhack,attraction,vms_decc.opt/opt $ link/exe=blitspin.exe screenhack,blitspin,vms_decc.opt/opt $ link/exe=bouboule.exe screenhack-xlock,bouboule,xlockmore,vms_decc.opt/opt $ link/exe=braid.exe screenhack-xlock,braid,xlockmore,vms_decc.opt/opt $ link/exe=bubbles.exe screenhack,bubbles,bubbles_default,vms_decc.opt/opt $ link/exe=coral.exe screenhack,coral,vms_decc.opt/opt $ link/exe=decayscreen.exe screenhack,decayscreen,vms_decc.opt/opt $ link/exe=deco.exe screenhack,deco,vms_decc.opt/opt $ link/exe=drift.exe screenhack-xlock,drift,xlockmore,vms_decc.opt/opt $ link/exe=fadeplot.exe screenhack-xlock,fadeplot,xlockmore,vms_decc.opt/opt $ link/exe=flag.exe screenhack-xlock,flag,xlockmore,vms_decc.opt/opt $ link/exe=flame.exe screenhack,flame,vms_decc.opt/opt $ link/exe=forest.exe screenhack-xlock,forest,xlockmore,vms_decc.opt/opt $ link/exe=vines.exe screenhack-xlock,vines,xlockmore,vms_decc.opt/opt $ link/exe=galaxy.exe screenhack-xlock,galaxy,xlockmore,vms_decc.opt/opt $ link/exe=grav.exe screenhack-xlock,grav,xlockmore,vms_decc.opt/opt $ link/exe=greynetic screenhack,greynetic,vms_decc.opt/opt $ link/exe=halo.exe screenhack,halo,vms_decc.opt/opt $ link/exe=helix.exe screenhack,helix,vms_decc.opt/opt $ link/exe=hop.exe screenhack-xlock,hop,xlockmore,vms_decc.opt/opt $ link/exe=hypercube.exe screenhack,hypercube,vms_decc.opt/opt $ link/exe=ifs.exe screenhack-xlock,ifs,xlockmore,vms_decc.opt/opt $ link/exe=imsmap.exe screenhack,imsmap,vms_decc.opt/opt $ link/exe=julia.exe screenhack-xlock,julia,xlockmore,vms_decc.opt/opt $ link/exe=kaleidescope.exe screenhack,kaleidescope,vms_decc.opt/opt $ link/exe=laser.exe screenhack-xlock,laser,xlockmore,vms_decc.opt/opt $ link/exe=lightning.exe screenhack-xlock,lightning,xlockmore,vms_decc.opt/opt $ link/exe=lisa.exe screenhack-xlock,lisa,xlockmore,vms_decc.opt/opt $ link/exe=lmorph.exe screenhack,lmorph,vms_decc.opt/opt $ link/exe=maze.exe screenhack,maze,vms_decc.opt/opt $ link/exe=moire.exe screenhack,moire,vms_decc.opt/opt $ link/exe=noseguy.exe screenhack,noseguy,vms_decc.opt/opt $ link/exe=pedal.exe screenhack,pedal,vms_decc.opt/opt $ link/exe=penrose.exe screenhack-xlock,penrose,xlockmore,vms_decc.opt/opt $ link/exe=pyro.exe screenhack,pyro,vms_decc.opt/opt $ link/exe=qix.exe screenhack,qix,vms_decc.opt/opt $ link/exe=rd-bomb.exe screenhack,rd-bomb,vms_decc.opt/opt $ link/exe=rocks.exe screenhack,rocks,vms_decc.opt/opt $ link/exe=rorschach.exe screenhack,rorschach,vms_decc.opt/opt $ link/exe=sierpinski.exe screenhack-xlock,sierpinski,xlockmore,vms_decc.opt/opt $ link/exe=slidescreen.exe screenhack,slidescreen,vms_decc.opt/opt $ link/exe=slip.exe screenhack-xlock,slip,xlockmore,vms_decc.opt/opt $ link/exe=sphere.exe screenhack-xlock,sphere,xlockmore,vms_decc.opt/opt $ link/exe=spiral.exe screenhack-xlock,spiral,xlockmore,vms_decc.opt/opt $ link/exe=strange.exe screenhack-xlock,strange,xlockmore,vms_decc.opt/opt $ link/exe=swirl.exe screenhack-xlock,swirl,xlockmore,vms_decc.opt/opt $ link/exe=goop.exe screenhack,goop,vms_decc.opt/opt $ link/exe=starfish.exe screenhack,starfish,vms_decc.opt/opt $ link/exe=munch.exe screenhack,munch,vms_decc.opt/opt $ endif xscreensaver-5.36/hacks/vms_axp.opt000644 000767 000024 00000000176 06366446424 017452 0ustar00jwzstaff000000 000000 [-.UTILS]UTILS.OLB_AXP/LIB SYS$SHARE:DECW$XMULIBSHR.EXE/SHARE SYS$SHARE:DECW$XTSHR.EXE/SHARE SYS$SHARE:DECW$XLIBSHR.EXE/SHARE xscreensaver-5.36/hacks/vms_axp_12.opt000644 000767 000024 00000000205 06366446424 017745 0ustar00jwzstaff000000 000000 [-.UTILS]UTILS.OLB_AXP/LIB SYS$SHARE:DECW$XMULIBSHRR5.EXE/SHARE SYS$SHARE:DECW$XTLIBSHRR5.EXE/SHARE SYS$SHARE:DECW$XLIBSHR.EXE/SHARE xscreensaver-5.36/hacks/vms_decc.opt000644 000767 000024 00000000177 06366446424 017561 0ustar00jwzstaff000000 000000 [-.UTILS]UTILS.OLB_DECC/LIB SYS$SHARE:DECW$XMULIBSHR.EXE/SHARE SYS$SHARE:DECW$XTSHR.EXE/SHARE SYS$SHARE:DECW$XLIBSHR.EXE/SHARE xscreensaver-5.36/hacks/vms_decc_12.opt000644 000767 000024 00000000206 06366446425 020055 0ustar00jwzstaff000000 000000 [-.UTILS]UTILS.OLB_DECC/LIB SYS$SHARE:DECW$XMULIBSHRR5.EXE/SHARE SYS$SHARE:DECW$XTLIBSHRR5.EXE/SHARE SYS$SHARE:DECW$XLIBSHR.EXE/SHARE xscreensaver-5.36/hacks/glx/xscreensaver-gl-helper.c000644 000767 000024 00000003603 12701612217 022553 0ustar00jwzstaff000000 000000 /* xscreensaver, Copyright (c) 2000, 2002 by 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. */ /* xscreensaver-gl-helper -- prints the ID of the best visual to use for GL programs on stdout. */ #include "utils.h" #include "visual.h" #include #include char *progname = 0; char *progclass = "XScreenSaver"; int main (int argc, char **argv) { Display *dpy; Screen *screen; Visual *visual; char *d = getenv ("DISPLAY"); int i; progname = argv[0]; for (i = 1; i < argc; i++) { if (argv[i][0] == '-' && argv[i][1] == '-') argv[i]++; if (strlen(argv[i]) >= 2 && !strncmp ("-display", argv[i], strlen(argv[i]))) { if (i == argc-1) goto LOSE; d = argv[i+1]; i++; } else { LOSE: fprintf (stderr, "usage: %s [ -display host:dpy.screen ]\n", progname); fprintf (stderr, "This program prints out the ID of the best " "X visual for GL programs to use.\n"); exit (1); } } dpy = XOpenDisplay (d); if (!dpy) { fprintf (stderr, "%s: couldn't open display %s\n", progname, (d ? d : "(null)")); exit (1); } screen = DefaultScreenOfDisplay (dpy); visual = get_gl_visual (screen); if (visual) printf ("0x%x\n", (unsigned int) XVisualIDFromVisual (visual)); else printf ("none\n"); exit (0); } xscreensaver-5.36/hacks/glx/normals.c000644 000767 000024 00000002754 12701612217 017647 0ustar00jwzstaff000000 000000 /* normals, Copyright (c) 2002-2004 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. * * Compute normal vectors for arbitrary triangles. */ #ifdef HAVE_CONFIG_H # include "config.h" #endif #include "normals.h" /* Calculate the unit normal at p given two other points p1,p2 on the surface. The normal points in the direction of p1 crossproduct p2 */ XYZ calc_normal (XYZ p, XYZ p1, XYZ p2) { XYZ n, pa, pb; pa.x = p1.x - p.x; pa.y = p1.y - p.y; pa.z = p1.z - p.z; pb.x = p2.x - p.x; pb.y = p2.y - p.y; pb.z = p2.z - p.z; n.x = pa.y * pb.z - pa.z * pb.y; n.y = pa.z * pb.x - pa.x * pb.z; n.z = pa.x * pb.y - pa.y * pb.x; return (n); } /* Call glNormal3f() with a normal of the indicated triangle. */ void do_normal(GLfloat x1, GLfloat y1, GLfloat z1, GLfloat x2, GLfloat y2, GLfloat z2, GLfloat x3, GLfloat y3, GLfloat z3) { XYZ p1, p2, p3, p; p1.x = x1; p1.y = y1; p1.z = z1; p2.x = x2; p2.y = y2; p2.z = z2; p3.x = x3; p3.y = y3; p3.z = z3; p = calc_normal (p1, p2, p3); glNormal3f (p.x, p.y, p.z); } xscreensaver-5.36/hacks/glx/fps-gl.c000644 000767 000024 00000005124 12717750250 017365 0ustar00jwzstaff000000 000000 /* fps, Copyright (c) 2001-2015 Jamie Zawinski * Draw a frames-per-second display (Xlib and OpenGL). * * 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. */ #ifdef HAVE_CONFIG_H # include "config.h" #endif /* HAVE_CONFIG_H */ #ifdef HAVE_COCOA # include "jwxyz.h" #elif defined(HAVE_ANDROID) # include #else /* real Xlib */ # include # include #endif /* !HAVE_COCOA */ #ifdef HAVE_JWZGLES # include "jwzgles.h" #endif /* HAVE_JWZGLES */ #include "xlockmoreI.h" #include "fpsI.h" #include "texfont.h" /* These are in xlock-gl.c */ extern void clear_gl_error (void); extern void check_gl_error (const char *type); typedef struct { texture_font_data *texfont; int line_height; Bool top_p; } gl_fps_data; static void xlockmore_gl_fps_init (fps_state *st) { gl_fps_data *data = (gl_fps_data *) calloc (1, sizeof(*data)); int ascent, descent; data->top_p = get_boolean_resource (st->dpy, "fpsTop", "FPSTop"); data->texfont = load_texture_font (st->dpy, "fpsFont"); texture_string_metrics (data->texfont, "M", 0, &ascent, &descent); data->line_height = ascent + descent; st->gl_fps_data = data; } /* Callback in xscreensaver_function_table, via xlockmore.c. */ void xlockmore_gl_compute_fps (Display *dpy, Window w, fps_state *fpst, void *closure) { ModeInfo *mi = (ModeInfo *) closure; if (! mi->fpst) { mi->fpst = fpst; xlockmore_gl_fps_init (fpst); } fps_compute (fpst, mi->polygon_count, mi->recursion_depth); } /* Called directly from GL programs (as `do_fps') before swapping buffers. */ void xlockmore_gl_draw_fps (ModeInfo *mi) { fps_state *st = mi->fpst; if (st) /* might be too early */ { gl_fps_data *data = (gl_fps_data *) st->gl_fps_data; XWindowAttributes xgwa; int lines = 1; const char *s; XGetWindowAttributes (st->dpy, st->window, &xgwa); for (s = st->string; *s; s++) if (*s == '\n') lines++; glColor3f (1, 1, 1); print_texture_label (st->dpy, data->texfont, xgwa.width, xgwa.height, (data->top_p ? 1 : 2), st->string); } } xscreensaver-5.36/hacks/glx/atlantis.c000664 000767 000024 00000042641 12705561063 020022 0ustar00jwzstaff000000 000000 /* atlantis --- Shows moving 3D sea animals */ #if 0 static const char sccsid[] = "@(#)atlantis.c 5.08 2003/04/09 xlockmore"; #endif /* Copyright (c) E. Lassauge, 1998. */ /* * Permission to use, copy, modify, and distribute this software and its * documentation for any purpose and without fee is hereby granted, * provided that the above copyright notice appear in all copies and that * both that copyright notice and this permission notice appear in * supporting documentation. * * This file is provided AS IS with no warranties of any kind. The author * shall have no liability with respect to the infringement of copyrights, * trade secrets or any patents by this file or any part thereof. In no * event will the author be liable for any lost revenue or profits or * other special, indirect and consequential damages. * * The original code for this mode was written by Mark J. Kilgard * as a demo for openGL programming. * * Porting it to xlock was possible by comparing the original Mesa's morph3d * demo with it's ported version to xlock, so thanks for Marcelo F. Vianna * (look at morph3d.c) for his indirect help. * * Thanks goes also to Brian Paul for making it possible and inexpensive * to use OpenGL at home. * * My e-mail address is lassauge@users.sourceforge.net * * Eric Lassauge (May-13-1998) * * REVISION HISTORY: * * Jamie Zawinski, 2-Apr-01: - The fishies were inside out! The back faces * were being drawn, not the front faces. * - Added a texture to simulate light from the * surface, like in the SGI version. * * David A. Bagley - 98/06/17 : Add whalespeed option. Global options to * initialize local variables are now: * XLock.atlantis.cycles: 100 ! SharkSpeed * XLock.atlantis.batchcount: 4 ! SharkNum * XLock.atlantis.whalespeed: 250 ! WhaleSpeed * XLock.atlantis.size: 6000 ! SharkSize * Add random direction for whales/dolphins * * E.Lassauge - 98/06/16: Use the following global options to initialize * local variables : * XLock.atlantis.delay: 100 ! SharkSpeed * XLock.atlantis.batchcount: 4 ! SharkNum * XLock.atlantis.cycles: 250 ! WhaleSpeed * XLock.atlantis.size: 6000 ! SharkSize * Add support for -/+ wireframe (t'was so easy to do!) * * TODO : * - better handling of sizes and speeds * - test standalone and module modes * - purify it (!) */ /* Copyright (c) Mark J. Kilgard, 1994. */ /** * (c) Copyright 1993, 1994, Silicon Graphics, Inc. * ALL RIGHTS RESERVED * Permission to use, copy, modify, and distribute this software for * any purpose and without fee is hereby granted, provided that the above * copyright notice appear in all copies and that both the copyright notice * and this permission notice appear in supporting documentation, and that * the name of Silicon Graphics, Inc. not be used in advertising * or publicity pertaining to distribution of the software without specific, * written prior permission. * * THE MATERIAL EMBODIED ON THIS SOFTWARE IS PROVIDED TO YOU "AS-IS" * AND WITHOUT WARRANTY OF ANY KIND, EXPRESS, IMPLIED OR OTHERWISE, * INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY OR * FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL SILICON * GRAPHICS, INC. BE LIABLE TO YOU OR ANYONE ELSE FOR ANY DIRECT, * SPECIAL, INCIDENTAL, INDIRECT OR CONSEQUENTIAL DAMAGES OF ANY * KIND, OR ANY DAMAGES WHATSOEVER, INCLUDING WITHOUT LIMITATION, * LOSS OF PROFIT, LOSS OF USE, SAVINGS OR REVENUE, OR THE CLAIMS OF * THIRD PARTIES, WHETHER OR NOT SILICON GRAPHICS, INC. HAS BEEN * ADVISED OF THE POSSIBILITY OF SUCH LOSS, HOWEVER CAUSED AND ON * ANY THEORY OF LIABILITY, ARISING OUT OF OR IN CONNECTION WITH THE * POSSESSION, USE OR PERFORMANCE OF THIS SOFTWARE. * * US Government Users Restricted Rights * Use, duplication, or disclosure by the Government is subject to * restrictions set forth in FAR 52.227.19(c)(2) or subparagraph * (c)(1)(ii) of the Rights in Technical Data and Computer Software * clause at DFARS 252.227-7013 and/or in similar or successor * clauses in the FAR or the DOD or NASA FAR Supplement. * Unpublished-- rights reserved under the copyright laws of the * United States. Contractor/manufacturer is Silicon Graphics, * Inc., 2011 N. Shoreline Blvd., Mountain View, CA 94039-7311. * * OpenGL(TM) is a trademark of Silicon Graphics, Inc. */ #define DEF_TEXTURE "True" #define DEF_GRADIENT "True" #define DEF_WHALESPEED "250" #ifdef STANDALONE # define DEFAULTS "*delay: 25000 \n" \ "*count: 4 \n" \ "*showFPS: False \n" \ "*cycles: 100 \n" \ "*size: 6000 \n" \ "*wireframe: False \n" # define atlantis_handle_event 0 # include "xlockmore.h" /* from the xscreensaver distribution */ #else /* !STANDALONE */ # include "xlock.h" /* from the xlockmore distribution */ # include "vis.h" #endif /* !STANDALONE */ #ifdef USE_GL #include "atlantis.h" static int whalespeed; static int do_texture; static int do_gradient; static XrmOptionDescRec opts[] = { {"-whalespeed", ".atlantis.whalespeed", XrmoptionSepArg, 0}, {"-texture", ".atlantis.texture", XrmoptionNoArg, "true"}, {"+texture", ".atlantis.texture", XrmoptionNoArg, "false"}, {"-gradient", ".atlantis.gradient", XrmoptionNoArg, "true"}, {"+gradient", ".atlantis.gradient", XrmoptionNoArg, "false"}, }; static argtype vars[] = { {&whalespeed, "whalespeed", "WhaleSpeed", DEF_WHALESPEED, t_Int}, {&do_texture, "texture", "Texture", DEF_TEXTURE, t_Bool}, {&do_gradient, "gradient", "Gradient", DEF_GRADIENT, t_Bool}, }; static OptionStruct desc[] = { {"-whalespeed num", "speed of whales and the dolphin"}, {"-texture", "whether to introduce water-like distortion"}, {"-gradient", "whether to introduce gradient-filled background"}, }; ENTRYPOINT ModeSpecOpt atlantis_opts = {sizeof opts / sizeof opts[0], opts, sizeof vars / sizeof vars[0], vars, desc}; #ifdef USE_MODULES ModStruct atlantis_description = {"atlantis", "init_atlantis", "draw_atlantis", "release_atlantis", "refresh_atlantis", "change_atlantis", NULL, &atlantis_opts, 1000, NUM_SHARKS, SHARKSPEED, SHARKSIZE, 64, 1.0, "", "Shows moving sharks/whales/dolphin", 0, NULL}; #endif static atlantisstruct *atlantis = NULL; #include "xpm-ximage.h" #include "../images/sea-texture.xpm" static void parse_image_data(ModeInfo *mi) { atlantisstruct *ap = &atlantis[MI_SCREEN(mi)]; ap->texture = xpm_to_ximage (mi->dpy, mi->xgwa.visual, mi->xgwa.colormap, sea_texture); } static void InitFishs(atlantisstruct * ap) { int i; for (i = 0; i < ap->num_sharks; i++) { ap->sharks[i].x = 70000.0 + NRAND(ap->sharksize); ap->sharks[i].y = NRAND(ap->sharksize); ap->sharks[i].z = NRAND(ap->sharksize); ap->sharks[i].psi = NRAND(360) - 180.0; ap->sharks[i].v = 1.0; } /* Random whale direction */ ap->whaledir = LRAND() & 1; ap->dolph.x = 30000.0; ap->dolph.y = 0.0; ap->dolph.z = (float) (ap->sharksize); ap->dolph.psi = (ap->whaledir) ? 90.0 : -90.0; ap->dolph.theta = 0.0; ap->dolph.v = 6.0; ap->momWhale.x = 70000.0; ap->momWhale.y = 0.0; ap->momWhale.z = 0.0; ap->momWhale.psi = (ap->whaledir) ? 90.0 : -90.0; ap->momWhale.theta = 0.0; ap->momWhale.v = 3.0; ap->babyWhale.x = 60000.0; ap->babyWhale.y = -2000.0; ap->babyWhale.z = -2000.0; ap->babyWhale.psi = (ap->whaledir) ? 90.0 : -90.0; ap->babyWhale.theta = 0.0; ap->babyWhale.v = 3.0; } static void Init(ModeInfo *mi) { atlantisstruct *ap = &atlantis[MI_SCREEN(mi)]; static const float ambient[] = {0.1, 0.1, 0.1, 1.0}; static const float diffuse[] = {1.0, 1.0, 1.0, 1.0}; static const float position[] = {0.0, 1.0, 0.0, 0.0}; static const float mat_shininess[] = {90.0}; static const float mat_specular[] = {0.8, 0.8, 0.8, 1.0}; static const float mat_diffuse[] = {0.46, 0.66, 0.795, 1.0}; static const float mat_ambient[] = {0.0, 0.1, 0.2, 1.0}; static const float lmodel_ambient[] = {0.4, 0.4, 0.4, 1.0}; static const float lmodel_localviewer[] = {0.0}; float fblue = 0.0, fgreen; glFrontFace(GL_CCW); if (ap->wire) { glDisable(GL_DEPTH_TEST); glDisable(GL_CULL_FACE); glDisable(GL_LIGHTING); glDisable(GL_NORMALIZE); } else { glDepthFunc(GL_LEQUAL); glEnable(GL_DEPTH_TEST); glEnable(GL_CULL_FACE); glEnable(GL_NORMALIZE); glShadeModel(GL_SMOOTH); glLightfv(GL_LIGHT0, GL_AMBIENT, ambient); glLightfv(GL_LIGHT0, GL_DIFFUSE, diffuse); glLightfv(GL_LIGHT0, GL_POSITION, position); glLightModelfv(GL_LIGHT_MODEL_AMBIENT, lmodel_ambient); glLightModelfv(GL_LIGHT_MODEL_LOCAL_VIEWER, lmodel_localviewer); glEnable(GL_LIGHTING); glEnable(GL_LIGHT0); glMaterialfv(GL_FRONT_AND_BACK, GL_SHININESS, mat_shininess); glMaterialfv(GL_FRONT_AND_BACK, GL_SPECULAR, mat_specular); glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, mat_diffuse); glMaterialfv(GL_FRONT_AND_BACK, GL_AMBIENT, mat_ambient); } if (ap->wire || !do_texture) { glDisable(GL_TEXTURE_2D); } else { GLfloat scale = 0.0005; if (!ap->texture) parse_image_data (mi); clear_gl_error(); glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, ap->texture->width, ap->texture->height, 0, GL_RGBA, GL_UNSIGNED_BYTE, ap->texture->data); check_gl_error("texture"); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE); # ifndef HAVE_JWZGLES { GLfloat s_plane[] = { 1, 0, 0, 0 }; GLfloat t_plane[] = { 0, 0, 1, 0 }; glTexGeni (GL_S, GL_TEXTURE_GEN_MODE, GL_EYE_LINEAR); glTexGeni (GL_T, GL_TEXTURE_GEN_MODE, GL_EYE_LINEAR); glTexGenfv(GL_S, GL_EYE_PLANE, s_plane); glTexGenfv(GL_T, GL_EYE_PLANE, t_plane); glEnable(GL_TEXTURE_GEN_S); glEnable(GL_TEXTURE_GEN_T); } # endif glEnable(GL_TEXTURE_2D); glMatrixMode(GL_TEXTURE); glLoadIdentity(); glScalef(scale, scale, 1); glMatrixMode(GL_MODELVIEW); } InitFishs(ap); /* Add a little randomness */ fblue = ((float) (NRAND(30)) / 100.0) + 0.70; fgreen = fblue * 0.56; glClearColor(0.0, fgreen, fblue, 1.0); } ENTRYPOINT void reshape_atlantis(ModeInfo * mi, int width, int height) { atlantisstruct *ap = &atlantis[MI_SCREEN(mi)]; glViewport(0, 0, ap->WinW = (GLint) width, ap->WinH = (GLint) height); glMatrixMode(GL_PROJECTION); glLoadIdentity(); gluPerspective(400.0, (GLdouble) width / (GLdouble) height, 1.0, 2000000.0); glMatrixMode(GL_MODELVIEW); } /* Fill the background with a gradient -- thanks to Phil Carrig for figuring out how to do this more efficiently! */ static void clear_tank (atlantisstruct * ap) { glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); if (do_gradient && !ap->wire) { GLfloat top[4] = { 0.00, 0.40, 0.70, }; GLfloat bot[4] = { 0.00, 0.05, 0.18, }; glMatrixMode(GL_PROJECTION); glPushMatrix(); { glLoadIdentity(); glMatrixMode(GL_MODELVIEW); glPushMatrix(); { glLoadIdentity(); /* glRotatef(current_device_rotation(), 0, 0, 1); */ # ifndef HAVE_JWZGLES glShadeModel (GL_SMOOTH); # endif glDisable (GL_LIGHTING); glBegin (GL_QUADS); glColor3fv (bot); glVertex3f (-1, -1, 1); glVertex3f ( 1, -1, 1); glColor3fv (top); glVertex3f ( 1, 1, 1); glVertex3f (-1, 1, 1); glEnd(); glEnable (GL_LIGHTING); } glPopMatrix(); } glMatrixMode(GL_PROJECTION); glPopMatrix(); glMatrixMode(GL_MODELVIEW); } } static void Animate(atlantisstruct * ap) { int i; for (i = 0; i < ap->num_sharks; i++) { SharkPilot(&(ap->sharks[i]), ap->sharkspeed); SharkMiss(ap, i); } WhalePilot(&(ap->dolph), ap->whalespeed, ap->whaledir); ap->dolph.phi++; WhalePilot(&(ap->momWhale), ap->whalespeed, ap->whaledir); ap->momWhale.phi++; WhalePilot(&(ap->babyWhale), ap->whalespeed, ap->whaledir); ap->babyWhale.phi++; } static void AllDisplay(atlantisstruct * ap) { int i; clear_tank(ap); for (i = 0; i < ap->num_sharks; i++) { glPushMatrix(); FishTransform(&(ap->sharks[i])); DrawShark(&(ap->sharks[i]), ap->wire); glPopMatrix(); } glPushMatrix(); FishTransform(&(ap->dolph)); DrawDolphin(&(ap->dolph), ap->wire); glPopMatrix(); glPushMatrix(); FishTransform(&(ap->momWhale)); DrawWhale(&(ap->momWhale), ap->wire); glPopMatrix(); glPushMatrix(); FishTransform(&(ap->babyWhale)); glScalef(0.45, 0.45, 0.3); DrawWhale(&(ap->babyWhale), ap->wire); glPopMatrix(); } /* *----------------------------------------------------------------------------- *----------------------------------------------------------------------------- * Xlock hooks. *----------------------------------------------------------------------------- *----------------------------------------------------------------------------- */ /* *----------------------------------------------------------------------------- * Initialize atlantis. Called each time the window changes. *----------------------------------------------------------------------------- */ ENTRYPOINT void init_atlantis(ModeInfo * mi) { int screen = MI_SCREEN(mi); atlantisstruct *ap; Display *display = MI_DISPLAY(mi); Window window = MI_WINDOW(mi); if (atlantis == NULL) { if ((atlantis = (atlantisstruct *) calloc(MI_NUM_SCREENS(mi), sizeof (atlantisstruct))) == NULL) return; } ap = &atlantis[screen]; ap->num_sharks = MI_COUNT(mi); if (ap->sharks == NULL) { if ((ap->sharks = (fishRec *) calloc(ap->num_sharks, sizeof (fishRec))) == NULL) { /* free everything up to now */ (void) free((void *) atlantis); atlantis = NULL; return; } } ap->sharkspeed = MI_CYCLES(mi); /* has influence on the "width" of the movement */ ap->sharksize = MI_SIZE(mi); /* has influence on the "distance" of the sharks */ ap->whalespeed = whalespeed; ap->wire = MI_IS_WIREFRAME(mi); if (MI_IS_DEBUG(mi)) { (void) fprintf(stderr, "%s:\n\tnum_sharks=%d\n\tsharkspeed=%.1f\n\tsharksize=%d\n\twhalespeed=%.1f\n\twireframe=%s\n", MI_NAME(mi), ap->num_sharks, ap->sharkspeed, ap->sharksize, ap->whalespeed, ap->wire ? "yes" : "no" ); } if ((ap->glx_context = init_GL(mi)) != NULL) { reshape_atlantis(mi, MI_WIDTH(mi), MI_HEIGHT(mi)); glDrawBuffer(GL_BACK); Init(mi); AllDisplay(ap); glXSwapBuffers(display, window); } else { MI_CLEARWINDOW(mi); } } /* *----------------------------------------------------------------------------- * Called by the mainline code periodically to update the display. *----------------------------------------------------------------------------- */ ENTRYPOINT void draw_atlantis(ModeInfo * mi) { atlantisstruct *ap = &atlantis[MI_SCREEN(mi)]; Display *display = MI_DISPLAY(mi); Window window = MI_WINDOW(mi); MI_IS_DRAWN(mi) = True; if (!ap->glx_context) return; glXMakeCurrent(display, window, *(ap->glx_context)); glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glPushMatrix(); glRotatef(current_device_rotation(), 0, 0, 1); AllDisplay(ap); Animate(ap); glPopMatrix(); if (mi->fps_p) do_fps (mi); glXSwapBuffers(display, window); } /* *----------------------------------------------------------------------------- * The display is being taken away from us. Free up malloc'ed * memory and X resources that we've alloc'ed. Only called * once, we must zap everything for every screen. *----------------------------------------------------------------------------- */ ENTRYPOINT void release_atlantis(ModeInfo * mi) { #if 0 int screen; if (atlantis != NULL) { for (screen = 0; screen < MI_NUM_SCREENS(mi); screen++) { atlantisstruct *ap = &atlantis[screen]; if (ap->sharks) (void) free((void *) ap->sharks); } (void) free((void *) atlantis); atlantis = NULL; } FreeAllGL(mi); #endif } ENTRYPOINT void refresh_atlantis(ModeInfo * mi) { } #ifndef STANDALONE ENTRYPOINT void change_atlantis(ModeInfo * mi) { atlantisstruct *ap = &atlantis[MI_SCREEN(mi)]; if (!ap->glx_context) return; glXMakeCurrent(MI_DISPLAY(mi), MI_WINDOW(mi), *(ap->glx_context)); Init(mi); } #endif /* !STANDALONE */ XSCREENSAVER_MODULE ("Atlantis", atlantis) #endif /* USE_GL */ xscreensaver-5.36/hacks/glx/b_draw.c000644 000767 000024 00000013053 12701612217 017424 0ustar00jwzstaff000000 000000 #if 0 static const char sccsid[] = "@(#)b_draw.c 4.11 98/06/16 xlockmore"; #endif /*- * BUBBLE3D (C) 1998 Richard W.M. Jones. * b_draw.c: This code creates new bubbles, manages them and controls * them as they are drawn on the screen. */ #include "bubble3d.h" typedef struct draw_context { /* The list of bubbles currently on the screen. */ void **bubble_list; int nr_bubbles; /* When was the last time we created a new bubble? */ int bubble_count; glb_data *d; } draw_context; void * glb_draw_init(void) { draw_context *c; GLfloat mat_specular[] = {1, 1, 1, 1}; GLfloat mat_emission[] = {0, 0, 0, 1}; GLfloat mat_shininess[] = {100}; GLfloat ambient[] = {0.5, 0.5, 0.5, 1.0}; GLfloat light_position[][4] = { {0, -1, 0, 0}, {1, 1, 0, 0}, {-1, 0, 1, 0}}; GLfloat light_diffuse[][4] = { {1, 1, 1, 1}, {1, 1, 1, 1}, {1, 1, 1, 1}}; GLfloat light_specular[][4] = { {1, 1, 1, 1}, {1, 1, 1, 1}, {1, 1, 1, 1}}; /* Initialize the context. */ c = (struct draw_context *) malloc(sizeof (struct draw_context)); if (c == 0) return 0; c->bubble_list = 0; c->nr_bubbles = 0; c->bubble_count = glb_config.create_bubbles_every; /* Do some GL initialization. */ glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, glb_config.bubble_colour); glMaterialfv(GL_FRONT_AND_BACK, GL_SPECULAR, mat_specular); glMaterialfv(GL_FRONT_AND_BACK, GL_EMISSION, mat_emission); glMaterialfv(GL_FRONT_AND_BACK, GL_SHININESS, mat_shininess); if (glb_config.transparent_p) glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); glEnable(GL_LIGHTING); glEnable(GL_LIGHT0); glEnable(GL_LIGHT1); glEnable(GL_LIGHT2); if (glb_config.transparent_p) glEnable(GL_BLEND); else glEnable(GL_DEPTH_TEST); glEnable(GL_AUTO_NORMAL); glEnable(GL_NORMALIZE); if (glb_config.transparent_p) glLightModeli(GL_LIGHT_MODEL_TWO_SIDE, GL_TRUE); glLightModelfv(GL_LIGHT_MODEL_AMBIENT, ambient); glLightfv(GL_LIGHT0, GL_POSITION, light_position[0]); glLightfv(GL_LIGHT0, GL_DIFFUSE, light_diffuse[0]); glLightfv(GL_LIGHT0, GL_SPECULAR, light_specular[0]); glLightfv(GL_LIGHT1, GL_POSITION, light_position[1]); glLightfv(GL_LIGHT1, GL_DIFFUSE, light_diffuse[1]); glLightfv(GL_LIGHT1, GL_SPECULAR, light_specular[1]); glLightfv(GL_LIGHT2, GL_POSITION, light_position[2]); glLightfv(GL_LIGHT2, GL_DIFFUSE, light_diffuse[2]); glLightfv(GL_LIGHT2, GL_SPECULAR, light_specular[2]); c->d = glb_sphere_init(); return c; } static void delete_bubble(draw_context * c, int j) { int i; glb_bubble_delete(c->bubble_list[j]); for (i = j; i < c->nr_bubbles - 1; ++i) c->bubble_list[i] = c->bubble_list[i + 1]; c->nr_bubbles--; } void glb_draw_end(void *cc) { draw_context *c = (draw_context *) cc; int i; for (i = 0; i < c->nr_bubbles; ++i) { delete_bubble(c, i); i--; } glb_sphere_end (c->d); (void) free((void *) c->bubble_list); (void) free((void *) c); } static int create_new_bubbles(draw_context * c) { int n, i; double r = glb_drand(); GLfloat size, speed, scale_incr, x, y, z; void *b[4]; void **old_bubble_list; /* How many bubbles to make? */ if (r < glb_config.p_bubble_group[0]) n = 1; else if (r < glb_config.p_bubble_group[1]) n = 2; else if (r < glb_config.p_bubble_group[2]) n = 3; else n = 4; /* Initial position of top-most bubble in group. */ x = glb_drand() * 4 - 2; y = glb_config.screen_bottom; z = glb_drand() * 2 - 2; /* What size? */ size = glb_config.min_size + glb_drand() * (glb_config.max_size - glb_config.min_size); /* What speed? */ speed = glb_config.min_speed + glb_drand() * (glb_config.max_speed - glb_config.min_speed); /* Work out the scaling increment. Bubbles should increase by scale_factor * as they go from bottom to top of screen. */ scale_incr = (size * glb_config.scale_factor - size) / ((glb_config.screen_top - glb_config.screen_bottom) / speed); /* Create the bubble(s). */ for (i = 0; i < n; ++i) { if ((b[i] = glb_bubble_new(c->d, x, y, z, size, speed, scale_incr)) == 0) { /* Out of memory - recover. */ i--; while (i >= 0) glb_bubble_delete(b[i]); return 0; } /* Create the next bubble below the last bubble. */ y -= size * 3; } /* Add the bubbles to the list. */ c->nr_bubbles += n; old_bubble_list = c->bubble_list; if (c->bubble_list == 0) { c->bubble_list = (void **) malloc(c->nr_bubbles * sizeof (void *)); } else { c->bubble_list = (void **) realloc(c->bubble_list, c->nr_bubbles * sizeof (void *)); } if (c->bubble_list == 0) { /* Out of memory - recover. */ for (i = 0; i < n; ++i) glb_bubble_delete(b[i]); c->bubble_list = old_bubble_list; c->nr_bubbles -= n; return 0; } for (i = 0; i < n; ++i) c->bubble_list[c->nr_bubbles - i - 1] = b[i]; return 1; } void glb_draw_step(void *cc) { draw_context *c = (draw_context *) cc; int i; /* Consider creating a new bubble or bubbles. */ if (c->nr_bubbles < glb_config.max_bubbles && c->bubble_count++ > glb_config.create_bubbles_every) { if (create_new_bubbles(c)) c->bubble_count = 0; } /* Clear the display. */ glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); /* XXX Draw the background here ... */ /* Draw all the bubbles on the display. */ for (i = 0; i < c->nr_bubbles; ++i) { void *b = c->bubble_list[i]; glb_bubble_step(b); glb_bubble_draw(c->d, b); /* Has the bubble reached the top of the screen? */ if (glb_bubble_get_y(b) >= glb_config.screen_top) { delete_bubble(c, i); i--; } } } xscreensaver-5.36/hacks/glx/b_lockglue.c000644 000767 000024 00000012741 12716715055 020311 0ustar00jwzstaff000000 000000 #if 0 static const char sccsid[] = "@(#)b_lockglue.c 4.11 98/06/16 xlockmore"; #endif /*- * BUBBLE3D (C) 1998 Richard W.M. Jones. * b_lockglue.c: Glue to make this all work with xlockmore. */ #include "bubble3d.h" /* XXX This lot should eventually be made configurable using the * options stuff below. */ struct glb_config glb_config = { 0, /* transparent_p */ #if GLB_SLOW_GL 2, /* subdivision_depth */ #else 3, /* subdivision_depth */ #endif 5, /* nr_nudge_axes */ 0.01, /* nudge_angle_factor */ 0.20, /* nudge_factor */ 0.1, /* rotation_factor */ 8, /* create_bubbles_every */ 8, /* max_bubbles */ {0.7, 0.8, 0.9, 1.0}, /* p_bubble_group */ 0.5, /* max_size */ 0.1, /* min_size */ 0.03, /* max_speed */ 0.005, /* min_speed */ 1.5, /* scale_factor */ -4, /* screen_bottom */ 4, /* screen_top */ {0.0, 0.0, 0.7, 0.3} /* bubble_colour */ }; #ifdef STANDALONE # define DEFAULTS "*delay: 10000 \n" \ "*showFPS: False \n" # define refresh_bubble3d 0 # define bubble3d_handle_event 0 #include "xlockmore.h" #else #include "xlock.h" #include "vis.h" #endif #ifdef USE_GL #define DEF_TRANSPARENT "True" #define DEF_BUBBLECOLOR "random" static Bool transparent_p; static char *bubble_color_str; #undef countof #define countof(x) (sizeof((x))/sizeof((*x))) static XrmOptionDescRec opts[] = { { "-transparent", ".transparent", XrmoptionNoArg, "True" }, { "+transparent", ".transparent", XrmoptionNoArg, "False" }, { "-color", ".bubblecolor", XrmoptionSepArg, 0 }, }; static argtype vars[] = { {&transparent_p, "transparent", "Transparent", DEF_TRANSPARENT, t_Bool}, {&bubble_color_str, "bubblecolor", "BubbleColor", DEF_BUBBLECOLOR, t_String}, }; ENTRYPOINT ModeSpecOpt bubble3d_opts = {countof(opts), opts, countof(vars), vars, NULL}; #ifdef USE_MODULES ModStruct bubbles3d_description = {"bubbles3d", "init_bubble3d", "draw_bubble3d", "release_bubble3d", "change_bubble3d", "init_bubble3d", NULL, &bubble3d_opts, 1000, 1, 2, 1, 64, 1.0, "", "Richard Jones's GL bubbles", 0, NULL }; #endif /* USE_MODULES */ struct context { GLXContext *glx_context; void *draw_context; }; static struct context *contexts = 0; static void parse_color (ModeInfo *mi, const char *name, const char *s, GLfloat *a) { XColor c; if (! XParseColor (MI_DISPLAY(mi), MI_COLORMAP(mi), s, &c)) { fprintf (stderr, "%s: can't parse %s color %s", progname, name, s); exit (1); } a[0] = c.red / 65536.0; a[1] = c.green / 65536.0; a[2] = c.blue / 65536.0; } static void init_colors(ModeInfo *mi) { if (strncasecmp(bubble_color_str, "auto", strlen("auto")) == 0) { glb_config.bubble_colour[0] = ((float) (NRAND(100)) / 100.0); glb_config.bubble_colour[1] = ((float) (NRAND(100)) / 100.0); /* I keep more blue */ glb_config.bubble_colour[2] = ((float) (NRAND(50)) / 100.0) + 0.50; } else if (strncasecmp(bubble_color_str, "random", strlen("random")) == 0) { glb_config.bubble_colour[0] = -1.0; } else { parse_color(mi, "bubble", bubble_color_str, glb_config.bubble_colour); } } static void init(struct context *c) { glb_config.transparent_p = transparent_p; glb_sphere_init(); c->draw_context = glb_draw_init(); } ENTRYPOINT void reshape_bubble3d(ModeInfo *mi, int w, int h) { glViewport(0, 0, (GLsizei) w, (GLsizei) h); glMatrixMode(GL_PROJECTION); glLoadIdentity(); gluPerspective(45, (GLdouble) w / (GLdouble) h, 3, 8); glMatrixMode(GL_MODELVIEW); glLoadIdentity(); glTranslatef(0, 0, -5); } static void do_display(struct context *c) { glb_draw_step(c->draw_context); } ENTRYPOINT void init_bubble3d(ModeInfo * mi) { Display *display = MI_DISPLAY(mi); Window window = MI_WINDOW(mi); int screen = MI_SCREEN(mi); struct context *c; if (contexts == 0) { contexts = (struct context *) calloc(sizeof (struct context), MI_NUM_SCREENS(mi)); if (contexts == 0) return; } c = &contexts[screen]; c->glx_context = init_GL(mi); init_colors(mi); if (c->glx_context != 0) { init(c); reshape_bubble3d(mi, MI_WIDTH(mi), MI_HEIGHT(mi)); do_display(c); glFinish(); glXSwapBuffers(display, window); } else MI_CLEARWINDOW(mi); } ENTRYPOINT void draw_bubble3d(ModeInfo * mi) { struct context *c = &contexts[MI_SCREEN(mi)]; Display *display = MI_DISPLAY(mi); Window window = MI_WINDOW(mi); MI_IS_DRAWN(mi) = True; if (!c->glx_context) return; glXMakeCurrent(display, window, *(c->glx_context)); glb_config.polygon_count = 0; glPushMatrix(); # ifdef HAVE_MOBILE /* Keep it the same relative size when rotated. */ { GLfloat h = MI_HEIGHT(mi) / (GLfloat) MI_WIDTH(mi); int o = (int) current_device_rotation(); if (o != 0 && o != 180 && o != -180) glScalef (1/h, 1/h, 1/h); glRotatef(o, 0, 0, 1); } # endif do_display(c); glPopMatrix(); mi->polygon_count = glb_config.polygon_count; if (mi->fps_p) do_fps (mi); glFinish(); glXSwapBuffers(display, window); } #ifndef STANDALONE ENTRYPOINT void change_bubble3d(ModeInfo * mi) { /* nothing */ } #endif /* !STANDALONE */ ENTRYPOINT void release_bubble3d(ModeInfo * mi) { if (contexts) { int screen; for (screen = 0; screen < MI_NUM_SCREENS(mi); screen++) { struct context *c = &contexts[screen]; if (c->draw_context) glb_draw_end(c->draw_context); } free (contexts); contexts = 0; } FreeAllGL(mi); } XSCREENSAVER_MODULE ("Bubble3D", bubble3d) #endif /* USE_GL */ xscreensaver-5.36/hacks/glx/b_sphere.c000644 000767 000024 00000011673 12701612217 017763 0ustar00jwzstaff000000 000000 #if 0 static const char sccsid[] = "@(#)b_sphere.c 4.11 98/06/16 xlockmore"; #endif /*- * BUBBLE3D (C) 1998 Richard W.M. Jones. * b_sphere.c: Create a list of vertices and triangles in a * normalized sphere, which is then later used as the basic shape * for all bubbles. This code is run once when the program starts * up. */ #include "bubble3d.h" typedef glb_vertex vertex; typedef glb_triangle triangle; struct glb_data { /* The list of vertices created. */ vertex *vertices; int nr_vertices, nr_vertices_allocated; /* The list of triangles created. */ triangle *triangles; int nr_triangles, nr_triangles_allocated; }; #define EPSILON GLB_VERTICES_EPSILON /* Should be taken care of already... but just in case */ #if !defined( __GNUC__ ) && !defined(__cplusplus) && !defined(c_plusplus) #undef inline #define inline /* */ #endif static inline int close_enough(const GLfloat * v1, const GLfloat * v2) { return fabs((double) (v1[0] - v2[0])) <= EPSILON && fabs((double) (v1[1] - v2[1])) <= EPSILON && fabs((double) (v1[2] - v2[2])) <= EPSILON; } #define INCR(n) ((n == 0) ? (n = 1) : (n *= 2)) #define INCR_ALLOCATION(a, n, t) (a = (t *) realloc (a, INCR (n) * sizeof (t))) static inline GLuint save_vertex(glb_data *d, const GLfloat * v) { int i; /* Inefficient, but we only do this a few times. Check to see if there's * an existing vertex which is `close enough' to this one. */ for (i = 0; i < d->nr_vertices; ++i) if (close_enough(v, d->vertices[i])) return i; if (d->nr_vertices_allocated <= d->nr_vertices) { if (d->vertices == 0) { d->vertices = (vertex *) malloc(INCR(d->nr_vertices_allocated) * sizeof (vertex)); } else { INCR_ALLOCATION(d->vertices, d->nr_vertices_allocated, vertex); } } d->vertices[d->nr_vertices][0] = v[0]; d->vertices[d->nr_vertices][1] = v[1]; d->vertices[d->nr_vertices][2] = v[2]; return d->nr_vertices++; } static inline GLuint save_triangle(glb_data *d, GLuint v1, GLuint v2, GLuint v3) { if (d->nr_triangles_allocated <= d->nr_triangles) { if (d->triangles == 0) { d->triangles = (triangle *) malloc(INCR(d->nr_triangles_allocated) * sizeof (triangle)); } else { INCR_ALLOCATION(d->triangles, d->nr_triangles_allocated, triangle); } } d->triangles[d->nr_triangles][0] = v1; d->triangles[d->nr_triangles][1] = v2; d->triangles[d->nr_triangles][2] = v3; return d->nr_triangles++; } static inline void normalize(GLfloat v[3]) { GLfloat d = (GLfloat) sqrt((double) (v[0] * v[0] + v[1] * v[1] + v[2] * v[2])); if (d != 0) { v[0] /= d; v[1] /= d; v[2] /= d; } else { v[0] = v[1] = v[2] = 0; } } static void subdivide(glb_data *d, const GLfloat * v1, GLuint vi1, const GLfloat * v2, GLuint vi2, const GLfloat * v3, GLuint vi3, int depth) { int i; if (depth == 0) { save_triangle(d, vi1, vi2, vi3); } else { GLuint vi12, vi23, vi31; GLfloat v12[3], v23[3], v31[3]; for (i = 0; i < 3; ++i) { v12[i] = v1[i] + v2[i]; v23[i] = v2[i] + v3[i]; v31[i] = v3[i] + v1[i]; } normalize(v12); vi12 = save_vertex(d, v12); normalize(v23); vi23 = save_vertex(d, v23); normalize(v31); vi31 = save_vertex(d, v31); subdivide(d, v1, vi1, v12, vi12, v31, vi31, depth - 1); subdivide(d, v2, vi2, v23, vi23, v12, vi12, depth - 1); subdivide(d, v3, vi3, v31, vi31, v23, vi23, depth - 1); subdivide(d, v12, vi12, v23, vi23, v31, vi31, depth - 1); } } #define ICO_X 0.525731112119133606 #define ICO_Z 0.850650808352039932 static const GLfloat vdata[12][3] = { {-ICO_X, 0, ICO_Z}, {ICO_X, 0, ICO_Z}, {-ICO_X, 0, -ICO_Z}, {ICO_X, 0, -ICO_Z}, {0, ICO_Z, ICO_X}, {0, ICO_Z, -ICO_X}, {0, -ICO_Z, ICO_X}, {0, -ICO_Z, -ICO_X}, {ICO_Z, ICO_X, 0}, {-ICO_Z, ICO_X, 0}, {ICO_Z, -ICO_X, 0}, {-ICO_Z, -ICO_X, 0} }; static const GLuint tindices[20][3] = { {0, 4, 1}, {0, 9, 4}, {9, 5, 4}, {4, 5, 8}, {4, 8, 1}, {8, 10, 1}, {8, 3, 10}, {5, 3, 8}, {5, 2, 3}, {2, 7, 3}, {7, 10, 3}, {7, 6, 10}, {7, 11, 6}, {11, 0, 6}, {0, 1, 6}, {6, 1, 10}, {9, 0, 11}, {9, 11, 2}, {9, 2, 5}, {7, 2, 11} }; /* Public interface: Create the sphere. */ glb_data * glb_sphere_init(void) { glb_data *d = (glb_data *) calloc (1, sizeof (*d)); int i; for (i = 0; i < 20; ++i) { subdivide(d, vdata[tindices[i][0]], save_vertex(d, vdata[tindices[i][0]]), vdata[tindices[i][1]], save_vertex(d, vdata[tindices[i][1]]), vdata[tindices[i][2]], save_vertex(d, vdata[tindices[i][2]]), glb_config.subdivision_depth); } return d; } /* Return the vertices list. */ glb_vertex * glb_sphere_get_vertices(glb_data *d, int *nr_vertices_ptr) { *nr_vertices_ptr = d->nr_vertices; return d->vertices; } /* Return the triangles list. */ glb_triangle * glb_sphere_get_triangles(glb_data *d, int *nr_triangles_ptr) { *nr_triangles_ptr = d->nr_triangles; return d->triangles; } /* Free up memory. */ void glb_sphere_end(glb_data *d) { (void) free((void *) d->vertices); (void) free((void *) d->triangles); free (d); } xscreensaver-5.36/hacks/glx/bubble3d.c000644 000767 000024 00000017267 12701612217 017663 0ustar00jwzstaff000000 000000 /* -*- Mode: C; tab-width: 4 -*- */ /* bubble3d.c - 3D bubbles */ #if 0 static const char sccsid[] = "@(#)bubble3d.c 4.11 98/06/16 xlockmore"; #endif /*- * BUBBLE3D (C) 1998 Richard W.M. Jones. * Permission to use, copy, modify, and distribute this software and its * documentation for any purpose and without fee is hereby granted, * provided that the above copyright notice appear in all copies and that * both that copyright notice and this permission notice appear in * supporting documentation. * * This file is provided AS IS with no warranties of any kind. The author * shall have no liability with respect to the infringement of copyrights, * trade secrets or any patents by this file or any part thereof. In no * event will the author be liable for any lost revenue or profits or * other special, indirect and consequential damages. * * Revision History: * 16-Jun-98: Written. * * bubble.c: This code is responsible for creating and managing * bubbles over their lifetime. * The bubbles may be drawn inside out. */ #include "bubble3d.h" typedef struct bubble { GLfloat *contributions; /* List of contributions from each * nudge to each vertex. This list has * length nr_vertices * nr_nudge_axes. */ GLfloat x, y, z; /* (x,y,z) location of the bubble. */ GLfloat scale; /* Scaling factor applied to bubble. */ GLfloat y_incr, scale_incr; /* Change in y and scale each frame. */ GLfloat rotx, roty, rotz; /* Current rotation. */ GLfloat rotx_incr, roty_incr, rotz_incr; /* Amount by which we increase * rotation each step. */ GLfloat *nudge_angle; /* Current angle (radians) of each * nudge. This list has length nr_nudge_axes. */ GLfloat *nudge_angle_incr; /* Amount by which we increase each nudge * angle in each frame. */ GLfloat color[4]; } bubble; /* Should be taken care of already... but just in case */ #if !defined( __GNUC__ ) && !defined(__cplusplus) && !defined(c_plusplus) #undef inline #define inline /* */ #endif static inline void normalize(GLfloat v[3]) { GLfloat d = (GLfloat) sqrt((double) (v[0] * v[0] + v[1] * v[1] + v[2] * v[2])); if (d != 0) { v[0] /= d; v[1] /= d; v[2] /= d; } else { v[0] = v[1] = v[2] = 0; } } static inline GLfloat dotprod(GLfloat * v1, GLfloat * v2) { return v1[0] * v2[0] + v1[1] * v2[1] + v1[2] * v2[2]; } static inline GLfloat max(GLfloat a, GLfloat b) { return a > b ? a : b; } /* Create a new bubble. */ void * glb_bubble_new(glb_data *d, GLfloat x, GLfloat y, GLfloat z, GLfloat scale, GLfloat y_incr, GLfloat scale_incr) { int i, j; /* GLfloat axes [glb_config.nr_nudge_axes][3]; */ GLfloat axes[5][3]; /* HARD CODED for SunCC */ int nr_vertices; glb_vertex *vertices = glb_sphere_get_vertices(d, &nr_vertices); bubble *b = (bubble *) malloc(sizeof *b); if (b == 0) return 0; if (glb_config.bubble_colour[0] == -1.0) { b->color[0] = ((float) (NRAND(100)) / 100.0); b->color[1] = ((float) (NRAND(100)) / 100.0); b->color[2] = ((float) (NRAND(100)) / 100.0); } else { b->color[0] = glb_config.bubble_colour[0]; b->color[1] = glb_config.bubble_colour[1]; b->color[2] = glb_config.bubble_colour[2]; } b->color[3] = glb_config.bubble_colour[3]; b->contributions = (GLfloat *) malloc(sizeof (GLfloat) * nr_vertices * glb_config.nr_nudge_axes); if (b->contributions == 0) { (void) free((void *) b); return 0; } b->nudge_angle = (GLfloat *) malloc(sizeof (GLfloat) * glb_config.nr_nudge_axes); if (b->nudge_angle == 0) { (void) free((void *) b->contributions); (void) free((void *) b); return 0; } b->nudge_angle_incr = (GLfloat *) malloc(sizeof (GLfloat) * glb_config.nr_nudge_axes); if (b->nudge_angle_incr == 0) { (void) free((void *) b->nudge_angle); (void) free((void *) b->contributions); (void) free((void *) b); return 0; } /* Initialize primitive elements. */ b->x = x; b->y = y; b->z = z; b->scale = scale; b->y_incr = y_incr; b->scale_incr = scale_incr; b->rotx = b->roty = b->rotz = 0; b->rotx_incr = glb_drand() * glb_config.rotation_factor * 2 - glb_config.rotation_factor; b->roty_incr = glb_drand() * glb_config.rotation_factor * 2 - glb_config.rotation_factor; b->rotz_incr = glb_drand() * glb_config.rotation_factor * 2 - glb_config.rotation_factor; /* Initialize the nudge angle arrays. */ for (i = 0; i < glb_config.nr_nudge_axes; ++i) { b->nudge_angle[i] = 0; b->nudge_angle_incr[i] = glb_drand() * glb_config.nudge_angle_factor; } /* Choose some random nudge axes. */ for (i = 0; i < glb_config.nr_nudge_axes; ++i) { axes[i][0] = glb_drand() * 2 - 1; axes[i][1] = glb_drand() * 2 - 1; axes[i][2] = glb_drand() * 2 - 1; normalize(axes[i]); } /* Calculate the contribution that each nudge axis has on each vertex. */ for (i = 0; i < nr_vertices; ++i) for (j = 0; j < glb_config.nr_nudge_axes; ++j) b->contributions[i * glb_config.nr_nudge_axes + j] = max(0, dotprod(vertices[i], axes[j])); return (void *) b; } /* Delete a bubble and free up all memory. */ void glb_bubble_delete(void *bb) { bubble *b = (bubble *) bb; if (b != NULL) { if (b->nudge_angle_incr) { (void) free((void *) b->nudge_angle_incr); b->nudge_angle_incr = NULL; } if (b->nudge_angle) { (void) free((void *) b->nudge_angle); b->nudge_angle = NULL; } if (b->contributions) { (void) free((void *) b->contributions); b->contributions = NULL; } (void) free((void *) b); b = NULL; } } /* Rotate and wobble a bubble by a single step. */ void glb_bubble_step(void *bb) { int i; bubble *b = (bubble *) bb; /* Update the rotation. */ b->rotx += b->rotx_incr; b->roty += b->roty_incr; b->rotz += b->rotz_incr; /* Update the nudge angles. */ for (i = 0; i < glb_config.nr_nudge_axes; ++i) b->nudge_angle[i] += b->nudge_angle_incr[i]; /* Move it upwards & outwards. */ b->y += b->y_incr; b->scale += b->scale_incr; } /* Draw a bubble. */ void glb_bubble_draw(glb_data *d, void *bb) { int i, j; bubble *b = (bubble *) bb; int nr_vertices; glb_vertex *vertices = glb_sphere_get_vertices(d, &nr_vertices); int nr_triangles; glb_triangle *triangles = glb_sphere_get_triangles(d, &nr_triangles); glb_vertex *new_vertices; new_vertices = (glb_vertex *) malloc(sizeof (glb_vertex) * nr_vertices); /* Calculate the vertices of this bubble, factoring in each nudge axis. */ for (i = 0; i < nr_vertices; ++i) { GLfloat s = 0; for (j = 0; j < glb_config.nr_nudge_axes; ++j) s += ((GLfloat) cos((double) (b->nudge_angle[j])) * glb_config.nudge_factor - glb_config.nudge_factor / 2) * b->contributions[i * glb_config.nr_nudge_axes + j]; new_vertices[i][0] = vertices[i][0] * (s + 1); new_vertices[i][1] = vertices[i][1] * (s + 1); new_vertices[i][2] = vertices[i][2] * (s + 1); } glPushMatrix(); /* Apply translation, rotation and scalings. */ glTranslatef(b->x, b->y, b->z); glRotatef(b->rotx, 1, 0, 0); glRotatef(b->roty, 0, 1, 0); glRotatef(b->rotz, 0, 0, 1); glScalef(b->scale, b->scale, b->scale); /* Draw the bubble. */ glFrontFace(GL_CW); glBegin(GL_TRIANGLES); glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, b->color); for (i = 0; i < nr_triangles; ++i) { glNormal3fv(new_vertices[triangles[i][0]]); glVertex3fv(new_vertices[triangles[i][0]]); glNormal3fv(new_vertices[triangles[i][1]]); glVertex3fv(new_vertices[triangles[i][1]]); glNormal3fv(new_vertices[triangles[i][2]]); glVertex3fv(new_vertices[triangles[i][2]]); } glEnd(); glPopMatrix(); (void) free((void *) new_vertices); glb_config.polygon_count += nr_triangles; } /* Return y value. */ GLfloat glb_bubble_get_y(void *bb) { bubble *b = (bubble *) bb; return b->y; } xscreensaver-5.36/hacks/glx/buildlwo.c000644 000767 000024 00000003564 12701612217 020015 0ustar00jwzstaff000000 000000 #if 0 static const char sccsid[] = "@(#)buildlwo.c 4.02 97/04/20 xlockmore"; #endif /*- * buildlwo.c: Lightwave Object Display List Builder for OpenGL * * This module can be called by any GL mode wishing to use * objects created in NewTek's Lightwave 3D. The objects must * first be converted to C source with my converter "lw2ogl". * If other people are interested in this, I will put up a * web page for it at http://www.netaxs.com/~emackey/lw2ogl/ * * by Ed Mackey, 4/19/97 * */ #ifndef STANDALONE #include "xlock.h" #endif #ifdef USE_GL #include "buildlwo.h" GLuint BuildLWO(int wireframe, const struct lwo *object) { GLuint dl_num; const GLfloat *pnts, *normals, *grab; const unsigned short int *pols; GLfloat three[3]; int p, num_pnts = 0; dl_num = glGenLists(1); if (!dl_num) return (0); pnts = object->pnts; normals = object->normals; pols = object->pols; glNewList(dl_num, GL_COMPILE); if (!pols) { num_pnts = object->num_pnts; glBegin(GL_POINTS); for (p = 0; p < num_pnts; ++p) { three[0] = *(pnts++); three[1] = *(pnts++); three[2] = *(pnts++); glVertex3fv(three); } glEnd(); } else for (;;) { if (num_pnts <= 0) { num_pnts = *pols + 2; if (num_pnts < 3) break; if (num_pnts == 3) { glBegin(GL_POINTS); } else if (num_pnts == 4) { glBegin(GL_LINES); } else { three[0] = *(normals++); three[1] = *(normals++); three[2] = *(normals++); glNormal3fv(three); if (wireframe) glBegin(GL_LINE_LOOP); else glBegin(GL_POLYGON); } } else if (num_pnts == 1) { glEnd(); } else { grab = pnts + ((int) (*pols) * 3); three[0] = *(grab++); three[1] = *(grab++); three[2] = *(grab); glVertex3fv(three); } --num_pnts; ++pols; } glEndList(); return (dl_num); } #endif /* USE_GL */ /* End of buildlwo.c */ xscreensaver-5.36/hacks/glx/cage.c000644 000767 000024 00000035057 12710313167 017077 0ustar00jwzstaff000000 000000 /* -*- Mode: C; tab-width: 4 -*- */ /* cage --- the Impossible Cage, an Escher like scene. */ #if 0 static const char sccsid[] = "@(#)cage.c 5.01 2001/03/01 xlockmore"; #endif /*- * Permission to use, copy, modify, and distribute this software and its * documentation for any purpose and without fee is hereby granted, * provided that the above copyright notice appear in all copies and that * both that copyright notice and this permission notice appear in * supporting documentation. * * This file is provided AS IS with no warranties of any kind. The author * shall have no liability with respect to the infringement of copyrights, * trade secrets or any patents by this file or any part thereof. In no * event will the author be liable for any lost revenue or profits or * other special, indirect and consequential damages. * * The RotateAroundU() routine was adapted from the book * "Computer Graphics Principles and Practice * Foley - vanDam - Feiner - Hughes * Second Edition" Pag. 227, exercise 5.15. * * This mode shows some interesting scenes that are impossible OR very * wierd to build in the real universe. Much of the scenes are inspirated * on Mauritz Cornelis Escher's works which derivated the mode's name. * M.C. Escher (1898-1972) was a dutch artist and many people prefer to * say he was a mathematician. * * Thanks goes to Brian Paul for making it possible and inexpensive to use * OpenGL at home. * * Since I'm not a native English speaker, my apologies for any grammatical * mistakes. * * My e-mail address is * mfvianna@centroin.com.br * * Marcelo F. Vianna (Jun-01-1997) * * Revision History: * 05-Apr-2002: Removed all gllist uses (fix some bug with nvidia driver) * 01-Mar-2001: Added FPS stuff E.Lassauge * 01-Nov-2000: Allocation checks * 01-Jan-1998: Mode separated from escher and renamed * 08-Jun-1997: New scene implemented: "Impossible Cage" based in a M.C. * Escher's painting with the same name (quite similar). The * first GL mode to use texture mapping. * The "Impossible Cage" scene doesn't use DEPTH BUFFER, the * wood planks are drawn consistently using GL_CULL_FACE, and * the painter's algorithm is used to sort the planks. * Marcelo F. Vianna. * 07-Jun-1997: Speed ups in Moebius Strip using GL_CULL_FACE. * Marcelo F. Vianna. * 03-Jun-1997: Initial Release (Only one scene: "Moebius Strip") * The Moebius Strip scene was inspirated in a M.C. Escher's * painting named Moebius Strip II in wich ants walk across a * Moebius Strip path, sometimes meeting each other and sometimes * being in "opposite faces" (note that the moebius strip has * only one face and one edge). * Marcelo F. Vianna. */ /*- * Texture mapping is only available on RGBA contexts, Mono and color index * visuals DO NOT support texture mapping in OpenGL. * * BUT Mesa do implements RGBA contexts in pseudo color visuals, so texture * mapping shuld work on PseudoColor, DirectColor, TrueColor using Mesa. Mono * is not officially supported for both OpenGL and Mesa, but seems to not crash * Mesa. * * In real OpenGL, PseudoColor DO NOT support texture map (as far as I know). */ #ifdef STANDALONE # define MODE_cage # define DEFAULTS "*delay: 25000 \n" \ "*showFPS: False \n" \ "*wireframe: False \n" \ "*suppressRotationAnimation: True\n" \ # define refresh_cage 0 # define cage_handle_event 0 # include "xlockmore.h" /* from the xscreensaver distribution */ #else /* !STANDALONE */ # include "xlock.h" /* from the xlockmore distribution */ #endif /* !STANDALONE */ #ifdef MODE_cage #if 0 #include "e_textures.h" #else #include "xpm-ximage.h" #include "../images/wood.xpm" #endif ENTRYPOINT ModeSpecOpt cage_opts = {0, (XrmOptionDescRec *) NULL, 0, (argtype *) NULL, (OptionStruct *) NULL}; #ifdef USE_MODULES ModStruct cage_description = {"cage", "init_cage", "draw_cage", "release_cage", "draw_cage", "change_cage", (char *) NULL, &cage_opts, 25000, 1, 1, 1, 1.0, 4, "", "Shows the Impossible Cage, an Escher-like GL scene", 0, NULL}; #endif #define Scale4Window 0.3 #define Scale4Iconic 0.4 #define sqr(A) ((A)*(A)) #ifndef Pi #define Pi M_PI #endif #define ObjWoodPlank 0 #define MaxObj 1 /*************************************************************************/ typedef struct { GLint WindH, WindW; GLfloat step; GLXContext *glx_context; } cagestruct; static const float front_shininess[] = {60.0}; static const float front_specular[] = {0.7, 0.7, 0.7, 1.0}; static const float ambient[] = {0.0, 0.0, 0.0, 1.0}; static const float diffuse[] = {1.0, 1.0, 1.0, 1.0}; static const float position0[] = {1.0, 1.0, 1.0, 0.0}; static const float position1[] = {-1.0, -1.0, 1.0, 0.0}; static const float lmodel_ambient[] = {0.5, 0.5, 0.5, 1.0}; static const float lmodel_twoside[] = {GL_TRUE}; static const float MaterialWhite[] = {0.7, 0.7, 0.7, 1.0}; static cagestruct *cage = (cagestruct *) NULL; #define PlankWidth 3.0 #define PlankHeight 0.35 #define PlankThickness 0.15 static Bool draw_woodplank(ModeInfo *mi, cagestruct * cp, int wire) { glBegin(wire ? GL_LINES : GL_QUADS); glNormal3f(0, 0, 1); glTexCoord2f(0, 0); glVertex3f(-PlankWidth, -PlankHeight, PlankThickness); glTexCoord2f(1, 0); glVertex3f(PlankWidth, -PlankHeight, PlankThickness); glTexCoord2f(1, 1); glVertex3f(PlankWidth, PlankHeight, PlankThickness); glTexCoord2f(0, 1); glVertex3f(-PlankWidth, PlankHeight, PlankThickness); mi->polygon_count++; glNormal3f(0, 0, -1); glTexCoord2f(0, 0); glVertex3f(-PlankWidth, PlankHeight, -PlankThickness); glTexCoord2f(1, 0); glVertex3f(PlankWidth, PlankHeight, -PlankThickness); glTexCoord2f(1, 1); glVertex3f(PlankWidth, -PlankHeight, -PlankThickness); glTexCoord2f(0, 1); glVertex3f(-PlankWidth, -PlankHeight, -PlankThickness); mi->polygon_count++; glNormal3f(0, 1, 0); glTexCoord2f(0, 0); glVertex3f(-PlankWidth, PlankHeight, PlankThickness); glTexCoord2f(1, 0); glVertex3f(PlankWidth, PlankHeight, PlankThickness); glTexCoord2f(1, 1); glVertex3f(PlankWidth, PlankHeight, -PlankThickness); glTexCoord2f(0, 1); glVertex3f(-PlankWidth, PlankHeight, -PlankThickness); mi->polygon_count++; glNormal3f(0, -1, 0); glTexCoord2f(0, 0); glVertex3f(-PlankWidth, -PlankHeight, -PlankThickness); glTexCoord2f(1, 0); glVertex3f(PlankWidth, -PlankHeight, -PlankThickness); glTexCoord2f(1, 1); glVertex3f(PlankWidth, -PlankHeight, PlankThickness); glTexCoord2f(0, 1); glVertex3f(-PlankWidth, -PlankHeight, PlankThickness); mi->polygon_count++; glNormal3f(1, 0, 0); glTexCoord2f(0, 0); glVertex3f(PlankWidth, -PlankHeight, PlankThickness); glTexCoord2f(1, 0); glVertex3f(PlankWidth, -PlankHeight, -PlankThickness); glTexCoord2f(1, 1); glVertex3f(PlankWidth, PlankHeight, -PlankThickness); glTexCoord2f(0, 1); glVertex3f(PlankWidth, PlankHeight, PlankThickness); mi->polygon_count++; glNormal3f(-1, 0, 0); glTexCoord2f(0, 0); glVertex3f(-PlankWidth, PlankHeight, PlankThickness); glTexCoord2f(1, 0); glVertex3f(-PlankWidth, PlankHeight, -PlankThickness); glTexCoord2f(1, 1); glVertex3f(-PlankWidth, -PlankHeight, -PlankThickness); glTexCoord2f(0, 1); glVertex3f(-PlankWidth, -PlankHeight, PlankThickness); mi->polygon_count++; glEnd(); return True; } static Bool draw_impossiblecage(ModeInfo *mi, cagestruct * cp, int wire) { glPushMatrix(); glRotatef(90, 0, 1, 0); glTranslatef(0.0, PlankHeight - PlankWidth, -PlankThickness - PlankWidth); if (!draw_woodplank(mi, cp, wire)) return False; glPopMatrix(); glPushMatrix(); glRotatef(90, 0, 0, 1); glTranslatef(0.0, PlankHeight - PlankWidth, PlankWidth - PlankThickness); if (!draw_woodplank(mi, cp, wire)) return False; glPopMatrix(); glPushMatrix(); glRotatef(90, 0, 1, 0); glTranslatef(0.0, PlankWidth - PlankHeight, -PlankThickness - PlankWidth); if (!draw_woodplank(mi, cp, wire)) return False; glPopMatrix(); glPushMatrix(); glTranslatef(0.0, PlankWidth - PlankHeight, 3 * PlankThickness - PlankWidth); if (!draw_woodplank(mi, cp, wire)) return False; glPopMatrix(); glPushMatrix(); glRotatef(90, 0, 0, 1); glTranslatef(0.0, PlankWidth - PlankHeight, PlankWidth - PlankThickness); if (!draw_woodplank(mi, cp, wire)) return False; glPopMatrix(); glPushMatrix(); glTranslatef(0.0, PlankWidth - PlankHeight, PlankWidth - 3 * PlankThickness); if (!draw_woodplank(mi, cp, wire)) return False; glPopMatrix(); glPushMatrix(); glTranslatef(0.0, PlankHeight - PlankWidth, 3 * PlankThickness - PlankWidth); if (!draw_woodplank(mi, cp, wire)) return False; glPopMatrix(); glPushMatrix(); glRotatef(90, 0, 0, 1); glTranslatef(0.0, PlankHeight - PlankWidth, PlankThickness - PlankWidth); if (!draw_woodplank(mi, cp, wire)) return False; glPopMatrix(); glPushMatrix(); glTranslatef(0.0, PlankHeight - PlankWidth, PlankWidth - 3 * PlankThickness); if (!draw_woodplank(mi, cp, wire)) return False; glPopMatrix(); glPushMatrix(); glRotatef(90, 0, 1, 0); glTranslatef(0.0, PlankHeight - PlankWidth, PlankWidth + PlankThickness); if (!draw_woodplank(mi, cp, wire)) return False; glPopMatrix(); glPushMatrix(); glRotatef(90, 0, 0, 1); glTranslatef(0.0, PlankWidth - PlankHeight, PlankThickness - PlankWidth); if (!draw_woodplank(mi, cp, wire)) return False; glPopMatrix(); glPushMatrix(); glRotatef(90, 0, 1, 0); glTranslatef(0.0, PlankWidth - PlankHeight, PlankWidth + PlankThickness); if (!draw_woodplank(mi, cp, wire)) return False; glPopMatrix(); return True; } static void reshape_cage(ModeInfo * mi, int width, int height) { cagestruct *cp = &cage[MI_SCREEN(mi)]; int i; glViewport(0, 0, cp->WindW = (GLint) width, cp->WindH = (GLint) height); glMatrixMode(GL_PROJECTION); glLoadIdentity(); glFrustum(-1.0, 1.0, -1.0, 1.0, 5.0, 15.0); glMatrixMode(GL_MODELVIEW); i = width / 512 + 1; glLineWidth(i); glPointSize(i); } static void pinit(ModeInfo *mi) { /* int status; */ if (MI_IS_WIREFRAME(mi)) return; glLightfv(GL_LIGHT0, GL_AMBIENT, ambient); glLightfv(GL_LIGHT0, GL_DIFFUSE, diffuse); glLightfv(GL_LIGHT0, GL_POSITION, position0); glLightfv(GL_LIGHT1, GL_AMBIENT, ambient); glLightfv(GL_LIGHT1, GL_DIFFUSE, diffuse); 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_NORMALIZE); glFrontFace(GL_CCW); glCullFace(GL_BACK); /* cage */ glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, MaterialWhite); glShadeModel(GL_FLAT); glDisable(GL_DEPTH_TEST); glEnable(GL_TEXTURE_2D); glEnable(GL_CULL_FACE); glPixelStorei(GL_UNPACK_ALIGNMENT, 1); #if 0 clear_gl_error(); if (MI_IS_MONO(mi)) status = 0; else status = gluBuild2DMipmaps(GL_TEXTURE_2D, 3, WoodTextureWidth, WoodTextureHeight, GL_RGB, GL_UNSIGNED_BYTE, WoodTextureData); if (status) { const char *s = (char *) gluErrorString (status); fprintf (stderr, "%s: error mipmapping texture: %s\n", progname, (s ? s : "(unknown)")); exit (1); } check_gl_error("mipmapping"); #else { XImage *img = xpm_to_ximage (mi->dpy, mi->xgwa.visual, mi->xgwa.colormap, wood_texture); glTexImage2D (GL_TEXTURE_2D, 0, GL_RGBA, img->width, img->height, 0, GL_RGBA, /* GL_UNSIGNED_BYTE, */ GL_UNSIGNED_INT_8_8_8_8_REV, img->data); check_gl_error("texture"); XDestroyImage (img); } #endif glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE); glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT); glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT); glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); glMaterialfv(GL_FRONT_AND_BACK, GL_SHININESS, front_shininess); glMaterialfv(GL_FRONT_AND_BACK, GL_SPECULAR, front_specular); } ENTRYPOINT void release_cage (ModeInfo * mi) { if (cage != NULL) { int screen; for (screen = 0; screen < MI_NUM_SCREENS(mi); screen++) { cagestruct *cp = &cage[screen]; if (cp->glx_context) { cp->glx_context = (GLXContext *) NULL; } } (void) free((void *) cage); cage = (cagestruct *) NULL; } FreeAllGL(mi); } ENTRYPOINT void init_cage (ModeInfo * mi) { cagestruct *cp; if (cage == NULL) { if ((cage = (cagestruct *) calloc(MI_NUM_SCREENS(mi), sizeof (cagestruct))) == NULL) return; } cp = &cage[MI_SCREEN(mi)]; cp->step = NRAND(90); if ((cp->glx_context = init_GL(mi)) != NULL) { reshape_cage(mi, MI_WIDTH(mi), MI_HEIGHT(mi)); glDrawBuffer(GL_BACK); pinit(mi); } else { MI_CLEARWINDOW(mi); } } ENTRYPOINT void draw_cage (ModeInfo * mi) { Display *display = MI_DISPLAY(mi); Window window = MI_WINDOW(mi); cagestruct *cp; if (cage == NULL) return; cp = &cage[MI_SCREEN(mi)]; MI_IS_DRAWN(mi) = True; if (!cp->glx_context) return; mi->polygon_count = 0; glXMakeCurrent(display, window, *(cp->glx_context)); glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glPushMatrix(); glTranslatef(0.0, 0.0, -10.0); if (!MI_IS_ICONIC(mi)) { glScalef(Scale4Window * cp->WindH / cp->WindW, Scale4Window, Scale4Window); } else { glScalef(Scale4Iconic * cp->WindH / cp->WindW, Scale4Iconic, Scale4Iconic); } # ifdef HAVE_MOBILE /* Keep it the same relative size when rotated. */ { int o = (int) current_device_rotation(); GLfloat h = MI_HEIGHT(mi) / (GLfloat) MI_WIDTH(mi); if (o != 0 && o != 180 && o != -180) { glScalef (1/h, h, 1/h); /* #### not quite right */ h = 1.7; glScalef (h, h, h); } } # endif /* cage */ glRotatef(cp->step * 100, 0, 0, 1); glRotatef(25 + cos(cp->step * 5) * 6, 1, 0, 0); glRotatef(204.5 - sin(cp->step * 5) * 8, 0, 1, 0); if (!draw_impossiblecage(mi, cp, MI_IS_WIREFRAME(mi))) { release_cage(mi); return; } glPopMatrix(); if (MI_IS_FPS(mi)) do_fps (mi); glFlush(); glXSwapBuffers(display, window); cp->step += 0.025; } #ifndef STANDALONE ENTRYPOINT void change_cage (ModeInfo * mi) { cagestruct *cp = &cage[MI_SCREEN(mi)]; if (!cp->glx_context) return; glXMakeCurrent(MI_DISPLAY(mi), MI_WINDOW(mi), *(cp->glx_context)); pinit(mi); } #endif /* !STANDALONE */ XSCREENSAVER_MODULE ("Cage", cage) #endif xscreensaver-5.36/hacks/glx/dolphin.c000644 000767 000024 00000145560 12701612217 017634 0ustar00jwzstaff000000 000000 /* atlantis --- Shows moving 3D sea animals */ #if 0 static const char sccsid[] = "@(#)dolphin.c 1.2 98/06/16 xlockmore"; #endif /* Copyright (c) E. Lassauge, 1998. */ /* * Permission to use, copy, modify, and distribute this software and its * documentation for any purpose and without fee is hereby granted, * provided that the above copyright notice appear in all copies and that * both that copyright notice and this permission notice appear in * supporting documentation. * * This file is provided AS IS with no warranties of any kind. The author * shall have no liability with respect to the infringement of copyrights, * trade secrets or any patents by this file or any part thereof. In no * event will the author be liable for any lost revenue or profits or * other special, indirect and consequential damages. * * The original code for this mode was written by Mark J. Kilgard * as a demo for openGL programming. * * Porting it to xlock was possible by comparing the original Mesa's morph3d * demo with it's ported version to xlock, so thanks for Marcelo F. Vianna * (look at morph3d.c) for his indirect help. * * Thanks goes also to Brian Paul for making it possible and inexpensive * to use OpenGL at home. * * My e-mail address is lassauge@sagem.fr * * Eric Lassauge (May-13-1998) * */ /** * (c) Copyright 1993, 1994, Silicon Graphics, Inc. * ALL RIGHTS RESERVED * Permission to use, copy, modify, and distribute this software for * any purpose and without fee is hereby granted, provided that the above * copyright notice appear in all copies and that both the copyright notice * and this permission notice appear in supporting documentation, and that * the name of Silicon Graphics, Inc. not be used in advertising * or publicity pertaining to distribution of the software without specific, * written prior permission. * * THE MATERIAL EMBODIED ON THIS SOFTWARE IS PROVIDED TO YOU "AS-IS" * AND WITHOUT WARRANTY OF ANY KIND, EXPRESS, IMPLIED OR OTHERWISE, * INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY OR * FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL SILICON * GRAPHICS, INC. BE LIABLE TO YOU OR ANYONE ELSE FOR ANY DIRECT, * SPECIAL, INCIDENTAL, INDIRECT OR CONSEQUENTIAL DAMAGES OF ANY * KIND, OR ANY DAMAGES WHATSOEVER, INCLUDING WITHOUT LIMITATION, * LOSS OF PROFIT, LOSS OF USE, SAVINGS OR REVENUE, OR THE CLAIMS OF * THIRD PARTIES, WHETHER OR NOT SILICON GRAPHICS, INC. HAS BEEN * ADVISED OF THE POSSIBILITY OF SUCH LOSS, HOWEVER CAUSED AND ON * ANY THEORY OF LIABILITY, ARISING OUT OF OR IN CONNECTION WITH THE * POSSESSION, USE OR PERFORMANCE OF THIS SOFTWARE. * * US Government Users Restricted Rights * Use, duplication, or disclosure by the Government is subject to * restrictions set forth in FAR 52.227.19(c)(2) or subparagraph * (c)(1)(ii) of the Rights in Technical Data and Computer Software * clause at DFARS 252.227-7013 and/or in similar or successor * clauses in the FAR or the DOD or NASA FAR Supplement. * Unpublished-- rights reserved under the copyright laws of the * United States. Contractor/manufacturer is Silicon Graphics, * Inc., 2011 N. Shoreline Blvd., Mountain View, CA 94039-7311. * * OpenGL(TM) is a trademark of Silicon Graphics, Inc. */ #ifdef USE_GL #include "atlantis.h" /* *INDENT-OFF* */ static const float N001[3] = {-0.005937, -0.101998, -0.994767}; static const float N002[3] = {0.93678, -0.200803, 0.286569}; static const float N003[3] = {-0.233062, 0.972058, 0.028007}; #if 0 static const float N004[3] = {0, 1, 0}; #endif static const float N005[3] = {0.898117, 0.360171, 0.252315}; static const float N006[3] = {-0.915437, 0.348456, 0.201378}; static const float N007[3] = {0.602263, -0.777527, 0.18092}; static const float N008[3] = {-0.906912, -0.412015, 0.088061}; #if 0 static const float N009[3] = {-0.015623, 0.999878, 0}; static const float N010[3] = {0, -0.992278, 0.124035}; static const float N011[3] = {0, -0.936329, -0.351123}; #endif static const float N012[3] = {0.884408, -0.429417, -0.182821}; static const float N013[3] = {0.921121, 0.311084, -0.234016}; static const float N014[3] = {0.382635, 0.877882, -0.287948}; static const float N015[3] = {-0.380046, 0.888166, -0.258316}; static const float N016[3] = {-0.891515, 0.392238, -0.226607}; static const float N017[3] = {-0.901419, -0.382002, -0.203763}; static const float N018[3] = {-0.367225, -0.911091, -0.187243}; static const float N019[3] = {0.339539, -0.924846, -0.171388}; static const float N020[3] = {0.914706, -0.378617, -0.14129}; static const float N021[3] = {0.950662, 0.262713, -0.164994}; static const float N022[3] = {0.546359, 0.80146, -0.243218}; static const float N023[3] = {-0.315796, 0.917068, -0.243431}; static const float N024[3] = {-0.825687, 0.532277, -0.186875}; static const float N025[3] = {-0.974763, -0.155232, -0.160435}; static const float N026[3] = {-0.560596, -0.816658, -0.137119}; static const float N027[3] = {0.38021, -0.910817, -0.160786}; static const float N028[3] = {0.923772, -0.358322, -0.135093}; static const float N029[3] = {0.951202, 0.275053, -0.139859}; static const float N030[3] = {0.686099, 0.702548, -0.188932}; static const float N031[3] = {-0.521865, 0.826719, -0.21022}; static const float N032[3] = {-0.92382, 0.346739, -0.162258}; static const float N033[3] = {-0.902095, -0.409995, -0.134646}; static const float N034[3] = {-0.509115, -0.848498, -0.144404}; static const float N035[3] = {0.456469, -0.880293, -0.129305}; static const float N036[3] = {0.873401, -0.475489, -0.105266}; static const float N037[3] = {0.970825, 0.179861, -0.158584}; static const float N038[3] = {0.675609, 0.714187, -0.183004}; static const float N039[3] = {-0.523574, 0.830212, -0.19136}; static const float N040[3] = {-0.958895, 0.230808, -0.165071}; static const float N041[3] = {-0.918285, -0.376803, -0.121542}; static const float N042[3] = {-0.622467, -0.774167, -0.114888}; static const float N043[3] = {0.404497, -0.908807, -0.102231}; static const float N044[3] = {0.930538, -0.365155, -0.027588}; static const float N045[3] = {0.92192, 0.374157, -0.100345}; static const float N046[3] = {0.507346, 0.860739, 0.041562}; static const float N047[3] = {-0.394646, 0.918815, -0.00573}; static const float N048[3] = {-0.925411, 0.373024, -0.066837}; static const float N049[3] = {-0.945337, -0.322309, -0.049551}; static const float N050[3] = {-0.660437, -0.750557, -0.022072}; static const float N051[3] = {0.488835, -0.87195, -0.027261}; static const float N052[3] = {0.902599, -0.421397, 0.087969}; static const float N053[3] = {0.938636, 0.322606, 0.12202}; static const float N054[3] = {0.484605, 0.871078, 0.079878}; static const float N055[3] = {-0.353607, 0.931559, 0.084619}; static const float N056[3] = {-0.867759, 0.478564, 0.134054}; static const float N057[3] = {-0.951583, -0.29603, 0.082794}; static const float N058[3] = {-0.672355, -0.730209, 0.121384}; static const float N059[3] = {0.528336, -0.842452, 0.105525}; static const float N060[3] = {0.786913, -0.56476, 0.248627}; #if 0 static const float N061[3] = {0, 1, 0}; #endif static const float N062[3] = {0.622098, 0.76523, 0.165584}; static const float N063[3] = {-0.631711, 0.767816, 0.106773}; static const float N064[3] = {-0.687886, 0.606351, 0.398938}; static const float N065[3] = {-0.946327, -0.281623, 0.158598}; static const float N066[3] = {-0.509549, -0.860437, 0.002776}; static const float N067[3] = {0.462594, -0.876692, 0.131977}; #if 0 static const float N068[3] = {0, -0.992278, 0.124035}; static const float N069[3] = {0, -0.970143, -0.242536}; static const float N070[3] = {0.015502, 0.992159, -0.12402}; #endif static const float N071[3] = {0, 1, 0}; #if 0 static const float N072[3] = {0, 1, 0}; static const float N073[3] = {0, 1, 0}; static const float N074[3] = {0, -1, 0}; static const float N075[3] = {-0.242536, 0, -0.970143}; static const float N076[3] = {-0.010336, -0.992225, -0.124028}; #endif static const float N077[3] = {-0.88077, 0.461448, 0.106351}; static const float N078[3] = {-0.88077, 0.461448, 0.106351}; static const float N079[3] = {-0.88077, 0.461448, 0.106351}; static const float N080[3] = {-0.88077, 0.461448, 0.106351}; static const float N081[3] = {-0.571197, 0.816173, 0.087152}; static const float N082[3] = {-0.88077, 0.461448, 0.106351}; static const float N083[3] = {-0.571197, 0.816173, 0.087152}; static const float N084[3] = {-0.571197, 0.816173, 0.087152}; static const float N085[3] = {-0.88077, 0.461448, 0.106351}; static const float N086[3] = {-0.571197, 0.816173, 0.087152}; static const float N087[3] = {-0.88077, 0.461448, 0.106351}; static const float N088[3] = {-0.88077, 0.461448, 0.106351}; static const float N089[3] = {-0.88077, 0.461448, 0.106351}; static const float N090[3] = {-0.88077, 0.461448, 0.106351}; static const float N091[3] = {0, 1, 0}; static const float N092[3] = {0, 1, 0}; static const float N093[3] = {0, 1, 0}; static const float N094[3] = {1, 0, 0}; static const float N095[3] = {-1, 0, 0}; #if 0 static const float N096[3] = {0, 1, 0}; #endif static const float N097[3] = {-0.697296, 0.702881, 0.140491}; static const float N098[3] = {0.918864, 0.340821, 0.198819}; static const float N099[3] = {-0.932737, 0.201195, 0.299202}; static const float N100[3] = {0.029517, 0.981679, 0.188244}; #if 0 static const float N101[3] = {0, 1, 0}; #endif static const float N102[3] = {0.813521, -0.204936, 0.544229}; #if 0 static const float N103[3] = {0, 1, 0}; static const float N104[3] = {0, 1, 0}; static const float N105[3] = {0, 1, 0}; static const float N106[3] = {0, 1, 0}; static const float N107[3] = {0, 1, 0}; static const float N108[3] = {0, 1, 0}; static const float N109[3] = {0, 1, 0}; #endif static const float N110[3] = {-0.78148, -0.384779, 0.491155}; static const float N111[3] = {-0.722243, 0.384927, 0.574627}; static const float N112[3] = {-0.752278, 0.502679, 0.425901}; static const float N113[3] = {0.547257, 0.36791, 0.751766}; static const float N114[3] = {0.725949, -0.232568, 0.647233}; static const float N115[3] = {-0.747182, -0.660786, 0.07128}; static const float N116[3] = {0.931519, 0.200748, 0.30327}; static const float N117[3] = {-0.828928, 0.313757, 0.463071}; static const float N118[3] = {0.902554, -0.370967, 0.218587}; static const float N119[3] = {-0.879257, -0.441851, 0.177973}; static const float N120[3] = {0.642327, 0.611901, 0.461512}; static const float N121[3] = {0.964817, -0.202322, 0.16791}; static const float N122[3] = {0, 1, 0}; #if 0 static const float N123[3] = {-0.980734, 0.041447, 0.1909}; static const float N124[3] = {-0.980734, 0.041447, 0.1909}; static const float N125[3] = {-0.980734, 0.041447, 0.1909}; static const float N126[3] = {0, 1, 0}; static const float N127[3] = {0, 1, 0}; static const float N128[3] = {0, 1, 0}; static const float N129[3] = {0.96325, 0.004839, 0.268565}; static const float N130[3] = {0.96325, 0.004839, 0.268565}; static const float N131[3] = {0.96325, 0.004839, 0.268565}; static const float N132[3] = {0, 1, 0}; static const float N133[3] = {0, 1, 0}; static const float N134[3] = {0, 1, 0}; #endif static float P001[3] = {5.68, -300.95, 1324.7}; static const float P002[3] = {338.69, -219.63, 9677.03}; static const float P003[3] = {12.18, 474.59, 9138.14}; #if 0 static const float P004[3] = {-7.49, -388.91, 10896.74}; #endif static const float P005[3] = {487.51, 198.05, 9350.78}; static const float P006[3] = {-457.61, 68.74, 9427.85}; static const float P007[3] = {156.52, -266.72, 10311.68}; static const float P008[3] = {-185.56, -266.51, 10310.47}; static float P009[3] = {124.39, -261.46, 1942.34}; static float P010[3] = {-130.05, -261.46, 1946.03}; static float P011[3] = {141.07, -320.11, 1239.38}; static float P012[3] = {156.48, -360.12, 2073.41}; static float P013[3] = {162, -175.88, 2064.44}; static float P014[3] = {88.16, -87.72, 2064.02}; static float P015[3] = {-65.21, -96.13, 2064.02}; static float P016[3] = {-156.48, -180.96, 2064.44}; static float P017[3] = {-162, -368.93, 2082.39}; static float P018[3] = {-88.16, -439.22, 2082.39}; static float P019[3] = {65.21, -440.32, 2083.39}; static float P020[3] = {246.87, -356.02, 2576.95}; static float P021[3] = {253.17, -111.15, 2567.15}; static float P022[3] = {132.34, 51.41, 2559.84}; static float P023[3] = {-97.88, 40.44, 2567.15}; static float P024[3] = {-222.97, -117.49, 2567.15}; static float P025[3] = {-252.22, -371.53, 2569.92}; static float P026[3] = {-108.44, -518.19, 2586.75}; static float P027[3] = {97.88, -524.79, 2586.75}; static float P028[3] = {370.03, -421.19, 3419.7}; static float P029[3] = {351.15, -16.98, 3423.17}; static float P030[3] = {200.66, 248.46, 3430.37}; static float P031[3] = {-148.42, 235.02, 3417.91}; static float P032[3] = {-360.21, -30.27, 3416.84}; static float P033[3] = {-357.9, -414.89, 3407.04}; static float P034[3] = {-148.88, -631.35, 3409.9}; static float P035[3] = {156.38, -632.59, 3419.7}; static float P036[3] = {462.61, -469.21, 4431.51}; static float P037[3] = {466.6, 102.25, 4434.98}; static float P038[3] = {243.05, 474.34, 4562.02}; static float P039[3] = {-191.23, 474.4, 4554.42}; static float P040[3] = {-476.12, 111.05, 4451.11}; static float P041[3] = {-473.36, -470.74, 4444.78}; static float P042[3] = {-266.95, -748.41, 4447.78}; static float P043[3] = {211.14, -749.91, 4429.73}; static float P044[3] = {680.57, -370.27, 5943.46}; static float P045[3] = {834.01, 363.09, 6360.63}; static float P046[3] = {371.29, 804.51, 6486.26}; static float P047[3] = {-291.43, 797.22, 6494.28}; static float P048[3] = {-784.13, 370.75, 6378.01}; static float P049[3] = {-743.29, -325.82, 5943.46}; static float P050[3] = {-383.24, -804.77, 5943.46}; static float P051[3] = {283.47, -846.09, 5943.46}; static const float iP001[3] = {5.68, -300.95, 1324.7}; #if 0 static const float iP002[3] = {338.69, -219.63, 9677.03}; static const float iP003[3] = {12.18, 624.93, 8956.39}; static const float iP004[3] = {-7.49, -388.91, 10896.74}; static const float iP005[3] = {487.51, 198.05, 9350.78}; static const float iP006[3] = {-457.61, 199.04, 9353.01}; static const float iP007[3] = {156.52, -266.72, 10311.68}; static const float iP008[3] = {-185.56, -266.51, 10310.47}; #endif static const float iP009[3] = {124.39, -261.46, 1942.34}; static const float iP010[3] = {-130.05, -261.46, 1946.03}; static const float iP011[3] = {141.07, -320.11, 1239.38}; static const float iP012[3] = {156.48, -360.12, 2073.41}; static const float iP013[3] = {162, -175.88, 2064.44}; static const float iP014[3] = {88.16, -87.72, 2064.02}; static const float iP015[3] = {-65.21, -96.13, 2064.02}; static const float iP016[3] = {-156.48, -180.96, 2064.44}; static const float iP017[3] = {-162, -368.93, 2082.39}; static const float iP018[3] = {-88.16, -439.22, 2082.39}; static const float iP019[3] = {65.21, -440.32, 2083.39}; static const float iP020[3] = {246.87, -356.02, 2576.95}; static const float iP021[3] = {253.17, -111.15, 2567.15}; static const float iP022[3] = {132.34, 51.41, 2559.84}; static const float iP023[3] = {-97.88, 40.44, 2567.15}; static const float iP024[3] = {-222.97, -117.49, 2567.15}; static const float iP025[3] = {-252.22, -371.53, 2569.92}; static const float iP026[3] = {-108.44, -518.19, 2586.75}; static const float iP027[3] = {97.88, -524.79, 2586.75}; static const float iP028[3] = {370.03, -421.19, 3419.7}; static const float iP029[3] = {351.15, -16.98, 3423.17}; static const float iP030[3] = {200.66, 248.46, 3430.37}; static const float iP031[3] = {-148.42, 235.02, 3417.91}; static const float iP032[3] = {-360.21, -30.27, 3416.84}; static const float iP033[3] = {-357.9, -414.89, 3407.04}; static const float iP034[3] = {-148.88, -631.35, 3409.9}; static const float iP035[3] = {156.38, -632.59, 3419.7}; static const float iP036[3] = {462.61, -469.21, 4431.51}; static const float iP037[3] = {466.6, 102.25, 4434.98}; static const float iP038[3] = {243.05, 474.34, 4562.02}; static const float iP039[3] = {-191.23, 474.4, 4554.42}; static const float iP040[3] = {-476.12, 111.05, 4451.11}; static const float iP041[3] = {-473.36, -470.74, 4444.78}; static const float iP042[3] = {-266.95, -748.41, 4447.78}; static const float iP043[3] = {211.14, -749.91, 4429.73}; static const float iP044[3] = {680.57, -370.27, 5943.46}; static const float iP045[3] = {834.01, 363.09, 6360.63}; static const float iP046[3] = {371.29, 804.51, 6486.26}; static const float iP047[3] = {-291.43, 797.22, 6494.28}; static const float iP048[3] = {-784.13, 370.75, 6378.01}; static const float iP049[3] = {-743.29, -325.82, 5943.46}; static const float iP050[3] = {-383.24, -804.77, 5943.46}; static const float iP051[3] = {283.47, -846.09, 5943.46}; static const float P052[3] = {599.09, -300.15, 7894.03}; static const float P053[3] = {735.48, 306.26, 7911.92}; static const float P054[3] = {246.22, 558.53, 8460.5}; static const float P055[3] = {-230.41, 559.84, 8473.23}; static const float P056[3] = {-698.66, 320.83, 7902.59}; static const float P057[3] = {-643.29, -299.16, 7902.59}; static const float P058[3] = {-341.47, -719.3, 7902.59}; static const float P059[3] = {252.57, -756.12, 7902.59}; static const float P060[3] = {458.39, -265.31, 9355.44}; #if 0 static const float P061[3] = {433.38, -161.9, 9503.03}; #endif static const float P062[3] = {224.04, 338.75, 9450.3}; static const float P063[3] = {-165.71, 341.04, 9462.35}; static const float P064[3] = {-298.11, 110.13, 10180.37}; static const float P065[3] = {-473.99, -219.71, 9355.44}; static const float P066[3] = {-211.97, -479.87, 9355.44}; static const float P067[3] = {192.86, -491.45, 9348.73}; static float P068[3] = {-136.29, -319.84, 1228.73}; static float P069[3] = {1111.17, -314.14, 1314.19}; static float P070[3] = {-1167.34, -321.61, 1319.45}; static float P071[3] = {1404.86, -306.66, 1235.45}; static float P072[3] = {-1409.73, -314.14, 1247.66}; static float P073[3] = {1254.01, -296.87, 1544.58}; static float P074[3] = {-1262.09, -291.7, 1504.26}; static float P075[3] = {965.71, -269.26, 1742.65}; static float P076[3] = {-900.97, -276.74, 1726.07}; static const float iP068[3] = {-136.29, -319.84, 1228.73}; static const float iP069[3] = {1111.17, -314.14, 1314.19}; static const float iP070[3] = {-1167.34, -321.61, 1319.45}; static const float iP071[3] = {1404.86, -306.66, 1235.45}; static const float iP072[3] = {-1409.73, -314.14, 1247.66}; static const float iP073[3] = {1254.01, -296.87, 1544.58}; static const float iP074[3] = {-1262.09, -291.7, 1504.26}; static const float iP075[3] = {965.71, -269.26, 1742.65}; static const float iP076[3] = {-900.97, -276.74, 1726.07}; static const float P077[3] = {1058, -448.81, 8194.66}; static const float P078[3] = {-1016.51, -456.43, 8190.62}; static const float P079[3] = {-1515.96, -676.45, 7754.93}; static const float P080[3] = {1856.75, -830.34, 7296.56}; static const float P081[3] = {1472.16, -497.38, 7399.68}; static const float P082[3] = {-1775.26, -829.51, 7298.46}; static const float P083[3] = {911.09, -252.51, 7510.99}; static const float P084[3] = {-1451.94, -495.62, 7384.3}; static const float P085[3] = {1598.75, -669.26, 7769.9}; static const float P086[3] = {-836.53, -250.08, 7463.25}; static const float P087[3] = {722.87, -158.18, 8006.41}; static const float P088[3] = {-688.86, -162.28, 7993.89}; static const float P089[3] = {-626.92, -185.3, 8364.98}; static const float P090[3] = {647.72, -189.46, 8354.99}; static float P091[3] = {0, 835.01, 5555.62}; static float P092[3] = {0, 1350.18, 5220.86}; static float P093[3] = {0, 1422.94, 5285.27}; static float P094[3] = {0, 1296.75, 5650.19}; static float P095[3] = {0, 795.63, 6493.88}; static const float iP091[3] = {0, 835.01, 5555.62}; static const float iP092[3] = {0, 1350.18, 5220.86}; static const float iP093[3] = {0, 1422.94, 5285.27}; static const float iP094[3] = {0, 1296.75, 5650.19}; static const float iP095[3] = {0, 795.63, 6493.88}; #if 0 static const float P096[3] = {-447.38, -165.99, 9499.6}; #endif static float P097[3] = {-194.91, -357.14, 10313.32}; static float P098[3] = {135.35, -357.66, 10307.94}; static const float iP097[3] = {-194.91, -357.14, 10313.32}; static const float iP098[3] = {135.35, -357.66, 10307.94}; static const float P099[3] = {-380.53, -221.14, 9677.98}; static const float P100[3] = {0, 412.99, 9629.33}; #if 0 static const float P101[3] = {5.7, 567, 7862.98}; #endif static float P102[3] = {59.51, -412.55, 10677.58}; static const float iP102[3] = {59.51, -412.55, 10677.58}; static const float P103[3] = {6.5, 484.74, 9009.94}; #if 0 static const float P104[3] = {-9.86, 567.62, 7858.65}; #endif static const float P105[3] = {-41.86, 476.51, 9078.17}; #if 0 static const float P106[3] = {22.75, 568.13, 7782.83}; static const float P107[3] = {58.93, 568.42, 7775.94}; #endif static const float P108[3] = {49.2, 476.83, 9078.24}; #if 0 static const float P109[3] = {99.21, 566, 7858.65}; #endif static float P110[3] = {-187.62, -410.04, 10674.12}; static const float iP110[3] = {-187.62, -410.04, 10674.12}; static float P111[3] = {-184.25, -318.7, 10723.88}; static const float iP111[3] = {-184.25, -318.7, 10723.88}; static const float P112[3] = {-179.61, -142.81, 10670.26}; static const float P113[3] = {57.43, -147.94, 10675.26}; static const float P114[3] = {54.06, -218.9, 10712.44}; static const float P115[3] = {-186.35, -212.09, 10713.76}; static const float P116[3] = {205.9, -84.61, 10275.97}; static const float P117[3] = {-230.96, -83.26, 10280.09}; static const float iP118[3] = {216.78, -509.17, 10098.94}; static const float iP119[3] = {-313.21, -510.79, 10102.62}; static float P118[3] = {216.78, -509.17, 10098.94}; static float P119[3] = {-313.21, -510.79, 10102.62}; static const float P120[3] = {217.95, 96.34, 10161.62}; static float P121[3] = {71.99, -319.74, 10717.7}; static const float iP121[3] = {71.99, -319.74, 10717.7}; static float P122[3] = {0, 602.74, 5375.84}; static const float iP122[3] = {0, 602.74, 5375.84}; static const float P123[3] = {-448.94, -203.14, 9499.6}; static const float P124[3] = {-442.64, -185.2, 9528.07}; static const float P125[3] = {-441.07, -148.05, 9528.07}; static const float P126[3] = {-443.43, -128.84, 9499.6}; static const float P127[3] = {-456.87, -146.78, 9466.67}; static const float P128[3] = {-453.68, -183.93, 9466.67}; static const float P129[3] = {428.43, -124.08, 9503.03}; static const float P130[3] = {419.73, -142.14, 9534.56}; static const float P131[3] = {419.92, -179.96, 9534.56}; static const float P132[3] = {431.2, -199.73, 9505.26}; static const float P133[3] = {442.28, -181.67, 9475.96}; static const float P134[3] = {442.08, -143.84, 9475.96}; /* *INDENT-ON* */ static void Dolphin001(GLenum cap) { glNormal3fv(N071); glBegin(cap); glVertex3fv(P001); glVertex3fv(P068); glVertex3fv(P010); glEnd(); glBegin(cap); glVertex3fv(P068); glVertex3fv(P076); glVertex3fv(P010); glEnd(); glBegin(cap); glVertex3fv(P068); glVertex3fv(P070); glVertex3fv(P076); glEnd(); glBegin(cap); glVertex3fv(P076); glVertex3fv(P070); glVertex3fv(P074); glEnd(); glBegin(cap); glVertex3fv(P070); glVertex3fv(P072); glVertex3fv(P074); glEnd(); glNormal3fv(N119); glBegin(cap); glVertex3fv(P072); glVertex3fv(P070); glVertex3fv(P074); glEnd(); glBegin(cap); glVertex3fv(P074); glVertex3fv(P070); glVertex3fv(P076); glEnd(); glBegin(cap); glVertex3fv(P070); glVertex3fv(P068); glVertex3fv(P076); glEnd(); glBegin(cap); glVertex3fv(P076); glVertex3fv(P068); glVertex3fv(P010); glEnd(); glBegin(cap); glVertex3fv(P068); glVertex3fv(P001); glVertex3fv(P010); glEnd(); } static void Dolphin002(GLenum cap) { glNormal3fv(N071); glBegin(cap); glVertex3fv(P011); glVertex3fv(P001); glVertex3fv(P009); glEnd(); glBegin(cap); glVertex3fv(P075); glVertex3fv(P011); glVertex3fv(P009); glEnd(); glBegin(cap); glVertex3fv(P069); glVertex3fv(P011); glVertex3fv(P075); glEnd(); glBegin(cap); glVertex3fv(P069); glVertex3fv(P075); glVertex3fv(P073); glEnd(); glBegin(cap); glVertex3fv(P071); glVertex3fv(P069); glVertex3fv(P073); glEnd(); glNormal3fv(N119); glBegin(cap); glVertex3fv(P001); glVertex3fv(P011); glVertex3fv(P009); glEnd(); glBegin(cap); glVertex3fv(P009); glVertex3fv(P011); glVertex3fv(P075); glEnd(); glBegin(cap); glVertex3fv(P011); glVertex3fv(P069); glVertex3fv(P075); glEnd(); glBegin(cap); glVertex3fv(P069); glVertex3fv(P073); glVertex3fv(P075); glEnd(); glBegin(cap); glVertex3fv(P069); glVertex3fv(P071); glVertex3fv(P073); glEnd(); } static void Dolphin003(GLenum cap) { glBegin(cap); glNormal3fv(N018); glVertex3fv(P018); glNormal3fv(N001); glVertex3fv(P001); glNormal3fv(N019); glVertex3fv(P019); glEnd(); glBegin(cap); glNormal3fv(N019); glVertex3fv(P019); glNormal3fv(N001); glVertex3fv(P001); glNormal3fv(N012); glVertex3fv(P012); glEnd(); glBegin(cap); glNormal3fv(N017); glVertex3fv(P017); glNormal3fv(N001); glVertex3fv(P001); glNormal3fv(N018); glVertex3fv(P018); glEnd(); glBegin(cap); glNormal3fv(N001); glVertex3fv(P001); glNormal3fv(N017); glVertex3fv(P017); glNormal3fv(N016); glVertex3fv(P016); glEnd(); glBegin(cap); glNormal3fv(N001); glVertex3fv(P001); glNormal3fv(N013); glVertex3fv(P013); glNormal3fv(N012); glVertex3fv(P012); glEnd(); glBegin(cap); glNormal3fv(N001); glVertex3fv(P001); glNormal3fv(N016); glVertex3fv(P016); glNormal3fv(N015); glVertex3fv(P015); glEnd(); glBegin(cap); glNormal3fv(N001); glVertex3fv(P001); glNormal3fv(N014); glVertex3fv(P014); glNormal3fv(N013); glVertex3fv(P013); glEnd(); glBegin(cap); glNormal3fv(N001); glVertex3fv(P001); glNormal3fv(N015); glVertex3fv(P015); glNormal3fv(N014); glVertex3fv(P014); glEnd(); } static void Dolphin004(GLenum cap) { glBegin(cap); glNormal3fv(N014); glVertex3fv(P014); glNormal3fv(N015); glVertex3fv(P015); glNormal3fv(N023); glVertex3fv(P023); glNormal3fv(N022); glVertex3fv(P022); glEnd(); glBegin(cap); glNormal3fv(N015); glVertex3fv(P015); glNormal3fv(N016); glVertex3fv(P016); glNormal3fv(N024); glVertex3fv(P024); glNormal3fv(N023); glVertex3fv(P023); glEnd(); glBegin(cap); glNormal3fv(N016); glVertex3fv(P016); glNormal3fv(N017); glVertex3fv(P017); glNormal3fv(N025); glVertex3fv(P025); glNormal3fv(N024); glVertex3fv(P024); glEnd(); glBegin(cap); glNormal3fv(N017); glVertex3fv(P017); glNormal3fv(N018); glVertex3fv(P018); glNormal3fv(N026); glVertex3fv(P026); glNormal3fv(N025); glVertex3fv(P025); glEnd(); glBegin(cap); glNormal3fv(N013); glVertex3fv(P013); glNormal3fv(N014); glVertex3fv(P014); glNormal3fv(N022); glVertex3fv(P022); glNormal3fv(N021); glVertex3fv(P021); glEnd(); glBegin(cap); glNormal3fv(N012); glVertex3fv(P012); glNormal3fv(N013); glVertex3fv(P013); glNormal3fv(N021); glVertex3fv(P021); glNormal3fv(N020); glVertex3fv(P020); glEnd(); glBegin(cap); glNormal3fv(N018); glVertex3fv(P018); glNormal3fv(N019); glVertex3fv(P019); glNormal3fv(N027); glVertex3fv(P027); glNormal3fv(N026); glVertex3fv(P026); glEnd(); glBegin(cap); glNormal3fv(N019); glVertex3fv(P019); glNormal3fv(N012); glVertex3fv(P012); glNormal3fv(N020); glVertex3fv(P020); glNormal3fv(N027); glVertex3fv(P027); glEnd(); } static void Dolphin005(GLenum cap) { glBegin(cap); glNormal3fv(N022); glVertex3fv(P022); glNormal3fv(N023); glVertex3fv(P023); glNormal3fv(N031); glVertex3fv(P031); glNormal3fv(N030); glVertex3fv(P030); glEnd(); glBegin(cap); glNormal3fv(N021); glVertex3fv(P021); glNormal3fv(N022); glVertex3fv(P022); glNormal3fv(N030); glVertex3fv(P030); glEnd(); glBegin(cap); glNormal3fv(N021); glVertex3fv(P021); glNormal3fv(N030); glVertex3fv(P030); glNormal3fv(N029); glVertex3fv(P029); glEnd(); glBegin(cap); glNormal3fv(N023); glVertex3fv(P023); glNormal3fv(N024); glVertex3fv(P024); glNormal3fv(N031); glVertex3fv(P031); glEnd(); glBegin(cap); glNormal3fv(N024); glVertex3fv(P024); glNormal3fv(N032); glVertex3fv(P032); glNormal3fv(N031); glVertex3fv(P031); glEnd(); glBegin(cap); glNormal3fv(N024); glVertex3fv(P024); glNormal3fv(N025); glVertex3fv(P025); glNormal3fv(N032); glVertex3fv(P032); glEnd(); glBegin(cap); glNormal3fv(N025); glVertex3fv(P025); glNormal3fv(N033); glVertex3fv(P033); glNormal3fv(N032); glVertex3fv(P032); glEnd(); glBegin(cap); glNormal3fv(N020); glVertex3fv(P020); glNormal3fv(N021); glVertex3fv(P021); glNormal3fv(N029); glVertex3fv(P029); glEnd(); glBegin(cap); glNormal3fv(N020); glVertex3fv(P020); glNormal3fv(N029); glVertex3fv(P029); glNormal3fv(N028); glVertex3fv(P028); glEnd(); glBegin(cap); glNormal3fv(N027); glVertex3fv(P027); glNormal3fv(N020); glVertex3fv(P020); glNormal3fv(N028); glVertex3fv(P028); glEnd(); glBegin(cap); glNormal3fv(N027); glVertex3fv(P027); glNormal3fv(N028); glVertex3fv(P028); glNormal3fv(N035); glVertex3fv(P035); glEnd(); glBegin(cap); glNormal3fv(N025); glVertex3fv(P025); glNormal3fv(N026); glVertex3fv(P026); glNormal3fv(N033); glVertex3fv(P033); glEnd(); glBegin(cap); glNormal3fv(N033); glVertex3fv(P033); glNormal3fv(N026); glVertex3fv(P026); glNormal3fv(N034); glVertex3fv(P034); glEnd(); glBegin(cap); glNormal3fv(N026); glVertex3fv(P026); glNormal3fv(N027); glVertex3fv(P027); glNormal3fv(N035); glVertex3fv(P035); glNormal3fv(N034); glVertex3fv(P034); glEnd(); } static void Dolphin006(GLenum cap) { glBegin(cap); glNormal3fv(N092); glVertex3fv(P092); glNormal3fv(N093); glVertex3fv(P093); glNormal3fv(N094); glVertex3fv(P094); glEnd(); glBegin(cap); glNormal3fv(N093); glVertex3fv(P093); glNormal3fv(N092); glVertex3fv(P092); glNormal3fv(N094); glVertex3fv(P094); glEnd(); glBegin(cap); glNormal3fv(N092); glVertex3fv(P092); glNormal3fv(N091); glVertex3fv(P091); glNormal3fv(N095); glVertex3fv(P095); glNormal3fv(N094); glVertex3fv(P094); glEnd(); glBegin(cap); glNormal3fv(N091); glVertex3fv(P091); glNormal3fv(N092); glVertex3fv(P092); glNormal3fv(N094); glVertex3fv(P094); glNormal3fv(N095); glVertex3fv(P095); glEnd(); glBegin(cap); glNormal3fv(N122); glVertex3fv(P122); glNormal3fv(N095); glVertex3fv(P095); glNormal3fv(N091); glVertex3fv(P091); glEnd(); glBegin(cap); glNormal3fv(N122); glVertex3fv(P122); glNormal3fv(N091); glVertex3fv(P091); glNormal3fv(N095); glVertex3fv(P095); glEnd(); } static void Dolphin007(GLenum cap) { glBegin(cap); glNormal3fv(N030); glVertex3fv(P030); glNormal3fv(N031); glVertex3fv(P031); glNormal3fv(N039); glVertex3fv(P039); glNormal3fv(N038); glVertex3fv(P038); glEnd(); glBegin(cap); glNormal3fv(N029); glVertex3fv(P029); glNormal3fv(N030); glVertex3fv(P030); glNormal3fv(N038); glVertex3fv(P038); glEnd(); glBegin(cap); glNormal3fv(N029); glVertex3fv(P029); glNormal3fv(N038); glVertex3fv(P038); glNormal3fv(N037); glVertex3fv(P037); glEnd(); glBegin(cap); glNormal3fv(N028); glVertex3fv(P028); glNormal3fv(N029); glVertex3fv(P029); glNormal3fv(N037); glVertex3fv(P037); glEnd(); glBegin(cap); glNormal3fv(N028); glVertex3fv(P028); glNormal3fv(N037); glVertex3fv(P037); glNormal3fv(N036); glVertex3fv(P036); glEnd(); glBegin(cap); glNormal3fv(N035); glVertex3fv(P035); glNormal3fv(N028); glVertex3fv(P028); glNormal3fv(N036); glVertex3fv(P036); glEnd(); glBegin(cap); glNormal3fv(N035); glVertex3fv(P035); glNormal3fv(N036); glVertex3fv(P036); glNormal3fv(N043); glVertex3fv(P043); glEnd(); glBegin(cap); glNormal3fv(N034); glVertex3fv(P034); glNormal3fv(N035); glVertex3fv(P035); glNormal3fv(N043); glVertex3fv(P043); glNormal3fv(N042); glVertex3fv(P042); glEnd(); glBegin(cap); glNormal3fv(N033); glVertex3fv(P033); glNormal3fv(N034); glVertex3fv(P034); glNormal3fv(N042); glVertex3fv(P042); glEnd(); glBegin(cap); glNormal3fv(N033); glVertex3fv(P033); glNormal3fv(N042); glVertex3fv(P042); glNormal3fv(N041); glVertex3fv(P041); glEnd(); glBegin(cap); glNormal3fv(N031); glVertex3fv(P031); glNormal3fv(N032); glVertex3fv(P032); glNormal3fv(N039); glVertex3fv(P039); glEnd(); glBegin(cap); glNormal3fv(N039); glVertex3fv(P039); glNormal3fv(N032); glVertex3fv(P032); glNormal3fv(N040); glVertex3fv(P040); glEnd(); glBegin(cap); glNormal3fv(N032); glVertex3fv(P032); glNormal3fv(N033); glVertex3fv(P033); glNormal3fv(N040); glVertex3fv(P040); glEnd(); glBegin(cap); glNormal3fv(N040); glVertex3fv(P040); glNormal3fv(N033); glVertex3fv(P033); glNormal3fv(N041); glVertex3fv(P041); glEnd(); } static void Dolphin008(GLenum cap) { glBegin(cap); glNormal3fv(N042); glVertex3fv(P042); glNormal3fv(N043); glVertex3fv(P043); glNormal3fv(N051); glVertex3fv(P051); glNormal3fv(N050); glVertex3fv(P050); glEnd(); glBegin(cap); glNormal3fv(N043); glVertex3fv(P043); glNormal3fv(N036); glVertex3fv(P036); glNormal3fv(N051); glVertex3fv(P051); glEnd(); glBegin(cap); glNormal3fv(N051); glVertex3fv(P051); glNormal3fv(N036); glVertex3fv(P036); glNormal3fv(N044); glVertex3fv(P044); glEnd(); glBegin(cap); glNormal3fv(N041); glVertex3fv(P041); glNormal3fv(N042); glVertex3fv(P042); glNormal3fv(N050); glVertex3fv(P050); glEnd(); glBegin(cap); glNormal3fv(N041); glVertex3fv(P041); glNormal3fv(N050); glVertex3fv(P050); glNormal3fv(N049); glVertex3fv(P049); glEnd(); glBegin(cap); glNormal3fv(N036); glVertex3fv(P036); glNormal3fv(N037); glVertex3fv(P037); glNormal3fv(N044); glVertex3fv(P044); glEnd(); glBegin(cap); glNormal3fv(N044); glVertex3fv(P044); glNormal3fv(N037); glVertex3fv(P037); glNormal3fv(N045); glVertex3fv(P045); glEnd(); glBegin(cap); glNormal3fv(N040); glVertex3fv(P040); glNormal3fv(N041); glVertex3fv(P041); glNormal3fv(N049); glVertex3fv(P049); glEnd(); glBegin(cap); glNormal3fv(N040); glVertex3fv(P040); glNormal3fv(N049); glVertex3fv(P049); glNormal3fv(N048); glVertex3fv(P048); glEnd(); glBegin(cap); glNormal3fv(N039); glVertex3fv(P039); glNormal3fv(N040); glVertex3fv(P040); glNormal3fv(N048); glVertex3fv(P048); glEnd(); glBegin(cap); glNormal3fv(N039); glVertex3fv(P039); glNormal3fv(N048); glVertex3fv(P048); glNormal3fv(N047); glVertex3fv(P047); glEnd(); glBegin(cap); glNormal3fv(N037); glVertex3fv(P037); glNormal3fv(N038); glVertex3fv(P038); glNormal3fv(N045); glVertex3fv(P045); glEnd(); glBegin(cap); glNormal3fv(N038); glVertex3fv(P038); glNormal3fv(N046); glVertex3fv(P046); glNormal3fv(N045); glVertex3fv(P045); glEnd(); glBegin(cap); glNormal3fv(N038); glVertex3fv(P038); glNormal3fv(N039); glVertex3fv(P039); glNormal3fv(N047); glVertex3fv(P047); glNormal3fv(N046); glVertex3fv(P046); glEnd(); } static void Dolphin009(GLenum cap) { glBegin(cap); glNormal3fv(N050); glVertex3fv(P050); glNormal3fv(N051); glVertex3fv(P051); glNormal3fv(N059); glVertex3fv(P059); glNormal3fv(N058); glVertex3fv(P058); glEnd(); glBegin(cap); glNormal3fv(N051); glVertex3fv(P051); glNormal3fv(N044); glVertex3fv(P044); glNormal3fv(N059); glVertex3fv(P059); glEnd(); glBegin(cap); glNormal3fv(N059); glVertex3fv(P059); glNormal3fv(N044); glVertex3fv(P044); glNormal3fv(N052); glVertex3fv(P052); glEnd(); glBegin(cap); glNormal3fv(N044); glVertex3fv(P044); glNormal3fv(N045); glVertex3fv(P045); glNormal3fv(N053); glVertex3fv(P053); glEnd(); glBegin(cap); glNormal3fv(N044); glVertex3fv(P044); glNormal3fv(N053); glVertex3fv(P053); glNormal3fv(N052); glVertex3fv(P052); glEnd(); glBegin(cap); glNormal3fv(N049); glVertex3fv(P049); glNormal3fv(N050); glVertex3fv(P050); glNormal3fv(N058); glVertex3fv(P058); glEnd(); glBegin(cap); glNormal3fv(N049); glVertex3fv(P049); glNormal3fv(N058); glVertex3fv(P058); glNormal3fv(N057); glVertex3fv(P057); glEnd(); glBegin(cap); glNormal3fv(N048); glVertex3fv(P048); glNormal3fv(N049); glVertex3fv(P049); glNormal3fv(N057); glVertex3fv(P057); glEnd(); glBegin(cap); glNormal3fv(N048); glVertex3fv(P048); glNormal3fv(N057); glVertex3fv(P057); glNormal3fv(N056); glVertex3fv(P056); glEnd(); glBegin(cap); glNormal3fv(N047); glVertex3fv(P047); glNormal3fv(N048); glVertex3fv(P048); glNormal3fv(N056); glVertex3fv(P056); glEnd(); glBegin(cap); glNormal3fv(N047); glVertex3fv(P047); glNormal3fv(N056); glVertex3fv(P056); glNormal3fv(N055); glVertex3fv(P055); glEnd(); glBegin(cap); glNormal3fv(N045); glVertex3fv(P045); glNormal3fv(N046); glVertex3fv(P046); glNormal3fv(N053); glVertex3fv(P053); glEnd(); glBegin(cap); glNormal3fv(N046); glVertex3fv(P046); glNormal3fv(N054); glVertex3fv(P054); glNormal3fv(N053); glVertex3fv(P053); glEnd(); glBegin(cap); glNormal3fv(N046); glVertex3fv(P046); glNormal3fv(N047); glVertex3fv(P047); glNormal3fv(N055); glVertex3fv(P055); glNormal3fv(N054); glVertex3fv(P054); glEnd(); } static void Dolphin010(GLenum cap) { glBegin(cap); glNormal3fv(N080); glVertex3fv(P080); glNormal3fv(N081); glVertex3fv(P081); glNormal3fv(N085); glVertex3fv(P085); glEnd(); glBegin(cap); glNormal3fv(N081); glVertex3fv(P081); glNormal3fv(N083); glVertex3fv(P083); glNormal3fv(N085); glVertex3fv(P085); glEnd(); glBegin(cap); glNormal3fv(N085); glVertex3fv(P085); glNormal3fv(N083); glVertex3fv(P083); glNormal3fv(N077); glVertex3fv(P077); glEnd(); glBegin(cap); glNormal3fv(N083); glVertex3fv(P083); glNormal3fv(N087); glVertex3fv(P087); glNormal3fv(N077); glVertex3fv(P077); glEnd(); glBegin(cap); glNormal3fv(N077); glVertex3fv(P077); glNormal3fv(N087); glVertex3fv(P087); glNormal3fv(N090); glVertex3fv(P090); glEnd(); glBegin(cap); glNormal3fv(N081); glVertex3fv(P081); glNormal3fv(N080); glVertex3fv(P080); glNormal3fv(N085); glVertex3fv(P085); glEnd(); glBegin(cap); glNormal3fv(N083); glVertex3fv(P083); glNormal3fv(N081); glVertex3fv(P081); glNormal3fv(N085); glVertex3fv(P085); glEnd(); glBegin(cap); glNormal3fv(N083); glVertex3fv(P083); glNormal3fv(N085); glVertex3fv(P085); glNormal3fv(N077); glVertex3fv(P077); glEnd(); glBegin(cap); glNormal3fv(N087); glVertex3fv(P087); glNormal3fv(N083); glVertex3fv(P083); glNormal3fv(N077); glVertex3fv(P077); glEnd(); glBegin(cap); glNormal3fv(N087); glVertex3fv(P087); glNormal3fv(N077); glVertex3fv(P077); glNormal3fv(N090); glVertex3fv(P090); glEnd(); } static void Dolphin011(GLenum cap) { glBegin(cap); glNormal3fv(N082); glVertex3fv(P082); glNormal3fv(N084); glVertex3fv(P084); glNormal3fv(N079); glVertex3fv(P079); glEnd(); glBegin(cap); glNormal3fv(N084); glVertex3fv(P084); glNormal3fv(N086); glVertex3fv(P086); glNormal3fv(N079); glVertex3fv(P079); glEnd(); glBegin(cap); glNormal3fv(N079); glVertex3fv(P079); glNormal3fv(N086); glVertex3fv(P086); glNormal3fv(N078); glVertex3fv(P078); glEnd(); glBegin(cap); glNormal3fv(N086); glVertex3fv(P086); glNormal3fv(N088); glVertex3fv(P088); glNormal3fv(N078); glVertex3fv(P078); glEnd(); glBegin(cap); glNormal3fv(N078); glVertex3fv(P078); glNormal3fv(N088); glVertex3fv(P088); glNormal3fv(N089); glVertex3fv(P089); glEnd(); glBegin(cap); glNormal3fv(N088); glVertex3fv(P088); glNormal3fv(N086); glVertex3fv(P086); glNormal3fv(N089); glVertex3fv(P089); glEnd(); glBegin(cap); glNormal3fv(N089); glVertex3fv(P089); glNormal3fv(N086); glVertex3fv(P086); glNormal3fv(N078); glVertex3fv(P078); glEnd(); glBegin(cap); glNormal3fv(N086); glVertex3fv(P086); glNormal3fv(N084); glVertex3fv(P084); glNormal3fv(N078); glVertex3fv(P078); glEnd(); glBegin(cap); glNormal3fv(N078); glVertex3fv(P078); glNormal3fv(N084); glVertex3fv(P084); glNormal3fv(N079); glVertex3fv(P079); glEnd(); glBegin(cap); glNormal3fv(N084); glVertex3fv(P084); glNormal3fv(N082); glVertex3fv(P082); glNormal3fv(N079); glVertex3fv(P079); glEnd(); } static void Dolphin012(GLenum cap) { glBegin(cap); glNormal3fv(N058); glVertex3fv(P058); glNormal3fv(N059); glVertex3fv(P059); glNormal3fv(N067); glVertex3fv(P067); glNormal3fv(N066); glVertex3fv(P066); glEnd(); glBegin(cap); glNormal3fv(N059); glVertex3fv(P059); glNormal3fv(N052); glVertex3fv(P052); glNormal3fv(N060); glVertex3fv(P060); glEnd(); glBegin(cap); glNormal3fv(N059); glVertex3fv(P059); glNormal3fv(N060); glVertex3fv(P060); glNormal3fv(N067); glVertex3fv(P067); glEnd(); glBegin(cap); glNormal3fv(N058); glVertex3fv(P058); glNormal3fv(N066); glVertex3fv(P066); glNormal3fv(N065); glVertex3fv(P065); glEnd(); glBegin(cap); glNormal3fv(N058); glVertex3fv(P058); glNormal3fv(N065); glVertex3fv(P065); glNormal3fv(N057); glVertex3fv(P057); glEnd(); glBegin(cap); glNormal3fv(N056); glVertex3fv(P056); glNormal3fv(N057); glVertex3fv(P057); glNormal3fv(N065); glVertex3fv(P065); glEnd(); glBegin(cap); glNormal3fv(N056); glVertex3fv(P056); glNormal3fv(N065); glVertex3fv(P065); glNormal3fv(N006); glVertex3fv(P006); glEnd(); glBegin(cap); glNormal3fv(N056); glVertex3fv(P056); glNormal3fv(N006); glVertex3fv(P006); glNormal3fv(N063); glVertex3fv(P063); glEnd(); glBegin(cap); glNormal3fv(N056); glVertex3fv(P056); glNormal3fv(N063); glVertex3fv(P063); glNormal3fv(N055); glVertex3fv(P055); glEnd(); glBegin(cap); glNormal3fv(N054); glVertex3fv(P054); glNormal3fv(N062); glVertex3fv(P062); glNormal3fv(N005); glVertex3fv(P005); glEnd(); glBegin(cap); glNormal3fv(N054); glVertex3fv(P054); glNormal3fv(N005); glVertex3fv(P005); glNormal3fv(N053); glVertex3fv(P053); glEnd(); glBegin(cap); glNormal3fv(N052); glVertex3fv(P052); glNormal3fv(N053); glVertex3fv(P053); glNormal3fv(N005); glVertex3fv(P005); glNormal3fv(N060); glVertex3fv(P060); glEnd(); } static void Dolphin013(GLenum cap) { glBegin(cap); glNormal3fv(N116); glVertex3fv(P116); glNormal3fv(N117); glVertex3fv(P117); glNormal3fv(N112); glVertex3fv(P112); glNormal3fv(N113); glVertex3fv(P113); glEnd(); glBegin(cap); glNormal3fv(N114); glVertex3fv(P114); glNormal3fv(N113); glVertex3fv(P113); glNormal3fv(N112); glVertex3fv(P112); glNormal3fv(N115); glVertex3fv(P115); glEnd(); glBegin(cap); glNormal3fv(N114); glVertex3fv(P114); glNormal3fv(N116); glVertex3fv(P116); glNormal3fv(N113); glVertex3fv(P113); glEnd(); glBegin(cap); glNormal3fv(N114); glVertex3fv(P114); glNormal3fv(N007); glVertex3fv(P007); glNormal3fv(N116); glVertex3fv(P116); glEnd(); glBegin(cap); glNormal3fv(N007); glVertex3fv(P007); glNormal3fv(N002); glVertex3fv(P002); glNormal3fv(N116); glVertex3fv(P116); glEnd(); glBegin(cap); glVertex3fv(P002); glVertex3fv(P007); glVertex3fv(P008); glVertex3fv(P099); glEnd(); glBegin(cap); glVertex3fv(P007); glVertex3fv(P114); glVertex3fv(P115); glVertex3fv(P008); glEnd(); glBegin(cap); glNormal3fv(N117); glVertex3fv(P117); glNormal3fv(N099); glVertex3fv(P099); glNormal3fv(N008); glVertex3fv(P008); glEnd(); glBegin(cap); glNormal3fv(N117); glVertex3fv(P117); glNormal3fv(N008); glVertex3fv(P008); glNormal3fv(N112); glVertex3fv(P112); glEnd(); glBegin(cap); glNormal3fv(N112); glVertex3fv(P112); glNormal3fv(N008); glVertex3fv(P008); glNormal3fv(N115); glVertex3fv(P115); glEnd(); } static void Dolphin014(GLenum cap) { glBegin(cap); glNormal3fv(N111); glVertex3fv(P111); glNormal3fv(N110); glVertex3fv(P110); glNormal3fv(N102); glVertex3fv(P102); glNormal3fv(N121); glVertex3fv(P121); glEnd(); glBegin(cap); glNormal3fv(N111); glVertex3fv(P111); glNormal3fv(N097); glVertex3fv(P097); glNormal3fv(N110); glVertex3fv(P110); glEnd(); glBegin(cap); glNormal3fv(N097); glVertex3fv(P097); glNormal3fv(N119); glVertex3fv(P119); glNormal3fv(N110); glVertex3fv(P110); glEnd(); glBegin(cap); glNormal3fv(N097); glVertex3fv(P097); glNormal3fv(N099); glVertex3fv(P099); glNormal3fv(N119); glVertex3fv(P119); glEnd(); glBegin(cap); glNormal3fv(N099); glVertex3fv(P099); glNormal3fv(N065); glVertex3fv(P065); glNormal3fv(N119); glVertex3fv(P119); glEnd(); glBegin(cap); glNormal3fv(N065); glVertex3fv(P065); glNormal3fv(N066); glVertex3fv(P066); glNormal3fv(N119); glVertex3fv(P119); glEnd(); glBegin(cap); glVertex3fv(P098); glVertex3fv(P097); glVertex3fv(P111); glVertex3fv(P121); glEnd(); glBegin(cap); glVertex3fv(P002); glVertex3fv(P099); glVertex3fv(P097); glVertex3fv(P098); glEnd(); glBegin(cap); glNormal3fv(N110); glVertex3fv(P110); glNormal3fv(N119); glVertex3fv(P119); glNormal3fv(N118); glVertex3fv(P118); glNormal3fv(N102); glVertex3fv(P102); glEnd(); glBegin(cap); glNormal3fv(N119); glVertex3fv(P119); glNormal3fv(N066); glVertex3fv(P066); glNormal3fv(N067); glVertex3fv(P067); glNormal3fv(N118); glVertex3fv(P118); glEnd(); glBegin(cap); glNormal3fv(N067); glVertex3fv(P067); glNormal3fv(N060); glVertex3fv(P060); glNormal3fv(N002); glVertex3fv(P002); glEnd(); glBegin(cap); glNormal3fv(N067); glVertex3fv(P067); glNormal3fv(N002); glVertex3fv(P002); glNormal3fv(N118); glVertex3fv(P118); glEnd(); glBegin(cap); glNormal3fv(N118); glVertex3fv(P118); glNormal3fv(N002); glVertex3fv(P002); glNormal3fv(N098); glVertex3fv(P098); glEnd(); glBegin(cap); glNormal3fv(N118); glVertex3fv(P118); glNormal3fv(N098); glVertex3fv(P098); glNormal3fv(N102); glVertex3fv(P102); glEnd(); glBegin(cap); glNormal3fv(N102); glVertex3fv(P102); glNormal3fv(N098); glVertex3fv(P098); glNormal3fv(N121); glVertex3fv(P121); glEnd(); } static void Dolphin015(GLenum cap) { glBegin(cap); glNormal3fv(N055); glVertex3fv(P055); glNormal3fv(N003); glVertex3fv(P003); glNormal3fv(N054); glVertex3fv(P054); glEnd(); glBegin(cap); glNormal3fv(N003); glVertex3fv(P003); glNormal3fv(N055); glVertex3fv(P055); glNormal3fv(N063); glVertex3fv(P063); glEnd(); glBegin(cap); glNormal3fv(N003); glVertex3fv(P003); glNormal3fv(N063); glVertex3fv(P063); glNormal3fv(N100); glVertex3fv(P100); glEnd(); glBegin(cap); glNormal3fv(N003); glVertex3fv(P003); glNormal3fv(N100); glVertex3fv(P100); glNormal3fv(N054); glVertex3fv(P054); glEnd(); glBegin(cap); glNormal3fv(N054); glVertex3fv(P054); glNormal3fv(N100); glVertex3fv(P100); glNormal3fv(N062); glVertex3fv(P062); glEnd(); glBegin(cap); glNormal3fv(N100); glVertex3fv(P100); glNormal3fv(N064); glVertex3fv(P064); glNormal3fv(N120); glVertex3fv(P120); glEnd(); glBegin(cap); glNormal3fv(N100); glVertex3fv(P100); glNormal3fv(N063); glVertex3fv(P063); glNormal3fv(N064); glVertex3fv(P064); glEnd(); glBegin(cap); glNormal3fv(N063); glVertex3fv(P063); glNormal3fv(N006); glVertex3fv(P006); glNormal3fv(N064); glVertex3fv(P064); glEnd(); glBegin(cap); glNormal3fv(N064); glVertex3fv(P064); glNormal3fv(N006); glVertex3fv(P006); glNormal3fv(N099); glVertex3fv(P099); glEnd(); glBegin(cap); glNormal3fv(N064); glVertex3fv(P064); glNormal3fv(N099); glVertex3fv(P099); glNormal3fv(N117); glVertex3fv(P117); glEnd(); glBegin(cap); glNormal3fv(N120); glVertex3fv(P120); glNormal3fv(N064); glVertex3fv(P064); glNormal3fv(N117); glVertex3fv(P117); glNormal3fv(N116); glVertex3fv(P116); glEnd(); glBegin(cap); glNormal3fv(N006); glVertex3fv(P006); glNormal3fv(N065); glVertex3fv(P065); glNormal3fv(N099); glVertex3fv(P099); glEnd(); glBegin(cap); glNormal3fv(N062); glVertex3fv(P062); glNormal3fv(N100); glVertex3fv(P100); glNormal3fv(N120); glVertex3fv(P120); glEnd(); glBegin(cap); glNormal3fv(N005); glVertex3fv(P005); glNormal3fv(N062); glVertex3fv(P062); glNormal3fv(N120); glVertex3fv(P120); glEnd(); glBegin(cap); glNormal3fv(N005); glVertex3fv(P005); glNormal3fv(N120); glVertex3fv(P120); glNormal3fv(N002); glVertex3fv(P002); glEnd(); glBegin(cap); glNormal3fv(N002); glVertex3fv(P002); glNormal3fv(N120); glVertex3fv(P120); glNormal3fv(N116); glVertex3fv(P116); glEnd(); glBegin(cap); glNormal3fv(N060); glVertex3fv(P060); glNormal3fv(N005); glVertex3fv(P005); glNormal3fv(N002); glVertex3fv(P002); glEnd(); } static void Dolphin016(GLenum cap) { glDisable(GL_DEPTH_TEST); glBegin(cap); glVertex3fv(P123); glVertex3fv(P124); glVertex3fv(P125); glVertex3fv(P126); glVertex3fv(P127); glVertex3fv(P128); glEnd(); glBegin(cap); glVertex3fv(P129); glVertex3fv(P130); glVertex3fv(P131); glVertex3fv(P132); glVertex3fv(P133); glVertex3fv(P134); glEnd(); glBegin(cap); glVertex3fv(P103); glVertex3fv(P105); glVertex3fv(P108); glEnd(); glEnable(GL_DEPTH_TEST); } void DrawDolphin(fishRec * fish, int wire) { float seg0, seg1, seg2, seg3, seg4, seg5, seg6, seg7; float pitch, thrash, chomp; GLenum cap; fish->htail = (int) (fish->htail - (int) (10 * fish->v)) % 360; thrash = 70 * fish->v; seg0 = 1 * thrash * sin((fish->htail) * RRAD); seg3 = 1 * thrash * sin((fish->htail) * RRAD); seg1 = 2 * thrash * sin((fish->htail + 4) * RRAD); seg2 = 3 * thrash * sin((fish->htail + 6) * RRAD); seg4 = 4 * thrash * sin((fish->htail + 10) * RRAD); seg5 = 4.5 * thrash * sin((fish->htail + 15) * RRAD); seg6 = 5 * thrash * sin((fish->htail + 20) * RRAD); seg7 = 6 * thrash * sin((fish->htail + 30) * RRAD); pitch = fish->v * sin((fish->htail + 180) * RRAD); /* if (fish->v > 2) { chomp = -(fish->v - 2) * 200; }*/ chomp = 100; P012[1] = iP012[1] + seg5; P013[1] = iP013[1] + seg5; P014[1] = iP014[1] + seg5; P015[1] = iP015[1] + seg5; P016[1] = iP016[1] + seg5; P017[1] = iP017[1] + seg5; P018[1] = iP018[1] + seg5; P019[1] = iP019[1] + seg5; P020[1] = iP020[1] + seg4; P021[1] = iP021[1] + seg4; P022[1] = iP022[1] + seg4; P023[1] = iP023[1] + seg4; P024[1] = iP024[1] + seg4; P025[1] = iP025[1] + seg4; P026[1] = iP026[1] + seg4; P027[1] = iP027[1] + seg4; P028[1] = iP028[1] + seg2; P029[1] = iP029[1] + seg2; P030[1] = iP030[1] + seg2; P031[1] = iP031[1] + seg2; P032[1] = iP032[1] + seg2; P033[1] = iP033[1] + seg2; P034[1] = iP034[1] + seg2; P035[1] = iP035[1] + seg2; P036[1] = iP036[1] + seg1; P037[1] = iP037[1] + seg1; P038[1] = iP038[1] + seg1; P039[1] = iP039[1] + seg1; P040[1] = iP040[1] + seg1; P041[1] = iP041[1] + seg1; P042[1] = iP042[1] + seg1; P043[1] = iP043[1] + seg1; P044[1] = iP044[1] + seg0; P045[1] = iP045[1] + seg0; P046[1] = iP046[1] + seg0; P047[1] = iP047[1] + seg0; P048[1] = iP048[1] + seg0; P049[1] = iP049[1] + seg0; P050[1] = iP050[1] + seg0; P051[1] = iP051[1] + seg0; P009[1] = iP009[1] + seg6; P010[1] = iP010[1] + seg6; P075[1] = iP075[1] + seg6; P076[1] = iP076[1] + seg6; P001[1] = iP001[1] + seg7; P011[1] = iP011[1] + seg7; P068[1] = iP068[1] + seg7; P069[1] = iP069[1] + seg7; P070[1] = iP070[1] + seg7; P071[1] = iP071[1] + seg7; P072[1] = iP072[1] + seg7; P073[1] = iP073[1] + seg7; P074[1] = iP074[1] + seg7; P091[1] = iP091[1] + seg3; P092[1] = iP092[1] + seg3; P093[1] = iP093[1] + seg3; P094[1] = iP094[1] + seg3; P095[1] = iP095[1] + seg3; P122[1] = iP122[1] + seg3 * 1.5; P097[1] = iP097[1] + chomp; P098[1] = iP098[1] + chomp; P102[1] = iP102[1] + chomp; P110[1] = iP110[1] + chomp; P111[1] = iP111[1] + chomp; P121[1] = iP121[1] + chomp; P118[1] = iP118[1] + chomp; P119[1] = iP119[1] + chomp; glPushMatrix(); glRotatef(pitch, 1, 0, 0); glTranslatef(0, 0, 7000); glRotatef(180, 0, 1, 0); glEnable(GL_CULL_FACE); cap = wire ? GL_LINE_LOOP : GL_POLYGON; Dolphin014(cap); Dolphin010(cap); Dolphin009(cap); Dolphin012(cap); Dolphin013(cap); Dolphin006(cap); Dolphin002(cap); Dolphin001(cap); Dolphin003(cap); Dolphin015(cap); Dolphin004(cap); Dolphin005(cap); Dolphin007(cap); Dolphin008(cap); Dolphin011(cap); Dolphin016(cap); glDisable(GL_CULL_FACE); glPopMatrix(); } #endif xscreensaver-5.36/hacks/glx/gears.c000644 000767 000024 00000057056 12710313202 017272 0ustar00jwzstaff000000 000000 /* gears, Copyright (c) 2007-2014 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. * * Originally written by Brian Paul in 1996 or earlier; * rewritten by jwz in Nov 2007. */ #define DEFAULTS "*delay: 30000 \n" \ "*count: 0 \n" \ "*showFPS: False \n" \ "*wireframe: False \n" \ "*suppressRotationAnimation: True\n" \ # define refresh_gears 0 # define release_gears 0 #undef countof #define countof(x) (sizeof((x))/sizeof((*x))) #include "xlockmore.h" #include "involute.h" #include "normals.h" #include "tube.h" #include "rotator.h" #include "gltrackball.h" #include #ifdef USE_GL /* whole file */ #undef BELLRAND #define BELLRAND(n) ((frand((n)) + frand((n)) + frand((n))) / 3) #define DEF_SPIN "True" #define DEF_WANDER "True" #define DEF_SPEED "1.0" typedef struct { GLXContext *glx_context; rotator *rot; trackball_state *trackball; Bool button_down_p; Bool planetary_p; int ngears; gear **gears; GLuint armature_dlist; int armature_polygons; struct { GLfloat x1, y1, x2, y2; } bbox; } gears_configuration; static gears_configuration *bps = NULL; static Bool do_spin; static GLfloat speed; static Bool do_wander; static XrmOptionDescRec opts[] = { { "-spin", ".spin", XrmoptionNoArg, "True" }, { "+spin", ".spin", XrmoptionNoArg, "False" }, { "-speed", ".speed", XrmoptionSepArg, 0 }, { "-wander", ".wander", XrmoptionNoArg, "True" }, { "+wander", ".wander", XrmoptionNoArg, "False" }, }; static argtype vars[] = { {&do_spin, "spin", "Spin", DEF_SPIN, t_Bool}, {&do_wander, "wander", "Wander", DEF_WANDER, t_Bool}, {&speed, "speed", "Speed", DEF_SPEED, t_Float}, }; ENTRYPOINT ModeSpecOpt gears_opts = {countof(opts), opts, countof(vars), vars, NULL}; /* Window management, etc */ ENTRYPOINT void reshape_gears (ModeInfo *mi, int width, int height) { GLfloat h = (GLfloat) height / (GLfloat) width; glViewport (0, 0, (GLint) width, (GLint) height); glMatrixMode(GL_PROJECTION); glLoadIdentity(); gluPerspective (30.0, 1/h, 1.0, 100.0); glMatrixMode(GL_MODELVIEW); glLoadIdentity(); gluLookAt( 0.0, 0.0, 30.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0); # ifdef HAVE_MOBILE /* Keep it the same relative size when rotated. */ { int o = (int) current_device_rotation(); if (o != 0 && o != 180 && o != -180) glScalef (1/h, 1/h, 1/h); } # endif glClear(GL_COLOR_BUFFER_BIT); } static void free_gear (gear *g) { if (g->dlist) glDeleteLists (g->dlist, 1); free (g); } /* Create and return a new gear sized for placement next to or on top of the given parent gear (if any.) Returns 0 if out of memory. [Mostly lifted from pinion.c] */ static gear * new_gear (ModeInfo *mi, gear *parent) { gears_configuration *bp = &bps[MI_SCREEN(mi)]; gear *g = (gear *) calloc (1, sizeof (*g)); static unsigned long id = 0; /* only used in debugging output */ if (!g) return 0; g->id = ++id; /* Pick the size of the teeth. */ if (parent) /* adjascent gears need matching teeth */ { g->tooth_w = parent->tooth_w; g->tooth_h = parent->tooth_h; g->tooth_slope = -parent->tooth_slope; } else /* gears that begin trains get any size they want */ { g->tooth_w = 0.007 * (1.0 + BELLRAND(4.0)); g->tooth_h = 0.005 * (1.0 + BELLRAND(8.0)); /* g->tooth_slope = ((random() % 8) ? 0 : 0.5 + BELLRAND(1)); */ } /* Pick the number of teeth, and thus, the radius. */ { double c; if (!parent || bp->ngears > 4) g->nteeth = 5 + BELLRAND (20); else g->nteeth = parent->nteeth * (0.5 + BELLRAND(2)); c = g->nteeth * g->tooth_w * 2; /* circumference = teeth + gaps */ g->r = c / (M_PI * 2); /* c = 2 pi r */ } g->thickness = g->tooth_w + frand (g->r); g->thickness2 = g->thickness * 0.7; g->thickness3 = g->thickness; /* Colorize */ g->color[0] = 0.5 + frand(0.5); g->color[1] = 0.5 + frand(0.5); g->color[2] = 0.5 + frand(0.5); g->color[3] = 1.0; g->color2[0] = g->color[0] * 0.85; g->color2[1] = g->color[1] * 0.85; g->color2[2] = g->color[2] * 0.85; g->color2[3] = g->color[3]; /* Decide on shape of gear interior: - just a ring with teeth; - that, plus a thinner in-set "plate" in the middle; - that, plus a thin raised "lip" on the inner plate; - or, a wide lip (really, a thicker third inner plate.) */ if ((random() % 10) == 0) { /* inner_r can go all the way in; there's no inset disc. */ g->inner_r = (g->r * 0.1) + frand((g->r - g->tooth_h/2) * 0.8); g->inner_r2 = 0; g->inner_r3 = 0; } else { /* inner_r doesn't go in very far; inner_r2 is an inset disc. */ g->inner_r = (g->r * 0.5) + frand((g->r - g->tooth_h) * 0.4); g->inner_r2 = (g->r * 0.1) + frand(g->inner_r * 0.5); g->inner_r3 = 0; if (g->inner_r2 > (g->r * 0.2)) { int nn = (random() % 10); if (nn <= 2) g->inner_r3 = (g->r * 0.1) + frand(g->inner_r2 * 0.2); else if (nn <= 7 && g->inner_r2 >= 0.1) g->inner_r3 = g->inner_r2 - 0.01; } } /* If we have three discs, sometimes make the middle disc be spokes. */ if (g->inner_r3 && ((random() % 5) == 0)) { g->spokes = 2 + BELLRAND (5); g->spoke_thickness = 1 + frand(7.0); if (g->spokes == 2 && g->spoke_thickness < 2) g->spoke_thickness += 1; } /* Sometimes add little nubbly bits, if there is room. */ if (g->nteeth > 5) { double size = 0; involute_biggest_ring (g, 0, &size, 0); if (size > g->r * 0.2 && (random() % 5) == 0) { g->nubs = 1 + (random() % 16); if (g->nubs > 8) g->nubs = 1; } } if (g->inner_r3 > g->inner_r2) abort(); if (g->inner_r2 > g->inner_r) abort(); if (g->inner_r > g->r) abort(); /* Decide how complex the polygon model should be. */ { double pix = g->tooth_h * MI_HEIGHT(mi); /* approx. tooth size in pixels */ if (pix <= 2.5) g->size = INVOLUTE_SMALL; else if (pix <= 3.5) g->size = INVOLUTE_MEDIUM; else if (pix <= 25) g->size = INVOLUTE_LARGE; else g->size = INVOLUTE_HUGE; } g->base_p = !parent; return g; } /* Given a newly-created gear, place it next to its parent in the scene, with its teeth meshed and the proper velocity. Returns False if it didn't work. (Call this a bunch of times until either it works, or you decide it's probably not going to.) [Mostly lifted from pinion.c] */ static Bool place_gear (ModeInfo *mi, gear *g, gear *parent) { gears_configuration *bp = &bps[MI_SCREEN(mi)]; /* Compute this gear's velocity. */ if (! parent) { g->ratio = 0.8 + BELLRAND(0.4); /* 0.8-1.2 = 8-12rpm @ 60fps */ g->th = 1; /* not 0 */ } else { /* Gearing ratio is the ratio of the number of teeth to previous gear (which is also the ratio of the circumferences.) */ g->ratio = (double) parent->nteeth / (double) g->nteeth; /* Set our initial rotation to match that of the previous gear, multiplied by the gearing ratio. (This is finessed later, once we know the exact position of the gear relative to its parent.) */ g->th = -(parent->th * g->ratio); if (g->nteeth & 1) /* rotate 1/2 tooth-size if odd number of teeth */ { double off = (180.0 / g->nteeth); if (g->th > 0) g->th += off; else g->th -= off; } /* ratios are cumulative for all gears in the train. */ g->ratio *= parent->ratio; } if (parent) /* Place the gear next to the parent. */ { double r_off = parent->r + g->r; int angle; angle = (random() % 360) - 180; /* -180 to +180 degrees */ g->x = parent->x + (cos ((double) angle * (M_PI / 180)) * r_off); g->y = parent->y + (sin ((double) angle * (M_PI / 180)) * r_off); g->z = parent->z; /* avoid accidentally changing sign of "th" in the math below. */ g->th += (g->th > 0 ? 360 : -360); /* Adjust the rotation of the gear so that its teeth line up with its parent, based on the position of the gear and the current rotation of the parent. */ { double p_c = 2 * M_PI * parent->r; /* circumference of parent */ double g_c = 2 * M_PI * g->r; /* circumference of g */ double p_t = p_c * (angle/360.0); /* distance travelled along circumference of parent when moving "angle" degrees along parent. */ double g_rat = p_t / g_c; /* if travelling that distance along circumference of g, ratio of g's circumference travelled. */ double g_th = 360.0 * g_rat; /* that ratio in degrees */ g->th += angle + g_th; } } /* If the position we picked for this gear causes it to overlap with any earlier gear in the train, give up. */ { int i; for (i = bp->ngears-1; i >= 0; i--) { gear *og = bp->gears[i]; if (og == g) continue; if (og == parent) continue; if (g->z != og->z) continue; /* Ignore unless on same layer */ /* Collision detection without sqrt: d = sqrt(a^2 + b^2) d^2 = a^2 + b^2 d < r1 + r2 d^2 < (r1 + r2)^2 */ if (((g->x - og->x) * (g->x - og->x) + (g->y - og->y) * (g->y - og->y)) < ((g->r + g->tooth_h + og->r + og->tooth_h) * (g->r + g->tooth_h + og->r + og->tooth_h))) return False; } } return True; } /* Make a new gear, place it next to its parent in the scene, with its teeth meshed and the proper velocity. Returns the gear; or 0 if it didn't work. (Call this a bunch of times until either it works, or you decide it's probably not going to.) [Mostly lifted from pinion.c] */ static gear * place_new_gear (ModeInfo *mi, gear *parent) { gears_configuration *bp = &bps[MI_SCREEN(mi)]; int loop_count = 0; gear *g = 0; while (1) { loop_count++; if (loop_count >= 100) { if (g) free_gear (g); g = 0; break; } g = new_gear (mi, parent); if (!g) return 0; /* out of memory? */ if (place_gear (mi, g, parent)) break; } if (! g) return 0; /* We got a gear, and it is properly positioned. Insert it in the scene. */ bp->gears[bp->ngears++] = g; return g; } static int arm (GLfloat length, GLfloat width1, GLfloat height1, GLfloat width2, GLfloat height2, Bool wire) { int polys = 0; glShadeModel(GL_FLAT); #if 0 /* don't need these - they're embedded in other objects */ /* draw end 1 */ glFrontFace(GL_CW); glNormal3f(-1, 0, 0); glBegin(wire ? GL_LINE_LOOP : GL_QUADS); glVertex3f(-length/2, -width1/2, -height1/2); glVertex3f(-length/2, width1/2, -height1/2); glVertex3f(-length/2, width1/2, height1/2); glVertex3f(-length/2, -width1/2, height1/2); polys++; glEnd(); /* draw end 2 */ glFrontFace(GL_CCW); glNormal3f(1, 0, 0); glBegin(wire ? GL_LINE_LOOP : GL_QUADS); glVertex3f(length/2, -width2/2, -height2/2); glVertex3f(length/2, width2/2, -height2/2); glVertex3f(length/2, width2/2, height2/2); glVertex3f(length/2, -width2/2, height2/2); polys++; glEnd(); #endif /* draw top */ glFrontFace(GL_CCW); glNormal3f(0, 0, -1); glBegin(wire ? GL_LINE_LOOP : GL_QUADS); glVertex3f(-length/2, -width1/2, -height1/2); glVertex3f(-length/2, width1/2, -height1/2); glVertex3f( length/2, width2/2, -height2/2); glVertex3f( length/2, -width2/2, -height2/2); polys++; glEnd(); /* draw bottom */ glFrontFace(GL_CW); glNormal3f(0, 0, 1); glBegin(wire ? GL_LINE_LOOP : GL_QUADS); glVertex3f(-length/2, -width1/2, height1/2); glVertex3f(-length/2, width1/2, height1/2); glVertex3f( length/2, width2/2, height2/2); glVertex3f( length/2, -width2/2, height2/2); polys++; glEnd(); /* draw left */ glFrontFace(GL_CW); glNormal3f(0, -1, 0); glBegin(wire ? GL_LINE_LOOP : GL_QUADS); glVertex3f(-length/2, -width1/2, -height1/2); glVertex3f(-length/2, -width1/2, height1/2); glVertex3f( length/2, -width2/2, height2/2); glVertex3f( length/2, -width2/2, -height2/2); polys++; glEnd(); /* draw right */ glFrontFace(GL_CCW); glNormal3f(0, 1, 0); glBegin(wire ? GL_LINE_LOOP : GL_QUADS); glVertex3f(-length/2, width1/2, -height1/2); glVertex3f(-length/2, width1/2, height1/2); glVertex3f( length/2, width2/2, height2/2); glVertex3f( length/2, width2/2, -height2/2); polys++; glEnd(); glFrontFace(GL_CCW); return polys; } static int ctube (GLfloat diameter, GLfloat width, Bool wire) { tube (0, 0, width/2, 0, 0, -width/2, diameter, 0, 32, True, True, wire); return 0; /* #### */ } static void armature (ModeInfo *mi) { gears_configuration *bp = &bps[MI_SCREEN(mi)]; int wire = MI_IS_WIREFRAME(mi); static const GLfloat spec[4] = {1.0, 1.0, 1.0, 1.0}; GLfloat shiny = 128.0; GLfloat color[4]; color[0] = 0.5 + frand(0.5); color[1] = 0.5 + frand(0.5); color[2] = 0.5 + frand(0.5); color[3] = 1.0; bp->armature_polygons = 0; bp->armature_dlist = glGenLists (1); if (! bp->armature_dlist) { check_gl_error ("glGenLists"); abort(); } glNewList (bp->armature_dlist, GL_COMPILE); glMaterialfv (GL_FRONT, GL_SPECULAR, spec); glMateriali (GL_FRONT, GL_SHININESS, shiny); glMaterialfv (GL_FRONT, GL_AMBIENT_AND_DIFFUSE, color); glColor3f (color[0], color[1], color[2]); glPushMatrix(); { GLfloat s = bp->gears[0]->r * 2.7; s = s/5.6; glScalef (s, s, s); } glTranslatef (0, 0, 1.4 + bp->gears[0]->thickness); glRotatef (30, 0, 0, 1); bp->armature_polygons += ctube (0.5, 10, wire); /* center axle */ glPushMatrix(); glTranslatef(0.0, 4.2, -1); bp->armature_polygons += ctube (0.5, 3, wire); /* axle 1 */ glTranslatef(0, 0, 1.8); bp->armature_polygons += ctube (0.7, 0.7, wire); glPopMatrix(); glPushMatrix(); glRotatef(120, 0.0, 0.0, 1.0); glTranslatef(0.0, 4.2, -1); bp->armature_polygons += ctube (0.5, 3, wire); /* axle 2 */ glTranslatef(0, 0, 1.8); bp->armature_polygons += ctube (0.7, 0.7, wire); glPopMatrix(); glPushMatrix(); glRotatef(240, 0.0, 0.0, 1.0); glTranslatef(0.0, 4.2, -1); bp->armature_polygons += ctube (0.5, 3, wire); /* axle 3 */ glTranslatef(0, 0, 1.8); bp->armature_polygons += ctube (0.7, 0.7, wire); glPopMatrix(); glTranslatef(0, 0, 1.5); /* center disk */ bp->armature_polygons += ctube (1.5, 2, wire); glPushMatrix(); glRotatef(270, 0, 0, 1); glRotatef(-10, 0, 1, 0); glTranslatef(-2.2, 0, 0); bp->armature_polygons += arm (4.0, 1.0, 0.5, 2.0, 1.0, wire); /* arm 1 */ glPopMatrix(); glPushMatrix(); glRotatef(30, 0, 0, 1); glRotatef(-10, 0, 1, 0); glTranslatef(-2.2, 0, 0); bp->armature_polygons += arm (4.0, 1.0, 0.5, 2.0, 1.0, wire); /* arm 2 */ glPopMatrix(); glPushMatrix(); glRotatef(150, 0, 0, 1); glRotatef(-10, 0, 1, 0); glTranslatef(-2.2, 0, 0); bp->armature_polygons += arm (4.0, 1.0, 0.5, 2.0, 1.0, wire); /* arm 3 */ glPopMatrix(); glPopMatrix(); glEndList (); } static void planetary_gears (ModeInfo *mi) { gears_configuration *bp = &bps[MI_SCREEN(mi)]; gear *g0, *g1, *g2, *g3, *g4; GLfloat distance = 2.02; bp->planetary_p = True; g0 = new_gear (mi, 0); g1 = new_gear (mi, 0); g2 = new_gear (mi, 0); g3 = new_gear (mi, 0); g4 = new_gear (mi, 0); if (! place_gear (mi, g0, 0)) abort(); if (! place_gear (mi, g1, 0)) abort(); if (! place_gear (mi, g2, 0)) abort(); if (! place_gear (mi, g3, 0)) abort(); if (! place_gear (mi, g4, 0)) abort(); g0->nteeth = 12 + (3 * (random() % 10)); /* must be multiple of 3 */ g0->tooth_w = g0->r / g0->nteeth; g0->tooth_h = g0->tooth_w * 2.8; # define COPY(F) g4->F = g3->F = g2->F = g1->F = g0->F COPY(r); COPY(th); COPY(nteeth); COPY(tooth_w); COPY(tooth_h); COPY(tooth_slope); COPY(inner_r); COPY(inner_r2); COPY(inner_r3); COPY(thickness); COPY(thickness2); COPY(thickness3); COPY(ratio); COPY(size); # undef COPY g1->x = cos (M_PI * 2 / 3) * g1->r * distance; g1->y = sin (M_PI * 2 / 3) * g1->r * distance; g2->x = cos (M_PI * 4 / 3) * g2->r * distance; g2->y = sin (M_PI * 4 / 3) * g2->r * distance; g3->x = cos (M_PI * 6 / 3) * g3->r * distance; g3->y = sin (M_PI * 6 / 3) * g3->r * distance; g4->x = 0; g4->y = 0; g4->th = -g3->th; /* rotate central gear 1/2 tooth-size if odd number of teeth */ if (g4->nteeth & 1) g4->th -= (180.0 / g4->nteeth); g0->inverted_p = True; g0->x = 0; g0->y = 0; g0->nteeth = g1->nteeth * 3; g0->r = g1->r * 3.05; g0->inner_r = g0->r * 0.8; g0->inner_r2 = 0; g0->inner_r3 = 0; g0->th = g1->th + (180 / g0->nteeth); g0->ratio = g1->ratio / 3; g0->tooth_slope = 0; g0->nubs = 3; g0->spokes = 0; g0->size = INVOLUTE_LARGE; bp->gears = (gear **) calloc (6, sizeof(**bp->gears)); bp->ngears = 0; bp->gears[bp->ngears++] = g1; bp->gears[bp->ngears++] = g2; bp->gears[bp->ngears++] = g3; bp->gears[bp->ngears++] = g4; bp->gears[bp->ngears++] = g0; } ENTRYPOINT void init_gears (ModeInfo *mi) { gears_configuration *bp; int wire = MI_IS_WIREFRAME(mi); int i; if (!bps) { bps = (gears_configuration *) calloc (MI_NUM_SCREENS(mi), sizeof (gears_configuration)); if (!bps) { fprintf(stderr, "%s: out of memory\n", progname); exit(1); } } bp = &bps[MI_SCREEN(mi)]; bp->glx_context = init_GL(mi); reshape_gears (mi, MI_WIDTH(mi), MI_HEIGHT(mi)); if (!wire) { GLfloat pos[4] = {1.0, 1.0, 1.0, 0.0}; GLfloat amb[4] = {0.0, 0.0, 0.0, 1.0}; GLfloat dif[4] = {1.0, 1.0, 1.0, 1.0}; GLfloat spc[4] = {0.0, 1.0, 1.0, 1.0}; glEnable(GL_LIGHTING); glEnable(GL_LIGHT0); glEnable(GL_DEPTH_TEST); glEnable(GL_CULL_FACE); glLightfv(GL_LIGHT0, GL_POSITION, pos); glLightfv(GL_LIGHT0, GL_AMBIENT, amb); glLightfv(GL_LIGHT0, GL_DIFFUSE, dif); glLightfv(GL_LIGHT0, GL_SPECULAR, spc); } if (! bp->rot) { double spin_speed = 0.5; double wander_speed = 0.01; double spin_accel = 0.25; bp->rot = make_rotator (do_spin ? spin_speed : 0, do_spin ? spin_speed : 0, do_spin ? spin_speed : 0, spin_accel, do_wander ? wander_speed : 0, True ); bp->trackball = gltrackball_init (True); } if (bp->gears) { for (i = 0; i < bp->ngears; i++) free_gear (bp->gears[i]); free (bp->gears); bp->gears = 0; bp->ngears = 0; } if (!(random() % 8)) { planetary_gears (mi); } else { gear *g = 0; int total_gears = MI_COUNT (mi); bp->planetary_p = False; if (total_gears <= 0) total_gears = 3 + fabs (BELLRAND (8) - 4); /* 3 - 7, mostly 3. */ bp->gears = (gear **) calloc (total_gears+2, sizeof(**bp->gears)); bp->ngears = 0; for (i = 0; i < total_gears; i++) g = place_new_gear (mi, g); } /* Center gears in scene. */ { GLfloat minx=99999, miny=99999, maxx=-99999, maxy=-99999; int i; for (i = 0; i < bp->ngears; i++) { gear *g = bp->gears[i]; if (g->x - g->r < minx) minx = g->x - g->r; if (g->x + g->r > maxx) maxx = g->x + g->r; if (g->y - g->r < miny) miny = g->y - g->r; if (g->y + g->r > maxy) maxy = g->y + g->r; } bp->bbox.x1 = minx; bp->bbox.y1 = miny; bp->bbox.x2 = maxx; bp->bbox.y2 = maxy; } /* Now render each gear into its display list. */ for (i = 0; i < bp->ngears; i++) { gear *g = bp->gears[i]; g->dlist = glGenLists (1); if (! g->dlist) { check_gl_error ("glGenLists"); abort(); } glNewList (g->dlist, GL_COMPILE); g->polygons += draw_involute_gear (g, wire); glEndList (); } if (bp->planetary_p) armature (mi); } ENTRYPOINT void draw_gears (ModeInfo *mi) { gears_configuration *bp = &bps[MI_SCREEN(mi)]; Display *dpy = MI_DISPLAY(mi); Window window = MI_WINDOW(mi); int i; if (!bp->glx_context) return; glXMakeCurrent(MI_DISPLAY(mi), MI_WINDOW(mi), *(bp->glx_context)); glShadeModel(GL_SMOOTH); glEnable(GL_DEPTH_TEST); glEnable(GL_NORMALIZE); glEnable(GL_CULL_FACE); glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glPushMatrix (); { double x, y, z; get_position (bp->rot, &x, &y, &z, !bp->button_down_p); glTranslatef ((x - 0.5) * 4, (y - 0.5) * 4, (z - 0.5) * 7); gltrackball_rotate (bp->trackball); get_rotation (bp->rot, &x, &y, &z, !bp->button_down_p); /* add a little rotation for -no-spin mode */ x -= 0.14; y -= 0.06; glRotatef (x * 360, 1.0, 0.0, 0.0); glRotatef (y * 360, 0.0, 1.0, 0.0); glRotatef (z * 360, 0.0, 0.0, 1.0); } /* Center the scene's bounding box in the window, and scale it to fit. */ { GLfloat w = bp->bbox.x2 - bp->bbox.x1; GLfloat h = bp->bbox.y2 - bp->bbox.y1; GLfloat s = 10.0 / (w > h ? w : h); glScalef (s, s, s); glTranslatef (-(bp->bbox.x1 + w/2), -(bp->bbox.y1 + h/2), 0); } mi->polygon_count = 0; for (i = 0; i < bp->ngears; i++) { gear *g = bp->gears[i]; glPushMatrix(); glTranslatef (g->x, g->y, g->z); glRotatef (g->th, 0, 0, 1); glCallList (g->dlist); mi->polygon_count += g->polygons; glPopMatrix (); } if (bp->planetary_p) { glCallList (bp->armature_dlist); mi->polygon_count += bp->armature_polygons; } glPopMatrix (); /* spin gears */ if (!bp->button_down_p) for (i = 0; i < bp->ngears; i++) { gear *g = bp->gears[i]; double off = g->ratio * 5 * speed; if (g->th > 0) g->th += off; else g->th -= off; } if (mi->fps_p) do_fps (mi); glFinish(); glXSwapBuffers(dpy, window); } ENTRYPOINT Bool gears_handle_event (ModeInfo *mi, XEvent *event) { gears_configuration *bp = &bps[MI_SCREEN(mi)]; if (gltrackball_event_handler (event, bp->trackball, MI_WIDTH (mi), MI_HEIGHT (mi), &bp->button_down_p)) return True; else if (screenhack_event_helper (MI_DISPLAY(mi), MI_WINDOW(mi), event)) { init_gears (mi); return True; } return False; } XSCREENSAVER_MODULE ("Gears", gears) #endif /* USE_GL */ xscreensaver-5.36/hacks/glx/lament.c000664 000767 000024 00000134655 12710312056 017462 0ustar00jwzstaff000000 000000 /* xscreensaver, Copyright (c) 1998-2014 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. */ /* Animates Lemarchand's Box, the Lament Configuration. By jwz, 25-Jul-98. TODO: * The gold leaf should appear to be raised up from the surface, but I think this isn't possible with OpenGL. No bump maps. * There should be strange lighting effects playing across the surface: electric sparks, or little glittery blobs of light. Maybe like http://www.opengl.org/archives/resources/features/KilgardTechniques/ LensFlare/ * Chains. * Needs music. ("Hellraiser Themes" by Coil: TORSO CD161; also duplicated on the "Unnatural History 2" compilation, WORLN M04699.) */ #define DEFAULTS "*delay: 20000 \n" \ "*showFPS: False \n" \ "*wireframe: False \n" \ "*suppressRotationAnimation: True\n" \ # define refresh_lament 0 # define release_lament 0 #include "xlockmore.h" #ifdef USE_GL /* whole file */ #include "gllist.h" /* #define DEBUG_MODE LAMENT_LEVIATHAN_COLLAPSE */ #undef countof #define countof(x) (sizeof((x))/sizeof((*x))) #undef MAX #define MAX(x, y) ((x) > (y) ? (x) : (y)) #undef MIN #define MIN(x, y) ((x) < (y) ? (x) : (y)) extern const struct gllist *lament_model_box, *lament_model_iso_base_a, *lament_model_iso_base_b, *lament_model_iso_den, *lament_model_iso_dse, *lament_model_iso_dwn, *lament_model_iso_swd, *lament_model_iso_une, *lament_model_iso_unw, *lament_model_iso_use, *lament_model_iso_usw, *lament_model_leviathan, *lament_model_lid_a, *lament_model_lid_b, *lament_model_lid_base, *lament_model_lid_c, *lament_model_lid_d, *lament_model_pillar_a, *lament_model_pillar_b, *lament_model_pillar_base, *lament_model_star_d, *lament_model_star_u, *lament_model_taser_a, *lament_model_taser_b, *lament_model_taser_base, *lament_model_tetra_base, *lament_model_tetra_dse, *lament_model_tetra_dwn, *lament_model_tetra_une, *lament_model_tetra_usw; static const struct gllist * const *all_objs[] = { &lament_model_box, &lament_model_iso_base_a, &lament_model_iso_base_b, &lament_model_iso_den, &lament_model_iso_dse, &lament_model_iso_dwn, &lament_model_iso_swd, &lament_model_iso_une, &lament_model_iso_unw, &lament_model_iso_use, &lament_model_iso_usw, &lament_model_leviathan, &lament_model_lid_a, &lament_model_lid_b, &lament_model_lid_base, &lament_model_lid_c, &lament_model_lid_d, &lament_model_pillar_a, &lament_model_pillar_b, &lament_model_pillar_base, &lament_model_star_d, &lament_model_star_u, &lament_model_taser_a, &lament_model_taser_b, &lament_model_taser_base, &lament_model_tetra_base, &lament_model_tetra_dse, &lament_model_tetra_dwn, &lament_model_tetra_une, &lament_model_tetra_usw }; typedef enum { /* must be in the same order as in `all_objs'. */ OBJ_BOX = 0, OBJ_ISO_BASE_A, OBJ_ISO_BASE_B, OBJ_ISO_DEN, OBJ_ISO_DSE, OBJ_ISO_DWN, OBJ_ISO_SWD, OBJ_ISO_UNE, OBJ_ISO_UNW, OBJ_ISO_USE, OBJ_ISO_USW, OBJ_LEVIATHAN, OBJ_LID_A, OBJ_LID_B, OBJ_LID_BASE, OBJ_LID_C, OBJ_LID_D, OBJ_PILLAR_A, OBJ_PILLAR_B, OBJ_PILLAR_BASE, OBJ_STAR_D, OBJ_STAR_U, OBJ_TASER_A, OBJ_TASER_B, OBJ_TASER_BASE, OBJ_TETRA_BASE, OBJ_TETRA_DSE, OBJ_TETRA_DWN, OBJ_TETRA_UNE, OBJ_TETRA_USW } lament_obj_index; #define DEF_TEXTURE "True" static int do_texture; static XrmOptionDescRec opts[] = { {"-texture", ".lament.texture", XrmoptionNoArg, "true" }, {"+texture", ".lament.texture", XrmoptionNoArg, "false" }, }; static argtype vars[] = { {&do_texture, "texture", "Texture", DEF_TEXTURE, t_Bool}, }; ENTRYPOINT ModeSpecOpt lament_opts = {countof(opts), opts, countof(vars), vars, NULL}; #include "xpm-ximage.h" #include "rotator.h" #include "gltrackball.h" #include "normals.h" #ifdef __GNUC__ __extension__ /* don't warn about "string length is greater than the length ISO C89 compilers are required to support" when including the following XPM file... */ #endif #include "../images/lament512.xpm" #define RANDSIGN() ((random() & 1) ? 1 : -1) typedef enum { LAMENT_BOX, LAMENT_STAR_OUT, LAMENT_STAR_ROT, LAMENT_STAR_ROT_IN, LAMENT_STAR_ROT_OUT, LAMENT_STAR_UNROT, LAMENT_STAR_IN, LAMENT_TETRA_UNE, LAMENT_TETRA_USW, LAMENT_TETRA_DWN, LAMENT_TETRA_DSE, LAMENT_LID_OPEN, LAMENT_LID_CLOSE, LAMENT_LID_ZOOM, LAMENT_TASER_OUT, LAMENT_TASER_SLIDE, LAMENT_TASER_SLIDE_IN, LAMENT_TASER_IN, LAMENT_PILLAR_OUT, LAMENT_PILLAR_SPIN, LAMENT_PILLAR_IN, LAMENT_SPHERE_OUT, LAMENT_SPHERE_IN, LAMENT_LEVIATHAN_SPIN, LAMENT_LEVIATHAN_FADE, LAMENT_LEVIATHAN_TWIST, LAMENT_LEVIATHAN_COLLAPSE, LAMENT_LEVIATHAN_EXPAND, LAMENT_LEVIATHAN_UNTWIST, LAMENT_LEVIATHAN_UNFADE, LAMENT_LEVIATHAN_UNSPIN, } lament_type; static const GLfloat exterior_color[] = { 0.33, 0.22, 0.03, 1.00, /* ambient */ 0.78, 0.57, 0.11, 1.00, /* specular */ 0.99, 0.91, 0.81, 1.00, /* diffuse */ 27.80 /* shininess */ }; static const GLfloat interior_color[] = { 0.20, 0.20, 0.15, 1.00, /* ambient */ 0.40, 0.40, 0.32, 1.00, /* specular */ 0.99, 0.99, 0.81, 1.00, /* diffuse */ 50.80 /* shininess */ }; static const GLfloat leviathan_color[] = { 0.30, 0.30, 0.30, 1.00, /* ambient */ 0.85, 0.85, 0.95, 1.00, /* specular */ 0.99, 0.99, 0.99, 1.00, /* diffuse */ 50.80 /* shininess */ }; static const GLfloat black_color[] = { 0.05, 0.05, 0.05, 1.00, /* ambient */ 0.05, 0.05, 0.05, 1.00, /* specular */ 0.05, 0.05, 0.05, 1.00, /* diffuse */ 80.00 /* shininess */ }; typedef struct { GLXContext *glx_context; rotator *rot; double rotx, roty, rotz; trackball_state *trackball; Bool button_down_p; Bool ffwdp; GLuint dlists[countof(all_objs)]; GLuint polys[countof(all_objs)]; XImage *texture; /* image bits */ GLuint texids[8]; /* texture map IDs */ lament_type type; /* which mode of the object is current */ int anim_pause; /* countdown before animating again */ GLfloat anim_r, anim_y, anim_z; /* relative position during anims */ Bool facing_p; int state, nstates; lament_type *states; } lament_configuration; static lament_configuration *lcs = NULL; static Bool facing_screen_p (ModeInfo *mi) { Bool facing_p; GLdouble m[16], p[16], x, y, z; GLint v[4]; glGetDoublev (GL_MODELVIEW_MATRIX, m); glGetDoublev (GL_PROJECTION_MATRIX, p); glGetIntegerv (GL_VIEWPORT, v); /* See if a coordinate 5 units in front of the door is near the center of the screen. */ gluProject (0, -5, 0, m, p, v, &x, &y, &z); x = (x / MI_WIDTH(mi)) - 0.5; y = (y / MI_HEIGHT(mi)) - 0.5; facing_p = (z < 0.9 && x > -0.15 && x < 0.15 && y > -0.15 && y < 0.15); # ifdef DEBUG_MODE glBindTexture(GL_TEXTURE_2D, 0); glDisable (GL_LIGHTING); glColor3f (1, (facing_p ? 1 : 0), 0); glBegin (GL_LINES); glVertex3f (0, 0, 0); glVertex3f (0, -5, 0); glEnd(); if (!MI_IS_WIREFRAME(mi)) glEnable (GL_LIGHTING); # endif /* DEBUG_MODE */ return facing_p; } static void scale_for_window (ModeInfo *mi) { lament_configuration *lc = &lcs[MI_SCREEN(mi)]; GLfloat target_size = 1.4 * (lc->texture ? lc->texture->width : 512); GLfloat size = MI_WIDTH(mi) < MI_HEIGHT(mi) ? MI_WIDTH(mi) : MI_HEIGHT(mi); GLfloat scale; /* Make it take up roughly the full width of the window. */ scale = 20; /* But if the window is wider than tall, make it only take up the height of the window instead. */ if (MI_WIDTH(mi) > MI_HEIGHT(mi)) scale /= MI_WIDTH(mi) / (GLfloat) MI_HEIGHT(mi); /* Constrain it to roughly life-sized on the screen, not huge. */ # ifdef HAVE_MOBILE if (size > 768) /* iPad retina / iPhone 6 */ target_size *= 1.5; else # endif { GLfloat max = 500; /* 3" on my screen... */ if (target_size > max) target_size = max; } /* But if that would make the image larger than target_size, scale it back down again. The image-map bits we have are 512x512, so if the image is magnified a lot, it looks pretty blocky. It's better to have a 512x512 animation on a 1920x1080 screen that looks good than a 1024x1024 animation that looks really pixelated. */ if (size > target_size) scale *= target_size / size; glScalef (scale, scale, scale); } static void set_colors (const GLfloat *color) { glMaterialfv(GL_FRONT, GL_AMBIENT, color + 0); glMaterialfv(GL_FRONT, GL_DIFFUSE, color + 4); glMaterialfv(GL_FRONT, GL_SPECULAR, color + 8); glMaterialfv(GL_FRONT, GL_SHININESS, color + 12); } static void set_colors_alpha (const GLfloat *color, GLfloat a) { GLfloat c[countof(leviathan_color)]; memcpy (c, color, sizeof(c)); c[3] = c[7] = c[11] = a; set_colors (c); } static void which_face (ModeInfo *mi, const GLfloat *f, int *face, int *outerp) { GLfloat size = 3; /* 3" square */ const GLfloat *n = f; /* normal */ const GLfloat *v = f + 3; /* vertex */ GLfloat slack = 0.01; /* First look at the normal to determine which direction this triangle is facing (or is most-closely facing). It's an outer surface if it is within epsilon of the cube wall that it is facing. Otherwise, it's an inner surface. */ if (n[1] < -0.5) *face = 1, *outerp = v[1] < slack; /* S */ else if (n[2] > 0.5) *face = 2, *outerp = v[2] > size-slack; /* U */ else if (n[1] > 0.5) *face = 3, *outerp = v[1] > size-slack; /* N */ else if (n[2] < -0.5) *face = 4, *outerp = v[2] < slack; /* D */ else if (n[0] < -0.5) *face = 5, *outerp = v[0] < slack; /* W */ else /* (n[0] > 0.5)*/ *face = 6, *outerp = v[0] > size-slack; /* E */ /* Faces that don't have normals parallel to the axes aren't external. */ if (*outerp && (n[0] > -0.95 && n[0] < 0.95 && n[1] > -0.95 && n[1] < 0.95 && n[2] > -0.95 && n[2] < 0.95)) *outerp = 0; } static void texturize_vert (ModeInfo *mi, int which, const GLfloat *v) { GLfloat size = 3; /* 3" square */ GLfloat s = 0, q = 0; /* Texture coordinates are surface coordinates, on the plane of this cube wall. */ switch (which) { case 0: break; case 1: s = v[0], q = v[2]; break; case 2: s = v[0], q = v[1]; break; case 3: s = v[0], q = v[2]; q = size - q; break; case 4: s = v[0], q = v[1]; q = size - q; break; case 5: s = v[1], q = v[2]; break; case 6: s = v[1], q = v[2]; break; default: abort(); break; } glTexCoord2f (s / size, q / size); } static void leviathan (ModeInfo *mi, GLfloat ratio, GLfloat alpha, Bool top_p) { lament_configuration *lc = &lcs[MI_SCREEN(mi)]; Bool wire = MI_IS_WIREFRAME(mi); GLfloat r = 0.34; GLfloat z = 2 * ratio; XYZ p[3]; int i; GLfloat th = acos (2 / sqrt (6)); /* Line up with cube's diagonal */ glPushMatrix(); glRotatef (-45, 0, 1, 0); glRotatef (-th * 180 / M_PI, 0, 0, 1); if (!top_p) glRotatef (180, 0, 0, 1); for (i = 0; i < countof(p); i++) { GLfloat th = i * M_PI * 2 / countof(p); p[i].x = cos(th) * r; p[i].y = sin(th) * r; } glFrontFace (GL_CCW); for (i = 0; i < countof(p); i++) { int j = (i + 1) % countof(p); /* if (top_p)*/ do_normal (z, 0, 0, 0, p[i].x, p[i].y, 0, p[j].x, p[j].y); /* else do_normal (z, 0, 0, 0, p[j].y, p[j].z, 0, p[i].y, p[i].z); */ if (do_texture) /* Leviathan is the final texture */ glBindTexture (GL_TEXTURE_2D, lc->texids[countof(lc->texids) - 1]); set_colors (leviathan_color); glBegin (wire ? GL_LINE_LOOP : GL_TRIANGLES); glTexCoord2f (0.5, 1); glVertex3f (z, 0, 0); glTexCoord2f (0, 0); glVertex3f (0, p[i].x, p[i].y); glTexCoord2f (1, 0); glVertex3f (0, p[j].x, p[j].y); glEnd(); mi->polygon_count++; /* Shield for fading */ if (alpha < 0.9 && !wire) { GLfloat a = 0.35; GLfloat b = 0.69; set_colors_alpha (black_color, 1-alpha); glBindTexture (GL_TEXTURE_2D, 0); if (!wire) { glEnable (GL_BLEND); glBlendFunc (GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); } glBegin (wire ? GL_LINE_LOOP : GL_QUADS); glVertex3f (z*a, p[j].x * b, p[j].y * b); glVertex3f (z*a, p[i].x * b, p[i].y * b); glVertex3f (0, p[i].x * 1.01, p[i].y * 1.01); glVertex3f (0, p[j].x * 1.01, p[j].y * 1.01); glEnd(); mi->polygon_count++; glDisable (GL_BLEND); } } glPopMatrix(); } static void folding_walls (ModeInfo *mi, GLfloat ratio, Bool top_p) { lament_configuration *lc = &lcs[MI_SCREEN(mi)]; Bool wire = MI_IS_WIREFRAME(mi); const GLfloat pa[4][2] = {{ -0.5, -0.215833 }, { 0, 0.5 }, { 0.5, 0 }, { -0.215833, -0.5 }}; const int tex[6] = { 0, 5, 1, 4, 2, 3 }; const GLfloat top = -pa[0][1]; GLfloat end_angle = 30.85; GLfloat rr = sin (ratio / 2 * M_PI); GLfloat offa = 0.15 * rr; GLfloat offb = 0.06 * rr; GLfloat p[4][3]; GLfloat t[4][2]; int i; glPushMatrix(); if (top_p) { glRotatef (60, 1, -1, 1); glRotatef (180, 0, 1, 0); glRotatef (90, 1, 0, 0); } else { glRotatef (180, 1, 0, 0); } /* Scale down the points near the axis */ p[0][0] = pa[0][0]; p[0][1] = 0.5; p[0][2] = pa[0][1]; p[1][0] = pa[1][0] - offb; p[1][1] = 0.5; p[1][2] = pa[1][1] - offa; p[2][0] = pa[2][0] - offa; p[2][1] = 0.5; p[2][2] = pa[2][1] - offb; p[3][0] = pa[3][0]; p[3][1] = 0.5; p[3][2] = pa[3][1]; if (!wire) { glEnable (GL_BLEND); glBlendFunc (GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); } for (i = 0; i < 3; i++) { glPushMatrix(); if (i == 1) { glRotatef (-90, 1, 0, 0); glRotatef (180, 1, 1, 0); } else if (i == 2) { glRotatef (-90, 1, 0, 0); glRotatef (180, 0, 1, 0); glRotatef (90, 0, 1, 0); } glRotatef (-90, 0, 1, 0); glTranslatef (-(top/2 + 0.25), 0.5, -(top/2 + 0.25)); glRotatef (-45, 0, 1, 0); glRotatef (ratio * -end_angle, 0, 0, 1); glRotatef (45, 0, 1, 0); glTranslatef (top/2 + 0.25, -0.5, top/2 + 0.25); /* Get the texture coordinates right. This is hairy and incomprehensible. */ t[0][0] = pa[0][1] + 0.5; t[0][1] = pa[0][0] + 0.5; t[1][0] = pa[1][1] + 0.5; t[1][1] = pa[1][0] + 0.5; t[2][0] = pa[2][1] + 0.5; t[2][1] = pa[2][0] + 0.5; t[3][0] = pa[3][1] + 0.5; t[3][1] = pa[3][0] + 0.5; if (i == 0 && !top_p) { # define SWAP(A,B) A = 1-A, B = 1-B SWAP(t[0][0], t[0][1]); SWAP(t[1][0], t[1][1]); SWAP(t[2][0], t[2][1]); SWAP(t[3][0], t[3][1]); # undef SWAP } else if (i == 0 && top_p) { GLfloat ot[4][3]; memcpy (ot, t, sizeof(t)); # define SWAP(A,B) A = 1-A, B = 1-B SWAP(t[0][0], ot[2][1]); SWAP(t[1][0], ot[3][1]); SWAP(t[2][0], ot[0][1]); SWAP(t[3][0], ot[1][1]); # undef SWAP } else if (i == 1) { GLfloat f; # define SWAP(A,B) f = A, A = B, B = -f SWAP(t[0][0], t[0][1]); SWAP(t[1][0], t[1][1]); SWAP(t[2][0], t[2][1]); SWAP(t[3][0], t[3][1]); # undef SWAP } set_colors_alpha (exterior_color, 1-ratio); glBindTexture (GL_TEXTURE_2D, lc->texids[tex[i + (top_p ? 3 : 0)]]); glBegin (wire ? GL_LINE_LOOP : GL_QUADS); do_normal (p[0][0], p[0][1], p[0][2], p[1][0], p[1][1], p[1][2], p[2][0], p[2][1], p[2][2]); glTexCoord2fv(t[0]); glVertex3fv(p[0]); glTexCoord2fv(t[1]); glVertex3fv(p[1]); glTexCoord2fv(t[2]); glVertex3fv(p[2]); glTexCoord2fv(t[3]); glVertex3fv(p[3]); glEnd(); mi->polygon_count++; /* The triangles between the quads */ # if 0 /* #### There is a fucking gap between the two black triangles that I can't figure out! So instead of drawing the triangles, we build a black shield around the middle bit in leviathan() and count on back-face culling to have roughly the same effect. */ if (!wire) { GLfloat pp[4][3]; memcpy (pp, p, sizeof(pp)); memcpy (pp[2], pp[1], sizeof(pp[1])); pp[2][0] -= 0.5 * (1-ratio); pp[2][1] -= 0.5 * (1-ratio); glBindTexture (GL_TEXTURE_2D, 0); set_colors_alpha (black_color, 1-ratio); glBegin(wire ? GL_LINE_LOOP : GL_TRIANGLES); do_normal (pp[0][0], pp[0][1], pp[0][2], pp[2][0], pp[2][1], pp[2][2], pp[1][0], pp[1][1], pp[1][2]); glVertex3fv(pp[0]); glVertex3fv(pp[2]); glVertex3fv(pp[1]); glEnd(); mi->polygon_count++; } # endif glPopMatrix(); } if (! wire) glDisable (GL_BLEND); glPopMatrix(); } static int lament_sphere (ModeInfo *mi, GLfloat ratio) { lament_configuration *lc = &lcs[MI_SCREEN(mi)]; Bool wire = MI_IS_WIREFRAME(mi); GLfloat size = 3; /* 3" square */ int polys = 0; int facets = 16; /* NxN grid on each face */ int face; static const GLfloat norms[6][3] = {{ 0, -1, 0 }, { 0, 0, 1 }, { 0, 1, 0 }, { 0, 0, -1 }, { -1, 0, 0 }, { 1, 0, 0 }}; GLfloat s = 1.0 / facets; /* The ratio used for the normals: linger on the square normals. */ GLfloat ratio2 = 1 - sin ((1 - ratio) / 2 * M_PI); GLfloat r1 = 1 - ratio2 / 2; GLfloat r2 = ratio2 / 2; glPushMatrix(); glTranslatef (-0.5, -0.5, -0.5); glScalef (1/size, 1/size, 1/size); set_colors (exterior_color); for (face = 0; face < 6; face++) { GLfloat x0, y0; for (y0 = 0; y0 < 1; y0 += s) for (x0 = 0; x0 < 1; x0 += s) { int i; GLfloat x1 = x0 + s; GLfloat y1 = y0 + s; GLfloat pa[4][3]; /* verts of the cube */ GLfloat pb[4][3]; /* verts of the transition to the sphere */ Bool frontp; GLfloat norm[4][3]; /* normals of the transitional verts */ if (norms[face][0]) frontp = norms[face][0] < 0, pa[0][1] = x0, pa[0][2] = y0, pa[0][0] = (frontp ? 0 : 1), pa[1][1] = x1, pa[1][2] = y0, pa[1][0] = pa[0][0], pa[2][1] = x1, pa[2][2] = y1, pa[2][0] = pa[0][0], pa[3][1] = x0, pa[3][2] = y1, pa[3][0] = pa[0][0]; else if (norms[face][1]) frontp = norms[face][1] > 0, pa[0][0] = x0, pa[0][2] = y0, pa[0][1] = (frontp ? 1 : 0), pa[1][0] = x1, pa[1][2] = y0, pa[1][1] = pa[0][1], pa[2][0] = x1, pa[2][2] = y1, pa[2][1] = pa[0][1], pa[3][0] = x0, pa[3][2] = y1, pa[3][1] = pa[0][1]; else /* (norms[face][2]) */ frontp = norms[face][2] < 0, pa[0][0] = x0, pa[0][1] = y0, pa[0][2] = (frontp ? 0 : 1), pa[1][0] = x1, pa[1][1] = y0, pa[1][2] = pa[0][2], pa[2][0] = x1, pa[2][1] = y1, pa[2][2] = pa[0][2], pa[3][0] = x0, pa[3][1] = y1, pa[3][2] = pa[0][2]; for (i = 0; i < countof(pa); i++) pa[i][0] *= size, pa[i][1] *= size, pa[i][2] *= size; /* Convert square to sphere by treating as a normalized vector */ for (i = 0; i < countof(pa); i++) { GLfloat x = (pa[i][0] / size) - 0.5; GLfloat y = (pa[i][1] / size) - 0.5; GLfloat z = (pa[i][2] / size) - 0.5; GLfloat d = sqrt (x*x + y*y + z*z) / 2; x = x/d + size/2; y = y/d + size/2; z = z/d + size/2; pb[i][0] = pa[i][0] + ((x - pa[i][0]) * ratio); pb[i][1] = pa[i][1] + ((y - pa[i][1]) * ratio); pb[i][2] = pa[i][2] + ((z - pa[i][2]) * ratio); } /* The normals of an intermediate point are the weighted average of the cube's orthogonal normals, and the sphere's radial normals: early in the sequence, the edges are sharp, but they soften as it expands. */ { XYZ na, pa0, pa1, pa2; pa0.x = pa[0][0]; pa0.y = pa[0][1]; pa0.z = pa[0][2]; pa1.x = pa[1][0]; pa1.y = pa[1][1]; pa1.z = pa[1][2]; pa2.x = pa[2][0]; pa2.y = pa[2][1]; pa2.z = pa[2][2]; na = calc_normal (pa0, pa1, pa2); for (i = 0; i < countof(pb); i++) { GLfloat d; XYZ nb; nb.x = pb[i][0]; nb.y = pb[i][1]; nb.z = pb[i][2]; d = sqrt (nb.x*nb.x + nb.y*nb.y + nb.z*nb.z); /* normalize */ nb.x /= d; nb.y /= d; nb.z /= d; norm[i][0] = (na.x * r1) + (nb.x * r2); /* weighted */ norm[i][1] = (na.y * r1) + (nb.y * r2); norm[i][2] = (na.z * r1) + (nb.z * r2); } } if (! wire) glBindTexture (GL_TEXTURE_2D, lc->texids[face]); glFrontFace (frontp ? GL_CW : GL_CCW); glBegin (wire ? GL_LINE_LOOP : GL_QUADS); texturize_vert (mi, face+1, pa[0]); glNormal3fv (norm[0]); glVertex3fv (pb[0]); texturize_vert (mi, face+1, pa[1]); glNormal3fv (norm[1]); glVertex3fv (pb[1]); texturize_vert (mi, face+1, pa[2]); glNormal3fv (norm[2]); glVertex3fv (pb[2]); texturize_vert (mi, face+1, pa[3]); glNormal3fv (norm[3]); glVertex3fv (pb[3]); glEnd(); polys++; } } glPopMatrix(); return polys; } static void draw (ModeInfo *mi) { lament_configuration *lc = &lcs[MI_SCREEN(mi)]; Bool wire = MI_IS_WIREFRAME(mi); mi->polygon_count = 0; if (!wire) glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); else glClear(GL_COLOR_BUFFER_BIT); glPushMatrix(); gltrackball_rotate (lc->trackball); /* Make into the screen be +Y, right be +X, and up be +Z. */ glRotatef (-90.0, 1.0, 0.0, 0.0); scale_for_window (mi); /* Apply rotation to the object. */ if (lc->type != LAMENT_LID_ZOOM) get_rotation (lc->rot, &lc->rotx, &lc->roty, &lc->rotz, !lc->button_down_p); # ifdef DEBUG_MODE lc->rotx = 0.18; lc->roty = 0.22; lc->rotx = lc->roty = 0; lc->rotz = 0; # endif glRotatef (lc->rotx * 360, 1, 0, 0); glRotatef (lc->roty * 360, 0, 1, 0); glRotatef (lc->rotz * 360, 0, 0, 1); glScalef (0.5, 0.5, 0.5); switch (lc->type) { case LAMENT_BOX: glCallList (lc->dlists[OBJ_BOX]); mi->polygon_count += lc->polys[OBJ_BOX]; break; case LAMENT_STAR_OUT: case LAMENT_STAR_ROT: case LAMENT_STAR_ROT_IN: case LAMENT_STAR_ROT_OUT: case LAMENT_STAR_UNROT: case LAMENT_STAR_IN: glTranslatef (0.0, 0.0, lc->anim_z/2); glRotatef (lc->anim_r/2, 0.0, 0.0, 1.0); glCallList (lc->dlists[OBJ_STAR_U]); mi->polygon_count += lc->polys[OBJ_STAR_U]; glTranslatef (0.0, 0.0, -lc->anim_z); glRotatef (-lc->anim_r, 0.0, 0.0, 1.0); glCallList (lc->dlists[OBJ_STAR_D]); mi->polygon_count += lc->polys[OBJ_STAR_D]; break; case LAMENT_TETRA_UNE: case LAMENT_TETRA_USW: case LAMENT_TETRA_DWN: case LAMENT_TETRA_DSE: { int magic; GLfloat x, y, z; switch (lc->type) { case LAMENT_TETRA_UNE: magic = OBJ_TETRA_UNE; x= 1; y= 1; z= 1; break; case LAMENT_TETRA_USW: magic = OBJ_TETRA_USW; x= 1; y= 1; z=-1; break; case LAMENT_TETRA_DWN: magic = OBJ_TETRA_DWN; x= 1; y=-1; z= 1; break; case LAMENT_TETRA_DSE: magic = OBJ_TETRA_DSE; x=-1; y= 1; z= 1; break; default: abort(); break; } glCallList(lc->dlists[OBJ_TETRA_BASE]); mi->polygon_count += lc->polys[OBJ_TETRA_BASE]; if (magic != OBJ_TETRA_UNE) glCallList (lc->dlists[OBJ_TETRA_UNE]); if (magic != OBJ_TETRA_USW) glCallList (lc->dlists[OBJ_TETRA_USW]); if (magic != OBJ_TETRA_DWN) glCallList (lc->dlists[OBJ_TETRA_DWN]); if (magic != OBJ_TETRA_DSE) glCallList (lc->dlists[OBJ_TETRA_DSE]); glRotatef (lc->anim_r, x, y, z); glCallList (lc->dlists[magic]); mi->polygon_count += lc->polys[magic] * 3; } break; case LAMENT_LID_OPEN: case LAMENT_LID_CLOSE: case LAMENT_LID_ZOOM: { GLfloat d = 0.21582; int i; const int lists[4] = { OBJ_LID_A, OBJ_LID_B, OBJ_LID_C, OBJ_LID_D }; lc->facing_p = facing_screen_p (mi); if (lc->anim_z < 0.5) glTranslatef (0, -30 * lc->anim_z, 0); /* zoom */ else glTranslatef (8 * (0.5 - (lc->anim_z - 0.5)), 0, 0); glCallList (lc->dlists[OBJ_LID_BASE]); mi->polygon_count += lc->polys[OBJ_LID_BASE]; for (i = 0; i < countof(lists); i++) { glPushMatrix(); glRotatef (90 * i, 0, 1, 0); glTranslatef (-d, -0.5, d); glRotatef (-45, 0, 1, 0); glRotatef (-lc->anim_r, 1, 0, 0); glRotatef (45, 0, 1, 0); glTranslatef (d, 0.5, -d); glRotatef (-90 * i, 0, 1, 0); glCallList (lc->dlists[lists[i]]); mi->polygon_count += lc->polys[lists[i]]; glPopMatrix(); } # ifdef DEBUG_MODE if (lc->facing_p) { glColor3f(1, 0, 0); glBegin (wire ? GL_LINE_LOOP : GL_QUADS); glVertex3f (-0.49, 0.49, -0.49); glVertex3f ( 0.49, 0.49, -0.49); glVertex3f ( 0.49, 0.49, 0.49); glVertex3f (-0.49, 0.49, 0.49); glEnd(); mi->polygon_count++; } # endif /* DEBUG_MODE */ } break; case LAMENT_TASER_OUT: case LAMENT_TASER_SLIDE: case LAMENT_TASER_SLIDE_IN: case LAMENT_TASER_IN: glTranslatef (0, -lc->anim_z/2, 0); glCallList (lc->dlists[OBJ_TASER_BASE]); mi->polygon_count += lc->polys[OBJ_TASER_BASE]; glTranslatef (0, lc->anim_z, 0); glCallList (lc->dlists[OBJ_TASER_A]); mi->polygon_count += lc->polys[OBJ_TASER_A]; glTranslatef (lc->anim_y, 0, 0); glCallList (lc->dlists[OBJ_TASER_B]); mi->polygon_count += lc->polys[OBJ_TASER_B]; break; case LAMENT_PILLAR_OUT: case LAMENT_PILLAR_SPIN: case LAMENT_PILLAR_IN: glCallList (lc->dlists[OBJ_PILLAR_BASE]); mi->polygon_count += lc->polys[OBJ_PILLAR_BASE]; glPushMatrix(); if (lc->anim_z == 1 || lc->anim_z == 3) { glRotatef (lc->anim_r, 0, 0, 1); glTranslatef (0, 0, lc->anim_y); } glCallList (lc->dlists[OBJ_PILLAR_A]); mi->polygon_count += lc->polys[OBJ_PILLAR_A]; glPopMatrix(); glPushMatrix(); if (lc->anim_z == 2 || lc->anim_z == 3) { glRotatef (lc->anim_r, 0, 0, 1); glTranslatef (0, 0, -lc->anim_y); } glCallList (lc->dlists[OBJ_PILLAR_B]); mi->polygon_count += lc->polys[OBJ_PILLAR_B]; glPopMatrix(); break; case LAMENT_SPHERE_OUT: case LAMENT_SPHERE_IN: mi->polygon_count += lament_sphere (mi, lc->anim_y); break; case LAMENT_LEVIATHAN_SPIN: case LAMENT_LEVIATHAN_UNSPIN: case LAMENT_LEVIATHAN_FADE: case LAMENT_LEVIATHAN_UNFADE: case LAMENT_LEVIATHAN_TWIST: case LAMENT_LEVIATHAN_UNTWIST: { /* These normals are hard to compute, so I pulled them from the model. */ const GLfloat axes[6][4] = {{ OBJ_ISO_UNE, 0.633994, 0.442836, 0.633994 }, { OBJ_ISO_USW, 0.442836, 0.633994, -0.633994 }, { OBJ_ISO_DSE, -0.633994, 0.633994, 0.442836 }, { OBJ_ISO_SWD, -0.633994, -0.442836, -0.633994 }, { OBJ_ISO_DEN, -0.442836, -0.633994, 0.633994 }, { OBJ_ISO_UNW, 0.633994, -0.633994, -0.442836 }}; int i; GLfloat s = (1 - lc->anim_z); GLfloat s2 = MAX (0, 360 - lc->anim_r) / 360.0; Bool blendp = 0; switch (lc->type) { case LAMENT_LEVIATHAN_SPIN: break; case LAMENT_LEVIATHAN_UNSPIN: s2 = 1 - s2; break; default: s2 = 0; blendp = 1; break; } if (wire) blendp = 0; s = (s * 0.6) + 0.4; leviathan (mi, 1 - s2, 1, True); glCallList (lc->dlists[OBJ_ISO_BASE_A]); mi->polygon_count += lc->polys[OBJ_ISO_BASE_A]; glPushMatrix(); glScalef (s2, s2, s2); glCallList (lc->dlists[OBJ_ISO_USE]); mi->polygon_count += lc->polys[OBJ_ISO_USE]; glPopMatrix(); glPushMatrix(); glRotatef (lc->anim_y, 1, -1, 1); glCallList (lc->dlists[OBJ_ISO_BASE_B]); mi->polygon_count += lc->polys[OBJ_ISO_BASE_B]; leviathan (mi, 1 - s2, 1, False); glPopMatrix(); if (blendp) { # ifndef HAVE_JWZGLES /* no glBlendColor */ glEnable (GL_BLEND); glBlendFunc (GL_CONSTANT_ALPHA, GL_SRC_ALPHA); glBlendColor (1, 1, 1, MAX(0, 1-(lc->anim_z * 3))); # endif } for (i = 0; i < countof(axes); i++) { glPushMatrix(); glRotatef (lc->anim_r, axes[i][1], axes[i][2], axes[i][3]); glScalef (s, s, s); glCallList (lc->dlists[(int) axes[i][0]]); mi->polygon_count += lc->polys[(int) axes[i][0]]; glPopMatrix(); if (i == 2) glRotatef (lc->anim_y, 1, -1, 1); } if (blendp) glDisable (GL_BLEND); glPushMatrix(); glScalef (s2, s2, s2); glCallList (lc->dlists[OBJ_ISO_DWN]); mi->polygon_count += lc->polys[OBJ_ISO_DWN]; glPopMatrix(); } break; case LAMENT_LEVIATHAN_COLLAPSE: case LAMENT_LEVIATHAN_EXPAND: { glPushMatrix(); leviathan (mi, 1, lc->anim_y, True); glRotatef (180, 1, -1, 1); leviathan (mi, 1, lc->anim_y, False); glPopMatrix(); folding_walls (mi, lc->anim_y, True); folding_walls (mi, lc->anim_y, False); } break; default: abort(); break; } glPopMatrix(); } /* Rather than just picking states randomly, pick an ordering randomly, do it, and then re-randomize. That way one can be assured of seeing all states in a short time period, though not always in the same order (it's frustrating to see it pick the same state 5x in a row.) Though, that can still happen, since states are in the list multiple times as a way of giving them probabilities. */ static void shuffle_states (lament_configuration *lc) { int i; for (i = 0; i < lc->nstates; i++) { int a = random() % lc->nstates; lament_type swap = lc->states[a]; lc->states[a] = lc->states[i]; lc->states[i] = swap; } } static void animate (ModeInfo *mi) { lament_configuration *lc = &lcs[MI_SCREEN(mi)]; int pause = 10; int pause2 = 120; GLfloat speed = (lc->ffwdp ? 20 : 1); switch (lc->type) { case LAMENT_BOX: { lc->state++; if (lc->state >= lc->nstates) { shuffle_states (lc); lc->state = 0; } lc->type = lc->states[lc->state]; if (lc->type == LAMENT_BOX) lc->anim_pause = pause2; lc->anim_r = 0.0; lc->anim_y = 0.0; lc->anim_z = 0.0; } break; /* -------------------------------------------------------------- */ case LAMENT_STAR_OUT: lc->anim_z += 0.01 * speed; if (lc->anim_z >= 1.0) { lc->anim_z = 1.0; lc->type = LAMENT_STAR_ROT; lc->anim_pause = pause; } break; case LAMENT_STAR_ROT: lc->anim_r += 1.0 * speed; if (lc->anim_r >= 45.0) { lc->anim_r = 45.0; lc->type = LAMENT_STAR_ROT_IN; lc->anim_pause = pause; } break; case LAMENT_STAR_ROT_IN: lc->anim_z -= 0.01 * speed; if (lc->anim_z <= 0.0) { lc->anim_z = 0.0; lc->type = LAMENT_STAR_ROT_OUT; lc->anim_pause = pause2 * (1 + frand(2) + frand(2)); } break; case LAMENT_STAR_ROT_OUT: lc->anim_z += 0.01 * speed; if (lc->anim_z >= 1.0) { lc->anim_z = 1.0; lc->type = LAMENT_STAR_UNROT; lc->anim_pause = pause; } break; case LAMENT_STAR_UNROT: lc->anim_r -= 1.0 * speed; if (lc->anim_r <= 0.0) { lc->anim_r = 0.0; lc->type = LAMENT_STAR_IN; lc->anim_pause = pause; } break; case LAMENT_STAR_IN: lc->anim_z -= 0.01 * speed; if (lc->anim_z <= 0.0) { lc->anim_z = 0.0; lc->type = LAMENT_BOX; lc->anim_pause = pause2; } break; /* -------------------------------------------------------------- */ case LAMENT_TETRA_UNE: case LAMENT_TETRA_USW: case LAMENT_TETRA_DWN: case LAMENT_TETRA_DSE: lc->anim_r += 1.0 * speed; if (lc->anim_r >= 360.0) { lc->anim_r = 0.0; lc->type = LAMENT_BOX; lc->anim_pause = pause2; } else if (lc->anim_r > 119.0 && lc->anim_r <= 120.0) { lc->anim_r = 120.0; lc->anim_pause = pause; } else if (lc->anim_r > 239.0 && lc->anim_r <= 240.0) { lc->anim_r = 240.0; lc->anim_pause = pause; } break; /* -------------------------------------------------------------- */ case LAMENT_LID_OPEN: lc->anim_r += 1.0 * speed; if (lc->anim_r >= 112.0) { lc->anim_r = 112.0; lc->anim_z = 0.0; lc->anim_pause = pause2; lc->type = (lc->facing_p ? LAMENT_LID_ZOOM : LAMENT_LID_CLOSE); } break; case LAMENT_LID_CLOSE: lc->anim_r -= 1.0 * speed; if (lc->anim_r <= 0.0) { lc->anim_r = 0.0; lc->type = LAMENT_BOX; lc->anim_pause = pause2; } break; case LAMENT_LID_ZOOM: lc->anim_z += 0.01 * speed; if (lc->anim_z > 1.0) { lc->anim_r = 0.0; lc->anim_z = 0.0; lc->type = LAMENT_BOX; } break; /* -------------------------------------------------------------- */ case LAMENT_TASER_OUT: lc->anim_z += 0.005 * speed; if (lc->anim_z >= 0.5) { lc->anim_z = 0.5; lc->type = LAMENT_TASER_SLIDE; lc->anim_pause = pause * (1 + frand(5) + frand(5)); } break; case LAMENT_TASER_SLIDE: lc->anim_y += 0.005 * speed; if (lc->anim_y >= 0.255) { lc->anim_y = 0.255; lc->type = LAMENT_TASER_SLIDE_IN; lc->anim_pause = pause2 * (1 + frand(5) + frand(5)); } break; case LAMENT_TASER_SLIDE_IN: lc->anim_y -= 0.0025 * speed; if (lc->anim_y <= 0.0) { lc->anim_y = 0.0; lc->type = LAMENT_TASER_IN; lc->anim_pause = pause; } break; case LAMENT_TASER_IN: lc->anim_z -= 0.0025 * speed; if (lc->anim_z <= 0.0) { lc->anim_z = 0.0; lc->type = LAMENT_BOX; lc->anim_pause = pause2; } break; /* -------------------------------------------------------------- */ case LAMENT_PILLAR_OUT: if (lc->anim_y == 0) /* mostly in */ lc->anim_y += 0.005 * ((random() % 5) ? -1 : 1) * speed; else if (lc->anim_y > 0) lc->anim_y += 0.005 * speed; else lc->anim_y -= 0.001 * speed; if (lc->anim_z == 0) { int i = (random() % 7); /* A, B or both */ if (i == 0) lc->anim_z = 3; else if (i < 5) lc->anim_z = 2; else lc->anim_z = 1; /* We can do quarter turns, because it's radially symmetrical. */ lc->anim_r = 90.0 * (1 + frand(6)) * RANDSIGN(); } if (lc->anim_y > 0.4) { lc->anim_y = 0.4; lc->type = LAMENT_PILLAR_SPIN; lc->anim_pause = pause; } else if (lc->anim_y < -0.03) { lc->anim_y = -0.03; lc->type = LAMENT_PILLAR_SPIN; lc->anim_pause = pause; } break; case LAMENT_PILLAR_SPIN: { Bool negp = (lc->anim_r < 0); lc->anim_r += (negp ? 1 : -1) * speed; if (negp ? lc->anim_r > 0 : lc->anim_r < 0) { lc->anim_r = 0; lc->type = LAMENT_PILLAR_IN; } } break; case LAMENT_PILLAR_IN: { Bool negp = (lc->anim_y < 0); lc->anim_y += (negp ? 1 : -1) * 0.005 * speed; if (negp ? lc->anim_y > 0 : lc->anim_y < 0) { lc->anim_y = 0; lc->anim_z = 0; lc->type = LAMENT_BOX; lc->anim_pause = pause; } } break; /* -------------------------------------------------------------- */ case LAMENT_SPHERE_OUT: { lc->anim_y += 0.01 * speed; if (lc->anim_y >= 1) { lc->anim_y = 1; lc->type = LAMENT_SPHERE_IN; lc->anim_pause = pause2 * (1 + frand(1) + frand(1)); } } break; case LAMENT_SPHERE_IN: { lc->anim_y -= 0.01 * speed; if (lc->anim_y <= 0) { lc->anim_y = 0; lc->type = LAMENT_BOX; lc->anim_pause = pause; } } break; /* -------------------------------------------------------------- */ case LAMENT_LEVIATHAN_SPIN: lc->anim_r += 3.5 * speed; if (lc->anim_r >= 360 * 3) { lc->anim_r = 0; lc->type = LAMENT_LEVIATHAN_FADE; lc->anim_pause = 0; } break; case LAMENT_LEVIATHAN_FADE: lc->anim_z += 0.01 * speed; if (lc->anim_z >= 1) { lc->anim_z = 1; lc->type = LAMENT_LEVIATHAN_TWIST; lc->anim_pause = 0; } break; case LAMENT_LEVIATHAN_TWIST: lc->anim_y += 2 * speed; lc->anim_z = 1; if (lc->anim_y >= 180) { lc->anim_y = 0; lc->type = LAMENT_LEVIATHAN_COLLAPSE; lc->anim_pause = 0; } break; case LAMENT_LEVIATHAN_COLLAPSE: lc->anim_y += 0.01 * speed; if (lc->anim_y >= 1) { lc->anim_y = 1.0; lc->type = LAMENT_LEVIATHAN_EXPAND; lc->anim_pause = pause2 * 4; } break; case LAMENT_LEVIATHAN_EXPAND: lc->anim_y -= 0.005 * speed; if (lc->anim_y <= 0) { lc->anim_y = 180; lc->type = LAMENT_LEVIATHAN_UNTWIST; } break; case LAMENT_LEVIATHAN_UNTWIST: lc->anim_y -= 2 * speed; lc->anim_z = 1; if (lc->anim_y <= 0) { lc->anim_y = 0; lc->type = LAMENT_LEVIATHAN_UNFADE; lc->anim_pause = 0; } break; case LAMENT_LEVIATHAN_UNFADE: lc->anim_z -= 0.1 * speed; if (lc->anim_z <= 0) { lc->anim_z = 0; lc->type = LAMENT_LEVIATHAN_UNSPIN; lc->anim_pause = 0; } break; case LAMENT_LEVIATHAN_UNSPIN: lc->anim_r += 3.5 * speed; if (lc->anim_r >= 360 * 2) { lc->anim_r = 0; lc->type = LAMENT_BOX; lc->anim_pause = pause2; } break; default: abort(); break; } # ifdef DEBUG_MODE lc->anim_pause = 0; if (lc->type == LAMENT_BOX) lc->type = DEBUG_MODE; if (lc->ffwdp) { lc->ffwdp = 0; while (lc->type != DEBUG_MODE) animate (mi); } # else /* !DEBUG_MODE */ if (lc->ffwdp && lc->type == LAMENT_BOX) { lc->ffwdp = 0; while (lc->type == LAMENT_BOX) animate (mi); lc->anim_pause = 0; } # endif /* !DEBUG_MODE */ } static void gl_init (ModeInfo *mi) { lament_configuration *lc = &lcs[MI_SCREEN(mi)]; Bool wire = MI_IS_WIREFRAME(mi); int i; if (wire) do_texture = False; if (!wire) { static const GLfloat pos0[] = { -4.0, 2.0, 5.0, 1.0 }; static const GLfloat pos1[] = { 6.0, -1.0, 3.0, 1.0 }; static const GLfloat amb0[] = { 0.7, 0.7, 0.7, 1.0 }; /* static const GLfloat amb1[] = { 0.7, 0.0, 0.0, 1.0 }; */ static const GLfloat dif0[] = { 1.0, 1.0, 1.0, 1.0 }; static const GLfloat dif1[] = { 0.3, 0.1, 0.1, 1.0 }; glLightfv(GL_LIGHT0, GL_POSITION, pos0); glLightfv(GL_LIGHT1, GL_POSITION, pos1); glLightfv(GL_LIGHT0, GL_AMBIENT, amb0); /* glLightfv(GL_LIGHT1, GL_AMBIENT, amb1); */ glLightfv(GL_LIGHT0, GL_DIFFUSE, dif0); glLightfv(GL_LIGHT1, GL_DIFFUSE, dif1); glEnable(GL_LIGHTING); glEnable(GL_LIGHT0); /* glEnable(GL_LIGHT1); */ glEnable(GL_DEPTH_TEST); glEnable(GL_TEXTURE_2D); glEnable(GL_NORMALIZE); glEnable(GL_CULL_FACE); } if (do_texture) { int i; for (i = 0; i < countof(lc->texids); i++) glGenTextures(1, &lc->texids[i]); lc->texture = xpm_to_ximage (mi->dpy, mi->xgwa.visual, mi->xgwa.colormap, lament512); glPixelStorei(GL_UNPACK_ALIGNMENT, 4); /* messes up -fps */ /* glPixelStorei(GL_UNPACK_ROW_LENGTH, lc->texture->width); */ for (i = 0; i < countof(lc->texids); i++) { int height = lc->texture->width; /* assume square */ glBindTexture(GL_TEXTURE_2D, lc->texids[i]); clear_gl_error(); glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, lc->texture->width, height, 0, GL_RGBA, /* GL_UNSIGNED_BYTE, */ GL_UNSIGNED_INT_8_8_8_8_REV, (lc->texture->data + (lc->texture->bytes_per_line * height * i))); check_gl_error("texture"); glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT); glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT); glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); check_gl_error("texture"); /* This makes scaled pixmaps tolerable to look at. */ # if !defined(GL_TEXTURE_LOD_BIAS) && defined(GL_TEXTURE_LOD_BIAS_EXT) # define GL_TEXTURE_LOD_BIAS GL_TEXTURE_LOD_BIAS_EXT # endif # ifdef GL_TEXTURE_LOD_BIAS glTexParameterf (GL_TEXTURE_2D, GL_TEXTURE_LOD_BIAS, 0.25); # endif clear_gl_error(); /* invalid enum on iPad 3 */ } } for (i = 0; i < countof(all_objs); i++) { GLfloat s = 1/3.0; /* box is 3" square */ const struct gllist *L = *all_objs[i]; const GLfloat *f = (const GLfloat *) L->data; int j; lc->dlists[i] = glGenLists(1); lc->polys[i] = L->points / 3; glNewList(lc->dlists[i], GL_COMPILE); if (L->primitive != GL_TRIANGLES) abort(); if (L->format != GL_N3F_V3F) abort(); glPushMatrix(); glTranslatef (-0.5, -0.5, -0.5); glScalef (s, s, s); for (j = 0; j < L->points; j += 3) { int face, outerp; Bool blackp = (i == OBJ_ISO_BASE_A || i == OBJ_ISO_BASE_B); which_face (mi, f, &face, &outerp); /* from norm of first vert */ set_colors (outerp ? exterior_color : blackp ? black_color : interior_color); glBindTexture (GL_TEXTURE_2D, (outerp ? lc->texids[face-1] : blackp ? 0 : lc->texids[6])); glBegin (wire ? GL_LINE_LOOP : GL_TRIANGLES); if (face) texturize_vert (mi, face, f+3); glNormal3fv (f); f += 3; glVertex3fv (f); f += 3; if (face) texturize_vert (mi, face, f+3); glNormal3fv (f); f += 3; glVertex3fv (f); f += 3; if (face) texturize_vert (mi, face, f+3); glNormal3fv (f); f += 3; glVertex3fv (f); f += 3; glEnd(); } glPopMatrix(); glEndList(); } } ENTRYPOINT Bool lament_handle_event (ModeInfo *mi, XEvent *event) { lament_configuration *lc = &lcs[MI_SCREEN(mi)]; if (gltrackball_event_handler (event, lc->trackball, MI_WIDTH (mi), MI_HEIGHT (mi), &lc->button_down_p)) return True; else if (event->xany.type == KeyPress) { KeySym keysym; char c = 0; XLookupString (&event->xkey, &c, 1, &keysym, 0); if (c == ' ' || c == '\t') { lc->ffwdp = True; return True; } } return False; } ENTRYPOINT void reshape_lament (ModeInfo *mi, int width, int height) { GLfloat h = (GLfloat) height / (GLfloat) width; glViewport(0, 0, (GLint) width, (GLint) height); glMatrixMode(GL_PROJECTION); glLoadIdentity(); glFrustum(-1.0, 1.0, -h, h, 5.0, 60.0); glMatrixMode(GL_MODELVIEW); glLoadIdentity(); glTranslatef(0.0, 0.0, -40.0); glClear(GL_COLOR_BUFFER_BIT); } ENTRYPOINT void init_lament (ModeInfo *mi) { lament_configuration *lc; int i; if (!lcs) { lcs = (lament_configuration *) calloc(MI_NUM_SCREENS(mi), sizeof (lament_configuration)); if (!lcs) { fprintf(stderr, "%s: out of memory\n", progname); exit(1); } } lc = &lcs[MI_SCREEN(mi)]; { double rot_speed = 0.5; lc->rot = make_rotator (rot_speed, rot_speed, rot_speed, 1, 0, True); lc->trackball = gltrackball_init (True); } lc->type = LAMENT_BOX; lc->anim_pause = 300 + (random() % 100); if ((lc->glx_context = init_GL(mi)) != NULL) { reshape_lament(mi, MI_WIDTH(mi), MI_HEIGHT(mi)); gl_init(mi); } lc->states = (lament_type *) calloc (200, sizeof (*lc->states)); lc->nstates = 0; # define PUSH(N,WHICH) \ for (i = 0; i < N; i++) lc->states[lc->nstates++] = WHICH PUSH (4, LAMENT_TETRA_UNE); /* most common */ PUSH (4, LAMENT_TETRA_USW); PUSH (4, LAMENT_TETRA_DWN); PUSH (4, LAMENT_TETRA_DSE); PUSH (8, LAMENT_STAR_OUT); /* pretty common */ PUSH (8, LAMENT_TASER_OUT); PUSH (8, LAMENT_PILLAR_OUT); PUSH (4, LAMENT_LID_OPEN); /* rare */ PUSH (2, LAMENT_SPHERE_OUT); /* rare */ PUSH (1, LAMENT_LEVIATHAN_SPIN); /* very rare */ PUSH (35, LAMENT_BOX); /* rest state */ # undef PUSH shuffle_states (lc); # ifdef DEBUG_MODE lc->type = DEBUG_MODE; lc->anim_pause = 0; # endif } ENTRYPOINT void draw_lament (ModeInfo *mi) { lament_configuration *lc = &lcs[MI_SCREEN(mi)]; Display *dpy = MI_DISPLAY(mi); Window window = MI_WINDOW(mi); if (!lc->glx_context) return; glDrawBuffer(GL_BACK); glXMakeCurrent(dpy, window, *(lc->glx_context)); draw(mi); if (mi->fps_p) do_fps (mi); glFinish(); glXSwapBuffers(dpy, window); if (!lc->ffwdp && lc->anim_pause) lc->anim_pause--; else animate(mi); } XSCREENSAVER_MODULE ("Lament", lament) #endif /* USE_GL */ xscreensaver-5.36/hacks/glx/lament_model.c000664 000767 000024 00001600741 12701612217 020637 0ustar00jwzstaff000000 000000 /* Generated from "lament.dxf" on Aug-25-2014. Smoothed vertex normals. Components: box, iso_base_a, iso_base_b, iso_den, iso_dse, iso_dwn, iso_swd, iso_une, iso_unw, iso_use, iso_usw, leviathan, lid_a, lid_b, lid_base, lid_c, lid_d, pillar_a, pillar_b, pillar_base, star_d, star_u, taser_a, taser_b, taser_base, tetra_base, tetra_dse, tetra_dwn, tetra_une, tetra_usw. */ #include "gllist.h" static const float lament_model_box_data[] = { -1,0,0,0,0.205,2.795, -1,0,0,0,0,2.795, -1,0,0,0,0,3, 0,0,1,0.962599,2.037401,3, 0,0,1,0.205,3,3, 0,0,1,0,3,3, 0,0,1,0.205,3,3, 0,0,1,0.962599,2.037401,3, 0,0,1,0.497732,3,3, 0,0,1,0.497732,3,3, 0,0,1,0.962599,2.037401,3, 0,0,1,1.017861,2.087488,3, 0,0,1,0.497732,3,3, 0,0,1,1.017861,2.087488,3, 0,0,1,1.077767,2.131917,3, 1,0,0,3,1.5,2.795, 1,0,0,3,0.205,3, 1,0,0,3,0.205,2.795, 1,0,0,3,0.205,3, 1,0,0,3,1.5,2.795, 1,0,0,3,0.497732,3, 1,0,0,3,0.497732,3, 1,0,0,3,1.5,2.795, 1,0,0,3,0.87868,3, 1,0,0,3,0.87868,3, 1,0,0,3,1.5,2.795, 1,0,0,3,1.201631,3, 1,0,0,3,1.201631,3, 1,0,0,3,1.5,2.795, 1,0,0,3,1.5,3, 0,1,0,0,3,1.5, 0,1,0,0.205,3,0.205, 0,1,0,0,3,0.205, 0,1,0,0.205,3,0.205, 0,1,0,0,3,1.5, 0,1,0,0.205,3,1.5, 0,-1,0,2.795,0,0.205, 0,-1,0,2.795,0,0, 0,-1,0,3,0,0, 0,0,-1,2.502268,3,0, 0,0,-1,1.982139,2.087488,0, 0,0,-1,1.922233,2.131917,0, 0,0,-1,1.982139,2.087488,0, 0,0,-1,2.502268,3,0, 0,0,-1,2.037401,2.037401,0, 0,0,-1,2.037401,2.037401,0, 0,0,-1,2.502268,3,0, 0,0,-1,3,3,0, 0.408248,0.408248,-0.816497,3,3,0, 0,0.447214,-0.894427,2.502268,3,0, 0,1,0,2.795,3,0, 0,0,-1,2.12132,3,0, 0,0,-1,1.858262,2.17026,0, 0,0,-1,1.790839,2.202148,0, 0,0,-1,1.858262,2.17026,0, 0,0,-1,2.12132,3,0, 0,0,-1,1.922233,2.131917,0, 0,0,-1,1.922233,2.131917,0, 0,0,-1,2.12132,3,0, 0,0,-1,2.502268,3,0, 0,0,-1,1.574493,0.74366,0, 0,0,-1,1.5,0,0, 0,0,-1,1.5,0.74,0, 0,0,-1,1.5,0,0, 0,0,-1,1.574493,0.74366,0, 0,0,-1,1.798369,0,0, 0,0,-1,1.798369,0,0, 0,0,-1,1.574493,0.74366,0, 0,0,-1,1.648269,0.754603,0, 0,0,-1,1.982139,0.912512,0, 0,0,-1,2.502268,0,0, 0,0,-1,1.922233,0.868083,0, 0,0,-1,2.502268,0,0, 0,0,-1,1.982139,0.912512,0, 0,0,-1,2.037401,0.962599,0, 0,0,-1,2.502268,0,0, 0,0,-1,2.037401,0.962599,0, 0,0,-1,3,0,0, 0,-0.447214,-0.894427,2.502268,0,0, 0.408248,-0.408248,-0.816497,3,0,0, 0,-1,0,2.795,0,0, 0,0,-1,2.087488,1.017861,0, 0,0,-1,3,0,0, 0,0,-1,2.037401,0.962599,0, 0,0,-1,3,0,0, 0,0,-1,2.087488,1.017861,0, 0,0,-1,2.131917,1.077767,0, 0,0,-1,3,0,0, 0,0,-1,2.131917,1.077767,0, 0,0,-1,3,0.497732,0, 0.408248,-0.408248,-0.816497,3,0,0, 0.6,0,-0.8,3,0.497732,0, 1,0,0,3,0.205,0, 0,0,-1,3,2.502268,0, 0,0,-1,2.17026,1.858262,0, 0,0,-1,2.131917,1.922233,0, 0,0,-1,2.17026,1.858262,0, 0,0,-1,3,2.502268,0, 0,0,-1,2.202148,1.790839,0, 0,0,-1,2.202148,1.790839,0, 0,0,-1,3,2.502268,0, 0,0,-1,3,2.12132,0, 0,0,-1,3,2.12132,0, 0,0,-1,2.227275,1.720616,0, 0,0,-1,2.202148,1.790839,0, 0,0,-1,2.227275,1.720616,0, 0,0,-1,3,2.12132,0, 0,0,-1,2.245397,1.648269,0, 0,0,-1,2.245397,1.648269,0, 0,0,-1,3,2.12132,0, 0,0,-1,3,1.798369,0, 0,0,-1,0.868083,1.077767,0, 0,0,-1,0,0.205,0, 0,0,-1,0,0.497732,0, 0,0,-1,0,0.205,0, 0,0,-1,0.868083,1.077767,0, 0,0,-1,0,0,0, 0,0,-1,0,0,0, 0,0,-1,0.868083,1.077767,0, 0,0,-1,0.912512,1.017861,0, 0,0,-1,0,0,0, 0,0,-1,0.912512,1.017861,0, 0,0,-1,0.962599,0.962599,0, 0,0,-1,0.797852,1.209161,0, 0,0,-1,0,0.497732,0, 0,0,-1,0,0.87868,0, 0,0,-1,0,0.497732,0, 0,0,-1,0.797852,1.209161,0, 0,0,-1,0.82974,1.141738,0, 0,0,-1,0,0.497732,0, 0,0,-1,0.82974,1.141738,0, 0,0,-1,0.868083,1.077767,0, 0,0,-1,3,1.798369,0, 0,0,-1,2.25634,1.574493,0, 0,0,-1,2.245397,1.648269,0, 0,0,-1,2.25634,1.574493,0, 0,0,-1,3,1.798369,0, 0,0,-1,2.26,1.5,0, 0,0,-1,2.26,1.5,0, 0,0,-1,3,1.798369,0, 0,0,-1,3,1.5,0, 0,0,-1,1.351731,0.754603,0, 0,0,-1,1.5,0,0, 0,0,-1,1.201631,0,0, 0,0,-1,1.5,0,0, 0,0,-1,1.351731,0.754603,0, 0,0,-1,1.425507,0.74366,0, 0,0,-1,1.5,0,0, 0,0,-1,1.425507,0.74366,0, 0,0,-1,1.5,0.74,0, 0,0,-1,3,3,0, 0,0,-1,2.087488,1.982139,0, 0,0,-1,2.037401,2.037401,0, 0,0,-1,2.087488,1.982139,0, 0,0,-1,3,3,0, 0,0,-1,2.131917,1.922233,0, 0,0,-1,2.131917,1.922233,0, 0,0,-1,3,3,0, 0,0,-1,3,2.502268,0, 0.447214,0,-0.894427,3,2.502268,0, 0.408248,0.408248,-0.816497,3,3,0, 1,0,0,3,2.795,0, 0,0,-1,0.962599,2.037401,0, 0,0,-1,0,2.795,0, 0,0,-1,0,3,0, 0,0,-1,0,2.795,0, 0,0,-1,0.962599,2.037401,0, 0,0,-1,0,2.502268,0, 0,0,-1,0,2.502268,0, 0,0,-1,0.962599,2.037401,0, 0,0,-1,0.912512,1.982139,0, 0,0,-1,0,2.502268,0, 0,0,-1,0.912512,1.982139,0, 0,0,-1,0.868083,1.922233,0, 0,0,-1,0.868083,1.922233,0, 0,0,-1,0,2.12132,0, 0,0,-1,0,2.502268,0, 0,0,-1,0,2.12132,0, 0,0,-1,0.868083,1.922233,0, 0,0,-1,0.82974,1.858262,0, 0,0,-1,0,2.12132,0, 0,0,-1,0.82974,1.858262,0, 0,0,-1,0.797852,1.790839,0, 0,0,-1,1.720616,0.772725,0, 0,0,-1,1.798369,0,0, 0,0,-1,1.648269,0.754603,0, 0,0,-1,1.798369,0,0, 0,0,-1,1.720616,0.772725,0, 0,0,-1,1.790839,0.797852,0, 0,0,-1,1.798369,0,0, 0,0,-1,1.790839,0.797852,0, 0,0,-1,2.12132,0,0, 0,0,-1,1.858262,0.82974,0, 0,0,-1,2.12132,0,0, 0,0,-1,1.790839,0.797852,0, 0,0,-1,2.12132,0,0, 0,0,-1,1.858262,0.82974,0, 0,0,-1,1.922233,0.868083,0, 0,0,-1,2.12132,0,0, 0,0,-1,1.922233,0.868083,0, 0,0,-1,2.502268,0,0, 0,0,-1,1.5,3,0, 0,0,-1,1.351731,2.245397,0, 0,0,-1,1.201631,3,0, 0,0,-1,1.351731,2.245397,0, 0,0,-1,1.5,3,0, 0,0,-1,1.425507,2.25634,0, 0,0,-1,1.425507,2.25634,0, 0,0,-1,1.5,3,0, 0,0,-1,1.5,2.26,0, 0,0,-1,1.201631,3,0, 0,0,-1,1.209161,2.202148,0, 0,0,-1,0.87868,3,0, 0,0,-1,1.209161,2.202148,0, 0,0,-1,1.201631,3,0, 0,0,-1,1.279384,2.227275,0, 0,0,-1,1.279384,2.227275,0, 0,0,-1,1.201631,3,0, 0,0,-1,1.351731,2.245397,0, 0,0,-1,0.74,1.5,0, 0,0,-1,0,1.201631,0, 0,0,-1,0,1.5,0, 0,0,-1,0,1.201631,0, 0,0,-1,0.74,1.5,0, 0,0,-1,0.74366,1.425507,0, 0,0,-1,0,1.201631,0, 0,0,-1,0.74366,1.425507,0, 0,0,-1,0.754603,1.351731,0, 0,0,-1,2.25634,1.425507,0, 0,0,-1,3,1.201631,0, 0,0,-1,2.245397,1.351731,0, 0,0,-1,3,1.201631,0, 0,0,-1,2.25634,1.425507,0, 0,0,-1,2.26,1.5,0, 0,0,-1,3,1.201631,0, 0,0,-1,2.26,1.5,0, 0,0,-1,3,1.5,0, 0,0,-1,2.227275,1.279384,0, 0,0,-1,3,0.87868,0, 0,0,-1,2.202148,1.209161,0, 0,0,-1,3,0.87868,0, 0,0,-1,2.227275,1.279384,0, 0,0,-1,2.245397,1.351731,0, 0,0,-1,3,0.87868,0, 0,0,-1,2.245397,1.351731,0, 0,0,-1,3,1.201631,0, 0,0,-1,0.754603,1.648269,0, 0,0,-1,0,1.5,0, 0,0,-1,0,1.798369,0, 0,0,-1,0,1.5,0, 0,0,-1,0.754603,1.648269,0, 0,0,-1,0.74366,1.574493,0, 0,0,-1,0,1.5,0, 0,0,-1,0.74366,1.574493,0, 0,0,-1,0.74,1.5,0, 0,0,-1,1.077767,0.868083,0, 0,0,-1,0.87868,0,0, 0,0,-1,0.497732,0,0, 0,0,-1,0.87868,0,0, 0,0,-1,1.077767,0.868083,0, 0,0,-1,1.141738,0.82974,0, 0,0,-1,0.87868,0,0, 0,0,-1,1.141738,0.82974,0, 0,0,-1,1.209161,0.797852,0, 0,0,-1,1.209161,0.797852,0, 0,0,-1,1.201631,0,0, 0,0,-1,0.87868,0,0, 0,0,-1,1.201631,0,0, 0,0,-1,1.209161,0.797852,0, 0,0,-1,1.279384,0.772725,0, 0,0,-1,1.201631,0,0, 0,0,-1,1.279384,0.772725,0, 0,0,-1,1.351731,0.754603,0, 0,0,-1,0.754603,1.351731,0, 0,0,-1,0,0.87868,0, 0,0,-1,0,1.201631,0, 0,0,-1,0,0.87868,0, 0,0,-1,0.754603,1.351731,0, 0,0,-1,0.772725,1.279384,0, 0,0,-1,0,0.87868,0, 0,0,-1,0.772725,1.279384,0, 0,0,-1,0.797852,1.209161,0, 0,0,-1,0.962599,0.962599,0, 0,0,-1,0.205,0,0, 0,0,-1,0,0,0, 0,0,-1,0.205,0,0, 0,0,-1,0.962599,0.962599,0, 0,0,-1,0.497732,0,0, 0,0,-1,0.497732,0,0, 0,0,-1,0.962599,0.962599,0, 0,0,-1,1.017861,0.912512,0, 0,0,-1,0.497732,0,0, 0,0,-1,1.017861,0.912512,0, 0,0,-1,1.077767,0.868083,0, 0,0,-1,2.17026,1.141738,0, 0,0,-1,3,0.497732,0, 0,0,-1,2.131917,1.077767,0, 0,0,-1,3,0.497732,0, 0,0,-1,2.17026,1.141738,0, 0,0,-1,2.202148,1.209161,0, 0,0,-1,3,0.497732,0, 0,0,-1,2.202148,1.209161,0, 0,0,-1,3,0.87868,0, 0,0,-1,0.87868,3,0, 0,0,-1,1.077767,2.131917,0, 0,0,-1,0.497732,3,0, 0,0,-1,1.077767,2.131917,0, 0,0,-1,0.87868,3,0, 0,0,-1,1.141738,2.17026,0, 0,0,-1,1.141738,2.17026,0, 0,0,-1,0.87868,3,0, 0,0,-1,1.209161,2.202148,0, 0,0,-1,0.205,3,0, 0,0,-1,0.962599,2.037401,0, 0,0,-1,0,3,0, 0,0,-1,0.962599,2.037401,0, 0,0,-1,0.205,3,0, 0,0,-1,0.497732,3,0, 0,0,-1,0.962599,2.037401,0, 0,0,-1,0.497732,3,0, 0,0,-1,1.017861,2.087488,0, 0,0,-1,1.017861,2.087488,0, 0,0,-1,0.497732,3,0, 0,0,-1,1.077767,2.131917,0, 0,0,-1,1.798369,3,0, 0,0,-1,1.5,2.26,0, 0,0,-1,1.5,3,0, 0,0,-1,1.5,2.26,0, 0,0,-1,1.798369,3,0, 0,0,-1,1.574493,2.25634,0, 0,0,-1,1.574493,2.25634,0, 0,0,-1,1.798369,3,0, 0,0,-1,1.648269,2.245397,0, 0,0,-1,1.798369,3,0, 0,0,-1,1.720616,2.227275,0, 0,0,-1,1.648269,2.245397,0, 0,0,-1,1.720616,2.227275,0, 0,0,-1,1.798369,3,0, 0,0,-1,1.790839,2.202148,0, 0,0,-1,1.790839,2.202148,0, 0,0,-1,1.798369,3,0, 0,0,-1,2.12132,3,0, 0,0,-1,0.797852,1.790839,0, 0,0,-1,0,1.798369,0, 0,0,-1,0,2.12132,0, 0,0,-1,0,1.798369,0, 0,0,-1,0.797852,1.790839,0, 0,0,-1,0.772725,1.720616,0, 0,0,-1,0,1.798369,0, 0,0,-1,0.772725,1.720616,0, 0,0,-1,0.754603,1.648269,0, 0,0,-1,2.202148,1.209161,0, 0,0,-1,2.131917,1.077767,0, 0,0,-1,1.5,1.5,0, 0,0,-1,2.131917,1.077767,0, 0,0,-1,2.202148,1.209161,0, 0,0,-1,2.17026,1.141738,0, 0,0,1,1.798369,0,3, 0,0,1,1.5,0.74,3, 0,0,1,1.5,0,3, 0,0,1,1.5,0.74,3, 0,0,1,1.798369,0,3, 0,0,1,1.574493,0.74366,3, 0,0,1,1.574493,0.74366,3, 0,0,1,1.798369,0,3, 0,0,1,1.648269,0.754603,3, 0,0,1,1.798369,0,3, 0,0,1,1.720616,0.772725,3, 0,0,1,1.648269,0.754603,3, 0,0,1,1.720616,0.772725,3, 0,0,1,1.798369,0,3, 0,0,1,1.790839,0.797852,3, 0,0,1,1.790839,0.797852,3, 0,0,1,1.798369,0,3, 0,0,1,2.12132,0,3, 0,0,1,1.077767,2.131917,3, 0,0,1,0.87868,3,3, 0,0,1,0.497732,3,3, 0,0,1,0.87868,3,3, 0,0,1,1.077767,2.131917,3, 0,0,1,1.141738,2.17026,3, 0,0,1,0.87868,3,3, 0,0,1,1.141738,2.17026,3, 0,0,1,1.209161,2.202148,3, 0,0,1,1.209161,2.202148,3, 0,0,1,1.201631,3,3, 0,0,1,0.87868,3,3, 0,0,1,1.201631,3,3, 0,0,1,1.209161,2.202148,3, 0,0,1,1.348827,2.26,3, 0,0,1,1.348827,2.26,3, 0,0,1,1.209161,2.202148,3, 0,0,1,1.279384,2.227275,3, 0,0,1,1.348827,2.26,3, 0,0,1,1.279384,2.227275,3, 0,0,1,1.351731,2.245397,3, 0,0,1,2.502268,0,3, 0,0,1,1.982139,0.912512,3, 0,0,1,1.922233,0.868083,3, 0,0,1,1.982139,0.912512,3, 0,0,1,2.502268,0,3, 0,0,1,2.037401,0.962599,3, 0,0,1,2.037401,0.962599,3, 0,0,1,2.502268,0,3, 0,0,1,3,0,3, 0.408248,-0.408248,0.816497,3,0,3, 0,0,1,2.502268,0,3, 0,-0.948683,-0.316228,2.795,0,3, 0,0,1,1.574493,2.25634,3, 0,0,1,1.5,3,3, 0,0,1,1.5,2.26,3, 0,0,1,1.5,3,3, 0,0,1,1.574493,2.25634,3, 0,0,1,1.798369,3,3, 0,0,1,1.798369,3,3, 0,0,1,1.574493,2.25634,3, 0,0,1,1.648269,2.245397,3, 0,0,1,1.348827,2.26,3, 0,0,1,1.5,3,3, 0,0,1,1.201631,3,3, 0,0,1,1.5,3,3, 0,0,1,1.348827,2.26,3, 0,0,1,1.351731,2.245397,3, 0,0,1,1.5,3,3, 0,0,1,1.351731,2.245397,3, 0,0,1,1.425507,2.25634,3, 0,0,1,1.5,3,3, 0,0,1,1.425507,2.25634,3, 0,0,1,1.5,2.26,3, 0,0,1,2.12132,0,3, 0,0,1,1.858262,0.82974,3, 0,0,1,1.790839,0.797852,3, 0,0,1,1.858262,0.82974,3, 0,0,1,2.12132,0,3, 0,0,1,1.922233,0.868083,3, 0,0,1,1.922233,0.868083,3, 0,0,1,2.12132,0,3, 0,0,1,2.502268,0,3, 0,0,1,1.982139,2.087488,3, 0,0,1,2.502268,3,3, 0,0,1,1.922233,2.131917,3, 0,0,1,2.502268,3,3, 0,0,1,1.982139,2.087488,3, 0,0,1,2.037401,2.037401,3, 0,0,1,2.502268,3,3, 0,0,1,2.037401,2.037401,3, 0,0,1,3,3,3, 0,0,1,2.502268,3,3, 0.408248,0.408248,0.816497,3,3,3, 0,1,0,2.795,3,3, 0,0,1,0.205,0,3, 0,0,1,0.962599,0.962599,3, 0,0,1,0,0,3, 0,0,1,0.962599,0.962599,3, 0,0,1,0.205,0,3, 0,0,1,0.497732,0,3, 0,0,1,0.962599,0.962599,3, 0,0,1,0.497732,0,3, 0,0,1,1.017861,0.912512,3, 0,0,1,1.017861,0.912512,3, 0,0,1,0.497732,0,3, 0,0,1,1.077767,0.868083,3, 0,0,1,0.87868,0,3, 0,0,1,1.077767,0.868083,3, 0,0,1,0.497732,0,3, 0,0,1,1.077767,0.868083,3, 0,0,1,0.87868,0,3, 0,0,1,1.141738,0.82974,3, 0,0,1,1.141738,0.82974,3, 0,0,1,0.87868,0,3, 0,0,1,1.209161,0.797852,3, 0,0,1,2.087488,1.982139,3, 0,0,1,3,3,3, 0,0,1,2.037401,2.037401,3, 0,0,1,3,3,3, 0,0,1,2.087488,1.982139,3, 0,0,1,2.131917,1.922233,3, 0,0,1,3,3,3, 0,0,1,2.131917,1.922233,3, 0,0,1,3,2.502268,3, 0.408248,0.408248,0.816497,3,3,3, 0.447214,0,0.894427,3,2.502268,3, 1,0,0,3,2.795,3, 0,0,1,0.962599,0.962599,3, 0,0,1,0,0.205,3, 0,0,1,0,0,3, 0,0,1,0,0.205,3, 0,0,1,0.962599,0.962599,3, 0,0,1,0,0.497732,3, 0,0,1,0,0.497732,3, 0,0,1,0.962599,0.962599,3, 0,0,1,0.912512,1.017861,3, 0,0,1,0,0.497732,3, 0,0,1,0.912512,1.017861,3, 0,0,1,0.868083,1.077767,3, 0,0,1,1.201631,0,3, 0,0,1,1.209161,0.797852,3, 0,0,1,0.87868,0,3, 0,0,1,1.209161,0.797852,3, 0,0,1,1.201631,0,3, 0,0,1,1.279384,0.772725,3, 0,0,1,1.279384,0.772725,3, 0,0,1,1.201631,0,3, 0,0,1,1.351731,0.754603,3, 0,0,1,1.5,0,3, 0,0,1,1.351731,0.754603,3, 0,0,1,1.201631,0,3, 0,0,1,1.351731,0.754603,3, 0,0,1,1.5,0,3, 0,0,1,1.425507,0.74366,3, 0,0,1,1.425507,0.74366,3, 0,0,1,1.5,0,3, 0,0,1,1.5,0.74,3, 0,0,1,2.17026,1.858262,3, 0,0,1,3,2.502268,3, 0,0,1,2.131917,1.922233,3, 0,0,1,3,2.502268,3, 0,0,1,2.17026,1.858262,3, 0,0,1,2.202148,1.790839,3, 0,0,1,3,2.502268,3, 0,0,1,2.202148,1.790839,3, 0,0,1,3,2.12132,3, 0,0,1,2.227275,1.720616,3, 0,0,1,3,2.12132,3, 0,0,1,2.202148,1.790839,3, 0,0,1,3,2.12132,3, 0,0,1,2.227275,1.720616,3, 0,0,1,2.245397,1.648269,3, 0,0,1,3,2.12132,3, 0,0,1,2.245397,1.648269,3, 0,0,1,3,1.798369,3, 0,0,1,0.754603,1.648269,3, 0,0,1,0,2.12132,3, 0,0,1,0,1.798369,3, 0,0,1,0,2.12132,3, 0,0,1,0.754603,1.648269,3, 0,0,1,0.772725,1.720616,3, 0,0,1,0,2.12132,3, 0,0,1,0.772725,1.720616,3, 0,0,1,0.797852,1.790839,3, 0,0,1,0.797852,1.209161,3, 0,0,1,0,1.201631,3, 0,0,1,0,0.87868,3, 0,0,1,0,1.201631,3, 0,0,1,0.797852,1.209161,3, 0,0,1,0.772725,1.279384,3, 0,0,1,0,1.201631,3, 0,0,1,0.772725,1.279384,3, 0,0,1,0.754603,1.351731,3, 0,0,1,0.868083,1.077767,3, 0,0,1,0,0.87868,3, 0,0,1,0,0.497732,3, 0,0,1,0,0.87868,3, 0,0,1,0.868083,1.077767,3, 0,0,1,0.82974,1.141738,3, 0,0,1,0,0.87868,3, 0,0,1,0.82974,1.141738,3, 0,0,1,0.797852,1.209161,3, 0,0,1,3,0.87868,3, 0,0,1,2.227275,1.279384,3, 0,0,1,2.202148,1.209161,3, 0,0,1,2.227275,1.279384,3, 0,0,1,3,0.87868,3, 0,0,1,2.245397,1.351731,3, 0,0,1,2.245397,1.351731,3, 0,0,1,3,0.87868,3, 0,0,1,3,1.201631,3, 0,0,1,3,1.201631,3, 0,0,1,2.25634,1.425507,3, 0,0,1,2.245397,1.351731,3, 0,0,1,2.25634,1.425507,3, 0,0,1,3,1.201631,3, 0,0,1,2.26,1.5,3, 0,0,1,2.26,1.5,3, 0,0,1,3,1.201631,3, 0,0,1,3,1.5,3, 0,0,1,0.797852,1.790839,3, 0,0,1,0,2.502268,3, 0,0,1,0,2.12132,3, 0,0,1,0,2.502268,3, 0,0,1,0.797852,1.790839,3, 0,0,1,0.82974,1.858262,3, 0,0,1,0,2.502268,3, 0,0,1,0.82974,1.858262,3, 0,0,1,0.868083,1.922233,3, 0,0,1,1.720616,2.227275,3, 0,0,1,1.798369,3,3, 0,0,1,1.648269,2.245397,3, 0,0,1,1.798369,3,3, 0,0,1,1.720616,2.227275,3, 0,0,1,1.790839,2.202148,3, 0,0,1,1.798369,3,3, 0,0,1,1.790839,2.202148,3, 0,0,1,2.12132,3,3, 0,0,1,1.858262,2.17026,3, 0,0,1,2.12132,3,3, 0,0,1,1.790839,2.202148,3, 0,0,1,2.12132,3,3, 0,0,1,1.858262,2.17026,3, 0,0,1,1.922233,2.131917,3, 0,0,1,2.12132,3,3, 0,0,1,1.922233,2.131917,3, 0,0,1,2.502268,3,3, 0,0,1,2.25634,1.574493,3, 0,0,1,3,1.798369,3, 0,0,1,2.245397,1.648269,3, 0,0,1,3,1.798369,3, 0,0,1,2.25634,1.574493,3, 0,0,1,2.26,1.5,3, 0,0,1,3,1.798369,3, 0,0,1,2.26,1.5,3, 0,0,1,3,1.5,3, 0,0,1,1.574493,0.74366,3, 0,0,1,1.5,1.5,3, 0,0,1,1.5,0.74,3, 0,0,1,1.5,1.5,3, 0,0,1,1.574493,0.74366,3, 0,0,1,1.648269,0.754603,3, 0,0,1,0.868083,1.922233,3, 0,0,1,0,2.795,3, 0,0,1,0,2.502268,3, 0,0,1,0,2.795,3, 0,0,1,0.868083,1.922233,3, 0,0,1,0,3,3, 0,0,1,0,3,3, 0,0,1,0.868083,1.922233,3, 0,0,1,0.912512,1.982139,3, 0,0,1,0,3,3, 0,0,1,0.912512,1.982139,3, 0,0,1,0.962599,2.037401,3, 0,0,1,0.754603,1.351731,3, 0,0,1,0,1.5,3, 0,0,1,0,1.201631,3, 0,0,1,0,1.5,3, 0,0,1,0.754603,1.351731,3, 0,0,1,0.74366,1.425507,3, 0,0,1,0,1.5,3, 0,0,1,0.74366,1.425507,3, 0,0,1,0.74,1.5,3, 0,0,1,0.74,1.5,3, 0,0,1,0,1.798369,3, 0,0,1,0,1.5,3, 0,0,1,0,1.798369,3, 0,0,1,0.74,1.5,3, 0,0,1,0.74366,1.574493,3, 0,0,1,0,1.798369,3, 0,0,1,0.74366,1.574493,3, 0,0,1,0.754603,1.648269,3, 0,0,1,3,0,3, 0,0,1,2.087488,1.017861,3, 0,0,1,2.037401,0.962599,3, 0,0,1,2.087488,1.017861,3, 0,0,1,3,0,3, 0,0,1,2.131917,1.077767,3, 0,0,1,2.131917,1.077767,3, 0,0,1,3,0,3, 0,0,1,3,0.497732,3, 0.447214,0,0.894427,3,0.497732,3, 0.408248,-0.408248,0.816497,3,0,3, 1,0,0,3,0.205,3, 0,0,1,3,0.497732,3, 0,0,1,2.17026,1.141738,3, 0,0,1,2.131917,1.077767,3, 0,0,1,2.17026,1.141738,3, 0,0,1,3,0.497732,3, 0,0,1,2.202148,1.209161,3, 0,0,1,2.202148,1.209161,3, 0,0,1,3,0.497732,3, 0,0,1,3,0.87868,3, 0,-1,0,3,0,1.5, 0,-1,0,2.795,0,0.205, 0,-1,0,3,0,0.205, 0,-1,0,2.795,0,0.205, 0,-1,0,3,0,1.5, 0,-1,0,2.795,0,1.5, 0,-1,0,2.795,0,3, 0,-1,0,1.5,0,2.795, 0,-1,0,2.795,0,2.795, 0,-1,0,1.5,0,2.795, 0,-1,0,2.795,0,3, 0,-1,0,1.5,0,3, 0,0,-1,1.5,0,3, 0,0,-1,2.795,0,3, 0,0,-1,2.502268,0,3, 0,0,-1,1.5,0,3, 0,0,-1,2.502268,0,3, 0,0,-1,2.12132,0,3, 0,0,1,1.5,0,3, 0,0,1,2.12132,0,3, 0,0,1,1.798369,0,3, 0,-1,0,0.205,0,1.5, 0,-1,0,0,0,0.205, 0,-1,0,0.205,0,0.205, 0,-1,0,0,0,0.205, 0,-1,0,0.205,0,1.5, 0,-1,0,0,0,1.5, 0,-1,0,0.205,0,2.795, 0,-1,0,0,0,1.5, 0,-1,0,0.205,0,1.5, 0,-1,0,0,0,1.5, 0,-1,0,0.205,0,2.795, 0,-1,0,0,0,2.795, 0,-1,0,2.795,0,3, 0,-1,0,2.795,0,2.795, 0,-1,0,3,0,3, 0,-1,0,2.795,0,0.205, 0,-1,0,2.502268,0,0, 0,-1,0,2.795,0,0, 0,-1,0,2.502268,0,0, 0,-1,0,2.795,0,0.205, 0,-1,0,2.12132,0,0, 0,-1,0,2.12132,0,0, 0,-1,0,2.795,0,0.205, 0,-1,0,1.798369,0,0, 0,-1,0,1.798369,0,0, 0,-1,0,2.795,0,0.205, 0,-1,0,1.5,0,0, 0,-1,0,1.5,0,0, 0,-1,0,2.795,0,0.205, 0,-1,0,1.5,0,0.205, 0,-1,0,1.5,0,0.205, 0,-1,0,1.201631,0,0, 0,-1,0,1.5,0,0, 0,-1,0,1.201631,0,0, 0,-1,0,1.5,0,0.205, 0,-1,0,0.87868,0,0, 0,-1,0,0.87868,0,0, 0,-1,0,1.5,0,0.205, 0,-1,0,0.497732,0,0, 0,-1,0,0.497732,0,0, 0,-1,0,1.5,0,0.205, 0,-1,0,0.205,0,0, 0,-1,0,0.205,0,0, 0,-1,0,1.5,0,0.205, 0,-1,0,0.205,0,0.205, 0,-1,0,0.205,0,1.5, 0,-1,0,0.8525,0,0.8525, 0,-1,0,1.5,0,1.5, 0,-1,0,1.5,0,3, 0,-1,0,0.205,0,2.795, 0,-1,0,1.5,0,2.795, 0,-1,0,0.205,0,2.795, 0,-1,0,1.5,0,3, 0,-1,0,0.205,0,3, 0,0,1,0.205,0,3, 0,0,1,1.5,0,3, 0,0,1,1.201631,0,3, 0,0,1,0.205,0,3, 0,0,1,1.201631,0,3, 0,0,1,0.87868,0,3, 0,0,-1,0.205,0,3, 0,0,-1,0.87868,0,3, 0,0,-1,0.497732,0,3, 0,-1,0,3,0,2.795, 0,-1,0,2.795,0,1.5, 0,-1,0,3,0,1.5, 0,-1,0,2.795,0,1.5, 0,-1,0,3,0,2.795, 0,-1,0,2.795,0,2.795, 0,1,0,0,3,2.795, 0,1,0,0.205,3,1.5, 0,1,0,0,3,1.5, 0,1,0,0.205,3,1.5, 0,1,0,0,3,2.795, 0,1,0,0.205,3,2.795, 0,1,0,3,3,3, 0,1,0,3,3,2.795, 0,1,0,2.795,3,2.795, 0,1,0,1.5,3,3, 0,1,0,2.795,3,2.795, 0,1,0,1.5,3,2.795, 0,1,0,2.795,3,2.795, 0,1,0,1.5,3,3, 0,1,0,2.795,3,3, 0,1,0,2.795,3,3, 0,0.447214,0.894427,1.5,3,3, 0,0,1,1.798369,3,3, 0,1,0,2.795,3,3, 0,0,1,1.798369,3,3, 0,0,1,2.12132,3,3, 0,1,0,2.795,3,3, 0,0,1,2.12132,3,3, 0,0,1,2.502268,3,3, 0,1,0,0.205,3,3, 0,1,0,1.5,3,2.795, 0,1,0,0.205,3,2.795, 0,1,0,1.5,3,2.795, 0,1,0,0.205,3,3, 0,1,0,1.5,3,3, 0,0.447214,0.894427,1.5,3,3, 0,0.83205,0.5547,0.205,3,3, 0,0,1,0.497732,3,3, 0,0.447214,0.894427,1.5,3,3, 0,0,1,0.497732,3,3, 0,0,1,0.87868,3,3, 0,0.447214,0.894427,1.5,3,3, 0,0,1,0.87868,3,3, 0,0,1,1.201631,3,3, 0,1,0,0.205,3,0.205, 0,1,0,0.205,3,0, 0,1,0,0,3,0, 0,1,0,2.795,3,2.795, 0,1,0,3,3,1.5, 0,1,0,2.795,3,1.5, 0,1,0,3,3,1.5, 0,1,0,2.795,3,2.795, 0,1,0,3,3,2.795, 0,1,0,2.795,3,1.5, 0,1,0,3,3,0.205, 0,1,0,2.795,3,0.205, 0,1,0,3,3,0.205, 0,1,0,2.795,3,1.5, 0,1,0,3,3,1.5, 0,1,0,3,3,0.205, 0,1,0,3,3,0, 0,1,0,2.795,3,0.205, 0,1,0,0.205,3,0.205, 0,1,0,0.497732,3,0, 0,1,0,0.205,3,0, 0,1,0,0.497732,3,0, 0,1,0,0.205,3,0.205, 0,1,0,0.87868,3,0, 0,1,0,0.87868,3,0, 0,1,0,0.205,3,0.205, 0,1,0,1.201631,3,0, 0,1,0,1.201631,3,0, 0,1,0,0.205,3,0.205, 0,1,0,1.5,3,0, 0,1,0,1.5,3,0, 0,1,0,0.205,3,0.205, 0,1,0,1.5,3,0.205, 0,1,0,0.205,3,3, 0,1,0,0.205,3,2.795, 0,1,0,0,3,3, 0,1,0,1.5,3,0.205, 0,1,0,1.798369,3,0, 0,1,0,1.5,3,0, 0,1,0,1.798369,3,0, 0,1,0,1.5,3,0.205, 0,1,0,2.12132,3,0, 0,1,0,2.12132,3,0, 0,1,0,1.5,3,0.205, 0,1,0,2.502268,3,0, 0,1,0,2.502268,3,0, 0,1,0,1.5,3,0.205, 0,1,0,2.795,3,0, 0,1,0,2.795,3,0, 0,1,0,1.5,3,0.205, 0,1,0,2.795,3,0.205, -1,0,0,0,0.205,2.795, -1,0,0,0,0,3, -1,0,0,0,0.205,3, -1,0,0,0,3,2.795, -1,0,0,0,2.795,2.795, -1,0,0,0,3,3, -1,0,0,0,0.205,0.205, -1,0,0,0,0.205,0, -1,0,0,0,0,0, -1,0,0,0,3,3, -1,0,0,0,2.795,2.795, -1,0,0,0,2.795,3, -1,0,0,0,1.5,0.205, -1,0,0,0,0.205,0.205, -1,0,0,0,1.5,1.5, -1,0,0,0,1.5,1.5, -1,0,0,0,0.205,1.5, -1,0,0,0,0.205,2.795, -1,0,0,0,3,0, -1,0,0,0,2.795,0.205, -1,0,0,0,3,0.205, -1,0,0,0,0.205,0.205, -1,0,0,0,0,0, -1,0,0,0,0,0.205, -1,0,0,0,3,0, -1,0,0,0,2.795,0, -1,0,0,0,2.795,0.205, -1,0,0,0,2.795,1.5, -1,0,0,0,1.5,1.5, -1,0,0,0,2.795,2.795, -1,0,0,0,0.497732,3, -1,0,0,0,0.205,2.795, -1,0,0,0,0.205,3, -1,0,0,0,0.205,2.795, -1,0,0,0,0.497732,3, -1,0,0,0,1.5,2.795, -1,0,0,0,1.5,2.795, -1,0,0,0,0.497732,3, -1,0,0,0,0.87868,3, -1,0,0,0,1.5,2.795, -1,0,0,0,0.87868,3, -1,0,0,0,1.201631,3, -1,0,0,0,1.5,2.795, -1,0,0,0,1.201631,3, -1,0,0,0,1.5,3, -1,0,0,0,0.205,0.205, -1,0,0,0,0.497732,0, -1,0,0,0,0.205,0, -1,0,0,0,0.497732,0, -1,0,0,0,0.205,0.205, -1,0,0,0,1.5,0.205, -1,0,0,0,0.497732,0, -1,0,0,0,1.5,0.205, -1,0,0,0,0.87868,0, -1,0,0,0,0.87868,0, -1,0,0,0,1.5,0.205, -1,0,0,0,1.201631,0, -1,0,0,0,1.201631,0, -1,0,0,0,1.5,0.205, -1,0,0,0,1.5,0, -1,0,0,0,0.205,2.795, -1,0,0,0,0,1.5, -1,0,0,0,0,2.795, -1,0,0,0,0,1.5, -1,0,0,0,0.205,2.795, -1,0,0,0,0.205,1.5, -1,0,0,0,1.5,1.5, -1,0,0,0,0.205,2.795, -1,0,0,0,1.5,2.795, -1,0,0,0,3,2.795, -1,0,0,0,2.795,1.5, -1,0,0,0,2.795,2.795, -1,0,0,0,2.795,1.5, -1,0,0,0,3,2.795, -1,0,0,0,3,1.5, -1,0,0,0,2.795,0.205, -1,0,0,0,1.5,0, -1,0,0,0,1.5,0.205, -1,0,0,0,1.5,0, -1,0,0,0,2.795,0.205, -1,0,0,0,1.798369,0, -1,0,0,0,1.798369,0, -1,0,0,0,2.795,0.205, -1,0,0,0,2.12132,0, -1,0,0,0,2.12132,0, -1,0,0,0,2.795,0.205, -1,0,0,0,2.502268,0, -1,0,0,0,2.502268,0, -1,0,0,0,2.795,0.205, -1,0,0,0,2.795,0, -1,0,0,0,2.795,0.205, -1,0,0,0,1.5,0.205, -1,0,0,0,1.5,1.5, -1,0,0,0,2.795,2.795, -1,0,0,0,1.5,1.5, -1,0,0,0,1.5,2.795, -1,0,0,0,1.798369,3, -1,0,0,0,1.5,2.795, -1,0,0,0,1.5,3, -1,0,0,0,1.5,2.795, -1,0,0,0,1.798369,3, -1,0,0,0,2.795,2.795, -1,0,0,0,2.795,2.795, -1,0,0,0,1.798369,3, -1,0,0,0,2.12132,3, -1,0,0,0,2.795,2.795, -1,0,0,0,2.12132,3, -1,0,0,0,2.502268,3, -1,0,0,0,2.795,2.795, -1,0,0,0,2.502268,3, -1,0,0,0,2.795,3, -1,0,0,0,3,1.5, -1,0,0,0,2.795,0.205, -1,0,0,0,2.795,1.5, -1,0,0,0,2.795,0.205, -1,0,0,0,3,1.5, -1,0,0,0,3,0.205, -1,0,0,0,1.5,1.5, -1,0,0,0,0.205,0.205, -1,0,0,0,0.205,1.5, -1,0,0,0,2.795,0.205, -1,0,0,0,1.5,1.5, -1,0,0,0,2.795,1.5, -1,0,0,0,0.205,1.5, -1,0,0,0,0,0.205, -1,0,0,0,0,1.5, -1,0,0,0,0,0.205, -1,0,0,0,0.205,1.5, -1,0,0,0,0.205,0.205, 1,0,0,3,0.205,3, 1,0,0,3,0,3, 1,0,0,3,0.205,2.795, 1,0,0,3,3,0.205, 1,0,0,3,2.795,1.5, 1,0,0,3,2.795,0.205, 1,0,0,3,2.795,1.5, 1,0,0,3,3,0.205, 1,0,0,3,3,1.5, 1,0,0,3,0.205,0.205, 1,0,0,3,0,0.205, 1,0,0,3,0,0, 1,0,0,3,0.205,0.205, 1,0,0,3,0,0, 1,0,0,3,0.205,0, 1,0,0,3,3,1.5, 1,0,0,3,2.795,2.795, 1,0,0,3,2.795,1.5, 1,0,0,3,2.795,2.795, 1,0,0,3,3,1.5, 1,0,0,3,3,2.795, 1,0,0,3,3,3, 1,0,0,3,2.795,2.795, 1,0,0,3,3,2.795, 1,0,0,3,3,0.205, 1,0,0,3,2.795,0.205, 1,0,0,3,3,0, 1,0,0,3,3,3, 1,0,0,3,2.795,3, 1,0,0,3,2.795,2.795, 1,0,0,3,0.205,2.795, 1,0,0,3,0,3, 1,0,0,3,0,2.795, 1,0,0,3,0.205,1.5, 1,0,0,3,0,2.795, 1,0,0,3,0,1.5, 1,0,0,3,0,2.795, 1,0,0,3,0.205,1.5, 1,0,0,3,0.205,2.795, 1,0,0,3,1.5,0.205, 1,0,0,3,0.205,1.5, 1,0,0,3,0.205,0.205, 1,0,0,3,0.205,1.5, 1,0,0,3,1.5,2.795, 1,0,0,3,0.205,2.795, 1,0,0,3,1.5,2.795, 1,0,0,3,0.205,1.5, 1,0,0,3,1.5,0.205, 1,0,0,3,1.5,2.795, 1,0,0,3,1.5,0.205, 1,0,0,3,2.795,0.205, 1,0,0,3,1.5,2.795, 1,0,0,3,2.795,0.205, 1,0,0,3,2.795,2.795, 1,0,0,3,2.795,2.795, 1,0,0,3,2.795,0.205, 1,0,0,3,2.795,1.5, 1,0,0,3,3,0, 1,0,0,3,2.795,0.205, 1,0,0,3,2.795,0, 1,0,0,3,0.497732,0, 1,0,0,3,0.205,0.205, 1,0,0,3,0.205,0, 1,0,0,3,0.205,0.205, 1,0,0,3,0.497732,0, 1,0,0,3,1.5,0.205, 1,0,0,3,1.5,0.205, 1,0,0,3,0.497732,0, 1,0,0,3,0.87868,0, 1,0,0,3,1.5,0.205, 1,0,0,3,0.87868,0, 1,0,0,3,1.201631,0, 1,0,0,3,1.5,0.205, 1,0,0,3,1.201631,0, 1,0,0,3,1.5,0, 1,0,0,3,1.798369,0, 1,0,0,3,1.5,0.205, 1,0,0,3,1.5,0, 1,0,0,3,1.5,0.205, 1,0,0,3,1.798369,0, 1,0,0,3,2.795,0.205, 1,0,0,3,2.795,0.205, 1,0,0,3,1.798369,0, 1,0,0,3,2.12132,0, 1,0,0,3,2.795,0.205, 1,0,0,3,2.12132,0, 1,0,0,3,2.502268,0, 1,0,0,3,2.795,0.205, 1,0,0,3,2.502268,0, 1,0,0,3,2.795,0, 1,0,0,3,0.205,0.205, 1,0,0,3,0,1.5, 1,0,0,3,0,0.205, 1,0,0,3,0,1.5, 1,0,0,3,0.205,0.205, 1,0,0,3,0.205,1.5, 1,0,0,3,2.795,2.795, 1,0,0,3,1.5,3, 1,0,0,3,1.5,2.795, 1,0,0,3,1.5,3, 1,0,0,3,2.795,2.795, 1,0,0,3,1.798369,3, 1,0,0,3,1.798369,3, 1,0,0,3,2.795,2.795, 1,0,0,3,2.12132,3, 1,0,0,3,2.12132,3, 1,0,0,3,2.795,2.795, 1,0,0,3,2.502268,3, 1,0,0,3,2.502268,3, 1,0,0,3,2.795,2.795, 1,0,0,3,2.795,3, 0,-1,0,1.5,0,1.5, 0,-1,0,1.5,0,0.205, 0,-1,0,2.1475,0,0.8525, 0,-1,0,0,0,0.205, 0,-1,0,0,0,0, 0,-1,0,0.205,0,0.205, 0,-1,0,2.1475,0,0.8525, 0,-1,0,1.5,0,0.205, 0,-1,0,2.795,0,0.205, 0,-1,0,0.8525,0,2.1475, 0,-1,0,0.205,0,1.5, 0,-1,0,1.5,0,1.5, 0,-1,0,1.5,0,2.795, 0,-1,0,1.5,0,1.5, 0,-1,0,2.1475,0,2.1475, 0,-1,0,1.5,0,2.795, 0,-1,0,0.8525,0,2.1475, 0,-1,0,1.5,0,1.5, 0,-1,0,0.205,0,2.795, 0,-1,0,0.8525,0,2.1475, 0,-1,0,1.5,0,2.795, 0,-1,0,1.5,0,1.5, 0,-1,0,2.1475,0,0.8525, 0,-1,0,2.795,0,1.5, 0,-1,0,0,0,3, 0,-1,0,0.205,0,2.795, 0,-1,0,0.205,0,3, 0,-1,0,1.5,0,2.795, 0,-1,0,2.1475,0,2.1475, 0,-1,0,2.795,0,2.795, 0,-1,0,2.795,0,0.205, 0,-1,0,3,0,0, 0,-1,0,3,0,0.205, 0,-1,0,2.1475,0,2.1475, 0,-1,0,1.5,0,1.5, 0,-1,0,2.795,0,1.5, 0,-1,0,1.5,0,1.5, 0,-1,0,0.8525,0,0.8525, 0,-1,0,1.5,0,0.205, 0,-1,0,2.795,0,2.795, 0,-1,0,2.1475,0,2.1475, 0,-1,0,2.795,0,1.5, 0,-1,0,2.795,0,1.5, 0,-1,0,2.1475,0,0.8525, 0,-1,0,2.795,0,0.205, 0,-1,0,3,0,3, 0,-1,0,2.795,0,2.795, 0,-1,0,3,0,2.795, 0,-1,0,0,0,3, 0,-1,0,0,0,2.795, 0,-1,0,0.205,0,2.795, 0,-1,0,0.205,0,2.795, 0,-1,0,0.205,0,1.5, 0,-1,0,0.8525,0,2.1475, 0,-1,0,0.205,0,1.5, 0,-1,0,0.205,0,0.205, 0,-1,0,0.8525,0,0.8525, 0,-1,0,0.8525,0,0.8525, 0,-1,0,0.205,0,0.205, 0,-1,0,1.5,0,0.205, 0,-1,0,0.205,0,0.205, 0,-1,0,0,0,0, 0,-1,0,0.205,0,0, 0,1,0,0.8525,3,0.8525, 0,1,0,1.5,3,0.205, 0,1,0,0.205,3,0.205, 0,1,0,2.1475,3,2.1475, 0,1,0,2.795,3,1.5, 0,1,0,1.5,3,1.5, 0,1,0,2.795,3,2.795, 0,1,0,2.795,3,1.5, 0,1,0,2.1475,3,2.1475, 0,1,0,2.795,3,1.5, 0,1,0,2.795,3,0.205, 0,1,0,2.1475,3,0.8525, 0,1,0,2.795,3,1.5, 0,1,0,2.1475,3,0.8525, 0,1,0,1.5,3,1.5, 0,1,0,1.5,3,1.5, 0,1,0,1.5,3,0.205, 0,1,0,0.8525,3,0.8525, 0,1,0,1.5,3,2.795, 0,1,0,1.5,3,1.5, 0,1,0,0.8525,3,2.1475, 0,1,0,0.205,3,1.5, 0,1,0,0.8525,3,0.8525, 0,1,0,0.205,3,0.205, 0,1,0,1.5,3,1.5, 0,1,0,0.8525,3,0.8525, 0,1,0,0.205,3,1.5, 0,1,0,1.5,3,2.795, 0,1,0,2.1475,3,2.1475, 0,1,0,1.5,3,1.5, 0,1,0,2.795,3,2.795, 0,1,0,2.1475,3,2.1475, 0,1,0,1.5,3,2.795, 0,1,0,0.205,3,0.205, 0,1,0,0,3,0, 0,1,0,0,3,0.205, 0,1,0,3,3,3, 0,1,0,2.795,3,2.795, 0,1,0,2.795,3,3, 0,1,0,1.5,3,2.795, 0,1,0,0.8525,3,2.1475, 0,1,0,0.205,3,2.795, 0,1,0,0.8525,3,2.1475, 0,1,0,1.5,3,1.5, 0,1,0,0.205,3,1.5, 0,1,0,1.5,3,1.5, 0,1,0,2.1475,3,0.8525, 0,1,0,1.5,3,0.205, 0,1,0,2.795,3,0.205, 0,1,0,3,3,0, 0,1,0,2.795,3,0, 0,1,0,0,3,3, 0,1,0,0.205,3,2.795, 0,1,0,0,3,2.795, 0,1,0,0.205,3,2.795, 0,1,0,0.8525,3,2.1475, 0,1,0,0.205,3,1.5, 0,1,0,2.1475,3,0.8525, 0,1,0,2.795,3,0.205, 0,1,0,1.5,3,0.205, 0,0,-1,1.5,1.5,0, 0,0,-1,1.141738,0.82974,0, 0,0,-1,1.077767,0.868083,0, 0,0,-1,1.141738,0.82974,0, 0,0,-1,1.5,1.5,0, 0,0,-1,1.209161,0.797852,0, 0,0,-1,1.279384,2.227275,0, 0,0,-1,1.5,1.5,0, 0,0,-1,1.209161,2.202148,0, 0,0,-1,1.5,1.5,0, 0,0,-1,1.279384,2.227275,0, 0,0,-1,1.351731,2.245397,0, 0,0,-1,2.245397,1.648269,0, 0,0,-1,2.26,1.5,0, 0,0,-1,1.5,1.5,0, 0,0,-1,2.26,1.5,0, 0,0,-1,2.245397,1.648269,0, 0,0,-1,2.25634,1.574493,0, 0,0,-1,0.772725,1.720616,0, 0,0,-1,1.5,1.5,0, 0,0,-1,0.754603,1.648269,0, 0,0,-1,1.5,1.5,0, 0,0,-1,0.772725,1.720616,0, 0,0,-1,0.797852,1.790839,0, 0,0,-1,1.648269,0.754603,0, 0,0,-1,1.5,0.74,0, 0,0,-1,1.5,1.5,0, 0,0,-1,1.5,0.74,0, 0,0,-1,1.648269,0.754603,0, 0,0,-1,1.574493,0.74366,0, 0,0,-1,1.5,1.5,0, 0,0,-1,0.772725,1.279384,0, 0,0,-1,0.754603,1.351731,0, 0,0,-1,0.772725,1.279384,0, 0,0,-1,1.5,1.5,0, 0,0,-1,0.797852,1.209161,0, 0,0,-1,1.648269,2.245397,0, 0,0,-1,1.790839,2.202148,0, 0,0,-1,1.5,1.5,0, 0,0,-1,1.790839,2.202148,0, 0,0,-1,1.648269,2.245397,0, 0,0,-1,1.720616,2.227275,0, 0,0,-1,1.922233,2.131917,0, 0,0,-1,2.037401,2.037401,0, 0,0,-1,1.5,1.5,0, 0,0,-1,2.037401,2.037401,0, 0,0,-1,1.922233,2.131917,0, 0,0,-1,1.982139,2.087488,0, 0,0,-1,1.5,1.5,0, 0,0,-1,1.425507,0.74366,0, 0,0,-1,1.351731,0.754603,0, 0,0,-1,1.425507,0.74366,0, 0,0,-1,1.5,1.5,0, 0,0,-1,1.5,0.74,0, 0,0,-1,1.5,1.5,0, 0,0,-1,1.017861,0.912512,0, 0,0,-1,0.962599,0.962599,0, 0,0,-1,1.017861,0.912512,0, 0,0,-1,1.5,1.5,0, 0,0,-1,1.077767,0.868083,0, 0,0,-1,1.790839,2.202148,0, 0,0,-1,1.922233,2.131917,0, 0,0,-1,1.5,1.5,0, 0,0,-1,1.922233,2.131917,0, 0,0,-1,1.790839,2.202148,0, 0,0,-1,1.858262,2.17026,0, 0,0,-1,1.574493,2.25634,0, 0,0,-1,1.5,1.5,0, 0,0,-1,1.5,2.26,0, 0,0,-1,1.5,1.5,0, 0,0,-1,1.574493,2.25634,0, 0,0,-1,1.648269,2.245397,0, 0,0,-1,1.5,1.5,0, 0,0,-1,1.279384,0.772725,0, 0,0,-1,1.209161,0.797852,0, 0,0,-1,1.279384,0.772725,0, 0,0,-1,1.5,1.5,0, 0,0,-1,1.351731,0.754603,0, 0,0,-1,1.922233,0.868083,0, 0,0,-1,1.790839,0.797852,0, 0,0,-1,1.5,1.5,0, 0,0,-1,1.790839,0.797852,0, 0,0,-1,1.922233,0.868083,0, 0,0,-1,1.858262,0.82974,0, 0,0,-1,1.425507,2.25634,0, 0,0,-1,1.5,1.5,0, 0,0,-1,1.351731,2.245397,0, 0,0,-1,1.5,1.5,0, 0,0,-1,1.425507,2.25634,0, 0,0,-1,1.5,2.26,0, 0,0,-1,1.017861,2.087488,0, 0,0,-1,1.5,1.5,0, 0,0,-1,0.962599,2.037401,0, 0,0,-1,1.5,1.5,0, 0,0,-1,1.017861,2.087488,0, 0,0,-1,1.077767,2.131917,0, 0,0,-1,1.790839,0.797852,0, 0,0,-1,1.648269,0.754603,0, 0,0,-1,1.5,1.5,0, 0,0,-1,1.648269,0.754603,0, 0,0,-1,1.790839,0.797852,0, 0,0,-1,1.720616,0.772725,0, 0,0,-1,1.141738,2.17026,0, 0,0,-1,1.5,1.5,0, 0,0,-1,1.077767,2.131917,0, 0,0,-1,1.5,1.5,0, 0,0,-1,1.141738,2.17026,0, 0,0,-1,1.209161,2.202148,0, 0,0,-1,2.131917,1.077767,0, 0,0,-1,2.037401,0.962599,0, 0,0,-1,1.5,1.5,0, 0,0,-1,2.037401,0.962599,0, 0,0,-1,2.131917,1.077767,0, 0,0,-1,2.087488,1.017861,0, 0,0,-1,0.912512,1.982139,0, 0,0,-1,1.5,1.5,0, 0,0,-1,0.868083,1.922233,0, 0,0,-1,1.5,1.5,0, 0,0,-1,0.912512,1.982139,0, 0,0,-1,0.962599,2.037401,0, 0,0,-1,2.037401,0.962599,0, 0,0,-1,1.922233,0.868083,0, 0,0,-1,1.5,1.5,0, 0,0,-1,1.922233,0.868083,0, 0,0,-1,2.037401,0.962599,0, 0,0,-1,1.982139,0.912512,0, 0,0,-1,2.26,1.5,0, 0,0,-1,2.245397,1.351731,0, 0,0,-1,1.5,1.5,0, 0,0,-1,2.245397,1.351731,0, 0,0,-1,2.26,1.5,0, 0,0,-1,2.25634,1.425507,0, 0,0,-1,0.82974,1.858262,0, 0,0,-1,1.5,1.5,0, 0,0,-1,0.797852,1.790839,0, 0,0,-1,1.5,1.5,0, 0,0,-1,0.82974,1.858262,0, 0,0,-1,0.868083,1.922233,0, 0,0,-1,2.245397,1.351731,0, 0,0,-1,2.202148,1.209161,0, 0,0,-1,1.5,1.5,0, 0,0,-1,2.202148,1.209161,0, 0,0,-1,2.245397,1.351731,0, 0,0,-1,2.227275,1.279384,0, 0,0,-1,0.74366,1.574493,0, 0,0,-1,1.5,1.5,0, 0,0,-1,0.74,1.5,0, 0,0,-1,1.5,1.5,0, 0,0,-1,0.74366,1.574493,0, 0,0,-1,0.754603,1.648269,0, 0,0,-1,2.131917,1.922233,0, 0,0,-1,2.202148,1.790839,0, 0,0,-1,1.5,1.5,0, 0,0,-1,2.202148,1.790839,0, 0,0,-1,2.131917,1.922233,0, 0,0,-1,2.17026,1.858262,0, 0,0,-1,1.5,1.5,0, 0,0,-1,0.74366,1.425507,0, 0,0,-1,0.74,1.5,0, 0,0,-1,0.74366,1.425507,0, 0,0,-1,1.5,1.5,0, 0,0,-1,0.754603,1.351731,0, 0,0,-1,1.5,1.5,0, 0,0,-1,0.912512,1.017861,0, 0,0,-1,0.868083,1.077767,0, 0,0,-1,0.912512,1.017861,0, 0,0,-1,1.5,1.5,0, 0,0,-1,0.962599,0.962599,0, 0,0,-1,2.202148,1.790839,0, 0,0,-1,2.245397,1.648269,0, 0,0,-1,1.5,1.5,0, 0,0,-1,2.245397,1.648269,0, 0,0,-1,2.202148,1.790839,0, 0,0,-1,2.227275,1.720616,0, 0,0,-1,1.5,1.5,0, 0,0,-1,0.82974,1.141738,0, 0,0,-1,0.797852,1.209161,0, 0,0,-1,0.82974,1.141738,0, 0,0,-1,1.5,1.5,0, 0,0,-1,0.868083,1.077767,0, 0,0,-1,2.037401,2.037401,0, 0,0,-1,2.131917,1.922233,0, 0,0,-1,1.5,1.5,0, 0,0,-1,2.131917,1.922233,0, 0,0,-1,2.037401,2.037401,0, 0,0,-1,2.087488,1.982139,0, 0,0,1,1.5,1.5,3, 0,0,1,1.141738,2.17026,3, 0,0,1,1.077767,2.131917,3, 0,0,1,1.141738,2.17026,3, 0,0,1,1.5,1.5,3, 0,0,1,1.209161,2.202148,3, 0,0,1,1.5,1.5,3, 0,0,1,1.425507,2.25634,3, 0,0,1,1.351731,2.245397,3, 0,0,1,1.425507,2.25634,3, 0,0,1,1.5,1.5,3, 0,0,1,1.5,2.26,3, 0,0,1,1.648269,0.754603,3, 0,0,1,1.790839,0.797852,3, 0,0,1,1.5,1.5,3, 0,0,1,1.790839,0.797852,3, 0,0,1,1.648269,0.754603,3, 0,0,1,1.720616,0.772725,3, 0,0,1,1.922233,0.868083,3, 0,0,1,2.037401,0.962599,3, 0,0,1,1.5,1.5,3, 0,0,1,2.037401,0.962599,3, 0,0,1,1.922233,0.868083,3, 0,0,1,1.982139,0.912512,3, 0,0,1,1.5,1.5,3, 0,0,1,1.279384,2.227275,3, 0,0,1,1.209161,2.202148,3, 0,0,1,1.279384,2.227275,3, 0,0,1,1.5,1.5,3, 0,0,1,1.351731,2.245397,3, 0,0,1,1.5,1.5,3, 0,0,1,0.912512,1.982139,3, 0,0,1,0.868083,1.922233,3, 0,0,1,0.912512,1.982139,3, 0,0,1,1.5,1.5,3, 0,0,1,0.962599,2.037401,3, 0,0,1,1.790839,0.797852,3, 0,0,1,1.922233,0.868083,3, 0,0,1,1.5,1.5,3, 0,0,1,1.922233,0.868083,3, 0,0,1,1.790839,0.797852,3, 0,0,1,1.858262,0.82974,3, 0,0,1,2.131917,1.077767,3, 0,0,1,2.202148,1.209161,3, 0,0,1,1.5,1.5,3, 0,0,1,2.202148,1.209161,3, 0,0,1,2.131917,1.077767,3, 0,0,1,2.17026,1.141738,3, 0,0,1,1.5,1.5,3, 0,0,1,1.017861,2.087488,3, 0,0,1,0.962599,2.037401,3, 0,0,1,1.017861,2.087488,3, 0,0,1,1.5,1.5,3, 0,0,1,1.077767,2.131917,3, 0,0,1,2.037401,0.962599,3, 0,0,1,2.131917,1.077767,3, 0,0,1,1.5,1.5,3, 0,0,1,2.131917,1.077767,3, 0,0,1,2.037401,0.962599,3, 0,0,1,2.087488,1.017861,3, 0,0,1,1.5,1.5,3, 0,0,1,0.772725,1.720616,3, 0,0,1,0.754603,1.648269,3, 0,0,1,0.772725,1.720616,3, 0,0,1,1.5,1.5,3, 0,0,1,0.797852,1.790839,3, 0,0,1,1.5,1.5,3, 0,0,1,0.82974,1.858262,3, 0,0,1,0.797852,1.790839,3, 0,0,1,0.82974,1.858262,3, 0,0,1,1.5,1.5,3, 0,0,1,0.868083,1.922233,3, 0,0,1,2.245397,1.351731,3, 0,0,1,2.26,1.5,3, 0,0,1,1.5,1.5,3, 0,0,1,2.26,1.5,3, 0,0,1,2.245397,1.351731,3, 0,0,1,2.25634,1.425507,3, 0,0,1,0.74366,1.425507,3, 0,0,1,1.5,1.5,3, 0,0,1,0.74,1.5,3, 0,0,1,1.5,1.5,3, 0,0,1,0.74366,1.425507,3, 0,0,1,0.754603,1.351731,3, 0,0,1,2.202148,1.209161,3, 0,0,1,2.245397,1.351731,3, 0,0,1,1.5,1.5,3, 0,0,1,2.245397,1.351731,3, 0,0,1,2.202148,1.209161,3, 0,0,1,2.227275,1.279384,3, 0,0,1,2.245397,1.648269,3, 0,0,1,2.202148,1.790839,3, 0,0,1,1.5,1.5,3, 0,0,1,2.202148,1.790839,3, 0,0,1,2.245397,1.648269,3, 0,0,1,2.227275,1.720616,3, 0,0,1,1.5,1.5,3, 0,0,1,0.74366,1.574493,3, 0,0,1,0.74,1.5,3, 0,0,1,0.74366,1.574493,3, 0,0,1,1.5,1.5,3, 0,0,1,0.754603,1.648269,3, 0,0,1,2.26,1.5,3, 0,0,1,2.245397,1.648269,3, 0,0,1,1.5,1.5,3, 0,0,1,2.245397,1.648269,3, 0,0,1,2.26,1.5,3, 0,0,1,2.25634,1.574493,3, 0,0,1,0.82974,1.141738,3, 0,0,1,1.5,1.5,3, 0,0,1,0.797852,1.209161,3, 0,0,1,1.5,1.5,3, 0,0,1,0.82974,1.141738,3, 0,0,1,0.868083,1.077767,3, 0,0,1,2.131917,1.922233,3, 0,0,1,2.037401,2.037401,3, 0,0,1,1.5,1.5,3, 0,0,1,2.037401,2.037401,3, 0,0,1,2.131917,1.922233,3, 0,0,1,2.087488,1.982139,3, 0,0,1,0.772725,1.279384,3, 0,0,1,1.5,1.5,3, 0,0,1,0.754603,1.351731,3, 0,0,1,1.5,1.5,3, 0,0,1,0.772725,1.279384,3, 0,0,1,0.797852,1.209161,3, 0,0,1,1.017861,0.912512,3, 0,0,1,1.5,1.5,3, 0,0,1,0.962599,0.962599,3, 0,0,1,1.5,1.5,3, 0,0,1,1.017861,0.912512,3, 0,0,1,1.077767,0.868083,3, 0,0,1,2.202148,1.790839,3, 0,0,1,2.131917,1.922233,3, 0,0,1,1.5,1.5,3, 0,0,1,2.131917,1.922233,3, 0,0,1,2.202148,1.790839,3, 0,0,1,2.17026,1.858262,3, 0,0,1,0.912512,1.017861,3, 0,0,1,1.5,1.5,3, 0,0,1,0.868083,1.077767,3, 0,0,1,1.5,1.5,3, 0,0,1,0.912512,1.017861,3, 0,0,1,0.962599,0.962599,3, 0,0,1,1.922233,2.131917,3, 0,0,1,1.790839,2.202148,3, 0,0,1,1.5,1.5,3, 0,0,1,1.790839,2.202148,3, 0,0,1,1.922233,2.131917,3, 0,0,1,1.858262,2.17026,3, 0,0,1,1.279384,0.772725,3, 0,0,1,1.5,1.5,3, 0,0,1,1.209161,0.797852,3, 0,0,1,1.5,1.5,3, 0,0,1,1.279384,0.772725,3, 0,0,1,1.351731,0.754603,3, 0,0,1,2.037401,2.037401,3, 0,0,1,1.922233,2.131917,3, 0,0,1,1.5,1.5,3, 0,0,1,1.922233,2.131917,3, 0,0,1,2.037401,2.037401,3, 0,0,1,1.982139,2.087488,3, 0,0,1,1.648269,2.245397,3, 0,0,1,1.5,2.26,3, 0,0,1,1.5,1.5,3, 0,0,1,1.5,2.26,3, 0,0,1,1.648269,2.245397,3, 0,0,1,1.574493,2.25634,3, 0,0,1,1.141738,0.82974,3, 0,0,1,1.5,1.5,3, 0,0,1,1.077767,0.868083,3, 0,0,1,1.5,1.5,3, 0,0,1,1.141738,0.82974,3, 0,0,1,1.209161,0.797852,3, 0,0,1,1.425507,0.74366,3, 0,0,1,1.5,1.5,3, 0,0,1,1.351731,0.754603,3, 0,0,1,1.5,1.5,3, 0,0,1,1.425507,0.74366,3, 0,0,1,1.5,0.74,3, 0,0,1,1.790839,2.202148,3, 0,0,1,1.648269,2.245397,3, 0,0,1,1.5,1.5,3, 0,0,1,1.648269,2.245397,3, 0,0,1,1.790839,2.202148,3, 0,0,1,1.720616,2.227275,3 }; static const struct gllist lament_model_box_frame = { GL_N3F_V3F, GL_TRIANGLES, 1584, lament_model_box_data, 0 }; const struct gllist *lament_model_box = &lament_model_box_frame; static const float lament_model_iso_base_a_data[] = { 0,-1,0,0.883139,0,2.116861, 0,-1,0,0.205,0,1.5, 0,-1,0,1.5,0,1.5, 0,-1,0,0.205,0,1.5, 0,-1,0,0.883139,0,2.116861, 0,-1,0,0.679903,0,1.974903, 1,0,0,3,1.5,1.5, 1,0,0,3,0.6475,2.795, 1,0,0,3,0.42625,2.57375, 1,0,0,3,0.6475,2.795, 1,0,0,3,1.5,1.5, 1,0,0,3,1.145992,2.795, 1,0,0,3,1.145992,2.795, 1,0,0,3,1.5,1.5, 1,0,0,3,1.5,2.54773, 1,0,0,3,1.705,0.205, 1,0,0,3,1.5,1.5, 1,0,0,3,1.5,0.205, 1,0,0,3,1.5,1.5, 1,0,0,3,1.705,0.205, 1,0,0,3,2.25,0.75, 0,-1,0,2.649417,0,1.645583, 0,-1,0,1.5,0,1.5, 0,-1,0,2.54773,0,1.5, 0,-1,0,1.5,0,1.5, 0,-1,0,2.649417,0,1.645583, 0,-1,0,2.1475,0,2.1475, 0,-1,0,2.1475,0,2.1475, 0,-1,0,1.5,0,2.54773, 0,-1,0,1.5,0,1.5, 0,-1,0,1.5,0,2.54773, 0,-1,0,2.1475,0,2.1475, 0,-1,0,1.645583,0,2.649417, 0,-1,0,2.57375,0,2.57375, 0,-1,0,1.645583,0,2.649417, 0,-1,0,2.1475,0,2.1475, 0,-1,0,1.645583,0,2.649417, 0,-1,0,2.57375,0,2.57375, 0,-1,0,2.3525,0,2.795, 0,-1,0,1.645583,0,2.649417, 0,-1,0,2.3525,0,2.795, 0,-1,0,1.854008,0,2.795, 0,-1,0,1.974903,0,0.679903, 0,-1,0,1.5,0,0.205, 0,-1,0,1.64319,0,0.205, 1,0,0,3,0.45227,1.5, 1,0,0,3,0.205,2.3525, 1,0,0,3,0.205,1.854008, 1,0,0,3,0.205,2.3525, 1,0,0,3,0.45227,1.5, 1,0,0,3,0.42625,2.57375, 1,0,0,3,0.42625,2.57375, 1,0,0,3,0.45227,1.5, 1,0,0,3,1.5,1.5, 1,0,0,3,1.145992,2.795, 1,0,0,3,0.8525,3, 1,0,0,3,0.6475,2.795, 1,0,0,3,1.5,1.5, 1,0,0,3,0.45227,1.5, 1,0,0,3,0.883139,0.883139, 1,0,0,3,1.35681,0.205, 1,0,0,3,1.5,1.5, 1,0,0,3,0.883139,0.883139, 1,0,0,3,1.5,1.5, 1,0,0,3,1.35681,0.205, 1,0,0,3,1.5,0.205, 0,0,1,1.5,1.5,3, 0,0,1,0.772725,1.720616,3, 0,0,1,0.754603,1.648269,3, 0,0,1,0.772725,1.720616,3, 0,0,1,1.5,1.5,3, 0,0,1,0.797852,1.790839,3, 0,0,1,1.017861,0.912512,3, 0,0,1,1.5,1.5,3, 0,0,1,0.962599,0.962599,3, 0,0,1,1.5,1.5,3, 0,0,1,1.017861,0.912512,3, 0,0,1,1.077767,0.868083,3, 0,-1,0,0.205,0,1.5, 0,-1,0,0.8525,0,0.8525, 0,-1,0,1.5,0,1.5, 0,0,1,1.5,1.5,3, 0,0,1,1.425507,2.25634,3, 0,0,1,1.351731,2.245397,3, 0,0,1,1.425507,2.25634,3, 0,0,1,1.5,1.5,3, 0,0,1,1.5,2.26,3, 0,0,1,1.425507,0.74366,3, 0,0,1,1.5,1.5,3, 0,0,1,1.351731,0.754603,3, 0,0,1,1.5,1.5,3, 0,0,1,1.425507,0.74366,3, 0,0,1,1.5,0.74,3, 0,0,1,1.790839,2.202148,3, 0,0,1,1.648269,2.245397,3, 0,0,1,1.5,1.5,3, 0,0,1,1.648269,2.245397,3, 0,0,1,1.790839,2.202148,3, 0,0,1,1.720616,2.227275,3, 0,-1,0,1.5,0,1.5, 0,-1,0,0.8525,0,0.8525, 0,-1,0,1.5,0,0.205, 0,-1,0,0.8525,0,0.8525, 0,-1,0,1.295,0,0.205, 0,-1,0,1.5,0,0.205, 0,-1,0,1.295,0,0.205, 0,-1,0,0.8525,0,0.8525, 0,-1,0,0.75,0,0.75, 0,0,1,1.5,1.5,3, 0,0,1,0.912512,1.982139,3, 0,0,1,0.868083,1.922233,3, 0,0,1,0.912512,1.982139,3, 0,0,1,1.5,1.5,3, 0,0,1,0.962599,2.037401,3, 0,0,1,1.790839,0.797852,3, 0,0,1,1.922233,0.868083,3, 0,0,1,1.5,1.5,3, 0,0,1,1.922233,0.868083,3, 0,0,1,1.790839,0.797852,3, 0,0,1,1.858262,0.82974,3, 0,0,1,2.202148,1.209161,3, 0,0,1,2.245397,1.351731,3, 0,0,1,1.5,1.5,3, 0,0,1,2.245397,1.351731,3, 0,0,1,2.202148,1.209161,3, 0,0,1,2.227275,1.279384,3, 0,0,1,0.74366,1.425507,3, 0,0,1,1.5,1.5,3, 0,0,1,0.74,1.5,3, 0,0,1,1.5,1.5,3, 0,0,1,0.74366,1.425507,3, 0,0,1,0.754603,1.351731,3, 0,0,1,2.26,1.5,3, 0,0,1,2.245397,1.648269,3, 0,0,1,1.5,1.5,3, 0,0,1,2.245397,1.648269,3, 0,0,1,2.26,1.5,3, 0,0,1,2.25634,1.574493,3, 0,0,1,0.82974,1.141738,3, 0,0,1,1.5,1.5,3, 0,0,1,0.797852,1.209161,3, 0,0,1,1.5,1.5,3, 0,0,1,0.82974,1.141738,3, 0,0,1,0.868083,1.077767,3, 0,0,1,0.912512,1.017861,3, 0,0,1,1.5,1.5,3, 0,0,1,0.868083,1.077767,3, 0,0,1,1.5,1.5,3, 0,0,1,0.912512,1.017861,3, 0,0,1,0.962599,0.962599,3, 0,0,1,1.858262,2.17026,3, 0,0,1,1.890028,2.44161,3, 0,0,1,1.790839,2.202148,3, 0,0,1,1.890028,2.44161,3, 0,0,1,1.858262,2.17026,3, 0,0,1,1.922233,2.131917,3, 0,0,1,1.890028,2.44161,3, 0,0,1,1.922233,2.131917,3, 0,0,1,2.012247,2.266632,3, 0,0,1,2.131917,1.922233,3, 0,0,1,2.037401,2.037401,3, 0,0,1,1.5,1.5,3, 0,0,1,2.037401,2.037401,3, 0,0,1,2.131917,1.922233,3, 0,0,1,2.087488,1.982139,3, 0,0,1,2.17026,1.858262,3, 0,0,1,2.214338,1.977306,3, 0,0,1,2.131917,1.922233,3, 0,0,1,2.214338,1.977306,3, 0,0,1,2.17026,1.858262,3, 0,0,1,2.202148,1.790839,3, 0,0,1,2.214338,1.977306,3, 0,0,1,2.202148,1.790839,3, 0,0,1,2.31262,1.836598,3, 0,0,1,1.317017,0.580081,3, 0,0,1,1.209161,0.797852,3, 0,0,1,1.163402,0.68738,3, 0,0,1,1.209161,0.797852,3, 0,0,1,1.317017,0.580081,3, 0,0,1,1.279384,0.772725,3, 0,0,1,1.279384,0.772725,3, 0,0,1,1.317017,0.580081,3, 0,0,1,1.351731,0.754603,3, 0,0,1,2.360168,0.212668,3, 0,0,1,1.982139,0.912512,3, 0,0,1,1.922233,0.868083,3, 0,0,1,1.982139,0.912512,3, 0,0,1,2.360168,0.212668,3, 0,0,1,2.037401,0.962599,3, 0,0,1,2.037401,0.962599,3, 0,0,1,2.360168,0.212668,3, 0,0,1,2.57375,0.42625,3, 0,0,1,1.574493,2.25634,3, 0,0,1,1.5,3,3, 0,0,1,1.5,2.26,3, 0,0,1,1.5,3,3, 0,0,1,1.574493,2.25634,3, 0,0,1,1.732234,2.667519,3, 0,0,1,1.732234,2.667519,3, 0,0,1,1.574493,2.25634,3, 0,0,1,1.648269,2.245397,3, 0,0,1,2.245397,1.351731,3, 0,0,1,2.26,1.5,3, 0,0,1,1.5,1.5,3, 0,0,1,2.26,1.5,3, 0,0,1,2.245397,1.351731,3, 0,0,1,2.25634,1.425507,3, 0,0,1,1.279384,0.772725,3, 0,0,1,1.5,1.5,3, 0,0,1,1.209161,0.797852,3, 0,0,1,1.5,1.5,3, 0,0,1,1.279384,0.772725,3, 0,0,1,1.351731,0.754603,3, 0,-1,0,0,0,1.5, 0,-1,0,0.205,0,1.295, 0,-1,0,0.205,0,1.5, 0,0,1,2.131917,1.077767,3, 0,0,1,2.202148,1.209161,3, 0,0,1,1.5,1.5,3, 0,0,1,2.202148,1.209161,3, 0,0,1,2.131917,1.077767,3, 0,0,1,2.17026,1.141738,3, 0,0,1,1.163402,0.68738,3, 0,0,1,1.077767,0.868083,3, 0,0,1,1.022694,0.785662,3, 0,0,1,1.077767,0.868083,3, 0,0,1,1.163402,0.68738,3, 0,0,1,1.141738,0.82974,3, 0,0,1,1.141738,0.82974,3, 0,0,1,1.163402,0.68738,3, 0,0,1,1.209161,0.797852,3, 0,0,1,2.087488,1.982139,3, 0,0,1,2.116861,2.116861,3, 0,0,1,2.037401,2.037401,3, 0,0,1,2.116861,2.116861,3, 0,0,1,2.087488,1.982139,3, 0,0,1,2.131917,1.922233,3, 0,0,1,2.116861,2.116861,3, 0,0,1,2.131917,1.922233,3, 0,0,1,2.214338,1.977306,3, 0,0,1,2.716787,1.257966,3, 0,0,1,2.25634,1.425507,3, 0,0,1,2.245397,1.351731,3, 0,0,1,2.25634,1.425507,3, 0,0,1,2.716787,1.257966,3, 0,0,1,2.26,1.5,3, 0,0,1,2.26,1.5,3, 0,0,1,2.716787,1.257966,3, 0,0,1,2.54773,1.5,3, 0,0,1,0.772725,1.279384,3, 0,0,1,1.5,1.5,3, 0,0,1,0.754603,1.351731,3, 0,0,1,1.5,1.5,3, 0,0,1,0.772725,1.279384,3, 0,0,1,0.797852,1.209161,3, 0,0,1,0.797852,1.790839,3, 0,0,1,0.600816,2.100816,3, 0,0,1,0.43934,1.93934,3, 0,0,1,0.600816,2.100816,3, 0,0,1,0.797852,1.790839,3, 0,0,1,0.82974,1.858262,3, 0,0,1,0.600816,2.100816,3, 0,0,1,0.82974,1.858262,3, 0,0,1,0.868083,1.922233,3, 0,0,1,0.55839,1.109972,3, 0,0,1,0.754603,1.351731,3, 0,0,1,0.332481,1.267766,3, 0,0,1,0.754603,1.351731,3, 0,0,1,0.55839,1.109972,3, 0,0,1,0.772725,1.279384,3, 0,0,1,0.772725,1.279384,3, 0,0,1,0.55839,1.109972,3, 0,0,1,0.797852,1.209161,3, 0,0,1,0.733368,0.987753,3, 0,0,1,0.797852,1.209161,3, 0,0,1,0.55839,1.109972,3, 0,0,1,0.797852,1.209161,3, 0,0,1,0.733368,0.987753,3, 0,0,1,0.82974,1.141738,3, 0,0,1,0.82974,1.141738,3, 0,0,1,0.733368,0.987753,3, 0,0,1,0.868083,1.077767,3, 0,0,1,2.974269,0.889338,3, 0,0,1,2.227275,1.279384,3, 0,0,1,2.202148,1.209161,3, 0,0,1,2.227275,1.279384,3, 0,0,1,2.974269,0.889338,3, 0,0,1,2.245397,1.351731,3, 0,0,1,2.245397,1.351731,3, 0,0,1,2.974269,0.889338,3, 0,0,1,2.716787,1.257966,3, 0,0,1,1.574493,0.74366,3, 0,0,1,1.5,1.5,3, 0,0,1,1.5,0.74,3, 0,0,1,1.5,1.5,3, 0,0,1,1.574493,0.74366,3, 0,0,1,1.648269,0.754603,3, 0,0,1,0.868083,1.922233,3, 0,0,1,0.75,2.25,3, 0,0,1,0.600816,2.100816,3, 0,0,1,0.75,2.25,3, 0,0,1,0.868083,1.922233,3, 0,0,1,0.912512,1.982139,3, 0,0,1,0.75,2.25,3, 0,0,1,0.912512,1.982139,3, 0,0,1,0.962599,2.037401,3, 0,0,1,0.332481,1.267766,3, 0,0,1,0.74,1.5,3, 0,0,1,0,1.5,3, 0,0,1,0.74,1.5,3, 0,0,1,0.332481,1.267766,3, 0,0,1,0.74366,1.425507,3, 0,0,1,0.74366,1.425507,3, 0,0,1,0.332481,1.267766,3, 0,0,1,0.754603,1.351731,3, 0,0,1,2.57375,0.42625,3, 0,0,1,2.087488,1.017861,3, 0,0,1,2.037401,0.962599,3, 0,0,1,2.087488,1.017861,3, 0,0,1,2.57375,0.42625,3, 0,0,1,2.131917,1.077767,3, 0,0,1,2.131917,1.077767,3, 0,0,1,2.57375,0.42625,3, 0,0,1,2.787332,0.639832,3, 0,0,1,2.787332,0.639832,3, 0,0,1,2.17026,1.141738,3, 0,0,1,2.131917,1.077767,3, 0,0,1,2.17026,1.141738,3, 0,0,1,2.787332,0.639832,3, 0,0,1,2.202148,1.209161,3, 0,0,1,2.202148,1.209161,3, 0,0,1,2.787332,0.639832,3, 0,0,1,2.974269,0.889338,3, 0,0,1,2.974269,0.889338,3, 0,0,1,2.787332,0.639832,3, 0,0,1,3,0.8525,3, 0,0,1,0.74,1.5,3, 0,0,1,0.248866,1.748866,3, 0,0,1,0,1.5,3, 0,0,1,0.248866,1.748866,3, 0,0,1,0.74,1.5,3, 0,0,1,0.74366,1.574493,3, 0,0,1,0.248866,1.748866,3, 0,0,1,0.74366,1.574493,3, 0,0,1,0.754603,1.648269,3, 0,0,1,1.5,0.45227,3, 0,0,1,1.351731,0.754603,3, 0,0,1,1.317017,0.580081,3, 0,0,1,1.351731,0.754603,3, 0,0,1,1.5,0.45227,3, 0,0,1,1.425507,0.74366,3, 0,0,1,1.425507,0.74366,3, 0,0,1,1.5,0.45227,3, 0,0,1,1.5,0.74,3, 1,0,0,3,1.5,0.205, 1,0,0,3,1.35681,0.205, 1,0,0,3,1.5,0, 0,0,1,1.5,1.5,3, 0,0,1,1.017861,2.087488,3, 0,0,1,0.962599,2.037401,3, 0,0,1,1.017861,2.087488,3, 0,0,1,1.5,1.5,3, 0,0,1,1.077767,2.131917,3, 0,0,1,2.110662,0.025731,3, 0,0,1,1.858262,0.82974,3, 0,0,1,1.790839,0.797852,3, 0,0,1,1.858262,0.82974,3, 0,0,1,2.110662,0.025731,3, 0,0,1,1.922233,0.868083,3, 0,0,1,1.922233,0.868083,3, 0,0,1,2.110662,0.025731,3, 0,0,1,2.360168,0.212668,3, 0,0,1,2.360168,0.212668,3, 0,0,1,2.110662,0.025731,3, 0,0,1,2.1475,0,3, 0,0,1,1.742034,0.283213,3, 0,0,1,1.720616,0.772725,3, 0,0,1,1.648269,0.754603,3, 0,0,1,1.720616,0.772725,3, 0,0,1,1.742034,0.283213,3, 0,0,1,1.790839,0.797852,3, 0,0,1,1.790839,0.797852,3, 0,0,1,1.742034,0.283213,3, 0,0,1,2.110662,0.025731,3, 0,0,1,1.077767,2.131917,3, 0,0,1,1.06066,2.56066,3, 0,0,1,0.899184,2.399184,3, 0,0,1,1.06066,2.56066,3, 0,0,1,1.077767,2.131917,3, 0,0,1,1.141738,2.17026,3, 0,0,1,1.06066,2.56066,3, 0,0,1,1.141738,2.17026,3, 0,0,1,1.209161,2.202148,3, 0,0,1,1.209161,2.202148,3, 0,0,1,1.251134,2.751134,3, 0,0,1,1.06066,2.56066,3, 0,0,1,1.251134,2.751134,3, 0,0,1,1.209161,2.202148,3, 0,0,1,1.279384,2.227275,3, 0,0,1,1.251134,2.751134,3, 0,0,1,1.279384,2.227275,3, 0,0,1,1.348827,2.26,3, 0,0,1,1.348827,2.26,3, 0,0,1,1.279384,2.227275,3, 0,0,1,1.351731,2.245397,3, 1,0,0,3,3,1.5, 1,0,0,3,2.795,1.5, 1,0,0,3,2.795,1.295, 1,0,0,3,1.705,0.205, 1,0,0,3,1.5,0.205, 1,0,0,3,1.5,0, 1,0,0,3,2.25,0.75, 1,0,0,3,2.795,1.5, 1,0,0,3,1.5,1.5, 1,0,0,3,2.795,1.5, 1,0,0,3,2.25,0.75, 1,0,0,3,2.795,1.295, 0,0,1,1.742034,0.283213,3, 0,0,1,1.5,0.74,3, 0,0,1,1.5,0.45227,3, 0,0,1,1.5,0.74,3, 0,0,1,1.742034,0.283213,3, 0,0,1,1.574493,0.74366,3, 0,0,1,1.574493,0.74366,3, 0,0,1,1.742034,0.283213,3, 0,0,1,1.648269,0.754603,3, 0,0,1,1.720616,2.227275,3, 0,0,1,1.732234,2.667519,3, 0,0,1,1.648269,2.245397,3, 0,0,1,1.732234,2.667519,3, 0,0,1,1.720616,2.227275,3, 0,0,1,1.790839,2.202148,3, 0,0,1,1.732234,2.667519,3, 0,0,1,1.790839,2.202148,3, 0,0,1,1.890028,2.44161,3, 0,0,1,1.022694,0.785662,3, 0,0,1,0.962599,0.962599,3, 0,0,1,0.883139,0.883139,3, 0,0,1,0.962599,0.962599,3, 0,0,1,1.022694,0.785662,3, 0,0,1,1.017861,0.912512,3, 0,0,1,1.017861,0.912512,3, 0,0,1,1.022694,0.785662,3, 0,0,1,1.077767,0.868083,3, 0,0,1,1.5,1.5,3, 0,0,1,1.141738,2.17026,3, 0,0,1,1.077767,2.131917,3, 0,0,1,1.141738,2.17026,3, 0,0,1,1.5,1.5,3, 0,0,1,1.209161,2.202148,3, 0,0,1,1.922233,2.131917,3, 0,0,1,1.790839,2.202148,3, 0,0,1,1.5,1.5,3, 0,0,1,1.790839,2.202148,3, 0,0,1,1.922233,2.131917,3, 0,0,1,1.858262,2.17026,3, 0,0,1,2.202148,1.790839,3, 0,0,1,2.131917,1.922233,3, 0,0,1,1.5,1.5,3, 0,0,1,2.131917,1.922233,3, 0,0,1,2.202148,1.790839,3, 0,0,1,2.17026,1.858262,3, 0,0,1,1.348827,2.26,3, 0,0,1,1.5,3,3, 0,0,1,1.251134,2.751134,3, 0,0,1,1.5,3,3, 0,0,1,1.348827,2.26,3, 0,0,1,1.351731,2.245397,3, 0,0,1,1.5,3,3, 0,0,1,1.351731,2.245397,3, 0,0,1,1.425507,2.25634,3, 0,0,1,1.5,3,3, 0,0,1,1.425507,2.25634,3, 0,0,1,1.5,2.26,3, 0,0,1,1.648269,0.754603,3, 0,0,1,1.790839,0.797852,3, 0,0,1,1.5,1.5,3, 0,0,1,1.790839,0.797852,3, 0,0,1,1.648269,0.754603,3, 0,0,1,1.720616,0.772725,3, 0,0,1,1.5,1.5,3, 0,0,1,1.279384,2.227275,3, 0,0,1,1.209161,2.202148,3, 0,0,1,1.279384,2.227275,3, 0,0,1,1.5,1.5,3, 0,0,1,1.351731,2.245397,3, 0,0,1,2.245397,1.648269,3, 0,0,1,2.202148,1.790839,3, 0,0,1,1.5,1.5,3, 0,0,1,2.202148,1.790839,3, 0,0,1,2.245397,1.648269,3, 0,0,1,2.227275,1.720616,3, 1,0,0,3,2.116861,2.116861, 1,0,0,3,1.5,2.54773, 1,0,0,3,1.5,1.5, 1,0,0,3,2.795,1.5, 1,0,0,3,2.116861,2.116861, 1,0,0,3,1.5,1.5, 1,0,0,3,2.116861,2.116861, 1,0,0,3,2.795,1.5, 1,0,0,3,2.795,1.64319, 1,0,0,3,3,1.5, 1,0,0,3,2.795,1.64319, 1,0,0,3,2.795,1.5, 0,-1,0,0.205,0,1.64319, 0,-1,0,0,0,1.5, 0,-1,0,0.205,0,1.5, 0,-1,0,1.5,0,2.54773, 0,-1,0,0.883139,0,2.116861, 0,-1,0,1.5,0,1.5, 1,0,0,3,0.205,2.3525, 1,0,0,3,0,2.1475, 1,0,0,3,0.205,1.854008, 0,-1,0,1.64319,0,0.205, 0,-1,0,1.5,0,0.205, 0,-1,0,1.5,0,0, 0,-1,0,0.679903,0,1.974903, 0,-1,0,0.205,0,1.64319, 0,-1,0,0.205,0,1.5, 0,-1,0,0.8525,0,0.8525, 0,-1,0,0.205,0,1.295, 0,-1,0,0.75,0,0.75, 0,-1,0,0.205,0,1.295, 0,-1,0,0.8525,0,0.8525, 0,-1,0,0.205,0,1.5, 0,-1,0,1.974903,0,0.679903, 0,-1,0,1.5,0,1.5, 0,-1,0,1.5,0,0.205, 0,-1,0,1.5,0,1.5, 0,-1,0,1.974903,0,0.679903, 0,-1,0,2.116861,0,0.883139, 0,-1,0,2.795,0,2.3525, 0,-1,0,2.795,0,1.854008, 0,-1,0,3,0,2.1475, 0,-1,0,1.5,0,1.5, 0,-1,0,2.116861,0,0.883139, 0,-1,0,2.54773,0,1.5, 0,-1,0,2.795,0,1.854008, 0,-1,0,2.1475,0,2.1475, 0,-1,0,2.649417,0,1.645583, 0,-1,0,2.1475,0,2.1475, 0,-1,0,2.795,0,1.854008, 0,-1,0,2.795,0,2.3525, 0,-1,0,2.1475,0,2.1475, 0,-1,0,2.795,0,2.3525, 0,-1,0,2.57375,0,2.57375, 0,-1,0,2.1475,0,3, 0,-1,0,1.854008,0,2.795, 0,-1,0,2.3525,0,2.795, 0,0,1,1.5,1.5,3, 0,0,1,0.74366,1.574493,3, 0,0,1,0.74,1.5,3, 0,0,1,0.74366,1.574493,3, 0,0,1,1.5,1.5,3, 0,0,1,0.754603,1.648269,3, 0,0,1,2.037401,0.962599,3, 0,0,1,2.131917,1.077767,3, 0,0,1,1.5,1.5,3, 0,0,1,2.131917,1.077767,3, 0,0,1,2.037401,0.962599,3, 0,0,1,2.087488,1.017861,3, 0,0,1,1.982139,2.087488,3, 0,0,1,2.012247,2.266632,3, 0,0,1,1.922233,2.131917,3, 0,0,1,2.012247,2.266632,3, 0,0,1,1.982139,2.087488,3, 0,0,1,2.037401,2.037401,3, 0,0,1,2.012247,2.266632,3, 0,0,1,2.037401,2.037401,3, 0,0,1,2.116861,2.116861,3, 0,0,1,2.037401,2.037401,3, 0,0,1,1.922233,2.131917,3, 0,0,1,1.5,1.5,3, 0,0,1,1.922233,2.131917,3, 0,0,1,2.037401,2.037401,3, 0,0,1,1.982139,2.087488,3, 0,0,1,2.25634,1.574493,3, 0,0,1,2.419919,1.682983,3, 0,0,1,2.245397,1.648269,3, 0,0,1,2.419919,1.682983,3, 0,0,1,2.25634,1.574493,3, 0,0,1,2.26,1.5,3, 0,0,1,2.419919,1.682983,3, 0,0,1,2.26,1.5,3, 0,0,1,2.54773,1.5,3, 0,0,1,2.227275,1.720616,3, 0,0,1,2.31262,1.836598,3, 0,0,1,2.202148,1.790839,3, 0,0,1,2.31262,1.836598,3, 0,0,1,2.227275,1.720616,3, 0,0,1,2.245397,1.648269,3, 0,0,1,2.31262,1.836598,3, 0,0,1,2.245397,1.648269,3, 0,0,1,2.419919,1.682983,3, 0,0,1,1.648269,2.245397,3, 0,0,1,1.5,2.26,3, 0,0,1,1.5,1.5,3, 0,0,1,1.5,2.26,3, 0,0,1,1.648269,2.245397,3, 0,0,1,1.574493,2.25634,3, 0,0,1,1.5,1.5,3, 0,0,1,0.82974,1.858262,3, 0,0,1,0.797852,1.790839,3, 0,0,1,0.82974,1.858262,3, 0,0,1,1.5,1.5,3, 0,0,1,0.868083,1.922233,3, 0,0,1,0.754603,1.648269,3, 0,0,1,0.43934,1.93934,3, 0,0,1,0.248866,1.748866,3, 0,0,1,0.43934,1.93934,3, 0,0,1,0.754603,1.648269,3, 0,0,1,0.772725,1.720616,3, 0,0,1,0.43934,1.93934,3, 0,0,1,0.772725,1.720616,3, 0,0,1,0.797852,1.790839,3, 0,0,1,1.141738,0.82974,3, 0,0,1,1.5,1.5,3, 0,0,1,1.077767,0.868083,3, 0,0,1,1.5,1.5,3, 0,0,1,1.141738,0.82974,3, 0,0,1,1.209161,0.797852,3, 0,-1,0,1.295,0,0.205, 0,-1,0,1.5,0,0, 0,-1,0,1.5,0,0.205, 0,0,1,0.883139,0.883139,3, 0,0,1,0.868083,1.077767,3, 0,0,1,0.733368,0.987753,3, 0,0,1,0.868083,1.077767,3, 0,0,1,0.883139,0.883139,3, 0,0,1,0.912512,1.017861,3, 0,0,1,0.912512,1.017861,3, 0,0,1,0.883139,0.883139,3, 0,0,1,0.962599,0.962599,3, 0,0,1,1.922233,0.868083,3, 0,0,1,2.037401,0.962599,3, 0,0,1,1.5,1.5,3, 0,0,1,2.037401,0.962599,3, 0,0,1,1.922233,0.868083,3, 0,0,1,1.982139,0.912512,3, 0,0,1,0.962599,2.037401,3, 0,0,1,0.899184,2.399184,3, 0,0,1,0.75,2.25,3, 0,0,1,0.899184,2.399184,3, 0,0,1,0.962599,2.037401,3, 0,0,1,1.017861,2.087488,3, 0,0,1,0.899184,2.399184,3, 0,0,1,1.017861,2.087488,3, 0,0,1,1.077767,2.131917,3, -0.442836,-0.633994,0.633994,2.1475,0,3, -0.442836,-0.633994,0.633994,2.110662,0.025731,3, -0.442836,-0.633994,0.633994,1.854008,0,2.795, -0.442836,-0.633994,0.633994,0.205,0,1.64319, -0.442836,-0.633994,0.633994,0,1.5,3, -0.442836,-0.633994,0.633994,0,0,1.5, -0.442836,-0.633994,0.633994,0,1.5,3, -0.442836,-0.633994,0.633994,0.205,0,1.64319, -0.442836,-0.633994,0.633994,0.679903,0,1.974903, -0.442836,-0.633994,0.633994,0,1.5,3, -0.442836,-0.633994,0.633994,0.679903,0,1.974903, -0.442836,-0.633994,0.633994,0.883139,0,2.116861, -0.442836,-0.633994,0.633994,0,1.5,3, -0.442836,-0.633994,0.633994,0.883139,0,2.116861, -0.442836,-0.633994,0.633994,1.5,0,2.54773, -0.442836,-0.633994,0.633994,0,1.5,3, -0.442836,-0.633994,0.633994,1.5,0,2.54773, -0.442836,-0.633994,0.633994,1.645583,0,2.649417, -0.442836,-0.633994,0.633994,0,1.5,3, -0.442836,-0.633994,0.633994,1.645583,0,2.649417, -0.442836,-0.633994,0.633994,1.854008,0,2.795, -0.442836,-0.633994,0.633994,0,1.5,3, -0.442836,-0.633994,0.633994,1.854008,0,2.795, -0.442836,-0.633994,0.633994,2.110662,0.025731,3, 0,0,1,0,1.5,3, 0,0,1,2.110662,0.025731,3, 0,0,1,1.742034,0.283213,3, 0,0,1,0,1.5,3, 0,0,1,1.742034,0.283213,3, 0,0,1,1.5,0.45227,3, 0,0,1,0,1.5,3, 0,0,1,1.5,0.45227,3, 0,0,1,1.317017,0.580081,3, 0,0,1,0,1.5,3, 0,0,1,1.317017,0.580081,3, 0,0,1,1.163402,0.68738,3, 0,0,-1,0,1.5,3, 0,0,-1,1.163402,0.68738,3, 0,0,-1,1.022694,0.785662,3, 0,0,1,0,1.5,3, 0,0,1,1.022694,0.785662,3, 0,0,1,0.883139,0.883139,3, 0,0,-1,0,1.5,3, 0,0,-1,0.883139,0.883139,3, 0,0,-1,0.733368,0.987753,3, 0,0,-1,0,1.5,3, 0,0,-1,0.733368,0.987753,3, 0,0,-1,0.55839,1.109972,3, 0,0,-1,0,1.5,3, 0,0,-1,0.55839,1.109972,3, 0,0,-1,0.332481,1.267766,3, 0.633994,0.442836,0.633994,3,1.145992,2.795, 0.633994,0.442836,0.633994,2.974269,0.889338,3, 0.633994,0.442836,0.633994,3,0.8525,3, 0.633994,0.442836,0.633994,2.974269,0.889338,3, 0.633994,0.442836,0.633994,3,1.145992,2.795, 0.633994,0.442836,0.633994,2.716787,1.257966,3, 0.633994,0.442836,0.633994,2.716787,1.257966,3, 0.633994,0.442836,0.633994,3,1.145992,2.795, 0.633994,0.442836,0.633994,3,1.5,2.54773, 0.633994,0.442836,0.633994,2.716787,1.257966,3, 0.633994,0.442836,0.633994,3,1.5,2.54773, 0.633994,0.442836,0.633994,2.54773,1.5,3, 0.633994,0.442836,0.633994,2.54773,1.5,3, 0.633994,0.442836,0.633994,3,1.5,2.54773, 0.633994,0.442836,0.633994,3,2.116861,2.116861, 0.633994,0.442836,0.633994,2.54773,1.5,3, 0.633994,0.442836,0.633994,3,2.116861,2.116861, 0.633994,0.442836,0.633994,2.419919,1.682983,3, 0.633994,0.442836,0.633994,2.419919,1.682983,3, 0.633994,0.442836,0.633994,3,2.116861,2.116861, 0.633994,0.442836,0.633994,2.31262,1.836598,3, 0.633994,0.442836,0.633994,2.31262,1.836598,3, 0.633994,0.442836,0.633994,3,2.116861,2.116861, 0.633994,0.442836,0.633994,2.214338,1.977306,3, 0.633994,0.442836,0.633994,2.214338,1.977306,3, 0.633994,0.442836,0.633994,3,2.116861,2.116861, 0.633994,0.442836,0.633994,2.116861,2.116861,3, 0.633994,0.442836,0.633994,2.116861,2.116861,3, 0.633994,0.442836,0.633994,3,2.116861,2.116861, 0.633994,0.442836,0.633994,2.012247,2.266632,3, 0.633994,0.442836,0.633994,2.012247,2.266632,3, 0.633994,0.442836,0.633994,3,2.116861,2.116861, 0.633994,0.442836,0.633994,3,2.795,1.64319, 0.633994,0.442836,0.633994,2.012247,2.266632,3, 0.633994,0.442836,0.633994,3,2.795,1.64319, 0.633994,0.442836,0.633994,1.890028,2.44161,3, 0.633994,0.442836,0.633994,1.890028,2.44161,3, 0.633994,0.442836,0.633994,3,2.795,1.64319, 0.633994,0.442836,0.633994,1.732234,2.667519,3, 0.633994,0.442836,0.633994,1.732234,2.667519,3, 0.633994,0.442836,0.633994,3,2.795,1.64319, 0.633994,0.442836,0.633994,1.5,3,3, 0.633994,0.442836,0.633994,1.5,3,3, 0.633994,0.442836,0.633994,3,2.795,1.64319, 0.633994,0.442836,0.633994,3,3,1.5, -0.57735,0.57735,-0.57735,1.295,0,0.205, -0.57735,0.57735,-0.57735,3,1.5,0, -0.57735,0.57735,-0.57735,1.5,0,0, -0.57735,0.57735,-0.57735,3,1.5,0, -0.57735,0.57735,-0.57735,1.295,0,0.205, -0.57735,0.57735,-0.57735,3,1.705,0.205, -0.57735,0.57735,-0.57735,3,1.705,0.205, -0.57735,0.57735,-0.57735,1.295,0,0.205, -0.57735,0.57735,-0.57735,0.75,0,0.75, -0.57735,0.57735,-0.57735,3,1.705,0.205, -0.57735,0.57735,-0.57735,0.75,0,0.75, -0.57735,0.57735,-0.57735,3,2.25,0.75, -0.57735,0.57735,-0.57735,3,2.25,0.75, -0.57735,0.57735,-0.57735,0.75,0,0.75, -0.57735,0.57735,-0.57735,0.205,0,1.295, -0.57735,0.57735,-0.57735,3,2.25,0.75, -0.57735,0.57735,-0.57735,0.205,0,1.295, -0.57735,0.57735,-0.57735,3,2.795,1.295, -0.57735,0.57735,-0.57735,3,2.795,1.295, -0.57735,0.57735,-0.57735,0.205,0,1.295, -0.57735,0.57735,-0.57735,0,0,1.5, -0.57735,0.57735,-0.57735,3,2.795,1.295, -0.57735,0.57735,-0.57735,0,0,1.5, -0.57735,0.57735,-0.57735,3,3,1.5, -0.57735,0.57735,-0.57735,3,3,1.5, -0.57735,0.57735,-0.57735,0,0,1.5, -0.57735,0.57735,-0.57735,0,1.5,3, -0.57735,0.57735,-0.57735,3,3,1.5, -0.57735,0.57735,-0.57735,0,1.5,3, -0.57735,0.57735,-0.57735,1.5,3,3, 0,0,-1,1.5,3,3, 0,0,-1,0,1.5,3, 0,0,-1,0.248866,1.748866,3, 0,0,1,1.5,3,3, 0,0,1,0.248866,1.748866,3, 0,0,1,0.43934,1.93934,3, 0,0,-1,1.5,3,3, 0,0,-1,0.43934,1.93934,3, 0,0,-1,0.600816,2.100816,3, 0,0,1,1.5,3,3, 0,0,1,0.600816,2.100816,3, 0,0,1,0.75,2.25,3, 0,0,1,1.5,3,3, 0,0,1,0.75,2.25,3, 0,0,1,0.899184,2.399184,3, 0,0,-1,1.5,3,3, 0,0,-1,0.899184,2.399184,3, 0,0,-1,1.06066,2.56066,3, 0,0,-1,1.5,3,3, 0,0,-1,1.06066,2.56066,3, 0,0,-1,1.251134,2.751134,3, 0.012176,0.99989,-0.008505,1.5,0,0, 0.012176,0.99989,-0.008505,1.974903,0,0.679903, 0.012176,0.99989,-0.008505,1.64319,0,0.205, 0.633994,-0.633994,-0.442836,1.974903,0,0.679903, 0.633994,-0.633994,-0.442836,1.5,0,0, 0.633994,-0.633994,-0.442836,3,1.5,0, 0.633994,-0.633994,-0.442836,1.974903,0,0.679903, 0.633994,-0.633994,-0.442836,3,1.5,0, 0.633994,-0.633994,-0.442836,2.116861,0,0.883139, 0.633994,-0.633994,-0.442836,2.116861,0,0.883139, 0.633994,-0.633994,-0.442836,3,1.5,0, 0.633994,-0.633994,-0.442836,2.54773,0,1.5, 0.633994,-0.633994,-0.442836,2.54773,0,1.5, 0.633994,-0.633994,-0.442836,3,1.5,0, 0.633994,-0.633994,-0.442836,2.649417,0,1.645583, 0.633994,-0.633994,-0.442836,2.649417,0,1.645583, 0.633994,-0.633994,-0.442836,3,1.5,0, 0.633994,-0.633994,-0.442836,2.795,0,1.854008, 0.633994,-0.633994,-0.442836,2.795,0,1.854008, 0.633994,-0.633994,-0.442836,3,1.5,0, 0.633994,-0.633994,-0.442836,3,0.205,1.854008, 0.633994,-0.633994,-0.442836,2.795,0,1.854008, 0.633994,-0.633994,-0.442836,3,0.205,1.854008, 0.633994,-0.633994,-0.442836,3,0,2.1475, -1,0,0,3,0.205,1.854008, -1,0,0,3,1.5,0, -1,0,0,3,0.883139,0.883139, -1,0,0,3,0.205,1.854008, -1,0,0,3,0.883139,0.883139, -1,0,0,3,0.45227,1.5, -1,0,0,3,0.883139,0.883139, -1,0,0,3,1.5,0, -1,0,0,3,1.35681,0.205, 0.57735,-0.57735,0.57735,2.3525,0,2.795, 0.57735,-0.57735,0.57735,2.360168,0.212668,3, 0.57735,-0.57735,0.57735,2.1475,0,3, 0.57735,-0.57735,0.57735,2.360168,0.212668,3, 0.57735,-0.57735,0.57735,2.3525,0,2.795, 0.57735,-0.57735,0.57735,2.57375,0,2.57375, 0.57735,-0.57735,0.57735,2.360168,0.212668,3, 0.57735,-0.57735,0.57735,2.57375,0,2.57375, 0.57735,-0.57735,0.57735,2.795,0,2.3525, 0.57735,-0.57735,0.57735,2.360168,0.212668,3, 0.57735,-0.57735,0.57735,2.795,0,2.3525, 0.57735,-0.57735,0.57735,3,0,2.1475, 0.57735,-0.57735,0.57735,2.360168,0.212668,3, 0.57735,-0.57735,0.57735,3,0,2.1475, 0.57735,-0.57735,0.57735,3,0.205,2.3525, 0.57735,-0.57735,0.57735,2.360168,0.212668,3, 0.57735,-0.57735,0.57735,3,0.205,2.3525, 0.57735,-0.57735,0.57735,3,0.42625,2.57375, 0.57735,-0.57735,0.57735,2.360168,0.212668,3, 0.57735,-0.57735,0.57735,3,0.42625,2.57375, 0.57735,-0.57735,0.57735,2.57375,0.42625,3, 0.57735,-0.57735,0.57735,2.57375,0.42625,3, 0.57735,-0.57735,0.57735,3,0.42625,2.57375, 0.57735,-0.57735,0.57735,3,0.6475,2.795, 0.57735,-0.57735,0.57735,2.57375,0.42625,3, 0.57735,-0.57735,0.57735,3,0.6475,2.795, 0.57735,-0.57735,0.57735,2.787332,0.639832,3, 0.57735,-0.57735,0.57735,2.787332,0.639832,3, 0.57735,-0.57735,0.57735,3,0.6475,2.795, 0.57735,-0.57735,0.57735,3,0.8525,3 }; static const struct gllist lament_model_iso_base_a_frame = { GL_N3F_V3F, GL_TRIANGLES, 858, lament_model_iso_base_a_data, 0 }; const struct gllist *lament_model_iso_base_a = &lament_model_iso_base_a_frame; static const float lament_model_iso_base_b_data[] = { 0.442836,0.633994,-0.633994,1.145992,3,0.205, 0.442836,0.633994,-0.633994,0.889338,2.974269,0, 0.442836,0.633994,-0.633994,0.8525,3,0, 0.442836,0.633994,-0.633994,0.889338,2.974269,0, 0.442836,0.633994,-0.633994,1.145992,3,0.205, 0.442836,0.633994,-0.633994,1.257966,2.716787,0, 0.442836,0.633994,-0.633994,1.257966,2.716787,0, 0.442836,0.633994,-0.633994,1.145992,3,0.205, 0.442836,0.633994,-0.633994,1.354417,3,0.350583, 0.442836,0.633994,-0.633994,1.257966,2.716787,0, 0.442836,0.633994,-0.633994,1.354417,3,0.350583, 0.442836,0.633994,-0.633994,1.5,2.54773,0, 0.442836,0.633994,-0.633994,1.5,2.54773,0, 0.442836,0.633994,-0.633994,1.354417,3,0.350583, 0.442836,0.633994,-0.633994,1.5,3,0.45227, 0.442836,0.633994,-0.633994,1.5,2.54773,0, 0.442836,0.633994,-0.633994,1.5,3,0.45227, 0.442836,0.633994,-0.633994,2.116861,3,0.883139, 0.442836,0.633994,-0.633994,1.5,2.54773,0, 0.442836,0.633994,-0.633994,2.116861,3,0.883139, 0.442836,0.633994,-0.633994,1.682983,2.419919,0, 0.442836,0.633994,-0.633994,1.682983,2.419919,0, 0.442836,0.633994,-0.633994,2.116861,3,0.883139, 0.442836,0.633994,-0.633994,1.836598,2.31262,0, 0.442836,0.633994,-0.633994,1.836598,2.31262,0, 0.442836,0.633994,-0.633994,2.116861,3,0.883139, 0.442836,0.633994,-0.633994,1.977306,2.214338,0, 0.442836,0.633994,-0.633994,1.977306,2.214338,0, 0.442836,0.633994,-0.633994,2.116861,3,0.883139, 0.442836,0.633994,-0.633994,2.116861,2.116861,0, 0.442836,0.633994,-0.633994,2.116861,2.116861,0, 0.442836,0.633994,-0.633994,2.116861,3,0.883139, 0.442836,0.633994,-0.633994,2.266632,2.012247,0, 0.442836,0.633994,-0.633994,2.266632,2.012247,0, 0.442836,0.633994,-0.633994,2.116861,3,0.883139, 0.442836,0.633994,-0.633994,2.320097,3,1.025097, 0.442836,0.633994,-0.633994,2.266632,2.012247,0, 0.442836,0.633994,-0.633994,2.320097,3,1.025097, 0.442836,0.633994,-0.633994,2.44161,1.890028,0, 0.442836,0.633994,-0.633994,2.44161,1.890028,0, 0.442836,0.633994,-0.633994,2.320097,3,1.025097, 0.442836,0.633994,-0.633994,2.795,3,1.35681, 0.442836,0.633994,-0.633994,2.44161,1.890028,0, 0.442836,0.633994,-0.633994,2.795,3,1.35681, 0.442836,0.633994,-0.633994,2.667519,1.732234,0, 0.442836,0.633994,-0.633994,2.667519,1.732234,0, 0.442836,0.633994,-0.633994,2.795,3,1.35681, 0.442836,0.633994,-0.633994,3,1.5,0, 0.442836,0.633994,-0.633994,3,1.5,0, 0.442836,0.633994,-0.633994,2.795,3,1.35681, 0.442836,0.633994,-0.633994,3,3,1.5, 0,0,-1,1.574493,0.74366,0, 0,0,-1,1.5,0,0, 0,0,-1,1.5,0.74,0, 0,0,-1,1.5,0,0, 0,0,-1,1.574493,0.74366,0, 0,0,-1,1.748866,0.248866,0, 0,0,-1,1.748866,0.248866,0, 0,0,-1,1.574493,0.74366,0, 0,0,-1,1.648269,0.754603,0, 0,1,0,1.5,3,1.5, 0,1,0,2.116861,3,0.883139, 0,1,0,1.5,3,0.45227, 0,0,-1,1.790839,0.797852,0, 0,0,-1,1.648269,0.754603,0, 0,0,-1,1.5,1.5,0, 0,0,-1,1.648269,0.754603,0, 0,0,-1,1.790839,0.797852,0, 0,0,-1,1.720616,0.772725,0, 0,1,0,1.5,3,2.795, 0,1,0,1.025097,3,2.320097, 0,1,0,1.35681,3,2.795, 0,1,0,0.883139,3,2.116861, 0,1,0,1.5,3,2.795, 0,1,0,1.5,3,1.5, 0,1,0,1.5,3,2.795, 0,1,0,0.883139,3,2.116861, 0,1,0,1.025097,3,2.320097, 0,0,-1,1.682983,2.419919,0, 0,0,-1,1.5,2.26,0, 0,0,-1,1.5,2.54773,0, 0,0,-1,1.5,2.26,0, 0,0,-1,1.682983,2.419919,0, 0,0,-1,1.574493,2.25634,0, 0,0,-1,1.574493,2.25634,0, 0,0,-1,1.682983,2.419919,0, 0,0,-1,1.648269,2.245397,0, 0,0,-1,0.212668,2.360168,0, 0,0,-1,0.025731,2.110662,0, 0,0,-1,0,2.1475,0, 0,0,-1,0.025731,2.110662,0, 0,0,-1,0.212668,2.360168,0, 0,0,-1,0.797852,1.790839,0, 0,0,-1,0.797852,1.790839,0, 0,0,-1,0.212668,2.360168,0, 0,0,-1,0.82974,1.858262,0, 0,0,-1,0.82974,1.858262,0, 0,0,-1,0.212668,2.360168,0, 0,0,-1,0.868083,1.922233,0, 0,0,-1,0.74,1.5,0, 0,0,-1,0.580081,1.317017,0, 0,0,-1,0.45227,1.5,0, 0,0,-1,0.580081,1.317017,0, 0,0,-1,0.74,1.5,0, 0,0,-1,0.74366,1.425507,0, 0,0,-1,0.580081,1.317017,0, 0,0,-1,0.74366,1.425507,0, 0,0,-1,0.754603,1.351731,0, 0,0,-1,2.037401,2.037401,0, 0,0,-1,2.131917,1.922233,0, 0,0,-1,1.5,1.5,0, 0,0,-1,2.131917,1.922233,0, 0,0,-1,2.037401,2.037401,0, 0,0,-1,2.087488,1.982139,0, 0,0,-1,1.720616,0.772725,0, 0,0,-1,1.748866,0.248866,0, 0,0,-1,1.648269,0.754603,0, 0,0,-1,1.748866,0.248866,0, 0,0,-1,1.720616,0.772725,0, 0,0,-1,1.790839,0.797852,0, 0,0,-1,1.748866,0.248866,0, 0,0,-1,1.790839,0.797852,0, 0,0,-1,1.93934,0.43934,0, 0,0,-1,2.17026,1.141738,0, 0,0,-1,2.399184,0.899184,0, 0,0,-1,2.131917,1.077767,0, 0,0,-1,2.399184,0.899184,0, 0,0,-1,2.17026,1.141738,0, 0,0,-1,2.202148,1.209161,0, 0,0,-1,2.399184,0.899184,0, 0,0,-1,2.202148,1.209161,0, 0,0,-1,2.56066,1.06066,0, 0,0,-1,2.25634,1.425507,0, 0,0,-1,2.751134,1.251134,0, 0,0,-1,2.245397,1.351731,0, 0,0,-1,2.751134,1.251134,0, 0,0,-1,2.25634,1.425507,0, 0,0,-1,2.26,1.5,0, 0,0,-1,2.751134,1.251134,0, 0,0,-1,2.26,1.5,0, 0,0,-1,3,1.5,0, 0,0,-1,0.42625,2.57375,0, 0,0,-1,0.868083,1.922233,0, 0,0,-1,0.212668,2.360168,0, 0,0,-1,0.868083,1.922233,0, 0,0,-1,0.42625,2.57375,0, 0,0,-1,0.912512,1.982139,0, 0,0,-1,0.912512,1.982139,0, 0,0,-1,0.42625,2.57375,0, 0,0,-1,0.962599,2.037401,0, -1,0,0,0,2.1475,0, -1,0,0,0,1.854008,0.205, -1,0,0,0,2.1475,0.205, 0,0,-1,2.245397,1.351731,0, 0,0,-1,2.202148,1.209161,0, 0,0,-1,1.5,1.5,0, 0,0,-1,2.202148,1.209161,0, 0,0,-1,2.245397,1.351731,0, 0,0,-1,2.227275,1.279384,0, 0,0,-1,1.141738,2.17026,0, 0,0,-1,1.5,1.5,0, 0,0,-1,1.077767,2.131917,0, 0,0,-1,1.5,1.5,0, 0,0,-1,1.141738,2.17026,0, 0,0,-1,1.209161,2.202148,0, 0,0,-1,2.131917,1.077767,0, 0,0,-1,2.037401,0.962599,0, 0,0,-1,1.5,1.5,0, 0,0,-1,2.037401,0.962599,0, 0,0,-1,2.131917,1.077767,0, 0,0,-1,2.087488,1.017861,0, 0,0,-1,2.037401,0.962599,0, 0,0,-1,1.922233,0.868083,0, 0,0,-1,1.5,1.5,0, 0,0,-1,1.922233,0.868083,0, 0,0,-1,2.037401,0.962599,0, 0,0,-1,1.982139,0.912512,0, 0,0,-1,0.912512,1.982139,0, 0,0,-1,1.5,1.5,0, 0,0,-1,0.868083,1.922233,0, 0,0,-1,1.5,1.5,0, 0,0,-1,0.912512,1.982139,0, 0,0,-1,0.962599,2.037401,0, 0,0,-1,0.772725,1.720616,0, 0,0,-1,1.5,1.5,0, 0,0,-1,0.754603,1.648269,0, 0,0,-1,1.5,1.5,0, 0,0,-1,0.772725,1.720616,0, 0,0,-1,0.797852,1.790839,0, 0,1,0,0.350583,3,1.354417, 0,1,0,1.5,3,1.5, 0,1,0,0.8525,3,0.8525, 0,1,0,1.5,3,1.5, 0,1,0,0.350583,3,1.354417, 0,1,0,0.45227,3,1.5, 0,0,-1,1.5,1.5,0, 0,0,-1,0.772725,1.279384,0, 0,0,-1,0.754603,1.351731,0, 0,0,-1,0.772725,1.279384,0, 0,0,-1,1.5,1.5,0, 0,0,-1,0.797852,1.209161,0, 0,0,-1,1.648269,2.245397,0, 0,0,-1,1.790839,2.202148,0, 0,0,-1,1.5,1.5,0, 0,0,-1,1.790839,2.202148,0, 0,0,-1,1.648269,2.245397,0, 0,0,-1,1.720616,2.227275,0, 0,1,0,1.5,3,2.795, 0,1,0,2.1475,3,2.1475, 0,1,0,1.5,3,1.5, 0,1,0,1.5,3,2.795, 0,1,0,2.25,3,2.25, 0,1,0,2.1475,3,2.1475, 0,1,0,2.25,3,2.25, 0,1,0,1.5,3,2.795, 0,1,0,1.705,3,2.795, 0,1,0,0.6475,3,0.205, 0,1,0,1.354417,3,0.350583, 0,1,0,1.145992,3,0.205, 0,1,0,1.354417,3,0.350583, 0,1,0,0.6475,3,0.205, 0,1,0,0.42625,3,0.42625, 0,1,0,1.354417,3,0.350583, 0,1,0,0.42625,3,0.42625, 0,1,0,0.8525,3,0.8525, 0,1,0,2.1475,3,2.1475, 0,1,0,2.795,3,1.5, 0,1,0,1.5,3,1.5, 0,1,0,1.5,3,1.5, 0,1,0,2.320097,3,1.025097, 0,1,0,2.116861,3,0.883139, 0,1,0,2.320097,3,1.025097, 0,1,0,1.5,3,1.5, 0,1,0,2.795,3,1.5, 0,0,-1,1.922233,2.131917,0, 0,0,-1,2.037401,2.037401,0, 0,0,-1,1.5,1.5,0, 0,0,-1,2.037401,2.037401,0, 0,0,-1,1.922233,2.131917,0, 0,0,-1,1.982139,2.087488,0, 0,0,-1,1.648269,0.754603,0, 0,0,-1,1.5,0.74,0, 0,0,-1,1.5,1.5,0, 0,0,-1,1.5,0.74,0, 0,0,-1,1.648269,0.754603,0, 0,0,-1,1.574493,0.74366,0, 0,1,0,0.205,3,0.6475, 0,1,0,0.8525,3,0.8525, 0,1,0,0.42625,3,0.42625, 0,1,0,0.8525,3,0.8525, 0,1,0,0.205,3,0.6475, 0,1,0,0.205,3,1.145992, 0,1,0,0.8525,3,0.8525, 0,1,0,0.205,3,1.145992, 0,1,0,0.350583,3,1.354417, 0,0,-1,1.5,1.5,0, 0,0,-1,1.425507,0.74366,0, 0,0,-1,1.351731,0.754603,0, 0,0,-1,1.425507,0.74366,0, 0,0,-1,1.5,1.5,0, 0,0,-1,1.5,0.74,0, 0,1,0,2.1475,3,2.1475, 0,1,0,2.795,3,1.705, 0,1,0,2.795,3,1.5, 0,1,0,2.795,3,1.705, 0,1,0,2.1475,3,2.1475, 0,1,0,2.25,3,2.25, 0,1,0,2.795,3,1.5, 0,1,0,2.795,3,1.35681, 0,1,0,2.320097,3,1.025097, 0,0,-1,1.5,1.5,0, 0,0,-1,1.141738,0.82974,0, 0,0,-1,1.077767,0.868083,0, 0,0,-1,1.141738,0.82974,0, 0,0,-1,1.5,1.5,0, 0,0,-1,1.209161,0.797852,0, 0,1,0,0.8525,3,0.8525, 0,1,0,1.5,3,0.45227, 0,1,0,1.354417,3,0.350583, 0,1,0,1.5,3,0.45227, 0,1,0,0.8525,3,0.8525, 0,1,0,1.5,3,1.5, 0,0,-1,1.017861,2.087488,0, 0,0,-1,1.5,1.5,0, 0,0,-1,0.962599,2.037401,0, 0,0,-1,1.5,1.5,0, 0,0,-1,1.017861,2.087488,0, 0,0,-1,1.077767,2.131917,0, 0,1,0,0.883139,3,2.116861, 0,1,0,1.5,3,1.5, 0,1,0,0.45227,3,1.5, 0,1,0,0.205,3,1.145992, 0,1,0,0.205,3,0.6475, 0,1,0,0,3,0.8525, 0,0,-1,1.5,1.5,0, 0,0,-1,0.74366,1.425507,0, 0,0,-1,0.74,1.5,0, 0,0,-1,0.74366,1.425507,0, 0,0,-1,1.5,1.5,0, 0,0,-1,0.754603,1.351731,0, 0,0,-1,1.279384,2.227275,0, 0,0,-1,1.5,1.5,0, 0,0,-1,1.209161,2.202148,0, 0,0,-1,1.5,1.5,0, 0,0,-1,1.279384,2.227275,0, 0,0,-1,1.351731,2.245397,0, -1,0,0,0,1.5,0.45227, -1,0,0,0,0.883139,0.883139, -1,0,0,0,1.5,1.5, 0,0,-1,1.790839,2.202148,0, 0,0,-1,1.922233,2.131917,0, 0,0,-1,1.5,1.5,0, 0,0,-1,1.922233,2.131917,0, 0,0,-1,1.790839,2.202148,0, 0,0,-1,1.858262,2.17026,0, -0.633994,-0.442836,-0.633994,0,0.205,1.35681, -0.633994,-0.442836,-0.633994,1.5,0,0, -0.633994,-0.442836,-0.633994,0,0,1.5, -0.633994,-0.442836,-0.633994,1.5,0,0, -0.633994,-0.442836,-0.633994,0,0.205,1.35681, -0.633994,-0.442836,-0.633994,1.267766,0.332481,0, -0.633994,-0.442836,-0.633994,1.267766,0.332481,0, -0.633994,-0.442836,-0.633994,0,0.205,1.35681, -0.633994,-0.442836,-0.633994,0,0.883139,0.883139, -0.633994,-0.442836,-0.633994,1.267766,0.332481,0, -0.633994,-0.442836,-0.633994,0,0.883139,0.883139, -0.633994,-0.442836,-0.633994,1.109972,0.55839,0, -0.633994,-0.442836,-0.633994,1.109972,0.55839,0, -0.633994,-0.442836,-0.633994,0,0.883139,0.883139, -0.633994,-0.442836,-0.633994,0.987753,0.733368,0, -0.633994,-0.442836,-0.633994,0.987753,0.733368,0, -0.633994,-0.442836,-0.633994,0,0.883139,0.883139, -0.633994,-0.442836,-0.633994,0.883139,0.883139,0, -0.633994,-0.442836,-0.633994,0.883139,0.883139,0, -0.633994,-0.442836,-0.633994,0,0.883139,0.883139, -0.633994,-0.442836,-0.633994,0.785662,1.022694,0, -0.633994,-0.442836,-0.633994,0.785662,1.022694,0, -0.633994,-0.442836,-0.633994,0,0.883139,0.883139, -0.633994,-0.442836,-0.633994,0,1.5,0.45227, -0.633994,-0.442836,-0.633994,0.785662,1.022694,0, -0.633994,-0.442836,-0.633994,0,1.5,0.45227, -0.633994,-0.442836,-0.633994,0.68738,1.163402,0, -0.633994,-0.442836,-0.633994,0.68738,1.163402,0, -0.633994,-0.442836,-0.633994,0,1.5,0.45227, -0.633994,-0.442836,-0.633994,0.580081,1.317017,0, -0.633994,-0.442836,-0.633994,0.580081,1.317017,0, -0.633994,-0.442836,-0.633994,0,1.5,0.45227, -0.633994,-0.442836,-0.633994,0.45227,1.5,0, -0.633994,-0.442836,-0.633994,0.45227,1.5,0, -0.633994,-0.442836,-0.633994,0,1.5,0.45227, -0.633994,-0.442836,-0.633994,0,1.854008,0.205, -0.633994,-0.442836,-0.633994,0.45227,1.5,0, -0.633994,-0.442836,-0.633994,0,1.854008,0.205, -0.633994,-0.442836,-0.633994,0.283213,1.742034,0, -0.633994,-0.442836,-0.633994,0.283213,1.742034,0, -0.633994,-0.442836,-0.633994,0,1.854008,0.205, -0.633994,-0.442836,-0.633994,0.025731,2.110662,0, -0.633994,-0.442836,-0.633994,0.025731,2.110662,0, -0.633994,-0.442836,-0.633994,0,1.854008,0.205, -0.633994,-0.442836,-0.633994,0,2.1475,0, 0,0,-1,1.836598,2.31262,0, 0,0,-1,1.858262,2.17026,0, 0,0,-1,1.790839,2.202148,0, 0,0,-1,1.858262,2.17026,0, 0,0,-1,1.836598,2.31262,0, 0,0,-1,1.977306,2.214338,0, 0,0,-1,1.858262,2.17026,0, 0,0,-1,1.977306,2.214338,0, 0,0,-1,1.922233,2.131917,0, 0,0,-1,1.982139,0.912512,0, 0,0,-1,2.100816,0.600816,0, 0,0,-1,1.922233,0.868083,0, 0,0,-1,2.100816,0.600816,0, 0,0,-1,1.982139,0.912512,0, 0,0,-1,2.037401,0.962599,0, 0,0,-1,2.100816,0.600816,0, 0,0,-1,2.037401,0.962599,0, 0,0,-1,2.25,0.75,0, 0,0,-1,2.087488,1.017861,0, 0,0,-1,2.25,0.75,0, 0,0,-1,2.037401,0.962599,0, 0,0,-1,2.25,0.75,0, 0,0,-1,2.087488,1.017861,0, 0,0,-1,2.131917,1.077767,0, 0,0,-1,2.25,0.75,0, 0,0,-1,2.131917,1.077767,0, 0,0,-1,2.399184,0.899184,0, 0,0,-1,2.266632,2.012247,0, 0,0,-1,2.17026,1.858262,0, 0,0,-1,2.131917,1.922233,0, 0,0,-1,2.17026,1.858262,0, 0,0,-1,2.266632,2.012247,0, 0,0,-1,2.202148,1.790839,0, 0,0,-1,2.202148,1.790839,0, 0,0,-1,2.266632,2.012247,0, 0,0,-1,2.44161,1.890028,0, 0,0,-1,2.44161,1.890028,0, 0,0,-1,2.227275,1.720616,0, 0,0,-1,2.202148,1.790839,0, 0,0,-1,2.227275,1.720616,0, 0,0,-1,2.44161,1.890028,0, 0,0,-1,2.245397,1.648269,0, 0,0,-1,2.245397,1.648269,0, 0,0,-1,2.44161,1.890028,0, 0,0,-1,2.667519,1.732234,0, 0,0,-1,0.868083,1.077767,0, 0,0,-1,0.883139,0.883139,0, 0,0,-1,0.785662,1.022694,0, 0,0,-1,0.883139,0.883139,0, 0,0,-1,0.868083,1.077767,0, 0,0,-1,0.912512,1.017861,0, 0,0,-1,0.883139,0.883139,0, 0,0,-1,0.912512,1.017861,0, 0,0,-1,0.962599,0.962599,0, 0,0,-1,0.962599,0.962599,0, 0,0,-1,0.987753,0.733368,0, 0,0,-1,0.883139,0.883139,0, 0,0,-1,0.987753,0.733368,0, 0,0,-1,0.962599,0.962599,0, 0,0,-1,1.017861,0.912512,0, 0,0,-1,0.987753,0.733368,0, 0,0,-1,1.017861,0.912512,0, 0,0,-1,1.077767,0.868083,0, 0,0,-1,1.5,2.54773,0, 0,0,-1,1.351731,2.245397,0, 0,0,-1,1.257966,2.716787,0, 0,0,-1,1.351731,2.245397,0, 0,0,-1,1.5,2.54773,0, 0,0,-1,1.425507,2.25634,0, 0,0,-1,1.425507,2.25634,0, 0,0,-1,1.5,2.54773,0, 0,0,-1,1.5,2.26,0, 0,0,-1,1.077767,0.868083,0, 0,0,-1,1.109972,0.55839,0, 0,0,-1,0.987753,0.733368,0, 0,0,-1,1.109972,0.55839,0, 0,0,-1,1.077767,0.868083,0, 0,0,-1,1.141738,0.82974,0, 0,0,-1,1.109972,0.55839,0, 0,0,-1,1.141738,0.82974,0, 0,0,-1,1.209161,0.797852,0, 0,0,-1,2.667519,1.732234,0, 0,0,-1,2.25634,1.574493,0, 0,0,-1,2.245397,1.648269,0, 0,0,-1,2.25634,1.574493,0, 0,0,-1,2.667519,1.732234,0, 0,0,-1,2.26,1.5,0, 0,0,-1,2.26,1.5,0, 0,0,-1,2.667519,1.732234,0, 0,0,-1,3,1.5,0, 0,0,-1,2.245397,1.648269,0, 0,0,-1,2.26,1.5,0, 0,0,-1,1.5,1.5,0, 0,0,-1,2.26,1.5,0, 0,0,-1,2.245397,1.648269,0, 0,0,-1,2.25634,1.574493,0, 0,0,-1,1.858262,0.82974,0, 0,0,-1,1.93934,0.43934,0, 0,0,-1,1.790839,0.797852,0, 0,0,-1,1.93934,0.43934,0, 0,0,-1,1.858262,0.82974,0, 0,0,-1,1.922233,0.868083,0, 0,0,-1,1.93934,0.43934,0, 0,0,-1,1.922233,0.868083,0, 0,0,-1,2.100816,0.600816,0, 0,0,-1,1.682983,2.419919,0, 0,0,-1,1.720616,2.227275,0, 0,0,-1,1.648269,2.245397,0, 0,0,-1,1.720616,2.227275,0, 0,0,-1,1.682983,2.419919,0, 0,0,-1,1.836598,2.31262,0, 0,0,-1,1.720616,2.227275,0, 0,0,-1,1.836598,2.31262,0, 0,0,-1,1.790839,2.202148,0, 0,0,-1,1.922233,0.868083,0, 0,0,-1,1.790839,0.797852,0, 0,0,-1,1.5,1.5,0, 0,0,-1,1.790839,0.797852,0, 0,0,-1,1.922233,0.868083,0, 0,0,-1,1.858262,0.82974,0, 0,0,-1,0.74366,1.574493,0, 0,0,-1,1.5,1.5,0, 0,0,-1,0.74,1.5,0, 0,0,-1,1.5,1.5,0, 0,0,-1,0.74366,1.574493,0, 0,0,-1,0.754603,1.648269,0, 0,0,-1,1.351731,0.754603,0, 0,0,-1,1.5,0,0, 0,0,-1,1.267766,0.332481,0, 0,0,-1,1.5,0,0, 0,0,-1,1.351731,0.754603,0, 0,0,-1,1.425507,0.74366,0, 0,0,-1,1.5,0,0, 0,0,-1,1.425507,0.74366,0, 0,0,-1,1.5,0.74,0, 0.57735,-0.57735,0.57735,1.5,0,0, 0.57735,-0.57735,0.57735,0,0.205,1.705, 0.57735,-0.57735,0.57735,0,0,1.5, 0.57735,-0.57735,0.57735,0,0.205,1.705, 0.57735,-0.57735,0.57735,1.5,0,0, 0.57735,-0.57735,0.57735,1.748866,0.248866,0, 0.57735,-0.57735,0.57735,0,0.205,1.705, 0.57735,-0.57735,0.57735,1.748866,0.248866,0, 0.57735,-0.57735,0.57735,0,0.75,2.25, 0.57735,-0.57735,0.57735,0,0.75,2.25, 0.57735,-0.57735,0.57735,1.748866,0.248866,0, 0.57735,-0.57735,0.57735,1.93934,0.43934,0, 0.57735,-0.57735,0.57735,0,0.75,2.25, 0.57735,-0.57735,0.57735,1.93934,0.43934,0, 0.57735,-0.57735,0.57735,2.100816,0.600816,0, 0.57735,-0.57735,0.57735,0,0.75,2.25, 0.57735,-0.57735,0.57735,2.100816,0.600816,0, 0.57735,-0.57735,0.57735,2.25,0.75,0, 0.57735,-0.57735,0.57735,0,0.75,2.25, 0.57735,-0.57735,0.57735,2.25,0.75,0, 0.57735,-0.57735,0.57735,2.399184,0.899184,0, 0.57735,-0.57735,0.57735,0,0.75,2.25, 0.57735,-0.57735,0.57735,2.399184,0.899184,0, 0.57735,-0.57735,0.57735,0,1.295,2.795, 0.57735,-0.57735,0.57735,0,1.295,2.795, 0.57735,-0.57735,0.57735,2.399184,0.899184,0, 0.57735,-0.57735,0.57735,2.56066,1.06066,0, 0.57735,-0.57735,0.57735,0,1.295,2.795, 0.57735,-0.57735,0.57735,2.56066,1.06066,0, 0.57735,-0.57735,0.57735,2.751134,1.251134,0, 0.57735,-0.57735,0.57735,0,1.295,2.795, 0.57735,-0.57735,0.57735,2.751134,1.251134,0, 0.57735,-0.57735,0.57735,3,1.5,0, 0.57735,-0.57735,0.57735,0,1.295,2.795, 0.57735,-0.57735,0.57735,3,1.5,0, 0.57735,-0.57735,0.57735,0,1.5,3, 0.57735,-0.57735,0.57735,0,1.5,3, 0.57735,-0.57735,0.57735,3,1.5,0, 0.57735,-0.57735,0.57735,3,3,1.5, 0.57735,-0.57735,0.57735,0,1.5,3, 0.57735,-0.57735,0.57735,3,3,1.5, 0.57735,-0.57735,0.57735,1.705,3,2.795, 0.627963,0.459701,0.627963,1.705,3,2.795, 0.713615,0.660796,0.232598,3,3,1.5, 0,1,0,2.25,3,2.25, 0,1,0,2.25,3,2.25, 0.713615,0.660796,0.232598,3,3,1.5, 0,1,0,2.795,3,1.705, 0.57735,-0.57735,0.57735,1.5,3,3, 0.57735,-0.57735,0.57735,0,1.5,3, 0.57735,-0.57735,0.57735,1.705,3,2.795, -0.633994,0.633994,0.442836,1.5,3,3, -0.633994,0.633994,0.442836,0,1.64319,2.795, -0.633994,0.633994,0.442836,0,1.5,3, -0.633994,0.633994,0.442836,0,1.64319,2.795, -0.633994,0.633994,0.442836,1.5,3,3, -0.633994,0.633994,0.442836,0,2.116861,2.116861, -0.633994,0.633994,0.442836,0,2.116861,2.116861, -0.633994,0.633994,0.442836,1.5,3,3, -0.633994,0.633994,0.442836,0,2.54773,1.5, -0.633994,0.633994,0.442836,0,2.54773,1.5, -0.633994,0.633994,0.442836,1.5,3,3, -0.633994,0.633994,0.442836,0,2.795,1.145992, -0.633994,0.633994,0.442836,0,2.795,1.145992, -0.633994,0.633994,0.442836,1.5,3,3, -0.633994,0.633994,0.442836,1.35681,3,2.795, -0.633994,0.633994,0.442836,1.35681,3,2.795, -0.633994,0.633994,0.442836,0,3,0.8525, -0.633994,0.633994,0.442836,0,2.795,1.145992, 0,1,0,0,3,0.8525, 0,1,0,1.35681,3,2.795, 0,1,0,1.025097,3,2.320097, 0,1,0,0,3,0.8525, 0,1,0,1.025097,3,2.320097, 0,1,0,0.883139,3,2.116861, 0,1,0,0,3,0.8525, 0,1,0,0.883139,3,2.116861, 0,1,0,0.45227,3,1.5, 0,1,0,0,3,0.8525, 0,1,0,0.45227,3,1.5, 0,1,0,0.350583,3,1.354417, 0,-1,0,0,3,0.8525, 0,-1,0,0.350583,3,1.354417, 0,-1,0,0.205,3,1.145992, -1,0,0,0,1.5,2.795, -1,0,0,0,1.295,2.795, -1,0,0,0,1.5,3, -1,0,0,0,2.54773,1.5, -1,0,0,0,2.57375,0.42625, -1,0,0,0,1.5,1.5, -1,0,0,0,2.57375,0.42625, -1,0,0,0,2.54773,1.5, -1,0,0,0,2.795,1.145992, -1,0,0,0,2.57375,0.42625, -1,0,0,0,2.795,1.145992, -1,0,0,0,2.795,0.6475, -0.836014,0.387995,-0.387995,0,2.795,0.6475, -0.903879,0.350707,0.244964,0,2.795,1.145992, -1,0,0,0,2.795,0.8525, -1,0,0,0,1.64319,2.795, -1,0,0,0,1.5,2.795, -1,0,0,0,1.5,3, -1,0,0,0,3,0.8525, -1,0,0,0,2.795,0.8525, -1,0,0,0,2.795,1.145992, -1,0,0,0,1.64319,2.795, -1,0,0,0,1.5,1.5, -1,0,0,0,1.5,2.795, -1,0,0,0,1.5,1.5, -1,0,0,0,1.64319,2.795, -1,0,0,0,2.116861,2.116861, -1,0,0,0,2.57375,0.42625, -1,0,0,0,1.5,0.45227, -1,0,0,0,1.5,1.5, -1,0,0,0,1.5,0.45227, -1,0,0,0,2.57375,0.42625, -1,0,0,0,1.854008,0.205, -1,0,0,0,1.854008,0.205, -1,0,0,0,2.57375,0.42625, -1,0,0,0,2.1475,0.205, -1,0,0,0,2.1475,0.205, -1,0,0,0,2.57375,0.42625, -1,0,0,0,2.3525,0.205, -1,0,0,0,0.205,1.705, -1,0,0,0,0.205,1.5, -1,0,0,0,0,1.5, -1,0,0,0,3,0.8525, -1,0,0,0,2.795,0.6475, -1,0,0,0,2.795,0.8525, 0,0,-1,1.209161,0.797852,0, 0,0,-1,1.267766,0.332481,0, 0,0,-1,1.109972,0.55839,0, 0,0,-1,1.267766,0.332481,0, 0,0,-1,1.209161,0.797852,0, 0,0,-1,1.279384,0.772725,0, 0,0,-1,1.267766,0.332481,0, 0,0,-1,1.279384,0.772725,0, 0,0,-1,1.351731,0.754603,0, 0,0,-1,1.257966,2.716787,0, 0,0,-1,1.209161,2.202148,0, 0,0,-1,0.889338,2.974269,0, 0,0,-1,1.209161,2.202148,0, 0,0,-1,1.257966,2.716787,0, 0,0,-1,1.279384,2.227275,0, 0,0,-1,1.279384,2.227275,0, 0,0,-1,1.257966,2.716787,0, 0,0,-1,1.351731,2.245397,0, 0,0,-1,1.5,1.5,0, 0,0,-1,1.017861,0.912512,0, 0,0,-1,0.962599,0.962599,0, 0,0,-1,1.017861,0.912512,0, 0,0,-1,1.5,1.5,0, 0,0,-1,1.077767,0.868083,0, 0,0,-1,1.5,1.5,0, 0,0,-1,0.912512,1.017861,0, 0,0,-1,0.868083,1.077767,0, 0,0,-1,0.912512,1.017861,0, 0,0,-1,1.5,1.5,0, 0,0,-1,0.962599,0.962599,0, 0,0,-1,2.116861,2.116861,0, 0,0,-1,2.087488,1.982139,0, 0,0,-1,2.037401,2.037401,0, 0,0,-1,2.087488,1.982139,0, 0,0,-1,2.116861,2.116861,0, 0,0,-1,2.131917,1.922233,0, 0,0,-1,2.131917,1.922233,0, 0,0,-1,2.116861,2.116861,0, 0,0,-1,2.266632,2.012247,0, 0,1,0,2.795,3,1.705, 0,1,0,3,3,1.5, 0,1,0,2.795,3,1.5, 0,0,-1,0.754603,1.351731,0, 0,0,-1,0.68738,1.163402,0, 0,0,-1,0.580081,1.317017,0, 0,0,-1,0.68738,1.163402,0, 0,0,-1,0.754603,1.351731,0, 0,0,-1,0.772725,1.279384,0, 0,0,-1,0.68738,1.163402,0, 0,0,-1,0.772725,1.279384,0, 0,0,-1,0.797852,1.209161,0, 0,0,-1,0.754603,1.648269,0, 0,0,-1,0.45227,1.5,0, 0,0,-1,0.283213,1.742034,0, 0,0,-1,0.45227,1.5,0, 0,0,-1,0.754603,1.648269,0, 0,0,-1,0.74366,1.574493,0, 0,0,-1,0.45227,1.5,0, 0,0,-1,0.74366,1.574493,0, 0,0,-1,0.74,1.5,0, 0,0,-1,2.227275,1.279384,0, 0,0,-1,2.56066,1.06066,0, 0,0,-1,2.202148,1.209161,0, 0,0,-1,2.56066,1.06066,0, 0,0,-1,2.227275,1.279384,0, 0,0,-1,2.245397,1.351731,0, 0,0,-1,2.56066,1.06066,0, 0,0,-1,2.245397,1.351731,0, 0,0,-1,2.751134,1.251134,0, 0,0,-1,2.26,1.5,0, 0,0,-1,2.245397,1.351731,0, 0,0,-1,1.5,1.5,0, 0,0,-1,2.245397,1.351731,0, 0,0,-1,2.26,1.5,0, 0,0,-1,2.25634,1.425507,0, 0,0,-1,1.5,1.5,0, 0,0,-1,0.82974,1.141738,0, 0,0,-1,0.797852,1.209161,0, 0,0,-1,0.82974,1.141738,0, 0,0,-1,1.5,1.5,0, 0,0,-1,0.868083,1.077767,0, 0,0,-1,2.131917,1.922233,0, 0,0,-1,2.202148,1.790839,0, 0,0,-1,1.5,1.5,0, 0,0,-1,2.202148,1.790839,0, 0,0,-1,2.131917,1.922233,0, 0,0,-1,2.17026,1.858262,0, 0,0,-1,0.8525,3,0, 0,0,-1,1.077767,2.131917,0, 0,0,-1,0.639832,2.787332,0, 0,0,-1,1.077767,2.131917,0, 0,0,-1,0.8525,3,0, 0,0,-1,0.889338,2.974269,0, 0,0,-1,1.077767,2.131917,0, 0,0,-1,0.889338,2.974269,0, 0,0,-1,1.141738,2.17026,0, 0,0,-1,1.141738,2.17026,0, 0,0,-1,0.889338,2.974269,0, 0,0,-1,1.209161,2.202148,0, 0,0,-1,2.202148,1.790839,0, 0,0,-1,2.245397,1.648269,0, 0,0,-1,1.5,1.5,0, 0,0,-1,2.245397,1.648269,0, 0,0,-1,2.202148,1.790839,0, 0,0,-1,2.227275,1.720616,0, 0,0,-1,1.425507,2.25634,0, 0,0,-1,1.5,1.5,0, 0,0,-1,1.351731,2.245397,0, 0,0,-1,1.5,1.5,0, 0,0,-1,1.425507,2.25634,0, 0,0,-1,1.5,2.26,0, 0,1,0,3,3,1.5, 0,1,0,2.795,3,1.35681, 0,1,0,2.795,3,1.5, -0.57735,0.57735,-0.57735,0,2.3525,0.205, -0.57735,0.57735,-0.57735,0.212668,2.360168,0, -0.57735,0.57735,-0.57735,0,2.1475,0, -0.57735,0.57735,-0.57735,0.212668,2.360168,0, -0.57735,0.57735,-0.57735,0,2.3525,0.205, -0.57735,0.57735,-0.57735,0.42625,2.57375,0, -0.57735,0.57735,-0.57735,0.42625,2.57375,0, -0.57735,0.57735,-0.57735,0,2.3525,0.205, -0.57735,0.57735,-0.57735,0.639832,2.787332,0, -0.57735,0.57735,-0.57735,0.639832,2.787332,0, -0.57735,0.57735,-0.57735,0,2.3525,0.205, -0.57735,0.57735,-0.57735,0.8525,3,0, -0.57735,0.57735,-0.57735,0.8525,3,0, -0.57735,0.57735,-0.57735,0,2.3525,0.205, -0.57735,0.57735,-0.57735,0.6475,3,0.205, -0.57735,0.57735,-0.57735,0.6475,3,0.205, -0.57735,0.57735,-0.57735,0,2.3525,0.205, -0.57735,0.57735,-0.57735,0,2.57375,0.42625, -0.57735,0.57735,-0.57735,0.6475,3,0.205, -0.57735,0.57735,-0.57735,0,2.57375,0.42625, -0.57735,0.57735,-0.57735,0.42625,3,0.42625, -0.57735,0.57735,-0.57735,0.42625,3,0.42625, -0.57735,0.57735,-0.57735,0,2.57375,0.42625, -0.57735,0.57735,-0.57735,0,2.795,0.6475, -0.57735,0.57735,-0.57735,0.42625,3,0.42625, -0.57735,0.57735,-0.57735,0,2.795,0.6475, -0.57735,0.57735,-0.57735,0.205,3,0.6475, -0.57735,0.57735,-0.57735,0.205,3,0.6475, -0.57735,0.57735,-0.57735,0,2.795,0.6475, -0.57735,0.57735,-0.57735,0,3,0.8525, 0,0,-1,1.5,1.5,0, 0,0,-1,1.279384,0.772725,0, 0,0,-1,1.209161,0.797852,0, 0,0,-1,1.279384,0.772725,0, 0,0,-1,1.5,1.5,0, 0,0,-1,1.351731,0.754603,0, 0,0,-1,0.82974,1.858262,0, 0,0,-1,1.5,1.5,0, 0,0,-1,0.797852,1.790839,0, 0,0,-1,1.5,1.5,0, 0,0,-1,0.82974,1.858262,0, 0,0,-1,0.868083,1.922233,0, 0,0,-1,0.797852,1.790839,0, 0,0,-1,0.283213,1.742034,0, 0,0,-1,0.025731,2.110662,0, 0,0,-1,0.283213,1.742034,0, 0,0,-1,0.797852,1.790839,0, 0,0,-1,0.772725,1.720616,0, 0,0,-1,0.283213,1.742034,0, 0,0,-1,0.772725,1.720616,0, 0,0,-1,0.754603,1.648269,0, 0,0,-1,1.977306,2.214338,0, 0,0,-1,1.982139,2.087488,0, 0,0,-1,1.922233,2.131917,0, 0,0,-1,1.982139,2.087488,0, 0,0,-1,1.977306,2.214338,0, 0,0,-1,2.116861,2.116861,0, 0,0,-1,1.982139,2.087488,0, 0,0,-1,2.116861,2.116861,0, 0,0,-1,2.037401,2.037401,0, 0,0,-1,0.639832,2.787332,0, 0,0,-1,0.962599,2.037401,0, 0,0,-1,0.42625,2.57375,0, 0,0,-1,0.962599,2.037401,0, 0,0,-1,0.639832,2.787332,0, 0,0,-1,1.017861,2.087488,0, 0,0,-1,1.017861,2.087488,0, 0,0,-1,0.639832,2.787332,0, 0,0,-1,1.077767,2.131917,0, 0,1,0,0.6475,3,0.205, 0,1,0,1.145992,3,0.205, 0,1,0,0.8525,3,0, 0,0,-1,1.574493,2.25634,0, 0,0,-1,1.5,1.5,0, 0,0,-1,1.5,2.26,0, 0,0,-1,1.5,1.5,0, 0,0,-1,1.574493,2.25634,0, 0,0,-1,1.648269,2.245397,0, -1,0,0,0,0.205,1.5, -1,0,0,0,0.205,1.35681, -1,0,0,0,0,1.5, 0,0,-1,0.797852,1.209161,0, 0,0,-1,0.785662,1.022694,0, 0,0,-1,0.68738,1.163402,0, 0,0,-1,0.785662,1.022694,0, 0,0,-1,0.797852,1.209161,0, 0,0,-1,0.82974,1.141738,0, 0,0,-1,0.785662,1.022694,0, 0,0,-1,0.82974,1.141738,0, 0,0,-1,0.868083,1.077767,0, 0,0,-1,2.202148,1.209161,0, 0,0,-1,2.131917,1.077767,0, 0,0,-1,1.5,1.5,0, 0,0,-1,2.131917,1.077767,0, 0,0,-1,2.202148,1.209161,0, 0,0,-1,2.17026,1.141738,0, 0,1,0,1.5,3,3, 0,1,0,1.5,3,2.795, 0,1,0,1.35681,3,2.795, -1,0,0,0,0.205,1.5, -1,0,0,0,0.883139,0.883139, -1,0,0,0,0.205,1.35681, -1,0,0,0,0.883139,0.883139, -1,0,0,0,0.205,1.5, -1,0,0,0,1.5,1.5, 0,1,0,1.5,3,3, 0,1,0,1.705,3,2.795, 0,1,0,1.5,3,2.795, -1,0,0,0,2.54773,1.5, -1,0,0,0,1.5,1.5, -1,0,0,0,2.116861,2.116861, -1,0,0,0,2.3525,0.205, -1,0,0,0,2.1475,0, -1,0,0,0,2.1475,0.205, -1,0,0,0,0.205,1.705, -1,0,0,0,1.5,1.5, -1,0,0,0,0.205,1.5, -1,0,0,0,1.5,1.5, -1,0,0,0,0.205,1.705, -1,0,0,0,0.75,2.25, -1,0,0,0,1.295,2.795, -1,0,0,0,1.5,1.5, -1,0,0,0,0.75,2.25, -1,0,0,0,1.5,1.5, -1,0,0,0,1.295,2.795, -1,0,0,0,1.5,2.795 }; static const struct gllist lament_model_iso_base_b_frame = { GL_N3F_V3F, GL_TRIANGLES, 864, lament_model_iso_base_b_data, 0 }; const struct gllist *lament_model_iso_base_b = &lament_model_iso_base_b_frame; static const float lament_model_iso_den_data[] = { 0,1,0,1.5,3,0.45227, 0,1,0,2.1475,3,0.8525, 0,1,0,1.5,3,0.205, 0,1,0,2.1475,3,0.8525, 0,1,0,1.5,3,0.45227, 0,1,0,2.116861,3,0.883139, 0,0,-1,1.798369,3,0, 0,0,-1,1.836598,2.31262,0, 0,0,-1,1.682983,2.419919,0, 0,0,-1,1.836598,2.31262,0, 0,0,-1,1.798369,3,0, 0,0,-1,2.12132,3,0, 0,0,-1,2.12132,3,0, 0,0,-1,1.977306,2.214338,0, 0,0,-1,1.836598,2.31262,0, 0,0,-1,1.977306,2.214338,0, 0,0,-1,2.12132,3,0, 0,0,-1,2.502268,3,0, 0,0,-1,2.502268,3,0, 0,0,-1,2.116861,2.116861,0, 0,0,-1,1.977306,2.214338,0, 0,0,-1,2.116861,2.116861,0, 0,0,-1,2.502268,3,0, 0,0,-1,3,3,0, 0.485071,0.485071,-0.727607,3,3,0, 0,0.5547,-0.83205,2.502268,3,0, 0,1,0,2.795,3,0, 0,1,0,1.5,3,0.45227, 0,1,0,1.5,3,0.205, 0,1,0,1.354417,3,0.350583, 0,1,0,2.1475,3,0.8525, 0,1,0,2.795,3,1.35681, 0,1,0,2.795,3,0.205, 0,1,0,2.795,3,1.35681, 0,1,0,2.1475,3,0.8525, 0,1,0,2.320097,3,1.025097, 0,1,0,2.1475,3,0.8525, 0,1,0,2.795,3,0.205, 0,1,0,1.5,3,0.205, 0,1,0,1.354417,3,0.350583, 0,1,0,1.5,3,0.205, 0,1,0,1.145992,3,0.205, 0,0,-1,3,2.502268,0, 0,0,-1,2.44161,1.890028,0, 0,0,-1,2.266632,2.012247,0, 0,0,-1,2.44161,1.890028,0, 0,0,-1,3,2.502268,0, 0,0,-1,3,2.12132,0, 0,1,0,2.795,3,1.35681, 0,1,0,3,3,0.205, 0,1,0,2.795,3,0.205, 0,1,0,3,3,0.205, 0,1,0,2.795,3,1.35681, 0,1,0,3,3,1.5, 0,0,-1,1.798369,3,0, 0,0,-1,1.5,2.54773,0, 0,0,-1,1.5,3,0, 0,0,-1,1.5,2.54773,0, 0,0,-1,1.798369,3,0, 0,0,-1,1.682983,2.419919,0, 0,0,-1,3,1.5,0, 0,0,-1,2.667519,1.732234,0, 0,0,-1,3,1.798369,0, 0,0,-1,3,3,0, 0,0,-1,2.266632,2.012247,0, 0,0,-1,2.116861,2.116861,0, 0,0,-1,2.266632,2.012247,0, 0,0,-1,3,3,0, 0,0,-1,3,2.502268,0, 0.5547,0,-0.83205,3,2.502268,0, 0.485071,0.485071,-0.727607,3,3,0, 1,0,0,3,2.795,0, 0,0,-1,1.201631,3,0, 0,0,-1,0.889338,2.974269,0, 0,0,-1,0.87868,3,0, 0,0,-1,0.889338,2.974269,0, 0,0,-1,1.201631,3,0, 0,0,-1,1.257966,2.716787,0, 0,1,0,2.795,3,0.205, 0,1,0,3,3,0, 0,1,0,2.795,3,0, 1,0,0,3,1.798369,0, 1,0,0,3,1.705,0.205, 1,0,0,3,1.5,0, 1,0,0,3,1.705,0.205, 1,0,0,3,1.798369,0, 1,0,0,3,2.795,0.205, 1,0,0,3,2.795,0.205, 1,0,0,3,1.798369,0, 1,0,0,3,2.12132,0, 1,0,0,3,2.795,0.205, 1,0,0,3,2.12132,0, 1,0,0,3,2.502268,0, 1,0,0,3,2.795,0.205, 1,0,0,3,2.502268,0, 1,0,0,3,2.795,0, 0,1,0,0.8525,3,0, 0,1,0,1.201631,3,0, 0,1,0,0.87868,3,0, 0,1,0,1.201631,3,0, 0,1,0,0.8525,3,0, 0,1,0,1.5,3,0, 0,1,0,1.5,3,0, 0,1,0,0.8525,3,0, 0,1,0,1.5,3,0.205, 0,1,0,1.5,3,0.205, 0,1,0,0.8525,3,0, 0,1,0,1.145992,3,0.205, 0,0,-1,1.5,3,0, 0,0,-1,1.257966,2.716787,0, 0,0,-1,1.201631,3,0, 0,0,-1,1.257966,2.716787,0, 0,0,-1,1.5,3,0, 0,0,-1,1.5,2.54773,0, 0,0,-1,3,2.12132,0, 0,0,-1,2.667519,1.732234,0, 0,0,-1,2.44161,1.890028,0, 0,0,-1,2.667519,1.732234,0, 0,0,-1,3,2.12132,0, 0,0,-1,3,1.798369,0, 1,0,0,3,2.795,0.205, 1,0,0,3,2.25,0.75, 1,0,0,3,1.705,0.205, 1,0,0,3,3,0.205, 1,0,0,3,2.795,0.205, 1,0,0,3,3,0, 0,1,0,3,3,0.205, 0,1,0,3,3,0, 0,1,0,2.795,3,0.205, 1,0,0,3,3,0, 1,0,0,3,2.795,0.205, 1,0,0,3,2.795,0, 1,0,0,3,2.795,1.295, 1,0,0,3,2.25,0.75, 1,0,0,3,2.795,0.205, 0,1,0,1.5,3,0.205, 0,1,0,1.798369,3,0, 0,1,0,1.5,3,0, 0,1,0,1.798369,3,0, 0,1,0,1.5,3,0.205, 0,1,0,2.12132,3,0, 0,1,0,2.12132,3,0, 0,1,0,1.5,3,0.205, 0,1,0,2.502268,3,0, 0,1,0,2.502268,3,0, 0,1,0,1.5,3,0.205, 0,1,0,2.795,3,0, 0,1,0,2.795,3,0, 0,1,0,1.5,3,0.205, 0,1,0,2.795,3,0.205, 1,0,0,3,3,0.205, 1,0,0,3,2.795,1.295, 1,0,0,3,2.795,0.205, 1,0,0,3,2.795,1.295, 1,0,0,3,3,0.205, 1,0,0,3,3,1.5, 0,1,0,2.320097,3,1.025097, 0,1,0,2.1475,3,0.8525, 0,1,0,2.116861,3,0.883139, 0,0,-1,0.889338,2.974269,0, 0,0,-1,0.8525,3,0, 0,0,-1,0.87868,3,0, -0.442836,-0.633994,0.633994,0.889338,2.974269,0, -0.442836,-0.633994,0.633994,1.145992,3,0.205, -0.442836,-0.633994,0.633994,0.8525,3,0, -0.442836,-0.633994,0.633994,1.145992,3,0.205, -0.442836,-0.633994,0.633994,0.889338,2.974269,0, -0.442836,-0.633994,0.633994,1.257966,2.716787,0, -0.442836,-0.633994,0.633994,1.145992,3,0.205, -0.442836,-0.633994,0.633994,1.257966,2.716787,0, -0.442836,-0.633994,0.633994,1.354417,3,0.350583, -0.442836,-0.633994,0.633994,1.354417,3,0.350583, -0.442836,-0.633994,0.633994,1.257966,2.716787,0, -0.442836,-0.633994,0.633994,1.5,2.54773,0, -0.442836,-0.633994,0.633994,1.354417,3,0.350583, -0.442836,-0.633994,0.633994,1.5,2.54773,0, -0.442836,-0.633994,0.633994,1.5,3,0.45227, -0.442836,-0.633994,0.633994,1.5,3,0.45227, -0.442836,-0.633994,0.633994,1.5,2.54773,0, -0.442836,-0.633994,0.633994,1.682983,2.419919,0, -0.442836,-0.633994,0.633994,1.5,3,0.45227, -0.442836,-0.633994,0.633994,1.682983,2.419919,0, -0.442836,-0.633994,0.633994,2.116861,3,0.883139, -0.442836,-0.633994,0.633994,2.116861,3,0.883139, -0.442836,-0.633994,0.633994,1.682983,2.419919,0, -0.442836,-0.633994,0.633994,1.836598,2.31262,0, -0.442836,-0.633994,0.633994,2.116861,3,0.883139, -0.442836,-0.633994,0.633994,1.836598,2.31262,0, -0.442836,-0.633994,0.633994,1.977306,2.214338,0, -0.442836,-0.633994,0.633994,2.116861,3,0.883139, -0.442836,-0.633994,0.633994,1.977306,2.214338,0, -0.442836,-0.633994,0.633994,2.116861,2.116861,0, -0.442836,-0.633994,0.633994,2.116861,3,0.883139, -0.442836,-0.633994,0.633994,2.116861,2.116861,0, -0.442836,-0.633994,0.633994,2.266632,2.012247,0, -0.442836,-0.633994,0.633994,2.116861,3,0.883139, -0.442836,-0.633994,0.633994,2.266632,2.012247,0, -0.442836,-0.633994,0.633994,2.320097,3,1.025097, -0.442836,-0.633994,0.633994,2.320097,3,1.025097, -0.442836,-0.633994,0.633994,2.266632,2.012247,0, -0.442836,-0.633994,0.633994,2.44161,1.890028,0, -0.442836,-0.633994,0.633994,2.320097,3,1.025097, -0.442836,-0.633994,0.633994,2.44161,1.890028,0, -0.442836,-0.633994,0.633994,2.795,3,1.35681, -0.442836,-0.633994,0.633994,2.795,3,1.35681, -0.442836,-0.633994,0.633994,2.44161,1.890028,0, -0.442836,-0.633994,0.633994,2.667519,1.732234,0, -0.442836,-0.633994,0.633994,2.795,3,1.35681, -0.442836,-0.633994,0.633994,2.667519,1.732234,0, -0.442836,-0.633994,0.633994,3,1.5,0, -0.442836,-0.633994,0.633994,2.795,3,1.35681, -0.442836,-0.633994,0.633994,3,1.5,0, -0.442836,-0.633994,0.633994,3,3,1.5, 0.605634,0.397847,0.689148,3,3,1.5, 0.087875,-0.974602,0.205981,3,1.5,0, 1,0,0,3,1.705,0.205, 0.605634,0.397847,0.689148,3,3,1.5, 1,0,0,3,1.705,0.205, 1,0,0,3,2.25,0.75, 0.605634,0.397847,0.689148,3,3,1.5, 1,0,0,3,2.25,0.75, 1,0,0,3,2.795,1.295 }; static const struct gllist lament_model_iso_den_frame = { GL_N3F_V3F, GL_TRIANGLES, 222, lament_model_iso_den_data, 0 }; const struct gllist *lament_model_iso_den = &lament_model_iso_den_frame; static const float lament_model_iso_dse_data[] = { 0,0,-1,1.798369,0,0, 0,0,-1,1.5,0,0, 0,0,-1,1.748866,0.248866,0, 0,0,-1,2.100816,0.600816,0, 0,0,-1,2.12132,0,0, 0,0,-1,1.93934,0.43934,0, 0,0,-1,2.12132,0,0, 0,0,-1,2.100816,0.600816,0, 0,0,-1,2.502268,0,0, 0,0,-1,1.93934,0.43934,0, 0,0,-1,1.798369,0,0, 0,0,-1,1.748866,0.248866,0, 0,0,-1,1.798369,0,0, 0,0,-1,1.93934,0.43934,0, 0,0,-1,2.12132,0,0, 0,-1,0,2.649417,0,1.645583, 0,-1,0,2.54773,0,1.5, 0,-1,0,2.795,0,1.5, 0,-1,0,2.1475,0,0.8525, -0.003005,-0.999993,0.002099,1.64319,0,0.205, 0,-1,0,2.795,0,0.205, -0.003005,-0.999993,0.002099,1.64319,0,0.205, 0,-1,0,2.1475,0,0.8525, -0.004007,-0.999988,0.002799,1.974903,0,0.679903, 0,-1,0,2.795,0,1.5, 0,-1,0,2.116861,0,0.883139, 0,-1,0,2.1475,0,0.8525, 0,-1,0,2.116861,0,0.883139, 0,-1,0,2.795,0,1.5, 0,-1,0,2.54773,0,1.5, 0,-1,0,2.795,0,0.205, 0,-1,0,2.502268,0,0, 0,-1,0,2.795,0,0, 0,-1,0,2.502268,0,0, 0,-1,0,2.795,0,0.205, 0,-1,0,2.12132,0,0, 0,-1,0,2.12132,0,0, 0,-1,0,2.795,0,0.205, 0,-1,0,1.798369,0,0, 0,-1,0,1.798369,0,0, 0,-1,0,2.795,0,0.205, -0.004007,-0.999988,0.002799,1.5,0,0, -0.004007,-0.999988,0.002799,1.5,0,0, 0,-1,0,2.795,0,0.205, -0.003005,-0.999993,0.002099,1.64319,0,0.205, 0,-1,0,3,0,1.5, 0,-1,0,2.795,0,0.205, 0,-1,0,3,0,0.205, 0,-1,0,2.795,0,0.205, 0,-1,0,3,0,1.5, 0,-1,0,2.795,0,1.5, 1,0,0,3,0.883139,0.883139, 1,0,0,3,0.205,1.5, 1,0,0,3,0.205,0.205, 1,0,0,3,0.205,1.5, 1,0,0,3,0.883139,0.883139, 1,0,0,3,0.45227,1.5, 0,-1,0,2.795,0,0.205, 0,-1,0,3,0,0, 0,-1,0,3,0,0.205, 0,0,-1,2.56066,1.06066,0, 0,0,-1,3,0.497732,0, 0,0,-1,2.399184,0.899184,0, 0,0,-1,3,0.497732,0, 0,0,-1,2.56066,1.06066,0, 0,0,-1,3,0.87868,0, 0,0,-1,2.25,0.75,0, 0,0,-1,2.502268,0,0, 0,0,-1,2.100816,0.600816,0, 0,0,-1,2.502268,0,0, 0,0,-1,2.25,0.75,0, 0,0,-1,3,0,0, 0,-0.5547,-0.83205,2.502268,0,0, 0.485071,-0.485071,-0.727607,3,0,0, 0,-1,0,2.795,0,0, 0,0,-1,3,1.201631,0, 0,0,-1,2.751134,1.251134,0, 0,0,-1,3,1.5,0, 0,0,-1,2.399184,0.899184,0, 0,0,-1,3,0,0, 0,0,-1,2.25,0.75,0, 0,0,-1,3,0,0, 0,0,-1,2.399184,0.899184,0, 0,0,-1,3,0.497732,0, 0.485071,-0.485071,-0.727607,3,0,0, 0.707107,0,-0.707107,3,0.497732,0, 1,0,0,3,0.205,0, 0,0,-1,2.751134,1.251134,0, 0,0,-1,3,0.87868,0, 0,0,-1,2.56066,1.06066,0, 0,0,-1,3,0.87868,0, 0,0,-1,2.751134,1.251134,0, 0,0,-1,3,1.201631,0, -0.004007,-0.999988,0.002799,1.974903,0,0.679903, -0.004007,-0.999988,0.002799,1.5,0,0, -0.003005,-0.999993,0.002099,1.64319,0,0.205, -0.633994,0.633994,0.442836,1.5,0,0, -0.633994,0.633994,0.442836,1.974903,0,0.679903, -0.633994,0.633994,0.442836,1.748866,0.248866,0, -0.633994,0.633994,0.442836,1.748866,0.248866,0, -0.633994,0.633994,0.442836,1.974903,0,0.679903, -0.633994,0.633994,0.442836,2.116861,0,0.883139, -0.633994,0.633994,0.442836,1.748866,0.248866,0, -0.633994,0.633994,0.442836,2.116861,0,0.883139, -0.633994,0.633994,0.442836,2.54773,0,1.5, -0.633994,0.633994,0.442836,1.748866,0.248866,0, -0.633994,0.633994,0.442836,2.54773,0,1.5, -0.633994,0.633994,0.442836,2.649417,0,1.645583, -0.633994,0.633994,0.442836,1.748866,0.248866,0, -0.633994,0.633994,0.442836,2.649417,0,1.645583, -0.633994,0.633994,0.442836,2.795,0,1.854008, -0.633994,0.633994,0.442836,1.748866,0.248866,0, -0.633994,0.633994,0.442836,2.795,0,1.854008, -0.633994,0.633994,0.442836,3,0,2.1475, -0.633994,0.633994,0.442836,1.748866,0.248866,0, -0.633994,0.633994,0.442836,3,0,2.1475, -0.633994,0.633994,0.442836,3,0.205,1.854008, -0.633994,0.633994,0.442836,1.748866,0.248866,0, -0.633994,0.633994,0.442836,3,0.205,1.854008, -0.633994,0.633994,0.442836,3,0.45227,1.5, -0.633994,0.633994,0.442836,1.748866,0.248866,0, -0.633994,0.633994,0.442836,3,0.45227,1.5, -0.633994,0.633994,0.442836,1.93934,0.43934,0, -0.633994,0.633994,0.442836,1.93934,0.43934,0, -0.633994,0.633994,0.442836,3,0.45227,1.5, -0.633994,0.633994,0.442836,2.100816,0.600816,0, -0.633994,0.633994,0.442836,2.100816,0.600816,0, -0.633994,0.633994,0.442836,3,0.45227,1.5, -0.633994,0.633994,0.442836,3,0.883139,0.883139, -0.633994,0.633994,0.442836,2.100816,0.600816,0, -0.633994,0.633994,0.442836,3,0.883139,0.883139, -0.633994,0.633994,0.442836,2.25,0.75,0, -0.633994,0.633994,0.442836,2.25,0.75,0, -0.633994,0.633994,0.442836,3,0.883139,0.883139, -0.633994,0.633994,0.442836,2.399184,0.899184,0, -0.633994,0.633994,0.442836,2.399184,0.899184,0, -0.633994,0.633994,0.442836,3,0.883139,0.883139, -0.633994,0.633994,0.442836,3,1.35681,0.205, -0.633994,0.633994,0.442836,2.399184,0.899184,0, -0.633994,0.633994,0.442836,3,1.35681,0.205, -0.633994,0.633994,0.442836,2.56066,1.06066,0, -0.633994,0.633994,0.442836,2.56066,1.06066,0, -0.633994,0.633994,0.442836,3,1.35681,0.205, -0.633994,0.633994,0.442836,2.751134,1.251134,0, -0.633994,0.633994,0.442836,2.751134,1.251134,0, -0.633994,0.633994,0.442836,3,1.35681,0.205, -0.633994,0.633994,0.442836,3,1.5,0, 1,0,0,3,0.205,0.205, 1,0,0,3,0,0.205, 1,0,0,3,0,0, 1,0,0,3,0.45227,1.5, 1,0,0,3,0.205,1.854008, 1,0,0,3,0.205,1.5, 0,-1,0,2.795,0,0.205, 0,-1,0,2.795,0,0, 0,-1,0,3,0,0, 1,0,0,3,0.205,0.205, 1,0,0,3,0,1.5, 1,0,0,3,0,0.205, 1,0,0,3,0,1.5, 1,0,0,3,0.205,0.205, 1,0,0,3,0.205,1.5, 0,-1,0,2.795,0,1.854008, 0,-1,0,2.649417,0,1.645583, 0,-1,0,2.795,0,1.5, 0,-1,0,2.795,0,1.5, 0,-1,0,2.1475,0,0.8525, 0,-1,0,2.795,0,0.205, 1,0,0,3,1.35681,0.205, 1,0,0,3,0.883139,0.883139, 1,0,0,3,0.205,0.205, 1,0,0,3,0.497732,0, 1,0,0,3,0.205,0.205, 1,0,0,3,0.205,0, 1,0,0,3,0.205,0.205, 1,0,0,3,0.497732,0, 1,0,0,3,1.35681,0.205, 1,0,0,3,1.35681,0.205, 1,0,0,3,0.497732,0, 1,0,0,3,0.87868,0, 1,0,0,3,1.35681,0.205, 1,0,0,3,0.87868,0, 1,0,0,3,1.201631,0, 1,0,0,3,1.35681,0.205, 1,0,0,3,1.201631,0, 1,0,0,3,1.5,0, 1,0,0,3,0.205,1.5, 1,0,0,3,0,2.1475, 1,0,0,3,0,1.5, 1,0,0,3,0,2.1475, 1,0,0,3,0.205,1.5, 1,0,0,3,0.205,1.854008, 1,0,0,3,0.205,0.205, 1,0,0,3,0,0, 1,0,0,3,0.205,0, 0,-1,0,3,0,2.1475, 0,-1,0,2.795,0,1.5, 0,-1,0,3,0,1.5, 0,-1,0,2.795,0,1.5, 0,-1,0,3,0,2.1475, 0,-1,0,2.795,0,1.854008, 0,-1,0,2.116861,0,0.883139, -0.004007,-0.999988,0.002799,1.974903,0,0.679903, 0,-1,0,2.1475,0,0.8525 }; static const struct gllist lament_model_iso_dse_frame = { GL_N3F_V3F, GL_TRIANGLES, 204, lament_model_iso_dse_data, 0 }; const struct gllist *lament_model_iso_dse = &lament_model_iso_dse_frame; static const float lament_model_iso_dwn_data[] = { 0,1,0,0,3,0.7275, 0,1,0,0.205,3,0.205, 0,1,0,0,3,0.205, 0,1,0,0.205,3,0.205, 0,1,0,0,3,0.7275, 0,1,0,0.205,3,0.6475, 0,1,0,0.205,3,0.6475, 0,1,0,0,3,0.7275, 0,1,0,0,3,0.8525, 0,1,0,0.205,3,0.205, 0,1,0,0.497732,3,0, 0,1,0,0.205,3,0, 0,1,0,0.497732,3,0, 0,1,0,0.205,3,0.205, 0,1,0,0.8525,3,0, 0,1,0,0.8525,3,0, 0,1,0,0.205,3,0.205, 0,1,0,0.6475,3,0.205, 0,1,0,0.42625,3,0.42625, 0,1,0,0.6475,3,0.205, 0,1,0,0.205,3,0.205, 0,0,-1,0.8525,3,0, 0,0,-1,0.639832,2.787332,0, 0,0,-1,0.497732,3,0, 0,0,-1,0.212668,2.360168,0, 0,0,-1,0,2.2725,0, 0,0,-1,0,2.502268,0, 0,0,-1,0,2.2725,0, 0,0,-1,0.212668,2.360168,0, 0,0,-1,0,2.1475,0, -1,0,0,0,3,0, -1,0,0,0,2.795,0, -1,0,0,0,2.795,0.205, -1,0,0,0,3,0, -1,0,0,0,2.795,0.205, -1,0,0,0,3,0.205, 0,1,0,0.205,3,0.205, 0,1,0,0,3,0, 0,1,0,0,3,0.205, -1,0,0,0,2.795,0.205, -1,0,0,0,2.57375,0.42625, -1,0,0,0,2.795,0.6475, 0,0,-1,0.205,3,0, 0,0,-1,0.42625,2.57375,0, 0,0,-1,0,3,0, 0,0,-1,0.42625,2.57375,0, 0,0,-1,0.205,3,0, 0,0,-1,0.497732,3,0, 0,0,-1,0.42625,2.57375,0, 0,0,-1,0.497732,3,0, 0,0,-1,0.639832,2.787332,0, 0,0,-1,0.42625,2.57375,0, 0,0,-1,0,2.795,0, 0,0,-1,0,3,0, 0,0,-1,0,2.795,0, 0,0,-1,0.42625,2.57375,0, 0,0,-1,0,2.502268,0, 0,0,-1,0,2.502268,0, 0,0,-1,0.42625,2.57375,0, 0,0,-1,0.212668,2.360168,0, -1,0,0,0,2.3525,0.205, -1,0,0,0,2.2725,0, -1,0,0,0,2.1475,0, -1,0,0,0,2.2725,0, -1,0,0,0,2.3525,0.205, -1,0,0,0,2.502268,0, -1,0,0,0,2.502268,0, -1,0,0,0,2.3525,0.205, -1,0,0,0,2.795,0.205, -1,0,0,0,2.502268,0, -1,0,0,0,2.795,0.205, -1,0,0,0,2.795,0, 0,1,0,0.205,3,0.205, 0,1,0,0.205,3,0, 0,1,0,0,3,0, -1,0,0,0,2.795,0.205, -1,0,0,0,2.3525,0.205, -1,0,0,0,2.57375,0.42625, 0,1,0,0.205,3,0.6475, 0,1,0,0.42625,3,0.42625, 0,1,0,0.205,3,0.205, -1,0,0,0,3,0.8525, -1,0,0,0,2.795,0.205, -1,0,0,0,2.795,0.6475, -1,0,0,0,2.795,0.205, -1,0,0,0,3,0.8525, -1,0,0,0,3,0.205, -0.707107,0.707107,0,0,3,0.205, -0.893371,0.265408,0.362555,0,3,0.8525, 0,1,0,0,3,0.7275, 0.57735,-0.57735,0.57735,0.212668,2.360168,0, 0.57735,-0.57735,0.57735,0,2.3525,0.205, 0.57735,-0.57735,0.57735,0,2.1475,0, 0.57735,-0.57735,0.57735,0,2.3525,0.205, 0.57735,-0.57735,0.57735,0.212668,2.360168,0, 0.57735,-0.57735,0.57735,0.42625,2.57375,0, 0.57735,-0.57735,0.57735,0,2.3525,0.205, 0.57735,-0.57735,0.57735,0.42625,2.57375,0, 0.57735,-0.57735,0.57735,0.639832,2.787332,0, 0.57735,-0.57735,0.57735,0,2.3525,0.205, 0.57735,-0.57735,0.57735,0.639832,2.787332,0, 0.57735,-0.57735,0.57735,0.8525,3,0, 0.57735,-0.57735,0.57735,0,2.3525,0.205, 0.57735,-0.57735,0.57735,0.8525,3,0, 0.57735,-0.57735,0.57735,0.6475,3,0.205, 0.57735,-0.57735,0.57735,0,2.3525,0.205, 0.57735,-0.57735,0.57735,0.6475,3,0.205, 0.57735,-0.57735,0.57735,0.42625,3,0.42625, 0.57735,-0.57735,0.57735,0,2.3525,0.205, 0.57735,-0.57735,0.57735,0.42625,3,0.42625, 0.57735,-0.57735,0.57735,0,2.57375,0.42625, 0.57735,-0.57735,0.57735,0,2.57375,0.42625, 0.57735,-0.57735,0.57735,0.42625,3,0.42625, 0.57735,-0.57735,0.57735,0.205,3,0.6475, 0.57735,-0.57735,0.57735,0,2.57375,0.42625, 0.57735,-0.57735,0.57735,0.205,3,0.6475, 0.57735,-0.57735,0.57735,0,2.795,0.6475, 0.57735,-0.57735,0.57735,0,2.795,0.6475, 0.57735,-0.57735,0.57735,0.205,3,0.6475, 0.57735,-0.57735,0.57735,0,3,0.8525 }; static const struct gllist lament_model_iso_dwn_frame = { GL_N3F_V3F, GL_TRIANGLES, 120, lament_model_iso_dwn_data, 0 }; const struct gllist *lament_model_iso_dwn = &lament_model_iso_dwn_frame; static const float lament_model_iso_swd_data[] = { 0,0,-1,1.5,0,0, 0,0,-1,1.201631,0,0, 0,0,-1,1.267766,0.332481,0, -1,0,0,0,0.205,0.205, -1,0,0,0,0,0, -1,0,0,0,0,0.205, -1,0,0,0,0.205,0.205, -1,0,0,0,0.205,0, -1,0,0,0,0,0, -1,0,0,0,0.205,0.205, -1,0,0,0,0.497732,0, -1,0,0,0,0.205,0, -1,0,0,0,0.497732,0, -1,0,0,0,0.205,0.205, -1,0,0,0,1.5,0.205, -1,0,0,0,0.497732,0, -1,0,0,0,1.5,0.205, -1,0,0,0,0.87868,0, -1,0,0,0,0.87868,0, -1,0,0,0,1.5,0.205, -1,0,0,0,1.201631,0, -1,0,0,0,1.201631,0, -1,0,0,0,1.5,0.205, -1,0,0,0,1.5,0, 0,0,-1,0.283213,1.742034,0, 0,0,-1,0,1.5,0, 0,0,-1,0,1.798369,0, 0,0,-1,0,1.5,0, 0,0,-1,0.283213,1.742034,0, 0,0,-1,0.45227,1.5,0, 0,0,-1,0.45227,1.5,0, 0,0,-1,0,1.201631,0, 0,0,-1,0,1.5,0, 0,0,-1,0,1.201631,0, 0,0,-1,0.45227,1.5,0, 0,0,-1,0.580081,1.317017,0, 0,0,-1,0.580081,1.317017,0, 0,0,-1,0,0.87868,0, 0,0,-1,0,1.201631,0, 0,0,-1,0,0.87868,0, 0,0,-1,0.580081,1.317017,0, 0,0,-1,0.68738,1.163402,0, 0,0,-1,0.025731,2.110662,0, 0,0,-1,0,1.798369,0, 0,0,-1,0,2.12132,0, 0,0,-1,0,1.798369,0, 0,0,-1,0.025731,2.110662,0, 0,0,-1,0.283213,1.742034,0, 0,0,-1,0.785662,1.022694,0, 0,0,-1,0,0.205,0, 0,0,-1,0,0.497732,0, 0,0,-1,0,0.205,0, 0,0,-1,0.785662,1.022694,0, 0,0,-1,0,0,0, 0,0,-1,0,0,0, 0,0,-1,0.785662,1.022694,0, 0,0,-1,0.883139,0.883139,0, 0,0,-1,0.987753,0.733368,0, 0,0,-1,0.87868,0,0, 0,0,-1,0.497732,0,0, 0,0,-1,0.87868,0,0, 0,0,-1,0.987753,0.733368,0, 0,0,-1,1.109972,0.55839,0, 0,0,-1,1.109972,0.55839,0, 0,0,-1,1.201631,0,0, 0,0,-1,0.87868,0,0, 0,0,-1,1.201631,0,0, 0,0,-1,1.109972,0.55839,0, 0,0,-1,1.267766,0.332481,0, -1,0,0,0,0.883139,0.883139, -1,0,0,0,1.5,0.205, -1,0,0,0,0.205,0.205, -1,0,0,0,1.5,0.205, -1,0,0,0,0.883139,0.883139, -1,0,0,0,1.5,0.45227, -1,0,0,0,0.883139,0.883139, -1,0,0,0,0.205,0.205, -1,0,0,0,0.205,1.35681, -1,0,0,0,1.854008,0.205, -1,0,0,0,1.5,0, -1,0,0,0,1.5,0.205, -1,0,0,0,1.5,0, -1,0,0,0,1.854008,0.205, -1,0,0,0,1.798369,0, -1,0,0,0,1.798369,0, -1,0,0,0,1.854008,0.205, -1,0,0,0,2.12132,0, -1,0,0,0,2.12132,0, -1,0,0,0,1.854008,0.205, -1,0,0,0,2.1475,0, -1,0,0,0,1.854008,0.205, -1,0,0,0,1.5,0.205, -1,0,0,0,1.5,0.45227, -1,0,0,0,0.205,1.35681, -1,0,0,0,0,0.205, -1,0,0,0,0,1.5, -1,0,0,0,0,0.205, -1,0,0,0,0.205,1.35681, -1,0,0,0,0.205,0.205, 0,0,-1,0.68738,1.163402,0, 0,0,-1,0,0.497732,0, 0,0,-1,0,0.87868,0, 0,0,-1,0,0.497732,0, 0,0,-1,0.68738,1.163402,0, 0,0,-1,0.785662,1.022694,0, 0,0,-1,0.883139,0.883139,0, 0,0,-1,0.205,0,0, 0,0,-1,0,0,0, 0,0,-1,0.205,0,0, 0,0,-1,0.883139,0.883139,0, 0,0,-1,0.497732,0,0, 0,0,-1,0.497732,0,0, 0,0,-1,0.883139,0.883139,0, 0,0,-1,0.987753,0.733368,0, 0,-1,0,0.75,0,0.75, 0,-1,0,0.205,0,0.205, 0,-1,0,1.295,0,0.205, 0,-1,0,0.205,0,0.205, 0,-1,0,0,0,0, 0,-1,0,0.205,0,0, 0,-1,0,0.205,0,1.295, 0,-1,0,0,0,0.205, 0,-1,0,0.205,0,0.205, 0,-1,0,0,0,0.205, 0,-1,0,0.205,0,1.295, 0,-1,0,0,0,1.5, 0,-1,0,1.295,0,0.205, 0,-1,0,1.201631,0,0, 0,-1,0,1.5,0,0, 0,-1,0,1.201631,0,0, 0,-1,0,1.295,0,0.205, 0,-1,0,0.87868,0,0, 0,-1,0,0.87868,0,0, 0,-1,0,1.295,0,0.205, 0,-1,0,0.497732,0,0, 0,-1,0,0.497732,0,0, 0,-1,0,1.295,0,0.205, 0,-1,0,0.205,0,0, 0,-1,0,0.205,0,0, 0,-1,0,1.295,0,0.205, 0,-1,0,0.205,0,0.205, 0,-1,0,0.205,0,1.295, 0,-1,0,0.205,0,0.205, 0,-1,0,0.75,0,0.75, 0,-1,0,0,0,0.205, 0,-1,0,0,0,0, 0,-1,0,0.205,0,0.205, 0,0,-1,0.025731,2.110662,0, 0,0,-1,0,2.12132,0, 0,0,-1,0,2.1475,0, 0.633994,0.442836,0.633994,0.205,0,1.295, 0.633994,0.442836,0.633994,0,0.205,1.35681, 0.633994,0.442836,0.633994,0,0,1.5, 0.633994,0.442836,0.633994,0,0.205,1.35681, 0.633994,0.442836,0.633994,0.205,0,1.295, 0.633994,0.442836,0.633994,0.75,0,0.75, 0.633994,0.442836,0.633994,0,0.205,1.35681, 0.633994,0.442836,0.633994,0.75,0,0.75, 0.633994,0.442836,0.633994,1.295,0,0.205, 0.633994,0.442836,0.633994,0,0.205,1.35681, 0.633994,0.442836,0.633994,1.295,0,0.205, 0.633994,0.442836,0.633994,1.5,0,0, 0.633994,0.442836,0.633994,0,0.205,1.35681, 0.633994,0.442836,0.633994,1.5,0,0, 0.633994,0.442836,0.633994,1.267766,0.332481,0, 0.633994,0.442836,0.633994,0,0.205,1.35681, 0.633994,0.442836,0.633994,1.267766,0.332481,0, 0.633994,0.442836,0.633994,0,0.883139,0.883139, 0.633994,0.442836,0.633994,0,0.883139,0.883139, 0.633994,0.442836,0.633994,1.267766,0.332481,0, 0.633994,0.442836,0.633994,1.109972,0.55839,0, 0.633994,0.442836,0.633994,0,0.883139,0.883139, 0.633994,0.442836,0.633994,1.109972,0.55839,0, 0.633994,0.442836,0.633994,0.987753,0.733368,0, 0.633994,0.442836,0.633994,0,0.883139,0.883139, 0.633994,0.442836,0.633994,0.987753,0.733368,0, 0.633994,0.442836,0.633994,0.883139,0.883139,0, 0.633994,0.442836,0.633994,0,0.883139,0.883139, 0.633994,0.442836,0.633994,0.883139,0.883139,0, 0.633994,0.442836,0.633994,0.785662,1.022694,0, 0.633994,0.442836,0.633994,0,0.883139,0.883139, 0.633994,0.442836,0.633994,0.785662,1.022694,0, 0.633994,0.442836,0.633994,0,1.5,0.45227, 0.633994,0.442836,0.633994,0,1.5,0.45227, 0.633994,0.442836,0.633994,0.785662,1.022694,0, 0.633994,0.442836,0.633994,0.68738,1.163402,0, 0.633994,0.442836,0.633994,0,1.5,0.45227, 0.633994,0.442836,0.633994,0.68738,1.163402,0, 0.633994,0.442836,0.633994,0.580081,1.317017,0, 0.633994,0.442836,0.633994,0,1.5,0.45227, 0.633994,0.442836,0.633994,0.580081,1.317017,0, 0.633994,0.442836,0.633994,0.45227,1.5,0, 0.633994,0.442836,0.633994,0,1.5,0.45227, 0.633994,0.442836,0.633994,0.45227,1.5,0, 0.633994,0.442836,0.633994,0.283213,1.742034,0, 0.633994,0.442836,0.633994,0,1.5,0.45227, 0.633994,0.442836,0.633994,0.283213,1.742034,0, 0.633994,0.442836,0.633994,0,1.854008,0.205, 0.633994,0.442836,0.633994,0,1.854008,0.205, 0.633994,0.442836,0.633994,0.283213,1.742034,0, 0.633994,0.442836,0.633994,0.025731,2.110662,0, 0.633994,0.442836,0.633994,0,1.854008,0.205, 0.633994,0.442836,0.633994,0.025731,2.110662,0, 0.633994,0.442836,0.633994,0,2.1475,0 }; static const struct gllist lament_model_iso_swd_frame = { GL_N3F_V3F, GL_TRIANGLES, 204, lament_model_iso_swd_data, 0 }; const struct gllist *lament_model_iso_swd = &lament_model_iso_swd_frame; static const float lament_model_iso_une_data[] = { 0,0,1,2.419919,1.682983,3, 0,0,1,3,2.12132,3, 0,0,1,2.31262,1.836598,3, 0,0,1,3,2.12132,3, 0,0,1,2.419919,1.682983,3, 0,0,1,3,1.798369,3, 0,0,1,2.54773,1.5,3, 0,0,1,3,1.798369,3, 0,0,1,2.419919,1.682983,3, 0,0,1,3,1.798369,3, 0,0,1,2.54773,1.5,3, 0,0,1,3,1.5,3, 0,0,1,2.974269,0.889338,3, 0,0,1,3,1.201631,3, 0,0,1,2.716787,1.257966,3, 0,0,1,3,1.201631,3, 0,0,1,2.974269,0.889338,3, 0,0,1,3,0.87868,3, 0,0,1,2.716787,1.257966,3, 0,0,1,3,1.5,3, 0,0,1,2.54773,1.5,3, 0,0,1,3,1.5,3, 0,0,1,2.716787,1.257966,3, 0,0,1,3,1.201631,3, 0,1,0,1.5,3,3, 0,1,0,2.795,3,2.795, 0,1,0,1.705,3,2.795, 0,1,0,2.795,3,2.795, 0,1,0,1.5,3,3, 0,1,0,2.795,3,3, 0,1,0,2.795,3,3, -0.741864,0.651962,-0.156792,1.5,3,3, 0,0,1,1.798369,3,3, 0,1,0,2.795,3,3, 0,0,1,1.798369,3,3, 0,0,1,2.12132,3,3, 0,1,0,2.795,3,3, 0,0,1,2.12132,3,3, 0,0,1,2.502268,3,3, 0,1,0,3,3,3, 0,1,0,2.795,3,2.795, 0,1,0,2.795,3,3, 1,0,0,3,1.145992,2.795, 1,0,0,3,0.87868,3, 1,0,0,3,0.8525,3, 1,0,0,3,0.87868,3, 1,0,0,3,1.145992,2.795, 1,0,0,3,1.201631,3, 1,0,0,3,1.201631,3, 1,0,0,3,1.145992,2.795, 1,0,0,3,1.5,2.795, 1,0,0,3,1.201631,3, 1,0,0,3,1.5,2.795, 1,0,0,3,1.5,3, 1,0,0,3,3,3, 1,0,0,3,2.795,2.795, 1,0,0,3,3,2.795, 1,0,0,3,2.795,2.795, 1,0,0,3,1.5,3, 1,0,0,3,1.5,2.795, 1,0,0,3,1.5,3, 1,0,0,3,2.795,2.795, 1,0,0,3,1.798369,3, 1,0,0,3,1.798369,3, 1,0,0,3,2.795,2.795, 1,0,0,3,2.12132,3, 1,0,0,3,2.12132,3, 1,0,0,3,2.795,2.795, 1,0,0,3,2.502268,3, 1,0,0,3,2.502268,3, 1,0,0,3,2.795,2.795, 1,0,0,3,2.795,3, 0,1,0,2.795,3,2.795, 0,1,0,2.25,3,2.25, 0,1,0,1.705,3,2.795, 0,1,0,2.795,3,1.705, 0,1,0,3,3,2.795, 0,1,0,3,3,1.5, 0,1,0,3,3,2.795, 0,1,0,2.795,3,1.705, 0,1,0,2.795,3,2.795, 1,0,0,3,2.116861,2.116861, 1,0,0,3,1.5,2.795, 1,0,0,3,1.5,2.54773, 1,0,0,3,1.5,2.795, 1,0,0,3,2.116861,2.116861, 1,0,0,3,2.795,2.795, 1,0,0,3,3,1.5, 1,0,0,3,2.795,2.795, 1,0,0,3,2.795,1.64319, 1,0,0,3,2.795,2.795, 1,0,0,3,3,1.5, 1,0,0,3,3,2.795, 0,1,0,3,3,3, 0,1,0,3,3,2.795, 0,1,0,2.795,3,2.795, 0,1,0,2.795,3,2.795, 0,1,0,2.795,3,1.705, 0,1,0,2.25,3,2.25, 1,0,0,3,2.795,2.795, 1,0,0,3,2.116861,2.116861, 1,0,0,3,2.795,1.64319, 0,0,1,2.31262,1.836598,3, 0,0,1,3,2.502268,3, 0,0,1,2.214338,1.977306,3, 0,0,1,3,2.502268,3, 0,0,1,2.31262,1.836598,3, 0,0,1,3,2.12132,3, 0,0,1,2.012247,2.266632,3, 0,0,1,2.12132,3,3, 0,0,1,1.890028,2.44161,3, 0,0,1,2.12132,3,3, 0,0,1,2.012247,2.266632,3, 0,0,1,2.502268,3,3, 0,0,1,1.890028,2.44161,3, 0,0,1,1.798369,3,3, 0,0,1,1.732234,2.667519,3, 0,0,1,1.798369,3,3, 0,0,1,1.890028,2.44161,3, 0,0,1,2.12132,3,3, 0,0,1,2.116861,2.116861,3, 0,0,1,2.502268,3,3, 0,0,1,2.012247,2.266632,3, 0,0,1,2.502268,3,3, 0,0,1,2.116861,2.116861,3, 0,0,1,3,3,3, 0,0,1,2.502268,3,3, 0.485071,0.485071,0.727607,3,3,3, 0,1,0,2.795,3,3, 0,0,1,2.214338,1.977306,3, 0,0,1,3,3,3, 0,0,1,2.116861,2.116861,3, 0,0,1,3,3,3, 0,0,1,2.214338,1.977306,3, 0,0,1,3,2.502268,3, 0.485071,0.485071,0.727607,3,3,3, 0.5547,0,0.83205,3,2.502268,3, 1,0,0,3,2.795,3, 1,0,0,3,1.5,2.795, 1,0,0,3,1.145992,2.795, 1,0,0,3,1.5,2.54773, 0,0,1,1.798369,3,3, 0,0,1,1.5,3,3, 0,0,1,1.732234,2.667519,3, 1,0,0,3,3,3, 1,0,0,3,2.795,3, 1,0,0,3,2.795,2.795, 0,0,1,3,0.87868,3, 0,0,1,2.974269,0.889338,3, 0,0,1,3,0.8525,3, -0.633994,-0.442836,-0.633994,2.974269,0.889338,3, -0.633994,-0.442836,-0.633994,3,1.145992,2.795, -0.633994,-0.442836,-0.633994,3,0.8525,3, -0.633994,-0.442836,-0.633994,3,1.145992,2.795, -0.633994,-0.442836,-0.633994,2.974269,0.889338,3, -0.633994,-0.442836,-0.633994,2.716787,1.257966,3, -0.633994,-0.442836,-0.633994,3,1.145992,2.795, -0.633994,-0.442836,-0.633994,2.716787,1.257966,3, -0.633994,-0.442836,-0.633994,3,1.5,2.54773, -0.633994,-0.442836,-0.633994,3,1.5,2.54773, -0.633994,-0.442836,-0.633994,2.716787,1.257966,3, -0.633994,-0.442836,-0.633994,2.54773,1.5,3, -0.633994,-0.442836,-0.633994,3,1.5,2.54773, -0.633994,-0.442836,-0.633994,2.54773,1.5,3, -0.633994,-0.442836,-0.633994,2.419919,1.682983,3, -0.633994,-0.442836,-0.633994,3,1.5,2.54773, -0.633994,-0.442836,-0.633994,2.419919,1.682983,3, -0.633994,-0.442836,-0.633994,3,2.116861,2.116861, -0.633994,-0.442836,-0.633994,3,2.116861,2.116861, -0.633994,-0.442836,-0.633994,2.419919,1.682983,3, -0.633994,-0.442836,-0.633994,2.31262,1.836598,3, -0.633994,-0.442836,-0.633994,3,2.116861,2.116861, -0.633994,-0.442836,-0.633994,2.31262,1.836598,3, -0.633994,-0.442836,-0.633994,2.214338,1.977306,3, -0.633994,-0.442836,-0.633994,3,2.116861,2.116861, -0.633994,-0.442836,-0.633994,2.214338,1.977306,3, -0.633994,-0.442836,-0.633994,2.116861,2.116861,3, -0.633994,-0.442836,-0.633994,3,2.116861,2.116861, -0.633994,-0.442836,-0.633994,2.116861,2.116861,3, -0.633994,-0.442836,-0.633994,2.012247,2.266632,3, -0.633994,-0.442836,-0.633994,3,2.116861,2.116861, -0.633994,-0.442836,-0.633994,2.012247,2.266632,3, -0.633994,-0.442836,-0.633994,3,2.795,1.64319, -0.633994,-0.442836,-0.633994,3,2.795,1.64319, -0.633994,-0.442836,-0.633994,2.012247,2.266632,3, -0.633994,-0.442836,-0.633994,1.890028,2.44161,3, -0.633994,-0.442836,-0.633994,3,2.795,1.64319, -0.633994,-0.442836,-0.633994,1.890028,2.44161,3, -0.633994,-0.442836,-0.633994,1.732234,2.667519,3, -0.633994,-0.442836,-0.633994,3,2.795,1.64319, -0.633994,-0.442836,-0.633994,1.732234,2.667519,3, -0.633994,-0.442836,-0.633994,1.5,3,3, -0.633994,-0.442836,-0.633994,3,2.795,1.64319, -0.633994,-0.442836,-0.633994,1.5,3,3, -0.633994,-0.442836,-0.633994,1.705,3,2.795, -0.633994,-0.442836,-0.633994,1.705,3,2.795, -0.633994,-0.442836,-0.633994,3,3,1.5, -0.633994,-0.442836,-0.633994,3,2.795,1.64319, 0.85071,0.346986,-0.394833,3,3,1.5, -0.600591,0.527809,-0.600591,1.705,3,2.795, 0,1,0,2.25,3,2.25, 0.85071,0.346986,-0.394833,3,3,1.5, 0,1,0,2.25,3,2.25, 0,1,0,2.795,3,1.705 }; static const struct gllist lament_model_iso_une_frame = { GL_N3F_V3F, GL_TRIANGLES, 204, lament_model_iso_une_data, 0 }; const struct gllist *lament_model_iso_une = &lament_model_iso_une_frame; static const float lament_model_iso_unw_data[] = { 0,1,0,0.205,3,1.5, 0,1,0,0.350583,3,1.354417, 0,1,0,0.205,3,1.145992, 0,1,0,0.8525,3,2.1475, 0,1,0,0.45227,3,1.5, 0,1,0,0.205,3,1.5, 0,1,0,0.45227,3,1.5, 0,1,0,0.8525,3,2.1475, 0,1,0,0.883139,3,2.116861, 0,1,0,0,3,1.5, 0,1,0,0.205,3,1.145992, 0,1,0,0,3,0.8525, 0,1,0,0.205,3,1.145992, 0,1,0,0,3,1.5, 0,1,0,0.205,3,1.5, 0,0,1,0.75,2.25,3, 0,0,1,0.205,3,3, 0,0,1,0,3,3, 0,0,1,0.205,3,3, 0,0,1,0.75,2.25,3, 0,0,1,0.497732,3,3, 0,0,1,0.497732,3,3, 0,0,1,0.75,2.25,3, 0,0,1,0.899184,2.399184,3, 0,0,1,0.600816,2.100816,3, 0,0,1,0,2.795,3, 0,0,1,0,2.502268,3, 0,0,1,0,2.795,3, 0,0,1,0.600816,2.100816,3, 0,0,1,0,3,3, 0,0,1,0,3,3, 0,0,1,0.600816,2.100816,3, 0,0,1,0.75,2.25,3, 0,0,1,0.899184,2.399184,3, 0,0,1,0.87868,3,3, 0,0,1,0.497732,3,3, 0,0,1,0.87868,3,3, 0,0,1,0.899184,2.399184,3, 0,0,1,1.06066,2.56066,3, 0,0,1,0.248866,1.748866,3, 0,0,1,0,1.798369,3, 0,0,1,0,1.5,3, 0,0,1,0.43934,1.93934,3, 0,0,1,0,2.502268,3, 0,0,1,0,2.12132,3, 0,0,1,0,2.502268,3, 0,0,1,0.43934,1.93934,3, 0,0,1,0.600816,2.100816,3, 0,1,0,0,3,3, 0,1,0,0.205,3,2.795, 0,1,0,0,3,2.795, 0,1,0,0.205,3,2.795, 0,1,0,0.8525,3,2.1475, 0,1,0,0.205,3,1.5, -1,0,0,0,2.795,2.795, -1,0,0,0,2.54773,1.5, -1,0,0,0,2.116861,2.116861, -1,0,0,0,2.54773,1.5, -1,0,0,0,2.795,2.795, -1,0,0,0,2.795,1.5, -1,0,0,0,3,3, -1,0,0,0,2.795,2.795, -1,0,0,0,2.795,3, -1,0,0,0,3,2.795, -1,0,0,0,2.795,1.5, -1,0,0,0,2.795,2.795, -1,0,0,0,2.795,1.5, -1,0,0,0,3,2.795, -1,0,0,0,3,1.5, -1,0,0,0,2.795,2.795, -1,0,0,0,2.116861,2.116861, -1,0,0,0,1.64319,2.795, -1,0,0,0,3,1.5, -1,0,0,0,2.795,1.145992, -1,0,0,0,2.795,1.5, -1,0,0,0,2.795,1.145992, -1,0,0,0,3,1.5, -1,0,0,0,3,0.8525, 0,1,0,0.205,3,2.795, 0,1,0,1.025097,3,2.320097, 0,1,0,0.8525,3,2.1475, 0,1,0,1.025097,3,2.320097, 0,1,0,0.205,3,2.795, 0,1,0,1.35681,3,2.795, 0,0,1,1.06066,2.56066,3, 0,0,1,1.201631,3,3, 0,0,1,0.87868,3,3, 0,0,1,1.201631,3,3, 0,0,1,1.06066,2.56066,3, 0,0,1,1.251134,2.751134,3, 0,1,0,0.45227,3,1.5, 0,1,0,0.350583,3,1.354417, 0,1,0,0.205,3,1.5, 0,1,0,0.205,3,3, 0,1,0,1.35681,3,2.795, 0,1,0,0.205,3,2.795, 0,1,0,1.35681,3,2.795, 0,1,0,0.205,3,3, 0,1,0,1.5,3,3, 0.974602,-0.205981,0.087875,1.5,3,3, 0,0.83205,0.5547,0.205,3,3, 0,0,1,0.497732,3,3, 0.974602,-0.205981,0.087875,1.5,3,3, 0,0,1,0.497732,3,3, 0,0,1,0.87868,3,3, 0.974602,-0.205981,0.087875,1.5,3,3, 0,0,1,0.87868,3,3, 0,0,1,1.201631,3,3, 0,0,1,0.248866,1.748866,3, 0,0,1,0,2.12132,3, 0,0,1,0,1.798369,3, 0,0,1,0,2.12132,3, 0,0,1,0.248866,1.748866,3, 0,0,1,0.43934,1.93934,3, -1,0,0,0,2.795,1.145992, -1,0,0,0,2.54773,1.5, -1,0,0,0,2.795,1.5, -1,0,0,0,3,2.795, -1,0,0,0,2.795,2.795, -1,0,0,0,3,3, -1,0,0,0,1.798369,3, -1,0,0,0,1.64319,2.795, -1,0,0,0,1.5,3, -1,0,0,0,1.64319,2.795, -1,0,0,0,1.798369,3, -1,0,0,0,2.795,2.795, -1,0,0,0,2.795,2.795, -1,0,0,0,1.798369,3, -1,0,0,0,2.12132,3, -1,0,0,0,2.795,2.795, -1,0,0,0,2.12132,3, -1,0,0,0,2.502268,3, -1,0,0,0,2.795,2.795, -1,0,0,0,2.502268,3, -1,0,0,0,2.795,3, 0,1,0,0.205,3,3, 0,1,0,0.205,3,2.795, 0,1,0,0,3,3, 0,0,1,1.5,3,3, 0,0,1,1.201631,3,3, 0,0,1,1.251134,2.751134,3, 0,1,0,0,3,2.795, 0,1,0,0.205,3,1.5, 0,1,0,0,3,1.5, 0,1,0,0.205,3,1.5, 0,1,0,0,3,2.795, 0,1,0,0.205,3,2.795, 0,1,0,1.025097,3,2.320097, 0,1,0,0.883139,3,2.116861, 0,1,0,0.8525,3,2.1475, 0.633994,-0.633994,-0.442836,0,3,0.8525, 0.633994,-0.633994,-0.442836,1.35681,3,2.795, 0.633994,-0.633994,-0.442836,0,2.795,1.145992, 0,-1,0,1.35681,3,2.795, 0,-1,0,0,3,0.8525, 0,-1,0,1.025097,3,2.320097, 0,1,0,1.025097,3,2.320097, 0,1,0,0,3,0.8525, 0,1,0,0.205,3,1.145992, 0,-1,0,1.025097,3,2.320097, 0,-1,0,0.205,3,1.145992, 0,-1,0,0.350583,3,1.354417, 0,1,0,1.025097,3,2.320097, 0,1,0,0.350583,3,1.354417, 0,1,0,0.45227,3,1.5, 0,-1,0,1.025097,3,2.320097, 0,-1,0,0.45227,3,1.5, 0,-1,0,0.883139,3,2.116861, 0.633994,-0.633994,-0.442836,0,1.64319,2.795, 0.633994,-0.633994,-0.442836,0.248866,1.748866,3, 0.633994,-0.633994,-0.442836,0,1.5,3, 0.633994,-0.633994,-0.442836,0.248866,1.748866,3, 0.633994,-0.633994,-0.442836,0,1.64319,2.795, 0.633994,-0.633994,-0.442836,0,2.116861,2.116861, 0.633994,-0.633994,-0.442836,0.248866,1.748866,3, 0.633994,-0.633994,-0.442836,0,2.116861,2.116861, 0.633994,-0.633994,-0.442836,0.43934,1.93934,3, 0.633994,-0.633994,-0.442836,0.43934,1.93934,3, 0.633994,-0.633994,-0.442836,0,2.116861,2.116861, 0.633994,-0.633994,-0.442836,0.600816,2.100816,3, 0.633994,-0.633994,-0.442836,0.600816,2.100816,3, 0.633994,-0.633994,-0.442836,0,2.116861,2.116861, 0.633994,-0.633994,-0.442836,0.75,2.25,3, 0.633994,-0.633994,-0.442836,0.75,2.25,3, 0.633994,-0.633994,-0.442836,0,2.116861,2.116861, 0.633994,-0.633994,-0.442836,0,2.54773,1.5, 0.633994,-0.633994,-0.442836,0.75,2.25,3, 0.633994,-0.633994,-0.442836,0,2.54773,1.5, 0.633994,-0.633994,-0.442836,0.899184,2.399184,3, 0.633994,-0.633994,-0.442836,0.899184,2.399184,3, 0.633994,-0.633994,-0.442836,0,2.54773,1.5, 0.633994,-0.633994,-0.442836,1.06066,2.56066,3, 0.633994,-0.633994,-0.442836,1.06066,2.56066,3, 0.633994,-0.633994,-0.442836,0,2.54773,1.5, 0.633994,-0.633994,-0.442836,0,2.795,1.145992, 0.633994,-0.633994,-0.442836,1.06066,2.56066,3, 0.633994,-0.633994,-0.442836,0,2.795,1.145992, 0.633994,-0.633994,-0.442836,1.251134,2.751134,3, 0.633994,-0.633994,-0.442836,1.251134,2.751134,3, 0.633994,-0.633994,-0.442836,0,2.795,1.145992, 0.633994,-0.633994,-0.442836,1.5,3,3, 0.633994,-0.633994,-0.442836,1.5,3,3, 0.633994,-0.633994,-0.442836,0,2.795,1.145992, 0.633994,-0.633994,-0.442836,1.35681,3,2.795 }; static const struct gllist lament_model_iso_unw_frame = { GL_N3F_V3F, GL_TRIANGLES, 204, lament_model_iso_unw_data, 0 }; const struct gllist *lament_model_iso_unw = &lament_model_iso_unw_frame; static const float lament_model_iso_use_data[] = { 0,0,1,2.502268,0,3, 0,0,1,2.57375,0.42625,3, 0,0,1,2.360168,0.212668,3, 0,0,1,2.57375,0.42625,3, 0,0,1,2.502268,0,3, 0,0,1,2.795,0,3, 0,0,1,2.57375,0.42625,3, 0,0,1,2.795,0,3, 0,0,1,3,0,3, 0,0,1,3,0.497732,3, 0,0,1,3,0.8525,3, 0,0,1,2.787332,0.639832,3, 0,-1,0,3,0,2.795, 0,-1,0,2.795,0,2.3525, 0,-1,0,3,0,2.1475, 0,-1,0,2.795,0,2.3525, 0,-1,0,3,0,2.795, 0,-1,0,2.795,0,2.795, 0,-1,0,2.795,0,3, 0,-1,0,2.3525,0,2.795, 0,-1,0,2.795,0,2.795, 0,-1,0,2.3525,0,2.795, 0,-1,0,2.795,0,3, 0,-1,0,2.502268,0,3, 0,-1,0,2.3525,0,2.795, 0,-1,0,2.502268,0,3, 0,-1,0,2.1475,0,3, 0,-1,0,3,0,3, 0,-1,0,2.795,0,2.795, 0,-1,0,3,0,2.795, 0,-1,0,2.795,0,2.795, 0,-1,0,2.57375,0,2.57375, 0,-1,0,2.795,0,2.3525, 0,-1,0,2.795,0,3, 0,-1,0,2.795,0,2.795, 0,-1,0,3,0,3, 1,0,0,3,0.205,2.795, 1,0,0,3,0,3, 1,0,0,3,0,2.795, 1,0,0,3,0,2.1475, 1,0,0,3,0.205,2.795, 1,0,0,3,0,2.795, 1,0,0,3,0.205,2.795, 1,0,0,3,0,2.1475, 1,0,0,3,0.205,2.3525, 1,0,0,3,0.205,3, 1,0,0,3,0,3, 1,0,0,3,0.205,2.795, 1,0,0,3,0.6475,2.795, 1,0,0,3,0.205,3, 1,0,0,3,0.205,2.795, 1,0,0,3,0.205,3, 1,0,0,3,0.6475,2.795, 1,0,0,3,0.497732,3, 1,0,0,3,0.497732,3, 1,0,0,3,0.6475,2.795, 1,0,0,3,0.8525,3, 1,0,0,3,0.6475,2.795, 1,0,0,3,0.205,2.795, 1,0,0,3,0.42625,2.57375, 0,0,1,2.502268,0,3, 0,0,1,2.360168,0.212668,3, 0,0,1,2.1475,0,3, 1,0,0,3,0.42625,2.57375, 1,0,0,3,0.205,2.795, 1,0,0,3,0.205,2.3525, 0,0,1,3,0,3, 0,0,1,2.787332,0.639832,3, 0,0,1,2.57375,0.42625,3, 0,0,1,2.787332,0.639832,3, 0,0,1,3,0,3, 0,0,1,3,0.497732,3, 0.707107,0,0.707107,3,0.497732,3, 0.485071,-0.485071,0.727607,3,0,3, 1,0,0,3,0.205,3, 0,-1,0,2.3525,0,2.795, 0,-1,0,2.57375,0,2.57375, 0,-1,0,2.795,0,2.795, -0.57735,0.57735,-0.57735,2.795,0,2.3525, -0.57735,0.57735,-0.57735,3,0.205,2.3525, -0.57735,0.57735,-0.57735,3,0,2.1475, -0.57735,0.57735,-0.57735,3,0.205,2.3525, -0.57735,0.57735,-0.57735,2.795,0,2.3525, -0.57735,0.57735,-0.57735,2.57375,0,2.57375, -0.57735,0.57735,-0.57735,3,0.205,2.3525, -0.57735,0.57735,-0.57735,2.57375,0,2.57375, -0.57735,0.57735,-0.57735,3,0.42625,2.57375, -0.57735,0.57735,-0.57735,3,0.42625,2.57375, -0.57735,0.57735,-0.57735,2.57375,0,2.57375, -0.57735,0.57735,-0.57735,2.3525,0,2.795, -0.57735,0.57735,-0.57735,3,0.42625,2.57375, -0.57735,0.57735,-0.57735,2.3525,0,2.795, -0.57735,0.57735,-0.57735,3,0.6475,2.795, -0.57735,0.57735,-0.57735,3,0.6475,2.795, -0.57735,0.57735,-0.57735,2.3525,0,2.795, -0.57735,0.57735,-0.57735,2.1475,0,3, -0.57735,0.57735,-0.57735,3,0.6475,2.795, -0.57735,0.57735,-0.57735,2.1475,0,3, -0.57735,0.57735,-0.57735,2.360168,0.212668,3, -0.57735,0.57735,-0.57735,2.360168,0.212668,3, -0.57735,0.57735,-0.57735,3,0.8525,3, -0.57735,0.57735,-0.57735,3,0.6475,2.795, 0,0,1,3,0.8525,3, 0,0,1,2.360168,0.212668,3, 0,0,1,2.57375,0.42625,3, 0,0,-1,3,0.8525,3, 0,0,-1,2.57375,0.42625,3, 0,0,-1,2.787332,0.639832,3 }; static const struct gllist lament_model_iso_use_frame = { GL_N3F_V3F, GL_TRIANGLES, 108, lament_model_iso_use_data, 0 }; const struct gllist *lament_model_iso_use = &lament_model_iso_use_frame; static const float lament_model_iso_usw_data[] = { 0,0,1,0.332481,1.267766,3, 0,0,1,0,1.5,3, 0,0,1,0,1.201631,3, 0,0,1,0.883139,0.883139,3, 0,0,1,0,0.205,3, 0,0,1,0,0,3, 0,0,1,0,0.205,3, 0,0,1,0.883139,0.883139,3, 0,0,1,0,0.497732,3, 0,0,1,0,0.497732,3, 0,0,1,0.883139,0.883139,3, 0,0,1,0.733368,0.987753,3, 0,0,1,1.5,0,3, 0,0,1,1.317017,0.580081,3, 0,0,1,1.201631,0,3, 0,0,1,1.317017,0.580081,3, 0,0,1,1.5,0,3, 0,0,1,1.5,0.45227,3, 0,0,1,0.87868,0,3, 0,0,1,1.022694,0.785662,3, 0,0,1,0.497732,0,3, 0,0,1,1.022694,0.785662,3, 0,0,1,0.87868,0,3, 0,0,1,1.163402,0.68738,3, 0,-1,0,1.5,0,2.795, 0,-1,0,1.645583,0,2.649417, 0,-1,0,1.854008,0,2.795, -1,0,0,0,0.205,2.795, -1,0,0,0,0,3, -1,0,0,0,0.205,3, 0,-1,0,0,0,3, 0,-1,0,0,0,2.795, 0,-1,0,0.205,0,2.795, 0,-1,0,0.679903,0,1.974903, 0,-1,0,0.205,0,2.795, 0,-1,0,0.205,0,1.64319, 0,-1,0,0.205,0,2.795, 0,-1,0,0.679903,0,1.974903, 0,-1,0,0.8525,0,2.1475, -1,0,0,0,0.497732,3, -1,0,0,0,0.205,2.795, -1,0,0,0,0.205,3, -1,0,0,0,0.205,2.795, -1,0,0,0,0.497732,3, -1,0,0,0,1.295,2.795, -1,0,0,0,1.295,2.795, -1,0,0,0,0.497732,3, -1,0,0,0,0.87868,3, -1,0,0,0,1.295,2.795, -1,0,0,0,0.87868,3, -1,0,0,0,1.201631,3, -1,0,0,0,1.295,2.795, -1,0,0,0,1.201631,3, -1,0,0,0,1.5,3, 0,-1,0,0,0,3, 0,-1,0,0.205,0,2.795, 0,-1,0,0.205,0,3, -1,0,0,0,0.75,2.25, -1,0,0,0,0.205,1.705, -1,0,0,0,0.205,2.795, -1,0,0,0,0.205,2.795, -1,0,0,0,0,2.795, -1,0,0,0,0,3, -1,0,0,0,0.205,2.795, -1,0,0,0,0,1.5, -1,0,0,0,0,2.795, -1,0,0,0,0,1.5, -1,0,0,0,0.205,2.795, -1,0,0,0,0.205,1.705, -1,0,0,0,1.295,2.795, -1,0,0,0,0.75,2.25, -1,0,0,0,0.205,2.795, 0,-1,0,0.205,0,2.795, 0,-1,0,0.8525,0,2.1475, 0,-1,0,1.5,0,2.795, 0,-1,0,2.1475,0,3, 0,-1,0,1.5,0,2.795, 0,-1,0,1.854008,0,2.795, 0,-1,0,1.5,0,2.795, 0,-1,0,2.1475,0,3, 0,-1,0,2.12132,0,3, 0,-1,0,2.12132,0,3, 0,-1,0,1.5,0,3, 0,-1,0,1.5,0,2.795, 0,0,1,1.5,0,3, 0,0,1,2.12132,0,3, 0,0,1,1.798369,0,3, 0,0,1,0.205,0,3, 0,0,1,0.883139,0.883139,3, 0,0,1,0,0,3, 0,0,1,0.883139,0.883139,3, 0,0,1,0.205,0,3, 0,0,1,0.497732,0,3, 0,0,1,0.883139,0.883139,3, 0,0,1,0.497732,0,3, 0,0,1,1.022694,0.785662,3, 0,0,1,1.201631,0,3, 0,0,1,1.163402,0.68738,3, 0,0,1,0.87868,0,3, 0,0,1,1.163402,0.68738,3, 0,0,1,1.201631,0,3, 0,0,1,1.317017,0.580081,3, 0,0,1,1.798369,0,3, 0,0,1,1.5,0.45227,3, 0,0,1,1.5,0,3, 0,0,1,1.5,0.45227,3, 0,0,1,1.798369,0,3, 0,0,1,1.742034,0.283213,3, 0,0,1,1.798369,0,3, 0,0,1,2.110662,0.025731,3, 0,0,1,1.742034,0.283213,3, 0,0,1,2.110662,0.025731,3, 0,0,1,1.798369,0,3, 0,0,1,2.12132,0,3, 0,0,1,0.733368,0.987753,3, 0,0,1,0,0.87868,3, 0,0,1,0,0.497732,3, 0,0,1,0,0.87868,3, 0,0,1,0.733368,0.987753,3, 0,0,1,0.55839,1.109972,3, 0,0,1,0.55839,1.109972,3, 0,0,1,0,1.201631,3, 0,0,1,0,0.87868,3, 0,0,1,0,1.201631,3, 0,0,1,0.55839,1.109972,3, 0,0,1,0.332481,1.267766,3, 0,-1,0,0.205,0,1.64319, 0,-1,0,0,0,2.795, 0,-1,0,0,0,1.5, 0,-1,0,0,0,2.795, 0,-1,0,0.205,0,1.64319, 0,-1,0,0.205,0,2.795, 0,-1,0,1.5,0,3, 0,-1,0,0.205,0,2.795, 0,-1,0,1.5,0,2.795, 0,-1,0,0.205,0,2.795, 0,-1,0,1.5,0,3, 0,-1,0,0.205,0,3, 0,0,1,0.205,0,3, 0,0,1,1.5,0,3, 0,0,1,1.201631,0,3, 0,0,1,0.205,0,3, 0,0,1,1.201631,0,3, 0,0,1,0.87868,0,3, 0,0,-1,0.205,0,3, 0,0,-1,0.87868,0,3, 0,0,-1,0.497732,0,3, 0,-1,0,1.5,0,2.795, 0,-1,0,1.5,0,2.54773, 0,-1,0,1.645583,0,2.649417, 0,-1,0,1.5,0,2.54773, 0,-1,0,0.8525,0,2.1475, 0,-1,0,0.883139,0,2.116861, 0,-1,0,0.8525,0,2.1475, 0,-1,0,1.5,0,2.54773, 0,-1,0,1.5,0,2.795, 0,-1,0,0.8525,0,2.1475, 0,-1,0,0.679903,0,1.974903, 0,-1,0,0.883139,0,2.116861, 0,0,1,2.1475,0,3, 0,0,1,2.110662,0.025731,3, 0,0,1,2.12132,0,3, 0.442836,0.633994,-0.633994,0,0.205,1.705, 0.442836,0.633994,-0.633994,0.205,0,1.64319, 0.442836,0.633994,-0.633994,0,0,1.5, 0.442836,0.633994,-0.633994,0.205,0,1.64319, 0.442836,0.633994,-0.633994,0,0.205,1.705, 0.442836,0.633994,-0.633994,0.679903,0,1.974903, 0.442836,0.633994,-0.633994,0.679903,0,1.974903, 0.442836,0.633994,-0.633994,0,0.205,1.705, 0.442836,0.633994,-0.633994,0,0.75,2.25, 0.442836,0.633994,-0.633994,0.679903,0,1.974903, 0.442836,0.633994,-0.633994,0,0.75,2.25, 0.442836,0.633994,-0.633994,0.883139,0,2.116861, 0.442836,0.633994,-0.633994,0.883139,0,2.116861, 0.442836,0.633994,-0.633994,0,0.75,2.25, 0.442836,0.633994,-0.633994,1.5,0,2.54773, 0.442836,0.633994,-0.633994,1.5,0,2.54773, 0.442836,0.633994,-0.633994,0,0.75,2.25, 0.442836,0.633994,-0.633994,0,1.295,2.795, 0.442836,0.633994,-0.633994,1.5,0,2.54773, 0.442836,0.633994,-0.633994,0,1.295,2.795, 0.442836,0.633994,-0.633994,1.645583,0,2.649417, 0.442836,0.633994,-0.633994,1.645583,0,2.649417, 0.442836,0.633994,-0.633994,0,1.295,2.795, 0.442836,0.633994,-0.633994,1.854008,0,2.795, 0.442836,0.633994,-0.633994,1.854008,0,2.795, 0.442836,0.633994,-0.633994,0,1.295,2.795, 0.442836,0.633994,-0.633994,0,1.5,3, 0.442836,0.633994,-0.633994,1.854008,0,2.795, 0.442836,0.633994,-0.633994,0,1.5,3, 0.442836,0.633994,-0.633994,2.110662,0.025731,3, 0.442836,0.633994,-0.633994,1.854008,0,2.795, 0.442836,0.633994,-0.633994,2.110662,0.025731,3, 0.442836,0.633994,-0.633994,2.1475,0,3, 0,0,1,2.110662,0.025731,3, 0,0,1,0,1.5,3, 0,0,1,0.332481,1.267766,3, 0,0,1,2.110662,0.025731,3, 0,0,1,0.332481,1.267766,3, 0,0,1,0.55839,1.109972,3, 0,0,-1,2.110662,0.025731,3, 0,0,-1,0.55839,1.109972,3, 0,0,-1,0.733368,0.987753,3, 0,0,-1,2.110662,0.025731,3, 0,0,-1,0.733368,0.987753,3, 0,0,-1,0.883139,0.883139,3, 0,0,1,2.110662,0.025731,3, 0,0,1,0.883139,0.883139,3, 0,0,1,1.022694,0.785662,3, 0,0,-1,2.110662,0.025731,3, 0,0,-1,1.022694,0.785662,3, 0,0,-1,1.163402,0.68738,3, 0,0,-1,2.110662,0.025731,3, 0,0,-1,1.163402,0.68738,3, 0,0,-1,1.317017,0.580081,3, 0,0,1,2.110662,0.025731,3, 0,0,1,1.317017,0.580081,3, 0,0,1,1.5,0.45227,3, 0,0,-1,2.110662,0.025731,3, 0,0,-1,1.5,0.45227,3, 0,0,-1,1.742034,0.283213,3 }; static const struct gllist lament_model_iso_usw_frame = { GL_N3F_V3F, GL_TRIANGLES, 222, lament_model_iso_usw_data, 0 }; const struct gllist *lament_model_iso_usw = &lament_model_iso_usw_frame; static const float lament_model_leviathan_data[] = { 0.81642,0.40914,-0.407508,2.250059,3.000719,2.250389, 0.869552,0.350012,-0.348384,6.835994,-3.832072,6.831978, 0.81642,0.40914,-0.407508,2.253099,0.752183,-0.001065, 0.81642,0.40914,-0.407508,2.250059,3.000719,2.250389, 0.81642,0.40914,-0.407508,2.253099,0.752183,-0.001065, 0.755275,0.464254,-0.462632,-3.832693,6.833336,-3.834015, -0.348245,-0.869659,-0.349884,6.835994,-3.832072,6.831978, -0.407383,-0.816545,-0.409015,0.001794,0.748994,2.24762, -0.407383,-0.816545,-0.409015,2.253099,0.752183,-0.001065, -0.349891,0.348284,0.86964,6.835994,-3.832072,6.831978, -0.409037,0.407405,0.816523,2.250059,3.000719,2.250389, -0.409037,0.407405,0.816523,0.001794,0.748994,2.24762, -0.409037,0.407405,0.816523,0.001794,0.748994,2.24762, -0.409037,0.407405,0.816523,2.250059,3.000719,2.250389, -0.464168,0.462527,0.755392,-3.832693,6.833336,-3.834015, -0.407383,-0.816545,-0.409015,0.001794,0.748994,2.24762, -0.462522,-0.755417,-0.464132,-3.832693,6.833336,-3.834015, -0.407383,-0.816545,-0.409015,2.253099,0.752183,-0.001065 }; static const struct gllist lament_model_leviathan_frame = { GL_N3F_V3F, GL_TRIANGLES, 18, lament_model_leviathan_data, 0 }; const struct gllist *lament_model_leviathan = &lament_model_leviathan_frame; static const float lament_model_lid_a_data[] = { 0,-1,0,1.5,0,2.795, 0,-1,0,0.205,0,1.5, 0,-1,0,1.5,0,1.5, 1,0,0,1.5,0.0625,2.7325, 1,0,0,1.5,0,2.795, 1,0,0,1.5,0,1.5, 0,0,-1,1.5,0,1.5, 0,0,-1,0.205,0,1.5, 0,0,-1,0.2675,0.0625,1.5, -0.57735,0.57735,0.57735,1.5,0,2.795, -0.57735,0.57735,0.57735,0.2675,0.0625,1.5, -0.57735,0.57735,0.57735,0.205,0,1.5, -0.57735,0.57735,0.57735,0.2675,0.0625,1.5, -0.57735,0.57735,0.57735,1.5,0,2.795, -0.57735,0.57735,0.57735,1.5,0.0625,2.7325, 0.05058,0.997438,-0.05058,1.5,0.0625,2.7325, 0.05058,0.997438,-0.05058,1.5,0,1.5, 0.05058,0.997438,-0.05058,0.2675,0.0625,1.5 }; static const struct gllist lament_model_lid_a_frame = { GL_N3F_V3F, GL_TRIANGLES, 18, lament_model_lid_a_data, 0 }; const struct gllist *lament_model_lid_a = &lament_model_lid_a_frame; static const float lament_model_lid_b_data[] = { 0,-1,0,1.5,0,2.795, 0,-1,0,1.5,0,1.5, 0,-1,0,2.795,0,1.5, 0,0,-1,2.795,0,1.5, 0,0,-1,1.5,0,1.5, 0,0,-1,2.7325,0.0625,1.5, -1,0,0,1.5,0.0625,2.7325, -1,0,0,1.5,0,1.5, -1,0,0,1.5,0,2.795, -0.05058,0.997438,-0.05058,1.5,0.0625,2.7325, -0.05058,0.997438,-0.05058,2.7325,0.0625,1.5, -0.05058,0.997438,-0.05058,1.5,0,1.5, 0.57735,0.57735,0.57735,2.7325,0.0625,1.5, 0.57735,0.57735,0.57735,1.5,0,2.795, 0.57735,0.57735,0.57735,2.795,0,1.5, 0.57735,0.57735,0.57735,1.5,0,2.795, 0.57735,0.57735,0.57735,2.7325,0.0625,1.5, 0.57735,0.57735,0.57735,1.5,0.0625,2.7325 }; static const struct gllist lament_model_lid_b_frame = { GL_N3F_V3F, GL_TRIANGLES, 18, lament_model_lid_b_data, 0 }; const struct gllist *lament_model_lid_b = &lament_model_lid_b_frame; static const float lament_model_lid_base_data[] = { 0,-1,0,3,0,1.5, 0,-1,0,2.795,0,0.205, 0,-1,0,3,0,0.205, 0,-1,0,2.795,0,0.205, 0,-1,0,3,0,1.5, 0,-1,0,2.795,0,1.5, 0,1,0,0.205,3,0.205, 0,1,0,0.205,3,0, 0,1,0,0,3,0, 0,-1,0,1.5,0,0.205, 0,-1,0,1.201631,0,0, 0,-1,0,1.5,0,0, 0,-1,0,1.201631,0,0, 0,-1,0,1.5,0,0.205, 0,-1,0,0.87868,0,0, 0,-1,0,0.87868,0,0, 0,-1,0,1.5,0,0.205, 0,-1,0,0.497732,0,0, 0,-1,0,0.497732,0,0, 0,-1,0,1.5,0,0.205, 0,-1,0,0.205,0,0, 0,-1,0,0.205,0,0, 0,-1,0,1.5,0,0.205, 0,-1,0,0.205,0,0.205, 0,0,1,1.982139,2.087488,3, 0,0,1,2.502268,3,3, 0,0,1,1.922233,2.131917,3, 0,0,1,2.502268,3,3, 0,0,1,1.982139,2.087488,3, 0,0,1,2.037401,2.037401,3, 0,0,1,2.502268,3,3, 0,0,1,2.037401,2.037401,3, 0,0,1,3,3,3, 0,0.447214,0.894427,2.502268,3,3, 0.408248,0.408248,0.816497,3,3,3, 0,1,0,2.795,3,3, 1,0,0,3,3,0.205, 1,0,0,3,2.795,1.5, 1,0,0,3,2.795,0.205, 1,0,0,3,2.795,1.5, 1,0,0,3,3,0.205, 1,0,0,3,3,1.5, 0,-1,0,2.795,0,3, 0,-1,0,1.5,0,2.795, 0,-1,0,2.795,0,2.795, 0,-1,0,1.5,0,2.795, 0,-1,0,2.795,0,3, 0,-1,0,1.5,0,3, 0,-0.447214,0.894427,1.5,0,3, 0,-1,0,2.795,0,3, 0,0,1,2.502268,0,3, 0,-0.447214,0.894427,1.5,0,3, 0,0,1,2.502268,0,3, 0,0,1,2.12132,0,3, 0,0,1,1.5,0,3, 0,0,1,2.12132,0,3, 0,0,1,1.798369,0,3, 0,-1,0,0.205,0,2.795, 0,-1,0,0,0,1.5, 0,-1,0,0.205,0,1.5, 0,-1,0,0,0,1.5, 0,-1,0,0.205,0,2.795, 0,-1,0,0,0,2.795, -1,0,0,0,0.205,2.795, -1,0,0,0,0,2.795, -1,0,0,0,0,3, 0,0,-1,0.962599,0.962599,0, 0,0,-1,0.205,0,0, 0,0,-1,0,0,0, 0,0,-1,0.205,0,0, 0,0,-1,0.962599,0.962599,0, 0,0,-1,0.497732,0,0, 0,0,-1,0.497732,0,0, 0,0,-1,0.962599,0.962599,0, 0,0,-1,1.017861,0.912512,0, 0,0,-1,0.497732,0,0, 0,0,-1,1.017861,0.912512,0, 0,0,-1,1.077767,0.868083,0, -0.57735,-0.57735,-0.57735,2.1475,0,2.1475, -0.57735,-0.57735,-0.57735,2.545,0.25,1.5, -0.57735,-0.57735,-0.57735,2.795,0,1.5, -0.57735,-0.57735,-0.57735,2.545,0.25,1.5, -0.57735,-0.57735,-0.57735,2.1475,0,2.1475, -0.57735,-0.57735,-0.57735,2.0225,0.25,2.0225, -0.57735,-0.57735,0.57735,2.1475,0,0.8525, -0.57735,-0.57735,0.57735,1.5,0.25,0.455, -0.57735,-0.57735,0.57735,1.5,0,0.205, -0.57735,-0.57735,0.57735,1.5,0.25,0.455, -0.57735,-0.57735,0.57735,2.1475,0,0.8525, -0.57735,-0.57735,0.57735,2.0225,0.25,0.9775, 0.57735,-0.57735,-0.57735,0.9775,0.25,2.0225, 0.57735,-0.57735,-0.57735,1.5,0,2.795, 0.57735,-0.57735,-0.57735,0.8525,0,2.1475, 0.57735,-0.57735,-0.57735,1.5,0,2.795, 0.57735,-0.57735,-0.57735,0.9775,0.25,2.0225, 0.57735,-0.57735,-0.57735,1.5,0.25,2.545, 0.57735,-0.57735,0.57735,0.9775,0.25,0.9775, 0.57735,-0.57735,0.57735,0.205,0,1.5, 0.57735,-0.57735,0.57735,0.8525,0,0.8525, 0.57735,-0.57735,0.57735,0.205,0,1.5, 0.57735,-0.57735,0.57735,0.9775,0.25,0.9775, 0.57735,-0.57735,0.57735,0.455,0.25,1.5, 0,-1,0,0.205,0,2.795, 0,-1,0,0.8525,0,2.1475, 0,-1,0,1.5,0,2.795, 0,-1,0,0.205,0,0.205, 0,-1,0,0,0,0.205, 0,-1,0,0,0,0, 0,-1,0,2.795,0,0.205, 0,-1,0,3,0,0, 0,-1,0,3,0,0.205, 0,-1,0,0.205,0,1.5, 0,-1,0,0.205,0,0.205, 0,-1,0,0.8525,0,0.8525, 0,-1,0,0.205,0,0.205, 0,-1,0,0,0,1.5, 0,-1,0,0,0,0.205, 0,-1,0,0,0,1.5, 0,-1,0,0.205,0,0.205, 0,-1,0,0.205,0,1.5, 0,-1,0,2.795,0,0.205, 0,-1,0,2.502268,0,0, 0,-1,0,2.795,0,0, 0,-1,0,2.502268,0,0, 0,-1,0,2.795,0,0.205, 0,-1,0,2.12132,0,0, 0,-1,0,2.12132,0,0, 0,-1,0,2.795,0,0.205, 0,-1,0,1.798369,0,0, 0,-1,0,1.798369,0,0, 0,-1,0,2.795,0,0.205, 0,-1,0,1.5,0,0, 0,-1,0,1.5,0,0, 0,-1,0,2.795,0,0.205, 0,-1,0,1.5,0,0.205, 0,-1,0,2.795,0,1.5, 0,-1,0,2.1475,0,0.8525, 0,-1,0,2.795,0,0.205, 0,-1,0,2.795,0,3, 0,-1,0,2.795,0,2.795, 0,-1,0,3,0,3, 0,-1,0,1.5,0,2.795, 0,-1,0,2.1475,0,2.1475, 0,-1,0,2.795,0,2.795, 0,-1,0,3,0,2.795, 0,-1,0,2.795,0,1.5, 0,-1,0,3,0,1.5, 0,-1,0,2.795,0,1.5, 0,-1,0,3,0,2.795, 0,-1,0,2.795,0,2.795, 0,-1,0,1.5,0,3, 0,-1,0,0.205,0,2.795, 0,-1,0,1.5,0,2.795, 0,-1,0,0.205,0,2.795, 0,-1,0,1.5,0,3, 0,-1,0,0.205,0,3, 0,0,1,0.205,0,3, 0,0,1,1.5,0,3, 0,0,1,1.201631,0,3, 0,0,1,0.205,0,3, 0,0,1,1.201631,0,3, 0,0,1,0.87868,0,3, 0,0,-1,0.205,0,3, 0,0,-1,0.87868,0,3, 0,0,-1,0.497732,0,3, 0,-1,0,0,0,3, 0,-1,0,0.205,0,2.795, 0,-1,0,0.205,0,3, 0,0,-1,1.5,3,0, 0,0,-1,1.351731,2.245397,0, 0,0,-1,1.201631,3,0, 0,0,-1,1.351731,2.245397,0, 0,0,-1,1.5,3,0, 0,0,-1,1.425507,2.25634,0, 0,0,-1,1.425507,2.25634,0, 0,0,-1,1.5,3,0, 0,0,-1,1.5,2.26,0, 0,0,-1,1.798369,3,0, 0,0,-1,1.5,2.26,0, 0,0,-1,1.5,3,0, 0,0,-1,1.5,2.26,0, 0,0,-1,1.798369,3,0, 0,0,-1,1.574493,2.25634,0, 0,0,-1,1.574493,2.25634,0, 0,0,-1,1.798369,3,0, 0,0,-1,1.648269,2.245397,0, 0,0,-1,1.982139,0.912512,0, 0,0,-1,2.502268,0,0, 0,0,-1,1.922233,0.868083,0, 0,0,-1,2.502268,0,0, 0,0,-1,1.982139,0.912512,0, 0,0,-1,2.037401,0.962599,0, 0,0,-1,2.502268,0,0, 0,0,-1,2.037401,0.962599,0, 0,0,-1,3,0,0, 0,-0.447214,-0.894427,2.502268,0,0, 0.408248,-0.408248,-0.816497,3,0,0, 0,-1,0,2.795,0,0, 0,0,-1,1.858262,0.82974,0, 0,0,-1,2.12132,0,0, 0,0,-1,1.790839,0.797852,0, 0,0,-1,2.12132,0,0, 0,0,-1,1.858262,0.82974,0, 0,0,-1,1.922233,0.868083,0, 0,0,-1,2.12132,0,0, 0,0,-1,1.922233,0.868083,0, 0,0,-1,2.502268,0,0, 0,0,-1,1.351731,0.754603,0, 0,0,-1,1.5,0,0, 0,0,-1,1.201631,0,0, 0,0,-1,1.5,0,0, 0,0,-1,1.351731,0.754603,0, 0,0,-1,1.425507,0.74366,0, 0,0,-1,1.5,0,0, 0,0,-1,1.425507,0.74366,0, 0,0,-1,1.5,0.74,0, 0,0,-1,1.209161,0.797852,0, 0,0,-1,1.201631,0,0, 0,0,-1,0.87868,0,0, 0,0,-1,1.201631,0,0, 0,0,-1,1.209161,0.797852,0, 0,0,-1,1.279384,0.772725,0, 0,0,-1,1.201631,0,0, 0,0,-1,1.279384,0.772725,0, 0,0,-1,1.351731,0.754603,0, 0,0,-1,0.868083,1.077767,0, 0,0,-1,0,0.205,0, 0,0,-1,0,0.497732,0, 0,0,-1,0,0.205,0, 0,0,-1,0.868083,1.077767,0, 0,0,-1,0,0,0, 0,0,-1,0,0,0, 0,0,-1,0.868083,1.077767,0, 0,0,-1,0.912512,1.017861,0, 0,0,-1,0,0,0, 0,0,-1,0.912512,1.017861,0, 0,0,-1,0.962599,0.962599,0, 0,0,-1,1.077767,0.868083,0, 0,0,-1,0.87868,0,0, 0,0,-1,0.497732,0,0, 0,0,-1,0.87868,0,0, 0,0,-1,1.077767,0.868083,0, 0,0,-1,1.141738,0.82974,0, 0,0,-1,0.87868,0,0, 0,0,-1,1.141738,0.82974,0, 0,0,-1,1.209161,0.797852,0, 0,0,-1,0.74,1.5,0, 0,0,-1,0,1.201631,0, 0,0,-1,0,1.5,0, 0,0,-1,0,1.201631,0, 0,0,-1,0.74,1.5,0, 0,0,-1,0.74366,1.425507,0, 0,0,-1,0,1.201631,0, 0,0,-1,0.74366,1.425507,0, 0,0,-1,0.754603,1.351731,0, 0,0,-1,0.754603,1.648269,0, 0,0,-1,0,1.5,0, 0,0,-1,0,1.798369,0, 0,0,-1,0,1.5,0, 0,0,-1,0.754603,1.648269,0, 0,0,-1,0.74366,1.574493,0, 0,0,-1,0,1.5,0, 0,0,-1,0.74366,1.574493,0, 0,0,-1,0.74,1.5,0, 0,0,-1,1.574493,0.74366,0, 0,0,-1,1.5,0,0, 0,0,-1,1.5,0.74,0, 0,0,-1,1.5,0,0, 0,0,-1,1.574493,0.74366,0, 0,0,-1,1.798369,0,0, 0,0,-1,1.798369,0,0, 0,0,-1,1.574493,0.74366,0, 0,0,-1,1.648269,0.754603,0, 0,0,-1,2.502268,3,0, 0,0,-1,1.982139,2.087488,0, 0,0,-1,1.922233,2.131917,0, 0,0,-1,1.982139,2.087488,0, 0,0,-1,2.502268,3,0, 0,0,-1,2.037401,2.037401,0, 0,0,-1,2.037401,2.037401,0, 0,0,-1,2.502268,3,0, 0,0,-1,3,3,0, 0.408248,0.408248,-0.816497,3,3,0, 0,0.447214,-0.894427,2.502268,3,0, 0,1,0,2.795,3,0, 0,0,-1,3,3,0, 0,0,-1,2.087488,1.982139,0, 0,0,-1,2.037401,2.037401,0, 0,0,-1,2.087488,1.982139,0, 0,0,-1,3,3,0, 0,0,-1,2.131917,1.922233,0, 0,0,-1,2.131917,1.922233,0, 0,0,-1,3,3,0, 0,0,-1,3,2.502268,0, 0.447214,0,-0.894427,3,2.502268,0, 0.408248,0.408248,-0.816497,3,3,0, 1,0,0,3,2.795,0, 0,0,-1,1.720616,0.772725,0, 0,0,-1,1.798369,0,0, 0,0,-1,1.648269,0.754603,0, 0,0,-1,1.798369,0,0, 0,0,-1,1.720616,0.772725,0, 0,0,-1,1.790839,0.797852,0, 0,0,-1,1.798369,0,0, 0,0,-1,1.790839,0.797852,0, 0,0,-1,2.12132,0,0, 0,0,-1,2.12132,3,0, 0,0,-1,1.858262,2.17026,0, 0,0,-1,1.790839,2.202148,0, 0,0,-1,1.858262,2.17026,0, 0,0,-1,2.12132,3,0, 0,0,-1,1.922233,2.131917,0, 0,0,-1,1.922233,2.131917,0, 0,0,-1,2.12132,3,0, 0,0,-1,2.502268,3,0, 0,0,-1,0.962599,2.037401,0, 0,0,-1,0,2.795,0, 0,0,-1,0,3,0, 0,0,-1,0,2.795,0, 0,0,-1,0.962599,2.037401,0, 0,0,-1,0,2.502268,0, 0,0,-1,0,2.502268,0, 0,0,-1,0.962599,2.037401,0, 0,0,-1,0.912512,1.982139,0, 0,0,-1,0,2.502268,0, 0,0,-1,0.912512,1.982139,0, 0,0,-1,0.868083,1.922233,0, 0,0,-1,0.205,3,0, 0,0,-1,0.962599,2.037401,0, 0,0,-1,0,3,0, 0,0,-1,0.962599,2.037401,0, 0,0,-1,0.205,3,0, 0,0,-1,0.497732,3,0, 0,0,-1,0.962599,2.037401,0, 0,0,-1,0.497732,3,0, 0,0,-1,1.017861,2.087488,0, 0,0,-1,1.017861,2.087488,0, 0,0,-1,0.497732,3,0, 0,0,-1,1.077767,2.131917,0, 0,0,-1,0.797852,1.209161,0, 0,0,-1,0,0.497732,0, 0,0,-1,0,0.87868,0, 0,0,-1,0,0.497732,0, 0,0,-1,0.797852,1.209161,0, 0,0,-1,0.82974,1.141738,0, 0,0,-1,0,0.497732,0, 0,0,-1,0.82974,1.141738,0, 0,0,-1,0.868083,1.077767,0, 0,0,-1,1.798369,3,0, 0,0,-1,1.720616,2.227275,0, 0,0,-1,1.648269,2.245397,0, 0,0,-1,1.720616,2.227275,0, 0,0,-1,1.798369,3,0, 0,0,-1,1.790839,2.202148,0, 0,0,-1,1.790839,2.202148,0, 0,0,-1,1.798369,3,0, 0,0,-1,2.12132,3,0, 0,0,-1,0.868083,1.922233,0, 0,0,-1,0,2.12132,0, 0,0,-1,0,2.502268,0, 0,0,-1,0,2.12132,0, 0,0,-1,0.868083,1.922233,0, 0,0,-1,0.82974,1.858262,0, 0,0,-1,0,2.12132,0, 0,0,-1,0.82974,1.858262,0, 0,0,-1,0.797852,1.790839,0, 0,0,-1,3,2.12132,0, 0,0,-1,2.227275,1.720616,0, 0,0,-1,2.202148,1.790839,0, 0,0,-1,2.227275,1.720616,0, 0,0,-1,3,2.12132,0, 0,0,-1,2.245397,1.648269,0, 0,0,-1,2.245397,1.648269,0, 0,0,-1,3,2.12132,0, 0,0,-1,3,1.798369,0, 0,0,-1,3,1.798369,0, 0,0,-1,2.25634,1.574493,0, 0,0,-1,2.245397,1.648269,0, 0,0,-1,2.25634,1.574493,0, 0,0,-1,3,1.798369,0, 0,0,-1,2.26,1.5,0, 0,0,-1,2.26,1.5,0, 0,0,-1,3,1.798369,0, 0,0,-1,3,1.5,0, 0,0,-1,3,2.502268,0, 0,0,-1,2.17026,1.858262,0, 0,0,-1,2.131917,1.922233,0, 0,0,-1,2.17026,1.858262,0, 0,0,-1,3,2.502268,0, 0,0,-1,2.202148,1.790839,0, 0,0,-1,2.202148,1.790839,0, 0,0,-1,3,2.502268,0, 0,0,-1,3,2.12132,0, 0,0,-1,0.754603,1.351731,0, 0,0,-1,0,0.87868,0, 0,0,-1,0,1.201631,0, 0,0,-1,0,0.87868,0, 0,0,-1,0.754603,1.351731,0, 0,0,-1,0.772725,1.279384,0, 0,0,-1,0,0.87868,0, 0,0,-1,0.772725,1.279384,0, 0,0,-1,0.797852,1.209161,0, 0,0,-1,2.087488,1.017861,0, 0,0,-1,3,0,0, 0,0,-1,2.037401,0.962599,0, 0,0,-1,3,0,0, 0,0,-1,2.087488,1.017861,0, 0,0,-1,2.131917,1.077767,0, 0,0,-1,3,0,0, 0,0,-1,2.131917,1.077767,0, 0,0,-1,3,0.497732,0, 0.408248,-0.408248,-0.816497,3,0,0, 0.6,0,-0.8,3,0.497732,0, 1,0,0,3,0.205,0, 0,0,-1,0.797852,1.790839,0, 0,0,-1,0,1.798369,0, 0,0,-1,0,2.12132,0, 0,0,-1,0,1.798369,0, 0,0,-1,0.797852,1.790839,0, 0,0,-1,0.772725,1.720616,0, 0,0,-1,0,1.798369,0, 0,0,-1,0.772725,1.720616,0, 0,0,-1,0.754603,1.648269,0, 0,0,-1,0.74366,1.574493,0, 0,0,-1,0.74366,1.425507,0, 0,0,-1,0.74,1.5,0, 0,0,-1,0.74366,1.425507,0, 0,0,-1,0.74366,1.574493,0, 0,0,-1,0.754603,1.648269,0, 0,0,-1,0.74366,1.425507,0, 0,0,-1,0.754603,1.648269,0, 0,0,-1,0.754603,1.351731,0, 0,0,-1,0.754603,1.351731,0, 0,0,-1,0.754603,1.648269,0, 0,0,-1,0.772725,1.720616,0, 0,0,-1,0.754603,1.351731,0, 0,0,-1,0.772725,1.720616,0, 0,0,-1,0.772725,1.279384,0, 0,0,-1,0.772725,1.279384,0, 0,0,-1,0.772725,1.720616,0, 0,0,-1,0.797852,1.790839,0, 0,0,-1,0.772725,1.279384,0, 0,0,-1,0.797852,1.790839,0, 0,0,-1,0.797852,1.209161,0, 0,0,-1,0.797852,1.209161,0, 0,0,-1,0.797852,1.790839,0, 0,0,-1,0.82974,1.858262,0, 0,0,-1,0.797852,1.209161,0, 0,0,-1,0.82974,1.858262,0, 0,0,-1,0.82974,1.141738,0, 0,0,-1,0.82974,1.141738,0, 0,0,-1,0.82974,1.858262,0, 0,0,-1,0.868083,1.922233,0, 0,0,-1,0.82974,1.141738,0, 0,0,-1,0.868083,1.922233,0, 0,0,-1,0.868083,1.077767,0, 0,0,-1,0.868083,1.077767,0, 0,0,-1,0.868083,1.922233,0, 0,0,-1,0.912512,1.982139,0, 0,0,-1,0.868083,1.077767,0, 0,0,-1,0.912512,1.982139,0, 0,0,-1,0.912512,1.017861,0, 0,0,-1,0.912512,1.017861,0, 0,0,-1,0.912512,1.982139,0, 0,0,-1,0.962599,2.037401,0, 0,0,-1,0.912512,1.017861,0, 0,0,-1,0.962599,2.037401,0, 0,0,-1,0.962599,0.962599,0, 0,0,-1,0.962599,0.962599,0, 0,0,-1,0.962599,2.037401,0, 0,0,-1,1.017861,2.087488,0, 0,0,-1,0.962599,0.962599,0, 0,0,-1,1.017861,2.087488,0, 0,0,-1,1.017861,0.912512,0, 0,0,-1,1.017861,0.912512,0, 0,0,-1,1.017861,2.087488,0, 0,0,-1,1.077767,2.131917,0, 0,0,-1,1.017861,0.912512,0, 0,0,-1,1.077767,2.131917,0, 0,0,-1,1.077767,0.868083,0, 0,0,-1,1.077767,0.868083,0, 0,0,-1,1.077767,2.131917,0, 0,0,-1,1.141738,2.17026,0, 0,0,-1,1.077767,0.868083,0, 0,0,-1,1.141738,2.17026,0, 0,0,-1,1.141738,0.82974,0, 0,0,-1,1.141738,0.82974,0, 0,0,-1,1.141738,2.17026,0, 0,0,-1,1.209161,2.202148,0, 0,0,-1,1.141738,0.82974,0, 0,0,-1,1.209161,2.202148,0, 0,0,-1,1.209161,0.797852,0, 0,0,-1,1.209161,0.797852,0, 0,0,-1,1.209161,2.202148,0, 0,0,-1,1.279384,2.227275,0, 0,0,-1,1.209161,0.797852,0, 0,0,-1,1.279384,2.227275,0, 0,0,-1,1.279384,0.772725,0, 0,0,-1,1.279384,0.772725,0, 0,0,-1,1.279384,2.227275,0, 0,0,-1,1.351731,2.245397,0, 0,0,-1,1.279384,0.772725,0, 0,0,-1,1.351731,2.245397,0, 0,0,-1,1.351731,0.754603,0, 0,0,-1,1.351731,0.754603,0, 0,0,-1,1.351731,2.245397,0, 0,0,-1,1.425507,2.25634,0, 0,0,-1,1.351731,0.754603,0, 0,0,-1,1.425507,2.25634,0, 0,0,-1,1.425507,0.74366,0, 0,0,-1,1.425507,0.74366,0, 0,0,-1,1.425507,2.25634,0, 0,0,-1,1.5,2.26,0, 0,0,-1,1.425507,0.74366,0, 0,0,-1,1.5,2.26,0, 0,0,-1,1.5,0.74,0, 0,0,-1,1.5,0.74,0, 0,0,-1,1.5,2.26,0, 0,0,-1,1.574493,2.25634,0, 0,0,-1,1.5,0.74,0, 0,0,-1,1.574493,2.25634,0, 0,0,-1,1.574493,0.74366,0, 0,0,-1,1.574493,0.74366,0, 0,0,-1,1.574493,2.25634,0, 0,0,-1,1.648269,2.245397,0, 0,0,-1,1.574493,0.74366,0, 0,0,-1,1.648269,2.245397,0, 0,0,-1,1.648269,0.754603,0, 0,0,-1,1.648269,0.754603,0, 0,0,-1,1.648269,2.245397,0, 0,0,-1,1.720616,2.227275,0, 0,0,-1,1.648269,0.754603,0, 0,0,-1,1.720616,2.227275,0, 0,0,-1,1.720616,0.772725,0, 0,0,-1,1.720616,0.772725,0, 0,0,-1,1.720616,2.227275,0, 0,0,-1,1.790839,2.202148,0, 0,0,-1,1.720616,0.772725,0, 0,0,-1,1.790839,2.202148,0, 0,0,-1,1.790839,0.797852,0, 0,0,-1,1.790839,0.797852,0, 0,0,-1,1.790839,2.202148,0, 0,0,-1,1.858262,2.17026,0, 0,0,-1,1.790839,0.797852,0, 0,0,-1,1.858262,2.17026,0, 0,0,-1,1.858262,0.82974,0, 0,0,-1,1.858262,0.82974,0, 0,0,-1,1.858262,2.17026,0, 0,0,-1,1.922233,2.131917,0, 0,0,-1,1.858262,0.82974,0, 0,0,-1,1.922233,2.131917,0, 0,0,-1,1.922233,0.868083,0, 0,0,-1,1.922233,0.868083,0, 0,0,-1,1.922233,2.131917,0, 0,0,-1,1.982139,2.087488,0, 0,0,-1,1.922233,0.868083,0, 0,0,-1,1.982139,2.087488,0, 0,0,-1,1.982139,0.912512,0, 0,0,-1,1.982139,0.912512,0, 0,0,-1,1.982139,2.087488,0, 0,0,-1,2.037401,2.037401,0, 0,0,-1,1.982139,0.912512,0, 0,0,-1,2.037401,2.037401,0, 0,0,-1,2.037401,0.962599,0, 0,0,-1,2.037401,0.962599,0, 0,0,-1,2.037401,2.037401,0, 0,0,-1,2.087488,1.982139,0, 0,0,-1,2.037401,0.962599,0, 0,0,-1,2.087488,1.982139,0, 0,0,-1,2.087488,1.017861,0, 0,0,-1,2.087488,1.017861,0, 0,0,-1,2.087488,1.982139,0, 0,0,-1,2.131917,1.922233,0, 0,0,-1,2.087488,1.017861,0, 0,0,-1,2.131917,1.922233,0, 0,0,-1,2.131917,1.077767,0, 0,0,-1,2.131917,1.077767,0, 0,0,-1,2.131917,1.922233,0, 0,0,-1,2.17026,1.858262,0, 0,0,-1,2.131917,1.077767,0, 0,0,-1,2.17026,1.858262,0, 0,0,-1,2.17026,1.141738,0, 0,0,-1,2.17026,1.141738,0, 0,0,-1,2.17026,1.858262,0, 0,0,-1,2.202148,1.790839,0, 0,0,-1,2.17026,1.141738,0, 0,0,-1,2.202148,1.790839,0, 0,0,-1,2.202148,1.209161,0, 0,0,-1,2.202148,1.209161,0, 0,0,-1,2.202148,1.790839,0, 0,0,-1,2.227275,1.720616,0, 0,0,-1,2.202148,1.209161,0, 0,0,-1,2.227275,1.720616,0, 0,0,-1,2.227275,1.279384,0, 0,0,-1,2.227275,1.279384,0, 0,0,-1,2.227275,1.720616,0, 0,0,-1,2.245397,1.648269,0, 0,0,-1,2.227275,1.279384,0, 0,0,-1,2.245397,1.648269,0, 0,0,-1,2.245397,1.351731,0, 0,0,-1,2.245397,1.351731,0, 0,0,-1,2.245397,1.648269,0, 0,0,-1,2.25634,1.574493,0, 0,0,-1,2.245397,1.351731,0, 0,0,-1,2.25634,1.574493,0, 0,0,-1,2.25634,1.425507,0, 0,0,-1,2.25634,1.425507,0, 0,0,-1,2.25634,1.574493,0, 0,0,-1,2.26,1.5,0, 0,0,-1,2.17026,1.141738,0, 0,0,-1,3,0.497732,0, 0,0,-1,2.131917,1.077767,0, 0,0,-1,3,0.497732,0, 0,0,-1,2.17026,1.141738,0, 0,0,-1,2.202148,1.209161,0, 0,0,-1,3,0.497732,0, 0,0,-1,2.202148,1.209161,0, 0,0,-1,3,0.87868,0, 0,0,-1,2.227275,1.279384,0, 0,0,-1,3,0.87868,0, 0,0,-1,2.202148,1.209161,0, 0,0,-1,3,0.87868,0, 0,0,-1,2.227275,1.279384,0, 0,0,-1,2.245397,1.351731,0, 0,0,-1,3,0.87868,0, 0,0,-1,2.245397,1.351731,0, 0,0,-1,3,1.201631,0, 0,0,-1,2.25634,1.425507,0, 0,0,-1,3,1.201631,0, 0,0,-1,2.245397,1.351731,0, 0,0,-1,3,1.201631,0, 0,0,-1,2.25634,1.425507,0, 0,0,-1,2.26,1.5,0, 0,0,-1,3,1.201631,0, 0,0,-1,2.26,1.5,0, 0,0,-1,3,1.5,0, 0,0,-1,0.87868,3,0, 0,0,-1,1.077767,2.131917,0, 0,0,-1,0.497732,3,0, 0,0,-1,1.077767,2.131917,0, 0,0,-1,0.87868,3,0, 0,0,-1,1.141738,2.17026,0, 0,0,-1,1.141738,2.17026,0, 0,0,-1,0.87868,3,0, 0,0,-1,1.209161,2.202148,0, 0,0,-1,1.201631,3,0, 0,0,-1,1.209161,2.202148,0, 0,0,-1,0.87868,3,0, 0,0,-1,1.209161,2.202148,0, 0,0,-1,1.201631,3,0, 0,0,-1,1.279384,2.227275,0, 0,0,-1,1.279384,2.227275,0, 0,0,-1,1.201631,3,0, 0,0,-1,1.351731,2.245397,0, 0,0,1,2.087488,1.982139,3, 0,0,1,3,3,3, 0,0,1,2.037401,2.037401,3, 0,0,1,3,3,3, 0,0,1,2.087488,1.982139,3, 0,0,1,2.131917,1.922233,3, 0,0,1,3,3,3, 0,0,1,2.131917,1.922233,3, 0,0,1,3,2.502268,3, 0.408248,0.408248,0.816497,3,3,3, 0.447214,0,0.894427,3,2.502268,3, 1,0,0,3,2.795,3, 0,0,1,2.25634,1.574493,3, 0,0,1,3,1.798369,3, 0,0,1,2.245397,1.648269,3, 0,0,1,3,1.798369,3, 0,0,1,2.25634,1.574493,3, 0,0,1,2.26,1.5,3, 0,0,1,3,1.798369,3, 0,0,1,2.26,1.5,3, 0,0,1,3,1.5,3, 0,0,1,3,1.201631,3, 0,0,1,2.25634,1.425507,3, 0,0,1,2.245397,1.351731,3, 0,0,1,2.25634,1.425507,3, 0,0,1,3,1.201631,3, 0,0,1,2.26,1.5,3, 0,0,1,2.26,1.5,3, 0,0,1,3,1.201631,3, 0,0,1,3,1.5,3, 0,0,1,1.574493,2.25634,3, 0,0,1,1.5,3,3, 0,0,1,1.5,2.26,3, 0,0,1,1.5,3,3, 0,0,1,1.574493,2.25634,3, 0,0,1,1.798369,3,3, 0,0,1,1.798369,3,3, 0,0,1,1.574493,2.25634,3, 0,0,1,1.648269,2.245397,3, 0,0,1,1.720616,2.227275,3, 0,0,1,1.798369,3,3, 0,0,1,1.648269,2.245397,3, 0,0,1,1.798369,3,3, 0,0,1,1.720616,2.227275,3, 0,0,1,1.790839,2.202148,3, 0,0,1,1.798369,3,3, 0,0,1,1.790839,2.202148,3, 0,0,1,2.12132,3,3, 0,0,1,0.868083,1.922233,3, 0,0,1,0,2.795,3, 0,0,1,0,2.502268,3, 0,0,1,0,2.795,3, 0,0,1,0.868083,1.922233,3, 0,0,1,0,3,3, 0,0,1,0,3,3, 0,0,1,0.868083,1.922233,3, 0,0,1,0.912512,1.982139,3, 0,0,1,0,3,3, 0,0,1,0.912512,1.982139,3, 0,0,1,0.962599,2.037401,3, 0,0,1,1.351731,2.245397,3, 0,0,1,1.5,3,3, 0,0,1,1.201631,3,3, 0,0,1,1.5,3,3, 0,0,1,1.351731,2.245397,3, 0,0,1,1.425507,2.25634,3, 0,0,1,1.5,3,3, 0,0,1,1.425507,2.25634,3, 0,0,1,1.5,2.26,3, 0,0,1,3,0,3, 0,0,1,2.087488,1.017861,3, 0,0,1,2.037401,0.962599,3, 0,0,1,2.087488,1.017861,3, 0,0,1,3,0,3, 0,0,1,2.131917,1.077767,3, 0,0,1,2.131917,1.077767,3, 0,0,1,3,0,3, 0,0,1,3,0.497732,3, 0.447214,0,0.894427,3,0.497732,3, 0.408248,-0.408248,0.816497,3,0,3, 1,0,0,3,0.205,3, 0,0,1,3,0.497732,3, 0,0,1,2.17026,1.141738,3, 0,0,1,2.131917,1.077767,3, 0,0,1,2.17026,1.141738,3, 0,0,1,3,0.497732,3, 0,0,1,2.202148,1.209161,3, 0,0,1,2.202148,1.209161,3, 0,0,1,3,0.497732,3, 0,0,1,3,0.87868,3, 0,0,1,2.227275,1.720616,3, 0,0,1,3,2.12132,3, 0,0,1,2.202148,1.790839,3, 0,0,1,3,2.12132,3, 0,0,1,2.227275,1.720616,3, 0,0,1,2.245397,1.648269,3, 0,0,1,3,2.12132,3, 0,0,1,2.245397,1.648269,3, 0,0,1,3,1.798369,3, 0,0,1,1.798369,0,3, 0,0,1,1.5,0.74,3, 0,0,1,1.5,0,3, 0,0,1,1.5,0.74,3, 0,0,1,1.798369,0,3, 0,0,1,1.574493,0.74366,3, 0,0,1,1.574493,0.74366,3, 0,0,1,1.798369,0,3, 0,0,1,1.648269,0.754603,3, 0,0,1,1.798369,0,3, 0,0,1,1.720616,0.772725,3, 0,0,1,1.648269,0.754603,3, 0,0,1,1.720616,0.772725,3, 0,0,1,1.798369,0,3, 0,0,1,1.790839,0.797852,3, 0,0,1,1.790839,0.797852,3, 0,0,1,1.798369,0,3, 0,0,1,2.12132,0,3, 0,0,1,0.962599,2.037401,3, 0,0,1,0.205,3,3, 0,0,1,0,3,3, 0,0,1,0.205,3,3, 0,0,1,0.962599,2.037401,3, 0,0,1,0.497732,3,3, 0,0,1,0.497732,3,3, 0,0,1,0.962599,2.037401,3, 0,0,1,1.017861,2.087488,3, 0,0,1,0.497732,3,3, 0,0,1,1.017861,2.087488,3, 0,0,1,1.077767,2.131917,3, 0,0,1,0.868083,1.077767,3, 0,0,1,0,0.87868,3, 0,0,1,0,0.497732,3, 0,0,1,0,0.87868,3, 0,0,1,0.868083,1.077767,3, 0,0,1,0.82974,1.141738,3, 0,0,1,0,0.87868,3, 0,0,1,0.82974,1.141738,3, 0,0,1,0.797852,1.209161,3, 0,0,1,2.12132,0,3, 0,0,1,1.858262,0.82974,3, 0,0,1,1.790839,0.797852,3, 0,0,1,1.858262,0.82974,3, 0,0,1,2.12132,0,3, 0,0,1,1.922233,0.868083,3, 0,0,1,1.922233,0.868083,3, 0,0,1,2.12132,0,3, 0,0,1,2.502268,0,3, 0,0,1,0.797852,1.209161,3, 0,0,1,0,1.201631,3, 0,0,1,0,0.87868,3, 0,0,1,0,1.201631,3, 0,0,1,0.797852,1.209161,3, 0,0,1,0.772725,1.279384,3, 0,0,1,0,1.201631,3, 0,0,1,0.772725,1.279384,3, 0,0,1,0.754603,1.351731,3, 0,0,1,1.077767,2.131917,3, 0,0,1,0.87868,3,3, 0,0,1,0.497732,3,3, 0,0,1,0.87868,3,3, 0,0,1,1.077767,2.131917,3, 0,0,1,1.141738,2.17026,3, 0,0,1,0.87868,3,3, 0,0,1,1.141738,2.17026,3, 0,0,1,1.209161,2.202148,3, 0,0,1,1.209161,2.202148,3, 0,0,1,1.201631,3,3, 0,0,1,0.87868,3,3, 0,0,1,1.201631,3,3, 0,0,1,1.209161,2.202148,3, 0,0,1,1.279384,2.227275,3, 0,0,1,1.201631,3,3, 0,0,1,1.279384,2.227275,3, 0,0,1,1.351731,2.245397,3, 0,0,1,1.5,0,3, 0,0,1,1.351731,0.754603,3, 0,0,1,1.201631,0,3, 0,0,1,1.351731,0.754603,3, 0,0,1,1.5,0,3, 0,0,1,1.425507,0.74366,3, 0,0,1,1.425507,0.74366,3, 0,0,1,1.5,0,3, 0,0,1,1.5,0.74,3, 0,0,1,0.205,0,3, 0,0,1,0.962599,0.962599,3, 0,0,1,0,0,3, 0,0,1,0.962599,0.962599,3, 0,0,1,0.205,0,3, 0,0,1,0.497732,0,3, 0,0,1,0.962599,0.962599,3, 0,0,1,0.497732,0,3, 0,0,1,1.017861,0.912512,3, 0,0,1,1.017861,0.912512,3, 0,0,1,0.497732,0,3, 0,0,1,1.077767,0.868083,3, 0,0,1,0.87868,0,3, 0,0,1,1.077767,0.868083,3, 0,0,1,0.497732,0,3, 0,0,1,1.077767,0.868083,3, 0,0,1,0.87868,0,3, 0,0,1,1.141738,0.82974,3, 0,0,1,1.141738,0.82974,3, 0,0,1,0.87868,0,3, 0,0,1,1.209161,0.797852,3, 0,0,1,1.201631,0,3, 0,0,1,1.209161,0.797852,3, 0,0,1,0.87868,0,3, 0,0,1,1.209161,0.797852,3, 0,0,1,1.201631,0,3, 0,0,1,1.279384,0.772725,3, 0,0,1,1.279384,0.772725,3, 0,0,1,1.201631,0,3, 0,0,1,1.351731,0.754603,3, 0,0,1,1.858262,2.17026,3, 0,0,1,2.12132,3,3, 0,0,1,1.790839,2.202148,3, 0,0,1,2.12132,3,3, 0,0,1,1.858262,2.17026,3, 0,0,1,1.922233,2.131917,3, 0,0,1,2.12132,3,3, 0,0,1,1.922233,2.131917,3, 0,0,1,2.502268,3,3, 0,0,1,3,0.87868,3, 0,0,1,2.227275,1.279384,3, 0,0,1,2.202148,1.209161,3, 0,0,1,2.227275,1.279384,3, 0,0,1,3,0.87868,3, 0,0,1,2.245397,1.351731,3, 0,0,1,2.245397,1.351731,3, 0,0,1,3,0.87868,3, 0,0,1,3,1.201631,3, 0,0,1,2.502268,0,3, 0,0,1,1.982139,0.912512,3, 0,0,1,1.922233,0.868083,3, 0,0,1,1.982139,0.912512,3, 0,0,1,2.502268,0,3, 0,0,1,2.037401,0.962599,3, 0,0,1,2.037401,0.962599,3, 0,0,1,2.502268,0,3, 0,0,1,3,0,3, 0.408248,-0.408248,0.816497,3,0,3, 0,0,1,2.502268,0,3, 0,-1,0,2.795,0,3, 0,0,1,0.74,1.5,3, 0,0,1,0,1.798369,3, 0,0,1,0,1.5,3, 0,0,1,0,1.798369,3, 0,0,1,0.74,1.5,3, 0,0,1,0.74366,1.574493,3, 0,0,1,0,1.798369,3, 0,0,1,0.74366,1.574493,3, 0,0,1,0.754603,1.648269,3, 0,0,1,0.754603,1.648269,3, 0,0,1,0,2.12132,3, 0,0,1,0,1.798369,3, 0,0,1,0,2.12132,3, 0,0,1,0.754603,1.648269,3, 0,0,1,0.772725,1.720616,3, 0,0,1,0,2.12132,3, 0,0,1,0.772725,1.720616,3, 0,0,1,0.797852,1.790839,3, 0,0,1,2.17026,1.858262,3, 0,0,1,3,2.502268,3, 0,0,1,2.131917,1.922233,3, 0,0,1,3,2.502268,3, 0,0,1,2.17026,1.858262,3, 0,0,1,2.202148,1.790839,3, 0,0,1,3,2.502268,3, 0,0,1,2.202148,1.790839,3, 0,0,1,3,2.12132,3, 0,0,1,0.962599,0.962599,3, 0,0,1,0,0.205,3, 0,0,1,0,0,3, 0,0,1,0,0.205,3, 0,0,1,0.962599,0.962599,3, 0,0,1,0,0.497732,3, 0,0,1,0,0.497732,3, 0,0,1,0.962599,0.962599,3, 0,0,1,0.912512,1.017861,3, 0,0,1,0,0.497732,3, 0,0,1,0.912512,1.017861,3, 0,0,1,0.868083,1.077767,3, 0,0,1,0.754603,1.351731,3, 0,0,1,0,1.5,3, 0,0,1,0,1.201631,3, 0,0,1,0,1.5,3, 0,0,1,0.754603,1.351731,3, 0,0,1,0.74366,1.425507,3, 0,0,1,0,1.5,3, 0,0,1,0.74366,1.425507,3, 0,0,1,0.74,1.5,3, 0,0,1,0.74366,1.425507,3, 0,0,1,0.74366,1.574493,3, 0,0,1,0.74,1.5,3, 0,0,1,0.74366,1.574493,3, 0,0,1,0.74366,1.425507,3, 0,0,1,0.754603,1.351731,3, 0,0,1,0.74366,1.574493,3, 0,0,1,0.754603,1.351731,3, 0,0,1,0.754603,1.648269,3, 0,0,1,0.754603,1.648269,3, 0,0,1,0.754603,1.351731,3, 0,0,1,0.772725,1.279384,3, 0,0,1,0.754603,1.648269,3, 0,0,1,0.772725,1.279384,3, 0,0,1,0.772725,1.720616,3, 0,0,1,0.772725,1.720616,3, 0,0,1,0.772725,1.279384,3, 0,0,1,0.797852,1.209161,3, 0,0,1,0.772725,1.720616,3, 0,0,1,0.797852,1.209161,3, 0,0,1,0.797852,1.790839,3, 0,0,1,0.797852,1.790839,3, 0,0,1,0.797852,1.209161,3, 0,0,1,0.82974,1.141738,3, 0,0,1,0.797852,1.790839,3, 0,0,1,0.82974,1.141738,3, 0,0,1,0.82974,1.858262,3, 0,0,1,0.82974,1.858262,3, 0,0,1,0.82974,1.141738,3, 0,0,1,0.868083,1.077767,3, 0,0,1,0.82974,1.858262,3, 0,0,1,0.868083,1.077767,3, 0,0,1,0.868083,1.922233,3, 0,0,1,0.868083,1.922233,3, 0,0,1,0.868083,1.077767,3, 0,0,1,0.912512,1.017861,3, 0,0,1,0.868083,1.922233,3, 0,0,1,0.912512,1.017861,3, 0,0,1,0.912512,1.982139,3, 0,0,1,0.912512,1.982139,3, 0,0,1,0.912512,1.017861,3, 0,0,1,0.962599,0.962599,3, 0,0,1,0.912512,1.982139,3, 0,0,1,0.962599,0.962599,3, 0,0,1,0.962599,2.037401,3, 0,0,1,0.962599,2.037401,3, 0,0,1,0.962599,0.962599,3, 0,0,1,1.017861,0.912512,3, 0,0,1,0.962599,2.037401,3, 0,0,1,1.017861,0.912512,3, 0,0,1,1.017861,2.087488,3, 0,0,1,1.017861,2.087488,3, 0,0,1,1.017861,0.912512,3, 0,0,1,1.077767,2.131917,3, 0,0,1,1.077767,2.131917,3, 0,0,1,1.017861,0.912512,3, 0,0,1,1.077767,0.868083,3, 0,0,1,1.077767,2.131917,3, 0,0,1,1.077767,0.868083,3, 0,0,1,1.141738,0.82974,3, 0,0,1,1.077767,2.131917,3, 0,0,1,1.141738,0.82974,3, 0,0,1,1.141738,2.17026,3, 0,0,1,1.141738,2.17026,3, 0,0,1,1.141738,0.82974,3, 0,0,1,1.209161,2.202148,3, 0,0,1,1.209161,2.202148,3, 0,0,1,1.141738,0.82974,3, 0,0,1,1.209161,0.797852,3, 0,0,1,1.209161,2.202148,3, 0,0,1,1.209161,0.797852,3, 0,0,1,1.279384,0.772725,3, 0,0,1,1.209161,2.202148,3, 0,0,1,1.279384,0.772725,3, 0,0,1,1.279384,2.227275,3, 0,0,1,1.279384,2.227275,3, 0,0,1,1.279384,0.772725,3, 0,0,1,1.351731,0.754603,3, 0,0,1,1.279384,2.227275,3, 0,0,1,1.351731,0.754603,3, 0,0,1,1.351731,2.245397,3, 0,0,1,1.351731,2.245397,3, 0,0,1,1.351731,0.754603,3, 0,0,1,1.425507,0.74366,3, 0,0,1,1.351731,2.245397,3, 0,0,1,1.425507,0.74366,3, 0,0,1,1.425507,2.25634,3, 0,0,1,1.425507,2.25634,3, 0,0,1,1.425507,0.74366,3, 0,0,1,1.5,0.74,3, 0,0,1,1.425507,2.25634,3, 0,0,1,1.5,0.74,3, 0,0,1,1.5,2.26,3, 0,0,1,1.5,2.26,3, 0,0,1,1.5,0.74,3, 0,0,1,1.574493,0.74366,3, 0,0,1,1.5,2.26,3, 0,0,1,1.574493,0.74366,3, 0,0,1,1.574493,2.25634,3, 0,0,1,1.574493,2.25634,3, 0,0,1,1.574493,0.74366,3, 0,0,1,1.648269,0.754603,3, 0,0,1,1.574493,2.25634,3, 0,0,1,1.648269,0.754603,3, 0,0,1,1.648269,2.245397,3, 0,0,1,1.648269,2.245397,3, 0,0,1,1.648269,0.754603,3, 0,0,1,1.720616,0.772725,3, 0,0,1,1.648269,2.245397,3, 0,0,1,1.720616,0.772725,3, 0,0,1,1.720616,2.227275,3, 0,0,1,1.720616,2.227275,3, 0,0,1,1.720616,0.772725,3, 0,0,1,1.790839,0.797852,3, 0,0,1,1.720616,2.227275,3, 0,0,1,1.790839,0.797852,3, 0,0,1,1.790839,2.202148,3, 0,0,1,1.790839,2.202148,3, 0,0,1,1.790839,0.797852,3, 0,0,1,1.858262,0.82974,3, 0,0,1,1.790839,2.202148,3, 0,0,1,1.858262,0.82974,3, 0,0,1,1.858262,2.17026,3, 0,0,1,1.858262,2.17026,3, 0,0,1,1.858262,0.82974,3, 0,0,1,1.922233,0.868083,3, 0,0,1,1.858262,2.17026,3, 0,0,1,1.922233,0.868083,3, 0,0,1,1.922233,2.131917,3, 0,0,1,1.922233,2.131917,3, 0,0,1,1.922233,0.868083,3, 0,0,1,1.982139,2.087488,3, 0,0,1,1.982139,2.087488,3, 0,0,1,1.922233,0.868083,3, 0,0,1,1.982139,0.912512,3, 0,0,1,1.982139,2.087488,3, 0,0,1,1.982139,0.912512,3, 0,0,1,2.037401,0.962599,3, 0,0,1,1.982139,2.087488,3, 0,0,1,2.037401,0.962599,3, 0,0,1,2.037401,2.037401,3, 0,0,1,2.037401,2.037401,3, 0,0,1,2.037401,0.962599,3, 0,0,1,2.087488,1.017861,3, 0,0,1,2.037401,2.037401,3, 0,0,1,2.087488,1.017861,3, 0,0,1,2.087488,1.982139,3, 0,0,1,2.087488,1.982139,3, 0,0,1,2.087488,1.017861,3, 0,0,1,2.131917,1.077767,3, 0,0,1,2.087488,1.982139,3, 0,0,1,2.131917,1.077767,3, 0,0,1,2.131917,1.922233,3, 0,0,1,2.131917,1.922233,3, 0,0,1,2.131917,1.077767,3, 0,0,1,2.17026,1.141738,3, 0,0,1,2.131917,1.922233,3, 0,0,1,2.17026,1.141738,3, 0,0,1,2.17026,1.858262,3, 0,0,1,2.17026,1.858262,3, 0,0,1,2.17026,1.141738,3, 0,0,1,2.202148,1.209161,3, 0,0,1,2.17026,1.858262,3, 0,0,1,2.202148,1.209161,3, 0,0,1,2.202148,1.790839,3, 0,0,1,2.202148,1.790839,3, 0,0,1,2.202148,1.209161,3, 0,0,1,2.227275,1.279384,3, 0,0,1,2.202148,1.790839,3, 0,0,1,2.227275,1.279384,3, 0,0,1,2.227275,1.720616,3, 0,0,1,2.227275,1.720616,3, 0,0,1,2.227275,1.279384,3, 0,0,1,2.245397,1.351731,3, 0,0,1,2.227275,1.720616,3, 0,0,1,2.245397,1.351731,3, 0,0,1,2.245397,1.648269,3, 0,0,1,2.245397,1.648269,3, 0,0,1,2.245397,1.351731,3, 0,0,1,2.25634,1.574493,3, 0,0,1,2.25634,1.574493,3, 0,0,1,2.245397,1.351731,3, 0,0,1,2.25634,1.425507,3, 0,0,1,2.25634,1.574493,3, 0,0,1,2.25634,1.425507,3, 0,0,1,2.26,1.5,3, 0,0,1,0.797852,1.790839,3, 0,0,1,0,2.502268,3, 0,0,1,0,2.12132,3, 0,0,1,0,2.502268,3, 0,0,1,0.797852,1.790839,3, 0,0,1,0.82974,1.858262,3, 0,0,1,0,2.502268,3, 0,0,1,0.82974,1.858262,3, 0,0,1,0.868083,1.922233,3, 0,1,0,0,3,2.795, 0,1,0,0.205,3,1.5, 0,1,0,0,3,1.5, 0,1,0,0.205,3,1.5, 0,1,0,0,3,2.795, 0,1,0,0.205,3,2.795, 0,1,0,0,3,1.5, 0,1,0,0.205,3,0.205, 0,1,0,0,3,0.205, 0,1,0,0.205,3,0.205, 0,1,0,0,3,1.5, 0,1,0,0.205,3,1.5, 0,1,0,2.795,3,0.205, 0,1,0,3,3,0, 0,1,0,2.795,3,0, 0,1,0,2.795,3,1.5, 0,1,0,3,3,0.205, 0,1,0,2.795,3,0.205, 0,1,0,3,3,0.205, 0,1,0,2.795,3,1.5, 0,1,0,3,3,1.5, 0,1,0,2.795,3,2.795, 0,1,0,3,3,1.5, 0,1,0,2.795,3,1.5, 0,1,0,3,3,1.5, 0,1,0,2.795,3,2.795, 0,1,0,3,3,2.795, 0,1,0,3,3,3, 0,1,0,3,3,2.795, 0,1,0,2.795,3,2.795, 0,1,0,1.5,3,0.205, 0,1,0,1.798369,3,0, 0,1,0,1.5,3,0, 0,1,0,1.798369,3,0, 0,1,0,1.5,3,0.205, 0,1,0,2.12132,3,0, 0,1,0,2.12132,3,0, 0,1,0,1.5,3,0.205, 0,1,0,2.502268,3,0, 0,1,0,2.502268,3,0, 0,1,0,1.5,3,0.205, 0,1,0,2.795,3,0, 0,1,0,2.795,3,0, 0,1,0,1.5,3,0.205, 0,1,0,2.795,3,0.205, 0,1,0,0.205,3,0.205, 0,1,0,0.497732,3,0, 0,1,0,0.205,3,0, 0,1,0,0.497732,3,0, 0,1,0,0.205,3,0.205, 0,1,0,0.87868,3,0, 0,1,0,0.87868,3,0, 0,1,0,0.205,3,0.205, 0,1,0,1.201631,3,0, 0,1,0,1.201631,3,0, 0,1,0,0.205,3,0.205, 0,1,0,1.5,3,0, 0,1,0,1.5,3,0, 0,1,0,0.205,3,0.205, 0,1,0,1.5,3,0.205, 0,1,0,0,3,3, 0,1,0,0.205,3,2.795, 0,1,0,0,3,2.795, 0,1,0,2.795,3,1.5, 0,1,0,2.795,3,0.205, 0,1,0,2.1475,3,0.8525, 0,1,0,0.205,3,3, 0,1,0,1.5,3,2.795, 0,1,0,0.205,3,2.795, 0,1,0,1.5,3,2.795, 0,1,0,0.205,3,3, 0,1,0,0.497732,3,3, 0,1,0,0.497732,3,3, 0,1,0,1.5,3,3, 0,1,0,1.5,3,2.795, 0,0.514496,0.857493,1.5,3,3, 0,0.447214,0.894427,0.497732,3,3, 0,0,1,0.87868,3,3, 0,0.514496,0.857493,1.5,3,3, 0,0,1,0.87868,3,3, 0,0,1,1.201631,3,3, 0,1,0,1.5,3,3, 0,1,0,2.795,3,2.795, 0,1,0,1.5,3,2.795, 0,1,0,2.795,3,2.795, 0,1,0,1.5,3,3, 0,1,0,2.502268,3,3, 0,1,0,2.795,3,2.795, 0,1,0,2.502268,3,3, 0,1,0,2.795,3,3, 0,0.447214,0.894427,2.502268,3,3, 0,0.514496,0.857493,1.5,3,3, 0,0,1,1.798369,3,3, 0,0.447214,0.894427,2.502268,3,3, 0,0,1,1.798369,3,3, 0,0,1,2.12132,3,3, 0,1,0,2.1475,3,0.8525, 0,1,0,2.795,3,0.205, 0,1,0,1.5,3,0.205, 0,1,0,0.205,3,3, 0,1,0,0.205,3,2.795, 0,1,0,0,3,3, 0,1,0,0.205,3,2.795, 0,1,0,0.8525,3,2.1475, 0,1,0,0.205,3,1.5, 0,1,0,2.795,3,1.5, 0,1,0,2.1475,3,0.8525, 0,1,0,1.5,3,1.5, 0,1,0,0.8525,3,0.8525, 0,1,0,1.5,3,0.205, 0,1,0,0.205,3,0.205, 0,1,0,2.795,3,2.795, 0,1,0,2.795,3,1.5, 0,1,0,2.1475,3,2.1475, 0,1,0,1.5,3,1.5, 0,1,0,1.5,3,0.205, 0,1,0,0.8525,3,0.8525, 0,1,0,3,3,0.205, 0,1,0,3,3,0, 0,1,0,2.795,3,0.205, 0,1,0,2.795,3,2.795, 0,1,0,2.1475,3,2.1475, 0,1,0,1.5,3,2.795, 0,1,0,1.5,3,2.795, 0,1,0,0.8525,3,2.1475, 0,1,0,0.205,3,2.795, 0,1,0,0.205,3,1.5, 0,1,0,0.8525,3,0.8525, 0,1,0,0.205,3,0.205, 0,1,0,1.5,3,1.5, 0,1,0,0.8525,3,0.8525, 0,1,0,0.205,3,1.5, 0,1,0,1.5,3,2.795, 0,1,0,1.5,3,1.5, 0,1,0,0.8525,3,2.1475, 0,1,0,0.205,3,0.205, 0,1,0,0,3,0, 0,1,0,0,3,0.205, 0,1,0,2.795,3,3, 0,1,0,3,3,3, 0,1,0,2.795,3,2.795, 0,1,0,1.5,3,2.795, 0,1,0,2.1475,3,2.1475, 0,1,0,1.5,3,1.5, 0,1,0,1.5,3,1.5, 0,1,0,2.1475,3,0.8525, 0,1,0,1.5,3,0.205, 0,1,0,2.1475,3,2.1475, 0,1,0,2.795,3,1.5, 0,1,0,1.5,3,1.5, 0,1,0,0.8525,3,2.1475, 0,1,0,1.5,3,1.5, 0,1,0,0.205,3,1.5, 0,-1,0,0.205,0,2.795, 0,-1,0,0.205,0,1.5, 0,-1,0,0.8525,0,2.1475, 0,-1,0,2.1475,0,0.8525, 0,-1,0,1.5,0,0.205, 0,-1,0,2.795,0,0.205, 0,-1,0,0,0,3, 0,-1,0,0,0,2.795, 0,-1,0,0.205,0,2.795, 0,-1,0,2.795,0,0.205, 0,-1,0,2.795,0,0, 0,-1,0,3,0,0, 0,-1,0,0.205,0,0.205, 0,-1,0,0,0,0, 0,-1,0,0.205,0,0, 0,-1,0,2.795,0,2.795, 0,-1,0,2.1475,0,2.1475, 0,-1,0,2.795,0,1.5, 0,-1,0,0.8525,0,0.8525, 0,-1,0,0.205,0,0.205, 0,-1,0,1.5,0,0.205, 0,-1,0,3,0,3, 0,-1,0,2.795,0,2.795, 0,-1,0,3,0,2.795, 0.57735,-0.57735,0.57735,1.5,0.25,0.455, 0.57735,-0.57735,0.57735,0.8525,0,0.8525, 0.57735,-0.57735,0.57735,1.5,0,0.205, 0.57735,-0.57735,0.57735,0.8525,0,0.8525, 0.57735,-0.57735,0.57735,1.5,0.25,0.455, 0.57735,-0.57735,0.57735,0.9775,0.25,0.9775, -0.57735,-0.57735,-0.57735,1.5,0.25,2.545, -0.57735,-0.57735,-0.57735,2.1475,0,2.1475, -0.57735,-0.57735,-0.57735,1.5,0,2.795, -0.57735,-0.57735,-0.57735,2.1475,0,2.1475, -0.57735,-0.57735,-0.57735,1.5,0.25,2.545, -0.57735,-0.57735,-0.57735,2.0225,0.25,2.0225, -0.57735,-0.57735,0.57735,2.795,0,1.5, -0.57735,-0.57735,0.57735,2.0225,0.25,0.9775, -0.57735,-0.57735,0.57735,2.1475,0,0.8525, -0.57735,-0.57735,0.57735,2.0225,0.25,0.9775, -0.57735,-0.57735,0.57735,2.795,0,1.5, -0.57735,-0.57735,0.57735,2.545,0.25,1.5, 1,0,0,3,3,1.5, 1,0,0,3,2.795,2.795, 1,0,0,3,2.795,1.5, 1,0,0,3,2.795,2.795, 1,0,0,3,3,1.5, 1,0,0,3,3,2.795, 1,0,0,3,1.5,2.795, 1,0,0,3,0.205,3, 1,0,0,3,0.205,2.795, 1,0,0,3,0.205,3, 1,0,0,3,1.5,2.795, 1,0,0,3,0.497732,3, 1,0,0,3,0.497732,3, 1,0,0,3,1.5,2.795, 1,0,0,3,0.87868,3, 1,0,0,3,0.87868,3, 1,0,0,3,1.5,2.795, 1,0,0,3,1.201631,3, 1,0,0,3,1.201631,3, 1,0,0,3,1.5,2.795, 1,0,0,3,1.5,3, 1,0,0,3,0.205,3, 1,0,0,3,0,3, 1,0,0,3,0.205,2.795, 1,0,0,3,3,0.205, 1,0,0,3,2.795,0.205, 1,0,0,3,3,0, 1,0,0,3,0.205,0.205, 1,0,0,3,0,0.205, 1,0,0,3,0,0, 1,0,0,3,0.205,0.205, 1,0,0,3,0,1.5, 1,0,0,3,0,0.205, 1,0,0,3,0,1.5, 1,0,0,3,0.205,0.205, 1,0,0,3,0.205,1.5, 1,0,0,3,3,3, 1,0,0,3,2.795,2.795, 1,0,0,3,3,2.795, 1,0,0,3,0.205,1.5, 1,0,0,3,0,2.795, 1,0,0,3,0,1.5, 1,0,0,3,0,2.795, 1,0,0,3,0.205,1.5, 1,0,0,3,0.205,2.795, 1,0,0,3,2.795,2.795, 1,0,0,3,1.5,3, 1,0,0,3,1.5,2.795, 1,0,0,3,1.5,3, 1,0,0,3,2.795,2.795, 1,0,0,3,1.798369,3, 1,0,0,3,1.798369,3, 1,0,0,3,2.795,2.795, 1,0,0,3,2.12132,3, 1,0,0,3,2.12132,3, 1,0,0,3,2.795,2.795, 1,0,0,3,2.502268,3, 1,0,0,3,2.502268,3, 1,0,0,3,2.795,2.795, 1,0,0,3,2.795,3, 1,0,0,3,0.205,0.205, 1,0,0,3,0,0, 1,0,0,3,0.205,0, 1,0,0,3,0.497732,0, 1,0,0,3,0.205,0.205, 1,0,0,3,0.205,0, 1,0,0,3,0.205,0.205, 1,0,0,3,0.497732,0, 1,0,0,3,1.5,0.205, 1,0,0,3,1.5,0.205, 1,0,0,3,0.497732,0, 1,0,0,3,0.87868,0, 1,0,0,3,1.5,0.205, 1,0,0,3,0.87868,0, 1,0,0,3,1.201631,0, 1,0,0,3,1.5,0.205, 1,0,0,3,1.201631,0, 1,0,0,3,1.5,0, 1,0,0,3,3,0, 1,0,0,3,2.795,0.205, 1,0,0,3,2.795,0, 1,0,0,3,1.798369,0, 1,0,0,3,1.5,0.205, 1,0,0,3,1.5,0, 1,0,0,3,1.5,0.205, 1,0,0,3,1.798369,0, 1,0,0,3,2.795,0.205, 1,0,0,3,2.795,0.205, 1,0,0,3,1.798369,0, 1,0,0,3,2.12132,0, 1,0,0,3,2.795,0.205, 1,0,0,3,2.12132,0, 1,0,0,3,2.502268,0, 1,0,0,3,2.795,0.205, 1,0,0,3,2.502268,0, 1,0,0,3,2.795,0, 1,0,0,3,1.5,0.205, 1,0,0,3,0.205,1.5, 1,0,0,3,0.205,0.205, 1,0,0,3,3,3, 1,0,0,3,2.795,3, 1,0,0,3,2.795,2.795, 1,0,0,3,0.205,1.5, 1,0,0,3,1.5,2.795, 1,0,0,3,0.205,2.795, 1,0,0,3,1.5,2.795, 1,0,0,3,0.205,1.5, 1,0,0,3,1.5,0.205, 1,0,0,3,1.5,2.795, 1,0,0,3,1.5,0.205, 1,0,0,3,2.795,0.205, 1,0,0,3,1.5,2.795, 1,0,0,3,2.795,0.205, 1,0,0,3,2.795,2.795, 1,0,0,3,2.795,2.795, 1,0,0,3,2.795,0.205, 1,0,0,3,2.795,1.5, 1,0,0,3,0.205,2.795, 1,0,0,3,0,3, 1,0,0,3,0,2.795, -1,0,0,0,0.497732,3, -1,0,0,0,0.205,2.795, -1,0,0,0,0.205,3, -1,0,0,0,0.205,2.795, -1,0,0,0,0.497732,3, -1,0,0,0,1.5,2.795, -1,0,0,0,1.5,2.795, -1,0,0,0,0.497732,3, -1,0,0,0,0.87868,3, -1,0,0,0,1.5,2.795, -1,0,0,0,0.87868,3, -1,0,0,0,1.201631,3, -1,0,0,0,1.5,2.795, -1,0,0,0,1.201631,3, -1,0,0,0,1.5,3, -1,0,0,0,0.205,2.795, -1,0,0,0,0,3, -1,0,0,0,0.205,3, -1,0,0,0,0.205,0.205, -1,0,0,0,0.497732,0, -1,0,0,0,0.205,0, -1,0,0,0,0.497732,0, -1,0,0,0,0.205,0.205, -1,0,0,0,1.5,0.205, -1,0,0,0,0.497732,0, -1,0,0,0,1.5,0.205, -1,0,0,0,0.87868,0, -1,0,0,0,0.87868,0, -1,0,0,0,1.5,0.205, -1,0,0,0,1.201631,0, -1,0,0,0,1.201631,0, -1,0,0,0,1.5,0.205, -1,0,0,0,1.5,0, -1,0,0,0,0.205,0.205, -1,0,0,0,0.205,0, -1,0,0,0,0,0, -1,0,0,0,3,3, -1,0,0,0,2.795,2.795, -1,0,0,0,2.795,3, -1,0,0,0,3,2.795, -1,0,0,0,2.795,2.795, -1,0,0,0,3,3, -1,0,0,0,3,2.795, -1,0,0,0,2.795,1.5, -1,0,0,0,2.795,2.795, -1,0,0,0,2.795,1.5, -1,0,0,0,3,2.795, -1,0,0,0,3,1.5, -1,0,0,0,1.798369,3, -1,0,0,0,1.5,2.795, -1,0,0,0,1.5,3, -1,0,0,0,1.5,2.795, -1,0,0,0,1.798369,3, -1,0,0,0,2.795,2.795, -1,0,0,0,2.795,2.795, -1,0,0,0,1.798369,3, -1,0,0,0,2.12132,3, -1,0,0,0,2.795,2.795, -1,0,0,0,2.12132,3, -1,0,0,0,2.502268,3, -1,0,0,0,2.795,2.795, -1,0,0,0,2.502268,3, -1,0,0,0,2.795,3, -1,0,0,0,0.205,2.795, -1,0,0,0,0,1.5, -1,0,0,0,0,2.795, -1,0,0,0,0,1.5, -1,0,0,0,0.205,2.795, -1,0,0,0,0.205,1.5, -1,0,0,0,3,1.5, -1,0,0,0,2.795,0.205, -1,0,0,0,2.795,1.5, -1,0,0,0,2.795,0.205, -1,0,0,0,3,1.5, -1,0,0,0,3,0.205, -1,0,0,0,0.205,1.5, -1,0,0,0,0,0.205, -1,0,0,0,0,1.5, -1,0,0,0,0,0.205, -1,0,0,0,0.205,1.5, -1,0,0,0,0.205,0.205, -1,0,0,0,2.795,0.205, -1,0,0,0,1.5,0, -1,0,0,0,1.5,0.205, -1,0,0,0,1.5,0, -1,0,0,0,2.795,0.205, -1,0,0,0,1.798369,0, -1,0,0,0,1.798369,0, -1,0,0,0,2.795,0.205, -1,0,0,0,2.12132,0, -1,0,0,0,2.12132,0, -1,0,0,0,2.795,0.205, -1,0,0,0,2.502268,0, -1,0,0,0,2.502268,0, -1,0,0,0,2.795,0.205, -1,0,0,0,2.795,0, -1,0,0,0,3,0, -1,0,0,0,2.795,0.205, -1,0,0,0,3,0.205, -1,0,0,0,3,0, -1,0,0,0,2.795,0, -1,0,0,0,2.795,0.205, -1,0,0,0,1.5,2.795, -1,0,0,0,0.205,1.5, -1,0,0,0,0.205,2.795, -1,0,0,0,0.205,1.5, -1,0,0,0,1.5,2.795, -1,0,0,0,0.205,0.205, -1,0,0,0,0.205,0.205, -1,0,0,0,1.5,2.795, -1,0,0,0,1.5,0.205, -1,0,0,0,1.5,0.205, -1,0,0,0,1.5,2.795, -1,0,0,0,2.795,2.795, -1,0,0,0,1.5,0.205, -1,0,0,0,2.795,2.795, -1,0,0,0,2.795,0.205, -1,0,0,0,2.795,0.205, -1,0,0,0,2.795,2.795, -1,0,0,0,2.795,1.5, -1,0,0,0,0.205,0.205, -1,0,0,0,0,0, -1,0,0,0,0,0.205, 0.57735,-0.57735,-0.57735,0.455,0.25,1.5, 0.57735,-0.57735,-0.57735,0.8525,0,2.1475, 0.57735,-0.57735,-0.57735,0.205,0,1.5, 0.57735,-0.57735,-0.57735,0.8525,0,2.1475, 0.57735,-0.57735,-0.57735,0.455,0.25,1.5, 0.57735,-0.57735,-0.57735,0.9775,0.25,2.0225 }; static const struct gllist lament_model_lid_base_frame = { GL_N3F_V3F, GL_TRIANGLES, 1584, lament_model_lid_base_data, 0 }; const struct gllist *lament_model_lid_base = &lament_model_lid_base_frame; static const float lament_model_lid_c_data[] = { 0,-1,0,1.5,0,1.5, 0,-1,0,1.5,0,0.205, 0,-1,0,2.795,0,1.5, -1,0,0,1.5,0.0625,0.2675, -1,0,0,1.5,0,0.205, -1,0,0,1.5,0,1.5, 0,0,1,2.795,0,1.5, 0,0,1,2.7325,0.0625,1.5, 0,0,1,1.5,0,1.5, -0.05058,0.997438,0.05058,2.7325,0.0625,1.5, -0.05058,0.997438,0.05058,1.5,0.0625,0.2675, -0.05058,0.997438,0.05058,1.5,0,1.5, 0.57735,0.57735,-0.57735,1.5,0.0625,0.2675, 0.57735,0.57735,-0.57735,2.795,0,1.5, 0.57735,0.57735,-0.57735,1.5,0,0.205, 0.57735,0.57735,-0.57735,2.795,0,1.5, 0.57735,0.57735,-0.57735,1.5,0.0625,0.2675, 0.57735,0.57735,-0.57735,2.7325,0.0625,1.5 }; static const struct gllist lament_model_lid_c_frame = { GL_N3F_V3F, GL_TRIANGLES, 18, lament_model_lid_c_data, 0 }; const struct gllist *lament_model_lid_c = &lament_model_lid_c_frame; static const float lament_model_lid_d_data[] = { 0,-1,0,0.205,0,1.5, 0,-1,0,1.5,0,0.205, 0,-1,0,1.5,0,1.5, 0,0,1,1.5,0,1.5, 0,0,1,0.2675,0.0625,1.5, 0,0,1,0.205,0,1.5, 1,0,0,1.5,0.0625,0.2675, 1,0,0,1.5,0,1.5, 1,0,0,1.5,0,0.205, 0.05058,0.997438,0.05058,1.5,0,1.5, 0.05058,0.997438,0.05058,1.5,0.0625,0.2675, 0.05058,0.997438,0.05058,0.2675,0.0625,1.5, -0.57735,0.57735,-0.57735,0.205,0,1.5, -0.57735,0.57735,-0.57735,1.5,0.0625,0.2675, -0.57735,0.57735,-0.57735,1.5,0,0.205, -0.57735,0.57735,-0.57735,1.5,0.0625,0.2675, -0.57735,0.57735,-0.57735,0.205,0,1.5, -0.57735,0.57735,-0.57735,0.2675,0.0625,1.5 }; static const struct gllist lament_model_lid_d_frame = { GL_N3F_V3F, GL_TRIANGLES, 18, lament_model_lid_d_data, 0 }; const struct gllist *lament_model_lid_d = &lament_model_lid_d_frame; static const float lament_model_pillar_a_data[] = { 0,0,1,1.425507,0.74366,3, 0,0,1,1.5,1.5,3, 0,0,1,1.351731,0.754603,3, 0,0,1,1.5,1.5,3, 0,0,1,1.425507,0.74366,3, 0,0,1,1.5,0.74,3, -0.840455,0.541882,0,0.868083,1.922233,3, -0.874085,0.485774,0,0.82974,1.858262,1.5, -0.889521,0.456893,0,0.82974,1.858262,3, -0.874085,0.485774,0,0.82974,1.858262,1.5, -0.840455,0.541882,0,0.868083,1.922233,3, -0.822262,0.56911,0,0.868083,1.922233,1.5, -0.889521,0.456893,0,0.82974,1.858262,3, -0.91749,0.397759,0,0.797852,1.790839,1.5, -0.930022,0.367505,0,0.797852,1.790839,3, -0.91749,0.397759,0,0.797852,1.790839,1.5, -0.889521,0.456893,0,0.82974,1.858262,3, -0.874085,0.485774,0,0.82974,1.858262,1.5, -0.983848,0.179005,0,0.754603,1.648269,3, -0.993446,0.114299,0,0.74366,1.574493,1.5, -0.996656,0.081709,0,0.74366,1.574493,3, -0.993446,0.114299,0,0.74366,1.574493,1.5, -0.983848,0.179005,0,0.754603,1.648269,3, -0.97746,0.211123,0,0.754603,1.648269,1.5, 0.211123,0.97746,0,1.648269,2.245397,3, 0.274577,0.961565,0,1.720616,2.227275,1.5, 0.179005,0.983848,0,1.648269,2.245397,1.5, 0.274577,0.961565,0,1.720616,2.227275,1.5, 0.211123,0.97746,0,1.648269,2.245397,3, 0.305914,0.952059,0,1.720616,2.227275,3, 0.114299,0.993446,0,1.574493,2.25634,3, 0.179005,0.983848,0,1.648269,2.245397,1.5, 0.081709,0.996656,0,1.574493,2.25634,1.5, 0.179005,0.983848,0,1.648269,2.245397,1.5, 0.114299,0.993446,0,1.574493,2.25634,3, 0.211123,0.97746,0,1.648269,2.245397,3, -0.707107,0.707107,0,0.962599,2.037401,3, -0.646965,0.76252,0,1.017861,2.087488,1.5, -0.707107,0.707107,0,0.962599,2.037401,1.5, -0.646965,0.76252,0,1.017861,2.087488,1.5, -0.707107,0.707107,0,0.962599,2.037401,3, -0.621651,0.783294,0,1.017861,2.087488,3, -0.707107,0.707107,0,0.962599,2.037401,3, -0.76252,0.646965,0,0.912512,1.982139,1.5, -0.783294,0.621651,0,0.912512,1.982139,3, -0.76252,0.646965,0,0.912512,1.982139,1.5, -0.707107,0.707107,0,0.962599,2.037401,3, -0.707107,0.707107,0,0.962599,2.037401,1.5, 0.952059,0.305914,0,2.227275,1.720616,1.5, 0.930022,0.367505,0,2.202148,1.790839,3, 0.961565,0.274577,0,2.227275,1.720616,3, 0.930022,0.367505,0,2.202148,1.790839,3, 0.952059,0.305914,0,2.227275,1.720616,1.5, 0.91749,0.397759,0,2.202148,1.790839,1.5, -0.211123,-0.97746,0,1.351731,0.754603,3, -0.274577,-0.961565,0,1.279384,0.772725,1.5, -0.179005,-0.983848,0,1.351731,0.754603,1.5, -0.274577,-0.961565,0,1.279384,0.772725,1.5, -0.211123,-0.97746,0,1.351731,0.754603,3, -0.305914,-0.952059,0,1.279384,0.772725,3, -0.016373,-0.999866,0,1.5,0.74,3, -0.081709,-0.996656,0,1.425507,0.74366,1.5, 0.016373,-0.999866,0,1.5,0.74,1.5, -0.081709,-0.996656,0,1.425507,0.74366,1.5, -0.016373,-0.999866,0,1.5,0.74,3, -0.114299,-0.993446,0,1.425507,0.74366,3, 0.081709,-0.996656,0,1.574493,0.74366,3, 0.016373,-0.999866,0,1.5,0.74,1.5, 0.114299,-0.993446,0,1.574493,0.74366,1.5, 0.016373,-0.999866,0,1.5,0.74,1.5, 0.081709,-0.996656,0,1.574493,0.74366,3, -0.016373,-0.999866,0,1.5,0.74,3, 0.783294,-0.621651,0,2.087488,1.017861,1.5, 0.822262,-0.56911,0,2.131917,1.077767,3, 0.76252,-0.646965,0,2.087488,1.017861,3, 0.822262,-0.56911,0,2.131917,1.077767,3, 0.783294,-0.621651,0,2.087488,1.017861,1.5, 0.840455,-0.541882,0,2.131917,1.077767,1.5, -0.305914,-0.952059,0,1.279384,0.772725,3, -0.367505,-0.930022,0,1.209161,0.797852,1.5, -0.274577,-0.961565,0,1.279384,0.772725,1.5, -0.367505,-0.930022,0,1.209161,0.797852,1.5, -0.305914,-0.952059,0,1.279384,0.772725,3, -0.397759,-0.91749,0,1.209161,0.797852,3, 0.995185,0.098017,0,2.25634,1.574493,1.5, 0.999866,0.016373,0,2.26,1.5,3, 0.999866,-0.016373,0,2.26,1.5,1.5, 0.999866,0.016373,0,2.26,1.5,3, 0.995185,0.098017,0,2.25634,1.574493,1.5, 0.995185,0.098017,0,2.25634,1.574493,3, -0.114299,-0.993446,0,1.425507,0.74366,3, -0.179005,-0.983848,0,1.351731,0.754603,1.5, -0.081709,-0.996656,0,1.425507,0.74366,1.5, -0.179005,-0.983848,0,1.351731,0.754603,1.5, -0.114299,-0.993446,0,1.425507,0.74366,3, -0.211123,-0.97746,0,1.351731,0.754603,3, 0.456893,-0.889521,0,1.858262,0.82974,3, 0.397759,-0.91749,0,1.790839,0.797852,1.5, 0.485774,-0.874085,0,1.858262,0.82974,1.5, 0.397759,-0.91749,0,1.790839,0.797852,1.5, 0.456893,-0.889521,0,1.858262,0.82974,3, 0.367505,-0.930022,0,1.790839,0.797852,3, -0.541882,0.840455,0,1.077767,2.131917,3, -0.485774,0.874085,0,1.141738,2.17026,1.5, -0.56911,0.822262,0,1.077767,2.131917,1.5, -0.485774,0.874085,0,1.141738,2.17026,1.5, -0.541882,0.840455,0,1.077767,2.131917,3, -0.456893,0.889521,0,1.141738,2.17026,3, -0.621651,0.783294,0,1.017861,2.087488,3, -0.56911,0.822262,0,1.077767,2.131917,1.5, -0.646965,0.76252,0,1.017861,2.087488,1.5, -0.56911,0.822262,0,1.077767,2.131917,1.5, -0.621651,0.783294,0,1.017861,2.087488,3, -0.541882,0.840455,0,1.077767,2.131917,3, 0.485774,0.874085,0,1.858262,2.17026,3, 0.541882,0.840455,0,1.922233,2.131917,1.5, 0.456893,0.889521,0,1.858262,2.17026,1.5, 0.541882,0.840455,0,1.922233,2.131917,1.5, 0.485774,0.874085,0,1.858262,2.17026,3, 0.56911,0.822262,0,1.922233,2.131917,3, 0.71859,-0.695434,0,2.037401,0.962599,1.5, 0.76252,-0.646965,0,2.087488,1.017861,3, 0.695434,-0.71859,0,2.037401,0.962599,3, 0.76252,-0.646965,0,2.087488,1.017861,3, 0.71859,-0.695434,0,2.037401,0.962599,1.5, 0.783294,-0.621651,0,2.087488,1.017861,1.5, 0.97746,0.211123,0,2.245397,1.648269,1.5, 0.961565,0.274577,0,2.227275,1.720616,3, 0.983848,0.179005,0,2.245397,1.648269,3, 0.961565,0.274577,0,2.227275,1.720616,3, 0.97746,0.211123,0,2.245397,1.648269,1.5, 0.952059,0.305914,0,2.227275,1.720616,1.5, 0.993446,-0.114299,0,2.25634,1.425507,1.5, 0.983848,-0.179005,0,2.245397,1.351731,3, 0.97746,-0.211123,0,2.245397,1.351731,1.5, 0.983848,-0.179005,0,2.245397,1.351731,3, 0.993446,-0.114299,0,2.25634,1.425507,1.5, 0.996656,-0.081709,0,2.25634,1.425507,3, -0.397759,-0.91749,0,1.209161,0.797852,3, -0.456893,-0.889521,0,1.141738,0.82974,1.5, -0.367505,-0.930022,0,1.209161,0.797852,1.5, -0.456893,-0.889521,0,1.141738,0.82974,1.5, -0.397759,-0.91749,0,1.209161,0.797852,3, -0.485774,-0.874085,0,1.141738,0.82974,3, -0.930022,0.367505,0,0.797852,1.790839,3, -0.952059,0.305914,0,0.772725,1.720616,1.5, -0.961565,0.274577,0,0.772725,1.720616,3, -0.952059,0.305914,0,0.772725,1.720616,1.5, -0.930022,0.367505,0,0.797852,1.790839,3, -0.91749,0.397759,0,0.797852,1.790839,1.5, 0.016373,0.999866,0,1.5,2.26,3, 0.081709,0.996656,0,1.574493,2.25634,1.5, -0.016373,0.999866,0,1.5,2.26,1.5, 0.081709,0.996656,0,1.574493,2.25634,1.5, 0.016373,0.999866,0,1.5,2.26,3, 0.114299,0.993446,0,1.574493,2.25634,3, -0.081709,0.996656,0,1.425507,2.25634,3, -0.016373,0.999866,0,1.5,2.26,1.5, -0.114299,0.993446,0,1.425507,2.25634,1.5, -0.016373,0.999866,0,1.5,2.26,1.5, -0.081709,0.996656,0,1.425507,2.25634,3, 0.016373,0.999866,0,1.5,2.26,3, -0.179005,0.983848,0,1.351731,2.245397,3, -0.114299,0.993446,0,1.425507,2.25634,1.5, -0.211123,0.97746,0,1.351731,2.245397,1.5, -0.114299,0.993446,0,1.425507,2.25634,1.5, -0.179005,0.983848,0,1.351731,2.245397,3, -0.081709,0.996656,0,1.425507,2.25634,3, -0.274577,0.961565,0,1.279384,2.227275,3, -0.211123,0.97746,0,1.351731,2.245397,1.5, -0.305914,0.952059,0,1.279384,2.227275,1.5, -0.211123,0.97746,0,1.351731,2.245397,1.5, -0.274577,0.961565,0,1.279384,2.227275,3, -0.179005,0.983848,0,1.351731,2.245397,3, -0.367505,0.930022,0,1.209161,2.202148,3, -0.305914,0.952059,0,1.279384,2.227275,1.5, -0.397759,0.91749,0,1.209161,2.202148,1.5, -0.305914,0.952059,0,1.279384,2.227275,1.5, -0.367505,0.930022,0,1.209161,2.202148,3, -0.274577,0.961565,0,1.279384,2.227275,3, 0.874085,0.485774,0,2.17026,1.858262,1.5, 0.840455,0.541882,0,2.131917,1.922233,3, 0.889521,0.456893,0,2.17026,1.858262,3, 0.840455,0.541882,0,2.131917,1.922233,3, 0.874085,0.485774,0,2.17026,1.858262,1.5, 0.822262,0.56911,0,2.131917,1.922233,1.5, -0.783294,0.621651,0,0.912512,1.982139,3, -0.822262,0.56911,0,0.868083,1.922233,1.5, -0.840455,0.541882,0,0.868083,1.922233,3, -0.822262,0.56911,0,0.868083,1.922233,1.5, -0.783294,0.621651,0,0.912512,1.982139,3, -0.76252,0.646965,0,0.912512,1.982139,1.5, 0.541882,-0.840455,0,1.922233,0.868083,3, 0.485774,-0.874085,0,1.858262,0.82974,1.5, 0.56911,-0.822262,0,1.922233,0.868083,1.5, 0.485774,-0.874085,0,1.858262,0.82974,1.5, 0.541882,-0.840455,0,1.922233,0.868083,3, 0.456893,-0.889521,0,1.858262,0.82974,3, 0.621651,-0.783294,0,1.982139,0.912512,3, 0.56911,-0.822262,0,1.922233,0.868083,1.5, 0.646965,-0.76252,0,1.982139,0.912512,1.5, 0.56911,-0.822262,0,1.922233,0.868083,1.5, 0.621651,-0.783294,0,1.982139,0.912512,3, 0.541882,-0.840455,0,1.922233,0.868083,3, 0.695434,-0.71859,0,2.037401,0.962599,3, 0.646965,-0.76252,0,1.982139,0.912512,1.5, 0.71859,-0.695434,0,2.037401,0.962599,1.5, 0.646965,-0.76252,0,1.982139,0.912512,1.5, 0.695434,-0.71859,0,2.037401,0.962599,3, 0.621651,-0.783294,0,1.982139,0.912512,3, -0.646965,-0.76252,0,1.017861,0.912512,3, -0.695434,-0.71859,0,0.962599,0.962599,1.5, -0.621651,-0.783294,0,1.017861,0.912512,1.5, -0.695434,-0.71859,0,0.962599,0.962599,1.5, -0.646965,-0.76252,0,1.017861,0.912512,3, -0.71859,-0.695434,0,0.962599,0.962599,3, 0.397759,0.91749,0,1.790839,2.202148,3, 0.456893,0.889521,0,1.858262,2.17026,1.5, 0.367505,0.930022,0,1.790839,2.202148,1.5, 0.456893,0.889521,0,1.858262,2.17026,1.5, 0.397759,0.91749,0,1.790839,2.202148,3, 0.485774,0.874085,0,1.858262,2.17026,3, 0.822262,0.56911,0,2.131917,1.922233,1.5, 0.783294,0.621651,0,2.087488,1.982139,3, 0.840455,0.541882,0,2.131917,1.922233,3, 0.783294,0.621651,0,2.087488,1.982139,3, 0.822262,0.56911,0,2.131917,1.922233,1.5, 0.76252,0.646965,0,2.087488,1.982139,1.5, 0.995185,0.098017,0,2.25634,1.574493,1.5, 0.983848,0.179005,0,2.245397,1.648269,3, 0.995185,0.098017,0,2.25634,1.574493,3, 0.983848,0.179005,0,2.245397,1.648269,3, 0.995185,0.098017,0,2.25634,1.574493,1.5, 0.97746,0.211123,0,2.245397,1.648269,1.5, 0.56911,0.822262,0,1.922233,2.131917,3, 0.621651,0.783294,0,1.982139,2.087488,1.5, 0.541882,0.840455,0,1.922233,2.131917,1.5, 0.621651,0.783294,0,1.982139,2.087488,1.5, 0.56911,0.822262,0,1.922233,2.131917,3, 0.646965,0.76252,0,1.982139,2.087488,3, 0.646965,0.76252,0,1.982139,2.087488,3, 0.695434,0.71859,0,2.037401,2.037401,1.5, 0.621651,0.783294,0,1.982139,2.087488,1.5, 0.695434,0.71859,0,2.037401,2.037401,1.5, 0.646965,0.76252,0,1.982139,2.087488,3, 0.71859,0.695434,0,2.037401,2.037401,3, 0.305914,0.952059,0,1.720616,2.227275,3, 0.367505,0.930022,0,1.790839,2.202148,1.5, 0.274577,0.961565,0,1.720616,2.227275,1.5, 0.367505,0.930022,0,1.790839,2.202148,1.5, 0.305914,0.952059,0,1.720616,2.227275,3, 0.397759,0.91749,0,1.790839,2.202148,3, 0.91749,0.397759,0,2.202148,1.790839,1.5, 0.889521,0.456893,0,2.17026,1.858262,3, 0.930022,0.367505,0,2.202148,1.790839,3, 0.889521,0.456893,0,2.17026,1.858262,3, 0.91749,0.397759,0,2.202148,1.790839,1.5, 0.874085,0.485774,0,2.17026,1.858262,1.5, -0.485774,-0.874085,0,1.141738,0.82974,3, -0.541882,-0.840455,0,1.077767,0.868083,1.5, -0.456893,-0.889521,0,1.141738,0.82974,1.5, -0.541882,-0.840455,0,1.077767,0.868083,1.5, -0.485774,-0.874085,0,1.141738,0.82974,3, -0.56911,-0.822262,0,1.077767,0.868083,3, 0.367505,-0.930022,0,1.790839,0.797852,3, 0.305914,-0.952059,0,1.720616,0.772725,1.5, 0.397759,-0.91749,0,1.790839,0.797852,1.5, 0.305914,-0.952059,0,1.720616,0.772725,1.5, 0.367505,-0.930022,0,1.790839,0.797852,3, 0.274577,-0.961565,0,1.720616,0.772725,3, -0.996656,0.081709,0,0.74366,1.574493,3, -0.999866,0.016373,0,0.74,1.5,1.5, -0.999866,-0.016373,0,0.74,1.5,3, -0.999866,0.016373,0,0.74,1.5,1.5, -0.996656,0.081709,0,0.74366,1.574493,3, -0.993446,0.114299,0,0.74366,1.574493,1.5, -0.961565,0.274577,0,0.772725,1.720616,3, -0.97746,0.211123,0,0.754603,1.648269,1.5, -0.983848,0.179005,0,0.754603,1.648269,3, -0.97746,0.211123,0,0.754603,1.648269,1.5, -0.961565,0.274577,0,0.772725,1.720616,3, -0.952059,0.305914,0,0.772725,1.720616,1.5, 0.76252,0.646965,0,2.087488,1.982139,1.5, 0.71859,0.695434,0,2.037401,2.037401,3, 0.783294,0.621651,0,2.087488,1.982139,3, 0.71859,0.695434,0,2.037401,2.037401,3, 0.76252,0.646965,0,2.087488,1.982139,1.5, 0.695434,0.71859,0,2.037401,2.037401,1.5, 0.274577,-0.961565,0,1.720616,0.772725,3, 0.211123,-0.97746,0,1.648269,0.754603,1.5, 0.305914,-0.952059,0,1.720616,0.772725,1.5, 0.211123,-0.97746,0,1.648269,0.754603,1.5, 0.274577,-0.961565,0,1.720616,0.772725,3, 0.179005,-0.983848,0,1.648269,0.754603,3, -0.71859,-0.695434,0,0.962599,0.962599,3, -0.76252,-0.646965,0,0.912512,1.017861,1.5, -0.695434,-0.71859,0,0.962599,0.962599,1.5, -0.76252,-0.646965,0,0.912512,1.017861,1.5, -0.71859,-0.695434,0,0.962599,0.962599,3, -0.783294,-0.621651,0,0.912512,1.017861,3, -0.91749,-0.397759,0,0.797852,1.209161,3, -0.881921,-0.471397,0,0.82974,1.141738,1.5, -0.881921,-0.471397,0,0.82974,1.141738,3, -0.881921,-0.471397,0,0.82974,1.141738,1.5, -0.91749,-0.397759,0,0.797852,1.209161,3, -0.930022,-0.367505,0,0.797852,1.209161,1.5, 0.840455,-0.541882,0,2.131917,1.077767,1.5, 0.881921,-0.471397,0,2.17026,1.141738,3, 0.822262,-0.56911,0,2.131917,1.077767,3, 0.881921,-0.471397,0,2.17026,1.141738,3, 0.840455,-0.541882,0,2.131917,1.077767,1.5, 0.881921,-0.471397,0,2.17026,1.141738,1.5, 0.91749,-0.397759,0,2.202148,1.209161,1.5, 0.881921,-0.471397,0,2.17026,1.141738,3, 0.881921,-0.471397,0,2.17026,1.141738,1.5, 0.881921,-0.471397,0,2.17026,1.141738,3, 0.91749,-0.397759,0,2.202148,1.209161,1.5, 0.930022,-0.367505,0,2.202148,1.209161,3, -0.840455,-0.541882,0,0.868083,1.077767,3, -0.881921,-0.471397,0,0.82974,1.141738,1.5, -0.822262,-0.56911,0,0.868083,1.077767,1.5, -0.881921,-0.471397,0,0.82974,1.141738,1.5, -0.840455,-0.541882,0,0.868083,1.077767,3, -0.881921,-0.471397,0,0.82974,1.141738,3, 0.97746,-0.211123,0,2.245397,1.351731,1.5, 0.961565,-0.274577,0,2.227275,1.279384,3, 0.952059,-0.305914,0,2.227275,1.279384,1.5, 0.961565,-0.274577,0,2.227275,1.279384,3, 0.97746,-0.211123,0,2.245397,1.351731,1.5, 0.983848,-0.179005,0,2.245397,1.351731,3, 0.952059,-0.305914,0,2.227275,1.279384,1.5, 0.930022,-0.367505,0,2.202148,1.209161,3, 0.91749,-0.397759,0,2.202148,1.209161,1.5, 0.930022,-0.367505,0,2.202148,1.209161,3, 0.952059,-0.305914,0,2.227275,1.279384,1.5, 0.961565,-0.274577,0,2.227275,1.279384,3, 0.999866,-0.016373,0,2.26,1.5,1.5, 0.996656,-0.081709,0,2.25634,1.425507,3, 0.993446,-0.114299,0,2.25634,1.425507,1.5, 0.996656,-0.081709,0,2.25634,1.425507,3, 0.999866,-0.016373,0,2.26,1.5,1.5, 0.999866,0.016373,0,2.26,1.5,3, 0.179005,-0.983848,0,1.648269,0.754603,3, 0.114299,-0.993446,0,1.574493,0.74366,1.5, 0.211123,-0.97746,0,1.648269,0.754603,1.5, 0.114299,-0.993446,0,1.574493,0.74366,1.5, 0.179005,-0.983848,0,1.648269,0.754603,3, 0.081709,-0.996656,0,1.574493,0.74366,3, -0.783294,-0.621651,0,0.912512,1.017861,3, -0.822262,-0.56911,0,0.868083,1.077767,1.5, -0.76252,-0.646965,0,0.912512,1.017861,1.5, -0.822262,-0.56911,0,0.868083,1.077767,1.5, -0.783294,-0.621651,0,0.912512,1.017861,3, -0.840455,-0.541882,0,0.868083,1.077767,3, -0.56911,-0.822262,0,1.077767,0.868083,3, -0.621651,-0.783294,0,1.017861,0.912512,1.5, -0.541882,-0.840455,0,1.077767,0.868083,1.5, -0.621651,-0.783294,0,1.017861,0.912512,1.5, -0.56911,-0.822262,0,1.077767,0.868083,3, -0.646965,-0.76252,0,1.017861,0.912512,3, -0.999866,-0.016373,0,0.74,1.5,3, -0.996656,-0.081709,0,0.74366,1.425507,1.5, -0.993446,-0.114299,0,0.74366,1.425507,3, -0.996656,-0.081709,0,0.74366,1.425507,1.5, -0.999866,-0.016373,0,0.74,1.5,3, -0.999866,0.016373,0,0.74,1.5,1.5, -0.993446,-0.114299,0,0.74366,1.425507,3, -0.983848,-0.179005,0,0.754603,1.351731,1.5, -0.97746,-0.211123,0,0.754603,1.351731,3, -0.983848,-0.179005,0,0.754603,1.351731,1.5, -0.993446,-0.114299,0,0.74366,1.425507,3, -0.996656,-0.081709,0,0.74366,1.425507,1.5, -0.97746,-0.211123,0,0.754603,1.351731,3, -0.961565,-0.274577,0,0.772725,1.279384,1.5, -0.952059,-0.305914,0,0.772725,1.279384,3, -0.961565,-0.274577,0,0.772725,1.279384,1.5, -0.97746,-0.211123,0,0.754603,1.351731,3, -0.983848,-0.179005,0,0.754603,1.351731,1.5, -0.952059,-0.305914,0,0.772725,1.279384,3, -0.930022,-0.367505,0,0.797852,1.209161,1.5, -0.91749,-0.397759,0,0.797852,1.209161,3, -0.930022,-0.367505,0,0.797852,1.209161,1.5, -0.952059,-0.305914,0,0.772725,1.279384,3, -0.961565,-0.274577,0,0.772725,1.279384,1.5, -0.456893,0.889521,0,1.141738,2.17026,3, -0.397759,0.91749,0,1.209161,2.202148,1.5, -0.485774,0.874085,0,1.141738,2.17026,1.5, -0.397759,0.91749,0,1.209161,2.202148,1.5, -0.456893,0.889521,0,1.141738,2.17026,3, -0.367505,0.930022,0,1.209161,2.202148,3, 0,0,1,2.202148,1.209161,3, 0,0,1,2.245397,1.351731,3, 0,0,1,1.5,1.5,3, 0,0,1,2.245397,1.351731,3, 0,0,1,2.202148,1.209161,3, 0,0,1,2.227275,1.279384,3, 0,0,1,2.245397,1.351731,3, 0,0,1,2.26,1.5,3, 0,0,1,1.5,1.5,3, 0,0,1,2.26,1.5,3, 0,0,1,2.245397,1.351731,3, 0,0,1,2.25634,1.425507,3, 0,0,1,0.772725,1.279384,3, 0,0,1,1.5,1.5,3, 0,0,1,0.754603,1.351731,3, 0,0,1,1.5,1.5,3, 0,0,1,0.772725,1.279384,3, 0,0,1,0.797852,1.209161,3, 0,0,1,0.82974,1.141738,3, 0,0,1,1.5,1.5,3, 0,0,1,0.797852,1.209161,3, 0,0,1,1.5,1.5,3, 0,0,1,0.82974,1.141738,3, 0,0,1,0.868083,1.077767,3, 0,0,1,1.5,1.5,3, 0,0,1,0.74366,1.574493,3, 0,0,1,0.74,1.5,3, 0,0,1,0.74366,1.574493,3, 0,0,1,1.5,1.5,3, 0,0,1,0.754603,1.648269,3, 0,0,1,0.912512,1.017861,3, 0,0,1,1.5,1.5,3, 0,0,1,0.868083,1.077767,3, 0,0,1,1.5,1.5,3, 0,0,1,0.912512,1.017861,3, 0,0,1,0.962599,0.962599,3, 0,0,1,1.017861,0.912512,3, 0,0,1,1.5,1.5,3, 0,0,1,0.962599,0.962599,3, 0,0,1,1.5,1.5,3, 0,0,1,1.017861,0.912512,3, 0,0,1,1.077767,0.868083,3, 0,0,1,1.141738,0.82974,3, 0,0,1,1.5,1.5,3, 0,0,1,1.077767,0.868083,3, 0,0,1,1.5,1.5,3, 0,0,1,1.141738,0.82974,3, 0,0,1,1.209161,0.797852,3, 0,0,1,1.922233,0.868083,3, 0,0,1,2.037401,0.962599,3, 0,0,1,1.5,1.5,3, 0,0,1,2.037401,0.962599,3, 0,0,1,1.922233,0.868083,3, 0,0,1,1.982139,0.912512,3, 0,0,1,1.279384,0.772725,3, 0,0,1,1.5,1.5,3, 0,0,1,1.209161,0.797852,3, 0,0,1,1.5,1.5,3, 0,0,1,1.279384,0.772725,3, 0,0,1,1.351731,0.754603,3, 0,0,1,1.5,0.74,3, 0,0,1,1.648269,0.754603,3, 0,0,1,1.5,1.5,3, 0,0,1,1.648269,0.754603,3, 0,0,1,1.5,0.74,3, 0,0,1,1.574493,0.74366,3, 0,0,1,1.648269,2.245397,3, 0,0,1,1.5,2.26,3, 0,0,1,1.5,1.5,3, 0,0,1,1.5,2.26,3, 0,0,1,1.648269,2.245397,3, 0,0,1,1.574493,2.25634,3, 0,0,1,1.790839,2.202148,3, 0,0,1,1.648269,2.245397,3, 0,0,1,1.5,1.5,3, 0,0,1,1.648269,2.245397,3, 0,0,1,1.790839,2.202148,3, 0,0,1,1.720616,2.227275,3, 0,0,1,1.5,1.5,3, 0,0,1,1.425507,2.25634,3, 0,0,1,1.351731,2.245397,3, 0,0,1,1.425507,2.25634,3, 0,0,1,1.5,1.5,3, 0,0,1,1.5,2.26,3, 0,0,1,1.5,1.5,3, 0,0,1,1.279384,2.227275,3, 0,0,1,1.209161,2.202148,3, 0,0,1,1.279384,2.227275,3, 0,0,1,1.5,1.5,3, 0,0,1,1.351731,2.245397,3, 0,0,1,1.5,1.5,3, 0,0,1,1.141738,2.17026,3, 0,0,1,1.077767,2.131917,3, 0,0,1,1.141738,2.17026,3, 0,0,1,1.5,1.5,3, 0,0,1,1.209161,2.202148,3, 0,0,1,1.922233,2.131917,3, 0,0,1,1.790839,2.202148,3, 0,0,1,1.5,1.5,3, 0,0,1,1.790839,2.202148,3, 0,0,1,1.922233,2.131917,3, 0,0,1,1.858262,2.17026,3, 0,0,1,2.037401,2.037401,3, 0,0,1,1.922233,2.131917,3, 0,0,1,1.5,1.5,3, 0,0,1,1.922233,2.131917,3, 0,0,1,2.037401,2.037401,3, 0,0,1,1.982139,2.087488,3, 0,0,1,1.648269,0.754603,3, 0,0,1,1.790839,0.797852,3, 0,0,1,1.5,1.5,3, 0,0,1,1.790839,0.797852,3, 0,0,1,1.648269,0.754603,3, 0,0,1,1.720616,0.772725,3, 0,0,1,1.5,1.5,3, 0,0,1,1.017861,2.087488,3, 0,0,1,0.962599,2.037401,3, 0,0,1,1.017861,2.087488,3, 0,0,1,1.5,1.5,3, 0,0,1,1.077767,2.131917,3, 0,0,1,1.5,1.5,3, 0,0,1,0.912512,1.982139,3, 0,0,1,0.868083,1.922233,3, 0,0,1,0.912512,1.982139,3, 0,0,1,1.5,1.5,3, 0,0,1,0.962599,2.037401,3, 0,0,1,1.5,1.5,3, 0,0,1,0.82974,1.858262,3, 0,0,1,0.797852,1.790839,3, 0,0,1,0.82974,1.858262,3, 0,0,1,1.5,1.5,3, 0,0,1,0.868083,1.922233,3, 0,0,1,2.131917,1.922233,3, 0,0,1,2.037401,2.037401,3, 0,0,1,1.5,1.5,3, 0,0,1,2.037401,2.037401,3, 0,0,1,2.131917,1.922233,3, 0,0,1,2.087488,1.982139,3, 0,0,1,2.202148,1.790839,3, 0,0,1,2.131917,1.922233,3, 0,0,1,1.5,1.5,3, 0,0,1,2.131917,1.922233,3, 0,0,1,2.202148,1.790839,3, 0,0,1,2.17026,1.858262,3, 0,0,1,2.131917,1.077767,3, 0,0,1,2.202148,1.209161,3, 0,0,1,1.5,1.5,3, 0,0,1,2.202148,1.209161,3, 0,0,1,2.131917,1.077767,3, 0,0,1,2.17026,1.141738,3, 0,0,1,1.790839,0.797852,3, 0,0,1,1.922233,0.868083,3, 0,0,1,1.5,1.5,3, 0,0,1,1.922233,0.868083,3, 0,0,1,1.790839,0.797852,3, 0,0,1,1.858262,0.82974,3, 0,0,1,2.037401,0.962599,3, 0,0,1,2.131917,1.077767,3, 0,0,1,1.5,1.5,3, 0,0,1,2.131917,1.077767,3, 0,0,1,2.037401,0.962599,3, 0,0,1,2.087488,1.017861,3, 0,0,1,2.26,1.5,3, 0,0,1,2.245397,1.648269,3, 0,0,1,1.5,1.5,3, 0,0,1,2.245397,1.648269,3, 0,0,1,2.26,1.5,3, 0,0,1,2.25634,1.574493,3, 0,0,1,2.245397,1.648269,3, 0,0,1,2.202148,1.790839,3, 0,0,1,1.5,1.5,3, 0,0,1,2.202148,1.790839,3, 0,0,1,2.245397,1.648269,3, 0,0,1,2.227275,1.720616,3, 0,0,1,1.5,1.5,3, 0,0,1,0.772725,1.720616,3, 0,0,1,0.754603,1.648269,3, 0,0,1,0.772725,1.720616,3, 0,0,1,1.5,1.5,3, 0,0,1,0.797852,1.790839,3, 0,0,1,0.74366,1.425507,3, 0,0,1,1.5,1.5,3, 0,0,1,0.74,1.5,3, 0,0,1,1.5,1.5,3, 0,0,1,0.74366,1.425507,3, 0,0,1,0.754603,1.351731,3, 0,0,-1,2.245397,1.351731,1.5, 0,0,-1,2.202148,1.209161,1.5, 0,0,-1,1.5,1.5,1.5, 0,0,-1,2.202148,1.209161,1.5, 0,0,-1,2.245397,1.351731,1.5, 0,0,-1,2.227275,1.279384,1.5, 0,0,-1,2.26,1.5,1.5, 0,0,-1,2.245397,1.351731,1.5, 0,0,-1,1.5,1.5,1.5, 0,0,-1,2.245397,1.351731,1.5, 0,0,-1,2.26,1.5,1.5, 0,0,-1,2.25634,1.425507,1.5, 0,0,-1,2.131917,1.077767,1.5, 0,0,-1,2.037401,0.962599,1.5, 0,0,-1,1.5,1.5,1.5, 0,0,-1,2.037401,0.962599,1.5, 0,0,-1,2.131917,1.077767,1.5, 0,0,-1,2.087488,1.017861,1.5, 0,0,-1,2.202148,1.209161,1.5, 0,0,-1,2.131917,1.077767,1.5, 0,0,-1,1.5,1.5,1.5, 0,0,-1,2.131917,1.077767,1.5, 0,0,-1,2.202148,1.209161,1.5, 0,0,-1,2.17026,1.141738,1.5, 0,0,-1,1.425507,2.25634,1.5, 0,0,-1,1.5,1.5,1.5, 0,0,-1,1.351731,2.245397,1.5, 0,0,-1,1.5,1.5,1.5, 0,0,-1,1.425507,2.25634,1.5, 0,0,-1,1.5,2.26,1.5, 0,0,-1,1.279384,2.227275,1.5, 0,0,-1,1.5,1.5,1.5, 0,0,-1,1.209161,2.202148,1.5, 0,0,-1,1.5,1.5,1.5, 0,0,-1,1.279384,2.227275,1.5, 0,0,-1,1.351731,2.245397,1.5, 0,0,-1,2.202148,1.790839,1.5, 0,0,-1,2.245397,1.648269,1.5, 0,0,-1,1.5,1.5,1.5, 0,0,-1,2.245397,1.648269,1.5, 0,0,-1,2.202148,1.790839,1.5, 0,0,-1,2.227275,1.720616,1.5, 0,0,-1,2.245397,1.648269,1.5, 0,0,-1,2.26,1.5,1.5, 0,0,-1,1.5,1.5,1.5, 0,0,-1,2.26,1.5,1.5, 0,0,-1,2.245397,1.648269,1.5, 0,0,-1,2.25634,1.574493,1.5, 0,0,-1,1.790839,0.797852,1.5, 0,0,-1,1.648269,0.754603,1.5, 0,0,-1,1.5,1.5,1.5, 0,0,-1,1.648269,0.754603,1.5, 0,0,-1,1.790839,0.797852,1.5, 0,0,-1,1.720616,0.772725,1.5, 0,0,-1,1.922233,0.868083,1.5, 0,0,-1,1.790839,0.797852,1.5, 0,0,-1,1.5,1.5,1.5, 0,0,-1,1.790839,0.797852,1.5, 0,0,-1,1.922233,0.868083,1.5, 0,0,-1,1.858262,0.82974,1.5, 0,0,-1,1.922233,2.131917,1.5, 0,0,-1,2.037401,2.037401,1.5, 0,0,-1,1.5,1.5,1.5, 0,0,-1,2.037401,2.037401,1.5, 0,0,-1,1.922233,2.131917,1.5, 0,0,-1,1.982139,2.087488,1.5, 0,0,-1,2.037401,2.037401,1.5, 0,0,-1,2.131917,1.922233,1.5, 0,0,-1,1.5,1.5,1.5, 0,0,-1,2.131917,1.922233,1.5, 0,0,-1,2.037401,2.037401,1.5, 0,0,-1,2.087488,1.982139,1.5, 0,0,-1,1.5,1.5,1.5, 0,0,-1,0.912512,1.017861,1.5, 0,0,-1,0.868083,1.077767,1.5, 0,0,-1,0.912512,1.017861,1.5, 0,0,-1,1.5,1.5,1.5, 0,0,-1,0.962599,0.962599,1.5, 0,0,-1,1.5,1.5,1.5, 0,0,-1,0.82974,1.141738,1.5, 0,0,-1,0.797852,1.209161,1.5, 0,0,-1,0.82974,1.141738,1.5, 0,0,-1,1.5,1.5,1.5, 0,0,-1,0.868083,1.077767,1.5, 0,0,-1,1.5,1.5,1.5, 0,0,-1,1.017861,0.912512,1.5, 0,0,-1,0.962599,0.962599,1.5, 0,0,-1,1.017861,0.912512,1.5, 0,0,-1,1.5,1.5,1.5, 0,0,-1,1.077767,0.868083,1.5, 0,0,-1,1.5,1.5,1.5, 0,0,-1,1.141738,0.82974,1.5, 0,0,-1,1.077767,0.868083,1.5, 0,0,-1,1.141738,0.82974,1.5, 0,0,-1,1.5,1.5,1.5, 0,0,-1,1.209161,0.797852,1.5, 0,0,-1,1.5,1.5,1.5, 0,0,-1,1.425507,0.74366,1.5, 0,0,-1,1.351731,0.754603,1.5, 0,0,-1,1.425507,0.74366,1.5, 0,0,-1,1.5,1.5,1.5, 0,0,-1,1.5,0.74,1.5, 0,0,-1,1.5,1.5,1.5, 0,0,-1,1.574493,0.74366,1.5, 0,0,-1,1.5,0.74,1.5, 0,0,-1,1.574493,0.74366,1.5, 0,0,-1,1.5,1.5,1.5, 0,0,-1,1.648269,0.754603,1.5, 0,0,-1,1.574493,2.25634,1.5, 0,0,-1,1.5,1.5,1.5, 0,0,-1,1.5,2.26,1.5, 0,0,-1,1.5,1.5,1.5, 0,0,-1,1.574493,2.25634,1.5, 0,0,-1,1.648269,2.245397,1.5, 0,0,-1,1.648269,2.245397,1.5, 0,0,-1,1.790839,2.202148,1.5, 0,0,-1,1.5,1.5,1.5, 0,0,-1,1.790839,2.202148,1.5, 0,0,-1,1.648269,2.245397,1.5, 0,0,-1,1.720616,2.227275,1.5, 0,0,-1,1.5,1.5,1.5, 0,0,-1,0.74366,1.425507,1.5, 0,0,-1,0.74,1.5,1.5, 0,0,-1,0.74366,1.425507,1.5, 0,0,-1,1.5,1.5,1.5, 0,0,-1,0.754603,1.351731,1.5, 0,0,-1,0.74366,1.574493,1.5, 0,0,-1,1.5,1.5,1.5, 0,0,-1,0.74,1.5,1.5, 0,0,-1,1.5,1.5,1.5, 0,0,-1,0.74366,1.574493,1.5, 0,0,-1,0.754603,1.648269,1.5, 0,0,-1,0.82974,1.858262,1.5, 0,0,-1,1.5,1.5,1.5, 0,0,-1,0.797852,1.790839,1.5, 0,0,-1,1.5,1.5,1.5, 0,0,-1,0.82974,1.858262,1.5, 0,0,-1,0.868083,1.922233,1.5, 0,0,-1,0.772725,1.720616,1.5, 0,0,-1,1.5,1.5,1.5, 0,0,-1,0.754603,1.648269,1.5, 0,0,-1,1.5,1.5,1.5, 0,0,-1,0.772725,1.720616,1.5, 0,0,-1,0.797852,1.790839,1.5, 0,0,-1,1.017861,2.087488,1.5, 0,0,-1,1.5,1.5,1.5, 0,0,-1,0.962599,2.037401,1.5, 0,0,-1,1.5,1.5,1.5, 0,0,-1,1.017861,2.087488,1.5, 0,0,-1,1.077767,2.131917,1.5, 0,0,-1,0.912512,1.982139,1.5, 0,0,-1,1.5,1.5,1.5, 0,0,-1,0.868083,1.922233,1.5, 0,0,-1,1.5,1.5,1.5, 0,0,-1,0.912512,1.982139,1.5, 0,0,-1,0.962599,2.037401,1.5, 0,0,-1,1.790839,2.202148,1.5, 0,0,-1,1.922233,2.131917,1.5, 0,0,-1,1.5,1.5,1.5, 0,0,-1,1.922233,2.131917,1.5, 0,0,-1,1.790839,2.202148,1.5, 0,0,-1,1.858262,2.17026,1.5, 0,0,-1,1.5,1.5,1.5, 0,0,-1,1.279384,0.772725,1.5, 0,0,-1,1.209161,0.797852,1.5, 0,0,-1,1.279384,0.772725,1.5, 0,0,-1,1.5,1.5,1.5, 0,0,-1,1.351731,0.754603,1.5, 0,0,-1,2.131917,1.922233,1.5, 0,0,-1,2.202148,1.790839,1.5, 0,0,-1,1.5,1.5,1.5, 0,0,-1,2.202148,1.790839,1.5, 0,0,-1,2.131917,1.922233,1.5, 0,0,-1,2.17026,1.858262,1.5, 0,0,-1,2.037401,0.962599,1.5, 0,0,-1,1.922233,0.868083,1.5, 0,0,-1,1.5,1.5,1.5, 0,0,-1,1.922233,0.868083,1.5, 0,0,-1,2.037401,0.962599,1.5, 0,0,-1,1.982139,0.912512,1.5, 0,0,-1,1.141738,2.17026,1.5, 0,0,-1,1.5,1.5,1.5, 0,0,-1,1.077767,2.131917,1.5, 0,0,-1,1.5,1.5,1.5, 0,0,-1,1.141738,2.17026,1.5, 0,0,-1,1.209161,2.202148,1.5, 0,0,-1,1.5,1.5,1.5, 0,0,-1,0.772725,1.279384,1.5, 0,0,-1,0.754603,1.351731,1.5, 0,0,-1,0.772725,1.279384,1.5, 0,0,-1,1.5,1.5,1.5, 0,0,-1,0.797852,1.209161,1.5 }; static const struct gllist lament_model_pillar_a_frame = { GL_N3F_V3F, GL_TRIANGLES, 768, lament_model_pillar_a_data, 0 }; const struct gllist *lament_model_pillar_a = &lament_model_pillar_a_frame; static const float lament_model_pillar_b_data[] = { 0.97746,0.211123,0,2.245397,1.648269,0, 0.961565,0.274577,0,2.227275,1.720616,1.5, 0.983848,0.179005,0,2.245397,1.648269,1.5, 0.961565,0.274577,0,2.227275,1.720616,1.5, 0.97746,0.211123,0,2.245397,1.648269,0, 0.952059,0.305914,0,2.227275,1.720616,0, -0.621651,0.783294,0,1.017861,2.087488,1.5, -0.56911,0.822262,0,1.077767,2.131917,0, -0.646965,0.76252,0,1.017861,2.087488,0, -0.56911,0.822262,0,1.077767,2.131917,0, -0.621651,0.783294,0,1.017861,2.087488,1.5, -0.541882,0.840455,0,1.077767,2.131917,1.5, 0.485774,0.874085,0,1.858262,2.17026,1.5, 0.541882,0.840455,0,1.922233,2.131917,0, 0.456893,0.889521,0,1.858262,2.17026,0, 0.541882,0.840455,0,1.922233,2.131917,0, 0.485774,0.874085,0,1.858262,2.17026,1.5, 0.56911,0.822262,0,1.922233,2.131917,1.5, 0.456893,-0.889521,0,1.858262,0.82974,1.5, 0.397759,-0.91749,0,1.790839,0.797852,0, 0.485774,-0.874085,0,1.858262,0.82974,0, 0.397759,-0.91749,0,1.790839,0.797852,0, 0.456893,-0.889521,0,1.858262,0.82974,1.5, 0.367505,-0.930022,0,1.790839,0.797852,1.5, -0.541882,0.840455,0,1.077767,2.131917,1.5, -0.485774,0.874085,0,1.141738,2.17026,0, -0.56911,0.822262,0,1.077767,2.131917,0, -0.485774,0.874085,0,1.141738,2.17026,0, -0.541882,0.840455,0,1.077767,2.131917,1.5, -0.456893,0.889521,0,1.141738,2.17026,1.5, -0.211123,-0.97746,0,1.351731,0.754603,1.5, -0.274577,-0.961565,0,1.279384,0.772725,0, -0.179005,-0.983848,0,1.351731,0.754603,0, -0.274577,-0.961565,0,1.279384,0.772725,0, -0.211123,-0.97746,0,1.351731,0.754603,1.5, -0.305914,-0.952059,0,1.279384,0.772725,1.5, -0.114299,-0.993446,0,1.425507,0.74366,1.5, -0.179005,-0.983848,0,1.351731,0.754603,0, -0.081709,-0.996656,0,1.425507,0.74366,0, -0.179005,-0.983848,0,1.351731,0.754603,0, -0.114299,-0.993446,0,1.425507,0.74366,1.5, -0.211123,-0.97746,0,1.351731,0.754603,1.5, -0.016373,-0.999866,0,1.5,0.74,1.5, -0.081709,-0.996656,0,1.425507,0.74366,0, 0.016373,-0.999866,0,1.5,0.74,0, -0.081709,-0.996656,0,1.425507,0.74366,0, -0.016373,-0.999866,0,1.5,0.74,1.5, -0.114299,-0.993446,0,1.425507,0.74366,1.5, 0.081709,-0.996656,0,1.574493,0.74366,1.5, 0.016373,-0.999866,0,1.5,0.74,0, 0.114299,-0.993446,0,1.574493,0.74366,0, 0.016373,-0.999866,0,1.5,0.74,0, 0.081709,-0.996656,0,1.574493,0.74366,1.5, -0.016373,-0.999866,0,1.5,0.74,1.5, 0.783294,-0.621651,0,2.087488,1.017861,0, 0.822262,-0.56911,0,2.131917,1.077767,1.5, 0.76252,-0.646965,0,2.087488,1.017861,1.5, 0.822262,-0.56911,0,2.131917,1.077767,1.5, 0.783294,-0.621651,0,2.087488,1.017861,0, 0.840455,-0.541882,0,2.131917,1.077767,0, -0.305914,-0.952059,0,1.279384,0.772725,1.5, -0.367505,-0.930022,0,1.209161,0.797852,0, -0.274577,-0.961565,0,1.279384,0.772725,0, -0.367505,-0.930022,0,1.209161,0.797852,0, -0.305914,-0.952059,0,1.279384,0.772725,1.5, -0.397759,-0.91749,0,1.209161,0.797852,1.5, 1,0,0,2.26,1.5,0, 0.996656,0.081709,0,2.25634,1.574493,1.5, 1,0,0,2.26,1.5,1.5, 0.996656,0.081709,0,2.25634,1.574493,1.5, 1,0,0,2.26,1.5,0, 0.993446,0.114299,0,2.25634,1.574493,0, -0.980785,0.19509,0,0.754603,1.648269,1.5, -0.993446,0.114299,0,0.74366,1.574493,0, -0.996656,0.081709,0,0.74366,1.574493,1.5, -0.993446,0.114299,0,0.74366,1.574493,0, -0.980785,0.19509,0,0.754603,1.648269,1.5, -0.980785,0.19509,0,0.754603,1.648269,0, 0.211123,0.97746,0,1.648269,2.245397,1.5, 0.274577,0.961565,0,1.720616,2.227275,0, 0.179005,0.983848,0,1.648269,2.245397,0, 0.274577,0.961565,0,1.720616,2.227275,0, 0.211123,0.97746,0,1.648269,2.245397,1.5, 0.305914,0.952059,0,1.720616,2.227275,1.5, 0.114299,0.993446,0,1.574493,2.25634,1.5, 0.179005,0.983848,0,1.648269,2.245397,0, 0.081709,0.996656,0,1.574493,2.25634,0, 0.179005,0.983848,0,1.648269,2.245397,0, 0.114299,0.993446,0,1.574493,2.25634,1.5, 0.211123,0.97746,0,1.648269,2.245397,1.5, -0.707107,0.707107,0,0.962599,2.037401,1.5, -0.646965,0.76252,0,1.017861,2.087488,0, -0.707107,0.707107,0,0.962599,2.037401,0, -0.646965,0.76252,0,1.017861,2.087488,0, -0.707107,0.707107,0,0.962599,2.037401,1.5, -0.621651,0.783294,0,1.017861,2.087488,1.5, -0.707107,0.707107,0,0.962599,2.037401,1.5, -0.76252,0.646965,0,0.912512,1.982139,0, -0.783294,0.621651,0,0.912512,1.982139,1.5, -0.76252,0.646965,0,0.912512,1.982139,0, -0.707107,0.707107,0,0.962599,2.037401,1.5, -0.707107,0.707107,0,0.962599,2.037401,0, -0.881921,0.471397,0,0.82974,1.858262,1.5, -0.83147,0.55557,0,0.868083,1.922233,0, -0.881921,0.471397,0,0.82974,1.858262,0, -0.83147,0.55557,0,0.868083,1.922233,0, -0.881921,0.471397,0,0.82974,1.858262,1.5, -0.83147,0.55557,0,0.868083,1.922233,1.5, -0.881921,0.471397,0,0.82974,1.858262,1.5, -0.91749,0.397759,0,0.797852,1.790839,0, -0.930022,0.367505,0,0.797852,1.790839,1.5, -0.91749,0.397759,0,0.797852,1.790839,0, -0.881921,0.471397,0,0.82974,1.858262,1.5, -0.881921,0.471397,0,0.82974,1.858262,0, -0.930022,0.367505,0,0.797852,1.790839,1.5, -0.95694,0.290285,0,0.772725,1.720616,0, -0.95694,0.290285,0,0.772725,1.720616,1.5, -0.95694,0.290285,0,0.772725,1.720616,0, -0.930022,0.367505,0,0.797852,1.790839,1.5, -0.91749,0.397759,0,0.797852,1.790839,0, 0.016373,0.999866,0,1.5,2.26,1.5, 0.081709,0.996656,0,1.574493,2.25634,0, -0.016373,0.999866,0,1.5,2.26,0, 0.081709,0.996656,0,1.574493,2.25634,0, 0.016373,0.999866,0,1.5,2.26,1.5, 0.114299,0.993446,0,1.574493,2.25634,1.5, -0.081709,0.996656,0,1.425507,2.25634,1.5, -0.016373,0.999866,0,1.5,2.26,0, -0.114299,0.993446,0,1.425507,2.25634,0, -0.016373,0.999866,0,1.5,2.26,0, -0.081709,0.996656,0,1.425507,2.25634,1.5, 0.016373,0.999866,0,1.5,2.26,1.5, -0.179005,0.983848,0,1.351731,2.245397,1.5, -0.114299,0.993446,0,1.425507,2.25634,0, -0.211123,0.97746,0,1.351731,2.245397,0, -0.114299,0.993446,0,1.425507,2.25634,0, -0.179005,0.983848,0,1.351731,2.245397,1.5, -0.081709,0.996656,0,1.425507,2.25634,1.5, -0.274577,0.961565,0,1.279384,2.227275,1.5, -0.211123,0.97746,0,1.351731,2.245397,0, -0.305914,0.952059,0,1.279384,2.227275,0, -0.211123,0.97746,0,1.351731,2.245397,0, -0.274577,0.961565,0,1.279384,2.227275,1.5, -0.179005,0.983848,0,1.351731,2.245397,1.5, -0.367505,0.930022,0,1.209161,2.202148,1.5, -0.305914,0.952059,0,1.279384,2.227275,0, -0.397759,0.91749,0,1.209161,2.202148,0, -0.305914,0.952059,0,1.279384,2.227275,0, -0.367505,0.930022,0,1.209161,2.202148,1.5, -0.274577,0.961565,0,1.279384,2.227275,1.5, 0.874085,0.485774,0,2.17026,1.858262,0, 0.83147,0.55557,0,2.131917,1.922233,1.5, 0.889521,0.456893,0,2.17026,1.858262,1.5, 0.83147,0.55557,0,2.131917,1.922233,1.5, 0.874085,0.485774,0,2.17026,1.858262,0, 0.83147,0.55557,0,2.131917,1.922233,0, -0.783294,0.621651,0,0.912512,1.982139,1.5, -0.83147,0.55557,0,0.868083,1.922233,0, -0.83147,0.55557,0,0.868083,1.922233,1.5, -0.83147,0.55557,0,0.868083,1.922233,0, -0.783294,0.621651,0,0.912512,1.982139,1.5, -0.76252,0.646965,0,0.912512,1.982139,0, 0.541882,-0.840455,0,1.922233,0.868083,1.5, 0.485774,-0.874085,0,1.858262,0.82974,0, 0.56911,-0.822262,0,1.922233,0.868083,0, 0.485774,-0.874085,0,1.858262,0.82974,0, 0.541882,-0.840455,0,1.922233,0.868083,1.5, 0.456893,-0.889521,0,1.858262,0.82974,1.5, 0.621651,-0.783294,0,1.982139,0.912512,1.5, 0.56911,-0.822262,0,1.922233,0.868083,0, 0.646965,-0.76252,0,1.982139,0.912512,0, 0.56911,-0.822262,0,1.922233,0.868083,0, 0.621651,-0.783294,0,1.982139,0.912512,1.5, 0.541882,-0.840455,0,1.922233,0.868083,1.5, 0.695434,-0.71859,0,2.037401,0.962599,1.5, 0.646965,-0.76252,0,1.982139,0.912512,0, 0.71859,-0.695434,0,2.037401,0.962599,0, 0.646965,-0.76252,0,1.982139,0.912512,0, 0.695434,-0.71859,0,2.037401,0.962599,1.5, 0.621651,-0.783294,0,1.982139,0.912512,1.5, -0.646965,-0.76252,0,1.017861,0.912512,1.5, -0.695434,-0.71859,0,0.962599,0.962599,0, -0.621651,-0.783294,0,1.017861,0.912512,0, -0.695434,-0.71859,0,0.962599,0.962599,0, -0.646965,-0.76252,0,1.017861,0.912512,1.5, -0.71859,-0.695434,0,0.962599,0.962599,1.5, 0.397759,0.91749,0,1.790839,2.202148,1.5, 0.456893,0.889521,0,1.858262,2.17026,0, 0.367505,0.930022,0,1.790839,2.202148,0, 0.456893,0.889521,0,1.858262,2.17026,0, 0.397759,0.91749,0,1.790839,2.202148,1.5, 0.485774,0.874085,0,1.858262,2.17026,1.5, 0.783294,0.621651,0,2.087488,1.982139,0, 0.83147,0.55557,0,2.131917,1.922233,1.5, 0.83147,0.55557,0,2.131917,1.922233,0, 0.83147,0.55557,0,2.131917,1.922233,1.5, 0.783294,0.621651,0,2.087488,1.982139,0, 0.76252,0.646965,0,2.087488,1.982139,1.5, 0.993446,0.114299,0,2.25634,1.574493,0, 0.983848,0.179005,0,2.245397,1.648269,1.5, 0.996656,0.081709,0,2.25634,1.574493,1.5, 0.983848,0.179005,0,2.245397,1.648269,1.5, 0.993446,0.114299,0,2.25634,1.574493,0, 0.97746,0.211123,0,2.245397,1.648269,0, 0.56911,0.822262,0,1.922233,2.131917,1.5, 0.621651,0.783294,0,1.982139,2.087488,0, 0.541882,0.840455,0,1.922233,2.131917,0, 0.621651,0.783294,0,1.982139,2.087488,0, 0.56911,0.822262,0,1.922233,2.131917,1.5, 0.646965,0.76252,0,1.982139,2.087488,1.5, 0.646965,0.76252,0,1.982139,2.087488,1.5, 0.707107,0.707107,0,2.037401,2.037401,0, 0.621651,0.783294,0,1.982139,2.087488,0, 0.707107,0.707107,0,2.037401,2.037401,0, 0.646965,0.76252,0,1.982139,2.087488,1.5, 0.707107,0.707107,0,2.037401,2.037401,1.5, 0.305914,0.952059,0,1.720616,2.227275,1.5, 0.367505,0.930022,0,1.790839,2.202148,0, 0.274577,0.961565,0,1.720616,2.227275,0, 0.367505,0.930022,0,1.790839,2.202148,0, 0.305914,0.952059,0,1.720616,2.227275,1.5, 0.397759,0.91749,0,1.790839,2.202148,1.5, 0.91749,0.397759,0,2.202148,1.790839,0, 0.889521,0.456893,0,2.17026,1.858262,1.5, 0.930022,0.367505,0,2.202148,1.790839,1.5, 0.889521,0.456893,0,2.17026,1.858262,1.5, 0.91749,0.397759,0,2.202148,1.790839,0, 0.874085,0.485774,0,2.17026,1.858262,0, -0.485774,-0.874085,0,1.141738,0.82974,1.5, -0.541882,-0.840455,0,1.077767,0.868083,0, -0.456893,-0.889521,0,1.141738,0.82974,0, -0.541882,-0.840455,0,1.077767,0.868083,0, -0.485774,-0.874085,0,1.141738,0.82974,1.5, -0.56911,-0.822262,0,1.077767,0.868083,1.5, 0.367505,-0.930022,0,1.790839,0.797852,1.5, 0.305914,-0.952059,0,1.720616,0.772725,0, 0.397759,-0.91749,0,1.790839,0.797852,0, 0.305914,-0.952059,0,1.720616,0.772725,0, 0.367505,-0.930022,0,1.790839,0.797852,1.5, 0.274577,-0.961565,0,1.720616,0.772725,1.5, -0.996656,0.081709,0,0.74366,1.574493,1.5, -0.999866,0.016373,0,0.74,1.5,0, -0.999866,-0.016373,0,0.74,1.5,1.5, -0.999866,0.016373,0,0.74,1.5,0, -0.996656,0.081709,0,0.74366,1.574493,1.5, -0.993446,0.114299,0,0.74366,1.574493,0, -0.980785,0.19509,0,0.754603,1.648269,1.5, -0.95694,0.290285,0,0.772725,1.720616,0, -0.980785,0.19509,0,0.754603,1.648269,0, -0.95694,0.290285,0,0.772725,1.720616,0, -0.980785,0.19509,0,0.754603,1.648269,1.5, -0.95694,0.290285,0,0.772725,1.720616,1.5, 0.707107,0.707107,0,2.037401,2.037401,0, 0.76252,0.646965,0,2.087488,1.982139,1.5, 0.783294,0.621651,0,2.087488,1.982139,0, 0.76252,0.646965,0,2.087488,1.982139,1.5, 0.707107,0.707107,0,2.037401,2.037401,0, 0.707107,0.707107,0,2.037401,2.037401,1.5, 0.274577,-0.961565,0,1.720616,0.772725,1.5, 0.211123,-0.97746,0,1.648269,0.754603,0, 0.305914,-0.952059,0,1.720616,0.772725,0, 0.211123,-0.97746,0,1.648269,0.754603,0, 0.274577,-0.961565,0,1.720616,0.772725,1.5, 0.179005,-0.983848,0,1.648269,0.754603,1.5, -0.71859,-0.695434,0,0.962599,0.962599,1.5, -0.77301,-0.634393,0,0.912512,1.017861,0, -0.695434,-0.71859,0,0.962599,0.962599,0, -0.77301,-0.634393,0,0.912512,1.017861,0, -0.71859,-0.695434,0,0.962599,0.962599,1.5, -0.77301,-0.634393,0,0.912512,1.017861,1.5, -0.91749,-0.397759,0,0.797852,1.209161,1.5, -0.889521,-0.456893,0,0.82974,1.141738,0, -0.874085,-0.485774,0,0.82974,1.141738,1.5, -0.889521,-0.456893,0,0.82974,1.141738,0, -0.91749,-0.397759,0,0.797852,1.209161,1.5, -0.930022,-0.367505,0,0.797852,1.209161,0, 0.840455,-0.541882,0,2.131917,1.077767,0, 0.881921,-0.471397,0,2.17026,1.141738,1.5, 0.822262,-0.56911,0,2.131917,1.077767,1.5, 0.881921,-0.471397,0,2.17026,1.141738,1.5, 0.840455,-0.541882,0,2.131917,1.077767,0, 0.881921,-0.471397,0,2.17026,1.141738,0, 0.91749,-0.397759,0,2.202148,1.209161,0, 0.881921,-0.471397,0,2.17026,1.141738,1.5, 0.881921,-0.471397,0,2.17026,1.141738,0, 0.881921,-0.471397,0,2.17026,1.141738,1.5, 0.91749,-0.397759,0,2.202148,1.209161,0, 0.930022,-0.367505,0,2.202148,1.209161,1.5, -0.874085,-0.485774,0,0.82974,1.141738,1.5, -0.840455,-0.541882,0,0.868083,1.077767,0, -0.822262,-0.56911,0,0.868083,1.077767,1.5, -0.840455,-0.541882,0,0.868083,1.077767,0, -0.874085,-0.485774,0,0.82974,1.141738,1.5, -0.889521,-0.456893,0,0.82974,1.141738,0, 0.95694,-0.290285,0,2.227275,1.279384,0, 0.980785,-0.19509,0,2.245397,1.351731,1.5, 0.95694,-0.290285,0,2.227275,1.279384,1.5, 0.980785,-0.19509,0,2.245397,1.351731,1.5, 0.95694,-0.290285,0,2.227275,1.279384,0, 0.980785,-0.19509,0,2.245397,1.351731,0, 0.95694,-0.290285,0,2.227275,1.279384,0, 0.930022,-0.367505,0,2.202148,1.209161,1.5, 0.91749,-0.397759,0,2.202148,1.209161,0, 0.930022,-0.367505,0,2.202148,1.209161,1.5, 0.95694,-0.290285,0,2.227275,1.279384,0, 0.95694,-0.290285,0,2.227275,1.279384,1.5, 1,0,0,2.26,1.5,0, 0.996656,-0.081709,0,2.25634,1.425507,1.5, 0.993446,-0.114299,0,2.25634,1.425507,0, 0.996656,-0.081709,0,2.25634,1.425507,1.5, 1,0,0,2.26,1.5,0, 1,0,0,2.26,1.5,1.5, 0.179005,-0.983848,0,1.648269,0.754603,1.5, 0.114299,-0.993446,0,1.574493,0.74366,0, 0.211123,-0.97746,0,1.648269,0.754603,0, 0.114299,-0.993446,0,1.574493,0.74366,0, 0.179005,-0.983848,0,1.648269,0.754603,1.5, 0.081709,-0.996656,0,1.574493,0.74366,1.5, -0.822262,-0.56911,0,0.868083,1.077767,1.5, -0.77301,-0.634393,0,0.912512,1.017861,0, -0.77301,-0.634393,0,0.912512,1.017861,1.5, -0.77301,-0.634393,0,0.912512,1.017861,0, -0.822262,-0.56911,0,0.868083,1.077767,1.5, -0.840455,-0.541882,0,0.868083,1.077767,0, -0.56911,-0.822262,0,1.077767,0.868083,1.5, -0.621651,-0.783294,0,1.017861,0.912512,0, -0.541882,-0.840455,0,1.077767,0.868083,0, -0.621651,-0.783294,0,1.017861,0.912512,0, -0.56911,-0.822262,0,1.077767,0.868083,1.5, -0.646965,-0.76252,0,1.017861,0.912512,1.5, -0.999866,-0.016373,0,0.74,1.5,1.5, -0.996656,-0.081709,0,0.74366,1.425507,0, -0.993446,-0.114299,0,0.74366,1.425507,1.5, -0.996656,-0.081709,0,0.74366,1.425507,0, -0.999866,-0.016373,0,0.74,1.5,1.5, -0.999866,0.016373,0,0.74,1.5,0, -0.993446,-0.114299,0,0.74366,1.425507,1.5, -0.983848,-0.179005,0,0.754603,1.351731,0, -0.97746,-0.211123,0,0.754603,1.351731,1.5, -0.983848,-0.179005,0,0.754603,1.351731,0, -0.993446,-0.114299,0,0.74366,1.425507,1.5, -0.996656,-0.081709,0,0.74366,1.425507,0, -0.97746,-0.211123,0,0.754603,1.351731,1.5, -0.961565,-0.274577,0,0.772725,1.279384,0, -0.952059,-0.305914,0,0.772725,1.279384,1.5, -0.961565,-0.274577,0,0.772725,1.279384,0, -0.97746,-0.211123,0,0.754603,1.351731,1.5, -0.983848,-0.179005,0,0.754603,1.351731,0, -0.952059,-0.305914,0,0.772725,1.279384,1.5, -0.930022,-0.367505,0,0.797852,1.209161,0, -0.91749,-0.397759,0,0.797852,1.209161,1.5, -0.930022,-0.367505,0,0.797852,1.209161,0, -0.952059,-0.305914,0,0.772725,1.279384,1.5, -0.961565,-0.274577,0,0.772725,1.279384,0, -0.456893,0.889521,0,1.141738,2.17026,1.5, -0.397759,0.91749,0,1.209161,2.202148,0, -0.485774,0.874085,0,1.141738,2.17026,0, -0.397759,0.91749,0,1.209161,2.202148,0, -0.456893,0.889521,0,1.141738,2.17026,1.5, -0.367505,0.930022,0,1.209161,2.202148,1.5, 0,0,-1,1.5,1.5,0, 0,0,-1,1.425507,0.74366,0, 0,0,-1,1.351731,0.754603,0, 0,0,-1,1.425507,0.74366,0, 0,0,-1,1.5,1.5,0, 0,0,-1,1.5,0.74,0, 0.993446,-0.114299,0,2.25634,1.425507,0, 0.980785,-0.19509,0,2.245397,1.351731,1.5, 0.980785,-0.19509,0,2.245397,1.351731,0, 0.980785,-0.19509,0,2.245397,1.351731,1.5, 0.993446,-0.114299,0,2.25634,1.425507,0, 0.996656,-0.081709,0,2.25634,1.425507,1.5, 0.71859,-0.695434,0,2.037401,0.962599,0, 0.76252,-0.646965,0,2.087488,1.017861,1.5, 0.695434,-0.71859,0,2.037401,0.962599,1.5, 0.76252,-0.646965,0,2.087488,1.017861,1.5, 0.71859,-0.695434,0,2.037401,0.962599,0, 0.783294,-0.621651,0,2.087488,1.017861,0, 0.952059,0.305914,0,2.227275,1.720616,0, 0.930022,0.367505,0,2.202148,1.790839,1.5, 0.961565,0.274577,0,2.227275,1.720616,1.5, 0.930022,0.367505,0,2.202148,1.790839,1.5, 0.952059,0.305914,0,2.227275,1.720616,0, 0.91749,0.397759,0,2.202148,1.790839,0, -0.397759,-0.91749,0,1.209161,0.797852,1.5, -0.456893,-0.889521,0,1.141738,0.82974,0, -0.367505,-0.930022,0,1.209161,0.797852,0, -0.456893,-0.889521,0,1.141738,0.82974,0, -0.397759,-0.91749,0,1.209161,0.797852,1.5, -0.485774,-0.874085,0,1.141738,0.82974,1.5, 0,0,1,2.245397,1.648269,1.5, 0,0,1,2.202148,1.790839,1.5, 0,0,1,1.5,1.5,1.5, 0,0,1,2.202148,1.790839,1.5, 0,0,1,2.245397,1.648269,1.5, 0,0,1,2.227275,1.720616,1.5, 0,0,-1,0.74366,1.574493,0, 0,0,-1,1.5,1.5,0, 0,0,-1,0.74,1.5,0, 0,0,-1,1.5,1.5,0, 0,0,-1,0.74366,1.574493,0, 0,0,-1,0.754603,1.648269,0, 0,0,-1,1.648269,2.245397,0, 0,0,-1,1.790839,2.202148,0, 0,0,-1,1.5,1.5,0, 0,0,-1,1.790839,2.202148,0, 0,0,-1,1.648269,2.245397,0, 0,0,-1,1.720616,2.227275,0, 0,0,-1,2.245397,1.351731,0, 0,0,-1,2.202148,1.209161,0, 0,0,-1,1.5,1.5,0, 0,0,-1,2.202148,1.209161,0, 0,0,-1,2.245397,1.351731,0, 0,0,-1,2.227275,1.279384,0, 0,0,-1,1.5,1.5,0, 0,0,-1,1.141738,0.82974,0, 0,0,-1,1.077767,0.868083,0, 0,0,-1,1.141738,0.82974,0, 0,0,-1,1.5,1.5,0, 0,0,-1,1.209161,0.797852,0, 0,0,-1,1.5,2.26,0, 0,0,-1,1.648269,2.245397,0, 0,0,-1,1.5,1.5,0, 0,0,-1,1.648269,2.245397,0, 0,0,-1,1.5,2.26,0, 0,0,-1,1.574493,2.25634,0, 0,0,-1,1.922233,2.131917,0, 0,0,-1,2.037401,2.037401,0, 0,0,-1,1.5,1.5,0, 0,0,-1,2.037401,2.037401,0, 0,0,-1,1.922233,2.131917,0, 0,0,-1,1.982139,2.087488,0, 0,0,-1,1.5,1.5,0, 0,0,-1,1.279384,0.772725,0, 0,0,-1,1.209161,0.797852,0, 0,0,-1,1.279384,0.772725,0, 0,0,-1,1.5,1.5,0, 0,0,-1,1.351731,0.754603,0, 0,0,-1,1.5,1.5,0, 0,0,-1,0.912512,1.017861,0, 0,0,-1,0.868083,1.077767,0, 0,0,-1,0.912512,1.017861,0, 0,0,-1,1.5,1.5,0, 0,0,-1,0.962599,0.962599,0, 0,0,-1,1.790839,2.202148,0, 0,0,-1,1.922233,2.131917,0, 0,0,-1,1.5,1.5,0, 0,0,-1,1.922233,2.131917,0, 0,0,-1,1.790839,2.202148,0, 0,0,-1,1.858262,2.17026,0, 0,0,-1,2.131917,1.922233,0, 0,0,-1,2.202148,1.790839,0, 0,0,-1,1.5,1.5,0, 0,0,-1,2.202148,1.790839,0, 0,0,-1,2.131917,1.922233,0, 0,0,-1,2.17026,1.858262,0, 0,0,-1,1.5,1.5,0, 0,0,-1,1.017861,0.912512,0, 0,0,-1,0.962599,0.962599,0, 0,0,-1,1.017861,0.912512,0, 0,0,-1,1.5,1.5,0, 0,0,-1,1.077767,0.868083,0, 0,0,-1,1.5,1.5,0, 0,0,-1,0.772725,1.279384,0, 0,0,-1,0.754603,1.351731,0, 0,0,-1,0.772725,1.279384,0, 0,0,-1,1.5,1.5,0, 0,0,-1,0.797852,1.209161,0, 0,0,-1,2.037401,2.037401,0, 0,0,-1,2.131917,1.922233,0, 0,0,-1,1.5,1.5,0, 0,0,-1,2.131917,1.922233,0, 0,0,-1,2.037401,2.037401,0, 0,0,-1,2.087488,1.982139,0, 0,0,-1,1.5,1.5,0, 0,0,-1,0.82974,1.141738,0, 0,0,-1,0.797852,1.209161,0, 0,0,-1,0.82974,1.141738,0, 0,0,-1,1.5,1.5,0, 0,0,-1,0.868083,1.077767,0, 0,0,-1,2.245397,1.648269,0, 0,0,-1,2.26,1.5,0, 0,0,-1,1.5,1.5,0, 0,0,-1,2.26,1.5,0, 0,0,-1,2.245397,1.648269,0, 0,0,-1,2.25634,1.574493,0, 0,0,-1,1.5,1.5,0, 0,0,-1,0.74366,1.425507,0, 0,0,-1,0.74,1.5,0, 0,0,-1,0.74366,1.425507,0, 0,0,-1,1.5,1.5,0, 0,0,-1,0.754603,1.351731,0, 0,0,-1,2.202148,1.790839,0, 0,0,-1,2.245397,1.648269,0, 0,0,-1,1.5,1.5,0, 0,0,-1,2.245397,1.648269,0, 0,0,-1,2.202148,1.790839,0, 0,0,-1,2.227275,1.720616,0, 0,0,-1,0.82974,1.858262,0, 0,0,-1,1.5,1.5,0, 0,0,-1,0.797852,1.790839,0, 0,0,-1,1.5,1.5,0, 0,0,-1,0.82974,1.858262,0, 0,0,-1,0.868083,1.922233,0, 0,0,-1,2.26,1.5,0, 0,0,-1,2.245397,1.351731,0, 0,0,-1,1.5,1.5,0, 0,0,-1,2.245397,1.351731,0, 0,0,-1,2.26,1.5,0, 0,0,-1,2.25634,1.425507,0, 0,0,-1,0.772725,1.720616,0, 0,0,-1,1.5,1.5,0, 0,0,-1,0.754603,1.648269,0, 0,0,-1,1.5,1.5,0, 0,0,-1,0.772725,1.720616,0, 0,0,-1,0.797852,1.790839,0, 0,0,-1,2.131917,1.077767,0, 0,0,-1,2.037401,0.962599,0, 0,0,-1,1.5,1.5,0, 0,0,-1,2.037401,0.962599,0, 0,0,-1,2.131917,1.077767,0, 0,0,-1,2.087488,1.017861,0, 0,0,-1,2.202148,1.209161,0, 0,0,-1,2.131917,1.077767,0, 0,0,-1,1.5,1.5,0, 0,0,-1,2.131917,1.077767,0, 0,0,-1,2.202148,1.209161,0, 0,0,-1,2.17026,1.141738,0, 0,0,-1,1.017861,2.087488,0, 0,0,-1,1.5,1.5,0, 0,0,-1,0.962599,2.037401,0, 0,0,-1,1.5,1.5,0, 0,0,-1,1.017861,2.087488,0, 0,0,-1,1.077767,2.131917,0, 0,0,-1,1.922233,0.868083,0, 0,0,-1,1.790839,0.797852,0, 0,0,-1,1.5,1.5,0, 0,0,-1,1.790839,0.797852,0, 0,0,-1,1.922233,0.868083,0, 0,0,-1,1.858262,0.82974,0, 0,0,-1,0.912512,1.982139,0, 0,0,-1,1.5,1.5,0, 0,0,-1,0.868083,1.922233,0, 0,0,-1,1.5,1.5,0, 0,0,-1,0.912512,1.982139,0, 0,0,-1,0.962599,2.037401,0, 0,0,-1,2.037401,0.962599,0, 0,0,-1,1.922233,0.868083,0, 0,0,-1,1.5,1.5,0, 0,0,-1,1.922233,0.868083,0, 0,0,-1,2.037401,0.962599,0, 0,0,-1,1.982139,0.912512,0, 0,0,-1,1.279384,2.227275,0, 0,0,-1,1.5,1.5,0, 0,0,-1,1.209161,2.202148,0, 0,0,-1,1.5,1.5,0, 0,0,-1,1.279384,2.227275,0, 0,0,-1,1.351731,2.245397,0, 0,0,-1,1.141738,2.17026,0, 0,0,-1,1.5,1.5,0, 0,0,-1,1.077767,2.131917,0, 0,0,-1,1.5,1.5,0, 0,0,-1,1.141738,2.17026,0, 0,0,-1,1.209161,2.202148,0, 0,0,-1,1.648269,0.754603,0, 0,0,-1,1.5,0.74,0, 0,0,-1,1.5,1.5,0, 0,0,-1,1.5,0.74,0, 0,0,-1,1.648269,0.754603,0, 0,0,-1,1.574493,0.74366,0, 0,0,-1,1.790839,0.797852,0, 0,0,-1,1.648269,0.754603,0, 0,0,-1,1.5,1.5,0, 0,0,-1,1.648269,0.754603,0, 0,0,-1,1.790839,0.797852,0, 0,0,-1,1.720616,0.772725,0, 0,0,-1,1.425507,2.25634,0, 0,0,-1,1.5,1.5,0, 0,0,-1,1.351731,2.245397,0, 0,0,-1,1.5,1.5,0, 0,0,-1,1.425507,2.25634,0, 0,0,-1,1.5,2.26,0, 0,0,1,2.202148,1.790839,1.5, 0,0,1,2.131917,1.922233,1.5, 0,0,1,1.5,1.5,1.5, 0,0,1,2.131917,1.922233,1.5, 0,0,1,2.202148,1.790839,1.5, 0,0,1,2.17026,1.858262,1.5, 0,0,1,1.922233,2.131917,1.5, 0,0,1,1.790839,2.202148,1.5, 0,0,1,1.5,1.5,1.5, 0,0,1,1.790839,2.202148,1.5, 0,0,1,1.922233,2.131917,1.5, 0,0,1,1.858262,2.17026,1.5, 0,0,1,1.5,1.5,1.5, 0,0,1,0.912512,1.982139,1.5, 0,0,1,0.868083,1.922233,1.5, 0,0,1,0.912512,1.982139,1.5, 0,0,1,1.5,1.5,1.5, 0,0,1,0.962599,2.037401,1.5, 0,0,1,1.790839,2.202148,1.5, 0,0,1,1.648269,2.245397,1.5, 0,0,1,1.5,1.5,1.5, 0,0,1,1.648269,2.245397,1.5, 0,0,1,1.790839,2.202148,1.5, 0,0,1,1.720616,2.227275,1.5, 0,0,1,2.131917,1.922233,1.5, 0,0,1,2.037401,2.037401,1.5, 0,0,1,1.5,1.5,1.5, 0,0,1,2.037401,2.037401,1.5, 0,0,1,2.131917,1.922233,1.5, 0,0,1,2.087488,1.982139,1.5, 0,0,1,1.648269,2.245397,1.5, 0,0,1,1.5,2.26,1.5, 0,0,1,1.5,1.5,1.5, 0,0,1,1.5,2.26,1.5, 0,0,1,1.648269,2.245397,1.5, 0,0,1,1.574493,2.25634,1.5, 0,0,1,1.5,1.5,1.5, 0,0,1,1.017861,2.087488,1.5, 0,0,1,0.962599,2.037401,1.5, 0,0,1,1.017861,2.087488,1.5, 0,0,1,1.5,1.5,1.5, 0,0,1,1.077767,2.131917,1.5, 0,0,1,1.017861,0.912512,1.5, 0,0,1,1.5,1.5,1.5, 0,0,1,0.962599,0.962599,1.5, 0,0,1,1.5,1.5,1.5, 0,0,1,1.017861,0.912512,1.5, 0,0,1,1.077767,0.868083,1.5, 0,0,1,0.82974,1.141738,1.5, 0,0,1,1.5,1.5,1.5, 0,0,1,0.797852,1.209161,1.5, 0,0,1,1.5,1.5,1.5, 0,0,1,0.82974,1.141738,1.5, 0,0,1,0.868083,1.077767,1.5, 0,0,1,1.922233,0.868083,1.5, 0,0,1,2.037401,0.962599,1.5, 0,0,1,1.5,1.5,1.5, 0,0,1,2.037401,0.962599,1.5, 0,0,1,1.922233,0.868083,1.5, 0,0,1,1.982139,0.912512,1.5, 0,0,1,0.912512,1.017861,1.5, 0,0,1,1.5,1.5,1.5, 0,0,1,0.868083,1.077767,1.5, 0,0,1,1.5,1.5,1.5, 0,0,1,0.912512,1.017861,1.5, 0,0,1,0.962599,0.962599,1.5, 0,0,1,1.279384,0.772725,1.5, 0,0,1,1.5,1.5,1.5, 0,0,1,1.209161,0.797852,1.5, 0,0,1,1.5,1.5,1.5, 0,0,1,1.279384,0.772725,1.5, 0,0,1,1.351731,0.754603,1.5, 0,0,1,1.790839,0.797852,1.5, 0,0,1,1.922233,0.868083,1.5, 0,0,1,1.5,1.5,1.5, 0,0,1,1.922233,0.868083,1.5, 0,0,1,1.790839,0.797852,1.5, 0,0,1,1.858262,0.82974,1.5, 0,0,1,2.131917,1.077767,1.5, 0,0,1,2.202148,1.209161,1.5, 0,0,1,1.5,1.5,1.5, 0,0,1,2.202148,1.209161,1.5, 0,0,1,2.131917,1.077767,1.5, 0,0,1,2.17026,1.141738,1.5, 0,0,1,1.141738,0.82974,1.5, 0,0,1,1.5,1.5,1.5, 0,0,1,1.077767,0.868083,1.5, 0,0,1,1.5,1.5,1.5, 0,0,1,1.141738,0.82974,1.5, 0,0,1,1.209161,0.797852,1.5, 0,0,1,1.648269,0.754603,1.5, 0,0,1,1.790839,0.797852,1.5, 0,0,1,1.5,1.5,1.5, 0,0,1,1.790839,0.797852,1.5, 0,0,1,1.648269,0.754603,1.5, 0,0,1,1.720616,0.772725,1.5, 0,0,1,1.5,1.5,1.5, 0,0,1,0.772725,1.720616,1.5, 0,0,1,0.754603,1.648269,1.5, 0,0,1,0.772725,1.720616,1.5, 0,0,1,1.5,1.5,1.5, 0,0,1,0.797852,1.790839,1.5, 0,0,1,1.5,1.5,1.5, 0,0,1,1.141738,2.17026,1.5, 0,0,1,1.077767,2.131917,1.5, 0,0,1,1.141738,2.17026,1.5, 0,0,1,1.5,1.5,1.5, 0,0,1,1.209161,2.202148,1.5, 0,0,1,1.5,1.5,1.5, 0,0,1,0.74366,1.574493,1.5, 0,0,1,0.74,1.5,1.5, 0,0,1,0.74366,1.574493,1.5, 0,0,1,1.5,1.5,1.5, 0,0,1,0.754603,1.648269,1.5, 0,0,1,1.5,1.5,1.5, 0,0,1,0.82974,1.858262,1.5, 0,0,1,0.797852,1.790839,1.5, 0,0,1,0.82974,1.858262,1.5, 0,0,1,1.5,1.5,1.5, 0,0,1,0.868083,1.922233,1.5, 0,0,1,0.74366,1.425507,1.5, 0,0,1,1.5,1.5,1.5, 0,0,1,0.74,1.5,1.5, 0,0,1,1.5,1.5,1.5, 0,0,1,0.74366,1.425507,1.5, 0,0,1,0.754603,1.351731,1.5, 0,0,1,0.772725,1.279384,1.5, 0,0,1,1.5,1.5,1.5, 0,0,1,0.754603,1.351731,1.5, 0,0,1,1.5,1.5,1.5, 0,0,1,0.772725,1.279384,1.5, 0,0,1,0.797852,1.209161,1.5, 0,0,1,1.5,1.5,1.5, 0,0,1,1.425507,2.25634,1.5, 0,0,1,1.351731,2.245397,1.5, 0,0,1,1.425507,2.25634,1.5, 0,0,1,1.5,1.5,1.5, 0,0,1,1.5,2.26,1.5, 0,0,1,2.037401,2.037401,1.5, 0,0,1,1.922233,2.131917,1.5, 0,0,1,1.5,1.5,1.5, 0,0,1,1.922233,2.131917,1.5, 0,0,1,2.037401,2.037401,1.5, 0,0,1,1.982139,2.087488,1.5, 0,0,1,2.037401,0.962599,1.5, 0,0,1,2.131917,1.077767,1.5, 0,0,1,1.5,1.5,1.5, 0,0,1,2.131917,1.077767,1.5, 0,0,1,2.037401,0.962599,1.5, 0,0,1,2.087488,1.017861,1.5, 0,0,1,2.26,1.5,1.5, 0,0,1,2.245397,1.648269,1.5, 0,0,1,1.5,1.5,1.5, 0,0,1,2.245397,1.648269,1.5, 0,0,1,2.26,1.5,1.5, 0,0,1,2.25634,1.574493,1.5, 0,0,1,1.425507,0.74366,1.5, 0,0,1,1.5,1.5,1.5, 0,0,1,1.351731,0.754603,1.5, 0,0,1,1.5,1.5,1.5, 0,0,1,1.425507,0.74366,1.5, 0,0,1,1.5,0.74,1.5, 0,0,1,1.5,0.74,1.5, 0,0,1,1.648269,0.754603,1.5, 0,0,1,1.5,1.5,1.5, 0,0,1,1.648269,0.754603,1.5, 0,0,1,1.5,0.74,1.5, 0,0,1,1.574493,0.74366,1.5, 0,0,1,2.202148,1.209161,1.5, 0,0,1,2.245397,1.351731,1.5, 0,0,1,1.5,1.5,1.5, 0,0,1,2.245397,1.351731,1.5, 0,0,1,2.202148,1.209161,1.5, 0,0,1,2.227275,1.279384,1.5, 0,0,1,1.5,1.5,1.5, 0,0,1,1.279384,2.227275,1.5, 0,0,1,1.209161,2.202148,1.5, 0,0,1,1.279384,2.227275,1.5, 0,0,1,1.5,1.5,1.5, 0,0,1,1.351731,2.245397,1.5, 0,0,1,2.245397,1.351731,1.5, 0,0,1,2.26,1.5,1.5, 0,0,1,1.5,1.5,1.5, 0,0,1,2.26,1.5,1.5, 0,0,1,2.245397,1.351731,1.5, 0,0,1,2.25634,1.425507,1.5 }; static const struct gllist lament_model_pillar_b_frame = { GL_N3F_V3F, GL_TRIANGLES, 768, lament_model_pillar_b_data, 0 }; const struct gllist *lament_model_pillar_b = &lament_model_pillar_b_frame; static const float lament_model_pillar_base_data[] = { 1,0,0,3,0.205,0.205, 1,0,0,3,0,0, 1,0,0,3,0.205,0, 0,0,1,0.74,1.5,3, 0,0,1,0,1.798369,3, 0,0,1,0,1.5,3, 0,0,1,0,1.798369,3, 0,0,1,0.74,1.5,3, 0,0,1,0.74366,1.574493,3, 0,0,1,0,1.798369,3, 0,0,1,0.74366,1.574493,3, 0,0,1,0.754603,1.648269,3, -1,0,0,0,3,3, -1,0,0,0,2.795,2.795, -1,0,0,0,2.795,3, 0,-1,0,2.795,0,0.205, 0,-1,0,3,0,0, 0,-1,0,3,0,0.205, 0,1,0,0.205,3,0.205, 0,1,0,0.497732,3,0, 0,1,0,0.205,3,0, 0,1,0,0.497732,3,0, 0,1,0,0.205,3,0.205, 0,1,0,0.87868,3,0, 0,1,0,0.87868,3,0, 0,1,0,0.205,3,0.205, 0,1,0,1.201631,3,0, 0,1,0,1.201631,3,0, 0,1,0,0.205,3,0.205, 0,1,0,1.5,3,0, 0,1,0,1.5,3,0, 0,1,0,0.205,3,0.205, 0,1,0,1.5,3,0.205, 0.621651,0.783294,0,1.017861,0.912512,3, 0.56911,0.822262,0,1.077767,0.868083,0, 0.646965,0.76252,0,1.017861,0.912512,0, 0.56911,0.822262,0,1.077767,0.868083,0, 0.621651,0.783294,0,1.017861,0.912512,3, 0.541882,0.840455,0,1.077767,0.868083,3, -0.456893,-0.889521,0,1.858262,2.17026,3, -0.397759,-0.91749,0,1.790839,2.202148,0, -0.485774,-0.874085,0,1.858262,2.17026,0, -0.397759,-0.91749,0,1.790839,2.202148,0, -0.456893,-0.889521,0,1.858262,2.17026,3, -0.367505,-0.930022,0,1.790839,2.202148,3, 0.993446,0.114299,0,0.74366,1.425507,0, 0.983848,0.179005,0,0.754603,1.351731,3, 0.97746,0.211123,0,0.754603,1.351731,0, 0.983848,0.179005,0,0.754603,1.351731,3, 0.993446,0.114299,0,0.74366,1.425507,0, 0.996656,0.081709,0,0.74366,1.425507,3, 0.97746,0.211123,0,0.754603,1.351731,0, 0.961565,0.274577,0,0.772725,1.279384,3, 0.952059,0.305914,0,0.772725,1.279384,0, 0.961565,0.274577,0,0.772725,1.279384,3, 0.97746,0.211123,0,0.754603,1.351731,0, 0.983848,0.179005,0,0.754603,1.351731,3, 0.952059,0.305914,0,0.772725,1.279384,0, 0.930022,0.367505,0,0.797852,1.209161,3, 0.91749,0.397759,0,0.797852,1.209161,0, 0.930022,0.367505,0,0.797852,1.209161,3, 0.952059,0.305914,0,0.772725,1.279384,0, 0.961565,0.274577,0,0.772725,1.279384,3, 0.91749,0.397759,0,0.797852,1.209161,0, 0.889521,0.456893,0,0.82974,1.141738,3, 0.874085,0.485774,0,0.82974,1.141738,0, 0.889521,0.456893,0,0.82974,1.141738,3, 0.91749,0.397759,0,0.797852,1.209161,0, 0.930022,0.367505,0,0.797852,1.209161,3, -0.874085,0.485774,0,2.17026,1.141738,3, -0.840455,0.541882,0,2.131917,1.077767,0, -0.822262,0.56911,0,2.131917,1.077767,3, -0.840455,0.541882,0,2.131917,1.077767,0, -0.874085,0.485774,0,2.17026,1.141738,3, -0.889521,0.456893,0,2.17026,1.141738,0, -0.91749,0.397759,0,2.202148,1.209161,3, -0.889521,0.456893,0,2.17026,1.141738,0, -0.874085,0.485774,0,2.17026,1.141738,3, -0.889521,0.456893,0,2.17026,1.141738,0, -0.91749,0.397759,0,2.202148,1.209161,3, -0.930022,0.367505,0,2.202148,1.209161,0, 0.874085,0.485774,0,0.82974,1.141738,0, 0.840455,0.541882,0,0.868083,1.077767,3, 0.822262,0.56911,0,0.868083,1.077767,0, 0.840455,0.541882,0,0.868083,1.077767,3, 0.874085,0.485774,0,0.82974,1.141738,0, 0.889521,0.456893,0,0.82974,1.141738,3, 0.999866,0.016373,0,0.74,1.5,0, 0.996656,0.081709,0,0.74366,1.425507,3, 0.993446,0.114299,0,0.74366,1.425507,0, 0.996656,0.081709,0,0.74366,1.425507,3, 0.999866,0.016373,0,0.74,1.5,0, 0.999866,-0.016373,0,0.74,1.5,3, 0.456893,0.889521,0,1.141738,0.82974,3, 0.397759,0.91749,0,1.209161,0.797852,0, 0.485774,0.874085,0,1.141738,0.82974,0, 0.397759,0.91749,0,1.209161,0.797852,0, 0.456893,0.889521,0,1.141738,0.82974,3, 0.367505,0.930022,0,1.209161,0.797852,3, 0.996656,-0.081709,0,0.74366,1.574493,0, 0.999866,-0.016373,0,0.74,1.5,3, 0.999866,0.016373,0,0.74,1.5,0, 0.999866,-0.016373,0,0.74,1.5,3, 0.996656,-0.081709,0,0.74366,1.574493,0, 0.993446,-0.114299,0,0.74366,1.574493,3, 0.983848,-0.179005,0,0.754603,1.648269,0, 0.993446,-0.114299,0,0.74366,1.574493,3, 0.996656,-0.081709,0,0.74366,1.574493,0, 0.993446,-0.114299,0,0.74366,1.574493,3, 0.983848,-0.179005,0,0.754603,1.648269,0, 0.97746,-0.211123,0,0.754603,1.648269,3, 0.961565,-0.274577,0,0.772725,1.720616,0, 0.97746,-0.211123,0,0.754603,1.648269,3, 0.983848,-0.179005,0,0.754603,1.648269,0, 0.97746,-0.211123,0,0.754603,1.648269,3, 0.961565,-0.274577,0,0.772725,1.720616,0, 0.952059,-0.305914,0,0.772725,1.720616,3, 0.930022,-0.367505,0,0.797852,1.790839,0, 0.952059,-0.305914,0,0.772725,1.720616,3, 0.961565,-0.274577,0,0.772725,1.720616,0, 0.952059,-0.305914,0,0.772725,1.720616,3, 0.930022,-0.367505,0,0.797852,1.790839,0, 0.91749,-0.397759,0,0.797852,1.790839,3, 0.889521,-0.456893,0,0.82974,1.858262,0, 0.91749,-0.397759,0,0.797852,1.790839,3, 0.930022,-0.367505,0,0.797852,1.790839,0, 0.91749,-0.397759,0,0.797852,1.790839,3, 0.889521,-0.456893,0,0.82974,1.858262,0, 0.874085,-0.485774,0,0.82974,1.858262,3, 0.840455,-0.541882,0,0.868083,1.922233,0, 0.874085,-0.485774,0,0.82974,1.858262,3, 0.889521,-0.456893,0,0.82974,1.858262,0, 0.874085,-0.485774,0,0.82974,1.858262,3, 0.840455,-0.541882,0,0.868083,1.922233,0, 0.822262,-0.56911,0,0.868083,1.922233,3, 0.783294,-0.621651,0,0.912512,1.982139,0, 0.822262,-0.56911,0,0.868083,1.922233,3, 0.840455,-0.541882,0,0.868083,1.922233,0, 0.822262,-0.56911,0,0.868083,1.922233,3, 0.783294,-0.621651,0,0.912512,1.982139,0, 0.76252,-0.646965,0,0.912512,1.982139,3, 0.707107,-0.707107,0,0.962599,2.037401,0, 0.76252,-0.646965,0,0.912512,1.982139,3, 0.783294,-0.621651,0,0.912512,1.982139,0, 0.76252,-0.646965,0,0.912512,1.982139,3, 0.707107,-0.707107,0,0.962599,2.037401,0, 0.707107,-0.707107,0,0.962599,2.037401,3, 0.016373,-0.999866,0,1.5,2.26,3, 0.081709,-0.996656,0,1.425507,2.25634,0, -0.016373,-0.999866,0,1.5,2.26,0, 0.081709,-0.996656,0,1.425507,2.25634,0, 0.016373,-0.999866,0,1.5,2.26,3, 0.114299,-0.993446,0,1.425507,2.25634,3, 0.114299,-0.993446,0,1.425507,2.25634,3, 0.179005,-0.983848,0,1.351731,2.245397,0, 0.081709,-0.996656,0,1.425507,2.25634,0, 0.179005,-0.983848,0,1.351731,2.245397,0, 0.114299,-0.993446,0,1.425507,2.25634,3, 0.211123,-0.97746,0,1.351731,2.245397,3, 0.211123,-0.97746,0,1.351731,2.245397,3, 0.274577,-0.961565,0,1.279384,2.227275,0, 0.179005,-0.983848,0,1.351731,2.245397,0, 0.274577,-0.961565,0,1.279384,2.227275,0, 0.211123,-0.97746,0,1.351731,2.245397,3, 0.305914,-0.952059,0,1.279384,2.227275,3, 0.305914,-0.952059,0,1.279384,2.227275,3, 0.367505,-0.930022,0,1.209161,2.202148,0, 0.274577,-0.961565,0,1.279384,2.227275,0, 0.367505,-0.930022,0,1.209161,2.202148,0, 0.305914,-0.952059,0,1.279384,2.227275,3, 0.397759,-0.91749,0,1.209161,2.202148,3, 0.76252,0.646965,0,0.912512,1.017861,0, 0.707107,0.707107,0,0.962599,0.962599,3, 0.707107,0.707107,0,0.962599,0.962599,0, 0.707107,0.707107,0,0.962599,0.962599,3, 0.76252,0.646965,0,0.912512,1.017861,0, 0.783294,0.621651,0,0.912512,1.017861,3, 0.397759,-0.91749,0,1.209161,2.202148,3, 0.456893,-0.889521,0,1.141738,2.17026,0, 0.367505,-0.930022,0,1.209161,2.202148,0, 0.456893,-0.889521,0,1.141738,2.17026,0, 0.397759,-0.91749,0,1.209161,2.202148,3, 0.485774,-0.874085,0,1.141738,2.17026,3, 0.485774,-0.874085,0,1.141738,2.17026,3, 0.541882,-0.840455,0,1.077767,2.131917,0, 0.456893,-0.889521,0,1.141738,2.17026,0, 0.541882,-0.840455,0,1.077767,2.131917,0, 0.485774,-0.874085,0,1.141738,2.17026,3, 0.56911,-0.822262,0,1.077767,2.131917,3, 0.56911,-0.822262,0,1.077767,2.131917,3, 0.621651,-0.783294,0,1.017861,2.087488,0, 0.541882,-0.840455,0,1.077767,2.131917,0, 0.621651,-0.783294,0,1.017861,2.087488,0, 0.56911,-0.822262,0,1.077767,2.131917,3, 0.646965,-0.76252,0,1.017861,2.087488,3, 0.646965,-0.76252,0,1.017861,2.087488,3, 0.707107,-0.707107,0,0.962599,2.037401,0, 0.621651,-0.783294,0,1.017861,2.087488,0, 0.707107,-0.707107,0,0.962599,2.037401,0, 0.646965,-0.76252,0,1.017861,2.087488,3, 0.707107,-0.707107,0,0.962599,2.037401,3, -0.367505,-0.930022,0,1.790839,2.202148,3, -0.305914,-0.952059,0,1.720616,2.227275,0, -0.397759,-0.91749,0,1.790839,2.202148,0, -0.305914,-0.952059,0,1.720616,2.227275,0, -0.367505,-0.930022,0,1.790839,2.202148,3, -0.274577,-0.961565,0,1.720616,2.227275,3, -0.274577,-0.961565,0,1.720616,2.227275,3, -0.211123,-0.97746,0,1.648269,2.245397,0, -0.305914,-0.952059,0,1.720616,2.227275,0, -0.211123,-0.97746,0,1.648269,2.245397,0, -0.274577,-0.961565,0,1.720616,2.227275,3, -0.179005,-0.983848,0,1.648269,2.245397,3, -0.179005,-0.983848,0,1.648269,2.245397,3, -0.114299,-0.993446,0,1.574493,2.25634,0, -0.211123,-0.97746,0,1.648269,2.245397,0, -0.114299,-0.993446,0,1.574493,2.25634,0, -0.179005,-0.983848,0,1.648269,2.245397,3, -0.081709,-0.996656,0,1.574493,2.25634,3, -0.081709,-0.996656,0,1.574493,2.25634,3, -0.016373,-0.999866,0,1.5,2.26,0, -0.114299,-0.993446,0,1.574493,2.25634,0, -0.016373,-0.999866,0,1.5,2.26,0, -0.081709,-0.996656,0,1.574493,2.25634,3, 0.016373,-0.999866,0,1.5,2.26,3, -0.621651,-0.783294,0,1.982139,2.087488,3, -0.56911,-0.822262,0,1.922233,2.131917,0, -0.646965,-0.76252,0,1.982139,2.087488,0, -0.56911,-0.822262,0,1.922233,2.131917,0, -0.621651,-0.783294,0,1.982139,2.087488,3, -0.541882,-0.840455,0,1.922233,2.131917,3, -0.541882,-0.840455,0,1.922233,2.131917,3, -0.485774,-0.874085,0,1.858262,2.17026,0, -0.56911,-0.822262,0,1.922233,2.131917,0, -0.485774,-0.874085,0,1.858262,2.17026,0, -0.541882,-0.840455,0,1.922233,2.131917,3, -0.456893,-0.889521,0,1.858262,2.17026,3, -0.707107,-0.707107,0,2.037401,2.037401,3, -0.646965,-0.76252,0,1.982139,2.087488,0, -0.707107,-0.707107,0,2.037401,2.037401,0, -0.646965,-0.76252,0,1.982139,2.087488,0, -0.707107,-0.707107,0,2.037401,2.037401,3, -0.621651,-0.783294,0,1.982139,2.087488,3, -0.707107,-0.707107,0,2.037401,2.037401,3, -0.76252,-0.646965,0,2.087488,1.982139,0, -0.783294,-0.621651,0,2.087488,1.982139,3, -0.76252,-0.646965,0,2.087488,1.982139,0, -0.707107,-0.707107,0,2.037401,2.037401,3, -0.707107,-0.707107,0,2.037401,2.037401,0, -0.930022,-0.367505,0,2.202148,1.790839,3, -0.952059,-0.305914,0,2.227275,1.720616,0, -0.961565,-0.274577,0,2.227275,1.720616,3, -0.952059,-0.305914,0,2.227275,1.720616,0, -0.930022,-0.367505,0,2.202148,1.790839,3, -0.91749,-0.397759,0,2.202148,1.790839,0, -0.889521,-0.456893,0,2.17026,1.858262,3, -0.91749,-0.397759,0,2.202148,1.790839,0, -0.930022,-0.367505,0,2.202148,1.790839,3, -0.91749,-0.397759,0,2.202148,1.790839,0, -0.889521,-0.456893,0,2.17026,1.858262,3, -0.874085,-0.485774,0,2.17026,1.858262,0, -0.840455,-0.541882,0,2.131917,1.922233,3, -0.874085,-0.485774,0,2.17026,1.858262,0, -0.889521,-0.456893,0,2.17026,1.858262,3, -0.874085,-0.485774,0,2.17026,1.858262,0, -0.840455,-0.541882,0,2.131917,1.922233,3, -0.822262,-0.56911,0,2.131917,1.922233,0, -0.783294,-0.621651,0,2.087488,1.982139,3, -0.822262,-0.56911,0,2.131917,1.922233,0, -0.840455,-0.541882,0,2.131917,1.922233,3, -0.822262,-0.56911,0,2.131917,1.922233,0, -0.783294,-0.621651,0,2.087488,1.982139,3, -0.76252,-0.646965,0,2.087488,1.982139,0, -0.961565,-0.274577,0,2.227275,1.720616,3, -0.97746,-0.211123,0,2.245397,1.648269,0, -0.983848,-0.179005,0,2.245397,1.648269,3, -0.97746,-0.211123,0,2.245397,1.648269,0, -0.961565,-0.274577,0,2.227275,1.720616,3, -0.952059,-0.305914,0,2.227275,1.720616,0, -0.211123,0.97746,0,1.648269,0.754603,3, -0.274577,0.961565,0,1.720616,0.772725,0, -0.179005,0.983848,0,1.648269,0.754603,0, -0.274577,0.961565,0,1.720616,0.772725,0, -0.211123,0.97746,0,1.648269,0.754603,3, -0.305914,0.952059,0,1.720616,0.772725,3, -0.114299,0.993446,0,1.574493,0.74366,3, -0.179005,0.983848,0,1.648269,0.754603,0, -0.081709,0.996656,0,1.574493,0.74366,0, -0.179005,0.983848,0,1.648269,0.754603,0, -0.114299,0.993446,0,1.574493,0.74366,3, -0.211123,0.97746,0,1.648269,0.754603,3, -0.993446,0.114299,0,2.25634,1.425507,3, -0.983848,0.179005,0,2.245397,1.351731,0, -0.97746,0.211123,0,2.245397,1.351731,3, -0.983848,0.179005,0,2.245397,1.351731,0, -0.993446,0.114299,0,2.25634,1.425507,3, -0.996656,0.081709,0,2.25634,1.425507,0, -0.999866,0.016373,0,2.26,1.5,3, -0.996656,0.081709,0,2.25634,1.425507,0, -0.993446,0.114299,0,2.25634,1.425507,3, -0.996656,0.081709,0,2.25634,1.425507,0, -0.999866,0.016373,0,2.26,1.5,3, -0.999866,-0.016373,0,2.26,1.5,0, -0.996656,-0.081709,0,2.25634,1.574493,3, -0.999866,-0.016373,0,2.26,1.5,0, -0.999866,0.016373,0,2.26,1.5,3, -0.999866,-0.016373,0,2.26,1.5,0, -0.996656,-0.081709,0,2.25634,1.574493,3, -0.993446,-0.114299,0,2.25634,1.574493,0, -0.983848,-0.179005,0,2.245397,1.648269,3, -0.993446,-0.114299,0,2.25634,1.574493,0, -0.996656,-0.081709,0,2.25634,1.574493,3, -0.993446,-0.114299,0,2.25634,1.574493,0, -0.983848,-0.179005,0,2.245397,1.648269,3, -0.97746,-0.211123,0,2.245397,1.648269,0, 0.822262,0.56911,0,0.868083,1.077767,0, 0.783294,0.621651,0,0.912512,1.017861,3, 0.76252,0.646965,0,0.912512,1.017861,0, 0.783294,0.621651,0,0.912512,1.017861,3, 0.822262,0.56911,0,0.868083,1.077767,0, 0.840455,0.541882,0,0.868083,1.077767,3, 0.707107,0.707107,0,0.962599,0.962599,3, 0.646965,0.76252,0,1.017861,0.912512,0, 0.707107,0.707107,0,0.962599,0.962599,0, 0.646965,0.76252,0,1.017861,0.912512,0, 0.707107,0.707107,0,0.962599,0.962599,3, 0.621651,0.783294,0,1.017861,0.912512,3, -0.97746,0.211123,0,2.245397,1.351731,3, -0.961565,0.274577,0,2.227275,1.279384,0, -0.952059,0.305914,0,2.227275,1.279384,3, -0.961565,0.274577,0,2.227275,1.279384,0, -0.97746,0.211123,0,2.245397,1.351731,3, -0.983848,0.179005,0,2.245397,1.351731,0, 0.541882,0.840455,0,1.077767,0.868083,3, 0.485774,0.874085,0,1.141738,0.82974,0, 0.56911,0.822262,0,1.077767,0.868083,0, 0.485774,0.874085,0,1.141738,0.82974,0, 0.541882,0.840455,0,1.077767,0.868083,3, 0.456893,0.889521,0,1.141738,0.82974,3, -0.56911,0.822262,0,1.922233,0.868083,3, -0.621651,0.783294,0,1.982139,0.912512,0, -0.541882,0.840455,0,1.922233,0.868083,0, -0.621651,0.783294,0,1.982139,0.912512,0, -0.56911,0.822262,0,1.922233,0.868083,3, -0.646965,0.76252,0,1.982139,0.912512,3, -0.646965,0.76252,0,1.982139,0.912512,3, -0.707107,0.707107,0,2.037401,0.962599,0, -0.621651,0.783294,0,1.982139,0.912512,0, -0.707107,0.707107,0,2.037401,0.962599,0, -0.646965,0.76252,0,1.982139,0.912512,3, -0.707107,0.707107,0,2.037401,0.962599,3, -0.952059,0.305914,0,2.227275,1.279384,3, -0.930022,0.367505,0,2.202148,1.209161,0, -0.91749,0.397759,0,2.202148,1.209161,3, -0.930022,0.367505,0,2.202148,1.209161,0, -0.952059,0.305914,0,2.227275,1.279384,3, -0.961565,0.274577,0,2.227275,1.279384,0, -0.485774,0.874085,0,1.858262,0.82974,3, -0.541882,0.840455,0,1.922233,0.868083,0, -0.456893,0.889521,0,1.858262,0.82974,0, -0.541882,0.840455,0,1.922233,0.868083,0, -0.485774,0.874085,0,1.858262,0.82974,3, -0.56911,0.822262,0,1.922233,0.868083,3, -0.397759,0.91749,0,1.790839,0.797852,3, -0.456893,0.889521,0,1.858262,0.82974,0, -0.367505,0.930022,0,1.790839,0.797852,0, -0.456893,0.889521,0,1.858262,0.82974,0, -0.397759,0.91749,0,1.790839,0.797852,3, -0.485774,0.874085,0,1.858262,0.82974,3, 0.179005,0.983848,0,1.351731,0.754603,3, 0.114299,0.993446,0,1.425507,0.74366,0, 0.211123,0.97746,0,1.351731,0.754603,0, 0.114299,0.993446,0,1.425507,0.74366,0, 0.179005,0.983848,0,1.351731,0.754603,3, 0.081709,0.996656,0,1.425507,0.74366,3, 0.081709,0.996656,0,1.425507,0.74366,3, 0.016373,0.999866,0,1.5,0.74,0, 0.114299,0.993446,0,1.425507,0.74366,0, 0.016373,0.999866,0,1.5,0.74,0, 0.081709,0.996656,0,1.425507,0.74366,3, -0.016373,0.999866,0,1.5,0.74,3, -0.822262,0.56911,0,2.131917,1.077767,3, -0.783294,0.621651,0,2.087488,1.017861,0, -0.76252,0.646965,0,2.087488,1.017861,3, -0.783294,0.621651,0,2.087488,1.017861,0, -0.822262,0.56911,0,2.131917,1.077767,3, -0.840455,0.541882,0,2.131917,1.077767,0, 0.367505,0.930022,0,1.209161,0.797852,3, 0.305914,0.952059,0,1.279384,0.772725,0, 0.397759,0.91749,0,1.209161,0.797852,0, 0.305914,0.952059,0,1.279384,0.772725,0, 0.367505,0.930022,0,1.209161,0.797852,3, 0.274577,0.961565,0,1.279384,0.772725,3, 0.274577,0.961565,0,1.279384,0.772725,3, 0.211123,0.97746,0,1.351731,0.754603,0, 0.305914,0.952059,0,1.279384,0.772725,0, 0.211123,0.97746,0,1.351731,0.754603,0, 0.274577,0.961565,0,1.279384,0.772725,3, 0.179005,0.983848,0,1.351731,0.754603,3, -0.305914,0.952059,0,1.720616,0.772725,3, -0.367505,0.930022,0,1.790839,0.797852,0, -0.274577,0.961565,0,1.720616,0.772725,0, -0.367505,0.930022,0,1.790839,0.797852,0, -0.305914,0.952059,0,1.720616,0.772725,3, -0.397759,0.91749,0,1.790839,0.797852,3, -0.76252,0.646965,0,2.087488,1.017861,3, -0.707107,0.707107,0,2.037401,0.962599,0, -0.707107,0.707107,0,2.037401,0.962599,3, -0.707107,0.707107,0,2.037401,0.962599,0, -0.76252,0.646965,0,2.087488,1.017861,3, -0.783294,0.621651,0,2.087488,1.017861,0, -0.016373,0.999866,0,1.5,0.74,3, -0.081709,0.996656,0,1.574493,0.74366,0, 0.016373,0.999866,0,1.5,0.74,0, -0.081709,0.996656,0,1.574493,0.74366,0, -0.016373,0.999866,0,1.5,0.74,3, -0.114299,0.993446,0,1.574493,0.74366,3, 0,0,-1,2.087488,1.017861,0, 0,0,-1,3,0,0, 0,0,-1,2.037401,0.962599,0, 0,0,-1,3,0,0, 0,0,-1,2.087488,1.017861,0, 0,0,-1,2.131917,1.077767,0, 0,0,-1,3,0,0, 0,0,-1,2.131917,1.077767,0, 0,0,-1,3,0.497732,0, 0.408248,-0.408248,-0.816497,3,0,0, 0.6,0,-0.8,3,0.497732,0, 1,0,0,3,0.205,0, 0,0,-1,2.502268,3,0, 0,0,-1,1.982139,2.087488,0, 0,0,-1,1.922233,2.131917,0, 0,0,-1,1.982139,2.087488,0, 0,0,-1,2.502268,3,0, 0,0,-1,2.037401,2.037401,0, 0,0,-1,2.037401,2.037401,0, 0,0,-1,2.502268,3,0, 0,0,-1,3,3,0, 0.408248,0.408248,-0.816497,3,3,0, 0,0.447214,-0.894427,2.502268,3,0, 0,1,0,2.795,3,0, 0,0,-1,1.574493,0.74366,0, 0,0,-1,1.5,0,0, 0,0,-1,1.5,0.74,0, 0,0,-1,1.5,0,0, 0,0,-1,1.574493,0.74366,0, 0,0,-1,1.798369,0,0, 0,0,-1,1.798369,0,0, 0,0,-1,1.574493,0.74366,0, 0,0,-1,1.648269,0.754603,0, 0,0,-1,0.74,1.5,0, 0,0,-1,0,1.201631,0, 0,0,-1,0,1.5,0, 0,0,-1,0,1.201631,0, 0,0,-1,0.74,1.5,0, 0,0,-1,0.74366,1.425507,0, 0,0,-1,0,1.201631,0, 0,0,-1,0.74366,1.425507,0, 0,0,-1,0.754603,1.351731,0, 0,0,-1,0.962599,0.962599,0, 0,0,-1,0.205,0,0, 0,0,-1,0,0,0, 0,0,-1,0.205,0,0, 0,0,-1,0.962599,0.962599,0, 0,0,-1,0.497732,0,0, 0,0,-1,0.497732,0,0, 0,0,-1,0.962599,0.962599,0, 0,0,-1,1.017861,0.912512,0, 0,0,-1,0.497732,0,0, 0,0,-1,1.017861,0.912512,0, 0,0,-1,1.077767,0.868083,0, 0,0,-1,1.5,3,0, 0,0,-1,1.351731,2.245397,0, 0,0,-1,1.201631,3,0, 0,0,-1,1.351731,2.245397,0, 0,0,-1,1.5,3,0, 0,0,-1,1.425507,2.25634,0, 0,0,-1,1.425507,2.25634,0, 0,0,-1,1.5,3,0, 0,0,-1,1.5,2.26,0, 0,0,-1,3,1.798369,0, 0,0,-1,2.25634,1.574493,0, 0,0,-1,2.245397,1.648269,0, 0,0,-1,2.25634,1.574493,0, 0,0,-1,3,1.798369,0, 0,0,-1,2.26,1.5,0, 0,0,-1,2.26,1.5,0, 0,0,-1,3,1.798369,0, 0,0,-1,3,1.5,0, 0,0,-1,0.962599,2.037401,0, 0,0,-1,0,2.795,0, 0,0,-1,0,3,0, 0,0,-1,0,2.795,0, 0,0,-1,0.962599,2.037401,0, 0,0,-1,0.912512,1.982139,0, 0,0,-1,0,2.795,0, 0,0,-1,0.912512,1.982139,0, 0,0,-1,0.868083,1.922233,0, 0,0,-1,0.868083,1.922233,0, 0,0,-1,0,2.502268,0, 0,0,-1,0,2.795,0, 0,0,-1,2.227275,1.279384,0, 0,0,-1,3,0.87868,0, 0,0,-1,2.202148,1.209161,0, 0,0,-1,3,0.87868,0, 0,0,-1,2.227275,1.279384,0, 0,0,-1,2.245397,1.351731,0, 0,0,-1,3,0.87868,0, 0,0,-1,2.245397,1.351731,0, 0,0,-1,3,1.201631,0, 0,0,-1,0.797852,1.790839,0, 0,0,-1,0,1.798369,0, 0,0,-1,0,2.12132,0, 0,0,-1,0,1.798369,0, 0,0,-1,0.797852,1.790839,0, 0,0,-1,0.772725,1.720616,0, 0,0,-1,0,1.798369,0, 0,0,-1,0.772725,1.720616,0, 0,0,-1,0.754603,1.648269,0, 0,0,-1,0.797852,1.209161,0, 0,0,-1,0,0.497732,0, 0,0,-1,0,0.87868,0, 0,0,-1,0,0.497732,0, 0,0,-1,0.797852,1.209161,0, 0,0,-1,0.82974,1.141738,0, 0,0,-1,0,0.497732,0, 0,0,-1,0.82974,1.141738,0, 0,0,-1,0.868083,1.077767,0, 0,0,-1,1.209161,0.797852,0, 0,0,-1,1.201631,0,0, 0,0,-1,0.87868,0,0, 0,0,-1,1.201631,0,0, 0,0,-1,1.209161,0.797852,0, 0,0,-1,1.279384,0.772725,0, 0,0,-1,1.201631,0,0, 0,0,-1,1.279384,0.772725,0, 0,0,-1,1.351731,0.754603,0, 0,0,-1,1.858262,0.82974,0, 0,0,-1,2.12132,0,0, 0,0,-1,1.790839,0.797852,0, 0,0,-1,2.12132,0,0, 0,0,-1,1.858262,0.82974,0, 0,0,-1,1.922233,0.868083,0, 0,0,-1,2.12132,0,0, 0,0,-1,1.922233,0.868083,0, 0,0,-1,2.502268,0,0, 0,0,-1,3,2.502268,0, 0,0,-1,2.17026,1.858262,0, 0,0,-1,2.131917,1.922233,0, 0,0,-1,2.17026,1.858262,0, 0,0,-1,3,2.502268,0, 0,0,-1,2.202148,1.790839,0, 0,0,-1,2.202148,1.790839,0, 0,0,-1,3,2.502268,0, 0,0,-1,3,2.12132,0, 0,0,-1,1.798369,3,0, 0,0,-1,1.720616,2.227275,0, 0,0,-1,1.648269,2.245397,0, 0,0,-1,1.720616,2.227275,0, 0,0,-1,1.798369,3,0, 0,0,-1,1.790839,2.202148,0, 0,0,-1,1.790839,2.202148,0, 0,0,-1,1.798369,3,0, 0,0,-1,2.12132,3,0, 0,0,-1,0.87868,3,0, 0,0,-1,1.077767,2.131917,0, 0,0,-1,0.497732,3,0, 0,0,-1,1.077767,2.131917,0, 0,0,-1,0.87868,3,0, 0,0,-1,1.141738,2.17026,0, 0,0,-1,1.141738,2.17026,0, 0,0,-1,0.87868,3,0, 0,0,-1,1.209161,2.202148,0, 0,0,-1,0.205,3,0, 0,0,-1,0.962599,2.037401,0, 0,0,-1,0,3,0, 0,0,-1,0.962599,2.037401,0, 0,0,-1,0.205,3,0, 0,0,-1,0.497732,3,0, 0,0,-1,0.962599,2.037401,0, 0,0,-1,0.497732,3,0, 0,0,-1,1.017861,2.087488,0, 0,0,-1,1.017861,2.087488,0, 0,0,-1,0.497732,3,0, 0,0,-1,1.077767,2.131917,0, 0,0,-1,1.201631,3,0, 0,0,-1,1.209161,2.202148,0, 0,0,-1,0.87868,3,0, 0,0,-1,1.209161,2.202148,0, 0,0,-1,1.201631,3,0, 0,0,-1,1.279384,2.227275,0, 0,0,-1,1.279384,2.227275,0, 0,0,-1,1.201631,3,0, 0,0,-1,1.351731,2.245397,0, 0,0,-1,1.5,3,0, 0,0,-1,1.574493,2.25634,0, 0,0,-1,1.5,2.26,0, 0,0,-1,1.574493,2.25634,0, 0,0,-1,1.5,3,0, 0,0,-1,1.798369,3,0, 0,0,-1,1.574493,2.25634,0, 0,0,-1,1.798369,3,0, 0,0,-1,1.648269,2.245397,0, 0,0,-1,2.12132,3,0, 0,0,-1,1.858262,2.17026,0, 0,0,-1,1.790839,2.202148,0, 0,0,-1,1.858262,2.17026,0, 0,0,-1,2.12132,3,0, 0,0,-1,1.922233,2.131917,0, 0,0,-1,1.922233,2.131917,0, 0,0,-1,2.12132,3,0, 0,0,-1,2.502268,3,0, 0,0,-1,3,3,0, 0,0,-1,2.087488,1.982139,0, 0,0,-1,2.037401,2.037401,0, 0,0,-1,2.087488,1.982139,0, 0,0,-1,3,3,0, 0,0,-1,2.131917,1.922233,0, 0,0,-1,2.131917,1.922233,0, 0,0,-1,3,3,0, 0,0,-1,3,2.502268,0, 0.447214,0,-0.894427,3,2.502268,0, 0.408248,0.408248,-0.816497,3,3,0, 1,0,0,3,2.795,0, 0,0,-1,3,2.12132,0, 0,0,-1,2.227275,1.720616,0, 0,0,-1,2.202148,1.790839,0, 0,0,-1,2.227275,1.720616,0, 0,0,-1,3,2.12132,0, 0,0,-1,2.245397,1.648269,0, 0,0,-1,2.245397,1.648269,0, 0,0,-1,3,2.12132,0, 0,0,-1,3,1.798369,0, 0,0,-1,2.25634,1.425507,0, 0,0,-1,3,1.201631,0, 0,0,-1,2.245397,1.351731,0, 0,0,-1,3,1.201631,0, 0,0,-1,2.25634,1.425507,0, 0,0,-1,2.26,1.5,0, 0,0,-1,3,1.201631,0, 0,0,-1,2.26,1.5,0, 0,0,-1,3,1.5,0, 0,0,-1,2.17026,1.141738,0, 0,0,-1,3,0.497732,0, 0,0,-1,2.131917,1.077767,0, 0,0,-1,3,0.497732,0, 0,0,-1,2.17026,1.141738,0, 0,0,-1,2.202148,1.209161,0, 0,0,-1,3,0.497732,0, 0,0,-1,2.202148,1.209161,0, 0,0,-1,3,0.87868,0, 0,0,-1,1.982139,0.912512,0, 0,0,-1,2.502268,0,0, 0,0,-1,1.922233,0.868083,0, 0,0,-1,2.502268,0,0, 0,0,-1,1.982139,0.912512,0, 0,0,-1,2.037401,0.962599,0, 0,0,-1,2.502268,0,0, 0,0,-1,2.037401,0.962599,0, 0,0,-1,2.795,0,0, 0,0,-1,2.795,0,0, 0,0,-1,2.037401,0.962599,0, 0,0,-1,3,0,0, 0,0,-1,1.720616,0.772725,0, 0,0,-1,1.798369,0,0, 0,0,-1,1.648269,0.754603,0, 0,0,-1,1.798369,0,0, 0,0,-1,1.720616,0.772725,0, 0,0,-1,1.790839,0.797852,0, 0,0,-1,1.798369,0,0, 0,0,-1,1.790839,0.797852,0, 0,0,-1,2.12132,0,0, 0,0,-1,1.351731,0.754603,0, 0,0,-1,1.5,0,0, 0,0,-1,1.201631,0,0, 0,0,-1,1.5,0,0, 0,0,-1,1.351731,0.754603,0, 0,0,-1,1.425507,0.74366,0, 0,0,-1,1.5,0,0, 0,0,-1,1.425507,0.74366,0, 0,0,-1,1.5,0.74,0, 0,0,-1,1.077767,0.868083,0, 0,0,-1,0.87868,0,0, 0,0,-1,0.497732,0,0, 0,0,-1,0.87868,0,0, 0,0,-1,1.077767,0.868083,0, 0,0,-1,1.141738,0.82974,0, 0,0,-1,0.87868,0,0, 0,0,-1,1.141738,0.82974,0, 0,0,-1,1.209161,0.797852,0, 0,0,-1,0.868083,1.077767,0, 0,0,-1,0,0.205,0, 0,0,-1,0,0.497732,0, 0,0,-1,0,0.205,0, 0,0,-1,0.868083,1.077767,0, 0,0,-1,0,0,0, 0,0,-1,0,0,0, 0,0,-1,0.868083,1.077767,0, 0,0,-1,0.912512,1.017861,0, 0,0,-1,0,0,0, 0,0,-1,0.912512,1.017861,0, 0,0,-1,0.962599,0.962599,0, 0,0,-1,0,1.201631,0, 0,0,-1,0.797852,1.209161,0, 0,0,-1,0,0.87868,0, 0,0,-1,0.797852,1.209161,0, 0,0,-1,0,1.201631,0, 0,0,-1,0.772725,1.279384,0, 0,0,-1,0.772725,1.279384,0, 0,0,-1,0,1.201631,0, 0,0,-1,0.754603,1.351731,0, 0,0,-1,0.754603,1.648269,0, 0,0,-1,0,1.5,0, 0,0,-1,0,1.798369,0, 0,0,-1,0,1.5,0, 0,0,-1,0.754603,1.648269,0, 0,0,-1,0.74366,1.574493,0, 0,0,-1,0,1.5,0, 0,0,-1,0.74366,1.574493,0, 0,0,-1,0.74,1.5,0, 0,0,-1,0.868083,1.922233,0, 0,0,-1,0,2.12132,0, 0,0,-1,0,2.502268,0, 0,0,-1,0,2.12132,0, 0,0,-1,0.868083,1.922233,0, 0,0,-1,0.82974,1.858262,0, 0,0,-1,0,2.12132,0, 0,0,-1,0.82974,1.858262,0, 0,0,-1,0.797852,1.790839,0, 0,0,1,0.868083,1.922233,3, 0,0,1,0,2.795,3, 0,0,1,0,2.502268,3, 0,0,1,0,2.795,3, 0,0,1,0.868083,1.922233,3, 0,0,1,0,3,3, 0,0,1,0,3,3, 0,0,1,0.868083,1.922233,3, 0,0,1,0.912512,1.982139,3, 0,0,1,0,3,3, 0,0,1,0.912512,1.982139,3, 0,0,1,0.962599,2.037401,3, 0,0,1,2.17026,1.858262,3, 0,0,1,3,2.502268,3, 0,0,1,2.131917,1.922233,3, 0,0,1,3,2.502268,3, 0,0,1,2.17026,1.858262,3, 0,0,1,2.202148,1.790839,3, 0,0,1,3,2.502268,3, 0,0,1,2.202148,1.790839,3, 0,0,1,3,2.12132,3, 0,0,1,0.754603,1.351731,3, 0,0,1,0,1.5,3, 0,0,1,0,1.201631,3, 0,0,1,0,1.5,3, 0,0,1,0.754603,1.351731,3, 0,0,1,0.74366,1.425507,3, 0,0,1,0,1.5,3, 0,0,1,0.74366,1.425507,3, 0,0,1,0.74,1.5,3, 0,0,1,3,1.201631,3, 0,0,1,2.25634,1.425507,3, 0,0,1,2.245397,1.351731,3, 0,0,1,2.25634,1.425507,3, 0,0,1,3,1.201631,3, 0,0,1,2.26,1.5,3, 0,0,1,2.26,1.5,3, 0,0,1,3,1.201631,3, 0,0,1,3,1.5,3, 0,0,1,1.5,0,3, 0,0,1,1.351731,0.754603,3, 0,0,1,1.201631,0,3, 0,0,1,1.351731,0.754603,3, 0,0,1,1.5,0,3, 0,0,1,1.425507,0.74366,3, 0,0,1,1.425507,0.74366,3, 0,0,1,1.5,0,3, 0,0,1,1.5,0.74,3, 0,0,1,0.962599,2.037401,3, 0,0,1,0.205,3,3, 0,0,1,0,3,3, 0,0,1,0.205,3,3, 0,0,1,0.962599,2.037401,3, 0,0,1,0.497732,3,3, 0,0,1,0.497732,3,3, 0,0,1,0.962599,2.037401,3, 0,0,1,1.017861,2.087488,3, 0,0,1,0.497732,3,3, 0,0,1,1.017861,2.087488,3, 0,0,1,1.077767,2.131917,3, 0,0,1,1.077767,2.131917,3, 0,0,1,0.87868,3,3, 0,0,1,0.497732,3,3, 0,0,1,0.87868,3,3, 0,0,1,1.077767,2.131917,3, 0,0,1,1.141738,2.17026,3, 0,0,1,0.87868,3,3, 0,0,1,1.141738,2.17026,3, 0,0,1,1.209161,2.202148,3, 0,0,1,1.351731,2.245397,3, 0,0,1,1.5,3,3, 0,0,1,1.201631,3,3, 0,0,1,1.5,3,3, 0,0,1,1.351731,2.245397,3, 0,0,1,1.425507,2.25634,3, 0,0,1,1.5,3,3, 0,0,1,1.425507,2.25634,3, 0,0,1,1.5,2.26,3, 0,0,1,3,0.497732,3, 0,0,1,2.17026,1.141738,3, 0,0,1,2.131917,1.077767,3, 0,0,1,2.17026,1.141738,3, 0,0,1,3,0.497732,3, 0,0,1,2.202148,1.209161,3, 0,0,1,2.202148,1.209161,3, 0,0,1,3,0.497732,3, 0,0,1,3,0.87868,3, 0,0,1,0.797852,1.790839,3, 0,0,1,0,2.502268,3, 0,0,1,0,2.12132,3, 0,0,1,0,2.502268,3, 0,0,1,0.797852,1.790839,3, 0,0,1,0.82974,1.858262,3, 0,0,1,0,2.502268,3, 0,0,1,0.82974,1.858262,3, 0,0,1,0.868083,1.922233,3, 0,0,1,0.868083,1.077767,3, 0,0,1,0,0.87868,3, 0,0,1,0,0.497732,3, 0,0,1,0,0.87868,3, 0,0,1,0.868083,1.077767,3, 0,0,1,0.82974,1.141738,3, 0,0,1,0,0.87868,3, 0,0,1,0.82974,1.141738,3, 0,0,1,0.797852,1.209161,3, 0,0,1,1.982139,2.087488,3, 0,0,1,2.502268,3,3, 0,0,1,1.922233,2.131917,3, 0,0,1,2.502268,3,3, 0,0,1,1.982139,2.087488,3, 0,0,1,2.037401,2.037401,3, 0,0,1,2.502268,3,3, 0,0,1,2.037401,2.037401,3, 0,0,1,3,3,3, 0,0,1,2.502268,3,3, 0.408248,0.408248,0.816497,3,3,3, 0,1,0,2.795,3,3, 0,0,1,2.25634,1.574493,3, 0,0,1,3,1.798369,3, 0,0,1,2.245397,1.648269,3, 0,0,1,3,1.798369,3, 0,0,1,2.25634,1.574493,3, 0,0,1,2.26,1.5,3, 0,0,1,3,1.798369,3, 0,0,1,2.26,1.5,3, 0,0,1,3,1.5,3, 0,0,1,2.502268,0,3, 0,0,1,1.982139,0.912512,3, 0,0,1,1.922233,0.868083,3, 0,0,1,1.982139,0.912512,3, 0,0,1,2.502268,0,3, 0,0,1,2.037401,0.962599,3, 0,0,1,2.037401,0.962599,3, 0,0,1,2.502268,0,3, 0,0,1,3,0,3, 0.408248,-0.408248,0.816497,3,0,3, 0,0,1,2.502268,0,3, 0,-0.948683,-0.316228,2.795,0,3, 0,0,1,1.798369,0,3, 0,0,1,1.720616,0.772725,3, 0,0,1,1.648269,0.754603,3, 0,0,1,1.720616,0.772725,3, 0,0,1,1.798369,0,3, 0,0,1,1.790839,0.797852,3, 0,0,1,1.790839,0.797852,3, 0,0,1,1.798369,0,3, 0,0,1,2.12132,0,3, 0,0,1,1.209161,2.202148,3, 0,0,1,1.201631,3,3, 0,0,1,0.87868,3,3, 0,0,1,1.201631,3,3, 0,0,1,1.209161,2.202148,3, 0,0,1,1.279384,2.227275,3, 0,0,1,1.201631,3,3, 0,0,1,1.279384,2.227275,3, 0,0,1,1.351731,2.245397,3, 0,0,1,1.574493,2.25634,3, 0,0,1,1.5,3,3, 0,0,1,1.5,2.26,3, 0,0,1,1.5,3,3, 0,0,1,1.574493,2.25634,3, 0,0,1,1.798369,3,3, 0,0,1,1.798369,3,3, 0,0,1,1.574493,2.25634,3, 0,0,1,1.648269,2.245397,3, 0,0,1,2.12132,0,3, 0,0,1,1.858262,0.82974,3, 0,0,1,1.790839,0.797852,3, 0,0,1,1.858262,0.82974,3, 0,0,1,2.12132,0,3, 0,0,1,1.922233,0.868083,3, 0,0,1,1.922233,0.868083,3, 0,0,1,2.12132,0,3, 0,0,1,2.502268,0,3, 0,0,1,1.720616,2.227275,3, 0,0,1,1.798369,3,3, 0,0,1,1.648269,2.245397,3, 0,0,1,1.798369,3,3, 0,0,1,1.720616,2.227275,3, 0,0,1,1.790839,2.202148,3, 0,0,1,1.798369,3,3, 0,0,1,1.790839,2.202148,3, 0,0,1,2.12132,3,3, 0,0,1,3,0.87868,3, 0,0,1,2.227275,1.279384,3, 0,0,1,2.202148,1.209161,3, 0,0,1,2.227275,1.279384,3, 0,0,1,3,0.87868,3, 0,0,1,2.245397,1.351731,3, 0,0,1,2.245397,1.351731,3, 0,0,1,3,0.87868,3, 0,0,1,3,1.201631,3, 0,0,1,3,0,3, 0,0,1,2.087488,1.017861,3, 0,0,1,2.037401,0.962599,3, 0,0,1,2.087488,1.017861,3, 0,0,1,3,0,3, 0,0,1,2.131917,1.077767,3, 0,0,1,2.131917,1.077767,3, 0,0,1,3,0,3, 0,0,1,3,0.497732,3, 0.447214,0,0.894427,3,0.497732,3, 0.408248,-0.408248,0.816497,3,0,3, 1,0,0,3,0.205,3, 0,0,1,0.754603,1.648269,3, 0,0,1,0,2.12132,3, 0,0,1,0,1.798369,3, 0,0,1,0,2.12132,3, 0,0,1,0.754603,1.648269,3, 0,0,1,0.772725,1.720616,3, 0,0,1,0,2.12132,3, 0,0,1,0.772725,1.720616,3, 0,0,1,0.797852,1.790839,3, 0,0,1,2.087488,1.982139,3, 0,0,1,3,3,3, 0,0,1,2.037401,2.037401,3, 0,0,1,3,3,3, 0,0,1,2.087488,1.982139,3, 0,0,1,2.131917,1.922233,3, 0,0,1,3,3,3, 0,0,1,2.131917,1.922233,3, 0,0,1,3,2.502268,3, 0.408248,0.408248,0.816497,3,3,3, 0.447214,0,0.894427,3,2.502268,3, 1,0,0,3,2.795,3, 0,0,1,1.201631,0,3, 0,0,1,1.209161,0.797852,3, 0,0,1,0.87868,0,3, 0,0,1,1.209161,0.797852,3, 0,0,1,1.201631,0,3, 0,0,1,1.279384,0.772725,3, 0,0,1,1.279384,0.772725,3, 0,0,1,1.201631,0,3, 0,0,1,1.351731,0.754603,3, 0,0,1,1.798369,0,3, 0,0,1,1.5,0.74,3, 0,0,1,1.5,0,3, 0,0,1,1.5,0.74,3, 0,0,1,1.798369,0,3, 0,0,1,1.574493,0.74366,3, 0,0,1,1.574493,0.74366,3, 0,0,1,1.798369,0,3, 0,0,1,1.648269,0.754603,3, 0,0,1,0.962599,0.962599,3, 0,0,1,0,0.205,3, 0,0,1,0,0,3, 0,0,1,0,0.205,3, 0,0,1,0.962599,0.962599,3, 0,0,1,0,0.497732,3, 0,0,1,0,0.497732,3, 0,0,1,0.962599,0.962599,3, 0,0,1,0.912512,1.017861,3, 0,0,1,0,0.497732,3, 0,0,1,0.912512,1.017861,3, 0,0,1,0.868083,1.077767,3, 0,0,1,0.87868,0,3, 0,0,1,1.077767,0.868083,3, 0,0,1,0.497732,0,3, 0,0,1,1.077767,0.868083,3, 0,0,1,0.87868,0,3, 0,0,1,1.141738,0.82974,3, 0,0,1,1.141738,0.82974,3, 0,0,1,0.87868,0,3, 0,0,1,1.209161,0.797852,3, 0,0,1,0.205,0,3, 0,0,1,0.962599,0.962599,3, 0,0,1,0,0,3, 0,0,1,0.962599,0.962599,3, 0,0,1,0.205,0,3, 0,0,1,0.497732,0,3, 0,0,1,0.962599,0.962599,3, 0,0,1,0.497732,0,3, 0,0,1,1.017861,0.912512,3, 0,0,1,1.017861,0.912512,3, 0,0,1,0.497732,0,3, 0,0,1,1.077767,0.868083,3, 0,0,1,2.227275,1.720616,3, 0,0,1,3,2.12132,3, 0,0,1,2.202148,1.790839,3, 0,0,1,3,2.12132,3, 0,0,1,2.227275,1.720616,3, 0,0,1,2.245397,1.648269,3, 0,0,1,3,2.12132,3, 0,0,1,2.245397,1.648269,3, 0,0,1,3,1.798369,3, 0,0,1,1.858262,2.17026,3, 0,0,1,2.12132,3,3, 0,0,1,1.790839,2.202148,3, 0,0,1,2.12132,3,3, 0,0,1,1.858262,2.17026,3, 0,0,1,1.922233,2.131917,3, 0,0,1,2.12132,3,3, 0,0,1,1.922233,2.131917,3, 0,0,1,2.502268,3,3, 0,0,1,0.797852,1.209161,3, 0,0,1,0,1.201631,3, 0,0,1,0,0.87868,3, 0,0,1,0,1.201631,3, 0,0,1,0.797852,1.209161,3, 0,0,1,0.772725,1.279384,3, 0,0,1,0,1.201631,3, 0,0,1,0.772725,1.279384,3, 0,0,1,0.754603,1.351731,3, 0,-1,0,0.205,0,1.5, 0,-1,0,0,0,0.205, 0,-1,0,0.205,0,0.205, 0,-1,0,0,0,0.205, 0,-1,0,0.205,0,1.5, 0,-1,0,0,0,1.5, 0,-1,0,0.205,0,2.795, 0,-1,0,0,0,1.5, 0,-1,0,0.205,0,1.5, 0,-1,0,0,0,1.5, 0,-1,0,0.205,0,2.795, 0,-1,0,0,0,2.795, 0,-1,0,3,0,1.5, 0,-1,0,2.795,0,0.205, 0,-1,0,3,0,0.205, 0,-1,0,2.795,0,0.205, 0,-1,0,3,0,1.5, 0,-1,0,2.795,0,1.5, 0,-1,0,2.795,0,3, 0,-1,0,1.5,0,2.795, 0,-1,0,2.795,0,2.795, 0,-1,0,1.5,0,2.795, 0,-1,0,2.795,0,3, 0,-1,0,1.5,0,3, 0,0,-1,1.5,0,3, 0,0,-1,2.795,0,3, 0,0,-1,2.502268,0,3, 0,0,-1,1.5,0,3, 0,0,-1,2.502268,0,3, 0,0,-1,2.12132,0,3, 0,0,1,1.5,0,3, 0,0,1,2.12132,0,3, 0,0,1,1.798369,0,3, 0,-1,0,2.795,0,3, 0,-1,0,2.795,0,2.795, 0,-1,0,3,0,3, 0,-1,0,1.5,0,0.205, 0,-1,0,1.201631,0,0, 0,-1,0,1.5,0,0, 0,-1,0,1.201631,0,0, 0,-1,0,1.5,0,0.205, 0,-1,0,0.87868,0,0, 0,-1,0,0.87868,0,0, 0,-1,0,1.5,0,0.205, 0,-1,0,0.497732,0,0, 0,-1,0,0.497732,0,0, 0,-1,0,1.5,0,0.205, 0,-1,0,0.205,0,0, 0,-1,0,0.205,0,0, 0,-1,0,1.5,0,0.205, 0,-1,0,0.205,0,0.205, 0,-1,0,0,0,3, 0,-1,0,0.205,0,2.795, 0,-1,0,0.205,0,3, 0,-1,0,3,0,2.795, 0,-1,0,2.795,0,1.5, 0,-1,0,3,0,1.5, 0,-1,0,2.795,0,1.5, 0,-1,0,3,0,2.795, 0,-1,0,2.795,0,2.795, 0,-1,0,2.795,0,0.205, 0,-1,0,2.502268,0,0, 0,-1,0,2.795,0,0, 0,-1,0,2.502268,0,0, 0,-1,0,2.795,0,0.205, 0,-1,0,2.12132,0,0, 0,-1,0,2.12132,0,0, 0,-1,0,2.795,0,0.205, 0,-1,0,1.798369,0,0, 0,-1,0,1.798369,0,0, 0,-1,0,2.795,0,0.205, 0,-1,0,1.5,0,0, 0,-1,0,1.5,0,0, 0,-1,0,2.795,0,0.205, 0,-1,0,1.5,0,0.205, 0,-1,0,1.5,0,3, 0,-1,0,0.205,0,2.795, 0,-1,0,1.5,0,2.795, 0,-1,0,0.205,0,2.795, 0,-1,0,1.5,0,3, 0,-1,0,0.205,0,3, 0,0,1,0.205,0,3, 0,0,1,1.5,0,3, 0,0,1,1.201631,0,3, 0,0,1,0.205,0,3, 0,0,1,1.201631,0,3, 0,0,1,0.87868,0,3, 0,0,-1,0.205,0,3, 0,0,-1,0.87868,0,3, 0,0,-1,0.497732,0,3, 0,-1,0,1.5,0,2.795, 0,-1,0,0.8525,0,2.1475, 0,-1,0,1.5,0,1.5, 0,1,0,2.795,3,2.795, 0,1,0,3,3,1.5, 0,1,0,2.795,3,1.5, 0,1,0,3,3,1.5, 0,1,0,2.795,3,2.795, 0,1,0,3,3,2.795, 0,1,0,2.795,3,1.5, 0,1,0,3,3,0.205, 0,1,0,2.795,3,0.205, 0,1,0,3,3,0.205, 0,1,0,2.795,3,1.5, 0,1,0,3,3,1.5, 0,1,0,2.795,3,0.205, 0,1,0,3,3,0, 0,1,0,2.795,3,0, 0,1,0,3,3,3, 0,1,0,3,3,2.795, 0,1,0,2.795,3,2.795, 0,1,0,1.5,3,0.205, 0,1,0,1.798369,3,0, 0,1,0,1.5,3,0, 0,1,0,1.798369,3,0, 0,1,0,1.5,3,0.205, 0,1,0,2.12132,3,0, 0,1,0,2.12132,3,0, 0,1,0,1.5,3,0.205, 0,1,0,2.502268,3,0, 0,1,0,2.502268,3,0, 0,1,0,1.5,3,0.205, 0,1,0,2.795,3,0, 0,1,0,2.795,3,0, 0,1,0,1.5,3,0.205, 0,1,0,2.795,3,0.205, 0,1,0,0,3,3, 0,1,0,0.205,3,2.795, 0,1,0,0,3,2.795, 0,1,0,0.205,3,0.205, 0,1,0,0.205,3,0, 0,1,0,0,3,0, 0,1,0,0,3,2.795, 0,1,0,0.205,3,1.5, 0,1,0,0,3,1.5, 0,1,0,0.205,3,1.5, 0,1,0,0,3,2.795, 0,1,0,0.205,3,2.795, 0,1,0,0,3,1.5, 0,1,0,0.205,3,0.205, 0,1,0,0,3,0.205, 0,1,0,0.205,3,0.205, 0,1,0,0,3,1.5, 0,1,0,0.205,3,1.5, 0,1,0,1.5,3,1.5, 0,1,0,1.5,3,0.205, 0,1,0,0.8525,3,0.8525, 0,1,0,0.205,3,3, 0,1,0,1.5,3,2.795, 0,1,0,0.205,3,2.795, 0,1,0,1.5,3,2.795, 0,1,0,0.205,3,3, 0,1,0,1.5,3,3, 0,0.514496,0.857493,1.5,3,3, 0,0.83205,0.5547,0.205,3,3, 0,0,1,0.497732,3,3, 0,0.514496,0.857493,1.5,3,3, 0,0,1,0.497732,3,3, 0,0,1,0.87868,3,3, 0,0.514496,0.857493,1.5,3,3, 0,0,1,0.87868,3,3, 0,0,1,1.201631,3,3, 0,1,0,1.5,3,3, 0,1,0,2.795,3,2.795, 0,1,0,1.5,3,2.795, 0,1,0,2.795,3,2.795, 0,1,0,1.5,3,3, 0,1,0,2.795,3,3, 0,1,0,2.795,3,3, 0,0.514496,0.857493,1.5,3,3, 0,0,1,1.798369,3,3, 0,1,0,2.795,3,3, 0,0,1,1.798369,3,3, 0,0,1,2.12132,3,3, 0,1,0,2.795,3,3, 0,0,1,2.12132,3,3, 0,0,1,2.502268,3,3, -1,0,0,0,3,0, -1,0,0,0,2.795,0.205, -1,0,0,0,3,0.205, -1,0,0,0,3,1.5, -1,0,0,0,2.795,0.205, -1,0,0,0,2.795,1.5, -1,0,0,0,2.795,0.205, -1,0,0,0,3,1.5, -1,0,0,0,3,0.205, -1,0,0,0,0.205,0.205, -1,0,0,0,0.497732,0, -1,0,0,0,0.205,0, -1,0,0,0,0.497732,0, -1,0,0,0,0.205,0.205, -1,0,0,0,1.5,0.205, -1,0,0,0,0.497732,0, -1,0,0,0,1.5,0.205, -1,0,0,0,0.87868,0, -1,0,0,0,0.87868,0, -1,0,0,0,1.5,0.205, -1,0,0,0,1.201631,0, -1,0,0,0,1.201631,0, -1,0,0,0,1.5,0.205, -1,0,0,0,1.5,0, -1,0,0,0,0.205,0.205, -1,0,0,0,0.205,0, -1,0,0,0,0,0, -1,0,0,0,3,2.795, -1,0,0,0,2.795,1.5, -1,0,0,0,2.795,2.795, -1,0,0,0,2.795,1.5, -1,0,0,0,3,2.795, -1,0,0,0,3,1.5, -1,0,0,0,3,2.795, -1,0,0,0,2.795,2.795, -1,0,0,0,3,3, -1,0,0,0,0.205,2.795, -1,0,0,0,0,2.795, -1,0,0,0,0,3, -1,0,0,0,0.205,2.795, -1,0,0,0,0,3, -1,0,0,0,0.205,3, -1,0,0,0,3,0, -1,0,0,0,2.795,0, -1,0,0,0,2.795,0.205, -1,0,0,0,0.205,2.795, -1,0,0,0,0,1.5, -1,0,0,0,0,2.795, -1,0,0,0,0,1.5, -1,0,0,0,0.205,2.795, -1,0,0,0,0.205,1.5, -1,0,0,0,1.798369,3, -1,0,0,0,1.5,2.795, -1,0,0,0,1.5,3, -1,0,0,0,1.5,2.795, -1,0,0,0,1.798369,3, -1,0,0,0,2.795,2.795, -1,0,0,0,2.795,2.795, -1,0,0,0,1.798369,3, -1,0,0,0,2.12132,3, -1,0,0,0,2.795,2.795, -1,0,0,0,2.12132,3, -1,0,0,0,2.502268,3, -1,0,0,0,2.795,2.795, -1,0,0,0,2.502268,3, -1,0,0,0,2.795,3, -1,0,0,0,0.497732,3, -1,0,0,0,0.205,2.795, -1,0,0,0,0.205,3, -1,0,0,0,0.205,2.795, -1,0,0,0,0.497732,3, -1,0,0,0,1.5,2.795, -1,0,0,0,1.5,2.795, -1,0,0,0,0.497732,3, -1,0,0,0,0.87868,3, -1,0,0,0,1.5,2.795, -1,0,0,0,0.87868,3, -1,0,0,0,1.201631,3, -1,0,0,0,1.5,2.795, -1,0,0,0,1.201631,3, -1,0,0,0,1.5,3, -1,0,0,0,2.795,0.205, -1,0,0,0,1.5,0, -1,0,0,0,1.5,0.205, -1,0,0,0,1.5,0, -1,0,0,0,2.795,0.205, -1,0,0,0,1.798369,0, -1,0,0,0,1.798369,0, -1,0,0,0,2.795,0.205, -1,0,0,0,2.12132,0, -1,0,0,0,2.12132,0, -1,0,0,0,2.795,0.205, -1,0,0,0,2.502268,0, -1,0,0,0,2.502268,0, -1,0,0,0,2.795,0.205, -1,0,0,0,2.795,0, -1,0,0,0,0.205,0.205, -1,0,0,0,0,0, -1,0,0,0,0,0.205, -1,0,0,0,0.205,1.5, -1,0,0,0,0,0.205, -1,0,0,0,0,1.5, -1,0,0,0,0,0.205, -1,0,0,0,0.205,1.5, -1,0,0,0,0.205,0.205, -1,0,0,0,1.5,2.795, -1,0,0,0,0.205,1.5, -1,0,0,0,0.205,2.795, -1,0,0,0,0.205,1.5, -1,0,0,0,1.5,2.795, -1,0,0,0,0.205,0.205, -1,0,0,0,0.205,0.205, -1,0,0,0,1.5,2.795, -1,0,0,0,1.5,0.205, -1,0,0,0,1.5,0.205, -1,0,0,0,1.5,2.795, -1,0,0,0,2.795,2.795, -1,0,0,0,1.5,0.205, -1,0,0,0,2.795,2.795, -1,0,0,0,2.795,0.205, -1,0,0,0,2.795,0.205, -1,0,0,0,2.795,2.795, -1,0,0,0,2.795,1.5, 1,0,0,3,0.205,0.205, 1,0,0,3,0,0.205, 1,0,0,3,0,0, 1,0,0,3,0.205,0.205, 1,0,0,3,0,1.5, 1,0,0,3,0,0.205, 1,0,0,3,0,1.5, 1,0,0,3,0.205,0.205, 1,0,0,3,0.205,1.5, 1,0,0,3,3,3, 1,0,0,3,2.795,2.795, 1,0,0,3,3,2.795, 1,0,0,3,3,1.5, 1,0,0,3,2.795,2.795, 1,0,0,3,2.795,1.5, 1,0,0,3,2.795,2.795, 1,0,0,3,3,1.5, 1,0,0,3,3,2.795, 1,0,0,3,0.205,1.5, 1,0,0,3,0,2.795, 1,0,0,3,0,1.5, 1,0,0,3,0,2.795, 1,0,0,3,0.205,1.5, 1,0,0,3,0.205,2.795, 1,0,0,3,3,0.205, 1,0,0,3,2.795,1.5, 1,0,0,3,2.795,0.205, 1,0,0,3,2.795,1.5, 1,0,0,3,3,0.205, 1,0,0,3,3,1.5, 1,0,0,3,0.205,3, 1,0,0,3,0,3, 1,0,0,3,0.205,2.795, 1,0,0,3,0.205,2.795, 1,0,0,3,0,3, 1,0,0,3,0,2.795, 1,0,0,3,3,0.205, 1,0,0,3,2.795,0.205, 1,0,0,3,3,0, 1,0,0,3,1.798369,0, 1,0,0,3,1.5,0.205, 1,0,0,3,1.5,0, 1,0,0,3,1.5,0.205, 1,0,0,3,1.798369,0, 1,0,0,3,2.795,0.205, 1,0,0,3,2.795,0.205, 1,0,0,3,1.798369,0, 1,0,0,3,2.12132,0, 1,0,0,3,2.795,0.205, 1,0,0,3,2.12132,0, 1,0,0,3,2.502268,0, 1,0,0,3,2.795,0.205, 1,0,0,3,2.502268,0, 1,0,0,3,2.795,0, 1,0,0,3,3,0, 1,0,0,3,2.795,0.205, 1,0,0,3,2.795,0, 1,0,0,3,0.497732,0, 1,0,0,3,0.205,0.205, 1,0,0,3,0.205,0, 1,0,0,3,0.205,0.205, 1,0,0,3,0.497732,0, 1,0,0,3,1.5,0.205, 1,0,0,3,1.5,0.205, 1,0,0,3,0.497732,0, 1,0,0,3,0.87868,0, 1,0,0,3,1.5,0.205, 1,0,0,3,0.87868,0, 1,0,0,3,1.201631,0, 1,0,0,3,1.5,0.205, 1,0,0,3,1.201631,0, 1,0,0,3,1.5,0, 1,0,0,3,3,3, 1,0,0,3,2.795,3, 1,0,0,3,2.795,2.795, 1,0,0,3,1.5,2.795, 1,0,0,3,0.205,3, 1,0,0,3,0.205,2.795, 1,0,0,3,0.205,3, 1,0,0,3,1.5,2.795, 1,0,0,3,0.497732,3, 1,0,0,3,0.497732,3, 1,0,0,3,1.5,2.795, 1,0,0,3,0.87868,3, 1,0,0,3,0.87868,3, 1,0,0,3,1.5,2.795, 1,0,0,3,1.201631,3, 1,0,0,3,1.201631,3, 1,0,0,3,1.5,2.795, 1,0,0,3,1.5,3, 1,0,0,3,2.795,2.795, 1,0,0,3,1.5,3, 1,0,0,3,1.5,2.795, 1,0,0,3,1.5,3, 1,0,0,3,2.795,2.795, 1,0,0,3,1.798369,3, 1,0,0,3,1.798369,3, 1,0,0,3,2.795,2.795, 1,0,0,3,2.12132,3, 1,0,0,3,2.12132,3, 1,0,0,3,2.795,2.795, 1,0,0,3,2.502268,3, 1,0,0,3,2.502268,3, 1,0,0,3,2.795,2.795, 1,0,0,3,2.795,3, 1,0,0,3,1.5,0.205, 1,0,0,3,0.205,1.5, 1,0,0,3,0.205,0.205, 1,0,0,3,0.205,1.5, 1,0,0,3,1.5,2.795, 1,0,0,3,0.205,2.795, 1,0,0,3,1.5,2.795, 1,0,0,3,0.205,1.5, 1,0,0,3,1.5,0.205, 1,0,0,3,1.5,2.795, 1,0,0,3,1.5,0.205, 1,0,0,3,2.795,0.205, 1,0,0,3,1.5,2.795, 1,0,0,3,2.795,0.205, 1,0,0,3,2.795,2.795, 1,0,0,3,2.795,2.795, 1,0,0,3,2.795,0.205, 1,0,0,3,2.795,1.5, 0,1,0,0.8525,3,2.1475, 0,1,0,1.5,3,1.5, 0,1,0,0.205,3,1.5, 0,1,0,0.8525,3,0.8525, 0,1,0,1.5,3,0.205, 0,1,0,0.205,3,0.205, 0,1,0,2.1475,3,0.8525, 0,1,0,2.795,3,0.205, 0,1,0,1.5,3,0.205, 0,1,0,0.205,3,2.795, 0,1,0,0.8525,3,2.1475, 0,1,0,0.205,3,1.5, 0,1,0,2.1475,3,2.1475, 0,1,0,2.795,3,1.5, 0,1,0,1.5,3,1.5, 0,1,0,1.5,3,1.5, 0,1,0,2.1475,3,0.8525, 0,1,0,1.5,3,0.205, 0,-1,0,1.5,0,2.795, 0,-1,0,1.5,0,1.5, 0,-1,0,2.1475,0,2.1475, 0,-1,0,0.205,0,2.795, 0,-1,0,0.8525,0,2.1475, 0,-1,0,1.5,0,2.795, 0,-1,0,1.5,0,2.795, 0,-1,0,2.1475,0,2.1475, 0,-1,0,2.795,0,2.795, 0,-1,0,0.205,0,1.5, 0,-1,0,0.8525,0,0.8525, 0,-1,0,1.5,0,1.5, 0,-1,0,1.5,0,1.5, 0,-1,0,2.1475,0,0.8525, 0,-1,0,2.795,0,1.5, 0,-1,0,0.8525,0,0.8525, 0,-1,0,0.205,0,0.205, 0,-1,0,1.5,0,0.205, 0,-1,0,0.205,0,0.205, 0,-1,0,0,0,0, 0,-1,0,0.205,0,0, 0,-1,0,1.5,0,1.5, 0,-1,0,0.8525,0,0.8525, 0,-1,0,1.5,0,0.205, 0,-1,0,2.795,0,2.795, 0,-1,0,2.1475,0,2.1475, 0,-1,0,2.795,0,1.5, 0,-1,0,2.795,0,1.5, 0,-1,0,2.1475,0,0.8525, 0,-1,0,2.795,0,0.205, 0,-1,0,3,0,3, 0,-1,0,2.795,0,2.795, 0,-1,0,3,0,2.795, 0,-1,0,2.1475,0,2.1475, 0,-1,0,1.5,0,1.5, 0,-1,0,2.795,0,1.5, 0,-1,0,2.1475,0,0.8525, 0,-1,0,1.5,0,0.205, 0,-1,0,2.795,0,0.205, 0,-1,0,1.5,0,1.5, 0,-1,0,1.5,0,0.205, 0,-1,0,2.1475,0,0.8525, 0,-1,0,2.795,0,0.205, 0,-1,0,2.795,0,0, 0,-1,0,3,0,0, 0,-1,0,0,0,3, 0,-1,0,0,0,2.795, 0,-1,0,0.205,0,2.795, 0,-1,0,0.205,0,2.795, 0,-1,0,0.205,0,1.5, 0,-1,0,0.8525,0,2.1475, 0,-1,0,0.205,0,1.5, 0,-1,0,0.205,0,0.205, 0,-1,0,0.8525,0,0.8525, 0,-1,0,0,0,0.205, 0,-1,0,0,0,0, 0,-1,0,0.205,0,0.205, 0,-1,0,0.8525,0,2.1475, 0,-1,0,0.205,0,1.5, 0,-1,0,1.5,0,1.5, 0,1,0,3,3,0.205, 0,1,0,3,3,0, 0,1,0,2.795,3,0.205, 0,1,0,1.5,3,2.795, 0,1,0,1.5,3,1.5, 0,1,0,0.8525,3,2.1475, 0,1,0,2.795,3,2.795, 0,1,0,2.795,3,1.5, 0,1,0,2.1475,3,2.1475, 0,1,0,2.795,3,1.5, 0,1,0,2.1475,3,0.8525, 0,1,0,1.5,3,1.5, 0,1,0,0.205,3,3, 0,1,0,0.205,3,2.795, 0,1,0,0,3,3, 0,1,0,2.795,3,1.5, 0,1,0,2.795,3,0.205, 0,1,0,2.1475,3,0.8525, 0,1,0,3,3,3, 0,1,0,2.795,3,2.795, 0,1,0,2.795,3,3, 0,1,0,1.5,3,2.795, 0,1,0,2.1475,3,2.1475, 0,1,0,1.5,3,1.5, 0,1,0,0.205,3,0.205, 0,1,0,0,3,0, 0,1,0,0,3,0.205, 0,1,0,0.205,3,1.5, 0,1,0,0.8525,3,0.8525, 0,1,0,0.205,3,0.205, 0,1,0,2.795,3,2.795, 0,1,0,2.1475,3,2.1475, 0,1,0,1.5,3,2.795, 0,1,0,1.5,3,2.795, 0,1,0,0.8525,3,2.1475, 0,1,0,0.205,3,2.795, 0,1,0,1.5,3,1.5, 0,1,0,0.8525,3,0.8525, 0,1,0,0.205,3,1.5 }; static const struct gllist lament_model_pillar_base_frame = { GL_N3F_V3F, GL_TRIANGLES, 1572, lament_model_pillar_base_data, 0 }; const struct gllist *lament_model_pillar_base = &lament_model_pillar_base_frame; static const float lament_model_star_d_data[] = { 0,0,-1,0.955528,0.955528,0, 0,0,-1,0.205,0,0, 0,0,-1,0,0,0, 0,0,-1,0.205,0,0, 0,0,-1,0.955528,0.955528,0, 0,0,-1,0.497732,0,0, 0,0,-1,0.497732,0,0, 0,0,-1,0.955528,0.955528,0, 0,0,-1,1.011517,0.904782,0, 0,0,-1,0.497732,0,0, 0,0,-1,1.011517,0.904782,0, 0,0,-1,1.072211,0.859768,0, 0,0,-1,2.502268,3,0, 0,0,-1,1.988483,2.095218,0, 0,0,-1,1.927789,2.140232,0, 0,0,-1,1.988483,2.095218,0, 0,0,-1,2.502268,3,0, 0,0,-1,2.044472,2.044472,0, 0,0,-1,2.044472,2.044472,0, 0,0,-1,2.502268,3,0, 0,0,-1,3,3,0, 0,-1,0,3,3,0, 0,-1,0,2.502268,3,0, 0,-1,0,2.795,3,0, 0,0,-1,3,1.798369,0, 0,0,-1,2.266292,1.575473,0, 0,0,-1,2.255205,1.65022,0, 0,0,-1,2.266292,1.575473,0, 0,0,-1,3,1.798369,0, 0,0,-1,2.27,1.5,0, 0,0,-1,2.27,1.5,0, 0,0,-1,3,1.798369,0, 0,0,-1,3,1.5,0, 0,0,-1,1.5,3,0, 0,0,-1,1.34978,2.255205,0, 0,0,-1,1.201631,3,0, 0,0,-1,1.34978,2.255205,0, 0,0,-1,1.5,3,0, 0,0,-1,1.424527,2.266292,0, 0,0,-1,1.424527,2.266292,0, 0,0,-1,1.5,3,0, 0,0,-1,1.5,2.27,0, 0,0,-1,0.955528,2.044472,0, 0,0,-1,0,2.502268,0, 0,0,-1,0,3,0, 0,0,-1,0,2.502268,0, 0,0,-1,0.955528,2.044472,0, 0,0,-1,0.904782,1.988483,0, 0,0,-1,0,2.502268,0, 0,0,-1,0.904782,1.988483,0, 0,0,-1,0.859768,1.927789,0, 0,0,-1,2.095218,1.011517,0, 0,0,-1,3,0,0, 0,0,-1,2.044472,0.955528,0, 0,0,-1,3,0,0, 0,0,-1,2.095218,1.011517,0, 0,0,-1,2.140232,1.072211,0, 0,0,-1,3,0,0, 0,0,-1,2.140232,1.072211,0, 0,0,-1,3,0.497732,0, 0,-1,0,2.12132,0,0.82632, 0,-1,0,1.5,0,2.795, 0,-1,0,1.5,0,0.205, 0,-1,0,1.5,0,2.795, 0,-1,0,2.12132,0,0.82632, 0,-1,0,2.12132,0,2.17368, 0,0,1,1.798369,0,3, 0,0,1,1.723519,0.763156,3, 0,0,1,1.65022,0.744795,3, 0,0,1,1.723519,0.763156,3, 0,0,1,1.798369,0,3, 0,0,1,1.794666,0.788613,3, 0,0,1,1.794666,0.788613,3, 0,0,1,1.798369,0,3, 0,0,1,2.12132,0,3, 0,1,0,0.87868,3,3, 0,1,0,1.5,3,2.795, 0,1,0,0.87868,3,2.795, 0,1,0,1.5,3,2.795, 0,1,0,0.87868,3,3, 0,1,0,1.201631,3,3, 0,1,0,1.5,3,3, 0,1,0,1.5,3,2.795, 0,1,0,1.201631,3,3, 0,0,1,0.87868,0,3, 0,0,1,1.072211,0.859768,3, 0,0,1,0.497732,0,3, 0,0,1,1.072211,0.859768,3, 0,0,1,0.87868,0,3, 0,0,1,1.137025,0.820921,3, 0,0,1,1.137025,0.820921,3, 0,0,1,0.87868,0,3, 0,0,1,1.205334,0.788613,3, 1,0,0,3,1.798369,0, 1,0,0,3,1.5,3, 1,0,0,3,1.5,0, 1,0,0,3,1.5,3, 1,0,0,3,1.798369,0, 1,0,0,3,1.798369,3, 1,0,0,3,1.798369,3, 1,0,0,3,1.798369,0, 1,0,0,3,2.12132,0, 1,0,0,3,1.798369,3, 1,0,0,3,2.12132,0, 1,0,0,3,2.12132,3, -1,0,0,0,1.201631,3, -1,0,0,0,0.87868,0, -1,0,0,0,0.87868,3, -1,0,0,0,0.87868,0, -1,0,0,0,1.201631,3, -1,0,0,0,1.201631,0, -1,0,0,0,1.201631,0, -1,0,0,0,1.201631,3, -1,0,0,0,1.5,3, -1,0,0,0,1.201631,0, -1,0,0,0,1.5,3, -1,0,0,0,1.5,0, 0,0,1,2.236844,1.723519,3, 0,0,1,3,2.12132,3, 0,0,1,2.211387,1.794666,3, 0,0,1,3,2.12132,3, 0,0,1,2.236844,1.723519,3, 0,0,1,2.255205,1.65022,3, 0,0,1,3,2.12132,3, 0,0,1,2.255205,1.65022,3, 0,0,1,3,1.798369,3, 0,0,-1,1.575473,0.733708,0, 0,0,-1,1.5,0,0, 0,0,-1,1.5,0.73,0, 0,0,-1,1.5,0,0, 0,0,-1,1.575473,0.733708,0, 0,0,-1,1.798369,0,0, 0,0,-1,1.798369,0,0, 0,0,-1,1.575473,0.733708,0, 0,0,-1,1.65022,0.744795,0, 0,0,1,3,0.497732,3, 0,0,1,2.179079,1.137025,3, 0,0,1,2.140232,1.072211,3, 0,0,1,2.179079,1.137025,3, 0,0,1,3,0.497732,3, 0,0,1,2.211387,1.205334,3, 0,0,1,2.211387,1.205334,3, 0,0,1,3,0.497732,3, 0,0,1,3,0.87868,3, 0,0,1,0.788613,1.205334,3, 0,0,1,0,1.201631,3, 0,0,1,0,0.87868,3, 0,0,1,0,1.201631,3, 0,0,1,0.788613,1.205334,3, 0,0,1,0.763156,1.276481,3, 0,0,1,0,1.201631,3, 0,0,1,0.763156,1.276481,3, 0,0,1,0.744795,1.34978,3, 0,0,-1,0.73,1.5,0, 0,0,-1,0,1.201631,0, 0,0,-1,0,1.5,0, 0,0,-1,0,1.201631,0, 0,0,-1,0.73,1.5,0, 0,0,-1,0.733708,1.424527,0, 0,0,-1,0,1.201631,0, 0,0,-1,0.733708,1.424527,0, 0,0,-1,0.744795,1.34978,0, 0,-1,0,0.205,0,2.795, 0,-1,0,0,0,1.5, 0,-1,0,0.205,0,1.5, 0,-1,0,0,0,1.5, 0,-1,0,0.205,0,2.795, 0,-1,0,0,0,2.795, -1,0,0,0,2.502268,3, -1,0,0,0,2.12132,0, -1,0,0,0,2.12132,3, -1,0,0,0,2.12132,0, -1,0,0,0,2.502268,3, -1,0,0,0,2.502268,0, -1,0,0,0,2.502268,0, -1,0,0,0,2.502268,3, -1,0,0,0,3,3, -1,0,0,0,2.502268,0, -1,0,0,0,3,3, -1,0,0,0,3,0, 0,0,-1,1.927789,2.140232,0, 0,0,-1,2.044472,2.044472,0, 0,0,-1,1.5,1.5,0, 0,0,-1,2.044472,2.044472,0, 0,0,-1,1.927789,2.140232,0, 0,0,-1,1.988483,2.095218,0, 0,0,1,1.205334,2.211387,3, 0,0,1,1.201631,3,3, 0,0,1,0.87868,3,3, 0,0,1,1.201631,3,3, 0,0,1,1.205334,2.211387,3, 0,0,1,1.276481,2.236844,3, 0,0,1,1.201631,3,3, 0,0,1,1.276481,2.236844,3, 0,0,1,1.34978,2.255205,3, 1,0,0,3,0.497732,0, 1,0,0,3,0,3, 1,0,0,3,0,0, 1,0,0,3,0,3, 1,0,0,3,0.497732,0, 1,0,0,3,0.497732,3, 1,0,0,3,0.497732,3, 1,0,0,3,0.497732,0, 1,0,0,3,0.87868,0, 1,0,0,3,0.497732,3, 1,0,0,3,0.87868,0, 1,0,0,3,0.87868,3, 0,1,0,2.12132,3,0.82632, 0,1,0,2.795,3,0.205, 0,1,0,2.12132,3,0.205, 0,1,0,2.795,3,0.205, 0,1,0,2.12132,3,0.82632, 0,1,0,2.795,3,1.5, -0.55557,-0.83147,0,1.927789,2.140232,3, -0.471397,-0.881921,0,1.862975,2.179079,1.5, -0.55557,-0.83147,0,1.927789,2.140232,1.5, -0.471397,-0.881921,0,1.862975,2.179079,1.5, -0.55557,-0.83147,0,1.927789,2.140232,3, -0.471397,-0.881921,0,1.862975,2.179079,3, -0.941544,-0.33689,0,2.211387,1.794666,3, -0.952059,-0.305914,0,2.236844,1.723519,1.5, -0.961565,-0.274577,0,2.236844,1.723519,3, -0.952059,-0.305914,0,2.236844,1.723519,1.5, -0.941544,-0.33689,0,2.211387,1.794666,3, -0.941544,-0.33689,0,2.211387,1.794666,1.5, 0.740951,-0.671559,0,0.955528,2.044472,1.5, 0.76252,-0.646965,0,0.904782,1.988483,3, 0.783294,-0.621651,0,0.904782,1.988483,1.5, 0.76252,-0.646965,0,0.904782,1.988483,3, 0.740951,-0.671559,0,0.955528,2.044472,1.5, 0.740951,-0.671559,0,0.955528,2.044472,3, -0.996656,-0.081709,0,2.266292,1.575473,3, -0.998795,-0.049068,0,2.27,1.5,1.5, -0.998795,-0.049068,0,2.27,1.5,3, -0.998795,-0.049068,0,2.27,1.5,1.5, -0.996656,-0.081709,0,2.266292,1.575473,3, -0.993446,-0.114299,0,2.266292,1.575473,1.5, -0.822262,0.56911,0,2.140232,1.072211,3, -0.783294,0.621651,0,2.095218,1.011517,1.5, -0.76252,0.646965,0,2.095218,1.011517,3, -0.783294,0.621651,0,2.095218,1.011517,1.5, -0.822262,0.56911,0,2.140232,1.072211,3, -0.840455,0.541882,0,2.140232,1.072211,1.5, 0.840455,-0.541882,0,0.859768,1.927789,1.5, 0.874085,-0.485774,0,0.820921,1.862975,3, 0.889521,-0.456893,0,0.820921,1.862975,1.5, 0.874085,-0.485774,0,0.820921,1.862975,3, 0.840455,-0.541882,0,0.859768,1.927789,1.5, 0.822262,-0.56911,0,0.859768,1.927789,3, -0.471397,-0.881921,0,1.862975,2.179079,1.5, -0.427555,-0.903989,0,1.794666,2.211387,3, -0.427555,-0.903989,0,1.794666,2.211387,1.5, -0.427555,-0.903989,0,1.794666,2.211387,3, -0.471397,-0.881921,0,1.862975,2.179079,1.5, -0.471397,-0.881921,0,1.862975,2.179079,3, -0.382683,-0.92388,0,0.788613,1.794666,0, -0.382683,-0.92388,0,0,2.12132,3, -0.382683,-0.92388,0,0,2.12132,0, -0.382683,-0.92388,0,0,2.12132,3, -0.382683,-0.92388,0,0.788613,1.794666,0, -0.382683,-0.92388,0,0.788613,1.794666,1.5, -0.382683,-0.92388,0,0,2.12132,3, -0.382683,-0.92388,0,0.788613,1.794666,1.5, -0.382683,-0.92388,0,0.788613,1.794666,3, -0.290285,-0.95694,0,1.276481,0.763156,0, -0.33689,-0.941544,0,1.205334,0.788613,1.5, -0.33689,-0.941544,0,1.205334,0.788613,0, -0.33689,-0.941544,0,1.205334,0.788613,1.5, -0.290285,-0.95694,0,1.276481,0.763156,0, -0.290285,-0.95694,0,1.276481,0.763156,1.5, -1,0,0,1.5,0.73,3, -1,0,0,1.5,0,2.795, -1,0,0,1.5,0,3, -1,0,0,1.5,0,2.795, -1,0,0,1.5,0.73,3, -1,0,0,1.5,0,0.205, -1,0,0,1.5,0,0.205, -1,0,0,1.5,0.73,3, -1,0,0,1.5,0,0, -1,0,0,1.5,0,0, -1,0,0,1.5,0.73,3, -1,0,0,1.5,0.73,0, -0.027218,-0.554032,-0.83205,1.5,0.73,0, -0.823173,0.401247,0.401731,1.5,0.73,3, 0.689105,0,0.724662,1.5,0.73,1.5, 0.783294,0.621651,0,2.095218,1.988483,0, 0.822262,0.56911,0,2.140232,1.927789,1.5, 0.840455,0.541882,0,2.140232,1.927789,0, 0.822262,0.56911,0,2.140232,1.927789,1.5, 0.783294,0.621651,0,2.095218,1.988483,0, 0.76252,0.646965,0,2.095218,1.988483,1.5, 0.114299,0.993446,0,1.575473,2.266292,0, 0.179005,0.983848,0,1.65022,2.255205,1.5, 0.211123,0.97746,0,1.65022,2.255205,0, 0.179005,0.983848,0,1.65022,2.255205,1.5, 0.114299,0.993446,0,1.575473,2.266292,0, 0.081709,0.996656,0,1.575473,2.266292,1.5, -0.382683,0.92388,0,2.211387,1.794666,1.5, -0.382683,0.92388,0,3,2.12132,0, -0.382683,0.92388,0,2.211387,1.794666,0, -0.382683,0.92388,0,3,2.12132,0, -0.382683,0.92388,0,2.211387,1.794666,1.5, -0.382683,0.92388,0,3,2.12132,3, -0.382683,0.92388,0,3,2.12132,3, -0.382683,0.92388,0,2.211387,1.794666,1.5, -0.382683,0.92388,0,2.211387,1.794666,3, -0.55557,0.83147,0,1.072211,2.140232,1.5, -0.471397,0.881921,0,1.137025,2.179079,0, -0.55557,0.83147,0,1.072211,2.140232,0, -0.471397,0.881921,0,1.137025,2.179079,0, -0.55557,0.83147,0,1.072211,2.140232,1.5, -0.471397,0.881921,0,1.137025,2.179079,1.5, 0.471397,-0.881921,0,1.862975,0.820921,0, 0.427555,-0.903989,0,1.794666,0.788613,1.5, 0.427555,-0.903989,0,1.794666,0.788613,0, 0.427555,-0.903989,0,1.794666,0.788613,1.5, 0.471397,-0.881921,0,1.862975,0.820921,0, 0.471397,-0.881921,0,1.862975,0.820921,1.5, -0.903989,-0.427555,0,0.788613,1.205334,1.5, -0.889521,-0.456893,0,0.820921,1.137025,0, -0.874085,-0.485774,0,0.820921,1.137025,1.5, -0.889521,-0.456893,0,0.820921,1.137025,0, -0.903989,-0.427555,0,0.788613,1.205334,1.5, -0.903989,-0.427555,0,0.788613,1.205334,0, -0.671559,0.740951,0,0.955528,2.044472,0, -0.646965,0.76252,0,1.011517,2.095218,1.5, -0.621651,0.783294,0,1.011517,2.095218,0, -0.646965,0.76252,0,1.011517,2.095218,1.5, -0.671559,0.740951,0,0.955528,2.044472,0, -0.671559,0.740951,0,0.955528,2.044472,1.5, 0.049068,0.998795,0,1.5,2.27,0, 0.081709,0.996656,0,1.575473,2.266292,1.5, 0.114299,0.993446,0,1.575473,2.266292,0, 0.081709,0.996656,0,1.575473,2.266292,1.5, 0.049068,0.998795,0,1.5,2.27,0, 0.049068,0.998795,0,1.5,2.27,1.5, -0.471397,0.881921,0,1.137025,2.179079,0, -0.427555,0.903989,0,1.205334,2.211387,1.5, -0.427555,0.903989,0,1.205334,2.211387,0, -0.427555,0.903989,0,1.205334,2.211387,1.5, -0.471397,0.881921,0,1.137025,2.179079,0, -0.471397,0.881921,0,1.137025,2.179079,1.5, 0.55557,-0.83147,0,1.927789,0.859768,1.5, 0.471397,-0.881921,0,1.862975,0.820921,0, 0.55557,-0.83147,0,1.927789,0.859768,0, 0.471397,-0.881921,0,1.862975,0.820921,0, 0.55557,-0.83147,0,1.927789,0.859768,1.5, 0.471397,-0.881921,0,1.862975,0.820921,1.5, -0.621651,0.783294,0,1.011517,2.095218,0, -0.55557,0.83147,0,1.072211,2.140232,1.5, -0.55557,0.83147,0,1.072211,2.140232,0, -0.55557,0.83147,0,1.072211,2.140232,1.5, -0.621651,0.783294,0,1.011517,2.095218,0, -0.646965,0.76252,0,1.011517,2.095218,1.5, -0.874085,0.485774,0,2.179079,1.137025,3, -0.840455,0.541882,0,2.140232,1.072211,1.5, -0.822262,0.56911,0,2.140232,1.072211,3, -0.840455,0.541882,0,2.140232,1.072211,1.5, -0.874085,0.485774,0,2.179079,1.137025,3, -0.889521,0.456893,0,2.179079,1.137025,1.5, -0.822262,-0.56911,0,0.859768,1.072211,1.5, -0.783294,-0.621651,0,0.904782,1.011517,0, -0.76252,-0.646965,0,0.904782,1.011517,1.5, -0.783294,-0.621651,0,0.904782,1.011517,0, -0.822262,-0.56911,0,0.859768,1.072211,1.5, -0.840455,-0.541882,0,0.859768,1.072211,0, 0.098017,-0.995185,0,1.424527,2.266292,3, 0.179005,-0.983848,0,1.34978,2.255205,1.5, 0.098017,-0.995185,0,1.424527,2.266292,1.5, 0.179005,-0.983848,0,1.34978,2.255205,1.5, 0.098017,-0.995185,0,1.424527,2.266292,3, 0.211123,-0.97746,0,1.34978,2.255205,3, -0.76252,0.646965,0,2.095218,1.011517,3, -0.740951,0.671559,0,2.044472,0.955528,1.5, -0.740951,0.671559,0,2.044472,0.955528,3, -0.740951,0.671559,0,2.044472,0.955528,1.5, -0.76252,0.646965,0,2.095218,1.011517,3, -0.783294,0.621651,0,2.095218,1.011517,1.5, -0.961565,-0.274577,0,2.236844,1.723519,3, -0.97746,-0.211123,0,2.255205,1.65022,1.5, -0.983848,-0.179005,0,2.255205,1.65022,3, -0.97746,-0.211123,0,2.255205,1.65022,1.5, -0.961565,-0.274577,0,2.236844,1.723519,3, -0.952059,-0.305914,0,2.236844,1.723519,1.5, 0.471397,0.881921,0,1.137025,0.820921,1.5, 0.427555,0.903989,0,1.205334,0.788613,3, 0.427555,0.903989,0,1.205334,0.788613,1.5, 0.427555,0.903989,0,1.205334,0.788613,3, 0.471397,0.881921,0,1.137025,0.820921,1.5, 0.471397,0.881921,0,1.137025,0.820921,3, 0.305914,0.952059,0,1.723519,2.236844,0, 0.33689,0.941544,0,1.794666,2.211387,1.5, 0.33689,0.941544,0,1.794666,2.211387,0, 0.33689,0.941544,0,1.794666,2.211387,1.5, 0.305914,0.952059,0,1.723519,2.236844,0, 0.274577,0.961565,0,1.723519,2.236844,1.5, 0.671559,0.740951,0,0.955528,0.955528,1.5, 0.634393,0.77301,0,1.011517,0.904782,3, 0.634393,0.77301,0,1.011517,0.904782,1.5, 0.634393,0.77301,0,1.011517,0.904782,3, 0.671559,0.740951,0,0.955528,0.955528,1.5, 0.671559,0.740951,0,0.955528,0.955528,3, 1,0,0,1.5,3,0, 1,0,0,1.5,2.27,1.5, 1,0,0,1.5,2.27,0, 1,0,0,1.5,2.27,1.5, 1,0,0,1.5,3,0, 1,0,0,1.5,2.27,3, 1,0,0,1.5,2.27,3, 1,0,0,1.5,3,0, 1,0,0,1.5,3,3, 0.301511,0.301511,0.904534,1.5,3,3, 0.688247,0.229416,-0.688247,1.5,3,0, 0,1,0,1.5,3,0.205, 0.301511,0.301511,0.904534,1.5,3,3, 0,1,0,1.5,3,0.205, 0,1,0,1.5,3,2.795, -0.961565,0.274577,0,0.763156,1.723519,1.5, -0.97746,0.211123,0,0.744795,1.65022,0, -0.983848,0.179005,0,0.744795,1.65022,1.5, -0.97746,0.211123,0,0.744795,1.65022,0, -0.961565,0.274577,0,0.763156,1.723519,1.5, -0.952059,0.305914,0,0.763156,1.723519,0, 0.889521,-0.456893,0,0.820921,1.862975,1.5, 0.903989,-0.427555,0,0.788613,1.794666,3, 0.903989,-0.427555,0,0.788613,1.794666,1.5, 0.903989,-0.427555,0,0.788613,1.794666,3, 0.889521,-0.456893,0,0.820921,1.862975,1.5, 0.874085,-0.485774,0,0.820921,1.862975,3, -0.634393,-0.77301,0,1.988483,2.095218,1.5, -0.55557,-0.83147,0,1.927789,2.140232,3, -0.55557,-0.83147,0,1.927789,2.140232,1.5, -0.55557,-0.83147,0,1.927789,2.140232,3, -0.634393,-0.77301,0,1.988483,2.095218,1.5, -0.634393,-0.77301,0,1.988483,2.095218,3, -0.707107,0.707107,0,0.955528,0.955528,3, -0.707107,0.707107,0,0,0,2.795, -0.707107,0.707107,0,0,0,3, -0.707107,0.707107,0,0,0,2.795, -0.707107,0.707107,0,0.955528,0.955528,3, -0.707107,0.707107,0,0,0,1.5, -0.707107,0.707107,0,0,0,1.5, -0.707107,0.707107,0,0.955528,0.955528,3, -0.707107,0.707107,0,0,0,0.205, -0.707107,0.707107,0,0,0,0.205, -0.707107,0.707107,0,0.955528,0.955528,3, -0.707107,0.707107,0,0,0,0, -0.707107,0.707107,0,0,0,0, -0.707107,0.707107,0,0.955528,0.955528,3, -0.707107,0.707107,0,0.955528,0.955528,0, 0,1,0,0.955528,0.955528,0, 0,1,0,0.955528,0.955528,3, 0,1,0,0.955528,0.955528,1.5, -0.707107,-0.707107,0,3,0,0, -0.707107,-0.707107,0,2.044472,0.955528,1.5, -0.707107,-0.707107,0,2.044472,0.955528,0, -0.707107,-0.707107,0,2.044472,0.955528,1.5, -0.707107,-0.707107,0,3,0,0, -0.707107,-0.707107,0,3,0,3, -0.707107,-0.707107,0,2.044472,0.955528,1.5, -0.707107,-0.707107,0,3,0,3, -0.707107,-0.707107,0,2.044472,0.955528,3, 0.996993,0.077486,0,2.12132,0,0, 1,0,0,2.12132,0,0.82632, 1,0,0,2.12132,0,0.205, 1,0,0,2.12132,0,0.82632, 0.996993,0.077486,0,2.12132,0,0, 1,0,0,2.12132,0,2.17368, 1,0,0,2.12132,0,2.17368, 0.996993,0.077486,0,2.12132,0,0, 1,0,0,2.12132,0,2.795, 1,0,0,2.12132,0,2.795, 0.996993,0.077486,0,2.12132,0,0, 0.96573,0.259551,0,2.12132,0,3, 0.96573,0.259551,0,2.12132,0,3, 0.996993,0.077486,0,2.12132,0,0, 0.92388,0.382683,0,1.794666,0.788613,0, 0.96573,0.259551,0,2.12132,0,3, 0.92388,0.382683,0,1.794666,0.788613,0, 0.92388,0.382683,0,1.794666,0.788613,3, 0.237702,0.536246,0.8099,1.794666,0.788613,3, 0.470193,0.03587,-0.881834,1.794666,0.788613,0, 0.371553,0.153902,0.915567,1.794666,0.788613,1.5, 0.993446,-0.114299,0,2.266292,1.424527,0, 0.983848,-0.179005,0,2.255205,1.34978,1.5, 0.97746,-0.211123,0,2.255205,1.34978,0, 0.983848,-0.179005,0,2.255205,1.34978,1.5, 0.993446,-0.114299,0,2.266292,1.424527,0, 0.996656,-0.081709,0,2.266292,1.424527,1.5, 0.998795,-0.049068,0,2.27,1.5,0, 0.996656,-0.081709,0,2.266292,1.424527,1.5, 0.993446,-0.114299,0,2.266292,1.424527,0, 0.996656,-0.081709,0,2.266292,1.424527,1.5, 0.998795,-0.049068,0,2.27,1.5,0, 0.998795,-0.049068,0,2.27,1.5,1.5, 0.97746,-0.211123,0,2.255205,1.34978,0, 0.961565,-0.274577,0,2.236844,1.276481,1.5, 0.952059,-0.305914,0,2.236844,1.276481,0, 0.961565,-0.274577,0,2.236844,1.276481,1.5, 0.97746,-0.211123,0,2.255205,1.34978,0, 0.983848,-0.179005,0,2.255205,1.34978,1.5, 0,0,1,2.044472,0.955528,1.5, 0,0,1,2.211387,1.205334,1.5, 0,0,1,1.5,1.5,1.5, 0,0,1,2.211387,1.205334,1.5, 0,0,1,2.044472,0.955528,1.5, 0,0,1,2.095218,1.011517,1.5, 0,0,1,2.211387,1.205334,1.5, 0,0,1,2.095218,1.011517,1.5, 0,0,1,2.140232,1.072211,1.5, 0,0,1,2.211387,1.205334,1.5, 0,0,1,2.140232,1.072211,1.5, 0,0,1,2.179079,1.137025,1.5, 0.993446,0.114299,0,0.733708,1.424527,1.5, 0.983848,0.179005,0,0.744795,1.34978,3, 0.97746,0.211123,0,0.744795,1.34978,1.5, 0.983848,0.179005,0,0.744795,1.34978,3, 0.993446,0.114299,0,0.733708,1.424527,1.5, 0.996656,0.081709,0,0.733708,1.424527,3, -0.874085,-0.485774,0,0.820921,1.137025,1.5, -0.840455,-0.541882,0,0.859768,1.072211,0, -0.822262,-0.56911,0,0.859768,1.072211,1.5, -0.840455,-0.541882,0,0.859768,1.072211,0, -0.874085,-0.485774,0,0.820921,1.137025,1.5, -0.889521,-0.456893,0,0.820921,1.137025,0, -0.92388,-0.382683,0,0.87868,3,3, -0.92388,-0.382683,0,1.205334,2.211387,1.5, -0.92388,-0.382683,0,1.205334,2.211387,3, -0.92388,-0.382683,0,1.205334,2.211387,1.5, -0.92388,-0.382683,0,0.87868,3,3, -0.92388,-0.382683,0,1.205334,2.211387,0, -0.92388,-0.382683,0,1.205334,2.211387,0, -0.92388,-0.382683,0,0.87868,3,3, -0.92388,-0.382683,0,0.87868,3,0, 0,-1,0,0.87868,3,0, 0,-1,0,0.87868,3,3, 0,-1,0,0.87868,3,2.795, 0,-1,0,0.87868,3,0, 0,-1,0,0.87868,3,2.795, 0,-1,0,0.87868,3,2.17368, 0,1,0,0.87868,3,0, 0,1,0,0.87868,3,2.17368, 0,1,0,0.87868,3,0.82632, -0.653281,-0.270598,-0.707107,0.87868,3,0, 0,1,0,0.87868,3,0.82632, 0,1,0,0.87868,3,0.205, 0.382683,0.92388,0,2.211387,1.205334,1.5, 0.382683,0.92388,0,3,0.87868,0, 0.382683,0.92388,0,2.211387,1.205334,0, 0.382683,0.92388,0,3,0.87868,0, 0.382683,0.92388,0,2.211387,1.205334,1.5, 0.382683,0.92388,0,3,0.87868,3, 0.382683,0.92388,0,3,0.87868,3, 0.382683,0.92388,0,2.211387,1.205334,1.5, 0.382683,0.92388,0,2.211387,1.205334,3, 0,-1,0,3,1.5,0, 0,-1,0,2.27,1.5,1.5, 0,-1,0,2.27,1.5,0, 0,-1,0,2.27,1.5,1.5, 0,-1,0,3,1.5,0, 0,-1,0,3,1.5,3, 0,-1,0,2.27,1.5,1.5, 0,-1,0,3,1.5,3, 0,-1,0,2.27,1.5,3, 0.382683,-0.92388,0,0.788613,1.205334,0, 0.382683,-0.92388,0,0,0.87868,3, 0.382683,-0.92388,0,0,0.87868,0, 0.382683,-0.92388,0,0,0.87868,3, 0.382683,-0.92388,0,0.788613,1.205334,0, 0.382683,-0.92388,0,0.788613,1.205334,1.5, 0.382683,-0.92388,0,0,0.87868,3, 0.382683,-0.92388,0,0.788613,1.205334,1.5, 0.382683,-0.92388,0,0.788613,1.205334,3, 0.634393,0.77301,0,1.011517,0.904782,3, 0.56911,0.822262,0,1.072211,0.859768,1.5, 0.634393,0.77301,0,1.011517,0.904782,1.5, 0.56911,0.822262,0,1.072211,0.859768,1.5, 0.634393,0.77301,0,1.011517,0.904782,3, 0.541882,0.840455,0,1.072211,0.859768,3, 0.889521,0.456893,0,2.179079,1.862975,0, 0.903989,0.427555,0,2.211387,1.794666,1.5, 0.903989,0.427555,0,2.211387,1.794666,0, 0.903989,0.427555,0,2.211387,1.794666,1.5, 0.889521,0.456893,0,2.179079,1.862975,0, 0.874085,0.485774,0,2.179079,1.862975,1.5, 0.621651,-0.783294,0,1.988483,0.904782,0, 0.55557,-0.83147,0,1.927789,0.859768,1.5, 0.55557,-0.83147,0,1.927789,0.859768,0, 0.55557,-0.83147,0,1.927789,0.859768,1.5, 0.621651,-0.783294,0,1.988483,0.904782,0, 0.646965,-0.76252,0,1.988483,0.904782,1.5, 0.305914,-0.952059,0,1.276481,2.236844,3, 0.33689,-0.941544,0,1.205334,2.211387,1.5, 0.274577,-0.961565,0,1.276481,2.236844,1.5, 0.33689,-0.941544,0,1.205334,2.211387,1.5, 0.305914,-0.952059,0,1.276481,2.236844,3, 0.33689,-0.941544,0,1.205334,2.211387,3, 0.97746,0.211123,0,0.744795,1.34978,1.5, 0.961565,0.274577,0,0.763156,1.276481,3, 0.952059,0.305914,0,0.763156,1.276481,1.5, 0.961565,0.274577,0,0.763156,1.276481,3, 0.97746,0.211123,0,0.744795,1.34978,1.5, 0.983848,0.179005,0,0.744795,1.34978,3, -0.305914,0.952059,0,1.723519,0.763156,3, -0.33689,0.941544,0,1.794666,0.788613,1.5, -0.274577,0.961565,0,1.723519,0.763156,1.5, -0.33689,0.941544,0,1.794666,0.788613,1.5, -0.305914,0.952059,0,1.723519,0.763156,3, -0.33689,0.941544,0,1.794666,0.788613,3, -0.671559,-0.740951,0,2.044472,2.044472,3, -0.634393,-0.77301,0,1.988483,2.095218,1.5, -0.671559,-0.740951,0,2.044472,2.044472,1.5, -0.634393,-0.77301,0,1.988483,2.095218,1.5, -0.671559,-0.740951,0,2.044472,2.044472,3, -0.634393,-0.77301,0,1.988483,2.095218,3, -0.19509,0.980785,0,1.65022,0.744795,3, -0.274577,0.961565,0,1.723519,0.763156,1.5, -0.19509,0.980785,0,1.65022,0.744795,1.5, -0.274577,0.961565,0,1.723519,0.763156,1.5, -0.19509,0.980785,0,1.65022,0.744795,3, -0.305914,0.952059,0,1.723519,0.763156,3, -0.098017,0.995185,0,1.575473,0.733708,1.5, -0.19509,0.980785,0,1.65022,0.744795,3, -0.19509,0.980785,0,1.65022,0.744795,1.5, -0.19509,0.980785,0,1.65022,0.744795,3, -0.098017,0.995185,0,1.575473,0.733708,1.5, -0.098017,0.995185,0,1.575473,0.733708,3, 0.049068,-0.998795,0,1.5,2.27,1.5, 0.098017,-0.995185,0,1.424527,2.266292,3, 0.098017,-0.995185,0,1.424527,2.266292,1.5, 0.098017,-0.995185,0,1.424527,2.266292,3, 0.049068,-0.998795,0,1.5,2.27,1.5, 0.049068,-0.998795,0,1.5,2.27,3, 0.211123,-0.97746,0,1.34978,2.255205,3, 0.274577,-0.961565,0,1.276481,2.236844,1.5, 0.179005,-0.983848,0,1.34978,2.255205,1.5, 0.274577,-0.961565,0,1.276481,2.236844,1.5, 0.211123,-0.97746,0,1.34978,2.255205,3, 0.305914,-0.952059,0,1.276481,2.236844,3, 0.998795,0.049068,0,0.73,1.5,1.5, 0.996656,0.081709,0,0.733708,1.424527,3, 0.993446,0.114299,0,0.733708,1.424527,1.5, 0.996656,0.081709,0,0.733708,1.424527,3, 0.998795,0.049068,0,0.73,1.5,1.5, 0.998795,0.049068,0,0.73,1.5,3, -0.983848,-0.179005,0,2.255205,1.65022,3, -0.993446,-0.114299,0,2.266292,1.575473,1.5, -0.996656,-0.081709,0,2.266292,1.575473,3, -0.993446,-0.114299,0,2.266292,1.575473,1.5, -0.983848,-0.179005,0,2.255205,1.65022,3, -0.97746,-0.211123,0,2.255205,1.65022,1.5, -0.098017,-0.995185,0,1.424527,0.733708,1.5, -0.179005,-0.983848,0,1.34978,0.744795,0, -0.098017,-0.995185,0,1.424527,0.733708,0, -0.179005,-0.983848,0,1.34978,0.744795,0, -0.098017,-0.995185,0,1.424527,0.733708,1.5, -0.211123,-0.97746,0,1.34978,0.744795,1.5, -0.903989,0.427555,0,2.211387,1.205334,3, -0.889521,0.456893,0,2.179079,1.137025,1.5, -0.874085,0.485774,0,2.179079,1.137025,3, -0.889521,0.456893,0,2.179079,1.137025,1.5, -0.903989,0.427555,0,2.211387,1.205334,3, -0.903989,0.427555,0,2.211387,1.205334,1.5, -0.049068,0.998795,0,1.5,0.73,3, -0.098017,0.995185,0,1.575473,0.733708,1.5, -0.049068,0.998795,0,1.5,0.73,1.5, -0.098017,0.995185,0,1.575473,0.733708,1.5, -0.049068,0.998795,0,1.5,0.73,3, -0.098017,0.995185,0,1.575473,0.733708,3, 0.671559,-0.740951,0,2.044472,0.955528,0, 0.646965,-0.76252,0,1.988483,0.904782,1.5, 0.621651,-0.783294,0,1.988483,0.904782,0, 0.646965,-0.76252,0,1.988483,0.904782,1.5, 0.671559,-0.740951,0,2.044472,0.955528,0, 0.671559,-0.740951,0,2.044472,0.955528,1.5, -0.049068,-0.998795,0,1.5,0.73,0, -0.098017,-0.995185,0,1.424527,0.733708,1.5, -0.098017,-0.995185,0,1.424527,0.733708,0, -0.098017,-0.995185,0,1.424527,0.733708,1.5, -0.049068,-0.998795,0,1.5,0.73,0, -0.049068,-0.998795,0,1.5,0.73,1.5, -0.983848,0.179005,0,0.744795,1.65022,1.5, -0.993446,0.114299,0,0.733708,1.575473,0, -0.996656,0.081709,0,0.733708,1.575473,1.5, -0.993446,0.114299,0,0.733708,1.575473,0, -0.983848,0.179005,0,0.744795,1.65022,1.5, -0.97746,0.211123,0,0.744795,1.65022,0, -0.941544,0.33689,0,0.788613,1.794666,1.5, -0.952059,0.305914,0,0.763156,1.723519,0, -0.961565,0.274577,0,0.763156,1.723519,1.5, -0.952059,0.305914,0,0.763156,1.723519,0, -0.941544,0.33689,0,0.788613,1.794666,1.5, -0.941544,0.33689,0,0.788613,1.794666,0, -0.211123,-0.97746,0,1.34978,0.744795,1.5, -0.290285,-0.95694,0,1.276481,0.763156,0, -0.179005,-0.983848,0,1.34978,0.744795,0, -0.290285,-0.95694,0,1.276481,0.763156,0, -0.211123,-0.97746,0,1.34978,0.744795,1.5, -0.290285,-0.95694,0,1.276481,0.763156,1.5, 0.740951,0.671559,0,2.044472,2.044472,0, 0.76252,0.646965,0,2.095218,1.988483,1.5, 0.783294,0.621651,0,2.095218,1.988483,0, 0.76252,0.646965,0,2.095218,1.988483,1.5, 0.740951,0.671559,0,2.044472,2.044472,0, 0.740951,0.671559,0,2.044472,2.044472,1.5, -0.76252,-0.646965,0,0.904782,1.011517,1.5, -0.740951,-0.671559,0,0.955528,0.955528,0, -0.740951,-0.671559,0,0.955528,0.955528,1.5, -0.740951,-0.671559,0,0.955528,0.955528,0, -0.76252,-0.646965,0,0.904782,1.011517,1.5, -0.783294,-0.621651,0,0.904782,1.011517,0, 0.211123,0.97746,0,1.65022,2.255205,0, 0.274577,0.961565,0,1.723519,2.236844,1.5, 0.305914,0.952059,0,1.723519,2.236844,0, 0.274577,0.961565,0,1.723519,2.236844,1.5, 0.211123,0.97746,0,1.65022,2.255205,0, 0.179005,0.983848,0,1.65022,2.255205,1.5, -0.996656,0.081709,0,0.733708,1.575473,1.5, -0.998795,0.049068,0,0.73,1.5,0, -0.998795,0.049068,0,0.73,1.5,1.5, -0.998795,0.049068,0,0.73,1.5,0, -0.996656,0.081709,0,0.733708,1.575473,1.5, -0.993446,0.114299,0,0.733708,1.575473,0, 0.707107,-0.707107,0,3,3,0, 0.707107,-0.707107,0,2.044472,2.044472,1.5, 0.707107,-0.707107,0,2.044472,2.044472,0, 0.707107,-0.707107,0,2.044472,2.044472,1.5, 0.707107,-0.707107,0,3,3,0, 0.707107,-0.707107,0,3,3,0.205, 0.707107,-0.707107,0,2.044472,2.044472,1.5, 0.707107,-0.707107,0,3,3,0.205, 0.707107,-0.707107,0,3,3,1.5, 0.707107,-0.707107,0,2.044472,2.044472,1.5, 0.707107,-0.707107,0,3,3,1.5, 0.707107,-0.707107,0,3,3,2.795, 0.707107,-0.707107,0,2.044472,2.044472,1.5, 0.707107,-0.707107,0,3,3,2.795, 0.707107,-0.707107,0,2.044472,2.044472,3, 0.707107,-0.707107,0,2.044472,2.044472,3, 0.707107,-0.707107,0,3,3,2.795, 0.707107,-0.707107,0,3,3,3, 0.840455,0.541882,0,2.140232,1.927789,0, 0.874085,0.485774,0,2.179079,1.862975,1.5, 0.889521,0.456893,0,2.179079,1.862975,0, 0.874085,0.485774,0,2.179079,1.862975,1.5, 0.840455,0.541882,0,2.140232,1.927789,0, 0.822262,0.56911,0,2.140232,1.927789,1.5, 0.952059,-0.305914,0,2.236844,1.276481,0, 0.941544,-0.33689,0,2.211387,1.205334,1.5, 0.941544,-0.33689,0,2.211387,1.205334,0, 0.941544,-0.33689,0,2.211387,1.205334,1.5, 0.952059,-0.305914,0,2.236844,1.276481,0, 0.961565,-0.274577,0,2.236844,1.276481,1.5, 0,1,0,0,1.5,3, 0,1,0,0.73,1.5,0, 0,1,0,0,1.5,0, 0,1,0,0.73,1.5,0, 0,1,0,0,1.5,3, 0,1,0,0.73,1.5,1.5, 0,1,0,0.73,1.5,1.5, 0,1,0,0,1.5,3, 0,1,0,0.73,1.5,3, 0.541882,0.840455,0,1.072211,0.859768,3, 0.471397,0.881921,0,1.137025,0.820921,1.5, 0.56911,0.822262,0,1.072211,0.859768,1.5, 0.471397,0.881921,0,1.137025,0.820921,1.5, 0.541882,0.840455,0,1.072211,0.859768,3, 0.471397,0.881921,0,1.137025,0.820921,3, 0.952059,0.305914,0,0.763156,1.276481,1.5, 0.941544,0.33689,0,0.788613,1.205334,3, 0.941544,0.33689,0,0.788613,1.205334,1.5, 0.941544,0.33689,0,0.788613,1.205334,3, 0.952059,0.305914,0,0.763156,1.276481,1.5, 0.961565,0.274577,0,0.763156,1.276481,3, 0.783294,-0.621651,0,0.904782,1.988483,1.5, 0.822262,-0.56911,0,0.859768,1.927789,3, 0.840455,-0.541882,0,0.859768,1.927789,1.5, 0.822262,-0.56911,0,0.859768,1.927789,3, 0.783294,-0.621651,0,0.904782,1.988483,1.5, 0.76252,-0.646965,0,0.904782,1.988483,3, 0.92388,-0.382683,0,1.205334,0.788613,0, 0.92388,-0.382683,0,0.87868,0,0.205, 0.92388,-0.382683,0,0.87868,0,0, 0.92388,-0.382683,0,0.87868,0,0.205, 0.92388,-0.382683,0,1.205334,0.788613,0, 0.92388,-0.382683,0,0.87868,0,0.82632, 0.92388,-0.382683,0,0.87868,0,0.82632, 0.92388,-0.382683,0,1.205334,0.788613,0, 0.92388,-0.382683,0,0.87868,0,2.17368, 0.92388,-0.382683,0,0.87868,0,2.17368, 0.92388,-0.382683,0,1.205334,0.788613,0, 0.92388,-0.382683,0,0.87868,0,2.795, 0.92388,-0.382683,0,0.87868,0,2.795, 0.92388,-0.382683,0,1.205334,0.788613,0, 0.92388,-0.382683,0,0.87868,0,3, 0.92388,-0.382683,0,0.87868,0,3, 0.92388,-0.382683,0,1.205334,0.788613,0, 0.92388,-0.382683,0,1.205334,0.788613,3, 0.714674,0.572585,0.401731,1.205334,0.788613,3, 0.793487,-0.468606,-0.388313,1.205334,0.788613,0, 0.516676,-0.562787,0.645226,1.205334,0.788613,1.5, 0,0,-1,0,1.201631,0, 0,0,-1,0.788613,1.205334,0, 0,0,-1,0,0.87868,0, 0,0,-1,0.788613,1.205334,0, 0,0,-1,0,1.201631,0, 0,0,-1,0.763156,1.276481,0, 0,0,-1,0.763156,1.276481,0, 0,0,-1,0,1.201631,0, 0,0,-1,0.744795,1.34978,0, 0,0,-1,2.044472,2.044472,0, 0,0,-1,2.140232,1.927789,0, 0,0,-1,1.5,1.5,0, 0,0,-1,2.140232,1.927789,0, 0,0,-1,2.044472,2.044472,0, 0,0,-1,2.095218,1.988483,0, 0,0,-1,2.140232,1.927789,0, 0,0,-1,2.211387,1.794666,0, 0,0,-1,1.5,1.5,0, 0,0,-1,2.211387,1.794666,0, 0,0,-1,2.140232,1.927789,0, 0,0,-1,2.179079,1.862975,0, 0,0,-1,1.072211,0.859768,0, 0,0,-1,0.87868,0,0, 0,0,-1,0.497732,0,0, 0,0,-1,0.87868,0,0, 0,0,-1,1.072211,0.859768,0, 0,0,-1,1.137025,0.820921,0, 0,0,-1,0.87868,0,0, 0,0,-1,1.137025,0.820921,0, 0,0,-1,1.205334,0.788613,0, 0,0,-1,2.179079,1.137025,0, 0,0,-1,3,0.497732,0, 0,0,-1,2.140232,1.072211,0, 0,0,-1,3,0.497732,0, 0,0,-1,2.179079,1.137025,0, 0,0,-1,2.211387,1.205334,0, 0,0,-1,3,0.497732,0, 0,0,-1,2.211387,1.205334,0, 0,0,-1,3,0.87868,0, 0,0,-1,1.927789,0.859768,0, 0,0,-1,1.794666,0.788613,0, 0,0,-1,1.5,1.5,0, 0,0,-1,1.794666,0.788613,0, 0,0,-1,1.927789,0.859768,0, 0,0,-1,1.862975,0.820921,0, 0,0,-1,1.794666,0.788613,0, 0,0,-1,1.65022,0.744795,0, 0,0,-1,1.5,1.5,0, 0,0,-1,1.65022,0.744795,0, 0,0,-1,1.794666,0.788613,0, 0,0,-1,1.723519,0.763156,0, 0,0,-1,2.255205,1.34978,0, 0,0,-1,2.211387,1.205334,0, 0,0,-1,1.5,1.5,0, 0,0,-1,2.211387,1.205334,0, 0,0,-1,2.255205,1.34978,0, 0,0,-1,2.236844,1.276481,0, 0,0,-1,0.820921,1.862975,0, 0,0,-1,1.5,1.5,0, 0,0,-1,0.788613,1.794666,0, 0,0,-1,1.5,1.5,0, 0,0,-1,0.820921,1.862975,0, 0,0,-1,0.859768,1.927789,0, 0,0,-1,0.904782,1.988483,0, 0,0,-1,1.5,1.5,0, 0,0,-1,0.859768,1.927789,0, 0,0,-1,1.5,1.5,0, 0,0,-1,0.904782,1.988483,0, 0,0,-1,0.955528,2.044472,0, 0,0,-1,0.763156,1.723519,0, 0,0,-1,1.5,1.5,0, 0,0,-1,0.744795,1.65022,0, 0,0,-1,1.5,1.5,0, 0,0,-1,0.763156,1.723519,0, 0,0,-1,0.788613,1.794666,0, 0,0,-1,1.794666,2.211387,0, 0,0,-1,1.927789,2.140232,0, 0,0,-1,1.5,1.5,0, 0,0,-1,1.927789,2.140232,0, 0,0,-1,1.794666,2.211387,0, 0,0,-1,1.862975,2.179079,0, 0,0,-1,1.65022,2.255205,0, 0,0,-1,1.794666,2.211387,0, 0,0,-1,1.5,1.5,0, 0,0,-1,1.794666,2.211387,0, 0,0,-1,1.65022,2.255205,0, 0,0,-1,1.723519,2.236844,0, 0,0,-1,1.723519,0.763156,0, 0,0,-1,1.798369,0,0, 0,0,-1,1.65022,0.744795,0, 0,0,-1,1.798369,0,0, 0,0,-1,1.723519,0.763156,0, 0,0,-1,1.794666,0.788613,0, 0,0,-1,1.798369,0,0, 0,0,-1,1.794666,0.788613,0, 0,0,-1,2.12132,0,0, 0,0,-1,2.211387,1.794666,0, 0,0,-1,2.255205,1.65022,0, 0,0,-1,1.5,1.5,0, 0,0,-1,2.255205,1.65022,0, 0,0,-1,2.211387,1.794666,0, 0,0,-1,2.236844,1.723519,0, 0,0,-1,2.255205,1.65022,0, 0,0,-1,2.27,1.5,0, 0,0,-1,1.5,1.5,0, 0,0,-1,2.27,1.5,0, 0,0,-1,2.255205,1.65022,0, 0,0,-1,2.266292,1.575473,0, 0,0,-1,1.5,1.5,0, 0,0,-1,1.011517,0.904782,0, 0,0,-1,0.955528,0.955528,0, 0,0,-1,1.011517,0.904782,0, 0,0,-1,1.5,1.5,0, 0,0,-1,1.072211,0.859768,0, 0,0,-1,1.5,1.5,0, 0,0,-1,1.137025,0.820921,0, 0,0,-1,1.072211,0.859768,0, 0,0,-1,1.137025,0.820921,0, 0,0,-1,1.5,1.5,0, 0,0,-1,1.205334,0.788613,0, 0,0,-1,1.5,1.5,0, 0,0,-1,0.733708,1.424527,0, 0,0,-1,0.73,1.5,0, 0,0,-1,0.733708,1.424527,0, 0,0,-1,1.5,1.5,0, 0,0,-1,0.744795,1.34978,0, 0,0,-1,1.5,1.5,0, 0,0,-1,1.276481,0.763156,0, 0,0,-1,1.205334,0.788613,0, 0,0,-1,1.276481,0.763156,0, 0,0,-1,1.5,1.5,0, 0,0,-1,1.34978,0.744795,0, 0,0,-1,1.5,1.5,0, 0,0,-1,0.763156,1.276481,0, 0,0,-1,0.744795,1.34978,0, 0,0,-1,0.763156,1.276481,0, 0,0,-1,1.5,1.5,0, 0,0,-1,0.788613,1.205334,0, 0,0,-1,0.733708,1.575473,0, 0,0,-1,1.5,1.5,0, 0,0,-1,0.73,1.5,0, 0,0,-1,1.5,1.5,0, 0,0,-1,0.733708,1.575473,0, 0,0,-1,0.744795,1.65022,0, 0,0,-1,1.5,1.5,0, 0,0,-1,0.820921,1.137025,0, 0,0,-1,0.788613,1.205334,0, 0,0,-1,0.820921,1.137025,0, 0,0,-1,1.5,1.5,0, 0,0,-1,0.859768,1.072211,0, 0,0,-1,2.27,1.5,0, 0,0,-1,2.255205,1.34978,0, 0,0,-1,1.5,1.5,0, 0,0,-1,2.255205,1.34978,0, 0,0,-1,2.27,1.5,0, 0,0,-1,2.266292,1.424527,0, 0,0,-1,2.140232,1.072211,0, 0,0,-1,2.044472,0.955528,0, 0,0,-1,1.5,1.5,0, 0,0,-1,2.044472,0.955528,0, 0,0,-1,2.140232,1.072211,0, 0,0,-1,2.095218,1.011517,0, 0,0,-1,1.575473,2.266292,0, 0,0,-1,1.5,1.5,0, 0,0,-1,1.5,2.27,0, 0,0,-1,1.5,1.5,0, 0,0,-1,1.575473,2.266292,0, 0,0,-1,1.65022,2.255205,0, 0,0,-1,1.011517,2.095218,0, 0,0,-1,1.5,1.5,0, 0,0,-1,0.955528,2.044472,0, 0,0,-1,1.5,1.5,0, 0,0,-1,1.011517,2.095218,0, 0,0,-1,1.072211,2.140232,0, 0,0,-1,1.137025,2.179079,0, 0,0,-1,1.5,1.5,0, 0,0,-1,1.072211,2.140232,0, 0,0,-1,1.5,1.5,0, 0,0,-1,1.137025,2.179079,0, 0,0,-1,1.205334,2.211387,0, 0,0,-1,2.044472,0.955528,0, 0,0,-1,1.927789,0.859768,0, 0,0,-1,1.5,1.5,0, 0,0,-1,1.927789,0.859768,0, 0,0,-1,2.044472,0.955528,0, 0,0,-1,1.988483,0.904782,0, 0,0,-1,1.276481,2.236844,0, 0,0,-1,1.5,1.5,0, 0,0,-1,1.205334,2.211387,0, 0,0,-1,1.5,1.5,0, 0,0,-1,1.276481,2.236844,0, 0,0,-1,1.34978,2.255205,0, 0,0,-1,1.424527,2.266292,0, 0,0,-1,1.5,1.5,0, 0,0,-1,1.34978,2.255205,0, 0,0,-1,1.5,1.5,0, 0,0,-1,1.424527,2.266292,0, 0,0,-1,1.5,2.27,0, 0,0,-1,2.211387,1.205334,0, 0,0,-1,2.140232,1.072211,0, 0,0,-1,1.5,1.5,0, 0,0,-1,2.140232,1.072211,0, 0,0,-1,2.211387,1.205334,0, 0,0,-1,2.179079,1.137025,0, 0,0,-1,1.5,1.5,0, 0,0,-1,0.904782,1.011517,0, 0,0,-1,0.859768,1.072211,0, 0,0,-1,0.904782,1.011517,0, 0,0,-1,1.5,1.5,0, 0,0,-1,0.955528,0.955528,0, 0,0,-1,1.5,1.5,0, 0,0,-1,1.575473,0.733708,0, 0,0,-1,1.5,0.73,0, 0,0,-1,1.575473,0.733708,0, 0,0,-1,1.5,1.5,0, 0,0,-1,1.65022,0.744795,0, 0,0,-1,1.201631,3,0, 0,0,-1,1.205334,2.211387,0, 0,0,-1,0.87868,3,0, 0,0,-1,1.205334,2.211387,0, 0,0,-1,1.201631,3,0, 0,0,-1,1.276481,2.236844,0, 0,0,-1,1.276481,2.236844,0, 0,0,-1,1.201631,3,0, 0,0,-1,1.34978,2.255205,0, 0,0,-1,0,2.502268,0, 0,0,-1,0.788613,1.794666,0, 0,0,-1,0,2.12132,0, 0,0,-1,0.788613,1.794666,0, 0,0,-1,0,2.502268,0, 0,0,-1,0.820921,1.862975,0, 0,0,-1,0.820921,1.862975,0, 0,0,-1,0,2.502268,0, 0,0,-1,0.859768,1.927789,0, 0,0,-1,2.12132,3,0, 0,0,-1,1.862975,2.179079,0, 0,0,-1,1.794666,2.211387,0, 0,0,-1,1.862975,2.179079,0, 0,0,-1,2.12132,3,0, 0,0,-1,1.927789,2.140232,0, 0,0,-1,1.927789,2.140232,0, 0,0,-1,2.12132,3,0, 0,0,-1,2.502268,3,0, 0,0,-1,1.5,1.5,0, 0,0,-1,1.424527,0.733708,0, 0,0,-1,1.34978,0.744795,0, 0,0,-1,1.424527,0.733708,0, 0,0,-1,1.5,1.5,0, 0,0,-1,1.5,0.73,0, 0,0,-1,3,2.12132,0, 0,0,-1,2.236844,1.723519,0, 0,0,-1,2.211387,1.794666,0, 0,0,-1,2.236844,1.723519,0, 0,0,-1,3,2.12132,0, 0,0,-1,2.255205,1.65022,0, 0,0,-1,2.255205,1.65022,0, 0,0,-1,3,2.12132,0, 0,0,-1,3,1.798369,0, -0.92388,0.382683,0,2.12132,3,3, -0.92388,0.382683,0,1.794666,2.211387,1.5, -0.92388,0.382683,0,1.794666,2.211387,3, -0.92388,0.382683,0,1.794666,2.211387,1.5, -0.92388,0.382683,0,2.12132,3,3, -0.92388,0.382683,0,1.794666,2.211387,0, -0.92388,0.382683,0,1.794666,2.211387,0, -0.92388,0.382683,0,2.12132,3,3, -0.92388,0.382683,0,2.12132,3,0, -0.269347,0.403107,-0.874618,2.12132,3,0, -0.537476,0.61047,0.58176,2.12132,3,3, 0,1,0,2.12132,3,2.795, -0.269347,0.403107,-0.874618,2.12132,3,0, 0,1,0,2.12132,3,2.795, 0,1,0,2.12132,3,2.17368, -0.269347,0.403107,-0.874618,2.12132,3,0, 0,1,0,2.12132,3,2.17368, 0,1,0,2.12132,3,0.82632, -0.269347,0.403107,-0.874618,2.12132,3,0, 0,1,0,2.12132,3,0.82632, 0,1,0,2.12132,3,0.205, 0,0,1,1.862975,2.179079,3, 0,0,1,2.12132,3,3, 0,0,1,1.794666,2.211387,3, 0,0,1,2.12132,3,3, 0,0,1,1.862975,2.179079,3, 0,0,1,1.927789,2.140232,3, 0,0,1,2.12132,3,3, 0,0,1,1.927789,2.140232,3, 0,0,1,2.502268,3,3, 0,0,1,0.788613,1.794666,3, 0,0,1,0,2.502268,3, 0,0,1,0,2.12132,3, 0,0,1,0,2.502268,3, 0,0,1,0.788613,1.794666,3, 0,0,1,0.820921,1.862975,3, 0,0,1,0,2.502268,3, 0,0,1,0.820921,1.862975,3, 0,0,1,0.859768,1.927789,3, 0.707107,0.707107,0,0,3,0, 0.707107,0.707107,0,0.955528,2.044472,1.5, 0.707107,0.707107,0,0.955528,2.044472,0, 0.707107,0.707107,0,0.955528,2.044472,1.5, 0.707107,0.707107,0,0,3,0, 0.707107,0.707107,0,0.955528,2.044472,3, 0.707107,0.707107,0,0.955528,2.044472,3, 0.707107,0.707107,0,0,3,0, 0.707107,0.707107,0,0,3,3, 0,0,1,0.859768,1.927789,3, 0,0,1,0,3,3, 0,0,1,0,2.502268,3, 0,0,1,0,3,3, 0,0,1,0.859768,1.927789,3, 0,0,1,0.904782,1.988483,3, 0,0,1,0,3,3, 0,0,1,0.904782,1.988483,3, 0,0,1,0.955528,2.044472,3, 0,0,1,1.34978,2.255205,3, 0,0,1,1.5,3,3, 0,0,1,1.201631,3,3, 0,0,1,1.5,3,3, 0,0,1,1.34978,2.255205,3, 0,0,1,1.424527,2.266292,3, 0,0,1,1.5,3,3, 0,0,1,1.424527,2.266292,3, 0,0,1,1.5,2.27,3, 0,0,1,2.266292,1.575473,3, 0,0,1,3,1.798369,3, 0,0,1,2.255205,1.65022,3, 0,0,1,3,1.798369,3, 0,0,1,2.266292,1.575473,3, 0,0,1,2.27,1.5,3, 0,0,1,3,1.798369,3, 0,0,1,2.27,1.5,3, 0,0,1,3,1.5,3, 0,0,1,0.205,0,3, 0,0,1,0.955528,0.955528,3, 0,0,1,0,0,3, 0,0,1,0.955528,0.955528,3, 0,0,1,0.205,0,3, 0,0,1,0.497732,0,3, 0,0,1,0.955528,0.955528,3, 0,0,1,0.497732,0,3, 0,0,1,1.011517,0.904782,3, 0,0,1,1.011517,0.904782,3, 0,0,1,0.497732,0,3, 0,0,1,1.072211,0.859768,3, 0,0,1,0.744795,1.34978,3, 0,0,1,0,1.5,3, 0,0,1,0,1.201631,3, 0,0,1,0,1.5,3, 0,0,1,0.744795,1.34978,3, 0,0,1,0.733708,1.424527,3, 0,0,1,0,1.5,3, 0,0,1,0.733708,1.424527,3, 0,0,1,0.73,1.5,3, 0,0,1,1.988483,2.095218,3, 0,0,1,2.502268,3,3, 0,0,1,1.927789,2.140232,3, 0,0,1,2.502268,3,3, 0,0,1,1.988483,2.095218,3, 0,0,1,2.044472,2.044472,3, 0,0,1,2.502268,3,3, 0,0,1,2.044472,2.044472,3, 0,0,1,3,3,3, 0,0,1,2.502268,3,3, 0.561517,0.232588,0.794104,3,3,3, 0,1,0,2.795,3,3, 0,0,1,1.798369,0,3, 0,0,1,1.5,0.73,3, 0,0,1,1.5,0,3, 0,0,1,1.5,0.73,3, 0,0,1,1.798369,0,3, 0,0,1,1.575473,0.733708,3, 0,0,1,1.575473,0.733708,3, 0,0,1,1.798369,0,3, 0,0,1,1.65022,0.744795,3, 0,0,1,3,0,3, 0,0,1,2.095218,1.011517,3, 0,0,1,2.044472,0.955528,3, 0,0,1,2.095218,1.011517,3, 0,0,1,3,0,3, 0,0,1,2.140232,1.072211,3, 0,0,1,2.140232,1.072211,3, 0,0,1,3,0,3, 0,0,1,3,0.497732,3, 0,1,0,2.12132,3,2.17368, 0,1,0,2.795,3,1.5, 0,1,0,2.12132,3,0.82632, 0,1,0,2.12132,3,2.17368, 0,1,0,2.795,3,2.795, 0,1,0,2.795,3,1.5, 0,1,0,2.795,3,2.795, 0,1,0,2.12132,3,2.17368, 0,1,0,2.12132,3,2.795, 0,1,0,2.795,3,0.205, 0,1,0,3,3,0, 0,1,0,2.795,3,0, 0,1,0,3,3,0, 0,1,0,2.795,3,0.205, 0,1,0,3,3,0.205, 0,1,0,2.12132,3,0.205, 0,1,0,2.502268,3,0, 0,1,0,2.12132,3,0, 0,1,0,2.502268,3,0, 0,1,0,2.795,3,0.205, 0,1,0,2.795,3,0, 0,1,0,2.795,3,0.205, 0,1,0,2.502268,3,0, 0,1,0,2.12132,3,0.205, 0,1,0,2.795,3,1.5, 0,1,0,3,3,0.205, 0,1,0,2.795,3,0.205, 0,1,0,3,3,0.205, 0,1,0,2.795,3,1.5, 0,1,0,3,3,1.5, 0,1,0,0.87868,3,0.82632, 0,1,0,1.5,3,0.205, 0,1,0,0.87868,3,0.205, 0,1,0,1.5,3,2.795, 0,1,0,0.87868,3,2.17368, 0,1,0,0.87868,3,2.795, 0,1,0,0.87868,3,0.82632, 0,1,0,1.5,3,2.795, 0,1,0,1.5,3,0.205, 0,1,0,1.5,3,2.795, 0,1,0,0.87868,3,0.82632, 0,1,0,0.87868,3,2.17368, 0,1,0,2.795,3,3, 0,1,0,3,3,2.795, 0,1,0,2.795,3,2.795, 0,1,0,3,3,2.795, 0,1,0,2.795,3,3, 0,1,0,3,3,3, 0,1,0,2.795,3,2.795, 0,1,0,3,3,1.5, 0,1,0,2.795,3,1.5, 0,1,0,3,3,1.5, 0,1,0,2.795,3,2.795, 0,1,0,3,3,2.795, 0,1,0,0.87868,3,0.205, 0,1,0,1.201631,3,0, 0,1,0,0.87868,3,0, 0,1,0,1.201631,3,0, 0,1,0,1.5,3,0.205, 0,1,0,1.5,3,0, 0,1,0,1.5,3,0.205, 0,1,0,1.201631,3,0, 0,1,0,0.87868,3,0.205, 0,1,0,2.12132,3,3, 0,1,0,2.795,3,2.795, 0,1,0,2.12132,3,2.795, 0,1,0,2.795,3,2.795, 0,1,0,2.12132,3,3, 0,1,0,2.795,3,3, 0,1,0,2.795,3,3, -0.537476,0.61047,0.58176,2.12132,3,3, 0,0,1,2.502268,3,3, 0,-1,0,2.12132,0,0.205, 0,-1,0,1.798369,0,0, 0,-1,0,2.12132,0,0, 0,-1,0,1.798369,0,0, 0,-1,0,1.5,0,0.205, 0,-1,0,1.5,0,0, 0,-1,0,1.5,0,0.205, 0,-1,0,1.798369,0,0, 0,-1,0,2.12132,0,0.205, 0,-1,0,2.12132,0,3, 0,-1,0,1.5,0,2.795, 0,-1,0,2.12132,0,2.795, 0,-1,0,1.5,0,2.795, 0,-1,0,2.12132,0,3, 0,-1,0,1.798369,0,3, 0,-1,0,1.5,0,2.795, 0,-1,0,1.798369,0,3, 0,-1,0,1.5,0,3, 0,-1,0,2.12132,0,0.82632, 0,-1,0,1.5,0,0.205, 0,-1,0,2.12132,0,0.205, 0,-1,0,0.87868,0,2.17368, 0,-1,0,0.205,0,1.5, 0,-1,0,0.87868,0,0.82632, 0,-1,0,0.205,0,3, 0,-1,0,0,0,2.795, 0,-1,0,0.205,0,2.795, 0,-1,0,0,0,2.795, 0,-1,0,0.205,0,3, 0,-1,0,0,0,3, 0,-1,0,0.205,0,1.5, 0,-1,0,0,0,0.205, 0,-1,0,0.205,0,0.205, 0,-1,0,0,0,0.205, 0,-1,0,0.205,0,1.5, 0,-1,0,0,0,1.5, 0,-1,0,0.205,0,0.205, 0,-1,0,0,0,0, 0,-1,0,0.205,0,0, 0,-1,0,0,0,0, 0,-1,0,0.205,0,0.205, 0,-1,0,0,0,0.205, 0,-1,0,0.87868,0,3, 0,-1,0,0.205,0,2.795, 0,-1,0,0.87868,0,2.795, 0,-1,0,0.205,0,2.795, 0,-1,0,0.87868,0,3, 0,-1,0,0.205,0,3, 0,-0.83205,0.5547,0.205,0,3, 0.412538,-0.617407,0.669792,0.87868,0,3, 0,0,1,0.497732,0,3, 0,-1,0,0.87868,0,0.205, 0,-1,0,0.497732,0,0, 0,-1,0,0.87868,0,0, 0,-1,0,0.497732,0,0, 0,-1,0,0.205,0,0.205, 0,-1,0,0.205,0,0, 0,-1,0,0.205,0,0.205, 0,-1,0,0.497732,0,0, 0,-1,0,0.87868,0,0.205, 0,-1,0,0.87868,0,2.17368, 0,-1,0,0.205,0,2.795, 0,-1,0,0.205,0,1.5, 0,-1,0,0.205,0,2.795, 0,-1,0,0.87868,0,2.17368, 0,-1,0,0.87868,0,2.795, 0,-1,0,0.87868,0,0.82632, 0,-1,0,0.205,0,0.205, 0,-1,0,0.87868,0,0.205, 0,-1,0,0.205,0,0.205, 0,-1,0,0.87868,0,0.82632, 0,-1,0,0.205,0,1.5, 0,-1,0,1.5,0,2.795, 0,-1,0,2.12132,0,2.17368, 0,-1,0,2.12132,0,2.795, 0,0,1,1.794666,0.788613,1.5, 0,0,1,2.044472,0.955528,1.5, 0,0,1,1.5,1.5,1.5, 0,0,1,2.044472,0.955528,1.5, 0,0,1,1.794666,0.788613,1.5, 0,0,1,1.862975,0.820921,1.5, 0,0,1,2.044472,0.955528,1.5, 0,0,1,1.862975,0.820921,1.5, 0,0,1,1.927789,0.859768,1.5, 0,0,1,2.044472,0.955528,1.5, 0,0,1,1.927789,0.859768,1.5, 0,0,1,1.988483,0.904782,1.5, 0.83147,0.55557,0,1.5,1.5,0, 0.707107,0.707107,0,2.044472,0.955528,1.5, 0.707107,0.707107,0,2.044472,0.955528,0, 0.707107,0.707107,0,2.044472,0.955528,1.5, 0.83147,0.55557,0,1.5,1.5,0, 0.83147,0.55557,0,1.5,1.5,1.5, 0.83147,0.55557,0,1.5,1.5,1.5, 0.83147,0.55557,0,1.5,1.5,0, 0.707107,0.707107,0,0.955528,2.044472,0, 0.83147,0.55557,0,1.5,1.5,1.5, 0.707107,0.707107,0,0.955528,2.044472,0, 0.707107,0.707107,0,0.955528,2.044472,1.5, 0,0,1,1.5,1.5,1.5, 0,0,1,1.276481,2.236844,1.5, 0,0,1,1.205334,2.211387,1.5, 0,0,1,1.276481,2.236844,1.5, 0,0,1,1.5,1.5,1.5, 0,0,1,1.34978,2.255205,1.5, 0,0,1,1.34978,2.255205,1.5, 0,0,1,1.5,1.5,1.5, 0,0,1,1.424527,2.266292,1.5, 0,0,1,1.424527,2.266292,1.5, 0,0,1,1.5,1.5,1.5, 0,0,1,1.5,2.27,1.5, 0,0,1,1.5,1.5,1.5, 0,0,1,0.820921,1.862975,1.5, 0,0,1,0.788613,1.794666,1.5, 0,0,1,0.820921,1.862975,1.5, 0,0,1,1.5,1.5,1.5, 0,0,1,0.859768,1.927789,1.5, 0,0,1,0.859768,1.927789,1.5, 0,0,1,1.5,1.5,1.5, 0,0,1,0.904782,1.988483,1.5, 0,0,1,0.904782,1.988483,1.5, 0,0,1,1.5,1.5,1.5, 0,0,1,0.955528,2.044472,1.5, -0.382683,-0.92388,0,2.211387,1.205334,1.5, -0.382683,-0.92388,0,1.5,1.5,0, -0.382683,-0.92388,0,2.211387,1.205334,0, -0.382683,-0.92388,0,1.5,1.5,0, -0.382683,-0.92388,0,0.788613,1.794666,1.5, -0.382683,-0.92388,0,0.788613,1.794666,0, -0.382683,-0.92388,0,0.788613,1.794666,1.5, -0.382683,-0.92388,0,1.5,1.5,0, -0.382683,-0.92388,0,2.211387,1.205334,1.5, -0.53272,-0.732123,0.424506,0.788613,1.794666,1.5, 0.220004,0.109479,0.969336,2.211387,1.205334,1.5, 0.245003,0.094681,0.964888,1.5,1.5,1.5, 0,0,1,1.5,1.5,1.5, 0,0,1,1.011517,2.095218,1.5, 0,0,1,0.955528,2.044472,1.5, 0,0,1,1.011517,2.095218,1.5, 0,0,1,1.5,1.5,1.5, 0,0,1,1.072211,2.140232,1.5, 0,0,1,1.072211,2.140232,1.5, 0,0,1,1.5,1.5,1.5, 0,0,1,1.137025,2.179079,1.5, 0,0,1,1.137025,2.179079,1.5, 0,0,1,1.5,1.5,1.5, 0,0,1,1.205334,2.211387,1.5, 0,0,1,1.276481,0.763156,1.5, 0,0,1,1.5,1.5,1.5, 0,0,1,1.205334,0.788613,1.5, 0,0,1,1.5,1.5,1.5, 0,0,1,1.276481,0.763156,1.5, 0,0,1,1.34978,0.744795,1.5, 0,0,1,1.5,1.5,1.5, 0,0,1,1.34978,0.744795,1.5, 0,0,1,1.424527,0.733708,1.5, 0,0,1,1.5,1.5,1.5, 0,0,1,1.424527,0.733708,1.5, 0,0,1,1.5,0.73,1.5, 0.92388,0.382683,0,1.5,1.5,0, 0.92388,0.382683,0,1.794666,0.788613,1.5, 0.92388,0.382683,0,1.794666,0.788613,0, 0.92388,0.382683,0,1.794666,0.788613,1.5, 0.92388,0.382683,0,1.5,1.5,0, 0.92388,0.382683,0,1.5,1.5,1.5, 0.92388,0.382683,0,1.5,1.5,1.5, 0.92388,0.382683,0,1.5,1.5,0, 0.92388,0.382683,0,1.205334,2.211387,0, 0.92388,0.382683,0,1.5,1.5,1.5, 0.92388,0.382683,0,1.205334,2.211387,0, 0.92388,0.382683,0,1.205334,2.211387,1.5, 0,0,1,1.575473,0.733708,1.5, 0,0,1,1.5,1.5,1.5, 0,0,1,1.5,0.73,1.5, 0,0,1,1.5,1.5,1.5, 0,0,1,1.575473,0.733708,1.5, 0,0,1,1.794666,0.788613,1.5, 0,0,1,1.794666,0.788613,1.5, 0,0,1,1.575473,0.733708,1.5, 0,0,1,1.65022,0.744795,1.5, 0,0,1,1.794666,0.788613,1.5, 0,0,1,1.65022,0.744795,1.5, 0,0,1,1.723519,0.763156,1.5, 0,0,1,2.044472,2.044472,1.5, 0,0,1,1.794666,2.211387,1.5, 0,0,1,1.5,1.5,1.5, 0,0,1,1.794666,2.211387,1.5, 0,0,1,2.044472,2.044472,1.5, 0,0,1,1.862975,2.179079,1.5, 0,0,1,1.862975,2.179079,1.5, 0,0,1,2.044472,2.044472,1.5, 0,0,1,1.927789,2.140232,1.5, 0,0,1,1.927789,2.140232,1.5, 0,0,1,2.044472,2.044472,1.5, 0,0,1,1.988483,2.095218,1.5, 1,0,0,1.5,1.5,0, 1,0,0,1.5,0.73,1.5, 1,0,0,1.5,0.73,0, 1,0,0,1.5,0.73,1.5, 1,0,0,1.5,1.5,0, 1,0,0,1.5,1.5,1.5, 1,0,0,1.5,1.5,1.5, 1,0,0,1.5,1.5,0, 1,0,0,1.5,2.27,0, 1,0,0,1.5,1.5,1.5, 1,0,0,1.5,2.27,0, 1,0,0,1.5,2.27,1.5, 0,0,1,0.820921,1.137025,1.5, 0,0,1,1.5,1.5,1.5, 0,0,1,0.788613,1.205334,1.5, 0,0,1,1.5,1.5,1.5, 0,0,1,0.820921,1.137025,1.5, 0,0,1,0.859768,1.072211,1.5, 0,0,1,1.5,1.5,1.5, 0,0,1,0.859768,1.072211,1.5, 0,0,1,0.904782,1.011517,1.5, 0,0,1,1.5,1.5,1.5, 0,0,1,0.904782,1.011517,1.5, 0,0,1,0.955528,0.955528,1.5, 0,0,1,1.5,1.5,1.5, 0,0,1,1.575473,2.266292,1.5, 0,0,1,1.5,2.27,1.5, 0,0,1,1.575473,2.266292,1.5, 0,0,1,1.5,1.5,1.5, 0,0,1,1.794666,2.211387,1.5, 0,0,1,1.575473,2.266292,1.5, 0,0,1,1.794666,2.211387,1.5, 0,0,1,1.65022,2.255205,1.5, 0,0,1,1.65022,2.255205,1.5, 0,0,1,1.794666,2.211387,1.5, 0,0,1,1.723519,2.236844,1.5, 0.941913,-0.335858,0,1.5,1.5,0, 0.92388,-0.382683,0,1.205334,0.788613,1.5, 0.92388,-0.382683,0,1.205334,0.788613,0, 0.92388,-0.382683,0,1.205334,0.788613,1.5, 0.941913,-0.335858,0,1.5,1.5,0, 0.980785,-0.19509,0,1.5,1.5,1.5, 0.980785,-0.19509,0,1.5,1.5,1.5, 0.941913,-0.335858,0,1.5,1.5,0, 0.92388,-0.382683,0,1.794666,2.211387,0, 0.980785,-0.19509,0,1.5,1.5,1.5, 0.92388,-0.382683,0,1.794666,2.211387,0, 0.92388,-0.382683,0,1.794666,2.211387,1.5, 0,0,1,2.27,1.5,1.5, 0,0,1,2.211387,1.794666,1.5, 0,0,1,1.5,1.5,1.5, 0,0,1,2.211387,1.794666,1.5, 0,0,1,2.27,1.5,1.5, 0,0,1,2.236844,1.723519,1.5, 0,0,1,2.236844,1.723519,1.5, 0,0,1,2.27,1.5,1.5, 0,0,1,2.255205,1.65022,1.5, 0,0,1,2.255205,1.65022,1.5, 0,0,1,2.27,1.5,1.5, 0,0,1,2.266292,1.575473,1.5, 0,0,1,1.011517,0.904782,1.5, 0,0,1,1.5,1.5,1.5, 0,0,1,0.955528,0.955528,1.5, 0,0,1,1.5,1.5,1.5, 0,0,1,1.011517,0.904782,1.5, 0,0,1,1.072211,0.859768,1.5, 0,0,1,1.5,1.5,1.5, 0,0,1,1.072211,0.859768,1.5, 0,0,1,1.137025,0.820921,1.5, 0,0,1,1.5,1.5,1.5, 0,0,1,1.137025,0.820921,1.5, 0,0,1,1.205334,0.788613,1.5, 0.707107,-0.707107,0,2.044472,2.044472,1.5, 0.707107,-0.707107,0,1.5,1.5,0, 0.707107,-0.707107,0,2.044472,2.044472,0, 0.707107,-0.707107,0,1.5,1.5,0, 0.707107,-0.707107,0,2.044472,2.044472,1.5, 0.707107,-0.707107,0,0.955528,0.955528,0, 0.707107,-0.707107,0,0.955528,0.955528,0, 0.707107,-0.707107,0,2.044472,2.044472,1.5, 0.707107,-0.707107,0,0.955528,0.955528,1.5, 0,0,1,0.955528,0.955528,1.5, 0,0,1,2.044472,2.044472,1.5, 0,0,1,1.5,1.5,1.5, 0,0,1,1.5,1.5,1.5, 0,0,1,0.733708,1.575473,1.5, 0,0,1,0.73,1.5,1.5, 0,0,1,0.733708,1.575473,1.5, 0,0,1,1.5,1.5,1.5, 0,0,1,0.744795,1.65022,1.5, 0,0,1,0.744795,1.65022,1.5, 0,0,1,1.5,1.5,1.5, 0,0,1,0.763156,1.723519,1.5, 0,0,1,0.763156,1.723519,1.5, 0,0,1,1.5,1.5,1.5, 0,0,1,0.788613,1.794666,1.5, 0,0,1,2.211387,1.794666,1.5, 0,0,1,2.044472,2.044472,1.5, 0,0,1,1.5,1.5,1.5, 0,0,1,2.044472,2.044472,1.5, 0,0,1,2.211387,1.794666,1.5, 0,0,1,2.095218,1.988483,1.5, 0,0,1,2.095218,1.988483,1.5, 0,0,1,2.211387,1.794666,1.5, 0,0,1,2.140232,1.927789,1.5, 0,0,1,2.140232,1.927789,1.5, 0,0,1,2.211387,1.794666,1.5, 0,0,1,2.179079,1.862975,1.5, 0.382683,-0.92388,0,2.211387,1.794666,1.5, 0.522079,-0.852897,0,1.5,1.5,0, 0.382683,-0.92388,0,2.211387,1.794666,0, 0.522079,-0.852897,0,1.5,1.5,0, 0.382683,-0.92388,0,2.211387,1.794666,1.5, 0.382683,-0.92388,0,0.788613,1.205334,1.5, 0,0,-1,0.788613,1.205334,1.5, 0,0,-1,2.211387,1.794666,1.5, 0,0,-1,1.5,1.5,1.5, 0.382683,-0.92388,0,0.788613,1.205334,1.5, 0.382683,-0.92388,0,0.788613,1.205334,0, 0.522079,-0.852897,0,1.5,1.5,0, 0,0,1,0.733708,1.424527,1.5, 0,0,1,1.5,1.5,1.5, 0,0,1,0.73,1.5,1.5, 0,0,1,1.5,1.5,1.5, 0,0,1,0.733708,1.424527,1.5, 0,0,1,0.744795,1.34978,1.5, 0,0,1,1.5,1.5,1.5, 0,0,1,0.744795,1.34978,1.5, 0,0,1,0.763156,1.276481,1.5, 0,0,1,1.5,1.5,1.5, 0,0,1,0.763156,1.276481,1.5, 0,0,1,0.788613,1.205334,1.5, 0,0,1,2.211387,1.205334,1.5, 0,0,1,2.27,1.5,1.5, 0,0,1,1.5,1.5,1.5, 0,0,1,2.27,1.5,1.5, 0,0,1,2.211387,1.205334,1.5, 0,0,1,2.236844,1.276481,1.5, 0,0,1,2.27,1.5,1.5, 0,0,1,2.236844,1.276481,1.5, 0,0,1,2.255205,1.34978,1.5, 0,0,1,2.27,1.5,1.5, 0,0,1,2.255205,1.34978,1.5, 0,0,1,2.266292,1.424527,1.5, 0,1,0,0.73,1.5,1.5, 0,1,0,1.5,1.5,0, 0,1,0,0.73,1.5,0, 0,1,0,1.5,1.5,0, 0,1,0,0.73,1.5,1.5, 0,1,0,1.5,1.5,1.5, 0,1,0,1.5,1.5,0, 0,1,0,2.27,1.5,1.5, 0,1,0,2.27,1.5,0, 0,1,0,2.27,1.5,1.5, 0,1,0,1.5,1.5,0, 0,1,0,1.5,1.5,1.5 }; static const struct gllist lament_model_star_d_frame = { GL_N3F_V3F, GL_TRIANGLES, 1608, lament_model_star_d_data, 0 }; const struct gllist *lament_model_star_d = &lament_model_star_d_frame; static const float lament_model_star_u_data[] = { 0,0,1,3,1.201631,3, 0,0,1,2.266292,1.424527,3, 0,0,1,2.255205,1.34978,3, 0,0,1,2.266292,1.424527,3, 0,0,1,3,1.201631,3, 0,0,1,2.27,1.5,3, 0,0,1,2.27,1.5,3, 0,0,1,3,1.201631,3, 0,0,1,3,1.5,3, 0,0,1,0.73,1.5,3, 0,0,1,0,1.798369,3, 0,0,1,0,1.5,3, 0,0,1,0,1.798369,3, 0,0,1,0.73,1.5,3, 0,0,1,0.733708,1.575473,3, 0,0,1,0,1.798369,3, 0,0,1,0.733708,1.575473,3, 0,0,1,0.744795,1.65022,3, 0,0,1,2.502268,0,3, 0,0,1,1.988483,0.904782,3, 0,0,1,1.927789,0.859768,3, 0,0,1,1.988483,0.904782,3, 0,0,1,2.502268,0,3, 0,0,1,2.044472,0.955528,3, 0,0,1,2.044472,0.955528,3, 0,0,1,2.502268,0,3, 0,0,1,3,0,3, 0.397052,-0.725981,0.561517,3,0,3, 0,0,1,2.502268,0,3, 0,-1,0,2.795,0,3, 0,0,1,0.955528,0.955528,3, 0,0,1,0,0.497732,3, 0,0,1,0,0,3, 0,0,1,0,0.497732,3, 0,0,1,0.955528,0.955528,3, 0,0,1,0.904782,1.011517,3, 0,0,1,0,0.497732,3, 0,0,1,0.904782,1.011517,3, 0,0,1,0.859768,1.072211,3, 0,0,1,1.575473,2.266292,3, 0,0,1,1.5,3,3, 0,0,1,1.5,2.27,3, 0,0,1,1.5,3,3, 0,0,1,1.575473,2.266292,3, 0,0,1,1.798369,3,3, 0,0,1,1.798369,3,3, 0,0,1,1.575473,2.266292,3, 0,0,1,1.65022,2.255205,3, 0,0,1,2.095218,1.988483,3, 0,0,1,3,3,3, 0,0,1,2.044472,2.044472,3, 0,0,1,3,3,3, 0,0,1,2.095218,1.988483,3, 0,0,1,2.140232,1.927789,3, 0,0,1,3,3,3, 0,0,1,2.140232,1.927789,3, 0,0,1,3,2.502268,3, 0,1,0,0,3,3, 0,1,0,0.205,3,2.795, 0,1,0,0,3,2.795, 0,1,0,0.205,3,2.795, 0,1,0,0,3,3, 0,1,0,0.205,3,3, 0,-1,0,2.12132,0,2.17368, 0,-1,0,2.12132,0,0.82632, 0,-1,0,2.795,0,1.5, 1,0,0,3,2.502268,0, 1,0,0,3,2.12132,3, 1,0,0,3,2.12132,0, 1,0,0,3,2.12132,3, 1,0,0,3,2.502268,0, 1,0,0,3,2.502268,3, 1,0,0,3,2.502268,3, 1,0,0,3,2.502268,0, 1,0,0,3,3,0, 1,0,0,3,2.502268,3, 1,0,0,3,3,0, 1,0,0,3,3,3, 0,0,-1,2.236844,1.276481,0, 0,0,-1,3,0.87868,0, 0,0,-1,2.211387,1.205334,0, 0,0,-1,3,0.87868,0, 0,0,-1,2.236844,1.276481,0, 0,0,-1,2.255205,1.34978,0, 0,0,-1,3,0.87868,0, 0,0,-1,2.255205,1.34978,0, 0,0,-1,3,1.201631,0, -1,0,0,0,0.497732,3, -1,0,0,0,0,0, -1,0,0,0,0,3, -1,0,0,0,0,0, -1,0,0,0,0.497732,3, -1,0,0,0,0.497732,0, -1,0,0,0,0.497732,0, -1,0,0,0,0.497732,3, -1,0,0,0,0.87868,3, -1,0,0,0,0.497732,0, -1,0,0,0,0.87868,3, -1,0,0,0,0.87868,0, 0,0,1,0.955528,2.044472,3, 0,0,1,0.205,3,3, 0,0,1,0,3,3, 0,0,1,0.205,3,3, 0,0,1,0.955528,2.044472,3, 0,0,1,0.497732,3,3, 0,0,1,0.497732,3,3, 0,0,1,0.955528,2.044472,3, 0,0,1,1.011517,2.095218,3, 0,0,1,0.497732,3,3, 0,0,1,1.011517,2.095218,3, 0,0,1,1.072211,2.140232,3, 0,0,1,1.5,0,3, 0,0,1,1.34978,0.744795,3, 0,0,1,1.201631,0,3, 0,0,1,1.34978,0.744795,3, 0,0,1,1.5,0,3, 0,0,1,1.424527,0.733708,3, 0,0,1,1.424527,0.733708,3, 0,0,1,1.5,0,3, 0,0,1,1.5,0.73,3, 0,0,-1,0.788613,1.205334,0, 0,0,-1,0,0.497732,0, 0,0,-1,0,0.87868,0, 0,0,-1,0,0.497732,0, 0,0,-1,0.788613,1.205334,0, 0,0,-1,0.820921,1.137025,0, 0,0,-1,0,0.497732,0, 0,0,-1,0.820921,1.137025,0, 0,0,-1,0.859768,1.072211,0, -0.56911,-0.822262,0,1.072211,0.859768,3, -0.621651,-0.783294,0,1.011517,0.904782,1.5, -0.541882,-0.840455,0,1.072211,0.859768,1.5, -0.621651,-0.783294,0,1.011517,0.904782,1.5, -0.56911,-0.822262,0,1.072211,0.859768,3, -0.646965,-0.76252,0,1.011517,0.904782,3, 0,0,-1,3,2.502268,0, 0,0,-1,2.179079,1.862975,0, 0,0,-1,2.140232,1.927789,0, 0,0,-1,2.179079,1.862975,0, 0,0,-1,3,2.502268,0, 0,0,-1,2.211387,1.794666,0, 0,0,-1,2.211387,1.794666,0, 0,0,-1,3,2.502268,0, 0,0,-1,3,2.12132,0, -1,0,0,1.5,3,3, -1,0,0,1.5,2.27,1.5, -1,0,0,1.5,2.27,3, -1,0,0,1.5,2.27,1.5, -1,0,0,1.5,3,3, -1,0,0,1.5,2.27,0, -1,0,0,1.5,2.27,0, -1,0,0,1.5,3,3, -1,0,0,1.5,3,0, -0.408248,0.408248,-0.816497,1.5,3,0, -0.727607,0.485071,0.485071,1.5,3,3, 0,1,0,1.5,3,2.795, -0.408248,0.408248,-0.816497,1.5,3,0, 0,1,0,1.5,3,2.795, 0,1,0,1.5,3,0.205, -0.998795,0.049068,0,2.27,1.5,1.5, -0.996656,0.081709,0,2.266292,1.424527,0, -0.993446,0.114299,0,2.266292,1.424527,1.5, -0.996656,0.081709,0,2.266292,1.424527,0, -0.998795,0.049068,0,2.27,1.5,1.5, -0.998795,0.049068,0,2.27,1.5,0, -0.952059,0.305914,0,2.236844,1.276481,1.5, -0.941544,0.33689,0,2.211387,1.205334,0, -0.941544,0.33689,0,2.211387,1.205334,1.5, -0.941544,0.33689,0,2.211387,1.205334,0, -0.952059,0.305914,0,2.236844,1.276481,1.5, -0.961565,0.274577,0,2.236844,1.276481,0, -0.92388,-0.382683,0,1.794666,0.788613,3, -0.92388,-0.382683,0,2.12132,0,2.795, -0.92388,-0.382683,0,2.12132,0,3, -0.92388,-0.382683,0,2.12132,0,2.795, -0.92388,-0.382683,0,1.794666,0.788613,3, -0.92388,-0.382683,0,2.12132,0,2.17368, -0.92388,-0.382683,0,2.12132,0,2.17368, -0.92388,-0.382683,0,1.794666,0.788613,3, -0.92388,-0.382683,0,2.12132,0,0.82632, -0.92388,-0.382683,0,2.12132,0,0.82632, -0.92388,-0.382683,0,1.794666,0.788613,3, -0.92388,-0.382683,0,2.12132,0,0.205, -0.92388,-0.382683,0,2.12132,0,0.205, -0.92388,-0.382683,0,1.794666,0.788613,3, -0.92388,-0.382683,0,2.12132,0,0, -0.92388,-0.382683,0,2.12132,0,0, -0.92388,-0.382683,0,1.794666,0.788613,3, -0.92388,-0.382683,0,1.794666,0.788613,0, -0.767794,0.296171,-0.568133,1.794666,0.788613,0, -0.446575,-0.504521,0.738938,1.794666,0.788613,3, 0.066046,0.203371,-0.976872,1.794666,0.788613,1.5, -0.646965,-0.76252,0,1.011517,0.904782,3, -0.671559,-0.740951,0,0.955528,0.955528,1.5, -0.621651,-0.783294,0,1.011517,0.904782,1.5, -0.671559,-0.740951,0,0.955528,0.955528,1.5, -0.646965,-0.76252,0,1.011517,0.904782,3, -0.671559,-0.740951,0,0.955528,0.955528,3, 0.874085,-0.485774,0,2.179079,1.137025,1.5, 0.840455,-0.541882,0,2.140232,1.072211,3, 0.822262,-0.56911,0,2.140232,1.072211,1.5, 0.840455,-0.541882,0,2.140232,1.072211,3, 0.874085,-0.485774,0,2.179079,1.137025,1.5, 0.889521,-0.456893,0,2.179079,1.137025,3, 0.92388,-0.382683,0,2.12132,3,0, 0.92388,-0.382683,0,1.794666,2.211387,1.5, 0.92388,-0.382683,0,1.794666,2.211387,0, 0.92388,-0.382683,0,1.794666,2.211387,1.5, 0.92388,-0.382683,0,2.12132,3,0, 0.92388,-0.382683,0,1.794666,2.211387,3, 0.92388,-0.382683,0,1.794666,2.211387,3, 0.92388,-0.382683,0,2.12132,3,0, 0.92388,-0.382683,0,2.12132,3,3, 0.618034,0.412957,0.668955,2.12132,3,3, 0.903634,0.27776,-0.326029,2.12132,3,0, 0,1,0,2.12132,3,0.205, 0.618034,0.412957,0.668955,2.12132,3,3, 0,1,0,2.12132,3,0.205, 0,1,0,2.12132,3,0.82632, 0.618034,0.412957,0.668955,2.12132,3,3, 0,1,0,2.12132,3,0.82632, 0,1,0,2.12132,3,2.17368, 0.618034,0.412957,0.668955,2.12132,3,3, 0,1,0,2.12132,3,2.17368, 0,1,0,2.12132,3,2.795, -0.740951,-0.671559,0,2.044472,2.044472,1.5, -0.76252,-0.646965,0,2.095218,1.988483,0, -0.783294,-0.621651,0,2.095218,1.988483,1.5, -0.76252,-0.646965,0,2.095218,1.988483,0, -0.740951,-0.671559,0,2.044472,2.044472,1.5, -0.740951,-0.671559,0,2.044472,2.044472,0, -0.33689,0.941544,0,1.205334,2.211387,3, -0.305914,0.952059,0,1.276481,2.236844,1.5, -0.33689,0.941544,0,1.205334,2.211387,1.5, -0.305914,0.952059,0,1.276481,2.236844,1.5, -0.33689,0.941544,0,1.205334,2.211387,3, -0.274577,0.961565,0,1.276481,2.236844,3, 0.941544,0.33689,0,2.211387,1.794666,1.5, 0.952059,0.305914,0,2.236844,1.723519,3, 0.961565,0.274577,0,2.236844,1.723519,1.5, 0.952059,0.305914,0,2.236844,1.723519,3, 0.941544,0.33689,0,2.211387,1.794666,1.5, 0.941544,0.33689,0,2.211387,1.794666,3, 0.081709,-0.996656,0,1.575473,0.733708,3, 0.049068,-0.998795,0,1.5,0.73,1.5, 0.114299,-0.993446,0,1.575473,0.733708,1.5, 0.049068,-0.998795,0,1.5,0.73,1.5, 0.081709,-0.996656,0,1.575473,0.733708,3, 0.049068,-0.998795,0,1.5,0.73,3, 0.707107,0.707107,0,2.044472,0.955528,1.5, 0.707107,0.707107,0,3,0,0, 0.707107,0.707107,0,2.044472,0.955528,0, 0.707107,0.707107,0,3,0,0, 0.707107,0.707107,0,2.044472,0.955528,1.5, 0.707107,0.707107,0,3,0,0.205, 0.707107,0.707107,0,3,0,0.205, 0.707107,0.707107,0,2.044472,0.955528,1.5, 0.707107,0.707107,0,3,0,1.5, 0.707107,0.707107,0,3,0,1.5, 0.707107,0.707107,0,2.044472,0.955528,1.5, 0.707107,0.707107,0,2.044472,0.955528,3, 0.707107,0.707107,0,3,0,1.5, 0.707107,0.707107,0,2.044472,0.955528,3, 0.707107,0.707107,0,3,0,2.795, 0.707107,0.707107,0,3,0,2.795, 0.707107,0.707107,0,2.044472,0.955528,3, 0.707107,0.707107,0,3,0,3, -0.783294,-0.621651,0,2.095218,1.988483,1.5, -0.822262,-0.56911,0,2.140232,1.927789,0, -0.840455,-0.541882,0,2.140232,1.927789,1.5, -0.822262,-0.56911,0,2.140232,1.927789,0, -0.783294,-0.621651,0,2.095218,1.988483,1.5, -0.76252,-0.646965,0,2.095218,1.988483,0, 0.983848,0.179005,0,2.255205,1.65022,1.5, 0.993446,0.114299,0,2.266292,1.575473,3, 0.996656,0.081709,0,2.266292,1.575473,1.5, 0.993446,0.114299,0,2.266292,1.575473,3, 0.983848,0.179005,0,2.255205,1.65022,1.5, 0.97746,0.211123,0,2.255205,1.65022,3, 0.33689,0.941544,0,1.205334,0.788613,1.5, 0.305914,0.952059,0,1.276481,0.763156,0, 0.33689,0.941544,0,1.205334,0.788613,0, 0.305914,0.952059,0,1.276481,0.763156,0, 0.33689,0.941544,0,1.205334,0.788613,1.5, 0.274577,0.961565,0,1.276481,0.763156,1.5, -0.179005,-0.983848,0,1.65022,2.255205,1.5, -0.114299,-0.993446,0,1.575473,2.266292,0, -0.211123,-0.97746,0,1.65022,2.255205,0, -0.114299,-0.993446,0,1.575473,2.266292,0, -0.179005,-0.983848,0,1.65022,2.255205,1.5, -0.081709,-0.996656,0,1.575473,2.266292,1.5, -0.274577,-0.961565,0,1.723519,2.236844,1.5, -0.211123,-0.97746,0,1.65022,2.255205,0, -0.305914,-0.952059,0,1.723519,2.236844,0, -0.211123,-0.97746,0,1.65022,2.255205,0, -0.274577,-0.961565,0,1.723519,2.236844,1.5, -0.179005,-0.983848,0,1.65022,2.255205,1.5, -0.081709,-0.996656,0,1.575473,2.266292,1.5, -0.049068,-0.998795,0,1.5,2.27,0, -0.114299,-0.993446,0,1.575473,2.266292,0, -0.049068,-0.998795,0,1.5,2.27,0, -0.081709,-0.996656,0,1.575473,2.266292,1.5, -0.049068,-0.998795,0,1.5,2.27,1.5, 0.76252,0.646965,0,0.904782,1.011517,0, 0.740951,0.671559,0,0.955528,0.955528,1.5, 0.740951,0.671559,0,0.955528,0.955528,0, 0.740951,0.671559,0,0.955528,0.955528,1.5, 0.76252,0.646965,0,0.904782,1.011517,0, 0.783294,0.621651,0,0.904782,1.011517,1.5, -0.889521,0.456893,0,0.820921,1.862975,3, -0.903989,0.427555,0,0.788613,1.794666,1.5, -0.903989,0.427555,0,0.788613,1.794666,3, -0.903989,0.427555,0,0.788613,1.794666,1.5, -0.889521,0.456893,0,0.820921,1.862975,3, -0.874085,0.485774,0,0.820921,1.862975,1.5, -1,0,0,0,1.798369,3, -1,0,0,0,1.5,0, -1,0,0,0,1.5,3, -1,0,0,0,1.5,0, -1,0,0,0,1.798369,3, -1,0,0,0,1.798369,0, -1,0,0,0,1.798369,0, -1,0,0,0,1.798369,3, -1,0,0,0,2.12132,3, -1,0,0,0,1.798369,0, -1,0,0,0,2.12132,3, -1,0,0,0,2.12132,0, 0,0,-1,1.798369,3,0, 0,0,-1,1.723519,2.236844,0, 0,0,-1,1.65022,2.255205,0, 0,0,-1,1.723519,2.236844,0, 0,0,-1,1.798369,3,0, 0,0,-1,1.794666,2.211387,0, 0,0,-1,1.794666,2.211387,0, 0,0,-1,1.798369,3,0, 0,0,-1,2.12132,3,0, 0,0,-1,1.862975,0.820921,0, 0,0,-1,2.12132,0,0, 0,0,-1,1.794666,0.788613,0, 0,0,-1,2.12132,0,0, 0,0,-1,1.862975,0.820921,0, 0,0,-1,1.927789,0.859768,0, 0,0,-1,2.12132,0,0, 0,0,-1,1.927789,0.859768,0, 0,0,-1,2.502268,0,0, -0.382683,0.92388,0,0,0.87868,3, -0.382683,0.92388,0,0.788613,1.205334,0, -0.382683,0.92388,0,0,0.87868,0, -0.382683,0.92388,0,0.788613,1.205334,0, -0.382683,0.92388,0,0,0.87868,3, -0.382683,0.92388,0,0.788613,1.205334,1.5, -0.382683,0.92388,0,0.788613,1.205334,1.5, -0.382683,0.92388,0,0,0.87868,3, -0.382683,0.92388,0,0.788613,1.205334,3, 0,-1,0,0.73,1.5,1.5, 0,-1,0,0,1.5,0, 0,-1,0,0.73,1.5,0, 0,-1,0,0,1.5,0, 0,-1,0,0.73,1.5,1.5, 0,-1,0,0,1.5,3, 0,-1,0,0,1.5,3, 0,-1,0,0.73,1.5,1.5, 0,-1,0,0.73,1.5,3, -0.707107,0.707107,0,2.044472,2.044472,1.5, -0.707107,0.707107,0,3,3,0, -0.707107,0.707107,0,2.044472,2.044472,0, -0.707107,0.707107,0,3,3,0, -0.707107,0.707107,0,2.044472,2.044472,1.5, -0.707107,0.707107,0,3,3,3, -0.707107,0.707107,0,3,3,3, -0.707107,0.707107,0,2.044472,2.044472,1.5, -0.707107,0.707107,0,2.044472,2.044472,3, -0.382683,-0.92388,0,3,0.87868,3, -0.382683,-0.92388,0,2.211387,1.205334,0, -0.382683,-0.92388,0,3,0.87868,0, -0.382683,-0.92388,0,2.211387,1.205334,0, -0.382683,-0.92388,0,3,0.87868,3, -0.382683,-0.92388,0,2.211387,1.205334,1.5, -0.382683,-0.92388,0,2.211387,1.205334,1.5, -0.382683,-0.92388,0,3,0.87868,3, -0.382683,-0.92388,0,2.211387,1.205334,3, -0.427555,-0.903989,0,1.205334,0.788613,3, -0.456893,-0.889521,0,1.137025,0.820921,1.5, -0.427555,-0.903989,0,1.205334,0.788613,1.5, -0.456893,-0.889521,0,1.137025,0.820921,1.5, -0.427555,-0.903989,0,1.205334,0.788613,3, -0.485774,-0.874085,0,1.137025,0.820921,3, 0.92388,0.382683,0,0.87868,3,0, 0.92388,0.382683,0,1.205334,2.211387,1.5, 0.92388,0.382683,0,1.205334,2.211387,0, 0.92388,0.382683,0,1.205334,2.211387,1.5, 0.92388,0.382683,0,0.87868,3,0, 0.92388,0.382683,0,1.205334,2.211387,3, 0.92388,0.382683,0,1.205334,2.211387,3, 0.92388,0.382683,0,0.87868,3,0, 0.92388,0.382683,0,0.87868,3,3, 0.269347,0.403107,0.874618,0.87868,3,3, 0.537476,0.61047,-0.58176,0.87868,3,0, 0,1,0,0.87868,3,0.205, 0.269347,0.403107,0.874618,0.87868,3,3, 0,1,0,0.87868,3,0.205, 0,1,0,0.87868,3,0.82632, 0.269347,0.403107,0.874618,0.87868,3,3, 0,1,0,0.87868,3,0.82632, 0,1,0,0.87868,3,2.17368, 0.269347,0.403107,0.874618,0.87868,3,3, 0,1,0,0.87868,3,2.17368, 0,1,0,0.87868,3,2.795, -0.740951,0.671559,0,0.955528,2.044472,3, -0.76252,0.646965,0,0.904782,1.988483,1.5, -0.783294,0.621651,0,0.904782,1.988483,3, -0.76252,0.646965,0,0.904782,1.988483,1.5, -0.740951,0.671559,0,0.955528,2.044472,3, -0.740951,0.671559,0,0.955528,2.044472,1.5, -0.993446,-0.114299,0,0.733708,1.424527,3, -0.983848,-0.179005,0,0.744795,1.34978,1.5, -0.97746,-0.211123,0,0.744795,1.34978,3, -0.983848,-0.179005,0,0.744795,1.34978,1.5, -0.993446,-0.114299,0,0.733708,1.424527,3, -0.996656,-0.081709,0,0.733708,1.424527,1.5, -0.707107,-0.707107,0,0,3,3, -0.707107,-0.707107,0,0.955528,2.044472,1.5, -0.707107,-0.707107,0,0.955528,2.044472,3, -0.707107,-0.707107,0,0.955528,2.044472,1.5, -0.707107,-0.707107,0,0,3,3, -0.707107,-0.707107,0,0.955528,2.044472,0, -0.707107,-0.707107,0,0.955528,2.044472,0, -0.707107,-0.707107,0,0,3,3, -0.707107,-0.707107,0,0,3,0, -0.561517,0.232588,-0.794104,0,3,0, -0.903326,-0.051662,0.425832,0,3,3, 0,1,0,0,3,2.795, -0.561517,0.232588,-0.794104,0,3,0, 0,1,0,0,3,2.795, 0,1,0,0,3,1.5, -0.561517,0.232588,-0.794104,0,3,0, 0,1,0,0,3,1.5, 0,1,0,0,3,0.205, 0,0,-1,2.044472,2.044472,1.5, 0,0,-1,2.211387,1.794666,1.5, 0,0,-1,1.5,1.5,1.5, 0,0,-1,2.211387,1.794666,1.5, 0,0,-1,2.044472,2.044472,1.5, 0,0,-1,2.095218,1.988483,1.5, 0,0,-1,2.211387,1.794666,1.5, 0,0,-1,2.095218,1.988483,1.5, 0,0,-1,2.140232,1.927789,1.5, 0,0,-1,2.211387,1.794666,1.5, 0,0,-1,2.140232,1.927789,1.5, 0,0,-1,2.179079,1.862975,1.5, 0.274577,-0.961565,0,1.723519,0.763156,3, 0.211123,-0.97746,0,1.65022,0.744795,1.5, 0.305914,-0.952059,0,1.723519,0.763156,1.5, 0.211123,-0.97746,0,1.65022,0.744795,1.5, 0.274577,-0.961565,0,1.723519,0.763156,3, 0.179005,-0.983848,0,1.65022,0.744795,3, 0.874085,0.485774,0,0.820921,1.137025,0, 0.840455,0.541882,0,0.859768,1.072211,1.5, 0.822262,0.56911,0,0.859768,1.072211,0, 0.840455,0.541882,0,0.859768,1.072211,1.5, 0.874085,0.485774,0,0.820921,1.137025,0, 0.889521,0.456893,0,0.820921,1.137025,1.5, 0.822262,-0.56911,0,2.140232,1.072211,1.5, 0.783294,-0.621651,0,2.095218,1.011517,3, 0.76252,-0.646965,0,2.095218,1.011517,1.5, 0.783294,-0.621651,0,2.095218,1.011517,3, 0.822262,-0.56911,0,2.140232,1.072211,1.5, 0.840455,-0.541882,0,2.140232,1.072211,3, 0,0,-1,0.87868,3,0, 0,0,-1,1.072211,2.140232,0, 0,0,-1,0.497732,3,0, 0,0,-1,1.072211,2.140232,0, 0,0,-1,0.87868,3,0, 0,0,-1,1.137025,2.179079,0, 0,0,-1,1.137025,2.179079,0, 0,0,-1,0.87868,3,0, 0,0,-1,1.205334,2.211387,0, 0,-1,0,1.5,0,2.795, 0,-1,0,0.87868,0,0.82632, 0,-1,0,1.5,0,0.205, 0,-1,0,0.87868,0,0.82632, 0,-1,0,1.5,0,2.795, 0,-1,0,0.87868,0,2.17368, 1,0,0,1.5,0.73,0, 1,0,0,1.5,0,0.205, 1,0,0,1.5,0,0, 1,0,0,1.5,0,0.205, 1,0,0,1.5,0.73,0, 1,0,0,1.5,0,2.795, 1,0,0,1.5,0,2.795, 1,0,0,1.5,0.73,0, 1,0,0,1.5,0,3, 1,0,0,1.5,0,3, 1,0,0,1.5,0.73,0, 1,0,0,1.5,0.73,3, 0.694147,-0.227384,0.682976,1.5,0.73,3, 0.878025,0.427983,-0.21425,1.5,0.73,0, 0.341066,-0.296944,-0.891907,1.5,0.73,1.5, -0.993446,0.114299,0,2.266292,1.424527,1.5, -0.983848,0.179005,0,2.255205,1.34978,0, -0.97746,0.211123,0,2.255205,1.34978,1.5, -0.983848,0.179005,0,2.255205,1.34978,0, -0.993446,0.114299,0,2.266292,1.424527,1.5, -0.996656,0.081709,0,2.266292,1.424527,0, 0.961565,0.274577,0,2.236844,1.723519,1.5, 0.97746,0.211123,0,2.255205,1.65022,3, 0.983848,0.179005,0,2.255205,1.65022,1.5, 0.97746,0.211123,0,2.255205,1.65022,3, 0.961565,0.274577,0,2.236844,1.723519,1.5, 0.952059,0.305914,0,2.236844,1.723519,3, -0.274577,0.961565,0,1.276481,2.236844,3, -0.211123,0.97746,0,1.34978,2.255205,1.5, -0.305914,0.952059,0,1.276481,2.236844,1.5, -0.211123,0.97746,0,1.34978,2.255205,1.5, -0.274577,0.961565,0,1.276481,2.236844,3, -0.179005,0.983848,0,1.34978,2.255205,3, 0.903989,-0.427555,0,2.211387,1.205334,1.5, 0.889521,-0.456893,0,2.179079,1.137025,3, 0.874085,-0.485774,0,2.179079,1.137025,1.5, 0.889521,-0.456893,0,2.179079,1.137025,3, 0.903989,-0.427555,0,2.211387,1.205334,1.5, 0.903989,-0.427555,0,2.211387,1.205334,3, 0.646965,0.76252,0,1.988483,2.095218,3, 0.671559,0.740951,0,2.044472,2.044472,1.5, 0.621651,0.783294,0,1.988483,2.095218,1.5, 0.671559,0.740951,0,2.044472,2.044472,1.5, 0.646965,0.76252,0,1.988483,2.095218,3, 0.671559,0.740951,0,2.044472,2.044472,3, -0.081709,0.996656,0,1.424527,2.266292,3, -0.049068,0.998795,0,1.5,2.27,1.5, -0.114299,0.993446,0,1.424527,2.266292,1.5, -0.049068,0.998795,0,1.5,2.27,1.5, -0.081709,0.996656,0,1.424527,2.266292,3, -0.049068,0.998795,0,1.5,2.27,3, 0.427555,0.903989,0,1.794666,2.211387,3, 0.456893,0.889521,0,1.862975,2.179079,1.5, 0.427555,0.903989,0,1.794666,2.211387,1.5, 0.456893,0.889521,0,1.862975,2.179079,1.5, 0.427555,0.903989,0,1.794666,2.211387,3, 0.485774,0.874085,0,1.862975,2.179079,3, 0,1,0,2.27,1.5,1.5, 0,1,0,3,1.5,0, 0,1,0,2.27,1.5,0, 0,1,0,3,1.5,0, 0,1,0,2.27,1.5,1.5, 0,1,0,3,1.5,3, 0,1,0,3,1.5,3, 0,1,0,2.27,1.5,1.5, 0,1,0,2.27,1.5,3, 0.996656,-0.081709,0,0.733708,1.575473,0, 0.998795,-0.049068,0,0.73,1.5,1.5, 0.998795,-0.049068,0,0.73,1.5,0, 0.998795,-0.049068,0,0.73,1.5,1.5, 0.996656,-0.081709,0,0.733708,1.575473,0, 0.993446,-0.114299,0,0.733708,1.575473,1.5, -0.840455,0.541882,0,0.859768,1.927789,3, -0.874085,0.485774,0,0.820921,1.862975,1.5, -0.889521,0.456893,0,0.820921,1.862975,3, -0.874085,0.485774,0,0.820921,1.862975,1.5, -0.840455,0.541882,0,0.859768,1.927789,3, -0.822262,0.56911,0,0.859768,1.927789,1.5, -0.998795,-0.049068,0,0.73,1.5,3, -0.996656,-0.081709,0,0.733708,1.424527,1.5, -0.993446,-0.114299,0,0.733708,1.424527,3, -0.996656,-0.081709,0,0.733708,1.424527,1.5, -0.998795,-0.049068,0,0.73,1.5,3, -0.998795,-0.049068,0,0.73,1.5,1.5, -0.97746,-0.211123,0,0.744795,1.34978,3, -0.961565,-0.274577,0,0.763156,1.276481,1.5, -0.952059,-0.305914,0,0.763156,1.276481,3, -0.961565,-0.274577,0,0.763156,1.276481,1.5, -0.97746,-0.211123,0,0.744795,1.34978,3, -0.983848,-0.179005,0,0.744795,1.34978,1.5, 0.961565,-0.274577,0,0.763156,1.723519,0, 0.97746,-0.211123,0,0.744795,1.65022,1.5, 0.983848,-0.179005,0,0.744795,1.65022,0, 0.97746,-0.211123,0,0.744795,1.65022,1.5, 0.961565,-0.274577,0,0.763156,1.723519,0, 0.952059,-0.305914,0,0.763156,1.723519,1.5, 0.33689,-0.941544,0,1.794666,0.788613,3, 0.305914,-0.952059,0,1.723519,0.763156,1.5, 0.33689,-0.941544,0,1.794666,0.788613,1.5, 0.305914,-0.952059,0,1.723519,0.763156,1.5, 0.33689,-0.941544,0,1.794666,0.788613,3, 0.274577,-0.961565,0,1.723519,0.763156,3, 0.707107,-0.707107,0,0.955528,0.955528,0, 0.707107,-0.707107,0,0,0,3, 0.707107,-0.707107,0,0,0,0, 0.707107,-0.707107,0,0,0,3, 0.707107,-0.707107,0,0.955528,0.955528,0, 0.707107,-0.707107,0,0.955528,0.955528,3, 0.282725,-0.558186,0.780061,0.955528,0.955528,3, 0.865795,-0.298347,-0.401731,0.955528,0.955528,0, 0.362971,-0.362971,-0.858198,0.955528,0.955528,1.5, 0.646965,-0.76252,0,1.011517,2.095218,1.5, 0.671559,-0.740951,0,0.955528,2.044472,0, 0.621651,-0.783294,0,1.011517,2.095218,0, 0.671559,-0.740951,0,0.955528,2.044472,0, 0.646965,-0.76252,0,1.011517,2.095218,1.5, 0.671559,-0.740951,0,0.955528,2.044472,1.5, -0.485774,0.874085,0,1.862975,0.820921,1.5, -0.541882,0.840455,0,1.927789,0.859768,0, -0.456893,0.889521,0,1.862975,0.820921,0, -0.541882,0.840455,0,1.927789,0.859768,0, -0.485774,0.874085,0,1.862975,0.820921,1.5, -0.56911,0.822262,0,1.927789,0.859768,1.5, -0.97746,0.211123,0,2.255205,1.34978,1.5, -0.961565,0.274577,0,2.236844,1.276481,0, -0.952059,0.305914,0,2.236844,1.276481,1.5, -0.961565,0.274577,0,2.236844,1.276481,0, -0.97746,0.211123,0,2.255205,1.34978,1.5, -0.983848,0.179005,0,2.255205,1.34978,0, -0.427555,0.903989,0,1.794666,0.788613,1.5, -0.456893,0.889521,0,1.862975,0.820921,0, -0.427555,0.903989,0,1.794666,0.788613,0, -0.456893,0.889521,0,1.862975,0.820921,0, -0.427555,0.903989,0,1.794666,0.788613,1.5, -0.485774,0.874085,0,1.862975,0.820921,1.5, 0.081709,0.996656,0,1.424527,0.733708,1.5, 0.049068,0.998795,0,1.5,0.73,0, 0.114299,0.993446,0,1.424527,0.733708,0, 0.049068,0.998795,0,1.5,0.73,0, 0.081709,0.996656,0,1.424527,0.733708,1.5, 0.049068,0.998795,0,1.5,0.73,1.5, -0.485774,-0.874085,0,1.137025,0.820921,3, -0.541882,-0.840455,0,1.072211,0.859768,1.5, -0.456893,-0.889521,0,1.137025,0.820921,1.5, -0.541882,-0.840455,0,1.072211,0.859768,1.5, -0.485774,-0.874085,0,1.137025,0.820921,3, -0.56911,-0.822262,0,1.072211,0.859768,3, 0.485774,-0.874085,0,1.137025,2.179079,1.5, 0.541882,-0.840455,0,1.072211,2.140232,0, 0.456893,-0.889521,0,1.137025,2.179079,0, 0.541882,-0.840455,0,1.072211,2.140232,0, 0.485774,-0.874085,0,1.137025,2.179079,1.5, 0.56911,-0.822262,0,1.072211,2.140232,1.5, -0.92388,0.382683,0,0.87868,0,0.205, -0.92388,0.382683,0,1.205334,0.788613,0, -0.92388,0.382683,0,0.87868,0,0, -0.92388,0.382683,0,1.205334,0.788613,0, -0.92388,0.382683,0,0.87868,0,0.205, -0.92388,0.382683,0,0.87868,0,0.82632, -0.92388,0.382683,0,1.205334,0.788613,0, -0.92388,0.382683,0,0.87868,0,0.82632, -0.92388,0.382683,0,0.87868,0,2.17368, -0.92388,0.382683,0,1.205334,0.788613,0, -0.92388,0.382683,0,0.87868,0,2.17368, -0.92388,0.382683,0,0.87868,0,2.795, -0.92388,0.382683,0,1.205334,0.788613,0, -0.92388,0.382683,0,0.87868,0,2.795, -0.92388,0.382683,0,0.87868,0,3, -0.92388,0.382683,0,1.205334,0.788613,0, -0.92388,0.382683,0,0.87868,0,3, -0.92388,0.382683,0,1.205334,0.788613,3, -0.807325,0.502043,-0.310129,1.205334,0.788613,0, 0.015077,-0.480291,0.876979,1.205334,0.788613,3, 0.489038,0.249268,-0.835887,1.205334,0.788613,1.5, 0.76252,-0.646965,0,2.095218,1.011517,1.5, 0.740951,-0.671559,0,2.044472,0.955528,3, 0.740951,-0.671559,0,2.044472,0.955528,1.5, 0.740951,-0.671559,0,2.044472,0.955528,3, 0.76252,-0.646965,0,2.095218,1.011517,1.5, 0.783294,-0.621651,0,2.095218,1.011517,3, 0.485774,0.874085,0,1.862975,2.179079,3, 0.541882,0.840455,0,1.927789,2.140232,1.5, 0.456893,0.889521,0,1.862975,2.179079,1.5, 0.541882,0.840455,0,1.927789,2.140232,1.5, 0.485774,0.874085,0,1.862975,2.179079,3, 0.56911,0.822262,0,1.927789,2.140232,3, 0.382683,-0.92388,0,3,2.12132,3, 0.382683,-0.92388,0,2.211387,1.794666,0, 0.382683,-0.92388,0,3,2.12132,0, 0.382683,-0.92388,0,2.211387,1.794666,0, 0.382683,-0.92388,0,3,2.12132,3, 0.382683,-0.92388,0,2.211387,1.794666,1.5, 0.382683,-0.92388,0,2.211387,1.794666,1.5, 0.382683,-0.92388,0,3,2.12132,3, 0.382683,-0.92388,0,2.211387,1.794666,3, 0.179005,-0.983848,0,1.65022,0.744795,3, 0.114299,-0.993446,0,1.575473,0.733708,1.5, 0.211123,-0.97746,0,1.65022,0.744795,1.5, 0.114299,-0.993446,0,1.575473,0.733708,1.5, 0.179005,-0.983848,0,1.65022,0.744795,3, 0.081709,-0.996656,0,1.575473,0.733708,3, -0.952059,-0.305914,0,0.763156,1.276481,3, -0.941544,-0.33689,0,0.788613,1.205334,1.5, -0.941544,-0.33689,0,0.788613,1.205334,3, -0.941544,-0.33689,0,0.788613,1.205334,1.5, -0.952059,-0.305914,0,0.763156,1.276481,3, -0.961565,-0.274577,0,0.763156,1.276481,1.5, 0.274577,0.961565,0,1.276481,0.763156,1.5, 0.211123,0.97746,0,1.34978,0.744795,0, 0.305914,0.952059,0,1.276481,0.763156,0, 0.211123,0.97746,0,1.34978,0.744795,0, 0.274577,0.961565,0,1.276481,0.763156,1.5, 0.179005,0.983848,0,1.34978,0.744795,1.5, 0.996656,0.081709,0,2.266292,1.575473,1.5, 0.998795,0.049068,0,2.27,1.5,3, 0.998795,0.049068,0,2.27,1.5,1.5, 0.998795,0.049068,0,2.27,1.5,3, 0.996656,0.081709,0,2.266292,1.575473,1.5, 0.993446,0.114299,0,2.266292,1.575473,3, 0.983848,-0.179005,0,0.744795,1.65022,0, 0.993446,-0.114299,0,0.733708,1.575473,1.5, 0.996656,-0.081709,0,0.733708,1.575473,0, 0.993446,-0.114299,0,0.733708,1.575473,1.5, 0.983848,-0.179005,0,0.744795,1.65022,0, 0.97746,-0.211123,0,0.744795,1.65022,1.5, 0.903989,0.427555,0,0.788613,1.205334,0, 0.889521,0.456893,0,0.820921,1.137025,1.5, 0.874085,0.485774,0,0.820921,1.137025,0, 0.889521,0.456893,0,0.820921,1.137025,1.5, 0.903989,0.427555,0,0.788613,1.205334,0, 0.903989,0.427555,0,0.788613,1.205334,1.5, 0.427555,-0.903989,0,1.205334,2.211387,1.5, 0.456893,-0.889521,0,1.137025,2.179079,0, 0.427555,-0.903989,0,1.205334,2.211387,0, 0.456893,-0.889521,0,1.137025,2.179079,0, 0.427555,-0.903989,0,1.205334,2.211387,1.5, 0.485774,-0.874085,0,1.137025,2.179079,1.5, -0.33689,-0.941544,0,1.794666,2.211387,1.5, -0.305914,-0.952059,0,1.723519,2.236844,0, -0.33689,-0.941544,0,1.794666,2.211387,0, -0.305914,-0.952059,0,1.723519,2.236844,0, -0.33689,-0.941544,0,1.794666,2.211387,1.5, -0.274577,-0.961565,0,1.723519,2.236844,1.5, -0.889521,-0.456893,0,2.179079,1.862975,1.5, -0.903989,-0.427555,0,2.211387,1.794666,0, -0.903989,-0.427555,0,2.211387,1.794666,1.5, -0.903989,-0.427555,0,2.211387,1.794666,0, -0.889521,-0.456893,0,2.179079,1.862975,1.5, -0.874085,-0.485774,0,2.179079,1.862975,0, -0.56911,0.822262,0,1.927789,0.859768,1.5, -0.621651,0.783294,0,1.988483,0.904782,0, -0.541882,0.840455,0,1.927789,0.859768,0, -0.621651,0.783294,0,1.988483,0.904782,0, -0.56911,0.822262,0,1.927789,0.859768,1.5, -0.646965,0.76252,0,1.988483,0.904782,1.5, 0.56911,-0.822262,0,1.072211,2.140232,1.5, 0.621651,-0.783294,0,1.011517,2.095218,0, 0.541882,-0.840455,0,1.072211,2.140232,0, 0.621651,-0.783294,0,1.011517,2.095218,0, 0.56911,-0.822262,0,1.072211,2.140232,1.5, 0.646965,-0.76252,0,1.011517,2.095218,1.5, 0.179005,0.983848,0,1.34978,0.744795,1.5, 0.114299,0.993446,0,1.424527,0.733708,0, 0.211123,0.97746,0,1.34978,0.744795,0, 0.114299,0.993446,0,1.424527,0.733708,0, 0.179005,0.983848,0,1.34978,0.744795,1.5, 0.081709,0.996656,0,1.424527,0.733708,1.5, 0.56911,0.822262,0,1.927789,2.140232,3, 0.621651,0.783294,0,1.988483,2.095218,1.5, 0.541882,0.840455,0,1.927789,2.140232,1.5, 0.621651,0.783294,0,1.988483,2.095218,1.5, 0.56911,0.822262,0,1.927789,2.140232,3, 0.646965,0.76252,0,1.988483,2.095218,3, 1,0,0,3,1.201631,0, 1,0,0,3,0.87868,3, 1,0,0,3,0.87868,0, 1,0,0,3,0.87868,3, 1,0,0,3,1.201631,0, 1,0,0,3,1.201631,3, 1,0,0,3,1.201631,3, 1,0,0,3,1.201631,0, 1,0,0,3,1.5,0, 1,0,0,3,1.201631,3, 1,0,0,3,1.5,0, 1,0,0,3,1.5,3, 0.822262,0.56911,0,0.859768,1.072211,0, 0.783294,0.621651,0,0.904782,1.011517,1.5, 0.76252,0.646965,0,0.904782,1.011517,0, 0.783294,0.621651,0,0.904782,1.011517,1.5, 0.822262,0.56911,0,0.859768,1.072211,0, 0.840455,0.541882,0,0.859768,1.072211,1.5, 0.941544,-0.33689,0,0.788613,1.794666,0, 0.952059,-0.305914,0,0.763156,1.723519,1.5, 0.961565,-0.274577,0,0.763156,1.723519,0, 0.952059,-0.305914,0,0.763156,1.723519,1.5, 0.941544,-0.33689,0,0.788613,1.794666,0, 0.941544,-0.33689,0,0.788613,1.794666,1.5, 0,0,-1,0.788613,1.794666,0, 0,0,-1,0,1.798369,0, 0,0,-1,0,2.12132,0, 0,0,-1,0,1.798369,0, 0,0,-1,0.788613,1.794666,0, 0,0,-1,0.763156,1.723519,0, 0,0,-1,0,1.798369,0, 0,0,-1,0.763156,1.723519,0, 0,0,-1,0.744795,1.65022,0, 0,0,-1,1.205334,0.788613,0, 0,0,-1,1.201631,0,0, 0,0,-1,0.87868,0,0, 0,0,-1,1.201631,0,0, 0,0,-1,1.205334,0.788613,0, 0,0,-1,1.276481,0.763156,0, 0,0,-1,1.201631,0,0, 0,0,-1,1.276481,0.763156,0, 0,0,-1,1.34978,0.744795,0, 0,1,0,2.12132,3,0.82632, 0,1,0,2.12132,3,0.205, 0,1,0,1.5,3,0.205, -0.783294,0.621651,0,0.904782,1.988483,3, -0.822262,0.56911,0,0.859768,1.927789,1.5, -0.840455,0.541882,0,0.859768,1.927789,3, -0.822262,0.56911,0,0.859768,1.927789,1.5, -0.783294,0.621651,0,0.904782,1.988483,3, -0.76252,0.646965,0,0.904782,1.988483,1.5, -0.179005,0.983848,0,1.34978,2.255205,3, -0.114299,0.993446,0,1.424527,2.266292,1.5, -0.211123,0.97746,0,1.34978,2.255205,1.5, -0.114299,0.993446,0,1.424527,2.266292,1.5, -0.179005,0.983848,0,1.34978,2.255205,3, -0.081709,0.996656,0,1.424527,2.266292,3, 0.382683,0.92388,0,0,2.12132,3, 0.382683,0.92388,0,0.788613,1.794666,0, 0.382683,0.92388,0,0,2.12132,0, 0.382683,0.92388,0,0.788613,1.794666,0, 0.382683,0.92388,0,0,2.12132,3, 0.382683,0.92388,0,0.788613,1.794666,1.5, 0.382683,0.92388,0,0.788613,1.794666,1.5, 0.382683,0.92388,0,0,2.12132,3, 0.382683,0.92388,0,0.788613,1.794666,3, -0.840455,-0.541882,0,2.140232,1.927789,1.5, -0.874085,-0.485774,0,2.179079,1.862975,0, -0.889521,-0.456893,0,2.179079,1.862975,1.5, -0.874085,-0.485774,0,2.179079,1.862975,0, -0.840455,-0.541882,0,2.140232,1.927789,1.5, -0.822262,-0.56911,0,2.140232,1.927789,0, -0.646965,0.76252,0,1.988483,0.904782,1.5, -0.671559,0.740951,0,2.044472,0.955528,0, -0.621651,0.783294,0,1.988483,0.904782,0, -0.671559,0.740951,0,2.044472,0.955528,0, -0.646965,0.76252,0,1.988483,0.904782,1.5, -0.671559,0.740951,0,2.044472,0.955528,1.5, 0,0,1,1.5,1.5,3, 0,0,1,0.733708,1.575473,3, 0,0,1,0.73,1.5,3, 0,0,1,0.733708,1.575473,3, 0,0,1,1.5,1.5,3, 0,0,1,0.744795,1.65022,3, 0,0,1,1.5,1.5,3, 0,0,1,0.763156,1.723519,3, 0,0,1,0.744795,1.65022,3, 0,0,1,0.763156,1.723519,3, 0,0,1,1.5,1.5,3, 0,0,1,0.788613,1.794666,3, 0,0,1,1.424527,0.733708,3, 0,0,1,1.5,1.5,3, 0,0,1,1.34978,0.744795,3, 0,0,1,1.5,1.5,3, 0,0,1,1.424527,0.733708,3, 0,0,1,1.5,0.73,3, 0,0,1,1.276481,0.763156,3, 0,0,1,1.5,1.5,3, 0,0,1,1.205334,0.788613,3, 0,0,1,1.5,1.5,3, 0,0,1,1.276481,0.763156,3, 0,0,1,1.34978,0.744795,3, 0,0,1,2.140232,1.072211,3, 0,0,1,2.211387,1.205334,3, 0,0,1,1.5,1.5,3, 0,0,1,2.211387,1.205334,3, 0,0,1,2.140232,1.072211,3, 0,0,1,2.179079,1.137025,3, 0,0,1,1.137025,0.820921,3, 0,0,1,1.5,1.5,3, 0,0,1,1.072211,0.859768,3, 0,0,1,1.5,1.5,3, 0,0,1,1.137025,0.820921,3, 0,0,1,1.205334,0.788613,3, 0,0,1,1.575473,0.733708,3, 0,0,1,1.5,1.5,3, 0,0,1,1.5,0.73,3, 0,0,1,1.5,1.5,3, 0,0,1,1.575473,0.733708,3, 0,0,1,1.65022,0.744795,3, 0,0,1,1.65022,0.744795,3, 0,0,1,1.794666,0.788613,3, 0,0,1,1.5,1.5,3, 0,0,1,1.794666,0.788613,3, 0,0,1,1.65022,0.744795,3, 0,0,1,1.723519,0.763156,3, 0,0,1,0,0.497732,3, 0,0,1,0.788613,1.205334,3, 0,0,1,0,0.87868,3, 0,0,1,0.788613,1.205334,3, 0,0,1,0,0.497732,3, 0,0,1,0.820921,1.137025,3, 0,0,1,0.820921,1.137025,3, 0,0,1,0,0.497732,3, 0,0,1,0.859768,1.072211,3, 0,0,1,0.904782,1.011517,3, 0,0,1,1.5,1.5,3, 0,0,1,0.859768,1.072211,3, 0,0,1,1.5,1.5,3, 0,0,1,0.904782,1.011517,3, 0,0,1,0.955528,0.955528,3, 0,0,1,1.5,1.5,3, 0,0,1,0.820921,1.862975,3, 0,0,1,0.788613,1.794666,3, 0,0,1,0.820921,1.862975,3, 0,0,1,1.5,1.5,3, 0,0,1,0.859768,1.927789,3, 0,0,1,2.211387,1.205334,3, 0,0,1,2.255205,1.34978,3, 0,0,1,1.5,1.5,3, 0,0,1,2.255205,1.34978,3, 0,0,1,2.211387,1.205334,3, 0,0,1,2.236844,1.276481,3, 0,0,1,1.927789,0.859768,3, 0,0,1,2.044472,0.955528,3, 0,0,1,1.5,1.5,3, 0,0,1,2.044472,0.955528,3, 0,0,1,1.927789,0.859768,3, 0,0,1,1.988483,0.904782,3, 0,0,1,3,0.87868,3, 0,0,1,2.236844,1.276481,3, 0,0,1,2.211387,1.205334,3, 0,0,1,2.236844,1.276481,3, 0,0,1,3,0.87868,3, 0,0,1,2.255205,1.34978,3, 0,0,1,2.255205,1.34978,3, 0,0,1,3,0.87868,3, 0,0,1,3,1.201631,3, 0,0,1,1.201631,0,3, 0,0,1,1.205334,0.788613,3, 0,0,1,0.87868,0,3, 0,0,1,1.205334,0.788613,3, 0,0,1,1.201631,0,3, 0,0,1,1.276481,0.763156,3, 0,0,1,1.276481,0.763156,3, 0,0,1,1.201631,0,3, 0,0,1,1.34978,0.744795,3, 0,0,1,2.255205,1.65022,3, 0,0,1,2.211387,1.794666,3, 0,0,1,1.5,1.5,3, 0,0,1,2.211387,1.794666,3, 0,0,1,2.255205,1.65022,3, 0,0,1,2.236844,1.723519,3, 0,0,1,2.211387,1.794666,3, 0,0,1,2.140232,1.927789,3, 0,0,1,1.5,1.5,3, 0,0,1,2.140232,1.927789,3, 0,0,1,2.211387,1.794666,3, 0,0,1,2.179079,1.862975,3, 0,0,1,2.27,1.5,3, 0,0,1,2.255205,1.65022,3, 0,0,1,1.5,1.5,3, 0,0,1,2.255205,1.65022,3, 0,0,1,2.27,1.5,3, 0,0,1,2.266292,1.575473,3, 0,0,1,2.12132,0,3, 0,0,1,1.862975,0.820921,3, 0,0,1,1.794666,0.788613,3, 0,0,1,1.862975,0.820921,3, 0,0,1,2.12132,0,3, 0,0,1,1.927789,0.859768,3, 0,0,1,1.927789,0.859768,3, 0,0,1,2.12132,0,3, 0,0,1,2.502268,0,3, 0,0,1,1.723519,2.236844,3, 0,0,1,1.798369,3,3, 0,0,1,1.65022,2.255205,3, 0,0,1,1.798369,3,3, 0,0,1,1.723519,2.236844,3, 0,0,1,1.794666,2.211387,3, 0,0,1,1.798369,3,3, 0,0,1,1.794666,2.211387,3, 0,0,1,2.12132,3,3, 0,0,1,1.5,1.5,3, 0,0,1,1.424527,2.266292,3, 0,0,1,1.34978,2.255205,3, 0,0,1,1.424527,2.266292,3, 0,0,1,1.5,1.5,3, 0,0,1,1.5,2.27,3, 0,0,1,1.5,1.5,3, 0,0,1,1.276481,2.236844,3, 0,0,1,1.205334,2.211387,3, 0,0,1,1.276481,2.236844,3, 0,0,1,1.5,1.5,3, 0,0,1,1.34978,2.255205,3, 0,0,1,1.5,1.5,3, 0,0,1,1.575473,2.266292,3, 0,0,1,1.5,2.27,3, 0,0,1,1.575473,2.266292,3, 0,0,1,1.5,1.5,3, 0,0,1,1.65022,2.255205,3, 0,0,1,1.794666,2.211387,3, 0,0,1,1.65022,2.255205,3, 0,0,1,1.5,1.5,3, 0,0,1,1.65022,2.255205,3, 0,0,1,1.794666,2.211387,3, 0,0,1,1.723519,2.236844,3, 0,0,1,1.927789,2.140232,3, 0,0,1,1.794666,2.211387,3, 0,0,1,1.5,1.5,3, 0,0,1,1.794666,2.211387,3, 0,0,1,1.927789,2.140232,3, 0,0,1,1.862975,2.179079,3, 0,0,1,1.5,1.5,3, 0,0,1,1.137025,2.179079,3, 0,0,1,1.072211,2.140232,3, 0,0,1,1.137025,2.179079,3, 0,0,1,1.5,1.5,3, 0,0,1,1.205334,2.211387,3, 0,0,1,1.5,1.5,3, 0,0,1,1.011517,2.095218,3, 0,0,1,0.955528,2.044472,3, 0,0,1,1.011517,2.095218,3, 0,0,1,1.5,1.5,3, 0,0,1,1.072211,2.140232,3, 0,0,1,1.072211,2.140232,3, 0,0,1,0.87868,3,3, 0,0,1,0.497732,3,3, 0,0,1,0.87868,3,3, 0,0,1,1.072211,2.140232,3, 0,0,1,1.137025,2.179079,3, 0,0,1,0.87868,3,3, 0,0,1,1.137025,2.179079,3, 0,0,1,1.205334,2.211387,3, 0,0,1,0.733708,1.424527,3, 0,0,1,1.5,1.5,3, 0,0,1,0.73,1.5,3, 0,0,1,1.5,1.5,3, 0,0,1,0.733708,1.424527,3, 0,0,1,0.744795,1.34978,3, 0,0,1,0,1.798369,3, 0,0,1,0.788613,1.794666,3, 0,0,1,0,2.12132,3, 0,0,1,0.788613,1.794666,3, 0,0,1,0,1.798369,3, 0,0,1,0.763156,1.723519,3, 0,0,1,0.763156,1.723519,3, 0,0,1,0,1.798369,3, 0,0,1,0.744795,1.65022,3, 0,0,1,2.044472,2.044472,3, 0,0,1,1.927789,2.140232,3, 0,0,1,1.5,1.5,3, 0,0,1,1.927789,2.140232,3, 0,0,1,2.044472,2.044472,3, 0,0,1,1.988483,2.095218,3, 0,0,1,2.255205,1.34978,3, 0,0,1,2.27,1.5,3, 0,0,1,1.5,1.5,3, 0,0,1,2.27,1.5,3, 0,0,1,2.255205,1.34978,3, 0,0,1,2.266292,1.424527,3, 0,0,1,1.794666,0.788613,3, 0,0,1,1.927789,0.859768,3, 0,0,1,1.5,1.5,3, 0,0,1,1.927789,0.859768,3, 0,0,1,1.794666,0.788613,3, 0,0,1,1.862975,0.820921,3, 0,0,1,2.179079,1.862975,3, 0,0,1,3,2.502268,3, 0,0,1,2.140232,1.927789,3, 0,0,1,3,2.502268,3, 0,0,1,2.179079,1.862975,3, 0,0,1,2.211387,1.794666,3, 0,0,1,3,2.502268,3, 0,0,1,2.211387,1.794666,3, 0,0,1,3,2.12132,3, 0,0,1,2.044472,0.955528,3, 0,0,1,2.140232,1.072211,3, 0,0,1,1.5,1.5,3, 0,0,1,2.140232,1.072211,3, 0,0,1,2.044472,0.955528,3, 0,0,1,2.095218,1.011517,3, 0,0,1,0.820921,1.137025,3, 0,0,1,1.5,1.5,3, 0,0,1,0.788613,1.205334,3, 0,0,1,1.5,1.5,3, 0,0,1,0.820921,1.137025,3, 0,0,1,0.859768,1.072211,3, 0,0,1,1.011517,0.904782,3, 0,0,1,1.5,1.5,3, 0,0,1,0.955528,0.955528,3, 0,0,1,1.5,1.5,3, 0,0,1,1.011517,0.904782,3, 0,0,1,1.072211,0.859768,3, 0,0,1,0.763156,1.276481,3, 0,0,1,1.5,1.5,3, 0,0,1,0.744795,1.34978,3, 0,0,1,1.5,1.5,3, 0,0,1,0.763156,1.276481,3, 0,0,1,0.788613,1.205334,3, 0,0,1,2.140232,1.927789,3, 0,0,1,2.044472,2.044472,3, 0,0,1,1.5,1.5,3, 0,0,1,2.044472,2.044472,3, 0,0,1,2.140232,1.927789,3, 0,0,1,2.095218,1.988483,3, 0,0,1,1.5,1.5,3, 0,0,1,0.904782,1.988483,3, 0,0,1,0.859768,1.927789,3, 0,0,1,0.904782,1.988483,3, 0,0,1,1.5,1.5,3, 0,0,1,0.955528,2.044472,3, 0,0,-1,3,3,0, 0,0,-1,2.095218,1.988483,0, 0,0,-1,2.044472,2.044472,0, 0,0,-1,2.095218,1.988483,0, 0,0,-1,3,3,0, 0,0,-1,2.140232,1.927789,0, 0,0,-1,2.140232,1.927789,0, 0,0,-1,3,3,0, 0,0,-1,3,2.502268,0, 0,0,-1,1.5,3,0, 0,0,-1,1.575473,2.266292,0, 0,0,-1,1.5,2.27,0, 0,0,-1,1.575473,2.266292,0, 0,0,-1,1.5,3,0, 0,0,-1,1.798369,3,0, 0,0,-1,1.575473,2.266292,0, 0,0,-1,1.798369,3,0, 0,0,-1,1.65022,2.255205,0, 0,0,-1,2.266292,1.424527,0, 0,0,-1,3,1.201631,0, 0,0,-1,2.255205,1.34978,0, 0,0,-1,3,1.201631,0, 0,0,-1,2.266292,1.424527,0, 0,0,-1,2.27,1.5,0, 0,0,-1,3,1.201631,0, 0,0,-1,2.27,1.5,0, 0,0,-1,3,1.5,0, 0,0,-1,1.34978,0.744795,0, 0,0,-1,1.5,0,0, 0,0,-1,1.201631,0,0, 0,0,-1,1.5,0,0, 0,0,-1,1.34978,0.744795,0, 0,0,-1,1.424527,0.733708,0, 0,0,-1,1.5,0,0, 0,0,-1,1.424527,0.733708,0, 0,0,-1,1.5,0.73,0, 0,0,-1,1.988483,0.904782,0, 0,0,-1,2.502268,0,0, 0,0,-1,1.927789,0.859768,0, 0,0,-1,2.502268,0,0, 0,0,-1,1.988483,0.904782,0, 0,0,-1,2.044472,0.955528,0, 0,0,-1,2.502268,0,0, 0,0,-1,2.044472,0.955528,0, 0,0,-1,3,0,0, 0,-0.447214,-0.894427,2.502268,0,0, 0.794104,0.232588,-0.561517,3,0,0, 0,-1,0,2.795,0,0, 0,0,-1,0.744795,1.65022,0, 0,0,-1,0,1.5,0, 0,0,-1,0,1.798369,0, 0,0,-1,0,1.5,0, 0,0,-1,0.744795,1.65022,0, 0,0,-1,0.733708,1.575473,0, 0,0,-1,0,1.5,0, 0,0,-1,0.733708,1.575473,0, 0,0,-1,0.73,1.5,0, 0,0,-1,0.205,3,0, 0,0,-1,0.955528,2.044472,0, 0,0,-1,0,3,0, 0,0,-1,0.955528,2.044472,0, 0,0,-1,0.205,3,0, 0,0,-1,0.497732,3,0, 0,0,-1,0.955528,2.044472,0, 0,0,-1,0.497732,3,0, 0,0,-1,1.011517,2.095218,0, 0,0,-1,1.011517,2.095218,0, 0,0,-1,0.497732,3,0, 0,0,-1,1.072211,2.140232,0, 0,0,-1,0.859768,1.072211,0, 0,0,-1,0,0,0, 0,0,-1,0,0.497732,0, 0,0,-1,0,0,0, 0,0,-1,0.859768,1.072211,0, 0,0,-1,0.904782,1.011517,0, 0,0,-1,0,0,0, 0,0,-1,0.904782,1.011517,0, 0,0,-1,0.955528,0.955528,0, 0,-1,0,2.795,0,2.795, 0,-1,0,2.12132,0,2.17368, 0,-1,0,2.795,0,1.5, 0,-1,0,2.12132,0,2.17368, 0,-1,0,2.795,0,2.795, 0,-1,0,2.12132,0,2.795, 0,-1,0,2.795,0,0.205, 0,-1,0,2.502268,0,0, 0,-1,0,2.795,0,0, 0,-1,0,2.502268,0,0, 0,-1,0,2.795,0,0.205, 0,-1,0,2.12132,0,0, 0,-1,0,2.12132,0,0, 0,-1,0,2.795,0,0.205, 0,-1,0,2.12132,0,0.205, 0,-1,0,2.795,0,3, 0,-1,0,2.12132,0,2.795, 0,-1,0,2.795,0,2.795, 0,-1,0,2.12132,0,2.795, 0,-1,0,2.795,0,3, 0,-1,0,2.12132,0,3, -0.269347,-0.403107,0.874618,2.12132,0,3, 0,-1,0,2.795,0,3, 0,0,1,2.502268,0,3, 0,-1,0,2.795,0,1.5, 0,-1,0,2.12132,0,0.205, 0,-1,0,2.795,0,0.205, 0,-1,0,2.12132,0,0.205, 0,-1,0,2.795,0,1.5, 0,-1,0,2.12132,0,0.82632, 0,-1,0,1.5,0,0.205, 0,-1,0,1.201631,0,0, 0,-1,0,1.5,0,0, 0,-1,0,1.201631,0,0, 0,-1,0,1.5,0,0.205, 0,-1,0,0.87868,0,0, 0,-1,0,0.87868,0,0, 0,-1,0,1.5,0,0.205, 0,-1,0,0.87868,0,0.205, 0,-1,0,0.87868,0,2.795, 0,-1,0,0.87868,0,2.17368, 0,-1,0,1.5,0,2.795, 0,-1,0,0.87868,0,0.82632, 0,-1,0,0.87868,0,0.205, 0,-1,0,1.5,0,0.205, 0,-1,0,3,0,3, 0,-1,0,2.795,0,2.795, 0,-1,0,3,0,2.795, 0,-1,0,2.795,0,2.795, 0,-1,0,3,0,3, 0,-1,0,2.795,0,3, 0,-1,0,3,0,0.205, 0,-1,0,2.795,0,0, 0,-1,0,3,0,0, 0,-1,0,2.795,0,0, 0,-1,0,3,0,0.205, 0,-1,0,2.795,0,0.205, 0,-1,0,3,0,2.795, 0,-1,0,2.795,0,1.5, 0,-1,0,3,0,1.5, 0,-1,0,2.795,0,1.5, 0,-1,0,3,0,2.795, 0,-1,0,2.795,0,2.795, 0,-1,0,1.5,0,3, 0,-1,0,0.87868,0,2.795, 0,-1,0,1.5,0,2.795, 0,-1,0,0.87868,0,2.795, 0,-1,0,1.5,0,3, 0,-1,0,0.87868,0,3, 0,0,1,0.87868,0,3, 0,0,1,1.5,0,3, 0,0,1,1.201631,0,3, 0,-1,0,3,0,1.5, 0,-1,0,2.795,0,0.205, 0,-1,0,3,0,0.205, 0,-1,0,2.795,0,0.205, 0,-1,0,3,0,1.5, 0,-1,0,2.795,0,1.5, 0,1,0,1.5,3,0.205, 0,1,0,1.798369,3,0, 0,1,0,1.5,3,0, 0,1,0,1.798369,3,0, 0,1,0,1.5,3,0.205, 0,1,0,2.12132,3,0, 0,1,0,2.12132,3,0, 0,1,0,1.5,3,0.205, 0,1,0,2.12132,3,0.205, 0,1,0,2.12132,3,2.795, 0,1,0,2.12132,3,2.17368, 0,1,0,1.5,3,2.795, 0,1,0,1.5,3,2.795, 0,1,0,2.12132,3,0.82632, 0,1,0,1.5,3,0.205, 0,1,0,2.12132,3,0.82632, 0,1,0,1.5,3,2.795, 0,1,0,2.12132,3,2.17368, 0,1,0,1.5,3,3, 0,1,0,2.12132,3,2.795, 0,1,0,1.5,3,2.795, 0,1,0,2.12132,3,2.795, 0,1,0,1.5,3,3, 0,1,0,2.12132,3,3, 0.618034,0.412957,0.668955,2.12132,3,3, -0.727607,0.485071,0.485071,1.5,3,3, 0,0,1,1.798369,3,3, 0,1,0,0.87868,3,2.17368, 0,1,0,0.87868,3,0.82632, 0,1,0,0.205,3,1.5, 0,1,0,0.205,3,1.5, 0,1,0,0.87868,3,0.205, 0,1,0,0.205,3,0.205, 0,1,0,0.87868,3,0.205, 0,1,0,0.205,3,1.5, 0,1,0,0.87868,3,0.82632, 0,1,0,0,3,2.795, 0,1,0,0.205,3,1.5, 0,1,0,0,3,1.5, 0,1,0,0.205,3,1.5, 0,1,0,0,3,2.795, 0,1,0,0.205,3,2.795, 0,1,0,0.205,3,3, 0,1,0,0.87868,3,2.795, 0,1,0,0.205,3,2.795, 0,1,0,0.87868,3,2.795, 0,1,0,0.205,3,3, 0,1,0,0.87868,3,3, 0.269347,0.403107,0.874618,0.87868,3,3, 0,0.83205,0.5547,0.205,3,3, 0,0,1,0.497732,3,3, 0,1,0,0.205,3,2.795, 0,1,0,0.87868,3,2.17368, 0,1,0,0.205,3,1.5, 0,1,0,0.87868,3,2.17368, 0,1,0,0.205,3,2.795, 0,1,0,0.87868,3,2.795, 0,1,0,0,3,1.5, 0,1,0,0.205,3,0.205, 0,1,0,0,3,0.205, 0,1,0,0.205,3,0.205, 0,1,0,0,3,1.5, 0,1,0,0.205,3,1.5, 0,1,0,0,3,0.205, 0,1,0,0.205,3,0, 0,1,0,0,3,0, 0,1,0,0.205,3,0, 0,1,0,0,3,0.205, 0,1,0,0.205,3,0.205, 0,1,0,0.205,3,0.205, 0,1,0,0.497732,3,0, 0,1,0,0.205,3,0, 0,1,0,0.497732,3,0, 0,1,0,0.205,3,0.205, 0,1,0,0.87868,3,0, 0,1,0,0.87868,3,0, 0,1,0,0.205,3,0.205, 0,1,0,0.87868,3,0.205, 0,0,-1,2.211387,1.205334,1.5, 0,0,-1,2.044472,0.955528,1.5, 0,0,-1,1.5,1.5,1.5, 0,0,-1,2.044472,0.955528,1.5, 0,0,-1,2.211387,1.205334,1.5, 0,0,-1,2.095218,1.011517,1.5, 0,0,-1,2.095218,1.011517,1.5, 0,0,-1,2.211387,1.205334,1.5, 0,0,-1,2.140232,1.072211,1.5, 0,0,-1,2.140232,1.072211,1.5, 0,0,-1,2.211387,1.205334,1.5, 0,0,-1,2.179079,1.137025,1.5, 0.382683,0.92388,0,0.788613,1.794666,3, 0.382683,0.92388,0,1.5,1.5,1.5, 0.382683,0.92388,0,0.788613,1.794666,1.5, 0.382683,0.92388,0,1.5,1.5,1.5, 0.382683,0.92388,0,0.788613,1.794666,3, 0.382683,0.92388,0,2.211387,1.205334,1.5, 0.382683,0.92388,0,2.211387,1.205334,1.5, 0.382683,0.92388,0,0.788613,1.794666,3, 0.382683,0.92388,0,2.211387,1.205334,3, 0,0,-1,2.211387,1.205334,3, 0,0,-1,0.788613,1.794666,3, 0,0,-1,1.5,1.5,3, 0,0,-1,1.276481,2.236844,1.5, 0,0,-1,1.5,1.5,1.5, 0,0,-1,1.205334,2.211387,1.5, 0,0,-1,1.5,1.5,1.5, 0,0,-1,1.276481,2.236844,1.5, 0,0,-1,1.34978,2.255205,1.5, 0,0,-1,1.5,1.5,1.5, 0,0,-1,1.34978,2.255205,1.5, 0,0,-1,1.424527,2.266292,1.5, 0,0,-1,1.5,1.5,1.5, 0,0,-1,1.424527,2.266292,1.5, 0,0,-1,1.5,2.27,1.5, 0,0,-1,1.5,1.5,1.5, 0,0,-1,0.733708,1.424527,1.5, 0,0,-1,0.73,1.5,1.5, 0,0,-1,0.733708,1.424527,1.5, 0,0,-1,1.5,1.5,1.5, 0,0,-1,0.744795,1.34978,1.5, 0,0,-1,0.744795,1.34978,1.5, 0,0,-1,1.5,1.5,1.5, 0,0,-1,0.763156,1.276481,1.5, 0,0,-1,0.763156,1.276481,1.5, 0,0,-1,1.5,1.5,1.5, 0,0,-1,0.788613,1.205334,1.5, 0.92388,-0.382683,0,1.5,1.5,1.5, 0.92388,-0.382683,0,1.205334,0.788613,3, 0.92388,-0.382683,0,1.205334,0.788613,1.5, 0.92388,-0.382683,0,1.205334,0.788613,3, 0.92388,-0.382683,0,1.5,1.5,1.5, 0.92388,-0.382683,0,1.5,1.5,3, 0.92388,-0.382683,0,1.5,1.5,3, 0.92388,-0.382683,0,1.5,1.5,1.5, 0.92388,-0.382683,0,1.794666,2.211387,1.5, 0.92388,-0.382683,0,1.5,1.5,3, 0.92388,-0.382683,0,1.794666,2.211387,1.5, 0.92388,-0.382683,0,1.794666,2.211387,3, 0,0,-1,1.011517,2.095218,1.5, 0,0,-1,1.5,1.5,1.5, 0,0,-1,0.955528,2.044472,1.5, 0,0,-1,1.5,1.5,1.5, 0,0,-1,1.011517,2.095218,1.5, 0,0,-1,1.072211,2.140232,1.5, 0,0,-1,1.5,1.5,1.5, 0,0,-1,1.072211,2.140232,1.5, 0,0,-1,1.137025,2.179079,1.5, 0,0,-1,1.5,1.5,1.5, 0,0,-1,1.137025,2.179079,1.5, 0,0,-1,1.205334,2.211387,1.5, 0,0,-1,1.5,1.5,1.5, 0,0,-1,1.276481,0.763156,1.5, 0,0,-1,1.205334,0.788613,1.5, 0,0,-1,1.276481,0.763156,1.5, 0,0,-1,1.5,1.5,1.5, 0,0,-1,1.34978,0.744795,1.5, 0,0,-1,1.34978,0.744795,1.5, 0,0,-1,1.5,1.5,1.5, 0,0,-1,1.424527,0.733708,1.5, 0,0,-1,1.424527,0.733708,1.5, 0,0,-1,1.5,1.5,1.5, 0,0,-1,1.5,0.73,1.5, 0.980785,0.19509,0,1.5,1.5,1.5, 0.92388,0.382683,0,1.794666,0.788613,3, 0.92388,0.382683,0,1.794666,0.788613,1.5, 0.92388,0.382683,0,1.794666,0.788613,3, 0.980785,0.19509,0,1.5,1.5,1.5, 0.980785,0.19509,0,1.5,1.5,3, 0.980785,0.19509,0,1.5,1.5,3, 0.980785,0.19509,0,1.5,1.5,1.5, 0.92388,0.382683,0,1.205334,2.211387,1.5, 0.980785,0.19509,0,1.5,1.5,3, 0.92388,0.382683,0,1.205334,2.211387,1.5, 0.92388,0.382683,0,1.205334,2.211387,3, 0,0,-1,1.5,1.5,1.5, 0,0,-1,1.011517,0.904782,1.5, 0,0,-1,0.955528,0.955528,1.5, 0,0,-1,1.011517,0.904782,1.5, 0,0,-1,1.5,1.5,1.5, 0,0,-1,1.072211,0.859768,1.5, 0,0,-1,1.072211,0.859768,1.5, 0,0,-1,1.5,1.5,1.5, 0,0,-1,1.137025,0.820921,1.5, 0,0,-1,1.137025,0.820921,1.5, 0,0,-1,1.5,1.5,1.5, 0,0,-1,1.205334,0.788613,1.5, 0,0,-1,2.27,1.5,1.5, 0,0,-1,2.211387,1.205334,1.5, 0,0,-1,1.5,1.5,1.5, 0,0,-1,2.211387,1.205334,1.5, 0,0,-1,2.27,1.5,1.5, 0,0,-1,2.236844,1.276481,1.5, 0,0,-1,2.236844,1.276481,1.5, 0,0,-1,2.27,1.5,1.5, 0,0,-1,2.255205,1.34978,1.5, 0,0,-1,2.255205,1.34978,1.5, 0,0,-1,2.27,1.5,1.5, 0,0,-1,2.266292,1.424527,1.5, -0.382683,0.92388,0,0.788613,1.205334,3, -0.382683,0.92388,0,1.5,1.5,1.5, -0.382683,0.92388,0,0.788613,1.205334,1.5, -0.382683,0.92388,0,1.5,1.5,1.5, -0.382683,0.92388,0,0.788613,1.205334,3, -0.382683,0.92388,0,2.211387,1.794666,1.5, -0.382683,0.92388,0,2.211387,1.794666,1.5, -0.382683,0.92388,0,0.788613,1.205334,3, -0.382683,0.92388,0,2.211387,1.794666,3, 0,0,1,2.211387,1.794666,3, 0,0,1,0.788613,1.205334,3, 0,0,1,1.5,1.5,3, 0,0,-1,2.211387,1.794666,1.5, 0,0,-1,2.27,1.5,1.5, 0,0,-1,1.5,1.5,1.5, 0,0,-1,2.27,1.5,1.5, 0,0,-1,2.211387,1.794666,1.5, 0,0,-1,2.236844,1.723519,1.5, 0,0,-1,2.27,1.5,1.5, 0,0,-1,2.236844,1.723519,1.5, 0,0,-1,2.255205,1.65022,1.5, 0,0,-1,2.27,1.5,1.5, 0,0,-1,2.255205,1.65022,1.5, 0,0,-1,2.266292,1.575473,1.5, 0,0,-1,0.733708,1.575473,1.5, 0,0,-1,1.5,1.5,1.5, 0,0,-1,0.73,1.5,1.5, 0,0,-1,1.5,1.5,1.5, 0,0,-1,0.733708,1.575473,1.5, 0,0,-1,0.744795,1.65022,1.5, 0,0,-1,1.5,1.5,1.5, 0,0,-1,0.744795,1.65022,1.5, 0,0,-1,0.763156,1.723519,1.5, 0,0,-1,1.5,1.5,1.5, 0,0,-1,0.763156,1.723519,1.5, 0,0,-1,0.788613,1.794666,1.5, 0,-1,0,2.27,1.5,3, 0,-1,0,1.5,1.5,1.5, 0,-1,0,2.27,1.5,1.5, 0,-1,0,1.5,1.5,1.5, 0,-1,0,2.27,1.5,3, 0,-1,0,0.73,1.5,1.5, 0,-1,0,0.73,1.5,1.5, 0,-1,0,2.27,1.5,3, 0,-1,0,0.73,1.5,3, -0.404462,-0.42482,0.8099,0.73,1.5,3, 0.302501,-0.288004,0.908596,2.27,1.5,3, 0.154098,-0.097337,0.983249,1.5,1.5,3, 0,0,-1,0.820921,1.862975,1.5, 0,0,-1,1.5,1.5,1.5, 0,0,-1,0.788613,1.794666,1.5, 0,0,-1,1.5,1.5,1.5, 0,0,-1,0.820921,1.862975,1.5, 0,0,-1,0.859768,1.927789,1.5, 0,0,-1,1.5,1.5,1.5, 0,0,-1,0.859768,1.927789,1.5, 0,0,-1,0.904782,1.988483,1.5, 0,0,-1,1.5,1.5,1.5, 0,0,-1,0.904782,1.988483,1.5, 0,0,-1,0.955528,2.044472,1.5, 0,0,-1,2.044472,0.955528,1.5, 0,0,-1,1.794666,0.788613,1.5, 0,0,-1,1.5,1.5,1.5, 0,0,-1,1.794666,0.788613,1.5, 0,0,-1,2.044472,0.955528,1.5, 0,0,-1,1.862975,0.820921,1.5, 0,0,-1,1.862975,0.820921,1.5, 0,0,-1,2.044472,0.955528,1.5, 0,0,-1,1.927789,0.859768,1.5, 0,0,-1,1.927789,0.859768,1.5, 0,0,-1,2.044472,0.955528,1.5, 0,0,-1,1.988483,0.904782,1.5, -0.707107,-0.707107,0,1.5,1.5,3, -0.707107,-0.707107,0,2.044472,0.955528,1.5, -0.707107,-0.707107,0,2.044472,0.955528,3, -0.707107,-0.707107,0,2.044472,0.955528,1.5, -0.707107,-0.707107,0,1.5,1.5,3, -0.707107,-0.707107,0,1.5,1.5,1.5, -0.707107,-0.707107,0,1.5,1.5,1.5, -0.707107,-0.707107,0,1.5,1.5,3, -0.707107,-0.707107,0,0.955528,2.044472,1.5, -0.707107,-0.707107,0,0.955528,2.044472,1.5, -0.707107,-0.707107,0,1.5,1.5,3, -0.707107,-0.707107,0,0.955528,2.044472,3, 0,0,-1,1.794666,0.788613,1.5, 0,0,-1,1.5,0.73,1.5, 0,0,-1,1.5,1.5,1.5, 0,0,-1,1.5,0.73,1.5, 0,0,-1,1.794666,0.788613,1.5, 0,0,-1,1.575473,0.733708,1.5, 0,0,-1,1.575473,0.733708,1.5, 0,0,-1,1.794666,0.788613,1.5, 0,0,-1,1.65022,0.744795,1.5, 0,0,-1,1.65022,0.744795,1.5, 0,0,-1,1.794666,0.788613,1.5, 0,0,-1,1.723519,0.763156,1.5, 0,0,-1,1.575473,2.266292,1.5, 0,0,-1,1.5,1.5,1.5, 0,0,-1,1.5,2.27,1.5, 0,0,-1,1.5,1.5,1.5, 0,0,-1,1.575473,2.266292,1.5, 0,0,-1,1.794666,2.211387,1.5, 0,0,-1,1.794666,2.211387,1.5, 0,0,-1,1.575473,2.266292,1.5, 0,0,-1,1.65022,2.255205,1.5, 0,0,-1,1.794666,2.211387,1.5, 0,0,-1,1.65022,2.255205,1.5, 0,0,-1,1.723519,2.236844,1.5, 1,0,0,1.5,1.5,1.5, 1,0,0,1.5,0.73,3, 1,0,0,1.5,0.73,1.5, 1,0,0,1.5,0.73,3, 1,0,0,1.5,1.5,1.5, 1,0,0,1.5,1.5,3, 1,0,0,1.5,1.5,3, 1,0,0,1.5,1.5,1.5, 1,0,0,1.5,2.27,1.5, 1,0,0,1.5,1.5,3, 1,0,0,1.5,2.27,1.5, 1,0,0,1.5,2.27,3, 0,0,-1,1.5,1.5,1.5, 0,0,-1,0.820921,1.137025,1.5, 0,0,-1,0.788613,1.205334,1.5, 0,0,-1,0.820921,1.137025,1.5, 0,0,-1,1.5,1.5,1.5, 0,0,-1,0.859768,1.072211,1.5, 0,0,-1,0.859768,1.072211,1.5, 0,0,-1,1.5,1.5,1.5, 0,0,-1,0.904782,1.011517,1.5, 0,0,-1,0.904782,1.011517,1.5, 0,0,-1,1.5,1.5,1.5, 0,0,-1,0.955528,0.955528,1.5, 0,0,-1,1.794666,2.211387,1.5, 0,0,-1,2.044472,2.044472,1.5, 0,0,-1,1.5,1.5,1.5, 0,0,-1,2.044472,2.044472,1.5, 0,0,-1,1.794666,2.211387,1.5, 0,0,-1,1.862975,2.179079,1.5, 0,0,-1,2.044472,2.044472,1.5, 0,0,-1,1.862975,2.179079,1.5, 0,0,-1,1.927789,2.140232,1.5, 0,0,-1,2.044472,2.044472,1.5, 0,0,-1,1.927789,2.140232,1.5, 0,0,-1,1.988483,2.095218,1.5, 0.83147,-0.55557,0,1.5,1.5,1.5, 0.707107,-0.707107,0,0.955528,0.955528,3, 0.707107,-0.707107,0,0.955528,0.955528,1.5, 0.707107,-0.707107,0,0.955528,0.955528,3, 0.83147,-0.55557,0,1.5,1.5,1.5, 0.83147,-0.55557,0,1.5,1.5,3, 0.83147,-0.55557,0,1.5,1.5,3, 0.83147,-0.55557,0,1.5,1.5,1.5, 0.707107,-0.707107,0,2.044472,2.044472,1.5, 0.83147,-0.55557,0,1.5,1.5,3, 0.707107,-0.707107,0,2.044472,2.044472,1.5, 0.707107,-0.707107,0,2.044472,2.044472,3 }; static const struct gllist lament_model_star_u_frame = { GL_N3F_V3F, GL_TRIANGLES, 1608, lament_model_star_u_data, 0 }; const struct gllist *lament_model_star_u = &lament_model_star_u_frame; static const float lament_model_taser_a_data[] = { -1,0,0,0,1.5,3, -1,0,0,0,2.795,2.795, -1,0,0,0,1.5,2.795, -1,0,0,0,2.795,2.795, -1,0,0,0,1.5,3, -1,0,0,0,1.798369,3, -1,0,0,0,2.795,2.795, -1,0,0,0,1.798369,3, -1,0,0,0,2.12132,3, -1,0,0,0,2.795,2.795, -1,0,0,0,2.12132,3, -1,0,0,0,2.502268,3, -1,0,0,0,2.795,2.795, -1,0,0,0,2.502268,3, -1,0,0,0,2.795,3, -1,0,0,0,1.5,2.795, -1,0,0,0,1.5,1.5, -1,0,0,0,0.205,2.795, -1,0,0,0,1.5,1.5, -0.639602,0.639602,-0.426401,0,1.5,2.795, -0.57735,0.57735,0.57735,0,1.5,2.277, 0,1,0,0.205,3,1.5, 0,1,0,0.53125,3,0.723, 0,1,0,0.205,3,0.723, 0,1,0,0.53125,3,0.723, 0,1,0,0.205,3,1.5, 0,1,0,0.53125,3,0.982, 0,1,0,0.53125,3,0.982, 0,1,0,0.205,3,1.5, 0,1,0,0.53125,3,1.17375, 1,0,0,0.777,3,2.795, 1,0,0,0.777,1.5,3, 1,0,0,0.777,1.5,2.795, 1,0,0,0.777,1.5,3, 1,0,0,0.777,3,2.795, 1,0,0,0.777,1.643814,3, 1,0,0,0.777,1.643814,3, 1,0,0,0.777,3,2.795, 1,0,0,0.777,1.799476,3, 1,0,0,0.777,1.799476,3, 1,0,0,0.777,3,2.795, 1,0,0,0.777,1.983093,3, 1,0,0,0.777,1.983093,3, 1,0,0,0.777,3,2.795, 1,0,0,0.777,2.223,3, 1,0,0,0.777,2.223,3, 1,0,0,0.777,3,2.795, 1,0,0,0.777,2.582046,3, 1,0,0,0.777,2.582046,3, 1,0,0,0.777,3,2.795, 1,0,0,0.777,3,3, 0,-1,0,1.295,0,3, 0,-1,0,0,0,0, 0,-1,0,1.295,0,0, 0,-1,0,0,0,0, 0,-1,0,1.295,0,3, 0,-1,0,0,0,0.205, 0,-1,0,0,0,0.205, 0,-1,0,1.295,0,3, 0,-1,0,0,0,1.5, 0,-1,0,0,0,1.5, 0,-1,0,1.295,0,3, 0,-1,0,0,0,2.795, 0,-1,0,0,0,2.795, 0,-1,0,1.295,0,3, 0,-1,0,0,0,3, 0,0,1,0.777,1.983093,3, 0,0,1,0,2.795,3, 0,0,1,0,2.502268,3, 0,0,1,0,2.795,3, 0,0,1,0.777,1.983093,3, 0,0,1,0,3,3, 0,0,1,0,3,3, 0,0,1,0.777,1.983093,3, 0,0,1,0.777,2.223,3, -1,0,0,0,3,1.5, -1,0,0,0,2.795,0.723, -1,0,0,0,2.795,1.5, -1,0,0,0,2.795,0.723, -1,0,0,0,3,1.5, -1,0,0,0,3,0.723, 1,0,0,0.53125,3,2.018, 1,0,0,0.53125,1.5,2.277, 1,0,0,0.53125,1.5,2.018, 1,0,0,0.53125,1.5,2.277, 1,0,0,0.53125,3,2.018, 1,0,0,0.53125,3,2.277, -1,0,0,0,0.205,2.795, -1,0,0,0,0,3, -1,0,0,0,0.205,3, 0,1,0,0,3,3, 0,1,0,0.205,3,2.795, 0,1,0,0,3,2.795, 0,1,0,0.205,3,2.795, 0,1,0,0,3,3, 0,1,0,0.205,3,3, 0,1,0,0.53125,3,1.82625, 0,1,0,0.796875,3,1.5, 0,1,0,0.53125,3,1.5, 0,1,0,0.796875,3,1.5, 0,1,0,0.53125,3,1.82625, 0,1,0,0.796875,3,1.759, 0,1,0,0.796875,3,1.759, 0,1,0,0.53125,3,1.82625, 0,1,0,0.796875,3,2.018, 0,1,0,0.796875,3,2.018, 0,1,0,0.53125,3,1.82625, 0,1,0,0.723,3,2.018, 0,0,-1,0.723,3,0.982, 0,0,-1,0.53125,1.5,0.982, 0,0,-1,0.53125,3,0.982, 0,0,-1,0.53125,1.5,0.982, 0,0,-1,0.723,3,0.982, 0,0,-1,0.796875,1.5,0.982, 0,0,-1,0.796875,1.5,0.982, 0,0,-1,0.723,3,0.982, 0,0,-1,0.796875,3,0.982, 0,0,-1,0.205,3,2.795, 0,0,-1,0,2.795,2.795, 0,0,-1,0,3,2.795, 0,0,-1,0,2.795,2.795, 0,0,-1,0.205,3,2.795, 0,0,-1,0,1.5,2.795, 0,0,-1,0,1.5,2.795, 0,0,-1,0.205,3,2.795, 0,0,-1,0.777,1.5,2.795, 0,0,-1,0.777,1.5,2.795, 0,0,-1,0.205,3,2.795, 0,0,-1,0.777,3,2.795, 1,0,0,1.295,1.5,0, 1,0,0,1.295,0,3, 1,0,0,1.295,0,0, 1,0,0,1.295,0,3, 1,0,0,1.295,1.5,0, 1,0,0,1.295,1.5,3, 0,0,-1,0.777,1.983093,0, 0,0,-1,0,2.12132,0, 0,0,-1,0,2.502268,0, 0,0,-1,0,2.12132,0, 0,0,-1,0.777,1.983093,0, 0,0,-1,0.777,1.799476,0, -1,0,0,0,0.205,0.205, -1,0,0,0,1.5,0, -1,0,0,0,0.205,0, -1,0,0,0,1.5,0, -1,0,0,0,0.205,0.205, -1,0,0,0,1.5,0.205, -1,0,0,0,0.205,1.5, -1,0,0,0,0,0.205, -1,0,0,0,0,1.5, -1,0,0,0,0,0.205, -1,0,0,0,0.205,1.5, -1,0,0,0,0.205,0.205, 1,0,0,0.53125,3,0.723, 1,0,0,0.53125,1.5,0.982, 1,0,0,0.53125,1.5,0.723, 1,0,0,0.53125,1.5,0.982, 1,0,0,0.53125,3,0.723, 1,0,0,0.53125,3,0.982, 0,0,1,0.53125,1.5,2.277, 0,0,1,0,2.277,2.277, 0,0,1,0,1.5,2.277, 0,0,1,0,2.277,2.277, 0,0,1,0.53125,1.5,2.277, 0,0,1,0,2.795,2.277, 0,0,1,0,2.795,2.277, 0,0,1,0.53125,1.5,2.277, 0,0,1,0,3,2.277, 0,0,1,0,3,2.277, 0,0,1,0.53125,1.5,2.277, 0,0,1,0.205,3,2.277, 0,0,1,0.205,3,2.277, 0,0,1,0.53125,1.5,2.277, 0,0,1,0.53125,3,2.277, 1,0,0,0.796875,3,1.759, 1,0,0,0.796875,1.5,2.018, 1,0,0,0.796875,1.5,1.759, 1,0,0,0.796875,1.5,2.018, 1,0,0,0.796875,3,1.759, 1,0,0,0.796875,3,2.018, 0,1,0,0.796875,3,1.5, 0,1,0,1.0625,3,1.241, 0,1,0,0.796875,3,1.241, 0,1,0,1.0625,3,1.241, 0,1,0,0.796875,3,1.5, 0,1,0,1.0625,3,1.5, 0,0,1,0.777,1.799476,3, 0,0,1,0,2.502268,3, 0,0,1,0,2.12132,3, 0,0,1,0,2.502268,3, 0,0,1,0.777,1.799476,3, 0,0,1,0.777,1.983093,3, 0,1,0,0,3,1.5, 0,1,0,0.205,3,0.723, 0,1,0,0,3,0.723, 0,1,0,0.205,3,0.723, 0,1,0,0,3,1.5, 0,1,0,0.205,3,1.5, 1,0,0,0.796875,3,0.982, 1,0,0,0.796875,1.5,1.241, 1,0,0,0.796875,1.5,0.982, 1,0,0,0.796875,1.5,1.241, 1,0,0,0.796875,3,0.982, 1,0,0,0.796875,3,1.241, -1,0,0,0,0.205,2.795, -1,0,0,0,0,1.5, -1,0,0,0,0,2.795, -1,0,0,0,0,1.5, -1,0,0,0,0.205,2.795, -1,0,0,0,0.205,1.5, 0,0,1,1.0625,1.5,1.759, 0,0,1,0.796875,3,1.759, 0,0,1,0.796875,1.5,1.759, 0,0,1,0.796875,3,1.759, 0,0,1,1.0625,1.5,1.759, 0,0,1,1.0625,3,1.759, -1,0,0,0,3,0, -1,0,0,0,2.795,0.205, -1,0,0,0,3,0.205, -1,0,0,0,3,2.277, -1,0,0,0,2.795,1.5, -1,0,0,0,2.795,2.277, -1,0,0,0,2.795,1.5, -1,0,0,0,3,2.277, -1,0,0,0,3,1.5, 0,1,0,0.205,3,3, 0,1,0,0.777,3,2.795, 0,1,0,0.205,3,2.795, 0,1,0,0.777,3,2.795, 0,1,0,0.205,3,3, 0,1,0,0.777,3,3, 0.57735,0.57735,0.57735,0.777,3,3, 0,0.83205,0.5547,0.205,3,3, 0,0,1,0.259,3,3, 0.57735,0.57735,0.57735,0.777,3,3, 0,0,1,0.259,3,3, 0,0,1,0.497732,3,3, 0.57735,0.57735,0.57735,0.777,3,3, 0,0,1,0.497732,3,3, 0,0,1,0.518,3,3, 0,1,0,0.53125,3,1.17375, 0,1,0,0.723,3,0.982, 0,1,0,0.53125,3,0.982, -1,0,0,0,1.5,1.5, -1,0,0,0,1.5,0.205, -1,0,0,0,0.205,0.205, -0.588348,0.784465,0.196116,0,1.5,0.205, -1,0,0,0,1.5,1.5, -0.408248,0.408248,-0.816497,0,1.5,0.723, 0,0,1,0.777,1.5,0.205, 0,0,1,0,2.795,0.205, 0,0,1,0,1.5,0.205, 0,0,1,0,2.795,0.205, 0,0,1,0.777,1.5,0.205, 0,0,1,0,3,0.205, 0,0,1,0,3,0.205, 0,0,1,0.777,1.5,0.205, 0,0,1,0.205,3,0.205, 0,0,1,0.205,3,0.205, 0,0,1,0.777,1.5,0.205, 0,0,1,0.777,3,0.205, 0,0,1,0.796875,1.5,2.018, 0,0,1,0.53125,3,2.018, 0,0,1,0.53125,1.5,2.018, 0,0,1,0.53125,3,2.018, 0,0,1,0.796875,1.5,2.018, 0,0,1,0.723,3,2.018, 0,0,1,0.723,3,2.018, 0,0,1,0.796875,1.5,2.018, 0,0,1,0.796875,3,2.018, -1,0,0,0,2.795,0.205, -1,0,0,0,1.5,0, -1,0,0,0,1.5,0.205, -1,0,0,0,1.5,0, -1,0,0,0,2.795,0.205, -1,0,0,0,2.12132,0, -1,0,0,0,2.12132,0, -1,0,0,0,2.795,0.205, -1,0,0,0,2.502268,0, -1,0,0,0,2.502268,0, -1,0,0,0,2.795,0.205, -1,0,0,0,2.795,0, 0,0,1,0.777,1.643814,3, 0,0,1,0,2.12132,3, 0,0,1,0,1.798369,3, 0,0,1,0,2.12132,3, 0,0,1,0.777,1.643814,3, 0,0,1,0.777,1.799476,3, 0,0,-1,0.777,1.799476,0, 0,0,-1,0,1.5,0, 0,0,-1,0,2.12132,0, 0,0,-1,0,1.5,0, 0,0,-1,0.777,1.799476,0, 0,0,-1,0.777,1.5,0, -1,0,0,0,0.205,0.205, -1,0,0,0,0,0, -1,0,0,0,0,0.205, 0,1,0,0.205,3,0, 0,1,0,0.777,3,0, 0,1,0,0.497732,3,0, 0,1,0,0.777,3,0, 0,1,0,0.205,3,0, 0,1,0,0.777,3,0.205, 0,1,0,0.777,3,0.205, 0,1,0,0.205,3,0, 0,1,0,0.205,3,0.205, -1,0,0,0,3,0, -1,0,0,0,2.795,0, -1,0,0,0,2.795,0.205, 0,0,-1,0.205,3,0, 0,0,-1,0.777,2.223,0, 0,0,-1,0,3,0, 0,0,-1,0.777,2.223,0, 0,0,-1,0.205,3,0, 0,0,-1,0.497732,3,0, 0,0,-1,0.777,2.223,0, 0,0,-1,0.497732,3,0, 0,0,-1,0.777,2.582046,0, 0,1,0,0.53125,3,1.82625, 0,1,0,0.53125,3,1.5, 0,1,0,0.205,3,1.5, 0,0,1,0.777,1.5,3, 0,0,1,0,1.798369,3, 0,0,1,0,1.5,3, 0,0,1,0,1.798369,3, 0,0,1,0.777,1.5,3, 0,0,1,0.777,1.643814,3, 0,1,0,0.723,3,2.018, 0,1,0,0.53125,3,1.82625, 0,1,0,0.53125,3,2.018, 0,1,0,0.53125,3,1.17375, 0,1,0,0.796875,3,0.982, 0,1,0,0.723,3,0.982, 0,1,0,0.796875,3,0.982, 0,1,0,0.53125,3,1.17375, 0,1,0,0.796875,3,1.241, 0,1,0,0.796875,3,1.241, 0,1,0,0.53125,3,1.17375, 0,1,0,0.53125,3,1.5, 0,1,0,0.796875,3,1.241, 0,1,0,0.53125,3,1.5, 0,1,0,0.796875,3,1.5, 0,0,-1,0.777,3,0, 0,0,-1,0.777,2.582046,0, 0,0,-1,0.497732,3,0, -1,0,0,0,1.5,3, -1,0,0,0,0.205,2.795, -1,0,0,0,0.205,3, -1,0,0,0,0.205,2.795, -1,0,0,0,1.5,3, -1,0,0,0,1.5,2.795, 0,0,-1,0.205,3,0.723, 0,0,-1,0,2.795,0.723, 0,0,-1,0,3,0.723, 0,0,-1,0,2.795,0.723, 0,0,-1,0.205,3,0.723, 0,0,-1,0,2.277,0.723, 0,0,-1,0,2.277,0.723, 0,0,-1,0.205,3,0.723, 0,0,-1,0,1.5,0.723, 0,0,-1,0,1.5,0.723, 0,0,-1,0.205,3,0.723, 0,0,-1,0.53125,1.5,0.723, 0,0,-1,0.53125,1.5,0.723, 0,0,-1,0.205,3,0.723, 0,0,-1,0.53125,3,0.723, -1,0,0,0,2.277,0.723, -1,0,0,0,1.5,0.723, -1,0,0,0,1.5,1.5, -1,0,0,0,3,3, -1,0,0,0,2.795,2.795, -1,0,0,0,2.795,3, 0,1,0,0.205,3,2.277, 0,1,0,0.53125,3,1.82625, 0,1,0,0.205,3,1.5, 0,1,0,0.53125,3,1.82625, 0,1,0,0.205,3,2.277, 0,1,0,0.53125,3,2.018, 0,1,0,0.53125,3,2.018, 0,1,0,0.205,3,2.277, 0,1,0,0.53125,3,2.277, 1,0,0,1.0625,3,1.241, 1,0,0,1.0625,1.5,1.759, 1,0,0,1.0625,1.5,1.241, 1,0,0,1.0625,1.5,1.759, 1,0,0,1.0625,3,1.241, 1,0,0,1.0625,3,1.759, 0.57735,0.57735,0.57735,1.0625,3,1.759, 0.57735,0.57735,-0.57735,1.0625,3,1.241, 0,1,0,1.0625,3,1.5, 0,1,0,0,3,2.277, 0,1,0,0.205,3,1.5, 0,1,0,0,3,1.5, 0,1,0,0.205,3,1.5, 0,1,0,0,3,2.277, 0,1,0,0.205,3,2.277, 1,0,0,0.777,1.799476,0, 1,0,0,0.777,1.5,0.205, 1,0,0,0.777,1.5,0, 1,0,0,0.777,1.5,0.205, 1,0,0,0.777,1.799476,0, 1,0,0,0.777,3,0.205, 1,0,0,0.777,3,0.205, 1,0,0,0.777,1.799476,0, 1,0,0,0.777,1.983093,0, 1,0,0,0.777,3,0.205, 1,0,0,0.777,1.983093,0, 1,0,0,0.777,2.223,0, 1,0,0,0.777,3,0.205, 1,0,0,0.777,2.223,0, 1,0,0,0.777,2.582046,0, 1,0,0,0.777,3,0.205, 1,0,0,0.777,2.582046,0, 1,0,0,0.777,3,0, 0,0,-1,0.777,2.223,0, 0,0,-1,0,2.795,0, 0,0,-1,0,3,0, 0,0,-1,0,2.795,0, 0,0,-1,0.777,2.223,0, 0,0,-1,0,2.502268,0, 0,0,-1,0,2.502268,0, 0,0,-1,0.777,2.223,0, 0,0,-1,0.777,1.983093,0, 0,1,0,0,3,0.205, 0,1,0,0.205,3,0, 0,1,0,0,3,0, 0,1,0,0.205,3,0, 0,1,0,0,3,0.205, 0,1,0,0.205,3,0.205, 0,0,1,0.777,2.223,3, 0,0,1,0.205,3,3, 0,0,1,0,3,3, 0,0,1,0.205,3,3, 0,0,1,0.777,2.223,3, 0,0,1,0.259,3,3, 0,0,1,0.259,3,3, 0,0,1,0.777,2.223,3, 0,0,1,0.497732,3,3, 0,0,1,0.497732,3,3, 0,0,1,0.777,2.223,3, 0,0,1,0.777,2.582046,3, -1,0,0,0,1.5,1.5, -1,0,0,0,0.205,1.5, -1,0,0,0,0.205,2.795, 0,1,0,0.53125,3,1.5, 0,1,0,0.53125,3,1.17375, 0,1,0,0.205,3,1.5, -1,0,0,0,2.277,2.277, -1,0,0,0,2.795,1.5, -1,0,0,0,1.5,1.5, -1,0,0,0,2.795,1.5, -1,0,0,0,2.277,2.277, -1,0,0,0,2.795,2.277, -1,0,0,0,0.205,0.205, -1,0,0,0,0.205,0, -1,0,0,0,0,0, 0,0,-1,1.0625,3,1.241, 0,0,-1,0.796875,1.5,1.241, 0,0,-1,0.796875,3,1.241, 0,0,-1,0.796875,1.5,1.241, 0,0,-1,1.0625,3,1.241, 0,0,-1,1.0625,1.5,1.241, -1,0,0,0,3,2.795, -1,0,0,0,2.795,2.795, -1,0,0,0,3,3, 0,0,1,0.777,2.582046,3, 0,0,1,0.518,3,3, 0,0,1,0.497732,3,3, 0,0,1,0.518,3,3, 0,0,1,0.777,2.582046,3, 0,0,1,0.777,3,3, -1,0,0,0,0.205,2.795, -1,0,0,0,0,2.795, -1,0,0,0,0,3, 0,1,0,0.796875,3,1.759, 0,1,0,1.0625,3,1.5, 0,1,0,0.796875,3,1.5, 0,1,0,1.0625,3,1.5, 0,1,0,0.796875,3,1.759, 0,1,0,1.0625,3,1.759, 0,1,0,0.796875,1.5,2.018, 0,1,0,1.0625,1.5,1.759, 0,1,0,0.796875,1.5,1.759, 0,1,0,0.53125,1.5,2.277, 0,1,0,0.796875,1.5,2.018, 0,1,0,0.53125,1.5,2.018, 0,1,0,0,1.5,2.795, 0,1,0,0.53125,1.5,2.277, 0,1,0,0,1.5,2.277, 0,1,0,0.777,1.5,0.205, 0,1,0,1.295,1.5,0, 0,1,0,0.777,1.5,0, 0,1,0,1.295,1.5,0, 0,1,0,0.777,1.5,0.205, 0,1,0,1.0625,1.5,1.241, 0,1,0,1.295,1.5,0, 0,1,0,1.0625,1.5,1.241, 0,1,0,1.295,1.5,3, 0,1,0,1.0625,1.5,1.241, 0,1,0,0.777,1.5,0.205, 0,1,0,0.796875,1.5,0.982, 0,1,0,0.796875,1.5,0.982, 0,1,0,0.777,1.5,0.205, 0,1,0,0,1.5,0.205, 0.218218,0.872872,-0.436436,0.796875,1.5,0.982, -0.588348,0.784465,0.196116,0,1.5,0.205, 0.333333,0.666667,-0.666667,0.53125,1.5,0.723, 0,1,0,0.53125,1.5,0.723, 0,1,0,0,1.5,0.205, 0,1,0,0,1.5,0.723, 0,1,0,0.796875,1.5,0.982, 0,1,0,0.53125,1.5,0.723, 0,1,0,0.53125,1.5,0.982, 0,1,0,1.0625,1.5,1.241, 0,1,0,0.796875,1.5,0.982, 0,1,0,0.796875,1.5,1.241, 0,1,0,1.295,1.5,3, 0,1,0,1.0625,1.5,1.241, 0,1,0,1.0625,1.5,1.759, 0,1,0,1.295,1.5,3, 0,1,0,1.0625,1.5,1.759, 0,1,0,0.796875,1.5,2.018, 0,1,0,1.295,1.5,3, 0,1,0,0.796875,1.5,2.018, 0,1,0,0.53125,1.5,2.277, 0,1,0,1.295,1.5,3, 0,1,0,0.53125,1.5,2.277, 0,1,0,0.777,1.5,2.795, 0,1,0,0.777,1.5,2.795, 0,1,0,0.53125,1.5,2.277, 0,1,0,0,1.5,2.795, 0,1,0,1.295,1.5,3, 0,1,0,0.777,1.5,2.795, 0,1,0,0.777,1.5,3, -1,0,0,0,2.795,1.5, -1,0,0,0,2.277,0.723, -1,0,0,0,1.5,1.5, -1,0,0,0,2.277,0.723, -1,0,0,0,2.795,1.5, -1,0,0,0,2.795,0.723, -1,0,0,0,2.277,2.277, -1,0,0,0,1.5,1.5, -1,0,0,0,1.5,2.277, -1,0,0,0,1.5,1.5, -1,0,0,0,0.205,0.205, -1,0,0,0,0.205,1.5, 0,0,1,1.295,0,3, 0,0,1,0,0.205,3, 0,0,1,0,0,3, 0,0,1,0,0.205,3, 0,0,1,1.295,0,3, 0,0,1,0,1.5,3, 0,0,1,0,1.5,3, 0,0,1,1.295,0,3, 0,0,1,0.777,1.5,3, 0,0,1,0.777,1.5,3, 0,0,1,1.295,0,3, 0,0,1,1.295,1.5,3, 0,1,0,0,1.5,3, 0,1,0,0.777,1.5,2.795, 0,1,0,0,1.5,2.795, 0,1,0,0.777,1.5,2.795, 0,1,0,0,1.5,3, 0,1,0,0.777,1.5,3, 0,0,-1,0.777,1.5,0, 0,0,-1,0,0.205,0, 0,0,-1,0,1.5,0, 0,0,-1,0,0.205,0, 0,0,-1,0.777,1.5,0, 0,0,-1,0,0,0, 0,0,-1,0,0,0, 0,0,-1,0.777,1.5,0, 0,0,-1,1.295,0,0, 0,0,-1,1.295,0,0, 0,0,-1,0.777,1.5,0, 0,0,-1,1.295,1.5,0, 0,1,0,0,1.5,0.205, 0,1,0,0.777,1.5,0, 0,1,0,0,1.5,0, 0,1,0,0.777,1.5,0, 0,1,0,0,1.5,0.205, 0,1,0,0.777,1.5,0.205 }; static const struct gllist lament_model_taser_a_frame = { GL_N3F_V3F, GL_TRIANGLES, 582, lament_model_taser_a_data, 0 }; const struct gllist *lament_model_taser_a = &lament_model_taser_a_frame; static const float lament_model_taser_b_data[] = { 0,0,1,0.868083,1.922233,3, 0,0,1,0.777,2.223,3, 0,0,1,0.777,1.983093,3, 0,0,1,0.777,2.223,3, 0,0,1,0.868083,1.922233,3, 0,0,1,0.912512,1.982139,3, 0,0,1,0.777,2.223,3, 0,0,1,0.912512,1.982139,3, 0,0,1,0.962599,2.037401,3, 0,0,-1,1.017861,2.087488,0, 0,0,-1,1.295,1.705,0, 0,0,-1,0.962599,2.037401,0, 0,0,-1,1.295,1.705,0, 0,0,-1,1.017861,2.087488,0, 0,0,-1,1.077767,2.131917,0, 0,0,-1,1.295,1.705,0, 0,0,-1,1.077767,2.131917,0, 0,0,-1,1.295,1.806804,0, -1,0,0,0,3,0.205, -1,0,0,0,1.5,0.205, -1,0,0,0,3,0.464, -1,0,0,0,3,0.723, -1,0,0,0,1.5,0.205, -1,0,0,0,1.5,0.723, -1,0,0,0,1.5,0.205, -1,0,0,0,3,0.723, -1,0,0,0,3,0.464, -1,0,0,0.53125,3,0.982, -0.989278,0,-0.146043,0.53125,1.5,0.723, -1,0,0,0.53125,1.5,0.982, -0.989278,0,-0.146043,0.53125,1.5,0.723, -1,0,0,0.53125,3,0.982, -0.956392,0,-0.292087,0.53125,3,0.723, 0,0,1,1.0625,1.5,1.241, 0,0,1,0.796875,3,1.241, 0,0,1,0.796875,1.5,1.241, 0,0,1,0.796875,3,1.241, 0,0,1,1.0625,1.5,1.241, 0,0,1,1.0625,3,1.241, 0,0,-1,1.0625,3,1.759, 0,0,-1,0.796875,1.5,1.759, 0,0,-1,0.796875,3,1.759, 0,0,-1,0.796875,1.5,1.759, 0,0,-1,1.0625,3,1.759, 0,0,-1,1.0625,1.5,1.759, -1,0,0,0.777,1.643814,3, -1,0,0,0.777,1.5,2.795, -1,0,0,0.777,1.5,3, -1,0,0,0.777,1.5,2.795, -1,0,0,0.777,1.643814,3, -1,0,0,0.777,3,2.795, -1,0,0,0.777,3,2.795, -1,0,0,0.777,1.643814,3, -1,0,0,0.777,1.732563,3, -1,0,0,0.777,3,2.795, -1,0,0,0.777,1.732563,3, -1,0,0,0.777,1.799476,3, -1,0,0,0.777,3,2.795, -1,0,0,0.777,1.799476,3, -1,0,0,0.777,1.983093,3, -1,0,0,0.777,3,2.795, -1,0,0,0.777,1.983093,3, -1,0,0,0.777,2.223,3, -1,0,0,0.777,3,2.795, -1,0,0,0.777,2.223,3, -1,0,0,0.777,2.582046,3, -1,0,0,0.777,3,2.795, -1,0,0,0.777,2.582046,3, -1,0,0,0.777,3,3, -1,0,0,0.53125,3,2.277, -1,0,0,0.53125,1.5,2.018, -1,0,0,0.53125,1.5,2.277, -1,0,0,0.53125,1.5,2.018, -1,0,0,0.53125,3,2.277, -1,0,0,0.53125,3,2.018, -1,0,0,0.796875,3,1.241, -1,0,0,0.796875,1.5,0.982, -1,0,0,0.796875,1.5,1.241, -1,0,0,0.796875,1.5,0.982, -1,0,0,0.796875,3,1.241, -1,0,0,0.796875,3,0.982, -1,0,0,1.0625,3,1.759, -1,0,0,1.0625,1.5,1.5, -1,0,0,1.0625,1.5,1.759, -1,0,0,1.0625,1.5,1.5, -1,0,0,1.0625,3,1.759, -1,0,0,1.0625,1.5,1.241, -1,0,0,1.0625,1.5,1.241, -1,0,0,1.0625,3,1.759, -1,0,0,1.0625,3,1.241, -0.301511,0.904534,0.301511,1.0625,3,1.241, -0.639602,0.639602,-0.426401,1.0625,3,1.759, 0,1,0,1.0625,3,1.5, -1,0,0,0.796875,3,2.018, -1,0,0,0.796875,1.5,1.759, -1,0,0,0.796875,1.5,2.018, -1,0,0,0.796875,1.5,1.759, -1,0,0,0.796875,3,2.018, -1,0,0,0.796875,3,1.759, 0,0,-1,0.723,3,2.018, 0,0,-1,0.53125,1.5,2.018, 0,0,-1,0.53125,3,2.018, 0,0,-1,0.53125,1.5,2.018, 0,0,-1,0.723,3,2.018, 0,0,-1,0.796875,1.5,2.018, 0,0,-1,0.796875,1.5,2.018, 0,0,-1,0.723,3,2.018, 0,0,-1,0.796875,3,2.018, -1,0,0,0,3,2.795, -1,0,0,0,1.5,2.277, -1,0,0,0,1.5,2.795, -1,0,0,0,1.5,2.277, -1,0,0,0,3,2.795, -1,0,0,0,3,2.277, -0.57735,0.57735,-0.57735,0,3,2.277, -0.666667,0.333333,0.666667,0,3,2.795, 0,1,0,0,3,2.536, 0,0,1,0.796875,1.5,0.982, 0,0,1,0.53125,3,0.982, 0,0,1,0.53125,1.5,0.982, 0,0,1,0.53125,3,0.982, 0,0,1,0.796875,1.5,0.982, 0,0,1,0.723,3,0.982, 0,0,1,0.723,3,0.982, 0,0,1,0.796875,1.5,0.982, 0,0,1,0.796875,3,0.982, 0,0,-1,0.912512,1.982139,0, 0,0,-1,1.295,1.636977,0, 0,0,-1,0.868083,1.922233,0, 0,0,-1,1.295,1.636977,0, 0,0,-1,0.912512,1.982139,0, 0,0,-1,0.962599,2.037401,0, 0,0,-1,1.295,1.636977,0, 0,0,-1,0.962599,2.037401,0, 0,0,-1,1.295,1.705,0, 0,0,-1,1.279384,2.227275,0, 0,0,-1,1.295,1.994914,0, 0,0,-1,1.209161,2.202148,0, 0,0,-1,1.295,1.994914,0, 0,0,-1,1.279384,2.227275,0, 0,0,-1,1.295,2.231186,0, 0,0,-1,1.141738,2.17026,0, 0,0,-1,1.295,1.806804,0, 0,0,-1,1.077767,2.131917,0, 0,0,-1,1.295,1.806804,0, 0,0,-1,1.141738,2.17026,0, 0,0,-1,1.209161,2.202148,0, 0,0,-1,1.295,1.806804,0, 0,0,-1,1.209161,2.202148,0, 0,0,-1,1.295,1.994914,0, 0,0,-1,0.82974,1.858262,0, 0,0,-1,1.295,1.584914,0, 0,0,-1,0.797852,1.790839,0, 0,0,-1,1.295,1.584914,0, 0,0,-1,0.82974,1.858262,0, 0,0,-1,0.868083,1.922233,0, 0,0,-1,1.295,1.584914,0, 0,0,-1,0.868083,1.922233,0, 0,0,-1,1.295,1.636977,0, 0,0,-1,1.295,1.540777,0, 0,0,-1,0.777,1.5,0, 0,0,-1,0.777,1.643814,0, 0,0,-1,0.777,1.5,0, 0,0,-1,1.295,1.540777,0, 0,0,-1,1.295,1.5,0, 0,0,-1,0.797852,1.790839,0, 0,0,-1,0.777,1.643814,0, 0,0,-1,0.777,1.732563,0, 0,0,-1,0.777,1.643814,0, 0,0,-1,0.797852,1.790839,0, 0,0,-1,1.295,1.540777,0, 0,0,-1,1.295,1.540777,0, 0,0,-1,0.797852,1.790839,0, 0,0,-1,1.295,1.584914,0, 0,0,-1,1.295,2.530605,0, 0,0,-1,1.201631,3,0, 0,0,-1,1.295,3,0, 0,0,-1,1.201631,3,0, 0,0,-1,1.209161,2.202148,0, 0,0,-1,0.87868,3,0, 0,0,-1,1.209161,2.202148,0, 0,0,-1,1.201631,3,0, 0,0,-1,1.295,2.530605,0, 0,0,-1,1.209161,2.202148,0, 0,0,-1,1.295,2.530605,0, 0,0,-1,1.279384,2.227275,0, 0,0,-1,1.279384,2.227275,0, 0,0,-1,1.295,2.530605,0, 0,0,-1,1.295,2.231186,0, 0,0,-1,0.777,3,0, 0,0,-1,1.077767,2.131917,0, 0,0,-1,0.777,2.582046,0, 0,0,-1,1.077767,2.131917,0, 0,0,-1,0.777,3,0, 0,0,-1,0.87868,3,0, 0,0,-1,1.077767,2.131917,0, 0,0,-1,0.87868,3,0, 0,0,-1,1.141738,2.17026,0, 0,0,-1,1.141738,2.17026,0, 0,0,-1,0.87868,3,0, 0,0,-1,1.209161,2.202148,0, 0,0,-1,0.868083,1.922233,0, 0,0,-1,0.777,1.799476,0, 0,0,-1,0.777,1.983093,0, 0,0,-1,0.777,1.799476,0, 0,0,-1,0.868083,1.922233,0, 0,0,-1,0.82974,1.858262,0, 0,0,-1,0.777,1.799476,0, 0,0,-1,0.82974,1.858262,0, 0,0,-1,0.797852,1.790839,0, 0,0,-1,0.962599,2.037401,0, 0,0,-1,0.777,1.983093,0, 0,0,-1,0.777,2.223,0, 0,0,-1,0.777,1.983093,0, 0,0,-1,0.962599,2.037401,0, 0,0,-1,0.912512,1.982139,0, 0,0,-1,0.777,1.983093,0, 0,0,-1,0.912512,1.982139,0, 0,0,-1,0.868083,1.922233,0, 0,0,-1,1.077767,2.131917,0, 0,0,-1,0.777,2.223,0, 0,0,-1,0.777,2.582046,0, 0,0,-1,0.777,2.223,0, 0,0,-1,1.077767,2.131917,0, 0,0,-1,1.017861,2.087488,0, 0,0,-1,0.777,2.223,0, 0,0,-1,1.017861,2.087488,0, 0,0,-1,0.962599,2.037401,0, 0,0,-1,0.797852,1.790839,0, 0,0,-1,0.777,1.732563,0, 0,0,-1,0.777,1.799476,0, 0,0,1,0.962599,2.037401,3, 0,0,1,0.777,2.582046,3, 0,0,1,0.777,2.223,3, 0,0,1,0.777,2.582046,3, 0,0,1,0.962599,2.037401,3, 0,0,1,1.017861,2.087488,3, 0,0,1,0.777,2.582046,3, 0,0,1,1.017861,2.087488,3, 0,0,1,1.077767,2.131917,3, 0,0,1,0.797852,1.790839,3, 0,0,1,0.777,1.983093,3, 0,0,1,0.777,1.799476,3, 0,0,1,0.777,1.983093,3, 0,0,1,0.797852,1.790839,3, 0,0,1,0.82974,1.858262,3, 0,0,1,0.777,1.983093,3, 0,0,1,0.82974,1.858262,3, 0,0,1,0.868083,1.922233,3, 0,0,1,1.295,1.5,3, 0,0,1,0.777,1.643814,3, 0,0,1,0.777,1.5,3, 0,0,1,0.777,1.643814,3, 0,0,1,1.295,1.5,3, 0,0,1,1.295,1.540777,3, 0,0,1,1.077767,2.131917,3, 0,0,1,0.777,3,3, 0,0,1,0.777,2.582046,3, 0,0,1,0.777,3,3, 0,0,1,1.077767,2.131917,3, 0,0,1,0.87868,3,3, 0,0,1,0.87868,3,3, 0,0,1,1.077767,2.131917,3, 0,0,1,1.141738,2.17026,3, 0,0,1,0.87868,3,3, 0,0,1,1.141738,2.17026,3, 0,0,1,1.209161,2.202148,3, 0,0,1,1.295,3,3, 0,0,1,1.201631,3,3, 0,0,1,1.295,2.530605,3, 0,0,1,1.295,1.705,3, 0,0,1,1.017861,2.087488,3, 0,0,1,0.962599,2.037401,3, 0,0,1,1.017861,2.087488,3, 0,0,1,1.295,1.705,3, 0,0,1,1.077767,2.131917,3, 0,0,1,1.077767,2.131917,3, 0,0,1,1.295,1.705,3, 0,0,1,1.295,1.806804,3, 0,0,1,1.295,1.636977,3, 0,0,1,0.912512,1.982139,3, 0,0,1,0.868083,1.922233,3, 0,0,1,0.912512,1.982139,3, 0,0,1,1.295,1.636977,3, 0,0,1,0.962599,2.037401,3, 0,0,1,0.962599,2.037401,3, 0,0,1,1.295,1.636977,3, 0,0,1,1.295,1.705,3, 0,0,1,1.295,1.806804,3, 0,0,1,1.141738,2.17026,3, 0,0,1,1.077767,2.131917,3, 0,0,1,1.141738,2.17026,3, 0,0,1,1.295,1.806804,3, 0,0,1,1.209161,2.202148,3, 0,0,1,1.209161,2.202148,3, 0,0,1,1.295,1.806804,3, 0,0,1,1.295,1.994914,3, 0,0,1,1.295,1.584914,3, 0,0,1,0.82974,1.858262,3, 0,0,1,0.797852,1.790839,3, 0,0,1,0.82974,1.858262,3, 0,0,1,1.295,1.584914,3, 0,0,1,0.868083,1.922233,3, 0,0,1,0.868083,1.922233,3, 0,0,1,1.295,1.584914,3, 0,0,1,1.295,1.636977,3, 0,0,1,1.209161,2.202148,3, 0,0,1,1.036,3,3, 0,0,1,0.87868,3,3, 0,0,1,1.036,3,3, 0,0,1,1.209161,2.202148,3, 0,0,1,1.201631,3,3, 0,0,1,1.201631,3,3, 0,0,1,1.209161,2.202148,3, 0,0,1,1.295,2.530605,3, 0,0,1,1.295,2.530605,3, 0,0,1,1.209161,2.202148,3, 0,0,1,1.279384,2.227275,3, 0,0,1,1.295,2.530605,3, 0,0,1,1.279384,2.227275,3, 0,0,1,1.295,2.231186,3, 0,0,1,1.295,1.994914,3, 0,0,1,1.279384,2.227275,3, 0,0,1,1.209161,2.202148,3, 0,0,1,1.279384,2.227275,3, 0,0,1,1.295,1.994914,3, 0,0,1,1.295,2.231186,3, 0,0,1,1.295,1.540777,3, 0,0,1,0.777,1.732563,3, 0,0,1,0.777,1.643814,3, 0,0,1,0.777,1.732563,3, 0,0,1,1.295,1.540777,3, 0,0,1,0.797852,1.790839,3, 0,0,1,0.797852,1.790839,3, 0,0,1,1.295,1.540777,3, 0,0,1,1.295,1.584914,3, 0,0,1,0.797852,1.790839,3, 0,0,1,0.777,1.799476,3, 0,0,1,0.777,1.732563,3, 0,0,1,0.777,1.5,2.795, 0,0,1,0,3,2.795, 0,0,1,0,1.5,2.795, 0,0,1,0,3,2.795, 0,0,1,0.777,1.5,2.795, 0,0,1,0.205,3,2.795, 0,0,1,0.205,3,2.795, 0,0,1,0.777,1.5,2.795, 0,0,1,0.777,3,2.795, 0,0,-1,0.205,3,2.277, 0,0,-1,0,1.5,2.277, 0,0,-1,0,3,2.277, 0,0,-1,0,1.5,2.277, 0,0,-1,0.205,3,2.277, 0,0,-1,0.53125,1.5,2.277, 0,0,-1,0.53125,1.5,2.277, 0,0,-1,0.205,3,2.277, 0,0,-1,0.53125,3,2.277, 0,0,1,0.53125,1.5,0.723, 0,0,1,0,3,0.723, 0,0,1,0,1.5,0.723, 0,0,1,0,3,0.723, 0,0,1,0.53125,1.5,0.723, 0,0,1,0.205,3,0.723, 0,0,1,0.205,3,0.723, 0,0,1,0.53125,1.5,0.723, 0,0,1,0.53125,3,0.723, -0.998843,0,-0.048086,0.777,3,0.205, -1,0,0,0.777,1.5,0, -0.956392,0,-0.292087,0.777,1.5,0.205, -1,0,0,0.777,1.5,0, -0.998843,0,-0.048086,0.777,3,0.205, -1,0,0,0.777,1.643814,0, -1,0,0,0.777,1.643814,0, -0.998843,0,-0.048086,0.777,3,0.205, -1,0,0,0.777,1.732563,0, -1,0,0,0.777,1.732563,0, -0.998843,0,-0.048086,0.777,3,0.205, -1,0,0,0.777,1.799476,0, -1,0,0,0.777,1.799476,0, -0.998843,0,-0.048086,0.777,3,0.205, -1,0,0,0.777,1.983093,0, -1,0,0,0.777,1.983093,0, -0.998843,0,-0.048086,0.777,3,0.205, -1,0,0,0.777,2.223,0, -1,0,0,0.777,2.223,0, -0.998843,0,-0.048086,0.777,3,0.205, -1,0,0,0.777,2.582046,0, -1,0,0,0.777,2.582046,0, -0.998843,0,-0.048086,0.777,3,0.205, -1,0,0,0.777,3,0, 0,0,-1,0.205,3,0.205, 0,0,-1,0,1.5,0.205, 0,0,-1,0,3,0.205, 0,0,-1,0,1.5,0.205, 0,0,-1,0.205,3,0.205, 0,0,-1,0.777,1.5,0.205, 0,0,-1,0.777,1.5,0.205, 0,0,-1,0.205,3,0.205, 0,0,-1,0.777,3,0.205, 0.707107,0,-0.707107,1.5,3,0.205, 0.707107,0,-0.707107,1.295,2.530605,0, 0.707107,0,-0.707107,1.295,3,0, 0.707107,0,-0.707107,1.295,2.530605,0, 0.707107,0,-0.707107,1.5,3,0.205, 0.707107,0,-0.707107,1.295,2.231186,0, 0.707107,0,-0.707107,1.295,2.231186,0, 0.707107,0,-0.707107,1.5,3,0.205, 0.707107,0,-0.707107,1.295,1.994914,0, 0.707107,0,-0.707107,1.295,1.994914,0, 0.707107,0,-0.707107,1.5,3,0.205, 0.707107,0,-0.707107,1.295,1.806804,0, 0.707107,0,-0.707107,1.295,1.806804,0, 0.707107,0,-0.707107,1.5,3,0.205, 0.707107,0,-0.707107,1.295,1.705,0, 0.707107,0,-0.707107,1.295,1.705,0, 0.707107,0,-0.707107,1.5,3,0.205, 0.707107,0,-0.707107,1.295,1.636977,0, 0.707107,0,-0.707107,1.295,1.636977,0, 0.707107,0,-0.707107,1.5,3,0.205, 0.707107,0,-0.707107,1.295,1.584914,0, 0.707107,0,-0.707107,1.295,1.584914,0, 0.707107,0,-0.707107,1.5,3,0.205, 0.707107,0,-0.707107,1.295,1.540777,0, 0.707107,0,-0.707107,1.295,1.540777,0, 0.707107,0,-0.707107,1.5,3,0.205, 0.707107,0,-0.707107,1.295,1.5,0, 0.707107,0,-0.707107,1.295,1.5,0, 0.707107,0,-0.707107,1.5,3,0.205, 0.707107,0,-0.707107,2.1475,1.5,0.8525, 0.707107,0,-0.707107,2.1475,1.5,0.8525, 0.707107,0,-0.707107,1.5,3,0.205, 0.707107,0,-0.707107,2.1475,3,0.8525, 1,0,0,2.1475,3,0.8525, 1,0,0,2.1475,1.5,1.284167, 1,0,0,2.1475,1.5,0.8525, 1,0,0,2.1475,1.5,1.284167, 1,0,0,2.1475,3,0.8525, 1,0,0,2.1475,3,1.284167, -0.707107,0,-0.707107,2.1475,3,1.715833, -0.707107,0,-0.707107,1.715833,1.5,2.1475, -0.707107,0,-0.707107,1.715833,3,2.1475, -0.707107,0,-0.707107,1.715833,1.5,2.1475, -0.707107,0,-0.707107,2.1475,3,1.715833, -0.707107,0,-0.707107,2.1475,1.5,1.715833, 1,0,0,2.1475,3,1.715833, 1,0,0,2.1475,1.5,2.1475, 1,0,0,2.1475,1.5,1.715833, 1,0,0,2.1475,1.5,2.1475, 1,0,0,2.1475,3,1.715833, 1,0,0,2.1475,3,2.1475, 0.707107,0,0.707107,2.1475,3,2.1475, 0.707107,0,0.707107,1.295,1.5,3, 0.707107,0,0.707107,2.1475,1.5,2.1475, 0.707107,0,0.707107,1.295,1.5,3, 0.707107,0,0.707107,2.1475,3,2.1475, 0.707107,0,0.707107,1.295,1.540777,3, 0.707107,0,0.707107,1.295,1.540777,3, 0.707107,0,0.707107,2.1475,3,2.1475, 0.707107,0,0.707107,1.295,1.584914,3, 0.707107,0,0.707107,1.295,1.584914,3, 0.707107,0,0.707107,2.1475,3,2.1475, 0.707107,0,0.707107,1.295,1.636977,3, 0.707107,0,0.707107,1.295,1.636977,3, 0.707107,0,0.707107,2.1475,3,2.1475, 0.707107,0,0.707107,1.295,1.705,3, 0.707107,0,0.707107,1.295,1.705,3, 0.707107,0,0.707107,2.1475,3,2.1475, 0.707107,0,0.707107,1.295,1.806804,3, 0.707107,0,0.707107,1.295,1.806804,3, 0.707107,0,0.707107,2.1475,3,2.1475, 0.707107,0,0.707107,1.295,1.994914,3, 0.707107,0,0.707107,1.295,1.994914,3, 0.707107,0,0.707107,2.1475,3,2.1475, 0.707107,0,0.707107,1.295,2.231186,3, 0.707107,0,0.707107,1.295,2.231186,3, 0.707107,0,0.707107,2.1475,3,2.1475, 0.707107,0,0.707107,1.295,2.530605,3, 0.707107,0,0.707107,1.295,2.530605,3, 0.707107,0,0.707107,2.1475,3,2.1475, 0.707107,0,0.707107,1.295,3,3, 0.259688,0.73451,0.626943,1.295,3,3, 0.828694,0.205349,0.52067,2.1475,3,2.1475, 0,1,0,1.5,3,2.795, 1,0,0,1.5,3,1.5, 1,0,0,1.5,1.5,1.812191, 1,0,0,1.5,1.5,1.5, 1,0,0,1.5,1.5,1.812191, 1,0,0,1.5,3,1.5, 1,0,0,1.5,3,1.812191, 0,1,0,1.607917,3,1.979845, 0,1,0,1.508856,3,1.812374, 0,1,0,1.5,3,1.812191, 0,1,0,1.705014,3,1.73585, 0,1,0,1.607917,3,1.979845, 0,1,0,1.715833,3,1.725471, 0,1,0,1.607917,3,1.979845, 0,1,0,1.705014,3,1.73585, 0,1,0,1.68091,3,1.75481, 0,1,0,1.607917,3,1.979845, 0,1,0,1.68091,3,1.75481, 0,1,0,1.655063,3,1.771315, 0,1,0,1.607917,3,1.979845, 0,1,0,1.655063,3,1.771315, 0,1,0,1.627723,3,1.785207, 0,1,0,1.607917,3,1.979845, 0,1,0,1.627723,3,1.785207, 0,1,0,1.599152,3,1.796353, 0,1,0,1.607917,3,1.979845, 0,1,0,1.599152,3,1.796353, 0,1,0,1.569627,3,1.804645, 0,1,0,1.607917,3,1.979845, 0,1,0,1.569627,3,1.804645, 0,1,0,1.539432,3,1.810002, 0,1,0,1.607917,3,1.979845, 0,1,0,1.539432,3,1.810002, 0,1,0,1.508856,3,1.812374, 0,-1,0,1.5,1.5,1.812191, 0,-1,0,1.0625,1.5,1.5, 0,-1,0,1.5,1.5,1.5, 0,-1,0,1.0625,1.5,1.5, 0,-1,0,1.5,1.5,1.812191, 0,-1,0,1.0625,1.5,1.759, 0,-1,0,0,1.5,2.795, 0,-1,0,0,1.5,2.277, 0,-1,0,0.53125,1.5,2.277, 0,-1,0,0,1.5,2.795, 0,-1,0,0.53125,1.5,2.277, 0,-1,0,0.777,1.5,2.795, 0,-1,0,0.777,1.5,2.795, 0,-1,0,0.53125,1.5,2.018, 0,-1,0,0.796875,1.5,2.018, 0,-1,0,0.53125,1.5,2.018, 0,-1,0,0.777,1.5,2.795, 0,-1,0,0.53125,1.5,2.277, 0,-1,0,1.715833,1.5,2.1475, 0,-1,0,2.1475,1.5,1.715833, 0,-1,0,2.1475,1.5,2.1475, 0,-1,0,1.295,1.5,3, 0,-1,0,1.715833,1.5,2.1475, 0,-1,0,2.1475,1.5,2.1475, 0,-1,0,1.295,1.5,3, 0,-1,0,0.777,1.5,2.795, 0,-1,0,1.715833,1.5,2.1475, 0,-1,0,0.777,1.5,2.795, 0,-1,0,1.295,1.5,3, 0,-1,0,0.777,1.5,3, 0,-1,0,1.715833,1.5,2.1475, 0,-1,0,0.796875,1.5,2.018, 0,-1,0,0.796875,1.5,1.759, 0,-1,0,0.796875,1.5,2.018, 0,-1,0,1.715833,1.5,2.1475, 0,-1,0,0.777,1.5,2.795, 0,-1,0,1.5,1.5,1.812191, 0,-1,0,0.796875,1.5,1.759, 0,-1,0,1.0625,1.5,1.759, 0,-1,0,0.796875,1.5,1.759, 0,-1,0,1.5,1.5,1.812191, 0,-1,0,1.715833,1.5,2.1475, 0,-1,0,0,1.5,0.723, 0,-1,0,0,1.5,0.205, 0,-1,0,0.53125,1.5,0.723, 0,-1,0,0.53125,1.5,0.723, 0,-1,0,0,1.5,0.205, 0,-1,0,0.777,1.5,0.205, 0,-1,0,0.796875,1.5,0.982, 0,-1,0,0.53125,1.5,0.723, 0,-1,0,0.777,1.5,0.205, 0,-1,0,0.53125,1.5,0.723, 0,-1,0,0.796875,1.5,0.982, 0,-1,0,0.53125,1.5,0.982, 0,-1,0,2.1475,1.5,1.284167, 0,-1,0,1.715833,1.5,0.8525, 0,-1,0,2.1475,1.5,0.8525, 0,-1,0,1.715833,1.5,0.8525, 0,-1,0,1.295,1.5,0, 0,-1,0,2.1475,1.5,0.8525, 0,-1,0,1.715833,1.5,0.8525, 0,-1,0,0.777,1.5,0, 0,-1,0,1.295,1.5,0, 0,-1,0,1.715833,1.5,0.8525, 0,-1,0,0.777,1.5,0.205, 0,-1,0,0.777,1.5,0, 0,-1,0,0.777,1.5,0.205, 0,-1,0,1.715833,1.5,0.8525, 0,-1,0,0.796875,1.5,0.982, 0,-1,0,0.796875,1.5,0.982, 0,-1,0,1.715833,1.5,0.8525, 0,-1,0,0.796875,1.5,1.241, 0,-1,0,1.5,1.5,1.187809, 0,-1,0,0.796875,1.5,1.241, 0,-1,0,1.715833,1.5,0.8525, 0,-1,0,0.796875,1.5,1.241, 0,-1,0,1.5,1.5,1.187809, 0,-1,0,1.0625,1.5,1.241, 1,0,0,1.715833,3,1.725471, 1,0,0,1.715833,1.5,2.1475, 1,0,0,1.715833,1.5,1.725471, 1,0,0,1.715833,1.5,2.1475, 1,0,0,1.715833,3,1.725471, 1,0,0,1.715833,3,2.1475, -0.011969,0,-0.999928,1.508856,3,1.812374, 0.020743,0,-0.999785,1.5,1.5,1.812191, 0.020743,0,-0.999785,1.5,3,1.812191, 0.020743,0,-0.999785,1.5,1.5,1.812191, -0.011969,0,-0.999928,1.508856,3,1.812374, -0.044703,0,-0.999,1.508856,1.5,1.812374, -0.692287,0,-0.721622,1.715833,3,1.725471, -0.668315,0,-0.743879,1.705014,1.5,1.73585, -0.6436,0,-0.765362,1.705014,3,1.73585, -0.668315,0,-0.743879,1.705014,1.5,1.73585, -0.692287,0,-0.721622,1.715833,3,1.725471, -0.692287,0,-0.721622,1.715833,1.5,1.725471, -0.6436,0,-0.765362,1.705014,3,1.73585, -0.592184,0,-0.805803,1.68091,1.5,1.75481, -0.565482,0,-0.824761,1.68091,3,1.75481, -0.592184,0,-0.805803,1.68091,1.5,1.75481, -0.6436,0,-0.765362,1.705014,3,1.73585, -0.668315,0,-0.743879,1.705014,1.5,1.73585, -0.565482,0,-0.824761,1.68091,3,1.75481, -0.51035,0,-0.859967,1.655063,1.5,1.771315, -0.481919,0,-0.876216,1.655063,3,1.771315, -0.51035,0,-0.859967,1.655063,1.5,1.771315, -0.565482,0,-0.824761,1.68091,3,1.75481, -0.592184,0,-0.805803,1.68091,1.5,1.75481, -0.481919,0,-0.876216,1.655063,3,1.771315, -0.423601,0,-0.905849,1.627723,1.5,1.785207, -0.393714,0,-0.919233,1.627723,3,1.785207, -0.423601,0,-0.905849,1.627723,1.5,1.785207, -0.481919,0,-0.876216,1.655063,3,1.771315, -0.51035,0,-0.859967,1.655063,1.5,1.771315, -0.393714,0,-0.919233,1.627723,3,1.785207, -0.332772,0,-0.943007,1.599152,1.5,1.796353, -0.301717,0,-0.953397,1.599152,3,1.796353, -0.332772,0,-0.943007,1.599152,1.5,1.796353, -0.393714,0,-0.919233,1.627723,3,1.785207, -0.423601,0,-0.905849,1.627723,1.5,1.785207, -0.301717,0,-0.953397,1.599152,3,1.796353, -0.238739,0,-0.971084,1.569627,1.5,1.804645, -0.206815,0,-0.97838,1.569627,3,1.804645, -0.238739,0,-0.971084,1.569627,1.5,1.804645, -0.301717,0,-0.953397,1.599152,3,1.796353, -0.332772,0,-0.943007,1.599152,1.5,1.796353, -0.206815,0,-0.97838,1.569627,3,1.804645, -0.142406,0,-0.989808,1.539432,1.5,1.810002, -0.109921,0,-0.99394,1.539432,3,1.810002, -0.142406,0,-0.989808,1.539432,1.5,1.810002, -0.206815,0,-0.97838,1.569627,3,1.804645, -0.238739,0,-0.971084,1.569627,1.5,1.804645, -0.109921,0,-0.99394,1.539432,3,1.810002, -0.044703,0,-0.999,1.508856,1.5,1.812374, -0.011969,0,-0.999928,1.508856,3,1.812374, -0.044703,0,-0.999,1.508856,1.5,1.812374, -0.109921,0,-0.99394,1.539432,3,1.810002, -0.142406,0,-0.989808,1.539432,1.5,1.810002, 0,0,1,1.036,3,3, 0,0,1,1.201631,3,3, 0,0,1,0.87868,3,3, 0,1,0,0.777,3,2.795, 0,1,0,1.295,3,3, 0,1,0,1.5,3,2.795, 0,1,0,1.295,3,3, 0,1,0,0.777,3,2.795, 0,1,0,0.777,3,3, 0.259688,0.73451,0.626943,1.295,3,3, -0.408248,0.408248,0.816497,0.777,3,3, 0,0,1,0.87868,3,3, 0.259688,0.73451,0.626943,1.295,3,3, 0,0,1,0.87868,3,3, 0,0,1,1.201631,3,3, 0.840862,0,-0.54125,1.5,3,1.812191, 0.840862,0,-0.54125,1.715833,1.5,2.1475, 0.840862,0,-0.54125,1.5,1.5,1.812191, 0.840862,0,-0.54125,1.715833,1.5,2.1475, 0.840862,0,-0.54125,1.5,3,1.812191, 0.840862,0,-0.54125,1.715833,3,2.1475, 0,-1,0,1.715833,3,2.1475, 0,-1,0,1.5,3,1.812191, 0,-1,0,1.607917,3,1.979845, 0,1,0,1.607917,3,1.020155, 0,1,0,1.691322,3,1.252913, 0,1,0,1.71462,3,1.272856, 0,1,0,1.691322,3,1.252913, 0,1,0,1.607917,3,1.020155, 0,1,0,1.666182,3,1.23535, 0,1,0,1.666182,3,1.23535, 0,1,0,1.607917,3,1.020155, 0,1,0,1.639442,3,1.220336, 0,1,0,1.639442,3,1.220336, 0,1,0,1.607917,3,1.020155, 0,1,0,1.611359,3,1.208015, 0,1,0,1.611359,3,1.208015, 0,1,0,1.607917,3,1.020155, 0,1,0,1.582203,3,1.198505, 0,1,0,1.582203,3,1.198505, 0,1,0,1.607917,3,1.020155, 0,1,0,1.552255,3,1.1919, 0,1,0,1.552255,3,1.1919, 0,1,0,1.607917,3,1.020155, 0,1,0,1.521805,3,1.188262, 0,1,0,1.521805,3,1.188262, 0,1,0,1.607917,3,1.020155, 0,1,0,1.5,3,1.187809, 0.840862,0,0.54125,1.715833,3,0.8525, 0.840862,0,0.54125,1.5,1.5,1.187809, 0.840862,0,0.54125,1.715833,1.5,0.8525, 0.840862,0,0.54125,1.5,1.5,1.187809, 0.840862,0,0.54125,1.715833,3,0.8525, 0.840862,0,0.54125,1.5,3,1.187809, 0,-1,0,1.5,3,1.187809, 0,-1,0,1.715833,3,0.8525, 0,-1,0,1.607917,3,1.020155, 1,0,0,1.715833,3,0.8525, 1,0,0,1.715833,1.5,1.274121, 1,0,0,1.715833,1.5,0.8525, 1,0,0,1.715833,1.5,1.274121, 1,0,0,1.715833,3,0.8525, 1,0,0,1.715833,3,1.274121, -0.053432,0,0.998571,1.521805,1.5,1.188262, -0.020743,0,0.999785,1.5,3,1.187809, -0.020743,0,0.999785,1.5,1.5,1.187809, -0.020743,0,0.999785,1.5,3,1.187809, -0.053432,0,0.998571,1.521805,1.5,1.188262, -0.086099,0,0.996287,1.521805,3,1.188262, -0.151052,0,0.988526,1.552255,1.5,1.1919, -0.086099,0,0.996287,1.521805,3,1.188262, -0.053432,0,0.998571,1.521805,1.5,1.188262, -0.086099,0,0.996287,1.521805,3,1.188262, -0.151052,0,0.988526,1.552255,1.5,1.1919, -0.183337,0,0.98305,1.552255,3,1.1919, -0.247217,0,0.96896,1.582203,1.5,1.198505, -0.183337,0,0.98305,1.552255,3,1.1919, -0.151052,0,0.988526,1.552255,1.5,1.1919, -0.183337,0,0.98305,1.552255,3,1.1919, -0.247217,0,0.96896,1.582203,1.5,1.198505, -0.27881,0,0.960346,1.582203,3,1.198505, -0.341001,0,0.940063,1.611359,1.5,1.208015, -0.27881,0,0.960346,1.582203,3,1.198505, -0.247217,0,0.96896,1.582203,1.5,1.198505, -0.27881,0,0.960346,1.582203,3,1.198505, -0.341001,0,0.940063,1.611359,1.5,1.208015, -0.371598,0,0.928394,1.611359,3,1.208015, -0.431501,0,0.902112,1.639442,1.5,1.220336, -0.371598,0,0.928394,1.611359,3,1.208015, -0.341001,0,0.940063,1.611359,1.5,1.208015, -0.371598,0,0.928394,1.611359,3,1.208015, -0.431501,0,0.902112,1.639442,1.5,1.220336, -0.460807,0,0.8875,1.639442,3,1.220336, -0.517846,0,0.855474,1.666182,1.5,1.23535, -0.460807,0,0.8875,1.639442,3,1.220336, -0.431501,0,0.902112,1.639442,1.5,1.220336, -0.460807,0,0.8875,1.639442,3,1.220336, -0.517846,0,0.855474,1.666182,1.5,1.23535, -0.545579,0,0.83806,1.666182,3,1.23535, -0.599204,0,0.800597,1.691322,1.5,1.252913, -0.545579,0,0.83806,1.666182,3,1.23535, -0.517846,0,0.855474,1.666182,1.5,1.23535, -0.545579,0,0.83806,1.666182,3,1.23535, -0.599204,0,0.800597,1.691322,1.5,1.252913, -0.625096,0,0.780548,1.691322,3,1.252913, -0.686784,0,0.726862,1.71462,1.5,1.272856, -0.625096,0,0.780548,1.691322,3,1.252913, -0.599204,0,0.800597,1.691322,1.5,1.252913, -0.625096,0,0.780548,1.691322,3,1.252913, -0.686784,0,0.726862,1.71462,1.5,1.272856, -0.686784,0,0.726862,1.71462,3,1.272856, -0.721622,0,0.692287,1.715833,3,1.274121, -0.686784,0,0.726862,1.71462,1.5,1.272856, -0.721622,0,0.692287,1.715833,1.5,1.274121, -0.686784,0,0.726862,1.71462,1.5,1.272856, -0.721622,0,0.692287,1.715833,3,1.274121, -0.686784,0,0.726862,1.71462,3,1.272856, 0,-1,0,1.715833,1.5,2.1475, 0,-1,0,1.705014,1.5,1.73585, 0,-1,0,1.715833,1.5,1.725471, 0,-1,0,1.705014,1.5,1.73585, 0,-1,0,1.715833,1.5,2.1475, 0,-1,0,1.68091,1.5,1.75481, 0,-1,0,1.68091,1.5,1.75481, 0,-1,0,1.715833,1.5,2.1475, 0,-1,0,1.655063,1.5,1.771315, 0,-1,0,1.655063,1.5,1.771315, 0,-1,0,1.715833,1.5,2.1475, 0,-1,0,1.627723,1.5,1.785207, 0,-1,0,1.627723,1.5,1.785207, 0,-1,0,1.715833,1.5,2.1475, 0,-1,0,1.599152,1.5,1.796353, 0,-1,0,1.599152,1.5,1.796353, 0,-1,0,1.715833,1.5,2.1475, 0,-1,0,1.569627,1.5,1.804645, 0,-1,0,1.569627,1.5,1.804645, 0,-1,0,1.715833,1.5,2.1475, 0,-1,0,1.539432,1.5,1.810002, 0,-1,0,1.539432,1.5,1.810002, 0,-1,0,1.715833,1.5,2.1475, 0,-1,0,1.508856,1.5,1.812374, 0,-1,0,1.715833,1.5,2.1475, 0,-1,0,1.5,1.5,1.812191, 0,-1,0,1.508856,1.5,1.812374, 0,-1,0,1.715833,1.5,0.8525, 0,-1,0,1.521805,1.5,1.188262, 0,-1,0,1.5,1.5,1.187809, 0,-1,0,1.521805,1.5,1.188262, 0,-1,0,1.715833,1.5,0.8525, 0,-1,0,1.552255,1.5,1.1919, 0,-1,0,1.552255,1.5,1.1919, 0,-1,0,1.715833,1.5,0.8525, 0,-1,0,1.582203,1.5,1.198505, 0,-1,0,1.582203,1.5,1.198505, 0,-1,0,1.715833,1.5,0.8525, 0,-1,0,1.611359,1.5,1.208015, 0,-1,0,1.611359,1.5,1.208015, 0,-1,0,1.715833,1.5,0.8525, 0,-1,0,1.639442,1.5,1.220336, 0,-1,0,1.639442,1.5,1.220336, 0,-1,0,1.715833,1.5,0.8525, 0,-1,0,1.666182,1.5,1.23535, 0,-1,0,1.666182,1.5,1.23535, 0,-1,0,1.715833,1.5,0.8525, 0,-1,0,1.691322,1.5,1.252913, 0,-1,0,1.691322,1.5,1.252913, 0,-1,0,1.715833,1.5,0.8525, 0,-1,0,1.71462,1.5,1.272856, 0,-1,0,1.71462,1.5,1.272856, 0,-1,0,1.715833,1.5,0.8525, 0,-1,0,1.715833,1.5,1.274121, 0,1,0,0,3,2.536, 0,1,0,0.205,3,2.277, 0,1,0,0,3,2.277, 0,1,0,0.205,3,2.277, 0,1,0,0,3,2.536, 0,1,0,0.205,3,2.795, 0,1,0,0.205,3,2.795, 0,1,0,0,3,2.536, 0,1,0,0,3,2.795, 0,1,0,0,3,0.464, 0,1,0,0.205,3,0.205, 0,1,0,0,3,0.205, 0,1,0,0.205,3,0.205, 0,1,0,0,3,0.464, 0,1,0,0.205,3,0.723, 0,1,0,0.205,3,0.723, 0,1,0,0,3,0.464, 0,1,0,0,3,0.723, 0,1,0,0.777,3,0, 0,1,0,1.201631,3,0, 0,1,0,0.87868,3,0, 0,1,0,1.201631,3,0, 0,1,0,0.777,3,0, 0,1,0,1.295,3,0, 0,1,0,1.295,3,0, 0,1,0,0.777,3,0, 0,1,0,1.5,3,0.205, 0,1,0,1.5,3,0.205, 0,1,0,0.777,3,0, 0,1,0,0.777,3,0.205, 0,1,0,2.1475,3,2.1475, 0,1,0,2.1475,3,1.715833, 0,1,0,1.715833,3,2.1475, 0,1,0,0.205,3,2.795, 0,1,0,0.53125,3,2.277, 0,1,0,0.205,3,2.277, 0,1,0,0.53125,3,2.277, 0,1,0,0.205,3,2.795, 0,1,0,0.777,3,2.795, 0,1,0,0.53125,3,0.723, 0,1,0,1.5,3,0.205, 0,1,0,0.777,3,0.205, 0,1,0,1.5,3,0.205, 0,1,0,0.53125,3,0.723, 0,1,0,0.723,3,0.982, 0,1,0,0.723,3,0.982, 0,1,0,0.53125,3,0.723, 0,1,0,0.53125,3,0.982, 0,1,0,1.0625,3,1.241, 0,1,0,1.5,3,1.5, 0,1,0,1.5,3,1.187809, 0,1,0,1.5,3,1.5, 0,1,0,1.0625,3,1.241, 0,1,0,1.0625,3,1.5, 0,1,0,1.5,3,1.187809, 0,1,0,1.715833,3,0.8525, 0,1,0,1.5,3,0.205, 0,1,0,1.715833,3,0.8525, 0,1,0,1.5,3,1.187809, 0,1,0,1.607917,3,1.020155, 0,1,0,1.0625,3,1.5, 0,1,0,1.5,3,1.812191, 0,1,0,1.5,3,1.5, 0,1,0,1.5,3,1.812191, 0,1,0,1.0625,3,1.5, 0,1,0,1.0625,3,1.759, 0,1,0,1.5,3,0.205, 0,1,0,0.796875,3,0.982, 0,1,0,0.796875,3,1.241, 0,1,0,0.796875,3,0.982, 0,1,0,1.5,3,0.205, 0,1,0,0.723,3,0.982, 0,1,0,1.5,3,2.795, 0,1,0,1.0625,3,1.759, 0,1,0,0.796875,3,1.759, 0,1,0,1.0625,3,1.759, 0,1,0,1.5,3,2.795, 0,1,0,1.5,3,1.812191, 0,1,0,1.5,3,2.795, 0,1,0,1.607917,3,1.979845, 0,1,0,1.5,3,1.812191, 0,1,0,1.607917,3,1.979845, 0,1,0,1.5,3,2.795, 0,1,0,1.715833,3,2.1475, 0,1,0,2.1475,3,0.8525, 0,1,0,1.5,3,0.205, 0,1,0,1.715833,3,0.8525, 0,1,0,2.1475,3,1.284167, 0,1,0,2.1475,3,0.8525, 0,1,0,1.715833,3,0.8525, 0,0,1,2.1475,1.5,0.8525, 0,0,1,1.715833,3,0.8525, 0,0,1,1.715833,1.5,0.8525, 0,0,1,1.715833,3,0.8525, 0,0,1,2.1475,1.5,0.8525, 0,0,1,2.1475,3,0.8525, 0,1,0,1.5,3,2.795, 0,1,0,2.1475,3,2.1475, 0,1,0,1.715833,3,2.1475, 0,0,-1,2.1475,3,2.1475, 0,0,-1,1.715833,1.5,2.1475, 0,0,-1,1.715833,3,2.1475, 0,0,-1,1.715833,1.5,2.1475, 0,0,-1,2.1475,3,2.1475, 0,0,-1,2.1475,1.5,2.1475, 0,1,0,0.796875,3,1.241, 0,1,0,1.5,3,1.187809, 0,1,0,1.5,3,0.205, 0,1,0,1.5,3,1.187809, 0,1,0,0.796875,3,1.241, 0,1,0,1.0625,3,1.241, 0,1,0,1.5,3,2.795, 0,1,0,0.796875,3,2.018, 0,1,0,0.723,3,2.018, 0,1,0,1.5,3,2.795, 0,1,0,0.796875,3,1.759, 0,1,0,0.796875,3,2.018, 0,1,0,0.205,3,0.205, 0,1,0,0.53125,3,0.723, 0,1,0,0.777,3,0.205, 0,1,0,0.53125,3,0.723, 0,1,0,0.205,3,0.205, 0,1,0,0.205,3,0.723, -0.956392,0,-0.292087,0.53125,3,0.723, -0.956392,0,-0.292087,0.777,1.5,0.205, -0.989278,0,-0.146043,0.53125,1.5,0.723, -0.956392,0,-0.292087,0.777,1.5,0.205, -0.956392,0,-0.292087,0.53125,3,0.723, -0.998843,0,-0.048086,0.777,3,0.205, 0,1,0,0.53125,3,2.277, 0,1,0,0.723,3,2.018, 0,1,0,0.53125,3,2.018, 0,1,0,0.723,3,2.018, 0,1,0,0.53125,3,2.277, 0,1,0,1.5,3,2.795, 0,1,0,1.5,3,2.795, 0,1,0,0.53125,3,2.277, 0,1,0,0.777,3,2.795, 0,-1,0,1.5,1.5,1.5, 0,-1,0,1.0625,1.5,1.241, 0,-1,0,1.5,1.5,1.187809, 0,-1,0,1.0625,1.5,1.241, 0,-1,0,1.5,1.5,1.5, 0,-1,0,1.0625,1.5,1.5, 1,0,0,1.5,3,1.187809, 1,0,0,1.5,1.5,1.5, 1,0,0,1.5,1.5,1.187809, 1,0,0,1.5,1.5,1.5, 1,0,0,1.5,3,1.187809, 1,0,0,1.5,3,1.5, 0,1,0,1.715833,3,2.1475, 0,1,0,1.715833,3,1.725471, 0,1,0,1.607917,3,1.979845, 0,1,0,1.607917,3,1.020155, 0,1,0,1.715833,3,1.274121, 0,1,0,1.715833,3,0.8525, 0,1,0,1.715833,3,1.274121, 0,1,0,1.607917,3,1.020155, 0,1,0,1.71462,3,1.272856, -0.707107,0,0.707107,2.1475,3,1.284167, -0.707107,0,0.707107,1.715833,1.5,0.8525, -0.707107,0,0.707107,2.1475,1.5,1.284167, -0.707107,0,0.707107,1.715833,1.5,0.8525, -0.707107,0,0.707107,2.1475,3,1.284167, -0.707107,0,0.707107,1.715833,3,0.8525 }; static const struct gllist lament_model_taser_b_frame = { GL_N3F_V3F, GL_TRIANGLES, 990, lament_model_taser_b_data, 0 }; const struct gllist *lament_model_taser_b = &lament_model_taser_b_frame; static const float lament_model_taser_base_data[] = { 0.341001,0,-0.940063,1.611359,3,1.208015, 0.27881,0,-0.960346,1.582203,1.5,1.198505, 0.247217,0,-0.96896,1.582203,3,1.198505, 0.27881,0,-0.960346,1.582203,1.5,1.198505, 0.341001,0,-0.940063,1.611359,3,1.208015, 0.371598,0,-0.928394,1.611359,1.5,1.208015, 0,1,0,1.295,1.5,0, 0,1,0,1.5,1.5,1.187809, 0,1,0,1.715833,1.5,0.8525, 0,1,0,1.5,1.5,1.187809, 0,1,0,1.295,1.5,0, 0,1,0,1.295,1.5,3, 0,1,0,1.5,1.5,1.187809, 0,1,0,1.295,1.5,3, 0,1,0,1.5,1.5,1.812191, 0,1,0,1.5,1.5,1.812191, 0,1,0,1.295,1.5,3, 0,1,0,1.508856,1.5,1.812374, 0,1,0,1.508856,1.5,1.812374, 0,1,0,1.295,1.5,3, 0,1,0,1.715833,1.5,2.1475, 0,1,0,1.715833,1.5,2.1475, 0,1,0,1.295,1.5,3, 0,1,0,2.1475,1.5,2.1475, 0,1,0,2.1475,1.5,2.1475, 0,1,0,2.1475,1.5,1.715833, 0,1,0,1.715833,1.5,2.1475, 0,1,0,1.705014,1.5,1.73585, 0,1,0,1.715833,1.5,2.1475, 0,1,0,1.715833,1.5,1.725471, 0,1,0,1.715833,1.5,2.1475, 0,1,0,1.705014,1.5,1.73585, 0,1,0,1.68091,1.5,1.75481, 0,1,0,1.715833,1.5,2.1475, 0,1,0,1.68091,1.5,1.75481, 0,1,0,1.655063,1.5,1.771315, 0,1,0,1.715833,1.5,2.1475, 0,1,0,1.655063,1.5,1.771315, 0,1,0,1.627723,1.5,1.785207, 0,1,0,1.715833,1.5,2.1475, 0,1,0,1.627723,1.5,1.785207, 0,1,0,1.599152,1.5,1.796353, 0,1,0,1.715833,1.5,2.1475, 0,1,0,1.599152,1.5,1.796353, 0,1,0,1.569627,1.5,1.804645, 0,1,0,1.715833,1.5,2.1475, 0,1,0,1.569627,1.5,1.804645, 0,1,0,1.539432,1.5,1.810002, 0,1,0,1.715833,1.5,2.1475, 0,1,0,1.539432,1.5,1.810002, 0,1,0,1.508856,1.5,1.812374, 0,1,0,1.715833,1.5,0.8525, 0,1,0,1.71462,1.5,1.272856, 0,1,0,1.715833,1.5,1.274121, 0,1,0,1.71462,1.5,1.272856, 0,1,0,1.715833,1.5,0.8525, 0,1,0,1.691322,1.5,1.252913, 0,1,0,1.691322,1.5,1.252913, 0,1,0,1.715833,1.5,0.8525, 0,1,0,1.666182,1.5,1.23535, 0,1,0,1.666182,1.5,1.23535, 0,1,0,1.715833,1.5,0.8525, 0,1,0,1.639442,1.5,1.220336, 0,1,0,1.639442,1.5,1.220336, 0,1,0,1.715833,1.5,0.8525, 0,1,0,1.611359,1.5,1.208015, 0,1,0,1.611359,1.5,1.208015, 0,1,0,1.715833,1.5,0.8525, 0,1,0,1.582203,1.5,1.198505, 0,1,0,1.582203,1.5,1.198505, 0,1,0,1.715833,1.5,0.8525, 0,1,0,1.552255,1.5,1.1919, 0,1,0,1.552255,1.5,1.1919, 0,1,0,1.715833,1.5,0.8525, 0,1,0,1.521805,1.5,1.188262, 0,1,0,1.521805,1.5,1.188262, 0,1,0,1.715833,1.5,0.8525, 0,1,0,1.5,1.5,1.187809, 0,1,0,1.715833,1.5,0.8525, 0,1,0,2.1475,1.5,0.8525, 0,1,0,1.295,1.5,0, 0,1,0,2.1475,1.5,0.8525, 0,1,0,1.715833,1.5,0.8525, 0,1,0,2.1475,1.5,1.284167, 0,0,-1,1.5,1.5,0, 0,0,-1,1.295,1.193196,0, 0,0,-1,1.295,1.295,0, 0.206815,0,0.97838,1.569627,1.5,1.804645, 0.142406,0,0.989808,1.539432,3,1.810002, 0.109921,0,0.99394,1.539432,1.5,1.810002, 0.142406,0,0.989808,1.539432,3,1.810002, 0.206815,0,0.97838,1.569627,1.5,1.804645, 0.238739,0,0.971084,1.569627,3,1.804645, 0.565482,0,0.824761,1.68091,1.5,1.75481, 0.51035,0,0.859967,1.655063,3,1.771315, 0.481919,0,0.876216,1.655063,1.5,1.771315, 0.51035,0,0.859967,1.655063,3,1.771315, 0.565482,0,0.824761,1.68091,1.5,1.75481, 0.592184,0,0.805803,1.68091,3,1.75481, 0.053432,0,-0.998571,1.521805,3,1.188262, 0.020743,0,-0.999785,1.5,1.5,1.187809, 0.020743,0,-0.999785,1.5,3,1.187809, 0.020743,0,-0.999785,1.5,1.5,1.187809, 0.053432,0,-0.998571,1.521805,3,1.188262, 0.086099,0,-0.996287,1.521805,1.5,1.188262, -1,0,0,1.5,3,1.812191, -1,0,0,1.5,1.5,1.187809, -1,0,0,1.5,1.5,1.812191, -1,0,0,1.5,1.5,1.187809, -1,0,0,1.5,3,1.812191, -1,0,0,1.5,3,1.187809, -0.569325,0.581384,-0.581259,1.5,3,1.187809, -0.216196,0.95311,0.211757,1.5,3,1.812191, 0,1,0,1.5,3,1.5, -1,0,0,1.715833,3,2.1475, -1,0,0,1.715833,1.5,1.725471, -1,0,0,1.715833,1.5,2.1475, -1,0,0,1.715833,1.5,1.725471, -1,0,0,1.715833,3,2.1475, -1,0,0,1.715833,3,1.725471, 0.247217,0,-0.96896,1.582203,3,1.198505, 0.183337,0,-0.98305,1.552255,1.5,1.1919, 0.151052,0,-0.988526,1.552255,3,1.1919, 0.183337,0,-0.98305,1.552255,1.5,1.1919, 0.247217,0,-0.96896,1.582203,3,1.198505, 0.27881,0,-0.960346,1.582203,1.5,1.198505, 0,1,0,2.795,3,2.795, 0,1,0,2.795,3,1.5, 0,1,0,2.1475,3,2.1475, 0.707107,0,0.707107,2.1475,1.5,1.715833, 0.707107,0,0.707107,1.715833,3,2.1475, 0.707107,0,0.707107,1.715833,1.5,2.1475, 0.707107,0,0.707107,1.715833,3,2.1475, 0.707107,0,0.707107,2.1475,1.5,1.715833, 0.707107,0,0.707107,2.1475,3,1.715833, 0.517846,0,-0.855474,1.666182,3,1.23535, 0.460807,0,-0.8875,1.639442,1.5,1.220336, 0.431501,0,-0.902112,1.639442,3,1.220336, 0.460807,0,-0.8875,1.639442,1.5,1.220336, 0.517846,0,-0.855474,1.666182,3,1.23535, 0.545579,0,-0.83806,1.666182,1.5,1.23535, 0.599204,0,-0.800597,1.691322,3,1.252913, 0.545579,0,-0.83806,1.666182,1.5,1.23535, 0.517846,0,-0.855474,1.666182,3,1.23535, 0.545579,0,-0.83806,1.666182,1.5,1.23535, 0.599204,0,-0.800597,1.691322,3,1.252913, 0.625096,0,-0.780548,1.691322,1.5,1.252913, 0.686784,0,-0.726862,1.71462,3,1.272856, 0.625096,0,-0.780548,1.691322,1.5,1.252913, 0.599204,0,-0.800597,1.691322,3,1.252913, 0.625096,0,-0.780548,1.691322,1.5,1.252913, 0.686784,0,-0.726862,1.71462,3,1.272856, 0.686784,0,-0.726862,1.71462,1.5,1.272856, 0.707107,0,-0.707107,1.715833,3,0.8525, 0.707107,0,-0.707107,2.1475,1.5,1.284167, 0.707107,0,-0.707107,1.715833,1.5,0.8525, 0.707107,0,-0.707107,2.1475,1.5,1.284167, 0.707107,0,-0.707107,1.715833,3,0.8525, 0.707107,0,-0.707107,2.1475,3,1.284167, -1,0,0,2.1475,3,2.1475, -1,0,0,2.1475,1.5,1.715833, -1,0,0,2.1475,1.5,2.1475, -1,0,0,2.1475,1.5,1.715833, -1,0,0,2.1475,3,2.1475, -1,0,0,2.1475,3,1.715833, 0.109921,0,0.99394,1.539432,1.5,1.810002, 0.044703,0,0.999,1.508856,3,1.812374, 0.011969,0,0.999928,1.508856,1.5,1.812374, 0.044703,0,0.999,1.508856,3,1.812374, 0.109921,0,0.99394,1.539432,1.5,1.810002, 0.142406,0,0.989808,1.539432,3,1.810002, 0.011969,0,0.999928,1.508856,1.5,1.812374, -0.020743,0,0.999785,1.5,3,1.812191, -0.020743,0,0.999785,1.5,1.5,1.812191, -0.020743,0,0.999785,1.5,3,1.812191, 0.011969,0,0.999928,1.508856,1.5,1.812374, 0.044703,0,0.999,1.508856,3,1.812374, 0.393714,0,0.919233,1.627723,1.5,1.785207, 0.332772,0,0.943007,1.599152,3,1.796353, 0.301717,0,0.953397,1.599152,1.5,1.796353, 0.332772,0,0.943007,1.599152,3,1.796353, 0.393714,0,0.919233,1.627723,1.5,1.785207, 0.423601,0,0.905849,1.627723,3,1.785207, 0.301717,0,0.953397,1.599152,1.5,1.796353, 0.238739,0,0.971084,1.569627,3,1.804645, 0.206815,0,0.97838,1.569627,1.5,1.804645, 0.238739,0,0.971084,1.569627,3,1.804645, 0.301717,0,0.953397,1.599152,1.5,1.796353, 0.332772,0,0.943007,1.599152,3,1.796353, -1,0,0,1.715833,3,1.274121, -1,0,0,1.715833,1.5,0.8525, -1,0,0,1.715833,1.5,1.274121, -1,0,0,1.715833,1.5,0.8525, -1,0,0,1.715833,3,1.274121, -1,0,0,1.715833,3,0.8525, 0.481919,0,0.876216,1.655063,1.5,1.771315, 0.423601,0,0.905849,1.627723,3,1.785207, 0.393714,0,0.919233,1.627723,1.5,1.785207, 0.423601,0,0.905849,1.627723,3,1.785207, 0.481919,0,0.876216,1.655063,1.5,1.771315, 0.51035,0,0.859967,1.655063,3,1.771315, 0.151052,0,-0.988526,1.552255,3,1.1919, 0.086099,0,-0.996287,1.521805,1.5,1.188262, 0.053432,0,-0.998571,1.521805,3,1.188262, 0.086099,0,-0.996287,1.521805,1.5,1.188262, 0.151052,0,-0.988526,1.552255,3,1.1919, 0.183337,0,-0.98305,1.552255,1.5,1.1919, 1,0,0,3,0.205,0.205, 1,0,0,3,0,0, 1,0,0,3,0.205,0, -0.707107,0,-0.707107,1.295,1.540777,3, -0.707107,0,-0.707107,2.1475,1.5,2.1475, -0.707107,0,-0.707107,1.295,1.5,3, -0.707107,0,-0.707107,2.1475,1.5,2.1475, -0.707107,0,-0.707107,1.295,1.540777,3, -0.707107,0,-0.707107,2.1475,3,2.1475, -0.707107,0,-0.707107,2.1475,3,2.1475, -0.707107,0,-0.707107,1.295,1.540777,3, -0.707107,0,-0.707107,1.295,1.584914,3, -0.707107,0,-0.707107,2.1475,3,2.1475, -0.707107,0,-0.707107,1.295,1.584914,3, -0.707107,0,-0.707107,1.295,1.636977,3, -0.707107,0,-0.707107,2.1475,3,2.1475, -0.707107,0,-0.707107,1.295,1.636977,3, -0.707107,0,-0.707107,1.295,1.705,3, -0.707107,0,-0.707107,2.1475,3,2.1475, -0.707107,0,-0.707107,1.295,1.705,3, -0.707107,0,-0.707107,1.295,1.806804,3, -0.707107,0,-0.707107,2.1475,3,2.1475, -0.707107,0,-0.707107,1.295,1.806804,3, -0.707107,0,-0.707107,1.295,1.994914,3, -0.707107,0,-0.707107,2.1475,3,2.1475, -0.707107,0,-0.707107,1.295,1.994914,3, -0.707107,0,-0.707107,1.295,2.231186,3, -0.707107,0,-0.707107,2.1475,3,2.1475, -0.707107,0,-0.707107,1.295,2.231186,3, -0.707107,0,-0.707107,1.295,2.530605,3, -0.707107,0,-0.707107,2.1475,3,2.1475, -0.707107,0,-0.707107,1.295,2.530605,3, -0.707107,0,-0.707107,1.295,3,3, -0.765259,0.274484,-0.582269,2.1475,3,2.1475, -0.397052,0.561517,0.725981,1.295,3,3, 0,1,0,1.5,3,2.795, 0,0,1,1.5,1.5,3, 0,0,1,1.295,1.540777,3, 0,0,1,1.295,1.5,3, -1,0,0,2.1475,3,1.284167, -1,0,0,2.1475,1.5,0.8525, -1,0,0,2.1475,1.5,1.284167, -1,0,0,2.1475,1.5,0.8525, -1,0,0,2.1475,3,1.284167, -1,0,0,2.1475,3,0.8525, 0.6436,0,0.765362,1.705014,1.5,1.73585, 0.592184,0,0.805803,1.68091,3,1.75481, 0.565482,0,0.824761,1.68091,1.5,1.75481, 0.592184,0,0.805803,1.68091,3,1.75481, 0.6436,0,0.765362,1.705014,1.5,1.73585, 0.682921,0.000198,0.730492,1.705014,3,1.73585, 0.431501,0,-0.902112,1.639442,3,1.220336, 0.371598,0,-0.928394,1.611359,1.5,1.208015, 0.341001,0,-0.940063,1.611359,3,1.208015, 0.371598,0,-0.928394,1.611359,1.5,1.208015, 0.431501,0,-0.902112,1.639442,3,1.220336, 0.460807,0,-0.8875,1.639442,1.5,1.220336, 0.686784,0,-0.726862,1.71462,3,1.272856, 0.721622,0,-0.692287,1.715833,1.5,1.274121, 0.686784,0,-0.726862,1.71462,1.5,1.272856, 0.721622,0,-0.692287,1.715833,1.5,1.274121, 0.686784,0,-0.726862,1.71462,3,1.272856, 0.721622,0,-0.692287,1.715833,3,1.274121, 0.713423,0.000297,0.700733,1.715833,1.5,1.725471, 0.682921,0.000198,0.730492,1.705014,3,1.73585, 0.6436,0,0.765362,1.705014,1.5,1.73585, 0.682921,0.000198,0.730492,1.705014,3,1.73585, 0.713423,0.000297,0.700733,1.715833,1.5,1.725471, 0.733929,0.000594,0.679226,1.71462,3,1.725471, 0,0,1,1.71462,3,1.725471, 0,0,1,1.715833,1.5,1.725471, 0,0,1,1.715833,3,1.725471, -0.707107,0,0.707107,2.1475,1.5,0.8525, -0.707107,0,0.707107,1.295,1.540777,0, -0.707107,0,0.707107,1.295,1.5,0, -0.707107,0,0.707107,1.295,1.540777,0, -0.707107,0,0.707107,2.1475,1.5,0.8525, -0.707107,0,0.707107,1.295,1.584914,0, -0.707107,0,0.707107,1.295,1.584914,0, -0.707107,0,0.707107,2.1475,1.5,0.8525, -0.707107,0,0.707107,1.295,1.636977,0, -0.707107,0,0.707107,1.295,1.636977,0, -0.707107,0,0.707107,2.1475,1.5,0.8525, -0.707107,0,0.707107,1.295,1.705,0, -0.707107,0,0.707107,1.295,1.705,0, -0.707107,0,0.707107,2.1475,1.5,0.8525, -0.707107,0,0.707107,1.295,1.806804,0, -0.707107,0,0.707107,1.295,1.806804,0, -0.707107,0,0.707107,2.1475,1.5,0.8525, -0.707107,0,0.707107,1.295,1.994914,0, -0.707107,0,0.707107,1.295,1.994914,0, -0.707107,0,0.707107,2.1475,1.5,0.8525, -0.707107,0,0.707107,1.295,2.231186,0, -0.707107,0,0.707107,1.295,2.231186,0, -0.707107,0,0.707107,2.1475,1.5,0.8525, -0.707107,0,0.707107,1.295,2.530605,0, -0.707107,0,0.707107,1.295,2.530605,0, -0.707107,0,0.707107,2.1475,1.5,0.8525, -0.707107,0,0.707107,1.295,3,0, -0.707107,0,0.707107,1.295,3,0, -0.707107,0,0.707107,2.1475,1.5,0.8525, -0.707107,0,0.707107,1.5,3,0.205, -0.707107,0,0.707107,1.5,3,0.205, -0.707107,0,0.707107,2.1475,1.5,0.8525, -0.707107,0,0.707107,2.1475,3,0.8525, 0,0,-1,1.5,1.5,0, 0,0,-1,1.295,1.295,0, 0,0,-1,1.295,1.363023,0, 0,0,-1,1.5,1.5,0, 0,0,-1,1.295,1.459223,0, 0,0,-1,1.295,1.5,0, 0,0,-1,1.5,1.5,0, 0,0,-1,1.295,1.806804,0, 0,0,-1,1.295,1.994914,0, 0,0,-1,1.5,1.5,0, 0,0,-1,1.295,1.415086,0, 0,0,-1,1.295,1.459223,0, 0,0,-1,1.5,1.5,0, 0,0,-1,1.295,1.5,0, 0,0,-1,1.295,1.540777,0, 0,0,-1,1.351731,2.245397,0, 0,0,-1,1.295,2.231186,0, 0,0,-1,1.295,2.530605,0, 0,0,-1,1.351731,2.245397,0, 0,0,-1,1.295,1.994914,0, 0,0,-1,1.295,2.231186,0, 0,0,-1,1.295,1.994914,0, 0,0,-1,1.351731,2.245397,0, 0,0,-1,1.5,1.5,0, 0,0,-1,1.5,1.5,0, 0,0,-1,1.295,1.584914,0, 0,0,-1,1.295,1.636977,0, 0,0,-1,1.5,1.5,0, 0,0,-1,1.295,1.636977,0, 0,0,-1,1.295,1.705,0, 0,0,-1,2.087488,1.017861,0, 0,0,-1,3,0,0, 0,0,-1,2.037401,0.962599,0, 0,0,-1,3,0,0, 0,0,-1,2.087488,1.017861,0, 0,0,-1,2.131917,1.077767,0, 0,0,-1,3,0,0, 0,0,-1,2.131917,1.077767,0, 0,0,-1,3,0.497732,0, 0.436436,-0.218218,-0.872872,3,0,0, 0.6,0,-0.8,3,0.497732,0, 1,0,0,3,0.205,0, 0,0,-1,2.17026,1.141738,0, 0,0,-1,3,0.497732,0, 0,0,-1,2.131917,1.077767,0, 0,0,-1,3,0.497732,0, 0,0,-1,2.17026,1.141738,0, 0,0,-1,2.202148,1.209161,0, 0,0,-1,3,0.497732,0, 0,0,-1,2.202148,1.209161,0, 0,0,-1,3,0.87868,0, 0,0,-1,2.227275,1.279384,0, 0,0,-1,3,0.87868,0, 0,0,-1,2.202148,1.209161,0, 0,0,-1,3,0.87868,0, 0,0,-1,2.227275,1.279384,0, 0,0,-1,2.245397,1.351731,0, 0,0,-1,3,0.87868,0, 0,0,-1,2.245397,1.351731,0, 0,0,-1,3,1.201631,0, 0,0,-1,2.25634,1.425507,0, 0,0,-1,3,1.201631,0, 0,0,-1,2.245397,1.351731,0, 0,0,-1,3,1.201631,0, 0,0,-1,2.25634,1.425507,0, 0,0,-1,2.26,1.5,0, 0,0,-1,3,1.201631,0, 0,0,-1,2.26,1.5,0, 0,0,-1,3,1.5,0, 0,0,-1,1.5,3,0, 0,0,-1,1.295,2.530605,0, 0,0,-1,1.295,3,0, 0,0,-1,1.295,2.530605,0, 0,0,-1,1.5,3,0, 0,0,-1,1.351731,2.245397,0, 0,0,-1,1.351731,2.245397,0, 0,0,-1,1.5,3,0, 0,0,-1,1.425507,2.25634,0, 0,0,-1,1.425507,2.25634,0, 0,0,-1,1.5,3,0, 0,0,-1,1.5,2.26,0, 0,0,-1,1.798369,3,0, 0,0,-1,1.5,2.26,0, 0,0,-1,1.5,3,0, 0,0,-1,1.5,2.26,0, 0,0,-1,1.798369,3,0, 0,0,-1,1.574493,2.25634,0, 0,0,-1,1.574493,2.25634,0, 0,0,-1,1.798369,3,0, 0,0,-1,1.648269,2.245397,0, 0,0,-1,1.351731,0.754603,0, 0,0,-1,1.295,0,0, 0,0,-1,1.295,0.469395,0, 0,0,-1,1.295,0,0, 0,0,-1,1.351731,0.754603,0, 0,0,-1,1.5,0,0, 0,0,-1,1.5,0,0, 0,0,-1,1.351731,0.754603,0, 0,0,-1,1.425507,0.74366,0, 0,0,-1,1.5,0,0, 0,0,-1,1.425507,0.74366,0, 0,0,-1,1.5,0.74,0, 0,0,-1,1.574493,0.74366,0, 0,0,-1,1.5,0,0, 0,0,-1,1.5,0.74,0, 0,0,-1,1.5,0,0, 0,0,-1,1.574493,0.74366,0, 0,0,-1,1.798369,0,0, 0,0,-1,1.798369,0,0, 0,0,-1,1.574493,0.74366,0, 0,0,-1,1.648269,0.754603,0, 0,0,-1,1.5,1.5,0, 0,0,-1,1.295,1.705,0, 0,0,-1,1.295,1.806804,0, 0,0,-1,1.798369,3,0, 0,0,-1,1.720616,2.227275,0, 0,0,-1,1.648269,2.245397,0, 0,0,-1,1.720616,2.227275,0, 0,0,-1,1.798369,3,0, 0,0,-1,1.790839,2.202148,0, 0,0,-1,1.790839,2.202148,0, 0,0,-1,1.798369,3,0, 0,0,-1,2.12132,3,0, 0,0,-1,1.5,1.5,0, 0,0,-1,1.295,1.363023,0, 0,0,-1,1.295,1.415086,0, 0,0,-1,1.858262,0.82974,0, 0,0,-1,2.12132,0,0, 0,0,-1,1.790839,0.797852,0, 0,0,-1,2.12132,0,0, 0,0,-1,1.858262,0.82974,0, 0,0,-1,1.922233,0.868083,0, 0,0,-1,2.12132,0,0, 0,0,-1,1.922233,0.868083,0, 0,0,-1,2.502268,0,0, 0,0,-1,1.720616,0.772725,0, 0,0,-1,1.798369,0,0, 0,0,-1,1.648269,0.754603,0, 0,0,-1,1.798369,0,0, 0,0,-1,1.720616,0.772725,0, 0,0,-1,1.790839,0.797852,0, 0,0,-1,1.798369,0,0, 0,0,-1,1.790839,0.797852,0, 0,0,-1,2.12132,0,0, 0,0,-1,2.12132,3,0, 0,0,-1,1.858262,2.17026,0, 0,0,-1,1.790839,2.202148,0, 0,0,-1,1.858262,2.17026,0, 0,0,-1,2.12132,3,0, 0,0,-1,1.922233,2.131917,0, 0,0,-1,1.922233,2.131917,0, 0,0,-1,2.12132,3,0, 0,0,-1,2.502268,3,0, 0,0,-1,3,1.798369,0, 0,0,-1,2.25634,1.574493,0, 0,0,-1,2.245397,1.648269,0, 0,0,-1,2.25634,1.574493,0, 0,0,-1,3,1.798369,0, 0,0,-1,2.26,1.5,0, 0,0,-1,2.26,1.5,0, 0,0,-1,3,1.798369,0, 0,0,-1,3,1.5,0, 0,0,-1,2.502268,3,0, 0,0,-1,1.982139,2.087488,0, 0,0,-1,1.922233,2.131917,0, 0,0,-1,1.982139,2.087488,0, 0,0,-1,2.502268,3,0, 0,0,-1,2.037401,2.037401,0, 0,0,-1,2.037401,2.037401,0, 0,0,-1,2.502268,3,0, 0,0,-1,2.795,3,0, 0,0,-1,2.037401,2.037401,0, 0,0,-1,2.795,3,0, 0,0,-1,3,3,0, 0,0,-1,3,3,0, 0,0,-1,2.087488,1.982139,0, 0,0,-1,2.037401,2.037401,0, 0,0,-1,2.087488,1.982139,0, 0,0,-1,3,3,0, 0,0,-1,2.131917,1.922233,0, 0,0,-1,2.131917,1.922233,0, 0,0,-1,3,3,0, 0,0,-1,3,2.502268,0, 0.447214,0,-0.894427,3,2.502268,0, 0.408248,0.408248,-0.816497,3,3,0, 1,0,0,3,2.795,0, 0,0,-1,1.351731,0.754603,0, 0,0,-1,1.295,0.469395,0, 0,0,-1,1.295,0.768814,0, 0,0,-1,1.5,1.5,0, 0,0,-1,1.295,0.768814,0, 0,0,-1,1.295,1.005086,0, 0,0,-1,1.295,0.768814,0, 0,0,-1,1.5,1.5,0, 0,0,-1,1.351731,0.754603,0, 0,0,-1,3,2.502268,0, 0,0,-1,2.17026,1.858262,0, 0,0,-1,2.131917,1.922233,0, 0,0,-1,2.17026,1.858262,0, 0,0,-1,3,2.502268,0, 0,0,-1,2.202148,1.790839,0, 0,0,-1,2.202148,1.790839,0, 0,0,-1,3,2.502268,0, 0,0,-1,3,2.12132,0, 0,0,-1,3,2.12132,0, 0,0,-1,2.227275,1.720616,0, 0,0,-1,2.202148,1.790839,0, 0,0,-1,2.227275,1.720616,0, 0,0,-1,3,2.12132,0, 0,0,-1,2.245397,1.648269,0, 0,0,-1,2.245397,1.648269,0, 0,0,-1,3,2.12132,0, 0,0,-1,3,1.798369,0, 0,0,-1,1.982139,0.912512,0, 0,0,-1,2.502268,0,0, 0,0,-1,1.922233,0.868083,0, 0,0,-1,2.502268,0,0, 0,0,-1,1.982139,0.912512,0, 0,0,-1,2.037401,0.962599,0, 0,0,-1,2.502268,0,0, 0,0,-1,2.037401,0.962599,0, 0,0,-1,3,0,0, 0,0,-1,1.425507,2.25634,0, 0,0,-1,1.5,1.5,0, 0,0,-1,1.351731,2.245397,0, 0,0,-1,1.5,1.5,0, 0,0,-1,1.425507,2.25634,0, 0,0,-1,1.5,2.26,0, 0,0,-1,1.5,1.5,0, 0,0,-1,1.5,2.26,0, 0,0,-1,1.574493,2.25634,0, 0,0,-1,1.5,1.5,0, 0,0,-1,1.574493,2.25634,0, 0,0,-1,1.5,0.74,0, 0,0,-1,1.5,0.74,0, 0,0,-1,1.574493,2.25634,0, 0,0,-1,1.574493,0.74366,0, 0,0,-1,1.574493,0.74366,0, 0,0,-1,1.574493,2.25634,0, 0,0,-1,1.648269,2.245397,0, 0,0,-1,1.574493,0.74366,0, 0,0,-1,1.648269,2.245397,0, 0,0,-1,1.648269,0.754603,0, 0,0,-1,1.648269,0.754603,0, 0,0,-1,1.648269,2.245397,0, 0,0,-1,1.720616,2.227275,0, 0,0,-1,1.648269,0.754603,0, 0,0,-1,1.720616,2.227275,0, 0,0,-1,1.720616,0.772725,0, 0,0,-1,1.720616,0.772725,0, 0,0,-1,1.720616,2.227275,0, 0,0,-1,1.790839,2.202148,0, 0,0,-1,1.720616,0.772725,0, 0,0,-1,1.790839,2.202148,0, 0,0,-1,1.790839,0.797852,0, 0,0,-1,1.790839,0.797852,0, 0,0,-1,1.790839,2.202148,0, 0,0,-1,1.858262,2.17026,0, 0,0,-1,1.790839,0.797852,0, 0,0,-1,1.858262,2.17026,0, 0,0,-1,1.858262,0.82974,0, 0,0,-1,1.858262,0.82974,0, 0,0,-1,1.858262,2.17026,0, 0,0,-1,1.922233,2.131917,0, 0,0,-1,1.858262,0.82974,0, 0,0,-1,1.922233,2.131917,0, 0,0,-1,1.922233,0.868083,0, 0,0,-1,1.922233,0.868083,0, 0,0,-1,1.922233,2.131917,0, 0,0,-1,1.982139,2.087488,0, 0,0,-1,1.922233,0.868083,0, 0,0,-1,1.982139,2.087488,0, 0,0,-1,1.982139,0.912512,0, 0,0,-1,1.982139,0.912512,0, 0,0,-1,1.982139,2.087488,0, 0,0,-1,2.037401,2.037401,0, 0,0,-1,1.982139,0.912512,0, 0,0,-1,2.037401,2.037401,0, 0,0,-1,2.037401,0.962599,0, 0,0,-1,2.037401,0.962599,0, 0,0,-1,2.037401,2.037401,0, 0,0,-1,2.087488,1.982139,0, 0,0,-1,2.037401,0.962599,0, 0,0,-1,2.087488,1.982139,0, 0,0,-1,2.087488,1.017861,0, 0,0,-1,2.087488,1.017861,0, 0,0,-1,2.087488,1.982139,0, 0,0,-1,2.131917,1.922233,0, 0,0,-1,2.087488,1.017861,0, 0,0,-1,2.131917,1.922233,0, 0,0,-1,2.131917,1.077767,0, 0,0,-1,2.131917,1.077767,0, 0,0,-1,2.131917,1.922233,0, 0,0,-1,2.17026,1.858262,0, 0,0,-1,2.131917,1.077767,0, 0,0,-1,2.17026,1.858262,0, 0,0,-1,2.17026,1.141738,0, 0,0,-1,2.17026,1.141738,0, 0,0,-1,2.17026,1.858262,0, 0,0,-1,2.202148,1.790839,0, 0,0,-1,2.17026,1.141738,0, 0,0,-1,2.202148,1.790839,0, 0,0,-1,2.202148,1.209161,0, 0,0,-1,2.202148,1.209161,0, 0,0,-1,2.202148,1.790839,0, 0,0,-1,2.227275,1.720616,0, 0,0,-1,2.202148,1.209161,0, 0,0,-1,2.227275,1.720616,0, 0,0,-1,2.227275,1.279384,0, 0,0,-1,2.227275,1.279384,0, 0,0,-1,2.227275,1.720616,0, 0,0,-1,2.245397,1.648269,0, 0,0,-1,2.227275,1.279384,0, 0,0,-1,2.245397,1.648269,0, 0,0,-1,2.245397,1.351731,0, 0,0,-1,2.245397,1.351731,0, 0,0,-1,2.245397,1.648269,0, 0,0,-1,2.25634,1.574493,0, 0,0,-1,2.245397,1.351731,0, 0,0,-1,2.25634,1.574493,0, 0,0,-1,2.25634,1.425507,0, 0,0,-1,2.25634,1.425507,0, 0,0,-1,2.25634,1.574493,0, 0,0,-1,2.26,1.5,0, 0,0,-1,1.5,1.5,0, 0,0,-1,1.425507,0.74366,0, 0,0,-1,1.351731,0.754603,0, 0,0,-1,1.425507,0.74366,0, 0,0,-1,1.5,1.5,0, 0,0,-1,1.5,0.74,0, 0,0,-1,1.5,1.5,0, 0,0,-1,1.295,1.005086,0, 0,0,-1,1.295,1.193196,0, 0,0,-1,1.5,1.5,0, 0,0,-1,1.295,1.540777,0, 0,0,-1,1.295,1.584914,0, 0,0,1,1.5,1.5,3, 0,0,1,1.295,1.5,3, 0,0,1,1.295,1.459223,3, 0,0,1,1.351731,2.245397,3, 0,0,1,1.295,2.530605,3, 0,0,1,1.295,2.231186,3, 0,0,1,1.5,1.5,3, 0,0,1,1.295,2.231186,3, 0,0,1,1.295,1.994914,3, 0,0,1,1.295,2.231186,3, 0,0,1,1.5,1.5,3, 0,0,1,1.351731,2.245397,3, 0,0,1,1.5,1.5,3, 0,0,1,1.295,1.363023,3, 0,0,1,1.295,1.295,3, 0,0,1,1.5,0,3, 0,0,1,1.295,0.469395,3, 0,0,1,1.295,0,3, 0,0,1,1.295,0.469395,3, 0,0,1,1.5,0,3, 0,0,1,1.351731,0.754603,3, 0,0,1,1.351731,0.754603,3, 0,0,1,1.5,0,3, 0,0,1,1.425507,0.74366,3, 0,0,1,1.425507,0.74366,3, 0,0,1,1.5,0,3, 0,0,1,1.5,0.74,3, 0,0,1,1.5,1.5,3, 0,0,1,1.295,1.415086,3, 0,0,1,1.295,1.363023,3, 0,0,1,1.5,1.5,3, 0,0,1,1.295,1.295,3, 0,0,1,1.295,1.193196,3, 0,0,1,3,0,3, 0,0,1,2.087488,1.017861,3, 0,0,1,2.037401,0.962599,3, 0,0,1,2.087488,1.017861,3, 0,0,1,3,0,3, 0,0,1,2.131917,1.077767,3, 0,0,1,2.131917,1.077767,3, 0,0,1,3,0,3, 0,0,1,3,0.497732,3, 0.447214,0,0.894427,3,0.497732,3, 0.365148,-0.182574,0.912871,3,0,3, 1,0,0,3,0.205,3, 0,0,1,3,0.497732,3, 0,0,1,2.17026,1.141738,3, 0,0,1,2.131917,1.077767,3, 0,0,1,2.17026,1.141738,3, 0,0,1,3,0.497732,3, 0,0,1,2.202148,1.209161,3, 0,0,1,2.202148,1.209161,3, 0,0,1,3,0.497732,3, 0,0,1,3,0.87868,3, 0,0,1,1.5,1.5,3, 0,0,1,1.295,1.584914,3, 0,0,1,1.295,1.540777,3, 0,0,1,1.5,1.5,3, 0,0,1,1.295,1.459223,3, 0,0,1,1.295,1.415086,3, 0,0,1,1.5,1.5,3, 0,0,1,1.295,1.193196,3, 0,0,1,1.295,1.005086,3, 0,0,1,1.351731,0.754603,3, 0,0,1,1.295,0.768814,3, 0,0,1,1.295,0.469395,3, 0,0,1,1.574493,2.25634,3, 0,0,1,1.5,3,3, 0,0,1,1.5,2.26,3, 0,0,1,1.5,3,3, 0,0,1,1.574493,2.25634,3, 0,0,1,1.798369,3,3, 0,0,1,1.798369,3,3, 0,0,1,1.574493,2.25634,3, 0,0,1,1.648269,2.245397,3, 0,0,1,1.720616,2.227275,3, 0,0,1,1.798369,3,3, 0,0,1,1.648269,2.245397,3, 0,0,1,1.798369,3,3, 0,0,1,1.720616,2.227275,3, 0,0,1,1.790839,2.202148,3, 0,0,1,1.798369,3,3, 0,0,1,1.790839,2.202148,3, 0,0,1,2.12132,3,3, 0,0,1,3,0.87868,3, 0,0,1,2.227275,1.279384,3, 0,0,1,2.202148,1.209161,3, 0,0,1,2.227275,1.279384,3, 0,0,1,3,0.87868,3, 0,0,1,2.245397,1.351731,3, 0,0,1,2.245397,1.351731,3, 0,0,1,3,0.87868,3, 0,0,1,3,1.201631,3, 0,0,1,2.17026,1.858262,3, 0,0,1,3,2.502268,3, 0,0,1,2.131917,1.922233,3, 0,0,1,3,2.502268,3, 0,0,1,2.17026,1.858262,3, 0,0,1,2.202148,1.790839,3, 0,0,1,3,2.502268,3, 0,0,1,2.202148,1.790839,3, 0,0,1,3,2.12132,3, 0,0,1,1.5,1.5,3, 0,0,1,1.295,1.806804,3, 0,0,1,1.295,1.705,3, 0,0,1,1.5,1.5,3, 0,0,1,1.295,1.994914,3, 0,0,1,1.295,1.806804,3, 0,0,1,1.5,1.5,3, 0,0,1,1.295,1.705,3, 0,0,1,1.295,1.636977,3, 0,0,1,1.5,1.5,3, 0,0,1,1.295,1.636977,3, 0,0,1,1.295,1.584914,3, 0,0,1,1.351731,2.245397,3, 0,0,1,1.295,3,3, 0,0,1,1.295,2.530605,3, 0,0,1,1.295,3,3, 0,0,1,1.351731,2.245397,3, 0,0,1,1.5,3,3, 0,0,1,1.5,3,3, 0,0,1,1.351731,2.245397,3, 0,0,1,1.425507,2.25634,3, 0,0,1,1.5,3,3, 0,0,1,1.425507,2.25634,3, 0,0,1,1.5,2.26,3, 0,0,1,2.12132,0,3, 0,0,1,1.858262,0.82974,3, 0,0,1,1.790839,0.797852,3, 0,0,1,1.858262,0.82974,3, 0,0,1,2.12132,0,3, 0,0,1,1.922233,0.868083,3, 0,0,1,1.922233,0.868083,3, 0,0,1,2.12132,0,3, 0,0,1,2.502268,0,3, 0,0,1,2.502268,0,3, 0,0,1,1.982139,0.912512,3, 0,0,1,1.922233,0.868083,3, 0,0,1,1.982139,0.912512,3, 0,0,1,2.502268,0,3, 0,0,1,2.037401,0.962599,3, 0,0,1,2.037401,0.962599,3, 0,0,1,2.502268,0,3, 0,0,1,3,0,3, 0,0,1,1.351731,0.754603,3, 0,0,1,1.295,1.005086,3, 0,0,1,1.295,0.768814,3, 0,0,1,1.295,1.005086,3, 0,0,1,1.351731,0.754603,3, 0,0,1,1.5,1.5,3, 0,0,1,2.227275,1.720616,3, 0,0,1,3,2.12132,3, 0,0,1,2.202148,1.790839,3, 0,0,1,3,2.12132,3, 0,0,1,2.227275,1.720616,3, 0,0,1,2.245397,1.648269,3, 0,0,1,3,2.12132,3, 0,0,1,2.245397,1.648269,3, 0,0,1,3,1.798369,3, 0,0,1,1.798369,0,3, 0,0,1,1.720616,0.772725,3, 0,0,1,1.648269,0.754603,3, 0,0,1,1.720616,0.772725,3, 0,0,1,1.798369,0,3, 0,0,1,1.790839,0.797852,3, 0,0,1,1.790839,0.797852,3, 0,0,1,1.798369,0,3, 0,0,1,2.12132,0,3, 0,0,1,3,1.201631,3, 0,0,1,2.25634,1.425507,3, 0,0,1,2.245397,1.351731,3, 0,0,1,2.25634,1.425507,3, 0,0,1,3,1.201631,3, 0,0,1,2.26,1.5,3, 0,0,1,2.26,1.5,3, 0,0,1,3,1.201631,3, 0,0,1,3,1.5,3, 0,0,1,2.25634,1.574493,3, 0,0,1,3,1.798369,3, 0,0,1,2.245397,1.648269,3, 0,0,1,3,1.798369,3, 0,0,1,2.25634,1.574493,3, 0,0,1,2.26,1.5,3, 0,0,1,3,1.798369,3, 0,0,1,2.26,1.5,3, 0,0,1,3,1.5,3, 0,0,1,1.798369,0,3, 0,0,1,1.5,0.74,3, 0,0,1,1.5,0,3, 0,0,1,1.5,0.74,3, 0,0,1,1.798369,0,3, 0,0,1,1.574493,0.74366,3, 0,0,1,1.574493,0.74366,3, 0,0,1,1.798369,0,3, 0,0,1,1.648269,0.754603,3, 0,0,1,2.087488,1.982139,3, 0,0,1,3,3,3, 0,0,1,2.037401,2.037401,3, 0,0,1,3,3,3, 0,0,1,2.087488,1.982139,3, 0,0,1,2.131917,1.922233,3, 0,0,1,3,3,3, 0,0,1,2.131917,1.922233,3, 0,0,1,3,2.502268,3, 0.408248,0.408248,0.816497,3,3,3, 0.447214,0,0.894427,3,2.502268,3, 1,0,0,3,2.795,3, 0,0,1,1.982139,2.087488,3, 0,0,1,2.502268,3,3, 0,0,1,1.922233,2.131917,3, 0,0,1,2.502268,3,3, 0,0,1,1.982139,2.087488,3, 0,0,1,2.037401,2.037401,3, 0,0,1,2.502268,3,3, 0,0,1,2.037401,2.037401,3, 0,0,1,2.795,3,3, 0,0,1,2.795,3,3, 0,0,1,2.037401,2.037401,3, 0,0,1,3,3,3, 0,0,1,1.858262,2.17026,3, 0,0,1,2.12132,3,3, 0,0,1,1.790839,2.202148,3, 0,0,1,2.12132,3,3, 0,0,1,1.858262,2.17026,3, 0,0,1,1.922233,2.131917,3, 0,0,1,2.12132,3,3, 0,0,1,1.922233,2.131917,3, 0,0,1,2.502268,3,3, 0,0,1,1.425507,0.74366,3, 0,0,1,1.5,1.5,3, 0,0,1,1.351731,0.754603,3, 0,0,1,1.5,1.5,3, 0,0,1,1.425507,0.74366,3, 0,0,1,1.5,0.74,3, 0,0,1,1.5,1.5,3, 0,0,1,1.5,0.74,3, 0,0,1,1.574493,0.74366,3, 0,0,1,1.5,1.5,3, 0,0,1,1.574493,0.74366,3, 0,0,1,1.5,2.26,3, 0,0,1,1.5,2.26,3, 0,0,1,1.574493,0.74366,3, 0,0,1,1.574493,2.25634,3, 0,0,1,1.574493,2.25634,3, 0,0,1,1.574493,0.74366,3, 0,0,1,1.648269,0.754603,3, 0,0,1,1.574493,2.25634,3, 0,0,1,1.648269,0.754603,3, 0,0,1,1.648269,2.245397,3, 0,0,1,1.648269,2.245397,3, 0,0,1,1.648269,0.754603,3, 0,0,1,1.720616,0.772725,3, 0,0,1,1.648269,2.245397,3, 0,0,1,1.720616,0.772725,3, 0,0,1,1.720616,2.227275,3, 0,0,1,1.720616,2.227275,3, 0,0,1,1.720616,0.772725,3, 0,0,1,1.790839,0.797852,3, 0,0,1,1.720616,2.227275,3, 0,0,1,1.790839,0.797852,3, 0,0,1,1.790839,2.202148,3, 0,0,1,1.790839,2.202148,3, 0,0,1,1.790839,0.797852,3, 0,0,1,1.858262,0.82974,3, 0,0,1,1.790839,2.202148,3, 0,0,1,1.858262,0.82974,3, 0,0,1,1.858262,2.17026,3, 0,0,1,1.858262,2.17026,3, 0,0,1,1.858262,0.82974,3, 0,0,1,1.922233,0.868083,3, 0,0,1,1.858262,2.17026,3, 0,0,1,1.922233,0.868083,3, 0,0,1,1.922233,2.131917,3, 0,0,1,1.922233,2.131917,3, 0,0,1,1.922233,0.868083,3, 0,0,1,1.982139,2.087488,3, 0,0,1,1.982139,2.087488,3, 0,0,1,1.922233,0.868083,3, 0,0,1,1.982139,0.912512,3, 0,0,1,1.982139,2.087488,3, 0,0,1,1.982139,0.912512,3, 0,0,1,2.037401,0.962599,3, 0,0,1,1.982139,2.087488,3, 0,0,1,2.037401,0.962599,3, 0,0,1,2.037401,2.037401,3, 0,0,1,2.037401,2.037401,3, 0,0,1,2.037401,0.962599,3, 0,0,1,2.087488,1.017861,3, 0,0,1,2.037401,2.037401,3, 0,0,1,2.087488,1.017861,3, 0,0,1,2.087488,1.982139,3, 0,0,1,2.087488,1.982139,3, 0,0,1,2.087488,1.017861,3, 0,0,1,2.131917,1.077767,3, 0,0,1,2.087488,1.982139,3, 0,0,1,2.131917,1.077767,3, 0,0,1,2.131917,1.922233,3, 0,0,1,2.131917,1.922233,3, 0,0,1,2.131917,1.077767,3, 0,0,1,2.17026,1.141738,3, 0,0,1,2.131917,1.922233,3, 0,0,1,2.17026,1.141738,3, 0,0,1,2.17026,1.858262,3, 0,0,1,2.17026,1.858262,3, 0,0,1,2.17026,1.141738,3, 0,0,1,2.202148,1.209161,3, 0,0,1,2.17026,1.858262,3, 0,0,1,2.202148,1.209161,3, 0,0,1,2.202148,1.790839,3, 0,0,1,2.202148,1.790839,3, 0,0,1,2.202148,1.209161,3, 0,0,1,2.227275,1.279384,3, 0,0,1,2.202148,1.790839,3, 0,0,1,2.227275,1.279384,3, 0,0,1,2.227275,1.720616,3, 0,0,1,2.227275,1.720616,3, 0,0,1,2.227275,1.279384,3, 0,0,1,2.245397,1.351731,3, 0,0,1,2.227275,1.720616,3, 0,0,1,2.245397,1.351731,3, 0,0,1,2.245397,1.648269,3, 0,0,1,2.245397,1.648269,3, 0,0,1,2.245397,1.351731,3, 0,0,1,2.25634,1.574493,3, 0,0,1,2.25634,1.574493,3, 0,0,1,2.245397,1.351731,3, 0,0,1,2.25634,1.425507,3, 0,0,1,2.25634,1.574493,3, 0,0,1,2.25634,1.425507,3, 0,0,1,2.26,1.5,3, 0,0,1,1.5,1.5,3, 0,0,1,1.425507,2.25634,3, 0,0,1,1.351731,2.245397,3, 0,0,1,1.425507,2.25634,3, 0,0,1,1.5,1.5,3, 0,0,1,1.5,2.26,3, 0,-1,0,3,0,0.205, 0,-1,0,2.502268,0,0, 0,-1,0,3,0,0, 0,-1,0,2.502268,0,0, 0,-1,0,3,0,0.205, 0,-1,0,2.12132,0,0, 0,-1,0,2.12132,0,0, 0,-1,0,3,0,0.205, 0,-1,0,1.798369,0,0, 0,-1,0,1.798369,0,0, 0,-1,0,3,0,0.205, 0,-1,0,1.5,0,0, 0,-1,0,1.5,0,0, 0,-1,0,3,0,0.205, 0,-1,0,1.295,0,0, 0,-1,0,1.295,0,0, 0,-1,0,3,0,0.205, 0,-1,0,1.295,0,3, 0,-1,0,1.295,0,3, 0,-1,0,3,0,0.205, 0,-1,0,3,0,1.5, 0,-1,0,1.295,0,3, 0,-1,0,3,0,1.5, 0,-1,0,3,0,2.795, 0,-1,0,1.295,0,3, 0,-1,0,3,0,2.795, 0,-1,0,3,0,3, 0,0,1,1.295,0,3, 0,0,1,3,0,3, 0,0,1,2.502268,0,3, 0,0,1,1.295,0,3, 0,0,1,2.502268,0,3, 0,0,1,2.12132,0,3, 0,0,1,1.295,0,3, 0,0,1,2.12132,0,3, 0,0,1,1.798369,0,3, 0,0,1,1.295,0,3, 0,0,1,1.798369,0,3, 0,0,1,1.5,0,3, -1,0,0,1.295,0.469395,3, -1,0,0,1.295,0,0, -1,0,0,1.295,0,3, -1,0,0,1.295,0,0, -1,0,0,1.295,0.469395,3, -1,0,0,1.295,0.469395,0, -1,0,0,1.295,0.469395,0, -1,0,0,1.295,0.469395,3, -1,0,0,1.295,0.768814,0, -1,0,0,1.295,0.768814,0, -1,0,0,1.295,0.469395,3, -1,0,0,1.295,0.768814,3, -1,0,0,1.295,0.768814,0, -1,0,0,1.295,0.768814,3, -1,0,0,1.295,1.005086,3, -1,0,0,1.295,0.768814,0, -1,0,0,1.295,1.005086,3, -1,0,0,1.295,1.005086,0, -1,0,0,1.295,1.005086,0, -1,0,0,1.295,1.005086,3, -1,0,0,1.295,1.193196,0, -1,0,0,1.295,1.193196,0, -1,0,0,1.295,1.005086,3, -1,0,0,1.295,1.193196,3, -1,0,0,1.295,1.193196,0, -1,0,0,1.295,1.193196,3, -1,0,0,1.295,1.295,0, -1,0,0,1.295,1.295,0, -1,0,0,1.295,1.193196,3, -1,0,0,1.295,1.295,3, -1,0,0,1.295,1.295,0, -1,0,0,1.295,1.295,3, -1,0,0,1.295,1.363023,0, -1,0,0,1.295,1.363023,0, -1,0,0,1.295,1.295,3, -1,0,0,1.295,1.363023,3, -1,0,0,1.295,1.363023,0, -1,0,0,1.295,1.363023,3, -1,0,0,1.295,1.415086,3, -1,0,0,1.295,1.363023,0, -1,0,0,1.295,1.415086,3, -1,0,0,1.295,1.415086,0, -1,0,0,1.295,1.415086,0, -1,0,0,1.295,1.415086,3, -1,0,0,1.295,1.459223,3, -1,0,0,1.295,1.415086,0, -1,0,0,1.295,1.459223,3, -1,0,0,1.295,1.459223,0, -1,0,0,1.295,1.459223,0, -1,0,0,1.295,1.459223,3, -1,0,0,1.295,1.5,3, -1,0,0,1.295,1.459223,0, -1,0,0,1.295,1.5,3, -1,0,0,1.295,1.5,0, 0,1,0,1.5,3,3, 0,1,0,1.5,3,2.795, 0,1,0,1.295,3,3, 0,1,0,1.5,3,0.205, 0,1,0,1.5,3,0, 0,1,0,1.295,3,0, 0,1,0,1.5,3,0.205, 0,1,0,1.798369,3,0, 0,1,0,1.5,3,0, 0,1,0,1.798369,3,0, 0,1,0,1.5,3,0.205, 0,1,0,2.12132,3,0, 0,1,0,2.12132,3,0, 0,1,0,1.5,3,0.205, 0,1,0,2.502268,3,0, 0,1,0,2.502268,3,0, 0,1,0,1.5,3,0.205, 0,1,0,2.795,3,0, 0,1,0,2.795,3,0, 0,1,0,1.5,3,0.205, 0,1,0,2.795,3,0.205, 0,1,0,2.1475,3,0.8525, 0,1,0,2.795,3,0.205, 0,1,0,1.5,3,0.205, 0,1,0,2.795,3,0.205, 0,1,0,3,3,0, 0,1,0,2.795,3,0, 0,1,0,3,3,3, 0,1,0,3,3,2.795, 0,1,0,2.795,3,2.795, 0,1,0,2.795,3,1.5, 0,1,0,3,3,0.205, 0,1,0,2.795,3,0.205, 0,1,0,3,3,0.205, 0,1,0,2.795,3,1.5, 0,1,0,3,3,1.5, 0,1,0,2.1475,3,1.715833, 0,1,0,2.795,3,1.5, 0,1,0,2.1475,3,1.5, 0,1,0,2.795,3,1.5, 0,1,0,2.1475,3,1.715833, 0,1,0,2.1475,3,2.1475, 0,1,0,2.795,3,2.795, 0,1,0,3,3,1.5, 0,1,0,2.795,3,1.5, 0,1,0,3,3,1.5, 0,1,0,2.795,3,2.795, 0,1,0,3,3,2.795, 0,1,0,1.5,3,3, 0,1,0,2.795,3,2.795, 0,1,0,1.5,3,2.795, 0,1,0,2.795,3,2.795, 0,1,0,1.5,3,3, 0,1,0,2.502268,3,3, 0,1,0,2.795,3,2.795, 0,1,0,2.502268,3,3, 0,1,0,2.795,3,3, 0,0.447214,0.894427,2.502268,3,3, 0,0.514496,0.857493,1.5,3,3, 0,0,1,1.798369,3,3, 0,0.447214,0.894427,2.502268,3,3, 0,0,1,1.798369,3,3, 0,0,1,2.12132,3,3, 0,1,0,2.1475,3,1.284167, 0,1,0,2.795,3,1.5, 0,1,0,2.1475,3,0.8525, 0,1,0,2.795,3,1.5, 0,1,0,2.1475,3,1.284167, 0,1,0,2.1475,3,1.5, 0,1,0,1.71462,3,1.5, 0,1,0,1.715833,3,1.274121, 0,1,0,1.71462,3,1.272856, 0,1,0,1.715833,3,1.274121, 0,1,0,1.71462,3,1.5, 0,1,0,2.1475,3,1.284167, 0,1,0,2.1475,3,1.284167, 0,1,0,1.71462,3,1.5, 0,1,0,2.1475,3,1.5, 0,1,0,2.1475,3,1.284167, 0,1,0,1.715833,3,0.8525, 0,1,0,1.715833,3,1.274121, 0,1,0,1.71462,3,1.725471, 0,1,0,2.1475,3,1.5, 0,1,0,1.71462,3,1.5, 0,1,0,2.1475,3,1.5, 0,1,0,1.71462,3,1.725471, 0,1,0,2.1475,3,1.715833, 0,1,0,2.1475,3,1.715833, 0,1,0,1.71462,3,1.725471, 0,1,0,1.715833,3,1.725471, 0,1,0,2.1475,3,1.715833, 0,1,0,1.715833,3,1.725471, 0,1,0,1.715833,3,2.1475, 0,1,0,1.5,3,1.5, 0,1,0,1.521805,3,1.188262, 0,1,0,1.5,3,1.187809, 0,1,0,1.521805,3,1.188262, 0,1,0,1.5,3,1.5, 0,1,0,1.552255,3,1.1919, 0,1,0,1.552255,3,1.1919, 0,1,0,1.5,3,1.5, 0,1,0,1.582203,3,1.198505, 0,1,0,1.582203,3,1.198505, 0,1,0,1.5,3,1.5, 0,1,0,1.611359,3,1.208015, 0,1,0,1.611359,3,1.208015, 0,1,0,1.5,3,1.5, 0,1,0,1.639442,3,1.220336, 0,1,0,1.639442,3,1.220336, 0,1,0,1.5,3,1.5, 0,1,0,1.666182,3,1.23535, 0,1,0,1.666182,3,1.23535, 0,1,0,1.5,3,1.5, 0,1,0,1.691322,3,1.252913, 0,1,0,1.691322,3,1.252913, 0,1,0,1.5,3,1.5, 0,1,0,1.71462,3,1.272856, 0,1,0,1.5,3,1.812191, 0,1,0,1.71462,3,1.725471, 0,1,0,1.5,3,1.5, 0,1,0,1.71462,3,1.725471, 0,1,0,1.5,3,1.812191, 0,1,0,1.705014,3,1.73585, 0,1,0,1.705014,3,1.73585, 0,1,0,1.5,3,1.812191, 0,1,0,1.68091,3,1.75481, 0,1,0,1.68091,3,1.75481, 0,1,0,1.5,3,1.812191, 0,1,0,1.655063,3,1.771315, 0,1,0,1.655063,3,1.771315, 0,1,0,1.5,3,1.812191, 0,1,0,1.627723,3,1.785207, 0,1,0,1.627723,3,1.785207, 0,1,0,1.5,3,1.812191, 0,1,0,1.599152,3,1.796353, 0,1,0,1.599152,3,1.796353, 0,1,0,1.5,3,1.812191, 0,1,0,1.569627,3,1.804645, 0,1,0,1.569627,3,1.804645, 0,1,0,1.5,3,1.812191, 0,1,0,1.539432,3,1.810002, 0,1,0,1.539432,3,1.810002, 0,1,0,1.5,3,1.812191, 0,1,0,1.508856,3,1.812374, 0,1,0,1.71462,3,1.725471, 0,1,0,1.71462,3,1.5, 0,1,0,1.5,3,1.5, 0,1,0,1.71462,3,1.5, 0,1,0,1.71462,3,1.272856, 0,1,0,1.5,3,1.5, 0,1,0,2.795,3,2.795, 0,1,0,2.1475,3,2.1475, 0,1,0,1.5,3,2.795, 0,1,0,2.795,3,3, 0,1,0,3,3,3, 0,1,0,2.795,3,2.795, 0,1,0,2.795,3,1.5, 0,1,0,2.795,3,0.205, 0,1,0,2.1475,3,0.8525, 0,1,0,3,3,0.205, 0,1,0,3,3,0, 0,1,0,2.795,3,0.205, 1,0,0,3,0.205,0.205, 1,0,0,3,0,0.205, 1,0,0,3,0,0, 1,0,0,3,3,0.205, 1,0,0,3,2.795,1.5, 1,0,0,3,2.795,0.205, 1,0,0,3,2.795,1.5, 1,0,0,3,3,0.205, 1,0,0,3,3,1.5, 1,0,0,3,3,1.5, 1,0,0,3,2.795,2.795, 1,0,0,3,2.795,1.5, 1,0,0,3,2.795,2.795, 1,0,0,3,3,1.5, 1,0,0,3,3,2.795, 1,0,0,3,1.5,2.795, 1,0,0,3,0.205,3, 1,0,0,3,0.205,2.795, 1,0,0,3,0.205,3, 1,0,0,3,1.5,2.795, 1,0,0,3,0.497732,3, 1,0,0,3,0.497732,3, 1,0,0,3,1.5,2.795, 1,0,0,3,0.87868,3, 1,0,0,3,0.87868,3, 1,0,0,3,1.5,2.795, 1,0,0,3,1.201631,3, 1,0,0,3,1.201631,3, 1,0,0,3,1.5,2.795, 1,0,0,3,1.5,3, 1,0,0,3,0.205,1.5, 1,0,0,3,0,2.795, 1,0,0,3,0,1.5, 1,0,0,3,0,2.795, 1,0,0,3,0.205,1.5, 1,0,0,3,0.205,2.795, 1,0,0,3,0.205,0.205, 1,0,0,3,0,1.5, 1,0,0,3,0,0.205, 1,0,0,3,0,1.5, 1,0,0,3,0.205,0.205, 1,0,0,3,0.205,1.5, 1,0,0,3,0.205,2.795, 1,0,0,3,0,3, 1,0,0,3,0,2.795, 1,0,0,3,0.205,3, 1,0,0,3,0,3, 1,0,0,3,0.205,2.795, 1,0,0,3,3,0.205, 1,0,0,3,2.795,0.205, 1,0,0,3,3,0, 1,0,0,3,1.5,0.205, 1,0,0,3,0.205,1.5, 1,0,0,3,0.205,0.205, 1,0,0,3,0.205,1.5, 1,0,0,3,1.5,2.795, 1,0,0,3,0.205,2.795, 1,0,0,3,1.5,2.795, 1,0,0,3,0.205,1.5, 1,0,0,3,1.5,0.205, 1,0,0,3,1.5,2.795, 1,0,0,3,1.5,0.205, 1,0,0,3,2.795,0.205, 1,0,0,3,1.5,2.795, 1,0,0,3,2.795,0.205, 1,0,0,3,2.795,2.795, 1,0,0,3,2.795,2.795, 1,0,0,3,2.795,0.205, 1,0,0,3,2.795,1.5, 1,0,0,3,3,0, 1,0,0,3,2.795,0.205, 1,0,0,3,2.795,0, 1,0,0,3,3,3, 1,0,0,3,2.795,2.795, 1,0,0,3,3,2.795, 1,0,0,3,0.497732,0, 1,0,0,3,0.205,0.205, 1,0,0,3,0.205,0, 1,0,0,3,0.205,0.205, 1,0,0,3,0.497732,0, 1,0,0,3,1.5,0.205, 1,0,0,3,1.5,0.205, 1,0,0,3,0.497732,0, 1,0,0,3,0.87868,0, 1,0,0,3,1.5,0.205, 1,0,0,3,0.87868,0, 1,0,0,3,1.201631,0, 1,0,0,3,1.5,0.205, 1,0,0,3,1.201631,0, 1,0,0,3,1.5,0, 1,0,0,3,2.795,2.795, 1,0,0,3,1.5,3, 1,0,0,3,1.5,2.795, 1,0,0,3,1.5,3, 1,0,0,3,2.795,2.795, 1,0,0,3,1.798369,3, 1,0,0,3,1.798369,3, 1,0,0,3,2.795,2.795, 1,0,0,3,2.12132,3, 1,0,0,3,2.12132,3, 1,0,0,3,2.795,2.795, 1,0,0,3,2.502268,3, 1,0,0,3,2.502268,3, 1,0,0,3,2.795,2.795, 1,0,0,3,2.795,3, 1,0,0,3,1.5,0, 1,0,0,3,2.795,0.205, 1,0,0,3,1.5,0.205, 1,0,0,3,2.795,0.205, 1,0,0,3,1.5,0, 1,0,0,3,1.798369,0, 1,0,0,3,2.795,0.205, 1,0,0,3,1.798369,0, 1,0,0,3,2.12132,0, 1,0,0,3,2.795,0.205, 1,0,0,3,2.12132,0, 1,0,0,3,2.502268,0, 1,0,0,3,2.795,0.205, 1,0,0,3,2.502268,0, 1,0,0,3,2.795,0, 1,0,0,3,3,3, 1,0,0,3,2.795,3, 1,0,0,3,2.795,2.795 }; static const struct gllist lament_model_taser_base_frame = { GL_N3F_V3F, GL_TRIANGLES, 1362, lament_model_taser_base_data, 0 }; const struct gllist *lament_model_taser_base = &lament_model_taser_base_frame; static const float lament_model_tetra_base_data[] = { 0.57735,0.57735,0.57735,0,3,3, 0.57735,0.57735,0.57735,3,0,3, 0.57735,0.57735,0.57735,3,3,0, -0.57735,-0.57735,0.57735,0,3,3, -0.57735,-0.57735,0.57735,0,0,0, -0.57735,-0.57735,0.57735,3,0,3, -0.57735,0.57735,-0.57735,3,3,0, -0.57735,0.57735,-0.57735,0,0,0, -0.57735,0.57735,-0.57735,0,3,3, 0.57735,-0.57735,-0.57735,3,3,0, 0.57735,-0.57735,-0.57735,3,0,3, 0.57735,-0.57735,-0.57735,0,0,0 }; static const struct gllist lament_model_tetra_base_frame = { GL_N3F_V3F, GL_TRIANGLES, 12, lament_model_tetra_base_data, 0 }; const struct gllist *lament_model_tetra_base = &lament_model_tetra_base_frame; static const float lament_model_tetra_dse_data[] = { 0,-1,0,2.795,0,1.5, 0,-1,0,0.8525,0,0.8525, 0,-1,0,1.5,0,0.205, 0,-1,0,0.8525,0,0.8525, 0,-1,0,2.795,0,1.5, 0,-1,0,2.1475,0,2.1475, 0,0,-1,3,3,0, 0,0,-1,0.205,0,0, 0,0,-1,0,0,0, 0,0,-1,0.205,0,0, 0,0,-1,3,3,0, 0,0,-1,1.5,0,0, 0,0,-1,1.5,0,0, 0,0,-1,3,3,0, 0,0,-1,2.795,0,0, 0,0,-1,2.795,0,0, 0,0,-1,3,3,0, 0,0,-1,3,0,0, 1,0,0,3,3,0, 1,0,0,3,0,0.205, 1,0,0,3,0,0, 1,0,0,3,0,0.205, 1,0,0,3,3,0, 1,0,0,3,0,1.5, 1,0,0,3,0,1.5, 1,0,0,3,3,0, 1,0,0,3,0,2.795, 1,0,0,3,0,2.795, 1,0,0,3,3,0, 1,0,0,3,0,3, -0.57735,0.57735,0.57735,3,3,0, -0.57735,0.57735,0.57735,2.795,0,2.795, -0.57735,0.57735,0.57735,3,0,3, -0.57735,0.57735,0.57735,2.795,0,2.795, -0.57735,0.57735,0.57735,3,3,0, -0.57735,0.57735,0.57735,2.1475,0,2.1475, -0.57735,0.57735,0.57735,2.1475,0,2.1475, -0.57735,0.57735,0.57735,3,3,0, -0.57735,0.57735,0.57735,0.8525,0,0.8525, -0.57735,0.57735,0.57735,0.8525,0,0.8525, -0.57735,0.57735,0.57735,3,3,0, -0.57735,0.57735,0.57735,0.205,0,0.205, -0.57735,0.57735,0.57735,0.205,0,0.205, -0.57735,0.57735,0.57735,3,3,0, -0.57735,0.57735,0.57735,0,0,0, 0,-1,0,0.205,0,0.205, 0,-1,0,0,0,0, 0,-1,0,0.205,0,0, 0,-1,0,2.795,0,2.795, 0,-1,0,2.1475,0,2.1475, 0,-1,0,2.795,0,1.5, 0,-1,0,0.8525,0,0.8525, 0,-1,0,0.205,0,0.205, 0,-1,0,1.5,0,0.205, 0,-1,0,3,0,3, 0,-1,0,2.795,0,2.795, 0,-1,0,3,0,2.795, 0,-1,0,3,0,0.205, 0,-1,0,2.795,0,0, 0,-1,0,3,0,0, 0,-1,0,2.795,0,0, 0,-1,0,3,0,0.205, 0,-1,0,2.795,0,0.205, 0,-1,0,1.5,0,0.205, 0,-1,0,0.205,0,0, 0,-1,0,1.5,0,0, 0,-1,0,0.205,0,0, 0,-1,0,1.5,0,0.205, 0,-1,0,0.205,0,0.205, 0,-1,0,3,0,2.795, 0,-1,0,2.795,0,1.5, 0,-1,0,3,0,1.5, 0,-1,0,2.795,0,1.5, 0,-1,0,3,0,2.795, 0,-1,0,2.795,0,2.795, 0,-1,0,2.795,0,0.205, 0,-1,0,1.5,0,0, 0,-1,0,2.795,0,0, 0,-1,0,1.5,0,0, 0,-1,0,2.795,0,0.205, 0,-1,0,1.5,0,0.205, 0,-1,0,3,0,1.5, 0,-1,0,2.795,0,0.205, 0,-1,0,3,0,0.205, 0,-1,0,2.795,0,0.205, 0,-1,0,3,0,1.5, 0,-1,0,2.795,0,1.5, 0,-1,0,2.795,0,1.5, 0,-1,0,1.5,0,0.205, 0,-1,0,2.795,0,0.205 }; static const struct gllist lament_model_tetra_dse_frame = { GL_N3F_V3F, GL_TRIANGLES, 90, lament_model_tetra_dse_data, 0 }; const struct gllist *lament_model_tetra_dse = &lament_model_tetra_dse_frame; static const float lament_model_tetra_dwn_data[] = { 0,1,0,2.1475,3,0.8525, 0,1,0,2.795,3,0.205, 0,1,0,1.5,3,0.205, -1,0,0,0,3,3, -1,0,0,0,3,0, -1,0,0,0,0,0, -0.57735,0.57735,-0.57735,0,3,0, -0.265408,0.893371,0.362555,0,3,3, 0,1,0,0,3,2.795, -0.57735,0.57735,-0.57735,0,3,0, 0,1,0,0,3,2.795, 0,1,0,0,3,1.5, -0.57735,0.57735,-0.57735,0,3,0, 0,1,0,0,3,1.5, 0,1,0,0,3,0.205, 0,0,-1,0.205,3,0, 0,0,-1,0,0,0, 0,0,-1,0,3,0, 0,0,-1,0,0,0, 0,0,-1,0.205,3,0, 0,0,-1,3,3,0, 0.694747,0.50859,-0.50859,3,3,0, 0,0.83205,-0.5547,0.205,3,0, 0,1,0,1.5,3,0, 0.694747,0.50859,-0.50859,3,3,0, 0,1,0,1.5,3,0, 0,1,0,2.795,3,0, 0.57735,-0.57735,0.57735,2.795,3,0.205, 0.57735,-0.57735,0.57735,0,0,0, 0.57735,-0.57735,0.57735,3,3,0, 0.57735,-0.57735,0.57735,0,0,0, 0.57735,-0.57735,0.57735,2.795,3,0.205, 0.57735,-0.57735,0.57735,0,3,3, -0.265408,0.893371,0.362555,0,3,3, 0.468609,0.748873,0.468609,2.795,3,0.205, 0,1,0,2.1475,3,0.8525, -0.265408,0.893371,0.362555,0,3,3, 0,1,0,2.1475,3,0.8525, 0,1,0,0.8525,3,2.1475, 0,1,0,0,3,3, 0,1,0,0.8525,3,2.1475, 0,1,0,0.205,3,2.795, 0,1,0,0.205,3,1.5, 0,1,0,2.1475,3,0.8525, 0,1,0,1.5,3,0.205, 0,1,0,2.1475,3,0.8525, 0,1,0,0.205,3,1.5, 0,1,0,0.8525,3,2.1475, 0,1,0,0,3,0.205, 0,1,0,0.205,3,0, 0,1,0,0,3,0, 0,1,0,0.205,3,0, 0,1,0,0,3,0.205, 0,1,0,0.205,3,0.205, 0,1,0,2.795,3,0.205, 0,1,0,3,3,0, 0,1,0,2.795,3,0, 0,1,0,1.5,3,0.205, 0,1,0,2.795,3,0, 0,1,0,1.5,3,0, 0,1,0,2.795,3,0, 0,1,0,1.5,3,0.205, 0,1,0,2.795,3,0.205, 0,1,0,0.205,3,2.795, 0,1,0,0.8525,3,2.1475, 0,1,0,0.205,3,1.5, 0,1,0,0,3,3, 0,1,0,0.205,3,2.795, 0,1,0,0,3,2.795, 0,1,0,0,3,2.795, 0,1,0,0.205,3,1.5, 0,1,0,0,3,1.5, 0,1,0,0.205,3,1.5, 0,1,0,0,3,2.795, 0,1,0,0.205,3,2.795, 0,1,0,0,3,1.5, 0,1,0,0.205,3,0.205, 0,1,0,0,3,0.205, 0,1,0,0.205,3,0.205, 0,1,0,0,3,1.5, 0,1,0,0.205,3,1.5, 0,1,0,0.205,3,0.205, 0,1,0,1.5,3,0, 0,1,0,0.205,3,0, 0,1,0,1.5,3,0, 0,1,0,0.205,3,0.205, 0,1,0,1.5,3,0.205, 0,1,0,0.205,3,1.5, 0,1,0,1.5,3,0.205, 0,1,0,0.205,3,0.205 }; static const struct gllist lament_model_tetra_dwn_frame = { GL_N3F_V3F, GL_TRIANGLES, 90, lament_model_tetra_dwn_data, 0 }; const struct gllist *lament_model_tetra_dwn = &lament_model_tetra_dwn_frame; static const float lament_model_tetra_une_data[] = { 1,0,0,3,3,0, 1,0,0,3,3,3, 1,0,0,3,0,3, 0.57735,0.57735,0.57735,3,3,3, 0.50859,0.50859,-0.694747,3,3,0, 0,1,0,3,3,0.205, 0.57735,0.57735,0.57735,3,3,3, 0,1,0,3,3,0.205, 0,1,0,3,3,1.5, 0.57735,0.57735,0.57735,3,3,3, 0,1,0,3,3,1.5, 0,1,0,3,3,2.795, 0,0,1,3,0,3, 0,0,1,0.205,3,3, 0,0,1,0,3,3, 0,0,1,0.205,3,3, 0,0,1,3,0,3, 0,0,1,1.5,3,3, 0,0,1,1.5,3,3, 0,0,1,3,0,3, 0,0,1,2.795,3,3, 0,0,1,2.795,3,3, 0,0,1,3,0,3, 0,0,1,3,3,3, 0,1,0,2.795,3,1.5, 0,1,0,2.795,3,0.205, 0,1,0,2.1475,3,0.8525, 0,1,0,3,3,0.205, 0,1,0,3,3,0, 0,1,0,2.795,3,0.205, -0.57735,-0.57735,-0.57735,3,0,3, -0.57735,-0.57735,-0.57735,2.795,3,0.205, -0.57735,-0.57735,-0.57735,3,3,0, -0.57735,-0.57735,-0.57735,2.795,3,0.205, -0.57735,-0.57735,-0.57735,3,0,3, -0.57735,-0.57735,-0.57735,2.1475,3,0.8525, -0.57735,-0.57735,-0.57735,2.1475,3,0.8525, -0.57735,-0.57735,-0.57735,3,0,3, -0.57735,-0.57735,-0.57735,0.8525,3,2.1475, -0.57735,-0.57735,-0.57735,0.8525,3,2.1475, -0.57735,-0.57735,-0.57735,3,0,3, -0.57735,-0.57735,-0.57735,0.205,3,2.795, -0.57735,-0.57735,-0.57735,0.205,3,2.795, -0.57735,-0.57735,-0.57735,3,0,3, -0.57735,-0.57735,-0.57735,0,3,3, 0,1,0,2.795,3,2.795, 0,1,0,3,3,1.5, 0,1,0,2.795,3,1.5, 0,1,0,3,3,1.5, 0,1,0,2.795,3,2.795, 0,1,0,3,3,2.795, 0,1,0,2.795,3,1.5, 0,1,0,3,3,0.205, 0,1,0,2.795,3,0.205, 0,1,0,3,3,0.205, 0,1,0,2.795,3,1.5, 0,1,0,3,3,1.5, 0,1,0,0.205,3,3, 0,1,0,0.205,3,2.795, 0,1,0,0,3,3, 0,1,0,1.5,3,2.795, 0,1,0,0.8525,3,2.1475, 0,1,0,0.205,3,2.795, 0,1,0,0.205,3,3, 0,1,0,1.5,3,2.795, 0,1,0,0.205,3,2.795, 0,1,0,1.5,3,2.795, 0,1,0,0.205,3,3, 0,1,0,1.5,3,3, 0,1,0,0.8525,3,2.1475, 0,1,0,2.795,3,1.5, 0,1,0,2.1475,3,0.8525, 0,1,0,2.795,3,1.5, 0,1,0,0.8525,3,2.1475, 0,1,0,1.5,3,2.795, 0,1,0,2.795,3,3, 0,1,0,3,3,2.795, 0,1,0,2.795,3,2.795, 0,1,0,3,3,2.795, 0,1,0,2.795,3,3, 0,1,0,3,3,3, 0,1,0,2.795,3,2.795, 0,1,0,2.795,3,1.5, 0,1,0,1.5,3,2.795, 0,1,0,1.5,3,3, 0,1,0,2.795,3,2.795, 0,1,0,1.5,3,2.795, 0,1,0,2.795,3,2.795, 0,1,0,1.5,3,3, 0,1,0,2.795,3,3 }; static const struct gllist lament_model_tetra_une_frame = { GL_N3F_V3F, GL_TRIANGLES, 90, lament_model_tetra_une_data, 0 }; const struct gllist *lament_model_tetra_une = &lament_model_tetra_une_frame; static const float lament_model_tetra_usw_data[] = { 0,-1,0,2.1475,0,2.1475, 0,-1,0,0.205,0,1.5, 0,-1,0,0.8525,0,0.8525, 0,-1,0,0.205,0,1.5, 0,-1,0,2.1475,0,2.1475, 0,-1,0,1.5,0,2.795, 0,0,1,0.205,0,3, 0,0,1,0,3,3, 0,0,1,0,0,3, 0,0,1,0,3,3, 0,0,1,0.205,0,3, 0,0,1,3,0,3, 0.694747,-0.50859,0.50859,3,0,3, 0,-0.83205,0.5547,0.205,0,3, 0,-1,0,1.5,0,3, 0.694747,-0.50859,0.50859,3,0,3, 0,-1,0,1.5,0,3, 0,-1,0,2.795,0,3, -1,0,0,0,3,3, -1,0,0,0,0,2.795, -1,0,0,0,0,3, -1,0,0,0,0,2.795, -1,0,0,0,3,3, -1,0,0,0,0,1.5, -1,0,0,0,0,1.5, -1,0,0,0,3,3, -1,0,0,0,0,0.205, -1,0,0,0,0,0.205, -1,0,0,0,3,3, -1,0,0,0,0,0, 0.57735,0.57735,-0.57735,0,3,3, 0.57735,0.57735,-0.57735,0.205,0,0.205, 0.57735,0.57735,-0.57735,0,0,0, 0.57735,0.57735,-0.57735,0.205,0,0.205, 0.57735,0.57735,-0.57735,0,3,3, 0.57735,0.57735,-0.57735,0.8525,0,0.8525, 0.57735,0.57735,-0.57735,0.8525,0,0.8525, 0.57735,0.57735,-0.57735,0,3,3, 0.57735,0.57735,-0.57735,2.1475,0,2.1475, 0.57735,0.57735,-0.57735,2.1475,0,2.1475, 0.57735,0.57735,-0.57735,0,3,3, 0.57735,0.57735,-0.57735,2.795,0,2.795, 0.57735,0.57735,-0.57735,2.795,0,2.795, 0.57735,0.57735,-0.57735,0,3,3, 0.57735,0.57735,-0.57735,3,0,3, 0,-1,0,0.205,0,1.5, 0,-1,0,0.205,0,0.205, 0,-1,0,0.8525,0,0.8525, 0,-1,0,2.795,0,3, 0,-1,0,1.5,0,2.795, 0,-1,0,2.795,0,2.795, 0,-1,0,1.5,0,2.795, 0,-1,0,2.795,0,3, 0,-1,0,1.5,0,3, 0,-1,0,1.5,0,2.795, 0,-1,0,2.1475,0,2.1475, 0,-1,0,2.795,0,2.795, 0,-1,0,0,0,0.205, 0,-1,0,0,0,0, 0,-1,0,0.205,0,0.205, 0,-1,0,0.205,0,3, 0,-1,0,0,0,2.795, 0,-1,0,0.205,0,2.795, 0,-1,0,0,0,2.795, 0,-1,0,0.205,0,3, 0,-1,0,0,0,3, 0,-1,0,0.205,0,2.795, 0,-1,0,0,0,1.5, 0,-1,0,0.205,0,1.5, 0,-1,0,0,0,1.5, 0,-1,0,0.205,0,2.795, 0,-1,0,0,0,2.795, 0,-1,0,1.5,0,3, 0,-1,0,0.205,0,2.795, 0,-1,0,1.5,0,2.795, 0,-1,0,0.205,0,2.795, 0,-1,0,1.5,0,3, 0,-1,0,0.205,0,3, 0,-1,0,0.205,0,1.5, 0,-1,0,0,0,0.205, 0,-1,0,0.205,0,0.205, 0,-1,0,0,0,0.205, 0,-1,0,0.205,0,1.5, 0,-1,0,0,0,1.5, 0,-1,0,0.205,0,2.795, 0,-1,0,0.205,0,1.5, 0,-1,0,1.5,0,2.795, 0,-1,0,2.795,0,3, 0,-1,0,2.795,0,2.795, 0,-1,0,3,0,3 }; static const struct gllist lament_model_tetra_usw_frame = { GL_N3F_V3F, GL_TRIANGLES, 90, lament_model_tetra_usw_data, 0 }; const struct gllist *lament_model_tetra_usw = &lament_model_tetra_usw_frame; xscreensaver-5.36/hacks/glx/moebius.c000644 000767 000024 00000053141 12710313217 017631 0ustar00jwzstaff000000 000000 /* -*- Mode: C; tab-width: 4 -*- */ /* moebius --- Moebius Strip II, an Escher-like GL scene with ants. */ #if 0 static const char sccsid[] = "@(#)moebius.c 5.01 2001/03/01 xlockmore"; #endif /*- * Permission to use, copy, modify, and distribute this software and its * documentation for any purpose and without fee is hereby granted, * provided that the above copyright notice appear in all copies and that * both that copyright notice and this permission notice appear in * supporting documentation. * * This file is provided AS IS with no warranties of any kind. The author * shall have no liability with respect to the infringement of copyrights, * trade secrets or any patents by this file or any part thereof. In no * event will the author be liable for any lost revenue or profits or * other special, indirect and consequential damages. * * The RotateAroundU() routine was adapted from the book * "Computer Graphics Principles and Practice * Foley - vanDam - Feiner - Hughes * Second Edition" Pag. 227, exercise 5.15. * * This mode shows some interesting scenes that are impossible OR very * wierd to build in the real universe. Much of the scenes are inspirated * on Mauritz Cornelis Escher's works which derivated the mode's name. * M.C. Escher (1898-1972) was a dutch artist and many people prefer to * say he was a mathematician. * * Thanks goes to Brian Paul for making it possible and inexpensive to use * OpenGL at home. * * Since I'm not a native English speaker, my apologies for any grammatical * mistakes. * * My e-mail address is * mfvianna@centroin.com.br * * Marcelo F. Vianna (Jun-01-1997) * * Revision History: * 05-Apr-2002: Removed all gllist uses (fix some bug with nvidia driver) * 01-Mar-2001: backported from xscreensaver by lassauge@mail.dotcom.fr * Feb-2001: Made motion and rotation be smoother Jamie Zawinski * * 01-Nov-2000: Allocation checks * 01-Jan-1998: Mode separated from escher and renamed * 08-Jun-1997: New scene implemented: "Impossible Cage" based in a M.C. * Escher's painting with the same name (quite similar). The * first GL mode to use texture mapping. * The "Impossible Cage" scene doesn't use DEPTH BUFFER, the * wood planks are drawn consistently using GL_CULL_FACE, and * the painter's algorithm is used to sort the planks. * Marcelo F. Vianna. * 07-Jun-1997: Speed ups in Moebius Strip using GL_CULL_FACE. * Marcelo F. Vianna. * 03-Jun-1997: Initial Release (Only one scene: "Moebius Strip") * The Moebius Strip scene was inspirated in a M.C. Escher's * painting named Moebius Strip II in wich ants walk across a * Moebius Strip path, sometimes meeting each other and sometimes * being in "opposite faces" (note that the moebius strip has * only one face and one edge). * Marcelo F. Vianna. */ /*- * Texture mapping is only available on RGBA contexts, Mono and color index * visuals DO NOT support texture mapping in OpenGL. * * BUT Mesa do implements RGBA contexts in pseudo color visuals, so texture * mapping shuld work on PseudoColor, DirectColor, TrueColor using Mesa. Mono * is not officially supported for both OpenGL and Mesa, but seems to not crash * Mesa. * * In real OpenGL, PseudoColor DO NOT support texture map (as far as I know). */ #ifdef STANDALONE # define MODE_moebius # define refresh_moebius 0 # define DEFAULTS "*delay: 20000 \n" \ "*showFPS: False \n" \ "*suppressRotationAnimation: True\n" \ # include "xlockmore.h" /* from the xscreensaver distribution */ #else /* !STANDALONE */ # include "xlock.h" /* from the xlockmore distribution */ #endif /* !STANDALONE */ #ifdef HAVE_JWXYZ # include "jwxyz.h" #else # include # include # include #endif #ifdef HAVE_JWZGLES # include "jwzgles.h" #endif /* HAVE_JWZGLES */ #ifdef MODE_moebius #if 0 /* Hey, this never actually used the texture at all! */ #if 0 #include "e_textures.h" #else #include "xpm-ximage.h" #include "../images/wood.xpm" #endif #endif /* 0 */ #include "sphere.h" #include "tube.h" #include "rotator.h" #include "gltrackball.h" #define DEF_SOLIDMOEBIUS "False" #define DEF_DRAWANTS "True" static int solidmoebius; static int drawants; static XrmOptionDescRec opts[] = { {"-solidmoebius", ".moebius.solidmoebius", XrmoptionNoArg, "on"}, {"+solidmoebius", ".moebius.solidmoebius", XrmoptionNoArg, "off"}, {"-ants", ".moebius.drawants", XrmoptionNoArg, "on"}, {"+ants", ".moebius.drawants", XrmoptionNoArg, "off"} }; static argtype vars[] = { {&solidmoebius, "solidmoebius", "Solidmoebius", DEF_SOLIDMOEBIUS, t_Bool}, {&drawants, "drawants", "Drawants", DEF_DRAWANTS, t_Bool} }; static OptionStruct desc[] = { {"-/+solidmoebius", "select between a SOLID or a NET Moebius Strip"}, {"-/+drawants", "turn on/off walking ants"} }; ENTRYPOINT ModeSpecOpt moebius_opts = {sizeof opts / sizeof opts[0], opts, sizeof vars / sizeof vars[0], vars, desc}; #ifdef USE_MODULES ModStruct moebius_description = {"moebius", "init_moebius", "draw_moebius", "release_moebius", "draw_moebius", "change_moebius", (char *) NULL, &moebius_opts, 1000, 1, 1, 1, 4, 1.0, "", "Shows Moebius Strip II, an Escher-like GL scene with ants", 0, NULL}; #endif #define Scale4Window 0.3 #define Scale4Iconic 0.4 #define sqr(A) ((A)*(A)) #ifndef Pi #define Pi M_PI #endif #define ObjMoebiusStrip 0 #define ObjAntBody 1 #define MaxObj 2 /*************************************************************************/ typedef struct { GLint WindH, WindW; GLfloat step; GLfloat ant_position; float ant_step; GLXContext *glx_context; rotator *rot; trackball_state *trackball; Bool button_down_p; } moebiusstruct; static const float front_shininess[] = {60.0}; static const float front_specular[] = {0.7, 0.7, 0.7, 1.0}; static const float ambient[] = {0.0, 0.0, 0.0, 1.0}; static const float diffuse[] = {1.0, 1.0, 1.0, 1.0}; static const float position0[] = {1.0, 1.0, 1.0, 0.0}; static const float position1[] = {-1.0, -1.0, 1.0, 0.0}; static const float lmodel_ambient[] = {0.5, 0.5, 0.5, 1.0}; static const float lmodel_twoside[] = {GL_TRUE}; static const float MaterialRed[] = {0.7, 0.0, 0.0, 1.0}; static const float MaterialGreen[] = {0.1, 0.5, 0.2, 1.0}; static const float MaterialBlue[] = {0.0, 0.0, 0.7, 1.0}; static const float MaterialCyan[] = {0.2, 0.5, 0.7, 1.0}; static const float MaterialYellow[] = {0.7, 0.7, 0.0, 1.0}; static const float MaterialMagenta[] = {0.6, 0.2, 0.5, 1.0}; static const float MaterialWhite[] = {0.7, 0.7, 0.7, 1.0}; static const float MaterialGray[] = {0.2, 0.2, 0.2, 1.0}; static const float MaterialGray5[] = {0.5, 0.5, 0.5, 1.0}; static const float MaterialGray6[] = {0.6, 0.6, 0.6, 1.0}; static const float MaterialGray8[] = {0.8, 0.8, 0.8, 1.0}; static moebiusstruct *moebius = (moebiusstruct *) NULL; #define NUM_SCENES 2 static Bool mySphere(float radius) { #if 0 GLUquadricObj *quadObj; if ((quadObj = gluNewQuadric()) == 0) return False; gluQuadricDrawStyle(quadObj, (GLenum) GLU_FILL); gluSphere(quadObj, radius, 16, 16); gluDeleteQuadric(quadObj); #else glPushMatrix(); glScalef (radius, radius, radius); unit_sphere (16, 16, False); glPopMatrix(); #endif return True; } static Bool myCone(float radius) { #if 0 GLUquadricObj *quadObj; if ((quadObj = gluNewQuadric()) == 0) return False; gluQuadricDrawStyle(quadObj, (GLenum) GLU_FILL); gluCylinder(quadObj, radius, 0, radius * 3, 8, 1); gluDeleteQuadric(quadObj); #else cone (0, 0, 0, 0, 0, radius * 3, radius, 0, 8, True, True, False); #endif return True; } static Bool draw_moebius_ant(moebiusstruct * mp, const float *Material, int mono) { float cos1 = cos(mp->ant_step); float cos2 = cos(mp->ant_step + 2 * Pi / 3); float cos3 = cos(mp->ant_step + 4 * Pi / 3); float sin1 = sin(mp->ant_step); float sin2 = sin(mp->ant_step + 2 * Pi / 3); float sin3 = sin(mp->ant_step + 4 * Pi / 3); if (mono) glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, MaterialGray5); else glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, Material); glEnable(GL_CULL_FACE); glPushMatrix(); glScalef(1, 1.3, 1); if (!mySphere(0.18)) return False; glScalef(1, 1 / 1.3, 1); glTranslatef(0.00, 0.30, 0.00); if (!mySphere(0.2)) return False; glTranslatef(-0.05, 0.17, 0.05); glRotatef(-90, 1, 0, 0); glRotatef(-25, 0, 1, 0); if (!myCone(0.05)) return False; glTranslatef(0.00, 0.10, 0.00); if (!myCone(0.05)) return False; glRotatef(25, 0, 1, 0); glRotatef(90, 1, 0, 0); glScalef(1, 1.3, 1); glTranslatef(0.15, -0.65, 0.05); if (!mySphere(0.25)) return False; glScalef(1, 1 / 1.3, 1); glPopMatrix(); glDisable(GL_CULL_FACE); glDisable(GL_LIGHTING); /* ANTENNAS */ glBegin(GL_LINES); if (mono) glColor3fv(MaterialGray5); else glColor3fv(Material); glVertex3f(0.00, 0.30, 0.00); glColor3fv(MaterialGray); glVertex3f(0.40, 0.70, 0.40); if (mono) glColor3fv(MaterialGray5); else glColor3fv(Material); glVertex3f(0.00, 0.30, 0.00); glColor3fv(MaterialGray); glVertex3f(0.40, 0.70, -0.40); glEnd(); glBegin(GL_POINTS); if (mono) glColor3fv(MaterialGray6); else glColor3fv(MaterialRed); glVertex3f(0.40, 0.70, 0.40); glVertex3f(0.40, 0.70, -0.40); glEnd(); /* LEFT-FRONT ARM */ glBegin(GL_LINE_STRIP); if (mono) glColor3fv(MaterialGray5); else glColor3fv(Material); glVertex3f(0.00, 0.05, 0.18); glVertex3f(0.35 + 0.05 * cos1, 0.15, 0.25); glColor3fv(MaterialGray); glVertex3f(-0.20 + 0.05 * cos1, 0.25 + 0.1 * sin1, 0.45); glEnd(); /* LEFT-CENTER ARM */ glBegin(GL_LINE_STRIP); if (mono) glColor3fv(MaterialGray5); else glColor3fv(Material); glVertex3f(0.00, 0.00, 0.18); glVertex3f(0.35 + 0.05 * cos2, 0.00, 0.25); glColor3fv(MaterialGray); glVertex3f(-0.20 + 0.05 * cos2, 0.00 + 0.1 * sin2, 0.45); glEnd(); /* LEFT-BACK ARM */ glBegin(GL_LINE_STRIP); if (mono) glColor3fv(MaterialGray5); else glColor3fv(Material); glVertex3f(0.00, -0.05, 0.18); glVertex3f(0.35 + 0.05 * cos3, -0.15, 0.25); glColor3fv(MaterialGray); glVertex3f(-0.20 + 0.05 * cos3, -0.25 + 0.1 * sin3, 0.45); glEnd(); /* RIGHT-FRONT ARM */ glBegin(GL_LINE_STRIP); if (mono) glColor3fv(MaterialGray5); else glColor3fv(Material); glVertex3f(0.00, 0.05, -0.18); glVertex3f(0.35 - 0.05 * sin1, 0.15, -0.25); glColor3fv(MaterialGray); glVertex3f(-0.20 - 0.05 * sin1, 0.25 + 0.1 * cos1, -0.45); glEnd(); /* RIGHT-CENTER ARM */ glBegin(GL_LINE_STRIP); if (mono) glColor3fv(MaterialGray5); else glColor3fv(Material); glVertex3f(0.00, 0.00, -0.18); glVertex3f(0.35 - 0.05 * sin2, 0.00, -0.25); glColor3fv(MaterialGray); glVertex3f(-0.20 - 0.05 * sin2, 0.00 + 0.1 * cos2, -0.45); glEnd(); /* RIGHT-BACK ARM */ glBegin(GL_LINE_STRIP); if (mono) glColor3fv(MaterialGray5); else glColor3fv(Material); glVertex3f(0.00, -0.05, -0.18); glVertex3f(0.35 - 0.05 * sin3, -0.15, -0.25); glColor3fv(MaterialGray); glVertex3f(-0.20 - 0.05 * sin3, -0.25 + 0.1 * cos3, -0.45); glEnd(); glBegin(GL_POINTS); if (mono) glColor3fv(MaterialGray8); else glColor3fv(MaterialMagenta); glVertex3f(-0.20 + 0.05 * cos1, 0.25 + 0.1 * sin1, 0.45); glVertex3f(-0.20 + 0.05 * cos2, 0.00 + 0.1 * sin2, 0.45); glVertex3f(-0.20 + 0.05 * cos3, -0.25 + 0.1 * sin3, 0.45); glVertex3f(-0.20 - 0.05 * sin1, 0.25 + 0.1 * cos1, -0.45); glVertex3f(-0.20 - 0.05 * sin2, 0.00 + 0.1 * cos2, -0.45); glVertex3f(-0.20 - 0.05 * sin3, -0.25 + 0.1 * cos3, -0.45); glEnd(); glEnable(GL_LIGHTING); mp->ant_step += 0.3; return True; } static void RotateAaroundU(float Ax, float Ay, float Az, float Ux, float Uy, float Uz, float *Cx, float *Cy, float *Cz, float Theta) { float cosO = cos(Theta); float sinO = sin(Theta); float one_cosO = 1 - cosO; float Ux2 = sqr(Ux); float Uy2 = sqr(Uy); float Uz2 = sqr(Uz); float UxUy = Ux * Uy; float UxUz = Ux * Uz; float UyUz = Uy * Uz; *Cx = (Ux2 + cosO * (1 - Ux2)) * Ax + (UxUy * one_cosO - Uz * sinO) * Ay + (UxUz * one_cosO + Uy * sinO) * Az; *Cy = (UxUy * one_cosO + Uz * sinO) * Ax + (Uy2 + cosO * (1 - Uy2)) * Ay + (UyUz * one_cosO - Ux * sinO) * Az; *Cz = (UxUz * one_cosO - Uy * sinO) * Ax + (UyUz * one_cosO + Ux * sinO) * Ay + (Uz2 + cosO * (1 - Uz2)) * Az; } #define MoebiusDivisions 40 #define MoebiusTransversals 4 static Bool draw_moebius_strip(ModeInfo * mi) { GLfloat Phi, Theta; GLfloat cPhi, sPhi; moebiusstruct *mp = &moebius[MI_SCREEN(mi)]; int i, j; int mono = MI_IS_MONO(mi); float Cx, Cy, Cz; #ifdef HAVE_JWZGLES /* #### glPolygonMode other than GL_FILL unimplemented */ solidmoebius = True; #endif if (solidmoebius) { glBegin(GL_QUAD_STRIP); Phi = 0; i = 0; while (i < (MoebiusDivisions * 2 + 1)) { Theta = Phi / 2; cPhi = cos(Phi); sPhi = sin(Phi); i++; if (mono) glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, MaterialWhite); else if (i % 2) glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, MaterialRed); else glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, MaterialGray); RotateAaroundU(cPhi, sPhi, 0, -sPhi, cPhi, 0, &Cx, &Cy, &Cz, Theta); glNormal3f(Cx, Cy, Cz); RotateAaroundU(0, 0, 1, -sPhi, cPhi, 0, &Cx, &Cy, &Cz, Theta); glVertex3f(cPhi * 3 + Cx, sPhi * 3 + Cy, +Cz); glVertex3f(cPhi * 3 - Cx, sPhi * 3 - Cy, -Cz); Phi += Pi / MoebiusDivisions; } glEnd(); } else { for (j = -MoebiusTransversals; j < MoebiusTransversals; j++) { glPolygonMode(GL_FRONT_AND_BACK, GL_LINE); glBegin(GL_QUAD_STRIP); Phi = 0; i = 0; while (i < (MoebiusDivisions * 2 + 1)) { Theta = Phi / 2; cPhi = cos(Phi); sPhi = sin(Phi); RotateAaroundU(cPhi, sPhi, 0, -sPhi, cPhi, 0, &Cx, &Cy, &Cz, Theta); glNormal3f(Cx, Cy, Cz); RotateAaroundU(0, 0, 1, -sPhi, cPhi, 0, &Cx, &Cy, &Cz, Theta); j++; if (j == MoebiusTransversals || mono) glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, MaterialWhite); else if (i % 2) glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, MaterialRed); else glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, MaterialGray); glVertex3f(cPhi * 3 + Cx / MoebiusTransversals * j, sPhi * 3 + Cy / MoebiusTransversals * j, +Cz / MoebiusTransversals * j); j--; if (j == -MoebiusTransversals || mono) glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, MaterialWhite); else if (i % 2) glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, MaterialRed); else glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, MaterialGray); glVertex3f(cPhi * 3 + Cx / MoebiusTransversals * j, sPhi * 3 + Cy / MoebiusTransversals * j, +Cz / MoebiusTransversals * j); Phi += Pi / MoebiusDivisions; i++; } glEnd(); } glPolygonMode(GL_FRONT_AND_BACK, GL_FILL); } if (drawants) { /* DRAW BLUE ANT */ glPushMatrix(); glRotatef(mp->ant_position + 180, 0, 0, 1); glTranslatef(3, 0, 0); glRotatef(mp->ant_position / 2 + 90, 0, 1, 0); glTranslatef(0.28, 0, -0.45); if (!draw_moebius_ant(mp, MaterialYellow, mono)) return False; glPopMatrix(); /* DRAW YELLOW ANT */ glPushMatrix(); glRotatef(mp->ant_position, 0, 0, 1); glTranslatef(3, 0, 0); glRotatef(mp->ant_position / 2, 0, 1, 0); glTranslatef(0.28, 0, -0.45); if (!draw_moebius_ant(mp, MaterialBlue, mono)) return False; glPopMatrix(); /* DRAW GREEN ANT */ glPushMatrix(); glRotatef(-mp->ant_position, 0, 0, 1); glTranslatef(3, 0, 0); glRotatef(-mp->ant_position / 2, 0, 1, 0); glTranslatef(0.28, 0, 0.45); glRotatef(180, 1, 0, 0); if (!draw_moebius_ant(mp, MaterialGreen, mono)) return False; glPopMatrix(); /* DRAW CYAN ANT */ glPushMatrix(); glRotatef(-mp->ant_position + 180, 0, 0, 1); glTranslatef(3, 0, 0); glRotatef(-mp->ant_position / 2 + 90, 0, 1, 0); glTranslatef(0.28, 0, 0.45); glRotatef(180, 1, 0, 0); if (!draw_moebius_ant(mp, MaterialCyan, mono)) return False; glPopMatrix(); } mp->ant_position += 1; return True; } #undef MoebiusDivisions #undef MoebiusTransversals ENTRYPOINT void reshape_moebius (ModeInfo * mi, int width, int height) { moebiusstruct *mp = &moebius[MI_SCREEN(mi)]; glViewport(0, 0, mp->WindW = (GLint) width, mp->WindH = (GLint) height); glMatrixMode(GL_PROJECTION); glLoadIdentity(); glFrustum(-1.0, 1.0, -1.0, 1.0, 5.0, 15.0); glMatrixMode(GL_MODELVIEW); if (width >= 1024) { glLineWidth(3); glPointSize(3); } else if (width >= 512) { glLineWidth(2); glPointSize(2); } else { glLineWidth(1); glPointSize(1); } } static void pinit(ModeInfo *mi) { /* int status; */ glClearDepth(1.0); glLightfv(GL_LIGHT0, GL_AMBIENT, ambient); glLightfv(GL_LIGHT0, GL_DIFFUSE, diffuse); glLightfv(GL_LIGHT0, GL_POSITION, position0); glLightfv(GL_LIGHT1, GL_AMBIENT, ambient); glLightfv(GL_LIGHT1, GL_DIFFUSE, diffuse); 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_NORMALIZE); glFrontFace(GL_CCW); glCullFace(GL_BACK); /* moebius */ glShadeModel(GL_SMOOTH); glEnable(GL_DEPTH_TEST); glDisable(GL_CULL_FACE); #if 0 glEnable(GL_TEXTURE_2D); glPixelStorei(GL_UNPACK_ALIGNMENT, 1); #if 0 clear_gl_error(); status = gluBuild2DMipmaps(GL_TEXTURE_2D, 3, WoodTextureWidth, WoodTextureHeight, GL_RGB, GL_UNSIGNED_BYTE, WoodTextureData); if (status) { const char *s = (char *) gluErrorString (status); fprintf (stderr, "%s: error mipmapping %dx%d texture: %s\n", progname, WoodTextureWidth, WoodTextureHeight, (s ? s : "(unknown)")); exit (1); } check_gl_error("mipmapping"); #else { XImage *img = xpm_to_ximage (mi->dpy, mi->xgwa.visual, mi->xgwa.colormap, wood_texture); glTexImage2D (GL_TEXTURE_2D, 0, GL_RGBA, img->width, img->height, 0, GL_RGBA, /* GL_UNSIGNED_BYTE, */ GL_UNSIGNED_INT_8_8_8_8_REV, img->data); check_gl_error("texture"); XDestroyImage (img); } #endif glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE); glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT); glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT); glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); #endif glMaterialfv(GL_FRONT_AND_BACK, GL_SHININESS, front_shininess); glMaterialfv(GL_FRONT_AND_BACK, GL_SPECULAR, front_specular); } ENTRYPOINT void release_moebius (ModeInfo * mi) { if (moebius != NULL) { (void) free((void *) moebius); moebius = (moebiusstruct *) NULL; } FreeAllGL(mi); } ENTRYPOINT Bool moebius_handle_event (ModeInfo *mi, XEvent *event) { moebiusstruct *mp = &moebius[MI_SCREEN(mi)]; if (gltrackball_event_handler (event, mp->trackball, MI_WIDTH (mi), MI_HEIGHT (mi), &mp->button_down_p)) return True; return False; } ENTRYPOINT void init_moebius (ModeInfo * mi) { moebiusstruct *mp; if (moebius == NULL) { if ((moebius = (moebiusstruct *) calloc(MI_NUM_SCREENS(mi), sizeof (moebiusstruct))) == NULL) return; } mp = &moebius[MI_SCREEN(mi)]; mp->step = NRAND(90); mp->ant_position = NRAND(90); { double rot_speed = 0.3; mp->rot = make_rotator (rot_speed, rot_speed, rot_speed, 1, 0, True); mp->trackball = gltrackball_init (True); } if ((mp->glx_context = init_GL(mi)) != NULL) { reshape_moebius(mi, MI_WIDTH(mi), MI_HEIGHT(mi)); glDrawBuffer(GL_BACK); pinit(mi); } else { MI_CLEARWINDOW(mi); } } ENTRYPOINT void draw_moebius (ModeInfo * mi) { moebiusstruct *mp; Display *display = MI_DISPLAY(mi); Window window = MI_WINDOW(mi); if (moebius == NULL) return; mp = &moebius[MI_SCREEN(mi)]; MI_IS_DRAWN(mi) = True; if (!mp->glx_context) return; glXMakeCurrent(display, window, *(mp->glx_context)); glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glPushMatrix(); glTranslatef(0.0, 0.0, -10.0); gltrackball_rotate (mp->trackball); if (!MI_IS_ICONIC(mi)) { glScalef(Scale4Window * mp->WindH / mp->WindW, Scale4Window, Scale4Window); } else { glScalef(Scale4Iconic * mp->WindH / mp->WindW, Scale4Iconic, Scale4Iconic); } # ifdef HAVE_MOBILE /* Keep it the same relative size when rotated. */ { GLfloat h = MI_HEIGHT(mi) / (GLfloat) MI_WIDTH(mi); int o = (int) current_device_rotation(); if (o != 0 && o != 180 && o != -180) { glScalef (1/h, h, 1); /* #### not quite right */ h = 1.7; glScalef (h, h, h); } } # endif { double x, y, z; get_rotation (mp->rot, &x, &y, &z, !mp->button_down_p); glRotatef (x * 360, 1.0, 0.0, 0.0); glRotatef (y * 360, 0.0, 1.0, 0.0); glRotatef (z * 360, 0.0, 0.0, 1.0); } /* moebius */ if (!draw_moebius_strip(mi)) { release_moebius(mi); return; } glPopMatrix(); if (MI_IS_FPS(mi)) do_fps (mi); glFlush(); glXSwapBuffers(display, window); mp->step += 0.025; } #ifndef STANDALONE ENTRYPOINT void change_moebius (ModeInfo * mi) { moebiusstruct *mp = &moebius[MI_SCREEN(mi)]; if (!mp->glx_context) return; glXMakeCurrent(MI_DISPLAY(mi), MI_WINDOW(mi), *(mp->glx_context)); pinit(); } #endif /* !STANDALONE */ XSCREENSAVER_MODULE ("Moebius", moebius) #endif xscreensaver-5.36/hacks/glx/morph3d.c000644 000767 000024 00000122526 12710313220 017540 0ustar00jwzstaff000000 000000 /* -*- Mode: C; tab-width: 4 -*- */ /* morph3d --- Shows 3D morphing objects */ #if 0 static const char sccsid[] = "@(#)morph3d.c 5.01 2001/03/01 xlockmore"; #endif #undef DEBUG_CULL_FACE /*- * Permission to use, copy, modify, and distribute this software and its * documentation for any purpose and without fee is hereby granted, * provided that the above copyright notice appear in all copies and that * both that copyright notice and this permission notice appear in * supporting documentation. * * This file is provided AS IS with no warranties of any kind. The author * shall have no liability with respect to the infringement of copyrights, * trade secrets or any patents by this file or any part thereof. In no * event will the author be liable for any lost revenue or profits or * other special, indirect and consequential damages. * * The original code for this mode was written by Marcelo Fernandes Vianna * (me...) and was inspired on a WindowsNT(R)'s screen saver (Flower Box). * It was written from scratch and it was not based on any other source code. * * Porting it to xlock (the final objective of this code since the moment I * decided to create it) was possible by comparing the original Mesa's gear * demo with it's ported version to xlock, so thanks for Danny Sung (look at * gear.c) for his indirect help. * * Thanks goes also to Brian Paul for making it possible and inexpensive * to use OpenGL at home. * * If you are interested in the original version of this program (not a xlock * mode, please refer to the Mesa package (ftp iris.ssec.wisc.edu on /pub/Mesa) * * Since I'm not a native English speaker, my apologies for any grammatical * mistakes. * * My e-mail address is * mfvianna@centroin.com.br * * Marcelo F. Vianna (Feb-13-1997) * * Revision History: * 05-Apr-2002: Removed all gllist uses (fix some bug with nvidia driver) * 01-Mar-2001: Added FPS stuff E.Lassauge * 27-Jul-1997: Speed ups by Marcelo F. Vianna. * 08-May-1997: Speed ups by Marcelo F. Vianna. * */ #ifdef STANDALONE # define MODE_moebius # define DEFAULTS "*delay: 40000 \n" \ "*showFPS: False \n" \ "*count: 0 \n" \ "*suppressRotationAnimation: True\n" \ # define refresh_morph3d 0 # define morph3d_handle_event 0 # include "xlockmore.h" /* from the xscreensaver distribution */ #else /* !STANDALONE */ # include "xlock.h" /* from the xlockmore distribution */ #endif /* !STANDALONE */ #ifdef MODE_moebius ENTRYPOINT ModeSpecOpt morph3d_opts = {0, (XrmOptionDescRec *) NULL, 0, (argtype *) NULL, (OptionStruct *) NULL}; #ifdef USE_MODULES ModStruct morph3d_description = {"morph3d", "init_morph3d", "draw_morph3d", "release_morph3d", "draw_morph3d", "change_morph3d", (char *) NULL, &morph3d_opts, 1000, 0, 1, 1, 4, 1.0, "", "Shows GL morphing polyhedra", 0, NULL}; #endif #define Scale4Window 0.3 #define Scale4Iconic 1.0 #define VectMul(X1,Y1,Z1,X2,Y2,Z2) (Y1)*(Z2)-(Z1)*(Y2),(Z1)*(X2)-(X1)*(Z2),(X1)*(Y2)-(Y1)*(X2) #define sqr(A) ((A)*(A)) /* Increasing this values produces better image quality, the price is speed. */ #define tetradivisions 23 #define cubedivisions 20 #define octadivisions 21 #define dodecadivisions 10 #define icodivisions 15 #define tetraangle 109.47122063449069174 #define cubeangle 90.000000000000000000 #define octaangle 109.47122063449069174 #define dodecaangle 63.434948822922009981 #define icoangle 41.810314895778596167 #ifndef Pi #define Pi M_PI #endif #define SQRT2 1.4142135623730951455 #define SQRT3 1.7320508075688771932 #define SQRT5 2.2360679774997898051 #define SQRT6 2.4494897427831778813 #define SQRT15 3.8729833462074170214 #define cossec36_2 0.8506508083520399322 #define cos72 0.3090169943749474241 #define sin72 0.9510565162951535721 #define cos36 0.8090169943749474241 #define sin36 0.5877852522924731292 /*************************************************************************/ typedef struct { GLint WindH, WindW; GLfloat step; GLfloat seno; int object; int edgedivisions; int VisibleSpikes; void (*draw_object) (ModeInfo * mi); float Magnitude; const float *MaterialColor[20]; GLXContext *glx_context; int arrayninit; } morph3dstruct; static const GLfloat front_shininess[] = {60.0}; static const GLfloat front_specular[] = {0.7, 0.7, 0.7, 1.0}; static const GLfloat ambient[] = {0.0, 0.0, 0.0, 1.0}; static const GLfloat diffuse[] = {1.0, 1.0, 1.0, 1.0}; static const GLfloat position0[] = {1.0, 1.0, 1.0, 0.0}; static const GLfloat position1[] = {-1.0, -1.0, 1.0, 0.0}; static const GLfloat lmodel_ambient[] = {0.5, 0.5, 0.5, 1.0}; static const GLfloat lmodel_twoside[] = {GL_TRUE}; static const GLfloat MaterialRed[] = {0.7, 0.0, 0.0, 1.0}; static const GLfloat MaterialGreen[] = {0.1, 0.5, 0.2, 1.0}; static const GLfloat MaterialBlue[] = {0.0, 0.0, 0.7, 1.0}; static const GLfloat MaterialCyan[] = {0.2, 0.5, 0.7, 1.0}; static const GLfloat MaterialYellow[] = {0.7, 0.7, 0.0, 1.0}; static const GLfloat MaterialMagenta[] = {0.6, 0.2, 0.5, 1.0}; static const GLfloat MaterialWhite[] = {0.7, 0.7, 0.7, 1.0}; static const GLfloat MaterialGray[] = {0.5, 0.5, 0.5, 1.0}; static morph3dstruct *morph3d = (morph3dstruct *) NULL; #define TRIANGLE(Edge, Amp, Divisions, Z, VS) \ { \ GLfloat Xf,Yf,Xa,Yb=0.0,Xf2=0.0,Yf2=0.0,Yf_2=0.0,Yb2,Yb_2; \ GLfloat Factor=0.0,Factor1,Factor2; \ GLfloat VertX,VertY,VertZ,NeiAX,NeiAY,NeiAZ,NeiBX,NeiBY,NeiBZ; \ GLfloat Ax,Ay; \ int Ri,Ti; \ GLfloat Vr=(Edge)*SQRT3/3; \ GLfloat AmpVr2=(Amp)/sqr(Vr); \ GLfloat Zf=(Edge)*(Z); \ \ Ax=(Edge)*(+0.5/(Divisions)), Ay=(Edge)*(-SQRT3/(2*Divisions)); \ \ Yf=Vr+Ay; Yb=Yf+0.001; \ for (Ri=1; Ri<=(Divisions); Ri++) { \ glBegin(GL_TRIANGLE_STRIP); \ Xf=(float)Ri*Ax; Xa=Xf+0.001; \ Yf2=sqr(Yf); Yf_2=sqr(Yf-Ay); \ Yb2=sqr(Yb); Yb_2=sqr(Yb-Ay); \ for (Ti=0; Tipolygon_count++; \ \ Xf-=Ax; Yf-=Ay; Xa-=Ax; Yb-=Ay; \ \ Factor=1-(((Xf2=sqr(Xf))+Yf_2)*AmpVr2); \ Factor1=1-((sqr(Xa)+Yf_2)*AmpVr2); \ Factor2=1-((Xf2+Yb_2)*AmpVr2); \ VertX=Factor*Xf; VertY=Factor*Yf; VertZ=Factor*Zf; \ NeiAX=Factor1*Xa-VertX; NeiAY=Factor1*Yf-VertY; NeiAZ=Factor1*Zf-VertZ; \ NeiBX=Factor2*Xf-VertX; NeiBY=Factor2*Yb-VertY; NeiBZ=Factor2*Zf-VertZ; \ glNormal3f(VectMul(NeiAX, NeiAY, NeiAZ, NeiBX, NeiBY, NeiBZ)); \ glVertex3f(VertX, VertY, VertZ); \ mi->polygon_count++; \ \ Xf-=Ax; Yf+=Ay; Xa-=Ax; Yb+=Ay; \ } \ Factor=1-(((Xf2=sqr(Xf))+(Yf2=sqr(Yf)))*AmpVr2); \ Factor1=1-((sqr(Xa)+Yf2)*AmpVr2); \ Factor2=1-((Xf2+sqr(Yb))*AmpVr2); \ VertX=Factor*Xf; VertY=Factor*Yf; VertZ=Factor*Zf; \ NeiAX=Factor1*Xa-VertX; NeiAY=Factor1*Yf-VertY; NeiAZ=Factor1*Zf-VertZ; \ NeiBX=Factor2*Xf-VertX; NeiBY=Factor2*Yb-VertY; NeiBZ=Factor2*Zf-VertZ; \ glNormal3f(VectMul(NeiAX, NeiAY, NeiAZ, NeiBX, NeiBY, NeiBZ)); \ glVertex3f(VertX, VertY, VertZ); \ Yf+=Ay; Yb+=Ay; \ glEnd(); \ } \ VS=(Factor<0); \ } #define SQUARE(Edge, Amp, Divisions, Z, VS) \ { \ int Xi,Yi; \ GLfloat Xf,Yf,Y,Xf2,Yf2,Y2,Xa,Xa2,Yb; \ GLfloat Factor=0.0,Factor1,Factor2; \ GLfloat VertX,VertY,VertZ,NeiAX,NeiAY,NeiAZ,NeiBX,NeiBY,NeiBZ; \ GLfloat Zf=(Edge)*(Z); \ GLfloat AmpVr2=(Amp)/sqr((Edge)*SQRT2/2); \ \ for (Yi=0; Yi<(Divisions); Yi++) { \ Yf=-((Edge)/2.0) + ((float)Yi)/(Divisions)*(Edge); \ Yf2=sqr(Yf); \ Y=Yf+1.0/(Divisions)*(Edge); \ Y2=sqr(Y); \ glBegin(GL_QUAD_STRIP); \ for (Xi=0; Xi<=(Divisions); Xi++) { \ Xf=-((Edge)/2.0) + ((float)Xi)/(Divisions)*(Edge); \ Xf2=sqr(Xf); \ \ Xa=Xf+0.001; Yb=Y+0.001; \ Factor=1-((Xf2+Y2)*AmpVr2); \ Factor1=1-(((Xa2=sqr(Xa))+Y2)*AmpVr2); \ Factor2=1-((Xf2+sqr(Yb))*AmpVr2); \ VertX=Factor*Xf; VertY=Factor*Y; VertZ=Factor*Zf; \ NeiAX=Factor1*Xa-VertX; NeiAY=Factor1*Y-VertY; NeiAZ=Factor1*Zf-VertZ; \ NeiBX=Factor2*Xf-VertX; NeiBY=Factor2*Yb-VertY; NeiBZ=Factor2*Zf-VertZ; \ glNormal3f(VectMul(NeiAX, NeiAY, NeiAZ, NeiBX, NeiBY, NeiBZ)); \ glVertex3f(VertX, VertY, VertZ); \ \ Yb=Yf+0.001; \ Factor=1-((Xf2+Yf2)*AmpVr2); \ Factor1=1-((Xa2+Yf2)*AmpVr2); \ Factor2=1-((Xf2+sqr(Yb))*AmpVr2); \ VertX=Factor*Xf; VertY=Factor*Yf; VertZ=Factor*Zf; \ NeiAX=Factor1*Xa-VertX; NeiAY=Factor1*Yf-VertY; NeiAZ=Factor1*Zf-VertZ; \ NeiBX=Factor2*Xf-VertX; NeiBY=Factor2*Yb-VertY; NeiBZ=Factor2*Zf-VertZ; \ glNormal3f(VectMul(NeiAX, NeiAY, NeiAZ, NeiBX, NeiBY, NeiBZ)); \ glVertex3f(VertX, VertY, VertZ); \ mi->polygon_count++; \ } \ glEnd(); \ } \ VS=(Factor<0); \ } #define PENTAGON(Edge, Amp, Divisions, Z, VS) \ { \ int Ri,Ti,Fi; \ GLfloat Xf,Yf,Xa,Yb,Xf2,Yf2; \ GLfloat Factor=0.0,Factor1,Factor2; \ GLfloat VertX,VertY,VertZ,NeiAX,NeiAY,NeiAZ,NeiBX,NeiBY,NeiBZ; \ GLfloat Zf=(Edge)*(Z); \ GLfloat AmpVr2=(Amp)/sqr((Edge)*cossec36_2); \ \ GLfloat x[6],y[6]; \ \ for(Fi=0;Fi<6;Fi++) { \ x[Fi]=-cos( Fi*2*Pi/5 + Pi/10 )/(Divisions)*cossec36_2*(Edge); \ y[Fi]=sin( Fi*2*Pi/5 + Pi/10 )/(Divisions)*cossec36_2*(Edge); \ } \ \ for (Ri=1; Ri<=(Divisions); Ri++) { \ for (Fi=0; Fi<5; Fi++) { \ glBegin(GL_TRIANGLE_STRIP); \ for (Ti=0; Tipolygon_count++; \ \ Xf-=x[Fi]; Yf-=y[Fi]; Xa-=x[Fi]; Yb-=y[Fi]; \ \ Factor=1-(((Xf2=sqr(Xf))+(Yf2=sqr(Yf)))*AmpVr2); \ Factor1=1-((sqr(Xa)+Yf2)*AmpVr2); \ Factor2=1-((Xf2+sqr(Yb))*AmpVr2); \ VertX=Factor*Xf; VertY=Factor*Yf; VertZ=Factor*Zf; \ NeiAX=Factor1*Xa-VertX; NeiAY=Factor1*Yf-VertY; NeiAZ=Factor1*Zf-VertZ; \ NeiBX=Factor2*Xf-VertX; NeiBY=Factor2*Yb-VertY; NeiBZ=Factor2*Zf-VertZ; \ glNormal3f(VectMul(NeiAX, NeiAY, NeiAZ, NeiBX, NeiBY, NeiBZ)); \ glVertex3f(VertX, VertY, VertZ); \ mi->polygon_count++; \ \ } \ Xf=(float)Ri*x[Fi+1]; \ Yf=(float)Ri*y[Fi+1]; \ Xa=Xf+0.001; Yb=Yf+0.001; \ Factor=1-(((Xf2=sqr(Xf))+(Yf2=sqr(Yf)))*AmpVr2); \ Factor1=1-((sqr(Xa)+Yf2)*AmpVr2); \ Factor2=1-((Xf2+sqr(Yb))*AmpVr2); \ VertX=Factor*Xf; VertY=Factor*Yf; VertZ=Factor*Zf; \ NeiAX=Factor1*Xa-VertX; NeiAY=Factor1*Yf-VertY; NeiAZ=Factor1*Zf-VertZ; \ NeiBX=Factor2*Xf-VertX; NeiBY=Factor2*Yb-VertY; NeiBZ=Factor2*Zf-VertZ; \ glNormal3f(VectMul(NeiAX, NeiAY, NeiAZ, NeiBX, NeiBY, NeiBZ)); \ glVertex3f(VertX, VertY, VertZ); \ glEnd(); \ } \ } \ VS=(Factor<0); \ } static void draw_tetra(ModeInfo * mi) { morph3dstruct *mp = &morph3d[MI_SCREEN(mi)]; glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, mp->MaterialColor[0]); TRIANGLE(2, mp->seno, mp->edgedivisions, 0.5 / SQRT6, mp->VisibleSpikes); glPushMatrix(); glRotatef(180, 0, 0, 1); glRotatef(-tetraangle, 1, 0, 0); glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, mp->MaterialColor[1]); TRIANGLE(2, mp->seno, mp->edgedivisions, 0.5 / SQRT6, mp->VisibleSpikes); glPopMatrix(); glPushMatrix(); glRotatef(180, 0, 1, 0); glRotatef(-180 + tetraangle, 0.5, SQRT3 / 2, 0); glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, mp->MaterialColor[2]); TRIANGLE(2, mp->seno, mp->edgedivisions, 0.5 / SQRT6, mp->VisibleSpikes); glPopMatrix(); glRotatef(180, 0, 1, 0); glRotatef(-180 + tetraangle, 0.5, -SQRT3 / 2, 0); glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, mp->MaterialColor[3]); TRIANGLE(2, mp->seno, mp->edgedivisions, 0.5 / SQRT6, mp->VisibleSpikes); } static void draw_cube(ModeInfo * mi) { morph3dstruct *mp = &morph3d[MI_SCREEN(mi)]; glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, mp->MaterialColor[0]); SQUARE(2, mp->seno, mp->edgedivisions, 0.5, mp->VisibleSpikes) glRotatef(cubeangle, 1, 0, 0); glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, mp->MaterialColor[1]); SQUARE(2, mp->seno, mp->edgedivisions, 0.5, mp->VisibleSpikes) glRotatef(cubeangle, 1, 0, 0); glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, mp->MaterialColor[2]); SQUARE(2, mp->seno, mp->edgedivisions, 0.5, mp->VisibleSpikes) glRotatef(cubeangle, 1, 0, 0); glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, mp->MaterialColor[3]); SQUARE(2, mp->seno, mp->edgedivisions, 0.5, mp->VisibleSpikes) glRotatef(cubeangle, 0, 1, 0); glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, mp->MaterialColor[4]); SQUARE(2, mp->seno, mp->edgedivisions, 0.5, mp->VisibleSpikes) glRotatef(2 * cubeangle, 0, 1, 0); glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, mp->MaterialColor[5]); SQUARE(2, mp->seno, mp->edgedivisions, 0.5, mp->VisibleSpikes) } static void draw_octa(ModeInfo * mi) { morph3dstruct *mp = &morph3d[MI_SCREEN(mi)]; glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, mp->MaterialColor[0]); TRIANGLE(2, mp->seno, mp->edgedivisions, 1 / SQRT6, mp->VisibleSpikes); glPushMatrix(); glRotatef(180, 0, 0, 1); glRotatef(-180 + octaangle, 1, 0, 0); glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, mp->MaterialColor[1]); TRIANGLE(2, mp->seno, mp->edgedivisions, 1 / SQRT6, mp->VisibleSpikes); glPopMatrix(); glPushMatrix(); glRotatef(180, 0, 1, 0); glRotatef(-octaangle, 0.5, SQRT3 / 2, 0); glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, mp->MaterialColor[2]); TRIANGLE(2, mp->seno, mp->edgedivisions, 1 / SQRT6, mp->VisibleSpikes); glPopMatrix(); glPushMatrix(); glRotatef(180, 0, 1, 0); glRotatef(-octaangle, 0.5, -SQRT3 / 2, 0); glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, mp->MaterialColor[3]); TRIANGLE(2, mp->seno, mp->edgedivisions, 1 / SQRT6, mp->VisibleSpikes); glPopMatrix(); glRotatef(180, 1, 0, 0); glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, mp->MaterialColor[4]); TRIANGLE(2, mp->seno, mp->edgedivisions, 1 / SQRT6, mp->VisibleSpikes); glPushMatrix(); glRotatef(180, 0, 0, 1); glRotatef(-180 + octaangle, 1, 0, 0); glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, mp->MaterialColor[5]); TRIANGLE(2, mp->seno, mp->edgedivisions, 1 / SQRT6, mp->VisibleSpikes); glPopMatrix(); glPushMatrix(); glRotatef(180, 0, 1, 0); glRotatef(-octaangle, 0.5, SQRT3 / 2, 0); glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, mp->MaterialColor[6]); TRIANGLE(2, mp->seno, mp->edgedivisions, 1 / SQRT6, mp->VisibleSpikes); glPopMatrix(); glRotatef(180, 0, 1, 0); glRotatef(-octaangle, 0.5, -SQRT3 / 2, 0); glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, mp->MaterialColor[7]); TRIANGLE(2, mp->seno, mp->edgedivisions, 1 / SQRT6, mp->VisibleSpikes); } static void draw_dodeca(ModeInfo * mi) { morph3dstruct *mp = &morph3d[MI_SCREEN(mi)]; #define TAU ((SQRT5+1)/2) glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, mp->MaterialColor[0]); PENTAGON(1, mp->seno, mp->edgedivisions, sqr(TAU) * sqrt((TAU + 2) / 5) / 2, mp->VisibleSpikes); glPushMatrix(); glRotatef(180, 0, 0, 1); glPushMatrix(); glRotatef(-dodecaangle, 1, 0, 0); glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, mp->MaterialColor[1]); PENTAGON(1, mp->seno, mp->edgedivisions, sqr(TAU) * sqrt((TAU + 2) / 5) / 2, mp->VisibleSpikes); glPopMatrix(); glPushMatrix(); glRotatef(-dodecaangle, cos72, sin72, 0); glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, mp->MaterialColor[2]); PENTAGON(1, mp->seno, mp->edgedivisions, sqr(TAU) * sqrt((TAU + 2) / 5) / 2, mp->VisibleSpikes); glPopMatrix(); glPushMatrix(); glRotatef(-dodecaangle, cos72, -sin72, 0); glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, mp->MaterialColor[3]); PENTAGON(1, mp->seno, mp->edgedivisions, sqr(TAU) * sqrt((TAU + 2) / 5) / 2, mp->VisibleSpikes); glPopMatrix(); glPushMatrix(); glRotatef(dodecaangle, cos36, -sin36, 0); glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, mp->MaterialColor[4]); PENTAGON(1, mp->seno, mp->edgedivisions, sqr(TAU) * sqrt((TAU + 2) / 5) / 2, mp->VisibleSpikes); glPopMatrix(); glRotatef(dodecaangle, cos36, sin36, 0); glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, mp->MaterialColor[5]); PENTAGON(1, mp->seno, mp->edgedivisions, sqr(TAU) * sqrt((TAU + 2) / 5) / 2, mp->VisibleSpikes); glPopMatrix(); glRotatef(180, 1, 0, 0); glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, mp->MaterialColor[6]); PENTAGON(1, mp->seno, mp->edgedivisions, sqr(TAU) * sqrt((TAU + 2) / 5) / 2, mp->VisibleSpikes); glRotatef(180, 0, 0, 1); glPushMatrix(); glRotatef(-dodecaangle, 1, 0, 0); glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, mp->MaterialColor[7]); PENTAGON(1, mp->seno, mp->edgedivisions, sqr(TAU) * sqrt((TAU + 2) / 5) / 2, mp->VisibleSpikes); glPopMatrix(); glPushMatrix(); glRotatef(-dodecaangle, cos72, sin72, 0); glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, mp->MaterialColor[8]); PENTAGON(1, mp->seno, mp->edgedivisions, sqr(TAU) * sqrt((TAU + 2) / 5) / 2, mp->VisibleSpikes); glPopMatrix(); glPushMatrix(); glRotatef(-dodecaangle, cos72, -sin72, 0); glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, mp->MaterialColor[9]); PENTAGON(1, mp->seno, mp->edgedivisions, sqr(TAU) * sqrt((TAU + 2) / 5) / 2, mp->VisibleSpikes); glPopMatrix(); glPushMatrix(); glRotatef(dodecaangle, cos36, -sin36, 0); glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, mp->MaterialColor[10]); PENTAGON(1, mp->seno, mp->edgedivisions, sqr(TAU) * sqrt((TAU + 2) / 5) / 2, mp->VisibleSpikes); glPopMatrix(); glRotatef(dodecaangle, cos36, sin36, 0); glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, mp->MaterialColor[11]); PENTAGON(1, mp->seno, mp->edgedivisions, sqr(TAU) * sqrt((TAU + 2) / 5) / 2, mp->VisibleSpikes); } static void draw_icosa(ModeInfo * mi) { morph3dstruct *mp = &morph3d[MI_SCREEN(mi)]; glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, mp->MaterialColor[0]); TRIANGLE(1.5, mp->seno, mp->edgedivisions, (3 * SQRT3 + SQRT15) / 12, mp->VisibleSpikes); glPushMatrix(); glPushMatrix(); glRotatef(180, 0, 0, 1); glRotatef(-icoangle, 1, 0, 0); glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, mp->MaterialColor[1]); TRIANGLE(1.5, mp->seno, mp->edgedivisions, (3 * SQRT3 + SQRT15) / 12, mp->VisibleSpikes); glPushMatrix(); glRotatef(180, 0, 1, 0); glRotatef(-180 + icoangle, 0.5, SQRT3 / 2, 0); glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, mp->MaterialColor[2]); TRIANGLE(1.5, mp->seno, mp->edgedivisions, (3 * SQRT3 + SQRT15) / 12, mp->VisibleSpikes); glPopMatrix(); glRotatef(180, 0, 1, 0); glRotatef(-180 + icoangle, 0.5, -SQRT3 / 2, 0); glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, mp->MaterialColor[3]); TRIANGLE(1.5, mp->seno, mp->edgedivisions, (3 * SQRT3 + SQRT15) / 12, mp->VisibleSpikes); glPopMatrix(); glPushMatrix(); glRotatef(180, 0, 1, 0); glRotatef(-180 + icoangle, 0.5, SQRT3 / 2, 0); glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, mp->MaterialColor[4]); TRIANGLE(1.5, mp->seno, mp->edgedivisions, (3 * SQRT3 + SQRT15) / 12, mp->VisibleSpikes); glPushMatrix(); glRotatef(180, 0, 1, 0); glRotatef(-180 + icoangle, 0.5, SQRT3 / 2, 0); glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, mp->MaterialColor[5]); TRIANGLE(1.5, mp->seno, mp->edgedivisions, (3 * SQRT3 + SQRT15) / 12, mp->VisibleSpikes); glPopMatrix(); glRotatef(180, 0, 0, 1); glRotatef(-icoangle, 1, 0, 0); glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, mp->MaterialColor[6]); TRIANGLE(1.5, mp->seno, mp->edgedivisions, (3 * SQRT3 + SQRT15) / 12, mp->VisibleSpikes); glPopMatrix(); glRotatef(180, 0, 1, 0); glRotatef(-180 + icoangle, 0.5, -SQRT3 / 2, 0); glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, mp->MaterialColor[7]); TRIANGLE(1.5, mp->seno, mp->edgedivisions, (3 * SQRT3 + SQRT15) / 12, mp->VisibleSpikes); glPushMatrix(); glRotatef(180, 0, 1, 0); glRotatef(-180 + icoangle, 0.5, -SQRT3 / 2, 0); glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, mp->MaterialColor[8]); TRIANGLE(1.5, mp->seno, mp->edgedivisions, (3 * SQRT3 + SQRT15) / 12, mp->VisibleSpikes); glPopMatrix(); glRotatef(180, 0, 0, 1); glRotatef(-icoangle, 1, 0, 0); glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, mp->MaterialColor[9]); TRIANGLE(1.5, mp->seno, mp->edgedivisions, (3 * SQRT3 + SQRT15) / 12, mp->VisibleSpikes); glPopMatrix(); glRotatef(180, 1, 0, 0); glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, mp->MaterialColor[10]); TRIANGLE(1.5, mp->seno, mp->edgedivisions, (3 * SQRT3 + SQRT15) / 12, mp->VisibleSpikes); glPushMatrix(); glRotatef(180, 0, 0, 1); glRotatef(-icoangle, 1, 0, 0); glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, mp->MaterialColor[11]); TRIANGLE(1.5, mp->seno, mp->edgedivisions, (3 * SQRT3 + SQRT15) / 12, mp->VisibleSpikes); glPushMatrix(); glRotatef(180, 0, 1, 0); glRotatef(-180 + icoangle, 0.5, SQRT3 / 2, 0); glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, mp->MaterialColor[12]); TRIANGLE(1.5, mp->seno, mp->edgedivisions, (3 * SQRT3 + SQRT15) / 12, mp->VisibleSpikes); glPopMatrix(); glRotatef(180, 0, 1, 0); glRotatef(-180 + icoangle, 0.5, -SQRT3 / 2, 0); glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, mp->MaterialColor[13]); TRIANGLE(1.5, mp->seno, mp->edgedivisions, (3 * SQRT3 + SQRT15) / 12, mp->VisibleSpikes); glPopMatrix(); glPushMatrix(); glRotatef(180, 0, 1, 0); glRotatef(-180 + icoangle, 0.5, SQRT3 / 2, 0); glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, mp->MaterialColor[14]); TRIANGLE(1.5, mp->seno, mp->edgedivisions, (3 * SQRT3 + SQRT15) / 12, mp->VisibleSpikes); glPushMatrix(); glRotatef(180, 0, 1, 0); glRotatef(-180 + icoangle, 0.5, SQRT3 / 2, 0); glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, mp->MaterialColor[15]); TRIANGLE(1.5, mp->seno, mp->edgedivisions, (3 * SQRT3 + SQRT15) / 12, mp->VisibleSpikes); glPopMatrix(); glRotatef(180, 0, 0, 1); glRotatef(-icoangle, 1, 0, 0); glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, mp->MaterialColor[16]); TRIANGLE(1.5, mp->seno, mp->edgedivisions, (3 * SQRT3 + SQRT15) / 12, mp->VisibleSpikes); glPopMatrix(); glRotatef(180, 0, 1, 0); glRotatef(-180 + icoangle, 0.5, -SQRT3 / 2, 0); glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, mp->MaterialColor[17]); TRIANGLE(1.5, mp->seno, mp->edgedivisions, (3 * SQRT3 + SQRT15) / 12, mp->VisibleSpikes); glPushMatrix(); glRotatef(180, 0, 1, 0); glRotatef(-180 + icoangle, 0.5, -SQRT3 / 2, 0); glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, mp->MaterialColor[18]); TRIANGLE(1.5, mp->seno, mp->edgedivisions, (3 * SQRT3 + SQRT15) / 12, mp->VisibleSpikes); glPopMatrix(); glRotatef(180, 0, 0, 1); glRotatef(-icoangle, 1, 0, 0); glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, mp->MaterialColor[19]); TRIANGLE(1.5, mp->seno, mp->edgedivisions, (3 * SQRT3 + SQRT15) / 12, mp->VisibleSpikes); } ENTRYPOINT void reshape_morph3d(ModeInfo * mi, int width, int height) { morph3dstruct *mp = &morph3d[MI_SCREEN(mi)]; glViewport(0, 0, mp->WindW = (GLint) width, mp->WindH = (GLint) height); glMatrixMode(GL_PROJECTION); glLoadIdentity(); glFrustum(-1.0, 1.0, -1.0, 1.0, 5.0, 15.0); glMatrixMode(GL_MODELVIEW); } static void pinit(ModeInfo * mi) { morph3dstruct *mp = &morph3d[MI_SCREEN(mi)]; glClearDepth(1.0); glColor3f(1.0, 1.0, 1.0); glLightfv(GL_LIGHT0, GL_AMBIENT, ambient); glLightfv(GL_LIGHT0, GL_DIFFUSE, diffuse); glLightfv(GL_LIGHT0, GL_POSITION, position0); glLightfv(GL_LIGHT1, GL_AMBIENT, ambient); glLightfv(GL_LIGHT1, GL_DIFFUSE, diffuse); 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); glShadeModel(GL_SMOOTH); glMaterialfv(GL_FRONT_AND_BACK, GL_SHININESS, front_shininess); glMaterialfv(GL_FRONT_AND_BACK, GL_SPECULAR, front_specular); switch (mp->object) { case 2: mp->draw_object = draw_cube; mp->MaterialColor[0] = MaterialRed; mp->MaterialColor[1] = MaterialGreen; mp->MaterialColor[2] = MaterialCyan; mp->MaterialColor[3] = MaterialMagenta; mp->MaterialColor[4] = MaterialYellow; mp->MaterialColor[5] = MaterialBlue; mp->edgedivisions = cubedivisions; mp->Magnitude = 2.0; break; case 3: mp->draw_object = draw_octa; mp->MaterialColor[0] = MaterialRed; mp->MaterialColor[1] = MaterialGreen; mp->MaterialColor[2] = MaterialBlue; mp->MaterialColor[3] = MaterialWhite; mp->MaterialColor[4] = MaterialCyan; mp->MaterialColor[5] = MaterialMagenta; mp->MaterialColor[6] = MaterialGray; mp->MaterialColor[7] = MaterialYellow; mp->edgedivisions = octadivisions; mp->Magnitude = 2.5; break; case 4: mp->draw_object = draw_dodeca; mp->MaterialColor[0] = MaterialRed; mp->MaterialColor[1] = MaterialGreen; mp->MaterialColor[2] = MaterialCyan; mp->MaterialColor[3] = MaterialBlue; mp->MaterialColor[4] = MaterialMagenta; mp->MaterialColor[5] = MaterialYellow; mp->MaterialColor[6] = MaterialGreen; mp->MaterialColor[7] = MaterialCyan; mp->MaterialColor[8] = MaterialRed; mp->MaterialColor[9] = MaterialMagenta; mp->MaterialColor[10] = MaterialBlue; mp->MaterialColor[11] = MaterialYellow; mp->edgedivisions = dodecadivisions; mp->Magnitude = 2.0; break; case 5: mp->draw_object = draw_icosa; mp->MaterialColor[0] = MaterialRed; mp->MaterialColor[1] = MaterialGreen; mp->MaterialColor[2] = MaterialBlue; mp->MaterialColor[3] = MaterialCyan; mp->MaterialColor[4] = MaterialYellow; mp->MaterialColor[5] = MaterialMagenta; mp->MaterialColor[6] = MaterialRed; mp->MaterialColor[7] = MaterialGreen; mp->MaterialColor[8] = MaterialBlue; mp->MaterialColor[9] = MaterialWhite; mp->MaterialColor[10] = MaterialCyan; mp->MaterialColor[11] = MaterialYellow; mp->MaterialColor[12] = MaterialMagenta; mp->MaterialColor[13] = MaterialRed; mp->MaterialColor[14] = MaterialGreen; mp->MaterialColor[15] = MaterialBlue; mp->MaterialColor[16] = MaterialCyan; mp->MaterialColor[17] = MaterialYellow; mp->MaterialColor[18] = MaterialMagenta; mp->MaterialColor[19] = MaterialGray; mp->edgedivisions = icodivisions; mp->Magnitude = 2.5; break; default: mp->draw_object = draw_tetra; mp->MaterialColor[0] = MaterialRed; mp->MaterialColor[1] = MaterialGreen; mp->MaterialColor[2] = MaterialBlue; mp->MaterialColor[3] = MaterialWhite; mp->edgedivisions = tetradivisions; mp->Magnitude = 2.5; break; } if (MI_IS_MONO(mi)) { int loop; for (loop = 0; loop < 20; loop++) mp->MaterialColor[loop] = MaterialGray; } } ENTRYPOINT void init_morph3d(ModeInfo * mi) { morph3dstruct *mp; if (morph3d == NULL) { if ((morph3d = (morph3dstruct *) calloc(MI_NUM_SCREENS(mi), sizeof (morph3dstruct))) == NULL) return; } mp = &morph3d[MI_SCREEN(mi)]; mp->step = NRAND(90); mp->VisibleSpikes = 1; if ((mp->glx_context = init_GL(mi)) != NULL) { reshape_morph3d(mi, MI_WIDTH(mi), MI_HEIGHT(mi)); glDrawBuffer(GL_BACK); mp->object = MI_COUNT(mi); if (mp->object <= 0 || mp->object > 5) mp->object = NRAND(5) + 1; pinit(mi); } else { MI_CLEARWINDOW(mi); } } ENTRYPOINT void draw_morph3d(ModeInfo * mi) { Display *display = MI_DISPLAY(mi); Window window = MI_WINDOW(mi); morph3dstruct *mp; if (morph3d == NULL) return; mp = &morph3d[MI_SCREEN(mi)]; MI_IS_DRAWN(mi) = True; if (!mp->glx_context) return; mi->polygon_count = 0; glXMakeCurrent(display, window, *(mp->glx_context)); glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glPushMatrix(); glTranslatef(0.0, 0.0, -10.0); if (!MI_IS_ICONIC(mi)) { glScalef(Scale4Window * mp->WindH / mp->WindW, Scale4Window, Scale4Window); glTranslatef(2.5 * mp->WindW / mp->WindH * sin(mp->step * 1.11), 2.5 * cos(mp->step * 1.25 * 1.11), 0); } else { glScalef(Scale4Iconic * mp->WindH / mp->WindW, Scale4Iconic, Scale4Iconic); } # ifdef HAVE_MOBILE /* Keep it the same relative size when rotated. */ { GLfloat h = MI_HEIGHT(mi) / (GLfloat) MI_WIDTH(mi); int o = (int) current_device_rotation(); if (o != 0 && o != 180 && o != -180) glScalef (1/h, h, 1); } # endif glRotatef(mp->step * 100, 1, 0, 0); glRotatef(mp->step * 95, 0, 1, 0); glRotatef(mp->step * 90, 0, 0, 1); mp->seno = (sin(mp->step) + 1.0 / 3.0) * (4.0 / 5.0) * mp->Magnitude; if (mp->VisibleSpikes) { #ifdef DEBUG_CULL_FACE int loop; for (loop = 0; loop < 20; loop++) mp->MaterialColor[loop] = MaterialGray; #endif glDisable(GL_CULL_FACE); } else { #ifdef DEBUG_CULL_FACE int loop; for (loop = 0; loop < 20; loop++) mp->MaterialColor[loop] = MaterialWhite; #endif glEnable(GL_CULL_FACE); } mp->draw_object(mi); glPopMatrix(); if (MI_IS_FPS(mi)) do_fps (mi); glXSwapBuffers(display, window); mp->step += 0.05; } #ifndef STANDALONE ENTRYPOINT void change_morph3d(ModeInfo * mi) { morph3dstruct *mp = &morph3d[MI_SCREEN(mi)]; if (!mp->glx_context) return; mp->object = (mp->object) % 5 + 1; pinit(mi); } #endif /* !STANDALONE */ ENTRYPOINT void release_morph3d(ModeInfo * mi) { if (morph3d != NULL) { (void) free((void *) morph3d); morph3d = (morph3dstruct *) NULL; } FreeAllGL(mi); } #endif XSCREENSAVER_MODULE ("Morph3D", morph3d) xscreensaver-5.36/hacks/glx/pipeobjs.c000644 000767 000024 00000314105 12701612217 020003 0ustar00jwzstaff000000 000000 #if 0 static const char sccsid[] = "@(#)pipeobjs.c 4.04 97/07/28 xlockmore"; #endif /*- * Points, polygons, and normal vectors to render objects for pipes. * * Generated by lw2ogl. */ #ifndef STANDALONE #include "xlock.h" #endif #ifdef USE_GL #include "buildlwo.h" static const GLfloat BigValve_PNTS[] = { 0.756788, 0.614672, 0, 0.779498, 0.599497, 0, 0.794672, 0.576788, 0, 0.8, 0.55, 0, 0.794672, 0.523212, 0, 0.779498, 0.500503, 0, 0.756788, 0.485328, 0, 0.73, 0.48, 0, 0.703212, 0.485328, 0, 0.680503, 0.500503, 0, 0.665328, 0.523212, 0, 0.66, 0.55, 0, 0.665328, 0.576788, 0, 0.680503, 0.599497, 0, 0.703212, 0.614672, 0, 0.73, 0.62, 0, 0.756788, 0.602861, 0.119916, 0.779498, 0.587978, 0.116956, 0.794672, 0.565705, 0.112526, 0.8, 0.539432, 0.1073, 0.794672, 0.513159, 0.102074, 0.779498, 0.490886, 0.097643, 0.756788, 0.476003, 0.094683, 0.73, 0.470777, 0.093643, 0.703212, 0.476003, 0.094683, 0.680503, 0.490886, 0.097643, 0.665328, 0.513159, 0.102074, 0.66, 0.539432, 0.1073, 0.665328, 0.565705, 0.112526, 0.680503, 0.587978, 0.116956, 0.703212, 0.602861, 0.119916, 0.73, 0.608087, 0.120956, 0.756788, 0.567882, 0.235225, 0.779498, 0.553863, 0.229418, 0.794672, 0.532882, 0.220727, 0.8, 0.508134, 0.210476, 0.794672, 0.483385, 0.200225, 0.779498, 0.462404, 0.191534, 0.756788, 0.448385, 0.185727, 0.73, 0.443462, 0.183688, 0.703212, 0.448385, 0.185727, 0.680503, 0.462404, 0.191534, 0.665328, 0.483385, 0.200225, 0.66, 0.508134, 0.210476, 0.665328, 0.532882, 0.220727, 0.680503, 0.553863, 0.229418, 0.703212, 0.567882, 0.235225, 0.73, 0.572805, 0.237264, 0.756788, 0.511081, 0.341493, 0.779498, 0.498464, 0.333063, 0.794672, 0.479582, 0.320446, 0.8, 0.457308, 0.305564, 0.794672, 0.435035, 0.290681, 0.779498, 0.416153, 0.278064, 0.756788, 0.403536, 0.269634, 0.73, 0.399105, 0.266674, 0.703212, 0.403536, 0.269634, 0.680503, 0.416153, 0.278064, 0.665328, 0.435035, 0.290681, 0.66, 0.457308, 0.305564, 0.665328, 0.479582, 0.320446, 0.680503, 0.498464, 0.333063, 0.703212, 0.511081, 0.341493, 0.73, 0.515511, 0.344454, 0.756788, 0.434638, 0.434638, 0.779498, 0.423909, 0.423909, 0.794672, 0.407851, 0.407851, 0.8, 0.388909, 0.388909, 0.794672, 0.369967, 0.369967, 0.779498, 0.353909, 0.353909, 0.756788, 0.343179, 0.343179, 0.73, 0.339411, 0.339411, 0.703212, 0.343179, 0.343179, 0.680503, 0.353909, 0.353909, 0.665328, 0.369967, 0.369967, 0.66, 0.388909, 0.388909, 0.665328, 0.407851, 0.407851, 0.680503, 0.423909, 0.423909, 0.703212, 0.434638, 0.434638, 0.73, 0.438406, 0.438406, 0.756788, 0.341493, 0.511081, 0.779498, 0.333063, 0.498464, 0.794672, 0.320446, 0.479582, 0.8, 0.305564, 0.457308, 0.794672, 0.290681, 0.435035, 0.779498, 0.278064, 0.416153, 0.756788, 0.269634, 0.403536, 0.73, 0.266674, 0.399105, 0.703212, 0.269634, 0.403536, 0.680503, 0.278064, 0.416153, 0.665328, 0.290681, 0.435035, 0.66, 0.305564, 0.457308, 0.665328, 0.320446, 0.479582, 0.680503, 0.333063, 0.498464, 0.703212, 0.341493, 0.511081, 0.73, 0.344454, 0.515511, 0.756788, 0.235225, 0.567882, 0.779498, 0.229418, 0.553863, 0.794672, 0.220727, 0.532882, 0.8, 0.210476, 0.508134, 0.794672, 0.200225, 0.483385, 0.779498, 0.191534, 0.462404, 0.756788, 0.185727, 0.448385, 0.73, 0.183688, 0.443462, 0.703212, 0.185727, 0.448385, 0.680503, 0.191534, 0.462404, 0.665328, 0.200225, 0.483385, 0.66, 0.210476, 0.508134, 0.665328, 0.220727, 0.532882, 0.680503, 0.229418, 0.553863, 0.703212, 0.235225, 0.567882, 0.73, 0.237264, 0.572805, 0.756788, 0.119916, 0.602861, 0.779498, 0.116956, 0.587978, 0.794672, 0.112526, 0.565705, 0.8, 0.1073, 0.539432, 0.794672, 0.102074, 0.513159, 0.779498, 0.097643, 0.490886, 0.756788, 0.094683, 0.476003, 0.73, 0.093643, 0.470777, 0.703212, 0.094683, 0.476003, 0.680503, 0.097643, 0.490886, 0.665328, 0.102074, 0.513159, 0.66, 0.1073, 0.539432, 0.665328, 0.112526, 0.565705, 0.680503, 0.116956, 0.587978, 0.703212, 0.119916, 0.602861, 0.73, 0.120956, 0.608087, 0.756788, 0, 0.614672, 0.779498, 0, 0.599497, 0.794672, 0, 0.576788, 0.8, 0, 0.55, 0.794672, 0, 0.523212, 0.779498, 0, 0.500503, 0.756788, 0, 0.485328, 0.73, 0, 0.48, 0.703212, 0, 0.485328, 0.680503, 0, 0.500503, 0.665328, 0, 0.523212, 0.66, 0, 0.55, 0.665328, 0, 0.576788, 0.680503, 0, 0.599497, 0.703212, 0, 0.614672, 0.73, 0, 0.62, 0.756788, -0.119916, 0.602861, 0.779498, -0.116956, 0.587978, 0.794672, -0.112526, 0.565705, 0.8, -0.1073, 0.539432, 0.794672, -0.102074, 0.513159, 0.779498, -0.097643, 0.490886, 0.756788, -0.094683, 0.476003, 0.73, -0.093643, 0.470777, 0.703212, -0.094683, 0.476003, 0.680503, -0.097643, 0.490886, 0.665328, -0.102074, 0.513159, 0.66, -0.1073, 0.539432, 0.665328, -0.112526, 0.565705, 0.680503, -0.116956, 0.587978, 0.703212, -0.119916, 0.602861, 0.73, -0.120956, 0.608087, 0.756788, -0.235225, 0.567882, 0.779498, -0.229418, 0.553863, 0.794672, -0.220727, 0.532882, 0.8, -0.210476, 0.508134, 0.794672, -0.200225, 0.483385, 0.779498, -0.191534, 0.462404, 0.756788, -0.185727, 0.448385, 0.73, -0.183688, 0.443462, 0.703212, -0.185727, 0.448385, 0.680503, -0.191534, 0.462404, 0.665328, -0.200225, 0.483385, 0.66, -0.210476, 0.508134, 0.665328, -0.220727, 0.532882, 0.680503, -0.229418, 0.553863, 0.703212, -0.235225, 0.567882, 0.73, -0.237264, 0.572805, 0.756788, -0.341493, 0.511081, 0.779498, -0.333063, 0.498464, 0.794672, -0.320446, 0.479582, 0.8, -0.305564, 0.457308, 0.794672, -0.290681, 0.435035, 0.779498, -0.278064, 0.416153, 0.756788, -0.269634, 0.403536, 0.73, -0.266674, 0.399105, 0.703212, -0.269634, 0.403536, 0.680503, -0.278064, 0.416153, 0.665328, -0.290681, 0.435035, 0.66, -0.305564, 0.457308, 0.665328, -0.320446, 0.479582, 0.680503, -0.333063, 0.498464, 0.703212, -0.341493, 0.511081, 0.73, -0.344454, 0.515511, 0.756788, -0.434638, 0.434638, 0.779498, -0.423909, 0.423909, 0.794672, -0.407851, 0.407851, 0.8, -0.388909, 0.388909, 0.794672, -0.369967, 0.369967, 0.779498, -0.353909, 0.353909, 0.756788, -0.343179, 0.343179, 0.73, -0.339411, 0.339411, 0.703212, -0.343179, 0.343179, 0.680503, -0.353909, 0.353909, 0.665328, -0.369967, 0.369967, 0.66, -0.388909, 0.388909, 0.665328, -0.407851, 0.407851, 0.680503, -0.423909, 0.423909, 0.703212, -0.434638, 0.434638, 0.73, -0.438406, 0.438406, 0.756788, -0.511081, 0.341493, 0.779498, -0.498464, 0.333063, 0.794672, -0.479582, 0.320446, 0.8, -0.457308, 0.305564, 0.794672, -0.435035, 0.290681, 0.779498, -0.416153, 0.278064, 0.756788, -0.403536, 0.269634, 0.73, -0.399105, 0.266674, 0.703212, -0.403536, 0.269634, 0.680503, -0.416153, 0.278064, 0.665328, -0.435035, 0.290681, 0.66, -0.457308, 0.305564, 0.665328, -0.479582, 0.320446, 0.680503, -0.498464, 0.333063, 0.703212, -0.511081, 0.341493, 0.73, -0.515511, 0.344454, 0.756788, -0.567882, 0.235225, 0.779498, -0.553863, 0.229418, 0.794672, -0.532882, 0.220727, 0.8, -0.508134, 0.210476, 0.794672, -0.483385, 0.200225, 0.779498, -0.462404, 0.191534, 0.756788, -0.448385, 0.185727, 0.73, -0.443462, 0.183688, 0.703212, -0.448385, 0.185727, 0.680503, -0.462404, 0.191534, 0.665328, -0.483385, 0.200225, 0.66, -0.508134, 0.210476, 0.665328, -0.532882, 0.220727, 0.680503, -0.553863, 0.229418, 0.703212, -0.567882, 0.235225, 0.73, -0.572805, 0.237264, 0.756788, -0.602861, 0.119916, 0.779498, -0.587978, 0.116956, 0.794672, -0.565705, 0.112526, 0.8, -0.539432, 0.1073, 0.794672, -0.513159, 0.102074, 0.779498, -0.490886, 0.097643, 0.756788, -0.476003, 0.094683, 0.73, -0.470777, 0.093643, 0.703212, -0.476003, 0.094683, 0.680503, -0.490886, 0.097643, 0.665328, -0.513159, 0.102074, 0.66, -0.539432, 0.1073, 0.665328, -0.565705, 0.112526, 0.680503, -0.587978, 0.116956, 0.703212, -0.602861, 0.119916, 0.73, -0.608087, 0.120956, 0.756788, -0.614672, 0, 0.779498, -0.599497, 0, 0.794672, -0.576788, 0, 0.8, -0.55, 0, 0.794672, -0.523212, 0, 0.779498, -0.500503, 0, 0.756788, -0.485328, 0, 0.73, -0.48, 0, 0.703212, -0.485328, 0, 0.680503, -0.500503, 0, 0.665328, -0.523212, 0, 0.66, -0.55, 0, 0.665328, -0.576788, 0, 0.680503, -0.599497, 0, 0.703212, -0.614672, 0, 0.73, -0.62, 0, 0.756788, -0.602861, -0.119916, 0.779498, -0.587978, -0.116956, 0.794672, -0.565705, -0.112526, 0.8, -0.539432, -0.1073, 0.794672, -0.513159, -0.102074, 0.779498, -0.490886, -0.097643, 0.756788, -0.476003, -0.094683, 0.73, -0.470777, -0.093643, 0.703212, -0.476003, -0.094683, 0.680503, -0.490886, -0.097643, 0.665328, -0.513159, -0.102074, 0.66, -0.539432, -0.1073, 0.665328, -0.565705, -0.112526, 0.680503, -0.587978, -0.116956, 0.703212, -0.602861, -0.119916, 0.73, -0.608087, -0.120956, 0.756788, -0.567882, -0.235225, 0.779498, -0.553863, -0.229418, 0.794672, -0.532882, -0.220727, 0.8, -0.508134, -0.210476, 0.794672, -0.483385, -0.200225, 0.779498, -0.462404, -0.191534, 0.756788, -0.448385, -0.185727, 0.73, -0.443462, -0.183688, 0.703212, -0.448385, -0.185727, 0.680503, -0.462404, -0.191534, 0.665328, -0.483385, -0.200225, 0.66, -0.508134, -0.210476, 0.665328, -0.532882, -0.220727, 0.680503, -0.553863, -0.229418, 0.703212, -0.567882, -0.235225, 0.73, -0.572805, -0.237264, 0.756788, -0.511081, -0.341493, 0.779498, -0.498464, -0.333063, 0.794672, -0.479582, -0.320446, 0.8, -0.457308, -0.305564, 0.794672, -0.435035, -0.290681, 0.779498, -0.416153, -0.278064, 0.756788, -0.403536, -0.269634, 0.73, -0.399105, -0.266674, 0.703212, -0.403536, -0.269634, 0.680503, -0.416153, -0.278064, 0.665328, -0.435035, -0.290681, 0.66, -0.457308, -0.305564, 0.665328, -0.479582, -0.320446, 0.680503, -0.498464, -0.333063, 0.703212, -0.511081, -0.341493, 0.73, -0.515511, -0.344454, 0.756788, -0.434638, -0.434638, 0.779498, -0.423909, -0.423909, 0.794672, -0.407851, -0.407851, 0.8, -0.388909, -0.388909, 0.794672, -0.369967, -0.369967, 0.779498, -0.353909, -0.353909, 0.756788, -0.343179, -0.343179, 0.73, -0.339411, -0.339411, 0.703212, -0.343179, -0.343179, 0.680503, -0.353909, -0.353909, 0.665328, -0.369967, -0.369967, 0.66, -0.388909, -0.388909, 0.665328, -0.407851, -0.407851, 0.680503, -0.423909, -0.423909, 0.703212, -0.434638, -0.434638, 0.73, -0.438406, -0.438406, 0.756788, -0.341493, -0.511081, 0.779498, -0.333063, -0.498464, 0.794672, -0.320446, -0.479582, 0.8, -0.305564, -0.457308, 0.794672, -0.290681, -0.435035, 0.779498, -0.278064, -0.416153, 0.756788, -0.269634, -0.403536, 0.73, -0.266674, -0.399105, 0.703212, -0.269634, -0.403536, 0.680503, -0.278064, -0.416153, 0.665328, -0.290681, -0.435035, 0.66, -0.305564, -0.457308, 0.665328, -0.320446, -0.479582, 0.680503, -0.333063, -0.498464, 0.703212, -0.341493, -0.511081, 0.73, -0.344454, -0.515511, 0.756788, -0.235225, -0.567882, 0.779498, -0.229418, -0.553863, 0.794672, -0.220727, -0.532882, 0.8, -0.210476, -0.508134, 0.794672, -0.200225, -0.483385, 0.779498, -0.191534, -0.462404, 0.756788, -0.185727, -0.448385, 0.73, -0.183688, -0.443462, 0.703212, -0.185727, -0.448385, 0.680503, -0.191534, -0.462404, 0.665328, -0.200225, -0.483385, 0.66, -0.210476, -0.508134, 0.665328, -0.220727, -0.532882, 0.680503, -0.229418, -0.553863, 0.703212, -0.235225, -0.567882, 0.73, -0.237264, -0.572805, 0.756788, -0.119916, -0.602861, 0.779498, -0.116956, -0.587978, 0.794672, -0.112526, -0.565705, 0.8, -0.1073, -0.539432, 0.794672, -0.102074, -0.513159, 0.779498, -0.097643, -0.490885, 0.756788, -0.094683, -0.476003, 0.73, -0.093643, -0.470777, 0.703212, -0.094683, -0.476003, 0.680503, -0.097643, -0.490885, 0.665328, -0.102074, -0.513159, 0.66, -0.1073, -0.539432, 0.665328, -0.112526, -0.565705, 0.680503, -0.116956, -0.587978, 0.703212, -0.119916, -0.602861, 0.73, -0.120956, -0.608087, 0.756788, 0, -0.614672, 0.779498, 0, -0.599497, 0.794672, 0, -0.576788, 0.8, 0, -0.55, 0.794672, 0, -0.523212, 0.779498, 0, -0.500503, 0.756788, 0, -0.485328, 0.73, 0, -0.48, 0.703212, 0, -0.485328, 0.680503, 0, -0.500503, 0.665328, 0, -0.523212, 0.66, 0, -0.55, 0.665328, 0, -0.576788, 0.680503, 0, -0.599497, 0.703212, 0, -0.614672, 0.73, 0, -0.62, 0.756788, 0.119916, -0.602861, 0.779498, 0.116956, -0.587978, 0.794672, 0.112526, -0.565705, 0.8, 0.1073, -0.539432, 0.794672, 0.102074, -0.513159, 0.779498, 0.097643, -0.490886, 0.756788, 0.094683, -0.476003, 0.73, 0.093643, -0.470777, 0.703212, 0.094683, -0.476003, 0.680503, 0.097643, -0.490886, 0.665328, 0.102074, -0.513159, 0.66, 0.1073, -0.539432, 0.665328, 0.112526, -0.565705, 0.680503, 0.116956, -0.587978, 0.703212, 0.119916, -0.602861, 0.73, 0.120956, -0.608087, 0.756788, 0.235225, -0.567882, 0.779498, 0.229418, -0.553863, 0.794672, 0.220727, -0.532882, 0.8, 0.210476, -0.508134, 0.794672, 0.200225, -0.483385, 0.779498, 0.191534, -0.462404, 0.756788, 0.185727, -0.448385, 0.73, 0.183688, -0.443462, 0.703212, 0.185727, -0.448385, 0.680503, 0.191534, -0.462404, 0.665328, 0.200225, -0.483385, 0.66, 0.210476, -0.508134, 0.665328, 0.220727, -0.532882, 0.680503, 0.229418, -0.553863, 0.703212, 0.235225, -0.567882, 0.73, 0.237264, -0.572805, 0.756788, 0.341493, -0.511081, 0.779498, 0.333063, -0.498464, 0.794672, 0.320446, -0.479582, 0.8, 0.305564, -0.457308, 0.794672, 0.290681, -0.435035, 0.779498, 0.278064, -0.416153, 0.756788, 0.269634, -0.403536, 0.73, 0.266674, -0.399105, 0.703212, 0.269634, -0.403536, 0.680503, 0.278064, -0.416153, 0.665328, 0.290681, -0.435035, 0.66, 0.305564, -0.457308, 0.665328, 0.320446, -0.479582, 0.680503, 0.333063, -0.498464, 0.703212, 0.341493, -0.511081, 0.73, 0.344454, -0.515511, 0.756788, 0.434638, -0.434638, 0.779498, 0.423909, -0.423909, 0.794672, 0.407851, -0.407851, 0.8, 0.388909, -0.388909, 0.794672, 0.369967, -0.369967, 0.779498, 0.353909, -0.353909, 0.756788, 0.343179, -0.343179, 0.73, 0.339411, -0.339411, 0.703212, 0.343179, -0.343179, 0.680503, 0.353909, -0.353909, 0.665328, 0.369967, -0.369967, 0.66, 0.388909, -0.388909, 0.665328, 0.407851, -0.407851, 0.680503, 0.423909, -0.423909, 0.703212, 0.434638, -0.434638, 0.73, 0.438406, -0.438406, 0.756788, 0.511081, -0.341493, 0.779498, 0.498464, -0.333063, 0.794672, 0.479582, -0.320446, 0.8, 0.457308, -0.305564, 0.794672, 0.435035, -0.290681, 0.779498, 0.416153, -0.278064, 0.756788, 0.403536, -0.269634, 0.73, 0.399105, -0.266674, 0.703212, 0.403536, -0.269634, 0.680503, 0.416153, -0.278064, 0.665328, 0.435035, -0.290681, 0.66, 0.457308, -0.305564, 0.665328, 0.479582, -0.320446, 0.680503, 0.498464, -0.333063, 0.703212, 0.511081, -0.341493, 0.73, 0.515511, -0.344454, 0.756788, 0.567882, -0.235225, 0.779498, 0.553863, -0.229418, 0.794672, 0.532882, -0.220727, 0.8, 0.508134, -0.210476, 0.794672, 0.483385, -0.200225, 0.779498, 0.462404, -0.191534, 0.756788, 0.448385, -0.185727, 0.73, 0.443462, -0.183688, 0.703212, 0.448385, -0.185727, 0.680503, 0.462404, -0.191534, 0.665328, 0.483385, -0.200225, 0.66, 0.508134, -0.210476, 0.665328, 0.532882, -0.220727, 0.680503, 0.553863, -0.229418, 0.703212, 0.567882, -0.235225, 0.73, 0.572805, -0.237264, 0.756788, 0.602861, -0.119916, 0.779498, 0.587978, -0.116956, 0.794672, 0.565705, -0.112526, 0.8, 0.539432, -0.1073, 0.794672, 0.513159, -0.102074, 0.779498, 0.490885, -0.097643, 0.756788, 0.476003, -0.094683, 0.73, 0.470777, -0.093643, 0.703212, 0.476003, -0.094683, 0.680503, 0.490885, -0.097643, 0.665328, 0.513159, -0.102074, 0.66, 0.539432, -0.1073, 0.665328, 0.565705, -0.112526, 0.680503, 0.587978, -0.116956, 0.703212, 0.602861, -0.119916, 0.73, 0.608087, -0.120956, 0.42, 0, -0.2, 0.42, 0.051764, -0.193185, 0.42, 0.1, -0.173205, 0.42, 0.141421, -0.141421, 0.42, 0.173205, -0.1, 0.42, 0.193185, -0.051764, 0.42, 0.2, 0, 0.42, 0.193185, 0.051764, 0.42, 0.173205, 0.1, 0.42, 0.141421, 0.141421, 0.42, 0.1, 0.173205, 0.42, 0.051764, 0.193185, 0.42, 0, 0.2, 0.42, -0.051764, 0.193185, 0.42, -0.1, 0.173205, 0.42, -0.141421, 0.141421, 0.42, -0.173205, 0.1, 0.42, -0.193185, 0.051764, 0.42, -0.2, 0, 0.42, -0.193185, -0.051764, 0.42, -0.173205, -0.1, 0.42, -0.141421, -0.141421, 0.42, -0.1, -0.173205, 0.42, -0.051764, -0.193185, 0.54, 0, -0.2, 0.54, 0.051764, -0.193185, 0.54, 0.1, -0.173205, 0.54, 0.141421, -0.141421, 0.54, 0.173205, -0.1, 0.54, 0.193185, -0.051764, 0.54, 0.2, 0, 0.54, 0.193185, 0.051764, 0.54, 0.173205, 0.1, 0.54, 0.141421, 0.141421, 0.54, 0.1, 0.173205, 0.54, 0.051764, 0.193185, 0.54, 0, 0.2, 0.54, -0.051764, 0.193185, 0.54, -0.1, 0.173205, 0.54, -0.141421, 0.141421, 0.54, -0.173205, 0.1, 0.54, -0.193185, 0.051764, 0.54, -0.2, 0, 0.54, -0.193185, -0.051764, 0.54, -0.173205, -0.1, 0.54, -0.141421, -0.141421, 0.54, -0.1, -0.173205, 0.54, -0.051764, -0.193185, 0.79, 0.06, 0, 0.785433, 0.06, -0.022961, 0.772426, 0.06, -0.042426, 0.752961, 0.06, -0.055433, 0.73, 0.06, -0.06, 0.707039, 0.06, -0.055433, 0.687574, 0.06, -0.042426, 0.674567, 0.06, -0.022961, 0.67, 0.06, 0, 0.674567, 0.06, 0.022961, 0.687574, 0.06, 0.042426, 0.707039, 0.06, 0.055433, 0.73, 0.06, 0.06, 0.752961, 0.06, 0.055433, 0.772426, 0.06, 0.042426, 0.785433, 0.06, 0.022961, 0.79, 0.55, 0, 0.785433, 0.55, -0.022961, 0.772426, 0.55, -0.042426, 0.752961, 0.55, -0.055433, 0.73, 0.55, -0.06, 0.707039, 0.55, -0.055433, 0.687574, 0.55, -0.042426, 0.674567, 0.55, -0.022961, 0.67, 0.55, 0, 0.674567, 0.55, 0.022961, 0.687574, 0.55, 0.042426, 0.707039, 0.55, 0.055433, 0.73, 0.55, 0.06, 0.752961, 0.55, 0.055433, 0.772426, 0.55, 0.042426, 0.785433, 0.55, 0.022961, 0.79, 0, 0.06, 0.785433, 0.022961, 0.06, 0.772426, 0.042426, 0.06, 0.752961, 0.055433, 0.06, 0.707039, 0.055433, 0.06, 0.687574, 0.042426, 0.06, 0.674567, 0.022961, 0.06, 0.67, 0, 0.06, 0.674567, -0.022961, 0.06, 0.687574, -0.042426, 0.06, 0.707039, -0.055433, 0.06, 0.73, -0.06, 0.06, 0.752961, -0.055433, 0.06, 0.772426, -0.042426, 0.06, 0.785433, -0.022961, 0.06, 0.79, 0, 0.55, 0.785433, 0.022961, 0.55, 0.772426, 0.042426, 0.55, 0.752961, 0.055433, 0.55, 0.73, 0.06, 0.55, 0.707039, 0.055433, 0.55, 0.687574, 0.042426, 0.55, 0.674567, 0.022961, 0.55, 0.67, 0, 0.55, 0.674567, -0.022961, 0.55, 0.687574, -0.042426, 0.55, 0.707039, -0.055433, 0.55, 0.73, -0.06, 0.55, 0.752961, -0.055433, 0.55, 0.772426, -0.042426, 0.55, 0.785433, -0.022961, 0.55, 0.79, -0.06, 0, 0.785433, -0.06, 0.022961, 0.772426, -0.06, 0.042426, 0.752961, -0.06, 0.055433, 0.707039, -0.06, 0.055433, 0.687574, -0.06, 0.042426, 0.674567, -0.06, 0.022961, 0.67, -0.06, 0, 0.674567, -0.06, -0.022961, 0.687574, -0.06, -0.042426, 0.707039, -0.06, -0.055433, 0.73, -0.06, -0.06, 0.752961, -0.06, -0.055433, 0.772426, -0.06, -0.042426, 0.785433, -0.06, -0.022961, 0.79, -0.55, 0, 0.785433, -0.55, 0.022961, 0.772426, -0.55, 0.042426, 0.752961, -0.55, 0.055433, 0.73, -0.55, 0.06, 0.707039, -0.55, 0.055433, 0.687574, -0.55, 0.042426, 0.674567, -0.55, 0.022961, 0.67, -0.55, 0, 0.674567, -0.55, -0.022961, 0.687574, -0.55, -0.042426, 0.707039, -0.55, -0.055433, 0.73, -0.55, -0.06, 0.752961, -0.55, -0.055433, 0.772426, -0.55, -0.042426, 0.785433, -0.55, -0.022961, 0.79, 0, -0.06, 0.785433, -0.022961, -0.06, 0.772426, -0.042426, -0.06, 0.752961, -0.055433, -0.06, 0.707039, -0.055433, -0.06, 0.687574, -0.042426, -0.06, 0.674567, -0.022961, -0.06, 0.67, 0, -0.06, 0.674567, 0.022961, -0.06, 0.687574, 0.042426, -0.06, 0.707039, 0.055433, -0.06, 0.752961, 0.055433, -0.06, 0.772426, 0.042426, -0.06, 0.785433, 0.022961, -0.06, 0.79, 0, -0.55, 0.785433, -0.022961, -0.55, 0.772426, -0.042426, -0.55, 0.752961, -0.055433, -0.55, 0.73, -0.06, -0.55, 0.707039, -0.055433, -0.55, 0.687574, -0.042426, -0.55, 0.674567, -0.022961, -0.55, 0.67, 0, -0.55, 0.674567, 0.022961, -0.55, 0.687574, 0.042426, -0.55, 0.707039, 0.055433, -0.55, 0.73, 0.06, -0.55, 0.752961, 0.055433, -0.55, 0.772426, 0.042426, -0.55, 0.785433, 0.022961, -0.55, 0.54, 0, -0.1, 0.54, 0.038268, -0.092388, 0.54, 0.070711, -0.070711, 0.54, 0.092388, -0.038268, 0.54, 0.1, 0, 0.54, 0.092388, 0.038268, 0.54, 0.070711, 0.070711, 0.54, 0.038268, 0.092388, 0.54, 0, 0.1, 0.54, -0.038268, 0.092388, 0.54, -0.070711, 0.070711, 0.54, -0.092388, 0.038268, 0.54, -0.1, 0, 0.54, -0.092388, -0.038268, 0.54, -0.070711, -0.070711, 0.54, -0.038268, -0.092388, 0.8, 0, -0.1, 0.8, 0.038268, -0.092388, 0.8, 0.070711, -0.070711, 0.8, 0.092388, -0.038268, 0.8, 0.1, 0, 0.8, 0.092388, 0.038268, 0.8, 0.070711, 0.070711, 0.8, 0.038268, 0.092388, 0.8, 0, 0.1, 0.8, -0.038268, 0.092388, 0.8, -0.070711, 0.070711, 0.8, -0.092388, 0.038268, 0.8, -0.1, 0, 0.8, -0.092388, -0.038268, 0.8, -0.070711, -0.070711, 0.8, -0.038268, -0.092388, }; static const GLfloat BigValve_normals[] = { -1, 0, 0, 0, 0.19509, -0.980785, 0, 0.55557, -0.83147, 0, 0.83147, -0.55557, 0, 0.980785, -0.19509, 0, 0.980785, 0.19509, 0, 0.83147, 0.55557, 0, 0.55557, 0.83147, 0, 0.19509, 0.980785, 0, -0.19509, 0.980785, 0, -0.55557, 0.83147, 0, -0.83147, 0.55557, 0, -0.980785, 0.19509, 0, -0.980785, -0.19509, 0, -0.83147, -0.55557, 0, -0.55557, -0.83147, 0, -0.19509, -0.980785, 1, 0, 0, 0.980785, -0.195092, 0, 0.83147, -0.555569, 0, 0.555569, -0.83147, 0, 0.195091, -0.980785, 0, -0.19509, -0.980785, 0, -0.55557, -0.831469, 0, -0.831469, -0.555571, 0, -0.980785, -0.195089, 0, -0.980785, 0.195089, 0, -0.831469, 0.555571, 0, -0.55557, 0.831469, 0, -0.19509, 0.980785, 0, 0.195091, 0.980785, 0, 0.555569, 0.83147, 0, 0.83147, 0.555569, 0, 0.980785, 0.195092, 0, 0.980785, 0, 0.195092, 0.83147, 0, 0.555569, 0.555569, 0, 0.83147, 0.195091, 0, 0.980785, -0.19509, 0, 0.980785, -0.55557, 0, 0.831469, -0.831469, 0, 0.555571, -0.980785, 0, 0.195089, -0.980785, 0, -0.195089, -0.831469, 0, -0.555571, -0.55557, 0, -0.831469, -0.19509, 0, -0.980785, 0.195091, 0, -0.980785, 0.555569, 0, -0.83147, 0.83147, 0, -0.555569, 0.980785, 0, -0.195092, 0.980785, 0.195092, 0, 0.83147, 0.555569, 0, 0.555569, 0.83147, 0, 0.195091, 0.980785, 0, -0.19509, 0.980785, 0, -0.55557, 0.831469, 0, -0.831469, 0.555571, 0, -0.980785, 0.195089, 0, -0.980785, -0.195089, 0, -0.831469, -0.555571, 0, -0.55557, -0.831469, 0, -0.19509, -0.980785, 0, 0.195091, -0.980785, 0, 0.555569, -0.83147, 0, 0.83147, -0.555569, 0, 0.980785, -0.195092, 0, 0.980785, 0, -0.195092, 0.83147, 0, -0.555569, 0.555569, 0, -0.83147, 0.195091, 0, -0.980785, -0.19509, 0, -0.980785, -0.55557, 0, -0.831469, -0.831469, 0, -0.555571, -0.980785, 0, -0.195089, -0.980785, 0, 0.195089, -0.831469, 0, 0.555571, -0.55557, 0, 0.831469, -0.19509, 0, 0.980785, 0.195091, 0, 0.980785, 0.555569, 0, 0.83147, 0.83147, 0, 0.555569, 0.980785, 0, 0.195092, -1, 0, 0, 0, 0.130526, -0.991445, 0, 0.382684, -0.92388, 0, 0.608761, -0.793353, 0, 0.793353, -0.608761, 0, 0.92388, -0.382684, 0, 0.991445, -0.130526, 0, 0.991445, 0.130526, 0, 0.92388, 0.382684, 0, 0.793353, 0.608761, 0, 0.608761, 0.793353, 0, 0.382684, 0.92388, 0, 0.130526, 0.991445, 0, -0.130526, 0.991445, 0, -0.382684, 0.92388, 0, -0.608761, 0.793353, 0, -0.793353, 0.608761, 0, -0.92388, 0.382684, 0, -0.991445, 0.130526, 0, -0.991445, -0.130526, 0, -0.92388, -0.382684, 0, -0.793353, -0.608761, 0, -0.608761, -0.793353, 0, -0.382684, -0.92388, 0, -0.130526, -0.991445, 1, 0, 0, 0.194185, 0.976241, 0.096151, -0.194185, 0.976241, 0.096151, -0.553718, 0.828695, 0.081619, -0.830228, 0.55474, 0.054637, -0.980604, 0.195054, 0.019211, -0.980605, -0.195053, -0.019211, -0.830227, -0.554741, -0.054637, -0.553717, -0.828695, -0.081619, -0.194187, -0.976241, -0.096151, 0.194188, -0.976241, -0.096151, 0.553716, -0.828696, -0.081619, 0.830227, -0.554741, -0.054637, 0.980604, -0.195053, -0.019211, 0.980604, 0.195054, 0.019211, 0.830228, 0.55474, 0.054637, 0.553717, 0.828695, 0.081619, 0.194186, 0.938725, 0.284759, -0.194185, 0.938725, 0.284759, -0.553717, 0.796849, 0.241721, -0.830228, 0.533421, 0.161812, -0.980604, 0.187558, 0.056895, -0.980604, -0.187558, -0.056895, -0.830227, -0.533422, -0.161812, -0.553717, -0.796849, -0.241722, -0.194186, -0.938725, -0.284759, 0.194187, -0.938724, -0.284759, 0.553716, -0.796849, -0.241722, 0.830227, -0.533422, -0.161812, 0.980604, -0.187558, -0.056895, 0.980604, 0.187558, 0.056895, 0.830228, 0.533421, 0.161811, 0.553716, 0.79685, 0.241722, 0.194186, 0.865134, 0.462423, -0.194185, 0.865134, 0.462424, -0.553717, 0.73438, 0.392534, -0.830228, 0.491604, 0.262768, -0.980604, 0.172854, 0.092393, -0.980604, -0.172854, -0.092393, -0.830227, -0.491605, -0.262768, -0.553717, -0.73438, -0.392534, -0.194187, -0.865134, -0.462424, 0.194187, -0.865134, -0.462423, 0.553716, -0.734381, -0.392534, 0.830227, -0.491605, -0.262768, 0.980604, -0.172854, -0.092393, 0.980604, 0.172854, 0.092393, 0.830228, 0.491604, 0.262768, 0.553716, 0.734381, 0.392535, 0.194186, 0.758296, 0.622317, -0.194186, 0.758296, 0.622318, -0.553717, 0.64369, 0.528263, -0.830228, 0.430895, 0.353626, -0.980604, 0.151508, 0.12434, -0.980604, -0.151508, -0.124339, -0.830227, -0.430895, -0.353627, -0.553717, -0.64369, -0.528263, -0.194186, -0.758296, -0.622317, 0.194186, -0.758296, -0.622318, 0.553716, -0.64369, -0.528263, 0.830227, -0.430895, -0.353627, 0.980604, -0.151508, -0.124339, 0.980604, 0.151508, 0.12434, 0.830228, 0.430895, 0.353626, 0.553716, 0.64369, 0.528263, 0.194186, 0.622317, 0.758296, -0.194185, 0.622318, 0.758296, -0.553717, 0.528263, 0.64369, -0.830228, 0.353626, 0.430895, -0.980604, 0.124339, 0.151508, -0.980604, -0.124339, -0.151508, -0.830227, -0.353627, -0.430895, -0.553717, -0.528262, -0.643689, -0.194187, -0.622317, -0.758296, 0.194187, -0.622317, -0.758296, 0.553716, -0.528263, -0.64369, 0.830227, -0.353627, -0.430895, 0.980604, -0.124339, -0.151508, 0.980604, 0.12434, 0.151508, 0.830228, 0.353626, 0.430895, 0.553716, 0.528263, 0.64369, 0.194186, 0.462423, 0.865134, -0.194185, 0.462424, 0.865134, -0.553717, 0.392534, 0.73438, -0.830228, 0.262768, 0.491604, -0.980604, 0.092393, 0.172855, -0.980604, -0.092392, -0.172854, -0.830227, -0.262768, -0.491605, -0.553717, -0.392534, -0.73438, -0.194186, -0.462424, -0.865134, 0.194187, -0.462423, -0.865134, 0.553716, -0.392535, -0.734381, 0.830227, -0.262768, -0.491605, 0.980604, -0.092392, -0.172854, 0.980604, 0.092393, 0.172855, 0.830228, 0.262768, 0.491604, 0.553716, 0.392535, 0.734381, 0.194185, 0.284759, 0.938725, -0.194185, 0.284759, 0.938725, -0.553718, 0.241721, 0.796848, -0.830228, 0.161812, 0.533422, -0.980604, 0.056895, 0.187558, -0.980604, -0.056895, -0.187558, -0.830227, -0.161812, -0.533423, -0.553717, -0.241722, -0.796849, -0.194187, -0.284759, -0.938725, 0.194188, -0.284759, -0.938724, 0.553716, -0.241722, -0.796849, 0.830227, -0.161812, -0.533423, 0.980604, -0.056895, -0.187557, 0.980604, 0.056895, 0.187558, 0.830228, 0.161812, 0.533422, 0.553717, 0.241722, 0.796849, 0.194186, 0.096151, 0.976241, -0.194186, 0.096151, 0.976241, -0.553717, 0.081619, 0.828695, -0.830228, 0.054637, 0.55474, -0.980604, 0.019211, 0.195054, -0.980604, -0.019211, -0.195054, -0.830227, -0.054637, -0.554741, -0.553717, -0.081619, -0.828695, -0.194187, -0.096151, -0.976241, 0.194187, -0.096151, -0.976241, 0.553716, -0.081619, -0.828696, 0.830227, -0.054637, -0.554741, 0.980604, -0.019211, -0.195054, 0.980604, 0.019211, 0.195054, 0.830228, 0.054637, 0.55474, 0.553716, 0.081619, 0.828696, 0.194185, -0.096151, 0.976241, -0.194185, -0.096151, 0.976241, -0.553718, -0.081619, 0.828695, -0.830228, -0.054637, 0.55474, -0.980604, -0.019211, 0.195054, -0.980605, 0.019211, -0.195053, -0.830227, 0.054637, -0.554741, -0.553717, 0.081619, -0.828695, -0.194187, 0.096151, -0.976241, 0.194188, 0.096151, -0.976241, 0.553716, 0.081619, -0.828696, 0.830227, 0.054637, -0.554741, 0.980604, 0.019211, -0.195053, 0.980604, -0.019211, 0.195054, 0.830228, -0.054637, 0.55474, 0.553717, -0.081619, 0.828695, 0.194186, -0.284759, 0.938725, -0.194185, -0.284759, 0.938725, -0.553717, -0.241721, 0.796849, -0.830228, -0.161812, 0.533421, -0.980604, -0.056895, 0.187558, -0.980604, 0.056895, -0.187558, -0.830227, 0.161812, -0.533422, -0.553717, 0.241722, -0.796849, -0.194186, 0.284759, -0.938725, 0.194187, 0.284759, -0.938724, 0.553716, 0.241722, -0.796849, 0.830227, 0.161812, -0.533422, 0.980604, 0.056895, -0.187558, 0.980604, -0.056895, 0.187558, 0.830228, -0.161811, 0.533421, 0.553716, -0.241722, 0.79685, 0.194186, -0.462423, 0.865134, -0.194185, -0.462424, 0.865134, -0.553717, -0.392534, 0.73438, -0.830228, -0.262768, 0.491604, -0.980604, -0.092393, 0.172854, -0.980604, 0.092393, -0.172854, -0.830227, 0.262768, -0.491605, -0.553717, 0.392534, -0.73438, -0.194187, 0.462424, -0.865134, 0.194187, 0.462423, -0.865134, 0.553716, 0.392534, -0.734381, 0.830227, 0.262768, -0.491605, 0.980604, 0.092393, -0.172854, 0.980604, -0.092393, 0.172854, 0.830228, -0.262768, 0.491604, 0.553716, -0.392535, 0.734381, 0.194186, -0.622317, 0.758296, -0.194186, -0.622318, 0.758296, -0.553717, -0.528263, 0.64369, -0.830228, -0.353626, 0.430895, -0.980604, -0.12434, 0.151508, -0.980604, 0.124339, -0.151508, -0.830227, 0.353627, -0.430895, -0.553717, 0.528263, -0.64369, -0.194186, 0.622317, -0.758296, 0.194186, 0.622318, -0.758296, 0.553716, 0.528263, -0.64369, 0.830227, 0.353627, -0.430895, 0.980604, 0.124339, -0.151508, 0.980604, -0.12434, 0.151508, 0.830228, -0.353626, 0.430895, 0.553716, -0.528263, 0.64369, 0.194186, -0.758296, 0.622317, -0.194185, -0.758296, 0.622318, -0.553717, -0.64369, 0.528263, -0.830228, -0.430895, 0.353626, -0.980604, -0.151508, 0.124339, -0.980604, 0.151508, -0.124339, -0.830227, 0.430895, -0.353627, -0.553717, 0.643689, -0.528262, -0.194187, 0.758296, -0.622317, 0.194187, 0.758296, -0.622317, 0.553716, 0.64369, -0.528263, 0.830227, 0.430895, -0.353627, 0.980604, 0.151508, -0.124339, 0.980604, -0.151508, 0.12434, 0.830228, -0.430895, 0.353626, 0.553716, -0.64369, 0.528263, 0.194186, -0.865134, 0.462423, -0.194185, -0.865134, 0.462424, -0.553717, -0.73438, 0.392534, -0.830228, -0.491604, 0.262768, -0.980604, -0.172855, 0.092393, -0.980604, 0.172854, -0.092393, -0.830227, 0.491605, -0.262768, -0.553717, 0.73438, -0.392534, -0.194186, 0.865134, -0.462424, 0.194187, 0.865134, -0.462423, 0.553716, 0.734381, -0.392535, 0.830228, 0.491605, -0.262768, 0.980604, 0.172854, -0.092393, 0.980604, -0.172855, 0.092393, 0.830228, -0.491604, 0.262768, 0.553716, -0.734381, 0.392535, 0.194185, -0.938725, 0.284759, -0.194185, -0.938725, 0.284759, -0.553718, -0.796848, 0.241721, -0.830228, -0.533422, 0.161812, -0.980604, -0.187558, 0.056895, -0.980605, 0.187557, -0.056895, -0.830227, 0.533423, -0.161812, -0.553717, 0.796849, -0.241722, -0.194187, 0.938725, -0.284759, 0.194188, 0.938724, -0.284759, 0.553716, 0.796849, -0.241722, 0.830227, 0.533423, -0.161812, 0.980604, 0.187557, -0.056895, 0.980604, -0.187558, 0.056895, 0.830228, -0.533422, 0.161812, 0.553717, -0.796849, 0.241722, 0.194186, -0.976241, 0.096151, -0.194186, -0.976241, 0.096151, -0.553717, -0.828695, 0.081619, -0.830228, -0.55474, 0.054637, -0.980604, -0.195054, 0.019211, -0.980604, 0.195054, -0.019211, -0.830227, 0.554741, -0.054637, -0.553717, 0.828695, -0.081619, -0.194187, 0.976241, -0.096151, 0.194187, 0.976241, -0.096151, 0.553716, 0.828696, -0.081619, 0.830227, 0.554741, -0.054637, 0.980604, 0.195054, -0.019211, 0.980604, -0.195054, 0.019211, 0.830228, -0.55474, 0.054637, 0.553716, -0.828696, 0.081619, 0.194185, -0.976241, -0.096151, -0.194185, -0.976241, -0.096151, -0.553718, -0.828695, -0.081619, -0.830228, -0.55474, -0.054637, -0.980604, -0.195054, -0.019211, -0.980605, 0.195053, 0.019211, -0.830227, 0.554741, 0.054637, -0.553717, 0.828695, 0.081619, -0.194187, 0.976241, 0.096151, 0.194188, 0.976241, 0.096151, 0.553716, 0.828696, 0.081619, 0.830227, 0.554741, 0.054637, 0.980604, 0.195053, 0.019211, 0.980604, -0.195054, -0.019211, 0.830228, -0.55474, -0.054637, 0.553717, -0.828695, -0.081619, 0.194186, -0.938725, -0.284759, -0.194185, -0.938725, -0.284759, -0.553717, -0.796849, -0.241721, -0.830228, -0.533421, -0.161812, -0.980604, -0.187558, -0.056895, -0.980604, 0.187558, 0.056895, -0.830227, 0.533422, 0.161812, -0.553717, 0.796849, 0.241722, -0.194186, 0.938725, 0.284759, 0.194187, 0.938724, 0.284759, 0.553716, 0.796849, 0.241722, 0.830227, 0.533422, 0.161812, 0.980604, 0.187558, 0.056895, 0.980604, -0.187558, -0.056895, 0.830228, -0.533421, -0.161811, 0.553716, -0.79685, -0.241722, 0.194186, -0.865134, -0.462423, -0.194185, -0.865134, -0.462424, -0.553717, -0.73438, -0.392534, -0.830228, -0.491604, -0.262768, -0.980604, -0.172854, -0.092393, -0.980604, 0.172854, 0.092393, -0.830227, 0.491605, 0.262768, -0.553717, 0.73438, 0.392534, -0.194187, 0.865134, 0.462424, 0.194187, 0.865134, 0.462423, 0.553716, 0.734381, 0.392534, 0.830227, 0.491605, 0.262768, 0.980604, 0.172854, 0.092393, 0.980604, -0.172854, -0.092393, 0.830228, -0.491604, -0.262768, 0.553716, -0.734381, -0.392535, 0.194186, -0.758296, -0.622317, -0.194186, -0.758296, -0.622318, -0.553717, -0.64369, -0.528263, -0.830228, -0.430895, -0.353626, -0.980604, -0.151508, -0.12434, -0.980604, 0.151508, 0.124339, -0.830227, 0.430895, 0.353627, -0.553717, 0.64369, 0.528263, -0.194186, 0.758296, 0.622317, 0.194186, 0.758296, 0.622318, 0.553716, 0.64369, 0.528263, 0.830227, 0.430895, 0.353627, 0.980604, 0.151508, 0.124339, 0.980604, -0.151508, -0.12434, 0.830228, -0.430895, -0.353626, 0.553716, -0.64369, -0.528263, 0.194186, -0.622317, -0.758296, -0.194185, -0.622318, -0.758296, -0.553717, -0.528263, -0.64369, -0.830228, -0.353626, -0.430895, -0.980604, -0.124339, -0.151508, -0.980604, 0.124339, 0.151508, -0.830227, 0.353627, 0.430895, -0.553717, 0.528262, 0.643689, -0.194187, 0.622317, 0.758296, 0.194187, 0.622317, 0.758296, 0.553716, 0.528263, 0.64369, 0.830227, 0.353627, 0.430895, 0.980604, 0.124339, 0.151508, 0.980604, -0.12434, -0.151508, 0.830228, -0.353626, -0.430895, 0.553716, -0.528263, -0.64369, 0.194186, -0.462423, -0.865134, -0.194185, -0.462424, -0.865134, -0.553717, -0.392534, -0.73438, -0.830228, -0.262768, -0.491604, -0.980604, -0.092393, -0.172855, -0.980604, 0.092393, 0.172854, -0.830227, 0.262768, 0.491605, -0.553717, 0.392534, 0.73438, -0.194186, 0.462424, 0.865134, 0.194187, 0.462423, 0.865134, 0.553716, 0.392535, 0.734381, 0.830228, 0.262768, 0.491605, 0.980604, 0.092393, 0.172854, 0.980604, -0.092393, -0.172855, 0.830228, -0.262768, -0.491604, 0.553716, -0.392535, -0.734381, 0.194185, -0.284759, -0.938725, -0.194185, -0.284759, -0.938725, -0.553718, -0.241721, -0.796848, -0.830228, -0.161812, -0.533422, -0.980604, -0.056895, -0.187558, -0.980605, 0.056895, 0.187557, -0.830227, 0.161812, 0.533422, -0.553716, 0.241722, 0.796849, -0.194187, 0.284759, 0.938725, 0.194188, 0.284759, 0.938724, 0.553716, 0.241722, 0.79685, 0.830227, 0.161812, 0.533423, 0.980604, 0.056895, 0.187557, 0.980604, -0.056895, -0.187558, 0.830228, -0.161812, -0.533422, 0.553717, -0.241722, -0.796849, 0.194186, -0.096151, -0.976241, -0.194186, -0.096151, -0.976241, -0.553717, -0.081619, -0.828695, -0.830228, -0.054637, -0.55474, -0.980604, -0.019211, -0.195054, -0.980604, 0.019211, 0.195054, -0.830227, 0.054637, 0.554741, -0.553717, 0.081619, 0.828695, -0.194187, 0.096151, 0.976241, 0.194187, 0.096151, 0.976241, 0.553716, 0.08162, 0.828696, 0.830227, 0.054637, 0.554741, 0.980604, 0.019211, 0.195054, 0.980604, -0.019211, -0.195054, 0.830228, -0.054637, -0.55474, 0.553716, -0.081619, -0.828696, 0.194185, 0.096151, -0.976241, -0.194185, 0.096151, -0.976241, -0.553718, 0.081619, -0.828695, -0.830228, 0.054637, -0.55474, -0.980604, 0.019211, -0.195054, -0.980605, -0.019211, 0.195053, -0.830227, -0.054637, 0.554741, -0.553717, -0.081619, 0.828695, -0.194187, -0.096151, 0.976241, 0.194188, -0.096151, 0.976241, 0.553716, -0.081619, 0.828696, 0.830227, -0.054637, 0.554741, 0.980604, -0.019211, 0.195053, 0.980604, 0.019211, -0.195054, 0.830228, 0.054637, -0.55474, 0.553717, 0.081619, -0.828695, 0.194186, 0.284759, -0.938725, -0.194185, 0.284759, -0.938725, -0.553717, 0.241721, -0.796849, -0.830228, 0.161812, -0.533421, -0.980604, 0.056895, -0.187558, -0.980604, -0.056895, 0.187558, -0.830227, -0.161812, 0.533422, -0.553717, -0.241722, 0.796849, -0.194186, -0.284759, 0.938725, 0.194187, -0.284759, 0.938724, 0.553716, -0.241722, 0.796849, 0.830227, -0.161812, 0.533422, 0.980604, -0.056895, 0.187558, 0.980604, 0.056895, -0.187558, 0.830228, 0.161811, -0.533421, 0.553716, 0.241722, -0.79685, 0.194186, 0.462423, -0.865134, -0.194185, 0.462424, -0.865134, -0.553717, 0.392534, -0.73438, -0.830228, 0.262768, -0.491604, -0.980604, 0.092393, -0.172854, -0.980604, -0.092393, 0.172854, -0.830227, -0.262768, 0.491605, -0.553717, -0.392534, 0.73438, -0.194187, -0.462424, 0.865134, 0.194187, -0.462423, 0.865134, 0.553716, -0.392534, 0.734381, 0.830227, -0.262768, 0.491605, 0.980604, -0.092393, 0.172854, 0.980604, 0.092393, -0.172854, 0.830228, 0.262768, -0.491604, 0.553716, 0.392535, -0.734381, 0.194186, 0.622317, -0.758296, -0.194186, 0.622318, -0.758296, -0.553717, 0.528263, -0.64369, -0.830228, 0.353626, -0.430895, -0.980604, 0.12434, -0.151508, -0.980604, -0.124339, 0.151508, -0.830227, -0.353627, 0.430895, -0.553717, -0.528263, 0.64369, -0.194186, -0.622317, 0.758296, 0.194186, -0.622318, 0.758296, 0.553716, -0.528263, 0.64369, 0.830227, -0.353627, 0.430895, 0.980604, -0.124339, 0.151508, 0.980604, 0.12434, -0.151508, 0.830228, 0.353626, -0.430895, 0.553716, 0.528263, -0.64369, 0.194186, 0.758296, -0.622317, -0.194185, 0.758296, -0.622318, -0.553717, 0.64369, -0.528263, -0.830228, 0.430895, -0.353626, -0.980604, 0.151508, -0.124339, -0.980604, -0.151508, 0.124339, -0.830227, -0.430895, 0.353627, -0.553717, -0.643689, 0.528262, -0.194187, -0.758296, 0.622317, 0.194187, -0.758296, 0.622317, 0.553716, -0.64369, 0.528263, 0.830227, -0.430895, 0.353627, 0.980604, -0.151508, 0.124339, 0.980604, 0.151508, -0.12434, 0.830228, 0.430895, -0.353626, 0.553716, 0.64369, -0.528263, 0.194186, 0.865134, -0.462423, -0.194185, 0.865134, -0.462424, -0.553717, 0.73438, -0.392534, -0.830228, 0.491604, -0.262768, -0.980604, 0.172855, -0.092393, -0.980604, -0.172854, 0.092393, -0.830227, -0.491605, 0.262768, -0.553717, -0.73438, 0.392534, -0.194186, -0.865134, 0.462424, 0.194187, -0.865134, 0.462423, 0.553716, -0.734381, 0.392535, 0.830228, -0.491605, 0.262768, 0.980604, -0.172854, 0.092393, 0.980604, 0.172855, -0.092393, 0.830228, 0.491604, -0.262768, 0.553716, 0.734381, -0.392535, 0.194185, 0.938725, -0.284759, -0.194185, 0.938725, -0.284759, -0.553718, 0.796848, -0.241721, -0.830228, 0.533422, -0.161812, -0.980604, 0.187558, -0.056895, -0.980605, -0.187557, 0.056895, -0.830227, -0.533422, 0.161812, -0.553716, -0.796849, 0.241722, -0.194187, -0.938725, 0.284759, 0.194188, -0.938724, 0.284759, 0.553716, -0.79685, 0.241722, 0.830227, -0.533423, 0.161812, 0.980604, -0.187557, 0.056895, 0.980604, 0.187558, -0.056895, 0.830228, 0.533422, -0.161812, 0.553717, 0.796849, -0.241722, 0.194186, 0.976241, -0.096151, -0.194186, 0.976241, -0.096151, -0.553717, 0.828695, -0.081619, -0.830228, 0.55474, -0.054637, -0.980604, 0.195054, -0.019211, -0.980604, -0.195054, 0.019211, -0.830227, -0.554741, 0.054637, -0.553717, -0.828695, 0.081619, -0.194187, -0.976241, 0.096151, 0.194187, -0.976241, 0.096151, 0.553716, -0.828696, 0.08162, 0.830227, -0.554741, 0.054637, 0.980604, -0.195054, 0.019211, 0.980604, 0.195054, -0.019211, 0.830228, 0.55474, -0.054637, 0.553716, 0.828696, -0.081619, }; static const unsigned short int BigValve_POLS[] = { 16, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 1, 4, 700, 701, 685, 684, 1, 4, 701, 702, 686, 685, 1, 4, 702, 703, 687, 686, 1, 4, 703, 704, 688, 687, 1, 4, 704, 705, 689, 688, 1, 4, 705, 706, 690, 689, 1, 4, 706, 707, 691, 690, 1, 4, 707, 708, 692, 691, 1, 4, 708, 709, 693, 692, 1, 4, 709, 710, 694, 693, 1, 4, 710, 711, 695, 694, 1, 4, 711, 712, 696, 695, 1, 4, 712, 713, 697, 696, 1, 4, 713, 714, 698, 697, 1, 4, 714, 715, 699, 698, 1, 4, 715, 700, 684, 699, 1, 16, 700, 715, 714, 713, 712, 711, 710, 709, 708, 707, 706, 705, 704, 703, 702, 701, 1, 4, 668, 669, 655, 654, 1, 4, 669, 670, 656, 655, 1, 4, 670, 671, 657, 656, 1, 4, 671, 672, 634, 657, 1, 4, 672, 673, 658, 634, 1, 4, 673, 674, 659, 658, 1, 4, 674, 675, 660, 659, 1, 4, 675, 676, 661, 660, 1, 4, 676, 677, 662, 661, 1, 4, 677, 678, 663, 662, 1, 4, 678, 679, 664, 663, 1, 4, 679, 680, 564, 664, 1, 4, 680, 681, 665, 564, 1, 4, 681, 682, 666, 665, 1, 4, 682, 683, 667, 666, 1, 4, 683, 668, 654, 667, 1, 4, 638, 639, 624, 623, 1, 4, 639, 640, 625, 624, 1, 4, 640, 641, 626, 625, 1, 4, 641, 642, 603, 626, 1, 4, 642, 643, 627, 603, 1, 4, 643, 644, 628, 627, 1, 4, 644, 645, 629, 628, 1, 4, 645, 646, 630, 629, 1, 4, 646, 647, 631, 630, 1, 4, 647, 648, 632, 631, 1, 4, 648, 649, 633, 632, 1, 4, 649, 650, 634, 633, 1, 4, 650, 651, 635, 634, 1, 4, 651, 652, 636, 635, 1, 4, 652, 653, 637, 636, 1, 4, 653, 638, 623, 637, 1, 4, 607, 608, 593, 592, 1, 4, 608, 609, 594, 593, 1, 4, 609, 610, 595, 594, 1, 4, 610, 611, 572, 595, 1, 4, 611, 612, 596, 572, 1, 4, 612, 613, 597, 596, 1, 4, 613, 614, 598, 597, 1, 4, 614, 615, 599, 598, 1, 4, 615, 616, 600, 599, 1, 4, 616, 617, 601, 600, 1, 4, 617, 618, 602, 601, 1, 4, 618, 619, 603, 602, 1, 4, 619, 620, 604, 603, 1, 4, 620, 621, 605, 604, 1, 4, 621, 622, 606, 605, 1, 4, 622, 607, 592, 606, 1, 4, 576, 577, 561, 560, 1, 4, 577, 578, 562, 561, 1, 4, 578, 579, 563, 562, 1, 4, 579, 580, 564, 563, 1, 4, 580, 581, 565, 564, 1, 4, 581, 582, 566, 565, 1, 4, 582, 583, 567, 566, 1, 4, 583, 584, 568, 567, 1, 4, 584, 585, 569, 568, 1, 4, 585, 586, 570, 569, 1, 4, 586, 587, 571, 570, 1, 4, 587, 588, 572, 571, 1, 4, 588, 589, 573, 572, 1, 4, 589, 590, 574, 573, 1, 4, 590, 591, 575, 574, 1, 4, 591, 576, 560, 575, 1, 24, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 1, 4, 536, 537, 513, 512, 1, 4, 537, 538, 514, 513, 1, 4, 538, 539, 515, 514, 1, 4, 539, 540, 516, 515, 1, 4, 540, 541, 517, 516, 1, 4, 541, 542, 518, 517, 1, 4, 542, 543, 519, 518, 1, 4, 543, 544, 520, 519, 1, 4, 544, 545, 521, 520, 1, 4, 545, 546, 522, 521, 1, 4, 546, 547, 523, 522, 1, 4, 547, 548, 524, 523, 1, 4, 548, 549, 525, 524, 1, 4, 549, 550, 526, 525, 1, 4, 550, 551, 527, 526, 1, 4, 551, 552, 528, 527, 1, 4, 552, 553, 529, 528, 1, 4, 553, 554, 530, 529, 1, 4, 554, 555, 531, 530, 1, 4, 555, 556, 532, 531, 1, 4, 556, 557, 533, 532, 1, 4, 557, 558, 534, 533, 1, 4, 558, 559, 535, 534, 1, 4, 559, 536, 512, 535, 1, 24, 536, 559, 558, 557, 556, 555, 554, 553, 552, 551, 550, 549, 548, 547, 546, 545, 544, 543, 542, 541, 540, 539, 538, 537, 1, 4, 16, 31, 15, 0, 1, 4, 31, 30, 14, 15, 1, 4, 30, 29, 13, 14, 1, 4, 29, 28, 12, 13, 1, 4, 28, 27, 11, 12, 1, 4, 27, 26, 10, 11, 1, 4, 26, 25, 9, 10, 1, 4, 25, 24, 8, 9, 1, 4, 24, 23, 7, 8, 1, 4, 23, 22, 6, 7, 1, 4, 22, 21, 5, 6, 1, 4, 21, 20, 4, 5, 1, 4, 20, 19, 3, 4, 1, 4, 19, 18, 2, 3, 1, 4, 18, 17, 1, 2, 1, 4, 17, 16, 0, 1, 1, 4, 32, 47, 31, 16, 1, 4, 47, 46, 30, 31, 1, 4, 46, 45, 29, 30, 1, 4, 45, 44, 28, 29, 1, 4, 44, 43, 27, 28, 1, 4, 43, 42, 26, 27, 1, 4, 42, 41, 25, 26, 1, 4, 41, 40, 24, 25, 1, 4, 40, 39, 23, 24, 1, 4, 39, 38, 22, 23, 1, 4, 38, 37, 21, 22, 1, 4, 37, 36, 20, 21, 1, 4, 36, 35, 19, 20, 1, 4, 35, 34, 18, 19, 1, 4, 34, 33, 17, 18, 1, 4, 33, 32, 16, 17, 1, 4, 48, 63, 47, 32, 1, 4, 63, 62, 46, 47, 1, 4, 62, 61, 45, 46, 1, 4, 61, 60, 44, 45, 1, 4, 60, 59, 43, 44, 1, 4, 59, 58, 42, 43, 1, 4, 58, 57, 41, 42, 1, 4, 57, 56, 40, 41, 1, 4, 56, 55, 39, 40, 1, 4, 55, 54, 38, 39, 1, 4, 54, 53, 37, 38, 1, 4, 53, 52, 36, 37, 1, 4, 52, 51, 35, 36, 1, 4, 51, 50, 34, 35, 1, 4, 50, 49, 33, 34, 1, 4, 49, 48, 32, 33, 1, 4, 64, 79, 63, 48, 1, 4, 79, 78, 62, 63, 1, 4, 78, 77, 61, 62, 1, 4, 77, 76, 60, 61, 1, 4, 76, 75, 59, 60, 1, 4, 75, 74, 58, 59, 1, 4, 74, 73, 57, 58, 1, 4, 73, 72, 56, 57, 1, 4, 72, 71, 55, 56, 1, 4, 71, 70, 54, 55, 1, 4, 70, 69, 53, 54, 1, 4, 69, 68, 52, 53, 1, 4, 68, 67, 51, 52, 1, 4, 67, 66, 50, 51, 1, 4, 66, 65, 49, 50, 1, 4, 65, 64, 48, 49, 1, 4, 80, 95, 79, 64, 1, 4, 95, 94, 78, 79, 1, 4, 94, 93, 77, 78, 1, 4, 93, 92, 76, 77, 1, 4, 92, 91, 75, 76, 1, 4, 91, 90, 74, 75, 1, 4, 90, 89, 73, 74, 1, 4, 89, 88, 72, 73, 1, 4, 88, 87, 71, 72, 1, 4, 87, 86, 70, 71, 1, 4, 86, 85, 69, 70, 1, 4, 85, 84, 68, 69, 1, 4, 84, 83, 67, 68, 1, 4, 83, 82, 66, 67, 1, 4, 82, 81, 65, 66, 1, 4, 81, 80, 64, 65, 1, 4, 96, 111, 95, 80, 1, 4, 111, 110, 94, 95, 1, 4, 110, 109, 93, 94, 1, 4, 109, 108, 92, 93, 1, 4, 108, 107, 91, 92, 1, 4, 107, 106, 90, 91, 1, 4, 106, 105, 89, 90, 1, 4, 105, 104, 88, 89, 1, 4, 104, 103, 87, 88, 1, 4, 103, 102, 86, 87, 1, 4, 102, 101, 85, 86, 1, 4, 101, 100, 84, 85, 1, 4, 100, 99, 83, 84, 1, 4, 99, 98, 82, 83, 1, 4, 98, 97, 81, 82, 1, 4, 97, 96, 80, 81, 1, 4, 112, 127, 111, 96, 1, 4, 127, 126, 110, 111, 1, 4, 126, 125, 109, 110, 1, 4, 125, 124, 108, 109, 1, 4, 124, 123, 107, 108, 1, 4, 123, 122, 106, 107, 1, 4, 122, 121, 105, 106, 1, 4, 121, 120, 104, 105, 1, 4, 120, 119, 103, 104, 1, 4, 119, 118, 102, 103, 1, 4, 118, 117, 101, 102, 1, 4, 117, 116, 100, 101, 1, 4, 116, 115, 99, 100, 1, 4, 115, 114, 98, 99, 1, 4, 114, 113, 97, 98, 1, 4, 113, 112, 96, 97, 1, 4, 128, 143, 127, 112, 1, 4, 143, 142, 126, 127, 1, 4, 142, 141, 125, 126, 1, 4, 141, 140, 124, 125, 1, 4, 140, 139, 123, 124, 1, 4, 139, 138, 122, 123, 1, 4, 138, 137, 121, 122, 1, 4, 137, 136, 120, 121, 1, 4, 136, 135, 119, 120, 1, 4, 135, 134, 118, 119, 1, 4, 134, 133, 117, 118, 1, 4, 133, 132, 116, 117, 1, 4, 132, 131, 115, 116, 1, 4, 131, 130, 114, 115, 1, 4, 130, 129, 113, 114, 1, 4, 129, 128, 112, 113, 1, 4, 144, 159, 143, 128, 1, 4, 159, 158, 142, 143, 1, 4, 158, 157, 141, 142, 1, 4, 157, 156, 140, 141, 1, 4, 156, 155, 139, 140, 1, 4, 155, 154, 138, 139, 1, 4, 154, 153, 137, 138, 1, 4, 153, 152, 136, 137, 1, 4, 152, 151, 135, 136, 1, 4, 151, 150, 134, 135, 1, 4, 150, 149, 133, 134, 1, 4, 149, 148, 132, 133, 1, 4, 148, 147, 131, 132, 1, 4, 147, 146, 130, 131, 1, 4, 146, 145, 129, 130, 1, 4, 145, 144, 128, 129, 1, 4, 160, 175, 159, 144, 1, 4, 175, 174, 158, 159, 1, 4, 174, 173, 157, 158, 1, 4, 173, 172, 156, 157, 1, 4, 172, 171, 155, 156, 1, 4, 171, 170, 154, 155, 1, 4, 170, 169, 153, 154, 1, 4, 169, 168, 152, 153, 1, 4, 168, 167, 151, 152, 1, 4, 167, 166, 150, 151, 1, 4, 166, 165, 149, 150, 1, 4, 165, 164, 148, 149, 1, 4, 164, 163, 147, 148, 1, 4, 163, 162, 146, 147, 1, 4, 162, 161, 145, 146, 1, 4, 161, 160, 144, 145, 1, 4, 176, 191, 175, 160, 1, 4, 191, 190, 174, 175, 1, 4, 190, 189, 173, 174, 1, 4, 189, 188, 172, 173, 1, 4, 188, 187, 171, 172, 1, 4, 187, 186, 170, 171, 1, 4, 186, 185, 169, 170, 1, 4, 185, 184, 168, 169, 1, 4, 184, 183, 167, 168, 1, 4, 183, 182, 166, 167, 1, 4, 182, 181, 165, 166, 1, 4, 181, 180, 164, 165, 1, 4, 180, 179, 163, 164, 1, 4, 179, 178, 162, 163, 1, 4, 178, 177, 161, 162, 1, 4, 177, 176, 160, 161, 1, 4, 192, 207, 191, 176, 1, 4, 207, 206, 190, 191, 1, 4, 206, 205, 189, 190, 1, 4, 205, 204, 188, 189, 1, 4, 204, 203, 187, 188, 1, 4, 203, 202, 186, 187, 1, 4, 202, 201, 185, 186, 1, 4, 201, 200, 184, 185, 1, 4, 200, 199, 183, 184, 1, 4, 199, 198, 182, 183, 1, 4, 198, 197, 181, 182, 1, 4, 197, 196, 180, 181, 1, 4, 196, 195, 179, 180, 1, 4, 195, 194, 178, 179, 1, 4, 194, 193, 177, 178, 1, 4, 193, 192, 176, 177, 1, 4, 208, 223, 207, 192, 1, 4, 223, 222, 206, 207, 1, 4, 222, 221, 205, 206, 1, 4, 221, 220, 204, 205, 1, 4, 220, 219, 203, 204, 1, 4, 219, 218, 202, 203, 1, 4, 218, 217, 201, 202, 1, 4, 217, 216, 200, 201, 1, 4, 216, 215, 199, 200, 1, 4, 215, 214, 198, 199, 1, 4, 214, 213, 197, 198, 1, 4, 213, 212, 196, 197, 1, 4, 212, 211, 195, 196, 1, 4, 211, 210, 194, 195, 1, 4, 210, 209, 193, 194, 1, 4, 209, 208, 192, 193, 1, 4, 224, 239, 223, 208, 1, 4, 239, 238, 222, 223, 1, 4, 238, 237, 221, 222, 1, 4, 237, 236, 220, 221, 1, 4, 236, 235, 219, 220, 1, 4, 235, 234, 218, 219, 1, 4, 234, 233, 217, 218, 1, 4, 233, 232, 216, 217, 1, 4, 232, 231, 215, 216, 1, 4, 231, 230, 214, 215, 1, 4, 230, 229, 213, 214, 1, 4, 229, 228, 212, 213, 1, 4, 228, 227, 211, 212, 1, 4, 227, 226, 210, 211, 1, 4, 226, 225, 209, 210, 1, 4, 225, 224, 208, 209, 1, 4, 240, 255, 239, 224, 1, 4, 255, 254, 238, 239, 1, 4, 254, 253, 237, 238, 1, 4, 253, 252, 236, 237, 1, 4, 252, 251, 235, 236, 1, 4, 251, 250, 234, 235, 1, 4, 250, 249, 233, 234, 1, 4, 249, 248, 232, 233, 1, 4, 248, 247, 231, 232, 1, 4, 247, 246, 230, 231, 1, 4, 246, 245, 229, 230, 1, 4, 245, 244, 228, 229, 1, 4, 244, 243, 227, 228, 1, 4, 243, 242, 226, 227, 1, 4, 242, 241, 225, 226, 1, 4, 241, 240, 224, 225, 1, 4, 256, 271, 255, 240, 1, 4, 271, 270, 254, 255, 1, 4, 270, 269, 253, 254, 1, 4, 269, 268, 252, 253, 1, 4, 268, 267, 251, 252, 1, 4, 267, 266, 250, 251, 1, 4, 266, 265, 249, 250, 1, 4, 265, 264, 248, 249, 1, 4, 264, 263, 247, 248, 1, 4, 263, 262, 246, 247, 1, 4, 262, 261, 245, 246, 1, 4, 261, 260, 244, 245, 1, 4, 260, 259, 243, 244, 1, 4, 259, 258, 242, 243, 1, 4, 258, 257, 241, 242, 1, 4, 257, 256, 240, 241, 1, 4, 272, 287, 271, 256, 1, 4, 287, 286, 270, 271, 1, 4, 286, 285, 269, 270, 1, 4, 285, 284, 268, 269, 1, 4, 284, 283, 267, 268, 1, 4, 283, 282, 266, 267, 1, 4, 282, 281, 265, 266, 1, 4, 281, 280, 264, 265, 1, 4, 280, 279, 263, 264, 1, 4, 279, 278, 262, 263, 1, 4, 278, 277, 261, 262, 1, 4, 277, 276, 260, 261, 1, 4, 276, 275, 259, 260, 1, 4, 275, 274, 258, 259, 1, 4, 274, 273, 257, 258, 1, 4, 273, 272, 256, 257, 1, 4, 288, 303, 287, 272, 1, 4, 303, 302, 286, 287, 1, 4, 302, 301, 285, 286, 1, 4, 301, 300, 284, 285, 1, 4, 300, 299, 283, 284, 1, 4, 299, 298, 282, 283, 1, 4, 298, 297, 281, 282, 1, 4, 297, 296, 280, 281, 1, 4, 296, 295, 279, 280, 1, 4, 295, 294, 278, 279, 1, 4, 294, 293, 277, 278, 1, 4, 293, 292, 276, 277, 1, 4, 292, 291, 275, 276, 1, 4, 291, 290, 274, 275, 1, 4, 290, 289, 273, 274, 1, 4, 289, 288, 272, 273, 1, 4, 304, 319, 303, 288, 1, 4, 319, 318, 302, 303, 1, 4, 318, 317, 301, 302, 1, 4, 317, 316, 300, 301, 1, 4, 316, 315, 299, 300, 1, 4, 315, 314, 298, 299, 1, 4, 314, 313, 297, 298, 1, 4, 313, 312, 296, 297, 1, 4, 312, 311, 295, 296, 1, 4, 311, 310, 294, 295, 1, 4, 310, 309, 293, 294, 1, 4, 309, 308, 292, 293, 1, 4, 308, 307, 291, 292, 1, 4, 307, 306, 290, 291, 1, 4, 306, 305, 289, 290, 1, 4, 305, 304, 288, 289, 1, 4, 320, 335, 319, 304, 1, 4, 335, 334, 318, 319, 1, 4, 334, 333, 317, 318, 1, 4, 333, 332, 316, 317, 1, 4, 332, 331, 315, 316, 1, 4, 331, 330, 314, 315, 1, 4, 330, 329, 313, 314, 1, 4, 329, 328, 312, 313, 1, 4, 328, 327, 311, 312, 1, 4, 327, 326, 310, 311, 1, 4, 326, 325, 309, 310, 1, 4, 325, 324, 308, 309, 1, 4, 324, 323, 307, 308, 1, 4, 323, 322, 306, 307, 1, 4, 322, 321, 305, 306, 1, 4, 321, 320, 304, 305, 1, 4, 336, 351, 335, 320, 1, 4, 351, 350, 334, 335, 1, 4, 350, 349, 333, 334, 1, 4, 349, 348, 332, 333, 1, 4, 348, 347, 331, 332, 1, 4, 347, 346, 330, 331, 1, 4, 346, 345, 329, 330, 1, 4, 345, 344, 328, 329, 1, 4, 344, 343, 327, 328, 1, 4, 343, 342, 326, 327, 1, 4, 342, 341, 325, 326, 1, 4, 341, 340, 324, 325, 1, 4, 340, 339, 323, 324, 1, 4, 339, 338, 322, 323, 1, 4, 338, 337, 321, 322, 1, 4, 337, 336, 320, 321, 1, 4, 352, 367, 351, 336, 1, 4, 367, 366, 350, 351, 1, 4, 366, 365, 349, 350, 1, 4, 365, 364, 348, 349, 1, 4, 364, 363, 347, 348, 1, 4, 363, 362, 346, 347, 1, 4, 362, 361, 345, 346, 1, 4, 361, 360, 344, 345, 1, 4, 360, 359, 343, 344, 1, 4, 359, 358, 342, 343, 1, 4, 358, 357, 341, 342, 1, 4, 357, 356, 340, 341, 1, 4, 356, 355, 339, 340, 1, 4, 355, 354, 338, 339, 1, 4, 354, 353, 337, 338, 1, 4, 353, 352, 336, 337, 1, 4, 368, 383, 367, 352, 1, 4, 383, 382, 366, 367, 1, 4, 382, 381, 365, 366, 1, 4, 381, 380, 364, 365, 1, 4, 380, 379, 363, 364, 1, 4, 379, 378, 362, 363, 1, 4, 378, 377, 361, 362, 1, 4, 377, 376, 360, 361, 1, 4, 376, 375, 359, 360, 1, 4, 375, 374, 358, 359, 1, 4, 374, 373, 357, 358, 1, 4, 373, 372, 356, 357, 1, 4, 372, 371, 355, 356, 1, 4, 371, 370, 354, 355, 1, 4, 370, 369, 353, 354, 1, 4, 369, 368, 352, 353, 1, 4, 384, 399, 383, 368, 1, 4, 399, 398, 382, 383, 1, 4, 398, 397, 381, 382, 1, 4, 397, 396, 380, 381, 1, 4, 396, 395, 379, 380, 1, 4, 395, 394, 378, 379, 1, 4, 394, 393, 377, 378, 1, 4, 393, 392, 376, 377, 1, 4, 392, 391, 375, 376, 1, 4, 391, 390, 374, 375, 1, 4, 390, 389, 373, 374, 1, 4, 389, 388, 372, 373, 1, 4, 388, 387, 371, 372, 1, 4, 387, 386, 370, 371, 1, 4, 386, 385, 369, 370, 1, 4, 385, 384, 368, 369, 1, 4, 400, 415, 399, 384, 1, 4, 415, 414, 398, 399, 1, 4, 414, 413, 397, 398, 1, 4, 413, 412, 396, 397, 1, 4, 412, 411, 395, 396, 1, 4, 411, 410, 394, 395, 1, 4, 410, 409, 393, 394, 1, 4, 409, 408, 392, 393, 1, 4, 408, 407, 391, 392, 1, 4, 407, 406, 390, 391, 1, 4, 406, 405, 389, 390, 1, 4, 405, 404, 388, 389, 1, 4, 404, 403, 387, 388, 1, 4, 403, 402, 386, 387, 1, 4, 402, 401, 385, 386, 1, 4, 401, 400, 384, 385, 1, 4, 416, 431, 415, 400, 1, 4, 431, 430, 414, 415, 1, 4, 430, 429, 413, 414, 1, 4, 429, 428, 412, 413, 1, 4, 428, 427, 411, 412, 1, 4, 427, 426, 410, 411, 1, 4, 426, 425, 409, 410, 1, 4, 425, 424, 408, 409, 1, 4, 424, 423, 407, 408, 1, 4, 423, 422, 406, 407, 1, 4, 422, 421, 405, 406, 1, 4, 421, 420, 404, 405, 1, 4, 420, 419, 403, 404, 1, 4, 419, 418, 402, 403, 1, 4, 418, 417, 401, 402, 1, 4, 417, 416, 400, 401, 1, 4, 432, 447, 431, 416, 1, 4, 447, 446, 430, 431, 1, 4, 446, 445, 429, 430, 1, 4, 445, 444, 428, 429, 1, 4, 444, 443, 427, 428, 1, 4, 443, 442, 426, 427, 1, 4, 442, 441, 425, 426, 1, 4, 441, 440, 424, 425, 1, 4, 440, 439, 423, 424, 1, 4, 439, 438, 422, 423, 1, 4, 438, 437, 421, 422, 1, 4, 437, 436, 420, 421, 1, 4, 436, 435, 419, 420, 1, 4, 435, 434, 418, 419, 1, 4, 434, 433, 417, 418, 1, 4, 433, 432, 416, 417, 1, 4, 448, 463, 447, 432, 1, 4, 463, 462, 446, 447, 1, 4, 462, 461, 445, 446, 1, 4, 461, 460, 444, 445, 1, 4, 460, 459, 443, 444, 1, 4, 459, 458, 442, 443, 1, 4, 458, 457, 441, 442, 1, 4, 457, 456, 440, 441, 1, 4, 456, 455, 439, 440, 1, 4, 455, 454, 438, 439, 1, 4, 454, 453, 437, 438, 1, 4, 453, 452, 436, 437, 1, 4, 452, 451, 435, 436, 1, 4, 451, 450, 434, 435, 1, 4, 450, 449, 433, 434, 1, 4, 449, 448, 432, 433, 1, 4, 464, 479, 463, 448, 1, 4, 479, 478, 462, 463, 1, 4, 478, 477, 461, 462, 1, 4, 477, 476, 460, 461, 1, 4, 476, 475, 459, 460, 1, 4, 475, 474, 458, 459, 1, 4, 474, 473, 457, 458, 1, 4, 473, 472, 456, 457, 1, 4, 472, 471, 455, 456, 1, 4, 471, 470, 454, 455, 1, 4, 470, 469, 453, 454, 1, 4, 469, 468, 452, 453, 1, 4, 468, 467, 451, 452, 1, 4, 467, 466, 450, 451, 1, 4, 466, 465, 449, 450, 1, 4, 465, 464, 448, 449, 1, 4, 480, 495, 479, 464, 1, 4, 495, 494, 478, 479, 1, 4, 494, 493, 477, 478, 1, 4, 493, 492, 476, 477, 1, 4, 492, 491, 475, 476, 1, 4, 491, 490, 474, 475, 1, 4, 490, 489, 473, 474, 1, 4, 489, 488, 472, 473, 1, 4, 488, 487, 471, 472, 1, 4, 487, 486, 470, 471, 1, 4, 486, 485, 469, 470, 1, 4, 485, 484, 468, 469, 1, 4, 484, 483, 467, 468, 1, 4, 483, 482, 466, 467, 1, 4, 482, 481, 465, 466, 1, 4, 481, 480, 464, 465, 1, 4, 496, 511, 495, 480, 1, 4, 511, 510, 494, 495, 1, 4, 510, 509, 493, 494, 1, 4, 509, 508, 492, 493, 1, 4, 508, 507, 491, 492, 1, 4, 507, 506, 490, 491, 1, 4, 506, 505, 489, 490, 1, 4, 505, 504, 488, 489, 1, 4, 504, 503, 487, 488, 1, 4, 503, 502, 486, 487, 1, 4, 502, 501, 485, 486, 1, 4, 501, 500, 484, 485, 1, 4, 500, 499, 483, 484, 1, 4, 499, 498, 482, 483, 1, 4, 498, 497, 481, 482, 1, 4, 497, 496, 480, 481, 1, 4, 0, 15, 511, 496, 1, 4, 15, 14, 510, 511, 1, 4, 14, 13, 509, 510, 1, 4, 13, 12, 508, 509, 1, 4, 12, 11, 507, 508, 1, 4, 11, 10, 506, 507, 1, 4, 10, 9, 505, 506, 1, 4, 9, 8, 504, 505, 1, 4, 8, 7, 503, 504, 1, 4, 7, 6, 502, 503, 1, 4, 6, 5, 501, 502, 1, 4, 5, 4, 500, 501, 1, 4, 4, 3, 499, 500, 1, 4, 3, 2, 498, 499, 1, 4, 2, 1, 497, 498, 1, 4, 1, 0, 496, 497, 1, 0 }; struct lwo LWO_BigValve = { 716, /* number of points */ BigValve_PNTS, BigValve_normals, BigValve_POLS, 0L }; static const GLfloat Bolts3D_PNTS[] = { -0.160704, 0.399, 0.6, -0.160704, 0.399, -0.5, -0.4, 0.160257, 0.6, -0.4, 0.160257, -0.5, -0.4, -0.170369, 0.6, -0.4, -0.170369, -0.5, -0.153738, -0.4, 0.6, -0.153738, -0.4, -0.5, 0.176887, -0.4, 0.6, 0.176887, -0.4, -0.5, 0.4, -0.163403, 0.6, 0.4, -0.163403, -0.5, 0.4, 0.167223, 0.6, 0.4, 0.167223, -0.5, 0.169922, 0.399, 0.6, 0.169922, 0.399, -0.5, -0.160704, 0.399, 0.5, -0.160704, 0.399, -0.6, -0.4, 0.160257, -0.6, -0.4, 0.160257, 0.5, -0.4, -0.170369, -0.6, -0.4, -0.170369, 0.5, -0.153738, -0.4, -0.6, -0.153738, -0.4, 0.5, 0.176887, -0.4, 0.5, 0.176887, -0.4, -0.6, 0.4, -0.163403, 0.5, 0.4, -0.163403, -0.6, 0.4, 0.167223, -0.6, 0.4, 0.167223, 0.5, 0.169922, 0.399, -0.6, 0.169922, 0.399, 0.5, }; static const GLfloat Bolts3D_normals[] = { 0, 1, 0, 0.709703, 0.704502, 0, 1, 0, 0, 0.727535, -0.68607, 0, 0, -1, 0, -0.68198, -0.73137, 0, -1, 0, 0, -0.706289, 0.707924, 0, 0, 0, 1, 0, 1, 0, 0.709703, 0.704502, 0, 1, 0, 0, 0.727535, -0.68607, 0, 0, -1, 0, -0.68198, -0.73137, 0, -1, 0, 0, -0.706289, 0.707924, 0, 0, 0, -1, }; static const unsigned short int Bolts3D_POLS[] = { 4, 16, 31, 14, 0, 1, 4, 31, 29, 12, 14, 1, 4, 29, 26, 10, 12, 1, 4, 26, 24, 8, 10, 1, 4, 24, 23, 6, 8, 1, 4, 23, 21, 4, 6, 1, 4, 21, 19, 2, 4, 1, 4, 19, 16, 0, 2, 1, 8, 14, 12, 10, 8, 6, 4, 2, 0, 1, 4, 17, 30, 15, 1, 1, 4, 30, 28, 13, 15, 1, 4, 28, 27, 11, 13, 1, 4, 27, 25, 9, 11, 1, 4, 25, 22, 7, 9, 1, 4, 22, 20, 5, 7, 1, 4, 20, 18, 3, 5, 1, 4, 18, 17, 1, 3, 1, 8, 30, 17, 18, 20, 22, 25, 27, 28, 1, 0 }; struct lwo LWO_Bolts3D = { 32, /* number of points */ Bolts3D_PNTS, Bolts3D_normals, Bolts3D_POLS, 0L }; static const GLfloat GuageConnector_PNTS[] = { 0.2, 0.4, 0, 0.2, 0.8, 0, 0.193185, 0.4, -0.051764, 0.193185, 0.8, -0.051764, 0.173205, 0.4, -0.1, 0.173205, 0.8, -0.1, 0.141421, 0.8, -0.141421, 0.141421, 0.4, -0.141421, 0.1, 0.4, -0.173205, 0.1, 0.8, -0.173205, 0.051764, 0.8, -0.193185, 0.051764, 0.4, -0.193185, 0, 0.8, -0.2, 0, 0.4, -0.2, -0.051764, 0.8, -0.193185, -0.051764, 0.4, -0.193185, -0.1, 0.8, -0.173205, -0.1, 0.4, -0.173205, -0.141421, 0.4, -0.141421, -0.141421, 0.8, -0.141421, -0.173205, 0.8, -0.1, -0.173205, 0.4, -0.1, -0.193185, 0.4, -0.051764, -0.193185, 0.8, -0.051764, -0.2, 0.4, 0, -0.2, 0.8, 0, -0.193185, 0.4, 0.051764, -0.193185, 0.8, 0.051764, -0.173205, 0.4, 0.1, -0.173205, 0.8, 0.1, -0.141421, 0.8, 0.141421, -0.141421, 0.4, 0.141421, -0.1, 0.8, 0.173205, -0.1, 0.4, 0.173205, -0.051764, 0.8, 0.193185, -0.051764, 0.4, 0.193185, 0, 0.8, 0.2, 0, 0.4, 0.2, 0.051764, 0.8, 0.193185, 0.051764, 0.4, 0.193185, 0.1, 0.4, 0.173205, 0.1, 0.8, 0.173205, 0.141421, 0.4, 0.141421, 0.141421, 0.8, 0.141421, 0.173205, 0.8, 0.1, 0.173205, 0.4, 0.1, 0.193185, 0.4, 0.051764, 0.193185, 0.8, 0.051764, 0.2, 0.55, 0, 0.193185, 0.55, -0.051764, 0.173205, 0.55, -0.1, 0.141421, 0.55, -0.141421, 0.1, 0.55, -0.173205, 0.051764, 0.55, -0.193185, 0, 0.55, -0.2, -0.051764, 0.55, -0.193185, -0.1, 0.55, -0.173205, -0.141421, 0.55, -0.141421, -0.173205, 0.55, -0.1, -0.193185, 0.55, -0.051764, -0.2, 0.55, 0, -0.193185, 0.55, 0.051764, -0.173205, 0.55, 0.1, -0.141421, 0.55, 0.141421, -0.1, 0.55, 0.173205, -0.051764, 0.55, 0.193185, 0, 0.55, 0.2, 0.051764, 0.55, 0.193185, 0.1, 0.55, 0.173205, 0.141421, 0.55, 0.141421, 0.173205, 0.55, 0.1, 0.193185, 0.55, 0.051764, 0.15, 0.55, 0, 0.144889, 0.55, -0.038823, 0.129904, 0.55, -0.075, 0.106066, 0.55, -0.106066, 0.075, 0.55, -0.129904, 0.038823, 0.55, -0.144889, 0, 0.55, -0.15, -0.038823, 0.55, -0.144889, -0.075, 0.55, -0.129904, -0.106066, 0.55, -0.106066, -0.129904, 0.55, -0.075, -0.144889, 0.55, -0.038823, -0.15, 0.55, 0, -0.144889, 0.55, 0.038823, -0.129904, 0.55, 0.075, -0.106066, 0.55, 0.106066, -0.075, 0.55, 0.129904, -0.038823, 0.55, 0.144889, 0, 0.55, 0.15, 0.038823, 0.55, 0.144889, 0.075, 0.55, 0.129904, 0.106066, 0.55, 0.106066, 0.129904, 0.55, 0.075, 0.144889, 0.55, 0.038823, 0.15, 0.8, 0, 0.144889, 0.8, -0.038823, 0.129904, 0.8, -0.075, 0.106066, 0.8, -0.106066, 0.075, 0.8, -0.129904, 0.038823, 0.8, -0.144889, 0, 0.8, -0.15, -0.038823, 0.8, -0.144889, -0.075, 0.8, -0.129904, -0.106066, 0.8, -0.106066, -0.129904, 0.8, -0.075, -0.144889, 0.8, -0.038823, -0.15, 0.8, 0, -0.144889, 0.8, 0.038823, -0.129904, 0.8, 0.075, -0.106066, 0.8, 0.106066, -0.075, 0.8, 0.129904, -0.038823, 0.8, 0.144889, 0, 0.8, 0.15, 0.038823, 0.8, 0.144889, 0.075, 0.8, 0.129904, 0.106066, 0.8, 0.106066, 0.129904, 0.8, 0.075, 0.144889, 0.8, 0.038823, 0.2, 0.875988, 0, 0.193185, 0.872346, -0.051764, 0.191342, 0.87136, -0.056214, 0.173205, 0.865859, -0.1, 0.141421, 0.856217, -0.141421, 0.1, 0.843652, -0.173205, 0.097545, 0.842907, -0.174222, 0.051764, 0.838398, -0.193185, 0, 0.8333, -0.2, -0.051764, 0.838398, -0.193185, -0.097545, 0.842907, -0.174222, -0.1, 0.843652, -0.173205, -0.141421, 0.856217, -0.141421, -0.173205, 0.865859, -0.1, -0.191342, 0.87136, -0.056214, -0.193185, 0.872346, -0.051764, -0.2, 0.875988, 0, -0.193185, 0.872346, 0.051764, -0.173205, 0.865859, 0.1, -0.191342, 0.87136, 0.056214, -0.141421, 0.856217, 0.141421, -0.1, 0.843652, 0.173205, -0.051764, 0.838398, 0.193185, -0.097545, 0.842907, 0.174222, 0, 0.8333, 0.2, 0.051764, 0.838398, 0.193185, 0.1, 0.843652, 0.173205, 0.097545, 0.842907, 0.174222, 0.141421, 0.856217, 0.141421, 0.173205, 0.865859, 0.1, 0.193185, 0.872346, 0.051764, 0.191342, 0.87136, 0.056214, }; static const GLfloat GuageConnector_normals[] = { 0.991445, 0, -0.130526, 0.92388, 0, -0.382683, 0.793353, 0, -0.608761, 0.608761, 0, -0.793353, 0.382683, 0, -0.92388, 0.130526, 0, -0.991445, -0.130526, 0, -0.991445, -0.382683, 0, -0.92388, -0.608761, 0, -0.793353, -0.793353, 0, -0.608761, -0.92388, 0, -0.382683, -0.991445, 0, -0.130526, -0.991445, 0, 0.130526, -0.92388, 0, 0.382683, -0.793353, 0, 0.608761, -0.608761, 0, 0.793353, -0.382683, 0, 0.92388, -0.130526, 0, 0.991445, 0.130526, 0, 0.991445, 0.382683, 0, 0.92388, 0.608761, 0, 0.793353, 0.793353, 0, 0.608761, 0.92388, 0, 0.382683, 0.991445, 0, 0.130526, 0.991445, 0, -0.130526, 0.92388, 0, -0.382684, 0.793353, 0, -0.608761, 0.608761, 0, -0.793353, 0.382684, 0, -0.92388, 0.130526, 0, -0.991445, -0.130526, 0, -0.991445, -0.382684, 0, -0.92388, -0.608761, 0, -0.793353, -0.793353, 0, -0.608761, -0.92388, 0, -0.382684, -0.991445, 0, -0.130526, -0.991445, 0, 0.130526, -0.92388, 0, 0.382684, -0.793353, 0, 0.608761, -0.608761, 0, 0.793353, -0.382684, 0, 0.92388, -0.130526, 0, 0.991445, 0.130526, 0, 0.991445, 0.382684, 0, 0.92388, 0.608761, 0, 0.793353, 0.793353, 0, 0.608761, 0.92388, 0, 0.382684, 0.991445, 0, 0.130526, 0, -1, 0, 0.991445, 0, -0.130526, 0.92388, 0, -0.382684, 0.793353, 0, -0.608761, 0.608761, 0, -0.793353, 0.382684, 0, -0.92388, 0.130526, 0, -0.991445, -0.130526, 0, -0.991445, -0.382684, 0, -0.92388, -0.608761, 0, -0.793353, -0.793353, 0, -0.608761, -0.92388, 0, -0.382684, -0.991445, 0, -0.130526, -0.991445, 0, 0.130526, -0.92388, 0, 0.382684, -0.793353, 0, 0.608761, -0.608761, 0, 0.793353, -0.382684, 0, 0.92388, -0.130526, 0, 0.991445, 0.130526, 0, 0.991445, 0.382684, 0, 0.92388, 0.608761, 0, 0.793353, 0.793353, 0, 0.608761, 0.92388, 0, 0.382684, 0.991445, 0, 0.130526, 0, 1, 0, }; static const unsigned short int GuageConnector_POLS[] = { 4, 1, 120, 121, 3, 1, 5, 3, 121, 122, 123, 5, 1, 4, 5, 123, 124, 6, 1, 4, 6, 124, 125, 9, 1, 5, 9, 125, 126, 127, 10, 1, 4, 10, 127, 128, 12, 1, 4, 14, 12, 128, 129, 1, 5, 16, 14, 129, 130, 131, 1, 4, 19, 16, 131, 132, 1, 4, 20, 19, 132, 133, 1, 5, 23, 20, 133, 134, 135, 1, 4, 25, 23, 135, 136, 1, 4, 25, 136, 137, 27, 1, 5, 27, 137, 139, 138, 29, 1, 4, 29, 138, 140, 30, 1, 4, 30, 140, 141, 32, 1, 5, 32, 141, 143, 142, 34, 1, 4, 34, 142, 144, 36, 1, 4, 38, 36, 144, 145, 1, 5, 41, 38, 145, 147, 146, 1, 4, 43, 41, 146, 148, 1, 4, 44, 43, 148, 149, 1, 5, 47, 44, 149, 151, 150, 1, 4, 1, 47, 150, 120, 1, 4, 96, 97, 73, 72, 1, 4, 97, 98, 74, 73, 1, 4, 98, 99, 75, 74, 1, 4, 99, 100, 76, 75, 1, 4, 100, 101, 77, 76, 1, 4, 101, 102, 78, 77, 1, 4, 102, 103, 79, 78, 1, 4, 103, 104, 80, 79, 1, 4, 104, 105, 81, 80, 1, 4, 105, 106, 82, 81, 1, 4, 106, 107, 83, 82, 1, 4, 107, 108, 84, 83, 1, 4, 108, 109, 85, 84, 1, 4, 109, 110, 86, 85, 1, 4, 110, 111, 87, 86, 1, 4, 111, 112, 88, 87, 1, 4, 112, 113, 89, 88, 1, 4, 113, 114, 90, 89, 1, 4, 114, 115, 91, 90, 1, 4, 115, 116, 92, 91, 1, 4, 116, 117, 93, 92, 1, 4, 117, 118, 94, 93, 1, 4, 118, 119, 95, 94, 1, 4, 119, 96, 72, 95, 1, 24, 1, 3, 5, 6, 9, 10, 12, 14, 16, 19, 20, 23, 25, 27, 29, 30, 32, 34, 36, 38, 41, 43, 44, 47, 1, 4, 48, 49, 2, 0, 1, 4, 49, 50, 4, 2, 1, 4, 50, 51, 7, 4, 1, 4, 51, 52, 8, 7, 1, 4, 52, 53, 11, 8, 1, 4, 53, 54, 13, 11, 1, 4, 54, 55, 15, 13, 1, 4, 55, 56, 17, 15, 1, 4, 56, 57, 18, 17, 1, 4, 57, 58, 21, 18, 1, 4, 58, 59, 22, 21, 1, 4, 59, 60, 24, 22, 1, 4, 60, 61, 26, 24, 1, 4, 61, 62, 28, 26, 1, 4, 62, 63, 31, 28, 1, 4, 63, 64, 33, 31, 1, 4, 64, 65, 35, 33, 1, 4, 65, 66, 37, 35, 1, 4, 66, 67, 39, 37, 1, 4, 67, 68, 40, 39, 1, 4, 68, 69, 42, 40, 1, 4, 69, 70, 45, 42, 1, 4, 70, 71, 46, 45, 1, 4, 71, 48, 0, 46, 1, 24, 48, 71, 70, 69, 68, 67, 66, 65, 64, 63, 62, 61, 60, 59, 58, 57, 56, 55, 54, 53, 52, 51, 50, 49, 1, 0 }; struct lwo LWO_GuageConnector = { 152, /* number of points */ GuageConnector_PNTS, GuageConnector_normals, GuageConnector_POLS, 0L }; static const GLfloat GuageDial_PNTS[] = { 0, 0.05, 0.3, 0.019134, 0.046194, 0.3, 0.035355, 0.035355, 0.3, 0.046194, 0.019134, 0.3, 0.05, 0, 0.3, 0.046194, -0.019134, 0.3, 0.035355, -0.0354, 0.275, 0.035355, -0.0354, 0.3, 0.019134, -0.0462, 0.3, 0, -0.05, 0.3, -0.019134, -0.0462, 0.3, -0.035355, -0.0354, 0.275, -0.035355, -0.0354, 0.3, -0.046194, -0.019134, 0.3, -0.05, 0, 0.3, -0.046194, 0.019134, 0.3, -0.035355, 0.035355, 0.3, -0.019134, 0.046194, 0.3, 0, 0.05, 0.2, 0.019134, 0.046194, 0.2, 0.035355, 0.035355, 0.2, 0.046194, 0.019134, 0.2, 0.05, 0, 0.2, 0.046194, -0.019134, 0.2, 0.035355, -0.035355, 0.2, 0.019134, -0.046194, 0.2, 0, -0.05, 0.2, -0.019134, -0.046194, 0.2, -0.035355, -0.035355, 0.2, -0.046194, -0.019134, 0.2, -0.05, 0, 0.2, -0.046194, 0.019134, 0.2, -0.035355, 0.035355, 0.2, -0.019134, 0.046194, 0.2, 0, -0.3733, 0.275, }; static const GLfloat GuageDial_normals[] = { 0, 0, 1, 0, 0, 1, 0.195089, 0.980786, 0, 0.55557, 0.83147, 0, 0.83147, 0.55557, 0, 0.980785, 0.19509, 0, 0.980785, -0.19509, 0, 0.83147, -0.55557, -0.000248, 0.55557, -0.83147, -0.000051, 0.195089, -0.980786, 0, -0.195089, -0.980786, -0.00006, -0.55557, -0.83147, -0.000371, -0.83147, -0.55557, 0, -0.980785, -0.19509, 0, -0.980785, 0.19509, 0, -0.83147, 0.55557, 0, -0.55557, 0.83147, 0, -0.195089, 0.980786, 0, }; static const unsigned short int GuageDial_POLS[] = { 3, 11, 6, 34, 1, 16, 0, 1, 2, 3, 4, 5, 7, 8, 9, 10, 12, 13, 14, 15, 16, 17, 1, 4, 18, 19, 1, 0, 1, 4, 19, 20, 2, 1, 1, 4, 20, 21, 3, 2, 1, 4, 21, 22, 4, 3, 1, 4, 22, 23, 5, 4, 1, 4, 23, 24, 7, 5, 1, 4, 24, 25, 8, 7, 1, 4, 25, 26, 9, 8, 1, 4, 26, 27, 10, 9, 1, 4, 27, 28, 12, 10, 1, 4, 28, 29, 13, 12, 1, 4, 29, 30, 14, 13, 1, 4, 30, 31, 15, 14, 1, 4, 31, 32, 16, 15, 1, 4, 32, 33, 17, 16, 1, 4, 33, 18, 0, 17, 1, 0 }; struct lwo LWO_GuageDial = { 35, /* number of points */ GuageDial_PNTS, GuageDial_normals, GuageDial_POLS, 0L }; static const GLfloat GuageFace_PNTS[] = { 0, 1.7833, 0.2, -0.087791, 1.774653, 0.2, -0.172208, 1.749046, 0.2, -0.250007, 1.707461, 0.2, -0.318198, 1.651498, 0.2, -0.374161, 1.583307, 0.2, -0.415746, 1.505508, 0.2, -0.441353, 1.421091, 0.2, -0.45, 1.3333, 0.2, -0.441353, 1.245509, 0.2, -0.415746, 1.161092, 0.2, -0.374161, 1.083293, 0.2, -0.318198, 1.015102, 0.2, -0.250007, 0.959139, 0.2, -0.172208, 0.917554, 0.2, -0.087791, 0.891947, 0.2, 0, 0.8833, 0.2, 0.087791, 0.891947, 0.2, 0.172208, 0.917554, 0.2, 0.250007, 0.959139, 0.2, 0.318198, 1.015102, 0.2, 0.374161, 1.083293, 0.2, 0.415746, 1.161092, 0.2, 0.441353, 1.245509, 0.2, 0.45, 1.3333, 0.2, 0.441353, 1.421091, 0.2, 0.415746, 1.505508, 0.2, 0.374161, 1.583307, 0.2, 0.318198, 1.651498, 0.2, 0.250007, 1.707461, 0.2, 0.172208, 1.749046, 0.2, 0.087791, 1.774653, 0.2, }; static const GLfloat GuageFace_normals[] = { 0, 0, 1, }; static const unsigned short int GuageFace_POLS[] = { 32, 0, 31, 30, 29, 28, 27, 26, 25, 24, 23, 22, 21, 20, 19, 18, 17, 16, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 1, 0 }; struct lwo LWO_GuageFace = { 32, /* number of points */ GuageFace_PNTS, GuageFace_normals, GuageFace_POLS, 0L }; static const GLfloat GuageHead_PNTS[] = { 0, 1.8333, 0.33333, 0.097545, 1.823693, 0.33333, 0.191342, 1.79524, 0.33333, 0.277785, 1.749035, 0.33333, 0.353553, 1.686853, 0.33333, 0.415735, 1.611085, 0.33333, 0.46194, 1.524642, 0.33333, 0.490393, 1.430845, 0.33333, 0.5, 1.3333, 0.33333, 0.490393, 1.235755, 0.33333, 0.46194, 1.141958, 0.33333, 0.415735, 1.055515, 0.33333, 0.353553, 0.979747, 0.33333, 0.277785, 0.917565, 0.33333, 0.191342, 0.87136, 0.33333, 0.097545, 0.842907, 0.33333, 0, 0.8333, 0.33333, -0.097545, 0.842907, 0.33333, -0.191342, 0.87136, 0.33333, -0.277785, 0.917565, 0.33333, -0.353553, 0.979747, 0.33333, -0.415735, 1.055515, 0.33333, -0.46194, 1.141958, 0.33333, -0.490393, 1.235755, 0.33333, -0.5, 1.3333, 0.33333, -0.490393, 1.430845, 0.33333, -0.46194, 1.524642, 0.33333, -0.415735, 1.611085, 0.33333, -0.353553, 1.686853, 0.33333, -0.277785, 1.749035, 0.33333, -0.191342, 1.79524, 0.33333, -0.097545, 1.823693, 0.33333, 0, 1.8333, -0.33333, 0.097545, 1.823693, -0.33333, 0.191342, 1.79524, -0.33333, 0.277785, 1.749035, -0.33333, 0.353553, 1.686853, -0.33333, 0.415735, 1.611085, -0.33333, 0.46194, 1.524642, -0.33333, 0.490393, 1.430845, -0.33333, 0.5, 1.3333, -0.33333, 0.490393, 1.235755, -0.33333, 0.46194, 1.141958, -0.33333, 0.415735, 1.055515, -0.33333, 0.353553, 0.979747, -0.33333, 0.277785, 0.917565, -0.33333, 0.191342, 0.87136, -0.33333, 0.097545, 0.842907, -0.33333, 0, 0.8333, -0.33333, -0.097545, 0.842907, -0.33333, -0.191342, 0.87136, -0.33333, -0.277785, 0.917565, -0.33333, -0.353553, 0.979747, -0.33333, -0.415735, 1.055515, -0.33333, -0.46194, 1.141958, -0.33333, -0.490393, 1.235755, -0.33333, -0.5, 1.3333, -0.33333, -0.490393, 1.430845, -0.33333, -0.46194, 1.524642, -0.33333, -0.415735, 1.611085, -0.33333, -0.353553, 1.686853, -0.33333, -0.277785, 1.749035, -0.33333, -0.191342, 1.79524, -0.33333, -0.097545, 1.823693, -0.33333, 0.087791, 1.774653, 0.33333, 0, 1.7833, 0.33333, 0.172208, 1.749046, 0.33333, 0.250007, 1.707461, 0.33333, 0.318198, 1.651498, 0.33333, 0.374161, 1.583307, 0.33333, 0.415746, 1.505508, 0.33333, 0.441353, 1.421091, 0.33333, 0.45, 1.3333, 0.33333, 0.441353, 1.245509, 0.33333, 0.415746, 1.161092, 0.33333, 0.374161, 1.083293, 0.33333, 0.318198, 1.015102, 0.33333, 0.250007, 0.959139, 0.33333, 0.172208, 0.917554, 0.33333, 0.087791, 0.891947, 0.33333, 0, 0.8833, 0.33333, -0.087791, 0.891947, 0.33333, -0.172208, 0.917554, 0.33333, -0.250007, 0.959139, 0.33333, -0.318198, 1.015102, 0.33333, -0.374161, 1.083293, 0.33333, -0.415746, 1.161092, 0.33333, -0.441353, 1.245509, 0.33333, -0.45, 1.3333, 0.33333, -0.441353, 1.421091, 0.33333, -0.415746, 1.505508, 0.33333, -0.374161, 1.583307, 0.33333, -0.318198, 1.651498, 0.33333, -0.250007, 1.707461, 0.33333, -0.172208, 1.749046, 0.33333, -0.087791, 1.774653, 0.33333, 0, 1.7833, 0.2, -0.087791, 1.774653, 0.2, -0.172208, 1.749046, 0.2, -0.250007, 1.707461, 0.2, -0.318198, 1.651498, 0.2, -0.374161, 1.583307, 0.2, -0.415746, 1.505508, 0.2, -0.441353, 1.421091, 0.2, -0.45, 1.3333, 0.2, -0.441353, 1.245509, 0.2, -0.415746, 1.161092, 0.2, -0.374161, 1.083293, 0.2, -0.318198, 1.015102, 0.2, -0.250007, 0.959139, 0.2, -0.172208, 0.917554, 0.2, -0.087791, 0.891947, 0.2, 0, 0.8833, 0.2, 0.087791, 0.891947, 0.2, 0.172208, 0.917554, 0.2, 0.250007, 0.959139, 0.2, 0.318198, 1.015102, 0.2, 0.374161, 1.083293, 0.2, 0.415746, 1.161092, 0.2, 0.441353, 1.245509, 0.2, 0.45, 1.3333, 0.2, 0.441353, 1.421091, 0.2, 0.415746, 1.505508, 0.2, 0.374161, 1.583307, 0.2, 0.318198, 1.651498, 0.2, 0.250007, 1.707461, 0.2, 0.172208, 1.749046, 0.2, 0.087791, 1.774653, 0.2, }; static const GLfloat GuageHead_normals[] = { 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0.098017, -0.995185, 0, 0.290285, -0.95694, 0, 0.471397, -0.881921, 0, 0.634393, -0.77301, 0, 0.773011, -0.634393, 0, 0.881921, -0.471397, 0, 0.95694, -0.290284, 0, 0.995185, -0.098017, 0, 0.995185, 0.098017, 0, 0.95694, 0.290284, 0, 0.881921, 0.471397, 0, 0.773011, 0.634393, 0, 0.634393, 0.773011, 0, 0.471397, 0.881921, 0, 0.290285, 0.95694, 0, 0.098017, 0.995185, 0, -0.098017, 0.995185, 0, -0.290285, 0.95694, 0, -0.471397, 0.881921, 0, -0.634393, 0.773011, 0, -0.773011, 0.634393, 0, -0.881921, 0.471397, 0, -0.95694, 0.290284, 0, -0.995185, 0.098017, 0, -0.995185, -0.098017, 0, -0.95694, -0.290284, 0, -0.881921, -0.471397, 0, -0.773011, -0.634393, 0, -0.634393, -0.77301, 0, -0.471397, -0.881921, 0, -0.290285, -0.95694, 0, -0.098017, -0.995185, 0, 0.098017, 0.995185, 0, 0.290285, 0.95694, 0, 0.471397, 0.881921, 0, 0.634393, 0.773011, 0, 0.773011, 0.634393, 0, 0.881921, 0.471397, 0, 0.95694, 0.290284, 0, 0.995185, 0.098017, 0, 0.995185, -0.098017, 0, 0.95694, -0.290284, 0, 0.881921, -0.471397, 0, 0.773011, -0.634393, 0, 0.634393, -0.77301, 0, 0.471396, -0.881921, 0, 0.290285, -0.95694, 0, 0.098017, -0.995185, 0, -0.098017, -0.995185, 0, -0.290285, -0.95694, 0, -0.471396, -0.881921, 0, -0.634393, -0.77301, 0, -0.773011, -0.634393, 0, -0.881921, -0.471397, 0, -0.95694, -0.290284, 0, -0.995185, -0.098017, 0, -0.995185, 0.098017, 0, -0.95694, 0.290284, 0, -0.881921, 0.471397, 0, -0.773011, 0.634393, 0, -0.634393, 0.773011, 0, -0.471397, 0.881921, 0, -0.290285, 0.95694, 0, -0.098017, 0.995185, 0, 0, 0, -1, }; static const unsigned short int GuageHead_POLS[] = { 3, 67, 3, 4, 1, 3, 68, 67, 4, 1, 3, 68, 4, 5, 1, 3, 69, 68, 5, 1, 3, 70, 69, 5, 1, 3, 70, 5, 6, 1, 3, 70, 6, 7, 1, 3, 71, 70, 7, 1, 3, 71, 7, 8, 1, 3, 72, 71, 8, 1, 3, 73, 72, 8, 1, 3, 73, 8, 9, 1, 3, 74, 73, 9, 1, 3, 74, 9, 10, 1, 3, 74, 10, 11, 1, 3, 75, 74, 11, 1, 3, 76, 75, 11, 1, 3, 76, 11, 12, 1, 3, 76, 12, 13, 1, 3, 77, 76, 13, 1, 3, 78, 77, 13, 1, 3, 78, 13, 14, 1, 3, 78, 14, 15, 1, 3, 79, 78, 15, 1, 3, 79, 15, 16, 1, 3, 80, 79, 16, 1, 3, 81, 80, 16, 1, 3, 81, 16, 17, 1, 3, 82, 81, 17, 1, 3, 82, 17, 18, 1, 3, 82, 18, 19, 1, 3, 83, 82, 19, 1, 3, 84, 83, 19, 1, 3, 84, 19, 20, 1, 3, 84, 20, 21, 1, 3, 85, 84, 21, 1, 3, 86, 85, 21, 1, 3, 86, 21, 22, 1, 3, 86, 22, 23, 1, 3, 87, 86, 23, 1, 3, 87, 23, 24, 1, 3, 88, 87, 24, 1, 3, 89, 88, 24, 1, 3, 89, 24, 25, 1, 3, 90, 89, 25, 1, 3, 90, 25, 26, 1, 3, 90, 26, 27, 1, 3, 91, 90, 27, 1, 3, 92, 91, 27, 1, 3, 92, 27, 28, 1, 3, 93, 92, 28, 1, 3, 93, 28, 29, 1, 3, 2, 3, 67, 1, 3, 2, 67, 66, 1, 3, 1, 2, 66, 1, 3, 1, 66, 64, 1, 3, 1, 64, 65, 1, 3, 0, 1, 65, 1, 3, 31, 0, 65, 1, 3, 31, 65, 95, 1, 3, 31, 95, 94, 1, 3, 30, 31, 94, 1, 3, 30, 94, 93, 1, 3, 93, 29, 30, 1, 4, 96, 97, 95, 65, 1, 4, 97, 98, 94, 95, 1, 4, 98, 99, 93, 94, 1, 4, 99, 100, 92, 93, 1, 4, 100, 101, 91, 92, 1, 4, 101, 102, 90, 91, 1, 4, 102, 103, 89, 90, 1, 4, 103, 104, 88, 89, 1, 4, 104, 105, 87, 88, 1, 4, 105, 106, 86, 87, 1, 4, 106, 107, 85, 86, 1, 4, 107, 108, 84, 85, 1, 4, 108, 109, 83, 84, 1, 4, 109, 110, 82, 83, 1, 4, 110, 111, 81, 82, 1, 4, 111, 112, 80, 81, 1, 4, 112, 113, 79, 80, 1, 4, 113, 114, 78, 79, 1, 4, 114, 115, 77, 78, 1, 4, 115, 116, 76, 77, 1, 4, 116, 117, 75, 76, 1, 4, 117, 118, 74, 75, 1, 4, 118, 119, 73, 74, 1, 4, 119, 120, 72, 73, 1, 4, 120, 121, 71, 72, 1, 4, 121, 122, 70, 71, 1, 4, 122, 123, 69, 70, 1, 4, 123, 124, 68, 69, 1, 4, 124, 125, 67, 68, 1, 4, 125, 126, 66, 67, 1, 4, 126, 127, 64, 66, 1, 4, 127, 96, 65, 64, 1, 4, 32, 33, 1, 0, 1, 4, 33, 34, 2, 1, 1, 4, 34, 35, 3, 2, 1, 4, 35, 36, 4, 3, 1, 4, 36, 37, 5, 4, 1, 4, 37, 38, 6, 5, 1, 4, 38, 39, 7, 6, 1, 4, 39, 40, 8, 7, 1, 4, 40, 41, 9, 8, 1, 4, 41, 42, 10, 9, 1, 4, 42, 43, 11, 10, 1, 4, 43, 44, 12, 11, 1, 4, 44, 45, 13, 12, 1, 4, 45, 46, 14, 13, 1, 4, 46, 47, 15, 14, 1, 4, 47, 48, 16, 15, 1, 4, 48, 49, 17, 16, 1, 4, 49, 50, 18, 17, 1, 4, 50, 51, 19, 18, 1, 4, 51, 52, 20, 19, 1, 4, 52, 53, 21, 20, 1, 4, 53, 54, 22, 21, 1, 4, 54, 55, 23, 22, 1, 4, 55, 56, 24, 23, 1, 4, 56, 57, 25, 24, 1, 4, 57, 58, 26, 25, 1, 4, 58, 59, 27, 26, 1, 4, 59, 60, 28, 27, 1, 4, 60, 61, 29, 28, 1, 4, 61, 62, 30, 29, 1, 4, 62, 63, 31, 30, 1, 4, 63, 32, 0, 31, 1, 32, 32, 63, 62, 61, 60, 59, 58, 57, 56, 55, 54, 53, 52, 51, 50, 49, 48, 47, 46, 45, 44, 43, 42, 41, 40, 39, 38, 37, 36, 35, 34, 33, 1, 0 }; struct lwo LWO_GuageHead = { 128, /* number of points */ GuageHead_PNTS, GuageHead_normals, GuageHead_POLS, 0L }; static const GLfloat PipeBetweenBolts_PNTS[] = { 0, 0.5, 0.5, 0.12941, 0.482963, 0.5, 0.25, 0.433013, 0.5, 0.353553, 0.353553, 0.5, 0.433013, 0.25, 0.5, 0.482963, 0.12941, 0.5, 0.5, 0, 0.5, 0.482963, -0.12941, 0.5, 0.433013, -0.25, 0.5, 0.353553, -0.353553, 0.5, 0.25, -0.433013, 0.5, 0.12941, -0.482963, 0.5, 0, -0.5, 0.5, -0.12941, -0.482963, 0.5, -0.25, -0.433013, 0.5, -0.353553, -0.353553, 0.5, -0.433013, -0.25, 0.5, -0.482963, -0.12941, 0.5, -0.5, 0, 0.5, -0.482963, 0.12941, 0.5, -0.433013, 0.25, 0.5, -0.353553, 0.353553, 0.5, -0.25, 0.433013, 0.5, -0.12941, 0.482963, 0.5, 0, 0.5, -0.5, 0.12941, 0.482963, -0.5, 0.25, 0.433013, -0.5, 0.353553, 0.353553, -0.5, 0.433013, 0.25, -0.5, 0.482963, 0.12941, -0.5, 0.5, 0, -0.5, 0.482963, -0.12941, -0.5, 0.433013, -0.25, -0.5, 0.353553, -0.353553, -0.5, 0.25, -0.433013, -0.5, 0.12941, -0.482963, -0.5, 0, -0.5, -0.5, -0.12941, -0.482963, -0.5, -0.25, -0.433013, -0.5, -0.353553, -0.353553, -0.5, -0.433013, -0.25, -0.5, -0.482963, -0.12941, -0.5, -0.5, 0, -0.5, -0.482963, 0.12941, -0.5, -0.433013, 0.25, -0.5, -0.353553, 0.353553, -0.5, -0.25, 0.433013, -0.5, -0.12941, 0.482963, -0.5, }; static const GLfloat PipeBetweenBolts_normals[] = { 0, 0, 1, 0.130526, 0.991445, 0, 0.382683, 0.92388, 0, 0.608761, 0.793353, 0, 0.793353, 0.608761, 0, 0.92388, 0.382683, 0, 0.991445, 0.130526, 0, 0.991445, -0.130526, 0, 0.92388, -0.382683, 0, 0.793353, -0.608761, 0, 0.608761, -0.793353, 0, 0.382683, -0.92388, 0, 0.130526, -0.991445, 0, -0.130526, -0.991445, 0, -0.382683, -0.92388, 0, -0.608761, -0.793353, 0, -0.793353, -0.608761, 0, -0.92388, -0.382683, 0, -0.991445, -0.130526, 0, -0.991445, 0.130526, 0, -0.92388, 0.382683, 0, -0.793353, 0.608761, 0, -0.608761, 0.793353, 0, -0.382683, 0.92388, 0, -0.130526, 0.991445, 0, 0, 0, -1, }; static const unsigned short int PipeBetweenBolts_POLS[] = { 24, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 1, 4, 24, 25, 1, 0, 1, 4, 25, 26, 2, 1, 1, 4, 26, 27, 3, 2, 1, 4, 27, 28, 4, 3, 1, 4, 28, 29, 5, 4, 1, 4, 29, 30, 6, 5, 1, 4, 30, 31, 7, 6, 1, 4, 31, 32, 8, 7, 1, 4, 32, 33, 9, 8, 1, 4, 33, 34, 10, 9, 1, 4, 34, 35, 11, 10, 1, 4, 35, 36, 12, 11, 1, 4, 36, 37, 13, 12, 1, 4, 37, 38, 14, 13, 1, 4, 38, 39, 15, 14, 1, 4, 39, 40, 16, 15, 1, 4, 40, 41, 17, 16, 1, 4, 41, 42, 18, 17, 1, 4, 42, 43, 19, 18, 1, 4, 43, 44, 20, 19, 1, 4, 44, 45, 21, 20, 1, 4, 45, 46, 22, 21, 1, 4, 46, 47, 23, 22, 1, 4, 47, 24, 0, 23, 1, 24, 24, 47, 46, 45, 44, 43, 42, 41, 40, 39, 38, 37, 36, 35, 34, 33, 32, 31, 30, 29, 28, 27, 26, 25, 1, 0 }; struct lwo LWO_PipeBetweenBolts = { 48, /* number of points */ PipeBetweenBolts_PNTS, PipeBetweenBolts_normals, PipeBetweenBolts_POLS, 0L }; static const GLfloat ElbowBolts_PNTS[] = { 0.273122, -0.6, -0.403061, 0.273122, 0.403061, -0.6, 0.273122, 0.333061, -0.6, 0.273122, -0.6, -0.333061, 0.2125, 0.298061, -0.6, 0.2125, -0.6, -0.298061, 0.151878, 0.333061, -0.6, 0.151878, -0.6, -0.333061, 0.151878, 0.403061, -0.6, 0.151878, -0.6, -0.403061, 0.2125, -0.6, -0.438061, 0.2125, 0.438061, -0.6, 0.273122, -0.66, -0.403061, 0.273122, 0.403061, -0.66, 0.273122, -0.66, -0.333061, 0.273122, 0.333061, -0.66, 0.2125, 0.298061, -0.66, 0.2125, -0.66, -0.298061, 0.151878, -0.66, -0.333061, 0.151878, 0.333061, -0.66, 0.151878, 0.403061, -0.66, 0.151878, -0.66, -0.403061, 0.2125, -0.66, -0.438061, 0.2125, 0.438061, -0.66, 0.273122, 0.403061, -0.46, 0.273122, -0.46, -0.403061, 0.273122, 0.333061, -0.46, 0.273122, -0.46, -0.333061, 0.2125, 0.298061, -0.46, 0.2125, -0.46, -0.298061, 0.151878, 0.333061, -0.46, 0.151878, -0.46, -0.333061, 0.151878, 0.403061, -0.46, 0.151878, -0.46, -0.403061, 0.2125, -0.46, -0.438061, 0.2125, 0.438061, -0.46, 0.273122, 0.403061, -0.52, 0.273122, -0.52, -0.403061, 0.273122, -0.52, -0.333061, 0.273122, 0.333061, -0.52, 0.2125, 0.298061, -0.52, 0.2125, -0.52, -0.298061, 0.151878, 0.333061, -0.52, 0.151878, -0.52, -0.333061, 0.151878, 0.403061, -0.52, 0.151878, -0.52, -0.403061, 0.2125, -0.52, -0.438061, 0.2125, 0.438061, -0.52, 0.485622, -0.035, -0.46, 0.485622, -0.46, 0.035, 0.425, -0.07, -0.46, 0.425, -0.46, 0.07, 0.364378, -0.46, 0.035, 0.364378, -0.035, -0.46, 0.364378, 0.035, -0.46, 0.364378, -0.46, -0.035, 0.425, 0.07, -0.46, 0.425, -0.46, -0.07, 0.485622, 0.035, -0.46, 0.485622, -0.46, -0.035, 0.485622, -0.52, 0.035, 0.485622, -0.035, -0.52, 0.425, -0.07, -0.52, 0.425, -0.52, 0.07, 0.364378, -0.035, -0.52, 0.364378, -0.52, 0.035, 0.364378, -0.52, -0.035, 0.364378, 0.035, -0.52, 0.425, 0.07, -0.52, 0.425, -0.52, -0.07, 0.485622, 0.035, -0.52, 0.485622, -0.52, -0.035, 0.485622, -0.035, -0.6, 0.485622, -0.6, 0.035, 0.425, -0.6, 0.07, 0.425, -0.07, -0.6, 0.364378, -0.6, 0.035, 0.364378, -0.035, -0.6, 0.364378, 0.035, -0.6, 0.364378, -0.6, -0.035, 0.425, 0.07, -0.6, 0.425, -0.6, -0.07, 0.485622, -0.6, -0.035, 0.485622, 0.035, -0.6, 0.485622, -0.66, 0.035, 0.485622, -0.035, -0.66, 0.425, -0.66, 0.07, 0.425, -0.07, -0.66, 0.364378, -0.035, -0.66, 0.364378, -0.66, 0.035, 0.364378, -0.66, -0.035, 0.364378, 0.035, -0.66, 0.425, 0.07, -0.66, 0.425, -0.66, -0.07, 0.485622, -0.66, -0.035, 0.485622, 0.035, -0.66, 0.2125, -0.438061, -0.46, 0.2125, -0.46, 0.438061, 0.151878, -0.403061, -0.46, 0.151878, -0.46, 0.403061, 0.151878, -0.46, 0.333061, 0.151878, -0.333061, -0.46, 0.2125, -0.46, 0.298061, 0.2125, -0.298061, -0.46, 0.273122, -0.46, 0.333061, 0.273122, -0.333061, -0.46, 0.273122, -0.403061, -0.46, 0.273122, -0.46, 0.403061, 0.2125, -0.52, 0.438061, 0.2125, -0.438061, -0.52, 0.151878, -0.403061, -0.52, 0.151878, -0.52, 0.403061, 0.151878, -0.333061, -0.52, 0.151878, -0.52, 0.333061, 0.2125, -0.298061, -0.52, 0.2125, -0.52, 0.298061, 0.273122, -0.333061, -0.52, 0.273122, -0.52, 0.333061, 0.273122, -0.403061, -0.52, 0.273122, -0.52, 0.403061, 0.2125, -0.438061, -0.6, 0.2125, -0.6, 0.438061, 0.151878, -0.403061, -0.6, 0.151878, -0.6, 0.403061, 0.151878, -0.6, 0.333061, 0.151878, -0.333061, -0.6, 0.2125, -0.298061, -0.6, 0.2125, -0.6, 0.298061, 0.273122, -0.333061, -0.6, 0.273122, -0.6, 0.333061, 0.273122, -0.6, 0.403061, 0.273122, -0.403061, -0.6, 0.2125, -0.66, 0.438061, 0.2125, -0.438061, -0.66, 0.151878, -0.403061, -0.66, 0.151878, -0.66, 0.403061, 0.151878, -0.333061, -0.66, 0.151878, -0.66, 0.333061, 0.2125, -0.66, 0.298061, 0.2125, -0.298061, -0.66, 0.273122, -0.66, 0.333061, 0.273122, -0.333061, -0.66, 0.273122, -0.66, 0.403061, 0.273122, -0.403061, -0.66, -0.273122, -0.46, 0.403061, -0.273122, -0.403061, -0.46, -0.273122, -0.46, 0.333061, -0.273122, -0.333061, -0.46, -0.2125, -0.298061, -0.46, -0.2125, -0.46, 0.298061, -0.151878, -0.333061, -0.46, -0.151878, -0.46, 0.333061, -0.151878, -0.403061, -0.46, -0.151878, -0.46, 0.403061, -0.2125, -0.46, 0.438061, -0.2125, -0.438061, -0.46, -0.273122, -0.52, 0.403061, -0.273122, -0.403061, -0.52, -0.273122, -0.333061, -0.52, -0.273122, -0.52, 0.333061, -0.2125, -0.52, 0.298061, -0.2125, -0.298061, -0.52, -0.151878, -0.333061, -0.52, -0.151878, -0.52, 0.333061, -0.151878, -0.52, 0.403061, -0.151878, -0.403061, -0.52, -0.2125, -0.52, 0.438061, -0.2125, -0.438061, -0.52, -0.273122, -0.6, 0.403061, -0.273122, -0.403061, -0.6, -0.273122, -0.6, 0.333061, -0.273122, -0.333061, -0.6, -0.2125, -0.6, 0.298061, -0.2125, -0.298061, -0.6, -0.151878, -0.333061, -0.6, -0.151878, -0.6, 0.333061, -0.151878, -0.6, 0.403061, -0.151878, -0.403061, -0.6, -0.2125, -0.438061, -0.6, -0.2125, -0.6, 0.438061, -0.273122, -0.66, 0.403061, -0.273122, -0.403061, -0.66, -0.273122, -0.333061, -0.66, -0.273122, -0.66, 0.333061, -0.2125, -0.298061, -0.66, -0.2125, -0.66, 0.298061, -0.151878, -0.66, 0.333061, -0.151878, -0.333061, -0.66, -0.151878, -0.66, 0.403061, -0.151878, -0.403061, -0.66, -0.2125, -0.438061, -0.66, -0.2125, -0.66, 0.438061, -0.485622, -0.46, -0.035, -0.485622, 0.035, -0.46, -0.425, 0.07, -0.46, -0.425, -0.46, -0.07, -0.364378, 0.035, -0.46, -0.364378, -0.46, -0.035, -0.364378, -0.46, 0.035, -0.364378, -0.035, -0.46, -0.425, -0.46, 0.07, -0.425, -0.07, -0.46, -0.485622, -0.035, -0.46, -0.485622, -0.46, 0.035, -0.485622, -0.52, -0.035, -0.485622, 0.035, -0.52, -0.425, 0.07, -0.52, -0.425, -0.52, -0.07, -0.364378, 0.035, -0.52, -0.364378, -0.52, -0.035, -0.364378, -0.035, -0.52, -0.364378, -0.52, 0.035, -0.425, -0.52, 0.07, -0.425, -0.07, -0.52, -0.485622, -0.035, -0.52, -0.485622, -0.52, 0.035, -0.485622, 0.035, -0.6, -0.485622, -0.6, -0.035, -0.425, -0.6, -0.07, -0.425, 0.07, -0.6, -0.364378, -0.6, -0.035, -0.364378, 0.035, -0.6, -0.364378, -0.6, 0.035, -0.364378, -0.035, -0.6, -0.425, -0.6, 0.07, -0.425, -0.07, -0.6, -0.485622, -0.6, 0.035, -0.485622, -0.035, -0.6, -0.485622, -0.66, -0.035, -0.485622, 0.035, -0.66, -0.425, -0.66, -0.07, -0.425, 0.07, -0.66, -0.364378, 0.035, -0.66, -0.364378, -0.66, -0.035, -0.364378, -0.66, 0.035, -0.364378, -0.035, -0.66, -0.425, -0.07, -0.66, -0.425, -0.66, 0.07, -0.485622, -0.66, 0.035, -0.485622, -0.035, -0.66, -0.2125, -0.46, -0.438061, -0.2125, 0.438061, -0.46, -0.151878, 0.403061, -0.46, -0.151878, -0.46, -0.403061, -0.151878, -0.46, -0.333061, -0.151878, 0.333061, -0.46, -0.2125, 0.298061, -0.46, -0.2125, -0.46, -0.298061, -0.273122, 0.333061, -0.46, -0.273122, -0.46, -0.333061, -0.273122, -0.46, -0.403061, -0.273122, 0.403061, -0.46, -0.2125, -0.52, -0.438061, -0.2125, 0.438061, -0.52, -0.151878, 0.403061, -0.52, -0.151878, -0.52, -0.403061, -0.151878, -0.52, -0.333061, -0.151878, 0.333061, -0.52, -0.2125, 0.298061, -0.52, -0.2125, -0.52, -0.298061, -0.273122, 0.333061, -0.52, -0.273122, -0.52, -0.333061, -0.273122, 0.403061, -0.52, -0.273122, -0.52, -0.403061, -0.2125, 0.438061, -0.6, -0.2125, -0.6, -0.438061, -0.151878, -0.6, -0.403061, -0.151878, 0.403061, -0.6, -0.151878, 0.333061, -0.6, -0.151878, -0.6, -0.333061, -0.2125, -0.6, -0.298061, -0.2125, 0.298061, -0.6, -0.273122, -0.6, -0.333061, -0.273122, 0.333061, -0.6, -0.273122, -0.6, -0.403061, -0.273122, 0.403061, -0.6, -0.2125, -0.66, -0.438061, -0.2125, 0.438061, -0.66, -0.151878, -0.66, -0.403061, -0.151878, 0.403061, -0.66, -0.151878, -0.66, -0.333061, -0.151878, 0.333061, -0.66, -0.2125, -0.66, -0.298061, -0.2125, 0.298061, -0.66, -0.273122, -0.66, -0.333061, -0.273122, 0.333061, -0.66, -0.273122, 0.403061, -0.66, -0.273122, -0.66, -0.403061, }; static const GLfloat ElbowBolts_normals[] = { 0, 0, 1, 0.5, 0.866026, 0, 1, 0, 0, 0.5, -0.866025, 0, -0.5, -0.866025, 0, -1, 0, 0, -0.5, 0.866025, 0, 0, 0, -1, 0, 0, 1, 0.499999, 0.866026, 0, 1, 0, 0, 0.5, -0.866025, 0, -0.5, -0.866025, 0, -1, 0, 0, -0.5, 0.866025, 0, 0, 0, -1, 0, 0, 1, -0.5, 0.866025, 0, 0.5, 0.866025, 0, 1, 0, 0, 0.5, -0.866025, 0, -0.5, -0.866025, 0, -1, 0, 0, 0, 0, -1, 0, 0, 1, -0.5, 0.866025, 0, 0.5, 0.866025, 0, 1, 0, 0, 0.5, -0.866025, 0, -0.5, -0.866025, 0, -1, 0, 0, 0, 0, -1, 0, 0, 1, -1, 0, 0, -0.5, 0.866026, 0, 0.5, 0.866025, 0, 1, 0, 0, 0.5, -0.866026, 0, -0.5, -0.866025, 0, 0, 0, -1, 0, 0, 1, -1, 0, 0, -0.5, 0.866026, 0, 0.5, 0.866025, 0, 1, 0, 0, 0.5, -0.866025, 0, -0.5, -0.866025, 0, 0, 0, -1, 0, 0, 1, -0.5, -0.866026, 0, -1, 0, 0, -0.5, 0.866025, 0, 0.5, 0.866025, 0, 1, 0, 0, 0.5, -0.866025, 0, 0, 0, -1, 0, 0, 1, -0.499999, -0.866026, 0, -1, 0, 0, -0.5, 0.866025, 0, 0.5, 0.866025, 0, 1, 0, 0, 0.5, -0.866025, 0, 0, 0, -1, 0, 0, 1, 0.5, -0.866025, 0, -0.5, -0.866025, 0, -1, 0, 0, -0.5, 0.866025, 0, 0.5, 0.866025, 0, 1, 0, 0, 0, 0, -1, 0, 0, 1, 0.5, -0.866025, 0, -0.5, -0.866025, 0, -1, 0, 0, -0.5, 0.866025, 0, 0.5, 0.866025, 0, 1, 0, 0, 0, 0, -1, 0, 0, 1, 1, 0, 0, 0.5, -0.866026, 0, -0.5, -0.866025, 0, -1, 0, 0, -0.5, 0.866026, 0, 0.5, 0.866025, 0, 0, 0, -1, 0, 0, 1, 1, 0, 0, 0.5, -0.866026, 0, -0.5, -0.866025, 0, -1, 0, 0, -0.5, 0.866025, 0, 0.5, 0.866025, 0, 0, 0, -1, 0, 1, 0, 0.5, 0, -0.866026, 1, 0, 0, 0.5, 0, 0.866025, -0.5, 0, 0.866025, -1, 0, 0, -0.5, 0, -0.866025, 0, -1, 0, 0, 1, 0, 0.499999, 0, -0.866026, 1, 0, 0, 0.5, 0, 0.866025, -0.5, 0, 0.866025, -1, 0, 0, -0.5, 0, -0.866025, 0, -1, 0, 0, 1, 0, -0.5, 0, -0.866025, 0.5, 0, -0.866025, 1, 0, 0, 0.5, 0, 0.866025, -0.5, 0, 0.866025, -1, 0, 0, 0, -1, 0, 0, 1, 0, -0.5, 0, -0.866025, 0.5, 0, -0.866025, 1, 0, 0, 0.5, 0, 0.866025, -0.5, 0, 0.866025, -1, 0, 0, 0, -1, 0, 0, 1, 0, -1, 0, 0, -0.5, 0, -0.866026, 0.5, 0, -0.866025, 1, 0, 0, 0.5, 0, 0.866026, -0.5, 0, 0.866025, 0, -1, 0, 0, 1, 0, -1, 0, 0, -0.5, 0, -0.866026, 0.5, 0, -0.866025, 1, 0, 0, 0.5, 0, 0.866025, -0.5, 0, 0.866025, 0, -1, 0, 0, 1, 0, -0.5, 0, 0.866026, -1, 0, 0, -0.5, 0, -0.866025, 0.5, 0, -0.866025, 1, 0, 0, 0.5, 0, 0.866025, 0, -1, 0, 0, 1, 0, -0.499999, 0, 0.866026, -1, 0, 0, -0.5, 0, -0.866025, 0.5, 0, -0.866025, 1, 0, 0, 0.5, 0, 0.866025, 0, -1, 0, 0, 1, 0, 0.5, 0, 0.866025, -0.5, 0, 0.866025, -1, 0, 0, -0.5, 0, -0.866025, 0.5, 0, -0.866025, 1, 0, 0, 0, -1, 0, 0, 1, 0, 0.5, 0, 0.866025, -0.5, 0, 0.866025, -1, 0, 0, -0.5, 0, -0.866025, 0.5, 0, -0.866025, 1, 0, 0, 0, -1, 0, 0, 1, 0, 1, 0, 0, 0.5, 0, 0.866026, -0.5, 0, 0.866025, -1, 0, 0, -0.5, 0, -0.866026, 0.5, 0, -0.866025, 0, -1, 0, 0, 1, 0, 1, 0, 0, 0.5, 0, 0.866026, -0.5, 0, 0.866025, -1, 0, 0, -0.5, 0, -0.866025, 0.5, 0, -0.866025, 0, -1, 0, }; static const unsigned short int ElbowBolts_POLS[] = { 6, 241, 242, 245, 246, 248, 251, 1, 4, 253, 254, 242, 241, 1, 4, 254, 257, 245, 242, 1, 4, 257, 258, 246, 245, 1, 4, 258, 260, 248, 246, 1, 4, 260, 262, 251, 248, 1, 4, 262, 253, 241, 251, 1, 6, 253, 262, 260, 258, 257, 254, 1, 6, 264, 267, 268, 271, 273, 275, 1, 4, 277, 279, 267, 264, 1, 4, 279, 281, 268, 267, 1, 4, 281, 283, 271, 268, 1, 4, 283, 285, 273, 271, 1, 4, 285, 286, 275, 273, 1, 4, 286, 277, 264, 275, 1, 6, 277, 286, 285, 283, 281, 279, 1, 6, 193, 194, 196, 199, 201, 202, 1, 4, 205, 206, 194, 193, 1, 4, 206, 208, 196, 194, 1, 4, 208, 210, 199, 196, 1, 4, 210, 213, 201, 199, 1, 4, 213, 214, 202, 201, 1, 4, 214, 205, 193, 202, 1, 6, 205, 214, 213, 210, 208, 206, 1, 6, 216, 219, 221, 223, 225, 227, 1, 4, 229, 231, 219, 216, 1, 4, 231, 232, 221, 219, 1, 4, 232, 235, 223, 221, 1, 4, 235, 236, 225, 223, 1, 4, 236, 239, 227, 225, 1, 4, 239, 229, 216, 227, 1, 6, 229, 239, 236, 235, 232, 231, 1, 6, 145, 147, 148, 150, 152, 155, 1, 4, 157, 158, 147, 145, 1, 4, 158, 161, 148, 147, 1, 4, 161, 162, 150, 148, 1, 4, 162, 165, 152, 150, 1, 4, 165, 167, 155, 152, 1, 4, 167, 157, 145, 155, 1, 6, 157, 167, 165, 162, 161, 158, 1, 6, 169, 171, 173, 174, 177, 178, 1, 4, 181, 182, 171, 169, 1, 4, 182, 184, 173, 171, 1, 4, 184, 187, 174, 173, 1, 4, 187, 189, 177, 174, 1, 4, 189, 190, 178, 177, 1, 4, 190, 181, 169, 178, 1, 6, 181, 190, 189, 187, 184, 182, 1, 6, 96, 98, 101, 103, 105, 106, 1, 4, 109, 110, 98, 96, 1, 4, 110, 112, 101, 98, 1, 4, 112, 114, 103, 101, 1, 4, 114, 116, 105, 103, 1, 4, 116, 118, 106, 105, 1, 4, 118, 109, 96, 106, 1, 6, 109, 118, 116, 114, 112, 110, 1, 6, 120, 122, 125, 126, 128, 131, 1, 4, 133, 134, 122, 120, 1, 4, 134, 136, 125, 122, 1, 4, 136, 139, 126, 125, 1, 4, 139, 141, 128, 126, 1, 4, 141, 143, 131, 128, 1, 4, 143, 133, 120, 131, 1, 6, 133, 143, 141, 139, 136, 134, 1, 6, 48, 50, 53, 54, 56, 58, 1, 4, 61, 62, 50, 48, 1, 4, 62, 64, 53, 50, 1, 4, 64, 67, 54, 53, 1, 4, 67, 68, 56, 54, 1, 4, 68, 70, 58, 56, 1, 4, 70, 61, 48, 58, 1, 6, 61, 70, 68, 67, 64, 62, 1, 6, 72, 75, 77, 78, 80, 83, 1, 4, 85, 87, 75, 72, 1, 4, 87, 88, 77, 75, 1, 4, 88, 91, 78, 77, 1, 4, 91, 92, 80, 78, 1, 4, 92, 95, 83, 80, 1, 4, 95, 85, 72, 83, 1, 6, 85, 95, 92, 91, 88, 87, 1, 6, 24, 26, 28, 30, 32, 35, 1, 4, 36, 39, 26, 24, 1, 4, 39, 40, 28, 26, 1, 4, 40, 42, 30, 28, 1, 4, 42, 44, 32, 30, 1, 4, 44, 47, 35, 32, 1, 4, 47, 36, 24, 35, 1, 6, 36, 47, 44, 42, 40, 39, 1, 6, 1, 2, 4, 6, 8, 11, 1, 4, 13, 15, 2, 1, 1, 4, 15, 16, 4, 2, 1, 4, 16, 19, 6, 4, 1, 4, 19, 20, 8, 6, 1, 4, 20, 23, 11, 8, 1, 4, 23, 13, 1, 11, 1, 6, 13, 23, 20, 19, 16, 15, 1, 6, 240, 243, 244, 247, 249, 250, 1, 4, 252, 255, 243, 240, 1, 4, 255, 256, 244, 243, 1, 4, 256, 259, 247, 244, 1, 4, 259, 261, 249, 247, 1, 4, 261, 263, 250, 249, 1, 4, 263, 252, 240, 250, 1, 6, 252, 263, 261, 259, 256, 255, 1, 6, 265, 266, 269, 270, 272, 274, 1, 4, 276, 278, 266, 265, 1, 4, 278, 280, 269, 266, 1, 4, 280, 282, 270, 269, 1, 4, 282, 284, 272, 270, 1, 4, 284, 287, 274, 272, 1, 4, 287, 276, 265, 274, 1, 6, 276, 287, 284, 282, 280, 278, 1, 6, 192, 195, 197, 198, 200, 203, 1, 4, 204, 207, 195, 192, 1, 4, 207, 209, 197, 195, 1, 4, 209, 211, 198, 197, 1, 4, 211, 212, 200, 198, 1, 4, 212, 215, 203, 200, 1, 4, 215, 204, 192, 203, 1, 6, 204, 215, 212, 211, 209, 207, 1, 6, 217, 218, 220, 222, 224, 226, 1, 4, 228, 230, 218, 217, 1, 4, 230, 233, 220, 218, 1, 4, 233, 234, 222, 220, 1, 4, 234, 237, 224, 222, 1, 4, 237, 238, 226, 224, 1, 4, 238, 228, 217, 226, 1, 6, 228, 238, 237, 234, 233, 230, 1, 6, 144, 146, 149, 151, 153, 154, 1, 4, 156, 159, 146, 144, 1, 4, 159, 160, 149, 146, 1, 4, 160, 163, 151, 149, 1, 4, 163, 164, 153, 151, 1, 4, 164, 166, 154, 153, 1, 4, 166, 156, 144, 154, 1, 6, 156, 166, 164, 163, 160, 159, 1, 6, 168, 170, 172, 175, 176, 179, 1, 4, 180, 183, 170, 168, 1, 4, 183, 185, 172, 170, 1, 4, 185, 186, 175, 172, 1, 4, 186, 188, 176, 175, 1, 4, 188, 191, 179, 176, 1, 4, 191, 180, 168, 179, 1, 6, 180, 191, 188, 186, 185, 183, 1, 6, 97, 99, 100, 102, 104, 107, 1, 4, 108, 111, 99, 97, 1, 4, 111, 113, 100, 99, 1, 4, 113, 115, 102, 100, 1, 4, 115, 117, 104, 102, 1, 4, 117, 119, 107, 104, 1, 4, 119, 108, 97, 107, 1, 6, 108, 119, 117, 115, 113, 111, 1, 6, 121, 123, 124, 127, 129, 130, 1, 4, 132, 135, 123, 121, 1, 4, 135, 137, 124, 123, 1, 4, 137, 138, 127, 124, 1, 4, 138, 140, 129, 127, 1, 4, 140, 142, 130, 129, 1, 4, 142, 132, 121, 130, 1, 6, 132, 142, 140, 138, 137, 135, 1, 6, 49, 51, 52, 55, 57, 59, 1, 4, 60, 63, 51, 49, 1, 4, 63, 65, 52, 51, 1, 4, 65, 66, 55, 52, 1, 4, 66, 69, 57, 55, 1, 4, 69, 71, 59, 57, 1, 4, 71, 60, 49, 59, 1, 6, 60, 71, 69, 66, 65, 63, 1, 6, 73, 74, 76, 79, 81, 82, 1, 4, 84, 86, 74, 73, 1, 4, 86, 89, 76, 74, 1, 4, 89, 90, 79, 76, 1, 4, 90, 93, 81, 79, 1, 4, 93, 94, 82, 81, 1, 4, 94, 84, 73, 82, 1, 6, 84, 94, 93, 90, 89, 86, 1, 6, 25, 27, 29, 31, 33, 34, 1, 4, 37, 38, 27, 25, 1, 4, 38, 41, 29, 27, 1, 4, 41, 43, 31, 29, 1, 4, 43, 45, 33, 31, 1, 4, 45, 46, 34, 33, 1, 4, 46, 37, 25, 34, 1, 6, 37, 46, 45, 43, 41, 38, 1, 6, 0, 3, 5, 7, 9, 10, 1, 4, 12, 14, 3, 0, 1, 4, 14, 17, 5, 3, 1, 4, 17, 18, 7, 5, 1, 4, 18, 21, 9, 7, 1, 4, 21, 22, 10, 9, 1, 4, 22, 12, 0, 10, 1, 6, 12, 22, 21, 18, 17, 14, 1, 0 }; struct lwo LWO_ElbowBolts = { 288, /* number of points */ ElbowBolts_PNTS, ElbowBolts_normals, ElbowBolts_POLS, 0L }; static const GLfloat ElbowCoins_PNTS[] = { 0, -0.52, -0.5, 0.097545, -0.52, -0.490393, 0.191342, -0.52, -0.46194, 0.277785, -0.52, -0.415735, 0.353553, -0.52, -0.353553, 0.415735, -0.52, -0.277785, 0.46194, -0.52, -0.191342, 0.490393, -0.52, -0.097545, 0.5, -0.52, 0, 0.490393, -0.52, 0.097545, 0.46194, -0.52, 0.191342, 0.415735, -0.52, 0.277785, 0.353553, -0.52, 0.353553, 0.277785, -0.52, 0.415735, 0.191342, -0.52, 0.46194, 0.097545, -0.52, 0.490393, 0, -0.52, 0.5, -0.097545, -0.52, 0.490393, -0.191342, -0.52, 0.46194, -0.277785, -0.52, 0.415735, -0.353553, -0.52, 0.353553, -0.415735, -0.52, 0.277785, -0.46194, -0.52, 0.191342, -0.490393, -0.52, 0.097545, -0.5, -0.52, 0, -0.490393, -0.52, -0.097545, -0.46194, -0.52, -0.191342, -0.415735, -0.52, -0.277785, -0.353553, -0.52, -0.353553, -0.277785, -0.52, -0.415735, -0.191342, -0.52, -0.46194, -0.097545, -0.52, -0.490393, 0, -0.6, -0.5, 0.097545, -0.6, -0.490393, 0.191342, -0.6, -0.46194, 0.277785, -0.6, -0.415735, 0.353553, -0.6, -0.353553, 0.415735, -0.6, -0.277785, 0.46194, -0.6, -0.191342, 0.490393, -0.6, -0.097545, 0.5, -0.6, 0, 0.490393, -0.6, 0.097545, 0.46194, -0.6, 0.191342, 0.415735, -0.6, 0.277785, 0.353553, -0.6, 0.353553, 0.277785, -0.6, 0.415735, 0.191342, -0.6, 0.46194, 0.097545, -0.6, 0.490393, 0, -0.6, 0.5, -0.097545, -0.6, 0.490393, -0.191342, -0.6, 0.46194, -0.277785, -0.6, 0.415735, -0.353553, -0.6, 0.353553, -0.415735, -0.6, 0.277785, -0.46194, -0.6, 0.191342, -0.490393, -0.6, 0.097545, -0.5, -0.6, 0, -0.490393, -0.6, -0.097545, -0.46194, -0.6, -0.191342, -0.415735, -0.6, -0.277785, -0.353553, -0.6, -0.353553, -0.277785, -0.6, -0.415735, -0.191342, -0.6, -0.46194, -0.097545, -0.6, -0.490393, 0, 0.5, -0.52, 0.097545, 0.490393, -0.52, 0.191342, 0.46194, -0.52, 0.277785, 0.415735, -0.52, 0.353553, 0.353553, -0.52, 0.415735, 0.277785, -0.52, 0.46194, 0.191342, -0.52, 0.490393, 0.097545, -0.52, 0.5, 0, -0.52, 0.490393, -0.097545, -0.52, 0.46194, -0.191342, -0.52, 0.415735, -0.277785, -0.52, 0.353553, -0.353553, -0.52, 0.277785, -0.415735, -0.52, 0.191342, -0.46194, -0.52, 0.097545, -0.490393, -0.52, 0, -0.5, -0.52, -0.097545, -0.490393, -0.52, -0.191342, -0.46194, -0.52, -0.277785, -0.415735, -0.52, -0.353553, -0.353553, -0.52, -0.415735, -0.277785, -0.52, -0.46194, -0.191342, -0.52, -0.490393, -0.097545, -0.52, -0.5, 0, -0.52, -0.490393, 0.097545, -0.52, -0.46194, 0.191342, -0.52, -0.415735, 0.277785, -0.52, -0.353553, 0.353553, -0.52, -0.277785, 0.415735, -0.52, -0.191342, 0.46194, -0.52, -0.097545, 0.490393, -0.52, 0, 0.5, -0.6, 0.097545, 0.490393, -0.6, 0.191342, 0.46194, -0.6, 0.277785, 0.415735, -0.6, 0.353553, 0.353553, -0.6, 0.415735, 0.277785, -0.6, 0.46194, 0.191342, -0.6, 0.490393, 0.097545, -0.6, 0.5, 0, -0.6, 0.490393, -0.097545, -0.6, 0.46194, -0.191342, -0.6, 0.415735, -0.277785, -0.6, 0.353553, -0.353553, -0.6, 0.277785, -0.415735, -0.6, 0.191342, -0.46194, -0.6, 0.097545, -0.490393, -0.6, 0, -0.5, -0.6, -0.097545, -0.490393, -0.6, -0.191342, -0.46194, -0.6, -0.277785, -0.415735, -0.6, -0.353553, -0.353553, -0.6, -0.415735, -0.277785, -0.6, -0.46194, -0.191342, -0.6, -0.490393, -0.097545, -0.6, -0.5, 0, -0.6, -0.490393, 0.097545, -0.6, -0.46194, 0.191342, -0.6, -0.415735, 0.277785, -0.6, -0.353553, 0.353553, -0.6, -0.277785, 0.415735, -0.6, -0.191342, 0.46194, -0.6, -0.097545, 0.490393, -0.6, }; static const GLfloat ElbowCoins_normals[] = { 0, 0, 1, 0.098017, 0.995185, 0, 0.290285, 0.95694, 0, 0.471397, 0.881921, 0, 0.634393, 0.77301, 0, 0.77301, 0.634393, 0, 0.881921, 0.471397, 0, 0.95694, 0.290285, 0, 0.995185, 0.098017, 0, 0.995185, -0.098017, 0, 0.95694, -0.290285, 0, 0.881921, -0.471397, 0, 0.77301, -0.634393, 0, 0.634393, -0.77301, 0, 0.471397, -0.881921, 0, 0.290285, -0.95694, 0, 0.098017, -0.995185, 0, -0.098017, -0.995185, 0, -0.290285, -0.95694, 0, -0.471397, -0.881921, 0, -0.634393, -0.77301, 0, -0.77301, -0.634393, 0, -0.881921, -0.471397, 0, -0.95694, -0.290285, 0, -0.995185, -0.098017, 0, -0.995185, 0.098017, 0, -0.95694, 0.290285, 0, -0.881921, 0.471397, 0, -0.77301, 0.634393, 0, -0.634393, 0.77301, 0, -0.471397, 0.881921, 0, -0.290285, 0.95694, 0, -0.098017, 0.995185, 0, 0, 0, -1, 0, 1, 0, 0.098017, 0, -0.995185, 0.290285, 0, -0.95694, 0.471397, 0, -0.881921, 0.634393, 0, -0.77301, 0.77301, 0, -0.634393, 0.881921, 0, -0.471397, 0.95694, 0, -0.290285, 0.995185, 0, -0.098017, 0.995185, 0, 0.098017, 0.95694, 0, 0.290285, 0.881921, 0, 0.471397, 0.77301, 0, 0.634393, 0.634393, 0, 0.77301, 0.471397, 0, 0.881921, 0.290285, 0, 0.95694, 0.098017, 0, 0.995185, -0.098017, 0, 0.995185, -0.290285, 0, 0.95694, -0.471397, 0, 0.881921, -0.634393, 0, 0.77301, -0.77301, 0, 0.634393, -0.881921, 0, 0.471397, -0.95694, 0, 0.290285, -0.995185, 0, 0.098017, -0.995185, 0, -0.098017, -0.95694, 0, -0.290285, -0.881921, 0, -0.471397, -0.77301, 0, -0.634393, -0.634393, 0, -0.77301, -0.471397, 0, -0.881921, -0.290285, 0, -0.95694, -0.098017, 0, -0.995185, 0, -1, 0, }; static const unsigned short int ElbowCoins_POLS[] = { 32, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 1, 4, 96, 97, 65, 64, 1, 4, 97, 98, 66, 65, 1, 4, 98, 99, 67, 66, 1, 4, 99, 100, 68, 67, 1, 4, 100, 101, 69, 68, 1, 4, 101, 102, 70, 69, 1, 4, 102, 103, 71, 70, 1, 4, 103, 104, 72, 71, 1, 4, 104, 105, 73, 72, 1, 4, 105, 106, 74, 73, 1, 4, 106, 107, 75, 74, 1, 4, 107, 108, 76, 75, 1, 4, 108, 109, 77, 76, 1, 4, 109, 110, 78, 77, 1, 4, 110, 111, 79, 78, 1, 4, 111, 112, 80, 79, 1, 4, 112, 113, 81, 80, 1, 4, 113, 114, 82, 81, 1, 4, 114, 115, 83, 82, 1, 4, 115, 116, 84, 83, 1, 4, 116, 117, 85, 84, 1, 4, 117, 118, 86, 85, 1, 4, 118, 119, 87, 86, 1, 4, 119, 120, 88, 87, 1, 4, 120, 121, 89, 88, 1, 4, 121, 122, 90, 89, 1, 4, 122, 123, 91, 90, 1, 4, 123, 124, 92, 91, 1, 4, 124, 125, 93, 92, 1, 4, 125, 126, 94, 93, 1, 4, 126, 127, 95, 94, 1, 4, 127, 96, 64, 95, 1, 32, 96, 127, 126, 125, 124, 123, 122, 121, 120, 119, 118, 117, 116, 115, 114, 113, 112, 111, 110, 109, 108, 107, 106, 105, 104, 103, 102, 101, 100, 99, 98, 97, 1, 32, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 1, 4, 32, 33, 1, 0, 1, 4, 33, 34, 2, 1, 1, 4, 34, 35, 3, 2, 1, 4, 35, 36, 4, 3, 1, 4, 36, 37, 5, 4, 1, 4, 37, 38, 6, 5, 1, 4, 38, 39, 7, 6, 1, 4, 39, 40, 8, 7, 1, 4, 40, 41, 9, 8, 1, 4, 41, 42, 10, 9, 1, 4, 42, 43, 11, 10, 1, 4, 43, 44, 12, 11, 1, 4, 44, 45, 13, 12, 1, 4, 45, 46, 14, 13, 1, 4, 46, 47, 15, 14, 1, 4, 47, 48, 16, 15, 1, 4, 48, 49, 17, 16, 1, 4, 49, 50, 18, 17, 1, 4, 50, 51, 19, 18, 1, 4, 51, 52, 20, 19, 1, 4, 52, 53, 21, 20, 1, 4, 53, 54, 22, 21, 1, 4, 54, 55, 23, 22, 1, 4, 55, 56, 24, 23, 1, 4, 56, 57, 25, 24, 1, 4, 57, 58, 26, 25, 1, 4, 58, 59, 27, 26, 1, 4, 59, 60, 28, 27, 1, 4, 60, 61, 29, 28, 1, 4, 61, 62, 30, 29, 1, 4, 62, 63, 31, 30, 1, 4, 63, 32, 0, 31, 1, 32, 32, 63, 62, 61, 60, 59, 58, 57, 56, 55, 54, 53, 52, 51, 50, 49, 48, 47, 46, 45, 44, 43, 42, 41, 40, 39, 38, 37, 36, 35, 34, 33, 1, 0 }; struct lwo LWO_ElbowCoins = { 128, /* number of points */ ElbowCoins_PNTS, ElbowCoins_normals, ElbowCoins_POLS, 0L }; #endif /* USE_GL */ /* End of pipeobjs.c */ xscreensaver-5.36/hacks/glx/pipes.c000644 000767 000024 00000105046 12707240772 017323 0ustar00jwzstaff000000 000000 /* -*- Mode: C; tab-width: 4 -*- */ /* pipes --- 3D selfbuiding pipe system */ #if 0 static const char sccsid[] = "@(#)pipes.c 4.07 97/11/24 xlockmore"; #endif /*- * Permission to use, copy, modify, and distribute this software and its * documentation for any purpose and without fee is hereby granted, * provided that the above copyright notice appear in all copies and that * both that copyright notice and this permission notice appear in * supporting documentation. * * This file is provided AS IS with no warranties of any kind. The author * shall have no liability with respect to the infringement of copyrights, * trade secrets or any patents by this file or any part thereof. In no * event will the author be liable for any lost revenue or profits or * other special, indirect and consequential damages. * * This program was inspired on a WindowsNT(R)'s screen saver. It was written * from scratch and it was not based on any other source code. * * ========================================================================== * The routine myElbow is derivated from the doughnut routine from the MesaGL * library (more especifically the Mesaaux library) written by Brian Paul. * ========================================================================== * * Thanks goes to Brian Paul for making it possible and inexpensive to use * OpenGL at home. * * Since I'm not a native English speaker, my apologies for any grammatical * mistake. * * My e-mail address is * m-vianna@usa.net * 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" \ "*wireframe: False \n" \ "*suppressRotationAnimation: True\n" \ # define refresh_pipes 0 # include "xlockmore.h" /* from the xscreensaver distribution */ #else /* !STANDALONE */ # include "xlock.h" /* from the xlockmore distribution */ #endif /* !STANDALONE */ #ifdef USE_GL #ifdef HAVE_JWXYZ # include "jwxyz.h" #else # include # include # include #endif #ifdef HAVE_JWZGLES # include "jwzgles.h" #endif /* HAVE_JWZGLES */ #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 NofSysTypes 3 static int factory; static Bool fisheye, tightturns, rotatepipes; static XrmOptionDescRec opts[] = { {"-factory", ".pipes.factory", XrmoptionSepArg, 0}, {"-fisheye", ".pipes.fisheye", XrmoptionNoArg, "on"}, {"+fisheye", ".pipes.fisheye", XrmoptionNoArg, "off"}, {"-tightturns", ".pipes.tightturns", XrmoptionNoArg, "on"}, {"+tightturns", ".pipes.tightturns", XrmoptionNoArg, "off"}, {"-rotatepipes", ".pipes.rotatepipes", XrmoptionNoArg, "on"}, {"+rotatepipes", ".pipes.rotatepipes", XrmoptionNoArg, "off"}, }; static argtype vars[] = { {&factory, "factory", "Factory", DEF_FACTORY, t_Int}, {&fisheye, "fisheye", "Fisheye", DEF_FISHEYE, t_Bool}, {&tightturns, "tightturns", "Tightturns", DEF_TIGHTTURNS, t_Bool}, {&rotatepipes, "rotatepipes", "Rotatepipes", DEF_ROTATEPIPES, t_Bool}, }; static OptionStruct desc[] = { {"-factory num", "how much extra equipment in pipes (0 for none)"}, {"-/+fisheye", "turn on/off zoomed-in view of pipes"}, {"-/+tightturns", "turn on/off tight turns"}, {"-/+rotatepipes", "turn on/off pipe system rotation per screenful"}, }; ENTRYPOINT ModeSpecOpt pipes_opts = {sizeof opts / sizeof opts[0], opts, sizeof vars / sizeof vars[0], vars, desc}; #ifdef USE_MODULES ModStruct pipes_description = {"pipes", "init_pipes", "draw_pipes", "release_pipes", "draw_pipes", "change_pipes", NULL, &pipes_opts, 1000, 2, 5, 500, 4, 1.0, "", "Shows a selfbuilding pipe system", 0, NULL}; #endif #define Scale4Window 0.1 #define one_third 0.3333333333333333333 #define dirNone -1 #define dirUP 0 #define dirDOWN 1 #define dirLEFT 2 #define dirRIGHT 3 #define dirNEAR 4 #define dirFAR 5 #define HCELLS 33 #define VCELLS 25 #define DEFINEDCOLORS 7 #define elbowradius 0.5 /*************************************************************************/ typedef struct { int flip; int Cells[HCELLS][VCELLS][HCELLS]; int usedcolors[DEFINEDCOLORS]; int directions[6]; int ndirections; int nowdir, olddir; int system_number; int counter; int PX, PY, PZ; int number_of_systems; int system_type; int system_length; int turncounter; Window window; const float *system_color; GLfloat initial_rotation; GLuint valve, bolts, betweenbolts, elbowbolts, elbowcoins; GLuint guagehead, guageface, guagedial, guageconnector, teapot; int teapot_polys; 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; extern struct lwo LWO_GuageHead, LWO_GuageFace, LWO_GuageDial, LWO_GuageConnector; extern struct lwo LWO_ElbowBolts, LWO_ElbowCoins; static const float front_shininess[] = {60.0}; static const float front_specular[] = {0.7, 0.7, 0.7, 1.0}; static const float ambient0[] = {0.4, 0.4, 0.4, 1.0}; static const float diffuse0[] = {1.0, 1.0, 1.0, 1.0}; static const float ambient1[] = {0.2, 0.2, 0.2, 1.0}; static const float diffuse1[] = {0.5, 0.5, 0.5, 1.0}; static const float position0[] = {1.0, 1.0, 1.0, 0.0}; static const float position1[] = {-1.0, -1.0, 1.0, 0.0}; static const float lmodel_ambient[] = {0.5, 0.5, 0.5, 1.0}; static const float lmodel_twoside[] = {GL_TRUE}; static const float MaterialRed[] = {0.7, 0.0, 0.0, 1.0}; static const float MaterialGreen[] = {0.1, 0.5, 0.2, 1.0}; static const float MaterialBlue[] = {0.0, 0.0, 0.7, 1.0}; static const float MaterialCyan[] = {0.2, 0.5, 0.7, 1.0}; static const float MaterialYellow[] = {0.7, 0.7, 0.0, 1.0}; static const float MaterialMagenta[] = {0.6, 0.2, 0.5, 1.0}; static const float MaterialWhite[] = {0.7, 0.7, 0.7, 1.0}; static const float MaterialGray[] = {0.2, 0.2, 0.2, 1.0}; 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 */ /*dirLEFT = 00000010 */ /*dirRIGHT = 00000011 */ /*dirNEAR = 00000100 */ /*dirFAR = 00000101 */ if (!(direction & 4)) { glRotatef(90.0, (direction & 2) ? 0.0 : 1.0, (direction & 2) ? 1.0 : 0.0, 0.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); mi->polygon_count++; } glEnd(); } static void mySphere(float radius, Bool wire) { #if 0 GLUquadricObj *quadObj; quadObj = gluNewQuadric(); gluQuadricDrawStyle(quadObj, (GLenum) GLU_FILL); gluSphere(quadObj, radius, 16, 16); gluDeleteQuadric(quadObj); #else glPushMatrix(); glScalef (radius, radius, radius); glRotatef (90, 1, 0, 0); unit_sphere (16, 16, wire); glPopMatrix(); #endif } static void myElbow(ModeInfo * mi, int bolted) { 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 int i, j; GLfloat p0[3], p1[3], p2[3], p3[3]; GLfloat n0[3], n1[3], n2[3], n3[3]; GLfloat COSphi, COSphi1, COStheta, COStheta1; GLfloat _SINtheta, _SINtheta1; for (i = 0; i <= rings / 4; i++) { GLfloat theta, theta1; theta = (GLfloat) i *2.0 * M_PI / rings; theta1 = (GLfloat) (i + 1) * 2.0 * M_PI / rings; for (j = 0; j < nsides; j++) { GLfloat phi, phi1; phi = (GLfloat) j *2.0 * M_PI / nsides; phi1 = (GLfloat) (j + 1) * 2.0 * M_PI / nsides; p0[0] = (COStheta = cos(theta)) * (R + r * (COSphi = cos(phi))); p0[1] = (_SINtheta = -sin(theta)) * (R + r * COSphi); p1[0] = (COStheta1 = cos(theta1)) * (R + r * COSphi); p1[1] = (_SINtheta1 = -sin(theta1)) * (R + r * COSphi); p2[0] = COStheta1 * (R + r * (COSphi1 = cos(phi1))); p2[1] = _SINtheta1 * (R + r * COSphi1); p3[0] = COStheta * (R + r * COSphi1); p3[1] = _SINtheta * (R + r * COSphi1); n0[0] = COStheta * COSphi; n0[1] = _SINtheta * COSphi; n1[0] = COStheta1 * COSphi; n1[1] = _SINtheta1 * COSphi; n2[0] = COStheta1 * COSphi1; n2[1] = _SINtheta1 * COSphi1; n3[0] = COStheta * COSphi1; n3[1] = _SINtheta * COSphi1; p0[2] = p1[2] = r * (n0[2] = n1[2] = sin(phi)); p2[2] = p3[2] = r * (n2[2] = n3[2] = sin(phi1)); glBegin(wire ? GL_LINE_LOOP : GL_QUADS); glNormal3fv(n3); glVertex3fv(p3); glNormal3fv(n2); glVertex3fv(p2); glNormal3fv(n1); glVertex3fv(p1); glNormal3fv(n0); glVertex3fv(p0); mi->polygon_count++; glEnd(); } } if (factory > 0 && bolted) { /* Bolt the elbow onto the pipe system */ glFrontFace(GL_CW); glPushMatrix(); glRotatef(90.0, 0.0, 0.0, -1.0); glRotatef(90.0, 0.0, 1.0, 0.0); glTranslatef(0.0, one_third, one_third); glCallList(pp->elbowcoins); mi->polygon_count += LWO_ElbowCoins.num_pnts/3; glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, MaterialGray); glCallList(pp->elbowbolts); mi->polygon_count += LWO_ElbowBolts.num_pnts/3; glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, pp->system_color); glPopMatrix(); glFrontFace(GL_CCW); } #undef r #undef R #undef nsides #undef rings } static void FindNeighbors(ModeInfo * mi) { pipesstruct *pp = &pipes[MI_SCREEN(mi)]; pp->ndirections = 0; pp->directions[dirUP] = (!pp->Cells[pp->PX][pp->PY + 1][pp->PZ]) ? 1 : 0; pp->ndirections += pp->directions[dirUP]; pp->directions[dirDOWN] = (!pp->Cells[pp->PX][pp->PY - 1][pp->PZ]) ? 1 : 0; pp->ndirections += pp->directions[dirDOWN]; pp->directions[dirLEFT] = (!pp->Cells[pp->PX - 1][pp->PY][pp->PZ]) ? 1 : 0; pp->ndirections += pp->directions[dirLEFT]; pp->directions[dirRIGHT] = (!pp->Cells[pp->PX + 1][pp->PY][pp->PZ]) ? 1 : 0; pp->ndirections += pp->directions[dirRIGHT]; pp->directions[dirFAR] = (!pp->Cells[pp->PX][pp->PY][pp->PZ - 1]) ? 1 : 0; pp->ndirections += pp->directions[dirFAR]; pp->directions[dirNEAR] = (!pp->Cells[pp->PX][pp->PY][pp->PZ + 1]) ? 1 : 0; pp->ndirections += pp->directions[dirNEAR]; } static int SelectNeighbor(ModeInfo * mi) { pipesstruct *pp = &pipes[MI_SCREEN(mi)]; int dirlist[6]; int i, j; for (i = 0, j = 0; i < 6; i++) { if (pp->directions[i]) { dirlist[j] = i; j++; } } return dirlist[NRAND(pp->ndirections)]; } static void MakeValve(ModeInfo * mi, int newdir) { pipesstruct *pp = &pipes[MI_SCREEN(mi)]; /* There is a glPopMatrix() right after this subroutine returns. */ switch (newdir) { case dirUP: case dirDOWN: glRotatef(90.0, 1.0, 0.0, 0.0); glRotatef(NRAND(3) * 90.0, 0.0, 0.0, 1.0); break; case dirLEFT: case dirRIGHT: glRotatef(90.0, 0.0, -1.0, 0.0); glRotatef((NRAND(3) * 90.0) - 90.0, 0.0, 0.0, 1.0); break; case dirNEAR: case dirFAR: glRotatef(NRAND(4) * 90.0, 0.0, 0.0, 1.0); break; } glFrontFace(GL_CW); glCallList(pp->betweenbolts); mi->polygon_count += LWO_PipeBetweenBolts.num_pnts/3; glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, MaterialGray); glCallList(pp->bolts); mi->polygon_count += LWO_Bolts3D.num_pnts/3; if (!MI_IS_MONO(mi)) { if (pp->system_color == MaterialRed) { glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, NRAND(2) ? MaterialYellow : MaterialBlue); } else if (pp->system_color == MaterialBlue) { glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, NRAND(2) ? MaterialRed : MaterialYellow); } else if (pp->system_color == MaterialYellow) { glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, NRAND(2) ? MaterialBlue : MaterialRed); } else { switch ((NRAND(3))) { case 0: glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, MaterialRed); break; case 1: glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, MaterialBlue); break; case 2: glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, MaterialYellow); } } } glRotatef((GLfloat) (NRAND(90)), 1.0, 0.0, 0.0); glCallList(pp->valve); mi->polygon_count += LWO_BigValve.num_pnts/3; glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, pp->system_color); glFrontFace(GL_CCW); } static int MakeGuage(ModeInfo * mi, int newdir) { pipesstruct *pp = &pipes[MI_SCREEN(mi)]; /* Can't have a guage on a vertical pipe. */ if ((newdir == dirUP) || (newdir == dirDOWN)) return (0); /* Is there space above this pipe for a guage? */ if (!pp->directions[dirUP]) return (0); /* Yes! Mark the space as used. */ pp->Cells[pp->PX][pp->PY + 1][pp->PZ] = 1; glFrontFace(GL_CW); glPushMatrix(); if ((newdir == dirLEFT) || (newdir == dirRIGHT)) glRotatef(90.0, 0.0, 1.0, 0.0); glCallList(pp->betweenbolts); mi->polygon_count += LWO_PipeBetweenBolts.num_pnts/3; glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, MaterialGray); glCallList(pp->bolts); mi->polygon_count += LWO_Bolts3D.num_pnts/3; glPopMatrix(); glCallList(pp->guageconnector); mi->polygon_count += LWO_GuageConnector.num_pnts/3; glPushMatrix(); glTranslatef(0.0, 1.33333, 0.0); /* Do not change the above to 1 + ONE_THIRD, because */ /* the object really is centered on 1.3333300000. */ glRotatef(NRAND(270) + 45.0, 0.0, 0.0, -1.0); /* Random rotation for the dial. I love it. */ glCallList(pp->guagedial); mi->polygon_count += LWO_GuageDial.num_pnts/3; glPopMatrix(); glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, pp->system_color); glCallList(pp->guagehead); mi->polygon_count += LWO_GuageHead.num_pnts/3; /* GuageFace is drawn last, in case of low-res depth buffers. */ glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, MaterialWhite); glCallList(pp->guageface); mi->polygon_count += LWO_GuageFace.num_pnts/3; glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, pp->system_color); glFrontFace(GL_CCW); return (1); } static GLuint build_teapot(ModeInfo *mi) { pipesstruct *pp = &pipes[MI_SCREEN(mi)]; GLuint list = glGenLists(1); if (!list) return 0; glNewList(list, GL_COMPILE); pp->teapot_polys = unit_teapot (12, MI_IS_WIREFRAME(mi)); glEndList(); return list; } static void MakeTeapot(ModeInfo * mi, int newdir) { pipesstruct *pp = &pipes[MI_SCREEN(mi)]; switch (newdir) { case dirUP: case dirDOWN: glRotatef(90.0, 1.0, 0.0, 0.0); glRotatef(NRAND(3) * 90.0, 0.0, 0.0, 1.0); break; case dirLEFT: case dirRIGHT: glRotatef(90.0, 0.0, -1.0, 0.0); glRotatef((NRAND(3) * 90.0) - 90.0, 0.0, 0.0, 1.0); break; case dirNEAR: case dirFAR: glRotatef(NRAND(4) * 90.0, 0.0, 0.0, 1.0); break; } glCallList(pp->teapot); mi->polygon_count += pp->teapot_polys; glFrontFace(GL_CCW); } static void MakeShape(ModeInfo * mi, int newdir) { int n = NRAND(100); if (n < 50) { if (!MakeGuage(mi, newdir)) MakeTube(mi, newdir); } else if (n < 98) { MakeValve(mi, newdir); } else { MakeTeapot(mi,newdir); } } static void pinit(ModeInfo * mi, int zera) { pipesstruct *pp = &pipes[MI_SCREEN(mi)]; int X, Y, Z; if (zera) { pp->system_number = 1; glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); (void) memset(pp->Cells, 0, sizeof (pp->Cells)); for (X = 0; X < HCELLS; X++) { for (Y = 0; Y < VCELLS; Y++) { pp->Cells[X][Y][0] = 1; pp->Cells[X][Y][HCELLS - 1] = 1; pp->Cells[0][Y][X] = 1; pp->Cells[HCELLS - 1][Y][X] = 1; } } for (X = 0; X < HCELLS; X++) { for (Z = 0; Z < HCELLS; Z++) { pp->Cells[X][0][Z] = 1; pp->Cells[X][VCELLS - 1][Z] = 1; } } (void) memset(pp->usedcolors, 0, sizeof (pp->usedcolors)); } pp->counter = 0; pp->turncounter = 0; if (!MI_IS_MONO(mi)) { int collist[DEFINEDCOLORS]; int i, j, lower = 1000; /* Avoid repeating colors on the same screen unless necessary */ for (i = 0; i < DEFINEDCOLORS; i++) { if (lower > pp->usedcolors[i]) lower = pp->usedcolors[i]; } for (i = 0, j = 0; i < DEFINEDCOLORS; i++) { if (pp->usedcolors[i] == lower) { collist[j] = i; j++; } } i = collist[NRAND(j)]; pp->usedcolors[i]++; switch (i) { case 0: pp->system_color = MaterialRed; break; case 1: pp->system_color = MaterialGreen; break; case 2: pp->system_color = MaterialBlue; break; case 3: pp->system_color = MaterialCyan; break; case 4: pp->system_color = MaterialYellow; break; case 5: pp->system_color = MaterialMagenta; break; case 6: pp->system_color = MaterialWhite; break; } } else { pp->system_color = MaterialGray; } do { pp->PX = NRAND((HCELLS - 1)) + 1; pp->PY = NRAND((VCELLS - 1)) + 1; pp->PZ = NRAND((HCELLS - 1)) + 1; } while (pp->Cells[pp->PX][pp->PY][pp->PZ] || (pp->Cells[pp->PX + 1][pp->PY][pp->PZ] && pp->Cells[pp->PX - 1][pp->PY][pp->PZ] && pp->Cells[pp->PX][pp->PY + 1][pp->PZ] && pp->Cells[pp->PX][pp->PY - 1][pp->PZ] && pp->Cells[pp->PX][pp->PY][pp->PZ + 1] && pp->Cells[pp->PX][pp->PY][pp->PZ - 1])); pp->Cells[pp->PX][pp->PY][pp->PZ] = 1; pp->olddir = dirNone; FindNeighbors(mi); pp->nowdir = SelectNeighbor(mi); } ENTRYPOINT void reshape_pipes(ModeInfo * mi, int width, int height) { glViewport(0, 0, width, (GLint) height); glMatrixMode(GL_PROJECTION); glLoadIdentity(); /*glFrustum(-1.0, 1.0, -1.0, 1.0, 5.0, 15.0); */ gluPerspective(65.0, (GLfloat) width / (GLfloat) height, 0.1, 20.0); glMatrixMode(GL_MODELVIEW); glClear(GL_COLOR_BUFFER_BIT); } ENTRYPOINT Bool pipes_handle_event (ModeInfo *mi, XEvent *event) { pipesstruct *pp = &pipes[MI_SCREEN(mi)]; if (gltrackball_event_handler (event, pp->trackball, MI_WIDTH (mi), MI_HEIGHT (mi), &pp->button_down_p)) return True; else if (screenhack_event_helper (MI_DISPLAY(mi), MI_WINDOW(mi), event)) { pp->fadeout = 100; return True; } return False; } static void generate_system (ModeInfo *); ENTRYPOINT void init_pipes (ModeInfo * mi) { int screen = MI_SCREEN(mi); pipesstruct *pp; if (pipes == NULL) { if ((pipes = (pipesstruct *) calloc(MI_NUM_SCREENS(mi), sizeof (pipesstruct))) == NULL) return; } pp = &pipes[screen]; pp->window = MI_WINDOW(mi); if ((pp->glx_context = init_GL(mi)) != NULL) { reshape_pipes(mi, MI_WIDTH(mi), MI_HEIGHT(mi)); if (rotatepipes) pp->initial_rotation = NRAND(180); /* jwz */ else pp->initial_rotation = -10.0; pinit(mi, 1); if (factory > 0) { pp->valve = BuildLWO(MI_IS_WIREFRAME(mi), &LWO_BigValve); pp->bolts = BuildLWO(MI_IS_WIREFRAME(mi), &LWO_Bolts3D); pp->betweenbolts = BuildLWO(MI_IS_WIREFRAME(mi), &LWO_PipeBetweenBolts); pp->elbowbolts = BuildLWO(MI_IS_WIREFRAME(mi), &LWO_ElbowBolts); pp->elbowcoins = BuildLWO(MI_IS_WIREFRAME(mi), &LWO_ElbowCoins); pp->guagehead = BuildLWO(MI_IS_WIREFRAME(mi), &LWO_GuageHead); pp->guageface = BuildLWO(MI_IS_WIREFRAME(mi), &LWO_GuageFace); pp->guagedial = BuildLWO(MI_IS_WIREFRAME(mi), &LWO_GuageDial); pp->guageconnector = BuildLWO(MI_IS_WIREFRAME(mi), &LWO_GuageConnector); pp->teapot = build_teapot(mi); } /* else they are all 0, thanks to calloc(). */ if (MI_COUNT(mi) < 1 || MI_COUNT(mi) > NofSysTypes + 1) { pp->system_type = NRAND(NofSysTypes) + 1; } else { pp->system_type = MI_COUNT(mi); } if (MI_CYCLES(mi) > 0 && MI_CYCLES(mi) < 11) { pp->number_of_systems = MI_CYCLES(mi); } else { pp->number_of_systems = 5; } if (MI_SIZE(mi) < 10) { pp->system_length = 10; } else if (MI_SIZE(mi) > 1000) { pp->system_length = 1000; } else { pp->system_length = MI_SIZE(mi); } } else { MI_CLEARWINDOW(mi); } pp->trackball = gltrackball_init (True); generate_system (mi); } static GLuint get_dlist (ModeInfo *mi, int i) { 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]; } static void generate_system (ModeInfo * mi) { pipesstruct *pp = &pipes[MI_SCREEN(mi)]; Bool wire = MI_IS_WIREFRAME(mi); int newdir; int OPX, OPY, OPZ; Bool reset_p = False; pp->system_index = 0; pp->system_size = 0; pinit (mi, 1); while (1) { glNewList (get_dlist (mi, pp->system_size++), GL_COMPILE); mi->polygon_count = 0; glPushMatrix(); FindNeighbors(mi); 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) { glPushMatrix(); glTranslatef((pp->PX - 16) / 3.0 * 4.0, (pp->PY - 12) / 3.0 * 4.0, (pp->PZ - 16) / 3.0 * 4.0); mySphere(0.6, wire); glPopMatrix(); } /* Check for stop conditions */ if (pp->ndirections == 0 || pp->counter > pp->system_length) { glPushMatrix(); glTranslatef((pp->PX - 16) / 3.0 * 4.0, (pp->PY - 12) / 3.0 * 4.0, (pp->PZ - 16) / 3.0 * 4.0); /* Finish the system with another sphere */ mySphere(0.6, wire); glPopMatrix(); /* 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) { reset_p = True; } else { pinit(mi, 0); } goto NEXT; } pp->counter++; pp->turncounter++; /* Do will the direction change? if so, determine the new one */ newdir = pp->nowdir; if (!pp->directions[newdir]) { /* cannot proceed in the current direction */ newdir = SelectNeighbor(mi); } else { if (tightturns) { /* random change (20% chance) */ if ((pp->counter > 1) && (NRAND(100) < 20)) { newdir = SelectNeighbor(mi); } } else { /* Chance to turn increases after each length of pipe drawn */ if ((pp->counter > 1) && NRAND(50) < NRAND(pp->turncounter + 1)) { newdir = SelectNeighbor(mi); pp->turncounter = 0; } } } /* Has the direction changed? */ if (newdir == pp->nowdir) { /* If not, draw the cell's center pipe */ glPushMatrix(); glTranslatef((pp->PX - 16) / 3.0 * 4.0, (pp->PY - 12) / 3.0 * 4.0, (pp->PZ - 16) / 3.0 * 4.0); /* Chance of factory shape here, if enabled. */ if ((pp->counter > 1) && (NRAND(100) < factory)) { MakeShape(mi, newdir); } else { MakeTube(mi, newdir); } glPopMatrix(); } else { /* If so, draw the cell's center elbow/sphere */ int sysT = pp->system_type; if (sysT == NofSysTypes + 1) { sysT = ((pp->system_number - 1) % NofSysTypes) + 1; } glPushMatrix(); switch (sysT) { case 1: glTranslatef((pp->PX - 16) / 3.0 * 4.0, (pp->PY - 12) / 3.0 * 4.0, (pp->PZ - 16) / 3.0 * 4.0); mySphere(elbowradius, wire); break; case 2: case 3: switch (pp->nowdir) { case dirUP: switch (newdir) { case dirLEFT: glTranslatef((pp->PX - 16) / 3.0 * 4.0 - (one_third), (pp->PY - 12) / 3.0 * 4.0 - (one_third), (pp->PZ - 16) / 3.0 * 4.0); glRotatef(180.0, 1.0, 0.0, 0.0); break; case dirRIGHT: glTranslatef((pp->PX - 16) / 3.0 * 4.0 + (one_third), (pp->PY - 12) / 3.0 * 4.0 - (one_third), (pp->PZ - 16) / 3.0 * 4.0); glRotatef(180.0, 1.0, 0.0, 0.0); glRotatef(180.0, 0.0, 1.0, 0.0); break; case dirFAR: glTranslatef((pp->PX - 16) / 3.0 * 4.0, (pp->PY - 12) / 3.0 * 4.0 - (one_third), (pp->PZ - 16) / 3.0 * 4.0 - (one_third)); glRotatef(90.0, 0.0, 1.0, 0.0); glRotatef(180.0, 0.0, 0.0, 1.0); break; case dirNEAR: glTranslatef((pp->PX - 16) / 3.0 * 4.0, (pp->PY - 12) / 3.0 * 4.0 - (one_third), (pp->PZ - 16) / 3.0 * 4.0 + (one_third)); glRotatef(90.0, 0.0, 1.0, 0.0); glRotatef(180.0, 1.0, 0.0, 0.0); break; } break; case dirDOWN: switch (newdir) { case dirLEFT: glTranslatef((pp->PX - 16) / 3.0 * 4.0 - (one_third), (pp->PY - 12) / 3.0 * 4.0 + (one_third), (pp->PZ - 16) / 3.0 * 4.0); break; case dirRIGHT: glTranslatef((pp->PX - 16) / 3.0 * 4.0 + (one_third), (pp->PY - 12) / 3.0 * 4.0 + (one_third), (pp->PZ - 16) / 3.0 * 4.0); glRotatef(180.0, 0.0, 1.0, 0.0); break; case dirFAR: glTranslatef((pp->PX - 16) / 3.0 * 4.0, (pp->PY - 12) / 3.0 * 4.0 + (one_third), (pp->PZ - 16) / 3.0 * 4.0 - (one_third)); glRotatef(270.0, 0.0, 1.0, 0.0); break; case dirNEAR: glTranslatef((pp->PX - 16) / 3.0 * 4.0, (pp->PY - 12) / 3.0 * 4.0 + (one_third), (pp->PZ - 16) / 3.0 * 4.0 + (one_third)); glRotatef(90.0, 0.0, 1.0, 0.0); break; } break; case dirLEFT: switch (newdir) { case dirUP: glTranslatef((pp->PX - 16) / 3.0 * 4.0 + (one_third), (pp->PY - 12) / 3.0 * 4.0 + (one_third), (pp->PZ - 16) / 3.0 * 4.0); glRotatef(180.0, 0.0, 1.0, 0.0); break; case dirDOWN: glTranslatef((pp->PX - 16) / 3.0 * 4.0 + (one_third), (pp->PY - 12) / 3.0 * 4.0 - (one_third), (pp->PZ - 16) / 3.0 * 4.0); glRotatef(180.0, 1.0, 0.0, 0.0); glRotatef(180.0, 0.0, 1.0, 0.0); break; case dirFAR: glTranslatef((pp->PX - 16) / 3.0 * 4.0 + (one_third), (pp->PY - 12) / 3.0 * 4.0, (pp->PZ - 16) / 3.0 * 4.0 - (one_third)); glRotatef(270.0, 1.0, 0.0, 0.0); glRotatef(180.0, 0.0, 1.0, 0.0); break; case dirNEAR: glTranslatef((pp->PX - 16) / 3.0 * 4.0 + (one_third), (pp->PY - 12) / 3.0 * 4.0, (pp->PZ - 16) / 3.0 * 4.0 + (one_third)); glRotatef(270.0, 1.0, 0.0, 0.0); glRotatef(180.0, 0.0, 0.0, 1.0); break; } break; case dirRIGHT: switch (newdir) { case dirUP: glTranslatef((pp->PX - 16) / 3.0 * 4.0 - (one_third), (pp->PY - 12) / 3.0 * 4.0 + (one_third), (pp->PZ - 16) / 3.0 * 4.0); break; case dirDOWN: glTranslatef((pp->PX - 16) / 3.0 * 4.0 - (one_third), (pp->PY - 12) / 3.0 * 4.0 - (one_third), (pp->PZ - 16) / 3.0 * 4.0); glRotatef(180.0, 1.0, 0.0, 0.0); break; case dirFAR: glTranslatef((pp->PX - 16) / 3.0 * 4.0 - (one_third), (pp->PY - 12) / 3.0 * 4.0, (pp->PZ - 16) / 3.0 * 4.0 - (one_third)); glRotatef(270.0, 1.0, 0.0, 0.0); break; case dirNEAR: glTranslatef((pp->PX - 16) / 3.0 * 4.0 - (one_third), (pp->PY - 12) / 3.0 * 4.0, (pp->PZ - 16) / 3.0 * 4.0 + (one_third)); glRotatef(90.0, 1.0, 0.0, 0.0); break; } break; case dirNEAR: switch (newdir) { case dirLEFT: glTranslatef((pp->PX - 16) / 3.0 * 4.0 - (one_third), (pp->PY - 12) / 3.0 * 4.0, (pp->PZ - 16) / 3.0 * 4.0 - (one_third)); glRotatef(270.0, 1.0, 0.0, 0.0); break; case dirRIGHT: glTranslatef((pp->PX - 16) / 3.0 * 4.0 + (one_third), (pp->PY - 12) / 3.0 * 4.0, (pp->PZ - 16) / 3.0 * 4.0 - (one_third)); glRotatef(270.0, 1.0, 0.0, 0.0); glRotatef(180.0, 0.0, 1.0, 0.0); break; case dirUP: glTranslatef((pp->PX - 16) / 3.0 * 4.0, (pp->PY - 12) / 3.0 * 4.0 + (one_third), (pp->PZ - 16) / 3.0 * 4.0 - (one_third)); glRotatef(270.0, 0.0, 1.0, 0.0); break; case dirDOWN: glTranslatef((pp->PX - 16) / 3.0 * 4.0, (pp->PY - 12) / 3.0 * 4.0 - (one_third), (pp->PZ - 16) / 3.0 * 4.0 - (one_third)); glRotatef(90.0, 0.0, 1.0, 0.0); glRotatef(180.0, 0.0, 0.0, 1.0); break; } break; case dirFAR: switch (newdir) { case dirUP: glTranslatef((pp->PX - 16) / 3.0 * 4.0, (pp->PY - 12) / 3.0 * 4.0 + (one_third), (pp->PZ - 16) / 3.0 * 4.0 + (one_third)); glRotatef(90.0, 0.0, 1.0, 0.0); break; case dirDOWN: glTranslatef((pp->PX - 16) / 3.0 * 4.0, (pp->PY - 12) / 3.0 * 4.0 - (one_third), (pp->PZ - 16) / 3.0 * 4.0 + (one_third)); glRotatef(90.0, 0.0, 1.0, 0.0); glRotatef(180.0, 1.0, 0.0, 0.0); break; case dirLEFT: glTranslatef((pp->PX - 16) / 3.0 * 4.0 - (one_third), (pp->PY - 12) / 3.0 * 4.0, (pp->PZ - 16) / 3.0 * 4.0 + (one_third)); glRotatef(90.0, 1.0, 0.0, 0.0); break; case dirRIGHT: glTranslatef((pp->PX - 16) / 3.0 * 4.0 + (one_third), (pp->PY - 12) / 3.0 * 4.0, (pp->PZ - 16) / 3.0 * 4.0 + (one_third)); glRotatef(270.0, 1.0, 0.0, 0.0); glRotatef(180.0, 0.0, 0.0, 1.0); break; } break; } myElbow(mi, (sysT == 2)); break; } glPopMatrix(); } OPX = pp->PX; OPY = pp->PY; OPZ = pp->PZ; pp->olddir = pp->nowdir; pp->nowdir = newdir; switch (pp->nowdir) { case dirUP: pp->PY++; break; case dirDOWN: pp->PY--; break; case dirLEFT: pp->PX--; break; case dirRIGHT: pp->PX++; break; case dirNEAR: pp->PZ++; break; case dirFAR: pp->PZ--; break; } pp->Cells[pp->PX][pp->PY][pp->PZ] = 1; /* Cells'face pipe */ 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; } } 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); gltrackball_rotate (pp->trackball); 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(); glXSwapBuffers(display, window); } #ifndef STANDALONE ENTRYPOINT void change_pipes (ModeInfo * mi) { pipesstruct *pp = &pipes[MI_SCREEN(mi)]; if (!pp->glx_context) return; glXMakeCurrent(MI_DISPLAY(mi), MI_WINDOW(mi), *(pp->glx_context)); pinit(mi, 1); } #endif /* !STANDALONE */ ENTRYPOINT void release_pipes (ModeInfo * mi) { if (pipes != NULL) { int screen; for (screen = 0; screen < MI_NUM_SCREENS(mi); screen++) { pipesstruct *pp = &pipes[screen]; if (pp->glx_context) { /* Display lists MUST be freed while their glXContext is current. */ glXMakeCurrent(MI_DISPLAY(mi), pp->window, *(pp->glx_context)); if (pp->valve) glDeleteLists(pp->valve, 1); if (pp->bolts) glDeleteLists(pp->bolts, 1); if (pp->betweenbolts) glDeleteLists(pp->betweenbolts, 1); if (pp->elbowbolts) glDeleteLists(pp->elbowbolts, 1); if (pp->elbowcoins) glDeleteLists(pp->elbowcoins, 1); if (pp->guagehead) glDeleteLists(pp->guagehead, 1); if (pp->guageface) glDeleteLists(pp->guageface, 1); if (pp->guagedial) glDeleteLists(pp->guagedial, 1); if (pp->guageconnector) 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); } } } (void) free((void *) pipes); pipes = NULL; } FreeAllGL(mi); } XSCREENSAVER_MODULE ("Pipes", pipes) #endif xscreensaver-5.36/hacks/glx/rubik.c000644 000767 000024 00000203512 12710313222 017275 0ustar00jwzstaff000000 000000 /* -*- Mode: C; tab-width: 4 -*- */ /* rubik --- Shows an auto-solving Rubik's cube */ #if 0 static const char sccsid[] = "@(#)rubik.c 5.01 2001/03/01 xlockmore"; #endif /*- * Permission to use, copy, modify, and distribute this software and its * documentation for any purpose and without fee is hereby granted, * provided that the above copyright notice appear in all copies and that * both that copyright notice and this permission notice appear in * supporting documentation. * * This file is provided AS IS with no warranties of any kind. The author * shall have no liability with respect to the infringement of copyrights, * trade secrets or any patents by this file or any part thereof. In no * event will the author be liable for any lost revenue or profits or * other special, indirect and consequential damages. * * This mode shows an auto-solving rubik's cube "puzzle". If somebody * intends to make a game or something based on this code, please let me * know first, my e-mail address is provided in this comment. Marcelo. * * Thanks goes also to Brian Paul for making it possible and inexpensive * to use OpenGL at home. * * Since I'm not a native English speaker, my apologies for any grammatical * mistakes. * * My e-mail address is * mfvianna@centroin.com.br * * Marcelo F. Vianna (Jul-31-1997) * * Revision History: * 05-Apr-2002: Removed all gllist uses (fix some bug with nvidia driver) * 01-Mar-2001: Added FPS stuff - Eric Lassauge * 01-Nov-2000: Allocation checks * 27-Apr-1999: LxMxN stuff added. * 26-Sep-1998: Added some more movement (the cube does not stay in the screen * center anymore. Also fixed the scale problem immediately after * shuffling when the puzzle is solved. * 08-Aug-1997: Now has some internals from xrubik by David Bagley * This should make it easier to add features. * 02-Aug-1997: Now behaves more like puzzle.c: first show the cube being * shuffled and then being solved. A mode specific option was * added: * "+/-hideshuffling" to provide the original behavior (in which * only the solution is shown). * The color labels corners are now rounded. * Optimized the cubit() routine using glLists. * 01-Aug-1997: Shuffling now avoids movements that undoes the previous * movement and three consecutive identical moves (which is * pretty stupid). * improved the "cycles" option in replacement of David's hack, * now rp->anglestep is a GLfloat, so this option selects the * "exact" number of frames that a rotation (movement) takes to * complete. * 30-Jul-1997: Initial release, there is no algorithm to solve the puzzle, * instead, it randomly shuffle the cube and then make the * movements in the reverse order. * The mode was written in 1 day (I got sick and had the day off). * There was not much to do since I could not leave home... :) */ /*- * Color labels mapping: * ===================== * * +-----------+ * |0--> | * || | * |v TOP(0) | * | | * | 8| * +-----------+-----------+-----------+ * |0--> |0--> |0--> | * || || || | * |v LEFT(1) |v FRONT(2) |v RIGHT(3) | * | | | | * | 8| 8| 8| * +-----------+-----------+-----------+ * |0--> | * || | * |v BOTTOM(4)| * | | * | 8| * +-----------+ +---+---+---+ * |0--> | | 0 | 1 | 2 | * || | |--xxxxx(N)-+ * |v BACK(5) | | 3 | 4 | 5 | * | | +---+---+---+ * | 8| | 6 | 7 | 8 | * +-----------+ +---+---+---+ * * Map to 3d * FRONT => X, Y * BACK => X, Y * LEFT => Z, Y * RIGHT => Z, Y * TOP => X, Z * BOTTOM => X, Z */ #ifdef STANDALONE # define MODE_rubik # define DEFAULTS "*delay: 20000 \n" \ "*count: -30 \n" \ "*showFPS: False \n" \ "*cycles: 20 \n" \ "*size: -6 \n" \ "*suppressRotationAnimation: True\n" \ # define refresh_rubik 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" #define DEF_SIZEY "0" #define DEF_SIZEZ "0" #define DEF_HIDESHUFFLING "False" static int sizex; static int sizey; static int sizez; static Bool hideshuffling; static XrmOptionDescRec opts[] = { {"-sizex", ".rubik.sizex", XrmoptionSepArg, 0}, {"-sizey", ".rubik.sizey", XrmoptionSepArg, 0}, {"-sizez", ".rubik.sizez", XrmoptionSepArg, 0}, {"-hideshuffling", ".rubik.hideshuffling", XrmoptionNoArg, "on"}, {"+hideshuffling", ".rubik.hideshuffling", XrmoptionNoArg, "off"} }; static argtype vars[] = { {&sizex, "sizex", "SizeX", DEF_SIZEX, t_Int}, {&sizey, "sizey", "SizeY", DEF_SIZEY, t_Int}, {&sizez, "sizez", "SizeZ", DEF_SIZEZ, t_Int}, {&hideshuffling, "hideshuffling", "Hideshuffling", DEF_HIDESHUFFLING, t_Bool} }; static OptionStruct desc[] = { {"-sizex num", "number of cubies along x axis (overrides size)"}, {"-sizey num", "number of cubies along y axis (overrides size)"}, {"-sizez num", "number of cubies along z axis (overrides size)"}, {"-/+hideshuffling", "turn on/off hidden shuffle phase"} }; ENTRYPOINT ModeSpecOpt rubik_opts = {sizeof opts / sizeof opts[0], opts, sizeof vars / sizeof vars[0], vars, desc}; #ifdef USE_MODULES ModStruct rubik_description = {"rubik", "init_rubik", "draw_rubik", "release_rubik", "draw_rubik", "change_rubik", (char *) NULL, &rubik_opts, 10000, -30, 5, -6, 64, 1.0, "", "Shows an auto-solving Rubik's Cube", 0, NULL}; #endif #define VectMul(X1,Y1,Z1,X2,Y2,Z2) (Y1)*(Z2)-(Z1)*(Y2),(Z1)*(X2)-(X1)*(Z2),(X1)*(Y2)-(Y1)*(X2) #define sqr(A) ((A)*(A)) #ifndef Pi #define Pi M_PI #endif #define ACTION_SOLVE 1 #define ACTION_SHUFFLE 0 #define DELAY_AFTER_SHUFFLING 5 #define DELAY_AFTER_SOLVING 20 /*************************************************************************/ #define MINSIZE 2 #define MAXSIZEX (rp->sizex) #define MAXSIZEY (rp->sizey) #define MAXSIZEZ (rp->sizez) #define AVSIZE ((rp->sizex+rp->sizey+rp->sizez)/3.0) /* Use of this should be minimized */ #define MAXMAXSIZE (MAX(MAXSIZEX,MAX(MAXSIZEY,MAXSIZEZ))) #define MAXSIZEXY (MAXSIZEX*MAXSIZEY) #define MAXSIZEYZ (MAXSIZEY*MAXSIZEZ) #define MAXSIZEZX (MAXSIZEZ*MAXSIZEX) #define LASTX (MAXSIZEX-1) #define LASTY (MAXSIZEY-1) #define LASTZ (MAXSIZEZ-1) /* These are not likely to change but... */ #define FIRSTX 0 #define FIRSTY 0 #define FIRSTZ 0 #define Scale4Window (0.9/AVSIZE) #define Scale4Iconic (2.1/AVSIZE) #define MAXORIENT 4 /* Number of orientations of a square */ #define MAXFACES 6 /* Number of faces */ /* Directions relative to the face of a cubie */ #define TOP 0 #define RIGHT 1 #define BOTTOM 2 #define LEFT 3 #define CW (MAXORIENT+1) #define HALF (MAXORIENT+2) #define CCW (2*MAXORIENT-1) #define TOP_FACE 0 #define LEFT_FACE 1 #define FRONT_FACE 2 #define RIGHT_FACE 3 #define BOTTOM_FACE 4 #define BACK_FACE 5 #define NO_FACE (MAXFACES) #define NO_ROTATION (2*MAXORIENT) #define NO_DEPTH MAXMAXSIZE #define REVX(a) (MAXSIZEX - a - 1) #define REVY(a) (MAXSIZEY - a - 1) #define REVZ(a) (MAXSIZEZ - a - 1) #define CUBELEN 0.50 #define CUBEROUND (CUBELEN-0.05) #define STICKERLONG (CUBEROUND-0.05) #define STICKERSHORT (STICKERLONG-0.05) #define STICKERDEPTH (CUBELEN+0.01) #define ObjCubit 0 #define MaxObj 1 typedef struct _RubikLoc { int face; int rotation; /* Not used yet */ } RubikLoc; typedef struct _RubikRowNext { int face, direction, sideFace; } RubikRowNext; typedef struct _RubikMove { int face, direction; int position; } RubikMove; typedef struct _RubikSlice { int face, rotation; int depth; } RubikSlice; /*- * Pick a face and a direction on face the next face and orientation * is then known. */ static const RubikLoc slideNextRow[MAXFACES][MAXORIENT] = { { {5, TOP}, {3, RIGHT}, {2, TOP}, {1, LEFT}}, { {0, RIGHT}, {2, TOP}, {4, LEFT}, {5, BOTTOM}}, { {0, TOP}, {3, TOP}, {4, TOP}, {1, TOP}}, { {0, LEFT}, {5, BOTTOM}, {4, RIGHT}, {2, TOP}}, { {2, TOP}, {3, LEFT}, {5, TOP}, {1, RIGHT}}, { {4, TOP}, {3, BOTTOM}, {0, TOP}, {1, BOTTOM}} }; /*- * Examine cubie 0 on each face, its 4 movements (well only 2 since the * other 2 will be opposites) and translate it into slice movements). * CW = DEEP Depth CCW == SHALLOW Depth with reference to faces 0, 1, and 2 */ static const RubikLoc rotateSlice[MAXFACES][MAXORIENT / 2] = { { {1, CCW}, {2, CW}, }, { {2, CW}, {0, CCW}, }, { {1, CCW}, {0, CCW}, }, { {2, CCW}, {0, CCW}, }, { {1, CCW}, {2, CCW}, }, { {1, CCW}, {0, CW}, } }; /*- * Rotate face clockwise by a number of orients, then the top of the * face then points to this face */ static const int rowToRotate[MAXFACES][MAXORIENT] = { {3, 2, 1, 5}, {2, 4, 5, 0}, {3, 4, 1, 0}, {5, 4, 2, 0}, {3, 5, 1, 2}, {3, 0, 1, 4} }; /* * This translates a clockwise move to something more manageable */ static const RubikRowNext rotateToRow[MAXFACES] = /*CW to min face */ { {1, LEFT, TOP}, {0, BOTTOM, RIGHT}, {0, RIGHT, BOTTOM}, {0, TOP, LEFT}, {1, RIGHT, BOTTOM}, {0, LEFT, TOP} }; typedef struct { GLint WindH, WindW; GLfloat step; RubikMove *moves; int storedmoves; int degreeTurn; int shufflingmoves; int sizex, sizey, sizez; float avsize, avsizeSq; int action; int done; GLfloat anglestep; RubikLoc *cubeLoc[MAXFACES]; RubikLoc *rowLoc[MAXORIENT]; RubikMove movement; 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}; static const float front_specular[] = {0.7, 0.7, 0.7, 1.0}; static const float ambient[] = {0.0, 0.0, 0.0, 1.0}; static const float diffuse[] = {1.0, 1.0, 1.0, 1.0}; static const float position0[] = {1.0, 1.0, 1.0, 0.0}; static const float position1[] = {-1.0, -1.0, 1.0, 0.0}; static const float lmodel_ambient[] = {0.5, 0.5, 0.5, 1.0}; static const float lmodel_twoside[] = {GL_TRUE}; static const float MaterialRed[] = {0.5, 0.0, 0.0, 1.0}; static const float MaterialGreen[] = {0.0, 0.5, 0.0, 1.0}; static const float MaterialBlue[] = {0.0, 0.0, 0.5, 1.0}; static const float MaterialYellow[] = {0.7, 0.7, 0.0, 1.0}; static const float MaterialOrange[] = {0.9, 0.45, 0.36, 1.0}; #if 0 static float MaterialMagenta[] = {0.7, 0.0, 0.7, 1.0}; static float MaterialCyan[] = {0.0, 0.7, 0.7, 1.0}; #endif static const float MaterialWhite[] = {0.8, 0.8, 0.8, 1.0}; static const float MaterialGray[] = {0.2, 0.2, 0.2, 1.0}; static const float MaterialGray3[] = {0.3, 0.3, 0.3, 1.0}; static const float MaterialGray4[] = {0.4, 0.4, 0.4, 1.0}; static const float MaterialGray5[] = {0.5, 0.5, 0.5, 1.0}; static const float MaterialGray6[] = {0.6, 0.6, 0.6, 1.0}; static const float MaterialGray7[] = {0.7, 0.7, 0.7, 1.0}; static rubikstruct *rubik = (rubikstruct *) NULL; static void pickcolor(int C, int mono) { switch (C) { case TOP_FACE: if (mono) glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, MaterialGray3); else glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, MaterialRed); break; case LEFT_FACE: if (mono) glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, MaterialGray6); else glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, MaterialYellow); break; case FRONT_FACE: glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, MaterialWhite); break; case RIGHT_FACE: if (mono) glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, MaterialGray4); else glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, MaterialGreen); break; case BOTTOM_FACE: if (mono) glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, MaterialGray7); else glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, MaterialOrange); break; case BACK_FACE: if (mono) glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, MaterialGray5); else glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, MaterialBlue); break; #if 0 glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, MaterialCyan); glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, MaterialMagenta); #endif } } static void faceSizes(rubikstruct * rp, int face, int * sizeOfRow, int * sizeOfColumn) { switch (face) { case 0: /* TOP */ case 4: /* BOTTOM */ *sizeOfRow = MAXSIZEX; *sizeOfColumn = MAXSIZEZ; break; case 1: /* LEFT */ case 3: /* RIGHT */ *sizeOfRow = MAXSIZEZ; *sizeOfColumn = MAXSIZEY; break; case 2: /* FRONT */ case 5: /* BACK */ *sizeOfRow = MAXSIZEX; *sizeOfColumn = MAXSIZEY; break; default: abort(); } } static Bool checkFaceSquare(rubikstruct * rp, int face) { int sizeOfRow, sizeOfColumn; faceSizes(rp, face, &sizeOfRow, &sizeOfColumn); return (sizeOfRow == sizeOfColumn); /* Cubes can be made square with a 4x2 face where 90 degree turns * should be permitted but that is kind of complicated for me. * This can be done in 2 ways where the side of the cubies are * the same size and one where one side (the side with half the * number of cubies) is twice the size of the other. The first is * complicated because faces of cubies can go under other faces. * The second way is similar to "banded cubes" where scotch tape * restricts the moves of some cubes. Here you have to keep track * of the restrictions and show banded cubies graphically as one * cube. */ } static int sizeFace(rubikstruct * rp, int face) { int sizeOfRow, sizeOfColumn; faceSizes(rp, face, &sizeOfRow, &sizeOfColumn); return (sizeOfRow * sizeOfColumn); } static int sizeRow(rubikstruct * rp, int face) { int sizeOfRow, sizeOfColumn; /* sizeOfColumn not used */ faceSizes(rp, face, &sizeOfRow, &sizeOfColumn); return sizeOfRow; } static Bool draw_stickerless_cubit(rubikstruct *rp, unsigned long *polysP) { glBegin(GL_QUADS); glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, MaterialGray); /* Put sticker here */ glNormal3f(0.00, 0.00, 1.00); glVertex3f(-CUBEROUND, -CUBEROUND, CUBELEN); glVertex3f(CUBEROUND, -CUBEROUND, CUBELEN); glVertex3f(CUBEROUND, CUBEROUND, CUBELEN); glVertex3f(-CUBEROUND, CUBEROUND, CUBELEN); (*polysP)++; glNormal3f(0.00, 0.00, -1.00); glVertex3f(-CUBEROUND, CUBEROUND, -CUBELEN); glVertex3f(CUBEROUND, CUBEROUND, -CUBELEN); glVertex3f(CUBEROUND, -CUBEROUND, -CUBELEN); glVertex3f(-CUBEROUND, -CUBEROUND, -CUBELEN); (*polysP)++; glNormal3f(-1.00, 0.00, 0.00); glVertex3f(-CUBELEN, -CUBEROUND, CUBEROUND); glVertex3f(-CUBELEN, CUBEROUND, CUBEROUND); glVertex3f(-CUBELEN, CUBEROUND, -CUBEROUND); glVertex3f(-CUBELEN, -CUBEROUND, -CUBEROUND); (*polysP)++; glNormal3f(1.00, 0.00, 0.00); glVertex3f(CUBELEN, -CUBEROUND, -CUBEROUND); glVertex3f(CUBELEN, CUBEROUND, -CUBEROUND); glVertex3f(CUBELEN, CUBEROUND, CUBEROUND); glVertex3f(CUBELEN, -CUBEROUND, CUBEROUND); (*polysP)++; glNormal3f(0.00, -1.00, 0.00); glVertex3f(CUBEROUND, -CUBELEN, -CUBEROUND); glVertex3f(CUBEROUND, -CUBELEN, CUBEROUND); glVertex3f(-CUBEROUND, -CUBELEN, CUBEROUND); glVertex3f(-CUBEROUND, -CUBELEN, -CUBEROUND); (*polysP)++; glNormal3f(0.00, 1.00, 0.00); glVertex3f(-CUBEROUND, CUBELEN, -CUBEROUND); glVertex3f(-CUBEROUND, CUBELEN, CUBEROUND); glVertex3f(CUBEROUND, CUBELEN, CUBEROUND); glVertex3f(CUBEROUND, CUBELEN, -CUBEROUND); (*polysP)++; /* Edges of cubit */ glNormal3f(-1.00, -1.00, 0.00); glVertex3f(-CUBEROUND, -CUBELEN, -CUBEROUND); glVertex3f(-CUBEROUND, -CUBELEN, CUBEROUND); glVertex3f(-CUBELEN, -CUBEROUND, CUBEROUND); glVertex3f(-CUBELEN, -CUBEROUND, -CUBEROUND); (*polysP)++; glNormal3f(1.00, 1.00, 0.00); glVertex3f(CUBEROUND, CUBELEN, -CUBEROUND); glVertex3f(CUBEROUND, CUBELEN, CUBEROUND); glVertex3f(CUBELEN, CUBEROUND, CUBEROUND); glVertex3f(CUBELEN, CUBEROUND, -CUBEROUND); (*polysP)++; glNormal3f(-1.00, 1.00, 0.00); glVertex3f(-CUBELEN, CUBEROUND, -CUBEROUND); glVertex3f(-CUBELEN, CUBEROUND, CUBEROUND); glVertex3f(-CUBEROUND, CUBELEN, CUBEROUND); glVertex3f(-CUBEROUND, CUBELEN, -CUBEROUND); (*polysP)++; glNormal3f(1.00, -1.00, 0.00); glVertex3f(CUBELEN, -CUBEROUND, -CUBEROUND); glVertex3f(CUBELEN, -CUBEROUND, CUBEROUND); glVertex3f(CUBEROUND, -CUBELEN, CUBEROUND); glVertex3f(CUBEROUND, -CUBELEN, -CUBEROUND); (*polysP)++; glNormal3f(0.00, -1.00, -1.00); glVertex3f(-CUBEROUND, -CUBEROUND, -CUBELEN); glVertex3f(CUBEROUND, -CUBEROUND, -CUBELEN); glVertex3f(CUBEROUND, -CUBELEN, -CUBEROUND); glVertex3f(-CUBEROUND, -CUBELEN, -CUBEROUND); (*polysP)++; glNormal3f(0.00, 1.00, 1.00); glVertex3f(-CUBEROUND, CUBEROUND, CUBELEN); glVertex3f(CUBEROUND, CUBEROUND, CUBELEN); glVertex3f(CUBEROUND, CUBELEN, CUBEROUND); glVertex3f(-CUBEROUND, CUBELEN, CUBEROUND); (*polysP)++; glNormal3f(0.00, -1.00, 1.00); glVertex3f(-CUBEROUND, -CUBELEN, CUBEROUND); glVertex3f(CUBEROUND, -CUBELEN, CUBEROUND); glVertex3f(CUBEROUND, -CUBEROUND, CUBELEN); glVertex3f(-CUBEROUND, -CUBEROUND, CUBELEN); (*polysP)++; glNormal3f(0.00, 1.00, -1.00); glVertex3f(-CUBEROUND, CUBELEN, -CUBEROUND); glVertex3f(CUBEROUND, CUBELEN, -CUBEROUND); glVertex3f(CUBEROUND, CUBEROUND, -CUBELEN); glVertex3f(-CUBEROUND, CUBEROUND, -CUBELEN); (*polysP)++; glNormal3f(-1.00, 0.00, -1.00); glVertex3f(-CUBELEN, -CUBEROUND, -CUBEROUND); glVertex3f(-CUBELEN, CUBEROUND, -CUBEROUND); glVertex3f(-CUBEROUND, CUBEROUND, -CUBELEN); glVertex3f(-CUBEROUND, -CUBEROUND, -CUBELEN); (*polysP)++; glNormal3f(1.00, 0.00, 1.00); glVertex3f(CUBELEN, -CUBEROUND, CUBEROUND); glVertex3f(CUBELEN, CUBEROUND, CUBEROUND); glVertex3f(CUBEROUND, CUBEROUND, CUBELEN); glVertex3f(CUBEROUND, -CUBEROUND, CUBELEN); (*polysP)++; glNormal3f(1.00, 0.00, -1.00); glVertex3f(CUBEROUND, -CUBEROUND, -CUBELEN); glVertex3f(CUBEROUND, CUBEROUND, -CUBELEN); glVertex3f(CUBELEN, CUBEROUND, -CUBEROUND); glVertex3f(CUBELEN, -CUBEROUND, -CUBEROUND); (*polysP)++; glNormal3f(-1.00, 0.00, 1.00); glVertex3f(-CUBEROUND, -CUBEROUND, CUBELEN); glVertex3f(-CUBEROUND, CUBEROUND, CUBELEN); glVertex3f(-CUBELEN, CUBEROUND, CUBEROUND); glVertex3f(-CUBELEN, -CUBEROUND, CUBEROUND); (*polysP)++; glEnd(); glBegin(GL_TRIANGLES); glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, MaterialGray); /* Corners of cubit */ glNormal3f(1.00, 1.00, 1.00); glVertex3f(CUBEROUND, CUBEROUND, CUBELEN); glVertex3f(CUBELEN, CUBEROUND, CUBEROUND); glVertex3f(CUBEROUND, CUBELEN, CUBEROUND); (*polysP)++; glNormal3f(-1.00, -1.00, -1.00); glVertex3f(-CUBEROUND, -CUBELEN, -CUBEROUND); glVertex3f(-CUBELEN, -CUBEROUND, -CUBEROUND); glVertex3f(-CUBEROUND, -CUBEROUND, -CUBELEN); (*polysP)++; glNormal3f(-1.00, 1.00, 1.00); glVertex3f(-CUBEROUND, CUBEROUND, CUBELEN); glVertex3f(-CUBEROUND, CUBELEN, CUBEROUND); (*polysP)++; glVertex3f(-CUBELEN, CUBEROUND, CUBEROUND); glNormal3f(1.00, -1.00, -1.00); glVertex3f(CUBELEN, -CUBEROUND, -CUBEROUND); glVertex3f(CUBEROUND, -CUBELEN, -CUBEROUND); glVertex3f(CUBEROUND, -CUBEROUND, -CUBELEN); (*polysP)++; glNormal3f(1.00, -1.00, 1.00); glVertex3f(CUBEROUND, -CUBEROUND, CUBELEN); glVertex3f(CUBEROUND, -CUBELEN, CUBEROUND); glVertex3f(CUBELEN, -CUBEROUND, CUBEROUND); (*polysP)++; glNormal3f(-1.00, 1.00, -1.00); glVertex3f(-CUBELEN, CUBEROUND, -CUBEROUND); glVertex3f(-CUBEROUND, CUBELEN, -CUBEROUND); glVertex3f(-CUBEROUND, CUBEROUND, -CUBELEN); (*polysP)++; glNormal3f(-1.00, -1.00, 1.00); glVertex3f(-CUBEROUND, -CUBEROUND, CUBELEN); glVertex3f(-CUBELEN, -CUBEROUND, CUBEROUND); glVertex3f(-CUBEROUND, -CUBELEN, CUBEROUND); (*polysP)++; glNormal3f(1.00, 1.00, -1.00); glVertex3f(CUBELEN, CUBEROUND, -CUBEROUND); glVertex3f(CUBEROUND, CUBEROUND, -CUBELEN); glVertex3f(CUBEROUND, CUBELEN, -CUBEROUND); (*polysP)++; glEnd(); return True; } static Bool draw_cubit(ModeInfo * mi, int back, int front, int left, int right, int bottom, int top, unsigned long *polysP) { rubikstruct *rp = &rubik[MI_SCREEN(mi)]; int mono = MI_IS_MONO(mi); if (!draw_stickerless_cubit(rp, polysP)) return False; if (back != NO_FACE) { glBegin(GL_POLYGON); pickcolor(back, mono); glNormal3f(0.00, 0.00, -1.00); glVertex3f(-STICKERSHORT, STICKERLONG, -STICKERDEPTH); glVertex3f(STICKERSHORT, STICKERLONG, -STICKERDEPTH); glVertex3f(STICKERLONG, STICKERSHORT, -STICKERDEPTH); glVertex3f(STICKERLONG, -STICKERSHORT, -STICKERDEPTH); glVertex3f(STICKERSHORT, -STICKERLONG, -STICKERDEPTH); glVertex3f(-STICKERSHORT, -STICKERLONG, -STICKERDEPTH); glVertex3f(-STICKERLONG, -STICKERSHORT, -STICKERDEPTH); glVertex3f(-STICKERLONG, STICKERSHORT, -STICKERDEPTH); (*polysP)++; glEnd(); } if (front != NO_FACE) { glBegin(GL_POLYGON); pickcolor(front, mono); glNormal3f(0.00, 0.00, 1.00); glVertex3f(-STICKERSHORT, -STICKERLONG, STICKERDEPTH); glVertex3f(STICKERSHORT, -STICKERLONG, STICKERDEPTH); glVertex3f(STICKERLONG, -STICKERSHORT, STICKERDEPTH); glVertex3f(STICKERLONG, STICKERSHORT, STICKERDEPTH); glVertex3f(STICKERSHORT, STICKERLONG, STICKERDEPTH); glVertex3f(-STICKERSHORT, STICKERLONG, STICKERDEPTH); glVertex3f(-STICKERLONG, STICKERSHORT, STICKERDEPTH); glVertex3f(-STICKERLONG, -STICKERSHORT, STICKERDEPTH); (*polysP)++; glEnd(); } if (left != NO_FACE) { glBegin(GL_POLYGON); pickcolor(left, mono); glNormal3f(-1.00, 0.00, 0.00); glVertex3f(-STICKERDEPTH, -STICKERSHORT, STICKERLONG); glVertex3f(-STICKERDEPTH, STICKERSHORT, STICKERLONG); glVertex3f(-STICKERDEPTH, STICKERLONG, STICKERSHORT); glVertex3f(-STICKERDEPTH, STICKERLONG, -STICKERSHORT); glVertex3f(-STICKERDEPTH, STICKERSHORT, -STICKERLONG); glVertex3f(-STICKERDEPTH, -STICKERSHORT, -STICKERLONG); glVertex3f(-STICKERDEPTH, -STICKERLONG, -STICKERSHORT); glVertex3f(-STICKERDEPTH, -STICKERLONG, STICKERSHORT); (*polysP)++; glEnd(); } if (right != NO_FACE) { glBegin(GL_POLYGON); pickcolor(right, mono); glNormal3f(1.00, 0.00, 0.00); glVertex3f(STICKERDEPTH, -STICKERSHORT, -STICKERLONG); glVertex3f(STICKERDEPTH, STICKERSHORT, -STICKERLONG); glVertex3f(STICKERDEPTH, STICKERLONG, -STICKERSHORT); glVertex3f(STICKERDEPTH, STICKERLONG, STICKERSHORT); glVertex3f(STICKERDEPTH, STICKERSHORT, STICKERLONG); glVertex3f(STICKERDEPTH, -STICKERSHORT, STICKERLONG); glVertex3f(STICKERDEPTH, -STICKERLONG, STICKERSHORT); glVertex3f(STICKERDEPTH, -STICKERLONG, -STICKERSHORT); (*polysP)++; glEnd(); } if (bottom != NO_FACE) { glBegin(GL_POLYGON); pickcolor(bottom, mono); glNormal3f(0.00, -1.00, 0.00); glVertex3f(STICKERLONG, -STICKERDEPTH, -STICKERSHORT); glVertex3f(STICKERLONG, -STICKERDEPTH, STICKERSHORT); glVertex3f(STICKERSHORT, -STICKERDEPTH, STICKERLONG); glVertex3f(-STICKERSHORT, -STICKERDEPTH, STICKERLONG); glVertex3f(-STICKERLONG, -STICKERDEPTH, STICKERSHORT); glVertex3f(-STICKERLONG, -STICKERDEPTH, -STICKERSHORT); glVertex3f(-STICKERSHORT, -STICKERDEPTH, -STICKERLONG); glVertex3f(STICKERSHORT, -STICKERDEPTH, -STICKERLONG); (*polysP)++; glEnd(); } if (top != NO_FACE) { glBegin(GL_POLYGON); pickcolor(top, mono); glNormal3f(0.00, 1.00, 0.00); glVertex3f(-STICKERLONG, STICKERDEPTH, -STICKERSHORT); glVertex3f(-STICKERLONG, STICKERDEPTH, STICKERSHORT); glVertex3f(-STICKERSHORT, STICKERDEPTH, STICKERLONG); glVertex3f(STICKERSHORT, STICKERDEPTH, STICKERLONG); glVertex3f(STICKERLONG, STICKERDEPTH, STICKERSHORT); glVertex3f(STICKERLONG, STICKERDEPTH, -STICKERSHORT); glVertex3f(STICKERSHORT, STICKERDEPTH, -STICKERLONG); glVertex3f(-STICKERSHORT, STICKERDEPTH, -STICKERLONG); (*polysP)++; glEnd(); } return True; } /* Convert move to weird general notation */ static void convertMove(rubikstruct * rp, RubikMove move, RubikSlice * slice) { RubikLoc plane; int sizeOfRow, sizeOfColumn; plane = rotateSlice[(int) move.face][move.direction % 2]; (*slice).face = plane.face; (*slice).rotation = plane.rotation; faceSizes(rp, move.face, &sizeOfRow, &sizeOfColumn); if (plane.face == 1 || /* VERTICAL */ (plane.face == 2 && (move.face == 1 || move.face == 3))) { if ((*slice).rotation == CW) (*slice).depth = sizeOfRow - 1 - move.position % sizeOfRow; else (*slice).depth = move.position % sizeOfRow; } else { /* (plane.face == 0 || *//* HORIZONTAL *//* (plane.face == 2 && (move.face == 0 || move.face == 4))) */ if ((*slice).rotation == CW) (*slice).depth = sizeOfColumn - 1 - move.position / sizeOfRow; else (*slice).depth = move.position / sizeOfRow; } /* If (*slice).depth = 0 then face 0, face 1, or face 2 moves */ if (move.direction / 2) (*slice).rotation = ((*slice).rotation == CW) ? CCW : CW; } /* Assume the size is at least 2, or its just not challenging... */ static Bool draw_cube(ModeInfo * mi) { #define S1 1 #define SX ((GLint)S1*(MAXSIZEX-1)) #define SY ((GLint)S1*(MAXSIZEY-1)) #define SZ ((GLint)S1*(MAXSIZEZ-1)) #define HALFX (((GLfloat)MAXSIZEX-1.0)/2.0) #define HALFY (((GLfloat)MAXSIZEY-1.0)/2.0) #define HALFZ (((GLfloat)MAXSIZEZ-1.0)/2.0) #define MIDX(a) (((GLfloat)(2*a-MAXSIZEX+1))/2.0) #define MIDY(a) (((GLfloat)(2*a-MAXSIZEY+1))/2.0) #define MIDZ(a) (((GLfloat)(2*a-MAXSIZEZ+1))/2.0) #define DRAW_CUBIT(mi,b,f,l,r,bm,t) if (!draw_cubit(mi,b,f,l,r,bm,t,&mi->polygon_count)) return False rubikstruct *rp = &rubik[MI_SCREEN(mi)]; RubikSlice slice; GLfloat rotatestep; int i, j, k; if (rp->movement.face == NO_FACE) { slice.face = NO_FACE; slice.rotation = NO_ROTATION; slice.depth = NO_DEPTH; } else { convertMove(rp, rp->movement, &slice); } rotatestep = (slice.rotation == CCW) ? rp->rotatestep : -rp->rotatestep; /*- * The glRotatef() routine transforms the coordinate system for every future * vertex specification (this is not so simple, but by now comprehending this * is sufficient). So if you want to rotate the inner slice, you can draw * one slice, rotate the anglestep for the centerslice, draw the inner slice, * rotate reversely and draw the other slice. * There is a sequence for drawing cubies for each axis being moved... */ switch (slice.face) { case NO_FACE: case TOP_FACE: /* BOTTOM_FACE too */ glPushMatrix(); if (slice.depth == MAXSIZEY - 1) glRotatef(rotatestep, 0, HALFY, 0); glTranslatef(-HALFX, -HALFY, -HALFZ); DRAW_CUBIT(mi, rp->cubeLoc[BACK_FACE][FIRSTX + MAXSIZEX * FIRSTY].face, NO_FACE, rp->cubeLoc[LEFT_FACE][FIRSTZ + MAXSIZEZ * LASTY].face, NO_FACE, rp->cubeLoc[BOTTOM_FACE][FIRSTX + MAXSIZEX * LASTZ].face, NO_FACE); for (k = 1; k < MAXSIZEZ - 1; k++) { glTranslatef(0, 0, S1); DRAW_CUBIT(mi, NO_FACE, NO_FACE, rp->cubeLoc[LEFT_FACE][k + MAXSIZEZ * LASTY].face, NO_FACE, rp->cubeLoc[BOTTOM_FACE][FIRSTX + MAXSIZEX * REVZ(k)].face, NO_FACE); } glTranslatef(0, 0, S1); DRAW_CUBIT(mi, NO_FACE, rp->cubeLoc[FRONT_FACE][FIRSTX + MAXSIZEX * LASTY].face, rp->cubeLoc[LEFT_FACE][LASTZ + MAXSIZEZ * LASTY].face, NO_FACE, rp->cubeLoc[BOTTOM_FACE][FIRSTX + MAXSIZEX * FIRSTZ].face, NO_FACE); for (i = 1; i < MAXSIZEX - 1; i++) { glTranslatef(S1, 0, -SZ); DRAW_CUBIT(mi, rp->cubeLoc[BACK_FACE][i + MAXSIZEX * FIRSTY].face, NO_FACE, NO_FACE, NO_FACE, rp->cubeLoc[BOTTOM_FACE][i + MAXSIZEX * LASTZ].face, NO_FACE); for (k = 1; k < MAXSIZEZ - 1; k++) { glTranslatef(0, 0, S1); DRAW_CUBIT(mi, NO_FACE, NO_FACE, NO_FACE, NO_FACE, rp->cubeLoc[BOTTOM_FACE][i + MAXSIZEX * REVZ(k)].face, NO_FACE); } glTranslatef(0, 0, S1); DRAW_CUBIT(mi, NO_FACE, rp->cubeLoc[FRONT_FACE][i + MAXSIZEX * LASTY].face, NO_FACE, NO_FACE, rp->cubeLoc[BOTTOM_FACE][i + MAXSIZEX * FIRSTZ].face, NO_FACE); } glTranslatef(S1, 0, -SZ); DRAW_CUBIT(mi, rp->cubeLoc[BACK_FACE][LASTX + MAXSIZEX * FIRSTY].face, NO_FACE, NO_FACE, rp->cubeLoc[RIGHT_FACE][LASTZ + MAXSIZEZ * LASTY].face, rp->cubeLoc[BOTTOM_FACE][LASTX + MAXSIZEX * LASTZ].face, NO_FACE); for (k = 1; k < MAXSIZEZ - 1; k++) { glTranslatef(0, 0, S1); DRAW_CUBIT(mi, NO_FACE, NO_FACE, NO_FACE, rp->cubeLoc[RIGHT_FACE][REVZ(k) + MAXSIZEZ * LASTY].face, rp->cubeLoc[BOTTOM_FACE][LASTX + MAXSIZEX * REVZ(k)].face, NO_FACE); } glTranslatef(0, 0, S1); DRAW_CUBIT(mi, NO_FACE, rp->cubeLoc[FRONT_FACE][LASTX + MAXSIZEX * LASTY].face, NO_FACE, rp->cubeLoc[RIGHT_FACE][FIRSTZ + MAXSIZEZ * LASTY].face, rp->cubeLoc[BOTTOM_FACE][LASTX + MAXSIZEX * FIRSTZ].face, NO_FACE); glPopMatrix(); for (j = 1; j < MAXSIZEY - 1; j++) { glPushMatrix(); if (slice.depth == REVY(j)) glRotatef(rotatestep, 0, HALFY, 0); glTranslatef(-HALFX, MIDY(j), -HALFZ); DRAW_CUBIT(mi, rp->cubeLoc[BACK_FACE][FIRSTX + MAXSIZEX * j].face, NO_FACE, rp->cubeLoc[LEFT_FACE][FIRSTZ + MAXSIZEZ * REVY(j)].face, NO_FACE, NO_FACE, NO_FACE); for (k = 1; k < MAXSIZEZ - 1; k++) { glTranslatef(0, 0, S1); DRAW_CUBIT(mi, NO_FACE, NO_FACE, rp->cubeLoc[LEFT_FACE][k + MAXSIZEZ * REVY(j)].face, NO_FACE, NO_FACE, NO_FACE); } glTranslatef(0, 0, S1); DRAW_CUBIT(mi, NO_FACE, rp->cubeLoc[FRONT_FACE][FIRSTX + MAXSIZEX * REVY(j)].face, rp->cubeLoc[LEFT_FACE][LASTZ + MAXSIZEZ * REVY(j)].face, NO_FACE, NO_FACE, NO_FACE); for (i = 1; i < MAXSIZEX - 1; i++) { glTranslatef(1, 0, -SZ); DRAW_CUBIT(mi, rp->cubeLoc[BACK_FACE][i + MAXSIZEX * j].face, NO_FACE, NO_FACE, NO_FACE, NO_FACE, NO_FACE); /* Center */ glTranslatef(0, 0, SZ); DRAW_CUBIT(mi, NO_FACE, rp->cubeLoc[FRONT_FACE][i + MAXSIZEX * REVY(j)].face, NO_FACE, NO_FACE, NO_FACE, NO_FACE); } glTranslatef(S1, 0, -SZ); DRAW_CUBIT(mi, rp->cubeLoc[BACK_FACE][LASTX + MAXSIZEX * j].face, NO_FACE, NO_FACE, rp->cubeLoc[RIGHT_FACE][LASTZ + MAXSIZEZ * REVY(j)].face, NO_FACE, NO_FACE); for (k = 1; k < MAXSIZEZ - 1; k++) { glTranslatef(0, 0, S1); DRAW_CUBIT(mi, NO_FACE, NO_FACE, NO_FACE, rp->cubeLoc[RIGHT_FACE][REVZ(k) + MAXSIZEZ * REVY(j)].face, NO_FACE, NO_FACE); } glTranslatef(0, 0, S1); DRAW_CUBIT(mi, NO_FACE, rp->cubeLoc[FRONT_FACE][LASTX + MAXSIZEX * REVY(j)].face, NO_FACE, rp->cubeLoc[RIGHT_FACE][FIRSTZ + MAXSIZEZ * REVY(j)].face, NO_FACE, NO_FACE); glPopMatrix(); } if (slice.depth == 0) glRotatef(rotatestep, 0, HALFY, 0); glTranslatef(-HALFX, HALFY, -HALFZ); DRAW_CUBIT(mi, rp->cubeLoc[BACK_FACE][FIRSTX + MAXSIZEX * LASTY].face, NO_FACE, rp->cubeLoc[LEFT_FACE][FIRSTZ + MAXSIZEZ * FIRSTY].face, NO_FACE, NO_FACE, rp->cubeLoc[TOP_FACE][FIRSTX + MAXSIZEX * FIRSTZ].face); for (k = 1; k < MAXSIZEZ - 1; k++) { glTranslatef(0, 0, S1); DRAW_CUBIT(mi, NO_FACE, NO_FACE, rp->cubeLoc[LEFT_FACE][k + MAXSIZEZ * FIRSTY].face, NO_FACE, NO_FACE, rp->cubeLoc[TOP_FACE][FIRSTX + MAXSIZEX * k].face); } glTranslatef(0, 0, S1); DRAW_CUBIT(mi, NO_FACE, rp->cubeLoc[FRONT_FACE][FIRSTX + MAXSIZEX * FIRSTY].face, rp->cubeLoc[LEFT_FACE][LASTZ + MAXSIZEZ * FIRSTY].face, NO_FACE, NO_FACE, rp->cubeLoc[TOP_FACE][FIRSTX + MAXSIZEX * LASTZ].face); for (i = 1; i < MAXSIZEX - 1; i++) { glTranslatef(S1, 0, -SZ); DRAW_CUBIT(mi, rp->cubeLoc[BACK_FACE][i + MAXSIZEX * LASTY].face, NO_FACE, NO_FACE, NO_FACE, NO_FACE, rp->cubeLoc[TOP_FACE][i + MAXSIZEX * FIRSTZ].face); for (k = 1; k < MAXSIZEZ - 1; k++) { glTranslatef(0, 0, S1); DRAW_CUBIT(mi, NO_FACE, NO_FACE, NO_FACE, NO_FACE, NO_FACE, rp->cubeLoc[TOP_FACE][i + MAXSIZEX * k].face); } glTranslatef(0, 0, S1); DRAW_CUBIT(mi, NO_FACE, rp->cubeLoc[FRONT_FACE][i + MAXSIZEX * FIRSTY].face, NO_FACE, NO_FACE, NO_FACE, rp->cubeLoc[TOP_FACE][i + MAXSIZEX * LASTZ].face); } glTranslatef(S1, 0, -SZ); DRAW_CUBIT(mi, rp->cubeLoc[BACK_FACE][LASTX + MAXSIZEX * LASTY].face, NO_FACE, NO_FACE, rp->cubeLoc[RIGHT_FACE][LASTZ + MAXSIZEZ * FIRSTY].face, NO_FACE, rp->cubeLoc[TOP_FACE][LASTX + MAXSIZEX * FIRSTZ].face); for (k = 1; k < MAXSIZEZ - 1; k++) { glTranslatef(0, 0, S1); DRAW_CUBIT(mi, NO_FACE, NO_FACE, NO_FACE, rp->cubeLoc[RIGHT_FACE][REVZ(k) + MAXSIZEZ * FIRSTY].face, NO_FACE, rp->cubeLoc[TOP_FACE][LASTX + MAXSIZEX * k].face); } glTranslatef(0, 0, S1); DRAW_CUBIT(mi, NO_FACE, rp->cubeLoc[FRONT_FACE][LASTX + MAXSIZEX * FIRSTY].face, NO_FACE, rp->cubeLoc[RIGHT_FACE][FIRSTZ + MAXSIZEZ * FIRSTY].face, NO_FACE, rp->cubeLoc[TOP_FACE][LASTX + MAXSIZEX * LASTZ].face); break; case LEFT_FACE: /* RIGHT_FACE too */ /* rotatestep is negative because the RIGHT face is the default here */ glPushMatrix(); if (slice.depth == 0) glRotatef(-rotatestep, HALFX, 0, 0); glTranslatef(-HALFX, -HALFY, -HALFZ); DRAW_CUBIT(mi, rp->cubeLoc[BACK_FACE][FIRSTX + MAXSIZEX * FIRSTY].face, NO_FACE, rp->cubeLoc[LEFT_FACE][FIRSTZ + MAXSIZEZ * LASTY].face, NO_FACE, rp->cubeLoc[BOTTOM_FACE][FIRSTX + MAXSIZEX * LASTZ].face, NO_FACE); for (j = 1; j < MAXSIZEY - 1; j++) { glTranslatef(0, S1, 0); DRAW_CUBIT(mi, rp->cubeLoc[BACK_FACE][FIRSTX + MAXSIZEX * j].face, NO_FACE, rp->cubeLoc[LEFT_FACE][FIRSTZ + MAXSIZEZ * REVY(j)].face, NO_FACE, NO_FACE, NO_FACE); } glTranslatef(0, S1, 0); DRAW_CUBIT(mi, rp->cubeLoc[BACK_FACE][FIRSTX + MAXSIZEX * LASTY].face, NO_FACE, rp->cubeLoc[LEFT_FACE][FIRSTZ + MAXSIZEZ * FIRSTY].face, NO_FACE, NO_FACE, rp->cubeLoc[TOP_FACE][FIRSTX + MAXSIZEX * FIRSTZ].face); for (k = 1; k < MAXSIZEZ - 1; k++) { glTranslatef(0, -SY, S1); DRAW_CUBIT(mi, NO_FACE, NO_FACE, rp->cubeLoc[LEFT_FACE][k + MAXSIZEZ * LASTY].face, NO_FACE, rp->cubeLoc[BOTTOM_FACE][FIRSTX + MAXSIZEX * REVZ(k)].face, NO_FACE); for (j = 1; j < MAXSIZEY - 1; j++) { glTranslatef(0, S1, 0); DRAW_CUBIT(mi, NO_FACE, NO_FACE, rp->cubeLoc[LEFT_FACE][k + MAXSIZEZ * REVY(j)].face, NO_FACE, NO_FACE, NO_FACE); } glTranslatef(0, S1, 0); DRAW_CUBIT(mi, NO_FACE, NO_FACE, rp->cubeLoc[LEFT_FACE][k + MAXSIZEZ * FIRSTY].face, NO_FACE, NO_FACE, rp->cubeLoc[TOP_FACE][FIRSTX + MAXSIZEX * k].face); } glTranslatef(0, -SY, S1); DRAW_CUBIT(mi, NO_FACE, rp->cubeLoc[FRONT_FACE][FIRSTX + MAXSIZEX * LASTY].face, rp->cubeLoc[LEFT_FACE][LASTZ + MAXSIZEZ * LASTY].face, NO_FACE, rp->cubeLoc[BOTTOM_FACE][FIRSTX + MAXSIZEX * FIRSTZ].face, NO_FACE); for (j = 1; j < MAXSIZEY - 1; j++) { glTranslatef(0, S1, 0); DRAW_CUBIT(mi, NO_FACE, rp->cubeLoc[FRONT_FACE][FIRSTX + MAXSIZEX * REVY(j)].face, rp->cubeLoc[LEFT_FACE][LASTZ + MAXSIZEZ * REVY(j)].face, NO_FACE, NO_FACE, NO_FACE); } glTranslatef(0, S1, 0); DRAW_CUBIT(mi, NO_FACE, rp->cubeLoc[FRONT_FACE][FIRSTX + MAXSIZEX * FIRSTY].face, rp->cubeLoc[LEFT_FACE][LASTZ + MAXSIZEZ * FIRSTY].face, NO_FACE, NO_FACE, rp->cubeLoc[TOP_FACE][FIRSTX + MAXSIZEX * LASTZ].face); glPopMatrix(); for (i = 1; i < MAXSIZEX - 1; i++) { glPushMatrix(); if (slice.depth == i) glRotatef(-rotatestep, HALFX, 0, 0); glTranslatef(MIDX(i), -HALFY, -HALFZ); DRAW_CUBIT(mi, rp->cubeLoc[BACK_FACE][i + MAXSIZEX * FIRSTY].face, NO_FACE, NO_FACE, NO_FACE, rp->cubeLoc[BOTTOM_FACE][i + MAXSIZEX * LASTZ].face, NO_FACE); for (j = 1; j < MAXSIZEY - 1; j++) { glTranslatef(0, S1, 0); DRAW_CUBIT(mi, rp->cubeLoc[BACK_FACE][i + MAXSIZEX * j].face, NO_FACE, NO_FACE, NO_FACE, NO_FACE, NO_FACE); } glTranslatef(0, S1, 0); DRAW_CUBIT(mi, rp->cubeLoc[BACK_FACE][i + MAXSIZEX * LASTY].face, NO_FACE, NO_FACE, NO_FACE, NO_FACE, rp->cubeLoc[TOP_FACE][i + MAXSIZEX * FIRSTZ].face); for (k = 1; k < MAXSIZEZ - 1; k++) { glTranslatef(0, -SY, S1); DRAW_CUBIT(mi, NO_FACE, NO_FACE, NO_FACE, NO_FACE, rp->cubeLoc[BOTTOM_FACE][i + MAXSIZEX * REVZ(k)].face, NO_FACE); /* Center */ glTranslatef(0, SY, 0); DRAW_CUBIT(mi, NO_FACE, NO_FACE, NO_FACE, NO_FACE, NO_FACE, rp->cubeLoc[TOP_FACE][i + MAXSIZEX * k].face); } glTranslatef(0, -SY, S1); DRAW_CUBIT(mi, NO_FACE, rp->cubeLoc[FRONT_FACE][i + MAXSIZEX * LASTY].face, NO_FACE, NO_FACE, rp->cubeLoc[BOTTOM_FACE][i + MAXSIZEX * FIRSTZ].face, NO_FACE); for (j = 1; j < MAXSIZEY - 1; j++) { glTranslatef(0, S1, 0); DRAW_CUBIT(mi, NO_FACE, rp->cubeLoc[FRONT_FACE][i + MAXSIZEX * REVY(j)].face, NO_FACE, NO_FACE, NO_FACE, NO_FACE); } glTranslatef(0, S1, 0); DRAW_CUBIT(mi, NO_FACE, rp->cubeLoc[FRONT_FACE][i + MAXSIZEX * FIRSTY].face, NO_FACE, NO_FACE, NO_FACE, rp->cubeLoc[TOP_FACE][i + MAXSIZEX * LASTZ].face); glPopMatrix(); } if (slice.depth == MAXSIZEX - 1) glRotatef(-rotatestep, HALFX, 0, 0); glTranslatef(HALFX, -HALFY, -HALFZ); DRAW_CUBIT(mi, rp->cubeLoc[BACK_FACE][LASTX + MAXSIZEX * FIRSTY].face, NO_FACE, NO_FACE, rp->cubeLoc[RIGHT_FACE][LASTZ + MAXSIZEZ * LASTY].face, rp->cubeLoc[BOTTOM_FACE][LASTX + MAXSIZEX * LASTZ].face, NO_FACE); for (j = 1; j < MAXSIZEY - 1; j++) { glTranslatef(0, S1, 0); DRAW_CUBIT(mi, rp->cubeLoc[BACK_FACE][LASTX + MAXSIZEX * j].face, NO_FACE, NO_FACE, rp->cubeLoc[RIGHT_FACE][LASTZ + MAXSIZEZ * REVY(j)].face, NO_FACE, NO_FACE); } glTranslatef(0, S1, 0); DRAW_CUBIT(mi, rp->cubeLoc[BACK_FACE][LASTX + MAXSIZEX * LASTY].face, NO_FACE, NO_FACE, rp->cubeLoc[RIGHT_FACE][LASTZ + MAXSIZEZ * FIRSTY].face, NO_FACE, rp->cubeLoc[TOP_FACE][LASTX + MAXSIZEX * FIRSTZ].face); for (k = 1; k < MAXSIZEZ - 1; k++) { glTranslatef(0, -SY, S1); DRAW_CUBIT(mi, NO_FACE, NO_FACE, NO_FACE, rp->cubeLoc[RIGHT_FACE][REVZ(k) + MAXSIZEZ * LASTY].face, rp->cubeLoc[BOTTOM_FACE][LASTX + MAXSIZEX * REVZ(k)].face, NO_FACE); for (j = 1; j < MAXSIZEY - 1; j++) { glTranslatef(0, S1, 0); DRAW_CUBIT(mi, NO_FACE, NO_FACE, NO_FACE, rp->cubeLoc[RIGHT_FACE][REVZ(k) + MAXSIZEZ * REVY(j)].face, NO_FACE, NO_FACE); } glTranslatef(0, S1, 0); DRAW_CUBIT(mi, NO_FACE, NO_FACE, NO_FACE, rp->cubeLoc[RIGHT_FACE][REVZ(k) + MAXSIZEZ * FIRSTY].face, NO_FACE, rp->cubeLoc[TOP_FACE][LASTX + MAXSIZEX * k].face); } glTranslatef(0, -SY, S1); DRAW_CUBIT(mi, NO_FACE, rp->cubeLoc[FRONT_FACE][LASTX + MAXSIZEX * LASTY].face, NO_FACE, rp->cubeLoc[RIGHT_FACE][FIRSTZ + MAXSIZEZ * LASTY].face, rp->cubeLoc[BOTTOM_FACE][LASTX + MAXSIZEX * FIRSTZ].face, NO_FACE); for (j = 1; j < MAXSIZEY - 1; j++) { glTranslatef(0, S1, 0); DRAW_CUBIT(mi, NO_FACE, rp->cubeLoc[FRONT_FACE][LASTX + MAXSIZEX * REVY(j)].face, NO_FACE, rp->cubeLoc[RIGHT_FACE][FIRSTZ + MAXSIZEZ * REVY(j)].face, NO_FACE, NO_FACE); } glTranslatef(0, S1, 0); DRAW_CUBIT(mi, NO_FACE, rp->cubeLoc[FRONT_FACE][LASTX + MAXSIZEX * FIRSTY].face, NO_FACE, rp->cubeLoc[RIGHT_FACE][FIRSTZ + MAXSIZEZ * FIRSTY].face, NO_FACE, rp->cubeLoc[TOP_FACE][LASTX + MAXSIZEX * LASTZ].face); break; case FRONT_FACE: /* BACK_FACE too */ glPushMatrix(); if (slice.depth == MAXSIZEZ - 1) glRotatef(rotatestep, 0, 0, HALFZ); glTranslatef(-HALFX, -HALFY, -HALFZ); DRAW_CUBIT(mi, rp->cubeLoc[BACK_FACE][FIRSTX + MAXSIZEX * FIRSTY].face, NO_FACE, rp->cubeLoc[LEFT_FACE][FIRSTZ + MAXSIZEZ * LASTY].face, NO_FACE, rp->cubeLoc[BOTTOM_FACE][FIRSTX + MAXSIZEX * LASTZ].face, NO_FACE); for (i = 1; i < MAXSIZEX - 1; i++) { glTranslatef(S1, 0, 0); DRAW_CUBIT(mi, rp->cubeLoc[BACK_FACE][i + MAXSIZEX * FIRSTY].face, NO_FACE, NO_FACE, NO_FACE, rp->cubeLoc[BOTTOM_FACE][i + MAXSIZEX * LASTZ].face, NO_FACE); } glTranslatef(S1, 0, 0); DRAW_CUBIT(mi, rp->cubeLoc[BACK_FACE][LASTX + MAXSIZEX * FIRSTY].face, NO_FACE, NO_FACE, rp->cubeLoc[RIGHT_FACE][LASTZ + MAXSIZEZ * LASTY].face, rp->cubeLoc[BOTTOM_FACE][LASTX + MAXSIZEX * LASTZ].face, NO_FACE); for (j = 1; j < MAXSIZEY - 1; j++) { glTranslatef(-SX, S1, 0); DRAW_CUBIT(mi, rp->cubeLoc[BACK_FACE][FIRSTX + MAXSIZEX * j].face, NO_FACE, rp->cubeLoc[LEFT_FACE][FIRSTZ + MAXSIZEZ * REVY(j)].face, NO_FACE, NO_FACE, NO_FACE); for (i = 1; i < MAXSIZEX - 1; i++) { glTranslatef(S1, 0, 0); DRAW_CUBIT(mi, rp->cubeLoc[BACK_FACE][i + MAXSIZEX * j].face, NO_FACE, NO_FACE, NO_FACE, NO_FACE, NO_FACE); } glTranslatef(S1, 0, 0); DRAW_CUBIT(mi, rp->cubeLoc[BACK_FACE][LASTX + MAXSIZEX * j].face, NO_FACE, NO_FACE, rp->cubeLoc[RIGHT_FACE][LASTZ + MAXSIZEZ * REVY(j)].face, NO_FACE, NO_FACE); } glTranslatef(-SX, S1, 0); DRAW_CUBIT(mi, rp->cubeLoc[BACK_FACE][FIRSTX + MAXSIZEX * LASTY].face, NO_FACE, rp->cubeLoc[LEFT_FACE][FIRSTZ + MAXSIZEZ * FIRSTY].face, NO_FACE, NO_FACE, rp->cubeLoc[TOP_FACE][FIRSTX + MAXSIZEX * FIRSTZ].face); for (i = 1; i < MAXSIZEX - 1; i++) { glTranslatef(S1, 0, 0); DRAW_CUBIT(mi, rp->cubeLoc[BACK_FACE][i + MAXSIZEX * LASTY].face, NO_FACE, NO_FACE, NO_FACE, NO_FACE, rp->cubeLoc[TOP_FACE][i + MAXSIZEX * FIRSTZ].face); } glTranslatef(S1, 0, 0); DRAW_CUBIT(mi, rp->cubeLoc[BACK_FACE][LASTX + MAXSIZEX * LASTY].face, NO_FACE, NO_FACE, rp->cubeLoc[RIGHT_FACE][LASTZ + MAXSIZEZ * FIRSTY].face, NO_FACE, rp->cubeLoc[TOP_FACE][LASTX + MAXSIZEX * FIRSTZ].face); glPopMatrix(); for (k = 1; k < MAXSIZEZ - 1; k++) { glPushMatrix(); if (slice.depth == REVZ(k)) glRotatef(rotatestep, 0, 0, HALFZ); glTranslatef(-HALFX, -HALFY, MIDZ(k)); DRAW_CUBIT(mi, NO_FACE, NO_FACE, rp->cubeLoc[LEFT_FACE][k + MAXSIZEZ * LASTY].face, NO_FACE, rp->cubeLoc[BOTTOM_FACE][FIRSTX + MAXSIZEX * REVZ(k)].face, NO_FACE); for (i = 1; i < MAXSIZEX - 1; i++) { glTranslatef(S1, 0, 0); DRAW_CUBIT(mi, NO_FACE, NO_FACE, NO_FACE, NO_FACE, rp->cubeLoc[BOTTOM_FACE][i + MAXSIZEX * REVZ(k)].face, NO_FACE); } glTranslatef(S1, 0, 0); DRAW_CUBIT(mi, NO_FACE, NO_FACE, NO_FACE, rp->cubeLoc[RIGHT_FACE][REVZ(k) + MAXSIZEZ * LASTY].face, rp->cubeLoc[BOTTOM_FACE][LASTX + MAXSIZEX * REVZ(k)].face, NO_FACE); for (j = 1; j < MAXSIZEY - 1; j++) { glTranslatef(-SX, S1, 0); DRAW_CUBIT(mi, NO_FACE, NO_FACE, rp->cubeLoc[LEFT_FACE][k + MAXSIZEZ * REVY(j)].face, NO_FACE, NO_FACE, NO_FACE); /* Center */ glTranslatef(SX, 0, 0); DRAW_CUBIT(mi, NO_FACE, NO_FACE, NO_FACE, rp->cubeLoc[RIGHT_FACE][REVZ(k) + MAXSIZEZ * REVY(j)].face, NO_FACE, NO_FACE); } glTranslatef(-SX, S1, 0); DRAW_CUBIT(mi, NO_FACE, NO_FACE, rp->cubeLoc[LEFT_FACE][k + MAXSIZEZ * FIRSTY].face, NO_FACE, NO_FACE, rp->cubeLoc[TOP_FACE][FIRSTX + MAXSIZEX * k].face); for (i = 1; i < MAXSIZEX - 1; i++) { glTranslatef(S1, 0, 0); DRAW_CUBIT(mi, NO_FACE, NO_FACE, NO_FACE, NO_FACE, NO_FACE, rp->cubeLoc[TOP_FACE][i + MAXSIZEX * k].face); } glTranslatef(S1, 0, 0); DRAW_CUBIT(mi, NO_FACE, NO_FACE, NO_FACE, rp->cubeLoc[RIGHT_FACE][REVZ(k) + MAXSIZEZ * FIRSTY].face, NO_FACE, rp->cubeLoc[TOP_FACE][LASTX + MAXSIZEX * k].face); glPopMatrix(); } if (slice.depth == 0) glRotatef(rotatestep, 0, 0, HALFZ); glTranslatef(-HALFX, -HALFY, HALFZ); DRAW_CUBIT(mi, NO_FACE, rp->cubeLoc[FRONT_FACE][FIRSTX + MAXSIZEX * LASTY].face, rp->cubeLoc[LEFT_FACE][LASTZ + MAXSIZEZ * LASTY].face, NO_FACE, rp->cubeLoc[BOTTOM_FACE][FIRSTX + MAXSIZEX * FIRSTZ].face, NO_FACE); for (i = 1; i < MAXSIZEX - 1; i++) { glTranslatef(S1, 0, 0); DRAW_CUBIT(mi, NO_FACE, rp->cubeLoc[FRONT_FACE][i + MAXSIZEX * LASTY].face, NO_FACE, NO_FACE, rp->cubeLoc[BOTTOM_FACE][i + MAXSIZEX * FIRSTZ].face, NO_FACE); } glTranslatef(S1, 0, 0); DRAW_CUBIT(mi, NO_FACE, rp->cubeLoc[FRONT_FACE][LASTX + MAXSIZEX * LASTY].face, NO_FACE, rp->cubeLoc[RIGHT_FACE][FIRSTZ + MAXSIZEZ * LASTY].face, rp->cubeLoc[BOTTOM_FACE][LASTX + MAXSIZEX * FIRSTZ].face, NO_FACE); for (j = 1; j < MAXSIZEY - 1; j++) { glTranslatef(-SX, S1, 0); DRAW_CUBIT(mi, NO_FACE, rp->cubeLoc[FRONT_FACE][FIRSTX + MAXSIZEX * REVY(j)].face, rp->cubeLoc[LEFT_FACE][LASTZ + MAXSIZEZ * REVY(j)].face, NO_FACE, NO_FACE, NO_FACE); for (i = 1; i < MAXSIZEX - 1; i++) { glTranslatef(S1, 0, 0); DRAW_CUBIT(mi, NO_FACE, rp->cubeLoc[FRONT_FACE][i + MAXSIZEX * REVY(j)].face, NO_FACE, NO_FACE, NO_FACE, NO_FACE); } glTranslatef(S1, 0, 0); DRAW_CUBIT(mi, NO_FACE, rp->cubeLoc[FRONT_FACE][LASTX + MAXSIZEX * REVY(j)].face, NO_FACE, rp->cubeLoc[RIGHT_FACE][FIRSTZ + MAXSIZEZ * REVY(j)].face, NO_FACE, NO_FACE); } glTranslatef(-SX, S1, 0); DRAW_CUBIT(mi, NO_FACE, rp->cubeLoc[FRONT_FACE][FIRSTX + MAXSIZEX * FIRSTY].face, rp->cubeLoc[LEFT_FACE][LASTZ + MAXSIZEZ * FIRSTY].face, NO_FACE, NO_FACE, rp->cubeLoc[TOP_FACE][FIRSTX + MAXSIZEX * LASTZ].face); for (i = 1; i < MAXSIZEX - 1; i++) { glTranslatef(S1, 0, 0); DRAW_CUBIT(mi, NO_FACE, rp->cubeLoc[FRONT_FACE][i + MAXSIZEX * FIRSTY].face, NO_FACE, NO_FACE, NO_FACE, rp->cubeLoc[TOP_FACE][i + MAXSIZEX * LASTZ].face); } glTranslatef(S1, 0, 0); DRAW_CUBIT(mi, NO_FACE, rp->cubeLoc[FRONT_FACE][LASTX + MAXSIZEX * FIRSTY].face, NO_FACE, rp->cubeLoc[RIGHT_FACE][FIRSTZ + MAXSIZEZ * FIRSTY].face, NO_FACE, rp->cubeLoc[TOP_FACE][LASTX + MAXSIZEX * LASTZ].face); break; } return True; #undef S1 } /* From David Bagley's xrubik. Used by permission. ;) */ static void readRC(rubikstruct * rp, int face, int dir, int h, int orient, int size) { int g, sizeOfRow; sizeOfRow = sizeRow(rp, face); if (dir == TOP || dir == BOTTOM) for (g = 0; g < size; g++) rp->rowLoc[orient][g] = rp->cubeLoc[face][g * sizeOfRow + h]; else /* dir == RIGHT || dir == LEFT */ for (g = 0; g < size; g++) rp->rowLoc[orient][g] = rp->cubeLoc[face][h * sizeOfRow + g]; } static void rotateRC(rubikstruct * rp, int rotate, int orient, int size) { int g; for (g = 0; g < size; g++) rp->rowLoc[orient][g].rotation = (rp->rowLoc[orient][g].rotation + rotate) % MAXORIENT; } static void reverseRC(rubikstruct * rp, int orient, int size) { int g; RubikLoc temp; for (g = 0; g < size / 2; g++) { temp = rp->rowLoc[orient][size - 1 - g]; rp->rowLoc[orient][size - 1 - g] = rp->rowLoc[orient][g]; rp->rowLoc[orient][g] = temp; } } static void writeRC(rubikstruct * rp, int face, int dir, int h, int orient, int size) { int g, position, sizeOfRow; sizeOfRow = sizeRow(rp, face); if (dir == TOP || dir == BOTTOM) { for (g = 0; g < size; g++) { position = g * sizeOfRow + h; rp->cubeLoc[face][position] = rp->rowLoc[orient][g]; /* DrawSquare(face, position); */ } } else { /* dir == RIGHT || dir == LEFT */ for (g = 0; g < size; g++) { position = h * sizeOfRow + g; rp->cubeLoc[face][position] = rp->rowLoc[orient][g]; /* DrawSquare(face, position); */ } } } static Bool rotateFace(rubikstruct * rp, int face, int direction) { int position, i, j, sizeOfRow, sizeOfColumn, sizeOnPlane; RubikLoc *faceLoc; faceSizes(rp, face, &sizeOfRow, &sizeOfColumn); sizeOnPlane = sizeOfRow * sizeOfColumn; if ((faceLoc = (RubikLoc *) malloc(sizeOnPlane * sizeof (RubikLoc))) == NULL) { return False; } /* Read Face */ for (position = 0; position < sizeOnPlane; position++) faceLoc[position] = rp->cubeLoc[face][position]; /* Write Face */ for (position = 0; position < sizeOnPlane; position++) { i = position % sizeOfRow; j = position / sizeOfRow; if (direction == CW) rp->cubeLoc[face][position] = faceLoc[(sizeOfRow - i - 1) * sizeOfRow + j]; else if (direction == CCW) rp->cubeLoc[face][position] = faceLoc[i * sizeOfRow + sizeOfColumn - j - 1]; else /* (direction == HALF) */ rp->cubeLoc[face][position] = faceLoc[sizeOfRow - i - 1 + (sizeOfColumn - j - 1) * sizeOfRow]; rp->cubeLoc[face][position].rotation = (rp->cubeLoc[face][position].rotation + direction - MAXORIENT) % MAXORIENT; /* DrawSquare(face, position); */ } if (faceLoc != NULL) (void) free((void *) faceLoc); return True; } /* Yeah this is big and ugly */ static void slideRC(int face, int direction, int h, int sizeOnOppAxis, int *newFace, int *newDirection, int *newH, int *rotate, Bool *reverse) { *newFace = slideNextRow[face][direction].face; *rotate = slideNextRow[face][direction].rotation; *newDirection = (*rotate + direction) % MAXORIENT; switch (*rotate) { case TOP: *newH = h; *reverse = False; break; case RIGHT: if (*newDirection == TOP || *newDirection == BOTTOM) { *newH = sizeOnOppAxis - 1 - h; *reverse = False; } else { /* *newDirection == RIGHT || *newDirection == LEFT */ *newH = h; *reverse = True; } break; case BOTTOM: *newH = sizeOnOppAxis - 1 - h; *reverse = True; break; case LEFT: if (*newDirection == TOP || *newDirection == BOTTOM) { *newH = h; *reverse = True; } else { /* *newDirection == RIGHT || *newDirection == LEFT */ *newH = sizeOnOppAxis - 1 - h; *reverse = False; } break; default: (void) printf("slideRC: rotate %d\n", *rotate); *newH = 0; *reverse = False; } } static Bool moveRubik(rubikstruct * rp, int face, int direction, int position) { int newFace, newDirection, rotate, reverse; int h, k, newH; int i, j, sizeOfRow, sizeOfColumn, sizeOnAxis, sizeOnOppAxis; faceSizes(rp, face, &sizeOfRow, &sizeOfColumn); if (direction == CW || direction == CCW) { direction = (direction == CCW) ? (rotateToRow[face].direction + 2) % MAXORIENT : rotateToRow[face].direction; if (rotateToRow[face].sideFace == RIGHT) { i = j = sizeOfColumn - 1; } else if (rotateToRow[face].sideFace == BOTTOM) { i = j = sizeOfRow - 1; } else { i = j = 0; } face = rotateToRow[face].face; position = j * sizeOfRow + i; } i = position % sizeOfRow; j = position / sizeOfRow; h = (direction == TOP || direction == BOTTOM) ? i : j; if (direction == TOP || direction == BOTTOM) { sizeOnAxis = sizeOfColumn; sizeOnOppAxis = sizeOfRow; } else { sizeOnAxis = sizeOfRow; sizeOnOppAxis = sizeOfColumn; } /* rotate sides CW or CCW or HALF) */ if (h == sizeOnOppAxis - 1) { newDirection = (direction == TOP || direction == BOTTOM) ? TOP : RIGHT; if (rp->degreeTurn == 180) { if (!rotateFace(rp, rowToRotate[face][newDirection], HALF)) return False; } else if (direction == TOP || direction == RIGHT) { if (!rotateFace(rp, rowToRotate[face][newDirection], CW)) return False; } else { /* direction == BOTTOM || direction == LEFT */ if (!rotateFace(rp, rowToRotate[face][newDirection], CCW)) return False; } } if (h == 0) { newDirection = (direction == TOP || direction == BOTTOM) ? BOTTOM : LEFT; if (rp->degreeTurn == 180) { if (!rotateFace(rp, rowToRotate[face][newDirection], HALF)) return False; } else if (direction == TOP || direction == RIGHT) { if (!rotateFace(rp, rowToRotate[face][newDirection], CCW)) return False; } else { /* direction == BOTTOM || direction == LEFT */ if (!rotateFace(rp, rowToRotate[face][newDirection], CW)) return False; } } /* Slide rows or columns */ readRC(rp, face, direction, h, 0, sizeOnAxis); if (rp->degreeTurn == 180) { int sizeOnDepthAxis; slideRC(face, direction, h, sizeOnOppAxis, &newFace, &newDirection, &newH, &rotate, &reverse); sizeOnDepthAxis = sizeFace(rp, newFace) / sizeOnOppAxis; readRC(rp, newFace, newDirection, newH, 1, sizeOnDepthAxis); rotateRC(rp, rotate, 0, sizeOnAxis); if (reverse == True) reverseRC(rp, 0, sizeOnAxis); face = newFace; direction = newDirection; h = newH; for (k = 2; k <= MAXORIENT + 1; k++) { slideRC(face, direction, h, sizeOnOppAxis, &newFace, &newDirection, &newH, &rotate, &reverse); if (k != MAXORIENT && k != MAXORIENT + 1) readRC(rp, newFace, newDirection, newH, k, (k % 2) ? sizeOnDepthAxis : sizeOnAxis); rotateRC(rp, rotate, k - 2, (k % 2) ? sizeOnDepthAxis : sizeOnAxis); if (k != MAXORIENT + 1) rotateRC(rp, rotate, k - 1, (k % 2) ? sizeOnAxis : sizeOnDepthAxis); if (reverse == True) { reverseRC(rp, k - 2, (k % 2) ? sizeOnDepthAxis : sizeOnAxis); if (k != MAXORIENT + 1) reverseRC(rp, k - 1, (k % 2) ? sizeOnAxis : sizeOnDepthAxis); } writeRC(rp, newFace, newDirection, newH, k - 2, (k % 2) ? sizeOnDepthAxis : sizeOnAxis); face = newFace; direction = newDirection; h = newH; } } else { for (k = 1; k <= MAXORIENT; k++) { slideRC(face, direction, h, sizeOnOppAxis, &newFace, &newDirection, &newH, &rotate, &reverse); if (k != MAXORIENT) readRC(rp, newFace, newDirection, newH, k, sizeOnAxis); rotateRC(rp, rotate, k - 1, sizeOnAxis); if (reverse == True) reverseRC(rp, k - 1, sizeOnAxis); writeRC(rp, newFace, newDirection, newH, k - 1, sizeOnAxis); face = newFace; direction = newDirection; h = newH; } } return True; } #ifdef DEBUG static void printCube(rubikstruct * rp) { int face, position, sizeOfRow, sizeOfColumn; for (face = 0; face < MAXFACES; face++) { faceSizes(rp, face, &sizeOfRow, &sizeOfColumn); for (position = 0; position < sizeOfRow * sizeOfColumn; position++) { (void) printf("%d %d ", rp->cubeLoc[face][position].face, rp->cubeLoc[face][position].rotation); if (!((position + 1) % sizeOfRow)) (void) printf("\n"); } (void) printf("\n"); } (void) printf("\n"); } #endif static Bool evalmovement(ModeInfo * mi, RubikMove movement) { rubikstruct *rp = &rubik[MI_SCREEN(mi)]; #ifdef DEBUG printCube(rp); #endif if (movement.face < 0 || movement.face >= MAXFACES) return True; if (!moveRubik(rp, movement.face, movement.direction, movement.position)) return False; return True; } static Bool compare_moves(rubikstruct * rp, RubikMove move1, RubikMove move2, Bool opp) { RubikSlice slice1, slice2; convertMove(rp, move1, &slice1); convertMove(rp, move2, &slice2); if (slice1.face == slice2.face && slice1.depth == slice2.depth) { if (slice1.rotation == slice2.rotation) { /* CW or CCW */ if (!opp) return True; } else { if (opp) return True; } } return False; } static Bool shuffle(ModeInfo * mi) { rubikstruct *rp = &rubik[MI_SCREEN(mi)]; int i, face, position; RubikMove move; if (sizex) i = sizex; else i = MI_SIZE(mi); if (i < -MINSIZE) i = NRAND(-i - MINSIZE + 1) + MINSIZE; else if (i < MINSIZE) i = MINSIZE; if (LRAND() % 2 && !sizey && !sizez) { /* Make normal (NxNxN) cubes more likely */ MAXSIZEX = MAXSIZEY = MAXSIZEZ = i; } else { MAXSIZEX = i; if (sizey) i = sizey; else i = MI_SIZE(mi); if (i < -MINSIZE) i = NRAND(-i - MINSIZE + 1) + MINSIZE; else if (i < MINSIZE) i = MINSIZE; if (LRAND() % 2 && !sizez) { /* Make more MxNxN more likely than LxMxN */ MAXSIZEY = MAXSIZEZ = i; } else { MAXSIZEY = i; if (sizez) i = sizez; else i = MI_SIZE(mi); if (i < -MINSIZE) i = NRAND(-i - MINSIZE + 1) + MINSIZE; else if (i < MINSIZE) i = MINSIZE; MAXSIZEZ = i; } } for (face = 0; face < MAXFACES; face++) { if (rp->cubeLoc[face] != NULL) (void) free((void *) rp->cubeLoc[face]); if ((rp->cubeLoc[face] = (RubikLoc *) malloc(sizeFace(rp, face) * sizeof (RubikLoc))) == NULL) { return False; } for (position = 0; position < sizeFace(rp, face); position++) { rp->cubeLoc[face][position].face = face; rp->cubeLoc[face][position].rotation = TOP; } } for (i = 0; i < MAXORIENT; i++) { if (rp->rowLoc[i] != NULL) (void) free((void *) rp->rowLoc[i]); /* The following is reused so make it the biggest size */ if ((rp->rowLoc[i] = (RubikLoc *) malloc(MAXMAXSIZE * sizeof (RubikLoc))) == NULL) { return False; } } rp->storedmoves = MI_COUNT(mi); if (rp->storedmoves < 0) { if (rp->moves != NULL) (void) free((void *) rp->moves); rp->moves = (RubikMove *) NULL; rp->storedmoves = NRAND(-rp->storedmoves) + 1; } if ((rp->storedmoves) && (rp->moves == NULL)) if ((rp->moves = (RubikMove *) calloc(rp->storedmoves + 1, sizeof (RubikMove))) == NULL) { return False; } if (MI_CYCLES(mi) <= 1) { rp->anglestep = 90.0; } else { rp->anglestep = 90.0 / (GLfloat) (MI_CYCLES(mi)); } for (i = 0; i < rp->storedmoves; i++) { Bool condition; do { move.face = NRAND(MAXFACES); move.direction = NRAND(MAXORIENT); /* Exclude CW and CCW, its ok */ move.position = NRAND(sizeFace(rp, move.face)); rp->degreeTurn = (checkFaceSquare(rp, rowToRotate[move.face][move.direction])) ? 90 : 180; condition = True; if (i > 0) { /* avoid immediate undoing moves */ if (compare_moves(rp, move, rp->moves[i - 1], True)) condition = False; if (rp->degreeTurn == 180 && compare_moves(rp, move, rp->moves[i - 1], False)) condition = False; } if (i > 1) /* avoid 3 consecutive identical moves */ if (compare_moves(rp, move, rp->moves[i - 1], False) && compare_moves(rp, move, rp->moves[i - 2], False)) condition = False; /* * Still some silly moves being made.... */ } while (!condition); if (hideshuffling) if (!evalmovement(mi, move)) return False; rp->moves[i] = move; } rp->VX = 0.005; if (NRAND(100) < 50) rp->VX *= -1; rp->VY = 0.005; if (NRAND(100) < 50) rp->VY *= -1; rp->movement.face = NO_FACE; rp->rotatestep = 0; rp->action = hideshuffling ? ACTION_SOLVE : ACTION_SHUFFLE; rp->shufflingmoves = 0; rp->done = 0; return True; } ENTRYPOINT void reshape_rubik(ModeInfo * mi, int width, int height) { rubikstruct *rp = &rubik[MI_SCREEN(mi)]; glViewport(0, 0, rp->WindW = (GLint) width, rp->WindH = (GLint) height); glMatrixMode(GL_PROJECTION); glLoadIdentity(); glFrustum(-1.0, 1.0, -1.0, 1.0, 5.0, 15.0); glMatrixMode(GL_MODELVIEW); } ENTRYPOINT Bool rubik_handle_event (ModeInfo *mi, XEvent *event) { rubikstruct *rp = &rubik[MI_SCREEN(mi)]; if (gltrackball_event_handler (event, rp->trackball, MI_WIDTH (mi), MI_HEIGHT (mi), &rp->button_down_p)) return True; else if (screenhack_event_helper (MI_DISPLAY(mi), MI_WINDOW(mi), event)) { rp->done = 1; return True; } return False; } static Bool pinit(ModeInfo * mi) { glClearDepth(1.0); glColor3f(1.0, 1.0, 1.0); glLightfv(GL_LIGHT0, GL_AMBIENT, ambient); glLightfv(GL_LIGHT0, GL_DIFFUSE, diffuse); glLightfv(GL_LIGHT0, GL_POSITION, position0); glLightfv(GL_LIGHT1, GL_AMBIENT, ambient); glLightfv(GL_LIGHT1, GL_DIFFUSE, diffuse); 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_FLAT); glMaterialfv(GL_FRONT_AND_BACK, GL_SHININESS, front_shininess); glMaterialfv(GL_FRONT_AND_BACK, GL_SPECULAR, front_specular); return (shuffle(mi)); } static void free_rubik(rubikstruct *rp) { int i; for (i = 0; i < MAXFACES; i++) if (rp->cubeLoc[i] != NULL) { (void) free((void *) rp->cubeLoc[i]); rp->cubeLoc[i] = (RubikLoc *) NULL; } for (i = 0; i < MAXORIENT; i++) if (rp->rowLoc[i] != NULL) { (void) free((void *) rp->rowLoc[i]); rp->rowLoc[i] = (RubikLoc *) NULL; } if (rp->moves != NULL) { (void) free((void *) rp->moves); rp->moves = (RubikMove *) NULL; } } ENTRYPOINT void release_rubik(ModeInfo * mi) { if (rubik != NULL) { int screen; for (screen = 0; screen < MI_NUM_SCREENS(mi); screen++) { rubikstruct *rp = &rubik[screen]; free_rubik(rp); } (void) free((void *) rubik); rubik = (rubikstruct *) NULL; } FreeAllGL(mi); } ENTRYPOINT void init_rubik(ModeInfo * mi) { rubikstruct *rp; if (rubik == NULL) { if ((rubik = (rubikstruct *) calloc(MI_NUM_SCREENS(mi), sizeof (rubikstruct))) == NULL) return; } rp = &rubik[MI_SCREEN(mi)]; rp->step = NRAND(90); rp->PX = ((float) LRAND() / (float) MAXRAND) * 2.0 - 1.0; rp->PY = ((float) LRAND() / (float) MAXRAND) * 2.0 - 1.0; rp->trackball = gltrackball_init (True); if ((rp->glx_context = init_GL(mi)) != NULL) { reshape_rubik(mi, MI_WIDTH(mi), MI_HEIGHT(mi)); glDrawBuffer(GL_BACK); if (!pinit(mi)) { free_rubik(rp); if (MI_IS_VERBOSE(mi)) { (void) fprintf(stderr, "Could not allocate memory for rubik\n"); } return; } } else { MI_CLEARWINDOW(mi); } } ENTRYPOINT void draw_rubik(ModeInfo * mi) { Bool bounced = False; Display *display = MI_DISPLAY(mi); Window window = MI_WINDOW(mi); rubikstruct *rp; if (rubik == NULL) return; rp = &rubik[MI_SCREEN(mi)]; if (rp->cubeLoc[0] == NULL) return; MI_IS_DRAWN(mi) = True; if (!rp->glx_context) return; mi->polygon_count = 0; glXMakeCurrent(display, window, *(rp->glx_context)); glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glPushMatrix(); glTranslatef(0.0, 0.0, -10.0); rp->PX += rp->VX; rp->PY += rp->VY; if (rp->PY < -1) { rp->PY += (-1) - (rp->PY); rp->VY = -rp->VY; bounced = True; } if (rp->PY > 1) { rp->PY -= (rp->PY) - 1; rp->VY = -rp->VY; bounced = True; } if (rp->PX < -1) { rp->PX += (-1) - (rp->PX); rp->VX = -rp->VX; bounced = True; } if (rp->PX > 1) { rp->PX -= (rp->PX) - 1; rp->VX = -rp->VX; bounced = True; } if (bounced) { rp->VX += ((float) LRAND() / (float) MAXRAND) * 0.002 - 0.001; rp->VY += ((float) LRAND() / (float) MAXRAND) * 0.002 - 0.001; if (rp->VX > 0.006) rp->VX = 0.006; if (rp->VY > 0.006) rp->VY = 0.006; if (rp->VX < -0.006) rp->VX = -0.006; if (rp->VY < -0.006) rp->VY = -0.006; } if (!MI_IS_ICONIC(mi)) { glTranslatef(rp->PX, rp->PY, 0); glScalef(Scale4Window * rp->WindH / rp->WindW, Scale4Window, Scale4Window); } else { glScalef(Scale4Iconic * rp->WindH / rp->WindW, Scale4Iconic, Scale4Iconic); } # ifdef HAVE_MOBILE /* Keep it the same relative size when rotated. */ { GLfloat h = MI_HEIGHT(mi) / (GLfloat) MI_WIDTH(mi); int o = (int) current_device_rotation(); if (o != 0 && o != 180 && o != -180) { glScalef (1/h, h, 1); /* #### not quite right */ h = 1.8; glScalef (h, h, h); } } # endif gltrackball_rotate (rp->trackball); glRotatef(rp->step * 100, 1, 0, 0); glRotatef(rp->step * 95, 0, 1, 0); glRotatef(rp->step * 90, 0, 0, 1); if (!draw_cube(mi)) { release_rubik(mi); return; } if (MI_IS_FPS(mi)) do_fps (mi); glXSwapBuffers(display, window); if (rp->action == ACTION_SHUFFLE) { if (rp->done) { if (++rp->rotatestep > DELAY_AFTER_SHUFFLING) { rp->movement.face = NO_FACE; rp->rotatestep = 0; rp->action = ACTION_SOLVE; rp->done = 0; } } else { if (rp->movement.face == NO_FACE) { if (rp->shufflingmoves < rp->storedmoves) { rp->rotatestep = 0; rp->movement = rp->moves[rp->shufflingmoves]; } else { rp->rotatestep = 0; rp->done = 1; } } else { if (rp->rotatestep == 0) { if (rp->movement.direction == CW || rp->movement.direction == CCW) rp->degreeTurn = (checkFaceSquare(rp, rp->movement.face)) ? 90 : 180; else rp->degreeTurn = (checkFaceSquare(rp, rowToRotate[rp->movement.face][rp->movement.direction])) ? 90 : 180; } rp->rotatestep += rp->anglestep; if (rp->rotatestep > rp->degreeTurn) { if (!evalmovement(mi, rp->movement)) { free_rubik(rp); if (MI_IS_VERBOSE(mi)) { (void) fprintf(stderr, "Could not allocate memory for rubik\n"); } return; } rp->shufflingmoves++; rp->movement.face = NO_FACE; } } } } else { if (rp->done) { if (++rp->rotatestep > DELAY_AFTER_SOLVING) if (!shuffle(mi)) { free_rubik(rp); if (MI_IS_VERBOSE(mi)) { (void) fprintf(stderr, "Could not allocate memory for rubik\n"); } return; } } else { if (rp->movement.face == NO_FACE) { if (rp->storedmoves > 0) { rp->rotatestep = 0; rp->movement = rp->moves[rp->storedmoves - 1]; rp->movement.direction = (rp->movement.direction + (MAXORIENT / 2)) % MAXORIENT; } else { rp->rotatestep = 0; rp->done = 1; } } else { if (rp->rotatestep == 0) { if (rp->movement.direction == CW || rp->movement.direction == CCW) rp->degreeTurn = (checkFaceSquare(rp, rp->movement.face)) ? 90 : 180; else rp->degreeTurn = (checkFaceSquare(rp, rowToRotate[rp->movement.face][rp->movement.direction])) ? 90 : 180; } rp->rotatestep += rp->anglestep; if (rp->rotatestep > rp->degreeTurn) { if (!evalmovement(mi, rp->movement)) { free_rubik(rp); if (MI_IS_VERBOSE(mi)) { (void) fprintf(stderr, "Could not allocate memory for rubik\n"); } return; } rp->storedmoves--; rp->movement.face = NO_FACE; } } } } glPopMatrix(); glFlush(); rp->step += 0.002; } #ifndef STANDALONE ENTRYPOINT void change_rubik(ModeInfo * mi) { rubikstruct *rp; if (rubik == NULL) return; rp = &rubik[MI_SCREEN(mi)]; if (!rp->glx_context) return; if (!pinit(mi)) { free_rubik(rp); if (MI_IS_VERBOSE(mi)) { (void) fprintf(stderr, "Could not allocate memory for rubik\n"); } return; } } #endif /* !STANDALONE */ #endif XSCREENSAVER_MODULE ("Rubik", rubik) xscreensaver-5.36/hacks/glx/s1_1.c000644 000767 000024 00000267020 12701612217 016736 0ustar00jwzstaff000000 000000 #include "gllist.h" static const float data[]={ 0.698103,-0.159073,-0.698103,0.667578,0.838781,-0.667578, 0.92844,-0.14479,-0.342105,0.713281,0.838781,-0.591406, 0.918718,-0.113815,-0.378157,0.721812,0.890313,-0.595062, 0.698103,-0.159073,-0.698103,0.667578,0.838781,-0.667578, 0.918718,-0.113815,-0.378157,0.721812,0.890313,-0.595062, 0.705394,-0.069557,-0.705394,0.674281,0.890313,-0.674281, 0.92844,-0.14479,-0.342105,0.713281,0.838781,-0.591406, 0.991208,-0.132313,0,0.728516,0.838781,-0.5, 0.995164,-0.09823,0,0.737656,0.890313,-0.5, 0.995164,-0.09823,0,0.737656,0.890313,-0.5, 0.918718,-0.113815,-0.378157,0.721812,0.890313,-0.595062, 0.92844,-0.14479,-0.342105,0.713281,0.838781,-0.591406, 0.995164,-0.09823,0,0.737656,0.890313,-0.5, 0.911846,0.410531,0,0.738539,0.926712,-0.5, 0.891913,0.278471,-0.356294,0.722453,0.926408,-0.595141, 0.891913,0.278471,-0.356294,0.722453,0.926408,-0.595141, 0.918718,-0.113815,-0.378157,0.721812,0.890313,-0.595062, 0.995164,-0.09823,0,0.737656,0.890313,-0.5, 0.891913,0.278471,-0.356294,0.722453,0.926408,-0.595141, 0.66233,0.350197,-0.66233,0.674539,0.926104,-0.674539, 0.705394,-0.069557,-0.705394,0.674281,0.890313,-0.674281, 0.705394,-0.069557,-0.705394,0.674281,0.890313,-0.674281, 0.918718,-0.113815,-0.378157,0.721812,0.890313,-0.595062, 0.891913,0.278471,-0.356294,0.722453,0.926408,-0.595141, 0.698103,-0.159073,0.698103,0.667578,0.838781,-0.332422, 0.705394,-0.069557,0.705394,0.674281,0.890313,-0.325719, 0.918719,-0.113815,0.378157,0.721812,0.890313,-0.404938, 0.698103,-0.159073,0.698103,0.667578,0.838781,-0.332422, 0.918719,-0.113815,0.378157,0.721812,0.890313,-0.404938, 0.92844,-0.14479,0.342105,0.713281,0.838781,-0.408594, 0.705394,-0.069557,0.705394,0.674281,0.890313,-0.325719, 0.66233,0.350196,0.66233,0.674539,0.926104,-0.325461, 0.891913,0.278471,0.356294,0.722453,0.926408,-0.404859, 0.891913,0.278471,0.356294,0.722453,0.926408,-0.404859, 0.918719,-0.113815,0.378157,0.721812,0.890313,-0.404938, 0.705394,-0.069557,0.705394,0.674281,0.890313,-0.325719, 0.891913,0.278471,0.356294,0.722453,0.926408,-0.404859, 0.911846,0.410531,0,0.738539,0.926712,-0.5, 0.995164,-0.09823,0,0.737656,0.890313,-0.5, 0.995164,-0.09823,0,0.737656,0.890313,-0.5, 0.918719,-0.113815,0.378157,0.721812,0.890313,-0.404938, 0.891913,0.278471,0.356294,0.722453,0.926408,-0.404859, 0.995164,-0.09823,0,0.737656,0.890313,-0.5, 0.991208,-0.132313,0,0.728516,0.838781,-0.5, 0.92844,-0.14479,0.342105,0.713281,0.838781,-0.408594, 0.92844,-0.14479,0.342105,0.713281,0.838781,-0.408594, 0.918719,-0.113815,0.378157,0.721812,0.890313,-0.404938, 0.995164,-0.09823,0,0.737656,0.890313,-0.5, 0.199329,0.959446,0.199329,0.638667,0.958463,-0.361333, 0.18835,0.976969,0.100277,0.664625,0.962948,-0.4175, 0.513442,0.838005,0.184732,0.706,0.949319,-0.4125, 0.199329,0.959446,0.199329,0.638667,0.958463,-0.361333, 0.513442,0.838005,0.184732,0.706,0.949319,-0.4125, 0.448747,0.772821,0.448747,0.660875,0.948104,-0.339125, 0.244558,0.969635,0,0.677562,0.965162,-0.5, 0.592505,0.805566,0,0.7215,0.950535,-0.5, 0.513442,0.838005,0.184732,0.706,0.949319,-0.4125, 0.244558,0.969635,0,0.677562,0.965162,-0.5, 0.513442,0.838005,0.184732,0.706,0.949319,-0.4125, 0.18835,0.976969,0.100277,0.664625,0.962948,-0.4175, 0.911846,0.410531,0,0.738539,0.926712,-0.5, 0.891913,0.278471,0.356294,0.722453,0.926408,-0.404859, 0.513442,0.838005,0.184732,0.706,0.949319,-0.4125, 0.911846,0.410531,0,0.738539,0.926712,-0.5, 0.513442,0.838005,0.184732,0.706,0.949319,-0.4125, 0.592505,0.805566,0,0.7215,0.950535,-0.5, 0.891913,0.278471,0.356294,0.722453,0.926408,-0.404859, 0.66233,0.350196,0.66233,0.674539,0.926104,-0.325461, 0.448747,0.772821,0.448747,0.660875,0.948104,-0.339125, 0.448747,0.772821,0.448747,0.660875,0.948104,-0.339125, 0.513442,0.838005,0.184732,0.706,0.949319,-0.4125, 0.891913,0.278471,0.356294,0.722453,0.926408,-0.404859, 0.199329,0.959446,-0.199329,0.638667,0.958463,-0.638667, 0.448747,0.772821,-0.448747,0.660875,0.948104,-0.660875, 0.513442,0.838005,-0.184732,0.706,0.949319,-0.5875, 0.199329,0.959446,-0.199329,0.638667,0.958463,-0.638667, 0.513442,0.838005,-0.184732,0.706,0.949319,-0.5875, 0.18835,0.976969,-0.100277,0.664625,0.962948,-0.5825, 0.448747,0.772821,-0.448747,0.660875,0.948104,-0.660875, 0.66233,0.350197,-0.66233,0.674539,0.926104,-0.674539, 0.891913,0.278471,-0.356294,0.722453,0.926408,-0.595141, 0.891913,0.278471,-0.356294,0.722453,0.926408,-0.595141, 0.513442,0.838005,-0.184732,0.706,0.949319,-0.5875, 0.448747,0.772821,-0.448747,0.660875,0.948104,-0.660875, 0.911846,0.410531,0,0.738539,0.926712,-0.5, 0.592505,0.805566,0,0.7215,0.950535,-0.5, 0.513442,0.838005,-0.184732,0.706,0.949319,-0.5875, 0.911846,0.410531,0,0.738539,0.926712,-0.5, 0.513442,0.838005,-0.184732,0.706,0.949319,-0.5875, 0.891913,0.278471,-0.356294,0.722453,0.926408,-0.595141, 0.244558,0.969635,0,0.677562,0.965162,-0.5, 0.18835,0.976969,-0.100277,0.664625,0.962948,-0.5825, 0.513442,0.838005,-0.184732,0.706,0.949319,-0.5875, 0.244558,0.969635,0,0.677562,0.965162,-0.5, 0.513442,0.838005,-0.184732,0.706,0.949319,-0.5875, 0.592505,0.805566,0,0.7215,0.950535,-0.5, 0.698103,-0.159073,0.698103,0.667578,0.838781,-0.332422, 0.342105,-0.144791,0.92844,0.591406,0.838781,-0.286719, 0.378157,-0.113815,0.918718,0.595062,0.890313,-0.278187, 0.698103,-0.159073,0.698103,0.667578,0.838781,-0.332422, 0.378157,-0.113815,0.918718,0.595062,0.890313,-0.278187, 0.705394,-0.069557,0.705394,0.674281,0.890313,-0.325719, 0.342105,-0.144791,0.92844,0.591406,0.838781,-0.286719, 0,-0.132314,0.991208,0.5,0.838781,-0.271484, 0,-0.09823,0.995164,0.5,0.890313,-0.262344, 0,-0.09823,0.995164,0.5,0.890313,-0.262344, 0.378157,-0.113815,0.918718,0.595062,0.890313,-0.278187, 0.342105,-0.144791,0.92844,0.591406,0.838781,-0.286719, 0,-0.09823,0.995164,0.5,0.890313,-0.262344, 0,0.410531,0.911846,0.5,0.926712,-0.261461, 0.356294,0.278471,0.891913,0.595141,0.926408,-0.277547, 0.356294,0.278471,0.891913,0.595141,0.926408,-0.277547, 0.378157,-0.113815,0.918718,0.595062,0.890313,-0.278187, 0,-0.09823,0.995164,0.5,0.890313,-0.262344, 0.356294,0.278471,0.891913,0.595141,0.926408,-0.277547, 0.66233,0.350196,0.66233,0.674539,0.926104,-0.325461, 0.705394,-0.069557,0.705394,0.674281,0.890313,-0.325719, 0.705394,-0.069557,0.705394,0.674281,0.890313,-0.325719, 0.378157,-0.113815,0.918718,0.595062,0.890313,-0.278187, 0.356294,0.278471,0.891913,0.595141,0.926408,-0.277547, -0.698103,-0.159073,0.698103,0.332422,0.838781,-0.332422, -0.705394,-0.069557,0.705394,0.325719,0.890313,-0.325719, -0.378157,-0.113815,0.918718,0.404938,0.890313,-0.278187, -0.698103,-0.159073,0.698103,0.332422,0.838781,-0.332422, -0.378157,-0.113815,0.918718,0.404938,0.890313,-0.278187, -0.342105,-0.144791,0.92844,0.408594,0.838781,-0.286719, -0.705394,-0.069557,0.705394,0.325719,0.890313,-0.325719, -0.66233,0.350197,0.66233,0.325461,0.926104,-0.325461, -0.356294,0.278471,0.891913,0.404859,0.926408,-0.277547, -0.356294,0.278471,0.891913,0.404859,0.926408,-0.277547, -0.378157,-0.113815,0.918718,0.404938,0.890313,-0.278187, -0.705394,-0.069557,0.705394,0.325719,0.890313,-0.325719, -0.356294,0.278471,0.891913,0.404859,0.926408,-0.277547, 0,0.410531,0.911846,0.5,0.926712,-0.261461, 0,-0.09823,0.995164,0.5,0.890313,-0.262344, 0,-0.09823,0.995164,0.5,0.890313,-0.262344, -0.378157,-0.113815,0.918718,0.404938,0.890313,-0.278187, -0.356294,0.278471,0.891913,0.404859,0.926408,-0.277547, 0,-0.09823,0.995164,0.5,0.890313,-0.262344, 0,-0.132314,0.991208,0.5,0.838781,-0.271484, -0.342105,-0.144791,0.92844,0.408594,0.838781,-0.286719, -0.342105,-0.144791,0.92844,0.408594,0.838781,-0.286719, -0.378157,-0.113815,0.918718,0.404938,0.890313,-0.278187, 0,-0.09823,0.995164,0.5,0.890313,-0.262344, -0.199329,0.959446,0.199329,0.361333,0.958463,-0.361333, -0.100277,0.976969,0.18835,0.4175,0.962948,-0.335375, -0.184731,0.838005,0.513442,0.4125,0.949319,-0.294, -0.199329,0.959446,0.199329,0.361333,0.958463,-0.361333, -0.184731,0.838005,0.513442,0.4125,0.949319,-0.294, -0.448747,0.77282,0.448747,0.339125,0.948104,-0.339125, 0,0.969635,0.244558,0.5,0.965162,-0.322437, 0,0.805567,0.592505,0.5,0.950535,-0.2785, -0.184731,0.838005,0.513442,0.4125,0.949319,-0.294, 0,0.969635,0.244558,0.5,0.965162,-0.322437, -0.184731,0.838005,0.513442,0.4125,0.949319,-0.294, -0.100277,0.976969,0.18835,0.4175,0.962948,-0.335375, 0,0.410531,0.911846,0.5,0.926712,-0.261461, -0.356294,0.278471,0.891913,0.404859,0.926408,-0.277547, -0.184731,0.838005,0.513442,0.4125,0.949319,-0.294, 0,0.410531,0.911846,0.5,0.926712,-0.261461, -0.184731,0.838005,0.513442,0.4125,0.949319,-0.294, 0,0.805567,0.592505,0.5,0.950535,-0.2785, -0.356294,0.278471,0.891913,0.404859,0.926408,-0.277547, -0.66233,0.350197,0.66233,0.325461,0.926104,-0.325461, -0.448747,0.77282,0.448747,0.339125,0.948104,-0.339125, -0.448747,0.77282,0.448747,0.339125,0.948104,-0.339125, -0.184731,0.838005,0.513442,0.4125,0.949319,-0.294, -0.356294,0.278471,0.891913,0.404859,0.926408,-0.277547, 0.199329,0.959446,0.199329,0.638667,0.958463,-0.361333, 0.448747,0.772821,0.448747,0.660875,0.948104,-0.339125, 0.184731,0.838005,0.513442,0.5875,0.949319,-0.294, 0.199329,0.959446,0.199329,0.638667,0.958463,-0.361333, 0.184731,0.838005,0.513442,0.5875,0.949319,-0.294, 0.100277,0.976969,0.18835,0.5825,0.962948,-0.335375, 0.448747,0.772821,0.448747,0.660875,0.948104,-0.339125, 0.66233,0.350196,0.66233,0.674539,0.926104,-0.325461, 0.356294,0.278471,0.891913,0.595141,0.926408,-0.277547, 0.356294,0.278471,0.891913,0.595141,0.926408,-0.277547, 0.184731,0.838005,0.513442,0.5875,0.949319,-0.294, 0.448747,0.772821,0.448747,0.660875,0.948104,-0.339125, 0,0.410531,0.911846,0.5,0.926712,-0.261461, 0,0.805567,0.592505,0.5,0.950535,-0.2785, 0.184731,0.838005,0.513442,0.5875,0.949319,-0.294, 0,0.410531,0.911846,0.5,0.926712,-0.261461, 0.184731,0.838005,0.513442,0.5875,0.949319,-0.294, 0.356294,0.278471,0.891913,0.595141,0.926408,-0.277547, 0,0.969635,0.244558,0.5,0.965162,-0.322437, 0.100277,0.976969,0.18835,0.5825,0.962948,-0.335375, 0.184731,0.838005,0.513442,0.5875,0.949319,-0.294, 0,0.969635,0.244558,0.5,0.965162,-0.322437, 0.184731,0.838005,0.513442,0.5875,0.949319,-0.294, 0,0.805567,0.592505,0.5,0.950535,-0.2785, -0.698103,-0.159073,0.698103,0.332422,0.838781,-0.332422, -0.92844,-0.144791,0.342105,0.286719,0.838781,-0.408594, -0.918718,-0.113815,0.378157,0.278187,0.890313,-0.404938, -0.698103,-0.159073,0.698103,0.332422,0.838781,-0.332422, -0.918718,-0.113815,0.378157,0.278187,0.890313,-0.404938, -0.705394,-0.069557,0.705394,0.325719,0.890313,-0.325719, -0.92844,-0.144791,0.342105,0.286719,0.838781,-0.408594, -0.991208,-0.132314,0,0.271484,0.838781,-0.5, -0.995164,-0.09823,0,0.262344,0.890313,-0.5, -0.995164,-0.09823,0,0.262344,0.890313,-0.5, -0.918718,-0.113815,0.378157,0.278187,0.890313,-0.404938, -0.92844,-0.144791,0.342105,0.286719,0.838781,-0.408594, -0.995164,-0.09823,0,0.262344,0.890313,-0.5, -0.911846,0.410531,0,0.261461,0.926712,-0.5, -0.891913,0.278471,0.356294,0.277547,0.926408,-0.404859, -0.891913,0.278471,0.356294,0.277547,0.926408,-0.404859, -0.918718,-0.113815,0.378157,0.278187,0.890313,-0.404938, -0.995164,-0.09823,0,0.262344,0.890313,-0.5, -0.891913,0.278471,0.356294,0.277547,0.926408,-0.404859, -0.66233,0.350197,0.66233,0.325461,0.926104,-0.325461, -0.705394,-0.069557,0.705394,0.325719,0.890313,-0.325719, -0.705394,-0.069557,0.705394,0.325719,0.890313,-0.325719, -0.918718,-0.113815,0.378157,0.278187,0.890313,-0.404938, -0.891913,0.278471,0.356294,0.277547,0.926408,-0.404859, -0.698103,-0.159073,-0.698103,0.332422,0.838781,-0.667578, -0.705394,-0.069557,-0.705394,0.325719,0.890313,-0.674281, -0.918718,-0.113815,-0.378157,0.278187,0.890313,-0.595062, -0.698103,-0.159073,-0.698103,0.332422,0.838781,-0.667578, -0.918718,-0.113815,-0.378157,0.278187,0.890313,-0.595062, -0.92844,-0.144791,-0.342105,0.286719,0.838781,-0.591406, -0.705394,-0.069557,-0.705394,0.325719,0.890313,-0.674281, -0.66233,0.350196,-0.66233,0.325461,0.926104,-0.674539, -0.891913,0.278471,-0.356294,0.277547,0.926408,-0.595141, -0.891913,0.278471,-0.356294,0.277547,0.926408,-0.595141, -0.918718,-0.113815,-0.378157,0.278187,0.890313,-0.595062, -0.705394,-0.069557,-0.705394,0.325719,0.890313,-0.674281, -0.891913,0.278471,-0.356294,0.277547,0.926408,-0.595141, -0.911846,0.410531,0,0.261461,0.926712,-0.5, -0.995164,-0.09823,0,0.262344,0.890313,-0.5, -0.995164,-0.09823,0,0.262344,0.890313,-0.5, -0.918718,-0.113815,-0.378157,0.278187,0.890313,-0.595062, -0.891913,0.278471,-0.356294,0.277547,0.926408,-0.595141, -0.995164,-0.09823,0,0.262344,0.890313,-0.5, -0.991208,-0.132314,0,0.271484,0.838781,-0.5, -0.92844,-0.144791,-0.342105,0.286719,0.838781,-0.591406, -0.92844,-0.144791,-0.342105,0.286719,0.838781,-0.591406, -0.918718,-0.113815,-0.378157,0.278187,0.890313,-0.595062, -0.995164,-0.09823,0,0.262344,0.890313,-0.5, -0.199329,0.959446,-0.199329,0.361333,0.958463,-0.638667, -0.18835,0.976969,-0.100277,0.335375,0.962948,-0.5825, -0.513442,0.838005,-0.184731,0.294,0.949319,-0.5875, -0.199329,0.959446,-0.199329,0.361333,0.958463,-0.638667, -0.513442,0.838005,-0.184731,0.294,0.949319,-0.5875, -0.448747,0.772821,-0.448747,0.339125,0.948104,-0.660875, -0.244558,0.969635,0,0.322437,0.965162,-0.5, -0.592505,0.805566,0,0.2785,0.950535,-0.5, -0.513442,0.838005,-0.184731,0.294,0.949319,-0.5875, -0.244558,0.969635,0,0.322437,0.965162,-0.5, -0.513442,0.838005,-0.184731,0.294,0.949319,-0.5875, -0.18835,0.976969,-0.100277,0.335375,0.962948,-0.5825, -0.911846,0.410531,0,0.261461,0.926712,-0.5, -0.891913,0.278471,-0.356294,0.277547,0.926408,-0.595141, -0.513442,0.838005,-0.184731,0.294,0.949319,-0.5875, -0.911846,0.410531,0,0.261461,0.926712,-0.5, -0.513442,0.838005,-0.184731,0.294,0.949319,-0.5875, -0.592505,0.805566,0,0.2785,0.950535,-0.5, -0.891913,0.278471,-0.356294,0.277547,0.926408,-0.595141, -0.66233,0.350196,-0.66233,0.325461,0.926104,-0.674539, -0.448747,0.772821,-0.448747,0.339125,0.948104,-0.660875, -0.448747,0.772821,-0.448747,0.339125,0.948104,-0.660875, -0.513442,0.838005,-0.184731,0.294,0.949319,-0.5875, -0.891913,0.278471,-0.356294,0.277547,0.926408,-0.595141, -0.199329,0.959446,0.199329,0.361333,0.958463,-0.361333, -0.448747,0.77282,0.448747,0.339125,0.948104,-0.339125, -0.513442,0.838005,0.184731,0.294,0.949319,-0.4125, -0.199329,0.959446,0.199329,0.361333,0.958463,-0.361333, -0.513442,0.838005,0.184731,0.294,0.949319,-0.4125, -0.18835,0.976969,0.100277,0.335375,0.962948,-0.4175, -0.448747,0.77282,0.448747,0.339125,0.948104,-0.339125, -0.66233,0.350197,0.66233,0.325461,0.926104,-0.325461, -0.891913,0.278471,0.356294,0.277547,0.926408,-0.404859, -0.891913,0.278471,0.356294,0.277547,0.926408,-0.404859, -0.513442,0.838005,0.184731,0.294,0.949319,-0.4125, -0.448747,0.77282,0.448747,0.339125,0.948104,-0.339125, -0.911846,0.410531,0,0.261461,0.926712,-0.5, -0.592505,0.805566,0,0.2785,0.950535,-0.5, -0.513442,0.838005,0.184731,0.294,0.949319,-0.4125, -0.911846,0.410531,0,0.261461,0.926712,-0.5, -0.513442,0.838005,0.184731,0.294,0.949319,-0.4125, -0.891913,0.278471,0.356294,0.277547,0.926408,-0.404859, -0.244558,0.969635,0,0.322437,0.965162,-0.5, -0.18835,0.976969,0.100277,0.335375,0.962948,-0.4175, -0.513442,0.838005,0.184731,0.294,0.949319,-0.4125, -0.244558,0.969635,0,0.322437,0.965162,-0.5, -0.513442,0.838005,0.184731,0.294,0.949319,-0.4125, -0.592505,0.805566,0,0.2785,0.950535,-0.5, -0.698103,-0.159073,-0.698103,0.332422,0.838781,-0.667578, -0.342105,-0.14479,-0.92844,0.408594,0.838781,-0.713281, -0.378157,-0.113815,-0.918719,0.404938,0.890313,-0.721812, -0.698103,-0.159073,-0.698103,0.332422,0.838781,-0.667578, -0.378157,-0.113815,-0.918719,0.404938,0.890313,-0.721812, -0.705394,-0.069557,-0.705394,0.325719,0.890313,-0.674281, -0.342105,-0.14479,-0.92844,0.408594,0.838781,-0.713281, 0,-0.132313,-0.991208,0.5,0.838781,-0.728516, 0,-0.09823,-0.995164,0.5,0.890313,-0.737656, 0,-0.09823,-0.995164,0.5,0.890313,-0.737656, -0.378157,-0.113815,-0.918719,0.404938,0.890313,-0.721812, -0.342105,-0.14479,-0.92844,0.408594,0.838781,-0.713281, 0,-0.09823,-0.995164,0.5,0.890313,-0.737656, 0,0.410531,-0.911846,0.5,0.926712,-0.738539, -0.356294,0.278471,-0.891913,0.404859,0.926408,-0.722453, -0.356294,0.278471,-0.891913,0.404859,0.926408,-0.722453, -0.378157,-0.113815,-0.918719,0.404938,0.890313,-0.721812, 0,-0.09823,-0.995164,0.5,0.890313,-0.737656, -0.356294,0.278471,-0.891913,0.404859,0.926408,-0.722453, -0.66233,0.350196,-0.66233,0.325461,0.926104,-0.674539, -0.705394,-0.069557,-0.705394,0.325719,0.890313,-0.674281, -0.705394,-0.069557,-0.705394,0.325719,0.890313,-0.674281, -0.378157,-0.113815,-0.918719,0.404938,0.890313,-0.721812, -0.356294,0.278471,-0.891913,0.404859,0.926408,-0.722453, 0.698103,-0.159073,-0.698103,0.667578,0.838781,-0.667578, 0.705394,-0.069557,-0.705394,0.674281,0.890313,-0.674281, 0.378157,-0.113815,-0.918718,0.595062,0.890313,-0.721812, 0.698103,-0.159073,-0.698103,0.667578,0.838781,-0.667578, 0.378157,-0.113815,-0.918718,0.595062,0.890313,-0.721812, 0.342105,-0.14479,-0.92844,0.591406,0.838781,-0.713281, 0.705394,-0.069557,-0.705394,0.674281,0.890313,-0.674281, 0.66233,0.350197,-0.66233,0.674539,0.926104,-0.674539, 0.356294,0.278471,-0.891913,0.595141,0.926408,-0.722453, 0.356294,0.278471,-0.891913,0.595141,0.926408,-0.722453, 0.378157,-0.113815,-0.918718,0.595062,0.890313,-0.721812, 0.705394,-0.069557,-0.705394,0.674281,0.890313,-0.674281, 0.356294,0.278471,-0.891913,0.595141,0.926408,-0.722453, 0,0.410531,-0.911846,0.5,0.926712,-0.738539, 0,-0.09823,-0.995164,0.5,0.890313,-0.737656, 0,-0.09823,-0.995164,0.5,0.890313,-0.737656, 0.378157,-0.113815,-0.918718,0.595062,0.890313,-0.721812, 0.356294,0.278471,-0.891913,0.595141,0.926408,-0.722453, 0,-0.09823,-0.995164,0.5,0.890313,-0.737656, 0,-0.132313,-0.991208,0.5,0.838781,-0.728516, 0.342105,-0.14479,-0.92844,0.591406,0.838781,-0.713281, 0.342105,-0.14479,-0.92844,0.591406,0.838781,-0.713281, 0.378157,-0.113815,-0.918718,0.595062,0.890313,-0.721812, 0,-0.09823,-0.995164,0.5,0.890313,-0.737656, 0.199329,0.959446,-0.199329,0.638667,0.958463,-0.638667, 0.100277,0.976969,-0.18835,0.5825,0.962948,-0.664625, 0.184732,0.838005,-0.513442,0.5875,0.949319,-0.706, 0.199329,0.959446,-0.199329,0.638667,0.958463,-0.638667, 0.184732,0.838005,-0.513442,0.5875,0.949319,-0.706, 0.448747,0.772821,-0.448747,0.660875,0.948104,-0.660875, 0,0.969635,-0.244558,0.5,0.965162,-0.677562, 0,0.805567,-0.592505,0.5,0.950535,-0.7215, 0.184732,0.838005,-0.513442,0.5875,0.949319,-0.706, 0,0.969635,-0.244558,0.5,0.965162,-0.677562, 0.184732,0.838005,-0.513442,0.5875,0.949319,-0.706, 0.100277,0.976969,-0.18835,0.5825,0.962948,-0.664625, 0,0.410531,-0.911846,0.5,0.926712,-0.738539, 0.356294,0.278471,-0.891913,0.595141,0.926408,-0.722453, 0.184732,0.838005,-0.513442,0.5875,0.949319,-0.706, 0,0.410531,-0.911846,0.5,0.926712,-0.738539, 0.184732,0.838005,-0.513442,0.5875,0.949319,-0.706, 0,0.805567,-0.592505,0.5,0.950535,-0.7215, 0.356294,0.278471,-0.891913,0.595141,0.926408,-0.722453, 0.66233,0.350197,-0.66233,0.674539,0.926104,-0.674539, 0.448747,0.772821,-0.448747,0.660875,0.948104,-0.660875, 0.448747,0.772821,-0.448747,0.660875,0.948104,-0.660875, 0.184732,0.838005,-0.513442,0.5875,0.949319,-0.706, 0.356294,0.278471,-0.891913,0.595141,0.926408,-0.722453, -0.199329,0.959446,-0.199329,0.361333,0.958463,-0.638667, -0.448747,0.772821,-0.448747,0.339125,0.948104,-0.660875, -0.184732,0.838005,-0.513442,0.4125,0.949319,-0.706, -0.199329,0.959446,-0.199329,0.361333,0.958463,-0.638667, -0.184732,0.838005,-0.513442,0.4125,0.949319,-0.706, -0.100277,0.976969,-0.18835,0.4175,0.962948,-0.664625, -0.448747,0.772821,-0.448747,0.339125,0.948104,-0.660875, -0.66233,0.350196,-0.66233,0.325461,0.926104,-0.674539, -0.356294,0.278471,-0.891913,0.404859,0.926408,-0.722453, -0.356294,0.278471,-0.891913,0.404859,0.926408,-0.722453, -0.184732,0.838005,-0.513442,0.4125,0.949319,-0.706, -0.448747,0.772821,-0.448747,0.339125,0.948104,-0.660875, 0,0.410531,-0.911846,0.5,0.926712,-0.738539, 0,0.805567,-0.592505,0.5,0.950535,-0.7215, -0.184732,0.838005,-0.513442,0.4125,0.949319,-0.706, 0,0.410531,-0.911846,0.5,0.926712,-0.738539, -0.184732,0.838005,-0.513442,0.4125,0.949319,-0.706, -0.356294,0.278471,-0.891913,0.404859,0.926408,-0.722453, 0,0.969635,-0.244558,0.5,0.965162,-0.677562, -0.100277,0.976969,-0.18835,0.4175,0.962948,-0.664625, -0.184732,0.838005,-0.513442,0.4125,0.949319,-0.706, 0,0.969635,-0.244558,0.5,0.965162,-0.677562, -0.184732,0.838005,-0.513442,0.4125,0.949319,-0.706, 0,0.805567,-0.592505,0.5,0.950535,-0.7215, 0.199329,0.959446,0.199329,0.638667,0.958463,-0.361333, 0.100277,0.976969,0.18835,0.5825,0.962948,-0.335375, 0.079739,0.993621,0.079739,0.5905,0.971195,-0.4095, 0.199329,0.959446,0.199329,0.638667,0.958463,-0.361333, 0.079739,0.993621,0.079739,0.5905,0.971195,-0.4095, 0.18835,0.976969,0.100277,0.664625,0.962948,-0.4175, 0.100277,0.976969,0.18835,0.5825,0.962948,-0.335375, 0,0.969635,0.244558,0.5,0.965162,-0.322437, 0,0.996384,0.08496,0.5,0.973972,-0.40225, 0,0.996384,0.08496,0.5,0.973972,-0.40225, 0.079739,0.993621,0.079739,0.5905,0.971195,-0.4095, 0.100277,0.976969,0.18835,0.5825,0.962948,-0.335375, 0,1,0,0.5,0.976924,-0.5, 0.08496,0.996384,0,0.59775,0.973972,-0.5, 0.079739,0.993621,0.079739,0.5905,0.971195,-0.4095, 0,1,0,0.5,0.976924,-0.5, 0.079739,0.993621,0.079739,0.5905,0.971195,-0.4095, 0,0.996384,0.08496,0.5,0.973972,-0.40225, 0.08496,0.996384,0,0.59775,0.973972,-0.5, 0.244558,0.969635,0,0.677562,0.965162,-0.5, 0.18835,0.976969,0.100277,0.664625,0.962948,-0.4175, 0.18835,0.976969,0.100277,0.664625,0.962948,-0.4175, 0.079739,0.993621,0.079739,0.5905,0.971195,-0.4095, 0.08496,0.996384,0,0.59775,0.973972,-0.5, -0.199329,0.959446,0.199329,0.361333,0.958463,-0.361333, -0.18835,0.976969,0.100277,0.335375,0.962948,-0.4175, -0.079739,0.993621,0.079739,0.4095,0.971195,-0.4095, -0.199329,0.959446,0.199329,0.361333,0.958463,-0.361333, -0.079739,0.993621,0.079739,0.4095,0.971195,-0.4095, -0.100277,0.976969,0.18835,0.4175,0.962948,-0.335375, -0.18835,0.976969,0.100277,0.335375,0.962948,-0.4175, -0.244558,0.969635,0,0.322437,0.965162,-0.5, -0.08496,0.996384,0,0.40225,0.973972,-0.5, -0.08496,0.996384,0,0.40225,0.973972,-0.5, -0.079739,0.993621,0.079739,0.4095,0.971195,-0.4095, -0.18835,0.976969,0.100277,0.335375,0.962948,-0.4175, 0,1,0,0.5,0.976924,-0.5, 0,0.996384,0.08496,0.5,0.973972,-0.40225, -0.079739,0.993621,0.079739,0.4095,0.971195,-0.4095, 0,1,0,0.5,0.976924,-0.5, -0.079739,0.993621,0.079739,0.4095,0.971195,-0.4095, -0.08496,0.996384,0,0.40225,0.973972,-0.5, 0,0.996384,0.08496,0.5,0.973972,-0.40225, 0,0.969635,0.244558,0.5,0.965162,-0.322437, -0.100277,0.976969,0.18835,0.4175,0.962948,-0.335375, -0.100277,0.976969,0.18835,0.4175,0.962948,-0.335375, -0.079739,0.993621,0.079739,0.4095,0.971195,-0.4095, 0,0.996384,0.08496,0.5,0.973972,-0.40225, -0.199329,0.959446,-0.199329,0.361333,0.958463,-0.638667, -0.100277,0.976969,-0.18835,0.4175,0.962948,-0.664625, -0.079739,0.993621,-0.079739,0.4095,0.971195,-0.5905, -0.199329,0.959446,-0.199329,0.361333,0.958463,-0.638667, -0.079739,0.993621,-0.079739,0.4095,0.971195,-0.5905, -0.18835,0.976969,-0.100277,0.335375,0.962948,-0.5825, -0.100277,0.976969,-0.18835,0.4175,0.962948,-0.664625, 0,0.969635,-0.244558,0.5,0.965162,-0.677562, 0,0.996384,-0.08496,0.5,0.973972,-0.59775, 0,0.996384,-0.08496,0.5,0.973972,-0.59775, -0.079739,0.993621,-0.079739,0.4095,0.971195,-0.5905, -0.100277,0.976969,-0.18835,0.4175,0.962948,-0.664625, 0,1,0,0.5,0.976924,-0.5, -0.08496,0.996384,0,0.40225,0.973972,-0.5, -0.079739,0.993621,-0.079739,0.4095,0.971195,-0.5905, 0,1,0,0.5,0.976924,-0.5, -0.079739,0.993621,-0.079739,0.4095,0.971195,-0.5905, 0,0.996384,-0.08496,0.5,0.973972,-0.59775, -0.08496,0.996384,0,0.40225,0.973972,-0.5, -0.244558,0.969635,0,0.322437,0.965162,-0.5, -0.18835,0.976969,-0.100277,0.335375,0.962948,-0.5825, -0.18835,0.976969,-0.100277,0.335375,0.962948,-0.5825, -0.079739,0.993621,-0.079739,0.4095,0.971195,-0.5905, -0.08496,0.996384,0,0.40225,0.973972,-0.5, 0.199329,0.959446,-0.199329,0.638667,0.958463,-0.638667, 0.18835,0.976969,-0.100277,0.664625,0.962948,-0.5825, 0.079739,0.993621,-0.079739,0.5905,0.971195,-0.5905, 0.199329,0.959446,-0.199329,0.638667,0.958463,-0.638667, 0.079739,0.993621,-0.079739,0.5905,0.971195,-0.5905, 0.100277,0.976969,-0.18835,0.5825,0.962948,-0.664625, 0.18835,0.976969,-0.100277,0.664625,0.962948,-0.5825, 0.244558,0.969635,0,0.677562,0.965162,-0.5, 0.08496,0.996384,0,0.59775,0.973972,-0.5, 0.08496,0.996384,0,0.59775,0.973972,-0.5, 0.079739,0.993621,-0.079739,0.5905,0.971195,-0.5905, 0.18835,0.976969,-0.100277,0.664625,0.962948,-0.5825, 0,1,0,0.5,0.976924,-0.5, 0,0.996384,-0.08496,0.5,0.973972,-0.59775, 0.079739,0.993621,-0.079739,0.5905,0.971195,-0.5905, 0,1,0,0.5,0.976924,-0.5, 0.079739,0.993621,-0.079739,0.5905,0.971195,-0.5905, 0.08496,0.996384,0,0.59775,0.973972,-0.5, 0,0.996384,-0.08496,0.5,0.973972,-0.59775, 0,0.969635,-0.244558,0.5,0.965162,-0.677562, 0.100277,0.976969,-0.18835,0.5825,0.962948,-0.664625, 0.100277,0.976969,-0.18835,0.5825,0.962948,-0.664625, 0.079739,0.993621,-0.079739,0.5905,0.971195,-0.5905, 0,0.996384,-0.08496,0.5,0.973972,-0.59775, 0.92844,-0.14479,-0.342105,0.713281,0.838781,-0.591406, 0.698103,-0.159073,-0.698103,0.667578,0.838781,-0.667578, 0.703449,-0.101581,-0.703449,0.661906,0.769563,-0.661906, 0.703449,-0.101581,-0.703449,0.661906,0.769563,-0.661906, 0.934344,-0.092655,-0.344117,0.706063,0.769563,-0.588313, 0.92844,-0.14479,-0.342105,0.713281,0.838781,-0.591406, 0.705656,-0.064019,-0.705656,0.657523,0.686547,-0.657523, 0.936848,-0.057446,-0.344986,0.700484,0.686547,-0.585922, 0.934344,-0.092655,-0.344117,0.706063,0.769563,-0.588313, 0.705656,-0.064019,-0.705656,0.657523,0.686547,-0.657523, 0.934344,-0.092655,-0.344117,0.706063,0.769563,-0.588313, 0.703449,-0.101581,-0.703449,0.661906,0.769563,-0.661906, 0.936848,-0.057446,-0.344986,0.700484,0.686547,-0.585922, 0.998665,-0.051663,0,0.714805,0.686547,-0.5, 0.996389,-0.084903,0,0.720781,0.769563,-0.5, 0.996389,-0.084903,0,0.720781,0.769563,-0.5, 0.934344,-0.092655,-0.344117,0.706063,0.769563,-0.588313, 0.936848,-0.057446,-0.344986,0.700484,0.686547,-0.585922, 0.991208,-0.132313,0,0.728516,0.838781,-0.5, 0.92844,-0.14479,-0.342105,0.713281,0.838781,-0.591406, 0.934344,-0.092655,-0.344117,0.706063,0.769563,-0.588313, 0.991208,-0.132313,0,0.728516,0.838781,-0.5, 0.934344,-0.092655,-0.344117,0.706063,0.769563,-0.588313, 0.996389,-0.084903,0,0.720781,0.769563,-0.5, 0.707107,-0.000155,-0.707107,0.653656,0.494688,-0.653656, 0.958364,-0.000151,-0.285548,0.695563,0.494688,-0.583813, 0.938032,-0.028246,-0.345395,0.696875,0.593625,-0.584375, 0.707107,-0.000155,-0.707107,0.653656,0.494688,-0.653656, 0.938032,-0.028246,-0.345395,0.696875,0.593625,-0.584375, 0.706706,-0.033664,-0.706706,0.654688,0.593625,-0.654688, 0.958364,-0.000151,-0.285548,0.695563,0.494688,-0.583813, 1,-0.00015,0,0.709531,0.494688,-0.5, 0.999728,-0.023338,0,0.710938,0.593625,-0.5, 0.999728,-0.023338,0,0.710938,0.593625,-0.5, 0.938032,-0.028246,-0.345395,0.696875,0.593625,-0.584375, 0.958364,-0.000151,-0.285548,0.695563,0.494688,-0.583813, 0.998665,-0.051663,0,0.714805,0.686547,-0.5, 0.936848,-0.057446,-0.344986,0.700484,0.686547,-0.585922, 0.938032,-0.028246,-0.345395,0.696875,0.593625,-0.584375, 0.998665,-0.051663,0,0.714805,0.686547,-0.5, 0.938032,-0.028246,-0.345395,0.696875,0.593625,-0.584375, 0.999728,-0.023338,0,0.710938,0.593625,-0.5, 0.936848,-0.057446,-0.344986,0.700484,0.686547,-0.585922, 0.705656,-0.064019,-0.705656,0.657523,0.686547,-0.657523, 0.706706,-0.033664,-0.706706,0.654688,0.593625,-0.654688, 0.706706,-0.033664,-0.706706,0.654688,0.593625,-0.654688, 0.938032,-0.028246,-0.345395,0.696875,0.593625,-0.584375, 0.936848,-0.057446,-0.344986,0.700484,0.686547,-0.585922, 0.707107,-0.000155,0.707107,0.653656,0.494688,-0.346344, 0.706706,-0.033664,0.706706,0.654688,0.593625,-0.345313, 0.938032,-0.028246,0.345395,0.696875,0.593625,-0.415625, 0.707107,-0.000155,0.707107,0.653656,0.494688,-0.346344, 0.938032,-0.028246,0.345395,0.696875,0.593625,-0.415625, 0.958364,-0.000151,0.285548,0.695563,0.494688,-0.416187, 0.706706,-0.033664,0.706706,0.654688,0.593625,-0.345313, 0.705656,-0.064019,0.705656,0.657523,0.686547,-0.342477, 0.936848,-0.057446,0.344986,0.700484,0.686547,-0.414078, 0.936848,-0.057446,0.344986,0.700484,0.686547,-0.414078, 0.938032,-0.028246,0.345395,0.696875,0.593625,-0.415625, 0.706706,-0.033664,0.706706,0.654688,0.593625,-0.345313, 0.998665,-0.051663,0,0.714805,0.686547,-0.5, 0.999728,-0.023338,0,0.710938,0.593625,-0.5, 0.938032,-0.028246,0.345395,0.696875,0.593625,-0.415625, 0.998665,-0.051663,0,0.714805,0.686547,-0.5, 0.938032,-0.028246,0.345395,0.696875,0.593625,-0.415625, 0.936848,-0.057446,0.344986,0.700484,0.686547,-0.414078, 0.999728,-0.023338,0,0.710938,0.593625,-0.5, 1,-0.00015,0,0.709531,0.494688,-0.5, 0.958364,-0.000151,0.285548,0.695563,0.494688,-0.416187, 0.958364,-0.000151,0.285548,0.695563,0.494688,-0.416187, 0.938032,-0.028246,0.345395,0.696875,0.593625,-0.415625, 0.999728,-0.023338,0,0.710938,0.593625,-0.5, 0.703449,-0.101581,0.703449,0.661906,0.769563,-0.338094, 0.698103,-0.159073,0.698103,0.667578,0.838781,-0.332422, 0.92844,-0.14479,0.342105,0.713281,0.838781,-0.408594, 0.92844,-0.14479,0.342105,0.713281,0.838781,-0.408594, 0.934344,-0.092655,0.344117,0.706063,0.769563,-0.411687, 0.703449,-0.101581,0.703449,0.661906,0.769563,-0.338094, 0.991208,-0.132313,0,0.728516,0.838781,-0.5, 0.996389,-0.084903,0,0.720781,0.769563,-0.5, 0.934344,-0.092655,0.344117,0.706063,0.769563,-0.411687, 0.991208,-0.132313,0,0.728516,0.838781,-0.5, 0.934344,-0.092655,0.344117,0.706063,0.769563,-0.411687, 0.92844,-0.14479,0.342105,0.713281,0.838781,-0.408594, 0.996389,-0.084903,0,0.720781,0.769563,-0.5, 0.998665,-0.051663,0,0.714805,0.686547,-0.5, 0.936848,-0.057446,0.344986,0.700484,0.686547,-0.414078, 0.936848,-0.057446,0.344986,0.700484,0.686547,-0.414078, 0.934344,-0.092655,0.344117,0.706063,0.769563,-0.411687, 0.996389,-0.084903,0,0.720781,0.769563,-0.5, 0.705656,-0.064019,0.705656,0.657523,0.686547,-0.342477, 0.703449,-0.101581,0.703449,0.661906,0.769563,-0.338094, 0.934344,-0.092655,0.344117,0.706063,0.769563,-0.411687, 0.705656,-0.064019,0.705656,0.657523,0.686547,-0.342477, 0.934344,-0.092655,0.344117,0.706063,0.769563,-0.411687, 0.936848,-0.057446,0.344986,0.700484,0.686547,-0.414078, -0.342105,-0.14479,-0.92844,0.408594,0.838781,-0.713281, -0.698103,-0.159073,-0.698103,0.332422,0.838781,-0.667578, -0.703449,-0.101581,-0.703449,0.338094,0.769563,-0.661906, -0.703449,-0.101581,-0.703449,0.338094,0.769563,-0.661906, -0.344117,-0.092655,-0.934344,0.411687,0.769563,-0.706063, -0.342105,-0.14479,-0.92844,0.408594,0.838781,-0.713281, -0.705656,-0.064019,-0.705656,0.342477,0.686547,-0.657523, -0.344986,-0.057446,-0.936848,0.414078,0.686547,-0.700484, -0.344117,-0.092655,-0.934344,0.411687,0.769563,-0.706063, -0.705656,-0.064019,-0.705656,0.342477,0.686547,-0.657523, -0.344117,-0.092655,-0.934344,0.411687,0.769563,-0.706063, -0.703449,-0.101581,-0.703449,0.338094,0.769563,-0.661906, -0.344986,-0.057446,-0.936848,0.414078,0.686547,-0.700484, 0,-0.051663,-0.998665,0.5,0.686547,-0.714805, 0,-0.084903,-0.996389,0.5,0.769563,-0.720781, 0,-0.084903,-0.996389,0.5,0.769563,-0.720781, -0.344117,-0.092655,-0.934344,0.411687,0.769563,-0.706063, -0.344986,-0.057446,-0.936848,0.414078,0.686547,-0.700484, 0,-0.132313,-0.991208,0.5,0.838781,-0.728516, -0.342105,-0.14479,-0.92844,0.408594,0.838781,-0.713281, -0.344117,-0.092655,-0.934344,0.411687,0.769563,-0.706063, 0,-0.132313,-0.991208,0.5,0.838781,-0.728516, -0.344117,-0.092655,-0.934344,0.411687,0.769563,-0.706063, 0,-0.084903,-0.996389,0.5,0.769563,-0.720781, -0.707107,-0.000155,-0.707107,0.346344,0.494688,-0.653656, -0.285548,-0.000151,-0.958364,0.416187,0.494688,-0.695563, -0.345395,-0.028246,-0.938032,0.415625,0.593625,-0.696875, -0.707107,-0.000155,-0.707107,0.346344,0.494688,-0.653656, -0.345395,-0.028246,-0.938032,0.415625,0.593625,-0.696875, -0.706706,-0.033664,-0.706706,0.345313,0.593625,-0.654688, -0.285548,-0.000151,-0.958364,0.416187,0.494688,-0.695563, 0,-0.00015,-1,0.5,0.494688,-0.709531, 0,-0.023338,-0.999728,0.5,0.593625,-0.710938, 0,-0.023338,-0.999728,0.5,0.593625,-0.710938, -0.345395,-0.028246,-0.938032,0.415625,0.593625,-0.696875, -0.285548,-0.000151,-0.958364,0.416187,0.494688,-0.695563, 0,-0.051663,-0.998665,0.5,0.686547,-0.714805, -0.344986,-0.057446,-0.936848,0.414078,0.686547,-0.700484, -0.345395,-0.028246,-0.938032,0.415625,0.593625,-0.696875, 0,-0.051663,-0.998665,0.5,0.686547,-0.714805, -0.345395,-0.028246,-0.938032,0.415625,0.593625,-0.696875, 0,-0.023338,-0.999728,0.5,0.593625,-0.710938, -0.344986,-0.057446,-0.936848,0.414078,0.686547,-0.700484, -0.705656,-0.064019,-0.705656,0.342477,0.686547,-0.657523, -0.706706,-0.033664,-0.706706,0.345313,0.593625,-0.654688, -0.706706,-0.033664,-0.706706,0.345313,0.593625,-0.654688, -0.345395,-0.028246,-0.938032,0.415625,0.593625,-0.696875, -0.344986,-0.057446,-0.936848,0.414078,0.686547,-0.700484, 0.707107,-0.000155,-0.707107,0.653656,0.494688,-0.653656, 0.706706,-0.033664,-0.706706,0.654688,0.593625,-0.654688, 0.345395,-0.028246,-0.938032,0.584375,0.593625,-0.696875, 0.707107,-0.000155,-0.707107,0.653656,0.494688,-0.653656, 0.345395,-0.028246,-0.938032,0.584375,0.593625,-0.696875, 0.285548,-0.000151,-0.958364,0.583813,0.494688,-0.695563, 0.706706,-0.033664,-0.706706,0.654688,0.593625,-0.654688, 0.705656,-0.064019,-0.705656,0.657523,0.686547,-0.657523, 0.344986,-0.057446,-0.936848,0.585922,0.686547,-0.700484, 0.344986,-0.057446,-0.936848,0.585922,0.686547,-0.700484, 0.345395,-0.028246,-0.938032,0.584375,0.593625,-0.696875, 0.706706,-0.033664,-0.706706,0.654688,0.593625,-0.654688, 0,-0.051663,-0.998665,0.5,0.686547,-0.714805, 0,-0.023338,-0.999728,0.5,0.593625,-0.710938, 0.345395,-0.028246,-0.938032,0.584375,0.593625,-0.696875, 0,-0.051663,-0.998665,0.5,0.686547,-0.714805, 0.345395,-0.028246,-0.938032,0.584375,0.593625,-0.696875, 0.344986,-0.057446,-0.936848,0.585922,0.686547,-0.700484, 0,-0.023338,-0.999728,0.5,0.593625,-0.710938, 0,-0.00015,-1,0.5,0.494688,-0.709531, 0.285548,-0.000151,-0.958364,0.583813,0.494688,-0.695563, 0.285548,-0.000151,-0.958364,0.583813,0.494688,-0.695563, 0.345395,-0.028246,-0.938032,0.584375,0.593625,-0.696875, 0,-0.023338,-0.999728,0.5,0.593625,-0.710938, 0.703449,-0.101581,-0.703449,0.661906,0.769563,-0.661906, 0.698103,-0.159073,-0.698103,0.667578,0.838781,-0.667578, 0.342105,-0.14479,-0.92844,0.591406,0.838781,-0.713281, 0.342105,-0.14479,-0.92844,0.591406,0.838781,-0.713281, 0.344117,-0.092655,-0.934344,0.588313,0.769563,-0.706063, 0.703449,-0.101581,-0.703449,0.661906,0.769563,-0.661906, 0,-0.132313,-0.991208,0.5,0.838781,-0.728516, 0,-0.084903,-0.996389,0.5,0.769563,-0.720781, 0.344117,-0.092655,-0.934344,0.588313,0.769563,-0.706063, 0,-0.132313,-0.991208,0.5,0.838781,-0.728516, 0.344117,-0.092655,-0.934344,0.588313,0.769563,-0.706063, 0.342105,-0.14479,-0.92844,0.591406,0.838781,-0.713281, 0,-0.084903,-0.996389,0.5,0.769563,-0.720781, 0,-0.051663,-0.998665,0.5,0.686547,-0.714805, 0.344986,-0.057446,-0.936848,0.585922,0.686547,-0.700484, 0.344986,-0.057446,-0.936848,0.585922,0.686547,-0.700484, 0.344117,-0.092655,-0.934344,0.588313,0.769563,-0.706063, 0,-0.084903,-0.996389,0.5,0.769563,-0.720781, 0.705656,-0.064019,-0.705656,0.657523,0.686547,-0.657523, 0.703449,-0.101581,-0.703449,0.661906,0.769563,-0.661906, 0.344117,-0.092655,-0.934344,0.588313,0.769563,-0.706063, 0.705656,-0.064019,-0.705656,0.657523,0.686547,-0.657523, 0.344117,-0.092655,-0.934344,0.588313,0.769563,-0.706063, 0.344986,-0.057446,-0.936848,0.585922,0.686547,-0.700484, -0.703449,-0.101581,0.703449,0.338094,0.769563,-0.338094, -0.698103,-0.159073,0.698103,0.332422,0.838781,-0.332422, -0.342105,-0.144791,0.92844,0.408594,0.838781,-0.286719, -0.342105,-0.144791,0.92844,0.408594,0.838781,-0.286719, -0.344116,-0.092655,0.934344,0.411687,0.769563,-0.293938, -0.703449,-0.101581,0.703449,0.338094,0.769563,-0.338094, 0,-0.132314,0.991208,0.5,0.838781,-0.271484, 0,-0.084902,0.996389,0.5,0.769563,-0.279219, -0.344116,-0.092655,0.934344,0.411687,0.769563,-0.293938, 0,-0.132314,0.991208,0.5,0.838781,-0.271484, -0.344116,-0.092655,0.934344,0.411687,0.769563,-0.293938, -0.342105,-0.144791,0.92844,0.408594,0.838781,-0.286719, 0,-0.084902,0.996389,0.5,0.769563,-0.279219, 0,-0.051662,0.998665,0.5,0.686547,-0.285195, -0.344986,-0.057445,0.936848,0.414078,0.686547,-0.299516, -0.344986,-0.057445,0.936848,0.414078,0.686547,-0.299516, -0.344116,-0.092655,0.934344,0.411687,0.769563,-0.293938, 0,-0.084902,0.996389,0.5,0.769563,-0.279219, -0.705656,-0.064019,0.705656,0.342477,0.686547,-0.342477, -0.703449,-0.101581,0.703449,0.338094,0.769563,-0.338094, -0.344116,-0.092655,0.934344,0.411687,0.769563,-0.293938, -0.705656,-0.064019,0.705656,0.342477,0.686547,-0.342477, -0.344116,-0.092655,0.934344,0.411687,0.769563,-0.293938, -0.344986,-0.057445,0.936848,0.414078,0.686547,-0.299516, 0.342105,-0.144791,0.92844,0.591406,0.838781,-0.286719, 0.698103,-0.159073,0.698103,0.667578,0.838781,-0.332422, 0.703449,-0.101581,0.703449,0.661906,0.769563,-0.338094, 0.703449,-0.101581,0.703449,0.661906,0.769563,-0.338094, 0.344116,-0.092655,0.934344,0.588313,0.769563,-0.293938, 0.342105,-0.144791,0.92844,0.591406,0.838781,-0.286719, 0.705656,-0.064019,0.705656,0.657523,0.686547,-0.342477, 0.344986,-0.057445,0.936848,0.585922,0.686547,-0.299516, 0.344116,-0.092655,0.934344,0.588313,0.769563,-0.293938, 0.705656,-0.064019,0.705656,0.657523,0.686547,-0.342477, 0.344116,-0.092655,0.934344,0.588313,0.769563,-0.293938, 0.703449,-0.101581,0.703449,0.661906,0.769563,-0.338094, 0.344986,-0.057445,0.936848,0.585922,0.686547,-0.299516, 0,-0.051662,0.998665,0.5,0.686547,-0.285195, 0,-0.084902,0.996389,0.5,0.769563,-0.279219, 0,-0.084902,0.996389,0.5,0.769563,-0.279219, 0.344116,-0.092655,0.934344,0.588313,0.769563,-0.293938, 0.344986,-0.057445,0.936848,0.585922,0.686547,-0.299516, 0,-0.132314,0.991208,0.5,0.838781,-0.271484, 0.342105,-0.144791,0.92844,0.591406,0.838781,-0.286719, 0.344116,-0.092655,0.934344,0.588313,0.769563,-0.293938, 0,-0.132314,0.991208,0.5,0.838781,-0.271484, 0.344116,-0.092655,0.934344,0.588313,0.769563,-0.293938, 0,-0.084902,0.996389,0.5,0.769563,-0.279219, 0.707107,-0.000155,0.707107,0.653656,0.494688,-0.346344, 0.285548,-0.000151,0.958364,0.583813,0.494688,-0.304437, 0.345395,-0.028246,0.938032,0.584375,0.593625,-0.303125, 0.707107,-0.000155,0.707107,0.653656,0.494688,-0.346344, 0.345395,-0.028246,0.938032,0.584375,0.593625,-0.303125, 0.706706,-0.033664,0.706706,0.654688,0.593625,-0.345313, 0.285548,-0.000151,0.958364,0.583813,0.494688,-0.304437, 0,-0.00015,1,0.5,0.494688,-0.290469, 0,-0.023338,0.999728,0.5,0.593625,-0.289063, 0,-0.023338,0.999728,0.5,0.593625,-0.289063, 0.345395,-0.028246,0.938032,0.584375,0.593625,-0.303125, 0.285548,-0.000151,0.958364,0.583813,0.494688,-0.304437, 0,-0.051662,0.998665,0.5,0.686547,-0.285195, 0.344986,-0.057445,0.936848,0.585922,0.686547,-0.299516, 0.345395,-0.028246,0.938032,0.584375,0.593625,-0.303125, 0,-0.051662,0.998665,0.5,0.686547,-0.285195, 0.345395,-0.028246,0.938032,0.584375,0.593625,-0.303125, 0,-0.023338,0.999728,0.5,0.593625,-0.289063, 0.344986,-0.057445,0.936848,0.585922,0.686547,-0.299516, 0.705656,-0.064019,0.705656,0.657523,0.686547,-0.342477, 0.706706,-0.033664,0.706706,0.654688,0.593625,-0.345313, 0.706706,-0.033664,0.706706,0.654688,0.593625,-0.345313, 0.345395,-0.028246,0.938032,0.584375,0.593625,-0.303125, 0.344986,-0.057445,0.936848,0.585922,0.686547,-0.299516, -0.707107,-0.000155,0.707107,0.346344,0.494688,-0.346344, -0.706706,-0.033664,0.706706,0.345313,0.593625,-0.345313, -0.345395,-0.028246,0.938032,0.415625,0.593625,-0.303125, -0.707107,-0.000155,0.707107,0.346344,0.494688,-0.346344, -0.345395,-0.028246,0.938032,0.415625,0.593625,-0.303125, -0.285548,-0.000151,0.958364,0.416187,0.494688,-0.304437, -0.706706,-0.033664,0.706706,0.345313,0.593625,-0.345313, -0.705656,-0.064019,0.705656,0.342477,0.686547,-0.342477, -0.344986,-0.057445,0.936848,0.414078,0.686547,-0.299516, -0.344986,-0.057445,0.936848,0.414078,0.686547,-0.299516, -0.345395,-0.028246,0.938032,0.415625,0.593625,-0.303125, -0.706706,-0.033664,0.706706,0.345313,0.593625,-0.345313, 0,-0.051662,0.998665,0.5,0.686547,-0.285195, 0,-0.023338,0.999728,0.5,0.593625,-0.289063, -0.345395,-0.028246,0.938032,0.415625,0.593625,-0.303125, 0,-0.051662,0.998665,0.5,0.686547,-0.285195, -0.345395,-0.028246,0.938032,0.415625,0.593625,-0.303125, -0.344986,-0.057445,0.936848,0.414078,0.686547,-0.299516, 0,-0.023338,0.999728,0.5,0.593625,-0.289063, 0,-0.00015,1,0.5,0.494688,-0.290469, -0.285548,-0.000151,0.958364,0.416187,0.494688,-0.304437, -0.285548,-0.000151,0.958364,0.416187,0.494688,-0.304437, -0.345395,-0.028246,0.938032,0.415625,0.593625,-0.303125, 0,-0.023338,0.999728,0.5,0.593625,-0.289063, -0.703449,-0.101581,-0.703449,0.338094,0.769563,-0.661906, -0.698103,-0.159073,-0.698103,0.332422,0.838781,-0.667578, -0.92844,-0.144791,-0.342105,0.286719,0.838781,-0.591406, -0.92844,-0.144791,-0.342105,0.286719,0.838781,-0.591406, -0.934344,-0.092655,-0.344116,0.293938,0.769563,-0.588313, -0.703449,-0.101581,-0.703449,0.338094,0.769563,-0.661906, -0.991208,-0.132314,0,0.271484,0.838781,-0.5, -0.996389,-0.084902,0,0.279219,0.769563,-0.5, -0.934344,-0.092655,-0.344116,0.293938,0.769563,-0.588313, -0.991208,-0.132314,0,0.271484,0.838781,-0.5, -0.934344,-0.092655,-0.344116,0.293938,0.769563,-0.588313, -0.92844,-0.144791,-0.342105,0.286719,0.838781,-0.591406, -0.996389,-0.084902,0,0.279219,0.769563,-0.5, -0.998665,-0.051662,0,0.285195,0.686547,-0.5, -0.936848,-0.057445,-0.344986,0.299516,0.686547,-0.585922, -0.936848,-0.057445,-0.344986,0.299516,0.686547,-0.585922, -0.934344,-0.092655,-0.344116,0.293938,0.769563,-0.588313, -0.996389,-0.084902,0,0.279219,0.769563,-0.5, -0.705656,-0.064019,-0.705656,0.342477,0.686547,-0.657523, -0.703449,-0.101581,-0.703449,0.338094,0.769563,-0.661906, -0.934344,-0.092655,-0.344116,0.293938,0.769563,-0.588313, -0.705656,-0.064019,-0.705656,0.342477,0.686547,-0.657523, -0.934344,-0.092655,-0.344116,0.293938,0.769563,-0.588313, -0.936848,-0.057445,-0.344986,0.299516,0.686547,-0.585922, -0.92844,-0.144791,0.342105,0.286719,0.838781,-0.408594, -0.698103,-0.159073,0.698103,0.332422,0.838781,-0.332422, -0.703449,-0.101581,0.703449,0.338094,0.769563,-0.338094, -0.703449,-0.101581,0.703449,0.338094,0.769563,-0.338094, -0.934344,-0.092655,0.344116,0.293938,0.769563,-0.411687, -0.92844,-0.144791,0.342105,0.286719,0.838781,-0.408594, -0.705656,-0.064019,0.705656,0.342477,0.686547,-0.342477, -0.936848,-0.057445,0.344986,0.299516,0.686547,-0.414078, -0.934344,-0.092655,0.344116,0.293938,0.769563,-0.411687, -0.705656,-0.064019,0.705656,0.342477,0.686547,-0.342477, -0.934344,-0.092655,0.344116,0.293938,0.769563,-0.411687, -0.703449,-0.101581,0.703449,0.338094,0.769563,-0.338094, -0.936848,-0.057445,0.344986,0.299516,0.686547,-0.414078, -0.998665,-0.051662,0,0.285195,0.686547,-0.5, -0.996389,-0.084902,0,0.279219,0.769563,-0.5, -0.996389,-0.084902,0,0.279219,0.769563,-0.5, -0.934344,-0.092655,0.344116,0.293938,0.769563,-0.411687, -0.936848,-0.057445,0.344986,0.299516,0.686547,-0.414078, -0.991208,-0.132314,0,0.271484,0.838781,-0.5, -0.92844,-0.144791,0.342105,0.286719,0.838781,-0.408594, -0.934344,-0.092655,0.344116,0.293938,0.769563,-0.411687, -0.991208,-0.132314,0,0.271484,0.838781,-0.5, -0.934344,-0.092655,0.344116,0.293938,0.769563,-0.411687, -0.996389,-0.084902,0,0.279219,0.769563,-0.5, -0.707107,-0.000155,0.707107,0.346344,0.494688,-0.346344, -0.958364,-0.000151,0.285548,0.304437,0.494688,-0.416187, -0.938032,-0.028246,0.345395,0.303125,0.593625,-0.415625, -0.707107,-0.000155,0.707107,0.346344,0.494688,-0.346344, -0.938032,-0.028246,0.345395,0.303125,0.593625,-0.415625, -0.706706,-0.033664,0.706706,0.345313,0.593625,-0.345313, -0.958364,-0.000151,0.285548,0.304437,0.494688,-0.416187, -1,-0.00015,0,0.290469,0.494688,-0.5, -0.999728,-0.023338,0,0.289063,0.593625,-0.5, -0.999728,-0.023338,0,0.289063,0.593625,-0.5, -0.938032,-0.028246,0.345395,0.303125,0.593625,-0.415625, -0.958364,-0.000151,0.285548,0.304437,0.494688,-0.416187, -0.998665,-0.051662,0,0.285195,0.686547,-0.5, -0.936848,-0.057445,0.344986,0.299516,0.686547,-0.414078, -0.938032,-0.028246,0.345395,0.303125,0.593625,-0.415625, -0.998665,-0.051662,0,0.285195,0.686547,-0.5, -0.938032,-0.028246,0.345395,0.303125,0.593625,-0.415625, -0.999728,-0.023338,0,0.289063,0.593625,-0.5, -0.936848,-0.057445,0.344986,0.299516,0.686547,-0.414078, -0.705656,-0.064019,0.705656,0.342477,0.686547,-0.342477, -0.706706,-0.033664,0.706706,0.345313,0.593625,-0.345313, -0.706706,-0.033664,0.706706,0.345313,0.593625,-0.345313, -0.938032,-0.028246,0.345395,0.303125,0.593625,-0.415625, -0.936848,-0.057445,0.344986,0.299516,0.686547,-0.414078, -0.707107,-0.000155,-0.707107,0.346344,0.494688,-0.653656, -0.706706,-0.033664,-0.706706,0.345313,0.593625,-0.654688, -0.938032,-0.028246,-0.345395,0.303125,0.593625,-0.584375, -0.707107,-0.000155,-0.707107,0.346344,0.494688,-0.653656, -0.938032,-0.028246,-0.345395,0.303125,0.593625,-0.584375, -0.958364,-0.000151,-0.285548,0.304437,0.494688,-0.583813, -0.706706,-0.033664,-0.706706,0.345313,0.593625,-0.654688, -0.705656,-0.064019,-0.705656,0.342477,0.686547,-0.657523, -0.936848,-0.057445,-0.344986,0.299516,0.686547,-0.585922, -0.936848,-0.057445,-0.344986,0.299516,0.686547,-0.585922, -0.938032,-0.028246,-0.345395,0.303125,0.593625,-0.584375, -0.706706,-0.033664,-0.706706,0.345313,0.593625,-0.654688, -0.998665,-0.051662,0,0.285195,0.686547,-0.5, -0.999728,-0.023338,0,0.289063,0.593625,-0.5, -0.938032,-0.028246,-0.345395,0.303125,0.593625,-0.584375, -0.998665,-0.051662,0,0.285195,0.686547,-0.5, -0.938032,-0.028246,-0.345395,0.303125,0.593625,-0.584375, -0.936848,-0.057445,-0.344986,0.299516,0.686547,-0.585922, -0.999728,-0.023338,0,0.289063,0.593625,-0.5, -1,-0.00015,0,0.290469,0.494688,-0.5, -0.958364,-0.000151,-0.285548,0.304437,0.494688,-0.583813, -0.958364,-0.000151,-0.285548,0.304437,0.494688,-0.583813, -0.938032,-0.028246,-0.345395,0.303125,0.593625,-0.584375, -0.999728,-0.023338,0,0.289063,0.593625,-0.5, -0.703939,0.094548,-0.703939,0.338094,0.207062,-0.661906, -0.699155,0.149544,-0.699156,0.332422,0.132531,-0.667578, -0.342523,0.135808,-0.929642,0.408594,0.132531,-0.713281, -0.342523,0.135808,-0.929642,0.408594,0.132531,-0.713281, -0.344301,0.086306,-0.934884,0.411687,0.207062,-0.706063, -0.703939,0.094548,-0.703939,0.338094,0.207062,-0.661906, 0,0.12379,-0.992308,0.5,0.132531,-0.728516, 0,0.079157,-0.996862,0.5,0.207062,-0.720781, -0.344301,0.086306,-0.934884,0.411687,0.207062,-0.706063, 0,0.12379,-0.992308,0.5,0.132531,-0.728516, -0.344301,0.086306,-0.934884,0.411687,0.207062,-0.706063, -0.342523,0.135808,-0.929642,0.408594,0.132531,-0.713281, 0,0.079157,-0.996862,0.5,0.207062,-0.720781, 0,0.048741,-0.998811,0.5,0.295922,-0.714805, -0.345045,0.054036,-0.937029,0.414078,0.295922,-0.700484, -0.345045,0.054036,-0.937029,0.414078,0.295922,-0.700484, -0.344301,0.086306,-0.934884,0.411687,0.207062,-0.706063, 0,0.079157,-0.996862,0.5,0.207062,-0.720781, -0.70583,0.060067,-0.70583,0.342477,0.295922,-0.657523, -0.703939,0.094548,-0.703939,0.338094,0.207062,-0.661906, -0.344301,0.086306,-0.934884,0.411687,0.207062,-0.706063, -0.70583,0.060067,-0.70583,0.342477,0.295922,-0.657523, -0.344301,0.086306,-0.934884,0.411687,0.207062,-0.706063, -0.345045,0.054036,-0.937029,0.414078,0.295922,-0.700484, 0.342523,0.135808,-0.929642,0.591406,0.132531,-0.713281, 0.699155,0.149544,-0.699155,0.667578,0.132531,-0.667578, 0.703939,0.094547,-0.703939,0.661906,0.207062,-0.661906, 0.703939,0.094547,-0.703939,0.661906,0.207062,-0.661906, 0.344301,0.086306,-0.934884,0.588313,0.207062,-0.706063, 0.342523,0.135808,-0.929642,0.591406,0.132531,-0.713281, 0.70583,0.060067,-0.70583,0.657523,0.295922,-0.657523, 0.345045,0.054036,-0.937029,0.585922,0.295922,-0.700484, 0.344301,0.086306,-0.934884,0.588313,0.207062,-0.706063, 0.70583,0.060067,-0.70583,0.657523,0.295922,-0.657523, 0.344301,0.086306,-0.934884,0.588313,0.207062,-0.706063, 0.703939,0.094547,-0.703939,0.661906,0.207062,-0.661906, 0.345045,0.054036,-0.937029,0.585922,0.295922,-0.700484, 0,0.048741,-0.998811,0.5,0.295922,-0.714805, 0,0.079157,-0.996862,0.5,0.207062,-0.720781, 0,0.079157,-0.996862,0.5,0.207062,-0.720781, 0.344301,0.086306,-0.934884,0.588313,0.207062,-0.706063, 0.345045,0.054036,-0.937029,0.585922,0.295922,-0.700484, 0,0.12379,-0.992308,0.5,0.132531,-0.728516, 0.342523,0.135808,-0.929642,0.591406,0.132531,-0.713281, 0.344301,0.086306,-0.934884,0.588313,0.207062,-0.706063, 0,0.12379,-0.992308,0.5,0.132531,-0.728516, 0.344301,0.086306,-0.934884,0.588313,0.207062,-0.706063, 0,0.079157,-0.996862,0.5,0.207062,-0.720781, 0.707107,-0.000155,-0.707107,0.653656,0.494688,-0.653656, 0.285548,-0.000151,-0.958364,0.583813,0.494688,-0.695563, 0.345404,0.027067,-0.938064,0.584375,0.393625,-0.696875, 0.707107,-0.000155,-0.707107,0.653656,0.494688,-0.653656, 0.345404,0.027067,-0.938064,0.584375,0.393625,-0.696875, 0.706741,0.032156,-0.706741,0.654688,0.393625,-0.654688, 0.285548,-0.000151,-0.958364,0.583813,0.494688,-0.695563, 0,-0.00015,-1,0.5,0.494688,-0.709531, 0,0.022461,-0.999748,0.5,0.393625,-0.710938, 0,0.022461,-0.999748,0.5,0.393625,-0.710938, 0.345404,0.027067,-0.938064,0.584375,0.393625,-0.696875, 0.285548,-0.000151,-0.958364,0.583813,0.494688,-0.695563, 0,0.048741,-0.998811,0.5,0.295922,-0.714805, 0.345045,0.054036,-0.937029,0.585922,0.295922,-0.700484, 0.345404,0.027067,-0.938064,0.584375,0.393625,-0.696875, 0,0.048741,-0.998811,0.5,0.295922,-0.714805, 0.345404,0.027067,-0.938064,0.584375,0.393625,-0.696875, 0,0.022461,-0.999748,0.5,0.393625,-0.710938, 0.345045,0.054036,-0.937029,0.585922,0.295922,-0.700484, 0.70583,0.060067,-0.70583,0.657523,0.295922,-0.657523, 0.706741,0.032156,-0.706741,0.654688,0.393625,-0.654688, 0.706741,0.032156,-0.706741,0.654688,0.393625,-0.654688, 0.345404,0.027067,-0.938064,0.584375,0.393625,-0.696875, 0.345045,0.054036,-0.937029,0.585922,0.295922,-0.700484, -0.707107,-0.000155,-0.707107,0.346344,0.494688,-0.653656, -0.706741,0.032156,-0.706741,0.345313,0.393625,-0.654688, -0.345404,0.027067,-0.938064,0.415625,0.393625,-0.696875, -0.707107,-0.000155,-0.707107,0.346344,0.494688,-0.653656, -0.345404,0.027067,-0.938064,0.415625,0.393625,-0.696875, -0.285548,-0.000151,-0.958364,0.416187,0.494688,-0.695563, -0.706741,0.032156,-0.706741,0.345313,0.393625,-0.654688, -0.70583,0.060067,-0.70583,0.342477,0.295922,-0.657523, -0.345045,0.054036,-0.937029,0.414078,0.295922,-0.700484, -0.345045,0.054036,-0.937029,0.414078,0.295922,-0.700484, -0.345404,0.027067,-0.938064,0.415625,0.393625,-0.696875, -0.706741,0.032156,-0.706741,0.345313,0.393625,-0.654688, 0,0.048741,-0.998811,0.5,0.295922,-0.714805, 0,0.022461,-0.999748,0.5,0.393625,-0.710938, -0.345404,0.027067,-0.938064,0.415625,0.393625,-0.696875, 0,0.048741,-0.998811,0.5,0.295922,-0.714805, -0.345404,0.027067,-0.938064,0.415625,0.393625,-0.696875, -0.345045,0.054036,-0.937029,0.414078,0.295922,-0.700484, 0,0.022461,-0.999748,0.5,0.393625,-0.710938, 0,-0.00015,-1,0.5,0.494688,-0.709531, -0.285548,-0.000151,-0.958364,0.416187,0.494688,-0.695563, -0.285548,-0.000151,-0.958364,0.416187,0.494688,-0.695563, -0.345404,0.027067,-0.938064,0.415625,0.393625,-0.696875, 0,0.022461,-0.999748,0.5,0.393625,-0.710938, -0.929642,0.135808,-0.342523,0.286719,0.132531,-0.591406, -0.699155,0.149544,-0.699156,0.332422,0.132531,-0.667578, -0.703939,0.094548,-0.703939,0.338094,0.207062,-0.661906, -0.703939,0.094548,-0.703939,0.338094,0.207062,-0.661906, -0.934884,0.086306,-0.344301,0.293938,0.207062,-0.588313, -0.929642,0.135808,-0.342523,0.286719,0.132531,-0.591406, -0.70583,0.060067,-0.70583,0.342477,0.295922,-0.657523, -0.937029,0.054035,-0.345045,0.299516,0.295922,-0.585922, -0.934884,0.086306,-0.344301,0.293938,0.207062,-0.588313, -0.70583,0.060067,-0.70583,0.342477,0.295922,-0.657523, -0.934884,0.086306,-0.344301,0.293938,0.207062,-0.588313, -0.703939,0.094548,-0.703939,0.338094,0.207062,-0.661906, -0.937029,0.054035,-0.345045,0.299516,0.295922,-0.585922, -0.998811,0.04874,0,0.285195,0.295922,-0.5, -0.996862,0.079157,0,0.279219,0.207062,-0.5, -0.996862,0.079157,0,0.279219,0.207062,-0.5, -0.934884,0.086306,-0.344301,0.293938,0.207062,-0.588313, -0.937029,0.054035,-0.345045,0.299516,0.295922,-0.585922, -0.992308,0.12379,0,0.271484,0.132531,-0.5, -0.929642,0.135808,-0.342523,0.286719,0.132531,-0.591406, -0.934884,0.086306,-0.344301,0.293938,0.207062,-0.588313, -0.992308,0.12379,0,0.271484,0.132531,-0.5, -0.934884,0.086306,-0.344301,0.293938,0.207062,-0.588313, -0.996862,0.079157,0,0.279219,0.207062,-0.5, -0.707107,-0.000155,-0.707107,0.346344,0.494688,-0.653656, -0.958364,-0.000151,-0.285548,0.304437,0.494688,-0.583813, -0.938064,0.027067,-0.345404,0.303125,0.393625,-0.584375, -0.707107,-0.000155,-0.707107,0.346344,0.494688,-0.653656, -0.938064,0.027067,-0.345404,0.303125,0.393625,-0.584375, -0.706741,0.032156,-0.706741,0.345313,0.393625,-0.654688, -0.958364,-0.000151,-0.285548,0.304437,0.494688,-0.583813, -1,-0.00015,0,0.290469,0.494688,-0.5, -0.999748,0.022461,0,0.289063,0.393625,-0.5, -0.999748,0.022461,0,0.289063,0.393625,-0.5, -0.938064,0.027067,-0.345404,0.303125,0.393625,-0.584375, -0.958364,-0.000151,-0.285548,0.304437,0.494688,-0.583813, -0.998811,0.04874,0,0.285195,0.295922,-0.5, -0.937029,0.054035,-0.345045,0.299516,0.295922,-0.585922, -0.938064,0.027067,-0.345404,0.303125,0.393625,-0.584375, -0.998811,0.04874,0,0.285195,0.295922,-0.5, -0.938064,0.027067,-0.345404,0.303125,0.393625,-0.584375, -0.999748,0.022461,0,0.289063,0.393625,-0.5, -0.937029,0.054035,-0.345045,0.299516,0.295922,-0.585922, -0.70583,0.060067,-0.70583,0.342477,0.295922,-0.657523, -0.706741,0.032156,-0.706741,0.345313,0.393625,-0.654688, -0.706741,0.032156,-0.706741,0.345313,0.393625,-0.654688, -0.938064,0.027067,-0.345404,0.303125,0.393625,-0.584375, -0.937029,0.054035,-0.345045,0.299516,0.295922,-0.585922, -0.707107,-0.000155,0.707107,0.346344,0.494688,-0.346344, -0.706741,0.032156,0.706741,0.345313,0.393625,-0.345313, -0.938064,0.027067,0.345404,0.303125,0.393625,-0.415625, -0.707107,-0.000155,0.707107,0.346344,0.494688,-0.346344, -0.938064,0.027067,0.345404,0.303125,0.393625,-0.415625, -0.958364,-0.000151,0.285548,0.304437,0.494688,-0.416187, -0.706741,0.032156,0.706741,0.345313,0.393625,-0.345313, -0.70583,0.060067,0.70583,0.342477,0.295922,-0.342477, -0.937029,0.054035,0.345045,0.299516,0.295922,-0.414078, -0.937029,0.054035,0.345045,0.299516,0.295922,-0.414078, -0.938064,0.027067,0.345404,0.303125,0.393625,-0.415625, -0.706741,0.032156,0.706741,0.345313,0.393625,-0.345313, -0.998811,0.04874,0,0.285195,0.295922,-0.5, -0.999748,0.022461,0,0.289063,0.393625,-0.5, -0.938064,0.027067,0.345404,0.303125,0.393625,-0.415625, -0.998811,0.04874,0,0.285195,0.295922,-0.5, -0.938064,0.027067,0.345404,0.303125,0.393625,-0.415625, -0.937029,0.054035,0.345045,0.299516,0.295922,-0.414078, -0.999748,0.022461,0,0.289063,0.393625,-0.5, -1,-0.00015,0,0.290469,0.494688,-0.5, -0.958364,-0.000151,0.285548,0.304437,0.494688,-0.416187, -0.958364,-0.000151,0.285548,0.304437,0.494688,-0.416187, -0.938064,0.027067,0.345404,0.303125,0.393625,-0.415625, -0.999748,0.022461,0,0.289063,0.393625,-0.5, -0.703939,0.094548,0.703939,0.338094,0.207062,-0.338094, -0.699155,0.149545,0.699155,0.332422,0.132531,-0.332422, -0.929642,0.135808,0.342523,0.286719,0.132531,-0.408594, -0.929642,0.135808,0.342523,0.286719,0.132531,-0.408594, -0.934884,0.086306,0.344301,0.293938,0.207062,-0.411687, -0.703939,0.094548,0.703939,0.338094,0.207062,-0.338094, -0.992308,0.12379,0,0.271484,0.132531,-0.5, -0.996862,0.079157,0,0.279219,0.207062,-0.5, -0.934884,0.086306,0.344301,0.293938,0.207062,-0.411687, -0.992308,0.12379,0,0.271484,0.132531,-0.5, -0.934884,0.086306,0.344301,0.293938,0.207062,-0.411687, -0.929642,0.135808,0.342523,0.286719,0.132531,-0.408594, -0.996862,0.079157,0,0.279219,0.207062,-0.5, -0.998811,0.04874,0,0.285195,0.295922,-0.5, -0.937029,0.054035,0.345045,0.299516,0.295922,-0.414078, -0.937029,0.054035,0.345045,0.299516,0.295922,-0.414078, -0.934884,0.086306,0.344301,0.293938,0.207062,-0.411687, -0.996862,0.079157,0,0.279219,0.207062,-0.5, -0.70583,0.060067,0.70583,0.342477,0.295922,-0.342477, -0.703939,0.094548,0.703939,0.338094,0.207062,-0.338094, -0.934884,0.086306,0.344301,0.293938,0.207062,-0.411687, -0.70583,0.060067,0.70583,0.342477,0.295922,-0.342477, -0.934884,0.086306,0.344301,0.293938,0.207062,-0.411687, -0.937029,0.054035,0.345045,0.299516,0.295922,-0.414078, -0.342523,0.135808,0.929642,0.408594,0.132531,-0.286719, -0.699155,0.149545,0.699155,0.332422,0.132531,-0.332422, -0.703939,0.094548,0.703939,0.338094,0.207062,-0.338094, -0.703939,0.094548,0.703939,0.338094,0.207062,-0.338094, -0.344301,0.086306,0.934884,0.411687,0.207062,-0.293938, -0.342523,0.135808,0.929642,0.408594,0.132531,-0.286719, -0.70583,0.060067,0.70583,0.342477,0.295922,-0.342477, -0.345045,0.054035,0.937029,0.414078,0.295922,-0.299516, -0.344301,0.086306,0.934884,0.411687,0.207062,-0.293938, -0.70583,0.060067,0.70583,0.342477,0.295922,-0.342477, -0.344301,0.086306,0.934884,0.411687,0.207062,-0.293938, -0.703939,0.094548,0.703939,0.338094,0.207062,-0.338094, -0.345045,0.054035,0.937029,0.414078,0.295922,-0.299516, 0,0.04874,0.998811,0.5,0.295922,-0.285195, 0,0.079157,0.996862,0.5,0.207062,-0.279219, 0,0.079157,0.996862,0.5,0.207062,-0.279219, -0.344301,0.086306,0.934884,0.411687,0.207062,-0.293938, -0.345045,0.054035,0.937029,0.414078,0.295922,-0.299516, 0,0.12379,0.992308,0.5,0.132531,-0.271484, -0.342523,0.135808,0.929642,0.408594,0.132531,-0.286719, -0.344301,0.086306,0.934884,0.411687,0.207062,-0.293938, 0,0.12379,0.992308,0.5,0.132531,-0.271484, -0.344301,0.086306,0.934884,0.411687,0.207062,-0.293938, 0,0.079157,0.996862,0.5,0.207062,-0.279219, -0.707107,-0.000155,0.707107,0.346344,0.494688,-0.346344, -0.285548,-0.000151,0.958364,0.416187,0.494688,-0.304437, -0.345404,0.027067,0.938064,0.415625,0.393625,-0.303125, -0.707107,-0.000155,0.707107,0.346344,0.494688,-0.346344, -0.345404,0.027067,0.938064,0.415625,0.393625,-0.303125, -0.706741,0.032156,0.706741,0.345313,0.393625,-0.345313, -0.285548,-0.000151,0.958364,0.416187,0.494688,-0.304437, 0,-0.00015,1,0.5,0.494688,-0.290469, 0,0.022461,0.999748,0.5,0.393625,-0.289063, 0,0.022461,0.999748,0.5,0.393625,-0.289063, -0.345404,0.027067,0.938064,0.415625,0.393625,-0.303125, -0.285548,-0.000151,0.958364,0.416187,0.494688,-0.304437, 0,0.04874,0.998811,0.5,0.295922,-0.285195, -0.345045,0.054035,0.937029,0.414078,0.295922,-0.299516, -0.345404,0.027067,0.938064,0.415625,0.393625,-0.303125, 0,0.04874,0.998811,0.5,0.295922,-0.285195, -0.345404,0.027067,0.938064,0.415625,0.393625,-0.303125, 0,0.022461,0.999748,0.5,0.393625,-0.289063, -0.345045,0.054035,0.937029,0.414078,0.295922,-0.299516, -0.70583,0.060067,0.70583,0.342477,0.295922,-0.342477, -0.706741,0.032156,0.706741,0.345313,0.393625,-0.345313, -0.706741,0.032156,0.706741,0.345313,0.393625,-0.345313, -0.345404,0.027067,0.938064,0.415625,0.393625,-0.303125, -0.345045,0.054035,0.937029,0.414078,0.295922,-0.299516, 0.707107,-0.000155,0.707107,0.653656,0.494688,-0.346344, 0.706741,0.032156,0.706741,0.654688,0.393625,-0.345313, 0.345404,0.027067,0.938064,0.584375,0.393625,-0.303125, 0.707107,-0.000155,0.707107,0.653656,0.494688,-0.346344, 0.345404,0.027067,0.938064,0.584375,0.393625,-0.303125, 0.285548,-0.000151,0.958364,0.583813,0.494688,-0.304437, 0.706741,0.032156,0.706741,0.654688,0.393625,-0.345313, 0.70583,0.060067,0.70583,0.657523,0.295922,-0.342477, 0.345045,0.054035,0.937029,0.585922,0.295922,-0.299516, 0.345045,0.054035,0.937029,0.585922,0.295922,-0.299516, 0.345404,0.027067,0.938064,0.584375,0.393625,-0.303125, 0.706741,0.032156,0.706741,0.654688,0.393625,-0.345313, 0,0.04874,0.998811,0.5,0.295922,-0.285195, 0,0.022461,0.999748,0.5,0.393625,-0.289063, 0.345404,0.027067,0.938064,0.584375,0.393625,-0.303125, 0,0.04874,0.998811,0.5,0.295922,-0.285195, 0.345404,0.027067,0.938064,0.584375,0.393625,-0.303125, 0.345045,0.054035,0.937029,0.585922,0.295922,-0.299516, 0,0.022461,0.999748,0.5,0.393625,-0.289063, 0,-0.00015,1,0.5,0.494688,-0.290469, 0.285548,-0.000151,0.958364,0.583813,0.494688,-0.304437, 0.285548,-0.000151,0.958364,0.583813,0.494688,-0.304437, 0.345404,0.027067,0.938064,0.584375,0.393625,-0.303125, 0,0.022461,0.999748,0.5,0.393625,-0.289063, 0.703939,0.094548,0.703939,0.661906,0.207062,-0.338094, 0.699156,0.149544,0.699155,0.667578,0.132531,-0.332422, 0.342523,0.135808,0.929642,0.591406,0.132531,-0.286719, 0.342523,0.135808,0.929642,0.591406,0.132531,-0.286719, 0.344301,0.086306,0.934884,0.588313,0.207062,-0.293938, 0.703939,0.094548,0.703939,0.661906,0.207062,-0.338094, 0,0.12379,0.992308,0.5,0.132531,-0.271484, 0,0.079157,0.996862,0.5,0.207062,-0.279219, 0.344301,0.086306,0.934884,0.588313,0.207062,-0.293938, 0,0.12379,0.992308,0.5,0.132531,-0.271484, 0.344301,0.086306,0.934884,0.588313,0.207062,-0.293938, 0.342523,0.135808,0.929642,0.591406,0.132531,-0.286719, 0,0.079157,0.996862,0.5,0.207062,-0.279219, 0,0.04874,0.998811,0.5,0.295922,-0.285195, 0.345045,0.054035,0.937029,0.585922,0.295922,-0.299516, 0.345045,0.054035,0.937029,0.585922,0.295922,-0.299516, 0.344301,0.086306,0.934884,0.588313,0.207062,-0.293938, 0,0.079157,0.996862,0.5,0.207062,-0.279219, 0.70583,0.060067,0.70583,0.657523,0.295922,-0.342477, 0.703939,0.094548,0.703939,0.661906,0.207062,-0.338094, 0.344301,0.086306,0.934884,0.588313,0.207062,-0.293938, 0.70583,0.060067,0.70583,0.657523,0.295922,-0.342477, 0.344301,0.086306,0.934884,0.588313,0.207062,-0.293938, 0.345045,0.054035,0.937029,0.585922,0.295922,-0.299516, 0.929642,0.135808,0.342523,0.713281,0.132531,-0.408594, 0.699156,0.149544,0.699155,0.667578,0.132531,-0.332422, 0.703939,0.094548,0.703939,0.661906,0.207062,-0.338094, 0.703939,0.094548,0.703939,0.661906,0.207062,-0.338094, 0.934884,0.086306,0.344301,0.706063,0.207062,-0.411687, 0.929642,0.135808,0.342523,0.713281,0.132531,-0.408594, 0.70583,0.060067,0.70583,0.657523,0.295922,-0.342477, 0.937029,0.054036,0.345045,0.700484,0.295922,-0.414078, 0.934884,0.086306,0.344301,0.706063,0.207062,-0.411687, 0.70583,0.060067,0.70583,0.657523,0.295922,-0.342477, 0.934884,0.086306,0.344301,0.706063,0.207062,-0.411687, 0.703939,0.094548,0.703939,0.661906,0.207062,-0.338094, 0.937029,0.054036,0.345045,0.700484,0.295922,-0.414078, 0.998811,0.048741,0,0.714805,0.295922,-0.5, 0.996862,0.079157,0,0.720781,0.207062,-0.5, 0.996862,0.079157,0,0.720781,0.207062,-0.5, 0.934884,0.086306,0.344301,0.706063,0.207062,-0.411687, 0.937029,0.054036,0.345045,0.700484,0.295922,-0.414078, 0.992308,0.12379,0,0.728516,0.132531,-0.5, 0.929642,0.135808,0.342523,0.713281,0.132531,-0.408594, 0.934884,0.086306,0.344301,0.706063,0.207062,-0.411687, 0.992308,0.12379,0,0.728516,0.132531,-0.5, 0.934884,0.086306,0.344301,0.706063,0.207062,-0.411687, 0.996862,0.079157,0,0.720781,0.207062,-0.5, 0.707107,-0.000155,0.707107,0.653656,0.494688,-0.346344, 0.958364,-0.000151,0.285548,0.695563,0.494688,-0.416187, 0.938064,0.027067,0.345404,0.696875,0.393625,-0.415625, 0.707107,-0.000155,0.707107,0.653656,0.494688,-0.346344, 0.938064,0.027067,0.345404,0.696875,0.393625,-0.415625, 0.706741,0.032156,0.706741,0.654688,0.393625,-0.345313, 0.958364,-0.000151,0.285548,0.695563,0.494688,-0.416187, 1,-0.00015,0,0.709531,0.494688,-0.5, 0.999748,0.022461,0,0.710938,0.393625,-0.5, 0.999748,0.022461,0,0.710938,0.393625,-0.5, 0.938064,0.027067,0.345404,0.696875,0.393625,-0.415625, 0.958364,-0.000151,0.285548,0.695563,0.494688,-0.416187, 0.998811,0.048741,0,0.714805,0.295922,-0.5, 0.937029,0.054036,0.345045,0.700484,0.295922,-0.414078, 0.938064,0.027067,0.345404,0.696875,0.393625,-0.415625, 0.998811,0.048741,0,0.714805,0.295922,-0.5, 0.938064,0.027067,0.345404,0.696875,0.393625,-0.415625, 0.999748,0.022461,0,0.710938,0.393625,-0.5, 0.937029,0.054036,0.345045,0.700484,0.295922,-0.414078, 0.70583,0.060067,0.70583,0.657523,0.295922,-0.342477, 0.706741,0.032156,0.706741,0.654688,0.393625,-0.345313, 0.706741,0.032156,0.706741,0.654688,0.393625,-0.345313, 0.938064,0.027067,0.345404,0.696875,0.393625,-0.415625, 0.937029,0.054036,0.345045,0.700484,0.295922,-0.414078, 0.707107,-0.000155,-0.707107,0.653656,0.494688,-0.653656, 0.706741,0.032156,-0.706741,0.654688,0.393625,-0.654688, 0.938064,0.027067,-0.345404,0.696875,0.393625,-0.584375, 0.707107,-0.000155,-0.707107,0.653656,0.494688,-0.653656, 0.938064,0.027067,-0.345404,0.696875,0.393625,-0.584375, 0.958364,-0.000151,-0.285548,0.695563,0.494688,-0.583813, 0.706741,0.032156,-0.706741,0.654688,0.393625,-0.654688, 0.70583,0.060067,-0.70583,0.657523,0.295922,-0.657523, 0.937029,0.054036,-0.345045,0.700484,0.295922,-0.585922, 0.937029,0.054036,-0.345045,0.700484,0.295922,-0.585922, 0.938064,0.027067,-0.345404,0.696875,0.393625,-0.584375, 0.706741,0.032156,-0.706741,0.654688,0.393625,-0.654688, 0.998811,0.048741,0,0.714805,0.295922,-0.5, 0.999748,0.022461,0,0.710938,0.393625,-0.5, 0.938064,0.027067,-0.345404,0.696875,0.393625,-0.584375, 0.998811,0.048741,0,0.714805,0.295922,-0.5, 0.938064,0.027067,-0.345404,0.696875,0.393625,-0.584375, 0.937029,0.054036,-0.345045,0.700484,0.295922,-0.585922, 0.999748,0.022461,0,0.710938,0.393625,-0.5, 1,-0.00015,0,0.709531,0.494688,-0.5, 0.958364,-0.000151,-0.285548,0.695563,0.494688,-0.583813, 0.958364,-0.000151,-0.285548,0.695563,0.494688,-0.583813, 0.938064,0.027067,-0.345404,0.696875,0.393625,-0.584375, 0.999748,0.022461,0,0.710938,0.393625,-0.5, 0.703939,0.094547,-0.703939,0.661906,0.207062,-0.661906, 0.699155,0.149544,-0.699155,0.667578,0.132531,-0.667578, 0.929642,0.135808,-0.342523,0.713281,0.132531,-0.591406, 0.929642,0.135808,-0.342523,0.713281,0.132531,-0.591406, 0.934884,0.086306,-0.344301,0.706063,0.207062,-0.588313, 0.703939,0.094547,-0.703939,0.661906,0.207062,-0.661906, 0.992308,0.12379,0,0.728516,0.132531,-0.5, 0.996862,0.079157,0,0.720781,0.207062,-0.5, 0.934884,0.086306,-0.344301,0.706063,0.207062,-0.588313, 0.992308,0.12379,0,0.728516,0.132531,-0.5, 0.934884,0.086306,-0.344301,0.706063,0.207062,-0.588313, 0.929642,0.135808,-0.342523,0.713281,0.132531,-0.591406, 0.996862,0.079157,0,0.720781,0.207062,-0.5, 0.998811,0.048741,0,0.714805,0.295922,-0.5, 0.937029,0.054036,-0.345045,0.700484,0.295922,-0.585922, 0.937029,0.054036,-0.345045,0.700484,0.295922,-0.585922, 0.934884,0.086306,-0.344301,0.706063,0.207062,-0.588313, 0.996862,0.079157,0,0.720781,0.207062,-0.5, 0.70583,0.060067,-0.70583,0.657523,0.295922,-0.657523, 0.703939,0.094547,-0.703939,0.661906,0.207062,-0.661906, 0.934884,0.086306,-0.344301,0.706063,0.207062,-0.588313, 0.70583,0.060067,-0.70583,0.657523,0.295922,-0.657523, 0.934884,0.086306,-0.344301,0.706063,0.207062,-0.588313, 0.937029,0.054036,-0.345045,0.700484,0.295922,-0.585922, 0.699156,0.149544,0.699155,0.667578,0.132531,-0.332422, 0.929642,0.135808,0.342523,0.713281,0.132531,-0.408594, 0.919364,0.107435,0.378454,0.721812,0.077813,-0.404938, 0.699156,0.149544,0.699155,0.667578,0.132531,-0.332422, 0.919364,0.107435,0.378454,0.721812,0.077813,-0.404938, 0.705578,0.065727,0.705578,0.674281,0.077813,-0.325719, 0.929642,0.135808,0.342523,0.713281,0.132531,-0.408594, 0.992308,0.12379,0,0.728516,0.132531,-0.5, 0.995686,0.092789,0,0.737656,0.077813,-0.5, 0.995686,0.092789,0,0.737656,0.077813,-0.5, 0.919364,0.107435,0.378454,0.721812,0.077813,-0.404938, 0.929642,0.135808,0.342523,0.713281,0.132531,-0.408594, 0.995686,0.092789,0,0.737656,0.077813,-0.5, 0.914719,-0.404091,0,0.738539,0.039819,-0.5, 0.892993,-0.274252,0.35686,0.722453,0.040123,-0.404859, 0.892993,-0.274252,0.35686,0.722453,0.040123,-0.404859, 0.919364,0.107435,0.378454,0.721812,0.077813,-0.404938, 0.995686,0.092789,0,0.737656,0.077813,-0.5, 0.892993,-0.274252,0.35686,0.722453,0.040123,-0.404859, 0.663755,-0.344758,0.663755,0.674539,0.040427,-0.325461, 0.705578,0.065727,0.705578,0.674281,0.077813,-0.325719, 0.705578,0.065727,0.705578,0.674281,0.077813,-0.325719, 0.919364,0.107435,0.378454,0.721812,0.077813,-0.404938, 0.892993,-0.274252,0.35686,0.722453,0.040123,-0.404859, 0.699155,0.149544,-0.699155,0.667578,0.132531,-0.667578, 0.705578,0.065727,-0.705578,0.674281,0.077813,-0.674281, 0.919364,0.107435,-0.378454,0.721812,0.077813,-0.595062, 0.699155,0.149544,-0.699155,0.667578,0.132531,-0.667578, 0.919364,0.107435,-0.378454,0.721812,0.077813,-0.595062, 0.929642,0.135808,-0.342523,0.713281,0.132531,-0.591406, 0.705578,0.065727,-0.705578,0.674281,0.077813,-0.674281, 0.663755,-0.344758,-0.663755,0.674539,0.040427,-0.674539, 0.892994,-0.274252,-0.356859,0.722453,0.040123,-0.595141, 0.892994,-0.274252,-0.356859,0.722453,0.040123,-0.595141, 0.919364,0.107435,-0.378454,0.721812,0.077813,-0.595062, 0.705578,0.065727,-0.705578,0.674281,0.077813,-0.674281, 0.892994,-0.274252,-0.356859,0.722453,0.040123,-0.595141, 0.914719,-0.404091,0,0.738539,0.039819,-0.5, 0.995686,0.092789,0,0.737656,0.077813,-0.5, 0.995686,0.092789,0,0.737656,0.077813,-0.5, 0.919364,0.107435,-0.378454,0.721812,0.077813,-0.595062, 0.892994,-0.274252,-0.356859,0.722453,0.040123,-0.595141, 0.995686,0.092789,0,0.737656,0.077813,-0.5, 0.992308,0.12379,0,0.728516,0.132531,-0.5, 0.929642,0.135808,-0.342523,0.713281,0.132531,-0.591406, 0.929642,0.135808,-0.342523,0.713281,0.132531,-0.591406, 0.919364,0.107435,-0.378454,0.721812,0.077813,-0.595062, 0.995686,0.092789,0,0.737656,0.077813,-0.5, 0.199329,-0.959446,-0.199329,0.638667,0.007537,-0.638667, 0.18835,-0.976969,-0.100277,0.664625,0.003052,-0.5825, 0.517064,-0.835523,-0.185868,0.706,0.016681,-0.5875, 0.199329,-0.959446,-0.199329,0.638667,0.007537,-0.638667, 0.517064,-0.835523,-0.185868,0.706,0.016681,-0.5875, 0.452944,-0.767908,-0.452945,0.660875,0.017896,-0.660875, 0.244558,-0.969635,0,0.677562,0.000839,-0.5, 0.596646,-0.802505,0,0.7215,0.015465,-0.5, 0.517064,-0.835523,-0.185868,0.706,0.016681,-0.5875, 0.244558,-0.969635,0,0.677562,0.000839,-0.5, 0.517064,-0.835523,-0.185868,0.706,0.016681,-0.5875, 0.18835,-0.976969,-0.100277,0.664625,0.003052,-0.5825, 0.914719,-0.404091,0,0.738539,0.039819,-0.5, 0.892994,-0.274252,-0.356859,0.722453,0.040123,-0.595141, 0.517064,-0.835523,-0.185868,0.706,0.016681,-0.5875, 0.914719,-0.404091,0,0.738539,0.039819,-0.5, 0.517064,-0.835523,-0.185868,0.706,0.016681,-0.5875, 0.596646,-0.802505,0,0.7215,0.015465,-0.5, 0.892994,-0.274252,-0.356859,0.722453,0.040123,-0.595141, 0.663755,-0.344758,-0.663755,0.674539,0.040427,-0.674539, 0.452944,-0.767908,-0.452945,0.660875,0.017896,-0.660875, 0.452944,-0.767908,-0.452945,0.660875,0.017896,-0.660875, 0.517064,-0.835523,-0.185868,0.706,0.016681,-0.5875, 0.892994,-0.274252,-0.356859,0.722453,0.040123,-0.595141, 0.199329,-0.959446,0.199329,0.638667,0.007537,-0.361333, 0.452945,-0.767908,0.452945,0.660875,0.017896,-0.339125, 0.517064,-0.835523,0.185868,0.706,0.016681,-0.4125, 0.199329,-0.959446,0.199329,0.638667,0.007537,-0.361333, 0.517064,-0.835523,0.185868,0.706,0.016681,-0.4125, 0.18835,-0.976969,0.100277,0.664625,0.003052,-0.4175, 0.452945,-0.767908,0.452945,0.660875,0.017896,-0.339125, 0.663755,-0.344758,0.663755,0.674539,0.040427,-0.325461, 0.892993,-0.274252,0.35686,0.722453,0.040123,-0.404859, 0.892993,-0.274252,0.35686,0.722453,0.040123,-0.404859, 0.517064,-0.835523,0.185868,0.706,0.016681,-0.4125, 0.452945,-0.767908,0.452945,0.660875,0.017896,-0.339125, 0.914719,-0.404091,0,0.738539,0.039819,-0.5, 0.596646,-0.802505,0,0.7215,0.015465,-0.5, 0.517064,-0.835523,0.185868,0.706,0.016681,-0.4125, 0.914719,-0.404091,0,0.738539,0.039819,-0.5, 0.517064,-0.835523,0.185868,0.706,0.016681,-0.4125, 0.892993,-0.274252,0.35686,0.722453,0.040123,-0.404859, 0.244558,-0.969635,0,0.677562,0.000839,-0.5, 0.18835,-0.976969,0.100277,0.664625,0.003052,-0.4175, 0.517064,-0.835523,0.185868,0.706,0.016681,-0.4125, 0.244558,-0.969635,0,0.677562,0.000839,-0.5, 0.517064,-0.835523,0.185868,0.706,0.016681,-0.4125, 0.596646,-0.802505,0,0.7215,0.015465,-0.5, 0.699155,0.149544,-0.699155,0.667578,0.132531,-0.667578, 0.342523,0.135808,-0.929642,0.591406,0.132531,-0.713281, 0.378454,0.107435,-0.919364,0.595062,0.077813,-0.721812, 0.699155,0.149544,-0.699155,0.667578,0.132531,-0.667578, 0.378454,0.107435,-0.919364,0.595062,0.077813,-0.721812, 0.705578,0.065727,-0.705578,0.674281,0.077813,-0.674281, 0.342523,0.135808,-0.929642,0.591406,0.132531,-0.713281, 0,0.12379,-0.992308,0.5,0.132531,-0.728516, 0,0.092789,-0.995686,0.5,0.077813,-0.737656, 0,0.092789,-0.995686,0.5,0.077813,-0.737656, 0.378454,0.107435,-0.919364,0.595062,0.077813,-0.721812, 0.342523,0.135808,-0.929642,0.591406,0.132531,-0.713281, 0,0.092789,-0.995686,0.5,0.077813,-0.737656, 0,-0.404091,-0.914719,0.5,0.039819,-0.738539, 0.356859,-0.274252,-0.892994,0.595141,0.040123,-0.722453, 0.356859,-0.274252,-0.892994,0.595141,0.040123,-0.722453, 0.378454,0.107435,-0.919364,0.595062,0.077813,-0.721812, 0,0.092789,-0.995686,0.5,0.077813,-0.737656, 0.356859,-0.274252,-0.892994,0.595141,0.040123,-0.722453, 0.663755,-0.344758,-0.663755,0.674539,0.040427,-0.674539, 0.705578,0.065727,-0.705578,0.674281,0.077813,-0.674281, 0.705578,0.065727,-0.705578,0.674281,0.077813,-0.674281, 0.378454,0.107435,-0.919364,0.595062,0.077813,-0.721812, 0.356859,-0.274252,-0.892994,0.595141,0.040123,-0.722453, -0.699155,0.149544,-0.699156,0.332422,0.132531,-0.667578, -0.705578,0.065727,-0.705578,0.325719,0.077813,-0.674281, -0.378454,0.107435,-0.919364,0.404938,0.077813,-0.721812, -0.699155,0.149544,-0.699156,0.332422,0.132531,-0.667578, -0.378454,0.107435,-0.919364,0.404938,0.077813,-0.721812, -0.342523,0.135808,-0.929642,0.408594,0.132531,-0.713281, -0.705578,0.065727,-0.705578,0.325719,0.077813,-0.674281, -0.663755,-0.344758,-0.663755,0.325461,0.040427,-0.674539, -0.35686,-0.274252,-0.892993,0.404859,0.040123,-0.722453, -0.35686,-0.274252,-0.892993,0.404859,0.040123,-0.722453, -0.378454,0.107435,-0.919364,0.404938,0.077813,-0.721812, -0.705578,0.065727,-0.705578,0.325719,0.077813,-0.674281, -0.35686,-0.274252,-0.892993,0.404859,0.040123,-0.722453, 0,-0.404091,-0.914719,0.5,0.039819,-0.738539, 0,0.092789,-0.995686,0.5,0.077813,-0.737656, 0,0.092789,-0.995686,0.5,0.077813,-0.737656, -0.378454,0.107435,-0.919364,0.404938,0.077813,-0.721812, -0.35686,-0.274252,-0.892993,0.404859,0.040123,-0.722453, 0,0.092789,-0.995686,0.5,0.077813,-0.737656, 0,0.12379,-0.992308,0.5,0.132531,-0.728516, -0.342523,0.135808,-0.929642,0.408594,0.132531,-0.713281, -0.342523,0.135808,-0.929642,0.408594,0.132531,-0.713281, -0.378454,0.107435,-0.919364,0.404938,0.077813,-0.721812, 0,0.092789,-0.995686,0.5,0.077813,-0.737656, -0.199329,-0.959446,-0.199329,0.361333,0.007537,-0.638667, -0.100277,-0.976969,-0.18835,0.4175,0.003052,-0.664625, -0.185868,-0.835523,-0.517064,0.4125,0.016681,-0.706, -0.199329,-0.959446,-0.199329,0.361333,0.007537,-0.638667, -0.185868,-0.835523,-0.517064,0.4125,0.016681,-0.706, -0.452945,-0.767908,-0.452945,0.339125,0.017896,-0.660875, 0,-0.969635,-0.244558,0.5,0.000839,-0.677562, 0,-0.802505,-0.596646,0.5,0.015465,-0.7215, -0.185868,-0.835523,-0.517064,0.4125,0.016681,-0.706, 0,-0.969635,-0.244558,0.5,0.000839,-0.677562, -0.185868,-0.835523,-0.517064,0.4125,0.016681,-0.706, -0.100277,-0.976969,-0.18835,0.4175,0.003052,-0.664625, 0,-0.404091,-0.914719,0.5,0.039819,-0.738539, -0.35686,-0.274252,-0.892993,0.404859,0.040123,-0.722453, -0.185868,-0.835523,-0.517064,0.4125,0.016681,-0.706, 0,-0.404091,-0.914719,0.5,0.039819,-0.738539, -0.185868,-0.835523,-0.517064,0.4125,0.016681,-0.706, 0,-0.802505,-0.596646,0.5,0.015465,-0.7215, -0.35686,-0.274252,-0.892993,0.404859,0.040123,-0.722453, -0.663755,-0.344758,-0.663755,0.325461,0.040427,-0.674539, -0.452945,-0.767908,-0.452945,0.339125,0.017896,-0.660875, -0.452945,-0.767908,-0.452945,0.339125,0.017896,-0.660875, -0.185868,-0.835523,-0.517064,0.4125,0.016681,-0.706, -0.35686,-0.274252,-0.892993,0.404859,0.040123,-0.722453, 0.199329,-0.959446,-0.199329,0.638667,0.007537,-0.638667, 0.452944,-0.767908,-0.452945,0.660875,0.017896,-0.660875, 0.185868,-0.835523,-0.517064,0.5875,0.016681,-0.706, 0.199329,-0.959446,-0.199329,0.638667,0.007537,-0.638667, 0.185868,-0.835523,-0.517064,0.5875,0.016681,-0.706, 0.100277,-0.976969,-0.18835,0.5825,0.003052,-0.664625, 0.452944,-0.767908,-0.452945,0.660875,0.017896,-0.660875, 0.663755,-0.344758,-0.663755,0.674539,0.040427,-0.674539, 0.356859,-0.274252,-0.892994,0.595141,0.040123,-0.722453, 0.356859,-0.274252,-0.892994,0.595141,0.040123,-0.722453, 0.185868,-0.835523,-0.517064,0.5875,0.016681,-0.706, 0.452944,-0.767908,-0.452945,0.660875,0.017896,-0.660875, 0,-0.404091,-0.914719,0.5,0.039819,-0.738539, 0,-0.802505,-0.596646,0.5,0.015465,-0.7215, 0.185868,-0.835523,-0.517064,0.5875,0.016681,-0.706, 0,-0.404091,-0.914719,0.5,0.039819,-0.738539, 0.185868,-0.835523,-0.517064,0.5875,0.016681,-0.706, 0.356859,-0.274252,-0.892994,0.595141,0.040123,-0.722453, 0,-0.969635,-0.244558,0.5,0.000839,-0.677562, 0.100277,-0.976969,-0.18835,0.5825,0.003052,-0.664625, 0.185868,-0.835523,-0.517064,0.5875,0.016681,-0.706, 0,-0.969635,-0.244558,0.5,0.000839,-0.677562, 0.185868,-0.835523,-0.517064,0.5875,0.016681,-0.706, 0,-0.802505,-0.596646,0.5,0.015465,-0.7215, -0.699155,0.149544,-0.699156,0.332422,0.132531,-0.667578, -0.929642,0.135808,-0.342523,0.286719,0.132531,-0.591406, -0.919364,0.107436,-0.378454,0.278187,0.077813,-0.595062, -0.699155,0.149544,-0.699156,0.332422,0.132531,-0.667578, -0.919364,0.107436,-0.378454,0.278187,0.077813,-0.595062, -0.705578,0.065727,-0.705578,0.325719,0.077813,-0.674281, -0.929642,0.135808,-0.342523,0.286719,0.132531,-0.591406, -0.992308,0.12379,0,0.271484,0.132531,-0.5, -0.995686,0.092789,0,0.262344,0.077813,-0.5, -0.995686,0.092789,0,0.262344,0.077813,-0.5, -0.919364,0.107436,-0.378454,0.278187,0.077813,-0.595062, -0.929642,0.135808,-0.342523,0.286719,0.132531,-0.591406, -0.995686,0.092789,0,0.262344,0.077813,-0.5, -0.914719,-0.404091,0,0.261461,0.039819,-0.5, -0.892993,-0.274251,-0.35686,0.277547,0.040123,-0.595141, -0.892993,-0.274251,-0.35686,0.277547,0.040123,-0.595141, -0.919364,0.107436,-0.378454,0.278187,0.077813,-0.595062, -0.995686,0.092789,0,0.262344,0.077813,-0.5, -0.892993,-0.274251,-0.35686,0.277547,0.040123,-0.595141, -0.663755,-0.344758,-0.663755,0.325461,0.040427,-0.674539, -0.705578,0.065727,-0.705578,0.325719,0.077813,-0.674281, -0.705578,0.065727,-0.705578,0.325719,0.077813,-0.674281, -0.919364,0.107436,-0.378454,0.278187,0.077813,-0.595062, -0.892993,-0.274251,-0.35686,0.277547,0.040123,-0.595141, -0.699155,0.149545,0.699155,0.332422,0.132531,-0.332422, -0.705578,0.065726,0.705578,0.325719,0.077813,-0.325719, -0.919364,0.107436,0.378454,0.278187,0.077813,-0.404938, -0.699155,0.149545,0.699155,0.332422,0.132531,-0.332422, -0.919364,0.107436,0.378454,0.278187,0.077813,-0.404938, -0.929642,0.135808,0.342523,0.286719,0.132531,-0.408594, -0.705578,0.065726,0.705578,0.325719,0.077813,-0.325719, -0.663755,-0.344758,0.663755,0.325461,0.040427,-0.325461, -0.892993,-0.274251,0.35686,0.277547,0.040123,-0.404859, -0.892993,-0.274251,0.35686,0.277547,0.040123,-0.404859, -0.919364,0.107436,0.378454,0.278187,0.077813,-0.404938, -0.705578,0.065726,0.705578,0.325719,0.077813,-0.325719, -0.892993,-0.274251,0.35686,0.277547,0.040123,-0.404859, -0.914719,-0.404091,0,0.261461,0.039819,-0.5, -0.995686,0.092789,0,0.262344,0.077813,-0.5, -0.995686,0.092789,0,0.262344,0.077813,-0.5, -0.919364,0.107436,0.378454,0.278187,0.077813,-0.404938, -0.892993,-0.274251,0.35686,0.277547,0.040123,-0.404859, -0.995686,0.092789,0,0.262344,0.077813,-0.5, -0.992308,0.12379,0,0.271484,0.132531,-0.5, -0.929642,0.135808,0.342523,0.286719,0.132531,-0.408594, -0.929642,0.135808,0.342523,0.286719,0.132531,-0.408594, -0.919364,0.107436,0.378454,0.278187,0.077813,-0.404938, -0.995686,0.092789,0,0.262344,0.077813,-0.5, -0.199328,-0.959446,0.199328,0.361333,0.007537,-0.361333, -0.188349,-0.976969,0.100277,0.335375,0.003052,-0.4175, -0.517064,-0.835523,0.185867,0.294,0.016681,-0.4125, -0.199328,-0.959446,0.199328,0.361333,0.007537,-0.361333, -0.517064,-0.835523,0.185867,0.294,0.016681,-0.4125, -0.452945,-0.767908,0.452945,0.339125,0.017896,-0.339125, -0.244558,-0.969635,0,0.322437,0.000839,-0.5, -0.596646,-0.802505,0,0.2785,0.015465,-0.5, -0.517064,-0.835523,0.185867,0.294,0.016681,-0.4125, -0.244558,-0.969635,0,0.322437,0.000839,-0.5, -0.517064,-0.835523,0.185867,0.294,0.016681,-0.4125, -0.188349,-0.976969,0.100277,0.335375,0.003052,-0.4175, -0.914719,-0.404091,0,0.261461,0.039819,-0.5, -0.892993,-0.274251,0.35686,0.277547,0.040123,-0.404859, -0.517064,-0.835523,0.185867,0.294,0.016681,-0.4125, -0.914719,-0.404091,0,0.261461,0.039819,-0.5, -0.517064,-0.835523,0.185867,0.294,0.016681,-0.4125, -0.596646,-0.802505,0,0.2785,0.015465,-0.5, -0.892993,-0.274251,0.35686,0.277547,0.040123,-0.404859, -0.663755,-0.344758,0.663755,0.325461,0.040427,-0.325461, -0.452945,-0.767908,0.452945,0.339125,0.017896,-0.339125, -0.452945,-0.767908,0.452945,0.339125,0.017896,-0.339125, -0.517064,-0.835523,0.185867,0.294,0.016681,-0.4125, -0.892993,-0.274251,0.35686,0.277547,0.040123,-0.404859, -0.199329,-0.959446,-0.199329,0.361333,0.007537,-0.638667, -0.452945,-0.767908,-0.452945,0.339125,0.017896,-0.660875, -0.517064,-0.835523,-0.185868,0.294,0.016681,-0.5875, -0.199329,-0.959446,-0.199329,0.361333,0.007537,-0.638667, -0.517064,-0.835523,-0.185868,0.294,0.016681,-0.5875, -0.188349,-0.976969,-0.100277,0.335375,0.003052,-0.5825, -0.452945,-0.767908,-0.452945,0.339125,0.017896,-0.660875, -0.663755,-0.344758,-0.663755,0.325461,0.040427,-0.674539, -0.892993,-0.274251,-0.35686,0.277547,0.040123,-0.595141, -0.892993,-0.274251,-0.35686,0.277547,0.040123,-0.595141, -0.517064,-0.835523,-0.185868,0.294,0.016681,-0.5875, -0.452945,-0.767908,-0.452945,0.339125,0.017896,-0.660875, -0.914719,-0.404091,0,0.261461,0.039819,-0.5, -0.596646,-0.802505,0,0.2785,0.015465,-0.5, -0.517064,-0.835523,-0.185868,0.294,0.016681,-0.5875, -0.914719,-0.404091,0,0.261461,0.039819,-0.5, -0.517064,-0.835523,-0.185868,0.294,0.016681,-0.5875, -0.892993,-0.274251,-0.35686,0.277547,0.040123,-0.595141, -0.244558,-0.969635,0,0.322437,0.000839,-0.5, -0.188349,-0.976969,-0.100277,0.335375,0.003052,-0.5825, -0.517064,-0.835523,-0.185868,0.294,0.016681,-0.5875, -0.244558,-0.969635,0,0.322437,0.000839,-0.5, -0.517064,-0.835523,-0.185868,0.294,0.016681,-0.5875, -0.596646,-0.802505,0,0.2785,0.015465,-0.5, -0.699155,0.149545,0.699155,0.332422,0.132531,-0.332422, -0.342523,0.135808,0.929642,0.408594,0.132531,-0.286719, -0.378454,0.107436,0.919364,0.404938,0.077813,-0.278187, -0.699155,0.149545,0.699155,0.332422,0.132531,-0.332422, -0.378454,0.107436,0.919364,0.404938,0.077813,-0.278187, -0.705578,0.065726,0.705578,0.325719,0.077813,-0.325719, -0.342523,0.135808,0.929642,0.408594,0.132531,-0.286719, 0,0.12379,0.992308,0.5,0.132531,-0.271484, 0,0.092789,0.995686,0.5,0.077813,-0.262344, 0,0.092789,0.995686,0.5,0.077813,-0.262344, -0.378454,0.107436,0.919364,0.404938,0.077813,-0.278187, -0.342523,0.135808,0.929642,0.408594,0.132531,-0.286719, 0,0.092789,0.995686,0.5,0.077813,-0.262344, 0,-0.404091,0.914719,0.5,0.039819,-0.261461, -0.35686,-0.274251,0.892993,0.404859,0.040123,-0.277547, -0.35686,-0.274251,0.892993,0.404859,0.040123,-0.277547, -0.378454,0.107436,0.919364,0.404938,0.077813,-0.278187, 0,0.092789,0.995686,0.5,0.077813,-0.262344, -0.35686,-0.274251,0.892993,0.404859,0.040123,-0.277547, -0.663755,-0.344758,0.663755,0.325461,0.040427,-0.325461, -0.705578,0.065726,0.705578,0.325719,0.077813,-0.325719, -0.705578,0.065726,0.705578,0.325719,0.077813,-0.325719, -0.378454,0.107436,0.919364,0.404938,0.077813,-0.278187, -0.35686,-0.274251,0.892993,0.404859,0.040123,-0.277547, 0.699156,0.149544,0.699155,0.667578,0.132531,-0.332422, 0.705578,0.065727,0.705578,0.674281,0.077813,-0.325719, 0.378454,0.107436,0.919364,0.595062,0.077813,-0.278187, 0.699156,0.149544,0.699155,0.667578,0.132531,-0.332422, 0.378454,0.107436,0.919364,0.595062,0.077813,-0.278187, 0.342523,0.135808,0.929642,0.591406,0.132531,-0.286719, 0.705578,0.065727,0.705578,0.674281,0.077813,-0.325719, 0.663755,-0.344758,0.663755,0.674539,0.040427,-0.325461, 0.35686,-0.274251,0.892993,0.595141,0.040123,-0.277547, 0.35686,-0.274251,0.892993,0.595141,0.040123,-0.277547, 0.378454,0.107436,0.919364,0.595062,0.077813,-0.278187, 0.705578,0.065727,0.705578,0.674281,0.077813,-0.325719, 0.35686,-0.274251,0.892993,0.595141,0.040123,-0.277547, 0,-0.404091,0.914719,0.5,0.039819,-0.261461, 0,0.092789,0.995686,0.5,0.077813,-0.262344, 0,0.092789,0.995686,0.5,0.077813,-0.262344, 0.378454,0.107436,0.919364,0.595062,0.077813,-0.278187, 0.35686,-0.274251,0.892993,0.595141,0.040123,-0.277547, 0,0.092789,0.995686,0.5,0.077813,-0.262344, 0,0.12379,0.992308,0.5,0.132531,-0.271484, 0.342523,0.135808,0.929642,0.591406,0.132531,-0.286719, 0.342523,0.135808,0.929642,0.591406,0.132531,-0.286719, 0.378454,0.107436,0.919364,0.595062,0.077813,-0.278187, 0,0.092789,0.995686,0.5,0.077813,-0.262344, 0.199329,-0.959446,0.199329,0.638667,0.007537,-0.361333, 0.100277,-0.976969,0.188349,0.5825,0.003052,-0.335375, 0.185868,-0.835523,0.517064,0.5875,0.016681,-0.294, 0.199329,-0.959446,0.199329,0.638667,0.007537,-0.361333, 0.185868,-0.835523,0.517064,0.5875,0.016681,-0.294, 0.452945,-0.767908,0.452945,0.660875,0.017896,-0.339125, 0,-0.969635,0.244558,0.5,0.000839,-0.322437, 0,-0.802505,0.596646,0.5,0.015465,-0.2785, 0.185868,-0.835523,0.517064,0.5875,0.016681,-0.294, 0,-0.969635,0.244558,0.5,0.000839,-0.322437, 0.185868,-0.835523,0.517064,0.5875,0.016681,-0.294, 0.100277,-0.976969,0.188349,0.5825,0.003052,-0.335375, 0,-0.404091,0.914719,0.5,0.039819,-0.261461, 0.35686,-0.274251,0.892993,0.595141,0.040123,-0.277547, 0.185868,-0.835523,0.517064,0.5875,0.016681,-0.294, 0,-0.404091,0.914719,0.5,0.039819,-0.261461, 0.185868,-0.835523,0.517064,0.5875,0.016681,-0.294, 0,-0.802505,0.596646,0.5,0.015465,-0.2785, 0.35686,-0.274251,0.892993,0.595141,0.040123,-0.277547, 0.663755,-0.344758,0.663755,0.674539,0.040427,-0.325461, 0.452945,-0.767908,0.452945,0.660875,0.017896,-0.339125, 0.452945,-0.767908,0.452945,0.660875,0.017896,-0.339125, 0.185868,-0.835523,0.517064,0.5875,0.016681,-0.294, 0.35686,-0.274251,0.892993,0.595141,0.040123,-0.277547, -0.199328,-0.959446,0.199328,0.361333,0.007537,-0.361333, -0.452945,-0.767908,0.452945,0.339125,0.017896,-0.339125, -0.185867,-0.835523,0.517064,0.4125,0.016681,-0.294, -0.199328,-0.959446,0.199328,0.361333,0.007537,-0.361333, -0.185867,-0.835523,0.517064,0.4125,0.016681,-0.294, -0.100277,-0.976969,0.188349,0.4175,0.003052,-0.335375, -0.452945,-0.767908,0.452945,0.339125,0.017896,-0.339125, -0.663755,-0.344758,0.663755,0.325461,0.040427,-0.325461, -0.35686,-0.274251,0.892993,0.404859,0.040123,-0.277547, -0.35686,-0.274251,0.892993,0.404859,0.040123,-0.277547, -0.185867,-0.835523,0.517064,0.4125,0.016681,-0.294, -0.452945,-0.767908,0.452945,0.339125,0.017896,-0.339125, 0,-0.404091,0.914719,0.5,0.039819,-0.261461, 0,-0.802505,0.596646,0.5,0.015465,-0.2785, -0.185867,-0.835523,0.517064,0.4125,0.016681,-0.294, 0,-0.404091,0.914719,0.5,0.039819,-0.261461, -0.185867,-0.835523,0.517064,0.4125,0.016681,-0.294, -0.35686,-0.274251,0.892993,0.404859,0.040123,-0.277547, 0,-0.969635,0.244558,0.5,0.000839,-0.322437, -0.100277,-0.976969,0.188349,0.4175,0.003052,-0.335375, -0.185867,-0.835523,0.517064,0.4125,0.016681,-0.294, 0,-0.969635,0.244558,0.5,0.000839,-0.322437, -0.185867,-0.835523,0.517064,0.4125,0.016681,-0.294, 0,-0.802505,0.596646,0.5,0.015465,-0.2785, 0.199329,-0.959446,-0.199329,0.638667,0.007537,-0.638667, 0.100277,-0.976969,-0.18835,0.5825,0.003052,-0.664625, 0.079739,-0.993621,-0.079739,0.5905,-0.005194,-0.5905, 0.199329,-0.959446,-0.199329,0.638667,0.007537,-0.638667, 0.079739,-0.993621,-0.079739,0.5905,-0.005194,-0.5905, 0.18835,-0.976969,-0.100277,0.664625,0.003052,-0.5825, 0.100277,-0.976969,-0.18835,0.5825,0.003052,-0.664625, 0,-0.969635,-0.244558,0.5,0.000839,-0.677562, 0,-0.996384,-0.08496,0.5,-0.007972,-0.59775, 0,-0.996384,-0.08496,0.5,-0.007972,-0.59775, 0.079739,-0.993621,-0.079739,0.5905,-0.005194,-0.5905, 0.100277,-0.976969,-0.18835,0.5825,0.003052,-0.664625, 0,-1,0,0.5,-0.010924,-0.5, 0.08496,-0.996384,0,0.59775,-0.007972,-0.5, 0.079739,-0.993621,-0.079739,0.5905,-0.005194,-0.5905, 0,-1,0,0.5,-0.010924,-0.5, 0.079739,-0.993621,-0.079739,0.5905,-0.005194,-0.5905, 0,-0.996384,-0.08496,0.5,-0.007972,-0.59775, 0.08496,-0.996384,0,0.59775,-0.007972,-0.5, 0.244558,-0.969635,0,0.677562,0.000839,-0.5, 0.18835,-0.976969,-0.100277,0.664625,0.003052,-0.5825, 0.18835,-0.976969,-0.100277,0.664625,0.003052,-0.5825, 0.079739,-0.993621,-0.079739,0.5905,-0.005194,-0.5905, 0.08496,-0.996384,0,0.59775,-0.007972,-0.5, -0.199329,-0.959446,-0.199329,0.361333,0.007537,-0.638667, -0.188349,-0.976969,-0.100277,0.335375,0.003052,-0.5825, -0.079739,-0.993621,-0.079739,0.4095,-0.005194,-0.5905, -0.199329,-0.959446,-0.199329,0.361333,0.007537,-0.638667, -0.079739,-0.993621,-0.079739,0.4095,-0.005194,-0.5905, -0.100277,-0.976969,-0.18835,0.4175,0.003052,-0.664625, -0.188349,-0.976969,-0.100277,0.335375,0.003052,-0.5825, -0.244558,-0.969635,0,0.322437,0.000839,-0.5, -0.08496,-0.996384,0,0.40225,-0.007972,-0.5, -0.08496,-0.996384,0,0.40225,-0.007972,-0.5, -0.079739,-0.993621,-0.079739,0.4095,-0.005194,-0.5905, -0.188349,-0.976969,-0.100277,0.335375,0.003052,-0.5825, 0,-1,0,0.5,-0.010924,-0.5, 0,-0.996384,-0.08496,0.5,-0.007972,-0.59775, -0.079739,-0.993621,-0.079739,0.4095,-0.005194,-0.5905, 0,-1,0,0.5,-0.010924,-0.5, -0.079739,-0.993621,-0.079739,0.4095,-0.005194,-0.5905, -0.08496,-0.996384,0,0.40225,-0.007972,-0.5, 0,-0.996384,-0.08496,0.5,-0.007972,-0.59775, 0,-0.969635,-0.244558,0.5,0.000839,-0.677562, -0.100277,-0.976969,-0.18835,0.4175,0.003052,-0.664625, -0.100277,-0.976969,-0.18835,0.4175,0.003052,-0.664625, -0.079739,-0.993621,-0.079739,0.4095,-0.005194,-0.5905, 0,-0.996384,-0.08496,0.5,-0.007972,-0.59775, -0.199328,-0.959446,0.199328,0.361333,0.007537,-0.361333, -0.100277,-0.976969,0.188349,0.4175,0.003052,-0.335375, -0.079739,-0.993621,0.079739,0.4095,-0.005194,-0.4095, -0.199328,-0.959446,0.199328,0.361333,0.007537,-0.361333, -0.079739,-0.993621,0.079739,0.4095,-0.005194,-0.4095, -0.188349,-0.976969,0.100277,0.335375,0.003052,-0.4175, -0.100277,-0.976969,0.188349,0.4175,0.003052,-0.335375, 0,-0.969635,0.244558,0.5,0.000839,-0.322437, 0,-0.996384,0.08496,0.5,-0.007972,-0.40225, 0,-0.996384,0.08496,0.5,-0.007972,-0.40225, -0.079739,-0.993621,0.079739,0.4095,-0.005194,-0.4095, -0.100277,-0.976969,0.188349,0.4175,0.003052,-0.335375, 0,-1,0,0.5,-0.010924,-0.5, -0.08496,-0.996384,0,0.40225,-0.007972,-0.5, -0.079739,-0.993621,0.079739,0.4095,-0.005194,-0.4095, 0,-1,0,0.5,-0.010924,-0.5, -0.079739,-0.993621,0.079739,0.4095,-0.005194,-0.4095, 0,-0.996384,0.08496,0.5,-0.007972,-0.40225, -0.08496,-0.996384,0,0.40225,-0.007972,-0.5, -0.244558,-0.969635,0,0.322437,0.000839,-0.5, -0.188349,-0.976969,0.100277,0.335375,0.003052,-0.4175, -0.188349,-0.976969,0.100277,0.335375,0.003052,-0.4175, -0.079739,-0.993621,0.079739,0.4095,-0.005194,-0.4095, -0.08496,-0.996384,0,0.40225,-0.007972,-0.5, 0.199329,-0.959446,0.199329,0.638667,0.007537,-0.361333, 0.18835,-0.976969,0.100277,0.664625,0.003052,-0.4175, 0.079739,-0.993621,0.079739,0.5905,-0.005194,-0.4095, 0.199329,-0.959446,0.199329,0.638667,0.007537,-0.361333, 0.079739,-0.993621,0.079739,0.5905,-0.005194,-0.4095, 0.100277,-0.976969,0.188349,0.5825,0.003052,-0.335375, 0.18835,-0.976969,0.100277,0.664625,0.003052,-0.4175, 0.244558,-0.969635,0,0.677562,0.000839,-0.5, 0.08496,-0.996384,0,0.59775,-0.007972,-0.5, 0.08496,-0.996384,0,0.59775,-0.007972,-0.5, 0.079739,-0.993621,0.079739,0.5905,-0.005194,-0.4095, 0.18835,-0.976969,0.100277,0.664625,0.003052,-0.4175, 0,-1,0,0.5,-0.010924,-0.5, 0,-0.996384,0.08496,0.5,-0.007972,-0.40225, 0.079739,-0.993621,0.079739,0.5905,-0.005194,-0.4095, 0,-1,0,0.5,-0.010924,-0.5, 0.079739,-0.993621,0.079739,0.5905,-0.005194,-0.4095, 0.08496,-0.996384,0,0.59775,-0.007972,-0.5, 0,-0.996384,0.08496,0.5,-0.007972,-0.40225, 0,-0.969635,0.244558,0.5,0.000839,-0.322437, 0.100277,-0.976969,0.188349,0.5825,0.003052,-0.335375, 0.100277,-0.976969,0.188349,0.5825,0.003052,-0.335375, 0.079739,-0.993621,0.079739,0.5905,-0.005194,-0.4095, 0,-0.996384,0.08496,0.5,-0.007972,-0.40225, }; static const struct gllist frame={GL_N3F_V3F,GL_TRIANGLES,1728,data,NULL}; const struct gllist *s1_1=&frame; xscreensaver-5.36/hacks/glx/s1_2.c000644 000767 000024 00000272432 12701612217 016742 0ustar00jwzstaff000000 000000 #include "gllist.h" static const float data[]={ 0.744225,-0.02143,-0.667585,0.865458,0.513412,-0.690781, 0.945978,-0.110612,-0.304781,0.91525,0.49905,-0.604062, 0.919806,-0.190639,-0.342948,0.925,0.532253,-0.600125, 0.744225,-0.02143,-0.667585,0.865458,0.513412,-0.690781, 0.919806,-0.190639,-0.342948,0.925,0.532253,-0.600125, 0.749601,-0.05627,-0.659493,0.877427,0.54752,-0.683563, 0.980435,-0.196846,0,0.931847,0.494263,-0.5, 0.981457,-0.191681,0,0.940858,0.527164,-0.5, 0.919806,-0.190639,-0.342948,0.925,0.532253,-0.600125, 0.980435,-0.196846,0,0.931847,0.494263,-0.5, 0.919806,-0.190639,-0.342948,0.925,0.532253,-0.600125, 0.945978,-0.110612,-0.304781,0.91525,0.49905,-0.604062, 0.981457,-0.191681,0,0.940858,0.527164,-0.5, 0.973132,0.23025,0,0.945338,0.554869,-0.5, 0.932108,0.142863,-0.332815,0.92981,0.559801,-0.596406, 0.932108,0.142863,-0.332815,0.92981,0.559801,-0.596406, 0.919806,-0.190639,-0.342948,0.925,0.532253,-0.600125, 0.981457,-0.191681,0,0.940858,0.527164,-0.5, 0.932108,0.142863,-0.332815,0.92981,0.559801,-0.596406, 0.692376,0.299844,-0.656284,0.88375,0.575062,-0.676859, 0.749601,-0.05627,-0.659493,0.877427,0.54752,-0.683563, 0.749601,-0.05627,-0.659493,0.877427,0.54752,-0.683563, 0.919806,-0.190639,-0.342948,0.925,0.532253,-0.600125, 0.932108,0.142863,-0.332815,0.92981,0.559801,-0.596406, 0.744225,-0.02143,0.667585,0.865458,0.513412,-0.309219, 0.749602,-0.05627,0.659493,0.877427,0.54752,-0.316437, 0.919806,-0.190639,0.342948,0.925,0.532253,-0.399875, 0.744225,-0.02143,0.667585,0.865458,0.513412,-0.309219, 0.919806,-0.190639,0.342948,0.925,0.532253,-0.399875, 0.945978,-0.110612,0.304781,0.91525,0.49905,-0.395938, 0.749602,-0.05627,0.659493,0.877427,0.54752,-0.316437, 0.692376,0.299843,0.656284,0.88375,0.575062,-0.323141, 0.932108,0.142863,0.332815,0.92981,0.559801,-0.403594, 0.932108,0.142863,0.332815,0.92981,0.559801,-0.403594, 0.919806,-0.190639,0.342948,0.925,0.532253,-0.399875, 0.749602,-0.05627,0.659493,0.877427,0.54752,-0.316437, 0.932108,0.142863,0.332815,0.92981,0.559801,-0.403594, 0.973132,0.23025,0,0.945338,0.554869,-0.5, 0.981457,-0.191681,0,0.940858,0.527164,-0.5, 0.981457,-0.191681,0,0.940858,0.527164,-0.5, 0.919806,-0.190639,0.342948,0.925,0.532253,-0.399875, 0.932108,0.142863,0.332815,0.92981,0.559801,-0.403594, 0.980435,-0.196846,0,0.931847,0.494263,-0.5, 0.945978,-0.110612,0.304781,0.91525,0.49905,-0.395938, 0.919806,-0.190639,0.342948,0.925,0.532253,-0.399875, 0.980435,-0.196846,0,0.931847,0.494263,-0.5, 0.919806,-0.190639,0.342948,0.925,0.532253,-0.399875, 0.981457,-0.191681,0,0.940858,0.527164,-0.5, 0.503147,0.845347,0.179535,0.858509,0.615264,-0.361333, 0.496158,0.862422,0.100278,0.884513,0.611054,-0.4175, 0.729041,0.662418,0.172342,0.919197,0.584697,-0.4125, 0.503147,0.845347,0.179535,0.858509,0.615264,-0.361333, 0.729041,0.662418,0.172342,0.919197,0.584697,-0.4125, 0.634483,0.691277,0.345786,0.876135,0.59824,-0.339125, 0.546916,0.837188,0,0.897467,0.608935,-0.5, 0.788799,0.614652,0,0.934249,0.5808,-0.5, 0.729041,0.662418,0.172342,0.919197,0.584697,-0.4125, 0.546916,0.837188,0,0.897467,0.608935,-0.5, 0.729041,0.662418,0.172342,0.919197,0.584697,-0.4125, 0.496158,0.862422,0.100278,0.884513,0.611054,-0.4175, 0.973132,0.23025,0,0.945338,0.554869,-0.5, 0.932108,0.142863,0.332815,0.92981,0.559801,-0.403594, 0.729041,0.662418,0.172342,0.919197,0.584697,-0.4125, 0.973132,0.23025,0,0.945338,0.554869,-0.5, 0.729041,0.662418,0.172342,0.919197,0.584697,-0.4125, 0.788799,0.614652,0,0.934249,0.5808,-0.5, 0.932108,0.142863,0.332815,0.92981,0.559801,-0.403594, 0.692376,0.299843,0.656284,0.88375,0.575062,-0.323141, 0.634483,0.691277,0.345786,0.876135,0.59824,-0.339125, 0.634483,0.691277,0.345786,0.876135,0.59824,-0.339125, 0.729041,0.662418,0.172342,0.919197,0.584697,-0.4125, 0.932108,0.142863,0.332815,0.92981,0.559801,-0.403594, 0.503147,0.845347,-0.179534,0.858509,0.615264,-0.638667, 0.634482,0.691277,-0.345786,0.876135,0.59824,-0.660875, 0.729041,0.662418,-0.172342,0.919197,0.584697,-0.5875, 0.503147,0.845347,-0.179534,0.858509,0.615264,-0.638667, 0.729041,0.662418,-0.172342,0.919197,0.584697,-0.5875, 0.496158,0.862422,-0.100277,0.884513,0.611054,-0.5825, 0.634482,0.691277,-0.345786,0.876135,0.59824,-0.660875, 0.692376,0.299844,-0.656284,0.88375,0.575062,-0.676859, 0.932108,0.142863,-0.332815,0.92981,0.559801,-0.596406, 0.932108,0.142863,-0.332815,0.92981,0.559801,-0.596406, 0.729041,0.662418,-0.172342,0.919197,0.584697,-0.5875, 0.634482,0.691277,-0.345786,0.876135,0.59824,-0.660875, 0.973132,0.23025,0,0.945338,0.554869,-0.5, 0.788799,0.614652,0,0.934249,0.5808,-0.5, 0.729041,0.662418,-0.172342,0.919197,0.584697,-0.5875, 0.973132,0.23025,0,0.945338,0.554869,-0.5, 0.729041,0.662418,-0.172342,0.919197,0.584697,-0.5875, 0.932108,0.142863,-0.332815,0.92981,0.559801,-0.596406, 0.546916,0.837188,0,0.897467,0.608935,-0.5, 0.496158,0.862422,-0.100277,0.884513,0.611054,-0.5825, 0.729041,0.662418,-0.172342,0.919197,0.584697,-0.5875, 0.546916,0.837188,0,0.897467,0.608935,-0.5, 0.729041,0.662418,-0.172342,0.919197,0.584697,-0.5875, 0.788799,0.614652,0,0.934249,0.5808,-0.5, 0.744225,-0.02143,0.667585,0.865458,0.513412,-0.309219, 0.395884,0.173928,0.901679,0.782472,0.537348,-0.257187, 0.413121,0.093331,0.905881,0.798138,0.572966,-0.266375, 0.744225,-0.02143,0.667585,0.865458,0.513412,-0.309219, 0.413121,0.093331,0.905881,0.798138,0.572966,-0.266375, 0.749602,-0.05627,0.659493,0.877427,0.54752,-0.316437, 0.395884,0.173928,0.901679,0.782472,0.537348,-0.257187, 0.088734,0.313595,0.945402,0.682889,0.566071,-0.239844, 0.075758,0.234707,0.96911,0.702992,0.603501,-0.249687, 0.075758,0.234707,0.96911,0.702992,0.603501,-0.249687, 0.413121,0.093331,0.905881,0.798138,0.572966,-0.266375, 0.395884,0.173928,0.901679,0.782472,0.537348,-0.257187, 0.190084,0.486023,0.853024,0.716506,0.632271,-0.258297, 0.446948,0.373871,0.812686,0.80768,0.601112,-0.274594, 0.413121,0.093331,0.905881,0.798138,0.572966,-0.266375, 0.190084,0.486023,0.853024,0.716506,0.632271,-0.258297, 0.413121,0.093331,0.905881,0.798138,0.572966,-0.266375, 0.075758,0.234707,0.96911,0.702992,0.603501,-0.249687, 0.692376,0.299843,0.656284,0.88375,0.575062,-0.323141, 0.749602,-0.05627,0.659493,0.877427,0.54752,-0.316437, 0.413121,0.093331,0.905881,0.798138,0.572966,-0.266375, 0.692376,0.299843,0.656284,0.88375,0.575062,-0.323141, 0.413121,0.093331,0.905881,0.798138,0.572966,-0.266375, 0.446948,0.373871,0.812686,0.80768,0.601112,-0.274594, -0.208655,0.445101,0.870832,0.583305,0.594795,-0.257187, -0.468298,0.578298,0.668033,0.500319,0.618731,-0.309219, -0.541739,0.509206,0.668752,0.528557,0.659482,-0.316437, -0.541739,0.509206,0.668752,0.528557,0.659482,-0.316437, -0.227561,0.374378,0.89892,0.607846,0.634036,-0.266375, -0.208655,0.445101,0.870832,0.583305,0.594795,-0.257187, -0.424048,0.688165,0.588737,0.548866,0.688331,-0.323141, -0.109115,0.586342,0.802681,0.625134,0.662855,-0.274594, -0.227561,0.374378,0.89892,0.607846,0.634036,-0.266375, -0.424048,0.688165,0.588737,0.548866,0.688331,-0.323141, -0.227561,0.374378,0.89892,0.607846,0.634036,-0.266375, -0.541739,0.509206,0.668752,0.528557,0.659482,-0.316437, -0.109115,0.586342,0.802681,0.625134,0.662855,-0.274594, 0.190084,0.486023,0.853024,0.716506,0.632271,-0.258297, 0.075758,0.234707,0.96911,0.702992,0.603501,-0.249687, 0.075758,0.234707,0.96911,0.702992,0.603501,-0.249687, -0.227561,0.374378,0.89892,0.607846,0.634036,-0.266375, -0.109115,0.586342,0.802681,0.625134,0.662855,-0.274594, 0.088734,0.313595,0.945402,0.682889,0.566071,-0.239844, -0.208655,0.445101,0.870832,0.583305,0.594795,-0.257187, -0.227561,0.374378,0.89892,0.607846,0.634036,-0.266375, 0.088734,0.313595,0.945402,0.682889,0.566071,-0.239844, -0.227561,0.374378,0.89892,0.607846,0.634036,-0.266375, 0.075758,0.234707,0.96911,0.702992,0.603501,-0.249687, 0.123897,0.972069,0.199329,0.596285,0.705555,-0.361333, 0.226858,0.951027,0.209959,0.650852,0.69151,-0.335375, 0.096538,0.86115,0.4991,0.641688,0.680252,-0.294, 0.123897,0.972069,0.199329,0.596285,0.705555,-0.361333, 0.096538,0.86115,0.4991,0.641688,0.680252,-0.294, -0.070158,0.909054,0.410729,0.571915,0.702991,-0.339125, 0.226858,0.951027,0.209959,0.650852,0.69151,-0.335375, 0.329457,0.915147,0.232303,0.729578,0.666743,-0.322437, 0.2681,0.82446,0.498385,0.724816,0.652913,-0.2785, 0.2681,0.82446,0.498385,0.724816,0.652913,-0.2785, 0.096538,0.86115,0.4991,0.641688,0.680252,-0.294, 0.226858,0.951027,0.209959,0.650852,0.69151,-0.335375, 0.190084,0.486023,0.853024,0.716506,0.632271,-0.258297, -0.109115,0.586342,0.802681,0.625134,0.662855,-0.274594, 0.096538,0.86115,0.4991,0.641688,0.680252,-0.294, 0.190084,0.486023,0.853024,0.716506,0.632271,-0.258297, 0.096538,0.86115,0.4991,0.641688,0.680252,-0.294, 0.2681,0.82446,0.498385,0.724816,0.652913,-0.2785, -0.109115,0.586342,0.802681,0.625134,0.662855,-0.274594, -0.424048,0.688165,0.588737,0.548866,0.688331,-0.323141, -0.070158,0.909054,0.410729,0.571915,0.702991,-0.339125, -0.070158,0.909054,0.410729,0.571915,0.702991,-0.339125, 0.096538,0.86115,0.4991,0.641688,0.680252,-0.294, -0.109115,0.586342,0.802681,0.625134,0.662855,-0.274594, 0.423992,0.883446,0.199385,0.806863,0.637791,-0.335375, 0.503147,0.845347,0.179535,0.858509,0.615264,-0.361333, 0.634483,0.691277,0.345786,0.876135,0.59824,-0.339125, 0.634483,0.691277,0.345786,0.876135,0.59824,-0.339125, 0.454725,0.723574,0.519294,0.807153,0.623277,-0.294, 0.423992,0.883446,0.199385,0.806863,0.637791,-0.335375, 0.692376,0.299843,0.656284,0.88375,0.575062,-0.323141, 0.446948,0.373871,0.812686,0.80768,0.601112,-0.274594, 0.454725,0.723574,0.519294,0.807153,0.623277,-0.294, 0.692376,0.299843,0.656284,0.88375,0.575062,-0.323141, 0.454725,0.723574,0.519294,0.807153,0.623277,-0.294, 0.634483,0.691277,0.345786,0.876135,0.59824,-0.339125, 0.190084,0.486023,0.853024,0.716506,0.632271,-0.258297, 0.2681,0.82446,0.498385,0.724816,0.652913,-0.2785, 0.454725,0.723574,0.519294,0.807153,0.623277,-0.294, 0.190084,0.486023,0.853024,0.716506,0.632271,-0.258297, 0.454725,0.723574,0.519294,0.807153,0.623277,-0.294, 0.446948,0.373871,0.812686,0.80768,0.601112,-0.274594, 0.329457,0.915147,0.232303,0.729578,0.666743,-0.322437, 0.423992,0.883446,0.199385,0.806863,0.637791,-0.335375, 0.454725,0.723574,0.519294,0.807153,0.623277,-0.294, 0.329457,0.915147,0.232303,0.729578,0.666743,-0.322437, 0.454725,0.723574,0.519294,0.807153,0.623277,-0.294, 0.2681,0.82446,0.498385,0.724816,0.652913,-0.2785, -0.541739,0.509206,0.668752,0.528557,0.659482,-0.316437, -0.468298,0.578298,0.668033,0.500319,0.618731,-0.309219, -0.677265,0.639604,0.363619,0.450527,0.633092,-0.395938, -0.677265,0.639604,0.363619,0.450527,0.633092,-0.395938, -0.740712,0.587497,0.325872,0.480984,0.67475,-0.399875, -0.541739,0.509206,0.668752,0.528557,0.659482,-0.316437, -0.749144,0.662408,0,0.43393,0.63788,-0.5, -0.797112,0.603831,0,0.465127,0.679839,-0.5, -0.740712,0.587497,0.325872,0.480984,0.67475,-0.399875, -0.749144,0.662408,0,0.43393,0.63788,-0.5, -0.740712,0.587497,0.325872,0.480984,0.67475,-0.399875, -0.677265,0.639604,0.363619,0.450527,0.633092,-0.395938, -0.797112,0.603831,0,0.465127,0.679839,-0.5, -0.655082,0.755558,0,0.487673,0.709673,-0.5, -0.606207,0.755737,0.247737,0.503003,0.704166,-0.403594, -0.606207,0.755737,0.247737,0.503003,0.704166,-0.403594, -0.740712,0.587497,0.325872,0.480984,0.67475,-0.399875, -0.797112,0.603831,0,0.465127,0.679839,-0.5, -0.424048,0.688165,0.588737,0.548866,0.688331,-0.323141, -0.541739,0.509206,0.668752,0.528557,0.659482,-0.316437, -0.740712,0.587497,0.325872,0.480984,0.67475,-0.399875, -0.424048,0.688165,0.588737,0.548866,0.688331,-0.323141, -0.740712,0.587497,0.325872,0.480984,0.67475,-0.399875, -0.606207,0.755737,0.247737,0.503003,0.704166,-0.403594, -0.677265,0.639604,-0.363619,0.450527,0.633092,-0.604062, -0.468298,0.578298,-0.668033,0.500319,0.618731,-0.690781, -0.541738,0.509206,-0.668752,0.528557,0.659482,-0.683563, -0.541738,0.509206,-0.668752,0.528557,0.659482,-0.683563, -0.740713,0.587497,-0.325872,0.480984,0.67475,-0.600125, -0.677265,0.639604,-0.363619,0.450527,0.633092,-0.604062, -0.424048,0.688166,-0.588737,0.548866,0.688331,-0.676859, -0.606207,0.755737,-0.247737,0.503003,0.704166,-0.596406, -0.740713,0.587497,-0.325872,0.480984,0.67475,-0.600125, -0.424048,0.688166,-0.588737,0.548866,0.688331,-0.676859, -0.740713,0.587497,-0.325872,0.480984,0.67475,-0.600125, -0.541738,0.509206,-0.668752,0.528557,0.659482,-0.683563, -0.606207,0.755737,-0.247737,0.503003,0.704166,-0.596406, -0.655082,0.755558,0,0.487673,0.709673,-0.5, -0.797112,0.603831,0,0.465127,0.679839,-0.5, -0.797112,0.603831,0,0.465127,0.679839,-0.5, -0.740713,0.587497,-0.325872,0.480984,0.67475,-0.600125, -0.606207,0.755737,-0.247737,0.503003,0.704166,-0.596406, -0.749144,0.662408,0,0.43393,0.63788,-0.5, -0.677265,0.639604,-0.363619,0.450527,0.633092,-0.604062, -0.740713,0.587497,-0.325872,0.480984,0.67475,-0.600125, -0.749144,0.662408,0,0.43393,0.63788,-0.5, -0.740713,0.587497,-0.325872,0.480984,0.67475,-0.600125, -0.797112,0.603831,0,0.465127,0.679839,-0.5, 0.123896,0.972069,-0.199329,0.596285,0.705555,-0.638667, 0.139983,0.985063,-0.100277,0.573201,0.718247,-0.5825, -0.142867,0.968199,-0.205377,0.529644,0.718831,-0.5875, 0.123896,0.972069,-0.199329,0.596285,0.705555,-0.638667, -0.142867,0.968199,-0.205377,0.529644,0.718831,-0.5875, -0.070159,0.909054,-0.410729,0.571915,0.702991,-0.660875, 0.084449,0.996428,0,0.561689,0.724552,-0.5, -0.31505,0.949075,0,0.515384,0.725027,-0.5, -0.142867,0.968199,-0.205377,0.529644,0.718831,-0.5875, 0.084449,0.996428,0,0.561689,0.724552,-0.5, -0.142867,0.968199,-0.205377,0.529644,0.718831,-0.5875, 0.139983,0.985063,-0.100277,0.573201,0.718247,-0.5825, -0.31505,0.949075,0,0.515384,0.725027,-0.5, -0.655082,0.755558,0,0.487673,0.709673,-0.5, -0.606207,0.755737,-0.247737,0.503003,0.704166,-0.596406, -0.606207,0.755737,-0.247737,0.503003,0.704166,-0.596406, -0.142867,0.968199,-0.205377,0.529644,0.718831,-0.5875, -0.31505,0.949075,0,0.515384,0.725027,-0.5, -0.424048,0.688166,-0.588737,0.548866,0.688331,-0.676859, -0.070159,0.909054,-0.410729,0.571915,0.702991,-0.660875, -0.142867,0.968199,-0.205377,0.529644,0.718831,-0.5875, -0.424048,0.688166,-0.588737,0.548866,0.688331,-0.676859, -0.142867,0.968199,-0.205377,0.529644,0.718831,-0.5875, -0.606207,0.755737,-0.247737,0.503003,0.704166,-0.596406, 0.123897,0.972069,0.199329,0.596285,0.705555,-0.361333, -0.070158,0.909054,0.410729,0.571915,0.702991,-0.339125, -0.142867,0.968199,0.205377,0.529644,0.718831,-0.4125, 0.123897,0.972069,0.199329,0.596285,0.705555,-0.361333, -0.142867,0.968199,0.205377,0.529644,0.718831,-0.4125, 0.139983,0.985063,0.100277,0.573201,0.718247,-0.4175, -0.424048,0.688165,0.588737,0.548866,0.688331,-0.323141, -0.606207,0.755737,0.247737,0.503003,0.704166,-0.403594, -0.142867,0.968199,0.205377,0.529644,0.718831,-0.4125, -0.424048,0.688165,0.588737,0.548866,0.688331,-0.323141, -0.142867,0.968199,0.205377,0.529644,0.718831,-0.4125, -0.070158,0.909054,0.410729,0.571915,0.702991,-0.339125, -0.606207,0.755737,0.247737,0.503003,0.704166,-0.403594, -0.655082,0.755558,0,0.487673,0.709673,-0.5, -0.31505,0.949075,0,0.515384,0.725027,-0.5, -0.31505,0.949075,0,0.515384,0.725027,-0.5, -0.142867,0.968199,0.205377,0.529644,0.718831,-0.4125, -0.606207,0.755737,0.247737,0.503003,0.704166,-0.403594, 0.084449,0.996428,0,0.561689,0.724552,-0.5, 0.139983,0.985063,0.100277,0.573201,0.718247,-0.4175, -0.142867,0.968199,0.205377,0.529644,0.718831,-0.4125, 0.084449,0.996428,0,0.561689,0.724552,-0.5, -0.142867,0.968199,0.205377,0.529644,0.718831,-0.4125, -0.31505,0.949075,0,0.515384,0.725027,-0.5, -0.541738,0.509206,-0.668752,0.528557,0.659482,-0.683563, -0.468298,0.578298,-0.668033,0.500319,0.618731,-0.690781, -0.208655,0.445101,-0.870832,0.583305,0.594795,-0.742813, -0.208655,0.445101,-0.870832,0.583305,0.594795,-0.742813, -0.227561,0.374378,-0.89892,0.607846,0.634036,-0.733625, -0.541738,0.509206,-0.668752,0.528557,0.659482,-0.683563, 0.088733,0.313595,-0.945402,0.682889,0.566071,-0.760156, 0.075758,0.234708,-0.969109,0.702992,0.603501,-0.750313, -0.227561,0.374378,-0.89892,0.607846,0.634036,-0.733625, 0.088733,0.313595,-0.945402,0.682889,0.566071,-0.760156, -0.227561,0.374378,-0.89892,0.607846,0.634036,-0.733625, -0.208655,0.445101,-0.870832,0.583305,0.594795,-0.742813, 0.075758,0.234708,-0.969109,0.702992,0.603501,-0.750313, 0.190084,0.486023,-0.853024,0.716506,0.632271,-0.741703, -0.109115,0.586342,-0.802681,0.625134,0.662855,-0.725406, -0.109115,0.586342,-0.802681,0.625134,0.662855,-0.725406, -0.227561,0.374378,-0.89892,0.607846,0.634036,-0.733625, 0.075758,0.234708,-0.969109,0.702992,0.603501,-0.750313, -0.424048,0.688166,-0.588737,0.548866,0.688331,-0.676859, -0.541738,0.509206,-0.668752,0.528557,0.659482,-0.683563, -0.227561,0.374378,-0.89892,0.607846,0.634036,-0.733625, -0.424048,0.688166,-0.588737,0.548866,0.688331,-0.676859, -0.227561,0.374378,-0.89892,0.607846,0.634036,-0.733625, -0.109115,0.586342,-0.802681,0.625134,0.662855,-0.725406, 0.744225,-0.02143,-0.667585,0.865458,0.513412,-0.690781, 0.749601,-0.05627,-0.659493,0.877427,0.54752,-0.683563, 0.41312,0.093332,-0.905881,0.798138,0.572966,-0.733625, 0.744225,-0.02143,-0.667585,0.865458,0.513412,-0.690781, 0.41312,0.093332,-0.905881,0.798138,0.572966,-0.733625, 0.395884,0.173928,-0.901679,0.782472,0.537348,-0.742813, 0.692376,0.299844,-0.656284,0.88375,0.575062,-0.676859, 0.446948,0.373871,-0.812686,0.80768,0.601112,-0.725406, 0.41312,0.093332,-0.905881,0.798138,0.572966,-0.733625, 0.692376,0.299844,-0.656284,0.88375,0.575062,-0.676859, 0.41312,0.093332,-0.905881,0.798138,0.572966,-0.733625, 0.749601,-0.05627,-0.659493,0.877427,0.54752,-0.683563, 0.190084,0.486023,-0.853024,0.716506,0.632271,-0.741703, 0.075758,0.234708,-0.969109,0.702992,0.603501,-0.750313, 0.41312,0.093332,-0.905881,0.798138,0.572966,-0.733625, 0.190084,0.486023,-0.853024,0.716506,0.632271,-0.741703, 0.41312,0.093332,-0.905881,0.798138,0.572966,-0.733625, 0.446948,0.373871,-0.812686,0.80768,0.601112,-0.725406, 0.075758,0.234708,-0.969109,0.702992,0.603501,-0.750313, 0.088733,0.313595,-0.945402,0.682889,0.566071,-0.760156, 0.395884,0.173928,-0.901679,0.782472,0.537348,-0.742813, 0.395884,0.173928,-0.901679,0.782472,0.537348,-0.742813, 0.41312,0.093332,-0.905881,0.798138,0.572966,-0.733625, 0.075758,0.234708,-0.969109,0.702992,0.603501,-0.750313, 0.634482,0.691277,-0.345786,0.876135,0.59824,-0.660875, 0.503147,0.845347,-0.179534,0.858509,0.615264,-0.638667, 0.423992,0.883446,-0.199386,0.806863,0.637791,-0.664625, 0.423992,0.883446,-0.199386,0.806863,0.637791,-0.664625, 0.454725,0.723574,-0.519294,0.807153,0.623277,-0.706, 0.634482,0.691277,-0.345786,0.876135,0.59824,-0.660875, 0.329457,0.915147,-0.232303,0.729578,0.666743,-0.677562, 0.2681,0.82446,-0.498385,0.724816,0.652913,-0.7215, 0.454725,0.723574,-0.519294,0.807153,0.623277,-0.706, 0.329457,0.915147,-0.232303,0.729578,0.666743,-0.677562, 0.454725,0.723574,-0.519294,0.807153,0.623277,-0.706, 0.423992,0.883446,-0.199386,0.806863,0.637791,-0.664625, 0.190084,0.486023,-0.853024,0.716506,0.632271,-0.741703, 0.446948,0.373871,-0.812686,0.80768,0.601112,-0.725406, 0.454725,0.723574,-0.519294,0.807153,0.623277,-0.706, 0.190084,0.486023,-0.853024,0.716506,0.632271,-0.741703, 0.454725,0.723574,-0.519294,0.807153,0.623277,-0.706, 0.2681,0.82446,-0.498385,0.724816,0.652913,-0.7215, 0.692376,0.299844,-0.656284,0.88375,0.575062,-0.676859, 0.634482,0.691277,-0.345786,0.876135,0.59824,-0.660875, 0.454725,0.723574,-0.519294,0.807153,0.623277,-0.706, 0.692376,0.299844,-0.656284,0.88375,0.575062,-0.676859, 0.454725,0.723574,-0.519294,0.807153,0.623277,-0.706, 0.446948,0.373871,-0.812686,0.80768,0.601112,-0.725406, 0.123896,0.972069,-0.199329,0.596285,0.705555,-0.638667, -0.070159,0.909054,-0.410729,0.571915,0.702991,-0.660875, 0.096538,0.86115,-0.4991,0.641688,0.680252,-0.706, 0.123896,0.972069,-0.199329,0.596285,0.705555,-0.638667, 0.096538,0.86115,-0.4991,0.641688,0.680252,-0.706, 0.226858,0.951027,-0.209959,0.650852,0.69151,-0.664625, -0.070159,0.909054,-0.410729,0.571915,0.702991,-0.660875, -0.424048,0.688166,-0.588737,0.548866,0.688331,-0.676859, -0.109115,0.586342,-0.802681,0.625134,0.662855,-0.725406, -0.109115,0.586342,-0.802681,0.625134,0.662855,-0.725406, 0.096538,0.86115,-0.4991,0.641688,0.680252,-0.706, -0.070159,0.909054,-0.410729,0.571915,0.702991,-0.660875, 0.190084,0.486023,-0.853024,0.716506,0.632271,-0.741703, 0.2681,0.82446,-0.498385,0.724816,0.652913,-0.7215, 0.096538,0.86115,-0.4991,0.641688,0.680252,-0.706, 0.190084,0.486023,-0.853024,0.716506,0.632271,-0.741703, 0.096538,0.86115,-0.4991,0.641688,0.680252,-0.706, -0.109115,0.586342,-0.802681,0.625134,0.662855,-0.725406, 0.2681,0.82446,-0.498385,0.724816,0.652913,-0.7215, 0.329457,0.915147,-0.232303,0.729578,0.666743,-0.677562, 0.226858,0.951027,-0.209959,0.650852,0.69151,-0.664625, 0.226858,0.951027,-0.209959,0.650852,0.69151,-0.664625, 0.096538,0.86115,-0.4991,0.641688,0.680252,-0.706, 0.2681,0.82446,-0.498385,0.724816,0.652913,-0.7215, 0.503147,0.845347,0.179535,0.858509,0.615264,-0.361333, 0.423992,0.883446,0.199385,0.806863,0.637791,-0.335375, 0.398886,0.913527,0.079739,0.817112,0.642984,-0.4095, 0.503147,0.845347,0.179535,0.858509,0.615264,-0.361333, 0.398886,0.913527,0.079739,0.817112,0.642984,-0.4095, 0.496158,0.862422,0.100278,0.884513,0.611054,-0.4175, 0.423992,0.883446,0.199385,0.806863,0.637791,-0.335375, 0.329457,0.915147,0.232303,0.729578,0.666743,-0.322437, 0.324391,0.9421,0.08496,0.732447,0.675074,-0.40225, 0.324391,0.9421,0.08496,0.732447,0.675074,-0.40225, 0.398886,0.913527,0.079739,0.817112,0.642984,-0.4095, 0.423992,0.883446,0.199385,0.806863,0.637791,-0.335375, 0.325568,0.945519,0,0.733407,0.677865,-0.5, 0.404722,0.91444,0,0.824871,0.64325,-0.5, 0.398886,0.913527,0.079739,0.817112,0.642984,-0.4095, 0.325568,0.945519,0,0.733407,0.677865,-0.5, 0.398886,0.913527,0.079739,0.817112,0.642984,-0.4095, 0.324391,0.9421,0.08496,0.732447,0.675074,-0.40225, 0.404722,0.91444,0,0.824871,0.64325,-0.5, 0.546916,0.837188,0,0.897467,0.608935,-0.5, 0.496158,0.862422,0.100278,0.884513,0.611054,-0.4175, 0.496158,0.862422,0.100278,0.884513,0.611054,-0.4175, 0.398886,0.913527,0.079739,0.817112,0.642984,-0.4095, 0.404722,0.91444,0,0.824871,0.64325,-0.5, 0.123897,0.972069,0.199329,0.596285,0.705555,-0.361333, 0.139983,0.985063,0.100277,0.573201,0.718247,-0.4175, 0.248097,0.965448,0.079739,0.645973,0.701912,-0.4095, 0.123897,0.972069,0.199329,0.596285,0.705555,-0.361333, 0.248097,0.965448,0.079739,0.645973,0.701912,-0.4095, 0.226858,0.951027,0.209959,0.650852,0.69151,-0.335375, 0.139983,0.985063,0.100277,0.573201,0.718247,-0.4175, 0.084449,0.996428,0,0.561689,0.724552,-0.5, 0.24406,0.96976,0,0.640022,0.706898,-0.5, 0.24406,0.96976,0,0.640022,0.706898,-0.5, 0.248097,0.965448,0.079739,0.645973,0.701912,-0.4095, 0.139983,0.985063,0.100277,0.573201,0.718247,-0.4175, 0.325568,0.945519,0,0.733407,0.677865,-0.5, 0.324391,0.9421,0.08496,0.732447,0.675074,-0.40225, 0.248097,0.965448,0.079739,0.645973,0.701912,-0.4095, 0.325568,0.945519,0,0.733407,0.677865,-0.5, 0.248097,0.965448,0.079739,0.645973,0.701912,-0.4095, 0.24406,0.96976,0,0.640022,0.706898,-0.5, 0.324391,0.9421,0.08496,0.732447,0.675074,-0.40225, 0.329457,0.915147,0.232303,0.729578,0.666743,-0.322437, 0.226858,0.951027,0.209959,0.650852,0.69151,-0.335375, 0.226858,0.951027,0.209959,0.650852,0.69151,-0.335375, 0.248097,0.965448,0.079739,0.645973,0.701912,-0.4095, 0.324391,0.9421,0.08496,0.732447,0.675074,-0.40225, 0.123896,0.972069,-0.199329,0.596285,0.705555,-0.638667, 0.226858,0.951027,-0.209959,0.650852,0.69151,-0.664625, 0.248097,0.965448,-0.079739,0.645973,0.701912,-0.5905, 0.123896,0.972069,-0.199329,0.596285,0.705555,-0.638667, 0.248097,0.965448,-0.079739,0.645973,0.701912,-0.5905, 0.139983,0.985063,-0.100277,0.573201,0.718247,-0.5825, 0.226858,0.951027,-0.209959,0.650852,0.69151,-0.664625, 0.329457,0.915147,-0.232303,0.729578,0.666743,-0.677562, 0.324391,0.9421,-0.08496,0.732447,0.675074,-0.59775, 0.324391,0.9421,-0.08496,0.732447,0.675074,-0.59775, 0.248097,0.965448,-0.079739,0.645973,0.701912,-0.5905, 0.226858,0.951027,-0.209959,0.650852,0.69151,-0.664625, 0.325568,0.945519,0,0.733407,0.677865,-0.5, 0.24406,0.96976,0,0.640022,0.706898,-0.5, 0.248097,0.965448,-0.079739,0.645973,0.701912,-0.5905, 0.325568,0.945519,0,0.733407,0.677865,-0.5, 0.248097,0.965448,-0.079739,0.645973,0.701912,-0.5905, 0.324391,0.9421,-0.08496,0.732447,0.675074,-0.59775, 0.24406,0.96976,0,0.640022,0.706898,-0.5, 0.084449,0.996428,0,0.561689,0.724552,-0.5, 0.139983,0.985063,-0.100277,0.573201,0.718247,-0.5825, 0.139983,0.985063,-0.100277,0.573201,0.718247,-0.5825, 0.248097,0.965448,-0.079739,0.645973,0.701912,-0.5905, 0.24406,0.96976,0,0.640022,0.706898,-0.5, 0.503147,0.845347,-0.179534,0.858509,0.615264,-0.638667, 0.496158,0.862422,-0.100277,0.884513,0.611054,-0.5825, 0.398886,0.913527,-0.079739,0.817112,0.642984,-0.5905, 0.503147,0.845347,-0.179534,0.858509,0.615264,-0.638667, 0.398886,0.913527,-0.079739,0.817112,0.642984,-0.5905, 0.423992,0.883446,-0.199386,0.806863,0.637791,-0.664625, 0.496158,0.862422,-0.100277,0.884513,0.611054,-0.5825, 0.546916,0.837188,0,0.897467,0.608935,-0.5, 0.404722,0.91444,0,0.824871,0.64325,-0.5, 0.404722,0.91444,0,0.824871,0.64325,-0.5, 0.398886,0.913527,-0.079739,0.817112,0.642984,-0.5905, 0.496158,0.862422,-0.100277,0.884513,0.611054,-0.5825, 0.325568,0.945519,0,0.733407,0.677865,-0.5, 0.324391,0.9421,-0.08496,0.732447,0.675074,-0.59775, 0.398886,0.913527,-0.079739,0.817112,0.642984,-0.5905, 0.325568,0.945519,0,0.733407,0.677865,-0.5, 0.398886,0.913527,-0.079739,0.817112,0.642984,-0.5905, 0.404722,0.91444,0,0.824871,0.64325,-0.5, 0.324391,0.9421,-0.08496,0.732447,0.675074,-0.59775, 0.329457,0.915147,-0.232303,0.729578,0.666743,-0.677562, 0.423992,0.883446,-0.199386,0.806863,0.637791,-0.664625, 0.423992,0.883446,-0.199386,0.806863,0.637791,-0.664625, 0.398886,0.913527,-0.079739,0.817112,0.642984,-0.5905, 0.324391,0.9421,-0.08496,0.732447,0.675074,-0.59775, 0.744225,-0.02143,-0.667585,0.865458,0.513412,-0.690781, 0.730929,0.12699,-0.670535,0.856137,0.470533,-0.708313, 0.942442,-0.005211,-0.334328,0.911045,0.457192,-0.613625, 0.744225,-0.02143,-0.667585,0.865458,0.513412,-0.690781, 0.942442,-0.005211,-0.334328,0.911045,0.457192,-0.613625, 0.945978,-0.110612,-0.304781,0.91525,0.49905,-0.604062, 0.730929,0.12699,-0.670535,0.856137,0.470533,-0.708313, 0.725615,0.097758,-0.681122,0.846442,0.421012,-0.729453, 0.940489,-0.03309,-0.338208,0.907494,0.408859,-0.625156, 0.940489,-0.03309,-0.338208,0.907494,0.408859,-0.625156, 0.942442,-0.005211,-0.334328,0.911045,0.457192,-0.613625, 0.730929,0.12699,-0.670535,0.856137,0.470533,-0.708313, 0.998189,-0.060158,0,0.927845,0.404808,-0.5, 0.998674,-0.051473,0,0.929348,0.452746,-0.5, 0.942442,-0.005211,-0.334328,0.911045,0.457192,-0.613625, 0.998189,-0.060158,0,0.927845,0.404808,-0.5, 0.942442,-0.005211,-0.334328,0.911045,0.457192,-0.613625, 0.940489,-0.03309,-0.338208,0.907494,0.408859,-0.625156, 0.998674,-0.051473,0,0.929348,0.452746,-0.5, 0.980435,-0.196846,0,0.931847,0.494263,-0.5, 0.945978,-0.110612,-0.304781,0.91525,0.49905,-0.604062, 0.945978,-0.110612,-0.304781,0.91525,0.49905,-0.604062, 0.942442,-0.005211,-0.334328,0.911045,0.457192,-0.613625, 0.998674,-0.051473,0,0.929348,0.452746,-0.5, 0.711272,-0.0413,-0.701703,0.83335,0.366979,-0.7475, 0.63763,-0.234074,-0.733919,0.81384,0.310563,-0.75575, 0.846641,-0.361408,-0.390619,0.882792,0.301487,-0.6395, 0.846641,-0.361408,-0.390619,0.882792,0.301487,-0.6395, 0.924673,-0.163459,-0.343891,0.899707,0.356231,-0.635, 0.711272,-0.0413,-0.701703,0.83335,0.366979,-0.7475, 0.918091,-0.39637,0,0.905776,0.298462,-0.5, 0.985079,-0.172104,0,0.921826,0.352648,-0.5, 0.924673,-0.163459,-0.343891,0.899707,0.356231,-0.635, 0.918091,-0.39637,0,0.905776,0.298462,-0.5, 0.924673,-0.163459,-0.343891,0.899707,0.356231,-0.635, 0.846641,-0.361408,-0.390619,0.882792,0.301487,-0.6395, 0.985079,-0.172104,0,0.921826,0.352648,-0.5, 0.998189,-0.060158,0,0.927845,0.404808,-0.5, 0.940489,-0.03309,-0.338208,0.907494,0.408859,-0.625156, 0.940489,-0.03309,-0.338208,0.907494,0.408859,-0.625156, 0.924673,-0.163459,-0.343891,0.899707,0.356231,-0.635, 0.985079,-0.172104,0,0.921826,0.352648,-0.5, 0.725615,0.097758,-0.681122,0.846442,0.421012,-0.729453, 0.711272,-0.0413,-0.701703,0.83335,0.366979,-0.7475, 0.924673,-0.163459,-0.343891,0.899707,0.356231,-0.635, 0.725615,0.097758,-0.681122,0.846442,0.421012,-0.729453, 0.924673,-0.163459,-0.343891,0.899707,0.356231,-0.635, 0.940489,-0.03309,-0.338208,0.907494,0.408859,-0.625156, 0.846641,-0.361408,0.39062,0.882792,0.301487,-0.3605, 0.63763,-0.234074,0.733919,0.81384,0.310563,-0.24425, 0.711272,-0.0413,0.701703,0.83335,0.366979,-0.2525, 0.711272,-0.0413,0.701703,0.83335,0.366979,-0.2525, 0.924673,-0.16346,0.343891,0.899707,0.356231,-0.365, 0.846641,-0.361408,0.39062,0.882792,0.301487,-0.3605, 0.725614,0.097758,0.681122,0.846442,0.421012,-0.270547, 0.940489,-0.03309,0.338208,0.907494,0.408859,-0.374844, 0.924673,-0.16346,0.343891,0.899707,0.356231,-0.365, 0.725614,0.097758,0.681122,0.846442,0.421012,-0.270547, 0.924673,-0.16346,0.343891,0.899707,0.356231,-0.365, 0.711272,-0.0413,0.701703,0.83335,0.366979,-0.2525, 0.940489,-0.03309,0.338208,0.907494,0.408859,-0.374844, 0.998189,-0.060158,0,0.927845,0.404808,-0.5, 0.985079,-0.172104,0,0.921826,0.352648,-0.5, 0.985079,-0.172104,0,0.921826,0.352648,-0.5, 0.924673,-0.16346,0.343891,0.899707,0.356231,-0.365, 0.940489,-0.03309,0.338208,0.907494,0.408859,-0.374844, 0.918091,-0.39637,0,0.905776,0.298462,-0.5, 0.846641,-0.361408,0.39062,0.882792,0.301487,-0.3605, 0.924673,-0.16346,0.343891,0.899707,0.356231,-0.365, 0.918091,-0.39637,0,0.905776,0.298462,-0.5, 0.924673,-0.16346,0.343891,0.899707,0.356231,-0.365, 0.985079,-0.172104,0,0.921826,0.352648,-0.5, 0.744225,-0.02143,0.667585,0.865458,0.513412,-0.309219, 0.945978,-0.110612,0.304781,0.91525,0.49905,-0.395938, 0.942442,-0.005211,0.334328,0.911045,0.457192,-0.386375, 0.744225,-0.02143,0.667585,0.865458,0.513412,-0.309219, 0.942442,-0.005211,0.334328,0.911045,0.457192,-0.386375, 0.730929,0.126989,0.670535,0.856137,0.470533,-0.291687, 0.945978,-0.110612,0.304781,0.91525,0.49905,-0.395938, 0.980435,-0.196846,0,0.931847,0.494263,-0.5, 0.998674,-0.051473,0,0.929348,0.452746,-0.5, 0.998674,-0.051473,0,0.929348,0.452746,-0.5, 0.942442,-0.005211,0.334328,0.911045,0.457192,-0.386375, 0.945978,-0.110612,0.304781,0.91525,0.49905,-0.395938, 0.998189,-0.060158,0,0.927845,0.404808,-0.5, 0.940489,-0.03309,0.338208,0.907494,0.408859,-0.374844, 0.942442,-0.005211,0.334328,0.911045,0.457192,-0.386375, 0.998189,-0.060158,0,0.927845,0.404808,-0.5, 0.942442,-0.005211,0.334328,0.911045,0.457192,-0.386375, 0.998674,-0.051473,0,0.929348,0.452746,-0.5, 0.940489,-0.03309,0.338208,0.907494,0.408859,-0.374844, 0.725614,0.097758,0.681122,0.846442,0.421012,-0.270547, 0.730929,0.126989,0.670535,0.856137,0.470533,-0.291687, 0.730929,0.126989,0.670535,0.856137,0.470533,-0.291687, 0.942442,-0.005211,0.334328,0.911045,0.457192,-0.386375, 0.940489,-0.03309,0.338208,0.907494,0.408859,-0.374844, -0.468298,0.578298,-0.668033,0.500319,0.618731,-0.690781, -0.46274,0.649831,-0.602985,0.453481,0.568361,-0.708313, -0.1826,0.53251,-0.826493,0.544994,0.546127,-0.765125, -0.468298,0.578298,-0.668033,0.500319,0.618731,-0.690781, -0.1826,0.53251,-0.826493,0.544994,0.546127,-0.765125, -0.208655,0.445101,-0.870832,0.583305,0.594795,-0.742813, -0.46274,0.649831,-0.602985,0.453481,0.568361,-0.708313, -0.490654,0.624331,-0.60784,0.398726,0.51013,-0.729453, -0.208343,0.508292,-0.835603,0.500479,0.489876,-0.792031, -0.208343,0.508292,-0.835603,0.500479,0.489876,-0.792031, -0.1826,0.53251,-0.826493,0.544994,0.546127,-0.765125, -0.46274,0.649831,-0.602985,0.453481,0.568361,-0.708313, 0.081884,0.387365,-0.918283,0.622584,0.465571,-0.812891, 0.102672,0.412673,-0.905074,0.654809,0.519447,-0.784063, -0.1826,0.53251,-0.826493,0.544994,0.546127,-0.765125, 0.081884,0.387365,-0.918283,0.622584,0.465571,-0.812891, -0.1826,0.53251,-0.826493,0.544994,0.546127,-0.765125, -0.208343,0.508292,-0.835603,0.500479,0.489876,-0.792031, 0.102672,0.412673,-0.905074,0.654809,0.519447,-0.784063, 0.088733,0.313595,-0.945402,0.682889,0.566071,-0.760156, -0.208655,0.445101,-0.870832,0.583305,0.594795,-0.742813, -0.208655,0.445101,-0.870832,0.583305,0.594795,-0.742813, -0.1826,0.53251,-0.826493,0.544994,0.546127,-0.765125, 0.102672,0.412673,-0.905074,0.654809,0.519447,-0.784063, -0.59415,0.505848,-0.625383,0.346736,0.445797,-0.7475, -0.645198,0.198269,-0.737841,0.308193,0.377118,-0.75575, -0.328501,0.124794,-0.936223,0.423113,0.361992,-0.8255, -0.328501,0.124794,-0.936223,0.423113,0.361992,-0.8255, -0.261623,0.387306,-0.884052,0.45733,0.427884,-0.815, -0.59415,0.505848,-0.625383,0.346736,0.445797,-0.7475, 0.001894,-0.000876,-0.999998,0.561017,0.343841,-0.84875, 0.046906,0.258379,-0.964904,0.590043,0.406388,-0.8375, -0.261623,0.387306,-0.884052,0.45733,0.427884,-0.815, 0.001894,-0.000876,-0.999998,0.561017,0.343841,-0.84875, -0.261623,0.387306,-0.884052,0.45733,0.427884,-0.815, -0.328501,0.124794,-0.936223,0.423113,0.361992,-0.8255, 0.046906,0.258379,-0.964904,0.590043,0.406388,-0.8375, 0.081884,0.387365,-0.918283,0.622584,0.465571,-0.812891, -0.208343,0.508292,-0.835603,0.500479,0.489876,-0.792031, -0.208343,0.508292,-0.835603,0.500479,0.489876,-0.792031, -0.261623,0.387306,-0.884052,0.45733,0.427884,-0.815, 0.046906,0.258379,-0.964904,0.590043,0.406388,-0.8375, -0.490654,0.624331,-0.60784,0.398726,0.51013,-0.729453, -0.59415,0.505848,-0.625383,0.346736,0.445797,-0.7475, -0.261623,0.387306,-0.884052,0.45733,0.427884,-0.815, -0.490654,0.624331,-0.60784,0.398726,0.51013,-0.729453, -0.261623,0.387306,-0.884052,0.45733,0.427884,-0.815, -0.208343,0.508292,-0.835603,0.500479,0.489876,-0.792031, 0.63763,-0.234074,-0.733919,0.81384,0.310563,-0.75575, 0.711272,-0.0413,-0.701703,0.83335,0.366979,-0.7475, 0.369337,0.119431,-0.921589,0.722756,0.384892,-0.815, 0.63763,-0.234074,-0.733919,0.81384,0.310563,-0.75575, 0.369337,0.119431,-0.921589,0.722756,0.384892,-0.815, 0.330471,-0.133893,-0.93427,0.69892,0.325689,-0.8255, 0.711272,-0.0413,-0.701703,0.83335,0.366979,-0.7475, 0.725615,0.097758,-0.681122,0.846442,0.421012,-0.729453, 0.390355,0.256716,-0.884149,0.744688,0.441266,-0.792031, 0.390355,0.256716,-0.884149,0.744688,0.441266,-0.792031, 0.369337,0.119431,-0.921589,0.722756,0.384892,-0.815, 0.711272,-0.0413,-0.701703,0.83335,0.366979,-0.7475, 0.081884,0.387365,-0.918283,0.622584,0.465571,-0.812891, 0.046906,0.258379,-0.964904,0.590043,0.406388,-0.8375, 0.369337,0.119431,-0.921589,0.722756,0.384892,-0.815, 0.081884,0.387365,-0.918283,0.622584,0.465571,-0.812891, 0.369337,0.119431,-0.921589,0.722756,0.384892,-0.815, 0.390355,0.256716,-0.884149,0.744688,0.441266,-0.792031, 0.046906,0.258379,-0.964904,0.590043,0.406388,-0.8375, 0.001894,-0.000876,-0.999998,0.561017,0.343841,-0.84875, 0.330471,-0.133893,-0.93427,0.69892,0.325689,-0.8255, 0.330471,-0.133893,-0.93427,0.69892,0.325689,-0.8255, 0.369337,0.119431,-0.921589,0.722756,0.384892,-0.815, 0.046906,0.258379,-0.964904,0.590043,0.406388,-0.8375, 0.730929,0.12699,-0.670535,0.856137,0.470533,-0.708313, 0.744225,-0.02143,-0.667585,0.865458,0.513412,-0.690781, 0.395884,0.173928,-0.901679,0.782472,0.537348,-0.742813, 0.395884,0.173928,-0.901679,0.782472,0.537348,-0.742813, 0.403724,0.284631,-0.869478,0.764624,0.492766,-0.765125, 0.730929,0.12699,-0.670535,0.856137,0.470533,-0.708313, 0.088733,0.313595,-0.945402,0.682889,0.566071,-0.760156, 0.102672,0.412673,-0.905074,0.654809,0.519447,-0.784063, 0.403724,0.284631,-0.869478,0.764624,0.492766,-0.765125, 0.088733,0.313595,-0.945402,0.682889,0.566071,-0.760156, 0.403724,0.284631,-0.869478,0.764624,0.492766,-0.765125, 0.395884,0.173928,-0.901679,0.782472,0.537348,-0.742813, 0.102672,0.412673,-0.905074,0.654809,0.519447,-0.784063, 0.081884,0.387365,-0.918283,0.622584,0.465571,-0.812891, 0.390355,0.256716,-0.884149,0.744688,0.441266,-0.792031, 0.390355,0.256716,-0.884149,0.744688,0.441266,-0.792031, 0.403724,0.284631,-0.869478,0.764624,0.492766,-0.765125, 0.102672,0.412673,-0.905074,0.654809,0.519447,-0.784063, 0.725615,0.097758,-0.681122,0.846442,0.421012,-0.729453, 0.730929,0.12699,-0.670535,0.856137,0.470533,-0.708313, 0.403724,0.284631,-0.869478,0.764624,0.492766,-0.765125, 0.725615,0.097758,-0.681122,0.846442,0.421012,-0.729453, 0.403724,0.284631,-0.869478,0.764624,0.492766,-0.765125, 0.390355,0.256716,-0.884149,0.744688,0.441266,-0.792031, -0.468298,0.578298,0.668033,0.500319,0.618731,-0.309219, -0.208655,0.445101,0.870832,0.583305,0.594795,-0.257187, -0.1826,0.532509,0.826493,0.544994,0.546127,-0.234875, -0.468298,0.578298,0.668033,0.500319,0.618731,-0.309219, -0.1826,0.532509,0.826493,0.544994,0.546127,-0.234875, -0.46274,0.649831,0.602985,0.453481,0.568361,-0.291687, -0.208655,0.445101,0.870832,0.583305,0.594795,-0.257187, 0.088734,0.313595,0.945402,0.682889,0.566071,-0.239844, 0.102672,0.412673,0.905074,0.654809,0.519447,-0.215937, 0.102672,0.412673,0.905074,0.654809,0.519447,-0.215937, -0.1826,0.532509,0.826493,0.544994,0.546127,-0.234875, -0.208655,0.445101,0.870832,0.583305,0.594795,-0.257187, 0.081884,0.387365,0.918283,0.622584,0.465571,-0.187109, -0.208343,0.508292,0.835603,0.500479,0.489876,-0.207969, -0.1826,0.532509,0.826493,0.544994,0.546127,-0.234875, 0.081884,0.387365,0.918283,0.622584,0.465571,-0.187109, -0.1826,0.532509,0.826493,0.544994,0.546127,-0.234875, 0.102672,0.412673,0.905074,0.654809,0.519447,-0.215937, -0.208343,0.508292,0.835603,0.500479,0.489876,-0.207969, -0.490654,0.624331,0.60784,0.398726,0.51013,-0.270547, -0.46274,0.649831,0.602985,0.453481,0.568361,-0.291687, -0.46274,0.649831,0.602985,0.453481,0.568361,-0.291687, -0.1826,0.532509,0.826493,0.544994,0.546127,-0.234875, -0.208343,0.508292,0.835603,0.500479,0.489876,-0.207969, 0.395884,0.173928,0.901679,0.782472,0.537348,-0.257187, 0.744225,-0.02143,0.667585,0.865458,0.513412,-0.309219, 0.730929,0.126989,0.670535,0.856137,0.470533,-0.291687, 0.730929,0.126989,0.670535,0.856137,0.470533,-0.291687, 0.403724,0.284631,0.869478,0.764624,0.492766,-0.234875, 0.395884,0.173928,0.901679,0.782472,0.537348,-0.257187, 0.725614,0.097758,0.681122,0.846442,0.421012,-0.270547, 0.390355,0.256716,0.884149,0.744688,0.441266,-0.207969, 0.403724,0.284631,0.869478,0.764624,0.492766,-0.234875, 0.725614,0.097758,0.681122,0.846442,0.421012,-0.270547, 0.403724,0.284631,0.869478,0.764624,0.492766,-0.234875, 0.730929,0.126989,0.670535,0.856137,0.470533,-0.291687, 0.390355,0.256716,0.884149,0.744688,0.441266,-0.207969, 0.081884,0.387365,0.918283,0.622584,0.465571,-0.187109, 0.102672,0.412673,0.905074,0.654809,0.519447,-0.215937, 0.102672,0.412673,0.905074,0.654809,0.519447,-0.215937, 0.403724,0.284631,0.869478,0.764624,0.492766,-0.234875, 0.390355,0.256716,0.884149,0.744688,0.441266,-0.207969, 0.088734,0.313595,0.945402,0.682889,0.566071,-0.239844, 0.395884,0.173928,0.901679,0.782472,0.537348,-0.257187, 0.403724,0.284631,0.869478,0.764624,0.492766,-0.234875, 0.088734,0.313595,0.945402,0.682889,0.566071,-0.239844, 0.403724,0.284631,0.869478,0.764624,0.492766,-0.234875, 0.102672,0.412673,0.905074,0.654809,0.519447,-0.215937, 0.63763,-0.234074,0.733919,0.81384,0.310563,-0.24425, 0.330471,-0.133893,0.93427,0.69892,0.325689,-0.1745, 0.369337,0.119431,0.921589,0.722756,0.384892,-0.185, 0.63763,-0.234074,0.733919,0.81384,0.310563,-0.24425, 0.369337,0.119431,0.921589,0.722756,0.384892,-0.185, 0.711272,-0.0413,0.701703,0.83335,0.366979,-0.2525, 0.330471,-0.133893,0.93427,0.69892,0.325689,-0.1745, 0.001894,-0.000875,0.999998,0.561017,0.343841,-0.15125, 0.046906,0.258379,0.964904,0.590043,0.406388,-0.1625, 0.046906,0.258379,0.964904,0.590043,0.406388,-0.1625, 0.369337,0.119431,0.921589,0.722756,0.384892,-0.185, 0.330471,-0.133893,0.93427,0.69892,0.325689,-0.1745, 0.081884,0.387365,0.918283,0.622584,0.465571,-0.187109, 0.390355,0.256716,0.884149,0.744688,0.441266,-0.207969, 0.369337,0.119431,0.921589,0.722756,0.384892,-0.185, 0.081884,0.387365,0.918283,0.622584,0.465571,-0.187109, 0.369337,0.119431,0.921589,0.722756,0.384892,-0.185, 0.046906,0.258379,0.964904,0.590043,0.406388,-0.1625, 0.390355,0.256716,0.884149,0.744688,0.441266,-0.207969, 0.725614,0.097758,0.681122,0.846442,0.421012,-0.270547, 0.711272,-0.0413,0.701703,0.83335,0.366979,-0.2525, 0.711272,-0.0413,0.701703,0.83335,0.366979,-0.2525, 0.369337,0.119431,0.921589,0.722756,0.384892,-0.185, 0.390355,0.256716,0.884149,0.744688,0.441266,-0.207969, -0.328501,0.124794,0.936223,0.423113,0.361992,-0.1745, -0.645198,0.198269,0.737841,0.308193,0.377118,-0.24425, -0.59415,0.505848,0.625383,0.346736,0.445797,-0.2525, -0.59415,0.505848,0.625383,0.346736,0.445797,-0.2525, -0.261623,0.387306,0.884052,0.45733,0.427884,-0.185, -0.328501,0.124794,0.936223,0.423113,0.361992,-0.1745, -0.490654,0.624331,0.60784,0.398726,0.51013,-0.270547, -0.208343,0.508292,0.835603,0.500479,0.489876,-0.207969, -0.261623,0.387306,0.884052,0.45733,0.427884,-0.185, -0.490654,0.624331,0.60784,0.398726,0.51013,-0.270547, -0.261623,0.387306,0.884052,0.45733,0.427884,-0.185, -0.59415,0.505848,0.625383,0.346736,0.445797,-0.2525, -0.208343,0.508292,0.835603,0.500479,0.489876,-0.207969, 0.081884,0.387365,0.918283,0.622584,0.465571,-0.187109, 0.046906,0.258379,0.964904,0.590043,0.406388,-0.1625, 0.046906,0.258379,0.964904,0.590043,0.406388,-0.1625, -0.261623,0.387306,0.884052,0.45733,0.427884,-0.185, -0.208343,0.508292,0.835603,0.500479,0.489876,-0.207969, 0.001894,-0.000875,0.999998,0.561017,0.343841,-0.15125, -0.328501,0.124794,0.936223,0.423113,0.361992,-0.1745, -0.261623,0.387306,0.884052,0.45733,0.427884,-0.185, 0.001894,-0.000875,0.999998,0.561017,0.343841,-0.15125, -0.261623,0.387306,0.884052,0.45733,0.427884,-0.185, 0.046906,0.258379,0.964904,0.590043,0.406388,-0.1625, -0.46274,0.649831,-0.602985,0.453481,0.568361,-0.708313, -0.468298,0.578298,-0.668033,0.500319,0.618731,-0.690781, -0.677265,0.639604,-0.363619,0.450527,0.633092,-0.604062, -0.677265,0.639604,-0.363619,0.450527,0.633092,-0.604062, -0.641469,0.710708,-0.288812,0.398573,0.581701,-0.613625, -0.46274,0.649831,-0.602985,0.453481,0.568361,-0.708313, -0.749144,0.662408,0,0.43393,0.63788,-0.5, -0.689225,0.724547,0,0.380271,0.586148,-0.5, -0.641469,0.710708,-0.288812,0.398573,0.581701,-0.613625, -0.749144,0.662408,0,0.43393,0.63788,-0.5, -0.641469,0.710708,-0.288812,0.398573,0.581701,-0.613625, -0.677265,0.639604,-0.363619,0.450527,0.633092,-0.604062, -0.689225,0.724547,0,0.380271,0.586148,-0.5, -0.718122,0.695917,0,0.317323,0.526334,-0.5, -0.680327,0.681689,-0.269175,0.337674,0.522283,-0.625156, -0.680327,0.681689,-0.269175,0.337674,0.522283,-0.625156, -0.641469,0.710708,-0.288812,0.398573,0.581701,-0.613625, -0.689225,0.724547,0,0.380271,0.586148,-0.5, -0.490654,0.624331,-0.60784,0.398726,0.51013,-0.729453, -0.46274,0.649831,-0.602985,0.453481,0.568361,-0.708313, -0.641469,0.710708,-0.288812,0.398573,0.581701,-0.613625, -0.490654,0.624331,-0.60784,0.398726,0.51013,-0.729453, -0.641469,0.710708,-0.288812,0.398573,0.581701,-0.613625, -0.680327,0.681689,-0.269175,0.337674,0.522283,-0.625156, -0.677265,0.639604,0.363619,0.450527,0.633092,-0.395938, -0.468298,0.578298,0.668033,0.500319,0.618731,-0.309219, -0.46274,0.649831,0.602985,0.453481,0.568361,-0.291687, -0.46274,0.649831,0.602985,0.453481,0.568361,-0.291687, -0.641469,0.710708,0.288812,0.398573,0.581701,-0.386375, -0.677265,0.639604,0.363619,0.450527,0.633092,-0.395938, -0.490654,0.624331,0.60784,0.398726,0.51013,-0.270547, -0.680327,0.681689,0.269175,0.337674,0.522283,-0.374844, -0.641469,0.710708,0.288812,0.398573,0.581701,-0.386375, -0.490654,0.624331,0.60784,0.398726,0.51013,-0.270547, -0.641469,0.710708,0.288812,0.398573,0.581701,-0.386375, -0.46274,0.649831,0.602985,0.453481,0.568361,-0.291687, -0.680327,0.681689,0.269175,0.337674,0.522283,-0.374844, -0.718122,0.695917,0,0.317323,0.526334,-0.5, -0.689225,0.724547,0,0.380271,0.586148,-0.5, -0.689225,0.724547,0,0.380271,0.586148,-0.5, -0.641469,0.710708,0.288812,0.398573,0.581701,-0.386375, -0.680327,0.681689,0.269175,0.337674,0.522283,-0.374844, -0.749144,0.662408,0,0.43393,0.63788,-0.5, -0.677265,0.639604,0.363619,0.450527,0.633092,-0.395938, -0.641469,0.710708,0.288812,0.398573,0.581701,-0.386375, -0.749144,0.662408,0,0.43393,0.63788,-0.5, -0.641469,0.710708,0.288812,0.398573,0.581701,-0.386375, -0.689225,0.724547,0,0.380271,0.586148,-0.5, -0.59415,0.505848,0.625383,0.346736,0.445797,-0.2525, -0.645198,0.198269,0.737841,0.308193,0.377118,-0.24425, -0.862657,0.31434,0.396249,0.239242,0.386194,-0.3605, -0.862657,0.31434,0.396249,0.239242,0.386194,-0.3605, -0.778413,0.562971,0.277735,0.280379,0.456545,-0.365, -0.59415,0.505848,0.625383,0.346736,0.445797,-0.2525, -0.940313,0.340311,0,0.216258,0.389219,-0.5, -0.786635,0.617419,0,0.25826,0.460127,-0.5, -0.778413,0.562971,0.277735,0.280379,0.456545,-0.365, -0.940313,0.340311,0,0.216258,0.389219,-0.5, -0.778413,0.562971,0.277735,0.280379,0.456545,-0.365, -0.862657,0.31434,0.396249,0.239242,0.386194,-0.3605, -0.786635,0.617419,0,0.25826,0.460127,-0.5, -0.718122,0.695917,0,0.317323,0.526334,-0.5, -0.680327,0.681689,0.269175,0.337674,0.522283,-0.374844, -0.680327,0.681689,0.269175,0.337674,0.522283,-0.374844, -0.778413,0.562971,0.277735,0.280379,0.456545,-0.365, -0.786635,0.617419,0,0.25826,0.460127,-0.5, -0.680327,0.681689,0.269175,0.337674,0.522283,-0.374844, -0.490654,0.624331,0.60784,0.398726,0.51013,-0.270547, -0.59415,0.505848,0.625383,0.346736,0.445797,-0.2525, -0.59415,0.505848,0.625383,0.346736,0.445797,-0.2525, -0.778413,0.562971,0.277735,0.280379,0.456545,-0.365, -0.680327,0.681689,0.269175,0.337674,0.522283,-0.374844, -0.862657,0.31434,-0.396249,0.239242,0.386194,-0.6395, -0.645198,0.198269,-0.737841,0.308193,0.377118,-0.75575, -0.59415,0.505848,-0.625383,0.346736,0.445797,-0.7475, -0.59415,0.505848,-0.625383,0.346736,0.445797,-0.7475, -0.778414,0.562971,-0.277735,0.280379,0.456545,-0.635, -0.862657,0.31434,-0.396249,0.239242,0.386194,-0.6395, -0.59415,0.505848,-0.625383,0.346736,0.445797,-0.7475, -0.490654,0.624331,-0.60784,0.398726,0.51013,-0.729453, -0.680327,0.681689,-0.269175,0.337674,0.522283,-0.625156, -0.680327,0.681689,-0.269175,0.337674,0.522283,-0.625156, -0.778414,0.562971,-0.277735,0.280379,0.456545,-0.635, -0.59415,0.505848,-0.625383,0.346736,0.445797,-0.7475, -0.680327,0.681689,-0.269175,0.337674,0.522283,-0.625156, -0.718122,0.695917,0,0.317323,0.526334,-0.5, -0.786635,0.617419,0,0.25826,0.460127,-0.5, -0.786635,0.617419,0,0.25826,0.460127,-0.5, -0.778414,0.562971,-0.277735,0.280379,0.456545,-0.635, -0.680327,0.681689,-0.269175,0.337674,0.522283,-0.625156, -0.940313,0.340311,0,0.216258,0.389219,-0.5, -0.862657,0.31434,-0.396249,0.239242,0.386194,-0.6395, -0.778414,0.562971,-0.277735,0.280379,0.456545,-0.635, -0.940313,0.340311,0,0.216258,0.389219,-0.5, -0.778414,0.562971,-0.277735,0.280379,0.456545,-0.635, -0.786635,0.617419,0,0.25826,0.460127,-0.5, -0.68646,-0.277096,-0.672303,0.316229,0.114342,-0.690781, -0.340489,-0.258832,-0.903921,0.402791,0.111771,-0.742813, -0.337162,-0.377107,-0.86262,0.400082,0.165542,-0.765125, -0.68646,-0.277096,-0.672303,0.316229,0.114342,-0.690781, -0.337162,-0.377107,-0.86262,0.400082,0.165542,-0.765125, -0.681322,-0.324401,-0.656174,0.305709,0.170683,-0.708313, -0.009985,-0.330184,-0.943864,0.506665,0.108686,-0.760156, -0.024814,-0.431442,-0.901799,0.513329,0.159372,-0.784063, -0.337162,-0.377107,-0.86262,0.400082,0.165542,-0.765125, -0.009985,-0.330184,-0.943864,0.506665,0.108686,-0.760156, -0.337162,-0.377107,-0.86262,0.400082,0.165542,-0.765125, -0.340489,-0.258832,-0.903921,0.402791,0.111771,-0.742813, -0.024814,-0.431442,-0.901799,0.513329,0.159372,-0.784063, -0.034163,-0.398975,-0.916325,0.52383,0.217409,-0.812891, -0.348349,-0.345034,-0.871553,0.399335,0.22743,-0.792031, -0.348349,-0.345034,-0.871553,0.399335,0.22743,-0.792031, -0.337162,-0.377107,-0.86262,0.400082,0.165542,-0.765125, -0.024814,-0.431442,-0.901799,0.513329,0.159372,-0.784063, -0.348349,-0.345034,-0.871553,0.399335,0.22743,-0.792031, -0.700275,-0.236966,-0.673395,0.295589,0.235781,-0.729453, -0.681322,-0.324401,-0.656174,0.305709,0.170683,-0.708313, -0.681322,-0.324401,-0.656174,0.305709,0.170683,-0.708313, -0.337162,-0.377107,-0.86262,0.400082,0.165542,-0.765125, -0.348349,-0.345034,-0.871553,0.399335,0.22743,-0.792031, 0.612462,-0.474039,-0.632596,0.6971,0.103031,-0.690781, 0.562161,-0.569598,-0.59961,0.72095,0.148061,-0.708313, 0.274839,-0.496479,-0.823391,0.626577,0.153203,-0.765125, 0.612462,-0.474039,-0.632596,0.6971,0.103031,-0.690781, 0.274839,-0.496479,-0.823391,0.626577,0.153203,-0.765125, 0.309535,-0.382382,-0.870616,0.610539,0.105601,-0.742813, 0.562161,-0.569598,-0.59961,0.72095,0.148061,-0.708313, 0.562307,-0.55594,-0.612162,0.75207,0.199038,-0.729453, 0.267074,-0.480259,-0.835478,0.648325,0.207388,-0.792031, 0.267074,-0.480259,-0.835478,0.648325,0.207388,-0.792031, 0.274839,-0.496479,-0.823391,0.626577,0.153203,-0.765125, 0.562161,-0.569598,-0.59961,0.72095,0.148061,-0.708313, -0.034163,-0.398975,-0.916325,0.52383,0.217409,-0.812891, -0.024814,-0.431442,-0.901799,0.513329,0.159372,-0.784063, 0.274839,-0.496479,-0.823391,0.626577,0.153203,-0.765125, -0.034163,-0.398975,-0.916325,0.52383,0.217409,-0.812891, 0.274839,-0.496479,-0.823391,0.626577,0.153203,-0.765125, 0.267074,-0.480259,-0.835478,0.648325,0.207388,-0.792031, -0.024814,-0.431442,-0.901799,0.513329,0.159372,-0.784063, -0.009985,-0.330184,-0.943864,0.506665,0.108686,-0.760156, 0.309535,-0.382382,-0.870616,0.610539,0.105601,-0.742813, 0.309535,-0.382382,-0.870616,0.610539,0.105601,-0.742813, 0.274839,-0.496479,-0.823391,0.626577,0.153203,-0.765125, -0.024814,-0.431442,-0.901799,0.513329,0.159372,-0.784063, 0.603048,-0.457417,-0.653531,0.78489,0.253894,-0.7475, 0.63763,-0.234074,-0.733919,0.81384,0.310563,-0.75575, 0.330471,-0.133893,-0.93427,0.69892,0.325689,-0.8255, 0.330471,-0.133893,-0.93427,0.69892,0.325689,-0.8255, 0.285459,-0.369325,-0.884371,0.673275,0.265703,-0.815, 0.603048,-0.457417,-0.653531,0.78489,0.253894,-0.7475, 0.001894,-0.000876,-0.999998,0.561017,0.343841,-0.84875, -0.029604,-0.263,-0.964342,0.539336,0.279873,-0.8375, 0.285459,-0.369325,-0.884371,0.673275,0.265703,-0.815, 0.001894,-0.000876,-0.999998,0.561017,0.343841,-0.84875, 0.285459,-0.369325,-0.884371,0.673275,0.265703,-0.815, 0.330471,-0.133893,-0.93427,0.69892,0.325689,-0.8255, -0.029604,-0.263,-0.964342,0.539336,0.279873,-0.8375, -0.034163,-0.398975,-0.916325,0.52383,0.217409,-0.812891, 0.267074,-0.480259,-0.835478,0.648325,0.207388,-0.792031, 0.267074,-0.480259,-0.835478,0.648325,0.207388,-0.792031, 0.285459,-0.369325,-0.884371,0.673275,0.265703,-0.815, -0.029604,-0.263,-0.964342,0.539336,0.279873,-0.8375, 0.562307,-0.55594,-0.612162,0.75207,0.199038,-0.729453, 0.603048,-0.457417,-0.653531,0.78489,0.253894,-0.7475, 0.285459,-0.369325,-0.884371,0.673275,0.265703,-0.815, 0.562307,-0.55594,-0.612162,0.75207,0.199038,-0.729453, 0.285459,-0.369325,-0.884371,0.673275,0.265703,-0.815, 0.267074,-0.480259,-0.835478,0.648325,0.207388,-0.792031, -0.645198,0.198269,-0.737841,0.308193,0.377118,-0.75575, -0.746027,-0.030098,-0.665235,0.293781,0.305853,-0.7475, -0.383319,-0.173246,-0.907222,0.405397,0.294044,-0.815, -0.645198,0.198269,-0.737841,0.308193,0.377118,-0.75575, -0.383319,-0.173246,-0.907222,0.405397,0.294044,-0.815, -0.328501,0.124794,-0.936223,0.423113,0.361992,-0.8255, -0.700275,-0.236966,-0.673395,0.295589,0.235781,-0.729453, -0.348349,-0.345034,-0.871553,0.399335,0.22743,-0.792031, -0.383319,-0.173246,-0.907222,0.405397,0.294044,-0.815, -0.700275,-0.236966,-0.673395,0.295589,0.235781,-0.729453, -0.383319,-0.173246,-0.907222,0.405397,0.294044,-0.815, -0.746027,-0.030098,-0.665235,0.293781,0.305853,-0.7475, -0.034163,-0.398975,-0.916325,0.52383,0.217409,-0.812891, -0.029604,-0.263,-0.964342,0.539336,0.279873,-0.8375, -0.383319,-0.173246,-0.907222,0.405397,0.294044,-0.815, -0.034163,-0.398975,-0.916325,0.52383,0.217409,-0.812891, -0.383319,-0.173246,-0.907222,0.405397,0.294044,-0.815, -0.348349,-0.345034,-0.871553,0.399335,0.22743,-0.792031, -0.029604,-0.263,-0.964342,0.539336,0.279873,-0.8375, 0.001894,-0.000876,-0.999998,0.561017,0.343841,-0.84875, -0.328501,0.124794,-0.936223,0.423113,0.361992,-0.8255, -0.328501,0.124794,-0.936223,0.423113,0.361992,-0.8255, -0.383319,-0.173246,-0.907222,0.405397,0.294044,-0.815, -0.029604,-0.263,-0.964342,0.539336,0.279873,-0.8375, -0.68646,-0.277096,-0.672303,0.316229,0.114342,-0.690781, -0.681322,-0.324401,-0.656174,0.305709,0.170683,-0.708313, -0.90316,-0.279949,-0.32547,0.249085,0.173768,-0.613625, -0.68646,-0.277096,-0.672303,0.316229,0.114342,-0.690781, -0.90316,-0.279949,-0.32547,0.249085,0.173768,-0.613625, -0.917766,-0.211835,-0.335904,0.264292,0.115884,-0.604062, -0.681322,-0.324401,-0.656174,0.305709,0.170683,-0.708313, -0.700275,-0.236966,-0.673395,0.295589,0.235781,-0.729453, -0.92222,-0.200491,-0.330626,0.233342,0.240791,-0.625156, -0.92222,-0.200491,-0.330626,0.233342,0.240791,-0.625156, -0.90316,-0.279949,-0.32547,0.249085,0.173768,-0.613625, -0.681322,-0.324401,-0.656174,0.305709,0.170683,-0.708313, -0.978535,-0.206083,0,0.212593,0.242461,-0.5, -0.963203,-0.268774,0,0.23021,0.174796,-0.5, -0.90316,-0.279949,-0.32547,0.249085,0.173768,-0.613625, -0.978535,-0.206083,0,0.212593,0.242461,-0.5, -0.90316,-0.279949,-0.32547,0.249085,0.173768,-0.613625, -0.92222,-0.200491,-0.330626,0.233342,0.240791,-0.625156, -0.963203,-0.268774,0,0.23021,0.174796,-0.5, -0.984639,-0.174604,0,0.24698,0.116398,-0.5, -0.917766,-0.211835,-0.335904,0.264292,0.115884,-0.604062, -0.917766,-0.211835,-0.335904,0.264292,0.115884,-0.604062, -0.90316,-0.279949,-0.32547,0.249085,0.173768,-0.613625, -0.963203,-0.268774,0,0.23021,0.174796,-0.5, -0.746027,-0.030098,-0.665235,0.293781,0.305853,-0.7475, -0.645198,0.198269,-0.737841,0.308193,0.377118,-0.75575, -0.862657,0.31434,-0.396249,0.239242,0.386194,-0.6395, -0.862657,0.31434,-0.396249,0.239242,0.386194,-0.6395, -0.939405,0.002804,-0.342799,0.226812,0.312938,-0.635, -0.746027,-0.030098,-0.665235,0.293781,0.305853,-0.7475, -0.940313,0.340311,0,0.216258,0.389219,-0.5, -0.999757,-0.022023,0,0.204489,0.3153,-0.5, -0.939405,0.002804,-0.342799,0.226812,0.312938,-0.635, -0.940313,0.340311,0,0.216258,0.389219,-0.5, -0.939405,0.002804,-0.342799,0.226812,0.312938,-0.635, -0.862657,0.31434,-0.396249,0.239242,0.386194,-0.6395, -0.999757,-0.022023,0,0.204489,0.3153,-0.5, -0.978535,-0.206083,0,0.212593,0.242461,-0.5, -0.92222,-0.200491,-0.330626,0.233342,0.240791,-0.625156, -0.92222,-0.200491,-0.330626,0.233342,0.240791,-0.625156, -0.939405,0.002804,-0.342799,0.226812,0.312938,-0.635, -0.999757,-0.022023,0,0.204489,0.3153,-0.5, -0.700275,-0.236966,-0.673395,0.295589,0.235781,-0.729453, -0.746027,-0.030098,-0.665235,0.293781,0.305853,-0.7475, -0.939405,0.002804,-0.342799,0.226812,0.312938,-0.635, -0.700275,-0.236966,-0.673395,0.295589,0.235781,-0.729453, -0.939405,0.002804,-0.342799,0.226812,0.312938,-0.635, -0.92222,-0.200491,-0.330626,0.233342,0.240791,-0.625156, -0.862657,0.31434,0.396249,0.239242,0.386194,-0.3605, -0.645198,0.198269,0.737841,0.308193,0.377118,-0.24425, -0.746027,-0.030098,0.665236,0.293781,0.305853,-0.2525, -0.746027,-0.030098,0.665236,0.293781,0.305853,-0.2525, -0.939405,0.002804,0.342799,0.226812,0.312938,-0.365, -0.862657,0.31434,0.396249,0.239242,0.386194,-0.3605, -0.700275,-0.236966,0.673395,0.295589,0.235781,-0.270547, -0.92222,-0.200492,0.330626,0.233342,0.240791,-0.374844, -0.939405,0.002804,0.342799,0.226812,0.312938,-0.365, -0.700275,-0.236966,0.673395,0.295589,0.235781,-0.270547, -0.939405,0.002804,0.342799,0.226812,0.312938,-0.365, -0.746027,-0.030098,0.665236,0.293781,0.305853,-0.2525, -0.92222,-0.200492,0.330626,0.233342,0.240791,-0.374844, -0.978535,-0.206083,0,0.212593,0.242461,-0.5, -0.999757,-0.022023,0,0.204489,0.3153,-0.5, -0.999757,-0.022023,0,0.204489,0.3153,-0.5, -0.939405,0.002804,0.342799,0.226812,0.312938,-0.365, -0.92222,-0.200492,0.330626,0.233342,0.240791,-0.374844, -0.940313,0.340311,0,0.216258,0.389219,-0.5, -0.862657,0.31434,0.396249,0.239242,0.386194,-0.3605, -0.939405,0.002804,0.342799,0.226812,0.312938,-0.365, -0.940313,0.340311,0,0.216258,0.389219,-0.5, -0.939405,0.002804,0.342799,0.226812,0.312938,-0.365, -0.999757,-0.022023,0,0.204489,0.3153,-0.5, -0.68646,-0.277096,0.672303,0.316229,0.114342,-0.309219, -0.917766,-0.211835,0.335904,0.264292,0.115884,-0.395938, -0.90316,-0.279949,0.32547,0.249085,0.173768,-0.386375, -0.68646,-0.277096,0.672303,0.316229,0.114342,-0.309219, -0.90316,-0.279949,0.32547,0.249085,0.173768,-0.386375, -0.681322,-0.324401,0.656174,0.305709,0.170683,-0.291687, -0.917766,-0.211835,0.335904,0.264292,0.115884,-0.395938, -0.984639,-0.174604,0,0.24698,0.116398,-0.5, -0.963203,-0.268774,0,0.23021,0.174796,-0.5, -0.963203,-0.268774,0,0.23021,0.174796,-0.5, -0.90316,-0.279949,0.32547,0.249085,0.173768,-0.386375, -0.917766,-0.211835,0.335904,0.264292,0.115884,-0.395938, -0.978535,-0.206083,0,0.212593,0.242461,-0.5, -0.92222,-0.200492,0.330626,0.233342,0.240791,-0.374844, -0.90316,-0.279949,0.32547,0.249085,0.173768,-0.386375, -0.978535,-0.206083,0,0.212593,0.242461,-0.5, -0.90316,-0.279949,0.32547,0.249085,0.173768,-0.386375, -0.963203,-0.268774,0,0.23021,0.174796,-0.5, -0.92222,-0.200492,0.330626,0.233342,0.240791,-0.374844, -0.700275,-0.236966,0.673395,0.295589,0.235781,-0.270547, -0.681322,-0.324401,0.656174,0.305709,0.170683,-0.291687, -0.681322,-0.324401,0.656174,0.305709,0.170683,-0.291687, -0.90316,-0.279949,0.32547,0.249085,0.173768,-0.386375, -0.92222,-0.200492,0.330626,0.233342,0.240791,-0.374844, -0.68646,-0.277096,0.672303,0.316229,0.114342,-0.309219, -0.681322,-0.324401,0.656174,0.305709,0.170683,-0.291687, -0.337162,-0.377107,0.862619,0.400082,0.165542,-0.234875, -0.68646,-0.277096,0.672303,0.316229,0.114342,-0.309219, -0.337162,-0.377107,0.862619,0.400082,0.165542,-0.234875, -0.340489,-0.258832,0.903921,0.402791,0.111771,-0.257187, -0.681322,-0.324401,0.656174,0.305709,0.170683,-0.291687, -0.700275,-0.236966,0.673395,0.295589,0.235781,-0.270547, -0.34835,-0.345034,0.871553,0.399335,0.22743,-0.207969, -0.34835,-0.345034,0.871553,0.399335,0.22743,-0.207969, -0.337162,-0.377107,0.862619,0.400082,0.165542,-0.234875, -0.681322,-0.324401,0.656174,0.305709,0.170683,-0.291687, -0.34835,-0.345034,0.871553,0.399335,0.22743,-0.207969, -0.034164,-0.398975,0.916325,0.52383,0.217409,-0.187109, -0.024814,-0.431443,0.901799,0.513329,0.159372,-0.215937, -0.024814,-0.431443,0.901799,0.513329,0.159372,-0.215937, -0.337162,-0.377107,0.862619,0.400082,0.165542,-0.234875, -0.34835,-0.345034,0.871553,0.399335,0.22743,-0.207969, -0.009985,-0.330184,0.943864,0.506665,0.108686,-0.239844, -0.340489,-0.258832,0.903921,0.402791,0.111771,-0.257187, -0.337162,-0.377107,0.862619,0.400082,0.165542,-0.234875, -0.009985,-0.330184,0.943864,0.506665,0.108686,-0.239844, -0.337162,-0.377107,0.862619,0.400082,0.165542,-0.234875, -0.024814,-0.431443,0.901799,0.513329,0.159372,-0.215937, -0.645198,0.198269,0.737841,0.308193,0.377118,-0.24425, -0.328501,0.124794,0.936223,0.423113,0.361992,-0.1745, -0.383319,-0.173246,0.907222,0.405397,0.294044,-0.185, -0.645198,0.198269,0.737841,0.308193,0.377118,-0.24425, -0.383319,-0.173246,0.907222,0.405397,0.294044,-0.185, -0.746027,-0.030098,0.665236,0.293781,0.305853,-0.2525, -0.328501,0.124794,0.936223,0.423113,0.361992,-0.1745, 0.001894,-0.000875,0.999998,0.561017,0.343841,-0.15125, -0.029604,-0.263,0.964342,0.539336,0.279873,-0.1625, -0.029604,-0.263,0.964342,0.539336,0.279873,-0.1625, -0.383319,-0.173246,0.907222,0.405397,0.294044,-0.185, -0.328501,0.124794,0.936223,0.423113,0.361992,-0.1745, -0.034164,-0.398975,0.916325,0.52383,0.217409,-0.187109, -0.34835,-0.345034,0.871553,0.399335,0.22743,-0.207969, -0.383319,-0.173246,0.907222,0.405397,0.294044,-0.185, -0.034164,-0.398975,0.916325,0.52383,0.217409,-0.187109, -0.383319,-0.173246,0.907222,0.405397,0.294044,-0.185, -0.029604,-0.263,0.964342,0.539336,0.279873,-0.1625, -0.700275,-0.236966,0.673395,0.295589,0.235781,-0.270547, -0.746027,-0.030098,0.665236,0.293781,0.305853,-0.2525, -0.383319,-0.173246,0.907222,0.405397,0.294044,-0.185, -0.700275,-0.236966,0.673395,0.295589,0.235781,-0.270547, -0.383319,-0.173246,0.907222,0.405397,0.294044,-0.185, -0.34835,-0.345034,0.871553,0.399335,0.22743,-0.207969, 0.330471,-0.133893,0.93427,0.69892,0.325689,-0.1745, 0.63763,-0.234074,0.733919,0.81384,0.310563,-0.24425, 0.603048,-0.457417,0.653531,0.78489,0.253894,-0.2525, 0.603048,-0.457417,0.653531,0.78489,0.253894,-0.2525, 0.285459,-0.369325,0.884371,0.673275,0.265703,-0.185, 0.330471,-0.133893,0.93427,0.69892,0.325689,-0.1745, 0.562306,-0.55594,0.612162,0.75207,0.199038,-0.270547, 0.267074,-0.480259,0.835478,0.648325,0.207388,-0.207969, 0.285459,-0.369325,0.884371,0.673275,0.265703,-0.185, 0.562306,-0.55594,0.612162,0.75207,0.199038,-0.270547, 0.285459,-0.369325,0.884371,0.673275,0.265703,-0.185, 0.603048,-0.457417,0.653531,0.78489,0.253894,-0.2525, 0.267074,-0.480259,0.835478,0.648325,0.207388,-0.207969, -0.034164,-0.398975,0.916325,0.52383,0.217409,-0.187109, -0.029604,-0.263,0.964342,0.539336,0.279873,-0.1625, -0.029604,-0.263,0.964342,0.539336,0.279873,-0.1625, 0.285459,-0.369325,0.884371,0.673275,0.265703,-0.185, 0.267074,-0.480259,0.835478,0.648325,0.207388,-0.207969, 0.001894,-0.000875,0.999998,0.561017,0.343841,-0.15125, 0.330471,-0.133893,0.93427,0.69892,0.325689,-0.1745, 0.285459,-0.369325,0.884371,0.673275,0.265703,-0.185, 0.001894,-0.000875,0.999998,0.561017,0.343841,-0.15125, 0.285459,-0.369325,0.884371,0.673275,0.265703,-0.185, -0.029604,-0.263,0.964342,0.539336,0.279873,-0.1625, 0.612462,-0.474038,0.632596,0.6971,0.103031,-0.309219, 0.309535,-0.382382,0.870616,0.610539,0.105601,-0.257187, 0.274839,-0.496479,0.823391,0.626577,0.153203,-0.234875, 0.612462,-0.474038,0.632596,0.6971,0.103031,-0.309219, 0.274839,-0.496479,0.823391,0.626577,0.153203,-0.234875, 0.562162,-0.569598,0.59961,0.72095,0.148061,-0.291687, 0.309535,-0.382382,0.870616,0.610539,0.105601,-0.257187, -0.009985,-0.330184,0.943864,0.506665,0.108686,-0.239844, -0.024814,-0.431443,0.901799,0.513329,0.159372,-0.215937, -0.024814,-0.431443,0.901799,0.513329,0.159372,-0.215937, 0.274839,-0.496479,0.823391,0.626577,0.153203,-0.234875, 0.309535,-0.382382,0.870616,0.610539,0.105601,-0.257187, -0.034164,-0.398975,0.916325,0.52383,0.217409,-0.187109, 0.267074,-0.480259,0.835478,0.648325,0.207388,-0.207969, 0.274839,-0.496479,0.823391,0.626577,0.153203,-0.234875, -0.034164,-0.398975,0.916325,0.52383,0.217409,-0.187109, 0.274839,-0.496479,0.823391,0.626577,0.153203,-0.234875, -0.024814,-0.431443,0.901799,0.513329,0.159372,-0.215937, 0.267074,-0.480259,0.835478,0.648325,0.207388,-0.207969, 0.562306,-0.55594,0.612162,0.75207,0.199038,-0.270547, 0.562162,-0.569598,0.59961,0.72095,0.148061,-0.291687, 0.562162,-0.569598,0.59961,0.72095,0.148061,-0.291687, 0.274839,-0.496479,0.823391,0.626577,0.153203,-0.234875, 0.267074,-0.480259,0.835478,0.648325,0.207388,-0.207969, 0.612462,-0.474038,0.632596,0.6971,0.103031,-0.309219, 0.562162,-0.569598,0.59961,0.72095,0.148061,-0.291687, 0.752224,-0.592299,0.288689,0.777574,0.144976,-0.386375, 0.612462,-0.474038,0.632596,0.6971,0.103031,-0.309219, 0.752224,-0.592299,0.288689,0.777574,0.144976,-0.386375, 0.829185,-0.462729,0.313581,0.749037,0.101488,-0.395938, 0.562162,-0.569598,0.59961,0.72095,0.148061,-0.291687, 0.562306,-0.55594,0.612162,0.75207,0.199038,-0.270547, 0.743616,-0.602792,0.28927,0.814318,0.194027,-0.374844, 0.743616,-0.602792,0.28927,0.814318,0.194027,-0.374844, 0.752224,-0.592299,0.288689,0.777574,0.144976,-0.386375, 0.562162,-0.569598,0.59961,0.72095,0.148061,-0.291687, 0.788677,-0.614808,0,0.835067,0.192357,-0.5, 0.807803,-0.589452,0,0.796449,0.143948,-0.5, 0.752224,-0.592299,0.288689,0.777574,0.144976,-0.386375, 0.788677,-0.614808,0,0.835067,0.192357,-0.5, 0.752224,-0.592299,0.288689,0.777574,0.144976,-0.386375, 0.743616,-0.602792,0.28927,0.814318,0.194027,-0.374844, 0.807803,-0.589452,0,0.796449,0.143948,-0.5, 0.902893,-0.429866,0,0.766349,0.100974,-0.5, 0.829185,-0.462729,0.313581,0.749037,0.101488,-0.395938, 0.829185,-0.462729,0.313581,0.749037,0.101488,-0.395938, 0.752224,-0.592299,0.288689,0.777574,0.144976,-0.386375, 0.807803,-0.589452,0,0.796449,0.143948,-0.5, 0.603048,-0.457417,0.653531,0.78489,0.253894,-0.2525, 0.63763,-0.234074,0.733919,0.81384,0.310563,-0.24425, 0.846641,-0.361408,0.39062,0.882792,0.301487,-0.3605, 0.846641,-0.361408,0.39062,0.882792,0.301487,-0.3605, 0.784719,-0.539182,0.305775,0.85186,0.246808,-0.365, 0.603048,-0.457417,0.653531,0.78489,0.253894,-0.2525, 0.918091,-0.39637,0,0.905776,0.298462,-0.5, 0.822786,-0.568352,0,0.874183,0.244447,-0.5, 0.784719,-0.539182,0.305775,0.85186,0.246808,-0.365, 0.918091,-0.39637,0,0.905776,0.298462,-0.5, 0.784719,-0.539182,0.305775,0.85186,0.246808,-0.365, 0.846641,-0.361408,0.39062,0.882792,0.301487,-0.3605, 0.822786,-0.568352,0,0.874183,0.244447,-0.5, 0.788677,-0.614808,0,0.835067,0.192357,-0.5, 0.743616,-0.602792,0.28927,0.814318,0.194027,-0.374844, 0.743616,-0.602792,0.28927,0.814318,0.194027,-0.374844, 0.784719,-0.539182,0.305775,0.85186,0.246808,-0.365, 0.822786,-0.568352,0,0.874183,0.244447,-0.5, 0.562306,-0.55594,0.612162,0.75207,0.199038,-0.270547, 0.603048,-0.457417,0.653531,0.78489,0.253894,-0.2525, 0.784719,-0.539182,0.305775,0.85186,0.246808,-0.365, 0.562306,-0.55594,0.612162,0.75207,0.199038,-0.270547, 0.784719,-0.539182,0.305775,0.85186,0.246808,-0.365, 0.743616,-0.602792,0.28927,0.814318,0.194027,-0.374844, 0.846641,-0.361408,-0.390619,0.882792,0.301487,-0.6395, 0.63763,-0.234074,-0.733919,0.81384,0.310563,-0.75575, 0.603048,-0.457417,-0.653531,0.78489,0.253894,-0.7475, 0.603048,-0.457417,-0.653531,0.78489,0.253894,-0.7475, 0.784719,-0.539182,-0.305775,0.85186,0.246808,-0.635, 0.846641,-0.361408,-0.390619,0.882792,0.301487,-0.6395, 0.562307,-0.55594,-0.612162,0.75207,0.199038,-0.729453, 0.743616,-0.602791,-0.28927,0.814318,0.194027,-0.625156, 0.784719,-0.539182,-0.305775,0.85186,0.246808,-0.635, 0.562307,-0.55594,-0.612162,0.75207,0.199038,-0.729453, 0.784719,-0.539182,-0.305775,0.85186,0.246808,-0.635, 0.603048,-0.457417,-0.653531,0.78489,0.253894,-0.7475, 0.743616,-0.602791,-0.28927,0.814318,0.194027,-0.625156, 0.788677,-0.614808,0,0.835067,0.192357,-0.5, 0.822786,-0.568352,0,0.874183,0.244447,-0.5, 0.822786,-0.568352,0,0.874183,0.244447,-0.5, 0.784719,-0.539182,-0.305775,0.85186,0.246808,-0.635, 0.743616,-0.602791,-0.28927,0.814318,0.194027,-0.625156, 0.918091,-0.39637,0,0.905776,0.298462,-0.5, 0.846641,-0.361408,-0.390619,0.882792,0.301487,-0.6395, 0.784719,-0.539182,-0.305775,0.85186,0.246808,-0.635, 0.918091,-0.39637,0,0.905776,0.298462,-0.5, 0.784719,-0.539182,-0.305775,0.85186,0.246808,-0.635, 0.822786,-0.568352,0,0.874183,0.244447,-0.5, 0.612462,-0.474039,-0.632596,0.6971,0.103031,-0.690781, 0.829185,-0.462729,-0.313581,0.749037,0.101488,-0.604062, 0.752224,-0.592299,-0.288689,0.777574,0.144976,-0.613625, 0.612462,-0.474039,-0.632596,0.6971,0.103031,-0.690781, 0.752224,-0.592299,-0.288689,0.777574,0.144976,-0.613625, 0.562161,-0.569598,-0.59961,0.72095,0.148061,-0.708313, 0.829185,-0.462729,-0.313581,0.749037,0.101488,-0.604062, 0.902893,-0.429866,0,0.766349,0.100974,-0.5, 0.807803,-0.589452,0,0.796449,0.143948,-0.5, 0.807803,-0.589452,0,0.796449,0.143948,-0.5, 0.752224,-0.592299,-0.288689,0.777574,0.144976,-0.613625, 0.829185,-0.462729,-0.313581,0.749037,0.101488,-0.604062, 0.788677,-0.614808,0,0.835067,0.192357,-0.5, 0.743616,-0.602791,-0.28927,0.814318,0.194027,-0.625156, 0.752224,-0.592299,-0.288689,0.777574,0.144976,-0.613625, 0.788677,-0.614808,0,0.835067,0.192357,-0.5, 0.752224,-0.592299,-0.288689,0.777574,0.144976,-0.613625, 0.807803,-0.589452,0,0.796449,0.143948,-0.5, 0.743616,-0.602791,-0.28927,0.814318,0.194027,-0.625156, 0.562307,-0.55594,-0.612162,0.75207,0.199038,-0.729453, 0.562161,-0.569598,-0.59961,0.72095,0.148061,-0.708313, 0.562161,-0.569598,-0.59961,0.72095,0.148061,-0.708313, 0.752224,-0.592299,-0.288689,0.777574,0.144976,-0.613625, 0.743616,-0.602791,-0.28927,0.814318,0.194027,-0.625156, 0.662382,-0.336592,0.669295,0.68609,0.066012,-0.316437, 0.612462,-0.474038,0.632596,0.6971,0.103031,-0.309219, 0.829185,-0.462729,0.313581,0.749037,0.101488,-0.395938, 0.829185,-0.462729,0.313581,0.749037,0.101488,-0.395938, 0.877019,-0.354062,0.324773,0.736115,0.065395,-0.399875, 0.662382,-0.336592,0.669295,0.68609,0.066012,-0.316437, 0.902893,-0.429866,0,0.766349,0.100974,-0.5, 0.936513,-0.350633,0,0.75279,0.06519,-0.5, 0.877019,-0.354062,0.324773,0.736115,0.065395,-0.399875, 0.902893,-0.429866,0,0.766349,0.100974,-0.5, 0.877019,-0.354062,0.324773,0.736115,0.065395,-0.399875, 0.829185,-0.462729,0.313581,0.749037,0.101488,-0.395938, 0.936513,-0.350633,0,0.75279,0.06519,-0.5, 0.796583,-0.60453,0,0.742322,0.036664,-0.5, 0.776532,-0.563325,0.282246,0.726029,0.037019,-0.403594, 0.776532,-0.563325,0.282246,0.726029,0.037019,-0.403594, 0.877019,-0.354062,0.324773,0.736115,0.065395,-0.399875, 0.936513,-0.350633,0,0.75279,0.06519,-0.5, 0.609651,-0.5022,0.613287,0.677491,0.037477,-0.323141, 0.662382,-0.336592,0.669295,0.68609,0.066012,-0.316437, 0.877019,-0.354062,0.324773,0.736115,0.065395,-0.399875, 0.609651,-0.5022,0.613287,0.677491,0.037477,-0.323141, 0.877019,-0.354062,0.324773,0.736115,0.065395,-0.399875, 0.776532,-0.563325,0.282246,0.726029,0.037019,-0.403594, 0.829185,-0.462729,-0.313581,0.749037,0.101488,-0.604062, 0.612462,-0.474039,-0.632596,0.6971,0.103031,-0.690781, 0.662382,-0.336592,-0.669295,0.68609,0.066012,-0.683563, 0.662382,-0.336592,-0.669295,0.68609,0.066012,-0.683563, 0.877019,-0.354062,-0.324773,0.736115,0.065395,-0.600125, 0.829185,-0.462729,-0.313581,0.749037,0.101488,-0.604062, 0.609651,-0.5022,-0.613287,0.677491,0.037477,-0.676859, 0.776532,-0.563325,-0.282246,0.726029,0.037019,-0.596406, 0.877019,-0.354062,-0.324773,0.736115,0.065395,-0.600125, 0.609651,-0.5022,-0.613287,0.677491,0.037477,-0.676859, 0.877019,-0.354062,-0.324773,0.736115,0.065395,-0.600125, 0.662382,-0.336592,-0.669295,0.68609,0.066012,-0.683563, 0.776532,-0.563325,-0.282246,0.726029,0.037019,-0.596406, 0.796583,-0.60453,0,0.742322,0.036664,-0.5, 0.936513,-0.350633,0,0.75279,0.06519,-0.5, 0.936513,-0.350633,0,0.75279,0.06519,-0.5, 0.877019,-0.354062,-0.324773,0.736115,0.065395,-0.600125, 0.776532,-0.563325,-0.282246,0.726029,0.037019,-0.596406, 0.902893,-0.429866,0,0.766349,0.100974,-0.5, 0.829185,-0.462729,-0.313581,0.749037,0.101488,-0.604062, 0.877019,-0.354062,-0.324773,0.736115,0.065395,-0.600125, 0.902893,-0.429866,0,0.766349,0.100974,-0.5, 0.877019,-0.354062,-0.324773,0.736115,0.065395,-0.600125, 0.936513,-0.350633,0,0.75279,0.06519,-0.5, 0.199329,-0.959446,-0.199329,0.638667,0.007537,-0.638667, 0.18835,-0.976969,-0.100277,0.664625,0.003052,-0.5825, 0.460562,-0.87149,-0.168487,0.706,0.016681,-0.5875, 0.199329,-0.959446,-0.199329,0.638667,0.007537,-0.638667, 0.460562,-0.87149,-0.168487,0.706,0.016681,-0.5875, 0.392801,-0.830761,-0.394389,0.660875,0.017896,-0.660875, 0.244558,-0.969635,0,0.677562,0.000839,-0.5, 0.528671,-0.848827,0,0.7215,0.015465,-0.5, 0.460562,-0.87149,-0.168487,0.706,0.016681,-0.5875, 0.244558,-0.969635,0,0.677562,0.000839,-0.5, 0.460562,-0.87149,-0.168487,0.706,0.016681,-0.5875, 0.18835,-0.976969,-0.100277,0.664625,0.003052,-0.5825, 0.796583,-0.60453,0,0.742322,0.036664,-0.5, 0.776532,-0.563325,-0.282246,0.726029,0.037019,-0.596406, 0.460562,-0.87149,-0.168487,0.706,0.016681,-0.5875, 0.796583,-0.60453,0,0.742322,0.036664,-0.5, 0.460562,-0.87149,-0.168487,0.706,0.016681,-0.5875, 0.528671,-0.848827,0,0.7215,0.015465,-0.5, 0.776532,-0.563325,-0.282246,0.726029,0.037019,-0.596406, 0.609651,-0.5022,-0.613287,0.677491,0.037477,-0.676859, 0.392801,-0.830761,-0.394389,0.660875,0.017896,-0.660875, 0.392801,-0.830761,-0.394389,0.660875,0.017896,-0.660875, 0.460562,-0.87149,-0.168487,0.706,0.016681,-0.5875, 0.776532,-0.563325,-0.282246,0.726029,0.037019,-0.596406, 0.199329,-0.959446,0.199329,0.638667,0.007537,-0.361333, 0.392801,-0.830761,0.394389,0.660875,0.017896,-0.339125, 0.460562,-0.87149,0.168487,0.706,0.016681,-0.4125, 0.199329,-0.959446,0.199329,0.638667,0.007537,-0.361333, 0.460562,-0.87149,0.168487,0.706,0.016681,-0.4125, 0.18835,-0.976969,0.100277,0.664625,0.003052,-0.4175, 0.392801,-0.830761,0.394389,0.660875,0.017896,-0.339125, 0.609651,-0.5022,0.613287,0.677491,0.037477,-0.323141, 0.776532,-0.563325,0.282246,0.726029,0.037019,-0.403594, 0.776532,-0.563325,0.282246,0.726029,0.037019,-0.403594, 0.460562,-0.87149,0.168487,0.706,0.016681,-0.4125, 0.392801,-0.830761,0.394389,0.660875,0.017896,-0.339125, 0.796583,-0.60453,0,0.742322,0.036664,-0.5, 0.528671,-0.848827,0,0.7215,0.015465,-0.5, 0.460562,-0.87149,0.168487,0.706,0.016681,-0.4125, 0.796583,-0.60453,0,0.742322,0.036664,-0.5, 0.460562,-0.87149,0.168487,0.706,0.016681,-0.4125, 0.776532,-0.563325,0.282246,0.726029,0.037019,-0.403594, 0.244558,-0.969635,0,0.677562,0.000839,-0.5, 0.18835,-0.976969,0.100277,0.664625,0.003052,-0.4175, 0.460562,-0.87149,0.168487,0.706,0.016681,-0.4125, 0.244558,-0.969635,0,0.677562,0.000839,-0.5, 0.460562,-0.87149,0.168487,0.706,0.016681,-0.4125, 0.528671,-0.848827,0,0.7215,0.015465,-0.5, 0.662382,-0.336592,-0.669295,0.68609,0.066012,-0.683563, 0.612462,-0.474039,-0.632596,0.6971,0.103031,-0.690781, 0.309535,-0.382382,-0.870616,0.610539,0.105601,-0.742813, 0.309535,-0.382382,-0.870616,0.610539,0.105601,-0.742813, 0.325986,-0.296158,-0.897788,0.602715,0.067041,-0.733625, 0.662382,-0.336592,-0.669295,0.68609,0.066012,-0.683563, -0.009985,-0.330184,-0.943864,0.506665,0.108686,-0.760156, -0.003719,-0.252904,-0.967484,0.502666,0.068274,-0.750313, 0.325986,-0.296158,-0.897788,0.602715,0.067041,-0.733625, -0.009985,-0.330184,-0.943864,0.506665,0.108686,-0.760156, 0.325986,-0.296158,-0.897788,0.602715,0.067041,-0.733625, 0.309535,-0.382382,-0.870616,0.610539,0.105601,-0.742813, -0.003719,-0.252904,-0.967484,0.502666,0.068274,-0.750313, -0.025551,-0.524875,-0.850796,0.500666,0.037435,-0.741703, 0.28571,-0.534951,-0.795108,0.597054,0.03743,-0.725406, 0.28571,-0.534951,-0.795108,0.597054,0.03743,-0.725406, 0.325986,-0.296158,-0.897788,0.602715,0.067041,-0.733625, -0.003719,-0.252904,-0.967484,0.502666,0.068274,-0.750313, 0.609651,-0.5022,-0.613287,0.677491,0.037477,-0.676859, 0.662382,-0.336592,-0.669295,0.68609,0.066012,-0.683563, 0.325986,-0.296158,-0.897788,0.602715,0.067041,-0.733625, 0.609651,-0.5022,-0.613287,0.677491,0.037477,-0.676859, 0.325986,-0.296158,-0.897788,0.602715,0.067041,-0.733625, 0.28571,-0.534951,-0.795108,0.597054,0.03743,-0.725406, -0.340489,-0.258832,-0.903921,0.402791,0.111771,-0.742813, -0.68646,-0.277096,-0.672303,0.316229,0.114342,-0.690781, -0.696634,-0.190085,-0.691787,0.319242,0.070537,-0.683563, -0.696634,-0.190085,-0.691787,0.319242,0.070537,-0.683563, -0.33904,-0.236102,-0.910663,0.402616,0.069508,-0.733625, -0.340489,-0.258832,-0.903921,0.402791,0.111771,-0.742813, -0.643521,-0.419436,-0.640277,0.323842,0.038608,-0.676859, -0.321508,-0.547444,-0.772617,0.404279,0.038047,-0.725406, -0.33904,-0.236102,-0.910663,0.402616,0.069508,-0.733625, -0.643521,-0.419436,-0.640277,0.323842,0.038608,-0.676859, -0.33904,-0.236102,-0.910663,0.402616,0.069508,-0.733625, -0.696634,-0.190085,-0.691787,0.319242,0.070537,-0.683563, -0.025551,-0.524875,-0.850796,0.500666,0.037435,-0.741703, -0.003719,-0.252904,-0.967484,0.502666,0.068274,-0.750313, -0.33904,-0.236102,-0.910663,0.402616,0.069508,-0.733625, -0.025551,-0.524875,-0.850796,0.500666,0.037435,-0.741703, -0.33904,-0.236102,-0.910663,0.402616,0.069508,-0.733625, -0.321508,-0.547444,-0.772617,0.404279,0.038047,-0.725406, -0.003719,-0.252904,-0.967484,0.502666,0.068274,-0.750313, -0.009985,-0.330184,-0.943864,0.506665,0.108686,-0.760156, -0.340489,-0.258832,-0.903921,0.402791,0.111771,-0.742813, -0.340489,-0.258832,-0.903921,0.402791,0.111771,-0.742813, -0.33904,-0.236102,-0.910663,0.402616,0.069508,-0.733625, -0.003719,-0.252904,-0.967484,0.502666,0.068274,-0.750313, -0.199329,-0.959446,-0.199329,0.361333,0.007537,-0.638667, -0.100277,-0.976969,-0.18835,0.4175,0.003052,-0.664625, -0.173348,-0.862844,-0.474818,0.4125,0.016681,-0.706, -0.199329,-0.959446,-0.199329,0.361333,0.007537,-0.638667, -0.173348,-0.862844,-0.474818,0.4125,0.016681,-0.706, -0.412793,-0.812756,-0.411133,0.339125,0.017896,-0.660875, 0,-0.969635,-0.244558,0.5,0.000839,-0.677562, -0.000173,-0.840077,-0.542467,0.5,0.015465,-0.7215, -0.173348,-0.862844,-0.474818,0.4125,0.016681,-0.706, 0,-0.969635,-0.244558,0.5,0.000839,-0.677562, -0.173348,-0.862844,-0.474818,0.4125,0.016681,-0.706, -0.100277,-0.976969,-0.18835,0.4175,0.003052,-0.664625, -0.025551,-0.524875,-0.850796,0.500666,0.037435,-0.741703, -0.321508,-0.547444,-0.772617,0.404279,0.038047,-0.725406, -0.173348,-0.862844,-0.474818,0.4125,0.016681,-0.706, -0.025551,-0.524875,-0.850796,0.500666,0.037435,-0.741703, -0.173348,-0.862844,-0.474818,0.4125,0.016681,-0.706, -0.000173,-0.840077,-0.542467,0.5,0.015465,-0.7215, -0.321508,-0.547444,-0.772617,0.404279,0.038047,-0.725406, -0.643521,-0.419436,-0.640277,0.323842,0.038608,-0.676859, -0.412793,-0.812756,-0.411133,0.339125,0.017896,-0.660875, -0.412793,-0.812756,-0.411133,0.339125,0.017896,-0.660875, -0.173348,-0.862844,-0.474818,0.4125,0.016681,-0.706, -0.321508,-0.547444,-0.772617,0.404279,0.038047,-0.725406, 0.199329,-0.959446,-0.199329,0.638667,0.007537,-0.638667, 0.392801,-0.830761,-0.394389,0.660875,0.017896,-0.660875, 0.170214,-0.866923,-0.468478,0.5875,0.016681,-0.706, 0.199329,-0.959446,-0.199329,0.638667,0.007537,-0.638667, 0.170214,-0.866923,-0.468478,0.5875,0.016681,-0.706, 0.100277,-0.976969,-0.18835,0.5825,0.003052,-0.664625, 0.392801,-0.830761,-0.394389,0.660875,0.017896,-0.660875, 0.609651,-0.5022,-0.613287,0.677491,0.037477,-0.676859, 0.28571,-0.534951,-0.795108,0.597054,0.03743,-0.725406, 0.28571,-0.534951,-0.795108,0.597054,0.03743,-0.725406, 0.170214,-0.866923,-0.468478,0.5875,0.016681,-0.706, 0.392801,-0.830761,-0.394389,0.660875,0.017896,-0.660875, -0.025551,-0.524875,-0.850796,0.500666,0.037435,-0.741703, -0.000173,-0.840077,-0.542467,0.5,0.015465,-0.7215, 0.170214,-0.866923,-0.468478,0.5875,0.016681,-0.706, -0.025551,-0.524875,-0.850796,0.500666,0.037435,-0.741703, 0.170214,-0.866923,-0.468478,0.5875,0.016681,-0.706, 0.28571,-0.534951,-0.795108,0.597054,0.03743,-0.725406, 0,-0.969635,-0.244558,0.5,0.000839,-0.677562, 0.100277,-0.976969,-0.18835,0.5825,0.003052,-0.664625, 0.170214,-0.866923,-0.468478,0.5875,0.016681,-0.706, 0,-0.969635,-0.244558,0.5,0.000839,-0.677562, 0.170214,-0.866923,-0.468478,0.5875,0.016681,-0.706, -0.000173,-0.840077,-0.542467,0.5,0.015465,-0.7215, -0.696634,-0.190085,-0.691787,0.319242,0.070537,-0.683563, -0.68646,-0.277096,-0.672303,0.316229,0.114342,-0.690781, -0.917766,-0.211835,-0.335904,0.264292,0.115884,-0.604062, -0.917766,-0.211835,-0.335904,0.264292,0.115884,-0.604062, -0.92467,-0.172819,-0.339293,0.269217,0.071154,-0.600125, -0.696634,-0.190085,-0.691787,0.319242,0.070537,-0.683563, -0.984639,-0.174604,0,0.24698,0.116398,-0.5, -0.985139,-0.171761,0,0.252542,0.071359,-0.5, -0.92467,-0.172819,-0.339293,0.269217,0.071154,-0.600125, -0.984639,-0.174604,0,0.24698,0.116398,-0.5, -0.92467,-0.172819,-0.339293,0.269217,0.071154,-0.600125, -0.917766,-0.211835,-0.335904,0.264292,0.115884,-0.604062, -0.985139,-0.171761,0,0.252542,0.071359,-0.5, -0.851281,-0.524711,0,0.25901,0.038206,-0.5, -0.829046,-0.471849,-0.300069,0.275304,0.038459,-0.596406, -0.829046,-0.471849,-0.300069,0.275304,0.038459,-0.596406, -0.92467,-0.172819,-0.339293,0.269217,0.071154,-0.600125, -0.985139,-0.171761,0,0.252542,0.071359,-0.5, -0.643521,-0.419436,-0.640277,0.323842,0.038608,-0.676859, -0.696634,-0.190085,-0.691787,0.319242,0.070537,-0.683563, -0.92467,-0.172819,-0.339293,0.269217,0.071154,-0.600125, -0.643521,-0.419436,-0.640277,0.323842,0.038608,-0.676859, -0.92467,-0.172819,-0.339293,0.269217,0.071154,-0.600125, -0.829046,-0.471849,-0.300069,0.275304,0.038459,-0.596406, -0.917766,-0.211835,0.335904,0.264292,0.115884,-0.395938, -0.68646,-0.277096,0.672303,0.316229,0.114342,-0.309219, -0.696634,-0.190085,0.691786,0.319242,0.070537,-0.316437, -0.696634,-0.190085,0.691786,0.319242,0.070537,-0.316437, -0.92467,-0.172819,0.339293,0.269217,0.071154,-0.399875, -0.917766,-0.211835,0.335904,0.264292,0.115884,-0.395938, -0.643521,-0.419436,0.640277,0.323842,0.038608,-0.323141, -0.829046,-0.471848,0.300069,0.275304,0.038459,-0.403594, -0.92467,-0.172819,0.339293,0.269217,0.071154,-0.399875, -0.643521,-0.419436,0.640277,0.323842,0.038608,-0.323141, -0.92467,-0.172819,0.339293,0.269217,0.071154,-0.399875, -0.696634,-0.190085,0.691786,0.319242,0.070537,-0.316437, -0.829046,-0.471848,0.300069,0.275304,0.038459,-0.403594, -0.851281,-0.524711,0,0.25901,0.038206,-0.5, -0.985139,-0.171761,0,0.252542,0.071359,-0.5, -0.985139,-0.171761,0,0.252542,0.071359,-0.5, -0.92467,-0.172819,0.339293,0.269217,0.071154,-0.399875, -0.829046,-0.471848,0.300069,0.275304,0.038459,-0.403594, -0.984639,-0.174604,0,0.24698,0.116398,-0.5, -0.917766,-0.211835,0.335904,0.264292,0.115884,-0.395938, -0.92467,-0.172819,0.339293,0.269217,0.071154,-0.399875, -0.984639,-0.174604,0,0.24698,0.116398,-0.5, -0.92467,-0.172819,0.339293,0.269217,0.071154,-0.399875, -0.985139,-0.171761,0,0.252542,0.071359,-0.5, -0.199328,-0.959446,0.199328,0.361333,0.007537,-0.361333, -0.188349,-0.976969,0.100277,0.335375,0.003052,-0.4175, -0.483213,-0.857792,0.175209,0.294,0.016681,-0.4125, -0.199328,-0.959446,0.199328,0.361333,0.007537,-0.361333, -0.483213,-0.857792,0.175209,0.294,0.016681,-0.4125, -0.412793,-0.812756,0.411133,0.339125,0.017896,-0.339125, -0.244558,-0.969635,0,0.322437,0.000839,-0.5, -0.556955,-0.830542,0,0.2785,0.015465,-0.5, -0.483213,-0.857792,0.175209,0.294,0.016681,-0.4125, -0.244558,-0.969635,0,0.322437,0.000839,-0.5, -0.483213,-0.857792,0.175209,0.294,0.016681,-0.4125, -0.188349,-0.976969,0.100277,0.335375,0.003052,-0.4175, -0.851281,-0.524711,0,0.25901,0.038206,-0.5, -0.829046,-0.471848,0.300069,0.275304,0.038459,-0.403594, -0.483213,-0.857792,0.175209,0.294,0.016681,-0.4125, -0.851281,-0.524711,0,0.25901,0.038206,-0.5, -0.483213,-0.857792,0.175209,0.294,0.016681,-0.4125, -0.556955,-0.830542,0,0.2785,0.015465,-0.5, -0.829046,-0.471848,0.300069,0.275304,0.038459,-0.403594, -0.643521,-0.419436,0.640277,0.323842,0.038608,-0.323141, -0.412793,-0.812756,0.411133,0.339125,0.017896,-0.339125, -0.412793,-0.812756,0.411133,0.339125,0.017896,-0.339125, -0.483213,-0.857792,0.175209,0.294,0.016681,-0.4125, -0.829046,-0.471848,0.300069,0.275304,0.038459,-0.403594, -0.199329,-0.959446,-0.199329,0.361333,0.007537,-0.638667, -0.412793,-0.812756,-0.411133,0.339125,0.017896,-0.660875, -0.483213,-0.857792,-0.17521,0.294,0.016681,-0.5875, -0.199329,-0.959446,-0.199329,0.361333,0.007537,-0.638667, -0.483213,-0.857792,-0.17521,0.294,0.016681,-0.5875, -0.188349,-0.976969,-0.100277,0.335375,0.003052,-0.5825, -0.412793,-0.812756,-0.411133,0.339125,0.017896,-0.660875, -0.643521,-0.419436,-0.640277,0.323842,0.038608,-0.676859, -0.829046,-0.471849,-0.300069,0.275304,0.038459,-0.596406, -0.829046,-0.471849,-0.300069,0.275304,0.038459,-0.596406, -0.483213,-0.857792,-0.17521,0.294,0.016681,-0.5875, -0.412793,-0.812756,-0.411133,0.339125,0.017896,-0.660875, -0.851281,-0.524711,0,0.25901,0.038206,-0.5, -0.556955,-0.830542,0,0.2785,0.015465,-0.5, -0.483213,-0.857792,-0.17521,0.294,0.016681,-0.5875, -0.851281,-0.524711,0,0.25901,0.038206,-0.5, -0.483213,-0.857792,-0.17521,0.294,0.016681,-0.5875, -0.829046,-0.471849,-0.300069,0.275304,0.038459,-0.596406, -0.244558,-0.969635,0,0.322437,0.000839,-0.5, -0.188349,-0.976969,-0.100277,0.335375,0.003052,-0.5825, -0.483213,-0.857792,-0.17521,0.294,0.016681,-0.5875, -0.244558,-0.969635,0,0.322437,0.000839,-0.5, -0.483213,-0.857792,-0.17521,0.294,0.016681,-0.5875, -0.556955,-0.830542,0,0.2785,0.015465,-0.5, -0.696634,-0.190085,0.691786,0.319242,0.070537,-0.316437, -0.68646,-0.277096,0.672303,0.316229,0.114342,-0.309219, -0.340489,-0.258832,0.903921,0.402791,0.111771,-0.257187, -0.340489,-0.258832,0.903921,0.402791,0.111771,-0.257187, -0.339041,-0.236102,0.910663,0.402616,0.069508,-0.266375, -0.696634,-0.190085,0.691786,0.319242,0.070537,-0.316437, -0.340489,-0.258832,0.903921,0.402791,0.111771,-0.257187, -0.009985,-0.330184,0.943864,0.506665,0.108686,-0.239844, -0.003719,-0.252904,0.967484,0.502666,0.068274,-0.249687, -0.003719,-0.252904,0.967484,0.502666,0.068274,-0.249687, -0.339041,-0.236102,0.910663,0.402616,0.069508,-0.266375, -0.340489,-0.258832,0.903921,0.402791,0.111771,-0.257187, -0.025551,-0.524875,0.850796,0.500666,0.037435,-0.258297, -0.321508,-0.547444,0.772617,0.404279,0.038047,-0.274594, -0.339041,-0.236102,0.910663,0.402616,0.069508,-0.266375, -0.025551,-0.524875,0.850796,0.500666,0.037435,-0.258297, -0.339041,-0.236102,0.910663,0.402616,0.069508,-0.266375, -0.003719,-0.252904,0.967484,0.502666,0.068274,-0.249687, -0.643521,-0.419436,0.640277,0.323842,0.038608,-0.323141, -0.696634,-0.190085,0.691786,0.319242,0.070537,-0.316437, -0.339041,-0.236102,0.910663,0.402616,0.069508,-0.266375, -0.643521,-0.419436,0.640277,0.323842,0.038608,-0.323141, -0.339041,-0.236102,0.910663,0.402616,0.069508,-0.266375, -0.321508,-0.547444,0.772617,0.404279,0.038047,-0.274594, 0.309535,-0.382382,0.870616,0.610539,0.105601,-0.257187, 0.612462,-0.474038,0.632596,0.6971,0.103031,-0.309219, 0.662382,-0.336592,0.669295,0.68609,0.066012,-0.316437, 0.662382,-0.336592,0.669295,0.68609,0.066012,-0.316437, 0.325986,-0.296157,0.897788,0.602715,0.067041,-0.266375, 0.309535,-0.382382,0.870616,0.610539,0.105601,-0.257187, 0.609651,-0.5022,0.613287,0.677491,0.037477,-0.323141, 0.28571,-0.534951,0.795108,0.597054,0.03743,-0.274594, 0.325986,-0.296157,0.897788,0.602715,0.067041,-0.266375, 0.609651,-0.5022,0.613287,0.677491,0.037477,-0.323141, 0.325986,-0.296157,0.897788,0.602715,0.067041,-0.266375, 0.662382,-0.336592,0.669295,0.68609,0.066012,-0.316437, 0.28571,-0.534951,0.795108,0.597054,0.03743,-0.274594, -0.025551,-0.524875,0.850796,0.500666,0.037435,-0.258297, -0.003719,-0.252904,0.967484,0.502666,0.068274,-0.249687, -0.003719,-0.252904,0.967484,0.502666,0.068274,-0.249687, 0.325986,-0.296157,0.897788,0.602715,0.067041,-0.266375, 0.28571,-0.534951,0.795108,0.597054,0.03743,-0.274594, -0.009985,-0.330184,0.943864,0.506665,0.108686,-0.239844, 0.309535,-0.382382,0.870616,0.610539,0.105601,-0.257187, 0.325986,-0.296157,0.897788,0.602715,0.067041,-0.266375, -0.009985,-0.330184,0.943864,0.506665,0.108686,-0.239844, 0.325986,-0.296157,0.897788,0.602715,0.067041,-0.266375, -0.003719,-0.252904,0.967484,0.502666,0.068274,-0.249687, 0.199329,-0.959446,0.199329,0.638667,0.007537,-0.361333, 0.100277,-0.976969,0.188349,0.5825,0.003052,-0.335375, 0.170214,-0.866923,0.468477,0.5875,0.016681,-0.294, 0.199329,-0.959446,0.199329,0.638667,0.007537,-0.361333, 0.170214,-0.866923,0.468477,0.5875,0.016681,-0.294, 0.392801,-0.830761,0.394389,0.660875,0.017896,-0.339125, 0,-0.969635,0.244558,0.5,0.000839,-0.322437, -0.000173,-0.840077,0.542467,0.5,0.015465,-0.2785, 0.170214,-0.866923,0.468477,0.5875,0.016681,-0.294, 0,-0.969635,0.244558,0.5,0.000839,-0.322437, 0.170214,-0.866923,0.468477,0.5875,0.016681,-0.294, 0.100277,-0.976969,0.188349,0.5825,0.003052,-0.335375, -0.025551,-0.524875,0.850796,0.500666,0.037435,-0.258297, 0.28571,-0.534951,0.795108,0.597054,0.03743,-0.274594, 0.170214,-0.866923,0.468477,0.5875,0.016681,-0.294, -0.025551,-0.524875,0.850796,0.500666,0.037435,-0.258297, 0.170214,-0.866923,0.468477,0.5875,0.016681,-0.294, -0.000173,-0.840077,0.542467,0.5,0.015465,-0.2785, 0.28571,-0.534951,0.795108,0.597054,0.03743,-0.274594, 0.609651,-0.5022,0.613287,0.677491,0.037477,-0.323141, 0.392801,-0.830761,0.394389,0.660875,0.017896,-0.339125, 0.392801,-0.830761,0.394389,0.660875,0.017896,-0.339125, 0.170214,-0.866923,0.468477,0.5875,0.016681,-0.294, 0.28571,-0.534951,0.795108,0.597054,0.03743,-0.274594, -0.199328,-0.959446,0.199328,0.361333,0.007537,-0.361333, -0.412793,-0.812756,0.411133,0.339125,0.017896,-0.339125, -0.173348,-0.862844,0.474817,0.4125,0.016681,-0.294, -0.199328,-0.959446,0.199328,0.361333,0.007537,-0.361333, -0.173348,-0.862844,0.474817,0.4125,0.016681,-0.294, -0.100277,-0.976969,0.188349,0.4175,0.003052,-0.335375, -0.412793,-0.812756,0.411133,0.339125,0.017896,-0.339125, -0.643521,-0.419436,0.640277,0.323842,0.038608,-0.323141, -0.321508,-0.547444,0.772617,0.404279,0.038047,-0.274594, -0.321508,-0.547444,0.772617,0.404279,0.038047,-0.274594, -0.173348,-0.862844,0.474817,0.4125,0.016681,-0.294, -0.412793,-0.812756,0.411133,0.339125,0.017896,-0.339125, -0.025551,-0.524875,0.850796,0.500666,0.037435,-0.258297, -0.000173,-0.840077,0.542467,0.5,0.015465,-0.2785, -0.173348,-0.862844,0.474817,0.4125,0.016681,-0.294, -0.025551,-0.524875,0.850796,0.500666,0.037435,-0.258297, -0.173348,-0.862844,0.474817,0.4125,0.016681,-0.294, -0.321508,-0.547444,0.772617,0.404279,0.038047,-0.274594, 0,-0.969635,0.244558,0.5,0.000839,-0.322437, -0.100277,-0.976969,0.188349,0.4175,0.003052,-0.335375, -0.173348,-0.862844,0.474817,0.4125,0.016681,-0.294, 0,-0.969635,0.244558,0.5,0.000839,-0.322437, -0.173348,-0.862844,0.474817,0.4125,0.016681,-0.294, -0.000173,-0.840077,0.542467,0.5,0.015465,-0.2785, 0.199329,-0.959446,-0.199329,0.638667,0.007537,-0.638667, 0.100277,-0.976969,-0.18835,0.5825,0.003052,-0.664625, 0.079739,-0.993621,-0.079739,0.5905,-0.005194,-0.5905, 0.199329,-0.959446,-0.199329,0.638667,0.007537,-0.638667, 0.079739,-0.993621,-0.079739,0.5905,-0.005194,-0.5905, 0.18835,-0.976969,-0.100277,0.664625,0.003052,-0.5825, 0.100277,-0.976969,-0.18835,0.5825,0.003052,-0.664625, 0,-0.969635,-0.244558,0.5,0.000839,-0.677562, 0,-0.996384,-0.08496,0.5,-0.007972,-0.59775, 0,-0.996384,-0.08496,0.5,-0.007972,-0.59775, 0.079739,-0.993621,-0.079739,0.5905,-0.005194,-0.5905, 0.100277,-0.976969,-0.18835,0.5825,0.003052,-0.664625, 0,-1,0,0.5,-0.010924,-0.5, 0.08496,-0.996384,0,0.59775,-0.007972,-0.5, 0.079739,-0.993621,-0.079739,0.5905,-0.005194,-0.5905, 0,-1,0,0.5,-0.010924,-0.5, 0.079739,-0.993621,-0.079739,0.5905,-0.005194,-0.5905, 0,-0.996384,-0.08496,0.5,-0.007972,-0.59775, 0.08496,-0.996384,0,0.59775,-0.007972,-0.5, 0.244558,-0.969635,0,0.677562,0.000839,-0.5, 0.18835,-0.976969,-0.100277,0.664625,0.003052,-0.5825, 0.18835,-0.976969,-0.100277,0.664625,0.003052,-0.5825, 0.079739,-0.993621,-0.079739,0.5905,-0.005194,-0.5905, 0.08496,-0.996384,0,0.59775,-0.007972,-0.5, -0.199329,-0.959446,-0.199329,0.361333,0.007537,-0.638667, -0.188349,-0.976969,-0.100277,0.335375,0.003052,-0.5825, -0.079739,-0.993621,-0.079739,0.4095,-0.005194,-0.5905, -0.199329,-0.959446,-0.199329,0.361333,0.007537,-0.638667, -0.079739,-0.993621,-0.079739,0.4095,-0.005194,-0.5905, -0.100277,-0.976969,-0.18835,0.4175,0.003052,-0.664625, -0.188349,-0.976969,-0.100277,0.335375,0.003052,-0.5825, -0.244558,-0.969635,0,0.322437,0.000839,-0.5, -0.08496,-0.996384,0,0.40225,-0.007972,-0.5, -0.08496,-0.996384,0,0.40225,-0.007972,-0.5, -0.079739,-0.993621,-0.079739,0.4095,-0.005194,-0.5905, -0.188349,-0.976969,-0.100277,0.335375,0.003052,-0.5825, 0,-1,0,0.5,-0.010924,-0.5, 0,-0.996384,-0.08496,0.5,-0.007972,-0.59775, -0.079739,-0.993621,-0.079739,0.4095,-0.005194,-0.5905, 0,-1,0,0.5,-0.010924,-0.5, -0.079739,-0.993621,-0.079739,0.4095,-0.005194,-0.5905, -0.08496,-0.996384,0,0.40225,-0.007972,-0.5, 0,-0.996384,-0.08496,0.5,-0.007972,-0.59775, 0,-0.969635,-0.244558,0.5,0.000839,-0.677562, -0.100277,-0.976969,-0.18835,0.4175,0.003052,-0.664625, -0.100277,-0.976969,-0.18835,0.4175,0.003052,-0.664625, -0.079739,-0.993621,-0.079739,0.4095,-0.005194,-0.5905, 0,-0.996384,-0.08496,0.5,-0.007972,-0.59775, -0.199328,-0.959446,0.199328,0.361333,0.007537,-0.361333, -0.100277,-0.976969,0.188349,0.4175,0.003052,-0.335375, -0.079739,-0.993621,0.079739,0.4095,-0.005194,-0.4095, -0.199328,-0.959446,0.199328,0.361333,0.007537,-0.361333, -0.079739,-0.993621,0.079739,0.4095,-0.005194,-0.4095, -0.188349,-0.976969,0.100277,0.335375,0.003052,-0.4175, -0.100277,-0.976969,0.188349,0.4175,0.003052,-0.335375, 0,-0.969635,0.244558,0.5,0.000839,-0.322437, 0,-0.996384,0.08496,0.5,-0.007972,-0.40225, 0,-0.996384,0.08496,0.5,-0.007972,-0.40225, -0.079739,-0.993621,0.079739,0.4095,-0.005194,-0.4095, -0.100277,-0.976969,0.188349,0.4175,0.003052,-0.335375, 0,-1,0,0.5,-0.010924,-0.5, -0.08496,-0.996384,0,0.40225,-0.007972,-0.5, -0.079739,-0.993621,0.079739,0.4095,-0.005194,-0.4095, 0,-1,0,0.5,-0.010924,-0.5, -0.079739,-0.993621,0.079739,0.4095,-0.005194,-0.4095, 0,-0.996384,0.08496,0.5,-0.007972,-0.40225, -0.08496,-0.996384,0,0.40225,-0.007972,-0.5, -0.244558,-0.969635,0,0.322437,0.000839,-0.5, -0.188349,-0.976969,0.100277,0.335375,0.003052,-0.4175, -0.188349,-0.976969,0.100277,0.335375,0.003052,-0.4175, -0.079739,-0.993621,0.079739,0.4095,-0.005194,-0.4095, -0.08496,-0.996384,0,0.40225,-0.007972,-0.5, 0.199329,-0.959446,0.199329,0.638667,0.007537,-0.361333, 0.18835,-0.976969,0.100277,0.664625,0.003052,-0.4175, 0.079739,-0.993621,0.079739,0.5905,-0.005194,-0.4095, 0.199329,-0.959446,0.199329,0.638667,0.007537,-0.361333, 0.079739,-0.993621,0.079739,0.5905,-0.005194,-0.4095, 0.100277,-0.976969,0.188349,0.5825,0.003052,-0.335375, 0.18835,-0.976969,0.100277,0.664625,0.003052,-0.4175, 0.244558,-0.969635,0,0.677562,0.000839,-0.5, 0.08496,-0.996384,0,0.59775,-0.007972,-0.5, 0.08496,-0.996384,0,0.59775,-0.007972,-0.5, 0.079739,-0.993621,0.079739,0.5905,-0.005194,-0.4095, 0.18835,-0.976969,0.100277,0.664625,0.003052,-0.4175, 0,-1,0,0.5,-0.010924,-0.5, 0,-0.996384,0.08496,0.5,-0.007972,-0.40225, 0.079739,-0.993621,0.079739,0.5905,-0.005194,-0.4095, 0,-1,0,0.5,-0.010924,-0.5, 0.079739,-0.993621,0.079739,0.5905,-0.005194,-0.4095, 0.08496,-0.996384,0,0.59775,-0.007972,-0.5, 0,-0.996384,0.08496,0.5,-0.007972,-0.40225, 0,-0.969635,0.244558,0.5,0.000839,-0.322437, 0.100277,-0.976969,0.188349,0.5825,0.003052,-0.335375, 0.100277,-0.976969,0.188349,0.5825,0.003052,-0.335375, 0.079739,-0.993621,0.079739,0.5905,-0.005194,-0.4095, 0,-0.996384,0.08496,0.5,-0.007972,-0.40225, }; static const struct gllist frame={GL_N3F_V3F,GL_TRIANGLES,1728,data,NULL}; const struct gllist *s1_2=&frame; xscreensaver-5.36/hacks/glx/s1_3.c000644 000767 000024 00000275030 12701612217 016740 0ustar00jwzstaff000000 000000 #include "gllist.h" static const float data[]={ 0.202525,-0.691948,-0.692959,1.163707,0.362839,-0.676509, 0.133481,-0.728232,-0.672207,1.115671,0.352342,-0.673147, 0.164983,-0.93415,-0.316457,1.139957,0.313586,-0.594444, 0.164983,-0.93415,-0.316457,1.139957,0.313586,-0.594444, 0.257435,-0.906571,-0.334448,1.188046,0.322006,-0.596277, 0.202525,-0.691948,-0.692959,1.163707,0.362839,-0.676509, 0.166954,-0.985965,0,1.148052,0.300668,-0.5, 0.301979,-0.953315,0,1.196159,0.308395,-0.5, 0.257435,-0.906571,-0.334448,1.188046,0.322006,-0.596277, 0.166954,-0.985965,0,1.148052,0.300668,-0.5, 0.257435,-0.906571,-0.334448,1.188046,0.322006,-0.596277, 0.164983,-0.93415,-0.316457,1.139957,0.313586,-0.594444, 0.301979,-0.953315,0,1.196159,0.308395,-0.5, 0.780431,-0.625241,0,1.227578,0.320768,-0.5, 0.622801,-0.721415,-0.302786,1.219224,0.33452,-0.595444, 0.622801,-0.721415,-0.302786,1.219224,0.33452,-0.595444, 0.257435,-0.906571,-0.334448,1.188046,0.322006,-0.596277, 0.301979,-0.953315,0,1.196159,0.308395,-0.5, 0.631576,-0.472875,-0.614411,1.194861,0.37578,-0.675096, 0.202525,-0.691948,-0.692959,1.163707,0.362839,-0.676509, 0.257435,-0.906571,-0.334448,1.188046,0.322006,-0.596277, 0.631576,-0.472875,-0.614411,1.194861,0.37578,-0.675096, 0.257435,-0.906571,-0.334448,1.188046,0.322006,-0.596277, 0.622801,-0.721415,-0.302786,1.219224,0.33452,-0.595444, 0.164983,-0.93415,0.316457,1.139957,0.313586,-0.405556, 0.133481,-0.728232,0.672206,1.115671,0.352342,-0.326853, 0.202524,-0.691948,0.692959,1.163707,0.362839,-0.323491, 0.202524,-0.691948,0.692959,1.163707,0.362839,-0.323491, 0.257435,-0.906571,0.334448,1.188046,0.322006,-0.403722, 0.164983,-0.93415,0.316457,1.139957,0.313586,-0.405556, 0.631575,-0.472875,0.614412,1.194861,0.37578,-0.324904, 0.622801,-0.721415,0.302786,1.219224,0.33452,-0.404556, 0.257435,-0.906571,0.334448,1.188046,0.322006,-0.403722, 0.631575,-0.472875,0.614412,1.194861,0.37578,-0.324904, 0.257435,-0.906571,0.334448,1.188046,0.322006,-0.403722, 0.202524,-0.691948,0.692959,1.163707,0.362839,-0.323491, 0.622801,-0.721415,0.302786,1.219224,0.33452,-0.404556, 0.780431,-0.625241,0,1.227578,0.320768,-0.5, 0.301979,-0.953315,0,1.196159,0.308395,-0.5, 0.301979,-0.953315,0,1.196159,0.308395,-0.5, 0.257435,-0.906571,0.334448,1.188046,0.322006,-0.403722, 0.622801,-0.721415,0.302786,1.219224,0.33452,-0.404556, 0.166954,-0.985965,0,1.148052,0.300668,-0.5, 0.164983,-0.93415,0.316457,1.139957,0.313586,-0.405556, 0.257435,-0.906571,0.334448,1.188046,0.322006,-0.403722, 0.166954,-0.985965,0,1.148052,0.300668,-0.5, 0.257435,-0.906571,0.334448,1.188046,0.322006,-0.403722, 0.301979,-0.953315,0,1.196159,0.308395,-0.5, 0.930569,0.3071,0.199327,1.204957,0.421449,-0.361333, 0.940255,0.325371,0.100277,1.221821,0.401211,-0.4175, 0.974899,-0.059226,0.214627,1.230706,0.358565,-0.4125, 0.930569,0.3071,0.199327,1.204957,0.421449,-0.361333, 0.974899,-0.059226,0.214627,1.230706,0.358565,-0.4125, 0.890812,0.056731,0.450816,1.207091,0.397037,-0.339125, 0.962007,0.273026,0,1.230206,0.391113,-0.5, 0.992798,-0.119797,0,1.239508,0.345749,-0.5, 0.974899,-0.059226,0.214627,1.230706,0.358565,-0.4125, 0.962007,0.273026,0,1.230206,0.391113,-0.5, 0.974899,-0.059226,0.214627,1.230706,0.358565,-0.4125, 0.940255,0.325371,0.100277,1.221821,0.401211,-0.4175, 0.780431,-0.625241,0,1.227578,0.320768,-0.5, 0.622801,-0.721415,0.302786,1.219224,0.33452,-0.404556, 0.974899,-0.059226,0.214627,1.230706,0.358565,-0.4125, 0.780431,-0.625241,0,1.227578,0.320768,-0.5, 0.974899,-0.059226,0.214627,1.230706,0.358565,-0.4125, 0.992798,-0.119797,0,1.239508,0.345749,-0.5, 0.631575,-0.472875,0.614412,1.194861,0.37578,-0.324904, 0.890812,0.056731,0.450816,1.207091,0.397037,-0.339125, 0.974899,-0.059226,0.214627,1.230706,0.358565,-0.4125, 0.631575,-0.472875,0.614412,1.194861,0.37578,-0.324904, 0.974899,-0.059226,0.214627,1.230706,0.358565,-0.4125, 0.622801,-0.721415,0.302786,1.219224,0.33452,-0.404556, 0.930569,0.3071,-0.199328,1.204957,0.421449,-0.638667, 0.890812,0.056731,-0.450816,1.207091,0.397037,-0.660875, 0.974899,-0.059226,-0.214627,1.230706,0.358565,-0.5875, 0.930569,0.3071,-0.199328,1.204957,0.421449,-0.638667, 0.974899,-0.059226,-0.214627,1.230706,0.358565,-0.5875, 0.940255,0.325371,-0.100277,1.221821,0.401211,-0.5825, 0.631576,-0.472875,-0.614411,1.194861,0.37578,-0.675096, 0.622801,-0.721415,-0.302786,1.219224,0.33452,-0.595444, 0.974899,-0.059226,-0.214627,1.230706,0.358565,-0.5875, 0.631576,-0.472875,-0.614411,1.194861,0.37578,-0.675096, 0.974899,-0.059226,-0.214627,1.230706,0.358565,-0.5875, 0.890812,0.056731,-0.450816,1.207091,0.397037,-0.660875, 0.780431,-0.625241,0,1.227578,0.320768,-0.5, 0.992798,-0.119797,0,1.239508,0.345749,-0.5, 0.974899,-0.059226,-0.214627,1.230706,0.358565,-0.5875, 0.780431,-0.625241,0,1.227578,0.320768,-0.5, 0.974899,-0.059226,-0.214627,1.230706,0.358565,-0.5875, 0.622801,-0.721415,-0.302786,1.219224,0.33452,-0.595444, 0.962007,0.273026,0,1.230206,0.391113,-0.5, 0.940255,0.325371,-0.100277,1.221821,0.401211,-0.5825, 0.974899,-0.059226,-0.214627,1.230706,0.358565,-0.5875, 0.962007,0.273026,0,1.230206,0.391113,-0.5, 0.974899,-0.059226,-0.214627,1.230706,0.358565,-0.5875, 0.992798,-0.119797,0,1.239508,0.345749,-0.5, 0.133481,-0.728232,0.672206,1.115671,0.352342,-0.326853, 0.060251,-0.377234,0.924156,1.075195,0.416935,-0.279631, 0.095842,-0.348455,0.932413,1.123141,0.430895,-0.275352, 0.133481,-0.728232,0.672206,1.115671,0.352342,-0.326853, 0.095842,-0.348455,0.932413,1.123141,0.430895,-0.275352, 0.202524,-0.691948,0.692959,1.163707,0.362839,-0.323491, 0.060251,-0.377234,0.924156,1.075195,0.416935,-0.279631, -0.042028,-0.027931,0.998726,1.026623,0.494446,-0.263891, -0.024646,-0.015417,0.999577,1.074463,0.512562,-0.259306, -0.024646,-0.015417,0.999577,1.074463,0.512562,-0.259306, 0.095842,-0.348455,0.932413,1.123141,0.430895,-0.275352, 0.060251,-0.377234,0.924156,1.075195,0.416935,-0.279631, 0.346195,0.171304,0.92239,1.107591,0.526937,-0.260702, 0.484632,-0.165545,0.858911,1.155185,0.444556,-0.276838, 0.095842,-0.348455,0.932413,1.123141,0.430895,-0.275352, 0.346195,0.171304,0.92239,1.107591,0.526937,-0.260702, 0.095842,-0.348455,0.932413,1.123141,0.430895,-0.275352, -0.024646,-0.015417,0.999577,1.074463,0.512562,-0.259306, 0.484632,-0.165545,0.858911,1.155185,0.444556,-0.276838, 0.631575,-0.472875,0.614412,1.194861,0.37578,-0.324904, 0.202524,-0.691948,0.692959,1.163707,0.362839,-0.323491, 0.202524,-0.691948,0.692959,1.163707,0.362839,-0.323491, 0.095842,-0.348455,0.932413,1.123141,0.430895,-0.275352, 0.484632,-0.165545,0.858911,1.155185,0.444556,-0.276838, -0.176226,0.307645,0.935039,0.978052,0.571957,-0.279631, -0.334947,0.636181,0.695043,0.937575,0.63655,-0.326853, -0.323336,0.633934,0.702554,0.985218,0.662285,-0.323491, -0.323336,0.633934,0.702554,0.985218,0.662285,-0.323491, -0.162184,0.309455,0.936981,1.025784,0.594229,-0.275352, -0.176226,0.307645,0.935039,0.978052,0.571957,-0.279631, -0.011301,0.717458,0.69651,1.01927,0.677486,-0.324904, 0.171113,0.465842,0.868165,1.059471,0.609015,-0.276838, -0.162184,0.309455,0.936981,1.025784,0.594229,-0.275352, -0.011301,0.717458,0.69651,1.01927,0.677486,-0.324904, -0.162184,0.309455,0.936981,1.025784,0.594229,-0.275352, -0.323336,0.633934,0.702554,0.985218,0.662285,-0.323491, 0.171113,0.465842,0.868165,1.059471,0.609015,-0.276838, 0.346195,0.171304,0.92239,1.107591,0.526937,-0.260702, -0.024646,-0.015417,0.999577,1.074463,0.512562,-0.259306, -0.024646,-0.015417,0.999577,1.074463,0.512562,-0.259306, -0.162184,0.309455,0.936981,1.025784,0.594229,-0.275352, 0.171113,0.465842,0.868165,1.059471,0.609015,-0.276838, -0.042028,-0.027931,0.998726,1.026623,0.494446,-0.263891, -0.176226,0.307645,0.935039,0.978052,0.571957,-0.279631, -0.162184,0.309455,0.936981,1.025784,0.594229,-0.275352, -0.042028,-0.027931,0.998726,1.026623,0.494446,-0.263891, -0.162184,0.309455,0.936981,1.025784,0.594229,-0.275352, -0.024646,-0.015417,0.999577,1.074463,0.512562,-0.259306, 0.499427,0.759449,0.416905,1.046216,0.67568,-0.339125, 0.73381,0.655202,0.179534,1.066291,0.661627,-0.361333, 0.786313,0.584772,0.199385,1.098258,0.615227,-0.335375, 0.786313,0.584772,0.199385,1.098258,0.615227,-0.335375, 0.621316,0.565314,0.542574,1.083956,0.612743,-0.294, 0.499427,0.759449,0.416905,1.046216,0.67568,-0.339125, 0.83547,0.498022,0.232303,1.141425,0.544887,-0.322437, 0.742505,0.410638,0.529209,1.128758,0.537574,-0.2785, 0.621316,0.565314,0.542574,1.083956,0.612743,-0.294, 0.83547,0.498022,0.232303,1.141425,0.544887,-0.322437, 0.621316,0.565314,0.542574,1.083956,0.612743,-0.294, 0.786313,0.584772,0.199385,1.098258,0.615227,-0.335375, 0.346195,0.171304,0.92239,1.107591,0.526937,-0.260702, 0.171113,0.465842,0.868165,1.059471,0.609015,-0.276838, 0.621316,0.565314,0.542574,1.083956,0.612743,-0.294, 0.346195,0.171304,0.92239,1.107591,0.526937,-0.260702, 0.621316,0.565314,0.542574,1.083956,0.612743,-0.294, 0.742505,0.410638,0.529209,1.128758,0.537574,-0.2785, 0.171113,0.465842,0.868165,1.059471,0.609015,-0.276838, -0.011301,0.717458,0.69651,1.01927,0.677486,-0.324904, 0.499427,0.759449,0.416905,1.046216,0.67568,-0.339125, 0.499427,0.759449,0.416905,1.046216,0.67568,-0.339125, 0.621316,0.565314,0.542574,1.083956,0.612743,-0.294, 0.171113,0.465842,0.868165,1.059471,0.609015,-0.276838, 0.930569,0.3071,0.199327,1.204957,0.421449,-0.361333, 0.890812,0.056731,0.450816,1.207091,0.397037,-0.339125, 0.808962,0.235076,0.538813,1.171456,0.461189,-0.294, 0.930569,0.3071,0.199327,1.204957,0.421449,-0.361333, 0.808962,0.235076,0.538813,1.171456,0.461189,-0.294, 0.890268,0.404155,0.209958,1.180758,0.472333,-0.335375, 0.890812,0.056731,0.450816,1.207091,0.397037,-0.339125, 0.631575,-0.472875,0.614412,1.194861,0.37578,-0.324904, 0.484632,-0.165545,0.858911,1.155185,0.444556,-0.276838, 0.484632,-0.165545,0.858911,1.155185,0.444556,-0.276838, 0.808962,0.235076,0.538813,1.171456,0.461189,-0.294, 0.890812,0.056731,0.450816,1.207091,0.397037,-0.339125, 0.346195,0.171304,0.92239,1.107591,0.526937,-0.260702, 0.742505,0.410638,0.529209,1.128758,0.537574,-0.2785, 0.808962,0.235076,0.538813,1.171456,0.461189,-0.294, 0.346195,0.171304,0.92239,1.107591,0.526937,-0.260702, 0.808962,0.235076,0.538813,1.171456,0.461189,-0.294, 0.484632,-0.165545,0.858911,1.155185,0.444556,-0.276838, 0.742505,0.410638,0.529209,1.128758,0.537574,-0.2785, 0.83547,0.498022,0.232303,1.141425,0.544887,-0.322437, 0.890268,0.404155,0.209958,1.180758,0.472333,-0.335375, 0.890268,0.404155,0.209958,1.180758,0.472333,-0.335375, 0.808962,0.235076,0.538813,1.171456,0.461189,-0.294, 0.742505,0.410638,0.529209,1.128758,0.537574,-0.2785, -0.334947,0.636181,0.695043,0.937575,0.63655,-0.326853, -0.440797,0.833329,0.333557,0.913289,0.675305,-0.405556, -0.436203,0.832732,0.341005,0.960879,0.703118,-0.403722, -0.334947,0.636181,0.695043,0.937575,0.63655,-0.326853, -0.436203,0.832732,0.341005,0.960879,0.703118,-0.403722, -0.323336,0.633934,0.702554,0.985218,0.662285,-0.323491, -0.440797,0.833329,0.333557,0.913289,0.675305,-0.405556, -0.456348,0.889801,0,0.905194,0.688224,-0.5, -0.483417,0.87539,0,0.952766,0.71673,-0.5, -0.483417,0.87539,0,0.952766,0.71673,-0.5, -0.436203,0.832732,0.341005,0.960879,0.703118,-0.403722, -0.440797,0.833329,0.333557,0.913289,0.675305,-0.405556, -0.145364,0.989378,0,0.987605,0.733106,-0.5, -0.079433,0.924124,0.373745,0.995432,0.719051,-0.404556, -0.436203,0.832732,0.341005,0.960879,0.703118,-0.403722, -0.145364,0.989378,0,0.987605,0.733106,-0.5, -0.436203,0.832732,0.341005,0.960879,0.703118,-0.403722, -0.483417,0.87539,0,0.952766,0.71673,-0.5, -0.079433,0.924124,0.373745,0.995432,0.719051,-0.404556, -0.011301,0.717458,0.69651,1.01927,0.677486,-0.324904, -0.323336,0.633934,0.702554,0.985218,0.662285,-0.323491, -0.323336,0.633934,0.702554,0.985218,0.662285,-0.323491, -0.436203,0.832732,0.341005,0.960879,0.703118,-0.403722, -0.079433,0.924124,0.373745,0.995432,0.719051,-0.404556, -0.334948,0.636181,-0.695043,0.937575,0.63655,-0.673147, -0.323336,0.633934,-0.702554,0.985218,0.662285,-0.676509, -0.436203,0.832732,-0.341005,0.960879,0.703118,-0.596277, -0.334948,0.636181,-0.695043,0.937575,0.63655,-0.673147, -0.436203,0.832732,-0.341005,0.960879,0.703118,-0.596277, -0.440797,0.833329,-0.333557,0.913289,0.675305,-0.594444, -0.323336,0.633934,-0.702554,0.985218,0.662285,-0.676509, -0.0113,0.717458,-0.69651,1.01927,0.677486,-0.675096, -0.079433,0.924124,-0.373745,0.995432,0.719051,-0.595444, -0.079433,0.924124,-0.373745,0.995432,0.719051,-0.595444, -0.436203,0.832732,-0.341005,0.960879,0.703118,-0.596277, -0.323336,0.633934,-0.702554,0.985218,0.662285,-0.676509, -0.145364,0.989378,0,0.987605,0.733106,-0.5, -0.483417,0.87539,0,0.952766,0.71673,-0.5, -0.436203,0.832732,-0.341005,0.960879,0.703118,-0.596277, -0.145364,0.989378,0,0.987605,0.733106,-0.5, -0.436203,0.832732,-0.341005,0.960879,0.703118,-0.596277, -0.079433,0.924124,-0.373745,0.995432,0.719051,-0.595444, -0.483417,0.87539,0,0.952766,0.71673,-0.5, -0.456348,0.889801,0,0.905194,0.688224,-0.5, -0.440797,0.833329,-0.333557,0.913289,0.675305,-0.594444, -0.440797,0.833329,-0.333557,0.913289,0.675305,-0.594444, -0.436203,0.832732,-0.341005,0.960879,0.703118,-0.596277, -0.483417,0.87539,0,0.952766,0.71673,-0.5, 0.73381,0.655202,-0.179535,1.066291,0.661627,-0.638667, 0.737725,0.668365,-0.095126,1.057196,0.68635,-0.5825, 0.442446,0.874241,-0.199863,1.024706,0.715367,-0.5875, 0.73381,0.655202,-0.179535,1.066291,0.661627,-0.638667, 0.442446,0.874241,-0.199863,1.024706,0.715367,-0.5875, 0.499427,0.759449,-0.416905,1.046216,0.67568,-0.660875, 0.737725,0.668365,-0.095126,1.057196,0.68635,-0.5825, 0.739038,0.673664,0,1.052644,0.698661,-0.5, 0.507297,0.861771,0,1.018008,0.729398,-0.5, 0.507297,0.861771,0,1.018008,0.729398,-0.5, 0.442446,0.874241,-0.199863,1.024706,0.715367,-0.5875, 0.737725,0.668365,-0.095126,1.057196,0.68635,-0.5825, -0.145364,0.989378,0,0.987605,0.733106,-0.5, -0.079433,0.924124,-0.373745,0.995432,0.719051,-0.595444, 0.442446,0.874241,-0.199863,1.024706,0.715367,-0.5875, -0.145364,0.989378,0,0.987605,0.733106,-0.5, 0.442446,0.874241,-0.199863,1.024706,0.715367,-0.5875, 0.507297,0.861771,0,1.018008,0.729398,-0.5, -0.079433,0.924124,-0.373745,0.995432,0.719051,-0.595444, -0.0113,0.717458,-0.69651,1.01927,0.677486,-0.675096, 0.499427,0.759449,-0.416905,1.046216,0.67568,-0.660875, 0.499427,0.759449,-0.416905,1.046216,0.67568,-0.660875, 0.442446,0.874241,-0.199863,1.024706,0.715367,-0.5875, -0.079433,0.924124,-0.373745,0.995432,0.719051,-0.595444, 0.73381,0.655202,0.179534,1.066291,0.661627,-0.361333, 0.499427,0.759449,0.416905,1.046216,0.67568,-0.339125, 0.442446,0.874241,0.199863,1.024706,0.715367,-0.4125, 0.73381,0.655202,0.179534,1.066291,0.661627,-0.361333, 0.442446,0.874241,0.199863,1.024706,0.715367,-0.4125, 0.737725,0.668365,0.095126,1.057196,0.68635,-0.4175, 0.499427,0.759449,0.416905,1.046216,0.67568,-0.339125, -0.011301,0.717458,0.69651,1.01927,0.677486,-0.324904, -0.079433,0.924124,0.373745,0.995432,0.719051,-0.404556, -0.079433,0.924124,0.373745,0.995432,0.719051,-0.404556, 0.442446,0.874241,0.199863,1.024706,0.715367,-0.4125, 0.499427,0.759449,0.416905,1.046216,0.67568,-0.339125, -0.145364,0.989378,0,0.987605,0.733106,-0.5, 0.507297,0.861771,0,1.018008,0.729398,-0.5, 0.442446,0.874241,0.199863,1.024706,0.715367,-0.4125, -0.145364,0.989378,0,0.987605,0.733106,-0.5, 0.442446,0.874241,0.199863,1.024706,0.715367,-0.4125, -0.079433,0.924124,0.373745,0.995432,0.719051,-0.404556, 0.507297,0.861771,0,1.018008,0.729398,-0.5, 0.739038,0.673664,0,1.052644,0.698661,-0.5, 0.737725,0.668365,0.095126,1.057196,0.68635,-0.4175, 0.737725,0.668365,0.095126,1.057196,0.68635,-0.4175, 0.442446,0.874241,0.199863,1.024706,0.715367,-0.4125, 0.507297,0.861771,0,1.018008,0.729398,-0.5, -0.323336,0.633934,-0.702554,0.985218,0.662285,-0.676509, -0.334948,0.636181,-0.695043,0.937575,0.63655,-0.673147, -0.176226,0.307645,-0.935039,0.978052,0.571957,-0.720369, -0.176226,0.307645,-0.935039,0.978052,0.571957,-0.720369, -0.162184,0.309456,-0.936981,1.025784,0.594229,-0.724648, -0.323336,0.633934,-0.702554,0.985218,0.662285,-0.676509, -0.042028,-0.027931,-0.998726,1.026623,0.494446,-0.736109, -0.024646,-0.015417,-0.999577,1.074463,0.512562,-0.740694, -0.162184,0.309456,-0.936981,1.025784,0.594229,-0.724648, -0.042028,-0.027931,-0.998726,1.026623,0.494446,-0.736109, -0.162184,0.309456,-0.936981,1.025784,0.594229,-0.724648, -0.176226,0.307645,-0.935039,0.978052,0.571957,-0.720369, -0.024646,-0.015417,-0.999577,1.074463,0.512562,-0.740694, 0.346195,0.171304,-0.92239,1.107591,0.526937,-0.739298, 0.171114,0.465842,-0.868165,1.059471,0.609015,-0.723162, 0.171114,0.465842,-0.868165,1.059471,0.609015,-0.723162, -0.162184,0.309456,-0.936981,1.025784,0.594229,-0.724648, -0.024646,-0.015417,-0.999577,1.074463,0.512562,-0.740694, -0.0113,0.717458,-0.69651,1.01927,0.677486,-0.675096, -0.323336,0.633934,-0.702554,0.985218,0.662285,-0.676509, -0.162184,0.309456,-0.936981,1.025784,0.594229,-0.724648, -0.0113,0.717458,-0.69651,1.01927,0.677486,-0.675096, -0.162184,0.309456,-0.936981,1.025784,0.594229,-0.724648, 0.171114,0.465842,-0.868165,1.059471,0.609015,-0.723162, 0.133481,-0.728232,-0.672207,1.115671,0.352342,-0.673147, 0.202525,-0.691948,-0.692959,1.163707,0.362839,-0.676509, 0.095842,-0.348454,-0.932413,1.123141,0.430895,-0.724648, 0.133481,-0.728232,-0.672207,1.115671,0.352342,-0.673147, 0.095842,-0.348454,-0.932413,1.123141,0.430895,-0.724648, 0.060251,-0.377234,-0.924156,1.075195,0.416935,-0.720369, 0.202525,-0.691948,-0.692959,1.163707,0.362839,-0.676509, 0.631576,-0.472875,-0.614411,1.194861,0.37578,-0.675096, 0.484632,-0.165544,-0.85891,1.155185,0.444556,-0.723162, 0.484632,-0.165544,-0.85891,1.155185,0.444556,-0.723162, 0.095842,-0.348454,-0.932413,1.123141,0.430895,-0.724648, 0.202525,-0.691948,-0.692959,1.163707,0.362839,-0.676509, 0.346195,0.171304,-0.92239,1.107591,0.526937,-0.739298, -0.024646,-0.015417,-0.999577,1.074463,0.512562,-0.740694, 0.095842,-0.348454,-0.932413,1.123141,0.430895,-0.724648, 0.346195,0.171304,-0.92239,1.107591,0.526937,-0.739298, 0.095842,-0.348454,-0.932413,1.123141,0.430895,-0.724648, 0.484632,-0.165544,-0.85891,1.155185,0.444556,-0.723162, -0.024646,-0.015417,-0.999577,1.074463,0.512562,-0.740694, -0.042028,-0.027931,-0.998726,1.026623,0.494446,-0.736109, 0.060251,-0.377234,-0.924156,1.075195,0.416935,-0.720369, 0.060251,-0.377234,-0.924156,1.075195,0.416935,-0.720369, 0.095842,-0.348454,-0.932413,1.123141,0.430895,-0.724648, -0.024646,-0.015417,-0.999577,1.074463,0.512562,-0.740694, 0.930569,0.3071,-0.199328,1.204957,0.421449,-0.638667, 0.890268,0.404155,-0.209958,1.180758,0.472333,-0.664625, 0.808963,0.235076,-0.538812,1.171456,0.461189,-0.706, 0.930569,0.3071,-0.199328,1.204957,0.421449,-0.638667, 0.808963,0.235076,-0.538812,1.171456,0.461189,-0.706, 0.890812,0.056731,-0.450816,1.207091,0.397037,-0.660875, 0.890268,0.404155,-0.209958,1.180758,0.472333,-0.664625, 0.83547,0.498022,-0.232303,1.141425,0.544887,-0.677562, 0.742506,0.410638,-0.529208,1.128758,0.537574,-0.7215, 0.742506,0.410638,-0.529208,1.128758,0.537574,-0.7215, 0.808963,0.235076,-0.538812,1.171456,0.461189,-0.706, 0.890268,0.404155,-0.209958,1.180758,0.472333,-0.664625, 0.346195,0.171304,-0.92239,1.107591,0.526937,-0.739298, 0.484632,-0.165544,-0.85891,1.155185,0.444556,-0.723162, 0.808963,0.235076,-0.538812,1.171456,0.461189,-0.706, 0.346195,0.171304,-0.92239,1.107591,0.526937,-0.739298, 0.808963,0.235076,-0.538812,1.171456,0.461189,-0.706, 0.742506,0.410638,-0.529208,1.128758,0.537574,-0.7215, 0.484632,-0.165544,-0.85891,1.155185,0.444556,-0.723162, 0.631576,-0.472875,-0.614411,1.194861,0.37578,-0.675096, 0.890812,0.056731,-0.450816,1.207091,0.397037,-0.660875, 0.890812,0.056731,-0.450816,1.207091,0.397037,-0.660875, 0.808963,0.235076,-0.538812,1.171456,0.461189,-0.706, 0.484632,-0.165544,-0.85891,1.155185,0.444556,-0.723162, 0.786313,0.584772,-0.199385,1.098258,0.615227,-0.664625, 0.73381,0.655202,-0.179535,1.066291,0.661627,-0.638667, 0.499427,0.759449,-0.416905,1.046216,0.67568,-0.660875, 0.499427,0.759449,-0.416905,1.046216,0.67568,-0.660875, 0.621316,0.565314,-0.542574,1.083956,0.612743,-0.706, 0.786313,0.584772,-0.199385,1.098258,0.615227,-0.664625, 0.499427,0.759449,-0.416905,1.046216,0.67568,-0.660875, -0.0113,0.717458,-0.69651,1.01927,0.677486,-0.675096, 0.171114,0.465842,-0.868165,1.059471,0.609015,-0.723162, 0.171114,0.465842,-0.868165,1.059471,0.609015,-0.723162, 0.621316,0.565314,-0.542574,1.083956,0.612743,-0.706, 0.499427,0.759449,-0.416905,1.046216,0.67568,-0.660875, 0.346195,0.171304,-0.92239,1.107591,0.526937,-0.739298, 0.742506,0.410638,-0.529208,1.128758,0.537574,-0.7215, 0.621316,0.565314,-0.542574,1.083956,0.612743,-0.706, 0.346195,0.171304,-0.92239,1.107591,0.526937,-0.739298, 0.621316,0.565314,-0.542574,1.083956,0.612743,-0.706, 0.171114,0.465842,-0.868165,1.059471,0.609015,-0.723162, 0.83547,0.498022,-0.232303,1.141425,0.544887,-0.677562, 0.786313,0.584772,-0.199385,1.098258,0.615227,-0.664625, 0.621316,0.565314,-0.542574,1.083956,0.612743,-0.706, 0.83547,0.498022,-0.232303,1.141425,0.544887,-0.677562, 0.621316,0.565314,-0.542574,1.083956,0.612743,-0.706, 0.742506,0.410638,-0.529208,1.128758,0.537574,-0.7215, 0.930569,0.3071,0.199327,1.204957,0.421449,-0.361333, 0.890268,0.404155,0.209958,1.180758,0.472333,-0.335375, 0.900371,0.427755,0.079739,1.1919,0.469528,-0.4095, 0.930569,0.3071,0.199327,1.204957,0.421449,-0.361333, 0.900371,0.427755,0.079739,1.1919,0.469528,-0.4095, 0.940255,0.325371,0.100277,1.221821,0.401211,-0.4175, 0.890268,0.404155,0.209958,1.180758,0.472333,-0.335375, 0.83547,0.498022,0.232303,1.141425,0.544887,-0.322437, 0.862894,0.498192,0.08496,1.149055,0.549292,-0.40225, 0.862894,0.498192,0.08496,1.149055,0.549292,-0.40225, 0.900371,0.427755,0.079739,1.1919,0.469528,-0.4095, 0.890268,0.404155,0.209958,1.180758,0.472333,-0.335375, 0.866025,0.5,0,1.151611,0.550768,-0.5, 0.905374,0.424615,0,1.19793,0.464638,-0.5, 0.900371,0.427755,0.079739,1.1919,0.469528,-0.4095, 0.866025,0.5,0,1.151611,0.550768,-0.5, 0.900371,0.427755,0.079739,1.1919,0.469528,-0.4095, 0.862894,0.498192,0.08496,1.149055,0.549292,-0.40225, 0.905374,0.424615,0,1.19793,0.464638,-0.5, 0.962007,0.273026,0,1.230206,0.391113,-0.5, 0.940255,0.325371,0.100277,1.221821,0.401211,-0.4175, 0.940255,0.325371,0.100277,1.221821,0.401211,-0.4175, 0.900371,0.427755,0.079739,1.1919,0.469528,-0.4095, 0.905374,0.424615,0,1.19793,0.464638,-0.5, 0.73381,0.655202,0.179534,1.066291,0.661627,-0.361333, 0.737725,0.668365,0.095126,1.057196,0.68635,-0.4175, 0.820632,0.565867,0.079739,1.1014,0.626279,-0.4095, 0.73381,0.655202,0.179534,1.066291,0.661627,-0.361333, 0.820632,0.565867,0.079739,1.1014,0.626279,-0.4095, 0.786313,0.584772,0.199385,1.098258,0.615227,-0.335375, 0.737725,0.668365,0.095126,1.057196,0.68635,-0.4175, 0.739038,0.673664,0,1.052644,0.698661,-0.5, 0.820414,0.57177,0,1.10018,0.633946,-0.5, 0.820414,0.57177,0,1.10018,0.633946,-0.5, 0.820632,0.565867,0.079739,1.1014,0.626279,-0.4095, 0.737725,0.668365,0.095126,1.057196,0.68635,-0.4175, 0.866025,0.5,0,1.151611,0.550768,-0.5, 0.862894,0.498192,0.08496,1.149055,0.549292,-0.40225, 0.820632,0.565867,0.079739,1.1014,0.626279,-0.4095, 0.866025,0.5,0,1.151611,0.550768,-0.5, 0.820632,0.565867,0.079739,1.1014,0.626279,-0.4095, 0.820414,0.57177,0,1.10018,0.633946,-0.5, 0.862894,0.498192,0.08496,1.149055,0.549292,-0.40225, 0.83547,0.498022,0.232303,1.141425,0.544887,-0.322437, 0.786313,0.584772,0.199385,1.098258,0.615227,-0.335375, 0.786313,0.584772,0.199385,1.098258,0.615227,-0.335375, 0.820632,0.565867,0.079739,1.1014,0.626279,-0.4095, 0.862894,0.498192,0.08496,1.149055,0.549292,-0.40225, 0.73381,0.655202,-0.179535,1.066291,0.661627,-0.638667, 0.786313,0.584772,-0.199385,1.098258,0.615227,-0.664625, 0.820632,0.565867,-0.079739,1.1014,0.626279,-0.5905, 0.73381,0.655202,-0.179535,1.066291,0.661627,-0.638667, 0.820632,0.565867,-0.079739,1.1014,0.626279,-0.5905, 0.737725,0.668365,-0.095126,1.057196,0.68635,-0.5825, 0.786313,0.584772,-0.199385,1.098258,0.615227,-0.664625, 0.83547,0.498022,-0.232303,1.141425,0.544887,-0.677562, 0.862894,0.498192,-0.08496,1.149055,0.549292,-0.59775, 0.862894,0.498192,-0.08496,1.149055,0.549292,-0.59775, 0.820632,0.565867,-0.079739,1.1014,0.626279,-0.5905, 0.786313,0.584772,-0.199385,1.098258,0.615227,-0.664625, 0.866025,0.5,0,1.151611,0.550768,-0.5, 0.820414,0.57177,0,1.10018,0.633946,-0.5, 0.820632,0.565867,-0.079739,1.1014,0.626279,-0.5905, 0.866025,0.5,0,1.151611,0.550768,-0.5, 0.820632,0.565867,-0.079739,1.1014,0.626279,-0.5905, 0.862894,0.498192,-0.08496,1.149055,0.549292,-0.59775, 0.820414,0.57177,0,1.10018,0.633946,-0.5, 0.739038,0.673664,0,1.052644,0.698661,-0.5, 0.737725,0.668365,-0.095126,1.057196,0.68635,-0.5825, 0.737725,0.668365,-0.095126,1.057196,0.68635,-0.5825, 0.820632,0.565867,-0.079739,1.1014,0.626279,-0.5905, 0.820414,0.57177,0,1.10018,0.633946,-0.5, 0.930569,0.3071,-0.199328,1.204957,0.421449,-0.638667, 0.940255,0.325371,-0.100277,1.221821,0.401211,-0.5825, 0.900371,0.427755,-0.079739,1.1919,0.469528,-0.5905, 0.930569,0.3071,-0.199328,1.204957,0.421449,-0.638667, 0.900371,0.427755,-0.079739,1.1919,0.469528,-0.5905, 0.890268,0.404155,-0.209958,1.180758,0.472333,-0.664625, 0.940255,0.325371,-0.100277,1.221821,0.401211,-0.5825, 0.962007,0.273026,0,1.230206,0.391113,-0.5, 0.905374,0.424615,0,1.19793,0.464638,-0.5, 0.905374,0.424615,0,1.19793,0.464638,-0.5, 0.900371,0.427755,-0.079739,1.1919,0.469528,-0.5905, 0.940255,0.325371,-0.100277,1.221821,0.401211,-0.5825, 0.866025,0.5,0,1.151611,0.550768,-0.5, 0.862894,0.498192,-0.08496,1.149055,0.549292,-0.59775, 0.900371,0.427755,-0.079739,1.1919,0.469528,-0.5905, 0.866025,0.5,0,1.151611,0.550768,-0.5, 0.900371,0.427755,-0.079739,1.1919,0.469528,-0.5905, 0.905374,0.424615,0,1.19793,0.464638,-0.5, 0.862894,0.498192,-0.08496,1.149055,0.549292,-0.59775, 0.83547,0.498022,-0.232303,1.141425,0.544887,-0.677562, 0.890268,0.404155,-0.209958,1.180758,0.472333,-0.664625, 0.890268,0.404155,-0.209958,1.180758,0.472333,-0.664625, 0.900371,0.427755,-0.079739,1.1919,0.469528,-0.5905, 0.862894,0.498192,-0.08496,1.149055,0.549292,-0.59775, 0.133481,-0.728232,-0.672207,1.115671,0.352342,-0.673147, 0.180025,-0.723743,-0.666173,1.052796,0.338416,-0.673044, 0.197559,-0.930384,-0.308798,1.077742,0.301825,-0.594388, 0.133481,-0.728232,-0.672207,1.115671,0.352342,-0.673147, 0.197559,-0.930384,-0.308798,1.077742,0.301825,-0.594388, 0.164983,-0.93415,-0.316457,1.139957,0.313586,-0.594444, 0.180025,-0.723743,-0.666173,1.052796,0.338416,-0.673044, 0.227251,-0.720523,-0.655136,0.982068,0.320307,-0.674787, 0.245574,-0.922075,-0.299117,1.008335,0.286145,-0.595338, 0.245574,-0.922075,-0.299117,1.008335,0.286145,-0.595338, 0.197559,-0.930384,-0.308798,1.077742,0.301825,-0.594388, 0.180025,-0.723743,-0.666173,1.052796,0.338416,-0.673044, 0.233794,-0.972286,0,1.017091,0.274757,-0.5, 0.1906,-0.981668,0,1.086058,0.289628,-0.5, 0.197559,-0.930384,-0.308798,1.077742,0.301825,-0.594388, 0.233794,-0.972286,0,1.017091,0.274757,-0.5, 0.197559,-0.930384,-0.308798,1.077742,0.301825,-0.594388, 0.245574,-0.922075,-0.299117,1.008335,0.286145,-0.595338, 0.1906,-0.981668,0,1.086058,0.289628,-0.5, 0.166954,-0.985965,0,1.148052,0.300668,-0.5, 0.164983,-0.93415,-0.316457,1.139957,0.313586,-0.594444, 0.164983,-0.93415,-0.316457,1.139957,0.313586,-0.594444, 0.197559,-0.930384,-0.308798,1.077742,0.301825,-0.594388, 0.1906,-0.981668,0,1.086058,0.289628,-0.5, 0.287838,-0.708745,-0.644073,0.910476,0.29726,-0.676962, 0.37574,-0.67126,-0.638928,0.845007,0.268518,-0.678159, 0.438584,-0.8515,-0.287389,0.875679,0.240722,-0.597178, 0.438584,-0.8515,-0.287389,0.875679,0.240722,-0.597178, 0.319032,-0.902133,-0.290473,0.93867,0.26597,-0.596525, 0.287838,-0.708745,-0.644073,0.910476,0.29726,-0.676962, 0.419512,-0.90775,0,0.885904,0.231457,-0.5, 0.303521,-0.952825,0,0.948068,0.255539,-0.5, 0.319032,-0.902133,-0.290473,0.93867,0.26597,-0.596525, 0.419512,-0.90775,0,0.885904,0.231457,-0.5, 0.319032,-0.902133,-0.290473,0.93867,0.26597,-0.596525, 0.438584,-0.8515,-0.287389,0.875679,0.240722,-0.597178, 0.303521,-0.952825,0,0.948068,0.255539,-0.5, 0.233794,-0.972286,0,1.017091,0.274757,-0.5, 0.245574,-0.922075,-0.299117,1.008335,0.286145,-0.595338, 0.245574,-0.922075,-0.299117,1.008335,0.286145,-0.595338, 0.319032,-0.902133,-0.290473,0.93867,0.26597,-0.596525, 0.303521,-0.952825,0,0.948068,0.255539,-0.5, 0.227251,-0.720523,-0.655136,0.982068,0.320307,-0.674787, 0.287838,-0.708745,-0.644073,0.910476,0.29726,-0.676962, 0.319032,-0.902133,-0.290473,0.93867,0.26597,-0.596525, 0.227251,-0.720523,-0.655136,0.982068,0.320307,-0.674787, 0.319032,-0.902133,-0.290473,0.93867,0.26597,-0.596525, 0.245574,-0.922075,-0.299117,1.008335,0.286145,-0.595338, 0.438584,-0.8515,0.287389,0.875679,0.240722,-0.402822, 0.37574,-0.67126,0.638928,0.845007,0.268518,-0.321841, 0.287838,-0.708745,0.644073,0.910476,0.29726,-0.323037, 0.287838,-0.708745,0.644073,0.910476,0.29726,-0.323037, 0.319032,-0.902133,0.290473,0.93867,0.26597,-0.403475, 0.438584,-0.8515,0.287389,0.875679,0.240722,-0.402822, 0.227251,-0.720523,0.655136,0.982068,0.320307,-0.325213, 0.245574,-0.922075,0.299116,1.008335,0.286145,-0.404662, 0.319032,-0.902133,0.290473,0.93867,0.26597,-0.403475, 0.227251,-0.720523,0.655136,0.982068,0.320307,-0.325213, 0.319032,-0.902133,0.290473,0.93867,0.26597,-0.403475, 0.287838,-0.708745,0.644073,0.910476,0.29726,-0.323037, 0.245574,-0.922075,0.299116,1.008335,0.286145,-0.404662, 0.233794,-0.972286,0,1.017091,0.274757,-0.5, 0.303521,-0.952825,0,0.948068,0.255539,-0.5, 0.303521,-0.952825,0,0.948068,0.255539,-0.5, 0.319032,-0.902133,0.290473,0.93867,0.26597,-0.403475, 0.245574,-0.922075,0.299116,1.008335,0.286145,-0.404662, 0.419512,-0.90775,0,0.885904,0.231457,-0.5, 0.438584,-0.8515,0.287389,0.875679,0.240722,-0.402822, 0.319032,-0.902133,0.290473,0.93867,0.26597,-0.403475, 0.419512,-0.90775,0,0.885904,0.231457,-0.5, 0.319032,-0.902133,0.290473,0.93867,0.26597,-0.403475, 0.303521,-0.952825,0,0.948068,0.255539,-0.5, 0.133481,-0.728232,0.672206,1.115671,0.352342,-0.326853, 0.164983,-0.93415,0.316457,1.139957,0.313586,-0.405556, 0.19756,-0.930384,0.308798,1.077742,0.301825,-0.405612, 0.133481,-0.728232,0.672206,1.115671,0.352342,-0.326853, 0.19756,-0.930384,0.308798,1.077742,0.301825,-0.405612, 0.180025,-0.723743,0.666173,1.052796,0.338416,-0.326956, 0.164983,-0.93415,0.316457,1.139957,0.313586,-0.405556, 0.166954,-0.985965,0,1.148052,0.300668,-0.5, 0.1906,-0.981668,0,1.086058,0.289628,-0.5, 0.1906,-0.981668,0,1.086058,0.289628,-0.5, 0.19756,-0.930384,0.308798,1.077742,0.301825,-0.405612, 0.164983,-0.93415,0.316457,1.139957,0.313586,-0.405556, 0.233794,-0.972286,0,1.017091,0.274757,-0.5, 0.245574,-0.922075,0.299116,1.008335,0.286145,-0.404662, 0.19756,-0.930384,0.308798,1.077742,0.301825,-0.405612, 0.233794,-0.972286,0,1.017091,0.274757,-0.5, 0.19756,-0.930384,0.308798,1.077742,0.301825,-0.405612, 0.1906,-0.981668,0,1.086058,0.289628,-0.5, 0.245574,-0.922075,0.299116,1.008335,0.286145,-0.404662, 0.227251,-0.720523,0.655136,0.982068,0.320307,-0.325213, 0.180025,-0.723743,0.666173,1.052796,0.338416,-0.326956, 0.180025,-0.723743,0.666173,1.052796,0.338416,-0.326956, 0.19756,-0.930384,0.308798,1.077742,0.301825,-0.405612, 0.245574,-0.922075,0.299116,1.008335,0.286145,-0.404662, -0.334948,0.636181,-0.695043,0.937575,0.63655,-0.673147, -0.290177,0.673481,-0.679868,0.869854,0.606754,-0.673044, -0.128571,0.348912,-0.928294,0.911431,0.545768,-0.720237, -0.334948,0.636181,-0.695043,0.937575,0.63655,-0.673147, -0.128571,0.348912,-0.928294,0.911431,0.545768,-0.720237, -0.176226,0.307645,-0.935039,0.978052,0.571957,-0.720369, -0.290177,0.673481,-0.679868,0.869854,0.606754,-0.673044, -0.308574,0.679683,-0.665442,0.789439,0.570833,-0.674787, -0.132599,0.364183,-0.92184,0.833218,0.513896,-0.722456, -0.132599,0.364183,-0.92184,0.833218,0.513896,-0.722456, -0.128571,0.348912,-0.928294,0.911431,0.545768,-0.720237, -0.290177,0.673481,-0.679868,0.869854,0.606754,-0.673044, 0.026562,0.016059,-0.999518,0.885754,0.44557,-0.738345, 0.010552,0.00411,-0.999936,0.961325,0.472585,-0.735969, -0.128571,0.348912,-0.928294,0.911431,0.545768,-0.720237, 0.026562,0.016059,-0.999518,0.885754,0.44557,-0.738345, -0.128571,0.348912,-0.928294,0.911431,0.545768,-0.720237, -0.132599,0.364183,-0.92184,0.833218,0.513896,-0.722456, 0.010552,0.00411,-0.999936,0.961325,0.472585,-0.735969, -0.042028,-0.027931,-0.998726,1.026623,0.494446,-0.736109, -0.176226,0.307645,-0.935039,0.978052,0.571957,-0.720369, -0.176226,0.307645,-0.935039,0.978052,0.571957,-0.720369, -0.128571,0.348912,-0.928294,0.911431,0.545768,-0.720237, 0.010552,0.00411,-0.999936,0.961325,0.472585,-0.735969, -0.36742,0.660294,-0.654992,0.703717,0.526722,-0.676962, -0.459897,0.603331,-0.651526,0.620074,0.472355,-0.678159, -0.231331,0.321253,-0.918304,0.671195,0.426029,-0.726748, -0.231331,0.321253,-0.918304,0.671195,0.426029,-0.726748, -0.168868,0.358367,-0.918181,0.750708,0.474572,-0.725225, -0.36742,0.660294,-0.654992,0.703717,0.526722,-0.676962, 0.003382,-0.001295,-0.999993,0.73254,0.370437,-0.742944, 0.02248,0.015117,-0.999633,0.807096,0.411991,-0.741313, -0.168868,0.358367,-0.918181,0.750708,0.474572,-0.725225, 0.003382,-0.001295,-0.999993,0.73254,0.370437,-0.742944, -0.168868,0.358367,-0.918181,0.750708,0.474572,-0.725225, -0.231331,0.321253,-0.918304,0.671195,0.426029,-0.726748, 0.02248,0.015117,-0.999633,0.807096,0.411991,-0.741313, 0.026562,0.016059,-0.999518,0.885754,0.44557,-0.738345, -0.132599,0.364183,-0.92184,0.833218,0.513896,-0.722456, -0.132599,0.364183,-0.92184,0.833218,0.513896,-0.722456, -0.168868,0.358367,-0.918181,0.750708,0.474572,-0.725225, 0.02248,0.015117,-0.999633,0.807096,0.411991,-0.741313, -0.308574,0.679683,-0.665442,0.789439,0.570833,-0.674787, -0.36742,0.660294,-0.654992,0.703717,0.526722,-0.676962, -0.168868,0.358367,-0.918181,0.750708,0.474572,-0.725225, -0.308574,0.679683,-0.665442,0.789439,0.570833,-0.674787, -0.168868,0.358367,-0.918181,0.750708,0.474572,-0.725225, -0.132599,0.364183,-0.92184,0.833218,0.513896,-0.722456, 0.37574,-0.67126,-0.638928,0.845007,0.268518,-0.678159, 0.287838,-0.708745,-0.644073,0.910476,0.29726,-0.676962, 0.181001,-0.354486,-0.917376,0.863485,0.34941,-0.725225, 0.37574,-0.67126,-0.638928,0.845007,0.268518,-0.678159, 0.181001,-0.354486,-0.917376,0.863485,0.34941,-0.725225, 0.214466,-0.344671,-0.913896,0.793886,0.314845,-0.726748, 0.287838,-0.708745,-0.644073,0.910476,0.29726,-0.676962, 0.227251,-0.720523,-0.655136,0.982068,0.320307,-0.674787, 0.149984,-0.357133,-0.921933,0.938289,0.377245,-0.722456, 0.149984,-0.357133,-0.921933,0.938289,0.377245,-0.722456, 0.181001,-0.354486,-0.917376,0.863485,0.34941,-0.725225, 0.287838,-0.708745,-0.644073,0.910476,0.29726,-0.676962, 0.026562,0.016059,-0.999518,0.885754,0.44557,-0.738345, 0.02248,0.015117,-0.999633,0.807096,0.411991,-0.741313, 0.181001,-0.354486,-0.917376,0.863485,0.34941,-0.725225, 0.026562,0.016059,-0.999518,0.885754,0.44557,-0.738345, 0.181001,-0.354486,-0.917376,0.863485,0.34941,-0.725225, 0.149984,-0.357133,-0.921933,0.938289,0.377245,-0.722456, 0.02248,0.015117,-0.999633,0.807096,0.411991,-0.741313, 0.003382,-0.001295,-0.999993,0.73254,0.370437,-0.742944, 0.214466,-0.344671,-0.913896,0.793886,0.314845,-0.726748, 0.214466,-0.344671,-0.913896,0.793886,0.314845,-0.726748, 0.181001,-0.354486,-0.917376,0.863485,0.34941,-0.725225, 0.02248,0.015117,-0.999633,0.807096,0.411991,-0.741313, 0.180025,-0.723743,-0.666173,1.052796,0.338416,-0.673044, 0.133481,-0.728232,-0.672207,1.115671,0.352342,-0.673147, 0.060251,-0.377234,-0.924156,1.075195,0.416935,-0.720369, 0.060251,-0.377234,-0.924156,1.075195,0.416935,-0.720369, 0.114557,-0.361315,-0.92538,1.011218,0.399402,-0.720237, 0.180025,-0.723743,-0.666173,1.052796,0.338416,-0.673044, -0.042028,-0.027931,-0.998726,1.026623,0.494446,-0.736109, 0.010552,0.00411,-0.999936,0.961325,0.472585,-0.735969, 0.114557,-0.361315,-0.92538,1.011218,0.399402,-0.720237, -0.042028,-0.027931,-0.998726,1.026623,0.494446,-0.736109, 0.114557,-0.361315,-0.92538,1.011218,0.399402,-0.720237, 0.060251,-0.377234,-0.924156,1.075195,0.416935,-0.720369, 0.010552,0.00411,-0.999936,0.961325,0.472585,-0.735969, 0.026562,0.016059,-0.999518,0.885754,0.44557,-0.738345, 0.149984,-0.357133,-0.921933,0.938289,0.377245,-0.722456, 0.149984,-0.357133,-0.921933,0.938289,0.377245,-0.722456, 0.114557,-0.361315,-0.92538,1.011218,0.399402,-0.720237, 0.010552,0.00411,-0.999936,0.961325,0.472585,-0.735969, 0.227251,-0.720523,-0.655136,0.982068,0.320307,-0.674787, 0.180025,-0.723743,-0.666173,1.052796,0.338416,-0.673044, 0.114557,-0.361315,-0.92538,1.011218,0.399402,-0.720237, 0.227251,-0.720523,-0.655136,0.982068,0.320307,-0.674787, 0.114557,-0.361315,-0.92538,1.011218,0.399402,-0.720237, 0.149984,-0.357133,-0.921933,0.938289,0.377245,-0.722456, -0.334947,0.636181,0.695043,0.937575,0.63655,-0.326853, -0.176226,0.307645,0.935039,0.978052,0.571957,-0.279631, -0.128571,0.348912,0.928294,0.911431,0.545768,-0.279763, -0.334947,0.636181,0.695043,0.937575,0.63655,-0.326853, -0.128571,0.348912,0.928294,0.911431,0.545768,-0.279763, -0.290177,0.673481,0.679868,0.869854,0.606754,-0.326956, -0.176226,0.307645,0.935039,0.978052,0.571957,-0.279631, -0.042028,-0.027931,0.998726,1.026623,0.494446,-0.263891, 0.010552,0.00411,0.999936,0.961325,0.472585,-0.264031, 0.010552,0.00411,0.999936,0.961325,0.472585,-0.264031, -0.128571,0.348912,0.928294,0.911431,0.545768,-0.279763, -0.176226,0.307645,0.935039,0.978052,0.571957,-0.279631, 0.026562,0.01606,0.999518,0.885754,0.44557,-0.261655, -0.132599,0.364183,0.921839,0.833218,0.513896,-0.277544, -0.128571,0.348912,0.928294,0.911431,0.545768,-0.279763, 0.026562,0.01606,0.999518,0.885754,0.44557,-0.261655, -0.128571,0.348912,0.928294,0.911431,0.545768,-0.279763, 0.010552,0.00411,0.999936,0.961325,0.472585,-0.264031, -0.132599,0.364183,0.921839,0.833218,0.513896,-0.277544, -0.308574,0.679683,0.665442,0.789439,0.570833,-0.325213, -0.290177,0.673481,0.679868,0.869854,0.606754,-0.326956, -0.290177,0.673481,0.679868,0.869854,0.606754,-0.326956, -0.128571,0.348912,0.928294,0.911431,0.545768,-0.279763, -0.132599,0.364183,0.921839,0.833218,0.513896,-0.277544, 0.060251,-0.377234,0.924156,1.075195,0.416935,-0.279631, 0.133481,-0.728232,0.672206,1.115671,0.352342,-0.326853, 0.180025,-0.723743,0.666173,1.052796,0.338416,-0.326956, 0.180025,-0.723743,0.666173,1.052796,0.338416,-0.326956, 0.114557,-0.361314,0.92538,1.011218,0.399402,-0.279763, 0.060251,-0.377234,0.924156,1.075195,0.416935,-0.279631, 0.227251,-0.720523,0.655136,0.982068,0.320307,-0.325213, 0.149984,-0.357133,0.921933,0.938289,0.377245,-0.277544, 0.114557,-0.361314,0.92538,1.011218,0.399402,-0.279763, 0.227251,-0.720523,0.655136,0.982068,0.320307,-0.325213, 0.114557,-0.361314,0.92538,1.011218,0.399402,-0.279763, 0.180025,-0.723743,0.666173,1.052796,0.338416,-0.326956, 0.149984,-0.357133,0.921933,0.938289,0.377245,-0.277544, 0.026562,0.01606,0.999518,0.885754,0.44557,-0.261655, 0.010552,0.00411,0.999936,0.961325,0.472585,-0.264031, 0.010552,0.00411,0.999936,0.961325,0.472585,-0.264031, 0.114557,-0.361314,0.92538,1.011218,0.399402,-0.279763, 0.149984,-0.357133,0.921933,0.938289,0.377245,-0.277544, -0.042028,-0.027931,0.998726,1.026623,0.494446,-0.263891, 0.060251,-0.377234,0.924156,1.075195,0.416935,-0.279631, 0.114557,-0.361314,0.92538,1.011218,0.399402,-0.279763, -0.042028,-0.027931,0.998726,1.026623,0.494446,-0.263891, 0.114557,-0.361314,0.92538,1.011218,0.399402,-0.279763, 0.010552,0.00411,0.999936,0.961325,0.472585,-0.264031, 0.37574,-0.67126,0.638928,0.845007,0.268518,-0.321841, 0.214466,-0.34467,0.913896,0.793886,0.314845,-0.273252, 0.181001,-0.354486,0.917376,0.863485,0.34941,-0.274775, 0.37574,-0.67126,0.638928,0.845007,0.268518,-0.321841, 0.181001,-0.354486,0.917376,0.863485,0.34941,-0.274775, 0.287838,-0.708745,0.644073,0.910476,0.29726,-0.323037, 0.214466,-0.34467,0.913896,0.793886,0.314845,-0.273252, 0.003382,-0.001295,0.999993,0.73254,0.370437,-0.257056, 0.02248,0.015118,0.999633,0.807096,0.411991,-0.258687, 0.02248,0.015118,0.999633,0.807096,0.411991,-0.258687, 0.181001,-0.354486,0.917376,0.863485,0.34941,-0.274775, 0.214466,-0.34467,0.913896,0.793886,0.314845,-0.273252, 0.026562,0.01606,0.999518,0.885754,0.44557,-0.261655, 0.149984,-0.357133,0.921933,0.938289,0.377245,-0.277544, 0.181001,-0.354486,0.917376,0.863485,0.34941,-0.274775, 0.026562,0.01606,0.999518,0.885754,0.44557,-0.261655, 0.181001,-0.354486,0.917376,0.863485,0.34941,-0.274775, 0.02248,0.015118,0.999633,0.807096,0.411991,-0.258687, 0.149984,-0.357133,0.921933,0.938289,0.377245,-0.277544, 0.227251,-0.720523,0.655136,0.982068,0.320307,-0.325213, 0.287838,-0.708745,0.644073,0.910476,0.29726,-0.323037, 0.287838,-0.708745,0.644073,0.910476,0.29726,-0.323037, 0.181001,-0.354486,0.917376,0.863485,0.34941,-0.274775, 0.149984,-0.357133,0.921933,0.938289,0.377245,-0.277544, -0.231331,0.321253,0.918304,0.671195,0.426029,-0.273252, -0.459898,0.603331,0.651526,0.620074,0.472355,-0.321841, -0.36742,0.660294,0.654992,0.703717,0.526722,-0.323037, -0.36742,0.660294,0.654992,0.703717,0.526722,-0.323037, -0.168868,0.358366,0.918181,0.750708,0.474572,-0.274775, -0.231331,0.321253,0.918304,0.671195,0.426029,-0.273252, -0.308574,0.679683,0.665442,0.789439,0.570833,-0.325213, -0.132599,0.364183,0.921839,0.833218,0.513896,-0.277544, -0.168868,0.358366,0.918181,0.750708,0.474572,-0.274775, -0.308574,0.679683,0.665442,0.789439,0.570833,-0.325213, -0.168868,0.358366,0.918181,0.750708,0.474572,-0.274775, -0.36742,0.660294,0.654992,0.703717,0.526722,-0.323037, -0.132599,0.364183,0.921839,0.833218,0.513896,-0.277544, 0.026562,0.01606,0.999518,0.885754,0.44557,-0.261655, 0.02248,0.015118,0.999633,0.807096,0.411991,-0.258687, 0.02248,0.015118,0.999633,0.807096,0.411991,-0.258687, -0.168868,0.358366,0.918181,0.750708,0.474572,-0.274775, -0.132599,0.364183,0.921839,0.833218,0.513896,-0.277544, 0.003382,-0.001295,0.999993,0.73254,0.370437,-0.257056, -0.231331,0.321253,0.918304,0.671195,0.426029,-0.273252, -0.168868,0.358366,0.918181,0.750708,0.474572,-0.274775, 0.003382,-0.001295,0.999993,0.73254,0.370437,-0.257056, -0.168868,0.358366,0.918181,0.750708,0.474572,-0.274775, 0.02248,0.015118,0.999633,0.807096,0.411991,-0.258687, -0.290177,0.673481,-0.679868,0.869854,0.606754,-0.673044, -0.334948,0.636181,-0.695043,0.937575,0.63655,-0.673147, -0.440797,0.833329,-0.333557,0.913289,0.675305,-0.594444, -0.440797,0.833329,-0.333557,0.913289,0.675305,-0.594444, -0.397769,0.859277,-0.321594,0.844907,0.643346,-0.594388, -0.290177,0.673481,-0.679868,0.869854,0.606754,-0.673044, -0.456348,0.889801,0,0.905194,0.688224,-0.5, -0.427853,0.903848,0,0.836591,0.655543,-0.5, -0.397769,0.859277,-0.321594,0.844907,0.643346,-0.594388, -0.456348,0.889801,0,0.905194,0.688224,-0.5, -0.397769,0.859277,-0.321594,0.844907,0.643346,-0.594388, -0.440797,0.833329,-0.333557,0.913289,0.675305,-0.594444, -0.427853,0.903848,0,0.836591,0.655543,-0.5, -0.459546,0.888154,0,0.754416,0.616383,-0.5, -0.421194,0.852237,-0.310301,0.763171,0.604996,-0.595338, -0.421194,0.852237,-0.310301,0.763171,0.604996,-0.595338, -0.397769,0.859277,-0.321594,0.844907,0.643346,-0.594388, -0.427853,0.903848,0,0.836591,0.655543,-0.5, -0.308574,0.679683,-0.665442,0.789439,0.570833,-0.674787, -0.290177,0.673481,-0.679868,0.869854,0.606754,-0.673044, -0.397769,0.859277,-0.321594,0.844907,0.643346,-0.594388, -0.308574,0.679683,-0.665442,0.789439,0.570833,-0.674787, -0.397769,0.859277,-0.321594,0.844907,0.643346,-0.594388, -0.421194,0.852237,-0.310301,0.763171,0.604996,-0.595338, -0.440797,0.833329,0.333557,0.913289,0.675305,-0.405556, -0.334947,0.636181,0.695043,0.937575,0.63655,-0.326853, -0.290177,0.673481,0.679868,0.869854,0.606754,-0.326956, -0.290177,0.673481,0.679868,0.869854,0.606754,-0.326956, -0.397769,0.859277,0.321594,0.844907,0.643346,-0.405612, -0.440797,0.833329,0.333557,0.913289,0.675305,-0.405556, -0.308574,0.679683,0.665442,0.789439,0.570833,-0.325213, -0.421194,0.852237,0.310301,0.763171,0.604996,-0.404662, -0.397769,0.859277,0.321594,0.844907,0.643346,-0.405612, -0.308574,0.679683,0.665442,0.789439,0.570833,-0.325213, -0.397769,0.859277,0.321594,0.844907,0.643346,-0.405612, -0.290177,0.673481,0.679868,0.869854,0.606754,-0.326956, -0.421194,0.852237,0.310301,0.763171,0.604996,-0.404662, -0.459546,0.888154,0,0.754416,0.616383,-0.5, -0.427853,0.903848,0,0.836591,0.655543,-0.5, -0.427853,0.903848,0,0.836591,0.655543,-0.5, -0.397769,0.859277,0.321594,0.844907,0.643346,-0.405612, -0.421194,0.852237,0.310301,0.763171,0.604996,-0.404662, -0.456348,0.889801,0,0.905194,0.688224,-0.5, -0.440797,0.833329,0.333557,0.913289,0.675305,-0.405556, -0.397769,0.859277,0.321594,0.844907,0.643346,-0.405612, -0.456348,0.889801,0,0.905194,0.688224,-0.5, -0.397769,0.859277,0.321594,0.844907,0.643346,-0.405612, -0.427853,0.903848,0,0.836591,0.655543,-0.5, -0.459898,0.603331,0.651526,0.620074,0.472355,-0.321841, -0.5899,0.750266,0.298526,0.589401,0.500151,-0.402822, -0.487389,0.819353,0.301848,0.675523,0.558012,-0.403475, -0.459898,0.603331,0.651526,0.620074,0.472355,-0.321841, -0.487389,0.819353,0.301848,0.675523,0.558012,-0.403475, -0.36742,0.660294,0.654992,0.703717,0.526722,-0.323037, -0.5899,0.750266,0.298526,0.589401,0.500151,-0.402822, -0.64127,0.767315,0,0.579177,0.509417,-0.5, -0.532473,0.846447,0,0.666125,0.568442,-0.5, -0.532473,0.846447,0,0.666125,0.568442,-0.5, -0.487389,0.819353,0.301848,0.675523,0.558012,-0.403475, -0.5899,0.750266,0.298526,0.589401,0.500151,-0.402822, -0.459546,0.888154,0,0.754416,0.616383,-0.5, -0.421194,0.852237,0.310301,0.763171,0.604996,-0.404662, -0.487389,0.819353,0.301848,0.675523,0.558012,-0.403475, -0.459546,0.888154,0,0.754416,0.616383,-0.5, -0.487389,0.819353,0.301848,0.675523,0.558012,-0.403475, -0.532473,0.846447,0,0.666125,0.568442,-0.5, -0.421194,0.852237,0.310301,0.763171,0.604996,-0.404662, -0.308574,0.679683,0.665442,0.789439,0.570833,-0.325213, -0.36742,0.660294,0.654992,0.703717,0.526722,-0.323037, -0.36742,0.660294,0.654992,0.703717,0.526722,-0.323037, -0.487389,0.819353,0.301848,0.675523,0.558012,-0.403475, -0.421194,0.852237,0.310301,0.763171,0.604996,-0.404662, -0.459897,0.603331,-0.651526,0.620074,0.472355,-0.678159, -0.36742,0.660294,-0.654992,0.703717,0.526722,-0.676962, -0.487389,0.819353,-0.301848,0.675523,0.558012,-0.596525, -0.459897,0.603331,-0.651526,0.620074,0.472355,-0.678159, -0.487389,0.819353,-0.301848,0.675523,0.558012,-0.596525, -0.5899,0.750266,-0.298526,0.589401,0.500151,-0.597178, -0.36742,0.660294,-0.654992,0.703717,0.526722,-0.676962, -0.308574,0.679683,-0.665442,0.789439,0.570833,-0.674787, -0.421194,0.852237,-0.310301,0.763171,0.604996,-0.595338, -0.421194,0.852237,-0.310301,0.763171,0.604996,-0.595338, -0.487389,0.819353,-0.301848,0.675523,0.558012,-0.596525, -0.36742,0.660294,-0.654992,0.703717,0.526722,-0.676962, -0.459546,0.888154,0,0.754416,0.616383,-0.5, -0.532473,0.846447,0,0.666125,0.568442,-0.5, -0.487389,0.819353,-0.301848,0.675523,0.558012,-0.596525, -0.459546,0.888154,0,0.754416,0.616383,-0.5, -0.487389,0.819353,-0.301848,0.675523,0.558012,-0.596525, -0.421194,0.852237,-0.310301,0.763171,0.604996,-0.595338, -0.532473,0.846447,0,0.666125,0.568442,-0.5, -0.64127,0.767315,0,0.579177,0.509417,-0.5, -0.5899,0.750266,-0.298526,0.589401,0.500151,-0.597178, -0.5899,0.750266,-0.298526,0.589401,0.500151,-0.597178, -0.487389,0.819353,-0.301848,0.675523,0.558012,-0.596525, -0.532473,0.846447,0,0.666125,0.568442,-0.5, -0.610536,0.426181,-0.667544,0.428341,0.263148,-0.673044, -0.603758,0.432599,-0.669577,0.386176,0.201223,-0.673147, -0.304433,0.241938,-0.921296,0.458468,0.182068,-0.720369, -0.304433,0.241938,-0.921296,0.458468,0.182068,-0.720369, -0.317966,0.212815,-0.923909,0.495371,0.238512,-0.720237, -0.610536,0.426181,-0.667544,0.428341,0.263148,-0.673044, 0.013842,0.059444,-0.998136,0.545218,0.159081,-0.736109, -0.005469,-0.009402,-0.999941,0.575807,0.208949,-0.735969, -0.317966,0.212815,-0.923909,0.495371,0.238512,-0.720237, 0.013842,0.059444,-0.998136,0.545218,0.159081,-0.736109, -0.317966,0.212815,-0.923909,0.495371,0.238512,-0.720237, -0.304433,0.241938,-0.921296,0.458468,0.182068,-0.720369, -0.005469,-0.009402,-0.999941,0.575807,0.208949,-0.735969, -0.015914,-0.029529,-0.999437,0.617093,0.264045,-0.738345, -0.31459,0.228088,-0.921417,0.543287,0.301992,-0.722456, -0.31459,0.228088,-0.921417,0.543287,0.301992,-0.722456, -0.317966,0.212815,-0.923909,0.495371,0.238512,-0.720237, -0.005469,-0.009402,-0.999941,0.575807,0.208949,-0.735969, -0.595775,0.458968,-0.659091,0.481782,0.333615,-0.674787, -0.610536,0.426181,-0.667544,0.428341,0.263148,-0.673044, -0.317966,0.212815,-0.923909,0.495371,0.238512,-0.720237, -0.595775,0.458968,-0.659091,0.481782,0.333615,-0.674787, -0.317966,0.212815,-0.923909,0.495371,0.238512,-0.720237, -0.31459,0.228088,-0.921417,0.543287,0.301992,-0.722456, 0.677454,-0.2664,-0.685629,0.704261,0.116939,-0.673147, 0.617578,-0.419692,-0.665174,0.723274,0.15475,-0.673044, 0.314626,-0.214176,-0.924737,0.656244,0.179386,-0.720237, 0.677454,-0.2664,-0.685629,0.704261,0.116939,-0.673147, 0.314626,-0.214176,-0.924737,0.656244,0.179386,-0.720237, 0.344586,-0.098997,-0.93352,0.631969,0.136095,-0.720369, 0.617578,-0.419692,-0.665174,0.723274,0.15475,-0.673044, 0.525124,-0.503608,-0.68602,0.752404,0.194475,-0.674787, 0.282948,-0.282367,-0.916629,0.690899,0.226098,-0.722456, 0.282948,-0.282367,-0.916629,0.690899,0.226098,-0.722456, 0.314626,-0.214176,-0.924737,0.656244,0.179386,-0.720237, 0.617578,-0.419692,-0.665174,0.723274,0.15475,-0.673044, -0.015914,-0.029529,-0.999437,0.617093,0.264045,-0.738345, -0.005469,-0.009402,-0.999941,0.575807,0.208949,-0.735969, 0.314626,-0.214176,-0.924737,0.656244,0.179386,-0.720237, -0.015914,-0.029529,-0.999437,0.617093,0.264045,-0.738345, 0.314626,-0.214176,-0.924737,0.656244,0.179386,-0.720237, 0.282948,-0.282367,-0.916629,0.690899,0.226098,-0.722456, -0.005469,-0.009402,-0.999941,0.575807,0.208949,-0.735969, 0.013842,0.059444,-0.998136,0.545218,0.159081,-0.736109, 0.344586,-0.098997,-0.93352,0.631969,0.136095,-0.720369, 0.344586,-0.098997,-0.93352,0.631969,0.136095,-0.720369, 0.314626,-0.214176,-0.924737,0.656244,0.179386,-0.720237, -0.005469,-0.009402,-0.999941,0.575807,0.208949,-0.735969, 0.473586,-0.60369,-0.641307,0.792649,0.233327,-0.676962, 0.37574,-0.67126,-0.638928,0.845007,0.268518,-0.678159, 0.214466,-0.344671,-0.913896,0.793886,0.314845,-0.726748, 0.214466,-0.344671,-0.913896,0.793886,0.314845,-0.726748, 0.248581,-0.323271,-0.913074,0.736568,0.272496,-0.725225, 0.473586,-0.60369,-0.641307,0.792649,0.233327,-0.676962, 0.003382,-0.001295,-0.999993,0.73254,0.370437,-0.742944, -0.014673,-0.023374,-0.999619,0.669271,0.319498,-0.741313, 0.248581,-0.323271,-0.913074,0.736568,0.272496,-0.725225, 0.003382,-0.001295,-0.999993,0.73254,0.370437,-0.742944, 0.248581,-0.323271,-0.913074,0.736568,0.272496,-0.725225, 0.214466,-0.344671,-0.913896,0.793886,0.314845,-0.726748, -0.014673,-0.023374,-0.999619,0.669271,0.319498,-0.741313, -0.015914,-0.029529,-0.999437,0.617093,0.264045,-0.738345, 0.282948,-0.282367,-0.916629,0.690899,0.226098,-0.722456, 0.282948,-0.282367,-0.916629,0.690899,0.226098,-0.722456, 0.248581,-0.323271,-0.913074,0.736568,0.272496,-0.725225, -0.014673,-0.023374,-0.999619,0.669271,0.319498,-0.741313, 0.525124,-0.503608,-0.68602,0.752404,0.194475,-0.674787, 0.473586,-0.60369,-0.641307,0.792649,0.233327,-0.676962, 0.248581,-0.323271,-0.913074,0.736568,0.272496,-0.725225, 0.525124,-0.503608,-0.68602,0.752404,0.194475,-0.674787, 0.248581,-0.323271,-0.913074,0.736568,0.272496,-0.725225, 0.282948,-0.282367,-0.916629,0.690899,0.226098,-0.722456, -0.459897,0.603331,-0.651526,0.620074,0.472355,-0.678159, -0.565284,0.537872,-0.625418,0.545894,0.405668,-0.676962, -0.288623,0.26748,-0.919321,0.601974,0.3665,-0.725225, -0.459897,0.603331,-0.651526,0.620074,0.472355,-0.678159, -0.288623,0.26748,-0.919321,0.601974,0.3665,-0.725225, -0.231331,0.321253,-0.918304,0.671195,0.426029,-0.726748, -0.565284,0.537872,-0.625418,0.545894,0.405668,-0.676962, -0.595775,0.458968,-0.659091,0.481782,0.333615,-0.674787, -0.31459,0.228088,-0.921417,0.543287,0.301992,-0.722456, -0.31459,0.228088,-0.921417,0.543287,0.301992,-0.722456, -0.288623,0.26748,-0.919321,0.601974,0.3665,-0.725225, -0.565284,0.537872,-0.625418,0.545894,0.405668,-0.676962, -0.015914,-0.029529,-0.999437,0.617093,0.264045,-0.738345, -0.014673,-0.023374,-0.999619,0.669271,0.319498,-0.741313, -0.288623,0.26748,-0.919321,0.601974,0.3665,-0.725225, -0.015914,-0.029529,-0.999437,0.617093,0.264045,-0.738345, -0.288623,0.26748,-0.919321,0.601974,0.3665,-0.725225, -0.31459,0.228088,-0.921417,0.543287,0.301992,-0.722456, -0.014673,-0.023374,-0.999619,0.669271,0.319498,-0.741313, 0.003382,-0.001295,-0.999993,0.73254,0.370437,-0.742944, -0.231331,0.321253,-0.918304,0.671195,0.426029,-0.726748, -0.231331,0.321253,-0.918304,0.671195,0.426029,-0.726748, -0.288623,0.26748,-0.919321,0.601974,0.3665,-0.725225, -0.014673,-0.023374,-0.999619,0.669271,0.319498,-0.741313, -0.77971,0.541974,-0.313555,0.342801,0.212716,-0.594444, -0.603758,0.432599,-0.669577,0.386176,0.201223,-0.673147, -0.610536,0.426181,-0.667544,0.428341,0.263148,-0.673044, -0.610536,0.426181,-0.667544,0.428341,0.263148,-0.673044, -0.770954,0.557417,-0.308084,0.388123,0.27793,-0.594388, -0.77971,0.541974,-0.313555,0.342801,0.212716,-0.594444, -0.595775,0.458968,-0.659091,0.481782,0.333615,-0.674787, -0.740072,0.600901,-0.302014,0.444878,0.352588,-0.595338, -0.770954,0.557417,-0.308084,0.388123,0.27793,-0.594388, -0.595775,0.458968,-0.659091,0.481782,0.333615,-0.674787, -0.770954,0.557417,-0.308084,0.388123,0.27793,-0.594388, -0.610536,0.426181,-0.667544,0.428341,0.263148,-0.673044, -0.740072,0.600901,-0.302014,0.444878,0.352588,-0.595338, -0.766999,0.641648,0,0.432577,0.358913,-0.5, -0.804241,0.594303,0,0.374717,0.282857,-0.5, -0.804241,0.594303,0,0.374717,0.282857,-0.5, -0.770954,0.557417,-0.308084,0.388123,0.27793,-0.594388, -0.740072,0.600901,-0.302014,0.444878,0.352588,-0.595338, -0.820475,0.571682,0,0.328343,0.216547,-0.5, -0.77971,0.541974,-0.313555,0.342801,0.212716,-0.594444, -0.770954,0.557417,-0.308084,0.388123,0.27793,-0.594388, -0.820475,0.571682,0,0.328343,0.216547,-0.5, -0.770954,0.557417,-0.308084,0.388123,0.27793,-0.594388, -0.804241,0.594303,0,0.374717,0.282857,-0.5, -0.565284,0.537872,-0.625418,0.545894,0.405668,-0.676962, -0.459897,0.603331,-0.651526,0.620074,0.472355,-0.678159, -0.5899,0.750266,-0.298526,0.589401,0.500151,-0.597178, -0.5899,0.750266,-0.298526,0.589401,0.500151,-0.597178, -0.694867,0.675869,-0.245685,0.512245,0.429169,-0.596525, -0.565284,0.537872,-0.625418,0.545894,0.405668,-0.676962, -0.64127,0.767315,0,0.579177,0.509417,-0.5, -0.716797,0.697282,0,0.501029,0.437003,-0.5, -0.694867,0.675869,-0.245685,0.512245,0.429169,-0.596525, -0.64127,0.767315,0,0.579177,0.509417,-0.5, -0.694867,0.675869,-0.245685,0.512245,0.429169,-0.596525, -0.5899,0.750266,-0.298526,0.589401,0.500151,-0.597178, -0.766999,0.641648,0,0.432577,0.358913,-0.5, -0.740072,0.600901,-0.302014,0.444878,0.352588,-0.595338, -0.694867,0.675869,-0.245685,0.512245,0.429169,-0.596525, -0.766999,0.641648,0,0.432577,0.358913,-0.5, -0.694867,0.675869,-0.245685,0.512245,0.429169,-0.596525, -0.716797,0.697282,0,0.501029,0.437003,-0.5, -0.740072,0.600901,-0.302014,0.444878,0.352588,-0.595338, -0.595775,0.458968,-0.659091,0.481782,0.333615,-0.674787, -0.565284,0.537872,-0.625418,0.545894,0.405668,-0.676962, -0.565284,0.537872,-0.625418,0.545894,0.405668,-0.676962, -0.694867,0.675869,-0.245685,0.512245,0.429169,-0.596525, -0.740072,0.600901,-0.302014,0.444878,0.352588,-0.595338, -0.5899,0.750266,0.298526,0.589401,0.500151,-0.402822, -0.459898,0.603331,0.651526,0.620074,0.472355,-0.321841, -0.565284,0.537872,0.625418,0.545894,0.405668,-0.323037, -0.565284,0.537872,0.625418,0.545894,0.405668,-0.323037, -0.694867,0.675869,0.245685,0.512245,0.429169,-0.403475, -0.5899,0.750266,0.298526,0.589401,0.500151,-0.402822, -0.565284,0.537872,0.625418,0.545894,0.405668,-0.323037, -0.595775,0.458968,0.659091,0.481782,0.333615,-0.325213, -0.740072,0.600901,0.302014,0.444878,0.352588,-0.404662, -0.740072,0.600901,0.302014,0.444878,0.352588,-0.404662, -0.694867,0.675869,0.245685,0.512245,0.429169,-0.403475, -0.565284,0.537872,0.625418,0.545894,0.405668,-0.323037, -0.766999,0.641648,0,0.432577,0.358913,-0.5, -0.716797,0.697282,0,0.501029,0.437003,-0.5, -0.694867,0.675869,0.245685,0.512245,0.429169,-0.403475, -0.766999,0.641648,0,0.432577,0.358913,-0.5, -0.694867,0.675869,0.245685,0.512245,0.429169,-0.403475, -0.740072,0.600901,0.302014,0.444878,0.352588,-0.404662, -0.64127,0.767315,0,0.579177,0.509417,-0.5, -0.5899,0.750266,0.298526,0.589401,0.500151,-0.402822, -0.694867,0.675869,0.245685,0.512245,0.429169,-0.403475, -0.64127,0.767315,0,0.579177,0.509417,-0.5, -0.694867,0.675869,0.245685,0.512245,0.429169,-0.403475, -0.716797,0.697282,0,0.501029,0.437003,-0.5, -0.610536,0.426181,0.667544,0.428341,0.263148,-0.326956, -0.603758,0.432599,0.669577,0.386176,0.201223,-0.326853, -0.77971,0.541974,0.313555,0.342801,0.212716,-0.405556, -0.77971,0.541974,0.313555,0.342801,0.212716,-0.405556, -0.770954,0.557417,0.308084,0.388123,0.27793,-0.405612, -0.610536,0.426181,0.667544,0.428341,0.263148,-0.326956, -0.820475,0.571682,0,0.328343,0.216547,-0.5, -0.804241,0.594303,0,0.374717,0.282857,-0.5, -0.770954,0.557417,0.308084,0.388123,0.27793,-0.405612, -0.820475,0.571682,0,0.328343,0.216547,-0.5, -0.770954,0.557417,0.308084,0.388123,0.27793,-0.405612, -0.77971,0.541974,0.313555,0.342801,0.212716,-0.405556, -0.804241,0.594303,0,0.374717,0.282857,-0.5, -0.766999,0.641648,0,0.432577,0.358913,-0.5, -0.740072,0.600901,0.302014,0.444878,0.352588,-0.404662, -0.740072,0.600901,0.302014,0.444878,0.352588,-0.404662, -0.770954,0.557417,0.308084,0.388123,0.27793,-0.405612, -0.804241,0.594303,0,0.374717,0.282857,-0.5, -0.595775,0.458968,0.659091,0.481782,0.333615,-0.325213, -0.610536,0.426181,0.667544,0.428341,0.263148,-0.326956, -0.770954,0.557417,0.308084,0.388123,0.27793,-0.405612, -0.595775,0.458968,0.659091,0.481782,0.333615,-0.325213, -0.770954,0.557417,0.308084,0.388123,0.27793,-0.405612, -0.740072,0.600901,0.302014,0.444878,0.352588,-0.404662, -0.304433,0.241938,0.921296,0.458468,0.182068,-0.279631, -0.603758,0.432599,0.669577,0.386176,0.201223,-0.326853, -0.610536,0.426181,0.667544,0.428341,0.263148,-0.326956, -0.610536,0.426181,0.667544,0.428341,0.263148,-0.326956, -0.317966,0.212815,0.923909,0.495371,0.238512,-0.279763, -0.304433,0.241938,0.921296,0.458468,0.182068,-0.279631, -0.595775,0.458968,0.659091,0.481782,0.333615,-0.325213, -0.31459,0.228088,0.921417,0.543287,0.301992,-0.277544, -0.317966,0.212815,0.923909,0.495371,0.238512,-0.279763, -0.595775,0.458968,0.659091,0.481782,0.333615,-0.325213, -0.317966,0.212815,0.923909,0.495371,0.238512,-0.279763, -0.610536,0.426181,0.667544,0.428341,0.263148,-0.326956, -0.31459,0.228088,0.921417,0.543287,0.301992,-0.277544, -0.015914,-0.029529,0.999437,0.617093,0.264045,-0.261655, -0.005469,-0.009402,0.999941,0.575807,0.208949,-0.264031, -0.005469,-0.009402,0.999941,0.575807,0.208949,-0.264031, -0.317966,0.212815,0.923909,0.495371,0.238512,-0.279763, -0.31459,0.228088,0.921417,0.543287,0.301992,-0.277544, 0.013842,0.059444,0.998136,0.545218,0.159081,-0.263891, -0.304433,0.241938,0.921296,0.458468,0.182068,-0.279631, -0.317966,0.212815,0.923909,0.495371,0.238512,-0.279763, 0.013842,0.059444,0.998136,0.545218,0.159081,-0.263891, -0.317966,0.212815,0.923909,0.495371,0.238512,-0.279763, -0.005469,-0.009402,0.999941,0.575807,0.208949,-0.264031, -0.459898,0.603331,0.651526,0.620074,0.472355,-0.321841, -0.231331,0.321253,0.918304,0.671195,0.426029,-0.273252, -0.288623,0.267481,0.919321,0.601974,0.3665,-0.274775, -0.459898,0.603331,0.651526,0.620074,0.472355,-0.321841, -0.288623,0.267481,0.919321,0.601974,0.3665,-0.274775, -0.565284,0.537872,0.625418,0.545894,0.405668,-0.323037, -0.231331,0.321253,0.918304,0.671195,0.426029,-0.273252, 0.003382,-0.001295,0.999993,0.73254,0.370437,-0.257056, -0.014673,-0.023374,0.999619,0.669271,0.319498,-0.258687, -0.014673,-0.023374,0.999619,0.669271,0.319498,-0.258687, -0.288623,0.267481,0.919321,0.601974,0.3665,-0.274775, -0.231331,0.321253,0.918304,0.671195,0.426029,-0.273252, -0.015914,-0.029529,0.999437,0.617093,0.264045,-0.261655, -0.31459,0.228088,0.921417,0.543287,0.301992,-0.277544, -0.288623,0.267481,0.919321,0.601974,0.3665,-0.274775, -0.015914,-0.029529,0.999437,0.617093,0.264045,-0.261655, -0.288623,0.267481,0.919321,0.601974,0.3665,-0.274775, -0.014673,-0.023374,0.999619,0.669271,0.319498,-0.258687, -0.31459,0.228088,0.921417,0.543287,0.301992,-0.277544, -0.595775,0.458968,0.659091,0.481782,0.333615,-0.325213, -0.565284,0.537872,0.625418,0.545894,0.405668,-0.323037, -0.565284,0.537872,0.625418,0.545894,0.405668,-0.323037, -0.288623,0.267481,0.919321,0.601974,0.3665,-0.274775, -0.31459,0.228088,0.921417,0.543287,0.301992,-0.277544, 0.214466,-0.34467,0.913896,0.793886,0.314845,-0.273252, 0.37574,-0.67126,0.638928,0.845007,0.268518,-0.321841, 0.473587,-0.60369,0.641306,0.792649,0.233327,-0.323037, 0.473587,-0.60369,0.641306,0.792649,0.233327,-0.323037, 0.248581,-0.323271,0.913073,0.736568,0.272496,-0.274775, 0.214466,-0.34467,0.913896,0.793886,0.314845,-0.273252, 0.525124,-0.503609,0.68602,0.752404,0.194475,-0.325213, 0.282948,-0.282367,0.916629,0.690899,0.226098,-0.277544, 0.248581,-0.323271,0.913073,0.736568,0.272496,-0.274775, 0.525124,-0.503609,0.68602,0.752404,0.194475,-0.325213, 0.248581,-0.323271,0.913073,0.736568,0.272496,-0.274775, 0.473587,-0.60369,0.641306,0.792649,0.233327,-0.323037, 0.282948,-0.282367,0.916629,0.690899,0.226098,-0.277544, -0.015914,-0.029529,0.999437,0.617093,0.264045,-0.261655, -0.014673,-0.023374,0.999619,0.669271,0.319498,-0.258687, -0.014673,-0.023374,0.999619,0.669271,0.319498,-0.258687, 0.248581,-0.323271,0.913073,0.736568,0.272496,-0.274775, 0.282948,-0.282367,0.916629,0.690899,0.226098,-0.277544, 0.003382,-0.001295,0.999993,0.73254,0.370437,-0.257056, 0.214466,-0.34467,0.913896,0.793886,0.314845,-0.273252, 0.248581,-0.323271,0.913073,0.736568,0.272496,-0.274775, 0.003382,-0.001295,0.999993,0.73254,0.370437,-0.257056, 0.248581,-0.323271,0.913073,0.736568,0.272496,-0.274775, -0.014673,-0.023374,0.999619,0.669271,0.319498,-0.258687, 0.677454,-0.2664,0.685629,0.704261,0.116939,-0.326853, 0.344586,-0.098997,0.93352,0.631969,0.136095,-0.279631, 0.314626,-0.214176,0.924737,0.656244,0.179386,-0.279763, 0.677454,-0.2664,0.685629,0.704261,0.116939,-0.326853, 0.314626,-0.214176,0.924737,0.656244,0.179386,-0.279763, 0.617578,-0.419693,0.665173,0.723274,0.15475,-0.326956, 0.344586,-0.098997,0.93352,0.631969,0.136095,-0.279631, 0.013842,0.059444,0.998136,0.545218,0.159081,-0.263891, -0.005469,-0.009402,0.999941,0.575807,0.208949,-0.264031, -0.005469,-0.009402,0.999941,0.575807,0.208949,-0.264031, 0.314626,-0.214176,0.924737,0.656244,0.179386,-0.279763, 0.344586,-0.098997,0.93352,0.631969,0.136095,-0.279631, -0.015914,-0.029529,0.999437,0.617093,0.264045,-0.261655, 0.282948,-0.282367,0.916629,0.690899,0.226098,-0.277544, 0.314626,-0.214176,0.924737,0.656244,0.179386,-0.279763, -0.015914,-0.029529,0.999437,0.617093,0.264045,-0.261655, 0.314626,-0.214176,0.924737,0.656244,0.179386,-0.279763, -0.005469,-0.009402,0.999941,0.575807,0.208949,-0.264031, 0.282948,-0.282367,0.916629,0.690899,0.226098,-0.277544, 0.525124,-0.503609,0.68602,0.752404,0.194475,-0.325213, 0.617578,-0.419693,0.665173,0.723274,0.15475,-0.326956, 0.617578,-0.419693,0.665173,0.723274,0.15475,-0.326956, 0.314626,-0.214176,0.924737,0.656244,0.179386,-0.279763, 0.282948,-0.282367,0.916629,0.690899,0.226098,-0.277544, 0.677454,-0.2664,0.685629,0.704261,0.116939,-0.326853, 0.617578,-0.419693,0.665173,0.723274,0.15475,-0.326956, 0.814068,-0.486717,0.316859,0.763492,0.139968,-0.405612, 0.677454,-0.2664,0.685629,0.704261,0.116939,-0.326853, 0.814068,-0.486717,0.316859,0.763492,0.139968,-0.405612, 0.894665,-0.298343,0.332514,0.747636,0.105446,-0.405556, 0.617578,-0.419693,0.665173,0.723274,0.15475,-0.326956, 0.525124,-0.503609,0.68602,0.752404,0.194475,-0.325213, 0.694632,-0.626894,0.352832,0.789307,0.175501,-0.404662, 0.694632,-0.626894,0.352832,0.789307,0.175501,-0.404662, 0.814068,-0.486717,0.316859,0.763492,0.139968,-0.405612, 0.617578,-0.419693,0.665173,0.723274,0.15475,-0.326956, 0.746099,-0.665835,0,0.801608,0.169177,-0.5, 0.881754,-0.47171,0,0.776898,0.135041,-0.5, 0.814068,-0.486717,0.316859,0.763492,0.139968,-0.405612, 0.746099,-0.665835,0,0.801608,0.169177,-0.5, 0.814068,-0.486717,0.316859,0.763492,0.139968,-0.405612, 0.694632,-0.626894,0.352832,0.789307,0.175501,-0.404662, 0.881754,-0.47171,0,0.776898,0.135041,-0.5, 0.961956,-0.273203,0,0.762094,0.101615,-0.5, 0.894665,-0.298343,0.332514,0.747636,0.105446,-0.405556, 0.894665,-0.298343,0.332514,0.747636,0.105446,-0.405556, 0.814068,-0.486717,0.316859,0.763492,0.139968,-0.405612, 0.881754,-0.47171,0,0.776898,0.135041,-0.5, 0.37574,-0.67126,0.638928,0.845007,0.268518,-0.321841, 0.438584,-0.8515,0.287389,0.875679,0.240722,-0.402822, 0.582001,-0.759448,0.290711,0.826297,0.209826,-0.403475, 0.37574,-0.67126,0.638928,0.845007,0.268518,-0.321841, 0.582001,-0.759448,0.290711,0.826297,0.209826,-0.403475, 0.473587,-0.60369,0.641306,0.792649,0.233327,-0.323037, 0.438584,-0.8515,0.287389,0.875679,0.240722,-0.402822, 0.419512,-0.90775,0,0.885904,0.231457,-0.5, 0.576871,-0.816835,0,0.837513,0.201992,-0.5, 0.576871,-0.816835,0,0.837513,0.201992,-0.5, 0.582001,-0.759448,0.290711,0.826297,0.209826,-0.403475, 0.438584,-0.8515,0.287389,0.875679,0.240722,-0.402822, 0.746099,-0.665835,0,0.801608,0.169177,-0.5, 0.694632,-0.626894,0.352832,0.789307,0.175501,-0.404662, 0.582001,-0.759448,0.290711,0.826297,0.209826,-0.403475, 0.746099,-0.665835,0,0.801608,0.169177,-0.5, 0.582001,-0.759448,0.290711,0.826297,0.209826,-0.403475, 0.576871,-0.816835,0,0.837513,0.201992,-0.5, 0.694632,-0.626894,0.352832,0.789307,0.175501,-0.404662, 0.525124,-0.503609,0.68602,0.752404,0.194475,-0.325213, 0.473587,-0.60369,0.641306,0.792649,0.233327,-0.323037, 0.473587,-0.60369,0.641306,0.792649,0.233327,-0.323037, 0.582001,-0.759448,0.290711,0.826297,0.209826,-0.403475, 0.694632,-0.626894,0.352832,0.789307,0.175501,-0.404662, 0.37574,-0.67126,-0.638928,0.845007,0.268518,-0.678159, 0.473586,-0.60369,-0.641307,0.792649,0.233327,-0.676962, 0.582001,-0.759448,-0.290711,0.826297,0.209826,-0.596525, 0.37574,-0.67126,-0.638928,0.845007,0.268518,-0.678159, 0.582001,-0.759448,-0.290711,0.826297,0.209826,-0.596525, 0.438584,-0.8515,-0.287389,0.875679,0.240722,-0.597178, 0.473586,-0.60369,-0.641307,0.792649,0.233327,-0.676962, 0.525124,-0.503608,-0.68602,0.752404,0.194475,-0.674787, 0.694632,-0.626893,-0.352832,0.789307,0.175501,-0.595338, 0.694632,-0.626893,-0.352832,0.789307,0.175501,-0.595338, 0.582001,-0.759448,-0.290711,0.826297,0.209826,-0.596525, 0.473586,-0.60369,-0.641307,0.792649,0.233327,-0.676962, 0.746099,-0.665835,0,0.801608,0.169177,-0.5, 0.576871,-0.816835,0,0.837513,0.201992,-0.5, 0.582001,-0.759448,-0.290711,0.826297,0.209826,-0.596525, 0.746099,-0.665835,0,0.801608,0.169177,-0.5, 0.582001,-0.759448,-0.290711,0.826297,0.209826,-0.596525, 0.694632,-0.626893,-0.352832,0.789307,0.175501,-0.595338, 0.576871,-0.816835,0,0.837513,0.201992,-0.5, 0.419512,-0.90775,0,0.885904,0.231457,-0.5, 0.438584,-0.8515,-0.287389,0.875679,0.240722,-0.597178, 0.438584,-0.8515,-0.287389,0.875679,0.240722,-0.597178, 0.582001,-0.759448,-0.290711,0.826297,0.209826,-0.596525, 0.576871,-0.816835,0,0.837513,0.201992,-0.5, 0.677454,-0.2664,-0.685629,0.704261,0.116939,-0.673147, 0.894665,-0.298343,-0.332514,0.747636,0.105446,-0.594444, 0.814068,-0.486716,-0.31686,0.763492,0.139968,-0.594388, 0.677454,-0.2664,-0.685629,0.704261,0.116939,-0.673147, 0.814068,-0.486716,-0.31686,0.763492,0.139968,-0.594388, 0.617578,-0.419692,-0.665174,0.723274,0.15475,-0.673044, 0.894665,-0.298343,-0.332514,0.747636,0.105446,-0.594444, 0.961956,-0.273203,0,0.762094,0.101615,-0.5, 0.881754,-0.47171,0,0.776898,0.135041,-0.5, 0.881754,-0.47171,0,0.776898,0.135041,-0.5, 0.814068,-0.486716,-0.31686,0.763492,0.139968,-0.594388, 0.894665,-0.298343,-0.332514,0.747636,0.105446,-0.594444, 0.746099,-0.665835,0,0.801608,0.169177,-0.5, 0.694632,-0.626893,-0.352832,0.789307,0.175501,-0.595338, 0.814068,-0.486716,-0.31686,0.763492,0.139968,-0.594388, 0.746099,-0.665835,0,0.801608,0.169177,-0.5, 0.814068,-0.486716,-0.31686,0.763492,0.139968,-0.594388, 0.881754,-0.47171,0,0.776898,0.135041,-0.5, 0.694632,-0.626893,-0.352832,0.789307,0.175501,-0.595338, 0.525124,-0.503608,-0.68602,0.752404,0.194475,-0.674787, 0.617578,-0.419692,-0.665174,0.723274,0.15475,-0.673044, 0.617578,-0.419692,-0.665174,0.723274,0.15475,-0.673044, 0.814068,-0.486716,-0.31686,0.763492,0.139968,-0.594388, 0.694632,-0.626893,-0.352832,0.789307,0.175501,-0.595338, 0.691984,-0.189259,0.696663,0.694366,0.083832,-0.323491, 0.677454,-0.2664,0.685629,0.704261,0.116939,-0.326853, 0.894665,-0.298343,0.332514,0.747636,0.105446,-0.405556, 0.894665,-0.298343,0.332514,0.747636,0.105446,-0.405556, 0.903923,-0.26074,0.339026,0.740522,0.074155,-0.403722, 0.691984,-0.189259,0.696663,0.694366,0.083832,-0.323491, 0.961956,-0.273203,0,0.762094,0.101615,-0.5, 0.957991,-0.286797,0,0.755907,0.07093,-0.5, 0.903923,-0.26074,0.339026,0.740522,0.074155,-0.403722, 0.961956,-0.273203,0,0.762094,0.101615,-0.5, 0.903923,-0.26074,0.339026,0.740522,0.074155,-0.403722, 0.894665,-0.298343,0.332514,0.747636,0.105446,-0.405556, 0.957991,-0.286797,0,0.755907,0.07093,-0.5, 0.740764,-0.671765,0,0.747335,0.045755,-0.5, 0.78946,-0.545462,0.281469,0.731601,0.048967,-0.404556, 0.78946,-0.545462,0.281469,0.731601,0.048967,-0.404556, 0.903923,-0.26074,0.339026,0.740522,0.074155,-0.403722, 0.957991,-0.286797,0,0.755907,0.07093,-0.5, 0.570752,-0.537595,0.620673,0.684631,0.057942,-0.324904, 0.691984,-0.189259,0.696663,0.694366,0.083832,-0.323491, 0.903923,-0.26074,0.339026,0.740522,0.074155,-0.403722, 0.570752,-0.537595,0.620673,0.684631,0.057942,-0.324904, 0.903923,-0.26074,0.339026,0.740522,0.074155,-0.403722, 0.78946,-0.545462,0.281469,0.731601,0.048967,-0.404556, 0.894665,-0.298343,-0.332514,0.747636,0.105446,-0.594444, 0.677454,-0.2664,-0.685629,0.704261,0.116939,-0.673147, 0.691984,-0.189259,-0.696663,0.694366,0.083832,-0.676509, 0.691984,-0.189259,-0.696663,0.694366,0.083832,-0.676509, 0.903923,-0.26074,-0.339025,0.740522,0.074155,-0.596277, 0.894665,-0.298343,-0.332514,0.747636,0.105446,-0.594444, 0.570751,-0.537595,-0.620672,0.684631,0.057942,-0.675096, 0.789459,-0.545462,-0.281469,0.731601,0.048967,-0.595444, 0.903923,-0.26074,-0.339025,0.740522,0.074155,-0.596277, 0.570751,-0.537595,-0.620672,0.684631,0.057942,-0.675096, 0.903923,-0.26074,-0.339025,0.740522,0.074155,-0.596277, 0.691984,-0.189259,-0.696663,0.694366,0.083832,-0.676509, 0.789459,-0.545462,-0.281469,0.731601,0.048967,-0.595444, 0.740764,-0.671765,0,0.747335,0.045755,-0.5, 0.957991,-0.286797,0,0.755907,0.07093,-0.5, 0.957991,-0.286797,0,0.755907,0.07093,-0.5, 0.903923,-0.26074,-0.339025,0.740522,0.074155,-0.596277, 0.789459,-0.545462,-0.281469,0.731601,0.048967,-0.595444, 0.961956,-0.273203,0,0.762094,0.101615,-0.5, 0.894665,-0.298343,-0.332514,0.747636,0.105446,-0.594444, 0.903923,-0.26074,-0.339025,0.740522,0.074155,-0.596277, 0.961956,-0.273203,0,0.762094,0.101615,-0.5, 0.903923,-0.26074,-0.339025,0.740522,0.074155,-0.596277, 0.957991,-0.286797,0,0.755907,0.07093,-0.5, 0.029695,-0.979483,-0.199329,0.642426,0.035438,-0.638667, 0.015839,-0.994833,-0.100277,0.667212,0.026513,-0.5825, 0.33287,-0.922331,-0.196223,0.710325,0.03275,-0.5875, 0.029695,-0.979483,-0.199329,0.642426,0.035438,-0.638667, 0.33287,-0.922331,-0.196223,0.710325,0.03275,-0.5875, 0.21248,-0.884802,-0.414701,0.666096,0.041783,-0.660875, 0.072467,-0.997371,0,0.679568,0.022087,-0.5, 0.389749,-0.920921,0,0.725378,0.028862,-0.5, 0.33287,-0.922331,-0.196223,0.710325,0.03275,-0.5875, 0.072467,-0.997371,0,0.679568,0.022087,-0.5, 0.33287,-0.922331,-0.196223,0.710325,0.03275,-0.5875, 0.015839,-0.994833,-0.100277,0.667212,0.026513,-0.5825, 0.740764,-0.671765,0,0.747335,0.045755,-0.5, 0.789459,-0.545462,-0.281469,0.731601,0.048967,-0.595444, 0.33287,-0.922331,-0.196223,0.710325,0.03275,-0.5875, 0.740764,-0.671765,0,0.747335,0.045755,-0.5, 0.33287,-0.922331,-0.196223,0.710325,0.03275,-0.5875, 0.389749,-0.920921,0,0.725378,0.028862,-0.5, 0.570751,-0.537595,-0.620672,0.684631,0.057942,-0.675096, 0.21248,-0.884802,-0.414701,0.666096,0.041783,-0.660875, 0.33287,-0.922331,-0.196223,0.710325,0.03275,-0.5875, 0.570751,-0.537595,-0.620672,0.684631,0.057942,-0.675096, 0.33287,-0.922331,-0.196223,0.710325,0.03275,-0.5875, 0.789459,-0.545462,-0.281469,0.731601,0.048967,-0.595444, 0.029695,-0.979483,0.199329,0.642426,0.035438,-0.361333, 0.21248,-0.884802,0.414702,0.666096,0.041783,-0.339125, 0.33287,-0.922331,0.196223,0.710325,0.03275,-0.4125, 0.029695,-0.979483,0.199329,0.642426,0.035438,-0.361333, 0.33287,-0.922331,0.196223,0.710325,0.03275,-0.4125, 0.015839,-0.994833,0.100277,0.667212,0.026513,-0.4175, 0.570752,-0.537595,0.620673,0.684631,0.057942,-0.324904, 0.78946,-0.545462,0.281469,0.731601,0.048967,-0.404556, 0.33287,-0.922331,0.196223,0.710325,0.03275,-0.4125, 0.570752,-0.537595,0.620673,0.684631,0.057942,-0.324904, 0.33287,-0.922331,0.196223,0.710325,0.03275,-0.4125, 0.21248,-0.884802,0.414702,0.666096,0.041783,-0.339125, 0.740764,-0.671765,0,0.747335,0.045755,-0.5, 0.389749,-0.920921,0,0.725378,0.028862,-0.5, 0.33287,-0.922331,0.196223,0.710325,0.03275,-0.4125, 0.740764,-0.671765,0,0.747335,0.045755,-0.5, 0.33287,-0.922331,0.196223,0.710325,0.03275,-0.4125, 0.78946,-0.545462,0.281469,0.731601,0.048967,-0.404556, 0.072467,-0.997371,0,0.679568,0.022087,-0.5, 0.015839,-0.994833,0.100277,0.667212,0.026513,-0.4175, 0.33287,-0.922331,0.196223,0.710325,0.03275,-0.4125, 0.072467,-0.997371,0,0.679568,0.022087,-0.5, 0.33287,-0.922331,0.196223,0.710325,0.03275,-0.4125, 0.389749,-0.920921,0,0.725378,0.028862,-0.5, 0.691984,-0.189259,-0.696663,0.694366,0.083832,-0.676509, 0.677454,-0.2664,-0.685629,0.704261,0.116939,-0.673147, 0.344586,-0.098997,-0.93352,0.631969,0.136095,-0.720369, 0.344586,-0.098997,-0.93352,0.631969,0.136095,-0.720369, 0.338241,-0.103362,-0.935366,0.61744,0.099959,-0.724648, 0.691984,-0.189259,-0.696663,0.694366,0.083832,-0.676509, 0.013842,0.059444,-0.998136,0.545218,0.159081,-0.736109, 0.007661,0.031192,-0.999484,0.525128,0.119312,-0.740694, 0.338241,-0.103362,-0.935366,0.61744,0.099959,-0.724648, 0.013842,0.059444,-0.998136,0.545218,0.159081,-0.736109, 0.338241,-0.103362,-0.935366,0.61744,0.099959,-0.724648, 0.344586,-0.098997,-0.93352,0.631969,0.136095,-0.720369, 0.007661,0.031192,-0.999484,0.525128,0.119312,-0.740694, -0.09747,-0.388654,-0.916214,0.513237,0.088956,-0.739298, 0.227406,-0.473471,-0.850947,0.606658,0.072023,-0.723162, 0.227406,-0.473471,-0.850947,0.606658,0.072023,-0.723162, 0.338241,-0.103362,-0.935366,0.61744,0.099959,-0.724648, 0.007661,0.031192,-0.999484,0.525128,0.119312,-0.740694, 0.570751,-0.537595,-0.620672,0.684631,0.057942,-0.675096, 0.691984,-0.189259,-0.696663,0.694366,0.083832,-0.676509, 0.338241,-0.103362,-0.935366,0.61744,0.099959,-0.724648, 0.570751,-0.537595,-0.620672,0.684631,0.057942,-0.675096, 0.338241,-0.103362,-0.935366,0.61744,0.099959,-0.724648, 0.227406,-0.473471,-0.850947,0.606658,0.072023,-0.723162, -0.603758,0.432599,-0.669577,0.386176,0.201223,-0.673147, -0.649491,0.313781,-0.692606,0.355891,0.154793,-0.676509, -0.317034,0.182994,-0.930593,0.432817,0.138665,-0.724648, -0.603758,0.432599,-0.669577,0.386176,0.201223,-0.673147, -0.317034,0.182994,-0.930593,0.432817,0.138665,-0.724648, -0.304433,0.241938,-0.921296,0.458468,0.182068,-0.720369, -0.649491,0.313781,-0.692606,0.355891,0.154793,-0.676509, -0.720224,-0.15594,-0.675988,0.342054,0.121167,-0.675096, -0.440529,-0.24065,-0.864882,0.419921,0.106487,-0.723162, -0.440529,-0.24065,-0.864882,0.419921,0.106487,-0.723162, -0.317034,0.182994,-0.930593,0.432817,0.138665,-0.724648, -0.649491,0.313781,-0.692606,0.355891,0.154793,-0.676509, -0.09747,-0.388654,-0.916214,0.513237,0.088956,-0.739298, 0.007661,0.031192,-0.999484,0.525128,0.119312,-0.740694, -0.317034,0.182994,-0.930593,0.432817,0.138665,-0.724648, -0.09747,-0.388654,-0.916214,0.513237,0.088956,-0.739298, -0.317034,0.182994,-0.930593,0.432817,0.138665,-0.724648, -0.440529,-0.24065,-0.864882,0.419921,0.106487,-0.723162, 0.007661,0.031192,-0.999484,0.525128,0.119312,-0.740694, 0.013842,0.059444,-0.998136,0.545218,0.159081,-0.736109, -0.304433,0.241938,-0.921296,0.458468,0.182068,-0.720369, -0.304433,0.241938,-0.921296,0.458468,0.182068,-0.720369, -0.317034,0.182994,-0.930593,0.432817,0.138665,-0.724648, 0.007661,0.031192,-0.999484,0.525128,0.119312,-0.740694, -0.560128,-0.705465,-0.434253,0.349234,0.097654,-0.660875, -0.364711,-0.913648,-0.179534,0.369306,0.083596,-0.638667, -0.280571,-0.938896,-0.199385,0.423841,0.069426,-0.664625, -0.280571,-0.938896,-0.199385,0.423841,0.069426,-0.664625, -0.32072,-0.774629,-0.545059,0.421284,0.083716,-0.706, -0.560128,-0.705465,-0.434253,0.349234,0.097654,-0.660875, -0.168375,-0.954904,-0.244557,0.504703,0.05292,-0.677562, -0.143026,-0.80792,-0.571672,0.507243,0.067325,-0.7215, -0.32072,-0.774629,-0.545059,0.421284,0.083716,-0.706, -0.168375,-0.954904,-0.244557,0.504703,0.05292,-0.677562, -0.32072,-0.774629,-0.545059,0.421284,0.083716,-0.706, -0.280571,-0.938896,-0.199385,0.423841,0.069426,-0.664625, -0.09747,-0.388654,-0.916214,0.513237,0.088956,-0.739298, -0.440529,-0.24065,-0.864882,0.419921,0.106487,-0.723162, -0.32072,-0.774629,-0.545059,0.421284,0.083716,-0.706, -0.09747,-0.388654,-0.916214,0.513237,0.088956,-0.739298, -0.32072,-0.774629,-0.545059,0.421284,0.083716,-0.706, -0.143026,-0.80792,-0.571672,0.507243,0.067325,-0.7215, -0.440529,-0.24065,-0.864882,0.419921,0.106487,-0.723162, -0.720224,-0.15594,-0.675988,0.342054,0.121167,-0.675096, -0.560128,-0.705465,-0.434253,0.349234,0.097654,-0.660875, -0.560128,-0.705465,-0.434253,0.349234,0.097654,-0.660875, -0.32072,-0.774629,-0.545059,0.421284,0.083716,-0.706, -0.440529,-0.24065,-0.864882,0.419921,0.106487,-0.723162, 0.029695,-0.979483,-0.199329,0.642426,0.035438,-0.638667, 0.21248,-0.884802,-0.414701,0.666096,0.041783,-0.660875, 0.024087,-0.872904,-0.487296,0.593625,0.053327,-0.706, 0.029695,-0.979483,-0.199329,0.642426,0.035438,-0.638667, 0.024087,-0.872904,-0.487296,0.593625,0.053327,-0.706, -0.070895,-0.97954,-0.18835,0.586334,0.040774,-0.664625, 0.21248,-0.884802,-0.414701,0.666096,0.041783,-0.660875, 0.570751,-0.537595,-0.620672,0.684631,0.057942,-0.675096, 0.227406,-0.473471,-0.850947,0.606658,0.072023,-0.723162, 0.227406,-0.473471,-0.850947,0.606658,0.072023,-0.723162, 0.024087,-0.872904,-0.487296,0.593625,0.053327,-0.706, 0.21248,-0.884802,-0.414701,0.666096,0.041783,-0.660875, -0.09747,-0.388654,-0.916214,0.513237,0.088956,-0.739298, -0.143026,-0.80792,-0.571672,0.507243,0.067325,-0.7215, 0.024087,-0.872904,-0.487296,0.593625,0.053327,-0.706, -0.09747,-0.388654,-0.916214,0.513237,0.088956,-0.739298, 0.024087,-0.872904,-0.487296,0.593625,0.053327,-0.706, 0.227406,-0.473471,-0.850947,0.606658,0.072023,-0.723162, -0.168375,-0.954904,-0.244557,0.504703,0.05292,-0.677562, -0.070895,-0.97954,-0.18835,0.586334,0.040774,-0.664625, 0.024087,-0.872904,-0.487296,0.593625,0.053327,-0.706, -0.168375,-0.954904,-0.244557,0.504703,0.05292,-0.677562, 0.024087,-0.872904,-0.487296,0.593625,0.053327,-0.706, -0.143026,-0.80792,-0.571672,0.507243,0.067325,-0.7215, -0.603758,0.432599,-0.669577,0.386176,0.201223,-0.673147, -0.77971,0.541974,-0.313555,0.342801,0.212716,-0.594444, -0.828821,0.45488,-0.325791,0.309735,0.164469,-0.596277, -0.603758,0.432599,-0.669577,0.386176,0.201223,-0.673147, -0.828821,0.45488,-0.325791,0.309735,0.164469,-0.596277, -0.649491,0.313781,-0.692606,0.355891,0.154793,-0.676509, -0.77971,0.541974,-0.313555,0.342801,0.212716,-0.594444, -0.820475,0.571682,0,0.328343,0.216547,-0.5, -0.857982,0.51368,0,0.29435,0.167695,-0.5, -0.857982,0.51368,0,0.29435,0.167695,-0.5, -0.828821,0.45488,-0.325791,0.309735,0.164469,-0.596277, -0.77971,0.541974,-0.313555,0.342801,0.212716,-0.594444, -0.999967,0.008167,0,0.279139,0.132156,-0.5, -0.916555,-0.053852,-0.396267,0.294978,0.129544,-0.595444, -0.828821,0.45488,-0.325791,0.309735,0.164469,-0.596277, -0.999967,0.008167,0,0.279139,0.132156,-0.5, -0.828821,0.45488,-0.325791,0.309735,0.164469,-0.596277, -0.857982,0.51368,0,0.29435,0.167695,-0.5, -0.916555,-0.053852,-0.396267,0.294978,0.129544,-0.595444, -0.720224,-0.15594,-0.675988,0.342054,0.121167,-0.675096, -0.649491,0.313781,-0.692606,0.355891,0.154793,-0.676509, -0.649491,0.313781,-0.692606,0.355891,0.154793,-0.676509, -0.828821,0.45488,-0.325791,0.309735,0.164469,-0.596277, -0.916555,-0.053852,-0.396267,0.294978,0.129544,-0.595444, -0.603758,0.432599,0.669577,0.386176,0.201223,-0.326853, -0.649491,0.313782,0.692606,0.355891,0.154793,-0.323491, -0.828821,0.454881,0.325791,0.309735,0.164469,-0.403722, -0.603758,0.432599,0.669577,0.386176,0.201223,-0.326853, -0.828821,0.454881,0.325791,0.309735,0.164469,-0.403722, -0.77971,0.541974,0.313555,0.342801,0.212716,-0.405556, -0.649491,0.313782,0.692606,0.355891,0.154793,-0.323491, -0.720224,-0.155939,0.675988,0.342054,0.121167,-0.324904, -0.916555,-0.053852,0.396267,0.294978,0.129544,-0.404556, -0.916555,-0.053852,0.396267,0.294978,0.129544,-0.404556, -0.828821,0.454881,0.325791,0.309735,0.164469,-0.403722, -0.649491,0.313782,0.692606,0.355891,0.154793,-0.323491, -0.999967,0.008167,0,0.279139,0.132156,-0.5, -0.857982,0.51368,0,0.29435,0.167695,-0.5, -0.828821,0.454881,0.325791,0.309735,0.164469,-0.403722, -0.999967,0.008167,0,0.279139,0.132156,-0.5, -0.828821,0.454881,0.325791,0.309735,0.164469,-0.403722, -0.916555,-0.053852,0.396267,0.294978,0.129544,-0.404556, -0.857982,0.51368,0,0.29435,0.167695,-0.5, -0.820475,0.571682,0,0.328343,0.216547,-0.5, -0.77971,0.541974,0.313555,0.342801,0.212716,-0.405556, -0.77971,0.541974,0.313555,0.342801,0.212716,-0.405556, -0.828821,0.454881,0.325791,0.309735,0.164469,-0.403722, -0.857982,0.51368,0,0.29435,0.167695,-0.5, -0.364711,-0.913648,0.179534,0.369306,0.083596,-0.361333, -0.355137,-0.92942,0.100277,0.342964,0.083687,-0.4175, -0.672934,-0.714357,0.191973,0.304584,0.104293,-0.4125, -0.364711,-0.913648,0.179534,0.369306,0.083596,-0.361333, -0.672934,-0.714357,0.191973,0.304584,0.104293,-0.4125, -0.560128,-0.705466,0.434252,0.349234,0.097654,-0.339125, -0.409218,-0.912437,0,0.329838,0.083754,-0.5, -0.75175,-0.659448,0,0.289108,0.105788,-0.5, -0.672934,-0.714357,0.191973,0.304584,0.104293,-0.4125, -0.409218,-0.912437,0,0.329838,0.083754,-0.5, -0.672934,-0.714357,0.191973,0.304584,0.104293,-0.4125, -0.355137,-0.92942,0.100277,0.342964,0.083687,-0.4175, -0.999967,0.008167,0,0.279139,0.132156,-0.5, -0.916555,-0.053852,0.396267,0.294978,0.129544,-0.404556, -0.672934,-0.714357,0.191973,0.304584,0.104293,-0.4125, -0.999967,0.008167,0,0.279139,0.132156,-0.5, -0.672934,-0.714357,0.191973,0.304584,0.104293,-0.4125, -0.75175,-0.659448,0,0.289108,0.105788,-0.5, -0.916555,-0.053852,0.396267,0.294978,0.129544,-0.404556, -0.720224,-0.155939,0.675988,0.342054,0.121167,-0.324904, -0.560128,-0.705466,0.434252,0.349234,0.097654,-0.339125, -0.560128,-0.705466,0.434252,0.349234,0.097654,-0.339125, -0.672934,-0.714357,0.191973,0.304584,0.104293,-0.4125, -0.916555,-0.053852,0.396267,0.294978,0.129544,-0.404556, -0.364711,-0.913648,-0.179534,0.369306,0.083596,-0.638667, -0.560128,-0.705465,-0.434253,0.349234,0.097654,-0.660875, -0.672934,-0.714357,-0.191973,0.304584,0.104293,-0.5875, -0.364711,-0.913648,-0.179534,0.369306,0.083596,-0.638667, -0.672934,-0.714357,-0.191973,0.304584,0.104293,-0.5875, -0.355137,-0.92942,-0.100277,0.342964,0.083687,-0.5825, -0.560128,-0.705465,-0.434253,0.349234,0.097654,-0.660875, -0.720224,-0.15594,-0.675988,0.342054,0.121167,-0.675096, -0.916555,-0.053852,-0.396267,0.294978,0.129544,-0.595444, -0.916555,-0.053852,-0.396267,0.294978,0.129544,-0.595444, -0.672934,-0.714357,-0.191973,0.304584,0.104293,-0.5875, -0.560128,-0.705465,-0.434253,0.349234,0.097654,-0.660875, -0.999967,0.008167,0,0.279139,0.132156,-0.5, -0.75175,-0.659448,0,0.289108,0.105788,-0.5, -0.672934,-0.714357,-0.191973,0.304584,0.104293,-0.5875, -0.999967,0.008167,0,0.279139,0.132156,-0.5, -0.672934,-0.714357,-0.191973,0.304584,0.104293,-0.5875, -0.916555,-0.053852,-0.396267,0.294978,0.129544,-0.595444, -0.409218,-0.912437,0,0.329838,0.083754,-0.5, -0.355137,-0.92942,-0.100277,0.342964,0.083687,-0.5825, -0.672934,-0.714357,-0.191973,0.304584,0.104293,-0.5875, -0.409218,-0.912437,0,0.329838,0.083754,-0.5, -0.672934,-0.714357,-0.191973,0.304584,0.104293,-0.5875, -0.75175,-0.659448,0,0.289108,0.105788,-0.5, -0.603758,0.432599,0.669577,0.386176,0.201223,-0.326853, -0.304433,0.241938,0.921296,0.458468,0.182068,-0.279631, -0.317035,0.182994,0.930592,0.432817,0.138665,-0.275352, -0.603758,0.432599,0.669577,0.386176,0.201223,-0.326853, -0.317035,0.182994,0.930592,0.432817,0.138665,-0.275352, -0.649491,0.313782,0.692606,0.355891,0.154793,-0.323491, -0.304433,0.241938,0.921296,0.458468,0.182068,-0.279631, 0.013842,0.059444,0.998136,0.545218,0.159081,-0.263891, 0.007661,0.031192,0.999484,0.525128,0.119312,-0.259306, 0.007661,0.031192,0.999484,0.525128,0.119312,-0.259306, -0.317035,0.182994,0.930592,0.432817,0.138665,-0.275352, -0.304433,0.241938,0.921296,0.458468,0.182068,-0.279631, -0.09747,-0.388653,0.916214,0.513237,0.088956,-0.260702, -0.44053,-0.240649,0.864882,0.419921,0.106487,-0.276838, -0.317035,0.182994,0.930592,0.432817,0.138665,-0.275352, -0.09747,-0.388653,0.916214,0.513237,0.088956,-0.260702, -0.317035,0.182994,0.930592,0.432817,0.138665,-0.275352, 0.007661,0.031192,0.999484,0.525128,0.119312,-0.259306, -0.44053,-0.240649,0.864882,0.419921,0.106487,-0.276838, -0.720224,-0.155939,0.675988,0.342054,0.121167,-0.324904, -0.649491,0.313782,0.692606,0.355891,0.154793,-0.323491, -0.649491,0.313782,0.692606,0.355891,0.154793,-0.323491, -0.317035,0.182994,0.930592,0.432817,0.138665,-0.275352, -0.44053,-0.240649,0.864882,0.419921,0.106487,-0.276838, 0.344586,-0.098997,0.93352,0.631969,0.136095,-0.279631, 0.677454,-0.2664,0.685629,0.704261,0.116939,-0.326853, 0.691984,-0.189259,0.696663,0.694366,0.083832,-0.323491, 0.691984,-0.189259,0.696663,0.694366,0.083832,-0.323491, 0.338242,-0.103362,0.935366,0.61744,0.099959,-0.275352, 0.344586,-0.098997,0.93352,0.631969,0.136095,-0.279631, 0.570752,-0.537595,0.620673,0.684631,0.057942,-0.324904, 0.227406,-0.473471,0.850948,0.606658,0.072023,-0.276838, 0.338242,-0.103362,0.935366,0.61744,0.099959,-0.275352, 0.570752,-0.537595,0.620673,0.684631,0.057942,-0.324904, 0.338242,-0.103362,0.935366,0.61744,0.099959,-0.275352, 0.691984,-0.189259,0.696663,0.694366,0.083832,-0.323491, 0.227406,-0.473471,0.850948,0.606658,0.072023,-0.276838, -0.09747,-0.388653,0.916214,0.513237,0.088956,-0.260702, 0.007661,0.031192,0.999484,0.525128,0.119312,-0.259306, 0.007661,0.031192,0.999484,0.525128,0.119312,-0.259306, 0.338242,-0.103362,0.935366,0.61744,0.099959,-0.275352, 0.227406,-0.473471,0.850948,0.606658,0.072023,-0.276838, 0.013842,0.059444,0.998136,0.545218,0.159081,-0.263891, 0.344586,-0.098997,0.93352,0.631969,0.136095,-0.279631, 0.338242,-0.103362,0.935366,0.61744,0.099959,-0.275352, 0.013842,0.059444,0.998136,0.545218,0.159081,-0.263891, 0.338242,-0.103362,0.935366,0.61744,0.099959,-0.275352, 0.007661,0.031192,0.999484,0.525128,0.119312,-0.259306, 0.029695,-0.979483,0.199329,0.642426,0.035438,-0.361333, -0.070895,-0.97954,0.188349,0.586334,0.040774,-0.335375, 0.024087,-0.872904,0.487296,0.593625,0.053327,-0.294, 0.029695,-0.979483,0.199329,0.642426,0.035438,-0.361333, 0.024087,-0.872904,0.487296,0.593625,0.053327,-0.294, 0.21248,-0.884802,0.414702,0.666096,0.041783,-0.339125, -0.168376,-0.954904,0.244557,0.504703,0.05292,-0.322437, -0.143026,-0.80792,0.571672,0.507243,0.067325,-0.2785, 0.024087,-0.872904,0.487296,0.593625,0.053327,-0.294, -0.168376,-0.954904,0.244557,0.504703,0.05292,-0.322437, 0.024087,-0.872904,0.487296,0.593625,0.053327,-0.294, -0.070895,-0.97954,0.188349,0.586334,0.040774,-0.335375, -0.09747,-0.388653,0.916214,0.513237,0.088956,-0.260702, 0.227406,-0.473471,0.850948,0.606658,0.072023,-0.276838, 0.024087,-0.872904,0.487296,0.593625,0.053327,-0.294, -0.09747,-0.388653,0.916214,0.513237,0.088956,-0.260702, 0.024087,-0.872904,0.487296,0.593625,0.053327,-0.294, -0.143026,-0.80792,0.571672,0.507243,0.067325,-0.2785, 0.227406,-0.473471,0.850948,0.606658,0.072023,-0.276838, 0.570752,-0.537595,0.620673,0.684631,0.057942,-0.324904, 0.21248,-0.884802,0.414702,0.666096,0.041783,-0.339125, 0.21248,-0.884802,0.414702,0.666096,0.041783,-0.339125, 0.024087,-0.872904,0.487296,0.593625,0.053327,-0.294, 0.227406,-0.473471,0.850948,0.606658,0.072023,-0.276838, -0.280571,-0.938896,0.199385,0.423841,0.069426,-0.335375, -0.364711,-0.913648,0.179534,0.369306,0.083596,-0.361333, -0.560128,-0.705466,0.434252,0.349234,0.097654,-0.339125, -0.560128,-0.705466,0.434252,0.349234,0.097654,-0.339125, -0.32072,-0.774629,0.545059,0.421284,0.083716,-0.294, -0.280571,-0.938896,0.199385,0.423841,0.069426,-0.335375, -0.560128,-0.705466,0.434252,0.349234,0.097654,-0.339125, -0.720224,-0.155939,0.675988,0.342054,0.121167,-0.324904, -0.44053,-0.240649,0.864882,0.419921,0.106487,-0.276838, -0.44053,-0.240649,0.864882,0.419921,0.106487,-0.276838, -0.32072,-0.774629,0.545059,0.421284,0.083716,-0.294, -0.560128,-0.705466,0.434252,0.349234,0.097654,-0.339125, -0.09747,-0.388653,0.916214,0.513237,0.088956,-0.260702, -0.143026,-0.80792,0.571672,0.507243,0.067325,-0.2785, -0.32072,-0.774629,0.545059,0.421284,0.083716,-0.294, -0.09747,-0.388653,0.916214,0.513237,0.088956,-0.260702, -0.32072,-0.774629,0.545059,0.421284,0.083716,-0.294, -0.44053,-0.240649,0.864882,0.419921,0.106487,-0.276838, -0.168376,-0.954904,0.244557,0.504703,0.05292,-0.322437, -0.280571,-0.938896,0.199385,0.423841,0.069426,-0.335375, -0.32072,-0.774629,0.545059,0.421284,0.083716,-0.294, -0.168376,-0.954904,0.244557,0.504703,0.05292,-0.322437, -0.32072,-0.774629,0.545059,0.421284,0.083716,-0.294, -0.143026,-0.80792,0.571672,0.507243,0.067325,-0.2785, 0.029695,-0.979483,-0.199329,0.642426,0.035438,-0.638667, -0.070895,-0.97954,-0.18835,0.586334,0.040774,-0.664625, -0.094013,-0.992373,-0.079739,0.592781,0.031264,-0.5905, 0.029695,-0.979483,-0.199329,0.642426,0.035438,-0.638667, -0.094013,-0.992373,-0.079739,0.592781,0.031264,-0.5905, 0.015839,-0.994833,-0.100277,0.667212,0.026513,-0.5825, -0.070895,-0.97954,-0.18835,0.586334,0.040774,-0.664625, -0.168375,-0.954904,-0.244557,0.504703,0.05292,-0.677562, -0.17302,-0.981247,-0.08496,0.503173,0.044243,-0.59775, -0.17302,-0.981247,-0.08496,0.503173,0.044243,-0.59775, -0.094013,-0.992373,-0.079739,0.592781,0.031264,-0.5905, -0.070895,-0.97954,-0.18835,0.586334,0.040774,-0.664625, -0.173648,-0.984808,0,0.502661,0.041337,-0.5, -0.089351,-0.996,0,0.599438,0.027269,-0.5, -0.094013,-0.992373,-0.079739,0.592781,0.031264,-0.5905, -0.173648,-0.984808,0,0.502661,0.041337,-0.5, -0.094013,-0.992373,-0.079739,0.592781,0.031264,-0.5905, -0.17302,-0.981247,-0.08496,0.503173,0.044243,-0.59775, -0.089351,-0.996,0,0.599438,0.027269,-0.5, 0.072467,-0.997371,0,0.679568,0.022087,-0.5, 0.015839,-0.994833,-0.100277,0.667212,0.026513,-0.5825, 0.015839,-0.994833,-0.100277,0.667212,0.026513,-0.5825, -0.094013,-0.992373,-0.079739,0.592781,0.031264,-0.5905, -0.089351,-0.996,0,0.599438,0.027269,-0.5, -0.364711,-0.913648,-0.179534,0.369306,0.083596,-0.638667, -0.355137,-0.92942,-0.100277,0.342964,0.083687,-0.5825, -0.251068,-0.964679,-0.079739,0.414531,0.062694,-0.5905, -0.364711,-0.913648,-0.179534,0.369306,0.083596,-0.638667, -0.251068,-0.964679,-0.079739,0.414531,0.062694,-0.5905, -0.280571,-0.938896,-0.199385,0.423841,0.069426,-0.664625, -0.355137,-0.92942,-0.100277,0.342964,0.083687,-0.5825, -0.409218,-0.912437,0,0.329838,0.083754,-0.5, -0.25669,-0.966494,0,0.406908,0.061217,-0.5, -0.25669,-0.966494,0,0.406908,0.061217,-0.5, -0.251068,-0.964679,-0.079739,0.414531,0.062694,-0.5905, -0.355137,-0.92942,-0.100277,0.342964,0.083687,-0.5825, -0.173648,-0.984808,0,0.502661,0.041337,-0.5, -0.17302,-0.981247,-0.08496,0.503173,0.044243,-0.59775, -0.251068,-0.964679,-0.079739,0.414531,0.062694,-0.5905, -0.173648,-0.984808,0,0.502661,0.041337,-0.5, -0.251068,-0.964679,-0.079739,0.414531,0.062694,-0.5905, -0.25669,-0.966494,0,0.406908,0.061217,-0.5, -0.17302,-0.981247,-0.08496,0.503173,0.044243,-0.59775, -0.168375,-0.954904,-0.244557,0.504703,0.05292,-0.677562, -0.280571,-0.938896,-0.199385,0.423841,0.069426,-0.664625, -0.280571,-0.938896,-0.199385,0.423841,0.069426,-0.664625, -0.251068,-0.964679,-0.079739,0.414531,0.062694,-0.5905, -0.17302,-0.981247,-0.08496,0.503173,0.044243,-0.59775, -0.364711,-0.913648,0.179534,0.369306,0.083596,-0.361333, -0.280571,-0.938896,0.199385,0.423841,0.069426,-0.335375, -0.251068,-0.964679,0.079739,0.414531,0.062694,-0.4095, -0.364711,-0.913648,0.179534,0.369306,0.083596,-0.361333, -0.251068,-0.964679,0.079739,0.414531,0.062694,-0.4095, -0.355137,-0.92942,0.100277,0.342964,0.083687,-0.4175, -0.280571,-0.938896,0.199385,0.423841,0.069426,-0.335375, -0.168376,-0.954904,0.244557,0.504703,0.05292,-0.322437, -0.17302,-0.981247,0.08496,0.503173,0.044243,-0.40225, -0.17302,-0.981247,0.08496,0.503173,0.044243,-0.40225, -0.251068,-0.964679,0.079739,0.414531,0.062694,-0.4095, -0.280571,-0.938896,0.199385,0.423841,0.069426,-0.335375, -0.173648,-0.984808,0,0.502661,0.041337,-0.5, -0.25669,-0.966494,0,0.406908,0.061217,-0.5, -0.251068,-0.964679,0.079739,0.414531,0.062694,-0.4095, -0.173648,-0.984808,0,0.502661,0.041337,-0.5, -0.251068,-0.964679,0.079739,0.414531,0.062694,-0.4095, -0.17302,-0.981247,0.08496,0.503173,0.044243,-0.40225, -0.25669,-0.966494,0,0.406908,0.061217,-0.5, -0.409218,-0.912437,0,0.329838,0.083754,-0.5, -0.355137,-0.92942,0.100277,0.342964,0.083687,-0.4175, -0.355137,-0.92942,0.100277,0.342964,0.083687,-0.4175, -0.251068,-0.964679,0.079739,0.414531,0.062694,-0.4095, -0.25669,-0.966494,0,0.406908,0.061217,-0.5, 0.029695,-0.979483,0.199329,0.642426,0.035438,-0.361333, 0.015839,-0.994833,0.100277,0.667212,0.026513,-0.4175, -0.094013,-0.992373,0.079739,0.592781,0.031264,-0.4095, 0.029695,-0.979483,0.199329,0.642426,0.035438,-0.361333, -0.094013,-0.992373,0.079739,0.592781,0.031264,-0.4095, -0.070895,-0.97954,0.188349,0.586334,0.040774,-0.335375, 0.015839,-0.994833,0.100277,0.667212,0.026513,-0.4175, 0.072467,-0.997371,0,0.679568,0.022087,-0.5, -0.089351,-0.996,0,0.599438,0.027269,-0.5, -0.089351,-0.996,0,0.599438,0.027269,-0.5, -0.094013,-0.992373,0.079739,0.592781,0.031264,-0.4095, 0.015839,-0.994833,0.100277,0.667212,0.026513,-0.4175, -0.173648,-0.984808,0,0.502661,0.041337,-0.5, -0.17302,-0.981247,0.08496,0.503173,0.044243,-0.40225, -0.094013,-0.992373,0.079739,0.592781,0.031264,-0.4095, -0.173648,-0.984808,0,0.502661,0.041337,-0.5, -0.094013,-0.992373,0.079739,0.592781,0.031264,-0.4095, -0.089351,-0.996,0,0.599438,0.027269,-0.5, -0.17302,-0.981247,0.08496,0.503173,0.044243,-0.40225, -0.168376,-0.954904,0.244557,0.504703,0.05292,-0.322437, -0.070895,-0.97954,0.188349,0.586334,0.040774,-0.335375, -0.070895,-0.97954,0.188349,0.586334,0.040774,-0.335375, -0.094013,-0.992373,0.079739,0.592781,0.031264,-0.4095, -0.17302,-0.981247,0.08496,0.503173,0.044243,-0.40225, }; static const struct gllist frame={GL_N3F_V3F,GL_TRIANGLES,1728,data,NULL}; const struct gllist *s1_3=&frame; xscreensaver-5.36/hacks/glx/s1_4.c000644 000767 000024 00000274755 12701612217 016756 0ustar00jwzstaff000000 000000 #include "gllist.h" static const float data[]={ -0.632405,-0.365743,-0.682858,1.262105,0.039911,-0.672877, -0.695773,-0.304145,-0.650689,1.235562,0.083949,-0.664066, -0.858311,-0.411605,-0.306404,1.208797,0.050229,-0.589491, -0.858311,-0.411605,-0.306404,1.208797,0.050229,-0.589491, -0.802735,-0.496752,-0.329932,1.231827,0.004686,-0.594296, -0.632405,-0.365743,-0.682858,1.262105,0.039911,-0.672877, -0.900624,-0.4346,0,1.199875,0.038989,-0.5, -0.829744,-0.558144,0,1.221734,-0.007055,-0.5, -0.802735,-0.496752,-0.329932,1.231827,0.004686,-0.594296, -0.900624,-0.4346,0,1.199875,0.038989,-0.5, -0.802735,-0.496752,-0.329932,1.231827,0.004686,-0.594296, -0.858311,-0.411605,-0.306404,1.208797,0.050229,-0.589491, -0.829744,-0.558144,0,1.221734,-0.007055,-0.5, -0.372431,-0.92806,0,1.243033,-0.034453,-0.5, -0.429143,-0.839931,-0.332192,1.253444,-0.022303,-0.594949, -0.429143,-0.839931,-0.332192,1.253444,-0.022303,-0.594949, -0.802735,-0.496752,-0.329932,1.231827,0.004686,-0.594296, -0.829744,-0.558144,0,1.221734,-0.007055,-0.5, -0.342337,-0.675989,-0.652567,1.284897,0.013483,-0.674188, -0.632405,-0.365743,-0.682858,1.262105,0.039911,-0.672877, -0.802735,-0.496752,-0.329932,1.231827,0.004686,-0.594296, -0.342337,-0.675989,-0.652567,1.284897,0.013483,-0.674188, -0.802735,-0.496752,-0.329932,1.231827,0.004686,-0.594296, -0.429143,-0.839931,-0.332192,1.253444,-0.022303,-0.594949, -0.858311,-0.411604,0.306404,1.208797,0.050229,-0.410509, -0.695773,-0.304144,0.650689,1.235562,0.083949,-0.335934, -0.632405,-0.365743,0.682858,1.262105,0.039911,-0.327123, -0.632405,-0.365743,0.682858,1.262105,0.039911,-0.327123, -0.802735,-0.496752,0.329932,1.231827,0.004686,-0.405704, -0.858311,-0.411604,0.306404,1.208797,0.050229,-0.410509, -0.342337,-0.675989,0.652567,1.284897,0.013483,-0.325812, -0.429143,-0.839932,0.332191,1.253444,-0.022303,-0.405051, -0.802735,-0.496752,0.329932,1.231827,0.004686,-0.405704, -0.342337,-0.675989,0.652567,1.284897,0.013483,-0.325812, -0.802735,-0.496752,0.329932,1.231827,0.004686,-0.405704, -0.632405,-0.365743,0.682858,1.262105,0.039911,-0.327123, -0.429143,-0.839932,0.332191,1.253444,-0.022303,-0.405051, -0.372431,-0.92806,0,1.243033,-0.034453,-0.5, -0.829744,-0.558144,0,1.221734,-0.007055,-0.5, -0.829744,-0.558144,0,1.221734,-0.007055,-0.5, -0.802735,-0.496752,0.329932,1.231827,0.004686,-0.405704, -0.429143,-0.839932,0.332191,1.253444,-0.022303,-0.405051, -0.900624,-0.4346,0,1.199875,0.038989,-0.5, -0.858311,-0.411604,0.306404,1.208797,0.050229,-0.410509, -0.802735,-0.496752,0.329932,1.231827,0.004686,-0.405704, -0.900624,-0.4346,0,1.199875,0.038989,-0.5, -0.802735,-0.496752,0.329932,1.231827,0.004686,-0.405704, -0.829744,-0.558144,0,1.221734,-0.007055,-0.5, 0.581551,-0.793452,0.179534,1.331736,0.017726,-0.361333, 0.6,-0.793691,0.100277,1.3177,-0.004566,-0.4175, 0.266434,-0.94535,0.187955,1.279887,-0.026194,-0.4125, 0.581551,-0.793452,0.179534,1.331736,0.017726,-0.361333, 0.266434,-0.94535,0.187955,1.279887,-0.026194,-0.4125, 0.307416,-0.846879,0.433925,1.309178,0.008154,-0.339125, 0.556938,-0.830554,0,1.310688,-0.015661,-0.5, 0.184945,-0.982749,0,1.270418,-0.038526,-0.5, 0.266434,-0.94535,0.187955,1.279887,-0.026194,-0.4125, 0.556938,-0.830554,0,1.310688,-0.015661,-0.5, 0.266434,-0.94535,0.187955,1.279887,-0.026194,-0.4125, 0.6,-0.793691,0.100277,1.3177,-0.004566,-0.4175, -0.372431,-0.92806,0,1.243033,-0.034453,-0.5, -0.429143,-0.839932,0.332191,1.253444,-0.022303,-0.405051, 0.266434,-0.94535,0.187955,1.279887,-0.026194,-0.4125, -0.372431,-0.92806,0,1.243033,-0.034453,-0.5, 0.266434,-0.94535,0.187955,1.279887,-0.026194,-0.4125, 0.184945,-0.982749,0,1.270418,-0.038526,-0.5, -0.429143,-0.839932,0.332191,1.253444,-0.022303,-0.405051, -0.342337,-0.675989,0.652567,1.284897,0.013483,-0.325812, 0.307416,-0.846879,0.433925,1.309178,0.008154,-0.339125, 0.307416,-0.846879,0.433925,1.309178,0.008154,-0.339125, 0.266434,-0.94535,0.187955,1.279887,-0.026194,-0.4125, -0.429143,-0.839932,0.332191,1.253444,-0.022303,-0.405051, 0.581551,-0.793452,-0.179534,1.331736,0.017726,-0.638667, 0.307416,-0.846879,-0.433925,1.309178,0.008154,-0.660875, 0.266434,-0.94535,-0.187955,1.279887,-0.026194,-0.5875, 0.581551,-0.793452,-0.179534,1.331736,0.017726,-0.638667, 0.266434,-0.94535,-0.187955,1.279887,-0.026194,-0.5875, 0.6,-0.793691,-0.100277,1.3177,-0.004566,-0.5825, 0.307416,-0.846879,-0.433925,1.309178,0.008154,-0.660875, -0.342337,-0.675989,-0.652567,1.284897,0.013483,-0.674188, -0.429143,-0.839931,-0.332192,1.253444,-0.022303,-0.594949, -0.429143,-0.839931,-0.332192,1.253444,-0.022303,-0.594949, 0.266434,-0.94535,-0.187955,1.279887,-0.026194,-0.5875, 0.307416,-0.846879,-0.433925,1.309178,0.008154,-0.660875, -0.372431,-0.92806,0,1.243033,-0.034453,-0.5, 0.184945,-0.982749,0,1.270418,-0.038526,-0.5, 0.266434,-0.94535,-0.187955,1.279887,-0.026194,-0.5875, -0.372431,-0.92806,0,1.243033,-0.034453,-0.5, 0.266434,-0.94535,-0.187955,1.279887,-0.026194,-0.5875, -0.429143,-0.839931,-0.332192,1.253444,-0.022303,-0.594949, 0.556938,-0.830554,0,1.310688,-0.015661,-0.5, 0.6,-0.793691,-0.100277,1.3177,-0.004566,-0.5825, 0.266434,-0.94535,-0.187955,1.279887,-0.026194,-0.5875, 0.556938,-0.830554,0,1.310688,-0.015661,-0.5, 0.266434,-0.94535,-0.187955,1.279887,-0.026194,-0.5875, 0.184945,-0.982749,0,1.270418,-0.038526,-0.5, -0.695773,-0.304144,0.650689,1.235562,0.083949,-0.335934, -0.420703,-0.10775,0.900777,1.28017,0.14015,-0.291188, -0.363086,-0.142915,0.92073,1.312568,0.09862,-0.279975, -0.695773,-0.304144,0.650689,1.235562,0.083949,-0.335934, -0.363086,-0.142915,0.92073,1.312568,0.09862,-0.279975, -0.632405,-0.365743,0.682858,1.262105,0.039911,-0.327123, -0.420703,-0.10775,0.900777,1.28017,0.14015,-0.291188, -0.152737,0.118235,0.981169,1.3337,0.207591,-0.276273, -0.10731,0.091019,0.990051,1.373124,0.16907,-0.264259, -0.10731,0.091019,0.990051,1.373124,0.16907,-0.264259, -0.363086,-0.142915,0.92073,1.312568,0.09862,-0.279975, -0.420703,-0.10775,0.900777,1.28017,0.14015,-0.291188, 0.221822,-0.232839,0.94688,1.400739,0.142695,-0.26194, -0.050406,-0.482634,0.874371,1.337615,0.072243,-0.277994, -0.363086,-0.142915,0.92073,1.312568,0.09862,-0.279975, 0.221822,-0.232839,0.94688,1.400739,0.142695,-0.26194, -0.363086,-0.142915,0.92073,1.312568,0.09862,-0.279975, -0.10731,0.091019,0.990051,1.373124,0.16907,-0.264259, -0.050406,-0.482634,0.874371,1.337615,0.072243,-0.277994, -0.342337,-0.675989,0.652567,1.284897,0.013483,-0.325812, -0.632405,-0.365743,0.682858,1.262105,0.039911,-0.327123, -0.632405,-0.365743,0.682858,1.262105,0.039911,-0.327123, -0.363086,-0.142915,0.92073,1.312568,0.09862,-0.279975, -0.050406,-0.482634,0.874371,1.337615,0.072243,-0.277994, 0.311074,0.63183,0.709947,1.431839,0.331232,-0.335934, 0.365915,0.616651,0.697028,1.484144,0.298229,-0.327123, 0.113526,0.358822,0.926476,1.433681,0.239521,-0.279975, 0.311074,0.63183,0.709947,1.431839,0.331232,-0.335934, 0.113526,0.358822,0.926476,1.433681,0.239521,-0.279975, 0.074097,0.34389,0.936082,1.38723,0.275032,-0.291188, 0.365915,0.616651,0.697028,1.484144,0.298229,-0.327123, 0.704743,0.348932,0.617724,1.515677,0.27272,-0.325812, 0.422175,0.108161,0.900039,1.463411,0.213552,-0.277994, 0.422175,0.108161,0.900039,1.463411,0.213552,-0.277994, 0.113526,0.358822,0.926476,1.433681,0.239521,-0.279975, 0.365915,0.616651,0.697028,1.484144,0.298229,-0.327123, 0.422175,0.108161,0.900039,1.463411,0.213552,-0.277994, 0.221822,-0.232839,0.94688,1.400739,0.142695,-0.26194, -0.10731,0.091019,0.990051,1.373124,0.16907,-0.264259, -0.10731,0.091019,0.990051,1.373124,0.16907,-0.264259, 0.113526,0.358822,0.926476,1.433681,0.239521,-0.279975, 0.422175,0.108161,0.900039,1.463411,0.213552,-0.277994, -0.152737,0.118235,0.981169,1.3337,0.207591,-0.276273, 0.074097,0.34389,0.936082,1.38723,0.275032,-0.291188, 0.113526,0.358822,0.926476,1.433681,0.239521,-0.279975, -0.152737,0.118235,0.981169,1.3337,0.207591,-0.276273, 0.113526,0.358822,0.926476,1.433681,0.239521,-0.279975, -0.10731,0.091019,0.990051,1.373124,0.16907,-0.264259, 0.846384,-0.493864,0.199328,1.517309,0.223825,-0.361333, 0.786785,-0.580419,0.209959,1.483059,0.179084,-0.335375, 0.736468,-0.384081,0.556864,1.476277,0.191919,-0.294, 0.846384,-0.493864,0.199328,1.517309,0.223825,-0.361333, 0.736468,-0.384081,0.556864,1.476277,0.191919,-0.294, 0.85656,-0.215911,0.468709,1.524471,0.247261,-0.339125, 0.786785,-0.580419,0.209959,1.483059,0.179084,-0.335375, 0.725947,-0.653645,0.21389,1.4295,0.116294,-0.322437, 0.64097,-0.57721,0.50595,1.418631,0.126081,-0.2785, 0.64097,-0.57721,0.50595,1.418631,0.126081,-0.2785, 0.736468,-0.384081,0.556864,1.476277,0.191919,-0.294, 0.786785,-0.580419,0.209959,1.483059,0.179084,-0.335375, 0.221822,-0.232839,0.94688,1.400739,0.142695,-0.26194, 0.422175,0.108161,0.900039,1.463411,0.213552,-0.277994, 0.736468,-0.384081,0.556864,1.476277,0.191919,-0.294, 0.221822,-0.232839,0.94688,1.400739,0.142695,-0.26194, 0.736468,-0.384081,0.556864,1.476277,0.191919,-0.294, 0.64097,-0.57721,0.50595,1.418631,0.126081,-0.2785, 0.422175,0.108161,0.900039,1.463411,0.213552,-0.277994, 0.704743,0.348932,0.617724,1.515677,0.27272,-0.325812, 0.85656,-0.215911,0.468709,1.524471,0.247261,-0.339125, 0.85656,-0.215911,0.468709,1.524471,0.247261,-0.339125, 0.736468,-0.384081,0.556864,1.476277,0.191919,-0.294, 0.422175,0.108161,0.900039,1.463411,0.213552,-0.277994, 0.649588,-0.728866,0.216309,1.372652,0.056465,-0.335375, 0.581551,-0.793452,0.179534,1.331736,0.017726,-0.361333, 0.307416,-0.846879,0.433925,1.309178,0.008154,-0.339125, 0.307416,-0.846879,0.433925,1.309178,0.008154,-0.339125, 0.432476,-0.665439,0.608404,1.359179,0.061869,-0.294, 0.649588,-0.728866,0.216309,1.372652,0.056465,-0.335375, 0.307416,-0.846879,0.433925,1.309178,0.008154,-0.339125, -0.342337,-0.675989,0.652567,1.284897,0.013483,-0.325812, -0.050406,-0.482634,0.874371,1.337615,0.072243,-0.277994, -0.050406,-0.482634,0.874371,1.337615,0.072243,-0.277994, 0.432476,-0.665439,0.608404,1.359179,0.061869,-0.294, 0.307416,-0.846879,0.433925,1.309178,0.008154,-0.339125, 0.221822,-0.232839,0.94688,1.400739,0.142695,-0.26194, 0.64097,-0.57721,0.50595,1.418631,0.126081,-0.2785, 0.432476,-0.665439,0.608404,1.359179,0.061869,-0.294, 0.221822,-0.232839,0.94688,1.400739,0.142695,-0.26194, 0.432476,-0.665439,0.608404,1.359179,0.061869,-0.294, -0.050406,-0.482634,0.874371,1.337615,0.072243,-0.277994, 0.64097,-0.57721,0.50595,1.418631,0.126081,-0.2785, 0.725947,-0.653645,0.21389,1.4295,0.116294,-0.322437, 0.649588,-0.728866,0.216309,1.372652,0.056465,-0.335375, 0.649588,-0.728866,0.216309,1.372652,0.056465,-0.335375, 0.432476,-0.665439,0.608404,1.359179,0.061869,-0.294, 0.64097,-0.57721,0.50595,1.418631,0.126081,-0.2785, 0.365915,0.616651,0.697028,1.484144,0.298229,-0.327123, 0.311074,0.63183,0.709947,1.431839,0.331232,-0.335934, 0.460195,0.823869,0.330849,1.458604,0.364953,-0.410509, 0.460195,0.823869,0.330849,1.458604,0.364953,-0.410509, 0.507038,0.792213,0.339576,1.514422,0.333454,-0.405704, 0.365915,0.616651,0.697028,1.484144,0.298229,-0.327123, 0.489941,0.871755,0,1.467526,0.376193,-0.5, 0.561935,0.827181,0,1.524515,0.345196,-0.5, 0.507038,0.792213,0.339576,1.514422,0.333454,-0.405704, 0.489941,0.871755,0,1.467526,0.376193,-0.5, 0.507038,0.792213,0.339576,1.514422,0.333454,-0.405704, 0.460195,0.823869,0.330849,1.458604,0.364953,-0.410509, 0.561935,0.827181,0,1.524515,0.345196,-0.5, 0.887347,0.461103,0,1.558444,0.319842,-0.5, 0.765648,0.567983,0.301958,1.547582,0.308099,-0.405051, 0.765648,0.567983,0.301958,1.547582,0.308099,-0.405051, 0.507038,0.792213,0.339576,1.514422,0.333454,-0.405704, 0.561935,0.827181,0,1.524515,0.345196,-0.5, 0.704743,0.348932,0.617724,1.515677,0.27272,-0.325812, 0.365915,0.616651,0.697028,1.484144,0.298229,-0.327123, 0.507038,0.792213,0.339576,1.514422,0.333454,-0.405704, 0.704743,0.348932,0.617724,1.515677,0.27272,-0.325812, 0.507038,0.792213,0.339576,1.514422,0.333454,-0.405704, 0.765648,0.567983,0.301958,1.547582,0.308099,-0.405051, 0.460195,0.823869,-0.330849,1.458604,0.364953,-0.589491, 0.311074,0.63183,-0.709947,1.431839,0.331232,-0.664066, 0.365915,0.616651,-0.697028,1.484144,0.298229,-0.672877, 0.365915,0.616651,-0.697028,1.484144,0.298229,-0.672877, 0.507038,0.792213,-0.339576,1.514422,0.333454,-0.594296, 0.460195,0.823869,-0.330849,1.458604,0.364953,-0.589491, 0.704744,0.348932,-0.617724,1.515677,0.27272,-0.674188, 0.765648,0.567983,-0.301958,1.547582,0.308099,-0.594949, 0.507038,0.792213,-0.339576,1.514422,0.333454,-0.594296, 0.704744,0.348932,-0.617724,1.515677,0.27272,-0.674188, 0.507038,0.792213,-0.339576,1.514422,0.333454,-0.594296, 0.365915,0.616651,-0.697028,1.484144,0.298229,-0.672877, 0.765648,0.567983,-0.301958,1.547582,0.308099,-0.594949, 0.887347,0.461103,0,1.558444,0.319842,-0.5, 0.561935,0.827181,0,1.524515,0.345196,-0.5, 0.561935,0.827181,0,1.524515,0.345196,-0.5, 0.507038,0.792213,-0.339576,1.514422,0.333454,-0.594296, 0.765648,0.567983,-0.301958,1.547582,0.308099,-0.594949, 0.489941,0.871755,0,1.467526,0.376193,-0.5, 0.460195,0.823869,-0.330849,1.458604,0.364953,-0.589491, 0.507038,0.792213,-0.339576,1.514422,0.333454,-0.594296, 0.489941,0.871755,0,1.467526,0.376193,-0.5, 0.507038,0.792213,-0.339576,1.514422,0.333454,-0.594296, 0.561935,0.827181,0,1.524515,0.345196,-0.5, 0.846384,-0.493864,-0.199329,1.517309,0.223825,-0.638667, 0.85206,-0.513749,-0.100278,1.538011,0.240115,-0.5825, 0.967592,-0.122072,-0.221053,1.555568,0.279982,-0.5875, 0.846384,-0.493864,-0.199329,1.517309,0.223825,-0.638667, 0.967592,-0.122072,-0.221053,1.555568,0.279982,-0.5875, 0.85656,-0.215911,-0.468708,1.524471,0.247261,-0.660875, 0.88422,-0.467071,0,1.548313,0.248248,-0.5, 0.997731,-0.067332,0,1.566843,0.290687,-0.5, 0.967592,-0.122072,-0.221053,1.555568,0.279982,-0.5875, 0.88422,-0.467071,0,1.548313,0.248248,-0.5, 0.967592,-0.122072,-0.221053,1.555568,0.279982,-0.5875, 0.85206,-0.513749,-0.100278,1.538011,0.240115,-0.5825, 0.887347,0.461103,0,1.558444,0.319842,-0.5, 0.765648,0.567983,-0.301958,1.547582,0.308099,-0.594949, 0.967592,-0.122072,-0.221053,1.555568,0.279982,-0.5875, 0.887347,0.461103,0,1.558444,0.319842,-0.5, 0.967592,-0.122072,-0.221053,1.555568,0.279982,-0.5875, 0.997731,-0.067332,0,1.566843,0.290687,-0.5, 0.704744,0.348932,-0.617724,1.515677,0.27272,-0.674188, 0.85656,-0.215911,-0.468708,1.524471,0.247261,-0.660875, 0.967592,-0.122072,-0.221053,1.555568,0.279982,-0.5875, 0.704744,0.348932,-0.617724,1.515677,0.27272,-0.674188, 0.967592,-0.122072,-0.221053,1.555568,0.279982,-0.5875, 0.765648,0.567983,-0.301958,1.547582,0.308099,-0.594949, 0.846384,-0.493864,0.199328,1.517309,0.223825,-0.361333, 0.85656,-0.215911,0.468709,1.524471,0.247261,-0.339125, 0.967592,-0.122072,0.221053,1.555568,0.279982,-0.4125, 0.846384,-0.493864,0.199328,1.517309,0.223825,-0.361333, 0.967592,-0.122072,0.221053,1.555568,0.279982,-0.4125, 0.85206,-0.513749,0.100278,1.538011,0.240115,-0.4175, 0.704743,0.348932,0.617724,1.515677,0.27272,-0.325812, 0.765648,0.567983,0.301958,1.547582,0.308099,-0.405051, 0.967592,-0.122072,0.221053,1.555568,0.279982,-0.4125, 0.704743,0.348932,0.617724,1.515677,0.27272,-0.325812, 0.967592,-0.122072,0.221053,1.555568,0.279982,-0.4125, 0.85656,-0.215911,0.468709,1.524471,0.247261,-0.339125, 0.887347,0.461103,0,1.558444,0.319842,-0.5, 0.997731,-0.067332,0,1.566843,0.290687,-0.5, 0.967592,-0.122072,0.221053,1.555568,0.279982,-0.4125, 0.887347,0.461103,0,1.558444,0.319842,-0.5, 0.967592,-0.122072,0.221053,1.555568,0.279982,-0.4125, 0.765648,0.567983,0.301958,1.547582,0.308099,-0.405051, 0.88422,-0.467071,0,1.548313,0.248248,-0.5, 0.85206,-0.513749,0.100278,1.538011,0.240115,-0.4175, 0.967592,-0.122072,0.221053,1.555568,0.279982,-0.4125, 0.88422,-0.467071,0,1.548313,0.248248,-0.5, 0.967592,-0.122072,0.221053,1.555568,0.279982,-0.4125, 0.997731,-0.067332,0,1.566843,0.290687,-0.5, 0.311074,0.63183,-0.709947,1.431839,0.331232,-0.664066, 0.074097,0.34389,-0.936082,1.38723,0.275032,-0.708812, 0.113526,0.358822,-0.926476,1.433681,0.239521,-0.720025, 0.311074,0.63183,-0.709947,1.431839,0.331232,-0.664066, 0.113526,0.358822,-0.926476,1.433681,0.239521,-0.720025, 0.365915,0.616651,-0.697028,1.484144,0.298229,-0.672877, -0.152737,0.118235,-0.981169,1.3337,0.207591,-0.723727, -0.10731,0.091019,-0.990051,1.373124,0.16907,-0.735741, 0.113526,0.358822,-0.926476,1.433681,0.239521,-0.720025, -0.152737,0.118235,-0.981169,1.3337,0.207591,-0.723727, 0.113526,0.358822,-0.926476,1.433681,0.239521,-0.720025, 0.074097,0.34389,-0.936082,1.38723,0.275032,-0.708812, -0.10731,0.091019,-0.990051,1.373124,0.16907,-0.735741, 0.221822,-0.232839,-0.94688,1.400739,0.142695,-0.73806, 0.422175,0.108161,-0.900039,1.463411,0.213552,-0.722006, 0.422175,0.108161,-0.900039,1.463411,0.213552,-0.722006, 0.113526,0.358822,-0.926476,1.433681,0.239521,-0.720025, -0.10731,0.091019,-0.990051,1.373124,0.16907,-0.735741, 0.422175,0.108161,-0.900039,1.463411,0.213552,-0.722006, 0.704744,0.348932,-0.617724,1.515677,0.27272,-0.674188, 0.365915,0.616651,-0.697028,1.484144,0.298229,-0.672877, 0.365915,0.616651,-0.697028,1.484144,0.298229,-0.672877, 0.113526,0.358822,-0.926476,1.433681,0.239521,-0.720025, 0.422175,0.108161,-0.900039,1.463411,0.213552,-0.722006, -0.695773,-0.304145,-0.650689,1.235562,0.083949,-0.664066, -0.632405,-0.365743,-0.682858,1.262105,0.039911,-0.672877, -0.363086,-0.142915,-0.92073,1.312568,0.09862,-0.720025, -0.695773,-0.304145,-0.650689,1.235562,0.083949,-0.664066, -0.363086,-0.142915,-0.92073,1.312568,0.09862,-0.720025, -0.420703,-0.10775,-0.900777,1.28017,0.14015,-0.708812, -0.632405,-0.365743,-0.682858,1.262105,0.039911,-0.672877, -0.342337,-0.675989,-0.652567,1.284897,0.013483,-0.674188, -0.050406,-0.482634,-0.87437,1.337615,0.072243,-0.722006, -0.050406,-0.482634,-0.87437,1.337615,0.072243,-0.722006, -0.363086,-0.142915,-0.92073,1.312568,0.09862,-0.720025, -0.632405,-0.365743,-0.682858,1.262105,0.039911,-0.672877, 0.221822,-0.232839,-0.94688,1.400739,0.142695,-0.73806, -0.10731,0.091019,-0.990051,1.373124,0.16907,-0.735741, -0.363086,-0.142915,-0.92073,1.312568,0.09862,-0.720025, 0.221822,-0.232839,-0.94688,1.400739,0.142695,-0.73806, -0.363086,-0.142915,-0.92073,1.312568,0.09862,-0.720025, -0.050406,-0.482634,-0.87437,1.337615,0.072243,-0.722006, -0.10731,0.091019,-0.990051,1.373124,0.16907,-0.735741, -0.152737,0.118235,-0.981169,1.3337,0.207591,-0.723727, -0.420703,-0.10775,-0.900777,1.28017,0.14015,-0.708812, -0.420703,-0.10775,-0.900777,1.28017,0.14015,-0.708812, -0.363086,-0.142915,-0.92073,1.312568,0.09862,-0.720025, -0.10731,0.091019,-0.990051,1.373124,0.16907,-0.735741, 0.307416,-0.846879,-0.433925,1.309178,0.008154,-0.660875, 0.581551,-0.793452,-0.179534,1.331736,0.017726,-0.638667, 0.649588,-0.728866,-0.216309,1.372652,0.056465,-0.664625, 0.649588,-0.728866,-0.216309,1.372652,0.056465,-0.664625, 0.432476,-0.665439,-0.608404,1.359179,0.061869,-0.706, 0.307416,-0.846879,-0.433925,1.309178,0.008154,-0.660875, 0.649588,-0.728866,-0.216309,1.372652,0.056465,-0.664625, 0.725947,-0.653645,-0.21389,1.4295,0.116294,-0.677562, 0.64097,-0.577211,-0.50595,1.418631,0.126081,-0.7215, 0.64097,-0.577211,-0.50595,1.418631,0.126081,-0.7215, 0.432476,-0.665439,-0.608404,1.359179,0.061869,-0.706, 0.649588,-0.728866,-0.216309,1.372652,0.056465,-0.664625, 0.221822,-0.232839,-0.94688,1.400739,0.142695,-0.73806, -0.050406,-0.482634,-0.87437,1.337615,0.072243,-0.722006, 0.432476,-0.665439,-0.608404,1.359179,0.061869,-0.706, 0.221822,-0.232839,-0.94688,1.400739,0.142695,-0.73806, 0.432476,-0.665439,-0.608404,1.359179,0.061869,-0.706, 0.64097,-0.577211,-0.50595,1.418631,0.126081,-0.7215, -0.050406,-0.482634,-0.87437,1.337615,0.072243,-0.722006, -0.342337,-0.675989,-0.652567,1.284897,0.013483,-0.674188, 0.307416,-0.846879,-0.433925,1.309178,0.008154,-0.660875, 0.307416,-0.846879,-0.433925,1.309178,0.008154,-0.660875, 0.432476,-0.665439,-0.608404,1.359179,0.061869,-0.706, -0.050406,-0.482634,-0.87437,1.337615,0.072243,-0.722006, 0.846384,-0.493864,-0.199329,1.517309,0.223825,-0.638667, 0.85656,-0.215911,-0.468708,1.524471,0.247261,-0.660875, 0.736467,-0.384081,-0.556864,1.476277,0.191919,-0.706, 0.846384,-0.493864,-0.199329,1.517309,0.223825,-0.638667, 0.736467,-0.384081,-0.556864,1.476277,0.191919,-0.706, 0.786785,-0.580419,-0.209959,1.483059,0.179084,-0.664625, 0.85656,-0.215911,-0.468708,1.524471,0.247261,-0.660875, 0.704744,0.348932,-0.617724,1.515677,0.27272,-0.674188, 0.422175,0.108161,-0.900039,1.463411,0.213552,-0.722006, 0.422175,0.108161,-0.900039,1.463411,0.213552,-0.722006, 0.736467,-0.384081,-0.556864,1.476277,0.191919,-0.706, 0.85656,-0.215911,-0.468708,1.524471,0.247261,-0.660875, 0.221822,-0.232839,-0.94688,1.400739,0.142695,-0.73806, 0.64097,-0.577211,-0.50595,1.418631,0.126081,-0.7215, 0.736467,-0.384081,-0.556864,1.476277,0.191919,-0.706, 0.221822,-0.232839,-0.94688,1.400739,0.142695,-0.73806, 0.736467,-0.384081,-0.556864,1.476277,0.191919,-0.706, 0.422175,0.108161,-0.900039,1.463411,0.213552,-0.722006, 0.64097,-0.577211,-0.50595,1.418631,0.126081,-0.7215, 0.725947,-0.653645,-0.21389,1.4295,0.116294,-0.677562, 0.786785,-0.580419,-0.209959,1.483059,0.179084,-0.664625, 0.786785,-0.580419,-0.209959,1.483059,0.179084,-0.664625, 0.736467,-0.384081,-0.556864,1.476277,0.191919,-0.706, 0.64097,-0.577211,-0.50595,1.418631,0.126081,-0.7215, 0.581551,-0.793452,0.179534,1.331736,0.017726,-0.361333, 0.649588,-0.728866,0.216309,1.372652,0.056465,-0.335375, 0.685049,-0.72412,0.079739,1.373428,0.045002,-0.4095, 0.581551,-0.793452,0.179534,1.331736,0.017726,-0.361333, 0.685049,-0.72412,0.079739,1.373428,0.045002,-0.4095, 0.6,-0.793691,0.100277,1.3177,-0.004566,-0.4175, 0.649588,-0.728866,0.216309,1.372652,0.056465,-0.335375, 0.725947,-0.653645,0.21389,1.4295,0.116294,-0.322437, 0.740458,-0.666711,0.08496,1.436048,0.110398,-0.40225, 0.740458,-0.666711,0.08496,1.436048,0.110398,-0.40225, 0.685049,-0.72412,0.079739,1.373428,0.045002,-0.4095, 0.649588,-0.728866,0.216309,1.372652,0.056465,-0.335375, 0.743145,-0.669131,0,1.438241,0.108423,-0.5, 0.683609,-0.729849,0,1.370641,0.037756,-0.5, 0.685049,-0.72412,0.079739,1.373428,0.045002,-0.4095, 0.743145,-0.669131,0,1.438241,0.108423,-0.5, 0.685049,-0.72412,0.079739,1.373428,0.045002,-0.4095, 0.740458,-0.666711,0.08496,1.436048,0.110398,-0.40225, 0.683609,-0.729849,0,1.370641,0.037756,-0.5, 0.556938,-0.830554,0,1.310688,-0.015661,-0.5, 0.6,-0.793691,0.100277,1.3177,-0.004566,-0.4175, 0.6,-0.793691,0.100277,1.3177,-0.004566,-0.4175, 0.685049,-0.72412,0.079739,1.373428,0.045002,-0.4095, 0.683609,-0.729849,0,1.370641,0.037756,-0.5, 0.846384,-0.493864,0.199328,1.517309,0.223825,-0.361333, 0.85206,-0.513749,0.100278,1.538011,0.240115,-0.4175, 0.791761,-0.605604,0.079739,1.49454,0.179511,-0.4095, 0.846384,-0.493864,0.199328,1.517309,0.223825,-0.361333, 0.791761,-0.605604,0.079739,1.49454,0.179511,-0.4095, 0.786785,-0.580419,0.209959,1.483059,0.179084,-0.335375, 0.85206,-0.513749,0.100278,1.538011,0.240115,-0.4175, 0.88422,-0.467071,0,1.548313,0.248248,-0.5, 0.797307,-0.603573,0,1.501456,0.18304,-0.5, 0.797307,-0.603573,0,1.501456,0.18304,-0.5, 0.791761,-0.605604,0.079739,1.49454,0.179511,-0.4095, 0.85206,-0.513749,0.100278,1.538011,0.240115,-0.4175, 0.743145,-0.669131,0,1.438241,0.108423,-0.5, 0.740458,-0.666711,0.08496,1.436048,0.110398,-0.40225, 0.791761,-0.605604,0.079739,1.49454,0.179511,-0.4095, 0.743145,-0.669131,0,1.438241,0.108423,-0.5, 0.791761,-0.605604,0.079739,1.49454,0.179511,-0.4095, 0.797307,-0.603573,0,1.501456,0.18304,-0.5, 0.740458,-0.666711,0.08496,1.436048,0.110398,-0.40225, 0.725947,-0.653645,0.21389,1.4295,0.116294,-0.322437, 0.786785,-0.580419,0.209959,1.483059,0.179084,-0.335375, 0.786785,-0.580419,0.209959,1.483059,0.179084,-0.335375, 0.791761,-0.605604,0.079739,1.49454,0.179511,-0.4095, 0.740458,-0.666711,0.08496,1.436048,0.110398,-0.40225, 0.846384,-0.493864,-0.199329,1.517309,0.223825,-0.638667, 0.786785,-0.580419,-0.209959,1.483059,0.179084,-0.664625, 0.791761,-0.605604,-0.079739,1.49454,0.179511,-0.5905, 0.846384,-0.493864,-0.199329,1.517309,0.223825,-0.638667, 0.791761,-0.605604,-0.079739,1.49454,0.179511,-0.5905, 0.85206,-0.513749,-0.100278,1.538011,0.240115,-0.5825, 0.786785,-0.580419,-0.209959,1.483059,0.179084,-0.664625, 0.725947,-0.653645,-0.21389,1.4295,0.116294,-0.677562, 0.740458,-0.666711,-0.08496,1.436048,0.110398,-0.59775, 0.740458,-0.666711,-0.08496,1.436048,0.110398,-0.59775, 0.791761,-0.605604,-0.079739,1.49454,0.179511,-0.5905, 0.786785,-0.580419,-0.209959,1.483059,0.179084,-0.664625, 0.743145,-0.669131,0,1.438241,0.108423,-0.5, 0.797307,-0.603573,0,1.501456,0.18304,-0.5, 0.791761,-0.605604,-0.079739,1.49454,0.179511,-0.5905, 0.743145,-0.669131,0,1.438241,0.108423,-0.5, 0.791761,-0.605604,-0.079739,1.49454,0.179511,-0.5905, 0.740458,-0.666711,-0.08496,1.436048,0.110398,-0.59775, 0.797307,-0.603573,0,1.501456,0.18304,-0.5, 0.88422,-0.467071,0,1.548313,0.248248,-0.5, 0.85206,-0.513749,-0.100278,1.538011,0.240115,-0.5825, 0.85206,-0.513749,-0.100278,1.538011,0.240115,-0.5825, 0.791761,-0.605604,-0.079739,1.49454,0.179511,-0.5905, 0.797307,-0.603573,0,1.501456,0.18304,-0.5, 0.581551,-0.793452,-0.179534,1.331736,0.017726,-0.638667, 0.6,-0.793691,-0.100277,1.3177,-0.004566,-0.5825, 0.685049,-0.72412,-0.079739,1.373428,0.045002,-0.5905, 0.581551,-0.793452,-0.179534,1.331736,0.017726,-0.638667, 0.685049,-0.72412,-0.079739,1.373428,0.045002,-0.5905, 0.649588,-0.728866,-0.216309,1.372652,0.056465,-0.664625, 0.6,-0.793691,-0.100277,1.3177,-0.004566,-0.5825, 0.556938,-0.830554,0,1.310688,-0.015661,-0.5, 0.683609,-0.729849,0,1.370641,0.037756,-0.5, 0.683609,-0.729849,0,1.370641,0.037756,-0.5, 0.685049,-0.72412,-0.079739,1.373428,0.045002,-0.5905, 0.6,-0.793691,-0.100277,1.3177,-0.004566,-0.5825, 0.743145,-0.669131,0,1.438241,0.108423,-0.5, 0.740458,-0.666711,-0.08496,1.436048,0.110398,-0.59775, 0.685049,-0.72412,-0.079739,1.373428,0.045002,-0.5905, 0.743145,-0.669131,0,1.438241,0.108423,-0.5, 0.685049,-0.72412,-0.079739,1.373428,0.045002,-0.5905, 0.683609,-0.729849,0,1.370641,0.037756,-0.5, 0.740458,-0.666711,-0.08496,1.436048,0.110398,-0.59775, 0.725947,-0.653645,-0.21389,1.4295,0.116294,-0.677562, 0.649588,-0.728866,-0.216309,1.372652,0.056465,-0.664625, 0.649588,-0.728866,-0.216309,1.372652,0.056465,-0.664625, 0.685049,-0.72412,-0.079739,1.373428,0.045002,-0.5905, 0.740458,-0.666711,-0.08496,1.436048,0.110398,-0.59775, -0.695773,-0.304145,-0.650689,1.235562,0.083949,-0.664066, -0.687216,-0.351805,-0.635584,1.200029,0.142107,-0.654883, -0.84747,-0.443196,-0.292185,1.178115,0.10978,-0.584482, -0.695773,-0.304145,-0.650689,1.235562,0.083949,-0.664066, -0.84747,-0.443196,-0.292185,1.178115,0.10978,-0.584482, -0.858311,-0.411605,-0.306404,1.208797,0.050229,-0.589491, -0.687216,-0.351805,-0.635584,1.200029,0.142107,-0.654883, -0.659424,-0.432639,-0.614804,1.158118,0.203222,-0.646637, -0.813982,-0.512235,-0.273951,1.142211,0.172121,-0.579984, -0.813982,-0.512235,-0.273951,1.142211,0.172121,-0.579984, -0.84747,-0.443196,-0.292185,1.178115,0.10978,-0.584482, -0.687216,-0.351805,-0.635584,1.200029,0.142107,-0.654883, -0.860968,-0.508659,0,1.136909,0.161755,-0.5, -0.891261,-0.453491,0,1.170811,0.099004,-0.5, -0.84747,-0.443196,-0.292185,1.178115,0.10978,-0.584482, -0.860968,-0.508659,0,1.136909,0.161755,-0.5, -0.84747,-0.443196,-0.292185,1.178115,0.10978,-0.584482, -0.813982,-0.512235,-0.273951,1.142211,0.172121,-0.579984, -0.891261,-0.453491,0,1.170811,0.099004,-0.5, -0.900624,-0.4346,0,1.199875,0.038989,-0.5, -0.858311,-0.411605,-0.306404,1.208797,0.050229,-0.589491, -0.858311,-0.411605,-0.306404,1.208797,0.050229,-0.589491, -0.84747,-0.443196,-0.292185,1.178115,0.10978,-0.584482, -0.891261,-0.453491,0,1.170811,0.099004,-0.5, -0.30458,-0.744204,-0.594467,1.065609,0.289676,-0.638205, -0.39374,-0.892943,-0.218225,1.064451,0.260311,-0.575384, -0.696441,-0.651142,-0.301635,1.103513,0.226037,-0.576713, -0.30458,-0.744204,-0.594467,1.065609,0.289676,-0.638205, -0.696441,-0.651142,-0.301635,1.103513,0.226037,-0.576713, -0.547648,-0.532516,-0.645374,1.112441,0.256132,-0.640641, -0.39374,-0.892943,-0.218225,1.064451,0.260311,-0.575384, -0.417976,-0.908458,0,1.064065,0.250523,-0.5, -0.753723,-0.657192,0,1.100538,0.216006,-0.5, -0.753723,-0.657192,0,1.100538,0.216006,-0.5, -0.696441,-0.651142,-0.301635,1.103513,0.226037,-0.576713, -0.39374,-0.892943,-0.218225,1.064451,0.260311,-0.575384, -0.753723,-0.657192,0,1.100538,0.216006,-0.5, -0.860968,-0.508659,0,1.136909,0.161755,-0.5, -0.813982,-0.512235,-0.273951,1.142211,0.172121,-0.579984, -0.813982,-0.512235,-0.273951,1.142211,0.172121,-0.579984, -0.696441,-0.651142,-0.301635,1.103513,0.226037,-0.576713, -0.753723,-0.657192,0,1.100538,0.216006,-0.5, -0.659424,-0.432639,-0.614804,1.158118,0.203222,-0.646637, -0.547648,-0.532516,-0.645374,1.112441,0.256132,-0.640641, -0.696441,-0.651142,-0.301635,1.103513,0.226037,-0.576713, -0.659424,-0.432639,-0.614804,1.158118,0.203222,-0.646637, -0.696441,-0.651142,-0.301635,1.103513,0.226037,-0.576713, -0.813982,-0.512235,-0.273951,1.142211,0.172121,-0.579984, -0.30458,-0.744204,0.594467,1.065609,0.289676,-0.361795, -0.547648,-0.532516,0.645374,1.112441,0.256132,-0.359359, -0.696441,-0.651142,0.301635,1.103513,0.226037,-0.423287, -0.30458,-0.744204,0.594467,1.065609,0.289676,-0.361795, -0.696441,-0.651142,0.301635,1.103513,0.226037,-0.423287, -0.393741,-0.892942,0.218225,1.064451,0.260311,-0.424615, -0.659424,-0.432639,0.614804,1.158118,0.203222,-0.353363, -0.813982,-0.512235,0.273951,1.142211,0.172121,-0.420016, -0.696441,-0.651142,0.301635,1.103513,0.226037,-0.423287, -0.659424,-0.432639,0.614804,1.158118,0.203222,-0.353363, -0.696441,-0.651142,0.301635,1.103513,0.226037,-0.423287, -0.547648,-0.532516,0.645374,1.112441,0.256132,-0.359359, -0.813982,-0.512235,0.273951,1.142211,0.172121,-0.420016, -0.860968,-0.508659,0,1.136909,0.161755,-0.5, -0.753723,-0.657192,0,1.100538,0.216006,-0.5, -0.753723,-0.657192,0,1.100538,0.216006,-0.5, -0.696441,-0.651142,0.301635,1.103513,0.226037,-0.423287, -0.813982,-0.512235,0.273951,1.142211,0.172121,-0.420016, -0.753723,-0.657192,0,1.100538,0.216006,-0.5, -0.417976,-0.908458,0,1.064065,0.250523,-0.5, -0.393741,-0.892942,0.218225,1.064451,0.260311,-0.424615, -0.393741,-0.892942,0.218225,1.064451,0.260311,-0.424615, -0.696441,-0.651142,0.301635,1.103513,0.226037,-0.423287, -0.753723,-0.657192,0,1.100538,0.216006,-0.5, -0.695773,-0.304144,0.650689,1.235562,0.083949,-0.335934, -0.858311,-0.411604,0.306404,1.208797,0.050229,-0.410509, -0.84747,-0.443196,0.292185,1.178115,0.10978,-0.415518, -0.695773,-0.304144,0.650689,1.235562,0.083949,-0.335934, -0.84747,-0.443196,0.292185,1.178115,0.10978,-0.415518, -0.687216,-0.351805,0.635584,1.200029,0.142107,-0.345117, -0.858311,-0.411604,0.306404,1.208797,0.050229,-0.410509, -0.900624,-0.4346,0,1.199875,0.038989,-0.5, -0.891261,-0.453491,0,1.170811,0.099004,-0.5, -0.891261,-0.453491,0,1.170811,0.099004,-0.5, -0.84747,-0.443196,0.292185,1.178115,0.10978,-0.415518, -0.858311,-0.411604,0.306404,1.208797,0.050229,-0.410509, -0.860968,-0.508659,0,1.136909,0.161755,-0.5, -0.813982,-0.512235,0.273951,1.142211,0.172121,-0.420016, -0.84747,-0.443196,0.292185,1.178115,0.10978,-0.415518, -0.860968,-0.508659,0,1.136909,0.161755,-0.5, -0.84747,-0.443196,0.292185,1.178115,0.10978,-0.415518, -0.891261,-0.453491,0,1.170811,0.099004,-0.5, -0.813982,-0.512235,0.273951,1.142211,0.172121,-0.420016, -0.659424,-0.432639,0.614804,1.158118,0.203222,-0.353363, -0.687216,-0.351805,0.635584,1.200029,0.142107,-0.345117, -0.687216,-0.351805,0.635584,1.200029,0.142107,-0.345117, -0.84747,-0.443196,0.292185,1.178115,0.10978,-0.415518, -0.813982,-0.512235,0.273951,1.142211,0.172121,-0.420016, 0.311074,0.63183,-0.709947,1.431839,0.331232,-0.664066, 0.339667,0.655519,-0.674478,1.36073,0.379173,-0.654883, 0.12092,0.358415,-0.925698,1.324207,0.325294,-0.697124, 0.311074,0.63183,-0.709947,1.431839,0.331232,-0.664066, 0.12092,0.358415,-0.925698,1.324207,0.325294,-0.697124, 0.074097,0.34389,-0.936082,1.38723,0.275032,-0.708812, 0.339667,0.655519,-0.674478,1.36073,0.379173,-0.654883, 0.306584,0.689695,-0.655994,1.274769,0.43129,-0.646637, 0.126992,0.363932,-0.922728,1.248257,0.379456,-0.686629, 0.126992,0.363932,-0.922728,1.248257,0.379456,-0.686629, 0.12092,0.358415,-0.925698,1.324207,0.325294,-0.697124, 0.339667,0.655519,-0.674478,1.36073,0.379173,-0.654883, -0.106175,0.048409,-0.993168,1.216443,0.317256,-0.69996, -0.127933,0.082246,-0.988367,1.280379,0.26064,-0.711204, 0.12092,0.358415,-0.925698,1.324207,0.325294,-0.697124, -0.106175,0.048409,-0.993168,1.216443,0.317256,-0.69996, 0.12092,0.358415,-0.925698,1.324207,0.325294,-0.697124, 0.126992,0.363932,-0.922728,1.248257,0.379456,-0.686629, -0.127933,0.082246,-0.988367,1.280379,0.26064,-0.711204, -0.152737,0.118235,-0.981169,1.3337,0.207591,-0.723727, 0.074097,0.34389,-0.936082,1.38723,0.275032,-0.708812, 0.074097,0.34389,-0.936082,1.38723,0.275032,-0.708812, 0.12092,0.358415,-0.925698,1.324207,0.325294,-0.697124, -0.127933,0.082246,-0.988367,1.280379,0.26064,-0.711204, 0.225321,0.739198,-0.634679,1.177908,0.476825,-0.640641, 0.08947,0.74633,-0.659535,1.074101,0.505017,-0.638205, 0.076521,0.412911,-0.907551,1.072171,0.456076,-0.675897, 0.076521,0.412911,-0.907551,1.072171,0.456076,-0.675897, 0.115814,0.384301,-0.915915,1.163029,0.426667,-0.678998, 0.225321,0.739198,-0.634679,1.177908,0.476825,-0.640641, 0.012548,-0.001301,-0.99992,1.069855,0.397346,-0.688461, -0.066606,0.01431,-0.997677,1.145175,0.366478,-0.691783, 0.115814,0.384301,-0.915915,1.163029,0.426667,-0.678998, 0.012548,-0.001301,-0.99992,1.069855,0.397346,-0.688461, 0.115814,0.384301,-0.915915,1.163029,0.426667,-0.678998, 0.076521,0.412911,-0.907551,1.072171,0.456076,-0.675897, -0.066606,0.01431,-0.997677,1.145175,0.366478,-0.691783, -0.106175,0.048409,-0.993168,1.216443,0.317256,-0.69996, 0.126992,0.363932,-0.922728,1.248257,0.379456,-0.686629, 0.126992,0.363932,-0.922728,1.248257,0.379456,-0.686629, 0.115814,0.384301,-0.915915,1.163029,0.426667,-0.678998, -0.066606,0.01431,-0.997677,1.145175,0.366478,-0.691783, 0.306584,0.689695,-0.655994,1.274769,0.43129,-0.646637, 0.225321,0.739198,-0.634679,1.177908,0.476825,-0.640641, 0.115814,0.384301,-0.915915,1.163029,0.426667,-0.678998, 0.306584,0.689695,-0.655994,1.274769,0.43129,-0.646637, 0.115814,0.384301,-0.915915,1.163029,0.426667,-0.678998, 0.126992,0.363932,-0.922728,1.248257,0.379456,-0.686629, -0.30458,-0.744204,-0.594467,1.065609,0.289676,-0.638205, -0.547648,-0.532516,-0.645374,1.112441,0.256132,-0.640641, -0.30711,-0.324628,-0.894595,1.12732,0.306289,-0.678998, -0.30458,-0.744204,-0.594467,1.065609,0.289676,-0.638205, -0.30711,-0.324628,-0.894595,1.12732,0.306289,-0.678998, -0.094868,-0.409964,-0.907155,1.067539,0.338617,-0.675897, -0.547648,-0.532516,-0.645374,1.112441,0.256132,-0.640641, -0.659424,-0.432639,-0.614804,1.158118,0.203222,-0.646637, -0.382336,-0.228691,-0.895276,1.18463,0.255055,-0.686629, -0.382336,-0.228691,-0.895276,1.18463,0.255055,-0.686629, -0.30711,-0.324628,-0.894595,1.12732,0.306289,-0.678998, -0.547648,-0.532516,-0.645374,1.112441,0.256132,-0.640641, -0.106175,0.048409,-0.993168,1.216443,0.317256,-0.69996, -0.066606,0.01431,-0.997677,1.145175,0.366478,-0.691783, -0.30711,-0.324628,-0.894595,1.12732,0.306289,-0.678998, -0.106175,0.048409,-0.993168,1.216443,0.317256,-0.69996, -0.30711,-0.324628,-0.894595,1.12732,0.306289,-0.678998, -0.382336,-0.228691,-0.895276,1.18463,0.255055,-0.686629, -0.066606,0.01431,-0.997677,1.145175,0.366478,-0.691783, 0.012548,-0.001301,-0.99992,1.069855,0.397346,-0.688461, -0.094868,-0.409964,-0.907155,1.067539,0.338617,-0.675897, -0.094868,-0.409964,-0.907155,1.067539,0.338617,-0.675897, -0.30711,-0.324628,-0.894595,1.12732,0.306289,-0.678998, -0.066606,0.01431,-0.997677,1.145175,0.366478,-0.691783, -0.687216,-0.351805,-0.635584,1.200029,0.142107,-0.654883, -0.695773,-0.304145,-0.650689,1.235562,0.083949,-0.664066, -0.420703,-0.10775,-0.900777,1.28017,0.14015,-0.708812, -0.420703,-0.10775,-0.900777,1.28017,0.14015,-0.708812, -0.406685,-0.158703,-0.899678,1.236552,0.195985,-0.697124, -0.687216,-0.351805,-0.635584,1.200029,0.142107,-0.654883, -0.152737,0.118235,-0.981169,1.3337,0.207591,-0.723727, -0.127933,0.082246,-0.988367,1.280379,0.26064,-0.711204, -0.406685,-0.158703,-0.899678,1.236552,0.195985,-0.697124, -0.152737,0.118235,-0.981169,1.3337,0.207591,-0.723727, -0.406685,-0.158703,-0.899678,1.236552,0.195985,-0.697124, -0.420703,-0.10775,-0.900777,1.28017,0.14015,-0.708812, -0.127933,0.082246,-0.988367,1.280379,0.26064,-0.711204, -0.106175,0.048409,-0.993168,1.216443,0.317256,-0.69996, -0.382336,-0.228691,-0.895276,1.18463,0.255055,-0.686629, -0.382336,-0.228691,-0.895276,1.18463,0.255055,-0.686629, -0.406685,-0.158703,-0.899678,1.236552,0.195985,-0.697124, -0.127933,0.082246,-0.988367,1.280379,0.26064,-0.711204, -0.659424,-0.432639,-0.614804,1.158118,0.203222,-0.646637, -0.687216,-0.351805,-0.635584,1.200029,0.142107,-0.654883, -0.406685,-0.158703,-0.899678,1.236552,0.195985,-0.697124, -0.659424,-0.432639,-0.614804,1.158118,0.203222,-0.646637, -0.406685,-0.158703,-0.899678,1.236552,0.195985,-0.697124, -0.382336,-0.228691,-0.895276,1.18463,0.255055,-0.686629, 0.311074,0.63183,0.709947,1.431839,0.331232,-0.335934, 0.074097,0.34389,0.936082,1.38723,0.275032,-0.291188, 0.12092,0.358415,0.925698,1.324207,0.325294,-0.302876, 0.311074,0.63183,0.709947,1.431839,0.331232,-0.335934, 0.12092,0.358415,0.925698,1.324207,0.325294,-0.302876, 0.339667,0.655519,0.674478,1.36073,0.379173,-0.345117, 0.074097,0.34389,0.936082,1.38723,0.275032,-0.291188, -0.152737,0.118235,0.981169,1.3337,0.207591,-0.276273, -0.127934,0.082246,0.988367,1.280379,0.26064,-0.288796, -0.127934,0.082246,0.988367,1.280379,0.26064,-0.288796, 0.12092,0.358415,0.925698,1.324207,0.325294,-0.302876, 0.074097,0.34389,0.936082,1.38723,0.275032,-0.291188, -0.106175,0.048409,0.993168,1.216443,0.317256,-0.30004, 0.126992,0.363931,0.922728,1.248257,0.379456,-0.313371, 0.12092,0.358415,0.925698,1.324207,0.325294,-0.302876, -0.106175,0.048409,0.993168,1.216443,0.317256,-0.30004, 0.12092,0.358415,0.925698,1.324207,0.325294,-0.302876, -0.127934,0.082246,0.988367,1.280379,0.26064,-0.288796, 0.126992,0.363931,0.922728,1.248257,0.379456,-0.313371, 0.306584,0.689695,0.655994,1.274769,0.43129,-0.353363, 0.339667,0.655519,0.674478,1.36073,0.379173,-0.345117, 0.339667,0.655519,0.674478,1.36073,0.379173,-0.345117, 0.12092,0.358415,0.925698,1.324207,0.325294,-0.302876, 0.126992,0.363931,0.922728,1.248257,0.379456,-0.313371, -0.420703,-0.10775,0.900777,1.28017,0.14015,-0.291188, -0.695773,-0.304144,0.650689,1.235562,0.083949,-0.335934, -0.687216,-0.351805,0.635584,1.200029,0.142107,-0.345117, -0.687216,-0.351805,0.635584,1.200029,0.142107,-0.345117, -0.406685,-0.158702,0.899678,1.236552,0.195985,-0.302876, -0.420703,-0.10775,0.900777,1.28017,0.14015,-0.291188, -0.659424,-0.432639,0.614804,1.158118,0.203222,-0.353363, -0.382336,-0.228691,0.895276,1.18463,0.255055,-0.313371, -0.406685,-0.158702,0.899678,1.236552,0.195985,-0.302876, -0.659424,-0.432639,0.614804,1.158118,0.203222,-0.353363, -0.406685,-0.158702,0.899678,1.236552,0.195985,-0.302876, -0.687216,-0.351805,0.635584,1.200029,0.142107,-0.345117, -0.382336,-0.228691,0.895276,1.18463,0.255055,-0.313371, -0.106175,0.048409,0.993168,1.216443,0.317256,-0.30004, -0.127934,0.082246,0.988367,1.280379,0.26064,-0.288796, -0.127934,0.082246,0.988367,1.280379,0.26064,-0.288796, -0.406685,-0.158702,0.899678,1.236552,0.195985,-0.302876, -0.382336,-0.228691,0.895276,1.18463,0.255055,-0.313371, -0.152737,0.118235,0.981169,1.3337,0.207591,-0.276273, -0.420703,-0.10775,0.900777,1.28017,0.14015,-0.291188, -0.406685,-0.158702,0.899678,1.236552,0.195985,-0.302876, -0.152737,0.118235,0.981169,1.3337,0.207591,-0.276273, -0.406685,-0.158702,0.899678,1.236552,0.195985,-0.302876, -0.127934,0.082246,0.988367,1.280379,0.26064,-0.288796, -0.30458,-0.744204,0.594467,1.065609,0.289676,-0.361795, -0.094868,-0.409964,0.907155,1.067539,0.338617,-0.324103, -0.30711,-0.324628,0.894595,1.12732,0.306289,-0.321002, -0.30458,-0.744204,0.594467,1.065609,0.289676,-0.361795, -0.30711,-0.324628,0.894595,1.12732,0.306289,-0.321002, -0.547648,-0.532516,0.645374,1.112441,0.256132,-0.359359, -0.094868,-0.409964,0.907155,1.067539,0.338617,-0.324103, 0.012549,-0.001301,0.99992,1.069855,0.397346,-0.311539, -0.066605,0.01431,0.997677,1.145175,0.366478,-0.308217, -0.066605,0.01431,0.997677,1.145175,0.366478,-0.308217, -0.30711,-0.324628,0.894595,1.12732,0.306289,-0.321002, -0.094868,-0.409964,0.907155,1.067539,0.338617,-0.324103, -0.106175,0.048409,0.993168,1.216443,0.317256,-0.30004, -0.382336,-0.228691,0.895276,1.18463,0.255055,-0.313371, -0.30711,-0.324628,0.894595,1.12732,0.306289,-0.321002, -0.106175,0.048409,0.993168,1.216443,0.317256,-0.30004, -0.30711,-0.324628,0.894595,1.12732,0.306289,-0.321002, -0.066605,0.01431,0.997677,1.145175,0.366478,-0.308217, -0.382336,-0.228691,0.895276,1.18463,0.255055,-0.313371, -0.659424,-0.432639,0.614804,1.158118,0.203222,-0.353363, -0.547648,-0.532516,0.645374,1.112441,0.256132,-0.359359, -0.547648,-0.532516,0.645374,1.112441,0.256132,-0.359359, -0.30711,-0.324628,0.894595,1.12732,0.306289,-0.321002, -0.382336,-0.228691,0.895276,1.18463,0.255055,-0.313371, 0.076521,0.412911,0.907551,1.072171,0.456076,-0.324103, 0.08947,0.74633,0.659535,1.074101,0.505017,-0.361795, 0.225321,0.739198,0.634679,1.177908,0.476825,-0.359359, 0.225321,0.739198,0.634679,1.177908,0.476825,-0.359359, 0.115814,0.384301,0.915915,1.163029,0.426667,-0.321002, 0.076521,0.412911,0.907551,1.072171,0.456076,-0.324103, 0.306584,0.689695,0.655994,1.274769,0.43129,-0.353363, 0.126992,0.363931,0.922728,1.248257,0.379456,-0.313371, 0.115814,0.384301,0.915915,1.163029,0.426667,-0.321002, 0.306584,0.689695,0.655994,1.274769,0.43129,-0.353363, 0.115814,0.384301,0.915915,1.163029,0.426667,-0.321002, 0.225321,0.739198,0.634679,1.177908,0.476825,-0.359359, 0.126992,0.363931,0.922728,1.248257,0.379456,-0.313371, -0.106175,0.048409,0.993168,1.216443,0.317256,-0.30004, -0.066605,0.01431,0.997677,1.145175,0.366478,-0.308217, -0.066605,0.01431,0.997677,1.145175,0.366478,-0.308217, 0.115814,0.384301,0.915915,1.163029,0.426667,-0.321002, 0.126992,0.363931,0.922728,1.248257,0.379456,-0.313371, 0.012549,-0.001301,0.99992,1.069855,0.397346,-0.311539, 0.076521,0.412911,0.907551,1.072171,0.456076,-0.324103, 0.115814,0.384301,0.915915,1.163029,0.426667,-0.321002, 0.012549,-0.001301,0.99992,1.069855,0.397346,-0.311539, 0.115814,0.384301,0.915915,1.163029,0.426667,-0.321002, -0.066605,0.01431,0.997677,1.145175,0.366478,-0.308217, 0.311074,0.63183,-0.709947,1.431839,0.331232,-0.664066, 0.460195,0.823869,-0.330849,1.458604,0.364953,-0.589491, 0.4628,0.825265,-0.323657,1.382643,0.4115,-0.584482, 0.311074,0.63183,-0.709947,1.431839,0.331232,-0.664066, 0.4628,0.825265,-0.323657,1.382643,0.4115,-0.584482, 0.339667,0.655519,-0.674478,1.36073,0.379173,-0.654883, 0.460195,0.823869,-0.330849,1.458604,0.364953,-0.589491, 0.489941,0.871755,0,1.467526,0.376193,-0.5, 0.499794,0.866144,0,1.389948,0.422275,-0.5, 0.499794,0.866144,0,1.389948,0.422275,-0.5, 0.4628,0.825265,-0.323657,1.382643,0.4115,-0.584482, 0.460195,0.823869,-0.330849,1.458604,0.364953,-0.589491, 0.445921,0.895072,0,1.295978,0.472757,-0.5, 0.408321,0.858475,-0.310315,1.290676,0.46239,-0.579984, 0.4628,0.825265,-0.323657,1.382643,0.4115,-0.584482, 0.445921,0.895072,0,1.295978,0.472757,-0.5, 0.4628,0.825265,-0.323657,1.382643,0.4115,-0.584482, 0.499794,0.866144,0,1.389948,0.422275,-0.5, 0.408321,0.858475,-0.310315,1.290676,0.46239,-0.579984, 0.306584,0.689695,-0.655994,1.274769,0.43129,-0.646637, 0.339667,0.655519,-0.674478,1.36073,0.379173,-0.654883, 0.339667,0.655519,-0.674478,1.36073,0.379173,-0.654883, 0.4628,0.825265,-0.323657,1.382643,0.4115,-0.584482, 0.408321,0.858475,-0.310315,1.290676,0.46239,-0.579984, 0.311074,0.63183,0.709947,1.431839,0.331232,-0.335934, 0.339667,0.655519,0.674478,1.36073,0.379173,-0.345117, 0.4628,0.825265,0.323657,1.382643,0.4115,-0.415518, 0.311074,0.63183,0.709947,1.431839,0.331232,-0.335934, 0.4628,0.825265,0.323657,1.382643,0.4115,-0.415518, 0.460195,0.823869,0.330849,1.458604,0.364953,-0.410509, 0.339667,0.655519,0.674478,1.36073,0.379173,-0.345117, 0.306584,0.689695,0.655994,1.274769,0.43129,-0.353363, 0.40832,0.858475,0.310315,1.290676,0.46239,-0.420016, 0.40832,0.858475,0.310315,1.290676,0.46239,-0.420016, 0.4628,0.825265,0.323657,1.382643,0.4115,-0.415518, 0.339667,0.655519,0.674478,1.36073,0.379173,-0.345117, 0.445921,0.895072,0,1.295978,0.472757,-0.5, 0.499794,0.866144,0,1.389948,0.422275,-0.5, 0.4628,0.825265,0.323657,1.382643,0.4115,-0.415518, 0.445921,0.895072,0,1.295978,0.472757,-0.5, 0.4628,0.825265,0.323657,1.382643,0.4115,-0.415518, 0.40832,0.858475,0.310315,1.290676,0.46239,-0.420016, 0.499794,0.866144,0,1.389948,0.422275,-0.5, 0.489941,0.871755,0,1.467526,0.376193,-0.5, 0.460195,0.823869,0.330849,1.458604,0.364953,-0.410509, 0.460195,0.823869,0.330849,1.458604,0.364953,-0.410509, 0.4628,0.825265,0.323657,1.382643,0.4115,-0.415518, 0.499794,0.866144,0,1.389948,0.422275,-0.5, 0.225321,0.739198,0.634679,1.177908,0.476825,-0.359359, 0.08947,0.74633,0.659535,1.074101,0.505017,-0.361795, 0.099282,0.948291,0.301476,1.075259,0.534381,-0.424615, 0.099282,0.948291,0.301476,1.075259,0.534381,-0.424615, 0.298199,0.907962,0.294419,1.186836,0.506919,-0.423287, 0.225321,0.739198,0.634679,1.177908,0.476825,-0.359359, 0.156232,0.98772,0,1.075645,0.544169,-0.5, 0.336559,0.941662,0,1.189812,0.516951,-0.5, 0.298199,0.907962,0.294419,1.186836,0.506919,-0.423287, 0.156232,0.98772,0,1.075645,0.544169,-0.5, 0.298199,0.907962,0.294419,1.186836,0.506919,-0.423287, 0.099282,0.948291,0.301476,1.075259,0.534381,-0.424615, 0.336559,0.941662,0,1.189812,0.516951,-0.5, 0.445921,0.895072,0,1.295978,0.472757,-0.5, 0.40832,0.858475,0.310315,1.290676,0.46239,-0.420016, 0.40832,0.858475,0.310315,1.290676,0.46239,-0.420016, 0.298199,0.907962,0.294419,1.186836,0.506919,-0.423287, 0.336559,0.941662,0,1.189812,0.516951,-0.5, 0.306584,0.689695,0.655994,1.274769,0.43129,-0.353363, 0.225321,0.739198,0.634679,1.177908,0.476825,-0.359359, 0.298199,0.907962,0.294419,1.186836,0.506919,-0.423287, 0.306584,0.689695,0.655994,1.274769,0.43129,-0.353363, 0.298199,0.907962,0.294419,1.186836,0.506919,-0.423287, 0.40832,0.858475,0.310315,1.290676,0.46239,-0.420016, 0.099282,0.948291,-0.301476,1.075259,0.534381,-0.575384, 0.08947,0.74633,-0.659535,1.074101,0.505017,-0.638205, 0.225321,0.739198,-0.634679,1.177908,0.476825,-0.640641, 0.225321,0.739198,-0.634679,1.177908,0.476825,-0.640641, 0.298199,0.907962,-0.294419,1.186836,0.506919,-0.576713, 0.099282,0.948291,-0.301476,1.075259,0.534381,-0.575384, 0.306584,0.689695,-0.655994,1.274769,0.43129,-0.646637, 0.408321,0.858475,-0.310315,1.290676,0.46239,-0.579984, 0.298199,0.907962,-0.294419,1.186836,0.506919,-0.576713, 0.306584,0.689695,-0.655994,1.274769,0.43129,-0.646637, 0.298199,0.907962,-0.294419,1.186836,0.506919,-0.576713, 0.225321,0.739198,-0.634679,1.177908,0.476825,-0.640641, 0.408321,0.858475,-0.310315,1.290676,0.46239,-0.579984, 0.445921,0.895072,0,1.295978,0.472757,-0.5, 0.336559,0.941662,0,1.189812,0.516951,-0.5, 0.336559,0.941662,0,1.189812,0.516951,-0.5, 0.298199,0.907962,-0.294419,1.186836,0.506919,-0.576713, 0.408321,0.858475,-0.310315,1.290676,0.46239,-0.579984, 0.156232,0.98772,0,1.075645,0.544169,-0.5, 0.099282,0.948291,-0.301476,1.075259,0.534381,-0.575384, 0.298199,0.907962,-0.294419,1.186836,0.506919,-0.576713, 0.156232,0.98772,0,1.075645,0.544169,-0.5, 0.298199,0.907962,-0.294419,1.186836,0.506919,-0.576713, 0.336559,0.941662,0,1.189812,0.516951,-0.5, -0.199176,0.745044,-0.636583,0.769932,0.456132,-0.654883, -0.218035,0.735069,-0.641977,0.691977,0.424648,-0.664066, -0.042916,0.448451,-0.892776,0.741552,0.375033,-0.708812, -0.042916,0.448451,-0.892776,0.741552,0.375033,-0.708812, -0.044996,0.438512,-0.897598,0.808756,0.407522,-0.697124, -0.199176,0.745044,-0.636583,0.769932,0.456132,-0.654883, 0.160738,0.160922,-0.97379,0.801042,0.315496,-0.723727, 0.142808,0.115868,-0.982945,0.855345,0.34919,-0.711204, -0.044996,0.438512,-0.897598,0.808756,0.407522,-0.697124, 0.160738,0.160922,-0.97379,0.801042,0.315496,-0.723727, -0.044996,0.438512,-0.897598,0.808756,0.407522,-0.697124, -0.042916,0.448451,-0.892776,0.741552,0.375033,-0.708812, 0.142808,0.115868,-0.982945,0.855345,0.34919,-0.711204, 0.124797,0.069981,-0.989711,0.920924,0.379919,-0.69996, -0.024081,0.437847,-0.898727,0.88977,0.437716,-0.686629, -0.024081,0.437847,-0.898727,0.88977,0.437716,-0.686629, -0.044996,0.438512,-0.897598,0.808756,0.407522,-0.697124, 0.142808,0.115868,-0.982945,0.855345,0.34919,-0.711204, -0.142137,0.766468,-0.626358,0.863808,0.485881,-0.646637, -0.199176,0.745044,-0.636583,0.769932,0.456132,-0.654883, -0.044996,0.438512,-0.897598,0.808756,0.407522,-0.697124, -0.142137,0.766468,-0.626358,0.863808,0.485881,-0.646637, -0.044996,0.438512,-0.897598,0.808756,0.407522,-0.697124, -0.024081,0.437847,-0.898727,0.88977,0.437716,-0.686629, 0.398283,-0.122544,-0.90904,0.860532,0.255958,-0.708812, 0.66282,-0.338306,-0.667996,0.910107,0.206343,-0.664066, 0.585878,-0.414463,-0.696396,0.940757,0.242249,-0.654883, 0.585878,-0.414463,-0.696396,0.940757,0.242249,-0.654883, 0.362669,-0.212082,-0.907465,0.901933,0.290859,-0.697124, 0.398283,-0.122544,-0.90904,0.860532,0.255958,-0.708812, 0.514373,-0.562786,-0.647064,0.978041,0.273957,-0.646637, 0.281388,-0.318777,-0.905098,0.952079,0.322122,-0.686629, 0.362669,-0.212082,-0.907465,0.901933,0.290859,-0.697124, 0.514373,-0.562786,-0.647064,0.978041,0.273957,-0.646637, 0.362669,-0.212082,-0.907465,0.901933,0.290859,-0.697124, 0.585878,-0.414463,-0.696396,0.940757,0.242249,-0.654883, 0.124797,0.069981,-0.989711,0.920924,0.379919,-0.69996, 0.142808,0.115868,-0.982945,0.855345,0.34919,-0.711204, 0.362669,-0.212082,-0.907465,0.901933,0.290859,-0.697124, 0.124797,0.069981,-0.989711,0.920924,0.379919,-0.69996, 0.362669,-0.212082,-0.907465,0.901933,0.290859,-0.697124, 0.281388,-0.318777,-0.905098,0.952079,0.322122,-0.686629, 0.142808,0.115868,-0.982945,0.855345,0.34919,-0.711204, 0.160738,0.160922,-0.97379,0.801042,0.315496,-0.723727, 0.398283,-0.122544,-0.90904,0.860532,0.255958,-0.708812, 0.398283,-0.122544,-0.90904,0.860532,0.255958,-0.708812, 0.362669,-0.212082,-0.907465,0.901933,0.290859,-0.697124, 0.142808,0.115868,-0.982945,0.855345,0.34919,-0.711204, 0.223486,-0.713834,-0.663698,1.020234,0.292692,-0.640641, -0.30458,-0.744204,-0.594467,1.065609,0.289676,-0.638205, -0.094868,-0.409964,-0.907155,1.067539,0.338617,-0.675897, -0.094868,-0.409964,-0.907155,1.067539,0.338617,-0.675897, 0.118719,-0.361063,-0.924954,1.008203,0.340968,-0.678998, 0.223486,-0.713834,-0.663698,1.020234,0.292692,-0.640641, 0.012548,-0.001301,-0.99992,1.069855,0.397346,-0.688461, 0.086047,0.023651,-0.99601,0.993766,0.398899,-0.691783, 0.118719,-0.361063,-0.924954,1.008203,0.340968,-0.678998, 0.012548,-0.001301,-0.99992,1.069855,0.397346,-0.688461, 0.118719,-0.361063,-0.924954,1.008203,0.340968,-0.678998, -0.094868,-0.409964,-0.907155,1.067539,0.338617,-0.675897, 0.086047,0.023651,-0.99601,0.993766,0.398899,-0.691783, 0.124797,0.069981,-0.989711,0.920924,0.379919,-0.69996, 0.281388,-0.318777,-0.905098,0.952079,0.322122,-0.686629, 0.281388,-0.318777,-0.905098,0.952079,0.322122,-0.686629, 0.118719,-0.361063,-0.924954,1.008203,0.340968,-0.678998, 0.086047,0.023651,-0.99601,0.993766,0.398899,-0.691783, 0.281388,-0.318777,-0.905098,0.952079,0.322122,-0.686629, 0.514373,-0.562786,-0.647064,0.978041,0.273957,-0.646637, 0.223486,-0.713834,-0.663698,1.020234,0.292692,-0.640641, 0.223486,-0.713834,-0.663698,1.020234,0.292692,-0.640641, 0.118719,-0.361063,-0.924954,1.008203,0.340968,-0.678998, 0.281388,-0.318777,-0.905098,0.952079,0.322122,-0.686629, 0.08947,0.74633,-0.659535,1.074101,0.505017,-0.638205, -0.041682,0.78334,-0.620195,0.967299,0.505105,-0.640641, 0.017449,0.433004,-0.901223,0.97933,0.45683,-0.678998, 0.08947,0.74633,-0.659535,1.074101,0.505017,-0.638205, 0.017449,0.433004,-0.901223,0.97933,0.45683,-0.678998, 0.076521,0.412911,-0.907551,1.072171,0.456076,-0.675897, -0.041682,0.78334,-0.620195,0.967299,0.505105,-0.640641, -0.142137,0.766468,-0.626358,0.863808,0.485881,-0.646637, -0.024081,0.437847,-0.898727,0.88977,0.437716,-0.686629, -0.024081,0.437847,-0.898727,0.88977,0.437716,-0.686629, 0.017449,0.433004,-0.901223,0.97933,0.45683,-0.678998, -0.041682,0.78334,-0.620195,0.967299,0.505105,-0.640641, 0.124797,0.069981,-0.989711,0.920924,0.379919,-0.69996, 0.086047,0.023651,-0.99601,0.993766,0.398899,-0.691783, 0.017449,0.433004,-0.901223,0.97933,0.45683,-0.678998, 0.124797,0.069981,-0.989711,0.920924,0.379919,-0.69996, 0.017449,0.433004,-0.901223,0.97933,0.45683,-0.678998, -0.024081,0.437847,-0.898727,0.88977,0.437716,-0.686629, 0.086047,0.023651,-0.99601,0.993766,0.398899,-0.691783, 0.012548,-0.001301,-0.99992,1.069855,0.397346,-0.688461, 0.076521,0.412911,-0.907551,1.072171,0.456076,-0.675897, 0.076521,0.412911,-0.907551,1.072171,0.456076,-0.675897, 0.017449,0.433004,-0.901223,0.97933,0.45683,-0.678998, 0.086047,0.023651,-0.99601,0.993766,0.398899,-0.691783, -0.218035,0.735069,-0.641977,0.691977,0.424648,-0.664066, -0.199176,0.745044,-0.636583,0.769932,0.456132,-0.654883, -0.283565,0.912815,-0.293871,0.746638,0.485298,-0.584482, -0.218035,0.735069,-0.641977,0.691977,0.424648,-0.664066, -0.283565,0.912815,-0.293871,0.746638,0.485298,-0.584482, -0.31842,0.898971,-0.300764,0.662233,0.454417,-0.589491, -0.199176,0.745044,-0.636583,0.769932,0.456132,-0.654883, -0.142137,0.766468,-0.626358,0.863808,0.485881,-0.646637, -0.20497,0.936687,-0.283911,0.848231,0.51478,-0.579984, -0.20497,0.936687,-0.283911,0.848231,0.51478,-0.579984, -0.283565,0.912815,-0.293871,0.746638,0.485298,-0.584482, -0.199176,0.745044,-0.636583,0.769932,0.456132,-0.654883, -0.237278,0.971442,0,0.843038,0.524412,-0.5, -0.314129,0.94938,0,0.738873,0.49502,-0.5, -0.283565,0.912815,-0.293871,0.746638,0.485298,-0.584482, -0.237278,0.971442,0,0.843038,0.524412,-0.5, -0.283565,0.912815,-0.293871,0.746638,0.485298,-0.584482, -0.20497,0.936687,-0.283911,0.848231,0.51478,-0.579984, -0.314129,0.94938,0,0.738873,0.49502,-0.5, -0.346116,0.938192,0,0.652318,0.46434,-0.5, -0.31842,0.898971,-0.300764,0.662233,0.454417,-0.589491, -0.31842,0.898971,-0.300764,0.662233,0.454417,-0.589491, -0.283565,0.912815,-0.293871,0.746638,0.485298,-0.584482, -0.314129,0.94938,0,0.738873,0.49502,-0.5, -0.041682,0.78334,-0.620195,0.967299,0.505105,-0.640641, 0.08947,0.74633,-0.659535,1.074101,0.505017,-0.638205, 0.099282,0.948291,-0.301476,1.075259,0.534381,-0.575384, 0.099282,0.948291,-0.301476,1.075259,0.534381,-0.575384, -0.090849,0.947666,-0.306066,0.960081,0.534071,-0.576713, -0.041682,0.78334,-0.620195,0.967299,0.505105,-0.640641, 0.099282,0.948291,-0.301476,1.075259,0.534381,-0.575384, 0.156232,0.98772,0,1.075645,0.544169,-0.5, -0.084634,0.996412,0,0.957675,0.543726,-0.5, -0.084634,0.996412,0,0.957675,0.543726,-0.5, -0.090849,0.947666,-0.306066,0.960081,0.534071,-0.576713, 0.099282,0.948291,-0.301476,1.075259,0.534381,-0.575384, -0.084634,0.996412,0,0.957675,0.543726,-0.5, -0.237278,0.971442,0,0.843038,0.524412,-0.5, -0.20497,0.936687,-0.283911,0.848231,0.51478,-0.579984, -0.20497,0.936687,-0.283911,0.848231,0.51478,-0.579984, -0.090849,0.947666,-0.306066,0.960081,0.534071,-0.576713, -0.084634,0.996412,0,0.957675,0.543726,-0.5, -0.142137,0.766468,-0.626358,0.863808,0.485881,-0.646637, -0.041682,0.78334,-0.620195,0.967299,0.505105,-0.640641, -0.090849,0.947666,-0.306066,0.960081,0.534071,-0.576713, -0.142137,0.766468,-0.626358,0.863808,0.485881,-0.646637, -0.090849,0.947666,-0.306066,0.960081,0.534071,-0.576713, -0.20497,0.936687,-0.283911,0.848231,0.51478,-0.579984, 0.099282,0.948291,0.301476,1.075259,0.534381,-0.424615, 0.08947,0.74633,0.659535,1.074101,0.505017,-0.361795, -0.041682,0.78334,0.620195,0.967299,0.505105,-0.359359, -0.041682,0.78334,0.620195,0.967299,0.505105,-0.359359, -0.090849,0.947666,0.306066,0.960081,0.534071,-0.423287, 0.099282,0.948291,0.301476,1.075259,0.534381,-0.424615, -0.142137,0.766468,0.626358,0.863808,0.485881,-0.353363, -0.20497,0.936687,0.283911,0.848231,0.51478,-0.420016, -0.090849,0.947666,0.306066,0.960081,0.534071,-0.423287, -0.142137,0.766468,0.626358,0.863808,0.485881,-0.353363, -0.090849,0.947666,0.306066,0.960081,0.534071,-0.423287, -0.041682,0.78334,0.620195,0.967299,0.505105,-0.359359, -0.20497,0.936687,0.283911,0.848231,0.51478,-0.420016, -0.237278,0.971442,0,0.843038,0.524412,-0.5, -0.084634,0.996412,0,0.957675,0.543726,-0.5, -0.084634,0.996412,0,0.957675,0.543726,-0.5, -0.090849,0.947666,0.306066,0.960081,0.534071,-0.423287, -0.20497,0.936687,0.283911,0.848231,0.51478,-0.420016, -0.084634,0.996412,0,0.957675,0.543726,-0.5, 0.156232,0.98772,0,1.075645,0.544169,-0.5, 0.099282,0.948291,0.301476,1.075259,0.534381,-0.424615, 0.099282,0.948291,0.301476,1.075259,0.534381,-0.424615, -0.090849,0.947666,0.306066,0.960081,0.534071,-0.423287, -0.084634,0.996412,0,0.957675,0.543726,-0.5, -0.218035,0.735069,0.641977,0.691977,0.424648,-0.335934, -0.318419,0.898972,0.300764,0.662233,0.454417,-0.410509, -0.283565,0.912815,0.293871,0.746638,0.485298,-0.415518, -0.218035,0.735069,0.641977,0.691977,0.424648,-0.335934, -0.283565,0.912815,0.293871,0.746638,0.485298,-0.415518, -0.199176,0.745044,0.636583,0.769932,0.456132,-0.345117, -0.318419,0.898972,0.300764,0.662233,0.454417,-0.410509, -0.346116,0.938192,0,0.652318,0.46434,-0.5, -0.314129,0.94938,0,0.738873,0.49502,-0.5, -0.314129,0.94938,0,0.738873,0.49502,-0.5, -0.283565,0.912815,0.293871,0.746638,0.485298,-0.415518, -0.318419,0.898972,0.300764,0.662233,0.454417,-0.410509, -0.237278,0.971442,0,0.843038,0.524412,-0.5, -0.20497,0.936687,0.283911,0.848231,0.51478,-0.420016, -0.283565,0.912815,0.293871,0.746638,0.485298,-0.415518, -0.237278,0.971442,0,0.843038,0.524412,-0.5, -0.283565,0.912815,0.293871,0.746638,0.485298,-0.415518, -0.314129,0.94938,0,0.738873,0.49502,-0.5, -0.20497,0.936687,0.283911,0.848231,0.51478,-0.420016, -0.142137,0.766468,0.626358,0.863808,0.485881,-0.353363, -0.199176,0.745044,0.636583,0.769932,0.456132,-0.345117, -0.199176,0.745044,0.636583,0.769932,0.456132,-0.345117, -0.283565,0.912815,0.293871,0.746638,0.485298,-0.415518, -0.20497,0.936687,0.283911,0.848231,0.51478,-0.420016, -0.042916,0.448451,0.892776,0.741552,0.375033,-0.291188, -0.218035,0.735069,0.641977,0.691977,0.424648,-0.335934, -0.199176,0.745044,0.636583,0.769932,0.456132,-0.345117, -0.199176,0.745044,0.636583,0.769932,0.456132,-0.345117, -0.044996,0.438512,0.897598,0.808756,0.407522,-0.302876, -0.042916,0.448451,0.892776,0.741552,0.375033,-0.291188, -0.142137,0.766468,0.626358,0.863808,0.485881,-0.353363, -0.024081,0.437847,0.898727,0.88977,0.437716,-0.313371, -0.044996,0.438512,0.897598,0.808756,0.407522,-0.302876, -0.142137,0.766468,0.626358,0.863808,0.485881,-0.353363, -0.044996,0.438512,0.897598,0.808756,0.407522,-0.302876, -0.199176,0.745044,0.636583,0.769932,0.456132,-0.345117, -0.024081,0.437847,0.898727,0.88977,0.437716,-0.313371, 0.124797,0.069981,0.989711,0.920924,0.379919,-0.30004, 0.142808,0.115868,0.982945,0.855345,0.34919,-0.288796, 0.142808,0.115868,0.982945,0.855345,0.34919,-0.288796, -0.044996,0.438512,0.897598,0.808756,0.407522,-0.302876, -0.024081,0.437847,0.898727,0.88977,0.437716,-0.313371, 0.160738,0.160922,0.97379,0.801042,0.315496,-0.276273, -0.042916,0.448451,0.892776,0.741552,0.375033,-0.291188, -0.044996,0.438512,0.897598,0.808756,0.407522,-0.302876, 0.160738,0.160922,0.97379,0.801042,0.315496,-0.276273, -0.044996,0.438512,0.897598,0.808756,0.407522,-0.302876, 0.142808,0.115868,0.982945,0.855345,0.34919,-0.288796, 0.08947,0.74633,0.659535,1.074101,0.505017,-0.361795, 0.076521,0.412911,0.907551,1.072171,0.456076,-0.324103, 0.017449,0.433004,0.901223,0.97933,0.45683,-0.321002, 0.08947,0.74633,0.659535,1.074101,0.505017,-0.361795, 0.017449,0.433004,0.901223,0.97933,0.45683,-0.321002, -0.041682,0.78334,0.620195,0.967299,0.505105,-0.359359, 0.076521,0.412911,0.907551,1.072171,0.456076,-0.324103, 0.012549,-0.001301,0.99992,1.069855,0.397346,-0.311539, 0.086047,0.023651,0.99601,0.993766,0.398899,-0.308217, 0.086047,0.023651,0.99601,0.993766,0.398899,-0.308217, 0.017449,0.433004,0.901223,0.97933,0.45683,-0.321002, 0.076521,0.412911,0.907551,1.072171,0.456076,-0.324103, 0.124797,0.069981,0.989711,0.920924,0.379919,-0.30004, -0.024081,0.437847,0.898727,0.88977,0.437716,-0.313371, 0.017449,0.433004,0.901223,0.97933,0.45683,-0.321002, 0.124797,0.069981,0.989711,0.920924,0.379919,-0.30004, 0.017449,0.433004,0.901223,0.97933,0.45683,-0.321002, 0.086047,0.023651,0.99601,0.993766,0.398899,-0.308217, -0.024081,0.437847,0.898727,0.88977,0.437716,-0.313371, -0.142137,0.766468,0.626358,0.863808,0.485881,-0.353363, -0.041682,0.78334,0.620195,0.967299,0.505105,-0.359359, -0.041682,0.78334,0.620195,0.967299,0.505105,-0.359359, 0.017449,0.433004,0.901223,0.97933,0.45683,-0.321002, -0.024081,0.437847,0.898727,0.88977,0.437716,-0.313371, -0.094868,-0.409964,0.907155,1.067539,0.338617,-0.324103, -0.30458,-0.744204,0.594467,1.065609,0.289676,-0.361795, 0.223486,-0.713834,0.663698,1.020234,0.292692,-0.359359, 0.223486,-0.713834,0.663698,1.020234,0.292692,-0.359359, 0.118719,-0.361063,0.924954,1.008203,0.340968,-0.321002, -0.094868,-0.409964,0.907155,1.067539,0.338617,-0.324103, 0.223486,-0.713834,0.663698,1.020234,0.292692,-0.359359, 0.514373,-0.562786,0.647064,0.978041,0.273957,-0.353363, 0.281389,-0.318776,0.905098,0.952079,0.322122,-0.313371, 0.281389,-0.318776,0.905098,0.952079,0.322122,-0.313371, 0.118719,-0.361063,0.924954,1.008203,0.340968,-0.321002, 0.223486,-0.713834,0.663698,1.020234,0.292692,-0.359359, 0.281389,-0.318776,0.905098,0.952079,0.322122,-0.313371, 0.124797,0.069981,0.989711,0.920924,0.379919,-0.30004, 0.086047,0.023651,0.99601,0.993766,0.398899,-0.308217, 0.086047,0.023651,0.99601,0.993766,0.398899,-0.308217, 0.118719,-0.361063,0.924954,1.008203,0.340968,-0.321002, 0.281389,-0.318776,0.905098,0.952079,0.322122,-0.313371, 0.012549,-0.001301,0.99992,1.069855,0.397346,-0.311539, -0.094868,-0.409964,0.907155,1.067539,0.338617,-0.324103, 0.118719,-0.361063,0.924954,1.008203,0.340968,-0.321002, 0.012549,-0.001301,0.99992,1.069855,0.397346,-0.311539, 0.118719,-0.361063,0.924954,1.008203,0.340968,-0.321002, 0.086047,0.023651,0.99601,0.993766,0.398899,-0.308217, 0.585878,-0.414463,0.696396,0.940757,0.242249,-0.345117, 0.66282,-0.338306,0.667996,0.910107,0.206343,-0.335934, 0.398283,-0.122544,0.90904,0.860532,0.255958,-0.291188, 0.398283,-0.122544,0.90904,0.860532,0.255958,-0.291188, 0.362669,-0.212082,0.907465,0.901933,0.290859,-0.302876, 0.585878,-0.414463,0.696396,0.940757,0.242249,-0.345117, 0.398283,-0.122544,0.90904,0.860532,0.255958,-0.291188, 0.160738,0.160922,0.97379,0.801042,0.315496,-0.276273, 0.142808,0.115868,0.982945,0.855345,0.34919,-0.288796, 0.142808,0.115868,0.982945,0.855345,0.34919,-0.288796, 0.362669,-0.212082,0.907465,0.901933,0.290859,-0.302876, 0.398283,-0.122544,0.90904,0.860532,0.255958,-0.291188, 0.124797,0.069981,0.989711,0.920924,0.379919,-0.30004, 0.281389,-0.318776,0.905098,0.952079,0.322122,-0.313371, 0.362669,-0.212082,0.907465,0.901933,0.290859,-0.302876, 0.124797,0.069981,0.989711,0.920924,0.379919,-0.30004, 0.362669,-0.212082,0.907465,0.901933,0.290859,-0.302876, 0.142808,0.115868,0.982945,0.855345,0.34919,-0.288796, 0.514373,-0.562786,0.647064,0.978041,0.273957,-0.353363, 0.585878,-0.414463,0.696396,0.940757,0.242249,-0.345117, 0.362669,-0.212082,0.907465,0.901933,0.290859,-0.302876, 0.514373,-0.562786,0.647064,0.978041,0.273957,-0.353363, 0.362669,-0.212082,0.907465,0.901933,0.290859,-0.302876, 0.281389,-0.318776,0.905098,0.952079,0.322122,-0.313371, 0.66282,-0.338306,0.667996,0.910107,0.206343,-0.335934, 0.585878,-0.414463,0.696396,0.940757,0.242249,-0.345117, 0.748153,-0.579603,0.322997,0.964051,0.213083,-0.415518, 0.66282,-0.338306,0.667996,0.910107,0.206343,-0.335934, 0.748153,-0.579603,0.322997,0.964051,0.213083,-0.415518, 0.828154,-0.461264,0.318428,0.939852,0.176575,-0.410509, 0.514373,-0.562786,0.647064,0.978041,0.273957,-0.353363, 0.575394,-0.755507,0.31326,0.993618,0.245059,-0.420016, 0.748153,-0.579603,0.322997,0.964051,0.213083,-0.415518, 0.514373,-0.562786,0.647064,0.978041,0.273957,-0.353363, 0.748153,-0.579603,0.322997,0.964051,0.213083,-0.415518, 0.585878,-0.414463,0.696396,0.940757,0.242249,-0.345117, 0.637531,-0.770425,0,0.998811,0.235426,-0.5, 0.82345,-0.567389,0,0.971816,0.203361,-0.5, 0.748153,-0.579603,0.322997,0.964051,0.213083,-0.415518, 0.637531,-0.770425,0,0.998811,0.235426,-0.5, 0.748153,-0.579603,0.322997,0.964051,0.213083,-0.415518, 0.575394,-0.755507,0.31326,0.993618,0.245059,-0.420016, 0.82345,-0.567389,0,0.971816,0.203361,-0.5, 0.879883,-0.475191,0,0.949767,0.166652,-0.5, 0.828154,-0.461264,0.318428,0.939852,0.176575,-0.410509, 0.828154,-0.461264,0.318428,0.939852,0.176575,-0.410509, 0.748153,-0.579603,0.322997,0.964051,0.213083,-0.415518, 0.82345,-0.567389,0,0.971816,0.203361,-0.5, -0.30458,-0.744204,0.594467,1.065609,0.289676,-0.361795, -0.393741,-0.892942,0.218225,1.064451,0.260311,-0.424615, 0.224558,-0.931869,0.284944,1.027452,0.263727,-0.423287, -0.30458,-0.744204,0.594467,1.065609,0.289676,-0.361795, 0.224558,-0.931869,0.284944,1.027452,0.263727,-0.423287, 0.223486,-0.713834,0.663698,1.020234,0.292692,-0.359359, -0.393741,-0.892942,0.218225,1.064451,0.260311,-0.424615, -0.417976,-0.908458,0,1.064065,0.250523,-0.5, 0.113113,-0.993582,0,1.029858,0.254072,-0.5, 0.113113,-0.993582,0,1.029858,0.254072,-0.5, 0.224558,-0.931869,0.284944,1.027452,0.263727,-0.423287, -0.393741,-0.892942,0.218225,1.064451,0.260311,-0.424615, 0.637531,-0.770425,0,0.998811,0.235426,-0.5, 0.575394,-0.755507,0.31326,0.993618,0.245059,-0.420016, 0.224558,-0.931869,0.284944,1.027452,0.263727,-0.423287, 0.637531,-0.770425,0,0.998811,0.235426,-0.5, 0.224558,-0.931869,0.284944,1.027452,0.263727,-0.423287, 0.113113,-0.993582,0,1.029858,0.254072,-0.5, 0.575394,-0.755507,0.31326,0.993618,0.245059,-0.420016, 0.514373,-0.562786,0.647064,0.978041,0.273957,-0.353363, 0.223486,-0.713834,0.663698,1.020234,0.292692,-0.359359, 0.223486,-0.713834,0.663698,1.020234,0.292692,-0.359359, 0.224558,-0.931869,0.284944,1.027452,0.263727,-0.423287, 0.575394,-0.755507,0.31326,0.993618,0.245059,-0.420016, -0.30458,-0.744204,-0.594467,1.065609,0.289676,-0.638205, 0.223486,-0.713834,-0.663698,1.020234,0.292692,-0.640641, 0.224558,-0.931869,-0.284944,1.027452,0.263727,-0.576713, -0.30458,-0.744204,-0.594467,1.065609,0.289676,-0.638205, 0.224558,-0.931869,-0.284944,1.027452,0.263727,-0.576713, -0.39374,-0.892943,-0.218225,1.064451,0.260311,-0.575384, 0.223486,-0.713834,-0.663698,1.020234,0.292692,-0.640641, 0.514373,-0.562786,-0.647064,0.978041,0.273957,-0.646637, 0.575393,-0.755507,-0.31326,0.993618,0.245059,-0.579984, 0.575393,-0.755507,-0.31326,0.993618,0.245059,-0.579984, 0.224558,-0.931869,-0.284944,1.027452,0.263727,-0.576713, 0.223486,-0.713834,-0.663698,1.020234,0.292692,-0.640641, 0.637531,-0.770425,0,0.998811,0.235426,-0.5, 0.113113,-0.993582,0,1.029858,0.254072,-0.5, 0.224558,-0.931869,-0.284944,1.027452,0.263727,-0.576713, 0.637531,-0.770425,0,0.998811,0.235426,-0.5, 0.224558,-0.931869,-0.284944,1.027452,0.263727,-0.576713, 0.575393,-0.755507,-0.31326,0.993618,0.245059,-0.579984, 0.113113,-0.993582,0,1.029858,0.254072,-0.5, -0.417976,-0.908458,0,1.064065,0.250523,-0.5, -0.39374,-0.892943,-0.218225,1.064451,0.260311,-0.575384, -0.39374,-0.892943,-0.218225,1.064451,0.260311,-0.575384, 0.224558,-0.931869,-0.284944,1.027452,0.263727,-0.576713, 0.113113,-0.993582,0,1.029858,0.254072,-0.5, 0.66282,-0.338306,-0.667996,0.910107,0.206343,-0.664066, 0.828154,-0.461264,-0.318429,0.939852,0.176575,-0.589491, 0.748153,-0.579603,-0.322997,0.964051,0.213083,-0.584482, 0.66282,-0.338306,-0.667996,0.910107,0.206343,-0.664066, 0.748153,-0.579603,-0.322997,0.964051,0.213083,-0.584482, 0.585878,-0.414463,-0.696396,0.940757,0.242249,-0.654883, 0.828154,-0.461264,-0.318429,0.939852,0.176575,-0.589491, 0.879883,-0.475191,0,0.949767,0.166652,-0.5, 0.82345,-0.567389,0,0.971816,0.203361,-0.5, 0.82345,-0.567389,0,0.971816,0.203361,-0.5, 0.748153,-0.579603,-0.322997,0.964051,0.213083,-0.584482, 0.828154,-0.461264,-0.318429,0.939852,0.176575,-0.589491, 0.637531,-0.770425,0,0.998811,0.235426,-0.5, 0.575393,-0.755507,-0.31326,0.993618,0.245059,-0.579984, 0.748153,-0.579603,-0.322997,0.964051,0.213083,-0.584482, 0.637531,-0.770425,0,0.998811,0.235426,-0.5, 0.748153,-0.579603,-0.322997,0.964051,0.213083,-0.584482, 0.82345,-0.567389,0,0.971816,0.203361,-0.5, 0.514373,-0.562786,-0.647064,0.978041,0.273957,-0.646637, 0.585878,-0.414463,-0.696396,0.940757,0.242249,-0.654883, 0.748153,-0.579603,-0.322997,0.964051,0.213083,-0.584482, 0.514373,-0.562786,-0.647064,0.978041,0.273957,-0.646637, 0.748153,-0.579603,-0.322997,0.964051,0.213083,-0.584482, 0.575393,-0.755507,-0.31326,0.993618,0.245059,-0.579984, 0.65574,-0.380493,0.652097,0.887817,0.175019,-0.327123, 0.66282,-0.338306,0.667996,0.910107,0.206343,-0.335934, 0.828154,-0.461264,0.318428,0.939852,0.176575,-0.410509, 0.828154,-0.461264,0.318428,0.939852,0.176575,-0.410509, 0.788892,-0.514111,0.336659,0.922122,0.14431,-0.405704, 0.65574,-0.380493,0.652097,0.887817,0.175019,-0.327123, 0.879883,-0.475191,0,0.949767,0.166652,-0.5, 0.818537,-0.574454,0,0.933557,0.134073,-0.5, 0.788892,-0.514111,0.336659,0.922122,0.14431,-0.405704, 0.879883,-0.475191,0,0.949767,0.166652,-0.5, 0.788892,-0.514111,0.336659,0.922122,0.14431,-0.405704, 0.828154,-0.461264,0.318428,0.939852,0.176575,-0.410509, 0.818537,-0.574454,0,0.933557,0.134073,-0.5, 0.394485,-0.918903,0,0.915792,0.112008,-0.5, 0.520237,-0.801686,0.294369,0.90384,0.122594,-0.405051, 0.520237,-0.801686,0.294369,0.90384,0.122594,-0.405051, 0.788892,-0.514111,0.336659,0.922122,0.14431,-0.405704, 0.818537,-0.574454,0,0.933557,0.134073,-0.5, 0.31991,-0.691022,0.648187,0.867858,0.153664,-0.325812, 0.65574,-0.380493,0.652097,0.887817,0.175019,-0.327123, 0.788892,-0.514111,0.336659,0.922122,0.14431,-0.405704, 0.31991,-0.691022,0.648187,0.867858,0.153664,-0.325812, 0.788892,-0.514111,0.336659,0.922122,0.14431,-0.405704, 0.520237,-0.801686,0.294369,0.90384,0.122594,-0.405051, 0.828154,-0.461264,-0.318429,0.939852,0.176575,-0.589491, 0.66282,-0.338306,-0.667996,0.910107,0.206343,-0.664066, 0.65574,-0.380493,-0.652097,0.887817,0.175019,-0.672877, 0.65574,-0.380493,-0.652097,0.887817,0.175019,-0.672877, 0.788892,-0.514111,-0.336659,0.922122,0.14431,-0.594296, 0.828154,-0.461264,-0.318429,0.939852,0.176575,-0.589491, 0.31991,-0.691022,-0.648187,0.867858,0.153664,-0.674188, 0.520237,-0.801686,-0.29437,0.90384,0.122594,-0.594949, 0.788892,-0.514111,-0.336659,0.922122,0.14431,-0.594296, 0.31991,-0.691022,-0.648187,0.867858,0.153664,-0.674188, 0.788892,-0.514111,-0.336659,0.922122,0.14431,-0.594296, 0.65574,-0.380493,-0.652097,0.887817,0.175019,-0.672877, 0.520237,-0.801686,-0.29437,0.90384,0.122594,-0.594949, 0.394485,-0.918903,0,0.915792,0.112008,-0.5, 0.818537,-0.574454,0,0.933557,0.134073,-0.5, 0.818537,-0.574454,0,0.933557,0.134073,-0.5, 0.788892,-0.514111,-0.336659,0.922122,0.14431,-0.594296, 0.520237,-0.801686,-0.29437,0.90384,0.122594,-0.594949, 0.879883,-0.475191,0,0.949767,0.166652,-0.5, 0.828154,-0.461264,-0.318429,0.939852,0.176575,-0.589491, 0.788892,-0.514111,-0.336659,0.922122,0.14431,-0.594296, 0.879883,-0.475191,0,0.949767,0.166652,-0.5, 0.788892,-0.514111,-0.336659,0.922122,0.14431,-0.594296, 0.818537,-0.574454,0,0.933557,0.134073,-0.5, -0.464025,-0.863104,-0.199329,0.820528,0.154011,-0.638667, -0.4837,-0.869471,-0.100277,0.83753,0.13389,-0.5825, -0.146037,-0.967926,-0.204432,0.877985,0.117734,-0.5875, -0.464025,-0.863104,-0.199329,0.820528,0.154011,-0.638667, -0.146037,-0.967926,-0.204432,0.877985,0.117734,-0.5875, -0.23383,-0.86988,-0.434318,0.844199,0.147671,-0.660875, -0.435927,-0.899982,0,0.846018,0.123878,-0.5, -0.093893,-0.995582,0,0.889078,0.10684,-0.5, -0.146037,-0.967926,-0.204432,0.877985,0.117734,-0.5875, -0.435927,-0.899982,0,0.846018,0.123878,-0.5, -0.146037,-0.967926,-0.204432,0.877985,0.117734,-0.5875, -0.4837,-0.869471,-0.100277,0.83753,0.13389,-0.5825, 0.394485,-0.918903,0,0.915792,0.112008,-0.5, 0.520237,-0.801686,-0.29437,0.90384,0.122594,-0.594949, -0.146037,-0.967926,-0.204432,0.877985,0.117734,-0.5875, 0.394485,-0.918903,0,0.915792,0.112008,-0.5, -0.146037,-0.967926,-0.204432,0.877985,0.117734,-0.5875, -0.093893,-0.995582,0,0.889078,0.10684,-0.5, 0.31991,-0.691022,-0.648187,0.867858,0.153664,-0.674188, -0.23383,-0.86988,-0.434318,0.844199,0.147671,-0.660875, -0.146037,-0.967926,-0.204432,0.877985,0.117734,-0.5875, 0.31991,-0.691022,-0.648187,0.867858,0.153664,-0.674188, -0.146037,-0.967926,-0.204432,0.877985,0.117734,-0.5875, 0.520237,-0.801686,-0.29437,0.90384,0.122594,-0.594949, -0.464025,-0.863104,0.199329,0.820528,0.154011,-0.361333, -0.23383,-0.86988,0.434318,0.844199,0.147671,-0.339125, -0.146037,-0.967926,0.204432,0.877985,0.117734,-0.4125, -0.464025,-0.863104,0.199329,0.820528,0.154011,-0.361333, -0.146037,-0.967926,0.204432,0.877985,0.117734,-0.4125, -0.4837,-0.869471,0.100277,0.83753,0.13389,-0.4175, 0.31991,-0.691022,0.648187,0.867858,0.153664,-0.325812, 0.520237,-0.801686,0.294369,0.90384,0.122594,-0.405051, -0.146037,-0.967926,0.204432,0.877985,0.117734,-0.4125, 0.31991,-0.691022,0.648187,0.867858,0.153664,-0.325812, -0.146037,-0.967926,0.204432,0.877985,0.117734,-0.4125, -0.23383,-0.86988,0.434318,0.844199,0.147671,-0.339125, 0.394485,-0.918903,0,0.915792,0.112008,-0.5, -0.093893,-0.995582,0,0.889078,0.10684,-0.5, -0.146037,-0.967926,0.204432,0.877985,0.117734,-0.4125, 0.394485,-0.918903,0,0.915792,0.112008,-0.5, -0.146037,-0.967926,0.204432,0.877985,0.117734,-0.4125, 0.520237,-0.801686,0.294369,0.90384,0.122594,-0.405051, -0.435927,-0.899982,0,0.846018,0.123878,-0.5, -0.4837,-0.869471,0.100277,0.83753,0.13389,-0.4175, -0.146037,-0.967926,0.204432,0.877985,0.117734,-0.4125, -0.435927,-0.899982,0,0.846018,0.123878,-0.5, -0.146037,-0.967926,0.204432,0.877985,0.117734,-0.4125, -0.093893,-0.995582,0,0.889078,0.10684,-0.5, 0.66282,-0.338306,-0.667996,0.910107,0.206343,-0.664066, 0.398283,-0.122544,-0.90904,0.860532,0.255958,-0.708812, 0.378094,-0.147323,-0.91397,0.830643,0.2262,-0.720025, 0.66282,-0.338306,-0.667996,0.910107,0.206343,-0.664066, 0.378094,-0.147323,-0.91397,0.830643,0.2262,-0.720025, 0.65574,-0.380493,-0.652097,0.887817,0.175019,-0.672877, 0.160738,0.160922,-0.97379,0.801042,0.315496,-0.723727, 0.108083,0.116579,-0.987283,0.762033,0.287619,-0.735741, 0.378094,-0.147323,-0.91397,0.830643,0.2262,-0.720025, 0.160738,0.160922,-0.97379,0.801042,0.315496,-0.723727, 0.378094,-0.147323,-0.91397,0.830643,0.2262,-0.720025, 0.398283,-0.122544,-0.90904,0.860532,0.255958,-0.708812, 0.108083,0.116579,-0.987283,0.762033,0.287619,-0.735741, -0.233968,-0.2359,-0.943191,0.735693,0.265534,-0.73806, 0.024413,-0.469703,-0.882487,0.807717,0.204533,-0.722006, 0.024413,-0.469703,-0.882487,0.807717,0.204533,-0.722006, 0.378094,-0.147323,-0.91397,0.830643,0.2262,-0.720025, 0.108083,0.116579,-0.987283,0.762033,0.287619,-0.735741, 0.31991,-0.691022,-0.648187,0.867858,0.153664,-0.674188, 0.65574,-0.380493,-0.652097,0.887817,0.175019,-0.672877, 0.378094,-0.147323,-0.91397,0.830643,0.2262,-0.720025, 0.31991,-0.691022,-0.648187,0.867858,0.153664,-0.674188, 0.378094,-0.147323,-0.91397,0.830643,0.2262,-0.720025, 0.024413,-0.469703,-0.882487,0.807717,0.204533,-0.722006, -0.218035,0.735069,-0.641977,0.691977,0.424648,-0.664066, -0.304611,0.675798,-0.6712,0.636249,0.400218,-0.672877, -0.106617,0.392034,-0.913752,0.693423,0.349037,-0.720025, -0.218035,0.735069,-0.641977,0.691977,0.424648,-0.664066, -0.106617,0.392034,-0.913752,0.693423,0.349037,-0.720025, -0.042916,0.448451,-0.892776,0.741552,0.375033,-0.708812, -0.304611,0.675798,-0.6712,0.636249,0.400218,-0.672877, -0.638487,0.393678,-0.661326,0.60431,0.378335,-0.674188, -0.462569,0.070189,-0.8838,0.66406,0.327,-0.722006, -0.462569,0.070189,-0.8838,0.66406,0.327,-0.722006, -0.106617,0.392034,-0.913752,0.693423,0.349037,-0.720025, -0.304611,0.675798,-0.6712,0.636249,0.400218,-0.672877, -0.233968,-0.2359,-0.943191,0.735693,0.265534,-0.73806, 0.108083,0.116579,-0.987283,0.762033,0.287619,-0.735741, -0.106617,0.392034,-0.913752,0.693423,0.349037,-0.720025, -0.233968,-0.2359,-0.943191,0.735693,0.265534,-0.73806, -0.106617,0.392034,-0.913752,0.693423,0.349037,-0.720025, -0.462569,0.070189,-0.8838,0.66406,0.327,-0.722006, 0.108083,0.116579,-0.987283,0.762033,0.287619,-0.735741, 0.160738,0.160922,-0.97379,0.801042,0.315496,-0.723727, -0.042916,0.448451,-0.892776,0.741552,0.375033,-0.708812, -0.042916,0.448451,-0.892776,0.741552,0.375033,-0.708812, -0.106617,0.392034,-0.913752,0.693423,0.349037,-0.720025, 0.108083,0.116579,-0.987283,0.762033,0.287619,-0.735741, -0.838454,-0.308168,-0.449475,0.597724,0.354488,-0.660875, -0.772673,-0.608887,-0.179534,0.608078,0.332278,-0.638667, -0.712429,-0.672822,-0.199386,0.648221,0.292739,-0.664625, -0.712429,-0.672822,-0.199386,0.648221,0.292739,-0.664625, -0.660431,-0.496512,-0.563299,0.653151,0.306393,-0.706, -0.838454,-0.308168,-0.449475,0.597724,0.354488,-0.660875, -0.635534,-0.736296,-0.232302,0.709997,0.238013,-0.677562, -0.531095,-0.656282,-0.53594,0.719399,0.249218,-0.7215, -0.660431,-0.496512,-0.563299,0.653151,0.306393,-0.706, -0.635534,-0.736296,-0.232302,0.709997,0.238013,-0.677562, -0.660431,-0.496512,-0.563299,0.653151,0.306393,-0.706, -0.712429,-0.672822,-0.199386,0.648221,0.292739,-0.664625, -0.233968,-0.2359,-0.943191,0.735693,0.265534,-0.73806, -0.462569,0.070189,-0.8838,0.66406,0.327,-0.722006, -0.660431,-0.496512,-0.563299,0.653151,0.306393,-0.706, -0.233968,-0.2359,-0.943191,0.735693,0.265534,-0.73806, -0.660431,-0.496512,-0.563299,0.653151,0.306393,-0.706, -0.531095,-0.656282,-0.53594,0.719399,0.249218,-0.7215, -0.462569,0.070189,-0.8838,0.66406,0.327,-0.722006, -0.638487,0.393678,-0.661326,0.60431,0.378335,-0.674188, -0.838454,-0.308168,-0.449475,0.597724,0.354488,-0.660875, -0.838454,-0.308168,-0.449475,0.597724,0.354488,-0.660875, -0.660431,-0.496512,-0.563299,0.653151,0.306393,-0.706, -0.462569,0.070189,-0.8838,0.66406,0.327,-0.722006, -0.464025,-0.863104,-0.199329,0.820528,0.154011,-0.638667, -0.23383,-0.86988,-0.434318,0.844199,0.147671,-0.660875, -0.376394,-0.756788,-0.534415,0.787209,0.193905,-0.706, -0.464025,-0.863104,-0.199329,0.820528,0.154011,-0.638667, -0.376394,-0.756788,-0.534415,0.787209,0.193905,-0.706, -0.552608,-0.806562,-0.209959,0.774619,0.186679,-0.664625, -0.23383,-0.86988,-0.434318,0.844199,0.147671,-0.660875, 0.31991,-0.691022,-0.648187,0.867858,0.153664,-0.674188, 0.024413,-0.469703,-0.882487,0.807717,0.204533,-0.722006, 0.024413,-0.469703,-0.882487,0.807717,0.204533,-0.722006, -0.376394,-0.756788,-0.534415,0.787209,0.193905,-0.706, -0.23383,-0.86988,-0.434318,0.844199,0.147671,-0.660875, -0.233968,-0.2359,-0.943191,0.735693,0.265534,-0.73806, -0.531095,-0.656282,-0.53594,0.719399,0.249218,-0.7215, -0.376394,-0.756788,-0.534415,0.787209,0.193905,-0.706, -0.233968,-0.2359,-0.943191,0.735693,0.265534,-0.73806, -0.376394,-0.756788,-0.534415,0.787209,0.193905,-0.706, 0.024413,-0.469703,-0.882487,0.807717,0.204533,-0.722006, -0.531095,-0.656282,-0.53594,0.719399,0.249218,-0.7215, -0.635534,-0.736296,-0.232302,0.709997,0.238013,-0.677562, -0.552608,-0.806562,-0.209959,0.774619,0.186679,-0.664625, -0.552608,-0.806562,-0.209959,0.774619,0.186679,-0.664625, -0.376394,-0.756788,-0.534415,0.787209,0.193905,-0.706, -0.531095,-0.656282,-0.53594,0.719399,0.249218,-0.7215, -0.304611,0.675798,-0.6712,0.636249,0.400218,-0.672877, -0.218035,0.735069,-0.641977,0.691977,0.424648,-0.664066, -0.31842,0.898971,-0.300764,0.662233,0.454417,-0.589491, -0.31842,0.898971,-0.300764,0.662233,0.454417,-0.589491, -0.419827,0.848984,-0.320893,0.601944,0.430927,-0.594296, -0.304611,0.675798,-0.6712,0.636249,0.400218,-0.672877, -0.346116,0.938192,0,0.652318,0.46434,-0.5, -0.477849,0.878442,0,0.590509,0.441164,-0.5, -0.419827,0.848984,-0.320893,0.601944,0.430927,-0.594296, -0.346116,0.938192,0,0.652318,0.46434,-0.5, -0.419827,0.848984,-0.320893,0.601944,0.430927,-0.594296, -0.31842,0.898971,-0.300764,0.662233,0.454417,-0.589491, -0.477849,0.878442,0,0.590509,0.441164,-0.5, -0.89858,0.43881,0,0.555594,0.41906,-0.5, -0.801359,0.491779,-0.340556,0.567937,0.40894,-0.594949, -0.801359,0.491779,-0.340556,0.567937,0.40894,-0.594949, -0.419827,0.848984,-0.320893,0.601944,0.430927,-0.594296, -0.477849,0.878442,0,0.590509,0.441164,-0.5, -0.638487,0.393678,-0.661326,0.60431,0.378335,-0.674188, -0.304611,0.675798,-0.6712,0.636249,0.400218,-0.672877, -0.419827,0.848984,-0.320893,0.601944,0.430927,-0.594296, -0.638487,0.393678,-0.661326,0.60431,0.378335,-0.674188, -0.419827,0.848984,-0.320893,0.601944,0.430927,-0.594296, -0.801359,0.491779,-0.340556,0.567937,0.40894,-0.594949, -0.318419,0.898972,0.300764,0.662233,0.454417,-0.410509, -0.218035,0.735069,0.641977,0.691977,0.424648,-0.335934, -0.304611,0.675798,0.6712,0.636249,0.400218,-0.327123, -0.304611,0.675798,0.6712,0.636249,0.400218,-0.327123, -0.419827,0.848984,0.320893,0.601944,0.430927,-0.405704, -0.318419,0.898972,0.300764,0.662233,0.454417,-0.410509, -0.638487,0.393678,0.661326,0.60431,0.378335,-0.325812, -0.801358,0.491779,0.340556,0.567937,0.40894,-0.405051, -0.419827,0.848984,0.320893,0.601944,0.430927,-0.405704, -0.638487,0.393678,0.661326,0.60431,0.378335,-0.325812, -0.419827,0.848984,0.320893,0.601944,0.430927,-0.405704, -0.304611,0.675798,0.6712,0.636249,0.400218,-0.327123, -0.801358,0.491779,0.340556,0.567937,0.40894,-0.405051, -0.89858,0.43881,0,0.555594,0.41906,-0.5, -0.477849,0.878442,0,0.590509,0.441164,-0.5, -0.477849,0.878442,0,0.590509,0.441164,-0.5, -0.419827,0.848984,0.320893,0.601944,0.430927,-0.405704, -0.801358,0.491779,0.340556,0.567937,0.40894,-0.405051, -0.346116,0.938192,0,0.652318,0.46434,-0.5, -0.318419,0.898972,0.300764,0.662233,0.454417,-0.410509, -0.419827,0.848984,0.320893,0.601944,0.430927,-0.405704, -0.346116,0.938192,0,0.652318,0.46434,-0.5, -0.419827,0.848984,0.320893,0.601944,0.430927,-0.405704, -0.477849,0.878442,0,0.590509,0.441164,-0.5, -0.772673,-0.608887,0.179534,0.608078,0.332278,-0.361333, -0.772268,-0.627334,0.100277,0.58531,0.345528,-0.4175, -0.944453,-0.263136,0.196897,0.562375,0.382563,-0.4125, -0.772673,-0.608887,0.179534,0.608078,0.332278,-0.361333, -0.944453,-0.263136,0.196897,0.562375,0.382563,-0.4125, -0.838454,-0.308168,0.449475,0.597724,0.354488,-0.339125, -0.810611,-0.585585,0,0.573976,0.352148,-0.5, -0.985168,-0.171594,0,0.54972,0.391595,-0.5, -0.944453,-0.263136,0.196897,0.562375,0.382563,-0.4125, -0.810611,-0.585585,0,0.573976,0.352148,-0.5, -0.944453,-0.263136,0.196897,0.562375,0.382563,-0.4125, -0.772268,-0.627334,0.100277,0.58531,0.345528,-0.4175, -0.89858,0.43881,0,0.555594,0.41906,-0.5, -0.801358,0.491779,0.340556,0.567937,0.40894,-0.405051, -0.944453,-0.263136,0.196897,0.562375,0.382563,-0.4125, -0.89858,0.43881,0,0.555594,0.41906,-0.5, -0.944453,-0.263136,0.196897,0.562375,0.382563,-0.4125, -0.985168,-0.171594,0,0.54972,0.391595,-0.5, -0.801358,0.491779,0.340556,0.567937,0.40894,-0.405051, -0.638487,0.393678,0.661326,0.60431,0.378335,-0.325812, -0.838454,-0.308168,0.449475,0.597724,0.354488,-0.339125, -0.838454,-0.308168,0.449475,0.597724,0.354488,-0.339125, -0.944453,-0.263136,0.196897,0.562375,0.382563,-0.4125, -0.801358,0.491779,0.340556,0.567937,0.40894,-0.405051, -0.772673,-0.608887,-0.179534,0.608078,0.332278,-0.638667, -0.838454,-0.308168,-0.449475,0.597724,0.354488,-0.660875, -0.944453,-0.263136,-0.196896,0.562375,0.382563,-0.5875, -0.772673,-0.608887,-0.179534,0.608078,0.332278,-0.638667, -0.944453,-0.263136,-0.196896,0.562375,0.382563,-0.5875, -0.772268,-0.627334,-0.100277,0.58531,0.345528,-0.5825, -0.838454,-0.308168,-0.449475,0.597724,0.354488,-0.660875, -0.638487,0.393678,-0.661326,0.60431,0.378335,-0.674188, -0.801359,0.491779,-0.340556,0.567937,0.40894,-0.594949, -0.801359,0.491779,-0.340556,0.567937,0.40894,-0.594949, -0.944453,-0.263136,-0.196896,0.562375,0.382563,-0.5875, -0.838454,-0.308168,-0.449475,0.597724,0.354488,-0.660875, -0.89858,0.43881,0,0.555594,0.41906,-0.5, -0.985168,-0.171594,0,0.54972,0.391595,-0.5, -0.944453,-0.263136,-0.196896,0.562375,0.382563,-0.5875, -0.89858,0.43881,0,0.555594,0.41906,-0.5, -0.944453,-0.263136,-0.196896,0.562375,0.382563,-0.5875, -0.801359,0.491779,-0.340556,0.567937,0.40894,-0.594949, -0.810611,-0.585585,0,0.573976,0.352148,-0.5, -0.772268,-0.627334,-0.100277,0.58531,0.345528,-0.5825, -0.944453,-0.263136,-0.196896,0.562375,0.382563,-0.5875, -0.810611,-0.585585,0,0.573976,0.352148,-0.5, -0.944453,-0.263136,-0.196896,0.562375,0.382563,-0.5875, -0.985168,-0.171594,0,0.54972,0.391595,-0.5, -0.218035,0.735069,0.641977,0.691977,0.424648,-0.335934, -0.042916,0.448451,0.892776,0.741552,0.375033,-0.291188, -0.106617,0.392034,0.913752,0.693423,0.349037,-0.279975, -0.218035,0.735069,0.641977,0.691977,0.424648,-0.335934, -0.106617,0.392034,0.913752,0.693423,0.349037,-0.279975, -0.304611,0.675798,0.6712,0.636249,0.400218,-0.327123, -0.042916,0.448451,0.892776,0.741552,0.375033,-0.291188, 0.160738,0.160922,0.97379,0.801042,0.315496,-0.276273, 0.108083,0.116579,0.987283,0.762033,0.287619,-0.264259, 0.108083,0.116579,0.987283,0.762033,0.287619,-0.264259, -0.106617,0.392034,0.913752,0.693423,0.349037,-0.279975, -0.042916,0.448451,0.892776,0.741552,0.375033,-0.291188, -0.233968,-0.2359,0.943191,0.735693,0.265534,-0.26194, -0.462569,0.07019,0.883801,0.66406,0.327,-0.277994, -0.106617,0.392034,0.913752,0.693423,0.349037,-0.279975, -0.233968,-0.2359,0.943191,0.735693,0.265534,-0.26194, -0.106617,0.392034,0.913752,0.693423,0.349037,-0.279975, 0.108083,0.116579,0.987283,0.762033,0.287619,-0.264259, -0.462569,0.07019,0.883801,0.66406,0.327,-0.277994, -0.638487,0.393678,0.661326,0.60431,0.378335,-0.325812, -0.304611,0.675798,0.6712,0.636249,0.400218,-0.327123, -0.304611,0.675798,0.6712,0.636249,0.400218,-0.327123, -0.106617,0.392034,0.913752,0.693423,0.349037,-0.279975, -0.462569,0.07019,0.883801,0.66406,0.327,-0.277994, 0.66282,-0.338306,0.667996,0.910107,0.206343,-0.335934, 0.65574,-0.380493,0.652097,0.887817,0.175019,-0.327123, 0.378094,-0.147323,0.91397,0.830643,0.2262,-0.279975, 0.66282,-0.338306,0.667996,0.910107,0.206343,-0.335934, 0.378094,-0.147323,0.91397,0.830643,0.2262,-0.279975, 0.398283,-0.122544,0.90904,0.860532,0.255958,-0.291188, 0.31991,-0.691022,0.648187,0.867858,0.153664,-0.325812, 0.024414,-0.469703,0.882487,0.807717,0.204533,-0.277994, 0.378094,-0.147323,0.91397,0.830643,0.2262,-0.279975, 0.31991,-0.691022,0.648187,0.867858,0.153664,-0.325812, 0.378094,-0.147323,0.91397,0.830643,0.2262,-0.279975, 0.65574,-0.380493,0.652097,0.887817,0.175019,-0.327123, 0.024414,-0.469703,0.882487,0.807717,0.204533,-0.277994, -0.233968,-0.2359,0.943191,0.735693,0.265534,-0.26194, 0.108083,0.116579,0.987283,0.762033,0.287619,-0.264259, 0.108083,0.116579,0.987283,0.762033,0.287619,-0.264259, 0.378094,-0.147323,0.91397,0.830643,0.2262,-0.279975, 0.024414,-0.469703,0.882487,0.807717,0.204533,-0.277994, 0.160738,0.160922,0.97379,0.801042,0.315496,-0.276273, 0.398283,-0.122544,0.90904,0.860532,0.255958,-0.291188, 0.378094,-0.147323,0.91397,0.830643,0.2262,-0.279975, 0.160738,0.160922,0.97379,0.801042,0.315496,-0.276273, 0.378094,-0.147323,0.91397,0.830643,0.2262,-0.279975, 0.108083,0.116579,0.987283,0.762033,0.287619,-0.264259, -0.464025,-0.863104,0.199329,0.820528,0.154011,-0.361333, -0.552608,-0.806562,0.209959,0.774619,0.186679,-0.335375, -0.376394,-0.756788,0.534415,0.787209,0.193905,-0.294, -0.464025,-0.863104,0.199329,0.820528,0.154011,-0.361333, -0.376394,-0.756788,0.534415,0.787209,0.193905,-0.294, -0.23383,-0.86988,0.434318,0.844199,0.147671,-0.339125, -0.552608,-0.806562,0.209959,0.774619,0.186679,-0.335375, -0.635534,-0.736296,0.232302,0.709997,0.238013,-0.322437, -0.531095,-0.656282,0.53594,0.719399,0.249218,-0.2785, -0.531095,-0.656282,0.53594,0.719399,0.249218,-0.2785, -0.376394,-0.756788,0.534415,0.787209,0.193905,-0.294, -0.552608,-0.806562,0.209959,0.774619,0.186679,-0.335375, -0.233968,-0.2359,0.943191,0.735693,0.265534,-0.26194, 0.024414,-0.469703,0.882487,0.807717,0.204533,-0.277994, -0.376394,-0.756788,0.534415,0.787209,0.193905,-0.294, -0.233968,-0.2359,0.943191,0.735693,0.265534,-0.26194, -0.376394,-0.756788,0.534415,0.787209,0.193905,-0.294, -0.531095,-0.656282,0.53594,0.719399,0.249218,-0.2785, 0.024414,-0.469703,0.882487,0.807717,0.204533,-0.277994, 0.31991,-0.691022,0.648187,0.867858,0.153664,-0.325812, -0.23383,-0.86988,0.434318,0.844199,0.147671,-0.339125, -0.23383,-0.86988,0.434318,0.844199,0.147671,-0.339125, -0.376394,-0.756788,0.534415,0.787209,0.193905,-0.294, 0.024414,-0.469703,0.882487,0.807717,0.204533,-0.277994, -0.712429,-0.672822,0.199385,0.648221,0.292739,-0.335375, -0.772673,-0.608887,0.179534,0.608078,0.332278,-0.361333, -0.838454,-0.308168,0.449475,0.597724,0.354488,-0.339125, -0.838454,-0.308168,0.449475,0.597724,0.354488,-0.339125, -0.660431,-0.496512,0.5633,0.653151,0.306393,-0.294, -0.712429,-0.672822,0.199385,0.648221,0.292739,-0.335375, -0.838454,-0.308168,0.449475,0.597724,0.354488,-0.339125, -0.638487,0.393678,0.661326,0.60431,0.378335,-0.325812, -0.462569,0.07019,0.883801,0.66406,0.327,-0.277994, -0.462569,0.07019,0.883801,0.66406,0.327,-0.277994, -0.660431,-0.496512,0.5633,0.653151,0.306393,-0.294, -0.838454,-0.308168,0.449475,0.597724,0.354488,-0.339125, -0.233968,-0.2359,0.943191,0.735693,0.265534,-0.26194, -0.531095,-0.656282,0.53594,0.719399,0.249218,-0.2785, -0.660431,-0.496512,0.5633,0.653151,0.306393,-0.294, -0.233968,-0.2359,0.943191,0.735693,0.265534,-0.26194, -0.660431,-0.496512,0.5633,0.653151,0.306393,-0.294, -0.462569,0.07019,0.883801,0.66406,0.327,-0.277994, -0.635534,-0.736296,0.232302,0.709997,0.238013,-0.322437, -0.712429,-0.672822,0.199385,0.648221,0.292739,-0.335375, -0.660431,-0.496512,0.5633,0.653151,0.306393,-0.294, -0.635534,-0.736296,0.232302,0.709997,0.238013,-0.322437, -0.660431,-0.496512,0.5633,0.653151,0.306393,-0.294, -0.531095,-0.656282,0.53594,0.719399,0.249218,-0.2785, -0.464025,-0.863104,-0.199329,0.820528,0.154011,-0.638667, -0.552608,-0.806562,-0.209959,0.774619,0.186679,-0.664625, -0.577604,-0.812413,-0.079739,0.775446,0.175219,-0.5905, -0.464025,-0.863104,-0.199329,0.820528,0.154011,-0.638667, -0.577604,-0.812413,-0.079739,0.775446,0.175219,-0.5905, -0.4837,-0.869471,-0.100277,0.83753,0.13389,-0.5825, -0.552608,-0.806562,-0.209959,0.774619,0.186679,-0.664625, -0.635534,-0.736296,-0.232302,0.709997,0.238013,-0.677562, -0.640463,-0.763275,-0.08496,0.704334,0.231264,-0.59775, -0.640463,-0.763275,-0.08496,0.704334,0.231264,-0.59775, -0.577604,-0.812413,-0.079739,0.775446,0.175219,-0.5905, -0.552608,-0.806562,-0.209959,0.774619,0.186679,-0.664625, -0.642787,-0.766045,0,0.702437,0.229003,-0.5, -0.57538,-0.817886,0,0.779215,0.168431,-0.5, -0.577604,-0.812413,-0.079739,0.775446,0.175219,-0.5905, -0.642787,-0.766045,0,0.702437,0.229003,-0.5, -0.577604,-0.812413,-0.079739,0.775446,0.175219,-0.5905, -0.640463,-0.763275,-0.08496,0.704334,0.231264,-0.59775, -0.57538,-0.817886,0,0.779215,0.168431,-0.5, -0.435927,-0.899982,0,0.846018,0.123878,-0.5, -0.4837,-0.869471,-0.100277,0.83753,0.13389,-0.5825, -0.4837,-0.869471,-0.100277,0.83753,0.13389,-0.5825, -0.577604,-0.812413,-0.079739,0.775446,0.175219,-0.5905, -0.57538,-0.817886,0,0.779215,0.168431,-0.5, -0.772673,-0.608887,-0.179534,0.608078,0.332278,-0.638667, -0.772268,-0.627334,-0.100277,0.58531,0.345528,-0.5825, -0.699771,-0.709903,-0.079739,0.636792,0.291564,-0.5905, -0.772673,-0.608887,-0.179534,0.608078,0.332278,-0.638667, -0.699771,-0.709903,-0.079739,0.636792,0.291564,-0.5905, -0.712429,-0.672822,-0.199386,0.648221,0.292739,-0.664625, -0.772268,-0.627334,-0.100277,0.58531,0.345528,-0.5825, -0.810611,-0.585585,0,0.573976,0.352148,-0.5, -0.705547,-0.708663,0,0.629453,0.294096,-0.5, -0.705547,-0.708663,0,0.629453,0.294096,-0.5, -0.699771,-0.709903,-0.079739,0.636792,0.291564,-0.5905, -0.772268,-0.627334,-0.100277,0.58531,0.345528,-0.5825, -0.642787,-0.766045,0,0.702437,0.229003,-0.5, -0.640463,-0.763275,-0.08496,0.704334,0.231264,-0.59775, -0.699771,-0.709903,-0.079739,0.636792,0.291564,-0.5905, -0.642787,-0.766045,0,0.702437,0.229003,-0.5, -0.699771,-0.709903,-0.079739,0.636792,0.291564,-0.5905, -0.705547,-0.708663,0,0.629453,0.294096,-0.5, -0.640463,-0.763275,-0.08496,0.704334,0.231264,-0.59775, -0.635534,-0.736296,-0.232302,0.709997,0.238013,-0.677562, -0.712429,-0.672822,-0.199386,0.648221,0.292739,-0.664625, -0.712429,-0.672822,-0.199386,0.648221,0.292739,-0.664625, -0.699771,-0.709903,-0.079739,0.636792,0.291564,-0.5905, -0.640463,-0.763275,-0.08496,0.704334,0.231264,-0.59775, -0.772673,-0.608887,0.179534,0.608078,0.332278,-0.361333, -0.712429,-0.672822,0.199385,0.648221,0.292739,-0.335375, -0.699771,-0.709903,0.079739,0.636792,0.291564,-0.4095, -0.772673,-0.608887,0.179534,0.608078,0.332278,-0.361333, -0.699771,-0.709903,0.079739,0.636792,0.291564,-0.4095, -0.772268,-0.627334,0.100277,0.58531,0.345528,-0.4175, -0.712429,-0.672822,0.199385,0.648221,0.292739,-0.335375, -0.635534,-0.736296,0.232302,0.709997,0.238013,-0.322437, -0.640463,-0.763275,0.08496,0.704334,0.231264,-0.40225, -0.640463,-0.763275,0.08496,0.704334,0.231264,-0.40225, -0.699771,-0.709903,0.079739,0.636792,0.291564,-0.4095, -0.712429,-0.672822,0.199385,0.648221,0.292739,-0.335375, -0.642787,-0.766045,0,0.702437,0.229003,-0.5, -0.705547,-0.708663,0,0.629453,0.294096,-0.5, -0.699771,-0.709903,0.079739,0.636792,0.291564,-0.4095, -0.642787,-0.766045,0,0.702437,0.229003,-0.5, -0.699771,-0.709903,0.079739,0.636792,0.291564,-0.4095, -0.640463,-0.763275,0.08496,0.704334,0.231264,-0.40225, -0.705547,-0.708663,0,0.629453,0.294096,-0.5, -0.810611,-0.585585,0,0.573976,0.352148,-0.5, -0.772268,-0.627334,0.100277,0.58531,0.345528,-0.4175, -0.772268,-0.627334,0.100277,0.58531,0.345528,-0.4175, -0.699771,-0.709903,0.079739,0.636792,0.291564,-0.4095, -0.705547,-0.708663,0,0.629453,0.294096,-0.5, -0.464025,-0.863104,0.199329,0.820528,0.154011,-0.361333, -0.4837,-0.869471,0.100277,0.83753,0.13389,-0.4175, -0.577604,-0.812413,0.079739,0.775446,0.175219,-0.4095, -0.464025,-0.863104,0.199329,0.820528,0.154011,-0.361333, -0.577604,-0.812413,0.079739,0.775446,0.175219,-0.4095, -0.552608,-0.806562,0.209959,0.774619,0.186679,-0.335375, -0.4837,-0.869471,0.100277,0.83753,0.13389,-0.4175, -0.435927,-0.899982,0,0.846018,0.123878,-0.5, -0.57538,-0.817886,0,0.779215,0.168431,-0.5, -0.57538,-0.817886,0,0.779215,0.168431,-0.5, -0.577604,-0.812413,0.079739,0.775446,0.175219,-0.4095, -0.4837,-0.869471,0.100277,0.83753,0.13389,-0.4175, -0.642787,-0.766045,0,0.702437,0.229003,-0.5, -0.640463,-0.763275,0.08496,0.704334,0.231264,-0.40225, -0.577604,-0.812413,0.079739,0.775446,0.175219,-0.4095, -0.642787,-0.766045,0,0.702437,0.229003,-0.5, -0.577604,-0.812413,0.079739,0.775446,0.175219,-0.4095, -0.57538,-0.817886,0,0.779215,0.168431,-0.5, -0.640463,-0.763275,0.08496,0.704334,0.231264,-0.40225, -0.635534,-0.736296,0.232302,0.709997,0.238013,-0.322437, -0.552608,-0.806562,0.209959,0.774619,0.186679,-0.335375, -0.552608,-0.806562,0.209959,0.774619,0.186679,-0.335375, -0.577604,-0.812413,0.079739,0.775446,0.175219,-0.4095, -0.640463,-0.763275,0.08496,0.704334,0.231264,-0.40225, }; static const struct gllist frame={GL_N3F_V3F,GL_TRIANGLES,1728,data,NULL}; const struct gllist *s1_4=&frame; xscreensaver-5.36/hacks/glx/s1_5.c000644 000767 000024 00000275534 12701612217 016753 0ustar00jwzstaff000000 000000 #include "gllist.h" static const float data[]={ 0.575185,0.562873,-0.59358,0.995497,0.593044,-0.659921, 0.642358,0.715039,-0.275852,0.998334,0.63557,-0.58723, 0.5309,0.794781,-0.294055,0.944384,0.679375,-0.593392, 0.575185,0.562873,-0.59358,0.995497,0.593044,-0.659921, 0.5309,0.794781,-0.294055,0.944384,0.679375,-0.593392, 0.429706,0.63213,-0.644798,0.943249,0.633115,-0.671218, 0.642358,0.715039,-0.275852,0.998334,0.63557,-0.58723, 0.662437,0.749118,0,0.99928,0.649745,-0.5, 0.577305,0.816529,0,0.944762,0.694795,-0.5, 0.577305,0.816529,0,0.944762,0.694795,-0.5, 0.5309,0.794781,-0.294055,0.944384,0.679375,-0.593392, 0.642358,0.715039,-0.275852,0.998334,0.63557,-0.58723, 0.007037,0.999975,0,0.906869,0.713633,-0.5, -0.039712,0.912418,-0.407328,0.907078,0.697653,-0.594723, 0.5309,0.794781,-0.294055,0.944384,0.679375,-0.593392, 0.007037,0.999975,0,0.906869,0.713633,-0.5, 0.5309,0.794781,-0.294055,0.944384,0.679375,-0.593392, 0.577305,0.816529,0,0.944762,0.694795,-0.5, -0.039712,0.912418,-0.407328,0.907078,0.697653,-0.594723, -0.115437,0.702917,-0.701842,0.907098,0.650057,-0.673773, 0.429706,0.63213,-0.644798,0.943249,0.633115,-0.671218, 0.429706,0.63213,-0.644798,0.943249,0.633115,-0.671218, 0.5309,0.794781,-0.294055,0.944384,0.679375,-0.593392, -0.039712,0.912418,-0.407328,0.907078,0.697653,-0.594723, 0.575185,0.562873,0.59358,0.995497,0.593044,-0.340079, 0.429706,0.63213,0.644797,0.943249,0.633115,-0.328782, 0.530901,0.79478,0.294055,0.944384,0.679375,-0.406608, 0.575185,0.562873,0.59358,0.995497,0.593044,-0.340079, 0.530901,0.79478,0.294055,0.944384,0.679375,-0.406608, 0.642358,0.715039,0.275852,0.998334,0.63557,-0.41277, 0.429706,0.63213,0.644797,0.943249,0.633115,-0.328782, -0.115435,0.702917,0.701842,0.907098,0.650057,-0.326227, -0.039712,0.912418,0.407328,0.907078,0.697653,-0.405277, -0.039712,0.912418,0.407328,0.907078,0.697653,-0.405277, 0.530901,0.79478,0.294055,0.944384,0.679375,-0.406608, 0.429706,0.63213,0.644797,0.943249,0.633115,-0.328782, 0.007037,0.999975,0,0.906869,0.713633,-0.5, 0.577305,0.816529,0,0.944762,0.694795,-0.5, 0.530901,0.79478,0.294055,0.944384,0.679375,-0.406608, 0.007037,0.999975,0,0.906869,0.713633,-0.5, 0.530901,0.79478,0.294055,0.944384,0.679375,-0.406608, -0.039712,0.912418,0.407328,0.907078,0.697653,-0.405277, 0.577305,0.816529,0,0.944762,0.694795,-0.5, 0.662437,0.749118,0,0.99928,0.649745,-0.5, 0.642358,0.715039,0.275852,0.998334,0.63557,-0.41277, 0.642358,0.715039,0.275852,0.998334,0.63557,-0.41277, 0.530901,0.79478,0.294055,0.944384,0.679375,-0.406608, 0.577305,0.816529,0,0.944762,0.694795,-0.5, -0.959446,0.199329,0.199329,0.87462,0.619745,-0.361333, -0.976969,0.188349,0.100277,0.870135,0.645704,-0.4175, -0.794244,0.572801,0.20267,0.883764,0.687079,-0.4125, -0.959446,0.199329,0.199329,0.87462,0.619745,-0.361333, -0.794244,0.572801,0.20267,0.883764,0.687079,-0.4125, -0.714284,0.497638,0.492092,0.884979,0.641954,-0.339125, -0.969635,0.244558,0,0.867922,0.658641,-0.5, -0.744977,0.66709,0,0.882548,0.702579,-0.5, -0.794244,0.572801,0.20267,0.883764,0.687079,-0.4125, -0.969635,0.244558,0,0.867922,0.658641,-0.5, -0.794244,0.572801,0.20267,0.883764,0.687079,-0.4125, -0.976969,0.188349,0.100277,0.870135,0.645704,-0.4175, 0.007037,0.999975,0,0.906869,0.713633,-0.5, -0.039712,0.912418,0.407328,0.907078,0.697653,-0.405277, -0.794244,0.572801,0.20267,0.883764,0.687079,-0.4125, 0.007037,0.999975,0,0.906869,0.713633,-0.5, -0.794244,0.572801,0.20267,0.883764,0.687079,-0.4125, -0.744977,0.66709,0,0.882548,0.702579,-0.5, -0.039712,0.912418,0.407328,0.907078,0.697653,-0.405277, -0.115435,0.702917,0.701842,0.907098,0.650057,-0.326227, -0.714284,0.497638,0.492092,0.884979,0.641954,-0.339125, -0.714284,0.497638,0.492092,0.884979,0.641954,-0.339125, -0.794244,0.572801,0.20267,0.883764,0.687079,-0.4125, -0.039712,0.912418,0.407328,0.907078,0.697653,-0.405277, -0.959446,0.199329,-0.199329,0.87462,0.619745,-0.638667, -0.714284,0.497638,-0.492092,0.884979,0.641954,-0.660875, -0.794244,0.572801,-0.202671,0.883764,0.687079,-0.5875, -0.959446,0.199329,-0.199329,0.87462,0.619745,-0.638667, -0.794244,0.572801,-0.202671,0.883764,0.687079,-0.5875, -0.976969,0.188349,-0.100277,0.870135,0.645704,-0.5825, -0.714284,0.497638,-0.492092,0.884979,0.641954,-0.660875, -0.115437,0.702917,-0.701842,0.907098,0.650057,-0.673773, -0.039712,0.912418,-0.407328,0.907078,0.697653,-0.594723, -0.039712,0.912418,-0.407328,0.907078,0.697653,-0.594723, -0.794244,0.572801,-0.202671,0.883764,0.687079,-0.5875, -0.714284,0.497638,-0.492092,0.884979,0.641954,-0.660875, 0.007037,0.999975,0,0.906869,0.713633,-0.5, -0.744977,0.66709,0,0.882548,0.702579,-0.5, -0.794244,0.572801,-0.202671,0.883764,0.687079,-0.5875, 0.007037,0.999975,0,0.906869,0.713633,-0.5, -0.794244,0.572801,-0.202671,0.883764,0.687079,-0.5875, -0.039712,0.912418,-0.407328,0.907078,0.697653,-0.594723, -0.969635,0.244558,0,0.867922,0.658641,-0.5, -0.976969,0.188349,-0.100277,0.870135,0.645704,-0.5825, -0.794244,0.572801,-0.202671,0.883764,0.687079,-0.5875, -0.969635,0.244558,0,0.867922,0.658641,-0.5, -0.794244,0.572801,-0.202671,0.883764,0.687079,-0.5875, -0.744977,0.66709,0,0.882548,0.702579,-0.5, 0.575185,0.562873,0.59358,0.995497,0.593044,-0.340079, 0.447221,0.281892,0.848841,0.990769,0.522168,-0.296464, 0.345209,0.311815,0.885213,0.941357,0.556014,-0.282086, 0.575185,0.562873,0.59358,0.995497,0.593044,-0.340079, 0.345209,0.311815,0.885213,0.941357,0.556014,-0.282086, 0.429706,0.63213,0.644797,0.943249,0.633115,-0.328782, 0.447221,0.281892,0.848841,0.990769,0.522168,-0.296464, 0.291601,-0.024985,0.956214,0.985095,0.437116,-0.281926, 0.214014,-0.011143,0.976767,0.939088,0.463494,-0.26652, 0.214014,-0.011143,0.976767,0.939088,0.463494,-0.26652, 0.345209,0.311815,0.885213,0.941357,0.556014,-0.282086, 0.447221,0.281892,0.848841,0.990769,0.522168,-0.296464, -0.247399,0.003968,0.968906,0.905451,0.476683,-0.262505, -0.23409,0.368714,0.899584,0.906322,0.571188,-0.278521, 0.345209,0.311815,0.885213,0.941357,0.556014,-0.282086, -0.247399,0.003968,0.968906,0.905451,0.476683,-0.262505, 0.345209,0.311815,0.885213,0.941357,0.556014,-0.282086, 0.214014,-0.011143,0.976767,0.939088,0.463494,-0.26652, -0.23409,0.368714,0.899584,0.906322,0.571188,-0.278521, -0.115435,0.702917,0.701842,0.907098,0.650057,-0.326227, 0.429706,0.63213,0.644797,0.943249,0.633115,-0.328782, 0.429706,0.63213,0.644797,0.943249,0.633115,-0.328782, 0.345209,0.311815,0.885213,0.941357,0.556014,-0.282086, -0.23409,0.368714,0.899584,0.906322,0.571188,-0.278521, 0.110573,-0.360361,0.926236,0.979421,0.352064,-0.296464, -0.103837,-0.707557,0.698986,0.974692,0.281188,-0.340079, -0.088988,-0.705766,0.702834,0.934927,0.293873,-0.328782, -0.088988,-0.705766,0.702834,0.934927,0.293873,-0.328782, 0.06872,-0.352527,0.933275,0.936818,0.370973,-0.282086, 0.110573,-0.360361,0.926236,0.979421,0.352064,-0.296464, -0.455383,-0.61687,0.641949,0.905018,0.303308,-0.326227, -0.359172,-0.316853,0.877838,0.905187,0.382177,-0.278521, 0.06872,-0.352527,0.933275,0.936818,0.370973,-0.282086, -0.455383,-0.61687,0.641949,0.905018,0.303308,-0.326227, 0.06872,-0.352527,0.933275,0.936818,0.370973,-0.282086, -0.088988,-0.705766,0.702834,0.934927,0.293873,-0.328782, -0.359172,-0.316853,0.877838,0.905187,0.382177,-0.278521, -0.247399,0.003968,0.968906,0.905451,0.476683,-0.262505, 0.214014,-0.011143,0.976767,0.939088,0.463494,-0.26652, 0.214014,-0.011143,0.976767,0.939088,0.463494,-0.26652, 0.06872,-0.352527,0.933275,0.936818,0.370973,-0.282086, -0.359172,-0.316853,0.877838,0.905187,0.382177,-0.278521, 0.291601,-0.024985,0.956214,0.985095,0.437116,-0.281926, 0.110573,-0.360361,0.926236,0.979421,0.352064,-0.296464, 0.06872,-0.352527,0.933275,0.936818,0.370973,-0.282086, 0.291601,-0.024985,0.956214,0.985095,0.437116,-0.281926, 0.06872,-0.352527,0.933275,0.936818,0.370973,-0.282086, 0.214014,-0.011143,0.976767,0.939088,0.463494,-0.26652, -0.959446,-0.199329,0.199329,0.87462,0.342412,-0.361333, -0.976969,-0.100277,0.18835,0.870135,0.398579,-0.335375, -0.845588,-0.179708,0.502679,0.883764,0.393579,-0.294, -0.959446,-0.199329,0.199329,0.87462,0.342412,-0.361333, -0.845588,-0.179708,0.502679,0.883764,0.393579,-0.294, -0.826326,-0.370128,0.424489,0.884979,0.320204,-0.339125, -0.969635,0,0.244558,0.867922,0.481079,-0.322437, -0.761522,0.030964,0.647398,0.882548,0.481079,-0.2785, -0.845588,-0.179708,0.502679,0.883764,0.393579,-0.294, -0.969635,0,0.244558,0.867922,0.481079,-0.322437, -0.845588,-0.179708,0.502679,0.883764,0.393579,-0.294, -0.976969,-0.100277,0.18835,0.870135,0.398579,-0.335375, -0.247399,0.003968,0.968906,0.905451,0.476683,-0.262505, -0.359172,-0.316853,0.877838,0.905187,0.382177,-0.278521, -0.845588,-0.179708,0.502679,0.883764,0.393579,-0.294, -0.247399,0.003968,0.968906,0.905451,0.476683,-0.262505, -0.845588,-0.179708,0.502679,0.883764,0.393579,-0.294, -0.761522,0.030964,0.647398,0.882548,0.481079,-0.2785, -0.359172,-0.316853,0.877838,0.905187,0.382177,-0.278521, -0.455383,-0.61687,0.641949,0.905018,0.303308,-0.326227, -0.826326,-0.370128,0.424489,0.884979,0.320204,-0.339125, -0.826326,-0.370128,0.424489,0.884979,0.320204,-0.339125, -0.845588,-0.179708,0.502679,0.883764,0.393579,-0.294, -0.359172,-0.316853,0.877838,0.905187,0.382177,-0.278521, -0.959446,0.199329,0.199329,0.87462,0.619745,-0.361333, -0.714284,0.497638,0.492092,0.884979,0.641954,-0.339125, -0.859317,0.197434,0.471799,0.883764,0.568579,-0.294, -0.959446,0.199329,0.199329,0.87462,0.619745,-0.361333, -0.859317,0.197434,0.471799,0.883764,0.568579,-0.294, -0.976969,0.100277,0.18835,0.870135,0.563579,-0.335375, -0.714284,0.497638,0.492092,0.884979,0.641954,-0.339125, -0.115435,0.702917,0.701842,0.907098,0.650057,-0.326227, -0.23409,0.368714,0.899584,0.906322,0.571188,-0.278521, -0.23409,0.368714,0.899584,0.906322,0.571188,-0.278521, -0.859317,0.197434,0.471799,0.883764,0.568579,-0.294, -0.714284,0.497638,0.492092,0.884979,0.641954,-0.339125, -0.23409,0.368714,0.899584,0.906322,0.571188,-0.278521, -0.247399,0.003968,0.968906,0.905451,0.476683,-0.262505, -0.761522,0.030964,0.647398,0.882548,0.481079,-0.2785, -0.761522,0.030964,0.647398,0.882548,0.481079,-0.2785, -0.859317,0.197434,0.471799,0.883764,0.568579,-0.294, -0.23409,0.368714,0.899584,0.906322,0.571188,-0.278521, -0.969635,0,0.244558,0.867922,0.481079,-0.322437, -0.976969,0.100277,0.18835,0.870135,0.563579,-0.335375, -0.859317,0.197434,0.471799,0.883764,0.568579,-0.294, -0.969635,0,0.244558,0.867922,0.481079,-0.322437, -0.859317,0.197434,0.471799,0.883764,0.568579,-0.294, -0.761522,0.030964,0.647398,0.882548,0.481079,-0.2785, -0.103837,-0.707557,0.698986,0.974692,0.281188,-0.340079, -0.260846,-0.906261,0.332641,0.971855,0.238662,-0.41277, -0.196471,-0.920135,0.338748,0.933792,0.247612,-0.406608, -0.103837,-0.707557,0.698986,0.974692,0.281188,-0.340079, -0.196471,-0.920135,0.338748,0.933792,0.247612,-0.406608, -0.088988,-0.705766,0.702834,0.934927,0.293873,-0.328782, -0.260846,-0.906261,0.332641,0.971855,0.238662,-0.41277, -0.339022,-0.940778,0,0.97091,0.224487,-0.5, -0.217971,-0.975955,0,0.933414,0.232192,-0.5, -0.217971,-0.975955,0,0.933414,0.232192,-0.5, -0.196471,-0.920135,0.338748,0.933792,0.247612,-0.406608, -0.260846,-0.906261,0.332641,0.971855,0.238662,-0.41277, -0.489368,-0.872077,0,0.904032,0.239732,-0.5, -0.438574,-0.828046,0.349274,0.90443,0.255712,-0.405277, -0.196471,-0.920135,0.338748,0.933792,0.247612,-0.406608, -0.489368,-0.872077,0,0.904032,0.239732,-0.5, -0.196471,-0.920135,0.338748,0.933792,0.247612,-0.406608, -0.217971,-0.975955,0,0.933414,0.232192,-0.5, -0.438574,-0.828046,0.349274,0.90443,0.255712,-0.405277, -0.455383,-0.61687,0.641949,0.905018,0.303308,-0.326227, -0.088988,-0.705766,0.702834,0.934927,0.293873,-0.328782, -0.088988,-0.705766,0.702834,0.934927,0.293873,-0.328782, -0.196471,-0.920135,0.338748,0.933792,0.247612,-0.406608, -0.438574,-0.828046,0.349274,0.90443,0.255712,-0.405277, -0.103837,-0.707557,-0.698986,0.974692,0.281188,-0.659921, -0.088988,-0.705766,-0.702834,0.934927,0.293873,-0.671218, -0.196471,-0.920135,-0.338748,0.933792,0.247612,-0.593392, -0.103837,-0.707557,-0.698986,0.974692,0.281188,-0.659921, -0.196471,-0.920135,-0.338748,0.933792,0.247612,-0.593392, -0.260846,-0.906261,-0.332641,0.971855,0.238662,-0.58723, -0.088988,-0.705766,-0.702834,0.934927,0.293873,-0.671218, -0.455383,-0.61687,-0.641949,0.905018,0.303308,-0.673773, -0.438575,-0.828046,-0.349274,0.90443,0.255712,-0.594723, -0.438575,-0.828046,-0.349274,0.90443,0.255712,-0.594723, -0.196471,-0.920135,-0.338748,0.933792,0.247612,-0.593392, -0.088988,-0.705766,-0.702834,0.934927,0.293873,-0.671218, -0.489368,-0.872077,0,0.904032,0.239732,-0.5, -0.217971,-0.975955,0,0.933414,0.232192,-0.5, -0.196471,-0.920135,-0.338748,0.933792,0.247612,-0.593392, -0.489368,-0.872077,0,0.904032,0.239732,-0.5, -0.196471,-0.920135,-0.338748,0.933792,0.247612,-0.593392, -0.438575,-0.828046,-0.349274,0.90443,0.255712,-0.594723, -0.217971,-0.975955,0,0.933414,0.232192,-0.5, -0.339022,-0.940778,0,0.97091,0.224487,-0.5, -0.260846,-0.906261,-0.332641,0.971855,0.238662,-0.58723, -0.260846,-0.906261,-0.332641,0.971855,0.238662,-0.58723, -0.196471,-0.920135,-0.338748,0.933792,0.247612,-0.593392, -0.217971,-0.975955,0,0.933414,0.232192,-0.5, -0.959446,-0.199329,-0.199329,0.87462,0.342412,-0.638667, -0.976969,-0.18835,-0.100277,0.870135,0.316454,-0.5825, -0.849789,-0.488885,-0.197102,0.883764,0.275079,-0.5875, -0.959446,-0.199329,-0.199329,0.87462,0.342412,-0.638667, -0.849789,-0.488885,-0.197102,0.883764,0.275079,-0.5875, -0.826325,-0.370128,-0.424489,0.884979,0.320204,-0.660875, -0.969635,-0.244558,0,0.867922,0.303516,-0.5, -0.84069,-0.541516,0,0.882548,0.259579,-0.5, -0.849789,-0.488885,-0.197102,0.883764,0.275079,-0.5875, -0.969635,-0.244558,0,0.867922,0.303516,-0.5, -0.849789,-0.488885,-0.197102,0.883764,0.275079,-0.5875, -0.976969,-0.18835,-0.100277,0.870135,0.316454,-0.5825, -0.489368,-0.872077,0,0.904032,0.239732,-0.5, -0.438575,-0.828046,-0.349274,0.90443,0.255712,-0.594723, -0.849789,-0.488885,-0.197102,0.883764,0.275079,-0.5875, -0.489368,-0.872077,0,0.904032,0.239732,-0.5, -0.849789,-0.488885,-0.197102,0.883764,0.275079,-0.5875, -0.84069,-0.541516,0,0.882548,0.259579,-0.5, -0.455383,-0.61687,-0.641949,0.905018,0.303308,-0.673773, -0.826325,-0.370128,-0.424489,0.884979,0.320204,-0.660875, -0.849789,-0.488885,-0.197102,0.883764,0.275079,-0.5875, -0.455383,-0.61687,-0.641949,0.905018,0.303308,-0.673773, -0.849789,-0.488885,-0.197102,0.883764,0.275079,-0.5875, -0.438575,-0.828046,-0.349274,0.90443,0.255712,-0.594723, -0.959446,-0.199329,0.199329,0.87462,0.342412,-0.361333, -0.826326,-0.370128,0.424489,0.884979,0.320204,-0.339125, -0.849789,-0.488886,0.197102,0.883764,0.275079,-0.4125, -0.959446,-0.199329,0.199329,0.87462,0.342412,-0.361333, -0.849789,-0.488886,0.197102,0.883764,0.275079,-0.4125, -0.976969,-0.18835,0.100277,0.870135,0.316454,-0.4175, -0.455383,-0.61687,0.641949,0.905018,0.303308,-0.326227, -0.438574,-0.828046,0.349274,0.90443,0.255712,-0.405277, -0.849789,-0.488886,0.197102,0.883764,0.275079,-0.4125, -0.455383,-0.61687,0.641949,0.905018,0.303308,-0.326227, -0.849789,-0.488886,0.197102,0.883764,0.275079,-0.4125, -0.826326,-0.370128,0.424489,0.884979,0.320204,-0.339125, -0.489368,-0.872077,0,0.904032,0.239732,-0.5, -0.84069,-0.541516,0,0.882548,0.259579,-0.5, -0.849789,-0.488886,0.197102,0.883764,0.275079,-0.4125, -0.489368,-0.872077,0,0.904032,0.239732,-0.5, -0.849789,-0.488886,0.197102,0.883764,0.275079,-0.4125, -0.438574,-0.828046,0.349274,0.90443,0.255712,-0.405277, -0.969635,-0.244558,0,0.867922,0.303516,-0.5, -0.976969,-0.18835,0.100277,0.870135,0.316454,-0.4175, -0.849789,-0.488886,0.197102,0.883764,0.275079,-0.4125, -0.969635,-0.244558,0,0.867922,0.303516,-0.5, -0.849789,-0.488886,0.197102,0.883764,0.275079,-0.4125, -0.84069,-0.541516,0,0.882548,0.259579,-0.5, -0.088988,-0.705766,-0.702834,0.934927,0.293873,-0.671218, -0.103837,-0.707557,-0.698986,0.974692,0.281188,-0.659921, 0.110573,-0.360362,-0.926236,0.979421,0.352064,-0.703536, 0.110573,-0.360362,-0.926236,0.979421,0.352064,-0.703536, 0.06872,-0.352527,-0.933275,0.936818,0.370973,-0.717914, -0.088988,-0.705766,-0.702834,0.934927,0.293873,-0.671218, 0.291602,-0.024985,-0.956213,0.985095,0.437116,-0.718074, 0.214013,-0.011144,-0.976767,0.939088,0.463494,-0.73348, 0.06872,-0.352527,-0.933275,0.936818,0.370973,-0.717914, 0.291602,-0.024985,-0.956213,0.985095,0.437116,-0.718074, 0.06872,-0.352527,-0.933275,0.936818,0.370973,-0.717914, 0.110573,-0.360362,-0.926236,0.979421,0.352064,-0.703536, 0.214013,-0.011144,-0.976767,0.939088,0.463494,-0.73348, -0.2474,0.003968,-0.968905,0.905451,0.476683,-0.737495, -0.359172,-0.316853,-0.877838,0.905187,0.382177,-0.721479, -0.359172,-0.316853,-0.877838,0.905187,0.382177,-0.721479, 0.06872,-0.352527,-0.933275,0.936818,0.370973,-0.717914, 0.214013,-0.011144,-0.976767,0.939088,0.463494,-0.73348, -0.455383,-0.61687,-0.641949,0.905018,0.303308,-0.673773, -0.088988,-0.705766,-0.702834,0.934927,0.293873,-0.671218, 0.06872,-0.352527,-0.933275,0.936818,0.370973,-0.717914, -0.455383,-0.61687,-0.641949,0.905018,0.303308,-0.673773, 0.06872,-0.352527,-0.933275,0.936818,0.370973,-0.717914, -0.359172,-0.316853,-0.877838,0.905187,0.382177,-0.721479, 0.575185,0.562873,-0.59358,0.995497,0.593044,-0.659921, 0.429706,0.63213,-0.644798,0.943249,0.633115,-0.671218, 0.345208,0.311816,-0.885213,0.941357,0.556014,-0.717914, 0.575185,0.562873,-0.59358,0.995497,0.593044,-0.659921, 0.345208,0.311816,-0.885213,0.941357,0.556014,-0.717914, 0.447221,0.281892,-0.84884,0.990769,0.522168,-0.703536, 0.429706,0.63213,-0.644798,0.943249,0.633115,-0.671218, -0.115437,0.702917,-0.701842,0.907098,0.650057,-0.673773, -0.23409,0.368714,-0.899584,0.906322,0.571188,-0.721479, -0.23409,0.368714,-0.899584,0.906322,0.571188,-0.721479, 0.345208,0.311816,-0.885213,0.941357,0.556014,-0.717914, 0.429706,0.63213,-0.644798,0.943249,0.633115,-0.671218, -0.2474,0.003968,-0.968905,0.905451,0.476683,-0.737495, 0.214013,-0.011144,-0.976767,0.939088,0.463494,-0.73348, 0.345208,0.311816,-0.885213,0.941357,0.556014,-0.717914, -0.2474,0.003968,-0.968905,0.905451,0.476683,-0.737495, 0.345208,0.311816,-0.885213,0.941357,0.556014,-0.717914, -0.23409,0.368714,-0.899584,0.906322,0.571188,-0.721479, 0.214013,-0.011144,-0.976767,0.939088,0.463494,-0.73348, 0.291602,-0.024985,-0.956213,0.985095,0.437116,-0.718074, 0.447221,0.281892,-0.84884,0.990769,0.522168,-0.703536, 0.447221,0.281892,-0.84884,0.990769,0.522168,-0.703536, 0.345208,0.311816,-0.885213,0.941357,0.556014,-0.717914, 0.214013,-0.011144,-0.976767,0.939088,0.463494,-0.73348, -0.959446,0.199329,-0.199329,0.87462,0.619745,-0.638667, -0.976969,0.100277,-0.18835,0.870135,0.563579,-0.664625, -0.859317,0.197434,-0.471799,0.883764,0.568579,-0.706, -0.959446,0.199329,-0.199329,0.87462,0.619745,-0.638667, -0.859317,0.197434,-0.471799,0.883764,0.568579,-0.706, -0.714284,0.497638,-0.492092,0.884979,0.641954,-0.660875, -0.969635,0,-0.244558,0.867922,0.481079,-0.677562, -0.761523,0.030964,-0.647398,0.882548,0.481079,-0.7215, -0.859317,0.197434,-0.471799,0.883764,0.568579,-0.706, -0.969635,0,-0.244558,0.867922,0.481079,-0.677562, -0.859317,0.197434,-0.471799,0.883764,0.568579,-0.706, -0.976969,0.100277,-0.18835,0.870135,0.563579,-0.664625, -0.761523,0.030964,-0.647398,0.882548,0.481079,-0.7215, -0.2474,0.003968,-0.968905,0.905451,0.476683,-0.737495, -0.23409,0.368714,-0.899584,0.906322,0.571188,-0.721479, -0.23409,0.368714,-0.899584,0.906322,0.571188,-0.721479, -0.859317,0.197434,-0.471799,0.883764,0.568579,-0.706, -0.761523,0.030964,-0.647398,0.882548,0.481079,-0.7215, -0.23409,0.368714,-0.899584,0.906322,0.571188,-0.721479, -0.115437,0.702917,-0.701842,0.907098,0.650057,-0.673773, -0.714284,0.497638,-0.492092,0.884979,0.641954,-0.660875, -0.714284,0.497638,-0.492092,0.884979,0.641954,-0.660875, -0.859317,0.197434,-0.471799,0.883764,0.568579,-0.706, -0.23409,0.368714,-0.899584,0.906322,0.571188,-0.721479, -0.959446,-0.199329,-0.199329,0.87462,0.342412,-0.638667, -0.826325,-0.370128,-0.424489,0.884979,0.320204,-0.660875, -0.845588,-0.179708,-0.502678,0.883764,0.393579,-0.706, -0.959446,-0.199329,-0.199329,0.87462,0.342412,-0.638667, -0.845588,-0.179708,-0.502678,0.883764,0.393579,-0.706, -0.976969,-0.100277,-0.18835,0.870135,0.398579,-0.664625, -0.826325,-0.370128,-0.424489,0.884979,0.320204,-0.660875, -0.455383,-0.61687,-0.641949,0.905018,0.303308,-0.673773, -0.359172,-0.316853,-0.877838,0.905187,0.382177,-0.721479, -0.359172,-0.316853,-0.877838,0.905187,0.382177,-0.721479, -0.845588,-0.179708,-0.502678,0.883764,0.393579,-0.706, -0.826325,-0.370128,-0.424489,0.884979,0.320204,-0.660875, -0.2474,0.003968,-0.968905,0.905451,0.476683,-0.737495, -0.761523,0.030964,-0.647398,0.882548,0.481079,-0.7215, -0.845588,-0.179708,-0.502678,0.883764,0.393579,-0.706, -0.2474,0.003968,-0.968905,0.905451,0.476683,-0.737495, -0.845588,-0.179708,-0.502678,0.883764,0.393579,-0.706, -0.359172,-0.316853,-0.877838,0.905187,0.382177,-0.721479, -0.969635,0,-0.244558,0.867922,0.481079,-0.677562, -0.976969,-0.100277,-0.18835,0.870135,0.398579,-0.664625, -0.845588,-0.179708,-0.502678,0.883764,0.393579,-0.706, -0.969635,0,-0.244558,0.867922,0.481079,-0.677562, -0.845588,-0.179708,-0.502678,0.883764,0.393579,-0.706, -0.761523,0.030964,-0.647398,0.882548,0.481079,-0.7215, -0.959446,0.199329,0.199329,0.87462,0.619745,-0.361333, -0.976969,0.100277,0.18835,0.870135,0.563579,-0.335375, -0.993621,0.079739,0.079739,0.861889,0.571579,-0.4095, -0.959446,0.199329,0.199329,0.87462,0.619745,-0.361333, -0.993621,0.079739,0.079739,0.861889,0.571579,-0.4095, -0.976969,0.188349,0.100277,0.870135,0.645704,-0.4175, -0.976969,0.100277,0.18835,0.870135,0.563579,-0.335375, -0.969635,0,0.244558,0.867922,0.481079,-0.322437, -0.996384,0,0.08496,0.859111,0.481079,-0.40225, -0.996384,0,0.08496,0.859111,0.481079,-0.40225, -0.993621,0.079739,0.079739,0.861889,0.571579,-0.4095, -0.976969,0.100277,0.18835,0.870135,0.563579,-0.335375, -1,0,0,0.856159,0.481079,-0.5, -0.996384,0.08496,0,0.859111,0.578829,-0.5, -0.993621,0.079739,0.079739,0.861889,0.571579,-0.4095, -1,0,0,0.856159,0.481079,-0.5, -0.993621,0.079739,0.079739,0.861889,0.571579,-0.4095, -0.996384,0,0.08496,0.859111,0.481079,-0.40225, -0.996384,0.08496,0,0.859111,0.578829,-0.5, -0.969635,0.244558,0,0.867922,0.658641,-0.5, -0.976969,0.188349,0.100277,0.870135,0.645704,-0.4175, -0.976969,0.188349,0.100277,0.870135,0.645704,-0.4175, -0.993621,0.079739,0.079739,0.861889,0.571579,-0.4095, -0.996384,0.08496,0,0.859111,0.578829,-0.5, -0.959446,-0.199329,0.199329,0.87462,0.342412,-0.361333, -0.976969,-0.18835,0.100277,0.870135,0.316454,-0.4175, -0.993621,-0.079739,0.079739,0.861889,0.390579,-0.4095, -0.959446,-0.199329,0.199329,0.87462,0.342412,-0.361333, -0.993621,-0.079739,0.079739,0.861889,0.390579,-0.4095, -0.976969,-0.100277,0.18835,0.870135,0.398579,-0.335375, -0.976969,-0.18835,0.100277,0.870135,0.316454,-0.4175, -0.969635,-0.244558,0,0.867922,0.303516,-0.5, -0.996384,-0.08496,0,0.859111,0.383329,-0.5, -0.996384,-0.08496,0,0.859111,0.383329,-0.5, -0.993621,-0.079739,0.079739,0.861889,0.390579,-0.4095, -0.976969,-0.18835,0.100277,0.870135,0.316454,-0.4175, -1,0,0,0.856159,0.481079,-0.5, -0.996384,0,0.08496,0.859111,0.481079,-0.40225, -0.993621,-0.079739,0.079739,0.861889,0.390579,-0.4095, -1,0,0,0.856159,0.481079,-0.5, -0.993621,-0.079739,0.079739,0.861889,0.390579,-0.4095, -0.996384,-0.08496,0,0.859111,0.383329,-0.5, -0.996384,0,0.08496,0.859111,0.481079,-0.40225, -0.969635,0,0.244558,0.867922,0.481079,-0.322437, -0.976969,-0.100277,0.18835,0.870135,0.398579,-0.335375, -0.976969,-0.100277,0.18835,0.870135,0.398579,-0.335375, -0.993621,-0.079739,0.079739,0.861889,0.390579,-0.4095, -0.996384,0,0.08496,0.859111,0.481079,-0.40225, -0.959446,-0.199329,-0.199329,0.87462,0.342412,-0.638667, -0.976969,-0.100277,-0.18835,0.870135,0.398579,-0.664625, -0.993621,-0.079739,-0.079739,0.861889,0.390579,-0.5905, -0.959446,-0.199329,-0.199329,0.87462,0.342412,-0.638667, -0.993621,-0.079739,-0.079739,0.861889,0.390579,-0.5905, -0.976969,-0.18835,-0.100277,0.870135,0.316454,-0.5825, -0.976969,-0.100277,-0.18835,0.870135,0.398579,-0.664625, -0.969635,0,-0.244558,0.867922,0.481079,-0.677562, -0.996384,0,-0.08496,0.859111,0.481079,-0.59775, -0.996384,0,-0.08496,0.859111,0.481079,-0.59775, -0.993621,-0.079739,-0.079739,0.861889,0.390579,-0.5905, -0.976969,-0.100277,-0.18835,0.870135,0.398579,-0.664625, -1,0,0,0.856159,0.481079,-0.5, -0.996384,-0.08496,0,0.859111,0.383329,-0.5, -0.993621,-0.079739,-0.079739,0.861889,0.390579,-0.5905, -1,0,0,0.856159,0.481079,-0.5, -0.993621,-0.079739,-0.079739,0.861889,0.390579,-0.5905, -0.996384,0,-0.08496,0.859111,0.481079,-0.59775, -0.996384,-0.08496,0,0.859111,0.383329,-0.5, -0.969635,-0.244558,0,0.867922,0.303516,-0.5, -0.976969,-0.18835,-0.100277,0.870135,0.316454,-0.5825, -0.976969,-0.18835,-0.100277,0.870135,0.316454,-0.5825, -0.993621,-0.079739,-0.079739,0.861889,0.390579,-0.5905, -0.996384,-0.08496,0,0.859111,0.383329,-0.5, -0.959446,0.199329,-0.199329,0.87462,0.619745,-0.638667, -0.976969,0.188349,-0.100277,0.870135,0.645704,-0.5825, -0.993621,0.079739,-0.079739,0.861889,0.571579,-0.5905, -0.959446,0.199329,-0.199329,0.87462,0.619745,-0.638667, -0.993621,0.079739,-0.079739,0.861889,0.571579,-0.5905, -0.976969,0.100277,-0.18835,0.870135,0.563579,-0.664625, -0.976969,0.188349,-0.100277,0.870135,0.645704,-0.5825, -0.969635,0.244558,0,0.867922,0.658641,-0.5, -0.996384,0.08496,0,0.859111,0.578829,-0.5, -0.996384,0.08496,0,0.859111,0.578829,-0.5, -0.993621,0.079739,-0.079739,0.861889,0.571579,-0.5905, -0.976969,0.188349,-0.100277,0.870135,0.645704,-0.5825, -1,0,0,0.856159,0.481079,-0.5, -0.996384,0,-0.08496,0.859111,0.481079,-0.59775, -0.993621,0.079739,-0.079739,0.861889,0.571579,-0.5905, -1,0,0,0.856159,0.481079,-0.5, -0.993621,0.079739,-0.079739,0.861889,0.571579,-0.5905, -0.996384,0.08496,0,0.859111,0.578829,-0.5, -0.996384,0,-0.08496,0.859111,0.481079,-0.59775, -0.969635,0,-0.244558,0.867922,0.481079,-0.677562, -0.976969,0.100277,-0.18835,0.870135,0.563579,-0.664625, -0.976969,0.100277,-0.18835,0.870135,0.563579,-0.664625, -0.993621,0.079739,-0.079739,0.861889,0.571579,-0.5905, -0.996384,0,-0.08496,0.859111,0.481079,-0.59775, 0.642358,0.715039,-0.275852,0.998334,0.63557,-0.58723, 0.575185,0.562873,-0.59358,0.995497,0.593044,-0.659921, 0.599141,0.555368,-0.576712,1.065911,0.531759,-0.646592, 0.599141,0.555368,-0.576712,1.065911,0.531759,-0.646592, 0.668157,0.701389,-0.248233,1.071585,0.569561,-0.579959, 0.642358,0.715039,-0.275852,0.998334,0.63557,-0.58723, 0.599141,0.555368,-0.576712,1.065911,0.531759,-0.646592, 0.585003,0.517563,-0.62442,1.149095,0.453892,-0.633787, 0.682874,0.680924,-0.264625,1.158568,0.486483,-0.572975, 0.682874,0.680924,-0.264625,1.158568,0.486483,-0.572975, 0.668157,0.701389,-0.248233,1.071585,0.569561,-0.579959, 0.599141,0.555368,-0.576712,1.065911,0.531759,-0.646592, 0.682874,0.680924,-0.264625,1.158568,0.486483,-0.572975, 0.700187,0.71396,0,1.161726,0.497346,-0.5, 0.687547,0.72614,0,1.073477,0.582162,-0.5, 0.687547,0.72614,0,1.073477,0.582162,-0.5, 0.668157,0.701389,-0.248233,1.071585,0.569561,-0.579959, 0.682874,0.680924,-0.264625,1.158568,0.486483,-0.572975, 0.662437,0.749118,0,0.99928,0.649745,-0.5, 0.642358,0.715039,-0.275852,0.998334,0.63557,-0.58723, 0.668157,0.701389,-0.248233,1.071585,0.569561,-0.579959, 0.662437,0.749118,0,0.99928,0.649745,-0.5, 0.668157,0.701389,-0.248233,1.071585,0.569561,-0.579959, 0.687547,0.72614,0,1.073477,0.582162,-0.5, 0.568513,0.503436,-0.65065,1.23965,0.364075,-0.624059, 0.547232,0.498931,-0.672015,1.332183,0.266938,-0.619965, 0.694102,0.647395,-0.314805,1.351457,0.289652,-0.565436, 0.694102,0.647395,-0.314805,1.351457,0.289652,-0.565436, 0.688382,0.659806,-0.301308,1.253715,0.391468,-0.567669, 0.568513,0.503436,-0.65065,1.23965,0.364075,-0.624059, 0.726158,0.687528,0,1.357882,0.297224,-0.5, 0.71287,0.701296,0,1.258403,0.4006,-0.5, 0.688382,0.659806,-0.301308,1.253715,0.391468,-0.567669, 0.726158,0.687528,0,1.357882,0.297224,-0.5, 0.688382,0.659806,-0.301308,1.253715,0.391468,-0.567669, 0.694102,0.647395,-0.314805,1.351457,0.289652,-0.565436, 0.71287,0.701296,0,1.258403,0.4006,-0.5, 0.700187,0.71396,0,1.161726,0.497346,-0.5, 0.682874,0.680924,-0.264625,1.158568,0.486483,-0.572975, 0.682874,0.680924,-0.264625,1.158568,0.486483,-0.572975, 0.688382,0.659806,-0.301308,1.253715,0.391468,-0.567669, 0.71287,0.701296,0,1.258403,0.4006,-0.5, 0.585003,0.517563,-0.62442,1.149095,0.453892,-0.633787, 0.568513,0.503436,-0.65065,1.23965,0.364075,-0.624059, 0.688382,0.659806,-0.301308,1.253715,0.391468,-0.567669, 0.585003,0.517563,-0.62442,1.149095,0.453892,-0.633787, 0.688382,0.659806,-0.301308,1.253715,0.391468,-0.567669, 0.682874,0.680924,-0.264625,1.158568,0.486483,-0.572975, 0.694102,0.647395,0.314805,1.351457,0.289652,-0.434564, 0.547232,0.498931,0.672016,1.332183,0.266938,-0.380035, 0.568513,0.503436,0.65065,1.23965,0.364075,-0.375941, 0.568513,0.503436,0.65065,1.23965,0.364075,-0.375941, 0.688382,0.659806,0.301308,1.253715,0.391468,-0.432331, 0.694102,0.647395,0.314805,1.351457,0.289652,-0.434564, 0.585003,0.517563,0.62442,1.149095,0.453892,-0.366213, 0.682874,0.680923,0.264625,1.158568,0.486483,-0.427025, 0.688382,0.659806,0.301308,1.253715,0.391468,-0.432331, 0.585003,0.517563,0.62442,1.149095,0.453892,-0.366213, 0.688382,0.659806,0.301308,1.253715,0.391468,-0.432331, 0.568513,0.503436,0.65065,1.23965,0.364075,-0.375941, 0.682874,0.680923,0.264625,1.158568,0.486483,-0.427025, 0.700187,0.71396,0,1.161726,0.497346,-0.5, 0.71287,0.701296,0,1.258403,0.4006,-0.5, 0.71287,0.701296,0,1.258403,0.4006,-0.5, 0.688382,0.659806,0.301308,1.253715,0.391468,-0.432331, 0.682874,0.680923,0.264625,1.158568,0.486483,-0.427025, 0.726158,0.687528,0,1.357882,0.297224,-0.5, 0.694102,0.647395,0.314805,1.351457,0.289652,-0.434564, 0.688382,0.659806,0.301308,1.253715,0.391468,-0.432331, 0.726158,0.687528,0,1.357882,0.297224,-0.5, 0.688382,0.659806,0.301308,1.253715,0.391468,-0.432331, 0.71287,0.701296,0,1.258403,0.4006,-0.5, 0.599141,0.555368,0.576712,1.065911,0.531759,-0.353408, 0.575185,0.562873,0.59358,0.995497,0.593044,-0.340079, 0.642358,0.715039,0.275852,0.998334,0.63557,-0.41277, 0.642358,0.715039,0.275852,0.998334,0.63557,-0.41277, 0.668157,0.701389,0.248233,1.071585,0.569561,-0.420041, 0.599141,0.555368,0.576712,1.065911,0.531759,-0.353408, 0.662437,0.749118,0,0.99928,0.649745,-0.5, 0.687547,0.72614,0,1.073477,0.582162,-0.5, 0.668157,0.701389,0.248233,1.071585,0.569561,-0.420041, 0.662437,0.749118,0,0.99928,0.649745,-0.5, 0.668157,0.701389,0.248233,1.071585,0.569561,-0.420041, 0.642358,0.715039,0.275852,0.998334,0.63557,-0.41277, 0.687547,0.72614,0,1.073477,0.582162,-0.5, 0.700187,0.71396,0,1.161726,0.497346,-0.5, 0.682874,0.680923,0.264625,1.158568,0.486483,-0.427025, 0.682874,0.680923,0.264625,1.158568,0.486483,-0.427025, 0.668157,0.701389,0.248233,1.071585,0.569561,-0.420041, 0.687547,0.72614,0,1.073477,0.582162,-0.5, 0.682874,0.680923,0.264625,1.158568,0.486483,-0.427025, 0.585003,0.517563,0.62442,1.149095,0.453892,-0.366213, 0.599141,0.555368,0.576712,1.065911,0.531759,-0.353408, 0.599141,0.555368,0.576712,1.065911,0.531759,-0.353408, 0.668157,0.701389,0.248233,1.071585,0.569561,-0.420041, 0.682874,0.680923,0.264625,1.158568,0.486483,-0.427025, -0.103837,-0.707557,-0.698986,0.974692,0.281188,-0.659921, -0.251782,-0.681632,-0.687011,1.024302,0.254547,-0.646592, 0.010629,-0.366255,-0.930454,1.033759,0.31755,-0.686572, -0.103837,-0.707557,-0.698986,0.974692,0.281188,-0.659921, 0.010629,-0.366255,-0.930454,1.033759,0.31755,-0.686572, 0.110573,-0.360362,-0.926236,0.979421,0.352064,-0.703536, -0.251782,-0.681632,-0.687011,1.024302,0.254547,-0.646592, -0.405056,-0.645141,-0.64786,1.079619,0.214898,-0.633787, -0.092335,-0.356775,-0.929616,1.095409,0.269215,-0.670274, -0.092335,-0.356775,-0.929616,1.095409,0.269215,-0.670274, 0.010629,-0.366255,-0.930454,1.033759,0.31755,-0.686572, -0.251782,-0.681632,-0.687011,1.024302,0.254547,-0.646592, 0.167416,-0.052778,-0.984473,1.114357,0.334395,-0.682436, 0.238763,-0.041303,-0.970199,1.045107,0.393153,-0.699898, 0.010629,-0.366255,-0.930454,1.033759,0.31755,-0.686572, 0.167416,-0.052778,-0.984473,1.114357,0.334395,-0.682436, 0.010629,-0.366255,-0.930454,1.033759,0.31755,-0.686572, -0.092335,-0.356775,-0.929616,1.095409,0.269215,-0.670274, 0.238763,-0.041303,-0.970199,1.045107,0.393153,-0.699898, 0.291602,-0.024985,-0.956213,0.985095,0.437116,-0.718074, 0.110573,-0.360362,-0.926236,0.979421,0.352064,-0.703536, 0.110573,-0.360362,-0.926236,0.979421,0.352064,-0.703536, 0.010629,-0.366255,-0.930454,1.033759,0.31755,-0.686572, 0.238763,-0.041303,-0.970199,1.045107,0.393153,-0.699898, -0.469451,-0.529408,-0.706642,1.136509,0.163187,-0.624059, -0.591819,-0.448047,-0.670078,1.190836,0.100363,-0.619965, -0.293198,-0.238286,-0.925881,1.22296,0.138221,-0.652683, -0.293198,-0.238286,-0.925881,1.22296,0.138221,-0.652683, -0.19623,-0.318838,-0.927274,1.15995,0.208844,-0.657894, -0.469451,-0.529408,-0.706642,1.136509,0.163187,-0.624059, 0.003001,-0.001255,-0.999995,1.261509,0.18365,-0.663589, 0.084953,-0.04518,-0.99536,1.18808,0.263631,-0.669172, -0.19623,-0.318838,-0.927274,1.15995,0.208844,-0.657894, 0.003001,-0.001255,-0.999995,1.261509,0.18365,-0.663589, -0.19623,-0.318838,-0.927274,1.15995,0.208844,-0.657894, -0.293198,-0.238286,-0.925881,1.22296,0.138221,-0.652683, 0.084953,-0.04518,-0.99536,1.18808,0.263631,-0.669172, 0.167416,-0.052778,-0.984473,1.114357,0.334395,-0.682436, -0.092335,-0.356775,-0.929616,1.095409,0.269215,-0.670274, -0.092335,-0.356775,-0.929616,1.095409,0.269215,-0.670274, -0.19623,-0.318838,-0.927274,1.15995,0.208844,-0.657894, 0.084953,-0.04518,-0.99536,1.18808,0.263631,-0.669172, -0.405056,-0.645141,-0.64786,1.079619,0.214898,-0.633787, -0.469451,-0.529408,-0.706642,1.136509,0.163187,-0.624059, -0.19623,-0.318838,-0.927274,1.15995,0.208844,-0.657894, -0.405056,-0.645141,-0.64786,1.079619,0.214898,-0.633787, -0.19623,-0.318838,-0.927274,1.15995,0.208844,-0.657894, -0.092335,-0.356775,-0.929616,1.095409,0.269215,-0.670274, 0.547232,0.498931,-0.672015,1.332183,0.266938,-0.619965, 0.568513,0.503436,-0.65065,1.23965,0.364075,-0.624059, 0.340631,0.234777,-0.910412,1.216209,0.318418,-0.657894, 0.547232,0.498931,-0.672015,1.332183,0.266938,-0.619965, 0.340631,0.234777,-0.910412,1.216209,0.318418,-0.657894, 0.284277,0.249094,-0.925818,1.300058,0.22908,-0.652683, 0.568513,0.503436,-0.65065,1.23965,0.364075,-0.624059, 0.585003,0.517563,-0.62442,1.149095,0.453892,-0.633787, 0.392854,0.244042,-0.886628,1.133305,0.399575,-0.670274, 0.392854,0.244042,-0.886628,1.133305,0.399575,-0.670274, 0.340631,0.234777,-0.910412,1.216209,0.318418,-0.657894, 0.568513,0.503436,-0.65065,1.23965,0.364075,-0.624059, 0.167416,-0.052778,-0.984473,1.114357,0.334395,-0.682436, 0.084953,-0.04518,-0.99536,1.18808,0.263631,-0.669172, 0.340631,0.234777,-0.910412,1.216209,0.318418,-0.657894, 0.167416,-0.052778,-0.984473,1.114357,0.334395,-0.682436, 0.340631,0.234777,-0.910412,1.216209,0.318418,-0.657894, 0.392854,0.244042,-0.886628,1.133305,0.399575,-0.670274, 0.084953,-0.04518,-0.99536,1.18808,0.263631,-0.669172, 0.003001,-0.001255,-0.999995,1.261509,0.18365,-0.663589, 0.284277,0.249094,-0.925818,1.300058,0.22908,-0.652683, 0.284277,0.249094,-0.925818,1.300058,0.22908,-0.652683, 0.340631,0.234777,-0.910412,1.216209,0.318418,-0.657894, 0.084953,-0.04518,-0.99536,1.18808,0.263631,-0.669172, 0.599141,0.555368,-0.576712,1.065911,0.531759,-0.646592, 0.575185,0.562873,-0.59358,0.995497,0.593044,-0.659921, 0.447221,0.281892,-0.84884,0.990769,0.522168,-0.703536, 0.447221,0.281892,-0.84884,0.990769,0.522168,-0.703536, 0.431005,0.262774,-0.86324,1.056455,0.468757,-0.686572, 0.599141,0.555368,-0.576712,1.065911,0.531759,-0.646592, 0.291602,-0.024985,-0.956213,0.985095,0.437116,-0.718074, 0.238763,-0.041303,-0.970199,1.045107,0.393153,-0.699898, 0.431005,0.262774,-0.86324,1.056455,0.468757,-0.686572, 0.291602,-0.024985,-0.956213,0.985095,0.437116,-0.718074, 0.431005,0.262774,-0.86324,1.056455,0.468757,-0.686572, 0.447221,0.281892,-0.84884,0.990769,0.522168,-0.703536, 0.238763,-0.041303,-0.970199,1.045107,0.393153,-0.699898, 0.167416,-0.052778,-0.984473,1.114357,0.334395,-0.682436, 0.392854,0.244042,-0.886628,1.133305,0.399575,-0.670274, 0.392854,0.244042,-0.886628,1.133305,0.399575,-0.670274, 0.431005,0.262774,-0.86324,1.056455,0.468757,-0.686572, 0.238763,-0.041303,-0.970199,1.045107,0.393153,-0.699898, 0.585003,0.517563,-0.62442,1.149095,0.453892,-0.633787, 0.599141,0.555368,-0.576712,1.065911,0.531759,-0.646592, 0.431005,0.262774,-0.86324,1.056455,0.468757,-0.686572, 0.585003,0.517563,-0.62442,1.149095,0.453892,-0.633787, 0.431005,0.262774,-0.86324,1.056455,0.468757,-0.686572, 0.392854,0.244042,-0.886628,1.133305,0.399575,-0.670274, -0.103837,-0.707557,0.698986,0.974692,0.281188,-0.340079, 0.110573,-0.360361,0.926236,0.979421,0.352064,-0.296464, 0.010629,-0.366254,0.930454,1.033759,0.31755,-0.313428, -0.103837,-0.707557,0.698986,0.974692,0.281188,-0.340079, 0.010629,-0.366254,0.930454,1.033759,0.31755,-0.313428, -0.251782,-0.681632,0.68701,1.024302,0.254547,-0.353408, 0.110573,-0.360361,0.926236,0.979421,0.352064,-0.296464, 0.291601,-0.024985,0.956214,0.985095,0.437116,-0.281926, 0.238762,-0.041303,0.970199,1.045107,0.393153,-0.300102, 0.238762,-0.041303,0.970199,1.045107,0.393153,-0.300102, 0.010629,-0.366254,0.930454,1.033759,0.31755,-0.313428, 0.110573,-0.360361,0.926236,0.979421,0.352064,-0.296464, 0.167415,-0.052778,0.984473,1.114357,0.334395,-0.317564, -0.092335,-0.356776,0.929616,1.095409,0.269215,-0.329726, 0.010629,-0.366254,0.930454,1.033759,0.31755,-0.313428, 0.167415,-0.052778,0.984473,1.114357,0.334395,-0.317564, 0.010629,-0.366254,0.930454,1.033759,0.31755,-0.313428, 0.238762,-0.041303,0.970199,1.045107,0.393153,-0.300102, -0.092335,-0.356776,0.929616,1.095409,0.269215,-0.329726, -0.405056,-0.645141,0.64786,1.079619,0.214898,-0.366213, -0.251782,-0.681632,0.68701,1.024302,0.254547,-0.353408, -0.251782,-0.681632,0.68701,1.024302,0.254547,-0.353408, 0.010629,-0.366254,0.930454,1.033759,0.31755,-0.313428, -0.092335,-0.356776,0.929616,1.095409,0.269215,-0.329726, 0.447221,0.281892,0.848841,0.990769,0.522168,-0.296464, 0.575185,0.562873,0.59358,0.995497,0.593044,-0.340079, 0.599141,0.555368,0.576712,1.065911,0.531759,-0.353408, 0.599141,0.555368,0.576712,1.065911,0.531759,-0.353408, 0.431005,0.262774,0.863241,1.056455,0.468757,-0.313428, 0.447221,0.281892,0.848841,0.990769,0.522168,-0.296464, 0.585003,0.517563,0.62442,1.149095,0.453892,-0.366213, 0.392854,0.244041,0.886628,1.133305,0.399575,-0.329726, 0.431005,0.262774,0.863241,1.056455,0.468757,-0.313428, 0.585003,0.517563,0.62442,1.149095,0.453892,-0.366213, 0.431005,0.262774,0.863241,1.056455,0.468757,-0.313428, 0.599141,0.555368,0.576712,1.065911,0.531759,-0.353408, 0.392854,0.244041,0.886628,1.133305,0.399575,-0.329726, 0.167415,-0.052778,0.984473,1.114357,0.334395,-0.317564, 0.238762,-0.041303,0.970199,1.045107,0.393153,-0.300102, 0.238762,-0.041303,0.970199,1.045107,0.393153,-0.300102, 0.431005,0.262774,0.863241,1.056455,0.468757,-0.313428, 0.392854,0.244041,0.886628,1.133305,0.399575,-0.329726, 0.291601,-0.024985,0.956214,0.985095,0.437116,-0.281926, 0.447221,0.281892,0.848841,0.990769,0.522168,-0.296464, 0.431005,0.262774,0.863241,1.056455,0.468757,-0.313428, 0.291601,-0.024985,0.956214,0.985095,0.437116,-0.281926, 0.431005,0.262774,0.863241,1.056455,0.468757,-0.313428, 0.238762,-0.041303,0.970199,1.045107,0.393153,-0.300102, 0.547232,0.498931,0.672016,1.332183,0.266938,-0.380035, 0.284277,0.249093,0.925818,1.300058,0.22908,-0.347317, 0.34063,0.234777,0.910412,1.216209,0.318418,-0.342106, 0.547232,0.498931,0.672016,1.332183,0.266938,-0.380035, 0.34063,0.234777,0.910412,1.216209,0.318418,-0.342106, 0.568513,0.503436,0.65065,1.23965,0.364075,-0.375941, 0.284277,0.249093,0.925818,1.300058,0.22908,-0.347317, 0.003001,-0.001255,0.999995,1.261509,0.18365,-0.336411, 0.084953,-0.04518,0.99536,1.18808,0.263631,-0.330828, 0.084953,-0.04518,0.99536,1.18808,0.263631,-0.330828, 0.34063,0.234777,0.910412,1.216209,0.318418,-0.342106, 0.284277,0.249093,0.925818,1.300058,0.22908,-0.347317, 0.167415,-0.052778,0.984473,1.114357,0.334395,-0.317564, 0.392854,0.244041,0.886628,1.133305,0.399575,-0.329726, 0.34063,0.234777,0.910412,1.216209,0.318418,-0.342106, 0.167415,-0.052778,0.984473,1.114357,0.334395,-0.317564, 0.34063,0.234777,0.910412,1.216209,0.318418,-0.342106, 0.084953,-0.04518,0.99536,1.18808,0.263631,-0.330828, 0.392854,0.244041,0.886628,1.133305,0.399575,-0.329726, 0.585003,0.517563,0.62442,1.149095,0.453892,-0.366213, 0.568513,0.503436,0.65065,1.23965,0.364075,-0.375941, 0.568513,0.503436,0.65065,1.23965,0.364075,-0.375941, 0.34063,0.234777,0.910412,1.216209,0.318418,-0.342106, 0.392854,0.244041,0.886628,1.133305,0.399575,-0.329726, -0.293197,-0.238286,0.925881,1.22296,0.138221,-0.347317, -0.591819,-0.448047,0.670078,1.190836,0.100363,-0.380035, -0.469451,-0.529408,0.706642,1.136509,0.163187,-0.375941, -0.469451,-0.529408,0.706642,1.136509,0.163187,-0.375941, -0.19623,-0.318838,0.927274,1.15995,0.208844,-0.342106, -0.293197,-0.238286,0.925881,1.22296,0.138221,-0.347317, -0.405056,-0.645141,0.64786,1.079619,0.214898,-0.366213, -0.092335,-0.356776,0.929616,1.095409,0.269215,-0.329726, -0.19623,-0.318838,0.927274,1.15995,0.208844,-0.342106, -0.405056,-0.645141,0.64786,1.079619,0.214898,-0.366213, -0.19623,-0.318838,0.927274,1.15995,0.208844,-0.342106, -0.469451,-0.529408,0.706642,1.136509,0.163187,-0.375941, -0.092335,-0.356776,0.929616,1.095409,0.269215,-0.329726, 0.167415,-0.052778,0.984473,1.114357,0.334395,-0.317564, 0.084953,-0.04518,0.99536,1.18808,0.263631,-0.330828, 0.084953,-0.04518,0.99536,1.18808,0.263631,-0.330828, -0.19623,-0.318838,0.927274,1.15995,0.208844,-0.342106, -0.092335,-0.356776,0.929616,1.095409,0.269215,-0.329726, 0.003001,-0.001255,0.999995,1.261509,0.18365,-0.336411, -0.293197,-0.238286,0.925881,1.22296,0.138221,-0.347317, -0.19623,-0.318838,0.927274,1.15995,0.208844,-0.342106, 0.003001,-0.001255,0.999995,1.261509,0.18365,-0.336411, -0.19623,-0.318838,0.927274,1.15995,0.208844,-0.342106, 0.084953,-0.04518,0.99536,1.18808,0.263631,-0.330828, -0.251782,-0.681632,-0.687011,1.024302,0.254547,-0.646592, -0.103837,-0.707557,-0.698986,0.974692,0.281188,-0.659921, -0.260846,-0.906261,-0.332641,0.971855,0.238662,-0.58723, -0.260846,-0.906261,-0.332641,0.971855,0.238662,-0.58723, -0.42869,-0.845027,-0.319616,1.018628,0.216746,-0.579959, -0.251782,-0.681632,-0.687011,1.024302,0.254547,-0.646592, -0.339022,-0.940778,0,0.97091,0.224487,-0.5, -0.49913,-0.866527,0,1.016736,0.204145,-0.5, -0.42869,-0.845027,-0.319616,1.018628,0.216746,-0.579959, -0.339022,-0.940778,0,0.97091,0.224487,-0.5, -0.42869,-0.845027,-0.319616,1.018628,0.216746,-0.579959, -0.260846,-0.906261,-0.332641,0.971855,0.238662,-0.58723, -0.49913,-0.866527,0,1.016736,0.204145,-0.5, -0.60511,-0.796142,0,1.066987,0.171444,-0.5, -0.573691,-0.778283,-0.255254,1.070145,0.182308,-0.572975, -0.573691,-0.778283,-0.255254,1.070145,0.182308,-0.572975, -0.42869,-0.845027,-0.319616,1.018628,0.216746,-0.579959, -0.49913,-0.866527,0,1.016736,0.204145,-0.5, -0.405056,-0.645141,-0.64786,1.079619,0.214898,-0.633787, -0.251782,-0.681632,-0.687011,1.024302,0.254547,-0.646592, -0.42869,-0.845027,-0.319616,1.018628,0.216746,-0.579959, -0.405056,-0.645141,-0.64786,1.079619,0.214898,-0.633787, -0.42869,-0.845027,-0.319616,1.018628,0.216746,-0.579959, -0.573691,-0.778283,-0.255254,1.070145,0.182308,-0.572975, -0.260846,-0.906261,0.332641,0.971855,0.238662,-0.41277, -0.103837,-0.707557,0.698986,0.974692,0.281188,-0.340079, -0.251782,-0.681632,0.68701,1.024302,0.254547,-0.353408, -0.251782,-0.681632,0.68701,1.024302,0.254547,-0.353408, -0.42869,-0.845027,0.319616,1.018628,0.216746,-0.420041, -0.260846,-0.906261,0.332641,0.971855,0.238662,-0.41277, -0.405056,-0.645141,0.64786,1.079619,0.214898,-0.366213, -0.573691,-0.778283,0.255254,1.070145,0.182308,-0.427025, -0.42869,-0.845027,0.319616,1.018628,0.216746,-0.420041, -0.405056,-0.645141,0.64786,1.079619,0.214898,-0.366213, -0.42869,-0.845027,0.319616,1.018628,0.216746,-0.420041, -0.251782,-0.681632,0.68701,1.024302,0.254547,-0.353408, -0.573691,-0.778283,0.255254,1.070145,0.182308,-0.427025, -0.60511,-0.796142,0,1.066987,0.171444,-0.5, -0.49913,-0.866527,0,1.016736,0.204145,-0.5, -0.49913,-0.866527,0,1.016736,0.204145,-0.5, -0.42869,-0.845027,0.319616,1.018628,0.216746,-0.420041, -0.573691,-0.778283,0.255254,1.070145,0.182308,-0.427025, -0.339022,-0.940778,0,0.97091,0.224487,-0.5, -0.260846,-0.906261,0.332641,0.971855,0.238662,-0.41277, -0.42869,-0.845027,0.319616,1.018628,0.216746,-0.420041, -0.339022,-0.940778,0,0.97091,0.224487,-0.5, -0.42869,-0.845027,0.319616,1.018628,0.216746,-0.420041, -0.49913,-0.866527,0,1.016736,0.204145,-0.5, -0.591819,-0.448047,0.670078,1.190836,0.100363,-0.380035, -0.769835,-0.555714,0.313903,1.171562,0.077649,-0.434564, -0.649709,-0.667916,0.362996,1.122445,0.135794,-0.432331, -0.591819,-0.448047,0.670078,1.190836,0.100363,-0.380035, -0.649709,-0.667916,0.362996,1.122445,0.135794,-0.432331, -0.469451,-0.529408,0.706642,1.136509,0.163187,-0.375941, -0.769835,-0.555714,0.313903,1.171562,0.077649,-0.434564, -0.831075,-0.55616,0,1.165137,0.070077,-0.5, -0.713427,-0.700729,0,1.117756,0.126662,-0.5, -0.713427,-0.700729,0,1.117756,0.126662,-0.5, -0.649709,-0.667916,0.362996,1.122445,0.135794,-0.432331, -0.769835,-0.555714,0.313903,1.171562,0.077649,-0.434564, -0.713427,-0.700729,0,1.117756,0.126662,-0.5, -0.60511,-0.796142,0,1.066987,0.171444,-0.5, -0.573691,-0.778283,0.255254,1.070145,0.182308,-0.427025, -0.573691,-0.778283,0.255254,1.070145,0.182308,-0.427025, -0.649709,-0.667916,0.362996,1.122445,0.135794,-0.432331, -0.713427,-0.700729,0,1.117756,0.126662,-0.5, -0.405056,-0.645141,0.64786,1.079619,0.214898,-0.366213, -0.469451,-0.529408,0.706642,1.136509,0.163187,-0.375941, -0.649709,-0.667916,0.362996,1.122445,0.135794,-0.432331, -0.405056,-0.645141,0.64786,1.079619,0.214898,-0.366213, -0.649709,-0.667916,0.362996,1.122445,0.135794,-0.432331, -0.573691,-0.778283,0.255254,1.070145,0.182308,-0.427025, -0.591819,-0.448047,-0.670078,1.190836,0.100363,-0.619965, -0.469451,-0.529408,-0.706642,1.136509,0.163187,-0.624059, -0.649709,-0.667916,-0.362996,1.122445,0.135794,-0.567669, -0.591819,-0.448047,-0.670078,1.190836,0.100363,-0.619965, -0.649709,-0.667916,-0.362996,1.122445,0.135794,-0.567669, -0.769835,-0.555714,-0.313903,1.171562,0.077649,-0.565436, -0.405056,-0.645141,-0.64786,1.079619,0.214898,-0.633787, -0.573691,-0.778283,-0.255254,1.070145,0.182308,-0.572975, -0.649709,-0.667916,-0.362996,1.122445,0.135794,-0.567669, -0.405056,-0.645141,-0.64786,1.079619,0.214898,-0.633787, -0.649709,-0.667916,-0.362996,1.122445,0.135794,-0.567669, -0.469451,-0.529408,-0.706642,1.136509,0.163187,-0.624059, -0.573691,-0.778283,-0.255254,1.070145,0.182308,-0.572975, -0.60511,-0.796142,0,1.066987,0.171444,-0.5, -0.713427,-0.700729,0,1.117756,0.126662,-0.5, -0.713427,-0.700729,0,1.117756,0.126662,-0.5, -0.649709,-0.667916,-0.362996,1.122445,0.135794,-0.567669, -0.573691,-0.778283,-0.255254,1.070145,0.182308,-0.572975, -0.713427,-0.700729,0,1.117756,0.126662,-0.5, -0.831075,-0.55616,0,1.165137,0.070077,-0.5, -0.769835,-0.555714,-0.313903,1.171562,0.077649,-0.565436, -0.769835,-0.555714,-0.313903,1.171562,0.077649,-0.565436, -0.649709,-0.667916,-0.362996,1.122445,0.135794,-0.567669, -0.713427,-0.700729,0,1.117756,0.126662,-0.5, -0.693597,-0.068529,-0.717096,1.333479,-0.188456,-0.659921, -0.356933,0.09138,-0.92965,1.401596,-0.166219,-0.703536, -0.410606,0.007113,-0.911785,1.370721,-0.099359,-0.686572, -0.693597,-0.068529,-0.717096,1.333479,-0.188456,-0.659921, -0.410606,0.007113,-0.911785,1.370721,-0.099359,-0.686572, -0.736772,-0.170063,-0.654405,1.310553,-0.12345,-0.646592, -0.356933,0.09138,-0.92965,1.401596,-0.166219,-0.703536, -0.07755,0.232519,-0.969495,1.483337,-0.139536,-0.718074, -0.076935,0.189453,-0.978871,1.442923,-0.07045,-0.699898, -0.076935,0.189453,-0.978871,1.442923,-0.07045,-0.699898, -0.410606,0.007113,-0.911785,1.370721,-0.099359,-0.686572, -0.356933,0.09138,-0.92965,1.401596,-0.166219,-0.703536, -0.094492,0.118807,-0.988411,1.39106,0.010509,-0.682436, -0.411811,-0.074302,-0.908235,1.329732,-0.022152,-0.670274, -0.410606,0.007113,-0.911785,1.370721,-0.099359,-0.686572, -0.094492,0.118807,-0.988411,1.39106,0.010509,-0.682436, -0.410606,0.007113,-0.911785,1.370721,-0.099359,-0.686572, -0.076935,0.189453,-0.978871,1.442923,-0.07045,-0.699898, -0.691037,-0.22774,-0.686005,1.278626,-0.049369,-0.633787, -0.736772,-0.170063,-0.654405,1.310553,-0.12345,-0.646592, -0.410606,0.007113,-0.911785,1.370721,-0.099359,-0.686572, -0.691037,-0.22774,-0.686005,1.278626,-0.049369,-0.633787, -0.410606,0.007113,-0.911785,1.370721,-0.099359,-0.686572, -0.411811,-0.074302,-0.908235,1.329732,-0.022152,-0.670274, 0.223762,0.38464,-0.895535,1.565078,-0.112852,-0.703536, 0.523401,0.54123,-0.65812,1.633195,-0.090616,-0.659921, 0.523007,0.53259,-0.665441,1.575292,-0.017451,-0.646592, 0.523007,0.53259,-0.665441,1.575292,-0.017451,-0.646592, 0.22394,0.359068,-0.906047,1.515124,-0.041541,-0.686572, 0.223762,0.38464,-0.895535,1.565078,-0.112852,-0.703536, 0.522827,0.522069,-0.673866,1.503495,0.070388,-0.633787, 0.227361,0.327503,-0.917087,1.452388,0.04317,-0.670274, 0.22394,0.359068,-0.906047,1.515124,-0.041541,-0.686572, 0.522827,0.522069,-0.673866,1.503495,0.070388,-0.633787, 0.22394,0.359068,-0.906047,1.515124,-0.041541,-0.686572, 0.523007,0.53259,-0.665441,1.575292,-0.017451,-0.646592, 0.227361,0.327503,-0.917087,1.452388,0.04317,-0.670274, -0.094492,0.118807,-0.988411,1.39106,0.010509,-0.682436, -0.076935,0.189453,-0.978871,1.442923,-0.07045,-0.699898, -0.076935,0.189453,-0.978871,1.442923,-0.07045,-0.699898, 0.22394,0.359068,-0.906047,1.515124,-0.041541,-0.686572, 0.227361,0.327503,-0.917087,1.452388,0.04317,-0.670274, -0.07755,0.232519,-0.969495,1.483337,-0.139536,-0.718074, 0.223762,0.38464,-0.895535,1.565078,-0.112852,-0.703536, 0.22394,0.359068,-0.906047,1.515124,-0.041541,-0.686572, -0.07755,0.232519,-0.969495,1.483337,-0.139536,-0.718074, 0.22394,0.359068,-0.906047,1.515124,-0.041541,-0.686572, -0.076935,0.189453,-0.978871,1.442923,-0.07045,-0.699898, 0.509286,0.493808,-0.704828,1.421294,0.167113,-0.624059, 0.547232,0.498931,-0.672015,1.332183,0.266938,-0.619965, 0.284277,0.249094,-0.925818,1.300058,0.22908,-0.652683, 0.284277,0.249094,-0.925818,1.300058,0.22908,-0.652683, 0.192479,0.2506,-0.948763,1.379742,0.135354,-0.657894, 0.509286,0.493808,-0.704828,1.421294,0.167113,-0.624059, 0.003001,-0.001255,-0.999995,1.261509,0.18365,-0.663589, -0.080719,0.04088,-0.995898,1.329879,0.097243,-0.669172, 0.192479,0.2506,-0.948763,1.379742,0.135354,-0.657894, 0.003001,-0.001255,-0.999995,1.261509,0.18365,-0.663589, 0.192479,0.2506,-0.948763,1.379742,0.135354,-0.657894, 0.284277,0.249094,-0.925818,1.300058,0.22908,-0.652683, -0.094492,0.118807,-0.988411,1.39106,0.010509,-0.682436, 0.227361,0.327503,-0.917087,1.452388,0.04317,-0.670274, 0.192479,0.2506,-0.948763,1.379742,0.135354,-0.657894, -0.094492,0.118807,-0.988411,1.39106,0.010509,-0.682436, 0.192479,0.2506,-0.948763,1.379742,0.135354,-0.657894, -0.080719,0.04088,-0.995898,1.329879,0.097243,-0.669172, 0.227361,0.327503,-0.917087,1.452388,0.04317,-0.670274, 0.522827,0.522069,-0.673866,1.503495,0.070388,-0.633787, 0.509286,0.493808,-0.704828,1.421294,0.167113,-0.624059, 0.509286,0.493808,-0.704828,1.421294,0.167113,-0.624059, 0.192479,0.2506,-0.948763,1.379742,0.135354,-0.657894, 0.227361,0.327503,-0.917087,1.452388,0.04317,-0.670274, -0.591819,-0.448047,-0.670078,1.190836,0.100363,-0.619965, -0.660133,-0.325846,-0.676793,1.238464,0.027373,-0.624059, -0.356146,-0.13643,-0.924417,1.280017,0.059132,-0.657894, -0.591819,-0.448047,-0.670078,1.190836,0.100363,-0.619965, -0.356146,-0.13643,-0.924417,1.280017,0.059132,-0.657894, -0.293198,-0.238286,-0.925881,1.22296,0.138221,-0.652683, -0.660133,-0.325846,-0.676793,1.238464,0.027373,-0.624059, -0.691037,-0.22774,-0.686005,1.278626,-0.049369,-0.633787, -0.411811,-0.074302,-0.908235,1.329732,-0.022152,-0.670274, -0.411811,-0.074302,-0.908235,1.329732,-0.022152,-0.670274, -0.356146,-0.13643,-0.924417,1.280017,0.059132,-0.657894, -0.660133,-0.325846,-0.676793,1.238464,0.027373,-0.624059, -0.094492,0.118807,-0.988411,1.39106,0.010509,-0.682436, -0.080719,0.04088,-0.995898,1.329879,0.097243,-0.669172, -0.356146,-0.13643,-0.924417,1.280017,0.059132,-0.657894, -0.094492,0.118807,-0.988411,1.39106,0.010509,-0.682436, -0.356146,-0.13643,-0.924417,1.280017,0.059132,-0.657894, -0.411811,-0.074302,-0.908235,1.329732,-0.022152,-0.670274, -0.080719,0.04088,-0.995898,1.329879,0.097243,-0.669172, 0.003001,-0.001255,-0.999995,1.261509,0.18365,-0.663589, -0.293198,-0.238286,-0.925881,1.22296,0.138221,-0.652683, -0.293198,-0.238286,-0.925881,1.22296,0.138221,-0.652683, -0.356146,-0.13643,-0.924417,1.280017,0.059132,-0.657894, -0.080719,0.04088,-0.995898,1.329879,0.097243,-0.669172, -0.693597,-0.068529,-0.717096,1.333479,-0.188456,-0.659921, -0.736772,-0.170063,-0.654405,1.310553,-0.12345,-0.646592, -0.904992,-0.260217,-0.336566,1.274453,-0.137904,-0.579959, -0.693597,-0.068529,-0.717096,1.333479,-0.188456,-0.659921, -0.904992,-0.260217,-0.336566,1.274453,-0.137904,-0.579959, -0.932432,-0.178414,-0.314228,1.292609,-0.201797,-0.58723, -0.736772,-0.170063,-0.654405,1.310553,-0.12345,-0.646592, -0.691037,-0.22774,-0.686005,1.278626,-0.049369,-0.633787, -0.880661,-0.339398,-0.330522,1.247962,-0.0657,-0.572975, -0.880661,-0.339398,-0.330522,1.247962,-0.0657,-0.572975, -0.904992,-0.260217,-0.336566,1.274453,-0.137904,-0.579959, -0.736772,-0.170063,-0.654405,1.310553,-0.12345,-0.646592, -0.934966,-0.354738,0,1.237741,-0.071143,-0.5, -0.960468,-0.278392,0,1.262419,-0.142723,-0.5, -0.904992,-0.260217,-0.336566,1.274453,-0.137904,-0.579959, -0.934966,-0.354738,0,1.237741,-0.071143,-0.5, -0.904992,-0.260217,-0.336566,1.274453,-0.137904,-0.579959, -0.880661,-0.339398,-0.330522,1.247962,-0.0657,-0.572975, -0.960468,-0.278392,0,1.262419,-0.142723,-0.5, -0.977953,-0.208824,0,1.278985,-0.206245,-0.5, -0.932432,-0.178414,-0.314228,1.292609,-0.201797,-0.58723, -0.932432,-0.178414,-0.314228,1.292609,-0.201797,-0.58723, -0.904992,-0.260217,-0.336566,1.274453,-0.137904,-0.579959, -0.960468,-0.278392,0,1.262419,-0.142723,-0.5, -0.660133,-0.325846,-0.676793,1.238464,0.027373,-0.624059, -0.591819,-0.448047,-0.670078,1.190836,0.100363,-0.619965, -0.769835,-0.555714,-0.313903,1.171562,0.077649,-0.565436, -0.769835,-0.555714,-0.313903,1.171562,0.077649,-0.565436, -0.841533,-0.433873,-0.321832,1.213533,0.008318,-0.567669, -0.660133,-0.325846,-0.676793,1.238464,0.027373,-0.624059, -0.831075,-0.55616,0,1.165137,0.070077,-0.5, -0.896641,-0.442758,0,1.205222,0.001966,-0.5, -0.841533,-0.433873,-0.321832,1.213533,0.008318,-0.567669, -0.831075,-0.55616,0,1.165137,0.070077,-0.5, -0.841533,-0.433873,-0.321832,1.213533,0.008318,-0.567669, -0.769835,-0.555714,-0.313903,1.171562,0.077649,-0.565436, -0.896641,-0.442758,0,1.205222,0.001966,-0.5, -0.934966,-0.354738,0,1.237741,-0.071143,-0.5, -0.880661,-0.339398,-0.330522,1.247962,-0.0657,-0.572975, -0.880661,-0.339398,-0.330522,1.247962,-0.0657,-0.572975, -0.841533,-0.433873,-0.321832,1.213533,0.008318,-0.567669, -0.896641,-0.442758,0,1.205222,0.001966,-0.5, -0.841533,-0.433873,-0.321832,1.213533,0.008318,-0.567669, -0.880661,-0.339398,-0.330522,1.247962,-0.0657,-0.572975, -0.691037,-0.22774,-0.686005,1.278626,-0.049369,-0.633787, -0.691037,-0.22774,-0.686005,1.278626,-0.049369,-0.633787, -0.660133,-0.325846,-0.676793,1.238464,0.027373,-0.624059, -0.841533,-0.433873,-0.321832,1.213533,0.008318,-0.567669, -0.769835,-0.555714,0.313903,1.171562,0.077649,-0.434564, -0.591819,-0.448047,0.670078,1.190836,0.100363,-0.380035, -0.660133,-0.325846,0.676793,1.238464,0.027373,-0.375941, -0.660133,-0.325846,0.676793,1.238464,0.027373,-0.375941, -0.841533,-0.433873,0.321832,1.213533,0.008318,-0.432331, -0.769835,-0.555714,0.313903,1.171562,0.077649,-0.434564, -0.841533,-0.433873,0.321832,1.213533,0.008318,-0.432331, -0.660133,-0.325846,0.676793,1.238464,0.027373,-0.375941, -0.691037,-0.22774,0.686005,1.278626,-0.049369,-0.366213, -0.691037,-0.22774,0.686005,1.278626,-0.049369,-0.366213, -0.880661,-0.339398,0.330522,1.247962,-0.0657,-0.427025, -0.841533,-0.433873,0.321832,1.213533,0.008318,-0.432331, -0.880661,-0.339398,0.330522,1.247962,-0.0657,-0.427025, -0.934966,-0.354738,0,1.237741,-0.071143,-0.5, -0.896641,-0.442758,0,1.205222,0.001966,-0.5, -0.896641,-0.442758,0,1.205222,0.001966,-0.5, -0.841533,-0.433873,0.321832,1.213533,0.008318,-0.432331, -0.880661,-0.339398,0.330522,1.247962,-0.0657,-0.427025, -0.831075,-0.55616,0,1.165137,0.070077,-0.5, -0.769835,-0.555714,0.313903,1.171562,0.077649,-0.434564, -0.841533,-0.433873,0.321832,1.213533,0.008318,-0.432331, -0.831075,-0.55616,0,1.165137,0.070077,-0.5, -0.841533,-0.433873,0.321832,1.213533,0.008318,-0.432331, -0.896641,-0.442758,0,1.205222,0.001966,-0.5, -0.693597,-0.068529,0.717096,1.333479,-0.188456,-0.340079, -0.932432,-0.178414,0.314228,1.292609,-0.201797,-0.41277, -0.904992,-0.260217,0.336566,1.274453,-0.137904,-0.420041, -0.693597,-0.068529,0.717096,1.333479,-0.188456,-0.340079, -0.904992,-0.260217,0.336566,1.274453,-0.137904,-0.420041, -0.736772,-0.170063,0.654405,1.310553,-0.12345,-0.353408, -0.932432,-0.178414,0.314228,1.292609,-0.201797,-0.41277, -0.977953,-0.208824,0,1.278985,-0.206245,-0.5, -0.960468,-0.278392,0,1.262419,-0.142723,-0.5, -0.960468,-0.278392,0,1.262419,-0.142723,-0.5, -0.904992,-0.260217,0.336566,1.274453,-0.137904,-0.420041, -0.932432,-0.178414,0.314228,1.292609,-0.201797,-0.41277, -0.934966,-0.354738,0,1.237741,-0.071143,-0.5, -0.880661,-0.339398,0.330522,1.247962,-0.0657,-0.427025, -0.904992,-0.260217,0.336566,1.274453,-0.137904,-0.420041, -0.934966,-0.354738,0,1.237741,-0.071143,-0.5, -0.904992,-0.260217,0.336566,1.274453,-0.137904,-0.420041, -0.960468,-0.278392,0,1.262419,-0.142723,-0.5, -0.880661,-0.339398,0.330522,1.247962,-0.0657,-0.427025, -0.691037,-0.22774,0.686005,1.278626,-0.049369,-0.366213, -0.736772,-0.170063,0.654405,1.310553,-0.12345,-0.353408, -0.736772,-0.170063,0.654405,1.310553,-0.12345,-0.353408, -0.904992,-0.260217,0.336566,1.274453,-0.137904,-0.420041, -0.880661,-0.339398,0.330522,1.247962,-0.0657,-0.427025, -0.693597,-0.068529,0.717096,1.333479,-0.188456,-0.340079, -0.736772,-0.170063,0.654405,1.310553,-0.12345,-0.353408, -0.410607,0.007113,0.911785,1.370721,-0.099359,-0.313428, -0.693597,-0.068529,0.717096,1.333479,-0.188456,-0.340079, -0.410607,0.007113,0.911785,1.370721,-0.099359,-0.313428, -0.356933,0.09138,0.92965,1.401596,-0.166219,-0.296464, -0.691037,-0.22774,0.686005,1.278626,-0.049369,-0.366213, -0.411811,-0.074302,0.908235,1.329732,-0.022152,-0.329726, -0.410607,0.007113,0.911785,1.370721,-0.099359,-0.313428, -0.691037,-0.22774,0.686005,1.278626,-0.049369,-0.366213, -0.410607,0.007113,0.911785,1.370721,-0.099359,-0.313428, -0.736772,-0.170063,0.654405,1.310553,-0.12345,-0.353408, -0.094492,0.118807,0.988411,1.39106,0.010509,-0.317564, -0.076935,0.189453,0.978871,1.442923,-0.07045,-0.300102, -0.410607,0.007113,0.911785,1.370721,-0.099359,-0.313428, -0.094492,0.118807,0.988411,1.39106,0.010509,-0.317564, -0.410607,0.007113,0.911785,1.370721,-0.099359,-0.313428, -0.411811,-0.074302,0.908235,1.329732,-0.022152,-0.329726, -0.076935,0.189453,0.978871,1.442923,-0.07045,-0.300102, -0.07755,0.232519,0.969495,1.483337,-0.139536,-0.281926, -0.356933,0.09138,0.92965,1.401596,-0.166219,-0.296464, -0.356933,0.09138,0.92965,1.401596,-0.166219,-0.296464, -0.410607,0.007113,0.911785,1.370721,-0.099359,-0.313428, -0.076935,0.189453,0.978871,1.442923,-0.07045,-0.300102, -0.591819,-0.448047,0.670078,1.190836,0.100363,-0.380035, -0.293197,-0.238286,0.925881,1.22296,0.138221,-0.347317, -0.356146,-0.13643,0.924417,1.280017,0.059132,-0.342106, -0.591819,-0.448047,0.670078,1.190836,0.100363,-0.380035, -0.356146,-0.13643,0.924417,1.280017,0.059132,-0.342106, -0.660133,-0.325846,0.676793,1.238464,0.027373,-0.375941, -0.293197,-0.238286,0.925881,1.22296,0.138221,-0.347317, 0.003001,-0.001255,0.999995,1.261509,0.18365,-0.336411, -0.080719,0.04088,0.995898,1.329879,0.097243,-0.330828, -0.080719,0.04088,0.995898,1.329879,0.097243,-0.330828, -0.356146,-0.13643,0.924417,1.280017,0.059132,-0.342106, -0.293197,-0.238286,0.925881,1.22296,0.138221,-0.347317, -0.094492,0.118807,0.988411,1.39106,0.010509,-0.317564, -0.411811,-0.074302,0.908235,1.329732,-0.022152,-0.329726, -0.356146,-0.13643,0.924417,1.280017,0.059132,-0.342106, -0.094492,0.118807,0.988411,1.39106,0.010509,-0.317564, -0.356146,-0.13643,0.924417,1.280017,0.059132,-0.342106, -0.080719,0.04088,0.995898,1.329879,0.097243,-0.330828, -0.411811,-0.074302,0.908235,1.329732,-0.022152,-0.329726, -0.691037,-0.22774,0.686005,1.278626,-0.049369,-0.366213, -0.660133,-0.325846,0.676793,1.238464,0.027373,-0.375941, -0.660133,-0.325846,0.676793,1.238464,0.027373,-0.375941, -0.356146,-0.13643,0.924417,1.280017,0.059132,-0.342106, -0.411811,-0.074302,0.908235,1.329732,-0.022152,-0.329726, 0.284277,0.249093,0.925818,1.300058,0.22908,-0.347317, 0.547232,0.498931,0.672016,1.332183,0.266938,-0.380035, 0.509286,0.493808,0.704828,1.421294,0.167113,-0.375941, 0.509286,0.493808,0.704828,1.421294,0.167113,-0.375941, 0.192478,0.250599,0.948763,1.379742,0.135354,-0.342106, 0.284277,0.249093,0.925818,1.300058,0.22908,-0.347317, 0.509286,0.493808,0.704828,1.421294,0.167113,-0.375941, 0.522827,0.522069,0.673866,1.503495,0.070388,-0.366213, 0.227361,0.327503,0.917087,1.452388,0.04317,-0.329726, 0.227361,0.327503,0.917087,1.452388,0.04317,-0.329726, 0.192478,0.250599,0.948763,1.379742,0.135354,-0.342106, 0.509286,0.493808,0.704828,1.421294,0.167113,-0.375941, -0.094492,0.118807,0.988411,1.39106,0.010509,-0.317564, -0.080719,0.04088,0.995898,1.329879,0.097243,-0.330828, 0.192478,0.250599,0.948763,1.379742,0.135354,-0.342106, -0.094492,0.118807,0.988411,1.39106,0.010509,-0.317564, 0.192478,0.250599,0.948763,1.379742,0.135354,-0.342106, 0.227361,0.327503,0.917087,1.452388,0.04317,-0.329726, 0.003001,-0.001255,0.999995,1.261509,0.18365,-0.336411, 0.284277,0.249093,0.925818,1.300058,0.22908,-0.347317, 0.192478,0.250599,0.948763,1.379742,0.135354,-0.342106, 0.003001,-0.001255,0.999995,1.261509,0.18365,-0.336411, 0.192478,0.250599,0.948763,1.379742,0.135354,-0.342106, -0.080719,0.04088,0.995898,1.329879,0.097243,-0.330828, 0.523007,0.53259,0.665441,1.575292,-0.017451,-0.353408, 0.523401,0.54123,0.65812,1.633195,-0.090616,-0.340079, 0.223762,0.384639,0.895535,1.565078,-0.112852,-0.296464, 0.223762,0.384639,0.895535,1.565078,-0.112852,-0.296464, 0.22394,0.359067,0.906047,1.515124,-0.041541,-0.313428, 0.523007,0.53259,0.665441,1.575292,-0.017451,-0.353408, -0.07755,0.232519,0.969495,1.483337,-0.139536,-0.281926, -0.076935,0.189453,0.978871,1.442923,-0.07045,-0.300102, 0.22394,0.359067,0.906047,1.515124,-0.041541,-0.313428, -0.07755,0.232519,0.969495,1.483337,-0.139536,-0.281926, 0.22394,0.359067,0.906047,1.515124,-0.041541,-0.313428, 0.223762,0.384639,0.895535,1.565078,-0.112852,-0.296464, -0.076935,0.189453,0.978871,1.442923,-0.07045,-0.300102, -0.094492,0.118807,0.988411,1.39106,0.010509,-0.317564, 0.227361,0.327503,0.917087,1.452388,0.04317,-0.329726, 0.227361,0.327503,0.917087,1.452388,0.04317,-0.329726, 0.22394,0.359067,0.906047,1.515124,-0.041541,-0.313428, -0.076935,0.189453,0.978871,1.442923,-0.07045,-0.300102, 0.522827,0.522069,0.673866,1.503495,0.070388,-0.366213, 0.523007,0.53259,0.665441,1.575292,-0.017451,-0.353408, 0.22394,0.359067,0.906047,1.515124,-0.041541,-0.313428, 0.522827,0.522069,0.673866,1.503495,0.070388,-0.366213, 0.22394,0.359067,0.906047,1.515124,-0.041541,-0.313428, 0.227361,0.327503,0.917087,1.452388,0.04317,-0.329726, 0.709684,0.62897,0.317403,1.674065,-0.077274,-0.41277, 0.523401,0.54123,0.65812,1.633195,-0.090616,-0.340079, 0.523007,0.53259,0.665441,1.575292,-0.017451,-0.353408, 0.523007,0.53259,0.665441,1.575292,-0.017451,-0.353408, 0.706952,0.630412,0.320624,1.611392,-0.002996,-0.420041, 0.709684,0.62897,0.317403,1.674065,-0.077274,-0.41277, 0.522827,0.522069,0.673866,1.503495,0.070388,-0.366213, 0.703,0.633573,0.323073,1.534158,0.086718,-0.427025, 0.706952,0.630412,0.320624,1.611392,-0.002996,-0.420041, 0.522827,0.522069,0.673866,1.503495,0.070388,-0.366213, 0.706952,0.630412,0.320624,1.611392,-0.002996,-0.420041, 0.523007,0.53259,0.665441,1.575292,-0.017451,-0.353408, 0.703,0.633573,0.323073,1.534158,0.086718,-0.427025, 0.747578,0.664174,0,1.54438,0.092162,-0.5, 0.754132,0.656723,0,1.623426,0.001822,-0.5, 0.754132,0.656723,0,1.623426,0.001822,-0.5, 0.706952,0.630412,0.320624,1.611392,-0.002996,-0.420041, 0.703,0.633573,0.323073,1.534158,0.086718,-0.427025, 0.758437,0.651747,0,1.687689,-0.072827,-0.5, 0.709684,0.62897,0.317403,1.674065,-0.077274,-0.41277, 0.706952,0.630412,0.320624,1.611392,-0.002996,-0.420041, 0.758437,0.651747,0,1.687689,-0.072827,-0.5, 0.706952,0.630412,0.320624,1.611392,-0.002996,-0.420041, 0.754132,0.656723,0,1.623426,0.001822,-0.5, 0.547232,0.498931,0.672016,1.332183,0.266938,-0.380035, 0.694102,0.647395,0.314805,1.351457,0.289652,-0.434564, 0.698693,0.638817,0.32209,1.446226,0.186168,-0.432331, 0.547232,0.498931,0.672016,1.332183,0.266938,-0.380035, 0.698693,0.638817,0.32209,1.446226,0.186168,-0.432331, 0.509286,0.493808,0.704828,1.421294,0.167113,-0.375941, 0.694102,0.647395,0.314805,1.351457,0.289652,-0.434564, 0.726158,0.687528,0,1.357882,0.297224,-0.5, 0.738573,0.674173,0,1.454536,0.19252,-0.5, 0.738573,0.674173,0,1.454536,0.19252,-0.5, 0.698693,0.638817,0.32209,1.446226,0.186168,-0.432331, 0.694102,0.647395,0.314805,1.351457,0.289652,-0.434564, 0.747578,0.664174,0,1.54438,0.092162,-0.5, 0.703,0.633573,0.323073,1.534158,0.086718,-0.427025, 0.698693,0.638817,0.32209,1.446226,0.186168,-0.432331, 0.747578,0.664174,0,1.54438,0.092162,-0.5, 0.698693,0.638817,0.32209,1.446226,0.186168,-0.432331, 0.738573,0.674173,0,1.454536,0.19252,-0.5, 0.703,0.633573,0.323073,1.534158,0.086718,-0.427025, 0.522827,0.522069,0.673866,1.503495,0.070388,-0.366213, 0.509286,0.493808,0.704828,1.421294,0.167113,-0.375941, 0.509286,0.493808,0.704828,1.421294,0.167113,-0.375941, 0.698693,0.638817,0.32209,1.446226,0.186168,-0.432331, 0.703,0.633573,0.323073,1.534158,0.086718,-0.427025, 0.547232,0.498931,-0.672015,1.332183,0.266938,-0.619965, 0.509286,0.493808,-0.704828,1.421294,0.167113,-0.624059, 0.698693,0.638817,-0.32209,1.446226,0.186168,-0.567669, 0.547232,0.498931,-0.672015,1.332183,0.266938,-0.619965, 0.698693,0.638817,-0.32209,1.446226,0.186168,-0.567669, 0.694102,0.647395,-0.314805,1.351457,0.289652,-0.565436, 0.509286,0.493808,-0.704828,1.421294,0.167113,-0.624059, 0.522827,0.522069,-0.673866,1.503495,0.070388,-0.633787, 0.703,0.633573,-0.323073,1.534158,0.086718,-0.572975, 0.703,0.633573,-0.323073,1.534158,0.086718,-0.572975, 0.698693,0.638817,-0.32209,1.446226,0.186168,-0.567669, 0.509286,0.493808,-0.704828,1.421294,0.167113,-0.624059, 0.747578,0.664174,0,1.54438,0.092162,-0.5, 0.738573,0.674173,0,1.454536,0.19252,-0.5, 0.698693,0.638817,-0.32209,1.446226,0.186168,-0.567669, 0.747578,0.664174,0,1.54438,0.092162,-0.5, 0.698693,0.638817,-0.32209,1.446226,0.186168,-0.567669, 0.703,0.633573,-0.323073,1.534158,0.086718,-0.572975, 0.738573,0.674173,0,1.454536,0.19252,-0.5, 0.726158,0.687528,0,1.357882,0.297224,-0.5, 0.694102,0.647395,-0.314805,1.351457,0.289652,-0.565436, 0.694102,0.647395,-0.314805,1.351457,0.289652,-0.565436, 0.698693,0.638817,-0.32209,1.446226,0.186168,-0.567669, 0.738573,0.674173,0,1.454536,0.19252,-0.5, 0.523007,0.53259,-0.665441,1.575292,-0.017451,-0.646592, 0.523401,0.54123,-0.65812,1.633195,-0.090616,-0.659921, 0.709684,0.62897,-0.317403,1.674065,-0.077274,-0.58723, 0.709684,0.62897,-0.317403,1.674065,-0.077274,-0.58723, 0.706952,0.630412,-0.320624,1.611392,-0.002996,-0.579959, 0.523007,0.53259,-0.665441,1.575292,-0.017451,-0.646592, 0.758437,0.651747,0,1.687689,-0.072827,-0.5, 0.754132,0.656723,0,1.623426,0.001822,-0.5, 0.706952,0.630412,-0.320624,1.611392,-0.002996,-0.579959, 0.758437,0.651747,0,1.687689,-0.072827,-0.5, 0.706952,0.630412,-0.320624,1.611392,-0.002996,-0.579959, 0.709684,0.62897,-0.317403,1.674065,-0.077274,-0.58723, 0.754132,0.656723,0,1.623426,0.001822,-0.5, 0.747578,0.664174,0,1.54438,0.092162,-0.5, 0.703,0.633573,-0.323073,1.534158,0.086718,-0.572975, 0.703,0.633573,-0.323073,1.534158,0.086718,-0.572975, 0.706952,0.630412,-0.320624,1.611392,-0.002996,-0.579959, 0.754132,0.656723,0,1.623426,0.001822,-0.5, 0.522827,0.522069,-0.673866,1.503495,0.070388,-0.633787, 0.523007,0.53259,-0.665441,1.575292,-0.017451,-0.646592, 0.706952,0.630412,-0.320624,1.611392,-0.002996,-0.579959, 0.522827,0.522069,-0.673866,1.503495,0.070388,-0.633787, 0.706952,0.630412,-0.320624,1.611392,-0.002996,-0.579959, 0.703,0.633573,-0.323073,1.534158,0.086718,-0.572975, 0.523401,0.54123,0.65812,1.633195,-0.090616,-0.340079, 0.709684,0.62897,0.317403,1.674065,-0.077274,-0.41277, 0.765571,0.555064,0.325277,1.718314,-0.130413,-0.406608, 0.523401,0.54123,0.65812,1.633195,-0.090616,-0.340079, 0.765571,0.555064,0.325277,1.718314,-0.130413,-0.406608, 0.58545,0.437052,0.682813,1.673712,-0.14332,-0.328782, 0.709684,0.62897,0.317403,1.674065,-0.077274,-0.41277, 0.758437,0.651747,0,1.687689,-0.072827,-0.5, 0.798106,0.602517,0,1.733181,-0.12611,-0.5, 0.798106,0.602517,0,1.733181,-0.12611,-0.5, 0.765571,0.555064,0.325277,1.718314,-0.130413,-0.406608, 0.709684,0.62897,0.317403,1.674065,-0.077274,-0.41277, 0.990091,0.14043,0,1.755118,-0.163978,-0.5, 0.911574,0.083749,0.402517,1.73961,-0.167898,-0.405277, 0.765571,0.555064,0.325277,1.718314,-0.130413,-0.406608, 0.990091,0.14043,0,1.755118,-0.163978,-0.5, 0.765571,0.555064,0.325277,1.718314,-0.130413,-0.406608, 0.798106,0.602517,0,1.733181,-0.12611,-0.5, 0.911574,0.083749,0.402517,1.73961,-0.167898,-0.405277, 0.722198,-0.015351,0.691516,1.693578,-0.180157,-0.326227, 0.58545,0.437052,0.682813,1.673712,-0.14332,-0.328782, 0.58545,0.437052,0.682813,1.673712,-0.14332,-0.328782, 0.765571,0.555064,0.325277,1.718314,-0.130413,-0.406608, 0.911574,0.083749,0.402517,1.73961,-0.167898,-0.405277, 0.523401,0.54123,-0.65812,1.633195,-0.090616,-0.659921, 0.58545,0.437052,-0.682813,1.673712,-0.14332,-0.671218, 0.765571,0.555064,-0.325277,1.718314,-0.130413,-0.593392, 0.523401,0.54123,-0.65812,1.633195,-0.090616,-0.659921, 0.765571,0.555064,-0.325277,1.718314,-0.130413,-0.593392, 0.709684,0.62897,-0.317403,1.674065,-0.077274,-0.58723, 0.58545,0.437052,-0.682813,1.673712,-0.14332,-0.671218, 0.722198,-0.015351,-0.691516,1.693578,-0.180157,-0.673773, 0.911574,0.083749,-0.402516,1.73961,-0.167898,-0.594723, 0.911574,0.083749,-0.402516,1.73961,-0.167898,-0.594723, 0.765571,0.555064,-0.325277,1.718314,-0.130413,-0.593392, 0.58545,0.437052,-0.682813,1.673712,-0.14332,-0.671218, 0.990091,0.14043,0,1.755118,-0.163978,-0.5, 0.798106,0.602517,0,1.733181,-0.12611,-0.5, 0.765571,0.555064,-0.325277,1.718314,-0.130413,-0.593392, 0.990091,0.14043,0,1.755118,-0.163978,-0.5, 0.765571,0.555064,-0.325277,1.718314,-0.130413,-0.593392, 0.911574,0.083749,-0.402516,1.73961,-0.167898,-0.594723, 0.798106,0.602517,0,1.733181,-0.12611,-0.5, 0.758437,0.651747,0,1.687689,-0.072827,-0.5, 0.709684,0.62897,-0.317403,1.674065,-0.077274,-0.58723, 0.709684,0.62897,-0.317403,1.674065,-0.077274,-0.58723, 0.765571,0.555064,-0.325277,1.718314,-0.130413,-0.593392, 0.798106,0.602517,0,1.733181,-0.12611,-0.5, 0.442953,-0.878385,-0.179534,1.670754,-0.221475,-0.638667, 0.43479,-0.894931,-0.100277,1.696988,-0.219088,-0.5825, 0.746757,-0.63494,-0.198004,1.733426,-0.195216,-0.5875, 0.442953,-0.878385,-0.179534,1.670754,-0.221475,-0.638667, 0.746757,-0.63494,-0.198004,1.733426,-0.195216,-0.5875, 0.633983,-0.622541,-0.458813,1.689524,-0.205721,-0.660875, 0.487185,-0.873299,0,1.710058,-0.217878,-0.5, 0.821423,-0.57032,0,1.748713,-0.192378,-0.5, 0.746757,-0.63494,-0.198004,1.733426,-0.195216,-0.5875, 0.487185,-0.873299,0,1.710058,-0.217878,-0.5, 0.746757,-0.63494,-0.198004,1.733426,-0.195216,-0.5875, 0.43479,-0.894931,-0.100277,1.696988,-0.219088,-0.5825, 0.990091,0.14043,0,1.755118,-0.163978,-0.5, 0.911574,0.083749,-0.402516,1.73961,-0.167898,-0.594723, 0.746757,-0.63494,-0.198004,1.733426,-0.195216,-0.5875, 0.990091,0.14043,0,1.755118,-0.163978,-0.5, 0.746757,-0.63494,-0.198004,1.733426,-0.195216,-0.5875, 0.821423,-0.57032,0,1.748713,-0.192378,-0.5, 0.911574,0.083749,-0.402516,1.73961,-0.167898,-0.594723, 0.722198,-0.015351,-0.691516,1.693578,-0.180157,-0.673773, 0.633983,-0.622541,-0.458813,1.689524,-0.205721,-0.660875, 0.633983,-0.622541,-0.458813,1.689524,-0.205721,-0.660875, 0.746757,-0.63494,-0.198004,1.733426,-0.195216,-0.5875, 0.911574,0.083749,-0.402516,1.73961,-0.167898,-0.594723, 0.442953,-0.878385,0.179534,1.670754,-0.221475,-0.361333, 0.633983,-0.62254,0.458813,1.689524,-0.205721,-0.339125, 0.746757,-0.63494,0.198005,1.733426,-0.195216,-0.4125, 0.442953,-0.878385,0.179534,1.670754,-0.221475,-0.361333, 0.746757,-0.63494,0.198005,1.733426,-0.195216,-0.4125, 0.43479,-0.894931,0.100278,1.696988,-0.219088,-0.4175, 0.633983,-0.62254,0.458813,1.689524,-0.205721,-0.339125, 0.722198,-0.015351,0.691516,1.693578,-0.180157,-0.326227, 0.911574,0.083749,0.402517,1.73961,-0.167898,-0.405277, 0.911574,0.083749,0.402517,1.73961,-0.167898,-0.405277, 0.746757,-0.63494,0.198005,1.733426,-0.195216,-0.4125, 0.633983,-0.62254,0.458813,1.689524,-0.205721,-0.339125, 0.990091,0.14043,0,1.755118,-0.163978,-0.5, 0.821423,-0.57032,0,1.748713,-0.192378,-0.5, 0.746757,-0.63494,0.198005,1.733426,-0.195216,-0.4125, 0.990091,0.14043,0,1.755118,-0.163978,-0.5, 0.746757,-0.63494,0.198005,1.733426,-0.195216,-0.4125, 0.911574,0.083749,0.402517,1.73961,-0.167898,-0.405277, 0.487185,-0.873299,0,1.710058,-0.217878,-0.5, 0.43479,-0.894931,0.100278,1.696988,-0.219088,-0.4175, 0.746757,-0.63494,0.198005,1.733426,-0.195216,-0.4125, 0.487185,-0.873299,0,1.710058,-0.217878,-0.5, 0.746757,-0.63494,0.198005,1.733426,-0.195216,-0.4125, 0.821423,-0.57032,0,1.748713,-0.192378,-0.5, 0.523401,0.54123,-0.65812,1.633195,-0.090616,-0.659921, 0.223762,0.38464,-0.895535,1.565078,-0.112852,-0.703536, 0.256589,0.31723,-0.912977,1.599377,-0.164832,-0.717914, 0.523401,0.54123,-0.65812,1.633195,-0.090616,-0.659921, 0.256589,0.31723,-0.912977,1.599377,-0.164832,-0.717914, 0.58545,0.437052,-0.682813,1.673712,-0.14332,-0.671218, 0.223762,0.38464,-0.895535,1.565078,-0.112852,-0.703536, -0.07755,0.232519,-0.969495,1.483337,-0.139536,-0.718074, -0.053569,0.174234,-0.983246,1.510174,-0.190646,-0.73348, -0.053569,0.174234,-0.983246,1.510174,-0.190646,-0.73348, 0.256589,0.31723,-0.912977,1.599377,-0.164832,-0.717914, 0.223762,0.38464,-0.895535,1.565078,-0.112852,-0.703536, 0.100693,-0.274502,-0.9563,1.526344,-0.226473,-0.737495, 0.442231,-0.107524,-0.890433,1.617509,-0.201252,-0.721479, 0.256589,0.31723,-0.912977,1.599377,-0.164832,-0.717914, 0.100693,-0.274502,-0.9563,1.526344,-0.226473,-0.737495, 0.256589,0.31723,-0.912977,1.599377,-0.164832,-0.717914, -0.053569,0.174234,-0.983246,1.510174,-0.190646,-0.73348, 0.442231,-0.107524,-0.890433,1.617509,-0.201252,-0.721479, 0.722198,-0.015351,-0.691516,1.693578,-0.180157,-0.673773, 0.58545,0.437052,-0.682813,1.673712,-0.14332,-0.671218, 0.58545,0.437052,-0.682813,1.673712,-0.14332,-0.671218, 0.256589,0.31723,-0.912977,1.599377,-0.164832,-0.717914, 0.442231,-0.107524,-0.890433,1.617509,-0.201252,-0.721479, -0.693597,-0.068529,-0.717096,1.333479,-0.188456,-0.659921, -0.738864,-0.111606,-0.664548,1.346635,-0.237972,-0.671218, -0.39719,0.033721,-0.917117,1.420971,-0.21646,-0.717914, -0.693597,-0.068529,-0.717096,1.333479,-0.188456,-0.659921, -0.39719,0.033721,-0.917117,1.420971,-0.21646,-0.717914, -0.356933,0.09138,-0.92965,1.401596,-0.166219,-0.703536, -0.588534,-0.475384,-0.653941,1.358796,-0.271614,-0.673773, -0.236076,-0.378114,-0.895152,1.435022,-0.251106,-0.721479, -0.39719,0.033721,-0.917117,1.420971,-0.21646,-0.717914, -0.588534,-0.475384,-0.653941,1.358796,-0.271614,-0.673773, -0.39719,0.033721,-0.917117,1.420971,-0.21646,-0.717914, -0.738864,-0.111606,-0.664548,1.346635,-0.237972,-0.671218, -0.236076,-0.378114,-0.895152,1.435022,-0.251106,-0.721479, 0.100693,-0.274502,-0.9563,1.526344,-0.226473,-0.737495, -0.053569,0.174234,-0.983246,1.510174,-0.190646,-0.73348, -0.053569,0.174234,-0.983246,1.510174,-0.190646,-0.73348, -0.39719,0.033721,-0.917117,1.420971,-0.21646,-0.717914, -0.236076,-0.378114,-0.895152,1.435022,-0.251106,-0.721479, -0.07755,0.232519,-0.969495,1.483337,-0.139536,-0.718074, -0.356933,0.09138,-0.92965,1.401596,-0.166219,-0.703536, -0.39719,0.033721,-0.917117,1.420971,-0.21646,-0.717914, -0.07755,0.232519,-0.969495,1.483337,-0.139536,-0.718074, -0.39719,0.033721,-0.917117,1.420971,-0.21646,-0.717914, -0.053569,0.174234,-0.983246,1.510174,-0.190646,-0.73348, 0.055786,-0.978343,-0.199329,1.40287,-0.293254,-0.638667, 0.155998,-0.969633,-0.18835,1.458284,-0.283049,-0.664625, 0.03573,-0.852716,-0.521152,1.449927,-0.271179,-0.706, 0.055786,-0.978343,-0.199329,1.40287,-0.293254,-0.638667, 0.03573,-0.852716,-0.521152,1.449927,-0.271179,-0.706, -0.175453,-0.874143,-0.452869,1.378738,-0.288996,-0.660875, 0.25096,-0.936595,-0.244557,1.538546,-0.263835,-0.677562, 0.205519,-0.76511,-0.61022,1.53476,-0.249706,-0.7215, 0.03573,-0.852716,-0.521152,1.449927,-0.271179,-0.706, 0.25096,-0.936595,-0.244557,1.538546,-0.263835,-0.677562, 0.03573,-0.852716,-0.521152,1.449927,-0.271179,-0.706, 0.155998,-0.969633,-0.18835,1.458284,-0.283049,-0.664625, 0.100693,-0.274502,-0.9563,1.526344,-0.226473,-0.737495, -0.236076,-0.378114,-0.895152,1.435022,-0.251106,-0.721479, 0.03573,-0.852716,-0.521152,1.449927,-0.271179,-0.706, 0.100693,-0.274502,-0.9563,1.526344,-0.226473,-0.737495, 0.03573,-0.852716,-0.521152,1.449927,-0.271179,-0.706, 0.205519,-0.76511,-0.61022,1.53476,-0.249706,-0.7215, -0.236076,-0.378114,-0.895152,1.435022,-0.251106,-0.721479, -0.588534,-0.475384,-0.653941,1.358796,-0.271614,-0.673773, -0.175453,-0.874143,-0.452869,1.378738,-0.288996,-0.660875, -0.175453,-0.874143,-0.452869,1.378738,-0.288996,-0.660875, 0.03573,-0.852716,-0.521152,1.449927,-0.271179,-0.706, -0.236076,-0.378114,-0.895152,1.435022,-0.251106,-0.721479, 0.361333,-0.91087,-0.199385,1.617662,-0.240344,-0.664625, 0.442953,-0.878385,-0.179534,1.670754,-0.221475,-0.638667, 0.633983,-0.622541,-0.458813,1.689524,-0.205721,-0.660875, 0.633983,-0.622541,-0.458813,1.689524,-0.205721,-0.660875, 0.389599,-0.715498,-0.579893,1.618964,-0.225886,-0.706, 0.361333,-0.91087,-0.199385,1.617662,-0.240344,-0.664625, 0.633983,-0.622541,-0.458813,1.689524,-0.205721,-0.660875, 0.722198,-0.015351,-0.691516,1.693578,-0.180157,-0.673773, 0.442231,-0.107524,-0.890433,1.617509,-0.201252,-0.721479, 0.442231,-0.107524,-0.890433,1.617509,-0.201252,-0.721479, 0.389599,-0.715498,-0.579893,1.618964,-0.225886,-0.706, 0.633983,-0.622541,-0.458813,1.689524,-0.205721,-0.660875, 0.100693,-0.274502,-0.9563,1.526344,-0.226473,-0.737495, 0.205519,-0.76511,-0.61022,1.53476,-0.249706,-0.7215, 0.389599,-0.715498,-0.579893,1.618964,-0.225886,-0.706, 0.100693,-0.274502,-0.9563,1.526344,-0.226473,-0.737495, 0.389599,-0.715498,-0.579893,1.618964,-0.225886,-0.706, 0.442231,-0.107524,-0.890433,1.617509,-0.201252,-0.721479, 0.25096,-0.936595,-0.244557,1.538546,-0.263835,-0.677562, 0.361333,-0.91087,-0.199385,1.617662,-0.240344,-0.664625, 0.389599,-0.715498,-0.579893,1.618964,-0.225886,-0.706, 0.25096,-0.936595,-0.244557,1.538546,-0.263835,-0.677562, 0.389599,-0.715498,-0.579893,1.618964,-0.225886,-0.706, 0.205519,-0.76511,-0.61022,1.53476,-0.249706,-0.7215, -0.738864,-0.111606,-0.664548,1.346635,-0.237972,-0.671218, -0.693597,-0.068529,-0.717096,1.333479,-0.188456,-0.659921, -0.932432,-0.178414,-0.314228,1.292609,-0.201797,-0.58723, -0.932432,-0.178414,-0.314228,1.292609,-0.201797,-0.58723, -0.899118,-0.21787,-0.37963,1.302034,-0.25088,-0.593392, -0.738864,-0.111606,-0.664548,1.346635,-0.237972,-0.671218, -0.932432,-0.178414,-0.314228,1.292609,-0.201797,-0.58723, -0.977953,-0.208824,0,1.278985,-0.206245,-0.5, -0.972456,-0.233085,0,1.287166,-0.255182,-0.5, -0.972456,-0.233085,0,1.287166,-0.255182,-0.5, -0.899118,-0.21787,-0.37963,1.302034,-0.25088,-0.593392, -0.932432,-0.178414,-0.314228,1.292609,-0.201797,-0.58723, -0.972456,-0.233085,0,1.287166,-0.255182,-0.5, -0.822459,-0.568824,0,1.297571,-0.288968,-0.5, -0.77552,-0.569812,-0.271814,1.312921,-0.28446,-0.594723, -0.77552,-0.569812,-0.271814,1.312921,-0.28446,-0.594723, -0.899118,-0.21787,-0.37963,1.302034,-0.25088,-0.593392, -0.972456,-0.233085,0,1.287166,-0.255182,-0.5, -0.588534,-0.475384,-0.653941,1.358796,-0.271614,-0.673773, -0.738864,-0.111606,-0.664548,1.346635,-0.237972,-0.671218, -0.899118,-0.21787,-0.37963,1.302034,-0.25088,-0.593392, -0.588534,-0.475384,-0.653941,1.358796,-0.271614,-0.673773, -0.899118,-0.21787,-0.37963,1.302034,-0.25088,-0.593392, -0.77552,-0.569812,-0.271814,1.312921,-0.28446,-0.594723, -0.932432,-0.178414,0.314228,1.292609,-0.201797,-0.41277, -0.693597,-0.068529,0.717096,1.333479,-0.188456,-0.340079, -0.738864,-0.111606,0.664548,1.346635,-0.237972,-0.328782, -0.738864,-0.111606,0.664548,1.346635,-0.237972,-0.328782, -0.899119,-0.217869,0.37963,1.302034,-0.25088,-0.406608, -0.932432,-0.178414,0.314228,1.292609,-0.201797,-0.41277, -0.588534,-0.475383,0.653941,1.358796,-0.271614,-0.326227, -0.775521,-0.569812,0.271814,1.312921,-0.28446,-0.405277, -0.899119,-0.217869,0.37963,1.302034,-0.25088,-0.406608, -0.588534,-0.475383,0.653941,1.358796,-0.271614,-0.326227, -0.899119,-0.217869,0.37963,1.302034,-0.25088,-0.406608, -0.738864,-0.111606,0.664548,1.346635,-0.237972,-0.328782, -0.775521,-0.569812,0.271814,1.312921,-0.28446,-0.405277, -0.822459,-0.568824,0,1.297571,-0.288968,-0.5, -0.972456,-0.233085,0,1.287166,-0.255182,-0.5, -0.972456,-0.233085,0,1.287166,-0.255182,-0.5, -0.899119,-0.217869,0.37963,1.302034,-0.25088,-0.406608, -0.775521,-0.569812,0.271814,1.312921,-0.28446,-0.405277, -0.972456,-0.233085,0,1.287166,-0.255182,-0.5, -0.977953,-0.208824,0,1.278985,-0.206245,-0.5, -0.932432,-0.178414,0.314228,1.292609,-0.201797,-0.41277, -0.932432,-0.178414,0.314228,1.292609,-0.201797,-0.41277, -0.899119,-0.217869,0.37963,1.302034,-0.25088,-0.406608, -0.972456,-0.233085,0,1.287166,-0.255182,-0.5, 0.055786,-0.978344,0.199328,1.40287,-0.293254,-0.361333, 0.070927,-0.992428,0.100277,1.378957,-0.304305,-0.4175, -0.244016,-0.944635,0.219364,1.335465,-0.301849,-0.4125, 0.055786,-0.978344,0.199328,1.40287,-0.293254,-0.361333, -0.244016,-0.944635,0.219364,1.335465,-0.301849,-0.4125, -0.175453,-0.874143,0.452869,1.378738,-0.288996,-0.339125, 0.014735,-0.999891,0,1.367033,-0.309791,-0.5, -0.433457,-0.901174,0,1.320807,-0.307035,-0.5, -0.244016,-0.944635,0.219364,1.335465,-0.301849,-0.4125, 0.014735,-0.999891,0,1.367033,-0.309791,-0.5, -0.244016,-0.944635,0.219364,1.335465,-0.301849,-0.4125, 0.070927,-0.992428,0.100277,1.378957,-0.304305,-0.4175, -0.433457,-0.901174,0,1.320807,-0.307035,-0.5, -0.822459,-0.568824,0,1.297571,-0.288968,-0.5, -0.775521,-0.569812,0.271814,1.312921,-0.28446,-0.405277, -0.775521,-0.569812,0.271814,1.312921,-0.28446,-0.405277, -0.244016,-0.944635,0.219364,1.335465,-0.301849,-0.4125, -0.433457,-0.901174,0,1.320807,-0.307035,-0.5, -0.588534,-0.475383,0.653941,1.358796,-0.271614,-0.326227, -0.175453,-0.874143,0.452869,1.378738,-0.288996,-0.339125, -0.244016,-0.944635,0.219364,1.335465,-0.301849,-0.4125, -0.588534,-0.475383,0.653941,1.358796,-0.271614,-0.326227, -0.244016,-0.944635,0.219364,1.335465,-0.301849,-0.4125, -0.775521,-0.569812,0.271814,1.312921,-0.28446,-0.405277, 0.055786,-0.978343,-0.199329,1.40287,-0.293254,-0.638667, -0.175453,-0.874143,-0.452869,1.378738,-0.288996,-0.660875, -0.244016,-0.944635,-0.219364,1.335465,-0.301849,-0.5875, 0.055786,-0.978343,-0.199329,1.40287,-0.293254,-0.638667, -0.244016,-0.944635,-0.219364,1.335465,-0.301849,-0.5875, 0.070927,-0.992428,-0.100277,1.378957,-0.304305,-0.5825, -0.588534,-0.475384,-0.653941,1.358796,-0.271614,-0.673773, -0.77552,-0.569812,-0.271814,1.312921,-0.28446,-0.594723, -0.244016,-0.944635,-0.219364,1.335465,-0.301849,-0.5875, -0.588534,-0.475384,-0.653941,1.358796,-0.271614,-0.673773, -0.244016,-0.944635,-0.219364,1.335465,-0.301849,-0.5875, -0.175453,-0.874143,-0.452869,1.378738,-0.288996,-0.660875, -0.77552,-0.569812,-0.271814,1.312921,-0.28446,-0.594723, -0.822459,-0.568824,0,1.297571,-0.288968,-0.5, -0.433457,-0.901174,0,1.320807,-0.307035,-0.5, -0.433457,-0.901174,0,1.320807,-0.307035,-0.5, -0.244016,-0.944635,-0.219364,1.335465,-0.301849,-0.5875, -0.77552,-0.569812,-0.271814,1.312921,-0.28446,-0.594723, 0.014735,-0.999891,0,1.367033,-0.309791,-0.5, 0.070927,-0.992428,-0.100277,1.378957,-0.304305,-0.5825, -0.244016,-0.944635,-0.219364,1.335465,-0.301849,-0.5875, 0.014735,-0.999891,0,1.367033,-0.309791,-0.5, -0.244016,-0.944635,-0.219364,1.335465,-0.301849,-0.5875, -0.433457,-0.901174,0,1.320807,-0.307035,-0.5, -0.693597,-0.068529,0.717096,1.333479,-0.188456,-0.340079, -0.356933,0.09138,0.92965,1.401596,-0.166219,-0.296464, -0.39719,0.033722,0.917117,1.420971,-0.21646,-0.282086, -0.693597,-0.068529,0.717096,1.333479,-0.188456,-0.340079, -0.39719,0.033722,0.917117,1.420971,-0.21646,-0.282086, -0.738864,-0.111606,0.664548,1.346635,-0.237972,-0.328782, -0.07755,0.232519,0.969495,1.483337,-0.139536,-0.281926, -0.053569,0.174235,0.983246,1.510174,-0.190646,-0.26652, -0.39719,0.033722,0.917117,1.420971,-0.21646,-0.282086, -0.07755,0.232519,0.969495,1.483337,-0.139536,-0.281926, -0.39719,0.033722,0.917117,1.420971,-0.21646,-0.282086, -0.356933,0.09138,0.92965,1.401596,-0.166219,-0.296464, -0.053569,0.174235,0.983246,1.510174,-0.190646,-0.26652, 0.100693,-0.274502,0.9563,1.526344,-0.226473,-0.262505, -0.236076,-0.378113,0.895153,1.435022,-0.251106,-0.278521, -0.236076,-0.378113,0.895153,1.435022,-0.251106,-0.278521, -0.39719,0.033722,0.917117,1.420971,-0.21646,-0.282086, -0.053569,0.174235,0.983246,1.510174,-0.190646,-0.26652, -0.588534,-0.475383,0.653941,1.358796,-0.271614,-0.326227, -0.738864,-0.111606,0.664548,1.346635,-0.237972,-0.328782, -0.39719,0.033722,0.917117,1.420971,-0.21646,-0.282086, -0.588534,-0.475383,0.653941,1.358796,-0.271614,-0.326227, -0.39719,0.033722,0.917117,1.420971,-0.21646,-0.282086, -0.236076,-0.378113,0.895153,1.435022,-0.251106,-0.278521, 0.523401,0.54123,0.65812,1.633195,-0.090616,-0.340079, 0.58545,0.437052,0.682813,1.673712,-0.14332,-0.328782, 0.256589,0.31723,0.912977,1.599377,-0.164832,-0.282086, 0.523401,0.54123,0.65812,1.633195,-0.090616,-0.340079, 0.256589,0.31723,0.912977,1.599377,-0.164832,-0.282086, 0.223762,0.384639,0.895535,1.565078,-0.112852,-0.296464, 0.58545,0.437052,0.682813,1.673712,-0.14332,-0.328782, 0.722198,-0.015351,0.691516,1.693578,-0.180157,-0.326227, 0.442231,-0.107524,0.890433,1.617509,-0.201252,-0.278521, 0.442231,-0.107524,0.890433,1.617509,-0.201252,-0.278521, 0.256589,0.31723,0.912977,1.599377,-0.164832,-0.282086, 0.58545,0.437052,0.682813,1.673712,-0.14332,-0.328782, 0.100693,-0.274502,0.9563,1.526344,-0.226473,-0.262505, -0.053569,0.174235,0.983246,1.510174,-0.190646,-0.26652, 0.256589,0.31723,0.912977,1.599377,-0.164832,-0.282086, 0.100693,-0.274502,0.9563,1.526344,-0.226473,-0.262505, 0.256589,0.31723,0.912977,1.599377,-0.164832,-0.282086, 0.442231,-0.107524,0.890433,1.617509,-0.201252,-0.278521, -0.053569,0.174235,0.983246,1.510174,-0.190646,-0.26652, -0.07755,0.232519,0.969495,1.483337,-0.139536,-0.281926, 0.223762,0.384639,0.895535,1.565078,-0.112852,-0.296464, 0.223762,0.384639,0.895535,1.565078,-0.112852,-0.296464, 0.256589,0.31723,0.912977,1.599377,-0.164832,-0.282086, -0.053569,0.174235,0.983246,1.510174,-0.190646,-0.26652, 0.633983,-0.62254,0.458813,1.689524,-0.205721,-0.339125, 0.442953,-0.878385,0.179534,1.670754,-0.221475,-0.361333, 0.361333,-0.91087,0.199385,1.617662,-0.240344,-0.335375, 0.361333,-0.91087,0.199385,1.617662,-0.240344,-0.335375, 0.389599,-0.715497,0.579893,1.618964,-0.225886,-0.294, 0.633983,-0.62254,0.458813,1.689524,-0.205721,-0.339125, 0.25096,-0.936595,0.244557,1.538546,-0.263835,-0.322437, 0.205519,-0.76511,0.610221,1.53476,-0.249706,-0.2785, 0.389599,-0.715497,0.579893,1.618964,-0.225886,-0.294, 0.25096,-0.936595,0.244557,1.538546,-0.263835,-0.322437, 0.389599,-0.715497,0.579893,1.618964,-0.225886,-0.294, 0.361333,-0.91087,0.199385,1.617662,-0.240344,-0.335375, 0.100693,-0.274502,0.9563,1.526344,-0.226473,-0.262505, 0.442231,-0.107524,0.890433,1.617509,-0.201252,-0.278521, 0.389599,-0.715497,0.579893,1.618964,-0.225886,-0.294, 0.100693,-0.274502,0.9563,1.526344,-0.226473,-0.262505, 0.389599,-0.715497,0.579893,1.618964,-0.225886,-0.294, 0.205519,-0.76511,0.610221,1.53476,-0.249706,-0.2785, 0.442231,-0.107524,0.890433,1.617509,-0.201252,-0.278521, 0.722198,-0.015351,0.691516,1.693578,-0.180157,-0.326227, 0.633983,-0.62254,0.458813,1.689524,-0.205721,-0.339125, 0.633983,-0.62254,0.458813,1.689524,-0.205721,-0.339125, 0.389599,-0.715497,0.579893,1.618964,-0.225886,-0.294, 0.442231,-0.107524,0.890433,1.617509,-0.201252,-0.278521, 0.055786,-0.978344,0.199328,1.40287,-0.293254,-0.361333, -0.175453,-0.874143,0.452869,1.378738,-0.288996,-0.339125, 0.03573,-0.852716,0.521152,1.449927,-0.271179,-0.294, 0.055786,-0.978344,0.199328,1.40287,-0.293254,-0.361333, 0.03573,-0.852716,0.521152,1.449927,-0.271179,-0.294, 0.155998,-0.969634,0.188349,1.458284,-0.283049,-0.335375, -0.175453,-0.874143,0.452869,1.378738,-0.288996,-0.339125, -0.588534,-0.475383,0.653941,1.358796,-0.271614,-0.326227, -0.236076,-0.378113,0.895153,1.435022,-0.251106,-0.278521, -0.236076,-0.378113,0.895153,1.435022,-0.251106,-0.278521, 0.03573,-0.852716,0.521152,1.449927,-0.271179,-0.294, -0.175453,-0.874143,0.452869,1.378738,-0.288996,-0.339125, 0.100693,-0.274502,0.9563,1.526344,-0.226473,-0.262505, 0.205519,-0.76511,0.610221,1.53476,-0.249706,-0.2785, 0.03573,-0.852716,0.521152,1.449927,-0.271179,-0.294, 0.100693,-0.274502,0.9563,1.526344,-0.226473,-0.262505, 0.03573,-0.852716,0.521152,1.449927,-0.271179,-0.294, -0.236076,-0.378113,0.895153,1.435022,-0.251106,-0.278521, 0.25096,-0.936595,0.244557,1.538546,-0.263835,-0.322437, 0.155998,-0.969634,0.188349,1.458284,-0.283049,-0.335375, 0.03573,-0.852716,0.521152,1.449927,-0.271179,-0.294, 0.25096,-0.936595,0.244557,1.538546,-0.263835,-0.322437, 0.03573,-0.852716,0.521152,1.449927,-0.271179,-0.294, 0.205519,-0.76511,0.610221,1.53476,-0.249706,-0.2785, 0.442953,-0.878385,-0.179534,1.670754,-0.221475,-0.638667, 0.361333,-0.91087,-0.199385,1.617662,-0.240344,-0.664625, 0.33419,-0.939127,-0.079739,1.627523,-0.246239,-0.5905, 0.442953,-0.878385,-0.179534,1.670754,-0.221475,-0.638667, 0.33419,-0.939127,-0.079739,1.627523,-0.246239,-0.5905, 0.43479,-0.894931,-0.100277,1.696988,-0.219088,-0.5825, 0.361333,-0.91087,-0.199385,1.617662,-0.240344,-0.664625, 0.25096,-0.936595,-0.244557,1.538546,-0.263835,-0.677562, 0.257883,-0.962433,-0.08496,1.540826,-0.272345,-0.59775, 0.257883,-0.962433,-0.08496,1.540826,-0.272345,-0.59775, 0.33419,-0.939127,-0.079739,1.627523,-0.246239,-0.5905, 0.361333,-0.91087,-0.199385,1.617662,-0.240344,-0.664625, 0.258819,-0.965926,0,1.54159,-0.275196,-0.5, 0.339948,-0.940444,0,1.635245,-0.247046,-0.5, 0.33419,-0.939127,-0.079739,1.627523,-0.246239,-0.5905, 0.258819,-0.965926,0,1.54159,-0.275196,-0.5, 0.33419,-0.939127,-0.079739,1.627523,-0.246239,-0.5905, 0.257883,-0.962433,-0.08496,1.540826,-0.272345,-0.59775, 0.339948,-0.940444,0,1.635245,-0.247046,-0.5, 0.487185,-0.873299,0,1.710058,-0.217878,-0.5, 0.43479,-0.894931,-0.100277,1.696988,-0.219088,-0.5825, 0.43479,-0.894931,-0.100277,1.696988,-0.219088,-0.5825, 0.33419,-0.939127,-0.079739,1.627523,-0.246239,-0.5905, 0.339948,-0.940444,0,1.635245,-0.247046,-0.5, 0.055786,-0.978343,-0.199329,1.40287,-0.293254,-0.638667, 0.070927,-0.992428,-0.100277,1.378957,-0.304305,-0.5825, 0.180146,-0.980403,-0.079739,1.452691,-0.293085,-0.5905, 0.055786,-0.978343,-0.199329,1.40287,-0.293254,-0.638667, 0.180146,-0.980403,-0.079739,1.452691,-0.293085,-0.5905, 0.155998,-0.969633,-0.18835,1.458284,-0.283049,-0.664625, 0.070927,-0.992428,-0.100277,1.378957,-0.304305,-0.5825, 0.014735,-0.999891,0,1.367033,-0.309791,-0.5, 0.175818,-0.984423,0,1.446407,-0.297645,-0.5, 0.175818,-0.984423,0,1.446407,-0.297645,-0.5, 0.180146,-0.980403,-0.079739,1.452691,-0.293085,-0.5905, 0.070927,-0.992428,-0.100277,1.378957,-0.304305,-0.5825, 0.258819,-0.965926,0,1.54159,-0.275196,-0.5, 0.257883,-0.962433,-0.08496,1.540826,-0.272345,-0.59775, 0.180146,-0.980403,-0.079739,1.452691,-0.293085,-0.5905, 0.258819,-0.965926,0,1.54159,-0.275196,-0.5, 0.180146,-0.980403,-0.079739,1.452691,-0.293085,-0.5905, 0.175818,-0.984423,0,1.446407,-0.297645,-0.5, 0.257883,-0.962433,-0.08496,1.540826,-0.272345,-0.59775, 0.25096,-0.936595,-0.244557,1.538546,-0.263835,-0.677562, 0.155998,-0.969633,-0.18835,1.458284,-0.283049,-0.664625, 0.155998,-0.969633,-0.18835,1.458284,-0.283049,-0.664625, 0.180146,-0.980403,-0.079739,1.452691,-0.293085,-0.5905, 0.257883,-0.962433,-0.08496,1.540826,-0.272345,-0.59775, 0.055786,-0.978344,0.199328,1.40287,-0.293254,-0.361333, 0.155998,-0.969634,0.188349,1.458284,-0.283049,-0.335375, 0.180146,-0.980403,0.079739,1.452691,-0.293085,-0.4095, 0.055786,-0.978344,0.199328,1.40287,-0.293254,-0.361333, 0.180146,-0.980403,0.079739,1.452691,-0.293085,-0.4095, 0.070927,-0.992428,0.100277,1.378957,-0.304305,-0.4175, 0.155998,-0.969634,0.188349,1.458284,-0.283049,-0.335375, 0.25096,-0.936595,0.244557,1.538546,-0.263835,-0.322437, 0.257883,-0.962433,0.08496,1.540826,-0.272345,-0.40225, 0.257883,-0.962433,0.08496,1.540826,-0.272345,-0.40225, 0.180146,-0.980403,0.079739,1.452691,-0.293085,-0.4095, 0.155998,-0.969634,0.188349,1.458284,-0.283049,-0.335375, 0.258819,-0.965926,0,1.54159,-0.275196,-0.5, 0.175818,-0.984423,0,1.446407,-0.297645,-0.5, 0.180146,-0.980403,0.079739,1.452691,-0.293085,-0.4095, 0.258819,-0.965926,0,1.54159,-0.275196,-0.5, 0.180146,-0.980403,0.079739,1.452691,-0.293085,-0.4095, 0.257883,-0.962433,0.08496,1.540826,-0.272345,-0.40225, 0.175818,-0.984423,0,1.446407,-0.297645,-0.5, 0.014735,-0.999891,0,1.367033,-0.309791,-0.5, 0.070927,-0.992428,0.100277,1.378957,-0.304305,-0.4175, 0.070927,-0.992428,0.100277,1.378957,-0.304305,-0.4175, 0.180146,-0.980403,0.079739,1.452691,-0.293085,-0.4095, 0.175818,-0.984423,0,1.446407,-0.297645,-0.5, 0.442953,-0.878385,0.179534,1.670754,-0.221475,-0.361333, 0.43479,-0.894931,0.100278,1.696988,-0.219088,-0.4175, 0.33419,-0.939126,0.079739,1.627523,-0.246239,-0.4095, 0.442953,-0.878385,0.179534,1.670754,-0.221475,-0.361333, 0.33419,-0.939126,0.079739,1.627523,-0.246239,-0.4095, 0.361333,-0.91087,0.199385,1.617662,-0.240344,-0.335375, 0.43479,-0.894931,0.100278,1.696988,-0.219088,-0.4175, 0.487185,-0.873299,0,1.710058,-0.217878,-0.5, 0.339948,-0.940444,0,1.635245,-0.247046,-0.5, 0.339948,-0.940444,0,1.635245,-0.247046,-0.5, 0.33419,-0.939126,0.079739,1.627523,-0.246239,-0.4095, 0.43479,-0.894931,0.100278,1.696988,-0.219088,-0.4175, 0.258819,-0.965926,0,1.54159,-0.275196,-0.5, 0.257883,-0.962433,0.08496,1.540826,-0.272345,-0.40225, 0.33419,-0.939126,0.079739,1.627523,-0.246239,-0.4095, 0.258819,-0.965926,0,1.54159,-0.275196,-0.5, 0.33419,-0.939126,0.079739,1.627523,-0.246239,-0.4095, 0.339948,-0.940444,0,1.635245,-0.247046,-0.5, 0.257883,-0.962433,0.08496,1.540826,-0.272345,-0.40225, 0.25096,-0.936595,0.244557,1.538546,-0.263835,-0.322437, 0.361333,-0.91087,0.199385,1.617662,-0.240344,-0.335375, 0.361333,-0.91087,0.199385,1.617662,-0.240344,-0.335375, 0.33419,-0.939126,0.079739,1.627523,-0.246239,-0.4095, 0.257883,-0.962433,0.08496,1.540826,-0.272345,-0.40225, }; static const struct gllist frame={GL_N3F_V3F,GL_TRIANGLES,1728,data,NULL}; const struct gllist *s1_5=&frame; xscreensaver-5.36/hacks/glx/s1_6.c000644 000767 000024 00000274321 12701612217 016745 0ustar00jwzstaff000000 000000 #include "gllist.h" static const float data[]={ 0.710152,0.225044,-0.667113,1.437472,0.482703,-0.67159, 0.751095,0.142007,-0.644741,1.460394,0.412133,-0.660849, 0.922813,0.236109,-0.304415,1.492239,0.440457,-0.587736, 0.922813,0.236109,-0.304415,1.492239,0.440457,-0.587736, 0.888327,0.330007,-0.319329,1.470529,0.515074,-0.593594, 0.710152,0.225044,-0.667113,1.437472,0.482703,-0.67159, 0.964484,0.264141,0,1.502855,0.449898,-0.5, 0.923004,0.384789,0,1.481548,0.525864,-0.5, 0.888327,0.330007,-0.319329,1.470529,0.515074,-0.593594, 0.964484,0.264141,0,1.502855,0.449898,-0.5, 0.888327,0.330007,-0.319329,1.470529,0.515074,-0.593594, 0.922813,0.236109,-0.304415,1.492239,0.440457,-0.587736, 0.923004,0.384789,0,1.481548,0.525864,-0.5, 0.551211,0.834366,0,1.460683,0.568581,-0.5, 0.590668,0.729279,-0.345345,1.449724,0.55695,-0.594774, 0.590668,0.729279,-0.345345,1.449724,0.55695,-0.594774, 0.888327,0.330007,-0.319329,1.470529,0.515074,-0.593594, 0.923004,0.384789,0,1.481548,0.525864,-0.5, 0.478093,0.57114,-0.667253,1.416649,0.522728,-0.673866, 0.710152,0.225044,-0.667113,1.437472,0.482703,-0.67159, 0.888327,0.330007,-0.319329,1.470529,0.515074,-0.593594, 0.478093,0.57114,-0.667253,1.416649,0.522728,-0.673866, 0.888327,0.330007,-0.319329,1.470529,0.515074,-0.593594, 0.590668,0.729279,-0.345345,1.449724,0.55695,-0.594774, 0.922813,0.236109,0.304415,1.492239,0.440457,-0.412264, 0.751095,0.142007,0.644741,1.460394,0.412133,-0.339151, 0.710152,0.225044,0.667112,1.437472,0.482703,-0.32841, 0.710152,0.225044,0.667112,1.437472,0.482703,-0.32841, 0.888327,0.330007,0.319329,1.470529,0.515074,-0.406406, 0.922813,0.236109,0.304415,1.492239,0.440457,-0.412264, 0.478094,0.57114,0.667253,1.416649,0.522728,-0.326134, 0.590668,0.729279,0.345345,1.449724,0.55695,-0.405226, 0.888327,0.330007,0.319329,1.470529,0.515074,-0.406406, 0.478094,0.57114,0.667253,1.416649,0.522728,-0.326134, 0.888327,0.330007,0.319329,1.470529,0.515074,-0.406406, 0.710152,0.225044,0.667112,1.437472,0.482703,-0.32841, 0.590668,0.729279,0.345345,1.449724,0.55695,-0.405226, 0.551211,0.834366,0,1.460683,0.568581,-0.5, 0.923004,0.384789,0,1.481548,0.525864,-0.5, 0.923004,0.384789,0,1.481548,0.525864,-0.5, 0.888327,0.330007,0.319329,1.470529,0.515074,-0.406406, 0.590668,0.729279,0.345345,1.449724,0.55695,-0.405226, 0.964484,0.264141,0,1.502855,0.449898,-0.5, 0.922813,0.236109,0.304415,1.492239,0.440457,-0.412264, 0.888327,0.330007,0.319329,1.470529,0.515074,-0.406406, 0.964484,0.264141,0,1.502855,0.449898,-0.5, 0.888327,0.330007,0.319329,1.470529,0.515074,-0.406406, 0.923004,0.384789,0,1.481548,0.525864,-0.5, -0.553505,0.813265,0.179534,1.370035,0.524394,-0.361333, -0.571934,0.814147,0.100277,1.384841,0.546182,-0.4175, -0.169784,0.964201,0.20369,1.423386,0.566478,-0.4125, -0.553505,0.813265,0.179534,1.370035,0.524394,-0.361333, -0.169784,0.964201,0.20369,1.423386,0.566478,-0.4125, -0.216141,0.855174,0.471127,1.392914,0.533174,-0.339125, -0.527613,0.849485,0,1.392236,0.557026,-0.5, -0.070011,0.997546,0,1.433279,0.578472,-0.5, -0.169784,0.964201,0.20369,1.423386,0.566478,-0.4125, -0.527613,0.849485,0,1.392236,0.557026,-0.5, -0.169784,0.964201,0.20369,1.423386,0.566478,-0.4125, -0.571934,0.814147,0.100277,1.384841,0.546182,-0.4175, 0.551211,0.834366,0,1.460683,0.568581,-0.5, 0.590668,0.729279,0.345345,1.449724,0.55695,-0.405226, -0.169784,0.964201,0.20369,1.423386,0.566478,-0.4125, 0.551211,0.834366,0,1.460683,0.568581,-0.5, -0.169784,0.964201,0.20369,1.423386,0.566478,-0.4125, -0.070011,0.997546,0,1.433279,0.578472,-0.5, 0.590668,0.729279,0.345345,1.449724,0.55695,-0.405226, 0.478094,0.57114,0.667253,1.416649,0.522728,-0.326134, -0.216141,0.855174,0.471127,1.392914,0.533174,-0.339125, -0.216141,0.855174,0.471127,1.392914,0.533174,-0.339125, -0.169784,0.964201,0.20369,1.423386,0.566478,-0.4125, 0.590668,0.729279,0.345345,1.449724,0.55695,-0.405226, -0.553505,0.813265,-0.179534,1.370035,0.524394,-0.638667, -0.216141,0.855174,-0.471127,1.392914,0.533174,-0.660875, -0.169784,0.964201,-0.203689,1.423386,0.566478,-0.5875, -0.553505,0.813265,-0.179534,1.370035,0.524394,-0.638667, -0.169784,0.964201,-0.203689,1.423386,0.566478,-0.5875, -0.571934,0.814147,-0.100277,1.384841,0.546182,-0.5825, -0.216141,0.855174,-0.471127,1.392914,0.533174,-0.660875, 0.478093,0.57114,-0.667253,1.416649,0.522728,-0.673866, 0.590668,0.729279,-0.345345,1.449724,0.55695,-0.594774, 0.590668,0.729279,-0.345345,1.449724,0.55695,-0.594774, -0.169784,0.964201,-0.203689,1.423386,0.566478,-0.5875, -0.216141,0.855174,-0.471127,1.392914,0.533174,-0.660875, 0.551211,0.834366,0,1.460683,0.568581,-0.5, -0.070011,0.997546,0,1.433279,0.578472,-0.5, -0.169784,0.964201,-0.203689,1.423386,0.566478,-0.5875, 0.551211,0.834366,0,1.460683,0.568581,-0.5, -0.169784,0.964201,-0.203689,1.423386,0.566478,-0.5875, 0.590668,0.729279,-0.345345,1.449724,0.55695,-0.594774, -0.527613,0.849485,0,1.392236,0.557026,-0.5, -0.571934,0.814147,-0.100277,1.384841,0.546182,-0.5825, -0.169784,0.964201,-0.203689,1.423386,0.566478,-0.5875, -0.527613,0.849485,0,1.392236,0.557026,-0.5, -0.169784,0.964201,-0.203689,1.423386,0.566478,-0.5875, -0.070011,0.997546,0,1.433279,0.578472,-0.5, 0.751095,0.142007,0.644741,1.460394,0.412133,-0.339151, 0.45328,-0.00761,0.891335,1.407319,0.364926,-0.295283, 0.413326,0.054801,0.908933,1.382377,0.428753,-0.281613, 0.751095,0.142007,0.644741,1.460394,0.412133,-0.339151, 0.413326,0.054801,0.908933,1.382377,0.428753,-0.281613, 0.710152,0.225044,0.667112,1.437472,0.482703,-0.32841, 0.45328,-0.00761,0.891335,1.407319,0.364926,-0.295283, 0.144715,-0.16618,0.975419,1.343629,0.308278,-0.28066, 0.112951,-0.120534,0.986262,1.316263,0.364012,-0.266014, 0.112951,-0.120534,0.986262,1.316263,0.364012,-0.266014, 0.413326,0.054801,0.908933,1.382377,0.428753,-0.281613, 0.45328,-0.00761,0.891335,1.407319,0.364926,-0.295283, -0.191431,0.222135,0.956039,1.294932,0.399266,-0.262379, 0.141626,0.422273,0.895336,1.36126,0.466583,-0.278403, 0.413326,0.054801,0.908933,1.382377,0.428753,-0.281613, -0.191431,0.222135,0.956039,1.294932,0.399266,-0.262379, 0.413326,0.054801,0.908933,1.382377,0.428753,-0.281613, 0.112951,-0.120534,0.986262,1.316263,0.364012,-0.266014, 0.141626,0.422273,0.895336,1.36126,0.466583,-0.278403, 0.478094,0.57114,0.667253,1.416649,0.522728,-0.326134, 0.710152,0.225044,0.667112,1.437472,0.482703,-0.32841, 0.710152,0.225044,0.667112,1.437472,0.482703,-0.32841, 0.413326,0.054801,0.908933,1.382377,0.428753,-0.281613, 0.141626,0.422273,0.895336,1.36126,0.466583,-0.278403, -0.17234,-0.336344,0.925836,1.279939,0.25163,-0.295283, -0.503423,-0.512227,0.695837,1.226863,0.204423,-0.339151, -0.508694,-0.497612,0.702576,1.195055,0.245321,-0.32841, -0.508694,-0.497612,0.702576,1.195055,0.245321,-0.32841, -0.19339,-0.303475,0.933008,1.25015,0.299272,-0.281613, -0.17234,-0.336344,0.925836,1.279939,0.25163,-0.295283, -0.73056,-0.181076,0.658402,1.174088,0.27496,-0.326134, -0.461199,-0.002494,0.887293,1.22904,0.331527,-0.278403, -0.19339,-0.303475,0.933008,1.25015,0.299272,-0.281613, -0.73056,-0.181076,0.658402,1.174088,0.27496,-0.326134, -0.19339,-0.303475,0.933008,1.25015,0.299272,-0.281613, -0.508694,-0.497612,0.702576,1.195055,0.245321,-0.32841, -0.461199,-0.002494,0.887293,1.22904,0.331527,-0.278403, -0.191431,0.222135,0.956039,1.294932,0.399266,-0.262379, 0.112951,-0.120534,0.986262,1.316263,0.364012,-0.266014, 0.112951,-0.120534,0.986262,1.316263,0.364012,-0.266014, -0.19339,-0.303475,0.933008,1.25015,0.299272,-0.281613, -0.461199,-0.002494,0.887293,1.22904,0.331527,-0.278403, 0.144715,-0.16618,0.975419,1.343629,0.308278,-0.28066, -0.17234,-0.336344,0.925836,1.279939,0.25163,-0.295283, -0.19339,-0.303475,0.933008,1.25015,0.299272,-0.281613, 0.144715,-0.16618,0.975419,1.343629,0.308278,-0.28066, -0.19339,-0.303475,0.933008,1.25015,0.299272,-0.281613, 0.112951,-0.120534,0.986262,1.316263,0.364012,-0.266014, -0.828633,0.523102,0.199328,1.177383,0.324897,-0.361333, -0.766049,0.607525,0.209958,1.213173,0.368416,-0.335375, -0.723455,0.416599,0.550508,1.219504,0.355352,-0.294, -0.828633,0.523102,0.199328,1.177383,0.324897,-0.361333, -0.723455,0.416599,0.550508,1.219504,0.355352,-0.294, -0.850149,0.280677,0.445496,1.169407,0.301726,-0.339125, -0.766049,0.607525,0.209958,1.213173,0.368416,-0.335375, -0.702693,0.678582,0.21389,1.26889,0.429299,-0.322437, -0.617508,0.597059,0.512059,1.279412,0.419138,-0.2785, -0.617508,0.597059,0.512059,1.279412,0.419138,-0.2785, -0.723455,0.416599,0.550508,1.219504,0.355352,-0.294, -0.766049,0.607525,0.209958,1.213173,0.368416,-0.335375, -0.191431,0.222135,0.956039,1.294932,0.399266,-0.262379, -0.461199,-0.002494,0.887293,1.22904,0.331527,-0.278403, -0.723455,0.416599,0.550508,1.219504,0.355352,-0.294, -0.191431,0.222135,0.956039,1.294932,0.399266,-0.262379, -0.723455,0.416599,0.550508,1.219504,0.355352,-0.294, -0.617508,0.597059,0.512059,1.279412,0.419138,-0.2785, -0.461199,-0.002494,0.887293,1.22904,0.331527,-0.278403, -0.73056,-0.181076,0.658402,1.174088,0.27496,-0.326134, -0.850149,0.280677,0.445496,1.169407,0.301726,-0.339125, -0.850149,0.280677,0.445496,1.169407,0.301726,-0.339125, -0.723455,0.416599,0.550508,1.219504,0.355352,-0.294, -0.461199,-0.002494,0.887293,1.22904,0.331527,-0.278403, -0.623755,0.751092,0.216309,1.327792,0.487107,-0.335375, -0.553505,0.813265,0.179534,1.370035,0.524394,-0.361333, -0.216141,0.855174,0.471127,1.392914,0.533174,-0.339125, -0.216141,0.855174,0.471127,1.392914,0.533174,-0.339125, -0.382645,0.670188,0.635949,1.341069,0.481236,-0.294, -0.623755,0.751092,0.216309,1.327792,0.487107,-0.335375, -0.216141,0.855174,0.471127,1.392914,0.533174,-0.339125, 0.478094,0.57114,0.667253,1.416649,0.522728,-0.326134, 0.141626,0.422273,0.895336,1.36126,0.466583,-0.278403, 0.141626,0.422273,0.895336,1.36126,0.466583,-0.278403, -0.382645,0.670188,0.635949,1.341069,0.481236,-0.294, -0.216141,0.855174,0.471127,1.392914,0.533174,-0.339125, -0.191431,0.222135,0.956039,1.294932,0.399266,-0.262379, -0.617508,0.597059,0.512059,1.279412,0.419138,-0.2785, -0.382645,0.670188,0.635949,1.341069,0.481236,-0.294, -0.191431,0.222135,0.956039,1.294932,0.399266,-0.262379, -0.382645,0.670188,0.635949,1.341069,0.481236,-0.294, 0.141626,0.422273,0.895336,1.36126,0.466583,-0.278403, -0.617508,0.597059,0.512059,1.279412,0.419138,-0.2785, -0.702693,0.678582,0.21389,1.26889,0.429299,-0.322437, -0.623755,0.751092,0.216309,1.327792,0.487107,-0.335375, -0.623755,0.751092,0.216309,1.327792,0.487107,-0.335375, -0.382645,0.670188,0.635949,1.341069,0.481236,-0.294, -0.617508,0.597059,0.512059,1.279412,0.419138,-0.2785, -0.503423,-0.512227,0.695837,1.226863,0.204423,-0.339151, -0.715537,-0.612433,0.336055,1.195018,0.176099,-0.412264, -0.707587,-0.61874,0.341293,1.161998,0.212951,-0.406406, -0.503423,-0.512227,0.695837,1.226863,0.204423,-0.339151, -0.707587,-0.61874,0.341293,1.161998,0.212951,-0.406406, -0.508694,-0.497612,0.702576,1.195055,0.245321,-0.32841, -0.715537,-0.612433,0.336055,1.195018,0.176099,-0.412264, -0.784292,-0.620391,0,1.184403,0.166658,-0.5, -0.749482,-0.662025,0,1.150979,0.202161,-0.5, -0.749482,-0.662025,0,1.150979,0.202161,-0.5, -0.707587,-0.61874,0.341293,1.161998,0.212951,-0.406406, -0.715537,-0.612433,0.336055,1.195018,0.176099,-0.412264, -0.92836,-0.371683,0,1.12918,0.229952,-0.5, -0.856012,-0.369954,0.361078,1.140576,0.24116,-0.405226, -0.707587,-0.61874,0.341293,1.161998,0.212951,-0.406406, -0.92836,-0.371683,0,1.12918,0.229952,-0.5, -0.707587,-0.61874,0.341293,1.161998,0.212951,-0.406406, -0.749482,-0.662025,0,1.150979,0.202161,-0.5, -0.856012,-0.369954,0.361078,1.140576,0.24116,-0.405226, -0.73056,-0.181076,0.658402,1.174088,0.27496,-0.326134, -0.508694,-0.497612,0.702576,1.195055,0.245321,-0.32841, -0.508694,-0.497612,0.702576,1.195055,0.245321,-0.32841, -0.707587,-0.61874,0.341293,1.161998,0.212951,-0.406406, -0.856012,-0.369954,0.361078,1.140576,0.24116,-0.405226, -0.503423,-0.512227,-0.695836,1.226863,0.204423,-0.660849, -0.508694,-0.497611,-0.702576,1.195055,0.245321,-0.67159, -0.707587,-0.61874,-0.341293,1.161998,0.212951,-0.593594, -0.503423,-0.512227,-0.695836,1.226863,0.204423,-0.660849, -0.707587,-0.61874,-0.341293,1.161998,0.212951,-0.593594, -0.715537,-0.612433,-0.336055,1.195018,0.176099,-0.587736, -0.508694,-0.497611,-0.702576,1.195055,0.245321,-0.67159, -0.73056,-0.181076,-0.658402,1.174088,0.27496,-0.673866, -0.856012,-0.369954,-0.361078,1.140576,0.24116,-0.594774, -0.856012,-0.369954,-0.361078,1.140576,0.24116,-0.594774, -0.707587,-0.61874,-0.341293,1.161998,0.212951,-0.593594, -0.508694,-0.497611,-0.702576,1.195055,0.245321,-0.67159, -0.92836,-0.371683,0,1.12918,0.229952,-0.5, -0.749482,-0.662025,0,1.150979,0.202161,-0.5, -0.707587,-0.61874,-0.341293,1.161998,0.212951,-0.593594, -0.92836,-0.371683,0,1.12918,0.229952,-0.5, -0.707587,-0.61874,-0.341293,1.161998,0.212951,-0.593594, -0.856012,-0.369954,-0.361078,1.140576,0.24116,-0.594774, -0.749482,-0.662025,0,1.150979,0.202161,-0.5, -0.784292,-0.620391,0,1.184403,0.166658,-0.5, -0.715537,-0.612433,-0.336055,1.195018,0.176099,-0.587736, -0.715537,-0.612433,-0.336055,1.195018,0.176099,-0.587736, -0.707587,-0.61874,-0.341293,1.161998,0.212951,-0.593594, -0.749482,-0.662025,0,1.150979,0.202161,-0.5, -0.828633,0.523102,-0.199328,1.177383,0.324897,-0.638667, -0.833612,0.543172,-0.100277,1.156124,0.30934,-0.5825, -0.955913,0.208955,-0.20632,1.137187,0.27011,-0.5875, -0.828633,0.523102,-0.199328,1.177383,0.324897,-0.638667, -0.955913,0.208955,-0.20632,1.137187,0.27011,-0.5875, -0.850149,0.280677,-0.445496,1.169407,0.301726,-0.660875, -0.867381,0.497645,0,1.145545,0.301571,-0.5, -0.986597,0.163178,0,1.125545,0.259804,-0.5, -0.955913,0.208955,-0.20632,1.137187,0.27011,-0.5875, -0.867381,0.497645,0,1.145545,0.301571,-0.5, -0.955913,0.208955,-0.20632,1.137187,0.27011,-0.5875, -0.833612,0.543172,-0.100277,1.156124,0.30934,-0.5825, -0.92836,-0.371683,0,1.12918,0.229952,-0.5, -0.856012,-0.369954,-0.361078,1.140576,0.24116,-0.594774, -0.955913,0.208955,-0.20632,1.137187,0.27011,-0.5875, -0.92836,-0.371683,0,1.12918,0.229952,-0.5, -0.955913,0.208955,-0.20632,1.137187,0.27011,-0.5875, -0.986597,0.163178,0,1.125545,0.259804,-0.5, -0.73056,-0.181076,-0.658402,1.174088,0.27496,-0.673866, -0.850149,0.280677,-0.445496,1.169407,0.301726,-0.660875, -0.955913,0.208955,-0.20632,1.137187,0.27011,-0.5875, -0.73056,-0.181076,-0.658402,1.174088,0.27496,-0.673866, -0.955913,0.208955,-0.20632,1.137187,0.27011,-0.5875, -0.856012,-0.369954,-0.361078,1.140576,0.24116,-0.594774, -0.828633,0.523102,0.199328,1.177383,0.324897,-0.361333, -0.850149,0.280677,0.445496,1.169407,0.301726,-0.339125, -0.955913,0.208955,0.20632,1.137187,0.27011,-0.4125, -0.828633,0.523102,0.199328,1.177383,0.324897,-0.361333, -0.955913,0.208955,0.20632,1.137187,0.27011,-0.4125, -0.833612,0.543172,0.100277,1.156124,0.30934,-0.4175, -0.73056,-0.181076,0.658402,1.174088,0.27496,-0.326134, -0.856012,-0.369954,0.361078,1.140576,0.24116,-0.405226, -0.955913,0.208955,0.20632,1.137187,0.27011,-0.4125, -0.73056,-0.181076,0.658402,1.174088,0.27496,-0.326134, -0.955913,0.208955,0.20632,1.137187,0.27011,-0.4125, -0.850149,0.280677,0.445496,1.169407,0.301726,-0.339125, -0.92836,-0.371683,0,1.12918,0.229952,-0.5, -0.986597,0.163178,0,1.125545,0.259804,-0.5, -0.955913,0.208955,0.20632,1.137187,0.27011,-0.4125, -0.92836,-0.371683,0,1.12918,0.229952,-0.5, -0.955913,0.208955,0.20632,1.137187,0.27011,-0.4125, -0.856012,-0.369954,0.361078,1.140576,0.24116,-0.405226, -0.867381,0.497645,0,1.145545,0.301571,-0.5, -0.833612,0.543172,0.100277,1.156124,0.30934,-0.4175, -0.955913,0.208955,0.20632,1.137187,0.27011,-0.4125, -0.867381,0.497645,0,1.145545,0.301571,-0.5, -0.955913,0.208955,0.20632,1.137187,0.27011,-0.4125, -0.986597,0.163178,0,1.125545,0.259804,-0.5, -0.508694,-0.497611,-0.702576,1.195055,0.245321,-0.67159, -0.503423,-0.512227,-0.695836,1.226863,0.204423,-0.660849, -0.17234,-0.336344,-0.925836,1.279939,0.25163,-0.704717, -0.17234,-0.336344,-0.925836,1.279939,0.25163,-0.704717, -0.193391,-0.303475,-0.933008,1.25015,0.299272,-0.718387, -0.508694,-0.497611,-0.702576,1.195055,0.245321,-0.67159, 0.144715,-0.16618,-0.975419,1.343629,0.308278,-0.71934, 0.112951,-0.120534,-0.986262,1.316263,0.364012,-0.733986, -0.193391,-0.303475,-0.933008,1.25015,0.299272,-0.718387, 0.144715,-0.16618,-0.975419,1.343629,0.308278,-0.71934, -0.193391,-0.303475,-0.933008,1.25015,0.299272,-0.718387, -0.17234,-0.336344,-0.925836,1.279939,0.25163,-0.704717, 0.112951,-0.120534,-0.986262,1.316263,0.364012,-0.733986, -0.191432,0.222135,-0.956039,1.294932,0.399266,-0.737621, -0.461199,-0.002494,-0.887293,1.22904,0.331527,-0.721597, -0.461199,-0.002494,-0.887293,1.22904,0.331527,-0.721597, -0.193391,-0.303475,-0.933008,1.25015,0.299272,-0.718387, 0.112951,-0.120534,-0.986262,1.316263,0.364012,-0.733986, -0.73056,-0.181076,-0.658402,1.174088,0.27496,-0.673866, -0.508694,-0.497611,-0.702576,1.195055,0.245321,-0.67159, -0.193391,-0.303475,-0.933008,1.25015,0.299272,-0.718387, -0.73056,-0.181076,-0.658402,1.174088,0.27496,-0.673866, -0.193391,-0.303475,-0.933008,1.25015,0.299272,-0.718387, -0.461199,-0.002494,-0.887293,1.22904,0.331527,-0.721597, 0.751095,0.142007,-0.644741,1.460394,0.412133,-0.660849, 0.710152,0.225044,-0.667113,1.437472,0.482703,-0.67159, 0.413326,0.054801,-0.908933,1.382377,0.428753,-0.718387, 0.751095,0.142007,-0.644741,1.460394,0.412133,-0.660849, 0.413326,0.054801,-0.908933,1.382377,0.428753,-0.718387, 0.45328,-0.007609,-0.891335,1.407319,0.364926,-0.704717, 0.710152,0.225044,-0.667113,1.437472,0.482703,-0.67159, 0.478093,0.57114,-0.667253,1.416649,0.522728,-0.673866, 0.141625,0.422274,-0.895336,1.36126,0.466583,-0.721597, 0.141625,0.422274,-0.895336,1.36126,0.466583,-0.721597, 0.413326,0.054801,-0.908933,1.382377,0.428753,-0.718387, 0.710152,0.225044,-0.667113,1.437472,0.482703,-0.67159, -0.191432,0.222135,-0.956039,1.294932,0.399266,-0.737621, 0.112951,-0.120534,-0.986262,1.316263,0.364012,-0.733986, 0.413326,0.054801,-0.908933,1.382377,0.428753,-0.718387, -0.191432,0.222135,-0.956039,1.294932,0.399266,-0.737621, 0.413326,0.054801,-0.908933,1.382377,0.428753,-0.718387, 0.141625,0.422274,-0.895336,1.36126,0.466583,-0.721597, 0.112951,-0.120534,-0.986262,1.316263,0.364012,-0.733986, 0.144715,-0.16618,-0.975419,1.343629,0.308278,-0.71934, 0.45328,-0.007609,-0.891335,1.407319,0.364926,-0.704717, 0.45328,-0.007609,-0.891335,1.407319,0.364926,-0.704717, 0.413326,0.054801,-0.908933,1.382377,0.428753,-0.718387, 0.112951,-0.120534,-0.986262,1.316263,0.364012,-0.733986, -0.216141,0.855174,-0.471127,1.392914,0.533174,-0.660875, -0.553505,0.813265,-0.179534,1.370035,0.524394,-0.638667, -0.623755,0.751092,-0.216309,1.327792,0.487107,-0.664625, -0.623755,0.751092,-0.216309,1.327792,0.487107,-0.664625, -0.382645,0.670188,-0.635948,1.341069,0.481236,-0.706, -0.216141,0.855174,-0.471127,1.392914,0.533174,-0.660875, -0.623755,0.751092,-0.216309,1.327792,0.487107,-0.664625, -0.702693,0.678582,-0.21389,1.26889,0.429299,-0.677562, -0.617508,0.597059,-0.512058,1.279412,0.419138,-0.7215, -0.617508,0.597059,-0.512058,1.279412,0.419138,-0.7215, -0.382645,0.670188,-0.635948,1.341069,0.481236,-0.706, -0.623755,0.751092,-0.216309,1.327792,0.487107,-0.664625, -0.191432,0.222135,-0.956039,1.294932,0.399266,-0.737621, 0.141625,0.422274,-0.895336,1.36126,0.466583,-0.721597, -0.382645,0.670188,-0.635948,1.341069,0.481236,-0.706, -0.191432,0.222135,-0.956039,1.294932,0.399266,-0.737621, -0.382645,0.670188,-0.635948,1.341069,0.481236,-0.706, -0.617508,0.597059,-0.512058,1.279412,0.419138,-0.7215, 0.141625,0.422274,-0.895336,1.36126,0.466583,-0.721597, 0.478093,0.57114,-0.667253,1.416649,0.522728,-0.673866, -0.216141,0.855174,-0.471127,1.392914,0.533174,-0.660875, -0.216141,0.855174,-0.471127,1.392914,0.533174,-0.660875, -0.382645,0.670188,-0.635948,1.341069,0.481236,-0.706, 0.141625,0.422274,-0.895336,1.36126,0.466583,-0.721597, -0.828633,0.523102,-0.199328,1.177383,0.324897,-0.638667, -0.850149,0.280677,-0.445496,1.169407,0.301726,-0.660875, -0.723455,0.416599,-0.550508,1.219504,0.355352,-0.706, -0.828633,0.523102,-0.199328,1.177383,0.324897,-0.638667, -0.723455,0.416599,-0.550508,1.219504,0.355352,-0.706, -0.766049,0.607525,-0.209958,1.213173,0.368416,-0.664625, -0.850149,0.280677,-0.445496,1.169407,0.301726,-0.660875, -0.73056,-0.181076,-0.658402,1.174088,0.27496,-0.673866, -0.461199,-0.002494,-0.887293,1.22904,0.331527,-0.721597, -0.461199,-0.002494,-0.887293,1.22904,0.331527,-0.721597, -0.723455,0.416599,-0.550508,1.219504,0.355352,-0.706, -0.850149,0.280677,-0.445496,1.169407,0.301726,-0.660875, -0.191432,0.222135,-0.956039,1.294932,0.399266,-0.737621, -0.617508,0.597059,-0.512058,1.279412,0.419138,-0.7215, -0.723455,0.416599,-0.550508,1.219504,0.355352,-0.706, -0.191432,0.222135,-0.956039,1.294932,0.399266,-0.737621, -0.723455,0.416599,-0.550508,1.219504,0.355352,-0.706, -0.461199,-0.002494,-0.887293,1.22904,0.331527,-0.721597, -0.617508,0.597059,-0.512058,1.279412,0.419138,-0.7215, -0.702693,0.678582,-0.21389,1.26889,0.429299,-0.677562, -0.766049,0.607525,-0.209958,1.213173,0.368416,-0.664625, -0.766049,0.607525,-0.209958,1.213173,0.368416,-0.664625, -0.723455,0.416599,-0.550508,1.219504,0.355352,-0.706, -0.617508,0.597059,-0.512058,1.279412,0.419138,-0.7215, -0.553505,0.813265,0.179534,1.370035,0.524394,-0.361333, -0.623755,0.751092,0.216309,1.327792,0.487107,-0.335375, -0.65936,0.747587,0.079739,1.327417,0.49859,-0.4095, -0.553505,0.813265,0.179534,1.370035,0.524394,-0.361333, -0.65936,0.747587,0.079739,1.327417,0.49859,-0.4095, -0.571934,0.814147,0.100277,1.384841,0.546182,-0.4175, -0.623755,0.751092,0.216309,1.327792,0.487107,-0.335375, -0.702693,0.678582,0.21389,1.26889,0.429299,-0.322437, -0.716739,0.692147,0.08496,1.262552,0.435419,-0.40225, -0.716739,0.692147,0.08496,1.262552,0.435419,-0.40225, -0.65936,0.747587,0.079739,1.327417,0.49859,-0.4095, -0.623755,0.751092,0.216309,1.327792,0.487107,-0.335375, -0.71934,0.694658,0,1.260429,0.437469,-0.5, -0.65772,0.753262,0,1.330455,0.505735,-0.5, -0.65936,0.747587,0.079739,1.327417,0.49859,-0.4095, -0.71934,0.694658,0,1.260429,0.437469,-0.5, -0.65936,0.747587,0.079739,1.327417,0.49859,-0.4095, -0.716739,0.692147,0.08496,1.262552,0.435419,-0.40225, -0.65772,0.753262,0,1.330455,0.505735,-0.5, -0.527613,0.849485,0,1.392236,0.557026,-0.5, -0.571934,0.814147,0.100277,1.384841,0.546182,-0.4175, -0.571934,0.814147,0.100277,1.384841,0.546182,-0.4175, -0.65936,0.747587,0.079739,1.327417,0.49859,-0.4095, -0.65772,0.753262,0,1.330455,0.505735,-0.5, -0.828633,0.523102,0.199328,1.177383,0.324897,-0.361333, -0.833612,0.543172,0.100277,1.156124,0.30934,-0.4175, -0.770142,0.632868,0.079739,1.201684,0.368389,-0.4095, -0.828633,0.523102,0.199328,1.177383,0.324897,-0.361333, -0.770142,0.632868,0.079739,1.201684,0.368389,-0.4095, -0.766049,0.607525,0.209958,1.213173,0.368416,-0.335375, -0.833612,0.543172,0.100277,1.156124,0.30934,-0.4175, -0.867381,0.497645,0,1.145545,0.301571,-0.5, -0.775757,0.631031,0,1.19465,0.365104,-0.5, -0.775757,0.631031,0,1.19465,0.365104,-0.5, -0.770142,0.632868,0.079739,1.201684,0.368389,-0.4095, -0.833612,0.543172,0.100277,1.156124,0.30934,-0.4175, -0.71934,0.694658,0,1.260429,0.437469,-0.5, -0.716739,0.692147,0.08496,1.262552,0.435419,-0.40225, -0.770142,0.632868,0.079739,1.201684,0.368389,-0.4095, -0.71934,0.694658,0,1.260429,0.437469,-0.5, -0.770142,0.632868,0.079739,1.201684,0.368389,-0.4095, -0.775757,0.631031,0,1.19465,0.365104,-0.5, -0.716739,0.692147,0.08496,1.262552,0.435419,-0.40225, -0.702693,0.678582,0.21389,1.26889,0.429299,-0.322437, -0.766049,0.607525,0.209958,1.213173,0.368416,-0.335375, -0.766049,0.607525,0.209958,1.213173,0.368416,-0.335375, -0.770142,0.632868,0.079739,1.201684,0.368389,-0.4095, -0.716739,0.692147,0.08496,1.262552,0.435419,-0.40225, -0.828633,0.523102,-0.199328,1.177383,0.324897,-0.638667, -0.766049,0.607525,-0.209958,1.213173,0.368416,-0.664625, -0.770142,0.632868,-0.079739,1.201684,0.368389,-0.5905, -0.828633,0.523102,-0.199328,1.177383,0.324897,-0.638667, -0.770142,0.632868,-0.079739,1.201684,0.368389,-0.5905, -0.833612,0.543172,-0.100277,1.156124,0.30934,-0.5825, -0.766049,0.607525,-0.209958,1.213173,0.368416,-0.664625, -0.702693,0.678582,-0.21389,1.26889,0.429299,-0.677562, -0.716739,0.692147,-0.08496,1.262552,0.435419,-0.59775, -0.716739,0.692147,-0.08496,1.262552,0.435419,-0.59775, -0.770142,0.632868,-0.079739,1.201684,0.368389,-0.5905, -0.766049,0.607525,-0.209958,1.213173,0.368416,-0.664625, -0.71934,0.694658,0,1.260429,0.437469,-0.5, -0.775757,0.631031,0,1.19465,0.365104,-0.5, -0.770142,0.632868,-0.079739,1.201684,0.368389,-0.5905, -0.71934,0.694658,0,1.260429,0.437469,-0.5, -0.770142,0.632868,-0.079739,1.201684,0.368389,-0.5905, -0.716739,0.692147,-0.08496,1.262552,0.435419,-0.59775, -0.775757,0.631031,0,1.19465,0.365104,-0.5, -0.867381,0.497645,0,1.145545,0.301571,-0.5, -0.833612,0.543172,-0.100277,1.156124,0.30934,-0.5825, -0.833612,0.543172,-0.100277,1.156124,0.30934,-0.5825, -0.770142,0.632868,-0.079739,1.201684,0.368389,-0.5905, -0.775757,0.631031,0,1.19465,0.365104,-0.5, -0.553505,0.813265,-0.179534,1.370035,0.524394,-0.638667, -0.571934,0.814147,-0.100277,1.384841,0.546182,-0.5825, -0.65936,0.747587,-0.079739,1.327417,0.49859,-0.5905, -0.553505,0.813265,-0.179534,1.370035,0.524394,-0.638667, -0.65936,0.747587,-0.079739,1.327417,0.49859,-0.5905, -0.623755,0.751092,-0.216309,1.327792,0.487107,-0.664625, -0.571934,0.814147,-0.100277,1.384841,0.546182,-0.5825, -0.527613,0.849485,0,1.392236,0.557026,-0.5, -0.65772,0.753262,0,1.330455,0.505735,-0.5, -0.65772,0.753262,0,1.330455,0.505735,-0.5, -0.65936,0.747587,-0.079739,1.327417,0.49859,-0.5905, -0.571934,0.814147,-0.100277,1.384841,0.546182,-0.5825, -0.71934,0.694658,0,1.260429,0.437469,-0.5, -0.716739,0.692147,-0.08496,1.262552,0.435419,-0.59775, -0.65936,0.747587,-0.079739,1.327417,0.49859,-0.5905, -0.71934,0.694658,0,1.260429,0.437469,-0.5, -0.65936,0.747587,-0.079739,1.327417,0.49859,-0.5905, -0.65772,0.753262,0,1.330455,0.505735,-0.5, -0.716739,0.692147,-0.08496,1.262552,0.435419,-0.59775, -0.702693,0.678582,-0.21389,1.26889,0.429299,-0.677562, -0.623755,0.751092,-0.216309,1.327792,0.487107,-0.664625, -0.623755,0.751092,-0.216309,1.327792,0.487107,-0.664625, -0.65936,0.747587,-0.079739,1.327417,0.49859,-0.5905, -0.716739,0.692147,-0.08496,1.262552,0.435419,-0.59775, 0.751095,0.142007,-0.644741,1.460394,0.412133,-0.660849, 0.74475,0.138417,-0.652831,1.49043,0.310049,-0.648448, 0.924767,0.224636,-0.307154,1.521298,0.332708,-0.580972, 0.751095,0.142007,-0.644741,1.460394,0.412133,-0.660849, 0.924767,0.224636,-0.307154,1.521298,0.332708,-0.580972, 0.922813,0.236109,-0.304415,1.492239,0.440457,-0.587736, 0.74475,0.138417,-0.652831,1.49043,0.310049,-0.648448, 0.734405,0.137212,-0.664697,1.524188,0.186469,-0.636664, 0.924854,0.216174,-0.312912,1.554547,0.202755,-0.574544, 0.924854,0.216174,-0.312912,1.554547,0.202755,-0.574544, 0.924767,0.224636,-0.307154,1.521298,0.332708,-0.580972, 0.74475,0.138417,-0.652831,1.49043,0.310049,-0.648448, 0.97102,0.238998,0,1.564666,0.208184,-0.5, 0.968395,0.249424,0,1.531587,0.340261,-0.5, 0.924767,0.224636,-0.307154,1.521298,0.332708,-0.580972, 0.97102,0.238998,0,1.564666,0.208184,-0.5, 0.924767,0.224636,-0.307154,1.521298,0.332708,-0.580972, 0.924854,0.216174,-0.312912,1.554547,0.202755,-0.574544, 0.968395,0.249424,0,1.531587,0.340261,-0.5, 0.964484,0.264141,0,1.502855,0.449898,-0.5, 0.922813,0.236109,-0.304415,1.492239,0.440457,-0.587736, 0.922813,0.236109,-0.304415,1.492239,0.440457,-0.587736, 0.924767,0.224636,-0.307154,1.521298,0.332708,-0.580972, 0.968395,0.249424,0,1.531587,0.340261,-0.5, 0.721766,0.139046,-0.678027,1.558275,0.051411,-0.627772, 0.68395,0.1429,-0.715397,1.589301,-0.085107,-0.624049, 0.923419,0.19798,-0.328787,1.620986,-0.080049,-0.567663, 0.923419,0.19798,-0.328787,1.620986,-0.080049,-0.567663, 0.924112,0.20782,-0.320669,1.588828,0.061527,-0.569694, 0.721766,0.139046,-0.678027,1.558275,0.051411,-0.627772, 0.976556,0.215262,0,1.631547,-0.078363,-0.5, 0.973545,0.228495,0,1.599013,0.064899,-0.5, 0.924112,0.20782,-0.320669,1.588828,0.061527,-0.569694, 0.976556,0.215262,0,1.631547,-0.078363,-0.5, 0.924112,0.20782,-0.320669,1.588828,0.061527,-0.569694, 0.923419,0.19798,-0.328787,1.620986,-0.080049,-0.567663, 0.973545,0.228495,0,1.599013,0.064899,-0.5, 0.97102,0.238998,0,1.564666,0.208184,-0.5, 0.924854,0.216174,-0.312912,1.554547,0.202755,-0.574544, 0.924854,0.216174,-0.312912,1.554547,0.202755,-0.574544, 0.924112,0.20782,-0.320669,1.588828,0.061527,-0.569694, 0.973545,0.228495,0,1.599013,0.064899,-0.5, 0.734405,0.137212,-0.664697,1.524188,0.186469,-0.636664, 0.721766,0.139046,-0.678027,1.558275,0.051411,-0.627772, 0.924112,0.20782,-0.320669,1.588828,0.061527,-0.569694, 0.734405,0.137212,-0.664697,1.524188,0.186469,-0.636664, 0.924112,0.20782,-0.320669,1.588828,0.061527,-0.569694, 0.924854,0.216174,-0.312912,1.554547,0.202755,-0.574544, 0.923419,0.19798,0.328787,1.620986,-0.080049,-0.432337, 0.68395,0.1429,0.715397,1.589301,-0.085107,-0.375951, 0.721766,0.139046,0.678027,1.558275,0.051411,-0.372228, 0.721766,0.139046,0.678027,1.558275,0.051411,-0.372228, 0.924112,0.20782,0.320669,1.588828,0.061527,-0.430306, 0.923419,0.19798,0.328787,1.620986,-0.080049,-0.432337, 0.734405,0.137212,0.664697,1.524188,0.186469,-0.363336, 0.924854,0.216174,0.312912,1.554547,0.202755,-0.425456, 0.924112,0.20782,0.320669,1.588828,0.061527,-0.430306, 0.734405,0.137212,0.664697,1.524188,0.186469,-0.363336, 0.924112,0.20782,0.320669,1.588828,0.061527,-0.430306, 0.721766,0.139046,0.678027,1.558275,0.051411,-0.372228, 0.924854,0.216174,0.312912,1.554547,0.202755,-0.425456, 0.97102,0.238998,0,1.564666,0.208184,-0.5, 0.973545,0.228495,0,1.599013,0.064899,-0.5, 0.973545,0.228495,0,1.599013,0.064899,-0.5, 0.924112,0.20782,0.320669,1.588828,0.061527,-0.430306, 0.924854,0.216174,0.312912,1.554547,0.202755,-0.425456, 0.976556,0.215262,0,1.631547,-0.078363,-0.5, 0.923419,0.19798,0.328787,1.620986,-0.080049,-0.432337, 0.924112,0.20782,0.320669,1.588828,0.061527,-0.430306, 0.976556,0.215262,0,1.631547,-0.078363,-0.5, 0.924112,0.20782,0.320669,1.588828,0.061527,-0.430306, 0.973545,0.228495,0,1.599013,0.064899,-0.5, 0.751095,0.142007,0.644741,1.460394,0.412133,-0.339151, 0.922813,0.236109,0.304415,1.492239,0.440457,-0.412264, 0.924767,0.224636,0.307154,1.521298,0.332708,-0.419028, 0.751095,0.142007,0.644741,1.460394,0.412133,-0.339151, 0.924767,0.224636,0.307154,1.521298,0.332708,-0.419028, 0.74475,0.138417,0.652831,1.49043,0.310049,-0.351552, 0.922813,0.236109,0.304415,1.492239,0.440457,-0.412264, 0.964484,0.264141,0,1.502855,0.449898,-0.5, 0.968395,0.249424,0,1.531587,0.340261,-0.5, 0.968395,0.249424,0,1.531587,0.340261,-0.5, 0.924767,0.224636,0.307154,1.521298,0.332708,-0.419028, 0.922813,0.236109,0.304415,1.492239,0.440457,-0.412264, 0.97102,0.238998,0,1.564666,0.208184,-0.5, 0.924854,0.216174,0.312912,1.554547,0.202755,-0.425456, 0.924767,0.224636,0.307154,1.521298,0.332708,-0.419028, 0.97102,0.238998,0,1.564666,0.208184,-0.5, 0.924767,0.224636,0.307154,1.521298,0.332708,-0.419028, 0.968395,0.249424,0,1.531587,0.340261,-0.5, 0.924854,0.216174,0.312912,1.554547,0.202755,-0.425456, 0.734405,0.137212,0.664697,1.524188,0.186469,-0.363336, 0.74475,0.138417,0.652831,1.49043,0.310049,-0.351552, 0.74475,0.138417,0.652831,1.49043,0.310049,-0.351552, 0.924767,0.224636,0.307154,1.521298,0.332708,-0.419028, 0.924854,0.216174,0.312912,1.554547,0.202755,-0.425456, -0.503423,-0.512227,-0.695836,1.226863,0.204423,-0.660849, -0.575759,-0.440808,-0.688615,1.264067,0.143881,-0.648448, -0.232261,-0.293469,-0.927325,1.315513,0.181646,-0.688934, -0.503423,-0.512227,-0.695836,1.226863,0.204423,-0.660849, -0.232261,-0.293469,-0.927325,1.315513,0.181646,-0.688934, -0.17234,-0.336344,-0.925836,1.279939,0.25163,-0.704717, -0.575759,-0.440808,-0.688615,1.264067,0.143881,-0.648448, -0.637408,-0.358226,-0.682191,1.301556,0.067036,-0.636664, -0.287334,-0.241218,-0.926959,1.352154,0.09418,-0.673936, -0.287334,-0.241218,-0.926959,1.352154,0.09418,-0.673936, -0.232261,-0.293469,-0.927325,1.315513,0.181646,-0.688934, -0.575759,-0.440808,-0.688615,1.264067,0.143881,-0.648448, 0.061121,-0.115002,-0.991483,1.412872,0.126752,-0.68636, 0.103365,-0.143519,-0.984235,1.377249,0.226965,-0.70243, -0.232261,-0.293469,-0.927325,1.315513,0.181646,-0.688934, 0.061121,-0.115002,-0.991483,1.412872,0.126752,-0.68636, -0.232261,-0.293469,-0.927325,1.315513,0.181646,-0.688934, -0.287334,-0.241218,-0.926959,1.352154,0.09418,-0.673936, 0.103365,-0.143519,-0.984235,1.377249,0.226965,-0.70243, 0.144715,-0.16618,-0.975419,1.343629,0.308278,-0.71934, -0.17234,-0.336344,-0.925836,1.279939,0.25163,-0.704717, -0.17234,-0.336344,-0.925836,1.279939,0.25163,-0.704717, -0.232261,-0.293469,-0.927325,1.315513,0.181646,-0.688934, 0.103365,-0.143519,-0.984235,1.377249,0.226965,-0.70243, -0.686016,-0.251158,-0.682863,1.33422,-0.022771,-0.627772, -0.71415,-0.110296,-0.691249,1.356947,-0.122198,-0.624049, -0.355153,-0.061801,-0.932763,1.409755,-0.113768,-0.657881, -0.355153,-0.061801,-0.932763,1.409755,-0.113768,-0.657881, -0.331282,-0.167258,-0.928589,1.385142,-0.005911,-0.662619, -0.686016,-0.251158,-0.682863,1.33422,-0.022771,-0.627772, -0.032665,-0.015822,-0.999341,1.473124,-0.103652,-0.669158, 0.024003,-0.070986,-0.997189,1.446248,0.01432,-0.674234, -0.331282,-0.167258,-0.928589,1.385142,-0.005911,-0.662619, -0.032665,-0.015822,-0.999341,1.473124,-0.103652,-0.669158, -0.331282,-0.167258,-0.928589,1.385142,-0.005911,-0.662619, -0.355153,-0.061801,-0.932763,1.409755,-0.113768,-0.657881, 0.024003,-0.070986,-0.997189,1.446248,0.01432,-0.674234, 0.061121,-0.115002,-0.991483,1.412872,0.126752,-0.68636, -0.287334,-0.241218,-0.926959,1.352154,0.09418,-0.673936, -0.287334,-0.241218,-0.926959,1.352154,0.09418,-0.673936, -0.331282,-0.167258,-0.928589,1.385142,-0.005911,-0.662619, 0.024003,-0.070986,-0.997189,1.446248,0.01432,-0.674234, -0.637408,-0.358226,-0.682191,1.301556,0.067036,-0.636664, -0.686016,-0.251158,-0.682863,1.33422,-0.022771,-0.627772, -0.331282,-0.167258,-0.928589,1.385142,-0.005911,-0.662619, -0.637408,-0.358226,-0.682191,1.301556,0.067036,-0.636664, -0.331282,-0.167258,-0.928589,1.385142,-0.005911,-0.662619, -0.287334,-0.241218,-0.926959,1.352154,0.09418,-0.673936, 0.68395,0.1429,-0.715397,1.589301,-0.085107,-0.624049, 0.721766,0.139046,-0.678027,1.558275,0.051411,-0.627772, 0.376201,0.032359,-0.925973,1.507354,0.034552,-0.662619, 0.68395,0.1429,-0.715397,1.589301,-0.085107,-0.624049, 0.376201,0.032359,-0.925973,1.507354,0.034552,-0.662619, 0.294772,0.058288,-0.953788,1.536493,-0.093537,-0.657881, 0.721766,0.139046,-0.678027,1.558275,0.051411,-0.627772, 0.734405,0.137212,-0.664697,1.524188,0.186469,-0.636664, 0.403594,0.012135,-0.914858,1.47359,0.159325,-0.673936, 0.403594,0.012135,-0.914858,1.47359,0.159325,-0.673936, 0.376201,0.032359,-0.925973,1.507354,0.034552,-0.662619, 0.721766,0.139046,-0.678027,1.558275,0.051411,-0.627772, 0.061121,-0.115002,-0.991483,1.412872,0.126752,-0.68636, 0.024003,-0.070986,-0.997189,1.446248,0.01432,-0.674234, 0.376201,0.032359,-0.925973,1.507354,0.034552,-0.662619, 0.061121,-0.115002,-0.991483,1.412872,0.126752,-0.68636, 0.376201,0.032359,-0.925973,1.507354,0.034552,-0.662619, 0.403594,0.012135,-0.914858,1.47359,0.159325,-0.673936, 0.024003,-0.070986,-0.997189,1.446248,0.01432,-0.674234, -0.032665,-0.015822,-0.999341,1.473124,-0.103652,-0.669158, 0.294772,0.058288,-0.953788,1.536493,-0.093537,-0.657881, 0.294772,0.058288,-0.953788,1.536493,-0.093537,-0.657881, 0.376201,0.032359,-0.925973,1.507354,0.034552,-0.662619, 0.024003,-0.070986,-0.997189,1.446248,0.01432,-0.674234, 0.74475,0.138417,-0.652831,1.49043,0.310049,-0.648448, 0.751095,0.142007,-0.644741,1.460394,0.412133,-0.660849, 0.45328,-0.007609,-0.891335,1.407319,0.364926,-0.704717, 0.45328,-0.007609,-0.891335,1.407319,0.364926,-0.704717, 0.430582,0.000669,-0.902551,1.438984,0.272283,-0.688934, 0.74475,0.138417,-0.652831,1.49043,0.310049,-0.648448, 0.144715,-0.16618,-0.975419,1.343629,0.308278,-0.71934, 0.103365,-0.143519,-0.984235,1.377249,0.226965,-0.70243, 0.430582,0.000669,-0.902551,1.438984,0.272283,-0.688934, 0.144715,-0.16618,-0.975419,1.343629,0.308278,-0.71934, 0.430582,0.000669,-0.902551,1.438984,0.272283,-0.688934, 0.45328,-0.007609,-0.891335,1.407319,0.364926,-0.704717, 0.103365,-0.143519,-0.984235,1.377249,0.226965,-0.70243, 0.061121,-0.115002,-0.991483,1.412872,0.126752,-0.68636, 0.403594,0.012135,-0.914858,1.47359,0.159325,-0.673936, 0.403594,0.012135,-0.914858,1.47359,0.159325,-0.673936, 0.430582,0.000669,-0.902551,1.438984,0.272283,-0.688934, 0.103365,-0.143519,-0.984235,1.377249,0.226965,-0.70243, 0.734405,0.137212,-0.664697,1.524188,0.186469,-0.636664, 0.74475,0.138417,-0.652831,1.49043,0.310049,-0.648448, 0.430582,0.000669,-0.902551,1.438984,0.272283,-0.688934, 0.734405,0.137212,-0.664697,1.524188,0.186469,-0.636664, 0.430582,0.000669,-0.902551,1.438984,0.272283,-0.688934, 0.403594,0.012135,-0.914858,1.47359,0.159325,-0.673936, -0.503423,-0.512227,0.695837,1.226863,0.204423,-0.339151, -0.17234,-0.336344,0.925836,1.279939,0.25163,-0.295283, -0.232261,-0.293468,0.927325,1.315513,0.181646,-0.311066, -0.503423,-0.512227,0.695837,1.226863,0.204423,-0.339151, -0.232261,-0.293468,0.927325,1.315513,0.181646,-0.311066, -0.575759,-0.440808,0.688615,1.264067,0.143881,-0.351552, -0.17234,-0.336344,0.925836,1.279939,0.25163,-0.295283, 0.144715,-0.16618,0.975419,1.343629,0.308278,-0.28066, 0.103365,-0.143519,0.984235,1.377249,0.226965,-0.29757, 0.103365,-0.143519,0.984235,1.377249,0.226965,-0.29757, -0.232261,-0.293468,0.927325,1.315513,0.181646,-0.311066, -0.17234,-0.336344,0.925836,1.279939,0.25163,-0.295283, 0.061121,-0.115002,0.991483,1.412872,0.126752,-0.31364, -0.287334,-0.241218,0.926959,1.352154,0.09418,-0.326064, -0.232261,-0.293468,0.927325,1.315513,0.181646,-0.311066, 0.061121,-0.115002,0.991483,1.412872,0.126752,-0.31364, -0.232261,-0.293468,0.927325,1.315513,0.181646,-0.311066, 0.103365,-0.143519,0.984235,1.377249,0.226965,-0.29757, -0.287334,-0.241218,0.926959,1.352154,0.09418,-0.326064, -0.637408,-0.358226,0.682191,1.301556,0.067036,-0.363336, -0.575759,-0.440808,0.688615,1.264067,0.143881,-0.351552, -0.575759,-0.440808,0.688615,1.264067,0.143881,-0.351552, -0.232261,-0.293468,0.927325,1.315513,0.181646,-0.311066, -0.287334,-0.241218,0.926959,1.352154,0.09418,-0.326064, 0.45328,-0.00761,0.891335,1.407319,0.364926,-0.295283, 0.751095,0.142007,0.644741,1.460394,0.412133,-0.339151, 0.74475,0.138417,0.652831,1.49043,0.310049,-0.351552, 0.74475,0.138417,0.652831,1.49043,0.310049,-0.351552, 0.430582,0.000669,0.902551,1.438984,0.272283,-0.311066, 0.45328,-0.00761,0.891335,1.407319,0.364926,-0.295283, 0.734405,0.137212,0.664697,1.524188,0.186469,-0.363336, 0.403594,0.012135,0.914858,1.47359,0.159325,-0.326064, 0.430582,0.000669,0.902551,1.438984,0.272283,-0.311066, 0.734405,0.137212,0.664697,1.524188,0.186469,-0.363336, 0.430582,0.000669,0.902551,1.438984,0.272283,-0.311066, 0.74475,0.138417,0.652831,1.49043,0.310049,-0.351552, 0.403594,0.012135,0.914858,1.47359,0.159325,-0.326064, 0.061121,-0.115002,0.991483,1.412872,0.126752,-0.31364, 0.103365,-0.143519,0.984235,1.377249,0.226965,-0.29757, 0.103365,-0.143519,0.984235,1.377249,0.226965,-0.29757, 0.430582,0.000669,0.902551,1.438984,0.272283,-0.311066, 0.403594,0.012135,0.914858,1.47359,0.159325,-0.326064, 0.144715,-0.16618,0.975419,1.343629,0.308278,-0.28066, 0.45328,-0.00761,0.891335,1.407319,0.364926,-0.295283, 0.430582,0.000669,0.902551,1.438984,0.272283,-0.311066, 0.144715,-0.16618,0.975419,1.343629,0.308278,-0.28066, 0.430582,0.000669,0.902551,1.438984,0.272283,-0.311066, 0.103365,-0.143519,0.984235,1.377249,0.226965,-0.29757, 0.68395,0.1429,0.715397,1.589301,-0.085107,-0.375951, 0.294772,0.058287,0.953788,1.536493,-0.093537,-0.342119, 0.376201,0.032359,0.925973,1.507354,0.034552,-0.337381, 0.68395,0.1429,0.715397,1.589301,-0.085107,-0.375951, 0.376201,0.032359,0.925973,1.507354,0.034552,-0.337381, 0.721766,0.139046,0.678027,1.558275,0.051411,-0.372228, 0.294772,0.058287,0.953788,1.536493,-0.093537,-0.342119, -0.032665,-0.015822,0.999341,1.473124,-0.103652,-0.330842, 0.024003,-0.070986,0.997189,1.446248,0.01432,-0.325766, 0.024003,-0.070986,0.997189,1.446248,0.01432,-0.325766, 0.376201,0.032359,0.925973,1.507354,0.034552,-0.337381, 0.294772,0.058287,0.953788,1.536493,-0.093537,-0.342119, 0.061121,-0.115002,0.991483,1.412872,0.126752,-0.31364, 0.403594,0.012135,0.914858,1.47359,0.159325,-0.326064, 0.376201,0.032359,0.925973,1.507354,0.034552,-0.337381, 0.061121,-0.115002,0.991483,1.412872,0.126752,-0.31364, 0.376201,0.032359,0.925973,1.507354,0.034552,-0.337381, 0.024003,-0.070986,0.997189,1.446248,0.01432,-0.325766, 0.403594,0.012135,0.914858,1.47359,0.159325,-0.326064, 0.734405,0.137212,0.664697,1.524188,0.186469,-0.363336, 0.721766,0.139046,0.678027,1.558275,0.051411,-0.372228, 0.721766,0.139046,0.678027,1.558275,0.051411,-0.372228, 0.376201,0.032359,0.925973,1.507354,0.034552,-0.337381, 0.403594,0.012135,0.914858,1.47359,0.159325,-0.326064, -0.355153,-0.061801,0.932763,1.409755,-0.113768,-0.342119, -0.714149,-0.110296,0.691249,1.356947,-0.122198,-0.375951, -0.686016,-0.251158,0.682863,1.33422,-0.022771,-0.372228, -0.686016,-0.251158,0.682863,1.33422,-0.022771,-0.372228, -0.331282,-0.167257,0.928589,1.385142,-0.005911,-0.337381, -0.355153,-0.061801,0.932763,1.409755,-0.113768,-0.342119, -0.637408,-0.358226,0.682191,1.301556,0.067036,-0.363336, -0.287334,-0.241218,0.926959,1.352154,0.09418,-0.326064, -0.331282,-0.167257,0.928589,1.385142,-0.005911,-0.337381, -0.637408,-0.358226,0.682191,1.301556,0.067036,-0.363336, -0.331282,-0.167257,0.928589,1.385142,-0.005911,-0.337381, -0.686016,-0.251158,0.682863,1.33422,-0.022771,-0.372228, -0.287334,-0.241218,0.926959,1.352154,0.09418,-0.326064, 0.061121,-0.115002,0.991483,1.412872,0.126752,-0.31364, 0.024003,-0.070986,0.997189,1.446248,0.01432,-0.325766, 0.024003,-0.070986,0.997189,1.446248,0.01432,-0.325766, -0.331282,-0.167257,0.928589,1.385142,-0.005911,-0.337381, -0.287334,-0.241218,0.926959,1.352154,0.09418,-0.326064, -0.032665,-0.015822,0.999341,1.473124,-0.103652,-0.330842, -0.355153,-0.061801,0.932763,1.409755,-0.113768,-0.342119, -0.331282,-0.167257,0.928589,1.385142,-0.005911,-0.337381, -0.032665,-0.015822,0.999341,1.473124,-0.103652,-0.330842, -0.331282,-0.167257,0.928589,1.385142,-0.005911,-0.337381, 0.024003,-0.070986,0.997189,1.446248,0.01432,-0.325766, -0.575759,-0.440808,-0.688615,1.264067,0.143881,-0.648448, -0.503423,-0.512227,-0.695836,1.226863,0.204423,-0.660849, -0.715537,-0.612433,-0.336055,1.195018,0.176099,-0.587736, -0.715537,-0.612433,-0.336055,1.195018,0.176099,-0.587736, -0.788495,-0.519776,-0.328798,1.2332,0.121222,-0.580972, -0.575759,-0.440808,-0.688615,1.264067,0.143881,-0.648448, -0.784292,-0.620391,0,1.184403,0.166658,-0.5, -0.853449,-0.521176,0,1.222911,0.113669,-0.5, -0.788495,-0.519776,-0.328798,1.2332,0.121222,-0.580972, -0.784292,-0.620391,0,1.184403,0.166658,-0.5, -0.788495,-0.519776,-0.328798,1.2332,0.121222,-0.580972, -0.715537,-0.612433,-0.336055,1.195018,0.176099,-0.587736, -0.853449,-0.521176,0,1.222911,0.113669,-0.5, -0.912287,-0.409552,0,1.261078,0.045321,-0.5, -0.849326,-0.416862,-0.323838,1.271198,0.05075,-0.574544, -0.849326,-0.416862,-0.323838,1.271198,0.05075,-0.574544, -0.788495,-0.519776,-0.328798,1.2332,0.121222,-0.580972, -0.853449,-0.521176,0,1.222911,0.113669,-0.5, -0.637408,-0.358226,-0.682191,1.301556,0.067036,-0.636664, -0.575759,-0.440808,-0.688615,1.264067,0.143881,-0.648448, -0.788495,-0.519776,-0.328798,1.2332,0.121222,-0.580972, -0.637408,-0.358226,-0.682191,1.301556,0.067036,-0.636664, -0.788495,-0.519776,-0.328798,1.2332,0.121222,-0.580972, -0.849326,-0.416862,-0.323838,1.271198,0.05075,-0.574544, -0.715537,-0.612433,0.336055,1.195018,0.176099,-0.412264, -0.503423,-0.512227,0.695837,1.226863,0.204423,-0.339151, -0.575759,-0.440808,0.688615,1.264067,0.143881,-0.351552, -0.575759,-0.440808,0.688615,1.264067,0.143881,-0.351552, -0.788495,-0.519776,0.328798,1.2332,0.121222,-0.419028, -0.715537,-0.612433,0.336055,1.195018,0.176099,-0.412264, -0.637408,-0.358226,0.682191,1.301556,0.067036,-0.363336, -0.849326,-0.416862,0.323838,1.271198,0.05075,-0.425456, -0.788495,-0.519776,0.328798,1.2332,0.121222,-0.419028, -0.637408,-0.358226,0.682191,1.301556,0.067036,-0.363336, -0.788495,-0.519776,0.328798,1.2332,0.121222,-0.419028, -0.575759,-0.440808,0.688615,1.264067,0.143881,-0.351552, -0.849326,-0.416862,0.323838,1.271198,0.05075,-0.425456, -0.912287,-0.409552,0,1.261078,0.045321,-0.5, -0.853449,-0.521176,0,1.222911,0.113669,-0.5, -0.853449,-0.521176,0,1.222911,0.113669,-0.5, -0.788495,-0.519776,0.328798,1.2332,0.121222,-0.419028, -0.849326,-0.416862,0.323838,1.271198,0.05075,-0.425456, -0.784292,-0.620391,0,1.184403,0.166658,-0.5, -0.715537,-0.612433,0.336055,1.195018,0.176099,-0.412264, -0.788495,-0.519776,0.328798,1.2332,0.121222,-0.419028, -0.784292,-0.620391,0,1.184403,0.166658,-0.5, -0.788495,-0.519776,0.328798,1.2332,0.121222,-0.419028, -0.853449,-0.521176,0,1.222911,0.113669,-0.5, -0.714149,-0.110296,0.691249,1.356947,-0.122198,-0.375951, -0.933801,-0.132296,0.332437,1.325262,-0.127256,-0.432337, -0.899929,-0.290508,0.325166,1.303667,-0.032887,-0.430306, -0.714149,-0.110296,0.691249,1.356947,-0.122198,-0.375951, -0.899929,-0.290508,0.325166,1.303667,-0.032887,-0.430306, -0.686016,-0.251158,0.682863,1.33422,-0.022771,-0.372228, -0.933801,-0.132296,0.332437,1.325262,-0.127256,-0.432337, -0.994338,-0.106266,0,1.314701,-0.128942,-0.5, -0.961859,-0.273547,0,1.293483,-0.036258,-0.5, -0.961859,-0.273547,0,1.293483,-0.036258,-0.5, -0.899929,-0.290508,0.325166,1.303667,-0.032887,-0.430306, -0.933801,-0.132296,0.332437,1.325262,-0.127256,-0.432337, -0.912287,-0.409552,0,1.261078,0.045321,-0.5, -0.849326,-0.416862,0.323838,1.271198,0.05075,-0.425456, -0.899929,-0.290508,0.325166,1.303667,-0.032887,-0.430306, -0.912287,-0.409552,0,1.261078,0.045321,-0.5, -0.899929,-0.290508,0.325166,1.303667,-0.032887,-0.430306, -0.961859,-0.273547,0,1.293483,-0.036258,-0.5, -0.849326,-0.416862,0.323838,1.271198,0.05075,-0.425456, -0.637408,-0.358226,0.682191,1.301556,0.067036,-0.363336, -0.686016,-0.251158,0.682863,1.33422,-0.022771,-0.372228, -0.686016,-0.251158,0.682863,1.33422,-0.022771,-0.372228, -0.899929,-0.290508,0.325166,1.303667,-0.032887,-0.430306, -0.849326,-0.416862,0.323838,1.271198,0.05075,-0.425456, -0.71415,-0.110296,-0.691249,1.356947,-0.122198,-0.624049, -0.686016,-0.251158,-0.682863,1.33422,-0.022771,-0.627772, -0.899929,-0.290508,-0.325166,1.303667,-0.032887,-0.569694, -0.71415,-0.110296,-0.691249,1.356947,-0.122198,-0.624049, -0.899929,-0.290508,-0.325166,1.303667,-0.032887,-0.569694, -0.933801,-0.132296,-0.332437,1.325262,-0.127256,-0.567663, -0.686016,-0.251158,-0.682863,1.33422,-0.022771,-0.627772, -0.637408,-0.358226,-0.682191,1.301556,0.067036,-0.636664, -0.849326,-0.416862,-0.323838,1.271198,0.05075,-0.574544, -0.849326,-0.416862,-0.323838,1.271198,0.05075,-0.574544, -0.899929,-0.290508,-0.325166,1.303667,-0.032887,-0.569694, -0.686016,-0.251158,-0.682863,1.33422,-0.022771,-0.627772, -0.912287,-0.409552,0,1.261078,0.045321,-0.5, -0.961859,-0.273547,0,1.293483,-0.036258,-0.5, -0.899929,-0.290508,-0.325166,1.303667,-0.032887,-0.569694, -0.912287,-0.409552,0,1.261078,0.045321,-0.5, -0.899929,-0.290508,-0.325166,1.303667,-0.032887,-0.569694, -0.849326,-0.416862,-0.323838,1.271198,0.05075,-0.574544, -0.961859,-0.273547,0,1.293483,-0.036258,-0.5, -0.994338,-0.106266,0,1.314701,-0.128942,-0.5, -0.933801,-0.132296,-0.332437,1.325262,-0.127256,-0.567663, -0.933801,-0.132296,-0.332437,1.325262,-0.127256,-0.567663, -0.899929,-0.290508,-0.325166,1.303667,-0.032887,-0.569694, -0.961859,-0.273547,0,1.293483,-0.036258,-0.5, -0.693871,0.192788,-0.693812,1.351552,-0.429344,-0.648448, -0.686951,0.237061,-0.686951,1.339151,-0.510672,-0.660849, -0.336776,0.225597,-0.91416,1.412264,-0.510672,-0.704717, -0.336776,0.225597,-0.91416,1.412264,-0.510672,-0.704717, -0.340683,0.181594,-0.922474,1.419028,-0.429344,-0.688934, -0.693871,0.192788,-0.693812,1.351552,-0.429344,-0.648448, 0,0.216323,-0.976322,1.5,-0.510672,-0.71934, -0.000776,0.175432,-0.984491,1.5,-0.429344,-0.70243, -0.340683,0.181594,-0.922474,1.419028,-0.429344,-0.688934, 0,0.216323,-0.976322,1.5,-0.510672,-0.71934, -0.340683,0.181594,-0.922474,1.419028,-0.429344,-0.688934, -0.336776,0.225597,-0.91416,1.412264,-0.510672,-0.704717, -0.000776,0.175432,-0.984491,1.5,-0.429344,-0.70243, -0.003469,0.126882,-0.991912,1.497312,-0.330832,-0.68636, -0.347569,0.124206,-0.929392,1.423198,-0.331844,-0.673936, -0.347569,0.124206,-0.929392,1.423198,-0.331844,-0.673936, -0.340683,0.181594,-0.922474,1.419028,-0.429344,-0.688934, -0.000776,0.175432,-0.984491,1.5,-0.429344,-0.70243, -0.702754,0.131399,-0.699193,1.361436,-0.332687,-0.636664, -0.693871,0.192788,-0.693812,1.351552,-0.429344,-0.648448, -0.340683,0.181594,-0.922474,1.419028,-0.429344,-0.688934, -0.702754,0.131399,-0.699193,1.361436,-0.332687,-0.636664, -0.340683,0.181594,-0.922474,1.419028,-0.429344,-0.688934, -0.347569,0.124206,-0.929392,1.423198,-0.331844,-0.673936, 0.336776,0.225597,-0.91416,1.587736,-0.510672,-0.704717, 0.686951,0.237061,-0.686951,1.660849,-0.510672,-0.660849, 0.692333,0.202928,-0.692456,1.648448,-0.429344,-0.648448, 0.692333,0.202928,-0.692456,1.648448,-0.429344,-0.648448, 0.339336,0.190036,-0.92127,1.580972,-0.429344,-0.688934, 0.336776,0.225597,-0.91416,1.587736,-0.510672,-0.704717, 0.695529,0.18142,-0.695217,1.633189,-0.328978,-0.636664, 0.341595,0.155693,-0.926862,1.571427,-0.329821,-0.673936, 0.339336,0.190036,-0.92127,1.580972,-0.429344,-0.688934, 0.695529,0.18142,-0.695217,1.633189,-0.328978,-0.636664, 0.339336,0.190036,-0.92127,1.580972,-0.429344,-0.688934, 0.692333,0.202928,-0.692456,1.648448,-0.429344,-0.648448, 0.341595,0.155693,-0.926862,1.571427,-0.329821,-0.673936, -0.003469,0.126882,-0.991912,1.497312,-0.330832,-0.68636, -0.000776,0.175432,-0.984491,1.5,-0.429344,-0.70243, -0.000776,0.175432,-0.984491,1.5,-0.429344,-0.70243, 0.339336,0.190036,-0.92127,1.580972,-0.429344,-0.688934, 0.341595,0.155693,-0.926862,1.571427,-0.329821,-0.673936, 0,0.216323,-0.976322,1.5,-0.510672,-0.71934, 0.336776,0.225597,-0.91416,1.587736,-0.510672,-0.704717, 0.339336,0.190036,-0.92127,1.580972,-0.429344,-0.688934, 0,0.216323,-0.976322,1.5,-0.510672,-0.71934, 0.339336,0.190036,-0.92127,1.580972,-0.429344,-0.688934, -0.000776,0.175432,-0.984491,1.5,-0.429344,-0.70243, 0.68395,0.1429,-0.715397,1.589301,-0.085107,-0.624049, 0.294772,0.058288,-0.953788,1.536493,-0.093537,-0.657881, 0.345572,0.118142,-0.930926,1.557226,-0.21644,-0.662619, 0.68395,0.1429,-0.715397,1.589301,-0.085107,-0.624049, 0.345572,0.118142,-0.930926,1.557226,-0.21644,-0.662619, 0.699329,0.164944,-0.695509,1.613873,-0.213068,-0.627772, 0.294772,0.058288,-0.953788,1.536493,-0.093537,-0.657881, -0.032665,-0.015822,-0.999341,1.473124,-0.103652,-0.669158, -0.00536,0.065692,-0.997826,1.489249,-0.220486,-0.674234, -0.00536,0.065692,-0.997826,1.489249,-0.220486,-0.674234, 0.345572,0.118142,-0.930926,1.557226,-0.21644,-0.662619, 0.294772,0.058288,-0.953788,1.536493,-0.093537,-0.657881, -0.003469,0.126882,-0.991912,1.497312,-0.330832,-0.68636, 0.341595,0.155693,-0.926862,1.571427,-0.329821,-0.673936, 0.345572,0.118142,-0.930926,1.557226,-0.21644,-0.662619, -0.003469,0.126882,-0.991912,1.497312,-0.330832,-0.68636, 0.345572,0.118142,-0.930926,1.557226,-0.21644,-0.662619, -0.00536,0.065692,-0.997826,1.489249,-0.220486,-0.674234, 0.341595,0.155693,-0.926862,1.571427,-0.329821,-0.673936, 0.695529,0.18142,-0.695217,1.633189,-0.328978,-0.636664, 0.699329,0.164944,-0.695509,1.613873,-0.213068,-0.627772, 0.699329,0.164944,-0.695509,1.613873,-0.213068,-0.627772, 0.345572,0.118142,-0.930926,1.557226,-0.21644,-0.662619, 0.341595,0.155693,-0.926862,1.571427,-0.329821,-0.673936, -0.71415,-0.110296,-0.691249,1.356947,-0.122198,-0.624049, -0.739331,0.03305,-0.672531,1.364627,-0.227904,-0.627772, -0.356256,0.046266,-0.933242,1.421273,-0.224532,-0.662619, -0.71415,-0.110296,-0.691249,1.356947,-0.122198,-0.624049, -0.356256,0.046266,-0.933242,1.421273,-0.224532,-0.662619, -0.355153,-0.061801,-0.932763,1.409755,-0.113768,-0.657881, -0.739331,0.03305,-0.672531,1.364627,-0.227904,-0.627772, -0.702754,0.131399,-0.699193,1.361436,-0.332687,-0.636664, -0.347569,0.124206,-0.929392,1.423198,-0.331844,-0.673936, -0.347569,0.124206,-0.929392,1.423198,-0.331844,-0.673936, -0.356256,0.046266,-0.933242,1.421273,-0.224532,-0.662619, -0.739331,0.03305,-0.672531,1.364627,-0.227904,-0.627772, -0.003469,0.126882,-0.991912,1.497312,-0.330832,-0.68636, -0.00536,0.065692,-0.997826,1.489249,-0.220486,-0.674234, -0.356256,0.046266,-0.933242,1.421273,-0.224532,-0.662619, -0.003469,0.126882,-0.991912,1.497312,-0.330832,-0.68636, -0.356256,0.046266,-0.933242,1.421273,-0.224532,-0.662619, -0.347569,0.124206,-0.929392,1.423198,-0.331844,-0.673936, -0.00536,0.065692,-0.997826,1.489249,-0.220486,-0.674234, -0.032665,-0.015822,-0.999341,1.473124,-0.103652,-0.669158, -0.355153,-0.061801,-0.932763,1.409755,-0.113768,-0.657881, -0.355153,-0.061801,-0.932763,1.409755,-0.113768,-0.657881, -0.356256,0.046266,-0.933242,1.421273,-0.224532,-0.662619, -0.00536,0.065692,-0.997826,1.489249,-0.220486,-0.674234, -0.914159,0.225597,-0.336777,1.295283,-0.510672,-0.587736, -0.686951,0.237061,-0.686951,1.339151,-0.510672,-0.660849, -0.693871,0.192788,-0.693812,1.351552,-0.429344,-0.648448, -0.693871,0.192788,-0.693812,1.351552,-0.429344,-0.648448, -0.923459,0.178536,-0.339629,1.311066,-0.429344,-0.580972, -0.914159,0.225597,-0.336777,1.295283,-0.510672,-0.587736, -0.702754,0.131399,-0.699193,1.361436,-0.332687,-0.636664, -0.933761,0.111444,-0.340103,1.324378,-0.333193,-0.574544, -0.923459,0.178536,-0.339629,1.311066,-0.429344,-0.580972, -0.702754,0.131399,-0.699193,1.361436,-0.332687,-0.636664, -0.923459,0.178536,-0.339629,1.311066,-0.429344,-0.580972, -0.693871,0.192788,-0.693812,1.351552,-0.429344,-0.648448, -0.933761,0.111444,-0.340103,1.324378,-0.333193,-0.574544, -0.995379,0.096022,0,1.312026,-0.333361,-0.5, -0.985978,0.166878,0,1.29757,-0.429344,-0.5, -0.985978,0.166878,0,1.29757,-0.429344,-0.5, -0.923459,0.178536,-0.339629,1.311066,-0.429344,-0.580972, -0.933761,0.111444,-0.340103,1.324378,-0.333193,-0.574544, -0.976322,0.216322,0,1.28066,-0.510672,-0.5, -0.914159,0.225597,-0.336777,1.295283,-0.510672,-0.587736, -0.923459,0.178536,-0.339629,1.311066,-0.429344,-0.580972, -0.976322,0.216322,0,1.28066,-0.510672,-0.5, -0.923459,0.178536,-0.339629,1.311066,-0.429344,-0.580972, -0.985978,0.166878,0,1.29757,-0.429344,-0.5, -0.739331,0.03305,-0.672531,1.364627,-0.227904,-0.627772, -0.71415,-0.110296,-0.691249,1.356947,-0.122198,-0.624049, -0.933801,-0.132296,-0.332437,1.325262,-0.127256,-0.567663, -0.933801,-0.132296,-0.332437,1.325262,-0.127256,-0.567663, -0.960211,0.01432,-0.27891,1.330638,-0.229927,-0.569694, -0.739331,0.03305,-0.672531,1.364627,-0.227904,-0.627772, -0.994338,-0.106266,0,1.314701,-0.128942,-0.5, -0.999919,0.012734,0,1.319309,-0.230602,-0.5, -0.960211,0.01432,-0.27891,1.330638,-0.229927,-0.569694, -0.994338,-0.106266,0,1.314701,-0.128942,-0.5, -0.960211,0.01432,-0.27891,1.330638,-0.229927,-0.569694, -0.933801,-0.132296,-0.332437,1.325262,-0.127256,-0.567663, -0.995379,0.096022,0,1.312026,-0.333361,-0.5, -0.933761,0.111444,-0.340103,1.324378,-0.333193,-0.574544, -0.960211,0.01432,-0.27891,1.330638,-0.229927,-0.569694, -0.995379,0.096022,0,1.312026,-0.333361,-0.5, -0.960211,0.01432,-0.27891,1.330638,-0.229927,-0.569694, -0.999919,0.012734,0,1.319309,-0.230602,-0.5, -0.933761,0.111444,-0.340103,1.324378,-0.333193,-0.574544, -0.702754,0.131399,-0.699193,1.361436,-0.332687,-0.636664, -0.739331,0.03305,-0.672531,1.364627,-0.227904,-0.627772, -0.739331,0.03305,-0.672531,1.364627,-0.227904,-0.627772, -0.960211,0.01432,-0.27891,1.330638,-0.229927,-0.569694, -0.933761,0.111444,-0.340103,1.324378,-0.333193,-0.574544, -0.933801,-0.132296,0.332437,1.325262,-0.127256,-0.432337, -0.714149,-0.110296,0.691249,1.356947,-0.122198,-0.375951, -0.739331,0.03305,0.672531,1.364627,-0.227904,-0.372228, -0.739331,0.03305,0.672531,1.364627,-0.227904,-0.372228, -0.960211,0.01432,0.27891,1.330638,-0.229927,-0.430306, -0.933801,-0.132296,0.332437,1.325262,-0.127256,-0.432337, -0.739331,0.03305,0.672531,1.364627,-0.227904,-0.372228, -0.702754,0.131399,0.699193,1.361436,-0.332687,-0.363336, -0.933761,0.111444,0.340103,1.324378,-0.333193,-0.425456, -0.933761,0.111444,0.340103,1.324378,-0.333193,-0.425456, -0.960211,0.01432,0.27891,1.330638,-0.229927,-0.430306, -0.739331,0.03305,0.672531,1.364627,-0.227904,-0.372228, -0.995379,0.096022,0,1.312026,-0.333361,-0.5, -0.999919,0.012734,0,1.319309,-0.230602,-0.5, -0.960211,0.01432,0.27891,1.330638,-0.229927,-0.430306, -0.995379,0.096022,0,1.312026,-0.333361,-0.5, -0.960211,0.01432,0.27891,1.330638,-0.229927,-0.430306, -0.933761,0.111444,0.340103,1.324378,-0.333193,-0.425456, -0.994338,-0.106266,0,1.314701,-0.128942,-0.5, -0.933801,-0.132296,0.332437,1.325262,-0.127256,-0.432337, -0.960211,0.01432,0.27891,1.330638,-0.229927,-0.430306, -0.994338,-0.106266,0,1.314701,-0.128942,-0.5, -0.960211,0.01432,0.27891,1.330638,-0.229927,-0.430306, -0.999919,0.012734,0,1.319309,-0.230602,-0.5, -0.693871,0.192788,0.693812,1.351552,-0.429344,-0.351552, -0.68695,0.237061,0.686951,1.339151,-0.510672,-0.339151, -0.914159,0.225597,0.336777,1.295283,-0.510672,-0.412264, -0.914159,0.225597,0.336777,1.295283,-0.510672,-0.412264, -0.923459,0.178536,0.339629,1.311066,-0.429344,-0.419028, -0.693871,0.192788,0.693812,1.351552,-0.429344,-0.351552, -0.976322,0.216322,0,1.28066,-0.510672,-0.5, -0.985978,0.166878,0,1.29757,-0.429344,-0.5, -0.923459,0.178536,0.339629,1.311066,-0.429344,-0.419028, -0.976322,0.216322,0,1.28066,-0.510672,-0.5, -0.923459,0.178536,0.339629,1.311066,-0.429344,-0.419028, -0.914159,0.225597,0.336777,1.295283,-0.510672,-0.412264, -0.985978,0.166878,0,1.29757,-0.429344,-0.5, -0.995379,0.096022,0,1.312026,-0.333361,-0.5, -0.933761,0.111444,0.340103,1.324378,-0.333193,-0.425456, -0.933761,0.111444,0.340103,1.324378,-0.333193,-0.425456, -0.923459,0.178536,0.339629,1.311066,-0.429344,-0.419028, -0.985978,0.166878,0,1.29757,-0.429344,-0.5, -0.702754,0.131399,0.699193,1.361436,-0.332687,-0.363336, -0.693871,0.192788,0.693812,1.351552,-0.429344,-0.351552, -0.923459,0.178536,0.339629,1.311066,-0.429344,-0.419028, -0.702754,0.131399,0.699193,1.361436,-0.332687,-0.363336, -0.923459,0.178536,0.339629,1.311066,-0.429344,-0.419028, -0.933761,0.111444,0.340103,1.324378,-0.333193,-0.425456, -0.336776,0.225598,0.914159,1.412264,-0.510672,-0.295283, -0.68695,0.237061,0.686951,1.339151,-0.510672,-0.339151, -0.693871,0.192788,0.693812,1.351552,-0.429344,-0.351552, -0.693871,0.192788,0.693812,1.351552,-0.429344,-0.351552, -0.340683,0.181594,0.922474,1.419028,-0.429344,-0.311066, -0.336776,0.225598,0.914159,1.412264,-0.510672,-0.295283, -0.702754,0.131399,0.699193,1.361436,-0.332687,-0.363336, -0.347569,0.124206,0.929392,1.423198,-0.331844,-0.326064, -0.340683,0.181594,0.922474,1.419028,-0.429344,-0.311066, -0.702754,0.131399,0.699193,1.361436,-0.332687,-0.363336, -0.340683,0.181594,0.922474,1.419028,-0.429344,-0.311066, -0.693871,0.192788,0.693812,1.351552,-0.429344,-0.351552, -0.347569,0.124206,0.929392,1.423198,-0.331844,-0.326064, -0.003469,0.126882,0.991912,1.497312,-0.330832,-0.31364, -0.000776,0.175432,0.984491,1.5,-0.429344,-0.29757, -0.000776,0.175432,0.984491,1.5,-0.429344,-0.29757, -0.340683,0.181594,0.922474,1.419028,-0.429344,-0.311066, -0.347569,0.124206,0.929392,1.423198,-0.331844,-0.326064, 0,0.216323,0.976322,1.5,-0.510672,-0.28066, -0.336776,0.225598,0.914159,1.412264,-0.510672,-0.295283, -0.340683,0.181594,0.922474,1.419028,-0.429344,-0.311066, 0,0.216323,0.976322,1.5,-0.510672,-0.28066, -0.340683,0.181594,0.922474,1.419028,-0.429344,-0.311066, -0.000776,0.175432,0.984491,1.5,-0.429344,-0.29757, -0.714149,-0.110296,0.691249,1.356947,-0.122198,-0.375951, -0.355153,-0.061801,0.932763,1.409755,-0.113768,-0.342119, -0.356256,0.046266,0.933242,1.421273,-0.224532,-0.337381, -0.714149,-0.110296,0.691249,1.356947,-0.122198,-0.375951, -0.356256,0.046266,0.933242,1.421273,-0.224532,-0.337381, -0.739331,0.03305,0.672531,1.364627,-0.227904,-0.372228, -0.355153,-0.061801,0.932763,1.409755,-0.113768,-0.342119, -0.032665,-0.015822,0.999341,1.473124,-0.103652,-0.330842, -0.005359,0.065692,0.997826,1.489249,-0.220486,-0.325766, -0.005359,0.065692,0.997826,1.489249,-0.220486,-0.325766, -0.356256,0.046266,0.933242,1.421273,-0.224532,-0.337381, -0.355153,-0.061801,0.932763,1.409755,-0.113768,-0.342119, -0.003469,0.126882,0.991912,1.497312,-0.330832,-0.31364, -0.347569,0.124206,0.929392,1.423198,-0.331844,-0.326064, -0.356256,0.046266,0.933242,1.421273,-0.224532,-0.337381, -0.003469,0.126882,0.991912,1.497312,-0.330832,-0.31364, -0.356256,0.046266,0.933242,1.421273,-0.224532,-0.337381, -0.005359,0.065692,0.997826,1.489249,-0.220486,-0.325766, -0.347569,0.124206,0.929392,1.423198,-0.331844,-0.326064, -0.702754,0.131399,0.699193,1.361436,-0.332687,-0.363336, -0.739331,0.03305,0.672531,1.364627,-0.227904,-0.372228, -0.739331,0.03305,0.672531,1.364627,-0.227904,-0.372228, -0.356256,0.046266,0.933242,1.421273,-0.224532,-0.337381, -0.347569,0.124206,0.929392,1.423198,-0.331844,-0.326064, 0.68395,0.1429,0.715397,1.589301,-0.085107,-0.375951, 0.699329,0.164944,0.695509,1.613873,-0.213068,-0.372228, 0.345572,0.118142,0.930926,1.557226,-0.21644,-0.337381, 0.68395,0.1429,0.715397,1.589301,-0.085107,-0.375951, 0.345572,0.118142,0.930926,1.557226,-0.21644,-0.337381, 0.294772,0.058287,0.953788,1.536493,-0.093537,-0.342119, 0.699329,0.164944,0.695509,1.613873,-0.213068,-0.372228, 0.695529,0.18142,0.695217,1.633189,-0.328978,-0.363336, 0.341595,0.155693,0.926862,1.571427,-0.329821,-0.326064, 0.341595,0.155693,0.926862,1.571427,-0.329821,-0.326064, 0.345572,0.118142,0.930926,1.557226,-0.21644,-0.337381, 0.699329,0.164944,0.695509,1.613873,-0.213068,-0.372228, -0.003469,0.126882,0.991912,1.497312,-0.330832,-0.31364, -0.005359,0.065692,0.997826,1.489249,-0.220486,-0.325766, 0.345572,0.118142,0.930926,1.557226,-0.21644,-0.337381, -0.003469,0.126882,0.991912,1.497312,-0.330832,-0.31364, 0.345572,0.118142,0.930926,1.557226,-0.21644,-0.337381, 0.341595,0.155693,0.926862,1.571427,-0.329821,-0.326064, -0.005359,0.065692,0.997826,1.489249,-0.220486,-0.325766, -0.032665,-0.015822,0.999341,1.473124,-0.103652,-0.330842, 0.294772,0.058287,0.953788,1.536493,-0.093537,-0.342119, 0.294772,0.058287,0.953788,1.536493,-0.093537,-0.342119, 0.345572,0.118142,0.930926,1.557226,-0.21644,-0.337381, -0.005359,0.065692,0.997826,1.489249,-0.220486,-0.325766, 0.692333,0.202929,0.692456,1.648448,-0.429344,-0.351552, 0.68695,0.237061,0.686951,1.660849,-0.510672,-0.339151, 0.336776,0.225598,0.914159,1.587736,-0.510672,-0.295283, 0.336776,0.225598,0.914159,1.587736,-0.510672,-0.295283, 0.339336,0.190036,0.921269,1.580972,-0.429344,-0.311066, 0.692333,0.202929,0.692456,1.648448,-0.429344,-0.351552, 0,0.216323,0.976322,1.5,-0.510672,-0.28066, -0.000776,0.175432,0.984491,1.5,-0.429344,-0.29757, 0.339336,0.190036,0.921269,1.580972,-0.429344,-0.311066, 0,0.216323,0.976322,1.5,-0.510672,-0.28066, 0.339336,0.190036,0.921269,1.580972,-0.429344,-0.311066, 0.336776,0.225598,0.914159,1.587736,-0.510672,-0.295283, -0.000776,0.175432,0.984491,1.5,-0.429344,-0.29757, -0.003469,0.126882,0.991912,1.497312,-0.330832,-0.31364, 0.341595,0.155693,0.926862,1.571427,-0.329821,-0.326064, 0.341595,0.155693,0.926862,1.571427,-0.329821,-0.326064, 0.339336,0.190036,0.921269,1.580972,-0.429344,-0.311066, -0.000776,0.175432,0.984491,1.5,-0.429344,-0.29757, 0.695529,0.18142,0.695217,1.633189,-0.328978,-0.363336, 0.692333,0.202929,0.692456,1.648448,-0.429344,-0.351552, 0.339336,0.190036,0.921269,1.580972,-0.429344,-0.311066, 0.695529,0.18142,0.695217,1.633189,-0.328978,-0.363336, 0.339336,0.190036,0.921269,1.580972,-0.429344,-0.311066, 0.341595,0.155693,0.926862,1.571427,-0.329821,-0.326064, 0.914159,0.225597,0.336777,1.704717,-0.510672,-0.412264, 0.68695,0.237061,0.686951,1.660849,-0.510672,-0.339151, 0.692333,0.202929,0.692456,1.648448,-0.429344,-0.351552, 0.692333,0.202929,0.692456,1.648448,-0.429344,-0.351552, 0.919751,0.19868,0.338503,1.688934,-0.429344,-0.419028, 0.914159,0.225597,0.336777,1.704717,-0.510672,-0.412264, 0.695529,0.18142,0.695217,1.633189,-0.328978,-0.363336, 0.921783,0.189963,0.337979,1.670246,-0.328472,-0.425456, 0.919751,0.19868,0.338503,1.688934,-0.429344,-0.419028, 0.695529,0.18142,0.695217,1.633189,-0.328978,-0.363336, 0.919751,0.19868,0.338503,1.688934,-0.429344,-0.419028, 0.692333,0.202929,0.692456,1.648448,-0.429344,-0.351552, 0.921783,0.189963,0.337979,1.670246,-0.328472,-0.425456, 0.981065,0.19368,0,1.682599,-0.328303,-0.5, 0.980577,0.196136,0,1.70243,-0.429344,-0.5, 0.980577,0.196136,0,1.70243,-0.429344,-0.5, 0.919751,0.19868,0.338503,1.688934,-0.429344,-0.419028, 0.921783,0.189963,0.337979,1.670246,-0.328472,-0.425456, 0.976322,0.216322,0,1.71934,-0.510672,-0.5, 0.914159,0.225597,0.336777,1.704717,-0.510672,-0.412264, 0.919751,0.19868,0.338503,1.688934,-0.429344,-0.419028, 0.976322,0.216322,0,1.71934,-0.510672,-0.5, 0.919751,0.19868,0.338503,1.688934,-0.429344,-0.419028, 0.980577,0.196136,0,1.70243,-0.429344,-0.5, 0.68395,0.1429,0.715397,1.589301,-0.085107,-0.375951, 0.923419,0.19798,0.328787,1.620986,-0.080049,-0.432337, 0.922767,0.190694,0.334869,1.647861,-0.211045,-0.430306, 0.68395,0.1429,0.715397,1.589301,-0.085107,-0.375951, 0.922767,0.190694,0.334869,1.647861,-0.211045,-0.430306, 0.699329,0.164944,0.695509,1.613873,-0.213068,-0.372228, 0.923419,0.19798,0.328787,1.620986,-0.080049,-0.432337, 0.976556,0.215262,0,1.631547,-0.078363,-0.5, 0.979589,0.201011,0,1.65919,-0.21037,-0.5, 0.979589,0.201011,0,1.65919,-0.21037,-0.5, 0.922767,0.190694,0.334869,1.647861,-0.211045,-0.430306, 0.923419,0.19798,0.328787,1.620986,-0.080049,-0.432337, 0.981065,0.19368,0,1.682599,-0.328303,-0.5, 0.921783,0.189963,0.337979,1.670246,-0.328472,-0.425456, 0.922767,0.190694,0.334869,1.647861,-0.211045,-0.430306, 0.981065,0.19368,0,1.682599,-0.328303,-0.5, 0.922767,0.190694,0.334869,1.647861,-0.211045,-0.430306, 0.979589,0.201011,0,1.65919,-0.21037,-0.5, 0.921783,0.189963,0.337979,1.670246,-0.328472,-0.425456, 0.695529,0.18142,0.695217,1.633189,-0.328978,-0.363336, 0.699329,0.164944,0.695509,1.613873,-0.213068,-0.372228, 0.699329,0.164944,0.695509,1.613873,-0.213068,-0.372228, 0.922767,0.190694,0.334869,1.647861,-0.211045,-0.430306, 0.921783,0.189963,0.337979,1.670246,-0.328472,-0.425456, 0.68395,0.1429,-0.715397,1.589301,-0.085107,-0.624049, 0.699329,0.164944,-0.695509,1.613873,-0.213068,-0.627772, 0.922767,0.190694,-0.334869,1.647861,-0.211045,-0.569694, 0.68395,0.1429,-0.715397,1.589301,-0.085107,-0.624049, 0.922767,0.190694,-0.334869,1.647861,-0.211045,-0.569694, 0.923419,0.19798,-0.328787,1.620986,-0.080049,-0.567663, 0.699329,0.164944,-0.695509,1.613873,-0.213068,-0.627772, 0.695529,0.18142,-0.695217,1.633189,-0.328978,-0.636664, 0.921783,0.189963,-0.337979,1.670246,-0.328472,-0.574544, 0.921783,0.189963,-0.337979,1.670246,-0.328472,-0.574544, 0.922767,0.190694,-0.334869,1.647861,-0.211045,-0.569694, 0.699329,0.164944,-0.695509,1.613873,-0.213068,-0.627772, 0.981065,0.19368,0,1.682599,-0.328303,-0.5, 0.979589,0.201011,0,1.65919,-0.21037,-0.5, 0.922767,0.190694,-0.334869,1.647861,-0.211045,-0.569694, 0.981065,0.19368,0,1.682599,-0.328303,-0.5, 0.922767,0.190694,-0.334869,1.647861,-0.211045,-0.569694, 0.921783,0.189963,-0.337979,1.670246,-0.328472,-0.574544, 0.979589,0.201011,0,1.65919,-0.21037,-0.5, 0.976556,0.215262,0,1.631547,-0.078363,-0.5, 0.923419,0.19798,-0.328787,1.620986,-0.080049,-0.567663, 0.923419,0.19798,-0.328787,1.620986,-0.080049,-0.567663, 0.922767,0.190694,-0.334869,1.647861,-0.211045,-0.569694, 0.979589,0.201011,0,1.65919,-0.21037,-0.5, 0.692333,0.202928,-0.692456,1.648448,-0.429344,-0.648448, 0.686951,0.237061,-0.686951,1.660849,-0.510672,-0.660849, 0.914159,0.225597,-0.336777,1.704717,-0.510672,-0.587736, 0.914159,0.225597,-0.336777,1.704717,-0.510672,-0.587736, 0.919751,0.19868,-0.338503,1.688934,-0.429344,-0.580972, 0.692333,0.202928,-0.692456,1.648448,-0.429344,-0.648448, 0.976322,0.216322,0,1.71934,-0.510672,-0.5, 0.980577,0.196136,0,1.70243,-0.429344,-0.5, 0.919751,0.19868,-0.338503,1.688934,-0.429344,-0.580972, 0.976322,0.216322,0,1.71934,-0.510672,-0.5, 0.919751,0.19868,-0.338503,1.688934,-0.429344,-0.580972, 0.914159,0.225597,-0.336777,1.704717,-0.510672,-0.587736, 0.980577,0.196136,0,1.70243,-0.429344,-0.5, 0.981065,0.19368,0,1.682599,-0.328303,-0.5, 0.921783,0.189963,-0.337979,1.670246,-0.328472,-0.574544, 0.921783,0.189963,-0.337979,1.670246,-0.328472,-0.574544, 0.919751,0.19868,-0.338503,1.688934,-0.429344,-0.580972, 0.980577,0.196136,0,1.70243,-0.429344,-0.5, 0.695529,0.18142,-0.695217,1.633189,-0.328978,-0.636664, 0.692333,0.202928,-0.692456,1.648448,-0.429344,-0.648448, 0.919751,0.19868,-0.338503,1.688934,-0.429344,-0.580972, 0.695529,0.18142,-0.695217,1.633189,-0.328978,-0.636664, 0.919751,0.19868,-0.338503,1.688934,-0.429344,-0.580972, 0.921783,0.189963,-0.337979,1.670246,-0.328472,-0.574544, 0.68695,0.237061,0.686951,1.660849,-0.510672,-0.339151, 0.914159,0.225597,0.336777,1.704717,-0.510672,-0.412264, 0.925394,0.167122,0.340171,1.718387,-0.569469,-0.406406, 0.68695,0.237061,0.686951,1.660849,-0.510672,-0.339151, 0.925394,0.167122,0.340171,1.718387,-0.569469,-0.406406, 0.700149,0.139938,0.700149,1.67159,-0.569469,-0.32841, 0.914159,0.225597,0.336777,1.704717,-0.510672,-0.412264, 0.976322,0.216322,0,1.71934,-0.510672,-0.5, 0.981432,0.191813,0,1.733986,-0.569469,-0.5, 0.981432,0.191813,0,1.733986,-0.569469,-0.5, 0.925394,0.167122,0.340171,1.718387,-0.569469,-0.406406, 0.914159,0.225597,0.336777,1.704717,-0.510672,-0.412264, 0.968451,-0.249205,0,1.737621,-0.609501,-0.5, 0.878536,-0.271725,0.392861,1.721597,-0.609197,-0.405226, 0.925394,0.167122,0.340171,1.718387,-0.569469,-0.406406, 0.968451,-0.249205,0,1.737621,-0.609501,-0.5, 0.925394,0.167122,0.340171,1.718387,-0.569469,-0.406406, 0.981432,0.191813,0,1.733986,-0.569469,-0.5, 0.878536,-0.271725,0.392861,1.721597,-0.609197,-0.405226, 0.676292,-0.291987,0.676293,1.673866,-0.608893,-0.326134, 0.700149,0.139938,0.700149,1.67159,-0.569469,-0.32841, 0.700149,0.139938,0.700149,1.67159,-0.569469,-0.32841, 0.925394,0.167122,0.340171,1.718387,-0.569469,-0.406406, 0.878536,-0.271725,0.392861,1.721597,-0.609197,-0.405226, 0.686951,0.237061,-0.686951,1.660849,-0.510672,-0.660849, 0.700149,0.139938,-0.700149,1.67159,-0.569469,-0.67159, 0.925394,0.167122,-0.340171,1.718387,-0.569469,-0.593594, 0.686951,0.237061,-0.686951,1.660849,-0.510672,-0.660849, 0.925394,0.167122,-0.340171,1.718387,-0.569469,-0.593594, 0.914159,0.225597,-0.336777,1.704717,-0.510672,-0.587736, 0.700149,0.139938,-0.700149,1.67159,-0.569469,-0.67159, 0.676292,-0.291988,-0.676293,1.673866,-0.608893,-0.673866, 0.878536,-0.271725,-0.392861,1.721597,-0.609197,-0.594774, 0.878536,-0.271725,-0.392861,1.721597,-0.609197,-0.594774, 0.925394,0.167122,-0.340171,1.718387,-0.569469,-0.593594, 0.700149,0.139938,-0.700149,1.67159,-0.569469,-0.67159, 0.968451,-0.249205,0,1.737621,-0.609501,-0.5, 0.981432,0.191813,0,1.733986,-0.569469,-0.5, 0.925394,0.167122,-0.340171,1.718387,-0.569469,-0.593594, 0.968451,-0.249205,0,1.737621,-0.609501,-0.5, 0.925394,0.167122,-0.340171,1.718387,-0.569469,-0.593594, 0.878536,-0.271725,-0.392861,1.721597,-0.609197,-0.594774, 0.981432,0.191813,0,1.733986,-0.569469,-0.5, 0.976322,0.216322,0,1.71934,-0.510672,-0.5, 0.914159,0.225597,-0.336777,1.704717,-0.510672,-0.587736, 0.914159,0.225597,-0.336777,1.704717,-0.510672,-0.587736, 0.925394,0.167122,-0.340171,1.718387,-0.569469,-0.593594, 0.981432,0.191813,0,1.733986,-0.569469,-0.5, 0.199329,-0.959446,-0.199329,1.638667,-0.642463,-0.638667, 0.188349,-0.976969,-0.100277,1.664625,-0.646948,-0.5825, 0.529853,-0.826565,-0.189859,1.706,-0.633319,-0.5875, 0.199329,-0.959446,-0.199329,1.638667,-0.642463,-0.638667, 0.529853,-0.826565,-0.189859,1.706,-0.633319,-0.5875, 0.467068,-0.750796,-0.467068,1.660875,-0.632104,-0.660875, 0.244558,-0.969635,0,1.677562,-0.649161,-0.5, 0.611773,-0.791034,0,1.7215,-0.634535,-0.5, 0.529853,-0.826565,-0.189859,1.706,-0.633319,-0.5875, 0.244558,-0.969635,0,1.677562,-0.649161,-0.5, 0.529853,-0.826565,-0.189859,1.706,-0.633319,-0.5875, 0.188349,-0.976969,-0.100277,1.664625,-0.646948,-0.5825, 0.968451,-0.249205,0,1.737621,-0.609501,-0.5, 0.878536,-0.271725,-0.392861,1.721597,-0.609197,-0.594774, 0.529853,-0.826565,-0.189859,1.706,-0.633319,-0.5875, 0.968451,-0.249205,0,1.737621,-0.609501,-0.5, 0.529853,-0.826565,-0.189859,1.706,-0.633319,-0.5875, 0.611773,-0.791034,0,1.7215,-0.634535,-0.5, 0.878536,-0.271725,-0.392861,1.721597,-0.609197,-0.594774, 0.676292,-0.291988,-0.676293,1.673866,-0.608893,-0.673866, 0.467068,-0.750796,-0.467068,1.660875,-0.632104,-0.660875, 0.467068,-0.750796,-0.467068,1.660875,-0.632104,-0.660875, 0.529853,-0.826565,-0.189859,1.706,-0.633319,-0.5875, 0.878536,-0.271725,-0.392861,1.721597,-0.609197,-0.594774, 0.199329,-0.959446,0.199329,1.638667,-0.642463,-0.361333, 0.467068,-0.750796,0.467068,1.660875,-0.632104,-0.339125, 0.529853,-0.826565,0.189859,1.706,-0.633319,-0.4125, 0.199329,-0.959446,0.199329,1.638667,-0.642463,-0.361333, 0.529853,-0.826565,0.189859,1.706,-0.633319,-0.4125, 0.188349,-0.976969,0.100277,1.664625,-0.646948,-0.4175, 0.467068,-0.750796,0.467068,1.660875,-0.632104,-0.339125, 0.676292,-0.291987,0.676293,1.673866,-0.608893,-0.326134, 0.878536,-0.271725,0.392861,1.721597,-0.609197,-0.405226, 0.878536,-0.271725,0.392861,1.721597,-0.609197,-0.405226, 0.529853,-0.826565,0.189859,1.706,-0.633319,-0.4125, 0.467068,-0.750796,0.467068,1.660875,-0.632104,-0.339125, 0.968451,-0.249205,0,1.737621,-0.609501,-0.5, 0.611773,-0.791034,0,1.7215,-0.634535,-0.5, 0.529853,-0.826565,0.189859,1.706,-0.633319,-0.4125, 0.968451,-0.249205,0,1.737621,-0.609501,-0.5, 0.529853,-0.826565,0.189859,1.706,-0.633319,-0.4125, 0.878536,-0.271725,0.392861,1.721597,-0.609197,-0.405226, 0.244558,-0.969635,0,1.677562,-0.649161,-0.5, 0.188349,-0.976969,0.100277,1.664625,-0.646948,-0.4175, 0.529853,-0.826565,0.189859,1.706,-0.633319,-0.4125, 0.244558,-0.969635,0,1.677562,-0.649161,-0.5, 0.529853,-0.826565,0.189859,1.706,-0.633319,-0.4125, 0.611773,-0.791034,0,1.7215,-0.634535,-0.5, 0.686951,0.237061,-0.686951,1.660849,-0.510672,-0.660849, 0.336776,0.225597,-0.91416,1.587736,-0.510672,-0.704717, 0.340171,0.167122,-0.925394,1.593594,-0.569469,-0.718387, 0.686951,0.237061,-0.686951,1.660849,-0.510672,-0.660849, 0.340171,0.167122,-0.925394,1.593594,-0.569469,-0.718387, 0.700149,0.139938,-0.700149,1.67159,-0.569469,-0.67159, 0.336776,0.225597,-0.91416,1.587736,-0.510672,-0.704717, 0,0.216323,-0.976322,1.5,-0.510672,-0.71934, 0,0.191813,-0.981432,1.5,-0.569469,-0.733986, 0,0.191813,-0.981432,1.5,-0.569469,-0.733986, 0.340171,0.167122,-0.925394,1.593594,-0.569469,-0.718387, 0.336776,0.225597,-0.91416,1.587736,-0.510672,-0.704717, 0,-0.249205,-0.968451,1.5,-0.609501,-0.737621, 0.392861,-0.271725,-0.878536,1.594774,-0.609197,-0.721597, 0.340171,0.167122,-0.925394,1.593594,-0.569469,-0.718387, 0,-0.249205,-0.968451,1.5,-0.609501,-0.737621, 0.340171,0.167122,-0.925394,1.593594,-0.569469,-0.718387, 0,0.191813,-0.981432,1.5,-0.569469,-0.733986, 0.392861,-0.271725,-0.878536,1.594774,-0.609197,-0.721597, 0.676292,-0.291988,-0.676293,1.673866,-0.608893,-0.673866, 0.700149,0.139938,-0.700149,1.67159,-0.569469,-0.67159, 0.700149,0.139938,-0.700149,1.67159,-0.569469,-0.67159, 0.340171,0.167122,-0.925394,1.593594,-0.569469,-0.718387, 0.392861,-0.271725,-0.878536,1.594774,-0.609197,-0.721597, -0.686951,0.237061,-0.686951,1.339151,-0.510672,-0.660849, -0.700149,0.139938,-0.700149,1.32841,-0.569469,-0.67159, -0.340171,0.167122,-0.925394,1.406406,-0.569469,-0.718387, -0.686951,0.237061,-0.686951,1.339151,-0.510672,-0.660849, -0.340171,0.167122,-0.925394,1.406406,-0.569469,-0.718387, -0.336776,0.225597,-0.91416,1.412264,-0.510672,-0.704717, -0.700149,0.139938,-0.700149,1.32841,-0.569469,-0.67159, -0.676292,-0.291988,-0.676293,1.326134,-0.608893,-0.673866, -0.392861,-0.271725,-0.878536,1.405226,-0.609197,-0.721597, -0.392861,-0.271725,-0.878536,1.405226,-0.609197,-0.721597, -0.340171,0.167122,-0.925394,1.406406,-0.569469,-0.718387, -0.700149,0.139938,-0.700149,1.32841,-0.569469,-0.67159, 0,-0.249205,-0.968451,1.5,-0.609501,-0.737621, 0,0.191813,-0.981432,1.5,-0.569469,-0.733986, -0.340171,0.167122,-0.925394,1.406406,-0.569469,-0.718387, 0,-0.249205,-0.968451,1.5,-0.609501,-0.737621, -0.340171,0.167122,-0.925394,1.406406,-0.569469,-0.718387, -0.392861,-0.271725,-0.878536,1.405226,-0.609197,-0.721597, 0,0.191813,-0.981432,1.5,-0.569469,-0.733986, 0,0.216323,-0.976322,1.5,-0.510672,-0.71934, -0.336776,0.225597,-0.91416,1.412264,-0.510672,-0.704717, -0.336776,0.225597,-0.91416,1.412264,-0.510672,-0.704717, -0.340171,0.167122,-0.925394,1.406406,-0.569469,-0.718387, 0,0.191813,-0.981432,1.5,-0.569469,-0.733986, -0.199329,-0.959446,-0.199329,1.361333,-0.642463,-0.638667, -0.100277,-0.976969,-0.18835,1.4175,-0.646948,-0.664625, -0.189859,-0.826565,-0.529853,1.4125,-0.633319,-0.706, -0.199329,-0.959446,-0.199329,1.361333,-0.642463,-0.638667, -0.189859,-0.826565,-0.529853,1.4125,-0.633319,-0.706, -0.467068,-0.750796,-0.467068,1.339125,-0.632104,-0.660875, 0,-0.969635,-0.244558,1.5,-0.649161,-0.677562, 0,-0.791034,-0.611773,1.5,-0.634535,-0.7215, -0.189859,-0.826565,-0.529853,1.4125,-0.633319,-0.706, 0,-0.969635,-0.244558,1.5,-0.649161,-0.677562, -0.189859,-0.826565,-0.529853,1.4125,-0.633319,-0.706, -0.100277,-0.976969,-0.18835,1.4175,-0.646948,-0.664625, 0,-0.249205,-0.968451,1.5,-0.609501,-0.737621, -0.392861,-0.271725,-0.878536,1.405226,-0.609197,-0.721597, -0.189859,-0.826565,-0.529853,1.4125,-0.633319,-0.706, 0,-0.249205,-0.968451,1.5,-0.609501,-0.737621, -0.189859,-0.826565,-0.529853,1.4125,-0.633319,-0.706, 0,-0.791034,-0.611773,1.5,-0.634535,-0.7215, -0.392861,-0.271725,-0.878536,1.405226,-0.609197,-0.721597, -0.676292,-0.291988,-0.676293,1.326134,-0.608893,-0.673866, -0.467068,-0.750796,-0.467068,1.339125,-0.632104,-0.660875, -0.467068,-0.750796,-0.467068,1.339125,-0.632104,-0.660875, -0.189859,-0.826565,-0.529853,1.4125,-0.633319,-0.706, -0.392861,-0.271725,-0.878536,1.405226,-0.609197,-0.721597, 0.199329,-0.959446,-0.199329,1.638667,-0.642463,-0.638667, 0.467068,-0.750796,-0.467068,1.660875,-0.632104,-0.660875, 0.189859,-0.826565,-0.529853,1.5875,-0.633319,-0.706, 0.199329,-0.959446,-0.199329,1.638667,-0.642463,-0.638667, 0.189859,-0.826565,-0.529853,1.5875,-0.633319,-0.706, 0.100277,-0.976969,-0.18835,1.5825,-0.646948,-0.664625, 0.467068,-0.750796,-0.467068,1.660875,-0.632104,-0.660875, 0.676292,-0.291988,-0.676293,1.673866,-0.608893,-0.673866, 0.392861,-0.271725,-0.878536,1.594774,-0.609197,-0.721597, 0.392861,-0.271725,-0.878536,1.594774,-0.609197,-0.721597, 0.189859,-0.826565,-0.529853,1.5875,-0.633319,-0.706, 0.467068,-0.750796,-0.467068,1.660875,-0.632104,-0.660875, 0,-0.249205,-0.968451,1.5,-0.609501,-0.737621, 0,-0.791034,-0.611773,1.5,-0.634535,-0.7215, 0.189859,-0.826565,-0.529853,1.5875,-0.633319,-0.706, 0,-0.249205,-0.968451,1.5,-0.609501,-0.737621, 0.189859,-0.826565,-0.529853,1.5875,-0.633319,-0.706, 0.392861,-0.271725,-0.878536,1.594774,-0.609197,-0.721597, 0,-0.969635,-0.244558,1.5,-0.649161,-0.677562, 0.100277,-0.976969,-0.18835,1.5825,-0.646948,-0.664625, 0.189859,-0.826565,-0.529853,1.5875,-0.633319,-0.706, 0,-0.969635,-0.244558,1.5,-0.649161,-0.677562, 0.189859,-0.826565,-0.529853,1.5875,-0.633319,-0.706, 0,-0.791034,-0.611773,1.5,-0.634535,-0.7215, -0.686951,0.237061,-0.686951,1.339151,-0.510672,-0.660849, -0.914159,0.225597,-0.336777,1.295283,-0.510672,-0.587736, -0.925394,0.167122,-0.340171,1.281613,-0.569469,-0.593594, -0.686951,0.237061,-0.686951,1.339151,-0.510672,-0.660849, -0.925394,0.167122,-0.340171,1.281613,-0.569469,-0.593594, -0.700149,0.139938,-0.700149,1.32841,-0.569469,-0.67159, -0.914159,0.225597,-0.336777,1.295283,-0.510672,-0.587736, -0.976322,0.216322,0,1.28066,-0.510672,-0.5, -0.981432,0.191813,0,1.266014,-0.569469,-0.5, -0.981432,0.191813,0,1.266014,-0.569469,-0.5, -0.925394,0.167122,-0.340171,1.281613,-0.569469,-0.593594, -0.914159,0.225597,-0.336777,1.295283,-0.510672,-0.587736, -0.968451,-0.249205,0,1.262379,-0.609501,-0.5, -0.878536,-0.271725,-0.392861,1.278403,-0.609197,-0.594774, -0.925394,0.167122,-0.340171,1.281613,-0.569469,-0.593594, -0.968451,-0.249205,0,1.262379,-0.609501,-0.5, -0.925394,0.167122,-0.340171,1.281613,-0.569469,-0.593594, -0.981432,0.191813,0,1.266014,-0.569469,-0.5, -0.878536,-0.271725,-0.392861,1.278403,-0.609197,-0.594774, -0.676292,-0.291988,-0.676293,1.326134,-0.608893,-0.673866, -0.700149,0.139938,-0.700149,1.32841,-0.569469,-0.67159, -0.700149,0.139938,-0.700149,1.32841,-0.569469,-0.67159, -0.925394,0.167122,-0.340171,1.281613,-0.569469,-0.593594, -0.878536,-0.271725,-0.392861,1.278403,-0.609197,-0.594774, -0.68695,0.237061,0.686951,1.339151,-0.510672,-0.339151, -0.700149,0.139938,0.700149,1.32841,-0.569469,-0.32841, -0.925394,0.167122,0.340171,1.281613,-0.569469,-0.406406, -0.68695,0.237061,0.686951,1.339151,-0.510672,-0.339151, -0.925394,0.167122,0.340171,1.281613,-0.569469,-0.406406, -0.914159,0.225597,0.336777,1.295283,-0.510672,-0.412264, -0.700149,0.139938,0.700149,1.32841,-0.569469,-0.32841, -0.676292,-0.291987,0.676293,1.326134,-0.608893,-0.326134, -0.878536,-0.271725,0.392861,1.278403,-0.609197,-0.405226, -0.878536,-0.271725,0.392861,1.278403,-0.609197,-0.405226, -0.925394,0.167122,0.340171,1.281613,-0.569469,-0.406406, -0.700149,0.139938,0.700149,1.32841,-0.569469,-0.32841, -0.968451,-0.249205,0,1.262379,-0.609501,-0.5, -0.981432,0.191813,0,1.266014,-0.569469,-0.5, -0.925394,0.167122,0.340171,1.281613,-0.569469,-0.406406, -0.968451,-0.249205,0,1.262379,-0.609501,-0.5, -0.925394,0.167122,0.340171,1.281613,-0.569469,-0.406406, -0.878536,-0.271725,0.392861,1.278403,-0.609197,-0.405226, -0.981432,0.191813,0,1.266014,-0.569469,-0.5, -0.976322,0.216322,0,1.28066,-0.510672,-0.5, -0.914159,0.225597,0.336777,1.295283,-0.510672,-0.412264, -0.914159,0.225597,0.336777,1.295283,-0.510672,-0.412264, -0.925394,0.167122,0.340171,1.281613,-0.569469,-0.406406, -0.981432,0.191813,0,1.266014,-0.569469,-0.5, -0.199329,-0.959446,0.199329,1.361333,-0.642463,-0.361333, -0.188349,-0.976969,0.100277,1.335375,-0.646948,-0.4175, -0.529853,-0.826565,0.189859,1.294,-0.633319,-0.4125, -0.199329,-0.959446,0.199329,1.361333,-0.642463,-0.361333, -0.529853,-0.826565,0.189859,1.294,-0.633319,-0.4125, -0.467068,-0.750796,0.467068,1.339125,-0.632104,-0.339125, -0.244558,-0.969635,0,1.322438,-0.649161,-0.5, -0.611773,-0.791034,0,1.2785,-0.634535,-0.5, -0.529853,-0.826565,0.189859,1.294,-0.633319,-0.4125, -0.244558,-0.969635,0,1.322438,-0.649161,-0.5, -0.529853,-0.826565,0.189859,1.294,-0.633319,-0.4125, -0.188349,-0.976969,0.100277,1.335375,-0.646948,-0.4175, -0.968451,-0.249205,0,1.262379,-0.609501,-0.5, -0.878536,-0.271725,0.392861,1.278403,-0.609197,-0.405226, -0.529853,-0.826565,0.189859,1.294,-0.633319,-0.4125, -0.968451,-0.249205,0,1.262379,-0.609501,-0.5, -0.529853,-0.826565,0.189859,1.294,-0.633319,-0.4125, -0.611773,-0.791034,0,1.2785,-0.634535,-0.5, -0.878536,-0.271725,0.392861,1.278403,-0.609197,-0.405226, -0.676292,-0.291987,0.676293,1.326134,-0.608893,-0.326134, -0.467068,-0.750796,0.467068,1.339125,-0.632104,-0.339125, -0.467068,-0.750796,0.467068,1.339125,-0.632104,-0.339125, -0.529853,-0.826565,0.189859,1.294,-0.633319,-0.4125, -0.878536,-0.271725,0.392861,1.278403,-0.609197,-0.405226, -0.199329,-0.959446,-0.199329,1.361333,-0.642463,-0.638667, -0.467068,-0.750796,-0.467068,1.339125,-0.632104,-0.660875, -0.529853,-0.826565,-0.189859,1.294,-0.633319,-0.5875, -0.199329,-0.959446,-0.199329,1.361333,-0.642463,-0.638667, -0.529853,-0.826565,-0.189859,1.294,-0.633319,-0.5875, -0.188349,-0.976969,-0.100277,1.335375,-0.646948,-0.5825, -0.467068,-0.750796,-0.467068,1.339125,-0.632104,-0.660875, -0.676292,-0.291988,-0.676293,1.326134,-0.608893,-0.673866, -0.878536,-0.271725,-0.392861,1.278403,-0.609197,-0.594774, -0.878536,-0.271725,-0.392861,1.278403,-0.609197,-0.594774, -0.529853,-0.826565,-0.189859,1.294,-0.633319,-0.5875, -0.467068,-0.750796,-0.467068,1.339125,-0.632104,-0.660875, -0.968451,-0.249205,0,1.262379,-0.609501,-0.5, -0.611773,-0.791034,0,1.2785,-0.634535,-0.5, -0.529853,-0.826565,-0.189859,1.294,-0.633319,-0.5875, -0.968451,-0.249205,0,1.262379,-0.609501,-0.5, -0.529853,-0.826565,-0.189859,1.294,-0.633319,-0.5875, -0.878536,-0.271725,-0.392861,1.278403,-0.609197,-0.594774, -0.244558,-0.969635,0,1.322438,-0.649161,-0.5, -0.188349,-0.976969,-0.100277,1.335375,-0.646948,-0.5825, -0.529853,-0.826565,-0.189859,1.294,-0.633319,-0.5875, -0.244558,-0.969635,0,1.322438,-0.649161,-0.5, -0.529853,-0.826565,-0.189859,1.294,-0.633319,-0.5875, -0.611773,-0.791034,0,1.2785,-0.634535,-0.5, -0.68695,0.237061,0.686951,1.339151,-0.510672,-0.339151, -0.336776,0.225598,0.914159,1.412264,-0.510672,-0.295283, -0.340171,0.167122,0.925394,1.406406,-0.569469,-0.281613, -0.68695,0.237061,0.686951,1.339151,-0.510672,-0.339151, -0.340171,0.167122,0.925394,1.406406,-0.569469,-0.281613, -0.700149,0.139938,0.700149,1.32841,-0.569469,-0.32841, -0.336776,0.225598,0.914159,1.412264,-0.510672,-0.295283, 0,0.216323,0.976322,1.5,-0.510672,-0.28066, 0,0.191813,0.981432,1.5,-0.569469,-0.266014, 0,0.191813,0.981432,1.5,-0.569469,-0.266014, -0.340171,0.167122,0.925394,1.406406,-0.569469,-0.281613, -0.336776,0.225598,0.914159,1.412264,-0.510672,-0.295283, 0,-0.249205,0.968451,1.5,-0.609501,-0.262379, -0.392861,-0.271724,0.878536,1.405226,-0.609197,-0.278403, -0.340171,0.167122,0.925394,1.406406,-0.569469,-0.281613, 0,-0.249205,0.968451,1.5,-0.609501,-0.262379, -0.340171,0.167122,0.925394,1.406406,-0.569469,-0.281613, 0,0.191813,0.981432,1.5,-0.569469,-0.266014, -0.392861,-0.271724,0.878536,1.405226,-0.609197,-0.278403, -0.676292,-0.291987,0.676293,1.326134,-0.608893,-0.326134, -0.700149,0.139938,0.700149,1.32841,-0.569469,-0.32841, -0.700149,0.139938,0.700149,1.32841,-0.569469,-0.32841, -0.340171,0.167122,0.925394,1.406406,-0.569469,-0.281613, -0.392861,-0.271724,0.878536,1.405226,-0.609197,-0.278403, 0.68695,0.237061,0.686951,1.660849,-0.510672,-0.339151, 0.700149,0.139938,0.700149,1.67159,-0.569469,-0.32841, 0.340171,0.167122,0.925394,1.593594,-0.569469,-0.281613, 0.68695,0.237061,0.686951,1.660849,-0.510672,-0.339151, 0.340171,0.167122,0.925394,1.593594,-0.569469,-0.281613, 0.336776,0.225598,0.914159,1.587736,-0.510672,-0.295283, 0.700149,0.139938,0.700149,1.67159,-0.569469,-0.32841, 0.676292,-0.291987,0.676293,1.673866,-0.608893,-0.326134, 0.392861,-0.271724,0.878536,1.594774,-0.609197,-0.278403, 0.392861,-0.271724,0.878536,1.594774,-0.609197,-0.278403, 0.340171,0.167122,0.925394,1.593594,-0.569469,-0.281613, 0.700149,0.139938,0.700149,1.67159,-0.569469,-0.32841, 0,-0.249205,0.968451,1.5,-0.609501,-0.262379, 0,0.191813,0.981432,1.5,-0.569469,-0.266014, 0.340171,0.167122,0.925394,1.593594,-0.569469,-0.281613, 0,-0.249205,0.968451,1.5,-0.609501,-0.262379, 0.340171,0.167122,0.925394,1.593594,-0.569469,-0.281613, 0.392861,-0.271724,0.878536,1.594774,-0.609197,-0.278403, 0,0.191813,0.981432,1.5,-0.569469,-0.266014, 0,0.216323,0.976322,1.5,-0.510672,-0.28066, 0.336776,0.225598,0.914159,1.587736,-0.510672,-0.295283, 0.336776,0.225598,0.914159,1.587736,-0.510672,-0.295283, 0.340171,0.167122,0.925394,1.593594,-0.569469,-0.281613, 0,0.191813,0.981432,1.5,-0.569469,-0.266014, 0.199329,-0.959446,0.199329,1.638667,-0.642463,-0.361333, 0.100277,-0.976969,0.18835,1.5825,-0.646948,-0.335375, 0.189859,-0.826565,0.529853,1.5875,-0.633319,-0.294, 0.199329,-0.959446,0.199329,1.638667,-0.642463,-0.361333, 0.189859,-0.826565,0.529853,1.5875,-0.633319,-0.294, 0.467068,-0.750796,0.467068,1.660875,-0.632104,-0.339125, 0,-0.969635,0.244558,1.5,-0.649161,-0.322437, 0,-0.791034,0.611773,1.5,-0.634535,-0.2785, 0.189859,-0.826565,0.529853,1.5875,-0.633319,-0.294, 0,-0.969635,0.244558,1.5,-0.649161,-0.322437, 0.189859,-0.826565,0.529853,1.5875,-0.633319,-0.294, 0.100277,-0.976969,0.18835,1.5825,-0.646948,-0.335375, 0,-0.249205,0.968451,1.5,-0.609501,-0.262379, 0.392861,-0.271724,0.878536,1.594774,-0.609197,-0.278403, 0.189859,-0.826565,0.529853,1.5875,-0.633319,-0.294, 0,-0.249205,0.968451,1.5,-0.609501,-0.262379, 0.189859,-0.826565,0.529853,1.5875,-0.633319,-0.294, 0,-0.791034,0.611773,1.5,-0.634535,-0.2785, 0.392861,-0.271724,0.878536,1.594774,-0.609197,-0.278403, 0.676292,-0.291987,0.676293,1.673866,-0.608893,-0.326134, 0.467068,-0.750796,0.467068,1.660875,-0.632104,-0.339125, 0.467068,-0.750796,0.467068,1.660875,-0.632104,-0.339125, 0.189859,-0.826565,0.529853,1.5875,-0.633319,-0.294, 0.392861,-0.271724,0.878536,1.594774,-0.609197,-0.278403, -0.199329,-0.959446,0.199329,1.361333,-0.642463,-0.361333, -0.467068,-0.750796,0.467068,1.339125,-0.632104,-0.339125, -0.189859,-0.826565,0.529853,1.4125,-0.633319,-0.294, -0.199329,-0.959446,0.199329,1.361333,-0.642463,-0.361333, -0.189859,-0.826565,0.529853,1.4125,-0.633319,-0.294, -0.100277,-0.976969,0.18835,1.4175,-0.646948,-0.335375, -0.467068,-0.750796,0.467068,1.339125,-0.632104,-0.339125, -0.676292,-0.291987,0.676293,1.326134,-0.608893,-0.326134, -0.392861,-0.271724,0.878536,1.405226,-0.609197,-0.278403, -0.392861,-0.271724,0.878536,1.405226,-0.609197,-0.278403, -0.189859,-0.826565,0.529853,1.4125,-0.633319,-0.294, -0.467068,-0.750796,0.467068,1.339125,-0.632104,-0.339125, 0,-0.249205,0.968451,1.5,-0.609501,-0.262379, 0,-0.791034,0.611773,1.5,-0.634535,-0.2785, -0.189859,-0.826565,0.529853,1.4125,-0.633319,-0.294, 0,-0.249205,0.968451,1.5,-0.609501,-0.262379, -0.189859,-0.826565,0.529853,1.4125,-0.633319,-0.294, -0.392861,-0.271724,0.878536,1.405226,-0.609197,-0.278403, 0,-0.969635,0.244558,1.5,-0.649161,-0.322437, -0.100277,-0.976969,0.18835,1.4175,-0.646948,-0.335375, -0.189859,-0.826565,0.529853,1.4125,-0.633319,-0.294, 0,-0.969635,0.244558,1.5,-0.649161,-0.322437, -0.189859,-0.826565,0.529853,1.4125,-0.633319,-0.294, 0,-0.791034,0.611773,1.5,-0.634535,-0.2785, 0.199329,-0.959446,-0.199329,1.638667,-0.642463,-0.638667, 0.100277,-0.976969,-0.18835,1.5825,-0.646948,-0.664625, 0.079739,-0.993621,-0.079739,1.5905,-0.655194,-0.5905, 0.199329,-0.959446,-0.199329,1.638667,-0.642463,-0.638667, 0.079739,-0.993621,-0.079739,1.5905,-0.655194,-0.5905, 0.188349,-0.976969,-0.100277,1.664625,-0.646948,-0.5825, 0.100277,-0.976969,-0.18835,1.5825,-0.646948,-0.664625, 0,-0.969635,-0.244558,1.5,-0.649161,-0.677562, 0,-0.996384,-0.08496,1.5,-0.657972,-0.59775, 0,-0.996384,-0.08496,1.5,-0.657972,-0.59775, 0.079739,-0.993621,-0.079739,1.5905,-0.655194,-0.5905, 0.100277,-0.976969,-0.18835,1.5825,-0.646948,-0.664625, 0,-1,0,1.5,-0.660924,-0.5, 0.08496,-0.996384,0,1.59775,-0.657972,-0.5, 0.079739,-0.993621,-0.079739,1.5905,-0.655194,-0.5905, 0,-1,0,1.5,-0.660924,-0.5, 0.079739,-0.993621,-0.079739,1.5905,-0.655194,-0.5905, 0,-0.996384,-0.08496,1.5,-0.657972,-0.59775, 0.08496,-0.996384,0,1.59775,-0.657972,-0.5, 0.244558,-0.969635,0,1.677562,-0.649161,-0.5, 0.188349,-0.976969,-0.100277,1.664625,-0.646948,-0.5825, 0.188349,-0.976969,-0.100277,1.664625,-0.646948,-0.5825, 0.079739,-0.993621,-0.079739,1.5905,-0.655194,-0.5905, 0.08496,-0.996384,0,1.59775,-0.657972,-0.5, -0.199329,-0.959446,-0.199329,1.361333,-0.642463,-0.638667, -0.188349,-0.976969,-0.100277,1.335375,-0.646948,-0.5825, -0.079739,-0.993621,-0.079739,1.4095,-0.655194,-0.5905, -0.199329,-0.959446,-0.199329,1.361333,-0.642463,-0.638667, -0.079739,-0.993621,-0.079739,1.4095,-0.655194,-0.5905, -0.100277,-0.976969,-0.18835,1.4175,-0.646948,-0.664625, -0.188349,-0.976969,-0.100277,1.335375,-0.646948,-0.5825, -0.244558,-0.969635,0,1.322438,-0.649161,-0.5, -0.08496,-0.996384,0,1.40225,-0.657972,-0.5, -0.08496,-0.996384,0,1.40225,-0.657972,-0.5, -0.079739,-0.993621,-0.079739,1.4095,-0.655194,-0.5905, -0.188349,-0.976969,-0.100277,1.335375,-0.646948,-0.5825, 0,-1,0,1.5,-0.660924,-0.5, 0,-0.996384,-0.08496,1.5,-0.657972,-0.59775, -0.079739,-0.993621,-0.079739,1.4095,-0.655194,-0.5905, 0,-1,0,1.5,-0.660924,-0.5, -0.079739,-0.993621,-0.079739,1.4095,-0.655194,-0.5905, -0.08496,-0.996384,0,1.40225,-0.657972,-0.5, 0,-0.996384,-0.08496,1.5,-0.657972,-0.59775, 0,-0.969635,-0.244558,1.5,-0.649161,-0.677562, -0.100277,-0.976969,-0.18835,1.4175,-0.646948,-0.664625, -0.100277,-0.976969,-0.18835,1.4175,-0.646948,-0.664625, -0.079739,-0.993621,-0.079739,1.4095,-0.655194,-0.5905, 0,-0.996384,-0.08496,1.5,-0.657972,-0.59775, -0.199329,-0.959446,0.199329,1.361333,-0.642463,-0.361333, -0.100277,-0.976969,0.18835,1.4175,-0.646948,-0.335375, -0.079739,-0.993621,0.079739,1.4095,-0.655194,-0.4095, -0.199329,-0.959446,0.199329,1.361333,-0.642463,-0.361333, -0.079739,-0.993621,0.079739,1.4095,-0.655194,-0.4095, -0.188349,-0.976969,0.100277,1.335375,-0.646948,-0.4175, -0.100277,-0.976969,0.18835,1.4175,-0.646948,-0.335375, 0,-0.969635,0.244558,1.5,-0.649161,-0.322437, 0,-0.996384,0.08496,1.5,-0.657972,-0.40225, 0,-0.996384,0.08496,1.5,-0.657972,-0.40225, -0.079739,-0.993621,0.079739,1.4095,-0.655194,-0.4095, -0.100277,-0.976969,0.18835,1.4175,-0.646948,-0.335375, 0,-1,0,1.5,-0.660924,-0.5, -0.08496,-0.996384,0,1.40225,-0.657972,-0.5, -0.079739,-0.993621,0.079739,1.4095,-0.655194,-0.4095, 0,-1,0,1.5,-0.660924,-0.5, -0.079739,-0.993621,0.079739,1.4095,-0.655194,-0.4095, 0,-0.996384,0.08496,1.5,-0.657972,-0.40225, -0.08496,-0.996384,0,1.40225,-0.657972,-0.5, -0.244558,-0.969635,0,1.322438,-0.649161,-0.5, -0.188349,-0.976969,0.100277,1.335375,-0.646948,-0.4175, -0.188349,-0.976969,0.100277,1.335375,-0.646948,-0.4175, -0.079739,-0.993621,0.079739,1.4095,-0.655194,-0.4095, -0.08496,-0.996384,0,1.40225,-0.657972,-0.5, 0.199329,-0.959446,0.199329,1.638667,-0.642463,-0.361333, 0.188349,-0.976969,0.100277,1.664625,-0.646948,-0.4175, 0.079739,-0.993621,0.079739,1.5905,-0.655194,-0.4095, 0.199329,-0.959446,0.199329,1.638667,-0.642463,-0.361333, 0.079739,-0.993621,0.079739,1.5905,-0.655194,-0.4095, 0.100277,-0.976969,0.18835,1.5825,-0.646948,-0.335375, 0.188349,-0.976969,0.100277,1.664625,-0.646948,-0.4175, 0.244558,-0.969635,0,1.677562,-0.649161,-0.5, 0.08496,-0.996384,0,1.59775,-0.657972,-0.5, 0.08496,-0.996384,0,1.59775,-0.657972,-0.5, 0.079739,-0.993621,0.079739,1.5905,-0.655194,-0.4095, 0.188349,-0.976969,0.100277,1.664625,-0.646948,-0.4175, 0,-1,0,1.5,-0.660924,-0.5, 0,-0.996384,0.08496,1.5,-0.657972,-0.40225, 0.079739,-0.993621,0.079739,1.5905,-0.655194,-0.4095, 0,-1,0,1.5,-0.660924,-0.5, 0.079739,-0.993621,0.079739,1.5905,-0.655194,-0.4095, 0.08496,-0.996384,0,1.59775,-0.657972,-0.5, 0,-0.996384,0.08496,1.5,-0.657972,-0.40225, 0,-0.969635,0.244558,1.5,-0.649161,-0.322437, 0.100277,-0.976969,0.18835,1.5825,-0.646948,-0.335375, 0.100277,-0.976969,0.18835,1.5825,-0.646948,-0.335375, 0.079739,-0.993621,0.079739,1.5905,-0.655194,-0.4095, 0,-0.996384,0.08496,1.5,-0.657972,-0.40225, }; static const struct gllist frame={GL_N3F_V3F,GL_TRIANGLES,1728,data,NULL}; const struct gllist *s1_6=&frame; xscreensaver-5.36/hacks/glx/s1_b.c000644 000767 000024 00000035776 12701612217 017032 0ustar00jwzstaff000000 000000 #include "gllist.h" static const float data[]={ -0.137893,0.043508,-0.125711, -0.095845,-0.165656,0.072892, -0.093165,0.152051,0.327744, -0.003795,0.001470,-0.102225, 0.152845,-0.430757,-0.031907, -0.118828,0.399389,0.091047, -0.169137,-0.181241,-0.288763, 0.048660,0.018262,-0.035049, 0.008859,0.208004,-0.059048, -0.009212,-0.042229,-0.000692, -0.040025,0.115695,0.178962, -0.198525,0.018630,0.257202, 0.205081,-0.244569,0.136314, -0.214336,-0.149946,-0.006872, 0.245675,-0.227316,-0.184201, -0.001494,0.259139,-0.260652, 0.070243,0.038750,0.069425, -0.033229,-0.259151,0.298856, 0.088773,-0.065324,0.260294, 0.009195,0.078651,0.055543, -0.090795,0.025672,0.056988, -0.163707,-0.011627,-0.096395, 0.068886,0.257031,-0.264175, -0.018086,-0.285526,0.152989, -0.017489,0.031671,0.000107, -0.075583,-0.097617,0.030074, 0.129221,-0.087628,0.171748, -0.007530,-0.084194,0.186045, 0.474638,0.004818,0.200460, 0.016796,0.096614,-0.221351, 0.187032,0.031017,0.039986, -0.142119,-0.105297,-0.100849, 0.142768,-0.313960,-0.349716, -0.146805,0.140482,0.035653, 0.039939,-0.051822,-0.017672, 0.057111,-0.075686,-0.103478, 0.049696,-0.135070,0.055097, 0.030271,0.075412,-0.103571, 0.100158,-0.022917,0.073895, 0.085544,-0.273613,0.092456, 0.077489,-0.309836,-0.003664, -0.017590,-0.127869,0.153118, -0.157014,-0.242184,0.070478, -0.018167,-0.133639,-0.174937, -0.106973,-0.189783,0.038622, -0.000096,0.104429,-0.032589, -0.032036,-0.021493,0.279829, -0.093181,-0.058024,0.182239, 0.012941,-0.010409,0.088080, 0.256718,-0.118137,-0.078847, -0.113382,0.135060,0.269946, 0.175810,-0.026321,0.013860, -0.110606,-0.023553,-0.255525, 0.007163,0.068674,0.010214, 0.031631,-0.170381,-0.174604, 0.117242,0.014353,-0.021215, 0.090315,0.161755,0.074427, 0.285616,0.335824,-0.083891, -0.145763,0.109292,0.121340, -0.147459,-0.041936,0.010427, -0.082626,0.151300,-0.030875, 0.217154,-0.288504,-0.202483, 0.026532,-0.106796,0.121041, 0.046695,-0.033673,-0.043721, 0.135596,0.217426,-0.219631, 0.137627,0.026335,-0.082390, -0.031665,-0.115897,0.077834, -0.214922,-0.162169,0.073035, -0.076108,0.200481,0.036119, 0.012715,-0.161921,0.179804, 0.140409,-0.165899,-0.005149, -0.054606,0.011149,0.045768, 0.116640,-0.180314,0.045320, 0.342166,0.295895,-0.049250, -0.133242,0.129064,0.136969, 0.137520,-0.387145,0.132137, 0.023302,0.194298,-0.066187, 0.089302,0.128683,-0.072530, -0.141374,0.035924,-0.079354, -0.209233,0.018987,-0.004193, 0.156295,-0.034087,0.344315, -0.005946,0.039791,0.071862, 0.076043,-0.094430,0.090122, 0.127394,0.031466,-0.028015, -0.061000,0.169741,-0.127635, -0.015117,-0.160883,-0.095443, -0.185998,-0.182942,0.056857, 0.016499,-0.308118,-0.075513, 0.024971,-0.301226,-0.027251, -0.035944,0.061566,0.013883, 0.007215,0.046198,-0.227891, 0.189165,0.079471,-0.067849, 0.026963,0.027982,-0.050419, -0.050896,0.069604,-0.196938, 0.064274,-0.205263,0.297868, -0.047543,0.147822,0.166593, 0.010318,-0.002148,0.029434, 0.036107,-0.523568,-0.118442, -0.199410,0.233526,-0.161289, -0.047441,-0.013973,0.112998, -0.043494,-0.181796,0.065864, -0.074984,0.177758,-0.156470, 0.225216,0.081058,-0.169876, -0.041510,0.025763,-0.231350, 0.259015,0.274641,0.018290, 0.039196,0.010028,0.072771, 0.031646,0.075290,0.039258, 0.052930,-0.034809,0.165429, -0.072511,0.095786,-0.222144, 0.038706,0.032296,-0.002495, 0.011675,-0.061944,0.082555, -0.168400,0.074113,0.049321, 0.001263,-0.207436,0.013949, -0.027045,0.015697,-0.047831, 0.121989,-0.043014,-0.004426, 0.238374,-0.320060,-0.111754, 0.095077,0.014640,0.070665, -0.084367,0.016444,0.000788, -0.117804,0.113550,0.087029, -0.109080,-0.155795,0.040085, -0.020370,0.118787,0.101787, 0.140877,-0.144829,0.107720, -0.247002,-0.454632,0.070535, -0.016278,-0.111440,0.270110, -0.017624,-0.146232,0.154626, 0.214030,0.041025,-0.170250, 0.010009,-0.159290,-0.076895, 0.116168,0.156775,-0.077935, 0.199355,0.081120,0.003352, 0.054178,-0.036863,-0.004573, -0.015149,0.057005,-0.008878, 0.374758,-0.007823,-0.078051, -0.034977,0.026837,0.035441, 0.101867,0.121954,0.040450, -0.136911,0.010061,0.082698, 0.121665,-0.589852,0.106401, -0.064574,0.098679,0.059336, 0.103037,-0.075263,0.172586, -0.217492,-0.170584,-0.025846, 0.260366,0.002117,0.041535, -0.024112,-0.023437,-0.088146, -0.007767,0.061738,0.116208, 0.253471,0.113278,0.231012, -0.011399,0.116962,-0.037465, 0.233898,0.226108,0.077176, -0.004640,0.209191,-0.091738, 0.093995,0.328937,0.245098, 0.155739,-0.327971,-0.115265, 0.125306,0.174931,0.130030, 0.005005,-0.022310,0.120651, 0.046982,-0.058839,-0.097958, -0.059618,-0.068114,0.070137, 0.053184,-0.081163,0.000020, 0.188066,-0.082942,-0.013689, -0.161390,-0.335891,-0.060737, 0.131189,0.036733,-0.093511, -0.002496,-0.059035,-0.084055, 0.109820,-0.235531,0.130865, 0.018909,0.062351,0.111532, 0.123548,0.094008,0.056761, 0.106710,-0.049834,-0.147748, 0.102940,-0.113169,0.191710, -0.028647,0.128038,-0.104189, 0.107226,-0.220633,-0.147310, -0.205747,0.063433,-0.026135, -0.064614,0.096963,-0.080108, -0.083255,0.113008,-0.089852, 0.180961,-0.269100,0.115523, 0.044722,-0.023285,0.024813, 0.078986,0.037242,0.005124, 0.115141,0.124478,-0.034603, 0.022454,0.155937,-0.096183, 0.175318,0.007233,-0.138507, 0.019182,-0.037869,0.074242, 0.058218,0.212269,-0.003886, -0.188525,-0.075703,0.075643, -0.029085,-0.076746,-0.273473, -0.105590,-0.238524,-0.087465, 0.086122,-0.340807,-0.192851, -0.247936,-0.003160,0.082106, 0.137988,-0.041876,-0.012086, -0.140714,-0.138827,-0.064179, -0.059380,0.015642,0.113841, -0.031501,0.007130,-0.125767, 0.021294,-0.021957,-0.069365, -0.012419,0.019780,-0.077459, 0.085524,0.087513,-0.107484, -0.303263,0.263672,-0.220649, -0.090267,-0.376337,-0.127634, 0.087681,0.015985,-0.029860, 0.119257,0.140347,0.194003, 0.066270,0.127178,-0.003765, 0.037563,-0.110829,0.000382, 0.034295,-0.045737,0.045204, 0.017365,-0.072708,0.056698, 0.045238,0.187956,-0.055878, -0.132755,0.017969,-0.041205, 0.189702,-0.020780,-0.077422, 0.210419,0.178041,-0.005855, 0.104527,-0.304323,0.002581, 0.043359,-0.060695,-0.011878, -0.000267,0.020510,-0.046383, 0.252891,0.074246,-0.047689, -0.069874,0.118962,-0.052781, 0.086188,0.068354,-0.213621, 0.086637,-0.171519,0.006447, 0.196785,-0.086044,-0.068059, 0.100401,0.243886,-0.142258, 0.173010,0.303375,-0.060085, -0.041181,-0.097467,0.073776, -0.013471,-0.133299,-0.143570, -0.302092,-0.158342,0.230719, 0.074434,-0.143530,0.294895, -0.165626,0.200869,-0.130737, 0.102444,0.277067,0.078210, -0.183696,-0.010502,-0.150481, -0.070029,-0.019635,-0.059141, -0.005930,0.069199,-0.013126, -0.119333,-0.007972,0.119489, 0.033072,0.081756,-0.034481, -0.108282,-0.065310,0.146009, 0.080950,0.111320,0.004291, 0.071208,-0.112941,0.028135, -0.024632,0.190525,-0.285626, -0.105040,0.044008,0.020236, -0.017815,-0.076684,-0.065840, 0.083563,0.100873,-0.141154, -0.062066,-0.010894,0.066110, -0.056763,0.024777,-0.176209, -0.014442,0.052861,0.013010, -0.157546,-0.118279,-0.237648, -0.234497,-0.158049,0.102635, 0.061685,-0.052695,-0.042243, 0.093961,-0.025060,0.046602, 0.004395,0.150912,0.191784, 0.067299,-0.059575,0.161018, -0.233155,-0.109721,0.194653, 0.217444,0.221231,-0.201241, -0.033689,-0.341937,-0.099231, 0.042771,-0.028862,0.067736, 0.110240,0.274029,-0.157689, -0.055994,0.144729,0.090901, 0.211192,0.058165,-0.149872, 0.102735,-0.044061,-0.044795, -0.042153,-0.010955,0.014341, -0.011649,0.099072,-0.086419, -0.018920,0.000640,-0.031729, -0.216886,-0.057512,0.071195, -0.188150,0.049292,0.258489, -0.023494,0.021489,0.199785, -0.045818,0.066753,-0.035593, 0.010986,0.166767,0.275085, -0.177039,0.010372,0.167936, -0.423239,0.027466,-0.126114, -0.102035,0.282640,0.022622, -0.023997,0.176943,0.093272, -0.090009,0.015338,0.250857, 0.011095,0.006703,0.057076, 0.133423,0.234639,-0.070260, -0.295994,0.185615,0.117148, 0.235480,0.066195,0.078641, -0.026545,0.093931,0.008019, 0.181656,-0.088719,0.045959, -0.076308,-0.164584,0.018271, 0.092026,0.201866,-0.106051, 0.019876,0.050967,0.176081, -0.018546,0.138749,-0.008255, -0.026049,-0.068465,-0.055467, -0.260245,0.221833,-0.048541, -0.169783,0.354992,-0.017943, -0.306063,0.074787,0.101971, 0.215973,0.107558,-0.008808, 0.390235,-0.275652,-0.117085, 0.033898,0.046047,-0.108977, -0.263507,-0.091765,-0.250234, -0.044613,0.149563,0.027937, -0.015397,-0.040254,0.065692, -0.017531,-0.013504,0.004021, 0.054665,-0.018996,-0.006954, 0.033068,0.219349,-0.194079, -0.057780,0.011881,0.084904, 0.139243,-0.109890,0.039145, 0.223272,0.208110,0.165882, -0.008046,0.103847,0.278718, -0.035499,0.112662,-0.088418, -0.053118,0.053871,-0.054706, 0.118632,0.086431,-0.022494, 0.014943,0.039622,0.047307, 0.006570,0.093461,0.058982, 0.031448,0.325716,-0.047305, -0.193710,0.087226,0.051790, 0.116154,-0.080023,-0.106643, 0.156514,-0.222710,0.275425, -0.084294,-0.101851,0.425222, 0.030344,-0.141370,-0.282460, 0.003022,0.108996,-0.229152, -0.133040,0.061025,-0.128942, -0.077348,0.013363,-0.072511, -0.050317,0.452190,0.094114, 0.053309,-0.143722,0.249884, -0.257016,0.100544,0.012236, -0.022056,-0.212133,0.023533, 0.153299,0.031763,0.034577, 0.161729,0.084914,0.050770, 0.320438,0.112175,0.135015, -0.040717,0.073400,0.080543, -0.226004,0.143154,0.170139, 0.009756,0.068337,0.132111, 0.380191,0.233715,0.026664, -0.018016,0.265426,-0.110691, 0.041281,0.056674,-0.119834, 0.170794,-0.112611,0.094839, 0.216318,0.002081,0.154653, -0.036815,0.024332,0.172587, -0.064554,0.160699,0.101229, 0.114451,0.016039,0.293489, 0.023010,-0.028932,0.014800, -0.290527,0.172553,0.129526, -0.048159,-0.181222,0.305871, 0.065351,-0.399962,-0.030479, 0.334123,-0.120149,0.241310, -0.203728,-0.155627,0.140805, 0.061022,-0.016097,0.131688, 0.045050,-0.313782,-0.279077, 0.034252,-0.135512,-0.087765, 0.276236,0.036449,0.418332, -0.122146,0.050998,0.131453, -0.087629,0.330142,0.061353, 0.228676,0.093309,-0.009307, 0.435264,0.186185,-0.127484, 0.156565,0.013842,-0.103874, -0.274053,-0.084119,0.096687, -0.027947,-0.051152,-0.078997, 0.013399,0.194440,0.072030, 0.000082,0.130666,0.052218, 0.064984,-0.136859,0.092204, 0.109060,0.424779,-0.111867, 0.061748,0.160827,-0.068538, 0.062960,0.059638,-0.181514, 0.018961,0.072298,0.003517, -0.099508,-0.225455,-0.021791, 0.001955,-0.320555,0.159506, -0.057735,-0.054327,-0.095525, 0.319748,-0.146158,-0.198384, -0.158741,-0.265443,0.036635, -0.093089,-0.358379,-0.110549, -0.049805,0.022246,-0.036724, 0.223000,0.247522,-0.232652, -0.249441,-0.248325,-0.071169, 0.000369,0.094598,-0.162153, -0.133873,-0.188473,0.272734, 0.046594,0.069766,0.015561, 0.111582,-0.239786,0.034658, 0.093232,0.183507,-0.011298, -0.226805,0.514871,-0.064144, 0.085949,0.031412,0.042790, -0.043755,-0.290797,-0.159142, 0.056671,0.167837,0.016536, -0.034538,0.072185,0.066973, -0.021211,0.064120,-0.174756, 0.090627,-0.055253,0.109457, 0.019686,0.004469,-0.096316, -0.038864,-0.135083,0.244529, 0.034613,-0.069587,0.144533, -0.100009,-0.057516,-0.079338, -0.178026,0.085994,0.061804, -0.189256,0.342739,0.043372, -0.046206,0.168946,-0.133904, 0.015314,-0.090127,-0.058530, 0.169657,-0.097086,0.013746, 0.185131,-0.089445,0.347806, -0.264432,-0.170170,-0.335858, -0.086511,0.248252,-0.169698, 0.002287,-0.028338,-0.266432, -0.085060,0.001974,-0.032789, 0.192750,-0.007081,0.098197, 0.012577,0.034983,-0.003058, -0.039249,0.038498,0.067306, 0.021988,0.379705,-0.054619, -0.151707,0.051034,-0.016003, -0.057048,0.075729,-0.213397, -0.137847,0.130600,0.046198, 0.024786,0.049556,-0.045772, -0.082533,0.155397,-0.096145, 0.049152,0.270979,-0.147022, 0.061153,-0.104531,-0.103623, -0.142997,-0.232885,0.040538, 0.048806,-0.013095,-0.003505, -0.095063,0.241414,-0.202255, 0.108558,-0.147584,0.162682, 0.217105,0.252340,-0.114830, -0.188028,0.417252,-0.077456, -0.112855,0.105192,0.073968, -0.186972,0.164022,-0.073415, -0.074349,-0.324874,-0.056645, 0.327855,-0.271424,-0.141142, 0.151049,0.155239,-0.083116, 0.035395,-0.133176,-0.095112, 0.127283,-0.011837,0.199750, -0.120775,0.103698,0.063302, 0.014222,0.198468,0.137537, -0.269656,0.120644,-0.153958, -0.136743,-0.119817,-0.073747, -0.068156,-0.138484,0.033507, -0.106835,0.114964,0.023924, -0.222525,0.330321,-0.007431, -0.011739,0.095156,0.139086, 0.146766,0.037685,0.136122, -0.086532,-0.081295,0.009434, 0.189439,0.290592,-0.048317, 0.139152,0.224931,0.355509, 0.017162,-0.016825,0.094198, -0.237595,0.205475,-0.041412, 0.050511,0.094900,0.252891, -0.012538,-0.014082,0.064629, -0.059810,0.020665,-0.260979, 0.073490,-0.242270,0.085847, 0.049499,-0.045617,-0.015894, -0.121040,0.004350,0.381603, -0.062798,0.055006,0.077472, -0.156846,-0.033342,0.035284, 0.105383,0.002776,-0.046394, 0.247612,0.310528,0.046188, -0.144567,-0.197996,0.083309, -0.317845,-0.014793,-0.041608, -0.169858,0.102631,0.283962, -0.168757,0.093105,0.050325, -0.013639,0.285100,0.047089, 0.216644,0.102018,0.031983, 0.046988,0.081482,0.021865, 0.124995,-0.193086,0.127870, 0.009153,0.178713,-0.077949, -0.235371,-0.046817,-0.125764, -0.089381,0.289172,-0.129356, 0.312993,0.120426,0.296957, -0.106431,0.117096,0.156971, 0.030001,0.244577,0.085119, 0.002958,-0.035469,-0.084615, -0.052248,-0.004298,-0.129170, -0.158458,0.059061,-0.041780, -0.007117,-0.174211,0.098819, -0.158387,0.060840,-0.064818, 0.117241,-0.050754,-0.027945, -0.014301,0.146402,-0.118414, 0.186611,-0.162182,-0.150909, -0.106992,0.286109,-0.055512, 0.109689,-0.346409,0.072611, -0.009694,-0.038102,0.098565, -0.034598,0.323300,0.020962, -0.149219,0.040596,-0.114206, 0.164744,0.048081,0.105464, 0.036214,0.099523,0.038595, 0.056537,0.036271,0.003042, -0.157110,0.001614,-0.133994, -0.104357,-0.032004,0.262334, 0.041215,-0.010418,-0.037968, 0.223491,-0.387946,0.117291, -0.344434,0.110318,-0.031448, 0.123562,-0.315729,0.164533, 0.008207,0.042004,0.050014, -0.191339,-0.069291,-0.220065, 0.023845,0.009474,0.035598, -0.173295,-0.036604,-0.193323, -0.040347,-0.106063,-0.055559, -0.071543,0.136487,0.105697, -0.179027,-0.071852,0.117512, 0.064769,-0.345895,0.012833, 0.044800,-0.032357,-0.042161, 0.243586,0.392499,-0.180641, -0.148924,-0.181446,0.146644, -0.042773,0.045843,-0.176893, 0.025938,0.058109,0.242063, -0.028489,-0.024828,0.161289, 0.073899,-0.081205,-0.023751, 0.026149,0.051399,-0.072348, 0.024308,-0.041819,-0.030578, -0.077778,0.010272,0.066967, -0.139184,-0.018983,0.035150, -0.061359,-0.152358,-0.072849, 0.043101,0.028278,0.077387, 0.065599,-0.049676,0.043708, -0.255767,0.023510,-0.076982, 0.020468,-0.040630,0.208424, 0.044922,0.025184,0.004764, 0.107432,-0.009356,0.239863, -0.005475,0.158400,0.089743, 0.018352,0.134559,0.221650, 0.094423,0.129390,-0.031274, 0.048541,0.100595,-0.155938, -0.016298,-0.036518,-0.149178, -0.329953,-0.327602,-0.150086, 0.148403,-0.363334,0.028237, -0.305790,-0.009844,-0.075571, -0.045131,0.152595,0.228720, 0.039725,-0.127469,0.066522, -0.078576,-0.349749,-0.146881, 0.013160,-0.040312,0.129980, 0.221142,-0.106068,0.254967, 0.180912,-0.207357,-0.196999, 0.098219,0.085231,0.121963, }; static const struct gllist frame={GL_V3F,GL_POINTS,500,data,NULL}; const struct gllist *s1_b=&frame; xscreensaver-5.36/hacks/glx/shark.c000644 000767 000024 00000102303 12701612217 017273 0ustar00jwzstaff000000 000000 /* atlantis --- Shows moving 3D sea animals */ #if 0 static const char sccsid[] = "@(#)shark.c 1.2 98/06/16 xlockmore"; #endif /* Copyright (c) E. Lassauge, 1998. */ /* * Permission to use, copy, modify, and distribute this software and its * documentation for any purpose and without fee is hereby granted, * provided that the above copyright notice appear in all copies and that * both that copyright notice and this permission notice appear in * supporting documentation. * * This file is provided AS IS with no warranties of any kind. The author * shall have no liability with respect to the infringement of copyrights, * trade secrets or any patents by this file or any part thereof. In no * event will the author be liable for any lost revenue or profits or * other special, indirect and consequential damages. * * The original code for this mode was written by Mark J. Kilgard * as a demo for openGL programming. * * Porting it to xlock was possible by comparing the original Mesa's morph3d * demo with it's ported version to xlock, so thanks for Marcelo F. Vianna * (look at morph3d.c) for his indirect help. * * Thanks goes also to Brian Paul for making it possible and inexpensive * to use OpenGL at home. * * My e-mail address is lassauge@users.sourceforge.net * * Eric Lassauge (May-13-1998) * */ /** * (c) Copyright 1993, 1994, Silicon Graphics, Inc. * ALL RIGHTS RESERVED * Permission to use, copy, modify, and distribute this software for * any purpose and without fee is hereby granted, provided that the above * copyright notice appear in all copies and that both the copyright notice * and this permission notice appear in supporting documentation, and that * the name of Silicon Graphics, Inc. not be used in advertising * or publicity pertaining to distribution of the software without specific, * written prior permission. * * THE MATERIAL EMBODIED ON THIS SOFTWARE IS PROVIDED TO YOU "AS-IS" * AND WITHOUT WARRANTY OF ANY KIND, EXPRESS, IMPLIED OR OTHERWISE, * INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY OR * FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL SILICON * GRAPHICS, INC. BE LIABLE TO YOU OR ANYONE ELSE FOR ANY DIRECT, * SPECIAL, INCIDENTAL, INDIRECT OR CONSEQUENTIAL DAMAGES OF ANY * KIND, OR ANY DAMAGES WHATSOEVER, INCLUDING WITHOUT LIMITATION, * LOSS OF PROFIT, LOSS OF USE, SAVINGS OR REVENUE, OR THE CLAIMS OF * THIRD PARTIES, WHETHER OR NOT SILICON GRAPHICS, INC. HAS BEEN * ADVISED OF THE POSSIBILITY OF SUCH LOSS, HOWEVER CAUSED AND ON * ANY THEORY OF LIABILITY, ARISING OUT OF OR IN CONNECTION WITH THE * POSSESSION, USE OR PERFORMANCE OF THIS SOFTWARE. * * US Government Users Restricted Rights * Use, duplication, or disclosure by the Government is subject to * restrictions set forth in FAR 52.227.19(c)(2) or subparagraph * (c)(1)(ii) of the Rights in Technical Data and Computer Software * clause at DFARS 252.227-7013 and/or in similar or successor * clauses in the FAR or the DOD or NASA FAR Supplement. * Unpublished-- rights reserved under the copyright laws of the * United States. Contractor/manufacturer is Silicon Graphics, * Inc., 2011 N. Shoreline Blvd., Mountain View, CA 94039-7311. * * OpenGL(TM) is a trademark of Silicon Graphics, Inc. */ #ifdef USE_GL #include "atlantis.h" /* *INDENT-OFF* */ #if 0 static const float N001[3] = {0, 1, 0}; #endif static const float N002[3] = {0.000077, -0.020611, 0.999788}; static const float N003[3] = {0.961425, 0.258729, -0.09339}; static const float N004[3] = {0.510811, -0.769633, -0.383063}; static const float N005[3] = {0.400123, 0.855734, -0.328055}; static const float N006[3] = {-0.770715, 0.610204, -0.18344}; static const float N007[3] = {-0.915597, -0.373345, -0.149316}; static const float N008[3] = {-0.972788, 0.208921, -0.100179}; static const float N009[3] = {-0.939713, -0.312268, -0.139383}; static const float N010[3] = {-0.624138, -0.741047, -0.247589}; static const float N011[3] = {0.591434, -0.768401, -0.244471}; static const float N012[3] = {0.935152, -0.328495, -0.132598}; static const float N013[3] = {0.997102, 0.074243, -0.016593}; static const float N014[3] = {0.969995, 0.241712, -0.026186}; static const float N015[3] = {0.844539, 0.502628, -0.184714}; static const float N016[3] = {-0.906608, 0.386308, -0.169787}; static const float N017[3] = {-0.970016, 0.241698, -0.025516}; static const float N018[3] = {-0.998652, 0.050493, -0.012045}; static const float N019[3] = {-0.942685, -0.333051, -0.020556}; static const float N020[3] = {-0.660944, -0.750276, 0.01548}; static const float N021[3] = {0.503549, -0.862908, -0.042749}; static const float N022[3] = {0.953202, -0.302092, -0.012089}; static const float N023[3] = {0.998738, 0.023574, 0.044344}; static const float N024[3] = {0.979297, 0.193272, 0.060202}; static const float N025[3] = {0.7983, 0.464885, 0.382883}; static const float N026[3] = {-0.75659, 0.452403, 0.472126}; static const float N027[3] = {-0.953855, 0.293003, 0.065651}; static const float N028[3] = {-0.998033, 0.040292, 0.048028}; static const float N029[3] = {-0.977079, -0.204288, 0.059858}; static const float N030[3] = {-0.729117, -0.675304, 0.11114}; static const float N031[3] = {0.598361, -0.792753, 0.116221}; static const float N032[3] = {0.965192, -0.252991, 0.066332}; static const float N033[3] = {0.998201, -0.00279, 0.059892}; static const float N034[3] = {0.978657, 0.193135, 0.070207}; static const float N035[3] = {0.718815, 0.680392, 0.142733}; static const float N036[3] = {-0.383096, 0.906212, 0.178936}; static const float N037[3] = {-0.952831, 0.29259, 0.080647}; static const float N038[3] = {-0.99768, 0.032417, 0.059861}; static const float N039[3] = {-0.982629, -0.169881, 0.0747}; static const float N040[3] = {-0.695424, -0.703466, 0.1467}; static const float N041[3] = {0.359323, -0.915531, 0.180805}; static const float N042[3] = {0.943356, -0.319387, 0.089842}; static const float N043[3] = {0.998272, -0.032435, 0.048993}; static const float N044[3] = {0.978997, 0.193205, 0.065084}; static const float N045[3] = {0.872144, 0.470094, -0.135565}; static const float N046[3] = {-0.664282, 0.737945, -0.119027}; static const float N047[3] = {-0.954508, 0.28857, 0.075107}; static const float N048[3] = {-0.998273, 0.032406, 0.048993}; static const float N049[3] = {-0.979908, -0.193579, 0.048038}; static const float N050[3] = {-0.858736, -0.507202, -0.072938}; static const float N051[3] = {0.643545, -0.763887, -0.048237}; static const float N052[3] = {0.95558, -0.288954, 0.058068}; #if 0 static const float N053[3] = {0, 1, 0}; static const float N054[3] = {0, 1, 0}; static const float N055[3] = {0, 1, 0}; static const float N056[3] = {0, 1, 0}; static const float N057[3] = {0, 1, 0}; #endif static const float N058[3] = {0.00005, 0.793007, -0.609213}; static const float N059[3] = {0.91351, 0.235418, -0.331779}; static const float N060[3] = {-0.80797, 0.495, -0.319625}; static const float N061[3] = {0, 0.784687, -0.619892}; static const float N062[3] = {0, -1, 0}; static const float N063[3] = {0, 1, 0}; static const float N064[3] = {0, 1, 0}; static const float N065[3] = {0, 1, 0}; static const float N066[3] = {-0.055784, 0.257059, 0.964784}; #if 0 static const float N067[3] = {0, 1, 0}; static const float N068[3] = {0, 1, 0}; #endif static const float N069[3] = {-0.000505, -0.929775, -0.368127}; static const float N070[3] = {0, 1, 0}; #if 0 static const float N071[3] = {-0.987102, 0.131723, -0.090984}; static const float N072[3] = {-0.987102, 0.131723, -0.090984}; static const float N073[3] = {-0.987102, 0.131723, -0.090984}; static const float N074[3] = {0, 1, 0}; static const float N075[3] = {0, 1, 0}; static const float N076[3] = {0, 1, 0}; static const float N077[3] = {0.99521, 0.071962, -0.066168}; static const float N078[3] = {0.99521, 0.071962, -0.066168}; static const float N079[3] = {0.99521, 0.071962, -0.066168}; static const float N080[3] = {0, 1, 0}; static const float N081[3] = {0, 1, 0}; static const float N082[3] = {0, 1, 0}; static const float P001[3] = {0, 0, 0}; #endif static float P002[3] = {0, -36.59, 5687.72}; static const float P003[3] = {90, 114.73, 724.38}; static float P004[3] = {58.24, -146.84, 262.35}; static const float P005[3] = {27.81, 231.52, 510.43}; static const float P006[3] = {-27.81, 230.43, 509.76}; static float P007[3] = {-46.09, -146.83, 265.84}; static const float P008[3] = {-90, 103.84, 718.53}; static const float P009[3] = {-131.1, -165.92, 834.85}; static float P010[3] = {-27.81, -285.31, 500}; static float P011[3] = {27.81, -285.32, 500}; static const float P012[3] = {147.96, -170.89, 845.5}; static const float P013[3] = {180, 0, 2000}; static const float P014[3] = {145.62, 352.67, 2000}; static const float P015[3] = {55.62, 570.63, 2000}; static const float P016[3] = {-55.62, 570.64, 2000}; static const float P017[3] = {-145.62, 352.68, 2000}; static const float P018[3] = {-180, 0.01, 2000}; static const float P019[3] = {-178.2, -352.66, 2001.61}; static const float P020[3] = {-55.63, -570.63, 2000}; static const float P021[3] = {55.62, -570.64, 2000}; static const float P022[3] = {179.91, -352.69, 1998.39}; static float P023[3] = {150, 0, 3000}; static float P024[3] = {121.35, 293.89, 3000}; static float P025[3] = {46.35, 502.93, 2883.09}; static float P026[3] = {-46.35, 497.45, 2877.24}; static float P027[3] = {-121.35, 293.9, 3000}; static float P028[3] = {-150, 0, 3000}; static float P029[3] = {-152.21, -304.84, 2858.68}; static float P030[3] = {-46.36, -475.52, 3000}; static float P031[3] = {46.35, -475.53, 3000}; static float P032[3] = {155.64, -304.87, 2863.5}; static float P033[3] = {90, 0, 4000}; static float P034[3] = {72.81, 176.33, 4000}; static float P035[3] = {27.81, 285.32, 4000}; static float P036[3] = {-27.81, 285.32, 4000}; static float P037[3] = {-72.81, 176.34, 4000}; static float P038[3] = {-90, 0, 4000}; static float P039[3] = {-72.81, -176.33, 4000}; static float P040[3] = {-27.81, -285.31, 4000}; static float P041[3] = {27.81, -285.32, 4000}; static float P042[3] = {72.81, -176.34, 4000}; static float P043[3] = {30, 0, 5000}; static float P044[3] = {24.27, 58.78, 5000}; static float P045[3] = {9.27, 95.11, 5000}; static float P046[3] = {-9.27, 95.11, 5000}; static float P047[3] = {-24.27, 58.78, 5000}; static float P048[3] = {-30, 0, 5000}; static float P049[3] = {-24.27, -58.78, 5000}; static float P050[3] = {-9.27, -95.1, 5000}; static float P051[3] = {9.27, -95.11, 5000}; static float P052[3] = {24.27, -58.78, 5000}; #if 0 static const float P053[3] = {0, 0, 0}; static const float P054[3] = {0, 0, 0}; static const float P055[3] = {0, 0, 0}; static const float P056[3] = {0, 0, 0}; static const float P057[3] = {0, 0, 0}; #endif static const float P058[3] = {0, 1212.72, 2703.08}; static const float P059[3] = {50.36, 0, 108.14}; static const float P060[3] = {-22.18, 0, 108.14}; static float P061[3] = {0, 1181.61, 6344.65}; static const float P062[3] = {516.45, -887.08, 2535.45}; static const float P063[3] = {-545.69, -879.31, 2555.63}; static const float P064[3] = {618.89, -1005.64, 2988.32}; static const float P065[3] = {-635.37, -1014.79, 2938.68}; static const float P066[3] = {0, 1374.43, 3064.18}; #if 0 static const float P067[3] = {158.49, -11.89, 1401.56}; static const float P068[3] = {-132.08, -17.9, 1394.31}; #endif static float P069[3] = {0, -418.25, 5765.04}; static float P070[3] = {0, 1266.91, 6629.6}; static const float P071[3] = {-139.12, -124.96, 997.98}; static const float P072[3] = {-139.24, -110.18, 1020.68}; static const float P073[3] = {-137.33, -94.52, 1022.63}; static const float P074[3] = {-137.03, -79.91, 996.89}; static const float P075[3] = {-135.21, -91.48, 969.14}; static const float P076[3] = {-135.39, -110.87, 968.76}; static const float P077[3] = {150.23, -78.44, 995.53}; static const float P078[3] = {152.79, -92.76, 1018.46}; static const float P079[3] = {154.19, -110.2, 1020.55}; static const float P080[3] = {151.33, -124.15, 993.77}; static const float P081[3] = {150.49, -111.19, 969.86}; static const float P082[3] = {150.79, -92.41, 969.7}; static const float iP002[3] = {0, -36.59, 5687.72}; static const float iP004[3] = {58.24, -146.84, 262.35}; static const float iP007[3] = {-46.09, -146.83, 265.84}; static const float iP010[3] = {-27.81, -285.31, 500}; static const float iP011[3] = {27.81, -285.32, 500}; static const float iP023[3] = {150, 0, 3000}; static const float iP024[3] = {121.35, 293.89, 3000}; static const float iP025[3] = {46.35, 502.93, 2883.09}; static const float iP026[3] = {-46.35, 497.45, 2877.24}; static const float iP027[3] = {-121.35, 293.9, 3000}; static const float iP028[3] = {-150, 0, 3000}; static const float iP029[3] = {-121.35, -304.84, 2853.86}; static const float iP030[3] = {-46.36, -475.52, 3000}; static const float iP031[3] = {46.35, -475.53, 3000}; static const float iP032[3] = {121.35, -304.87, 2853.86}; static const float iP033[3] = {90, 0, 4000}; static const float iP034[3] = {72.81, 176.33, 4000}; static const float iP035[3] = {27.81, 285.32, 4000}; static const float iP036[3] = {-27.81, 285.32, 4000}; static const float iP037[3] = {-72.81, 176.34, 4000}; static const float iP038[3] = {-90, 0, 4000}; static const float iP039[3] = {-72.81, -176.33, 4000}; static const float iP040[3] = {-27.81, -285.31, 4000}; static const float iP041[3] = {27.81, -285.32, 4000}; static const float iP042[3] = {72.81, -176.34, 4000}; static const float iP043[3] = {30, 0, 5000}; static const float iP044[3] = {24.27, 58.78, 5000}; static const float iP045[3] = {9.27, 95.11, 5000}; static const float iP046[3] = {-9.27, 95.11, 5000}; static const float iP047[3] = {-24.27, 58.78, 5000}; static const float iP048[3] = {-30, 0, 5000}; static const float iP049[3] = {-24.27, -58.78, 5000}; static const float iP050[3] = {-9.27, -95.1, 5000}; static const float iP051[3] = {9.27, -95.11, 5000}; static const float iP052[3] = {24.27, -58.78, 5000}; #if 0 static const float iP053[3] = {0, 0, 0}; #endif static const float iP061[3] = {0, 1181.61, 6344.65}; static const float iP069[3] = {0, -418.25, 5765.04}; static const float iP070[3] = {0, 1266.91, 6629.6}; /* *INDENT-ON* */ static void Fish001(GLenum cap) { glBegin(cap); glNormal3fv(N005); glVertex3fv(P005); glNormal3fv(N059); glVertex3fv(P059); glNormal3fv(N060); glVertex3fv(P060); glNormal3fv(N006); glVertex3fv(P006); glEnd(); glBegin(cap); glNormal3fv(N015); glVertex3fv(P015); glNormal3fv(N005); glVertex3fv(P005); glNormal3fv(N006); glVertex3fv(P006); glNormal3fv(N016); glVertex3fv(P016); glEnd(); glBegin(cap); glNormal3fv(N006); glVertex3fv(P006); glNormal3fv(N060); glVertex3fv(P060); glNormal3fv(N008); glVertex3fv(P008); glEnd(); glBegin(cap); glNormal3fv(N016); glVertex3fv(P016); glNormal3fv(N006); glVertex3fv(P006); glNormal3fv(N008); glVertex3fv(P008); glEnd(); glBegin(cap); glNormal3fv(N016); glVertex3fv(P016); glNormal3fv(N008); glVertex3fv(P008); glNormal3fv(N017); glVertex3fv(P017); glEnd(); glBegin(cap); glNormal3fv(N017); glVertex3fv(P017); glNormal3fv(N008); glVertex3fv(P008); glNormal3fv(N018); glVertex3fv(P018); glEnd(); glBegin(cap); glNormal3fv(N008); glVertex3fv(P008); glNormal3fv(N009); glVertex3fv(P009); glNormal3fv(N018); glVertex3fv(P018); glEnd(); glBegin(cap); glNormal3fv(N008); glVertex3fv(P008); glNormal3fv(N060); glVertex3fv(P060); glNormal3fv(N009); glVertex3fv(P009); glEnd(); glBegin(cap); glNormal3fv(N007); glVertex3fv(P007); glNormal3fv(N010); glVertex3fv(P010); glNormal3fv(N009); glVertex3fv(P009); glEnd(); glBegin(cap); glNormal3fv(N009); glVertex3fv(P009); glNormal3fv(N019); glVertex3fv(P019); glNormal3fv(N018); glVertex3fv(P018); glEnd(); glBegin(cap); glNormal3fv(N009); glVertex3fv(P009); glNormal3fv(N010); glVertex3fv(P010); glNormal3fv(N019); glVertex3fv(P019); glEnd(); glBegin(cap); glNormal3fv(N010); glVertex3fv(P010); glNormal3fv(N020); glVertex3fv(P020); glNormal3fv(N019); glVertex3fv(P019); glEnd(); glBegin(cap); glNormal3fv(N010); glVertex3fv(P010); glNormal3fv(N011); glVertex3fv(P011); glNormal3fv(N021); glVertex3fv(P021); glNormal3fv(N020); glVertex3fv(P020); glEnd(); glBegin(cap); glNormal3fv(N004); glVertex3fv(P004); glNormal3fv(N011); glVertex3fv(P011); glNormal3fv(N010); glVertex3fv(P010); glNormal3fv(N007); glVertex3fv(P007); glEnd(); glBegin(cap); glNormal3fv(N004); glVertex3fv(P004); glNormal3fv(N012); glVertex3fv(P012); glNormal3fv(N011); glVertex3fv(P011); glEnd(); glBegin(cap); glNormal3fv(N012); glVertex3fv(P012); glNormal3fv(N022); glVertex3fv(P022); glNormal3fv(N011); glVertex3fv(P011); glEnd(); glBegin(cap); glNormal3fv(N011); glVertex3fv(P011); glNormal3fv(N022); glVertex3fv(P022); glNormal3fv(N021); glVertex3fv(P021); glEnd(); glBegin(cap); glNormal3fv(N059); glVertex3fv(P059); glNormal3fv(N005); glVertex3fv(P005); glNormal3fv(N015); glVertex3fv(P015); glEnd(); glBegin(cap); glNormal3fv(N015); glVertex3fv(P015); glNormal3fv(N014); glVertex3fv(P014); glNormal3fv(N003); glVertex3fv(P003); glEnd(); glBegin(cap); glNormal3fv(N015); glVertex3fv(P015); glNormal3fv(N003); glVertex3fv(P003); glNormal3fv(N059); glVertex3fv(P059); glEnd(); glBegin(cap); glNormal3fv(N014); glVertex3fv(P014); glNormal3fv(N013); glVertex3fv(P013); glNormal3fv(N003); glVertex3fv(P003); glEnd(); glBegin(cap); glNormal3fv(N003); glVertex3fv(P003); glNormal3fv(N012); glVertex3fv(P012); glNormal3fv(N059); glVertex3fv(P059); glEnd(); glBegin(cap); glNormal3fv(N013); glVertex3fv(P013); glNormal3fv(N012); glVertex3fv(P012); glNormal3fv(N003); glVertex3fv(P003); glEnd(); glBegin(cap); glNormal3fv(N013); glVertex3fv(P013); glNormal3fv(N022); glVertex3fv(P022); glNormal3fv(N012); glVertex3fv(P012); glEnd(); glBegin(cap); glVertex3fv(P071); glVertex3fv(P072); glVertex3fv(P073); glVertex3fv(P074); glVertex3fv(P075); glVertex3fv(P076); glEnd(); glBegin(cap); glVertex3fv(P077); glVertex3fv(P078); glVertex3fv(P079); glVertex3fv(P080); glVertex3fv(P081); glVertex3fv(P082); glEnd(); } static void Fish002(GLenum cap) { glBegin(cap); glNormal3fv(N013); glVertex3fv(P013); glNormal3fv(N014); glVertex3fv(P014); glNormal3fv(N024); glVertex3fv(P024); glNormal3fv(N023); glVertex3fv(P023); glEnd(); glBegin(cap); glNormal3fv(N014); glVertex3fv(P014); glNormal3fv(N015); glVertex3fv(P015); glNormal3fv(N025); glVertex3fv(P025); glNormal3fv(N024); glVertex3fv(P024); glEnd(); glBegin(cap); glNormal3fv(N016); glVertex3fv(P016); glNormal3fv(N017); glVertex3fv(P017); glNormal3fv(N027); glVertex3fv(P027); glNormal3fv(N026); glVertex3fv(P026); glEnd(); glBegin(cap); glNormal3fv(N017); glVertex3fv(P017); glNormal3fv(N018); glVertex3fv(P018); glNormal3fv(N028); glVertex3fv(P028); glNormal3fv(N027); glVertex3fv(P027); glEnd(); glBegin(cap); glNormal3fv(N020); glVertex3fv(P020); glNormal3fv(N021); glVertex3fv(P021); glNormal3fv(N031); glVertex3fv(P031); glNormal3fv(N030); glVertex3fv(P030); glEnd(); glBegin(cap); glNormal3fv(N013); glVertex3fv(P013); glNormal3fv(N023); glVertex3fv(P023); glNormal3fv(N022); glVertex3fv(P022); glEnd(); glBegin(cap); glNormal3fv(N022); glVertex3fv(P022); glNormal3fv(N023); glVertex3fv(P023); glNormal3fv(N032); glVertex3fv(P032); glEnd(); glBegin(cap); glNormal3fv(N022); glVertex3fv(P022); glNormal3fv(N032); glVertex3fv(P032); glNormal3fv(N031); glVertex3fv(P031); glEnd(); glBegin(cap); glNormal3fv(N022); glVertex3fv(P022); glNormal3fv(N031); glVertex3fv(P031); glNormal3fv(N021); glVertex3fv(P021); glEnd(); glBegin(cap); glNormal3fv(N018); glVertex3fv(P018); glNormal3fv(N019); glVertex3fv(P019); glNormal3fv(N029); glVertex3fv(P029); glEnd(); glBegin(cap); glNormal3fv(N018); glVertex3fv(P018); glNormal3fv(N029); glVertex3fv(P029); glNormal3fv(N028); glVertex3fv(P028); glEnd(); glBegin(cap); glNormal3fv(N019); glVertex3fv(P019); glNormal3fv(N020); glVertex3fv(P020); glNormal3fv(N030); glVertex3fv(P030); glEnd(); glBegin(cap); glNormal3fv(N019); glVertex3fv(P019); glNormal3fv(N030); glVertex3fv(P030); glNormal3fv(N029); glVertex3fv(P029); glEnd(); } static void Fish003(GLenum cap) { glBegin(cap); glNormal3fv(N032); glVertex3fv(P032); glNormal3fv(N023); glVertex3fv(P023); glNormal3fv(N033); glVertex3fv(P033); glNormal3fv(N042); glVertex3fv(P042); glEnd(); glBegin(cap); glNormal3fv(N031); glVertex3fv(P031); glNormal3fv(N032); glVertex3fv(P032); glNormal3fv(N042); glVertex3fv(P042); glNormal3fv(N041); glVertex3fv(P041); glEnd(); glBegin(cap); glNormal3fv(N023); glVertex3fv(P023); glNormal3fv(N024); glVertex3fv(P024); glNormal3fv(N034); glVertex3fv(P034); glNormal3fv(N033); glVertex3fv(P033); glEnd(); glBegin(cap); glNormal3fv(N024); glVertex3fv(P024); glNormal3fv(N025); glVertex3fv(P025); glNormal3fv(N035); glVertex3fv(P035); glNormal3fv(N034); glVertex3fv(P034); glEnd(); glBegin(cap); glNormal3fv(N030); glVertex3fv(P030); glNormal3fv(N031); glVertex3fv(P031); glNormal3fv(N041); glVertex3fv(P041); glNormal3fv(N040); glVertex3fv(P040); glEnd(); glBegin(cap); glNormal3fv(N025); glVertex3fv(P025); glNormal3fv(N026); glVertex3fv(P026); glNormal3fv(N036); glVertex3fv(P036); glNormal3fv(N035); glVertex3fv(P035); glEnd(); glBegin(cap); glNormal3fv(N026); glVertex3fv(P026); glNormal3fv(N027); glVertex3fv(P027); glNormal3fv(N037); glVertex3fv(P037); glNormal3fv(N036); glVertex3fv(P036); glEnd(); glBegin(cap); glNormal3fv(N027); glVertex3fv(P027); glNormal3fv(N028); glVertex3fv(P028); glNormal3fv(N038); glVertex3fv(P038); glNormal3fv(N037); glVertex3fv(P037); glEnd(); glBegin(cap); glNormal3fv(N028); glVertex3fv(P028); glNormal3fv(N029); glVertex3fv(P029); glNormal3fv(N039); glVertex3fv(P039); glNormal3fv(N038); glVertex3fv(P038); glEnd(); glBegin(cap); glNormal3fv(N029); glVertex3fv(P029); glNormal3fv(N030); glVertex3fv(P030); glNormal3fv(N040); glVertex3fv(P040); glNormal3fv(N039); glVertex3fv(P039); glEnd(); } static void Fish004(GLenum cap) { glBegin(cap); glNormal3fv(N040); glVertex3fv(P040); glNormal3fv(N041); glVertex3fv(P041); glNormal3fv(N051); glVertex3fv(P051); glNormal3fv(N050); glVertex3fv(P050); glEnd(); glBegin(cap); glNormal3fv(N041); glVertex3fv(P041); glNormal3fv(N042); glVertex3fv(P042); glNormal3fv(N052); glVertex3fv(P052); glNormal3fv(N051); glVertex3fv(P051); glEnd(); glBegin(cap); glNormal3fv(N042); glVertex3fv(P042); glNormal3fv(N033); glVertex3fv(P033); glNormal3fv(N043); glVertex3fv(P043); glNormal3fv(N052); glVertex3fv(P052); glEnd(); glBegin(cap); glNormal3fv(N033); glVertex3fv(P033); glNormal3fv(N034); glVertex3fv(P034); glNormal3fv(N044); glVertex3fv(P044); glNormal3fv(N043); glVertex3fv(P043); glEnd(); glBegin(cap); glNormal3fv(N034); glVertex3fv(P034); glNormal3fv(N035); glVertex3fv(P035); glNormal3fv(N045); glVertex3fv(P045); glNormal3fv(N044); glVertex3fv(P044); glEnd(); glBegin(cap); glNormal3fv(N035); glVertex3fv(P035); glNormal3fv(N036); glVertex3fv(P036); glNormal3fv(N046); glVertex3fv(P046); glNormal3fv(N045); glVertex3fv(P045); glEnd(); glBegin(cap); glNormal3fv(N036); glVertex3fv(P036); glNormal3fv(N037); glVertex3fv(P037); glNormal3fv(N047); glVertex3fv(P047); glNormal3fv(N046); glVertex3fv(P046); glEnd(); glBegin(cap); glNormal3fv(N037); glVertex3fv(P037); glNormal3fv(N038); glVertex3fv(P038); glNormal3fv(N048); glVertex3fv(P048); glNormal3fv(N047); glVertex3fv(P047); glEnd(); glBegin(cap); glNormal3fv(N038); glVertex3fv(P038); glNormal3fv(N039); glVertex3fv(P039); glNormal3fv(N049); glVertex3fv(P049); glNormal3fv(N048); glVertex3fv(P048); glEnd(); glBegin(cap); glNormal3fv(N039); glVertex3fv(P039); glNormal3fv(N040); glVertex3fv(P040); glNormal3fv(N050); glVertex3fv(P050); glNormal3fv(N049); glVertex3fv(P049); glEnd(); glBegin(cap); glNormal3fv(N070); glVertex3fv(P070); glNormal3fv(N061); glVertex3fv(P061); glNormal3fv(N002); glVertex3fv(P002); glEnd(); glBegin(cap); glNormal3fv(N061); glVertex3fv(P061); glNormal3fv(N046); glVertex3fv(P046); glNormal3fv(N002); glVertex3fv(P002); glEnd(); glBegin(cap); glNormal3fv(N045); glVertex3fv(P045); glNormal3fv(N046); glVertex3fv(P046); glNormal3fv(N061); glVertex3fv(P061); glEnd(); glBegin(cap); glNormal3fv(N002); glVertex3fv(P002); glNormal3fv(N061); glVertex3fv(P061); glNormal3fv(N070); glVertex3fv(P070); glEnd(); glBegin(cap); glNormal3fv(N002); glVertex3fv(P002); glNormal3fv(N045); glVertex3fv(P045); glNormal3fv(N061); glVertex3fv(P061); glEnd(); } static void Fish005(GLenum cap) { glBegin(cap); glNormal3fv(N002); glVertex3fv(P002); glNormal3fv(N044); glVertex3fv(P044); glNormal3fv(N045); glVertex3fv(P045); glEnd(); glBegin(cap); glNormal3fv(N002); glVertex3fv(P002); glNormal3fv(N043); glVertex3fv(P043); glNormal3fv(N044); glVertex3fv(P044); glEnd(); glBegin(cap); glNormal3fv(N002); glVertex3fv(P002); glNormal3fv(N052); glVertex3fv(P052); glNormal3fv(N043); glVertex3fv(P043); glEnd(); glBegin(cap); glNormal3fv(N002); glVertex3fv(P002); glNormal3fv(N051); glVertex3fv(P051); glNormal3fv(N052); glVertex3fv(P052); glEnd(); glBegin(cap); glNormal3fv(N002); glVertex3fv(P002); glNormal3fv(N046); glVertex3fv(P046); glNormal3fv(N047); glVertex3fv(P047); glEnd(); glBegin(cap); glNormal3fv(N002); glVertex3fv(P002); glNormal3fv(N047); glVertex3fv(P047); glNormal3fv(N048); glVertex3fv(P048); glEnd(); glBegin(cap); glNormal3fv(N002); glVertex3fv(P002); glNormal3fv(N048); glVertex3fv(P048); glNormal3fv(N049); glVertex3fv(P049); glEnd(); glBegin(cap); glNormal3fv(N002); glVertex3fv(P002); glNormal3fv(N049); glVertex3fv(P049); glNormal3fv(N050); glVertex3fv(P050); glEnd(); glBegin(cap); glNormal3fv(N050); glVertex3fv(P050); glNormal3fv(N051); glVertex3fv(P051); glNormal3fv(N069); glVertex3fv(P069); glEnd(); glBegin(cap); glNormal3fv(N051); glVertex3fv(P051); glNormal3fv(N002); glVertex3fv(P002); glNormal3fv(N069); glVertex3fv(P069); glEnd(); glBegin(cap); glNormal3fv(N050); glVertex3fv(P050); glNormal3fv(N069); glVertex3fv(P069); glNormal3fv(N002); glVertex3fv(P002); glEnd(); } static void Fish006(GLenum cap) { glBegin(cap); glNormal3fv(N066); glVertex3fv(P066); glNormal3fv(N016); glVertex3fv(P016); glNormal3fv(N026); glVertex3fv(P026); glEnd(); glBegin(cap); glNormal3fv(N015); glVertex3fv(P015); glNormal3fv(N066); glVertex3fv(P066); glNormal3fv(N025); glVertex3fv(P025); glEnd(); glBegin(cap); glNormal3fv(N025); glVertex3fv(P025); glNormal3fv(N066); glVertex3fv(P066); glNormal3fv(N026); glVertex3fv(P026); glEnd(); glBegin(cap); glNormal3fv(N066); glVertex3fv(P066); glNormal3fv(N058); glVertex3fv(P058); glNormal3fv(N016); glVertex3fv(P016); glEnd(); glBegin(cap); glNormal3fv(N015); glVertex3fv(P015); glNormal3fv(N058); glVertex3fv(P058); glNormal3fv(N066); glVertex3fv(P066); glEnd(); glBegin(cap); glNormal3fv(N058); glVertex3fv(P058); glNormal3fv(N015); glVertex3fv(P015); glNormal3fv(N016); glVertex3fv(P016); glEnd(); } static void Fish007(GLenum cap) { glBegin(cap); glNormal3fv(N062); glVertex3fv(P062); glNormal3fv(N022); glVertex3fv(P022); glNormal3fv(N032); glVertex3fv(P032); glEnd(); glBegin(cap); glNormal3fv(N062); glVertex3fv(P062); glNormal3fv(N032); glVertex3fv(P032); glNormal3fv(N064); glVertex3fv(P064); glEnd(); glBegin(cap); glNormal3fv(N022); glVertex3fv(P022); glNormal3fv(N062); glVertex3fv(P062); glNormal3fv(N032); glVertex3fv(P032); glEnd(); glBegin(cap); glNormal3fv(N062); glVertex3fv(P062); glNormal3fv(N064); glVertex3fv(P064); glNormal3fv(N032); glVertex3fv(P032); glEnd(); } static void Fish008(GLenum cap) { glBegin(cap); glNormal3fv(N063); glVertex3fv(P063); glNormal3fv(N019); glVertex3fv(P019); glNormal3fv(N029); glVertex3fv(P029); glEnd(); glBegin(cap); glNormal3fv(N019); glVertex3fv(P019); glNormal3fv(N063); glVertex3fv(P063); glNormal3fv(N029); glVertex3fv(P029); glEnd(); glBegin(cap); glNormal3fv(N063); glVertex3fv(P063); glNormal3fv(N029); glVertex3fv(P029); glNormal3fv(N065); glVertex3fv(P065); glEnd(); glBegin(cap); glNormal3fv(N063); glVertex3fv(P063); glNormal3fv(N065); glVertex3fv(P065); glNormal3fv(N029); glVertex3fv(P029); glEnd(); } static void Fish009(GLenum cap) { glBegin(cap); glVertex3fv(P059); glVertex3fv(P012); glVertex3fv(P009); glVertex3fv(P060); glEnd(); glBegin(cap); glVertex3fv(P012); glVertex3fv(P004); glVertex3fv(P007); glVertex3fv(P009); glEnd(); } static void Fish_1(GLenum cap) { Fish004(cap); Fish005(cap); Fish003(cap); Fish007(cap); Fish006(cap); Fish002(cap); Fish008(cap); Fish009(cap); Fish001(cap); } static void Fish_2(GLenum cap) { Fish005(cap); Fish004(cap); Fish003(cap); Fish008(cap); Fish006(cap); Fish002(cap); Fish007(cap); Fish009(cap); Fish001(cap); } static void Fish_3(GLenum cap) { Fish005(cap); Fish004(cap); Fish007(cap); Fish003(cap); Fish002(cap); Fish008(cap); Fish009(cap); Fish001(cap); Fish006(cap); } static void Fish_4(GLenum cap) { Fish005(cap); Fish004(cap); Fish008(cap); Fish003(cap); Fish002(cap); Fish007(cap); Fish009(cap); Fish001(cap); Fish006(cap); } static void Fish_5(GLenum cap) { Fish009(cap); Fish006(cap); Fish007(cap); Fish001(cap); Fish002(cap); Fish003(cap); Fish008(cap); Fish004(cap); Fish005(cap); } static void Fish_6(GLenum cap) { Fish009(cap); Fish006(cap); Fish008(cap); Fish001(cap); Fish002(cap); Fish007(cap); Fish003(cap); Fish004(cap); Fish005(cap); } static void Fish_7(GLenum cap) { Fish009(cap); Fish001(cap); Fish007(cap); Fish005(cap); Fish002(cap); Fish008(cap); Fish003(cap); Fish004(cap); Fish006(cap); } static void Fish_8(GLenum cap) { Fish009(cap); Fish008(cap); Fish001(cap); Fish002(cap); Fish007(cap); Fish003(cap); Fish005(cap); Fish004(cap); Fish006(cap); } void DrawShark(fishRec * fish, int wire) { float mat[4][4]; int n; float seg1, seg2, seg3, seg4, segup; float thrash, chomp; GLenum cap; fish->htail = (int) (fish->htail - (int) (5 * fish->v)) % 360; thrash = 50 * fish->v; seg1 = 0.6 * thrash * sin(fish->htail * RRAD); seg2 = 1.8 * thrash * sin((fish->htail + 45) * RRAD); seg3 = 3 * thrash * sin((fish->htail + 90) * RRAD); seg4 = 4 * thrash * sin((fish->htail + 110) * RRAD); chomp = 0; if (fish->v > 2) { chomp = -(fish->v - 2) * 200; } P004[1] = iP004[1] + chomp; P007[1] = iP007[1] + chomp; P010[1] = iP010[1] + chomp; P011[1] = iP011[1] + chomp; P023[0] = iP023[0] + seg1; P024[0] = iP024[0] + seg1; P025[0] = iP025[0] + seg1; P026[0] = iP026[0] + seg1; P027[0] = iP027[0] + seg1; P028[0] = iP028[0] + seg1; P029[0] = iP029[0] + seg1; P030[0] = iP030[0] + seg1; P031[0] = iP031[0] + seg1; P032[0] = iP032[0] + seg1; P033[0] = iP033[0] + seg2; P034[0] = iP034[0] + seg2; P035[0] = iP035[0] + seg2; P036[0] = iP036[0] + seg2; P037[0] = iP037[0] + seg2; P038[0] = iP038[0] + seg2; P039[0] = iP039[0] + seg2; P040[0] = iP040[0] + seg2; P041[0] = iP041[0] + seg2; P042[0] = iP042[0] + seg2; P043[0] = iP043[0] + seg3; P044[0] = iP044[0] + seg3; P045[0] = iP045[0] + seg3; P046[0] = iP046[0] + seg3; P047[0] = iP047[0] + seg3; P048[0] = iP048[0] + seg3; P049[0] = iP049[0] + seg3; P050[0] = iP050[0] + seg3; P051[0] = iP051[0] + seg3; P052[0] = iP052[0] + seg3; P002[0] = iP002[0] + seg4; P061[0] = iP061[0] + seg4; P069[0] = iP069[0] + seg4; P070[0] = iP070[0] + seg4; fish->vtail += ((fish->dtheta - fish->vtail) * 0.1); if (fish->vtail > 0.5) { fish->vtail = 0.5; } else if (fish->vtail < -0.5) { fish->vtail = -0.5; } segup = thrash * fish->vtail; P023[1] = iP023[1] + segup; P024[1] = iP024[1] + segup; P025[1] = iP025[1] + segup; P026[1] = iP026[1] + segup; P027[1] = iP027[1] + segup; P028[1] = iP028[1] + segup; P029[1] = iP029[1] + segup; P030[1] = iP030[1] + segup; P031[1] = iP031[1] + segup; P032[1] = iP032[1] + segup; P033[1] = iP033[1] + segup * 5; P034[1] = iP034[1] + segup * 5; P035[1] = iP035[1] + segup * 5; P036[1] = iP036[1] + segup * 5; P037[1] = iP037[1] + segup * 5; P038[1] = iP038[1] + segup * 5; P039[1] = iP039[1] + segup * 5; P040[1] = iP040[1] + segup * 5; P041[1] = iP041[1] + segup * 5; P042[1] = iP042[1] + segup * 5; P043[1] = iP043[1] + segup * 12; P044[1] = iP044[1] + segup * 12; P045[1] = iP045[1] + segup * 12; P046[1] = iP046[1] + segup * 12; P047[1] = iP047[1] + segup * 12; P048[1] = iP048[1] + segup * 12; P049[1] = iP049[1] + segup * 12; P050[1] = iP050[1] + segup * 12; P051[1] = iP051[1] + segup * 12; P052[1] = iP052[1] + segup * 12; P002[1] = iP002[1] + segup * 17; P061[1] = iP061[1] + segup * 17; P069[1] = iP069[1] + segup * 17; P070[1] = iP070[1] + segup * 17; glPushMatrix(); glTranslatef(0, 0, -3000); glGetFloatv(GL_MODELVIEW_MATRIX, &mat[0][0]); n = 0; if (mat[0][2] >= 0) { n += 1; } if (mat[1][2] >= 0) { n += 2; } if (mat[2][2] >= 0) { n += 4; } glScalef(2, 1, 1); glEnable(GL_CULL_FACE); cap = wire ? GL_LINE_LOOP : GL_POLYGON; switch (n) { case 0: Fish_1(cap); break; case 1: Fish_2(cap); break; case 2: Fish_3(cap); break; case 3: Fish_4(cap); break; case 4: Fish_5(cap); break; case 5: Fish_6(cap); break; case 6: Fish_7(cap); break; case 7: Fish_8(cap); break; } glDisable(GL_CULL_FACE); glPopMatrix(); } #endif xscreensaver-5.36/hacks/glx/sproingies.c000644 000767 000024 00000055047 12706020235 020357 0ustar00jwzstaff000000 000000 /* -*- Mode: C; tab-width: 4 -*- */ /* sproingies.c - 3D sproingies */ #if 0 static const char sccsid[] = "@(#)sproingies.c 4.04 97/07/28 xlockmore"; #endif /*- * sproingies.c - Copyright 1996 by Ed Mackey, freely distributable. * * Permission to use, copy, modify, and distribute this software and its * documentation for any purpose and without fee is hereby granted, * provided that the above copyright notice appear in all copies and that * both that copyright notice and this permission notice appear in * supporting documentation. * * This file is provided AS IS with no warranties of any kind. The author * shall have no liability with respect to the infringement of copyrights, * trade secrets or any patents by this file or any part thereof. In no * event will the author be liable for any lost revenue or profits or * other special, indirect and consequential damages. * * Revision History: * See sproingiewrap.c */ #ifdef HAVE_CONFIG_H # include "config.h" #endif /* HAVE_CONFIG_H */ #ifdef STANDALONE # include "xlockmoreI.h" /* from the xscreensaver distribution */ #else /* !STANDALONE */ # include "xlock.h" /* from the xlockmore distribution */ #endif /* !STANDALONE */ #ifdef USE_GL #if !defined(HAVE_JWZGLES) && !defined(HAVE_COCOA) # include #endif #include "gllist.h" #include "sproingies.h" #define MAXSPROING 100 #define TARGET_COUNT 40 #define BOOM_FRAME 50 #define NO_FRAME (-10) #define RESET_SPROINGIE_LIFE (-30 + myrand(28)) #define NEW_SPROINGIE_LIFE (40 + myrand(200)) #define JUMP_LEFT 0 #define JUMP_RIGHT 1 #define FIRST_FRAME 0 #define LAST_FRAME 5 /*- * The sproingies have six "real" frames, (s1_1 to s1_6) that show a * sproingie jumping off a block, headed down and to the right. * The frames are numbered from 0 (FIRST_FRAME) to 5 (LAST_FRAME). * * There are other frame numbers for special cases (e.g. BOOM_FRAME). */ struct sPosColor { /* Position and color of the sproingie */ int x, y, z; /* Position */ int frame; /* Current frame (0-5) */ int life; /* Life points */ GLfloat r, g, b; /* Color RGB */ int direction; /* Direction of next hop (left or right) */ }; typedef struct { int rotx, roty, dist, wireframe, flatshade, groundlevel, maxsproingies, mono; int sframe, target_rx, target_ry, target_dist, target_count; const struct gllist *sproingies[6]; const struct gllist *SproingieBoom; GLuint TopsSides; struct sPosColor *positions; } sp_instance; static sp_instance *si_list = NULL; static int active_screens = 0; extern const struct gllist *s1_1; extern const struct gllist *s1_2; extern const struct gllist *s1_3; extern const struct gllist *s1_4; extern const struct gllist *s1_5; extern const struct gllist *s1_6; extern const struct gllist *s1_b; static int myrand(int range) { return ((int) (((float) range) * LRAND() / (MAXRAND))); } static int smart_sproingies = 0; static GLuint build_TopsSides(int wireframe) { GLuint dl_num; GLfloat mat_color[4] = {0.0, 0.0, 0.0, 1.0}; dl_num = glGenLists(2); if (!dl_num) return (0); /* 0 means out of display lists. */ /* Surface: Tops */ glNewList(dl_num, GL_COMPILE); mat_color[0] = 0.392157; mat_color[1] = 0.784314; mat_color[2] = 0.941176; if (wireframe) glColor3fv(mat_color); else { glMaterialfv(GL_FRONT, GL_AMBIENT_AND_DIFFUSE, mat_color); } glEndList(); /* Surface: Sides */ glNewList(dl_num + 1, GL_COMPILE); if (wireframe) glColor3fv(mat_color); else { /* jwz: in wireframe mode, color tops and sides the same. */ mat_color[0] = 0.156863; mat_color[1] = 0.156863; mat_color[2] = 0.392157; glMaterialfv(GL_FRONT, GL_AMBIENT_AND_DIFFUSE, mat_color); } glEndList(); return (dl_num); } static void LayGround(int sx, int sy, int sz, int width, int height, sp_instance * si) { int x, y, z, w, h; GLenum begin_polygon; if (si->wireframe) begin_polygon = GL_LINE_LOOP; else begin_polygon = GL_POLYGON; if (!si->wireframe) { if (!si->mono) glCallList(si->TopsSides); /* Render the tops */ glNormal3f(0.0, 1.0, 0.0); for (h = 0; h < height; ++h) { x = sx + h; y = sy - (h << 1); z = sz + h; for (w = 0; w < width; ++w) { glBegin(begin_polygon); glVertex3i(x, y, z); glVertex3i(x, y, z - 1); glVertex3i(x + 1, y, z - 1); glVertex3i(x + 1, y, z); glEnd(); glBegin(begin_polygon); glVertex3i(x + 1, y - 1, z); glVertex3i(x + 1, y - 1, z - 1); glVertex3i(x + 2, y - 1, z - 1); glVertex3i(x + 2, y - 1, z); glEnd(); ++x; --z; } } } if (!si->mono) glCallList(si->TopsSides + 1); /* Render the sides */ if (!si->wireframe) glNormal3f(0.0, 0.0, 1.0); for (h = 0; h < height; ++h) { x = sx + h; y = sy - (h << 1); z = sz + h; for (w = 0; w < width; ++w) { glBegin(begin_polygon); glVertex3i(x, y, z); glVertex3i(x + 1, y, z); glVertex3i(x + 1, y - 1, z); glVertex3i(x, y - 1, z); glEnd(); glBegin(begin_polygon); glVertex3i(x + 1, y - 1, z); glVertex3i(x + 2, y - 1, z); glVertex3i(x + 2, y - 2, z); glVertex3i(x + 1, y - 2, z); /*- * PURIFY 4.0.1 reports an unitialized memory read on the next line when using * MesaGL 2.2 and -mono. This has been fixed in MesaGL 2.3 and later. */ glEnd(); ++x; --z; } } /* Render the other sides */ if (!si->wireframe) glNormal3f(1.0, 0.0, 0.0); for (h = 0; h < height; ++h) { x = sx + h; y = sy - (h << 1); z = sz + h; for (w = 0; w < width; ++w) { glBegin(begin_polygon); glVertex3i(x + 1, y, z); glVertex3i(x + 1, y, z - 1); glVertex3i(x + 1, y - 1, z - 1); glVertex3i(x + 1, y - 1, z); glEnd(); glBegin(begin_polygon); glVertex3i(x + 2, y - 1, z); glVertex3i(x + 2, y - 1, z - 1); glVertex3i(x + 2, y - 2, z - 1); glVertex3i(x + 2, y - 2, z); glEnd(); ++x; --z; } } if (si->wireframe) { if (!si->mono) glCallList(si->TopsSides); /* Render the tops */ for (h = 0; h < height; ++h) { x = sx + h; y = sy - (h << 1); z = sz + h; for (w = 0; w < width; ++w) { glBegin(begin_polygon); glVertex3i(x, y, z); glVertex3i(x, y, z - 1); glVertex3i(x + 1, y, z - 1); glVertex3i(x + 1, y, z); glEnd(); glBegin(begin_polygon); glVertex3i(x + 1, y - 1, z); glVertex3i(x + 1, y - 1, z - 1); glVertex3i(x + 2, y - 1, z - 1); glVertex3i(x + 2, y - 1, z); glEnd(); ++x; --z; } } } } static void AdvanceSproingie(int t, sp_instance * si) { int g_higher, g_back, t2; struct sPosColor *thisSproingie = &(si->positions[t]); struct sPosColor *S2 = &(si->positions[0]); if (thisSproingie->life > 0) { if ((++(thisSproingie->frame)) > LAST_FRAME) { if (thisSproingie->frame >= BOOM_FRAME) { if ((thisSproingie->r -= 0.08) < 0.0) thisSproingie->r = 0.0; if ((thisSproingie->g -= 0.08) < 0.0) thisSproingie->g = 0.0; if ((thisSproingie->b -= 0.08) < 0.0) thisSproingie->b = 0.0; if ((--(thisSproingie->life)) < 1) { thisSproingie->life = RESET_SPROINGIE_LIFE; } return; } thisSproingie->frame = FIRST_FRAME; /* Check for collisions */ for (t2 = 0; t2 < si->maxsproingies; ++t2) { if ((t2 != t) && (thisSproingie->x == S2->x) && (thisSproingie->y == S2->y) && (thisSproingie->z == S2->z) && (S2->life > 10) && (S2->frame < LAST_FRAME + 1)) { #if 0 if (thisSproingie->life > S2->life) { S2->life = 10; } else { #endif if (thisSproingie->life > 10) { thisSproingie->life = 10; thisSproingie->frame = BOOM_FRAME; if ((thisSproingie->r += 0.5) > 1.0) thisSproingie->r = 1.0; if ((thisSproingie->g += 0.5) > 1.0) thisSproingie->g = 1.0; if ((thisSproingie->b += 0.5) > 1.0) thisSproingie->b = 1.0; } #if 0 } #endif } ++S2; } } /* Time to disappear... */ if (!((thisSproingie->life == 10) && (thisSproingie->frame > FIRST_FRAME) && (thisSproingie->frame < BOOM_FRAME))) { if ((--(thisSproingie->life)) < 1) { thisSproingie->life = RESET_SPROINGIE_LIFE; } else if (thisSproingie->life < 9) { thisSproingie->frame -= 2; } } /* ... else wait here for frame FIRST_FRAME to come about. */ } else if (++(thisSproingie->life) >= 0) { if (1 || t > 1) { g_higher = -3 + myrand(5); g_back = -2 + myrand(5); } else if (t == 1) { g_higher = -2 + myrand(3); g_back = -1 + myrand(3); } else { g_higher = -1; g_back = 0; } thisSproingie->x = (-g_higher - g_back); thisSproingie->y = (g_higher << 1); thisSproingie->z = (g_back - g_higher); thisSproingie->life = NEW_SPROINGIE_LIFE; thisSproingie->frame = NO_FRAME; thisSproingie->r = (GLfloat) (40 + myrand(200)) / 255.0; thisSproingie->g = (GLfloat) (40 + myrand(200)) / 255.0; thisSproingie->b = (GLfloat) (40 + myrand(200)) / 255.0; for (t2 = 0; t2 < si->maxsproingies; ++t2) { if ((t2 != t) && (thisSproingie->x == S2->x) && (thisSproingie->y == S2->y) && (thisSproingie->z == S2->z) && (S2->life > 10) && (S2->frame < FIRST_FRAME)) { /* If another is already on this place, wait. */ thisSproingie->life = -1; } ++S2; } } } static void NextSproingie(int screen) { sp_instance *si = &si_list[screen]; int ddx, t; struct sPosColor *thisSproingie = &(si->positions[0]); /* Although the sproingies cycle has six frames, the blocks cycle */ /* has twelve. After a full cycle (12 frames), re-center positions */ /* of sproingies */ if (++si->sframe > 11) { si->sframe = FIRST_FRAME; for (t = 0; t < si->maxsproingies; ++t) { thisSproingie->x -= 1; thisSproingie->y += 2; thisSproingie->z -= 1; ++thisSproingie; } } for (t = 0; t < si->maxsproingies; ++t) { AdvanceSproingie(t, si); } if (si->target_count < 0) { /* track to current target */ if (si->target_rx < si->rotx) --si->rotx; else if (si->target_rx > si->rotx) ++si->rotx; if (si->target_ry < si->roty) --si->roty; else if (si->target_ry > si->roty) ++si->roty; ddx = (si->target_dist - si->dist) / 8; if (ddx) si->dist += ddx; else if (si->target_dist < si->dist) --si->dist; else if (si->target_dist > si->dist) ++si->dist; if ((si->target_rx == si->rotx) && (si->target_ry == si->roty) && (si->target_dist == si->dist)) { si->target_count = TARGET_COUNT; if (si->target_dist <= 32) si->target_count >>= 2; } } else if (--si->target_count < 0) { /* make up new target */ si->target_rx = myrand(100) - 35; si->target_ry = -myrand(90); si->target_dist = 32 << myrand(2); /* could be 32, 64, or 128, (previously or 256) */ if (si->target_dist >= si->dist) /* no duplicate distances */ si->target_dist <<= 1; } /* Otherwise just hang loose for a while here */ } #ifdef __AUXFUNCS__ void PrintEm(void) { int t, count = 0; for (t = 0; t < maxsproingies; ++t) { if (positions[t].life > 0) ++count; } (void) printf("RotX: %d, RotY: %d, Dist: %d. Targets: X %d, Y %d, D %d. Visible: %d\n", rotx, roty, dist, target_rx, target_ry, target_dist, count); } void ResetEm(void) { int t; for (t = 0; t < maxsproingies; ++t) { positions[t].x = 0; positions[t].y = 0; positions[t].z = 0; positions[t].life = -2; positions[t].frame = FIRST_FRAME; } } void distAdd(void) { if (dist < (1 << 16 << 4)) dist <<= 1; } void distSubtract(void) { if (dist > 1) dist >>= 1; } void rotxAdd(void) { rotx = (rotx + 5) % 360; } void rotxSubtract(void) { rotx = (rotx - 5) % 360; } void rotyAdd(void) { roty = (roty + 5) % 360; } void rotySubtract(void) { roty = (roty - 5) % 360; } void rotxBAdd(void) { rotx = (rotx + 45) % 360; } void rotxBSubtract(void) { rotx = (rotx - 45) % 360; } void rotyBAdd(void) { roty = (roty + 45) % 360; } void rotyBSubtract(void) { roty = (roty - 45) % 360; } #endif /* __AUXFUNCS__ */ static void RenderSproingie(int t, sp_instance * si) { GLfloat scale, pointsize, mat_color[4] = {0.0, 0.0, 0.0, 1.0}; #ifndef HAVE_JWZGLES GLdouble clipplane[4] = {0.0, 1.0, 0.0, 0.0}; #endif struct sPosColor *thisSproingie = &(si->positions[t]); if (thisSproingie->life < 1) return; glPushMatrix(); if (!si->mono) { mat_color[0] = thisSproingie->r; mat_color[1] = thisSproingie->g; mat_color[2] = thisSproingie->b; if (si->wireframe) glColor3fv(mat_color); else { glMaterialfv(GL_FRONT, GL_AMBIENT_AND_DIFFUSE, mat_color); } } if (thisSproingie->frame < FIRST_FRAME) { glEnable(GL_CLIP_PLANE0); glTranslatef((GLfloat) (thisSproingie->x), (GLfloat) (thisSproingie->y) + ((GLfloat) (thisSproingie->frame) / 9.0), (GLfloat) (thisSproingie->z)); #ifndef HAVE_JWZGLES /* OpenGLES doesn't have this but it doesn't seem to matter */ clipplane[3] = ((GLdouble) (thisSproingie->frame) / 9.0) + (si->wireframe ? 0.0 : 0.1); glClipPlane(GL_CLIP_PLANE0, clipplane); #endif /** glCallList(si->sproingies[0]);*/ /**/ renderList(si->sproingies[0], si->wireframe); glDisable(GL_CLIP_PLANE0); } else if (thisSproingie->frame >= BOOM_FRAME) { glTranslatef((GLfloat) (thisSproingie->x) + 0.5, (GLfloat) (thisSproingie->y) + 0.5, (GLfloat) (thisSproingie->z) - 0.5); { int boom_scale = thisSproingie->frame - BOOM_FRAME; if (boom_scale >= 31) boom_scale = 31; scale = (GLfloat) (1 << boom_scale); } glScalef(scale, scale, scale); if (!si->wireframe) { if (!si->mono) glColor3fv(mat_color); glDisable(GL_LIGHTING); } pointsize = (GLfloat) ((BOOM_FRAME + 8) - thisSproingie->frame) - (si->dist / 64.0); glPointSize((pointsize < 1.0) ? 1.0 : pointsize); /*- * PURIFY 4.0.1 reports an unitialized memory read on the next line when using * MesaGL 2.2. This has been tracked to MesaGL 2.2 src/points.c line 313. */ /** glCallList(si->SproingieBoom);*/ /**/ renderList(si->SproingieBoom, si->wireframe); glPointSize(1.0); if (!si->wireframe) { glEnable(GL_LIGHTING); } } else { if (thisSproingie->direction == JUMP_LEFT) { /* When the sproingie jumps to the left, the frames must be */ /* rotated and translated */ glTranslatef((GLfloat) (thisSproingie->x ), (GLfloat) (thisSproingie->y ), (GLfloat) (thisSproingie->z - 1)); glRotatef((GLfloat) - 90.0, 0.0, 1.0, 0.0); if (thisSproingie->frame == LAST_FRAME) { thisSproingie->x -= 0; thisSproingie->y -= 1; thisSproingie->z += 1; } } else { glTranslatef((GLfloat) (thisSproingie->x), (GLfloat) (thisSproingie->y), (GLfloat) (thisSproingie->z)); glRotatef((GLfloat) - 0.0, 0.0, 1.0, 0.0); if (thisSproingie->frame == LAST_FRAME) { thisSproingie->x += 1; thisSproingie->y -= 1; thisSproingie->z -= 0; } } /* } */ /** glCallList(si->sproingies[thisSproingie->frame]);*/ /**/ renderList(si->sproingies[thisSproingie->frame], si->wireframe); /* Every 6 frame cycle... */ if (thisSproingie->frame == LAST_FRAME) { /* ...check if the sproingies have gone out of the bricks */ if (((thisSproingie->x - thisSproingie->z == 6) && (2*thisSproingie->x + thisSproingie->y == 6)) || ((thisSproingie->z - thisSproingie->x == 5) && (2*thisSproingie->x + thisSproingie->y == -5))) { /* If they have, then they die */ if (thisSproingie->life > 0 && thisSproingie->frame < BOOM_FRAME && thisSproingie->frame > FIRST_FRAME) { thisSproingie->frame = BOOM_FRAME; } } else { /* If not, they choose a direction for the next hop */ if (smart_sproingies) { if ((thisSproingie->x - thisSproingie->z == 5) && (2*thisSproingie->x + thisSproingie->y == 5)) { thisSproingie->direction = JUMP_LEFT; } else if ((thisSproingie->z - thisSproingie->x == 4) && (2*thisSproingie->x + thisSproingie->y == -4)) { thisSproingie->direction = JUMP_RIGHT; } else { thisSproingie->direction = myrand(2); } } else { thisSproingie->direction = myrand(2); } } } } glPopMatrix(); } static void ComputeGround(sp_instance * si) { int g_higher, g_back, g_width, g_height; /* higher: x-1, y+2, z-1 */ /* back: x-1, y, z+1 */ if (si->groundlevel == 0) { g_back = 2; g_width = 5; } else if (si->groundlevel == 1) { g_back = 4; g_width = 8; } else { g_back = 8; g_width = 16; } if ((g_higher = si->dist >> 3) < 4) g_higher = 4; if (g_higher > 16) g_higher = 16; g_height = g_higher << 1; if (si->rotx < -10) g_higher += (g_higher >> 2); else if (si->rotx > 10) g_higher -= (g_higher >> 2); #if 0 if (si->dist > 128) { ++g_higher; ++g_back; g_back <<= 1; } else if (si->dist > 64) { ++g_higher; ++g_back; } else if (si->dist > 32) { /* nothing special */ } else { if (g_higher > 2) { g_higher = g_back = 4; } } #endif /* startx, starty, startz, width, height */ LayGround((-g_higher - g_back), (g_higher << 1), (g_back - g_higher), (g_width), (g_height), si); } void DisplaySproingies(int screen,int pause) { sp_instance *si = &si_list[screen]; int t; GLfloat position[] = {8.0, 5.0, -2.0, 0.1}; if (si->wireframe) glClear(GL_COLOR_BUFFER_BIT); else glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glPushMatrix(); glTranslatef(0.0, 0.0, -(GLfloat) (si->dist) / 16.0); /* viewing transform */ glRotatef((GLfloat) si->rotx, 1.0, 0.0, 0.0); glRotatef((GLfloat) si->roty, 0.0, 1.0, 0.0); if (!si->wireframe) glLightfv(GL_LIGHT0, GL_POSITION, position); #if 0 /* Show light pos */ glPushMatrix(); glTranslatef(position[0], position[1], position[2]); glColor3f(1.0, 1.0, 1.0); if (!si->wireframe) { glDisable(GL_LIGHTING); } glCallList(si->SproingieBoom); if (!si->wireframe) { glEnable(GL_LIGHTING); } glPopMatrix(); #endif glTranslatef((GLfloat) si->sframe * (-1.0 / 12.0) - 0.75, (GLfloat) si->sframe * (2.0 / 12.0) - 0.5, (GLfloat) si->sframe * (-1.0 / 12.0) + 0.75); if (si->wireframe) ComputeGround(si); for (t = 0; t < si->maxsproingies; ++t) { RenderSproingie(t, si); } if (!si->wireframe) ComputeGround(si); glPopMatrix(); glFlush(); } void NextSproingieDisplay(int screen,int pause) { NextSproingie(screen); /* if (pause) usleep(pause); don't do this! -jwz */ DisplaySproingies(screen,pause); } void ReshapeSproingies(int w, int h) { glViewport(0, 0, w, h); glMatrixMode(GL_PROJECTION); glLoadIdentity(); gluPerspective(65.0, (GLfloat) w / (GLfloat) h, 0.1, 2000.0); /* was 200000.0 */ glMatrixMode(GL_MODELVIEW); glLoadIdentity(); } void CleanupSproingies(int screen) { sp_instance *si = &si_list[screen]; if (! si) return; /* int t; if (si->SproingieBoom) { for (t = 0; t < 6; ++t) glDeleteLists(si->sproingies[t], 1); glDeleteLists(si->TopsSides, 2); glDeleteLists(si->SproingieBoom, 1); --active_screens; si->SproingieBoom = 0; } */ if (si->TopsSides) { glDeleteLists(si->TopsSides, 2); } if (si->positions) { (void) free((void *) (si->positions)); si->positions = NULL; } if ((active_screens == 0) && si_list) { (void) free((void *) (si_list)); si_list = NULL; } } void InitSproingies(int wfmode, int grnd, int mspr, int smrtspr, int screen, int numscreens, int mono) { GLfloat ambient[] = {0.2, 0.2, 0.2, 1.0}; GLfloat position[] = {10.0, 1.0, 1.0, 10.0}; GLfloat mat_diffuse[] = {0.6, 0.6, 0.6, 1.0}; GLfloat mat_specular[] = {0.8, 0.8, 0.8, 1.0}; GLfloat mat_shininess[] = {50.0}; sp_instance *si; int t; active_screens++; CleanupSproingies(screen); if (si_list == NULL) { if ((si_list = (sp_instance *) calloc(numscreens, sizeof (sp_instance))) == NULL) return; } si = &si_list[screen]; if (mspr < 0) mspr = 0; if (mspr >= MAXSPROING) mspr = MAXSPROING - 1; smart_sproingies = smrtspr; si->rotx = 0; si->roty = -45; si->dist = (16 << 2); si->sframe = 0; si->target_count = 0; si->mono = mono; si->wireframe = si->flatshade = 0; if (wfmode == 2) si->flatshade = 1; else if (wfmode) si->wireframe = 1; si->groundlevel = grnd; si->maxsproingies = mspr; if (si->maxsproingies) { si->positions = (struct sPosColor *) calloc(si->maxsproingies, sizeof (struct sPosColor)); if (!(si->positions)) si->maxsproingies = 0; } for (t = 0; t < si->maxsproingies; ++t) { si->positions[t].x = 0; si->positions[t].y = 0; si->positions[t].z = 0; si->positions[t].life = (-t * ((si->maxsproingies > 19) ? 1 : 4)) - 2; si->positions[t].frame = FIRST_FRAME; si->positions[t].direction = myrand(2); } #if 0 /* Test boom */ si->positions[0].x = 0; si->positions[0].y = 0; si->positions[0].z = 0; si->positions[0].life = 10; si->positions[0].frame = BOOM_FRAME; si->positions[0].r = 0.656863; si->positions[0].g = 1.0; si->positions[0].b = 0.656863; #endif if (!(si->TopsSides = build_TopsSides(si->wireframe))) (void) fprintf(stderr, "build_TopsSides\n"); /* if (!(si->sproingies[0] = BuildLWO(si->wireframe, &LWO_s1_1))) (void) fprintf(stderr, "BuildLWO - 1\n"); if (!(si->sproingies[1] = BuildLWO(si->wireframe, &LWO_s1_2))) (void) fprintf(stderr, "BuildLWO - 2\n"); if (!(si->sproingies[2] = BuildLWO(si->wireframe, &LWO_s1_3))) (void) fprintf(stderr, "BuildLWO - 3\n"); if (!(si->sproingies[3] = BuildLWO(si->wireframe, &LWO_s1_4))) (void) fprintf(stderr, "BuildLWO - 4\n"); if (!(si->sproingies[4] = BuildLWO(si->wireframe, &LWO_s1_5))) (void) fprintf(stderr, "BuildLWO - 5\n"); if (!(si->sproingies[5] = BuildLWO(si->wireframe, &LWO_s1_6))) (void) fprintf(stderr, "BuildLWO - 6\n"); if (!(si->SproingieBoom = BuildLWO(si->wireframe, &LWO_s1_b))) (void) fprintf(stderr, "BuildLWO - b\n"); */ si->sproingies[0]=s1_1; si->sproingies[1]=s1_2; si->sproingies[2]=s1_3; si->sproingies[3]=s1_4; si->sproingies[4]=s1_5; si->sproingies[5]=s1_6; si->SproingieBoom=s1_b; if (si->wireframe) { glShadeModel(GL_FLAT); glDisable(GL_LIGHTING); } else { if (si->flatshade) { glShadeModel(GL_FLAT); position[0] = 1.0; position[3] = 0.0; } glEnable(GL_LIGHTING); glEnable(GL_LIGHT0); glDepthFunc(GL_LEQUAL); glEnable(GL_DEPTH_TEST); glLightfv(GL_LIGHT0, GL_AMBIENT, ambient); glLightfv(GL_LIGHT0, GL_POSITION, position); glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, mat_diffuse); glMaterialfv(GL_FRONT_AND_BACK, GL_SPECULAR, mat_specular); glMaterialfv(GL_FRONT_AND_BACK, GL_SHININESS, mat_shininess); /* glLightModeli(GL_LIGHT_MODEL_TWO_SIDE, GL_FALSE); */ glCullFace(GL_BACK); glEnable(GL_CULL_FACE); glFrontFace(GL_CW); /* glEnable(GL_NORMALIZE); */ } } #endif /* USE_GL */ /* End of sproingies.c */ xscreensaver-5.36/hacks/glx/sproingiewrap.c000644 000767 000024 00000016125 12701612217 021062 0ustar00jwzstaff000000 000000 /* -*- Mode: C; tab-width: 4 -*- */ /* sproingiewrap.c - sproingies wrapper */ #if 0 static const char sccsid[] = "@(#)sproingiewrap.c 4.07 97/11/24 xlockmore"; #endif /*- * sproingiewrap.c - Copyright 1996 Sproingie Technologies Incorporated. * * Permission to use, copy, modify, and distribute this software and its * documentation for any purpose and without fee is hereby granted, * provided that the above copyright notice appear in all copies and that * both that copyright notice and this permission notice appear in * supporting documentation. * * This file is provided AS IS with no warranties of any kind. The author * shall have no liability with respect to the infringement of copyrights, * trade secrets or any patents by this file or any part thereof. In no * event will the author be liable for any lost revenue or profits or * other special, indirect and consequential damages. * * Programming: Ed Mackey, http://www.netaxs.com/~emackey/ * Gordon Wrigley, gdw33@student.canterbury.ac.nz * Sergio Gutiérrez "Sergut", sergut@gmail.com * Sproingie 3D objects modeled by: Al Mackey, al@iam.com * (using MetaNURBS in NewTek's Lightwave 3D v5). * * Revision History: * 01-Sep-06: Make the sproingies select a new direction after each hop * (6 frames); if they fall towards the edge, they explode. * (TODO: let them fall for a time before they explode or * disappear) [sergut] * 13-Dec-02: Changed triangle normals into vertex normals to give a smooth * apperance and moved the sproingies from Display Lists to * Vertex Arrays, still need to do this for the TopsSides. * [gordon] * 26-Apr-97: Added glPointSize() calls around explosions, plus other fixes. * 28-Mar-97: Added size support. * 22-Mar-97: Updated to use glX interface instead of xmesa one. * Also, support for multiscreens added. * 20-Mar-97: Updated for xlockmore v4.02alpha7 and higher, using * xlockmore's built-in Mesa/OpenGL support instead of * my own. Submitted for inclusion in xlockmore. * 09-Dec-96: Written. */ #ifdef STANDALONE # define DEFAULTS "*delay: 30000 \n" \ "*count: 8 \n" \ "*size: 0 \n" \ "*showFPS: False \n" \ "*fpsTop: True \n" \ "*wireframe: False \n" # define refresh_sproingies 0 # define sproingies_handle_event 0 # include "xlockmore.h" /* from the xscreensaver distribution */ #else /* !STANDALONE */ # include "xlock.h" /* from the xlockmore distribution */ #endif /* !STANDALONE */ #ifdef USE_GL #define DEF_SMART_SPROINGIES "True" /* Smart sproingies do not fall down the edge */ #include "sproingies.h" #undef countof #define countof(x) (sizeof((x))/sizeof((*x))) static XrmOptionDescRec opts[] = { {"-fall", ".smartSproingies", XrmoptionNoArg, "False"}, {"-no-fall", ".smartSproingies", XrmoptionNoArg, "True"}, }; static int smrt_spr; static argtype vars[] = { {&smrt_spr, "smartSproingies", "Boolean", DEF_SMART_SPROINGIES, t_Bool}, }; ENTRYPOINT ModeSpecOpt sproingies_opts = {countof(opts), opts, countof(vars), vars, NULL}; #ifdef USE_MODULES ModStruct sproingies_description = {"sproingies", "init_sproingies", "draw_sproingies", "release_sproingies", "refresh_sproingies", "init_sproingies", NULL, &sproingies_opts, 1000, 5, 0, 400, 4, 1.0, "", "Shows Sproingies! Nontoxic. Safe for pets and small children", 0, NULL}; #endif #define MINSIZE 32 #include void NextSproingie(int screen); void NextSproingieDisplay(int screen,int pause); void DisplaySproingies(int screen,int pause); void ReshapeSproingies(int w, int h); void CleanupSproingies(int screen); void InitSproingies(int wfmode, int grnd, int mspr, int smrtspr, int screen, int numscreens, int mono); typedef struct { GLfloat view_rotx, view_roty, view_rotz; GLint gear1, gear2, gear3; GLfloat angle; GLuint limit; GLuint count; GLXContext *glx_context; int mono; Window window; } sproingiesstruct; static sproingiesstruct *sproingies = NULL; ENTRYPOINT void init_sproingies (ModeInfo * mi) { Window window = MI_WINDOW(mi); int screen = MI_SCREEN(mi); int count = MI_COUNT(mi); int size = MI_SIZE(mi); sproingiesstruct *sp; int wfmode = 0, grnd = 0, mspr, w, h; if (sproingies == NULL) { if ((sproingies = (sproingiesstruct *) calloc(MI_NUM_SCREENS(mi), sizeof (sproingiesstruct))) == NULL) return; } sp = &sproingies[screen]; sp->mono = (MI_IS_MONO(mi) ? 1 : 0); sp->window = window; if ((sp->glx_context = init_GL(mi)) != NULL) { if (MI_IS_WIREFRAME(mi)) wfmode = 1; if (grnd > 2) grnd = 2; mspr = count; if (mspr > 100) mspr = 100; /* wireframe, ground, maxsproingies */ InitSproingies(wfmode, grnd, mspr, smrt_spr, MI_SCREEN(mi), MI_NUM_SCREENS(mi), sp->mono); /* Viewport is specified size if size >= MINSIZE && size < screensize */ if (size == 0) { w = MI_WIDTH(mi); h = MI_HEIGHT(mi); } else if (size < MINSIZE) { w = MINSIZE; h = MINSIZE; } else { w = (size > MI_WIDTH(mi)) ? MI_WIDTH(mi) : size; h = (size > MI_HEIGHT(mi)) ? MI_HEIGHT(mi) : size; } glViewport((MI_WIDTH(mi) - w) / 2, (MI_HEIGHT(mi) - h) / 2, w, h); glMatrixMode(GL_PROJECTION); glLoadIdentity(); gluPerspective(65.0, (GLfloat) w / (GLfloat) h, 0.1, 2000.0); /* was 200000.0 */ glMatrixMode(GL_MODELVIEW); glLoadIdentity(); DisplaySproingies(MI_SCREEN(mi),mi->pause); } else { MI_CLEARWINDOW(mi); } } /* ARGSUSED */ ENTRYPOINT void draw_sproingies (ModeInfo * mi) { sproingiesstruct *sp = &sproingies[MI_SCREEN(mi)]; Display *display = MI_DISPLAY(mi); Window window = MI_WINDOW(mi); if (!sp->glx_context) return; glDrawBuffer(GL_BACK); glXMakeCurrent(display, window, *(sp->glx_context)); glPushMatrix(); glRotatef(current_device_rotation(), 0, 0, 1); NextSproingieDisplay(MI_SCREEN(mi),mi->pause); /* It will swap. */ glPopMatrix(); if (mi->fps_p) do_fps (mi); glFinish(); glXSwapBuffers(MI_DISPLAY(mi), MI_WINDOW(mi)); } #ifndef STANDALONE ENTRYPOINT void refresh_sproingies(ModeInfo * mi) { /* No need to do anything here... The whole screen is updated * every frame anyway. Otherwise this would be just like * draw_sproingies, above, but replace NextSproingieDisplay(...) * with DisplaySproingies(...). */ } #endif /* !STANDALONE */ ENTRYPOINT void reshape_sproingies (ModeInfo *mi, int w, int h) { ReshapeSproingies(w, h); } ENTRYPOINT void release_sproingies (ModeInfo * mi) { if (sproingies != NULL) { int screen; for (screen = 0; screen < MI_NUM_SCREENS(mi); screen++) { sproingiesstruct *sp = &sproingies[screen]; if (sp->glx_context) { glXMakeCurrent(MI_DISPLAY(mi), sp->window, *(sp->glx_context)); CleanupSproingies(MI_SCREEN(mi)); } } (void) free((void *) sproingies); sproingies = NULL; } FreeAllGL(mi); } XSCREENSAVER_MODULE ("Sproingies", sproingies) #endif /* USE_GL */ /* End of sproingiewrap.c */ xscreensaver-5.36/hacks/glx/stairs.c000664 000767 000024 00000036357 12710313225 017506 0ustar00jwzstaff000000 000000 /* -*- Mode: C; tab-width: 4 -*- */ /* stairs --- Infinite Stairs, and Escher-like scene. */ #if 0 static const char sccsid[] = "@(#)stairs.c 4.07 97/11/24 xlockmore"; #endif /*- * Permission to use, copy, modify, and distribute this software and its * documentation for any purpose and without fee is hereby granted, * provided that the above copyright notice appear in all copies and that * both that copyright notice and this permission notice appear in * supporting documentation. * * This file is provided AS IS with no warranties of any kind. The author * shall have no liability with respect to the infringement of copyrights, * trade secrets or any patents by this file or any part thereof. In no * event will the author be liable for any lost revenue or profits or * other special, indirect and consequential damages. * * This mode shows some interesting scenes that are impossible OR very * weird to build in the real universe. Much of the scenes are inspirated * on Mauritz Cornelis stairs's works which derivated the mode's name. * M.C. Escher (1898-1972) was a dutch artist and many people prefer to * say he was a mathematician. * * Thanks goes to Brian Paul for making it possible and inexpensive to use * OpenGL at home. * * Since I'm not a native English speaker, my apologies for any grammatical * mistake. * * My e-mail address is * m-vianna@usa.net * * Marcelo F. Vianna (Jun-01-1997) * * Revision History: * 07-Jan-98: This would be a scene for the escher mode, but now escher mode * was splitted in different modes for each scene. This is the * initial release and is not working yet. * Marcelo F. Vianna. * */ /*- * Texture mapping is only available on RGBA contexts, Mono and color index * visuals DO NOT support texture mapping in OpenGL. * * BUT Mesa do implements RGBA contexts in pseudo color visuals, so texture * mapping shuld work on PseudoColor, DirectColor, TrueColor using Mesa. Mono * is not officially supported for both OpenGL and Mesa, but seems to not crash * Mesa. * * In real OpenGL, PseudoColor DO NOT support texture map (as far as I know). */ #ifdef STANDALONE # define DEFAULTS "*delay: 20000 \n" \ "*showFPS: False \n" # define refresh_stairs 0 # include "xlockmore.h" /* from the xscreensaver distribution */ #else /* !STANDALONE */ # include "xlock.h" /* from the xlockmore distribution */ #endif /* !STANDALONE */ #ifdef USE_GL #if 0 #include "e_textures.h" #else #include "xpm-ximage.h" #include "../images/wood.xpm" #endif #include "sphere.h" #include "gltrackball.h" ENTRYPOINT ModeSpecOpt stairs_opts = {0, NULL, 0, NULL, NULL}; #ifdef USE_MODULES ModStruct stairs_description = {"stairs", "init_stairs", "draw_stairs", "release_stairs", "draw_stairs", "change_stairs", NULL, &stairs_opts, 1000, 1, 1, 1, 4, 1.0, "", "Shows Infinite Stairs, an Escher-like scene", 0, NULL}; #endif #define Scale4Window 0.3 #define Scale4Iconic 0.4 #define sqr(A) ((A)*(A)) #ifndef Pi #define Pi M_PI #endif /*************************************************************************/ typedef struct { GLint WindH, WindW; GLfloat step; int rotating; int AreObjectsDefined[1]; int sphere_position; int sphere_tick; GLXContext *glx_context; trackball_state *trackball; Bool button_down_p; GLuint objects; } stairsstruct; static const float front_shininess[] = {60.0}; static const float front_specular[] = {0.7, 0.7, 0.7, 1.0}; static const float ambient[] = {0.0, 0.0, 0.0, 1.0}; static const float diffuse[] = {1.0, 1.0, 1.0, 1.0}; static const float position0[] = {1.0, 1.0, 1.0, 0.0}; static const float position1[] = {-1.0, -1.0, 1.0, 0.0}; static const float lmodel_ambient[] = {0.5, 0.5, 0.5, 1.0}; static const float lmodel_twoside[] = {GL_TRUE}; static const float MaterialYellow[] = {0.7, 0.7, 0.0, 1.0}; static const float MaterialWhite[] = {0.7, 0.7, 0.7, 1.0}; static const float ball_positions[] = { -3.0, 3.0, 1.0, -3.0, 2.8, 2.0, -3.0, 2.6, 3.0, -2.0, 2.4, 3.0, -1.0, 2.2, 3.0, 0.0, 2.0, 3.0, 1.0, 1.8, 3.0, 2.0, 1.6, 3.0, 2.0, 1.5, 2.0, 2.0, 1.4, 1.0, 2.0, 1.3, 0.0, 2.0, 1.2, -1.0, 2.0, 1.1, -2.0, 1.0, 0.9, -2.0, 0.0, 0.7, -2.0, -1.0, 0.5, -2.0, }; #define NPOSITIONS ((sizeof ball_positions) / (sizeof ball_positions[0]) / 3) #define SPHERE_TICKS 32 static stairsstruct *stairs = NULL; static int draw_block(GLfloat width, GLfloat height, GLfloat thickness) { int polys = 0; glFrontFace(GL_CCW); glBegin(GL_QUADS); glNormal3f(0, 0, 1); glTexCoord2f(0, 0); glVertex3f(-width, -height, thickness); glTexCoord2f(1, 0); glVertex3f(width, -height, thickness); glTexCoord2f(1, 1); glVertex3f(width, height, thickness); glTexCoord2f(0, 1); glVertex3f(-width, height, thickness); polys++; glNormal3f(0, 0, -1); glTexCoord2f(0, 0); glVertex3f(-width, height, -thickness); glTexCoord2f(1, 0); glVertex3f(width, height, -thickness); glTexCoord2f(1, 1); glVertex3f(width, -height, -thickness); glTexCoord2f(0, 1); glVertex3f(-width, -height, -thickness); polys++; glNormal3f(0, 1, 0); glTexCoord2f(0, 0); glVertex3f(-width, height, thickness); glTexCoord2f(1, 0); glVertex3f(width, height, thickness); glTexCoord2f(1, 1); glVertex3f(width, height, -thickness); glTexCoord2f(0, 1); glVertex3f(-width, height, -thickness); polys++; glNormal3f(0, -1, 0); glTexCoord2f(0, 0); glVertex3f(-width, -height, -thickness); glTexCoord2f(1, 0); glVertex3f(width, -height, -thickness); glTexCoord2f(1, 1); glVertex3f(width, -height, thickness); glTexCoord2f(0, 1); glVertex3f(-width, -height, thickness); polys++; glNormal3f(1, 0, 0); glTexCoord2f(0, 0); glVertex3f(width, -height, thickness); glTexCoord2f(1, 0); glVertex3f(width, -height, -thickness); glTexCoord2f(1, 1); glVertex3f(width, height, -thickness); glTexCoord2f(0, 1); glVertex3f(width, height, thickness); polys++; glNormal3f(-1, 0, 0); glTexCoord2f(0, 0); glVertex3f(-width, height, thickness); glTexCoord2f(1, 0); glVertex3f(-width, height, -thickness); glTexCoord2f(1, 1); glVertex3f(-width, -height, -thickness); glTexCoord2f(0, 1); glVertex3f(-width, -height, thickness); polys++; glEnd(); return polys; } static void draw_stairs_internal(ModeInfo * mi) { GLfloat X; mi->polygon_count = 0; glPushMatrix(); glPushMatrix(); glTranslatef(-3.0, 0.1, 2.0); for (X = 0; X < 2; X++) { mi->polygon_count += draw_block(0.5, 2.7 + 0.1 * X, 0.5); glTranslatef(0.0, 0.1, -1.0); } glPopMatrix(); glTranslatef(-3.0, 0.0, 3.0); glPushMatrix(); for (X = 0; X < 6; X++) { mi->polygon_count += draw_block(0.5, 2.6 - 0.1 * X, 0.5); glTranslatef(1.0, -0.1, 0.0); } glTranslatef(-1.0, -0.9, -1.0); for (X = 0; X < 5; X++) { mi->polygon_count += draw_block(0.5, 3.0 - 0.1 * X, 0.5); glTranslatef(0.0, 0.0, -1.0); } glTranslatef(-1.0, -1.1, 1.0); for (X = 0; X < 3; X++) { mi->polygon_count += draw_block(0.5, 3.5 - 0.1 * X, 0.5); glTranslatef(-1.0, -0.1, 0.0); } glPopMatrix(); glPopMatrix(); } /*#define DEBUG*/ /*#define DEBUG_PATH*/ static int draw_sphere(int pos, int tick) { int pos2 = (pos+1) % NPOSITIONS; GLfloat x1 = ball_positions[pos*3]; GLfloat y1 = ball_positions[pos*3+1]; GLfloat z1 = ball_positions[pos*3+2]; GLfloat x2 = ball_positions[pos2*3]; GLfloat y2 = ball_positions[pos2*3+1]; GLfloat z2 = ball_positions[pos2*3+2]; GLfloat frac = tick / (GLfloat) SPHERE_TICKS; GLfloat x = x1 + (x2 - x1) * frac; GLfloat y = y1 + (y2 - y1) * frac + (2 * sin (M_PI * frac)); GLfloat z = z1 + (z2 - z1) * frac; int polys = 0; glPushMatrix(); # ifdef DEBUG_PATH glVertex3f(x, y, z); if (tick == 0) { glVertex3f(x, y-7.5, z); glVertex3f(x, y, z); glVertex3f(x, y, z-0.6); glVertex3f(x, y, z); glVertex3f(x, y, z+0.6); glVertex3f(x, y, z); glVertex3f(x+0.6, y, z); glVertex3f(x, y, z); glVertex3f(x-0.6, y, z); glVertex3f(x, y, z); } # else /* !DEBUG_PATH */ y += 0.5; glTranslatef(x, y, z); glScalef (0.5, 0.5, 0.5); /* make ball a little smaller on the gap to obscure distance */ if (pos == NPOSITIONS-1) glScalef (0.95, 0.95, 0.95); glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, MaterialYellow); glDisable (GL_TEXTURE_2D); glShadeModel(GL_SMOOTH); glFrontFace(GL_CCW); polys += unit_sphere (32, 32, False); glShadeModel(GL_FLAT); glEnable (GL_TEXTURE_2D); #endif /* !DEBUG_PATH */ glPopMatrix(); return polys; } ENTRYPOINT void reshape_stairs (ModeInfo * mi, int width, int height) { stairsstruct *sp = &stairs[MI_SCREEN(mi)]; glViewport(0, 0, sp->WindW = (GLint) width, sp->WindH = (GLint) height); glMatrixMode(GL_PROJECTION); glLoadIdentity(); glFrustum(-1.0, 1.0, -1.0, 1.0, 5.0, 15.0); glMatrixMode(GL_MODELVIEW); if (width >= 1024) { glLineWidth(3); glPointSize(3); } else if (width >= 512) { glLineWidth(2); glPointSize(2); } else { glLineWidth(1); glPointSize(1); } } ENTRYPOINT Bool stairs_handle_event (ModeInfo *mi, XEvent *event) { stairsstruct *sp = &stairs[MI_SCREEN(mi)]; if (gltrackball_event_handler (event, sp->trackball, MI_WIDTH (mi), MI_HEIGHT (mi), &sp->button_down_p)) return True; else if (event->xany.type == KeyPress) { KeySym keysym; char c = 0; XLookupString (&event->xkey, &c, 1, &keysym, 0); if (c == ' ' || c == '\t') { gltrackball_reset (sp->trackball); return True; } } return False; } static void pinit(ModeInfo *mi) { /* int status; */ glClearDepth(1.0); glLightfv(GL_LIGHT0, GL_AMBIENT, ambient); glLightfv(GL_LIGHT0, GL_DIFFUSE, diffuse); glLightfv(GL_LIGHT0, GL_POSITION, position0); glLightfv(GL_LIGHT1, GL_AMBIENT, ambient); glLightfv(GL_LIGHT1, GL_DIFFUSE, diffuse); 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_NORMALIZE); glCullFace(GL_BACK); glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, MaterialWhite); glShadeModel(GL_FLAT); glEnable(GL_DEPTH_TEST); glEnable(GL_TEXTURE_2D); glEnable(GL_CULL_FACE); glPixelStorei(GL_UNPACK_ALIGNMENT, 1); #if 0 clear_gl_error(); status = gluBuild2DMipmaps(GL_TEXTURE_2D, 3, WoodTextureWidth, WoodTextureHeight, GL_RGB, GL_UNSIGNED_BYTE, WoodTextureData); if (status) { const char *s = (char *) gluErrorString (status); fprintf (stderr, "%s: error mipmapping %dx%d texture: %s\n", progname, WoodTextureWidth, WoodTextureHeight, (s ? s : "(unknown)")); exit (1); } check_gl_error("mipmapping"); #else { XImage *img = xpm_to_ximage (mi->dpy, mi->xgwa.visual, mi->xgwa.colormap, wood_texture); glTexImage2D (GL_TEXTURE_2D, 0, GL_RGBA, img->width, img->height, 0, GL_RGBA, /* GL_UNSIGNED_BYTE, */ GL_UNSIGNED_INT_8_8_8_8_REV, img->data); check_gl_error("texture"); XDestroyImage (img); } #endif glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE); glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT); glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT); glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); glMaterialfv(GL_FRONT_AND_BACK, GL_SHININESS, front_shininess); glMaterialfv(GL_FRONT_AND_BACK, GL_SPECULAR, front_specular); } ENTRYPOINT void init_stairs (ModeInfo * mi) { int screen = MI_SCREEN(mi); stairsstruct *sp; if (stairs == NULL) { if ((stairs = (stairsstruct *) calloc(MI_NUM_SCREENS(mi), sizeof (stairsstruct))) == NULL) return; } sp = &stairs[screen]; sp->step = 0.0; sp->rotating = 0; sp->sphere_position = NRAND(NPOSITIONS); sp->sphere_tick = 0; if ((sp->glx_context = init_GL(mi)) != NULL) { reshape_stairs(mi, MI_WIDTH(mi), MI_HEIGHT(mi)); glDrawBuffer(GL_BACK); if (!glIsList(sp->objects)) sp->objects = glGenLists(1); pinit(mi); } else { MI_CLEARWINDOW(mi); } sp->trackball = gltrackball_init (False); } 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); if (!sp->glx_context) return; glXMakeCurrent(display, window, *(sp->glx_context)); glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glPushMatrix(); glRotatef(rot, 0, 0, 1); glTranslatef(0.0, 0.0, -10.0); if (!MI_IS_ICONIC(mi)) { glScalef(Scale4Window * sp->WindH / sp->WindW, Scale4Window, Scale4Window); } else { glScalef(Scale4Iconic * sp->WindH / sp->WindW, Scale4Iconic, Scale4Iconic); } # ifdef HAVE_MOBILE /* Keep it the same relative size when rotated. */ { GLfloat h = MI_HEIGHT(mi) / (GLfloat) MI_WIDTH(mi); if (rot != 0 && rot != 180 && rot != -180) glScalef (1/h, 1/h, 1/h); } # endif gltrackball_rotate (sp->trackball); glTranslatef(0, 0.5, 0); glRotatef(44.5, 1, 0, 0); glRotatef(50, 0, 1, 0); if (!sp->rotating) { if ((LRAND() % 500) == 0) sp->rotating = (LRAND() & 1) ? 1 : -1; } if (sp->rotating) { glRotatef(sp->rotating * sp->step, 0, 1, 0); if (sp->step >= 360) { sp->rotating = 0; sp->step = 0; } # ifndef DEBUG if (!sp->button_down_p) sp->step += 2; # endif /* DEBUG */ } draw_stairs_internal(mi); # ifdef DEBUG { int i, j; # ifdef DEBUG_PATH glDisable(GL_LIGHTING); glDisable(GL_TEXTURE_2D); glBegin (GL_LINE_LOOP); # endif /* DEBUG_PATH */ for (i = 0; i < NPOSITIONS; i ++) for (j = 0; j < SPHERE_TICKS; j++) mi->polygon_count += draw_sphere(i, j); # ifdef DEBUG_PATH glEnd(); glEnable(GL_LIGHTING); glEnable(GL_TEXTURE_2D); # endif /* DEBUG_PATH */ } #else /* !DEBUG */ mi->polygon_count += draw_sphere(sp->sphere_position, sp->sphere_tick); #endif /* !DEBUG */ if (sp->button_down_p) ; else if (++sp->sphere_tick >= SPHERE_TICKS) { sp->sphere_tick = 0; if (++sp->sphere_position >= NPOSITIONS) sp->sphere_position = 0; } glPopMatrix(); if (mi->fps_p) do_fps (mi); glFlush(); glXSwapBuffers(display, window); } #ifndef STANDALONE ENTRYPOINT void change_stairs (ModeInfo * mi) { stairsstruct *sp = &stairs[MI_SCREEN(mi)]; if (!sp->glx_context) return; glXMakeCurrent(MI_DISPLAY(mi), MI_WINDOW(mi), *(sp->glx_context)); pinit(); } #endif /* !STANDALONE */ ENTRYPOINT void release_stairs (ModeInfo * mi) { if (stairs != NULL) { int i; for (i = 0; i < MI_NUM_SCREENS(mi); i++) { stairsstruct *sp = &stairs[i]; if (glIsList(sp->objects)) { glDeleteLists(sp->objects, 1); } } free(stairs); stairs = NULL; } FreeAllGL(mi); } XSCREENSAVER_MODULE ("Stairs", stairs) #endif xscreensaver-5.36/hacks/glx/superquadrics.c000644 000767 000024 00000053311 12710313226 021057 0ustar00jwzstaff000000 000000 /* -*- Mode: C; tab-width: 4 -*- */ /* superquadrics --- 3D mathematical shapes */ #if 0 static const char sccsid[] = "@(#)superquadrics.c 4.07 97/11/24 xlockmore"; #endif /*- * Permission to use, copy, modify, and distribute this software and its * documentation for any purpose and without fee is hereby granted, * provided that the above copyright notice appear in all copies and that * both that copyright notice and this permission notice appear in * supporting documentation. * * This file is provided AS IS with no warranties of any kind. The author * shall have no liability with respect to the infringement of copyrights, * trade secrets or any patents by this file or any part thereof. In no * event will the author be liable for any lost revenue or profits or * other special, indirect and consequential damages. * * Superquadrics were invented by Dr. Alan Barr of Caltech University. * They were first published in "Computer Graphics and Applications", * volume 1, number 1, 1981, in the article "Superquadrics and Angle- * Preserving Transformations." Dr. Barr based the Superquadrics on * Piet Hein's "super ellipses." Super ellipses are like 2D ellipses, * except that the formula includes an exponent, raising its X and Y * values to a (fractional) power, and allowing them to gradually * change from round to square edges. Superquadrics extend this * idea into 3 dimensions, using two exponents to modify a * quadric surface in a similar fashion. * * Revision History: * 30-Mar-97: Turned into a module for xlockmore 4.02 alpha. The code * is almost unrecognizable now from the first revision, except for * a few remaining two-letter variable names. I still don't have * the normal vectors working right (I wrote the buggy normal vector * code myself, can you tell?) * 07-Jan-97: A legend reborn; Superquadrics make an appearance as a * real OpenGL program written in C. I can even render them with * proper lighting and specular highlights. Gee, they look almost * as good now as the original color plates of them that my uncle * showed me as a child in 1981. I don't know what computer hardware * he was using at the time, but it's taken a couple decades for the * PC clone hardware to catch up to it. * 05-Jan-97: After almost a decade, Superquadrics had almost faded away * into the myths and folklore of all the things my brother and I played * with on computers when we were kids with too much time on our hands. * I had since gotten involved in Unix, OpenGL, and other things. * A sudden flash of inspiration caused me to dig out the old Pascal * source code, run it through p2c, and start ripping away the old * wireframe rendering code, to be replaced by OpenGL. * Late 1989 or early 1990: Around this time I did the Turbo Pascal * port of the Superquadrics. Unfortunately, many of the original variable * names remained the same from the C= 64 original. This was unfortunate * because BASIC on the c64 only allowed 2-letter, global variable names. * But the speed improvement over BASIC was very impressive at the time. * Thanksgiving, 1987: Written. My uncle Al, who invented Superquadrics some * years earlier, came to visit us. I was a high school kid at the time, * with nothing more than a Commodore 64. Somehow we wrote this program, * (he did the math obviously, I just coded it into BASIC for the c64). * Yeah, 320x200 resolution, colorless white wireframe, and half an hour * rendering time per superquadric. PLOT x,y. THOSE were the days. * In the following years I would port Superquadrics to AppleBASIC, * AmigaBASIC, and then Turbo Pascal for IBM clones. 5 minutes on a 286! * Talk about fast rendering! But these days, when my Pentium 166 runs * the same program, the superquadric will already be waiting on the * screen before my monitor can change frequency from text to graphics * mode. Can't time the number of minutes that way! Darn ;) * * Ed Mackey */ #ifdef STANDALONE # define DEFAULTS "*delay: 40000 \n" \ "*count: 25 \n" \ "*cycles: 40 \n" \ "*showFPS: False \n" \ "*wireframe: False \n" \ "*suppressRotationAnimation: True\n" \ # define superquadrics_handle_event 0 # include "xlockmore.h" /* from the xscreensaver distribution */ #else /* !STANDALONE */ # include "xlock.h" /* from the xlockmore distribution */ #endif /* !STANDALONE */ #ifdef USE_GL /*- * Note for low-CPU-speed machines: If your frame rate is so low that * attempts at animation appear futile, try using "-cycles 1", which puts * Superquadrics into kind of a slide-show mode. It will still use up * all of your CPU power, but it may look nicer. */ #define DEF_SPINSPEED "5.0" static float spinspeed; static XrmOptionDescRec opts[] = { {"-spinspeed", ".superquadrics.spinspeed", XrmoptionSepArg, 0} }; static argtype vars[] = { {&spinspeed, "spinspeed", "Spinspeed", DEF_SPINSPEED, t_Float} }; static OptionStruct desc[] = { {"-spinspeed num", "speed of rotation, in degrees per frame"} }; ENTRYPOINT ModeSpecOpt superquadrics_opts = {sizeof opts / sizeof opts[0], opts, sizeof vars / sizeof vars[0], vars, desc}; #ifdef USE_MODULES ModStruct superquadrics_description = {"superquadrics", "init_superquadrics", "draw_superquadrics", "release_superquadrics", "refresh_superquadrics", "init_superquadrics", NULL, &superquadrics_opts, 1000, 25, 40, 1, 4, 1.0, "", "Shows 3D mathematical shapes", 0, NULL}; #endif #define MaxRes 50 #define MinRes 5 typedef double dimi[MaxRes + 1]; typedef struct { double xExponent, yExponent; GLfloat r[4], g[4], b[4]; long Mode; int rotx, rotz; } state; typedef struct { GLXContext *glx_context; int dist, wireframe, flatshade, shownorms, maxcount, maxwait; int counter, viewcount, viewwait, mono; GLfloat curmat[4][4], rotx, roty, rotz, spinspeed; /* In dimi: the first letter stands for cosine/sine, the second * stands for North, South, East, or West. I think. */ dimi cs, se, sw, sn, ss, ce, cw, cn, Prevxx, Prevyy, Prevzz, Prevxn, Prevyn, Prevzn; double xExponent, yExponent, Mode; int resolution; state now, later; int pats[4][4]; int cullmode; } superquadricsstruct; static superquadricsstruct *superquadrics = NULL; #define CLIP_NORMALS 10000.0 static void ReshapeSuperquadrics(int w, int h); static int myrand(int range) { return ((int) (((float) range) * LRAND() / (MAXRAND))); } static float myrandreal(void) { return (LRAND() / (MAXRAND)); } /* Some old, old, OLD code follows. Ahh this takes me back..... */ /* Output from p2c, the Pascal-to-C translator */ /* From input file "squad.pas" */ static double XtoY(double x, double y) { double z, a; /* This is NOT your typical raise-X-to-the-Y-power function. Do not attempt * to replace this with a standard exponent function. If you must, just * replace the "a = exp(y * log(z));" line with something faster. */ z = fabs(x); if (z < 1e-20) { a = 0.0; return a; } a = exp(y * log(z)); if (a > CLIP_NORMALS) a = CLIP_NORMALS; if (x < 0) a = -a; return a; } static double Sine(double x, double e) { /* This is just the sine wave raised to the exponent. BUT, you can't * raise negative numbers to fractional exponents. So we have a special * XtoY routune which handles it in a way useful to superquadrics. */ return (XtoY(sin(x), e)); } static double Cosine(double x, double e) { return (XtoY(cos(x), e)); } static void MakeUpStuff(int allstuff, superquadricsstruct * sp) { int dostuff; int t, pat; GLfloat r, g, b, r2, g2, b2; /* randomize it. */ if (sp->maxcount < 2) allstuff = 1; dostuff = allstuff * 15; if (!dostuff) { dostuff = myrand(3) + 1; if (myrand(2) || (dostuff & 1)) dostuff |= 4; if (myrand(2)) dostuff |= 8; } if (dostuff & 1) { sp->later.xExponent = (((long) floor(myrandreal() * 250 + 0.5)) / 100.0) + 0.1; sp->later.yExponent = (((long) floor(myrandreal() * 250 + 0.5)) / 100.0) + 0.1; /* Increase the 2.0 .. 2.5 range to 2.0 .. 3.0 */ if (sp->later.xExponent > 2.0) sp->later.xExponent = (sp->later.xExponent * 2.0) - 2.0; if (sp->later.yExponent > 2.0) sp->later.yExponent = (sp->later.yExponent * 2.0) - 2.0; } if (dostuff & 2) { do { sp->later.Mode = myrand(3L) + 1; } while (!allstuff && (sp->later.Mode == sp->now.Mode)); /* On init: make sure it can stay in mode 1 if it feels like it. */ } if (dostuff & 4) { if (sp->mono) { if (sp->wireframe) { b = g = r = 1.0; b2 = g2 = r2 = 1.0; } else { b = g = r = (GLfloat) (140 + myrand(100)) / 255.0; b2 = g2 = r2 = ((r > 0.69) ? (1.0 - r) : r); } } else { r = (GLfloat) (40 + myrand(200)) / 255.0; g = (GLfloat) (40 + myrand(200)) / 255.0; b = (GLfloat) (40 + myrand(200)) / 255.0; r2 = ((myrand(4) && ((r < 0.31) || (r > 0.69))) ? (1.0 - r) : r); g2 = ((myrand(4) && ((g < 0.31) || (g > 0.69))) ? (1.0 - g) : g); b2 = ((myrand(4) && ((b < 0.31) || (b > 0.69))) ? (1.0 - b) : b); } pat = myrand(4); for (t = 0; t < 4; ++t) { sp->later.r[t] = sp->pats[pat][t] ? r : r2; sp->later.g[t] = sp->pats[pat][t] ? g : g2; sp->later.b[t] = sp->pats[pat][t] ? b : b2; } } if (dostuff & 8) { sp->later.rotx = myrand(360) - 180; sp->later.rotz = myrand(160) - 80; } } static void inputs(superquadricsstruct * sp) { int iv; double u, v, mode3, cn3, inverter2, flatu, flatv; if (sp->Mode < 1.000001) { mode3 = 1.0; cn3 = 0.0; inverter2 = 1.0; } else if (sp->Mode < 2.000001) { mode3 = 1.0; cn3 = (sp->Mode - 1.0) * 1.5; inverter2 = (sp->Mode - 1.0) * -2.0 + 1.0; } else { mode3 = (sp->Mode - 1.0); cn3 = (sp->Mode - 2.0) / 2.0 + 1.5; inverter2 = -1.0; } if (sp->flatshade) { flatu = M_PI / (sp->resolution - 1); flatv = mode3 * M_PI / ((sp->resolution - 1) * 2); } else { flatu = flatv = 0.0; } /* (void) printf("Calculating....\n"); */ for (iv = 1; iv <= sp->resolution; iv++) { /* u ranges from PI down to -PI */ u = (1 - iv) * 2 * M_PI / (sp->resolution - 1) + M_PI; /* v ranges from PI/2 down to -PI/2 */ v = (1 - iv) * mode3 * M_PI / (sp->resolution - 1) + M_PI * (mode3 / 2.0); /* Use of xExponent */ sp->se[iv] = Sine(u, sp->xExponent); sp->ce[iv] = Cosine(u, sp->xExponent); sp->sn[iv] = Sine(v, sp->yExponent); sp->cn[iv] = Cosine(v, sp->yExponent) * inverter2 + cn3; /* Normal vector computations only */ sp->sw[iv] = Sine(u + flatu, 2 - sp->xExponent); sp->cw[iv] = Cosine(u + flatu, 2 - sp->xExponent); sp->ss[iv] = Sine(v + flatv, 2 - sp->yExponent) * inverter2; sp->cs[iv] = Cosine(v + flatv, 2 - sp->yExponent); } /* next */ /* Now fix up the endpoints */ sp->se[sp->resolution] = sp->se[1]; sp->ce[sp->resolution] = sp->ce[1]; if (sp->Mode > 2.999999) { sp->sn[sp->resolution] = sp->sn[1]; sp->cn[sp->resolution] = sp->cn[1]; } } static int DoneScale(superquadricsstruct * sp) { double xx, yy, zz, xp = 0, yp = 0, zp = 0, xn, yn, zn, xnp = 0, ynp = 0, znp = 0; int ih, iv; int polys = 0; /* Hey don't knock my 2-letter variable names. Simon's BASIC rules, man! ;-> */ /* Just kidding..... */ int toggle = 0; for (ih = 1; ih <= sp->resolution; ih++) { toggle ^= 2; for (iv = 1; iv <= sp->resolution; iv++) { toggle ^= 1; if (sp->wireframe) glColor3f(sp->curmat[toggle][0], sp->curmat[toggle][1], sp->curmat[toggle][2]); else glMaterialfv(GL_FRONT_AND_BACK, GL_AMBIENT_AND_DIFFUSE, sp->curmat[toggle]); xx = sp->cn[iv] * sp->ce[ih]; zz = sp->cn[iv] * sp->se[ih]; yy = sp->sn[iv]; if (sp->wireframe) { if ((ih > 1) || (iv > 1)) { glBegin(GL_LINES); if (ih > 1) { glVertex3f(xx, yy, zz); glVertex3f(sp->Prevxx[iv], sp->Prevyy[iv], sp->Prevzz[iv]); polys++; } if (iv > 1) { glVertex3f(xx, yy, zz); glVertex3f(sp->Prevxx[iv - 1], sp->Prevyy[iv - 1], sp->Prevzz[iv - 1]); polys++; } /* PURIFY 4.0.1 reports an unitialized memory read on the next line when using * MesaGL 2.2 and -mono. This has been fixed in MesaGL 2.3 and later. */ glEnd(); } } else { if ((sp->cs[iv] > 1e+10) || (sp->cs[iv] < -1e+10)) { xn = sp->cs[iv]; zn = sp->cs[iv]; yn = sp->ss[iv]; } else { xn = sp->cs[iv] * sp->cw[ih]; zn = sp->cs[iv] * sp->sw[ih]; yn = sp->ss[iv]; } if ((ih > 1) && (iv > 1)) { glNormal3f(xn, yn, zn); glBegin(GL_POLYGON); glVertex3f(xx, yy, zz); if (!sp->flatshade) glNormal3f(sp->Prevxn[iv], sp->Prevyn[iv], sp->Prevzn[iv]); glVertex3f(sp->Prevxx[iv], sp->Prevyy[iv], sp->Prevzz[iv]); if (!sp->flatshade) glNormal3f(xnp, ynp, znp); glVertex3f(xp, yp, zp); if (!sp->flatshade) glNormal3f(sp->Prevxn[iv - 1], sp->Prevyn[iv - 1], sp->Prevzn[iv - 1]); glVertex3f(sp->Prevxx[iv - 1], sp->Prevyy[iv - 1], sp->Prevzz[iv - 1]); polys++; glEnd(); } if (sp->shownorms) { if (!sp->flatshade) glShadeModel(GL_FLAT); glDisable(GL_LIGHTING); glBegin(GL_LINES); glVertex3f(xx, yy, zz); glVertex3f(xx + xn, yy + yn, zz + zn); polys++; glEnd(); if (!sp->flatshade) glShadeModel(GL_SMOOTH); glEnable(GL_LIGHTING); } xnp = sp->Prevxn[iv]; ynp = sp->Prevyn[iv]; znp = sp->Prevzn[iv]; sp->Prevxn[iv] = xn; sp->Prevyn[iv] = yn; sp->Prevzn[iv] = zn; } xp = sp->Prevxx[iv]; yp = sp->Prevyy[iv]; zp = sp->Prevzz[iv]; sp->Prevxx[iv] = xx; sp->Prevyy[iv] = yy; sp->Prevzz[iv] = zz; } /* next */ } /* next */ return polys; } /**** End of really old code ****/ static void SetCull(int init, superquadricsstruct * sp) { if (init) { glDisable(GL_CULL_FACE); sp->cullmode = 0; return; } if (sp->Mode < 1.0001) { if (sp->cullmode != 1) { glEnable(GL_CULL_FACE); glCullFace(GL_BACK); sp->cullmode = 1; } } else if (sp->Mode > 2.9999) { if (sp->cullmode != 2) { glEnable(GL_CULL_FACE); glCullFace(GL_FRONT); sp->cullmode = 2; } } else { if (sp->cullmode) { glDisable(GL_CULL_FACE); sp->cullmode = 0; } } } static void SetCurrentShape(superquadricsstruct * sp) { int t; sp->xExponent = sp->now.xExponent = sp->later.xExponent; sp->yExponent = sp->now.yExponent = sp->later.yExponent; for (t = 0; t < 4; ++t) { sp->curmat[t][0] = sp->now.r[t] = sp->later.r[t]; sp->curmat[t][1] = sp->now.g[t] = sp->later.g[t]; sp->curmat[t][2] = sp->now.b[t] = sp->later.b[t]; } sp->Mode = (double) (sp->now.Mode = sp->later.Mode); sp->rotx = sp->now.rotx = sp->later.rotx; sp->rotz = sp->now.rotz = sp->later.rotz; sp->counter = -sp->maxwait; inputs(sp); } static void NextSuperquadric(superquadricsstruct * sp) { double fnow, flater; int t; sp->roty -= sp->spinspeed; while (sp->roty >= 360.0) sp->roty -= 360.0; while (sp->roty < 0.0) sp->roty += 360.0; --sp->viewcount; if (sp->counter > 0) { if (--sp->counter == 0) { SetCurrentShape(sp); if (sp->counter == 0) { /* Happens if sp->maxwait == 0 */ MakeUpStuff(0, sp); sp->counter = sp->maxcount; } } else { fnow = (double) sp->counter / (double) sp->maxcount; flater = (double) (sp->maxcount - sp->counter) / (double) sp->maxcount; sp->xExponent = sp->now.xExponent * fnow + sp->later.xExponent * flater; sp->yExponent = sp->now.yExponent * fnow + sp->later.yExponent * flater; for (t = 0; t < 4; ++t) { sp->curmat[t][0] = sp->now.r[t] * fnow + sp->later.r[t] * flater; sp->curmat[t][1] = sp->now.g[t] * fnow + sp->later.g[t] * flater; sp->curmat[t][2] = sp->now.b[t] * fnow + sp->later.b[t] * flater; } sp->Mode = (double) sp->now.Mode * fnow + (double) sp->later.Mode * flater; sp->rotx = (double) sp->now.rotx * fnow + (double) sp->later.rotx * flater; sp->rotz = (double) sp->now.rotz * fnow + (double) sp->later.rotz * flater; inputs(sp); } } else { if (++sp->counter >= 0) { MakeUpStuff(0, sp); sp->counter = sp->maxcount; } } } static int DisplaySuperquadrics(ModeInfo *mi) { superquadricsstruct *sp = &superquadrics[MI_SCREEN(mi)]; int polys = 0; glDrawBuffer(GL_BACK); if (sp->wireframe) glClear(GL_COLOR_BUFFER_BIT); else glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); if (sp->viewcount < 1) { sp->viewcount = sp->viewwait; /* ReshapeSuperquadrics(-1, -1);*/ } glPushMatrix(); glTranslatef(0.0, 0.0, -((GLfloat) (sp->dist) / 16.0) - (sp->Mode * 3.0 - 1.0)); /* viewing transform */ glRotatef(sp->rotx, 1.0, 0.0, 0.0); /* pitch */ glRotatef(sp->rotz, 0.0, 0.0, 1.0); /* bank */ glRotatef(sp->roty, 0.0, 1.0, 0.0); /* "spin", like heading but comes after P & B */ SetCull(0, sp); glScalef(0.7, 0.7, 0.7); /* jwz: scale it down a bit */ # ifdef HAVE_MOBILE /* Keep it the same relative size when rotated. */ { GLfloat h = MI_HEIGHT(mi) / (GLfloat) MI_WIDTH(mi); int o = (int) current_device_rotation(); if (o != 0 && o != 180 && o != -180) glScalef (1/h, 1/h, 1/h); } # endif polys = DoneScale(sp); glPopMatrix(); /* Remember to flush & swap the buffers after calling this function! */ return polys; } static int NextSuperquadricDisplay(ModeInfo *mi) { superquadricsstruct *sp = &superquadrics[MI_SCREEN(mi)]; NextSuperquadric(sp); return DisplaySuperquadrics(mi); } #define MINSIZE 200 static void ReshapeSuperquadrics(int w, int h) { #if 0 int maxsize, cursize; maxsize = (w < h) ? w : h; if (maxsize <= MINSIZE) { cursize = maxsize; } else { cursize = myrand(maxsize - MINSIZE) + MINSIZE; } if ((w > cursize) && (h > cursize)) { glViewport(myrand(w - cursize), myrand(h - cursize), cursize, cursize); w = h = cursize; } else { glViewport(0, 0, w, h); } #else glViewport(0, 0, w, h); #endif glMatrixMode(GL_PROJECTION); glLoadIdentity(); gluPerspective(15.0, (GLfloat) w / (GLfloat) h, 0.1, 200.0); glMatrixMode(GL_MODELVIEW); glLoadIdentity(); } static void InitSuperquadrics(int wfmode, int snorm, int res, int count, float speed, superquadricsstruct * sp) { GLfloat ambient[] = {0.4, 0.4, 0.4, 1.0}; GLfloat position[] = {10.0, 1.0, 1.0, 10.0}; GLfloat mat_diffuse[] = {1.0, 0.5, 0.5, 1.0}; GLfloat mat_specular[] = {0.8, 0.8, 0.8, 1.0}; GLfloat mat_shininess[] = {50.0}; int t; for (t = 0; t < 4; ++t) { sp->curmat[t][0] = 0.0; sp->curmat[t][1] = 0.0; sp->curmat[t][2] = 0.0; sp->curmat[t][3] = 1.0; } sp->rotx = 35.0; sp->roty = 0.0; sp->rotz = 0.0; sp->dist = (16 << 3); sp->wireframe = sp->flatshade = sp->shownorms = 0; sp->maxcount = count; if (sp->maxcount < 1) sp->maxcount = 1; sp->maxwait = sp->maxcount >> 1; SetCull(1, sp); sp->mono = 0; sp->spinspeed = speed; sp->viewcount = sp->viewwait = (sp->maxcount < 2) ? 1 : (sp->maxcount << 3); if (res < MinRes) res = MinRes; if (res > MaxRes) res = MaxRes; sp->resolution = res; if (wfmode == 2) sp->flatshade = 1; else if (wfmode) sp->wireframe = 1; if (snorm) sp->shownorms = 1; glClearDepth(1.0); if (sp->wireframe) { glShadeModel(GL_FLAT); glDisable(GL_LIGHTING); glColor3f(mat_diffuse[0], mat_diffuse[1], mat_diffuse[2]); } else { if (sp->flatshade) { glShadeModel(GL_FLAT); position[0] = 1.0; position[3] = 0.0; } glEnable(GL_LIGHTING); glEnable(GL_LIGHT0); glDepthFunc(GL_LEQUAL); glEnable(GL_DEPTH_TEST); glLightfv(GL_LIGHT0, GL_AMBIENT, ambient); glLightfv(GL_LIGHT0, GL_POSITION, position); /*glMaterialfv(GL_FRONT_AND_BACK, GL_AMBIENT_AND_DIFFUSE, mat_diffuse); */ glMaterialfv(GL_FRONT_AND_BACK, GL_SPECULAR, mat_specular); glMaterialfv(GL_FRONT_AND_BACK, GL_SHININESS, mat_shininess); glLightModeli(GL_LIGHT_MODEL_TWO_SIDE, GL_TRUE); glFrontFace(GL_CW); glEnable(GL_NORMALIZE); } MakeUpStuff(1, sp); SetCurrentShape(sp); MakeUpStuff(1, sp); /* Initialize it */ sp->counter = sp->maxcount; } /* End of superquadrics main functions */ ENTRYPOINT void init_superquadrics(ModeInfo * mi) { Display *display = MI_DISPLAY(mi); Window window = MI_WINDOW(mi); int screen = MI_SCREEN(mi); superquadricsstruct *sp; if (superquadrics == NULL) { if ((superquadrics = (superquadricsstruct *) calloc(MI_NUM_SCREENS(mi), sizeof (superquadricsstruct))) == NULL) return; } sp = &superquadrics[screen]; sp->mono = (MI_IS_MONO(mi) ? 1 : 0); sp->pats[1][1] = 1; sp->pats[1][3] = 1; sp->pats[2][2] = 1; sp->pats[2][3] = 1; sp->pats[3][1] = 1; sp->pats[3][2] = 1; /* {0, 0, 0, 0}, {0, 1, 0, 1}, {0, 0, 1, 1}, {0, 1, 1, 0} */ if ((sp->glx_context = init_GL(mi)) != NULL) { InitSuperquadrics(MI_IS_WIREFRAME(mi), 0, MI_COUNT(mi), MI_CYCLES(mi), spinspeed, sp); ReshapeSuperquadrics(MI_WIDTH(mi), MI_HEIGHT(mi)); DisplaySuperquadrics(mi); glFinish(); glXSwapBuffers(display, window); } else { MI_CLEARWINDOW(mi); } } ENTRYPOINT void draw_superquadrics(ModeInfo * mi) { superquadricsstruct *sp = &superquadrics[MI_SCREEN(mi)]; Display *display = MI_DISPLAY(mi); Window window = MI_WINDOW(mi); if (!sp->glx_context) return; glXMakeCurrent(display, window, *(sp->glx_context)); mi->polygon_count = NextSuperquadricDisplay(mi); if (mi->fps_p) do_fps (mi); glFinish(); glXSwapBuffers(display, window); } ENTRYPOINT void refresh_superquadrics(ModeInfo * mi) { /* Nothing happens here */ } ENTRYPOINT void reshape_superquadrics(ModeInfo * mi, int width, int height) { ReshapeSuperquadrics(MI_WIDTH(mi), MI_HEIGHT(mi)); } ENTRYPOINT void release_superquadrics(ModeInfo * mi) { if (superquadrics != NULL) { (void) free((void *) superquadrics); superquadrics = NULL; } FreeAllGL(mi); } #endif /* End of superquadrics.c */ XSCREENSAVER_MODULE ("Superquadrics", superquadrics) xscreensaver-5.36/hacks/glx/swim.c000644 000767 000024 00000014721 12701612217 017150 0ustar00jwzstaff000000 000000 /* atlantis --- Shows moving 3D sea animals */ #if 0 static const char sccsid[] = "@(#)swim.c 1.3 98/06/18 xlockmore"; #endif /* Copyright (c) E. Lassauge, 1998. */ /* * Permission to use, copy, modify, and distribute this software and its * documentation for any purpose and without fee is hereby granted, * provided that the above copyright notice appear in all copies and that * both that copyright notice and this permission notice appear in * supporting documentation. * * This file is provided AS IS with no warranties of any kind. The author * shall have no liability with respect to the infringement of copyrights, * trade secrets or any patents by this file or any part thereof. In no * event will the author be liable for any lost revenue or profits or * other special, indirect and consequential damages. * * The original code for this mode was written by Mark J. Kilgard * as a demo for openGL programming. * * Porting it to xlock was possible by comparing the original Mesa's morph3d * demo with it's ported version to xlock, so thanks for Marcelo F. Vianna * (look at morph3d.c) for his indirect help. * * Thanks goes also to Brian Paul for making it possible and inexpensive * to use OpenGL at home. * * My e-mail address is lassauge@users.sourceforge.net * * Eric Lassauge (May-13-1998) * */ /** * (c) Copyright 1993, 1994, Silicon Graphics, Inc. * ALL RIGHTS RESERVED * Permission to use, copy, modify, and distribute this software for * any purpose and without fee is hereby granted, provided that the above * copyright notice appear in all copies and that both the copyright notice * and this permission notice appear in supporting documentation, and that * the name of Silicon Graphics, Inc. not be used in advertising * or publicity pertaining to distribution of the software without specific, * written prior permission. * * THE MATERIAL EMBODIED ON THIS SOFTWARE IS PROVIDED TO YOU "AS-IS" * AND WITHOUT WARRANTY OF ANY KIND, EXPRESS, IMPLIED OR OTHERWISE, * INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY OR * FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL SILICON * GRAPHICS, INC. BE LIABLE TO YOU OR ANYONE ELSE FOR ANY DIRECT, * SPECIAL, INCIDENTAL, INDIRECT OR CONSEQUENTIAL DAMAGES OF ANY * KIND, OR ANY DAMAGES WHATSOEVER, INCLUDING WITHOUT LIMITATION, * LOSS OF PROFIT, LOSS OF USE, SAVINGS OR REVENUE, OR THE CLAIMS OF * THIRD PARTIES, WHETHER OR NOT SILICON GRAPHICS, INC. HAS BEEN * ADVISED OF THE POSSIBILITY OF SUCH LOSS, HOWEVER CAUSED AND ON * ANY THEORY OF LIABILITY, ARISING OUT OF OR IN CONNECTION WITH THE * POSSESSION, USE OR PERFORMANCE OF THIS SOFTWARE. * * US Government Users Restricted Rights * Use, duplication, or disclosure by the Government is subject to * restrictions set forth in FAR 52.227.19(c)(2) or subparagraph * (c)(1)(ii) of the Rights in Technical Data and Computer Software * clause at DFARS 252.227-7013 and/or in similar or successor * clauses in the FAR or the DOD or NASA FAR Supplement. * Unpublished-- rights reserved under the copyright laws of the * United States. Contractor/manufacturer is Silicon Graphics, * Inc., 2011 N. Shoreline Blvd., Mountain View, CA 94039-7311. * * OpenGL(TM) is a trademark of Silicon Graphics, Inc. */ #ifdef STANDALONE # include # include "xlockmoreI.h" /* from the xscreensaver distribution */ #else /* !STANDALONE */ # include "xlock.h" /* from the xlockmore distribution */ #endif /* !STANDALONE */ #ifdef USE_GL #include "atlantis.h" void FishTransform(fishRec * fish) { glTranslatef(fish->y, fish->z, -fish->x); glRotatef(-fish->psi, 0.0, 1.0, 0.0); glRotatef(fish->theta, 1.0, 0.0, 0.0); glRotatef(-fish->phi, 0.0, 0.0, 1.0); } void WhalePilot(fishRec * fish, float whalespeed, Bool whaledir) { fish->phi = -20.0; fish->theta = 0.0; fish->psi += ((whaledir) ? -0.5 : 0.5); fish->x += whalespeed * fish->v * cos(fish->psi / RAD) * cos(fish->theta / RAD); fish->y += whalespeed * fish->v * sin(fish->psi / RAD) * cos(fish->theta / RAD); fish->z += whalespeed * fish->v * sin(fish->theta / RAD); } void SharkPilot(fishRec * fish, float sharkspeed) { float X, Y, Z, tpsi, ttheta, thetal; fish->xt = 60000.0; fish->yt = 0.0; fish->zt = 0.0; X = fish->xt - fish->x; Y = fish->yt - fish->y; Z = fish->zt - fish->z; thetal = fish->theta; ttheta = RAD * atan(Z / (sqrt(X * X + Y * Y))); if (ttheta > fish->theta + 0.25) { fish->theta += 0.5; } else if (ttheta < fish->theta - 0.25) { fish->theta -= 0.5; } if (fish->theta > 90.0) { fish->theta = 90.0; } if (fish->theta < -90.0) { fish->theta = -90.0; } fish->dtheta = fish->theta - thetal; tpsi = RAD * atan2(Y, X); fish->attack = 0; if (fabs(tpsi - fish->psi) < 10.0) { fish->attack = 1; } else if (fabs(tpsi - fish->psi) < 45.0) { if (fish->psi > tpsi) { fish->psi -= 0.5; if (fish->psi < -180.0) { fish->psi += 360.0; } } else if (fish->psi < tpsi) { fish->psi += 0.5; if (fish->psi > 180.0) { fish->psi -= 360.0; } } } else { if (NRAND(100) > 98) { fish->sign = (fish->sign < 0 ? 1 : -1); } fish->psi += (fish->sign ? 1 : -1); if (fish->psi > 180.0) { fish->psi -= 360.0; } if (fish->psi < -180.0) { fish->psi += 360.0; } } if (fish->attack) { if (fish->v < 1.1) { fish->spurt = 1; } if (fish->spurt) { fish->v += 0.2; } if (fish->v > 5.0) { fish->spurt = 0; } if ((fish->v > 1.0) && (!fish->spurt)) { fish->v -= 0.2; } } else { if (!(NRAND(400)) && (!fish->spurt)) { fish->spurt = 1; } if (fish->spurt) { fish->v += 0.05; } if (fish->v > 3.0) { fish->spurt = 0; } if ((fish->v > 1.0) && (!fish->spurt)) { fish->v -= 0.05; } } fish->x += sharkspeed * fish->v * cos(fish->psi / RAD) * cos(fish->theta / RAD); fish->y += sharkspeed * fish->v * sin(fish->psi / RAD) * cos(fish->theta / RAD); fish->z += sharkspeed * fish->v * sin(fish->theta / RAD); } void SharkMiss(atlantisstruct * ap, int i) { int j; float avoid, thetal; float X, Y, Z, R; for (j = 0; j < ap->num_sharks; j++) { if (j != i) { X = ap->sharks[j].x - ap->sharks[i].x; Y = ap->sharks[j].y - ap->sharks[i].y; Z = ap->sharks[j].z - ap->sharks[i].z; R = sqrt(X * X + Y * Y + Z * Z); avoid = 1.0; thetal = ap->sharks[i].theta; if (R < ap->sharksize) { if (Z > 0.0) { ap->sharks[i].theta -= avoid; } else { ap->sharks[i].theta += avoid; } } ap->sharks[i].dtheta += (ap->sharks[i].theta - thetal); } } } #endif xscreensaver-5.36/hacks/glx/whale.c000644 000767 000024 00000134400 12701612217 017266 0ustar00jwzstaff000000 000000 /* atlantis --- Shows moving 3D sea animals */ #if 0 static const char sccsid[] = "@(#)whale.c 1.3 98/06/18 xlockmore"; #endif /* Copyright (c) E. Lassauge, 1998. */ /*- * Permission to use, copy, modify, and distribute this software and its * documentation for any purpose and without fee is hereby granted, * provided that the above copyright notice appear in all copies and that * both that copyright notice and this permission notice appear in * supporting documentation. * * This file is provided AS IS with no warranties of any kind. The author * shall have no liability with respect to the infringement of copyrights, * trade secrets or any patents by this file or any part thereof. In no * event will the author be liable for any lost revenue or profits or * other special, indirect and consequential damages. * * The original code for this mode was written by Mark J. Kilgard * as a demo for openGL programming. * * Porting it to xlock was possible by comparing the original Mesa's morph3d * demo with it's ported version to xlock, so thanks for Marcelo F. Vianna * (look at morph3d.c) for his indirect help. * * Thanks goes also to Brian Paul for making it possible and inexpensive * to use OpenGL at home. * * My e-mail address is lassauge@users.sourceforge.net * * Eric Lassauge (May-13-1998) * */ /*- * (c) Copyright 1993, 1994, Silicon Graphics, Inc. * ALL RIGHTS RESERVED * Permission to use, copy, modify, and distribute this software for * any purpose and without fee is hereby granted, provided that the above * copyright notice appear in all copies and that both the copyright notice * and this permission notice appear in supporting documentation, and that * the name of Silicon Graphics, Inc. not be used in advertising * or publicity pertaining to distribution of the software without specific, * written prior permission. * * THE MATERIAL EMBODIED ON THIS SOFTWARE IS PROVIDED TO YOU "AS-IS" * AND WITHOUT WARRANTY OF ANY KIND, EXPRESS, IMPLIED OR OTHERWISE, * INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY OR * FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL SILICON * GRAPHICS, INC. BE LIABLE TO YOU OR ANYONE ELSE FOR ANY DIRECT, * SPECIAL, INCIDENTAL, INDIRECT OR CONSEQUENTIAL DAMAGES OF ANY * KIND, OR ANY DAMAGES WHATSOEVER, INCLUDING WITHOUT LIMITATION, * LOSS OF PROFIT, LOSS OF USE, SAVINGS OR REVENUE, OR THE CLAIMS OF * THIRD PARTIES, WHETHER OR NOT SILICON GRAPHICS, INC. HAS BEEN * ADVISED OF THE POSSIBILITY OF SUCH LOSS, HOWEVER CAUSED AND ON * ANY THEORY OF LIABILITY, ARISING OUT OF OR IN CONNECTION WITH THE * POSSESSION, USE OR PERFORMANCE OF THIS SOFTWARE. * * US Government Users Restricted Rights * Use, duplication, or disclosure by the Government is subject to * restrictions set forth in FAR 52.227.19(c)(2) or subparagraph * (c)(1)(ii) of the Rights in Technical Data and Computer Software * clause at DFARS 252.227-7013 and/or in similar or successor * clauses in the FAR or the DOD or NASA FAR Supplement. * Unpublished-- rights reserved under the copyright laws of the * United States. Contractor/manufacturer is Silicon Graphics, * Inc., 2011 N. Shoreline Blvd., Mountain View, CA 94039-7311. * * OpenGL(TM) is a trademark of Silicon Graphics, Inc. */ #ifdef USE_GL #include "atlantis.h" /* *INDENT-OFF* */ static const float N001[3] = {0.019249, 0.01134, -0.99975}; static const float N002[3] = {-0.132579, 0.954547, 0.266952}; static const float N003[3] = {-0.196061, 0.980392, -0.019778}; static const float N004[3] = {0.695461, 0.604704, 0.388158}; static const float N005[3] = {0.8706, 0.425754, 0.246557}; static const float N006[3] = {-0.881191, 0.392012, 0.264251}; #if 0 static const float N007[3] = {0, 1, 0}; #endif static const float N008[3] = {-0.341437, 0.887477, 0.309523}; static const float N009[3] = {0.124035, -0.992278, 0}; static const float N010[3] = {0.242536, 0, -0.970143}; static const float N011[3] = {0.588172, 0, 0.808736}; static const float N012[3] = {0.929824, -0.340623, -0.139298}; static const float N013[3] = {0.954183, 0.267108, -0.134865}; static const float N014[3] = {0.495127, 0.855436, -0.151914}; static const float N015[3] = {-0.390199, 0.906569, -0.160867}; static const float N016[3] = {-0.923605, 0.354581, -0.145692}; static const float N017[3] = {-0.955796, -0.260667, -0.136036}; static const float N018[3] = {-0.501283, -0.853462, -0.14254}; static const float N019[3] = {0.4053, -0.901974, -0.148913}; static const float N020[3] = {0.909913, -0.392746, -0.133451}; static const float N021[3] = {0.936494, 0.331147, -0.115414}; static const float N022[3] = {0.600131, 0.793724, -0.099222}; static const float N023[3] = {-0.231556, 0.968361, -0.093053}; static const float N024[3] = {-0.844369, 0.52533, -0.105211}; static const float N025[3] = {-0.982725, -0.136329, -0.125164}; static const float N026[3] = {-0.560844, -0.822654, -0.093241}; static const float N027[3] = {0.263884, -0.959981, -0.093817}; static const float N028[3] = {0.842057, -0.525192, -0.122938}; static const float N029[3] = {0.92162, 0.367565, -0.124546}; static const float N030[3] = {0.613927, 0.784109, -0.090918}; static const float N031[3] = {-0.448754, 0.888261, -0.098037}; static const float N032[3] = {-0.891865, 0.434376, -0.126077}; static const float N033[3] = {-0.881447, -0.448017, -0.149437}; static const float N034[3] = {-0.345647, -0.922057, -0.174183}; static const float N035[3] = {0.307998, -0.941371, -0.137688}; static const float N036[3] = {0.806316, -0.574647, -0.140124}; static const float N037[3] = {0.961346, 0.233646, -0.145681}; static const float N038[3] = {0.488451, 0.865586, -0.110351}; static const float N039[3] = {-0.37429, 0.921953, -0.099553}; static const float N040[3] = {-0.928504, 0.344533, -0.138485}; static const float N041[3] = {-0.918419, -0.371792, -0.135189}; static const float N042[3] = {-0.520666, -0.833704, -0.183968}; static const float N043[3] = {0.339204, -0.920273, -0.195036}; static const float N044[3] = {0.921475, -0.387382, -0.028636}; static const float N045[3] = {0.842465, 0.533335, -0.076204}; static const float N046[3] = {0.38011, 0.924939, 0.002073}; static const float N047[3] = {-0.276128, 0.961073, -0.009579}; static const float N048[3] = {-0.879684, 0.473001, -0.04925}; static const float N049[3] = {-0.947184, -0.317614, -0.044321}; static const float N050[3] = {-0.642059, -0.764933, -0.051363}; static const float N051[3] = {0.466794, -0.880921, -0.07799}; static const float N052[3] = {0.898509, -0.432277, 0.076279}; static const float N053[3] = {0.938985, 0.328141, 0.103109}; static const float N054[3] = {0.44242, 0.895745, 0.043647}; static const float N055[3] = {-0.255163, 0.966723, 0.018407}; static const float N056[3] = {-0.833769, 0.54065, 0.111924}; static const float N057[3] = {-0.953653, -0.289939, 0.080507}; static const float N058[3] = {-0.672357, -0.730524, 0.119461}; static const float N059[3] = {0.522249, -0.846652, 0.102157}; static const float N060[3] = {0.885868, -0.427631, 0.179914}; #if 0 static const float N061[3] = {0, 1, 0}; #endif static const float N062[3] = {0.648942, 0.743116, 0.163255}; static const float N063[3] = {-0.578967, 0.80773, 0.111219}; #if 0 static const float N064[3] = {0, 1, 0}; #endif static const float N065[3] = {-0.909864, -0.352202, 0.219321}; static const float N066[3] = {-0.502541, -0.81809, 0.27961}; static const float N067[3] = {0.322919, -0.915358, 0.240504}; static const float N068[3] = {0.242536, 0, -0.970143}; static const float N069[3] = {0, 1, 0}; static const float N070[3] = {0, 1, 0}; static const float N071[3] = {0, 1, 0}; static const float N072[3] = {0, 1, 0}; static const float N073[3] = {0, 1, 0}; static const float N074[3] = {0, 1, 0}; static const float N075[3] = {0.03122, 0.999025, -0.03122}; static const float N076[3] = {0, 1, 0}; static const float N077[3] = {0.446821, 0.893642, 0.041889}; static const float N078[3] = {0.863035, -0.10098, 0.494949}; static const float N079[3] = {0.585597, -0.808215, 0.062174}; static const float N080[3] = {0, 1, 0}; static const float N081[3] = {1, 0, 0}; static const float N082[3] = {0, 1, 0}; static const float N083[3] = {-1, 0, 0}; static const float N084[3] = {-0.478893, 0.837129, -0.264343}; static const float N085[3] = {0, 1, 0}; static const float N086[3] = {0.763909, 0.539455, -0.354163}; static const float N087[3] = {0.446821, 0.893642, 0.041889}; static const float N088[3] = {0.385134, -0.908288, 0.163352}; static const float N089[3] = {-0.605952, 0.779253, -0.159961}; static const float N090[3] = {0, 1, 0}; static const float N091[3] = {0, 1, 0}; static const float N092[3] = {0, 1, 0}; static const float N093[3] = {0, 1, 0}; static const float N094[3] = {1, 0, 0}; static const float N095[3] = {-1, 0, 0}; static const float N096[3] = {0.644444, -0.621516, 0.445433}; static const float N097[3] = {-0.760896, -0.474416, 0.442681}; static const float N098[3] = {0.636888, -0.464314, 0.615456}; static const float N099[3] = {-0.710295, 0.647038, 0.277168}; static const float N100[3] = {0.009604, 0.993655, 0.112063}; #if 0 static const float N101[3] = {0, 1, 0}; static const float N102[3] = {0, 1, 0}; static const float N103[3] = {0, 1, 0}; static const float N104[3] = {0.031837, 0.999285, 0.020415}; static const float N105[3] = {0.031837, 0.999285, 0.020415}; static const float N106[3] = {0.031837, 0.999285, 0.020415}; static const float N107[3] = {0.014647, 0.999648, 0.022115}; static const float N108[3] = {0.014647, 0.999648, 0.022115}; static const float N109[3] = {0.014647, 0.999648, 0.022115}; static const float N110[3] = {-0.985141, 0.039475, 0.167149}; static const float N111[3] = {-0.985141, 0.039475, 0.167149}; static const float N112[3] = {-0.985141, 0.039475, 0.167149}; static const float N113[3] = {0, 1, 0}; static const float N114[3] = {0, 1, 0}; static const float N115[3] = {0, 1, 0}; static const float N116[3] = {0, 1, 0}; static const float N117[3] = {0, 1, 0}; static const float N118[3] = {0, 1, 0}; static const float N119[3] = {0, 1, 0}; static const float N120[3] = {0, 1, 0}; static const float N121[3] = {0, 1, 0}; #endif static const float iP001[3] = {18.74, 13.19, 3.76}; static float P001[3] = {18.74, 13.19, 3.76}; static const float P002[3] = {0, 390.42, 10292.57}; static const float P003[3] = {55.8, 622.31, 8254.35}; static const float P004[3] = {20.8, 247.66, 10652.13}; static const float P005[3] = {487.51, 198.05, 9350.78}; static const float P006[3] = {-457.61, 199.04, 9353.01}; #if 0 static const float P007[3] = {0, 259, 10276.27}; #endif static const float P008[3] = {-34.67, 247.64, 10663.71}; static const float iP009[3] = {97.46, 67.63, 593.82}; static const float iP010[3] = {-84.33, 67.63, 588.18}; static const float iP011[3] = {118.69, 8.98, -66.91}; static float P009[3] = {97.46, 67.63, 593.82}; static float P010[3] = {-84.33, 67.63, 588.18}; static float P011[3] = {118.69, 8.98, -66.91}; static const float iP012[3] = {156.48, -31.95, 924.54}; static const float iP013[3] = {162, 110.22, 924.54}; static const float iP014[3] = {88.16, 221.65, 924.54}; static const float iP015[3] = {-65.21, 231.16, 924.54}; static const float iP016[3] = {-156.48, 121.97, 924.54}; static const float iP017[3] = {-162, -23.93, 924.54}; static const float iP018[3] = {-88.16, -139.1, 924.54}; static const float iP019[3] = {65.21, -148.61, 924.54}; static const float iP020[3] = {246.87, -98.73, 1783.04}; static const float iP021[3] = {253.17, 127.76, 1783.04}; static const float iP022[3] = {132.34, 270.77, 1783.04}; static const float iP023[3] = {-97.88, 285.04, 1783.04}; static const float iP024[3] = {-222.97, 139.8, 1783.04}; static const float iP025[3] = {-225.29, -86.68, 1783.04}; static const float iP026[3] = {-108.44, -224.15, 1783.04}; static const float iP027[3] = {97.88, -221.56, 1783.04}; static const float iP028[3] = {410.55, -200.66, 3213.87}; static const float iP029[3] = {432.19, 148.42, 3213.87}; static const float iP030[3] = {200.66, 410.55, 3213.87}; static const float iP031[3] = {-148.42, 432.19, 3213.87}; static const float iP032[3] = {-407.48, 171.88, 3213.87}; static const float iP033[3] = {-432.19, -148.42, 3213.87}; static const float iP034[3] = {-148.88, -309.74, 3213.87}; static const float iP035[3] = {156.38, -320.17, 3213.87}; static const float iP036[3] = {523.39, -303.81, 4424.57}; static const float iP037[3] = {574.66, 276.84, 4424.57}; static const float iP038[3] = {243.05, 492.5, 4424.57}; static const float iP039[3] = {-191.23, 520.13, 4424.57}; static const float iP040[3] = {-523.39, 304.01, 4424.57}; static const float iP041[3] = {-574.66, -231.83, 4424.57}; static const float iP042[3] = {-266.95, -578.17, 4424.57}; static const float iP043[3] = {211.14, -579.67, 4424.57}; static const float iP044[3] = {680.57, -370.27, 5943.46}; static const float iP045[3] = {834.01, 363.09, 5943.46}; static const float iP046[3] = {371.29, 614.13, 5943.46}; static const float iP047[3] = {-291.43, 621.86, 5943.46}; static const float iP048[3] = {-784.13, 362.6, 5943.46}; static const float iP049[3] = {-743.29, -325.82, 5943.46}; static const float iP050[3] = {-383.24, -804.77, 5943.46}; static const float iP051[3] = {283.47, -846.09, 5943.46}; static float P012[3] = {156.48, -31.95, 924.54}; static float P013[3] = {162, 110.22, 924.54}; static float P014[3] = {88.16, 221.65, 924.54}; static float P015[3] = {-65.21, 231.16, 924.54}; static float P016[3] = {-156.48, 121.97, 924.54}; static float P017[3] = {-162, -23.93, 924.54}; static float P018[3] = {-88.16, -139.1, 924.54}; static float P019[3] = {65.21, -148.61, 924.54}; static float P020[3] = {246.87, -98.73, 1783.04}; static float P021[3] = {253.17, 127.76, 1783.04}; static float P022[3] = {132.34, 270.77, 1783.04}; static float P023[3] = {-97.88, 285.04, 1783.04}; static float P024[3] = {-222.97, 139.8, 1783.04}; static float P025[3] = {-225.29, -86.68, 1783.04}; static float P026[3] = {-108.44, -224.15, 1783.04}; static float P027[3] = {97.88, -221.56, 1783.04}; static float P028[3] = {410.55, -200.66, 3213.87}; static float P029[3] = {432.19, 148.42, 3213.87}; static float P030[3] = {200.66, 410.55, 3213.87}; static float P031[3] = {-148.42, 432.19, 3213.87}; static float P032[3] = {-407.48, 171.88, 3213.87}; static float P033[3] = {-432.19, -148.42, 3213.87}; static float P034[3] = {-148.88, -309.74, 3213.87}; static float P035[3] = {156.38, -320.17, 3213.87}; static float P036[3] = {523.39, -303.81, 4424.57}; static float P037[3] = {574.66, 276.84, 4424.57}; static float P038[3] = {243.05, 492.5, 4424.57}; static float P039[3] = {-191.23, 520.13, 4424.57}; static float P040[3] = {-523.39, 304.01, 4424.57}; static float P041[3] = {-574.66, -231.83, 4424.57}; static float P042[3] = {-266.95, -578.17, 4424.57}; static float P043[3] = {211.14, -579.67, 4424.57}; static float P044[3] = {680.57, -370.27, 5943.46}; static float P045[3] = {834.01, 363.09, 5943.46}; static float P046[3] = {371.29, 614.13, 5943.46}; static float P047[3] = {-291.43, 621.86, 5943.46}; static float P048[3] = {-784.13, 362.6, 5943.46}; static float P049[3] = {-743.29, -325.82, 5943.46}; static float P050[3] = {-383.24, -804.77, 5943.46}; static float P051[3] = {283.47, -846.09, 5943.46}; static const float P052[3] = {599.09, -332.24, 7902.59}; static const float P053[3] = {735.48, 306.26, 7911.92}; static const float P054[3] = {321.55, 558.53, 7902.59}; static const float P055[3] = {-260.54, 559.84, 7902.59}; static const float P056[3] = {-698.66, 320.83, 7902.59}; static const float P057[3] = {-643.29, -299.16, 7902.59}; static const float P058[3] = {-341.47, -719.3, 7902.59}; static const float P059[3] = {252.57, -756.12, 7902.59}; static const float P060[3] = {458.39, -265.31, 9355.44}; static const float iP061[3] = {353.63, 138.7, 10214.2}; static float P061[3] = {353.63, 138.7, 10214.2}; static const float P062[3] = {224.04, 438.98, 9364.77}; static const float P063[3] = {-165.71, 441.27, 9355.44}; static const float iP064[3] = {-326.4, 162.04, 10209.54}; static float P064[3] = {-326.4, 162.04, 10209.54}; static const float P065[3] = {-473.99, -219.71, 9355.44}; static const float P066[3] = {-211.97, -479.87, 9355.44}; static const float P067[3] = {192.86, -504.03, 9355.44}; static const float iP068[3] = {-112.44, 9.25, -64.42}; static const float iP069[3] = {1155.63, 0, -182.46}; static const float iP070[3] = {-1143.13, 0, -181.54}; static const float iP071[3] = {1424.23, 0, -322.09}; static const float iP072[3] = {-1368.01, 0, -310.38}; static const float iP073[3] = {1255.57, 2.31, 114.05}; static const float iP074[3] = {-1149.38, 0, 117.12}; static const float iP075[3] = {718.36, 0, 433.36}; static const float iP076[3] = {-655.9, 0, 433.36}; static float P068[3] = {-112.44, 9.25, -64.42}; static float P069[3] = {1155.63, 0, -182.46}; static float P070[3] = {-1143.13, 0, -181.54}; static float P071[3] = {1424.23, 0, -322.09}; static float P072[3] = {-1368.01, 0, -310.38}; static float P073[3] = {1255.57, 2.31, 114.05}; static float P074[3] = {-1149.38, 0, 117.12}; static float P075[3] = {718.36, 0, 433.36}; static float P076[3] = {-655.9, 0, 433.36}; static const float P077[3] = {1058, -2.66, 7923.51}; static const float P078[3] = {-1016.51, -15.47, 7902.87}; static const float P079[3] = {-1363.99, -484.5, 7593.38}; static const float P080[3] = {1478.09, -861.47, 7098.12}; static const float P081[3] = {1338.06, -284.68, 7024.15}; static const float P082[3] = {-1545.51, -860.64, 7106.6}; static const float P083[3] = {1063.19, -70.46, 7466.6}; static const float P084[3] = {-1369.18, -288.11, 7015.34}; static const float P085[3] = {1348.44, -482.5, 7591.41}; static const float P086[3] = {-1015.45, -96.8, 7474.86}; static const float P087[3] = {731.04, 148.38, 7682.58}; static const float P088[3] = {-697.03, 151.82, 7668.81}; static const float P089[3] = {-686.82, 157.09, 7922.29}; static const float P090[3] = {724.73, 147.75, 7931.39}; static const float iP091[3] = {0, 327.1, 2346.55}; static const float iP092[3] = {0, 552.28, 2311.31}; static const float iP093[3] = {0, 721.16, 2166.41}; static const float iP094[3] = {0, 693.42, 2388.8}; static const float iP095[3] = {0, 389.44, 2859.97}; static float P091[3] = {0, 327.1, 2346.55}; static float P092[3] = {0, 552.28, 2311.31}; static float P093[3] = {0, 721.16, 2166.41}; static float P094[3] = {0, 693.42, 2388.8}; static float P095[3] = {0, 389.44, 2859.97}; static const float iP096[3] = {222.02, -183.67, 10266.89}; static const float iP097[3] = {-128.9, -182.7, 10266.89}; static const float iP098[3] = {41.04, 88.31, 10659.36}; static const float iP099[3] = {-48.73, 88.3, 10659.36}; static float P096[3] = {222.02, -183.67, 10266.89}; static float P097[3] = {-128.9, -182.7, 10266.89}; static float P098[3] = {41.04, 88.31, 10659.36}; static float P099[3] = {-48.73, 88.3, 10659.36}; static const float P100[3] = {0, 603.42, 9340.68}; #if 0 static const float P101[3] = {5.7, 567, 7862.98}; static const float P102[3] = {521.61, 156.61, 9162.34}; static const float P103[3] = {83.68, 566.67, 7861.26}; #endif static const float P104[3] = {-9.86, 567.62, 7858.65}; static const float P105[3] = {31.96, 565.27, 7908.46}; static const float P106[3] = {22.75, 568.13, 7782.83}; static const float P107[3] = {58.93, 568.42, 7775.94}; static const float P108[3] = {55.91, 565.59, 7905.86}; static const float P109[3] = {99.21, 566, 7858.65}; static const float P110[3] = {-498.83, 148.14, 9135.1}; static const float P111[3] = {-495.46, 133.24, 9158.48}; static const float P112[3] = {-490.82, 146.23, 9182.76}; static const float P113[3] = {-489.55, 174.11, 9183.66}; static const float P114[3] = {-492.92, 189, 9160.28}; static const float P115[3] = {-497.56, 176.02, 9136}; static const float P116[3] = {526.54, 169.68, 9137.7}; static const float P117[3] = {523.49, 184.85, 9161.42}; static const float P118[3] = {518.56, 171.78, 9186.06}; static const float P119[3] = {516.68, 143.53, 9186.98}; static const float P120[3] = {519.73, 128.36, 9163.26}; static const float P121[3] = {524.66, 141.43, 9138.62}; /* *INDENT-ON* */ static void Whale001(GLenum cap) { glBegin(cap); glNormal3fv(N001); glVertex3fv(P001); glNormal3fv(N068); glVertex3fv(P068); glNormal3fv(N010); glVertex3fv(P010); glEnd(); glBegin(cap); glNormal3fv(N068); glVertex3fv(P068); glNormal3fv(N076); glVertex3fv(P076); glNormal3fv(N010); glVertex3fv(P010); glEnd(); glBegin(cap); glNormal3fv(N068); glVertex3fv(P068); glNormal3fv(N070); glVertex3fv(P070); glNormal3fv(N076); glVertex3fv(P076); glEnd(); glBegin(cap); glNormal3fv(N076); glVertex3fv(P076); glNormal3fv(N070); glVertex3fv(P070); glNormal3fv(N074); glVertex3fv(P074); glEnd(); glBegin(cap); glNormal3fv(N070); glVertex3fv(P070); glNormal3fv(N072); glVertex3fv(P072); glNormal3fv(N074); glVertex3fv(P074); glEnd(); glBegin(cap); glNormal3fv(N072); glVertex3fv(P072); glNormal3fv(N070); glVertex3fv(P070); glNormal3fv(N074); glVertex3fv(P074); glEnd(); glBegin(cap); glNormal3fv(N074); glVertex3fv(P074); glNormal3fv(N070); glVertex3fv(P070); glNormal3fv(N076); glVertex3fv(P076); glEnd(); glBegin(cap); glNormal3fv(N070); glVertex3fv(P070); glNormal3fv(N068); glVertex3fv(P068); glNormal3fv(N076); glVertex3fv(P076); glEnd(); glBegin(cap); glNormal3fv(N076); glVertex3fv(P076); glNormal3fv(N068); glVertex3fv(P068); glNormal3fv(N010); glVertex3fv(P010); glEnd(); glBegin(cap); glNormal3fv(N068); glVertex3fv(P068); glNormal3fv(N001); glVertex3fv(P001); glNormal3fv(N010); glVertex3fv(P010); glEnd(); } static void Whale002(GLenum cap) { glBegin(cap); glNormal3fv(N011); glVertex3fv(P011); glNormal3fv(N001); glVertex3fv(P001); glNormal3fv(N009); glVertex3fv(P009); glEnd(); glBegin(cap); glNormal3fv(N075); glVertex3fv(P075); glNormal3fv(N011); glVertex3fv(P011); glNormal3fv(N009); glVertex3fv(P009); glEnd(); glBegin(cap); glNormal3fv(N069); glVertex3fv(P069); glNormal3fv(N011); glVertex3fv(P011); glNormal3fv(N075); glVertex3fv(P075); glEnd(); glBegin(cap); glNormal3fv(N069); glVertex3fv(P069); glNormal3fv(N075); glVertex3fv(P075); glNormal3fv(N073); glVertex3fv(P073); glEnd(); glBegin(cap); glNormal3fv(N071); glVertex3fv(P071); glNormal3fv(N069); glVertex3fv(P069); glNormal3fv(N073); glVertex3fv(P073); glEnd(); glBegin(cap); glNormal3fv(N001); glVertex3fv(P001); glNormal3fv(N011); glVertex3fv(P011); glNormal3fv(N009); glVertex3fv(P009); glEnd(); glBegin(cap); glNormal3fv(N009); glVertex3fv(P009); glNormal3fv(N011); glVertex3fv(P011); glNormal3fv(N075); glVertex3fv(P075); glEnd(); glBegin(cap); glNormal3fv(N011); glVertex3fv(P011); glNormal3fv(N069); glVertex3fv(P069); glNormal3fv(N075); glVertex3fv(P075); glEnd(); glBegin(cap); glNormal3fv(N069); glVertex3fv(P069); glNormal3fv(N073); glVertex3fv(P073); glNormal3fv(N075); glVertex3fv(P075); glEnd(); glBegin(cap); glNormal3fv(N069); glVertex3fv(P069); glNormal3fv(N071); glVertex3fv(P071); glNormal3fv(N073); glVertex3fv(P073); glEnd(); } static void Whale003(GLenum cap) { glBegin(cap); glNormal3fv(N018); glVertex3fv(P018); glNormal3fv(N001); glVertex3fv(P001); glNormal3fv(N019); glVertex3fv(P019); glEnd(); glBegin(cap); glNormal3fv(N019); glVertex3fv(P019); glNormal3fv(N001); glVertex3fv(P001); glNormal3fv(N012); glVertex3fv(P012); glEnd(); glBegin(cap); glNormal3fv(N017); glVertex3fv(P017); glNormal3fv(N001); glVertex3fv(P001); glNormal3fv(N018); glVertex3fv(P018); glEnd(); glBegin(cap); glNormal3fv(N001); glVertex3fv(P001); glNormal3fv(N017); glVertex3fv(P017); glNormal3fv(N016); glVertex3fv(P016); glEnd(); glBegin(cap); glNormal3fv(N001); glVertex3fv(P001); glNormal3fv(N013); glVertex3fv(P013); glNormal3fv(N012); glVertex3fv(P012); glEnd(); glBegin(cap); glNormal3fv(N001); glVertex3fv(P001); glNormal3fv(N016); glVertex3fv(P016); glNormal3fv(N015); glVertex3fv(P015); glEnd(); glBegin(cap); glNormal3fv(N001); glVertex3fv(P001); glNormal3fv(N014); glVertex3fv(P014); glNormal3fv(N013); glVertex3fv(P013); glEnd(); glBegin(cap); glNormal3fv(N001); glVertex3fv(P001); glNormal3fv(N015); glVertex3fv(P015); glNormal3fv(N014); glVertex3fv(P014); glEnd(); } static void Whale004(GLenum cap) { glBegin(cap); glNormal3fv(N014); glVertex3fv(P014); glNormal3fv(N015); glVertex3fv(P015); glNormal3fv(N023); glVertex3fv(P023); glNormal3fv(N022); glVertex3fv(P022); glEnd(); glBegin(cap); glNormal3fv(N015); glVertex3fv(P015); glNormal3fv(N016); glVertex3fv(P016); glNormal3fv(N024); glVertex3fv(P024); glNormal3fv(N023); glVertex3fv(P023); glEnd(); glBegin(cap); glNormal3fv(N016); glVertex3fv(P016); glNormal3fv(N017); glVertex3fv(P017); glNormal3fv(N025); glVertex3fv(P025); glNormal3fv(N024); glVertex3fv(P024); glEnd(); glBegin(cap); glNormal3fv(N017); glVertex3fv(P017); glNormal3fv(N018); glVertex3fv(P018); glNormal3fv(N026); glVertex3fv(P026); glNormal3fv(N025); glVertex3fv(P025); glEnd(); glBegin(cap); glNormal3fv(N013); glVertex3fv(P013); glNormal3fv(N014); glVertex3fv(P014); glNormal3fv(N022); glVertex3fv(P022); glNormal3fv(N021); glVertex3fv(P021); glEnd(); glBegin(cap); glNormal3fv(N012); glVertex3fv(P012); glNormal3fv(N013); glVertex3fv(P013); glNormal3fv(N021); glVertex3fv(P021); glNormal3fv(N020); glVertex3fv(P020); glEnd(); glBegin(cap); glNormal3fv(N018); glVertex3fv(P018); glNormal3fv(N019); glVertex3fv(P019); glNormal3fv(N027); glVertex3fv(P027); glNormal3fv(N026); glVertex3fv(P026); glEnd(); glBegin(cap); glNormal3fv(N019); glVertex3fv(P019); glNormal3fv(N012); glVertex3fv(P012); glNormal3fv(N020); glVertex3fv(P020); glNormal3fv(N027); glVertex3fv(P027); glEnd(); } static void Whale005(GLenum cap) { glBegin(cap); glNormal3fv(N022); glVertex3fv(P022); glNormal3fv(N023); glVertex3fv(P023); glNormal3fv(N031); glVertex3fv(P031); glNormal3fv(N030); glVertex3fv(P030); glEnd(); glBegin(cap); glNormal3fv(N021); glVertex3fv(P021); glNormal3fv(N022); glVertex3fv(P022); glNormal3fv(N030); glVertex3fv(P030); glEnd(); glBegin(cap); glNormal3fv(N021); glVertex3fv(P021); glNormal3fv(N030); glVertex3fv(P030); glNormal3fv(N029); glVertex3fv(P029); glEnd(); glBegin(cap); glNormal3fv(N023); glVertex3fv(P023); glNormal3fv(N024); glVertex3fv(P024); glNormal3fv(N031); glVertex3fv(P031); glEnd(); glBegin(cap); glNormal3fv(N024); glVertex3fv(P024); glNormal3fv(N032); glVertex3fv(P032); glNormal3fv(N031); glVertex3fv(P031); glEnd(); glBegin(cap); glNormal3fv(N024); glVertex3fv(P024); glNormal3fv(N025); glVertex3fv(P025); glNormal3fv(N032); glVertex3fv(P032); glEnd(); glBegin(cap); glNormal3fv(N025); glVertex3fv(P025); glNormal3fv(N033); glVertex3fv(P033); glNormal3fv(N032); glVertex3fv(P032); glEnd(); glBegin(cap); glNormal3fv(N020); glVertex3fv(P020); glNormal3fv(N021); glVertex3fv(P021); glNormal3fv(N029); glVertex3fv(P029); glEnd(); glBegin(cap); glNormal3fv(N020); glVertex3fv(P020); glNormal3fv(N029); glVertex3fv(P029); glNormal3fv(N028); glVertex3fv(P028); glEnd(); glBegin(cap); glNormal3fv(N027); glVertex3fv(P027); glNormal3fv(N020); glVertex3fv(P020); glNormal3fv(N028); glVertex3fv(P028); glEnd(); glBegin(cap); glNormal3fv(N027); glVertex3fv(P027); glNormal3fv(N028); glVertex3fv(P028); glNormal3fv(N035); glVertex3fv(P035); glEnd(); glBegin(cap); glNormal3fv(N025); glVertex3fv(P025); glNormal3fv(N026); glVertex3fv(P026); glNormal3fv(N033); glVertex3fv(P033); glEnd(); glBegin(cap); glNormal3fv(N033); glVertex3fv(P033); glNormal3fv(N026); glVertex3fv(P026); glNormal3fv(N034); glVertex3fv(P034); glEnd(); glBegin(cap); glNormal3fv(N026); glVertex3fv(P026); glNormal3fv(N027); glVertex3fv(P027); glNormal3fv(N035); glVertex3fv(P035); glNormal3fv(N034); glVertex3fv(P034); glEnd(); } static void Whale006(GLenum cap) { glBegin(cap); glNormal3fv(N092); glVertex3fv(P092); glNormal3fv(N093); glVertex3fv(P093); glNormal3fv(N094); glVertex3fv(P094); glEnd(); glBegin(cap); glNormal3fv(N093); glVertex3fv(P093); glNormal3fv(N092); glVertex3fv(P092); glNormal3fv(N094); glVertex3fv(P094); glEnd(); glBegin(cap); glNormal3fv(N092); glVertex3fv(P092); glNormal3fv(N091); glVertex3fv(P091); glNormal3fv(N095); glVertex3fv(P095); glNormal3fv(N094); glVertex3fv(P094); glEnd(); glBegin(cap); glNormal3fv(N091); glVertex3fv(P091); glNormal3fv(N092); glVertex3fv(P092); glNormal3fv(N094); glVertex3fv(P094); glNormal3fv(N095); glVertex3fv(P095); glEnd(); } static void Whale007(GLenum cap) { glBegin(cap); glNormal3fv(N030); glVertex3fv(P030); glNormal3fv(N031); glVertex3fv(P031); glNormal3fv(N039); glVertex3fv(P039); glNormal3fv(N038); glVertex3fv(P038); glEnd(); glBegin(cap); glNormal3fv(N029); glVertex3fv(P029); glNormal3fv(N030); glVertex3fv(P030); glNormal3fv(N038); glVertex3fv(P038); glEnd(); glBegin(cap); glNormal3fv(N029); glVertex3fv(P029); glNormal3fv(N038); glVertex3fv(P038); glNormal3fv(N037); glVertex3fv(P037); glEnd(); glBegin(cap); glNormal3fv(N028); glVertex3fv(P028); glNormal3fv(N029); glVertex3fv(P029); glNormal3fv(N037); glVertex3fv(P037); glEnd(); glBegin(cap); glNormal3fv(N028); glVertex3fv(P028); glNormal3fv(N037); glVertex3fv(P037); glNormal3fv(N036); glVertex3fv(P036); glEnd(); glBegin(cap); glNormal3fv(N035); glVertex3fv(P035); glNormal3fv(N028); glVertex3fv(P028); glNormal3fv(N036); glVertex3fv(P036); glEnd(); glBegin(cap); glNormal3fv(N035); glVertex3fv(P035); glNormal3fv(N036); glVertex3fv(P036); glNormal3fv(N043); glVertex3fv(P043); glEnd(); glBegin(cap); glNormal3fv(N034); glVertex3fv(P034); glNormal3fv(N035); glVertex3fv(P035); glNormal3fv(N043); glVertex3fv(P043); glNormal3fv(N042); glVertex3fv(P042); glEnd(); glBegin(cap); glNormal3fv(N033); glVertex3fv(P033); glNormal3fv(N034); glVertex3fv(P034); glNormal3fv(N042); glVertex3fv(P042); glEnd(); glBegin(cap); glNormal3fv(N033); glVertex3fv(P033); glNormal3fv(N042); glVertex3fv(P042); glNormal3fv(N041); glVertex3fv(P041); glEnd(); glBegin(cap); glNormal3fv(N031); glVertex3fv(P031); glNormal3fv(N032); glVertex3fv(P032); glNormal3fv(N039); glVertex3fv(P039); glEnd(); glBegin(cap); glNormal3fv(N039); glVertex3fv(P039); glNormal3fv(N032); glVertex3fv(P032); glNormal3fv(N040); glVertex3fv(P040); glEnd(); glBegin(cap); glNormal3fv(N032); glVertex3fv(P032); glNormal3fv(N033); glVertex3fv(P033); glNormal3fv(N040); glVertex3fv(P040); glEnd(); glBegin(cap); glNormal3fv(N040); glVertex3fv(P040); glNormal3fv(N033); glVertex3fv(P033); glNormal3fv(N041); glVertex3fv(P041); glEnd(); } static void Whale008(GLenum cap) { glBegin(cap); glNormal3fv(N042); glVertex3fv(P042); glNormal3fv(N043); glVertex3fv(P043); glNormal3fv(N051); glVertex3fv(P051); glNormal3fv(N050); glVertex3fv(P050); glEnd(); glBegin(cap); glNormal3fv(N043); glVertex3fv(P043); glNormal3fv(N036); glVertex3fv(P036); glNormal3fv(N051); glVertex3fv(P051); glEnd(); glBegin(cap); glNormal3fv(N051); glVertex3fv(P051); glNormal3fv(N036); glVertex3fv(P036); glNormal3fv(N044); glVertex3fv(P044); glEnd(); glBegin(cap); glNormal3fv(N041); glVertex3fv(P041); glNormal3fv(N042); glVertex3fv(P042); glNormal3fv(N050); glVertex3fv(P050); glEnd(); glBegin(cap); glNormal3fv(N041); glVertex3fv(P041); glNormal3fv(N050); glVertex3fv(P050); glNormal3fv(N049); glVertex3fv(P049); glEnd(); glBegin(cap); glNormal3fv(N036); glVertex3fv(P036); glNormal3fv(N037); glVertex3fv(P037); glNormal3fv(N044); glVertex3fv(P044); glEnd(); glBegin(cap); glNormal3fv(N044); glVertex3fv(P044); glNormal3fv(N037); glVertex3fv(P037); glNormal3fv(N045); glVertex3fv(P045); glEnd(); glBegin(cap); glNormal3fv(N040); glVertex3fv(P040); glNormal3fv(N041); glVertex3fv(P041); glNormal3fv(N049); glVertex3fv(P049); glEnd(); glBegin(cap); glNormal3fv(N040); glVertex3fv(P040); glNormal3fv(N049); glVertex3fv(P049); glNormal3fv(N048); glVertex3fv(P048); glEnd(); glBegin(cap); glNormal3fv(N039); glVertex3fv(P039); glNormal3fv(N040); glVertex3fv(P040); glNormal3fv(N048); glVertex3fv(P048); glEnd(); glBegin(cap); glNormal3fv(N039); glVertex3fv(P039); glNormal3fv(N048); glVertex3fv(P048); glNormal3fv(N047); glVertex3fv(P047); glEnd(); glBegin(cap); glNormal3fv(N037); glVertex3fv(P037); glNormal3fv(N038); glVertex3fv(P038); glNormal3fv(N045); glVertex3fv(P045); glEnd(); glBegin(cap); glNormal3fv(N038); glVertex3fv(P038); glNormal3fv(N046); glVertex3fv(P046); glNormal3fv(N045); glVertex3fv(P045); glEnd(); glBegin(cap); glNormal3fv(N038); glVertex3fv(P038); glNormal3fv(N039); glVertex3fv(P039); glNormal3fv(N047); glVertex3fv(P047); glNormal3fv(N046); glVertex3fv(P046); glEnd(); } static void Whale009(GLenum cap) { glBegin(cap); glNormal3fv(N050); glVertex3fv(P050); glNormal3fv(N051); glVertex3fv(P051); glNormal3fv(N059); glVertex3fv(P059); glNormal3fv(N058); glVertex3fv(P058); glEnd(); glBegin(cap); glNormal3fv(N051); glVertex3fv(P051); glNormal3fv(N044); glVertex3fv(P044); glNormal3fv(N059); glVertex3fv(P059); glEnd(); glBegin(cap); glNormal3fv(N059); glVertex3fv(P059); glNormal3fv(N044); glVertex3fv(P044); glNormal3fv(N052); glVertex3fv(P052); glEnd(); glBegin(cap); glNormal3fv(N044); glVertex3fv(P044); glNormal3fv(N045); glVertex3fv(P045); glNormal3fv(N053); glVertex3fv(P053); glEnd(); glBegin(cap); glNormal3fv(N044); glVertex3fv(P044); glNormal3fv(N053); glVertex3fv(P053); glNormal3fv(N052); glVertex3fv(P052); glEnd(); glBegin(cap); glNormal3fv(N049); glVertex3fv(P049); glNormal3fv(N050); glVertex3fv(P050); glNormal3fv(N058); glVertex3fv(P058); glEnd(); glBegin(cap); glNormal3fv(N049); glVertex3fv(P049); glNormal3fv(N058); glVertex3fv(P058); glNormal3fv(N057); glVertex3fv(P057); glEnd(); glBegin(cap); glNormal3fv(N048); glVertex3fv(P048); glNormal3fv(N049); glVertex3fv(P049); glNormal3fv(N057); glVertex3fv(P057); glEnd(); glBegin(cap); glNormal3fv(N048); glVertex3fv(P048); glNormal3fv(N057); glVertex3fv(P057); glNormal3fv(N056); glVertex3fv(P056); glEnd(); glBegin(cap); glNormal3fv(N047); glVertex3fv(P047); glNormal3fv(N048); glVertex3fv(P048); glNormal3fv(N056); glVertex3fv(P056); glEnd(); glBegin(cap); glNormal3fv(N047); glVertex3fv(P047); glNormal3fv(N056); glVertex3fv(P056); glNormal3fv(N055); glVertex3fv(P055); glEnd(); glBegin(cap); glNormal3fv(N045); glVertex3fv(P045); glNormal3fv(N046); glVertex3fv(P046); glNormal3fv(N053); glVertex3fv(P053); glEnd(); glBegin(cap); glNormal3fv(N046); glVertex3fv(P046); glNormal3fv(N054); glVertex3fv(P054); glNormal3fv(N053); glVertex3fv(P053); glEnd(); glBegin(cap); glNormal3fv(N046); glVertex3fv(P046); glNormal3fv(N047); glVertex3fv(P047); glNormal3fv(N055); glVertex3fv(P055); glNormal3fv(N054); glVertex3fv(P054); glEnd(); } static void Whale010(GLenum cap) { glBegin(cap); glNormal3fv(N080); glVertex3fv(P080); glNormal3fv(N081); glVertex3fv(P081); glNormal3fv(N085); glVertex3fv(P085); glEnd(); glBegin(cap); glNormal3fv(N081); glVertex3fv(P081); glNormal3fv(N083); glVertex3fv(P083); glNormal3fv(N085); glVertex3fv(P085); glEnd(); glBegin(cap); glNormal3fv(N085); glVertex3fv(P085); glNormal3fv(N083); glVertex3fv(P083); glNormal3fv(N077); glVertex3fv(P077); glEnd(); glBegin(cap); glNormal3fv(N083); glVertex3fv(P083); glNormal3fv(N087); glVertex3fv(P087); glNormal3fv(N077); glVertex3fv(P077); glEnd(); glBegin(cap); glNormal3fv(N077); glVertex3fv(P077); glNormal3fv(N087); glVertex3fv(P087); glNormal3fv(N090); glVertex3fv(P090); glEnd(); glBegin(cap); glNormal3fv(N081); glVertex3fv(P081); glNormal3fv(N080); glVertex3fv(P080); glNormal3fv(N085); glVertex3fv(P085); glEnd(); glBegin(cap); glNormal3fv(N083); glVertex3fv(P083); glNormal3fv(N081); glVertex3fv(P081); glNormal3fv(N085); glVertex3fv(P085); glEnd(); glBegin(cap); glNormal3fv(N083); glVertex3fv(P083); glNormal3fv(N085); glVertex3fv(P085); glNormal3fv(N077); glVertex3fv(P077); glEnd(); glBegin(cap); glNormal3fv(N087); glVertex3fv(P087); glNormal3fv(N083); glVertex3fv(P083); glNormal3fv(N077); glVertex3fv(P077); glEnd(); glBegin(cap); glNormal3fv(N087); glVertex3fv(P087); glNormal3fv(N077); glVertex3fv(P077); glNormal3fv(N090); glVertex3fv(P090); glEnd(); } static void Whale011(GLenum cap) { glBegin(cap); glNormal3fv(N082); glVertex3fv(P082); glNormal3fv(N084); glVertex3fv(P084); glNormal3fv(N079); glVertex3fv(P079); glEnd(); glBegin(cap); glNormal3fv(N084); glVertex3fv(P084); glNormal3fv(N086); glVertex3fv(P086); glNormal3fv(N079); glVertex3fv(P079); glEnd(); glBegin(cap); glNormal3fv(N079); glVertex3fv(P079); glNormal3fv(N086); glVertex3fv(P086); glNormal3fv(N078); glVertex3fv(P078); glEnd(); glBegin(cap); glNormal3fv(N086); glVertex3fv(P086); glNormal3fv(N088); glVertex3fv(P088); glNormal3fv(N078); glVertex3fv(P078); glEnd(); glBegin(cap); glNormal3fv(N078); glVertex3fv(P078); glNormal3fv(N088); glVertex3fv(P088); glNormal3fv(N089); glVertex3fv(P089); glEnd(); glBegin(cap); glNormal3fv(N088); glVertex3fv(P088); glNormal3fv(N086); glVertex3fv(P086); glNormal3fv(N089); glVertex3fv(P089); glEnd(); glBegin(cap); glNormal3fv(N089); glVertex3fv(P089); glNormal3fv(N086); glVertex3fv(P086); glNormal3fv(N078); glVertex3fv(P078); glEnd(); glBegin(cap); glNormal3fv(N086); glVertex3fv(P086); glNormal3fv(N084); glVertex3fv(P084); glNormal3fv(N078); glVertex3fv(P078); glEnd(); glBegin(cap); glNormal3fv(N078); glVertex3fv(P078); glNormal3fv(N084); glVertex3fv(P084); glNormal3fv(N079); glVertex3fv(P079); glEnd(); glBegin(cap); glNormal3fv(N084); glVertex3fv(P084); glNormal3fv(N082); glVertex3fv(P082); glNormal3fv(N079); glVertex3fv(P079); glEnd(); } static void Whale012(GLenum cap) { glBegin(cap); glNormal3fv(N058); glVertex3fv(P058); glNormal3fv(N059); glVertex3fv(P059); glNormal3fv(N067); glVertex3fv(P067); glNormal3fv(N066); glVertex3fv(P066); glEnd(); glBegin(cap); glNormal3fv(N059); glVertex3fv(P059); glNormal3fv(N052); glVertex3fv(P052); glNormal3fv(N060); glVertex3fv(P060); glEnd(); glBegin(cap); glNormal3fv(N059); glVertex3fv(P059); glNormal3fv(N060); glVertex3fv(P060); glNormal3fv(N067); glVertex3fv(P067); glEnd(); glBegin(cap); glNormal3fv(N058); glVertex3fv(P058); glNormal3fv(N066); glVertex3fv(P066); glNormal3fv(N065); glVertex3fv(P065); glEnd(); glBegin(cap); glNormal3fv(N058); glVertex3fv(P058); glNormal3fv(N065); glVertex3fv(P065); glNormal3fv(N057); glVertex3fv(P057); glEnd(); glBegin(cap); glNormal3fv(N056); glVertex3fv(P056); glNormal3fv(N057); glVertex3fv(P057); glNormal3fv(N065); glVertex3fv(P065); glEnd(); glBegin(cap); glNormal3fv(N056); glVertex3fv(P056); glNormal3fv(N065); glVertex3fv(P065); glNormal3fv(N006); glVertex3fv(P006); glEnd(); glBegin(cap); glNormal3fv(N056); glVertex3fv(P056); glNormal3fv(N006); glVertex3fv(P006); glNormal3fv(N063); glVertex3fv(P063); glEnd(); glBegin(cap); glNormal3fv(N056); glVertex3fv(P056); glNormal3fv(N063); glVertex3fv(P063); glNormal3fv(N055); glVertex3fv(P055); glEnd(); glBegin(cap); glNormal3fv(N054); glVertex3fv(P054); glNormal3fv(N062); glVertex3fv(P062); glNormal3fv(N005); glVertex3fv(P005); glEnd(); glBegin(cap); glNormal3fv(N054); glVertex3fv(P054); glNormal3fv(N005); glVertex3fv(P005); glNormal3fv(N053); glVertex3fv(P053); glEnd(); glBegin(cap); glNormal3fv(N053); glVertex3fv(P053); glNormal3fv(N005); glVertex3fv(P005); glNormal3fv(N060); glVertex3fv(P060); glEnd(); glBegin(cap); glNormal3fv(N053); glVertex3fv(P053); glNormal3fv(N060); glVertex3fv(P060); glNormal3fv(N052); glVertex3fv(P052); glEnd(); } static void Whale013(GLenum cap) { glBegin(cap); glNormal3fv(N066); glVertex3fv(P066); glNormal3fv(N067); glVertex3fv(P067); glNormal3fv(N096); glVertex3fv(P096); glNormal3fv(N097); glVertex3fv(P097); glEnd(); glBegin(cap); glNormal3fv(N097); glVertex3fv(P097); glNormal3fv(N096); glVertex3fv(P096); glNormal3fv(N098); glVertex3fv(P098); glNormal3fv(N099); glVertex3fv(P099); glEnd(); glBegin(cap); glNormal3fv(N065); glVertex3fv(P065); glNormal3fv(N066); glVertex3fv(P066); glNormal3fv(N097); glVertex3fv(P097); glEnd(); glBegin(cap); glNormal3fv(N067); glVertex3fv(P067); glNormal3fv(N060); glVertex3fv(P060); glNormal3fv(N096); glVertex3fv(P096); glEnd(); glBegin(cap); glNormal3fv(N060); glVertex3fv(P060); glNormal3fv(N005); glVertex3fv(P005); glNormal3fv(N096); glVertex3fv(P096); glEnd(); glBegin(cap); glNormal3fv(N096); glVertex3fv(P096); glNormal3fv(N005); glVertex3fv(P005); glNormal3fv(N098); glVertex3fv(P098); glEnd(); glBegin(cap); glNormal3fv(N006); glVertex3fv(P006); glNormal3fv(N065); glVertex3fv(P065); glNormal3fv(N097); glVertex3fv(P097); glEnd(); glBegin(cap); glNormal3fv(N006); glVertex3fv(P006); glNormal3fv(N097); glVertex3fv(P097); glNormal3fv(N099); glVertex3fv(P099); glEnd(); glBegin(cap); glVertex3fv(P005); glVertex3fv(P006); glVertex3fv(P099); glVertex3fv(P098); glEnd(); } static void Whale014(GLenum cap) { glBegin(cap); glNormal3fv(N062); glVertex3fv(P062); glNormal3fv(N004); glVertex3fv(P004); glNormal3fv(N005); glVertex3fv(P005); glEnd(); glBegin(cap); glVertex3fv(P006); glVertex3fv(P005); glVertex3fv(P004); glVertex3fv(P008); glEnd(); glBegin(cap); glNormal3fv(N063); glVertex3fv(P063); glNormal3fv(N006); glVertex3fv(P006); glNormal3fv(N002); glVertex3fv(P002); glEnd(); glBegin(cap); glNormal3fv(N002); glVertex3fv(P002); glNormal3fv(N006); glVertex3fv(P006); glNormal3fv(N008); glVertex3fv(P008); glEnd(); glBegin(cap); glNormal3fv(N002); glVertex3fv(P002); glNormal3fv(N008); glVertex3fv(P008); glNormal3fv(N004); glVertex3fv(P004); glEnd(); glBegin(cap); glNormal3fv(N062); glVertex3fv(P062); glNormal3fv(N002); glVertex3fv(P002); glNormal3fv(N004); glVertex3fv(P004); glEnd(); } static void Whale015(GLenum cap) { glBegin(cap); glNormal3fv(N055); glVertex3fv(P055); glNormal3fv(N003); glVertex3fv(P003); glNormal3fv(N054); glVertex3fv(P054); glEnd(); glBegin(cap); glNormal3fv(N003); glVertex3fv(P003); glNormal3fv(N055); glVertex3fv(P055); glNormal3fv(N063); glVertex3fv(P063); glEnd(); glBegin(cap); glNormal3fv(N003); glVertex3fv(P003); glNormal3fv(N063); glVertex3fv(P063); glNormal3fv(N100); glVertex3fv(P100); glEnd(); glBegin(cap); glNormal3fv(N003); glVertex3fv(P003); glNormal3fv(N100); glVertex3fv(P100); glNormal3fv(N054); glVertex3fv(P054); glEnd(); glBegin(cap); glNormal3fv(N054); glVertex3fv(P054); glNormal3fv(N100); glVertex3fv(P100); glNormal3fv(N062); glVertex3fv(P062); glEnd(); glBegin(cap); glNormal3fv(N100); glVertex3fv(P100); glNormal3fv(N063); glVertex3fv(P063); glNormal3fv(N002); glVertex3fv(P002); glEnd(); glBegin(cap); glNormal3fv(N100); glVertex3fv(P100); glNormal3fv(N002); glVertex3fv(P002); glNormal3fv(N062); glVertex3fv(P062); glEnd(); } static void Whale016(GLenum cap) { glBegin(cap); glVertex3fv(P104); glVertex3fv(P105); glVertex3fv(P106); glEnd(); glBegin(cap); glVertex3fv(P107); glVertex3fv(P108); glVertex3fv(P109); glEnd(); glBegin(cap); glVertex3fv(P110); glVertex3fv(P111); glVertex3fv(P112); glVertex3fv(P113); glVertex3fv(P114); glVertex3fv(P115); glEnd(); glBegin(cap); glVertex3fv(P116); glVertex3fv(P117); glVertex3fv(P118); glVertex3fv(P119); glVertex3fv(P120); glVertex3fv(P121); glEnd(); } void DrawWhale(fishRec * fish, int wire) { float seg0, seg1, seg2, seg3, seg4, seg5, seg6, seg7; float pitch, thrash, chomp; GLenum cap; fish->htail = (int) (fish->htail - (int) (5 * fish->v)) % 360; thrash = 70 * fish->v; seg0 = 1.5 * thrash * sin((fish->htail) * RRAD); seg1 = 2.5 * thrash * sin((fish->htail + 10) * RRAD); seg2 = 3.7 * thrash * sin((fish->htail + 15) * RRAD); seg3 = 4.8 * thrash * sin((fish->htail + 23) * RRAD); seg4 = 6 * thrash * sin((fish->htail + 28) * RRAD); seg5 = 6.5 * thrash * sin((fish->htail + 35) * RRAD); seg6 = 6.5 * thrash * sin((fish->htail + 40) * RRAD); seg7 = 6.5 * thrash * sin((fish->htail + 55) * RRAD); pitch = fish->v * sin((fish->htail - 160) * RRAD); chomp = 0; if (fish->v > 2) { chomp = -(fish->v - 2) * 200; } P012[1] = iP012[1] + seg5; P013[1] = iP013[1] + seg5; P014[1] = iP014[1] + seg5; P015[1] = iP015[1] + seg5; P016[1] = iP016[1] + seg5; P017[1] = iP017[1] + seg5; P018[1] = iP018[1] + seg5; P019[1] = iP019[1] + seg5; P020[1] = iP020[1] + seg4; P021[1] = iP021[1] + seg4; P022[1] = iP022[1] + seg4; P023[1] = iP023[1] + seg4; P024[1] = iP024[1] + seg4; P025[1] = iP025[1] + seg4; P026[1] = iP026[1] + seg4; P027[1] = iP027[1] + seg4; P028[1] = iP028[1] + seg2; P029[1] = iP029[1] + seg2; P030[1] = iP030[1] + seg2; P031[1] = iP031[1] + seg2; P032[1] = iP032[1] + seg2; P033[1] = iP033[1] + seg2; P034[1] = iP034[1] + seg2; P035[1] = iP035[1] + seg2; P036[1] = iP036[1] + seg1; P037[1] = iP037[1] + seg1; P038[1] = iP038[1] + seg1; P039[1] = iP039[1] + seg1; P040[1] = iP040[1] + seg1; P041[1] = iP041[1] + seg1; P042[1] = iP042[1] + seg1; P043[1] = iP043[1] + seg1; P044[1] = iP044[1] + seg0; P045[1] = iP045[1] + seg0; P046[1] = iP046[1] + seg0; P047[1] = iP047[1] + seg0; P048[1] = iP048[1] + seg0; P049[1] = iP049[1] + seg0; P050[1] = iP050[1] + seg0; P051[1] = iP051[1] + seg0; P009[1] = iP009[1] + seg6; P010[1] = iP010[1] + seg6; P075[1] = iP075[1] + seg6; P076[1] = iP076[1] + seg6; P001[1] = iP001[1] + seg7; P011[1] = iP011[1] + seg7; P068[1] = iP068[1] + seg7; P069[1] = iP069[1] + seg7; P070[1] = iP070[1] + seg7; P071[1] = iP071[1] + seg7; P072[1] = iP072[1] + seg7; P073[1] = iP073[1] + seg7; P074[1] = iP074[1] + seg7; P091[1] = iP091[1] + seg3 * 1.1; P092[1] = iP092[1] + seg3; P093[1] = iP093[1] + seg3; P094[1] = iP094[1] + seg3; P095[1] = iP095[1] + seg3 * 0.9; P099[1] = iP099[1] + chomp; P098[1] = iP098[1] + chomp; P064[1] = iP064[1] + chomp; P061[1] = iP061[1] + chomp; P097[1] = iP097[1] + chomp; P096[1] = iP096[1] + chomp; glPushMatrix(); glRotatef(pitch, 1, 0, 0); glTranslatef(0, 0, 8000); glRotatef(180, 0, 1, 0); glScalef(3, 3, 3); glEnable(GL_CULL_FACE); cap = wire ? GL_LINE_LOOP : GL_POLYGON; Whale001(cap); Whale002(cap); Whale003(cap); Whale004(cap); Whale005(cap); Whale006(cap); Whale007(cap); Whale008(cap); Whale009(cap); Whale010(cap); Whale011(cap); Whale012(cap); Whale013(cap); Whale014(cap); Whale015(cap); Whale016(cap); glDisable(GL_CULL_FACE); glPopMatrix(); } #endif xscreensaver-5.36/hacks/glx/xlock-gl-utils.c000644 000767 000024 00000014310 12701612217 021041 0ustar00jwzstaff000000 000000 /* xlock-gl.c --- xscreensaver compatibility layer for xlockmore GL modules. * xscreensaver, Copyright (c) 1997-2015 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 file, along with xlockmore.h, make it possible to compile an xlockmore * GL module into a standalone program, and thus use it with xscreensaver. * By Jamie Zawinski on 31-May-97. */ #include #include "xlockmoreI.h" #include "texfont.h" #ifndef isupper # define isupper(c) ((c) >= 'A' && (c) <= 'Z') #endif #ifndef _tolower # define _tolower(c) ((c) - 'A' + 'a') #endif /* Gag -- we use this to turn X errors from glXCreateContext() into something that will actually make sense to the user. */ static XErrorHandler orig_ehandler = 0; static Bool got_error = 0; static int BadValue_ehandler (Display *dpy, XErrorEvent *error) { if (error->error_code == BadValue) { got_error = True; return 0; } else return orig_ehandler (dpy, error); } GLXContext * init_GL(ModeInfo * mi) { Display *dpy = mi->dpy; Window window = mi->window; Screen *screen = mi->xgwa.screen; Visual *visual = mi->xgwa.visual; GLXContext glx_context = 0; XVisualInfo vi_in, *vi_out; int out_count; # ifdef HAVE_JWZGLES jwzgles_reset(); # endif vi_in.screen = screen_number (screen); vi_in.visualid = XVisualIDFromVisual (visual); vi_out = XGetVisualInfo (dpy, VisualScreenMask|VisualIDMask, &vi_in, &out_count); if (! vi_out) abort (); { XSync (dpy, False); orig_ehandler = XSetErrorHandler (BadValue_ehandler); glx_context = glXCreateContext (dpy, vi_out, 0, GL_TRUE); XSync (dpy, False); XSetErrorHandler (orig_ehandler); if (got_error) glx_context = 0; } XFree((char *) vi_out); if (!glx_context) { fprintf(stderr, "%s: couldn't create GL context for visual 0x%x.\n", progname, (unsigned int) XVisualIDFromVisual (visual)); exit(1); } glXMakeCurrent (dpy, window, glx_context); { GLboolean rgba_mode = 0; glGetBooleanv(GL_RGBA_MODE, &rgba_mode); if (!rgba_mode) { glIndexi (WhitePixelOfScreen (screen)); glClearIndex (BlackPixelOfScreen (screen)); } } /* jwz: the doc for glDrawBuffer says "The initial value is GL_FRONT for single-buffered contexts, and GL_BACK for double-buffered contexts." However, I find that this is not always the case, at least with Mesa 3.4.2 -- sometimes the default seems to be GL_FRONT even when glGet(GL_DOUBLEBUFFER) is true. So, let's make sure. Oh, hmm -- maybe this only happens when we are re-using the xscreensaver window, and the previous GL hack happened to die with the other buffer selected? I'm not sure. Anyway, this fixes it. */ { GLboolean d = False; glGetBooleanv (GL_DOUBLEBUFFER, &d); if (d) glDrawBuffer (GL_BACK); else glDrawBuffer (GL_FRONT); } /* Sometimes glDrawBuffer() throws "invalid op". Dunno why. Ignore. */ clear_gl_error (); /* Process the -background argument. */ { char *s = get_string_resource(mi->dpy, "background", "Background"); XColor c = { 0, }; if (! XParseColor (dpy, mi->xgwa.colormap, s, &c)) fprintf (stderr, "%s: can't parse color %s; using black.\n", progname, s); glClearColor (c.red / 65535.0, c.green / 65535.0, c.blue / 65535.0, 1.0); } glClear (GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); /* GLXContext is already a pointer type. Why this function returns a pointer to a pointer, I have no idea... */ { GLXContext *ptr = (GLXContext *) malloc(sizeof(GLXContext)); *ptr = glx_context; return ptr; } } /* clear away any lingering error codes */ void clear_gl_error (void) { while (glGetError() != GL_NO_ERROR) ; } /* report a GL error. */ void check_gl_error (const char *type) { char buf[100]; GLenum i; const char *e; switch ((i = glGetError())) { case GL_NO_ERROR: return; case GL_INVALID_ENUM: e = "invalid enum"; break; case GL_INVALID_VALUE: e = "invalid value"; break; case GL_INVALID_OPERATION: e = "invalid operation"; break; case GL_STACK_OVERFLOW: e = "stack overflow"; break; case GL_STACK_UNDERFLOW: e = "stack underflow"; break; case GL_OUT_OF_MEMORY: e = "out of memory"; break; #ifdef GL_INVALID_FRAMEBUFFER_OPERATION case GL_INVALID_FRAMEBUFFER_OPERATION: e = "invalid framebuffer operation"; break; #endif #ifdef GL_TABLE_TOO_LARGE_EXT case GL_TABLE_TOO_LARGE_EXT: e = "table too large"; break; #endif #ifdef GL_TEXTURE_TOO_LARGE_EXT case GL_TEXTURE_TOO_LARGE_EXT: e = "texture too large"; break; #endif default: e = buf; sprintf (buf, "unknown error %d", (int) i); break; } fprintf (stderr, "%s: %s error: %s\n", progname, type, e); exit (1); } /* Callback in xscreensaver_function_table, via xlockmore.c. */ Visual * xlockmore_pick_gl_visual (Screen *screen) { /* pick the "best" visual by interrogating the GL library instead of by asking Xlib. GL knows better. */ Visual *v = 0; Display *dpy = DisplayOfScreen (screen); char *string = get_string_resource (dpy, "visualID", "VisualID"); char *s; if (string) for (s = string; *s; s++) if (isupper (*s)) *s = _tolower (*s); if (!string || !*string || !strcmp (string, "gl") || !strcmp (string, "best") || !strcmp (string, "color") || !strcmp (string, "default")) v = get_gl_visual (screen); /* from ../utils/visual-gl.c */ if (string) free (string); return v; } /* Callback in xscreensaver_function_table, via xlockmore.c. */ Bool xlockmore_validate_gl_visual (Screen *screen, const char *name, Visual *visual) { return validate_gl_visual (stderr, screen, name, visual); } xscreensaver-5.36/hacks/glx/xpm-ximage.c000664 000767 000024 00000033464 12721373347 020266 0ustar00jwzstaff000000 000000 /* xpm-ximage.c --- converts XPM data to an XImage for use with OpenGL. * xscreensaver, Copyright (c) 1998-2016 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. * * Alpha channel support by Eric Lassauge */ #ifdef HAVE_CONFIG_H # include "config.h" #endif #include #include #ifdef HAVE_JWXYZ # include "jwxyz.h" #else # include #endif #include "xpm-ximage.h" #ifdef HAVE_COCOA # include "grabscreen.h" /* for osx_load_image_file() */ #endif extern char *progname; #if defined(HAVE_GDK_PIXBUF) || defined(HAVE_XPM) static Bool bigendian (void) { union { int i; char c[sizeof(int)]; } u; u.i = 1; return !u.c[0]; } #endif /* HAVE_GDK_PIXBUF || HAVE_XPM */ #if defined(HAVE_GDK_PIXBUF) # include # ifdef HAVE_GTK2 # include # else /* !HAVE_GTK2 */ # include # endif /* !HAVE_GTK2 */ /* Returns an XImage structure containing the bits of the given XPM image. This XImage will be 32 bits per pixel, 8 each per R, G, and B, with the extra byte set to either 0xFF or 0x00 (based on the XPM file's mask.) The Display and Visual arguments are used only for creating the XImage; no bits are pushed to the server. The Colormap argument is used just for parsing color names; no colors are allocated. This is the gdk_pixbuf version of this function. */ static XImage * xpm_to_ximage_1 (Display *dpy, Visual *visual, Colormap cmap, const char *filename, char **xpm_data) { GdkPixbuf *pb; static int initted = 0; #ifdef HAVE_GTK2 GError *gerr = NULL; #endif if (!initted) { #ifdef HAVE_GTK2 #if !GLIB_CHECK_VERSION(2, 36 ,0) g_type_init (); #endif #endif gdk_pixbuf_xlib_init (dpy, DefaultScreen (dpy)); xlib_rgb_init (dpy, DefaultScreenOfDisplay (dpy)); initted = 1; } pb = (filename #ifdef HAVE_GTK2 ? gdk_pixbuf_new_from_file (filename, &gerr) #else ? gdk_pixbuf_new_from_file (filename) #endif /* HAVE_GTK2 */ : gdk_pixbuf_new_from_xpm_data ((const char **) xpm_data)); if (pb) { XImage *image; int w = gdk_pixbuf_get_width (pb); int h = gdk_pixbuf_get_height (pb); guchar *row = gdk_pixbuf_get_pixels (pb); int stride = gdk_pixbuf_get_rowstride (pb); int chan = gdk_pixbuf_get_n_channels (pb); int x, y; image = XCreateImage (dpy, visual, 32, ZPixmap, 0, 0, w, h, 32, 0); image->data = (char *) malloc(h * image->bytes_per_line); /* Set the bit order in the XImage structure to whatever the local host's native bit order is. */ image->bitmap_bit_order = image->byte_order = (bigendian() ? MSBFirst : LSBFirst); if (!image->data) { fprintf (stderr, "%s: out of memory (%d x %d)\n", progname, w, h); exit (1); } for (y = 0; y < h; y++) { int y2 = (h-1-y); /* Texture maps are upside down. */ guchar *i = row; for (x = 0; x < w; x++) { unsigned long rgba = 0; switch (chan) { case 1: rgba = ((0xFF << 24) | (*i << 16) | (*i << 8) | *i); i++; break; case 3: rgba = ((0xFF << 24) | (i[2] << 16) | (i[1] << 8) | i[0]); i += 3; break; case 4: rgba = ((i[3] << 24) | (i[2] << 16) | (i[1] << 8) | i[0]); i += 4; break; default: abort(); break; } XPutPixel (image, x, y2, rgba); } row += stride; } /* #### are colors getting freed here? */ g_object_unref (pb); return image; } else if (filename) { #ifdef HAVE_GTK2 fprintf (stderr, "%s: %s\n", progname, gerr->message); g_error_free (gerr); #else fprintf (stderr, "%s: unable to load %s\n", progname, filename); #endif /* HAVE_GTK2 */ exit (1); } else { fprintf (stderr, "%s: unable to initialize builtin texture\n", progname); exit (1); } } #elif defined(HAVE_XPM) #include #include #include #include #include #undef countof #define countof(x) (sizeof((x))/sizeof((*x))) /* The libxpm version of this function... */ static XImage * xpm_to_ximage_1 (Display *dpy, Visual *visual, Colormap cmap, const char *filename, char **xpm_data) { /* All we want to do is get RGB data out of the XPM file built in to this program. This is a pain, because there is no way (as of XPM version 4.6, at least) to get libXpm to make an XImage without also allocating colors with XAllocColor. So, instead, we create an XpmImage and parse out the RGB values of the pixels ourselves; and construct an XImage by hand. Regardless of the depth of the visual we're using, this XImage will have 32 bits per pixel, 8 each per R, G, and B. We put 0xFF or 0x00 in the fourth (alpha) slot, depending on the file's mask. */ XImage *ximage = 0; XpmImage xpm_image; XpmInfo xpm_info; int result; int transparent_color_index = -1; int x, y, i; int bpl, wpl; XColor colors[256]; memset (&xpm_image, 0, sizeof(xpm_image)); memset (&xpm_info, 0, sizeof(xpm_info)); if (filename) { xpm_data = 0; if (XpmSuccess != XpmReadFileToData ((char *) filename, &xpm_data)) { fprintf (stderr, "%s: unable to read XPM file %s\n", progname, filename); exit (1); } } result = XpmCreateXpmImageFromData (xpm_data, &xpm_image, &xpm_info); if (result != XpmSuccess) { fprintf(stderr, "%s: unable to parse xpm data (%d).\n", progname, result); exit (1); } if (xpm_image.ncolors > countof(colors)) { fprintf (stderr, "%s: too many colors (%d) in XPM.\n", progname, xpm_image.ncolors); exit (1); } ximage = XCreateImage (dpy, visual, 32, ZPixmap, 0, 0, xpm_image.width, xpm_image.height, 32, 0); bpl = ximage->bytes_per_line; wpl = bpl/4; ximage->data = (char *) malloc(xpm_image.height * bpl); /* Parse the colors in the XPM into RGB values. */ for (i = 0; i < xpm_image.ncolors; i++) { const char *c = xpm_image.colorTable[i].c_color; if (!c) { fprintf(stderr, "%s: bogus color table? (%d)\n", progname, i); exit (1); } else if (!strncasecmp (c, "None", 4)) { transparent_color_index = i; colors[transparent_color_index].red = 0xFF; colors[transparent_color_index].green = 0xFF; colors[transparent_color_index].blue = 0xFF; } else if (!XParseColor (dpy, cmap, c, &colors[i])) { fprintf(stderr, "%s: unparsable color: %s\n", progname, c); exit (1); } } /* Translate the XpmImage to an RGB XImage. */ { int rpos, gpos, bpos, apos; /* bitfield positions */ /* Note that unlike X, which is endianness-agnostic (since any XImage can have its own specific bit ordering, with the server reversing things as necessary) OpenGL pretends everything is client-side, so we need to pack things in the right order for the client machine. */ ximage->bitmap_bit_order = ximage->byte_order = (bigendian() ? MSBFirst : LSBFirst); #if 0 /* #### Cherub says that the little-endian case must be taken on MacOSX, or else the colors/alpha are the wrong way around. How can that be the case? */ if (bigendian()) rpos = 24, gpos = 16, bpos = 8, apos = 0; else #endif rpos = 0, gpos = 8, bpos = 16, apos = 24; } /* I sure hope these only free the contents, and not the args. */ #if 0 /* Apparently not? Gotta love those well-documented APIs! */ XpmFreeXpmImage (&xpm_image); XpmFreeXpmInfo (&xpm_info); #endif return ximage; } #else /* !HAVE_XPM && !HAVE_GDK_PIXBUF */ /* If we don't have libXPM or Pixbuf, then use "minixpm". This can read XPM data from memory, but can't read files. */ #include #include #include "minixpm.h" #undef countof #define countof(x) (sizeof((x))/sizeof((*x))) /* Given a bitmask, returns the position and width of the field. */ static void decode_mask (unsigned long mask, unsigned long *pos_ret, unsigned long *size_ret) { int i; for (i = 0; i < 32; i++) if (mask & (1L << i)) { int j = 0; *pos_ret = i; for (; i < 32; i++, j++) if (! (mask & (1L << i))) break; *size_ret = j; return; } } /* The minixpm version of this function... */ static XImage * xpm_to_ximage_1 (Display *dpy, Visual *visual, Colormap cmap, const char *filename, char **xpm_data) { int iw, ih, w8, x, y; XImage *ximage = 0; char *data; unsigned char *mask = 0; int depth = 32; unsigned long background_color = BlackPixelOfScreen (DefaultScreenOfDisplay (dpy)); unsigned long *pixels = 0; int npixels = 0; int bpl; unsigned long rpos=0, gpos=0, bpos=0, apos=0; unsigned long rmsk=0, gmsk=0, bmsk=0, amsk=0; unsigned long rsiz=0, gsiz=0, bsiz=0, asiz=0; # ifdef HAVE_COCOA if (filename) { XRectangle geom; Screen *screen = DefaultScreenOfDisplay (dpy); Window window = RootWindowOfScreen (screen); XWindowAttributes xgwa; XGetWindowAttributes (dpy, window, &xgwa); Pixmap pixmap = XCreatePixmap (dpy, window, xgwa.width, xgwa.height, xgwa.depth); if (osx_load_image_file (screen, window, pixmap, filename, &geom)) { ximage = XGetImage (dpy, pixmap, geom.x, geom.y, geom.width, geom.height, ~0L, ZPixmap); /* Have to convert BGRA to ARGB */ if (ximage) { int x, y; for (y = 0; y < ximage->height; y++) for (x = 0; x < ximage->width; x++) { unsigned long p = XGetPixel (ximage, x, y); unsigned long b = (p >> 24) & 0xFF; unsigned long g = (p >> 16) & 0xFF; unsigned long r = (p >> 8) & 0xFF; unsigned long a = (p >> 0) & 0xFF; p = (a << 24) | (r << 16) | (g << 8) | (b << 0); XPutPixel (ximage, x, y, p); } } } XFreePixmap (dpy, pixmap); if (! ximage) fprintf (stderr, "%s: %s failed\n", progname, filename); return ximage; } # endif /* HAVE_COCOA */ if (filename) { fprintf(stderr, "%s: can't load %s: not compiled with XPM or Pixbuf support.\n", progname, filename); return 0; } if (! xpm_data) abort(); ximage = minixpm_to_ximage (dpy, visual, cmap, depth, background_color, (const char * const *) xpm_data, &iw, &ih, &pixels, &npixels, &mask); if (!ximage) abort(); if (pixels) free (pixels); bpl = ximage->bytes_per_line; data = ximage->data; ximage->data = malloc (ximage->height * bpl); /* Flip image upside down, for texture maps; process the mask; and re-arrange the color components for GL. */ w8 = (ximage->width + 7) / 8; rmsk = ximage->red_mask; gmsk = ximage->green_mask; bmsk = ximage->blue_mask; amsk = ~(rmsk|gmsk|bmsk); decode_mask (rmsk, &rpos, &rsiz); decode_mask (gmsk, &gpos, &gsiz); decode_mask (bmsk, &bpos, &bsiz); decode_mask (amsk, &apos, &asiz); for (y = 0; y < ximage->height; y++) { int y2 = (ximage->height-1-y); unsigned int *oline = (unsigned int *) (ximage->data + (y * bpl)); unsigned int *iline = (unsigned int *) (data + (y2 * bpl)); for (x = 0; x < ximage->width; x++) { unsigned int pixel = iline[x]; unsigned char r = (pixel & rmsk) >> rpos; unsigned char g = (pixel & gmsk) >> gpos; unsigned char b = (pixel & bmsk) >> bpos; unsigned char a = (mask ? ((mask [(y2 * w8) + (x >> 3)] & (1 << (x % 8))) ? 0xFF : 0) : 0xFF); # if 0 pixel = ((r << rpos) | (g << gpos) | (b << bpos) | (a << apos)); # else pixel = ((a << 24) | (b << 16) | (g << 8) | r); # endif oline[x] = pixel; } } free (data); return ximage; } #endif /* !HAVE_XPM */ /* Returns an XImage structure containing the bits of the given XPM image. This XImage will be 32 bits per pixel, 8 each per R, G, and B, with the extra byte set to either 0xFF or 0x00 (based on the XPM file's mask.) The Display and Visual arguments are used only for creating the XImage; no bits are pushed to the server. The Colormap argument is used just for parsing color names; no colors are allocated. */ XImage * xpm_to_ximage (Display *dpy, Visual *visual, Colormap cmap, char **xpm_data) { return xpm_to_ximage_1 (dpy, visual, cmap, 0, xpm_data); } XImage * xpm_file_to_ximage (Display *dpy, Visual *visual, Colormap cmap, const char *filename) { return xpm_to_ximage_1 (dpy, visual, cmap, filename, 0); } xscreensaver-5.36/hacks/glx/glplanet.c000664 000767 000024 00000043266 12736545565 020032 0ustar00jwzstaff000000 000000 /* -*- Mode: C; tab-width: 4 -*- */ /* glplanet --- 3D rotating planet, e.g., Earth. * * Permission to use, copy, modify, and distribute this software and its * documentation for any purpose and without fee is hereby granted, * provided that the above copyright notice appear in all copies and that * both that copyright notice and this permission notice appear in * supporting documentation. * * This file is provided AS IS with no warranties of any kind. The author * shall have no liability with respect to the infringement of copyrights, * trade secrets or any patents by this file or any part thereof. In no * event will the author be liable for any lost revenue or profits or * other special, indirect and consequential damages. * * Revision History: * * 10-Nov-14: jwz@jwz.org Night map. Better stars. * 16-Jan-02: jwz@jwz.org gdk_pixbuf support. * 21-Mar-01: jwz@jwz.org Broke sphere routine out into its own file. * * 9-Oct-98: dek@cgl.ucsf.edu Added stars. * * 8-Oct-98: jwz@jwz.org Made the 512x512x1 xearth image be built in. * Made it possible to load XPM or XBM files. * Made the planet bounce and roll around. * * 8-Oct-98: Released initial version of "glplanet" * (David Konerding, dek@cgl.ucsf.edu) */ #ifdef STANDALONE #define DEFAULTS "*delay: 20000 \n" \ "*showFPS: False \n" \ "*wireframe: False \n" \ "*imageForeground: Green \n" \ "*imageBackground: Blue \n" \ "*suppressRotationAnimation: True\n" \ # define refresh_planet 0 # include "xlockmore.h" /* from the xscreensaver distribution */ #else /* !STANDALONE */ # include "xlock.h" /* from the xlockmore distribution */ #endif /* !STANDALONE */ #ifdef USE_GL /* whole file */ #include "sphere.h" #ifdef HAVE_XMU # ifndef VMS # include #else /* VMS */ # include # endif /* VMS */ #endif #define DEF_ROTATE "True" #define DEF_ROLL "True" #define DEF_WANDER "True" #define DEF_SPIN "0.03" #define DEF_TEXTURE "True" #define DEF_STARS "True" #define DEF_RESOLUTION "128" #define DEF_IMAGE "BUILTIN" #define DEF_IMAGE2 "BUILTIN" #undef countof #define countof(x) (sizeof((x))/sizeof((*x))) #undef BELLRAND #define BELLRAND(n) ((frand((n)) + frand((n)) + frand((n))) / 3) static int do_rotate; static int do_roll; static int do_wander; static int do_texture; static int do_stars; static char *which_image; static char *which_image2; static int resolution; static XrmOptionDescRec opts[] = { {"-rotate", ".glplanet.rotate", XrmoptionNoArg, "true" }, {"+rotate", ".glplanet.rotate", XrmoptionNoArg, "false" }, {"-roll", ".glplanet.roll", XrmoptionNoArg, "true" }, {"+roll", ".glplanet.roll", XrmoptionNoArg, "false" }, {"-wander", ".glplanet.wander", XrmoptionNoArg, "true" }, {"+wander", ".glplanet.wander", XrmoptionNoArg, "false" }, {"-texture", ".glplanet.texture", XrmoptionNoArg, "true" }, {"+texture", ".glplanet.texture", XrmoptionNoArg, "false" }, {"-stars", ".glplanet.stars", XrmoptionNoArg, "true" }, {"+stars", ".glplanet.stars", XrmoptionNoArg, "false" }, {"-spin", ".glplanet.spin", XrmoptionSepArg, 0 }, {"-image", ".glplanet.image", XrmoptionSepArg, 0 }, {"-image2", ".glplanet.image2", XrmoptionSepArg, 0 }, {"-resolution", ".glplanet.resolution", XrmoptionSepArg, 0 }, }; static argtype vars[] = { {&do_rotate, "rotate", "Rotate", DEF_ROTATE, t_Bool}, {&do_roll, "roll", "Roll", DEF_ROLL, t_Bool}, {&do_wander, "wander", "Wander", DEF_WANDER, t_Bool}, {&do_texture, "texture", "Texture", DEF_TEXTURE, t_Bool}, {&do_stars, "stars", "Stars", DEF_STARS, t_Bool}, {&which_image, "image", "Image", DEF_IMAGE, t_String}, {&which_image2,"image2", "Image", DEF_IMAGE2, t_String}, {&resolution, "resolution","Resolution", DEF_RESOLUTION, t_Int}, }; ENTRYPOINT ModeSpecOpt planet_opts = {countof(opts), opts, countof(vars), vars, NULL}; #ifdef USE_MODULES ModStruct planet_description = {"planet", "init_planet", "draw_planet", "release_planet", "draw_planet", "init_planet", NULL, &planet_opts, 1000, 1, 2, 1, 4, 1.0, "", "Animates texture mapped sphere (planet)", 0, NULL}; #endif # ifdef __GNUC__ __extension__ /* don't warn about "string length is greater than the length ISO C89 compilers are required to support" when including the following XPM file... */ # endif #include "../images/earth.xpm" #include "../images/earth_night.xpm" #include "xpm-ximage.h" #include "rotator.h" #include "gltrackball.h" /*- * slices and stacks are used in the sphere parameterization routine. * more slices and stacks will increase the quality of the sphere, * at the expense of rendering speed */ /* structure for holding the planet data */ typedef struct { GLuint platelist; GLuint shadowlist; GLuint latlonglist; GLuint starlist; int starcount; int screen_width, screen_height; GLXContext *glx_context; Window window; XColor fg, bg; GLfloat z; GLfloat tilt; rotator *rot; trackball_state *trackball; Bool button_down_p; GLuint tex1, tex2; int draw_axis; } planetstruct; static planetstruct *planets = NULL; /* Set up and enable texturing on our object */ static void setup_xpm_texture (ModeInfo *mi, char **xpm_data) { XImage *image = xpm_to_ximage (MI_DISPLAY (mi), MI_VISUAL (mi), MI_COLORMAP (mi), xpm_data); char buf[1024]; clear_gl_error(); glPixelStorei(GL_UNPACK_ALIGNMENT, 1); /* iOS invalid enum: glPixelStorei(GL_UNPACK_ROW_LENGTH, image->width); */ glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, image->width, image->height, 0, GL_RGBA, /* GL_UNSIGNED_BYTE, */ GL_UNSIGNED_INT_8_8_8_8_REV, image->data); sprintf (buf, "builtin texture (%dx%d)", image->width, image->height); check_gl_error(buf); } static Bool setup_file_texture (ModeInfo *mi, char *filename) { Display *dpy = mi->dpy; Visual *visual = mi->xgwa.visual; char buf[1024]; Colormap cmap = mi->xgwa.colormap; XImage *image = xpm_file_to_ximage (dpy, visual, cmap, filename); if (!image) return False; clear_gl_error(); glPixelStorei(GL_UNPACK_ALIGNMENT, 4); glPixelStorei(GL_UNPACK_ROW_LENGTH, image->width); glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, image->width, image->height, 0, GL_RGBA, /* GL_UNSIGNED_BYTE, */ GL_UNSIGNED_INT_8_8_8_8_REV, image->data); sprintf (buf, "texture: %.100s (%dx%d)", filename, image->width, image->height); check_gl_error(buf); return True; } static void setup_texture(ModeInfo * mi) { planetstruct *gp = &planets[MI_SCREEN(mi)]; glGenTextures (1, &gp->tex1); glBindTexture (GL_TEXTURE_2D, gp->tex1); /* Must be after glBindTexture */ glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE); glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT); glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT); glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); if (!which_image || !*which_image || !strcmp(which_image, "BUILTIN")) { BUILTIN1: setup_xpm_texture (mi, earth_xpm); } else { if (! setup_file_texture (mi, which_image)) goto BUILTIN1; } check_gl_error("texture 1 initialization"); glGenTextures (1, &gp->tex2); glBindTexture (GL_TEXTURE_2D, gp->tex2); /* Must be after glBindTexture */ glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE); glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT); glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT); glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); if (!which_image2 || !*which_image2 || !strcmp(which_image2, "BUILTIN")) { BUILTIN2: setup_xpm_texture (mi, earth_night_xpm); } else { if (! setup_file_texture (mi, which_image2)) goto BUILTIN2; } check_gl_error("texture 2 initialization"); /* Need to flip the texture top for bottom for some reason. */ glMatrixMode (GL_TEXTURE); glScalef (1, -1, 1); glMatrixMode (GL_MODELVIEW); } static void init_stars (ModeInfo *mi) { planetstruct *gp = &planets[MI_SCREEN(mi)]; int i, j; int width = MI_WIDTH(mi); int height = MI_HEIGHT(mi); int size = (width > height ? width : height); int nstars = size * size / 80; int max_size = 3; GLfloat inc = 0.5; int steps = max_size / inc; gp->starlist = glGenLists(1); glNewList(gp->starlist, GL_COMPILE); for (j = 1; j <= steps; j++) { glPointSize(inc * j); glBegin (GL_POINTS); for (i = 0; i < nstars / steps; i++) { GLfloat d = 0.1; GLfloat r = 0.15 + frand(0.3); GLfloat g = r + frand(d) - d; GLfloat b = r + frand(d) - d; GLfloat x = frand(1)-0.5; GLfloat y = frand(1)-0.5; GLfloat z = ((random() & 1) ? frand(1)-0.5 : (BELLRAND(1)-0.5)/12); /* milky way */ d = sqrt (x*x + y*y + z*z); x /= d; y /= d; z /= d; glColor3f (r, g, b); glVertex3f (x, y, z); gp->starcount++; } glEnd (); } glEndList (); check_gl_error("stars initialization"); } ENTRYPOINT void reshape_planet (ModeInfo *mi, int width, int height) { GLfloat h = (GLfloat) height / (GLfloat) width; glViewport(0, 0, (GLint) width, (GLint) height); glMatrixMode(GL_PROJECTION); glLoadIdentity(); glFrustum(-1.0, 1.0, -h, h, 5.0, 100.0); glMatrixMode(GL_MODELVIEW); glLoadIdentity(); glTranslatef(0.0, 0.0, -40); # ifdef HAVE_MOBILE /* Keep it the same relative size when rotated. */ { int o = (int) current_device_rotation(); if (o != 0 && o != 180 && o != -180) glScalef (h, h, h); } # endif glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); } ENTRYPOINT Bool planet_handle_event (ModeInfo *mi, XEvent *event) { planetstruct *gp = &planets[MI_SCREEN(mi)]; if (gltrackball_event_handler (event, gp->trackball, MI_WIDTH (mi), MI_HEIGHT (mi), &gp->button_down_p)) return True; return False; } ENTRYPOINT void init_planet (ModeInfo * mi) { planetstruct *gp; int screen = MI_SCREEN(mi); Bool wire = MI_IS_WIREFRAME(mi); if (planets == NULL) { if ((planets = (planetstruct *) calloc(MI_NUM_SCREENS(mi), sizeof (planetstruct))) == NULL) return; } gp = &planets[screen]; if ((gp->glx_context = init_GL(mi)) != NULL) { reshape_planet(mi, MI_WIDTH(mi), MI_HEIGHT(mi)); } { char *f = get_string_resource(mi->dpy, "imageForeground", "Foreground"); char *b = get_string_resource(mi->dpy, "imageBackground", "Background"); char *s; if (!f) f = strdup("white"); if (!b) b = strdup("black"); for (s = f + strlen(f)-1; s > f; s--) if (*s == ' ' || *s == '\t') *s = 0; for (s = b + strlen(b)-1; s > b; s--) if (*s == ' ' || *s == '\t') *s = 0; if (!XParseColor(mi->dpy, mi->xgwa.colormap, f, &gp->fg)) { fprintf(stderr, "%s: unparsable color: \"%s\"\n", progname, f); exit(1); } if (!XParseColor(mi->dpy, mi->xgwa.colormap, b, &gp->bg)) { fprintf(stderr, "%s: unparsable color: \"%s\"\n", progname, f); exit(1); } free (f); free (b); } { double spin_speed = 0.1; double wander_speed = 0.005; gp->rot = make_rotator (do_roll ? spin_speed : 0, do_roll ? spin_speed : 0, 0, 1, do_wander ? wander_speed : 0, True); gp->z = frand (1.0); gp->tilt = frand (23.4); gp->trackball = gltrackball_init (True); } if (wire) do_texture = False; if (do_texture) setup_texture (mi); if (do_stars) init_stars (mi); /* construct the polygons of the planet */ gp->platelist = glGenLists(1); glNewList (gp->platelist, GL_COMPILE); glFrontFace(GL_CCW); glPushMatrix(); glRotatef (90, 1, 0, 0); unit_sphere (resolution, resolution, wire); glPopMatrix(); glEndList(); gp->shadowlist = glGenLists(1); glNewList (gp->shadowlist, GL_COMPILE); glFrontFace(GL_CCW); unit_dome (resolution, resolution, wire); glEndList(); /* construct the polygons of the latitude/longitude/axis lines. */ gp->latlonglist = glGenLists(1); glNewList (gp->latlonglist, GL_COMPILE); glPushMatrix (); glRotatef (90, 1, 0, 0); /* unit_sphere is off by 90 */ glRotatef (8, 0, 1, 0); /* line up the time zones */ unit_sphere (12, 24, 1); unit_sphere (12, 24, 1); glBegin(GL_LINES); glVertex3f(0, -2, 0); glVertex3f(0, 2, 0); glEnd(); glPopMatrix (); glEndList(); } ENTRYPOINT void draw_planet (ModeInfo * mi) { planetstruct *gp = &planets[MI_SCREEN(mi)]; int wire = MI_IS_WIREFRAME(mi); Display *dpy = MI_DISPLAY(mi); Window window = MI_WINDOW(mi); double x, y, z; if (!gp->glx_context) return; glDrawBuffer(GL_BACK); glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glXMakeCurrent (dpy, window, *(gp->glx_context)); mi->polygon_count = 0; if (gp->button_down_p) gp->draw_axis = 60; else if (!gp->draw_axis && !(random() % 1000)) gp->draw_axis = 60 + (random() % 90); if (do_rotate && !gp->button_down_p) { gp->z -= 0.001; /* the sun sets in the west */ if (gp->z < 0) gp->z += 1; } glEnable(GL_LINE_SMOOTH); glEnable(GL_POINT_SMOOTH); glEnable(GL_DEPTH_TEST); glEnable(GL_CULL_FACE); glCullFace(GL_BACK); glPushMatrix(); get_position (gp->rot, &x, &y, &z, !gp->button_down_p); x = (x - 0.5) * 6; y = (y - 0.5) * 6; z = (z - 0.5) * 3; glTranslatef(x, y, z); gltrackball_rotate (gp->trackball); if (do_roll) { get_rotation (gp->rot, &x, &y, 0, !gp->button_down_p); glRotatef (x * 360, 1.0, 0.0, 0.0); glRotatef (y * 360, 0.0, 1.0, 0.0); } else glRotatef (current_device_rotation(), 0, 0, 1); if (do_stars) { glDisable(GL_TEXTURE_2D); glPushMatrix(); glScalef (60, 60, 60); glRotatef (90, 1, 0, 0); glRotatef (35, 1, 0, 0); glCallList (gp->starlist); mi->polygon_count += gp->starcount; glPopMatrix(); glClear(GL_DEPTH_BUFFER_BIT); } glRotatef (90, 1, 0, 0); glRotatef (35, 1, 0, 0); glRotatef (10, 0, 1, 0); glRotatef (120, 0, 0, 1); glScalef (3, 3, 3); # ifdef HAVE_MOBILE glScalef (2, 2, 2); # endif if (wire) glColor3f (0.5, 0.5, 1); else glColor3f (1, 1, 1); if (do_texture) { glEnable(GL_TEXTURE_2D); glBindTexture (GL_TEXTURE_2D, gp->tex1); } glPushMatrix(); glRotatef (gp->z * 360, 0, 0, 1); glCallList (gp->platelist); mi->polygon_count += resolution*resolution; glPopMatrix(); /* Originally we just used GL_LIGHT0 to produce the day/night sides of the planet, but that always looked crappy, even with a vast number of polygons, because the day/night terminator didn't exactly line up with the polygon edges. So instead, draw the full "day" sphere; clear the depth buffer; draw a rotated/tilted half-sphere into the depth buffer only; then draw the "night" sphere. That lets us divide the sphere into the two maps, and the dividing line can be at any angle, regardless of polygon layout. The half-sphere is scaled slightly larger to avoid polygon fighting, since those triangles won't exactly line up because of the rotation. The downside of this is that the day/night terminator is 100% sharp. It would be nice if it was a little blurry. */ if (wire) { glPushMatrix(); glRotatef (gp->tilt, 1, 0, 0); glColor3f(0, 0, 0); glLineWidth(4); glCallList (gp->shadowlist); glLineWidth(1); mi->polygon_count += resolution*(resolution/2); glPopMatrix(); } else if (do_texture && gp->tex2) { glClear(GL_DEPTH_BUFFER_BIT); glDisable(GL_TEXTURE_2D); glColorMask (0, 0, 0, 0); glPushMatrix(); glRotatef (gp->tilt, 1, 0, 0); glScalef (1.01, 1.01, 1.01); glCallList (gp->shadowlist); mi->polygon_count += resolution*(resolution/2); glPopMatrix(); glColorMask (1, 1, 1, 1); glEnable(GL_TEXTURE_2D); glBindTexture (GL_TEXTURE_2D, gp->tex2); glPushMatrix(); glRotatef (gp->z * 360, 0, 0, 1); glCallList (gp->platelist); mi->polygon_count += resolution*resolution; glPopMatrix(); } if (gp->draw_axis) { glPushMatrix(); glRotatef (gp->z * 360, 0.0, 0.0, 1.0); glScalef (1.02, 1.02, 1.02); glDisable (GL_TEXTURE_2D); glDisable (GL_LIGHTING); glDisable (GL_LINE_SMOOTH); glColor3f (0.1, 0.3, 0.1); glCallList (gp->latlonglist); mi->polygon_count += 24*24; glPopMatrix(); if (gp->draw_axis) gp->draw_axis--; } glPopMatrix(); if (mi->fps_p) do_fps (mi); glFinish(); glXSwapBuffers(dpy, window); } ENTRYPOINT void release_planet (ModeInfo * mi) { if (planets != NULL) { int screen; for (screen = 0; screen < MI_NUM_SCREENS(mi); screen++) { planetstruct *gp = &planets[screen]; if (gp->glx_context) { /* Display lists MUST be freed while their glXContext is current. */ /* but this gets a BadMatch error. -jwz */ /*glXMakeCurrent(MI_DISPLAY(mi), gp->window, *(gp->glx_context));*/ if (glIsList(gp->platelist)) glDeleteLists(gp->platelist, 1); if (glIsList(gp->starlist)) glDeleteLists(gp->starlist, 1); } } (void) free((void *) planets); planets = NULL; } FreeAllGL(mi); } XSCREENSAVER_MODULE_2 ("GLPlanet", glplanet, planet) #endif xscreensaver-5.36/hacks/glx/pulsar.c000644 000767 000024 00000035712 12721365601 017506 0ustar00jwzstaff000000 000000 /* -*- Mode: C; tab-width: 4 -*- */ /* pulsar --- pulsar module for xpulsar */ /*- * Permission to use, copy, modify, and distribute this software and its * documentation for any purpose and without fee is hereby granted, * provided that the above copyright notice appear in all copies and that * both that copyright notice and this permission notice appear in * supporting documentation. * * This file is provided AS IS with no warranties of any kind. The author * shall have no liability with respect to the infringement of copyrights, * trade secrets or any patents by this file or any part thereof. In no * event will the author be liable for any lost revenue or profits or * other special, indirect and consequential damages. * Revision History: * 4-Apr-1999: dek@cgl.ucsf.edu Created module "pulsar" * 27-Apr-1999: dek@cgl.ucsf.edu Submitted module "pulsar" * 4-May-1999: jwz@jwz.org Added module "pulsar" * 4-May-1999: dek@cgl.ucsf.edu Submitted module "pulsar" updates * * Notes: * The pulsar pulsar draws a number of rotating, pulsing rectangles * on your screen. Depending on the options you choose, you can set a number * of interesting OpenGL parameters, including alpha blending, depth testing, fog, * lighting, texturing, mipmapping, bilinear filtering, and line antialiasing. * Additionally, there is a "frames per second" meter which gives an estimate of * the speed of your graphics card. * * Example command-line switches: * Only draw a single quad, and don't fill it (boring but fast) * pulsar -wire -quads 1 -fps * * Only try this with hardware graphics acceleration (PPro 200 w/ a Voodoo 2 runs great) * pulsar -quads 10 -texture -mipmap -texture_quality -light -fog -fps * */ #include #include #include #ifdef STANDALONE #define DEFAULTS "*delay: 10000 \n" \ "*showFPS: False \n" \ # define refresh_pulsar 0 # define pulsar_handle_event 0 # include "xlockmore.h" /* from the xpulsar distribution */ #else /* !STANDALONE */ # include "xlock.h" /* from the xlockmore distribution */ #endif /* !STANDALONE */ #ifdef USE_GL /* whole file */ #ifdef HAVE_XMU # ifndef VMS # include #else /* VMS */ # include # endif /* VMS */ #endif #include "xpm-ximage.h" /* Functions for loading and storing textures */ #define checkImageWidth 64 #define checkImageHeight 64 /* Functions for handling the frames per second timer */ #undef countof #define countof(x) (sizeof((x))/sizeof((*x))) #define WIDTH 800 #define HEIGHT 600 #define NUM_QUADS 5 #define DEF_QUADS "5" #define DEF_LIGHT "False" #define DEF_WIRE "False" #define DEF_BLEND "True" #define DEF_FOG "False" #define DEF_ANTIALIAS "False" #define DEF_TEXTURE "False" #define DEF_TEXTURE_QUALITY "False" #define DEF_MIPMAP "False" #define DEF_DO_DEPTH "False" #define DEF_IMAGE "BUILTIN" static int num_quads; static int do_light; static int do_wire; static int do_blend; static int do_fog; static int do_antialias; static int do_texture; static int do_texture_quality; static int do_mipmap; static int do_depth; static char *which_image; static XrmOptionDescRec opts[] = { {"-quads", ".pulsar.quads", XrmoptionSepArg, 0 }, {"-light", ".pulsar.light", XrmoptionNoArg, "true" }, {"+light", ".pulsar.light", XrmoptionNoArg, "false" }, {"-wire", ".pulsar.wire", XrmoptionNoArg, "true" }, {"+wire", ".pulsar.wire", XrmoptionNoArg, "false" }, {"-blend", ".pulsar.blend", XrmoptionNoArg, "true" }, {"+blend", ".pulsar.blend", XrmoptionNoArg, "false" }, {"-fog", ".pulsar.fog", XrmoptionNoArg, "true" }, {"+fog", ".pulsar.fog", XrmoptionNoArg, "false" }, {"-antialias", ".pulsar.antialias", XrmoptionNoArg, "true" }, {"+antialias", ".pulsar.antialias", XrmoptionNoArg, "false" }, {"-texture", ".pulsar.texture", XrmoptionNoArg, "true" }, {"+texture", ".pulsar.texture", XrmoptionNoArg, "false" }, {"-texture_quality", ".pulsar.textureQuality", XrmoptionNoArg, "true" }, {"+texture_quality", ".pulsar.textureQuality", XrmoptionNoArg, "false" }, {"-mipmap", ".pulsar.mipmap", XrmoptionNoArg, "true" }, {"+mipmap", ".pulsar.mipmap", XrmoptionNoArg, "false" }, {"-do_depth", ".pulsar.doDepth", XrmoptionNoArg, "true" }, {"+do_depth", ".pulsar.doDepth", XrmoptionNoArg, "false" }, {"-image", ".pulsar.image", XrmoptionSepArg, 0 }, }; static argtype vars[] = { {&num_quads, "quads", "Quads", DEF_QUADS, t_Int}, {&do_light, "light", "Light", DEF_LIGHT, t_Bool}, {&do_wire, "wire", "Wire", DEF_WIRE, t_Bool}, {&do_blend, "blend", "Blend", DEF_BLEND, t_Bool}, {&do_fog, "fog", "Fog", DEF_FOG, t_Bool}, {&do_antialias, "antialias", "Antialias", DEF_ANTIALIAS, t_Bool}, {&do_texture, "texture", "Texture", DEF_TEXTURE, t_Bool}, {&do_texture_quality, "textureQuality", "TextureQuality", DEF_TEXTURE_QUALITY, t_Bool}, {&do_mipmap, "mipmap", "Mipmap", DEF_MIPMAP, t_Bool}, {&do_depth, "doDepth", "DoDepth", DEF_DO_DEPTH, t_Bool}, {&which_image, "image", "Image", DEF_IMAGE, t_String}, }; static OptionStruct desc[] = { {"-quads num", "how many quads to draw"}, {"-/+ light", "whether to do enable lighting (slower)"}, {"-/+ wire", "whether to do use wireframe instead of filled (faster)"}, {"-/+ blend", "whether to do enable blending (slower)"}, {"-/+ fog", "whether to do enable fog (?)"}, {"-/+ antialias", "whether to do enable antialiased lines (slower)"}, {"-/+ texture", "whether to do enable texturing (much slower)"}, {"-/+ texture_quality", "whether to do enable linear/mipmap filtering (much much slower)"}, {"-/+ mipmap", "whether to do enable mipmaps (much slower)"}, {"-/+ depth", "whether to do enable depth buffer checking (slower)"}, {"-image ", "texture image to load"}, }; ENTRYPOINT ModeSpecOpt pulsar_opts = {countof(opts), opts, countof(vars), vars, desc}; #ifdef USE_MODULES ModStruct pulsar_description = {"pulsar", "init_pulsar", "draw_pulsar", "release_pulsar", "draw_pulsar", "init_pulsar", NULL, &pulsar_opts, 1000, 1, 2, 1, 4, 1.0, "", "OpenGL pulsar", 0, NULL}; #endif struct quad { GLfloat tx, ty, tz; GLfloat rx, ry, rz; GLfloat dtx, dty, dtz; GLfloat drx, dry, drz; }; /* structure for holding the pulsar data */ typedef struct { int screen_width, screen_height; GLXContext *glx_context; Window window; XColor fg, bg; GLint quad_list; float scale_x, scale_y, scale_z; int frame; struct quad *quads; } pulsarstruct; static pulsarstruct *Pulsar = NULL; static GLubyte * Generate_Image(int *width, int *height, int *format) { GLubyte *result; int i, j, c; int counter=0; *width = checkImageWidth; *height = checkImageHeight; result = (GLubyte *)malloc(4 * (*width) * (*height)); counter = 0; for (i = 0; i < checkImageWidth; i++) { for (j = 0; j < checkImageHeight; j++) { c = (((((i&0x8)==0))^(((j&0x8))==0)))*255; result[counter++] = (GLubyte) c; result[counter++] = (GLubyte) c; result[counter++] = (GLubyte) c; result[counter++] = (GLubyte) 255; } } *format = GL_RGBA; return result; } /* Create a texture in OpenGL. First an image is loaded and stored in a raster buffer, then it's */ static void Create_Texture(ModeInfo *mi, const char *filename) { int height, width; GLubyte *image; int format; if ( !strncmp(filename, "BUILTIN", 7)) { BUILTIN: image = Generate_Image(&width, &height, &format); } else { XImage *ximage = xpm_file_to_ximage (MI_DISPLAY (mi), MI_VISUAL (mi), MI_COLORMAP (mi), filename); if (! ximage) goto BUILTIN; image = (GLubyte *) ximage->data; width = ximage->width; height = ximage->height; format = GL_RGBA; } /* GL_MODULATE or GL_DECAL depending on what you want */ glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE); glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT); glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT); glPixelStorei(GL_UNPACK_ALIGNMENT, 1); /* perhaps we can edge a bit more speed at the expense of quality */ glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_FASTEST); if (do_texture_quality) { /* with texture_quality, the min and mag filters look *much* nice but are *much* slower */ glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_LINEAR); } else { /* default is to do it quick and dirty */ /* if you have mipmaps turned on, but not texture quality, nothing will happen! */ glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); } /* mipmaps make the image look much nicer */ if (do_mipmap) { int status; clear_gl_error(); status = gluBuild2DMipmaps(GL_TEXTURE_2D, 3, width, height, format, GL_UNSIGNED_BYTE, image); if (status) { const char *s = (char *) gluErrorString (status); fprintf (stderr, "%s: error mipmapping %dx%d texture: %s\n", progname, width, height, (s ? s : "(unknown)")); exit (1); } check_gl_error("mipmapping"); } else { clear_gl_error(); glTexImage2D(GL_TEXTURE_2D, 0, format, width, height, 0, format, GL_UNSIGNED_BYTE, image); check_gl_error("texture"); } } static void resetProjection(void) { glMatrixMode(GL_PROJECTION); glLoadIdentity(); glFrustum(-1, 1, -1, 1, 1, 100); glMatrixMode(GL_MODELVIEW); glLoadIdentity(); } static void GenerateQuad(pulsarstruct *gp) { int i; gp->quad_list = glGenLists(1); glNewList(gp->quad_list,GL_COMPILE); #if 1 glBegin(GL_QUADS); glColor4f(1,0,0,.4); glNormal3f(0,0,1); glTexCoord2f(0,0); glVertex2f(-1, -1); glColor4f(0,1,0,.4); glNormal3f(0,0,1); glTexCoord2f(0,1); glVertex2f(-1, 1); glColor4f(0,0,1,.4); glNormal3f(0,0,1); glTexCoord2f(1,1); glVertex2f( 1, 1); glColor4f(1,1,1,1); glNormal3f(0,0,1); glTexCoord2f(1,0); glVertex2f( 1, -1); #else glBegin(GL_TRIANGLE_STRIP); glColor4f(0,1,0,.4); glNormal3f(0,0,1); glTexCoord2f(0,1); glVertex2f(-1, 1); glColor4f(1,0,0,.4); glNormal3f(0,0,1); glTexCoord2f(0,0); glVertex2f(-1, -1); glColor4f(0,0,1,.4); glNormal3f(0,0,1); glTexCoord2f(1,1); glVertex2f( 1, 1); glColor4f(1,1,1,.4); glNormal3f(0,0,1); glTexCoord2f(1,0); glVertex2f( 1, -1); #endif glEnd(); glEndList(); gp->quads = (struct quad *) malloc(sizeof(struct quad) * num_quads); for (i=0; i < num_quads; i++) { gp->quads[i].rx = 0.; gp->quads[i].ry = 0.; gp->quads[i].rz = 0.; gp->quads[i].tx = 0.; gp->quads[i].ty = 0.; gp->quads[i].tz = -10; gp->quads[i].drx = frand(5.0); gp->quads[i].dry = frand(5.0); gp->quads[i].drz = 0; } } static void initializeGL(ModeInfo *mi, GLsizei width, GLsizei height) { pulsarstruct *gp = &Pulsar[MI_SCREEN(mi)]; GLfloat fogColor[4] = { 0.1, 0.1, 0.1, 0.1 }; glViewport( 0, 0, width, height ); resetProjection(); if (do_depth) glEnable(GL_DEPTH_TEST); if (do_antialias) { do_blend = 1; glEnable(GL_LINE_SMOOTH); } if (do_blend) { glEnable(GL_BLEND); glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); } if (do_light) { glShadeModel(GL_SMOOTH); glEnable(GL_COLOR_MATERIAL); glColorMaterial(GL_FRONT_AND_BACK, GL_AMBIENT_AND_DIFFUSE); } # ifdef HAVE_JWZGLES /* #### glPolygonMode other than GL_FILL unimplemented */ do_wire = 0; # endif if (do_wire) glPolygonMode(GL_FRONT_AND_BACK, GL_LINE); else glPolygonMode(GL_FRONT_AND_BACK, GL_FILL); if (do_fog) { glEnable(GL_FOG); glFogi(GL_FOG_MODE, GL_LINEAR); glFogfv(GL_FOG_COLOR, fogColor); glFogf(GL_FOG_DENSITY, 0.35); /* glHint(GL_FOG_HINT, GL_FASTEST); */ glFogf(GL_FOG_START, 50.0); glFogf(GL_FOG_END, 100.0); } if (do_texture) Create_Texture(mi, which_image); GenerateQuad(gp); } static void drawQuads(pulsarstruct *gp) { int i; for (i=0; i < num_quads; i++) { glPushMatrix(); glTranslatef(gp->quads[i].tx,0,0); glTranslatef(0,gp->quads[i].ty,0); glTranslatef(0,0,gp->quads[i].tz); glRotatef(gp->quads[i].rx, 1,0,0); glRotatef(gp->quads[i].ry, 0,1,0); glRotatef(gp->quads[i].rz, 0,0,1); glCallList(gp->quad_list); glPopMatrix(); gp->quads[i].rx += gp->quads[i].drx; gp->quads[i].ry += gp->quads[i].dry; gp->quads[i].rz += gp->quads[i].drz; } } static GLvoid drawScene(ModeInfo * mi) { pulsarstruct *gp = &Pulsar[MI_SCREEN(mi)]; /* check_gl_error ("drawScene"); */ glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); /* we have to do this here because the FPS meter turns these 3 features off!! */ { if (do_light) { glEnable(GL_LIGHTING); glEnable(GL_LIGHT0); } if (do_texture) { glEnable(GL_TEXTURE_2D); } if (do_blend) { glEnable(GL_BLEND); glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); } } resetProjection(); /* use XYZ scaling factors to change the size of the pulsar */ glScalef(gp->scale_x, gp->scale_y, gp->scale_z); drawQuads(gp); mi->polygon_count = num_quads; /* update the scaling factors- cyclic */ gp->scale_x = cos(gp->frame/360.)*10.; gp->scale_y = sin(gp->frame/360.)*10.; gp->scale_z = 1; /* increment frame-counter */ gp->frame++; /* check_gl_error ("drawScene"); */ } ENTRYPOINT void draw_pulsar(ModeInfo * mi) { pulsarstruct *gp = &Pulsar[MI_SCREEN(mi)]; Display *display = MI_DISPLAY(mi); Window window = MI_WINDOW(mi); if (!gp->glx_context) return; glXMakeCurrent(display, window, *(gp->glx_context)); drawScene(mi); if (mi->fps_p) do_fps (mi); glXSwapBuffers(display, window); } /* Standard reshape function */ ENTRYPOINT void reshape_pulsar(ModeInfo *mi, int width, int height) { glViewport( 0, 0, MI_WIDTH(mi), MI_HEIGHT(mi) ); resetProjection(); } ENTRYPOINT void init_pulsar(ModeInfo * mi) { int screen = MI_SCREEN(mi); pulsarstruct *gp; if (Pulsar == NULL) { if ((Pulsar = (pulsarstruct *) calloc(MI_NUM_SCREENS(mi), sizeof (pulsarstruct))) == NULL) return; } gp = &Pulsar[screen]; gp->window = MI_WINDOW(mi); gp->scale_x = gp->scale_y = gp->scale_z = 1; if ((gp->glx_context = init_GL(mi)) != NULL) { reshape_pulsar(mi, MI_WIDTH(mi), MI_HEIGHT(mi)); initializeGL(mi, MI_WIDTH(mi), MI_HEIGHT(mi)); } else { MI_CLEARWINDOW(mi); } } /* all sorts of nice cleanup code should go here! */ ENTRYPOINT void release_pulsar(ModeInfo * mi) { int screen; if (Pulsar != NULL) { for (screen = 0; screen < MI_NUM_SCREENS(mi); screen++) { pulsarstruct *gp = &Pulsar[screen]; free(gp->quads); } (void) free((void *) Pulsar); Pulsar = NULL; } FreeAllGL(mi); } #endif XSCREENSAVER_MODULE ("Pulsar", pulsar) xscreensaver-5.36/hacks/glx/extrusion.c000644 000767 000024 00000037004 12721365620 020235 0ustar00jwzstaff000000 000000 /* -*- Mode: C; tab-width: 4 -*- */ /* extrusion --- extrusion module for xscreensaver */ /*- * Permission to use, copy, modify, and distribute this software and its * documentation for any purpose and without fee is hereby granted, * provided that the above copyright notice appear in all copies and that * both that copyright notice and this permission notice appear in * supporting documentation. * * This file is provided AS IS with no warranties of any kind. The author * shall have no liability with respect to the infringement of copyrights, * trade secrets or any patents by this file or any part thereof. In no * event will the author be liable for any lost revenue or profits or * other special, indirect and consequential damages. * Revision History: * Tue Oct 19 22:24:47 PDT 1999 Initial creation by David Konerding * * * Notes: * This screensaver requires the GLE ("OpenGL Tubing and Extrusion Library") * which can be obtained from http://www.linas.org/gle/index.html */ #ifdef HAVE_CONFIG_H #include #endif #ifdef STANDALONE #define DEFAULTS "*delay: 20000 \n" \ "*showFPS: False \n" \ "*wireframe: False \n" # define refresh_extrusion 0 # define release_extrusion 0 # include "xlockmore.h" /* from the xscreensaver distribution */ #else /* !STANDALONE */ # include "xlock.h" /* from the xlockmore distribution */ #endif /* !STANDALONE */ #ifdef USE_GL /* whole file */ #ifdef HAVE_XMU # ifndef VMS # include #else /* VMS */ # include # endif /* VMS */ #endif #undef countof #define countof(x) (sizeof((x))/sizeof((*x))) #include "xpm-ximage.h" #include "rotator.h" #include "gltrackball.h" #include "extrusion.h" #define checkImageWidth 64 #define checkImageHeight 64 #define WIDTH 640 #define HEIGHT 480 #define DEF_LIGHT "True" #define DEF_TEXTURE "False" #define DEF_TEX_QUAL "False" #define DEF_MIPMAP "False" #define DEF_NAME "RANDOM" #define DEF_IMAGE "BUILTIN" static int do_light; static int do_texture; static int do_tex_qual; static int do_mipmap; static char *which_name; static char *which_image; static XrmOptionDescRec opts[] = { {"-light", ".extrusion.light", XrmoptionNoArg, "true" }, {"+light", ".extrusion.light", XrmoptionNoArg, "false" }, {"-texture", ".extrusion.texture", XrmoptionNoArg, "true" }, {"+texture", ".extrusion.texture", XrmoptionNoArg, "false" }, {"-texture", ".extrusion.texture", XrmoptionNoArg, "true" }, {"+texture_quality", ".extrusion.texture", XrmoptionNoArg, "false" }, {"-texture_quality", ".extrusion.texture", XrmoptionNoArg, "true" }, {"+mipmap", ".extrusion.mipmap", XrmoptionNoArg, "false" }, {"-mipmap", ".extrusion.mipmap", XrmoptionNoArg, "true" }, {"-name", ".extrusion.name", XrmoptionSepArg, 0 }, {"-image", ".extrusion.image", XrmoptionSepArg, 0 }, }; static argtype vars[] = { {&do_light, "light", "Light", DEF_LIGHT, t_Bool}, {&do_texture, "texture", "Texture", DEF_TEXTURE, t_Bool}, {&do_tex_qual, "texture_quality", "Texture_Quality", DEF_TEX_QUAL, t_Bool}, {&do_mipmap, "mipmap", "Mipmap", DEF_MIPMAP, t_Bool}, {&which_name, "name", "Name", DEF_NAME, t_String}, {&which_image, "image", "Image", DEF_IMAGE, t_String}, }; static OptionStruct desc[] = { {"-name num", "example 'name' to draw (helix2, helix3, helix4, joinoffset, screw, taper, twistoid)"}, {"-/+ light", "whether to do enable lighting (slower)"}, {"-/+ texture", "whether to apply a texture (slower)"}, {"-image ", "texture image to load"}, {"-/+ texture_quality", "whether to use texture smoothing (slower)"}, {"-/+ mipmap", "whether to use texture mipmap (slower)"}, }; ENTRYPOINT ModeSpecOpt extrusion_opts = {countof(opts), opts, countof(vars), vars, desc}; #ifdef USE_MODULES ModStruct extrusion_description = {"extrusion", "init_extrusion", "draw_extrusion", "release_extrusion", "draw_extrusion", "init_extrusion", NULL, &extrusion_opts, 1000, 1, 2, 1, 4, 1.0, "", "OpenGL extrusion", 0, NULL}; #endif /* structure for holding the extrusion data */ typedef struct { int screen_width, screen_height; GLXContext *glx_context; rotator *rot; trackball_state *trackball; Bool button_down_p; Bool button2_down_p; int mouse_start_x, mouse_start_y; int mouse_x, mouse_y; int mouse_dx, mouse_dy; Window window; XColor fg, bg; int extrusion_number; } extrusionstruct; static extrusionstruct *Extrusion = NULL; /* set up a light */ static const GLfloat lightOnePosition[] = {40.0, 40, 100.0, 0.0}; static const GLfloat lightOneColor[] = {0.99, 0.99, 0.00, 1.0}; static const GLfloat lightTwoPosition[] = {-40.0, 40, 100.0, 0.0}; static const GLfloat lightTwoColor[] = {0.00, 0.99, 0.99, 1.0}; float rot_x=0, rot_y=0, rot_z=0; float lastx=0, lasty=0; static float max_lastx=400, max_lasty=400; static float min_lastx=-400, min_lasty=-400; struct functions { void (*InitStuff)(void); void (*DrawStuff)(void); char *name; }; /* currently joinoffset and twistoid look funny- like we're looking at them from the back or something */ static const struct functions funcs_ptr[] = { {InitStuff_helix2, DrawStuff_helix2, "helix2"}, {InitStuff_helix3, DrawStuff_helix3, "helix3"}, {InitStuff_helix4, DrawStuff_helix4, "helix4"}, {InitStuff_joinoffset, DrawStuff_joinoffset, "joinoffset"}, {InitStuff_screw, DrawStuff_screw, "screw"}, {InitStuff_taper, DrawStuff_taper, "taper"}, {InitStuff_twistoid, DrawStuff_twistoid, "twistoid"}, }; static int num_extrusions = countof(funcs_ptr); /* BEGINNING OF FUNCTIONS */ static GLubyte * Generate_Image(int *width, int *height, int *format) { GLubyte *result; int i, j, c; int counter=0; *width = checkImageWidth; *height = checkImageHeight; result = (GLubyte *)malloc(4 * (*width) * (*height)); counter = 0; for (i = 0; i < checkImageWidth; i++) { for (j = 0; j < checkImageHeight; j++) { c = (((((i&0x8)==0))^(((j&0x8))==0)))*255; result[counter++] = (GLubyte) c; result[counter++] = (GLubyte) c; result[counter++] = (GLubyte) c; result[counter++] = (GLubyte) 255; } } *format = GL_RGBA; return result; } /* Create a texture in OpenGL. First an image is loaded and stored in a raster buffer, then it's */ static void Create_Texture(ModeInfo *mi, const char *filename) { int height, width; GLubyte *image; int format; if ( !strncmp(filename, "BUILTIN", 7)) { BUILTIN: image = Generate_Image(&width, &height, &format); } else { XImage *ximage = xpm_file_to_ximage (MI_DISPLAY (mi), MI_VISUAL (mi), MI_COLORMAP (mi), filename); if (!ximage) goto BUILTIN; image = (GLubyte *) ximage->data; width = ximage->width; height = ximage->height; format = GL_RGBA; } /* GL_MODULATE or GL_DECAL depending on what you want */ glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE); glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT); glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT); glPixelStorei(GL_UNPACK_ALIGNMENT, 1); /* perhaps we can edge a bit more speed at the expense of quality */ glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_FASTEST); if (do_tex_qual) { /* with texture_quality, the min and mag filters look *much* nice but are *much* slower */ glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_LINEAR); } else { /* default is to do it quick and dirty */ /* if you have mipmaps turned on, but not texture quality, nothing will happen! */ glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); } /* mipmaps make the image look much nicer */ if (do_mipmap) { int status; clear_gl_error(); status = gluBuild2DMipmaps(GL_TEXTURE_2D, 3, width, height, format, GL_UNSIGNED_BYTE, image); if (status) { const char *s = (char *) gluErrorString (status); fprintf (stderr, "%s: error mipmapping %dx%d texture: %s\n", progname, width, height, (s ? s : "(unknown)")); exit (1); } check_gl_error("mipmapping"); } else { clear_gl_error(); glTexImage2D(GL_TEXTURE_2D, 0, format, width, height, 0, format, GL_UNSIGNED_BYTE, image); check_gl_error("texture"); } } static void init_rotation (ModeInfo *mi) { extrusionstruct *gp = &Extrusion[MI_SCREEN(mi)]; double spin_speed = 0.5; gp->rot = make_rotator (spin_speed, spin_speed, spin_speed, 0.2, 0.005, True); gp->trackball = gltrackball_init (True); lastx = (random() % (int) (max_lastx - min_lastx)) + min_lastx; lasty = (random() % (int) (max_lasty - min_lasty)) + min_lasty; } /* draw the extrusion once */ ENTRYPOINT void draw_extrusion(ModeInfo * mi) { extrusionstruct *gp = &Extrusion[MI_SCREEN(mi)]; Display *display = MI_DISPLAY(mi); Window window = MI_WINDOW(mi); static const GLfloat color[4] = {0.6, 0.6, 0.4, 1.0}; /* static const GLfloat spec[4] = {0.6, 0.6, 0.6, 1.0}; */ /* static const GLfloat shiny = 40.0; */ double x, y, z; if (!gp->glx_context) return; glXMakeCurrent(MI_DISPLAY(mi), MI_WINDOW(mi), *(gp->glx_context)); glPushMatrix(); gltrackball_rotate (gp->trackball); get_rotation (gp->rot, &x, &y, &z, !(gp->button_down_p || gp->button2_down_p)); glRotatef (x * 360, 1.0, 0.0, 0.0); glRotatef (y * 360, 0.0, 1.0, 0.0); glRotatef (z * 360, 0.0, 0.0, 1.0); /* track the mouse only if a button is down. */ if (gp->button2_down_p) { gp->mouse_dx += gp->mouse_x - gp->mouse_start_x; gp->mouse_dy += gp->mouse_y - gp->mouse_start_y; gp->mouse_start_x = gp->mouse_x; gp->mouse_start_y = gp->mouse_y; } { float scale = (max_lastx - min_lastx); get_position (gp->rot, &x, &y, &z, !(gp->button_down_p || gp->button2_down_p)); lastx = x * scale + min_lastx + gp->mouse_dx; lasty = y * scale + min_lasty + gp->mouse_dy; } glScalef(0.5, 0.5, 0.5); /* glMaterialfv (GL_FRONT_AND_BACK, GL_SPECULAR, spec); */ /* glMateriali (GL_FRONT_AND_BACK, GL_SHININESS, shiny); */ glMaterialfv (GL_FRONT_AND_BACK, GL_AMBIENT_AND_DIFFUSE, color); glFrontFace(GL_CCW); funcs_ptr[gp->extrusion_number].DrawStuff(); glPopMatrix(); if (mi->fps_p) do_fps (mi); glXSwapBuffers(display, window); } /* set up lighting conditions */ static void SetupLight(void) { glLightfv (GL_LIGHT0, GL_POSITION, lightOnePosition); glLightfv (GL_LIGHT0, GL_DIFFUSE, lightOneColor); glLightfv (GL_LIGHT1, GL_POSITION, lightTwoPosition); glLightfv (GL_LIGHT1, GL_DIFFUSE, lightTwoColor); glEnable (GL_LIGHT0); glEnable (GL_LIGHT1); glEnable (GL_LIGHTING); glColorMaterial (GL_FRONT, GL_DIFFUSE); glColorMaterial (GL_BACK, GL_DIFFUSE); glEnable (GL_COLOR_MATERIAL); } /* Standard reshape function */ ENTRYPOINT void reshape_extrusion (ModeInfo *mi, int width, int height) { GLfloat h = (GLfloat) height / (GLfloat) width; glViewport (0, 0, (GLint) width, (GLint) height); glMatrixMode(GL_PROJECTION); glLoadIdentity(); gluPerspective (30.0, 1/h, 1.0, 100.0); glMatrixMode(GL_MODELVIEW); glLoadIdentity(); gluLookAt( 0.0, 0.0, 30.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0); glClear(GL_COLOR_BUFFER_BIT); } /* decide which extrusion example to run */ static void chooseExtrusionExample (ModeInfo *mi) { extrusionstruct *gp = &Extrusion[MI_SCREEN(mi)]; int i; /* call the extrusion init routine */ if (!strncmp(which_name, "RANDOM", strlen(which_name))) { gp->extrusion_number = random() % num_extrusions; } else { gp->extrusion_number=-1; for (i=0; i < num_extrusions; i++) { if (!strncmp(which_name, funcs_ptr[i].name, strlen(which_name))) { gp->extrusion_number = i; } } } if (gp->extrusion_number < 0 || gp->extrusion_number >= num_extrusions) { fprintf(stderr, "%s: invalid extrusion example number!\n", progname); fprintf(stderr, "%s: known extrusions:\n", progname); for (i=0; i < num_extrusions; i++) fprintf(stderr,"\t%s\n", funcs_ptr[i].name); exit(1); } init_rotation(mi); funcs_ptr[gp->extrusion_number].InitStuff(); } /* main OpenGL initialization routine */ static void initializeGL(ModeInfo *mi, GLsizei width, GLsizei height) { int style; int mode; reshape_extrusion(mi, width, height); glViewport( 0, 0, width, height ); glEnable(GL_DEPTH_TEST); glDisable (GL_CULL_FACE); glLightModeli (GL_LIGHT_MODEL_TWO_SIDE, True); glShadeModel(GL_SMOOTH); # ifdef HAVE_JWZGLES /* #### glPolygonMode other than GL_FILL unimplemented */ MI_IS_WIREFRAME(mi) = 0; # endif if (do_light) SetupLight(); if (MI_IS_WIREFRAME(mi)) { glPolygonMode(GL_FRONT,GL_LINE); glPolygonMode(GL_BACK,GL_LINE); } if (do_texture) { Create_Texture(mi, which_image); glEnable(GL_TEXTURE_2D); /* configure the pipeline */ style = TUBE_JN_CAP; style |= TUBE_CONTOUR_CLOSED; style |= TUBE_NORM_FACET; style |= TUBE_JN_ANGLE; gleSetJoinStyle (style); if (do_texture) { mode = GLE_TEXTURE_ENABLE | GLE_TEXTURE_VERTEX_MODEL_FLAT; glMatrixMode (GL_TEXTURE); glLoadIdentity (); glScalef (0.25, 0.1, 1); glMatrixMode (GL_MODELVIEW); gleTextureMode (mode); } } } ENTRYPOINT Bool extrusion_handle_event (ModeInfo *mi, XEvent *event) { extrusionstruct *gp = &Extrusion[MI_SCREEN(mi)]; if (event->xany.type == ButtonPress && (event->xbutton.button == Button4 || event->xbutton.button == Button5 || event->xbutton.button == Button6 || event->xbutton.button == Button7)) { } else if (event->xany.type == ButtonPress && /* rotate with left button */ !event->xbutton.state) /* if no modifier keys */ { } else if (event->xany.type == ButtonPress) /* deform with other buttons */ { /* or with modifier keys */ gp->button2_down_p = True; } else if (event->xany.type == ButtonRelease) { gp->button_down_p = False; gp->button2_down_p = False; } else if (event->xany.type == MotionNotify) { if (gp->button2_down_p) { gp->mouse_x = event->xmotion.x; gp->mouse_y = event->xmotion.y; } } if (gltrackball_event_handler (event, gp->trackball, MI_WIDTH (mi), MI_HEIGHT (mi), &gp->button_down_p)) return True; return False; } /* xextrusion initialization routine */ ENTRYPOINT void init_extrusion (ModeInfo * mi) { int screen = MI_SCREEN(mi); extrusionstruct *gp; if (MI_IS_WIREFRAME(mi)) do_light = 0; if (Extrusion == NULL) { if ((Extrusion = (extrusionstruct *) calloc(MI_NUM_SCREENS(mi), sizeof (extrusionstruct))) == NULL) return; } gp = &Extrusion[screen]; gp->window = MI_WINDOW(mi); if ((gp->glx_context = init_GL(mi)) != NULL) { reshape_extrusion(mi, MI_WIDTH(mi), MI_HEIGHT(mi)); initializeGL(mi, MI_WIDTH(mi), MI_HEIGHT(mi)); chooseExtrusionExample(mi); } else { MI_CLEARWINDOW(mi); } } XSCREENSAVER_MODULE ("Extrusion", extrusion) #endif /* USE_GL */ xscreensaver-5.36/hacks/glx/extrusion-helix2.c000644 000767 000024 00000002240 12701612217 021413 0ustar00jwzstaff000000 000000 /* * helicoid (gernalized torus) demo * * FUNCTION: * This code provides a very simple example of the helicoid primitive. * Most of this code is required to set up OpenGL and GLUT, and very * very little to set up the helix drawer. Don't blink! * * =======> MOUSE HOOKED UP TO RADIUS, DELTA-RADIUS < ======== * * HISTORY: * Written by Linas Vepstas, March 1995 */ #include "extrusion.h" /* controls shape of object */ extern float lastx; extern float lasty; void InitStuff_helix2 (void) { } /* draw the helix shape */ void DrawStuff_helix2 (void) { glClear (GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glColor3f (0.6, 0.3, 0.8); /* set up some matrices so that the object spins with the mouse */ glPushMatrix (); /* glTranslatef (0.0, 0.0, -80.0); */ /* glRotatef (220.0, 0.0, 1.0, 0.0); */ /* glRotatef (65.0, 1.0, 0.0, 0.0); */ /* Phew. FINALLY, Draw the helix -- */ gleSetJoinStyle (TUBE_NORM_EDGE | TUBE_JN_ANGLE | TUBE_JN_CAP); gleHelicoid (0.01*lastx, 6.0, (0.01*lasty - 2.0), -3.0, 4.0, 0x0, 0x0, 0.0, 1080.0); glPopMatrix (); } /* ------------------------- end of file ----------------- */ xscreensaver-5.36/hacks/glx/extrusion-helix3.c000644 000767 000024 00000002177 12701612217 021425 0ustar00jwzstaff000000 000000 /* * helicoid (gernalized torus) demo * * FUNCTION: * This code provides a very simple example of the helicoid primitive. * Most of this code is required to set up OpenGL and GLUT, and very * very little to set up the helix drawer. Don't blink! * * =======> MOUSE HOOKED UP TO SWEEP, HEIGHT < ======== * * HISTORY: * Written by Linas Vepstas, March 1995 */ #include "extrusion.h" /* controls shape of object */ extern float lastx; extern float lasty; void InitStuff_helix3 (void) { } /* draw the helix shape */ void DrawStuff_helix3 (void) { glClear (GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glColor3f (0.8, 0.3, 0.6); /* set up some matrices so that the object spins with the mouse */ glPushMatrix (); /* glTranslatef (0.0, 0.0, -80.0); */ /* glRotatef (220.0, 0.0, 1.0, 0.0); */ /* glRotatef (65.0, 1.0, 0.0, 0.0); */ /* Phew. FINALLY, Draw the helix -- */ gleSetJoinStyle (TUBE_NORM_EDGE | TUBE_JN_ANGLE | TUBE_JN_CAP); gleHelicoid (1.0, 6.0, -1.0, 0.0, (0.02*lasty-2.0), 0x0, 0x0, 0.0, 6.0*lastx); glPopMatrix (); } /* ------------------------- end of file ----------------- */ xscreensaver-5.36/hacks/glx/extrusion-helix4.c000644 000767 000024 00000003025 12701612217 021417 0ustar00jwzstaff000000 000000 /* * helicoid (gernalized torus) demo * * FUNCTION: * This code provides a very simple example of the helicoid primitive. * Most of this code is required to set up OpenGL and GLUT, and very * very little to set up the helix drawer. Don't blink! * * =======> MOUSE HOOKED UP TO AFFINE < ======== * * HISTORY: * Written by Linas Vepstas, March 1995 */ #include "extrusion.h" /* controls shape of object */ extern float lastx; extern float lasty; void InitStuff_helix4 (void) { } /* draw the helix shape */ void DrawStuff_helix4 (void) { double affine[2][3]; double delta_affine[2][3]; glClear (GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glColor3f (0.7, 0.5, 0.3); /* set up some matrices so that the object spins with the mouse */ glPushMatrix (); /* glTranslatef (0.0, 0.0, -80.0); */ /* glRotatef (220.0, 0.0, 1.0, 0.0); */ /* glRotatef (65.0, 1.0, 0.0, 0.0); */ /* Phew. FINALLY, Draw the helix -- */ affine [0][0] = 1.0/ (0.01*lastx); affine [1][0] = 0.0; affine [0][1] = 0.0; affine [1][1] = 0.01*lastx; affine [0][2] = 0.0; affine [1][2] = 0.0; delta_affine [0][0] = 0.0; delta_affine [1][0] = 0.03*lasty; delta_affine [0][1] = -0.03*lasty; delta_affine [1][1] = 0.0; delta_affine [0][2] = 0.0; delta_affine [1][2] = 0.0; gleSetJoinStyle (TUBE_NORM_EDGE | TUBE_JN_ANGLE | TUBE_JN_CAP); gleHelicoid (1.0, 7.0, -1.0, -4.0, 6.0, affine, delta_affine, 0.0, 980.0); glPopMatrix (); } /* ------------------------- end of file ----------------- */ xscreensaver-5.36/hacks/glx/extrusion-joinoffset.c000644 000767 000024 00000006650 12701612217 022377 0ustar00jwzstaff000000 000000 /* cylinder drawing demo */ /* this demo demonstrates the various join styles */ #include "extrusion.h" /* ------------------------------------------------------- */ /* the arrays in which we will store the polyline */ #define NPTS 100 static double points [NPTS][3]; static float colors [NPTS][3]; static int idx = 0; /* some utilities for filling that array */ #define PSCALE 0.5 #define PNT(x,y,z) { \ points[idx][0] = PSCALE * x; \ points[idx][1] = PSCALE * y; \ points[idx][2] = PSCALE * z; \ idx ++; \ } #define COL(r,g,b) { \ colors[idx][0] = r; \ colors[idx][1] = g; \ colors[idx][2] = b; \ } /* the arrays in which we will store the contour */ #define NCONTOUR 100 static double contour_points [NCONTOUR][2]; static int cidx = 0; /* some utilities for filling that array */ #define C_PNT(x,y) { \ contour_points[cidx][0] = x; \ contour_points[cidx][1] = y; \ cidx ++; \ } /* ------------------------------------------------------- */ /* * Initialize a bent shape with three segments. * The data format is a polyline. * * NOTE that neither the first, nor the last segment are drawn. * The first & last segment serve only to determine that angle * at which the endcaps are drawn. */ void InitStuff_joinoffset (void) { COL (0.0, 0.0, 0.0); PNT (16.0, 0.0, 0.0); COL (0.2, 0.8, 0.5); PNT (0.0, -16.0, 0.0); COL (0.0, 0.8, 0.3); PNT (-16.0, 0.0, 0.0); COL (0.8, 0.3, 0.0); PNT (0.0, 16.0, 0.0); COL (0.2, 0.3, 0.9); PNT (16.0, 0.0, 0.0); COL (0.2, 0.8, 0.5); PNT (0.0, -16.0, 0.0); COL (0.0, 0.0, 0.0); PNT (-16.0, 0.0, 0.0); C_PNT (-0.8, -0.5); C_PNT (-1.8, 0.0); C_PNT (-1.2, 0.3); C_PNT (-0.7, 0.8); C_PNT (-0.2, 1.3); C_PNT (0.0, 1.6); C_PNT (0.2, 1.3); C_PNT (0.7, 0.8); C_PNT (1.2, 0.3); C_PNT (1.8, 0.0); C_PNT (0.8, -0.5); gleSetJoinStyle (TUBE_JN_ANGLE | TUBE_CONTOUR_CLOSED | TUBE_JN_CAP); } static double up_vector[3] = {1.0, 0.0, 0.0}; /* controls shape of object */ extern float lastx; extern float lasty; /* ------------------------------------------------------- */ /* draw the extrusion */ void DrawStuff_joinoffset (void) { double moved_contour [NCONTOUR][2]; int style, save_style; int i; for (i=0; i #include /* =========================================================== */ #define SCALE 1.3 #define CONTOUR(x,y) { \ double ax, ay, alen; \ contour[i][0] = SCALE * (x); \ contour[i][1] = SCALE * (y); \ if (i!=0) { \ ax = contour[i][0] - contour[i-1][0]; \ ay = contour[i][1] - contour[i-1][1]; \ alen = 1.0 / sqrt (ax*ax + ay*ay); \ ax *= alen; ay *= alen; \ norms [i-1][0] = ay; \ norms [i-1][1] = -ax; \ } \ i++; \ } #define NUM_PTS (25) static double contour [NUM_PTS][2]; static double norms [NUM_PTS][2]; static void init_contour (void) { int i; /* outline of extrusion */ i=0; CONTOUR (1.0, 1.0); CONTOUR (1.0, 2.9); CONTOUR (0.9, 3.0); CONTOUR (-0.9, 3.0); CONTOUR (-1.0, 2.9); CONTOUR (-1.0, 1.0); CONTOUR (-2.9, 1.0); CONTOUR (-3.0, 0.9); CONTOUR (-3.0, -0.9); CONTOUR (-2.9, -1.0); CONTOUR (-1.0, -1.0); CONTOUR (-1.0, -2.9); CONTOUR (-0.9, -3.0); CONTOUR (0.9, -3.0); CONTOUR (1.0, -2.9); CONTOUR (1.0, -1.0); CONTOUR (2.9, -1.0); CONTOUR (3.0, -0.9); CONTOUR (3.0, 0.9); CONTOUR (2.9, 1.0); CONTOUR (1.0, 1.0); /* repeat so that last normal is computed */ } /* =========================================================== */ /* controls shape of object */ extern float lastx; extern float lasty; void InitStuff_screw (void) { int style; /* configure the pipeline */ style = TUBE_JN_CAP; style |= TUBE_CONTOUR_CLOSED; style |= TUBE_NORM_FACET; style |= TUBE_JN_ANGLE; gleSetJoinStyle (style); init_contour(); } /* =========================================================== */ void DrawStuff_screw (void) { glClear (GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glColor3f (0.5, 0.6, 0.6); /* set up some matrices so that the object spins with the mouse */ glPushMatrix (); /* glTranslatef (0.0, 0.0, -80.0); */ /* glRotatef (130.0, 0.0, 1.0, 0.0); */ /* glRotatef (65.0, 1.0, 0.0, 0.0); */ /* draw the brand and the handle */ gleScrew (20, contour, norms, NULL, -6.0, 9.0, lasty); glPopMatrix (); } /* ===================== END OF FILE ================== */ xscreensaver-5.36/hacks/glx/extrusion-taper.c000644 000767 000024 00000011606 12701612217 021341 0ustar00jwzstaff000000 000000 /* * taper.c * * FUNCTION: * Draws a tapered screw shape. * * HISTORY: * -- created by Linas Vepstas October 1991 * -- heavily modified to draw more texas shapes, Feb 1993, Linas * -- converted to use GLUT -- December 1995, Linas * */ #include "extrusion.h" #include #include #ifndef NULL #define NULL ((void *) 0x0) #endif /* NULL */ /* Some files do not define M_PI... */ #ifndef M_PI #define M_PI 3.14159265358979323846 #endif /* =========================================================== */ #define SCALE 3.33333 #define CONTOUR(x,y) { \ double ax, ay, alen; \ contour[i][0] = SCALE * (x); \ contour[i][1] = SCALE * (y); \ if (i!=0) { \ ax = contour[i][0] - contour[i-1][0]; \ ay = contour[i][1] - contour[i-1][1]; \ alen = 1.0 / sqrt (ax*ax + ay*ay); \ ax *= alen; ay *= alen; \ norms [i-1][0] = ay; \ norms [i-1][1] = -ax; \ } \ i++; \ } #define NUM_PTS (25) static double contour [NUM_PTS][2]; static double norms [NUM_PTS][2]; static void init_contour (void) { int i; /* outline of extrusion */ i=0; CONTOUR (1.0, 1.0); CONTOUR (1.0, 2.9); CONTOUR (0.9, 3.0); CONTOUR (-0.9, 3.0); CONTOUR (-1.0, 2.9); CONTOUR (-1.0, 1.0); CONTOUR (-2.9, 1.0); CONTOUR (-3.0, 0.9); CONTOUR (-3.0, -0.9); CONTOUR (-2.9, -1.0); CONTOUR (-1.0, -1.0); CONTOUR (-1.0, -2.9); CONTOUR (-0.9, -3.0); CONTOUR (0.9, -3.0); CONTOUR (1.0, -2.9); CONTOUR (1.0, -1.0); CONTOUR (2.9, -1.0); CONTOUR (3.0, -0.9); CONTOUR (3.0, 0.9); CONTOUR (2.9, 1.0); CONTOUR (1.0, 1.0); /* repeat so that last normal is computed */ } /* =========================================================== */ #define PSIZE 40 static double path[PSIZE][3]; static double twist[PSIZE]; static double taper[PSIZE]; static void init_taper (void) { int j; double z, deltaz; double ang, dang; z = -10.0; deltaz = 0.5; ang = 0.0; dang = 20.0; for (j=0; j<40; j++) { path[j][0] = 0x0; path[j][1] = 0x0; path[j][2] = z; twist[j] = ang; ang += dang; taper[j] = 0.1 * sqrt (9.51*9.51 - z*z); z += deltaz; } taper[0] = taper[1]; taper[39] = taper[38]; } /* =========================================================== */ /* controls shape of object */ extern float lastx; extern float lasty; void InitStuff_taper (void) { int style; /* configure the pipeline */ style = TUBE_JN_CAP; style |= TUBE_CONTOUR_CLOSED; style |= TUBE_NORM_FACET; style |= TUBE_JN_ANGLE; gleSetJoinStyle (style); init_contour(); init_taper(); } /* =========================================================== */ static void gleTaper (int ncp, gleDouble contour[][2], gleDouble cont_normal[][2], gleDouble up[3], int npoints, gleDouble point_array[][3], float color_array[][3], gleDouble taper[], gleDouble twist[]) { int j; gleAffine *xforms; double co, si, angle; /* malloc the extrusion array and the twist array */ xforms = (gleAffine *) malloc (npoints * sizeof(gleAffine)); for (j=0; j #include /* Some files do not define M_PI... */ #ifndef M_PI #define M_PI 3.14159265358979323846 #endif /* controls shape of object */ extern float lastx; extern float lasty; #define OPENGL_10 /* =========================================================== */ #define NUM_TOID1_PTS 5 static double toid1_points[NUM_TOID1_PTS][3]; static float toid1_colors [NUM_TOID1_PTS][3]; static double toid1_twists [NUM_TOID1_PTS]; #define TSCALE (6.0) #define TPTS(x,y) { \ toid1_points[i][0] = TSCALE * (x); \ toid1_points[i][1] = TSCALE * (y); \ toid1_points[i][2] = TSCALE * (0.0); \ i++; \ } #define TCOLS(r,g,b) { \ toid1_colors[i][0] = (r); \ toid1_colors[i][1] = (g); \ toid1_colors[i][2] = (b); \ i++; \ } #define TXZERO() { \ toid1_twists[i] = 0.0; \ i++; \ } static void init_toid1_line (void) { int i; i=0; TPTS (-1.1, 0.0); TPTS (-1.0, 0.0); TPTS (0.0, 0.0); TPTS (1.0, 0.0); TPTS (1.1, 0.0); i=0; TCOLS (0.8, 0.8, 0.5); TCOLS (0.8, 0.4, 0.5); TCOLS (0.8, 0.8, 0.3); TCOLS (0.4, 0.4, 0.5); TCOLS (0.8, 0.8, 0.5); i=0; TXZERO (); TXZERO (); TXZERO (); TXZERO (); TXZERO (); } /* =========================================================== */ #define SCALE 0.6 #define TWIST(x,y) { \ double ax, ay, alen; \ twistation[i][0] = SCALE * (x); \ twistation[i][1] = SCALE * (y); \ if (i!=0) { \ ax = twistation[i][0] - twistation[i-1][0]; \ ay = twistation[i][1] - twistation[i-1][1]; \ alen = 1.0 / sqrt (ax*ax + ay*ay); \ ax *= alen; ay *= alen; \ twist_normal [i-1][0] = - ay; \ twist_normal [i-1][1] = ax; \ } \ i++; \ } #define NUM_TWIS_PTS (20) static double twistation [NUM_TWIS_PTS][2]; static double twist_normal [NUM_TWIS_PTS][2]; static void init_tripples (void) { int i; double angle; double co, si; /* outline of extrusion */ i=0; /* first, draw a semi-curcular "hump" */ while (i< 11) { angle = M_PI * ((double) i) / 10.0; co = cos (angle); si = sin (angle); TWIST ((-7.0 -3.0*co), 1.8*si); } /* now, a zig-zag corrugation */ while (1) { if (i >= NUM_TWIS_PTS) break; TWIST ((-10.0 +(double) i), 0.0); if (i >= NUM_TWIS_PTS) break; TWIST ((-9.5 +(double) i), 1.0); } } /* =========================================================== */ #define V3F(x,y,z) { \ float vvv[3]; \ vvv[0] = x; vvv[1] = y; vvv[2] = z; v3f (vvv); \ } #define N3F(x,y,z) { \ float nnn[3]; \ nnn[0] = x; nnn[1] = y; nnn[2] = z; n3f (nnn); \ } /* =========================================================== */ void DrawStuff_twistoid (void) { int i; toid1_twists[2] = (lastx-121.0) / 8.0; i=3; /* TPTS (1.0, lasty /400.0); TPTS (1.1, 1.1 * lasty / 400.0); */ TPTS (1.0, -(lasty-121.0) /200.0); TPTS (1.1, -1.1 * (lasty-121.0) / 200.0); #ifdef IBM_GL_32 rotate (230, 'x'); rotate (230, 'y'); scale (1.8, 1.8, 1.8); if (mono_color) { RGBcolor (178, 178, 204); twist_extrusion (NUM_TWIS_PTS, twistation, twist_normal, NULL, NUM_TOID1_PTS, toid1_points, NULL, toid1_twists); } else { twist_extrusion (NUM_TWIS_PTS, twistation, twist_normal, NULL, NUM_TOID1_PTS, toid1_points, toid1_colors, toid1_twists); } #endif #ifdef OPENGL_10 glClear (GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glFrontFace(GL_CW); /* jwz */ /* set up some matrices so that the object spins with the mouse */ glPushMatrix (); /* glTranslatef (0.0, 0.0, -80.0); */ /* glRotated (43.0, 1.0, 0.0, 0.0); */ /* glRotated (43.0, 0.0, 1.0, 0.0); */ glScaled (1.8, 1.8, 1.8); gleTwistExtrusion (NUM_TWIS_PTS, twistation, twist_normal, NULL, NUM_TOID1_PTS, toid1_points, NULL, toid1_twists); glPopMatrix (); #endif } /* =========================================================== */ void InitStuff_twistoid (void) { int js; init_toid1_line (); init_tripples (); #ifdef IBM_GL_32 js = getjoinstyle (); js &= ~TUBE_CONTOUR_CLOSED; setjoinstyle (js); #endif #ifdef OPENGL_10 js = gleGetJoinStyle (); js &= ~TUBE_CONTOUR_CLOSED; gleSetJoinStyle (js); #endif } /* ------------------ end of file -------------------- */ xscreensaver-5.36/hacks/glx/sierpinski3d.c000644 000767 000024 00000041342 12710313224 020573 0ustar00jwzstaff000000 000000 /* -*- Mode: C; tab-width: 4 -*- */ /* Sierpinski3D --- 3D sierpinski gasket */ #if 0 static const char sccsid[] = "@(#)sierpinski3D.c 00.01 99/11/04 xlockmore"; #endif /*- * Permission to use, copy, modify, and distribute this software and its * documentation for any purpose and without fee is hereby granted, * provided that the above copyright notice appear in all copies and that * both that copyright notice and this permission notice appear in * supporting documentation. * * This file is provided AS IS with no warranties of any kind. The author * shall have no liability with respect to the infringement of copyrights, * trade secrets or any patents by this file or any part thereof. In no * event will the author be liable for any lost revenue or profits or * other special, indirect and consequential damages. * * Revision History: * 1999: written by Tim Robinson * a 3-D representation of the Sierpinski gasket fractal. * * 10-Dec-99 jwz rewrote to draw a set of tetrahedrons instead of a * random scattering of points. */ #ifdef STANDALONE # define DEFAULTS "*delay: 20000 \n" \ "*showFPS: False \n" \ "*wireframe: False \n" \ "*suppressRotationAnimation: True\n" \ # define refresh_gasket 0 # include "xlockmore.h" /* from the xscreensaver distribution */ #else /* !STANDALONE */ # include "xlock.h" /* from the xlockmore distribution */ #endif /* !STANDALONE */ #ifdef USE_GL #define DEF_SPIN "True" #define DEF_WANDER "True" #define DEF_SPEED "150" #define DEF_MAX_DEPTH "5" #include "rotator.h" #include "gltrackball.h" #undef countof #define countof(x) (sizeof((x))/sizeof((*x))) static int max_depth; static int speed; static Bool do_spin; static Bool do_wander; static XrmOptionDescRec opts[] = { {"-depth", ".sierpinski3d.maxDepth", XrmoptionSepArg, 0 }, {"-speed", ".sierpinski3d.speed", XrmoptionSepArg, 0 }, { "-spin", ".spin", XrmoptionNoArg, "True" }, { "+spin", ".spin", XrmoptionNoArg, "False" }, { "-wander", ".wander", XrmoptionNoArg, "True" }, { "+wander", ".wander", XrmoptionNoArg, "False" }, }; static argtype vars[] = { {&do_spin, "spin", "Spin", DEF_SPIN, t_Bool}, {&do_wander, "wander", "Wander", DEF_WANDER, t_Bool}, {&speed, "speed", "Speed", DEF_SPEED, t_Int}, {&max_depth, "maxDepth", "MaxDepth", DEF_MAX_DEPTH, t_Int}, }; ENTRYPOINT ModeSpecOpt gasket_opts = {countof(opts), opts, countof(vars), vars, NULL}; #ifdef USE_MODULES ModStruct gasket_description = {"gasket", "init_gasket", "draw_gasket", "release_gasket", "draw_gasket", "init_gasket", NULL, &gasket_opts, 1000, 1, 2, 1, 4, 1.0, "", "Shows GL's Sierpinski gasket", 0, NULL}; #endif typedef struct { double x,y,z; } XYZ; typedef struct { GLuint gasket0, gasket1, gasket2, gasket3; GLXContext *glx_context; Window window; rotator *rot; trackball_state *trackball; Bool button_down_p; int current_depth; int ncolors; XColor *colors; int ccolor0; int ccolor1; int ccolor2; int ccolor3; int tick; } gasketstruct; static gasketstruct *gasket = NULL; static void triangle (GLfloat x1, GLfloat y1, GLfloat z1, GLfloat x2, GLfloat y2, GLfloat z2, GLfloat x3, GLfloat y3, GLfloat z3, Bool wireframe_p) { if (wireframe_p) glBegin (GL_LINE_LOOP); else glBegin (GL_TRIANGLES); glVertex3f (x1, y1, z1); glVertex3f (x2, y2, z2); glVertex3f (x3, y3, z3); glEnd(); } static void four_tetras (gasketstruct *gp, XYZ *outer, XYZ *normals, Bool wireframe_p, int countdown, int which, int *countP) { if (countdown <= 0) { (*countP)++; if (which == 0) { glNormal3f (normals[0].x, normals[0].y, normals[0].z); triangle (outer[0].x, outer[0].y, outer[0].z, outer[1].x, outer[1].y, outer[1].z, outer[2].x, outer[2].y, outer[2].z, wireframe_p); } else if (which == 1) { glNormal3f (normals[1].x, normals[1].y, normals[1].z); triangle (outer[0].x, outer[0].y, outer[0].z, outer[3].x, outer[3].y, outer[3].z, outer[1].x, outer[1].y, outer[1].z, wireframe_p); } else if (which == 2) { glNormal3f (normals[2].x, normals[2].y, normals[2].z); triangle (outer[0].x, outer[0].y, outer[0].z, outer[2].x, outer[2].y, outer[2].z, outer[3].x, outer[3].y, outer[3].z, wireframe_p); } else { glNormal3f (normals[3].x, normals[3].y, normals[3].z); triangle (outer[1].x, outer[1].y, outer[1].z, outer[3].x, outer[3].y, outer[3].z, outer[2].x, outer[2].y, outer[2].z, wireframe_p); } } else { # define M01 0 # define M02 1 # define M03 2 # define M12 3 # define M13 4 # define M23 5 XYZ inner[M23+1]; XYZ corner[4]; inner[M01].x = (outer[0].x + outer[1].x) / 2.0; inner[M01].y = (outer[0].y + outer[1].y) / 2.0; inner[M01].z = (outer[0].z + outer[1].z) / 2.0; inner[M02].x = (outer[0].x + outer[2].x) / 2.0; inner[M02].y = (outer[0].y + outer[2].y) / 2.0; inner[M02].z = (outer[0].z + outer[2].z) / 2.0; inner[M03].x = (outer[0].x + outer[3].x) / 2.0; inner[M03].y = (outer[0].y + outer[3].y) / 2.0; inner[M03].z = (outer[0].z + outer[3].z) / 2.0; inner[M12].x = (outer[1].x + outer[2].x) / 2.0; inner[M12].y = (outer[1].y + outer[2].y) / 2.0; inner[M12].z = (outer[1].z + outer[2].z) / 2.0; inner[M13].x = (outer[1].x + outer[3].x) / 2.0; inner[M13].y = (outer[1].y + outer[3].y) / 2.0; inner[M13].z = (outer[1].z + outer[3].z) / 2.0; inner[M23].x = (outer[2].x + outer[3].x) / 2.0; inner[M23].y = (outer[2].y + outer[3].y) / 2.0; inner[M23].z = (outer[2].z + outer[3].z) / 2.0; countdown--; corner[0] = outer[0]; corner[1] = inner[M01]; corner[2] = inner[M02]; corner[3] = inner[M03]; four_tetras (gp, corner, normals, wireframe_p, countdown, which, countP); corner[0] = inner[M01]; corner[1] = outer[1]; corner[2] = inner[M12]; corner[3] = inner[M13]; four_tetras (gp, corner, normals, wireframe_p, countdown, which, countP); corner[0] = inner[M02]; corner[1] = inner[M12]; corner[2] = outer[2]; corner[3] = inner[M23]; four_tetras (gp, corner, normals, wireframe_p, countdown, which, countP); corner[0] = inner[M03]; corner[1] = inner[M13]; corner[2] = inner[M23]; corner[3] = outer[3]; four_tetras (gp, corner, normals, wireframe_p, countdown, which, countP); } } static void compile_gasket(ModeInfo *mi, int which) { Bool wireframe_p = MI_IS_WIREFRAME(mi); gasketstruct *gp = &gasket[MI_SCREEN(mi)]; int count = 0; XYZ vertex[5]; XYZ normal[4]; vertex[0].x = -1; vertex[0].y = -1; vertex[0].z = -1; vertex[1].x = 1; vertex[1].y = 1; vertex[1].z = -1; vertex[2].x = 1; vertex[2].y = -1; vertex[2].z = 1; vertex[3].x = -1; vertex[3].y = 1; vertex[3].z = 1; vertex[4].x = 0; vertex[4].y = 0; vertex[4].z = 0; /* center */ normal[0].x = 1; normal[0].y = -1; normal[0].z = -1; normal[1].x = -1; normal[1].y = 1; normal[1].z = -1; normal[2].x = -1; normal[2].y = -1; normal[2].z = 1; normal[3].x = 1; normal[3].y = 1; normal[3].z = 1; four_tetras (gp, vertex, normal, wireframe_p, (gp->current_depth < 0 ? -gp->current_depth : gp->current_depth), which, &count); mi->polygon_count += count; } static void draw(ModeInfo *mi) { Bool wireframe_p = MI_IS_WIREFRAME(mi); gasketstruct *gp = &gasket[MI_SCREEN(mi)]; static const GLfloat pos[] = {-4.0, 3.0, 10.0, 1.0}; static const GLfloat white[] = {1.0, 1.0, 1.0, 1.0}; GLfloat color0[] = {0.0, 0.0, 0.0, 1.0}; GLfloat color1[] = {0.0, 0.0, 0.0, 1.0}; GLfloat color2[] = {0.0, 0.0, 0.0, 1.0}; GLfloat color3[] = {0.0, 0.0, 0.0, 1.0}; glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); if (!wireframe_p) { glColor4fv (white); glLightfv(GL_LIGHT0, GL_POSITION, pos); color0[0] = gp->colors[gp->ccolor0].red / 65536.0; color0[1] = gp->colors[gp->ccolor0].green / 65536.0; color0[2] = gp->colors[gp->ccolor0].blue / 65536.0; color1[0] = gp->colors[gp->ccolor1].red / 65536.0; color1[1] = gp->colors[gp->ccolor1].green / 65536.0; color1[2] = gp->colors[gp->ccolor1].blue / 65536.0; color2[0] = gp->colors[gp->ccolor2].red / 65536.0; color2[1] = gp->colors[gp->ccolor2].green / 65536.0; color2[2] = gp->colors[gp->ccolor2].blue / 65536.0; color3[0] = gp->colors[gp->ccolor3].red / 65536.0; color3[1] = gp->colors[gp->ccolor3].green / 65536.0; color3[2] = gp->colors[gp->ccolor3].blue / 65536.0; gp->ccolor0++; gp->ccolor1++; gp->ccolor2++; gp->ccolor3++; if (gp->ccolor0 >= gp->ncolors) gp->ccolor0 = 0; if (gp->ccolor1 >= gp->ncolors) gp->ccolor1 = 0; if (gp->ccolor2 >= gp->ncolors) gp->ccolor2 = 0; if (gp->ccolor3 >= gp->ncolors) gp->ccolor3 = 0; glShadeModel(GL_SMOOTH); glEnable(GL_LIGHTING); glEnable(GL_LIGHT0); } glEnable(GL_DEPTH_TEST); glEnable(GL_NORMALIZE); glEnable(GL_CULL_FACE); glPushMatrix(); { double x, y, z; get_position (gp->rot, &x, &y, &z, !gp->button_down_p); glTranslatef((x - 0.5) * 10, (y - 0.5) * 10, (z - 0.5) * 20); gltrackball_rotate (gp->trackball); get_rotation (gp->rot, &x, &y, &z, !gp->button_down_p); glRotatef (x * 360, 1.0, 0.0, 0.0); glRotatef (y * 360, 0.0, 1.0, 0.0); glRotatef (z * 360, 0.0, 0.0, 1.0); } glScalef (4, 4, 4); glMaterialfv (GL_FRONT, GL_AMBIENT_AND_DIFFUSE, color0); glCallList(gp->gasket0); glMaterialfv (GL_FRONT, GL_AMBIENT_AND_DIFFUSE, color1); glCallList(gp->gasket1); glMaterialfv (GL_FRONT, GL_AMBIENT_AND_DIFFUSE, color2); glCallList(gp->gasket2); glMaterialfv (GL_FRONT, GL_AMBIENT_AND_DIFFUSE, color3); glCallList(gp->gasket3); glPopMatrix(); if (gp->tick++ >= speed) { gp->tick = 0; if (gp->current_depth >= max_depth) gp->current_depth = -max_depth; gp->current_depth++; /* We make four different lists so that each face of the tetrahedrons can have a different color (all triangles facing in the same direction have the same color, which is different from all triangles facing in other directions.) */ glDeleteLists (gp->gasket0, 1); glDeleteLists (gp->gasket1, 1); glDeleteLists (gp->gasket2, 1); glDeleteLists (gp->gasket3, 1); mi->polygon_count = 0; glNewList (gp->gasket0, GL_COMPILE); compile_gasket (mi, 0); glEndList(); glNewList (gp->gasket1, GL_COMPILE); compile_gasket (mi, 1); glEndList(); glNewList (gp->gasket2, GL_COMPILE); compile_gasket (mi, 2); glEndList(); glNewList (gp->gasket3, GL_COMPILE); compile_gasket (mi, 3); glEndList(); mi->recursion_depth = (gp->current_depth > 0 ? gp->current_depth : -gp->current_depth); } } /* new window size or exposure */ ENTRYPOINT void reshape_gasket(ModeInfo *mi, int width, int height) { GLfloat h = (GLfloat) height / (GLfloat) width; glViewport(0, 0, (GLint) width, (GLint) height); glMatrixMode(GL_PROJECTION); glLoadIdentity(); gluPerspective (30.0, 1/h, 1.0, 100.0); glMatrixMode(GL_MODELVIEW); glLoadIdentity(); gluLookAt( 0.0, 0.0, 30.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0); # ifdef HAVE_MOBILE /* Keep it the same relative size when rotated. */ { int o = (int) current_device_rotation(); if (o != 0 && o != 180 && o != -180) glScalef (1/h, 1/h, 1/h); } # endif glClear(GL_COLOR_BUFFER_BIT); } static void pinit(ModeInfo *mi) { gasketstruct *gp = &gasket[MI_SCREEN(mi)]; /* draw the gasket */ gp->gasket0 = glGenLists(1); gp->gasket1 = glGenLists(1); gp->gasket2 = glGenLists(1); gp->gasket3 = glGenLists(1); gp->current_depth = 1; /* start out at level 1, not 0 */ } ENTRYPOINT Bool gasket_handle_event (ModeInfo *mi, XEvent *event) { gasketstruct *gp = &gasket[MI_SCREEN(mi)]; if (gltrackball_event_handler (event, gp->trackball, MI_WIDTH (mi), MI_HEIGHT (mi), &gp->button_down_p)) return True; else if (event->xany.type == KeyPress) { KeySym keysym; char c = 0; XLookupString (&event->xkey, &c, 1, &keysym, 0); if (c == '+' || c == '=' || keysym == XK_Up || keysym == XK_Right || keysym == XK_Next) { gp->tick = speed; gp->current_depth += (gp->current_depth > 0 ? 1 : -1); gp->current_depth--; return True; } else if (c == '-' || c == '_' || keysym == XK_Down || keysym == XK_Left || keysym == XK_Prior) { gp->tick = speed; gp->current_depth -= (gp->current_depth > 0 ? 1 : -1); gp->current_depth--; return True; } else if (screenhack_event_helper (MI_DISPLAY(mi), MI_WINDOW(mi), event)) goto DEF; } else if (screenhack_event_helper (MI_DISPLAY(mi), MI_WINDOW(mi), event)) { DEF: gp->tick = speed; return True; } return False; } ENTRYPOINT void init_gasket(ModeInfo *mi) { int screen = MI_SCREEN(mi); gasketstruct *gp; if (gasket == NULL) { if ((gasket = (gasketstruct *) calloc(MI_NUM_SCREENS(mi), sizeof (gasketstruct))) == NULL) return; } gp = &gasket[screen]; gp->window = MI_WINDOW(mi); { double spin_speed = 1.0; double wander_speed = 0.03; gp->rot = make_rotator (do_spin ? spin_speed : 0, do_spin ? spin_speed : 0, do_spin ? spin_speed : 0, 1.0, do_wander ? wander_speed : 0, True); gp->trackball = gltrackball_init (True); } gp->ncolors = 255; gp->colors = (XColor *) calloc(gp->ncolors, sizeof(XColor)); make_smooth_colormap (0, 0, 0, gp->colors, &gp->ncolors, False, 0, False); gp->ccolor0 = 0; gp->ccolor1 = gp->ncolors * 0.25; gp->ccolor2 = gp->ncolors * 0.5; gp->ccolor3 = gp->ncolors * 0.75; gp->tick = 999999; if ((gp->glx_context = init_GL(mi)) != NULL) { reshape_gasket(mi, MI_WIDTH(mi), MI_HEIGHT(mi)); pinit(mi); } else { MI_CLEARWINDOW(mi); } } ENTRYPOINT void draw_gasket(ModeInfo * mi) { gasketstruct *gp = &gasket[MI_SCREEN(mi)]; Display *display = MI_DISPLAY(mi); Window window = MI_WINDOW(mi); if (!gp->glx_context) return; glDrawBuffer(GL_BACK); /* 0 = 4 polygons 1 = 16 polygons 2 = 64 polygons 3 = 256 polygons 4 = 1,024 polygons 5 = 4,096 polygons 6 = 16,384 polygons 7 = 65,536 polygons, 30 fps (3GHz Core 2 Duo, GeForce 8800 GS) 8 = 262,144 polygons, 12 fps 9 = 1,048,576 polygons, 4 fps 10 = 4,194,304 polygons, 1 fps 11 = 16,777,216 polygons, 0.3 fps 12 = 67,108,864 polygons, OOM! 13 = 268,435,456 polygons 14 = 1,073,741,824 polygons, 31 bits 15 = 4,294,967,296 polygons, 33 bits 16 = 17,179,869,184 polygons, 35 bits */ if (max_depth > 10) max_depth = 10; glXMakeCurrent(display, window, *(gp->glx_context)); draw(mi); if (mi->fps_p) do_fps (mi); glFinish(); glXSwapBuffers(display, window); } ENTRYPOINT void release_gasket(ModeInfo * mi) { if (gasket != NULL) { int screen; for (screen = 0; screen < MI_NUM_SCREENS(mi); screen++) { gasketstruct *gp = &gasket[screen]; if (gp->glx_context) { /* Display lists MUST be freed while their glXContext is current. */ glXMakeCurrent(MI_DISPLAY(mi), gp->window, *(gp->glx_context)); if (glIsList(gp->gasket0)) glDeleteLists(gp->gasket0, 1); if (glIsList(gp->gasket1)) glDeleteLists(gp->gasket1, 1); if (glIsList(gp->gasket2)) glDeleteLists(gp->gasket2, 1); if (glIsList(gp->gasket3)) glDeleteLists(gp->gasket3, 1); } } (void) free((void *) gasket); gasket = NULL; } FreeAllGL(mi); } XSCREENSAVER_MODULE_2 ("Sierpinski3D", sierpinski3d, gasket) /*********************************************************/ #endif xscreensaver-5.36/hacks/glx/gflux.c000644 000767 000024 00000055512 12710313204 017313 0ustar00jwzstaff000000 000000 /* -*- Mode: C; tab-width: 4 -*- emacs friendly */ /* gflux - creates a fluctuating 3D grid * requires OpenGL or MesaGL * * Copyright (c) Josiah Pease, 2000, 2003 * 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. * * Thanks go to all those who worked on... * MesaGL, OpenGL, UtahGLX, XFree86, gcc, vim, rxvt, the PNM (anymap) format * xscreensaver and the thousands of other tools, apps and daemons that make * linux usable * Personal thanks to Kevin Moss, Paul Sheahee and Jamie Zawinski * * some xscreensaver code lifted from superquadrics. Most other glx hacks * used as reference at some time. * * This hack and others can cause UtahGLX to crash my X server * wireframe looks good with software only rendering anyway * If anyone can work out why and supply a fix I'd love to hear from them * * Josiah Pease 21 July 2000 * * History * 10 June 2000 : wireframe rippling grid standalone written * 18 June 2000 : xscreensaver code added * 25 June 2000 : solid and light added * 04 July 2000 : majour bug hunt, xscreensaver code rewritten * 08 July 2000 : texture mapping, rotation and zoom added * 21 July 2000 : cleaned up code from bug hunts, manpage written * 24 November 2000 : fixed x co-ord calculation in solid - textured * 05 March 2001 : put back non pnmlib code with #ifdefs * 11 May 2002 : fixed image problems with large images */ #ifdef STANDALONE #define DEFAULTS "*delay: 20000\n" \ "*showFPS: False\n" \ "*mode: grab\n" \ "*useSHM: True \n" \ "*suppressRotationAnimation: True\n" \ # define refresh_gflux 0 # include "xlockmore.h" /* from the xscreensaver distribution */ #else /* !STANDALONE */ # include "xlock.h" /* from the xlockmore distribution */ #endif /* !STANDALONE */ #ifdef USE_GL /* whole file */ #ifdef HAVE_XMU # ifndef VMS # include #else /* VMS */ # include # endif /* VMS */ #endif #undef countof #define countof(x) (sizeof((x))/sizeof((*x))) #include #include #include #include "grab-ximage.h" #include "gltrackball.h" static enum {wire=0,solid,light,checker,grab} _draw; # define DEF_SQUARES "19" # define DEF_RESOLUTION "4" # define DEF_DRAW "2" # define DEF_FLAT "0" # define DEF_SPEED "0.05" # define DEF_ROTATIONX "0.01" # define DEF_ROTATIONY "0.0" # define DEF_ROTATIONZ "0.1" # define DEF_WAVES "3" # define DEF_WAVE_CHANGE "50" # define DEF_WAVE_HEIGHT "1.0" # define DEF_WAVE_FREQ "3.0" # define DEF_ZOOM "1.0" static int _squares; /* grid size */ static int _resolution; /* wireframe resolution */ static int _flat; static float _speed; static float _rotationx; static float _rotationy; static float _rotationz; static float _zoom; static int _waves; static int _waveChange; static float _waveHeight; static float _waveFreq; #define WIDTH 320 #define HEIGHT 240 static XrmOptionDescRec opts[] = { {"-squares", ".gflux.squares", XrmoptionSepArg, 0}, {"-resolution", ".gflux.resolution", XrmoptionSepArg, 0}, /* {"-draw", ".gflux.draw", XrmoptionSepArg, 0},*/ {"-mode", ".gflux.mode", XrmoptionSepArg, 0}, {"-wireframe", ".gflux.mode", XrmoptionNoArg, "wire"}, {"-flat", ".gflux.flat", XrmoptionSepArg, 0}, {"-speed", ".gflux.speed", XrmoptionSepArg, 0}, {"-rotationx", ".gflux.rotationx", XrmoptionSepArg, 0}, {"-rotationy", ".gflux.rotationy", XrmoptionSepArg, 0}, {"-rotationz", ".gflux.rotationz", XrmoptionSepArg, 0}, {"-waves", ".gflux.waves", XrmoptionSepArg, 0}, {"-waveChange", ".gflux.waveChange", XrmoptionSepArg, 0}, {"-waveHeight", ".gflux.waveHeight", XrmoptionSepArg, 0}, {"-waveFreq", ".gflux.waveFreq", XrmoptionSepArg, 0}, {"-zoom", ".gflux.zoom", XrmoptionSepArg, 0}, }; static argtype vars[] = { {&_squares, "squares", "Squares", DEF_SQUARES, t_Int}, {&_resolution, "resolution", "Resolution", DEF_RESOLUTION, t_Int}, /* {&_draw, "draw", "Draw", DEF_DRAW, t_Int},*/ {&_flat, "flat", "Flat", DEF_FLAT, t_Int}, {&_speed, "speed", "Speed", DEF_SPEED, t_Float}, {&_rotationx, "rotationx", "Rotationx", DEF_ROTATIONX, t_Float}, {&_rotationy, "rotationy", "Rotationy", DEF_ROTATIONY, t_Float}, {&_rotationz, "rotationz", "Rotationz", DEF_ROTATIONZ, t_Float}, {&_waves, "waves", "Waves", DEF_WAVES, t_Int}, {&_waveChange, "waveChange", "WaveChange", DEF_WAVE_CHANGE, t_Int}, {&_waveHeight, "waveHeight", "WaveHeight", DEF_WAVE_HEIGHT, t_Float}, {&_waveFreq, "waveFreq", "WaveFreq", DEF_WAVE_FREQ, t_Float}, {&_zoom, "zoom", "Zoom", DEF_ZOOM, t_Float}, }; static OptionStruct desc[] = { {"-squares num", "size of grid in squares (19)"}, {"-resolution num", "detail of lines making grid, wireframe only (4)"}, /* {"-draw num", "draw method to use: 0=wireframe 1=solid 2=lit (0)"},*/ {"-flat num", "shading method, not wireframe: 0=smooth 1=flat (0)"}, {"-speed num", "speed of waves (0.05)"}, {"-rotationx num", "speed of xrotation (0.01)"}, {"-rotationy num", "speed of yrotation (0.00)"}, {"-rotationz num", "speed of zrotation (0.10)"}, {"-waves num", "number of simultanious waves (3)"}, {"-waveChange num", "number of cyles for a wave to change (50)"}, {"-waveHeight num", "height of waves (1.0)"}, {"-waveFreq num", "max frequency of a wave (3.0)"}, {"-zoom num", "camera control (1.0)"}, }; ENTRYPOINT ModeSpecOpt gflux_opts = {countof(opts), opts, countof(vars), vars, desc}; #ifdef USE_MODULES ModStruct gflux_description = {"gflux", "init_gflux", "draw_gflux", "release_gflux", "draw_gflux", "init_gflux", NULL, &gflux_opts, 1000, 1, 2, 1, 4, 1.0, "", "GFlux: an OpenGL gflux", 0, NULL}; #endif /* structure for holding the gflux data */ typedef struct gfluxstruct { ModeInfo *modeinfo; int screen_width, screen_height; GLXContext *glx_context; Window window; XColor fg, bg; #define MAXWAVES 10 /* should be dynamic */ double wa[MAXWAVES]; double freq[MAXWAVES]; double dispy[MAXWAVES]; double dispx[MAXWAVES]; GLfloat colour[3]; GLuint texName; GLfloat tex_xscale; GLfloat tex_yscale; XRectangle img_geom; int img_width, img_height; int (*drawFunc)(struct gfluxstruct *); trackball_state *trackball; Bool button_down_p; double time; double anglex; double angley; double anglez; int counter; int newWave; Bool mipmap_p; Bool waiting_for_image_p; } gfluxstruct; static gfluxstruct *gfluxes = NULL; /* prototypes */ static void initLighting(void); static void grabTexture(gfluxstruct *); static void createTexture(gfluxstruct *); static int displaySolid(gfluxstruct *); /* drawFunc implementations */ static int displayLight(gfluxstruct *); static int displayTexture(gfluxstruct *); static int displayWire(gfluxstruct *); static void calcGrid(gfluxstruct *); static double getGrid(gfluxstruct *,double,double,double); /* as macro for speed */ /* could do with colour cycling here */ /* void genColour(double);*/ #define genColour(X) \ {\ gp->colour[0] = 0.0;\ gp->colour[1] = 0.5+0.5*(X);\ gp->colour[2] = 0.5-0.5*(X);\ } /* BEGINNING OF FUNCTIONS */ ENTRYPOINT Bool gflux_handle_event (ModeInfo *mi, XEvent *event) { gfluxstruct *gp = &gfluxes[MI_SCREEN(mi)]; if (gltrackball_event_handler (event, gp->trackball, MI_WIDTH (mi), MI_HEIGHT (mi), &gp->button_down_p)) return True; else if (screenhack_event_helper (MI_DISPLAY(mi), MI_WINDOW(mi), event)) { if (_draw == grab) { grabTexture(gp); return True; } } return False; } static void userRot(gfluxstruct *gp) { gltrackball_rotate (gp->trackball); } /* draw the gflux once */ ENTRYPOINT void draw_gflux(ModeInfo * mi) { gfluxstruct *gp = &gfluxes[MI_SCREEN(mi)]; Display *display = MI_DISPLAY(mi); Window window = MI_WINDOW(mi); if (!gp->glx_context) return; /* Just keep running before the texture has come in. */ /* if (gp->waiting_for_image_p) return; */ glXMakeCurrent(display, window, *(gp->glx_context)); calcGrid(gp); mi->polygon_count = gp->drawFunc(gp); if (mi->fps_p) do_fps (mi); glXSwapBuffers(display, window); } /* Standard reshape function */ ENTRYPOINT void reshape_gflux(ModeInfo *mi, int width, int height) { glViewport( 0, 0, width, height ); glMatrixMode(GL_PROJECTION); glLoadIdentity(); glFrustum(-_zoom,_zoom,-0.8*_zoom,0.8*_zoom,2,6); glTranslatef(0.0,0.0,-4.0); glMatrixMode(GL_MODELVIEW); glLoadIdentity(); # ifdef HAVE_MOBILE /* Keep it the same relative size when rotated. */ { GLfloat h = MI_HEIGHT(mi) / (GLfloat) MI_WIDTH(mi); int o = (int) current_device_rotation(); if (o != 0 && o != 180 && o != -180) glScalef (1/h, 1/h, 1/h); } # endif } /* main OpenGL initialization routine */ static void initializeGL(ModeInfo *mi, GLsizei width, GLsizei height) { gfluxstruct *gp = &gfluxes[MI_SCREEN(mi)]; reshape_gflux(mi, width, height); glViewport( 0, 0, width, height ); gp->tex_xscale = 1.0; /* maybe changed later */ gp->tex_yscale = 1.0; switch(_draw) { case solid : gp->drawFunc = (displaySolid); glEnable(GL_DEPTH_TEST); break; case light : gp->drawFunc = (displayLight); glEnable(GL_DEPTH_TEST); initLighting(); break; case checker : gp->drawFunc = (displayTexture); glEnable(GL_DEPTH_TEST); createTexture(gp); initLighting(); break; case grab : gp->drawFunc = (displayTexture); glEnable(GL_DEPTH_TEST); grabTexture(gp); initLighting(); break; case wire : default : gp->drawFunc = (displayWire); glDisable(GL_DEPTH_TEST); break; } if(_flat) glShadeModel(GL_FLAT); else glShadeModel(GL_SMOOTH); } /* xgflux initialization routine */ ENTRYPOINT void init_gflux(ModeInfo * mi) { int screen = MI_SCREEN(mi); gfluxstruct *gp; if (gfluxes == NULL) { if ((gfluxes = (gfluxstruct *) calloc(MI_NUM_SCREENS(mi), sizeof (gfluxstruct))) == NULL) return; } gp = &gfluxes[screen]; gp->trackball = gltrackball_init (True); gp->time = frand(1000.0); /* don't run two screens in lockstep */ { char *s = get_string_resource (mi->dpy, "mode", "Mode"); if (!s || !*s) _draw = grab; else if (!strcasecmp (s, "wire")) _draw = wire; else if (!strcasecmp (s, "solid")) _draw = solid; else if (!strcasecmp (s, "light")) _draw = light; else if (!strcasecmp (s, "checker")) _draw = checker; else if (!strcasecmp (s, "grab")) _draw = grab; else { fprintf (stderr, "%s: mode must be one of: wire, solid, " "light, checker, or grab; not \"%s\"\n", progname, s); exit (1); } } gp->modeinfo = mi; gp->window = MI_WINDOW(mi); if ((gp->glx_context = init_GL(mi)) != NULL) { reshape_gflux(mi, MI_WIDTH(mi), MI_HEIGHT(mi)); initializeGL(mi, MI_WIDTH(mi), MI_HEIGHT(mi)); } else { MI_CLEARWINDOW(mi); } } /* cleanup code */ ENTRYPOINT void release_gflux(ModeInfo * mi) { if (gfluxes != NULL) { free((void *) gfluxes); gfluxes = NULL; } FreeAllGL(mi); } static void createTexture(gfluxstruct *gp) { int size = 4; unsigned int data[] = { 0xFFFFFFFF, 0xAAAAAAAA, 0xFFFFFFFF, 0xAAAAAAAA, 0xAAAAAAAA, 0xFFFFFFFF, 0xAAAAAAAA, 0xFFFFFFFF, 0xFFFFFFFF, 0xAAAAAAAA, 0xFFFFFFFF, 0xAAAAAAAA, 0xAAAAAAAA, 0xFFFFFFFF, 0xAAAAAAAA, 0xFFFFFFFF }; gp->tex_xscale = size; gp->tex_yscale = size; glGenTextures (1, &gp->texName); glBindTexture (GL_TEXTURE_2D, gp->texName); glTexImage2D (GL_TEXTURE_2D, 0, 3, size, size, 0, GL_RGBA, GL_UNSIGNED_BYTE, data); glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT); } static void image_loaded_cb (const char *filename, XRectangle *geometry, int image_width, int image_height, int texture_width, int texture_height, void *closure) { gfluxstruct *gp = (gfluxstruct *) closure; gp->img_geom = *geometry; gp->tex_xscale = (GLfloat) image_width / texture_width; gp->tex_yscale = -(GLfloat) image_height / texture_height; gp->img_width = image_width; gp->img_height = image_height; glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, (gp->mipmap_p ? GL_LINEAR_MIPMAP_LINEAR : GL_LINEAR)); gp->waiting_for_image_p = False; } static void grabTexture(gfluxstruct *gp) { if (MI_IS_WIREFRAME(gp->modeinfo)) return; gp->waiting_for_image_p = True; gp->mipmap_p = True; load_texture_async (gp->modeinfo->xgwa.screen, gp->modeinfo->window, *gp->glx_context, 0, 0, gp->mipmap_p, gp->texName, image_loaded_cb, gp); } static void initLighting(void) { static const float ambientA[] = {0.0, 0.0, 0.0, 1.0}; static const float diffuseA[] = {1.0, 1.0, 1.0, 1.0}; static const float positionA[] = {5.0, 5.0, 15.0, 1.0}; static const float front_mat_shininess[] = {30.0}; static const float front_mat_specular[] = {0.5, 0.5, 0.5, 1.0}; static const float mat_diffuse[] = {0.5, 0.5, 0.5, 1.0}; glMaterialfv(GL_FRONT, GL_SHININESS, front_mat_shininess); glMaterialfv(GL_FRONT, GL_SPECULAR, front_mat_specular); glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, mat_diffuse); glLightfv(GL_LIGHT0, GL_AMBIENT, ambientA); glLightfv(GL_LIGHT0, GL_DIFFUSE, diffuseA); glLightfv(GL_LIGHT0, GL_POSITION, positionA); glEnable(GL_LIGHTING); glEnable(GL_LIGHT0); glLightModelf(GL_LIGHT_MODEL_TWO_SIDE,1); glEnable(GL_NORMALIZE); /* would it be faster ... */ glEnable(GL_COLOR_MATERIAL); glColorMaterial(GL_FRONT_AND_BACK,GL_AMBIENT_AND_DIFFUSE); } /************************************/ /* draw implementations */ /* somewhat inefficient since they */ /* all calculate previously */ /* calculated values again */ /* storing the values in an array */ /* is a posibility */ /************************************/ static int displayTexture(gfluxstruct *gp) { int polys = 0; double x,y,u,v; double z; double dx = 2.0/((double)_squares); double dy = 2.0/((double)_squares); double du = 2.0/((double)_squares); double dv = 2.0/((double)_squares); double xs = gp->tex_xscale; double ys = gp->tex_yscale; double minx, miny, maxx, maxy; double minu, minv; #if 0 minx = (GLfloat) gp->img_geom.x / gp->img_width; miny = (GLfloat) gp->img_geom.y / gp->img_height; maxx = ((GLfloat) (gp->img_geom.x + gp->img_geom.width) / gp->img_width); maxy = ((GLfloat) (gp->img_geom.y + gp->img_geom.height) / gp->img_height); minu = minx; minv = miny; minx = (minx * 2) - 1; miny = (miny * 2) - 1; maxx = (maxx * 2) - 1; maxy = (maxy * 2) - 1; #else minx = -1; miny = -1; maxx = 1; maxy = 1; minv = 0; minu = 0; #endif glMatrixMode (GL_TEXTURE); glLoadIdentity (); glTranslatef(-1,-1,0); glScalef(0.5,0.5,1); glMatrixMode (GL_MODELVIEW); glLoadIdentity(); userRot(gp); glRotatef(gp->anglex,1,0,0); glRotatef(gp->angley,0,1,0); glRotatef(gp->anglez,0,0,1); glScalef(1,1,(GLfloat)_waveHeight); glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT); glEnable(GL_TEXTURE_2D); clear_gl_error(); glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE); glBindTexture(GL_TEXTURE_2D, gp->texName); check_gl_error("texture binding"); glColor3f(0.5,0.5,0.5); for(x = minx, u = minu; x < maxx - 0.01; x += dx, u += du) { glBegin(GL_QUAD_STRIP); for (y = miny, v = minv; y <= maxy + 0.01; y += dy, v += dv) { z = getGrid(gp,x,y,gp->time); glTexCoord2f(u*xs,v*ys); glNormal3f( getGrid(gp,x+dx,y,gp->time)-getGrid(gp, x-dx,y,gp->time), getGrid(gp,x,y+dy,gp->time)-getGrid(gp, x,y-dy,gp->time), 1 ); glVertex3f(x,y,z); z = getGrid(gp,x+dx,y,gp->time); glTexCoord2f((u+du)*xs,v*ys); glNormal3f( getGrid(gp,x+dx+dx,y,gp->time)-getGrid(gp, x,y,gp->time), getGrid(gp,x+dx,y+dy,gp->time)-getGrid(gp, x+dx,y-dy,gp->time), 1 ); glVertex3f(x+dx,y,z); polys++; } glEnd(); } /* Draw a border around the grid. */ glColor3f(0.4, 0.4, 0.4); glDisable(GL_TEXTURE_2D); glEnable (GL_LINE_SMOOTH); glBegin(GL_LINE_LOOP); y = miny; for (x = minx; x <= maxx; x += dx) { glVertex3f (x, y, getGrid (gp, x, y, gp->time)); polys++; } x = maxx; for (y = miny; y <= maxy; y += dy) { glVertex3f (x, y, getGrid (gp, x, y, gp->time)); polys++; } y = maxy; for (x = maxx; x >= minx; x -= dx) { glVertex3f (x, y, getGrid (gp, x, y, gp->time)); polys++; } x = minx; for (y = maxy; y >= miny; y -= dy) { glVertex3f (x, y, getGrid (gp, x, y, gp->time)); polys++; } glEnd(); glEnable(GL_TEXTURE_2D); if (! gp->button_down_p) { gp->time -= _speed; gp->anglex -= _rotationx; gp->angley -= _rotationy; gp->anglez -= _rotationz; } return polys; } static int displaySolid(gfluxstruct *gp) { int polys = 0; double x,y; double z; double dx = 2.0/((double)_squares); double dy = 2.0/((double)_squares); glLoadIdentity(); glRotatef(gp->anglex,1,0,0); glRotatef(gp->angley,0,1,0); glRotatef(gp->anglez,0,0,1); userRot(gp); glScalef(1,1,(GLfloat)_waveHeight); glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT); for(x=-1;x<0.9999;x+=dx) { glBegin(GL_QUAD_STRIP); for(y=-1;y<=1;y+=dy) { z = getGrid(gp, x,y,gp->time); genColour(z); glColor3fv(gp->colour); glVertex3f(x,y,z); z = getGrid(gp, x+dx,y,gp->time); genColour(z); glColor3fv(gp->colour); glVertex3f(x+dx,y,z); polys++; } glEnd(); } if (! gp->button_down_p) { gp->time -= _speed; gp->anglex -= _rotationx; gp->angley -= _rotationy; gp->anglez -= _rotationz; } return polys; } static int displayLight(gfluxstruct *gp) { int polys = 0; double x,y; double z; double dx = 2.0/((double)_squares); double dy = 2.0/((double)_squares); glLoadIdentity(); glRotatef(gp->anglex,1,0,0); glRotatef(gp->angley,0,1,0); glRotatef(gp->anglez,0,0,1); userRot(gp); glScalef(1,1,(GLfloat)_waveHeight); glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT); for(x=-1;x<0.9999;x+=dx) { glBegin(GL_QUAD_STRIP); for(y=-1;y<=1;y+=dy) { z = getGrid(gp, x,y,gp->time); genColour(z); glColor3fv(gp->colour); glNormal3f( getGrid(gp, x+dx,y,gp->time)-getGrid(gp, x-dx,y,gp->time), getGrid(gp, x,y+dy,gp->time)-getGrid(gp, x,y-dy,gp->time), 1 ); glVertex3f(x,y,z); z = getGrid(gp, x+dx,y,gp->time); genColour(z); glColor3fv(gp->colour); glNormal3f( getGrid(gp, x+dx+dx,y,gp->time)-getGrid(gp, x,y,gp->time), getGrid(gp, x+dx,y+dy,gp->time)-getGrid(gp, x+dx,y-dy,gp->time), 1 ); glVertex3f(x+dx,y,z); polys++; } glEnd(); } if (! gp->button_down_p) { gp->time -= _speed; gp->anglex -= _rotationx; gp->angley -= _rotationy; gp->anglez -= _rotationz; } return polys; } static int displayWire(gfluxstruct *gp) { int polys = 0; double x,y; double z; double dx1 = 2.0/((double)(_squares*_resolution)) - 0.00001; double dy1 = 2.0/((double)(_squares*_resolution)) - 0.00001; double dx2 = 2.0/((double)_squares) - 0.00001; double dy2 = 2.0/((double)_squares) - 0.00001; glLoadIdentity(); glRotatef(gp->anglex,1,0,0); glRotatef(gp->angley,0,1,0); glRotatef(gp->anglez,0,0,1); userRot(gp); glScalef(1,1,(GLfloat)_waveHeight); glClear(GL_COLOR_BUFFER_BIT); for(x=-1;x<=1;x+=dx2) { glBegin(GL_LINE_STRIP); for(y=-1;y<=1;y+=dy1) { z = getGrid(gp, x,y,gp->time); genColour(z); glColor3fv(gp->colour); glVertex3f(x,y,z); polys++; } glEnd(); } for(y=-1;y<=1;y+=dy2) { glBegin(GL_LINE_STRIP); for(x=-1;x<=1;x+=dx1) { z = getGrid(gp, x,y,gp->time); genColour(z); glColor3fv(gp->colour); glVertex3f(x,y,z); polys++; } glEnd(); } if (! gp->button_down_p) { gp->time -= _speed; gp->anglex -= _rotationx; gp->angley -= _rotationy; gp->anglez -= _rotationz; } return polys; } /* generates new ripples */ static void calcGrid(gfluxstruct *gp) { double tmp; if (gp->button_down_p) return; tmp = 1.0/((double)_waveChange); if(!(gp->counter%_waveChange)) { gp->newWave = ((int)(gp->counter*tmp))%_waves; gp->dispx[gp->newWave] = -frand(1.0); gp->dispy[gp->newWave] = -frand(1.0); gp->freq[gp->newWave] = _waveFreq * frand(1.0); gp->wa[gp->newWave] = 0.0; } gp->counter++; gp->wa[gp->newWave] += tmp; gp->wa[(gp->newWave+1)%_waves] -= tmp; } /* returns a height for the grid given time and x,y space co-ords */ static double getGrid(gfluxstruct *gp, double x, double y, double a) { register int i; double retval=0.0; double tmp; tmp = 1.0/((float)_waves); for(i=0;i<_waves;i++) { retval += gp->wa[i] * tmp * sin( gp->freq[i] * ( (x+gp->dispx[i]) * (x+gp->dispx[i]) + (y+gp->dispy[i]) * (y+gp->dispy[i]) +a ) ); } return(retval); } XSCREENSAVER_MODULE ("GFlux", gflux) #endif xscreensaver-5.36/hacks/glx/stonerview.c000644 000767 000024 00000010471 12710313226 020372 0ustar00jwzstaff000000 000000 /* StonerView: An eccentric visual toy. Copyright 1998-2001 by Andrew Plotkin (erkyrath@eblong.com) For the latest version, source code, and links to more of my stuff, see: http://www.eblong.com/zarf/stonerview.html 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. */ /* Ported away from GLUT (so that it can do `-root' and work with xscreensaver) by Jamie Zawinski , 22-Jan-2001. Revamped to work in the xlockmore framework so that it will also work with the MacOS X port of xscreensaver by jwz, 21-Feb-2006. */ #define DEFAULTS "*delay: 20000 \n" \ "*showFPS: False \n" \ "*wireframe: False \n" # define refresh_stonerview 0 #undef countof #define countof(x) (sizeof((x))/sizeof((*x))) #include "xlockmore.h" #ifdef USE_GL /* whole file */ #include "stonerview.h" #include "gltrackball.h" #define DEF_TRANSPARENT "True" typedef struct { GLXContext *glx_context; stonerview_state *st; trackball_state *trackball; Bool button_down_p; } stonerview_configuration; static stonerview_configuration *bps = NULL; static Bool transparent_p; static XrmOptionDescRec opts[] = { { "-transparent", ".transparent", XrmoptionNoArg, "True" }, { "+transparent", ".transparent", XrmoptionNoArg, "False" }, }; static argtype vars[] = { {&transparent_p, "transparent", "Transparent", DEF_TRANSPARENT, t_Bool}, }; ENTRYPOINT ModeSpecOpt stonerview_opts = {countof(opts), opts, countof(vars), vars, NULL}; ENTRYPOINT void reshape_stonerview (ModeInfo *mi, int width, int height) { GLfloat h = (GLfloat) height / (GLfloat) width; glViewport(0, 0, (GLint) width, (GLint) height); glMatrixMode(GL_PROJECTION); glLoadIdentity(); glFrustum(-1.0, 1.0, -h, h, 5.0, 60.0); glMatrixMode(GL_MODELVIEW); glLoadIdentity(); glTranslatef(0.0, 0.0, -40.0); } ENTRYPOINT void init_stonerview (ModeInfo *mi) { stonerview_configuration *bp; if (!bps) { bps = (stonerview_configuration *) calloc (MI_NUM_SCREENS(mi), sizeof (stonerview_configuration)); if (!bps) { fprintf(stderr, "%s: out of memory\n", progname); exit(1); } } bp = &bps[MI_SCREEN(mi)]; bp->glx_context = init_GL(mi); bp->trackball = gltrackball_init (False); 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! */ } ENTRYPOINT void draw_stonerview (ModeInfo *mi) { stonerview_configuration *bp = &bps[MI_SCREEN(mi)]; glXMakeCurrent(MI_DISPLAY(mi), MI_WINDOW(mi), *(bp->glx_context)); glPushMatrix (); glRotatef( current_device_rotation(), 0, 0, 1); gltrackball_rotate (bp->trackball); # ifdef HAVE_MOBILE /* Keep it the same relative size when rotated. */ { GLfloat h = MI_HEIGHT(mi) / (GLfloat) MI_WIDTH(mi); int o = (int) current_device_rotation(); if (o != 0 && o != 180 && o != -180) glScalef (h, h, h); } # endif stonerview_win_draw(bp->st); if (! bp->button_down_p) stonerview_move_increment(bp->st); glPopMatrix (); mi->polygon_count = NUM_ELS; if (mi->fps_p) do_fps (mi); glFinish(); glXSwapBuffers(MI_DISPLAY (mi), MI_WINDOW(mi)); } ENTRYPOINT void release_stonerview (ModeInfo *mi) { if (bps) { int screen; for (screen = 0; screen < MI_NUM_SCREENS(mi); screen++) { stonerview_configuration *bp = &bps[screen]; if (bp->st) stonerview_win_release (bp->st); } free (bps); bps = 0; } FreeAllGL(mi); } ENTRYPOINT Bool stonerview_handle_event (ModeInfo *mi, XEvent *event) { stonerview_configuration *bp = &bps[MI_SCREEN(mi)]; if (gltrackball_event_handler (event, bp->trackball, MI_WIDTH (mi), MI_HEIGHT (mi), &bp->button_down_p)) return True; return False; } XSCREENSAVER_MODULE ("StonerView", stonerview) #endif /* USE_GL */ xscreensaver-5.36/hacks/glx/stonerview-move.c000644 000767 000024 00000010760 12701612217 021341 0ustar00jwzstaff000000 000000 /* StonerView: An eccentric visual toy. Copyright 1998-2001 by Andrew Plotkin (erkyrath@eblong.com) 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. */ #include #ifdef HAVE_CONFIG_H # include "config.h" #endif #include #include #include "yarandom.h" #include "stonerview.h" void stonerview_init_move(stonerview_state *st) { /*st->theta = new_osc_linear( new_osc_wrap(0, 36000, 25), new_osc_constant(2000));*/ st->theta = new_osc_linear(st, new_osc_velowrap(st, 0, 36000, new_osc_multiplex(st, new_osc_randphaser(st, 300, 600), new_osc_constant(st, 25), new_osc_constant(st, 75), new_osc_constant(st, 50), new_osc_constant(st, 100)) ), new_osc_multiplex(st, new_osc_buffer(st, new_osc_randphaser(st, 300, 600)), new_osc_buffer(st, new_osc_wrap(st, 0, 36000, 10)), new_osc_buffer(st, new_osc_wrap(st, 0, 36000, -8)), new_osc_wrap(st, 0, 36000, 4), new_osc_buffer(st, new_osc_bounce(st, -2000, 2000, 20)) ) ); st->rad = new_osc_buffer(st, new_osc_multiplex(st, new_osc_randphaser(st, 250, 500), new_osc_bounce(st, -1000, 1000, 10), new_osc_bounce(st, 200, 1000, -15), new_osc_bounce(st, 400, 1000, 10), new_osc_bounce(st, -1000, 1000, -20))); /*st->rad = new_osc_constant(st, 1000);*/ st->alti = new_osc_linear(st, new_osc_constant(st, -1000), new_osc_constant(st, 2000 / st->num_els)); /*st->alti = new_osc_multiplex( new_osc_buffer(st, new_osc_randphaser(60, 270)), new_osc_buffer(st, new_osc_bounce(-1000, 1000, 48)), new_osc_linear( new_osc_constant(-1000), new_osc_constant(2000 / st->num_els)), new_osc_buffer(st, new_osc_bounce(-1000, 1000, 27)), new_osc_linear( new_osc_constant(-1000), new_osc_constant(2000 / st->num_els)) );*/ /*st->color = new_osc_buffer(st, new_osc_randphaser(5, 35));*/ /*st->color = new_osc_buffer(st, new_osc_multiplex( new_osc_randphaser(25, 70), new_osc_wrap(0, 3600, 20), new_osc_wrap(0, 3600, 30), new_osc_wrap(0, 3600, -20), new_osc_wrap(0, 3600, 10)));*/ st->color = new_osc_multiplex(st, new_osc_buffer(st, new_osc_randphaser(st, 150, 300)), new_osc_buffer(st, new_osc_wrap(st, 0, 3600, 13)), new_osc_buffer(st, new_osc_wrap(st, 0, 3600, 32)), new_osc_buffer(st, new_osc_wrap(st, 0, 3600, 17)), new_osc_buffer(st, new_osc_wrap(st, 0, 3600, 7))); stonerview_move_increment(st); } /* Set up the list of polygon data for rendering. */ void stonerview_move_increment(stonerview_state *st) { int ix, val; /* double fval; */ /* double recipels = (1.0 / (double)st->num_els); */ double pt[2]; double ptrad, pttheta; for (ix=0; ixnum_els; ix++) { stonerview_elem_t *el = &st->elist[ix]; /* Grab r and theta... */ val = osc_get(st, st->theta, ix); pttheta = val * (0.01 * M_PI / 180.0); ptrad = (double)osc_get(st, st->rad, ix) * 0.001; /* And convert them to x,y coordinates. */ pt[0] = ptrad * cos(pttheta); pt[1] = ptrad * sin(pttheta); /* Set x,y,z. */ el->pos[0] = pt[0]; el->pos[1] = pt[1]; el->pos[2] = (double)osc_get(st, st->alti, ix) * 0.001; /* Set which way the square is rotated. This is fixed for now, although it would be trivial to make the squares spin as they revolve. */ el->vervec[0] = 0.11; el->vervec[1] = 0.0; /* Grab the color, and convert it to RGB values. Technically, we're converting an HSV value to RGB, where S and V are always 1. */ val = osc_get(st, st->color, ix); if (val < 1200) { el->col[0] = ((double)val / 1200.0); el->col[1] = 0; el->col[2] = (double)(1200 - val) / 1200.0; } else if (val < 2400) { el->col[0] = (double)(2400 - val) / 1200.0; el->col[1] = ((double)(val - 1200) / 1200.0); el->col[2] = 0; } else { el->col[0] = 0; el->col[1] = (double)(3600 - val) / 1200.0; el->col[2] = ((double)(val - 2400) / 1200.0); } el->col[3] = 1.0; } osc_increment(st); } xscreensaver-5.36/hacks/glx/stonerview-osc.c000644 000767 000024 00000020144 12701612217 021154 0ustar00jwzstaff000000 000000 /* StonerView: An eccentric visual toy. Copyright 1998-2001 by Andrew Plotkin (erkyrath@eblong.com) 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. */ #ifdef HAVE_CONFIG_H # include "config.h" #endif #include #include #include "yarandom.h" #include "stonerview.h" /* Return a random number between min and max, inclusive. */ static int rand_range(int min, int max) { int res; unsigned int diff = (max+1) - min; if (diff <= 1) return min; res = random() % diff; return min+res; } /* Create a new, blank osc_t. The caller must fill in the type data. */ static osc_t *create_osc(stonerview_state *st, int type) { osc_t *osc = (osc_t *)malloc(sizeof(osc_t)); if (!osc) return NULL; osc->type = type; osc->next = NULL; *st->osctail = osc; st->osctail = &(osc->next); return osc; } /* Creation functions for all the osc_t types. These are all pretty obvious in their construction. */ osc_t *new_osc_constant(stonerview_state *st, int val) { osc_t *osc = create_osc(st, otyp_Constant); if (!osc) return NULL; osc->u.oconstant.val = val; return osc; } osc_t *new_osc_bounce(stonerview_state *st, int min, int max, int step) { int diff; osc_t *osc = create_osc(st, otyp_Bounce); if (!osc) return NULL; osc->u.obounce.min = min; osc->u.obounce.max = max; osc->u.obounce.step = step; /* Pick a random initial value between min and max. */ if (step < 0) step = (-step); diff = (max-min) / step; osc->u.obounce.val = min + step * rand_range(0, diff-1); return osc; } osc_t *new_osc_wrap(stonerview_state *st, int min, int max, int step) { int diff; osc_t *osc = create_osc(st, otyp_Wrap); if (!osc) return NULL; osc->u.owrap.min = min; osc->u.owrap.max = max; osc->u.owrap.step = step; /* Pick a random initial value between min and max. */ if (step < 0) step = (-step); diff = (max-min) / step; osc->u.owrap.val = min + step * rand_range(0, diff-1); return osc; } osc_t *new_osc_velowrap(stonerview_state *st, int min, int max, osc_t *step) { osc_t *osc = create_osc(st, otyp_VeloWrap); if (!osc) return NULL; osc->u.ovelowrap.min = min; osc->u.ovelowrap.max = max; osc->u.ovelowrap.step = step; /* Pick a random initial value between min and max. */ osc->u.ovelowrap.val = rand_range(min, max); return osc; } osc_t *new_osc_multiplex(stonerview_state *st, osc_t *sel, osc_t *ox0, osc_t *ox1, osc_t *ox2, osc_t *ox3) { osc_t *osc = create_osc(st, otyp_Multiplex); if (!osc) return NULL; osc->u.omultiplex.sel = sel; osc->u.omultiplex.val[0] = ox0; osc->u.omultiplex.val[1] = ox1; osc->u.omultiplex.val[2] = ox2; osc->u.omultiplex.val[3] = ox3; return osc; } osc_t *new_osc_phaser(stonerview_state *st, int phaselen) { osc_t *osc = create_osc(st, otyp_Phaser); if (!osc) return NULL; osc->u.ophaser.phaselen = phaselen; osc->u.ophaser.count = 0; /* Pick a random phase to start in. */ osc->u.ophaser.curphase = rand_range(0, NUM_PHASES-1); return osc; } osc_t *new_osc_randphaser(stonerview_state *st, int minphaselen, int maxphaselen) { osc_t *osc = create_osc(st, otyp_RandPhaser); if (!osc) return NULL; osc->u.orandphaser.minphaselen = minphaselen; osc->u.orandphaser.maxphaselen = maxphaselen; osc->u.orandphaser.count = 0; /* Pick a random phaselen to start with. */ osc->u.orandphaser.curphaselen = rand_range(minphaselen, maxphaselen); /* Pick a random phase to start in. */ osc->u.orandphaser.curphase = rand_range(0, NUM_PHASES-1); return osc; } osc_t *new_osc_linear(stonerview_state *st, osc_t *base, osc_t *diff) { osc_t *osc = create_osc(st, otyp_Linear); if (!osc) return NULL; osc->u.olinear.base = base; osc->u.olinear.diff = diff; return osc; } osc_t *new_osc_buffer(stonerview_state *st, osc_t *val) { int ix; osc_t *osc = create_osc(st, otyp_Buffer); if (!osc) return NULL; osc->u.obuffer.val = val; osc->u.obuffer.firstel = st->num_els-1; /* The last N values are stored in a ring buffer, which we must initialize here. */ for (ix=0; ixnum_els; ix++) { osc->u.obuffer.el[ix] = osc_get(st, val, 0); } return osc; } /* Compute f(i,el) for the current i. */ int osc_get(stonerview_state *st, osc_t *osc, int el) { if (!osc) return 0; switch (osc->type) { case otyp_Constant: return osc->u.oconstant.val; case otyp_Bounce: return osc->u.obounce.val; case otyp_Wrap: return osc->u.owrap.val; case otyp_VeloWrap: return osc->u.ovelowrap.val; case otyp_Linear: return osc_get(st, osc->u.olinear.base, el) + el * osc_get(st, osc->u.olinear.diff, el); case otyp_Multiplex: { struct omultiplex_struct *ox = &(osc->u.omultiplex); int sel = osc_get(st, ox->sel, el); return osc_get(st, ox->val[sel % NUM_PHASES], el); } case otyp_Phaser: { struct ophaser_struct *ox = &(osc->u.ophaser); return ox->curphase; } case otyp_RandPhaser: { struct orandphaser_struct *ox = &(osc->u.orandphaser); return ox->curphase; } case otyp_Buffer: { struct obuffer_struct *ox = &(osc->u.obuffer); return ox->el[(ox->firstel + el) % st->num_els]; } default: return 0; } } /* Increment i. This affects all osc_t objects; we go down the linked list to get them all. */ void osc_increment(stonerview_state *st) { osc_t *osc; for (osc = st->oscroot; osc; osc = osc->next) { switch (osc->type) { case otyp_Bounce: { struct obounce_struct *ox = &(osc->u.obounce); ox->val += ox->step; if (ox->val < ox->min && ox->step < 0) { ox->step = -(ox->step); ox->val = ox->min + (ox->min - ox->val); } if (ox->val > ox->max && ox->step > 0) { ox->step = -(ox->step); ox->val = ox->max + (ox->max - ox->val); } break; } case otyp_Wrap: { struct owrap_struct *ox = &(osc->u.owrap); ox->val += ox->step; if (ox->val < ox->min && ox->step < 0) { ox->val += (ox->max - ox->min); } if (ox->val > ox->max && ox->step > 0) { ox->val -= (ox->max - ox->min); } break; } case otyp_VeloWrap: { struct ovelowrap_struct *ox = &(osc->u.ovelowrap); int diff = (ox->max - ox->min); ox->val += osc_get(st, ox->step, 0); while (ox->val < ox->min) ox->val += diff; while (ox->val > ox->max) ox->val -= diff; break; } case otyp_Phaser: { struct ophaser_struct *ox = &(osc->u.ophaser); ox->count++; if (ox->count >= ox->phaselen) { ox->count = 0; ox->curphase++; if (ox->curphase >= NUM_PHASES) ox->curphase = 0; } break; } case otyp_RandPhaser: { struct orandphaser_struct *ox = &(osc->u.orandphaser); ox->count++; if (ox->count >= ox->curphaselen) { ox->count = 0; ox->curphaselen = rand_range(ox->minphaselen, ox->maxphaselen); ox->curphase++; if (ox->curphase >= NUM_PHASES) ox->curphase = 0; } break; } case otyp_Buffer: { struct obuffer_struct *ox = &(osc->u.obuffer); ox->firstel--; if (ox->firstel < 0) ox->firstel += st->num_els; ox->el[ox->firstel] = osc_get(st, ox->val, 0); /* We can assume that ox->val has already been incremented, since it was created first. This is why new objects are put on the end of the linked list... yeah, it's gross. */ break; } default: break; } } } xscreensaver-5.36/hacks/glx/stonerview-view.c000644 000767 000024 00000007405 12717750407 021362 0ustar00jwzstaff000000 000000 /* StonerView: An eccentric visual toy. Copyright 1998-2001 by Andrew Plotkin (erkyrath@eblong.com) http://www.eblong.com/zarf/stonerview.html 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. */ /* Ported away from GLUT (so that it can do `-root' and work with xscreensaver) by Jamie Zawinski , 22-Jan-2001. */ #ifdef HAVE_CONFIG_H # include "config.h" #endif #ifdef HAVE_COCOA # include "jwxyz.h" #elif defined(HAVE_ANDROID) # include #else /* real Xlib */ # include # include #endif /* !HAVE_COCOA */ #ifdef HAVE_JWZGLES # include "jwzgles.h" #endif /* HAVE_JWZGLES */ #include #include "stonerview.h" static GLfloat view_rotx = -45.0, view_roty = 0.0, view_rotz = 15.0; static GLfloat view_scale = 4.0; stonerview_state * 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 = (stonerview_elem_t *) calloc (st->num_els, sizeof(*st->elist)); st->osctail = &st->oscroot; /* for trackball, two-sided lighting and no face culling */ glLightModeli(GL_LIGHT_MODEL_TWO_SIDE, GL_TRUE); glEnable(GL_CULL_FACE); glEnable(GL_LIGHTING); glEnable(GL_LIGHT0); glEnable(GL_DEPTH_TEST); glEnable(GL_NORMALIZE); glHint(GL_LINE_SMOOTH_HINT, GL_NICEST); glEnable(GL_LINE_SMOOTH); glEnable(GL_BLEND); if (st->transparent) glBlendFunc(GL_SRC_ALPHA,GL_ONE); return st; } /* callback: draw everything */ void stonerview_win_draw(stonerview_state *st) { int ix; static const GLfloat white[] = { 1.0, 1.0, 1.0, 1.0 }; static const GLfloat gray[] = { 0.6, 0.6, 0.6, 1.0 }; glDrawBuffer(GL_BACK); glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glPushMatrix(); glScalef(view_scale, view_scale, view_scale); glRotatef(view_rotx, 1.0, 0.0, 0.0); glRotatef(view_roty, 0.0, 1.0, 0.0); glRotatef(view_rotz, 0.0, 0.0, 1.0); glShadeModel(GL_FLAT); for (ix=0; ix < st->num_els; ix++) { stonerview_elem_t *el = &st->elist[ix]; glNormal3f(0.0, 0.0, 1.0); /* outline the square */ glMaterialfv(GL_FRONT_AND_BACK, GL_AMBIENT_AND_DIFFUSE, (st->wireframe ? white : gray)); glBegin(GL_LINE_LOOP); glVertex3f(el->pos[0]-el->vervec[0], el->pos[1]-el->vervec[1], el->pos[2]); glVertex3f(el->pos[0]+el->vervec[1], el->pos[1]-el->vervec[0], el->pos[2]); glVertex3f(el->pos[0]+el->vervec[0], el->pos[1]+el->vervec[1], el->pos[2]); glVertex3f(el->pos[0]-el->vervec[1], el->pos[1]+el->vervec[0], el->pos[2]); glEnd(); if (st->wireframe) continue; /* fill the square */ { GLfloat col[4]; col[0] = el->col[0]; col[1] = el->col[1]; col[2] = el->col[2]; col[3] = el->col[3]; glMaterialfv(GL_FRONT_AND_BACK, GL_AMBIENT_AND_DIFFUSE, col); } glBegin(GL_QUADS); glVertex3f(el->pos[0]-el->vervec[0], el->pos[1]-el->vervec[1], el->pos[2]); glVertex3f(el->pos[0]+el->vervec[1], el->pos[1]-el->vervec[0], el->pos[2]); glVertex3f(el->pos[0]+el->vervec[0], el->pos[1]+el->vervec[1], el->pos[2]); glVertex3f(el->pos[0]-el->vervec[1], el->pos[1]+el->vervec[0], el->pos[2]); glEnd(); } glPopMatrix(); } void stonerview_win_release(stonerview_state *st) { free (st->elist); /*free (st->oscroot); -- #### how do we free this? */ free (st); } xscreensaver-5.36/hacks/glx/starwars.c000664 000767 000024 00000071032 12710313055 020035 0ustar00jwzstaff000000 000000 /* starwars, Copyright (c) 1998-2015 Jamie Zawinski and * Claudio Matsuoka * * 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. * * Star Wars -- Phosphor meets a well-known scroller from a galaxy far, * far away. * * Feb 2000 Claudio Matsuoka First version. * Jan 2001 Jamie Zawinski Rewrote large sections to add the ability to * run a subprocess, customization of the font * size and other parameters, etc. * Feb 2001 jepler@inetnebr.com Added anti-aliased lines, and fade-to-black. * Feb 2005 Jamie Zawinski Added texture fonts. * * * For the fanboys: * * starwars -program 'cat starwars.txt' -columns 25 -no-wrap */ #ifdef HAVE_CONFIG_H # include "config.h" #endif /* HAVE_CONFIG_H */ #include #include #ifdef HAVE_UNISTD_H # include #endif #include "starwars.h" #define DEFAULTS "*delay: 40000 \n" \ "*showFPS: False \n" \ "*fpsTop: True \n" \ "*usePty: False \n" \ "*texFontCacheSize: 300\n" \ "*font: " DEF_FONT "\n" \ "*textLiteral: " DEF_TEXT "\n" \ "*program: xscreensaver-text --cols 0" /* don't wrap */ # define refresh_sws 0 # define sws_handle_event 0 #undef countof #define countof(x) (sizeof((x))/sizeof((*x))) #include "xlockmore.h" #include "textclient.h" #include "utf8wc.h" #ifdef USE_GL /* whole file */ /* Should be in */ # ifndef GL_TEXTURE_MAX_ANISOTROPY_EXT # define GL_TEXTURE_MAX_ANISOTROPY_EXT 0x84FE # endif # ifndef GL_MAX_TEXTURE_MAX_ANISOTROPY_EXT # define GL_MAX_TEXTURE_MAX_ANISOTROPY_EXT 0x84FF # endif #define DEF_LINES "125" #define DEF_STEPS "35" #define DEF_SPIN "0.03" #define DEF_SIZE "-1" #define DEF_COLUMNS "-1" #define DEF_LINE_WRAP "True" #define DEF_ALIGNMENT "Center" #define DEF_SMOOTH "True" #define DEF_THICK "True" #define DEF_FADE "True" #define DEF_TEXTURES "True" #define DEF_DEBUG "False" #define DEF_FONT "-*-utopia-bold-r-normal-*-*-360-*-*-*-*-*-*" #define TAB_WIDTH 8 #define MAX_THICK_LINES 25 #define FONT_WEIGHT 14 #ifndef HAVE_MOBILE # define KEEP_ASPECT /* Letterboxing looks dumb on iPhone. */ #endif #include "texfont.h" #include "glutstroke.h" #include "glut_roman.h" #define GLUT_FONT (&glutStrokeRoman) typedef struct { Display *dpy; GLXContext *glx_context; GLuint text_list, star_list; texture_font_data *texfont; text_data *tc; char *buf; int buf_size; int buf_tail; char **lines; int *line_widths; int total_lines; double star_theta; double char_width; double line_height; double descent; double font_scale; double intra_line_scroll; int line_pixel_width; /* in font units (for wrapping text) */ int line_pixel_height; /* in screen units (for computing line thickness) */ GLfloat line_thickness; } sws_configuration; static sws_configuration *scs = NULL; static int max_lines; static int scroll_steps; static float star_spin; static float font_size; static int target_columns; static int wrap_p; static int smooth_p; static int thick_p; static int fade_p; static int textures_p; static int debug_p; static char *alignment_str; static int alignment; static XrmOptionDescRec opts[] = { {"-lines", ".lines", XrmoptionSepArg, 0 }, {"-steps", ".steps", XrmoptionSepArg, 0 }, {"-spin", ".spin", XrmoptionSepArg, 0 }, {"-size", ".size", XrmoptionSepArg, 0 }, {"-columns", ".columns", XrmoptionSepArg, 0 }, /*{"-font", ".font", XrmoptionSepArg, 0 },*/ {"-fade", ".fade", XrmoptionNoArg, "True" }, {"-no-fade", ".fade", XrmoptionNoArg, "False" }, {"-textures", ".textures", XrmoptionNoArg, "True" }, {"-smooth", ".smooth", XrmoptionNoArg, "True" }, {"-no-smooth", ".smooth", XrmoptionNoArg, "False" }, {"-thick", ".thick", XrmoptionNoArg, "True" }, {"-no-thick", ".thick", XrmoptionNoArg, "False" }, {"-no-textures", ".textures", XrmoptionNoArg, "False" }, {"-wrap", ".lineWrap", XrmoptionNoArg, "True" }, {"-no-wrap", ".lineWrap", XrmoptionNoArg, "False" }, {"-nowrap", ".lineWrap", XrmoptionNoArg, "False" }, {"-alignment", ".alignment", XrmoptionSepArg, 0 }, {"-left", ".alignment", XrmoptionNoArg, "Left" }, {"-right", ".alignment", XrmoptionNoArg, "Right" }, {"-center", ".alignment", XrmoptionNoArg, "Center" }, {"-debug", ".debug", XrmoptionNoArg, "True" }, }; static argtype vars[] = { {&max_lines, "lines", "Integer", DEF_LINES, t_Int}, {&scroll_steps, "steps", "Integer", DEF_STEPS, t_Int}, {&star_spin, "spin", "Float", DEF_SPIN, t_Float}, {&font_size, "size", "Float", DEF_SIZE, t_Float}, {&target_columns, "columns", "Integer", DEF_COLUMNS, t_Int}, {&wrap_p, "lineWrap", "Boolean", DEF_LINE_WRAP, t_Bool}, {&alignment_str, "alignment", "Alignment", DEF_ALIGNMENT, t_String}, {&smooth_p, "smooth", "Boolean", DEF_SMOOTH, t_Bool}, {&thick_p, "thick", "Boolean", DEF_THICK, t_Bool}, {&fade_p, "fade", "Boolean", DEF_FADE, t_Bool}, {&textures_p, "textures", "Boolean", DEF_TEXTURES, t_Bool}, {&debug_p, "debug", "Boolean", DEF_DEBUG, t_Bool}, }; ENTRYPOINT ModeSpecOpt sws_opts = {countof(opts), opts, countof(vars), vars, NULL}; /* Tabs are bad, mmmkay? */ static char * untabify (const char *string) { const char *ostring = string; char *result = (char *) malloc ((strlen(string) * 8) + 1); char *out = result; int col = 0; while (*string) { if (*string == '\t') { do { col++; *out++ = ' '; } while (col % TAB_WIDTH); string++; } else if (*string == '\r' || *string == '\n') { *out++ = *string++; col = 0; } else if (*string == '\010') /* backspace */ { if (string > ostring) out--, string++; } else { *out++ = *string++; col++; } } *out = 0; return result; } static void strip (char *s, Bool leading, Bool trailing) { int L = strlen(s); if (trailing) while (L > 0 && (s[L-1] == ' ' || s[L-1] == '\t')) s[L--] = 0; if (leading) { char *s2 = s; while (*s2 == ' ' || *s2 == '\t') s2++; if (s == s2) return; while (*s2) *s++ = *s2++; *s = 0; } } static int sw_string_width (sws_configuration *sc, const char *s) { if (textures_p) { XCharStruct e; texture_string_metrics (sc->texfont, s, &e, 0, 0); return e.width; } else return glutStrokeLength (GLUT_FONT, (unsigned char *) s); } static int sw_string_width2 (sws_configuration *sc, const char *s, size_t size) { char *s2 = (char *) malloc (size + 1); int result; strncpy (s2, s, size); s2[size] = 0; result = sw_string_width (sc, s2); free (s2); return result; } /* Populates the sc->lines list with as many lines as possible. */ static void get_more_lines (sws_configuration *sc) { /* wrap anyway, if it's absurdly long. */ int wrap_pix = (wrap_p ? sc->line_pixel_width : 10000); char *s = sc->buf; int target = sc->buf_size - sc->buf_tail - 2; /* Fill as much as we can into sc->buf. */ while (target > 0) { int c = textclient_getc (sc->tc); if (c <= 0) break; sc->buf[sc->buf_tail++] = (char) c; sc->buf[sc->buf_tail] = 0; target--; } while (sc->total_lines < max_lines) { char *next_s = s; unsigned counter = 0; /* OS X is really slow to calcuate the bounds for a line of text, so skip ahead a bit. Really though, the right thing to do is probably to wrap CTLineCreateTruncatedLine, one way or another. */ for (;;) { if (next_s >= sc->buf + sc->buf_tail) break; if (!counter) { if (s > sc->buf && sw_string_width2 (sc, sc->buf, next_s - sc->buf) >= wrap_pix) break; counter = 12; /* <-- Adjust to taste. */ s = next_s; } if (*next_s == '\r' || *next_s == '\n') break; --counter; ++next_s; } for (;;) { if (s >= sc->buf + sc->buf_tail) /* Reached end of buffer before end of line. Bail. */ return; /* When checking pixel width, always measure the line from the beginning, or else multi-byte UTF-8 characters, particularly combining diacriticals, aren't measured right. */ if (*s == '\r' || *s == '\n' || (s > sc->buf && sw_string_width2 (sc, sc->buf, s - sc->buf) >= wrap_pix)) { int L = s - sc->buf; if (*s == '\r' || *s == '\n') { if (*s == '\r' && s[1] == '\n') /* swallow CRLF too */ *s++ = 0; *s++ = 0; } else { /* We wrapped -- try to back up to the previous word boundary. */ char *s2 = s; int n = 0; while (s2 > sc->buf && *s2 != ' ' && *s2 != '\t') s2--, n++; if (s2 > sc->buf) { s = s2; *s++ = 0; L = s - sc->buf; } } sc->lines[sc->total_lines] = (char *) malloc (L+1); memcpy (sc->lines[sc->total_lines], sc->buf, L); sc->lines[sc->total_lines][L] = 0; if (!textures_p) { /* The GLUT font only has ASCII characters. */ char *s1 = utf8_to_latin1 (sc->lines[sc->total_lines], True); free (sc->lines[sc->total_lines]); sc->lines[sc->total_lines] = s1; } { char *t = sc->lines[sc->total_lines]; char *ut = untabify (t); strip (ut, (alignment == 0), 1); /* if centering, strip leading whitespace too */ sc->lines[sc->total_lines] = ut; free (t); } sc->line_widths[sc->total_lines] = sw_string_width(sc, sc->lines[sc->total_lines]); sc->total_lines++; if (sc->buf_tail > (s - sc->buf)) { int i = sc->buf_tail - (s - sc->buf); memmove (sc->buf, s, i); sc->buf_tail = i; sc->buf[sc->buf_tail] = 0; } else { sc->buf_tail = 0; } sc->buf[sc->buf_tail] = 0; s = sc->buf; break; } else { s++; } } } } static void draw_string (sws_configuration *sc, GLfloat x, GLfloat y, const char *s) { const char *os = s; if (!s || !*s) return; glPushMatrix (); glTranslatef (x, y, 0); if (textures_p) print_texture_string (sc->texfont, s); else while (*s) glutStrokeCharacter (GLUT_FONT, *s++); glPopMatrix (); if (debug_p) { GLfloat h = sc->line_height / sc->font_scale; char **chars = utf8_split (os, 0); int i, w = 0; char *s2 = (char *) malloc (strlen(s) + 1); *s2 = 0; if (textures_p) glDisable (GL_TEXTURE_2D); glLineWidth (1); glColor3f (0.2, 0.2, 0.5); glBegin (GL_LINES); for (i = 0; chars[i]; i++) { glVertex3f (x + w, y - sc->descent, 0); /* char left */ glVertex3f (x + w, y - sc->descent + h, 0); strcat (s2, chars[i]); w = sw_string_width (sc, s2); free (chars[i]); } glVertex3f (x + w, y - sc->descent, 0); /* char right */ glVertex3f (x + w, y - sc->descent + h, 0); glVertex3f (x, y - sc->descent + h, 0); /* ascent */ glVertex3f (x + w, y - sc->descent + h, 0); glVertex3f (x - sc->char_width, y, 0); /* baseline */ glVertex3f (x + sc->char_width + w, y, 0); glVertex3f (x, y - sc->descent, 0); /* descent */ glVertex3f (x + w, y - sc->descent, 0); glEnd(); free (s2); free (chars); if (textures_p) glEnable (GL_TEXTURE_2D); } } static void grid (double width, double height, double xspacing, double yspacing, double z) { double x, y; for (y = 0; y <= height/2; y += yspacing) { glBegin(GL_LINES); glVertex3f(-width/2, y, z); glVertex3f( width/2, y, z); glVertex3f(-width/2, -y, z); glVertex3f( width/2, -y, z); glEnd(); } for (x = 0; x <= width/2; x += xspacing) { glBegin(GL_LINES); glVertex3f( x, -height/2, z); glVertex3f( x, height/2, z); glVertex3f(-x, -height/2, z); glVertex3f(-x, height/2, z); glEnd(); } glBegin(GL_LINES); glVertex3f(-width, 0, z); glVertex3f( width, 0, z); glVertex3f(0, -height, z); glVertex3f(0, height, z); glEnd(); } static void box (double width, double height, double depth) { glBegin(GL_LINE_LOOP); glVertex3f(-width/2, -height/2, -depth/2); glVertex3f(-width/2, height/2, -depth/2); glVertex3f( width/2, height/2, -depth/2); glVertex3f( width/2, -height/2, -depth/2); glEnd(); glBegin(GL_LINE_LOOP); glVertex3f(-width/2, -height/2, depth/2); glVertex3f(-width/2, height/2, depth/2); glVertex3f( width/2, height/2, depth/2); glVertex3f( width/2, -height/2, depth/2); glEnd(); glBegin(GL_LINE_LOOP); glVertex3f(-width/2, -height/2, -depth/2); glVertex3f(-width/2, -height/2, depth/2); glVertex3f(-width/2, height/2, depth/2); glVertex3f(-width/2, height/2, -depth/2); glEnd(); glBegin(GL_LINE_LOOP); glVertex3f( width/2, -height/2, -depth/2); glVertex3f( width/2, -height/2, depth/2); glVertex3f( width/2, height/2, depth/2); glVertex3f( width/2, height/2, -depth/2); glEnd(); glBegin(GL_LINES); glVertex3f(-width/2, height/2, depth/2); glVertex3f(-width/2, -height/2, -depth/2); glVertex3f( width/2, height/2, depth/2); glVertex3f( width/2, -height/2, -depth/2); glVertex3f(-width/2, -height/2, depth/2); glVertex3f(-width/2, height/2, -depth/2); glVertex3f( width/2, -height/2, depth/2); glVertex3f( width/2, height/2, -depth/2); glEnd(); } /* Construct stars (number of stars is dependent on size of screen) */ static void init_stars (ModeInfo *mi, int width, int height) { sws_configuration *sc = &scs[MI_SCREEN(mi)]; int i, j; int size = (width > height ? width : height); int nstars = size * size / 320; int max_size = 3; GLfloat inc = 0.5; int steps = max_size / inc; glDeleteLists (sc->star_list, 1); sc->star_list = glGenLists (1); glNewList (sc->star_list, GL_COMPILE); glEnable(GL_POINT_SMOOTH); for (j = 1; j <= steps; j++) { glPointSize(inc * j); glBegin (GL_POINTS); for (i = 0; i < nstars / steps; i++) { glColor3f (0.6 + frand(0.3), 0.6 + frand(0.3), 0.6 + frand(0.3)); glVertex2f (2 * size * (0.5 - frand(1.0)), 2 * size * (0.5 - frand(1.0))); } glEnd (); } glEndList (); } /* Window management, etc */ ENTRYPOINT void reshape_sws (ModeInfo *mi, int width, int height) { sws_configuration *sc = &scs[MI_SCREEN(mi)]; /* Set up matrices for perspective text display */ { GLfloat desired_aspect = (GLfloat) 3/4; int w = mi->xgwa.width; int h = mi->xgwa.height; int yoff = 0; GLfloat rot = current_device_rotation(); #ifdef KEEP_ASPECT { int h2 = w * desired_aspect; yoff = (h - h2) / 2; /* Wide window: letterbox at top and bottom. */ if (yoff < 0) yoff = 0; /* Tall window: clip off the top. */ h = h2; } #endif glViewport (0, yoff, w, h); glMatrixMode (GL_PROJECTION); glLoadIdentity(); glMatrixMode (GL_MODELVIEW); glLoadIdentity (); gluPerspective (80.0, 1/desired_aspect, 1000, 55000); gluLookAt (0.0, 0.0, 4600.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0); /* Horrible kludge to prevent the text from materializing already on screen on iPhone in landscape mode. */ if ((rot > 45 && rot < 135) || (rot < -45 && rot > -135)) { GLfloat s = 1.1; glScalef (s, s, s); } glRotatef (-60.0, 1.0, 0.0, 0.0); #if 0 glRotatef (60.0, 1.0, 0.0, 0.0); glTranslatef (260, 3200, 0); glScalef (1.85, 1.85, 1); #endif /* The above gives us an arena where the bottom edge of the screen is represented by the line (-2100,-3140,0) - ( 2100,-3140,0). */ /* Now let's move the origin to the front of the screen. */ glTranslatef (0.0, -3140, 0.0); /* And then let's scale so that the bottom of the screen is 1.0 wide. */ glScalef (4200, 4200, 4200); } /* Compute the height in pixels of the line at the bottom of the screen. */ { GLdouble mm[17], pm[17]; GLint vp[5]; GLdouble x = 0.5, y1 = 0, z = 0; GLdouble y2 = sc->line_height; GLdouble wx=-1, wy1=-1, wy2=-1, wz=-1; glGetDoublev (GL_MODELVIEW_MATRIX, mm); glGetDoublev (GL_PROJECTION_MATRIX, pm); glGetIntegerv (GL_VIEWPORT, vp); gluProject (x, y1, z, mm, pm, vp, &wx, &wy1, &wz); gluProject (x, y2, z, mm, pm, vp, &wx, &wy2, &wz); sc->line_pixel_height = (wy2 - wy1); glLineWidth (1); } /* Compute the best looking line thickness for the bottom line. */ if (!thick_p) sc->line_thickness = 1.0; else sc->line_thickness = (GLfloat) sc->line_pixel_height / FONT_WEIGHT; if (sc->line_thickness < 1.2) sc->line_thickness = 1.0; } static void gl_init (ModeInfo *mi) { sws_configuration *sc = &scs[MI_SCREEN(mi)]; glDisable (GL_LIGHTING); glDisable (GL_DEPTH_TEST); if (smooth_p) { glEnable (GL_LINE_SMOOTH); glHint (GL_LINE_SMOOTH_HINT, GL_NICEST); glBlendFunc (GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); glEnable (GL_BLEND); } sc->text_list = glGenLists (1); glNewList (sc->text_list, GL_COMPILE); glEndList (); sc->star_list = glGenLists (1); glNewList (sc->star_list, GL_COMPILE); glEndList (); sc->line_thickness = 1.0; } ENTRYPOINT void init_sws (ModeInfo *mi) { double font_height; sws_configuration *sc = 0; if (!scs) { scs = (sws_configuration *) calloc (MI_NUM_SCREENS(mi), sizeof (sws_configuration)); if (!scs) { fprintf(stderr, "%s: out of memory\n", progname); exit(1); } } sc = &scs[MI_SCREEN(mi)]; sc->dpy = MI_DISPLAY(mi); sc = &scs[MI_SCREEN(mi)]; /* Unchecked malloc. :( */ sc->lines = (char **) calloc (max_lines+1, sizeof(char *)); sc->line_widths = (int *) calloc (max_lines+1, sizeof(int)); if ((sc->glx_context = init_GL(mi)) != NULL) { gl_init(mi); reshape_sws (mi, MI_WIDTH(mi), MI_HEIGHT(mi)); clear_gl_error(); /* WTF? sometimes "invalid op" from glViewport! */ init_stars (mi, MI_WIDTH(mi), MI_HEIGHT(mi)); } if (textures_p) { XCharStruct e; int cw, ascent, descent; sc->texfont = load_texture_font (MI_DISPLAY(mi), "font"); texture_string_metrics (sc->texfont, "n", &e, &ascent, &descent); cw = e.width; sc->char_width = cw; font_height = ascent + descent; sc->descent = descent; glEnable(GL_ALPHA_TEST); glEnable (GL_TEXTURE_2D); check_gl_error ("loading font"); /* "Anistropic filtering helps for quadrilateral-angled textures. A sharper image is accomplished by interpolating and filtering multiple samples from one or more mipmaps to better approximate very distorted textures. This is the next level of filtering after trilinear filtering." */ if (smooth_p && strstr ((char *) glGetString(GL_EXTENSIONS), "GL_EXT_texture_filter_anisotropic")) { GLfloat anisotropic = 0.0; glGetFloatv (GL_MAX_TEXTURE_MAX_ANISOTROPY_EXT, &anisotropic); if (anisotropic >= 1.0) glTexParameterf (GL_TEXTURE_2D, GL_TEXTURE_MAX_ANISOTROPY_EXT, anisotropic); } } else { font_height = GLUT_FONT->top - GLUT_FONT->bottom; sc->char_width = glutStrokeWidth (GLUT_FONT, 'z'); /* 'n' seems wide */ sc->descent = 0; } sc->font_scale = 1.0 / sc->char_width; /* We consider a font that consumes 80 columns to be "18 points". If neither -size nor -columns was specified, default to 60 columns (which is 24 points.) If both were specified, -columns has priority. */ { int base_col = 80; int base_size = 18; if (target_columns <= 0 && font_size <= 0) target_columns = 60; if (target_columns > 0) font_size = base_size * (base_col / (double) target_columns); else if (font_size > 0) target_columns = base_col * (base_size / (double) font_size); } sc->line_pixel_width = target_columns * sc->char_width; sc->font_scale /= target_columns; sc->line_height = font_height * sc->font_scale; /* Buffer only a few lines of text. If the buffer is too big, there's a significant delay between when the program launches and when the text appears, which can be irritating for time-sensitive output (clock, current music, etc.) I'd like to buffer only 2 lines, but we need to assume that we could get a whole line of N-byte Unicrud, and if we fill the buffer before hitting the end of the line, we stall. */ sc->buf_size = target_columns * 2 * 4; if (sc->buf_size < 80) sc->buf_size = 80; sc->buf = (char *) calloc (1, sc->buf_size); sc->total_lines = max_lines-1; if (random() & 1) star_spin = -star_spin; if (!alignment_str || !*alignment_str || !strcasecmp(alignment_str, "left")) alignment = -1; else if (!strcasecmp(alignment_str, "center") || !strcasecmp(alignment_str, "middle")) alignment = 0; else if (!strcasecmp(alignment_str, "right")) alignment = 1; else { fprintf (stderr, "%s: alignment must be left, center, or right, not \"%s\"\n", progname, alignment_str); exit (1); } sc->tc = textclient_open (sc->dpy); /* one more reshape, after line_height has been computed */ reshape_sws (mi, MI_WIDTH(mi), MI_HEIGHT(mi)); } static void draw_stars (ModeInfo *mi) { sws_configuration *sc = &scs[MI_SCREEN(mi)]; glMatrixMode (GL_PROJECTION); glPushMatrix (); { glLoadIdentity (); glMatrixMode (GL_MODELVIEW); glPushMatrix (); { glLoadIdentity (); glOrtho (-0.5 * MI_WIDTH(mi), 0.5 * MI_WIDTH(mi), -0.5 * MI_HEIGHT(mi), 0.5 * MI_HEIGHT(mi), -100.0, 100.0); glRotatef (sc->star_theta, 0.0, 0.0, 1.0); if (textures_p) glDisable (GL_TEXTURE_2D); glCallList (sc->star_list); if (textures_p) glEnable (GL_TEXTURE_2D); } glPopMatrix (); } glMatrixMode (GL_PROJECTION); glPopMatrix (); } ENTRYPOINT void draw_sws (ModeInfo *mi) { sws_configuration *sc = &scs[MI_SCREEN(mi)]; /* XtAppContext app = XtDisplayToApplicationContext (sc->dpy);*/ Display *dpy = MI_DISPLAY(mi); Window window = MI_WINDOW(mi); int i; if (!sc->glx_context) return; glDrawBuffer (GL_BACK); glXMakeCurrent (dpy, window, *(sc->glx_context)); glClear (GL_COLOR_BUFFER_BIT); draw_stars (mi); glMatrixMode (GL_MODELVIEW); glPushMatrix (); # ifdef HAVE_MOBILE /* Need to do this every time to get device rotation right */ reshape_sws (mi, MI_WIDTH(mi), MI_HEIGHT(mi)); # endif if (debug_p) { int i; glPushMatrix (); if (textures_p) glDisable (GL_TEXTURE_2D); glLineWidth (1); glTranslatef (0,-1, 0); glColor3f(1, 0, 0); /* Red line is where text appears */ glPushMatrix(); glTranslatef(0, -0.028, 0); glLineWidth (4); glBegin(GL_LINES); glVertex3f(-0.5, 1, 0); glVertex3f( 0.5, 1, 0); glVertex3f(-0.5, -1, 0); glVertex3f( 0.5, -1, 0); glEnd(); glLineWidth (1); glPopMatrix(); glColor3f (0.2, 0.2, 0.2); for (i = 0; i < 16; i++) { box (1, 1, 1); grid (1, 1, sc->char_width * sc->font_scale, sc->line_height, 0); glTranslatef(0, 1, 0); } if (textures_p) glEnable (GL_TEXTURE_2D); glPopMatrix (); check_gl_error ("debug render"); } /* Scroll to current position */ glTranslatef (0.0, sc->intra_line_scroll, 0.0); glColor3f (1.0, 1.0, 0.4); mi->polygon_count = 0; glPushMatrix (); glScalef (sc->font_scale, sc->font_scale, sc->font_scale); for (i = 0; i < sc->total_lines; i++) { double fade = (fade_p ? 1.0 * i / sc->total_lines : 1.0); int offscreen_lines = 2; double x = -0.5; double y = ((sc->total_lines - (i + offscreen_lines) - 1) * sc->line_height); double xoff = 0; char *line = sc->lines[i]; if (debug_p) { double xx = x * 1.4; /* a little more to the left */ char n[20]; sprintf(n, "%d:", i); glColor3f (1.0, 1.0, 1.0); draw_string (sc, xx / sc->font_scale, y / sc->font_scale, n); } if (!line || !*line) continue; if (sc->line_thickness != 1 && !textures_p) { int max_thick_lines = MAX_THICK_LINES; GLfloat thinnest_line = 1.0; GLfloat thickest_line = sc->line_thickness; GLfloat range = thickest_line - thinnest_line; GLfloat thickness; int j = sc->total_lines - i - 1; if (j > max_thick_lines) thickness = thinnest_line; else thickness = (thinnest_line + (range * ((max_thick_lines - j) / (GLfloat) max_thick_lines))); glLineWidth (thickness); } if (alignment >= 0) { int n = sc->line_widths[i]; xoff = 1.0 - (n * sc->font_scale); } if (alignment == 0) xoff /= 2; glColor3f (fade, fade, 0.5 * fade); draw_string (sc, (x + xoff) / sc->font_scale, y / sc->font_scale, line); if (textures_p) mi->polygon_count += strlen (line); } glPopMatrix (); sc->intra_line_scroll += sc->line_height / scroll_steps; if (sc->intra_line_scroll >= sc->line_height) { sc->intra_line_scroll = 0; /* Drop the oldest line off the end. */ if (sc->lines[0]) free (sc->lines[0]); /* Scroll the contents of the lines array toward 0. */ if (sc->total_lines > 0) { for (i = 1; i < sc->total_lines; i++) { sc->lines[i-1] = sc->lines[i]; sc->line_widths[i-1] = sc->line_widths[i]; } sc->lines[--sc->total_lines] = 0; } /* Bring in new lines at the end. */ get_more_lines (sc); if (sc->total_lines < max_lines) /* Oops, we ran out of text... well, insert some blank lines here so that new text still pulls in from the bottom of the screen, isntead of just appearing. */ sc->total_lines = max_lines; } glPopMatrix (); if (mi->fps_p) do_fps (mi); glFinish(); glXSwapBuffers(dpy, window); sc->star_theta += star_spin; } ENTRYPOINT void release_sws (ModeInfo *mi) { if (scs) { int screen; for (screen = 0; screen < MI_NUM_SCREENS(mi); screen++) { sws_configuration *sc = &scs[screen]; if (sc->tc) textclient_close (sc->tc); /* #### there's more to free here */ } free (scs); scs = 0; } FreeAllGL(mi); } #ifdef __GNUC__ __extension__ /* don't warn about "string length is greater than the length ISO C89 compilers are required to support" when including "starwars.txt" in the defaults... */ #endif XSCREENSAVER_MODULE_2 ("StarWars", starwars, sws) #endif /* USE_GL */ xscreensaver-5.36/hacks/glx/glut_stroke.c000644 000767 000024 00000002542 12717750356 020547 0ustar00jwzstaff000000 000000 /* Copyright (c) Mark J. Kilgard, 1994. */ /* This program is freely distributable without licensing fees and is provided without guarantee or warrantee expressed or implied. This program is -not- in the public domain. */ #if 0 /* for Mesa */ # include "glutint.h" #else /* for xscreensaver */ # ifdef HAVE_CONFIG_H # include "config.h" # endif # ifdef HAVE_COCOA # include "jwxyz.h" # elif defined(HAVE_ANDROID) # include "jwxyz.h" # include # else /* real X11 */ # include # endif # ifdef HAVE_JWZGLES # include "jwzgles.h" # endif /* HAVE_JWZGLES */ # undef APIENTRY # define APIENTRY /**/ #endif #include "glutstroke.h" void APIENTRY glutStrokeCharacter(GLUTstrokeFont font, int c) { const StrokeCharRec *ch; const StrokeRec *stroke; const CoordRec *coord; StrokeFontPtr fontinfo; int i, j; #if defined(_WIN32) fontinfo = (StrokeFontPtr) __glutFont(font); #else fontinfo = (StrokeFontPtr) font; #endif if (c < 0 || c >= fontinfo->num_chars) return; ch = &(fontinfo->ch[c]); if (ch) { for (i = ch->num_strokes, stroke = ch->stroke; i > 0; i--, stroke++) { glBegin(GL_LINE_STRIP); for (j = stroke->num_coords, coord = stroke->coord; j > 0; j--, coord++) { glVertex2f(coord->x, coord->y); } glEnd(); } glTranslatef(ch->right, 0.0, 0.0); } } xscreensaver-5.36/hacks/glx/glut_swidth.c000644 000767 000024 00000002740 12710074263 020527 0ustar00jwzstaff000000 000000 /* Copyright (c) Mark J. Kilgard, 1995. */ /* This program is freely distributable without licensing fees and is provided without guarantee or warrantee expressed or implied. This program is -not- in the public domain. */ #if 0 /* for Mesa */ # include "glutint.h" #else /* for xscreensaver */ # ifdef HAVE_CONFIG_H # include "config.h" # endif # ifndef HAVE_JWXYZ # include # endif #ifdef HAVE_ANDROID #include #define Bool int #endif # ifdef HAVE_JWZGLES # include "jwzgles.h" # endif /* HAVE_JWZGLES */ # undef APIENTRY # define APIENTRY /**/ #endif #include "glutstroke.h" /* CENTRY */ int APIENTRY glutStrokeWidth(GLUTstrokeFont font, int c) { StrokeFontPtr fontinfo; const StrokeCharRec *ch; #if defined(_WIN32) fontinfo = (StrokeFontPtr) __glutFont(font); #else fontinfo = (StrokeFontPtr) font; #endif if (c < 0 || c >= fontinfo->num_chars) return 0; ch = &(fontinfo->ch[c]); if (ch) return ch->right; else return 0; } int APIENTRY glutStrokeLength(GLUTstrokeFont font, const unsigned char *string) { int c, length; StrokeFontPtr fontinfo; const StrokeCharRec *ch; #if defined(_WIN32) fontinfo = (StrokeFontPtr) __glutFont(font); #else fontinfo = (StrokeFontPtr) font; #endif length = 0; for (; *string != '\0'; string++) { c = *string; if (c >= 0 && c < fontinfo->num_chars) { ch = &(fontinfo->ch[c]); if (ch) length += ch->right; } } return length; } /* ENDCENTRY */ xscreensaver-5.36/hacks/glx/gltext.c000664 000767 000024 00000037703 12710313211 017477 0ustar00jwzstaff000000 000000 /* gltext, Copyright (c) 2001-2014 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. */ #define DEFAULTS "*delay: 20000 \n" \ "*showFPS: False \n" \ "*wireframe: False \n" \ "*usePty: False \n" \ # define refresh_text 0 #define SMOOTH_TUBE /* whether to have smooth or faceted tubes */ #ifdef SMOOTH_TUBE # define TUBE_FACES 12 /* how densely to render tubes */ #else # define TUBE_FACES 8 #endif #undef countof #define countof(x) (sizeof((x))/sizeof((*x))) #include "xlockmore.h" #include "colors.h" #include "tube.h" #include "sphere.h" #include "rotator.h" #include "gltrackball.h" #include "textclient.h" #include "utf8wc.h" #include #ifdef USE_GL /* whole file */ #define DEF_TEXT "(default)" #define DEF_PROGRAM "(default)" #define DEF_SPIN "XYZ" #define DEF_WANDER "True" #define DEF_FACE_FRONT "True" #ifdef HAVE_UNAME # include #endif /* HAVE_UNAME */ #include "glutstroke.h" #include "glut_roman.h" #define GLUT_FONT (&glutStrokeRoman) typedef struct { GLXContext *glx_context; rotator *rot, *rot2; trackball_state *trackball; Bool button_down_p; Bool spinx, spiny, spinz; GLuint text_list; int ncolors; XColor *colors; int ccolor; char *text; int reload; time_t last_update; text_data *tc; } text_configuration; static text_configuration *tps = NULL; static char *text_fmt; static char *program_str; static char *do_spin; static Bool do_wander; static Bool face_front_p; static XrmOptionDescRec opts[] = { { "-text", ".text", XrmoptionSepArg, 0 }, { "-program", ".program", XrmoptionSepArg, 0 }, { "-spin", ".spin", XrmoptionSepArg, 0 }, { "+spin", ".spin", XrmoptionNoArg, "" }, { "-wander", ".wander", XrmoptionNoArg, "True" }, { "+wander", ".wander", XrmoptionNoArg, "False" }, { "-front", ".faceFront", XrmoptionNoArg, "True" }, { "+front", ".faceFront", XrmoptionNoArg, "False" } }; static argtype vars[] = { {&text_fmt, "text", "Text", DEF_TEXT, t_String}, {&program_str, "program", "Program", DEF_PROGRAM, t_String}, {&do_spin, "spin", "Spin", DEF_SPIN, t_String}, {&do_wander, "wander", "Wander", DEF_WANDER, t_Bool}, {&face_front_p, "faceFront", "FaceFront", DEF_FACE_FRONT, t_Bool}, }; ENTRYPOINT ModeSpecOpt text_opts = {countof(opts), opts, countof(vars), vars, NULL}; /* Window management, etc */ ENTRYPOINT void reshape_text (ModeInfo *mi, int width, int height) { GLfloat h = (GLfloat) height / (GLfloat) width; glViewport (0, 0, (GLint) width, (GLint) height); glMatrixMode(GL_PROJECTION); glLoadIdentity(); gluPerspective (30.0, 1/h, 1.0, 100.0); glMatrixMode(GL_MODELVIEW); glLoadIdentity(); gluLookAt( 0.0, 0.0, 30.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0); # ifdef HAVE_MOBILE /* Keep it the same relative size when rotated. */ { int o = (int) current_device_rotation(); if (o != 0 && o != 180 && o != -180) glScalef (1/h, 1/h, 1/h); } # endif glClear(GL_COLOR_BUFFER_BIT); } static void gl_init (ModeInfo *mi) { text_configuration *tp = &tps[MI_SCREEN(mi)]; int wire = MI_IS_WIREFRAME(mi); static const GLfloat pos[4] = {5.0, 5.0, 10.0, 1.0}; if (!wire) { glLightfv(GL_LIGHT0, GL_POSITION, pos); glEnable(GL_CULL_FACE); glEnable(GL_LIGHTING); glEnable(GL_LIGHT0); glEnable(GL_DEPTH_TEST); } tp->text_list = glGenLists (1); glNewList (tp->text_list, GL_COMPILE); glEndList (); } static void parse_text (ModeInfo *mi) { text_configuration *tp = &tps[MI_SCREEN(mi)]; char *old = tp->text; if (program_str && *program_str && !!strcmp(program_str, "(default)")) { int max_lines = 8; char buf[1024]; char *p = buf; int lines = 0; if (! tp->tc) tp->tc = textclient_open (mi->dpy); while (p < buf + sizeof(buf) - 1 && lines < max_lines) { int c = textclient_getc (tp->tc); if (c == '\n') lines++; if (c > 0) *p++ = (char) c; else break; } *p = 0; if (lines == 0 && buf[0]) lines++; tp->text = strdup (buf); tp->reload = 7; /* Let this one linger for a few seconds */ if (!*tp->text) tp->reload = 1; } else if (!text_fmt || !*text_fmt || !strcmp(text_fmt, "(default)")) { # ifdef HAVE_UNAME struct utsname uts; if (uname (&uts) < 0) { tp->text = strdup("uname() failed"); } else { char *s; if ((s = strchr(uts.nodename, '.'))) *s = 0; tp->text = (char *) malloc(strlen(uts.nodename) + strlen(uts.sysname) + strlen(uts.version) + strlen(uts.release) + 10); # 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 = "/System/Library/CoreServices/SystemVersion.plist"; FILE *f = fopen (file, "r"); char *pbv = 0, *pn = 0, *puvv = 0; if (f) { char *s, buf[255]; while (fgets (buf, sizeof(buf)-1, f)) { # define GRAB(S,V) \ if (strstr(buf, S)) { \ fgets (buf, sizeof(buf)-1, f); \ if ((s = strchr (buf, '>'))) V = strdup(s+1); \ if ((s = strchr (V, '<'))) *s = 0; \ } GRAB ("ProductName", pn) GRAB ("ProductBuildVersion", pbv) GRAB ("ProductUserVisibleVersion", puvv) # undef GRAB } } if (pbv) sprintf (tp->text, "%s\n%s\n%s\n%s", uts.nodename, pn, puvv, uts.machine); else sprintf(tp->text, "%s\n%s %s\n%s", uts.nodename, uts.sysname, uts.release, uts.machine); } # else sprintf(tp->text, "%s\n%s %s", uts.nodename, uts.sysname, uts.release); # endif /* special system types */ } # else /* !HAVE_UNAME */ # ifdef VMS tp->text = strdup(getenv("SYS$NODE")); # else tp->text = strdup("* *\n* * *\nxscreensaver\n* * *\n* *"); # endif # endif /* !HAVE_UNAME */ } else if (!strchr (text_fmt, '%')) { tp->text = strdup (text_fmt); } else { time_t now = time ((time_t *) 0); struct tm *tm = localtime (&now); int L = strlen(text_fmt) + 100; tp->text = (char *) malloc (L); *tp->text = 0; strftime (tp->text, L-1, text_fmt, tm); if (!*tp->text) sprintf (tp->text, "strftime error:\n%s", text_fmt); tp->reload = 1; } { /* The GLUT font only has ASCII characters. */ char *s1 = utf8_to_latin1 (tp->text, True); free (tp->text); tp->text = s1; } /* If we had text before but got no text this time, hold on to the old one, to avoid flickering. */ if (old && *old && !*tp->text) { free (tp->text); tp->text = old; } else if (old) free (old); } ENTRYPOINT Bool text_handle_event (ModeInfo *mi, XEvent *event) { text_configuration *tp = &tps[MI_SCREEN(mi)]; if (gltrackball_event_handler (event, tp->trackball, MI_WIDTH (mi), MI_HEIGHT (mi), &tp->button_down_p)) return True; return False; } ENTRYPOINT void init_text (ModeInfo *mi) { text_configuration *tp; int i; if (!tps) { tps = (text_configuration *) calloc (MI_NUM_SCREENS(mi), sizeof (text_configuration)); if (!tps) { fprintf(stderr, "%s: out of memory\n", progname); exit(1); } } tp = &tps[MI_SCREEN(mi)]; if ((tp->glx_context = init_GL(mi)) != NULL) { gl_init(mi); reshape_text (mi, MI_WIDTH(mi), MI_HEIGHT(mi)); } { double spin_speed = 0.5; double wander_speed = 0.02; double tilt_speed = 0.03; double spin_accel = 0.5; char *s = do_spin; while (*s) { if (*s == 'x' || *s == 'X') tp->spinx = True; else if (*s == 'y' || *s == 'Y') tp->spiny = True; else if (*s == 'z' || *s == 'Z') tp->spinz = True; else if (*s == '0') ; else { fprintf (stderr, "%s: spin must contain only the characters X, Y, or Z (not \"%s\")\n", progname, do_spin); exit (1); } s++; } tp->rot = make_rotator (tp->spinx ? spin_speed : 0, tp->spiny ? spin_speed : 0, tp->spinz ? spin_speed : 0, spin_accel, do_wander ? wander_speed : 0, False); tp->rot2 = (face_front_p ? make_rotator (0, 0, 0, 0, tilt_speed, True) : 0); tp->trackball = gltrackball_init (False); } tp->ncolors = 255; tp->colors = (XColor *) calloc(tp->ncolors, sizeof(XColor)); make_smooth_colormap (0, 0, 0, tp->colors, &tp->ncolors, False, 0, False); /* brighter colors, please... */ for (i = 0; i < tp->ncolors; i++) { tp->colors[i].red = (tp->colors[i].red / 2) + 32767; tp->colors[i].green = (tp->colors[i].green / 2) + 32767; tp->colors[i].blue = (tp->colors[i].blue / 2) + 32767; } parse_text (mi); } static int fill_character (GLUTstrokeFont font, int c, Bool wire, int *polysP) { GLfloat tube_width = 10; const StrokeCharRec *ch; const StrokeRec *stroke; const CoordRec *coord; StrokeFontPtr fontinfo; int i, j; fontinfo = (StrokeFontPtr) font; if (c < 0 || c >= fontinfo->num_chars) return 0; ch = &(fontinfo->ch[c]); if (ch) { GLfloat lx=0, ly=0; for (i = ch->num_strokes, stroke = ch->stroke; i > 0; i--, stroke++) { for (j = stroke->num_coords, coord = stroke->coord; j > 0; j--, coord++) { # ifdef SMOOTH_TUBE int smooth = True; # 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, 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); } return 0; } static int text_extents (const char *string, int *wP, int *hP) { const char *s, *start; int line_height = GLUT_FONT->top - GLUT_FONT->bottom; int lines = 0; *wP = 0; *hP = 0; start = string; s = start; while (1) if (*s == '\n' || *s == 0) { int w = 0; while (start < s) { w += glutStrokeWidth(GLUT_FONT, *start); start++; } start = s+1; if (w > *wP) *wP = w; *hP += line_height; lines++; if (*s == 0) break; s++; } else s++; return lines; } static unsigned long fill_string (const char *string, Bool wire) { int polys = 0; const char *s, *start; int line_height = GLUT_FONT->top - GLUT_FONT->bottom; int off; GLfloat x = 0, y = 0; int ow, oh; text_extents (string, &ow, &oh); y = oh / 2 - line_height; start = string; s = start; while (1) if (*s == '\n' || *s == 0) { int line_w = 0; const char *s2; const char *lstart = start; const char *lend = s; /* strip off whitespace at beginning and end of line (since we're centering.) */ while (lend > lstart && isspace(lend[-1])) lend--; while (lstart < lend && isspace(*lstart)) lstart++; for (s2 = lstart; s2 < lend; s2++) line_w += glutStrokeWidth (GLUT_FONT, *s2); x = (-ow/2) + ((ow-line_w)/2); for (s2 = lstart; s2 < lend; s2++) { glPushMatrix(); glTranslatef(x, y, 0); off = fill_character (GLUT_FONT, *s2, wire, &polys); x += off; glPopMatrix(); } start = s+1; y -= line_height; if (*s == 0) break; s++; } else s++; return polys; } ENTRYPOINT void draw_text (ModeInfo *mi) { text_configuration *tp = &tps[MI_SCREEN(mi)]; Display *dpy = MI_DISPLAY(mi); Window window = MI_WINDOW(mi); int wire = MI_IS_WIREFRAME(mi); GLfloat white[4] = {1.0, 1.0, 1.0, 1.0}; GLfloat color[4] = {0.0, 0.0, 0.0, 1.0}; if (!tp->glx_context) return; glXMakeCurrent(MI_DISPLAY(mi), MI_WINDOW(mi), *(tp->glx_context)); if (tp->reload) { if (time ((time_t *) 0) >= tp->last_update + tp->reload) { parse_text (mi); tp->last_update = time ((time_t *) 0); } } glShadeModel(GL_SMOOTH); glEnable(GL_DEPTH_TEST); glEnable(GL_NORMALIZE); glEnable(GL_CULL_FACE); glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glPushMatrix (); glScalef(1.1, 1.1, 1.1); glRotatef(current_device_rotation(), 0, 0, 1); { double x, y, z; get_position (tp->rot, &x, &y, &z, !tp->button_down_p); glTranslatef((x - 0.5) * 8, (y - 0.5) * 8, (z - 0.5) * 8); gltrackball_rotate (tp->trackball); if (face_front_p) { double max = 90; get_position (tp->rot2, &x, &y, &z, !tp->button_down_p); if (tp->spinx) glRotatef (max/2 - x*max, 1, 0, 0); if (tp->spiny) glRotatef (max/2 - y*max, 0, 1, 0); if (tp->spinz) glRotatef (max/2 - z*max, 0, 0, 1); } else { get_rotation (tp->rot, &x, &y, &z, !tp->button_down_p); glRotatef (x * 360, 1, 0, 0); glRotatef (y * 360, 0, 1, 0); glRotatef (z * 360, 0, 0, 1); } } glColor4fv (white); color[0] = tp->colors[tp->ccolor].red / 65536.0; color[1] = tp->colors[tp->ccolor].green / 65536.0; color[2] = tp->colors[tp->ccolor].blue / 65536.0; tp->ccolor++; if (tp->ccolor >= tp->ncolors) tp->ccolor = 0; glMaterialfv (GL_FRONT, GL_AMBIENT_AND_DIFFUSE, color); glScalef(0.01, 0.01, 0.01); mi->polygon_count = fill_string(tp->text, wire); glPopMatrix (); if (mi->fps_p) do_fps (mi); glFinish(); glXSwapBuffers(dpy, window); } ENTRYPOINT void release_text(ModeInfo * mi) { if (tps) { int screen; for (screen = 0; screen < MI_NUM_SCREENS(mi); screen++) { text_configuration *tp = &tps[MI_SCREEN(mi)]; if (tp->tc) textclient_close (tp->tc); } } (void) free(tps); tps = 0; FreeAllGL(mi); } XSCREENSAVER_MODULE_2 ("GLText", gltext, text) #endif /* USE_GL */ xscreensaver-5.36/hacks/glx/molecule.c000644 000767 000024 00000131441 12710313220 017765 0ustar00jwzstaff000000 000000 /* molecule, Copyright (c) 2001-2016 Jamie Zawinski * Draws molecules, based on coordinates from PDB (Protein Data Base) files. * * 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. */ /* Documentation on the PDB file format: https://en.wikipedia.org/wiki/Protein_Data_Bank_%28file_format%29 http://www.wwpdb.org/docs.html http://www.wwpdb.org/documentation/format32/v3.2.html http://www.wwpdb.org/documentation/format32/sect9.html http://www.rcsb.org/pdb/file_formats/pdb/pdbguide2.2/guide2.2_frame.html Good source of PDB files: http://www.sci.ouc.bc.ca/chem/molecule/molecule.html http://www.umass.edu/microbio/rasmol/whereget.htm http://www.wwpdb.org/docs.html */ #define DEFAULTS "*delay: 10000 \n" \ "*showFPS: False \n" \ "*wireframe: False \n" \ "*atomFont: -*-helvetica-medium-r-normal-*-*-240-*-*-*-*-*-*\n" \ "*titleFont: -*-helvetica-medium-r-normal-*-*-180-*-*-*-*-*-*\n" \ "*noLabelThreshold: 150 \n" \ "*wireframeThreshold: 150 \n" \ "*suppressRotationAnimation: True\n" \ # define refresh_molecule 0 # define release_molecule 0 #undef countof #define countof(x) (sizeof((x))/sizeof((*x))) #include "xlockmore.h" #include "colors.h" #include "sphere.h" #include "tube.h" #include "texfont.h" #include "rotator.h" #include "gltrackball.h" #ifdef USE_GL /* whole file */ #include #include #include #include #define DEF_TIMEOUT "20" #define DEF_SPIN "XYZ" #define DEF_WANDER "False" #define DEF_LABELS "True" #define DEF_TITLES "True" #define DEF_ATOMS "True" #define DEF_BONDS "True" #define DEF_ESHELLS "True" #define DEF_BBOX "False" #define DEF_SHELL_ALPHA "0.3" #define DEF_MOLECULE "(default)" #define DEF_VERBOSE "False" #define SPHERE_SLICES 48 /* how densely to render spheres */ #define SPHERE_STACKS 24 #define SMOOTH_TUBE /* whether to have smooth or faceted tubes */ #ifdef SMOOTH_TUBE # define TUBE_FACES 12 /* how densely to render tubes */ #else # define TUBE_FACES 8 #endif #define SPHERE_SLICES_2 14 #define SPHERE_STACKS_2 8 #define TUBE_FACES_2 6 # ifdef __GNUC__ __extension__ /* don't warn about "string length is greater than the length ISO C89 compilers are required to support" when includng the following data file... */ # endif static const char * const builtin_pdb_data[] = { # include "molecules.h" }; #ifndef HAVE_MOBILE # define LOAD_FILES #endif typedef struct { const char *name; GLfloat size, size2; const char *color; const char *text_color; GLfloat gl_color[8]; } atom_data; /* These are the traditional colors used to render these atoms, and their approximate size in angstroms. */ static const atom_data all_atom_data[] = { { "H", 1.17, 0.40, "#FFFFFF", "#000000", { 0, }}, { "C", 1.75, 0.58, "#999999", "#FFFFFF", { 0, }}, { "CA", 1.80, 0.60, "#0000FF", "#ADD8E6", { 0, }}, { "N", 1.55, 0.52, "#A2B5CD", "#EE99FF", { 0, }}, { "O", 1.40, 0.47, "#FF0000", "#FFB6C1", { 0, }}, { "P", 1.28, 0.43, "#9370DB", "#DB7093", { 0, }}, { "S", 1.80, 0.60, "#8B8B00", "#FFFF00", { 0, }}, { "bond", 0, 0, "#B3B3B3", "#FFFF00", { 0, }}, { "*", 1.40, 0.47, "#008B00", "#90EE90", { 0, }} }; typedef struct { int id; /* sequence number in the PDB file */ const char *label; /* The atom name */ GLfloat x, y, z; /* position in 3-space (angstroms) */ const atom_data *data; /* computed: which style of atom this is */ } molecule_atom; typedef struct { int from, to; /* atom sequence numbers */ int strength; /* how many bonds are between these two atoms */ } molecule_bond; typedef struct { const char *label; /* description of this compound */ int natoms, atoms_size; int nbonds, bonds_size; molecule_atom *atoms; molecule_bond *bonds; } molecule; typedef struct { GLXContext *glx_context; rotator *rot; trackball_state *trackball; Bool button_down_p; GLfloat molecule_size; /* max dimension of molecule bounding box */ GLfloat no_label_threshold; /* Things happen when molecules are huge */ GLfloat wireframe_threshold; int which; /* which of the molecules is being shown */ int nmolecules; molecule *molecules; int mode; /* 0 = normal, 1 = out, 2 = in */ int mode_tick; int next; /* 0 = random, -1 = back, 1 = forward */ GLuint molecule_dlist; GLuint shell_dlist; texture_font_data *atom_font, *title_font; int polygon_count; time_t draw_time; int draw_tick; GLfloat overall_scale; int low_rez_p; } molecule_configuration; static molecule_configuration *mcs = NULL; static int timeout; static char *molecule_str; static char *do_spin; static Bool do_wander; static Bool do_titles; static Bool do_labels; static Bool do_atoms; static Bool do_bonds; static Bool do_shells; static Bool do_bbox; static Bool verbose_p; static GLfloat shell_alpha; /* saved to reset */ static Bool orig_do_labels, orig_do_atoms, orig_do_bonds, orig_do_shells, orig_wire; static XrmOptionDescRec opts[] = { { "-molecule", ".molecule", XrmoptionSepArg, 0 }, { "-timeout", ".timeout", XrmoptionSepArg, 0 }, { "-spin", ".spin", XrmoptionSepArg, 0 }, { "+spin", ".spin", XrmoptionNoArg, "" }, { "-wander", ".wander", XrmoptionNoArg, "True" }, { "+wander", ".wander", XrmoptionNoArg, "False" }, { "-labels", ".labels", XrmoptionNoArg, "True" }, { "+labels", ".labels", XrmoptionNoArg, "False" }, { "-titles", ".titles", XrmoptionNoArg, "True" }, { "+titles", ".titles", XrmoptionNoArg, "False" }, { "-atoms", ".atoms", XrmoptionNoArg, "True" }, { "+atoms", ".atoms", XrmoptionNoArg, "False" }, { "-bonds", ".bonds", XrmoptionNoArg, "True" }, { "+bonds", ".bonds", XrmoptionNoArg, "False" }, { "-shells", ".eshells", XrmoptionNoArg, "True" }, { "+shells", ".eshells", XrmoptionNoArg, "False" }, { "-shell-alpha", ".shellAlpha", XrmoptionSepArg, 0 }, { "-bbox", ".bbox", XrmoptionNoArg, "True" }, { "+bbox", ".bbox", XrmoptionNoArg, "False" }, { "-verbose", ".verbose", XrmoptionNoArg, "True" }, }; static argtype vars[] = { {&molecule_str, "molecule", "Molecule", DEF_MOLECULE, t_String}, {&timeout, "timeout", "Seconds", DEF_TIMEOUT, t_Int}, {&do_spin, "spin", "Spin", DEF_SPIN, t_String}, {&do_wander, "wander", "Wander", DEF_WANDER, t_Bool}, {&do_atoms, "atoms", "Atoms", DEF_ATOMS, t_Bool}, {&do_bonds, "bonds", "Bonds", DEF_BONDS, t_Bool}, {&do_shells, "eshells", "EShells", DEF_ESHELLS, t_Bool}, {&do_labels, "labels", "Labels", DEF_LABELS, t_Bool}, {&do_titles, "titles", "Titles", DEF_TITLES, t_Bool}, {&do_bbox, "bbox", "BBox", DEF_BBOX, t_Bool}, {&shell_alpha, "shellAlpha", "ShellAlpha", DEF_SHELL_ALPHA, t_Float}, {&verbose_p, "verbose", "Verbose", DEF_VERBOSE, t_Bool}, }; ENTRYPOINT ModeSpecOpt molecule_opts = {countof(opts), opts, countof(vars), vars, NULL}; /* shapes */ static int sphere (molecule_configuration *mc, GLfloat x, GLfloat y, GLfloat z, GLfloat diameter, Bool wire) { int stacks = (mc->low_rez_p ? SPHERE_STACKS_2 : SPHERE_STACKS); int slices = (mc->low_rez_p ? SPHERE_SLICES_2 : SPHERE_SLICES); glPushMatrix (); glTranslatef (x, y, z); glScalef (diameter, diameter, diameter); unit_sphere (stacks, slices, wire); glPopMatrix (); return stacks * slices; } static void load_fonts (ModeInfo *mi) { molecule_configuration *mc = &mcs[MI_SCREEN(mi)]; mc->atom_font = load_texture_font (mi->dpy, "atomFont"); mc->title_font = load_texture_font (mi->dpy, "titleFont"); } static const atom_data * get_atom_data (const char *atom_name) { int i; const atom_data *d = 0; char *n = strdup (atom_name); char *n2 = n; int L; while (!isalpha(*n)) n++; L = strlen(n); while (L > 0 && !isalpha(n[L-1])) n[--L] = 0; for (i = 0; i < countof(all_atom_data); i++) { d = &all_atom_data[i]; if (!strcasecmp (n, all_atom_data[i].name)) break; } free (n2); return d; } static void set_atom_color (ModeInfo *mi, const molecule_atom *a, Bool font_p, GLfloat alpha) { const atom_data *d; GLfloat gl_color[4]; if (a) d = a->data; else d = get_atom_data ("bond"); if (font_p) { gl_color[0] = d->gl_color[4]; gl_color[1] = d->gl_color[5]; gl_color[2] = d->gl_color[6]; gl_color[3] = d->gl_color[7]; } else { gl_color[0] = d->gl_color[0]; gl_color[1] = d->gl_color[1]; gl_color[2] = d->gl_color[2]; gl_color[3] = d->gl_color[3]; } if (gl_color[3] == 0) { const char *string = !font_p ? d->color : d->text_color; XColor xcolor; if (!XParseColor (mi->dpy, mi->xgwa.colormap, string, &xcolor)) { fprintf (stderr, "%s: unparsable color in %s: %s\n", progname, (a ? a->label : d->name), string); exit (1); } gl_color[0] = xcolor.red / 65536.0; gl_color[1] = xcolor.green / 65536.0; gl_color[2] = xcolor.blue / 65536.0; } gl_color[3] = alpha; /* If we're not drawing atoms, and the color is black, use white instead. This is a kludge so that H can have black text over its white ball, but the text still shows up if balls are off. */ if (font_p && !do_atoms && gl_color[0] == 0 && gl_color[1] == 0 && gl_color[2] == 0) { gl_color[0] = gl_color[1] = gl_color[2] = 1; } if (font_p) glColor4f (gl_color[0], gl_color[1], gl_color[2], gl_color[3]); else glMaterialfv (GL_FRONT, GL_AMBIENT_AND_DIFFUSE, gl_color); } static GLfloat atom_size (const molecule_atom *a) { if (do_bonds) return a->data->size2; else return a->data->size; } static molecule_atom * get_atom (molecule_atom *atoms, int natoms, int id) { int i; /* quick short-circuit */ if (id < natoms) { if (atoms[id].id == id) return &atoms[id]; if (id > 0 && atoms[id-1].id == id) return &atoms[id-1]; if (id < natoms-1 && atoms[id+1].id == id) return &atoms[id+1]; } for (i = 0; i < natoms; i++) if (id == atoms[i].id) return &atoms[i]; fprintf (stderr, "%s: no atom %d\n", progname, id); abort(); } static void molecule_bounding_box (ModeInfo *mi, GLfloat *x1, GLfloat *y1, GLfloat *z1, GLfloat *x2, GLfloat *y2, GLfloat *z2) { molecule_configuration *mc = &mcs[MI_SCREEN(mi)]; molecule *m = &mc->molecules[mc->which]; int i; if (m->natoms == 0) { *x1 = *y1 = *z1 = *x2 = *y2 = *z2 = 0; } else { *x1 = *x2 = m->atoms[0].x; *y1 = *y2 = m->atoms[0].y; *z1 = *z2 = m->atoms[0].z; } for (i = 1; i < m->natoms; i++) { if (m->atoms[i].x < *x1) *x1 = m->atoms[i].x; if (m->atoms[i].y < *y1) *y1 = m->atoms[i].y; if (m->atoms[i].z < *z1) *z1 = m->atoms[i].z; if (m->atoms[i].x > *x2) *x2 = m->atoms[i].x; if (m->atoms[i].y > *y2) *y2 = m->atoms[i].y; if (m->atoms[i].z > *z2) *z2 = m->atoms[i].z; } *x1 -= 1.5; *y1 -= 1.5; *z1 -= 1.5; *x2 += 1.5; *y2 += 1.5; *z2 += 1.5; } static void draw_bounding_box (ModeInfo *mi) { static const GLfloat c1[4] = { 0.2, 0.2, 0.4, 1.0 }; static const GLfloat c2[4] = { 1.0, 0.0, 0.0, 1.0 }; int wire = MI_IS_WIREFRAME(mi); GLfloat x1, y1, z1, x2, y2, z2; molecule_bounding_box (mi, &x1, &y1, &z1, &x2, &y2, &z2); glMaterialfv (GL_FRONT, GL_AMBIENT_AND_DIFFUSE, c1); glFrontFace(GL_CCW); glBegin(wire ? GL_LINE_LOOP : GL_QUADS); glNormal3f(0, 1, 0); glVertex3f(x1, y1, z1); glVertex3f(x1, y1, z2); glVertex3f(x2, y1, z2); glVertex3f(x2, y1, z1); glEnd(); glBegin(wire ? GL_LINE_LOOP : GL_QUADS); glNormal3f(0, -1, 0); glVertex3f(x2, y2, z1); glVertex3f(x2, y2, z2); glVertex3f(x1, y2, z2); glVertex3f(x1, y2, z1); glEnd(); glBegin(wire ? GL_LINE_LOOP : GL_QUADS); glNormal3f(0, 0, 1); glVertex3f(x1, y1, z1); glVertex3f(x2, y1, z1); glVertex3f(x2, y2, z1); glVertex3f(x1, y2, z1); glEnd(); glBegin(wire ? GL_LINE_LOOP : GL_QUADS); glNormal3f(0, 0, -1); glVertex3f(x1, y2, z2); glVertex3f(x2, y2, z2); glVertex3f(x2, y1, z2); glVertex3f(x1, y1, z2); glEnd(); glBegin(wire ? GL_LINE_LOOP : GL_QUADS); glNormal3f(1, 0, 0); glVertex3f(x1, y2, z1); glVertex3f(x1, y2, z2); glVertex3f(x1, y1, z2); glVertex3f(x1, y1, z1); glEnd(); glBegin(wire ? GL_LINE_LOOP : GL_QUADS); glNormal3f(-1, 0, 0); glVertex3f(x2, y1, z1); glVertex3f(x2, y1, z2); glVertex3f(x2, y2, z2); glVertex3f(x2, y2, z1); glEnd(); glDisable (GL_LIGHTING); glColor3f (c2[0], c2[1], c2[2]); glBegin(GL_LINES); if (x1 > 0) x1 = 0; if (x2 < 0) x2 = 0; if (y1 > 0) y1 = 0; if (y2 < 0) y2 = 0; if (z1 > 0) z1 = 0; if (z2 < 0) z2 = 0; glVertex3f(x1, 0, 0); glVertex3f(x2, 0, 0); glVertex3f(0 , y1, 0); glVertex3f(0, y2, 0); glVertex3f(0, 0, z1); glVertex3f(0, 0, z2); glEnd(); if (!wire) glEnable (GL_LIGHTING); } /* Since PDB files don't always have the molecule centered around the origin, and since some molecules are pretty large, scale and/or translate so that the whole molecule is visible in the window. */ static void ensure_bounding_box_visible (ModeInfo *mi) { molecule_configuration *mc = &mcs[MI_SCREEN(mi)]; GLfloat x1, y1, z1, x2, y2, z2; GLfloat w, h, d; GLfloat size; GLfloat max_size = 10; /* don't bother scaling down if the molecule is already smaller than this */ molecule_bounding_box (mi, &x1, &y1, &z1, &x2, &y2, &z2); w = x2-x1; h = y2-y1; d = z2-z1; size = (w > h ? w : h); size = (size > d ? size : d); mc->molecule_size = size; mc->low_rez_p = 0; mc->overall_scale = 1; if (size > max_size) { mc->overall_scale = max_size / size; glScalef (mc->overall_scale, mc->overall_scale, mc->overall_scale); mc->low_rez_p = mc->overall_scale < 0.3; } glTranslatef (-(x1 + w/2), -(y1 + h/2), -(z1 + d/2)); } /* Constructs the GL shapes of the current molecule */ static void build_molecule (ModeInfo *mi, Bool transparent_p) { molecule_configuration *mc = &mcs[MI_SCREEN(mi)]; int wire = MI_IS_WIREFRAME(mi); int i; GLfloat alpha = transparent_p ? shell_alpha : 1.0; int polys = 0; molecule *m = &mc->molecules[mc->which]; if (wire) { glDisable(GL_CULL_FACE); glDisable(GL_LIGHTING); glDisable(GL_LIGHT0); glDisable(GL_DEPTH_TEST); glDisable(GL_NORMALIZE); glDisable(GL_CULL_FACE); } else { glEnable(GL_CULL_FACE); glEnable(GL_LIGHTING); glEnable(GL_LIGHT0); glEnable(GL_DEPTH_TEST); glEnable(GL_NORMALIZE); glEnable(GL_CULL_FACE); } if (!wire) set_atom_color (mi, 0, False, alpha); if (do_bonds) for (i = 0; i < m->nbonds; i++) { const molecule_bond *b = &m->bonds[i]; const molecule_atom *from = get_atom (m->atoms, m->natoms, b->from); const molecule_atom *to = get_atom (m->atoms, m->natoms, b->to); if (wire) { glBegin(GL_LINES); glVertex3f(from->x, from->y, from->z); glVertex3f(to->x, to->y, to->z); glEnd(); polys++; } else { int faces = (mc->low_rez_p ? TUBE_FACES_2 : TUBE_FACES); # ifdef SMOOTH_TUBE int smooth = True; # else int smooth = False; # endif Bool cap_p = (!do_atoms || do_shells); GLfloat base = 0.07; GLfloat thickness = base * b->strength; GLfloat cap_size = (cap_p ? base / 2 : 0); if (thickness > 0.3) thickness = 0.3; polys += tube (from->x, from->y, from->z, to->x, to->y, to->z, thickness, cap_size, faces, smooth, cap_p, wire); } } if (!wire && do_atoms) for (i = 0; i < m->natoms; i++) { const molecule_atom *a = &m->atoms[i]; GLfloat size = atom_size (a); set_atom_color (mi, a, False, alpha); polys += sphere (mc, a->x, a->y, a->z, size, wire); } if (do_bbox && !transparent_p) { draw_bounding_box (mi); polys += 4; } mc->polygon_count += polys; } /* loading */ static void push_atom (molecule *m, int id, const char *label, GLfloat x, GLfloat y, GLfloat z) { m->natoms++; if (m->atoms_size < m->natoms) { m->atoms_size += 20; m->atoms = (molecule_atom *) realloc (m->atoms, m->atoms_size * sizeof(*m->atoms)); } m->atoms[m->natoms-1].id = id; m->atoms[m->natoms-1].label = label; m->atoms[m->natoms-1].x = x; m->atoms[m->natoms-1].y = y; m->atoms[m->natoms-1].z = z; m->atoms[m->natoms-1].data = get_atom_data (label); } static void push_bond (molecule *m, int from, int to) { int i; for (i = 0; i < m->nbonds; i++) if ((m->bonds[i].from == from && m->bonds[i].to == to) || (m->bonds[i].to == from && m->bonds[i].from == to)) { m->bonds[i].strength++; return; } m->nbonds++; if (m->bonds_size < m->nbonds) { m->bonds_size += 20; m->bonds = (molecule_bond *) realloc (m->bonds, m->bonds_size * sizeof(*m->bonds)); } m->bonds[m->nbonds-1].from = from; m->bonds[m->nbonds-1].to = to; m->bonds[m->nbonds-1].strength = 1; } static void parse_error (const char *file, int lineno, const char *line) { fprintf (stderr, "%s: %s: parse error, line %d: %s\n", progname, file, lineno, line); exit (1); } /* This function is crap. */ static void parse_pdb_data (molecule *m, const char *data, const char *filename, int line) { const char *s = data; char *ss; while (*s) { if ((!m->label || !*m->label) && (!strncmp (s, "HEADER", 6) || !strncmp (s, "COMPND", 6))) { char *name = calloc (1, 100); char *n2 = name; int L = strlen(s); if (L > 99) L = 99; strncpy (n2, s, L); n2 += 7; while (isspace(*n2)) n2++; ss = strchr (n2, '\n'); if (ss) *ss = 0; ss = strchr (n2, '\r'); if (ss) *ss = 0; ss = n2+strlen(n2)-1; while (isspace(*ss) && ss > n2) *ss-- = 0; if (strlen (n2) > 4 && !strcmp (n2 + strlen(n2) - 4, ".pdb")) n2[strlen(n2)-4] = 0; if (m->label) free ((char *) m->label); m->label = strdup (n2); free (name); } else if (!strncmp (s, "TITLE ", 6) || !strncmp (s, "HEADER", 6) || !strncmp (s, "COMPND", 6) || !strncmp (s, "AUTHOR", 6) || !strncmp (s, "REVDAT", 6) || !strncmp (s, "SOURCE", 6) || !strncmp (s, "EXPDTA", 6) || !strncmp (s, "JRNL ", 6) || !strncmp (s, "REMARK", 6) || !strncmp (s, "SEQRES", 6) || !strncmp (s, "HET ", 6) || !strncmp (s, "FORMUL", 6) || !strncmp (s, "CRYST1", 6) || !strncmp (s, "ORIGX1", 6) || !strncmp (s, "ORIGX2", 6) || !strncmp (s, "ORIGX3", 6) || !strncmp (s, "SCALE1", 6) || !strncmp (s, "SCALE2", 6) || !strncmp (s, "SCALE3", 6) || !strncmp (s, "MASTER", 6) || !strncmp (s, "KEYWDS", 6) || !strncmp (s, "DBREF ", 6) || !strncmp (s, "HETNAM", 6) || !strncmp (s, "HETSYN", 6) || !strncmp (s, "HELIX ", 6) || !strncmp (s, "LINK ", 6) || !strncmp (s, "MTRIX1", 6) || !strncmp (s, "MTRIX2", 6) || !strncmp (s, "MTRIX3", 6) || !strncmp (s, "SHEET ", 6) || !strncmp (s, "CISPEP", 6) || /* !strncmp (s, "SEQADV", 6) || !strncmp (s, "SITE ", 5) || !strncmp (s, "FTNOTE", 6) || !strncmp (s, "MODEL ", 5) || !strncmp (s, "ENDMDL", 6) || !strncmp (s, "SPRSDE", 6) || !strncmp (s, "MODRES", 6) || */ !strncmp (s, "GENERATED BY", 12) || !strncmp (s, "TER ", 4) || !strncmp (s, "END ", 4) || !strncmp (s, "TER\n", 4) || !strncmp (s, "END\n", 4) || !strncmp (s, "\n", 1)) /* ignored. */ ; else if (!strncmp (s, "ATOM ", 7)) { int id; const char *end = strchr (s, '\n'); int L = end - s; char *name = (char *) calloc (1, 4); GLfloat x = -999, y = -999, z = -999; if (1 != sscanf (s+7, " %d ", &id)) parse_error (filename, line, s); /* Use the "atom name" field if that is all that is available. */ strncpy (name, s+12, 3); /* But prefer the "element" field. */ if (L > 77 && !isspace(s[77])) { /* fprintf(stderr, " \"%s\" -> ", name); */ name[0] = s[76]; name[1] = s[77]; name[2] = 0; /* fprintf(stderr, "\"%s\"\n", name); */ } while (isspace(*name)) name++; ss = name + strlen(name)-1; while (isspace(*ss) && ss > name) *ss-- = 0; ss = name + 1; while(*ss) { *ss = tolower(*ss); ss++; } if (3 != sscanf (s + 32, " %f %f %f ", &x, &y, &z)) parse_error (filename, line, s); /* fprintf (stderr, "%s: %s: %d: atom: %d \"%s\" %9.4f %9.4f %9.4f\n", progname, filename, line, id, name, x, y, z); */ push_atom (m, id, name, x, y, z); } else if (!strncmp (s, "HETATM ", 7)) { int id; char *name = (char *) calloc (1, 4); GLfloat x = -999, y = -999, z = -999; if (1 != sscanf (s+7, " %d ", &id)) parse_error (filename, line, s); strncpy (name, s+12, 3); while (isspace(*name)) name++; ss = name + strlen(name)-1; while (isspace(*ss) && ss > name) *ss-- = 0; if (3 != sscanf (s + 30, " %f %f %f ", &x, &y, &z)) parse_error (filename, line, s); /* fprintf (stderr, "%s: %s: %d: atom: %d \"%s\" %9.4f %9.4f %9.4f\n", progname, filename, line, id, name, x, y, z); */ push_atom (m, id, name, x, y, z); } else if (!strncmp (s, "CONECT ", 7)) { int atoms[11]; int i = sscanf (s + 8, " %d %d %d %d %d %d %d %d %d %d %d %d ", &atoms[0], &atoms[1], &atoms[2], &atoms[3], &atoms[4], &atoms[5], &atoms[6], &atoms[7], &atoms[8], &atoms[9], &atoms[10], &atoms[11]); int j; for (j = 1; j < i; j++) if (atoms[j] > 0) { /* fprintf (stderr, "%s: %s: %d: bond: %d %d\n", progname, filename, line, atoms[0], atoms[j]); */ push_bond (m, atoms[0], atoms[j]); } } else { char *s1 = strdup (s); for (ss = s1; *ss && *ss != '\n'; ss++) ; *ss = 0; fprintf (stderr, "%s: %s: %d: unrecognised line: %s\n", progname, filename, line, s1); } while (*s && *s != '\n') s++; if (*s == '\n') s++; line++; } } #ifdef LOAD_FILES static int parse_pdb_file (molecule *m, const char *name) { FILE *in; int buf_size = 40960; char *buf; int line = 1; in = fopen(name, "r"); if (!in) { char *buf = (char *) malloc(1024 + strlen(name)); sprintf(buf, "%s: error reading \"%s\"", progname, name); perror(buf); return -1; } buf = (char *) malloc (buf_size); while (fgets (buf, buf_size-1, in)) { char *s; for (s = buf; *s; s++) if (*s == '\r') *s = '\n'; parse_pdb_data (m, buf, name, line++); } free (buf); fclose (in); if (!m->natoms) { fprintf (stderr, "%s: file %s contains no atomic coordinates!\n", progname, name); return -1; } if (!m->nbonds && do_bonds) { fprintf (stderr, "%s: warning: file %s contains no atomic bond info.\n", progname, name); do_bonds = 0; } return 0; } #endif /* LOAD_FILES */ typedef struct { char *atom; int count; } atom_and_count; /* When listing the components of a molecule, the convention is to put the carbon atoms first, the hydrogen atoms second, and the other atom types sorted alphabetically after that (although for some molecules, the usual order is different: we special-case a few of those.) */ static int cmp_atoms (const void *aa, const void *bb) { const atom_and_count *a = (atom_and_count *) aa; const atom_and_count *b = (atom_and_count *) bb; if (!a->atom) return 1; if (!b->atom) return -1; if (!strcmp(a->atom, "C")) return -1; if (!strcmp(b->atom, "C")) return 1; if (!strcmp(a->atom, "H")) return -1; if (!strcmp(b->atom, "H")) return 1; return strcmp (a->atom, b->atom); } static void special_case_formula (char *f); static void generate_molecule_formula (molecule *m) { char *buf = (char *) malloc (m->natoms * 10); char *s = buf; int i; atom_and_count counts[200]; memset (counts, 0, sizeof(counts)); *s = 0; for (i = 0; i < m->natoms; i++) { int j = 0; char *a = (char *) m->atoms[i].label; char *e; while (!isalpha(*a)) a++; a = strdup (a); for (e = a; isalpha(*e); e++); *e = 0; while (counts[j].atom && !!strcmp(a, counts[j].atom)) j++; if (counts[j].atom) free (a); else counts[j].atom = a; counts[j].count++; } i = 0; while (counts[i].atom) i++; qsort (counts, i, sizeof(*counts), cmp_atoms); i = 0; while (counts[i].atom) { strcat (s, counts[i].atom); free (counts[i].atom); s += strlen (s); if (counts[i].count > 1) sprintf (s, "[%d]", counts[i].count); /* use [] to get subscripts */ s += strlen (s); i++; } special_case_formula (buf); if (!m->label) m->label = strdup(""); s = (char *) malloc (strlen (m->label) + strlen (buf) + 2); strcpy (s, m->label); strcat (s, "\n"); strcat (s, buf); free ((char *) m->label); free (buf); m->label = s; } /* thanks to Rene Uittenbogaard */ static void special_case_formula (char *f) { if (!strcmp(f, "H[2]Be")) strcpy(f, "BeH[2]"); else if (!strcmp(f, "H[3]B")) strcpy(f, "BH[3]"); else if (!strcmp(f, "H[3]N")) strcpy(f, "NH[3]"); else if (!strcmp(f, "CHN")) strcpy(f, "HCN"); else if (!strcmp(f, "CKN")) strcpy(f, "KCN"); else if (!strcmp(f, "H[4]N[2]")) strcpy(f, "N[2]H[4]"); else if (!strcmp(f, "Cl[3]P")) strcpy(f, "PCl[3]"); else if (!strcmp(f, "Cl[5]P")) strcpy(f, "PCl[5]"); } static void insert_vertical_whitespace (char *string) { while (*string) { if ((string[0] == ',' || string[0] == ';' || string[0] == ':') && string[1] == ' ') string[0] = ' ', string[1] = '\n'; string++; } } /* Construct the molecule data from either: the builtins; or from the (one) .pdb file specified with -molecule. */ static void load_molecules (ModeInfo *mi) { molecule_configuration *mc = &mcs[MI_SCREEN(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; char **files = 0; int molecule_ctr; if (!stat (molecule_str, &st) && S_ISDIR (st.st_mode)) { char buf [255]; DIR *pdb_dir; struct dirent *dentry; pdb_dir = opendir (molecule_str); if (! pdb_dir) { sprintf (buf, "%.100s: %.100s", progname, molecule_str); perror (buf); exit (1); } if (verbose_p) fprintf (stderr, "%s: directory %s\n", progname, molecule_str); nfiles = 0; list_size = 100; files = (char **) calloc (sizeof(*files), list_size); while ((dentry = readdir (pdb_dir))) { int L = strlen (dentry->d_name); if (L > 4 && !strcasecmp (dentry->d_name + L - 4, ".pdb")) { char *fn; if (nfiles >= list_size-1) { list_size = (list_size + 10) * 1.2; files = (char **) realloc (files, list_size * sizeof(*files)); if (!files) { OOM: fprintf (stderr, "%s: out of memory (%d files)\n", progname, nfiles); exit (1); } } fn = (char *) malloc (strlen (molecule_str) + L + 10); if (!fn) goto OOM; strcpy (fn, molecule_str); if (fn[strlen(fn)-1] != '/') strcat (fn, "/"); strcat (fn, dentry->d_name); files[nfiles++] = fn; if (verbose_p) fprintf (stderr, "%s: file %s\n", progname, fn); } } closedir (pdb_dir); if (nfiles == 0) fprintf (stderr, "%s: no .pdb files in directory %s\n", progname, molecule_str); } else { files = (char **) malloc (sizeof (*files)); nfiles = 1; files[0] = strdup (molecule_str); if (verbose_p) fprintf (stderr, "%s: file %s\n", progname, molecule_str); } mc->nmolecules = nfiles; mc->molecules = (molecule *) calloc (sizeof (molecule), mc->nmolecules); molecule_ctr = 0; for (i = 0; i < mc->nmolecules; i++) { if (verbose_p) fprintf (stderr, "%s: reading %s\n", progname, files[i]); if (!parse_pdb_file (&mc->molecules[molecule_ctr], files[i])) { if ((wire || !do_atoms) && !do_labels && mc->molecules[molecule_ctr].nbonds == 0) { /* If we're not drawing atoms (e.g., wireframe mode), and there is no bond info, then make sure labels are turned on, or we'll be looking at a black screen... */ fprintf (stderr, "%s: %s: no bonds: turning -label on.\n", progname, files[i]); do_labels = 1; } free (files[i]); files[i] = 0; molecule_ctr++; } } free (files); files = 0; mc->nmolecules = molecule_ctr; } # endif /* LOAD_FILES */ if (mc->nmolecules == 0) /* do the builtins if no files */ { mc->nmolecules = countof(builtin_pdb_data); mc->molecules = (molecule *) calloc (sizeof (molecule), mc->nmolecules); for (i = 0; i < mc->nmolecules; i++) { char name[100]; sprintf (name, "", i); if (verbose_p) fprintf (stderr, "%s: reading %s\n", progname, name); parse_pdb_data (&mc->molecules[i], builtin_pdb_data[i], name, 1); } } for (i = 0; i < mc->nmolecules; i++) { generate_molecule_formula (&mc->molecules[i]); insert_vertical_whitespace ((char *) mc->molecules[i].label); } } /* Window management, etc */ ENTRYPOINT void reshape_molecule (ModeInfo *mi, int width, int height) { GLfloat h = (GLfloat) height / (GLfloat) width; glViewport (0, 0, (GLint) width, (GLint) height); glMatrixMode(GL_PROJECTION); glLoadIdentity(); gluPerspective (30.0, 1/h, 20.0, 100.0); glMatrixMode(GL_MODELVIEW); glLoadIdentity(); gluLookAt( 0.0, 0.0, 30.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0); # ifdef HAVE_MOBILE /* Keep it the same relative size when rotated. */ { int o = (int) current_device_rotation(); if (o != 0 && o != 180 && o != -180) glScalef (1/h, 1/h, 1/h); } # endif glClear(GL_COLOR_BUFFER_BIT); } static void gl_init (ModeInfo *mi) { static const GLfloat pos[4] = {1.0, 0.4, 0.9, 0.0}; static const GLfloat amb[4] = {0.0, 0.0, 0.0, 1.0}; static const GLfloat dif[4] = {0.8, 0.8, 0.8, 1.0}; static const GLfloat spc[4] = {1.0, 1.0, 1.0, 1.0}; glLightfv(GL_LIGHT0, GL_POSITION, pos); glLightfv(GL_LIGHT0, GL_AMBIENT, amb); glLightfv(GL_LIGHT0, GL_DIFFUSE, dif); glLightfv(GL_LIGHT0, GL_SPECULAR, spc); } static void startup_blurb (ModeInfo *mi) { molecule_configuration *mc = &mcs[MI_SCREEN(mi)]; const char *s = "Constructing molecules..."; print_texture_label (mi->dpy, mc->title_font, mi->xgwa.width, mi->xgwa.height, 0, s); glFinish(); glXSwapBuffers(MI_DISPLAY(mi), MI_WINDOW(mi)); } ENTRYPOINT Bool molecule_handle_event (ModeInfo *mi, XEvent *event) { molecule_configuration *mc = &mcs[MI_SCREEN(mi)]; if (gltrackball_event_handler (event, mc->trackball, MI_WIDTH (mi), MI_HEIGHT (mi), &mc->button_down_p)) return True; else { if (event->xany.type == KeyPress) { KeySym keysym; char c = 0; XLookupString (&event->xkey, &c, 1, &keysym, 0); if (c == '<' || c == ',' || c == '-' || c == '_' || keysym == XK_Left || keysym == XK_Up || keysym == XK_Prior) { mc->next = -1; goto SWITCH; } else if (c == '>' || c == '.' || c == '=' || c == '+' || keysym == XK_Right || keysym == XK_Down || keysym == XK_Next) { mc->next = 1; goto SWITCH; } } if (screenhack_event_helper (MI_DISPLAY(mi), MI_WINDOW(mi), event)) { SWITCH: mc->mode = 1; mc->mode_tick = 4; return True; } } return False; } ENTRYPOINT void init_molecule (ModeInfo *mi) { molecule_configuration *mc; int wire; if (!mcs) { mcs = (molecule_configuration *) calloc (MI_NUM_SCREENS(mi), sizeof (molecule_configuration)); if (!mcs) { fprintf(stderr, "%s: out of memory\n", progname); exit(1); } } mc = &mcs[MI_SCREEN(mi)]; if ((mc->glx_context = init_GL(mi)) != NULL) { gl_init(mi); reshape_molecule (mi, MI_WIDTH(mi), MI_HEIGHT(mi)); } load_fonts (mi); startup_blurb (mi); wire = MI_IS_WIREFRAME(mi); { Bool spinx=False, spiny=False, spinz=False; double spin_speed = 0.5; double spin_accel = 0.3; double wander_speed = 0.01; char *s = do_spin; while (*s) { if (*s == 'x' || *s == 'X') spinx = True; else if (*s == 'y' || *s == 'Y') spiny = True; else if (*s == 'z' || *s == 'Z') spinz = True; else if (*s == '0') ; else { fprintf (stderr, "%s: spin must contain only the characters X, Y, or Z (not \"%s\")\n", progname, do_spin); exit (1); } s++; } mc->rot = make_rotator (spinx ? spin_speed : 0, spiny ? spin_speed : 0, spinz ? spin_speed : 0, spin_accel, do_wander ? wander_speed : 0, (spinx && spiny && spinz)); mc->trackball = gltrackball_init (True); } orig_do_labels = do_labels; orig_do_atoms = do_atoms; orig_do_bonds = do_bonds; orig_do_shells = do_shells; orig_wire = MI_IS_WIREFRAME(mi); mc->molecule_dlist = glGenLists(1); if (do_shells) mc->shell_dlist = glGenLists(1); load_molecules (mi); mc->which = random() % mc->nmolecules; mc->no_label_threshold = get_float_resource (mi->dpy, "noLabelThreshold", "NoLabelThreshold"); mc->wireframe_threshold = get_float_resource (mi->dpy, "wireframeThreshold", "WireframeThreshold"); mc->mode = 0; if (wire) do_bonds = 1; } /* Put the labels on the atoms. This can't be a part of the display list because of the games we play with the translation matrix. */ static void draw_labels (ModeInfo *mi) { molecule_configuration *mc = &mcs[MI_SCREEN(mi)]; int wire = MI_IS_WIREFRAME(mi); molecule *m = &mc->molecules[mc->which]; int i; if (!do_labels) return; for (i = 0; i < m->natoms; i++) { molecule_atom *a = &m->atoms[i]; GLfloat size = atom_size (a); GLfloat m[4][4]; glPushMatrix(); if (!wire) set_atom_color (mi, a, True, 1); /* First, we translate the origin to the center of the atom. Then we retrieve the prevailing modelview matrix, which includes any rotation, wandering, and user-trackball-rolling of the scene. We set the top 3x3 cells of that matrix to be the identity matrix. This removes all rotation from the matrix, while leaving the translation alone. This has the effect of leaving the prevailing coordinate system perpendicular to the camera view: were we to draw a square face, it would be in the plane of the screen. Now we translate by `size' toward the viewer -- so that the origin is *just in front* of the ball. Then we draw the label text, allowing the depth buffer to do its work: that way, labels on atoms will be occluded properly when other atoms move in front of them. This technique (of neutralizing rotation relative to the observer, after both rotations and translations have been applied) is known as "billboarding". */ glTranslatef(a->x, a->y, a->z); /* get matrix */ glGetFloatv (GL_MODELVIEW_MATRIX, &m[0][0]); /* load rot. identity */ m[0][0] = 1; m[1][0] = 0; m[2][0] = 0; m[0][1] = 0; m[1][1] = 1; m[2][1] = 0; m[0][2] = 0; m[1][2] = 0; m[2][2] = 1; glLoadIdentity(); /* reset modelview */ glMultMatrixf (&m[0][0]); /* replace with ours */ glTranslatef (0, 0, (size * 1.1)); /* move toward camera */ glRotatef (current_device_rotation(), 0, 0, 1); /* right side up */ { XCharStruct e; int w, h; GLfloat s; texture_string_metrics (mc->atom_font, a->label, &e, 0, 0); w = e.width; h = e.ascent + e.descent; s = 1.0 / h; /* Scale to unit */ s *= mc->overall_scale; /* Scale to size of atom */ s *= 0.8; /* Shrink a bit */ glScalef (s, s, 1); glTranslatef (-w/2, -h/2, 0); print_texture_string (mc->atom_font, a->label); } glPopMatrix(); } } static void pick_new_molecule (ModeInfo *mi, time_t last) { molecule_configuration *mc = &mcs[MI_SCREEN(mi)]; if (mc->nmolecules == 1) { if (last != 0) return; mc->which = 0; } else if (last == 0) { mc->which = random() % mc->nmolecules; } else if (mc->next < 0) { mc->which--; if (mc->which < 0) mc->which = mc->nmolecules-1; mc->next = 0; } else if (mc->next > 0) { mc->which++; if (mc->which >= mc->nmolecules) mc->which = 0; mc->next = 0; } else { int n = mc->which; while (n == mc->which) n = random() % mc->nmolecules; mc->which = n; } if (verbose_p) { char *name = strdup (mc->molecules[mc->which].label); char *s = strpbrk (name, "\r\n"); if (s) *s = 0; fprintf (stderr, "%s: drawing %s (%d)\n", progname, name, mc->which); free (name); } mc->polygon_count = 0; glNewList (mc->molecule_dlist, GL_COMPILE); ensure_bounding_box_visible (mi); do_labels = orig_do_labels; do_atoms = orig_do_atoms; do_bonds = orig_do_bonds; do_shells = orig_do_shells; MI_IS_WIREFRAME(mi) = orig_wire; if (mc->molecule_size > mc->no_label_threshold) do_labels = 0; if (mc->molecule_size > mc->wireframe_threshold) MI_IS_WIREFRAME(mi) = 1; if (MI_IS_WIREFRAME(mi)) do_bonds = 1, do_shells = 0; if (!do_bonds) do_shells = 0; if (! (do_bonds || do_atoms || do_labels)) { /* Make sure *something* shows up! */ MI_IS_WIREFRAME(mi) = 1; do_bonds = 1; } build_molecule (mi, False); glEndList(); if (do_shells) { glNewList (mc->shell_dlist, GL_COMPILE); ensure_bounding_box_visible (mi); do_labels = 0; do_atoms = 1; do_bonds = 0; build_molecule (mi, True); glEndList(); do_bonds = orig_do_bonds; do_atoms = orig_do_atoms; do_labels = orig_do_labels; } } ENTRYPOINT void draw_molecule (ModeInfo *mi) { time_t now = time ((time_t *) 0); GLfloat speed = 4.0; /* speed at which the zoom out/in happens */ molecule_configuration *mc = &mcs[MI_SCREEN(mi)]; Display *dpy = MI_DISPLAY(mi); Window window = MI_WINDOW(mi); if (!mc->glx_context) return; glXMakeCurrent(MI_DISPLAY(mi), MI_WINDOW(mi), *(mc->glx_context)); if (mc->draw_time == 0) { pick_new_molecule (mi, mc->draw_time); mc->draw_time = now; } else if (mc->mode == 0) { if (mc->draw_tick++ > 10) { time_t now = time((time_t *) 0); if (mc->draw_time == 0) mc->draw_time = now; mc->draw_tick = 0; if (!mc->button_down_p && mc->nmolecules > 1 && mc->draw_time + timeout <= now) { /* randomize molecules every -timeout seconds */ mc->mode = 1; /* go out */ mc->mode_tick = 80 / speed; mc->draw_time = now; } } } else if (mc->mode == 1) /* out */ { if (--mc->mode_tick <= 0) { mc->mode_tick = 80 / speed; mc->mode = 2; /* go in */ pick_new_molecule (mi, mc->draw_time); } } else if (mc->mode == 2) /* in */ { if (--mc->mode_tick <= 0) mc->mode = 0; /* normal */ } else abort(); glPushMatrix (); glScalef(1.1, 1.1, 1.1); { double x, y, z; get_position (mc->rot, &x, &y, &z, !mc->button_down_p); glTranslatef((x - 0.5) * 9, (y - 0.5) * 9, (z - 0.5) * 9); gltrackball_rotate (mc->trackball); get_rotation (mc->rot, &x, &y, &z, !mc->button_down_p); glRotatef (x * 360, 1.0, 0.0, 0.0); glRotatef (y * 360, 0.0, 1.0, 0.0); glRotatef (z * 360, 0.0, 0.0, 1.0); } glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); if (mc->mode != 0) { GLfloat s = (mc->mode == 1 ? mc->mode_tick / (80 / speed) : ((80 / speed) - mc->mode_tick + 1) / (80 / speed)); glScalef (s, s, s); } glPushMatrix(); glCallList (mc->molecule_dlist); if (mc->mode == 0) { molecule *m = &mc->molecules[mc->which]; draw_labels (mi); /* This can't go in the display list, or the characters are spaced wrongly when the window is resized. */ if (do_titles && m->label && *m->label) { set_atom_color (mi, 0, True, 1); print_texture_label (mi->dpy, mc->title_font, mi->xgwa.width, mi->xgwa.height, 1, m->label); } } glPopMatrix(); if (do_shells) { glColorMask (GL_FALSE, GL_FALSE, GL_FALSE, GL_FALSE); glPushMatrix(); glCallList (mc->shell_dlist); glPopMatrix(); glColorMask (GL_TRUE, GL_TRUE, GL_TRUE, GL_TRUE); glDepthFunc (GL_EQUAL); glEnable (GL_BLEND); glBlendFunc (GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); glPushMatrix(); glCallList (mc->shell_dlist); glPopMatrix(); glDepthFunc (GL_LESS); glDisable (GL_BLEND); } glPopMatrix (); mi->polygon_count = mc->polygon_count; if (mi->fps_p) do_fps (mi); glFinish(); glXSwapBuffers(dpy, window); } XSCREENSAVER_MODULE ("Molecule", molecule) #endif /* USE_GL */ xscreensaver-5.36/hacks/glx/dangerball.c000664 000767 000024 00000021562 12710313176 020271 0ustar00jwzstaff000000 000000 /* dangerball, Copyright (c) 2001-2014 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. */ #define DEFAULTS "*delay: 30000 \n" \ "*count: 30 \n" \ "*showFPS: False \n" \ "*wireframe: False \n" \ "*suppressRotationAnimation: True\n" \ # define refresh_ball 0 # define release_ball 0 #undef countof #define countof(x) (sizeof((x))/sizeof((*x))) #include "xlockmore.h" #include "colors.h" #include "sphere.h" #include "tube.h" #include "rotator.h" #include "gltrackball.h" #include #ifdef USE_GL /* whole file */ #define DEF_SPIN "True" #define DEF_WANDER "True" #define DEF_SPEED "0.05" #define SPIKE_FACES 12 /* how densely to render spikes */ #define SMOOTH_SPIKES True #define SPHERE_SLICES 32 /* how densely to render spheres */ #define SPHERE_STACKS 16 typedef struct { GLXContext *glx_context; rotator *rot; trackball_state *trackball; Bool button_down_p; GLuint ball_list; GLuint spike_list; GLfloat pos; int *spikes; int ncolors; XColor *colors; int ccolor; int color_shift; } ball_configuration; static ball_configuration *bps = NULL; static Bool do_spin; static GLfloat speed; static Bool do_wander; static XrmOptionDescRec opts[] = { { "-spin", ".spin", XrmoptionNoArg, "True" }, { "+spin", ".spin", XrmoptionNoArg, "False" }, { "-speed", ".speed", XrmoptionSepArg, 0 }, { "-wander", ".wander", XrmoptionNoArg, "True" }, { "+wander", ".wander", XrmoptionNoArg, "False" } }; static argtype vars[] = { {&do_spin, "spin", "Spin", DEF_SPIN, t_Bool}, {&do_wander, "wander", "Wander", DEF_WANDER, t_Bool}, {&speed, "speed", "Speed", DEF_SPEED, t_Float}, }; ENTRYPOINT ModeSpecOpt ball_opts = {countof(opts), opts, countof(vars), vars, NULL}; /* Window management, etc */ ENTRYPOINT void reshape_ball (ModeInfo *mi, int width, int height) { GLfloat h = (GLfloat) height / (GLfloat) width; glViewport (0, 0, (GLint) width, (GLint) height); glMatrixMode(GL_PROJECTION); glLoadIdentity(); gluPerspective (30.0, 1/h, 1.0, 100.0); glMatrixMode(GL_MODELVIEW); glLoadIdentity(); gluLookAt( 0.0, 0.0, 30.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0); # ifdef HAVE_MOBILE /* Keep it the same relative size when rotated. */ { int o = (int) current_device_rotation(); if (o != 0 && o != 180 && o != -180) glScalef (1/h, 1/h, 1/h); } # endif glClear(GL_COLOR_BUFFER_BIT); } static void randomize_spikes (ModeInfo *mi) { ball_configuration *bp = &bps[MI_SCREEN(mi)]; int i; bp->pos = 0; for (i = 0; i < MI_COUNT(mi); i++) { bp->spikes[i*2] = (random() % 360) - 180; bp->spikes[i*2+1] = (random() % 180) - 90; } # define ROT_SCALE 22 for (i = 0; i < MI_COUNT(mi) * 2; i++) bp->spikes[i] = (bp->spikes[i] / ROT_SCALE) * ROT_SCALE; if ((random() % 3) == 0) bp->color_shift = random() % (bp->ncolors / 2); else bp->color_shift = 0; } static void draw_spikes (ModeInfo *mi) { ball_configuration *bp = &bps[MI_SCREEN(mi)]; GLfloat diam = 0.2; GLfloat pos = bp->pos; int i; if (pos < 0) pos = -pos; pos = (asin (0.5 + pos/2) - 0.5) * 2; for (i = 0; i < MI_COUNT(mi); i++) { glPushMatrix(); glRotatef(bp->spikes[i*2], 0, 1, 0); glRotatef(bp->spikes[i*2+1], 0, 0, 1); glTranslatef(0.7, 0, 0); glRotatef(-90, 0, 0, 1); glScalef (diam, pos, diam); glCallList (bp->spike_list); glPopMatrix(); mi->polygon_count += (SPIKE_FACES + 1); } } static void move_spikes (ModeInfo *mi) { ball_configuration *bp = &bps[MI_SCREEN(mi)]; if (bp->pos >= 0) /* moving outward */ { bp->pos += speed; if (bp->pos >= 1) /* reverse gears at apex */ bp->pos = -1; } else /* moving inward */ { bp->pos += speed; if (bp->pos >= 0) /* stop at end */ randomize_spikes (mi); } } ENTRYPOINT Bool ball_handle_event (ModeInfo *mi, XEvent *event) { ball_configuration *bp = &bps[MI_SCREEN(mi)]; if (gltrackball_event_handler (event, bp->trackball, MI_WIDTH (mi), MI_HEIGHT (mi), &bp->button_down_p)) return True; return False; } ENTRYPOINT void init_ball (ModeInfo *mi) { ball_configuration *bp; int wire = MI_IS_WIREFRAME(mi); if (!bps) { bps = (ball_configuration *) calloc (MI_NUM_SCREENS(mi), sizeof (ball_configuration)); if (!bps) { fprintf(stderr, "%s: out of memory\n", progname); exit(1); } } bp = &bps[MI_SCREEN(mi)]; bp->glx_context = init_GL(mi); reshape_ball (mi, MI_WIDTH(mi), MI_HEIGHT(mi)); if (!wire) { GLfloat pos[4] = {1.0, 1.0, 1.0, 0.0}; GLfloat amb[4] = {0.0, 0.0, 0.0, 1.0}; GLfloat dif[4] = {1.0, 1.0, 1.0, 1.0}; GLfloat spc[4] = {0.0, 1.0, 1.0, 1.0}; glEnable(GL_LIGHTING); glEnable(GL_LIGHT0); glEnable(GL_DEPTH_TEST); glEnable(GL_CULL_FACE); glLightfv(GL_LIGHT0, GL_POSITION, pos); glLightfv(GL_LIGHT0, GL_AMBIENT, amb); glLightfv(GL_LIGHT0, GL_DIFFUSE, dif); glLightfv(GL_LIGHT0, GL_SPECULAR, spc); } { double spin_speed = 10.0; double wander_speed = 0.12; double spin_accel = 2.0; bp->rot = make_rotator (do_spin ? spin_speed : 0, do_spin ? spin_speed : 0, do_spin ? spin_speed : 0, spin_accel, do_wander ? wander_speed : 0, True); bp->trackball = gltrackball_init (True); } bp->ncolors = 128; bp->colors = (XColor *) calloc(bp->ncolors, sizeof(XColor)); make_smooth_colormap (0, 0, 0, bp->colors, &bp->ncolors, False, 0, False); bp->spikes = (int *) calloc(MI_COUNT(mi), sizeof(*bp->spikes) * 2); bp->ball_list = glGenLists (1); bp->spike_list = glGenLists (1); glNewList (bp->ball_list, GL_COMPILE); unit_sphere (SPHERE_STACKS, SPHERE_SLICES, wire); glEndList (); glNewList (bp->spike_list, GL_COMPILE); cone (0, 0, 0, 0, 1, 0, 1, 0, SPIKE_FACES, SMOOTH_SPIKES, False, wire); glEndList (); randomize_spikes (mi); } ENTRYPOINT void draw_ball (ModeInfo *mi) { ball_configuration *bp = &bps[MI_SCREEN(mi)]; Display *dpy = MI_DISPLAY(mi); Window window = MI_WINDOW(mi); int c2; static const GLfloat bspec[4] = {1.0, 1.0, 1.0, 1.0}; static const GLfloat sspec[4] = {0.0, 0.0, 0.0, 1.0}; static const GLfloat bshiny = 128.0; static const GLfloat sshiny = 0.0; GLfloat bcolor[4] = {0.0, 0.0, 0.0, 1.0}; GLfloat scolor[4] = {0.0, 0.0, 0.0, 1.0}; if (!bp->glx_context) return; glXMakeCurrent(MI_DISPLAY(mi), MI_WINDOW(mi), *(bp->glx_context)); glShadeModel(GL_SMOOTH); glEnable(GL_DEPTH_TEST); glEnable(GL_NORMALIZE); glEnable(GL_CULL_FACE); glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glPushMatrix (); glScalef(1.1, 1.1, 1.1); { double x, y, z; get_position (bp->rot, &x, &y, &z, !bp->button_down_p); glTranslatef((x - 0.5) * 8, (y - 0.5) * 8, (z - 0.5) * 15); gltrackball_rotate (bp->trackball); get_rotation (bp->rot, &x, &y, &z, !bp->button_down_p); glRotatef (x * 360, 1.0, 0.0, 0.0); glRotatef (y * 360, 0.0, 1.0, 0.0); glRotatef (z * 360, 0.0, 0.0, 1.0); } bcolor[0] = bp->colors[bp->ccolor].red / 65536.0; bcolor[1] = bp->colors[bp->ccolor].green / 65536.0; bcolor[2] = bp->colors[bp->ccolor].blue / 65536.0; c2 = (bp->ccolor + bp->color_shift) % bp->ncolors; scolor[0] = bp->colors[c2].red / 65536.0; scolor[1] = bp->colors[c2].green / 65536.0; scolor[2] = bp->colors[c2].blue / 65536.0; bp->ccolor++; if (bp->ccolor >= bp->ncolors) bp->ccolor = 0; mi->polygon_count = 0; glScalef (2.0, 2.0, 2.0); move_spikes (mi); glMaterialfv (GL_FRONT, GL_SPECULAR, bspec); glMateriali (GL_FRONT, GL_SHININESS, bshiny); glMaterialfv (GL_FRONT, GL_AMBIENT_AND_DIFFUSE, bcolor); glCallList (bp->ball_list); mi->polygon_count += (SPHERE_SLICES * SPHERE_STACKS); glMaterialfv (GL_FRONT, GL_SPECULAR, sspec); glMaterialf (GL_FRONT, GL_SHININESS, sshiny); glMaterialfv (GL_FRONT, GL_AMBIENT_AND_DIFFUSE, scolor); draw_spikes (mi); glPopMatrix (); if (mi->fps_p) do_fps (mi); glFinish(); glXSwapBuffers(dpy, window); } XSCREENSAVER_MODULE_2 ("DangerBall", dangerball, ball) #endif /* USE_GL */ xscreensaver-5.36/hacks/glx/sphere.c000644 000767 000024 00000010117 12712703635 017461 0ustar00jwzstaff000000 000000 /* sphere, Copyright (c) 2002 Paul Bourke , * Copyright (c) 2010-2014 Jamie Zawinski * Utility function to create a unit sphere in GL. * * 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. * * 8-Oct-98: dek Released initial version of "glplanet" * 21-Mar-01: jwz@jwz.org Broke sphere routine out into its own file. * 28-Feb-02: jwz@jwz.org New implementation from Paul Bourke: * http://astronomy.swin.edu.au/~pbourke/opengl/sphere/ * 21-Aug-10 jwz@jwz.org Converted to use glDrawArrays, for OpenGL ES. */ #include #include #ifdef HAVE_CONFIG_H # include "config.h" #endif #ifdef HAVE_COCOA #elif defined(HAVE_ANDROID) # include #else /* real X11 */ # include #endif #ifdef HAVE_JWZGLES # include "jwzgles.h" #endif /* HAVE_JWZGLES */ #include "sphere.h" typedef struct { GLfloat x, y, z; } XYZ; static int unit_sphere_1 (int stacks, int slices, int wire_p, int half_p) { int polys = 0; int i,j; double theta1, theta2, theta3; XYZ p, n; XYZ la = { 0, -1, 0 }, lb = { 0, -1, 0 }; XYZ c = {0, 0, 0}; /* center */ double r = 1.0; /* radius */ int stacks2 = stacks * 2; int end = (half_p ? stacks/2 : stacks); int mode = (wire_p ? GL_LINE_STRIP : GL_TRIANGLE_STRIP); int arraysize, out; struct { XYZ p; XYZ n; GLfloat s, t; } *array; if (r < 0) r = -r; if (slices < 0) slices = -slices; arraysize = (stacks+1) * (slices+1) * (wire_p ? 4 : 2); array = (void *) calloc (arraysize, sizeof(*array)); if (! array) abort(); out = 0; if (slices < 4 || stacks < 2 || r <= 0) { mode = GL_POINTS; array[out++].p = c; goto END; } for (j = 0; j < end; j++) { theta1 = j * (M_PI+M_PI) / stacks2 - M_PI_2; theta2 = (j + 1) * (M_PI+M_PI) / stacks2 - M_PI_2; for (i = slices; i >= 0; i--) { theta3 = i * (M_PI+M_PI) / slices; if (wire_p) { array[out++].p = lb; /* vertex */ array[out++].p = la; /* vertex */ } n.x = cos (theta2) * cos(theta3); n.y = sin (theta2); n.z = cos (theta2) * sin(theta3); p.x = c.x + r * n.x; p.y = c.y + r * n.y; p.z = c.z + r * n.z; array[out].p = p; /* vertex */ array[out].n = n; /* normal */ array[out].s = i / (GLfloat) slices; /* texture */ array[out].t = 2*(j+1) / (GLfloat) stacks2; out++; if (wire_p) la = p; n.x = cos(theta1) * cos(theta3); n.y = sin(theta1); n.z = cos(theta1) * sin(theta3); p.x = c.x + r * n.x; p.y = c.y + r * n.y; p.z = c.z + r * n.z; array[out].p = p; /* vertex */ array[out].n = n; /* normal */ array[out].s = i / (GLfloat) slices; /* texture */ array[out].t = 2*j / (GLfloat) stacks2; out++; if (out >= arraysize) abort(); if (wire_p) lb = p; polys++; } } END: glEnableClientState (GL_VERTEX_ARRAY); glEnableClientState (GL_NORMAL_ARRAY); glEnableClientState (GL_TEXTURE_COORD_ARRAY); glVertexPointer (3, GL_FLOAT, sizeof(*array), &array[0].p); glNormalPointer ( GL_FLOAT, sizeof(*array), &array[0].n); glTexCoordPointer (2, GL_FLOAT, sizeof(*array), &array[0].s); glDrawArrays (mode, 0, out); free (array); return polys; } int unit_sphere (int stacks, int slices, int wire_p) { return unit_sphere_1 (stacks, slices, wire_p, 0); } int unit_dome (int stacks, int slices, int wire_p) { return unit_sphere_1 (stacks, slices, wire_p, 1); } xscreensaver-5.36/hacks/glx/tube.c000644 000767 000024 00000022002 12701612217 017117 0ustar00jwzstaff000000 000000 /* tube, Copyright (c) 2001-2012 Jamie Zawinski * Utility functions to create tubes and cones in GL. * * 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. */ #include #ifdef HAVE_CONFIG_H # include "config.h" #endif #include #ifdef HAVE_COCOA #elif defined(HAVE_ANDROID) # include #else # include #endif #ifdef HAVE_JWZGLES # include "jwzgles.h" #endif /* HAVE_JWZGLES */ #include "tube.h" typedef struct { GLfloat x, y, z; } XYZ; static int unit_tube (int faces, int smooth, int caps_p, int wire_p) { int i; int polys = 0; GLfloat step = M_PI * 2 / faces; GLfloat s2 = step/2; GLfloat th; GLfloat x, y, x0=0, y0=0; int z = 0; int arraysize, out; struct { XYZ p; XYZ n; GLfloat s, t; } *array; arraysize = (faces+1) * 6; array = (void *) calloc (arraysize, sizeof(*array)); if (! array) abort(); out = 0; /* #### texture coords are currently not being computed */ /* side walls */ th = 0; x = 1; y = 0; if (!smooth) { x0 = cos (s2); y0 = sin (s2); } if (smooth) faces++; for (i = 0; i < faces; i++) { array[out].p.x = x; /* bottom point A */ array[out].p.y = 0; array[out].p.z = y; if (smooth) array[out].n = array[out].p; /* its own normal */ else { array[out].n.x = x0; /* mid-plane normal */ array[out].n.y = 0; array[out].n.z = y0; } out++; array[out].p.x = x; /* top point A */ array[out].p.y = 1; array[out].p.z = y; array[out].n = array[out-1].n; /* same normal */ out++; th += step; x = cos (th); y = sin (th); if (!smooth) { x0 = cos (th + s2); y0 = sin (th + s2); array[out].p.x = x; /* top point B */ array[out].p.y = 1; array[out].p.z = y; array[out].n = array[out-1].n; /* same normal */ out++; array[out] = array[out-3]; /* bottom point A */ out++; array[out] = array[out-2]; /* top point B */ out++; array[out].p.x = x; /* bottom point B */ array[out].p.y = 0; array[out].p.z = y; array[out].n = array[out-1].n; /* same normal */ out++; polys++; } polys++; if (out >= arraysize) abort(); } glEnableClientState (GL_VERTEX_ARRAY); glEnableClientState (GL_NORMAL_ARRAY); glEnableClientState (GL_TEXTURE_COORD_ARRAY); glVertexPointer (3, GL_FLOAT, sizeof(*array), &array[0].p); glNormalPointer ( GL_FLOAT, sizeof(*array), &array[0].n); glTexCoordPointer (2, GL_FLOAT, sizeof(*array), &array[0].s); glFrontFace(GL_CCW); glDrawArrays ((wire_p ? GL_LINES : (smooth ? GL_TRIANGLE_STRIP : GL_TRIANGLES)), 0, out); /* End caps */ if (caps_p) for (z = 0; z <= 1; z++) { out = 0; if (! wire_p) { array[out].p.x = 0; array[out].p.y = z; array[out].p.z = 0; array[out].n.x = 0; array[out].n.y = (z == 0 ? -1 : 1); array[out].n.z = 0; out++; } th = 0; for (i = (z == 0 ? 0 : faces); (z == 0 ? i <= faces : i >= 0); i += (z == 0 ? 1 : -1)) { GLfloat x = cos (th); GLfloat y = sin (th); array[out] = array[0]; /* same normal and texture */ array[out].p.x = x; array[out].p.y = z; array[out].p.z = y; out++; th += (z == 0 ? step : -step); polys++; if (out >= arraysize) abort(); } glVertexPointer (3, GL_FLOAT, sizeof(*array), &array[0].p); glNormalPointer ( GL_FLOAT, sizeof(*array), &array[0].n); glTexCoordPointer (2, GL_FLOAT, sizeof(*array), &array[0].s); glFrontFace(GL_CCW); glDrawArrays ((wire_p ? GL_LINE_LOOP : GL_TRIANGLE_FAN), 0, out); } free(array); return polys; } static int unit_cone (int faces, int smooth, int cap_p, int wire_p) { int i; int polys = 0; GLfloat step = M_PI * 2 / faces; GLfloat s2 = step/2; GLfloat th; GLfloat x, y, x0, y0; int arraysize, out; struct { XYZ p; XYZ n; GLfloat s, t; } *array; arraysize = (faces+1) * 3; array = (void *) calloc (arraysize, sizeof(*array)); if (! array) abort(); out = 0; /* #### texture coords are currently not being computed */ /* side walls */ th = 0; x = 1; y = 0; x0 = cos (s2); y0 = sin (s2); for (i = 0; i < faces; i++) { array[out].p.x = x; /* bottom point A */ array[out].p.y = 0; array[out].p.z = y; if (smooth) array[out].n = array[out].p; /* its own normal */ else { array[out].n.x = x0; /* mid-plane normal */ array[out].n.y = 0; array[out].n.z = y0; } out++; array[out].p.x = 0; /* tip point */ array[out].p.y = 1; array[out].p.z = 0; array[out].n.x = x0; /* mid-plane normal */ array[out].n.y = 0; array[out].n.z = y0; out++; th += step; x0 = cos (th + s2); y0 = sin (th + s2); x = cos (th); y = sin (th); array[out].p.x = x; /* bottom point B */ array[out].p.y = 0; array[out].p.z = y; if (smooth) array[out].n = array[out].p; /* its own normal */ else array[out].n = array[out-1].n; /* same normal as other two */ out++; if (out >= arraysize) abort(); polys++; } glEnableClientState (GL_VERTEX_ARRAY); glEnableClientState (GL_NORMAL_ARRAY); glEnableClientState (GL_TEXTURE_COORD_ARRAY); glVertexPointer (3, GL_FLOAT, sizeof(*array), &array[0].p); glNormalPointer ( GL_FLOAT, sizeof(*array), &array[0].n); glTexCoordPointer (2, GL_FLOAT, sizeof(*array), &array[0].s); glFrontFace(GL_CCW); glDrawArrays ((wire_p ? GL_LINES : GL_TRIANGLES), 0, out); /* End cap */ if (cap_p) { out = 0; if (! wire_p) { array[out].p.x = 0; array[out].p.y = 0; array[out].p.z = 0; array[out].n.x = 0; array[out].n.y = -1; array[out].n.z = 0; out++; } for (i = 0, th = 0; i <= faces; i++) { GLfloat x = cos (th); GLfloat y = sin (th); array[out] = array[0]; /* same normal and texture */ array[out].p.x = x; array[out].p.y = 0; array[out].p.z = y; out++; th += step; polys++; if (out >= arraysize) abort(); } glVertexPointer (3, GL_FLOAT, sizeof(*array), &array[0].p); glNormalPointer ( GL_FLOAT, sizeof(*array), &array[0].n); glTexCoordPointer (2, GL_FLOAT, sizeof(*array), &array[0].s); glFrontFace(GL_CCW); glDrawArrays ((wire_p ? GL_LINE_LOOP : GL_TRIANGLE_FAN), 0, out); } free (array); return polys; } static int tube_1 (GLfloat x1, GLfloat y1, GLfloat z1, GLfloat x2, GLfloat y2, GLfloat z2, GLfloat diameter, GLfloat cap_size, int faces, int smooth, int caps_p, int wire_p, int cone_p) { GLfloat length, X, Y, Z; int polys = 0; if (diameter <= 0) abort(); X = (x2 - x1); Y = (y2 - y1); Z = (z2 - z1); if (X == 0 && Y == 0 && Z == 0) return 0; length = sqrt (X*X + Y*Y + Z*Z); glPushMatrix(); glTranslatef(x1, y1, z1); glRotatef (-atan2 (X, Y) * (180 / M_PI), 0, 0, 1); glRotatef ( atan2 (Z, sqrt(X*X + Y*Y)) * (180 / M_PI), 1, 0, 0); glScalef (diameter, length, diameter); /* extend the endpoints of the tube by the cap size in both directions */ if (cap_size != 0) { GLfloat c = cap_size/length; glTranslatef (0, -c, 0); glScalef (1, 1+c+c, 1); } if (cone_p) polys = unit_cone (faces, smooth, caps_p, wire_p); else polys = unit_tube (faces, smooth, caps_p, wire_p); glPopMatrix(); return polys; } int tube (GLfloat x1, GLfloat y1, GLfloat z1, GLfloat x2, GLfloat y2, GLfloat z2, GLfloat diameter, GLfloat cap_size, int faces, int smooth, int caps_p, int wire_p) { return tube_1 (x1, y1, z1, x2, y2, z2, diameter, cap_size, faces, smooth, caps_p, wire_p, 0); } int cone (GLfloat x1, GLfloat y1, GLfloat z1, GLfloat x2, GLfloat y2, GLfloat z2, GLfloat diameter, GLfloat cap_size, int faces, int smooth, int cap_p, int wire_p) { return tube_1 (x1, y1, z1, x2, y2, z2, diameter, cap_size, faces, smooth, cap_p, wire_p, 1); } xscreensaver-5.36/hacks/glx/circuit.c000644 000767 000024 00000152167 12717726620 017655 0ustar00jwzstaff000000 000000 /* * circuit - Random electronic components floating around * * version 1.4 * * Since version 1.1: added to-220 transistor, added fuse * Since version 1.2: random display digits, LED improvements (flickering) * Since version 1.3: ICs look better, font textures, improved normals to * eliminate segmenting on curved surfaces, speedups * Since version 1.4: Added RCA connector, 3.5mm connector, slide switch, * surface mount, to-92 markings. Fixed ~5min crash. * Better LED illumination. Other minor changes. * * Copyright (C) 2001-2015 Ben Buxton (bb@cactii.net) * * 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. */ /* Written over a few days in a (successful) bid to learn GL coding * * -seven option is dedicated to all the Slarkeners * * This hack uses lookup tables for sin, cos and tan - it can do a lot */ #ifdef STANDALONE #define DEFAULTS "*delay: 20000 \n" \ "*showFPS: False \n" \ "*suppressRotationAnimation: True\n" \ "*componentFont: -*-courier-bold-r-normal-*-*-140-*-*-*-*-*-*" # define refresh_circuit 0 # define circuit_handle_event 0 # include "xlockmore.h" /* from the xscreensaver distribution */ #else /* !STANDALONE */ # include "xlock.h" /* from the xlockmore distribution */ #endif /* !STANDALONE */ #define DEF_SPIN "True" #define DEF_SEVEN "False" #define DEF_PARTS "10" #define DEF_ROTATESPEED "1" #define DEF_LIGHT "True" /* lifted from lament.c */ #define RAND(n) ((long) ((random() & 0x7fffffff) % ((long) (n)))) #define RANDSIGN() ((random() & 1) ? 1 : -1) #ifdef USE_GL #include "texfont.h" #undef countof #define countof(x) (sizeof((x))/sizeof((*x))) static int maxparts; static int rotatespeed; static int spin; static int uselight; static int seven; #undef countof #define countof(x) (sizeof((x))/sizeof((*x))) static XrmOptionDescRec opts[] = { {"-parts", ".circuit.parts", XrmoptionSepArg, 0 }, {"-rotate-speed", ".circuit.rotatespeed", XrmoptionSepArg, 0 }, {"+spin", ".circuit.spin", XrmoptionNoArg, "false" }, {"-spin", ".circuit.spin", XrmoptionNoArg, "true" }, {"+light", ".circuit.light", XrmoptionNoArg, "false" }, {"-light", ".circuit.light", XrmoptionNoArg, "true" }, {"+seven", ".circuit.seven", XrmoptionNoArg, "false" }, {"-seven", ".circuit.seven", XrmoptionNoArg, "true" }, }; static argtype vars[] = { {&maxparts, "parts", "Parts", DEF_PARTS, t_Int}, {&rotatespeed, "rotatespeed", "Rotatespeed", DEF_ROTATESPEED, t_Int}, {&spin, "spin", "Spin", DEF_SPIN, t_Bool}, {&uselight, "light", "Light", DEF_LIGHT, t_Bool}, {&seven, "seven", "Seven", DEF_SEVEN, t_Bool}, }; ENTRYPOINT ModeSpecOpt circuit_opts = {countof(opts), opts, countof(vars), vars, NULL}; #ifdef USE_MODULES ModStruct circuit_description = {"circuit", "init_circuit", "draw_circuit", "release_circuit", "draw_circuit", "init_circuit", NULL, &circuit_opts, 1000, 1, 2, 1, 4, 1.0, "", "Flying electronic components", 0, NULL}; #endif #define MAX_COMPONENTS 400 #define MOVE_MULT 0.02 static float f_rand(void) { return ((float)RAND(10000)/(float)10000); } #define RAND_RANGE(min, max) ((min) + (max - min) * f_rand()) /* Represents a band on a resistor/diode/etc */ typedef struct { float pos; /* relative position from start/previous band */ GLfloat r, g, b; /* colour of the band */ float len; /* length as a fraction of total length */ } Band; typedef struct { Band *b1, *b2, *b3, *b4; /* bands */ int b[4]; } Resistor; typedef struct { Band *band; GLfloat r, g, b; /* body colour */ } Diode; static const char * const transistortypes[] = { "TIP2955", "TIP32C", "LM 350T", "IRF730", "ULN2577", "7805T", "7912T", "TIP120", "2N6401", "BD239", "2SC1590", "MRF485", "SC141D" }; static const char * const to92types[] = { "C\n548", "C\n848", "74\nL05", "C\n858", "BC\n212L", "BC\n640", "BC\n337", "BC\n338", "S817", "78\nL12", "TL\n431", "LM\n35DZ", }; static const char * const smctypes[] = { "1M-", "1K", "1F", "B10", "S14", "Q3", "4A" }; typedef struct { int type; /* package type. 0 = to-92, 1 = to-220 */ const char *text; } Transistor; typedef struct { GLfloat r,g,b; /* LED colour */ int light; /* are we the light source? */ } LED; typedef struct { int type; /* 0 = electro, 1 = ceramic */ float width; /* width of an electro/ceramic */ float length; /* length of an electro */ } Capacitor; /* 3.5 mm plug */ typedef struct { int blah; } ThreeFive; /* slide switch */ typedef struct { int position; } Switch; typedef struct { int pins; const char *val; } ICTypes; static const ICTypes ictypes[] = { {8, "NE 555"}, {8, "LM 386N"}, {8, "ADC0831"}, {8, "LM 383T"}, {8, "TL071"}, {8, "LM 311"}, {8, "LM393"}, {8, "LM 3909"}, {14, "LM 380N"}, {14, "NE 556"}, {14, "TL074"}, {14, "LM324"}, {14, "LM339"}, {14, "MC1488"}, {14, "MC1489"}, {14, "LM1877-9"}, {14, "4011"}, {14, "4017"}, {14, "4013"}, {14, "4024"}, {14, "4066"}, {16, "4076"}, {16, "4049"}, {16, "4094"}, {16, "4043"}, {16, "4510"}, {16, "4511"}, {16, "4035"}, {16, "RS232"}, {16, "MC1800"}, {16, "ULN2081"}, {16, "UDN2953"}, {24, "ISD1416P"}, {24, "4515"}, {24, "TMS6264L"}, {24, "MC146818"} }; typedef struct { int type; /* 0 = DIL, 1 = flat square */ int pins; char text[100]; } IC; /* 7 segment display */ typedef struct { int value; /* displayed number */ } Disp; typedef struct { GLfloat l, w; } Fuse; typedef struct { GLfloat l, w; int col; } RCA; typedef struct { GLfloat x, y, z; /* current co-ordinates */ GLfloat dx, dy, dz; /* current direction */ GLfloat rotx, roty, rotz; /* rotation vector */ GLfloat drot; /* rotation velocity (degrees per frame) */ int norm; /* Normalize this component (for shine) */ int rdeg; /* current rotation degrees */ int angle; /* angle about the z axis */ int alpha; /* 0 if not a transparent component */ int type; /* 0 = resistor, 1 = diode, 2 = transistor, 3 = LED, 4 = cap, 5=IC, 6 = 7 seg disp */ void * c; /* pointer to the component */ } Component; /* standard colour codes */ static const GLfloat colorcodes [12][3] = { {0.0,0.0,0.0}, /* black 0 */ {0.49,0.25,0.08}, /* brown 1 */ {1.0,0.0,0.0}, /* red 2 */ {1.0,0.5,0.0}, /* orange 3 */ {1.0,1.0,0.0}, /* yellow 4 */ {0.0,1.0,0.0}, /* green 5 */ {0.0,0.5,1.0}, /* blue 6 */ {0.7,0.2,1.0}, /* violet 7 */ {0.5,0.5,0.5}, /* grey 8 */ {1.0,1.0,1.0}, /* white 9 */ {0.66,0.56,0.2}, /* gold 10 */ {0.8,0.8,0.8}, /* silver 11 */ }; /* base values for components - we can multiply by 0 - 1M */ static const int values [9][2] = { {1,0}, {2,2}, {3,3}, {4,7}, {5,6}, {6,8}, {7,5}, {8,2}, {9,1} }; typedef struct { GLXContext *glx_context; Window window; int XMAX, YMAX; int win_w, win_h; /* one lucky led gets to be a light source , unless -no-light*/ int light; int lighton; /* stores refs to textures */ int s_refs[50]; GLfloat viewer[3]; GLfloat lightpos[4]; float sin_table[720]; float cos_table[720]; float tan_table[720]; Component *components[MAX_COMPONENTS]; int band_list[12]; int band_list_polys[12]; GLfloat grid_col[3], grid_col2[3]; int display_i; GLfloat rotate_angle; texture_font_data *font; char *font_strings[50]; /* max of 40 textures */ int font_w[50], font_h[50]; int font_init; GLfloat draw_sx, draw_sy; /* bright spot co-ords */ int draw_sdir; /* 0 = left-right, 1 = right-left, 2 = up->dn, 3 = dn->up */ int draw_s; /* if spot is enabled */ float draw_ds; /* speed of spot */ } Circuit; static Circuit *circuit = NULL; static int DrawResistor(Circuit *, Resistor *); static int DrawDiode(Circuit *, Diode *); static int DrawTransistor(Circuit *, Transistor *); static int DrawLED(Circuit *, LED *); static int DrawIC(Circuit *, IC *); static int DrawCapacitor(Circuit *, Capacitor *); static int DrawDisp(Circuit *, Disp *); static int DrawFuse(Circuit *, Fuse *); static int DrawRCA(Circuit *, RCA *); static int DrawThreeFive(Circuit *, ThreeFive *); static int DrawSwitch(Circuit *, Switch *); static void reorder(Component *[]); static int circle(Circuit *, float, int,int); static int bandedCylinder(Circuit *, float, float , GLfloat, GLfloat , GLfloat, Band **, int); static int Rect(GLfloat , GLfloat , GLfloat, GLfloat , GLfloat ,GLfloat); static int ICLeg(GLfloat, GLfloat, GLfloat, int); static int HoledRectangle(Circuit *ci, GLfloat, GLfloat, GLfloat, GLfloat, int); static Resistor *NewResistor(void); static Diode *NewDiode(void); static Transistor *NewTransistor(ModeInfo *); static LED * NewLED(Circuit *); static Capacitor *NewCapacitor(Circuit *); static IC* NewIC(ModeInfo *); static Disp* NewDisp(Circuit *); static Fuse *NewFuse(Circuit *); static RCA *NewRCA(Circuit *); static ThreeFive *NewThreeFive(Circuit *); static Switch *NewSwitch(Circuit *); /* we use trig tables to speed things up - 200 calls to sin() in one frame can be a bit harsh.. */ static void make_tables(Circuit *ci) { int i; float f; f = 360 / (M_PI * 2); for (i = 0 ; i < 720 ; i++) { ci->sin_table[i] = sin(i/f); } for (i = 0 ; i < 720 ; i++) { ci->cos_table[i] = cos(i/f); } for (i = 0 ; i < 720 ; i++) { ci->tan_table[i] = tan(i/f); } } static int createCylinder (Circuit *ci, float length, float radius, int endcaps, int half) { int polys = 0; int a; /* current angle around cylinder */ int angle, norm; float z1, y1, z2, y2,ex; int nsegs; glPushMatrix(); nsegs = radius*MAX(ci->win_w, ci->win_h)/20; nsegs = MAX(nsegs, 4); if (nsegs % 2) nsegs += 1; angle = (half) ? (180 - 90/nsegs) : 374; z1 = radius; y1 = 0; glBegin(GL_QUADS); for (a = 0 ; a <= angle ; a+= angle/nsegs) { y2=radius*(float)ci->sin_table[(int)a]; z2=radius*(float)ci->cos_table[(int)a]; glNormal3f(0, y1, z1); glVertex3f(0,y1,z1); glVertex3f(length,y1,z1); glNormal3f(0, y2, z2); glVertex3f(length,y2,z2); glVertex3f(0,y2,z2); polys++; z1=z2; y1=y2; } glEnd(); if (half) { glBegin(GL_POLYGON); glNormal3f(0, 1, 0); glVertex3f(0, 0, radius); glVertex3f(length, 0, radius); glVertex3f(length, 0, 0 - radius); glVertex3f(0, 0, 0 - radius); polys++; glEnd(); } if (endcaps) { for(ex = 0 ; ex <= length ; ex += length) { z1 = radius; y1 = 0; norm = (ex == length) ? 1 : -1; glBegin(GL_TRIANGLES); glNormal3f(norm, 0, 0); for (a = 0 ; a <= angle ; a+= angle/nsegs) { y2=radius*(float)ci->sin_table[(int)a]; z2=radius*(float)ci->cos_table[(int)a]; glVertex3f(ex,0, 0); glVertex3f(ex,y1,z1); glVertex3f(ex,y2,z2); polys++; z1=z2; y1=y2; } glEnd(); } } glPopMatrix(); return polys; } static int circle(Circuit *ci, float radius, int segments, int half) { int polys = 0; float x1 = 0, x2 = 0; float y1 = 0, y2 = 0; int i, t, s; if (half) { t = 270; s = 90; x1 = radius, y1 = 0; } else { t = 360, s = 0; } glBegin(GL_TRIANGLES); glNormal3f(1, 0, 0); for(i=s;i<=t;i+=10) { float angle=i; x2=radius*(float)ci->cos_table[(int)angle]; y2=radius*(float)ci->sin_table[(int)angle]; glVertex3f(0,0,0); glVertex3f(0,y1,x1); glVertex3f(0,y2,x2); polys++; x1=x2; y1=y2; } glEnd(); return polys; } static int wire(Circuit *ci, float len) { int polys = 0; GLfloat col[] = {0.3, 0.3, 0.3, 1.0}; GLfloat spec[] = {0.9, 0.9, 0.9, 1.0}; GLfloat nospec[] = {0.4, 0.4, 0.4, 1.0}; GLfloat shin = 30; int n; glMaterialfv(GL_FRONT, GL_AMBIENT_AND_DIFFUSE, col); glMaterialfv(GL_FRONT, GL_SPECULAR, spec); glMaterialfv(GL_FRONT, GL_SHININESS, &shin); n = glIsEnabled(GL_NORMALIZE); if (!n) glEnable(GL_NORMALIZE); polys += createCylinder(ci, len, 0.05, 1, 0); if (!n) glDisable(GL_NORMALIZE); glMaterialfv(GL_FRONT, GL_SPECULAR, nospec); return polys; } static int sphere(Circuit *ci, GLfloat r, float stacks, float slices, int startstack, int endstack, int startslice, int endslice) { int polys = 0; GLfloat d, d1, dr, dr1, Dr, Dr1, D, D1, z1, z2, y1, y2, Y1, Z1, Y2, Z2; int a, a1, b, b1, c0, c1; GLfloat step, sstep; step = 180/stacks; sstep = 360/slices; a1 = startstack * step; b1 = startslice * sstep; y1 = z1 = Y1 = Z1 = 0; c0 = (endslice / slices) * 360; c1 = (endstack/stacks)*180; glBegin(GL_QUADS); for (a = startstack * step ; a <= c1 ; a+= step) { d=ci->sin_table[a]; d1=ci->sin_table[a1]; D=ci->cos_table[a]; D1=ci->cos_table[a1]; dr = d * r; dr1 = d1 * r; Dr = D * r; Dr1 = D1 * r; for (b = b1 ; b <= c0 ; b+= sstep) { y2=dr*ci->sin_table[b]; z2=dr*ci->cos_table[b]; Y2=dr1*ci->sin_table[b]; Z2=dr1*ci->cos_table[b]; glNormal3f(Dr, y1, z1); glVertex3f(Dr,y1,z1); glNormal3f(Dr, y2, z2); glVertex3f(Dr,y2,z2); glNormal3f(Dr1, Y2, Z2); glVertex3f(Dr1,Y2,Z2); glNormal3f(Dr1, Y1, Z1); glVertex3f(Dr1,Y1,Z1); polys++; z1=z2; y1=y2; Z1=Z2; Y1=Y2; } a1 = a; } glEnd(); return polys; } static int DrawComponent(Circuit *ci, Component *c, unsigned long *polysP) { int polys = *polysP; int ret = 0; /* return 1 if component is freed */ glPushMatrix(); glTranslatef(c->x, c->y, c->z); if (c->angle > 0) { glRotatef(c->angle, c->rotx, c->roty, c->rotz); } if (spin) { glRotatef(c->rdeg, c->rotx, c->roty, c->rotz); c->rdeg += c->drot; } if (c->norm) glEnable(GL_NORMALIZE); else glDisable(GL_NORMALIZE); /* call object draw routine here */ if (c->type == 0) { polys += DrawResistor(ci, c->c); } else if (c->type == 1) { polys += DrawDiode(ci, c->c); } else if (c->type == 2) { polys += DrawTransistor(ci, c->c); } else if (c->type == 3) { if (((LED *)c->c)->light && ci->light) { GLfloat lp[] = {0.1, 0, 0, 1}; glEnable(GL_LIGHT1); glLightfv(GL_LIGHT1, GL_POSITION, lp); } polys += DrawLED(ci, c->c); } else if (c->type == 4) { polys += DrawCapacitor(ci, c->c); } else if (c->type == 5) { polys += DrawIC(ci, c->c); } else if (c->type == 6) { polys += DrawDisp(ci, c->c); } else if (c->type == 7) { polys += DrawFuse(ci, c->c); } else if (c->type == 8) { polys += DrawRCA(ci, c->c); } else if (c->type == 9) { polys += DrawThreeFive(ci, c->c); } else if (c->type == 10) { polys += DrawSwitch(ci, c->c); } c->x += c->dx * MOVE_MULT; c->y += c->dy * MOVE_MULT; if (c->x > ci->XMAX/2 || c->x < 0 - ci->XMAX/2 || c->y > ci->YMAX/2 || c->y < 0 - ci->YMAX/2) { if (c->type == 3 && ((LED *)c->c)->light && ci->light) { glDisable(GL_LIGHT1); ci->light = 0; ci->lighton = 0; } if (c->type == 1) free(((Diode *)c->c)->band); /* remember to free diode band */ free(c->c); ret = 1; } glPopMatrix(); glDisable(GL_NORMALIZE); *polysP = polys; return ret; } /* draw a resistor */ static int DrawResistor(Circuit *ci, Resistor *r) { int polys = 0; int i; GLfloat col[] = {0.74, 0.62, 0.46, 1.0}; GLfloat spec[] = {0.8, 0.8, 0.8, 1.0}; GLfloat shine = 30; glTranslatef(-4, 0, 0); polys += wire(ci, 3); glTranslatef(3, 0, 0); glMaterialfv(GL_FRONT, GL_AMBIENT_AND_DIFFUSE, col); glMaterialfv(GL_FRONT, GL_SPECULAR, spec); glMaterialfv(GL_FRONT, GL_SHININESS, &shine); polys += createCylinder(ci, 1.8, 0.4, 1, 0); glPushMatrix(); for (i = 0 ; i < 4 ; i++) { glTranslatef(0.35, 0, 0); glCallList(ci->band_list[r->b[i]]); polys += ci->band_list_polys[r->b[i]]; } glPopMatrix(); glTranslatef(1.8, 0, 0); polys += wire(ci, 3); return polys; } static int DrawRCA(Circuit *ci, RCA *rca) { int polys = 0; GLfloat col[] = {0.6, 0.6, 0.6, 1.0}; /* metal */ GLfloat red[] = {1.0, 0.0, 0.0, 1.0}; /* red */ GLfloat white[] = {1.0, 1.0, 1.0, 1.0}; /* white */ GLfloat spec[] = {1, 1, 1, 1}; /* glass */ glPushMatrix(); glTranslatef(0.3, 0, 0); glMaterialfv(GL_FRONT, GL_AMBIENT_AND_DIFFUSE, col); glMateriali(GL_FRONT, GL_SHININESS, 40); glMaterialfv(GL_FRONT, GL_SPECULAR, spec); polys += createCylinder(ci, 0.7, 0.45, 0, 0); glTranslatef(0.4, 0, 0); polys += createCylinder(ci, 0.9, 0.15, 1, 0); glTranslatef(-1.9, 0, 0); glMateriali(GL_FRONT, GL_SHININESS, 20); glMaterialfv(GL_FRONT, GL_AMBIENT_AND_DIFFUSE, rca->col ? white : red); polys += createCylinder(ci, 1.5, 0.6, 1, 0); glTranslatef(-0.9, 0, 0); polys += createCylinder(ci, 0.9, 0.25, 0, 0); glTranslatef(0.1, 0, 0); polys += createCylinder(ci, 0.2, 0.3, 0, 0); glTranslatef(0.3, 0, 0); polys += createCylinder(ci, 0.2, 0.3, 1, 0); glTranslatef(0.3, 0, 0); polys += createCylinder(ci, 0.2, 0.3, 1, 0); glPopMatrix(); return polys; } static int DrawSwitch(Circuit *ci, Switch *f) { int polys = 0; GLfloat col[] = {0.6, 0.6, 0.6, 0}; /* metal */ GLfloat dark[] = {0.1, 0.1, 0.1, 1.0}; /* dark */ GLfloat brown[] = {0.69, 0.32, 0, 1.0}; /* brown */ GLfloat spec[] = {0.9, 0.9, 0.9, 1}; /* shiny */ glPushMatrix(); glMaterialfv(GL_FRONT, GL_DIFFUSE, col); glMaterialfv(GL_FRONT, GL_AMBIENT, dark); glMaterialfv(GL_FRONT, GL_SPECULAR, spec); glMateriali(GL_FRONT, GL_SHININESS, 90); polys += Rect(-0.25, 0, 0, 1.5, 0.5, 0.75); /* polys += Rect(-0.5, 0.5, 0, 2, 0.1, 0.75); */ glPushMatrix(); glRotatef(90, 1, 0, 0); glTranslatef(-0.5, -0.4, -0.4); polys += HoledRectangle(ci, 0.5, 0.75, 0.1, 0.15, 8); glTranslatef(2, 0, 0); polys += HoledRectangle(ci, 0.5, 0.75, 0.1, 0.15, 8); glPopMatrix(); polys += Rect(0.1, -0.4, -0.25, 0.1, 0.4, 0.05); polys += Rect(0.5, -0.4, -0.25, 0.1, 0.4, 0.05); polys += Rect(0.9, -0.4, -0.25, 0.1, 0.4, 0.05); polys += Rect(0.1, -0.4, -0.5, 0.1, 0.4, 0.05); polys += Rect(0.5, -0.4, -0.5, 0.1, 0.4, 0.05); polys += Rect(0.9, -0.4, -0.5, 0.1, 0.4, 0.05); glMaterialfv(GL_FRONT, GL_AMBIENT_AND_DIFFUSE, dark); glMaterialfv(GL_FRONT, GL_SPECULAR, spec); polys += Rect(0, 0.5, -0.1, 1, 0.05, 0.5); polys += Rect(0, 0.6, -0.1, 0.5, 0.6, 0.5); glMaterialfv(GL_FRONT, GL_AMBIENT_AND_DIFFUSE, brown); polys += Rect(-0.2, -0.01, -0.1, 1.4, 0.1, 0.55); glPopMatrix(); return polys; } static int DrawFuse(Circuit *ci, Fuse *f) { int polys = 0; GLfloat col[] = {0.5, 0.5, 0.5, 1.0}; /* endcaps */ GLfloat glass[] = {0.4, 0.4, 0.4, 0.3}; /* glass */ GLfloat spec[] = {1, 1, 1, 1}; /* glass */ glPushMatrix(); glTranslatef(-1.8, 0, 0); glMaterialfv(GL_FRONT, GL_AMBIENT_AND_DIFFUSE, col); glMaterialfv(GL_FRONT, GL_SPECULAR, spec); glMateriali(GL_FRONT, GL_SHININESS, 40); polys += createCylinder(ci, 0.8, 0.45, 1, 0); glTranslatef(0.8, 0, 0); glEnable(GL_BLEND); glDepthMask(GL_FALSE); glMaterialfv(GL_FRONT_AND_BACK, GL_AMBIENT_AND_DIFFUSE, glass); glMateriali(GL_FRONT_AND_BACK, GL_SHININESS, 40); polys += createCylinder(ci, 2, 0.4, 0, 0); polys += createCylinder(ci, 2, 0.3, 0, 0); glDisable(GL_BLEND); glDepthMask(GL_TRUE); glMaterialfv(GL_FRONT, GL_AMBIENT_AND_DIFFUSE, col); glMateriali(GL_FRONT, GL_SHININESS, 40); glBegin(GL_LINES); glVertex3f(0, 0, 0); glVertex3f(2, 0. ,0); glEnd(); glTranslatef(2, 0, 0); polys += createCylinder(ci, 0.8, 0.45, 1, 0); glPopMatrix(); return polys; } static int DrawCapacitor(Circuit *ci, Capacitor *c) { int polys = 0; GLfloat col[] = {0, 0, 0, 0}; GLfloat spec[] = {0.8, 0.8, 0.8, 0}; GLfloat brown[] = {0.84, 0.5, 0}; GLfloat shine = 40; glPushMatrix(); if (c->type) { glMaterialfv(GL_FRONT, GL_AMBIENT_AND_DIFFUSE, brown); polys += sphere(ci, c->width, 15, 15, 0, 4 ,0, 15); glTranslatef(1.35*c->width, 0, 0); polys += sphere(ci, c->width, 15, 15, 11, 15, 0, 15); glRotatef(90, 0, 0, 1); glTranslatef(0, 0.7*c->width, 0.3*c->width); polys += wire(ci, 3*c->width); glTranslatef(0, 0, -0.6*c->width); polys += wire(ci, 3*c->width); } else { glTranslatef(0-c->length*2, 0, 0); glMaterialfv(GL_FRONT_AND_BACK, GL_AMBIENT_AND_DIFFUSE, col); glMaterialfv(GL_FRONT_AND_BACK, GL_SPECULAR, spec); glMaterialfv(GL_FRONT_AND_BACK, GL_SHININESS, &shine); glBegin(GL_POLYGON); glVertex3f(0, 0.82*c->width, -0.1); glVertex3f(3*c->length, 0.82*c->width, -0.1); glVertex3f(3*c->length, 0.82*c->width, 0.1); glVertex3f(0, 0.82*c->width, 0.1); glEnd(); col[0] = 0.0; col[1] = 0.2; col[2] = 0.9; glMaterialfv(GL_FRONT_AND_BACK, GL_AMBIENT_AND_DIFFUSE, col); glEnable(GL_POLYGON_OFFSET_FILL); glPolygonOffset(1.0, 1.0); polys += createCylinder(ci, 3.0*c->length, 0.8*c->width, 1, 0); glDisable(GL_POLYGON_OFFSET_FILL); col[0] = 0.7; col[1] = 0.7; col[2] = 0.7; glMaterialfv(GL_FRONT_AND_BACK, GL_AMBIENT_AND_DIFFUSE, col); polys += circle(ci, 0.6*c->width, 30, 0); col[0] = 0; col[1] = 0; col[2] = 0; glMaterialfv(GL_FRONT_AND_BACK, GL_AMBIENT_AND_DIFFUSE, col); glTranslatef(3.0*c->length, 0.0, 0); polys += circle(ci, 0.6*c->width, 30, 0); glTranslatef(0, 0.4*c->width, 0); polys += wire(ci, 3*c->length); glTranslatef(0.0, -0.8*c->width, 0); polys += wire(ci, 3.3*c->length); } glPopMatrix(); return polys; } static int DrawLED(Circuit *ci, LED *l) { int polys = 0; GLfloat col[] = {0, 0, 0, 0.6}; GLfloat black[] = {0, 0, 0, 0.6}; col[0] = l->r; col[1] = l->g; col[2] = l->b; if (l->light && ci->light) { GLfloat dir[] = {-1, 0, 0}; glLightfv(GL_LIGHT1, GL_SPOT_DIRECTION, dir); if (!ci->lighton) { glLightfv(GL_LIGHT1, GL_SPECULAR, col); glLightfv(GL_LIGHT1, GL_AMBIENT, black); col[0] /= 1.5; col[1] /= 1.5; col[2] /= 1.5; glLightfv(GL_LIGHT1, GL_DIFFUSE, col); glLighti(GL_LIGHT1, GL_SPOT_CUTOFF, (GLint) 90); glLighti(GL_LIGHT1, GL_CONSTANT_ATTENUATION, (GLfloat)1); glLighti(GL_LIGHT1, GL_LINEAR_ATTENUATION, (GLfloat)0); glLighti(GL_LIGHT1, GL_QUADRATIC_ATTENUATION, (GLfloat)0); glLighti(GL_LIGHT1, GL_SPOT_EXPONENT, (GLint) 20); ci->lighton = 1; } } glMaterialfv(GL_FRONT_AND_BACK, GL_AMBIENT_AND_DIFFUSE, col); glMaterialfv(GL_FRONT_AND_BACK, GL_SPECULAR, col); /* no transparency when LED is lit */ if (!l->light) { glEnable(GL_BLEND); glDepthMask(GL_FALSE); glBlendFunc(GL_ONE_MINUS_SRC_ALPHA, GL_SRC_ALPHA); } glTranslatef(-0.9, 0, 0); polys += createCylinder(ci, 1.2, 0.3, 0, 0); if (l->light && ci->light) { glDisable(GL_LIGHTING); glColor3fv(col); } polys += sphere(ci, 0.3, 7, 7, 3, 7, 0, 7); if (l->light && ci->light) { glEnable(GL_LIGHTING); } else { glDepthMask(GL_TRUE); glDisable(GL_BLEND); } glTranslatef(1.2, 0, 0); polys += createCylinder(ci, 0.1, 0.38, 1, 0); glTranslatef(-0.3, 0.15, 0); polys += wire(ci, 3); glTranslatef(0, -0.3, 0); polys += wire(ci, 3.3); if (random() % 50 == 25) { if (l->light) { l->light = 0; ci->light = 0; ci->lighton = 0; glDisable(GL_LIGHT1); } else if (!ci->light) { l->light = 1; ci->light = 1; } } return polys; } static int DrawThreeFive(Circuit *ci, ThreeFive *d) { int polys = 0; GLfloat shine = 40; GLfloat const dark[] = {0.3, 0.3, 0.3, 0}; GLfloat const light[] = {0.6, 0.6, 0.6, 0}; GLfloat const cream[] = {0.8, 0.8, 0.6, 0}; GLfloat const spec[] = {0.7, 0.7, 0.7, 0}; glPushMatrix(); glMaterialfv(GL_FRONT, GL_SHININESS, &shine); glMaterialfv(GL_FRONT, GL_AMBIENT_AND_DIFFUSE, cream); glMaterialfv(GL_FRONT, GL_SPECULAR, spec); glTranslatef(-2.0, 0, 0); polys += createCylinder(ci, 0.7, 0.2, 0, 0); glTranslatef(0.7, 0, 0); polys += createCylinder(ci, 1.3, 0.4, 1, 0); glMaterialfv(GL_FRONT, GL_AMBIENT_AND_DIFFUSE, light); glTranslatef(1.3, 0, 0); polys += createCylinder(ci, 1.3, 0.2, 0, 0); glMaterialfv(GL_FRONT, GL_AMBIENT_AND_DIFFUSE, dark); glTranslatef(0.65, 0, 0); polys += createCylinder(ci, 0.15, 0.21, 0, 0); glTranslatef(0.3, 0, 0); polys += createCylinder(ci, 0.15, 0.21, 0, 0); glMaterialfv(GL_FRONT, GL_AMBIENT_AND_DIFFUSE, light); glTranslatef(0.4, 0, 0); polys += sphere(ci, 0.23, 7, 7, 0, 5, 0, 7); glPopMatrix(); return polys; } static int DrawDiode(Circuit *ci, Diode *d) { int polys = 0; GLfloat shine = 40; GLfloat col[] = {0.3, 0.3, 0.3, 0}; GLfloat spec[] = {0.7, 0.7, 0.7, 0}; glPushMatrix(); glMaterialfv(GL_FRONT, GL_SHININESS, &shine); glMaterialfv(GL_FRONT, GL_AMBIENT_AND_DIFFUSE, col); glMaterialfv(GL_FRONT, GL_SPECULAR, spec); glTranslatef(-4, 0, 0); polys += wire(ci, 3); glTranslatef(3, 0, 0); polys += bandedCylinder(ci, 0.3, 1.5, d->r, d->g, d->b, &(d->band), 1); glTranslatef(1.5, 0, 0); polys += wire(ci, 3); glPopMatrix(); return polys; } static int Rect(GLfloat x, GLfloat y, GLfloat z, GLfloat w, GLfloat h, GLfloat t) { int polys = 0; GLfloat yh; GLfloat xw; GLfloat zt; yh = y+h; xw = x+w; zt = z - t; glBegin(GL_QUADS); /* front */ glNormal3f(0, 0, 1); glVertex3f(x, y, z); glVertex3f(x, yh, z); glVertex3f(xw, yh, z); glVertex3f(xw, y, z); polys++; /* back */ glNormal3f(0, 0, -1); glVertex3f(x, y, zt); glVertex3f(x, yh, zt); glVertex3f(xw, yh, zt); glVertex3f(xw, y, zt); polys++; /* top */ glNormal3f(0, 1, 0); glVertex3f(x, yh, z); glVertex3f(x, yh, zt); glVertex3f(xw, yh, zt); glVertex3f(xw, yh, z); polys++; /* bottom */ glNormal3f(0, -1, 0); glVertex3f(x, y, z); glVertex3f(x, y, zt); glVertex3f(xw, y, zt); glVertex3f(xw, y, z); polys++; /* left */ glNormal3f(-1, 0, 0); glVertex3f(x, y, z); glVertex3f(x, y, zt); glVertex3f(x, yh, zt); glVertex3f(x, yh, z); polys++; /* right */ glNormal3f(1, 0, 0); glVertex3f(xw, y, z); glVertex3f(xw, y, zt); glVertex3f(xw, yh, zt); glVertex3f(xw, yh, z); polys++; glEnd(); return polys; } /* IC pins */ static int ICLeg(GLfloat x, GLfloat y, GLfloat z, int dir) { int polys = 0; if (dir) { polys += Rect(x-0.1, y, z, 0.1, 0.1, 0.02); polys += Rect(x-0.1, y, z, 0.02, 0.1, 0.1); polys += Rect(x-0.1, y+0.03, z-0.1, 0.02, 0.05, 0.3); } else { polys += Rect(x, y, z, 0.1, 0.1, 0.02); polys += Rect(x+0.8*0.1, y, z, 0.02, 0.1, 0.1); polys += Rect(x+0.8*0.1, y+0.03, z-0.1, 0.02, 0.05, 0.3); } return polys; } static int DrawIC(Circuit *ci, IC *c) { int polys = 0; GLfloat w, h, d; int z; GLfloat col[] = {0.1, 0.1, 0.1, 0}; GLfloat col2[] = {0.2, 0.2, 0.2, 0}; GLfloat spec[] = {0.6, 0.6, 0.6, 0}; GLfloat shine = 40; GLfloat lspec[] = {0.6, 0.6, 0.6, 0}; GLfloat lcol[] = {0.4, 0.4, 0.4, 0}; GLfloat lshine = 40; glPushMatrix(); glMaterialfv(GL_FRONT, GL_AMBIENT_AND_DIFFUSE, col); glMaterialfv(GL_FRONT, GL_SPECULAR, spec); glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); glMaterialfv(GL_FRONT, GL_SHININESS, &shine); switch(c->pins) { case 8: w = 1.0; h = 1.5; break; case 14: w = 1.0; h = 3; break; case 16: w = 1.0; h = 3; break; case 24: default: w = 1.5; h = 3.5; break; } w = w/2; h = h/2; glEnable(GL_POLYGON_OFFSET_FILL); glPolygonOffset(1.0, 1.0); glBegin(GL_QUADS); glNormal3f(0, 0, 1); glVertex3f(w, h, 0.1); glVertex3f(w, -h, 0.1); glVertex3f(-w, -h, 0.1); glVertex3f(-w, h, 0.1); polys++; glNormal3f(0, 0, -1); glVertex3f(w, h, -0.1); glVertex3f(w, -h, -0.1); glVertex3f(-w, -h, -0.1); glVertex3f(-w, h, -0.1); polys++; glNormal3f(1, 0, 0); glVertex3f(w, h, -0.1); glVertex3f(w, -h, -0.1); glVertex3f(w, -h, 0.1); glVertex3f(w, h, 0.1); polys++; glNormal3f(0, -1, 0); glVertex3f(w, -h, -0.1); glVertex3f(w, -h, 0.1); glVertex3f(-w, -h, 0.1); glVertex3f(-w, -h, -0.1); polys++; glNormal3f(-1, 0, 0); glVertex3f(-w, h, -0.1); glVertex3f(-w, h, 0.1); glVertex3f(-w, -h, 0.1); glVertex3f(-w, -h, -0.1); polys++; glNormal3f(0, -1, 0); glVertex3f(-w, h, -0.1); glVertex3f(w, h, -0.1); glVertex3f(w, h, 0.1); glVertex3f(-w, h, 0.1); polys++; glEnd(); glDisable(GL_POLYGON_OFFSET_FILL); glEnable(GL_TEXTURE_2D); glEnable(GL_BLEND); { GLfloat texfg[] = {0.7, 0.7, 0.7, 1.0}; GLfloat s = 0.015; XCharStruct e; texture_string_metrics (ci->font, c->text, &e, 0, 0); glPushMatrix(); glTranslatef (0, 0, 0.1); glRotatef (90, 0, 0, 1); glScalef (s, s, s); glTranslatef (-w/2, 0, 0); glColor4fv (texfg); print_texture_string (ci->font, c->text); glPopMatrix(); } glDisable(GL_TEXTURE_2D); glDisable(GL_BLEND); d = (h*2-0.1) / c->pins; d*=2; glMaterialfv(GL_FRONT, GL_AMBIENT_AND_DIFFUSE, lcol); glMaterialfv(GL_FRONT, GL_SPECULAR, lspec); glMaterialfv(GL_FRONT, GL_SHININESS, &lshine); for (z = 0 ; z < c->pins/2 ; z++) { polys += ICLeg(w, -h + z*d + d/2, 0, 0); } for (z = 0 ; z < c->pins/2 ; z++) { polys += ICLeg(-w, -h + z*d + d/2, 0, 1); } glMaterialfv(GL_FRONT, GL_AMBIENT_AND_DIFFUSE, col2); glTranslatef(-w+0.3, h-0.3, 0.1); glRotatef(90, 0, 1, 0); polys += circle(ci, 0.1, 7, 0); glPopMatrix(); return polys; } static int DrawDisp(Circuit *ci, Disp *d) { int polys = 0; GLfloat col[] = {0.8, 0.8, 0.8, 1.0}; /* body colour */ GLfloat front[] = {0.2, 0.2, 0.2, 1.0}; /* front colour */ GLfloat on[] = {0.9, 0, 0, 1}; /* 'on' segment */ GLfloat off[] = {0.3, 0, 0, 1}; /* 'off' segment */ int i, j, k; GLfloat x, y; /* for the pins */ GLfloat spec[] = {0.6, 0.6, 0.6, 0}; GLfloat lcol[] = {0.4, 0.4, 0.4, 0}; GLfloat shine = 40; static const GLfloat vdata_h[6][2] = { {0, 0}, {0.1, 0.1}, {0.9, 0.1}, {1, 0}, {0.9, -0.1}, {0.1, -0.1} }; static const GLfloat vdata_v[6][2] = { {0.27, 0}, {0.35, -0.1}, {0.2, -0.9}, {0.1, -1}, {0, -0.9}, {0.15, -0.15} }; static const GLfloat seg_start[7][2] = { {0.55, 2.26}, {1.35, 2.26}, {1.2, 1.27}, {0.25, 0.25}, {0.06, 1.25}, {0.25, 2.25}, {0.39, 1.24} }; static const int nums[10][7] = { {1, 1, 1, 1, 1, 1, 0}, /* 0 */ {0, 1, 1, 0, 0, 0, 0}, /* 1 */ {1, 1, 0, 1, 1, 0, 1}, /* 2 */ {1, 1, 1, 1, 0, 0, 1}, /* 3 */ {0, 1, 1, 0, 0, 1, 1}, /* 4 */ {1, 0, 1, 1, 0, 1, 1}, /* 5 */ {1, 0, 1, 1, 1, 1, 1}, /* 6 */ {1, 1, 1, 0, 0, 0, 0}, /* 7 */ {1, 1, 1, 1, 1, 1, 1}, /* 8 */ {1, 1, 1, 0, 0, 1, 1} /* 9 */ }; glTranslatef(-0.9, -1.8, 0); glMaterialfv(GL_FRONT, GL_AMBIENT_AND_DIFFUSE, col); polys += Rect(0, 0, -0.01, 1.8, 2.6, 0.7); glMaterialfv(GL_FRONT, GL_AMBIENT_AND_DIFFUSE, front); glBegin(GL_QUADS); glVertex2f(-0.05, -0.05); glVertex2f(-0.05, 2.65); glVertex2f(1.85, 2.65); glVertex2f(1.85, -0.05); polys++; glEnd(); glDisable(GL_LIGHTING); /* lit segments dont need light */ if (!seven && (random() % 30) == 19) { /* randomly change value */ d->value = random() % 10; } for (j = 0 ; j < 7 ; j++) { /* draw the segments */ GLfloat xx[6], yy[6]; if (nums[d->value][j]) glColor3fv(on); else glColor3fv(off); for (k = 0 ; k < 6 ; k++) { if (j == 0 || j == 3 || j == 6) { xx[k] = seg_start[j][0] + vdata_h[k][0]; yy[k] = seg_start[j][1] + vdata_h[k][1]; } else { xx[k] = seg_start[j][0] + vdata_v[k][0]; yy[k] = seg_start[j][1] + vdata_v[k][1]; } } glBegin(GL_POLYGON); for(i = 0 ; i < 6 ; i++) { glVertex3f(xx[i], yy[i], 0.01); } polys++; glEnd(); } glColor3fv(on); glPointSize(4); glBegin(GL_POINTS); glVertex3f(1.5, 0.2, 0.01); polys++; glEnd(); glEnable(GL_LIGHTING); glMaterialfv(GL_FRONT, GL_AMBIENT_AND_DIFFUSE, lcol); glMaterialfv(GL_FRONT, GL_SPECULAR, spec); glMaterialfv(GL_FRONT, GL_SHININESS, &shine); for (x = 0.35 ; x <= 1.5 ; x+= 1.15) { for ( y = 0.2 ; y <= 2.4 ; y += 0.3) { polys += ICLeg(x, y, -0.7, 1); } } return polys; } static int HoledRectangle(Circuit *ci, GLfloat w, GLfloat h, GLfloat d, GLfloat radius, int p) { int polys = 0; int step, a; GLfloat x1, y1, x2, y2; GLfloat yr, yr1, xr, xr1, side, side1; GLfloat nx, ny; step = 360 / p; x1 = radius; y1 = 0; xr1 = w/2; yr1 = 0; side = w/2; side1 = h/2; glBegin(GL_QUADS); for (a = 0 ; a <= 360 ; a+= step) { y2=radius*(float)ci->sin_table[(int)a]; x2=radius*(float)ci->cos_table[(int)a]; if (a < 45 || a > 315) { xr = side; yr = side1 * ci->tan_table[a]; nx = 1; ny = 0; } else if (a <= 135 || a >= 225) { xr = side/ci->tan_table[a]; if (a >= 225) { yr = -side1; xr = 0 - xr; nx = 0; ny = -1; } else { yr = side1; nx = 0; ny = 1; } } else { xr = -side; yr = -side1 * ci->tan_table[a]; nx = -1; ny = 0; } glNormal3f(-x1, -y1, 0); /* cylinder */ glVertex3f(x1,y1,0); glVertex3f(x1,y1,-d); glVertex3f(x2,y2,-d); glVertex3f(x2,y2,0); polys++; glNormal3f(0, 0, 1); /* front face */ glVertex3f(x1,y1,0); glVertex3f(xr1, yr1, 0); glVertex3f(xr, yr, 0); glVertex3f(x2, y2, 0); polys++; glNormal3f(nx, ny, 0); /* side */ glVertex3f(xr, yr, 0); glVertex3f(xr, yr, -d); glVertex3f(xr1, yr1, -d); glVertex3f(xr1, yr1, 0); polys++; glNormal3f(0, 0, -1); /* back */ glVertex3f(xr, yr, -d); glVertex3f(x2, y2, -d); glVertex3f(x1, y1, -d); glVertex3f(xr1, yr1, -d); polys++; x1=x2; y1=y2; xr1 = xr; yr1 = yr; } glEnd(); return polys; } static int DrawTransistor(Circuit *ci, Transistor *t) { int polys = 0; GLfloat col[] = {0.3, 0.3, 0.3, 1.0}; GLfloat spec[] = {0.9, 0.9, 0.9, 1.0}; GLfloat nospec[] = {0.4, 0.4, 0.4, 1.0}; GLfloat shin = 30; glPushMatrix(); glMaterialfv(GL_FRONT, GL_SHININESS, &shin); glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, col); glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); if (t->type == 1) { /* TO-92 style */ glMaterialfv(GL_FRONT_AND_BACK, GL_SPECULAR, col); glRotatef(90, 0, 1, 0); glRotatef(90, 0, 0, 1); polys += createCylinder(ci, 1.0, 0.4, 1, 1); polys += Rect(0, -0.2, 0.4, 1, 0.2, 0.8); /* Draw the markings */ { GLfloat texfg[] = {0.7, 0.7, 0.7, 1.0}; GLfloat s = 0.015; XCharStruct e; int w; texture_string_metrics (ci->font, t->text, &e, 0, 0); w = e.width; glPushMatrix(); glRotatef (90, 1, 0, 0); glTranslatef (0.5, -0.05, 0.21); glScalef (s, s, s); glTranslatef (-w/2, 0, 0); glColor4fv (texfg); print_texture_string (ci->font, t->text); glPopMatrix(); } glDisable(GL_TEXTURE_2D); glDisable(GL_BLEND); glDepthMask(GL_TRUE); glTranslatef(-2, 0, -0.2); polys += wire(ci, 2); glTranslatef(0, 0, 0.2); polys += wire(ci, 2); glTranslatef(0, 0, 0.2); polys += wire(ci, 2); } else if (t->type == 0) { /* TO-220 Style */ polys += Rect(0, 0, 0, 1.5, 1.5, 0.5); { GLfloat texfg[] = {0.7, 0.7, 0.7, 1.0}; GLfloat s = 0.015; XCharStruct e; int w; texture_string_metrics (ci->font, t->text, &e, 0, 0); w = e.width; glPushMatrix(); glTranslatef (0.75, 0.75, 0.01); glScalef (s, s, s); glTranslatef (-w/2, 0, 0); glColor4fv (texfg); print_texture_string (ci->font, t->text); glPopMatrix(); } glDisable(GL_TEXTURE_2D); glDisable(GL_BLEND); glDepthMask(GL_TRUE); glMaterialfv(GL_FRONT, GL_AMBIENT_AND_DIFFUSE, col); glMaterialfv(GL_FRONT, GL_SPECULAR, spec); glMaterialfv(GL_FRONT, GL_SHININESS, &shin); polys += Rect(0, 0, -0.5, 1.5, 1.5, 0.30); if (!glIsEnabled(GL_NORMALIZE)) glEnable(GL_NORMALIZE); glTranslatef(0.75, 1.875, -0.55); polys += HoledRectangle(ci, 1.5, 0.75, 0.25, 0.2, 8); glMaterialfv(GL_FRONT, GL_SPECULAR, nospec); glTranslatef(-0.375, -1.875, 0); glRotatef(90, 0, 0, -1); polys += wire(ci, 2); glTranslatef(0, 0.375, 0); polys += wire(ci, 2); glTranslatef(0, 0.375, 0); polys += wire(ci, 2); } else { /* SMC transistor */ /* Draw the body */ glMaterialfv(GL_FRONT_AND_BACK, GL_SPECULAR, col); glTranslatef(-0.5, -0.25, 0.1); polys += Rect(0, 0, 0, 1, 0.5, 0.2); /* Draw the markings */ glEnable(GL_TEXTURE_2D); glEnable(GL_BLEND); glDepthMask(GL_FALSE); glBegin (GL_QUADS); glNormal3f(0, 0, 1); glTexCoord2f(0, 1); glVertex3f(0.2, 0, 0.01); glTexCoord2f(1, 1); glVertex3f(0.8, 0, 0.01); glTexCoord2f(1, 0); glVertex3f(0.8, 0.5, 0.01); glTexCoord2f(0, 0); glVertex3f(0.2, 0.5, 0.01); polys++; glEnd(); glDisable(GL_TEXTURE_2D); glDisable(GL_BLEND); glDepthMask(GL_TRUE); /* Now draw the legs */ glMaterialfv(GL_FRONT, GL_AMBIENT_AND_DIFFUSE, col); glMaterialfv(GL_FRONT, GL_SPECULAR, spec); glMaterialfv(GL_FRONT, GL_SHININESS, &shin); polys += Rect(0.25, -0.1, -0.05, 0.1, 0.1, 0.2); polys += Rect(0.75, -0.1, -0.05, 0.1, 0.1, 0.2); polys += Rect(0.5, 0.5, -0.05, 0.1, 0.1, 0.2); polys += Rect(0.25, -0.2, -0.2, 0.1, 0.15, 0.1); polys += Rect(0.75, -0.2, -0.2, 0.1, 0.15, 0.1); polys += Rect(0.5, 0.5, -0.2, 0.1, 0.15, 0.1); } glPopMatrix(); return polys; } static Component * NewComponent(ModeInfo *mi) { Circuit *ci = &circuit[MI_SCREEN(mi)]; Component *c; float rnd; c = malloc(sizeof(Component)); c->angle = RAND_RANGE(0,360); rnd = f_rand(); if (rnd < 0.25) { /* come from the top */ c->y = ci->YMAX/2; c->x = RAND_RANGE(0, ci->XMAX) - ci->XMAX/2; if (c->x > 0) c->dx = 0 - RAND_RANGE(0.5, 2); else c->dx = RAND_RANGE(0.5, 2); c->dy = 0 - RAND_RANGE(0.5, 2); } else if (rnd < 0.5) { /* come from the bottom */ c->y = 0 - ci->YMAX/2; c->x = RAND_RANGE(0, ci->XMAX) - ci->XMAX/2; if (c->x > 0) c->dx = 0 - RAND_RANGE(0.5, 2); else c->dx = RAND_RANGE(0.5, 2); c->dy = RAND_RANGE(0.5, 2); } else if (rnd < 0.75) { /* come from the left */ c->x = 0 - ci->XMAX/2; c->y = RAND_RANGE(0, ci->YMAX) - ci->YMAX/2; c->dx = RAND_RANGE(0.5, 2); if (c->y > 0) c->dy = 0 - RAND_RANGE(0.5, 2); else c->dy = RAND_RANGE(0.5, 2); } else { /* come from the right */ c->x = ci->XMAX/2; c->y = RAND_RANGE(0, ci->YMAX) - ci->YMAX/2; c->dx = 0 - RAND_RANGE(0.5, 2); if (c->y > 0) c->dy = 0 - RAND_RANGE(0.5, 2); else c->dy = RAND_RANGE(0.5, 2); } c->z = RAND_RANGE(0, 7) - 9; c->rotx = f_rand(); c->roty = f_rand(); c->rotz = f_rand(); c->drot = f_rand() * 3; c->rdeg = 0; c->dz = f_rand()*2 - 1; c->norm = 0; c->alpha = 0; /* explicitly set to 1 later */ rnd = random() % 11; if (rnd < 1) { c->c = NewResistor(); c->type = 0; if (f_rand() < 0.4) c->norm = 1; /* some resistors shine */ } else if (rnd < 2) { c->c = NewDiode(); if (f_rand() < 0.4) c->norm = 1; /* some diodes shine */ c->type = 1; } else if (rnd < 3) { c->c = NewTransistor(mi); c->norm = 1; c->type = 2; } else if (rnd < 4) { c->c = NewCapacitor(ci); c->norm = 1; c->type = 4; } else if (rnd < 5) { c->c = NewIC(mi); c->type = 5; c->norm = 1; } else if (rnd < 6) { c->c = NewLED(ci); c->type = 3; c->norm = 1; c->alpha = 1; } else if (rnd < 7) { c->c = NewFuse(ci); c->norm = 1; c->type = 7; c->alpha = 1; } else if (rnd < 8) { c->c = NewRCA(ci); c->norm = 1; c->type = 8; } else if (rnd < 9) { c->c = NewThreeFive(ci); c->norm = 1; c->type = 9; } else if (rnd < 10) { c->c = NewSwitch(ci); c->norm = 1; c->type = 10; } else { c->c = NewDisp(ci); c->type = 6; } return c; } static Transistor *NewTransistor(ModeInfo *mi) { Transistor *t; t = malloc(sizeof(Transistor)); t->type = (random() % 3); if (t->type == 0) { t->text = transistortypes[random() % countof(transistortypes)]; } else if (t->type == 2) { t->text = smctypes[random() % countof(smctypes)]; } else if (t->type == 1) { t->text = to92types[random() % countof(to92types)]; } return t; } static Capacitor *NewCapacitor(Circuit *ci) { Capacitor *c; c = malloc(sizeof(Capacitor)); c->type = (f_rand() < 0.5); if (!c->type) { c->length = RAND_RANGE(0.5, 1); c->width = RAND_RANGE(0.5, 1); } else { c->width = RAND_RANGE(0.3, 1); } return c; } /* 7 segment display */ static Disp *NewDisp(Circuit *ci) { Disp *d; d = malloc(sizeof(Disp)); if (seven) d->value = 7; else d->value = RAND_RANGE(0, 10); return d; } static IC *NewIC(ModeInfo *mi) { IC *c; int pins; const char *val; int types[countof(ictypes)], i, n = 0; c = malloc(sizeof(IC)); c->type = 0; switch((int)RAND_RANGE(0,4)) { case 0: pins = 8; break; case 1: pins = 14; break; case 2: pins = 16; break; case 3: default: pins = 24; break; } for (i = 0 ; i < countof(ictypes) ; i++) { if (ictypes[i].pins == pins) { types[n] = i; n++; } } if (n > countof(types)) abort(); val = ictypes[types[random() % n]].val; sprintf(c->text, "%s\n%02d%02d", val, (int)RAND_RANGE(80, 100), (int)RAND_RANGE(1,53)); c->pins = pins; return c; } static LED *NewLED(Circuit *ci) { LED *l; float r; l = malloc(sizeof(LED)); r = f_rand(); l->light = 0; if (!ci->light && (f_rand() < 0.4)) { ci->light = 1; l->light = 1; } if (r < 0.2) { l->r = 0.9; l->g = 0; l->b = 0; } else if (r < 0.4) { l->r = 0.3; l->g = 0.9; l->b = 0; } else if (r < 0.6) { l->r = 0.8; l->g = 0.9; l->b = 0; } else if (r < 0.8) { l->r = 0.0; l->g = 0.2; l->b = 0.8; } else { l->r = 0.9, l->g = 0.55, l->b = 0; } return l; } static Fuse *NewFuse(Circuit *ci) { Fuse *f; f = malloc(sizeof(Fuse)); return f; } static RCA *NewRCA(Circuit *ci) { RCA *r; r = malloc(sizeof(RCA)); r->col = (random() % 10 < 5); return r; } static ThreeFive *NewThreeFive(Circuit *ci) { ThreeFive *r; r = malloc(sizeof(ThreeFive)); return r; } static Switch *NewSwitch(Circuit *ci) { Switch *s; s = malloc(sizeof(Switch)); s->position = 0; return s; } static Diode *NewDiode(void) { Band *b; Diode *ret; ret = malloc(sizeof(Diode)); b = malloc(sizeof(Band)); b->pos = 0.8; b->len = 0.1; if (f_rand() < 0.5) { b->r = 1; b->g = 1; b->b = 1; ret->r = 0.7; ret->g = 0.1 ; ret->b = 0.1; } else { b->r = 1; b->g = 1; b->b = 1; ret->r = 0.2; ret->g = 0.2 ; ret->b = 0.2; } ret->band = b; return ret; } static Resistor * NewResistor(void) { int v, m, t; /* value, multiplier, tolerance */ Resistor *ret; v = RAND(9); m = RAND(5); t = (RAND(10) < 5) ? 10 : 11; ret = malloc(sizeof(Resistor)); if (seven) { ret->b[0] = ret->b[1] = ret->b[2] = 7; } else { ret->b[0] = values[v][0]; ret->b[1] = values[v][1]; ret->b[2] = m; } ret->b[3] = t; return ret; } static void makebandlist(Circuit *ci) { int i; GLfloat col[] = {0,0,0,0}; GLfloat spec[] = {0.8,0.8,0.8,0}; GLfloat shine = 40; for (i = 0 ; i < 12 ; i++) { ci->band_list[i] = glGenLists(1); glNewList(ci->band_list[i], GL_COMPILE); col[0] = colorcodes[i][0]; col[1] = colorcodes[i][1]; col[2] = colorcodes[i][2]; glMaterialfv(GL_FRONT_AND_BACK, GL_AMBIENT_AND_DIFFUSE, col); glMaterialfv(GL_FRONT_AND_BACK, GL_SPECULAR, spec); glMaterialfv(GL_FRONT_AND_BACK, GL_SHININESS, &shine); ci->band_list_polys[i] = createCylinder(ci, 0.1, 0.42, 0, 0); glEndList(); } } static int bandedCylinder(Circuit *ci, float radius, float l, GLfloat r, GLfloat g, GLfloat bl, Band **b, int nbands) { int polys = 0; int n; /* band number */ GLfloat col[] = {0,0,0,0}; col[0] = r; col[1] = g; col[2] = bl; glMaterialfv(GL_FRONT, GL_AMBIENT_AND_DIFFUSE, col); polys += createCylinder(ci, l, radius, 1, 0); /* body */ for (n = 0 ; n < nbands ; n++) { glPushMatrix(); glTranslatef(b[n]->pos*l, 0, 0); col[0] = b[n]->r; col[1] = b[n]->g; col[2] = b[n]->b; glMaterialfv(GL_FRONT, GL_AMBIENT_AND_DIFFUSE, col); polys += createCylinder(ci, b[n]->len*l, radius*1.05, 0, 0); /* band */ glPopMatrix(); } return polys; } static int drawgrid(Circuit *ci) { int polys = 0; GLfloat x, y; GLfloat col3[] = {0, 0.8, 0}; if (!ci->draw_s) { if (f_rand() < ((rotatespeed > 0) ? 0.05 : 0.01)) { ci->draw_sdir = RAND_RANGE(0, 4); ci->draw_ds = RAND_RANGE(0.4, 0.8); switch (ci->draw_sdir) { case 0: ci->draw_sx = -ci->XMAX/2; ci->draw_sy = ((int)RAND_RANGE(0, ci->YMAX/2))*2 - ci->YMAX/2; break; case 1: ci->draw_sx = ci->XMAX/2; ci->draw_sy = ((int)RAND_RANGE(0, ci->YMAX/2))*2 - ci->YMAX/2; break; case 2: ci->draw_sy = ci->YMAX/2; ci->draw_sx = ((int)RAND_RANGE(0, ci->XMAX/2))*2 - ci->XMAX/2; break; case 3: ci->draw_sy = -ci->YMAX/2; ci->draw_sx = ((int)RAND_RANGE(0, ci->XMAX/2))*2 - ci->XMAX/2; break; } ci->draw_s = 1; } } else if (rotatespeed <= 0) { if (ci->grid_col[1] < 0.25) { ci->grid_col[1] += 0.025; ci->grid_col[2] += 0.005; ci->grid_col2[1] += 0.015 ; ci->grid_col2[2] += 0.005; } } glDisable(GL_LIGHTING); if (ci->draw_s) { glColor3fv(col3); glPushMatrix(); glTranslatef(ci->draw_sx, ci->draw_sy, -10); polys += sphere(ci, 0.1, 10, 10, 0, 10, 0, 10); if (ci->draw_sdir == 0) glTranslatef(-ci->draw_ds, 0, 0); if (ci->draw_sdir == 1) glTranslatef(ci->draw_ds, 0, 0); if (ci->draw_sdir == 2) glTranslatef(0, ci->draw_ds, 0); if (ci->draw_sdir == 3) glTranslatef(0, -ci->draw_ds, 0); polys += sphere(ci, 0.05, 10, 10, 0, 10, 0, 10); glPopMatrix(); if (ci->draw_sdir == 0) { ci->draw_sx += ci->draw_ds; if (ci->draw_sx > ci->XMAX/2) ci->draw_s = 0; } if (ci->draw_sdir == 1) { ci->draw_sx -= ci->draw_ds; if (ci->draw_sx < -ci->XMAX/2) ci->draw_s = 0; } if (ci->draw_sdir == 2) { ci->draw_sy -= ci->draw_ds; if (ci->draw_sy < ci->YMAX/2) ci->draw_s = 0; } if (ci->draw_sdir == 3) { ci->draw_sy += ci->draw_ds; if (ci->draw_sy > ci->YMAX/2) ci->draw_s = 0; } } else if (rotatespeed <= 0) { if (ci->grid_col[1] > 0) { ci->grid_col[1] -= 0.0025; ci->grid_col[2] -= 0.0005; ci->grid_col2[1] -= 0.0015 ; ci->grid_col2[2] -= 0.0005; } } for (x = -ci->XMAX/2 ; x <= ci->XMAX/2 ; x+= 2) { glColor3fv(ci->grid_col); glBegin(GL_LINES); glVertex3f(x, ci->YMAX/2, -10); glVertex3f(x, -ci->YMAX/2, -10); glColor3fv(ci->grid_col2); glVertex3f(x-0.02, ci->YMAX/2, -10); glVertex3f(x-0.02, -ci->YMAX/2, -10); glVertex3f(x+0.02, ci->YMAX/2, -10); glVertex3f(x+0.02, -ci->YMAX/2, -10); glEnd(); } for (y = -ci->YMAX/2 ; y <= ci->YMAX/2 ; y+= 2) { glColor3fv(ci->grid_col); glBegin(GL_LINES); glVertex3f(-ci->XMAX/2, y, -10); glVertex3f(ci->XMAX/2, y, -10); glColor3fv(ci->grid_col2); glVertex3f(-ci->XMAX/2, y-0.02, -10); glVertex3f(ci->XMAX/2, y-0.02, -10); glVertex3f(-ci->XMAX/2, y+0.02, -10); glVertex3f(ci->XMAX/2, y+0.02, -10); glEnd(); } glEnable(GL_LIGHTING); return polys; } static void display(ModeInfo *mi) { Circuit *ci = &circuit[MI_SCREEN(mi)]; GLfloat light_sp[] = {0.8, 0.8, 0.8, 1.0}; GLfloat black[] = {0, 0, 0, 1.0}; int j; mi->polygon_count = 0; if (ci->display_i == 0) { for (ci->display_i = 0 ; ci->display_i < maxparts ; ci->display_i++) { ci->components[ci->display_i] = NULL; } } glEnable(GL_LIGHTING); glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT); glLoadIdentity(); gluLookAt(ci->viewer[0], ci->viewer[1], ci->viewer[2], 0.0, 0.0, 0.0, 0.0, 1.0, 0.0); glPushMatrix(); glRotatef(ci->rotate_angle, 0, 0, 1); ci->rotate_angle += 0.01 * (float)rotatespeed; if (ci->rotate_angle >= 360) ci->rotate_angle = 0; glLightfv(GL_LIGHT0, GL_POSITION, ci->lightpos); glLightfv(GL_LIGHT0, GL_SPECULAR, light_sp); glLightfv(GL_LIGHT0, GL_DIFFUSE, light_sp); glLighti(GL_LIGHT0, GL_CONSTANT_ATTENUATION, (GLfloat)1); glLighti(GL_LIGHT0, GL_LINEAR_ATTENUATION, (GLfloat)0.5); glLighti(GL_LIGHT0, GL_QUADRATIC_ATTENUATION, (GLfloat)0); # ifdef HAVE_MOBILE /* Keep it the same relative size when rotated. */ { GLfloat h = MI_HEIGHT(mi) / (GLfloat) MI_WIDTH(mi); int o = (int) current_device_rotation(); if (o != 0 && o != 180 && o != -180) glScalef (h, h, h); h = 2; glScalef (h, h, h); } # endif mi->polygon_count += drawgrid(ci); glMaterialfv(GL_FRONT, GL_AMBIENT_AND_DIFFUSE, light_sp); if (f_rand() < 0.05) { for (j = 0 ; j < maxparts ; j++) { if (ci->components[j] == NULL) { ci->components[j] = NewComponent(mi); j = maxparts; } } reorder(&ci->components[0]); } for (j = 0 ; j < maxparts ; j++) { glMaterialfv(GL_FRONT, GL_AMBIENT_AND_DIFFUSE, black); glMaterialfv(GL_FRONT, GL_EMISSION, black); glMaterialfv(GL_FRONT, GL_SPECULAR, black); if (ci->components[j] != NULL) { if (DrawComponent(ci, ci->components[j], &mi->polygon_count)) { free(ci->components[j]); ci->components[j] = NULL; } } } glPopMatrix(); glFlush(); } /* ensure transparent components are at the end */ static void reorder(Component *c[]) { int i, j, k; Component *c1[MAX_COMPONENTS]; Component *c2[MAX_COMPONENTS]; j = 0; for (i = 0 ; i < maxparts ; i++) { /* clear old matrix */ c1[i] = NULL; c2[i] = NULL; } for (i = 0 ; i < maxparts ; i++) { if (c[i] == NULL) continue; if (c[i]->alpha) { /* transparent parts go to c1 */ c1[j] = c[i]; j++; } else { /* opaque parts go to c2 */ c2[i] = c[i]; } } for (i = 0 ; i < maxparts ; i++) { /* clear old matrix */ c[i] = NULL; } k = 0; for (i = 0 ; i < maxparts ; i++) { /* insert opaque part */ if (c2[i] != NULL) { c[k] = c2[i]; k++; } } for (i = 0 ; i < j ; i++) { /* insert transparent parts */ c[k] = c1[i]; k++; } } ENTRYPOINT void reshape_circuit(ModeInfo *mi, int width, int height) { Circuit *ci = &circuit[MI_SCREEN(mi)]; GLfloat h = (GLfloat) height / (GLfloat) width; glViewport(0,0,(GLint)width, (GLint) height); glMatrixMode(GL_PROJECTION); glLoadIdentity(); glFrustum(-1.0,1.0,-h,h,1.5,35.0); glMatrixMode(GL_MODELVIEW); ci->win_h = height; ci->win_w = width; ci->YMAX = ci->XMAX * h; } ENTRYPOINT void init_circuit(ModeInfo *mi) { int screen = MI_SCREEN(mi); Circuit *ci; if (circuit == NULL) { if ((circuit = (Circuit *) calloc(MI_NUM_SCREENS(mi), sizeof(Circuit))) == NULL) return; } ci = &circuit[screen]; ci->window = MI_WINDOW(mi); ci->XMAX = ci->YMAX = 50; ci->viewer[2] = 14; ci->lightpos[0] = 7; ci->lightpos[1] = 7; ci->lightpos[2] = 15; ci->lightpos[3] = 1; ci->grid_col[1] = 0.25; ci->grid_col[2] = 0.05; ci->grid_col2[1] = 0.125; ci->grid_col2[2] = 0.05; ci->font = load_texture_font (MI_DISPLAY(mi), "componentFont"); if (maxparts >= MAX_COMPONENTS) maxparts = MAX_COMPONENTS-1; if ((ci->glx_context = init_GL(mi)) != NULL) { reshape_circuit(mi, MI_WIDTH(mi), MI_HEIGHT(mi)); } else { MI_CLEARWINDOW(mi); } if (uselight == 0) ci->light = 1; glShadeModel(GL_SMOOTH); glPolygonMode(GL_FRONT_AND_BACK,GL_FILL); glEnable(GL_DEPTH_TEST); glEnable(GL_LIGHTING); glEnable(GL_LIGHT0); glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); make_tables(ci); makebandlist(ci); } ENTRYPOINT void draw_circuit(ModeInfo *mi) { Circuit *ci = &circuit[MI_SCREEN(mi)]; Window w = MI_WINDOW(mi); Display *disp = MI_DISPLAY(mi); if (!ci->glx_context) return; glXMakeCurrent(disp, w, *(ci->glx_context)); display(mi); if(mi->fps_p) do_fps(mi); glFinish(); glXSwapBuffers(disp, w); } ENTRYPOINT void release_circuit(ModeInfo *mi) { Circuit *ci = &circuit[MI_SCREEN(mi)]; if (ci->font) free_texture_font (ci->font); FreeAllGL(mi); } XSCREENSAVER_MODULE ("Circuit", circuit) #endif xscreensaver-5.36/hacks/glx/menger.c000644 000767 000024 00000040523 12710313215 017441 0ustar00jwzstaff000000 000000 /* menger, Copyright (c) 2001-2014 Jamie Zawinski * Copyright (c) 2002 Aurelien Jacobs * * 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. * * Generates a 3D Menger Sponge gasket: * * ___+._______ * __-"" -- __"""----._____ * __.--"" -- ___--+---_____. __ .+'| * _.-'"" __ +:"__ | ._..+"" __ .+' F * J"--.____ __ """""+" .+' .J F * J """""---.___ -- .+'" F' F * L """""--...+' .J F * L F"9 --. | . F' J * L -_J L_J F"9 | ;'J .+J .J J * | L_J | F.' .'| J F' J * | |"""--.__ | ' |"" J J * J ._ J ;;; | "L | . |-___J | * J L J J ;-' | L | .'J |_ .' . | * J "" J .---_L F"9 | F.' | .' FJ | * L J .-' __ | L_J | ' :' ' .+ * L '--.___ | | .J .' * | F"9 """' | . F' .' * | -_J F"9 | .'J .' * +__ -_J F"9 | F.' .' * """--___ L_J | ' .' * """---___ | .' * ""---._|.' * * The straightforward way to generate this object creates way more polygons * than are needed, since there end up being many buried, interior faces. * So during the recursive building of the object we store which face of * each unitary cube we need to draw. Doing this reduces the polygon count * by 40% - 60%. * * Another optimization we could do to reduce the polygon count would be to * merge adjascent coplanar squares together into rectangles. This would * result in the outer faces being composed of 1xN strips. It's tricky to * to find these adjascent faces in non-exponential time, though. * * We could actually simulate large depths with a texture map -- if the * depth is such that the smallest holes are only a few pixels across, * just draw them as spots on the surface! It would look the same. */ #define DEFAULTS "*delay: 30000 \n" \ "*showFPS: False \n" \ "*wireframe: False \n" \ "*suppressRotationAnimation: True\n" \ # define refresh_sponge 0 # define release_sponge 0 #undef countof #define countof(x) (sizeof((x))/sizeof((*x))) #include "xlockmore.h" #include "colors.h" #include "rotator.h" #include "gltrackball.h" #include #ifdef USE_GL /* whole file */ #define DEF_SPIN "True" #define DEF_WANDER "True" #define DEF_SPEED "150" #define DEF_MAX_DEPTH "3" typedef struct { GLXContext *glx_context; rotator *rot; trackball_state *trackball; Bool button_down_p; GLuint sponge_list0; /* we store X, Y, and Z-facing surfaces */ GLuint sponge_list1; /* in their own lists, to make it easy */ GLuint sponge_list2; /* to color them differently. */ unsigned long squares_fp; int current_depth; int ncolors; XColor *colors; int ccolor0; int ccolor1; int ccolor2; int draw_tick; } sponge_configuration; static sponge_configuration *sps = NULL; static Bool do_spin; static Bool do_wander; static int speed; static int max_depth; static XrmOptionDescRec opts[] = { { "-wander", ".wander", XrmoptionNoArg, "True" }, { "+wander", ".wander", XrmoptionNoArg, "False" }, { "-spin", ".spin", XrmoptionSepArg, 0 }, { "-speed", ".speed", XrmoptionSepArg, 0 }, { "-depth", ".maxDepth", XrmoptionSepArg, 0 }, }; static argtype vars[] = { {&do_spin, "spin", "Spin", DEF_SPIN, t_Bool}, {&do_wander, "wander", "Wander", DEF_WANDER, t_Bool}, {&speed, "speed", "Speed", DEF_SPEED, t_Int}, {&max_depth, "maxDepth", "MaxDepth", DEF_MAX_DEPTH, t_Int}, }; ENTRYPOINT ModeSpecOpt sponge_opts = {countof(opts), opts, countof(vars), vars, NULL}; /* Window management, etc */ ENTRYPOINT void reshape_sponge (ModeInfo *mi, int width, int height) { GLfloat h = (GLfloat) height / (GLfloat) width; glViewport (0, 0, (GLint) width, (GLint) height); glMatrixMode(GL_PROJECTION); glLoadIdentity(); gluPerspective (30.0, 1/h, 1.0, 100.0); glMatrixMode(GL_MODELVIEW); glLoadIdentity(); gluLookAt( 0.0, 0.0, 30.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0); # ifdef HAVE_MOBILE /* Keep it the same relative size when rotated. */ { int o = (int) current_device_rotation(); if (o != 0 && o != 180 && o != -180) glScalef (1/h, 1/h, 1/h); } # endif glClear(GL_COLOR_BUFFER_BIT); } #define X0 0x01 #define X1 0x02 #define Y0 0x04 #define Y1 0x08 #define Z0 0x10 #define Z1 0x20 static int cube (float x0, float x1, float y0, float y1, float z0, float z1, int faces, int wireframe) { int n = 0; if (faces & X0) { glBegin (wireframe ? GL_LINE_LOOP : GL_POLYGON); glNormal3f (-1.0, 0.0, 0.0); glVertex3f (x0, y1, z0); glVertex3f (x0, y0, z0); glVertex3f (x0, y0, z1); glVertex3f (x0, y1, z1); glEnd (); n++; } if (faces & X1) { glBegin (wireframe ? GL_LINE_LOOP : GL_POLYGON); glNormal3f (1.0, 0.0, 0.0); glVertex3f (x1, y1, z1); glVertex3f (x1, y0, z1); glVertex3f (x1, y0, z0); glVertex3f (x1, y1, z0); glEnd (); n++; } if (faces & Y0) { glBegin (wireframe ? GL_LINE_LOOP : GL_POLYGON); glNormal3f (0.0, -1.0, 0.0); glVertex3f (x0, y0, z0); glVertex3f (x0, y0, z1); glVertex3f (x1, y0, z1); glVertex3f (x1, y0, z0); glEnd (); n++; } if (faces & Y1) { glBegin (wireframe ? GL_LINE_LOOP : GL_POLYGON); glNormal3f (0.0, 1.0, 0.0); glVertex3f (x0, y1, z0); glVertex3f (x0, y1, z1); glVertex3f (x1, y1, z1); glVertex3f (x1, y1, z0); glEnd (); n++; } if (faces & Z0) { glBegin (wireframe ? GL_LINE_LOOP : GL_POLYGON); glNormal3f (0.0, 0.0, -1.0); glVertex3f (x1, y1, z0); glVertex3f (x1, y0, z0); glVertex3f (x0, y0, z0); glVertex3f (x0, y1, z0); glEnd (); n++; } if (faces & Z1) { glBegin (wireframe ? GL_LINE_LOOP : GL_POLYGON); glNormal3f (0.0, 0.0, 1.0); glVertex3f (x0, y1, z1); glVertex3f (x0, y0, z1); glVertex3f (x1, y0, z1); glVertex3f (x1, y1, z1); glEnd (); n++; } return n; } static int menger_recurs_1 (int level, float x0, float x1, float y0, float y1, float z0, float z1, int faces, Bool wireframe, int orig, int forig) { float xi, yi, zi; int f, x, y, z; int n = 0; if (orig) { if (wireframe) n += cube (x0, x1, y0, y1, z0, z1, faces & (X0 | X1 | Y0 | Y1), wireframe); } if (level == 0) { if (!wireframe) n += cube (x0, x1, y0, y1, z0, z1, faces, wireframe); } else { xi = (x1 - x0) / 3; yi = (y1 - y0) / 3; zi = (z1 - z0) / 3; for (x = 0; x < 3; x++) for (y = 0; y < 3; y++) for (z = 0; z < 3; z++) { if ((x != 1 && y != 1) || (y != 1 && z != 1) || (x != 1 && z != 1)) { f = faces; if (x == 1 || (x == 2 && (y != 1 && z != 1))) f &= ~X0; if (x == 1 || (x == 0 && (y != 1 && z != 1))) f &= ~X1; if (forig & X0 && x == 2 && (y == 1 || z == 1)) f |= X0; if (forig & X1 && x == 0 && (y == 1 || z == 1)) f |= X1; if (y == 1 || (y == 2 && (x != 1 && z != 1))) f &= ~Y0; if (y == 1 || (y == 0 && (x != 1 && z != 1))) f &= ~Y1; if (forig & Y0 && y == 2 && (x == 1 || z == 1)) f |= Y0; if (forig & Y1 && y == 0 && (x == 1 || z == 1)) f |= Y1; if (z == 1 || (z == 2 && (x != 1 && y != 1))) f &= ~Z0; if (z == 1 || (z == 0 && (x != 1 && y != 1))) f &= ~Z1; if (forig & Z0 && z == 2 && (x == 1 || y == 1)) f |= Z0; if (forig & Z1 && z == 0 && (x == 1 || y == 1)) f |= Z1; n += menger_recurs_1 (level-1, x0+x*xi, x0+(x+1)*xi, y0+y*yi, y0+(y+1)*yi, z0+z*zi, z0+(z+1)*zi, f, wireframe, 0, forig); } else if (wireframe && (x != 1 || y != 1 || z != 1)) n += cube (x0+x*xi, x0+(x+1)*xi, y0+y*yi, y0+(y+1)*yi, z0+z*zi, z0+(z+1)*zi, forig & (X0 | X1 | Y0 | Y1), wireframe); } } return n; } static int menger_recurs (int level, float x0, float x1, float y0, float y1, float z0, float z1, int faces, Bool wireframe, int orig) { return menger_recurs_1 (level, x0, x1, y0, y1, z0, z1, faces, wireframe, orig, faces); } static void build_sponge (sponge_configuration *sp, Bool wireframe, int level) { glDeleteLists (sp->sponge_list0, 1); glNewList(sp->sponge_list0, GL_COMPILE); sp->squares_fp = menger_recurs (level, -1.5, 1.5, -1.5, 1.5, -1.5, 1.5, X0 | X1, wireframe,1); glEndList(); glDeleteLists (sp->sponge_list1, 1); glNewList(sp->sponge_list1, GL_COMPILE); sp->squares_fp += menger_recurs (level, -1.5, 1.5, -1.5, 1.5, -1.5, 1.5, Y0 | Y1, wireframe,1); glEndList(); glDeleteLists (sp->sponge_list2, 1); glNewList(sp->sponge_list2, GL_COMPILE); sp->squares_fp += menger_recurs (level, -1.5, 1.5, -1.5, 1.5, -1.5, 1.5, Z0 | Z1, wireframe,1); glEndList(); } ENTRYPOINT Bool sponge_handle_event (ModeInfo *mi, XEvent *event) { sponge_configuration *sp = &sps[MI_SCREEN(mi)]; if (gltrackball_event_handler (event, sp->trackball, MI_WIDTH (mi), MI_HEIGHT (mi), &sp->button_down_p)) return True; else if (event->xany.type == KeyPress) { KeySym keysym; char c = 0; XLookupString (&event->xkey, &c, 1, &keysym, 0); if (c == '+' || c == '=' || keysym == XK_Up || keysym == XK_Right || keysym == XK_Next) { sp->draw_tick = speed; sp->current_depth += (sp->current_depth > 0 ? 1 : -1); sp->current_depth--; return True; } else if (c == '-' || c == '_' || keysym == XK_Down || keysym == XK_Left || keysym == XK_Prior) { sp->draw_tick = speed; sp->current_depth -= (sp->current_depth > 0 ? 1 : -1); sp->current_depth--; return True; } else if (screenhack_event_helper (MI_DISPLAY(mi), MI_WINDOW(mi), event)) goto DEF; } else if (screenhack_event_helper (MI_DISPLAY(mi), MI_WINDOW(mi), event)) { DEF: sp->draw_tick = speed; return True; } return False; } ENTRYPOINT void init_sponge (ModeInfo *mi) { sponge_configuration *sp; int wire = MI_IS_WIREFRAME(mi); if (!sps) { sps = (sponge_configuration *) calloc (MI_NUM_SCREENS(mi), sizeof (sponge_configuration)); if (!sps) { fprintf(stderr, "%s: out of memory\n", progname); exit(1); } } sp = &sps[MI_SCREEN(mi)]; if ((sp->glx_context = init_GL(mi)) != NULL) { reshape_sponge (mi, MI_WIDTH(mi), MI_HEIGHT(mi)); } if (!wire) { static const GLfloat pos0[4] = {-1.0, -1.0, 1.0, 0.1}; static const GLfloat pos1[4] = { 1.0, -0.2, 0.2, 0.1}; static const GLfloat dif0[4] = {1.0, 1.0, 1.0, 1.0}; static const GLfloat dif1[4] = {1.0, 1.0, 1.0, 1.0}; glLightfv(GL_LIGHT0, GL_POSITION, pos0); glLightfv(GL_LIGHT1, GL_POSITION, pos1); glLightfv(GL_LIGHT0, GL_DIFFUSE, dif0); glLightfv(GL_LIGHT1, GL_DIFFUSE, dif1); glEnable(GL_LIGHTING); glEnable(GL_LIGHT0); glEnable(GL_LIGHT1); glEnable(GL_DEPTH_TEST); glEnable(GL_NORMALIZE); glShadeModel(GL_SMOOTH); } { double spin_speed = 1.0; double wander_speed = 0.03; sp->rot = make_rotator (do_spin ? spin_speed : 0, do_spin ? spin_speed : 0, do_spin ? spin_speed : 0, 1.0, do_wander ? wander_speed : 0, True); sp->trackball = gltrackball_init (True); } sp->ncolors = 128; sp->colors = (XColor *) calloc(sp->ncolors, sizeof(XColor)); make_smooth_colormap (0, 0, 0, sp->colors, &sp->ncolors, False, 0, False); sp->ccolor0 = 0; sp->ccolor1 = sp->ncolors / 3; sp->ccolor2 = sp->ccolor1 * 2; sp->sponge_list0 = glGenLists (1); sp->sponge_list1 = glGenLists (1); sp->sponge_list2 = glGenLists (1); sp->draw_tick = 9999999; } ENTRYPOINT void draw_sponge (ModeInfo *mi) { sponge_configuration *sp = &sps[MI_SCREEN(mi)]; Display *dpy = MI_DISPLAY(mi); Window window = MI_WINDOW(mi); GLfloat color0[4] = {0.0, 0.0, 0.0, 1.0}; GLfloat color1[4] = {0.0, 0.0, 0.0, 1.0}; GLfloat color2[4] = {0.0, 0.0, 0.0, 1.0}; if (!sp->glx_context) return; glXMakeCurrent(MI_DISPLAY(mi), MI_WINDOW(mi), *(sp->glx_context)); glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glPushMatrix (); glScalef(1.1, 1.1, 1.1); { double x, y, z; get_position (sp->rot, &x, &y, &z, !sp->button_down_p); glTranslatef((x - 0.5) * 8, (y - 0.5) * 6, (z - 0.5) * 15); gltrackball_rotate (sp->trackball); get_rotation (sp->rot, &x, &y, &z, !sp->button_down_p); glRotatef (x * 360, 1.0, 0.0, 0.0); glRotatef (y * 360, 0.0, 1.0, 0.0); glRotatef (z * 360, 0.0, 0.0, 1.0); } color0[0] = sp->colors[sp->ccolor0].red / 65536.0; color0[1] = sp->colors[sp->ccolor0].green / 65536.0; color0[2] = sp->colors[sp->ccolor0].blue / 65536.0; color1[0] = sp->colors[sp->ccolor1].red / 65536.0; color1[1] = sp->colors[sp->ccolor1].green / 65536.0; color1[2] = sp->colors[sp->ccolor1].blue / 65536.0; color2[0] = sp->colors[sp->ccolor2].red / 65536.0; color2[1] = sp->colors[sp->ccolor2].green / 65536.0; color2[2] = sp->colors[sp->ccolor2].blue / 65536.0; sp->ccolor0++; sp->ccolor1++; sp->ccolor2++; if (sp->ccolor0 >= sp->ncolors) sp->ccolor0 = 0; if (sp->ccolor1 >= sp->ncolors) sp->ccolor1 = 0; if (sp->ccolor2 >= sp->ncolors) sp->ccolor2 = 0; if (sp->draw_tick++ >= speed) { sp->draw_tick = 0; if (sp->current_depth >= max_depth) sp->current_depth = -max_depth; sp->current_depth++; build_sponge (sp, MI_IS_WIREFRAME(mi), (sp->current_depth < 0 ? -sp->current_depth : sp->current_depth)); mi->polygon_count = sp->squares_fp; /* for FPS display */ mi->recursion_depth = (sp->current_depth < 0 ? -sp->current_depth : sp->current_depth); } glScalef (2.0, 2.0, 2.0); glMaterialfv (GL_FRONT, GL_AMBIENT_AND_DIFFUSE, color0); glCallList (sp->sponge_list0); glMaterialfv (GL_FRONT, GL_AMBIENT_AND_DIFFUSE, color1); glCallList (sp->sponge_list1); glMaterialfv (GL_FRONT, GL_AMBIENT_AND_DIFFUSE, color2); glCallList (sp->sponge_list2); glPopMatrix (); if (mi->fps_p) do_fps (mi); glFinish(); glXSwapBuffers(dpy, window); } XSCREENSAVER_MODULE_2 ("Menger", menger, sponge) #endif /* USE_GL */ xscreensaver-5.36/hacks/glx/engine.c000664 000767 000024 00000070232 12710313200 017425 0ustar00jwzstaff000000 000000 /* * engine.c - GL representation of a 4 stroke engine * * version 2.00 * * Copyright (C) 2001 Ben Buxton (bb@cactii.net) * modified by Ed Beroset (beroset@mindspring.com) * new to 2.0 version is: * - command line argument to specify number of cylinders * - command line argument to specify included angle of engine * - removed broken command line argument to specify rotation speed * - included crankshaft shapes and firing orders for real engines * verified using the Bosch _Automotive Handbook_, 5th edition, pp 402,403 * * 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. */ #ifdef STANDALONE #define DEFAULTS "*delay: 30000 \n" \ "*showFPS: False \n" \ "*suppressRotationAnimation: True\n" \ "*titleFont: -*-helvetica-medium-r-normal-*-*-180-*-*-*-*-*-*\n" \ # define refresh_engine 0 # include "xlockmore.h" /* from the xscreensaver distribution */ #else /* !STANDALONE */ # include "xlock.h" /* from the xlockmore distribution */ #endif /* !STANDALONE */ #include "texfont.h" #include "rotator.h" #include "gltrackball.h" /* lifted from lament.c */ #define RAND(n) ((long) ((random() & 0x7fffffff) % ((long) (n)))) #define RANDSIGN() ((random() & 1) ? 1 : -1) #ifdef USE_GL #define DEF_ENGINE "(none)" #define DEF_TITLES "False" #define DEF_SPIN "True" #define DEF_MOVE "True" #undef countof #define countof(x) (sizeof((x))/sizeof((*x))) static char *which_engine; static int move; static int spin; static Bool do_titles; static XrmOptionDescRec opts[] = { {"-engine", ".engine.engine", XrmoptionSepArg, DEF_ENGINE }, {"-move", ".engine.move", XrmoptionNoArg, "True" }, {"+move", ".engine.move", XrmoptionNoArg, "False" }, {"-spin", ".engine.spin", XrmoptionNoArg, "True" }, {"+spin", ".engine.spin", XrmoptionNoArg, "False" }, { "-titles", ".engine.titles", XrmoptionNoArg, "True" }, { "+titles", ".engine.titles", XrmoptionNoArg, "False" }, }; static argtype vars[] = { {&which_engine, "engine", "Engine", DEF_ENGINE, t_String}, {&move, "move", "Move", DEF_MOVE, t_Bool}, {&spin, "spin", "Spin", DEF_SPIN, t_Bool}, {&do_titles, "titles", "Titles", DEF_TITLES, t_Bool}, }; ENTRYPOINT ModeSpecOpt engine_opts = {countof(opts), opts, countof(vars), vars, NULL}; #ifdef USE_MODULES ModStruct engine_description = {"engine", "init_engine", "draw_engine", "release_engine", "draw_engine", "init_engine", NULL, &engine_opts, 1000, 1, 2, 1, 4, 1.0, "", "A four stroke engine", 0, NULL}; #endif /* these defines are used to provide symbolic means * by which to refer to various portions or multiples * of a cyle in degrees */ #define HALFREV 180 #define ONEREV 360 #define TWOREV 720 #define MOVE_MULT 0.05 #define RAND_RANGE(min, max) ((min) + (max - min) * f_rand()) typedef struct { GLXContext *glx_context; Window window; GLfloat x, y, z; /* position */ GLfloat dx, dy, dz; /* position */ GLfloat an1, an2, an3; /* internal angle */ GLfloat nx, ny, nz; /* spin vector */ GLfloat a; /* spin angle */ GLfloat da; /* spin speed */ rotator *rot; trackball_state *trackball; Bool button_down_p; texture_font_data *font_data; char *engine_name; int engineType; int movepaused; float crankOffset; float crankWidth; int win_w, win_h; float sin_table[TWOREV]; float cos_table[TWOREV]; float tan_table[TWOREV]; GLfloat boom_red[4]; GLfloat boom_lpos[4]; GLfloat boom_d, boom_wd; int boom_time; GLfloat viewer[3], lookat[3]; int display_a; GLfloat ln[730], yp[730], ang[730]; int ln_init; int lastPlug; GLuint shaft_list, piston_list; int shaft_polys, piston_polys; } Engine; static Engine *engine = NULL; static const GLfloat lightpos[] = {7.0, 7.0, 12, 1.0}; static const GLfloat light_sp[] = {0.8, 0.8, 0.8, 0.5}; static const GLfloat red[] = {1.0, 0, 0, 1.0}; static const GLfloat green[] = {0.0, 1, 0, 1.0}; static const GLfloat blue[] = {0, 0, 1, 1.0}; static const GLfloat white[] = {1.0, 1, 1, 1.0}; static const GLfloat yellow_t[] = {1, 1, 0, 0.4}; static GLvoid normal(GLfloat [], GLfloat [], GLfloat [], GLfloat *, GLfloat *, GLfloat *); /* * this table represents both the firing order and included angle of engine. * To simplify things, we always number from 0 starting at the flywheel and * moving down the crankshaft toward the back of the engine. This doesn't * always match manufacturer's schemes. For example, the Porsche 911 engine * is a flat six with the following configuration (Porsche's numbering): * * 3 2 1 * |= firing order is 1-6-2-4-3-5 in this diagram * 6 5 4 * * We renumber these using our scheme but preserve the effective firing order: * * 0 2 4 * |= firing order is 4-1-2-5-0-3 in this diagram * 1 3 5 * * To avoid going completely insane, we also reorder these so the newly * renumbered cylinder 0 is always first: 0-3-4-1-2-5 * * For a flat 6, the included angle is 180 degrees (0 would be a inline * engine). Because these are all four-stroke engines, each piston goes * through 720 degrees of rotation for each time the spark plug sparks, * so in this case, we would use the following angles: * * cylinder firing order angle * -------- ------------ ----- * 0 0 0 * 1 3 360 * 2 4 240 * 3 1 600 * 4 2 480 * 5 5 120 * */ typedef struct { int cylinders; int includedAngle; int pistonAngle[12]; /* twelve cylinders should suffice... */ int speed; /* step size in degrees for engine speed */ const char *engineName; /* currently unused */ } engine_type; static const engine_type engines[] = { { 3, 0, { 0, 240, 480, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 12, "Honda Insight" }, { 4, 0, { 0, 180, 540, 360, 0, 0, 0, 0, 0, 0, 0, 0 }, 12, "BMW M3" }, { 4, 180, { 0, 360, 180, 540, 0, 0, 0, 0, 0, 0, 0, 0 }, 12, "VW Beetle" }, { 5, 0, { 0, 576, 144, 432, 288, 0, 0, 0, 0, 0, 0, 0 }, 12, "Audi Quattro" }, { 6, 0, { 0, 240, 480, 120, 600, 360, 0, 0, 0, 0, 0, 0 }, 12, "BMW M5" }, { 6, 90, { 0, 360, 480, 120, 240, 600, 0, 0, 0, 0, 0, 0 }, 12, "Subaru XT" }, { 6, 180, { 0, 360, 240, 600, 480, 120, 0, 0, 0, 0, 0, 0 }, 12, "Porsche 911" }, { 8, 90, { 0, 450, 90, 180, 270, 360, 540, 630, 0, 0, 0, 0 }, 15, "Corvette Z06" }, {10, 90, { 0, 72, 432, 504, 288, 360, 144, 216, 576, 648, 0, 0 }, 12, "Dodge Viper" }, {12, 60, { 0, 300, 240, 540, 480, 60, 120, 420, 600, 180, 360, 660 }, 12, "Jaguar XKE" }, }; /* this define is just a little shorter way of referring to members of the * table above */ #define ENG engines[e->engineType] /* given a number of cylinders and an included angle, finds matching engine */ static int find_engine(char *name) { unsigned int i; char *s; if (!name || !*name || !strcasecmp (name, "(none)")) return (random() % countof(engines)); for (s = name; *s; s++) if (*s == '-' || *s == '_') *s = ' '; for (i = 0; i < countof(engines); i++) { if (!strcasecmp(name, engines[i].engineName)) return i; } fprintf (stderr, "%s: unknown engine type \"%s\"\n", progname, name); fprintf (stderr, "%s: available models are:\n", progname); for (i = 0; i < countof(engines); i++) { fprintf (stderr, "\t %-13s (%d cylinders", engines[i].engineName, engines[i].cylinders); if (engines[i].includedAngle == 0) fprintf (stderr, ")\n"); else if (engines[i].includedAngle == 180) fprintf (stderr, ", flat)\n"); else fprintf (stderr, ", V)\n"); } exit(1); } /* we use trig tables to speed things up - 200 calls to sin() in one frame can be a bit harsh.. */ static void make_tables(Engine *e) { int i; float f; f = ONEREV / (M_PI * 2); for (i = 0 ; i < TWOREV ; i++) { e->sin_table[i] = sin(i/f); } for (i = 0 ; i < TWOREV ; i++) { e->cos_table[i] = cos(i/f); } for (i = 0 ; i < TWOREV ; i++) { e->tan_table[i] = tan(i/f); } } /* if inner and outer are the same, we draw a cylinder, not a tube */ /* for a tube, endcaps is 0 (none), 1 (left), 2 (right) or 3(both) */ /* angle is how far around the axis to go (up to 360) */ static int cylinder (Engine *e, GLfloat x, GLfloat y, GLfloat z, float length, float outer, float inner, int endcaps, int sang, int eang) { int polys = 0; int a; /* current angle around cylinder */ int b = 0; /* previous */ int angle, norm, step, sangle; float z1, y1, z2, y2, ex=0; float Z1, Y1, Z2, Y2, xl; GLfloat y2c[TWOREV], z2c[TWOREV]; int nsegs, tube = 0; glPushMatrix(); nsegs = outer*(MAX(e->win_w, e->win_h)/200); nsegs = MAX(nsegs, 6); nsegs = MAX(nsegs, 40); if (nsegs % 2) nsegs += 1; sangle = sang; angle = eang; z1 = e->cos_table[sangle]*outer+z; y1 = e->sin_table[sangle] * outer+y; Z1 = e->cos_table[sangle] * inner+z; Y1 = e->sin_table[sangle]*inner+y ; Z2 = z; Y2 = y; xl = x + length; if (inner < outer && endcaps < 3) tube = 1; step = ONEREV/nsegs; glBegin(GL_QUADS); for (a = sangle ; a <= angle || b <= angle ; a+= step) { y2=outer*(float)e->sin_table[a]+y; z2=outer*(float)e->cos_table[a]+z; if (endcaps) { y2c[a] = y2; z2c[a] = z2; /* cache for later */ } if (tube) { Y2=inner*(float)e->sin_table[a]+y; Z2=inner*(float)e->cos_table[a]+z; } glNormal3f(0, y1, z1); glVertex3f(x,y1,z1); glVertex3f(xl,y1,z1); glNormal3f(0, y2, z2); glVertex3f(xl,y2,z2); glVertex3f(x,y2,z2); polys++; if (a == sangle && angle - sangle < ONEREV) { if (tube) glVertex3f(x, Y1, Z1); else glVertex3f(x, y, z); glVertex3f(x, y1, z1); glVertex3f(xl, y1, z1); if (tube) glVertex3f(xl, Z1, Z1); else glVertex3f(xl, y, z); polys++; } if (tube) { if (endcaps != 1) { glNormal3f(-1, 0, 0); /* left end */ glVertex3f(x, y1, z1); glVertex3f(x, y2, z2); glVertex3f(x, Y2, Z2); glVertex3f(x, Y1, Z1); polys++; } glNormal3f(0, -Y1, -Z1); /* inner surface */ glVertex3f(x, Y1, Z1); glVertex3f(xl, Y1, Z1); glNormal3f(0, -Y2, -Z2); glVertex3f(xl, Y2, Z2); glVertex3f(x, Y2, Z2); polys++; if (endcaps != 2) { glNormal3f(1, 0, 0); /* right end */ glVertex3f(xl, y1, z1); glVertex3f(xl, y2, z2); glVertex3f(xl, Y2, Z2); glVertex3f(xl, Y1, Z1); polys++; } } z1=z2; y1=y2; Z1=Z2; Y1=Y2; b = a; } glEnd(); if (angle - sangle < ONEREV) { GLfloat nx, ny, nz; GLfloat v1[3], v2[3], v3[3]; v1[0] = x; v1[1] = y; v1[2] = z; v2[0] = x; v2[1] = y1; v2[2] = z1; v3[0] = xl; v3[1] = y1; v3[2] = z1; normal(&v2[0], &v1[0], &v3[0], &nx, &ny, &nz); glBegin(GL_QUADS); glNormal3f(nx, ny, nz); glVertex3f(x, y, z); glVertex3f(x, y1, z1); glVertex3f(xl, y1, z1); glVertex3f(xl, y, z); polys++; glEnd(); } if (endcaps) { GLfloat end, start; if (tube) { if (endcaps == 1) { end = 0; start = 0; } else if (endcaps == 2) { start = end = length+0.01; } else { end = length+0.02; start = -0.01; } norm = (ex == length+0.01) ? -1 : 1; } else { end = length; start = 0; norm = -1; } for(ex = start ; ex <= end ; ex += length) { z1 = outer*e->cos_table[sangle]+z; y1 = y+e->sin_table[sangle]*outer; step = ONEREV/nsegs; glBegin(GL_TRIANGLES); b = 0; for (a = sangle ; a <= angle || b <= angle; a+= step) { glNormal3f(norm, 0, 0); glVertex3f(x+ex,y, z); glVertex3f(x+ex,y1,z1); glVertex3f(x+ex,y2c[a],z2c[a]); polys++; y1 = y2c[a]; z1 = z2c[a]; b = a; } if (!tube) norm = 1; glEnd(); } } glPopMatrix(); return polys; } /* this is just a convenience function to make a solid rod */ static int rod (Engine *e, GLfloat x, GLfloat y, GLfloat z, float length, float diameter) { return cylinder(e, x, y, z, length, diameter, diameter, 3, 0, ONEREV); } static GLvoid normal(GLfloat v1[], GLfloat v2[], GLfloat v3[], GLfloat *nx, GLfloat *ny, GLfloat *nz) { GLfloat x, y, z, X, Y, Z; x = v2[0]-v1[0]; y = v2[1]-v1[1]; z = v2[2]-v1[2]; X = v3[0]-v1[0]; Y = v3[1]-v1[1]; Z = v3[2]-v1[2]; *nx = Y*z - Z*y; *ny = Z*x - X*z; *nz = X*y - Y*x; } static int Rect(GLfloat x, GLfloat y, GLfloat z, GLfloat w, GLfloat h, GLfloat t) { int polys = 0; GLfloat yh; GLfloat xw; GLfloat zt; yh = y+h; xw = x+w; zt = z - t; glBegin(GL_QUADS); /* front */ glNormal3f(0, 0, 1); glVertex3f(x, y, z); glVertex3f(x, yh, z); glVertex3f(xw, yh, z); glVertex3f(xw, y, z); polys++; /* back */ glNormal3f(0, 0, -1); glVertex3f(x, y, zt); glVertex3f(x, yh, zt); glVertex3f(xw, yh, zt); glVertex3f(xw, y, zt); polys++; /* top */ glNormal3f(0, 1, 0); glVertex3f(x, yh, z); glVertex3f(x, yh, zt); glVertex3f(xw, yh, zt); glVertex3f(xw, yh, z); polys++; /* bottom */ glNormal3f(0, -1, 0); glVertex3f(x, y, z); glVertex3f(x, y, zt); glVertex3f(xw, y, zt); glVertex3f(xw, y, z); polys++; /* left */ glNormal3f(-1, 0, 0); glVertex3f(x, y, z); glVertex3f(x, y, zt); glVertex3f(x, yh, zt); glVertex3f(x, yh, z); polys++; /* right */ glNormal3f(1, 0, 0); glVertex3f(xw, y, z); glVertex3f(xw, y, zt); glVertex3f(xw, yh, zt); glVertex3f(xw, yh, z); polys++; glEnd(); return polys; } static int makepiston(Engine *e) { int polys = 0; GLfloat colour[] = {0.6, 0.6, 0.6, 1.0}; /* if (e->piston_list) glDeleteLists(1, e->piston_list); */ if (! e->piston_list) e->piston_list = glGenLists(1); glNewList(e->piston_list, GL_COMPILE); glRotatef(90, 0, 0, 1); glMaterialfv(GL_FRONT, GL_AMBIENT_AND_DIFFUSE, colour); glMaterialfv(GL_FRONT, GL_SPECULAR, colour); glMateriali(GL_FRONT, GL_SHININESS, 20); polys += cylinder(e, 0, 0, 0, 2, 1, 0.7, 2, 0, ONEREV); /* body */ colour[0] = colour[1] = colour[2] = 0.2; glMaterialfv(GL_FRONT, GL_AMBIENT_AND_DIFFUSE, colour); polys += cylinder(e, 1.6, 0, 0, 0.1, 1.05, 1.05, 0, 0, ONEREV); /* ring */ polys += cylinder(e, 1.8, 0, 0, 0.1, 1.05, 1.05, 0, 0, ONEREV); /* ring */ glEndList(); return polys; } static int CrankBit(Engine *e, GLfloat x) { int polys = 0; polys += Rect(x, -1.4, 0.5, 0.2, 1.8, 1); polys += cylinder(e, x, -0.5, 0, 0.2, 2, 2, 1, 60, 120); return polys; } static int boom(Engine *e, GLfloat x, GLfloat y, int s) { int polys = 0; int flameOut = 720/ENG.speed/ENG.cylinders; if (e->boom_time == 0 && s) { e->boom_red[0] = e->boom_red[1] = 0; e->boom_d = 0.05; e->boom_time++; glEnable(GL_LIGHT1); } else if (e->boom_time == 0 && !s) { return polys; } else if (e->boom_time >= 8 && e->boom_time < flameOut && !s) { e->boom_time++; e->boom_red[0] -= 0.2; e->boom_red[1] -= 0.1; e->boom_d-= 0.04; } else if (e->boom_time >= flameOut) { e->boom_time = 0; glDisable(GL_LIGHT1); return polys; } else { e->boom_red[0] += 0.2; e->boom_red[1] += 0.1; e->boom_d += 0.04; e->boom_time++; } e->boom_lpos[0] = x-e->boom_d; e->boom_lpos[1] = y; glLightfv(GL_LIGHT1, GL_POSITION, e->boom_lpos); glLightfv(GL_LIGHT1, GL_DIFFUSE, e->boom_red); glLightfv(GL_LIGHT1, GL_SPECULAR, e->boom_red); glLightf(GL_LIGHT1, GL_LINEAR_ATTENUATION, 1.3); glLighti(GL_LIGHT1, GL_CONSTANT_ATTENUATION, 0); glMaterialfv(GL_FRONT, GL_AMBIENT_AND_DIFFUSE, e->boom_red); e->boom_wd = e->boom_d*3; if (e->boom_wd > 0.7) e->boom_wd = 0.7; glEnable(GL_BLEND); glDepthMask(GL_FALSE); glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); polys += rod(e, x, y, 0, e->boom_d, e->boom_wd); glDepthMask(GL_TRUE); glDisable(GL_BLEND); return polys; } static int display(ModeInfo *mi) { Engine *e = &engine[MI_SCREEN(mi)]; int polys = 0; GLfloat zb, yb; float rightSide; int half; int sides; int j, b; glEnable(GL_LIGHTING); glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT); glLoadIdentity(); gluLookAt(e->viewer[0], e->viewer[1], e->viewer[2], e->lookat[0], e->lookat[1], e->lookat[2], 0.0, 1.0, 0.0); glPushMatrix(); # ifdef HAVE_MOBILE /* Keep it the same relative size when rotated. */ { GLfloat h = MI_HEIGHT(mi) / (GLfloat) MI_WIDTH(mi); int o = (int) current_device_rotation(); if (o != 0 && o != 180 && o != -180) glScalef (1/h, 1/h, 1/h); } # endif glLightfv(GL_LIGHT0, GL_POSITION, lightpos); glLightfv(GL_LIGHT0, GL_SPECULAR, light_sp); glLightfv(GL_LIGHT0, GL_DIFFUSE, light_sp); if (move) { double x, y, z; 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; gltrackball_rotate (e->trackball); 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); glRotatef(x*ONEREV, 0.0, 0.0, 1.0); } /* So the rotation appears around the centre of the engine */ glTranslatef(-5, 0, 0); /* crankshaft */ glPushMatrix(); glRotatef(e->display_a, 1, 0, 0); glCallList(e->shaft_list); polys += e->shaft_polys; glPopMatrix(); /* init the ln[] matrix for speed */ if (e->ln_init == 0) { for (e->ln_init = 0 ; e->ln_init < countof(e->sin_table) ; e->ln_init++) { zb = e->sin_table[e->ln_init]; yb = e->cos_table[e->ln_init]; /* y ordinate of piston */ e->yp[e->ln_init] = yb + sqrt(25 - (zb*zb)); /* length of rod */ e->ln[e->ln_init] = sqrt(zb*zb + (yb-e->yp[e->ln_init])*(yb-e->yp[e->ln_init])); /* angle of connecting rod */ e->ang[e->ln_init] = asin(zb/5)*57; e->ang[e->ln_init] *= -1; } } glPushMatrix(); sides = (ENG.includedAngle == 0) ? 1 : 2; for (half = 0; half < sides; half++, glRotatef(ENG.includedAngle,1,0,0)) { /* pistons */ /* glMaterialfv(GL_FRONT, GL_AMBIENT_AND_DIFFUSE, white); */ for (j = 0; j < ENG.cylinders; j += sides) { b = (e->display_a + ENG.pistonAngle[j+half]) % ONEREV; glPushMatrix(); glTranslatef(e->crankWidth/2 + e->crankOffset*(j+half), e->yp[b]-0.3, 0); glCallList(e->piston_list); polys += e->piston_polys; glPopMatrix(); } /* spark plugs */ glPushMatrix(); glRotatef(90, 0, 0, 1); glMaterialfv(GL_FRONT, GL_AMBIENT_AND_DIFFUSE, red); for (j = 0; j < ENG.cylinders; j += sides) { polys += cylinder(e, 8.5, -e->crankWidth/2-e->crankOffset*(j+half), 0, 0.5, 0.4, 0.3, 1, 0, ONEREV); } glMaterialfv(GL_FRONT, GL_AMBIENT_AND_DIFFUSE, white); for (j = 0; j < ENG.cylinders; j += sides) { polys += rod(e, 8, -e->crankWidth/2-e->crankOffset*(j+half), 0, 0.5, 0.2); polys += rod(e, 9, -e->crankWidth/2-e->crankOffset*(j+half), 0, 1, 0.15); } /* rod */ glMaterialfv(GL_FRONT, GL_AMBIENT_AND_DIFFUSE, blue); for (j = 0; j < ENG.cylinders; j += sides) { b = (e->display_a+HALFREV+ENG.pistonAngle[j+half]) % TWOREV; glPushMatrix(); glRotatef(e->ang[b], 0, 1, 0); polys += rod(e, -e->cos_table[b], -e->crankWidth/2-e->crankOffset*(j+half), -e->sin_table[b], e->ln[b], 0.2); glPopMatrix(); } glPopMatrix(); /* engine block */ glMaterialfv(GL_FRONT, GL_AMBIENT_AND_DIFFUSE, yellow_t); glEnable(GL_BLEND); glDepthMask(GL_FALSE); glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); rightSide = (sides > 1) ? 0 : 1.6; /* left plate */ polys += Rect(-e->crankWidth/2, -0.5, 1, 0.2, 9, 2); /* right plate */ polys += Rect(0.3+e->crankOffset*ENG.cylinders-rightSide, -0.5, 1, 0.2, 9, 2); /* head plate */ polys += Rect(-e->crankWidth/2+0.2, 8.3, 1, e->crankWidth/2+0.1+e->crankOffset*ENG.cylinders-rightSide, 0.2, 2); /* front rail */ polys += Rect(-e->crankWidth/2+0.2, 3, 1, e->crankWidth/2+0.1+e->crankOffset*ENG.cylinders-rightSide, 0.2, 0.2); /* back rail */ polys += Rect(-e->crankWidth/2+0.2, 3, -1+0.2, e->crankWidth/2+0.1+e->crankOffset*ENG.cylinders-rightSide, 0.2, 0.2); /* plates between cylinders */ for (j=0; j < ENG.cylinders - (sides == 1); j += sides) polys += Rect(0.4+e->crankWidth+e->crankOffset*(j-half), 3, 1, 1, 5.3, 2); glDepthMask(GL_TRUE); } glPopMatrix(); /* see which of our plugs should fire now, if any */ for (j = 0; j < ENG.cylinders; j++) { if (0 == ((e->display_a + ENG.pistonAngle[j]) % TWOREV)) { glPushMatrix(); if (j & 1) glRotatef(ENG.includedAngle,1,0,0); glRotatef(90, 0, 0, 1); polys += boom(e, 8, -e->crankWidth/2-e->crankOffset*j, 1); e->lastPlug = j; glPopMatrix(); } } if (e->lastPlug != j) { /* this code causes the last plug explosion to dim gradually */ if (e->lastPlug & 1) glRotatef(ENG.includedAngle, 1, 0, 0); glRotatef(90, 0, 0, 1); polys += boom(e, 8, -e->crankWidth/2-e->crankOffset*e->lastPlug, 0); } glDisable(GL_BLEND); e->display_a += ENG.speed; if (e->display_a >= TWOREV) e->display_a = 0; glPopMatrix(); glFlush(); return polys; } static int makeshaft (Engine *e) { int polys = 0; int j; float crankThick = 0.2; float crankDiam = 0.3; /* if (e->shaft_list) glDeleteLists(1, e->shaft_list); */ if (! e->shaft_list) e->shaft_list = glGenLists(1); glNewList(e->shaft_list, GL_COMPILE); glMaterialfv(GL_FRONT, GL_AMBIENT_AND_DIFFUSE, blue); /* draw the flywheel */ polys += cylinder(e, -2.5, 0, 0, 1, 3, 2.5, 0, 0, ONEREV); polys += Rect(-2, -0.3, 2.8, 0.5, 0.6, 5.6); polys += Rect(-2, -2.8, 0.3, 0.5, 5.6, 0.6); /* now make each of the shaft bits between the cranks, * starting from the flywheel end which is at X-coord 0. * the first cranskhaft bit is always 2 units long */ polys += rod(e, -2, 0, 0, 2, crankDiam); /* Each crank is crankWidth units wide and the total width of a * cylinder assembly is 3.3 units. For inline engines, there is just * a single crank per cylinder width. For other engine * configurations, there is a crank between each pair of adjacent * cylinders on one side of the engine, so the crankOffset length is * halved. */ e->crankOffset = 3.3; if (ENG.includedAngle != 0) e->crankOffset /= 2; for (j = 0; j < ENG.cylinders - 1; j++) polys += rod(e, e->crankWidth - crankThick + e->crankOffset*j, 0, 0, e->crankOffset - e->crankWidth + 2 * crankThick, crankDiam); /* the last bit connects to the engine wall on the non-flywheel end */ polys += rod(e, e->crankWidth - crankThick + e->crankOffset*j, 0, 0, 0.9, crankDiam); for (j = 0; j < ENG.cylinders; j++) { glPushMatrix(); if (j & 1) glRotatef(HALFREV+ENG.pistonAngle[j]+ENG.includedAngle,1,0,0); else glRotatef(HALFREV+ENG.pistonAngle[j],1,0,0); /* draw wrist pin */ glMaterialfv(GL_FRONT, GL_AMBIENT_AND_DIFFUSE, blue); polys += rod(e, e->crankOffset*j, -1.0, 0.0, e->crankWidth, crankDiam); glMaterialfv(GL_FRONT, GL_AMBIENT_AND_DIFFUSE, green); /* draw right part of crank */ polys += CrankBit(e, e->crankOffset*j); /* draw left part of crank */ polys += CrankBit(e, e->crankWidth-crankThick+e->crankOffset*j); glPopMatrix(); } glEndList(); return polys; } ENTRYPOINT void reshape_engine(ModeInfo *mi, int width, int height) { Engine *e = &engine[MI_SCREEN(mi)]; glViewport(0,0,(GLint)width, (GLint) height); glMatrixMode(GL_PROJECTION); glLoadIdentity(); /* glFrustum(-1.0,1.0,-1.0,1.0,1.5,70.0);*/ gluPerspective(40.0,((GLdouble)width)/height,1.5,70.0); glMatrixMode(GL_MODELVIEW); e->win_h = height; e->win_w = width; } ENTRYPOINT void init_engine(ModeInfo *mi) { int screen = MI_SCREEN(mi); Engine *e; if (engine == NULL) { if ((engine = (Engine *) calloc(MI_NUM_SCREENS(mi), sizeof(Engine))) == NULL) return; } e = &engine[screen]; e->window = MI_WINDOW(mi); e->x = e->y = e->z = e->a = e->an1 = e->nx = e->ny = e->nz = e->dx = e->dy = e->dz = e->da = 0; if (move) { e->dx = (float)(random() % 1000)/30000; e->dy = (float)(random() % 1000)/30000; e->dz = (float)(random() % 1000)/30000; } else { e->viewer[0] = 0; e->viewer[1] = 2; e->viewer[2] = 18; e->lookat[0] = 0; e->lookat[1] = 0; e->lookat[2] = 0; } if (spin) { e->da = (float)(random() % 1000)/125 - 4; e->nx = (float)(random() % 100) / 100; e->ny = (float)(random() % 100) / 100; e->nz = (float)(random() % 100) / 100; } { double spin_speed = 0.5; double wander_speed = 0.01; e->crankWidth = 1.5; e->boom_red[3] = 0.9; e->boom_lpos[3] = 1; e->viewer[2] = 30; e->rot = make_rotator (spin ? spin_speed : 0, spin ? spin_speed : 0, spin ? spin_speed : 0, 1.0, move ? wander_speed : 0, True); e->trackball = gltrackball_init (True); } if (!e->glx_context && /* re-initting breaks print_texture_label */ (e->glx_context = init_GL(mi)) != NULL) { reshape_engine(mi, MI_WIDTH(mi), MI_HEIGHT(mi)); } else { MI_CLEARWINDOW(mi); } glShadeModel(GL_SMOOTH); glPolygonMode(GL_FRONT_AND_BACK,GL_FILL); glEnable(GL_DEPTH_TEST); glEnable(GL_LIGHTING); glEnable(GL_LIGHT0); glEnable(GL_NORMALIZE); make_tables(e); e->engineType = find_engine(which_engine); if (!e->engine_name) e->engine_name = malloc(200); sprintf (e->engine_name, "%s\n%s%d%s", engines[e->engineType].engineName, (engines[e->engineType].includedAngle == 0 ? "" : engines[e->engineType].includedAngle == 180 ? "Flat " : "V"), engines[e->engineType].cylinders, (engines[e->engineType].includedAngle == 0 ? " Cylinder" : "") ); e->shaft_polys = makeshaft(e); e->piston_polys = makepiston(e); if (!e->font_data) e->font_data = load_texture_font (mi->dpy, "titleFont"); } ENTRYPOINT Bool engine_handle_event (ModeInfo *mi, XEvent *event) { Engine *e = &engine[MI_SCREEN(mi)]; if (event->xany.type == ButtonPress && event->xbutton.button == Button1) { return True; } else if (event->xany.type == ButtonRelease && event->xbutton.button == Button1) { e->movepaused = 0; } if (gltrackball_event_handler (event, e->trackball, MI_WIDTH (mi), MI_HEIGHT (mi), &e->button_down_p)) return True; else if (screenhack_event_helper (MI_DISPLAY(mi), MI_WINDOW(mi), event)) { which_engine = NULL; /* randomize */ init_engine(mi); return True; } return False; } ENTRYPOINT void draw_engine(ModeInfo *mi) { Engine *e = &engine[MI_SCREEN(mi)]; Window w = MI_WINDOW(mi); Display *disp = MI_DISPLAY(mi); if (!e->glx_context) return; glXMakeCurrent(disp, w, *(e->glx_context)); mi->polygon_count = display(mi); glColor3f (1, 1, 0); if (do_titles) print_texture_label (mi->dpy, e->font_data, mi->xgwa.width, mi->xgwa.height, 1, e->engine_name); if(mi->fps_p) do_fps(mi); glFinish(); glXSwapBuffers(disp, w); } ENTRYPOINT void release_engine(ModeInfo *mi) { if (engine != NULL) { (void) free((void *) engine); engine = NULL; } FreeAllGL(mi); } XSCREENSAVER_MODULE ("Engine", engine) #endif xscreensaver-5.36/hacks/glx/flipscreen3d.c000644 000767 000024 00000033277 12705634343 020571 0ustar00jwzstaff000000 000000 /* * flipscreen3d - takes snapshots of the screen and flips it around * * version 1.0 - Oct 24, 2001 * * Copyright (C) 2001 Ben Buxton (bb@cactii.net) * * 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. */ #ifdef STANDALONE #define DEFAULTS "*delay: 20000 \n" \ "*showFPS: False \n" \ "*wireframe: False \n" \ "*useSHM: True \n" \ "*suppressRotationAnimation: True\n" \ # define refresh_screenflip 0 # include "xlockmore.h" /* from the xscreensaver distribution */ # include "gltrackball.h" #else /* !STANDALONE */ # include "xlock.h" /* from the xlockmore distribution */ #endif /* !STANDALONE */ /* lifted from lament.c */ #define RAND(n) ((long) ((random() & 0x7fffffff) % ((long) (n)))) #define RANDSIGN() ((random() & 1) ? 1 : -1) #ifdef USE_GL /* Should be in */ # ifndef GL_TEXTURE_MAX_ANISOTROPY_EXT # define GL_TEXTURE_MAX_ANISOTROPY_EXT 0x84FE # endif # ifndef GL_MAX_TEXTURE_MAX_ANISOTROPY_EXT # define GL_MAX_TEXTURE_MAX_ANISOTROPY_EXT 0x84FF # endif #define DEF_ROTATE "True" static int rotate; #define QW 12 #define QH 12 #undef countof #define countof(x) (sizeof((x))/sizeof((*x))) static XrmOptionDescRec opts[] = { {"+rotate", ".screenflip.rotate", XrmoptionNoArg, "false" }, {"-rotate", ".screenflip.rotate", XrmoptionNoArg, "true" }, }; static argtype vars[] = { {&rotate, "rotate", "Rotate", DEF_ROTATE, t_Bool}, }; ENTRYPOINT ModeSpecOpt screenflip_opts = {countof(opts), opts, countof(vars), vars, NULL}; #ifdef USE_MODULES ModStruct screenflip_description = {"screenflip", "init_screenflip", "draw_screenflip", "release_screenflip", "draw_screenflip", "init_screenflip", NULL, &screenflip_opts, 1000, 1, 2, 1, 4, 1.0, "", "Screenflips", 0, NULL}; #endif typedef struct { GLXContext *glx_context; Window window; int winw, winh; int tw, th; /* texture width, height */ GLfloat min_tx, min_ty; GLfloat max_tx, max_ty; GLfloat qx, qy, qw, qh; /* the quad we'll draw */ int regrab; int fadetime; /* fade before regrab */ trackball_state *trackball; Bool button_down_p; GLfloat show_colors[4]; GLfloat stretch_val_x, stretch_val_y; GLfloat stretch_val_dx, stretch_val_dy; GLfloat curx, cury, curz; GLfloat rx, ry, rz; GLfloat rot, drot, odrot, ddrot, orot; float theta, rho, dtheta, drho, gamma, dgamma; GLuint texid; Bool mipmap_p; Bool waiting_for_image_p; Bool first_image_p; GLfloat anisotropic; } Screenflip; static Screenflip *screenflip = NULL; #include "grab-ximage.h" static const GLfloat viewer[] = {0.0, 0.0, 15.0}; static void getSnapshot (ModeInfo *); ENTRYPOINT Bool screenflip_handle_event (ModeInfo *mi, XEvent *event) { Screenflip *c = &screenflip[MI_SCREEN(mi)]; if (gltrackball_event_handler (event, c->trackball, MI_WIDTH (mi), MI_HEIGHT (mi), &c->button_down_p)) return True; else if (screenhack_event_helper (MI_DISPLAY(mi), MI_WINDOW(mi), event)) { if (!c->waiting_for_image_p) { getSnapshot (mi); return True; } } return False; } /* draw the texture mapped quad (actually two back to back)*/ static void showscreen(Screenflip *c, int frozen, int wire) { GLfloat x, y, w, h; if (c->fadetime) { /* r -= 0.02; g -= 0.02; b -= 0.02; */ c->show_colors[3] -= 0.02; if (c->show_colors[3] < 0) { c->regrab = 1; c->fadetime = 0; } } else if (c->show_colors[3] < 0) { c->show_colors[0] = c->show_colors[1] = c->show_colors[2] = c->show_colors[3] = 1; c->stretch_val_x = c->stretch_val_y = c->stretch_val_dx = c->stretch_val_dy = 0; } if (c->stretch_val_dx == 0 && !frozen && !(random() % 25)) c->stretch_val_dx = (float)(random() % 100) / 5000; if (c->stretch_val_dy == 0 && !frozen && !(random() % 25)) c->stretch_val_dy = (float)(random() % 100) / 5000; x = c->qx; y = c->qy; w = c->qx+c->qw; h = c->qy-c->qh; if (!frozen) { w *= sin (c->stretch_val_x) + 1; x *= sin (c->stretch_val_x) + 1; if (!c->button_down_p) { if (!c->fadetime) c->stretch_val_x += c->stretch_val_dx; if (c->stretch_val_x > 2*M_PI && !(random() % 5)) c->stretch_val_dx = (float)(random() % 100) / 5000; else c->stretch_val_x -= 2*M_PI; } if (!c->button_down_p && !c->fadetime) c->stretch_val_y += c->stretch_val_dy; h *= sin (c->stretch_val_y) / 2 + 1; y *= sin (c->stretch_val_y) / 2 + 1; if (!c->button_down_p) { if (c->stretch_val_y > 2*M_PI && !(random() % 5)) c->stretch_val_dy = (float)(random() % 100) / 5000; else c->stretch_val_y -= 2*M_PI; } } glColor4f(c->show_colors[0], c->show_colors[1], c->show_colors[2], c->show_colors[3]); if (!wire) { glEnable(GL_TEXTURE_2D); glEnable(GL_BLEND); glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); glDepthMask(GL_FALSE); } glBegin(wire ? GL_LINE_LOOP : GL_QUADS); glNormal3f(0, 0, 1); glTexCoord2f(c->max_tx, c->max_ty); glVertex3f(w, h, 0); glTexCoord2f(c->max_tx, c->min_ty); glVertex3f(w, y, 0); glTexCoord2f(c->min_tx, c->min_ty); glVertex3f(x, y, 0); glTexCoord2f(c->min_tx, c->max_ty); glVertex3f(x, h, 0); glNormal3f(0, 0, -1); glTexCoord2f(c->min_tx, c->min_ty); glVertex3f(x, y, -0.05); glTexCoord2f(c->max_tx, c->min_ty); glVertex3f(w, y, -0.05); glTexCoord2f(c->max_tx, c->max_ty); glVertex3f(w, h, -0.05); glTexCoord2f(c->min_tx, c->max_ty); glVertex3f(x, h, -0.05); glEnd(); glDisable(GL_TEXTURE_2D); glDepthMask(GL_TRUE); glBegin(GL_LINE_LOOP); glVertex3f(x, y, 0); glVertex3f(x, h, 0); glVertex3f(w, h, 0); glVertex3f(w, y, 0); glEnd(); glDisable(GL_BLEND); } /* This function is responsible for 'zooming back' the square after * a new chunk has been grabbed with getSnapshot(), and positioning * it suitably on the screen. Once positioned (where we begin to rotate), * it just does a glTranslatef() and returns 1 */ static int inposition(Screenflip *c) { GLfloat wx; GLfloat wy; wx = 0 - (c->qw/2); wy = (c->qh/2); if (c->curx == 0) c->curx = c->qx; if (c->cury == 0) c->cury = c->qy; if (c->regrab) { c->curz = 0; c->curx = c->qx; c->cury = c->qy; c->regrab = 0; } if (c->curz > -10 || c->curx > wx + 0.1 || c->curx < wx - 0.1 || c->cury > wy + 0.1 || c->cury < wy - 0.1) { if (c->curz > -10) c->curz -= 0.05; if (c->curx > wx) { c->qx -= 0.02; c->curx -= 0.02; } if (c->curx < wx) { c->qx += 0.02; c->curx += 0.02; } if (c->cury > wy) { c->qy -= 0.02; c->cury -= 0.02; } if (c->cury < wy) { c->qy += 0.02; c->cury += 0.02; } glTranslatef(0, 0, c->curz); return 0; } glTranslatef(0, 0, c->curz); return 1; } #if 0 static void drawgrid(void) { int i; glColor3f(0, 0.7, 0); glBegin(GL_LINES); for (i = 0 ; i <= 50; i+=2) { glVertex3f( -25, -15, i-70); glVertex3f( 25, -15, i-70); glVertex3f( i-25, -15, -70); glVertex3f( i-25, -15, -20); } glEnd(); } #endif static void display(Screenflip *c, int wire) { int frozen; /* GLfloat rot = current_device_rotation();*/ glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT); glLoadIdentity(); gluLookAt(viewer[0], viewer[1], viewer[2], 0.0, 0.0, 0.0, 0.0, 1.0, 0.0); glPushMatrix(); /* glRotatef(rot, 0, 0, 1); if ((rot > 45 && rot < 135) || (rot < -45 && rot > -135)) { GLfloat s = c->winw / (GLfloat) c->winh; glScalef (s, 1/s, 1); } */ if (inposition(c)) { frozen = 0; glTranslatef(5 * sin(c->theta), 5 * sin(c->rho), 10 * cos(c->gamma) - 10); /* randomly change the speed */ if (!c->button_down_p && !(random() % 300)) { if (random() % 2) c->drho = 1/60 - (float)(random() % 100)/3000; if (random() % 2) c->dtheta = 1/60 - (float)(random() % 100)/3000; if (random() % 2) c->dgamma = 1/60 - (float)(random() % 100)/3000; } /* glRotatef(-rot, 0, 0, 1);*/ gltrackball_rotate (c->trackball); /* glRotatef(rot, 0, 0, 1);*/ if (rotate) glRotatef(c->rot, c->rx, c->ry, c->rz); /* update variables with each frame */ if(!c->button_down_p && !c->fadetime) { c->theta += c->dtheta; c->rho += c->drho; c->gamma += c->dgamma; c->rot += c->drot; c->drot += c->ddrot; } /* dont let our rotation speed get too high */ if (c->drot > 5 && c->ddrot > 0) c->ddrot = 0 - (GLfloat)(random() % 100) / 1000; else if (c->drot < -5 && c->ddrot < 0) c->ddrot = (GLfloat)(random() % 100) / 1000; } else { /* reset some paramaters */ c->ddrot = 0.05 - (GLfloat)(random() % 100) / 1000; c->theta = c->rho = c->gamma = 0; c->rot = 0; frozen = 1; } if (!c->button_down_p && !c->fadetime && (c->rot >= 360 || c->rot <= -360) && !(random() % 7)) { /* rotate change */ c->rx = (GLfloat)(random() % 100) / 100; c->ry = (GLfloat)(random() % 100) / 100; c->rz = (GLfloat)(random() % 100) / 100; } if (c->odrot * c->drot < 0 && c->tw < c->winw && !(random() % 10)) { c->fadetime = 1; /* randomly fade and get new snapshot */ } c->orot = c->rot; c->odrot = c->drot; if (c->rot > 360 || c->rot < -360) /* dont overflow rotation! */ c->rot -= c->rot; showscreen(c, frozen, wire); glPopMatrix(); glFlush(); } ENTRYPOINT void reshape_screenflip(ModeInfo *mi, int width, int height) { Screenflip *c = &screenflip[MI_SCREEN(mi)]; glViewport(0,0,(GLint)width, (GLint) height); glMatrixMode(GL_PROJECTION); glLoadIdentity(); gluPerspective(45, 1, 2.0, 85); glMatrixMode(GL_MODELVIEW); c->winw = width; c->winh = height; } static void image_loaded_cb (const char *filename, XRectangle *geometry, int image_width, int image_height, int texture_width, int texture_height, void *closure) { Screenflip *c = (Screenflip *) closure; c->tw = texture_width; c->th = texture_height; c->min_tx = (GLfloat) geometry->x / c->tw; c->min_ty = (GLfloat) geometry->y / c->th; c->max_tx = (GLfloat) (geometry->x + geometry->width) / c->tw; c->max_ty = (GLfloat) (geometry->y + geometry->height) / c->th; c->qx = -QW/2 + ((GLfloat) geometry->x * QW / image_width); c->qy = QH/2 - ((GLfloat) geometry->y * QH / image_height); c->qw = QW * ((GLfloat) geometry->width / image_width); c->qh = QH * ((GLfloat) geometry->height / image_height); glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, (c->mipmap_p ? GL_LINEAR_MIPMAP_LINEAR : GL_LINEAR)); if (c->anisotropic >= 1.0) glTexParameterf (GL_TEXTURE_2D, GL_TEXTURE_MAX_ANISOTROPY_EXT, c->anisotropic); c->waiting_for_image_p = False; c->first_image_p = False; } static void getSnapshot (ModeInfo *modeinfo) { Screenflip *c = &screenflip[MI_SCREEN(modeinfo)]; if (MI_IS_WIREFRAME(modeinfo)) return; c->waiting_for_image_p = True; c->mipmap_p = True; load_texture_async (modeinfo->xgwa.screen, modeinfo->window, *c->glx_context, 0, 0, c->mipmap_p, c->texid, image_loaded_cb, c); } ENTRYPOINT void init_screenflip(ModeInfo *mi) { int screen = MI_SCREEN(mi); Screenflip *c; if (screenflip == NULL) { if ((screenflip = (Screenflip *) calloc(MI_NUM_SCREENS(mi), sizeof(Screenflip))) == NULL) return; } c = &screenflip[screen]; c->window = MI_WINDOW(mi); c->trackball = gltrackball_init (False); if ((c->glx_context = init_GL(mi)) != NULL) { reshape_screenflip(mi, MI_WIDTH(mi), MI_HEIGHT(mi)); } else { MI_CLEARWINDOW(mi); } c->winh = MI_WIN_HEIGHT(mi); c->winw = MI_WIN_WIDTH(mi); c->qw = QW; c->qh = QH; c->qx = -6; c->qy = 6; c->rx = c->ry = 1; c->odrot = 1; c->show_colors[0] = c->show_colors[1] = c->show_colors[2] = c->show_colors[3] = 1; if (! MI_IS_WIREFRAME(mi)) { glShadeModel(GL_SMOOTH); glPolygonMode(GL_FRONT_AND_BACK,GL_FILL); glEnable(GL_DEPTH_TEST); glEnable(GL_CULL_FACE); glCullFace(GL_BACK); glDisable(GL_LIGHTING); } if (strstr ((char *) glGetString(GL_EXTENSIONS), "GL_EXT_texture_filter_anisotropic")) glGetFloatv (GL_MAX_TEXTURE_MAX_ANISOTROPY_EXT, &c->anisotropic); else c->anisotropic = 0.0; glGenTextures(1, &c->texid); c->first_image_p = True; getSnapshot(mi); } ENTRYPOINT void draw_screenflip(ModeInfo *mi) { Screenflip *c = &screenflip[MI_SCREEN(mi)]; Window w = MI_WINDOW(mi); Display *disp = MI_DISPLAY(mi); if (!c->glx_context) return; /* Wait for the first image; for subsequent images, load them in the background while animating. */ if (c->waiting_for_image_p && c->first_image_p) return; glXMakeCurrent(disp, w, *(c->glx_context)); glBindTexture(GL_TEXTURE_2D, c->texid); if (c->regrab) getSnapshot(mi); display(c, MI_IS_WIREFRAME(mi)); if(mi->fps_p) do_fps(mi); glFinish(); glXSwapBuffers(disp, w); } ENTRYPOINT void release_screenflip(ModeInfo *mi) { if (screenflip != NULL) { (void) free((void *) screenflip); screenflip = NULL; } FreeAllGL(mi); } XSCREENSAVER_MODULE_2 ("FlipScreen3D", flipscreen3d, screenflip) #endif xscreensaver-5.36/hacks/glx/dnalogo.c000664 000767 000024 00000274704 12720205163 017626 0ustar00jwzstaff000000 000000 /* DNA Logo, Copyright (c) 2001-2016 Jamie Zawinski * * DNA Lounge * * Restaurant -- Bar -- Nightclub -- Cafe -- Est. 1985. * * 375 Eleventh Street * San Francisco, CA * 94103 * * https://www.dnalounge.com/ * http://www.dnapizza.com/ * * 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. */ #define DEFAULTS __extension__ \ "*delay: 25000 \n" \ "*showFPS: False \n" \ "*wireframe: False \n" \ "*doGasket: True \n" \ "*doHelix: True \n" \ "*doLadder: True \n" \ "*doFrame: True \n" \ "*wallFacets: 360 \n" \ "*barFacets: 90 \n" \ "*clockwise: False \n" \ "*turns: 0.69 \n" \ "*turnSpacing: 2.2 \n" \ "*barSpacing: 0.24 \n" \ "*wallHeight: 0.45 \n" \ "*wallThickness: 0.12 \n" \ "*barThickness: 0.058 \n" \ "*wallTaper: 0.95 \n" \ "*gasketSize: 1.88 \n" \ "*gasketDepth: 0.15 \n" \ "*gasketThickness: 0.4 \n" \ "*frameSize: 1.20 \n" \ "*frameDepth: 0.01 \n" \ "*frameThickness: 0.03 \n" \ "*triangleSize: 0.045 \n" \ "*cwFacets: 3 \n" \ "*cwDiscFacets: 64 \n" \ "*cwSpread: 0.5 \n" \ "*cwLineWidth: 0.18 \n" \ "*cwThickness: 0.15 \n" \ "*cwCapSize: 0.4 \n" \ "*text: CODEWORD\n" \ "*speed: 1.0 \n" \ "*mode: both" "\n" \ ".background: #000000\n" \ ".foreground: #00AA00\n" \ ".cwForeground: #FCA816\n" \ ".cwBackground: #943225\n" \ "*cwFont: " CWFONT "\n" \ "*geometry: =640x640\n" \ # if defined(HAVE_COCOA) || defined(HAVE_ANDROID) # define CWFONT "Yearling 28, OCR A Std 24" # else # define CWFONT "-*-helvetica-medium-r-normal-*-*-240-*-*-*-*-*-*" # endif # define refresh_logo 0 # define release_logo 0 #undef countof #define countof(x) (sizeof((x))/sizeof((*x))) #undef DXF_OUTPUT_HACK #ifdef DXF_OUTPUT_HACK /* When this is defined, instead of rendering to the screen, we write a DXF CAD file to stdout. This is a kludge of shocking magnitude... Maybe there's some other way to intercept all glVertex3f calls than with a #define? */ # define unit_tube dxf_unit_tube # define unit_cone dxf_unit_cone # define tube_1 dxf_tube_1 # define tube dxf_tube # define cone dxf_cone #endif /* DXF_OUTPUT_HACK */ #include "xlockmore.h" #include "normals.h" #include "tube.h" #include "sphere.h" #include "rotator.h" #include "gltrackball.h" #include "utf8wc.h" #include "texfont.h" #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, HELIX_AND_PIZZA, CODEWORD_IN, CODEWORD, CODEWORD_OUT, CODEWORD_BLANK } glyph_mode; typedef struct { Bool spinning_p; GLfloat position; /* 0.0 - 1.0 */ GLfloat position_eased; /* 0.0 - 1.0, eased in and out */ GLfloat easement; /* portion of path that is eased. <= 0.5 */ GLfloat speed; /* how far along the path (may be negative) */ GLfloat probability; /* relative likelyhood to start spinning */ } spinner; typedef struct { GLXContext *glx_context; GLuint helix_list, helix_list_wire, helix_list_facetted; GLuint pizza_list, pizza_list_wire, pizza_list_facetted; GLuint gasket_list, gasket_list_wire; GLuint frame_list, frame_list_wire; int polys[7]; int wall_facets; int bar_facets; Bool clockwise; GLfloat color[4]; GLfloat turns; GLfloat turn_spacing; GLfloat bar_spacing; GLfloat wall_height; GLfloat wall_thickness; GLfloat bar_thickness; GLfloat wall_taper; GLfloat gasket_size; GLfloat gasket_depth; GLfloat gasket_thickness; GLfloat frame_size; GLfloat frame_depth; GLfloat frame_thickness; GLfloat triangle_size; int codeword_facets, codeword_disc_facets; GLfloat codeword_spread, codeword_line_width, codeword_thickness; GLfloat codeword_cap_size; const char *codeword_text; char *codeword_text_out; int *codeword_text_points; XYZ *codeword_path; int codeword_path_npoints; int codeword_nguides; XYZ *codeword_guides; GLfloat codeword_color[4], codeword_bg[4]; texture_font_data *font; GLfloat speed; glyph_mode mode; glyph_mode anim_state; GLfloat anim_ratio; spinner gasket_spinnerx, gasket_spinnery, gasket_spinnerz; spinner scene_spinnerx, scene_spinnery; /* for DNA */ rotator *scene_rot; /* for Codeword */ spinner helix_spinnerz; spinner pizza_spinnery, pizza_spinnerz; spinner frame_spinner; trackball_state *trackball; Bool button_down_p; int wire_overlay; /* frame countdown */ } logo_configuration; static logo_configuration *dcs = NULL; static XrmOptionDescRec opts[] = { { "-speed", ".speed", XrmoptionSepArg, 0 }, { "-mode", ".mode", XrmoptionSepArg, 0 }, { "-pizza", ".mode", XrmoptionNoArg, "pizza" }, { "-helix", ".mode", XrmoptionNoArg, "helix" }, { "-both", ".mode", XrmoptionNoArg, "both" }, { "-codeword", ".mode", XrmoptionNoArg, "codeword" }, { "-cw", ".mode", XrmoptionNoArg, "codeword" }, { "-text", ".text", XrmoptionSepArg, 0 }, }; ENTRYPOINT ModeSpecOpt logo_opts = {countof(opts), opts, 0, NULL, NULL}; #define PROBABILITY_SCALE 600 #ifdef DXF_OUTPUT_HACK # define glBegin dxf_glBegin # define glVertex3f dxf_glVertex3f # define glVertex3dv dxf_glVertex3dv # define glEnd dxf_glEnd # define glVertexPointer dxf_glVertexPointer # define glDrawArrays dxf_glDrawArrays static int dxf_type, dxf_point, dxf_point_total, dxf_layer, dxf_color; static GLfloat dxf_quads[4*4]; static void dxf_glBegin (int type) { dxf_type = type; dxf_point = 0; dxf_point_total = 0; } static void dxf_glVertex3f (GLfloat ox, GLfloat oy, GLfloat oz) { int i = 0; GLfloat m[4*4]; GLfloat x, y, z; /* Transform the point into modelview space. */ glGetFloatv (GL_MODELVIEW_MATRIX, m); x = ox * m[0] + oy * m[4] + oz * m[8] + m[12]; y = ox * m[1] + oy * m[5] + oz * m[9] + m[13]; z = ox * m[2] + oy * m[6] + oz * m[10] + m[14]; dxf_quads[dxf_point*3+0] = x; dxf_quads[dxf_point*3+1] = y; dxf_quads[dxf_point*3+2] = z; dxf_point++; dxf_point_total++; switch (dxf_type) { case GL_QUADS: if (dxf_point < 4) return; fprintf (stdout, "0\n3DFACE\n8\n%d\n62\n%d\n", dxf_layer, dxf_color); fprintf (stdout, "10\n%.6f\n", dxf_quads[i++]); fprintf (stdout, "20\n%.6f\n", dxf_quads[i++]); fprintf (stdout, "30\n%.6f\n", dxf_quads[i++]); fprintf (stdout, "11\n%.6f\n", dxf_quads[i++]); fprintf (stdout, "21\n%.6f\n", dxf_quads[i++]); fprintf (stdout, "31\n%.6f\n", dxf_quads[i++]); fprintf (stdout, "12\n%.6f\n", dxf_quads[i++]); fprintf (stdout, "22\n%.6f\n", dxf_quads[i++]); fprintf (stdout, "32\n%.6f\n", dxf_quads[i++]); fprintf (stdout, "13\n%.6f\n", dxf_quads[i++]); fprintf (stdout, "23\n%.6f\n", dxf_quads[i++]); fprintf (stdout, "33\n%.6f\n", dxf_quads[i++]); dxf_point = 0; break; case GL_QUAD_STRIP: if (dxf_point < 4) return; fprintf (stdout, "0\n3DFACE\n8\n%d\n62\n%d\n", dxf_layer, dxf_color); fprintf (stdout, "10\n%.6f\n", dxf_quads[i++]); fprintf (stdout, "20\n%.6f\n", dxf_quads[i++]); fprintf (stdout, "30\n%.6f\n", dxf_quads[i++]); fprintf (stdout, "11\n%.6f\n", dxf_quads[i++]); fprintf (stdout, "21\n%.6f\n", dxf_quads[i++]); fprintf (stdout, "31\n%.6f\n", dxf_quads[i++]); fprintf (stdout, "12\n%.6f\n", dxf_quads[i+3]); /* funky quad strip */ fprintf (stdout, "22\n%.6f\n", dxf_quads[i+4]); /* vert order: 1243. */ fprintf (stdout, "32\n%.6f\n", dxf_quads[i+5]); fprintf (stdout, "13\n%.6f\n", dxf_quads[i]); fprintf (stdout, "23\n%.6f\n", dxf_quads[i+1]); fprintf (stdout, "33\n%.6f\n", dxf_quads[i+2]); i += 6; dxf_quads[0] = dxf_quads[6]; /* copy point 3 to pos 1 */ dxf_quads[1] = dxf_quads[7]; dxf_quads[2] = dxf_quads[8]; dxf_quads[3] = dxf_quads[9]; /* copy point 4 to pos 2 */ dxf_quads[4] = dxf_quads[10]; dxf_quads[5] = dxf_quads[11]; dxf_point = 2; /* leave those two points in queue */ break; case GL_TRIANGLES: case GL_TRIANGLE_FAN: if (dxf_point < 3) return; fprintf (stdout, "0\n3DFACE\n8\n%d\n62\n%d\n", dxf_layer, dxf_color); fprintf (stdout, "10\n%.6f\n", dxf_quads[i++]); fprintf (stdout, "20\n%.6f\n", dxf_quads[i++]); fprintf (stdout, "30\n%.6f\n", dxf_quads[i++]); fprintf (stdout, "11\n%.6f\n", dxf_quads[i++]); fprintf (stdout, "21\n%.6f\n", dxf_quads[i++]); fprintf (stdout, "31\n%.6f\n", dxf_quads[i++]); fprintf (stdout, "12\n%.6f\n", dxf_quads[i++]); fprintf (stdout, "22\n%.6f\n", dxf_quads[i++]); fprintf (stdout, "32\n%.6f\n", dxf_quads[i++]); i -= 3; fprintf (stdout, "13\n%.6f\n", dxf_quads[i++]); /* dup pt 4 as pt 3. */ fprintf (stdout, "23\n%.6f\n", dxf_quads[i++]); fprintf (stdout, "33\n%.6f\n", dxf_quads[i++]); dxf_point = 0; if (dxf_type == GL_TRIANGLE_FAN) { dxf_quads[3] = dxf_quads[6]; /* copy point 3 to point 2 */ dxf_quads[4] = dxf_quads[7]; dxf_quads[5] = dxf_quads[8]; dxf_point = 2; /* leave two points in queue */ } break; case GL_TRIANGLE_STRIP: if (dxf_point < 3) return; fprintf (stdout, "0\n3DFACE\n8\n%d\n62\n%d\n", dxf_layer, dxf_color); fprintf (stdout, "10\n%.6f\n", dxf_quads[i++]); fprintf (stdout, "20\n%.6f\n", dxf_quads[i++]); fprintf (stdout, "30\n%.6f\n", dxf_quads[i++]); fprintf (stdout, "11\n%.6f\n", dxf_quads[i++]); fprintf (stdout, "21\n%.6f\n", dxf_quads[i++]); fprintf (stdout, "31\n%.6f\n", dxf_quads[i++]); fprintf (stdout, "12\n%.6f\n", dxf_quads[i++]); fprintf (stdout, "22\n%.6f\n", dxf_quads[i++]); fprintf (stdout, "32\n%.6f\n", dxf_quads[i++]); i -= 3; fprintf (stdout, "13\n%.6f\n", dxf_quads[i++]); /* dup pt 4 as pt 3. */ fprintf (stdout, "23\n%.6f\n", dxf_quads[i++]); fprintf (stdout, "33\n%.6f\n", dxf_quads[i++]); dxf_quads[0] = dxf_quads[3]; /* copy point 2 to pos 1 */ dxf_quads[1] = dxf_quads[4]; dxf_quads[2] = dxf_quads[5]; dxf_quads[3] = dxf_quads[6]; /* copy point 3 to pos 2 */ dxf_quads[4] = dxf_quads[7]; dxf_quads[5] = dxf_quads[8]; dxf_point = 2; /* leave those two points in queue */ break; case GL_LINES: case GL_LINE_STRIP: case GL_LINE_LOOP: if (dxf_point_total == 1) { dxf_quads[6] = ox; dxf_quads[7] = oy; dxf_quads[8] = oz; } if (dxf_point < 2) return; fprintf (stdout, "0\nLINE\n8\n%d\n62\n%d\n", dxf_layer, dxf_color); fprintf (stdout, "10\n%.6f\n", dxf_quads[i++]); fprintf (stdout, "20\n%.6f\n", dxf_quads[i++]); fprintf (stdout, "30\n%.6f\n", dxf_quads[i++]); fprintf (stdout, "11\n%.6f\n", dxf_quads[i++]); fprintf (stdout, "21\n%.6f\n", dxf_quads[i++]); fprintf (stdout, "31\n%.6f\n", dxf_quads[i++]); dxf_point = 0; if (dxf_type != GL_LINES) { dxf_quads[0] = dxf_quads[3]; dxf_quads[1] = dxf_quads[4]; dxf_quads[2] = dxf_quads[5]; dxf_point = 1; } break; default: abort(); break; } } static void dxf_glVertex3dv (const GLdouble *v) { glVertex3f (v[0], v[1], v[2]); } static void dxf_glEnd(void) { if (dxf_type == GL_LINE_LOOP) /* close loop */ glVertex3f (dxf_quads[6], dxf_quads[7], dxf_quads[8]); dxf_type = -1; dxf_point = 0; dxf_point_total = 0; } static void dxf_start (void) { fprintf (stdout, "0\nSECTION\n2\nHEADER\n0\nENDSEC\n"); fprintf (stdout, "0\nSECTION\n2\nENTITIES\n"); } static void dxf_end (void) { fprintf (stdout, "0\nENDSEC\n0\nEOF\n"); exit (0); } static const GLvoid *dxf_vp; static GLsizei dxf_vp_size; static GLsizei dxf_vp_stride; static void dxf_glVertexPointer (GLint size, GLenum type, GLsizei stride, const GLvoid *pointer) { if (type != GL_FLOAT) abort(); if (stride <= 0) abort(); dxf_vp = pointer; dxf_vp_size = size; dxf_vp_stride = stride; } static void dxf_glDrawArrays (GLenum mode, GLint first, GLsizei count) { int i; unsigned char *a = (unsigned char *) dxf_vp; dxf_glBegin (mode); for (i = first; i < first+count; i++) { GLfloat *fa = (GLfloat *) a; dxf_glVertex3f (fa[0], fa[1], fa[2]); a += dxf_vp_stride; } dxf_glEnd(); } # define XYZ tube_XYZ /* avoid conflict with normals.h */ # include "tube.c" /* Yes, I really am including a C file. */ # undef XYZ # define XYZ sphere_XYZ # define unit_sphere unit_sphere_dxf # define unit_dome unit_dome_dxf # include "sphere.c" # undef XYZ #endif /* DXF_OUTPUT_HACK */ /* Calculate the angle (in radians) between two vectors. */ static GLfloat vector_angle (double ax, double ay, double az, double bx, double by, double bz) { double La = sqrt (ax*ax + ay*ay + az*az); double Lb = sqrt (bx*bx + by*by + bz*bz); double cc, angle; if (La == 0 || Lb == 0) return 0; if (ax == bx && ay == by && az == bz) return 0; /* dot product of two vectors is defined as: La * Lb * cos(angle between vectors) and is also defined as: ax*bx + ay*by + az*bz so: La * Lb * cos(angle) = ax*bx + ay*by + az*bz cos(angle) = (ax*bx + ay*by + az*bz) / (La * Lb) angle = acos ((ax*bx + ay*by + az*bz) / (La * Lb)); */ cc = (ax*bx + ay*by + az*bz) / (La * Lb); if (cc > 1) cc = 1; /* avoid fp rounding error (1.000001 => sqrt error) */ angle = acos (cc); return (angle); } static void normalize (XYZ *p) { GLfloat d = sqrt (p->x*p->x + p->y*p->y + p->z*p->z); if (d != 0) { p->x /= d; p->y /= d; p->z /= d; } else { p->x = p->y = p->z = 0; } } static double dot (const XYZ u, const XYZ v) { return (u.x * v.x) + (u.y * v.y) + (u.z * v.z); } /* Make the helix */ static int make_helix (logo_configuration *dc, int facetted, int wire) { int polys = 0; int wall_facets = dc->wall_facets / (facetted ? 10 : 1); GLfloat th; GLfloat max_th = M_PI * 2 * dc->turns; GLfloat th_inc = M_PI * 2 / wall_facets; GLfloat x1=0, y1=0, x2=0, y2=0; GLfloat x1b=0, y1b=0, x2b=0, y2b=0; GLfloat z1=0, z2=0; GLfloat h1=0, h2=0; GLfloat h1off=0, h2off=0; GLfloat z_inc = dc->turn_spacing / wall_facets; th = 0; x1 = 1; y1 = 0; x1b = 1 - dc->wall_thickness; y1b = 0; z1 = -(dc->turn_spacing * dc->turns / 2); h1 = (dc->wall_taper > 0 ? 0 : dc->wall_height / 2); h1off = (dc->wall_taper > 0 ? -dc->wall_height / 2 : 0); if (!dc->clockwise) z1 = -z1, z_inc = -z_inc, h1off = -h1off; /* Leading end-cap */ if (!wire && h1 > 0) { GLfloat nx, ny; glFrontFace(GL_CCW); glBegin(GL_QUADS); nx = cos (th + M_PI/2); ny = sin (th + M_PI/2); glNormal3f(nx, ny, 0); glVertex3f( x1, y1, z1 - h1 + h1off); glVertex3f( x1, y1, z1 + h1 + h1off); glVertex3f(x1b, y1b, z1 + h1 + h1off); glVertex3f(x1b, y1b, z1 - h1 + h1off); polys++; glEnd(); } while (th + th_inc <= max_th) { th += th_inc; x2 = cos (th); y2 = sin (th); z2 = z1 + z_inc; x2b = x2 * (1 - dc->wall_thickness); y2b = y2 * (1 - dc->wall_thickness); h2 = h1; h2off = h1off; if (dc->wall_taper > 0) { h2off = 0; if (th < dc->wall_taper) { h2 = dc->wall_height/2 * cos (M_PI / 2 * (1 - (th / dc->wall_taper))); if (dc->clockwise) h2off = h2 - dc->wall_height/2; else h2off = dc->wall_height/2 - h2; } else if (th >= max_th - dc->wall_taper) { if (th + th_inc > max_th) /* edge case: always come to a point */ h2 = 0; else h2 = dc->wall_height/2 * cos (M_PI / 2 * (1 - ((max_th - th) / dc->wall_taper))); if (dc->clockwise) h2off = dc->wall_height/2 - h2; else h2off = h2 - dc->wall_height/2; } } /* outer face */ glFrontFace(GL_CW); glBegin(wire ? GL_LINES : GL_QUADS); glNormal3f(x1, y1, 0); glVertex3f(x1, y1, z1 - h1 + h1off); glVertex3f(x1, y1, z1 + h1 + h1off); glNormal3f(x2, y2, 0); glVertex3f(x2, y2, z2 + h2 + h2off); glVertex3f(x2, y2, z2 - h2 + h2off); polys++; glEnd(); /* inner face */ glFrontFace(GL_CCW); glBegin(wire ? GL_LINES : GL_QUADS); glNormal3f(-x1b, -y1b, 0); glVertex3f( x1b, y1b, z1 - h1 + h1off); glVertex3f( x1b, y1b, z1 + h1 + h1off); glNormal3f(-x2b, -y2b, 0); glVertex3f( x2b, y2b, z2 + h2 + h2off); glVertex3f( x2b, y2b, z2 - h2 + h2off); polys++; glEnd(); /* top face */ glFrontFace(GL_CCW); /* glNormal3f(0, 0, 1);*/ do_normal (x2, y2, z2 + h2 + h2off, x2b, y2b, z2 + h2 + h2off, x1b, y1b, z1 + h1 + h1off); glBegin(wire ? GL_LINE_LOOP : GL_QUADS); glVertex3f( x2, y2, z2 + h2 + h2off); glVertex3f( x2b, y2b, z2 + h2 + h2off); glVertex3f( x1b, y1b, z1 + h1 + h1off); glVertex3f( x1, y1, z1 + h1 + h1off); polys++; glEnd(); /* bottom face */ glFrontFace(GL_CCW); do_normal ( x1, y1, z1 - h1 + h1off, x1b, y1b, z1 - h1 + h1off, x2b, y2b, z2 - h2 + h2off); glBegin(wire ? GL_LINE_LOOP : GL_QUADS); glNormal3f(0, 0, -1); glVertex3f( x1, y1, z1 - h1 + h1off); glVertex3f( x1b, y1b, z1 - h1 + h1off); glVertex3f( x2b, y2b, z2 - h2 + h2off); glVertex3f( x2, y2, z2 - h2 + h2off); polys++; glEnd(); x1 = x2; y1 = y2; x1b = x2b; y1b = y2b; z1 += z_inc; h1 = h2; h1off = h2off; } /* Trailing end-cap */ if (!wire && h2 > 0) { GLfloat nx, ny; glFrontFace(GL_CW); glBegin(GL_QUADS); nx = cos (th + M_PI/2); ny = sin (th + M_PI/2); glNormal3f(nx, ny, 0); glVertex3f(x2, y2, z1 - h2 + h2off); glVertex3f(x2, y2, z1 + h2 + h2off); glVertex3f(x2b, y2b, z1 + h2 + h2off); glVertex3f(x2b, y2b, z1 - h2 + h2off); polys++; glEnd(); } return polys; } static int make_ladder (logo_configuration *dc, int facetted, int wire) { int polys = 0; GLfloat th; GLfloat max_th = dc->turns * M_PI * 2; GLfloat max_z = dc->turns * dc->turn_spacing; GLfloat z_inc = dc->bar_spacing; GLfloat th_inc = M_PI * 2 * (dc->bar_spacing / dc->turn_spacing); GLfloat x, y, z; /* skip forward to center the bars in the helix... */ int i; GLfloat usable_th = max_th - dc->wall_taper; GLfloat usable_z = max_z / (max_th / usable_th); int nbars = usable_z / dc->bar_spacing; GLfloat used_z, pad_z, pad_ratio; if (! (nbars & 1)) nbars--; /* always an odd number of bars */ used_z = (nbars - 1) * dc->bar_spacing; pad_z = max_z - used_z; pad_ratio = pad_z / max_z; th = (max_th * pad_ratio/2); z = -(max_z / 2) + (max_z * pad_ratio/2); if (!dc->clockwise) z = -z, z_inc = -z_inc; glFrontFace(GL_CCW); for (i = 0; i < nbars; i++) { int facets = dc->bar_facets / (facetted ? 14 : 1); if (facets <= 3) facets = 3; x = cos (th) * (1 - dc->wall_thickness); y = sin (th) * (1 - dc->wall_thickness); polys += tube ( x, y, z, -x, -y, z, dc->bar_thickness, 0, facets, True, True, wire); z += z_inc; th += th_inc; } return polys; } /* Make the gasket */ static int make_gasket (logo_configuration *dc, int wire) { int polys = 0; int i; int points_size; int npoints = 0; int nctrls = 0; int res = 360/8; GLfloat d2r = M_PI / 180; GLfloat thick2 = (dc->gasket_thickness / dc->gasket_size) / 2; GLfloat *pointsx0, *pointsy0, *pointsx1, *pointsy1, *normals; GLfloat r0 = 0.750; /* 395 */ GLfloat r1a = 0.825; /* bottom of wall below upper left hole */ GLfloat r1b = 0.867; /* center of upper left hole */ GLfloat r1c = 0.909; /* top of wall above hole */ GLfloat r1 = 0.916; /* 471 */ GLfloat r2 = 0.963; /* 490 */ GLfloat r3 = 0.960; /* 499 */ GLfloat r4 = 1.000; /* 507 */ GLfloat r5 = 1.080; /* 553 */ GLfloat ctrl_r[100], ctrl_th[100]; glPushMatrix(); # ifdef DXF_OUTPUT_HACK if (! wire) res *= 8; # endif # define POINT(r,th) \ ctrl_r [nctrls] = r, \ ctrl_th[nctrls] = (th * d2r), \ nctrls++ POINT (0.829, 0); /* top indentation, right half */ POINT (0.831, 0.85); POINT (0.835, 1.81); POINT (0.841, 2.65); POINT (0.851, 3.30); POINT (0.862, 3.81); POINT (0.872, 3.95); POINT (r4, 4.0); /* moving clockwise... */ POINT (r4, 47.0); POINT (r1, 47.0); POINT (r1, 53.0); POINT (r2, 55.5); POINT (r2, 72.3); POINT (r1, 74.0); POINT (r1, 100.0); POINT (r3, 102.5); POINT (r3, 132.0); POINT (r1, 133.0); POINT (r1, 180.7); POINT (r2, 183.6); POINT (r2, 210.0); POINT (r1, 212.0); POINT (r1, 223.2); POINT (r5, 223.2); POINT (r5, 225.0); POINT (r4, 225.0); POINT (r4, 316.8); /* upper left indentation */ POINT (0.990, 316.87); POINT (0.880, 317.21); POINT (0.872, 317.45); POINT (0.869, 317.80); POINT (0.867, 318.10); POINT (0.867, 318.85); POINT (0.869, 319.15); POINT (0.872, 319.50); POINT (0.880, 319.74); POINT (0.990, 320.08); POINT (r4, 338.0); if (! wire) { POINT (r1a, 338.0); /* cut-out disc */ POINT (r1a, 344.0); } POINT (r4, 344.0); POINT (r4, 356.0); POINT (0.872, 356.05); /* top indentation, left half */ POINT (0.862, 356.19); POINT (0.851, 356.70); POINT (0.841, 357.35); POINT (0.835, 358.19); POINT (0.831, 359.15); POINT (0.829, 360); # undef POINT points_size = res + (nctrls * 2); pointsx0 = (GLfloat *) malloc (points_size * sizeof(GLfloat)); pointsy0 = (GLfloat *) malloc (points_size * sizeof(GLfloat)); pointsx1 = (GLfloat *) malloc (points_size * sizeof(GLfloat)); pointsy1 = (GLfloat *) malloc (points_size * sizeof(GLfloat)); normals = (GLfloat *) malloc (points_size * sizeof(GLfloat) * 2); npoints = 0; for (i = 1; i < nctrls; i++) { GLfloat from_r = ctrl_r [i-1]; GLfloat from_th = ctrl_th[i-1]; GLfloat to_r = ctrl_r [i]; GLfloat to_th = ctrl_th[i]; GLfloat step = 2*M_PI / res; int nsteps = 1 + ((to_th - from_th) / step); int j; for (j = 0; j < nsteps + (i == nctrls-1); j++) { GLfloat r = from_r + (j * (to_r - from_r) / nsteps); GLfloat th = from_th + (j * (to_th - from_th) / nsteps); GLfloat cth = cos(th) * dc->gasket_size; GLfloat sth = sin(th) * dc->gasket_size; pointsx0[npoints] = r0 * cth; /* inner ring */ pointsy0[npoints] = r0 * sth; pointsx1[npoints] = r * cth; /* outer ring */ pointsy1[npoints] = r * sth; npoints++; if (npoints >= points_size) abort(); } } /* normals for the outer ring */ for (i = 1; i < npoints; i++) { XYZ a, b, c, n; a.x = pointsx1[i-1]; a.y = pointsy1[i-1]; a.z = 0; b.x = pointsx1[i]; b.y = pointsy1[i]; b.z = 0; c = b; c.z = 1; n = calc_normal (a, b, c); normals[(i-1)*2 ] = n.x; normals[(i-1)*2+1] = n.y; } glRotatef(-90, 0, 1, 0); glRotatef(180, 0, 0, 1); if (wire) { GLfloat z; for (z = -thick2; z <= thick2; z += thick2*2) { # if 1 /* inside edge */ glBegin (GL_LINE_LOOP); for (i = 0; i < npoints; i++) glVertex3f (pointsx0[i], pointsy0[i], z); polys += npoints; glEnd(); /* outside edge */ glBegin (GL_LINE_LOOP); for (i = 0; i < npoints; i++) glVertex3f (pointsx1[i], pointsy1[i], z); polys += npoints; glEnd(); # else for (i = 1; i < npoints; i++) { glBegin (GL_LINE_STRIP); glVertex3f (pointsx0[i-1], pointsy0[i-1], z); glVertex3f (pointsx0[i ], pointsy0[i ], z); glVertex3f (pointsx1[i ], pointsy1[i ], z); glVertex3f (pointsx1[i-1], pointsy1[i-1], z); glEnd(); } polys += npoints; # endif } #if 1 glBegin (GL_LINES); for (i = 0; i < npoints; i++) { /* inside rim */ glVertex3f (pointsx0[i], pointsy0[i], -thick2); glVertex3f (pointsx0[i], pointsy0[i], thick2); /* outside rim */ glVertex3f (pointsx1[i], pointsy1[i], -thick2); glVertex3f (pointsx1[i], pointsy1[i], thick2); } polys += npoints; glEnd(); #endif } else { /* top */ glFrontFace(GL_CW); glNormal3f(0, 0, -1); glBegin (GL_QUAD_STRIP); for (i = 0; i < npoints; i++) { glVertex3f (pointsx0[i], pointsy0[i], -thick2); glVertex3f (pointsx1[i], pointsy1[i], -thick2); } polys += npoints; glEnd(); /* bottom */ glFrontFace(GL_CCW); glNormal3f(0, 0, 1); glBegin (GL_QUAD_STRIP); for (i = 0; i < npoints; i++) { glVertex3f (pointsx0[i], pointsy0[i], thick2); glVertex3f (pointsx1[i], pointsy1[i], thick2); } polys += npoints; glEnd(); /* inside edge */ glFrontFace(GL_CW); glBegin (GL_QUAD_STRIP); for (i = 0; i < npoints; i++) { glNormal3f (-pointsx0[i], -pointsy0[i], 0); glVertex3f ( pointsx0[i], pointsy0[i], thick2); glVertex3f ( pointsx0[i], pointsy0[i], -thick2); } polys += npoints; glEnd(); /* outside edge */ glFrontFace(GL_CCW); glBegin (GL_QUADS); { for (i = 0; i < npoints-1; i++) { int ia = (i == 0 ? npoints-2 : i-1); int iz = (i == npoints-2 ? 0 : i+1); GLfloat x = pointsx1[i]; GLfloat y = pointsy1[i]; GLfloat xz = pointsx1[iz]; GLfloat yz = pointsy1[iz]; GLfloat nxa = normals[ia*2]; /* normal of [i-1 - i] face */ GLfloat nya = normals[ia*2+1]; GLfloat nx = normals[i*2]; /* normal of [i - i+1] face */ GLfloat ny = normals[i*2+1]; GLfloat nxz = normals[iz*2]; /* normal of [i+1 - i+2] face */ GLfloat nyz = normals[iz*2+1]; GLfloat anglea = vector_angle (nx, ny, 0, nxa, nya, 0); GLfloat anglez = vector_angle (nx, ny, 0, nxz, nyz, 0); GLfloat pointy = 0.6; if (anglea > pointy) { glNormal3f (nx, ny, 0); glVertex3f (x, y, thick2); glVertex3f (x, y, -thick2); } else { glNormal3f ((nxa + nx) / 2, (nya + ny) / 2, 0); glVertex3f (x, y, thick2); glVertex3f (x, y, -thick2); } if (anglez > pointy) { glNormal3f (nx, ny, 0); glVertex3f (xz, yz, -thick2); glVertex3f (xz, yz, thick2); } else { glNormal3f ((nx + nxz) / 2, (ny + nyz) / 2, 0); glVertex3f (xz, yz, -thick2); glVertex3f (xz, yz, thick2); } } polys += npoints; } glEnd(); } /* Fill in the upper left hole... */ { GLfloat th; npoints = 0; th = 338.0 * d2r; pointsx0[npoints] = r1c * cos(th) * dc->gasket_size; pointsy0[npoints] = r1c * sin(th) * dc->gasket_size; npoints++; pointsx0[npoints] = r4 * cos(th) * dc->gasket_size; pointsy0[npoints] = r4 * sin(th) * dc->gasket_size; npoints++; th = 344.0 * d2r; pointsx0[npoints] = r1c * cos(th) * dc->gasket_size; pointsy0[npoints] = r1c * sin(th) * dc->gasket_size; npoints++; pointsx0[npoints] = r4 * cos(th) * dc->gasket_size; pointsy0[npoints] = r4 * sin(th) * dc->gasket_size; if (! wire) { /* front wall */ glNormal3f (0, 0, -1); glFrontFace(GL_CW); glBegin (wire ? GL_LINE_LOOP : GL_QUADS); glVertex3f (pointsx0[0], pointsy0[0], -thick2); glVertex3f (pointsx0[1], pointsy0[1], -thick2); glVertex3f (pointsx0[3], pointsy0[3], -thick2); glVertex3f (pointsx0[2], pointsy0[2], -thick2); glEnd(); polys++; /* back wall */ glNormal3f (0, 0, 1); glFrontFace(GL_CCW); glBegin (wire ? GL_LINE_LOOP : GL_QUADS); glVertex3f (pointsx0[0], pointsy0[0], thick2); glVertex3f (pointsx0[1], pointsy0[1], thick2); glVertex3f (pointsx0[3], pointsy0[3], thick2); glVertex3f (pointsx0[2], pointsy0[2], thick2); glEnd(); polys++; } /* top wall */ glFrontFace(GL_CW); glBegin (wire ? GL_LINE_LOOP : GL_QUADS); glNormal3f (pointsx0[1], pointsy0[1], 0); glVertex3f (pointsx0[1], pointsy0[1], thick2); glNormal3f (pointsx0[3], pointsy0[3], 0); glVertex3f (pointsx0[3], pointsy0[3], thick2); glVertex3f (pointsx0[3], pointsy0[3], -thick2); glNormal3f (pointsx0[1], pointsy0[1], 0); glVertex3f (pointsx0[1], pointsy0[1], -thick2); glEnd(); polys++; /* Now make a donut. */ { int nsteps = (wire ? 12 : 64); GLfloat r0 = 0.04; GLfloat r1 = 0.070; GLfloat th, cth, sth; glPushMatrix (); th = ((339.0 + 343.0) / 2) * d2r; glTranslatef (r1b * cos(th) * dc->gasket_size, r1b * sin(th) * dc->gasket_size, 0); npoints = 0; for (i = 0; i < nsteps; i++) { th = 2 * M_PI * i / nsteps; cth = cos (th) * dc->gasket_size; sth = sin (th) * dc->gasket_size; pointsx0[npoints] = r0 * cth; pointsy0[npoints] = r0 * sth; pointsx1[npoints] = r1 * cth; pointsy1[npoints] = r1 * sth; npoints++; polys++; } pointsx0[npoints] = pointsx0[0]; pointsy0[npoints] = pointsy0[0]; pointsx1[npoints] = pointsx1[0]; pointsy1[npoints] = pointsy1[0]; npoints++; if (wire) { glBegin (GL_LINE_LOOP); for (i = 0; i < npoints; i++) glVertex3f (pointsx0[i], pointsy0[i], -thick2); polys += npoints; glEnd(); glBegin (GL_LINE_LOOP); for (i = 0; i < npoints; i++) glVertex3f (pointsx0[i], pointsy0[i], thick2); polys += npoints; glEnd(); # if 0 glBegin (GL_LINE_LOOP); for (i = 0; i < npoints; i++) glVertex3f (pointsx1[i], pointsy1[i], -thick2); polys += npoints; glEnd(); glBegin (GL_LINE_LOOP); for (i = 0; i < npoints; i++) glVertex3f (pointsx1[i], pointsy1[i], thick2); polys += npoints; glEnd(); # endif } else { /* top */ glFrontFace(GL_CW); glNormal3f(0, 0, -1); glBegin (GL_QUAD_STRIP); for (i = 0; i < npoints; i++) { glVertex3f (pointsx0[i], pointsy0[i], -thick2); glVertex3f (pointsx1[i], pointsy1[i], -thick2); } polys += npoints; glEnd(); /* bottom */ glFrontFace(GL_CCW); glNormal3f(0, 0, 1); glBegin (GL_QUAD_STRIP); for (i = 0; i < npoints; i++) { glVertex3f (pointsx0[i], pointsy0[i], thick2); glVertex3f (pointsx1[i], pointsy1[i], thick2); } polys += npoints; glEnd(); } /* inside edge */ glFrontFace(GL_CW); glBegin (wire ? GL_LINES : GL_QUAD_STRIP); for (i = 0; i < npoints; i++) { glNormal3f (-pointsx0[i], -pointsy0[i], 0); glVertex3f ( pointsx0[i], pointsy0[i], thick2); glVertex3f ( pointsx0[i], pointsy0[i], -thick2); } polys += npoints; glEnd(); glPopMatrix(); } } /* Attach the bottom-right dingus... */ { GLfloat w = 0.05; GLfloat h = 0.19; GLfloat th; glRotatef (49.5, 0, 0, 1); glScalef (dc->gasket_size, dc->gasket_size, 1); glTranslatef (0, (r0+r1)/2, 0); /* buried box */ if (! wire) { glFrontFace(GL_CCW); glBegin (wire ? GL_LINE_STRIP : GL_QUADS); glNormal3f (0, 0, -1); glVertex3f (-w/2, -h/2, -thick2); glVertex3f (-w/2, h/2, -thick2); glVertex3f ( w/2, h/2, -thick2); glVertex3f ( w/2, -h/2, -thick2); glNormal3f (1, 0, 0); glVertex3f ( w/2, -h/2, -thick2); glVertex3f ( w/2, h/2, -thick2); glVertex3f ( w/2, h/2, thick2); glVertex3f ( w/2, -h/2, thick2); glNormal3f (0, 0, 1); glVertex3f ( w/2, -h/2, thick2); glVertex3f ( w/2, h/2, thick2); glVertex3f (-w/2, h/2, thick2); glVertex3f (-w/2, -h/2, thick2); glNormal3f (-1, 0, 0); glVertex3f (-w/2, -h/2, thick2); glVertex3f (-w/2, h/2, thick2); glVertex3f (-w/2, h/2, -thick2); glVertex3f (-w/2, -h/2, -thick2); polys++; glEnd(); } npoints = 0; for (th = (wire ? 0 : -0.1); th <= M_PI + 0.1; th += (M_PI / (wire ? 5 : 32))) { pointsx0[npoints] = w/2 * cos(th); pointsy0[npoints] = w/2 * sin(th); npoints++; polys++; } /* front inside curve */ glNormal3f (0, 0, -1); glFrontFace(GL_CW); glBegin (wire ? GL_LINE_STRIP : GL_TRIANGLE_FAN); if (! wire) glVertex3f (0, h/2, -thick2); for (i = 0; i < npoints; i++) glVertex3f (pointsx0[i], h/2 + pointsy0[i], -thick2); polys += npoints; glEnd(); /* front outside curve */ glFrontFace(GL_CCW); glBegin (wire ? GL_LINE_STRIP : GL_TRIANGLE_FAN); if (! wire) glVertex3f (0, -h/2, -thick2); for (i = 0; i < npoints; i++) glVertex3f (pointsx0[i], -h/2 - pointsy0[i], -thick2); polys += npoints; glEnd(); /* back inside curve */ glNormal3f (0, 0, 1); glFrontFace(GL_CCW); glBegin (wire ? GL_LINE_STRIP : GL_TRIANGLE_FAN); if (! wire) glVertex3f (0, h/2, thick2); for (i = 0; i < npoints; i++) glVertex3f (pointsx0[i], h/2 + pointsy0[i], thick2); polys += npoints; glEnd(); /* back outside curve */ glFrontFace(GL_CW); glBegin (wire ? GL_LINE_STRIP : GL_TRIANGLE_FAN); if (! wire) glVertex3f (0, -h/2, thick2); for (i = 0; i < npoints; i++) glVertex3f (pointsx0[i], -h/2 - pointsy0[i], thick2); polys += npoints; glEnd(); /* inside curve */ glFrontFace(GL_CCW); glBegin (wire ? GL_LINES : GL_QUAD_STRIP); for (i = 0; i < npoints; i++) { glNormal3f (pointsx0[i], pointsy0[i], 0); glVertex3f (pointsx0[i], h/2 + pointsy0[i], thick2); glVertex3f (pointsx0[i], h/2 + pointsy0[i], -thick2); } polys += npoints; glEnd(); /* outside curve */ glFrontFace(GL_CW); glBegin (wire ? GL_LINES : GL_QUAD_STRIP); for (i = 0; i < npoints; i++) { glNormal3f (pointsx0[i], -pointsy0[i], 0); glVertex3f (pointsx0[i], -h/2 - pointsy0[i], thick2); glVertex3f (pointsx0[i], -h/2 - pointsy0[i], -thick2); } polys += npoints; glEnd(); } free (pointsx0); free (pointsy0); free (pointsx1); free (pointsy1); free (normals); glPopMatrix(); return polys; } static int make_frame (logo_configuration *dc, int wire) { int polys = 0; int i, j; GLfloat x[20], y[20]; GLfloat corner_cut = 0.5; glPushMatrix(); glRotatef (90, 0, 1, 0); glScalef (4 * dc->frame_size, 4 * dc->frame_size, 4 * dc->frame_size); x[0] = -dc->frame_thickness; x[1] = -dc->frame_thickness * corner_cut; x[2] = 0; x[3] = 0.5 - dc->triangle_size; x[4] = 0.5; x[5] = 0.5 + dc->triangle_size; x[6] = 1; x[7] = 1 + dc->frame_thickness * corner_cut; x[8] = 1 + dc->frame_thickness; y[0] = -dc->frame_thickness; y[1] = -dc->frame_thickness * corner_cut; y[2] = 0; y[3] = dc->triangle_size; /* front and back */ glTranslatef (-0.5, -0.5, dc->frame_depth / 4); if (! wire) for (j = 0; j <= 1; j++) { if (j) glTranslatef (0, 0, -dc->frame_depth / 2); glFrontFace (j ? GL_CCW : GL_CW); for (i = 0; i < 4; i++) { glNormal3f (0, 0, (j ? -1 : 1)); glBegin (wire ? GL_LINES : GL_QUAD_STRIP); glVertex3f (x[0], y[1], 0); glVertex3f (x[0], y[2], 0); glVertex3f (x[1], y[0], 0); glVertex3f (x[1], y[2], 0); glVertex3f (x[3], y[0], 0); glVertex3f (x[3], y[2], 0); glVertex3f (x[4], y[0], 0); glVertex3f (x[4], y[3], 0); glVertex3f (x[5], y[0], 0); glVertex3f (x[5], y[2], 0); glVertex3f (x[7], y[0], 0); glVertex3f (x[7], y[2], 0); glVertex3f (x[8], y[1], 0); glVertex3f (x[8], y[2], 0); polys += 6; glEnd (); glTranslatef (0.5, 0.5, 0); glRotatef (90, 0, 0, 1); glTranslatef (-0.5, -0.5, 0); } } /* ledges */ glFrontFace (GL_CCW); for (i = 0; i < 4; i++) { glNormal3f (0, 1, 0); glBegin (wire ? GL_LINES : GL_QUAD_STRIP); glVertex3f (x[2], y[2], 0); glVertex3f (x[2], y[2], dc->frame_depth/2); glVertex3f (x[3], y[2], 0); glVertex3f (x[3], y[2], dc->frame_depth/2); glVertex3f (x[4], y[3], 0); glVertex3f (x[4], y[3], dc->frame_depth/2); glVertex3f (x[5], y[2], 0); glVertex3f (x[5], y[2], dc->frame_depth/2); glVertex3f (x[6], y[2], 0); glVertex3f (x[6], y[2], dc->frame_depth/2); polys += 4; glEnd (); glNormal3f (0, -1, 0); glBegin (wire ? GL_LINE_LOOP : GL_QUADS); glVertex3f (x[7], y[0], 0); glVertex3f (x[7], y[0], dc->frame_depth/2); glVertex3f (x[1], y[0], dc->frame_depth/2); glVertex3f (x[1], y[0], 0); polys++; glEnd (); glNormal3f (1, -1, 0); glBegin (wire ? GL_LINE_LOOP : GL_QUADS); glVertex3f (x[8], y[1], 0); glVertex3f (x[8], y[1], dc->frame_depth/2); glVertex3f (x[7], y[0], dc->frame_depth/2); glVertex3f (x[7], y[0], 0); polys++; glEnd (); if (wire) { glNormal3f (0, 1, 0); for (j = 0; j <= 1; j++) { glBegin (GL_LINE_STRIP); glVertex3f (x[2], y[2], j*dc->frame_depth/2); glVertex3f (x[3], y[2], j*dc->frame_depth/2); glVertex3f (x[4], y[3], j*dc->frame_depth/2); glVertex3f (x[5], y[2], j*dc->frame_depth/2); glVertex3f (x[6], y[2], j*dc->frame_depth/2); polys += 4; glEnd (); } } glTranslatef (0.5, 0.5, 0); glRotatef (90, 0, 0, 1); glTranslatef (-0.5, -0.5, 0); } glPopMatrix(); return polys; } /* Make some pizza. */ #ifdef HAVE_TESS typedef struct { GLdouble *points; int i; } tess_out; static void tess_error_cb (GLenum errorCode) { fprintf (stderr, "%s: tesselation error: %s\n", progname, gluErrorString(errorCode)); exit (0); } static void tess_combine_cb (GLdouble coords[3], GLdouble *d[4], GLfloat w[4], GLdouble **data_out) { GLdouble *new = (GLdouble *) malloc (3 * sizeof(*new)); new[0] = coords[0]; new[1] = coords[1]; new[2] = coords[2]; *data_out = new; } #if 0 static void tess_vertex_cb (void *vertex_data, void *closure) { tess_out *to = (tess_out *) closure; GLdouble *v = (GLdouble *) vertex_data; to->points[to->i++] = v[0]; to->points[to->i++] = v[1]; to->points[to->i++] = v[2]; } #endif static void tess_begin_cb (GLenum which) { glBegin(which); } static void 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; GLdouble *points = (GLdouble *) calloc (npoints * 3, sizeof(GLdouble)); int nholes = 3; GLdouble *holes = (GLdouble *) calloc (topfaces*nholes*3, sizeof(GLdouble)); GLfloat step = M_PI * 2 / 6 / topfaces; GLfloat thick2 = (dc->gasket_thickness / dc->gasket_size) / 4; GLfloat th, x, y, s; int i, j, k; int endpoints; # 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 gluTessCallback(tess,GLU_TESS_BEGIN, (_GLUfuncptr)tess_begin_cb); gluTessCallback(tess,GLU_TESS_VERTEX, (_GLUfuncptr)glVertex3dv); gluTessCallback(tess,GLU_TESS_END, (_GLUfuncptr)tess_end_cb); gluTessCallback(tess,GLU_TESS_COMBINE, (_GLUfuncptr)tess_combine_cb); gluTessCallback(tess,GLU_TESS_ERROR, (_GLUfuncptr)tess_error_cb); gluTessProperty (tess, GLU_TESS_BOUNDARY_ONLY, wire); gluTessProperty (tess,GLU_TESS_WINDING_RULE, GLU_TESS_WINDING_ODD); # endif /* HAVE_TESS */ glPushMatrix(); s = 1.9; glRotatef (180, 0, 0, 1); glScalef (s, s, s); glRotatef (90, 0, 1, 0); glTranslatef (-0.53, 0, 0); glRotatef (-30, 0, 0, 1); /* Compute the wedge */ th = 0; j = 0; /* Edge 1 */ { GLfloat edge[] = { 0.000, 0.000, 0.000, 0.210, 0.042, 0.230, 0.042, 0.616, 0.000, 0.641, }; for (i = 0; i < countof(edge)/2; i++) { points[j++] = edge[i*2+1]; points[j++] = edge[i*2]; points[j++] = 0; } } s = 0.798; /* radius of end of slice, before crust gap */ for (i = 0; i < topfaces; i++) { points[j++] = cos(th) * s; points[j++] = sin(th) * s; points[j++] = 0; th += step; } /* Edge 2 */ { GLfloat edge[] = { 0.613, 0.353, 0.572, 0.376, 0.455, 0.309, 0.452, 0.260, 0.332, 0.192, 0.293, 0.216, 0.178, 0.149, 0.178, 0.102, }; for (i = 0; i < countof(edge)/2; i++) { points[j++] = edge[i*2+1]; points[j++] = edge[i*2]; points[j++] = 0; } endpoints = j/3; } /* Draw the rim of the slice */ glBegin (wire ? GL_LINES : GL_QUADS); x = points[0]; y = points[1]; for (i = (wire ? 0 : 1); i < endpoints; i++) { GLdouble *p = points + (i*3); do_normal (p[0], p[1], -thick2, p[0], p[1], thick2, x, y, thick2); if (!wire) { glVertex3f (x, y, -thick2); glVertex3f (x, y, thick2); } glVertex3f (p[0], p[1], thick2); glVertex3f (p[0], p[1], -thick2); x = p[0]; y = p[1]; polys++; } do_normal (points[0], points[1], -thick2, points[0], points[1], thick2, x, y, thick2); glVertex3f (x, y, -thick2); glVertex3f (x, y, thick2); glVertex3f (points[0], points[1], thick2); glVertex3f (points[0], points[1], -thick2); 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++) { GLdouble *p = holes + (discfaces * 3 * k); th = 0; j = 0; switch (k) { case 0: x = 0.34; y = 0.17; s = 0.05; break; case 1: x = 0.54; y = 0.17; s = 0.06; break; case 2: x = 0.55; y = 0.36; s = 0.06; break; default: abort(); break; } for (i = 0; i < discfaces; i++) { p[j++] = x + cos(M_PI*2 - th) * s; p[j++] = y + sin(M_PI*2 - th) * s; p[j++] = 0; th += step; } } /* Draw the inside rim of the holes */ 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++) { GLdouble *p2 = p + (i*3); if (i > 0) do_normal (p2[0], p2[1], -thick2, p2[0], p2[1], thick2, p2[-3], p2[-2], thick2); glVertex3f (p2[0], p2[1], -thick2); glVertex3f (p2[0], p2[1], thick2); polys++; } glVertex3f (p[0], p[1], -thick2); 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++) { if (y) glTranslatef (0, 0, thick2*2); /* A non-convex polygon */ gluTessBeginPolygon (tess, to); glNormal3f (0, 0, (y > 0 ? 1 : -1)); gluTessNormal (tess, 0, 0, (y > 0 ? 1 : -1)); glFrontFace (GL_CCW); /* Tess the wedge */ gluTessBeginContour (tess); for (i = 0; i < endpoints; i++) { GLdouble *p = points + (i*3); gluTessVertex (tess, p, p); polys++; } gluTessVertex (tess, points, points); gluTessEndContour (tess); /* Tess the holes */ for (k = 0; k < nholes; k++) { GLdouble *p = holes + (discfaces * 3 * k); gluTessBeginContour (tess); for (i = 0; i < discfaces; i++) { GLdouble *p2 = p + (i*3); gluTessVertex (tess, p2, p2); polys++; } gluTessEndContour (tess); } gluTessEndPolygon (tess); } glTranslatef (0, 0, -thick2); # else /* !HAVE_TESS */ if (! wire) { glTranslatef(0, 0, thick2); glNormal3f (0, 0, 1); glFrontFace (GL_CW); /* Sadly, jwzgl's glVertexPointer seems not to be recordable inside display lists. */ # if 0 glDisableClientState (GL_COLOR_ARRAY); glDisableClientState (GL_NORMAL_ARRAY); glDisableClientState (GL_TEXTURE_COORD_ARRAY); glEnableClientState (GL_VERTEX_ARRAY); glVertexPointer (3, GL_FLOAT, 0, dnapizza_triangles); glDrawArrays (GL_TRIANGLES, 0, countof (dnapizza_triangles) / 3); # else glBegin (GL_TRIANGLES); for (i = 0; i < countof (dnapizza_triangles); i += 3) glVertex3fv (dnapizza_triangles + i); glEnd(); # endif glTranslatef(0, 0, -thick2*2); glNormal3f (0, 0, -1); glFrontFace (GL_CCW); # if 0 glDrawArrays (GL_TRIANGLES, 0, countof (dnapizza_triangles) / 3); # else int i; glBegin (GL_TRIANGLES); for (i = 0; i < countof (dnapizza_triangles); i += 3) glVertex3fv (dnapizza_triangles + i); glEnd(); # endif glTranslatef(0, 0, thick2); } # endif /* !HAVE_TESS */ /* Compute the crust */ s = 0.861; /* radius of inside of crust */ step = M_PI * 2 / 6 / topfaces; th = 0; j = 0; for (i = 0; i < topfaces; i++) { points[j++] = cos(th) * s; points[j++] = sin(th) * s; points[j++] = 0; th += step; } s = 1; for (i = 0; i < topfaces; i++) { points[j++] = cos(th) * s; points[j++] = sin(th) * s; points[j++] = 0; th -= step; } /* Draw the rim of the crust */ glFrontFace (GL_CCW); glBegin (wire ? GL_LINES : GL_QUAD_STRIP); for (i = 0; i < topfaces * 2; i++) { GLdouble *p = points + (i*3); if (i == 0 || i == (topfaces*2)-1) glNormal3f (0, -1, 0); else if (i == topfaces-1 || i == topfaces) glNormal3f (0, 1, 0); else do_normal (p[-3], p[-2], thick2, p[0], p[1], thick2, p[0], p[1], -thick2); glVertex3f (p[0], p[1], -thick2); glVertex3f (p[0], p[1], thick2); polys++; } glVertex3f (points[0], points[1], -thick2); glVertex3f (points[0], points[1], thick2); polys++; glEnd(); if (wire) { glBegin (GL_LINE_STRIP); for (i = 0; i < topfaces * 2; i++) { GLdouble *p = points + (i*3); glVertex3f (p[0], p[1], -thick2); polys++; } glVertex3f (points[0], points[1], -thick2); glEnd(); glBegin (GL_LINE_STRIP); for (i = 0; i < topfaces * 2; i++) { GLdouble *p = points + (i*3); glVertex3f (p[0], p[1], thick2); polys++; } glVertex3f (points[0], points[1], thick2); glEnd(); } /* Draw the top of the crust */ if (! wire) { glFrontFace (GL_CW); glBegin (wire ? GL_LINE_STRIP : GL_QUAD_STRIP); glNormal3f (0, 0, -1); if (!wire) for (i = 0; i < topfaces; i++) { int ii = topfaces + (topfaces - i - 1); GLdouble *p1 = points + (i*3); GLdouble *p2 = points + (ii*3); glVertex3f (p1[0], p1[1], -thick2); glVertex3f (p2[0], p2[1], -thick2); polys++; } polys++; glEnd(); /* Draw the bottom of the crust */ glFrontFace (GL_CCW); glBegin (wire ? GL_LINES : GL_QUAD_STRIP); glNormal3f (0, 0, 1); for (i = 0; i < topfaces; i++) { int ii = topfaces + (topfaces - i - 1); GLdouble *p1 = points + (i*3); GLdouble *p2 = points + (ii*3); glVertex3f (p1[0], p1[1], thick2); glVertex3f (p2[0], p2[1], thick2); polys++; } polys++; glEnd(); } # ifdef HAVE_TESS gluDeleteTess (tess); free (to->points); # endif /* HAVE_TESS */ free (points); free (holes); glPopMatrix(); return polys; } /* Upcase string, convert Unicrud to ASCII, remove any non-letters. */ static char * codeword_simplify_text (const char *s0) { char *s1 = utf8_to_latin1 ((s0 ? s0 : ""), True); int L = strlen(s1); char *s2 = (char *) malloc (L + 10); char *s3 = s2; int i; for (i = 0; i < L; i++) { char c = s1[i]; if (c >= 'a' && c <= 'z') c -= 'a'-'A'; if (c >= 'A' && c <= 'Z') *s3++ = c; } *s3 = 0; if (! *s2) strcpy (s2, "CODEWORD"); return s2; } static void make_codeword_path (ModeInfo *mi) { logo_configuration *dc = &dcs[MI_SCREEN(mi)]; int letters = strlen (dc->codeword_text); GLfloat rtick = dc->codeword_spread; GLfloat iradius = rtick * dc->codeword_cap_size; int dial = 0; int letter; GLfloat last_r = 0; GLfloat inner_circum = M_PI * 2 * (iradius + rtick * 2); GLfloat outer_circum = M_PI * 2 * (iradius + rtick * (letters + 1)); GLfloat facet_length = inner_circum / (26 * dc->codeword_facets); int outer_facets = ceil (outer_circum / facet_length); int *histo = (int *) calloc (letters * 26, sizeof(*histo)); XYZ *points = (XYZ *) calloc (letters * outer_facets, sizeof (*points)); int npoints = 0; for (letter = -1; letter < letters; letter++) { if (letter == -1) /* Inner starting point */ { points[npoints].x = iradius; points[npoints].y = 0; last_r = iradius; npoints++; } else /* Add arc for this letter */ { int direction = (letter & 1 ? -1 : 1); int v = (dc->codeword_text[letter] - 'A' + 1); int dial1 = dial + v * direction; GLfloat th; GLfloat th0 = M_PI * 2 / 26 * dial; GLfloat th1 = M_PI * 2 / 26 * dial1; GLfloat r = iradius + rtick * (letter + 2); GLfloat circum = M_PI * 2 * r; GLfloat arc_length = circum * v / 26; int arc_facets = ceil (fabs (arc_length / facet_length)); GLfloat facet_th = (th1 - th0) / arc_facets; if (arc_facets > outer_facets) abort(); /* Let's put some intermediate facets on the crossbars too, so that the animation doesn't speed up on those. */ { GLfloat rr; for (rr = last_r + facet_length; rr <= r - facet_length; rr += facet_length) { points[npoints].x = rr * cos (th0); points[npoints].y = rr * sin (th0); npoints++; } last_r = r; } for (th = th0; (th0 < th1 ? th <= th1 + facet_th : th >= th1 + facet_th); th += facet_th) { GLfloat th2 = th; if (th0 < th1 && th > th1) th2 = th1; if (th0 > th1 && th < th1) th2 = th1; points[npoints].x = r * cos (th2); points[npoints].y = r * sin (th2); /* Ugh, add point only if it differs from prev. Not sure how this happens. */ if (npoints == 0 || points[npoints-1].x != points[npoints].x || points[npoints-1].y != points[npoints].y) npoints++; } /* Mark up the histo array to find the outer border. */ { int i; for (i = dial; (direction > 0 ? i <= dial1 : i >= dial1); i += direction) { int x = (i + 26) % 26; int y; for (y = 0; y <= letter; y++) histo[y * 26 + x]++; } } dc->codeword_text_points[letter] = npoints; dial = dial1; } } if (npoints >= letters * outer_facets) abort(); # if 0 { /* Print histo */ int x, y; for (y = 0; y < letters; y++) { fprintf (stderr, "%2d: ", y); for (x = 0; x < 26; x++) fprintf (stderr, "%x", histo[y * 26 + x]); fprintf (stderr, "\n"); } fprintf (stderr, "\n"); } # endif /* Find a gap in the outer edge, to draw guide dots. */ { int x, y; int last_row = letters; int start_dial = -1, end_dial = -1; for (y = letters-1; y >= 0; y--) { for (x = 0; x < 26; x++) { if (histo[y * 26 + x] == 0) { if (last_row != y) start_dial = end_dial = -1; last_row = y; if (start_dial == -1) start_dial = x; end_dial = x; } } } if (last_row < letters-1 && start_dial >= 0) { GLfloat r = iradius + rtick * (last_row + 2); int i; dc->codeword_nguides = 0; dc->codeword_guides = (XYZ *) calloc (end_dial - start_dial + 1, sizeof (*dc->codeword_guides)); for (i = start_dial; i <= end_dial; i++) { GLfloat th = i * M_PI * 2 / 26; GLfloat x = r * cos (th); GLfloat y = r * sin (th); dc->codeword_guides[dc->codeword_nguides].x = x; dc->codeword_guides[dc->codeword_nguides].y = y; dc->codeword_nguides++; } } free (histo); histo = 0; } dc->codeword_path_npoints = npoints; dc->codeword_path = points; } static int draw_codeword_cap (ModeInfo *mi) { logo_configuration *dc = &dcs[MI_SCREEN(mi)]; int wire = MI_IS_WIREFRAME(mi); int polys = 0; int segments = dc->codeword_disc_facets; GLfloat size = dc->codeword_spread * dc->codeword_cap_size; GLfloat width = dc->codeword_line_width / 2; GLfloat thick = dc->codeword_thickness / 2; GLfloat r1 = size + width/2; GLfloat r2 = size - width/2; GLfloat facet, th, z; if (wire) segments = 12; facet = M_PI * 2 / segments; glPushMatrix(); /* Top and bottom */ for (z = -thick; z <= thick; z += thick*2) { glNormal3f (0, 0, (z < 0 ? -1 : 1)); glFrontFace (z < 0 ? GL_CCW : GL_CW); glBegin (wire ? GL_LINES : GL_QUAD_STRIP); for (th = 0; th <= M_PI*2; th += facet) { GLfloat x = cos (th); GLfloat y = sin (th); glVertex3f (r1 * x, r1 * y, z); glVertex3f (r2 * x, r2 * y, z); } glEnd(); if (wire) { glBegin (GL_LINE_LOOP); for (th = 0; th <= M_PI*2; th += facet) { GLfloat x = cos (th); GLfloat y = sin (th); glVertex3f (r1 * x, r1 * y, z); } glEnd(); glBegin (GL_LINE_LOOP); for (th = 0; th <= M_PI*2; th += facet) { GLfloat x = cos (th); GLfloat y = sin (th); glVertex3f (r2 * x, r2 * y, z); } glEnd(); } } /* Inside and outside */ for (z = -1; z <= 1; z += 2) { glFrontFace (z < 0 ? GL_CCW : GL_CW); glBegin (wire ? GL_LINES : GL_QUAD_STRIP); for (th = 0; th <= M_PI*2; th += facet) { GLfloat th1 = th + facet; GLfloat x0 = cos (th); GLfloat y0 = sin (th); GLfloat x1 = cos (th1); GLfloat y1 = sin (th1); GLfloat r = z < 0 ? r1 : r2; if (z < 0) do_normal (r * x0, r * y0, thick, r * x0, r * y0, -thick, r * x1, r * y1, -thick); else do_normal (r * x1, r * y1, thick, r * x1, r * y1, -thick, r * x0, r * y0, -thick); glVertex3f (r * x0, r * y0, thick); glVertex3f (r * x0, r * y0, -thick); } glEnd(); } glPopMatrix(); return polys; } static int draw_codeword_guides (ModeInfo *mi, GLfloat anim_ratio) { logo_configuration *dc = &dcs[MI_SCREEN(mi)]; int wire = MI_IS_WIREFRAME(mi); int polys = 0; int segments = dc->codeword_disc_facets; GLfloat s = dc->codeword_line_width / 2; GLfloat each = 1.0 / dc->codeword_nguides; int i; if (wire) segments = 6; for (i = 0; i < dc->codeword_nguides; i++) { GLfloat ratio; if (anim_ratio < i*each) ratio = 0; else if (anim_ratio >= (i+1)*each) ratio = 1; else ratio = (anim_ratio - i*each) / each; if (ratio <= 0) continue; if (ratio == 0) ratio = 0.001; glPushMatrix(); glTranslatef (dc->codeword_guides[i].x, dc->codeword_guides[i].y, dc->codeword_guides[i].z); glScalef (ratio, ratio, ratio); /* If the line width and thickness are pretty close to each other, use spheres. Otherwise use tubes. */ if (dc->codeword_thickness < dc->codeword_line_width * 1.3 && dc->codeword_thickness > dc->codeword_line_width / 1.3) { glScalef (s, s, s); glFrontFace (GL_CCW); polys += unit_sphere (segments, segments, wire); } else { polys += tube (0, 0, -dc->codeword_thickness / 2, 0, 0, dc->codeword_thickness / 2, s, 0, segments, True, True, wire); } glPopMatrix(); } return polys; } /* Compute the characters at which the cursor is currently pointing, and render it on the logo. */ static void codeword_text_output (ModeInfo *mi, GLfloat anim_ratio) { logo_configuration *dc = &dcs[MI_SCREEN(mi)]; int i; int L = strlen (dc->codeword_text); int point = dc->codeword_path_npoints * anim_ratio; Bool hit = False; if (dc->anim_state == CODEWORD_BLANK) point = 0; for (i = 0; i < L; i++) { if (point >= dc->codeword_text_points[i]) dc->codeword_text_out[i] = dc->codeword_text[i]; else if (hit) dc->codeword_text_out[i] = 0; else { int steps = dc->codeword_text[i] - 'A' + 1; int last = (i > 0 ? dc->codeword_text_points[i-1] : 0); double ratio = ((point - last) / (double) (dc->codeword_text_points[i] - last)); char chr = 'A' + (ratio * steps); if (ratio < 0.1) chr = 0; dc->codeword_text_out[i] = chr; hit = True; } } dc->codeword_text_out[i] = 0; if (*dc->codeword_text_out && !strcmp (dc->codeword_text, "CODEWORD")) { int i; int L2 = strlen (dc->codeword_text_out); GLfloat ss = 0.01; int ascent, descent; glPushMatrix(); glColor4fv (dc->codeword_color); glRotatef (90, 0, 1, 0); glRotatef (-90, 0, 0, 1); for (i = 0; i < L2; i++) { XCharStruct e; char buf[2]; glPushMatrix(); glRotatef ((i + 0.5) * 360 / 26.0, 0, 0, 1); # if 0 { GLfloat th; glDisable(GL_LIGHTING); glBegin(GL_LINES); glVertex3f(0,0,0); glVertex3f(0,-4,0); glEnd(); glBegin(GL_LINE_STRIP); for (th = M_PI * 1.45; th < M_PI * 1.55; th += 0.1) { GLfloat r = 3.85; glVertex3f (r * cos(th), r * sin(th), 0); } glEnd(); if (!MI_IS_WIREFRAME(mi)) glEnable(GL_LIGHTING); } # endif glTranslatef (0, -dc->codeword_spread * (L - 1), 0); glScalef (ss, ss, ss); buf[0] = dc->codeword_text_out[i] + ('a' - 'A'); buf[1] = 0; texture_string_metrics (dc->font, buf, &e, &ascent, &descent); # ifdef HAVE_MOBILE /* #### Magic magic magic WTF... */ glScalef (0.5, 0.5, 0.5); # endif glTranslatef (-e.width * 1.0, -(ascent + descent + e.descent * 2.4), /* #### WTF */ 0); glScalef (2, 2, 2); # if 0 glDisable(GL_LIGHTING); glBegin(GL_LINE_LOOP); glVertex3f(0, 0, 0); glVertex3f(e.width, 0, 0); glVertex3f(e.width, e.ascent + e.descent, 0); glVertex3f(0, e.ascent + e.descent, 0); glEnd(); if (!MI_IS_WIREFRAME(mi)) glEnable(GL_LIGHTING); # endif glDisable(GL_CULL_FACE); /* tell texfont.c to draw both sides */ print_texture_string (dc->font, buf); glEnable(GL_CULL_FACE); glPopMatrix(); } glPopMatrix(); } } /* Convert the precomputed path to a thick line of polygons. We could actually precompute all of these polygons too, but it's fast enough. */ static int draw_codeword_path (ModeInfo *mi) { logo_configuration *dc = &dcs[MI_SCREEN(mi)]; int wire = MI_IS_WIREFRAME(mi); int polys = 0; GLfloat anim_ratio = (dc->anim_state == CODEWORD_IN ? dc->anim_ratio : dc->anim_state == CODEWORD_OUT ? 1 - dc->anim_ratio : dc->anim_state == CODEWORD_BLANK ? 0 : 1); int last_anim_point = 0; GLfloat width = dc->codeword_line_width / 2; GLfloat thick = dc->codeword_thickness / 2; int i, k; GLfloat j; int quad_size = (dc->codeword_path_npoints + 1) * 2; XYZ *quads = (XYZ *) calloc (quad_size, sizeof(*quads)); XYZ *norms = (XYZ *) calloc (quad_size, sizeof(*norms)); int nquads = 0; for (i = 0; i < dc->codeword_path_npoints; i++) { XYZ p1 = dc->codeword_path[i]; XYZ p2 = (i < dc->codeword_path_npoints-1 ? dc->codeword_path[i+1] : dc->codeword_path[i-1]); XYZ p1a, p1b; XYZ n; /* normal of the first line segment */ n.x = -(p2.y - p1.y); n.y = (p2.x - p1.x); n.z = 0; normalize (&n); if (i == 0) { p1a.x = p1.x - width / 2 * n.x; p1a.y = p1.y - width / 2 * n.y; p1a.z = 0; p1b.x = p1.x + width / 2 * n.x; p1b.y = p1.y + width / 2 * n.y; p1b.z = 0; } else if (i == dc->codeword_path_npoints - 1) { p1b.x = p1.x - width / 2 * n.x; p1b.y = p1.y - width / 2 * n.y; p1b.z = 0; p1a.x = p1.x + width / 2 * n.x; p1a.y = p1.y + width / 2 * n.y; p1a.z = 0; } else { XYZ p0 = dc->codeword_path[i-1]; XYZ t, t0, t1; /* tangent of corner between two line segments */ XYZ m; /* miter line: normal of tangent */ GLfloat d; /* length of miter */ t0.x = p2.x - p1.x; t0.y = p2.y - p1.y; t0.z = p2.z - p1.z; normalize (&t0); t1.x = p1.x - p0.x; t1.y = p1.y - p0.y; t1.z = p1.z - p0.z; normalize (&t1); t.x = t0.x + t1.x; t.y = t0.y + t1.y; t.z = t0.z + t1.z; normalize (&t); m.x = -t.y; m.y = t.x; m.z = 0; /* find length of miter by projecting it on one of the normals */ d = width / 2 / dot (m, n); p1a.x = p1.x - d * m.x; p1a.y = p1.y - d * m.y; p1a.z = 0; p1b.x = p1.x + d * m.x; p1b.y = p1.y + d * m.y; p1b.z = 0; } quads[nquads++] = p1a; quads[nquads++] = p1b; if (nquads >= quad_size) abort(); if (i / (double) dc->codeword_path_npoints > anim_ratio) break; last_anim_point = i; } /* Compute normals for each point along the interior edge */ for (k = 0; k <= 1; k++) { for (i = k; i < nquads-2; i += 2) { XYZ p1a = quads[i]; XYZ p2a = quads[i+2]; XYZ p1b = p1a; XYZ p2b = p2a; p1a.z = thick; /* a: top */ p1b.z = -thick; /* b: bottom */ p2a.z = thick; p2b.z = -thick; norms[i] = (k == 0 ? calc_normal (p1a, p1b, p2b) : calc_normal (p2a, p2b, p1a)); } } glPushMatrix(); glColor4fv (dc->codeword_color); glMaterialfv (GL_FRONT_AND_BACK, GL_AMBIENT_AND_DIFFUSE, dc->codeword_color); # ifdef HAVE_MOBILE /* Make the whole thing fit on the phone screen */ { GLfloat size = MI_WIDTH(mi) < MI_HEIGHT(mi) ? MI_WIDTH(mi) : MI_HEIGHT(mi); glScalef (0.9, 0.9, 0.9); if (size <= 768) /* iPad retina / iPhone 6 */ glScalef (0.7, 0.7, 0.7); } # endif codeword_text_output (mi, anim_ratio); glRotatef (90, 1, 0, 0); glRotatef (90, 0, 1, 0); glRotatef (-90, 0, 0, 1); glScalef (0.8, 0.8, 0.8); glNormal3f (0, 0, -1); if (anim_ratio <= 0) { polys += draw_codeword_cap (mi); goto DONE; } # if 0 glColor3f (1, 0, 0); glBegin(GL_LINE_STRIP); for (i = 0; i < dc->codeword_path_npoints; i++) { glVertex3f (dc->codeword_path[i].x, dc->codeword_path[i].y, dc->codeword_path[i].z); polys++; } glEnd(); glColor4fv (dc->codeword_color); # endif if (wire) { int k; GLfloat j; for (i = 0; i <= 1; i++) for (j = -thick; j <= thick; j += thick*2) { glBegin (GL_LINE_STRIP); for (k = i; k < nquads; k += 2) { glVertex3f (quads[k].x, quads[k].y, j); polys++; } glEnd(); } } /* Top and bottom */ for (j = -thick; j <= thick; j += thick*2) { if (j < 0) { glNormal3f (0, 0, -1); glFrontFace (GL_CW); } else { glNormal3f (0, 0, 1); glFrontFace (GL_CCW); } glBegin (wire ? GL_LINES : GL_QUAD_STRIP); for (i = 0; i < nquads; i += 2) { glVertex3f (quads[i+1].x, quads[i+1].y, j); glVertex3f (quads[i].x, quads[i].y, j); polys++; } glEnd(); } /* Edges */ for (k = 0; k <= 1; k++) { if (k > 0) { glNormal3f (0, 0, -1); glFrontFace (GL_CW); } else { glNormal3f (0, 0, 1); glFrontFace (GL_CCW); } glBegin (wire ? GL_LINES : GL_QUADS); for (i = k; i < nquads; i += 2) { XYZ p1a = quads[i]; XYZ p2a = (i < nquads-2) ? quads[i+2] : p1a; XYZ p1b = p1a; XYZ p2b = p2a; XYZ n1 = norms[i]; XYZ n2 = (i < nquads-2) ? norms[i+2] : n1; /* If the two normals are very similar, smooth the face. If they are different, it's a sharp turn, and use the same normal for both edges (not quite right, but close). */ GLfloat angle = vector_angle (n1.x, n1.y, n1.z, n2.x, n2.y, n2.z); GLfloat pointy = 0.8; p1a.z = thick; p1b.z = -thick; p2a.z = thick; p2b.z = -thick; glNormal3f (n1.x, n1.y, n1.z); glVertex3f (p1a.x, p1a.y, p1a.z); glVertex3f (p1b.x, p1b.y, p1b.z); if (angle < pointy) glNormal3f (n2.x, n2.y, n2.z); glVertex3f (p2b.x, p2b.y, p2b.z); glVertex3f (p2a.x, p2a.y, p2a.z); polys++; } glEnd(); } /* Only draw the guides when the path is almost complete; fade them in and out based on completeness. */ { GLfloat size = 0.95; GLfloat r = (anim_ratio > size ? (anim_ratio - size) / (1 - size) : 0); polys += draw_codeword_guides (mi, r); } /* Draw the start and end caps */ { int i; GLfloat x, y, z, x2, y2, z2, X, Y, Z; GLfloat r = dc->codeword_spread * dc->codeword_cap_size; i = 0; x = dc->codeword_path[i].x; y = dc->codeword_path[i].y; z = dc->codeword_path[i].z; x -= r; glPushMatrix(); glTranslatef (x, y, z); polys += draw_codeword_cap (mi); glPopMatrix(); /* end cap */ i = last_anim_point + 1; if (i > dc->codeword_path_npoints - 1) i = dc->codeword_path_npoints - 1; x = dc->codeword_path[i].x; y = dc->codeword_path[i].y; z = dc->codeword_path[i].z; i--; x2 = dc->codeword_path[i].x; y2 = dc->codeword_path[i].y; z2 = dc->codeword_path[i].z; X = (x2 - x); Y = (y2 - y); Z = (z2 - z); glPushMatrix(); glTranslatef (x, y, z); glRotatef (-atan2 (X, Y) * (180 / M_PI), 0, 0, 1); glRotatef ( atan2 (Z, sqrt(X*X + Y*Y)) * (180 / M_PI), 1, 0, 0); glTranslatef (0, -r, 0); polys += draw_codeword_cap (mi); glPopMatrix(); } DONE: glPopMatrix(); free (quads); free (norms); return polys; } /* Window management, etc */ ENTRYPOINT void reshape_logo (ModeInfo *mi, int width, int height) { GLfloat h = (GLfloat) height / (GLfloat) width; glViewport (0, 0, (GLint) width, (GLint) height); glMatrixMode(GL_PROJECTION); glLoadIdentity(); gluPerspective (30.0, 1/h, 1.0, 100.0); glMatrixMode(GL_MODELVIEW); glLoadIdentity(); gluLookAt( 0.0, 0.0, 30.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0); # ifdef HAVE_MOBILE /* Keep it the same relative size when rotated. */ { int o = (int) current_device_rotation(); if (o != 0 && o != 180 && o != -180) glScalef (1/h, 1/h, 1/h); /* #### Why does this change the lighting? */ } # endif glClear(GL_COLOR_BUFFER_BIT); } static void gl_init (ModeInfo *mi) { /* logo_configuration *dc = &dcs[MI_SCREEN(mi)]; */ int wire = MI_IS_WIREFRAME(mi); GLfloat position[] = {0, 0, 0, 0}; GLfloat direction[] = {3, -1, -3}; position[0] = -direction[0]; position[1] = -direction[1]; position[2] = -direction[2]; if (!wire) { glLightfv(GL_LIGHT0, GL_POSITION, position); glLightfv(GL_LIGHT0, GL_SPOT_DIRECTION, direction); glShadeModel(GL_SMOOTH); glEnable(GL_NORMALIZE); glEnable(GL_CULL_FACE); glEnable(GL_LIGHTING); glEnable(GL_LIGHT0); glEnable(GL_DEPTH_TEST); } } ENTRYPOINT void init_logo (ModeInfo *mi) { logo_configuration *dc; int do_gasket = get_boolean_resource(mi->dpy, "doGasket", "Boolean"); int do_helix = get_boolean_resource(mi->dpy, "doHelix", "Boolean"); int do_ladder = (do_helix && get_boolean_resource(mi->dpy, "doLadder", "Boolean")); int do_frame = get_boolean_resource(mi->dpy, "doFrame", "Boolean"); GLfloat helix_rot = 147.0; if (!do_gasket && !do_helix) { fprintf (stderr, "%s: no helix or gasket?\n", progname); exit (1); } if (!dcs) { dcs = (logo_configuration *) calloc (MI_NUM_SCREENS(mi), sizeof (logo_configuration)); if (!dcs) { fprintf(stderr, "%s: out of memory\n", progname); exit(1); } } dc = &dcs[MI_SCREEN(mi)]; if ((dc->glx_context = init_GL(mi)) != NULL) { gl_init(mi); reshape_logo (mi, MI_WIDTH(mi), MI_HEIGHT(mi)); } dc->wall_facets = get_integer_resource(mi->dpy, "wallFacets", "Integer"); dc->bar_facets = get_integer_resource(mi->dpy, "barFacets", "Integer"); dc->clockwise = get_boolean_resource(mi->dpy, "clockwise", "Boolean"); dc->turns = get_float_resource(mi->dpy, "turns", "Float"); dc->turn_spacing = get_float_resource(mi->dpy, "turnSpacing", "Float"); dc->bar_spacing = get_float_resource(mi->dpy, "barSpacing", "Float"); dc->wall_height = get_float_resource(mi->dpy, "wallHeight", "Float"); dc->wall_thickness = get_float_resource(mi->dpy, "wallThickness", "Float"); dc->bar_thickness = get_float_resource(mi->dpy, "barThickness", "Float"); dc->wall_taper = get_float_resource(mi->dpy, "wallTaper", "Float"); dc->gasket_size = get_float_resource(mi->dpy,"gasketSize", "Float"); dc->gasket_depth = get_float_resource(mi->dpy,"gasketDepth", "Float"); dc->gasket_thickness = get_float_resource(mi->dpy,"gasketThickness","Float"); dc->frame_size = get_float_resource(mi->dpy, "frameSize", "Float"); dc->frame_depth = get_float_resource(mi->dpy, "frameDepth", "Float"); dc->frame_thickness = get_float_resource(mi->dpy, "frameThickness", "Float"); dc->triangle_size = get_float_resource(mi->dpy, "triangleSize", "Float"); dc->speed = get_float_resource(mi->dpy, "speed", "Float"); dc->codeword_text = get_string_resource(mi->dpy, "text", "String"); dc->codeword_text = codeword_simplify_text (dc->codeword_text); dc->codeword_text_out = calloc (strlen(dc->codeword_text) + 1, sizeof(*dc->codeword_text_out)); dc->codeword_text_points = (int *) calloc (strlen(dc->codeword_text) + 1, sizeof(*dc->codeword_text_points)); dc->codeword_facets = get_integer_resource(mi->dpy, "cwFacets", "Integer"); dc->codeword_disc_facets = get_integer_resource(mi->dpy, "cwDiscFacets", "Integer"); dc->codeword_spread = get_float_resource(mi->dpy, "cwSpread", "Float"); dc->codeword_line_width = get_float_resource(mi->dpy, "cwLineWidth", "Float"); dc->codeword_thickness = get_float_resource(mi->dpy, "cwThickness", "Float"); dc->codeword_cap_size = get_float_resource(mi->dpy, "cwCapSize", "Float"); { char *s = get_string_resource (MI_DISPLAY (mi), "mode", "String"); if (!s || !*s || !strcasecmp (s, "helix")) dc->mode = HELIX; else if (!strcasecmp (s, "pizza")) dc->mode = PIZZA; else if (!strcasecmp (s, "both")) dc->mode = HELIX_AND_PIZZA; else if (!strcasecmp (s, "codeword")) dc->mode = CODEWORD_IN; else { fprintf (stderr, "%s: mode must be helix, pizza, both or codeword, not \"%s\"\n", progname, s); exit (1); } if (s) free (s); dc->anim_state = (dc->mode == HELIX_AND_PIZZA ? ((random() & 1) ? HELIX : PIZZA) : dc->mode); dc->anim_ratio = 0; } if (dc->mode == CODEWORD_IN) dc->font = load_texture_font (MI_DISPLAY(mi), "cwFont"); { XColor xcolor; char *color_name = get_string_resource (mi->dpy, "foreground", "Foreground"); char *s2; for (s2 = color_name + strlen(color_name) - 1; s2 > color_name; s2--) if (*s2 == ' ' || *s2 == '\t') *s2 = 0; else break; if (! XParseColor (MI_DISPLAY(mi), mi->xgwa.colormap, color_name, &xcolor)) { fprintf (stderr, "%s: can't parse color %s\n", progname, color_name); exit (1); } dc->color[0] = xcolor.red / 65535.0; dc->color[1] = xcolor.green / 65535.0; dc->color[2] = xcolor.blue / 65535.0; dc->color[3] = 1.0; color_name = get_string_resource (mi->dpy, "cwForeground", "Foreground"); for (s2 = color_name + strlen(color_name) - 1; s2 > color_name; s2--) if (*s2 == ' ' || *s2 == '\t') *s2 = 0; else break; if (! XParseColor (MI_DISPLAY(mi), mi->xgwa.colormap, color_name, &xcolor)) { fprintf (stderr, "%s: can't parse color %s\n", progname, color_name); exit (1); } dc->codeword_color[0] = xcolor.red / 65535.0; dc->codeword_color[1] = xcolor.green / 65535.0; dc->codeword_color[2] = xcolor.blue / 65535.0; dc->codeword_color[3] = 1.0; color_name = get_string_resource (mi->dpy, "cwBackground", "Background"); for (s2 = color_name + strlen(color_name) - 1; s2 > color_name; s2--) if (*s2 == ' ' || *s2 == '\t') *s2 = 0; else break; if (! XParseColor (MI_DISPLAY(mi), mi->xgwa.colormap, color_name, &xcolor)) { fprintf (stderr, "%s: can't parse color %s\n", progname, color_name); exit (1); } dc->codeword_bg[0] = xcolor.red / 65535.0; dc->codeword_bg[1] = xcolor.green / 65535.0; dc->codeword_bg[2] = xcolor.blue / 65535.0; dc->codeword_bg[3] = 1.0; } dc->trackball = gltrackball_init (False); dc->gasket_spinnerx.probability = 0.1; dc->gasket_spinnery.probability = 0.1; dc->gasket_spinnerz.probability = 1.0; dc->gasket_spinnerx.easement = 0.08; dc->gasket_spinnery.easement = 0.08; dc->gasket_spinnerz.easement = 0.08; dc->helix_spinnerz.probability = 0.6; dc->helix_spinnerz.easement = 0.2; dc->pizza_spinnerz.probability = 0.6; dc->pizza_spinnery.probability = 0.6; dc->pizza_spinnerz.easement = 0.2; dc->pizza_spinnery.easement = 0.2; dc->frame_spinner.probability = 5.0; dc->frame_spinner.easement = 0.2; dc->scene_spinnerx.probability = 0.1; dc->scene_spinnery.probability = 0.0; dc->scene_spinnerx.easement = 0.1; dc->scene_spinnery.easement = 0.1; if (dc->mode == CODEWORD_IN) { double tilt_speed = 0.003; dc->scene_rot = make_rotator (0, 0, 0, 0, tilt_speed, True); } /* start the frame off-screen */ dc->frame_spinner.spinning_p = True; dc->frame_spinner.position = 0.3; dc->frame_spinner.speed = 0.001; if (dc->speed > 0) /* start off with the gasket in motion */ { dc->gasket_spinnerz.spinning_p = True; dc->gasket_spinnerz.speed = (0.002 * ((random() & 1) ? 1 : -1) * dc->speed); } # ifdef DXF_OUTPUT_HACK { # if 0 dc->frame_depth = dc->gasket_depth; dxf_layer = 1; dxf_color = 3; dxf_start(); glPushMatrix(); glRotatef(90, 1, 0, 0); glRotatef(90, 0, 0, 1); make_pizza (dc, 0, 0); glPushMatrix(); glRotatef(helix_rot, 0, 0, 1); make_ladder (dc, 0, 0); make_helix (dc, 0, 0); glRotatef (180, 0, 0, 1); make_helix (dc, 0, 0); glPopMatrix(); dxf_layer++; make_gasket (dc, 0); dxf_layer++; make_frame (dc, 0); glPopMatrix(); dxf_end(); # else dxf_start(); glPushMatrix(); glRotatef(90, 1, 0, 0); glRotatef(90, 0, 0, 1); dc->anim_state = CODEWORD; make_codeword_path (mi); draw_codeword_path (mi); glPopMatrix(); dxf_end(); # endif } # endif glPushMatrix(); dc->helix_list = glGenLists (1); glNewList (dc->helix_list, GL_COMPILE); glRotatef(helix_rot, 0, 0, 1); if (do_ladder) dc->polys[0] += make_ladder (dc, 0, 0); if (do_helix) dc->polys[0] += make_helix (dc, 0, 0); glRotatef(180, 0, 0, 1); if (do_helix) dc->polys[0] += make_helix (dc, 0, 0); glEndList (); glPopMatrix(); glPushMatrix(); dc->helix_list_wire = glGenLists (1); glNewList (dc->helix_list_wire, GL_COMPILE); /* glRotatef(helix_rot, 0, 0, 1); wtf? */ if (do_ladder) dc->polys[1] += make_ladder (dc, 1, 1); if (do_helix) dc->polys[1] += make_helix (dc, 1, 1); glRotatef(180, 0, 0, 1); if (do_helix) dc->polys[1] += make_helix (dc, 1, 1); glEndList (); glPopMatrix(); glPushMatrix(); dc->helix_list_facetted = glGenLists (1); glNewList (dc->helix_list_facetted, GL_COMPILE); glRotatef(helix_rot, 0, 0, 1); if (do_ladder) dc->polys[2] += make_ladder (dc, 1, 0); if (do_helix) dc->polys[2] += make_helix (dc, 1, 0); glRotatef(180, 0, 0, 1); if (do_helix) dc->polys[2] += make_helix (dc, 1, 0); glEndList (); glPopMatrix(); dc->pizza_list = glGenLists (1); glNewList (dc->pizza_list, GL_COMPILE); if (do_frame) dc->polys[5] += make_pizza (dc, 0, 0); glEndList (); dc->pizza_list_wire = glGenLists (1); glNewList (dc->pizza_list_wire, GL_COMPILE); if (do_frame) dc->polys[6] += make_pizza (dc, 1, 1); glEndList (); dc->pizza_list_facetted = glGenLists (1); glNewList (dc->pizza_list_facetted, GL_COMPILE); if (do_frame) dc->polys[6] += make_pizza (dc, 1, 0); glEndList (); dc->gasket_list = glGenLists (1); glNewList (dc->gasket_list, GL_COMPILE); if (do_gasket) dc->polys[3] += make_gasket (dc, 0); glEndList (); dc->gasket_list_wire = glGenLists (1); glNewList (dc->gasket_list_wire, GL_COMPILE); if (do_gasket) dc->polys[4] += make_gasket (dc, 1); glEndList (); dc->frame_list = glGenLists (1); glNewList (dc->frame_list, GL_COMPILE); if (do_frame) dc->polys[5] += make_frame (dc, 0); glEndList (); dc->frame_list_wire = glGenLists (1); glNewList (dc->frame_list_wire, GL_COMPILE); if (do_frame) dc->polys[6] += make_frame (dc, 1); glEndList (); make_codeword_path (mi); /* When drawing both solid and wireframe objects, make sure the wireframe actually shows up! */ glEnable (GL_POLYGON_OFFSET_FILL); glPolygonOffset (1.0, 1.0); } ENTRYPOINT Bool logo_handle_event (ModeInfo *mi, XEvent *event) { logo_configuration *dc = &dcs[MI_SCREEN(mi)]; if (gltrackball_event_handler (event, dc->trackball, MI_WIDTH (mi), MI_HEIGHT (mi), &dc->button_down_p)) return True; else if (event->xany.type == KeyPress) { KeySym keysym; char c = 0; XLookupString (&event->xkey, &c, 1, &keysym, 0); if (c == ' ' || c == '\t') { switch (dc->anim_state) { case HELIX: dc->anim_state = HELIX_OUT; dc->anim_ratio = 0.0; return True; case PIZZA: dc->anim_state = PIZZA_OUT; dc->anim_ratio = 0.0; return True; case CODEWORD: dc->anim_state = CODEWORD_OUT; dc->anim_ratio = 0.0; return True; default: break; } } } return False; } static GLfloat spinner_ease (GLfloat x) { /* Smooth curve up, ending at slope = 1. */ return cos ((x/2 + 1) * M_PI) + 1; } static void tick_spinner (ModeInfo *mi, spinner *s) { logo_configuration *dc = &dcs[MI_SCREEN(mi)]; if (dc->speed == 0) return; if (dc->button_down_p) return; if (s->spinning_p) { s->position += s->speed; if (s->position >= 1.0 || s->position <= 0.0) { s->position = 0; s->position_eased = 0; s->spinning_p = False; } else if (s->easement > 0 && s->position <= s->easement) s->position_eased = (s->easement * spinner_ease (s->position / s->easement)); else if (s->easement > 0 && s->position >= 1-s->easement) s->position_eased = (1 - s->easement * spinner_ease ((1 - s->position) / s->easement)); else s->position_eased = s->position; } else if (s->probability && (random() % (int) (PROBABILITY_SCALE / s->probability)) == 0) { GLfloat ss = 0.004; s->spinning_p = True; s->position = 0; do { s->speed = dc->speed * (frand(ss/3) + frand(ss/3) + frand(ss/3)); } while (s->speed <= 0); if (random() & 1) { s->speed = -s->speed; s->position = 1.0; } } } static void link_spinners (ModeInfo *mi, spinner *s0, spinner *s1) { if (s0->spinning_p && !s1->spinning_p) { GLfloat op = s1->probability; s1->probability = PROBABILITY_SCALE; tick_spinner (mi, s1); s1->probability = op; } } ENTRYPOINT void draw_logo (ModeInfo *mi) { logo_configuration *dc = &dcs[MI_SCREEN(mi)]; Display *dpy = MI_DISPLAY(mi); Window window = MI_WINDOW(mi); int wire = MI_IS_WIREFRAME(mi); GLfloat gcolor[4]; GLfloat specular[] = {0.8, 0.8, 0.8, 1.0}; GLfloat shininess = 50.0; Bool pizza_p; Bool codeword_p; if (!dc->glx_context) return; mi->polygon_count = 0; glXMakeCurrent(MI_DISPLAY(mi), MI_WINDOW(mi), *(dc->glx_context)); if (!wire && dc->wire_overlay == 0 && (random() % (int) (PROBABILITY_SCALE / 0.2)) == 0) dc->wire_overlay = ((random() % 200) + (random() % 200) + (random() % 200)); tick_spinner (mi, &dc->gasket_spinnerx); tick_spinner (mi, &dc->gasket_spinnery); tick_spinner (mi, &dc->gasket_spinnerz); tick_spinner (mi, &dc->helix_spinnerz); tick_spinner (mi, &dc->pizza_spinnery); tick_spinner (mi, &dc->pizza_spinnerz); tick_spinner (mi, &dc->scene_spinnerx); tick_spinner (mi, &dc->scene_spinnery); tick_spinner (mi, &dc->frame_spinner); link_spinners (mi, &dc->scene_spinnerx, &dc->scene_spinnery); switch (dc->anim_state) { case HELIX: if (dc->mode == HELIX_AND_PIZZA && (random() % (int) (PROBABILITY_SCALE / 0.2)) == 0) dc->anim_state = HELIX_OUT; break; case HELIX_OUT: dc->anim_ratio += 0.1 * dc->speed; if (dc->anim_ratio >= 1.0) { dc->anim_ratio = 0.0; dc->anim_state = PIZZA_IN; } break; case PIZZA_IN: dc->anim_ratio += 0.1 * dc->speed; if (dc->anim_ratio >= 1.0) { dc->anim_ratio = 0.0; dc->anim_state = PIZZA; } break; case PIZZA: if (dc->mode == HELIX_AND_PIZZA && (random() % (int) (PROBABILITY_SCALE / 0.2)) == 0) dc->anim_state = PIZZA_OUT; break; case PIZZA_OUT: dc->anim_ratio += 0.1 * dc->speed; if (dc->anim_ratio >= 1.0) { dc->anim_ratio = 0.0; dc->anim_state = HELIX_IN; } break; case HELIX_IN: dc->anim_ratio += 0.1 * dc->speed; if (dc->anim_ratio >= 1.0) { dc->anim_ratio = 0.0; dc->anim_state = HELIX; } break; case CODEWORD_IN: dc->scene_spinnerx.probability = 0.2; dc->scene_spinnery.probability = 0.05; if (! dc->button_down_p) dc->anim_ratio += 0.004 * dc->speed; if (dc->anim_ratio >= 1.0) { dc->anim_state = CODEWORD; dc->anim_ratio = frand (0.5); } break; case CODEWORD: dc->scene_spinnerx.probability = 0.5; dc->scene_spinnery.probability = 0.2; if (! dc->button_down_p) dc->anim_ratio += (0.0005 + frand(0.002)) * dc->speed; if (dc->anim_ratio >= 1.0) { dc->anim_ratio = 0.0; dc->anim_state = CODEWORD_OUT; } break; case CODEWORD_OUT: dc->scene_spinnerx.probability = 0; dc->scene_spinnery.probability = 0; if (! dc->button_down_p) dc->anim_ratio += 0.02 * dc->speed; if (dc->anim_ratio >= 1.0) { dc->anim_ratio = 0.0; dc->anim_state = CODEWORD_BLANK; } break; case CODEWORD_BLANK: dc->scene_spinnerx.probability = 0; dc->scene_spinnery.probability = 0; if (! dc->button_down_p) dc->anim_ratio += 0.01 * dc->speed; if (dc->anim_ratio >= 1.0) { dc->anim_ratio = 0.0; dc->anim_state = CODEWORD_IN; } break; default: abort(); break; } pizza_p = (dc->anim_state == PIZZA || dc->anim_state == PIZZA_IN || dc->anim_state == PIZZA_OUT); codeword_p = (dc->anim_state == CODEWORD || dc->anim_state == CODEWORD_IN || dc->anim_state == CODEWORD_OUT || dc->anim_state == CODEWORD_BLANK); glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glPushMatrix (); glRotatef(current_device_rotation(), 0, 0, 1); { GLfloat scale = 1.8; glScalef(scale, scale, scale); glColor3f(dc->color[0], dc->color[1], dc->color[2]); /* Draw frame before trackball rotation */ if (! codeword_p) { GLfloat p = (dc->frame_spinner.position_eased >= 0 ? dc->frame_spinner.position_eased : -dc->frame_spinner.position_eased); GLfloat size = (p > 0.5 ? 1-p : p); scale = 1 + (size * 10); glPushMatrix(); /* gltrackball_rotate (dc->trackball); */ glRotatef(90, 1, 0, 0); glRotatef(90, 0, 0, 1); glScalef (1, scale, scale); if (wire) { glDisable (GL_LIGHTING); glCallList (dc->frame_list_wire); mi->polygon_count += dc->polys[6]; } else if (dc->wire_overlay != 0) { 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); } else { glCallList (dc->frame_list); mi->polygon_count += dc->polys[5]; } glPopMatrix(); } gltrackball_rotate (dc->trackball); glRotatef(90, 1, 0, 0); glRotatef(90, 0, 0, 1); if (! codeword_p) { glRotatef (360 * dc->scene_spinnerx.position_eased, 0, 1, 0); glRotatef (360 * dc->scene_spinnery.position_eased, 0, 0, 1); glPushMatrix(); glRotatef (360 * dc->gasket_spinnerx.position_eased, 0, 1, 0); glRotatef (360 * dc->gasket_spinnery.position_eased, 0, 0, 1); glRotatef (360 * dc->gasket_spinnerz.position_eased, 1, 0, 0); memcpy (gcolor, dc->color, sizeof (dc->color)); if (dc->wire_overlay != 0) { gcolor[0] = gcolor[1] = gcolor[2] = 0; specular[0] = specular[1] = specular[2] = 0; shininess = 0; } glMaterialfv (GL_FRONT_AND_BACK, GL_AMBIENT_AND_DIFFUSE, gcolor); glMaterialfv (GL_FRONT_AND_BACK, GL_SPECULAR, specular); glMaterialf (GL_FRONT_AND_BACK, GL_SHININESS, shininess); if (wire) { glDisable (GL_LIGHTING); glCallList (dc->gasket_list_wire); mi->polygon_count += dc->polys[4]; } else if (dc->wire_overlay != 0) { 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 { glCallList (dc->gasket_list); mi->polygon_count += dc->polys[3]; } glPopMatrix(); if (pizza_p) { glRotatef (360 * dc->pizza_spinnery.position_eased, 1, 0, 0); glRotatef (360 * dc->pizza_spinnerz.position_eased, 0, 0, 1); } else { glRotatef (360 * dc->helix_spinnerz.position_eased, 0, 0, 1); } scale = ((dc->anim_state == PIZZA_IN || dc->anim_state == HELIX_IN) ? dc->anim_ratio : ((dc->anim_state == PIZZA_OUT || dc->anim_state == HELIX_OUT) ? 1.0 - dc->anim_ratio : 1.0)); if (scale <= 0) scale = 0.001; glScalef (scale, scale, scale); if (wire) { glDisable (GL_LIGHTING); if (pizza_p) glCallList (dc->pizza_list_wire); else glCallList (dc->helix_list_wire); mi->polygon_count += dc->polys[1]; } else if (dc->wire_overlay != 0) { if (pizza_p) glCallList (dc->pizza_list_facetted); else glCallList (dc->helix_list_facetted); glDisable (GL_LIGHTING); glColor3fv (dc->color); if (pizza_p) glCallList (dc->pizza_list_wire); else glCallList (dc->helix_list_wire); mi->polygon_count += dc->polys[2]; if (!wire) glEnable (GL_LIGHTING); } else { if (pizza_p) glCallList (dc->pizza_list); else glCallList (dc->helix_list); mi->polygon_count += dc->polys[0]; } } else /* codeword_p */ { # if 0 double max = 70; /* face front */ double x, y, z; get_position (dc->scene_rot, &x, &y, &z, !dc->button_down_p); glRotatef (max/2 - x*max, 0, 0, 1); glRotatef (max/2 - y*max, 0, 1, 0); /* glRotatef (max/2 - z*max, 1, 0, 0); */ # else glRotatef (360 * dc->scene_spinnerx.position_eased, 0, 1, 0); glRotatef (360 * dc->scene_spinnery.position_eased, 0, 0, 1); # endif glClearColor (dc->codeword_bg[0], dc->codeword_bg[1], dc->codeword_bg[2], dc->codeword_bg[3]); mi->polygon_count += draw_codeword_path (mi); } } glPopMatrix(); if (dc->wire_overlay > 0) dc->wire_overlay--; if (mi->fps_p) do_fps (mi); glFinish(); glXSwapBuffers(dpy, window); } XSCREENSAVER_MODULE_2 ("DNALogo", dnalogo, logo) #endif /* USE_GL */ xscreensaver-5.36/hacks/glx/grab-ximage.c000664 000767 000024 00000062531 12736534522 020372 0ustar00jwzstaff000000 000000 /* grab-ximage.c --- grab the screen to an XImage for use with OpenGL. * xscreensaver, Copyright (c) 2001-2008 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. */ #ifdef HAVE_CONFIG_H # include "config.h" #endif #include #include #include #ifdef HAVE_ANDROID #include #endif #ifdef HAVE_JWXYZ # include "jwxyz.h" # ifndef HAVE_JWZGLES # include # endif #else # include # include # include /* only for GLfloat */ # include /* for gluBuild2DMipmaps */ # include /* for glXMakeCurrent() */ #endif #ifdef HAVE_JWZGLES # include "jwzgles.h" #endif /* HAVE_JWZGLES */ #include "grab-ximage.h" #include "grabscreen.h" #include "visual.h" /* If REFORMAT_IMAGE_DATA is defined, then we convert Pixmaps to textures like this: - get Pixmap as an XImage in whatever form the server hands us; - convert that XImage to 32-bit RGBA in client-local endianness; - make the texture using RGBA, UNSIGNED_BYTE. If undefined, we do this: - get Pixmap as an XImage in whatever form the server hands us; - figure out what OpenGL texture packing parameters correspond to the image data that the server sent us and use that, e.g., BGRA, INT_8_8_8_8_REV. You might expect the second method to be faster, since we're not making a second copy of the data and iterating each pixel before we hand it to GL. But, you'd be wrong. The first method is almost 6x faster. I guess GL is reformatting it *again*, and doing it very inefficiently! */ #define REFORMAT_IMAGE_DATA #ifdef HAVE_XSHM_EXTENSION # include "resources.h" # include "xshm.h" #endif /* HAVE_XSHM_EXTENSION */ extern char *progname; #include #ifdef HAVE_JWXYZ # include "jwxyz.h" #else # include #endif #undef MAX #define MAX(a,b) ((a)>(b)?(a):(b)) #undef countof #define countof(x) (sizeof((x))/sizeof((*x))) static int debug_p = 0; static Bool bigendian (void) { union { int i; char c[sizeof(int)]; } u; u.i = 1; return !u.c[0]; } #ifdef REFORMAT_IMAGE_DATA /* Given a bitmask, returns the position and width of the field. */ static void decode_mask (unsigned long mask, unsigned long *pos_ret, unsigned long *size_ret) { int i; for (i = 0; i < 32; i++) if (mask & (1L << i)) { int j = 0; *pos_ret = i; for (; i < 32; i++, j++) if (! (mask & (1L << i))) break; *size_ret = j; return; } } /* Given a value and a field-width, expands the field to fill out 8 bits. */ static unsigned char spread_bits (unsigned char value, unsigned char width) { switch (width) { case 8: return value; case 7: return (value << 1) | (value >> 6); case 6: return (value << 2) | (value >> 4); case 5: return (value << 3) | (value >> 2); case 4: return (value << 4) | (value); case 3: return (value << 5) | (value << 2) | (value >> 2); case 2: return (value << 6) | (value << 4) | (value); default: abort(); break; } } static XImage * convert_ximage_to_rgba32 (Screen *screen, XImage *image) { Display *dpy = DisplayOfScreen (screen); Visual *visual = DefaultVisualOfScreen (screen); int x, y; unsigned long crpos=0, cgpos=0, cbpos=0, capos=0; /* bitfield positions */ unsigned long srpos=0, sgpos=0, sbpos=0; unsigned long srmsk=0, sgmsk=0, sbmsk=0; unsigned long srsiz=0, sgsiz=0, sbsiz=0; XColor *colors = 0; unsigned char spread_map[3][256]; /* Note: height+2 in "to" to work around an array bounds overrun in gluBuild2DMipmaps / gluScaleImage. */ XImage *from = image; XImage *to = XCreateImage (dpy, visual, 32, /* depth */ ZPixmap, 0, 0, from->width, from->height, 32, /* bitmap pad */ 0); to->data = (char *) calloc (to->height + 2, to->bytes_per_line); /* Set the bit order in the XImage structure to whatever the local host's native bit order is. */ to->bitmap_bit_order = to->byte_order = (bigendian() ? MSBFirst : LSBFirst); if (visual_class (screen, visual) == PseudoColor || visual_class (screen, visual) == GrayScale) { Colormap cmap = DefaultColormapOfScreen (screen); int ncolors = visual_cells (screen, visual); int i; colors = (XColor *) calloc (sizeof (*colors), ncolors+1); for (i = 0; i < ncolors; i++) colors[i].pixel = i; XQueryColors (dpy, cmap, colors, ncolors); } if (colors == 0) /* truecolor */ { srmsk = to->red_mask; sgmsk = to->green_mask; sbmsk = to->blue_mask; decode_mask (srmsk, &srpos, &srsiz); decode_mask (sgmsk, &sgpos, &sgsiz); decode_mask (sbmsk, &sbpos, &sbsiz); } /* Pack things in "RGBA" order in client endianness. */ if (bigendian()) crpos = 24, cgpos = 16, cbpos = 8, capos = 0; else crpos = 0, cgpos = 8, cbpos = 16, capos = 24; if (colors == 0) /* truecolor */ { int i; for (i = 0; i < 256; i++) { spread_map[0][i] = spread_bits (i, srsiz); spread_map[1][i] = spread_bits (i, sgsiz); spread_map[2][i] = spread_bits (i, sbsiz); } } /* trying to track down an intermittent crash in ximage_putpixel_32 */ if (to->width < from->width) abort(); if (to->height < from->height) abort(); for (y = 0; y < from->height; y++) for (x = 0; x < from->width; x++) { unsigned long sp = XGetPixel (from, x, y); unsigned char sr, sg, sb; unsigned long cp; if (colors) { sr = colors[sp].red & 0xFF; sg = colors[sp].green & 0xFF; sb = colors[sp].blue & 0xFF; } else { sr = (sp & srmsk) >> srpos; sg = (sp & sgmsk) >> sgpos; sb = (sp & sbmsk) >> sbpos; sr = spread_map[0][sr]; sg = spread_map[1][sg]; sb = spread_map[2][sb]; } cp = ((sr << crpos) | (sg << cgpos) | (sb << cbpos) | (0xFF << capos)); XPutPixel (to, x, y, cp); } if (colors) free (colors); return to; } #endif /* REFORMAT_IMAGE_DATA */ /* Shrinks the XImage by a factor of two. We use this when mipmapping fails on large textures. */ static void halve_image (XImage *ximage, XRectangle *geom) { int w2 = ximage->width/2; int h2 = ximage->height/2; int x, y; XImage *ximage2; if (w2 <= 32 || h2 <= 32) /* let's not go crazy here, man. */ return; if (debug_p) fprintf (stderr, "%s: shrinking image %dx%d -> %dx%d\n", progname, ximage->width, ximage->height, w2, h2); ximage2 = (XImage *) calloc (1, sizeof (*ximage2)); *ximage2 = *ximage; ximage2->width = w2; ximage2->height = h2; ximage2->bytes_per_line = 0; ximage2->data = 0; XInitImage (ximage2); ximage2->data = (char *) calloc (h2, ximage2->bytes_per_line); if (!ximage2->data) { fprintf (stderr, "%s: out of memory (scaling %dx%d image to %dx%d)\n", progname, ximage->width, ximage->height, w2, h2); exit (1); } for (y = 0; y < h2; y++) for (x = 0; x < w2; x++) XPutPixel (ximage2, x, y, XGetPixel (ximage, x*2, y*2)); free (ximage->data); *ximage = *ximage2; ximage2->data = 0; XFree (ximage2); if (geom) { geom->x /= 2; geom->y /= 2; geom->width /= 2; geom->height /= 2; } } #ifdef REFORMAT_IMAGE_DATA /* Pulls the Pixmap bits from the server and returns an XImage in some format acceptable to OpenGL. */ static XImage * pixmap_to_gl_ximage (Screen *screen, Window window, Pixmap pixmap) { Display *dpy = DisplayOfScreen (screen); unsigned int width, height, depth; # ifdef HAVE_XSHM_EXTENSION Bool use_shm = get_boolean_resource (dpy, "useSHM", "Boolean"); XShmSegmentInfo shm_info; # endif /* HAVE_XSHM_EXTENSION */ XImage *server_ximage = 0; XImage *client_ximage = 0; { Window root; int x, y; unsigned int bw; XGetGeometry (dpy, pixmap, &root, &x, &y, &width, &height, &bw, &depth); } if (width < 5 || height < 5) /* something's gone wrong somewhere... */ return 0; /* Convert the server-side Pixmap to a client-side GL-ordered XImage. */ # ifdef HAVE_XSHM_EXTENSION if (use_shm) { Visual *visual = DefaultVisualOfScreen (screen); server_ximage = create_xshm_image (dpy, visual, depth, ZPixmap, 0, &shm_info, width, height); if (server_ximage) XShmGetImage (dpy, pixmap, server_ximage, 0, 0, ~0L); else use_shm = False; } # endif /* HAVE_XSHM_EXTENSION */ if (!server_ximage) server_ximage = XGetImage (dpy, pixmap, 0, 0, width, height, ~0L, ZPixmap); client_ximage = convert_ximage_to_rgba32 (screen, server_ximage); # ifdef HAVE_XSHM_EXTENSION if (use_shm) destroy_xshm_image (dpy, server_ximage, &shm_info); else # endif /* HAVE_XSHM_EXTENSION */ XDestroyImage (server_ximage); return client_ximage; } # else /* ! REFORMAT_IMAGE_DATA */ typedef struct { unsigned int depth, red_mask, green_mask, blue_mask; /* when this... */ GLint type, format; /* ...use this. */ } conversion_table; /* Abbreviate these so that the table entries all fit on one line... */ #define BYTE GL_UNSIGNED_BYTE #define BYTE_2_3_3_REV GL_UNSIGNED_BYTE_2_3_3_REV #define BYTE_3_3_2 GL_UNSIGNED_BYTE_3_3_2 #define INT_10_10_10_2 GL_UNSIGNED_INT_10_10_10_2 #define INT_2_10_10_10_REV GL_UNSIGNED_INT_2_10_10_10_REV #define INT_8_8_8_8 GL_UNSIGNED_INT_8_8_8_8 #define INT_8_8_8_8_REV GL_UNSIGNED_INT_8_8_8_8_REV #define SHORT_1_5_5_5_REV GL_UNSIGNED_SHORT_1_5_5_5_REV #define SHORT_4_4_4_4 GL_UNSIGNED_SHORT_4_4_4_4 #define SHORT_4_4_4_4_REV GL_UNSIGNED_SHORT_4_4_4_4_REV #define SHORT_5_5_5_1 GL_UNSIGNED_SHORT_5_5_5_1 #define SHORT_5_6_5 GL_UNSIGNED_SHORT_5_6_5 #define SHORT_5_6_5_REV GL_UNSIGNED_SHORT_5_6_5_REV static const conversion_table ctable[] = { { 8, 0x000000E0, 0x0000001C, 0x00000003, BYTE_3_3_2, GL_RGB }, { 8, 0x00000007, 0x00000038, 0x000000C0, BYTE_2_3_3_REV, GL_RGB }, { 16, 0x0000F800, 0x000007E0, 0x0000001F, SHORT_5_6_5, GL_RGB }, { 16, 0x0000001F, 0x000007E0, 0x0000F800, SHORT_5_6_5_REV, GL_RGB }, { 16, 0x0000F000, 0x00000F00, 0x000000F0, SHORT_4_4_4_4, GL_RGBA }, { 16, 0x000000F0, 0x00000F00, 0x0000F000, SHORT_4_4_4_4, GL_BGRA }, { 16, 0x0000000F, 0x000000F0, 0x00000F00, SHORT_4_4_4_4, GL_ABGR_EXT }, { 16, 0x0000000F, 0x000000F0, 0x00000F00, SHORT_4_4_4_4_REV, GL_RGBA }, { 16, 0x00000F00, 0x000000F0, 0x0000000F, SHORT_4_4_4_4_REV, GL_BGRA }, { 16, 0x0000F800, 0x000007C0, 0x0000003E, SHORT_5_5_5_1, GL_RGBA }, { 16, 0x0000003E, 0x000007C0, 0x0000F800, SHORT_5_5_5_1, GL_BGRA }, { 16, 0x00000001, 0x0000003E, 0x000007C0, SHORT_5_5_5_1, GL_ABGR_EXT }, { 16, 0x0000001F, 0x000003E0, 0x00007C00, SHORT_1_5_5_5_REV, GL_RGBA }, { 16, 0x00007C00, 0x000003E0, 0x0000001F, SHORT_1_5_5_5_REV, GL_BGRA }, { 32, 0xFF000000, 0x00FF0000, 0x0000FF00, INT_8_8_8_8, GL_RGBA }, { 32, 0x0000FF00, 0x00FF0000, 0xFF000000, INT_8_8_8_8, GL_BGRA }, { 32, 0x000000FF, 0x0000FF00, 0x00FF0000, INT_8_8_8_8, GL_ABGR_EXT }, { 32, 0x000000FF, 0x0000FF00, 0x00FF0000, INT_8_8_8_8_REV, GL_RGBA }, { 32, 0x00FF0000, 0x0000FF00, 0x000000FF, INT_8_8_8_8_REV, GL_BGRA }, { 32, 0xFFC00000, 0x003FF000, 0x00000FFC, INT_10_10_10_2, GL_RGBA }, { 32, 0x00000FFC, 0x003FF000, 0xFFC00000, INT_10_10_10_2, GL_BGRA }, { 32, 0x00000003, 0x00000FFC, 0x003FF000, INT_10_10_10_2, GL_ABGR_EXT }, { 32, 0x000003FF, 0x000FFC00, 0x3FF00000, INT_2_10_10_10_REV, GL_RGBA }, { 32, 0x3FF00000, 0x000FFC00, 0x000003FF, INT_2_10_10_10_REV, GL_BGRA }, { 24, 0x000000FF, 0x0000FF00, 0x00FF0000, BYTE, GL_RGB }, { 24, 0x00FF0000, 0x0000FF00, 0x000000FF, BYTE, GL_BGR }, }; /* Given an XImage, returns the GL settings to use its data as a texture. */ static void gl_settings_for_ximage (XImage *image, GLint *type_ret, GLint *format_ret, GLint *swap_ret) { int i; for (i = 0; i < countof(ctable); ++i) { if (image->bits_per_pixel == ctable[i].depth && image->red_mask == ctable[i].red_mask && image->green_mask == ctable[i].green_mask && image->blue_mask == ctable[i].blue_mask) { *type_ret = ctable[i].type; *format_ret = ctable[i].format; if (image->bits_per_pixel == 24) { /* don't know how to test this... */ *type_ret = (ctable[i].type == GL_RGB) ? GL_BGR : GL_RGB; *swap_ret = 0; } else { *swap_ret = !!(image->byte_order == MSBFirst) ^ !!bigendian(); } if (debug_p) { fprintf (stderr, "%s: using %s %s %d for %d %08lX %08lX %08lX\n", progname, (*format_ret == GL_RGB ? "RGB" : *format_ret == GL_BGR ? "BGR" : *format_ret == GL_RGBA ? "RGBA" : *format_ret == GL_BGRA ? "BGRA" : *format_ret == GL_ABGR_EXT ? "ABGR_EXT" : "???"), (*type_ret == BYTE ? "BYTE" : *type_ret == BYTE_3_3_2 ? "BYTE_3_3_2" : *type_ret == BYTE_2_3_3_REV ? "BYTE_2_3_3_REV" : *type_ret == INT_8_8_8_8 ? "INT_8_8_8_8" : *type_ret == INT_8_8_8_8_REV ? "INT_8_8_8_8_REV" : *type_ret == INT_10_10_10_2 ? "INT_10_10_10_2" : *type_ret == INT_2_10_10_10_REV ? "INT_2_10_10_10_REV": *type_ret == SHORT_4_4_4_4 ? "SHORT_4_4_4_4" : *type_ret == SHORT_4_4_4_4_REV ? "SHORT_4_4_4_4_REV" : *type_ret == SHORT_5_5_5_1 ? "SHORT_5_5_5_1" : *type_ret == SHORT_1_5_5_5_REV ? "SHORT_1_5_5_5_REV" : *type_ret == SHORT_5_6_5 ? "SHORT_5_6_5" : *type_ret == SHORT_5_6_5_REV ? "SHORT_5_6_5_REV" : "???"), *swap_ret, image->bits_per_pixel, image->red_mask, image->green_mask, image->blue_mask); } return; } } /* Unknown RGB fields? */ abort(); } #endif /* ! REFORMAT_IMAGE_DATA */ typedef struct { GLXContext glx_context; Pixmap pixmap; int pix_width, pix_height, pix_depth; int texid; Bool mipmap_p; double load_time; /* Used in async mode */ void (*callback) (const char *filename, XRectangle *geometry, int iw, int ih, int tw, int th, void *closure); void *closure; /* Used in sync mode */ char **filename_return; XRectangle *geometry_return; int *image_width_return; int *image_height_return; int *texture_width_return; int *texture_height_return; } img_closure; /* Returns the current time in seconds as a double. */ static double double_time (void) { struct timeval now; # ifdef GETTIMEOFDAY_TWO_ARGS struct timezone tzp; gettimeofday(&now, &tzp); # else gettimeofday(&now); # endif return (now.tv_sec + ((double) now.tv_usec * 0.000001)); } /* return the next larger power of 2. */ static int to_pow2 (int value) { int i = 1; while (i < value) i <<= 1; return i; } /* Loads the given XImage into GL's texture memory. The image may be of any size. If mipmap_p is true, then make mipmaps instead of just a single texture. Writes to stderr and returns False on error. */ static Bool ximage_to_texture (XImage *ximage, GLint type, GLint format, int *width_return, int *height_return, XRectangle *geometry, Bool mipmap_p) { int max_reduction = 7; int err_count = 0; GLenum err = 0; int orig_width = ximage->width; int orig_height = ximage->height; int tex_width = 0; int tex_height = 0; AGAIN: if (mipmap_p) { /* gluBuild2DMipmaps doesn't require textures to be a power of 2. */ tex_width = ximage->width; tex_height = ximage->height; if (debug_p) fprintf (stderr, "%s: mipmap %d x %d\n", progname, ximage->width, ximage->height); gluBuild2DMipmaps (GL_TEXTURE_2D, 3, ximage->width, ximage->height, format, type, ximage->data); err = glGetError(); } else { /* glTexImage2D() requires the texture sizes to be powers of 2. So first, create a texture of that size (but don't write any data into it.) */ tex_width = to_pow2 (ximage->width); tex_height = to_pow2 (ximage->height); if (debug_p) fprintf (stderr, "%s: texture %d x %d (%d x %d)\n", progname, ximage->width, ximage->height, tex_width, tex_height); glTexImage2D (GL_TEXTURE_2D, 0, GL_RGBA, tex_width, tex_height, 0, format, type, 0); err = glGetError(); /* Now load our non-power-of-2 image data into the existing texture. */ if (!err) { glTexSubImage2D (GL_TEXTURE_2D, 0, 0, 0, ximage->width, ximage->height, GL_RGBA, GL_UNSIGNED_BYTE, ximage->data); err = glGetError(); } } if (err) { char buf[100]; const char *s = (char *) gluErrorString (err); if (!s || !*s) { sprintf (buf, "unknown error %d", (int) err); s = buf; } while (glGetError() != GL_NO_ERROR) ; /* clear any lingering errors */ if (++err_count > max_reduction) { fprintf (stderr, "\n" "%s: %dx%d texture failed, even after reducing to %dx%d:\n" "%s: The error was: \"%s\".\n" "%s: probably this means " "\"your video card is worthless and weak\"?\n\n", progname, orig_width, orig_height, ximage->width, ximage->height, progname, s, progname); return False; } else { if (debug_p) fprintf (stderr, "%s: mipmap error (%dx%d): %s\n", progname, ximage->width, ximage->height, s); halve_image (ximage, geometry); goto AGAIN; } } if (width_return) *width_return = tex_width; if (height_return) *height_return = tex_height; return True; } static void load_texture_async_cb (Screen *screen, Window window, Drawable drawable, const char *name, XRectangle *geometry, void *closure); /* Grabs an image of the desktop (or another random image file) and loads the image into GL's texture memory. When the callback is called, the image data will have been loaded into texture number `texid' (via glBindTexture.) If an error occurred, width/height will be 0. */ void load_texture_async (Screen *screen, Window window, GLXContext glx_context, int desired_width, int desired_height, Bool mipmap_p, GLuint texid, void (*callback) (const char *filename, XRectangle *geometry, int image_width, int image_height, int texture_width, int texture_height, void *closure), void *closure) { Display *dpy = DisplayOfScreen (screen); XWindowAttributes xgwa; img_closure *data = (img_closure *) calloc (1, sizeof(*data)); if (debug_p) data->load_time = double_time(); data->texid = texid; data->mipmap_p = mipmap_p; data->glx_context = glx_context; data->callback = callback; data->closure = closure; XGetWindowAttributes (dpy, window, &xgwa); data->pix_width = xgwa.width; data->pix_height = xgwa.height; data->pix_depth = xgwa.depth; if (desired_width && desired_width < xgwa.width) data->pix_width = desired_width; if (desired_height && desired_height < xgwa.height) data->pix_height = desired_height; data->pixmap = XCreatePixmap (dpy, window, data->pix_width, data->pix_height, data->pix_depth); load_image_async (screen, window, data->pixmap, load_texture_async_cb, data); } /* Once we have an XImage, this loads it into GL. This is used in both synchronous and asynchronous mode. */ static void load_texture_async_cb (Screen *screen, Window window, Drawable drawable, const char *name, XRectangle *geometry, void *closure) { Display *dpy = DisplayOfScreen (screen); Bool ok; XImage *ximage; GLint type, format; int iw=0, ih=0, tw=0, th=0; double cvt_time=0, tex_time=0, done_time=0; img_closure *data = (img_closure *) closure; /* copy closure data to stack and free the original before running cb */ img_closure dd = *data; memset (data, 0, sizeof (*data)); free (data); data = 0; if (dd.glx_context) glXMakeCurrent (dpy, window, dd.glx_context); if (geometry->width <= 0 || geometry->height <= 0) { /* This can happen if an old version of xscreensaver-getimage is installed. Or if we have no image (checkerboard). */ geometry->x = 0; geometry->y = 0; geometry->width = dd.pix_width; geometry->height = dd.pix_height; } if (geometry->width <= 0 || geometry->height <= 0) abort(); if (debug_p) cvt_time = double_time(); # ifdef REFORMAT_IMAGE_DATA ximage = pixmap_to_gl_ximage (screen, window, dd.pixmap); format = GL_RGBA; type = GL_UNSIGNED_BYTE; #else /* ! REFORMAT_IMAGE_DATA */ { Visual *visual = DefaultVisualOfScreen (screen); GLint swap; ximage = XCreateImage (dpy, visual, dd.pix_depth, ZPixmap, 0, 0, dd.pix_width, dd.pix_height, 32, 0); /* Note: height+2 in "to" to be to work around an array bounds overrun in gluBuild2DMipmaps / gluScaleImage. */ ximage->data = (char *) calloc (ximage->height+2, ximage->bytes_per_line); if (!ximage->data || !XGetSubImage (dpy, dd.pixmap, 0, 0, ximage->width, ximage->height, ~0L, ximage->format, ximage, 0, 0)) { XDestroyImage (ximage); ximage = 0; } gl_settings_for_ximage (ximage, &type, &format, &swap); glPixelStorei (GL_UNPACK_SWAP_BYTES, !swap); } #endif /* REFORMAT_IMAGE_DATA */ XFreePixmap (dpy, dd.pixmap); dd.pixmap = 0; if (debug_p) tex_time = double_time(); if (! ximage) ok = False; else { iw = ximage->width; ih = ximage->height; if (dd.texid != -1) glBindTexture (GL_TEXTURE_2D, dd.texid); glPixelStorei (GL_UNPACK_ALIGNMENT, ximage->bitmap_pad / 8); ok = ximage_to_texture (ximage, type, format, &tw, &th, geometry, dd.mipmap_p); if (ok) { iw = ximage->width; /* in case the image was shrunk */ ih = ximage->height; } } if (ximage) XDestroyImage (ximage); if (! ok) iw = ih = tw = th = 0; if (debug_p) done_time = double_time(); if (debug_p) fprintf (stderr, /* prints: A + B + C = D A = file I/O time (happens in background) B = time to pull bits from server (this process) C = time to convert bits to GL textures (this process) D = total elapsed time from "want image" to "see image" B+C is responsible for any frame-rate glitches. */ "%s: loading elapsed: %.2f + %.2f + %.2f = %.2f sec\n", progname, cvt_time - dd.load_time, tex_time - cvt_time, done_time - tex_time, done_time - dd.load_time); if (dd.callback) /* asynchronous mode */ dd.callback (name, geometry, iw, ih, tw, th, dd.closure); else { /* synchronous mode */ if (dd.filename_return) *dd.filename_return = (char *) name; if (dd.geometry_return) *dd.geometry_return = *geometry; if (dd.image_width_return) *dd.image_width_return = iw; if (dd.image_height_return) *dd.image_height_return = ih; if (dd.texture_width_return) *dd.texture_width_return = tw; if (dd.texture_height_return) *dd.texture_height_return = th; } } xscreensaver-5.36/hacks/glx/glsnake.c000664 000767 000024 00000275373 12710313211 017623 0ustar00jwzstaff000000 000000 /* glsnake.c - OpenGL imitation of Rubik's Snake * * (c) 2001-2005 Jamie Wilkinson * (c) 2001-2003 Andrew Bennetts * (c) 2001-2003 Peter Aylett * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ #ifdef HAVE_CONFIG_H # include "config.h" #endif /* HAVE_GLUT defined if we're building a standalone glsnake, * and not defined if we're building as an xscreensaver hack */ #ifdef HAVE_GLUT # include #else # ifdef HAVE_JWXYZ # define HAVE_GETTIMEOFDAY # else # include # include # endif #endif # ifdef HAVE_ANDROID # include #endif #ifdef HAVE_JWZGLES # include "jwzgles.h" #endif /* HAVE_JWZGLES */ #ifdef STANDALONE # include "xlockmoreI.h" #endif #include #include #include #include /* angles */ #define ZERO 0.0 #define LEFT 90.0 #define PIN 180.0 #define RIGHT 270.0 #ifdef HAVE_GETTIMEOFDAY # ifdef GETTIMEOFDAY_TWO_ARGS # include # include typedef struct timeval snaketime; # define GETSECS(t) ((t).tv_sec) # define GETMSECS(t) ((t).tv_usec/1000) # else /* !GETTIMEOFDAY_TWO_ARGS */ # include # include typedef struct timeval snaketime; # define GETSECS(t) ((t).tv_sec) # define GETMSECS(t) ((t).tv_usec/1000) # endif /* GETTIMEOFDAY_TWO_ARGS */ #else /* !HAVE_GETTIMEOFDAY */ # ifdef HAVE_FTIME # include typedef struct timeb snaketime; # define GETSECS(t) ((long)(t).time) # define GETMSECS(t) ((t).millitm/1000) # endif /* HAVE_FTIME */ #endif /* HAVE_GETTIMEOFDAY */ #include #ifndef M_SQRT1_2 /* Win32 doesn't have this constant */ #define M_SQRT1_2 0.70710678118654752440084436210485 #endif #define NODE_COUNT 24 #ifdef HAVE_GLUT #define DEF_YANGVEL 0.10 #define DEF_ZANGVEL 0.14 #define DEF_EXPLODE 0.03 #define DEF_ANGVEL 1.0 #define DEF_STATICTIME 5000 #define DEF_ALTCOLOUR 0 #define DEF_TITLES 0 #define DEF_INTERACTIVE 0 #define DEF_ZOOM 25.0 #define DEF_WIREFRAME 0 #define DEF_TRANSPARENT 1 #else /* xscreensaver options doobies prefer strings */ #define DEF_YANGVEL "0.10" #define DEF_ZANGVEL "0.14" #define DEF_EXPLODE "0.03" #define DEF_ANGVEL "1.0" #define DEF_STATICTIME "5000" #define DEF_ALTCOLOUR "False" #define DEF_TITLES "False" #define DEF_INTERACTIVE "False" #define DEF_ZOOM "25.0" #define DEF_WIREFRAME "False" #define DEF_TRANSPARENT "True" #endif /* static variables */ static GLfloat explode; static long statictime; static GLfloat yspin = 60.0; static GLfloat zspin = -45.0; static GLfloat yangvel; static GLfloat zangvel; static Bool altcolour; static Bool titles; static Bool interactive; static Bool wireframe; static Bool transparent; static GLfloat zoom; static GLfloat angvel; #ifndef HAVE_GLUT #define glsnake_init init_glsnake #define glsnake_display draw_glsnake #define glsnake_reshape reshape_glsnake #define refresh_glsnake 0 #define release_glsnake 0 #define glsnake_handle_event 0 /* xscreensaver defaults */ #define DEFAULTS "*delay: 30000 \n" \ "*count: 30 \n" \ "*showFPS: False \n" \ "*suppressRotationAnimation: True\n" \ "*labelfont: -*-helvetica-medium-r-normal-*-*-180-*-*-*-*-*-*\n" \ #undef countof #define countof(x) (sizeof((x))/sizeof((*x))) #include "xlockmore.h" #include "texfont.h" static XrmOptionDescRec opts[] = { { "-explode", ".explode", XrmoptionSepArg, DEF_EXPLODE }, { "-angvel", ".angvel", XrmoptionSepArg, DEF_ANGVEL }, { "-statictime", ".statictime", XrmoptionSepArg, DEF_STATICTIME }, { "-yangvel", ".yangvel", XrmoptionSepArg, DEF_YANGVEL }, { "-zangvel", ".zangvel", XrmoptionSepArg, DEF_ZANGVEL }, { "-altcolour", ".altcolour", XrmoptionNoArg, "True" }, { "-no-altcolour", ".altcolour", XrmoptionNoArg, "False" }, { "-titles", ".titles", XrmoptionNoArg, "True" }, { "-no-titles", ".titles", XrmoptionNoArg, "False" }, { "-zoom", ".zoom", XrmoptionSepArg, DEF_ZOOM }, { "-wireframe", ".wireframe", XrmoptionNoArg, "true" }, { "-no-wireframe", ".wireframe", XrmoptionNoArg, "false" }, { "-transparent", ".transparent", XrmoptionNoArg, "true" }, { "-no-transparent", ".transparent", XrmoptionNoArg, "false" }, }; static argtype vars[] = { {&explode, "explode", "Explode", DEF_EXPLODE, t_Float}, {&angvel, "angvel", "Angular Velocity", DEF_ANGVEL, t_Float}, {&statictime, "statictime", "Static Time", DEF_STATICTIME, t_Int}, {&yangvel, "yangvel", "Angular Velocity about Y axis", DEF_YANGVEL, t_Float}, {&zangvel, "zangvel", "Angular Velocity about X axis", DEF_ZANGVEL, t_Float}, {&interactive, "interactive", "Interactive", DEF_INTERACTIVE, t_Bool}, {&altcolour, "altcolour", "Alternate Colour Scheme", DEF_ALTCOLOUR, t_Bool}, {&titles, "titles", "Titles", DEF_TITLES, t_Bool}, {&zoom, "zoom", "Zoom", DEF_ZOOM, t_Float}, {&wireframe, "wireframe", "Wireframe", DEF_WIREFRAME, t_Bool}, {&transparent, "transparent", "Transparent!", DEF_TRANSPARENT, t_Bool}, }; ENTRYPOINT ModeSpecOpt glsnake_opts = {countof(opts), opts, countof(vars), vars, NULL}; #endif struct model_s { const char * name; float node[NODE_COUNT]; }; struct glsnake_cfg { #ifndef HAVE_GLUT GLXContext * glx_context; texture_font_data *font_data; #else /* font list number */ int font; #endif /* window id */ int window; /* is a morph in progress? */ int morphing; /* has the model been paused? */ int paused; /* snake metrics */ int is_cyclic; int is_legal; float last_turn; int debug; /* the shape of the model */ float node[NODE_COUNT]; /* currently selected node for interactive mode */ int selected; /* models */ unsigned int prev_model; unsigned int next_model; /* model morphing */ int new_morph; /* colours */ float colour[2][4]; int next_colour; int prev_colour; /* timing variables */ snaketime last_iteration; snaketime last_morph; /* window size */ int width, height; int old_width, old_height; /* the id of the display lists for drawing a node */ GLuint node_solid, node_wire; int node_polys; /* is the window fullscreen? */ int fullscreen; }; #define COLOUR_CYCLIC 0 #define COLOUR_ACYCLIC 1 #define COLOUR_INVALID 2 #define COLOUR_AUTHENTIC 3 #define COLOUR_ORIGLOGO 4 static const float colour[][2][4] = { /* cyclic - green */ { { 0.4, 0.8, 0.2, 0.6 }, { 1.0, 1.0, 1.0, 0.6 } }, /* acyclic - blue */ { { 0.3, 0.1, 0.9, 0.6 }, { 1.0, 1.0, 1.0, 0.6 } }, /* invalid - grey */ { { 0.3, 0.1, 0.9, 0.6 }, { 1.0, 1.0, 1.0, 0.6 } }, /* authentic - purple and green */ { { 0.38, 0.0, 0.55, 0.7 }, { 0.0, 0.5, 0.34, 0.7 } }, /* old "authentic" colours from the logo */ { { 171/255.0, 0, 1.0, 1.0 }, { 46/255.0, 205/255.0, 227/255.0, 1.0 } } }; static const struct model_s model[] = { #define STRAIGHT_MODEL 0 { "straight", { ZERO, ZERO, ZERO, ZERO, ZERO, ZERO, ZERO, ZERO, ZERO, ZERO, ZERO, ZERO, ZERO, ZERO, ZERO, ZERO, ZERO, ZERO, ZERO, ZERO, ZERO, ZERO, ZERO, ZERO } }, /* the models in the Rubik's snake manual */ { "ball", { RIGHT, RIGHT, LEFT, LEFT, RIGHT, LEFT, RIGHT, RIGHT, LEFT, RIGHT, LEFT, LEFT, RIGHT, RIGHT, LEFT, LEFT, RIGHT, LEFT, RIGHT, RIGHT, LEFT, RIGHT, LEFT, ZERO } }, #define START_MODEL 2 { "snow", { RIGHT, RIGHT, RIGHT, RIGHT, LEFT, LEFT, LEFT, LEFT, RIGHT, RIGHT, RIGHT, RIGHT, LEFT, LEFT, LEFT, LEFT, RIGHT, RIGHT, RIGHT, RIGHT, LEFT, LEFT, LEFT, ZERO } }, { "propellor", { ZERO, ZERO, ZERO, RIGHT, LEFT, RIGHT, ZERO, LEFT, ZERO, ZERO, ZERO, RIGHT, LEFT, RIGHT, ZERO, LEFT, ZERO, ZERO, ZERO, RIGHT, LEFT, RIGHT, ZERO, LEFT } }, { "flamingo", { ZERO, PIN, ZERO, ZERO, ZERO, ZERO, ZERO, PIN, RIGHT, RIGHT, PIN, RIGHT, LEFT, PIN, LEFT, RIGHT, PIN, RIGHT, RIGHT, ZERO, ZERO, ZERO, PIN, ZERO } }, { "cat", { ZERO, PIN, PIN, ZERO, PIN, PIN, ZERO, RIGHT, ZERO, PIN, PIN, ZERO, PIN, PIN, ZERO, PIN, PIN, ZERO, ZERO, ZERO, ZERO, ZERO, ZERO, ZERO } }, { "rooster", { ZERO, ZERO, PIN, PIN, ZERO, LEFT, ZERO, LEFT, RIGHT, PIN, RIGHT, ZERO, PIN, PIN, ZERO, RIGHT, PIN, RIGHT, LEFT, ZERO, LEFT, ZERO, PIN, ZERO } }, /* These models were taken from Andrew and Peter's original snake.c * as well as some newer ones made up by Jamie, Andrew and Peter. */ { "half balls", { LEFT, LEFT, RIGHT, LEFT, RIGHT, RIGHT, LEFT, RIGHT, LEFT, LEFT, LEFT, LEFT, LEFT, LEFT, RIGHT, LEFT, RIGHT, RIGHT, LEFT, RIGHT, LEFT, LEFT, LEFT, ZERO } }, { "zigzag1", { RIGHT, RIGHT, RIGHT, LEFT, LEFT, LEFT, RIGHT, RIGHT, RIGHT, LEFT, LEFT, LEFT, RIGHT, RIGHT, RIGHT, LEFT, LEFT, LEFT, RIGHT, RIGHT, RIGHT, LEFT, LEFT, ZERO } }, { "zigzag2", { PIN, ZERO, PIN, ZERO, PIN, ZERO, PIN, ZERO, PIN, ZERO, PIN, ZERO, PIN, ZERO, PIN, ZERO, PIN, ZERO, PIN, ZERO, PIN, ZERO, PIN, ZERO } }, { "zigzag3", { PIN, LEFT, PIN, LEFT, PIN, LEFT, PIN, LEFT, PIN, LEFT, PIN, LEFT, PIN, LEFT, PIN, LEFT, PIN, LEFT, PIN, LEFT, PIN, LEFT, PIN, ZERO } }, { "caterpillar", { RIGHT, RIGHT, PIN, LEFT, LEFT, PIN, RIGHT, RIGHT, PIN, LEFT, LEFT, PIN, RIGHT, RIGHT, PIN, LEFT, LEFT, PIN, RIGHT, RIGHT, PIN, LEFT, LEFT, ZERO } }, { "bow", { RIGHT, LEFT, RIGHT, RIGHT, RIGHT, LEFT, LEFT, LEFT, RIGHT, LEFT, RIGHT, RIGHT, RIGHT, LEFT, LEFT, LEFT, RIGHT, LEFT, RIGHT, RIGHT, RIGHT, LEFT, LEFT, ZERO } }, { "turtle", { ZERO, RIGHT, LEFT, ZERO, ZERO, RIGHT, LEFT, PIN, RIGHT, RIGHT, LEFT, RIGHT, LEFT, LEFT, PIN, LEFT, LEFT, LEFT, RIGHT, LEFT, RIGHT, RIGHT, RIGHT, ZERO } }, { "basket", { RIGHT, PIN, ZERO, ZERO, PIN, LEFT, ZERO, LEFT, LEFT, ZERO, LEFT, PIN, ZERO, ZERO, PIN, RIGHT, PIN, LEFT, PIN, ZERO, ZERO, PIN, LEFT, ZERO } }, { "thing", { PIN, RIGHT, LEFT, RIGHT, RIGHT, LEFT, PIN, LEFT, RIGHT, LEFT, LEFT, RIGHT, PIN, RIGHT, LEFT, RIGHT, RIGHT, LEFT, PIN, LEFT, RIGHT, LEFT, LEFT, ZERO } }, { "hexagon", { ZERO, ZERO, ZERO, ZERO, LEFT, ZERO, ZERO, RIGHT, ZERO, ZERO, ZERO, ZERO, LEFT, ZERO, ZERO, RIGHT, ZERO, ZERO, ZERO, ZERO, LEFT, ZERO, ZERO, RIGHT } }, { "tri1", { ZERO, ZERO, LEFT, RIGHT, ZERO, LEFT, ZERO, RIGHT, ZERO, ZERO, LEFT, RIGHT, ZERO, LEFT, ZERO, RIGHT, ZERO, ZERO, LEFT, RIGHT, ZERO, LEFT, ZERO, RIGHT } }, { "triangle", { ZERO, ZERO, ZERO, ZERO, ZERO, ZERO, LEFT, RIGHT, ZERO, ZERO, ZERO, ZERO, ZERO, ZERO, LEFT, RIGHT, ZERO, ZERO, ZERO, ZERO, ZERO, ZERO, LEFT, RIGHT } }, { "flower", { ZERO, LEFT, PIN, RIGHT, RIGHT, PIN, ZERO, LEFT, PIN, RIGHT, RIGHT, PIN, ZERO, LEFT, PIN, RIGHT, RIGHT, PIN, ZERO, LEFT, PIN, RIGHT, RIGHT, PIN } }, { "crucifix", { ZERO, PIN, PIN, ZERO, PIN, ZERO, PIN, PIN, ZERO, PIN, ZERO, PIN, PIN, ZERO, PIN, ZERO, ZERO, ZERO, PIN, PIN, ZERO, ZERO, ZERO, PIN } }, { "kayak", { PIN, RIGHT, LEFT, PIN, LEFT, PIN, ZERO, ZERO, RIGHT, PIN, LEFT, ZERO, ZERO, ZERO, ZERO, ZERO, ZERO, RIGHT, PIN, LEFT, ZERO, ZERO, PIN, RIGHT } }, { "bird", { ZERO, ZERO, ZERO, ZERO, RIGHT, RIGHT, ZERO, LEFT, PIN, RIGHT, ZERO, RIGHT, ZERO, RIGHT, ZERO, RIGHT, PIN, LEFT, ZERO, RIGHT, LEFT, ZERO, PIN, ZERO } }, { "seal", { RIGHT, LEFT, LEFT, PIN, RIGHT, LEFT, ZERO, PIN, PIN, ZERO, LEFT, ZERO, LEFT, PIN, RIGHT, ZERO, LEFT, LEFT, LEFT, PIN, RIGHT, RIGHT, LEFT, ZERO } }, { "dog", { ZERO, ZERO, ZERO, ZERO, PIN, PIN, ZERO, PIN, ZERO, ZERO, PIN, ZERO, PIN, PIN, ZERO, ZERO, ZERO, PIN, ZERO, PIN, PIN, ZERO, PIN, ZERO } }, { "frog", { RIGHT, RIGHT, LEFT, LEFT, RIGHT, PIN, RIGHT, PIN, LEFT, PIN, RIGHT, ZERO, LEFT, ZERO, LEFT, PIN, RIGHT, ZERO, LEFT, LEFT, RIGHT, LEFT, LEFT, ZERO } }, { "quavers", { LEFT, LEFT, RIGHT, LEFT, RIGHT, RIGHT, ZERO, ZERO, ZERO, RIGHT, ZERO, ZERO, LEFT, RIGHT, ZERO, ZERO, ZERO, LEFT, LEFT, RIGHT, LEFT, RIGHT, RIGHT, ZERO } }, { "fly", { LEFT, LEFT, RIGHT, LEFT, RIGHT, RIGHT, ZERO, PIN, ZERO, ZERO, LEFT, PIN, RIGHT, ZERO, ZERO, PIN, ZERO, LEFT, LEFT, RIGHT, LEFT, RIGHT, RIGHT, ZERO } }, { "puppy", { ZERO, PIN, ZERO, PIN, PIN, ZERO, PIN, PIN, ZERO, ZERO, ZERO, RIGHT, RIGHT, PIN, RIGHT, LEFT, PIN, LEFT, RIGHT, PIN, RIGHT, LEFT, ZERO, ZERO } }, { "stars", { LEFT, RIGHT, PIN, RIGHT, LEFT, PIN, LEFT, RIGHT, PIN, RIGHT, ZERO, ZERO, ZERO, RIGHT, PIN, RIGHT, LEFT, PIN, LEFT, RIGHT, PIN, RIGHT, LEFT, ZERO } }, { "mountains", { RIGHT, PIN, RIGHT, PIN, RIGHT, PIN, LEFT, PIN, LEFT, PIN, LEFT, PIN, RIGHT, PIN, RIGHT, PIN, RIGHT, PIN, LEFT, PIN, LEFT, PIN, LEFT, PIN } }, { "quad1", { RIGHT, PIN, RIGHT, RIGHT, RIGHT, PIN, LEFT, LEFT, LEFT, PIN, LEFT, PIN, RIGHT, PIN, RIGHT, RIGHT, RIGHT, PIN, LEFT, LEFT, LEFT, PIN, LEFT, PIN } }, { "quad2", { ZERO, PIN, RIGHT, RIGHT, RIGHT, PIN, LEFT, LEFT, LEFT, PIN, ZERO, PIN, ZERO, PIN, RIGHT, RIGHT, RIGHT, PIN, LEFT, LEFT, LEFT, PIN, ZERO, PIN } }, { "glasses", { ZERO, PIN, ZERO, RIGHT, RIGHT, PIN, LEFT, LEFT, ZERO, PIN, ZERO, PIN, ZERO, PIN, ZERO, RIGHT, RIGHT, PIN, LEFT, LEFT, ZERO, PIN, ZERO, PIN } }, { "em", { ZERO, PIN, ZERO, ZERO, RIGHT, PIN, LEFT, ZERO, ZERO, PIN, ZERO, PIN, ZERO, PIN, ZERO, ZERO, RIGHT, PIN, LEFT, ZERO, ZERO, PIN, ZERO, PIN } }, { "quad3", { ZERO, RIGHT, ZERO, ZERO, RIGHT, PIN, LEFT, ZERO, ZERO, LEFT, ZERO, PIN, ZERO, RIGHT, ZERO, ZERO, RIGHT, PIN, LEFT, ZERO, ZERO, LEFT, ZERO, PIN } }, { "vee", { ZERO, ZERO, ZERO, ZERO, RIGHT, PIN, LEFT, ZERO, ZERO, ZERO, ZERO, PIN, ZERO, ZERO, ZERO, ZERO, RIGHT, PIN, LEFT, ZERO, ZERO, ZERO, ZERO, PIN } }, { "square", { ZERO, ZERO, ZERO, RIGHT, RIGHT, PIN, LEFT, LEFT, ZERO, ZERO, ZERO, PIN, ZERO, ZERO, ZERO, RIGHT, RIGHT, PIN, LEFT, LEFT, ZERO, ZERO, ZERO, PIN } }, { "eagle", { RIGHT, ZERO, ZERO, RIGHT, RIGHT, PIN, LEFT, LEFT, ZERO, ZERO, LEFT, PIN, RIGHT, ZERO, ZERO, RIGHT, RIGHT, PIN, LEFT, LEFT, ZERO, ZERO, LEFT, PIN } }, { "volcano", { RIGHT, ZERO, LEFT, RIGHT, RIGHT, PIN, LEFT, LEFT, RIGHT, ZERO, LEFT, PIN, RIGHT, ZERO, LEFT, RIGHT, RIGHT, PIN, LEFT, LEFT, RIGHT, ZERO, LEFT, PIN } }, { "saddle", { RIGHT, ZERO, LEFT, ZERO, RIGHT, PIN, LEFT, ZERO, RIGHT, ZERO, LEFT, PIN, RIGHT, ZERO, LEFT, ZERO, RIGHT, PIN, LEFT, ZERO, RIGHT, ZERO, LEFT, PIN } }, { "c3d", { ZERO, ZERO, RIGHT, ZERO, ZERO, PIN, ZERO, ZERO, LEFT, ZERO, ZERO, PIN, ZERO, ZERO, RIGHT, ZERO, ZERO, PIN, ZERO, ZERO, LEFT, ZERO, ZERO, PIN } }, { "block", { ZERO, ZERO, PIN, PIN, ZERO, RIGHT, PIN, LEFT, PIN, RIGHT, PIN, RIGHT, PIN, LEFT, PIN, RIGHT, ZERO, ZERO, PIN, ZERO, ZERO, LEFT, PIN, RIGHT } }, { "duck", { LEFT, PIN, LEFT, PIN, ZERO, PIN, PIN, ZERO, PIN, ZERO, LEFT, PIN, RIGHT, ZERO, PIN, ZERO, PIN, PIN, ZERO, ZERO, LEFT, PIN, LEFT, ZERO } }, { "prayer", { RIGHT, RIGHT, RIGHT, LEFT, RIGHT, LEFT, LEFT, ZERO, ZERO, ZERO, RIGHT, PIN, LEFT, ZERO, ZERO, ZERO, RIGHT, RIGHT, LEFT, RIGHT, LEFT, LEFT, LEFT, PIN } }, { "giraffe", { ZERO, ZERO, ZERO, RIGHT, PIN, LEFT, ZERO, ZERO, ZERO, RIGHT, RIGHT, RIGHT, PIN, LEFT, RIGHT, ZERO, PIN, ZERO, LEFT, RIGHT, PIN, LEFT, LEFT, LEFT } }, { "tie fighter", { PIN, LEFT, RIGHT, LEFT, LEFT, PIN, RIGHT, ZERO, RIGHT, LEFT, ZERO, PIN, LEFT, LEFT, RIGHT, RIGHT, RIGHT, PIN, LEFT, ZERO, LEFT, RIGHT, ZERO, ZERO } }, { "Strong Arms", { PIN, PIN, ZERO, ZERO, PIN, ZERO, ZERO, RIGHT, ZERO, RIGHT, RIGHT, PIN, RIGHT, RIGHT, ZERO, RIGHT, ZERO, ZERO, PIN, ZERO, ZERO, PIN, PIN, ZERO } }, /* the following modesl were created during the slug/compsoc codefest * febrray 2003 */ { "cool looking gegl", { PIN, PIN, ZERO, ZERO, RIGHT, ZERO, ZERO, PIN, PIN, ZERO, LEFT, ZERO, ZERO, PIN, ZERO, PIN, PIN, ZERO, LEFT, RIGHT, PIN, ZERO, ZERO, ZERO } }, { "knuckledusters", { ZERO, ZERO, ZERO, ZERO, PIN, RIGHT, ZERO, PIN, PIN, ZERO, PIN, PIN, ZERO, RIGHT, RIGHT, ZERO, PIN, PIN, ZERO, PIN, PIN, ZERO, RIGHT, ZERO } }, { "k's turd", { RIGHT, RIGHT, PIN, RIGHT, LEFT, RIGHT, PIN, RIGHT, LEFT, RIGHT, PIN, RIGHT, LEFT, RIGHT, PIN, RIGHT, LEFT, RIGHT, PIN, RIGHT, LEFT, RIGHT, PIN, ZERO } }, { "lightsabre", { ZERO, ZERO, ZERO, ZERO, ZERO, PIN, PIN, ZERO, ZERO, ZERO, ZERO, ZERO, ZERO, ZERO, ZERO, ZERO, ZERO, ZERO, ZERO, ZERO, ZERO, ZERO, ZERO, ZERO } }, { "not a stairway", { LEFT, ZERO, RIGHT, LEFT, RIGHT, ZERO, LEFT, RIGHT, LEFT, ZERO, RIGHT, LEFT, RIGHT, ZERO, LEFT, RIGHT, LEFT, ZERO, RIGHT, LEFT, RIGHT, ZERO, LEFT, ZERO } }, { "not very good (but accurate) gegl", { ZERO, PIN, PIN, ZERO, ZERO, ZERO, PIN, PIN, ZERO, LEFT, ZERO, PIN, PIN, ZERO, RIGHT, LEFT, ZERO, PIN, ZERO, PIN, PIN, ZERO, PIN, ZERO } }, { "box", { ZERO, ZERO, ZERO, ZERO, PIN, ZERO, ZERO, ZERO, ZERO, ZERO, ZERO, PIN, ZERO, ZERO, ZERO, ZERO, PIN, ZERO, ZERO, ZERO, ZERO, ZERO, ZERO, ZERO } }, { "kissy box", { PIN, ZERO, ZERO, ZERO, PIN, ZERO, ZERO, ZERO, ZERO, ZERO, ZERO, PIN, ZERO, ZERO, ZERO, ZERO, PIN, ZERO, ZERO, ZERO, ZERO, ZERO, PIN, ZERO } }, { "erect penis", /* thanks benno */ { PIN, ZERO, PIN, PIN, ZERO, ZERO, PIN, ZERO, ZERO, ZERO, PIN, PIN, ZERO, ZERO, ZERO, RIGHT, ZERO, ZERO, ZERO, ZERO, ZERO, ZERO, ZERO, ZERO } }, { "flaccid penis", { PIN, ZERO, PIN, PIN, ZERO, ZERO, PIN, ZERO, ZERO, ZERO, PIN, PIN, ZERO, ZERO, ZERO, RIGHT, PIN, ZERO, ZERO, ZERO, ZERO, ZERO, ZERO, ZERO } }, { "vagina", { RIGHT, ZERO, ZERO, ZERO, RIGHT, ZERO, ZERO, PIN, ZERO, ZERO, LEFT, ZERO, ZERO, ZERO, LEFT, ZERO, LEFT, PIN, LEFT, PIN, RIGHT, PIN, RIGHT, ZERO } }, { "mask", { ZERO, RIGHT, LEFT, PIN, RIGHT, RIGHT, PIN, ZERO, ZERO, PIN, ZERO, ZERO, PIN, ZERO, PIN, ZERO, PIN, ZERO, ZERO, PIN, ZERO, ZERO, ZERO, ZERO } }, { "poles or columns or something", { LEFT, RIGHT, LEFT, ZERO, ZERO, ZERO, PIN, PIN, ZERO, ZERO, ZERO, LEFT, RIGHT, LEFT, ZERO, ZERO, ZERO, PIN, PIN, ZERO, ZERO, ZERO, LEFT, ZERO } }, { "crooked v", { ZERO, LEFT, ZERO, ZERO, ZERO, ZERO, PIN, PIN, ZERO, ZERO, ZERO, LEFT, ZERO, LEFT, ZERO, ZERO, ZERO, PIN, PIN, ZERO, ZERO, ZERO, ZERO, ZERO } }, { "dog leg", { ZERO, LEFT, ZERO, ZERO, ZERO, ZERO, PIN, PIN, ZERO, ZERO, ZERO, LEFT, ZERO, RIGHT, ZERO, ZERO, ZERO, ZERO, PIN, PIN, ZERO, ZERO, ZERO, ZERO } }, { "scrubby", { ZERO, ZERO, ZERO, ZERO, ZERO, LEFT, ZERO, ZERO, ZERO, ZERO, LEFT, RIGHT, ZERO, ZERO, ZERO, ZERO, LEFT, RIGHT, ZERO, ZERO, LEFT, PIN, ZERO, ZERO } }, { "voltron's eyes", { ZERO, ZERO, PIN, RIGHT, ZERO, LEFT, ZERO, ZERO, RIGHT, ZERO, LEFT, PIN, ZERO, ZERO, PIN, ZERO, LEFT, ZERO, RIGHT, LEFT, ZERO, RIGHT, ZERO, ZERO } }, { "flying toaster", { PIN, ZERO, ZERO, PIN, PIN, ZERO, RIGHT, ZERO, PIN, PIN, ZERO, RIGHT, ZERO, PIN, PIN, ZERO, RIGHT, ZERO, PIN, PIN, ZERO, ZERO, PIN, ZERO } }, { "dubbya", { PIN, ZERO, ZERO, PIN, PIN, ZERO, RIGHT, ZERO, PIN, PIN, ZERO, ZERO, ZERO, PIN, PIN, ZERO, RIGHT, ZERO, PIN, PIN, ZERO, ZERO, PIN, ZERO } }, { "tap handle", { PIN, ZERO, ZERO, PIN, PIN, ZERO, RIGHT, ZERO, PIN, PIN, ZERO, LEFT, ZERO, PIN, PIN, ZERO, RIGHT, ZERO, PIN, PIN, ZERO, ZERO, PIN, ZERO } }, { "wingnut", { PIN, ZERO, ZERO, PIN, PIN, ZERO, RIGHT, ZERO, PIN, PIN, ZERO, PIN, ZERO, PIN, PIN, ZERO, RIGHT, ZERO, PIN, PIN, ZERO, ZERO, PIN, ZERO } }, { "tight twist", { RIGHT, ZERO, ZERO, LEFT, ZERO, LEFT, RIGHT, ZERO, RIGHT, LEFT, RIGHT, PIN, RIGHT, LEFT, RIGHT, ZERO, RIGHT, LEFT, ZERO, LEFT, ZERO, ZERO, RIGHT, ZERO } }, { "double helix", { RIGHT, ZERO, RIGHT, ZERO, RIGHT, ZERO, RIGHT, ZERO, RIGHT, ZERO, RIGHT, ZERO, RIGHT, LEFT, RIGHT, PIN, ZERO, RIGHT, ZERO, RIGHT, ZERO, RIGHT, ZERO, ZERO } }, /* These models come from the website at * http://www.geocities.com/stigeide/snake */ #if 0 { "Abstract", { RIGHT, LEFT, RIGHT, ZERO, PIN, ZERO, LEFT, RIGHT, LEFT, PIN, ZERO, ZERO, PIN, LEFT, RIGHT, LEFT, ZERO, PIN, ZERO, RIGHT, LEFT, RIGHT, ZERO, ZERO } }, #endif { "toadstool", { LEFT, RIGHT, ZERO, RIGHT, LEFT, ZERO, ZERO, RIGHT, LEFT, PIN, RIGHT, RIGHT, LEFT, RIGHT, LEFT, LEFT, RIGHT, RIGHT, RIGHT, PIN, RIGHT, LEFT, PIN, ZERO } }, { "AlanH2", { LEFT, RIGHT, ZERO, RIGHT, LEFT, ZERO, ZERO, RIGHT, LEFT, PIN, RIGHT, RIGHT, LEFT, RIGHT, LEFT, LEFT, RIGHT, RIGHT, LEFT, LEFT, RIGHT, LEFT, RIGHT, ZERO } }, { "AlanH3", { LEFT, RIGHT, ZERO, RIGHT, LEFT, ZERO, ZERO, RIGHT, LEFT, PIN, RIGHT, RIGHT, LEFT, RIGHT, LEFT, LEFT, RIGHT, RIGHT, LEFT, PIN, LEFT, RIGHT, PIN, ZERO } }, { "AlanH4", { ZERO, ZERO, PIN, LEFT, RIGHT, LEFT, ZERO, RIGHT, LEFT, RIGHT, ZERO, PIN, ZERO, LEFT, RIGHT, LEFT, ZERO, RIGHT, LEFT, RIGHT, PIN, ZERO, ZERO, ZERO } }, { "Alien", { RIGHT, LEFT, RIGHT, PIN, ZERO, ZERO, PIN, RIGHT, LEFT, RIGHT, ZERO, PIN, PIN, ZERO, LEFT, LEFT, RIGHT, RIGHT, LEFT, LEFT, ZERO, PIN, PIN, ZERO } }, { "Angel", { ZERO, RIGHT, LEFT, PIN, RIGHT, RIGHT, RIGHT, LEFT, LEFT, RIGHT, LEFT, RIGHT, RIGHT, LEFT, LEFT, LEFT, PIN, RIGHT, LEFT, ZERO, ZERO, RIGHT, LEFT, ZERO } }, { "AnotherFigure", { LEFT, PIN, RIGHT, ZERO, ZERO, PIN, RIGHT, LEFT, LEFT, PIN, RIGHT, LEFT, ZERO, PIN, ZERO, RIGHT, LEFT, PIN, RIGHT, RIGHT, LEFT, PIN, ZERO, ZERO } }, { "Ball", { LEFT, RIGHT, LEFT, RIGHT, RIGHT, LEFT, RIGHT, LEFT, LEFT, RIGHT, LEFT, RIGHT, RIGHT, LEFT, RIGHT, LEFT, LEFT, RIGHT, LEFT, RIGHT, RIGHT, LEFT, RIGHT , ZERO } }, { "Basket", { ZERO, RIGHT, RIGHT, ZERO, RIGHT, RIGHT, ZERO, RIGHT, LEFT, ZERO, LEFT, LEFT, PIN, RIGHT, LEFT, ZERO, LEFT, RIGHT, PIN, LEFT, LEFT, ZERO, LEFT , ZERO } }, { "Beetle", { PIN, LEFT, RIGHT, ZERO, LEFT, LEFT, RIGHT, LEFT, RIGHT, RIGHT, LEFT, RIGHT, LEFT, LEFT, RIGHT, LEFT, RIGHT, RIGHT, ZERO, LEFT, RIGHT, PIN, RIGHT , ZERO } }, { "bone", { PIN, PIN, LEFT, ZERO, PIN, PIN, ZERO, LEFT, ZERO, ZERO, ZERO, ZERO, ZERO, ZERO, ZERO, RIGHT, ZERO, PIN, PIN, ZERO, RIGHT, PIN, PIN , ZERO } }, { "Bow", { LEFT, LEFT, LEFT, RIGHT, LEFT, RIGHT, RIGHT, RIGHT, LEFT, LEFT, LEFT, RIGHT, LEFT, RIGHT, RIGHT, RIGHT, LEFT, LEFT, LEFT, RIGHT, LEFT, RIGHT, RIGHT , ZERO } }, { "bra", { RIGHT, RIGHT, LEFT, LEFT, RIGHT, LEFT, RIGHT, RIGHT, LEFT, LEFT, LEFT, RIGHT, RIGHT, RIGHT, LEFT, LEFT, RIGHT, LEFT, RIGHT, RIGHT, LEFT, LEFT, LEFT , ZERO } }, { "bronchosaurus", { ZERO, PIN, ZERO, PIN, PIN, ZERO, PIN, ZERO, ZERO, PIN, ZERO, PIN, PIN, ZERO, ZERO, ZERO, ZERO, ZERO, ZERO, ZERO, ZERO, ZERO, PIN , ZERO } }, { "Cactus", { PIN, LEFT, ZERO, PIN, PIN, ZERO, RIGHT, PIN, LEFT, ZERO, ZERO, PIN, RIGHT, PIN, LEFT, ZERO, ZERO, RIGHT, PIN, LEFT, PIN, ZERO, ZERO , ZERO } }, { "Camel", { RIGHT, ZERO, PIN, RIGHT, PIN, RIGHT, ZERO, RIGHT, PIN, RIGHT, LEFT, PIN, LEFT, RIGHT, PIN, RIGHT, ZERO, RIGHT, PIN, RIGHT, ZERO, ZERO, LEFT , ZERO } }, { "Candlestick", { LEFT, PIN, LEFT, ZERO, RIGHT, PIN, LEFT, ZERO, RIGHT, PIN, RIGHT, PIN, LEFT, PIN, LEFT, ZERO, RIGHT, PIN, LEFT, ZERO, RIGHT, PIN, RIGHT , ZERO } }, { "Cat", { ZERO, PIN, PIN, ZERO, PIN, PIN, ZERO, RIGHT, ZERO, PIN, PIN, ZERO, PIN, PIN, ZERO, PIN, PIN, ZERO, ZERO, ZERO, ZERO, ZERO, ZERO , ZERO } }, { "Cave", { RIGHT, ZERO, ZERO, PIN, LEFT, ZERO, PIN, PIN, ZERO, RIGHT, LEFT, PIN, RIGHT, RIGHT, LEFT, LEFT, PIN, RIGHT, RIGHT, LEFT, PIN, ZERO, ZERO , ZERO } }, { "Chains", { PIN, ZERO, ZERO, PIN, LEFT, LEFT, PIN, RIGHT, RIGHT, PIN, ZERO, ZERO, PIN, ZERO, ZERO, PIN, LEFT, LEFT, PIN, RIGHT, RIGHT, PIN, ZERO , ZERO } }, { "Chair", { RIGHT, LEFT, RIGHT, RIGHT, RIGHT, LEFT, RIGHT, ZERO, ZERO, PIN, PIN, ZERO, PIN, PIN, ZERO, PIN, PIN, ZERO, ZERO, LEFT, RIGHT, LEFT, LEFT , ZERO } }, { "Chick", { RIGHT, RIGHT, RIGHT, PIN, LEFT, PIN, LEFT, PIN, RIGHT, RIGHT, RIGHT, PIN, LEFT, LEFT, LEFT, PIN, RIGHT, PIN, RIGHT, PIN, LEFT, LEFT, LEFT , ZERO } }, { "Clockwise", { RIGHT, RIGHT, RIGHT, RIGHT, RIGHT, RIGHT, RIGHT, RIGHT, RIGHT, RIGHT, RIGHT, RIGHT, RIGHT, RIGHT, RIGHT, RIGHT, RIGHT, RIGHT, RIGHT, RIGHT, RIGHT, RIGHT, RIGHT , ZERO } }, { "cobra", { ZERO, RIGHT, LEFT, LEFT, RIGHT, LEFT, RIGHT, RIGHT, LEFT, RIGHT, LEFT, LEFT, LEFT, LEFT, ZERO, LEFT, RIGHT, ZERO, ZERO, PIN, ZERO, ZERO, RIGHT , ZERO } }, #if 0 { "Cobra2", { LEFT, ZERO, PIN, ZERO, PIN, LEFT, ZERO, PIN, ZERO, LEFT, LEFT, PIN, RIGHT, RIGHT, ZERO, PIN, ZERO, RIGHT, PIN, ZERO, PIN, ZERO, RIGHT , ZERO } }, #endif { "Cobra3", { ZERO, LEFT, ZERO, PIN, PIN, ZERO, PIN, PIN, ZERO, RIGHT, ZERO, PIN, ZERO, ZERO, LEFT, ZERO, ZERO, ZERO, PIN, ZERO, ZERO, ZERO, LEFT , ZERO } }, { "Compact1", { ZERO, ZERO, PIN, ZERO, ZERO, LEFT, PIN, RIGHT, PIN, LEFT, PIN, LEFT, PIN, RIGHT, PIN, LEFT, ZERO, PIN, PIN, ZERO, ZERO, LEFT, PIN , ZERO } }, { "Compact2", { LEFT, PIN, RIGHT, ZERO, ZERO, PIN, PIN, ZERO, RIGHT, PIN, LEFT, ZERO, ZERO, RIGHT, PIN, RIGHT, PIN, LEFT, PIN, RIGHT, ZERO, ZERO, ZERO , ZERO } }, { "Compact3", { ZERO, PIN, ZERO, PIN, PIN, ZERO, LEFT, PIN, RIGHT, ZERO, PIN, PIN, ZERO, PIN, ZERO, PIN, PIN, ZERO, LEFT, PIN, RIGHT, ZERO, PIN , ZERO } }, { "Compact4", { PIN, RIGHT, ZERO, ZERO, PIN, ZERO, ZERO, PIN, PIN, ZERO, PIN, RIGHT, PIN, LEFT, PIN, ZERO, PIN, PIN, ZERO, ZERO, PIN, ZERO, ZERO , ZERO } }, { "Compact5", { LEFT, ZERO, LEFT, PIN, RIGHT, PIN, LEFT, PIN, LEFT, PIN, RIGHT, PIN, RIGHT, PIN, LEFT, PIN, RIGHT, ZERO, RIGHT, PIN, RIGHT, PIN, LEFT , ZERO } }, { "Contact", { PIN, ZERO, ZERO, PIN, LEFT, LEFT, PIN, LEFT, RIGHT, RIGHT, PIN, LEFT, LEFT, RIGHT, PIN, RIGHT, RIGHT, PIN, ZERO, ZERO, PIN, RIGHT, PIN , ZERO } }, { "Contact2", { RIGHT, PIN, ZERO, LEFT, LEFT, PIN, RIGHT, RIGHT, ZERO, PIN, LEFT, PIN, RIGHT, PIN, ZERO, LEFT, LEFT, PIN, RIGHT, RIGHT, ZERO, PIN, LEFT , ZERO } }, { "Cook", { ZERO, ZERO, PIN, PIN, ZERO, RIGHT, ZERO, RIGHT, LEFT, PIN, LEFT, ZERO, PIN, PIN, ZERO, LEFT, PIN, LEFT, RIGHT, ZERO, RIGHT, ZERO, PIN , ZERO } }, { "Counterclockwise", { LEFT, LEFT, LEFT, LEFT, LEFT, LEFT, LEFT, LEFT, LEFT, LEFT, LEFT, LEFT, LEFT, LEFT, LEFT, LEFT, LEFT, LEFT, LEFT, LEFT, LEFT, LEFT, LEFT , ZERO } }, { "Cradle", { LEFT, LEFT, ZERO, PIN, LEFT, RIGHT, LEFT, LEFT, RIGHT, LEFT, RIGHT, RIGHT, LEFT, RIGHT, PIN, ZERO, RIGHT, RIGHT, LEFT, LEFT, ZERO, ZERO, RIGHT , ZERO } }, { "Crankshaft", { ZERO, PIN, PIN, ZERO, PIN, PIN, ZERO, PIN, LEFT, LEFT, PIN, RIGHT, LEFT, ZERO, PIN, LEFT, PIN, RIGHT, ZERO, ZERO, ZERO, PIN, RIGHT , ZERO } }, { "Cross", { ZERO, PIN, ZERO, PIN, PIN, ZERO, PIN, ZERO, ZERO, ZERO, PIN, PIN, ZERO, ZERO, ZERO, PIN, ZERO, PIN, PIN, ZERO, PIN, ZERO, PIN , ZERO } }, { "Cross2", { ZERO, ZERO, PIN, PIN, ZERO, LEFT, ZERO, ZERO, PIN, PIN, ZERO, RIGHT, ZERO, ZERO, PIN, PIN, ZERO, LEFT, ZERO, ZERO, PIN, PIN, ZERO , ZERO } }, { "Cross3", { ZERO, ZERO, PIN, PIN, ZERO, LEFT, ZERO, ZERO, PIN, PIN, ZERO, RIGHT, ZERO, ZERO, PIN, PIN, ZERO, LEFT, ZERO, ZERO, PIN, PIN, ZERO, ZERO } }, { "CrossVersion1", { PIN, ZERO, RIGHT, PIN, LEFT, PIN, RIGHT, PIN, RIGHT, PIN, LEFT, PIN, RIGHT, ZERO, PIN, RIGHT, PIN, RIGHT, LEFT, PIN, LEFT, RIGHT, PIN, ZERO } }, { "CrossVersion2", { RIGHT, LEFT, PIN, LEFT, LEFT, ZERO, RIGHT, LEFT, PIN, RIGHT, RIGHT, PIN, LEFT, LEFT, PIN, RIGHT, LEFT, ZERO, LEFT, LEFT, PIN, LEFT, RIGHT, ZERO } }, { "Crown", { LEFT, ZERO, PIN, ZERO, RIGHT, ZERO, ZERO, LEFT, ZERO, PIN, ZERO, RIGHT, LEFT, ZERO, PIN, ZERO, RIGHT, ZERO, ZERO, LEFT, ZERO, PIN, ZERO, ZERO } }, { "DNAStrand", { RIGHT, PIN, RIGHT, PIN, RIGHT, PIN, RIGHT, PIN, RIGHT, PIN, RIGHT, PIN, RIGHT, PIN, RIGHT, PIN, RIGHT, PIN, RIGHT, PIN, RIGHT, PIN, RIGHT, ZERO } }, { "Diamond", { ZERO, RIGHT, ZERO, ZERO, LEFT, ZERO, ZERO, RIGHT, PIN, LEFT, LEFT, RIGHT, LEFT, RIGHT, RIGHT, PIN, LEFT, ZERO, ZERO, RIGHT, ZERO, ZERO, LEFT, ZERO } }, { "Dog", { RIGHT, RIGHT, LEFT, RIGHT, LEFT, LEFT, LEFT, RIGHT, RIGHT, LEFT, RIGHT, LEFT, LEFT, RIGHT, RIGHT, RIGHT, LEFT, RIGHT, LEFT, LEFT, ZERO, LEFT, RIGHT, ZERO } }, { "DogFace", { ZERO, ZERO, PIN, PIN, ZERO, LEFT, LEFT, RIGHT, PIN, ZERO, PIN, PIN, ZERO, PIN, LEFT, RIGHT, RIGHT, ZERO, PIN, PIN, ZERO, ZERO, PIN, ZERO } }, { "DoublePeak", { ZERO, ZERO, PIN, ZERO, ZERO, RIGHT, LEFT, PIN, LEFT, RIGHT, PIN, RIGHT, LEFT, LEFT, ZERO, PIN, ZERO, RIGHT, RIGHT, LEFT, PIN, LEFT, RIGHT, ZERO } }, { "DoubleRoof", { ZERO, LEFT, LEFT, RIGHT, RIGHT, LEFT, RIGHT, LEFT, LEFT, RIGHT, LEFT, RIGHT, RIGHT, LEFT, LEFT, ZERO, LEFT, RIGHT, PIN, LEFT, LEFT, PIN, RIGHT, ZERO } }, { "txoboggan", { ZERO, ZERO, ZERO, RIGHT, PIN, LEFT, ZERO, ZERO, ZERO, PIN, PIN, ZERO, ZERO, ZERO, ZERO, LEFT, PIN, RIGHT, ZERO, ZERO, ZERO, ZERO, PIN, ZERO } }, { "Doubled", { LEFT, PIN, LEFT, RIGHT, PIN, RIGHT, LEFT, PIN, LEFT, RIGHT, LEFT, ZERO, LEFT, PIN, LEFT, PIN, LEFT, RIGHT, PIN, RIGHT, LEFT, PIN, LEFT, ZERO } }, { "Doubled1", { LEFT, PIN, LEFT, RIGHT, PIN, RIGHT, LEFT, PIN, LEFT, ZERO, RIGHT, ZERO, RIGHT, ZERO, LEFT, PIN, LEFT, RIGHT, PIN, RIGHT, LEFT, PIN, LEFT, ZERO } }, { "Doubled2", { LEFT, PIN, LEFT, RIGHT, PIN, RIGHT, LEFT, PIN, LEFT, LEFT, RIGHT, ZERO, RIGHT, LEFT, LEFT, PIN, LEFT, RIGHT, PIN, RIGHT, LEFT, PIN, LEFT, ZERO } }, { "DumblingSpoon", { PIN, PIN, ZERO, ZERO, ZERO, ZERO, ZERO, LEFT, ZERO, ZERO, LEFT, RIGHT, ZERO, ZERO, LEFT, RIGHT, ZERO, ZERO, RIGHT, ZERO, ZERO, ZERO, ZERO, ZERO } }, { "Embrace", { PIN, ZERO, ZERO, PIN, RIGHT, PIN, LEFT, PIN, ZERO, RIGHT, PIN, RIGHT, PIN, LEFT, PIN, LEFT, ZERO, PIN, RIGHT, PIN, LEFT, PIN, ZERO, ZERO } }, { "EndlessBelt", { ZERO, RIGHT, LEFT, ZERO, ZERO, ZERO, LEFT, RIGHT, ZERO, PIN, RIGHT, LEFT, ZERO, LEFT, RIGHT, LEFT, PIN, LEFT, RIGHT, LEFT, ZERO, LEFT, RIGHT, ZERO } }, { "Entrance", { LEFT, LEFT, RIGHT, RIGHT, RIGHT, LEFT, LEFT, RIGHT, LEFT, RIGHT, RIGHT, RIGHT, LEFT, LEFT, LEFT, RIGHT, LEFT, RIGHT, RIGHT, LEFT, LEFT, LEFT, RIGHT, ZERO } }, { "Esthetic", { LEFT, LEFT, PIN, RIGHT, RIGHT, ZERO, LEFT, PIN, RIGHT, PIN, LEFT, PIN, LEFT, PIN, RIGHT, PIN, LEFT, ZERO, RIGHT, LEFT, PIN, RIGHT, RIGHT, ZERO } }, { "Explosion", { RIGHT, RIGHT, RIGHT, RIGHT, LEFT, RIGHT, LEFT, LEFT, RIGHT, RIGHT, RIGHT, LEFT, RIGHT, LEFT, LEFT, LEFT, RIGHT, RIGHT, LEFT, RIGHT, LEFT, LEFT, LEFT, ZERO } }, { "F-ZeroXCar", { RIGHT, RIGHT, LEFT, RIGHT, LEFT, LEFT, PIN, RIGHT, LEFT, ZERO, ZERO, RIGHT, LEFT, ZERO, ZERO, LEFT, RIGHT, PIN, RIGHT, LEFT, PIN, LEFT, RIGHT, ZERO } }, { "Face", { ZERO, RIGHT, PIN, RIGHT, LEFT, PIN, LEFT, LEFT, PIN, RIGHT, RIGHT, PIN, RIGHT, LEFT, PIN, LEFT, PIN, LEFT, PIN, LEFT, RIGHT, PIN, RIGHT, ZERO } }, { "Fantasy", { LEFT, LEFT, RIGHT, PIN, ZERO, RIGHT, ZERO, LEFT, PIN, LEFT, PIN, RIGHT, PIN, RIGHT, ZERO, LEFT, ZERO, PIN, LEFT, RIGHT, RIGHT, RIGHT, PIN, ZERO } }, { "Fantasy1", { PIN, ZERO, ZERO, PIN, PIN, ZERO, PIN, RIGHT, LEFT, RIGHT, RIGHT, PIN, LEFT, LEFT, RIGHT, LEFT, PIN, ZERO, PIN, PIN, ZERO, ZERO, PIN, ZERO } }, { "FaserGun", { ZERO, ZERO, LEFT, RIGHT, PIN, RIGHT, ZERO, RIGHT, PIN, RIGHT, LEFT, PIN, LEFT, RIGHT, PIN, RIGHT, ZERO, RIGHT, PIN, RIGHT, RIGHT, ZERO, PIN, ZERO } }, { "FelixW", { ZERO, RIGHT, ZERO, PIN, LEFT, ZERO, LEFT, RIGHT, ZERO, ZERO, RIGHT, PIN, LEFT, ZERO, ZERO, LEFT, RIGHT, ZERO, RIGHT, PIN, ZERO, LEFT, ZERO, ZERO } }, { "Flamingo", { ZERO, PIN, ZERO, ZERO, ZERO, ZERO, ZERO, PIN, LEFT, LEFT, PIN, LEFT, RIGHT, PIN, RIGHT, LEFT, PIN, LEFT, LEFT, ZERO, ZERO, ZERO, PIN, ZERO } }, { "FlatOnTheTop", { ZERO, PIN, PIN, ZERO, PIN, RIGHT, ZERO, RIGHT, LEFT, PIN, RIGHT, RIGHT, PIN, LEFT, RIGHT, ZERO, RIGHT, ZERO, ZERO, PIN, ZERO, ZERO, PIN, ZERO } }, { "Fly", { ZERO, LEFT, PIN, RIGHT, ZERO, PIN, LEFT, PIN, LEFT, RIGHT, PIN, RIGHT, PIN, RIGHT, PIN, LEFT, PIN, LEFT, PIN, LEFT, RIGHT, PIN, RIGHT, ZERO } }, { "Fountain", { LEFT, RIGHT, LEFT, RIGHT, RIGHT, PIN, LEFT, PIN, LEFT, RIGHT, RIGHT, PIN, LEFT, LEFT, RIGHT, RIGHT, PIN, LEFT, LEFT, RIGHT, PIN, RIGHT, PIN, ZERO } }, { "Frog", { LEFT, LEFT, RIGHT, RIGHT, LEFT, PIN, LEFT, PIN, RIGHT, PIN, LEFT, ZERO, RIGHT, ZERO, RIGHT, PIN, LEFT, ZERO, RIGHT, RIGHT, LEFT, RIGHT, RIGHT, ZERO } }, { "Frog2", { LEFT, ZERO, LEFT, RIGHT, RIGHT, PIN, LEFT, RIGHT, ZERO, ZERO, RIGHT, PIN, LEFT, ZERO, ZERO, LEFT, RIGHT, PIN, LEFT, LEFT, RIGHT, ZERO, RIGHT, ZERO } }, { "Furby", { PIN, ZERO, LEFT, PIN, RIGHT, ZERO, PIN, PIN, ZERO, PIN, PIN, ZERO, ZERO, PIN, ZERO, RIGHT, PIN, LEFT, ZERO, PIN, ZERO, ZERO, PIN, ZERO } }, { "Gate", { ZERO, ZERO, PIN, ZERO, ZERO, RIGHT, ZERO, PIN, PIN, ZERO, LEFT, PIN, LEFT, LEFT, PIN, RIGHT, RIGHT, PIN, RIGHT, ZERO, PIN, PIN, ZERO, ZERO } }, { "Ghost", { LEFT, LEFT, LEFT, RIGHT, RIGHT, LEFT, RIGHT, LEFT, LEFT, RIGHT, RIGHT, RIGHT, PIN, LEFT, RIGHT, ZERO, ZERO, LEFT, RIGHT, ZERO, ZERO, LEFT, RIGHT, ZERO } }, { "Globus", { RIGHT, LEFT, ZERO, PIN, LEFT, LEFT, RIGHT, RIGHT, LEFT, RIGHT, LEFT, LEFT, RIGHT, LEFT, RIGHT, RIGHT, LEFT, RIGHT, PIN, ZERO, RIGHT, LEFT, ZERO, ZERO } }, { "Grotto", { PIN, PIN, ZERO, LEFT, RIGHT, LEFT, ZERO, PIN, RIGHT, PIN, LEFT, ZERO, ZERO, ZERO, ZERO, RIGHT, PIN, LEFT, PIN, ZERO, RIGHT, LEFT, RIGHT, ZERO } }, { "H", { PIN, ZERO, PIN, PIN, ZERO, ZERO, ZERO, ZERO, PIN, PIN, ZERO, PIN, LEFT, ZERO, PIN, PIN, ZERO, ZERO, ZERO, ZERO, PIN, PIN, ZERO, ZERO } }, { "HeadOfDevil", { PIN, ZERO, RIGHT, ZERO, RIGHT, PIN, LEFT, ZERO, RIGHT, PIN, RIGHT, LEFT, PIN, LEFT, LEFT, PIN, RIGHT, RIGHT, PIN, RIGHT, LEFT, ZERO, ZERO, ZERO } }, { "Heart", { RIGHT, ZERO, ZERO, ZERO, PIN, LEFT, PIN, LEFT, RIGHT, RIGHT, ZERO, PIN, ZERO, LEFT, LEFT, RIGHT, PIN, RIGHT, PIN, ZERO, ZERO, ZERO, LEFT, ZERO } }, { "Heart2", { ZERO, PIN, ZERO, ZERO, LEFT, ZERO, LEFT, ZERO, ZERO, ZERO, ZERO, PIN, ZERO, ZERO, ZERO, ZERO, RIGHT, ZERO, RIGHT, ZERO, ZERO, PIN, ZERO, ZERO } }, { "Hexagon", { ZERO, ZERO, ZERO, ZERO, LEFT, ZERO, ZERO, RIGHT, ZERO, ZERO, ZERO, ZERO, LEFT, ZERO, ZERO, RIGHT, ZERO, ZERO, ZERO, ZERO, LEFT, ZERO, ZERO, ZERO } }, { "HoleInTheMiddle1", { ZERO, LEFT, RIGHT, PIN, LEFT, LEFT, PIN, RIGHT, LEFT, ZERO, LEFT, RIGHT, ZERO, RIGHT, LEFT, PIN, RIGHT, RIGHT, PIN, LEFT, RIGHT, ZERO, RIGHT, ZERO } }, { "HoleInTheMiddle2", { ZERO, LEFT, RIGHT, ZERO, RIGHT, RIGHT, PIN, LEFT, RIGHT, ZERO, RIGHT, LEFT, ZERO, LEFT, RIGHT, ZERO, RIGHT, RIGHT, PIN, LEFT, RIGHT, ZERO, RIGHT, ZERO } }, { "HouseBoat", { RIGHT, RIGHT, PIN, LEFT, LEFT, LEFT, PIN, RIGHT, RIGHT, RIGHT, PIN, LEFT, RIGHT, ZERO, LEFT, PIN, RIGHT, PIN, LEFT, PIN, LEFT, RIGHT, PIN, ZERO } }, { "HouseByHouse", { LEFT, PIN, LEFT, PIN, LEFT, PIN, RIGHT, PIN, RIGHT, PIN, RIGHT, PIN, LEFT, PIN, LEFT, PIN, LEFT, PIN, RIGHT, PIN, RIGHT, PIN, RIGHT, ZERO } }, { "Infinity", { LEFT, LEFT, LEFT, RIGHT, RIGHT, LEFT, LEFT, RIGHT, RIGHT, LEFT, LEFT, LEFT, LEFT, LEFT, LEFT, RIGHT, RIGHT, LEFT, LEFT, RIGHT, RIGHT, LEFT, LEFT, ZERO } }, { "Integral", { RIGHT, RIGHT, RIGHT, RIGHT, RIGHT, LEFT, LEFT, RIGHT, LEFT, RIGHT, RIGHT, LEFT, LEFT, LEFT, LEFT, LEFT, LEFT, RIGHT, RIGHT, LEFT, RIGHT, LEFT, LEFT, ZERO } }, { "Iron", { ZERO, ZERO, ZERO, ZERO, PIN, RIGHT, ZERO, RIGHT, ZERO, ZERO, LEFT, PIN, RIGHT, ZERO, ZERO, RIGHT, PIN, LEFT, ZERO, ZERO, RIGHT, ZERO, RIGHT, ZERO } }, { "just squares", { RIGHT, RIGHT, LEFT, PIN, LEFT, PIN, RIGHT, PIN, RIGHT, LEFT, LEFT, PIN, RIGHT, RIGHT, LEFT, PIN, LEFT, PIN, RIGHT, PIN, RIGHT, LEFT, LEFT, ZERO } }, { "Kink", { ZERO, PIN, PIN, ZERO, PIN, ZERO, PIN, PIN, ZERO, ZERO, RIGHT, PIN, LEFT, ZERO, ZERO, PIN, PIN, ZERO, PIN, ZERO, PIN, PIN, ZERO, ZERO } }, { "Knot", { LEFT, LEFT, PIN, LEFT, ZERO, LEFT, RIGHT, LEFT, PIN, LEFT, LEFT, RIGHT, RIGHT, PIN, RIGHT, LEFT, RIGHT, ZERO, RIGHT, PIN, RIGHT, RIGHT, LEFT, ZERO } }, { "Leaf", { ZERO, PIN, PIN, ZERO, ZERO, LEFT, ZERO, LEFT, ZERO, ZERO, PIN, ZERO, ZERO, RIGHT, ZERO, RIGHT, PIN, LEFT, ZERO, RIGHT, PIN, LEFT, ZERO, ZERO } }, { "LeftAsRight", { RIGHT, PIN, LEFT, RIGHT, LEFT, ZERO, RIGHT, LEFT, PIN, RIGHT, RIGHT, PIN, LEFT, LEFT, PIN, RIGHT, LEFT, ZERO, RIGHT, LEFT, RIGHT, PIN, LEFT, ZERO } }, { "Long-necked", { PIN, ZERO, LEFT, PIN, LEFT, PIN, RIGHT, PIN, RIGHT, ZERO, PIN, ZERO, LEFT, PIN, LEFT, PIN, RIGHT, PIN, LEFT, ZERO, PIN, PIN, ZERO, ZERO } }, { "lunar module", { PIN, LEFT, LEFT, RIGHT, LEFT, RIGHT, RIGHT, LEFT, RIGHT, LEFT, LEFT, RIGHT, LEFT, RIGHT, RIGHT, PIN, LEFT, RIGHT, ZERO, RIGHT, LEFT, ZERO, LEFT, ZERO } }, { "magnifying glass", { ZERO, ZERO, PIN, ZERO, LEFT, ZERO, PIN, PIN, ZERO, ZERO, RIGHT, PIN, LEFT, ZERO, ZERO, PIN, PIN, ZERO, RIGHT, ZERO, PIN, ZERO, ZERO, ZERO } }, { "Mask", { ZERO, ZERO, ZERO, RIGHT, ZERO, RIGHT, LEFT, ZERO, LEFT, PIN, ZERO, PIN, ZERO, ZERO, PIN, ZERO, PIN, RIGHT, ZERO, RIGHT, LEFT, ZERO, LEFT, ZERO } }, { "Microscope", { PIN, PIN, ZERO, ZERO, PIN, ZERO, RIGHT, PIN, ZERO, ZERO, RIGHT, PIN, LEFT, ZERO, ZERO, PIN, LEFT, ZERO, PIN, PIN, ZERO, PIN, PIN, ZERO } }, { "Mirror", { PIN, RIGHT, LEFT, ZERO, PIN, PIN, ZERO, ZERO, LEFT, RIGHT, ZERO, ZERO, PIN, ZERO, ZERO, LEFT, RIGHT, PIN, RIGHT, ZERO, PIN, PIN, ZERO, ZERO } }, { "MissPiggy", { ZERO, LEFT, LEFT, PIN, RIGHT, ZERO, RIGHT, RIGHT, PIN, LEFT, LEFT, RIGHT, RIGHT, PIN, LEFT, LEFT, ZERO, LEFT, PIN, RIGHT, RIGHT, ZERO, RIGHT, ZERO } }, { "Mole", { ZERO, RIGHT, ZERO, RIGHT, LEFT, RIGHT, PIN, ZERO, LEFT, PIN, RIGHT, ZERO, PIN, LEFT, RIGHT, LEFT, ZERO, LEFT, ZERO, RIGHT, RIGHT, PIN, LEFT, ZERO } }, { "Monk", { LEFT, ZERO, PIN, PIN, ZERO, LEFT, ZERO, PIN, PIN, ZERO, RIGHT, ZERO, PIN, PIN, ZERO, RIGHT, LEFT, RIGHT, RIGHT, LEFT, RIGHT, LEFT, LEFT, ZERO } }, { "Mountain", { ZERO, RIGHT, LEFT, PIN, RIGHT, RIGHT, PIN, LEFT, RIGHT, ZERO, LEFT, PIN, LEFT, ZERO, RIGHT, LEFT, PIN, RIGHT, RIGHT, PIN, LEFT, RIGHT, ZERO, ZERO } }, { "mountains", { ZERO, PIN, ZERO, LEFT, PIN, LEFT, RIGHT, PIN, RIGHT, PIN, RIGHT, PIN, LEFT, PIN, LEFT, PIN, LEFT, RIGHT, PIN, RIGHT, ZERO, PIN, ZERO, ZERO } }, { "MouseWithoutTail", { ZERO, PIN, PIN, ZERO, LEFT, ZERO, PIN, PIN, ZERO, ZERO, RIGHT, PIN, LEFT, ZERO, ZERO, PIN, PIN, ZERO, RIGHT, ZERO, PIN, PIN, ZERO, ZERO } }, { "mushroom", { PIN, LEFT, LEFT, RIGHT, LEFT, RIGHT, RIGHT, PIN, LEFT, RIGHT, ZERO, ZERO, LEFT, PIN, ZERO, RIGHT, ZERO, PIN, PIN, ZERO, LEFT, ZERO, PIN, ZERO } }, { "necklace", { ZERO, ZERO, LEFT, ZERO, ZERO, ZERO, LEFT, ZERO, ZERO, ZERO, ZERO, PIN, ZERO, ZERO, ZERO, ZERO, RIGHT, ZERO, ZERO, ZERO, RIGHT, ZERO, ZERO, ZERO } }, { "NestledAgainst", { LEFT, ZERO, PIN, LEFT, LEFT, RIGHT, RIGHT, PIN, ZERO, RIGHT, PIN, LEFT, ZERO, RIGHT, LEFT, PIN, RIGHT, RIGHT, LEFT, RIGHT, LEFT, LEFT, LEFT, ZERO } }, { "NoClue", { ZERO, RIGHT, PIN, LEFT, LEFT, LEFT, ZERO, LEFT, PIN, RIGHT, RIGHT, PIN, LEFT, LEFT, PIN, RIGHT, ZERO, RIGHT, RIGHT, RIGHT, PIN, LEFT, ZERO, ZERO } }, { "Noname", { LEFT, PIN, RIGHT, PIN, RIGHT, ZERO, PIN, ZERO, ZERO, PIN, PIN, ZERO, PIN, PIN, ZERO, RIGHT, PIN, LEFT, PIN, RIGHT, PIN, RIGHT, LEFT, ZERO } }, { "Obelisk", { PIN, ZERO, ZERO, ZERO, PIN, RIGHT, PIN, LEFT, PIN, LEFT, PIN, LEFT, RIGHT, PIN, RIGHT, PIN, RIGHT, PIN, LEFT, PIN, ZERO, ZERO, ZERO, ZERO } }, { "Ostrich", { ZERO, ZERO, PIN, PIN, ZERO, LEFT, ZERO, PIN, PIN, ZERO, PIN, PIN, ZERO, RIGHT, ZERO, PIN, PIN, ZERO, ZERO, ZERO, ZERO, ZERO, PIN, ZERO } }, { "Ostrich2", { PIN, PIN, ZERO, PIN, LEFT, LEFT, LEFT, RIGHT, LEFT, RIGHT, RIGHT, LEFT, RIGHT, LEFT, LEFT, RIGHT, PIN, ZERO, PIN, ZERO, ZERO, PIN, ZERO, ZERO } }, { "pair of glasses", { ZERO, PIN, ZERO, ZERO, PIN, ZERO, ZERO, PIN, ZERO, LEFT, ZERO, PIN, ZERO, RIGHT, ZERO, PIN, ZERO, ZERO, PIN, ZERO, ZERO, PIN, ZERO, ZERO } }, { "Parrot", { ZERO, ZERO, ZERO, ZERO, RIGHT, RIGHT, ZERO, LEFT, PIN, RIGHT, ZERO, RIGHT, ZERO, RIGHT, ZERO, RIGHT, PIN, LEFT, ZERO, RIGHT, LEFT, ZERO, PIN, ZERO } }, { "Penis", { PIN, PIN, RIGHT, ZERO, PIN, PIN, ZERO, PIN, ZERO, ZERO, RIGHT, PIN, LEFT, ZERO, ZERO, PIN, ZERO, PIN, PIN, ZERO, LEFT, PIN, PIN, ZERO } }, { "PictureComingSoon", { LEFT, LEFT, ZERO, RIGHT, LEFT, PIN, RIGHT, RIGHT, PIN, RIGHT, LEFT, PIN, LEFT, RIGHT, PIN, RIGHT, RIGHT, PIN, RIGHT, LEFT, ZERO, RIGHT, RIGHT, ZERO } }, { "Pitti", { LEFT, PIN, ZERO, ZERO, PIN, ZERO, ZERO, PIN, ZERO, ZERO, RIGHT, PIN, LEFT, ZERO, ZERO, PIN, ZERO, ZERO, PIN, ZERO, ZERO, PIN, RIGHT, ZERO } }, { "Plait", { LEFT, LEFT, LEFT, LEFT, LEFT, LEFT, LEFT, LEFT, LEFT, LEFT, RIGHT, LEFT, RIGHT, RIGHT, RIGHT, RIGHT, RIGHT, RIGHT, RIGHT, RIGHT, RIGHT, RIGHT, LEFT, ZERO } }, { "Platform", { RIGHT, PIN, ZERO, ZERO, ZERO, ZERO, PIN, ZERO, ZERO, PIN, PIN, ZERO, PIN, LEFT, ZERO, RIGHT, LEFT, PIN, RIGHT, RIGHT, PIN, LEFT, RIGHT, ZERO } }, { "PodRacer", { ZERO, PIN, ZERO, PIN, RIGHT, PIN, ZERO, RIGHT, PIN, LEFT, LEFT, PIN, RIGHT, LEFT, ZERO, PIN, PIN, ZERO, ZERO, LEFT, ZERO, PIN, LEFT, ZERO } }, #if 0 { "Pokemon", { LEFT, LEFT, RIGHT, LEFT, RIGHT, RIGHT, LEFT, LEFT, LEFT, RIGHT, LEFT, RIGHT, RIGHT, LEFT, LEFT, RIGHT, RIGHT, LEFT, LEFT, RIGHT, LEFT, RIGHT, RIGHT, ZERO } }, #endif { "Prawn", { RIGHT, PIN, ZERO, PIN, RIGHT, ZERO, PIN, PIN, ZERO, ZERO, LEFT, PIN, RIGHT, ZERO, ZERO, PIN, PIN, ZERO, LEFT, PIN, ZERO, PIN, LEFT, ZERO } }, { "Propeller", { ZERO, ZERO, ZERO, RIGHT, ZERO, LEFT, RIGHT, LEFT, ZERO, ZERO, ZERO, RIGHT, ZERO, LEFT, RIGHT, LEFT, ZERO, ZERO, ZERO, RIGHT, ZERO, LEFT, RIGHT, ZERO } }, { "Pyramid", { ZERO, LEFT, PIN, RIGHT, ZERO, LEFT, PIN, RIGHT, ZERO, LEFT, PIN, RIGHT, ZERO, PIN, RIGHT, LEFT, LEFT, LEFT, PIN, RIGHT, RIGHT, RIGHT, LEFT, ZERO } }, { "QuarterbackTiltedAndReadyToHut", { PIN, ZERO, RIGHT, RIGHT, LEFT, RIGHT, PIN, RIGHT, LEFT, RIGHT, ZERO, PIN, ZERO, LEFT, RIGHT, LEFT, PIN, LEFT, RIGHT, LEFT, LEFT, ZERO, PIN, ZERO } }, { "Ra", { PIN, LEFT, LEFT, LEFT, RIGHT, LEFT, RIGHT, RIGHT, LEFT, RIGHT, LEFT, LEFT, ZERO, LEFT, LEFT, RIGHT, LEFT, RIGHT, RIGHT, LEFT, RIGHT, LEFT, LEFT, ZERO } }, { "Rattlesnake", { LEFT, ZERO, LEFT, ZERO, LEFT, ZERO, LEFT, LEFT, ZERO, LEFT, ZERO, LEFT, ZERO, LEFT, RIGHT, ZERO, PIN, RIGHT, RIGHT, RIGHT, RIGHT, RIGHT, RIGHT, ZERO } }, { "Revelation", { ZERO, ZERO, ZERO, PIN, ZERO, ZERO, PIN, RIGHT, LEFT, LEFT, LEFT, RIGHT, RIGHT, LEFT, LEFT, RIGHT, RIGHT, RIGHT, LEFT, PIN, ZERO, ZERO, PIN, ZERO } }, { "Revolution1", { LEFT, LEFT, PIN, RIGHT, ZERO, PIN, ZERO, LEFT, PIN, RIGHT, RIGHT, PIN, LEFT, LEFT, PIN, RIGHT, ZERO, PIN, ZERO, LEFT, PIN, RIGHT, RIGHT, ZERO } }, { "Ribbon", { RIGHT, RIGHT, LEFT, RIGHT, LEFT, LEFT, PIN, ZERO, PIN, PIN, ZERO, PIN, ZERO, PIN, PIN, ZERO, PIN, RIGHT, RIGHT, LEFT, RIGHT, LEFT, LEFT, ZERO } }, { "Rocket", { RIGHT, ZERO, LEFT, PIN, RIGHT, ZERO, RIGHT, ZERO, LEFT, ZERO, RIGHT, PIN, LEFT, ZERO, RIGHT, ZERO, LEFT, ZERO, LEFT, PIN, RIGHT, ZERO, LEFT, ZERO } }, { "Roofed", { ZERO, LEFT, PIN, RIGHT, ZERO, PIN, LEFT, ZERO, PIN, ZERO, RIGHT, PIN, ZERO, LEFT, PIN, RIGHT, ZERO, PIN, LEFT, ZERO, PIN, ZERO, RIGHT, ZERO } }, { "Roofs", { PIN, PIN, RIGHT, ZERO, LEFT, PIN, RIGHT, PIN, LEFT, PIN, LEFT, PIN, RIGHT, PIN, RIGHT, PIN, LEFT, PIN, RIGHT, ZERO, LEFT, PIN, PIN, ZERO } }, { "RowHouses", { RIGHT, PIN, LEFT, PIN, RIGHT, PIN, RIGHT, PIN, LEFT, PIN, LEFT, PIN, RIGHT, PIN, RIGHT, PIN, LEFT, PIN, LEFT, PIN, RIGHT, PIN, LEFT, ZERO } }, { "Sculpture", { RIGHT, LEFT, PIN, ZERO, ZERO, ZERO, LEFT, RIGHT, LEFT, PIN, ZERO, ZERO, PIN, LEFT, RIGHT, LEFT, ZERO, ZERO, ZERO, PIN, LEFT, RIGHT, LEFT, ZERO } }, { "Seal", { LEFT, LEFT, LEFT, PIN, RIGHT, RIGHT, RIGHT, ZERO, LEFT, PIN, RIGHT, ZERO, LEFT, LEFT, LEFT, PIN, RIGHT, LEFT, ZERO, PIN, PIN, ZERO, LEFT, ZERO } }, { "Seal2", { RIGHT, PIN, ZERO, LEFT, LEFT, LEFT, RIGHT, LEFT, RIGHT, RIGHT, RIGHT, PIN, RIGHT, RIGHT, PIN, LEFT, RIGHT, ZERO, ZERO, LEFT, RIGHT, ZERO, ZERO, ZERO } }, { "Sheep", { RIGHT, LEFT, LEFT, RIGHT, RIGHT, LEFT, LEFT, RIGHT, LEFT, RIGHT, RIGHT, RIGHT, RIGHT, RIGHT, LEFT, RIGHT, LEFT, LEFT, LEFT, LEFT, LEFT, RIGHT, LEFT, ZERO } }, { "Shelter", { LEFT, RIGHT, LEFT, RIGHT, RIGHT, LEFT, RIGHT, LEFT, LEFT, RIGHT, ZERO, ZERO, ZERO, ZERO, PIN, ZERO, ZERO, PIN, ZERO, ZERO, ZERO, ZERO, RIGHT, ZERO } }, { "Ship", { PIN, RIGHT, LEFT, LEFT, LEFT, LEFT, PIN, RIGHT, RIGHT, RIGHT, RIGHT, LEFT, ZERO, LEFT, ZERO, RIGHT, PIN, LEFT, ZERO, LEFT, ZERO, PIN, PIN, ZERO } }, { "Shpongle", { LEFT, RIGHT, ZERO, RIGHT, LEFT, RIGHT, ZERO, RIGHT, LEFT, RIGHT, ZERO, RIGHT, LEFT, RIGHT, ZERO, RIGHT, LEFT, RIGHT, ZERO, RIGHT, LEFT, RIGHT, ZERO, ZERO } }, { "Slide", { LEFT, RIGHT, LEFT, RIGHT, ZERO, LEFT, RIGHT, LEFT, PIN, ZERO, ZERO, PIN, ZERO, ZERO, PIN, RIGHT, LEFT, ZERO, ZERO, RIGHT, LEFT, RIGHT, LEFT, ZERO } }, { "SmallShip", { ZERO, LEFT, RIGHT, ZERO, RIGHT, LEFT, ZERO, LEFT, RIGHT, ZERO, LEFT, RIGHT, ZERO, LEFT, RIGHT, ZERO, RIGHT, LEFT, ZERO, LEFT, RIGHT, ZERO, LEFT, ZERO } }, { "SnakeReadyToStrike", { LEFT, ZERO, LEFT, ZERO, LEFT, ZERO, LEFT, RIGHT, ZERO, RIGHT, ZERO, RIGHT, ZERO, LEFT, ZERO, ZERO, ZERO, PIN, ZERO, ZERO, ZERO, ZERO, LEFT, ZERO } }, { "Snakes14", { RIGHT, RIGHT, PIN, ZERO, RIGHT, LEFT, RIGHT, ZERO, ZERO, ZERO, RIGHT, PIN, LEFT, PIN, ZERO, PIN, LEFT, PIN, RIGHT, ZERO, ZERO, LEFT, RIGHT, ZERO } }, { "Snakes15", { ZERO, PIN, PIN, ZERO, PIN, PIN, ZERO, PIN, LEFT, LEFT, PIN, RIGHT, LEFT, ZERO, PIN, LEFT, PIN, RIGHT, ZERO, ZERO, ZERO, PIN, RIGHT, ZERO } }, { "Snakes18", { PIN, PIN, LEFT, PIN, LEFT, PIN, RIGHT, ZERO, RIGHT, PIN, RIGHT, ZERO, RIGHT, PIN, LEFT, PIN, RIGHT, ZERO, PIN, PIN, ZERO, ZERO, PIN, ZERO } }, { "Snowflake", { LEFT, LEFT, LEFT, RIGHT, RIGHT, RIGHT, RIGHT, LEFT, LEFT, LEFT, LEFT, RIGHT, RIGHT, RIGHT, RIGHT, LEFT, LEFT, LEFT, LEFT, RIGHT, RIGHT, RIGHT, RIGHT, ZERO } }, { "Snowman", { ZERO, PIN, PIN, ZERO, PIN, PIN, ZERO, ZERO, ZERO, PIN, PIN, ZERO, PIN, PIN, ZERO, ZERO, ZERO, PIN, PIN, ZERO, PIN, PIN, ZERO, ZERO } }, { "Source", { PIN, RIGHT, ZERO, PIN, ZERO, LEFT, PIN, RIGHT, PIN, LEFT, LEFT, RIGHT, LEFT, RIGHT, RIGHT, PIN, LEFT, LEFT, RIGHT, LEFT, RIGHT, RIGHT, PIN, ZERO } }, { "Spaceship", { PIN, PIN, RIGHT, RIGHT, PIN, RIGHT, LEFT, PIN, LEFT, PIN, RIGHT, PIN, RIGHT, LEFT, PIN, LEFT, RIGHT, PIN, RIGHT, PIN, RIGHT, PIN, PIN, ZERO } }, { "Spaceship2", { PIN, PIN, LEFT, PIN, LEFT, PIN, RIGHT, ZERO, PIN, PIN, ZERO, LEFT, PIN, RIGHT, ZERO, PIN, ZERO, LEFT, PIN, LEFT, LEFT, PIN, PIN, ZERO } }, { "Speedboat", { LEFT, ZERO, ZERO, LEFT, PIN, RIGHT, ZERO, ZERO, LEFT, ZERO, ZERO, PIN, ZERO, ZERO, RIGHT, ZERO, ZERO, LEFT, PIN, RIGHT, ZERO, ZERO, RIGHT, ZERO } }, { "Speedboat2", { PIN, RIGHT, LEFT, LEFT, RIGHT, RIGHT, RIGHT, ZERO, LEFT, PIN, RIGHT, ZERO, LEFT, LEFT, LEFT, RIGHT, RIGHT, LEFT, PIN, ZERO, RIGHT, PIN, LEFT, ZERO } }, { "Spider", { RIGHT, RIGHT, ZERO, ZERO, LEFT, RIGHT, LEFT, PIN, ZERO, LEFT, ZERO, PIN, PIN, ZERO, RIGHT, ZERO, PIN, RIGHT, LEFT, RIGHT, ZERO, ZERO, LEFT, ZERO } }, { "Spitzbergen", { PIN, LEFT, ZERO, RIGHT, RIGHT, LEFT, PIN, ZERO, LEFT, PIN, RIGHT, RIGHT, PIN, LEFT, LEFT, PIN, RIGHT, ZERO, PIN, RIGHT, LEFT, LEFT, ZERO, ZERO } }, { "Square", { ZERO, ZERO, LEFT, LEFT, PIN, RIGHT, RIGHT, ZERO, ZERO, LEFT, LEFT, PIN, RIGHT, RIGHT, ZERO, ZERO, LEFT, LEFT, PIN, RIGHT, RIGHT, ZERO, ZERO, ZERO } }, { "SquareHole", { PIN, ZERO, PIN, ZERO, ZERO, PIN, PIN, ZERO, PIN, ZERO, ZERO, PIN, ZERO, ZERO, PIN, ZERO, PIN, PIN, ZERO, ZERO, PIN, ZERO, PIN, ZERO } }, { "Stage", { RIGHT, ZERO, LEFT, PIN, LEFT, RIGHT, PIN, RIGHT, LEFT, RIGHT, PIN, RIGHT, LEFT, PIN, LEFT, RIGHT, LEFT, PIN, LEFT, RIGHT, PIN, RIGHT, ZERO, ZERO } }, { "Stairs", { ZERO, PIN, ZERO, PIN, ZERO, PIN, ZERO, PIN, ZERO, PIN, ZERO, PIN, ZERO, PIN, ZERO, PIN, ZERO, PIN, ZERO, PIN, ZERO, PIN, ZERO, ZERO } }, { "Stairs2", { ZERO, PIN, ZERO, PIN, ZERO, PIN, PIN, ZERO, ZERO, PIN, ZERO, PIN, ZERO, PIN, ZERO, PIN, ZERO, PIN, PIN, ZERO, ZERO, PIN, ZERO, ZERO } }, { "Straight", { ZERO, ZERO, ZERO, ZERO, ZERO, ZERO, ZERO, ZERO, ZERO, ZERO, ZERO, ZERO, ZERO, ZERO, ZERO, ZERO, ZERO, ZERO, ZERO, ZERO, ZERO, ZERO, ZERO, ZERO } }, { "Swan", { ZERO, PIN, ZERO, PIN, LEFT, LEFT, PIN, LEFT, PIN, RIGHT, PIN, RIGHT, LEFT, PIN, LEFT, RIGHT, PIN, RIGHT, PIN, LEFT, PIN, LEFT, RIGHT, ZERO } }, { "Swan2", { PIN, ZERO, PIN, RIGHT, RIGHT, RIGHT, LEFT, RIGHT, LEFT, LEFT, RIGHT, LEFT, RIGHT, RIGHT, RIGHT, PIN, ZERO, ZERO, ZERO, ZERO, ZERO, PIN, PIN, ZERO } }, { "Swan3", { PIN, PIN, ZERO, ZERO, ZERO, RIGHT, ZERO, RIGHT, ZERO, ZERO, LEFT, PIN, RIGHT, ZERO, ZERO, RIGHT, PIN, LEFT, ZERO, ZERO, RIGHT, ZERO, RIGHT, ZERO } }, { "Symbol", { RIGHT, RIGHT, PIN, ZERO, PIN, PIN, ZERO, PIN, LEFT, LEFT, RIGHT, LEFT, RIGHT, RIGHT, PIN, ZERO, PIN, PIN, ZERO, PIN, LEFT, LEFT, RIGHT, ZERO } }, { "Symmetry", { RIGHT, ZERO, LEFT, RIGHT, LEFT, ZERO, LEFT, RIGHT, LEFT, ZERO, RIGHT, PIN, LEFT, ZERO, RIGHT, LEFT, RIGHT, ZERO, RIGHT, LEFT, RIGHT, ZERO, LEFT, ZERO } }, { "Symmetry2", { ZERO, PIN, LEFT, LEFT, PIN, ZERO, ZERO, LEFT, PIN, RIGHT, PIN, LEFT, LEFT, PIN, RIGHT, RIGHT, PIN, LEFT, LEFT, PIN, RIGHT, PIN, LEFT, ZERO } }, { "TableFireworks", { ZERO, RIGHT, LEFT, PIN, RIGHT, RIGHT, RIGHT, PIN, LEFT, RIGHT, ZERO, RIGHT, LEFT, PIN, RIGHT, RIGHT, RIGHT, PIN, RIGHT, LEFT, ZERO, RIGHT, PIN, ZERO } }, { "Tapering", { ZERO, ZERO, RIGHT, LEFT, PIN, LEFT, ZERO, PIN, PIN, ZERO, LEFT, PIN, RIGHT, ZERO, PIN, PIN, ZERO, RIGHT, PIN, RIGHT, LEFT, ZERO, ZERO, ZERO } }, { "TaperingTurned", { ZERO, ZERO, RIGHT, LEFT, PIN, LEFT, ZERO, PIN, PIN, ZERO, LEFT, ZERO, RIGHT, ZERO, PIN, PIN, ZERO, RIGHT, PIN, RIGHT, LEFT, ZERO, ZERO, ZERO } }, { "TeaLightStick", { RIGHT, ZERO, PIN, PIN, ZERO, LEFT, RIGHT, PIN, LEFT, LEFT, RIGHT, RIGHT, PIN, LEFT, LEFT, RIGHT, RIGHT, PIN, LEFT, LEFT, RIGHT, RIGHT, PIN, ZERO } }, { "thighmaster", { RIGHT, ZERO, ZERO, RIGHT, LEFT, ZERO, ZERO, RIGHT, LEFT, ZERO, ZERO, LEFT, RIGHT, ZERO, ZERO, RIGHT, LEFT, ZERO, ZERO, RIGHT, LEFT, ZERO, ZERO, ZERO } }, { "Terraces", { RIGHT, LEFT, ZERO, RIGHT, LEFT, PIN, LEFT, LEFT, PIN, LEFT, RIGHT, RIGHT, RIGHT, LEFT, LEFT, LEFT, RIGHT, PIN, RIGHT, RIGHT, PIN, RIGHT, LEFT, ZERO } }, { "Terrier", { PIN, ZERO, PIN, PIN, ZERO, PIN, ZERO, ZERO, ZERO, PIN, PIN, ZERO, PIN, ZERO, ZERO, PIN, ZERO, PIN, PIN, ZERO, ZERO, ZERO, ZERO, ZERO } }, { "Three-Legged", { RIGHT, ZERO, LEFT, RIGHT, ZERO, LEFT, PIN, RIGHT, ZERO, RIGHT, ZERO, PIN, ZERO, LEFT, ZERO, LEFT, PIN, RIGHT, ZERO, LEFT, RIGHT, ZERO, LEFT, ZERO } }, { "ThreePeaks", { RIGHT, ZERO, ZERO, RIGHT, PIN, LEFT, PIN, RIGHT, PIN, RIGHT, RIGHT, PIN, LEFT, LEFT, PIN, LEFT, PIN, RIGHT, PIN, LEFT, ZERO, ZERO, LEFT, ZERO } }, { "ToTheFront", { ZERO, PIN, RIGHT, LEFT, LEFT, LEFT, PIN, RIGHT, LEFT, ZERO, PIN, PIN, ZERO, LEFT, LEFT, PIN, ZERO, LEFT, RIGHT, ZERO, PIN, ZERO, LEFT, ZERO } }, { "Top", { PIN, LEFT, LEFT, PIN, LEFT, ZERO, ZERO, RIGHT, LEFT, PIN, RIGHT, RIGHT, LEFT, RIGHT, LEFT, LEFT, PIN, RIGHT, PIN, RIGHT, RIGHT, PIN, ZERO, ZERO } }, { "Transport", { PIN, ZERO, ZERO, PIN, PIN, ZERO, PIN, PIN, ZERO, PIN, PIN, ZERO, PIN, PIN, ZERO, PIN, PIN, ZERO, ZERO, PIN, ZERO, ZERO, ZERO, ZERO } }, { "Triangle", { ZERO, ZERO, ZERO, ZERO, ZERO, ZERO, RIGHT, LEFT, ZERO, ZERO, ZERO, ZERO, ZERO, ZERO, RIGHT, LEFT, ZERO, ZERO, ZERO, ZERO, ZERO, ZERO, RIGHT, ZERO } }, { "Tripple", { PIN, ZERO, PIN, LEFT, PIN, RIGHT, PIN, RIGHT, PIN, ZERO, PIN, LEFT, PIN, RIGHT, PIN, ZERO, PIN, LEFT, PIN, LEFT, PIN, RIGHT, PIN, ZERO } }, #if 0 { "Turtle", { RIGHT, RIGHT, RIGHT, LEFT, RIGHT, LEFT, LEFT, LEFT, PIN, LEFT, LEFT, RIGHT, LEFT, RIGHT, RIGHT, PIN, LEFT, RIGHT, ZERO, ZERO, LEFT, RIGHT, ZERO, ZERO } }, #endif { "Twins", { ZERO, PIN, ZERO, LEFT, PIN, LEFT, RIGHT, PIN, RIGHT, PIN, ZERO, ZERO, PIN, LEFT, PIN, LEFT, RIGHT, PIN, RIGHT, ZERO, PIN, ZERO, ZERO, ZERO } }, { "TwoSlants", { ZERO, PIN, ZERO, ZERO, PIN, PIN, ZERO, PIN, ZERO, RIGHT, PIN, RIGHT, LEFT, PIN, LEFT, PIN, RIGHT, PIN, LEFT, ZERO, ZERO, RIGHT, PIN, ZERO } }, { "TwoWings", { PIN, LEFT, ZERO, RIGHT, ZERO, PIN, PIN, ZERO, PIN, PIN, ZERO, PIN, PIN, ZERO, LEFT, ZERO, RIGHT, PIN, LEFT, ZERO, RIGHT, LEFT, ZERO, ZERO } }, { "UFO", { LEFT, LEFT, RIGHT, LEFT, RIGHT, RIGHT, LEFT, RIGHT, LEFT, LEFT, LEFT, PIN, LEFT, LEFT, LEFT, RIGHT, LEFT, RIGHT, RIGHT, LEFT, RIGHT, LEFT, LEFT, ZERO } }, { "USS Enterprise", { LEFT, PIN, RIGHT, PIN, RIGHT, LEFT, ZERO, PIN, PIN, ZERO, RIGHT, LEFT, ZERO, PIN, PIN, ZERO, RIGHT, LEFT, PIN, LEFT, PIN, RIGHT, ZERO, ZERO } }, { "UpAndDown", { ZERO, PIN, ZERO, PIN, ZERO, PIN, LEFT, PIN, RIGHT, PIN, ZERO, PIN, ZERO, PIN, ZERO, PIN, ZERO, PIN, LEFT, PIN, RIGHT, PIN, ZERO, ZERO } }, { "Upright", { ZERO, RIGHT, RIGHT, LEFT, RIGHT, LEFT, LEFT, PIN, ZERO, ZERO, LEFT, PIN, RIGHT, ZERO, ZERO, PIN, RIGHT, RIGHT, LEFT, RIGHT, LEFT, LEFT, ZERO, ZERO } }, { "Upside-down", { PIN, ZERO, ZERO, ZERO, PIN, PIN, ZERO, RIGHT, RIGHT, LEFT, LEFT, PIN, RIGHT, RIGHT, LEFT, LEFT, ZERO, PIN, PIN, ZERO, ZERO, ZERO, PIN, ZERO } }, { "Valley", { ZERO, RIGHT, PIN, LEFT, PIN, RIGHT, PIN, RIGHT, LEFT, RIGHT, ZERO, PIN, ZERO, LEFT, RIGHT, LEFT, PIN, LEFT, PIN, RIGHT, PIN, LEFT, ZERO, ZERO } }, { "Viaduct", { PIN, RIGHT, PIN, LEFT, PIN, ZERO, ZERO, PIN, RIGHT, ZERO, RIGHT, RIGHT, ZERO, RIGHT, PIN, ZERO, ZERO, PIN, LEFT, PIN, RIGHT, PIN, ZERO, ZERO } }, { "View", { ZERO, RIGHT, PIN, LEFT, PIN, RIGHT, ZERO, ZERO, RIGHT, PIN, LEFT, LEFT, RIGHT, RIGHT, PIN, LEFT, ZERO, ZERO, LEFT, PIN, RIGHT, PIN, LEFT, ZERO } }, { "Waterfall", { LEFT, ZERO, RIGHT, PIN, LEFT, ZERO, RIGHT, PIN, LEFT, ZERO, RIGHT, PIN, LEFT, ZERO, RIGHT, PIN, LEFT, ZERO, RIGHT, PIN, LEFT, ZERO, RIGHT, ZERO } }, { "windwheel", { PIN, RIGHT, RIGHT, PIN, ZERO, LEFT, PIN, RIGHT, RIGHT, PIN, ZERO, LEFT, PIN, RIGHT, RIGHT, PIN, ZERO, LEFT, PIN, RIGHT, RIGHT, PIN, ZERO, ZERO } }, { "Window", { PIN, ZERO, PIN, PIN, ZERO, ZERO, PIN, ZERO, PIN, ZERO, PIN, ZERO, ZERO, PIN, ZERO, PIN, ZERO, PIN, PIN, ZERO, ZERO, ZERO, ZERO, ZERO } }, { "WindowToTheWorld", { PIN, LEFT, ZERO, PIN, ZERO, ZERO, PIN, ZERO, ZERO, PIN, ZERO, RIGHT, PIN, LEFT, ZERO, PIN, ZERO, ZERO, PIN, ZERO, ZERO, PIN, ZERO, ZERO } }, { "Windshield", { PIN, PIN, ZERO, RIGHT, PIN, LEFT, LEFT, PIN, RIGHT, ZERO, PIN, ZERO, LEFT, PIN, RIGHT, RIGHT, PIN, LEFT, ZERO, PIN, PIN, ZERO, PIN, ZERO } }, { "WingNut", { ZERO, ZERO, ZERO, ZERO, PIN, RIGHT, RIGHT, RIGHT, PIN, RIGHT, LEFT, PIN, LEFT, RIGHT, PIN, RIGHT, RIGHT, RIGHT, PIN, ZERO, ZERO, ZERO, ZERO, ZERO } }, { "Wings2", { RIGHT, ZERO, PIN, ZERO, LEFT, PIN, RIGHT, PIN, RIGHT, LEFT, RIGHT, RIGHT, LEFT, LEFT, RIGHT, LEFT, PIN, LEFT, PIN, RIGHT, ZERO, PIN, ZERO, ZERO } }, { "WithoutName", { PIN, RIGHT, PIN, RIGHT, RIGHT, PIN, LEFT, LEFT, PIN, ZERO, PIN, RIGHT, PIN, LEFT, PIN, ZERO, PIN, RIGHT, RIGHT, PIN, LEFT, LEFT, PIN, ZERO } }, { "Wolf", { ZERO, ZERO, PIN, PIN, ZERO, PIN, ZERO, ZERO, PIN, ZERO, PIN, PIN, ZERO, PIN, ZERO, ZERO, ZERO, PIN, PIN, ZERO, ZERO, ZERO, PIN, ZERO } }, { "X", { LEFT, ZERO, ZERO, PIN, LEFT, RIGHT, RIGHT, PIN, LEFT, RIGHT, ZERO, PIN, PIN, ZERO, LEFT, RIGHT, PIN, LEFT, LEFT, RIGHT, PIN, ZERO, ZERO, ZERO } }, }; static size_t models = sizeof(model) / sizeof(struct model_s); #define VOFFSET 0.045 #define X_MASK 1 #define Y_MASK 2 #define Z_MASK 4 /* the connecting string that holds the snake together */ #define MAGICAL_RED_STRING 0 #define GETSCALAR(vec,mask) ((vec)==(mask) ? 1 : ((vec)==-(mask) ? -1 : 0 )) #ifndef MAX # define MAX(x, y) ((x) > (y) ? (x) : (y)) #endif #ifndef MIN # define MIN(x, y) ((x) < (y) ? (x) : (y)) #endif #define RAND(n) ((random() & 0x7fffffff) % ((long) (n))) #define RANDSIGN() ((random() & 1) ? 1 : -1) /* the triangular prism what makes up the basic unit */ static const float solid_prism_v[][3] = { /* first corner, bottom left front */ { VOFFSET, VOFFSET, 1.0 }, { VOFFSET, 0.00, 1.0 - VOFFSET }, { 0.00, VOFFSET, 1.0 - VOFFSET }, /* second corner, rear */ { VOFFSET, VOFFSET, 0.00 }, { VOFFSET, 0.00, VOFFSET }, { 0.00, VOFFSET, VOFFSET }, /* third, right front */ { 1.0 - VOFFSET / M_SQRT1_2, VOFFSET, 1.0 }, { 1.0 - VOFFSET / M_SQRT1_2, 0.0, 1.0 - VOFFSET }, { 1.0 - VOFFSET * M_SQRT1_2, VOFFSET, 1.0 - VOFFSET }, /* fourth, right rear */ { 1.0 - VOFFSET / M_SQRT1_2, VOFFSET, 0.0 }, { 1.0 - VOFFSET / M_SQRT1_2, 0.0, VOFFSET }, { 1.0 - VOFFSET * M_SQRT1_2, VOFFSET, VOFFSET }, /* fifth, upper front */ { VOFFSET, 1.0 - VOFFSET / M_SQRT1_2, 1.0 }, { VOFFSET / M_SQRT1_2, 1.0 - VOFFSET * M_SQRT1_2, 1.0 - VOFFSET }, { 0.0, 1.0 - VOFFSET / M_SQRT1_2, 1.0 - VOFFSET}, /* sixth, upper rear */ { VOFFSET, 1.0 - VOFFSET / M_SQRT1_2, 0.0 }, { VOFFSET / M_SQRT1_2, 1.0 - VOFFSET * M_SQRT1_2, VOFFSET }, { 0.0, 1.0 - VOFFSET / M_SQRT1_2, VOFFSET }}; static const float solid_prism_n[][3] = {/* corners */ { -VOFFSET, -VOFFSET, VOFFSET }, { VOFFSET, -VOFFSET, VOFFSET }, { -VOFFSET, VOFFSET, VOFFSET }, { -VOFFSET, -VOFFSET, -VOFFSET }, { VOFFSET, -VOFFSET, -VOFFSET }, { -VOFFSET, VOFFSET, -VOFFSET }, /* edges */ { -VOFFSET, 0.0, VOFFSET }, { 0.0, -VOFFSET, VOFFSET }, { VOFFSET, VOFFSET, VOFFSET }, { -VOFFSET, 0.0, -VOFFSET }, { 0.0, -VOFFSET, -VOFFSET }, { VOFFSET, VOFFSET, -VOFFSET }, { -VOFFSET, -VOFFSET, 0.0 }, { VOFFSET, -VOFFSET, 0.0 }, { -VOFFSET, VOFFSET, 0.0 }, /* faces */ { 0.0, 0.0, 1.0 }, { 0.0, -1.0, 0.0 }, { M_SQRT1_2, M_SQRT1_2, 0.0 }, { -1.0, 0.0, 0.0 }, { 0.0, 0.0, -1.0 }}; static const float wire_prism_v[][3] = {{ 0.0, 0.0, 1.0 }, { 1.0, 0.0, 1.0 }, { 0.0, 1.0, 1.0 }, { 0.0, 0.0, 0.0 }, { 1.0, 0.0, 0.0 }, { 0.0, 1.0, 0.0 }}; /* static const float wire_prism_n[][3] = {{ 0.0, 0.0, 1.0}, { 0.0,-1.0, 0.0}, { M_SQRT1_2, M_SQRT1_2, 0.0}, {-1.0, 0.0, 0.0}, { 0.0, 0.0,-1.0}}; */ static struct glsnake_cfg * glc = NULL; #ifdef HAVE_GLUT # define bp glc #endif typedef float (*morphFunc)(long); #ifdef HAVE_GLUT /* forward definitions for GLUT functions */ static void calc_rotation(); static inline void ui_mousedrag(); #endif static const GLfloat white_light[] = { 1.0, 1.0, 1.0, 1.0 }; static const GLfloat lmodel_ambient[] = { 0.2, 0.2, 0.2, 1.0 }; static const GLfloat mat_specular[] = { 0.1, 0.1, 0.1, 1.0 }; static const GLfloat mat_shininess[] = { 20.0 }; static void gl_init( #ifndef HAVE_GLUT ModeInfo * mi #endif ) { float light_pos[][3] = {{0.0, 10.0, 20.0}, {0.0, 20.0, -1.0}}; float light_dir[][3] = {{0.0, -10.0,-20.0}, {0.0,-20.0, 1.0}}; glEnable(GL_DEPTH_TEST); glShadeModel(GL_SMOOTH); glCullFace(GL_BACK); /*glEnable(GL_CULL_FACE);*/ glEnable(GL_NORMALIZE); if (transparent) { glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); glEnable(GL_BLEND); } if (!wireframe) { /*glColor4f(1.0, 1.0, 1.0, 1.0);*/ glLightfv(GL_LIGHT0, GL_POSITION, light_pos[0]); glLightfv(GL_LIGHT0, GL_SPOT_DIRECTION, light_dir[0]); glLightfv(GL_LIGHT0, GL_DIFFUSE, white_light); /*glLightfv(GL_LIGHT0, GL_SPECULAR, white_light);*/ #if 1 glLightfv(GL_LIGHT1, GL_POSITION, light_pos[1]); glLightfv(GL_LIGHT1, GL_SPOT_DIRECTION, light_dir[1]); glLightfv(GL_LIGHT1, GL_DIFFUSE, white_light); glLightfv(GL_LIGHT1, GL_SPECULAR, white_light); #endif glLightModelfv(GL_LIGHT_MODEL_AMBIENT, lmodel_ambient); glMaterialfv(GL_FRONT, GL_SPECULAR, mat_specular); glMaterialfv(GL_FRONT, GL_SHININESS, mat_shininess); glEnable(GL_LIGHTING); glEnable(GL_LIGHT0); glEnable(GL_LIGHT1); /*glEnable(GL_COLOR_MATERIAL);*/ } } static void gettime(snaketime *t) { #ifdef HAVE_GETTIMEOFDAY #ifdef GETTIMEOFDAY_TWO_ARGS struct timezone tzp; gettimeofday(t, &tzp); #else /* !GETTIMEOFDAY_TWO_ARGS */ gettimeofday(t); #endif /* !GETTIMEOFDAY_TWO_ARGS */ #else /* !HAVE_GETTIMEOFDAY */ #ifdef HAVE_FTIME ftime(t); #endif /* HAVE_FTIME */ #endif /* !HAVE_GETTIMEOFDAY */ } ENTRYPOINT void glsnake_reshape( #ifndef HAVE_GLUT ModeInfo * mi, #endif int w, int h); static void start_morph(struct glsnake_cfg *, unsigned int model_index, int immediate); /* wot initialises it */ ENTRYPOINT void glsnake_init( #ifndef HAVE_GLUT ModeInfo * mi #endif ) { #ifndef HAVE_GLUT struct glsnake_cfg * bp; /* set up the conf struct and glx contexts */ if (!glc) { glc = (struct glsnake_cfg *) calloc(MI_NUM_SCREENS(mi), sizeof(struct glsnake_cfg)); if (!glc) { fprintf(stderr, "%s: out of memory\n", progname); exit(1); } } bp = &glc[MI_SCREEN(mi)]; if ((bp->glx_context = init_GL(mi)) != NULL) { gl_init(mi); glsnake_reshape(mi, MI_WIDTH(mi), MI_HEIGHT(mi)); } #else gl_init(); #endif /* initialise conf struct */ memset(&bp->node, 0, sizeof(float) * NODE_COUNT); bp->selected = 11; bp->is_cyclic = 0; bp->is_legal = 1; bp->last_turn = -1; bp->morphing = 0; bp->paused = 0; bp->new_morph = 0; gettime(&bp->last_iteration); memcpy(&bp->last_morph, &bp->last_iteration, sizeof(bp->last_morph)); bp->prev_colour = bp->next_colour = COLOUR_ACYCLIC; bp->next_model = RAND(models); bp->prev_model = START_MODEL; start_morph(bp, bp->prev_model, 1); /* set up a font for the labels */ #ifndef HAVE_GLUT if (titles) bp->font_data = load_texture_font (mi->dpy, "labelfont"); #endif /* build a solid display list */ bp->node_solid = glGenLists(1); glNewList(bp->node_solid, GL_COMPILE); /* corners */ glBegin(GL_TRIANGLES); glNormal3fv(solid_prism_n[0]); glVertex3fv(solid_prism_v[0]); glVertex3fv(solid_prism_v[2]); glVertex3fv(solid_prism_v[1]); bp->node_polys++; glNormal3fv(solid_prism_n[1]); glVertex3fv(solid_prism_v[6]); glVertex3fv(solid_prism_v[7]); glVertex3fv(solid_prism_v[8]); bp->node_polys++; glNormal3fv(solid_prism_n[2]); glVertex3fv(solid_prism_v[12]); glVertex3fv(solid_prism_v[13]); glVertex3fv(solid_prism_v[14]); bp->node_polys++; glNormal3fv(solid_prism_n[3]); glVertex3fv(solid_prism_v[3]); glVertex3fv(solid_prism_v[4]); glVertex3fv(solid_prism_v[5]); bp->node_polys++; glNormal3fv(solid_prism_n[4]); glVertex3fv(solid_prism_v[9]); glVertex3fv(solid_prism_v[11]); glVertex3fv(solid_prism_v[10]); bp->node_polys++; glNormal3fv(solid_prism_n[5]); glVertex3fv(solid_prism_v[16]); glVertex3fv(solid_prism_v[15]); glVertex3fv(solid_prism_v[17]); bp->node_polys++; glEnd(); /* edges */ glBegin(GL_QUADS); glNormal3fv(solid_prism_n[6]); glVertex3fv(solid_prism_v[0]); glVertex3fv(solid_prism_v[12]); glVertex3fv(solid_prism_v[14]); glVertex3fv(solid_prism_v[2]); bp->node_polys++; glNormal3fv(solid_prism_n[7]); glVertex3fv(solid_prism_v[0]); glVertex3fv(solid_prism_v[1]); glVertex3fv(solid_prism_v[7]); glVertex3fv(solid_prism_v[6]); bp->node_polys++; glNormal3fv(solid_prism_n[8]); glVertex3fv(solid_prism_v[6]); glVertex3fv(solid_prism_v[8]); glVertex3fv(solid_prism_v[13]); glVertex3fv(solid_prism_v[12]); bp->node_polys++; glNormal3fv(solid_prism_n[9]); glVertex3fv(solid_prism_v[3]); glVertex3fv(solid_prism_v[5]); glVertex3fv(solid_prism_v[17]); glVertex3fv(solid_prism_v[15]); bp->node_polys++; glNormal3fv(solid_prism_n[10]); glVertex3fv(solid_prism_v[3]); glVertex3fv(solid_prism_v[9]); glVertex3fv(solid_prism_v[10]); glVertex3fv(solid_prism_v[4]); bp->node_polys++; glNormal3fv(solid_prism_n[11]); glVertex3fv(solid_prism_v[15]); glVertex3fv(solid_prism_v[16]); glVertex3fv(solid_prism_v[11]); glVertex3fv(solid_prism_v[9]); bp->node_polys++; glNormal3fv(solid_prism_n[12]); glVertex3fv(solid_prism_v[1]); glVertex3fv(solid_prism_v[2]); glVertex3fv(solid_prism_v[5]); glVertex3fv(solid_prism_v[4]); bp->node_polys++; glNormal3fv(solid_prism_n[13]); glVertex3fv(solid_prism_v[8]); glVertex3fv(solid_prism_v[7]); glVertex3fv(solid_prism_v[10]); glVertex3fv(solid_prism_v[11]); bp->node_polys++; glNormal3fv(solid_prism_n[14]); glVertex3fv(solid_prism_v[13]); glVertex3fv(solid_prism_v[16]); glVertex3fv(solid_prism_v[17]); glVertex3fv(solid_prism_v[14]); bp->node_polys++; glEnd(); /* faces */ glBegin(GL_TRIANGLES); glNormal3fv(solid_prism_n[15]); glVertex3fv(solid_prism_v[0]); glVertex3fv(solid_prism_v[6]); glVertex3fv(solid_prism_v[12]); bp->node_polys++; glNormal3fv(solid_prism_n[19]); glVertex3fv(solid_prism_v[3]); glVertex3fv(solid_prism_v[15]); glVertex3fv(solid_prism_v[9]); bp->node_polys++; glEnd(); glBegin(GL_QUADS); glNormal3fv(solid_prism_n[16]); glVertex3fv(solid_prism_v[1]); glVertex3fv(solid_prism_v[4]); glVertex3fv(solid_prism_v[10]); glVertex3fv(solid_prism_v[7]); bp->node_polys++; glNormal3fv(solid_prism_n[17]); glVertex3fv(solid_prism_v[8]); glVertex3fv(solid_prism_v[11]); glVertex3fv(solid_prism_v[16]); glVertex3fv(solid_prism_v[13]); bp->node_polys++; glNormal3fv(solid_prism_n[18]); glVertex3fv(solid_prism_v[2]); glVertex3fv(solid_prism_v[14]); glVertex3fv(solid_prism_v[17]); glVertex3fv(solid_prism_v[5]); bp->node_polys++; glEnd(); glEndList(); /* build wire display list */ bp->node_wire = glGenLists(1); glNewList(bp->node_wire, GL_COMPILE); glBegin(GL_LINE_STRIP); glVertex3fv(wire_prism_v[0]); glVertex3fv(wire_prism_v[1]); bp->node_polys++; glVertex3fv(wire_prism_v[2]); glVertex3fv(wire_prism_v[0]); bp->node_polys++; glVertex3fv(wire_prism_v[3]); glVertex3fv(wire_prism_v[4]); bp->node_polys++; glVertex3fv(wire_prism_v[5]); glVertex3fv(wire_prism_v[3]); bp->node_polys++; glEnd(); glBegin(GL_LINES); glVertex3fv(wire_prism_v[1]); glVertex3fv(wire_prism_v[4]); bp->node_polys++; glVertex3fv(wire_prism_v[2]); glVertex3fv(wire_prism_v[5]); bp->node_polys++; glEnd(); glEndList(); #ifdef HAVE_GLUT /* initialise the rotation */ calc_rotation(); #endif } static void draw_title( #ifndef HAVE_GLUT ModeInfo * mi #endif ) { #ifndef HAVE_GLUT struct glsnake_cfg * bp = &glc[MI_SCREEN(mi)]; #endif /* draw some text */ /* glPushAttrib((GLbitfield) GL_TRANSFORM_BIT | GL_ENABLE_BIT);*/ glDisable(GL_LIGHTING); glDisable(GL_DEPTH_TEST); if (transparent) { glDisable(GL_BLEND); } glMatrixMode(GL_PROJECTION); glPushMatrix(); glLoadIdentity(); glMatrixMode(GL_MODELVIEW); glPushMatrix(); glLoadIdentity(); #ifdef HAVE_GLUT glOrtho((GLdouble) 0., (GLdouble) bp->width, (GLdouble) 0., (GLdouble) bp->height, -1, 1); #else glOrtho((GLdouble) 0., (GLdouble) mi->xgwa.width, (GLdouble) 0., (GLdouble) mi->xgwa.height, -1, 1); #endif glColor4f(1.0, 1.0, 1.0, 1.0); { char interactstr[] = "interactive"; const char * s; #ifdef HAVE_GLUT int w; #endif if (interactive) s = interactstr; else s = model[bp->next_model].name; #ifdef HAVE_GLUT { unsigned int i = 0; w = glutBitmapLength(GLUT_BITMAP_HELVETICA_12, (const unsigned char *) s); glRasterPos2f((GLfloat) (bp->width - w - 3), 4.0); while (s[i] != '\0') glutBitmapCharacter(GLUT_BITMAP_HELVETICA_12, s[i++]); } #else print_texture_label (mi->dpy, bp->font_data, mi->xgwa.width, mi->xgwa.height, 1, s); #endif } glPopMatrix(); glMatrixMode(GL_PROJECTION); glPopMatrix(); /* glPopAttrib();*/ } /* apply the matrix to the origin and stick it in vec */ static void matmult_origin(float rotmat[16], float vec[4]) { #if 1 vec[0] = 0.5 * rotmat[0] + 0.5 * rotmat[4] + 0.5 * rotmat [8] + 1 * rotmat[12]; vec[1] = 0.5 * rotmat[1] + 0.5 * rotmat[5] + 0.5 * rotmat [9] + 1 * rotmat[13]; vec[2] = 0.5 * rotmat[2] + 0.5 * rotmat[6] + 0.5 * rotmat[10] + 1 * rotmat[14]; vec[3] = 0.5 * rotmat[3] + 0.5 * rotmat[7] + 0.5 * rotmat[11] + 1 * rotmat[15]; #else vec[0] = 0 * rotmat [0] + 0 * rotmat [1] + 0 * rotmat [2] + 1 * rotmat [3]; vec[1] = 0 * rotmat [4] + 0 * rotmat [5] + 0 * rotmat [6] + 1 * rotmat [7]; vec[2] = 0 * rotmat [8] + 0 * rotmat [9] + 0 * rotmat[10] + 1 * rotmat[11]; vec[3] = 0 * rotmat[12] + 0 * rotmat[13] + 0 * rotmat[14] + 1 * rotmat[15]; #endif vec[0] /= vec[3]; vec[1] /= vec[3]; vec[2] /= vec[3]; vec[3] = 1.0; } /* wot gets called when the winder is resized */ ENTRYPOINT void glsnake_reshape( #ifndef HAVE_GLUT ModeInfo * mi, #endif int w, int h) { glViewport(0, 0, (GLint) w, (GLint) h); glMatrixMode(GL_PROJECTION); glLoadIdentity(); /* jwz: 0.05 was too close (left black rectangles) */ gluPerspective(zoom, (GLdouble) w / (GLdouble) h, 1.0, 100.0); gluLookAt(0.0, 0.0, 20.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0); glMatrixMode(GL_MODELVIEW); /*gluLookAt(0.0, 0.0, 20.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0);*/ glLoadIdentity(); #ifdef HAVE_GLUT bp->width = w; bp->height = h; #endif } /* Returns the new dst_dir for the given src_dir and dst_dir */ static int cross_product(int src_dir, int dst_dir) { return X_MASK*(GETSCALAR(src_dir,Y_MASK) * GETSCALAR(dst_dir,Z_MASK) - GETSCALAR(src_dir,Z_MASK) * GETSCALAR(dst_dir,Y_MASK))+ Y_MASK*(GETSCALAR(src_dir,Z_MASK) * GETSCALAR(dst_dir,X_MASK) - GETSCALAR(src_dir,X_MASK) * GETSCALAR(dst_dir,Z_MASK))+ Z_MASK*(GETSCALAR(src_dir,X_MASK) * GETSCALAR(dst_dir,Y_MASK) - GETSCALAR(src_dir,Y_MASK) * GETSCALAR(dst_dir,X_MASK)); } /* calculate orthogonal snake metrics * is_legal = true if model does not pass through itself * is_cyclic = true if last node connects back to first node * last_turn = for cyclic snakes, specifes what the 24th turn would be */ static void calc_snake_metrics(struct glsnake_cfg *bp) { int srcDir, dstDir; int i, x, y, z; int prevSrcDir = -Y_MASK; int prevDstDir = Z_MASK; int grid[25][25][25]; /* zero the grid */ memset(&grid, 0, sizeof(int) * 25*25*25); bp->is_legal = 1; x = y = z = 12; /* trace path of snake - and keep record for is_legal */ for (i = 0; i < NODE_COUNT - 1; i++) { /*int ang_card;*/ /* cardinal direction of node angle */ /* establish new state vars */ srcDir = -prevDstDir; x += GETSCALAR(prevDstDir, X_MASK); y += GETSCALAR(prevDstDir, Y_MASK); z += GETSCALAR(prevDstDir, Z_MASK); switch ((int) model[bp->next_model].node[i]) { case (int) (ZERO): dstDir = -prevSrcDir; break; case (int) (PIN): dstDir = prevSrcDir; break; case (int) (RIGHT): case (int) (LEFT): dstDir = cross_product(prevSrcDir, prevDstDir); if (model[bp->next_model].node[i] == (int) (RIGHT)) dstDir = -dstDir; break; default: /* Prevent spurious "might be used * uninitialised" warnings when compiling * with -O2 */ dstDir = 0; break; } if (grid[x][y][z] == 0) grid[x][y][z] = srcDir + dstDir; else if (grid[x][y][z] + srcDir + dstDir == 0) grid[x][y][z] = 8; else bp->is_legal = 0; prevSrcDir = srcDir; prevDstDir = dstDir; } /* determine if the snake is cyclic */ bp->is_cyclic = (dstDir == Y_MASK && x == 12 && y == 11 && z == 12); /* determine last_turn */ bp->last_turn = -1; if (bp->is_cyclic) switch (srcDir) { case -Z_MASK: bp->last_turn = ZERO; break; case Z_MASK: bp->last_turn = PIN; break; case X_MASK: bp->last_turn = LEFT; break; case -X_MASK: bp->last_turn = RIGHT; break; } } /* work out how far through the current morph we are */ static float morph_percent(struct glsnake_cfg *bp) { float retval; int i; /* extend this function later with a case statement for each of the * morph schemes */ /* when morphing all nodes at once, the longest morph will be the node * that needs to rotate 180 degrees. For each node, work out how far it * has to go, and store the maximum rotation and current largest angular * difference, returning the angular difference over the maximum. */ { float rot_max = 0.0, ang_diff_max = 0.0; for (i = 0; i < NODE_COUNT - 1; i++) { float rot, ang_diff; /* work out the maximum rotation this node has to go through * from the previous to the next model, taking into account that * the snake always morphs through the smaller angle */ rot = fabs(model[bp->prev_model].node[i] - model[bp->next_model].node[i]); if (rot > 180.0) rot = 180.0 - rot; /* work out the difference between the current position and the * target */ ang_diff = fabs(bp->node[i] - model[bp->next_model].node[i]); if (ang_diff > 180.0) ang_diff = 180.0 - ang_diff; /* if it's the biggest so far, record it */ if (rot > rot_max) rot_max = rot; if (ang_diff > ang_diff_max) ang_diff_max = ang_diff; } /* ang_diff / rot approaches 0, we want the complement */ retval = 1.0 - (ang_diff_max / rot_max); /* protect against naan */ /* Apparently some systems (Solaris) don't have isinf() */ #undef isinf #define isinf(x) (((x) > 999999999999.9) || ((x) < -999999999999.9)) if (isnan(retval) || isinf(retval)) retval = 1.0; } /*printf("morph_pct = %f\n", retval);*/ return retval; } static void morph_colour(struct glsnake_cfg *bp) { float percent, compct; /* complement of percentage */ percent = morph_percent(bp); compct = 1.0 - percent; bp->colour[0][0] = colour[bp->prev_colour][0][0] * compct + colour[bp->next_colour][0][0] * percent; bp->colour[0][1] = colour[bp->prev_colour][0][1] * compct + colour[bp->next_colour][0][1] * percent; bp->colour[0][2] = colour[bp->prev_colour][0][2] * compct + colour[bp->next_colour][0][2] * percent; bp->colour[0][3] = colour[bp->prev_colour][0][3] * compct + colour[bp->next_colour][0][3] * percent; bp->colour[1][0] = colour[bp->prev_colour][1][0] * compct + colour[bp->next_colour][1][0] * percent; bp->colour[1][1] = colour[bp->prev_colour][1][1] * compct + colour[bp->next_colour][1][1] * percent; bp->colour[1][2] = colour[bp->prev_colour][1][2] * compct + colour[bp->next_colour][1][2] * percent; bp->colour[1][3] = colour[bp->prev_colour][1][3] * compct + colour[bp->next_colour][1][3] * percent; } /* Start morph process to this model */ static void start_morph(struct glsnake_cfg *bp, unsigned int model_index, int immediate) { /* if immediate, don't bother morphing, go straight to the next model */ if (immediate) { int i; for (i = 0; i < NODE_COUNT; i++) bp->node[i] = model[model_index].node[i]; } bp->prev_model = bp->next_model; bp->next_model = model_index; bp->prev_colour = bp->next_colour; calc_snake_metrics(bp); if (!bp->is_legal) bp->next_colour = COLOUR_INVALID; else if (altcolour) bp->next_colour = COLOUR_AUTHENTIC; else if (bp->is_cyclic) bp->next_colour = COLOUR_CYCLIC; else bp->next_colour = COLOUR_ACYCLIC; if (immediate) { bp->colour[0][0] = colour[bp->next_colour][0][0]; bp->colour[0][1] = colour[bp->next_colour][0][1]; bp->colour[0][2] = colour[bp->next_colour][0][2]; bp->colour[0][3] = colour[bp->next_colour][0][3]; bp->colour[1][0] = colour[bp->next_colour][1][0]; bp->colour[1][1] = colour[bp->next_colour][1][1]; bp->colour[1][2] = colour[bp->next_colour][1][2]; bp->colour[1][3] = colour[bp->next_colour][1][3]; } bp->morphing = 1; morph_colour(bp); } #if 0 /* Returns morph progress */ static float morph(long iter_msec) { /* work out the maximum angle for this iteration */ int still_morphing; float iter_angle_max, largest_diff, largest_progress; int i; if (bp->new_morph) bp->new_morph = 0; iter_angle_max = 90.0 * (angvel/1000.0) * iter_msec; still_morphing = 0; largest_diff = largest_progress = 0.0; for (i = 0; i < NODE_COUNT; i++) { float curAngle = bp->node[i]; float destAngle = model[bp->next_model].node[i]; if (curAngle != destAngle) { still_morphing = 1; if (fabs(curAngle-destAngle) <= iter_angle_max) bp->node[i] = destAngle; else if (fmod(curAngle-destAngle+360,360) > 180) bp->node[i] = fmod(curAngle + iter_angle_max, 360); else bp->node[i] = fmod(curAngle+360 - iter_angle_max, 360); largest_diff = MAX(largest_diff, fabs(destAngle-bp->node[i])); largest_progress = MAX(largest_diff, fabs(bp->node[i] - model[bp->prev_model].node[i])); } } return MIN(largest_diff / largest_progress, 1.0); } #endif #ifdef HAVE_GLUT static void glsnake_idle(); static restore_idle(int v __attribute__((__unused__))) { glutIdleFunc(glsnake_idle); } #endif static void quick_sleep(void) { #ifdef HAVE_GLUT /* By using glutTimerFunc we can keep responding to * mouse and keyboard events, unlike using something like * usleep. */ glutIdleFunc(NULL); glutTimerFunc(1, restore_idle, 0); #else usleep(1); #endif } static void glsnake_idle( #ifndef HAVE_GLUT struct glsnake_cfg * bp #endif ) { /* time since last iteration */ long iter_msec; /* time since the beginning of last morph */ long morf_msec; float iter_angle_max; snaketime current_time; /* morphFunc transition; */ int still_morphing; int i; /* Do nothing to the model if we are paused */ if (bp->paused) { /* Avoid busy waiting when nothing is changing */ quick_sleep(); #ifdef HAVE_GLUT glutSwapBuffers(); glutPostRedisplay(); #endif return; } /* Well, ftime gives time with millisecond resolution. * (or worse, perhaps... who knows what the OS will do) * So if no discernable amount of time has passed: * a) There's no point updating the screen, because * it would be the same * b) The code will divide by zero */ gettime(¤t_time); iter_msec = (long) GETMSECS(current_time) - GETMSECS(bp->last_iteration) + ((long) GETSECS(current_time) - GETSECS(bp->last_iteration)) * 1000L; if (iter_msec) { /* save the current time */ memcpy(&bp->last_iteration, ¤t_time, sizeof(snaketime)); /* work out if we have to switch models */ morf_msec = GETMSECS(bp->last_iteration) - GETMSECS(bp->last_morph) + ((long) (GETSECS(bp->last_iteration)-GETSECS(bp->last_morph)) * 1000L); if ((morf_msec > statictime) && !interactive && !bp->morphing) { /*printf("starting morph\n");*/ memcpy(&bp->last_morph, &(bp->last_iteration), sizeof(bp->last_morph)); start_morph(bp, RAND(models), 0); } if (interactive && !bp->morphing) { quick_sleep(); return; } /* if (!bp->dragging && !bp->interactive) { */ if (!interactive) { yspin += 360/((1000/yangvel)/iter_msec); zspin += 360/((1000/zangvel)/iter_msec); /* yspin += 360 * (yangvel/1000.0) * iter_msec; zspin += 360 * (zangvel/1000.0) * iter_msec; */ /*printf("yspin: %f, zspin: %f\n", yspin, zspin);*/ } /* work out the maximum angle we could turn this node in this * timeslice, iter_msec milliseconds long */ iter_angle_max = 90.0 * (angvel/1000.0) * iter_msec; still_morphing = 0; for (i = 0; i < NODE_COUNT; i++) { float cur_angle = bp->node[i]; float dest_angle = model[bp->next_model].node[i]; if (cur_angle != dest_angle) { still_morphing = 1; if (fabs(cur_angle - dest_angle) <= iter_angle_max) bp->node[i] = dest_angle; else if (fmod(cur_angle - dest_angle + 360, 360) > 180) bp->node[i] = fmod(cur_angle + iter_angle_max, 360); else bp->node[i] = fmod(cur_angle + 360 - iter_angle_max, 360); } } if (!still_morphing) bp->morphing = 0; /* colour cycling */ morph_colour(bp); #ifdef HAVE_GLUT glutSwapBuffers(); glutPostRedisplay(); #endif } else { /* We are going too fast, so we may as well let the * cpu relax a little by sleeping for a millisecond. */ quick_sleep(); } } /* wot draws it */ ENTRYPOINT void glsnake_display( #ifndef HAVE_GLUT ModeInfo * mi #endif ) { #ifndef HAVE_GLUT struct glsnake_cfg * bp = &glc[MI_SCREEN(mi)]; Display * dpy = MI_DISPLAY(mi); Window window = MI_WINDOW(mi); #endif int i; float ang; float positions[NODE_COUNT][4]; /* origin points for each node */ float com[4]; /* it's the CENTRE of MASS */ #ifndef HAVE_GLUT if (!bp->glx_context) return; glXMakeCurrent(MI_DISPLAY(mi), MI_WINDOW(mi), *(bp->glx_context)); #endif gl_init(mi); /* clear the buffer */ glClear((GLbitfield) GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); /* go into the modelview stack */ glMatrixMode(GL_MODELVIEW); glLoadIdentity(); /* get the centre of each node, by moving through the snake and * performing the rotations, then grabbing the matrix at each point * and applying it to the origin */ glPushMatrix(); #ifdef HAVE_GLUT /* apply the mouse drag rotation */ ui_mousedrag(); #endif /* apply the continuous rotation */ glRotatef(yspin, 0.0, 1.0, 0.0); glRotatef(zspin, 0.0, 0.0, 1.0); com[0] = 0.0; com[1] = 0.0; com[2] = 0.0; com[3] = 0.0; for (i = 0; i < NODE_COUNT; i++) { float rotmat[16]; ang = bp->node[i]; /*printf("ang = %f\n", ang);*/ glTranslatef(0.5, 0.5, 0.5); /* move to center */ glRotatef(90.0, 0.0, 0.0, -1.0); /* reorient */ glTranslatef(1.0 + explode, 0.0, 0.0); /* move to new pos. */ glRotatef(180.0 + ang, 1.0, 0.0, 0.0); /* pivot to new angle */ glTranslatef(-0.5, -0.5, -0.5); /* return from center */ glGetFloatv(GL_MODELVIEW_MATRIX, rotmat); matmult_origin(rotmat, positions[i]); /*printf("positions %f %f %f %f\n", positions[i][0], positions[i][1], positions[i][2], positions[i][3]);*/ com[0] += positions[i][0]; com[1] += positions[i][1]; com[2] += positions[i][2]; com[3] += positions[i][3]; } glPopMatrix(); com[0] /= NODE_COUNT; com[1] /= NODE_COUNT; com[2] /= NODE_COUNT; com[3] /= NODE_COUNT; com[0] /= com[3]; com[1] /= com[3]; com[2] /= com[3]; /*printf("com: %f, %f, %f, %f\n", com[0], com[1], com[2], com[3]);*/ #if MAGICAL_RED_STRING glPushMatrix(); glTranslatef(-com[0], -com[1], -com[2]); glDisable(GL_LIGHTING); glColor4f(1.0, 0.0, 0.0, 1.0); glBegin(GL_LINE_STRIP); for (i = 0; i < NODE_COUNT - 1; i++) { glVertex3fv(positions[i]); } glEnd(); glEnable(GL_LIGHTING); /*glTranslatef(com[0], com[1], com[2]);*/ glPopMatrix(); #endif glPushMatrix(); glTranslatef(-com[0], -com[1], -com[2]); #ifdef HAVE_GLUT /* apply the mouse drag rotation */ ui_mousedrag(); #endif /* apply the continuous rotation */ glRotatef(yspin, 0.0, 1.0, 0.0); glRotatef(zspin, 0.0, 0.0, 1.0); # ifdef HAVE_MOBILE /* Keep it the same relative size when rotated. */ { GLfloat h = MI_HEIGHT(mi) / (GLfloat) MI_WIDTH(mi); int o = (int) current_device_rotation(); if (o != 0 && o != 180 && o != -180) glScalef (1/h, 1/h, 1/h); } # endif /* now draw each node along the snake -- this is quite ugly :p */ mi->polygon_count = 0; for (i = 0; i < NODE_COUNT; i++) { /* choose a colour for this node */ if ((i == bp->selected || i == bp->selected+1) && interactive) /* yellow */ glColor4f(1.0, 1.0, 0.0, 1.0); else { /*glColor4fv(bp->colour[(i+1)%2]);*/ glMaterialfv(GL_FRONT, GL_AMBIENT, bp->colour[(i+1)%2]); glMaterialfv(GL_FRONT, GL_DIFFUSE, bp->colour[(i+1)%2]); /*glMaterialfv(GL_FRONT, GL_SPECULAR, bp->colour[(i+1)%2]);*/ } /* draw the node */ if (wireframe) glCallList(bp->node_wire); else glCallList(bp->node_solid); mi->polygon_count += bp->node_polys; /* now work out where to draw the next one */ /* Interpolate between models */ ang = bp->node[i]; glTranslatef(0.5, 0.5, 0.5); /* move to center */ glRotatef(90.0, 0.0, 0.0, -1.0); /* reorient */ glTranslatef(1.0 + explode, 0.0, 0.0); /* move to new pos. */ glRotatef(180.0 + ang, 1.0, 0.0, 0.0); /* pivot to new angle */ glTranslatef(-0.5, -0.5, -0.5); /* return from center */ } glPopMatrix(); if (titles) #ifdef HAVE_GLUT draw_title(); #else draw_title(mi); #endif #ifndef HAVE_GLUT glsnake_idle(bp); if (mi->fps_p) do_fps(mi); #endif glFlush(); #ifdef HAVE_GLUT glutSwapBuffers(); #else glXSwapBuffers(dpy, window); #endif } #ifdef HAVE_GLUT /* anything that needs to be cleaned up goes here */ static void unmain() { glutDestroyWindow(bp->window); free(bp); } static void ui_init(int *, char **); int main(int argc, char ** argv) { bp = malloc(sizeof(struct glsnake_cfg)); memset(bp, 0, sizeof(struct glsnake_cfg)); bp->width = 640; bp->height = 480; ui_init(&argc, argv); gettime(&bp->last_iteration); memcpy(&bp->last_morph, &bp->last_iteration, sizeof(snaketime)); srand((unsigned int)GETSECS(bp->last_iteration)); bp->prev_colour = bp->next_colour = COLOUR_ACYCLIC; bp->next_model = RAND(models); bp->prev_model = 0; start_morph(bp->prev_model, 1); glsnake_init(); atexit(unmain); glutSwapBuffers(); glutMainLoop(); return 0; } #endif /* * GLUT FUNCTIONS */ #ifdef HAVE_GLUT /* trackball quaternions */ static float cumquat[4] = {0.0,0.0,0.0,0.0}, oldquat[4] = {0.0,0.0,0.0,0.1}; /* rotation matrix */ static float rotation[16]; /* mouse drag vectors: start and end */ static float mouse_start[3], mouse_end[3]; /* dragging boolean */ static int dragging = 0; /* this function calculates the rotation matrix based on the quaternions * generated from the mouse drag vectors */ static void calc_rotation() { double Nq, s; double xs, ys, zs, wx, wy, wz, xx, xy, xz, yy, yz, zz; /* this bit ripped from Shoemake's quaternion notes from SIGGRAPH */ Nq = cumquat[0] * cumquat[0] + cumquat[1] * cumquat[1] + cumquat[2] * cumquat[2] + cumquat[3] * cumquat[3]; s = (Nq > 0.0) ? (2.0 / Nq) : 0.0; xs = cumquat[0] * s; ys = cumquat[1] * s; zs = cumquat[2] * s; wx = cumquat[3] * xs; wy = cumquat[3] * ys; wz = cumquat[3] * zs; xx = cumquat[0] * xs; xy = cumquat[0] * ys; xz = cumquat[0] * zs; yy = cumquat[1] * ys; yz = cumquat[1] * zs; zz = cumquat[2] * zs; rotation[0] = 1.0 - (yy + zz); rotation[1] = xy + wz; rotation[2] = xz - wy; rotation[4] = xy - wz; rotation[5] = 1.0 - (xx + zz); rotation[6] = yz + wx; rotation[8] = xz + wy; rotation[9] = yz - wx; rotation[10] = 1.0 - (xx + yy); rotation[3] = rotation[7] = rotation[11] = 0.0; rotation[12] = rotation[13] = rotation[14] = 0.0; rotation[15] = 1.0; } static inline void ui_mousedrag() { glMultMatrixf(rotation); } static void ui_keyboard(unsigned char c, int x__attribute__((__unused__)), int y __attribute__((__unused__))) { int i; switch (c) { case 27: /* ESC */ case 'q': exit(0); break; case 'e': explode += DEF_EXPLODE; glutPostRedisplay(); break; case 'E': explode -= DEF_EXPLODE; if (explode < 0.0) explode = 0.0; glutPostRedisplay(); break; case '.': /* next model */ bp->next_model++; bp->next_model %= models; start_morph(bp->next_model, 0); /* Reset last_morph time */ gettime(&bp->last_morph); break; case ',': /* previous model */ bp->next_model = (bp->next_model + (int)models - 1) % (int)models; start_morph(bp->next_model, 0); /* Reset bp->last_morph time */ gettime(&bp->last_morph); break; case '+': angvel += DEF_ANGVEL; break; case '-': if (angvel > DEF_ANGVEL) angvel -= DEF_ANGVEL; break; case 'i': if (interactive) { /* Reset last_iteration and last_morph time */ gettime(&bp->last_iteration); gettime(&bp->last_morph); } interactive = 1 - interactive; glutPostRedisplay(); break; case 'w': wireframe = 1 - wireframe; if (wireframe) glDisable(GL_LIGHTING); else glEnable(GL_LIGHTING); glutPostRedisplay(); break; case 'a': transparent = 1 - transparent; if (transparent) { glEnable(GL_BLEND); } else { glDisable(GL_BLEND); } break; case 'p': if (bp->paused) { /* unpausing, reset last_iteration and last_morph time */ gettime(&bp->last_iteration); gettime(&bp->last_morph); } bp->paused = 1 - bp->paused; break; case 'd': /* dump the current model so we can add it! */ printf("# %s\nnoname:\t", model[bp->next_model].name); { int i; for (i = 0; i < NODE_COUNT; i++) { if (bp->node[i] == ZERO) printf("Z"); else if (bp->node[i] == LEFT) printf("L"); else if (bp->node[i] == PIN) printf("P"); else if (bp->node[i] == RIGHT) printf("R"); /* else printf("%f", node[i].curAngle); */ if (i < NODE_COUNT - 1) printf(" "); } } printf("\n"); break; case 'f': bp->fullscreen = 1 - bp->fullscreen; if (bp->fullscreen) { bp->old_width = bp->width; bp->old_height = bp->height; glutFullScreen(); } else { glutReshapeWindow(bp->old_width, bp->old_height); glutPositionWindow(50,50); } break; case 't': titles = 1 - titles; if (interactive || bp->paused) glutPostRedisplay(); break; case 'c': altcolour = 1 - altcolour; break; case 'z': zoom += 1.0; glsnake_reshape(bp->width, bp->height); break; case 'Z': zoom -= 1.0; glsnake_reshape(bp->width, bp->height); break; default: break; } } static void ui_special(int key, int x__attribute__((__unused__)), int y __attribute__((__unused__))) { float *destAngle = &(model[bp->next_model].node[bp->selected]); int unknown_key = 0; if (interactive) { switch (key) { case GLUT_KEY_UP: bp->selected = (bp->selected + (NODE_COUNT - 2)) % (NODE_COUNT - 1); break; case GLUT_KEY_DOWN: bp->selected = (bp->selected + 1) % (NODE_COUNT - 1); break; case GLUT_KEY_LEFT: *destAngle = fmod(*destAngle+(LEFT), 360); bp->morphing = bp->new_morph = 1; break; case GLUT_KEY_RIGHT: *destAngle = fmod(*destAngle+(RIGHT), 360); bp->morphing = bp->new_morph = 1; break; case GLUT_KEY_HOME: start_morph(STRAIGHT_MODEL, 0); break; default: unknown_key = 1; break; } } calc_snake_metrics(); if (!unknown_key) glutPostRedisplay(); } static void ui_mouse(int button, int state, int x, int y) { if (button==0) { switch (state) { case GLUT_DOWN: dragging = 1; mouse_start[0] = M_SQRT1_2 * (x - (bp->width / 2.0)) / (bp->width / 2.0); mouse_start[1] = M_SQRT1_2 * ((bp->height / 2.0) - y) / (bp->height / 2.0); mouse_start[2] = sqrt((double)(1-(mouse_start[0]*mouse_start[0]+mouse_start[1]*mouse_start[1]))); break; case GLUT_UP: dragging = 0; oldquat[0] = cumquat[0]; oldquat[1] = cumquat[1]; oldquat[2] = cumquat[2]; oldquat[3] = cumquat[3]; break; default: break; } } glutPostRedisplay(); } static void ui_motion(int x, int y) { double norm; float q[4]; if (dragging) { /* construct the motion end vector from the x,y position on the * window */ mouse_end[0] = M_SQRT1_2 * (x - (bp->width/ 2.0)) / (bp->width / 2.0); mouse_end[1] = M_SQRT1_2 * ((bp->height / 2.0) - y) / (bp->height / 2.0); /* calculate the normal of the vector... */ norm = mouse_end[0] * mouse_end[0] + mouse_end[1] * mouse_end[1]; /* check if norm is outside the sphere and wraparound if necessary */ if (norm > 1.0) { mouse_end[0] = -mouse_end[0]; mouse_end[1] = -mouse_end[1]; mouse_end[2] = sqrt(norm - 1); } else { /* the z value comes from projecting onto an elliptical spheroid */ mouse_end[2] = sqrt(1 - norm); } /* now here, build a quaternion from mouse_start and mouse_end */ q[0] = mouse_start[1] * mouse_end[2] - mouse_start[2] * mouse_end[1]; q[1] = mouse_start[2] * mouse_end[0] - mouse_start[0] * mouse_end[2]; q[2] = mouse_start[0] * mouse_end[1] - mouse_start[1] * mouse_end[0]; q[3] = mouse_start[0] * mouse_end[0] + mouse_start[1] * mouse_end[1] + mouse_start[2] * mouse_end[2]; /* new rotation is the product of the new one and the old one */ cumquat[0] = q[3] * oldquat[0] + q[0] * oldquat[3] + q[1] * oldquat[2] - q[2] * oldquat[1]; cumquat[1] = q[3] * oldquat[1] + q[1] * oldquat[3] + q[2] * oldquat[0] - q[0] * oldquat[2]; cumquat[2] = q[3] * oldquat[2] + q[2] * oldquat[3] + q[0] * oldquat[1] - q[1] * oldquat[0]; cumquat[3] = q[3] * oldquat[3] - q[0] * oldquat[0] - q[1] * oldquat[1] - q[2] * oldquat[2]; calc_rotation(); } glutPostRedisplay(); } static void ui_init(int * argc, char ** argv) { glutInit(argc, argv); glutInitDisplayMode(GLUT_RGBA | GLUT_DOUBLE | GLUT_DEPTH); glutInitWindowSize(bp->width, bp->height); bp->window = glutCreateWindow("glsnake"); glutDisplayFunc(glsnake_display); glutReshapeFunc(glsnake_reshape); glutIdleFunc(glsnake_idle); glutKeyboardFunc(ui_keyboard); glutSpecialFunc(ui_special); glutMouseFunc(ui_mouse); glutMotionFunc(ui_motion); yangvel = DEF_YANGVEL; zangvel = DEF_ZANGVEL; explode = DEF_EXPLODE; angvel = DEF_ANGVEL; statictime = DEF_STATICTIME; altcolour = DEF_ALTCOLOUR; titles = DEF_TITLES; interactive = DEF_INTERACTIVE; zoom = DEF_ZOOM; wireframe = DEF_WIREFRAME; transparent = DEF_TRANSPARENT; } #endif /* HAVE_GLUT */ XSCREENSAVER_MODULE ("GLSnake", glsnake) xscreensaver-5.36/hacks/glx/boxed.c000664 000767 000024 00000114666 12710313166 017306 0ustar00jwzstaff000000 000000 /* boxed --- 3D bouncing balls that explode */ #if 0 static const char sccsid[] = "@(#)boxed.c 0.9 01/09/26 xlockmore"; #endif /*- * Permission to use, copy, modify, and distribute this software and its * documentation for any purpose and without fee is hereby granted, * provided that the above copyright notice appear in all copies and that * both that copyright notice and this permission notice appear in * supporting documentation. * * This file is provided AS IS with no warranties of any kind. The author * shall have no liability with respect to the infringement of copyrights, * trade secrets or any patents by this file or any part thereof. In no * event will the author be liable for any lost revenue or profits or * other special, indirect and consequential damages. * * Revision History: * * 2001: Written by Sander van Grieken * as an OpenGL screensaver for the xscreensaver package. * Lots of hardcoded values still in place. Also, there are some * copy/paste leftovers from the gears hack. opts don't work. * * 2005: opts work. added options -balls, -ballsize, -explosion * * 2006: opts work. added option -decay * * 2008: opts work. added option -momentum * */ #include "boxed.h" /* **---------------------------------------------------------------------------- ** Defines **---------------------------------------------------------------------------- */ #ifdef STANDALONE # define DEFAULTS "*delay: 15000 \n" \ "*showFPS: False \n" \ "*wireframe: False \n" # define refresh_boxed 0 # define boxed_handle_event 0 # include "xlockmore.h" /* from the xscreensaver distribution */ #else /* !STANDALONE */ # include "xlock.h" /* from the xlockmore distribution */ #endif /* !STANDALONE */ #ifdef USE_GL # define DEF_SPEED "0.5" # define DEF_BALLS "20" # define DEF_BALLSIZE "3.0" # define DEF_EXPLOSION "15.0" # define DEF_DECAY "0.07" # define DEF_MOMENTUM "0.6" #undef countof #define countof(x) (int)(sizeof((x))/sizeof((*x))) #undef rnd #define rnd() (frand(1.0)) static GLfloat speed; /* jwz -- overall speed factor applied to all motion */ static int cfg_balls; static GLfloat cfg_ballsize; static GLfloat cfg_explosion; static GLfloat cfg_decay; static GLfloat cfg_momentum; static XrmOptionDescRec opts[] = { {"-speed", ".boxed.speed", XrmoptionSepArg, 0}, {"-balls", ".boxed.balls", XrmoptionSepArg, 0}, {"-ballsize", ".boxed.ballsize", XrmoptionSepArg, 0}, {"-explosion", ".boxed.explosion", XrmoptionSepArg, 0}, {"-decay", ".boxed.decay", XrmoptionSepArg, 0}, {"-momentum", ".boxed.momentum", XrmoptionSepArg, 0}, }; static argtype vars[] = { {&speed, "speed", "Speed", DEF_SPEED, t_Float}, {&cfg_balls, "balls", "Balls", DEF_BALLS, t_Int}, {&cfg_ballsize, "ballsize", "Ball Size", DEF_BALLSIZE, t_Float}, {&cfg_explosion, "explosion", "Explosion", DEF_EXPLOSION, t_Float}, {&cfg_decay, "decay", "Explosion Decay", DEF_DECAY, t_Float}, {&cfg_momentum, "momentum", "Explosion Momentum", DEF_MOMENTUM, t_Float}, }; ENTRYPOINT ModeSpecOpt boxed_opts = {countof(opts), opts, countof(vars), vars, NULL}; #ifdef USE_MODULES ModStruct boxed_description = { "boxed", "init_boxed", "draw_boxed", "release_boxed", "draw_boxed", "init_boxed", NULL, &boxed_opts, 1000, 1, 2, 1, 4, 1.0, "", "Shows GL's boxed balls", 0, NULL}; #endif #define BOOL int #define TRUE 1 #define FALSE 0 /* camera */ #define CAM_HEIGHT 80.0f #define CAMDISTANCE_MIN 35.0 #define CAMDISTANCE_MAX 150.0 #define CAMDISTANCE_SPEED 1.5 #define LOOKAT_R 30.0 /* rendering the sphere */ #define MESH_SIZE 10 #define SPHERE_VERTICES (2+MESH_SIZE*MESH_SIZE*2) #define SPHERE_INDICES ((MESH_SIZE*4 + MESH_SIZE*4*(MESH_SIZE-1))*3) /* **----------------------------------------------------------------------------- ** Typedefs **----------------------------------------------------------------------------- */ typedef struct { GLfloat x; GLfloat y; GLfloat z; } vectorf; typedef struct { vectorf loc; vectorf dir; vectorf color; float radius; BOOL bounced; int offside; BOOL justcreated; } ball; typedef struct { int num_balls; float ballsize; float explosion; ball *balls; } ballman; typedef struct { vectorf loc; vectorf dir; BOOL far; int gone; } tri; typedef struct { int num_tri; int lifetime; float scalefac; float explosion; float decay; float momentum; vectorf color; tri *tris; GLint *indices; vectorf *normals; vectorf *vertices; } triman; typedef struct { int numballs; float ballsize; float explosion; float decay; float momentum; BOOL textures; BOOL transparent; float camspeed; } boxed_config; typedef struct { float cam_x_speed, cam_z_speed, cam_y_speed; boxed_config config; float tic; float camtic; vectorf spherev[SPHERE_VERTICES]; GLint spherei[SPHERE_INDICES]; ballman bman; triman *tman; GLXContext *glx_context; GLuint listobjects; GLuint gllists[3]; int list_polys[3]; Window window; BOOL stop; char *tex1; } boxedstruct; #define GLL_PATTERN 0 #define GLL_BALL 1 #define GLL_BOX 2 /* **---------------------------------------------------------------------------- ** Local Variables **---------------------------------------------------------------------------- */ static boxedstruct *boxed = NULL; /* **---------------------------------------------------------------------------- ** Functions **---------------------------------------------------------------------------- */ /* * Add 2 vectors */ static inline void addvectors(vectorf *dest, vectorf *s1, vectorf *s2) { dest->x = s1->x + s2->x; dest->y = s1->y + s2->y; dest->z = s1->z + s2->z; } /* * Sub 2 vectors */ static inline void subvectors(vectorf *dest, vectorf* s1, vectorf *s2) { dest->x = s1->x - s2->x; dest->y = s1->y - s2->y; dest->z = s1->z - s2->z; } /* * Multiply vector with scalar (scale vector) */ static inline void scalevector(vectorf *dest, vectorf *source, GLfloat sc) { dest->x = source->x * sc; dest->y = source->y * sc; dest->z = source->z * sc; } /* * Copy vector */ static inline void copyvector(vectorf *dest, vectorf* source) { dest->x = source->x; dest->y = source->y; dest->z = source->z; } static inline GLfloat dotproduct(vectorf * v1, vectorf * v2) { return v1->x * v2->x + v1->y * v2->y + v1->z * v2->z; } static inline GLfloat squaremagnitude(vectorf * v) { return v->x * v->x + v->y * v->y + v->z * v->z; } static inline GLfloat squaremagnitudehorz(vectorf * v) { return v->x * v->x + v->z * v->z; } /* * Generate the Sphere data * * Input: */ static void generatesphere(boxedstruct *gp) { float dj = M_PI/(MESH_SIZE+1.0f); float di = M_PI/MESH_SIZE; int v; /* vertex offset */ int ind; /* indices offset */ int i,j,si; GLfloat r_y_plane, h_y_plane; vectorf *spherev; GLint *spherei; /* * generate the sphere data * vertices 0 and 1 are the north and south poles */ spherei = gp->spherei; spherev = gp->spherev; spherev[0].x = 0.0f; spherev[0].y =1.0f; spherev[0].z = 0.0f; spherev[1].x = 0.0f; spherev[1].y =-1.0f; spherev[1].z = 0.0f; for (j=0; jloc.x = 5-10*rnd(); newball->loc.y = 35+20*rnd(); newball->loc.z = 5-10*rnd(); newball->dir.x = (0.5f-rnd()) * speed; newball->dir.y = 0.0; newball->dir.z = (0.5-rnd()) * speed; newball->offside = 0; newball->bounced = FALSE; newball->radius = cfg_ballsize; while (r+g+b < 1.8f ) { newball->color.x = r=rnd(); newball->color.y = g=rnd(); newball->color.z = b=rnd(); } newball->justcreated = TRUE; } /* Update position of each ball */ static void updateballs(ballman *bman) { register int b,j; vectorf dvect,richting,relspeed,influence; GLfloat squaredist; for (b=0;bnum_balls;b++) { GLfloat gravity = 0.30f * speed; /* apply gravity */ bman->balls[b].dir.y -= gravity; /* apply movement */ addvectors(&bman->balls[b].loc,&bman->balls[b].loc,&bman->balls[b].dir); /* boundary check */ if (bman->balls[b].loc.y < bman->balls[b].radius) { /* ball onder bodem? (bodem @ y=0) */ if ((bman->balls[b].loc.x < -95.0) || (bman->balls[b].loc.x > 95.0) || (bman->balls[b].loc.z < -95.0) || (bman->balls[b].loc.z > 95.0)) { if (bman->balls[b].loc.y < -2000.0) createball(&bman->balls[b]); } else { bman->balls[b].loc.y = bman->balls[b].radius + (bman->balls[b].radius - bman->balls[b].loc.y); bman->balls[b].dir.y = -bman->balls[b].dir.y; if (bman->balls[b].offside) { bman->balls[b].bounced = TRUE; /* temporary disable painting ball */ scalevector(&bman->balls[b].dir,&bman->balls[b].dir,0.80f); if (squaremagnitude(&bman->balls[b].dir) < 0.08f) { createball(&bman->balls[b]); } if (squaremagnitudehorz(&bman->balls[b].dir) < 0.005f) { createball(&bman->balls[b]); } } } } if (!bman->balls[b].offside) { if (bman->balls[b].loc.x - bman->balls[b].radius < -20.0f) { /* x ondergrens */ if (bman->balls[b].loc.y > 41+bman->balls[b].radius) bman->balls[b].offside=1; else { bman->balls[b].dir.x = -bman->balls[b].dir.x; bman->balls[b].loc.x = -20.0f + bman->balls[b].radius; } } if (bman->balls[b].loc.x + bman->balls[b].radius > 20.0f) { /* x bovengrens */ if (bman->balls[b].loc.y > 41+bman->balls[b].radius) bman->balls[b].offside=1; else { bman->balls[b].dir.x = -bman->balls[b].dir.x; bman->balls[b].loc.x = 20.0f - bman->balls[b].radius; } } if (bman->balls[b].loc.z - bman->balls[b].radius < -20.0f) { /* z ondergrens */ if (bman->balls[b].loc.y > 41+bman->balls[b].radius) bman->balls[b].offside=1; else { bman->balls[b].dir.z = -bman->balls[b].dir.z; bman->balls[b].loc.z = -20.0f + bman->balls[b].radius; } } if (bman->balls[b].loc.z + bman->balls[b].radius > 20.0f) { /* z bovengrens */ if (bman->balls[b].loc.y > 41+bman->balls[b].radius) bman->balls[b].offside=1; else { bman->balls[b].dir.z = -bman->balls[b].dir.z; bman->balls[b].loc.z = 20.0f - bman->balls[b].radius; } } } /* end if !offside */ /* check voor stuiteren */ for (j=b+1;jnum_balls;j++) { squaredist = (bman->balls[b].radius * bman->balls[b].radius) + (bman->balls[j].radius * bman->balls[j].radius); subvectors(&dvect,&bman->balls[b].loc,&bman->balls[j].loc); if ( squaremagnitude(&dvect) < squaredist ) { /* balls b and j touch */ subvectors(&richting,&bman->balls[j].loc,&bman->balls[b].loc); subvectors(&relspeed,&bman->balls[b].dir,&bman->balls[j].dir); /* calc mutual influence direction and magnitude */ scalevector(&influence,&richting,(dotproduct(&richting,&relspeed)/squaremagnitude(&richting))); subvectors(&bman->balls[b].dir,&bman->balls[b].dir,&influence); addvectors(&bman->balls[j].dir,&bman->balls[j].dir,&influence); addvectors(&bman->balls[b].loc,&bman->balls[b].loc,&bman->balls[b].dir); addvectors(&bman->balls[j].loc,&bman->balls[j].loc,&bman->balls[j].dir); subvectors(&dvect,&bman->balls[b].loc,&bman->balls[j].loc); while (squaremagnitude(&dvect) < squaredist) { addvectors(&bman->balls[b].loc,&bman->balls[b].loc,&bman->balls[b].dir); addvectors(&bman->balls[j].loc,&bman->balls[j].loc,&bman->balls[j].dir); subvectors(&dvect,&bman->balls[b].loc,&bman->balls[j].loc); } } } /* end for j */ } /* end for b */ } /* * explode ball into triangles */ static void createtrisfromball(triman* tman, vectorf *spherev, GLint *spherei, int ind_num, ball *b) { int pos; float explosion; float momentum; float scale; register int i; vectorf avgdir,dvect,mvect; tman->scalefac = b->radius; copyvector(&tman->color,&b->color); explosion = 1.0f + tman->explosion * 2.0 * rnd(); momentum = tman->momentum; tman->num_tri = ind_num/3; /* reserveer geheugen voor de poly's in een bal */ tman->tris = (tri *)malloc(tman->num_tri * sizeof(tri)); tman->vertices = (vectorf *)malloc(ind_num * sizeof(vectorf)); tman->normals = (vectorf *)malloc(ind_num/3 * sizeof(vectorf)); for (i=0; i<(tman->num_tri); i++) { tman->tris[i].far = FALSE; tman->tris[i].gone = 0; pos = i * 3; /* kopieer elke poly apart naar een tri structure */ copyvector(&tman->vertices[pos+0],&spherev[spherei[pos+0]]); copyvector(&tman->vertices[pos+1],&spherev[spherei[pos+1]]); copyvector(&tman->vertices[pos+2],&spherev[spherei[pos+2]]); /* Calculate average direction of shrapnel */ addvectors(&avgdir,&tman->vertices[pos+0],&tman->vertices[pos+1]); addvectors(&avgdir,&avgdir,&tman->vertices[pos+2]); scalevector(&avgdir,&avgdir,0.33333); /* should normalize first, NYI */ copyvector(&tman->normals[i],&avgdir); /* copy de lokatie */ addvectors(&tman->tris[i].loc,&b->loc,&avgdir); /* en translate alle triangles terug naar hun eigen oorsprong */ tman->vertices[pos+0].x -= avgdir.x; tman->vertices[pos+0].y -= avgdir.y; tman->vertices[pos+0].z -= avgdir.z; tman->vertices[pos+1].x -= avgdir.x; tman->vertices[pos+1].y -= avgdir.y; tman->vertices[pos+1].z -= avgdir.z; tman->vertices[pos+2].x -= avgdir.x; tman->vertices[pos+2].y -= avgdir.y; tman->vertices[pos+2].z -= avgdir.z; /* alwaar opschaling plaatsvindt */ scale = b->radius * 2; scalevector(&tman->vertices[pos+0],&tman->vertices[pos+0],scale); scalevector(&tman->vertices[pos+1],&tman->vertices[pos+1],scale); scalevector(&tman->vertices[pos+2],&tman->vertices[pos+2],scale); tman->vertices[pos+0].x += avgdir.x; tman->vertices[pos+0].y += avgdir.y; tman->vertices[pos+0].z += avgdir.z; tman->vertices[pos+1].x += avgdir.x; tman->vertices[pos+1].y += avgdir.y; tman->vertices[pos+1].z += avgdir.z; tman->vertices[pos+2].x += avgdir.x; tman->vertices[pos+2].y += avgdir.y; tman->vertices[pos+2].z += avgdir.z; /* bereken nieuwe richting */ scalevector(&tman->tris[i].dir,&avgdir,explosion); dvect.x = (0.1f - 0.2f*rnd()); dvect.y = (0.15f - 0.3f*rnd()); dvect.z = (0.1f - 0.2f*rnd()); addvectors(&tman->tris[i].dir,&tman->tris[i].dir,&dvect); /* add ball's momentum to each piece of the exploded ball */ mvect.x = b->dir.x * momentum; mvect.y = 0; mvect.z = b->dir.z * momentum; addvectors(&tman->tris[i].dir,&tman->tris[i].dir,&mvect); } } /* * update position of each tri */ static void updatetris(triman *t) { int b; GLfloat xd,zd; for (b=0;bnum_tri;b++) { /* the exploded triangles disappear over time */ if (rnd() < t->decay) { if (t->tris[b].gone == 0) t->tris[b].gone = 1; } /* apply gravity */ t->tris[b].dir.y -= (0.1f * speed); /* apply movement */ addvectors(&t->tris[b].loc,&t->tris[b].loc,&t->tris[b].dir); /* boundary check */ if (t->tris[b].far) continue; if (t->tris[b].loc.y < 0) { /* onder bodem ? */ if ((t->tris[b].loc.x > -95.0f) & (t->tris[b].loc.x < 95.0f) & (t->tris[b].loc.z > -95.0f) & (t->tris[b].loc.z < 95.0f)) { /* in veld */ t->tris[b].dir.y = -(t->tris[b].dir.y); t->tris[b].loc.y = -t->tris[b].loc.y; scalevector(&t->tris[b].dir,&t->tris[b].dir,0.80f); /* dampening */ } else { t->tris[b].far = TRUE; continue; } } if ((t->tris[b].loc.x > -21.0f) & (t->tris[b].loc.x < 21.0f) & (t->tris[b].loc.z > -21.0f) & (t->tris[b].loc.z < 21.0f)) { /* in box? */ xd = zd = 999.0f; /* big */ if ((t->tris[b].loc.x > -21.0f) & (t->tris[b].loc.x < 0)) { xd = t->tris[b].loc.x + 21.0f; } if ((t->tris[b].loc.x < 21.0f) & (t->tris[b].loc.x > 0)) { xd = 21.0f - t->tris[b].loc.x; } if ((t->tris[b].loc.z > -21.0f) & (t->tris[b].loc.z < 0)) { zd = t->tris[b].loc.z + 21.0f; } if ((t->tris[b].loc.z < 21.0f) & (t->tris[b].loc.z > 0)) { zd = 21.0f - t->tris[b].loc.z; } if (xd < zd) { /* bounce x */ if (t->tris[b].dir.x < 0) t->tris[b].loc.x += (21.0f - t->tris[b].loc.x); else t->tris[b].loc.x += (-21.0f - t->tris[b].loc.x); t->tris[b].dir.x = -t->tris[b].dir.x; } else { /* bounce z */ if (t->tris[b].dir.z < 0) t->tris[b].loc.z += (21.0f - t->tris[b].loc.z); else t->tris[b].loc.z += (-21.0f - t->tris[b].loc.z); t->tris[b].dir.z = -t->tris[b].dir.z; } } } /* end for b */ } /* * free memory allocated by a tri manager */ static void freetris(triman *t) { if (!t) return; if (t->tris) free(t->tris); if (t->vertices) free(t->vertices); if (t->normals) free(t->normals); t->tris = NULL; t->vertices = NULL; t->normals = NULL; t->num_tri = 0; t->lifetime = 0; } /* *load defaults in config structure */ static void setdefaultconfig(boxed_config *config) { cfg_balls = MAX(3,MIN(40,cfg_balls)); cfg_ballsize = MAX(1.0f,MIN(5.0f,cfg_ballsize)); cfg_explosion = MAX(0.0f,MIN(50.0f,cfg_explosion)); cfg_decay = MAX(0.02f,MIN(0.90f,cfg_decay)); cfg_momentum = MAX(0.0f,MIN(1.0f,cfg_momentum)); config->numballs = cfg_balls; config->textures = TRUE; config->transparent = FALSE; config->explosion = cfg_explosion; config->decay = cfg_decay; config->momentum = cfg_momentum; config->ballsize = cfg_ballsize; config->camspeed = 35.0f; } /* * draw bottom */ static int drawfilledbox(boxedstruct *boxed, int wire) { /* draws texture filled box, top is drawn using the entire texture, the sides are drawn using the edge of the texture */ int polys = 0; /* front */ glBegin(wire ? GL_LINE_LOOP : GL_QUADS); glTexCoord2f(0,1); glVertex3f(-1.0,1.0,1.0); glTexCoord2f(1,1); glVertex3f(1.0,1.0,1.0); glTexCoord2f(1,1); glVertex3f(1.0,-1.0,1.0); glTexCoord2f(0,1); glVertex3f(-1.0,-1.0,1.0); polys++; /* rear */ glTexCoord2f(0,1); glVertex3f(1.0,1.0,-1.0); glTexCoord2f(1,1); glVertex3f(-1.0,1.0,-1.0); glTexCoord2f(1,1); glVertex3f(-1.0,-1.0,-1.0); glTexCoord2f(0,1); glVertex3f(1.0,-1.0,-1.0); polys++; /* left */ glTexCoord2f(1,1); glVertex3f(-1.0,1.0,1.0); glTexCoord2f(1,1); glVertex3f(-1.0,-1.0,1.0); glTexCoord2f(0,1); glVertex3f(-1.0,-1.0,-1.0); glTexCoord2f(0,1); glVertex3f(-1.0,1.0,-1.0); polys++; /* right */ glTexCoord2f(0,1); glVertex3f(1.0,1.0,1.0); glTexCoord2f(1,1); glVertex3f(1.0,1.0,-1.0); glTexCoord2f(1,1); glVertex3f(1.0,-1.0,-1.0); glTexCoord2f(0,1); glVertex3f(1.0,-1.0,1.0); polys++; /* top */ glTexCoord2f(0.0,0.0); glVertex3f(-1.0,1.0,1.0); glTexCoord2f(0.0,1.0); glVertex3f(-1.0,1.0,-1.0); glTexCoord2f(1.0,1.0); glVertex3f(1.0,1.0,-1.0); glTexCoord2f(1.0,0.0); glVertex3f(1.0,1.0,1.0); polys++; /* bottom */ glTexCoord2f(0,0); glVertex3f(-1.0,-1.0,1.0); glTexCoord2f(0,1); glVertex3f(-1.0,-1.0,-1.0); glTexCoord2f(1,1); glVertex3f(1.0,-1.0,-1.0); glTexCoord2f(1,0); glVertex3f(1.0,-1.0,1.0); polys++; glEnd(); return polys; } /* * Draw a box made of lines */ static int drawbox(boxedstruct *boxed) { int polys = 0; /* top */ glBegin(GL_LINE_STRIP); glVertex3f(-1.0,1.0,1.0); glVertex3f(-1.0,1.0,-1.0); polys++; glVertex3f(1.0,1.0,-1.0); polys++; glVertex3f(1.0,1.0,1.0); polys++; glVertex3f(-1.0,1.0,1.0); polys++; glEnd(); /* bottom */ glBegin(GL_LINE_STRIP); glVertex3f(-1.0,-1.0,1.0); glVertex3f(1.0,-1.0,1.0); polys++; glVertex3f(1.0,-1.0,-1.0); polys++; glVertex3f(-1.0,-1.0,-1.0); polys++; glVertex3f(-1.0,-1.0,1.0); polys++; glEnd(); /* connect top & bottom */ glBegin(GL_LINES); glVertex3f(-1.0,1.0,1.0); glVertex3f(-1.0,-1.0,1.0); polys++; glVertex3f(1.0,1.0,1.0); glVertex3f(1.0,-1.0,1.0); polys++; glVertex3f(1.0,1.0,-1.0); glVertex3f(1.0,-1.0,-1.0); polys++; glVertex3f(-1.0,1.0,-1.0); glVertex3f(-1.0,-1.0,-1.0); polys++; glEnd(); return polys; } /* * Draw ball */ static int drawball(boxedstruct *gp, ball *b, int wire) { int polys = 0; int i,pos,cnt; GLint *spherei = gp->spherei; vectorf *spherev = gp->spherev; GLfloat col[3]; glPushMatrix(); glTranslatef(b->loc.x,b->loc.y,b->loc.z); glScalef(b->radius,b->radius,b->radius); glColor3f(b->color.x,b->color.y,b->color.z); col[0] = b->color.x; col[1] = b->color.y; col[2] = b->color.z; glMaterialfv(GL_FRONT, GL_DIFFUSE, col); col[0] *= 0.5; col[1] *= 0.5; col[2] *= 0.5; glMaterialfv(GL_FRONT, GL_EMISSION,col); if (!gp->gllists[GLL_BALL]) { glNewList(gp->listobjects + GLL_BALL,GL_COMPILE); glBegin(wire ? GL_LINES : GL_TRIANGLES); cnt = SPHERE_INDICES/3; for (i=0; ilist_polys[GLL_BALL]++; glVertex3f(spherev[spherei[pos+1]].x,spherev[spherei[pos+1]].y,spherev[spherei[pos+1]].z); if (wire) glVertex3f(spherev[spherei[pos+1]].x,spherev[spherei[pos+1]].y,spherev[spherei[pos+1]].z); glNormal3f(spherev[spherei[pos+2]].x,spherev[spherei[pos+2]].y,spherev[spherei[pos+2]].z); glVertex3f(spherev[spherei[pos+2]].x,spherev[spherei[pos+2]].y,spherev[spherei[pos+2]].z); gp->list_polys[GLL_BALL]++; } glEnd(); glEndList(); gp->gllists[GLL_BALL] = 1; } else { glCallList(gp->listobjects + GLL_BALL); polys += gp->list_polys[GLL_BALL]; } glPopMatrix(); return polys; } /* * Draw a single triangle */ static void drawtri(triman *t, int wire, int i) { const vectorf *spherev = t->vertices + i*3; const vectorf *loc = &t->tris[i].loc; glNormal3f(t->normals[i].x,t->normals[i].y,t->normals[i].z); glVertex3f(spherev[0].x+loc->x,spherev[0].y+loc->y,spherev[0].z+loc->z); glVertex3f(spherev[1].x+loc->x,spherev[1].y+loc->y,spherev[1].z+loc->z); if (wire) glVertex3f(spherev[1].x+loc->x,spherev[1].y+loc->y,spherev[1].z+loc->z); glVertex3f(spherev[2].x+loc->x,spherev[2].y+loc->y,spherev[2].z+loc->z); if (wire) { glVertex3f(spherev[2].x+loc->x,spherev[2].y+loc->y,spherev[2].z+loc->z); glVertex3f(spherev[0].x+loc->x,spherev[0].y+loc->y,spherev[0].z+loc->z); } } /* * Draw all triangles in triman */ static int drawtriman(triman *t, int wire) { int polys = 0; int i; GLfloat col[3]; glPushMatrix(); glColor3f(t->color.x,t->color.y,t->color.z); col[0] = t->color.x; col[1] = t->color.y; col[2] = t->color.z; glMaterialfv(GL_FRONT, GL_DIFFUSE, col); col[0] *= 0.3; col[1] *= 0.3; col[2] *= 0.3; glMaterialfv(GL_FRONT, GL_EMISSION,col); glBegin(wire ? GL_LINES : GL_TRIANGLES); for (i=0; inum_tri; i++) { if (t->tris[i].gone > 3) { continue; } if (t->tris[i].gone > 0) { glColor3f(t->color.x,t->color.y,t->color.z); col[0] = 1.0f; col[1] = 1.0f; col[2] = 1.0f; glMaterialfv(GL_FRONT, GL_DIFFUSE, col); col[0] *= 0.8; col[1] *= 0.8; col[2] *= 0.8; glMaterialfv(GL_FRONT, GL_EMISSION,col); drawtri(t, wire, i); polys++; glColor3f(t->color.x,t->color.y,t->color.z); col[0] = t->color.x; col[1] = t->color.y; col[2] = t->color.z; glMaterialfv(GL_FRONT, GL_DIFFUSE, col); col[0] *= 0.3; col[1] *= 0.3; col[2] *= 0.3; glMaterialfv(GL_FRONT, GL_EMISSION,col); t->tris[i].gone++; continue; } drawtri(t, wire, i); polys++; } glEnd(); glPopMatrix(); return polys; } /* * draw floor pattern */ static int drawpattern(boxedstruct *gp) { int polys = 0; if (!gp->gllists[GLL_PATTERN]) { glNewList(gp->listobjects + GLL_PATTERN, GL_COMPILE); glBegin(GL_LINE_STRIP); glVertex3f(-25.0f, 0.0f, 35.0f); glVertex3f(-15.0f, 0.0f, 35.0f); gp->list_polys[GLL_PATTERN]++; glVertex3f(-5.0f, 0.0f, 25.0f); gp->list_polys[GLL_PATTERN]++; glVertex3f(5.0f, 0.0f, 25.0f); gp->list_polys[GLL_PATTERN]++; glVertex3f(15.0f, 0.0f, 35.0f); gp->list_polys[GLL_PATTERN]++; glVertex3f(25.0f, 0.0f, 35.0f); gp->list_polys[GLL_PATTERN]++; glVertex3f(35.0f, 0.0f, 25.0f); gp->list_polys[GLL_PATTERN]++; glVertex3f(35.0f, 0.0f, 15.0f); gp->list_polys[GLL_PATTERN]++; glVertex3f(25.0f, 0.0f, 5.0f); gp->list_polys[GLL_PATTERN]++; glVertex3f(25.0f, 0.0f, -5.0f); gp->list_polys[GLL_PATTERN]++; glVertex3f(35.0f, 0.0f, -15.0f); gp->list_polys[GLL_PATTERN]++; glVertex3f(35.0f, 0.0f, -25.0f); gp->list_polys[GLL_PATTERN]++; glVertex3f(25.0f, 0.0f, -35.0f); gp->list_polys[GLL_PATTERN]++; glVertex3f(15.0f, 0.0f,-35.0f); gp->list_polys[GLL_PATTERN]++; glVertex3f(5.0f, 0.0f, -25.0f); gp->list_polys[GLL_PATTERN]++; glVertex3f(-5.0f, 0.0f, -25.0f); gp->list_polys[GLL_PATTERN]++; glVertex3f(-15.0f, 0.0f,-35.0f); gp->list_polys[GLL_PATTERN]++; glVertex3f(-25.0f, 0.0f,-35.0f); gp->list_polys[GLL_PATTERN]++; glVertex3f(-35.0f, 0.0f, -25.0f); gp->list_polys[GLL_PATTERN]++; glVertex3f(-35.0f, 0.0f, -15.0f); gp->list_polys[GLL_PATTERN]++; glVertex3f(-25.0f, 0.0f, -5.0f); gp->list_polys[GLL_PATTERN]++; glVertex3f(-25.0f, 0.0f, 5.0f); gp->list_polys[GLL_PATTERN]++; glVertex3f(-35.0f, 0.0f, 15.0f); gp->list_polys[GLL_PATTERN]++; glVertex3f(-35.0f, 0.0f, 25.0f); gp->list_polys[GLL_PATTERN]++; glVertex3f(-25.0f, 0.0f, 35.0f); gp->list_polys[GLL_PATTERN]++; glEnd(); glBegin(GL_LINE_STRIP); glVertex3f(-5.0f, 0.0f, 15.0f); glVertex3f(5.0f, 0.0f, 15.0f); gp->list_polys[GLL_PATTERN]++; glVertex3f(15.0f, 0.0f, 5.0f); gp->list_polys[GLL_PATTERN]++; glVertex3f(15.0f, 0.0f, -5.0f); gp->list_polys[GLL_PATTERN]++; glVertex3f(5.0f, 0.0f, -15.0f); gp->list_polys[GLL_PATTERN]++; glVertex3f(-5.0f, 0.0f, -15.0f); gp->list_polys[GLL_PATTERN]++; glVertex3f(-15.0f, 0.0f, -5.0f); gp->list_polys[GLL_PATTERN]++; glVertex3f(-15.0f, 0.0f, 5.0f); gp->list_polys[GLL_PATTERN]++; glVertex3f(-5.0f, 0.0f, 15.0f); gp->list_polys[GLL_PATTERN]++; glEnd(); glEndList(); gp->gllists[GLL_PATTERN] = 1; } else { glCallList(gp->listobjects + GLL_PATTERN); polys += gp->list_polys[GLL_PATTERN]; } return polys; } /* * main rendering loop */ static void draw(ModeInfo * mi) { boxedstruct *gp = &boxed[MI_SCREEN(mi)]; int wire = MI_IS_WIREFRAME (mi); vectorf v1,v2; GLfloat r; int dx, dz; int i; GLfloat dgray[4] = {0.3f, 0.3f, 0.3f, 1.0f}; GLfloat black[4] = {0.0f, 0.0f, 0.0f, 1.0f}; GLfloat lblue[4] = {0.4f,0.6f,1.0f }; GLfloat l0_ambient[] = {0.0, 0.0, 0.0, 1.0}; GLfloat l0_specular[] = {1.0, 1.0, 1.0, 1.0}; GLfloat l0_diffuse[] = {1.0, 1.0, 1.0, 1.0}; GLfloat l0_position[] = {0.0, 0.0, 0.0, 1.0}; /* w != 0 -> positional light */ GLfloat l1_ambient[] = {0.0, 0.0, 0.0, 1.0}; GLfloat l1_specular[] = {1.0, 1.0, 1.0, 1.0}; GLfloat l1_diffuse[] = {0.5, 0.5, 0.5, 1.0}; GLfloat l1_position[] = {0.0, 1.0, 0.0, 0.0}; /* w = 0 -> directional light */ mi->polygon_count = 0; glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glLoadIdentity(); # ifdef HAVE_MOBILE /* Keep it the same relative size when rotated. */ { GLfloat h = MI_HEIGHT(mi) / (GLfloat) MI_WIDTH(mi); int o = (int) current_device_rotation(); if (o != 0 && o != 180 && o != -180) glScalef (1/h, 1/h, 1/h); glRotatef(o, 0, 0, 1); } # endif gp->tic += 0.01f; gp->camtic += 0.01f + 0.01f * sin(gp->tic * speed); /* rotate camera around (0,0,0), looking at (0,0,0), up is (0,1,0) */ r = CAMDISTANCE_MIN + (CAMDISTANCE_MAX - CAMDISTANCE_MIN) + (CAMDISTANCE_MAX - CAMDISTANCE_MIN)*cos((gp->camtic/CAMDISTANCE_SPEED) * speed); v1.x = r * sin((gp->camtic/gp->cam_x_speed) * speed); v1.z = r * cos((gp->camtic/gp->cam_x_speed) * speed); v1.y = CAM_HEIGHT * sin((gp->camtic/gp->cam_y_speed) * speed) + 1.02 * CAM_HEIGHT; v2.x = LOOKAT_R * sin((gp->camtic/(gp->cam_x_speed * 5.0f)) * speed); v2.z = LOOKAT_R * cos((gp->camtic/(gp->cam_x_speed * 5.0f)) * speed); v2.y = (CAM_HEIGHT * sin((gp->camtic/gp->cam_y_speed) * speed) + 1.02 * CAM_HEIGHT)/10.0; gluLookAt(v1.x,v1.y,v1.z,v2.x,v2.y,v2.x,0.0,1.0,0.0); if (!wire) { glLightfv(GL_LIGHT0, GL_AMBIENT, l0_ambient); glLightfv(GL_LIGHT0, GL_DIFFUSE, l0_diffuse); glLightfv(GL_LIGHT0, GL_SPECULAR, l0_specular); glLightfv(GL_LIGHT0, GL_POSITION, l0_position); glLightfv(GL_LIGHT1, GL_AMBIENT, l1_ambient); glLightfv(GL_LIGHT1, GL_DIFFUSE, l1_diffuse); glLightfv(GL_LIGHT1, GL_SPECULAR, l1_specular); glLightfv(GL_LIGHT1, GL_POSITION, l1_position); glEnable(GL_LIGHT0); glEnable(GL_LIGHT1); glFrontFace(GL_CW); glMaterialfv(GL_FRONT, GL_SPECULAR, black); glMaterialfv(GL_FRONT, GL_EMISSION, lblue); glMaterialfv(GL_FRONT,GL_AMBIENT,black); glMaterialf(GL_FRONT, GL_SHININESS, 5.0); } /* draw ground grid */ /* glDisable(GL_DEPTH_TEST); */ glDisable(GL_LIGHTING); glColor3f(0.1,0.1,0.6); for (dx= -2; dx<3; dx++) { for (dz= -2; dz<3; dz++) { glPushMatrix(); glTranslatef(dx*30.0f, 0.0f, dz*30.0f); drawpattern(gp); glPopMatrix(); } } /* Set drawing mode for the boxes */ glEnable(GL_DEPTH_TEST); if (!wire) glEnable(GL_TEXTURE_2D); glPushMatrix(); glColor3f(1.0,1.0,1.0); glScalef(20.0,0.25,20.0); glTranslatef(0.0,2.0,0.0); mi->polygon_count += drawfilledbox(gp, wire); glPopMatrix(); glDisable(GL_TEXTURE_2D); glPushMatrix(); glColor3f(0.2,0.5,0.2); glScalef(20.0,20.0,0.25); glTranslatef(0.0,1.0,81.0); mi->polygon_count += drawbox(gp); glPopMatrix(); glPushMatrix(); glColor3f(0.2,0.5,0.2); glScalef(20.0,20.0,0.25); glTranslatef(0.0,1.0,-81.0); mi->polygon_count += drawbox(gp); glPopMatrix(); glPushMatrix(); glColor3f(0.2,0.5,0.2); glScalef(.25,20.0,20.0); glTranslatef(-81.0,1.0,0.0); mi->polygon_count += drawbox(gp); glPopMatrix(); glPushMatrix(); glColor3f(0.2,0.5,0.2); glScalef(.25,20.0,20.0); glTranslatef(81.0,1.0,0.0); mi->polygon_count += drawbox(gp); glPopMatrix(); if (!wire) { glEnable(GL_LIGHTING); glMaterialfv(GL_FRONT, GL_DIFFUSE, dgray); glMaterialfv(GL_FRONT, GL_EMISSION, black); /* turn it off before painting the balls */ } /* move the balls and shrapnel */ updateballs(&gp->bman); glFrontFace(GL_CCW); for (i=0;ibman.num_balls;i++) { if (gp->bman.balls[i].justcreated) { gp->bman.balls[i].justcreated = FALSE; freetris(&gp->tman[i]); } if (gp->bman.balls[i].bounced) { if (gp->tman[i].vertices == NULL) { createtrisfromball(&gp->tman[i],gp->spherev,gp->spherei,SPHERE_INDICES,&gp->bman.balls[i]); } else { updatetris(&gp->tman[i]); } glDisable(GL_CULL_FACE); mi->polygon_count += drawtriman(&gp->tman[i], wire); if (!wire) glEnable(GL_CULL_FACE); } else { mi->polygon_count += drawball(gp, &gp->bman.balls[i], wire); } } glFlush(); } /* * new window size or exposure */ ENTRYPOINT void reshape_boxed(ModeInfo *mi, int width, int height) { GLfloat h = (GLfloat) height / (GLfloat) width; glViewport(0, 0, (GLint) width, (GLint) height); glMatrixMode(GL_PROJECTION); glLoadIdentity(); gluPerspective(50.0,1/h,2.0,1000.0); glMatrixMode (GL_MODELVIEW); glLineWidth(1); glPointSize(1); } static void pinit(ModeInfo * mi) { boxedstruct *gp = &boxed[MI_SCREEN(mi)]; int wire = MI_IS_WIREFRAME (mi); ballman *bman; int i,texpixels; char *texpixeldata; char *texpixeltarget; glShadeModel(GL_SMOOTH); glClearDepth(1.0); glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); /* Load configuration */ setdefaultconfig(&gp->config); /* give the decay parameter a better curve */ if (gp->config.decay <= 0.8182) { gp->config.decay = gp->config.decay / 3; } else { gp->config.decay = (gp->config.decay - 0.75) * 4; } bman = &gp->bman; bman->balls = (ball *)malloc(gp->config.numballs * sizeof(ball)); bman->num_balls = gp->config.numballs; bman->ballsize = gp->config.ballsize; bman->explosion = gp->config.explosion; gp->tman = (triman *)malloc(bman->num_balls * sizeof(triman)); memset(gp->tman,0,bman->num_balls * sizeof(triman)); for(i=0;inum_balls;i++) { gp->tman[i].explosion = (float) (((int)gp->config.explosion) / 15.0f ); gp->tman[i].decay = gp->config.decay; gp->tman[i].momentum = gp->config.momentum; gp->tman[i].vertices = NULL; gp->tman[i].normals = NULL; gp->tman[i].tris = NULL; createball(&bman->balls[i]); bman->balls[i].loc.y *= rnd(); } generatesphere(gp); if (!wire) { glEnable(GL_CULL_FACE); glEnable(GL_LIGHTING); } /* define cam path */ gp->cam_x_speed = 1.0f/((float)gp->config.camspeed/50.0 + rnd()*((float)gp->config.camspeed/50.0)); gp->cam_z_speed = 1.0f/((float)gp->config.camspeed/50.0 + rnd()*((float)gp->config.camspeed/50.0)); gp->cam_y_speed = 1.0f/((float)gp->config.camspeed/250.0 + rnd()*((float)gp->config.camspeed/250.0)); if (rnd() < 0.5f) gp->cam_x_speed = -gp->cam_x_speed; if (rnd() < 0.5f) gp->cam_z_speed = -gp->cam_z_speed; /* define initial cam position */ gp->tic = gp->camtic = rnd() * 100.0f; /* define tex1 (bottom plate) */ gp->tex1 = (char *)malloc(3*width*height*sizeof(GLuint)); texpixels = 256*256; /*width*height;*/ texpixeldata = header_data; texpixeltarget = gp->tex1; for (i=0; i < texpixels; i++) { HEADER_PIXEL(texpixeldata,texpixeltarget); texpixeltarget += 3; } glPixelStorei(GL_UNPACK_ALIGNMENT, 1); clear_gl_error(); #if 0 i = gluBuild2DMipmaps(GL_TEXTURE_2D, 3, 256, 256, GL_RGB, GL_UNSIGNED_BYTE, gp->tex1); if (i) { const char *s = (char *) gluErrorString (i); fprintf (stderr, "%s: error mipmapping texture: %s\n", progname, (s ? s : "(unknown)")); exit (1); } check_gl_error("mipmapping"); #else glTexImage2D (GL_TEXTURE_2D, 0, GL_RGB, 256, 256, 0, GL_RGB, GL_UNSIGNED_BYTE, gp->tex1); check_gl_error("texture"); #endif glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE); glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT); glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT); glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); } ENTRYPOINT void init_boxed(ModeInfo * mi) { int screen = MI_SCREEN(mi); /* Colormap cmap; */ /* Boolean rgba, doublebuffer, cmap_installed; */ boxedstruct *gp; if (boxed == NULL) { if ((boxed = (boxedstruct *) calloc(MI_NUM_SCREENS(mi),sizeof (boxedstruct))) == NULL) return; } gp = &boxed[screen]; gp->window = MI_WINDOW(mi); if ((gp->glx_context = init_GL(mi)) != NULL) { reshape_boxed(mi, MI_WIDTH(mi), MI_HEIGHT(mi)); glDrawBuffer(GL_BACK); if (!glIsList(gp->listobjects)) { gp->listobjects = glGenLists(3); gp->gllists[0] = 0; gp->gllists[1] = 0; gp->gllists[2] = 0; } pinit(mi); } else { MI_CLEARWINDOW(mi); } } ENTRYPOINT void draw_boxed(ModeInfo * mi) { boxedstruct *gp = &boxed[MI_SCREEN(mi)]; Display *display = MI_DISPLAY(mi); Window window = MI_WINDOW(mi); if (!gp->glx_context) return; glDrawBuffer(GL_BACK); glXMakeCurrent(display, window, *(gp->glx_context)); draw(mi); if (mi->fps_p) do_fps (mi); glFinish(); glXSwapBuffers(display, window); } ENTRYPOINT void release_boxed(ModeInfo * mi) { int i; if (boxed != NULL) { int screen; for (screen = 0; screen < MI_NUM_SCREENS(mi); screen++) { boxedstruct *gp = &boxed[screen]; if (gp->glx_context) { /* Display lists MUST be freed while their glXContext is current. */ glXMakeCurrent(MI_DISPLAY(mi), gp->window, *(gp->glx_context)); if (glIsList(gp->listobjects)) glDeleteLists(gp->listobjects, 3); for (i=0;ibman.num_balls;i++) { if (gp->bman.balls[i].bounced) freetris(&gp->tman[i]); } free (gp->bman.balls); free (gp->tman); free (gp->tex1); } } (void) free((void *) boxed); boxed = NULL; } FreeAllGL(mi); } XSCREENSAVER_MODULE ("Boxed", boxed) /*********************************************************/ #endif xscreensaver-5.36/hacks/glx/glforestfire.c000644 000767 000024 00000073077 12701612217 020675 0ustar00jwzstaff000000 000000 /* -*- Mode: C; tab-width: 4 -*- */ /* fire --- 3D fire or rain landscape */ #if 0 static const char sccsid[] = "@(#)fire.c 5.02 2001/09/26 xlockmore"; #endif /* Copyright (c) E. Lassauge, 2001. */ /* * Permission to use, copy, modify, and distribute this software and its * documentation for any purpose and without fee is hereby granted, * provided that the above copyright notice appear in all copies and that * both that copyright notice and this permission notice appear in * supporting documentation. * * This file is provided AS IS with no warranties of any kind. The author * shall have no liability with respect to the infringement of copyrights, * trade secrets or any patents by this file or any part thereof. In no * event will the author be liable for any lost revenue or profits or * other special, indirect and consequential damages. * * The original code for this mode was written by David Bucciarelli * (tech.hmw@plus.it) and could be found in the demo package * of Mesa (Mesa-3.2/3Dfx/demos/). This mode is the result of the merge of * two of the David's demos (fire and rain). * * Eric Lassauge (October-10-2000) * http://lassauge.free.fr/linux.html * * REVISION HISTORY: * * E.Lassauge - 26-Sep-2001: * - add wander option and code * - cleanups for xscreensaver * * E.Lassauge - 09-Mar-2001: * - get rid of my framerate options to use showfps * * E.Lassauge - 12-Jan-2001: * - add rain particules, selected if count=0 (no fire means rain !) * * E.Lassauge - 28-Nov-2000: * - modified release part to add freeing of GL objects * * E.Lassauge - 14-Nov-2000: * - use new common xpm_to_ximage function * * E.Lassauge - 25-Oct-2000: * - add the trees (with a new resource '-trees') * - corrected handling of color (textured vs untextured) * - corrected handling of endiannes for the xpm files * - inverted ground pixmap file * - use malloc-ed tree array * * TSchmidt - 23-Oct-2000: * - added size option like used in sproingies mode * * E.Lassauge - 13-Oct-2000: * - when trackmouse and window is iconified (login screen): stop tracking * - add pure GLX handling of framerate display (erased GLUT stuff) * - made count a per screen variable and update it only if framemode * - changes for no_texture an wireframe modes * - change no_texture color for the ground * - add freeing of texture image * - misc comments and little tweakings * * TODO: * - perhaps use a user supplied xpm for ground image (or a whatever image * file using ImageMagick ?) * - random number of trees ? change trees at change_fire ? * - fix wireframe mode: it's too CPU intensive. * - look how we can get the Wheel events (Button4&5). */ #ifdef STANDALONE /* xscreensaver mode */ #define DEFAULTS "*delay: 10000 \n" \ "*count: 800 \n" \ "*size: 0 \n" \ "*showFPS: False \n" \ "*wireframe: False \n" \ # define refresh_fire 0 #define MODE_fire #include "xlockmore.h" /* from the xscreensaver distribution */ #include "gltrackball.h" #else /* !STANDALONE */ #include "xlock.h" /* from the xlockmore distribution */ #include "visgl.h" #endif /* !STANDALONE */ #ifdef MODE_fire #define MINSIZE 32 #if defined( USE_XPM ) || defined( USE_XPMINC ) || defined(STANDALONE) /* USE_XPM & USE_XPMINC in xlock mode ; HAVE_XPM in xscreensaver mode */ #include "xpm-ximage.h" #define I_HAVE_XPM #ifdef STANDALONE #include "../images/ground.xpm" #include "../images/tree.xpm" #else /* !STANDALONE */ #include "pixmaps/ground.xpm" #include "pixmaps/tree.xpm" #endif /* !STANDALONE */ #endif /* HAVE_XPM */ /* vector utility macros */ #define vinit(a,i,j,k) {\ (a)[0]=i;\ (a)[1]=j;\ (a)[2]=k;\ } #define vinit4(a,i,j,k,w) {\ (a)[0]=i;\ (a)[1]=j;\ (a)[2]=k;\ (a)[3]=w;\ } #define vadds(a,dt,b) {\ (a)[0]+=(dt)*(b)[0];\ (a)[1]+=(dt)*(b)[1];\ (a)[2]+=(dt)*(b)[2];\ } #define vequ(a,b) {\ (a)[0]=(b)[0];\ (a)[1]=(b)[1];\ (a)[2]=(b)[2];\ } #define vinter(a,dt,b,c) {\ (a)[0]=(dt)*(b)[0]+(1.0-dt)*(c)[0];\ (a)[1]=(dt)*(b)[1]+(1.0-dt)*(c)[1];\ (a)[2]=(dt)*(b)[2]+(1.0-dt)*(c)[2];\ } #define clamp(a) ((a) < 0.0 ? 0.0 : ((a) < 1.0 ? (a) : 1.0)) #define vclamp(v) {\ (v)[0]=clamp((v)[0]);\ (v)[1]=clamp((v)[1]);\ (v)[2]=clamp((v)[2]);\ } /* Manage option vars */ #define DEF_TEXTURE "True" #define DEF_FOG "False" #define DEF_SHADOWS "True" #define DEF_FRAMERATE "False" #define DEF_WANDER "True" #define DEF_TREES "5" #define MAX_TREES 20 static Bool do_texture; static Bool do_fog; static Bool do_shadows; static Bool do_wander; static int num_trees; static XFontStruct *mode_font = None; static XrmOptionDescRec opts[] = { {"-texture", ".fire.texture", XrmoptionNoArg, "on"}, {"+texture", ".fire.texture", XrmoptionNoArg, "off"}, {"-fog", ".fire.fog", XrmoptionNoArg, "on"}, {"+fog", ".fire.fog", XrmoptionNoArg, "off"}, {"-shadows", ".fire.shadows", XrmoptionNoArg, "on"}, {"+shadows", ".fire.shadows", XrmoptionNoArg, "off"}, {"-wander", ".fire.wander", XrmoptionNoArg, "on"}, {"+wander", ".fire.wander", XrmoptionNoArg, "off"}, {"-trees", ".fire.trees", XrmoptionSepArg, 0}, {"-rain", ".fire.count", XrmoptionNoArg, "0"}, }; static argtype vars[] = { {&do_texture, "texture", "Texture", DEF_TEXTURE, t_Bool}, {&do_fog, "fog", "Fog", DEF_FOG, t_Bool}, {&do_shadows, "shadows", "Shadows", DEF_SHADOWS, t_Bool}, {&do_wander, "wander", "Wander", DEF_WANDER, t_Bool}, {&num_trees, "trees", "Trees", DEF_TREES, t_Int}, }; static OptionStruct desc[] = { {"-/+texture", "turn on/off texturing"}, {"-/+fog", "turn on/off fog"}, {"-/+shadows", "turn on/off shadows"}, {"-/+wander", "turn on/off wandering"}, {"-trees num", "number of trees (0 disables)"}, }; ENTRYPOINT ModeSpecOpt fire_opts = { sizeof opts / sizeof opts[0], opts, sizeof vars / sizeof vars[0], vars, desc }; #ifdef USE_MODULES ModStruct fire_description = { "fire", "init_fire", "draw_fire", "release_fire", "draw_fire", "change_fire", (char *) NULL, &fire_opts, 10000, 800, 1, 400, 64, 1.0, "", "Shows a 3D fire-like image", 0, NULL }; #endif /* USE_MODULES */ /* misc defines */ #define TREEINR 2.5 /* tree min distance */ #define TREEOUTR 8.0 /* tree max distance */ #define FRAME 50 /* frame count interval */ #define DIMP 20.0 /* dimension of ground */ #define DIMTP 16.0 /* dimension of ground texture */ #define RIDCOL 0.4 /* factor for color blending */ #define AGRAV -9.8 /* gravity */ #define NUMPART 7500 /* rain particles */ /* fire particle struct */ typedef struct { int age; float p[3][3]; float v[3]; float c[3][4]; } part; /* rain particle struct */ typedef struct { float age; float acc[3]; float vel[3]; float pos[3]; float partLength; float oldpos[3]; } rain; /* colors */ static const GLfloat black[3] = { 0.0, 0.0, 0.0 }; /* shadow color */ static const GLfloat partcol1[3] = { 1.0, 0.2, 0.0 }; /* initial color: red-ish */ static const GLfloat partcol2[3] = { 1.0, 1.0, 0.0 }; /* blending color: yellow-ish */ static const GLfloat fogcolor[4] = { 0.9, 0.9, 1.0, 1.0 }; /* ground */ static const float q[4][3] = { {-DIMP, 0.0, -DIMP}, {DIMP, 0.0, -DIMP}, {DIMP, 0.0, DIMP}, {-DIMP, 0.0, DIMP} }; /* ground texture */ static const float qt[4][2] = { {-DIMTP, -DIMTP}, {DIMTP, -DIMTP}, {DIMTP, DIMTP}, {-DIMTP, DIMTP} }; /* default values for observer */ static const float DEF_OBS[3] = { 2.0f, 1.0f, 0.0f }; #define DEV_V 0.0 #define DEF_ALPHA -90.0 #define DEF_BETA 90.0 /* tree struct */ typedef struct { float x,y,z; } treestruct; /* the mode struct, contains all per screen variables */ typedef struct { GLint WIDTH, HEIGHT; /* display dimensions */ GLXContext *glx_context; int np; /* number of fire particles : set it through 'count' resource */ float eject_r; /* emission radius */ float dt, maxage, eject_vy, eject_vl; float ridtri; /* fire particle size */ Bool shadows; /* misc booleans: set them through specific resources */ Bool fog; part *p; /* fire particles array */ rain *r; /* rain particles array */ XImage *gtexture; /* ground texture image bits */ XImage *ttexture; /* tree texture image bits */ GLuint groundid; /* ground texture id: GL world */ GLuint treeid; /* tree texture id: GL world */ GLuint fontbase; /* fontbase id: GL world */ int num_trees; /* number of trees: set it through 'trees' resource */ treestruct *treepos; /* trees positions: float treepos[num_trees][3] */ float min[3]; /* raining area */ float max[3]; float obs[3]; /* observer coordinates */ float dir[3]; /* view direction */ float v; /* observer velocity */ float alpha; /* observer angles */ float beta; trackball_state *trackball; Bool button_down_p; int frame; } firestruct; /* array of firestruct indexed by screen number */ static firestruct *fire = (firestruct *) NULL; /* *----------------------------------------------------------------------------- *----------------------------------------------------------------------------- * Misc funcs. *----------------------------------------------------------------------------- *----------------------------------------------------------------------------- */ /* utility function for the rain particles */ static float gettimerain(void) { #if 0 /* Oh yeah, *that's* portable! WTF. */ /* * I really thought clock() was standard ... EL * I found this on the net: * The clock() function conforms to ISO/IEC 9899:1990 (``ISO C89'') * */ static clock_t told= (clock_t)0; clock_t tnew,ris; tnew=clock(); ris=tnew-told; told=tnew; return (0.0125 + ris/(float)CLOCKS_PER_SEC); #else return 0.0150; #endif } /* my RAND */ static float vrnd(void) { return ((float) LRAND() / (float) MAXRAND); } /* initialise new fire particle */ static void setnewpart(firestruct * fs, part * p) { float a, vi[3]; const float *c; p->age = 0; a = vrnd() * M_PI * 2.0; vinit(vi, sin(a) * fs->eject_r * vrnd(), 0.15, cos(a) * fs->eject_r * vrnd()); vinit(p->p[0], vi[0] + vrnd() * fs->ridtri, vi[1] + vrnd() * fs->ridtri, vi[2] + vrnd() * fs->ridtri); vinit(p->p[1], vi[0] + vrnd() * fs->ridtri, vi[1] + vrnd() * fs->ridtri, vi[2] + vrnd() * fs->ridtri); vinit(p->p[2], vi[0] + vrnd() * fs->ridtri, vi[1] + vrnd() * fs->ridtri, vi[2] + vrnd() * fs->ridtri); vinit(p->v, vi[0] * fs->eject_vl / (fs->eject_r / 2), vrnd() * fs->eject_vy + fs->eject_vy / 2, vi[2] * fs->eject_vl / (fs->eject_r / 2)); c = partcol1; vinit4(p->c[0], c[0] * ((1.0 - RIDCOL) + vrnd() * RIDCOL), c[1] * ((1.0 - RIDCOL) + vrnd() * RIDCOL), c[2] * ((1.0 - RIDCOL) + vrnd() * RIDCOL), 1.0); vinit4(p->c[1], c[0] * ((1.0 - RIDCOL) + vrnd() * RIDCOL), c[1] * ((1.0 - RIDCOL) + vrnd() * RIDCOL), c[2] * ((1.0 - RIDCOL) + vrnd() * RIDCOL), 1.0); vinit4(p->c[2], c[0] * ((1.0 - RIDCOL) + vrnd() * RIDCOL), c[1] * ((1.0 - RIDCOL) + vrnd() * RIDCOL), c[2] * ((1.0 - RIDCOL) + vrnd() * RIDCOL), 1.0); } /* initialise new rain particle */ static void setnewrain(firestruct * fs, rain * r) { r->age=0.0f; vinit(r->acc,0.0f,-0.98f,0.0f); vinit(r->vel,0.0f,0.0f,0.0f); r->partLength=0.2f; vinit(r->oldpos,fs->min[0]+(fs->max[0]-fs->min[0])*vrnd(), fs->max[1]+0.2f*fs->max[1]*vrnd(), fs->min[2]+(fs->max[2]-fs->min[2])*vrnd()); vequ(r->pos,r->oldpos); vadds(r->oldpos,-(r->partLength),r->vel); r->pos[1]=(fs->max[1]-fs->min[1])*vrnd()+fs->min[1]; r->oldpos[1]=r->pos[1]-r->partLength*r->vel[1]; } /* set fire particle values */ static void setpart(firestruct * fs, part * p) { float fact; if (p->p[0][1] < 0.1) { setnewpart(fs, p); return; } p->v[1] += AGRAV * fs->dt; vadds(p->p[0], fs->dt, p->v); vadds(p->p[1], fs->dt, p->v); vadds(p->p[2], fs->dt, p->v); p->age++; if ((p->age) > fs->maxage) { vequ(p->c[0], partcol2); vequ(p->c[1], partcol2); vequ(p->c[2], partcol2); } else { fact = 1.0 / fs->maxage; vadds(p->c[0], fact, partcol2); vclamp(p->c[0]); p->c[0][3] = fact * (fs->maxage - p->age); vadds(p->c[1], fact, partcol2); vclamp(p->c[1]); p->c[1][3] = fact * (fs->maxage - p->age); vadds(p->c[2], fact, partcol2); vclamp(p->c[2]); p->c[2][3] = fact * (fs->maxage - p->age); } } /* set rain particle values */ static void setpartrain(firestruct * fs, rain * r, float dt) { r->age += dt; vadds(r->vel,dt,r->acc); vadds(r->pos,dt,r->vel); if(r->pos[0]min[0]) r->pos[0]=fs->max[0]-(fs->min[0]-r->pos[0]); if(r->pos[2]min[2]) r->pos[2]=fs->max[2]-(fs->min[2]-r->pos[2]); if(r->pos[0]>fs->max[0]) r->pos[0]=fs->min[0]+(r->pos[0]-fs->max[0]); if(r->pos[2]>fs->max[2]) r->pos[2]=fs->min[2]+(r->pos[2]-fs->max[2]); vequ(r->oldpos,r->pos); vadds(r->oldpos,-(r->partLength),r->vel); if(r->pos[1]min[1]) setnewrain(fs, r); } /* draw a tree */ static int drawtree(float x, float y, float z) { int polys = 0; glBegin(GL_QUADS); glTexCoord2f(0.0,0.0); glVertex3f(x-1.5,y+0.0,z); glTexCoord2f(1.0,0.0); glVertex3f(x+1.5,y+0.0,z); glTexCoord2f(1.0,1.0); glVertex3f(x+1.5,y+3.0,z); glTexCoord2f(0.0,1.0); glVertex3f(x-1.5,y+3.0,z); polys++; glTexCoord2f(0.0,0.0); glVertex3f(x,y+0.0,z-1.5); glTexCoord2f(1.0,0.0); glVertex3f(x,y+0.0,z+1.5); glTexCoord2f(1.0,1.0); glVertex3f(x,y+3.0,z+1.5); glTexCoord2f(0.0,1.0); glVertex3f(x,y+3.0,z-1.5); polys++; glEnd(); return polys; } /* calculate observer position : modified only if trackmouse is used */ static void calcposobs(firestruct * fs) { fs->dir[0] = sin(fs->alpha * M_PI / 180.0); fs->dir[2] = cos(fs->alpha * M_PI / 180.0) * sin(fs->beta * M_PI / 180.0); fs->dir[1] = cos(fs->beta * M_PI / 180.0); fs->obs[0] += fs->v * fs->dir[0]; fs->obs[1] += fs->v * fs->dir[1]; fs->obs[2] += fs->v * fs->dir[2]; if (!fs->np) { vinit(fs->min,fs->obs[0]-7.0f,-0.2f,fs->obs[2]-7.0f); vinit(fs->max,fs->obs[0]+7.0f,8.0f,fs->obs[2]+7.0f); } } /* initialise textures */ static void inittextures(ModeInfo * mi) { firestruct *fs = &fire[MI_SCREEN(mi)]; #if defined( I_HAVE_XPM ) if (do_texture) { glGenTextures(1, &fs->groundid); #ifdef HAVE_GLBINDTEXTURE glBindTexture(GL_TEXTURE_2D, fs->groundid); #endif /* HAVE_GLBINDTEXTURE */ if ((fs->gtexture = xpm_to_ximage(MI_DISPLAY(mi), MI_VISUAL(mi), MI_COLORMAP(mi), ground)) == None) { (void) fprintf(stderr, "Error reading the ground texture.\n"); glDeleteTextures(1, &fs->groundid); do_texture = False; fs->groundid = 0; fs->treeid = 0; return; } glPixelStorei(GL_UNPACK_ALIGNMENT, 4); clear_gl_error(); glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, fs->gtexture->width, fs->gtexture->height, 0, GL_RGBA, /* GL_UNSIGNED_BYTE, */ GL_UNSIGNED_INT_8_8_8_8_REV, fs->gtexture->data); check_gl_error("texture"); glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT); glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_DECAL); if (fs->num_trees) { glGenTextures(1, &fs->treeid); #ifdef HAVE_GLBINDTEXTURE glBindTexture(GL_TEXTURE_2D,fs->treeid); #endif /* HAVE_GLBINDTEXTURE */ if ((fs->ttexture = xpm_to_ximage(MI_DISPLAY(mi), MI_VISUAL(mi), MI_COLORMAP(mi), tree)) == None) { (void)fprintf(stderr,"Error reading tree texture.\n"); glDeleteTextures(1, &fs->treeid); fs->treeid = 0; fs->num_trees = 0; return; } clear_gl_error(); glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, fs->ttexture->width, fs->ttexture->height, 0, GL_RGBA, /* GL_UNSIGNED_BYTE, */ GL_UNSIGNED_INT_8_8_8_8_REV, fs->ttexture->data); check_gl_error("texture"); glTexParameterf(GL_TEXTURE_2D,GL_TEXTURE_WRAP_S,GL_REPEAT); glTexParameterf(GL_TEXTURE_2D,GL_TEXTURE_WRAP_T,GL_REPEAT); glTexParameterf(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_NEAREST); glTexParameterf(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_NEAREST); glTexEnvf(GL_TEXTURE_ENV,GL_TEXTURE_ENV_MODE,GL_MODULATE); } } else { fs->groundid = 0; /* default textures */ fs->treeid = 0; } #else /* !I_HAVE_XPM */ do_texture = False; fs->groundid = 0; /* default textures */ fs->treeid = 0; #endif /* !I_HAVE_XPM */ } /* init tree array and positions */ static Bool inittree(ModeInfo * mi) { firestruct *fs = &fire[MI_SCREEN(mi)]; int i; float dist; /* allocate treepos array */ if ((fs->treepos = (treestruct *) malloc(fs->num_trees * sizeof(treestruct))) == NULL) { return False; } /* initialise positions */ for(i=0;inum_trees;i++) { do { fs->treepos[i].x =vrnd()*TREEOUTR*2.0-TREEOUTR; fs->treepos[i].y =0.0; fs->treepos[i].z =vrnd()*TREEOUTR*2.0-TREEOUTR; dist = sqrt(fs->treepos[i].x * fs->treepos[i].x + fs->treepos[i].z * fs->treepos[i].z); } while((distTREEOUTR)); } return True; } /* *----------------------------------------------------------------------------- *----------------------------------------------------------------------------- * GL funcs. *----------------------------------------------------------------------------- *----------------------------------------------------------------------------- */ ENTRYPOINT void reshape_fire(ModeInfo * mi, int width, int height) { firestruct *fs = &fire[MI_SCREEN(mi)]; int size = MI_SIZE(mi); /* Viewport is specified size if size >= MINSIZE && size < screensize */ if (size <= 1) { fs->WIDTH = MI_WIDTH(mi); fs->HEIGHT = MI_HEIGHT(mi); } else if (size < MINSIZE) { fs->WIDTH = MINSIZE; fs->HEIGHT = MINSIZE; } else { fs->WIDTH = (size > MI_WIDTH(mi)) ? MI_WIDTH(mi) : size; fs->HEIGHT = (size > MI_HEIGHT(mi)) ? MI_HEIGHT(mi) : size; } glViewport((MI_WIDTH(mi) - fs->WIDTH) / 2, (MI_HEIGHT(mi) - fs->HEIGHT) / 2, fs->WIDTH, fs->HEIGHT); glMatrixMode(GL_PROJECTION); glLoadIdentity(); gluPerspective(70.0, fs->WIDTH / (float) fs->HEIGHT, 0.1, 30.0); glMatrixMode(GL_MODELVIEW); } static void DrawFire(ModeInfo * mi) { int j; firestruct *fs = &fire[MI_SCREEN(mi)]; Bool wire = MI_IS_WIREFRAME(mi); mi->polygon_count = 0; if (do_wander && !fs->button_down_p) { GLfloat x, y, z; # define SINOID(SCALE,SIZE) \ ((((1 + sin((fs->frame * (SCALE)) / 2 * M_PI)) / 2.0) * (SIZE)) - (SIZE)/2) x = SINOID(0.031, 0.85); y = SINOID(0.017, 0.25); z = SINOID(0.023, 0.85); fs->frame++; fs->obs[0] = x + DEF_OBS[0]; fs->obs[1] = y + DEF_OBS[1]; fs->obs[2] = z + DEF_OBS[2]; fs->dir[1] = y; fs->dir[2] = z; } glEnable(GL_DEPTH_TEST); if (fs->fog) glEnable(GL_FOG); else glDisable(GL_FOG); glDepthMask(GL_TRUE); glClearColor(0.5, 0.5, 0.8, 1.0); /* sky in the distance */ glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glPushMatrix(); calcposobs(fs); gltrackball_rotate (fs->trackball); gluLookAt(fs->obs[0], fs->obs[1], fs->obs[2], fs->obs[0] + fs->dir[0], fs->obs[1] + fs->dir[1], fs->obs[2] + fs->dir[2], 0.0, 1.0, 0.0); glEnable(GL_TEXTURE_2D); /* draw ground using the computed texture */ if (do_texture) { glColor4f(1.0,1.0,1.0,1.0); /* white to get texture in it's true color */ #ifdef HAVE_GLBINDTEXTURE glBindTexture(GL_TEXTURE_2D, fs->groundid); #endif /* HAVE_GLBINDTEXTURE */ } else glColor4f(0.54, 0.27, 0.07, 1.0); /* untextured ground color */ glBegin(GL_QUADS); glTexCoord2fv(qt[0]); glVertex3fv(q[0]); glTexCoord2fv(qt[1]); glVertex3fv(q[1]); glTexCoord2fv(qt[2]); glVertex3fv(q[2]); glTexCoord2fv(qt[3]); glVertex3fv(q[3]); mi->polygon_count++; glEnd(); glAlphaFunc(GL_GEQUAL, 0.9); if (fs->num_trees) { /* here do_texture IS True - and color used is white */ glEnable(GL_ALPHA_TEST); #ifdef HAVE_GLBINDTEXTURE glBindTexture(GL_TEXTURE_2D,fs->treeid); #endif /* HAVE_GLBINDTEXTURE */ for(j=0;jnum_trees;j++) mi->polygon_count += drawtree(fs->treepos[j].x ,fs->treepos[j].y ,fs->treepos[j].z ); glDisable(GL_ALPHA_TEST); } glDisable(GL_TEXTURE_2D); glDepthMask(GL_FALSE); if (fs->shadows) { /* draw shadows with black color */ glBegin(wire ? GL_LINE_STRIP : GL_TRIANGLES); for (j = 0; j < fs->np; j++) { glColor4f(black[0], black[1], black[2], fs->p[j].c[0][3]); glVertex3f(fs->p[j].p[0][0], 0.1, fs->p[j].p[0][2]); glColor4f(black[0], black[1], black[2], fs->p[j].c[1][3]); glVertex3f(fs->p[j].p[1][0], 0.1, fs->p[j].p[1][2]); glColor4f(black[0], black[1], black[2], fs->p[j].c[2][3]); glVertex3f(fs->p[j].p[2][0], 0.1, fs->p[j].p[2][2]); mi->polygon_count++; } glEnd(); } glBegin(wire ? GL_LINE_STRIP : GL_TRIANGLES); for (j = 0; j < fs->np; j++) { /* draw particles: colors are computed in setpart */ glColor4fv(fs->p[j].c[0]); glVertex3fv(fs->p[j].p[0]); glColor4fv(fs->p[j].c[1]); glVertex3fv(fs->p[j].p[1]); glColor4fv(fs->p[j].c[2]); glVertex3fv(fs->p[j].p[2]); mi->polygon_count++; setpart(fs, &fs->p[j]); } glEnd(); /* draw rain particles if no fire particles */ if (!fs->np) { float timeused = gettimerain(); glDisable(GL_TEXTURE_2D); glShadeModel(GL_SMOOTH); glBegin(GL_LINES); for (j = 0; j < NUMPART; j++) { glColor4f(0.7f,0.95f,1.0f,0.0f); glVertex3fv(fs->r[j].oldpos); glColor4f(0.3f,0.7f,1.0f,1.0f); glVertex3fv(fs->r[j].pos); setpartrain(fs, &fs->r[j],timeused); mi->polygon_count++; } glEnd(); glShadeModel(GL_FLAT); } glDisable(GL_TEXTURE_2D); glDisable(GL_ALPHA_TEST); glDisable(GL_DEPTH_TEST); glDisable(GL_FOG); /* manage framerate display */ if (MI_IS_FPS(mi)) do_fps (mi); glPopMatrix(); } static Bool Init(ModeInfo * mi) { int i; firestruct *fs = &fire[MI_SCREEN(mi)]; /* default settings */ fs->eject_r = 0.1 + NRAND(10) * 0.03; fs->dt = 0.015; fs->eject_vy = 4; fs->eject_vl = 1; fs->ridtri = 0.1 + NRAND(10) * 0.005; fs->maxage = 1.0 / fs->dt; vinit(fs->obs, DEF_OBS[0], DEF_OBS[1], DEF_OBS[2]); fs->v = 0.0; fs->alpha = DEF_ALPHA; fs->beta = DEF_BETA; /* initialise texture stuff */ if (do_texture) inittextures(mi); else { fs->ttexture = (XImage*) NULL; fs->gtexture = (XImage*) NULL; } if (MI_IS_DEBUG(mi)) { (void) fprintf(stderr, "%s:\n\tnum_part=%d\n\ttrees=%d\n\tfog=%s\n\tshadows=%s\n\teject_r=%.3f\n\tridtri=%.3f\n", MI_NAME(mi), fs->np, fs->num_trees, fs->fog ? "on" : "off", fs->shadows ? "on" : "off", fs->eject_r, fs->ridtri); } /* initialise particles and trees */ for (i = 0; i < fs->np; i++) { setnewpart(fs, &(fs->p[i])); } if (fs->num_trees) if (!inittree(mi)) { return False; } /* if no fire particles then initialise rain particles */ if (!fs->np) { vinit(fs->min,-7.0f,-0.2f,-7.0f); vinit(fs->max,7.0f,8.0f,7.0f); for (i = 0; i < NUMPART; i++) { setnewrain(fs, &(fs->r[i])); } } return True; } /* *----------------------------------------------------------------------------- *----------------------------------------------------------------------------- * Xlock hooks. *----------------------------------------------------------------------------- *----------------------------------------------------------------------------- */ static void free_fire(firestruct *fs) { if (mode_font != None && fs->fontbase != None) { glDeleteLists(fs->fontbase, mode_font->max_char_or_byte2 - mode_font->min_char_or_byte2 + 1); fs->fontbase = None; } if (fs->p != NULL) { (void) free((void *) fs->p); fs->p = (part *) NULL; } if (fs->r != NULL) { (void) free((void *) fs->r); fs->r = (rain *) NULL; } if (fs->treepos != NULL) { (void) free((void *) fs->treepos); fs->treepos = (treestruct *) NULL; } if (fs->ttexture != None) { glDeleteTextures(1, &fs->treeid); XDestroyImage(fs->ttexture); fs->ttexture = None; } if (fs->gtexture != None) { glDeleteTextures(1, &fs->groundid); XDestroyImage(fs->gtexture); fs->gtexture = None; } } /* *----------------------------------------------------------------------------- * Initialize fire. Called each time the window changes. *----------------------------------------------------------------------------- */ ENTRYPOINT void init_fire(ModeInfo * mi) { firestruct *fs; /* allocate the main fire table if needed */ if (fire == NULL) { if ((fire = (firestruct *) calloc(MI_NUM_SCREENS(mi), sizeof(firestruct))) == NULL) return; } /* initialise the per screen fire structure */ fs = &fire[MI_SCREEN(mi)]; fs->np = MI_COUNT(mi); fs->fog = do_fog; fs->shadows = do_shadows; /* initialise fire particles if any */ if ((fs->np)&&(fs->p == NULL)) { if ((fs->p = (part *) calloc(fs->np, sizeof(part))) == NULL) { free_fire(fs); return; } } else if (fs->r == NULL) { /* initialise rain particles if no fire particles */ if ((fs->r = (rain *) calloc(NUMPART, sizeof(part))) == NULL) { free_fire(fs); return; } } /* check tree number */ if (do_texture) fs->num_trees = (num_treesnum_trees = 0; fs->trackball = gltrackball_init (False); /* xlock GL stuff */ if ((fs->glx_context = init_GL(mi)) != NULL) { #ifndef STANDALONE Reshape(mi); /* xlock mode */ #else reshape_fire(mi,MI_WIDTH(mi),MI_HEIGHT(mi)); /* xscreensaver mode */ #endif glDrawBuffer(GL_BACK); if (!Init(mi)) { free_fire(fs); return; } } else { MI_CLEARWINDOW(mi); } } /* *----------------------------------------------------------------------------- * Called by the mainline code periodically to update the display. *----------------------------------------------------------------------------- */ ENTRYPOINT void draw_fire(ModeInfo * mi) { firestruct *fs = &fire[MI_SCREEN(mi)]; Display *display = MI_DISPLAY(mi); Window window = MI_WINDOW(mi); MI_IS_DRAWN(mi) = True; if (!fs->glx_context) return; glXMakeCurrent(display, window, *(fs->glx_context)); glShadeModel(GL_FLAT); glEnable(GL_DEPTH_TEST); /* makes particles blend with background */ if (!MI_IS_WIREFRAME(mi)||(!fs->np)) { glEnable(GL_BLEND); glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); } /* fog stuff */ glEnable(GL_FOG); glFogi(GL_FOG_MODE, GL_EXP); glFogfv(GL_FOG_COLOR, fogcolor); glFogf(GL_FOG_DENSITY, 0.03); glHint(GL_FOG_HINT, GL_NICEST); glPushMatrix(); glRotatef(current_device_rotation(), 0, 0, 1); DrawFire(mi); glPopMatrix(); #ifndef STANDALONE Reshape(mi); /* xlock mode */ #else reshape_fire(mi,MI_WIDTH(mi),MI_HEIGHT(mi)); /* xscreensaver mode */ #endif glFinish(); glXSwapBuffers(display, window); } /* *----------------------------------------------------------------------------- * The display is being taken away from us. Free up malloc'ed * memory and X resources that we've alloc'ed. Only called * once, we must zap everything for every screen. *----------------------------------------------------------------------------- */ ENTRYPOINT void release_fire(ModeInfo * mi) { if (fire != NULL) { int screen; for (screen = 0; screen < MI_NUM_SCREENS(mi); screen++) free_fire(&fire[screen]); (void) free((void *) fire); fire = (firestruct *) NULL; } if (mode_font != None) { /* only free-ed when there are no more screens used */ XFreeFont(MI_DISPLAY(mi), mode_font); mode_font = None; } FreeAllGL(mi); } ENTRYPOINT Bool fire_handle_event (ModeInfo *mi, XEvent *event) { firestruct *fs = &fire[MI_SCREEN(mi)]; if (gltrackball_event_handler (event, fs->trackball, MI_WIDTH (mi), MI_HEIGHT (mi), &fs->button_down_p)) return True; return False; } #ifndef STANDALONE ENTRYPOINT void change_fire(ModeInfo * mi) { firestruct *fs = &fire[MI_SCREEN(mi)]; if (!fs->glx_context) return; glXMakeCurrent(MI_DISPLAY(mi), MI_WINDOW(mi), *(fs->glx_context)); /* if available, randomly change some values */ if (do_fog) fs->fog = LRAND() & 1; if (do_shadows) fs->shadows = LRAND() & 1; /* reset observer position */ frame = 0; vinit(fs->obs, DEF_OBS[0], DEF_OBS[1], DEF_OBS[2]); fs->v = 0.0; /* particle randomisation */ fs->eject_r = 0.1 + NRAND(10) * 0.03; fs->ridtri = 0.1 + NRAND(10) * 0.005; if (MI_IS_DEBUG(mi)) { (void) fprintf(stderr, "%s:\n\tnum_part=%d\n\ttrees=%d\n\tfog=%s\n\tshadows=%s\n\teject_r=%.3f\n\tridtri=%.3f\n", MI_NAME(mi), fs->np, fs->num_trees, fs->fog ? "on" : "off", fs->shadows ? "on" : "off", fs->eject_r, fs->ridtri); } } #endif /* !STANDALONE */ XSCREENSAVER_MODULE_2 ("GLForestFire", glforestfire, fire) #endif /* MODE_fire */ xscreensaver-5.36/hacks/glx/sballs.c000664 000767 000024 00000061332 12720111725 017452 0ustar00jwzstaff000000 000000 /* sballs --- balls spinning like crazy in GL */ #if 0 static const char sccsid[] = "@(#)sballs.c 5.02 2001/03/10 xlockmore"; #endif /* Copyright (c) E. Lassauge, 2001. */ /* * Permission to use, copy, modify, and distribute this software and its * documentation for any purpose and without fee is hereby granted, * provided that the above copyright notice appear in all copies and that * both that copyright notice and this permission notice appear in * supporting documentation. * * This file is provided AS IS with no warranties of any kind. The author * shall have no liability with respect to the infringement of copyrights, * trade secrets or any patents by this file or any part thereof. In no * event will the author be liable for any lost revenue or profits or * other special, indirect and consequential damages. * * The original code for this mode was written by * Mustata Bogdan (LoneRunner) * and can be found at http://www.cfxweb.net/lonerunner/ * * Eric Lassauge (November-07-2000) * http://lassauge.free.fr/linux.html * * REVISION HISTORY: * * E.Lassauge - 03-Oct-2001: * - minor bugfixes - get ready for xscreensaver * E.Lassauge - 09-Mar-2001: * - get rid of my framerate options to use showfps * E.Lassauge - 28-Nov-2000: * - add handling of polyhedrons (like in ico) * - modified release part to add freeing of GL objects * E.Lassauge - 14-Nov-2000: * - use new common xpm_to_ximage function * */ #ifdef STANDALONE /* xscreensaver mode */ #define DEFAULTS "*delay: 30000 \n" \ "*size: 0 \n" \ "*cycles: 4 \n" \ "*showFPS: False \n" \ "*wireframe: False \n" \ # define refresh_sballs 0 #define MODE_sballs #include "xlockmore.h" /* from the xscreensaver distribution */ #include "gltrackball.h" #else /* !STANDALONE */ #include "xlock.h" /* from the xlockmore distribution */ #include "visgl.h" #endif /* !STANDALONE */ #ifdef MODE_sballs #define MINSIZE 32 /* minimal viewport size */ #define FRAME 50 /* frame count interval */ #define MAX_OBJ 8 /* number of 3D objects */ #if defined( USE_XPM ) || defined( USE_XPMINC ) || defined( STANDALONE ) /* USE_XPM & USE_XPMINC in xlock mode ; HAVE_XPM in xscreensaver mode */ # include "xpm-ximage.h" # define I_HAVE_XPM # ifdef STANDALONE # ifdef __GNUC__ __extension__ /* don't warn about "string length is greater than the length ISO C89 compilers are required to support" when including the following XPM file... */ # endif # include "../images/sball.xpm" # ifdef __GNUC__ __extension__ # endif # include "../images/sball-bg.xpm" # else /* !STANDALONE */ # include "pixmaps/sball.xpm" # include "pixmaps/sball-bg.xpm" # endif /* !STANDALONE */ #endif /* HAVE_XPM */ /* Manage option vars */ #define DEF_TEXTURE "True" #define DEF_OBJECT "0" static Bool do_texture; static int object; static int spheres; static XrmOptionDescRec opts[] = { {"-texture", ".sballs.texture", XrmoptionNoArg, "on"}, {"+texture", ".sballs.texture", XrmoptionNoArg, "off"}, {"-object", ".sballs.object", XrmoptionSepArg, 0}, }; static argtype vars[] = { {&do_texture, "texture", "Texture", DEF_TEXTURE, t_Bool}, {&object, "object", "Object", DEF_OBJECT, t_Int}, }; static OptionStruct desc[] = { /*{"-count spheres", "set number of spheres"},*/ /*{"-cycles speed", "set ball speed value"},*/ {"-/+texture", "turn on/off texturing"}, {"-object num", "number of the 3D object (0 means random)"}, }; ENTRYPOINT ModeSpecOpt sballs_opts = { sizeof opts / sizeof opts[0], opts, sizeof vars / sizeof vars[0], vars, desc }; #ifdef USE_MODULES ModStruct sballs_description = { "sballs", "init_sballs", "draw_sballs", "release_sballs", "draw_sballs", "change_sballs", (char *) NULL, &sballs_opts, /* delay,count,cycles,size,ncolors,sat */ 10000, 0, 10, 400, 64, 1.0, "", "balls spinning like crazy in GL", 0, NULL }; #endif /* USE_MODULES */ /* misc types and defines */ #define vinit(a,i,j,k) {\ (a)[0]=i;\ (a)[1]=j;\ (a)[2]=k;\ } typedef float vec_t; typedef vec_t vec3_t[3]; #define MAX_BALLS 20 /* the mode struct, contains all per screen variables */ typedef struct { GLint WIDTH, HEIGHT; /* display dimensions */ GLXContext *glx_context; XImage *btexture; /* back texture image bits */ XImage *ftexture; /* face texture image bits */ GLuint backid; /* back texture id: GL world */ GLuint faceid; /* face texture id: GL world */ vec3_t eye; vec3_t rotm; int speed; float radius[MAX_BALLS]; trackball_state *trackball; Bool button_down_p; } sballsstruct; /* array of sballsstruct indexed by screen number */ static sballsstruct *sballs = (sballsstruct *) NULL; /* lights */ static const float LightAmbient[]= { 1.0f, 1.0f, 1.0f, 1.0f }; static const float LightDiffuse[]= { 1.0f, 1.0f, 1.0f, 1.0f }; static const float LightPosition[]= { 0.0f, 0.0f, 4.0f, 1.0f }; /* structure of the polyhedras */ typedef struct { const char *longname; /* long name of object */ const char *shortname; /* short name of object */ int numverts; /* number of vertices */ float radius; /* radius */ vec3_t v[MAX_BALLS];/* the vertices */ } Polyinfo; static const Polyinfo polygons[] = { /* 0: objtetra - structure values for tetrahedron */ { "tetrahedron", "tetra", /* long and short names */ 4, /* number of vertices */ 0.8, { /* vertices (x,y,z) */ /* all points must be within radius 2 of the origin */ #define T 1.0 {T, T, T}, {T, -T, -T}, {-T, T, -T}, {-T, -T, T}, #undef T } }, /* 1: objcube - structure values for cube */ { "hexahedron", "cube", /* long and short names */ 8, /* number of vertices, edges, and faces */ 0.6, { /* vertices (x,y,z) */ /* all points must be within radius 2 of the origin */ #define T 1.0 {T, T, T}, {T, T, -T}, {T, -T, -T}, {T, -T, T}, {-T, T, T}, {-T, T, -T}, {-T, -T, -T}, {-T, -T, T}, #undef T } }, /* 2: objocta - structure values for octahedron */ { "octahedron", "octa", /* long and short names */ 6, /* number of vertices */ 0.6, { /* vertices (x,y,z) */ /* all points must be within radius 2 of the origin */ #define T 1.5 {T, 0, 0}, {-T, 0, 0}, {0, T, 0}, {0, -T, 0}, {0, 0, T}, {0, 0, -T}, #undef T } }, /* 3: objdodec - structure values for dodecahedron */ { "dodecahedron", "dodeca", /* long and short names */ 20, /* number of vertices */ 0.35, { /* vertices (x,y,z) */ /* all points must be within radius 2 of the origin */ {0.000000, 0.500000, 1.000000}, {0.000000, -0.500000, 1.000000}, {0.000000, -0.500000, -1.000000}, {0.000000, 0.500000, -1.000000}, {1.000000, 0.000000, 0.500000}, {-1.000000, 0.000000, 0.500000}, {-1.000000, 0.000000, -0.500000}, {1.000000, 0.000000, -0.500000}, {0.500000, 1.000000, 0.000000}, {-0.500000, 1.000000, 0.000000}, {-0.500000, -1.000000, 0.000000}, {0.500000, -1.000000, 0.000000}, {0.750000, 0.750000, 0.750000}, {-0.750000, 0.750000, 0.750000}, {-0.750000, -0.750000, 0.750000}, {0.750000, -0.750000, 0.750000}, {0.750000, -0.750000, -0.750000}, {0.750000, 0.750000, -0.750000}, {-0.750000, 0.750000, -0.750000}, {-0.750000, -0.750000, -0.750000}, } }, /* 4: objicosa - structure values for icosahedron */ { "icosahedron", "icosa", /* long and short names */ 12, /* number of vertices */ 0.4, { /* vertices (x,y,z) */ /* all points must be within radius 2 of the origin */ {0.00000000, 0.00000000, -0.95105650}, {0.00000000, 0.85065080, -0.42532537}, {0.80901698, 0.26286556, -0.42532537}, {0.50000000, -0.68819095, -0.42532537}, {-0.50000000, -0.68819095, -0.42532537}, {-0.80901698, 0.26286556, -0.42532537}, {0.50000000, 0.68819095, 0.42532537}, {0.80901698, -0.26286556, 0.42532537}, {0.00000000, -0.85065080, 0.42532537}, {-0.80901698, -0.26286556, 0.42532537}, {-0.50000000, 0.68819095, 0.42532537}, {0.00000000, 0.00000000, 0.95105650} } }, /* 5: objplane - structure values for plane */ { "plane", "plane", /* long and short names */ 4, /* number of vertices */ 0.7, { /* vertices (x,y,z) */ /* all points must be within radius 2 of the origin */ #define T 1.1 {T, 0, 0}, {-T, 0, 0}, {0, T, 0}, {0, -T, 0}, #undef T } }, /* 6: objpyr - structure values for pyramid */ { "pyramid", "pyramid", /* long and short names */ 5, /* number of vertices */ 0.5, { /* vertices (x,y,z) */ /* all points must be within radius 1 of the origin */ #define T 1.0 {T, 0, 0}, {-T, 0, 0}, {0, T, 0}, {0, -T, 0}, {0, 0, T}, #undef T } }, /* 7: objstar - structure values for octahedron star (stellated octahedron?) */ { "star", "star", /* long and short names */ 8, /* number of vertices */ 0.7, { /* vertices (x,y,z) */ /* all points must be within radius 1 of the origin */ #define T 0.9 {T, T, T}, {T, -T, -T}, {-T, T, -T}, {-T, -T, T}, {-T, -T, -T}, {-T, T, T}, {T, -T, T}, {T, T, -T}, #undef T } }, }; /* *----------------------------------------------------------------------------- *----------------------------------------------------------------------------- * Misc funcs. *----------------------------------------------------------------------------- *----------------------------------------------------------------------------- */ /* initialise textures */ static void inittextures(ModeInfo * mi) { sballsstruct *sb = &sballs[MI_SCREEN(mi)]; #if defined( I_HAVE_XPM ) if (do_texture) { glGenTextures(1, &sb->backid); #ifdef HAVE_GLBINDTEXTURE glBindTexture(GL_TEXTURE_2D, sb->backid); #endif /* HAVE_GLBINDTEXTURE */ sb->btexture = xpm_to_ximage(MI_DISPLAY(mi), MI_VISUAL(mi), MI_COLORMAP(mi), sball_bg); if (!(sb->btexture)) { (void) fprintf(stderr, "Error reading the background texture.\n"); glDeleteTextures(1, &sb->backid); do_texture = False; sb->faceid = 0; /* default textures */ sb->backid = 0; return; } glPixelStorei(GL_UNPACK_ALIGNMENT, 1); clear_gl_error(); glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, sb->btexture->width, sb->btexture->height, 0, GL_RGBA, /* GL_UNSIGNED_BYTE, */ GL_UNSIGNED_INT_8_8_8_8_REV, sb->btexture->data); check_gl_error("texture"); glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT); glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE); glGenTextures(1, &sb->faceid); #ifdef HAVE_GLBINDTEXTURE glBindTexture(GL_TEXTURE_2D, sb->faceid); #endif /* HAVE_GLBINDTEXTURE */ sb->ftexture = xpm_to_ximage(MI_DISPLAY(mi), MI_VISUAL(mi), MI_COLORMAP(mi), sball); if (!(sb->ftexture)) { (void) fprintf(stderr, "Error reading the face texture.\n"); glDeleteTextures(1, &sb->faceid); sb->faceid = 0; return; } glPixelStorei(GL_UNPACK_ALIGNMENT, 1); clear_gl_error(); glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, sb->ftexture->width, sb->ftexture->height, 0, GL_RGBA, /* GL_UNSIGNED_BYTE, */ GL_UNSIGNED_INT_8_8_8_8_REV, sb->ftexture->data); check_gl_error("texture"); glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT); glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE); } else { sb->faceid = 0; /* default textures */ sb->backid = 0; } #else /* !I_HAVE_XPM */ do_texture = False; sb->faceid = 0; /* default textures */ sb->backid = 0; #endif /* !I_HAVE_XPM */ } static void drawSphere(ModeInfo * mi,int sphere_num) { sballsstruct *sb = &sballs[MI_SCREEN(mi)]; float x = polygons[object].v[sphere_num][0]; float y = polygons[object].v[sphere_num][1]; float z = polygons[object].v[sphere_num][2]; int numMajor = 15; int numMinor = 30; float radius = sb->radius[sphere_num]; double majorStep = (M_PI / numMajor); double minorStep = (2.0 * M_PI / numMinor); int i, j; glPushMatrix(); glTranslatef(x, y, z); glColor4f(1, 1, 1, 1); for (i = 0; i < numMajor; ++i) { double a = i * majorStep; double b = a + majorStep; double r0 = radius * sin(a); double r1 = radius * sin(b); GLfloat z0 = radius * cos(a); GLfloat z1 = radius * cos(b); glBegin(MI_IS_WIREFRAME(mi) ? GL_LINE_STRIP: GL_TRIANGLE_STRIP); for (j = 0; j <= numMinor; ++j) { double c = j * minorStep; GLfloat x = cos(c); GLfloat y = sin(c); glNormal3f((x * r0) / radius, (y * r0) / radius, z0 / radius); glTexCoord2f(j / (GLfloat) numMinor, i / (GLfloat) numMajor); glVertex3f(x * r0, y * r0, z0); glNormal3f((x * r1) / radius, (y * r1) / radius, z1 / radius); glTexCoord2f(j / (GLfloat) numMinor, (i + 1) / (GLfloat) numMajor); glVertex3f(x * r1, y * r1, z1); mi->polygon_count++; } glEnd(); } glPopMatrix(); } /* *----------------------------------------------------------------------------- *----------------------------------------------------------------------------- * GL funcs. *----------------------------------------------------------------------------- *----------------------------------------------------------------------------- */ #ifndef STANDALONE static void Reshape(ModeInfo * mi) #else ENTRYPOINT void reshape_sballs(ModeInfo * mi, int width, int height) #endif { sballsstruct *sb = &sballs[MI_SCREEN(mi)]; int size = MI_SIZE(mi); /* Viewport is specified size if size >= MINSIZE && size < screensize */ if (size <= 1) { sb->WIDTH = MI_WIDTH(mi); sb->HEIGHT = MI_HEIGHT(mi); } else if (size < MINSIZE) { sb->WIDTH = MINSIZE; sb->HEIGHT = MINSIZE; } else { sb->WIDTH = (size > MI_WIDTH(mi)) ? MI_WIDTH(mi) : size; sb->HEIGHT = (size > MI_HEIGHT(mi)) ? MI_HEIGHT(mi) : size; } glViewport((MI_WIDTH(mi) - sb->WIDTH) / 2, (MI_HEIGHT(mi) - sb->HEIGHT) / 2, sb->WIDTH, sb->HEIGHT); glMatrixMode(GL_PROJECTION); glLoadIdentity(); gluPerspective(55.0, (float)sb->WIDTH / (float) sb->HEIGHT, 1.0, 300.0); glMatrixMode(GL_MODELVIEW); } static void Draw(ModeInfo * mi) { sballsstruct *sb = &sballs[MI_SCREEN(mi)]; int sphere; mi->polygon_count = 0; glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glPushMatrix(); glEnable(GL_DEPTH_TEST); /* move eyes */ glTranslatef (-sb->eye[0], -sb->eye[1], -sb->eye[2]); /* draw background */ if (do_texture) { glEnable(GL_LIGHTING); glEnable(GL_TEXTURE_2D); glColor3f(1, 1, 1); #ifdef HAVE_GLBINDTEXTURE glBindTexture(GL_TEXTURE_2D, sb->backid); #endif /* HAVE_GLBINDTEXTURE */ } else { glColor3f(0, 0, 0); } glBegin(GL_QUAD_STRIP); #ifndef HAVE_MOBILE /* Letterbox the background image */ glNormal3f(0, 0, 1); glTexCoord2f(0,0); glVertex3f(8, 4.1, -4); glNormal3f(0, 0, 1); glTexCoord2f(0,1); glVertex3f(8, -4.1, -4); glNormal3f(0, 0, 1); glTexCoord2f(1,0); glVertex3f(-8, 4.1, -4); glNormal3f(0, 0, 1); glTexCoord2f(1,1); glVertex3f(-8, -4.1, -4); #else /* Fill the iPhone screen. Letterboxing looks dumb there. */ glNormal3f(0, 0, 1); glTexCoord2f(0,0); glVertex3f(4, 5.2, -4); glNormal3f(0, 0, 1); glTexCoord2f(0,1); glVertex3f(4, -5.2, -4); glNormal3f(0, 0, 1); glTexCoord2f(1,0); glVertex3f(-4, 5.2, -4); glNormal3f(0, 0, 1); glTexCoord2f(1,1); glVertex3f(-4, -5.2, -4); #endif glEnd(); mi->polygon_count++; gltrackball_rotate (sb->trackball); /* rotate the balls */ glRotatef(sb->rotm[0], 1.0f, 0.0f, 0.0f); glRotatef(sb->rotm[1], 0.0f, 1.0f, 0.0f); glRotatef(sb->rotm[2], 0.0f, 0.0f, 1.0f); if (! sb->button_down_p) { sb->rotm[0] += sb->speed; sb->rotm[1] += -(sb->speed); sb->rotm[2] += 0; } /* draw the balls */ if (do_texture) #ifdef HAVE_GLBINDTEXTURE glBindTexture(GL_TEXTURE_2D, sb->faceid); else #endif /* HAVE_GLBINDTEXTURE */ glEnable(GL_LIGHTING); for (sphere=0;spherebtexture = (XImage*) NULL; sb->ftexture = (XImage*) NULL; } vinit(sb->eye ,0.0f, 0.0f, 6.0f); vinit(sb->rotm ,0.0f, 0.0f, 0.0f); sb->speed = MI_CYCLES(mi); /* initialise object number */ if ((object == 0) || (object > MAX_OBJ)) object = NRAND(MAX_OBJ-1)+1; object--; /* initialise sphere number */ spheres = MI_COUNT(mi); if (MI_COUNT(mi) > polygons[object].numverts) spheres = polygons[object].numverts; if (MI_COUNT(mi) < 1) spheres = polygons[object].numverts; /* initialise sphere radius */ for(i=0; i < spheres;i++) { #if RANDOM_RADIUS sb->radius[i] = ((float) LRAND() / (float) MAXRAND); if (sb->radius[i] < 0.3) sb->radius[i] = 0.3; if (sb->radius[i] > 0.7) sb->radius[i] = 0.7; #else sb->radius[i] = polygons[object].radius; #endif } if (MI_IS_DEBUG(mi)) { (void) fprintf(stderr, "%s:\n\tobject=%s\n\tspheres=%d\n\tspeed=%d\n\ttexture=%s\n", MI_NAME(mi), polygons[object].shortname, spheres, (int) MI_CYCLES(mi), do_texture ? "on" : "off" ); } glLightfv(GL_LIGHT1, GL_AMBIENT, LightAmbient); glLightfv(GL_LIGHT1, GL_DIFFUSE, LightDiffuse); glLightfv(GL_LIGHT1, GL_POSITION,LightPosition); glEnable(GL_LIGHT1); } /* *----------------------------------------------------------------------------- *----------------------------------------------------------------------------- * Xlock hooks. *----------------------------------------------------------------------------- *----------------------------------------------------------------------------- */ /* *----------------------------------------------------------------------------- * Initialize sballs. Called each time the window changes. *----------------------------------------------------------------------------- */ ENTRYPOINT void init_sballs(ModeInfo * mi) { sballsstruct *sb; if (sballs == NULL) { if ((sballs = (sballsstruct *) calloc(MI_NUM_SCREENS(mi), sizeof(sballsstruct))) == NULL) return; } sb = &sballs[MI_SCREEN(mi)]; sb->trackball = gltrackball_init (True); if ((sb->glx_context = init_GL(mi)) != NULL) { #ifndef STANDALONE Reshape(mi); /* xlock mode */ #else reshape_sballs(mi,MI_WIDTH(mi),MI_HEIGHT(mi)); /* xscreensaver mode */ #endif glDrawBuffer(GL_BACK); Init(mi); } else { MI_CLEARWINDOW(mi); } } /* *----------------------------------------------------------------------------- * Called by the mainline code periodically to update the display. *----------------------------------------------------------------------------- */ ENTRYPOINT void draw_sballs(ModeInfo * mi) { Display *display = MI_DISPLAY(mi); Window window = MI_WINDOW(mi); sballsstruct *sb; if (sballs == NULL) return; sb = &sballs[MI_SCREEN(mi)]; MI_IS_DRAWN(mi) = True; if (!sb->glx_context) return; glXMakeCurrent(display, window, *(sb->glx_context)); Draw(mi); #ifndef STANDALONE Reshape(mi); /* xlock mode */ #else reshape_sballs(mi,MI_WIDTH(mi),MI_HEIGHT(mi)); /* xscreensaver mode */ #endif glFinish(); glXSwapBuffers(display, window); } /* *----------------------------------------------------------------------------- * The display is being taken away from us. Free up malloc'ed * memory and X resources that we've alloc'ed. Only called * once, we must zap everything for every screen. *----------------------------------------------------------------------------- */ ENTRYPOINT void release_sballs(ModeInfo * mi) { int screen; if (sballs != NULL) { for (screen = 0; screen < MI_NUM_SCREENS(mi); screen++) { sballsstruct *sb = &sballs[screen]; if (sb->btexture) { glDeleteTextures(1,&sb->backid); XDestroyImage(sb->btexture); } if (sb->ftexture) { glDeleteTextures(1,&sb->faceid); XDestroyImage(sb->ftexture); } } (void) free((void *) sballs); sballs = (sballsstruct *) NULL; } FreeAllGL(mi); } ENTRYPOINT Bool sballs_handle_event (ModeInfo *mi, XEvent *event) { sballsstruct *sb = &sballs[MI_SCREEN(mi)]; if (gltrackball_event_handler (event, sb->trackball, MI_WIDTH (mi), MI_HEIGHT (mi), &sb->button_down_p)) return True; return False; } #ifndef STANDALONE ENTRYPOINT void change_sballs(ModeInfo * mi) { sballsstruct *sb; if (sballs == NULL) return; sb = &sballs[MI_SCREEN(mi)]; if (!sb->glx_context) return; /* initialise object number */ if ((object == 0) || (object > MAX_OBJ)) object = NRAND(MAX_OBJ-1)+1; object--; /* correct sphere number */ spheres = MI_COUNT(mi); if (MI_COUNT(mi) > polygons[object].numverts) spheres = polygons[object].numverts; if (MI_COUNT(mi) < 1) spheres = polygons[object].numverts; if (MI_IS_DEBUG(mi)) { (void) fprintf(stderr, "%s:\n\tobject=%s\n\tspheres=%d\n\tspeed=%d\n\ttexture=%s\n", MI_NAME(mi), polygons[object].shortname, spheres, (int) MI_CYCLES(mi), do_texture ? "on" : "off" ); } glXMakeCurrent(MI_DISPLAY(mi), MI_WINDOW(mi), *(sb->glx_context)); } #endif /* !STANDALONE */ XSCREENSAVER_MODULE ("SBalls", sballs) #endif /* MODE_sballs */ xscreensaver-5.36/hacks/glx/cubenetic.c000644 000767 000024 00000036616 12710313174 020141 0ustar00jwzstaff000000 000000 /* cubenetic, Copyright (c) 2002-2014 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. */ #define DEFAULTS "*delay: 20000 \n" \ "*count: 5 \n" \ "*showFPS: False \n" \ "*wireframe: False \n" \ "*suppressRotationAnimation: True\n" \ # define refresh_cube 0 # define release_cube 0 #undef countof #define countof(x) (sizeof((x))/sizeof((*x))) #include "xlockmore.h" #include "colors.h" #include "rotator.h" #include "gltrackball.h" #include #ifdef USE_GL /* whole file */ #define DEF_SPIN "XYZ" #define DEF_WANDER "True" #define DEF_TEXTURE "True" #define DEF_WAVES "3" #define DEF_WAVE_SPEED "80" #define DEF_WAVE_RADIUS "512" typedef struct { int color; GLfloat x, y, z; GLfloat w, h, d; int frame; GLfloat dx, dy, dz; GLfloat dw, dh, dd; } cube; typedef struct { int x, y; double xth, yth; } wave_src; typedef struct { int nwaves; int radius; int speed; wave_src *srcs; int *heights; } waves; typedef struct { GLXContext *glx_context; rotator *rot; trackball_state *trackball; Bool button_down_p; GLuint cube_list; GLuint texture_id; int cube_polys; int ncubes; cube *cubes; waves *waves; int texture_width, texture_height; unsigned char *texture; int ncolors; XColor *cube_colors; XColor *texture_colors; } cube_configuration; static cube_configuration *ccs = NULL; static char *do_spin; static Bool do_wander; static Bool do_texture; static int wave_count; static int wave_speed; static int wave_radius; static int texture_size = 256; static XrmOptionDescRec opts[] = { { "-spin", ".spin", XrmoptionSepArg, 0 }, { "+spin", ".spin", XrmoptionNoArg, "" }, { "-wander", ".wander", XrmoptionNoArg, "True" }, { "+wander", ".wander", XrmoptionNoArg, "False" }, {"-texture", ".texture", XrmoptionNoArg, "true" }, {"+texture", ".texture", XrmoptionNoArg, "false" }, {"-waves", ".waves", XrmoptionSepArg, 0 }, {"-wave-speed", ".waveSpeed", XrmoptionSepArg, 0 }, {"-wave-radius", ".waveRadius", XrmoptionSepArg, 0 }, }; static argtype vars[] = { {&do_spin, "spin", "Spin", DEF_SPIN, t_String}, {&do_wander, "wander", "Wander", DEF_WANDER, t_Bool}, {&do_texture, "texture", "Texture", DEF_TEXTURE, t_Bool}, {&wave_count, "waves", "Waves", DEF_WAVES, t_Int}, {&wave_speed, "waveSpeed", "WaveSpeed", DEF_WAVE_SPEED, t_Int}, {&wave_radius,"waveRadius","WaveRadius", DEF_WAVE_RADIUS,t_Int}, }; ENTRYPOINT ModeSpecOpt cube_opts = {countof(opts), opts, countof(vars), vars, NULL}; static int unit_cube (Bool wire) { int polys = 0; glBegin (wire ? GL_LINE_LOOP : GL_QUADS); /* front */ glNormal3f (0, 0, 1); glTexCoord2f(1, 0); glVertex3f ( 0.5, -0.5, 0.5); glTexCoord2f(0, 0); glVertex3f ( 0.5, 0.5, 0.5); glTexCoord2f(0, 1); glVertex3f (-0.5, 0.5, 0.5); glTexCoord2f(1, 1); glVertex3f (-0.5, -0.5, 0.5); polys++; glEnd(); glBegin (wire ? GL_LINE_LOOP : GL_QUADS); /* back */ glNormal3f (0, 0, -1); glTexCoord2f(0, 0); glVertex3f (-0.5, -0.5, -0.5); glTexCoord2f(0, 1); glVertex3f (-0.5, 0.5, -0.5); glTexCoord2f(1, 1); glVertex3f ( 0.5, 0.5, -0.5); glTexCoord2f(1, 0); glVertex3f ( 0.5, -0.5, -0.5); polys++; glEnd(); glBegin (wire ? GL_LINE_LOOP : GL_QUADS); /* left */ glNormal3f (-1, 0, 0); glTexCoord2f(1, 1); glVertex3f (-0.5, 0.5, 0.5); glTexCoord2f(1, 0); glVertex3f (-0.5, 0.5, -0.5); glTexCoord2f(0, 0); glVertex3f (-0.5, -0.5, -0.5); glTexCoord2f(0, 1); glVertex3f (-0.5, -0.5, 0.5); polys++; glEnd(); glBegin (wire ? GL_LINE_LOOP : GL_QUADS); /* right */ glNormal3f (1, 0, 0); glTexCoord2f(1, 1); glVertex3f ( 0.5, -0.5, -0.5); glTexCoord2f(1, 0); glVertex3f ( 0.5, 0.5, -0.5); glTexCoord2f(0, 0); glVertex3f ( 0.5, 0.5, 0.5); glTexCoord2f(0, 1); glVertex3f ( 0.5, -0.5, 0.5); polys++; glEnd(); if (wire) return polys; glBegin (wire ? GL_LINE_LOOP : GL_QUADS); /* top */ glNormal3f (0, 1, 0); glTexCoord2f(0, 0); glVertex3f ( 0.5, 0.5, 0.5); glTexCoord2f(0, 1); glVertex3f ( 0.5, 0.5, -0.5); glTexCoord2f(1, 1); glVertex3f (-0.5, 0.5, -0.5); glTexCoord2f(1, 0); glVertex3f (-0.5, 0.5, 0.5); polys++; glEnd(); glBegin (wire ? GL_LINE_LOOP : GL_QUADS); /* bottom */ glNormal3f (0, -1, 0); glTexCoord2f(1, 0); glVertex3f (-0.5, -0.5, 0.5); glTexCoord2f(0, 0); glVertex3f (-0.5, -0.5, -0.5); glTexCoord2f(0, 1); glVertex3f ( 0.5, -0.5, -0.5); glTexCoord2f(1, 1); glVertex3f ( 0.5, -0.5, 0.5); polys++; glEnd(); return polys; } /* Window management, etc */ ENTRYPOINT void reshape_cube (ModeInfo *mi, int width, int height) { GLfloat h = (GLfloat) height / (GLfloat) width; glViewport (0, 0, (GLint) width, (GLint) height); glMatrixMode(GL_PROJECTION); glLoadIdentity(); gluPerspective (30.0, 1/h, 1.0, 100.0); glMatrixMode(GL_MODELVIEW); glLoadIdentity(); gluLookAt( 0.0, 0.0, 30.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0); # ifdef HAVE_MOBILE /* Keep it the same relative size when rotated. */ { int o = (int) current_device_rotation(); if (o != 0 && o != 180 && o != -180) glScalef (1/h, 1/h, 1/h); } # endif glClear(GL_COLOR_BUFFER_BIT); } /* Waves. Adapted from ../hacks/interference.c by Hannu Mallat. */ static void init_wave (ModeInfo *mi) { cube_configuration *cc = &ccs[MI_SCREEN(mi)]; waves *ww; int i; cc->waves = ww = (waves *) calloc (sizeof(*cc->waves), 1); ww->nwaves = wave_count; ww->radius = wave_radius; ww->speed = wave_speed; ww->heights = (int *) calloc (sizeof(*ww->heights), ww->radius); ww->srcs = (wave_src *) calloc (sizeof(*ww->srcs), ww->nwaves); for (i = 0; i < ww->radius; i++) { float max = (cc->ncolors * (ww->radius - i) / (float) ww->radius); ww->heights[i] = ((max + max * cos(i / 50.0)) / 2.0); } for (i = 0; i < ww->nwaves; i++) { ww->srcs[i].xth = frand(2.0) * M_PI; ww->srcs[i].yth = frand(2.0) * M_PI; } } static void interference (ModeInfo *mi) { cube_configuration *cc = &ccs[MI_SCREEN(mi)]; waves *ww = cc->waves; int x, y, i; /* Move the wave origins around */ for (i = 0; i < ww->nwaves; i++) { ww->srcs[i].xth += (ww->speed / 1000.0); if (ww->srcs[i].xth > 2*M_PI) ww->srcs[i].xth -= 2*M_PI; ww->srcs[i].yth += (ww->speed / 1000.0); if (ww->srcs[i].yth > 2*M_PI) ww->srcs[i].yth -= 2*M_PI; ww->srcs[i].x = (cc->texture_width/2 + (cos (ww->srcs[i].xth) * cc->texture_width / 2)); ww->srcs[i].y = (cc->texture_height/2 + (cos (ww->srcs[i].yth) * cc->texture_height / 2)); } /* Compute the effect of the waves on each pixel, and generate the output map. */ for (y = 0; y < cc->texture_height; y++) for (x = 0; x < cc->texture_width; x++) { int result = 0; unsigned char *o; for (i = 0; i < ww->nwaves; i++) { int dx = x - ww->srcs[i].x; int dy = y - ww->srcs[i].y; int dist = sqrt (dx*dx + dy*dy); result += (dist > ww->radius ? 0 : ww->heights[dist]); } result %= cc->ncolors; o = cc->texture + (((y * cc->texture_width) + x) << 2); o[0] = (cc->texture_colors[result].red >> 8); o[1] = (cc->texture_colors[result].green >> 8); o[2] = (cc->texture_colors[result].blue >> 8); /* o[3] = 0xFF; */ } } /* Textures */ static void init_texture (ModeInfo *mi) { cube_configuration *cc = &ccs[MI_SCREEN(mi)]; int i; glEnable(GL_TEXTURE_2D); clear_gl_error(); glPixelStorei (GL_UNPACK_ALIGNMENT, 1); glGenTextures (1, &cc->texture_id); glBindTexture (GL_TEXTURE_2D, cc->texture_id); check_gl_error("texture binding"); glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT); glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT); glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); glTexEnvf (GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE); check_gl_error("texture initialization"); cc->texture_width = texture_size; cc->texture_height = texture_size; i = texture_size * texture_size * 4; cc->texture = (unsigned char *) malloc (i); memset (cc->texture, 0xFF, i); } static void shuffle_texture (ModeInfo *mi) { cube_configuration *cc = &ccs[MI_SCREEN(mi)]; interference (mi); clear_gl_error(); glTexImage2D (GL_TEXTURE_2D, 0, GL_RGBA, cc->texture_width, cc->texture_height, 0, GL_RGBA, GL_UNSIGNED_BYTE, cc->texture); check_gl_error("texture"); } static void reset_colors (ModeInfo *mi) { cube_configuration *cc = &ccs[MI_SCREEN(mi)]; double H[3], S[3], V[3]; int shift = 60; H[0] = frand(360.0); H[1] = ((H[0] + shift) < 360) ? (H[0]+shift) : (H[0] + shift - 360); H[2] = ((H[1] + shift) < 360) ? (H[1]+shift) : (H[1] + shift - 360); S[0] = S[1] = S[2] = 1.0; V[0] = V[1] = V[2] = 1.0; make_color_loop(0, 0, 0, H[0], S[0], V[0], H[1], S[1], V[1], H[2], S[2], V[2], cc->texture_colors, &cc->ncolors, False, False); make_smooth_colormap (0, 0, 0, cc->cube_colors, &cc->ncolors, False, 0, False); } ENTRYPOINT Bool cube_handle_event (ModeInfo *mi, XEvent *event) { cube_configuration *cc = &ccs[MI_SCREEN(mi)]; if (gltrackball_event_handler (event, cc->trackball, MI_WIDTH (mi), MI_HEIGHT (mi), &cc->button_down_p)) return True; else if (screenhack_event_helper (MI_DISPLAY(mi), MI_WINDOW(mi), event)) { reset_colors (mi); return True; } return False; } ENTRYPOINT void init_cube (ModeInfo *mi) { int i; cube_configuration *cc; int wire = MI_IS_WIREFRAME(mi); if (!ccs) { ccs = (cube_configuration *) calloc (MI_NUM_SCREENS(mi), sizeof (cube_configuration)); if (!ccs) { fprintf(stderr, "%s: out of memory\n", progname); exit(1); } } cc = &ccs[MI_SCREEN(mi)]; if ((cc->glx_context = init_GL(mi)) != NULL) { reshape_cube (mi, MI_WIDTH(mi), MI_HEIGHT(mi)); } if (!wire) { static const GLfloat pos[4] = {1.0, 0.5, 1.0, 0.0}; static const GLfloat amb[4] = {0.2, 0.2, 0.2, 1.0}; static const GLfloat dif[4] = {1.0, 1.0, 1.0, 1.0}; glLightfv(GL_LIGHT0, GL_POSITION, pos); glLightfv(GL_LIGHT0, GL_AMBIENT, amb); glLightfv(GL_LIGHT0, GL_DIFFUSE, dif); glEnable(GL_LIGHTING); glEnable(GL_LIGHT0); glEnable(GL_DEPTH_TEST); glEnable(GL_CULL_FACE); } { Bool spinx=False, spiny=False, spinz=False; double spin_speed = 1.0; double wander_speed = 0.05; char *s = do_spin; while (*s) { if (*s == 'x' || *s == 'X') spinx = True; else if (*s == 'y' || *s == 'Y') spiny = True; else if (*s == 'z' || *s == 'Z') spinz = True; else if (*s == '0') ; else { fprintf (stderr, "%s: spin must contain only the characters X, Y, or Z (not \"%s\")\n", progname, do_spin); exit (1); } s++; } cc->rot = make_rotator (spinx ? spin_speed : 0, spiny ? spin_speed : 0, spinz ? spin_speed : 0, 1.0, do_wander ? wander_speed : 0, (spinx && spiny && spinz)); cc->trackball = gltrackball_init (True); } cc->ncolors = 256; cc->texture_colors = (XColor *) calloc(cc->ncolors, sizeof(XColor)); cc->cube_colors = (XColor *) calloc(cc->ncolors, sizeof(XColor)); reset_colors (mi); cc->ncubes = MI_COUNT (mi); cc->cubes = (cube *) calloc (sizeof(cube), cc->ncubes); for (i = 0; i < cc->ncubes; i++) { cube *cube = &cc->cubes[i]; cube->color = random() % cc->ncolors; cube->w = 1.0; cube->h = 1.0; cube->d = 1.0; cube->dx = frand(0.1); cube->dy = frand(0.1); cube->dz = frand(0.1); cube->dw = frand(0.1); cube->dh = frand(0.1); cube->dd = frand(0.1); } if (wire) do_texture = False; if (do_texture) { init_texture (mi); init_wave (mi); shuffle_texture (mi); } cc->cube_list = glGenLists (1); glNewList (cc->cube_list, GL_COMPILE); cc->cube_polys = unit_cube (wire); glEndList (); } static void shuffle_cubes (ModeInfo *mi) { cube_configuration *cc = &ccs[MI_SCREEN(mi)]; int i; for (i = 0; i < cc->ncubes; i++) { # define SINOID(SCALE,FRAME,SIZE) \ ((((1 + sin((FRAME * (SCALE)) / 2 * M_PI)) / 2.0) * (SIZE)) - (SIZE)/2) cube *cube = &cc->cubes[i]; cube->x = SINOID(cube->dx, cube->frame, 0.5); cube->y = SINOID(cube->dy, cube->frame, 0.5); cube->z = SINOID(cube->dz, cube->frame, 0.5); cube->w = SINOID(cube->dw, cube->frame, 0.9) + 1.0; cube->h = SINOID(cube->dh, cube->frame, 0.9) + 1.0; cube->d = SINOID(cube->dd, cube->frame, 0.9) + 1.0; cube->frame++; # undef SINOID } } ENTRYPOINT void draw_cube (ModeInfo *mi) { cube_configuration *cc = &ccs[MI_SCREEN(mi)]; Display *dpy = MI_DISPLAY(mi); Window window = MI_WINDOW(mi); int i; if (!cc->glx_context) return; mi->polygon_count = 0; glXMakeCurrent(MI_DISPLAY(mi), MI_WINDOW(mi), *(cc->glx_context)); glShadeModel(GL_FLAT); glEnable(GL_DEPTH_TEST); glEnable(GL_NORMALIZE); glEnable(GL_CULL_FACE); glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glPushMatrix (); glScalef(1.1, 1.1, 1.1); { double x, y, z; get_position (cc->rot, &x, &y, &z, !cc->button_down_p); glTranslatef((x - 0.5) * 8, (y - 0.5) * 6, (z - 0.5) * 15); gltrackball_rotate (cc->trackball); get_rotation (cc->rot, &x, &y, &z, !cc->button_down_p); glRotatef (x * 360, 1.0, 0.0, 0.0); glRotatef (y * 360, 0.0, 1.0, 0.0); glRotatef (z * 360, 0.0, 0.0, 1.0); } glScalef (2.5, 2.5, 2.5); for (i = 0; i < cc->ncubes; i++) { cube *cube = &cc->cubes[i]; GLfloat color[4]; color[0] = cc->cube_colors[cube->color].red / 65536.0; color[1] = cc->cube_colors[cube->color].green / 65536.0; color[2] = cc->cube_colors[cube->color].blue / 65536.0; color[3] = 1.0; cube->color++; if (cube->color >= cc->ncolors) cube->color = 0; glPushMatrix (); glTranslatef (cube->x, cube->y, cube->z); glScalef (cube->w, cube->h, cube->d); glMaterialfv (GL_FRONT, GL_AMBIENT_AND_DIFFUSE, color); glCallList (cc->cube_list); mi->polygon_count += cc->cube_polys; glPopMatrix (); } shuffle_cubes (mi); if (do_texture) shuffle_texture (mi); glPopMatrix(); if (mi->fps_p) do_fps (mi); glFinish(); glXSwapBuffers(dpy, window); } XSCREENSAVER_MODULE_2 ("Cubenetic", cubenetic, cube) #endif /* USE_GL */ xscreensaver-5.36/hacks/glx/spheremonics.c000644 000767 000024 00000056614 12710313224 020673 0ustar00jwzstaff000000 000000 /* xscreensaver, Copyright (c) 2002-2014 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. * * Algorithm by Paul Bourke * http://astronomy.swin.edu.au/~pbourke/geometry/sphericalh/ * Screensaver veneer and parameter selection by jwz. * * Paul says: * * These closed objects are commonly called spherical harmonics, * although they are only remotely related to the mathematical * definition found in the solution to certain wave functions, most * notable the eigenfunctions of angular momentum operators. * * The formula is quite simple: the form used here is based upon * spherical (polar) coordinates (radius, theta, phi). * * r = sin(m0 phi) ^ m1 + * cos(m2 phi) ^ m3 + * sin(m4 theta) ^ m5 + * cos(m6 theta) ^ m7 * * Where phi ranges from 0 to pi (lines of latitude), and theta ranges * from 0 to 2 pi (lines of longitude), and r is the radius. The * parameters m0, m1, m2, m3, m4, m5, m6, and m7 are all integers * greater than or equal to 0. * * As the degree increases, the objects become increasingly "pointed" * and a large number of polygons are required to represent the surface * faithfully. * * jwz adds: * * The eight parameters live in the `cc->m' array. * Each time we permute the image, we alter *one* of those eight parameters. * Each time we alter a parameter, we move it in the same direction (either * toward larger or smaller values) in the range [0, 3]. * * By altering only one parameter at a time, and only by small amounts, * we tend to produce successive objects that are pretty similar to each * other, so you can see a progression. * * It'd be nice if they were even closer together, so that it looked more * like a morph, but, well, that's not how it works. * * There tends to be a dark stripe in the colormaps. I don't know why. * Perhaps utils/colors.c is at fault? * * Note that this equation sometimes generates faces that are inside out: * -parameters 01210111 * To make this work, we need to render back-faces with two-sided lighting: * figuring out how to correct the winding and normals on those inside out * surfaces would be too hard. */ #define DEFAULTS "*delay: 30000 \n" \ "*showFPS: False \n" \ "*wireframe: False \n" \ "*suppressRotationAnimation: True\n" \ "*labelfont: -*-helvetica-medium-r-normal-*-*-180-*-*-*-*-*-*\n" # define refresh_spheremonics 0 # define release_spheremonics 0 #undef countof #define countof(x) (sizeof((x))/sizeof((*x))) #include "xlockmore.h" #include "texfont.h" #include "normals.h" #include "colors.h" #include "rotator.h" #include "gltrackball.h" #include #ifdef USE_GL /* whole file */ #define DEF_DURATION "100" #define DEF_SPIN "XYZ" #define DEF_WANDER "False" #define DEF_RESOLUTION "64" #define DEF_BBOX "False" #define DEF_GRID "True" #define DEF_SMOOTH "True" #define DEF_PARMS "(default)" typedef struct { GLXContext *glx_context; rotator *rot; trackball_state *trackball; Bool button_down_p; GLuint dlist, dlist2; GLfloat scale; XYZ bbox[2]; int resolution; int ncolors; XColor *colors; int m[8]; int dm[8]; int m_max; int tracer; int mesher; int polys1, polys2; /* polygon counts */ texture_font_data *font_data; int change_tick; int done_once; } spheremonics_configuration; static spheremonics_configuration *ccs = NULL; static char *do_spin; static Bool do_wander; static Bool do_bbox; static Bool do_grid; static int smooth_p; static char *static_parms; static int res; static int duration; static XrmOptionDescRec opts[] = { { "-spin", ".spin", XrmoptionSepArg, 0 }, { "+spin", ".spin", XrmoptionNoArg, "" }, { "-wander", ".wander", XrmoptionNoArg, "True" }, { "+wander", ".wander", XrmoptionNoArg, "False" }, { "-resolution", ".resolution", XrmoptionSepArg, 0 }, { "-duration", ".duration", XrmoptionSepArg, 0 }, { "-bbox", ".bbox", XrmoptionNoArg, "True" }, { "+bbox", ".bbox", XrmoptionNoArg, "False" }, { "-grid", ".grid", XrmoptionNoArg, "True" }, { "+grid", ".grid", XrmoptionNoArg, "False" }, {"-smooth", ".smooth", XrmoptionNoArg, "True" }, {"+smooth", ".smooth", XrmoptionNoArg, "False" }, { "-parameters", ".parameters", XrmoptionSepArg, 0 }, }; static argtype vars[] = { {&do_spin, "spin", "Spin", DEF_SPIN, t_String}, {&do_wander, "wander", "Wander", DEF_WANDER, t_Bool}, {&res, "resolution", "Resolution", DEF_RESOLUTION, t_Int}, {&duration, "duration", "Duration", DEF_DURATION, t_Int}, {&do_bbox, "bbox", "BBox", DEF_BBOX, t_Bool}, {&do_grid, "grid", "Grid", DEF_GRID, t_Bool}, {&smooth_p, "smooth", "Smooth", DEF_SMOOTH, t_Bool}, {&static_parms, "parameters", "Parameters", DEF_PARMS, t_String}, }; ENTRYPOINT ModeSpecOpt spheremonics_opts = {countof(opts), opts, countof(vars), vars, NULL}; /* Window management, etc */ ENTRYPOINT void reshape_spheremonics (ModeInfo *mi, int width, int height) { GLfloat h = (GLfloat) height / (GLfloat) width; glViewport (0, 0, (GLint) width, (GLint) height); glMatrixMode(GL_PROJECTION); glLoadIdentity(); gluPerspective (30.0, 1/h, 1.0, 100.0); glMatrixMode(GL_MODELVIEW); glLoadIdentity(); gluLookAt( 0.0, 0.0, 30.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0); # ifdef HAVE_MOBILE /* Keep it the same relative size when rotated. */ { int o = (int) current_device_rotation(); if (o != 0 && o != 180 && o != -180) glScalef (1/h, 1/h, 1/h); } # endif glClear(GL_COLOR_BUFFER_BIT); } static void gl_init (ModeInfo *mi) { /* spheremonics_configuration *cc = &ccs[MI_SCREEN(mi)]; */ int wire = MI_IS_WIREFRAME(mi); static const GLfloat pos[4] = {5.0, 5.0, 10.0, 1.0}; glEnable(GL_NORMALIZE); if (!wire) { glLightfv(GL_LIGHT0, GL_POSITION, pos); glEnable(GL_LIGHTING); glEnable(GL_LIGHT0); glEnable(GL_DEPTH_TEST); /* With objects that have proper winding and normals set up on all their faces, one can cull back-faces; however, these equations generate objects that are sometimes "inside out", and determining whether a facet has been inverted like that is really hard. So we render both front and back faces, at a probable performance penalty on non-accelerated systems. When rendering back faces, we also need to do two-sided lighting, or the fact that the normals are flipped gives us too-dark surfaces on the inside-out surfaces. This isn't generally something you'd want, because you end up with half the lighting dynamic range (kind of.) So if you had a sphere with correctly pointing normals, and a single light source, it would be illuminated from two sides. In this case, though, it saves us from a difficult and time consuming inside/outside test. And we don't really care about a precise lighting effect. */ glDisable(GL_CULL_FACE); glLightModeli (GL_LIGHT_MODEL_TWO_SIDE, True); } if (smooth_p) { glEnable (GL_LINE_SMOOTH); glHint (GL_LINE_SMOOTH_HINT, GL_NICEST); glBlendFunc (GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); glEnable (GL_BLEND); } } /* generate the object */ static XYZ sphere_eval (double theta, double phi, int *m) { double r = 0; XYZ p; r += pow (sin(m[0] * phi), (double)m[1]); r += pow (cos(m[2] * phi), (double)m[3]); r += pow (sin(m[4] * theta),(double)m[5]); r += pow (cos(m[6] * theta),(double)m[7]); p.x = r * sin(phi) * cos(theta); p.y = r * cos(phi); p.z = r * sin(phi) * sin(theta); return (p); } static void do_color (int i, XColor *colors) { GLfloat c[4]; c[0] = colors[i].red / 65535.0; c[1] = colors[i].green / 65535.0; c[2] = colors[i].blue / 65535.0; c[3] = 1.0; glMaterialfv (GL_FRONT, GL_AMBIENT_AND_DIFFUSE, c); glColor3f (c[0], c[1], c[2]); } static void draw_circle (ModeInfo *mi, Bool teeth_p) { GLfloat th; int tick = 0; GLfloat x, y; GLfloat step = (M_PI / 180); glBegin(GL_LINE_LOOP); for (th = 0; th < M_PI*2; th += step*5) { GLfloat r1 = 0.5; x = cos (th); y = sin (th); glVertex3f(x*r1, y*r1, 0); } glEnd(); if (!teeth_p) return; glBegin(GL_LINES); for (th = 0; th < M_PI*2; th += step) { GLfloat r1 = 0.5; GLfloat r2 = r1 - 0.01; if (! (tick % 10)) r2 -= 0.02; else if (! (tick % 5)) r2 -= 0.01; tick++; x = cos (th); y = sin (th); glVertex3f(x*r1, y*r1, 0); glVertex3f(x*r2, y*r2, 0); } glEnd(); } static void draw_bounding_box (ModeInfo *mi) { /* spheremonics_configuration *cc = &ccs[MI_SCREEN(mi)]; */ static const GLfloat c1[4] = { 0.2, 0.2, 0.6, 1.0 }; static const GLfloat c2[4] = { 1.0, 0.0, 0.0, 1.0 }; int wire = MI_IS_WIREFRAME(mi); GLfloat x1,y1,z1,x2,y2,z2; # if 0 x1 = cc->bbox[0].x; y1 = cc->bbox[0].y; z1 = cc->bbox[0].z; x2 = cc->bbox[1].x; y2 = cc->bbox[1].y; z2 = cc->bbox[1].z; # else x1 = y1 = z1 = -0.5; x2 = y2 = z2 = 0.5; # endif if (do_bbox && !wire) { glMaterialfv (GL_FRONT, GL_AMBIENT_AND_DIFFUSE, c1); glFrontFace(GL_CCW); glEnable(GL_CULL_FACE); glBegin(wire ? GL_LINE_LOOP : GL_QUADS); glNormal3f(0, 1, 0); glVertex3f(x1, y1, z1); glVertex3f(x1, y1, z2); glVertex3f(x2, y1, z2); glVertex3f(x2, y1, z1); glEnd(); glBegin(wire ? GL_LINE_LOOP : GL_QUADS); glNormal3f(0, -1, 0); glVertex3f(x2, y2, z1); glVertex3f(x2, y2, z2); glVertex3f(x1, y2, z2); glVertex3f(x1, y2, z1); glEnd(); glBegin(wire ? GL_LINE_LOOP : GL_QUADS); glNormal3f(0, 0, 1); glVertex3f(x1, y1, z1); glVertex3f(x2, y1, z1); glVertex3f(x2, y2, z1); glVertex3f(x1, y2, z1); glEnd(); glBegin(wire ? GL_LINE_LOOP : GL_QUADS); glNormal3f(0, 0, -1); glVertex3f(x1, y2, z2); glVertex3f(x2, y2, z2); glVertex3f(x2, y1, z2); glVertex3f(x1, y1, z2); glEnd(); glBegin(wire ? GL_LINE_LOOP : GL_QUADS); glNormal3f(1, 0, 0); glVertex3f(x1, y2, z1); glVertex3f(x1, y2, z2); glVertex3f(x1, y1, z2); glVertex3f(x1, y1, z1); glEnd(); glBegin(wire ? GL_LINE_LOOP : GL_QUADS); glNormal3f(-1, 0, 0); glVertex3f(x2, y1, z1); glVertex3f(x2, y1, z2); glVertex3f(x2, y2, z2); glVertex3f(x2, y2, z1); glEnd(); glDisable(GL_CULL_FACE); } if (do_grid) { glDisable (GL_LIGHTING); glColor3f (c2[0], c2[1], c2[2]); glPushMatrix(); glBegin(GL_LINES); glVertex3f(0, -0.66, 0); glVertex3f(0, 0.66, 0); glEnd(); draw_circle (mi, True); glRotatef(90, 1, 0, 0); draw_circle (mi, True); glRotatef(90, 0, 1, 0); draw_circle (mi, True); glPopMatrix(); } else { #if 0 glBegin(GL_LINES); if (x1 > 0) x1 = 0; if (x2 < 0) x2 = 0; if (y1 > 0) y1 = 0; if (y2 < 0) y2 = 0; if (z1 > 0) z1 = 0; if (z2 < 0) z2 = 0; glVertex3f(x1, 0, 0); glVertex3f(x2, 0, 0); glVertex3f(0 , y1, 0); glVertex3f(0, y2, 0); glVertex3f(0, 0, z1); glVertex3f(0, 0, z2); glEnd(); #endif } } static void do_tracer (ModeInfo *mi) { spheremonics_configuration *cc = &ccs[MI_SCREEN(mi)]; if (cc->tracer == -1 && cc->mesher == -1 && !(random() % (duration * 4))) { if (random() & 1) cc->tracer = ((random() & 1) ? 0 : 180); else cc->mesher = ((random() % ((duration / 3) + 1)) + (random() % ((duration / 3) + 1))); } if (cc->tracer >= 0) { int d = (90 - cc->tracer); GLfloat th = d * (M_PI / 180); GLfloat x = cos (th); GLfloat y = sin (th); GLfloat s = 1.5 / cc->scale; if (s > 0.001) { static const GLfloat c[4] = { 0.6, 0.5, 1.0, 1.0 }; glDisable (GL_LIGHTING); glPushMatrix(); glRotatef (90, 1, 0, 0); glTranslatef (0, 0, y*s/2); s *= x; glScalef(s, s, s); glColor3f (c[0], c[1], c[2]); draw_circle (mi, False); glPopMatrix(); if (! MI_IS_WIREFRAME(mi)) glEnable (GL_LIGHTING); } cc->tracer += 5; if (cc->tracer == 180 || cc->tracer == 360) cc->tracer = -1; } } static int unit_spheremonics (ModeInfo *mi, int resolution, Bool wire, int *m, XColor *colors) { spheremonics_configuration *cc = &ccs[MI_SCREEN(mi)]; int polys = 0; int i, j; double du, dv; XYZ q[4]; XYZ n[4]; int res = (wire == 2 ? resolution / 2 : resolution); cc->bbox[0].x = cc->bbox[0].y = cc->bbox[0].z = 0; cc->bbox[1].x = cc->bbox[1].y = cc->bbox[1].z = 0; du = (M_PI+M_PI) / (double)res; /* Theta */ dv = M_PI / (double)res; /* Phi */ if (wire) glColor3f (1, 1, 1); glBegin (wire ? GL_LINE_LOOP : GL_QUADS); for (i = 0; i < res; i++) { double u = i * du; for (j = 0; j < res; j++) { double v = j * dv; q[0] = sphere_eval (u, v, m); n[0] = calc_normal(q[0], sphere_eval (u+du/10, v, m), sphere_eval (u, v+dv/10, m)); glNormal3f(n[0].x,n[0].y,n[0].z); if (!wire) do_color (i, colors); glVertex3f(q[0].x,q[0].y,q[0].z); q[1] = sphere_eval (u+du, v, m); n[1] = calc_normal(q[1], sphere_eval (u+du+du/10, v, m), sphere_eval (u+du, v+dv/10, m)); glNormal3f(n[1].x,n[1].y,n[1].z); if (!wire) do_color ((i+1)%res, colors); glVertex3f(q[1].x,q[1].y,q[1].z); q[2] = sphere_eval (u+du, v+dv, m); n[2] = calc_normal(q[2], sphere_eval (u+du+du/10, v+dv, m), sphere_eval (u+du, v+dv+dv/10, m)); glNormal3f(n[2].x,n[2].y,n[2].z); if (!wire) do_color ((i+1)%res, colors); glVertex3f(q[2].x,q[2].y,q[2].z); q[3] = sphere_eval (u,v+dv, m); n[3] = calc_normal(q[3], sphere_eval (u+du/10, v+dv, m), sphere_eval (u, v+dv+dv/10, m)); glNormal3f(n[3].x,n[3].y,n[3].z); if (!wire) do_color (i, colors); glVertex3f(q[3].x,q[3].y,q[3].z); polys++; # define CHECK_BBOX(N) \ if (q[(N)].x < cc->bbox[0].x) cc->bbox[0].x = q[(N)].x; \ if (q[(N)].y < cc->bbox[0].y) cc->bbox[0].y = q[(N)].y; \ if (q[(N)].z < cc->bbox[0].z) cc->bbox[0].z = q[(N)].z; \ if (q[(N)].x > cc->bbox[1].x) cc->bbox[1].x = q[(N)].x; \ if (q[(N)].y > cc->bbox[1].y) cc->bbox[1].y = q[(N)].y; \ if (q[(N)].z > cc->bbox[1].z) cc->bbox[1].z = q[(N)].z CHECK_BBOX(0); CHECK_BBOX(1); CHECK_BBOX(2); CHECK_BBOX(3); # undef CHECK_BBOX } } glEnd(); { GLfloat w = cc->bbox[1].x - cc->bbox[0].x; GLfloat h = cc->bbox[1].y - cc->bbox[0].y; GLfloat d = cc->bbox[1].z - cc->bbox[0].z; GLfloat wh = (w > h ? w : h); GLfloat hd = (h > d ? h : d); GLfloat scale = (wh > hd ? wh : hd); cc->scale = 1/scale; if (wire < 2 && (do_bbox || do_grid)) { GLfloat s = scale * 1.5; glPushMatrix(); glScalef(s, s, s); draw_bounding_box (mi); glPopMatrix(); } } return polys; } static void init_colors (ModeInfo *mi) { spheremonics_configuration *cc = &ccs[MI_SCREEN(mi)]; int i; cc->ncolors = cc->resolution; cc->colors = (XColor *) calloc(cc->ncolors, sizeof(XColor)); make_smooth_colormap (0, 0, 0, cc->colors, &cc->ncolors, False, 0, False); /* brighter colors, please... */ for (i = 0; i < cc->ncolors; i++) { cc->colors[i].red = (cc->colors[i].red / 2) + 32767; cc->colors[i].green = (cc->colors[i].green / 2) + 32767; cc->colors[i].blue = (cc->colors[i].blue / 2) + 32767; } } /* Pick one of the parameters to the function and tweak it up or down. */ static void tweak_parameters (ModeInfo *mi) { spheremonics_configuration *cc = &ccs[MI_SCREEN(mi)]; /* If the -parameters command line option was specified, just use that all the time. */ if (static_parms && *static_parms && !!strcasecmp (static_parms, "(default)")) { unsigned long n; char dummy; if (8 == sscanf (static_parms, "%d %d %d %d %d %d %d %d %c", &cc->m[0], &cc->m[1], &cc->m[2], &cc->m[3], &cc->m[4], &cc->m[5], &cc->m[6], &cc->m[7], &dummy)) return; else if (strlen (static_parms) == 8 && 1 == sscanf (static_parms, "%lu %c", &n, &dummy)) { const char *s = static_parms; int i = 0; while (*s) cc->m[i++] = (*s++)-'0'; return; } fprintf (stderr, "%s: -parameters must be a string of 8 ints (not \"%s\")\n", progname, static_parms); exit (1); } static_parms = 0; # define SHIFT(N) do { \ int n = (N); \ cc->m[n] += cc->dm[n]; \ if (cc->m[n] <= 0) \ cc->m[n] = 0, cc->dm[n] = -cc->dm[n]; \ else if (cc->m[n] >= cc->m_max) \ cc->m[n] = cc->m_max, cc->dm[n] = -cc->dm[n]; \ } while(0) /* else if (cc->m[n] >= cc->m_max/2 && (! (random() % 3))) \ cc->m[n] = cc->m_max/2, cc->dm[n] = -cc->dm[n]; \ */ switch(random() % 8) { case 0: SHIFT(0); break; case 1: SHIFT(1); break; case 2: SHIFT(2); break; case 3: SHIFT(3); break; case 4: SHIFT(4); break; case 5: SHIFT(5); break; case 6: SHIFT(6); break; case 7: SHIFT(7); break; default: abort(); break; } # undef SHIFT #if 0 printf ("%s: state: %d %d %d %d %d %d %d %d\n", progname, cc->m[0], cc->m[1], cc->m[2], cc->m[3], cc->m[4], cc->m[5], cc->m[6], cc->m[7]); #endif } static void generate_spheremonics (ModeInfo *mi) { spheremonics_configuration *cc = &ccs[MI_SCREEN(mi)]; int wire = MI_IS_WIREFRAME(mi); tweak_parameters (mi); if (!cc->done_once || (0 == (random() % 20))) { init_colors (mi); cc->done_once = True; } { glNewList(cc->dlist, GL_COMPILE); cc->polys1 = unit_spheremonics (mi, cc->resolution, wire,cc->m,cc->colors); glEndList(); glNewList(cc->dlist2, GL_COMPILE); glPushMatrix(); glScalef (1.05, 1.05, 1.05); cc->polys2 = unit_spheremonics (mi, cc->resolution, 2, cc->m, cc->colors); glPopMatrix(); glEndList(); } } ENTRYPOINT void init_spheremonics (ModeInfo *mi) { spheremonics_configuration *cc; if (!ccs) { ccs = (spheremonics_configuration *) calloc (MI_NUM_SCREENS(mi), sizeof (spheremonics_configuration)); if (!ccs) { fprintf(stderr, "%s: out of memory\n", progname); exit(1); } } cc = &ccs[MI_SCREEN(mi)]; if ((cc->glx_context = init_GL(mi)) != NULL) { gl_init(mi); reshape_spheremonics (mi, MI_WIDTH(mi), MI_HEIGHT(mi)); } { Bool spinx=False, spiny=False, spinz=False; double spin_speed = 1.0; double wander_speed = 0.03; char *s = do_spin; while (*s) { if (*s == 'x' || *s == 'X') spinx = True; else if (*s == 'y' || *s == 'Y') spiny = True; else if (*s == 'z' || *s == 'Z') spinz = True; else if (*s == '0') ; else { fprintf (stderr, "%s: spin must contain only the characters X, Y, or Z (not \"%s\")\n", progname, do_spin); exit (1); } s++; } cc->rot = make_rotator (spinx ? spin_speed : 0, spinz ? spin_speed : 0, spiny ? spin_speed : 0, 1.0, do_wander ? wander_speed : 0, (spinx && spiny && spinz)); cc->trackball = gltrackball_init (True); } cc->tracer = -1; cc->mesher = -1; cc->resolution = res; cc->font_data = load_texture_font (mi->dpy, "labelfont"); cc->dlist = glGenLists(1); cc->dlist2 = glGenLists(1); cc->m_max = 4; /* 9? */ { unsigned int i; for (i = 0; i < countof(cc->dm); i++) cc->dm[i] = 1; /* going up! */ /* Generate a few more times so we don't always start off with a sphere */ for (i = 0; i < 5; i++) tweak_parameters (mi); } generate_spheremonics(mi); } ENTRYPOINT Bool spheremonics_handle_event (ModeInfo *mi, XEvent *event) { spheremonics_configuration *cc = &ccs[MI_SCREEN(mi)]; if (gltrackball_event_handler (event, cc->trackball, MI_WIDTH (mi), MI_HEIGHT (mi), &cc->button_down_p)) return True; else if (screenhack_event_helper (MI_DISPLAY(mi), MI_WINDOW(mi), event)) { cc->change_tick = duration; return True; } return False; } ENTRYPOINT void draw_spheremonics (ModeInfo *mi) { spheremonics_configuration *cc = &ccs[MI_SCREEN(mi)]; Display *dpy = MI_DISPLAY(mi); Window window = MI_WINDOW(mi); if (!cc->glx_context) return; glXMakeCurrent(MI_DISPLAY(mi), MI_WINDOW(mi), *(cc->glx_context)); gl_init(mi); glShadeModel(GL_SMOOTH); glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glPushMatrix (); glScalef(1.1, 1.1, 1.1); { double x, y, z; get_position (cc->rot, &x, &y, &z, !cc->button_down_p); glTranslatef((x - 0.5) * 8, (y - 0.5) * 6, (z - 0.5) * 8); gltrackball_rotate (cc->trackball); get_rotation (cc->rot, &x, &y, &z, !cc->button_down_p); glRotatef (x * 360, 1.0, 0.0, 0.0); glRotatef (y * 360, 0.0, 1.0, 0.0); glRotatef (z * 360, 0.0, 0.0, 1.0); } glScalef(7,7,7); mi->polygon_count = 0; glScalef (cc->scale, cc->scale, cc->scale); glCallList (cc->dlist); mi->polygon_count += cc->polys1; if (cc->mesher >= 0 /* || cc->button_down_p */) { glDisable (GL_LIGHTING); glCallList (cc->dlist2); mi->polygon_count += cc->polys2; if (cc->mesher >= 0) cc->mesher--; } do_tracer(mi); if (cc->button_down_p) { char buf[200]; sprintf (buf, ((cc->m[0]<10 && cc->m[1]<10 && cc->m[2]<10 && cc->m[3]<10 && cc->m[4]<10 && cc->m[5]<10 && cc->m[6]<10 && cc->m[7]<10) ? "%d%d%d%d%d%d%d%d" : "%d %d %d %d %d %d %d %d"), cc->m[0], cc->m[1], cc->m[2], cc->m[3], cc->m[4], cc->m[5], cc->m[6], cc->m[7]); glColor3f(1.0, 1.0, 0.0); print_texture_label (mi->dpy, cc->font_data, mi->xgwa.width, mi->xgwa.height, 1, buf); } if (!static_parms) { if (cc->change_tick++ >= duration && !cc->button_down_p) { generate_spheremonics(mi); cc->change_tick = 0; cc->mesher = -1; /* turn off the mesh when switching objects */ } } glPopMatrix(); if (mi->fps_p) do_fps (mi); glFinish(); glXSwapBuffers(dpy, window); } XSCREENSAVER_MODULE ("Spheremonics", spheremonics) #endif /* USE_GL */ xscreensaver-5.36/hacks/glx/marching.c000644 000767 000024 00000074140 12707237152 017771 0ustar00jwzstaff000000 000000 /* xscreensaver, Copyright (c) 2002 Jamie Zawinski * Utility functions to create "marching cubes" meshes from 3d fields. * * 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. * * Marching cubes implementation by Paul Bourke * http://astronomy.swin.edu.au/~pbourke/modelling/polygonise/ */ #ifdef HAVE_CONFIG_H # include "config.h" #endif #include #include #include #ifndef HAVE_JWXYZ # include #endif #ifdef HAVE_ANDROID # include #endif #ifdef HAVE_JWZGLES # include "jwzgles.h" #endif /* HAVE_JWZGLES */ #include "marching.h" #include "normals.h" extern char *progname; #undef ABS #define ABS(x) ((x)<0?(-(x)):(x)) typedef struct { XYZ p[3]; } TRIANGLE; typedef struct { XYZ p[8]; double val[8]; } GRIDCELL; /* Indexing convention: Vertices: Edges: 4 ______________ 5 ______________ /| /| /| 4 /| / | 6 / | 7 / |8 5 / | 7 /_____________/ | /______________/ | 9 | | | | | | 6 | | | 0 |_________|___| 1 | |_________|10_| | / | / 11 | 3/ 0 | / | / | / | / | / 1 3 |/____________|/ 2 |/____________|/ 2 */ static const int edgeTable[256] = { 0x0 , 0x109, 0x203, 0x30a, 0x406, 0x50f, 0x605, 0x70c, 0x80c, 0x905, 0xa0f, 0xb06, 0xc0a, 0xd03, 0xe09, 0xf00, 0x190, 0x99 , 0x393, 0x29a, 0x596, 0x49f, 0x795, 0x69c, 0x99c, 0x895, 0xb9f, 0xa96, 0xd9a, 0xc93, 0xf99, 0xe90, 0x230, 0x339, 0x33 , 0x13a, 0x636, 0x73f, 0x435, 0x53c, 0xa3c, 0xb35, 0x83f, 0x936, 0xe3a, 0xf33, 0xc39, 0xd30, 0x3a0, 0x2a9, 0x1a3, 0xaa , 0x7a6, 0x6af, 0x5a5, 0x4ac, 0xbac, 0xaa5, 0x9af, 0x8a6, 0xfaa, 0xea3, 0xda9, 0xca0, 0x460, 0x569, 0x663, 0x76a, 0x66 , 0x16f, 0x265, 0x36c, 0xc6c, 0xd65, 0xe6f, 0xf66, 0x86a, 0x963, 0xa69, 0xb60, 0x5f0, 0x4f9, 0x7f3, 0x6fa, 0x1f6, 0xff , 0x3f5, 0x2fc, 0xdfc, 0xcf5, 0xfff, 0xef6, 0x9fa, 0x8f3, 0xbf9, 0xaf0, 0x650, 0x759, 0x453, 0x55a, 0x256, 0x35f, 0x55 , 0x15c, 0xe5c, 0xf55, 0xc5f, 0xd56, 0xa5a, 0xb53, 0x859, 0x950, 0x7c0, 0x6c9, 0x5c3, 0x4ca, 0x3c6, 0x2cf, 0x1c5, 0xcc , 0xfcc, 0xec5, 0xdcf, 0xcc6, 0xbca, 0xac3, 0x9c9, 0x8c0, 0x8c0, 0x9c9, 0xac3, 0xbca, 0xcc6, 0xdcf, 0xec5, 0xfcc, 0xcc , 0x1c5, 0x2cf, 0x3c6, 0x4ca, 0x5c3, 0x6c9, 0x7c0, 0x950, 0x859, 0xb53, 0xa5a, 0xd56, 0xc5f, 0xf55, 0xe5c, 0x15c, 0x55 , 0x35f, 0x256, 0x55a, 0x453, 0x759, 0x650, 0xaf0, 0xbf9, 0x8f3, 0x9fa, 0xef6, 0xfff, 0xcf5, 0xdfc, 0x2fc, 0x3f5, 0xff , 0x1f6, 0x6fa, 0x7f3, 0x4f9, 0x5f0, 0xb60, 0xa69, 0x963, 0x86a, 0xf66, 0xe6f, 0xd65, 0xc6c, 0x36c, 0x265, 0x16f, 0x66 , 0x76a, 0x663, 0x569, 0x460, 0xca0, 0xda9, 0xea3, 0xfaa, 0x8a6, 0x9af, 0xaa5, 0xbac, 0x4ac, 0x5a5, 0x6af, 0x7a6, 0xaa , 0x1a3, 0x2a9, 0x3a0, 0xd30, 0xc39, 0xf33, 0xe3a, 0x936, 0x83f, 0xb35, 0xa3c, 0x53c, 0x435, 0x73f, 0x636, 0x13a, 0x33 , 0x339, 0x230, 0xe90, 0xf99, 0xc93, 0xd9a, 0xa96, 0xb9f, 0x895, 0x99c, 0x69c, 0x795, 0x49f, 0x596, 0x29a, 0x393, 0x99 , 0x190, 0xf00, 0xe09, 0xd03, 0xc0a, 0xb06, 0xa0f, 0x905, 0x80c, 0x70c, 0x605, 0x50f, 0x406, 0x30a, 0x203, 0x109, 0x0 }; static const int triTable[256][16] = { {-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, { 0, 8, 3, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, { 0, 1, 9, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, { 1, 8, 3, 9, 8, 1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, { 1, 2, 10, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, { 0, 8, 3, 1, 2, 10, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, { 9, 2, 10, 0, 2, 9, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, { 2, 8, 3, 2, 10, 8, 10, 9, 8, -1, -1, -1, -1, -1, -1, -1}, { 3, 11, 2, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, { 0, 11, 2, 8, 11, 0, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, { 1, 9, 0, 2, 3, 11, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, { 1, 11, 2, 1, 9, 11, 9, 8, 11, -1, -1, -1, -1, -1, -1, -1}, { 3, 10, 1, 11, 10, 3, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, { 0, 10, 1, 0, 8, 10, 8, 11, 10, -1, -1, -1, -1, -1, -1, -1}, { 3, 9, 0, 3, 11, 9, 11, 10, 9, -1, -1, -1, -1, -1, -1, -1}, { 9, 8, 10, 10, 8, 11, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, { 4, 7, 8, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, { 4, 3, 0, 7, 3, 4, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, { 0, 1, 9, 8, 4, 7, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, { 4, 1, 9, 4, 7, 1, 7, 3, 1, -1, -1, -1, -1, -1, -1, -1}, { 1, 2, 10, 8, 4, 7, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, { 3, 4, 7, 3, 0, 4, 1, 2, 10, -1, -1, -1, -1, -1, -1, -1}, { 9, 2, 10, 9, 0, 2, 8, 4, 7, -1, -1, -1, -1, -1, -1, -1}, { 2, 10, 9, 2, 9, 7, 2, 7, 3, 7, 9, 4, -1, -1, -1, -1}, { 8, 4, 7, 3, 11, 2, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, {11, 4, 7, 11, 2, 4, 2, 0, 4, -1, -1, -1, -1, -1, -1, -1}, { 9, 0, 1, 8, 4, 7, 2, 3, 11, -1, -1, -1, -1, -1, -1, -1}, { 4, 7, 11, 9, 4, 11, 9, 11, 2, 9, 2, 1, -1, -1, -1, -1}, { 3, 10, 1, 3, 11, 10, 7, 8, 4, -1, -1, -1, -1, -1, -1, -1}, { 1, 11, 10, 1, 4, 11, 1, 0, 4, 7, 11, 4, -1, -1, -1, -1}, { 4, 7, 8, 9, 0, 11, 9, 11, 10, 11, 0, 3, -1, -1, -1, -1}, { 4, 7, 11, 4, 11, 9, 9, 11, 10, -1, -1, -1, -1, -1, -1, -1}, { 9, 5, 4, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, { 9, 5, 4, 0, 8, 3, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, { 0, 5, 4, 1, 5, 0, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, { 8, 5, 4, 8, 3, 5, 3, 1, 5, -1, -1, -1, -1, -1, -1, -1}, { 1, 2, 10, 9, 5, 4, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, { 3, 0, 8, 1, 2, 10, 4, 9, 5, -1, -1, -1, -1, -1, -1, -1}, { 5, 2, 10, 5, 4, 2, 4, 0, 2, -1, -1, -1, -1, -1, -1, -1}, { 2, 10, 5, 3, 2, 5, 3, 5, 4, 3, 4, 8, -1, -1, -1, -1}, { 9, 5, 4, 2, 3, 11, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, { 0, 11, 2, 0, 8, 11, 4, 9, 5, -1, -1, -1, -1, -1, -1, -1}, { 0, 5, 4, 0, 1, 5, 2, 3, 11, -1, -1, -1, -1, -1, -1, -1}, { 2, 1, 5, 2, 5, 8, 2, 8, 11, 4, 8, 5, -1, -1, -1, -1}, {10, 3, 11, 10, 1, 3, 9, 5, 4, -1, -1, -1, -1, -1, -1, -1}, { 4, 9, 5, 0, 8, 1, 8, 10, 1, 8, 11, 10, -1, -1, -1, -1}, { 5, 4, 0, 5, 0, 11, 5, 11, 10, 11, 0, 3, -1, -1, -1, -1}, { 5, 4, 8, 5, 8, 10, 10, 8, 11, -1, -1, -1, -1, -1, -1, -1}, { 9, 7, 8, 5, 7, 9, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, { 9, 3, 0, 9, 5, 3, 5, 7, 3, -1, -1, -1, -1, -1, -1, -1}, { 0, 7, 8, 0, 1, 7, 1, 5, 7, -1, -1, -1, -1, -1, -1, -1}, { 1, 5, 3, 3, 5, 7, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, { 9, 7, 8, 9, 5, 7, 10, 1, 2, -1, -1, -1, -1, -1, -1, -1}, {10, 1, 2, 9, 5, 0, 5, 3, 0, 5, 7, 3, -1, -1, -1, -1}, { 8, 0, 2, 8, 2, 5, 8, 5, 7, 10, 5, 2, -1, -1, -1, -1}, { 2, 10, 5, 2, 5, 3, 3, 5, 7, -1, -1, -1, -1, -1, -1, -1}, { 7, 9, 5, 7, 8, 9, 3, 11, 2, -1, -1, -1, -1, -1, -1, -1}, { 9, 5, 7, 9, 7, 2, 9, 2, 0, 2, 7, 11, -1, -1, -1, -1}, { 2, 3, 11, 0, 1, 8, 1, 7, 8, 1, 5, 7, -1, -1, -1, -1}, {11, 2, 1, 11, 1, 7, 7, 1, 5, -1, -1, -1, -1, -1, -1, -1}, { 9, 5, 8, 8, 5, 7, 10, 1, 3, 10, 3, 11, -1, -1, -1, -1}, { 5, 7, 0, 5, 0, 9, 7, 11, 0, 1, 0, 10, 11, 10, 0, -1}, {11, 10, 0, 11, 0, 3, 10, 5, 0, 8, 0, 7, 5, 7, 0, -1}, {11, 10, 5, 7, 11, 5, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, {10, 6, 5, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, { 0, 8, 3, 5, 10, 6, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, { 9, 0, 1, 5, 10, 6, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, { 1, 8, 3, 1, 9, 8, 5, 10, 6, -1, -1, -1, -1, -1, -1, -1}, { 1, 6, 5, 2, 6, 1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, { 1, 6, 5, 1, 2, 6, 3, 0, 8, -1, -1, -1, -1, -1, -1, -1}, { 9, 6, 5, 9, 0, 6, 0, 2, 6, -1, -1, -1, -1, -1, -1, -1}, { 5, 9, 8, 5, 8, 2, 5, 2, 6, 3, 2, 8, -1, -1, -1, -1}, { 2, 3, 11, 10, 6, 5, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, {11, 0, 8, 11, 2, 0, 10, 6, 5, -1, -1, -1, -1, -1, -1, -1}, { 0, 1, 9, 2, 3, 11, 5, 10, 6, -1, -1, -1, -1, -1, -1, -1}, { 5, 10, 6, 1, 9, 2, 9, 11, 2, 9, 8, 11, -1, -1, -1, -1}, { 6, 3, 11, 6, 5, 3, 5, 1, 3, -1, -1, -1, -1, -1, -1, -1}, { 0, 8, 11, 0, 11, 5, 0, 5, 1, 5, 11, 6, -1, -1, -1, -1}, { 3, 11, 6, 0, 3, 6, 0, 6, 5, 0, 5, 9, -1, -1, -1, -1}, { 6, 5, 9, 6, 9, 11, 11, 9, 8, -1, -1, -1, -1, -1, -1, -1}, { 5, 10, 6, 4, 7, 8, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, { 4, 3, 0, 4, 7, 3, 6, 5, 10, -1, -1, -1, -1, -1, -1, -1}, { 1, 9, 0, 5, 10, 6, 8, 4, 7, -1, -1, -1, -1, -1, -1, -1}, {10, 6, 5, 1, 9, 7, 1, 7, 3, 7, 9, 4, -1, -1, -1, -1}, { 6, 1, 2, 6, 5, 1, 4, 7, 8, -1, -1, -1, -1, -1, -1, -1}, { 1, 2, 5, 5, 2, 6, 3, 0, 4, 3, 4, 7, -1, -1, -1, -1}, { 8, 4, 7, 9, 0, 5, 0, 6, 5, 0, 2, 6, -1, -1, -1, -1}, { 7, 3, 9, 7, 9, 4, 3, 2, 9, 5, 9, 6, 2, 6, 9, -1}, { 3, 11, 2, 7, 8, 4, 10, 6, 5, -1, -1, -1, -1, -1, -1, -1}, { 5, 10, 6, 4, 7, 2, 4, 2, 0, 2, 7, 11, -1, -1, -1, -1}, { 0, 1, 9, 4, 7, 8, 2, 3, 11, 5, 10, 6, -1, -1, -1, -1}, { 9, 2, 1, 9, 11, 2, 9, 4, 11, 7, 11, 4, 5, 10, 6, -1}, { 8, 4, 7, 3, 11, 5, 3, 5, 1, 5, 11, 6, -1, -1, -1, -1}, { 5, 1, 11, 5, 11, 6, 1, 0, 11, 7, 11, 4, 0, 4, 11, -1}, { 0, 5, 9, 0, 6, 5, 0, 3, 6, 11, 6, 3, 8, 4, 7, -1}, { 6, 5, 9, 6, 9, 11, 4, 7, 9, 7, 11, 9, -1, -1, -1, -1}, {10, 4, 9, 6, 4, 10, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, { 4, 10, 6, 4, 9, 10, 0, 8, 3, -1, -1, -1, -1, -1, -1, -1}, {10, 0, 1, 10, 6, 0, 6, 4, 0, -1, -1, -1, -1, -1, -1, -1}, { 8, 3, 1, 8, 1, 6, 8, 6, 4, 6, 1, 10, -1, -1, -1, -1}, { 1, 4, 9, 1, 2, 4, 2, 6, 4, -1, -1, -1, -1, -1, -1, -1}, { 3, 0, 8, 1, 2, 9, 2, 4, 9, 2, 6, 4, -1, -1, -1, -1}, { 0, 2, 4, 4, 2, 6, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, { 8, 3, 2, 8, 2, 4, 4, 2, 6, -1, -1, -1, -1, -1, -1, -1}, {10, 4, 9, 10, 6, 4, 11, 2, 3, -1, -1, -1, -1, -1, -1, -1}, { 0, 8, 2, 2, 8, 11, 4, 9, 10, 4, 10, 6, -1, -1, -1, -1}, { 3, 11, 2, 0, 1, 6, 0, 6, 4, 6, 1, 10, -1, -1, -1, -1}, { 6, 4, 1, 6, 1, 10, 4, 8, 1, 2, 1, 11, 8, 11, 1, -1}, { 9, 6, 4, 9, 3, 6, 9, 1, 3, 11, 6, 3, -1, -1, -1, -1}, { 8, 11, 1, 8, 1, 0, 11, 6, 1, 9, 1, 4, 6, 4, 1, -1}, { 3, 11, 6, 3, 6, 0, 0, 6, 4, -1, -1, -1, -1, -1, -1, -1}, { 6, 4, 8, 11, 6, 8, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, { 7, 10, 6, 7, 8, 10, 8, 9, 10, -1, -1, -1, -1, -1, -1, -1}, { 0, 7, 3, 0, 10, 7, 0, 9, 10, 6, 7, 10, -1, -1, -1, -1}, {10, 6, 7, 1, 10, 7, 1, 7, 8, 1, 8, 0, -1, -1, -1, -1}, {10, 6, 7, 10, 7, 1, 1, 7, 3, -1, -1, -1, -1, -1, -1, -1}, { 1, 2, 6, 1, 6, 8, 1, 8, 9, 8, 6, 7, -1, -1, -1, -1}, { 2, 6, 9, 2, 9, 1, 6, 7, 9, 0, 9, 3, 7, 3, 9, -1}, { 7, 8, 0, 7, 0, 6, 6, 0, 2, -1, -1, -1, -1, -1, -1, -1}, { 7, 3, 2, 6, 7, 2, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, { 2, 3, 11, 10, 6, 8, 10, 8, 9, 8, 6, 7, -1, -1, -1, -1}, { 2, 0, 7, 2, 7, 11, 0, 9, 7, 6, 7, 10, 9, 10, 7, -1}, { 1, 8, 0, 1, 7, 8, 1, 10, 7, 6, 7, 10, 2, 3, 11, -1}, {11, 2, 1, 11, 1, 7, 10, 6, 1, 6, 7, 1, -1, -1, -1, -1}, { 8, 9, 6, 8, 6, 7, 9, 1, 6, 11, 6, 3, 1, 3, 6, -1}, { 0, 9, 1, 11, 6, 7, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, { 7, 8, 0, 7, 0, 6, 3, 11, 0, 11, 6, 0, -1, -1, -1, -1}, { 7, 11, 6, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, { 7, 6, 11, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, { 3, 0, 8, 11, 7, 6, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, { 0, 1, 9, 11, 7, 6, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, { 8, 1, 9, 8, 3, 1, 11, 7, 6, -1, -1, -1, -1, -1, -1, -1}, {10, 1, 2, 6, 11, 7, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, { 1, 2, 10, 3, 0, 8, 6, 11, 7, -1, -1, -1, -1, -1, -1, -1}, { 2, 9, 0, 2, 10, 9, 6, 11, 7, -1, -1, -1, -1, -1, -1, -1}, { 6, 11, 7, 2, 10, 3, 10, 8, 3, 10, 9, 8, -1, -1, -1, -1}, { 7, 2, 3, 6, 2, 7, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, { 7, 0, 8, 7, 6, 0, 6, 2, 0, -1, -1, -1, -1, -1, -1, -1}, { 2, 7, 6, 2, 3, 7, 0, 1, 9, -1, -1, -1, -1, -1, -1, -1}, { 1, 6, 2, 1, 8, 6, 1, 9, 8, 8, 7, 6, -1, -1, -1, -1}, {10, 7, 6, 10, 1, 7, 1, 3, 7, -1, -1, -1, -1, -1, -1, -1}, {10, 7, 6, 1, 7, 10, 1, 8, 7, 1, 0, 8, -1, -1, -1, -1}, { 0, 3, 7, 0, 7, 10, 0, 10, 9, 6, 10, 7, -1, -1, -1, -1}, { 7, 6, 10, 7, 10, 8, 8, 10, 9, -1, -1, -1, -1, -1, -1, -1}, { 6, 8, 4, 11, 8, 6, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, { 3, 6, 11, 3, 0, 6, 0, 4, 6, -1, -1, -1, -1, -1, -1, -1}, { 8, 6, 11, 8, 4, 6, 9, 0, 1, -1, -1, -1, -1, -1, -1, -1}, { 9, 4, 6, 9, 6, 3, 9, 3, 1, 11, 3, 6, -1, -1, -1, -1}, { 6, 8, 4, 6, 11, 8, 2, 10, 1, -1, -1, -1, -1, -1, -1, -1}, { 1, 2, 10, 3, 0, 11, 0, 6, 11, 0, 4, 6, -1, -1, -1, -1}, { 4, 11, 8, 4, 6, 11, 0, 2, 9, 2, 10, 9, -1, -1, -1, -1}, {10, 9, 3, 10, 3, 2, 9, 4, 3, 11, 3, 6, 4, 6, 3, -1}, { 8, 2, 3, 8, 4, 2, 4, 6, 2, -1, -1, -1, -1, -1, -1, -1}, { 0, 4, 2, 4, 6, 2, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, { 1, 9, 0, 2, 3, 4, 2, 4, 6, 4, 3, 8, -1, -1, -1, -1}, { 1, 9, 4, 1, 4, 2, 2, 4, 6, -1, -1, -1, -1, -1, -1, -1}, { 8, 1, 3, 8, 6, 1, 8, 4, 6, 6, 10, 1, -1, -1, -1, -1}, {10, 1, 0, 10, 0, 6, 6, 0, 4, -1, -1, -1, -1, -1, -1, -1}, { 4, 6, 3, 4, 3, 8, 6, 10, 3, 0, 3, 9, 10, 9, 3, -1}, {10, 9, 4, 6, 10, 4, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, { 4, 9, 5, 7, 6, 11, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, { 0, 8, 3, 4, 9, 5, 11, 7, 6, -1, -1, -1, -1, -1, -1, -1}, { 5, 0, 1, 5, 4, 0, 7, 6, 11, -1, -1, -1, -1, -1, -1, -1}, {11, 7, 6, 8, 3, 4, 3, 5, 4, 3, 1, 5, -1, -1, -1, -1}, { 9, 5, 4, 10, 1, 2, 7, 6, 11, -1, -1, -1, -1, -1, -1, -1}, { 6, 11, 7, 1, 2, 10, 0, 8, 3, 4, 9, 5, -1, -1, -1, -1}, { 7, 6, 11, 5, 4, 10, 4, 2, 10, 4, 0, 2, -1, -1, -1, -1}, { 3, 4, 8, 3, 5, 4, 3, 2, 5, 10, 5, 2, 11, 7, 6, -1}, { 7, 2, 3, 7, 6, 2, 5, 4, 9, -1, -1, -1, -1, -1, -1, -1}, { 9, 5, 4, 0, 8, 6, 0, 6, 2, 6, 8, 7, -1, -1, -1, -1}, { 3, 6, 2, 3, 7, 6, 1, 5, 0, 5, 4, 0, -1, -1, -1, -1}, { 6, 2, 8, 6, 8, 7, 2, 1, 8, 4, 8, 5, 1, 5, 8, -1}, { 9, 5, 4, 10, 1, 6, 1, 7, 6, 1, 3, 7, -1, -1, -1, -1}, { 1, 6, 10, 1, 7, 6, 1, 0, 7, 8, 7, 0, 9, 5, 4, -1}, { 4, 0, 10, 4, 10, 5, 0, 3, 10, 6, 10, 7, 3, 7, 10, -1}, { 7, 6, 10, 7, 10, 8, 5, 4, 10, 4, 8, 10, -1, -1, -1, -1}, { 6, 9, 5, 6, 11, 9, 11, 8, 9, -1, -1, -1, -1, -1, -1, -1}, { 3, 6, 11, 0, 6, 3, 0, 5, 6, 0, 9, 5, -1, -1, -1, -1}, { 0, 11, 8, 0, 5, 11, 0, 1, 5, 5, 6, 11, -1, -1, -1, -1}, { 6, 11, 3, 6, 3, 5, 5, 3, 1, -1, -1, -1, -1, -1, -1, -1}, { 1, 2, 10, 9, 5, 11, 9, 11, 8, 11, 5, 6, -1, -1, -1, -1}, { 0, 11, 3, 0, 6, 11, 0, 9, 6, 5, 6, 9, 1, 2, 10, -1}, {11, 8, 5, 11, 5, 6, 8, 0, 5, 10, 5, 2, 0, 2, 5, -1}, { 6, 11, 3, 6, 3, 5, 2, 10, 3, 10, 5, 3, -1, -1, -1, -1}, { 5, 8, 9, 5, 2, 8, 5, 6, 2, 3, 8, 2, -1, -1, -1, -1}, { 9, 5, 6, 9, 6, 0, 0, 6, 2, -1, -1, -1, -1, -1, -1, -1}, { 1, 5, 8, 1, 8, 0, 5, 6, 8, 3, 8, 2, 6, 2, 8, -1}, { 1, 5, 6, 2, 1, 6, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, { 1, 3, 6, 1, 6, 10, 3, 8, 6, 5, 6, 9, 8, 9, 6, -1}, {10, 1, 0, 10, 0, 6, 9, 5, 0, 5, 6, 0, -1, -1, -1, -1}, { 0, 3, 8, 5, 6, 10, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, {10, 5, 6, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, {11, 5, 10, 7, 5, 11, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, {11, 5, 10, 11, 7, 5, 8, 3, 0, -1, -1, -1, -1, -1, -1, -1}, { 5, 11, 7, 5, 10, 11, 1, 9, 0, -1, -1, -1, -1, -1, -1, -1}, {10, 7, 5, 10, 11, 7, 9, 8, 1, 8, 3, 1, -1, -1, -1, -1}, {11, 1, 2, 11, 7, 1, 7, 5, 1, -1, -1, -1, -1, -1, -1, -1}, { 0, 8, 3, 1, 2, 7, 1, 7, 5, 7, 2, 11, -1, -1, -1, -1}, { 9, 7, 5, 9, 2, 7, 9, 0, 2, 2, 11, 7, -1, -1, -1, -1}, { 7, 5, 2, 7, 2, 11, 5, 9, 2, 3, 2, 8, 9, 8, 2, -1}, { 2, 5, 10, 2, 3, 5, 3, 7, 5, -1, -1, -1, -1, -1, -1, -1}, { 8, 2, 0, 8, 5, 2, 8, 7, 5, 10, 2, 5, -1, -1, -1, -1}, { 9, 0, 1, 5, 10, 3, 5, 3, 7, 3, 10, 2, -1, -1, -1, -1}, { 9, 8, 2, 9, 2, 1, 8, 7, 2, 10, 2, 5, 7, 5, 2, -1}, { 1, 3, 5, 3, 7, 5, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, { 0, 8, 7, 0, 7, 1, 1, 7, 5, -1, -1, -1, -1, -1, -1, -1}, { 9, 0, 3, 9, 3, 5, 5, 3, 7, -1, -1, -1, -1, -1, -1, -1}, { 9, 8, 7, 5, 9, 7, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, { 5, 8, 4, 5, 10, 8, 10, 11, 8, -1, -1, -1, -1, -1, -1, -1}, { 5, 0, 4, 5, 11, 0, 5, 10, 11, 11, 3, 0, -1, -1, -1, -1}, { 0, 1, 9, 8, 4, 10, 8, 10, 11, 10, 4, 5, -1, -1, -1, -1}, {10, 11, 4, 10, 4, 5, 11, 3, 4, 9, 4, 1, 3, 1, 4, -1}, { 2, 5, 1, 2, 8, 5, 2, 11, 8, 4, 5, 8, -1, -1, -1, -1}, { 0, 4, 11, 0, 11, 3, 4, 5, 11, 2, 11, 1, 5, 1, 11, -1}, { 0, 2, 5, 0, 5, 9, 2, 11, 5, 4, 5, 8, 11, 8, 5, -1}, { 9, 4, 5, 2, 11, 3, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, { 2, 5, 10, 3, 5, 2, 3, 4, 5, 3, 8, 4, -1, -1, -1, -1}, { 5, 10, 2, 5, 2, 4, 4, 2, 0, -1, -1, -1, -1, -1, -1, -1}, { 3, 10, 2, 3, 5, 10, 3, 8, 5, 4, 5, 8, 0, 1, 9, -1}, { 5, 10, 2, 5, 2, 4, 1, 9, 2, 9, 4, 2, -1, -1, -1, -1}, { 8, 4, 5, 8, 5, 3, 3, 5, 1, -1, -1, -1, -1, -1, -1, -1}, { 0, 4, 5, 1, 0, 5, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, { 8, 4, 5, 8, 5, 3, 9, 0, 5, 0, 3, 5, -1, -1, -1, -1}, { 9, 4, 5, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, { 4, 11, 7, 4, 9, 11, 9, 10, 11, -1, -1, -1, -1, -1, -1, -1}, { 0, 8, 3, 4, 9, 7, 9, 11, 7, 9, 10, 11, -1, -1, -1, -1}, { 1, 10, 11, 1, 11, 4, 1, 4, 0, 7, 4, 11, -1, -1, -1, -1}, { 3, 1, 4, 3, 4, 8, 1, 10, 4, 7, 4, 11, 10, 11, 4, -1}, { 4, 11, 7, 9, 11, 4, 9, 2, 11, 9, 1, 2, -1, -1, -1, -1}, { 9, 7, 4, 9, 11, 7, 9, 1, 11, 2, 11, 1, 0, 8, 3, -1}, {11, 7, 4, 11, 4, 2, 2, 4, 0, -1, -1, -1, -1, -1, -1, -1}, {11, 7, 4, 11, 4, 2, 8, 3, 4, 3, 2, 4, -1, -1, -1, -1}, { 2, 9, 10, 2, 7, 9, 2, 3, 7, 7, 4, 9, -1, -1, -1, -1}, { 9, 10, 7, 9, 7, 4, 10, 2, 7, 8, 7, 0, 2, 0, 7, -1}, { 3, 7, 10, 3, 10, 2, 7, 4, 10, 1, 10, 0, 4, 0, 10, -1}, { 1, 10, 2, 8, 7, 4, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, { 4, 9, 1, 4, 1, 7, 7, 1, 3, -1, -1, -1, -1, -1, -1, -1}, { 4, 9, 1, 4, 1, 7, 0, 8, 1, 8, 7, 1, -1, -1, -1, -1}, { 4, 0, 3, 7, 4, 3, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, { 4, 8, 7, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, { 9, 10, 8, 10, 11, 8, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, { 3, 0, 9, 3, 9, 11, 11, 9, 10, -1, -1, -1, -1, -1, -1, -1}, { 0, 1, 10, 0, 10, 8, 8, 10, 11, -1, -1, -1, -1, -1, -1, -1}, { 3, 1, 10, 11, 3, 10, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, { 1, 2, 11, 1, 11, 9, 9, 11, 8, -1, -1, -1, -1, -1, -1, -1}, { 3, 0, 9, 3, 9, 11, 1, 2, 9, 2, 11, 9, -1, -1, -1, -1}, { 0, 2, 11, 8, 0, 11, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, { 3, 2, 11, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, { 2, 3, 8, 2, 8, 10, 10, 8, 9, -1, -1, -1, -1, -1, -1, -1}, { 9, 10, 2, 0, 9, 2, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, { 2, 3, 8, 2, 8, 10, 0, 1, 8, 1, 10, 8, -1, -1, -1, -1}, { 1, 10, 2, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, { 1, 3, 8, 9, 1, 8, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, { 0, 9, 1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, { 0, 3, 8, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, {-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1} }; /* Linearly interpolate the position where an isosurface cuts an edge between two vertices, each with their own scalar value */ static XYZ interp_vertex (double isolevel, XYZ p1, XYZ p2, double valp1, double valp2) { double mu; XYZ p; if (ABS(isolevel-valp1) < 0.00001) return(p1); if (ABS(isolevel-valp2) < 0.00001) return(p2); if (ABS(valp1-valp2) < 0.00001) return(p1); mu = (isolevel - valp1) / (valp2 - valp1); p.x = p1.x + mu * (p2.x - p1.x); p.y = p1.y + mu * (p2.y - p1.y); p.z = p1.z + mu * (p2.z - p1.z); return(p); } /* Given a grid cell and an isolevel, calculate the triangular facets required to represent the isosurface through the cell. Return the number of triangular facets. `triangles' will be loaded up with the vertices at most 5 triangular facets. 0 will be returned if the grid cell is either totally above of totally below the isolevel. By Paul Bourke */ static int march_one_cube (GRIDCELL grid, double isolevel, TRIANGLE *triangles) { int i, ntriang; int cubeindex; XYZ vertlist[12]; /* Determine the index into the edge table which tells us which vertices are inside of the surface */ cubeindex = 0; if (grid.val[0] < isolevel) cubeindex |= 1; if (grid.val[1] < isolevel) cubeindex |= 2; if (grid.val[2] < isolevel) cubeindex |= 4; if (grid.val[3] < isolevel) cubeindex |= 8; if (grid.val[4] < isolevel) cubeindex |= 16; if (grid.val[5] < isolevel) cubeindex |= 32; if (grid.val[6] < isolevel) cubeindex |= 64; if (grid.val[7] < isolevel) cubeindex |= 128; /* Cube is entirely in/out of the surface */ if (edgeTable[cubeindex] == 0) return(0); /* Find the vertices where the surface intersects the cube */ if (edgeTable[cubeindex] & 1) vertlist[0] = interp_vertex (isolevel,grid.p[0],grid.p[1],grid.val[0],grid.val[1]); if (edgeTable[cubeindex] & 2) vertlist[1] = interp_vertex (isolevel,grid.p[1],grid.p[2],grid.val[1],grid.val[2]); if (edgeTable[cubeindex] & 4) vertlist[2] = interp_vertex (isolevel,grid.p[2],grid.p[3],grid.val[2],grid.val[3]); if (edgeTable[cubeindex] & 8) vertlist[3] = interp_vertex (isolevel,grid.p[3],grid.p[0],grid.val[3],grid.val[0]); if (edgeTable[cubeindex] & 16) vertlist[4] = interp_vertex (isolevel,grid.p[4],grid.p[5],grid.val[4],grid.val[5]); if (edgeTable[cubeindex] & 32) vertlist[5] = interp_vertex (isolevel,grid.p[5],grid.p[6],grid.val[5],grid.val[6]); if (edgeTable[cubeindex] & 64) vertlist[6] = interp_vertex (isolevel,grid.p[6],grid.p[7],grid.val[6],grid.val[7]); if (edgeTable[cubeindex] & 128) vertlist[7] = interp_vertex (isolevel,grid.p[7],grid.p[4],grid.val[7],grid.val[4]); if (edgeTable[cubeindex] & 256) vertlist[8] = interp_vertex (isolevel,grid.p[0],grid.p[4],grid.val[0],grid.val[4]); if (edgeTable[cubeindex] & 512) vertlist[9] = interp_vertex (isolevel,grid.p[1],grid.p[5],grid.val[1],grid.val[5]); if (edgeTable[cubeindex] & 1024) vertlist[10] = interp_vertex (isolevel,grid.p[2],grid.p[6],grid.val[2],grid.val[6]); if (edgeTable[cubeindex] & 2048) vertlist[11] = interp_vertex (isolevel,grid.p[3],grid.p[7],grid.val[3],grid.val[7]); /* Create the triangle */ ntriang = 0; for (i=0; triTable[cubeindex][i] != -1; i+=3) { triangles[ntriang].p[0] = vertlist[triTable[cubeindex][i ]]; triangles[ntriang].p[1] = vertlist[triTable[cubeindex][i+1]]; triangles[ntriang].p[2] = vertlist[triTable[cubeindex][i+2]]; ntriang++; } return(ntriang); } /* Walking the grid. By jwz. */ /* Computes the normal of the scalar field at the given point, for vertex normals (as opposed to face normals.) */ static void do_function_normal (double x, double y, double z, double (*compute_fn) (double x, double y, double z, void *closure), void *c) { XYZ n; double off = 0.5; n.x = compute_fn (x-off, y, z, c) - compute_fn (x+off, y, z, c); n.y = compute_fn (x, y-off, z, c) - compute_fn (x, y+off, z, c); n.z = compute_fn (x, y, z-off, c) - compute_fn (x, y, z+off, c); /* normalize (&n); */ glNormal3f (n.x, n.y, n.z); } /* Given a function capable of generating a value at any XYZ position, creates OpenGL faces for the solids defined. init_fn is called at the beginning for initial, and returns an object. free_fn is called at the end. compute_fn is called for each XYZ in the specified grid, and returns the double value of that coordinate. If smoothing is on, then compute_fn will also be called twice more for each emitted vertex, in order to calculate vertex normals (so don't assume it will only be called with values falling on the grid boundaries.) Points are inside an object if the are less than `isolevel', and outside otherwise. */ void marching_cubes (int grid_size, /* density of the mesh */ double isolevel, /* cutoff point for "in" versus "out" */ int wireframe_p, /* wireframe, or solid */ int smooth_p, /* smooth, or faceted */ void * (*init_fn) (double grid_size, void *closure1), double (*compute_fn) (double x, double y, double z, void *closure2), void (*free_fn) (void *closure2), void *closure1, unsigned long *polygon_count) { int planesize = grid_size * grid_size; int x, y, z; void *closure2 = 0; unsigned long polys = 0; double *layers; layers = (double *) calloc (sizeof (*layers), planesize * 2); if (!layers) { fprintf (stderr, "%s: out of memory for %dx%dx%d grid\n", progname, grid_size, grid_size, 2); exit (1); } if (init_fn) closure2 = init_fn (grid_size, closure1); glFrontFace(GL_CCW); if (!wireframe_p) glBegin (GL_TRIANGLES); for (z = 0; z < grid_size; z++) { double *layer0 = (z & 1 ? layers+planesize : layers); double *layer1 = (z & 1 ? layers : layers+planesize); double *row; /* Fill in the XY grid on the currently-bottommost layer. */ row = layer1; for (y = 0; y < grid_size; y++, row += grid_size) { double *cell = row; for (x = 0; x < grid_size; x++, cell++) *cell = compute_fn (x, y, z, closure2); } /* Now we've completed one layer (an XY slice of Z.) Now we can generate the polygons that fill the space between this layer and the previous one (unless this is the first layer.) */ if (z == 0) continue; for (y = 1; y < grid_size; y += 1) for (x = 1; x < grid_size; x += 1) { TRIANGLE tri[6]; int i, ntri; GRIDCELL cell; /* This is kinda hokey, there ought to be a more efficient way to do this... */ cell.p[0].x = x-1; cell.p[0].y = y-1; cell.p[0].z = z-1; cell.p[1].x = x ; cell.p[1].y = y-1; cell.p[1].z = z-1; cell.p[2].x = x ; cell.p[2].y = y ; cell.p[2].z = z-1; cell.p[3].x = x-1; cell.p[3].y = y ; cell.p[3].z = z-1; cell.p[4].x = x-1; cell.p[4].y = y-1; cell.p[4].z = z ; cell.p[5].x = x ; cell.p[5].y = y-1; cell.p[5].z = z ; cell.p[6].x = x ; cell.p[6].y = y ; cell.p[6].z = z ; cell.p[7].x = x-1; cell.p[7].y = y ; cell.p[7].z = z ; # define GRID(X,Y,WHICH) ((WHICH) \ ? layer1[((Y)*grid_size) + ((X))] \ : layer0[((Y)*grid_size) + ((X))]) cell.val[0] = GRID (x-1, y-1, 0); cell.val[1] = GRID (x , y-1, 0); cell.val[2] = GRID (x , y , 0); cell.val[3] = GRID (x-1, y , 0); cell.val[4] = GRID (x-1, y-1, 1); cell.val[5] = GRID (x , y-1, 1); cell.val[6] = GRID (x , y , 1); cell.val[7] = GRID (x-1, y , 1); # undef GRID /* Now generate the triangles for this cubic segment, and emit the GL faces. */ ntri = march_one_cube (cell, isolevel, tri); polys += ntri; for (i = 0; i < ntri; i++) { if (wireframe_p) glBegin (GL_LINE_LOOP); /* If we're smoothing, we need to call the field function again for each vertex (via function_normal().) If we're not smoothing, then we can just compute the normal from this triangle. */ if (!smooth_p) do_normal (tri[i].p[0].x, tri[i].p[0].y, tri[i].p[0].z, tri[i].p[1].x, tri[i].p[1].y, tri[i].p[1].z, tri[i].p[2].x, tri[i].p[2].y, tri[i].p[2].z); # define VERT(X,Y,Z) \ if (smooth_p) \ do_function_normal ((X), (Y), (Z), compute_fn, closure2); \ glVertex3f ((X), (Y), (Z)) VERT (tri[i].p[0].x, tri[i].p[0].y, tri[i].p[0].z); VERT (tri[i].p[1].x, tri[i].p[1].y, tri[i].p[1].z); VERT (tri[i].p[2].x, tri[i].p[2].y, tri[i].p[2].z); # undef VERT if (wireframe_p) glEnd (); } } } if (!wireframe_p) glEnd (); free (layers); if (free_fn) free_fn (closure2); if (polygon_count) *polygon_count = polys; } xscreensaver-5.36/hacks/glx/lavalite.c000644 000767 000024 00000116514 12721365617 020010 0ustar00jwzstaff000000 000000 /* lavalite --- 3D Simulation a Lava Lite, written by jwz. * * This software Copyright (c) 2002-2014 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. * * LAVA®, LAVA LITE®, LAVA WORLD INTERNATIONAL® and the configuration of the * LAVA® brand motion lamp are registered trademarks of Haggerty Enterprises, * Inc. The configuration of the globe and base of the motion lamp are * registered trademarks of Haggerty Enterprises, Inc. in the U.S.A. and in * other countries around the world. * * Official Lava Lite web site: http://www.lavaworld.com/ * * Implementation details: * * The blobs are generated using metaballs. For an explanation of what * those are, see http://astronomy.swin.edu.au/~pbourke/modelling/implicitsurf/ * or http://www.fifi.org/doc/povray-manual/pov30005.htm * * Basically, each bubble of lava is a few (4) overlapping spherical metaballs * of various sizes following similar but slightly different steep, slow * parabolic arcs from the bottom to the top and back. * * We then polygonize the surface of the lava using the marching squares * algorithm implemented in marching.c. * * Like real lavalites, this program is very slow. * * Surprisingly, it's loading the CPU and not the graphics engine: the speed * bottleneck is in *computing* the scene rather than *rendering* it. We * actually don't use a huge number of polygons, but computing the mesh for * the surface takes a lot of cycles. * * I eliminated all the square roots, but there is still a lot of * floating-point multiplication in here. I tried optimizing away the * fp divisions, but that didn't seem to make a difference. * * -style lamp shape: classic, giant, cone, rocket, or random. * -speed frequency at which new blobs launch. * -resolution density of the polygon mesh. * -count max number of blobs allowed at once. * -wander, -spin whether to roll the scene around the screen. * -lava-color color of the blobbies * -fluid-color color of the stuff the blobbies float in * -base-color color of the base of the lamp * -table-color color of the table under the lamp * -impatient at startup, skip forward in the animation so * that at least one blob is fully exposed. * * TODO: * * - make the table look better, somehow. * - should the lava be emissive? should the one at the bottom be * more brightly colored than the ones at the top? light distance? * - is there some way to put a specular reflection on the front glass * itself? Maybe render it twice with FRONT/BACK tweaked, or alpha * with depth buffering turned off? */ #define DEFAULTS "*delay: 30000 \n" \ "*showFPS: False \n" \ "*wireframe: False \n" \ "*geometry: 600x900\n" \ "*count: " DEF_COUNT " \n" \ # define refresh_lavalite 0 # define release_lavalite 0 #define BLOBS_PER_GROUP 4 #define GRAVITY 0.000013 /* odwnward acceleration */ #define CONVECTION 0.005 /* initial upward velocity (bell curve) */ #define TILT 0.00166666 /* horizontal velocity (bell curve) */ #undef countof #define countof(x) (sizeof((x))/sizeof((*x))) #undef ABS #define ABS(n) ((n)<0?-(n):(n)) #undef SIGNOF #define SIGNOF(n) ((n)<0?-1:1) #include "xlockmore.h" #include "marching.h" #include "rotator.h" #include "gltrackball.h" #include "xpm-ximage.h" #include #ifdef USE_GL /* whole file */ #define DEF_SPIN "Z" #define DEF_WANDER "False" #define DEF_SPEED "0.003" #define DEF_RESOLUTION "40" #define DEF_SMOOTH "True" #define DEF_COUNT "3" #define DEF_STYLE "random" #define DEF_IMPATIENT "False" #define DEF_LCOLOR "#FF0000" /* lava */ #define DEF_FCOLOR "#00AAFF" /* fluid */ #define DEF_BCOLOR "#666666" /* base */ #define DEF_TCOLOR "#000000" /*"#00FF00"*/ /* table */ #define DEF_FTEX "(none)" #define DEF_BTEX "(none)" #define DEF_TTEX "(none)" typedef struct metaball metaball; struct metaball { Bool alive_p; Bool static_p; double r; /* hard radius */ double R; /* radius of field of influence */ double z; /* vertical position */ double pos_r; /* position on horizontal circle */ double pos_th; /* position on horizontal circle */ double dr, dz; /* current velocity */ double x, y; /* h planar position - compused from the above */ metaball *leader; /* stay close to this other ball */ }; typedef enum { CLASSIC = 0, GIANT, CONE, ROCKET } lamp_style; typedef enum { CAP = 100, BOTTLE, BASE } lamp_part; typedef struct { lamp_part part; GLfloat elevation; GLfloat radius; GLfloat texture_elevation; } lamp_geometry; static const lamp_geometry classic_lamp[] = { { CAP, 1.16, 0.089, 0.00 }, { BOTTLE, 0.97, 0.120, 0.40 }, { BOTTLE, 0.13, 0.300, 0.87 }, { BOTTLE, 0.07, 0.300, 0.93 }, { BASE, 0.00, 0.280, 0.00 }, { BASE, -0.40, 0.120, 0.50 }, { BASE, -0.80, 0.280, 1.00 }, { 0, 0, 0, 0 }, }; static const lamp_geometry giant_lamp[] = { { CAP, 1.12, 0.105, 0.00 }, { BOTTLE, 0.97, 0.130, 0.30 }, { BOTTLE, 0.20, 0.300, 0.87 }, { BOTTLE, 0.15, 0.300, 0.93 }, { BASE, 0.00, 0.230, 0.00 }, { BASE, -0.18, 0.140, 0.20 }, { BASE, -0.80, 0.280, 1.00 }, { 0, 0, 0, 0 }, }; static const lamp_geometry cone_lamp[] = { { CAP, 1.35, 0.001, 0.00 }, { CAP, 1.35, 0.020, 0.00 }, { CAP, 1.30, 0.055, 0.05 }, { BOTTLE, 0.97, 0.120, 0.40 }, { BOTTLE, 0.13, 0.300, 0.87 }, { BASE, 0.00, 0.300, 0.00 }, { BASE, -0.04, 0.320, 0.04 }, { BASE, -0.60, 0.420, 0.50 }, { 0, 0, 0, 0 }, }; static const lamp_geometry rocket_lamp[] = { { CAP, 1.35, 0.001, 0.00 }, { CAP, 1.34, 0.020, 0.00 }, { CAP, 1.30, 0.055, 0.05 }, { BOTTLE, 0.97, 0.120, 0.40 }, { BOTTLE, 0.13, 0.300, 0.87 }, { BOTTLE, 0.07, 0.300, 0.93 }, { BASE, 0.00, 0.280, 0.00 }, { BASE, -0.50, 0.180, 0.50 }, { BASE, -0.75, 0.080, 0.75 }, { BASE, -0.80, 0.035, 0.80 }, { BASE, -0.90, 0.035, 1.00 }, { 0, 0, 0, 0 }, }; typedef struct { GLXContext *glx_context; lamp_style style; const lamp_geometry *model; rotator *rot; rotator *rot2; trackball_state *trackball; Bool button_down_p; GLfloat max_bottle_radius; /* radius of widest part of the bottle */ GLfloat launch_chance; /* how often to percolate */ int blobs_per_group; /* how many metaballs we launch at once */ Bool just_started_p; /* so we launch some goo right away */ int grid_size; /* resolution for marching-cubes */ int nballs; metaball *balls; GLuint bottle_list; GLuint ball_list; int bottle_poly_count; /* polygons in the bottle only */ } lavalite_configuration; static lavalite_configuration *bps = NULL; static char *do_spin; static char *do_style; static GLfloat speed; static Bool do_wander; static int resolution; static Bool do_smooth; static Bool do_impatient; static char *lava_color_str, *fluid_color_str, *base_color_str, *table_color_str; static char *fluid_tex, *base_tex, *table_tex; static GLfloat lava_color[4], fluid_color[4], base_color[4], table_color[4]; static const GLfloat lava_spec[4] = {1.0, 1.0, 1.0, 1.0}; static const GLfloat lava_shininess = 128.0; static const GLfloat foot_color[4] = {0.2, 0.2, 0.2, 1.0}; static const GLfloat light0_pos[4] = {-0.6, 0.0, 1.0, 0.0}; static const GLfloat light1_pos[4] = { 1.0, 0.0, 0.2, 0.0}; static const GLfloat light2_pos[4] = { 0.6, 0.0, 1.0, 0.0}; static XrmOptionDescRec opts[] = { { "-style", ".style", XrmoptionSepArg, 0 }, { "-spin", ".spin", XrmoptionSepArg, 0 }, { "+spin", ".spin", XrmoptionNoArg, "" }, { "-speed", ".speed", XrmoptionSepArg, 0 }, { "-wander", ".wander", XrmoptionNoArg, "True" }, { "+wander", ".wander", XrmoptionNoArg, "False" }, { "-resolution", ".resolution", XrmoptionSepArg, 0 }, { "-smooth", ".smooth", XrmoptionNoArg, "True" }, { "+smooth", ".smooth", XrmoptionNoArg, "False" }, { "-impatient", ".impatient", XrmoptionNoArg, "True" }, { "+impatient", ".impatient", XrmoptionNoArg, "False" }, { "-lava-color", ".lavaColor", XrmoptionSepArg, 0 }, { "-fluid-color", ".fluidColor", XrmoptionSepArg, 0 }, { "-base-color", ".baseColor", XrmoptionSepArg, 0 }, { "-table-color", ".tableColor", XrmoptionSepArg, 0 }, { "-fluid-texture",".fluidTexture", XrmoptionSepArg, 0 }, { "-base-texture", ".baseTexture", XrmoptionSepArg, 0 }, { "-table-texture",".tableTexture", XrmoptionSepArg, 0 }, }; static argtype vars[] = { {&do_style, "style", "Style", DEF_STYLE, t_String}, {&do_spin, "spin", "Spin", DEF_SPIN, t_String}, {&do_wander, "wander", "Wander", DEF_WANDER, t_Bool}, {&speed, "speed", "Speed", DEF_SPEED, t_Float}, {&resolution, "resolution", "Resolution", DEF_RESOLUTION, t_Int}, {&do_smooth, "smooth", "Smooth", DEF_SMOOTH, t_Bool}, {&do_impatient, "impatient", "Impatient", DEF_IMPATIENT, t_Bool}, {&lava_color_str, "lavaColor", "LavaColor", DEF_LCOLOR, t_String}, {&fluid_color_str, "fluidColor", "FluidColor", DEF_FCOLOR, t_String}, {&base_color_str, "baseColor", "BaseColor", DEF_BCOLOR, t_String}, {&table_color_str, "tableColor", "TableColor", DEF_TCOLOR, t_String}, {&fluid_tex, "fluidTexture", "FluidTexture", DEF_FTEX, t_String}, {&base_tex, "baseTexture", "BaseTexture", DEF_BTEX, t_String}, {&table_tex, "tableTexture", "BaseTexture", DEF_TTEX, t_String}, }; ENTRYPOINT ModeSpecOpt lavalite_opts = {countof(opts), opts, countof(vars), vars, NULL}; /* Window management, etc */ ENTRYPOINT void reshape_lavalite (ModeInfo *mi, int width, int height) { GLfloat h = (GLfloat) height / (GLfloat) width; glViewport (0, 0, (GLint) width, (GLint) height); glMatrixMode(GL_PROJECTION); glLoadIdentity(); gluPerspective (30.0, 1/h, 1.0, 100.0); glMatrixMode(GL_MODELVIEW); glLoadIdentity(); gluLookAt( 0.0, 0.0, 30.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0); glClear(GL_COLOR_BUFFER_BIT); } /* Textures */ static Bool load_texture (ModeInfo *mi, const char *filename) { Display *dpy = mi->dpy; Visual *visual = mi->xgwa.visual; Colormap cmap = mi->xgwa.colormap; char buf[1024]; XImage *image; if (!filename || !*filename || !strcasecmp (filename, "(none)")) { glDisable (GL_TEXTURE_2D); return False; } image = xpm_file_to_ximage (dpy, visual, cmap, filename); if (!image) return False; clear_gl_error(); glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, image->width, image->height, 0, GL_RGBA, GL_UNSIGNED_BYTE, image->data); sprintf (buf, "texture: %.100s (%dx%d)", filename, image->width, image->height); check_gl_error(buf); glPixelStorei (GL_UNPACK_ALIGNMENT, 4); glPixelStorei (GL_UNPACK_ROW_LENGTH, image->width); glTexEnvf (GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE); glTexParameterf (GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT); glTexParameterf (GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT); glTexParameterf (GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); glTexParameterf (GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); glEnable (GL_TEXTURE_2D); return True; } /* Generating the lamp's bottle, caps, and base. */ static int draw_disc (GLfloat r, GLfloat z, int faces, Bool up_p, Bool wire) { int j; GLfloat th; GLfloat step = M_PI * 2 / faces; int polys = 0; GLfloat x, y; glFrontFace (up_p ? GL_CW : GL_CCW); glNormal3f (0, (up_p ? 1 : -1), 0); glBegin (wire ? GL_LINE_LOOP : GL_TRIANGLES); x = r; y = 0; for (j = 0, th = 0; j <= faces; j++) { glTexCoord2f (-j / (GLfloat) faces, 1); glVertex3f (0, z, 0); glTexCoord2f (-j / (GLfloat) faces, 0); glVertex3f (x, z, y); th += step; x = r * cos (th); y = r * sin (th); glTexCoord2f (-j / (GLfloat) faces, 0); glVertex3f (x, z, y); polys++; } glEnd(); return polys; } static int draw_tube (GLfloat r0, GLfloat r1, GLfloat z0, GLfloat z1, GLfloat t0, GLfloat t1, int faces, Bool inside_out_p, Bool smooth_p, Bool wire) { int polys = 0; GLfloat th; GLfloat x, y, x0=0, y0=0; GLfloat step = M_PI * 2 / faces; GLfloat s2 = step/2; int i; glFrontFace (inside_out_p ? GL_CW : GL_CCW); glBegin (wire ? GL_LINES : (smooth_p ? GL_QUAD_STRIP : GL_QUADS)); th = 0; x = 1; y = 0; if (!smooth_p) { x0 = cos (s2); y0 = sin (s2); } if (smooth_p) faces++; for (i = 0; i < faces; i++) { int nsign = (inside_out_p ? -1 : 1); if (smooth_p) glNormal3f (x * nsign, z1, y * nsign); else glNormal3f (x0 * nsign, z1, y0 * nsign); glTexCoord2f (nsign * -i / (GLfloat) faces, 1-t1); glVertex3f (x * r1, z1, y * r1); glTexCoord2f (nsign * -i / (GLfloat) faces, 1-t0); glVertex3f (x * r0, z0, y * r0); th += step; x = cos (th); y = sin (th); if (!smooth_p) { x0 = cos (th + s2); y0 = sin (th + s2); glTexCoord2f (nsign * -(i+1) / (double) faces, 1-t0); glVertex3f (x * r0, z0, y * r0); glTexCoord2f (nsign * -(i+1) / (double) faces, 1-t1); glVertex3f (x * r1, z1, y * r1); } polys++; } glEnd(); return polys; } static int draw_table (GLfloat z, Bool wire) { GLfloat faces = 6; GLfloat step = M_PI * 2 / faces; GLfloat s = 8; GLfloat th; int j; int polys = 0; glMaterialfv (GL_FRONT, GL_AMBIENT_AND_DIFFUSE, table_color); glFrontFace(GL_CW); glNormal3f(0, 1, 0); glBegin(wire ? GL_LINE_LOOP : GL_TRIANGLE_FAN); if (! wire) { glTexCoord2f (-0.5, 0.5); glVertex3f(0, z, 0); } for (j = 0, th = 0; j <= faces; j++) { GLfloat x = cos (th); GLfloat y = sin (th); glTexCoord2f (-(x+1)/2.0, (y+1)/2.0); glVertex3f(x*s, z, y*s); th += step; polys++; } glEnd(); return polys; } static int draw_wing (GLfloat w, GLfloat h, GLfloat d, Bool wire) { static const int coords[2][8][2] = { { { 0, 0 }, { 10, 10 }, { 20, 23 }, { 30, 41 }, { 40, 64 }, { 45, 81 }, { 50, 103 }, { 53, 134 } }, { { 0, 54 }, { 10, 57 }, { 20, 64 }, { 30, 75 }, { 40, 92 }, { 45, 104 }, { 50, 127 }, { 51, 134 } } }; int polys = 0; int maxx = coords[0][countof(coords[0])-1][0]; int maxy = coords[0][countof(coords[0])-1][1]; unsigned int x; for (x = 1; x < countof(coords[0]); x++) { GLfloat px0 = (GLfloat) coords[0][x-1][0] / maxx * w; GLfloat py0 = (GLfloat) coords[0][x-1][1] / maxy * h; GLfloat px1 = (GLfloat) coords[1][x-1][0] / maxx * w; GLfloat py1 = (GLfloat) coords[1][x-1][1] / maxy * h; GLfloat px2 = (GLfloat) coords[0][x ][0] / maxx * w; GLfloat py2 = (GLfloat) coords[0][x ][1] / maxy * h; GLfloat px3 = (GLfloat) coords[1][x ][0] / maxx * w; GLfloat py3 = (GLfloat) coords[1][x ][1] / maxy * h; GLfloat zz = d/2; /* Left side */ glFrontFace (GL_CW); glNormal3f (0, 0, -1); glBegin (wire ? GL_LINE_LOOP : GL_QUADS); glTexCoord2f (px0, py0); glVertex3f (px0, -py0, -zz); glTexCoord2f (px1, py1); glVertex3f (px1, -py1, -zz); glTexCoord2f (px3, py3); glVertex3f (px3, -py3, -zz); glTexCoord2f (px2, py2); glVertex3f (px2, -py2, -zz); polys++; glEnd(); /* Right side */ glFrontFace (GL_CCW); glNormal3f (0, 0, -1); glBegin (wire ? GL_LINE_LOOP : GL_QUADS); glTexCoord2f(px0, py0); glVertex3f (px0, -py0, zz); glTexCoord2f(px1, py1); glVertex3f (px1, -py1, zz); glTexCoord2f(px3, py3); glVertex3f (px3, -py3, zz); glTexCoord2f(px2, py2); glVertex3f (px2, -py2, zz); polys++; glEnd(); /* Top edge */ glFrontFace (GL_CCW); glNormal3f (1, -1, 0); /* #### wrong */ glBegin (wire ? GL_LINE_LOOP : GL_QUADS); glTexCoord2f(px0, py0); glVertex3f (px0, -py0, -zz); glTexCoord2f(px0, py0); glVertex3f (px0, -py0, zz); glTexCoord2f(px2, py2); glVertex3f (px2, -py2, zz); glTexCoord2f(px2, py2); glVertex3f (px2, -py2, -zz); polys++; glEnd(); /* Bottom edge */ glFrontFace (GL_CW); glNormal3f (-1, 1, 0); /* #### wrong */ glBegin (wire ? GL_LINE_LOOP : GL_QUADS); glTexCoord2f(px1, py1); glVertex3f (px1, -py1, -zz); glTexCoord2f(px1, py1); glVertex3f (px1, -py1, zz); glTexCoord2f(px3, py3); glVertex3f (px3, -py3, zz); glTexCoord2f(px3, py3); glVertex3f (px3, -py3, -zz); polys++; glEnd(); } return polys; } static void generate_bottle (ModeInfo *mi) { lavalite_configuration *bp = &bps[MI_SCREEN(mi)]; int wire = MI_IS_WIREFRAME(mi); int faces = resolution * 1.5; Bool smooth = do_smooth; const lamp_geometry *top_slice = bp->model; const char *current_texture = 0; lamp_part last_part = 0; if (faces < 3) faces = 3; else if (wire && faces > 20) faces = 20; else if (faces > 60) faces = 60; bp->bottle_poly_count = 0; glNewList (bp->bottle_list, GL_COMPILE); glPushMatrix(); glRotatef (90, 1, 0, 0); glTranslatef (0, -0.5, 0); /* All parts of the lamp use the same specularity and shininess. */ glMaterialfv (GL_FRONT, GL_SPECULAR, lava_spec); glMateriali (GL_FRONT, GL_SHININESS, lava_shininess); while (1) { const lamp_geometry *bot_slice = top_slice + 1; const char *texture = 0; GLfloat *color = 0; GLfloat t0, t1; glDisable (GL_LIGHT2); switch (top_slice->part) { case CAP: case BASE: texture = base_tex; color = base_color; break; case BOTTLE: texture = fluid_tex; color = fluid_color; if (!wire) glEnable (GL_LIGHT2); /* light2 affects only fluid */ break; default: abort(); break; } if (!wire && texture && texture != current_texture) { current_texture = texture; load_texture (mi, current_texture); } /* Color the discs darker than the tube walls. */ glMaterialfv (GL_FRONT, GL_AMBIENT_AND_DIFFUSE, foot_color); /* Do a top disc if this is the first slice of the CAP or BASE. */ if ((top_slice->part == CAP && last_part == 0) || (top_slice->part == BASE && last_part == BOTTLE)) bp->bottle_poly_count += draw_disc (top_slice->radius, top_slice->elevation, faces, True, wire); /* Do a bottom disc if this is the last slice of the CAP or BASE. */ if ((top_slice->part == CAP && bot_slice->part == BOTTLE) || (top_slice->part == BASE && bot_slice->part == 0)) { const lamp_geometry *sl = (bot_slice->part == 0 ? top_slice : bot_slice); bp->bottle_poly_count += draw_disc (sl->radius, sl->elevation, faces, False, wire); } if (bot_slice->part == 0) /* done! */ break; /* Do a tube or cone */ glMaterialfv (GL_FRONT, GL_AMBIENT_AND_DIFFUSE, color); t0 = top_slice->texture_elevation; t1 = bot_slice->texture_elevation; /* Restart the texture coordinates for the glass. */ if (top_slice->part == BOTTLE) { Bool first_p = (top_slice[-1].part != BOTTLE); Bool last_p = (bot_slice->part != BOTTLE); if (first_p) t0 = 0; if (last_p) t1 = 1; } bp->bottle_poly_count += draw_tube (top_slice->radius, bot_slice->radius, top_slice->elevation, bot_slice->elevation, t0, t1, faces, (top_slice->part == BOTTLE), smooth, wire); last_part = top_slice->part; top_slice++; } if (bp->style == ROCKET) { int i; for (i = 0; i < 3; i++) { glPushMatrix(); glRotatef (120 * i, 0, 1, 0); glTranslatef (0.14, -0.05, 0); bp->bottle_poly_count += draw_wing (0.4, 0.95, 0.02, wire); glPopMatrix(); } glTranslatef (0, -0.1, 0); /* move floor down a little */ } if (!wire) load_texture (mi, table_tex); glMaterialfv (GL_FRONT, GL_AMBIENT_AND_DIFFUSE, table_color); bp->bottle_poly_count += draw_table (top_slice->elevation, wire); glPopMatrix (); glDisable (GL_TEXTURE_2D); /* done with textured objects */ glEndList (); } /* Generating blobbies */ static double bellrand (double extent) /* like frand(), but a bell curve. */ { return (((frand(extent) + frand(extent) + frand(extent)) / 3) - (extent/2)); } static void move_ball (ModeInfo *mi, metaball *b); /* Bring a ball into play, and re-randomize its values. */ static void reset_ball (ModeInfo *mi, metaball *b) { /* lavalite_configuration *bp = &bps[MI_SCREEN(mi)]; */ b->r = 0.00001; b->R = 0.12 + bellrand(0.10); b->pos_r = bellrand (0.9); b->pos_th = frand(M_PI*2); b->z = 0; b->dr = bellrand(TILT); b->dz = CONVECTION; b->leader = 0; if (!b->alive_p) b->alive_p = True; move_ball (mi, b); } /* returns the first metaball that is not in use, or 0. */ static metaball * get_ball (ModeInfo *mi) { lavalite_configuration *bp = &bps[MI_SCREEN(mi)]; int i; for (i = 0; i < bp->nballs; i++) { metaball *b = &bp->balls[i]; if (!b->alive_p) return b; } return 0; } /* Generate the blobs that don't move: the ones at teh top and bottom that are part of the scenery. */ static void generate_static_blobs (ModeInfo *mi) { lavalite_configuration *bp = &bps[MI_SCREEN(mi)]; metaball *b0, *b1; int i; b0 = get_ball (mi); if (!b0) abort(); b0->static_p = True; b0->alive_p = True; b0->R = 0.6; b0->r = 0.3; /* the giant blob at the bottom of the bottle. */ b0->pos_r = 0; b0->pos_th = 0; b0->dr = 0; b0->dz = 0; b0->x = 0; b0->y = 0; b0->z = -0.43; /* the small blob at the top of the bottle. */ b1 = get_ball (mi); if (!b1) abort(); *b1 = *b0; b1->R = 0.16; b1->r = 0.135; b1->z = 1.078; /* Some extra blobs at the bottom of the bottle, to jumble the surface. */ for (i = 0; i < bp->blobs_per_group; i++) { b1 = get_ball (mi); if (!b1) abort(); reset_ball (mi, b1); b1->static_p = True; b1->z = frand(0.04); b1->dr = 0; b1->dz = 0; } } static GLfloat max_bottle_radius (lavalite_configuration *bp) { GLfloat r = 0; const lamp_geometry *slice; for (slice = bp->model; slice->part != 0; slice++) { if (slice->part == BOTTLE && slice->radius > r) r = slice->radius; /* top */ if (slice[1].radius > r) r = slice[1].radius; /* bottom */ } return r; } static GLfloat bottle_radius_at (lavalite_configuration *bp, GLfloat z) { GLfloat topz = -999, botz = -999, topr = 0, botr = 0; const lamp_geometry *slice; GLfloat ratio; for (slice = bp->model; slice->part != 0; slice++) if (z > slice->elevation) { slice--; topz = slice->elevation; topr = slice->radius; break; } if (topz == -999) return 0; for (; slice->part != 0; slice++) if (z > slice->elevation) { botz = slice->elevation; botr = slice->radius; break; } if (botz == -999) return 0; ratio = (z - botz) / (topz - botz); return (botr + ((topr - botr) * ratio)); } static void move_ball (ModeInfo *mi, metaball *b) { lavalite_configuration *bp = &bps[MI_SCREEN(mi)]; double gravity = GRAVITY; double real_r; if (b->static_p) return; b->pos_r += b->dr; b->z += b->dz; b->dz -= gravity; if (b->pos_r > 0.9) { b->pos_r = 0.9; b->dr = -b->dr; } else if (b->pos_r < 0) { b->pos_r = -b->pos_r; b->dr = -b->dr; } real_r = b->pos_r * bottle_radius_at (bp, b->z); b->x = cos (b->pos_th) * real_r; b->y = sin (b->pos_th) * real_r; if (b->z < -b->R) /* dropped below bottom of glass - turn it off */ b->alive_p = False; } /* This function makes sure that balls that are part of a group always stay relatively close to each other. */ static void clamp_balls (ModeInfo *mi) { lavalite_configuration *bp = &bps[MI_SCREEN(mi)]; int i; for (i = 0; i < bp->nballs; i++) { metaball *b = &bp->balls[i]; if (b->alive_p && b->leader) { double zslack = 0.1; double minz = b->leader->z - zslack; double maxz = b->leader->z + zslack; /* Try to keep the Z values near those of the leader. Don't let it go out of range (above or below) and clamp it if it does. If we've clamped it, make sure dz will be moving it in the right direction (back toward the leader.) We aren't currently clamping r, only z -- doesn't seem to be needed. This is kind of flaky, I think. Sometimes you can see the blobbies "twitch". That's no good. */ if (b->z < minz) { if (b->dz < 0) b->dz = -b->dz; b->z = minz - b->dz; } if (b->z > maxz) { if (b->dz > 0) b->dz = -b->dz; b->z = maxz + b->dz; } } } } static void move_balls (ModeInfo *mi) /* for great justice */ { lavalite_configuration *bp = &bps[MI_SCREEN(mi)]; int i; for (i = 0; i < bp->nballs; i++) { metaball *b = &bp->balls[i]; if (b->alive_p) move_ball (mi, b); } clamp_balls (mi); } /* Rendering blobbies using marching cubes. */ static double compute_metaball_influence (lavalite_configuration *bp, double x, double y, double z, int nballs, metaball *balls) { double vv = 0; int i; for (i = 0; i < nballs; i++) { metaball *b = &balls[i]; double dx, dy, dz; double d2, r, R, r2, R2; if (!b->alive_p) continue; dx = x - b->x; dy = y - b->y; dz = z - b->z; R = b->R; if (dx > R || dx < -R || /* quick check before multiplying */ dy > R || dy < -R || dz > R || dz < -R) continue; d2 = (dx*dx + dy*dy + dz*dz); r = b->r; r2 = r*r; R2 = R*R; if (d2 <= r2) /* (d <= r) inside the hard radius */ vv += 1; else if (d2 > R2) /* (d > R) outside the radius of influence */ ; else /* somewhere in between: linear drop-off from r=1 to R=0 */ { /* was: vv += 1 - ((d-r) / (R-r)); */ vv += 1 - ((d2-r2) / (R2-r2)); } } return vv; } /* callback for marching_cubes() */ static void * obj_init (double grid_size, void *closure) { lavalite_configuration *bp = (lavalite_configuration *) closure; bp->grid_size = grid_size; return closure; } /* Returns True if the given point is outside of the glass tube. */ static double clipped_by_glass_p (double x, double y, double z, lavalite_configuration *bp) { double d2, or, or2, ir2; or = bp->max_bottle_radius; if (x > or || x < -or || /* quick check before multiplying */ y > or || y < -or) return 0; d2 = (x*x + y*y); or = bottle_radius_at (bp, z); or2 = or*or; if (d2 > or2) /* (sqrt(d) > or) */ return 0; ir2 = or2 * 0.7; if (d2 > ir2) /* (sqrt(d) > ir) */ { double dr1 = or2; double dr2 = ir2; /* was: (1 - (d-ratio2) / (ratio1-ratio2)) */ return (1 - (d2-dr2) / (dr1-dr2)); } return 1; } /* callback for marching_cubes() */ static double obj_compute (double x, double y, double z, void *closure) { lavalite_configuration *bp = (lavalite_configuration *) closure; double clip; x /= bp->grid_size; /* convert from 0-N to 0-1. */ y /= bp->grid_size; z /= bp->grid_size; x -= 0.5; /* X and Y range from -.5 to +.5; z ranges from 0-1. */ y -= 0.5; clip = clipped_by_glass_p (x, y, z, bp); if (clip == 0) return 0; return (clip * compute_metaball_influence (bp, x, y, z, bp->nballs, bp->balls)); } /* callback for marching_cubes() */ static void obj_free (void *closure) { } /* Send a new blob travelling upward. This blob will actually be composed of N metaballs that are near each other. */ static void launch_balls (ModeInfo *mi) { lavalite_configuration *bp = &bps[MI_SCREEN(mi)]; metaball *b0 = get_ball (mi); int i; if (!b0) return; reset_ball (mi, b0); for (i = 0; i < bp->blobs_per_group; i++) { metaball *b1 = get_ball (mi); if (!b1) break; *b1 = *b0; reset_ball (mi, b1); b1->leader = b0; # define FROB(FIELD,AMT) \ b1->FIELD += (bellrand(AMT) * b0->FIELD) /* FROB (pos_r, 0.7); */ /* FROB (pos_th, 0.7); */ FROB (dr, 0.8); FROB (dz, 0.6); # undef FROB } } static void animate_lava (ModeInfo *mi) { lavalite_configuration *bp = &bps[MI_SCREEN(mi)]; int wire = MI_IS_WIREFRAME(mi); Bool just_started_p = bp->just_started_p; double isolevel = 0.3; /* Maybe bubble a new blobby to the surface. */ if (just_started_p || frand(1.0) < bp->launch_chance) { bp->just_started_p = False; launch_balls (mi); if (do_impatient && just_started_p) while (1) { int i; move_balls (mi); for (i = 0; i < bp->nballs; i++) { metaball *b = &bp->balls[i]; if (b->alive_p && !b->static_p && !b->leader && b->z > 0.5) goto DONE; } } DONE: ; } move_balls (mi); glNewList (bp->ball_list, GL_COMPILE); glPushMatrix(); glMaterialfv (GL_FRONT, GL_SPECULAR, lava_spec); glMateriali (GL_FRONT, GL_SHININESS, lava_shininess); glMaterialfv (GL_FRONT, GL_AMBIENT_AND_DIFFUSE, lava_color); /* For the blobbies, the origin is on the axis at the bottom of the glass bottle; and the top of the bottle is +1 on Z. */ glTranslatef (0, 0, -0.5); mi->polygon_count = 0; { double s; if (bp->grid_size == 0) bp->grid_size = 1; /* first time through */ s = 1.0/bp->grid_size; glPushMatrix(); glTranslatef (-0.5, -0.5, 0); glScalef (s, s, s); marching_cubes (resolution, isolevel, wire, do_smooth, obj_init, obj_compute, obj_free, bp, &mi->polygon_count); glPopMatrix(); } mi->polygon_count += bp->bottle_poly_count; glPopMatrix(); glEndList (); } /* Startup initialization */ ENTRYPOINT Bool lavalite_handle_event (ModeInfo *mi, XEvent *event) { lavalite_configuration *bp = &bps[MI_SCREEN(mi)]; if (gltrackball_event_handler (event, bp->trackball, MI_WIDTH (mi), MI_HEIGHT (mi), &bp->button_down_p)) return True; return False; } static void parse_color (ModeInfo *mi, const char *name, const char *s, GLfloat *a) { XColor c; a[3] = 1.0; /* alpha */ if (! XParseColor (MI_DISPLAY(mi), MI_COLORMAP(mi), s, &c)) { fprintf (stderr, "%s: can't parse %s color %s", progname, name, s); exit (1); } a[0] = c.red / 65536.0; a[1] = c.green / 65536.0; a[2] = c.blue / 65536.0; } ENTRYPOINT void init_lavalite (ModeInfo *mi) { lavalite_configuration *bp; int wire = MI_IS_WIREFRAME(mi); if (!bps) { bps = (lavalite_configuration *) calloc (MI_NUM_SCREENS(mi), sizeof (lavalite_configuration)); if (!bps) { fprintf(stderr, "%s: out of memory\n", progname); exit(1); } } bp = &bps[MI_SCREEN(mi)]; bp->glx_context = init_GL(mi); reshape_lavalite (mi, MI_WIDTH(mi), MI_HEIGHT(mi)); { char *s = do_style; if (!s || !*s || !strcasecmp (s, "classic")) bp->style = CLASSIC; else if (!strcasecmp (s, "giant")) bp->style = GIANT; else if (!strcasecmp (s, "cone")) bp->style = CONE; else if (!strcasecmp (s, "rocket")) bp->style = ROCKET; else if (!strcasecmp (s, "random")) { if (random() & 1) bp->style = CLASSIC; /* half the time */ else bp->style = (random() % ((int) ROCKET+1)); } else { fprintf (stderr, "%s: style must be Classic, Giant, Cone, or Rocket (not \"%s\")\n", progname, s); exit (1); } } parse_color (mi, "lava", lava_color_str, lava_color); parse_color (mi, "fluid", fluid_color_str, fluid_color); parse_color (mi, "base", base_color_str, base_color); parse_color (mi, "table", table_color_str, table_color); if (!wire) { GLfloat amb[4] = {0.0, 0.0, 0.0, 1.0}; GLfloat dif[4] = {1.0, 1.0, 1.0, 1.0}; GLfloat spc0[4] = {0.0, 1.0, 1.0, 1.0}; GLfloat spc1[4] = {1.0, 0.0, 1.0, 1.0}; glEnable(GL_LIGHTING); glEnable(GL_LIGHT0); glEnable(GL_LIGHT1); glEnable(GL_DEPTH_TEST); glEnable(GL_CULL_FACE); glEnable(GL_NORMALIZE); glShadeModel(GL_SMOOTH); glLightfv(GL_LIGHT0, GL_AMBIENT, amb); glLightfv(GL_LIGHT0, GL_DIFFUSE, dif); glLightfv(GL_LIGHT0, GL_SPECULAR, spc0); glLightfv(GL_LIGHT1, GL_AMBIENT, amb); glLightfv(GL_LIGHT1, GL_DIFFUSE, dif); glLightfv(GL_LIGHT1, GL_SPECULAR, spc1); glLightfv(GL_LIGHT2, GL_AMBIENT, amb); glLightfv(GL_LIGHT2, GL_DIFFUSE, dif); glLightfv(GL_LIGHT2, GL_SPECULAR, spc0); } { Bool spinx=False, spiny=False, spinz=False; double spin_speed = 0.4; double wander_speed = 0.03; char *s = do_spin; while (*s) { if (*s == 'x' || *s == 'X') spinx = True; else if (*s == 'y' || *s == 'Y') spiny = True; else if (*s == 'z' || *s == 'Z') spinz = True; else if (*s == '0') ; else { fprintf (stderr, "%s: spin must contain only the characters X, Y, or Z (not \"%s\")\n", progname, do_spin); exit (1); } s++; } bp->rot = make_rotator (spinx ? spin_speed : 0, spiny ? spin_speed : 0, spinz ? spin_speed : 0, 1.0, do_wander ? wander_speed : 0, False); bp->rot2 = make_rotator (spin_speed, 0, 0, 1, 0.1, False); bp->trackball = gltrackball_init (False); /* move initial camera position up by around 15 degrees: in other words, tilt the scene toward the viewer. */ gltrackball_start (bp->trackball, 50, 50, 100, 100); gltrackball_track (bp->trackball, 50, 5, 100, 100); /* Oh, but if it's the "Giant" model, tilt the scene away: make it look like we're looking up at it instead of down at it! */ if (bp->style == GIANT) gltrackball_track (bp->trackball, 50, -12, 100, 100); else if (bp->style == ROCKET) /* same for rocket, but not as much */ gltrackball_track (bp->trackball, 50, -4, 100, 100); } switch (bp->style) { case CLASSIC: bp->model = classic_lamp; break; case GIANT: bp->model = giant_lamp; break; case CONE: bp->model = cone_lamp; break; case ROCKET: bp->model = rocket_lamp; break; default: abort(); break; } bp->max_bottle_radius = max_bottle_radius (bp); bp->launch_chance = speed; bp->blobs_per_group = BLOBS_PER_GROUP; bp->just_started_p = True; bp->nballs = (((MI_COUNT (mi) + 1) * bp->blobs_per_group) + 2); bp->balls = (metaball *) calloc (sizeof(*bp->balls), bp->nballs+1); bp->bottle_list = glGenLists (1); bp->ball_list = glGenLists (1); generate_bottle (mi); generate_static_blobs (mi); } /* Render one frame */ ENTRYPOINT void draw_lavalite (ModeInfo *mi) { lavalite_configuration *bp = &bps[MI_SCREEN(mi)]; Display *dpy = MI_DISPLAY(mi); Window window = MI_WINDOW(mi); if (!bp->glx_context) return; glXMakeCurrent(MI_DISPLAY(mi), MI_WINDOW(mi), *(bp->glx_context)); glMatrixMode (GL_MODELVIEW); glPushMatrix (); { double cx, cy, cz; /* camera position, 0-1. */ double px, py, pz; /* object position, 0-1. */ double rx, ry, rz; /* object rotation, 0-1. */ get_position (bp->rot2, 0, &cy, &cz, !bp->button_down_p); get_rotation (bp->rot2, &cx, 0, 0, !bp->button_down_p); get_position (bp->rot, &px, &py, &pz, !bp->button_down_p); get_rotation (bp->rot, &rx, &ry, &rz, !bp->button_down_p); #if 1 cx = 0.5; cy = 0.5; cz = 1.0; #else /* #### this crud doesn't really work yet */ /* We have c[xyz] parameters describing a camera position, but we don't want to just map those to points in space: the lamp doesn't look very good from the inside, or from underneath... Good observation points form a ring around the lamp: basically, a torus ringing the lamp, parallel to the lamp's floor. We interpret cz as distance from the origin. cy as elevation. cx is then used as position in the torus (theta). */ { double cx2, cy2, cz2; double d; cx2 = 0.5; cy2 = 0.5; cz2 = 1.0; cy2 = (cy * 0.4); /* cam elevation: 0.0 (table) - 0.4 up. */ d = 0.9 + cz; /* cam distance: 0.9 - 1.9. */ cz2 = 0.5 + (d * cos (cx * M_PI * 2)); cx2 = 0.5 + (d * sin (cx * M_PI * 2)); cx = cx2; cy = cy2; cz = cz2; } #endif /* 0 */ glLoadIdentity(); glRotatef(current_device_rotation(), 0, 0, 1); gluLookAt ((cx - 0.5) * 8, /* Position the camera */ (cy - 0.5) * 8, (cz - 0.5) * 8, 0, 0, 0, 0, 1, 0); gltrackball_rotate (bp->trackball); /* Apply mouse-based camera position */ /* Place the lights relative to the object, before the object has been rotated or wandered within the scene. */ glLightfv(GL_LIGHT0, GL_POSITION, light0_pos); glLightfv(GL_LIGHT1, GL_POSITION, light1_pos); glLightfv(GL_LIGHT2, GL_POSITION, light2_pos); /* Position the lamp in the scene according to the "wander" settings */ glTranslatef ((px - 0.5), (py - 0.5), (pz - 0.5)); /* Rotate the object according to the "spin" settings */ glRotatef (rx * 360, 1.0, 0.0, 0.0); glRotatef (ry * 360, 0.0, 1.0, 0.0); glRotatef (rz * 360, 0.0, 0.0, 1.0); /* Move the lamp up slightly: make 0,0 be at its vertical center. */ switch (bp->style) { case CLASSIC: glTranslatef (0, 0, 0.33); break; case GIANT: glTranslatef (0, 0, 0.33); break; case CONE: glTranslatef (0, 0, 0.16); break; case ROCKET: glTranslatef (0, 0, 0.30); glScalef (0.85,0.85,0.85); break; default: abort(); break; } } animate_lava (mi); glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glCallList (bp->bottle_list); glCallList (bp->ball_list); glPopMatrix (); if (mi->fps_p) do_fps (mi); glFinish(); glXSwapBuffers(dpy, window); } XSCREENSAVER_MODULE ("Lavalite", lavalite) #endif /* USE_GL */ xscreensaver-5.36/hacks/glx/rotator.c000664 000767 000024 00000016277 12702271647 017706 0ustar00jwzstaff000000 000000 /* xscreensaver, Copyright (c) 1998-2016 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. */ #include #ifdef HAVE_CONFIG_H # include "config.h" #endif #include #include #include "rotator.h" #include "yarandom.h" struct rotator { double spin_x_speed, spin_y_speed, spin_z_speed; /* scaling factors >= 0. */ double wander_speed; double rotx, roty, rotz; /* current object rotation, -1 to +1. Sign indicates direction of motion. 0.25 means +90 deg, positive velocity. -0.25 means +90 deg, negative velocity (not +270 deg or -90 deg!) Yes, this is stupid. */ double dx, dy, dz; /* current rotational velocity, >= 0. */ double ddx, ddy, ddz; /* current rotational acceleration, +/-. */ double d_max; /* max rotational velocity, > 0. */ int wander_frame; /* position in the wander cycle, >= 0. */ }; #undef ABS #define ABS(x) ((x)<0?-(x):(x)) #define BELLRAND(n) ((frand((n)) + frand((n)) + frand((n))) / 3) #define RANDSIGN() ((random() & 1) ? 1 : -1) /* Stay in the range [0-1). 1.01 => 0.01. -0.01 => 0.99 */ #define CLAMP(i) do { \ while ((i) < 0) (i)++; \ while ((i) >= 1) (i)--; \ } while (0) #undef EPSILON #define EPSILON 0.000001 static void rotate_1 (double *pos, double *v, double *dv, double speed, double max_v) { /* Sign of *pos is direction of motion. Sign of *v is always positive. It would make way more sense for *v to indicate direction of motion. What was I thinking? */ double ppos = *pos; if (speed == 0) return; /* tick position */ if (ppos < 0) /* Ignore but preserve the sign on ppos. It's kind of like: ppos = old_sign * (abs(ppos) + (v * old_sign)) This is why it would make more sense for that sign bit to be on v. */ ppos = -(ppos + *v); else ppos += *v; CLAMP (ppos); *pos = (*pos > 0 ? ppos : -ppos); /* preserve old sign bit on pos. */ /* accelerate */ *v += *dv; /* clamp velocity */ if (*v > max_v || *v < -max_v) { *dv = -*dv; } /* If it stops, start it going in the other direction. */ /* Since *v is always positive, <= 0 means stopped. */ else if (*v < 0) { if (random() % 4) { *v = 0; /* don't let velocity be negative */ if (random() % 2) /* stay stopped, and kill acceleration */ *dv = 0; else if (*dv < 0) /* was decelerating, accelerate instead */ *dv = -*dv; } else { *v = -*v; /* switch to tiny positive velocity, or zero */ *dv = -*dv; /* toggle acceleration */ *pos = -*pos; /* reverse direction of motion */ } } /* Alter direction of rotational acceleration randomly. */ if (! (random() % 120)) *dv = -*dv; /* Change acceleration very occasionally. */ if (! (random() % 200)) { #if 0 /* this might make more sense: */ if (*dv > -EPSILON && *dv < EPSILON) *dv += 10 * (*dv < 0 ? -EPSILON : EPSILON); #else if (*dv == 0) *dv = 0.00001; #endif else if (random() & 1) *dv *= 1.2; else *dv *= 0.8; } } /* Returns a rotator object, which encapsulates rotation and motion state. spin_[xyz]_speed indicates the relative speed of rotation. Specify 0 if you don't want any rotation around that axis. spin_accel specifies a scaling factor for the acceleration that is randomly applied to spin: if you want the speed to change faster, make this > 1. wander_speed indicates the relative speed through space. If randomize_initial_state_p is true, then the initial position and rotation will be randomized (even if the spin speeds are 0.) If it is false, then all values will be initially zeroed. */ rotator * make_rotator (double spin_x_speed, double spin_y_speed, double spin_z_speed, double spin_accel, double wander_speed, int randomize_initial_state_p) { rotator *r = (rotator *) calloc (1, sizeof(*r)); double d, dd; if (!r) return 0; if (spin_x_speed < 0 || spin_y_speed < 0 || spin_z_speed < 0 || wander_speed < 0) abort(); r->spin_x_speed = spin_x_speed; r->spin_y_speed = spin_y_speed; r->spin_z_speed = spin_z_speed; r->wander_speed = wander_speed; if (randomize_initial_state_p) { /* Sign on position is direction of travel. Stripped before returned. */ r->rotx = frand(1.0) * RANDSIGN(); r->roty = frand(1.0) * RANDSIGN(); r->rotz = frand(1.0) * RANDSIGN(); r->wander_frame = random() % 0xFFFF; } else { r->rotx = r->roty = r->rotz = 0; r->wander_frame = 0; } d = 0.006; dd = 0.00006; r->dx = BELLRAND(d * r->spin_x_speed); r->dy = BELLRAND(d * r->spin_y_speed); r->dz = BELLRAND(d * r->spin_z_speed); r->d_max = r->dx * 2; r->ddx = (dd + frand(dd+dd)) * r->spin_x_speed * spin_accel; r->ddy = (dd + frand(dd+dd)) * r->spin_y_speed * spin_accel; r->ddz = (dd + frand(dd+dd)) * r->spin_z_speed * spin_accel; # if 0 fprintf (stderr, "rotator:\n"); fprintf (stderr, " wander: %3d %6.2f\n", r->wander_frame, r->wander_speed); fprintf (stderr, " speed: %6.2f %6.2f %6.2f\n", r->spin_x_speed, r->spin_y_speed, r->spin_z_speed); fprintf (stderr, " rot: %6.2f %6.2f %6.2f\n", r->rotx, r->roty, r->rotz); fprintf (stderr, " d: %6.2f %6.2f %6.2f, %6.2f\n", r->dx, r->dy, r->dz, r->d_max); fprintf (stderr, " dd: %6.2f %6.2f %6.2f\n", r->ddx, r->ddy, r->ddz); # endif return r; } void free_rotator (rotator *r) { free (r); } void get_rotation (rotator *rot, double *x_ret, double *y_ret, double *z_ret, int update_p) { double x, y, z; if (update_p) { rotate_1 (&rot->rotx, &rot->dx, &rot->ddx, rot->spin_x_speed, rot->d_max); rotate_1 (&rot->roty, &rot->dy, &rot->ddy, rot->spin_y_speed, rot->d_max); rotate_1 (&rot->rotz, &rot->dz, &rot->ddz, rot->spin_z_speed, rot->d_max); } x = rot->rotx; y = rot->roty; z = rot->rotz; if (x < 0) x = -x; if (y < 0) y = -y; if (z < 0) z = -z; if (x_ret) *x_ret = x; if (y_ret) *y_ret = y; if (z_ret) *z_ret = z; } void get_position (rotator *rot, double *x_ret, double *y_ret, double *z_ret, int update_p) { double x = 0.5, y = 0.5, z = 0.5; if (rot->wander_speed != 0) { if (update_p) rot->wander_frame++; # define SINOID(F) ((1 + sin((rot->wander_frame * (F)) / 2 * M_PI)) / 2.0) x = SINOID (0.71 * rot->wander_speed); y = SINOID (0.53 * rot->wander_speed); z = SINOID (0.37 * rot->wander_speed); # undef SINOID } if (x_ret) *x_ret = x; if (y_ret) *y_ret = y; if (z_ret) *z_ret = z; } xscreensaver-5.36/hacks/glx/trackball.c000644 000767 000024 00000020677 12701612217 020137 0ustar00jwzstaff000000 000000 /* * (c) Copyright 1993, 1994, Silicon Graphics, Inc. * ALL RIGHTS RESERVED * Permission to use, copy, modify, and distribute this software for * any purpose and without fee is hereby granted, provided that the above * copyright notice appear in all copies and that both the copyright notice * and this permission notice appear in supporting documentation, and that * the name of Silicon Graphics, Inc. not be used in advertising * or publicity pertaining to distribution of the software without specific, * written prior permission. * * THE MATERIAL EMBODIED ON THIS SOFTWARE IS PROVIDED TO YOU "AS-IS" * AND WITHOUT WARRANTY OF ANY KIND, EXPRESS, IMPLIED OR OTHERWISE, * INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY OR * FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL SILICON * GRAPHICS, INC. BE LIABLE TO YOU OR ANYONE ELSE FOR ANY DIRECT, * SPECIAL, INCIDENTAL, INDIRECT OR CONSEQUENTIAL DAMAGES OF ANY * KIND, OR ANY DAMAGES WHATSOEVER, INCLUDING WITHOUT LIMITATION, * LOSS OF PROFIT, LOSS OF USE, SAVINGS OR REVENUE, OR THE CLAIMS OF * THIRD PARTIES, WHETHER OR NOT SILICON GRAPHICS, INC. HAS BEEN * ADVISED OF THE POSSIBILITY OF SUCH LOSS, HOWEVER CAUSED AND ON * ANY THEORY OF LIABILITY, ARISING OUT OF OR IN CONNECTION WITH THE * POSSESSION, USE OR PERFORMANCE OF THIS SOFTWARE. * * US Government Users Restricted Rights * Use, duplication, or disclosure by the Government is subject to * restrictions set forth in FAR 52.227.19(c)(2) or subparagraph * (c)(1)(ii) of the Rights in Technical Data and Computer Software * clause at DFARS 252.227-7013 and/or in similar or successor * clauses in the FAR or the DOD or NASA FAR Supplement. * Unpublished-- rights reserved under the copyright laws of the * United States. Contractor/manufacturer is Silicon Graphics, * Inc., 2011 N. Shoreline Blvd., Mountain View, CA 94039-7311. * * OpenGL(TM) is a trademark of Silicon Graphics, Inc. */ /* * Trackball code: * * Implementation of a virtual trackball. * Implemented by Gavin Bell, lots of ideas from Thant Tessman and * the August '88 issue of Siggraph's "Computer Graphics," pp. 121-129. * * Vector manip code: * * Original code from: * David M. Ciemiewicz, Mark Grossman, Henry Moreton, and Paul Haeberli * * Much mucking with by: * Gavin Bell */ #include #ifdef HAVE_CONFIG_H # include "config.h" #endif #include "trackball.h" /* * This size should really be based on the distance from the center of * rotation to the point on the object underneath the mouse. That * point would then track the mouse as closely as possible. This is a * simple example, though, so that is left as an Exercise for the * Programmer. */ #define TRACKBALLSIZE (0.8) /* * Local function prototypes (not defined in trackball.h) */ 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) { v[0] = 0.0; v[1] = 0.0; v[2] = 0.0; } static void vset(float *v, float x, float y, float z) { v[0] = x; v[1] = y; v[2] = z; } static void vsub(const float *src1, const float *src2, float *dst) { dst[0] = src1[0] - src2[0]; dst[1] = src1[1] - src2[1]; dst[2] = src1[2] - src2[2]; } static void vcopy(const float *v1, float *v2) { register int i; for (i = 0 ; i < 3 ; i++) v2[i] = v1[i]; } static void vcross(const float *v1, const float *v2, float *cross) { float temp[3]; temp[0] = (v1[1] * v2[2]) - (v1[2] * v2[1]); temp[1] = (v1[2] * v2[0]) - (v1[0] * v2[2]); temp[2] = (v1[0] * v2[1]) - (v1[1] * v2[0]); vcopy(temp, cross); } static float vlength(const float *v) { return sqrt(v[0] * v[0] + v[1] * v[1] + v[2] * v[2]); } static void vscale(float *v, float div) { v[0] *= div; v[1] *= div; v[2] *= div; } static void vnormal(float *v) { vscale(v,1.0/vlength(v)); } static float vdot(const float *v1, const float *v2) { return v1[0]*v2[0] + v1[1]*v2[1] + v1[2]*v2[2]; } static void vadd(const float *src1, const float *src2, float *dst) { dst[0] = src1[0] + src2[0]; dst[1] = src1[1] + src2[1]; dst[2] = src1[2] + src2[2]; } /* * Ok, simulate a track-ball. Project the points onto the virtual * trackball, then figure out the axis of rotation, which is the cross * product of P1 P2 and O P1 (O is the center of the ball, 0,0,0) * Note: This is a deformed trackball-- is a trackball in the center, * but is deformed into a hyperbolic sheet of rotation away from the * center. This particular function was chosen after trying out * several variations. * * It is assumed that the arguments to this routine are in the range * (-1.0 ... 1.0) */ void trackball(float q[4], float p1x, float p1y, float p2x, float p2y) { float a[3]; /* Axis of rotation */ float phi; /* how much to rotate about axis */ float p1[3], p2[3], d[3]; float t; if (p1x == p2x && p1y == p2y) { /* Zero rotation */ vzero(q); q[3] = 1.0; return; } /* * First, figure out z-coordinates for projection of P1 and P2 to * deformed sphere */ vset(p1,p1x,p1y,tb_project_to_sphere(TRACKBALLSIZE,p1x,p1y)); vset(p2,p2x,p2y,tb_project_to_sphere(TRACKBALLSIZE,p2x,p2y)); /* * Now, we want the cross product of P1 and P2 */ vcross(p2,p1,a); /* * Figure out how much to rotate around that axis. */ vsub(p1,p2,d); t = vlength(d) / (2.0*TRACKBALLSIZE); /* * Avoid problems with out-of-control values... */ if (t > 1.0) t = 1.0; if (t < -1.0) t = -1.0; phi = 2.0 * asin(t); axis_to_quat(a,phi,q); } /* * Given an axis and angle, compute quaternion. */ void axis_to_quat(float a[3], float phi, float q[4]) { vnormal(a); vcopy(a,q); vscale(q,sin(phi/2.0)); q[3] = cos(phi/2.0); } /* * Project an x,y pair onto a sphere of radius r OR a hyperbolic sheet * if we are away from the center of the sphere. */ static float tb_project_to_sphere(float r, float x, float y) { float d, t, z; d = sqrt(x*x + y*y); if (d < r * 0.70710678118654752440) { /* Inside sphere */ z = sqrt(r*r - d*d); } else { /* On hyperbola */ t = r / 1.41421356237309504880; z = t*t / d; } return z; } /* * Given two rotations, e1 and e2, expressed as quaternion rotations, * figure out the equivalent single rotation and stuff it into dest. * * This routine also normalizes the result every RENORMCOUNT times it is * called, to keep error from creeping in. * * NOTE: This routine is written so that q1 or q2 may be the same * as dest (or each other). */ #define RENORMCOUNT 97 void add_quats(float q1[4], float q2[4], float dest[4]) { static int count=0; float t1[4], t2[4], t3[4]; float tf[4]; vcopy(q1,t1); vscale(t1,q2[3]); vcopy(q2,t2); vscale(t2,q1[3]); vcross(q2,q1,t3); vadd(t1,t2,tf); vadd(t3,tf,tf); tf[3] = q1[3] * q2[3] - vdot(q1,q2); dest[0] = tf[0]; dest[1] = tf[1]; dest[2] = tf[2]; dest[3] = tf[3]; if (++count > RENORMCOUNT) { count = 0; normalize_quat(dest); } } /* * Quaternions always obey: a^2 + b^2 + c^2 + d^2 = 1.0 * If they don't add up to 1.0, dividing by their magnitued will * renormalize them. * * Note: See the following for more information on quaternions: * * - Shoemake, K., Animating rotation with quaternion curves, Computer * Graphics 19, No 3 (Proc. SIGGRAPH'85), 245-254, 1985. * - Pletinckx, D., Quaternion calculus as a basic tool in computer * graphics, The Visual Computer 5, 2-13, 1989. */ static void normalize_quat(float q[4]) { int i; float mag; mag = (q[0]*q[0] + q[1]*q[1] + q[2]*q[2] + q[3]*q[3]); for (i = 0; i < 4; i++) q[i] /= mag; } /* * Build a rotation matrix, given a quaternion rotation. * */ void build_rotmatrix(float m[4][4], float q[4]) { m[0][0] = 1.0 - 2.0 * (q[1] * q[1] + q[2] * q[2]); m[0][1] = 2.0 * (q[0] * q[1] - q[2] * q[3]); m[0][2] = 2.0 * (q[2] * q[0] + q[1] * q[3]); m[0][3] = 0.0; m[1][0] = 2.0 * (q[0] * q[1] + q[2] * q[3]); m[1][1]= 1.0 - 2.0 * (q[2] * q[2] + q[0] * q[0]); m[1][2] = 2.0 * (q[1] * q[2] - q[0] * q[3]); m[1][3] = 0.0; m[2][0] = 2.0 * (q[2] * q[0] - q[1] * q[3]); m[2][1] = 2.0 * (q[1] * q[2] + q[0] * q[3]); m[2][2] = 1.0 - 2.0 * (q[1] * q[1] + q[0] * q[0]); m[2][3] = 0.0; m[3][0] = 0.0; m[3][1] = 0.0; m[3][2] = 0.0; m[3][3] = 1.0; } xscreensaver-5.36/hacks/glx/gltrackball.c000644 000767 000024 00000020160 12717750307 020457 0ustar00jwzstaff000000 000000 /* gltrackball, Copyright (c) 2002-2014 Jamie Zawinski * GL-flavored wrapper for trackball.c * * 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. */ #include #include #include #ifdef HAVE_CONFIG_H # include "config.h" #endif #ifdef HAVE_COCOA # include "jwxyz.h" #elif defined(HAVE_ANDROID) # include "jwxyz.h" # include #else /* real X11 */ # include # include # include #endif /* !HAVE_COCOA */ #ifdef HAVE_JWZGLES # include "jwzgles.h" #endif /* HAVE_JWZGLES */ # define Button4 4 /* WTF */ # define Button5 5 # define Button6 6 # define Button7 7 #include "trackball.h" #include "gltrackball.h" /* Bah, copied from ../fps.h */ #ifdef HAVE_MOBILE extern double current_device_rotation (void); #else # define current_device_rotation() (0) #endif struct trackball_state { int ow, oh; double x, y; double dx, dy, ddx, ddy; GLfloat q[4]; int button_down_p; int ignore_device_rotation_p; }; /* Returns a trackball_state object, which encapsulates the stuff necessary to make dragging the mouse on the window of a GL program do the right thing. */ trackball_state * gltrackball_init (int ignore_device_rotation_p) { trackball_state *ts = (trackball_state *) calloc (1, sizeof (*ts)); if (!ts) return 0; ts->ignore_device_rotation_p = ignore_device_rotation_p; trackball (ts->q, 0, 0, 0, 0); return ts; } /* Reset the trackball to the default unrotated state. */ void gltrackball_reset (trackball_state *ts) { int bd = ts->button_down_p; int ig = ts->ignore_device_rotation_p; memset (ts, 0, sizeof(*ts)); ts->button_down_p = bd; ts->ignore_device_rotation_p = ig; trackball (ts->q, 0, 0, 0, 0); } /* Device rotation interacts very strangely with mouse positions. I'm not entirely sure this is the right fix. */ static void adjust_for_device_rotation (trackball_state *ts, double *x, double *y, double *w, double *h) { int rot = (int) current_device_rotation(); int swap; if (ts->ignore_device_rotation_p) return; while (rot <= -180) rot += 360; while (rot > 180) rot -= 360; if (rot > 135 || rot < -135) /* 180 */ { *x = *w - *x; *y = *h - *y; } else if (rot > 45) /* 90 */ { swap = *x; *x = *y; *y = swap; swap = *w; *w = *h; *h = swap; *x = *w - *x; } else if (rot < -45) /* 270 */ { swap = *x; *x = *y; *y = swap; swap = *w; *w = *h; *h = swap; *y = *h - *y; } } /* 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. */ void gltrackball_start (trackball_state *ts, int x, int y, int w, int h) { ts->x = x; ts->y = y; ts->button_down_p = 1; ts->dx = ts->ddx = 0; ts->dy = ts->ddy = 0; } /* Stop tracking the mouse: Call this when the mouse button goes up. */ void gltrackball_stop (trackball_state *ts) { ts->button_down_p = 0; } static void gltrackball_track_1 (trackball_state *ts, double x, double y, int w, int h) { double X = x; double Y = y; double W = w, W2 = w; double H = h, H2 = h; float q2[4]; double ox = ts->x; double oy = ts->y; ts->x = x; ts->y = y; adjust_for_device_rotation (ts, &ox, &oy, &W, &H); adjust_for_device_rotation (ts, &X, &Y, &W2, &H2); trackball (q2, (2 * ox - W) / W, (H - 2 * oy) / H, (2 * X - W) / W, (H - 2 * Y) / H); add_quats (q2, ts->q, ts->q); } /* Track the mouse: Call this each time the mouse moves with the button down. x and y are the new mouse position relative to the window. w and h are the size of the window. */ void gltrackball_track (trackball_state *ts, int x, int y, int w, int h) { double dampen = 0.01; /* This keeps it going for about 3 sec */ ts->dx = x - ts->x; ts->dy = y - ts->y; ts->ddx = ts->dx * dampen; ts->ddy = ts->dy * dampen; ts->ow = w; ts->oh = h; gltrackball_track_1 (ts, x, y, w, h); } static void gltrackball_dampen (double *n, double *dn) { int pos = (*n > 0); *n -= *dn; if (pos != (*n > 0)) *n = *dn = 0; } /* Execute the rotations current encapsulated in the trackball_state: this does something analagous to glRotatef(). */ void gltrackball_rotate (trackball_state *ts) { GLfloat m[4][4]; if (!ts->button_down_p && (ts->ddx != 0 || ts->ddy != 0)) { /* Apply inertia: keep moving in the same direction as the last move. */ gltrackball_track_1 (ts, ts->x + ts->dx, ts->y + ts->dy, ts->ow, ts->oh); /* Dampen inertia: gradually stop spinning. */ gltrackball_dampen (&ts->dx, &ts->ddx); gltrackball_dampen (&ts->dy, &ts->ddy); } build_rotmatrix (m, ts->q); glMultMatrixf (&m[0][0]); } /* Call this when a mouse-wheel click is detected. Clicks act like horizontal or vertical drags. Percent is the length of the drag as a percentage of the screen size. Button is 'Button4' or 'Button5' (for the vertical wheel) or 'Button5' or 'Button6' (for the horizontal wheel). If `flip_p' is true, swap the horizontal and vertical axes. */ void gltrackball_mousewheel (trackball_state *ts, int button, int percent, int flip_p) { int up_p; int horizontal_p; int mx, my, move, scale; #ifdef HAVE_JWXYZ flip_p = 0; /* MacOS has already handled this. */ #endif switch (button) { case Button4: up_p = 1; horizontal_p = 0; break; case Button5: up_p = 0; horizontal_p = 0; break; case Button6: up_p = 1; horizontal_p = 1; break; case Button7: up_p = 0; horizontal_p = 1; break; default: abort(); break; } if (flip_p) { horizontal_p = !horizontal_p; up_p = !up_p; } scale = mx = my = 1000; move = (up_p ? floor (scale * (1.0 - (percent / 100.0))) : ceil (scale * (1.0 + (percent / 100.0)))); if (horizontal_p) mx = move; else my = move; gltrackball_start (ts, scale, scale, scale*2, scale*2); gltrackball_track (ts, mx, my, scale*2, scale*2); } void gltrackball_get_quaternion (trackball_state *ts, float q[4]) { int i; for (i=0; i<4; i++) q[i] = ts->q[i]; } /* A utility function for event-handler functions: Handles the various motion and click events related to trackballs. Returns True if the event was handled. */ Bool gltrackball_event_handler (XEvent *event, trackball_state *ts, int window_width, int window_height, Bool *button_down_p) { if (event->xany.type == ButtonPress && event->xbutton.button == Button1) { *button_down_p = True; gltrackball_start (ts, event->xbutton.x, event->xbutton.y, window_width, window_height); return True; } else if (event->xany.type == ButtonRelease && event->xbutton.button == Button1) { *button_down_p = False; gltrackball_stop (ts); 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 (ts, event->xbutton.button, 10, !!event->xbutton.state); return True; } else if (event->xany.type == MotionNotify && *button_down_p) { gltrackball_track (ts, event->xmotion.x, event->xmotion.y, window_width, window_height); return True; } return False; } xscreensaver-5.36/hacks/glx/queens.c000644 000767 000024 00000034374 12707240772 017510 0ustar00jwzstaff000000 000000 /* * queens - solves n queens problem, displays * i make no claims that this is an optimal solution to the problem, * good enough for xss * hacked from glchess * * version 1.0 - May 10, 2002 * * Copyright (C) 2002 Blair Tennessy (tennessy@cs.ubc.ca) * * 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. */ #ifdef STANDALONE #define DEFAULTS "*delay: 20000 \n" \ "*showFPS: False \n" \ "*wireframe: False \n" \ # define refresh_queens 0 # include "xlockmore.h" #else # include "xlock.h" #endif #ifdef HAVE_JWXYZ # include "jwxyz.h" #else # include # include # include #endif #ifdef HAVE_JWZGLES # include "jwzgles.h" #endif /* HAVE_JWZGLES */ #ifdef USE_GL #include "gltrackball.h" #include "chessmodels.h" #undef countof #define countof(x) (sizeof((x))/sizeof((*x))) static XrmOptionDescRec opts[] = { {"+rotate", ".queens.rotate", XrmoptionNoArg, "false" }, {"-rotate", ".queens.rotate", XrmoptionNoArg, "true" }, {"+flat", ".queens.flat", XrmoptionNoArg, "false" }, {"-flat", ".queens.flat", XrmoptionNoArg, "true" }, }; static int rotate, wire, clearbits, flat; static argtype vars[] = { {&rotate, "rotate", "Rotate", "True", t_Bool}, {&flat, "flat", "Flat", "False", t_Bool}, }; ENTRYPOINT ModeSpecOpt queens_opts = {countof(opts), opts, countof(vars), vars, NULL}; #ifdef USE_MODULES ModStruct queens_description = {"queens", "init_queens", "draw_queens", "release_queens", "draw_queens", "init_queens", NULL, &queens_opts, 1000, 1, 2, 1, 4, 1.0, "", "Queens", 0, NULL}; #endif #define NONE 0 #define MINBOARD 5 #define MAXBOARD 10 #define COLORSETS 5 typedef struct { GLXContext *glx_context; Window window; trackball_state *trackball; Bool button_down_p; GLfloat position[4]; int queen_list; int board[MAXBOARD][MAXBOARD]; int steps, colorset, BOARDSIZE; double theta; int queen_polys; } Queenscreen; static Queenscreen *qss = NULL; /* definition of white/black colors */ static const GLfloat colors[COLORSETS][2][3] = { {{0.43, 0.54, 0.76}, {0.8, 0.8, 0.8}}, {{0.5, 0.7, 0.9}, {0.2, 0.3, 0.6}}, {{0.53725490196, 0.360784313725, 0.521568627451}, {0.6, 0.6, 0.6}}, {{0.15, 0.77, 0.54}, {0.5, 0.5, 0.5}}, {{0.9, 0.45, 0.0}, {0.5, 0.5, 0.5}}, }; ENTRYPOINT Bool queens_handle_event (ModeInfo *mi, XEvent *event) { Queenscreen *qs = &qss[MI_SCREEN(mi)]; if (gltrackball_event_handler (event, qs->trackball, MI_WIDTH (mi), MI_HEIGHT (mi), &qs->button_down_p)) return True; else if (screenhack_event_helper (MI_DISPLAY(mi), MI_WINDOW(mi), event)) { qs->steps = 1024 - 1; return True; } return False; } /* returns true if placing a queen on column c causes a conflict */ static int conflictsCols(Queenscreen *qs, int c) { int i; for(i = 0; i < qs->BOARDSIZE; ++i) if(qs->board[i][c]) return 1; return 0; } /* returns true if placing a queen on (r,c) causes a diagonal conflict */ static int conflictsDiag(Queenscreen *qs, int r, int c) { int i; /* positive slope */ int n = r < c ? r : c; for(i = 0; i < qs->BOARDSIZE-abs(r-c); ++i) if(qs->board[r-n+i][c-n+i]) return 1; /* negative slope */ n = r < qs->BOARDSIZE - (c+1) ? r : qs->BOARDSIZE - (c+1); for(i = 0; i < qs->BOARDSIZE-abs(qs->BOARDSIZE - (1+r+c)); ++i) if(qs->board[r-n+i][c+n-i]) return 1; return 0; } /* returns true if placing a queen at (r,c) causes a conflict */ static int conflicts(Queenscreen *qs, int r, int c) { return !conflictsCols(qs, c) ? conflictsDiag(qs, r, c) : 1; } /* clear board */ static void blank(Queenscreen *qs) { int i, j; for(i = 0; i < MAXBOARD; ++i) for(j = 0; j < MAXBOARD; ++j) qs->board[i][j] = NONE; } /* recursively determine solution */ static int findSolution(Queenscreen *qs, int row, int col) { if(row == qs->BOARDSIZE) return 1; while(col < qs->BOARDSIZE) { if(!conflicts(qs, row, col)) { qs->board[row][col] = 1; if(findSolution(qs, row+1, 0)) return 1; qs->board[row][col] = 0; } ++col; } return 0; } /** driver for finding solution */ static void go(Queenscreen *qs) { while(!findSolution(qs, 0, random()%qs->BOARDSIZE)); } /* lighting variables */ static const GLfloat front_shininess[] = {60.0}; static const GLfloat front_specular[] = {0.4, 0.4, 0.4, 1.0}; static const GLfloat ambient[] = {0.3, 0.3, 0.3, 1.0}; static const GLfloat diffuse[] = {0.8, 0.8, 0.8, 1.0}; /* configure lighting */ static void setup_lights(Queenscreen *qs) { /* setup twoside lighting */ glLightfv(GL_LIGHT0, GL_AMBIENT, ambient); glLightfv(GL_LIGHT0, GL_DIFFUSE, diffuse); glLightfv(GL_LIGHT0, GL_POSITION, qs->position); glEnable(GL_LIGHTING); glEnable(GL_LIGHT0); /* setup material properties */ glMaterialfv(GL_FRONT_AND_BACK, GL_SHININESS, front_shininess); glMaterialfv(GL_FRONT_AND_BACK, GL_SPECULAR, front_specular); glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); } #define checkImageWidth 8 #define checkImageHeight 8 /*static GLubyte checkImage[checkImageWidth][checkImageHeight][3];*/ /* return alpha value for fading */ static GLfloat findAlpha(Queenscreen *qs) { return qs->steps < 128 ? qs->steps/128.0 : qs->steps < 1024-128 ?1.0:(1024-qs->steps)/128.0; } /* draw pieces */ static int drawPieces(Queenscreen *qs) { int i, j; int polys = 0; for(i = 0; i < qs->BOARDSIZE; ++i) { for(j = 0; j < qs->BOARDSIZE; ++j) { if(qs->board[i][j]) { glColor3fv(colors[qs->colorset][i%2]); glCallList(qs->queen_list); polys += qs->queen_polys; } glTranslatef(1.0, 0.0, 0.0); } glTranslatef(-1.0*qs->BOARDSIZE, 0.0, 1.0); } return polys; } /** reflectionboard */ static int draw_reflections(Queenscreen *qs) { int i, j; int polys = 0; glEnable(GL_STENCIL_TEST); glStencilFunc(GL_ALWAYS, 1, 1); glStencilOp(GL_KEEP, GL_KEEP, GL_REPLACE); glColorMask(0,0,0,0); glDisable(GL_CULL_FACE); glDisable(GL_DEPTH_TEST); glBegin(GL_QUADS); /* only draw white squares */ for(i = 0; i < qs->BOARDSIZE; ++i) { for(j = (qs->BOARDSIZE+i) % 2; j < qs->BOARDSIZE; j += 2) { glVertex3f(i, 0.0, j + 1.0); glVertex3f(i + 1.0, 0.0, j + 1.0); glVertex3f(i + 1.0, 0.0, j); glVertex3f(i, 0.0, j); polys++; } } glEnd(); glEnable(GL_DEPTH_TEST); glColorMask(1, 1, 1, 1); glStencilFunc(GL_EQUAL, 1, 1); glStencilOp(GL_KEEP, GL_KEEP, GL_KEEP); glPushMatrix(); glScalef(1.0, -1.0, 1.0); glTranslatef(0.5, 0.001, 0.5); glLightfv(GL_LIGHT0, GL_POSITION, qs->position); polys += drawPieces(qs); glPopMatrix(); glDisable(GL_STENCIL_TEST); /* replace lights */ glLightfv(GL_LIGHT0, GL_POSITION, qs->position); glEnable(GL_CULL_FACE); glCullFace(GL_BACK); glColorMask(1,1,1,1); return polys; } /* draw board */ static int drawBoard(Queenscreen *qs) { int i, j; int polys = 0; glBegin(GL_QUADS); for(i = 0; i < qs->BOARDSIZE; ++i) for(j = 0; j < qs->BOARDSIZE; ++j) { int par = (i-j+qs->BOARDSIZE)%2; glColor4f(colors[qs->colorset][par][0], colors[qs->colorset][par][1], colors[qs->colorset][par][2], 0.70); glNormal3f(0.0, 1.0, 0.0); glVertex3f(i, 0.0, j + 1.0); glVertex3f(i + 1.0, 0.0, j + 1.0); glVertex3f(i + 1.0, 0.0, j); glVertex3f(i, 0.0, j); polys++; } 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(ModeInfo *mi, Queenscreen *qs) { int max = 1024; int polys = 0; glClear(clearbits); glMatrixMode(GL_MODELVIEW); glLoadIdentity(); 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); /** setup perspective */ glTranslatef(0.0, 0.0, -1.5*qs->BOARDSIZE); glRotatef(30.0, 1.0, 0.0, 0.0); gltrackball_rotate (qs->trackball); glRotatef(qs->theta*100, 0.0, 1.0, 0.0); glTranslatef(-0.5*qs->BOARDSIZE, 0.0, -0.5*qs->BOARDSIZE); /* find light positions */ qs->position[0] = qs->BOARDSIZE/2.0 + qs->BOARDSIZE/1.4*-sin(qs->theta*100*M_PI/180.0); qs->position[2] = qs->BOARDSIZE/2.0 + qs->BOARDSIZE/1.4*cos(qs->theta*100*M_PI/180.0); qs->position[1] = 6.0; if(!wire) { glEnable(GL_LIGHTING); glLightfv(GL_LIGHT0, GL_POSITION, qs->position); 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); glEnable(GL_BLEND); } polys += drawBoard(qs); if(!wire) glDisable(GL_BLEND); glLightf(GL_LIGHT0, GL_LINEAR_ATTENUATION, 0.1); glTranslatef(0.5, 0.0, 0.5); polys += drawPieces(qs); /* rotate camera */ if(!qs->button_down_p) qs->theta += .002; /* zero out board, find new solution of size MINBOARD <= i <= MAXBOARD */ if(++qs->steps == max) { qs->steps = 0; blank(qs); qs->BOARDSIZE = MINBOARD + (random() % (MAXBOARD - MINBOARD + 1)); qs->colorset = (qs->colorset+1)%COLORSETS; go(qs); } return polys; } #define EPSILON 0.001 #if 0 /** draws cylindermodel */ static int draw_model(int chunks, const GLfloat model[][3], int r) { int i = 0; int polys = 0; glPushMatrix(); glRotatef(-90.0, 1.0, 0.0, 0.0); for(i = 0; i < chunks; ++i) { if(model[i][0] > EPSILON || model[i][1] > EPSILON) { polys += tube (0, 0, 0, 0, 0, model[i][1], model[i][0], 0, r, False, False, False); /* gluCylinder(quadric, model[i][0], model[i][1], model[i][2], r, 1); polys += r;*/ } glTranslatef(0.0, 0.0, model[i][2]); } glPopMatrix(); return polys; } #endif ENTRYPOINT void reshape_queens(ModeInfo *mi, int width, int height) { GLfloat h = (GLfloat) height / (GLfloat) width; glViewport(0,0, width, height); glMatrixMode(GL_PROJECTION); glLoadIdentity(); gluPerspective(45, 1/h, 2.0, 30.0); glMatrixMode(GL_MODELVIEW); } ENTRYPOINT void init_queens(ModeInfo *mi) { int screen = MI_SCREEN(mi); Queenscreen *qs; int poly_counts[PIECES]; wire = MI_IS_WIREFRAME(mi); # ifdef HAVE_JWZGLES /* #### glPolygonMode other than GL_FILL unimplemented */ wire = 0; # endif if(!qss && !(qss = (Queenscreen *) calloc(MI_NUM_SCREENS(mi), sizeof(Queenscreen)))) return; qs = &qss[screen]; qs->window = MI_WINDOW(mi); if((qs->glx_context = init_GL(mi))) reshape_queens(mi, MI_WIDTH(mi), MI_HEIGHT(mi)); else MI_CLEARWINDOW(mi); qs->trackball = gltrackball_init (False); qs->BOARDSIZE = 8; /* 8 cuz its classic */ chessmodels_gen_lists(-1, poly_counts); qs->queen_list = QUEEN; qs->queen_polys = poly_counts[QUEEN]; /* find a solution */ go(qs); } ENTRYPOINT void draw_queens(ModeInfo *mi) { Queenscreen *qs = &qss[MI_SCREEN(mi)]; Window w = MI_WINDOW(mi); Display *disp = MI_DISPLAY(mi); if(!qs->glx_context) return; glXMakeCurrent(disp, w, *(qs->glx_context)); if(flat) glShadeModel(GL_FLAT); clearbits = GL_COLOR_BUFFER_BIT; glColorMaterial(GL_FRONT, GL_DIFFUSE); glEnable(GL_COLOR_MATERIAL); if(!wire) { setup_lights(qs); glEnable(GL_DEPTH_TEST); clearbits |= GL_DEPTH_BUFFER_BIT; clearbits |= GL_STENCIL_BUFFER_BIT; glEnable(GL_CULL_FACE); glCullFace(GL_BACK); } else glPolygonMode(GL_FRONT_AND_BACK, GL_LINE); mi->polygon_count = display(mi, qs); mi->recursion_depth = qs->BOARDSIZE; if(mi->fps_p) do_fps(mi); glFinish(); glXSwapBuffers(disp, w); } ENTRYPOINT void release_queens(ModeInfo *mi) { if(qss) free((void *) qss); qss = 0; FreeAllGL(mi); } XSCREENSAVER_MODULE ("Queens", queens) #endif xscreensaver-5.36/hacks/glx/endgame.c000644 000767 000024 00000061675 12705606553 017615 0ustar00jwzstaff000000 000000 /* * endgame.c * plays through a chess game ending. enjoy. * * version 1.0 - June 6, 2002 * * Copyright (C) 2002-2008 Blair Tennessy (tennessb@unbc.ca) * * 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. */ #ifdef STANDALONE #define DEFAULTS "*delay: 20000 \n" \ "*showFPS: False \n" \ "*wireframe: False \n" \ # define refresh_chess 0 # include "xlockmore.h" #else # include "xlock.h" #endif #ifdef USE_GL #define BOARDSIZE 8 #define WHITES 5 #include "gltrackball.h" #include "chessmodels.h" #include "chessgames.h" #undef countof #define countof(x) (sizeof((x))/sizeof((*x))) #define DEF_ROTATE "True" #define DEF_REFLECTIONS "True" #define DEF_SHADOWS "True" #define DEF_SMOOTH "True" #define DEF_CLASSIC "False" static XrmOptionDescRec opts[] = { {"+rotate", ".chess.rotate", XrmoptionNoArg, "false" }, {"-rotate", ".chess.rotate", XrmoptionNoArg, "true" }, {"+reflections", ".chess.reflections", XrmoptionNoArg, "false" }, {"-reflections", ".chess.reflections", XrmoptionNoArg, "true" }, {"+shadows", ".chess.shadows", XrmoptionNoArg, "false" }, {"-shadows", ".chess.shadows", XrmoptionNoArg, "true" }, {"+smooth", ".chess.smooth", XrmoptionNoArg, "false" }, {"-smooth", ".chess.smooth", XrmoptionNoArg, "true" }, {"+classic", ".chess.classic", XrmoptionNoArg, "false" }, {"-classic", ".chess.classic", XrmoptionNoArg, "true" }, }; static int rotate, reflections, smooth, shadows, classic; static argtype vars[] = { {&rotate, "rotate", "Rotate", DEF_ROTATE, t_Bool}, {&reflections, "reflections", "Reflections", DEF_REFLECTIONS, t_Bool}, {&shadows, "shadows", "Shadows", DEF_SHADOWS, t_Bool}, {&smooth, "smooth", "Smooth", DEF_SMOOTH, t_Bool}, {&classic, "classic", "Classic", DEF_CLASSIC, t_Bool}, }; ENTRYPOINT ModeSpecOpt chess_opts = {countof(opts), opts, countof(vars), vars, NULL}; #ifdef USE_MODULES ModStruct chess_description = {"chess", "init_chess", "draw_chess", "release_chess", "draw_chess", "init_chess", NULL, &chess_opts, 1000, 1, 2, 1, 4, 1.0, "", "Chess", 0, NULL}; #endif #define checkImageWidth 16 #define checkImageHeight 16 typedef struct { GLXContext *glx_context; Window window; trackball_state *trackball; Bool button_down_p; ChessGame game; int oldwhite; /** definition of white/black (orange/gray) colors */ GLfloat colors[2][3]; GLubyte checkImage[checkImageWidth][checkImageHeight][3]; GLuint piecetexture, boardtexture; int mpiece, tpiece, steps, done; double from[2], to[2]; double dx, dz; int moving, take, mc, count, wire; double theta; GLfloat position[4]; GLfloat position2[4]; GLfloat mod; GLfloat ground[4]; int oldgame; int poly_counts[PIECES]; /* polygon count of each type of piece */ } Chesscreen; static Chesscreen *qs = NULL; static const GLfloat MaterialShadow[] = {0.0, 0.0, 0.0, 0.3}; /* i prefer silvertip */ static const GLfloat whites[WHITES][3] = { {1.0, 0.55, 0.1}, {0.8, 0.52, 0.8}, {0.43, 0.54, 0.76}, {0.2, 0.2, 0.2}, {0.35, 0.60, 0.35}, }; static void build_colors(Chesscreen *cs) { /* find new white */ int newwhite = cs->oldwhite; while(newwhite == cs->oldwhite) newwhite = random()%WHITES; cs->oldwhite = newwhite; cs->colors[0][0] = whites[cs->oldwhite][0]; cs->colors[0][1] = whites[cs->oldwhite][1]; cs->colors[0][2] = whites[cs->oldwhite][2]; } /* build piece texture */ static void make_piece_texture(Chesscreen *cs) { int i, j, c; for (i = 0; i < checkImageWidth; i++) { for (j = 0; j < checkImageHeight; j++) { c = ((j%2) == 0 || i%2 == 0) ? 240 : 180+random()%16; cs->checkImage[i][j][0] = (GLubyte) c; cs->checkImage[i][j][1] = (GLubyte) c; cs->checkImage[i][j][2] = (GLubyte) c; } } glGenTextures(1, &cs->piecetexture); glBindTexture(GL_TEXTURE_2D, cs->piecetexture); glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR); glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR); glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_WRAP_S,GL_REPEAT); glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_WRAP_T,GL_REPEAT); glTexImage2D(GL_TEXTURE_2D, 0, 3, checkImageWidth, checkImageHeight, 0, GL_RGB, GL_UNSIGNED_BYTE, &cs->checkImage[0][0]); } /* build board texture (uniform noise in [180,180+50]) */ static void make_board_texture(Chesscreen *cs) { int i, j, c; for (i = 0; i < checkImageWidth; i++) { for (j = 0; j < checkImageHeight; j++) { c = 180 + random()%51; cs->checkImage[i][j][0] = (GLubyte) c; cs->checkImage[i][j][1] = (GLubyte) c; cs->checkImage[i][j][2] = (GLubyte) c; } } glGenTextures(1, &cs->boardtexture); glBindTexture(GL_TEXTURE_2D, cs->boardtexture); glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR); glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR); glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_WRAP_S,GL_REPEAT); glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_WRAP_T,GL_REPEAT); glTexImage2D(GL_TEXTURE_2D, 0, 3, checkImageWidth, checkImageHeight, 0, GL_RGB, GL_UNSIGNED_BYTE, &cs->checkImage[0][0]); } /** handle X event (trackball) */ ENTRYPOINT Bool chess_handle_event (ModeInfo *mi, XEvent *event) { Chesscreen *cs = &qs[MI_SCREEN(mi)]; if (gltrackball_event_handler (event, cs->trackball, MI_WIDTH (mi), MI_HEIGHT (mi), &cs->button_down_p)) return True; else if (screenhack_event_helper (MI_DISPLAY(mi), MI_WINDOW(mi), event)) { cs->done = 1; return True; } return False; } static const GLfloat diffuse2[] = {1.0, 1.0, 1.0, 1.0}; /*static const GLfloat ambient2[] = {0.7, 0.7, 0.7, 1.0};*/ static const GLfloat shininess[] = {60.0}; static const GLfloat specular[] = {0.4, 0.4, 0.4, 1.0}; /* configure lighting */ static void setup_lights(Chesscreen *cs) { glEnable(GL_LIGHTING); glLightfv(GL_LIGHT0, GL_POSITION, cs->position); glLightfv(GL_LIGHT0, GL_DIFFUSE, diffuse2); glEnable(GL_LIGHT0); /* glLightModelfv(GL_LIGHT_MODEL_AMBIENT, ambient2); */ glMaterialfv(GL_FRONT_AND_BACK, GL_SHININESS, shininess); glMaterialfv(GL_FRONT_AND_BACK, GL_SPECULAR, specular); glLightfv(GL_LIGHT1, GL_SPECULAR, diffuse2); glLightfv(GL_LIGHT1, GL_DIFFUSE, diffuse2); glEnable(GL_LIGHT1); } /* draw pieces */ static void drawPieces(ModeInfo *mi, Chesscreen *cs) { int i, j; for(i = 0; i < BOARDSIZE; ++i) { for(j = 0; j < BOARDSIZE; ++j) { if(cs->game.board[i][j]) { int c = cs->game.board[i][j]/PIECES; glColor3fv(cs->colors[c]); glCallList(cs->game.board[i][j]%PIECES); mi->polygon_count += cs->poly_counts[cs->game.board[i][j]%PIECES]; } glTranslatef(1.0, 0.0, 0.0); } glTranslatef(-1.0*BOARDSIZE, 0.0, 1.0); } glTranslatef(0.0, 0.0, -1.0*BOARDSIZE); } /* draw pieces */ static void drawPiecesShadow(ModeInfo *mi, Chesscreen *cs) { int i, j; for(i = 0; i < BOARDSIZE; ++i) { for(j = 0; j < BOARDSIZE; ++j) { if(cs->game.board[i][j]) { glColor4f(0.0, 0.0, 0.0, 0.4); glCallList(cs->game.board[i][j]%PIECES); mi->polygon_count += cs->poly_counts[cs->game.board[i][j]%PIECES]; } glTranslatef(1.0, 0.0, 0.0); } glTranslatef(-1.0*BOARDSIZE, 0.0, 1.0); } glTranslatef(0.0, 0.0, -1.0*BOARDSIZE); } /* draw a moving piece */ static void drawMovingPiece(ModeInfo *mi, Chesscreen *cs, int shadow) { int piece = cs->mpiece % PIECES; if (piece == NONE) return; glPushMatrix(); if(shadow) glColor4fv(MaterialShadow); else glColor3fv(cs->colors[cs->mpiece/PIECES]); /** assume a queening. should be more general */ if((cs->mpiece == PAWN && fabs(cs->to[0]) < 0.01) || (cs->mpiece == BPAWN && fabs(cs->to[0]-7.0) < 0.01)) { glTranslatef(cs->from[1]+cs->steps*cs->dx, 0.0, cs->from[0]+cs->steps*cs->dz); 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(50.0-cs->steps))/50.0); piece = cs->steps < 50 ? PAWN : QUEEN; /* what a kludge */ if(cs->steps == 99) cs->mpiece = cs->mpiece == PAWN ? QUEEN : BQUEEN; } else if(cs->mpiece % PIECES == KNIGHT) { /* 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; } } } if (!blocked_p) goto SLIDE; /* 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); glCallList(piece); mi->polygon_count += cs->poly_counts[cs->mpiece % PIECES]; glMaterialfv(GL_FRONT_AND_BACK, GL_SHININESS, shininess); glMaterialfv(GL_FRONT_AND_BACK, GL_SPECULAR, specular); glPopMatrix(); if(!cs->wire) glDisable(GL_BLEND); } /** code to squish a taken piece */ static void drawTakePiece(ModeInfo *mi, Chesscreen *cs, int shadow) { if(!cs->wire) glEnable(GL_BLEND); glColor4f(shadow ? MaterialShadow[0] : cs->colors[cs->tpiece/7][0], shadow ? MaterialShadow[1] : cs->colors[cs->tpiece/7][1], shadow ? MaterialShadow[2] : cs->colors[cs->tpiece/7][2], (100-1.6*cs->steps)/100.0); glTranslatef(cs->to[1], 0.0, cs->to[0]); if(cs->mpiece % PIECES == KNIGHT) glScalef(1.0+cs->steps/100.0, 1.0, 1.0+cs->steps/100.0); else glScalef(1.0, 1 - cs->steps/50.0 > 0.01 ? 1 - cs->steps/50.0 : 0.01, 1.0); glCallList(cs->tpiece % 7); mi->polygon_count += cs->poly_counts[cs->tpiece % PIECES]; if(!cs->wire) glDisable(GL_BLEND); } /** draw board */ static void drawBoard(ModeInfo *mi, Chesscreen *cs) { int i, j; glBegin(GL_QUADS); for(i = 0; i < BOARDSIZE; ++i) for(j = 0; j < BOARDSIZE; ++j) { double ma1 = (i+j)%2 == 0 ? cs->mod*i : 0.0; double mb1 = (i+j)%2 == 0 ? cs->mod*j : 0.0; double ma2 = (i+j)%2 == 0 ? cs->mod*(i+1.0) : 0.01; double mb2 = (i+j)%2 == 0 ? cs->mod*(j+1.0) : 0.01; /*glColor3fv(colors[(i+j)%2]);*/ glColor4f(cs->colors[(i+j)%2][0], cs->colors[(i+j)%2][1], cs->colors[(i+j)%2][2], 0.65); glNormal3f(0.0, 1.0, 0.0); /* glTexCoord2f(mod*i, mod*(j+1.0)); */ glTexCoord2f(ma1, mb2); glVertex3f(i, 0.0, j + 1.0); /* glTexCoord2f(mod*(i+1.0), mod*(j+1.0)); */ glTexCoord2f(ma2, mb2); glVertex3f(i + 1.0, 0.0, j + 1.0); glTexCoord2f(ma2, mb1); /* glTexCoord2f(mod*(i+1.0), mod*j); */ glVertex3f(i + 1.0, 0.0, j); glTexCoord2f(ma1, mb1); /* glTexCoord2f(mod*i, mod*j); */ glVertex3f(i, 0.0, j); mi->polygon_count++; } 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) { if (!cs->wire) { glEnable(GL_TEXTURE_2D); glBindTexture(GL_TEXTURE_2D, cs->piecetexture); glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE); glColor4f(0.5, 0.5, 0.5, 1.0); glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, MaterialShadow); } drawPieces(mi, cs); if(cs->moving) drawMovingPiece(mi, cs, 0); if(cs->take) drawTakePiece(mi, cs, 0); glDisable(GL_TEXTURE_2D); } static void draw_shadow_pieces(ModeInfo *mi, Chesscreen *cs, int wire) { if (!cs->wire) { glEnable(GL_TEXTURE_2D); glBindTexture(GL_TEXTURE_2D, cs->piecetexture); glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE); } /* use the stencil */ glDisable(GL_LIGHTING); glDisable(GL_COLOR_MATERIAL); glDisable(GL_DEPTH_TEST); glDisable(GL_TEXTURE_2D); glDisable(GL_BLEND); glClear(GL_STENCIL_BUFFER_BIT); glColorMask(0,0,0,0); glEnable(GL_STENCIL_TEST); glStencilFunc(GL_ALWAYS, 1, 0xFFFFFFFFL); glStencilOp(GL_KEEP, GL_KEEP, GL_INCR); glPushMatrix(); glTranslatef(0.0, 0.001, 0.0); /* draw the pieces */ drawPiecesShadow(mi, cs); if(cs->moving) drawMovingPiece(mi, cs, shadows); if(cs->take) drawTakePiece(mi, cs, shadows); glPopMatrix(); /* turn on drawing into colour buffer */ glColorMask(1,1,1,1); /* programming with effect */ glDisable(GL_LIGHTING); glDisable(GL_COLOR_MATERIAL); glDisable(GL_TEXTURE_2D); /* now draw the union of the shadows */ /* want to keep alpha values (alpha is involved in transition effects of the active pieces). */ glStencilFunc(GL_NOTEQUAL, 0, 0xFFFFFFFFL); glStencilOp(GL_KEEP, GL_KEEP, GL_REPLACE); glEnable(GL_BLEND); glColor4fv(MaterialShadow); /* draw the board generously to fill the shadows */ glBegin(GL_QUADS); glVertex3f(-1.0, 0.0, -1.0); glVertex3f(-1.0, 0.0, BOARDSIZE + 1.0); glVertex3f(1.0 + BOARDSIZE, 0.0, BOARDSIZE + 1.0); glVertex3f(1.0 + BOARDSIZE, 0.0, -1.0); glEnd(); glDisable(GL_STENCIL_TEST); /* "pop" attributes */ glEnable(GL_TEXTURE_2D); glEnable(GL_COLOR_MATERIAL); glEnable(GL_LIGHTING); glEnable(GL_CULL_FACE); } enum {X, Y, Z, W}; enum {A, B, C, D}; /* create a matrix that will project the desired shadow */ static void shadowmatrix(GLfloat shadowMat[4][4], GLfloat groundplane[4], GLfloat lightpos[4]) { GLfloat dot; /* find dot product between light position vector and ground plane normal */ dot = groundplane[X] * lightpos[X] + groundplane[Y] * lightpos[Y] + groundplane[Z] * lightpos[Z] + groundplane[W] * lightpos[W]; shadowMat[0][0] = dot - lightpos[X] * groundplane[X]; shadowMat[1][0] = 0.f - lightpos[X] * groundplane[Y]; shadowMat[2][0] = 0.f - lightpos[X] * groundplane[Z]; shadowMat[3][0] = 0.f - lightpos[X] * groundplane[W]; shadowMat[X][1] = 0.f - lightpos[Y] * groundplane[X]; shadowMat[1][1] = dot - lightpos[Y] * groundplane[Y]; shadowMat[2][1] = 0.f - lightpos[Y] * groundplane[Z]; shadowMat[3][1] = 0.f - lightpos[Y] * groundplane[W]; shadowMat[X][2] = 0.f - lightpos[Z] * groundplane[X]; shadowMat[1][2] = 0.f - lightpos[Z] * groundplane[Y]; shadowMat[2][2] = dot - lightpos[Z] * groundplane[Z]; shadowMat[3][2] = 0.f - lightpos[Z] * groundplane[W]; shadowMat[X][3] = 0.f - lightpos[W] * groundplane[X]; shadowMat[1][3] = 0.f - lightpos[W] * groundplane[Y]; shadowMat[2][3] = 0.f - lightpos[W] * groundplane[Z]; shadowMat[3][3] = dot - lightpos[W] * groundplane[W]; } /** reflectionboard */ static void draw_reflections(ModeInfo *mi, Chesscreen *cs) { int i, j; glEnable(GL_STENCIL_TEST); glStencilFunc(GL_ALWAYS, 1, 1); glStencilOp(GL_KEEP, GL_KEEP, GL_REPLACE); glColorMask(0,0,0,0); glDisable(GL_CULL_FACE); glDisable(GL_DEPTH_TEST); glBegin(GL_QUADS); /* only draw white squares */ for(i = 0; i < BOARDSIZE; ++i) { for(j = (BOARDSIZE+i) % 2; j < BOARDSIZE; j += 2) { glVertex3f(i, 0.0, j + 1.0); glVertex3f(i + 1.0, 0.0, j + 1.0); glVertex3f(i + 1.0, 0.0, j); glVertex3f(i, 0.0, j); mi->polygon_count++; } } glEnd(); glEnable(GL_DEPTH_TEST); glColorMask(1, 1, 1, 1); glStencilFunc(GL_EQUAL, 1, 1); glStencilOp(GL_KEEP, GL_KEEP, GL_KEEP); glPushMatrix(); glScalef(1.0, -1.0, 1.0); glTranslatef(0.5, 0.0, 0.5); glLightfv(GL_LIGHT0, GL_POSITION, cs->position); draw_pieces(mi, cs, cs->wire); glPopMatrix(); glDisable(GL_STENCIL_TEST); glLightfv(GL_LIGHT0, GL_POSITION, cs->position); glEnable(GL_CULL_FACE); glCullFace(GL_BACK); glColorMask(1,1,1,1); } /** draws the scene */ static void display(ModeInfo *mi, Chesscreen *cs) { glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT | GL_STENCIL_BUFFER_BIT); mi->polygon_count = 0; glMatrixMode(GL_MODELVIEW); glLoadIdentity(); glRotatef(current_device_rotation(), 0, 0, 1); /** setup perspectiv */ glTranslatef(0.0, 0.0, -1.5*BOARDSIZE); glRotatef(30.0, 1.0, 0.0, 0.0); gltrackball_rotate (cs->trackball); 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); */ /* cs->position[2] = 4.0 + 1.0* cos(cs->theta*100*M_PI/180.0); */ /* cs->position[1] = 5.0; */ /* this is the lone light that the shadow matrix is generated from */ cs->position[0] = 1.0; cs->position[2] = 1.0; cs->position[1] = 16.0; cs->position2[0] = 4.0 + 8.0*-sin(cs->theta*100*M_PI/180.0); cs->position2[2] = 4.0 + 8.0* cos(cs->theta*100*M_PI/180.0); if (!cs->wire) { glEnable(GL_LIGHTING); glLightfv(GL_LIGHT0, GL_POSITION, cs->position); glLightfv(GL_LIGHT1, GL_POSITION, cs->position2); glEnable(GL_LIGHT0); } /** draw board, pieces */ if(!cs->wire) { glEnable(GL_LIGHTING); glEnable(GL_COLOR_MATERIAL); if(reflections && !cs->wire) { draw_reflections(mi, cs); glEnable(GL_BLEND); } glEnable(GL_TEXTURE_2D); glBindTexture(GL_TEXTURE_2D, cs->boardtexture); drawBoard(mi, cs); glDisable(GL_TEXTURE_2D); if(shadows) { /* render shadows */ GLfloat m[4][4]; shadowmatrix(m, cs->ground, cs->position); glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, MaterialShadow); glEnable(GL_BLEND); glDisable(GL_LIGHTING); glDisable(GL_DEPTH_TEST); /* display ant shadow */ glPushMatrix(); glTranslatef(0.0, 0.001, 0.0); glMultMatrixf(m[0]); glTranslatef(0.5, 0.01, 0.5); draw_shadow_pieces(mi, cs, cs->wire); glPopMatrix(); glEnable(GL_LIGHTING); glDisable(GL_BLEND); glEnable(GL_DEPTH_TEST); } if(reflections) glDisable(GL_BLEND); } else drawBoard(mi, cs); glTranslatef(0.5, 0.0, 0.5); draw_pieces(mi, cs, cs->wire); if(!cs->wire) { glDisable(GL_COLOR_MATERIAL); glDisable(GL_LIGHTING); } if (!cs->button_down_p) cs->theta += .002; } /** reshape handler */ ENTRYPOINT void reshape_chess(ModeInfo *mi, int width, int height) { GLfloat h = (GLfloat) height / (GLfloat) width; glViewport(0,0, width, height); glMatrixMode(GL_PROJECTION); glLoadIdentity(); gluPerspective(45, 1/h, 2.0, 30.0); glMatrixMode(GL_MODELVIEW); } /** initialization handler */ ENTRYPOINT void init_chess(ModeInfo *mi) { Chesscreen *cs; int screen = MI_SCREEN(mi); if(!qs && !(qs = (Chesscreen *) calloc(MI_NUM_SCREENS(mi), sizeof(Chesscreen)))) return; cs = &qs[screen]; cs->window = MI_WINDOW(mi); cs->wire = MI_IS_WIREFRAME(mi); cs->trackball = gltrackball_init (False); cs->oldwhite = -1; cs->colors[0][0] = 1.0; cs->colors[0][1] = 0.5; cs->colors[0][2] = 0.0; cs->colors[1][0] = 0.6; cs->colors[1][1] = 0.6; cs->colors[1][2] = 0.6; cs->done = 1; cs->count = 99; cs->mod = 1.4; /* cs->position[0] = 0.0; */ /* cs->position[1] = 5.0; */ /* cs->position[2] = 5.0; */ /* cs->position[3] = 1.0; */ cs->position[0] = 0.0; cs->position[1] = 24.0; cs->position[2] = 2.0; cs->position[3] = 1.0; cs->position2[0] = 5.0; cs->position2[1] = 5.0; cs->position2[2] = 5.0; cs->position2[3] = 1.0; cs->ground[0] = 0.0; cs->ground[1] = 1.0; cs->ground[2] = 0.0; cs->ground[3] = -0.00001; cs->oldgame = -1; if((cs->glx_context = init_GL(mi))) reshape_chess(mi, MI_WIDTH(mi), MI_HEIGHT(mi)); else MI_CLEARWINDOW(mi); if (!cs->wire) { glDepthFunc(GL_LEQUAL); glClearStencil(0); glEnable(GL_CULL_FACE); glCullFace(GL_BACK); make_piece_texture(cs); make_board_texture(cs); } chessmodels_gen_lists( classic, cs->poly_counts); # ifdef HAVE_JWZGLES /* #### glPolygonMode other than GL_FILL unimplemented */ cs->wire = 0; # endif if(!cs->wire) { setup_lights(cs); glColorMaterial(GL_FRONT, GL_DIFFUSE); glShadeModel(smooth ? GL_SMOOTH : GL_FLAT); glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); glEnable(GL_DEPTH_TEST); } else glPolygonMode(GL_FRONT_AND_BACK, GL_LINE); } /** does dirty work drawing scene, moving pieces */ ENTRYPOINT void draw_chess(ModeInfo *mi) { Chesscreen *cs = &qs[MI_SCREEN(mi)]; Window w = MI_WINDOW(mi); Display *disp = MI_DISPLAY(mi); if(!cs->glx_context) return; glXMakeCurrent(disp, w, *(cs->glx_context)); /** code for moving a piece */ if(cs->moving && ++cs->steps == 100) { cs->moving = cs->count = cs->steps = cs->take = 0; cs->game.board[cs->game.moves[cs->mc][2]][cs->game.moves[cs->mc][3]] = cs->mpiece; ++cs->mc; if(cs->mc == cs->game.movecount) { cs->done = 1; cs->mc = 0; } } if(++cs->count == 100) { if(!cs->done) { cs->mpiece = cs->game.board[cs->game.moves[cs->mc][0]][cs->game.moves[cs->mc][1]]; cs->game.board[cs->game.moves[cs->mc][0]][cs->game.moves[cs->mc][1]] = NONE; if((cs->tpiece = cs->game.board[cs->game.moves[cs->mc][2]][cs->game.moves[cs->mc][3]])) { cs->game.board[cs->game.moves[cs->mc][2]][cs->game.moves[cs->mc][3]] = NONE; cs->take = 1; } cs->from[0] = cs->game.moves[cs->mc][0]; cs->from[1] = cs->game.moves[cs->mc][1]; cs->to[0] = cs->game.moves[cs->mc][2]; cs->to[1] = cs->game.moves[cs->mc][3]; cs->dz = (cs->to[0] - cs->from[0]) / 100; cs->dx = (cs->to[1] - cs->from[1]) / 100; cs->steps = 0; cs->moving = 1; } else if(cs->done == 1) { int newgame = cs->oldgame; while(newgame == cs->oldgame) newgame = random()%GAMES; /* mod the mod */ cs->mod = 0.6 + (random()%20)/10.0; /* same old game */ cs->oldgame = newgame; cs->game = games[cs->oldgame]; build_colors(cs); cs->done = 2; cs->count = 0; } else { cs->done = 0; cs->count = 0; } } /* set lighting */ if(cs->done) { glLightf(GL_LIGHT0, GL_CONSTANT_ATTENUATION, cs->done == 1 ? 1.0+0.1*cs->count : 100.0/cs->count); glLightf(GL_LIGHT1, GL_CONSTANT_ATTENUATION, cs->done == 1 ? 1.0+0.1*cs->count : 100.0/cs->count); glLightf(GL_LIGHT1, GL_LINEAR_ATTENUATION, 0.14); glLightf(GL_LIGHT0, GL_LINEAR_ATTENUATION, 0.14); } display(mi, cs); if(mi->fps_p) do_fps(mi); glFinish(); glXSwapBuffers(disp, w); } /** bust it */ ENTRYPOINT void release_chess(ModeInfo *mi) { if(qs) free((void *) qs); qs = 0; FreeAllGL(mi); } XSCREENSAVER_MODULE_2 ("Endgame", endgame, chess) #endif xscreensaver-5.36/hacks/glx/chessmodels.c000644 000767 000024 00000245105 12707237152 020513 0ustar00jwzstaff000000 000000 /* * models for the xss chess screensavers * hacked from: * * glChess - A 3D chess interface * * Copyright (C) 2006 John-Paul Gignac * * Copyright (C) 2002 Robert Ancell * Michael Duelli * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ /* chessmodels.c: Contains the code for piece model creation */ #ifdef HAVE_CONFIG_H # include "config.h" #endif /* HAVE_CONFIG_H */ #include #include #ifndef HAVE_JWXYZ # include # include #endif #ifdef HAVE_ANDROID #include #define Bool int #endif #ifdef HAVE_JWZGLES # include "jwzgles.h" #endif /* HAVE_JWZGLES */ #include "chessmodels.h" /* End of Data */ #define ENDOFDATA 65535 /* Section headers */ #define SPIN 65534 #define VERTICES 65533 #define QUADS 65532 #define TRIANGLES 65531 #define POLARQUADSTRIP 65530 #define QUADSTRIP 65529 /* Special spin-related commands */ #define SEAM 65528 #define PATTERN 65527 #define STEPUP 65526 #define STEPDOWN 65525 #define SETBACKREF 65524 #define BACKREF 65523 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 }; 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 }; static unsigned short classic_knight_data[] = { SPIN,16, 410,0,SEAM,410,200,SEAM,200,360,SEAM,200,480,260,580, VERTICES, 260,580,260, -260,580,260, -260,580,-80, 260,580,-80, 80,1620,400, 100,1680,340, -100,1680,340, -80,1620,400, 100,1680,340, 100,1680,300, -100,1680,300, -100,1680,340, 100,1680,300, 50,1680,160, -50,1680,160, -100,1680,300, 50,1680,160, 100,1680,20, -100,1680,20, -50,1680,160, 100,1680,20, 100,1680,-20, -100,1680,-20, -100,1680,20, 100,1680,-20, 40,1680,-110, -40,1680,-110, -100,1680,-20, 40,1680,-110, 100,1680,-200, -100,1680,-200, -40,1680,-110, 100,1680,-200, 100,1680,-440, -100,1680,-440, -100,1680,-200, -100,1680,-440, 100,1680,-440, 100,1500,-440, -100,1500,-440, -100,1500,-440, 100,1500,-440, 55,1480,-280, -55,1480,-280, -100,1680,300, -50,1680,160, -100,1400,130, -120,1380,240, -50,1680,160, -80,1680,20, -120,1380,20, -100,1400,130, -83,1660,20, -80,1680,20, -100,1680,-20, -100,1660,-38, -120,1380,20, -88,1620,20, -100,1620,-74, -120,1360,-20, -120,1360,-20, -100,1620,-74, -100,1580,-110, -60,1400,-140, -100,1680,-200, -55,1480,-280, -60,1400,-140, -100,1580,-110, -100,1680,-200, -100,1680,-440, -100,1500,-440, -55,1480,-280, 100,1680,300, 120,1380,240, 100,1400,130, 50,1680,160, 50,1680,160, 100,1400,130, 120,1380,20, 80,1680,20, 83,1660,20, 100,1660,-38, 100,1680,-20, 80,1680,20, 120,1380,20, 120,1360,-20, 100,1620,-74, 88,1620,20, 120,1360,-20, 60,1400,-140, 100,1580,-110, 100,1620,-74, 100,1680,-200, 100,1580,-110, 60,1400,-140, 55,1480,-280, 100,1680,-200, 55,1480,-280, 100,1500,-440, 100,1680,-440, 88,1620,20, 100,1620,-74, 80,1640,-56, 61,1640,20, 61,1640,20, 80,1640,-56, 100,1660,-38, 83,1660,20, -88,1620,20, -61,1640,20, -80,1640,-56, -100,1620,-74, -61,1640,20, -83,1660,20, -100,1660,-38, -80,1640,-56, 35,1780,-80, 35,1780,-440, -35,1780,-440, -35,1780,-80, 35,1780,-80, 35,1680,-80, 35,1680,-440, 35,1780,-440, -35,1780,-80, -35,1780,-440, -35,1680,-440, -35,1680,-80, 35,1780,-80, -35,1780,-80, -35,1680,-80, 35,1680,-80, 35,1780,-440, 35,1680,-440, -35,1680,-440, -35,1780,-440, -100,1400,130, -120,1380,20, 120,1380,20, 100,1400,130, -100,1400,130, 100,1400,130, 120,1380,240, -120,1380,240, -260,580,-80, -55,1480,-280, 0,1500,-360, 0,780,-400, 260,580,-80, 0,780,-400, 0,1500,-360, 55,1480,-280, -50,1380,40, -200,880,400, 200,880,400, 50,1380,40, -200,880,400, -260,580,260, 260,580,260, 200,880,400, -50,1380,40, -140,1220,-40, -260,580,260, -200,880,400, -140,1220,-40, -114,1220,-222, -260,580,-80, -260,580,260, -55,1480,-280, -114,1220,-222, -140,1220,-40, -60,1400,-140, 50,1380,40, 200,880,400, 260,580,260, 140,1220,-40, 140,1220,-40, 260,580,260, 260,580,-80, 114,1220,-222, 55,1480,-280, 60,1400,-140, 140,1220,-40, 114,1220,-222, 260,580,-80, 144,580,-260, 0,780,-400, 144,580,-260, -144,580,-260, 0,780,-400, -260,580,-80, 0,780,-400, -144,580,-260, 0,1400,400, 80,1620,400, -80,1620,400, 0,1400,400, -80,1620,400, -120,1380,240, -120,1380,240, -80,1620,400, -100,1680,340, -120,1380,240, -100,1680,340, -100,1680,300, 0,1400,400, 120,1380,240, 80,1620,400, 120,1380,240, 100,1680,340, 80,1620,400, 120,1380,240, 100,1680,300, 100,1680,340, 0,1400,400, -120,1380,240, 120,1380,240, -60,1400,-140, -140,1220,-40, -45,1380,-20, -45,1380,-20, -140,1220,-40, -50,1380,40, 60,1400,-140, 45,1380,-20, 140,1220,-40, 45,1380,-20, 50,1380,40, 140,1220,-40, 60,1400,-140, 120,1360,-20, 45,1380,-20, 50,1380,40, 45,1380,-20, 120,1360,-20, 50,1380,40, 120,1360,-20, 120,1380,20, -60,1400,-140, -45,1380,-20, -120,1360,-20, -50,1380,40, -120,1360,-20, -45,1380,-20, -50,1380,40, -120,1380,20, -120,1360,-20, 88,1620,20, 61,1640,20, 83,1660,20, 100,1620,-74, 100,1660,-38, 80,1640,-56, -88,1620,20, -83,1660,20, -61,1640,20, -100,1620,-74, -80,1640,-56, -100,1660,-38, -40,1680,-110, -100,1680,-200, -100,1580,-110, -100,1680,-20, -40,1680,-110, -100,1580,-110, 40,1680,-110, 100,1580,-110, 100,1680,-200, 100,1680,-20, 100,1580,-110, 40,1680,-110, QUADS, 0,1,2,3, 4,5,6,7, 8,9,10,11, 12,13,14,15, 16,17,18,19, 20,21,22,23, 24,25,26,27, 28,29,30,31, 32,33,34,35, 36,37,38,39, 40,41,42,43, 44,45,46,47, 48,49,50,51, 52,53,54,55, 56,57,58,59, 60,61,62,63, 64,65,66,67, 68,69,70,71, 72,73,74,75, 76,77,78,79, 80,81,82,83, 84,85,86,87, 88,89,90,91, 92,93,94,95, 96,97,98,99, 100,101,102,103, 104,105,106,107, 108,109,110,111, 112,113,114,115, 116,117,118,119, 120,121,122,123, 124,125,126,127, 128,129,130,131, 132,133,134,135, 136,137,138,139, 140,141,142,143, 144,145,146,147, 148,149,150,151, 152,153,154,155, 156,157,158,159, 160,161,162,163, 164,165,166,167, 168,169,170,171, 172,173,174,175, 176,177,178,179, 180,181,182,183, TRIANGLES, 184,185,186, 187,188,189, 190,191,192, 193,194,195, 196,197,198, 199,200,201, 202,203,204, 205,206,207, 208,209,210, 211,212,213, 214,215,216, 217,218,219, 220,221,222, 223,224,225, 226,227,228, 229,230,231, 232,233,234, 235,236,237, 238,239,240, 241,242,243, 244,245,246, 247,248,249, 250,251,252, 253,254,255, 256,257,258, 259,260,261, 262,263,264, 265,266,267, 268,269,270, ENDOFDATA }; 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, SEAM,100,1600,SEAM,80,1700,SEAM,120,1770,SEAM,80,1840,0,1840, ENDOFDATA }; 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, SEAM,240,2000,SEAM,170,2000,SEAM,95,2080,SEAM,70,2080,SEAM,90,2140, SEAM,70,2200,0,2200, ENDOFDATA }; 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, SEAM,160,2010,0,2010, VERTICES, -30,2010,35, 30,2010,35, 30,2310,35, -30,2310,35, -90,2110,35, -30,2110,35, -30,2210,35, -90,2210,35, 90,2110,35, 90,2210,35, 30,2210,35, 30,2110,35, 30,2010,-35, -30,2010,-35, -30,2310,-35, 30,2310,-35, -30,2110,-35, -90,2110,-35, -90,2210,-35, -30,2210,-35, 30,2110,-35, 30,2210,-35, 90,2210,-35, 90,2110,-35, -90,2110,35, -90,2210,35, -90,2210,-35, -90,2110,-35, -30,2010,35, -30,2110,35, -30,2110,-35, -30,2010,-35, -30,2210,30, -30,2310,30, -30,2310,-30, -30,2210,-30, 90,2110,-35, 90,2210,-35, 90,2210,35, 90,2110,35, 30,2010,-35, 30,2110,-35, 30,2110,35, 30,2010,35, 30,2210,-35, 30,2310,-35, 30,2310,35, 30,2210,35, -90,2210,-35, -90,2210,35, -30,2210,35, -30,2210,-35, 30,2210,-35, 30,2210,35, 90,2210,35, 90,2210,-35, -30,2310,-35, -30,2310,35, 30,2310,35, 30,2310,-35, QUADS, 0,1,2,3, 4,5,6,7, 8,9,10,11, 12,13,14,15, 16,17,18,19, 20,21,22,23, 24,25,26,27, 28,29,30,31, 32,33,34,35, 36,37,38,39, 40,41,42,43, 44,45,46,47, 48,49,50,51, 52,53,54,55, 56,57,58,59, ENDOFDATA }; 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, -2705,8863,7173, -3955,8863,6611, -5084,8863,5847, -6059,8863,4907, -6850,8863,3817, -7433,8863,2611, -7790,8863,1326, -7910,8863,0, -7790,8863,-1326, -7433,8863,-2611, -6850,8863,-3817, -6059,8863,-4907, -5066,8863,-5896, -3955,8863,-6611, -2705,8863,-7173, -1373,8863,-7517, 0,8863,-7633, 1373,8863,-7517, 2705,8863,-7173, 3955,8863,-6611, 5066,8863,-5896, 6059,8863,-4907, 6850,8863,-3817, 7433,8863,-2611, 7790,8863,-1326, -1183,11744,7939, -1183,12003,7939, -1183,14019,6547, -1183,16307,5288, -1183,16555,5281, -1183,20128,2191, -1134,20304,2131, -1183,20516,2156, -1417,21874,1842, -1417,23109,2185, -1417,23961,3121, -1417,24001,4252, 0,23917,5637, -1418,23893,5418, -1151,23389,6664, -1151,23501,6906, -1151,23806,6987, -1151,24102,6987, -1151,24209,7189, -1151,24371,7513, -1151,24605,7715, -1151,24939,7674, -1313,25568,7149, -1313,25695,7149, -1598,26707,7610, 0,26837,7841, 0,27354,8076, -1598,27262,7839, -1598,27842,7723, 0,27919,7998, 0,28449,7606, -1598,28309,7303, -1302,28414,6723, 0,28544,6980, 0,28540,6197, -1187,28523,5990, -1304,28447,4204, -1158,28789,1627, -561,28931,-1220, -357,29608,-1244, -357,30527,-1441, -357,31249,-1837, -357,31511,-2627, -357,31511,-3484, -357,31118,-4143, -357,30264,-4538, -436,29406,-5256, 0,29409,-5243, -2207,29018,-6763, -914,28658,-6964, 0,26292,-7237, -1305,26324,-7143, -806,23401,-6784, -812,20723,-6228, -796,16757,-6210, -1559,24934,7435, -1566,24633,7460, -1531,24429,7334, -1475,24293,7131, -1440,24203,7004, -1372,23935,7015, -1364,23606,6868, -1389,23515,6705, -1687,28010,6952, -1687,27926,7343, -1687,27629,7491, -1687,27324,7552, -1687,27032,7432, -1687,26791,7148, -1642,27135,7165, -1642,27254,7304, -1642,27397,7364, -1642,27546,7334, -1642,27693,7261, -1642,27737,7088, -1611,10591,8159, -888,9327,-8560, -4491,13292,1032, -3840,15084,786, -3412,17397,397, -2937,20005,-35, -5108,11669,1240, -6344,10251,1395, -6345,10246,1248, -5109,11664,1092, -2964,20022,-132, -3413,17393,250, -3841,15079,638, -4491,13288,885, -3743,13207,-535, -3085,15092,-710, -2727,17642,-878, -2569,20636,-797, -4348,11575,-324, -5584,10108,-169, -5403,10079,-1732, -4167,11644,-1888, -2465,20842,-2651, -2522,18130,-2392, -2905,15407,-2077, -3562,13227,-1951, -3901,13568,-3294, -3243,15993,-3519, -2861,18863,-3735, -2776,22447,-4309, -4486,11792,-3132, -5783,9930,-2931, -5783,9930,-3054, -4486,11792,-3255, -2776,22438,-4430, -2861,18863,-3858, -3243,15993,-3641, -3901,13568,-3417, -6199,9466,4558, -5766,10642,5726, -5228,11829,6090, -4801,12891,6048, -4155,14560,5246, -3546,16847,3719, -3334,17643,2937, -2860,20062,1230, -4822,12054,7102, -5325,10909,7208, -5732,9938,6026, -4026,14701,5522, -2852,20170,1447, -3319,17801,3175, -3538,16955,3935, -4090,13256,1679, -2874,20073,676, -3706,15083,1464, -3301,17348,1117, -5931,10206,1996, -4695,11624,1840, -4445,11658,2844, -5681,10240,3000, -3074,17398,2202, -3456,15117,2468, -3840,13290,2683, -4642,13358,4019, -4257,15194,3908, -6017,10188,3746, -5237,11714,4039, -5621,11218,5077, -5026,12862,5058, -5134,10861,-3154, -4193,12680,-3336, -2832,20609,-4118, -3052,17428,-3750, -3572,14780,-3529, -3579,14774,-3623, -3059,17422,-3843, -2839,20596,-4211, -4200,12674,-3429, -5141,10855,-3248, -3908,13562,-3510, -3250,15987,-3735, -2868,18857,-3952, -4492,11786,-3348, -5789,9924,-3148, -4817,11321,-3298, -5465,10389,-3198, -4054,13118,-3470, -4346,12230,-3389, -2853,19681,-4056, -2825,21511,-4367, -3155,16705,-3789, -2963,18140,-3897, -3744,14168,-3567, -3415,15381,-3679, -845,13482,-6604, -945,10997,-7893, -981,11110,-7735, -859,13469,-6526, -899,9307,-8439, -813,16486,-6146, -832,20681,-6100, -826,23358,-6656, -882,10149,-8148, -913,12323,-7139, -822,14910,-6353, -817,18235,-6210, -827,21937,-6382, -846,21937,-6341, -841,14912,-6313, -931,12326,-7098, -901,10152,-8107, -844,23359,-6615, -851,20681,-6059, -831,16487,-6105, -919,9307,-8399, -869,13482,-6492, -999,11113,-7694, -860,9726,-8255, -942,10578,-7958, -962,11715,-7413, -900,12896,-6796, -863,14065,-6404, -818,15760,-6221, -828,17367,-6171, -854,19800,-5994, -848,21309,-6200, -843,22566,-6482, -3407,15409,-3785, -3736,14196,-3673, -2911,18365,-4048, -3147,16733,-3895, -2726,21608,-4455, -2808,19905,-4191, -4338,12259,-3495, -4046,13146,-3576, -5457,10418,-3304, -4809,11349,-3404, -4484,11815,-3454, -2715,22288,-4534, -2832,19035,-4066, -3242,16015,-3841, -3900,13590,-3616, -5133,10883,-3354, -4171,12742,-3524, -2803,20773,-4339, -3051,17450,-3949, -3571,14803,-3729, -4979,11072,-3368, -5619,10185,-3279, -4119,12924,-3556, -4411,12037,-3475, -2801,20363,-4269, -2721,21826,-4489, -3099,17092,-3922, -2887,18618,-4038, -3653,14499,-3701, -3325,15712,-3813, -3489,15106,-3757, -3818,13893,-3645, -3011,17758,-3971, -3194,16374,-3868, -2755,21085,-4385, -2815,19494,-4139, -4265,12481,-3515, -3973,13368,-3596, -5304,10595,-3318, -4664,11477,-3407, -5441,10207,-3361, -5350,10338,-3375, -5139,10672,-3428, -5058,10742,-3431, -4831,11101,-3457, -4742,11228,-3470, -4516,11559,-3504, -4423,11693,-3518, -4277,12079,-3558, -4232,12180,-3571, -4138,12522,-3597, -4094,12603,-3609, -3979,12935,-3675, -3943,13043,-3671, -3852,13383,-3699, -3813,13496,-3705, -3692,13947,-3767, -3653,14073,-3790, -3506,14587,-3772, -3467,14685,-3777, -3349,15192,-3888, -3308,15317,-3887, -3162,15800,-3957, -3119,15954,-3961, -3009,16528,-3946, -3002,16637,-3937, -2914,17260,-4014, -2909,17347,-4006, -2834,17893,-4049, -2813,18060,-4060, -2760,18849,-4232, -2746,18968,-4242, -850,22569,-6438, -855,21313,-6156, -861,19804,-5949, -834,17371,-6127, -824,15765,-6176, -869,14070,-6360, -906,12901,-6751, -968,11720,-7368, -948,10645,-7895, -865,9731,-8211, -1006,11164,-7630, -875,13487,-6447, -926,9310,-8354, -837,16490,-6061, -857,20684,-6015, -867,23379,-6515, -907,10157,-8062, -937,12331,-7053, -847,14917,-6268, -842,18236,-6111, -852,21941,-6297, -885,9891,-8156, -985,10905,-7724, -947,11969,-7255, -885,13125,-6649, -858,14493,-6314, -839,16049,-6111, -836,17735,-6083, -859,20244,-5982, -891,21559,-6157, -848,22883,-6508, -851,22255,-6367, -856,20999,-6085, -867,19042,-6000, -836,16930,-6094, -835,15341,-6222, -880,13646,-6405, -916,12540,-6953, -981,11337,-7564, -927,10370,-7988, -932,9518,-8285, -931,9583,-8174, -863,9671,-8145, -892,9982,-8037, -903,10075,-7996, -952,10454,-7865, -961,10550,-7832, -1008,10963,-7617, -1018,11105,-7567, -996,11458,-7405, -992,11582,-7342, -972,12080,-7057, -968,12210,-6984, -935,12620,-6792, -931,12759,-6714, -914,13199,-6441, -910,13346,-6359, -915,13767,-6194, -910,13941,-6175, -890,14633,-6107, -886,14783,-6091, -864,15476,-6035, -859,15645,-6017, -870,16062,-5957, -873,16231,-5936, -853,17048,-5965, -861,17185,-5974, -879,17812,-5997, -885,17961,-5997, -851,18486,-6138, -865,18526,-5933, -872,18761,-5875, -870,19337,-5971, -864,19470,-5784, -937,19590,-5786, -833,19023,-6126, -851,20344,-5894, -851,20576,-5912, -855,21086,-5973, -854,21224,-6003, -871,21651,-6070, -852,21853,-6116, -850,22332,-6224, -849,22490,-6259, -831,22924,-6338, -834,23240,-6364, -2743,19661,-4287, -2740,19863,-4312, -2723,20501,-4469, -2705,20711,-4503, -2661,21262,-4565, -2658,21427,-4593, -2687,22088,-4631, -2695,22209,-4643, -2774,23170,-4392, -2633,23103,-4527, -2681,22439,-4516, -2656,22665,-4573, -2552,22727,-4653, -2534,23015,-4628, -2607,23397,-4556, -2759,23681,-4398, -2740,24136,-4370, -2610,24100,-4580, -2412,24481,-5089, -2671,24389,-4569, -2397,24935,-5652, -2562,25022,-5528, -939,23708,-6566, -1009,24359,-6776, -1095,24912,-6886, -1049,24117,-6493, -990,23894,-6415, -2290,23837,-4814, -2312,23612,-4723, -2183,24804,-5574, -2191,24632,-5391, -1156,24771,-6650, -1154,24624,-6586, -1104,24526,-6656, -1281,9161,-8432, -2524,9161,-8046, -3691,9161,-7572, -4745,9161,-6945, -5662,9127,-6096, -3697,9192,-7581, -2531,9192,-8056, -4753,9183,-6951, -5664,9161,-6101, -5664,9185,-6101, -4753,9207,-6951, -2531,9216,-8055, -3697,9216,-7581, -3684,9232,-7560, -2518,9232,-8034, -4740,9223,-6930, -5651,9200,-6080, -2828,20259,1366, -2798,20256,1187, -2820,20237,692, -2843,20292,-25, -2874,20473,735, -2975,20508,90, -2474,20772,-759, -2660,20879,-691, -2471,21553,-1445, -2498,22175,-1940, -2471,24346,-2830, -2556,22373,-1903, -2528,21595,-1351, -2493,24314,-2936, -2576,22239,-2123, -2548,21461,-1571, -2823,20635,1307, -2741,20503,1328, -1490,23972,5392, -1489,24080,4226, -1489,24040,3095, -1489,23188,2159, -1489,21953,1816, -2479,22156,182, -1515,23830,2117, -1605,24415,3131, -1599,24460,4263, -1580,24357,5431, -1448,23885,6743, -1252,24770,5442, -1271,24873,4274, -1277,24828,3142, -1389,24618,2016, -1479,24733,1993, -1301,25010,3165, -1295,25055,4297, -1391,24890,5460, -1512,25216,5507, -1602,25353,4317, -1608,25308,3186, -1979,23458,-29, -1320,25312,1928, -1495,25055,546, -2438,25790,-488, -1605,25585,5599, -1583,26793,6150, -1850,26272,4298, -1578,27435,7117, -1658,27625,6884, -1671,27398,6846, -1678,27176,6937, -1715,27784,6626, -1744,27323,6551, -1753,26904,6776, -1884,28809,-1688, -1555,28655,1620, -1658,28252,4204, -1581,28263,5997, -1567,28312,6790, -1935,27827,4220, -1818,28249,1603, -1570,27742,6195, -1532,27288,6120, -2038,27074,4245, -1418,28416,228, -413,30264,-4539, -424,31094,-4152, -418,31478,-3497, -410,31453,-2653, -410,31190,-1863, -410,30468,-1467, -410,29550,-1270, -411,31041,-1902, -448,31253,-2696, -449,31323,-3466, -425,31182,-3496, -411,31060,-2738, -387,30899,-1932, -316,30806,-1957, -335,30952,-2766, -353,31089,-3521, -322,31007,-3540, -303,30871,-2786, -284,30725,-1976, -304,30630,-1993, -323,30776,-2802, -342,30912,-3557, -396,30843,-3565, -378,30707,-2811, -358,30561,-2001, -414,30477,-2013, -433,30623,-2822, -452,30759,-3576, -474,30560,-3616, -456,30424,-2861, -436,30278,-2052, -349,30194,-2077, -368,30340,-2886, -386,30477,-3641, -309,30389,-3665, -291,30253,-2911, -271,30107,-2102, -267,29996,-2124, -286,30142,-2933, -305,30278,-3688, -376,30179,-3700, -357,30043,-2945, -338,29897,-2136, -420,29789,-2150, -439,29935,-2959, -458,30071,-3713, -500,29883,-3751, -463,29601,-2187, -470,30974,-4049, -462,30153,-4391, -466,30563,-4220, -410,30009,-1368, -725,29372,-3225, -677,29335,-5130, -908,29205,-3300, -632,29533,-4803, -2587,28768,-3408, -2730,28611,-3456, -2404,28568,-6916, -2413,28849,-6612, -1904,26715,1801, -1394,25919,831, -2224,27270,-3994, -2730,28438,-3011, -2587,28570,-2864, -2826,28152,-3163, -2476,28668,-6523, -2476,28433,-6776, -2787,28338,-3507, -2216,27658,-3972, -2207,27950,-5907, -2311,28216,-6128, -2320,27876,-3971, -2311,28118,-6301, -2311,27845,-6252, -2320,27703,-3749, -2320,27084,-3798, -2320,26986,-4070, -2698,26705,-4014, -2557,26974,-3547, -2557,27739,-3485, -2572,27738,-6362, -2436,28204,-6533, -2436,28421,-6303, -2556,28092,-3822, -2431,28142,-6975, -2544,27863,-6726, -2266,28229,-1686, -1939,28156,-1065, -2569,27943,-2270, -2381,27545,-1682, -2799,27594,-3104, -2750,27866,-2738, -2539,27578,-6309, -2720,26853,-3133, -2788,26461,-3776, -1061,27543,-7078, -1780,27941,135, -1859,27747,-527, -1756,27784,691, -1855,27001,736, -1950,26711,19, -1964,27006,-630, -2342,26955,-1898, -2595,25515,-3113, -2147,27855,132, -2126,27722,601, -2213,27691,-428, -2210,27061,639, -2290,26816,34, -2302,27065,-515, -2347,27680,100, -2335,27602,376, -2386,27584,-229, -2385,27213,398, -2432,27069,42, -2439,27215,-281, -2481,27452,103, -1786,24263,399, -2278,24851,-562, -2372,25143,-1163, 7383,9172,0, 7270,9172,-1487, 6937,9172,-2929, 6393,9172,-4281, 1282,9172,-8433, 0,9172,-8563, 1301,9439,8159, 2371,9313,7844, 3857,9286,7355, 4477,9172,6559, 5704,9174,5179, 6393,9172,4281, 6937,9172,2929, 7270,9172,1487, -7270,9172,-1487, -6937,9172,-2929, -6393,9172,-4281, -1282,9172,-8433, 0,9339,8274, -1301,9439,8159, -2371,9313,7844, -3857,9286,7355, -4477,9172,6559, -5704,9174,5179, -6393,9172,4281, -6937,9172,2929, -7270,9172,1487, -796,9467,8260, 0,9503,8356, 0,9667,8438, -796,9666,8325, -807,10584,8327, -7383,9172,0, 796,9467,8260, 796,9666,8325, 807,10584,8327, 0,10584,8457, 0,11744,8130, 1183,11744,7939, 1183,12003,7939, 0,12003,8130, 0,14019,6737, 1183,14019,6547, 1183,16307,5288, 0,16307,5479, 0,16555,5472, 1183,16555,5281, 1183,20128,2191, 0,20128,2382, 0,20304,2322, 1134,20304,2131, 1183,20516,2156, 0,20516,2346, 0,21898,2060, 1417,21874,1842, 1417,23109,2185, 0,23133,2404, 0,23985,3339, 1417,23961,3121, 1417,24001,4252, 0,24025,4470, 1418,23893,5418, 1151,23389,6664, 0,23394,6882, 0,23506,7125, 1151,23501,6906, 1151,23806,6987, 0,23811,7205, 0,24107,7205, 1151,24102,6987, 1151,24209,7189, 0,24213,7407, 0,24376,7731, 1151,24371,7513, 1151,24605,7715, 0,24610,7933, 0,24944,7892, 1151,24939,7674, 1313,25568,7149, 0,25562,7367, 0,25689,7367, 1313,25695,7149, 1598,26707,7610, 1598,27262,7839, 1598,27842,7723, 1598,28309,7303, 1302,28414,6723, 1187,28523,5990, 1304,28447,4204, 0,28469,4435, 0,28654,1893, 1158,28789,1627, 561,28931,-1220, 0,29310,-864, 0,29574,-1062, 357,29608,-1244, 357,30527,-1441, 0,30496,-1259, 0,31221,-1655, 357,31249,-1837, 357,31511,-2627, 0,31485,-2445, 0,31485,-3302, 357,31511,-3484, 357,31118,-4143, 0,31089,-3961, 0,30233,-4356, 357,30264,-4538, 436,29406,-5256, 0,29018,-6407, 2207,29018,-6763, 914,28658,-6964, 0,28472,-7040, 1305,26324,-7143, 806,23401,-6784, 0,23246,-6890, 0,20735,-6319, 812,20723,-6228, 796,16757,-6210, 0,17171,-6133, 1559,24934,7435, 1566,24633,7460, 1531,24429,7334, 1475,24293,7131, 1440,24203,7004, 1372,23935,7015, 1364,23606,6868, 1389,23515,6705, 1687,28010,6952, 1687,27926,7343, 1687,27629,7491, 1687,27324,7552, 1687,27032,7432, 1687,26791,7148, 1642,27135,7165, 1642,27254,7304, 1642,27397,7364, 1642,27546,7334, 1642,27693,7261, 1642,27737,7088, 1611,10591,8159, 888,9327,-8560, 4491,13292,1032, 3840,15084,786, 3412,17397,397, 2937,20005,-35, 5108,11669,1240, 6344,10251,1395, 6345,10246,1248, 5109,11664,1092, 2964,20022,-132, 3413,17393,250, 3841,15079,638, 4491,13288,885, 3743,13207,-535, 3085,15092,-710, 2727,17642,-878, 2569,20636,-797, 4348,11575,-324, 5584,10108,-169, 5403,10079,-1732, 4167,11644,-1888, 2465,20842,-2651, 2522,18130,-2392, 2905,15407,-2077, 3562,13227,-1951, 3901,13568,-3294, 3243,15993,-3519, 2861,18863,-3735, 2776,22447,-4309, 4486,11792,-3132, 5783,9930,-2931, 5783,9930,-3054, 4486,11792,-3255, 2776,22438,-4430, 2861,18863,-3858, 3243,15993,-3641, 3901,13568,-3417, 6199,9466,4558, 5766,10642,5726, 5228,11829,6090, 4801,12891,6048, 4155,14560,5246, 3546,16847,3719, 3334,17643,2937, 2860,20062,1230, 4822,12054,7102, 5325,10909,7208, 5732,9938,6026, 4026,14701,5522, 2852,20170,1447, 3319,17801,3175, 3538,16955,3935, 4090,13256,1679, 2874,20073,676, 3706,15083,1464, 3301,17348,1117, 5931,10206,1996, 4695,11624,1840, 4445,11658,2844, 5681,10240,3000, 3074,17398,2202, 3456,15117,2468, 3840,13290,2683, 4642,13358,4019, 4257,15194,3908, 6017,10188,3746, 5237,11714,4039, 5621,11218,5077, 5026,12862,5058, 5134,10861,-3154, 4193,12680,-3336, 2832,20609,-4118, 3052,17428,-3750, 3572,14780,-3529, 3579,14774,-3623, 3059,17422,-3843, 2839,20596,-4211, 4200,12674,-3429, 5141,10855,-3248, 3908,13562,-3510, 3250,15987,-3735, 2868,18857,-3952, 4492,11786,-3348, 5789,9924,-3148, 4817,11321,-3298, 5465,10389,-3198, 4054,13118,-3470, 4346,12230,-3389, 2853,19681,-4056, 2825,21511,-4367, 3155,16705,-3789, 2963,18140,-3897, 3744,14168,-3567, 3415,15381,-3679, 0,14037,-6616, 845,13482,-6604, 945,10997,-7893, 0,11066,-7866, 981,11110,-7735, 859,13469,-6526, 899,9307,-8439, 813,16486,-6146, 832,20681,-6100, 826,23358,-6656, 882,10149,-8148, 913,12323,-7139, 822,14910,-6353, 817,18235,-6210, 827,21937,-6382, 846,21937,-6341, 841,14912,-6313, 931,12326,-7098, 901,10152,-8107, 844,23359,-6615, 851,20681,-6059, 831,16487,-6105, 919,9307,-8399, 869,13482,-6492, 999,11113,-7694, 860,9726,-8255, 942,10578,-7958, 962,11715,-7413, 900,12896,-6796, 863,14065,-6404, 818,15760,-6221, 828,17367,-6171, 854,19800,-5994, 848,21309,-6200, 843,22566,-6482, 3407,15409,-3785, 3736,14196,-3673, 2911,18365,-4048, 3147,16733,-3895, 2726,21608,-4455, 2808,19905,-4191, 4338,12259,-3495, 4046,13146,-3576, 5457,10418,-3304, 4809,11349,-3404, 4484,11815,-3454, 2715,22288,-4534, 2832,19035,-4066, 3242,16015,-3841, 3900,13590,-3616, 5133,10883,-3354, 4171,12742,-3524, 2803,20773,-4339, 3051,17450,-3949, 3571,14803,-3729, 4979,11072,-3368, 5619,10185,-3279, 4119,12924,-3556, 4411,12037,-3475, 2801,20363,-4269, 2721,21826,-4489, 3099,17092,-3922, 2887,18618,-4038, 3653,14499,-3701, 3325,15712,-3813, 3489,15106,-3757, 3818,13893,-3645, 3011,17758,-3971, 3194,16374,-3868, 2755,21085,-4385, 2815,19494,-4139, 4265,12481,-3515, 3973,13368,-3596, 5304,10595,-3318, 4664,11477,-3407, 5441,10207,-3361, 5350,10338,-3375, 5139,10672,-3428, 5058,10742,-3431, 4831,11101,-3457, 4742,11228,-3470, 4516,11559,-3504, 4423,11693,-3518, 4277,12079,-3558, 4232,12180,-3571, 4138,12522,-3597, 4094,12603,-3609, 3979,12935,-3675, 3943,13043,-3671, 3852,13383,-3699, 3813,13496,-3705, 3692,13947,-3767, 3653,14073,-3790, 3506,14587,-3772, 3467,14685,-3777, 3349,15192,-3888, 3308,15317,-3887, 3162,15800,-3957, 3119,15954,-3961, 3009,16528,-3946, 3002,16637,-3937, 2914,17260,-4014, 2909,17347,-4006, 2834,17893,-4049, 2813,18060,-4060, 2760,18849,-4232, 2746,18968,-4242, 850,22569,-6438, 855,21313,-6156, 860,19804,-5949, 834,17371,-6127, 824,15765,-6176, 869,14070,-6360, 906,12901,-6751, 968,11720,-7368, 948,10645,-7895, 865,9731,-8211, 1006,11164,-7630, 875,13487,-6447, 926,9310,-8354, 837,16490,-6061, 857,20684,-6015, 867,23379,-6515, 907,10157,-8062, 937,12331,-7053, 847,14917,-6268, 842,18236,-6111, 852,21941,-6297, 885,9891,-8156, 985,10905,-7724, 947,11969,-7255, 885,13125,-6649, 858,14493,-6314, 839,16049,-6111, 836,17735,-6083, 859,20244,-5982, 891,21559,-6157, 848,22883,-6508, 851,22255,-6367, 856,20999,-6085, 867,19042,-6000, 836,16930,-6094, 835,15341,-6222, 880,13646,-6405, 916,12540,-6953, 981,11337,-7564, 927,10370,-7988, 932,9518,-8285, 931,9583,-8174, 863,9671,-8145, 892,9982,-8037, 903,10075,-7996, 952,10454,-7865, 961,10550,-7832, 1008,10963,-7617, 1018,11105,-7567, 996,11458,-7405, 992,11582,-7342, 972,12080,-7057, 968,12210,-6984, 935,12620,-6792, 931,12759,-6714, 914,13199,-6441, 910,13346,-6359, 915,13767,-6194, 910,13941,-6175, 890,14633,-6107, 886,14783,-6091, 864,15476,-6035, 859,15645,-6017, 870,16062,-5957, 873,16231,-5936, 853,17048,-5965, 861,17185,-5974, 879,17812,-5997, 885,17961,-5997, 851,18486,-6138, 865,18526,-5933, 872,18761,-5875, 870,19337,-5971, 864,19470,-5784, 937,19590,-5786, 833,19023,-6126, 851,20344,-5894, 851,20576,-5912, 855,21086,-5973, 854,21224,-6003, 871,21651,-6070, 852,21853,-6116, 850,22332,-6224, 849,22490,-6259, 831,22924,-6338, 834,23240,-6364, 2743,19661,-4287, 2740,19863,-4312, 2723,20501,-4469, 2705,20711,-4503, 2661,21262,-4565, 2658,21427,-4593, 2687,22088,-4631, 2695,22209,-4643, 2774,23170,-4392, 2633,23103,-4527, 2681,22439,-4516, 2656,22665,-4573, 2552,22727,-4653, 2534,23015,-4628, 2607,23397,-4556, 2759,23681,-4398, 2740,24136,-4370, 2610,24100,-4580, 2412,24481,-5089, 2671,24389,-4569, 2397,24935,-5652, 2562,25022,-5528, 939,23708,-6566, 1009,24359,-6776, 1095,24912,-6886, 1049,24117,-6493, 990,23894,-6415, 2290,23837,-4814, 2312,23612,-4723, 2183,24804,-5574, 2191,24632,-5391, 1156,24771,-6650, 1154,24624,-6586, 1104,24526,-6656, 0,9161,-8562, 1281,9161,-8432, 2524,9161,-8046, 3691,9161,-7572, 4745,9161,-6945, 5662,9127,-6096, 3697,9192,-7581, 2531,9192,-8056, 4753,9183,-6951, 5664,9161,-6101, 5664,9185,-6101, 4753,9207,-6951, 2531,9216,-8055, 3697,9216,-7581, 3684,9232,-7560, 2518,9232,-8034, 4740,9223,-6930, 5651,9200,-6080, 2828,20259,1366, 2798,20256,1187, 2820,20237,692, 2843,20292,-25, 2874,20473,735, 2975,20508,90, 2474,20772,-759, 2660,20879,-691, 2471,21553,-1445, 2498,22175,-1940, 2471,24346,-2830, 2556,22373,-1903, 2528,21595,-1351, 2493,24314,-2936, 2576,22239,-2123, 2548,21461,-1571, 2823,20635,1307, 2741,20503,1328, 1490,23972,5392, 1489,24080,4226, 1489,24040,3095, 1489,23188,2159, 1489,21953,1816, 2479,22156,182, 1515,23830,2117, 1605,24415,3131, 1599,24460,4263, 1580,24357,5431, 1448,23885,6743, 1252,24770,5442, 1271,24873,4274, 1277,24828,3142, 1389,24618,2016, 1479,24733,1993, 1301,25010,3165, 1295,25055,4297, 1391,24890,5460, 1512,25216,5507, 1602,25353,4317, 1608,25308,3186, 1979,23458,-29, 1320,25312,1928, 1495,25055,546, 2438,25790,-488, 1605,25585,5599, 1583,26793,6150, 1850,26272,4298, 1578,27435,7117, 1658,27625,6884, 1671,27398,6846, 1678,27176,6937, 1715,27784,6626, 1744,27323,6551, 1753,26904,6776, 1884,28809,-1688, 1555,28655,1620, 1658,28252,4204, 1581,28263,5997, 1567,28312,6790, 1935,27827,4220, 1818,28249,1603, 1570,27742,6195, 1532,27288,6120, 2038,27074,4245, 1418,28416,228, 413,30264,-4539, 424,31094,-4152, 418,31478,-3497, 410,31453,-2653, 410,31190,-1863, 410,30468,-1467, 410,29550,-1270, 411,31041,-1902, 448,31253,-2696, 449,31323,-3466, 425,31182,-3496, 411,31060,-2738, 387,30899,-1932, 316,30806,-1957, 335,30952,-2766, 353,31089,-3521, 322,31007,-3540, 303,30871,-2786, 284,30725,-1976, 304,30630,-1993, 323,30776,-2802, 342,30912,-3557, 396,30843,-3565, 378,30707,-2811, 358,30561,-2001, 414,30477,-2013, 433,30623,-2822, 452,30759,-3576, 474,30560,-3616, 456,30424,-2861, 436,30278,-2052, 349,30194,-2077, 368,30340,-2886, 386,30477,-3641, 309,30389,-3665, 291,30253,-2911, 271,30107,-2102, 267,29996,-2124, 286,30142,-2933, 305,30278,-3688, 376,30179,-3700, 357,30043,-2945, 338,29897,-2136, 420,29789,-2150, 439,29935,-2959, 458,30071,-3713, 500,29883,-3751, 463,29601,-2187, 470,30974,-4049, 462,30153,-4391, 466,30563,-4220, 410,30009,-1368, 725,29372,-3225, 677,29335,-5130, 908,29205,-3300, 632,29533,-4803, 2587,28768,-3408, 2730,28611,-3456, 2404,28568,-6916, 2413,28849,-6612, 1904,26715,1801, 1394,25919,831, 2224,27270,-3994, 2730,28438,-3011, 2587,28570,-2864, 2826,28152,-3163, 2476,28668,-6523, 2476,28433,-6776, 2787,28338,-3507, 2216,27658,-3972, 2207,27950,-5907, 2311,28216,-6128, 2320,27876,-3971, 2311,28118,-6301, 2311,27845,-6252, 2320,27703,-3749, 2320,27084,-3798, 2320,26986,-4070, 2698,26705,-4014, 2557,26974,-3547, 2557,27739,-3485, 2572,27738,-6362, 2436,28204,-6533, 2436,28421,-6303, 2556,28092,-3822, 2431,28142,-6975, 2544,27863,-6726, 2266,28229,-1686, 1939,28156,-1065, 2569,27943,-2270, 2381,27545,-1682, 2799,27594,-3104, 2750,27866,-2738, 2539,27578,-6309, 2720,26853,-3133, 2788,26461,-3776, 1061,27543,-7078, 1780,27941,135, 1859,27747,-527, 1756,27784,691, 1855,27001,736, 1950,26711,19, 1964,27006,-630, 2342,26955,-1898, 2595,25515,-3113, 2147,27855,132, 2126,27722,601, 2213,27691,-428, 2210,27061,639, 2290,26816,34, 2302,27065,-515, 2347,27680,100, 2335,27602,376, 2386,27584,-229, 2385,27213,398, 2432,27069,42, 2439,27215,-281, 2481,27452,103, 1786,24263,399, 2278,24851,-562, 2372,25143,-1163, -2567,23141,-2607, -2513,23156,-2494, 2513,23156,-2494, 2567,23141,-2607, TRIANGLES, 657,656,159, 100,506,99, 1003,900,995, 1048,1009,901, 1051,901,1009, 1070,1073,1071, 1070,803,808, 1071,1077,1070, 1072,1006,1073, 1072,808,915, 1073,808,1072, 1077,1071,1076, 1078,1283,1127, 1081,1078,1079, 1081,1079,1080, 1083,1082,1086, 1083,747,1274, 1084,888,1085, 1085,878,1086, 1085,1086,1095, 1086,747,1083, 1093,1095,1086, 1094,1095,1093, 658,657,149, 1101,637,32, 1103,638,1108, 1105,637,1101, 1106,637,1105, 1108,638,1111, 111,36,158, 111,653,665, 111,665,36, 1110,858,1112, 1111,988,1110, 1111,638,891, 1111,891,988, 1112,858,1113, 1113,637,1106, 1117,779,784, 112,214,207, 112,651,210, 1124,1297,1154, 1125,1123,1128, 1125,1302,1154, 1127,1077,1078, 1129,791,796, 1130,1118,1137, 1136,1130,1137, 1137,1118,1119, 1137,1119,1121, 1137,1121,1126, 1142,758,759, 1142,759,760, 1142,760,761, 1147,1146,1154, 1150,755,756, 1150,756,757, 1154,1302,1124, 1155,1147,1154, 1155,1297,1156, 1155,1154,1297, 1156,1240,1155, 1156,1298,1157, 1157,1240,1156, 1157,1299,1273, 1157,1282,1281, 1158,1151,1152, 1161,768,1164, 1162,773,1161, 1162,1161,1163, 1163,1161,1164, 1165,1172,762, 1168,726,1178, 1168,1267,1266, 1169,1178,725, 1171,1172,1165, 1171,720,1172, 1171,1165,1175, 1178,1169,1174, 1178,1174,1278, 1179,1229,1228, 118,660,168, 1180,1229,1179, 1185,726,1226, 1186,1183,1184, 1186,1184,1191, 119,660,118, 1191,1184,1192, 1192,1184,1197, 1197,1184,1198, 1198,1184,1203, 1203,1184,1204, 121,116,451, 1210,1209,1230, 1215,1210,1230, 1216,1215,1230, 1221,1216,1230, 1222,1185,1226, 1222,1221,1230, 1223,1222,1226, 1224,1223,1225, 1225,1223,1226, 1226,726,1231, 1227,1188,1189, 1227,1189,1194, 1227,1194,1195, 1227,1195,1200, 1227,1200,1201, 1227,1201,1206, 1228,1224,1225, 1228,1225,1234, 1229,1207,1212, 1229,1212,1213, 1229,1213,1218, 1229,1218,1219, 1229,1219,1224, 1229,1180,1227, 1229,1224,1228, 1230,729,1185, 1230,1185,1222, 1231,1225,1226, 1232,1179,1234, 1233,744,1232, 1234,1179,1228, 1234,1225,1231, 1235,744,1233, 1237,744,1238, 1239,1155,1240, 1240,1157,1239, 1243,1168,1266, 1248,1241,1249, 1250,1249,1252, 1252,1249,1253, 1254,1248,1251, 1256,1241,1255, 1259,1244,1270, 1264,745,1237, 1265,1260,1272, 1267,1168,1178, 1267,1178,1277, 1269,1282,1270, 1270,1282,1273, 1271,1268,1269, 1271,1269,1270, 1273,1283,1274, 1274,1078,1081, 1274,1081,1083, 1274,747,1275, 1275,745,1264, 1275,1264,1265, 1275,1265,1272, 1275,1272,1274, 1276,1178,1278, 1277,1178,1276, 1280,1157,1281, 1281,1269,1277, 1282,1157,1273, 1282,1269,1281, 1283,1078,1274, 1292,1290,1296, 1295,1292,1296, 1296,1290,1291, 1296,1291,1293, 1296,1293,1294, 1296,1294,1295, 1297,1298,1156, 1297,1124,1298, 1298,1124,1299, 1299,1124,1273, 1299,1157,1298, 660,659,168, 133,128,463, 137,182,141, 138,185,137, 139,184,138, 140,183,139, 141,181,142, 141,182,144, 142,181,143, 143,649,142, 143,197,195, 144,196,181, 144,199,194, 145,183,140, 145,201,183, 145,140,405, 146,184,139, 146,139,183, 146,203,184, 147,185,138, 147,138,184, 147,205,185, 148,198,182, 148,137,185, 149,657,159, 150,149,159, 151,150,157, 152,151,157, 153,152,157, 157,150,158, 157,38,160, 157,37,38, 158,150,159, 160,153,157, 160,39,163, 160,38,39, 162,41,161, 163,39,40, 168,659,171, 172,155,156, 176,153,154, 176,154,155, 177,658,149, 179,149,150, 179,150,151, 180,152,153, 181,197,143, 181,141,144, 181,196,190, 182,199,144, 182,137,148, 182,198,189, 183,200,146, 184,202,147, 185,204,148, 186,204,185, 186,267,204, 186,185,205, 187,202,184, 187,265,202, 187,184,203, 188,200,183, 188,263,200, 188,183,201, 189,275,199, 189,261,255, 190,277,197, 190,259,254, 191,276,198, 191,148,204, 192,205,147, 192,147,202, 192,268,205, 193,203,146, 193,146,200, 193,266,203, 194,278,196, 194,262,249, 196,259,190, 196,144,194, 196,278,248, 197,181,190, 197,260,195, 197,277,247, 198,261,189, 198,148,191, 198,276,246, 199,182,189, 199,262,194, 199,275,245, 200,274,193, 201,273,188, 202,272,192, 203,271,187, 204,270,191, 205,269,186, 206,215,209, 206,216,90, 207,215,206, 207,214,208, 208,231,215, 208,230,228, 209,233,216, 209,232,227, 210,229,214, 210,651,226, 211,235,217, 211,234,225, 212,237,218, 212,236,224, 212,386,236, 213,238,223, 213,421,88, 214,230,208, 214,112,210, 214,229,222, 215,207,208, 215,232,209, 215,231,221, 216,206,209, 216,234,211, 216,233,220, 217,90,211, 217,386,212, 218,89,212, 218,238,213, 218,237,219, 219,342,238, 219,340,331, 220,346,234, 220,336,329, 221,348,232, 221,334,328, 222,350,230, 222,332,327, 223,341,326, 224,343,237, 224,339,325, 225,345,235, 225,337,324, 226,351,229, 226,651,445, 227,347,233, 227,335,322, 228,349,231, 228,333,321, 229,332,222, 229,210,226, 229,351,320, 230,214,222, 230,333,228, 230,350,319, 231,334,221, 231,208,228, 231,349,318, 232,215,221, 232,335,227, 232,348,317, 233,336,220, 233,209,227, 233,347,316, 234,216,220, 234,337,225, 234,346,315, 235,211,225, 235,345,314, 236,339,224, 236,383,313, 236,344,383, 237,340,219, 237,212,224, 237,343,312, 238,218,219, 238,341,223, 238,342,311, 239,269,205, 239,205,268, 240,270,204, 240,204,267, 241,271,203, 241,203,266, 242,272,202, 242,202,265, 243,273,201, 243,201,264, 244,274,200, 244,200,263, 250,145,407, 251,266,193, 251,193,274, 252,268,192, 252,192,272, 253,191,270, 256,263,188, 256,188,273, 257,265,187, 257,187,271, 258,267,186, 258,186,269, 259,196,248, 22,650,435, 260,197,247, 261,198,246, 262,199,245, 21,650,22, 275,189,255, 276,191,253, 277,190,254, 278,194,249, 323,226,445, 330,217,235, 330,235,338, 332,229,320, 333,230,319, 334,231,318, 335,232,317, 336,233,316, 337,234,315, 338,235,314, 339,236,313, 664,653,661, 340,237,312, 341,238,311, 342,219,331, 343,224,325, 344,236,386, 345,225,324, 346,220,329, 347,227,322, 348,221,328, 349,228,321, 665,653,664, 350,222,327, 351,226,323, 380,217,330, 405,408,145, 405,412,406, 406,408,405, 407,145,408, 408,341,407, 411,406,412, 413,412,461, 414,413,416, 415,414,416, 416,413,608, 418,87,421, 418,416,608, 419,223,326, 420,213,223, 420,223,419, 421,417,418, 421,213,420, 421,430,428, 421,87,88, 428,430,429, 430,421,420, 435,650,439, 439,650,440, 440,650,447, 442,651,437, 444,195,323, 444,323,445, 445,651,442, 446,195,444, 447,650,195, 447,195,446, 453,452,471, 455,453,471, 460,455,471, 461,617,413, 462,457,459, 465,43,44, 471,452,464, 471,464,470, 486,485,492, 488,458,1301, 488,631,458, 488,1301,459, 488,480,481, 488,481,489, 489,574,490, 490,631,489, 490,574,491, 490,632,631, 491,632,490, 495,105,106, 495,106,107, 495,107,108, 495,108,109, 495,109,110, 495,110,496, 497,495,496, 498,105,495, 498,495,497, 499,506,505, 505,68,71, 506,68,505, 506,67,68, 508,503,512, 509,499,505, 512,74,502, 512,502,601, 513,563,514, 518,517,520, 518,564,76, 519,75,564, 519,74,75, 523,522,561, 525,518,520, 526,518,525, 528,523,561, 529,528,561, 531,518,526, 532,518,531, 534,529,561, 535,534,561, 537,518,532, 538,518,537, 540,535,561, 546,541,563, 547,546,563, 552,547,563, 553,552,563, 556,519,564, 558,553,563, 559,557,558, 559,558,562, 560,74,519, 560,519,556, 560,556,557, 560,557,559, 560,559,565, 561,514,563, 562,563,513, 562,558,563, 562,513,568, 564,543,544, 564,544,549, 564,549,550, 564,550,555, 564,555,556, 565,74,560, 565,559,568, 566,84,567, 567,84,569, 568,559,562, 568,513,566, 571,85,598, 571,84,85, 572,84,571, 573,491,574, 574,489,573, 583,575,582, 585,582,588, 586,583,584, 587,583,586, 589,575,590, 598,85,609, 599,598,609, 653,111,654, 600,601,502, 600,502,577, 603,602,605, 604,578,593, 604,616,603, 604,603,605, 606,594,599, 606,599,609, 607,633,491, 607,616,604, 607,491,616, 607,458,633, 608,87,418, 608,617,607, 608,606,609, 608,413,617, 609,87,608, 609,86,87, 610,512,611, 611,512,601, 611,603,615, 612,508,512, 612,512,610, 615,616,491, 615,491,614, 615,603,616, 625,624,630, 627,625,630, 628,627,630, 629,628,630, 630,624,626, 630,626,629, 631,488,489, 632,458,631, 632,491,633, 633,458,632, 639,651,112, 641,774,640, 32,637,33, 667,640,668, 668,640,669, 669,640,774, 67,506,100, 672,669,774, 676,673,820, 677,676,823, 680,677,826, 688,685,1131, 712,711,754, 720,719,1172, 721,720,1171, 725,1178,726, 729,726,1185, 729,1230,730, 73,512,503, 730,1230,1184, 74,512,73, 743,82,83, 745,744,1237, 745,743,744, 745,1275,746, 746,85,743, 746,743,745, 746,609,85, 746,1275,86, 747,86,1275, 748,747,1086, 748,883,751, 748,1086,878, 751,882,752, 752,881,870, 76,564,75, 762,1172,763, 763,1172,719, 769,768,1161, 770,769,1161, 771,770,1161, 772,771,1161, 773,772,1161, 774,641,642, 775,638,639, 781,647,782, 655,654,111, 800,848,801, 801,847,802, 801,848,810, 802,846,803, 802,847,809, 803,846,808, 804,845,800, 805,844,804, 805,636,806, 806,844,805, 806,860,844, 807,845,804, 807,804,844, 807,862,845, 808,1073,1070, 809,863,846, 809,866,856, 810,865,847, 810,868,855, 811,800,845, 811,867,848, 812,644,645, 812,645,840, 813,812,842, 814,813,842, 816,815,843, 817,816,839, 818,817,839, 819,818,835, 820,813,814, 820,814,815, 820,815,816, 820,816,823, 821,672,774, 821,813,820, 822,642,643, 822,643,644, 822,644,812, 822,812,813, 822,813,821, 823,676,820, 824,681,825, 826,677,823, 83,742,743, 831,646,647, 831,647,781, 834,646,831, 844,859,807, 845,861,811, 846,864,808, 846,802,809, 846,863,851, 847,866,809, 847,801,810, 847,865,850, 848,868,810, 848,800,811, 848,867,849, 849,934,868, 849,932,923, 85,84,743, 850,936,866, 850,930,922, 851,938,864, 851,928,921, 852,861,845, 852,926,861, 852,845,862, 853,859,844, 853,924,859, 853,844,860, 854,811,861, 854,935,867, 855,937,865, 855,933,917, 856,939,863, 856,931,916, 857,862,807, 857,807,859, 857,927,862, 858,637,1113, 858,860,806, 858,925,860, 859,943,857, 86,609,746, 860,942,853, 861,941,854, 862,940,852, 863,928,851, 863,809,856, 863,939,909, 864,846,851, 864,938,908, 865,930,850, 865,810,855, 865,937,907, 866,847,850, 866,931,856, 866,936,906, 867,932,849, 867,811,854, 867,935,905, 868,848,849, 868,933,855, 868,934,904, 870,880,871, 871,879,775, 873,879,871, 873,895,879, 873,871,880, 874,880,870, 874,897,880, 874,870,881, 875,638,775, 875,775,879, 876,881,752, 876,899,881, 876,752,882, 877,882,751, 877,1051,882, 877,751,883, 878,883,748, 878,903,883, 879,894,875, 88,218,213, 880,896,873, 881,898,874, 882,900,876, 883,902,877, 884,902,883, 884,1005,902, 884,883,903, 885,898,881, 885,1001,898, 885,881,899, 886,896,880, 886,999,896, 886,880,897, 887,894,879, 887,997,894, 887,879,895, 888,878,1085, 888,903,878, 888,1006,903, 889,901,877, 889,1004,901, 889,877,902, 89,217,212, 89,218,88, 890,899,876, 890,1002,899, 890,876,900, 891,638,875, 891,875,894, 892,897,874, 892,1000,897, 892,874,898, 893,895,873, 893,998,895, 893,873,896, 894,1016,891, 895,1015,887, 896,1014,893, 897,1013,886, 898,1012,892, 899,1011,885, 656,655,159, 90,216,211, 90,217,89, 900,1010,890, 900,882,995, 901,1051,877, 902,1008,889, 903,1007,884, 91,57,58, 910,940,862, 910,862,927, 911,941,861, 911,861,926, 912,942,860, 912,860,925, 913,943,859, 913,859,924, 914,927,857, 914,857,943, 918,854,941, 919,924,853, 919,853,942, 920,926,852, 920,852,940, 928,863,909, 929,864,908, 93,92,484, 930,865,907, 931,866,906, 932,867,905, 933,868,904, 934,849,923, 935,854,918, 936,850,922, 937,855,917, 938,851,921, 939,856,916, 94,93,484, 96,95,476, 97,96,476, 976,903,1006, 976,1007,903, 977,902,1005, 977,1008,902, 978,901,1004, 978,1048,901, 979,900,1003, 979,1010,900, 98,97,476, 980,899,1002, 980,1011,899, 981,898,1001, 981,1012,898, 982,897,1000, 982,1013,897, 983,1014,896, 983,896,999, 984,1015,895, 984,895,998, 985,1016,894, 985,894,997, 986,893,1014, 986,998,893, 987,892,1012, 987,1000,892, 988,891,1016, 988,858,1110, 989,890,1010, 989,1002,890, 99,506,499, 990,889,1008, 990,1004,889, 991,888,1084, 991,1006,888, 992,887,1015, 992,997,887, 993,886,1013, 993,999,886, 994,885,1011, 994,1001,885, 995,882,1045, 996,884,1007, 996,1005,884, QUADS, 648,666,130,131, 648,649,20,19, 657,658,15,14, 1000,987,1032,1031, 1001,994,1036,1035, 1002,989,1040,1039, 1003,995,1044,1043, 1004,990,1053,1052, 1005,996,1057,1056, 1006,991,1061,1060, 1007,976,1059,1058, 1008,977,1055,1054, 1009,906,973,1047, 101,64,67,100, 1010,979,1042,1041, 1011,980,1038,1037, 1012,981,1034,1033, 1013,982,1030,1029, 1014,983,1026,1025, 1015,984,1022,1021, 1016,985,1018,1017, 102,63,64,101, 103,60,63,102, 104,59,60,103, 1045,882,1051,1009, 1045,1009,1047,1046, 1048,978,1050,1049, 105,104,103,106, 106,103,102,107, 1061,991,1071,1075, 1062,939,1004,1052, 1062,1052,1053,1063, 1063,909,939,1062, 1064,928,1008,1054, 1064,1054,1055,1065, 1065,921,928,1064, 1066,938,1005,1056, 1066,1056,1057,1067, 1067,908,938,1066, 1068,929,1007,1058, 1068,1058,1059,1069, 1069,915,929,1068, 107,102,101,108, 1071,991,1084,1076, 1072,915,976,1006, 1073,1006,1060,1074, 1074,1060,1061,1075, 1075,1071,1073,1074, 1078,1077,1076,1079, 108,101,100,109, 1080,1079,1085,1095, 1081,1080,1082,1083, 1082,1080,1092,1091, 1084,1085,1087,1088, 1085,1079,1089,1087, 1086,1082,1091,1093, 1088,1087,1089,1090, 1089,1079,1076,1090, 109,100,99,110, 1090,1076,1084,1088, 1092,1080,1095,1094, 1093,1091,1092,1094, 1096,27,26,431, 1097,638,1103,1098, 658,659,16,15, 110,99,499,496, 1100,1099,1102,1104, 1101,1100,1104,1105, 1102,1099,1098,1103, 1106,1105,1104,1107, 1107,1104,1102,1109, 1109,1102,1103,1108, 1110,1109,1108,1111, 1112,1107,1109,1110, 1113,1106,1107,1112, 1115,819,828,1116, 1117,784,791,1120, 1118,1116,1117,1119, 1119,1117,1120,1121, 1120,791,1129,1122, 1121,1120,1122,1126, 1122,1123,1125,1126, 1126,1125,1154,1137, 1127,1124,1302,1303, 1128,1123,1122,1129, 1128,803,1070,1303, 1129,796,803,1128, 113,114,123,124, 1130,1115,1116,1118, 1131,1114,1115,1130, 1132,1133,1140,1141, 1133,1134,1139,1140, 1134,1135,1138,1139, 1136,688,1131,1130, 1138,1135,1136,1137, 1138,1137,1154,1146, 1139,1138,1146,1145, 114,115,122,123, 1140,1139,1145,1144, 1141,1140,1144,1143, 1142,761,1132,1141, 1143,758,1142,1141, 1143,1144,1149,1150, 1144,1145,1148,1149, 1145,1146,1147,1148, 1148,1147,1155,1153, 1149,1148,1153,1152, 115,116,121,122, 115,114,166,167, 1150,757,758,1143, 1150,1149,1152,1151, 1151,754,755,1150, 1158,712,754,1151, 1158,1152,1160,1159, 1160,1152,1153,1155, 1160,1155,1239,1177, 1165,762,773,1162, 1165,1162,1163,1166, 1166,1163,1164,1167, 1167,1159,1176,1166, 1169,1170,1173,1174, 1173,1170,1171,1175, 1174,1173,1177,1239, 1175,1165,1166,1176, 1176,1159,1160,1177, 1177,1173,1175,1176, 1182,1183,1186,1187, 1187,1186,1191,1190, 1188,1181,1182,1187, 1189,1188,1187,1190, 119,118,117,120, 1190,1191,1192,1193, 1193,1192,1197,1196, 1194,1189,1190,1193, 1195,1194,1193,1196, 1196,1197,1198,1199, 1199,1198,1203,1202, 659,660,17,16, 659,658,177,171, 120,117,113,124, 1200,1195,1196,1199, 1201,1200,1199,1202, 1202,1203,1204,1205, 1204,1184,1230,1209, 1205,1204,1209,1208, 1206,1201,1202,1205, 1207,1206,1205,1208, 1208,1209,1210,1211, 1211,1210,1215,1214, 1212,1207,1208,1211, 1213,1212,1211,1214, 1214,1215,1216,1217, 1217,1216,1221,1220, 1218,1213,1214,1217, 1219,1218,1217,1220, 122,121,128,127, 1220,1221,1222,1223, 1224,1219,1220,1223, 1227,1180,1181,1188, 1227,1206,1207,1229, 123,122,127,126, 1231,726,1168,1233, 1233,1168,1243,1235, 1234,1231,1233,1232, 1236,1235,1243,1242, 1236,1242,1244,1247, 1237,1238,1245,1246, 1238,744,1235,1236, 1239,1157,1280,1279, 124,123,126,125, 1244,1242,1271,1270, 1245,1238,1236,1247, 1246,1245,1262,1261, 1247,1244,1259,1263, 1249,1241,1256,1253, 125,126,135,136, 1251,1248,1249,1250, 1251,1250,1262,1263, 1254,1251,1263,1259, 1255,1241,1248,1254, 1257,1256,1255,1258, 1258,1255,1254,1259, 126,127,134,135, 1260,1253,1256,1257, 1261,1252,1253,1260, 1262,1250,1252,1261, 1262,1245,1247,1263, 1264,1237,1246,1265, 1265,1246,1261,1260, 1268,1243,1266,1269, 1269,1266,1267,1277, 127,128,133,134, 1271,1242,1243,1268, 1272,1260,1257,1274, 1273,1258,1259,1270, 1273,1124,1127,1283, 1274,1257,1258,1273, 1278,1174,1239,1279, 128,121,451,454, 1284,1276,1278,1285, 1285,1278,1279,1287, 1286,1277,1276,1284, 1287,1279,1280,1288, 1288,1280,1281,1289, 1289,1281,1277,1286, 129,120,124,125, 1290,1284,1285,1291, 1291,1285,1287,1293, 1292,1286,1284,1290, 1293,1287,1288,1294, 1294,1288,1289,1295, 1295,1289,1286,1292, 660,666,18,17, 130,666,660,119, 130,119,120,129, 1301,458,461,1300, 1301,1300,462,459, 1303,1070,1077,1127, 1303,1302,1125,1128, 131,130,129,132, 132,129,125,136, 134,133,140,139, 135,134,139,138, 136,135,138,137, 140,133,463,462, 141,132,136,137, 142,131,132,141, 154,153,160,163, 158,36,37,157, 159,655,111,158, 161,156,155,162, 161,41,42,448, 162,155,154,163, 163,40,41,162, 164,113,117,169, 164,169,170,174, 165,116,115,167, 165,156,449,450, 166,114,113,164, 167,166,173,172, 169,117,118,168, 170,169,168,171, 172,156,165,167, 173,166,164,174, 174,170,178,175, 175,178,179,180, 176,155,172,173, 176,173,174,175, 177,149,179,178, 178,170,171,177, 179,151,152,180, 180,153,176,175, 649,648,131,142, 649,650,21,20, 201,145,250,264, 206,90,753,869, 207,206,869,872, 263,256,400,399, 264,250,404,403, 265,257,306,305, 266,251,310,309, 267,258,298,297, 268,252,302,301, 269,239,300,299, 270,240,296,295, 271,241,308,307, 272,242,304,303, 273,243,402,401, 274,244,398,397, 279,260,247,280, 280,247,320,353, 281,277,254,282, 282,254,327,355, 283,259,248,284, 284,248,319,357, 285,278,249,286, 286,249,321,359, 287,262,245,288, 288,245,318,361, 289,275,255,290, 19,18,666,648, 290,255,328,363, 291,261,246,292, 292,246,317,365, 293,276,253,294, 294,253,322,367, 296,240,316,369, 298,258,329,371, 650,649,143,195, 300,239,315,373, 302,252,324,375, 304,242,314,377, 306,257,330,379, 308,241,344,382, 661,653,652,662, 310,251,313,385, 311,250,407,341, 312,256,273,340, 313,251,274,339, 314,242,265,338, 315,239,268,337, 316,240,267,336, 317,246,276,335, 318,245,275,334, 319,248,278,333, 662,667,668,663, 320,247,277,332, 321,249,262,349, 322,253,270,347, 323,195,260,351, 324,252,272,345, 325,244,263,343, 327,254,259,350, 328,255,261,348, 329,258,269,346, 663,668,669,670, 330,257,271,380, 331,243,264,342, 332,277,281,354, 333,278,285,358, 334,275,289,362, 335,276,293,366, 336,267,297,370, 337,268,301,374, 338,265,305,378, 339,274,397,387, 664,661,662,663, 340,273,401,391, 342,264,403,393, 343,263,399,389, 344,241,266,383, 345,272,303,376, 346,269,299,372, 347,270,295,368, 348,261,291,364, 349,262,287,360, 665,664,663,670, 350,259,283,356, 351,260,279,352, 352,279,280,353, 353,320,351,352, 354,281,282,355, 355,327,332,354, 356,283,284,357, 357,319,350,356, 358,285,286,359, 359,321,333,358, 36,665,670,671, 360,287,288,361, 361,318,349,360, 362,289,290,363, 363,328,334,362, 364,291,292,365, 365,317,348,364, 366,293,294,367, 367,322,335,366, 368,295,296,369, 369,316,347,368, 37,36,671,674, 370,297,298,371, 371,329,336,370, 372,299,300,373, 373,315,346,372, 374,301,302,375, 375,324,337,374, 376,303,304,377, 377,314,345,376, 378,305,306,379, 379,330,338,378, 38,37,674,675, 380,271,307,381, 381,307,308,382, 382,344,380,381, 383,266,309,384, 384,309,310,385, 385,313,383,384, 386,217,380,344, 388,325,339,387, 388,387,397,398, 39,38,675,678, 390,312,343,389, 390,389,399,400, 392,331,340,391, 392,391,401,402, 394,311,342,393, 394,393,403,404, 395,341,408,409, 396,326,341,395, 396,395,409,410, 398,244,325,388, 40,39,678,679, 400,256,312,390, 402,243,331,392, 404,250,311,394, 405,140,462,1300, 406,326,396,410, 408,406,410,409, 41,40,679,682, 411,412,413,414, 411,414,424,425, 412,405,1300,461, 417,415,416,418, 419,326,406,411, 419,411,425,423, 42,41,682,683, 420,414,415,430, 422,420,419,423, 424,414,420,422, 424,422,423,425, 426,417,421,428, 427,415,417,426, 427,426,428,429, 43,42,683,686, 430,415,427,429, 431,651,639,1096, 431,26,25,432, 432,25,24,433, 432,433,436,437, 433,24,23,434, 434,23,22,435, 436,433,434,438, 436,438,441,443, 437,651,431,432, 437,436,443,442, 438,434,435,439, 438,439,440,441, 44,43,686,687, 441,440,447,446, 442,443,444,445, 443,441,446,444, 448,42,43,465, 449,156,161,448, 449,448,465,464, 45,44,687,690, 450,449,464,452, 451,116,165,450, 451,450,452,453, 454,451,453,455, 456,454,455,460, 456,457,462,463, 459,457,456,460, 46,45,690,691, 461,458,607,617, 463,128,454,456, 465,44,470,464, 466,98,476,475, 466,49,50,98, 467,47,49,466, 468,46,47,467, 469,45,46,468, 47,46,691,694, 470,44,45,469, 470,469,472,471, 472,469,468,473, 473,468,467,474, 474,467,466,475, 476,95,477,475, 478,474,475,477, 479,473,474,478, 48,695,696,697, 480,472,473,479, 481,480,479,482, 482,479,478,483, 483,478,477,484, 486,483,484,485, 487,482,483,486, 487,486,494,489, 488,459,460,471, 488,471,472,480, 489,481,482,487, 49,47,694,48, 492,58,59,493, 493,59,104,501, 494,486,492,493, 494,493,510,511, 497,496,499,500, 498,497,500,501, 652,640,667,662, 652,653,10,9, 50,49,48,697, 500,499,509,510, 501,104,105,498, 502,74,565,567, 504,72,73,503, 505,71,72,504, 505,504,507,509, 507,504,503,508, 509,507,511,510, 51,50,697,698, 510,493,501,500, 511,507,508,573, 513,81,82,566, 514,80,81,513, 515,79,80,514, 515,514,561,522, 516,78,79,515, 516,515,522,521, 517,77,78,516, 518,76,77,517, 52,51,698,701, 520,517,516,521, 521,522,523,524, 524,523,528,527, 525,520,521,524, 526,525,524,527, 527,528,529,530, 53,52,701,702, 530,529,534,533, 531,526,527,530, 532,531,530,533, 533,534,535,536, 536,535,540,539, 537,532,533,536, 538,537,536,539, 539,540,541,542, 54,53,702,705, 541,540,561,563, 542,541,546,545, 543,538,539,542, 544,543,542,545, 545,546,547,548, 548,547,552,551, 549,544,545,548, 55,54,705,706, 550,549,548,551, 551,552,553,554, 554,553,558,557, 555,550,551,554, 556,555,554,557, 56,55,706,709, 564,518,538,543, 566,82,743,84, 567,565,568,566, 569,84,572,570, 57,56,709,710, 570,572,579,581, 573,489,494,511, 573,508,612,613, 577,502,567,569, 577,569,570,576, 577,576,605,602, 578,576,570,581, 579,572,571,580, 58,57,710,713, 580,571,598,599, 581,579,596,597, 582,575,589,588, 583,582,585,584, 586,584,596,595, 587,586,595,594, 588,589,592,593, 589,590,591,592, 59,58,713,714, 590,575,583,587, 590,587,594,591, 591,594,606,608, 592,591,608,607, 593,578,581,597, 593,592,607,604, 595,580,599,594, 596,579,580,595, 596,584,585,597, 597,585,588,593, 653,654,11,10, 60,59,714,61, 600,577,602,603, 601,600,603,611, 605,576,578,604, 61,716,717,62, 610,611,620,618, 611,615,623,620, 612,610,618,619, 613,612,619,621, 614,491,573,613, 614,613,621,622, 615,614,622,623, 618,620,626,624, 619,618,624,625, 62,717,718,65, 620,623,629,626, 621,619,625,627, 622,621,627,628, 623,622,628,629, 63,60,61,62, 639,638,1097,1096, 64,63,62,65, 647,634,793,782, 1,647,646,2, 2,646,645,3, 65,718,719,66, 3,645,644,4, 4,644,643,5, 5,643,642,6, 6,642,641,7, 7,641,640,8, 8,640,652,9, 28,27,1096,1097, 29,28,1097,1098, 66,719,720,69, 30,29,1098,1099, 31,30,1099,1100, 32,31,1100,1101, 33,637,636,34, 34,636,635,35, 35,635,634,0, 0,634,647,1, 67,64,65,66, 670,669,672,671, 671,672,673,674, 673,672,821,820, 674,673,676,675, 675,676,677,678, 678,677,680,679, 679,680,681,682, 68,67,66,69, 681,680,826,825, 682,681,684,683, 683,684,685,686, 684,681,824,1114, 685,684,1114,1131, 686,685,688,687, 687,688,689,690, 689,688,1136,1135, 69,720,721,70, 690,689,692,691, 691,692,693,694, 692,689,1135,1134, 693,692,1134,1133, 694,693,695,48, 695,693,1133,1132, 696,695,1132,761, 697,696,699,698, 698,699,700,701, 699,696,761,760, 654,655,12,11, 70,721,722,723, 700,699,760,759, 701,700,703,702, 702,703,704,705, 703,700,759,758, 704,703,758,757, 705,704,707,706, 706,707,708,709, 707,704,757,756, 708,707,756,755, 709,708,711,710, 71,68,69,70, 710,711,712,713, 711,708,755,754, 713,712,715,714, 714,715,716,61, 715,712,1158,1159, 716,715,767,766, 717,716,766,765, 718,717,765,764, 719,718,764,763, 72,71,70,723, 722,721,1171,1170, 723,722,725,724, 724,725,726,727, 725,722,1170,1169, 727,726,729,728, 728,729,730,731, 73,72,723,724, 731,730,733,732, 732,733,734,735, 733,730,1184,1183, 734,733,1183,1182, 735,734,737,736, 736,737,738,739, 737,734,1182,1181, 738,737,1181,1180, 739,738,741,740, 74,73,724,727, 740,741,742,83, 741,738,1180,1179, 742,741,1179,1232, 743,742,1232,744, 749,748,751,750, 75,74,727,728, 750,751,752,753, 753,752,870,869, 76,75,728,731, 762,763,772,773, 763,764,771,772, 764,765,770,771, 765,766,769,770, 766,767,768,769, 767,715,1159,1167, 768,767,1167,1164, 77,76,731,732, 774,642,822,821, 775,639,872,871, 776,780,783,787, 776,777,829,827, 778,779,828,830, 78,77,732,735, 780,781,782,783, 780,776,827,832, 781,780,832,831, 783,782,793,792, 784,779,778,785, 785,778,777,786, 786,777,776,787, 787,783,792,788, 788,792,795,799, 789,786,787,788, 79,78,735,736, 790,785,786,789, 791,784,785,790, 792,793,794,795, 793,634,635,794, 794,635,636,805, 795,794,805,804, 796,791,790,797, 797,790,789,798, 798,789,788,799, 799,795,804,800, 655,656,13,12, 80,79,736,739, 801,798,799,800, 802,797,798,801, 803,796,797,802, 806,636,637,858, 81,80,739,740, 815,814,842,843, 817,818,825,826, 818,819,824,825, 82,81,740,83, 823,816,817,826, 824,819,1115,1114, 827,829,836,837, 828,779,1117,1116, 828,819,835,830, 829,777,778,830, 831,832,833,834, 833,832,827,837, 834,833,841,840, 835,818,839,836, 836,829,830,835, 837,836,839,838, 839,816,843,838, 840,645,646,834, 841,833,837,838, 842,812,840,841, 842,841,838,843, 86,747,748,749, 869,870,871,872, 872,639,112,207, 88,87,86,749, 89,88,749,750, 656,657,14,13, 90,89,750,753, 91,58,492,485, 910,927,952,953, 911,926,956,957, 912,925,944,945, 913,924,948,949, 914,943,950,951, 915,808,864,929, 918,941,958,959, 919,942,946,947, 92,91,485,484, 92,56,57,91, 920,940,954,955, 924,919,992,1015, 925,858,988,1016, 926,920,993,1013, 927,914,986,1014, 928,909,990,1008, 929,908,996,1007, 93,55,56,92, 930,907,979,1003, 931,906,1009,1048, 932,905,981,1001, 933,904,980,1002, 934,923,994,1011, 935,918,987,1012, 936,922,995,1045, 937,917,989,1010, 938,921,977,1005, 939,916,978,1004, 94,54,55,93, 940,910,983,999, 941,911,982,1000, 942,912,985,997, 943,913,984,998, 944,925,1016,1017, 945,944,1017,1018, 946,942,997,1019, 947,946,1019,1020, 948,924,1015,1021, 949,948,1021,1022, 95,94,484,477, 95,53,54,94, 950,943,998,1023, 951,950,1023,1024, 952,927,1014,1025, 953,952,1025,1026, 954,940,999,1027, 955,954,1027,1028, 956,926,1013,1029, 957,956,1029,1030, 958,941,1000,1031, 959,958,1031,1032, 96,52,53,95, 960,935,1012,1033, 961,960,1033,1034, 961,905,935,960, 962,932,1001,1035, 963,962,1035,1036, 963,923,932,962, 964,934,1011,1037, 965,964,1037,1038, 965,904,934,964, 966,933,1002,1039, 967,966,1039,1040, 967,917,933,966, 968,937,1010,1041, 969,968,1041,1042, 969,907,937,968, 97,51,52,96, 970,930,1003,1043, 971,970,1043,1044, 971,922,930,970, 972,936,1045,1046, 973,972,1046,1047, 973,906,936,972, 974,931,1048,1049, 975,974,1049,1050, 975,916,931,974, 976,915,1069,1059, 977,921,1065,1055, 978,916,975,1050, 979,907,969,1042, 98,50,51,97, 980,904,965,1038, 981,905,961,1034, 982,911,957,1030, 983,910,953,1026, 984,913,949,1022, 985,912,945,1018, 986,914,951,1024, 987,918,959,1032, 989,917,967,1040, 990,909,1063,1053, 992,919,947,1020, 993,920,955,1028, 994,923,963,1036, 995,922,971,1044, 996,908,1067,1057, 997,992,1020,1019, 998,986,1024,1023, 999,993,1028,1027, /* The base of the knight */ SPIN,18, 9510,0, 9510,756, SEAM, 9134,1129, 9447,1487, 9447,1951, 9103,2371, STEPDOWN, 8211,3083, 7167,4242, 6662,5664, 7040,7142, STEPUP, SEAM, 7935,8560, STEPUP, BACKREF,0, ENDOFDATA }; 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, -1790,26960,4918, -2617,26960,4532, -3364,26960,4009, -4009,26960,3364, -4532,26960,2617, -4918,26960,1790, -5154,26960,909, -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, 1790,26960,-4918, 2617,26960,-4532, 3364,26960,-4009, 4009,26960,-3364, 4532,26960,-2617, 4918,26960,-1790, 5154,26960,-909, SETBACKREF,1, 3812,31178,0, 3765,31144,729, 3624,31040,1435, 3395,30872,2153, 3084,30642,2820, 2701,30360,3389, 2076,29899,4102, 1492,30015,4340, 845,30033,4442, 0,30044,4511, -657,30063,4443, -1481,30081,4214, -2190,30081,3884, -2830,30081,3435, -3383,30081,2883, -3831,30081,2242, -4162,30081,1534, -4364,30081,779, -4432,30081,0, -4364,30081,-779, -4162,30081,-1534, -3831,30081,-2242, -3383,30081,-2883, -2830,30081,-3435, -2190,30081,-3884, -1481,30081,-4214, -657,30063,-4443, 0,30044,-4511, 845,30033,-4442, 1492,30015,-4340, 2076,29899,-4102, 2701,30360,-3388, 3084,30642,-2820, 3395,30872,-2153, 3624,31040,-1435, 3765,31144,-729, 240,28546,-4957, 884,29021,-4784, 1490,29467,-4537, 2076,29899,-4102, 2701,30360,-3388, 3084,30642,-2820, 3395,30872,-2153, 3624,31040,-1435, 3765,31144,-729, 2177,28477,4637, 1021,27605,5037, 1021,27605,-5042, 2170,28478,-4644, 0,26833,-5233, 0,26833,5233, -3153,28619,-3758, 240,28546,4957, 884,29021,4784, 2076,29899,4102, 2701,30360,3389, 3084,30642,2820, 3395,30872,2153, 3624,31040,1435, 3765,31144,729, -719,28582,4883, 4863,28569,977, 4560,28569,1925, 4064,28569,2815, 3465,28569,3723, 2622,28569,4448, 2621,28583,-4401, 3473,28588,-3691, 4064,28569,-2815, 4560,28569,-1925, 4863,28569,-977, 4965,28569,0, -1678,28619,4610, -3153,28619,3758, -2453,28619,4248, -4248,28619,2453, -3758,28619,3153, -4831,28619,852, -4906,28619,0, -4831,28619,-852, -4610,28619,-1678, -4248,28619,-2453, -3758,28619,-3153, -1678,28619,-4610, -2453,28619,-4248, -644,27895,5037, -644,27895,-5037, -4610,28619,1678, -719,28582,-4883, 2170,28478,-4644, 1021,27605,-5042, 1021,27605,5037, 2177,28477,4637, 0,26833,-5233, 0,26833,5233, -644,27895,-5037, -644,27895,5037, -644,27895,5037, -644,27895,-5037, 1490,29467,-4537, 884,29021,-4784, 240,28546,-4957, 240,28546,4957, 884,29021,4784, 3812,31178,0, 4349,30116,-867, 4197,30001,-1705, 3948,29813,-2492, 3610,29558,-3203, 3193,29244,-3817, 2711,28880,-4315, 4349,30116,-867, 4197,30001,-1705, 3948,29813,-2492, 3610,29558,-3203, 3193,29244,-3817, 2711,28880,-4315, 1608,28047,-4906, 1608,28047,4901, 2711,28880,4310, 3193,29244,3812, 3610,29558,3198, 3948,29813,2487, 4197,30001,1701, 4349,30116,862, 4401,30155,-176, 1490,29467,4537, 1490,29467,4537, 4401,30155,-176, 4349,30116,862, 4197,30001,1701, 3948,29813,2487, 3610,29558,3198, 3193,29244,3812, 2711,28880,4310, 1608,28047,4901, 1608,28047,-4906, TRIANGLES, 8,127,9, 7,128,154, 2,98,3, 121,96,10, 121,10,9, 121,138,96, 122,27,26, 27,126,28, 66,135,65, 162,42,43, 165,164,141, 80,140,95, 103,151,150, 102,125,152, 101,155,128, 100,157,156, 124,137,122, 33,105,34, 29,153,125, 26,124,122, QUADS, 22,118,87,23, 21,117,118,22, 20,116,117,21, 19,115,116,20, 18,114,115,19, 17,113,114,18, 16,123,113,17, 15,111,123,16, 14,112,111,15, 13,109,112,14, 12,110,109,13, 11,108,110,12, 7,154,127,8, 110,108,47,48, 135,136,64,65, 136,137,63,64, 138,139,44,45, 139,162,43,44, 109,110,48,49, 147,161,107,106, 166,165,141,142, 167,166,142,143, 168,167,143,144, 169,168,144,145, 112,109,49,50, 170,169,145,146, 171,81,84,172, 111,112,50,51, 72,88,133,134, 73,89,88,72, 74,163,89,73, 75,90,163,74, 76,91,90,75, 77,92,91,76, 78,93,92,77, 79,94,93,78, 80,95,94,79, 81,170,146,84, 82,171,172,83, 86,82,83,85, 130,129,131,132, 123,111,51,52, 113,123,52,53, 114,113,53,54, 115,114,54,55, 116,115,55,56, 117,116,56,57, 118,117,57,58, 87,118,58,59, 120,87,59,60, 119,120,60,61, 107,161,160,97, 106,107,0,35, 105,148,147,106, 105,106,35,34, 104,149,148,105, 104,105,33,32, 103,150,149,104, 103,104,32,31, 102,152,151,103, 102,103,31,30, 101,128,7,6, 100,101,6,5, 100,156,155,101, 99,100,5,4, 99,158,157,100, 98,99,4,3, 98,159,158,99, 97,98,2,1, 97,160,159,98, 96,108,11,10, 96,138,45,46, 124,119,61,62, 47,108,96,46, 63,137,124,62, 0,107,97,1, 29,125,102,30, 28,126,153,29, 25,119,124,26, 24,120,119,25, 23,87,120,24, /* Everything above the slit */ SPIN,18, 8870,0,8870,731,SEAM,8519,1091,8811,1438,8811,1886,8626,2292, STEPDOWN,6989,2980,5927,4133,5548,5735, STEPUP,5388,7642,5228,7807,STEPDOWN,4427,8149,4057,8434, 3493,9185,2816,13524,SEAM,2690,18532,5301,18690, STEPUP,6810,19005,6861,19277,6804,19625,STEPDOWN,6502,19845, SEAM,4305,20394,STEPUP,4796,20522,4924,20759,4778,20979, STEPDOWN,SEAM,3727,21207,SEAM,3726,22181,STEPUP,SEAM,4546,22705, SEAM,3846,23385,4718,24227,5226,25516,STEPUP,BACKREF,0, /* Everything below the slit */ SPIN,36, BACKREF,1,STEPDOWN,3548,31590,STEPDOWN,2724,32633,SEAM,1581,33500, 2013,33901,STEPUP,2281,34500,2281,34936,STEPDOWN,1947,35372, STEPDOWN,1233,35734,STEPDOWN,0,35891, ENDOFDATA }; static unsigned short king_data[] = { SPIN,20, 11378,0,11378,856,SEAM,10928,1152, 11302,1684,11302,2209,11065,2684, STEPDOWN,8964,3490,7603,4841,7116,6717, STEPUP,6911,8950,6705,9144,STEPDOWN,5678,9545,5204,9878, 4481,10758,3696,14808,SEAM,3065,26979, 5813,27155,STEPUP,7145,27507,7424,27812,7352,28288,7131,28533, 5477,28882,5397,29010,5406,29363,4903,29934, STEPDOWN,SEAM,3944,30227, SEAM,3974,31478,4703,31849,STEPUP,4832,32092,4756,32370, SEAM,3975,32620,6899,39055,6877,39351,2833,39514, 2786,39612,2786,39807,2734,39856,STEPDOWN,STEPDOWN,2590,39905,0,39969, /* The cross */ SETBACKREF,0, QUADSTRIP,-1613,39866,0,-1543,39866,702,-1651,40481,0,-1580,40590,702, -1531,40917,0,-1465,41008,702, QUADSTRIP,-1531,40917,0,-1465,41008,702,-2956,41104,0,-2829,41187,702, -3075,41520,0,-2943,41585,702,-3075,43849,0,-2943,43805,702, -2862,44347,0,-2739,44282,702,-1116,44636,0,-1068,44554,702, QUADSTRIP,-1116,44636,0,-1068,44554,702,-1102,45692,0,-1054,45576,702, -973,45829,0,-973,45747,702,973,45829,0,973,45747,702,1102,45692,0, 1054,45576,702,1116,44636,0,1068,44554,702, QUADSTRIP,1116,44636,0,1068,44554,702,2862,44347,0,2739,44282,702, 3075,43849,0,2943,43805,702,3075,41520,0,2943,41585,702,2956,41104,0, 2829,41187,702,1531,40917,0,1465,41008,702, QUADSTRIP,1531,40917,0,1465,41008,702,1651,40481,0,1580,40590,702, 1613,39866,0,1543,39866,702, QUADSTRIP,-1543,39866,702,1543,39866,702,-1580,40590,702, 1580,40590,702,-1465,41008,702,1465,41008,702,-2829,41187,702, 2829,41187,702,-2943,41585,702,2943,41585,702,-2943,43805,702, 2943,43805,702,-2739,44282,702,2739,44282,702,-1068,44554,702, 1068,44554,702,-1054,45576,702,1054,45576,702,-973,45747,702, 973,45747,702, QUADSTRIP,-1543,39866,-702,BACKREF,0,0,-1580,40590,-702,BACKREF,0,2, -1465,41008,-702,BACKREF,0,4, QUADSTRIP,-1465,41008,-702,BACKREF,0,6,-2829,41187,-702,BACKREF,0,8, -2943,41585,-702,BACKREF,0,10,-2943,43805,-702,BACKREF,0,12, -2739,44282,-702,BACKREF,0,14,-1068,44554,-702,BACKREF,0,16, QUADSTRIP,-1068,44554,-702,BACKREF,0,18,-1054,45576,-702, BACKREF,0,20,-973,45747,-702,BACKREF,0,22,973,45747,-702,BACKREF,0,24, 1054,45576,-702,BACKREF,0,26,1068,44554,-702,BACKREF,0,28, QUADSTRIP,1068,44554,-702,BACKREF,0,30,2739,44282,-702, BACKREF,0,32,2943,43805,-702,BACKREF,0,34,2943,41585,-702,BACKREF,0,36, 2829,41187,-702,BACKREF,0,38,1465,41008,-702,BACKREF,0,40, QUADSTRIP,1465,41008,-702,BACKREF,0,42,1580,40590,-702, BACKREF,0,44,1543,39866,-702,BACKREF,0,46, QUADSTRIP,1543,39866,-702,-1543,39866,-702,1580,40590,-702, -1580,40590,-702,1465,41008,-702,-1465,41008,-702,2829,41187,-702, -2829,41187,-702,2943,41585,-702,-2943,41585,-702,2943,43805,-702, -2943,43805,-702,2739,44282,-702,-2739,44282,-702,1068,44554,-702, -1068,44554,-702,1054,45576,-702,-1054,45576,-702,973,45747,-702, -973,45747,-702, ENDOFDATA }; static unsigned short queen_data[] = { SPIN,24, 11092,0,11092,914,SEAM,10653,1284, 11018,1798,11018,2358,10787,2866, STEPDOWN,8739,3726,7412,5168,6937,7171, STEPUP,6737,9556,6537,9762,STEPDOWN,5536,10191,5073,10546, 4368,11485,3678,15137,SEAM,3259,26879, 5966,27091,STEPUP,7332,27515,7619,27882,7545,28455,7317,28751, 5654,29177,5538,29326,5542,29982,5377,30278, STEPDOWN,SEAM,4194,30585, SEAM,4226,31822,5002,32218,STEPUP,5139,32477,5058,32774, SEAM,4227,33040,STEPDOWN,4421,34778,5042,36612,5874,38429, STEPUP,SEAM,PATTERN,3,6018,39660,6018,39660,6804,39977, SEAM,PATTERN,3,5015,41139,5015,41139,5673,41460, SEAM,4349,40044, STEPDOWN,SEAM,1381,41188, 1396,42332,STEPDOWN,1082,43072,481,43476,0,43543, ENDOFDATA }; static unsigned short pawn_data[] = { SPIN,16, 7395,0,7395,609, SEAM,7102,910,7345,1199,7345,1572,7191,1910, STEPDOWN,5826,2484,4941,3446,4625,4781, STEPUP,4492,6371,4358,6508, STEPDOWN,3691,6794,2912,7657,2473,10091, SEAM,2100,15344, STEPUP,4518,15697,4695,15900,4649,16218,4509,16382, STEPDOWN,SEAM,3150,16755,STEPUP,3858,17678,4303,18752,4455,19905, 4303,21058,3858,22132, STEPDOWN,3150,23055,2227,23763,STEPDOWN,1153,24208,0,24360, ENDOFDATA }; 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, 6167,7812,6138,8066,5926,8460,5216,12608, SEAM,4883,21434, SEAM,5140,21608, SEAM,5176,22792, SEAM,5953,23030, /* SEAM,PATTERN,5,6103,26819,6143,27971,6143,27971,6143,27971,6103,26819, */ /* SEAM,PATTERN,5, 5020,26819,5053,27971,5053,27971,5053,27971, 5020,26819, */ SETBACKREF,0, 6103,26819, SETBACKREF,1, SPIN,20, 5020,26819,5020,26114,4906,25858,0,25666, POLARQUADSTRIP,20,BACKREF,0,1,1,6143,27971,BACKREF,0,2,2,6143,27971, BACKREF,0,3,3,6143,27971,BACKREF,0,4,4,6143,27971, POLARQUADSTRIP,20,BACKREF,0,6,6,6143,27971,BACKREF,0,7,7,6143,27971, BACKREF,0,8,8,6143,27971,BACKREF,0,9,9,6143,27971, POLARQUADSTRIP,20,BACKREF,0,11,11,6143,27971,BACKREF,0,12,12,6143,27971, BACKREF,0,13,13,6143,27971,BACKREF,0,14,14,6143,27971, POLARQUADSTRIP,20,BACKREF,0,16,16,6143,27971,BACKREF,0,17,17,6143,27971, BACKREF,0,18,18,6143,27971,BACKREF,0,19,19,6143,27971, POLARQUADSTRIP,20,1,5053,27971,BACKREF,1,1,2,5053,27971,BACKREF,1,2, 3,5053,27971,BACKREF,1,3,4,5053,27971,BACKREF,1,4, POLARQUADSTRIP,20,6,5053,27971,BACKREF,1,6,7,5053,27971,BACKREF,1,7, 8,5053,27971,BACKREF,1,8,9,5053,27971,BACKREF,1,9, POLARQUADSTRIP,20,11,5053,27971,BACKREF,1,11,12,5053,27971,BACKREF,1,12, 13,5053,27971,BACKREF,1,13,14,5053,27971,BACKREF,1,14, POLARQUADSTRIP,20,16,5053,27971,BACKREF,1,16,17,5053,27971,BACKREF,1,17, 18,5053,27971,BACKREF,1,18,19,5053,27971,BACKREF,1,19, POLARQUADSTRIP,20,1,5020,26819,1,6103,26819, 0,5020,26819,0,6103,26819,19,5020,26819,19,6103,26819, POLARQUADSTRIP,20,6,5020,26819,6,6103,26819, 5,5020,26819,5,6103,26819,4,5020,26819,4,6103,26819, POLARQUADSTRIP,20,11,5020,26819,11,6103,26819, 10,5020,26819,10,6103,26819,9,5020,26819,9,6103,26819, POLARQUADSTRIP,20,16,5020,26819,16,6103,26819, 15,5020,26819,15,6103,26819,14,5020,26819,14,6103,26819, POLARQUADSTRIP,20,1,5053,27971,1,6143,27971,1,5020,26819,1,6103,26819, POLARQUADSTRIP,20,4,5020,26819,4,6103,26819,4,5053,27971,4,6143,27971, POLARQUADSTRIP,20,6,5053,27971,6,6143,27971,6,5020,26819,6,6103,26819, POLARQUADSTRIP,20,9,5020,26819,9,6103,26819,9,5053,27971,9,6143,27971, POLARQUADSTRIP,20,11,5053,27971,11,6143,27971,11,5020,26819,11,6103,26819, POLARQUADSTRIP,20,14,5020,26819,14,6103,26819,14,5053,27971,14,6143,27971, POLARQUADSTRIP,20,16,5053,27971,16,6143,27971,16,5020,26819,16,6103,26819, POLARQUADSTRIP,20,19,5020,26819,19,6103,26819,19,5053,27971,19,6143,27971, POLARQUADSTRIP,20,1,6143,27971,1,5053,27971,2,6143,27971,2,5053,27971, 3,6143,27971,3,5053,27971,4,6143,27971,4,5053,27971, POLARQUADSTRIP,20,6,6143,27971,6,5053,27971,7,6143,27971,7,5053,27971, 8,6143,27971,8,5053,27971,9,6143,27971,9,5053,27971, POLARQUADSTRIP,20,11,6143,27971,11,5053,27971,12,6143,27971,12,5053,27971, 13,6143,27971,13,5053,27971,14,6143,27971,14,5053,27971, POLARQUADSTRIP,20,16,6143,27971,16,5053,27971,17,6143,27971,17,5053,27971, 18,6143,27971,18,5053,27971,19,6143,27971,19,5053,27971, ENDOFDATA }; static double piece_size; 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; unsigned short *pts = data; double dtheta = M_PI * 2 / steps; if( data[0] == PATTERN) { patlen = data[1]; pts += 2; } if( pts[0] == 0) steps = 1; for( i=0; i < steps; i++) { double r = pts[(i % patlen)*2] * piece_size; double y = pts[(i % patlen)*2+1] * piece_size; double theta = dtheta * i; process_vertex( h, r * cos(theta), y, r * sin(theta)); } return pts + patlen * 2 - data; } static void enumerate_vertices( unsigned short *data, void *h, void (*process_vertex)(void *h,double x,double y,double z)) { while(1) { if( data[0] == SPIN) { int steps; steps = data[1]; data += 2; while(data[0] <= SEAM) { if( data[0] == SETBACKREF || data[0] == BACKREF) { data += 2; continue; } else if( data[0] == STEPUP) { steps *= 2; data++; continue; } else if( data[0] == STEPDOWN) { steps /= 2; data++; continue; } else if( data[0] == SEAM) { data ++; /* Visit seam vertices twice */ enumerate_ring_vertices( steps, data, h, process_vertex); data += enumerate_ring_vertices( steps, data, h, process_vertex); } else { data += enumerate_ring_vertices( steps, data, h, process_vertex); } } } else if( data[0] == POLARQUADSTRIP) { int steps = data[1]; double dtheta; data += 2; dtheta = M_PI * 2 / steps; while(data[0] <= SEAM) { if( data[0] != BACKREF) { double theta = dtheta * data[0]; double r = data[1] * piece_size; double y = data[2] * piece_size; process_vertex( h, r * cos(theta), y, r * sin(theta)); } data += 3; } } else if( data[0] == QUADSTRIP || data[0] == VERTICES) { data ++; while(data[0] <= SEAM) { if( data[0] == SETBACKREF) { data += 2; continue; } if( data[0] != BACKREF) { double x = (signed short)data[0] * piece_size; double y = data[1] * piece_size; double z = (signed short)data[2] * piece_size; process_vertex( h, x, y, z); } data += 3; } } else if( data[0] == QUADS || data[0] == TRIANGLES) { data ++; while( data[0] <= SEAM) data++; } else { break; } } } 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)) { int i,j; if( steps == 1) { for( i=0; i < prevsteps; i++) { process_face( h, basevertex, prevbase + i, prevbase + (i ? i-1 : prevsteps-1), -1); if (count_ret) (*count_ret)++; } } else if( steps == prevsteps) { for( i=0; i < steps; i++) { process_face( h, basevertex + i, prevbase + i, prevbase + (i ? i-1 : steps-1), basevertex + (i ? i-1 : steps-1)); if (count_ret) (*count_ret)++; } } else { j = 0; for( i=0;; i++) { while( j < prevsteps && steps*(1+2*j) < prevsteps*(1+2*i)) { process_face( h, basevertex + (i%steps), prevbase + ((j+1)%prevsteps), prevbase + j, -1); if (count_ret) (*count_ret)++; j++; } if( i == steps) break; process_face( h, basevertex + i, basevertex + ((i+1)%steps), prevbase + (j%prevsteps), -1); if (count_ret) (*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; int backrefs[5]; while(1) { if( data[0] == SPIN) { int steps; int prevsteps = -1,prevbase = 0; steps = data[1]; data += 2; while( data[0] <= SEAM) { if( data[0] == SETBACKREF) { backrefs[data[1]] = basevertex; data += 2; continue; } if( data[0] == STEPUP) { steps *= 2; data++; continue; } else if( data[0] == STEPDOWN) { steps /= 2; data++; continue; } if( data[0] == BACKREF) { if( prevsteps != -1) { enumerate_ring_faces( backrefs[data[1]], steps, prevbase, prevsteps, h, count_ret, process_face); } prevbase = backrefs[data[1]]; data += 2; } else { int isseam = 0; if( data[0] == SEAM) { isseam = 1; data++; } if( data[0] == PATTERN) { data += 2 + data[1]*2; } else { if( data[0] == 0) steps = 1; data += 2; } if( prevsteps != -1) { enumerate_ring_faces( basevertex, steps, prevbase, prevsteps, h, count_ret, process_face); } if( isseam) basevertex += steps; prevbase = basevertex; basevertex += steps; } prevsteps = steps; } } else if( data[0] == POLARQUADSTRIP || data[0] == QUADSTRIP) { int v0=-1,v1=0,v2,v3; if( data[0] == POLARQUADSTRIP) data += 2; else data ++; while(data[0] <= SEAM) { if( data[0] == BACKREF) { v2 = backrefs[data[1]]+data[2]; } else { v2 = basevertex; basevertex++; } if( data[3] == BACKREF) { v3 = backrefs[data[4]]+data[5]; } else { v3 = basevertex; basevertex++; } data += 6; if( v0 != -1) { process_face( h, v0, v1, v3, v2); if (count_ret) (*count_ret)++; } v0 = v2; v1 = v3; } } else if( data[0] == VERTICES) { data ++; startofvertices = basevertex; while( data[0] <= SEAM) { if( data[0] == SETBACKREF) { backrefs[data[1]] = basevertex; data += 2; continue; } data += 3; basevertex ++; } } else if( data[0] == QUADS) { data ++; while( data[0] <= SEAM) { process_face( h, data[0] + startofvertices, data[1] + startofvertices, data[2] + startofvertices, data[3] + startofvertices); if (count_ret) (*count_ret)++; data += 4; } } else if( data[0] == TRIANGLES) { data ++; while( data[0] <= SEAM) { process_face( h, data[0] + startofvertices, data[1] + startofvertices, data[2] + startofvertices, -1); if (count_ret) (*count_ret)++; data += 3; } } else { break; } } } 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) { /* The direction is undefined - normalize it anyway */ v[0] = 1.0; v[1] = 0.0; v[2] = 0.0; return; } v[0] /= d; v[1] /= d; v[2] /= d; } 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]; out[2] = v1[0] * v2[1] - v1[1] * v2[0]; normalize( out); } #define vectordiff(v1,v2,out) \ ((out)[0] = (v1)[0] - (v2)[0], \ (out)[1] = (v1)[1] - (v2)[1], \ (out)[2] = (v1)[2] - (v2)[2]) #define vectoradd(v1,v2) \ ((v1)[0] += (v2)[0], \ (v1)[1] += (v2)[1], \ (v1)[2] += (v2)[2]) static int numverts; static float *vertices; static float *normals; 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) { float surfnormal[3],d1[3],d2[3]; if( v4 == -1) { vectordiff( vertices + 3 * v2, vertices + 3 * v1, d1); vectordiff( vertices + 3 * v3, vertices + 3 * v1, d2); normcrossprod( d1, d2, surfnormal); vectoradd( normals + 3 * v1, surfnormal); vectoradd( normals + 3 * v2, surfnormal); vectoradd( normals + 3 * v3, surfnormal); } else { vectordiff( vertices + 3 * v2, vertices + 3 * v1, d1); vectordiff( vertices + 3 * v4, vertices + 3 * v1, d2); normcrossprod( d1, d2, surfnormal); vectoradd( normals + 3 * v1, surfnormal); vectordiff( vertices + 3 * v3, vertices + 3 * v2, d1); vectordiff( vertices + 3 * v1, vertices + 3 * v2, d2); normcrossprod( d1, d2, surfnormal); vectoradd( normals + 3 * v2, surfnormal); vectordiff( vertices + 3 * v4, vertices + 3 * v3, d1); vectordiff( vertices + 3 * v2, vertices + 3 * v3, d2); normcrossprod( d1, d2, surfnormal); vectoradd( normals + 3 * v3, surfnormal); vectordiff( vertices + 3 * v1, vertices + 3 * v4, d1); vectordiff( vertices + 3 * v3, vertices + 3 * v4, d2); normcrossprod( d1, d2, surfnormal); vectoradd( normals + 3 * v4, surfnormal); } } static void collect_vertex( void *curvert, double x, double y, double z) { (*(float**)curvert)[0] = x; (*(float**)curvert)[1] = y; (*(float**)curvert)[2] = z; (*(float**)curvert) += 3; } 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]); glVertex3f( vertices[v1*3], vertices[v1*3+1], vertices[v1*3+2]); glNormal3f( normals[v2*3], normals[v2*3+1], normals[v2*3+2]); glVertex3f( vertices[v2*3], vertices[v2*3+1], vertices[v2*3+2]); glNormal3f( normals[v3*3], normals[v3*3+1], normals[v3*3+2]); glVertex3f( vertices[v3*3], vertices[v3*3+1], vertices[v3*3+2]); if( v4 != -1) { glNormal3f( normals[v4*3], normals[v4*3+1], normals[v4*3+2]); glVertex3f( vertices[v4*3], vertices[v4*3+1], vertices[v4*3+2]); } glEnd(); } static int draw_piece( unsigned short *piece_data) { int i; float *curvert; int count = 0; /* Count how many vertices this piece has */ enumerate_vertices( piece_data, NULL, count_vertex); /* Allocate memory for the vertices and for the vertex normals */ vertices = malloc( sizeof(float) * 3 * numverts); normals = malloc( sizeof(float) * 3 * numverts); if( !vertices || !normals) exit(1); /* Collect the vertex coordinates */ curvert = vertices; enumerate_vertices( piece_data, &curvert, collect_vertex); /* Zero out the normals */ for( i=0; i < numverts * 3; i++) { normals[i] = 0.0; } /* Add up all the face normals at each vertex */ enumerate_faces( piece_data, NULL, NULL, add_normal); /* Normalize the vertex normals */ for( i=0; i < numverts; i++) { normalize( normals + i * 3); } /* Now draw the faces */ enumerate_faces( piece_data, NULL, &count, draw_face); free( normals); free( vertices); if (count <= 1) abort(); return count; } void chessmodels_gen_lists( int classic, int poly_count[PIECES]) { Bool queen_only_p = classic < 0; if (classic < 0) classic = 0; piece_size = classic ? 0.095 / 100 : 0.3 / 8192; glGenLists (20); /* this is horrible! List numbers are hardcoded! */ glNewList(QUEEN, GL_COMPILE); poly_count[QUEEN] = draw_piece( classic ? classic_queen_data : queen_data); glEndList(); if (queen_only_p) return; glNewList(KING, GL_COMPILE); poly_count[KING] = draw_piece( classic ? classic_king_data : king_data); glEndList(); glNewList(BISHOP, GL_COMPILE); poly_count[BISHOP] = draw_piece( classic ? classic_bishop_data : bishop_data); glEndList(); glNewList(KNIGHT, GL_COMPILE); poly_count[KNIGHT] = draw_piece( classic ? classic_knight_data : knight_data); glEndList(); glNewList(ROOK, GL_COMPILE); poly_count[ROOK] = draw_piece( classic ? classic_rook_data : rook_data); glEndList(); glNewList(PAWN, GL_COMPILE); poly_count[PAWN] = draw_piece( classic ? classic_pawn_data : pawn_data); glEndList(); } xscreensaver-5.36/hacks/glx/glblur.c000644 000767 000024 00000041367 12710313205 017461 0ustar00jwzstaff000000 000000 /* glblur --- radial blur using GL textures * Copyright (c) 2002-2014 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 program draws a box and a few line segments, and generates a flowing * radial blur outward from it -- this causes flowing field effects. * It does this by rendering the scene into a small texture, then repeatedly * rendering increasingly-enlarged and increasingly-transparent versions of * that texture onto the frame buffer. * * As such, it's quite graphics intensive -- don't bother trying to run this * if you don't have hardware-accelerated texture support. * * Inspired by Dario Corno's Radial Blur tutorial: * http://nehe.gamedev.net/tutorials/lesson.asp?l=36 */ #define DEFAULTS "*delay: 10000 \n" \ "*showFPS: False \n" \ "*fpsSolid: True \n" \ "*suppressRotationAnimation: True\n" \ # define refresh_glblur 0 # define release_glblur 0 #undef countof #define countof(x) (sizeof((x))/sizeof((*x))) #undef ABS #define ABS(n) ((n)<0?-(n):(n)) #undef SIGNOF #define SIGNOF(n) ((n)<0?-1:1) #include "xlockmore.h" #include "colors.h" #include "rotator.h" #include "gltrackball.h" #include #ifdef USE_GL /* whole file */ #define DEF_SPIN "XYZ" #define DEF_WANDER "True" #define DEF_BLUR_SIZE "15" typedef struct metaball metaball; typedef struct { GLXContext *glx_context; rotator *rot; trackball_state *trackball; Bool button_down_p; GLuint obj_dlist0; /* east-west cube faces */ GLuint obj_dlist1; /* north-south cube faces */ GLuint obj_dlist2; /* up-down cube faces */ GLuint obj_dlist3; /* spikes coming out of the cube's corners */ GLuint scene_dlist1; /* the cube, rotated and translated */ GLuint scene_dlist2; /* the spikes, rotated and translated */ int scene_polys1; /* polygons in scene, not counting texture overlay */ int scene_polys2; /* polygons in scene, not counting texture overlay */ GLuint texture; unsigned int *tex_data; int tex_w, tex_h; int ncolors; XColor *colors0; XColor *colors1; XColor *colors2; XColor *colors3; int ccolor; Bool show_cube_p; Bool show_spikes_p; } glblur_configuration; static glblur_configuration *bps = NULL; static char *do_spin; static Bool do_wander; static int blursize; static XrmOptionDescRec opts[] = { { "-spin", ".spin", XrmoptionSepArg, 0 }, { "+spin", ".spin", XrmoptionNoArg, "" }, { "-blursize", ".blurSize", XrmoptionSepArg, 0 }, { "-wander", ".wander", XrmoptionNoArg, "True" }, { "+wander", ".wander", XrmoptionNoArg, "False" }, }; static argtype vars[] = { {&do_spin, "spin", "Spin", DEF_SPIN, t_String}, {&do_wander, "wander", "Wander", DEF_WANDER, t_Bool}, {&blursize, "blurSize","BlurSize", DEF_BLUR_SIZE, t_Int}, }; ENTRYPOINT ModeSpecOpt glblur_opts = {countof(opts), opts, countof(vars), vars, NULL}; /* Window management, etc */ ENTRYPOINT void reshape_glblur (ModeInfo *mi, int width, int height) { GLfloat h = (GLfloat) height / (GLfloat) width; glViewport (0, 0, (GLint) width, (GLint) height); glMatrixMode(GL_PROJECTION); glLoadIdentity(); gluPerspective (30.0, 1/h, 1.0, 100.0); glMatrixMode(GL_MODELVIEW); glLoadIdentity(); gluLookAt( 0.0, 0.0, 8.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0); # ifdef HAVE_MOBILE /* Keep it the same relative size when rotated. */ { int o = (int) current_device_rotation(); if (o != 0 && o != 180 && o != -180) glScalef (1/h, 1/h, 1/h); } # endif glClear(GL_COLOR_BUFFER_BIT); } /* Objects in the scene */ static void generate_object (ModeInfo *mi) { glblur_configuration *bp = &bps[MI_SCREEN(mi)]; Bool wire = MI_IS_WIREFRAME (mi); int s = 10; bp->scene_polys1 = 0; bp->scene_polys2 = 0; glNewList (bp->obj_dlist0, GL_COMPILE); glBegin (wire ? GL_LINE_LOOP : GL_QUADS); /* front */ glNormal3f (0, 0, 1); glTexCoord2f(1, 0); glVertex3f ( 0.5, -0.5, 0.5); glTexCoord2f(0, 0); glVertex3f ( 0.5, 0.5, 0.5); glTexCoord2f(0, 1); glVertex3f (-0.5, 0.5, 0.5); glTexCoord2f(1, 1); glVertex3f (-0.5, -0.5, 0.5); bp->scene_polys1++; glEnd(); glBegin (wire ? GL_LINE_LOOP : GL_QUADS); /* back */ glNormal3f (0, 0, -1); glTexCoord2f(0, 0); glVertex3f (-0.5, -0.5, -0.5); glTexCoord2f(0, 1); glVertex3f (-0.5, 0.5, -0.5); glTexCoord2f(1, 1); glVertex3f ( 0.5, 0.5, -0.5); glTexCoord2f(1, 0); glVertex3f ( 0.5, -0.5, -0.5); bp->scene_polys1++; glEnd(); glEndList(); glNewList (bp->obj_dlist1, GL_COMPILE); glBegin (wire ? GL_LINE_LOOP : GL_QUADS); /* left */ glNormal3f (-1, 0, 0); glTexCoord2f(1, 1); glVertex3f (-0.5, 0.5, 0.5); glTexCoord2f(1, 0); glVertex3f (-0.5, 0.5, -0.5); glTexCoord2f(0, 0); glVertex3f (-0.5, -0.5, -0.5); glTexCoord2f(0, 1); glVertex3f (-0.5, -0.5, 0.5); bp->scene_polys1++; glEnd(); glBegin (wire ? GL_LINE_LOOP : GL_QUADS); /* right */ glNormal3f (1, 0, 0); glTexCoord2f(1, 1); glVertex3f ( 0.5, -0.5, -0.5); glTexCoord2f(1, 0); glVertex3f ( 0.5, 0.5, -0.5); glTexCoord2f(0, 0); glVertex3f ( 0.5, 0.5, 0.5); glTexCoord2f(0, 1); glVertex3f ( 0.5, -0.5, 0.5); bp->scene_polys1++; glEnd(); glEndList(); glNewList (bp->obj_dlist2, GL_COMPILE); glBegin (wire ? GL_LINE_LOOP : GL_QUADS); /* top */ glNormal3f (0, 1, 0); glTexCoord2f(0, 0); glVertex3f ( 0.5, 0.5, 0.5); glTexCoord2f(0, 1); glVertex3f ( 0.5, 0.5, -0.5); glTexCoord2f(1, 1); glVertex3f (-0.5, 0.5, -0.5); glTexCoord2f(1, 0); glVertex3f (-0.5, 0.5, 0.5); bp->scene_polys1++; glEnd(); glBegin (wire ? GL_LINE_LOOP : GL_QUADS); /* bottom */ glNormal3f (0, -1, 0); glTexCoord2f(1, 0); glVertex3f (-0.5, -0.5, 0.5); glTexCoord2f(0, 0); glVertex3f (-0.5, -0.5, -0.5); glTexCoord2f(0, 1); glVertex3f ( 0.5, -0.5, -0.5); glTexCoord2f(1, 1); glVertex3f ( 0.5, -0.5, 0.5); bp->scene_polys1++; glEnd(); glEndList(); glNewList (bp->obj_dlist3, GL_COMPILE); glLineWidth (1); glBegin(GL_LINES); glVertex3f(-s, 0, 0); glVertex3f(s, 0, 0); /* face spikes */ glVertex3f(0, -s, 0); glVertex3f(0, s, 0); glVertex3f(0, 0, -s); glVertex3f(0, 0, s); bp->scene_polys2 += 3; glEnd(); glLineWidth (8); glBegin(GL_LINES); glVertex3f(-s, -s, -s); glVertex3f( s, s, s); /* corner spikes */ glVertex3f(-s, -s, s); glVertex3f( s, s, -s); glVertex3f(-s, s, -s); glVertex3f( s, -s, s); glVertex3f( s, -s, -s); glVertex3f(-s, s, s); bp->scene_polys2 += 4; glEnd(); glEndList (); check_gl_error ("object generation"); } static void init_texture (ModeInfo *mi) { glblur_configuration *bp = &bps[MI_SCREEN(mi)]; if (bp->tex_data) free (bp->tex_data); bp->tex_w = 128; bp->tex_h = 128; bp->tex_data = (unsigned int *) malloc (bp->tex_w * bp->tex_h * 4 * sizeof (unsigned int)); glGenTextures (1, &bp->texture); glBindTexture (GL_TEXTURE_2D, bp->texture); glTexImage2D (GL_TEXTURE_2D, 0, GL_RGBA, bp->tex_w, bp->tex_h, 0, GL_RGBA, /* GL_UNSIGNED_BYTE, */ GL_UNSIGNED_INT_8_8_8_8_REV, bp->tex_data); check_gl_error ("texture generation"); glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); } static void render_scene_to_texture (ModeInfo *mi) { glblur_configuration *bp = &bps[MI_SCREEN(mi)]; glViewport (0, 0, bp->tex_w, bp->tex_h); glCallList (bp->scene_dlist1); glCallList (bp->scene_dlist2); glBindTexture (GL_TEXTURE_2D, bp->texture); glCopyTexImage2D (GL_TEXTURE_2D, 0, GL_LUMINANCE, 0, 0, bp->tex_w, bp->tex_h, 0); check_gl_error ("texture2D"); glViewport (0, 0, MI_WIDTH(mi), MI_HEIGHT(mi)); } static void overlay_blur_texture (ModeInfo *mi) { glblur_configuration *bp = &bps[MI_SCREEN(mi)]; int w = MI_WIDTH (mi); int h = MI_HEIGHT (mi); int times = blursize; int i; GLfloat inc = 0.02 * (25.0 / times); GLfloat spost = 0; /* starting texture coordinate offset */ GLfloat alpha_inc; /* transparency fade factor */ GLfloat alpha = 0.2; /* initial transparency */ glEnable (GL_TEXTURE_2D); glDisable (GL_DEPTH_TEST); glBlendFunc (GL_SRC_ALPHA,GL_ONE); glEnable (GL_BLEND); glBindTexture (GL_TEXTURE_2D, bp->texture); /* switch to orthographic projection, saving both previous matrixes on their respective stacks. */ glMatrixMode (GL_PROJECTION); glPushMatrix(); glLoadIdentity(); glOrtho (0, w, h, 0, -1, 1); glMatrixMode (GL_MODELVIEW); glPushMatrix(); glLoadIdentity(); alpha_inc = alpha / times; mi->polygon_count = bp->scene_polys1 + bp->scene_polys2; glBegin (GL_QUADS); for (i = 0; i < times; i++) { glColor4f (1, 1, 1, alpha); glTexCoord2f (0+spost, 1-spost); glVertex2f (0, 0); glTexCoord2f (0+spost, 0+spost); glVertex2f (0, h); glTexCoord2f (1-spost, 0+spost); glVertex2f (w, h); glTexCoord2f (1-spost, 1-spost); glVertex2f (w, 0); spost += inc; alpha -= alpha_inc; mi->polygon_count++; } glEnd(); /* Switch back to perspective projection, restoring the saved matrixes */ glMatrixMode (GL_PROJECTION); glPopMatrix(); glMatrixMode (GL_MODELVIEW); glPopMatrix(); glEnable (GL_DEPTH_TEST); glDisable (GL_BLEND); glDisable (GL_TEXTURE_2D); glBindTexture (GL_TEXTURE_2D, 0); } /* Startup initialization */ ENTRYPOINT Bool glblur_handle_event (ModeInfo *mi, XEvent *event) { glblur_configuration *bp = &bps[MI_SCREEN(mi)]; if (gltrackball_event_handler (event, bp->trackball, MI_WIDTH (mi), MI_HEIGHT (mi), &bp->button_down_p)) return True; return False; } ENTRYPOINT void init_glblur (ModeInfo *mi) { glblur_configuration *bp; int wire = MI_IS_WIREFRAME(mi); if (!bps) { bps = (glblur_configuration *) calloc (MI_NUM_SCREENS(mi), sizeof (glblur_configuration)); if (!bps) { fprintf(stderr, "%s: out of memory\n", progname); exit(1); } } bp = &bps[MI_SCREEN(mi)]; bp->glx_context = init_GL(mi); reshape_glblur (mi, MI_WIDTH(mi), MI_HEIGHT(mi)); clear_gl_error(); /* WTF? sometimes "invalid op" from glViewport! */ if (!wire) { GLfloat gamb[4]= {0.2, 0.2, 0.2, 1.0}; GLfloat pos[4] = {0.0, 5.0, 10.0, 1.0}; GLfloat amb[4] = {0.2, 0.2, 0.2, 1.0}; GLfloat dif[4] = {0.3, 0.3, 0.3, 1.0}; GLfloat spc[4] = {0.8, 0.8, 0.8, 1.0}; GLfloat shiny = 128; glEnable(GL_LIGHTING); glEnable(GL_LIGHT0); glEnable(GL_DEPTH_TEST); glEnable(GL_CULL_FACE); glEnable(GL_NORMALIZE); glShadeModel(GL_SMOOTH); glLightModelfv (GL_LIGHT_MODEL_AMBIENT, gamb); glLightfv(GL_LIGHT0, GL_POSITION, pos); glLightfv(GL_LIGHT0, GL_AMBIENT, amb); glLightfv(GL_LIGHT0, GL_DIFFUSE, dif); glLightfv(GL_LIGHT0, GL_SPECULAR, spc); glEnable(GL_LIGHTING); glEnable(GL_LIGHT0); glMaterialf(GL_FRONT, GL_SHININESS, shiny); } { Bool spinx=False, spiny=False, spinz=False; double spin_speed = 0.9; double wander_speed = 0.06; char *s = do_spin; while (*s) { if (*s == 'x' || *s == 'X') spinx = True; else if (*s == 'y' || *s == 'Y') spiny = True; else if (*s == 'z' || *s == 'Z') spinz = True; else if (*s == '0') ; else { fprintf (stderr, "%s: spin must contain only the characters X, Y, or Z (not \"%s\")\n", progname, do_spin); exit (1); } s++; } bp->rot = make_rotator (spinx ? spin_speed : 0, spiny ? spin_speed : 0, spinz ? spin_speed : 0, 1.0, do_wander ? wander_speed : 0, False); bp->trackball = gltrackball_init (True); } if (blursize < 0) blursize = 0; if (blursize > 200) blursize = 200; bp->ncolors = 128; bp->colors0 = (XColor *) calloc(bp->ncolors, sizeof(XColor)); bp->colors1 = (XColor *) calloc(bp->ncolors, sizeof(XColor)); bp->colors2 = (XColor *) calloc(bp->ncolors, sizeof(XColor)); bp->colors3 = (XColor *) calloc(bp->ncolors, sizeof(XColor)); make_smooth_colormap (0, 0, 0, bp->colors0, &bp->ncolors, False, 0, False); make_smooth_colormap (0, 0, 0, bp->colors1, &bp->ncolors, False, 0, False); make_smooth_colormap (0, 0, 0, bp->colors2, &bp->ncolors, False, 0, False); make_smooth_colormap (0, 0, 0, bp->colors3, &bp->ncolors, False, 0, False); bp->ccolor = 0; bp->obj_dlist0 = glGenLists (1); bp->obj_dlist1 = glGenLists (1); bp->obj_dlist2 = glGenLists (1); bp->obj_dlist3 = glGenLists (1); bp->scene_dlist1 = glGenLists (1); bp->scene_dlist2 = glGenLists (1); init_texture (mi); generate_object (mi); } /* Render one frame */ ENTRYPOINT void draw_glblur (ModeInfo *mi) { glblur_configuration *bp = &bps[MI_SCREEN(mi)]; Display *dpy = MI_DISPLAY(mi); Window window = MI_WINDOW(mi); GLfloat color0[4] = {0.0, 0.0, 0.0, 1.0}; GLfloat color1[4] = {0.0, 0.0, 0.0, 1.0}; GLfloat color2[4] = {0.0, 0.0, 0.0, 1.0}; GLfloat color3[4] = {0.0, 0.0, 0.0, 1.0}; GLfloat spec[4] = {1.0, 1.0, 1.0, 1.0}; double rx, ry, rz; double px, py, pz; int extra_polys = 0; if (!bp->glx_context) return; glXMakeCurrent(MI_DISPLAY(mi), MI_WINDOW(mi), *(bp->glx_context)); /* Decide what we're drawing */ if (0 == (random() % 30)) { bp->show_cube_p = (0 == (random() % 10)); bp->show_spikes_p = (0 == (random() % 20)); } /* Select new colors for the various objects */ color0[0] = bp->colors0[bp->ccolor].red / 65536.0; color0[1] = bp->colors0[bp->ccolor].green / 65536.0; color0[2] = bp->colors0[bp->ccolor].blue / 65536.0; color1[0] = bp->colors1[bp->ccolor].red / 65536.0; color1[1] = bp->colors1[bp->ccolor].green / 65536.0; color1[2] = bp->colors1[bp->ccolor].blue / 65536.0; color2[0] = bp->colors2[bp->ccolor].red / 65536.0; color2[1] = bp->colors2[bp->ccolor].green / 65536.0; color2[2] = bp->colors2[bp->ccolor].blue / 65536.0; color3[0] = bp->colors3[bp->ccolor].red / 65536.0; color3[1] = bp->colors3[bp->ccolor].green / 65536.0; color3[2] = bp->colors3[bp->ccolor].blue / 65536.0; bp->ccolor++; if (bp->ccolor >= bp->ncolors) bp->ccolor = 0; get_position (bp->rot, &px, &py, &pz, !bp->button_down_p); get_rotation (bp->rot, &rx, &ry, &rz, !bp->button_down_p); px = (px - 0.5) * 2; py = (py - 0.5) * 2; pz = (pz - 0.5) * 8; rx *= 360; ry *= 360; rz *= 360; /* Generate scene_dlist1, which contains the box (not spikes), rotated into position. */ glNewList (bp->scene_dlist1, GL_COMPILE); { glMatrixMode (GL_MODELVIEW); glPushMatrix (); glTranslatef (px, py, pz); gltrackball_rotate (bp->trackball); glRotatef (rx, 1.0, 0.0, 0.0); glRotatef (ry, 0.0, 1.0, 0.0); glRotatef (rz, 0.0, 0.0, 1.0); glMaterialfv (GL_FRONT_AND_BACK, GL_SPECULAR, spec); glMaterialfv (GL_FRONT, GL_AMBIENT_AND_DIFFUSE, color0); glCallList (bp->obj_dlist0); glMaterialfv (GL_FRONT, GL_AMBIENT_AND_DIFFUSE, color1); glCallList (bp->obj_dlist1); glMaterialfv (GL_FRONT, GL_AMBIENT_AND_DIFFUSE, color2); glCallList (bp->obj_dlist2); glMatrixMode (GL_MODELVIEW); glPopMatrix (); } glEndList (); /* Generate scene_dlist2, which contains the spikes (not box), rotated into position. */ glNewList (bp->scene_dlist2, GL_COMPILE); { glMatrixMode (GL_MODELVIEW); glPushMatrix (); glTranslatef (px, py, pz); gltrackball_rotate (bp->trackball); glRotatef (rx, 1.0, 0.0, 0.0); glRotatef (ry, 0.0, 1.0, 0.0); glRotatef (rz, 0.0, 0.0, 1.0); glMaterialfv (GL_FRONT, GL_AMBIENT_AND_DIFFUSE, color3); glCallList (bp->obj_dlist3); glMatrixMode (GL_MODELVIEW); glPopMatrix (); } glEndList (); glClear (GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); render_scene_to_texture (mi); glClear (GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); if (bp->show_cube_p || bp->button_down_p) { glCallList (bp->scene_dlist1); extra_polys += bp->scene_polys1; } if (bp->show_spikes_p || bp->button_down_p) { glCallList (bp->scene_dlist2); extra_polys += bp->scene_polys2; } overlay_blur_texture (mi); mi->polygon_count += extra_polys; glFlush (); if (mi->fps_p) do_fps (mi); glFinish(); glXSwapBuffers(dpy, window); } XSCREENSAVER_MODULE ("GLBlur", glblur) #endif /* USE_GL */ xscreensaver-5.36/hacks/glx/gllist.c000644 000767 000024 00000006740 12701612217 017471 0ustar00jwzstaff000000 000000 /* xscreensaver, Copyright (c) 1998-2014 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. */ #include "gllist.h" void renderList (const struct gllist *list, int wire_p) { while (list) { if (!wire_p || list->primitive == GL_LINES || list->primitive == GL_POINTS) { glInterleavedArrays (list->format, 0, list->data); glDrawArrays (list->primitive, 0, list->points); } else { /* For wireframe, do it the hard way: treat every tuple of points as its own line loop. */ const GLfloat *p = (GLfloat *) list->data; int i, j, tick, skip, stride; switch (list->primitive) { case GL_QUADS: tick = 4; break; case GL_TRIANGLES: tick = 3; break; default: abort(); break; /* write me */ } switch (list->format) { case GL_C3F_V3F: case GL_N3F_V3F: skip = 3; stride = 6; break; default: abort(); break; /* write me */ } glBegin (GL_LINE_LOOP); for (i = 0, j = skip; i < list->points; i++, j += stride) { if (i && !(i % tick)) { glEnd(); glBegin (GL_LINE_LOOP); } glVertex3f (p[j], p[j+1], p[j+2]); } glEnd(); } list = list->next; } } void renderListNormals (const struct gllist *list, GLfloat length, int faces_p) { while (list) { const GLfloat *p = (GLfloat *) list->data; int i, j, tick, skip, stride; GLfloat v[3], n[3]; if (list->primitive == GL_LINES) continue; if (! faces_p) tick = 1; else switch (list->primitive) { case GL_QUADS: tick = 4; break; case GL_TRIANGLES: tick = 3; break; default: abort(); break; /* write me */ } switch (list->format) { case GL_N3F_V3F: skip = 0; stride = 6; break; case GL_C3F_V3F: continue; break; default: abort(); break; /* write me */ } v[0] = v[1] = v[2] = 0; n[0] = n[1] = n[2] = 0; for (i = 0, j = skip; i <= list->points; i++, j += stride) { if (i && !(i % tick)) { n[0] /= tick; n[1] /= tick; n[2] /= tick; v[0] /= tick; v[1] /= tick; v[2] /= tick; glPushMatrix(); glTranslatef (v[0], v[1], v[2]); glScalef (length, length, length); glBegin (GL_LINES); glVertex3f (0, 0, 0); glVertex3f (n[0], n[1], n[2]); glEnd(); glPopMatrix(); v[0] = v[1] = v[2] = 0; n[0] = n[1] = n[2] = 0; } if (i == list->points) break; n[0] += p[j]; n[1] += p[j+1]; n[2] += p[j+2]; v[0] += p[j+3]; v[1] += p[j+4]; v[2] += p[j+5]; } list = list->next; } } xscreensaver-5.36/hacks/glx/flurry.c000664 000767 000024 00000033334 12701612217 017517 0ustar00jwzstaff000000 000000 /* -*- Mode: C; tab-width: 4 c-basic-offset: 4 indent-tabs-mode: t -*- */ /* * vim: ts=8 sw=4 noet */ /* Copyright (c) 2002, Calum Robinson All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. * Neither the name of the author nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ /* flurry */ #if 0 static const char sccsid[] = "@(#)flurry.c 4.07 97/11/24 xlockmore"; #endif #define DEF_PRESET "random" #define DEF_BRIGHTNESS "8" # define DEFAULTS "*delay: 10000 \n" \ "*showFPS: False \n" # define refresh_flurry 0 # define flurry_handle_event 0 # include "xlockmore.h" /* from the xscreensaver distribution */ #ifdef USE_GL static char *preset_str; static XrmOptionDescRec opts[] = { { "-preset", ".preset", XrmoptionSepArg, 0 } }; static argtype vars[] = { {&preset_str, "preset", "Preset", DEF_PRESET, t_String}, }; #define countof(x) (sizeof((x))/sizeof((*x))) ENTRYPOINT ModeSpecOpt flurry_opts = {countof(opts), opts, countof(vars), vars, NULL}; #ifdef USE_MODULES ModStruct flurry_description = { "flurry", "init_flurry", "draw_flurry", "release_flurry", "draw_flurry", "init_flurry", NULL, &flurry_opts, 1000, 1, 2, 1, 4, 1.0, "", "Flurry", 0, NULL }; #endif #include "flurry.h" global_info_t *flurry_info = NULL; static double gTimeCounter = 0.0; static double currentTime(void) { struct timeval tv; # ifdef GETTIMEOFDAY_TWO_ARGS struct timezone tzp; gettimeofday(&tv, &tzp); # else gettimeofday(&tv); # endif return (double)tv.tv_sec + (double)tv.tv_usec / 1000000.0; } void OTSetup (void) { if (gTimeCounter == 0.0) { gTimeCounter = currentTime(); } } double TimeInSecondsSinceStart (void) { return currentTime() - gTimeCounter; } #if 0 #ifdef __ppc__ static int IsAltiVecAvailable(void) { return 0; } #endif #endif static void delete_flurry_info(flurry_info_t *flurry) { int i; free(flurry->s); free(flurry->star); for (i=0;ispark[i]); } /* free(flurry); */ } static flurry_info_t *new_flurry_info(global_info_t *global, int streams, ColorModes colour, float thickness, float speed, double bf) { int i,k; flurry_info_t *flurry = (flurry_info_t *)malloc(sizeof(flurry_info_t)); if (!flurry) return NULL; flurry->flurryRandomSeed = RandFlt(0.0, 300.0); flurry->fOldTime = 0; flurry->fTime = TimeInSecondsSinceStart() + flurry->flurryRandomSeed; flurry->fDeltaTime = flurry->fTime - flurry->fOldTime; flurry->numStreams = streams; flurry->streamExpansion = thickness; flurry->currentColorMode = colour; flurry->briteFactor = bf; flurry->s = malloc(sizeof(SmokeV)); InitSmoke(flurry->s); flurry->star = malloc(sizeof(Star)); InitStar(flurry->star); flurry->star->rotSpeed = speed; for (i = 0;i < MAX_SPARKS; i++) { flurry->spark[i] = malloc(sizeof(Spark)); InitSpark(flurry->spark[i]); flurry->spark[i]->mystery = 1800 * (i + 1) / 13; /* 100 * (i + 1) / (flurry->numStreams + 1); */ UpdateSpark(global, flurry, flurry->spark[i]); } for (i=0;is->p[i].dead.i[k] = 1; } } flurry->next = NULL; return flurry; } static void GLSetupRC(global_info_t *global) { /* setup the defaults for OpenGL */ glDisable(GL_DEPTH_TEST); glAlphaFunc(GL_GREATER,0.0f); glEnable(GL_ALPHA_TEST); glShadeModel(GL_FLAT); glDisable(GL_LIGHTING); glDisable(GL_CULL_FACE); glEnable(GL_BLEND); glViewport(0,0,(int) global->sys_glWidth,(int) global->sys_glHeight); glMatrixMode(GL_PROJECTION); glLoadIdentity(); glOrtho(0,global->sys_glWidth,0,global->sys_glHeight,-1,1); glMatrixMode(GL_MODELVIEW); glLoadIdentity(); glClear(GL_COLOR_BUFFER_BIT); glEnableClientState(GL_COLOR_ARRAY); glEnableClientState(GL_VERTEX_ARRAY); glEnableClientState(GL_TEXTURE_COORD_ARRAY); #if 0 #ifdef __ppc__ global->optMode = OPT_MODE_SCALAR_FRSQRTE; #ifdef __VEC__ if (IsAltiVecAvailable()) global->optMode = OPT_MODE_VECTOR_UNROLLED; #endif #else global->optMode = OPT_MODE_SCALAR_BASE; #endif #endif /* 0 */ } static void GLRenderScene(global_info_t *global, flurry_info_t *flurry, double b) { int i; flurry->dframe++; flurry->fOldTime = flurry->fTime; flurry->fTime = TimeInSecondsSinceStart() + flurry->flurryRandomSeed; flurry->fDeltaTime = flurry->fTime - flurry->fOldTime; flurry->drag = (float) pow(0.9965,flurry->fDeltaTime*85.0); UpdateStar(global, flurry, flurry->star); #ifdef DRAW_SPARKS glShadeModel(GL_SMOOTH); glEnable(GL_BLEND); glBlendFunc(GL_SRC_ALPHA,GL_ONE); #endif for (i=0;inumStreams;i++) { flurry->spark[i]->color[0]=1.0; flurry->spark[i]->color[1]=1.0; flurry->spark[i]->color[2]=1.0; flurry->spark[i]->color[2]=1.0; UpdateSpark(global, flurry, flurry->spark[i]); #ifdef DRAW_SPARKS DrawSpark(global, flurry, flurry->spark[i]); #endif } switch(global->optMode) { case OPT_MODE_SCALAR_BASE: UpdateSmoke_ScalarBase(global, flurry, flurry->s); break; #if 0 #ifdef __ppc__ case OPT_MODE_SCALAR_FRSQRTE: UpdateSmoke_ScalarFrsqrte(global, flurry, flurry->s); break; #endif #ifdef __VEC__ case OPT_MODE_VECTOR_SIMPLE: UpdateSmoke_VectorBase(global, flurry, flurry->s); break; case OPT_MODE_VECTOR_UNROLLED: UpdateSmoke_VectorUnrolled(global, flurry, flurry->s); break; #endif #endif /* 0 */ default: break; } /* glDisable(GL_BLEND); */ glEnable(GL_BLEND); glBlendFunc(GL_SRC_ALPHA,GL_ONE); glEnable(GL_TEXTURE_2D); switch(global->optMode) { case OPT_MODE_SCALAR_BASE: #if 0 #ifdef __ppc__ case OPT_MODE_SCALAR_FRSQRTE: #endif #endif /* 0 */ DrawSmoke_Scalar(global, flurry, flurry->s, b); break; #if 0 #ifdef __VEC__ case OPT_MODE_VECTOR_SIMPLE: case OPT_MODE_VECTOR_UNROLLED: DrawSmoke_Vector(global, flurry, flurry->s, b); break; #endif #endif /* 0 */ default: break; } glDisable(GL_TEXTURE_2D); } static void GLResize(global_info_t *global, float w, float h) { global->sys_glWidth = w; global->sys_glHeight = h; } /* new window size or exposure */ ENTRYPOINT void reshape_flurry(ModeInfo *mi, int width, int height) { global_info_t *global = flurry_info + MI_SCREEN(mi); glXMakeCurrent(MI_DISPLAY(mi), global->window, *(global->glx_context)); glViewport(0.0, 0.0, width, height); glMatrixMode(GL_PROJECTION); glLoadIdentity(); glOrtho(0, width, 0, height,-1,1); glMatrixMode(GL_MODELVIEW); glClear(GL_COLOR_BUFFER_BIT); glFlush(); GLResize(global, (float)width, (float)height); } ENTRYPOINT void init_flurry(ModeInfo * mi) { int screen = MI_SCREEN(mi); int i; global_info_t *global; enum { PRESET_INSANE = -1, PRESET_WATER = 0, PRESET_FIRE, PRESET_PSYCHEDELIC, PRESET_RGB, PRESET_BINARY, PRESET_CLASSIC, PRESET_MAX } preset_num; if (flurry_info == NULL) { OTSetup(); if ((flurry_info = (global_info_t *) calloc(MI_NUM_SCREENS(mi), sizeof (global_info_t))) == NULL) return; } global = &flurry_info[screen]; global->window = MI_WINDOW(mi); global->flurry = NULL; if (!preset_str || !*preset_str) preset_str = DEF_PRESET; if (!strcmp(preset_str, "random")) { preset_num = random() % PRESET_MAX; } else if (!strcmp(preset_str, "water")) { preset_num = PRESET_WATER; } else if (!strcmp(preset_str, "fire")) { preset_num = PRESET_FIRE; } else if (!strcmp(preset_str, "psychedelic")) { preset_num = PRESET_PSYCHEDELIC; } else if (!strcmp(preset_str, "rgb")) { preset_num = PRESET_RGB; } else if (!strcmp(preset_str, "binary")) { preset_num = PRESET_BINARY; } else if (!strcmp(preset_str, "classic")) { preset_num = PRESET_CLASSIC; } else if (!strcmp(preset_str, "insane")) { preset_num = PRESET_INSANE; } else { fprintf(stderr, "%s: unknown preset %s\n", progname, preset_str); exit(1); } switch (preset_num) { case PRESET_WATER: { for (i = 0; i < 9; i++) { flurry_info_t *flurry; flurry = new_flurry_info(global, 1, blueColorMode, 100.0, 2.0, 2.0); flurry->next = global->flurry; global->flurry = flurry; } break; } case PRESET_FIRE: { flurry_info_t *flurry; flurry = new_flurry_info(global, 12, slowCyclicColorMode, 10000.0, 0.2, 1.0); flurry->next = global->flurry; global->flurry = flurry; break; } case PRESET_PSYCHEDELIC: { flurry_info_t *flurry; flurry = new_flurry_info(global, 10, rainbowColorMode, 200.0, 2.0, 1.0); flurry->next = global->flurry; global->flurry = flurry; break; } case PRESET_RGB: { flurry_info_t *flurry; flurry = new_flurry_info(global, 3, redColorMode, 100.0, 0.8, 1.0); flurry->next = global->flurry; global->flurry = flurry; flurry = new_flurry_info(global, 3, greenColorMode, 100.0, 0.8, 1.0); flurry->next = global->flurry; global->flurry = flurry; flurry = new_flurry_info(global, 3, blueColorMode, 100.0, 0.8, 1.0); flurry->next = global->flurry; global->flurry = flurry; break; } case PRESET_BINARY: { flurry_info_t *flurry; flurry = new_flurry_info(global, 16, tiedyeColorMode, 1000.0, 0.5, 1.0); flurry->next = global->flurry; global->flurry = flurry; flurry = new_flurry_info(global, 16, tiedyeColorMode, 1000.0, 1.5, 1.0); flurry->next = global->flurry; global->flurry = flurry; break; } case PRESET_CLASSIC: { flurry_info_t *flurry; flurry = new_flurry_info(global, 5, tiedyeColorMode, 10000.0, 1.0, 1.0); flurry->next = global->flurry; global->flurry = flurry; break; } case PRESET_INSANE: { flurry_info_t *flurry; flurry = new_flurry_info(global, 64, tiedyeColorMode, 1000.0, 0.5, 0.5); flurry->next = global->flurry; global->flurry = flurry; break; } default: { fprintf(stderr, "%s: unknown preset %s\n", progname, preset_str); exit(1); } } if ((global->glx_context = init_GL(mi)) != NULL) { reshape_flurry(mi, MI_WIDTH(mi), MI_HEIGHT(mi)); GLSetupRC(global); } else { MI_CLEARWINDOW(mi); } } ENTRYPOINT void draw_flurry(ModeInfo * mi) { static int first = 1; static double oldFrameTime = -1; double newFrameTime; double deltaFrameTime = 0; double brite; GLfloat alpha; global_info_t *global = flurry_info + MI_SCREEN(mi); flurry_info_t *flurry; Display *display = MI_DISPLAY(mi); Window window = MI_WINDOW(mi); newFrameTime = currentTime(); if (oldFrameTime == -1) { /* special case the first frame -- clear to black */ alpha = 1.0; } else { /* * this clamps the speed at below 60fps and, here * at least, produces a reasonably accurate 50fps. * (probably part CPU speed and part scheduler). * * Flurry is designed to run at this speed; much higher * than that and the blending causes the display to * saturate, which looks really ugly. */ if (newFrameTime - oldFrameTime < 1/60.0) { usleep(MAX_(1,(int)(20000 * (newFrameTime - oldFrameTime)))); return; } deltaFrameTime = newFrameTime - oldFrameTime; alpha = 5.0 * deltaFrameTime; } oldFrameTime = newFrameTime; if (alpha > 0.2) alpha = 0.2; if (!global->glx_context) return; if (first) { MakeTexture(); first = 0; } glDrawBuffer(GL_BACK); glXMakeCurrent(display, window, *(global->glx_context)); glEnable(GL_BLEND); glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); glColor4f(0.0, 0.0, 0.0, alpha); glRectd(0, 0, global->sys_glWidth, global->sys_glHeight); brite = pow(deltaFrameTime,0.75) * 10; for (flurry = global->flurry; flurry; flurry=flurry->next) { GLRenderScene(global, flurry, brite * flurry->briteFactor); } if (mi->fps_p) do_fps (mi); glFinish(); glXSwapBuffers(display, window); } ENTRYPOINT void release_flurry(ModeInfo * mi) { if (flurry_info != NULL) { int screen; for (screen = 0; screen < MI_NUM_SCREENS(mi); screen++) { global_info_t *global = &flurry_info[screen]; flurry_info_t *flurry; if (global->glx_context) { glXMakeCurrent(MI_DISPLAY(mi), global->window, *(global->glx_context)); } for (flurry = global->flurry; flurry; flurry=flurry->next) { delete_flurry_info(flurry); } } (void) free((void *) flurry_info); flurry_info = NULL; } FreeAllGL(mi); } XSCREENSAVER_MODULE ("Flurry", flurry) #endif xscreensaver-5.36/hacks/glx/flurry-smoke.c000644 000767 000024 00000160246 12701612217 020634 0ustar00jwzstaff000000 000000 /* Copyright (c) 2002, Calum Robinson All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. * Neither the name of the author nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ /* Smoke.cpp: implementation of the Smoke class. */ #ifdef HAVE_CONFIG_H # include "config.h" #endif #include "flurry.h" #define MAXANGLES 16384 #define NOT_QUITE_DEAD 3 #define intensity 75000.0f; void InitSmoke(SmokeV *s) { int i; s->nextParticle = 0; s->nextSubParticle = 0; s->lastParticleTime = 0.25f; s->firstTime = 1; s->frame = 0; for (i=0;i<3;i++) { s->old[i] = RandFlt(-100.0, 100.0); } } void UpdateSmoke_ScalarBase(global_info_t *global, flurry_info_t *flurry, SmokeV *s) { int i,j,k; float sx = flurry->star->position[0]; float sy = flurry->star->position[1]; float sz = flurry->star->position[2]; double frameRate; double frameRateModifier; s->frame++; if(!s->firstTime) { /* release 12 puffs every frame */ if(flurry->fTime - s->lastParticleTime >= 1.0f / 121.0f) { float dx,dy,dz,deltax,deltay,deltaz; float f; float rsquared; float mag; dx = s->old[0] - sx; dy = s->old[1] - sy; dz = s->old[2] - sz; mag = 5.0f; deltax = (dx * mag); deltay = (dy * mag); deltaz = (dz * mag); for(i=0;inumStreams;i++) { float streamSpeedCoherenceFactor; s->p[s->nextParticle].delta[0].f[s->nextSubParticle] = deltax; s->p[s->nextParticle].delta[1].f[s->nextSubParticle] = deltay; s->p[s->nextParticle].delta[2].f[s->nextSubParticle] = deltaz; s->p[s->nextParticle].position[0].f[s->nextSubParticle] = sx; s->p[s->nextParticle].position[1].f[s->nextSubParticle] = sy; s->p[s->nextParticle].position[2].f[s->nextSubParticle] = sz; s->p[s->nextParticle].oldposition[0].f[s->nextSubParticle] = sx; s->p[s->nextParticle].oldposition[1].f[s->nextSubParticle] = sy; s->p[s->nextParticle].oldposition[2].f[s->nextSubParticle] = sz; streamSpeedCoherenceFactor = MAX_(0.0f,1.0f + RandBell(0.25f*incohesion)); dx = s->p[s->nextParticle].position[0].f[s->nextSubParticle] - flurry->spark[i]->position[0]; dy = s->p[s->nextParticle].position[1].f[s->nextSubParticle] - flurry->spark[i]->position[1]; dz = s->p[s->nextParticle].position[2].f[s->nextSubParticle] - flurry->spark[i]->position[2]; rsquared = (dx*dx+dy*dy+dz*dz); f = streamSpeed * streamSpeedCoherenceFactor; mag = f / (float) sqrt(rsquared); s->p[s->nextParticle].delta[0].f[s->nextSubParticle] -= (dx * mag); s->p[s->nextParticle].delta[1].f[s->nextSubParticle] -= (dy * mag); s->p[s->nextParticle].delta[2].f[s->nextSubParticle] -= (dz * mag); s->p[s->nextParticle].color[0].f[s->nextSubParticle] = flurry->spark[i]->color[0] * (1.0f + RandBell(colorIncoherence)); s->p[s->nextParticle].color[1].f[s->nextSubParticle] = flurry->spark[i]->color[1] * (1.0f + RandBell(colorIncoherence)); s->p[s->nextParticle].color[2].f[s->nextSubParticle] = flurry->spark[i]->color[2] * (1.0f + RandBell(colorIncoherence)); s->p[s->nextParticle].color[3].f[s->nextSubParticle] = 0.85f * (1.0f + RandBell(0.5f*colorIncoherence)); s->p[s->nextParticle].time.f[s->nextSubParticle] = flurry->fTime; s->p[s->nextParticle].dead.i[s->nextSubParticle] = 0; s->p[s->nextParticle].animFrame.i[s->nextSubParticle] = random()&63; s->nextSubParticle++; if (s->nextSubParticle==4) { s->nextParticle++; s->nextSubParticle=0; } if (s->nextParticle >= NUMSMOKEPARTICLES/4) { s->nextParticle = 0; s->nextSubParticle = 0; } } s->lastParticleTime = flurry->fTime; } } else { s->lastParticleTime = flurry->fTime; s->firstTime = 0; } for(i=0;i<3;i++) { s->old[i] = flurry->star->position[i]; } frameRate = ((double) flurry->dframe)/(flurry->fTime); frameRateModifier = 42.5f / frameRate; for(i=0;ip[i].dead.i[k]) { continue; } deltax = s->p[i].delta[0].f[k]; deltay = s->p[i].delta[1].f[k]; deltaz = s->p[i].delta[2].f[k]; for(j=0;jnumStreams;j++) { dx = s->p[i].position[0].f[k] - flurry->spark[j]->position[0]; dy = s->p[i].position[1].f[k] - flurry->spark[j]->position[1]; dz = s->p[i].position[2].f[k] - flurry->spark[j]->position[2]; rsquared = (dx*dx+dy*dy+dz*dz); f = (gravity/rsquared) * frameRateModifier; if ((((i*4)+k) % flurry->numStreams) == j) { f *= 1.0f + streamBias; } mag = f / (float) sqrt(rsquared); deltax -= (dx * mag); deltay -= (dy * mag); deltaz -= (dz * mag); } /* slow this particle down by flurry->drag */ deltax *= flurry->drag; deltay *= flurry->drag; deltaz *= flurry->drag; if((deltax*deltax+deltay*deltay+deltaz*deltaz) >= 25000000.0f) { s->p[i].dead.i[k] = 1; continue; } /* update the position */ s->p[i].delta[0].f[k] = deltax; s->p[i].delta[1].f[k] = deltay; s->p[i].delta[2].f[k] = deltaz; for(j=0;j<3;j++) { s->p[i].oldposition[j].f[k] = s->p[i].position[j].f[k]; s->p[i].position[j].f[k] += (s->p[i].delta[j].f[k])*flurry->fDeltaTime; } } } } #if 0 #ifdef __ppc__ void UpdateSmoke_ScalarFrsqrte(global_info_t *global, flurry_info_t *flurry, SmokeV *s) { int i,j,k; float sx = flurry->star->position[0]; float sy = flurry->star->position[1]; float sz = flurry->star->position[2]; double frameRate; double frameRateModifier; s->frame++; if(!s->firstTime) { /* release 12 puffs every frame */ if(flurry->fTime - s->lastParticleTime >= 1.0f / 121.0f) { float dx,dy,dz,deltax,deltay,deltaz; float f; float rsquared; float mag; dx = s->old[0] - sx; dy = s->old[1] - sy; dz = s->old[2] - sz; mag = 5.0f; deltax = (dx * mag); deltay = (dy * mag); deltaz = (dz * mag); for(i=0;inumStreams;i++) { float streamSpeedCoherenceFactor; s->p[s->nextParticle].delta[0].f[s->nextSubParticle] = deltax; s->p[s->nextParticle].delta[1].f[s->nextSubParticle] = deltay; s->p[s->nextParticle].delta[2].f[s->nextSubParticle] = deltaz; s->p[s->nextParticle].position[0].f[s->nextSubParticle] = sx; s->p[s->nextParticle].position[1].f[s->nextSubParticle] = sy; s->p[s->nextParticle].position[2].f[s->nextSubParticle] = sz; s->p[s->nextParticle].oldposition[0].f[s->nextSubParticle] = sx; s->p[s->nextParticle].oldposition[1].f[s->nextSubParticle] = sy; s->p[s->nextParticle].oldposition[2].f[s->nextSubParticle] = sz; streamSpeedCoherenceFactor = MAX_(0.0f,1.0f + RandBell(0.25f*incohesion)); dx = s->p[s->nextParticle].position[0].f[s->nextSubParticle] - flurry->spark[i]->position[0]; dy = s->p[s->nextParticle].position[1].f[s->nextSubParticle] - flurry->spark[i]->position[1]; dz = s->p[s->nextParticle].position[2].f[s->nextSubParticle] - flurry->spark[i]->position[2]; rsquared = (dx*dx+dy*dy+dz*dz); f = streamSpeed * streamSpeedCoherenceFactor; mag = f / (float) sqrt(rsquared); /* reciprocal square-root estimate replaced above divide and call to system sqrt() asm("frsqrte %0, %1" : "=f" (mag) : "f" (rsquared)); mag *= f; */ s->p[s->nextParticle].delta[0].f[s->nextSubParticle] -= (dx * mag); s->p[s->nextParticle].delta[1].f[s->nextSubParticle] -= (dy * mag); s->p[s->nextParticle].delta[2].f[s->nextSubParticle] -= (dz * mag); s->p[s->nextParticle].color[0].f[s->nextSubParticle] = flurry->spark[i]->color[0] * (1.0f + RandBell(colorIncoherence)); s->p[s->nextParticle].color[1].f[s->nextSubParticle] = flurry->spark[i]->color[1] * (1.0f + RandBell(colorIncoherence)); s->p[s->nextParticle].color[2].f[s->nextSubParticle] = flurry->spark[i]->color[2] * (1.0f + RandBell(colorIncoherence)); s->p[s->nextParticle].color[3].f[s->nextSubParticle] = 0.85f * (1.0f + RandBell(0.5f*colorIncoherence)); s->p[s->nextParticle].time.f[s->nextSubParticle] = flurry->fTime; s->p[s->nextParticle].dead.i[s->nextSubParticle] = 0; s->p[s->nextParticle].animFrame.i[s->nextSubParticle] = random()&63; s->nextSubParticle++; if (s->nextSubParticle==4) { s->nextParticle++; s->nextSubParticle=0; } if (s->nextParticle >= NUMSMOKEPARTICLES/4) { s->nextParticle = 0; s->nextSubParticle = 0; } } s->lastParticleTime = flurry->fTime; } } else { s->lastParticleTime = flurry->fTime; s->firstTime = 0; } for(i=0;i<3;i++) { s->old[i] = flurry->star->position[i]; } frameRate = ((double) flurry->dframe)/(flurry->fTime); frameRateModifier = 42.5f / frameRate; for(i=0;ip[i].dead.i[k]) { continue; } deltax = s->p[i].delta[0].f[k]; deltay = s->p[i].delta[1].f[k]; deltaz = s->p[i].delta[2].f[k]; for(j=0;jnumStreams;j++) { dx = s->p[i].position[0].f[k] - flurry->spark[j]->position[0]; dy = s->p[i].position[1].f[k] - flurry->spark[j]->position[1]; dz = s->p[i].position[2].f[k] - flurry->spark[j]->position[2]; rsquared = (dx*dx+dy*dy+dz*dz); /* asm("fres %0, %1" : "=f" (f) : "f" (rsquared)); f *= gravity*frameRateModifier; */ f = ( gravity * frameRateModifier ) / rsquared; if((((i*4)+k) % flurry->numStreams) == j) { f *= 1.0f + streamBias; } mag = f / (float) sqrt(rsquared); /* reciprocal square-root estimate replaced above divide and call to system sqrt() */ deltax -= (dx * mag); deltay -= (dy * mag); deltaz -= (dz * mag); } /* slow this particle down by flurry->drag */ deltax *= flurry->drag; deltay *= flurry->drag; deltaz *= flurry->drag; if((deltax*deltax+deltay*deltay+deltaz*deltaz) >= 25000000.0f) { s->p[i].dead.i[k] = 1; continue; } /* update the position */ s->p[i].delta[0].f[k] = deltax; s->p[i].delta[1].f[k] = deltay; s->p[i].delta[2].f[k] = deltaz; for(j=0;j<3;j++) { s->p[i].oldposition[j].f[k] = s->p[i].position[j].f[k]; s->p[i].position[j].f[k] += (s->p[i].delta[j].f[k])*flurry->fDeltaTime; } } } } #endif #ifdef __VEC__ void UpdateSmoke_VectorBase(global_info_t *global, flurry_info_t *flurry, SmokeV *s) { unsigned int i,j; float sx = flurry->star->position[0]; float sy = flurry->star->position[1]; float sz = flurry->star->position[2]; double frameRate; floatToVector frameRateModifier; floatToVector gravityV; floatToVector dragV; floatToVector deltaTimeV; const vector float deadConst = (vector float) (25000000.0,25000000.0,25000000.0,25000000.0); const vector float zero = (vector float)(0.0, 0.0, 0.0, 0.0); const vector float biasConst = (vector float)(streamBias); gravityV.f[0] = gravity; gravityV.v = (vector float) vec_splat((vector unsigned int)gravityV.v, 0); dragV.f[0] = flurry->drag; dragV.v = (vector float) vec_splat((vector unsigned int)dragV.v, 0); deltaTimeV.f[0] = flurry->fDeltaTime; deltaTimeV.v = (vector float) vec_splat((vector unsigned int)deltaTimeV.v, 0); s->frame++; if(!s->firstTime) { /* release 12 puffs every frame */ if(flurry->fTime - s->lastParticleTime >= 1.0f / 121.0f) { float dx,dy,dz,deltax,deltay,deltaz; float f; float rsquared; float mag; dx = s->old[0] - sx; dy = s->old[1] - sy; dz = s->old[2] - sz; mag = 5.0f; deltax = (dx * mag); deltay = (dy * mag); deltaz = (dz * mag); for(i=0;inumStreams;i++) { float streamSpeedCoherenceFactor; s->p[s->nextParticle].delta[0].f[s->nextSubParticle] = deltax; s->p[s->nextParticle].delta[1].f[s->nextSubParticle] = deltay; s->p[s->nextParticle].delta[2].f[s->nextSubParticle] = deltaz; s->p[s->nextParticle].position[0].f[s->nextSubParticle] = sx; s->p[s->nextParticle].position[1].f[s->nextSubParticle] = sy; s->p[s->nextParticle].position[2].f[s->nextSubParticle] = sz; s->p[s->nextParticle].oldposition[0].f[s->nextSubParticle] = sx; s->p[s->nextParticle].oldposition[1].f[s->nextSubParticle] = sy; s->p[s->nextParticle].oldposition[2].f[s->nextSubParticle] = sz; streamSpeedCoherenceFactor = MAX_(0.0f,1.0f + RandBell(0.25f*incohesion)); dx = s->p[s->nextParticle].position[0].f[s->nextSubParticle] - flurry->spark[i]->position[0]; dy = s->p[s->nextParticle].position[1].f[s->nextSubParticle] - flurry->spark[i]->position[1]; dz = s->p[s->nextParticle].position[2].f[s->nextSubParticle] - flurry->spark[i]->position[2]; rsquared = (dx*dx+dy*dy+dz*dz); f = streamSpeed * streamSpeedCoherenceFactor; mag = f / (float) sqrt(rsquared); /* asm("frsqrte %0, %1" : "=f" (mag) : "f" (rsquared)); mag *= f; */ s->p[s->nextParticle].delta[0].f[s->nextSubParticle] -= (dx * mag); s->p[s->nextParticle].delta[1].f[s->nextSubParticle] -= (dy * mag); s->p[s->nextParticle].delta[2].f[s->nextSubParticle] -= (dz * mag); s->p[s->nextParticle].color[0].f[s->nextSubParticle] = flurry->spark[i]->color[0] * (1.0f + RandBell(colorIncoherence)); s->p[s->nextParticle].color[1].f[s->nextSubParticle] = flurry->spark[i]->color[1] * (1.0f + RandBell(colorIncoherence)); s->p[s->nextParticle].color[2].f[s->nextSubParticle] = flurry->spark[i]->color[2] * (1.0f + RandBell(colorIncoherence)); s->p[s->nextParticle].color[3].f[s->nextSubParticle] = 0.85f * (1.0f + RandBell(0.5f*colorIncoherence)); s->p[s->nextParticle].time.f[s->nextSubParticle] = flurry->fTime; s->p[s->nextParticle].dead.i[s->nextSubParticle] = 0; s->p[s->nextParticle].animFrame.i[s->nextSubParticle] = random()&63; s->nextSubParticle++; if (s->nextSubParticle==4) { s->nextParticle++; s->nextSubParticle=0; } if (s->nextParticle >= NUMSMOKEPARTICLES/4) { s->nextParticle = 0; s->nextSubParticle = 0; } } s->lastParticleTime = flurry->fTime; } } else { s->lastParticleTime = flurry->fTime; s->firstTime = 0; } for(i=0;i<3;i++) { s->old[i] = flurry->star->position[i]; } frameRate = ((double) flurry->dframe)/(flurry->fTime); frameRateModifier.f[0] = 42.5f / frameRate; frameRateModifier.v = (vector float) vec_splat((vector unsigned int)frameRateModifier.v, 0); frameRateModifier.v = vec_madd(frameRateModifier.v, gravityV.v, zero); for(i=0;ip[i+4])), 0x00020200, 3); if (vec_all_ne(s->p[i].dead.v, (vector unsigned int)(0))) { continue; } deltax = s->p[i].delta[0].v; deltay = s->p[i].delta[1].v; deltaz = s->p[i].delta[2].v; mod.i[0] = (i<<2 + 0) % flurry->numStreams; if(mod.i[0]+1 == flurry->numStreams) { mod.i[1] = 0; } else { mod.i[1] = mod.i[0]+1; } if(mod.i[1]+1 == flurry->numStreams) { mod.i[2] = 0; } else { mod.i[2] = mod.i[1]+1; } if(mod.i[2]+1 == flurry->numStreams) { mod.i[3] = 0; } else { mod.i[3] = mod.i[2]+1; } jVec = vec_xor(jVec, jVec); vec_dst( &flurry->spark[0]->position[0], 0x16020160, 3 ); for(j=0; jnumStreams;j++) { vector float ip0, ip1 = (vector float)(0.0), ip2; vector float dx, dy, dz; vector float rsquared, f; vector float one_over_rsquared; vector float biasTemp; vector float mag; vector bool int biasOr; ip0 = vec_ld(0, flurry->spark[j]->position); if(((int)(flurry->spark[j]->position) & 0xF)>=8) { ip1 = vec_ld(16, flurry->spark[j]->position); } ip0 = vec_perm(ip0, ip1, vec_lvsl(0, flurry->spark[j]->position)); ip1 = (vector float) vec_splat((vector unsigned int)ip0, 1); ip2 = (vector float) vec_splat((vector unsigned int)ip0, 2); ip0 = (vector float) vec_splat((vector unsigned int)ip0, 0); dx = vec_sub(s->p[i].position[0].v, ip0); dy = vec_sub(s->p[i].position[1].v, ip1); dz = vec_sub(s->p[i].position[2].v, ip2); rsquared = vec_madd(dx, dx, zero); rsquared = vec_madd(dy, dy, rsquared); rsquared = vec_madd(dz, dz, rsquared); biasOr = vec_cmpeq(jVec, mod.v); biasTemp = vec_add(vec_and(biasOr, biasConst), (vector float)(1.0)); f = vec_madd(biasTemp, frameRateModifier.v, zero); one_over_rsquared = vec_re(rsquared); f = vec_madd(f, one_over_rsquared, zero); mag = vec_rsqrte(rsquared); mag = vec_madd(mag, f, zero); deltax = vec_nmsub(dx, mag, deltax); deltay = vec_nmsub(dy, mag, deltay); deltaz = vec_nmsub(dz, mag, deltaz); jVec = vec_add(jVec, (vector unsigned int)(1)); } /* slow this particle down by flurry->drag */ deltax = vec_madd(deltax, dragV.v, zero); deltay = vec_madd(deltay, dragV.v, zero); deltaz = vec_madd(deltaz, dragV.v, zero); distTemp = vec_madd(deltax, deltax, zero); distTemp = vec_madd(deltay, deltay, distTemp); distTemp = vec_madd(deltaz, deltaz, distTemp); deadTemp = (vector unsigned int) vec_cmpge(distTemp, deadConst); deadTemp = vec_and((vector unsigned int)vec_splat_u32(1), deadTemp); s->p[i].dead.v = vec_or(s->p[i].dead.v, deadTemp); if (vec_all_ne(s->p[i].dead.v, (vector unsigned int)(0))) { continue; } /* update the position */ s->p[i].delta[0].v = deltax; s->p[i].delta[1].v = deltay; s->p[i].delta[2].v = deltaz; for(j=0;j<3;j++) { s->p[i].oldposition[j].v = s->p[i].position[j].v; s->p[i].position[j].v = vec_madd(s->p[i].delta[j].v, deltaTimeV.v, s->p[i].position[j].v); } } } void UpdateSmoke_VectorUnrolled(global_info_t *info, SmokeV *s) { unsigned int i,j; float sx = flurry->star->position[0]; float sy = flurry->star->position[1]; float sz = flurry->star->position[2]; double frameRate; floatToVector frameRateModifier; floatToVector gravityV; floatToVector dragV; floatToVector deltaTimeV; const vector float deadConst = (vector float) (25000000.0,25000000.0,25000000.0,25000000.0); const vector float zero = (vector float)(0.0, 0.0, 0.0, 0.0); const vector float biasConst = (vector float)(streamBias); gravityV.f[0] = gravity; gravityV.v = (vector float) vec_splat((vector unsigned int)gravityV.v, 0); dragV.f[0] = flurry->drag; dragV.v = (vector float) vec_splat((vector unsigned int)dragV.v, 0); deltaTimeV.f[0] = flurry->fDeltaTime; deltaTimeV.v = (vector float) vec_splat((vector unsigned int)deltaTimeV.v, 0); s->frame++; if(!s->firstTime) { /* release 12 puffs every frame */ if(flurry->fTime - s->lastParticleTime >= 1.0f / 121.0f) { float dx,dy,dz,deltax,deltay,deltaz; float f; float rsquared; float mag; dx = s->old[0] - sx; dy = s->old[1] - sy; dz = s->old[2] - sz; mag = 5.0f; deltax = (dx * mag); deltay = (dy * mag); deltaz = (dz * mag); for(i=0;inumStreams;i++) { float streamSpeedCoherenceFactor; s->p[s->nextParticle].delta[0].f[s->nextSubParticle] = deltax; s->p[s->nextParticle].delta[1].f[s->nextSubParticle] = deltay; s->p[s->nextParticle].delta[2].f[s->nextSubParticle] = deltaz; s->p[s->nextParticle].position[0].f[s->nextSubParticle] = sx; s->p[s->nextParticle].position[1].f[s->nextSubParticle] = sy; s->p[s->nextParticle].position[2].f[s->nextSubParticle] = sz; s->p[s->nextParticle].oldposition[0].f[s->nextSubParticle] = sx; s->p[s->nextParticle].oldposition[1].f[s->nextSubParticle] = sy; s->p[s->nextParticle].oldposition[2].f[s->nextSubParticle] = sz; streamSpeedCoherenceFactor = MAX_(0.0f,1.0f + RandBell(0.25f*incohesion)); dx = s->p[s->nextParticle].position[0].f[s->nextSubParticle] - flurry->spark[i]->position[0]; dy = s->p[s->nextParticle].position[1].f[s->nextSubParticle] - flurry->spark[i]->position[1]; dz = s->p[s->nextParticle].position[2].f[s->nextSubParticle] - flurry->spark[i]->position[2]; rsquared = (dx*dx+dy*dy+dz*dz); f = streamSpeed * streamSpeedCoherenceFactor; mag = f / (float) sqrt(rsquared); /* asm("frsqrte %0, %1" : "=f" (mag) : "f" (rsquared)); mag *= f; */ s->p[s->nextParticle].delta[0].f[s->nextSubParticle] -= (dx * mag); s->p[s->nextParticle].delta[1].f[s->nextSubParticle] -= (dy * mag); s->p[s->nextParticle].delta[2].f[s->nextSubParticle] -= (dz * mag); s->p[s->nextParticle].color[0].f[s->nextSubParticle] = flurry->spark[i]->color[0] * (1.0f + RandBell(colorIncoherence)); s->p[s->nextParticle].color[1].f[s->nextSubParticle] = flurry->spark[i]->color[1] * (1.0f + RandBell(colorIncoherence)); s->p[s->nextParticle].color[2].f[s->nextSubParticle] = flurry->spark[i]->color[2] * (1.0f + RandBell(colorIncoherence)); s->p[s->nextParticle].color[3].f[s->nextSubParticle] = 0.85f * (1.0f + RandBell(0.5f*colorIncoherence)); s->p[s->nextParticle].time.f[s->nextSubParticle] = flurry->fTime; s->p[s->nextParticle].dead.i[s->nextSubParticle] = 0; s->p[s->nextParticle].animFrame.i[s->nextSubParticle] = random()&63; s->nextSubParticle++; if (s->nextSubParticle==4) { s->nextParticle++; s->nextSubParticle=0; } if (s->nextParticle >= NUMSMOKEPARTICLES/4) { s->nextParticle = 0; s->nextSubParticle = 0; } } s->lastParticleTime = flurry->fTime; } } else { s->lastParticleTime = flurry->fTime; s->firstTime = 0; } for(i=0;i<3;i++) { s->old[i] = flurry->star->position[i]; } frameRate = ((double) flurry->dframe)/(flurry->fTime); frameRateModifier.f[0] = 42.5f / frameRate; frameRateModifier.v = (vector float) vec_splat((vector unsigned int)frameRateModifier.v, 0); frameRateModifier.v = vec_madd(frameRateModifier.v, gravityV.v, zero); for(i=0;ip[i+4])), 0x00020200, 3); if (vec_all_ne(s->p[i].dead.v, (vector unsigned int)(0))) { continue; } deltax = s->p[i].delta[0].v; deltay = s->p[i].delta[1].v; deltaz = s->p[i].delta[2].v; mod.i[0] = (i<<2 + 0) % flurry->numStreams; if(mod.i[0]+1 == flurry->numStreams) { mod.i[1] = 0; } else { mod.i[1] = mod.i[0]+1; } if(mod.i[1]+1 == flurry->numStreams) { mod.i[2] = 0; } else { mod.i[2] = mod.i[1]+1; } if(mod.i[2]+1 == flurry->numStreams) { mod.i[3] = 0; } else { mod.i[3] = mod.i[2]+1; } jVec = vec_xor(jVec, jVec); vec_dst( &flurry->spark[0]->position[0], 0x16020160, 3 ); for(j=0; j + 3 < flurry->numStreams;j+=4) { vector float dxa, dya, dza; vector float dxb, dyb, dzb; vector float dxc, dyc, dzc; vector float dxd, dyd, dzd; vector float ip0a, ip1a; vector float ip0b, ip1b; vector float ip0c, ip1c; vector float ip0d, ip1d; vector float rsquaredA; vector float rsquaredB; vector float rsquaredC; vector float rsquaredD; vector float fA, fB, fC, fD; vector float biasTempA; vector float biasTempB; vector float biasTempC; vector float biasTempD; vector float magA; vector float magB; vector float magC; vector float magD; vector float one_over_rsquaredA; vector float one_over_rsquaredB; vector float one_over_rsquaredC; vector float one_over_rsquaredD; vector bool int biasOrA,biasOrB,biasOrC,biasOrD; /* load vectors */ ip0a = vec_ld(0, flurry->spark[j]->position); ip0b = vec_ld(0, flurry->spark[j+1]->position); ip0c = vec_ld(0, flurry->spark[j+2]->position); ip0d = vec_ld(0, flurry->spark[j+3]->position); ip1a = vec_ld( 12, flurry->spark[j]->position ); ip1b = vec_ld( 12, flurry->spark[j+1]->position ); ip1c = vec_ld( 12, flurry->spark[j+2]->position ); ip1d = vec_ld( 12, flurry->spark[j+3]->position ); /* align them */ ip0a = vec_perm(ip0a, ip1a, vec_lvsl(0, flurry->spark[j]->position)); ip0b = vec_perm(ip0b, ip1b, vec_lvsl(0, flurry->spark[j+1]->position)); ip0c = vec_perm(ip0c, ip1c, vec_lvsl(0, flurry->spark[j+2]->position)); ip0d = vec_perm(ip0d, ip1d, vec_lvsl(0, flurry->spark[j+3]->position)); dxa = vec_splat( ip0a, 0 ); dxb = vec_splat( ip0b, 0 ); dxc = vec_splat( ip0c, 0 ); dxd = vec_splat( ip0d, 0 ); dxa = vec_sub( s->p[i].position[0].v, dxa ); dxb = vec_sub( s->p[i].position[0].v, dxb ); dxc = vec_sub( s->p[i].position[0].v, dxc ); dxd = vec_sub( s->p[i].position[0].v, dxd ); dya = vec_splat( ip0a, 1 ); dyb = vec_splat( ip0b, 1 ); dyc = vec_splat( ip0c, 1 ); dyd = vec_splat( ip0d, 1 ); dya = vec_sub( s->p[i].position[1].v, dya ); dyb = vec_sub( s->p[i].position[1].v, dyb ); dyc = vec_sub( s->p[i].position[1].v, dyc ); dyd = vec_sub( s->p[i].position[1].v, dyd ); dza = vec_splat( ip0a, 2 ); dzb = vec_splat( ip0b, 2 ); dzc = vec_splat( ip0c, 2 ); dzd = vec_splat( ip0d, 2 ); dza = vec_sub( s->p[i].position[2].v, dza ); dzb = vec_sub( s->p[i].position[2].v, dzb ); dzc = vec_sub( s->p[i].position[2].v, dzc ); dzd = vec_sub( s->p[i].position[2].v, dzd ); rsquaredA = vec_madd( dxa, dxa, zero ); rsquaredB = vec_madd( dxb, dxb, zero ); rsquaredC = vec_madd( dxc, dxc, zero ); rsquaredD = vec_madd( dxd, dxd, zero ); rsquaredA = vec_madd( dya, dya, rsquaredA ); rsquaredB = vec_madd( dyb, dyb, rsquaredB ); rsquaredC = vec_madd( dyc, dyc, rsquaredC ); rsquaredD = vec_madd( dyd, dyd, rsquaredD ); rsquaredA = vec_madd( dza, dza, rsquaredA ); rsquaredB = vec_madd( dzb, dzb, rsquaredB ); rsquaredC = vec_madd( dzc, dzc, rsquaredC ); rsquaredD = vec_madd( dzd, dzd, rsquaredD ); biasOrA = vec_cmpeq( jVec, mod.v ); jVec = vec_add(jVec, intOne); biasOrB = vec_cmpeq( jVec, mod.v ); jVec = vec_add(jVec, intOne); biasOrC = vec_cmpeq( jVec, mod.v ); jVec = vec_add(jVec, intOne); biasOrD = vec_cmpeq( jVec, mod.v ); jVec = vec_add(jVec, intOne); biasTempA = vec_add( vec_and( biasOrA, biasConst), floatOne); biasTempB = vec_add( vec_and( biasOrB, biasConst), floatOne); biasTempC = vec_add( vec_and( biasOrC, biasConst), floatOne); biasTempD = vec_add( vec_and( biasOrD, biasConst), floatOne); fA = vec_madd( biasTempA, frameRateModifier.v, zero); fB = vec_madd( biasTempB, frameRateModifier.v, zero); fC = vec_madd( biasTempC, frameRateModifier.v, zero); fD = vec_madd( biasTempD, frameRateModifier.v, zero); one_over_rsquaredA = vec_re( rsquaredA ); one_over_rsquaredB = vec_re( rsquaredB ); one_over_rsquaredC = vec_re( rsquaredC ); one_over_rsquaredD = vec_re( rsquaredD ); fA = vec_madd( fA, one_over_rsquaredA, zero); fB = vec_madd( fB, one_over_rsquaredB, zero); fC = vec_madd( fC, one_over_rsquaredC, zero); fD = vec_madd( fD, one_over_rsquaredD, zero); magA = vec_rsqrte( rsquaredA ); magB = vec_rsqrte( rsquaredB ); magC = vec_rsqrte( rsquaredC ); magD = vec_rsqrte( rsquaredD ); magA = vec_madd( magA, fA, zero ); magB = vec_madd( magB, fB, zero ); magC = vec_madd( magC, fC, zero ); magD = vec_madd( magD, fD, zero ); deltax = vec_nmsub( dxa, magA, deltax ); deltay = vec_nmsub( dya, magA, deltay ); deltaz = vec_nmsub( dza, magA, deltaz ); deltax = vec_nmsub( dxb, magB, deltax ); deltay = vec_nmsub( dyb, magB, deltay ); deltaz = vec_nmsub( dzb, magB, deltaz ); deltax = vec_nmsub( dxc, magC, deltax ); deltay = vec_nmsub( dyc, magC, deltay ); deltaz = vec_nmsub( dzc, magC, deltaz ); deltax = vec_nmsub( dxd, magD, deltax ); deltay = vec_nmsub( dyd, magD, deltay ); deltaz = vec_nmsub( dzd, magD, deltaz ); } for(;jnumStreams;j++) { vector float ip0, ip1 = (vector float)(0.0), ip2; vector float dx, dy, dz; vector float rsquared, f; vector float one_over_rsquared; vector float biasTemp; vector float mag; vector bool int biasOr; ip0 = vec_ld(0, flurry->spark[j]->position); if(((int)(flurry->spark[j]->position) & 0xF)>=8) { ip1 = vec_ld(16, flurry->spark[j]->position); } ip0 = vec_perm(ip0, ip1, vec_lvsl(0, flurry->spark[j]->position)); ip1 = (vector float) vec_splat((vector unsigned int)ip0, 1); ip2 = (vector float) vec_splat((vector unsigned int)ip0, 2); ip0 = (vector float) vec_splat((vector unsigned int)ip0, 0); dx = vec_sub(s->p[i].position[0].v, ip0); dy = vec_sub(s->p[i].position[1].v, ip1); dz = vec_sub(s->p[i].position[2].v, ip2); rsquared = vec_madd(dx, dx, zero); rsquared = vec_madd(dy, dy, rsquared); rsquared = vec_madd(dz, dz, rsquared); biasOr = vec_cmpeq(jVec, mod.v); biasTemp = vec_add(vec_and(biasOr, biasConst), (vector float)(1.0)); f = vec_madd(biasTemp, frameRateModifier.v, zero); one_over_rsquared = vec_re(rsquared); f = vec_madd(f, one_over_rsquared, zero); mag = vec_rsqrte(rsquared); mag = vec_madd(mag, f, zero); deltax = vec_nmsub(dx, mag, deltax); deltay = vec_nmsub(dy, mag, deltay); deltaz = vec_nmsub(dz, mag, deltaz); jVec = vec_add(jVec, (vector unsigned int)(1)); } /* slow this particle down by flurry->drag */ deltax = vec_madd(deltax, dragV.v, zero); deltay = vec_madd(deltay, dragV.v, zero); deltaz = vec_madd(deltaz, dragV.v, zero); distTemp = vec_madd(deltax, deltax, zero); distTemp = vec_madd(deltay, deltay, distTemp); distTemp = vec_madd(deltaz, deltaz, distTemp); deadTemp = (vector unsigned int) vec_cmpge(distTemp, deadConst); deadTemp = vec_and((vector unsigned int)vec_splat_u32(1), deadTemp); s->p[i].dead.v = vec_or(s->p[i].dead.v, deadTemp); if (vec_all_ne(s->p[i].dead.v, (vector unsigned int)(0))) { continue; } /* update the position */ s->p[i].delta[0].v = deltax; s->p[i].delta[1].v = deltay; s->p[i].delta[2].v = deltaz; for(j=0;j<3;j++) { s->p[i].oldposition[j].v = s->p[i].position[j].v; s->p[i].position[j].v = vec_madd(s->p[i].delta[j].v, deltaTimeV.v, s->p[i].position[j].v); } } } #endif #endif /* 0 */ void DrawSmoke_Scalar(global_info_t *global, flurry_info_t *flurry, SmokeV *s, float brightness) { int svi = 0; int sci = 0; int sti = 0; int si = 0; float width; float sx,sy; float u0,v0,u1,v1; float w,z; float screenRatio = global->sys_glWidth / 1024.0f; float hslash2 = global->sys_glHeight * 0.5f; float wslash2 = global->sys_glWidth * 0.5f; int i,k; width = (streamSize+2.5f*flurry->streamExpansion) * screenRatio; for (i=0;ip[i].dead.i[k]) { continue; } thisWidth = (streamSize + (flurry->fTime - s->p[i].time.f[k])*flurry->streamExpansion) * screenRatio; if (thisWidth >= width) { s->p[i].dead.i[k] = 1; continue; } z = s->p[i].position[2].f[k]; sx = s->p[i].position[0].f[k] * global->sys_glWidth / z + wslash2; sy = s->p[i].position[1].f[k] * global->sys_glWidth / z + hslash2; oldz = s->p[i].oldposition[2].f[k]; if (sx > global->sys_glWidth+50.0f || sx < -50.0f || sy > global->sys_glHeight+50.0f || sy < -50.0f || z < 25.0f || oldz < 25.0f) { continue; } w = MAX_(1.0f,thisWidth/z); { float oldx = s->p[i].oldposition[0].f[k]; float oldy = s->p[i].oldposition[1].f[k]; float oldscreenx = (oldx * global->sys_glWidth / oldz) + wslash2; float oldscreeny = (oldy * global->sys_glWidth / oldz) + hslash2; float dx = (sx-oldscreenx); float dy = (sy-oldscreeny); float d = FastDistance2D(dx, dy); float sm, os, ow; if (d) { sm = w/d; } else { sm = 0.0f; } ow = MAX_(1.0f,thisWidth/oldz); if (d) { os = ow/d; } else { os = 0.0f; } { floatToVector cmv; float cm; float m = 1.0f + sm; float dxs = dx*sm; float dys = dy*sm; float dxos = dx*os; float dyos = dy*os; float dxm = dx*m; float dym = dy*m; s->p[i].animFrame.i[k]++; if (s->p[i].animFrame.i[k] >= 64) { s->p[i].animFrame.i[k] = 0; } u0 = (s->p[i].animFrame.i[k]& 7) * 0.125f; v0 = (s->p[i].animFrame.i[k]>>3) * 0.125f; u1 = u0 + 0.125f; v1 = v0 + 0.125f; cm = (1.375f - thisWidth/width); if (s->p[i].dead.i[k] == 3) { cm *= 0.125f; s->p[i].dead.i[k] = 1; } si++; cm *= brightness; cmv.f[0] = s->p[i].color[0].f[k]*cm; cmv.f[1] = s->p[i].color[1].f[k]*cm; cmv.f[2] = s->p[i].color[2].f[k]*cm; cmv.f[3] = s->p[i].color[3].f[k]*cm; #if 0 /* MDT we can't use vectors in the Scalar routine */ s->seraphimColors[sci++].v = cmv.v; s->seraphimColors[sci++].v = cmv.v; s->seraphimColors[sci++].v = cmv.v; s->seraphimColors[sci++].v = cmv.v; #else { int ii, jj; for (jj = 0; jj < 4; jj++) { for (ii = 0; ii < 4; ii++) { s->seraphimColors[sci].f[ii] = cmv.f[ii]; } sci += 1; } } #endif s->seraphimTextures[sti++] = u0; s->seraphimTextures[sti++] = v0; s->seraphimTextures[sti++] = u0; s->seraphimTextures[sti++] = v1; s->seraphimTextures[sti++] = u1; s->seraphimTextures[sti++] = v1; s->seraphimTextures[sti++] = u1; s->seraphimTextures[sti++] = v0; s->seraphimVertices[svi].f[0] = sx+dxm-dys; s->seraphimVertices[svi].f[1] = sy+dym+dxs; s->seraphimVertices[svi].f[2] = sx+dxm+dys; s->seraphimVertices[svi].f[3] = sy+dym-dxs; svi++; s->seraphimVertices[svi].f[0] = oldscreenx-dxm+dyos; s->seraphimVertices[svi].f[1] = oldscreeny-dym-dxos; s->seraphimVertices[svi].f[2] = oldscreenx-dxm-dyos; s->seraphimVertices[svi].f[3] = oldscreeny-dym+dxos; svi++; } } } } glColorPointer(4,GL_FLOAT,0,s->seraphimColors); glVertexPointer(2,GL_FLOAT,0,s->seraphimVertices); glTexCoordPointer(2,GL_FLOAT,0,s->seraphimTextures); glDrawArrays(GL_QUADS,0,si*4); } #if 0 #ifdef __VEC__ void DrawSmoke_Vector(global_info_t *global, flurry_info_t *flurry, SmokeV *s, float brightness) { const vector float zero = (vector float)(0.0); int svi = 0; int sci = 0; int sti = 0; int si = 0; floatToVector width; vector float sx,sy; floatToVector u0,v0,u1,v1; vector float one_over_z; vector float w; floatToVector z; float screenRatio = global->sys_glWidth / 1024.0f; float hslash2 = global->sys_glHeight * 0.5f; float wslash2 = global->sys_glWidth * 0.5f; int i,kk; floatToVector briteV, fTimeV, expansionV, screenRatioV, hslash2V, wslash2V, streamSizeV; floatToVector glWidthV; floatToVector cm; vector float cmv[4]; vector float svec[4], ovec[4]; vector float oldscreenx, oldscreeny; vector float sm; vector float frameAnd7; vector float frameShift3; vector float one_over_width; vector float dx, dy; vector float os; vector unsigned int vSi = vec_splat_u32(0); const vector float eighth = (vector float)(0.125); float glWidth50 = global->sys_glWidth + 50.0f; float glHeight50 = global->sys_glHeight + 50.0f; vector float vGLWidth50, vGLHeight50; unsigned int blitBool; vec_dst((int *)(&(s->p[0])), 0x00020200, 2); { vector unsigned char permute1 = vec_lvsl( 0, &glWidth50 ); vector unsigned char permute2 = vec_lvsl( 0, &glHeight50 ); permute1 = (vector unsigned char) vec_splat( (vector unsigned int) permute1, 0 ); permute2 = (vector unsigned char) vec_splat( (vector unsigned int) permute2, 0 ); vGLWidth50 = vec_lde( 0, &glWidth50 ); vGLHeight50 = vec_lde( 0, &glHeight50 ); vGLWidth50 = vec_perm( vGLWidth50, vGLWidth50, permute1 ); vGLHeight50 = vec_perm( vGLHeight50, vGLHeight50, permute2 ); } width.f[0] = (streamSize+2.5f*flurry->streamExpansion) * screenRatio; width.v = (vector float) vec_splat((vector unsigned int)width.v, 0); briteV.f[0] = brightness; briteV.v = (vector float) vec_splat((vector unsigned int)briteV.v, 0); fTimeV.f[0] = (float) flurry->fTime; fTimeV.v = (vector float) vec_splat((vector unsigned int)fTimeV.v, 0); expansionV.f[0] = flurry->streamExpansion; expansionV.v = (vector float) vec_splat((vector unsigned int)expansionV.v, 0); screenRatioV.f[0] = screenRatio; screenRatioV.v = (vector float) vec_splat((vector unsigned int)screenRatioV.v, 0); hslash2V.f[0] = hslash2; hslash2V.v = (vector float) vec_splat((vector unsigned int)hslash2V.v, 0); wslash2V.f[0] = wslash2; wslash2V.v = (vector float) vec_splat((vector unsigned int)wslash2V.v, 0); streamSizeV.f[0] = streamSize; streamSizeV.v = (vector float) vec_splat((vector unsigned int)streamSizeV.v, 0); glWidthV.f[0] = global->sys_glWidth; glWidthV.v = (vector float) vec_splat((vector unsigned int)glWidthV.v, 0); for (i=0;ip[i+4])), 0x00020200, 2); if (vec_all_eq(s->p[i].dead.v, (vector unsigned int)(1))) continue; blitBool = 0; /* keep track of particles that actually need to be drawn */ thisWidth = vec_sub(fTimeV.v, s->p[i].time.v); thisWidth = vec_madd(thisWidth, expansionV.v, streamSizeV.v); thisWidth = vec_madd(thisWidth, screenRatioV.v, zero); z.v = s->p[i].position[2].v; one_over_z = vec_re(z.v); sx = vec_madd(s->p[i].position[0].v, glWidthV.v, zero); sx = vec_madd(sx, one_over_z, wslash2V.v); sy = vec_madd(s->p[i].position[1].v, glWidthV.v, zero); sy = vec_madd(sy, one_over_z, hslash2V.v); oldz = s->p[i].oldposition[2].v; w = vec_max((vector float)(1.0), vec_madd(thisWidth, one_over_z, zero)); oldx = s->p[i].oldposition[0].v; oldy = s->p[i].oldposition[1].v; one_over_oldz = vec_re(oldz); oldscreenx = vec_madd(oldx, glWidthV.v, zero); oldscreenx = vec_madd(oldscreenx, one_over_oldz, wslash2V.v); oldscreeny = vec_madd(oldy, glWidthV.v, zero); oldscreeny = vec_madd(oldscreeny, one_over_oldz, hslash2V.v); dx = vec_sub(sx,oldscreenx); dy = vec_sub(sy,oldscreeny); xabs = vec_abs(dx); yabs = vec_abs(dy); mn = vec_min(xabs,yabs); d = vec_add(xabs,yabs); d = vec_madd(mn, (vector float)(-0.6875), d); ow = vec_max((vector float)(1.0), vec_madd(thisWidth, one_over_oldz, zero)); one_over_d = vec_re(d); dnz = vec_cmpgt(d, zero); sm = vec_madd(w, one_over_d, zero); sm = vec_and(sm, dnz); os = vec_madd(ow, one_over_d, zero); os = vec_and(os, dnz); { intToVector tempMask; vector bool int mask = vec_cmpeq( s->p[i].dead.v, vec_splat_u32(1) ); /* -1 where true */ vector bool int gtMask = vec_cmpge( thisWidth, width.v ); /* -1 where true */ vector bool int glWidth50Test = vec_cmpgt( sx, (vector float)(vGLWidth50) ); /* -1 where true */ vector bool int glHeight50Test = vec_cmpgt( sy, (vector float)(vGLHeight50) ); /* -1 where true */ vector bool int test50x = vec_cmplt( sx, (vector float) (-50.0) ); vector bool int test50y = vec_cmplt( sy, (vector float) (-50.0) ); vector bool int testz = vec_cmplt( z.v, (vector float) (25.0) ); vector bool int testoldz = vec_cmplt( oldz, (vector float) (25.0) ); mask = vec_or( mask, gtMask ); s->p[i].dead.v = vec_and( mask, vec_splat_u32( 1 ) ); mask = vec_or( mask, glWidth50Test ); mask = vec_or( mask, glHeight50Test ); mask = vec_or( mask, test50x ); mask = vec_or( mask, test50y ); mask = vec_or( mask, testz ); mask = vec_or( mask, testoldz ); tempMask.v = (vector unsigned int)mask; s->p[i].animFrame.v = vec_sub( s->p[i].animFrame.v, vec_nor( mask, mask ) ); s->p[i].animFrame.v = vec_and( s->p[i].animFrame.v, (vector unsigned int)(63) ); frameAnd7 = vec_ctf(vec_and(s->p[i].animFrame.v, (vector unsigned int)(7)),0); u0.v = vec_madd(frameAnd7, eighth, zero); frameShift3 = vec_ctf(vec_sr(s->p[i].animFrame.v, (vector unsigned int)(3)),0); v0.v = vec_madd(frameAnd7, eighth, zero); u1.v = vec_add(u0.v, eighth); v1.v = vec_add(v0.v, eighth); one_over_width = vec_re(width.v); cm.v = vec_sel( vec_nmsub(thisWidth, one_over_width, (vector float)(1.375)), cm.v, mask ); cm.v = vec_madd(cm.v, briteV.v, zero); vSi = vec_sub( vSi, vec_nor( mask, mask ) ); { vector unsigned int blitMask = (vector unsigned int) (1, 2, 4, 8); vector unsigned int temp = (vector unsigned int)mask; temp = vec_andc( blitMask, temp ); temp = vec_add( temp, vec_sld( temp, temp, 8 ) ); temp = vec_add( temp, vec_sld( temp, temp, 4 ) ); vec_ste( temp, 0, &blitBool ); } { vector float temp1, temp2, temp3, temp4; vector float result1a, result1b, result2a, result2b, result3a, result3b, result4a, result4b; temp1 = vec_mergeh( u0.v, u0.v ); temp2 = vec_mergel( u0.v, u0.v ); temp3 = vec_mergeh( v0.v, v1.v ); temp4 = vec_mergel( v0.v, v1.v ); result1a = vec_mergeh( temp1, temp3 ); result1b = vec_mergel( temp1, temp3 ); result2a = vec_mergeh( temp2, temp4 ); result2b = vec_mergel( temp2, temp4 ); temp1 = vec_mergeh( u1.v, u1.v ); temp2 = vec_mergel( u1.v, u1.v ); temp3 = vec_mergeh( v1.v, v0.v ); temp4 = vec_mergel( v1.v, v0.v ); result3a = vec_mergeh( temp1, temp3 ); result3b = vec_mergel( temp1, temp3 ); result4a = vec_mergeh( temp2, temp4 ); result4b = vec_mergel( temp2, temp4 ); if( blitBool & 1 ) { vec_st( result1a, 0, &s->seraphimTextures[sti] ); vec_st( result3a, 16, &s->seraphimTextures[sti]); sti+= 8; } if( blitBool & 2 ) { vec_st( result1b, 0, &s->seraphimTextures[sti]); vec_st( result3b, 16, &s->seraphimTextures[sti]); sti+= 8; } if( blitBool & 4 ) { vec_st( result2a, 0, &s->seraphimTextures[sti]); vec_st( result4a, 16, &s->seraphimTextures[sti]); sti+= 8; } if( blitBool & 8 ) { vec_st( result2b, 0, &s->seraphimTextures[sti]); vec_st( result4b, 16, &s->seraphimTextures[sti]); sti+= 8; } } } cmv[0] = vec_madd(s->p[i].color[0].v, cm.v, zero); cmv[1] = vec_madd(s->p[i].color[1].v, cm.v, zero); cmv[2] = vec_madd(s->p[i].color[2].v, cm.v, zero); cmv[3] = vec_madd(s->p[i].color[3].v, cm.v, zero); { vector float vI0, vI1, vI2, vI3; vI0 = vec_mergeh ( cmv[0], cmv[2] ); vI1 = vec_mergeh ( cmv[1], cmv[3] ); vI2 = vec_mergel ( cmv[0], cmv[2] ); vI3 = vec_mergel ( cmv[1], cmv[3] ); cmv[0] = vec_mergeh ( vI0, vI1 ); cmv[1] = vec_mergel ( vI0, vI1 ); cmv[2] = vec_mergeh ( vI2, vI3 ); cmv[3] = vec_mergel ( vI2, vI3 ); } vec_dst( cmv, 0x0D0100D0, 1 ); { vector float sxd, syd; vector float sxdm, sxdp, sydm, sydp; vector float oxd, oyd; vector float oxdm, oxdp, oydm, oydp; vector float vI0, vI1, vI2, vI3; vector float dxs, dys; vector float dxos, dyos; vector float dxm, dym; vector float m; m = vec_add((vector float)(1.0), sm); dxs = vec_madd(dx, sm, zero); dys = vec_madd(dy, sm, zero); dxos = vec_madd(dx, os, zero); dyos = vec_madd(dy, os, zero); dxm = vec_madd(dx, m, zero); dym = vec_madd(dy, m, zero); sxd = vec_add(sx, dxm); sxdm = vec_sub(sxd, dys); sxdp = vec_add(sxd, dys); syd = vec_add(sy, dym); sydm = vec_sub(syd, dxs); sydp = vec_add(syd, dxs); oxd = vec_sub(oldscreenx, dxm); oxdm = vec_sub(oxd, dyos); oxdp = vec_add(oxd, dyos); oyd = vec_sub(oldscreeny, dym); oydm = vec_sub(oyd, dxos); oydp = vec_add(oyd, dxos); vI0 = vec_mergeh ( sxdm, sxdp ); vI1 = vec_mergeh ( sydp, sydm ); vI2 = vec_mergel ( sxdm, sxdp ); vI3 = vec_mergel ( sydp, sydm ); svec[0] = vec_mergeh ( vI0, vI1 ); svec[1] = vec_mergel ( vI0, vI1 ); svec[2] = vec_mergeh ( vI2, vI3 ); svec[3] = vec_mergel ( vI2, vI3 ); vI0 = vec_mergeh ( oxdp, oxdm ); vI1 = vec_mergeh ( oydm, oydp ); vI2 = vec_mergel ( oxdp, oxdm ); vI3 = vec_mergel ( oydm, oydp ); ovec[0] = vec_mergeh ( vI0, vI1 ); ovec[1] = vec_mergel ( vI0, vI1 ); ovec[2] = vec_mergeh ( vI2, vI3 ); ovec[3] = vec_mergel ( vI2, vI3 ); } { int offset0 = (sci + 0) * sizeof( vector float ); int offset1 = (sci + 1) * sizeof( vector float ); int offset2 = (sci + 2) * sizeof( vector float ); int offset3 = (sci + 3) * sizeof( vector float ); int offset4 = (svi + 0) * sizeof( vector float ); int offset5 = (svi + 1) * sizeof( vector float ); vector float *colors = (vector float *)s->seraphimColors; vector float *vertices = (vector float *)s->seraphimVertices; for (kk=0; kk<4; kk++) { if (blitBool>>kk & 1) { vector float vcmv = cmv[kk]; vector float vsvec = svec[kk]; vector float vovec = ovec[kk]; vec_st( vcmv, offset0, colors ); vec_st( vcmv, offset1, colors ); vec_st( vcmv, offset2, colors ); vec_st( vcmv, offset3, colors ); vec_st( vsvec, offset4, vertices ); vec_st( vovec, offset5, vertices ); colors += 4; vertices += 2; sci += 4; svi += 2; } } } } vSi = vec_add( vSi, vec_sld( vSi, vSi, 8 ) ); vSi = vec_add( vSi, vec_sld( vSi, vSi, 4 ) ); vec_ste( (vector signed int) vSi, 0, &si ); glColorPointer(4,GL_FLOAT,0,s->seraphimColors); glVertexPointer(2,GL_FLOAT,0,s->seraphimVertices); glTexCoordPointer(2,GL_FLOAT,0,s->seraphimTextures); glDrawArrays(GL_QUADS,0,si*4); } #endif #endif /* 0 */ xscreensaver-5.36/hacks/glx/flurry-spark.c000644 000767 000024 00000022276 12701612217 020636 0ustar00jwzstaff000000 000000 /* Copyright (c) 2002, Calum Robinson All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. * Neither the name of the author nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ /* Spark.cpp: implementation of the Spark class. */ #ifdef HAVE_CONFIG_H # include "config.h" #endif #include "flurry.h" void InitSpark(Spark *s) { int i; for (i=0;i<3;i++) { s->position[i] = RandFlt(-100.0, 100.0); } } void DrawSpark(global_info_t *global, flurry_info_t *flurry, Spark *s) { const float black[4] = {0.0f,0.0f,0.0f,1.0f}; float width,sx,sy; float a; float c = 0.0625f; float screenx; float screeny; float w,z, scale; int k; width = 60000.0f * global->sys_glWidth / 1024.0f; z = s->position[2]; sx = s->position[0] * global->sys_glWidth / z + global->sys_glWidth * 0.5f; sy = s->position[1] * global->sys_glWidth / z + global->sys_glHeight * 0.5f; w = width*4.0f / z; screenx = sx; screeny = sy; glPushMatrix(); glTranslatef(screenx,screeny,0.0f); scale = w/50.0f; glScalef(scale,scale,0.0f); for (k=0;k<12;k++) { a = ((float) (random() % 3600)) / 10.0f; glRotatef(a,0.0f,0.0f,1.0f); glBegin(GL_QUAD_STRIP); glColor4fv(black); glVertex2f(-3.0f,0.0f); a = 2.0f + (float) (random() & 255) * c; glVertex2f(-3.0f,a); glColor4fv(s->color); glVertex2f(0.0f,0.0f); glColor4fv(black); glVertex2f(0.0f,a); glVertex2f(3.0f,0.0f); glVertex2f(3.0f,a); glEnd(); } glPopMatrix(); } #define BIGMYSTERY 1800.0 #define MAXANGLES 16384 void UpdateSparkColour(global_info_t *global, flurry_info_t *flurry, Spark *s) { const float rotationsPerSecond = (float) (2.0*PI*fieldSpeed/MAXANGLES); double thisPointInRadians; double thisAngle = flurry->fTime*rotationsPerSecond; float cf; float cycleTime = 20.0f; float colorRot; float redPhaseShift; float greenPhaseShift; float bluePhaseShift; float baseRed; float baseGreen; float baseBlue; float colorTime; if (flurry->currentColorMode == rainbowColorMode) { cycleTime = 1.5f; } else if (flurry->currentColorMode == tiedyeColorMode) { cycleTime = 4.5f; } else if (flurry->currentColorMode == cyclicColorMode) { cycleTime = 20.0f; } else if (flurry->currentColorMode == slowCyclicColorMode) { cycleTime = 120.0f; } colorRot = (float) (2.0*PI/cycleTime); redPhaseShift = 0.0f; /* cycleTime * 0.0f / 3.0f */ greenPhaseShift = cycleTime / 3.0f; bluePhaseShift = cycleTime * 2.0f / 3.0f ; colorTime = flurry->fTime; if (flurry->currentColorMode == whiteColorMode) { baseRed = 0.1875f; baseGreen = 0.1875f; baseBlue = 0.1875f; } else if (flurry->currentColorMode == multiColorMode) { baseRed = 0.0625f; baseGreen = 0.0625f; baseBlue = 0.0625f; } else if (flurry->currentColorMode == darkColorMode) { baseRed = 0.0f; baseGreen = 0.0f; baseBlue = 0.0f; } else { if (flurry->currentColorMode < slowCyclicColorMode) { colorTime = (flurry->currentColorMode / 6.0f) * cycleTime; } else { colorTime = flurry->fTime + flurry->flurryRandomSeed; } baseRed = 0.109375f * ((float) cos((colorTime+redPhaseShift)*colorRot)+1.0f); baseGreen = 0.109375f * ((float) cos((colorTime+greenPhaseShift)*colorRot)+1.0f); baseBlue = 0.109375f * ((float) cos((colorTime+bluePhaseShift)*colorRot)+1.0f); } cf = ((float) (cos(7.0*((flurry->fTime)*rotationsPerSecond))+cos(3.0*((flurry->fTime)*rotationsPerSecond))+cos(13.0*((flurry->fTime)*rotationsPerSecond)))); cf /= 6.0f; cf += 2.0f; thisPointInRadians = 2.0 * PI * (double) s->mystery / (double) BIGMYSTERY; s->color[0] = baseRed + 0.0625f * (0.5f + (float) cos((15.0 * (thisPointInRadians + 3.0*thisAngle))) + (float) sin((7.0 * (thisPointInRadians + thisAngle)))); s->color[1] = baseGreen + 0.0625f * (0.5f + (float) sin(((thisPointInRadians) + thisAngle))); s->color[2] = baseBlue + 0.0625f * (0.5f + (float) cos((37.0 * (thisPointInRadians + thisAngle)))); } void UpdateSpark(global_info_t *global, flurry_info_t *flurry, Spark *s) { const float rotationsPerSecond = (float) (2.0*PI*fieldSpeed/MAXANGLES); double thisPointInRadians; double thisAngle = flurry->fTime*rotationsPerSecond; float cf; int i; double tmpX1,tmpY1,tmpZ1; double tmpX2,tmpY2,tmpZ2; double tmpX3,tmpY3,tmpZ3; double tmpX4,tmpY4,tmpZ4; double rotation; double cr; double sr; float cycleTime = 20.0f; float colorRot; float redPhaseShift; float greenPhaseShift; float bluePhaseShift; float baseRed; float baseGreen; float baseBlue; float colorTime; float old[3]; if (flurry->currentColorMode == rainbowColorMode) { cycleTime = 1.5f; } else if (flurry->currentColorMode == tiedyeColorMode) { cycleTime = 4.5f; } else if (flurry->currentColorMode == cyclicColorMode) { cycleTime = 20.0f; } else if (flurry->currentColorMode == slowCyclicColorMode) { cycleTime = 120.0f; } colorRot = (float) (2.0*PI/cycleTime); redPhaseShift = 0.0f; /* cycleTime * 0.0f / 3.0f */ greenPhaseShift = cycleTime / 3.0f; bluePhaseShift = cycleTime * 2.0f / 3.0f ; colorTime = flurry->fTime; if (flurry->currentColorMode == whiteColorMode) { baseRed = 0.1875f; baseGreen = 0.1875f; baseBlue = 0.1875f; } else if (flurry->currentColorMode == multiColorMode) { baseRed = 0.0625f; baseGreen = 0.0625f; baseBlue = 0.0625f; } else if (flurry->currentColorMode == darkColorMode) { baseRed = 0.0f; baseGreen = 0.0f; baseBlue = 0.0f; } else { if(flurry->currentColorMode < slowCyclicColorMode) { colorTime = (flurry->currentColorMode / 6.0f) * cycleTime; } else { colorTime = flurry->fTime + flurry->flurryRandomSeed; } baseRed = 0.109375f * ((float) cos((colorTime+redPhaseShift)*colorRot)+1.0f); baseGreen = 0.109375f * ((float) cos((colorTime+greenPhaseShift)*colorRot)+1.0f); baseBlue = 0.109375f * ((float) cos((colorTime+bluePhaseShift)*colorRot)+1.0f); } for (i=0;i<3;i++) { old[i] = s->position[i]; } cf = ((float) (cos(7.0*((flurry->fTime)*rotationsPerSecond))+cos(3.0*((flurry->fTime)*rotationsPerSecond))+cos(13.0*((flurry->fTime)*rotationsPerSecond)))); cf /= 6.0f; cf += 2.0f; thisPointInRadians = 2.0 * PI * (double) s->mystery / (double) BIGMYSTERY; s->color[0] = baseRed + 0.0625f * (0.5f + (float) cos((15.0 * (thisPointInRadians + 3.0*thisAngle))) + (float) sin((7.0 * (thisPointInRadians + thisAngle)))); s->color[1] = baseGreen + 0.0625f * (0.5f + (float) sin(((thisPointInRadians) + thisAngle))); s->color[2] = baseBlue + 0.0625f * (0.5f + (float) cos((37.0 * (thisPointInRadians + thisAngle)))); s->position[0] = fieldRange * cf * (float) cos(11.0 * (thisPointInRadians + (3.0*thisAngle))); s->position[1] = fieldRange * cf * (float) sin(12.0 * (thisPointInRadians + (4.0*thisAngle))); s->position[2] = fieldRange * (float) cos((23.0 * (thisPointInRadians + (12.0*thisAngle)))); rotation = thisAngle*0.501 + 5.01 * (double) s->mystery / (double) BIGMYSTERY; cr = cos(rotation); sr = sin(rotation); tmpX1 = s->position[0] * cr - s->position[1] * sr; tmpY1 = s->position[1] * cr + s->position[0] * sr; tmpZ1 = s->position[2]; tmpX2 = tmpX1 * cr - tmpZ1 * sr; tmpY2 = tmpY1; tmpZ2 = tmpZ1 * cr + tmpX1 * sr; tmpX3 = tmpX2; tmpY3 = tmpY2 * cr - tmpZ2 * sr; tmpZ3 = tmpZ2 * cr + tmpY2 * sr + seraphDistance; rotation = thisAngle*2.501 + 85.01 * (double) s->mystery / (double) BIGMYSTERY; cr = cos(rotation); sr = sin(rotation); tmpX4 = tmpX3 * cr - tmpY3 * sr; tmpY4 = tmpY3 * cr + tmpX3 * sr; tmpZ4 = tmpZ3; s->position[0] = (float) tmpX4 + RandBell(5.0f*fieldCoherence); s->position[1] = (float) tmpY4 + RandBell(5.0f*fieldCoherence); s->position[2] = (float) tmpZ4 + RandBell(5.0f*fieldCoherence); for (i=0;i<3;i++) { s->delta[i] = (s->position[i] - old[i])/flurry->fDeltaTime; } } xscreensaver-5.36/hacks/glx/flurry-star.c000644 000767 000024 00000007245 12701612217 020466 0ustar00jwzstaff000000 000000 /* Copyright (c) 2002, Calum Robinson All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. * Neither the name of the author nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ /* Star.c: implementation of the Star class. */ #ifdef HAVE_CONFIG_H # include "config.h" #endif #include "flurry.h" /* Construction/Destruction */ void InitStar(Star *s) { int i; for (i=0;i<3;i++) { s->position[i] = RandFlt(-10000.0, 10000.0); } s->rotSpeed = RandFlt(0.4, 0.9); s->mystery = RandFlt(0.0, 10.0); } #define BIGMYSTERY 1800.0 #define MAXANGLES 16384 void UpdateStar(global_info_t *global, flurry_info_t *flurry, Star *s) { float rotationsPerSecond = (float) (2.0*PI*12.0/MAXANGLES) * s->rotSpeed /* speed control */; double thisPointInRadians; double thisAngle = flurry->fTime*rotationsPerSecond; float cf; double tmpX1,tmpY1,tmpZ1; double tmpX2,tmpY2,tmpZ2; double tmpX3,tmpY3,tmpZ3; double tmpX4,tmpY4,tmpZ4; double rotation; double cr; double sr; s->ate = 0; cf = ((float) (cos(7.0*((flurry->fTime)*rotationsPerSecond))+cos(3.0*((flurry->fTime)*rotationsPerSecond))+cos(13.0*((flurry->fTime)*rotationsPerSecond)))); cf /= 6.0f; cf += 0.75f; thisPointInRadians = 2.0 * PI * (double) s->mystery / (double) BIGMYSTERY; s->position[0] = 250.0f * cf * (float) cos(11.0 * (thisPointInRadians + (3.0*thisAngle))); s->position[1] = 250.0f * cf * (float) sin(12.0 * (thisPointInRadians + (4.0*thisAngle))); s->position[2] = 250.0f * (float) cos((23.0 * (thisPointInRadians + (12.0*thisAngle)))); rotation = thisAngle*0.501 + 5.01 * (double) s->mystery / (double) BIGMYSTERY; cr = cos(rotation); sr = sin(rotation); tmpX1 = s->position[0] * cr - s->position[1] * sr; tmpY1 = s->position[1] * cr + s->position[0] * sr; tmpZ1 = s->position[2]; tmpX2 = tmpX1 * cr - tmpZ1 * sr; tmpY2 = tmpY1; tmpZ2 = tmpZ1 * cr + tmpX1 * sr; tmpX3 = tmpX2; tmpY3 = tmpY2 * cr - tmpZ2 * sr; tmpZ3 = tmpZ2 * cr + tmpY2 * sr + seraphDistance; rotation = thisAngle*2.501 + 85.01 * (double) s->mystery / (double) BIGMYSTERY; cr = cos(rotation); sr = sin(rotation); tmpX4 = tmpX3 * cr - tmpY3 * sr; tmpY4 = tmpY3 * cr + tmpX3 * sr; tmpZ4 = tmpZ3; s->position[0] = (float) tmpX4; s->position[1] = (float) tmpY4; s->position[2] = (float) tmpZ4; } xscreensaver-5.36/hacks/glx/flurry-texture.c000644 000767 000024 00000013722 12701612217 021212 0ustar00jwzstaff000000 000000 /* Copyright (c) 2002, Calum Robinson All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. * Neither the name of the author nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ /* * Texture.c * AppleFlurry * * Created by calumr on Sat Jul 07 2001. * Copyright (c) 2001 __CompanyName__. All rights reserved. * */ #ifdef HAVE_CONFIG_H # include "config.h" #endif #include "flurry.h" #include #include #include #include static GLubyte smallTextureArray[32][32]; static GLubyte bigTextureArray[256][256][2]; GLuint theTexture = 0; /* simple smoothing routine */ static void SmoothTexture(void) { GLubyte filter[32][32]; int i,j; float t; for (i=1;i<31;i++) { for (j=1;j<31;j++) { t = (float) smallTextureArray[i][j]*4; t += (float) smallTextureArray[i-1][j]; t += (float) smallTextureArray[i+1][j]; t += (float) smallTextureArray[i][j-1]; t += (float) smallTextureArray[i][j+1]; t /= 8.0f; filter[i][j] = (GLubyte) t; } } for (i=1;i<31;i++) { for (j=1;j<31;j++) { smallTextureArray[i][j] = filter[i][j]; } } } /* add some randomness to texture data */ static void SpeckleTexture(void) { int i,j; int speck; float t; for (i=2;i<30;i++) { for (j=2;j<30;j++) { speck = 1; while (speck <= 32 && random() % 2) { t = (float) MIN_(255,smallTextureArray[i][j]+speck); smallTextureArray[i][j] = (GLubyte) t; speck+=speck; } speck = 1; while (speck <= 32 && random() % 2) { t = (float) MAX_(0,smallTextureArray[i][j]-speck); smallTextureArray[i][j] = (GLubyte) t; speck+=speck; } } } } static void MakeSmallTexture(void) { static int firstTime = 1; int i,j; float r,t; if (firstTime) { firstTime = 0; for (i=0;i<32;i++) { for (j=0;j<32;j++) { r = (float) sqrt((i-15.5)*(i-15.5)+(j-15.5)*(j-15.5)); if (r > 15.0f) { smallTextureArray[i][j] = 0; } else { t = 255.0f * (float) cos(r*M_PI/31.0); smallTextureArray[i][j] = (GLubyte) t; } } } } else { for (i=0;i<32;i++) { for (j=0;j<32;j++) { r = (float) sqrt((i-15.5)*(i-15.5)+(j-15.5)*(j-15.5)); if (r > 15.0f) { t = 0.0f; } else { t = 255.0f * (float) cos(r*M_PI/31.0); } smallTextureArray[i][j] = (GLubyte) MIN_(255,(t+smallTextureArray[i][j]+smallTextureArray[i][j])/3); } } } SpeckleTexture(); SmoothTexture(); SmoothTexture(); } static void CopySmallTextureToBigTexture(int k, int l) { int i,j; for (i=0;i<32;i++) { for (j=0;j<32;j++) { bigTextureArray[i+k][j+l][0] = smallTextureArray[i][j]; bigTextureArray[i+k][j+l][1] = smallTextureArray[i][j]; } } } static void AverageLastAndFirstTextures(void) { int i,j; int t; for (i=0;i<32;i++) { for (j=0;j<32;j++) { t = (smallTextureArray[i][j] + bigTextureArray[i][j][0]) / 2; smallTextureArray[i][j] = (GLubyte) MIN_(255,t); } } } void MakeTexture() { int i,j; for (i=0;i<8;i++) { for (j=0;j<8;j++) { if (i==7 && j==7) { AverageLastAndFirstTextures(); } else { MakeSmallTexture(); } CopySmallTextureToBigTexture(i*32,j*32); } } glPixelStorei(GL_UNPACK_ALIGNMENT,1); glGenTextures(1, &theTexture); glBindTexture(GL_TEXTURE_2D, theTexture); /* Set the tiling mode (this is generally always GL_REPEAT). */ glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT); /* Set the filtering. */ glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_NEAREST); gluBuild2DMipmaps(GL_TEXTURE_2D, 2, 256, 256, GL_LUMINANCE_ALPHA, GL_UNSIGNED_BYTE, bigTextureArray); glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE); } xscreensaver-5.36/hacks/glx/atunnel.c000644 000767 000024 00000021734 12705630435 017647 0ustar00jwzstaff000000 000000 /* -*- Mode: C; tab-width: 4 -*- */ /* atunnel --- OpenGL Advanced Tunnel Screensaver */ #if 0 static const char sccsid[] = "@(#)atunnel.c 5.13 2004/05/25 xlockmore"; #endif /* Copyright (c) E. Lassauge, 2003-2004. */ /* * Permission to use, copy, modify, and distribute this software and its * documentation for any purpose and without fee is hereby granted, * provided that the above copyright notice appear in all copies and that * both that copyright notice and this permission notice appear in * supporting documentation. * * This file is provided AS IS with no warranties of any kind. The author * shall have no liability with respect to the infringement of copyrights, * trade secrets or any patents by this file or any part thereof. In no * event will the author be liable for any lost revenue or profits or * other special, indirect and consequential damages. * * The original code for this mode was written by Roman Podobedov * Email: romka@ut.ee * WEB: http://romka.demonews.com * * Eric Lassauge (May-25-2004) * http://lassauge.free.fr/linux.html * * REVISION HISTORY: * * E.Lassauge - 25-May-2004: * - added more texture ! * E.Lassauge - 16-Mar-2002: * - created based on the Roman demo. * - deleted all external file stuff to use xpm textures and * hardcoded path point values. * */ #ifdef STANDALONE /* xscreensaver mode */ #define DEFAULTS "*delay: 10000 \n" \ "*showFPS: False \n" \ "*suppressRotationAnimation: True\n" \ # define refresh_atunnel 0 # define atunnel_handle_event 0 #define MODE_atunnel # include "xlockmore.h" /* from the xscreensaver distribution */ #else /* !STANDALONE */ # include "xlock.h" /* from the xlockmore distribution */ #endif /* !STANDALONE */ #ifdef MODE_atunnel /* whole file */ #include #include #include #include "tunnel_draw.h" #if defined( USE_XPM ) || defined( USE_XPMINC ) || defined(STANDALONE) /* USE_XPM & USE_XPMINC in xlock mode ; STANDALONE in xscreensaver mode */ #include "xpm-ximage.h" #define I_HAVE_XPM #ifdef STANDALONE #include "../images/tunnel0.xpm" #include "../images/tunnel1.xpm" #include "../images/tunnel2.xpm" #include "../images/tunnel3.xpm" #include "../images/tunnel4.xpm" #include "../images/tunnel5.xpm" #else /* !STANDALONE */ #include "pixmaps/tunnel0.xpm" #include "pixmaps/tunnel1.xpm" #include "pixmaps/tunnel2.xpm" #include "pixmaps/tunnel3.xpm" #include "pixmaps/tunnel4.xpm" #include "pixmaps/tunnel5.xpm" #endif /* !STANDALONE */ #endif /* HAVE_XPM */ #undef countof #define countof(x) (sizeof((x))/sizeof((*x))) #define DEF_LIGHT "True" #define DEF_WIRE "False" #define DEF_TEXTURE "True" static Bool do_light; static Bool do_wire; static Bool do_texture; static XrmOptionDescRec opts[] = { {"-light", ".atunnel.light", XrmoptionNoArg, "true" }, {"+light", ".atunnel.light", XrmoptionNoArg, "false" }, {"-wireframe",".atunnel.wire", XrmoptionNoArg, "true" }, {"+wireframe",".atunnel.wire", XrmoptionNoArg, "false" }, {"-texture", ".atunnel.texture", XrmoptionNoArg, "true" }, {"+texture", ".atunnel.texture", XrmoptionNoArg, "false" }, }; static argtype vars[] = { {&do_light, "light", "Light", DEF_LIGHT, t_Bool}, {&do_wire, "wire", "Wire", DEF_WIRE, t_Bool}, {&do_texture, "texture", "Texture", DEF_TEXTURE, t_Bool}, }; static OptionStruct desc[] = { {"-/+ light", "whether to do enable lighting (slower)"}, {"-/+ wire", "whether to do use wireframe instead of filled (faster)"}, {"-/+ texture", "whether to apply a texture (slower)"}, }; ENTRYPOINT ModeSpecOpt atunnel_opts = {countof(opts), opts, countof(vars), vars, desc}; #ifdef USE_MODULES ModStruct atunnel_description = {"atunnel", "init_atunnel", "draw_atunnel", "release_atunnel", "draw_atunnel", "init_atunnel", NULL, &atunnel_opts, 1000, 1, 2, 1, 4, 1.0, "", "OpenGL advanced tunnel screensaver", 0, NULL}; #endif /* structure for holding the screensaver data */ typedef struct { int screen_width, screen_height; GLXContext *glx_context; Window window; struct tunnel_state *ts; GLuint texture[MAX_TEXTURE]; /* texture id: GL world */ } atunnelstruct; static atunnelstruct *Atunnel = NULL; /*=================== Load Texture =========================================*/ static void LoadTexture(ModeInfo * mi, char **fn, int t_num) { #if defined( I_HAVE_XPM ) atunnelstruct *sa = &Atunnel[MI_SCREEN(mi)]; XImage *teximage; /* Texture data */ if ((teximage = xpm_to_ximage(MI_DISPLAY(mi), MI_VISUAL(mi), MI_COLORMAP(mi), fn)) == None) { (void) fprintf(stderr, "Error reading the texture.\n"); glDeleteTextures(1, &sa->texture[t_num]); do_texture = False; #ifdef STANDALONE exit(0); #else return; #endif } #ifdef HAVE_GLBINDTEXTURE glBindTexture(GL_TEXTURE_2D, sa->texture[t_num]); #endif /* HAVE_GLBINDTEXTURE */ glPixelStorei(GL_UNPACK_ALIGNMENT, 4); clear_gl_error(); glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, teximage->width, teximage->height, 0, GL_RGBA, /* GL_UNSIGNED_BYTE, */ GL_UNSIGNED_INT_8_8_8_8_REV, teximage->data); check_gl_error("texture"); /* Texture parameters, LINEAR scaling for better texture quality */ glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); XDestroyImage(teximage); #else /* !I_HAVE_XPM */ do_texture = False; #endif /* !I_HAVE_XPM */ } /*=================== Main Initialization ==================================*/ static void Init(ModeInfo * mi) { atunnelstruct *sa = &Atunnel[MI_SCREEN(mi)]; GLfloat light_ambient[] = {1.0, 1.0, 1.0, 1.0}; GLfloat light_diffuse[] = {1.0, 1.0, 1.0, 1.0}; GLfloat light_specular[] = {1.0, 1.0, 1.0, 1.0}; GLfloat light_position[] = {0.0, 0.0, 1.0, 0.0}; GLfloat fogColor[4] = {0.8, 0.8, 0.8, 1.0}; if (do_texture) { glGenTextures(MAX_TEXTURE, sa->texture); LoadTexture(mi, texture0,0); LoadTexture(mi, texture1,1); LoadTexture(mi, texture2,2); LoadTexture(mi, texture3,3); LoadTexture(mi, texture4,4); LoadTexture(mi, texture5,5); glEnable(GL_TEXTURE_2D); } sa->ts = atunnel_InitTunnel(); /* Set lighting parameters */ if (do_light) { glLightfv(GL_LIGHT0, GL_AMBIENT, light_ambient); glLightfv(GL_LIGHT0, GL_DIFFUSE, light_diffuse); glLightfv(GL_LIGHT0, GL_SPECULAR, light_specular); glLightfv(GL_LIGHT0, GL_POSITION, light_position); /* Enable light 0 */ glEnable(GL_LIGHT0); glDepthFunc(GL_LESS); glEnable(GL_LIGHTING); } # ifdef HAVE_JWZGLES /* #### glPolygonMode other than GL_FILL unimplemented */ do_wire = 0; # endif if (do_wire) { glDisable(GL_NORMALIZE); glDisable(GL_CULL_FACE); glDisable(GL_DEPTH_TEST); glDisable(GL_TEXTURE_2D); glPolygonMode(GL_FRONT,GL_LINE); glPolygonMode(GL_BACK,GL_LINE); } else { glEnable(GL_DEPTH_TEST); glPolygonMode(GL_FRONT_AND_BACK, GL_FILL); /* Enable fog */ glFogi(GL_FOG_MODE, GL_EXP); glFogfv(GL_FOG_COLOR, fogColor); glFogf(GL_FOG_DENSITY, 0.3); glEnable(GL_FOG); /* Cull face */ glCullFace(GL_FRONT); glEnable(GL_CULL_FACE); } glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST); } /* Standard reshape function */ ENTRYPOINT void reshape_atunnel(ModeInfo *mi, int width, int height) { float a; glViewport(0, 0, width, height); glMatrixMode(GL_PROJECTION); glLoadIdentity(); a = (float)width/(float)height; glFrustum(-0.1*a, 0.1*a, -0.1, 0.1, 0.1, 10); glMatrixMode(GL_MODELVIEW); } /* draw the screensaver once */ ENTRYPOINT void draw_atunnel(ModeInfo * mi) { atunnelstruct *sa = &Atunnel[MI_SCREEN(mi)]; Display *display = MI_DISPLAY(mi); Window window = MI_WINDOW(mi); if (!sa->glx_context) return; glXMakeCurrent(display, window, *(sa->glx_context)); glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glLoadIdentity(); atunnel_DrawTunnel(sa->ts, do_texture, do_light, sa->texture); atunnel_SplashScreen(sa->ts, do_wire, do_texture, do_light); glFlush(); /* manage framerate display */ if (MI_IS_FPS(mi)) do_fps (mi); glXSwapBuffers(display, window); } /* xscreensaver initialization routine */ ENTRYPOINT void init_atunnel(ModeInfo * mi) { int screen = MI_SCREEN(mi); atunnelstruct *sa; if (Atunnel == NULL) { if ((Atunnel = (atunnelstruct *) calloc(MI_NUM_SCREENS(mi), sizeof (atunnelstruct))) == NULL) return; } sa = &Atunnel[screen]; sa->window = MI_WINDOW(mi); if ((sa->glx_context = init_GL(mi)) != NULL) { reshape_atunnel(mi, MI_WIDTH(mi), MI_HEIGHT(mi)); Init(mi); } else { MI_CLEARWINDOW(mi); } } /* all sorts of nice cleanup code should go here! */ ENTRYPOINT void release_atunnel(ModeInfo * mi) { #if 0 int screen; if (Atunnel != NULL) { for (screen = 0; screen < MI_NUM_SCREENS(mi); screen++) { atunnelstruct *sa = &Atunnel[screen]; FreeTunnel(sa->ts); } (void) free((void *) Atunnel); Atunnel = NULL; } FreeAllGL(mi); #endif } XSCREENSAVER_MODULE ("Atunnel", atunnel) #endif xscreensaver-5.36/hacks/glx/tunnel_draw.c000644 000767 000024 00000025236 12716255247 020532 0ustar00jwzstaff000000 000000 /* -*- Mode: C; tab-width: 4 -*- */ /* atunnels --- OpenGL Advanced Tunnel Demo */ #if 0 static const char sccsid[] = "@(#)tunnel_draw.c 5.13 2004/05/25 xlockmore"; #endif /* Copyright (c) E. Lassauge, 2002-2004. */ /* * Permission to use, copy, modify, and distribute this software and its * documentation for any purpose and without fee is hereby granted, * provided that the above copyright notice appear in all copies and that * both that copyright notice and this permission notice appear in * supporting documentation. * * This file is provided AS IS with no warranties of any kind. The author * shall have no liability with respect to the infringement of copyrights, * trade secrets or any patents by this file or any part thereof. In no * event will the author be liable for any lost revenue or profits or * other special, indirect and consequential damages. * * The original code for this mode was written by Roman Podobedov * Email: romka@ut.ee * WEB: http://romka.demonews.com * * Eric Lassauge (May-25-2004) * http://lassauge.free.fr/linux.html * * REVISION HISTORY: * E.Lassauge - 25-May-2004: * - added more texture * - random texture init * */ #ifdef HAVE_CONFIG_H #include #endif #ifdef USE_GL /* whole file */ #include #include #include #ifdef STANDALONE # ifndef HAVE_JWXYZ # include # include # endif #endif #ifdef HAVE_ANDROID #include #endif #include "tunnel_draw.h" #ifdef STANDALONE /* For NRAND() */ #include "xlockmoreI.h" /* in xscreensaver distribution */ #else /* STANDALONE */ #include "xlock.h" /* in xlockmore distribution */ #endif /* STANDALONE */ typedef struct { float x, y, z; /* Point coordinates */ } cvPoint; typedef struct _tnPath { cvPoint p; struct _tnPath *next; } tnPath; static const cvPoint initpath[]={ {0.000000, 0.000000, 0.000000}, {2.000000, 1.000000, 0.000000}, {4.000000, 0.000000, 0.000000}, {6.000000, 1.000000, 0.000000}, {8.000000, 0.000000, 1.000000}, {10.000000, 1.000000, 1.000000}, {12.000000, 1.500000, 0.000000}, {14.000000, 0.000000, 0.000000}, {16.000000, 1.000000, 0.000000}, {18.000000, 0.000000, 0.000000}, {20.000000, 0.000000, 1.000000}, {22.000000, 1.000000, 0.000000}, {24.000000, 0.000000, 1.000000}, {26.000000, 0.000000, 1.000000}, {28.000000, 1.000000, 0.000000}, {30.000000, 0.000000, 2.000000}, {32.000000, 1.000000, 0.000000}, {34.000000, 0.000000, 2.000000}, {-1.000000, -1.000000, -1.000000} }; struct tunnel_state { tnPath *path; float cam_t; /* Camera variables */ tnPath *cam_pos; float alpha; int tFlag; /* Tunnel Drawing Variables */ cvPoint prev_points[10]; int current_texture; float ModeX; /* Modes */ int ModeXFlag; }; /*=================== Vector normalization ==================================*/ static void normalize(cvPoint *V) { float d; /* Vector length */ d = (float)sqrt(V->x*V->x + V->y*V->y + V->z*V->z); /* Normalization */ V->x /= d; V->y /= d; V->z /= d; } /*=================== C = A x B (Vector multiply) ==========================*/ #if 0 static void vect_mult(cvPoint *A, cvPoint *B, cvPoint *C) { /* Vector multiply */ C->x = A->y*B->z - A->z*B->y; C->y = A->z*B->x - A->x*B->z; C->z = A->x*B->y - A->y*B->x; } #endif /* Catmull-Rom Curve calculations */ static void cvCatmullRom(cvPoint *p, float t, cvPoint *outp) { float t2, t3, t1; t2 = t*t; t3 = t*t*t; t1 = (1-t)*(1-t); outp->x = (-t*t1*p[0].x + (2-5*t2+3*t3)*p[1].x + t*(1+4*t-3*t2)*p[2].x - t2*(1-t)*p[3].x)/2; outp->y = (-t*t1*p[0].y + (2-5*t2+3*t3)*p[1].y + t*(1+4*t-3*t2)*p[2].y - t2*(1-t)*p[3].y)/2; outp->z = (-t*t1*p[0].z + (2-5*t2+3*t3)*p[1].z + t*(1+4*t-3*t2)*p[2].z - t2*(1-t)*p[3].z)/2; } /*=================== Point Rotating Around Line =========================== // p - original point // pp - pivot point // pl - pivot line (vector) // a - angle to rotate in radians // outp - output point //========================================================================== */ static void RotateAroundLine(cvPoint *p, cvPoint *pp, cvPoint *pl, float a, cvPoint *outp) { cvPoint p1, p2; float l, m, n, ca, sa; p1.x = p->x - pp->x; p1.y = p->y - pp->y; p1.z = p->z - pp->z; l = pl->x; m = pl->y; n = pl->z; ca = cos(a); sa = sin(a); p2.x = p1.x*((l*l)+ca*(1-l*l)) + p1.y*(l*(1-ca)*m+n*sa) + p1.z*(l*(1-ca)*n-m*sa); p2.y = p1.x*(l*(1-ca)*m-n*sa) + p1.y*(m*m+ca*(1-m*m)) + p1.z*(m*(1-ca)*n+l*sa); p2.z = p1.x*(l*(1-ca)*n+m*sa) + p1.y*(m*(1-ca)*n-l*sa) + p1.z*(n*n+ca*(1-n*n)); outp->x = p2.x + pp->x; outp->y = p2.y + pp->y; outp->z = p2.z + pp->z; } /*=================== Load camera and tunnel path ==========================*/ static void LoadPath(struct tunnel_state *st) { float x, y, z; tnPath *path1=NULL, *path2=NULL; cvPoint *f = (cvPoint *)initpath; while (f->x != -1.0) { x = f->x; y = f->y; z = f->z; f++; if (st->path == NULL) { st->path = (tnPath *)malloc(sizeof(tnPath)); path1 = st->path; } else { if (!path1) path1 = st->path; path2 = (tnPath *)malloc(sizeof(tnPath)); path1->next = path2; path1 = path2; } path1->next = NULL; path1->p.x = x; path1->p.y = y; path1->p.z = z; } st->cam_pos = st->path; st->cam_t = 0; } /*=================== Tunnel Initialization ================================*/ struct tunnel_state * atunnel_InitTunnel(void) { struct tunnel_state *st = (struct tunnel_state *) calloc (1, sizeof(*st)); LoadPath(st); st->current_texture = NRAND(MAX_TEXTURE); return st; } void atunnel_DrawTunnel(struct tunnel_state *st, int do_texture, int do_light, GLuint *textures) { tnPath *p, *p1, *cmpos; cvPoint op, p4[4], T, ppp, op1, op2; float t; int i, j, k, flag; cvPoint points[10]; GLfloat light_position[4]; /* Select current tunnel texture */ if (do_texture) glBindTexture(GL_TEXTURE_2D, textures[st->current_texture]); cmpos = st->cam_pos; /* Get current curve */ if (st->cam_pos->next && st->cam_pos->next->next && st->cam_pos->next->next->next) { p1 = st->cam_pos; for (i=0; i<4; i++) { p4[i].x = p1->p.x; p4[i].y = p1->p.y; p4[i].z = p1->p.z; p1 = p1->next; } } else { /* End of tunnel */ st->ModeX = 1.0; st->ModeXFlag = 0; return; }; /* Get current camera position */ cvCatmullRom(p4, st->cam_t, &op); /* Next camera position */ st->cam_t += 0.02f; if (st->cam_t >= 1) { st->cam_t = st->cam_t - 1; cmpos = st->cam_pos->next; } /* Get curve for next camera position */ if (cmpos->next->next->next) { p1 = cmpos; for (i=0; i<4; i++) { p4[i].x = p1->p.x; p4[i].y = p1->p.y; p4[i].z = p1->p.z; p1 = p1->next; } } else { /* End of tunnel */ st->ModeX = 1.0; st->ModeXFlag = 0; return; } /* Get next camera position */ cvCatmullRom(p4, st->cam_t, &op1); /* Rotate camera */ glRotatef(st->alpha, 0, 0, -1); st->alpha += 1; /* Set camera position */ gluLookAt(op.x, op.y, op.z, op1.x, op1.y, op1.z, 0, 1, 0); /* Set light position */ if (do_light) { light_position[0] = op.x; light_position[1] = op.y; light_position[2] = op.z; light_position[3] = 1; glLightfv(GL_LIGHT0, GL_POSITION, light_position); } p = st->cam_pos; flag = 0; t = 0; k = 0; /* Draw tunnel from current curve and next 2 curves */ glBegin(GL_QUADS); while (k < 3) { if (p->next->next->next) { p1 = p; for (i=0; i<4; i++) { p4[i].x = p1->p.x; p4[i].y = p1->p.y; p4[i].z = p1->p.z; p1 = p1->next; } } else { /* End of tunnel */ st->ModeX = 1.0; st->ModeXFlag = 0; glEnd(); return; } cvCatmullRom(p4, t, &op); ppp.x = op.x; ppp.y = op.y; ppp.z = op.z + 0.25; t += 0.1; if (t >= 1.0) { t = t - 1; k++; p = p->next; } if (p->next->next->next) { p1 = p; for (i=0; i<4; i++) { p4[i].x = p1->p.x; p4[i].y = p1->p.y; p4[i].z = p1->p.z; p1 = p1->next; } } else { /* End of tunnel */ st->ModeX = 1.0; st->ModeXFlag = 0; glEnd(); return; } cvCatmullRom(p4, t, &op1); T.x = op1.x - op.x; T.y = op1.y - op.y; T.z = op1.z - op.z; normalize(&T); for (i=0; i<10; i++) { RotateAroundLine(&ppp, &op, &T, ((float)i*36.0*M_PI/180.0), &op2); points[i].x = op2.x; points[i].y = op2.y; points[i].z = op2.z; if (!flag) { st->prev_points[i].x = op2.x; st->prev_points[i].y = op2.y; st->prev_points[i].z = op2.z; } } if (!flag) { flag = 1; continue; } /* Draw 10 polygons for current point */ for (i=0; i<10; i++) { j = i+1; if (j > 9) j = 0; glNormal3f(0, 0, 1); /* Normal for lighting */ glTexCoord2f(0, 0); glVertex3f(st->prev_points[i].x, st->prev_points[i].y, st->prev_points[i].z); glNormal3f(0, 0, 1); glTexCoord2f(1, 0); glVertex3f(points[i].x, points[i].y, points[i].z); glNormal3f(0, 0, 1); glTexCoord2f(1, 1); glVertex3f(points[j].x, points[j].y, points[j].z); glNormal3f(0, 0, 1); glTexCoord2f(0, 1); glVertex3f(st->prev_points[j].x, st->prev_points[j].y, st->prev_points[j].z); } /* Save current polygon coordinates for next position */ for (i=0; i<10; i++) { st->prev_points[i].x = points[i].x; st->prev_points[i].y = points[i].y; st->prev_points[i].z = points[i].z; } } glEnd(); st->cam_pos = cmpos; } /* =================== Show splash screen =================================== */ void atunnel_SplashScreen(struct tunnel_state *st, int do_wire, int do_texture, int do_light) { if (st->ModeX > 0) { /* Reset tunnel and camera position */ if (!st->ModeXFlag) { st->cam_pos = st->path; st->cam_t = 0; st->tFlag = 0; st->ModeXFlag = 1; st->current_texture++; if (st->current_texture >= MAX_TEXTURE) st->current_texture = 0; } /* Now we want to draw splash screen */ glLoadIdentity(); /* Disable all unused features */ glDisable(GL_DEPTH_TEST); glDisable(GL_LIGHTING); glDisable(GL_FOG); glDisable(GL_CULL_FACE); glBlendFunc(GL_SRC_ALPHA, GL_DST_ALPHA); glEnable(GL_BLEND); glDisable(GL_TEXTURE_2D); glColor4f(1, 1, 1, st->ModeX); /* Draw splash screen (simply quad) */ glBegin(GL_QUADS); glVertex3f(-10, -10, -1); glVertex3f(10, -10, -1); glVertex3f(10, 10, -1); glVertex3f(-10, 10, -1); glEnd(); st->ModeX -= 0.05; if (st->ModeX <= 0) st->ModeX = 0; if (!do_wire) { glEnable(GL_CULL_FACE); glEnable(GL_DEPTH_TEST); } if (do_light) { glEnable(GL_LIGHTING); glEnable(GL_FOG); } if (do_texture) { glEnable(GL_TEXTURE_2D); } glDisable(GL_BLEND); glColor4f(1, 1, 1, 1); } } void atunnel_FreeTunnel(struct tunnel_state *st) { free (st); } #endif xscreensaver-5.36/hacks/glx/flyingtoasters.c000644 000767 000024 00000060616 12710313202 021242 0ustar00jwzstaff000000 000000 /* flyingtoasters, Copyright (c) 2003-2014 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. * * Draws 3D flying toasters, and toast. Inspired by the ancient * Berkeley Systems / After Dark hack, but now updated to the wide * wonderful workd of OpenGL and 3D! * * Code by jwz; object models by Baconmonkey. * * The original After Dark flying toasters, with the fluffy white wings, * were a trademark of Berkeley Systems. Berkeley Systems ceased to exist * some time in 1998, having been gobbled up by Sierra Online, who were * subsequently gobbled up by Flipside and/or Vivendi (it's hard to tell * exactly what happened when.) * * I doubt anyone even cares any more, but if they do, hopefully this homage, * with the space-age 3D jet-plane toasters, will be considered different * enough that whoever still owns the trademark to the fluffy-winged 2D * bitmapped toasters won't get all huffy at us. */ #define DEFAULTS "*delay: 30000 \n" \ "*showFPS: False \n" \ "*wireframe: False \n" \ /* #define DEBUG */ # define refresh_toasters 0 # define release_toasters 0 #undef countof #define countof(x) (sizeof((x))/sizeof((*x))) #define DEF_SPEED "1.0" #define DEF_NTOASTERS "20" #define DEF_NSLICES "25" #define DEF_TEXTURE "True" #undef BELLRAND #define BELLRAND(n) ((frand((n)) + frand((n)) + frand((n))) / 3) #include "xlockmore.h" #include "gltrackball.h" #include "xpm-ximage.h" #include #define HAVE_TEXTURE #ifdef HAVE_TEXTURE # include "../images/chromesphere.xpm" # include "../images/toast.xpm" #endif /* HAVE_TEXTURE */ #ifdef USE_GL /* whole file */ #include "gllist.h" extern const struct gllist *toaster, *toaster_base, *toaster_handle, *toaster_handle2, *toaster_jet, *toaster_knob, *toaster_slots, *toaster_wing, *toast, *toast2; static const struct gllist * const *all_objs[] = { &toaster, &toaster_base, &toaster_handle, &toaster_handle2, &toaster_jet, &toaster_knob, &toaster_slots, &toaster_wing, &toast, &toast2 }; #define BASE_TOASTER 0 #define BASE 1 #define HANDLE 2 #define HANDLE_SLOT 3 #define JET 4 #define KNOB 5 #define SLOTS 6 #define JET_WING 7 #define TOAST 8 #define TOAST_BITTEN 9 #define GRID_SIZE 60 #define GRID_DEPTH 500 static const struct { GLfloat x, y; } nice_views[] = { { 0, 120 }, { 0, -120 }, { 12, 28 }, /* this is a list of viewer rotations that look nice. */ { 12, -28 }, /* every now and then we switch to a new one. */ {-10, -28 }, /* (but we only use the first two at start-up.) */ { 40, -60 }, {-40, -60 }, { 40, 60 }, {-40, 60 }, { 30, 0 }, {-30, 0 }, }; typedef struct { GLfloat x, y, z; GLfloat dx, dy, dz; Bool toaster_p; int toast_type; /* 0, 1 */ GLfloat handle_pos; /* 0.0 - 1.0 */ GLfloat knob_pos; /* degrees */ int loaded; /* 2 bits */ } floater; typedef struct { GLXContext *glx_context; trackball_state *user_trackball; Bool button_down_p; int last_view, target_view; GLfloat view_x, view_y; int view_steps, view_tick; Bool auto_tracking_p; int track_tick; GLuint *dlists; # ifdef HAVE_TEXTURE GLuint chrome_texture; GLuint toast_texture; # endif int nfloaters; floater *floaters; } toaster_configuration; static toaster_configuration *bps = NULL; static GLfloat speed; static int ntoasters; static int nslices; static int do_texture; static XrmOptionDescRec opts[] = { { "-speed", ".speed", XrmoptionSepArg, 0 }, { "-ntoasters", ".ntoasters", XrmoptionSepArg, 0 }, { "-nslices", ".nslices", XrmoptionSepArg, 0 }, {"-texture", ".texture", XrmoptionNoArg, "True" }, {"+texture", ".texture", XrmoptionNoArg, "False" }, }; static argtype vars[] = { {&speed, "speed", "Speed", DEF_SPEED, t_Float}, {&ntoasters, "ntoasters", "Count", DEF_NTOASTERS, t_Int}, {&nslices, "nslices", "Count", DEF_NSLICES, t_Int}, {&do_texture, "texture", "Texture", DEF_TEXTURE, t_Bool}, }; ENTRYPOINT ModeSpecOpt toasters_opts = {countof(opts), opts, countof(vars), vars, NULL}; static void reset_floater (ModeInfo *mi, floater *f) { /* toaster_configuration *bp = &bps[MI_SCREEN(mi)]; */ GLfloat n = GRID_SIZE/2.0; GLfloat n2 = GRID_DEPTH/2.0; GLfloat delta = GRID_SIZE * speed / 200.0; f->dx = 0; f->dy = 0; f->dz = delta; f->dz += BELLRAND(delta) - delta/3; if (! (random() % 5)) { f->dx += (BELLRAND(delta*2) - delta); f->dy += (BELLRAND(delta*2) - delta); } if (! (random() % 40)) f->dz *= 10; /* occasional speedy one */ f->x = frand(n) - n/2; f->y = frand(n) - n/2; f->z = -n2 - frand(delta * 4); if (f->toaster_p) { f->loaded = 0; f->knob_pos = frand(180) - 90; f->handle_pos = ((random() & 1) ? 0.0 : 1.0); if (f->handle_pos > 0.8 && (! (random() % 5))) f->loaded = (random() & 3); /* let's toast! */ } else { if (! (random() % 10)) f->toast_type = 1; /* toast_bitten */ } } static void tick_floater (ModeInfo *mi, floater *f) { toaster_configuration *bp = &bps[MI_SCREEN(mi)]; GLfloat n1 = GRID_DEPTH/2.0; GLfloat n2 = GRID_SIZE*4; if (bp->button_down_p) return; f->x += f->dx; f->y += f->dy; f->z += f->dz; if (! (random() % 50000)) /* sudden gust of gravity */ f->dy -= 2.8; if (f->x < -n2 || f->x > n2 || f->y < -n2 || f->y > n2 || f->z > n1) reset_floater (mi, f); } static void auto_track_init (ModeInfo *mi) { toaster_configuration *bp = &bps[MI_SCREEN(mi)]; bp->last_view = (random() % 2); bp->target_view = bp->last_view + 2; bp->view_x = nice_views[bp->last_view].x; bp->view_y = nice_views[bp->last_view].y; bp->view_steps = 100; bp->view_tick = 0; bp->auto_tracking_p = True; } static void auto_track (ModeInfo *mi) { toaster_configuration *bp = &bps[MI_SCREEN(mi)]; if (bp->button_down_p) return; /* if we're not moving, maybe start moving. Otherwise, do nothing. */ if (! bp->auto_tracking_p) { if (++bp->track_tick < 200/speed) return; bp->track_tick = 0; if (! (random() % 5)) bp->auto_tracking_p = True; else return; } { GLfloat ox = nice_views[bp->last_view].x; GLfloat oy = nice_views[bp->last_view].y; GLfloat tx = nice_views[bp->target_view].x; GLfloat ty = nice_views[bp->target_view].y; /* move from A to B with sinusoidal deltas, so that it doesn't jerk to a stop. */ GLfloat th = sin ((M_PI / 2) * (double) bp->view_tick / bp->view_steps); bp->view_x = (ox + ((tx - ox) * th)); bp->view_y = (oy + ((ty - oy) * th)); bp->view_tick++; if (bp->view_tick >= bp->view_steps) { bp->view_tick = 0; bp->view_steps = (350.0 / speed); bp->last_view = bp->target_view; bp->target_view = (random() % (countof(nice_views) - 2)) + 2; bp->auto_tracking_p = False; } } } /* Window management, etc */ ENTRYPOINT void reshape_toasters (ModeInfo *mi, int width, int height) { GLfloat h = (GLfloat) height / (GLfloat) width; glViewport (0, 0, (GLint) width, (GLint) height); glMatrixMode(GL_PROJECTION); glLoadIdentity(); gluPerspective (40.0, 1/h, 1.0, 250); glMatrixMode(GL_MODELVIEW); glLoadIdentity(); gluLookAt( 0.0, 2.0, 30.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0); # ifdef HAVE_MOBILE /* Keep it the same relative size when rotated. */ { int o = (int) current_device_rotation(); if (o != 0 && o != 180 && o != -180) glScalef (1/h, 1/h, 1/h); } # endif glClear(GL_COLOR_BUFFER_BIT); } ENTRYPOINT Bool toasters_handle_event (ModeInfo *mi, XEvent *event) { toaster_configuration *bp = &bps[MI_SCREEN(mi)]; if (gltrackball_event_handler (event, bp->user_trackball, MI_WIDTH (mi), MI_HEIGHT (mi), &bp->button_down_p)) return True; return False; } #ifdef HAVE_TEXTURE static void load_textures (ModeInfo *mi) { toaster_configuration *bp = &bps[MI_SCREEN(mi)]; XImage *xi; xi = xpm_to_ximage (mi->dpy, mi->xgwa.visual, mi->xgwa.colormap, chromesphere_xpm); clear_gl_error(); #ifndef HAVE_JWZGLES /* No SPHERE_MAP yet */ glGenTextures (1, &bp->chrome_texture); glBindTexture (GL_TEXTURE_2D, bp->chrome_texture); glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); glPixelStorei (GL_UNPACK_ALIGNMENT, 1); glTexImage2D (GL_TEXTURE_2D, 0, GL_RGBA, xi->width, xi->height, 0, GL_RGBA, # ifndef USE_IPHONE GL_UNSIGNED_INT_8_8_8_8_REV, # else GL_UNSIGNED_BYTE, # endif xi->data); check_gl_error("texture"); XDestroyImage (xi); xi = 0; #endif xi = xpm_to_ximage (mi->dpy, mi->xgwa.visual, mi->xgwa.colormap, toast_xpm); glGenTextures (1, &bp->toast_texture); glBindTexture (GL_TEXTURE_2D, bp->toast_texture); glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP); glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP); glPixelStorei (GL_UNPACK_ALIGNMENT, 1); glTexImage2D (GL_TEXTURE_2D, 0, GL_RGBA, xi->width, xi->height, 0, GL_RGBA, # ifndef USE_IPHONE GL_UNSIGNED_INT_8_8_8_8_REV, # else GL_UNSIGNED_BYTE, # endif xi->data); check_gl_error("texture"); XDestroyImage (xi); xi = 0; } #endif /* HAVE_TEXTURE */ ENTRYPOINT void init_toasters (ModeInfo *mi) { toaster_configuration *bp; int wire = MI_IS_WIREFRAME(mi); int i; if (!bps) { bps = (toaster_configuration *) calloc (MI_NUM_SCREENS(mi), sizeof (toaster_configuration)); if (!bps) { fprintf(stderr, "%s: out of memory\n", progname); exit(1); } } bp = &bps[MI_SCREEN(mi)]; bp->glx_context = init_GL(mi); reshape_toasters (mi, MI_WIDTH(mi), MI_HEIGHT(mi)); glShadeModel(GL_SMOOTH); glEnable(GL_DEPTH_TEST); glEnable(GL_NORMALIZE); glEnable(GL_CULL_FACE); if (!wire) { GLfloat pos[4] = {0.4, 0.2, 0.4, 0.0}; /* GLfloat amb[4] = {0.0, 0.0, 0.0, 1.0};*/ GLfloat amb[4] = {0.2, 0.2, 0.2, 1.0}; GLfloat dif[4] = {1.0, 1.0, 1.0, 1.0}; GLfloat spc[4] = {1.0, 1.0, 1.0, 1.0}; glEnable(GL_LIGHTING); glEnable(GL_LIGHT0); glEnable(GL_DEPTH_TEST); glEnable(GL_CULL_FACE); glLightfv(GL_LIGHT0, GL_POSITION, pos); glLightfv(GL_LIGHT0, GL_AMBIENT, amb); glLightfv(GL_LIGHT0, GL_DIFFUSE, dif); glLightfv(GL_LIGHT0, GL_SPECULAR, spc); } # ifdef HAVE_TEXTURE if (!wire && do_texture) load_textures (mi); # endif bp->user_trackball = gltrackball_init (False); auto_track_init (mi); bp->dlists = (GLuint *) calloc (countof(all_objs)+1, sizeof(GLuint)); for (i = 0; i < countof(all_objs); i++) bp->dlists[i] = glGenLists (1); for (i = 0; i < countof(all_objs); i++) { const struct gllist *gll = *all_objs[i]; glNewList (bp->dlists[i], GL_COMPILE); glMatrixMode(GL_MODELVIEW); glPushMatrix(); glMatrixMode(GL_TEXTURE); glPushMatrix(); glMatrixMode(GL_MODELVIEW); glRotatef (-90, 1, 0, 0); glRotatef (180, 0, 0, 1); glScalef (6, 6, 6); glBindTexture (GL_TEXTURE_2D, 0); glDisable (GL_TEXTURE_2D); if (i == BASE_TOASTER) { GLfloat color[4] = {1.00, 1.00, 1.00, 1.00}; GLfloat spec[4] = {1.00, 1.00, 1.00, 1.0}; GLfloat shiny = 20.0; glMaterialfv (GL_FRONT_AND_BACK, GL_AMBIENT_AND_DIFFUSE, color); glMaterialfv (GL_FRONT_AND_BACK, GL_SPECULAR, spec); glMaterialf (GL_FRONT_AND_BACK, GL_SHININESS, shiny); #ifdef HAVE_TEXTURE if (do_texture) { #ifndef HAVE_JWZGLES /* No SPHERE_MAP yet */ glEnable (GL_TEXTURE_2D); glEnable (GL_TEXTURE_GEN_S); glEnable (GL_TEXTURE_GEN_T); glBindTexture (GL_TEXTURE_2D, bp->chrome_texture); glTexGeni(GL_S, GL_TEXTURE_GEN_MODE, GL_SPHERE_MAP); glTexGeni(GL_T, GL_TEXTURE_GEN_MODE, GL_SPHERE_MAP); #endif } # endif } else if (i == TOAST || i == TOAST_BITTEN) { GLfloat color[4] = {0.80, 0.80, 0.00, 1.0}; GLfloat spec[4] = {0.00, 0.00, 0.00, 1.0}; GLfloat shiny = 0.0; glMaterialfv (GL_FRONT_AND_BACK, GL_AMBIENT_AND_DIFFUSE, color); glMaterialfv (GL_FRONT_AND_BACK, GL_SPECULAR, spec); glMaterialf (GL_FRONT_AND_BACK, GL_SHININESS, shiny); #ifdef HAVE_TEXTURE if (do_texture) { glEnable (GL_TEXTURE_2D); glEnable (GL_TEXTURE_GEN_S); glEnable (GL_TEXTURE_GEN_T); glBindTexture (GL_TEXTURE_2D, bp->toast_texture); glTexGeni(GL_S, GL_TEXTURE_GEN_MODE, GL_OBJECT_LINEAR); glTexGeni(GL_T, GL_TEXTURE_GEN_MODE, GL_OBJECT_LINEAR); } # endif glMatrixMode(GL_TEXTURE); glTranslatef(0.5, 0.5, 0); glMatrixMode(GL_MODELVIEW); } else if (i == SLOTS || i == HANDLE_SLOT) { GLfloat color[4] = {0.30, 0.30, 0.40, 1.0}; GLfloat spec[4] = {0.40, 0.40, 0.70, 1.0}; GLfloat shiny = 128.0; glMaterialfv (GL_FRONT_AND_BACK, GL_AMBIENT_AND_DIFFUSE, color); glMaterialfv (GL_FRONT_AND_BACK, GL_SPECULAR, spec); glMaterialf (GL_FRONT_AND_BACK, GL_SHININESS, shiny); } else if (i == HANDLE) { GLfloat color[4] = {0.80, 0.10, 0.10, 1.0}; GLfloat spec[4] = {1.00, 1.00, 1.00, 1.0}; GLfloat shiny = 20.0; glMaterialfv (GL_FRONT_AND_BACK, GL_AMBIENT_AND_DIFFUSE, color); glMaterialfv (GL_FRONT_AND_BACK, GL_SPECULAR, spec); glMaterialf (GL_FRONT_AND_BACK, GL_SHININESS, shiny); } else if (i == KNOB) { GLfloat color[4] = {0.80, 0.10, 0.10, 1.0}; GLfloat spec[4] = {0.00, 0.00, 0.00, 1.0}; GLfloat shiny = 0.0; glMaterialfv (GL_FRONT_AND_BACK, GL_AMBIENT_AND_DIFFUSE, color); glMaterialfv (GL_FRONT_AND_BACK, GL_SPECULAR, spec); glMaterialf (GL_FRONT_AND_BACK, GL_SHININESS, shiny); } else if (i == JET || i == JET_WING) { GLfloat color[4] = {0.70, 0.70, 0.70, 1.0}; GLfloat spec[4] = {1.00, 1.00, 1.00, 1.0}; GLfloat shiny = 20.0; glMaterialfv (GL_FRONT_AND_BACK, GL_AMBIENT_AND_DIFFUSE, color); glMaterialfv (GL_FRONT_AND_BACK, GL_SPECULAR, spec); glMaterialf (GL_FRONT_AND_BACK, GL_SHININESS, shiny); } else if (i == BASE) { GLfloat color[4] = {0.50, 0.50, 0.50, 1.0}; GLfloat spec[4] = {1.00, 1.00, 1.00, 1.0}; GLfloat shiny = 20.0; glMaterialfv (GL_FRONT_AND_BACK, GL_AMBIENT_AND_DIFFUSE, color); glMaterialfv (GL_FRONT_AND_BACK, GL_SPECULAR, spec); glMaterialf (GL_FRONT_AND_BACK, GL_SHININESS, shiny); } else { GLfloat color[4] = {1.00, 1.00, 1.00, 1.00}; GLfloat spec[4] = {1.00, 1.00, 1.00, 1.0}; GLfloat shiny = 128.0; glMaterialfv (GL_FRONT_AND_BACK, GL_AMBIENT_AND_DIFFUSE, color); glMaterialfv (GL_FRONT_AND_BACK, GL_SPECULAR, spec); glMaterialf (GL_FRONT_AND_BACK, GL_SHININESS, shiny); } renderList (gll, wire); glMatrixMode(GL_TEXTURE); glPopMatrix(); glMatrixMode(GL_MODELVIEW); glPopMatrix(); glEndList (); } bp->nfloaters = ntoasters + nslices; bp->floaters = (floater *) calloc (bp->nfloaters, sizeof (floater)); for (i = 0; i < bp->nfloaters; i++) { floater *f = &bp->floaters[i]; /* arrange the list so that half the toasters are in front of bread, and half are behind. */ f->toaster_p = ((i < ntoasters / 2) || (i >= (nslices + (ntoasters / 2)))); reset_floater (mi, f); /* Position the first generation randomly, but make sure they aren't on screen yet (until we rotate the view into position.) */ { GLfloat min = -GRID_DEPTH/2; GLfloat max = GRID_DEPTH/3.5; f->z = frand (max - min) + min; } } } static void draw_origin (ModeInfo *mi) { # ifdef DEBUG /* toaster_configuration *bp = &bps[MI_SCREEN(mi)];*/ if (!MI_IS_WIREFRAME(mi)) glDisable(GL_LIGHTING); if (!MI_IS_WIREFRAME(mi) && do_texture) glDisable(GL_TEXTURE_2D); glPushMatrix(); glScalef (5, 5, 5); glBegin(GL_LINES); glVertex3f(-1, 0, 0); glVertex3f(1, 0, 0); glVertex3f(0, -1, 0); glVertex3f(0, 1, 0); glVertex3f(0, 0, -1); glVertex3f(0, 0, 1); glEnd(); glPopMatrix(); if (!MI_IS_WIREFRAME(mi)) glEnable(GL_LIGHTING); if (!MI_IS_WIREFRAME(mi) && do_texture) glEnable(GL_TEXTURE_2D); # endif /* DEBUG */ } static void draw_grid (ModeInfo *mi) { # ifdef DEBUG /* toaster_configuration *bp = &bps[MI_SCREEN(mi)];*/ if (!MI_IS_WIREFRAME(mi)) glDisable(GL_LIGHTING); if (!MI_IS_WIREFRAME(mi) && do_texture) glDisable(GL_TEXTURE_2D); glPushMatrix(); glBegin(GL_LINE_LOOP); glVertex3f(-GRID_SIZE/2, -GRID_SIZE/2, 0); glVertex3f(-GRID_SIZE/2, GRID_SIZE/2, 0); glVertex3f( GRID_SIZE/2, GRID_SIZE/2, 0); glVertex3f( GRID_SIZE/2, -GRID_SIZE/2, 0); glEnd(); glBegin(GL_LINE_LOOP); glVertex3f(-GRID_SIZE/2, GRID_SIZE/2, -GRID_DEPTH/2); glVertex3f(-GRID_SIZE/2, GRID_SIZE/2, GRID_DEPTH/2); glVertex3f( GRID_SIZE/2, GRID_SIZE/2, GRID_DEPTH/2); glVertex3f( GRID_SIZE/2, GRID_SIZE/2, -GRID_DEPTH/2); glEnd(); glBegin(GL_LINE_LOOP); glVertex3f(-GRID_SIZE/2, -GRID_SIZE/2, -GRID_DEPTH/2); glVertex3f(-GRID_SIZE/2, -GRID_SIZE/2, GRID_DEPTH/2); glVertex3f( GRID_SIZE/2, -GRID_SIZE/2, GRID_DEPTH/2); glVertex3f( GRID_SIZE/2, -GRID_SIZE/2, -GRID_DEPTH/2); glEnd(); glBegin(GL_LINES); glVertex3f(-GRID_SIZE/2, -GRID_SIZE/2, -GRID_DEPTH/2); glVertex3f(-GRID_SIZE/2, GRID_SIZE/2, -GRID_DEPTH/2); glVertex3f(-GRID_SIZE/2, -GRID_SIZE/2, GRID_DEPTH/2); glVertex3f(-GRID_SIZE/2, GRID_SIZE/2, GRID_DEPTH/2); glVertex3f( GRID_SIZE/2, -GRID_SIZE/2, -GRID_DEPTH/2); glVertex3f( GRID_SIZE/2, GRID_SIZE/2, -GRID_DEPTH/2); glVertex3f( GRID_SIZE/2, -GRID_SIZE/2, GRID_DEPTH/2); glVertex3f( GRID_SIZE/2, GRID_SIZE/2, GRID_DEPTH/2); glEnd(); glPopMatrix(); if (!MI_IS_WIREFRAME(mi)) glEnable(GL_LIGHTING); if (!MI_IS_WIREFRAME(mi) && do_texture) glEnable(GL_TEXTURE_2D); # endif /* DEBUG */ } static void draw_floater (ModeInfo *mi, floater *f) { toaster_configuration *bp = &bps[MI_SCREEN(mi)]; GLfloat n; glFrontFace(GL_CCW); glPushMatrix(); glTranslatef (f->x, f->y, f->z); if (f->toaster_p) { glPushMatrix(); glRotatef (180, 0, 1, 0); glCallList (bp->dlists[BASE_TOASTER]); mi->polygon_count += (*all_objs[BASE_TOASTER])->points / 3; glPopMatrix(); glPushMatrix(); glTranslatef(0, 1.01, 0); n = 0.91; glScalef(n,n,n); glCallList (bp->dlists[SLOTS]); mi->polygon_count += (*all_objs[SLOTS])->points / 3; glPopMatrix(); glPushMatrix(); glRotatef (180, 0, 1, 0); glTranslatef(0, -0.4, -2.38); n = 0.33; glScalef(n,n,n); glCallList (bp->dlists[HANDLE_SLOT]); mi->polygon_count += (*all_objs[HANDLE_SLOT])->points / 3; glPopMatrix(); glPushMatrix(); glTranslatef(0, -1.1, 3); n = 0.3; glScalef (n,n,n); glTranslatef(0, f->handle_pos * 4.8, 0); glCallList (bp->dlists[HANDLE]); mi->polygon_count += (*all_objs[HANDLE])->points / 3; glPopMatrix(); glPushMatrix(); glRotatef (180, 0, 1, 0); glTranslatef(0, -1.1, -3); /* where the handle is */ glTranslatef (1, -0.4, 0); /* down and to the left */ n = 0.08; glScalef (n,n,n); glRotatef (f->knob_pos, 0, 0, 1); glCallList (bp->dlists[KNOB]); mi->polygon_count += (*all_objs[KNOB])->points / 3; glPopMatrix(); glPushMatrix(); glRotatef (180, 0, 1, 0); glTranslatef (0, -2.3, 0); glCallList (bp->dlists[BASE]); mi->polygon_count += (*all_objs[BASE])->points / 3; glPopMatrix(); glPushMatrix(); glTranslatef(-4.8, 0, 0); glCallList (bp->dlists[JET_WING]); mi->polygon_count += (*all_objs[JET_WING])->points / 3; glScalef (0.5, 0.5, 0.5); glTranslatef (-2, -1, 0); glCallList (bp->dlists[JET]); mi->polygon_count += (*all_objs[JET])->points / 3; glPopMatrix(); glPushMatrix(); glTranslatef(4.8, 0, 0); glScalef(-1, 1, 1); glFrontFace(GL_CW); glCallList (bp->dlists[JET_WING]); mi->polygon_count += (*all_objs[JET_WING])->points / 3; glScalef (0.5, 0.5, 0.5); glTranslatef (-2, -1, 0); glCallList (bp->dlists[JET]); mi->polygon_count += (*all_objs[JET])->points / 3; glFrontFace(GL_CCW); glPopMatrix(); if (f->loaded) { glPushMatrix(); glTranslatef(0, 1.01, 0); n = 0.91; glScalef(n,n,n); glRotatef (90, 0, 0, 1); glRotatef (90, 0, 1, 0); glTranslatef(0, 0, -0.95); glTranslatef(0, 0.72, 0); if (f->loaded & 1) { glCallList (bp->dlists[TOAST]); mi->polygon_count += (*all_objs[TOAST])->points / 3; } glTranslatef(0, -1.46, 0); if (f->loaded & 2) { glCallList (bp->dlists[TOAST]); mi->polygon_count += (*all_objs[TOAST])->points / 3; } glPopMatrix(); } } else { glScalef (0.7, 0.7, 0.7); if (f->toast_type == 0) { glCallList (bp->dlists[TOAST]); mi->polygon_count += (*all_objs[TOAST])->points / 3; } else { glCallList (bp->dlists[TOAST_BITTEN]); mi->polygon_count += (*all_objs[TOAST_BITTEN])->points / 3; } } glPopMatrix(); } ENTRYPOINT void draw_toasters (ModeInfo *mi) { toaster_configuration *bp = &bps[MI_SCREEN(mi)]; Display *dpy = MI_DISPLAY(mi); Window window = MI_WINDOW(mi); int i; if (!bp->glx_context) return; glXMakeCurrent(MI_DISPLAY(mi), MI_WINDOW(mi), *(bp->glx_context)); glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glPushMatrix (); glRotatef(current_device_rotation(), 0, 0, 1); glRotatef(bp->view_x, 1, 0, 0); glRotatef(bp->view_y, 0, 1, 0); /* 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 { floater F; F.toaster_p = 0; F.toast_type = 1; F.handle_pos = 0; F.knob_pos = -90; F.loaded = 3; F.x = F.y = F.z = 0; F.dx = F.dy = F.dz = 0; glScalef(2,2,2); if (!MI_IS_WIREFRAME(mi)) glDisable(GL_LIGHTING); if (!MI_IS_WIREFRAME(mi) && do_texture) glDisable(GL_TEXTURE_2D); glBegin(GL_LINES); glVertex3f(-10, 0, 0); glVertex3f(10, 0, 0); glVertex3f(0, -10, 0); glVertex3f(0, 10, 0); glVertex3f(0, 0, -10); glVertex3f(0, 0, 10); glEnd(); if (!MI_IS_WIREFRAME(mi)) glEnable(GL_LIGHTING); if (!MI_IS_WIREFRAME(mi) && do_texture) glEnable(GL_TEXTURE_2D); draw_floater (mi, &F); glPopMatrix (); if (mi->fps_p) do_fps (mi); glFinish(); glXSwapBuffers(dpy, window); return; } #endif glScalef (0.5, 0.5, 0.5); draw_origin (mi); glTranslatef (0, 0, -GRID_DEPTH/2.5); draw_grid (mi); mi->polygon_count = 0; for (i = 0; i < bp->nfloaters; i++) { floater *f = &bp->floaters[i]; draw_floater (mi, f); tick_floater (mi, f); } auto_track (mi); glPopMatrix (); if (mi->fps_p) do_fps (mi); glFinish(); glXSwapBuffers(dpy, window); } XSCREENSAVER_MODULE_2 ("FlyingToasters", flyingtoasters, toasters) #endif /* USE_GL */ xscreensaver-5.36/hacks/glx/toaster.c000664 000767 000024 00000046034 12701612217 017656 0ustar00jwzstaff000000 000000 /* Generated from "toaster.dxf" on Aug-22-2014. Smoothed vertex normals. Normalized to unit bounding box. */ #include "gllist.h" static const float toaster_data[] = { -0.316307,-0.948657,0,-0.283103,-0.467335,0.222248, -0.101389,-0.994724,-0.015639,-0.234168,-0.483652,-0.380912, -0.194699,-0.980863,0,-0.234168,-0.483652,0.222248, -0.015849,0.992717,0.119421,-0.001224,0.5,0.222248, -0.130021,0.991469,-0.009119,-0.234168,0.483652,-0.380912, -0.197233,0.97209,0.127042,-0.234168,0.483652,0.222248, -0.104394,-0.808168,0.579627,-0.17891,-0.455225,0.279296, -0.132836,-0.912766,0.386282,-0.234168,-0.483652,0.222248, -0.012111,-0.87373,0.486261,-0.001224,-0.5,0.222248, -0.999999,0,-0.001399,-0.345926,0,-0.380912, -0.974495,-0.224383,-0.003566,-0.299415,-0.418387,-0.380912, -0.996185,-0.087205,0.003347,-0.331315,-0.208938,0.222248, 0.996185,0.087205,0.003347,0.331315,0.208938,0.222248, 0.996185,-0.087205,0.003347,0.331315,-0.208938,0.222248, 0.999999,0,-0.001399,0.345926,0,-0.380912, -0.000242,0.999959,-0.009047,-0.001224,0.5,0.222248, 0.129779,0.991501,-0.009119,0.234168,0.483652,-0.380912, -0.130021,0.991469,-0.009119,-0.234168,0.483652,-0.380912, -0.154648,-0.973224,0.170058,-0.234168,-0.483652,0.222248, -0.101389,-0.994724,-0.015639,-0.234168,-0.483652,-0.380912, -0.010495,-0.997502,0.069855,-0.001224,-0.5,0.222248, 0.967433,0.253065,0.005626,0.292931,0.437844,-0.141156, 0.965122,0.261801,0,0.299415,0.418387,0.222248, 0.979828,0.199828,-0.002375,0.299415,0.418387,-0.380912, 0.965122,0.261801,0,0.299415,0.418387,0.222248, 0.967433,0.253065,0.005626,0.292931,0.437844,-0.141156, 0.977686,0.209863,0.009409,0.283103,0.467335,0.222248, 0.977686,0.209863,0.009409,0.283103,0.467335,0.222248, 0.967433,0.253065,0.005626,0.292931,0.437844,-0.141156, 0.977686,0.209863,0.009409,0.288017,0.45259,0.040546, 0.316307,0.948657,0,0.283103,0.467335,0.222248, 0.316307,0.948657,0,0.283103,0.467335,-0.380912, 0.235633,0.971842,0,0.234168,0.483652,0.222248, 0.94871,0.316149,-0,0.283103,0.467335,-0.380912, 0.967433,0.253065,0.005626,0.292931,0.437844,-0.141156, 0.979828,0.199828,-0.002375,0.299415,0.418387,-0.380912, 0.967433,0.253065,0.005626,0.292931,0.437844,-0.141156, 0.94871,0.316149,-0,0.283103,0.467335,-0.380912, 0.977686,0.209863,0.009409,0.288017,0.45259,0.040546, 0.977686,0.209863,0.009409,0.288017,0.45259,0.040546, 0.94871,0.316149,-0,0.283103,0.467335,-0.380912, 0.977686,0.209863,0.009409,0.283103,0.467335,0.222248, 0,0.227898,0.973685,0.054097,0.251982,0.357142, 0,0.227898,0.973685,-0.054097,0.251982,0.357142, 0,-0,1,0.05339,0,0.380912, -0.743012,0.091749,0.66296,-0.257344,0.251982,0.320299, -0.817604,0.124528,0.562153,-0.31207,0.335293,0.222248, -0.809725,0.0624,0.583482,-0.331315,0.208938,0.222248, -0.817604,0.124528,0.562153,-0.31207,0.335293,0.222248, -0.743012,0.091749,0.66296,-0.257344,0.251982,0.320299, -0.680969,0.208836,0.701903,-0.299415,0.418387,0.222248, 0,0,1,-0.31207,0.335293,0.222248, 0,0,1,-0.299415,0.418387,0.222248, 0,0,1,-0.305628,0.377591,0.222248, 0.490312,-0.197001,0.84899,0.257344,-0.251982,0.320299, 0.439235,-0,0.898372,0.166895,0,0.380912, 0.369417,-0.202622,0.906904,0.166895,-0.251982,0.357142, 0.479243,0.170617,0.860939,0.257344,0.251982,0.320299, 0.344013,0.237244,0.908499,0.166895,0.251982,0.357142, 0.439235,-0,0.898372,0.166895,0,0.380912, 0.806304,-0.04159,0.590037,0.331315,-0.208938,0.222248, 0.743012,0.091749,0.66296,0.257344,0.251982,0.320299, 0.726863,-0.090005,0.680859,0.257344,-0.251982,0.320299, 0.743012,0.091749,0.66296,0.257344,0.251982,0.320299, 0.806304,-0.04159,0.590037,0.331315,-0.208938,0.222248, 0.809725,0.062401,0.583482,0.331315,0.208938,0.222248, 0,-0,1,0.05339,0,0.380912, 0,0.227898,0.973685,-0.054097,0.251982,0.357142, 0,-0,1,-0.05339,0,0.380912, -0.988599,0.150571,-0,-0.31207,0.335293,0.222248, -0.979828,0.199828,-0.002375,-0.299415,0.418387,-0.380912, -0.996185,0.087204,0.003347,-0.331315,0.208938,0.222248, -0.979828,0.199828,-0.002375,-0.299415,0.418387,-0.380912, -0.988599,0.150571,-0,-0.31207,0.335293,0.222248, -0.988599,0.150572,-0,-0.305628,0.377591,0.222248, -0.979828,0.199828,-0.002375,-0.299415,0.418387,-0.380912, -0.988599,0.150572,-0,-0.305628,0.377591,0.222248, -0.965122,0.261802,0,-0.299415,0.418387,0.222248, -0.594501,-0.161247,0.787761,-0.257344,-0.251982,0.320299, -0.757873,-0.17819,0.627596,-0.299415,-0.418387,0.222248, -0.563931,-0.285379,0.774946,-0.283103,-0.467335,0.222248, -0.191789,-0.715866,0.671382,-0.17891,-0.455225,0.279296, -0.34735,-0.55882,0.753039,-0.283103,-0.467335,0.222248, -0.156515,-0.815104,0.55777,-0.234168,-0.483652,0.222248, -0.353973,-0.479978,0.802698,-0.17891,-0.455225,0.279296, -0.490312,-0.197001,0.84899,-0.257344,-0.251982,0.320299, -0.476561,-0.458788,0.749935,-0.283103,-0.467335,0.222248, -0.965122,0.261802,0,-0.299415,0.418387,0.222248, -0.94871,0.316149,0,-0.286127,0.45826,0.110422, -0.979828,0.199828,-0.002375,-0.299415,0.418387,-0.380912, -0.94871,0.316149,0,-0.286127,0.45826,0.110422, -0.965122,0.261802,0,-0.299415,0.418387,0.222248, -0.948709,0.316149,0,-0.283103,0.467335,0.222248, 0.812952,-0.581784,0.025229,-0.286127,0.45826,0.110422, 0.812952,-0.581784,0.025229,-0.283103,0.467335,0.222248, 0.812952,-0.581784,0.025229,-0.285423,0.460375,0.136473, -0.94871,0.316149,0,-0.286127,0.45826,0.110422, -0.94871,0.316149,-0,-0.283103,0.467335,-0.380912, -0.979828,0.199828,-0.002375,-0.299415,0.418387,-0.380912, -0.94871,0.316149,-0,-0.283103,0.467335,-0.380912, -0.94871,0.316149,0,-0.286127,0.45826,0.110422, -0.94871,0.316149,-0,-0.285423,0.460375,0.136473, -0.94871,0.316149,-0,-0.283103,0.467335,-0.380912, -0.94871,0.316149,-0,-0.285423,0.460375,0.136473, -0.948709,0.316149,0,-0.283103,0.467335,0.222248, -0.38567,0.427053,0.817853,-0.231791,0.418387,0.27573, -0.241461,0.701279,0.670749,-0.234168,0.483652,0.222248, -0.205338,0.615841,0.760642,-0.283103,0.467335,0.222248, 0,0.78664,0.617411,0.054097,0.455225,0.279296, -0.000123,0.822299,0.569056,-0.001224,0.5,0.222248, 0,0.78664,0.617411,-0.054097,0.455225,0.279296, 0,-0.78664,0.617411,0.054097,-0.455225,0.279296, 0,-0.78664,0.617411,-0.054097,-0.455225,0.279296, -0.000123,-0.822299,0.569056,-0.001224,-0.5,0.222248, 0,-0.664991,0.746852,-0.054097,-0.455225,0.279296, 0,-0.593633,0.804736,0.054097,-0.455225,0.279296, 0,-0.357681,0.933844,0,-0.455225,0.279296, 0,-0.357681,0.933844,0,-0.455225,0.279296, 0,-0.254425,0.967093,-0.054097,-0.251982,0.357142, 0,-0.357681,0.933844,-0.054097,-0.455225,0.279296, 0,-0.254425,0.967093,-0.054097,-0.251982,0.357142, 0,-0.357681,0.933844,0,-0.455225,0.279296, 0,-0.357681,0.933844,0.054097,-0.455225,0.279296, -0.369417,-0.202622,0.906904,-0.166895,-0.251982,0.357142, -0.490312,-0.197001,0.84899,-0.257344,-0.251982,0.320299, -0.390635,-0.324541,0.861439,-0.17891,-0.455225,0.279296, 0,0.78664,0.617411,-0.054097,0.455225,0.279296, -0.000123,0.822299,0.569056,-0.001224,0.5,0.222248, -0.171632,0.762512,0.623793,-0.17891,0.455225,0.279296, -0.42641,0.391747,0.815297,-0.231791,0.418387,0.27573, -0.680969,0.208836,0.701903,-0.299415,0.418387,0.222248, -0.662215,0.119119,0.739785,-0.257344,0.251982,0.320299, 0.476561,-0.458788,0.749935,0.283103,-0.467335,0.222248, 0.490312,-0.197001,0.84899,0.257344,-0.251982,0.320299, 0.353972,-0.479978,0.802698,0.17891,-0.455225,0.279296, 0.979828,0.199828,-0.002375,0.299415,0.418387,-0.380912, 0.988599,0.150572,0,0.318731,0.29156,0.222248, 0.996185,0.087205,0.003347,0.331315,0.208938,0.222248, 0.988599,0.150572,0,0.318731,0.29156,0.222248, 0.979828,0.199828,-0.002375,0.299415,0.418387,-0.380912, 0.988599,0.150571,0,0.310276,0.347076,0.222248, 0.988599,0.150571,0,0.310276,0.347076,0.222248, 0.979828,0.199828,-0.002375,0.299415,0.418387,-0.380912, 0.965122,0.261801,0,0.299415,0.418387,0.222248, -0.252774,0.582577,0.77247,-0.17891,0.455225,0.279296, -0.323984,0.592558,0.737502,-0.234168,0.483652,0.222248, -0.42641,0.391747,0.815297,-0.231791,0.418387,0.27573, 0,-0.227898,0.973685,0.054097,-0.251982,0.357142, 0,-0,1,0.05339,0,0.380912, 0,-0.254425,0.967093,-0.054097,-0.251982,0.357142, 0.979828,0.199828,-0.002375,0.299415,0.418387,-0.380912, 0.996185,0.087205,0.003347,0.331315,0.208938,0.222248, 0.999999,0,-0.001399,0.345926,0,-0.380912, 0.141954,-0.989813,-0.010959,0.234168,-0.483652,-0.380912, 0,-0.999633,-0.027095,0.008103,-0.487773,-0.228855, -0.101389,-0.994724,-0.015639,-0.234168,-0.483652,-0.380912, 0,-0.999633,-0.027095,0.008103,-0.487773,-0.228855, 0.141954,-0.989813,-0.010959,0.234168,-0.483652,-0.380912, 0.027733,-0.999483,-0.016268,0.054066,-0.49616,0.080576, 0,-0.999633,-0.027095,0.008103,-0.487773,-0.228855, 0.027733,-0.999483,-0.016268,0.054066,-0.49616,0.080576, 0,-0.999633,-0.027095,0.008103,-0.49662,0.097563, 0,-0.999633,-0.027095,0.008103,-0.49662,0.097563, 0.027733,-0.999483,-0.016268,0.054066,-0.49616,0.080576, -0.000145,-0.999868,-0.016274,-0.001224,-0.5,0.222248, 0,-0.999633,-0.027095,0.008103,-0.49662,0.097563, -0.000145,-0.999868,-0.016274,-0.001224,-0.5,0.222248, -0,-0.999633,-0.027095,-0.017747,-0.49662,0.097563, -0.101389,-0.994724,-0.015639,-0.234168,-0.483652,-0.380912, -0,-0.999633,-0.027095,-0.017747,-0.49662,0.097563, -0.000145,-0.999868,-0.016274,-0.001224,-0.5,0.222248, -0,-0.999633,-0.027095,-0.017747,-0.49662,0.097563, -0.101389,-0.994724,-0.015639,-0.234168,-0.483652,-0.380912, 0,-0.999633,-0.027095,-0.017747,-0.487773,-0.228855, 0,-0.999633,-0.027095,-0.017747,-0.487773,-0.228855, -0.101389,-0.994724,-0.015639,-0.234168,-0.483652,-0.380912, 0,-0.999633,-0.027095,0.008103,-0.487773,-0.228855, -0.806304,-0.04159,0.590037,-0.331315,-0.208938,0.222248, -0.757873,-0.17819,0.627596,-0.299415,-0.418387,0.222248, -0.726863,-0.090005,0.680859,-0.257344,-0.251982,0.320299, -0.104394,-0.808168,0.579627,-0.17891,-0.455225,0.279296, -0.000123,-0.822299,0.569056,-0.001224,-0.5,0.222248, 0,-0.78664,0.617411,-0.054097,-0.455225,0.279296, 0,0.357681,0.933844,0.054097,0.455225,0.279296, 0,0.357681,0.933844,-0.054097,0.455225,0.279296, 0,0.227898,0.973685,-0.054097,0.251982,0.357142, -0.344013,0.237244,0.908499,-0.166895,0.251982,0.357142, -0.42641,0.391747,0.815297,-0.231791,0.418387,0.27573, -0.479243,0.170617,0.860939,-0.257344,0.251982,0.320299, -0.344013,0.237244,0.908499,-0.166895,0.251982,0.357142, -0.368596,0.450419,0.813179,-0.17891,0.455225,0.279296, -0.42641,0.391747,0.815297,-0.231791,0.418387,0.27573, 0.132836,-0.983007,0.126693,0.234168,-0.483652,0.222248, 0.027733,-0.999483,-0.016268,0.054066,-0.49616,0.080576, 0.141954,-0.989813,-0.010959,0.234168,-0.483652,-0.380912, 0.027733,-0.999483,-0.016268,0.054066,-0.49616,0.080576, 0.132836,-0.983007,0.126693,0.234168,-0.483652,0.222248, 0.010143,-0.997511,0.069776,-0.001224,-0.5,0.222248, 0,0,-1,-0.299415,0.418387,-0.380912, 0,0,-1,-0.299415,-0.418387,-0.380912, 0,0,-1,-0.345926,0,-0.380912, 0,0,-1,-0.299415,-0.418387,-0.380912, 0,0,-1,-0.299415,0.418387,-0.380912, 0,0,-1,-0.283103,0.467335,-0.380912, 0,0,-1,-0.299415,-0.418387,-0.380912, 0,0,-1,-0.283103,0.467335,-0.380912, 0,0,-1,-0.283103,-0.467335,-0.380912, 0,0,-1,-0.283103,-0.467335,-0.380912, 0,0,-1,-0.283103,0.467335,-0.380912, 0,0,-1,-0.234168,0.483652,-0.380912, 0,0,-1,-0.283103,-0.467335,-0.380912, 0,0,-1,-0.234168,0.483652,-0.380912, 0,0,-1,-0.234168,-0.483652,-0.380912, 0,0,-1,-0.234168,-0.483652,-0.380912, 0,0,-1,-0.234168,0.483652,-0.380912, 0,0,-1,0.234168,0.483652,-0.380912, 0,0,-1,-0.234168,-0.483652,-0.380912, 0,0,-1,0.234168,0.483652,-0.380912, 0,0,-1,0.234168,-0.483652,-0.380912, 0,0,-1,0.234168,-0.483652,-0.380912, 0,0,-1,0.234168,0.483652,-0.380912, 0,0,-1,0.283103,-0.467335,-0.380912, 0,0,-1,0.283103,-0.467335,-0.380912, 0,0,-1,0.234168,0.483652,-0.380912, 0,0,-1,0.283103,0.467335,-0.380912, 0,0,-1,0.283103,-0.467335,-0.380912, 0,0,-1,0.283103,0.467335,-0.380912, 0,0,-1,0.299415,-0.418387,-0.380912, 0,0,-1,0.299415,-0.418387,-0.380912, 0,0,-1,0.283103,0.467335,-0.380912, 0,0,-1,0.299415,0.418387,-0.380912, 0,0,-1,0.299415,-0.418387,-0.380912, 0,0,-1,0.299415,0.418387,-0.380912, 0,0,-1,0.345926,0,-0.380912, -0.466133,0.34121,0.816269,-0.231791,0.418387,0.27573, -0.60748,0.202437,0.768106,-0.283103,0.467335,0.222248, -0.680969,0.208836,0.701903,-0.299415,0.418387,0.222248, 0.490312,-0.197001,0.84899,0.257344,-0.251982,0.320299, 0.369417,-0.202622,0.906904,0.166895,-0.251982,0.357142, 0.390635,-0.324541,0.861439,0.17891,-0.455225,0.279296, 0.191639,-0.715981,0.671301,0.17891,-0.455225,0.279296, 0.156214,-0.815296,0.557574,0.234168,-0.483652,0.222248, 0.34735,-0.55882,0.753039,0.283103,-0.467335,0.222248, 0.594501,-0.161247,0.787761,0.257344,-0.251982,0.320299, 0.563931,-0.285379,0.774946,0.283103,-0.467335,0.222248, 0.757873,-0.17819,0.627596,0.299415,-0.418387,0.222248, 0,0.357681,0.933844,0.054097,0.455225,0.279296, 0,0.227898,0.973685,-0.054097,0.251982,0.357142, 0,0.227898,0.973685,0.054097,0.251982,0.357142, -0.974495,-0.224383,-0.003566,-0.299415,-0.418387,-0.380912, -0.94871,-0.316149,0,-0.283103,-0.467335,0.222248, -0.972186,-0.234211,0,-0.299415,-0.418387,0.222248, -0.996185,-0.087205,0.003347,-0.331315,-0.208938,0.222248, -0.974495,-0.224383,-0.003566,-0.299415,-0.418387,-0.380912, -0.972186,-0.234211,0,-0.299415,-0.418387,0.222248, 0,-0,1,0.05339,0,0.380912, 0,-0,1,-0.05339,0,0.380912, 0,-0.254425,0.967093,-0.054097,-0.251982,0.357142, 0,-0.227898,0.973685,0.054097,-0.251982,0.357142, 0,-0.254425,0.967093,-0.054097,-0.251982,0.357142, 0,-0.357681,0.933844,0.054097,-0.455225,0.279296, -0.235866,0.971786,0,-0.234168,0.483652,0.222248, -0.316307,0.948657,0,-0.283103,0.467335,-0.380912, -0.316307,0.948657,0,-0.283103,0.467335,0.222248, 0.974495,-0.224383,-0.003566,0.299415,-0.418387,-0.380912, 0.94871,-0.316149,0,0.283103,-0.467335,0.222248, 0.94871,-0.316149,0,0.283103,-0.467335,-0.380912, 0.196887,0.972176,0.126926,0.234168,0.483652,0.222248, 0.129779,0.991501,-0.009119,0.234168,0.483652,-0.380912, 0.015319,0.99274,0.119299,-0.001224,0.5,0.222248, -0.030578,0.830318,0.55645,-0.17891,0.455225,0.279296, -0.012111,0.87373,0.486261,-0.001224,0.5,0.222248, -0.120094,0.886303,0.447263,-0.234168,0.483652,0.222248, -0.235866,0.971786,0,-0.234168,0.483652,0.222248, -0.130021,0.991469,-0.009119,-0.234168,0.483652,-0.380912, -0.316307,0.948657,0,-0.283103,0.467335,-0.380912, 0.323984,0.592558,0.737502,0.234168,0.483652,0.222248, 0.252774,0.582577,0.77247,0.17891,0.455225,0.279296, 0.42641,0.391747,0.815297,0.231791,0.418387,0.27573, -0.974495,-0.224383,-0.003566,-0.299415,-0.418387,-0.380912, -0.94871,-0.316149,0,-0.283103,-0.467335,-0.380912, -0.94871,-0.316149,0,-0.283103,-0.467335,0.222248, -0.316307,-0.948657,0,-0.283103,-0.467335,0.222248, -0.316307,-0.948657,0,-0.283103,-0.467335,-0.380912, -0.101389,-0.994724,-0.015639,-0.234168,-0.483652,-0.380912, 0,-0.78664,0.617411,0.054097,-0.455225,0.279296, -0.000123,-0.822299,0.569056,-0.001224,-0.5,0.222248, 0.104191,-0.80829,0.579493,0.17891,-0.455225,0.279296, 0.680969,0.208836,0.701903,0.299415,0.418387,0.222248, 0.42641,0.391747,0.815297,0.231791,0.418387,0.27573, 0.662215,0.119119,0.739785,0.257344,0.251982,0.320299, 0.680969,0.208836,0.701903,0.299415,0.418387,0.222248, 0.60748,0.202437,0.768106,0.283103,0.467335,0.222248, 0.466133,0.34121,0.816269,0.231791,0.418387,0.27573, 0.479243,0.170617,0.860939,0.257344,0.251982,0.320299, 0.42641,0.391747,0.815297,0.231791,0.418387,0.27573, 0.344013,0.237244,0.908499,0.166895,0.251982,0.357142, 0.662215,0.119119,0.739785,0.257344,0.251982,0.320299, 0.439235,-0,0.898372,0.166895,0,0.380912, 0.594501,-0.161247,0.787761,0.257344,-0.251982,0.320299, 0.999999,0,-0.001399,0.345926,0,-0.380912, 0.996185,-0.087205,0.003347,0.331315,-0.208938,0.222248, 0.974495,-0.224383,-0.003566,0.299415,-0.418387,-0.380912, 0.42641,0.391747,0.815297,0.231791,0.418387,0.27573, 0.368596,0.450419,0.813179,0.17891,0.455225,0.279296, 0.344013,0.237244,0.908499,0.166895,0.251982,0.357142, 0.972186,-0.234211,0,0.299415,-0.418387,0.222248, 0.94871,-0.316149,0,0.283103,-0.467335,0.222248, 0.974495,-0.224383,-0.003566,0.299415,-0.418387,-0.380912, 0.104191,-0.80829,0.579493,0.17891,-0.455225,0.279296, 0.011777,-0.873735,0.486259,-0.001224,-0.5,0.222248, 0.117871,-0.949523,0.29071,0.234168,-0.483652,0.222248, 0.806304,-0.04159,0.590037,0.331315,-0.208938,0.222248, 0.726863,-0.090005,0.680859,0.257344,-0.251982,0.320299, 0.757873,-0.17819,0.627596,0.299415,-0.418387,0.222248, 0.17143,0.762655,0.623674,0.17891,0.455225,0.279296, -0.000123,0.822299,0.569056,-0.001224,0.5,0.222248, 0,0.78664,0.617411,0.054097,0.455225,0.279296, 0.235633,0.971842,0,0.234168,0.483652,0.222248, 0.316307,0.948657,0,0.283103,0.467335,-0.380912, 0.129779,0.991501,-0.009119,0.234168,0.483652,-0.380912, 0.817604,0.124528,0.562153,0.318731,0.29156,0.222248, 0.743012,0.091749,0.66296,0.257344,0.251982,0.320299, 0.809725,0.062401,0.583482,0.331315,0.208938,0.222248, 0.743012,0.091749,0.66296,0.257344,0.251982,0.320299, 0.817604,0.124528,0.562153,0.318731,0.29156,0.222248, 0.680969,0.208836,0.701903,0.299415,0.418387,0.222248, 0,0,-1,0.299415,0.418387,0.222248, 0,0,-1,0.318731,0.29156,0.222248, 0,0,-1,0.310276,0.347076,0.222248, 0.152705,-0.988272,-0,0.234168,-0.483652,0.222248, 0.141954,-0.989813,-0.010959,0.234168,-0.483652,-0.380912, 0.316307,-0.948657,0,0.283103,-0.467335,0.222248, 0.316307,-0.948657,0,0.283103,-0.467335,0.222248, 0.141954,-0.989813,-0.010959,0.234168,-0.483652,-0.380912, 0.316307,-0.948657,0,0.283103,-0.467335,-0.380912, 0.996185,-0.087205,0.003347,0.331315,-0.208938,0.222248, 0.972186,-0.234211,0,0.299415,-0.418387,0.222248, 0.974495,-0.224383,-0.003566,0.299415,-0.418387,-0.380912, 0.205338,0.615841,0.760642,0.283103,0.467335,0.222248, 0.24127,0.701439,0.670651,0.234168,0.483652,0.222248, 0.38567,0.427053,0.817853,0.231791,0.418387,0.27573, -0.439235,-0,0.898372,-0.166895,0,0.380912, -0.490312,-0.197001,0.84899,-0.257344,-0.251982,0.320299, -0.369417,-0.202622,0.906904,-0.166895,-0.251982,0.357142, -0.439235,-0,0.898372,-0.166895,0,0.380912, -0.344013,0.237244,0.908499,-0.166895,0.251982,0.357142, -0.479243,0.170617,0.860939,-0.257344,0.251982,0.320299, 0.030271,0.830475,0.556232,0.17891,0.455225,0.279296, 0.119619,0.886444,0.447112,0.234168,0.483652,0.222248, 0.011777,0.873735,0.486259,-0.001224,0.5,0.222248, -0.979828,0.199828,-0.002375,-0.299415,0.418387,-0.380912, -0.999999,0,-0.001399,-0.345926,0,-0.380912, -0.996185,0.087204,0.003347,-0.331315,0.208938,0.222248, -0.439235,-0,0.898372,-0.166895,0,0.380912, -0.662215,0.119119,0.739785,-0.257344,0.251982,0.320299, -0.594501,-0.161247,0.787761,-0.257344,-0.251982,0.320299, -0.996185,0.087204,0.003347,-0.331315,0.208938,0.222248, -0.999999,0,-0.001399,-0.345926,0,-0.380912, -0.996185,-0.087205,0.003347,-0.331315,-0.208938,0.222248, -0.743012,0.091749,0.66296,-0.257344,0.251982,0.320299, -0.806304,-0.04159,0.590037,-0.331315,-0.208938,0.222248, -0.726863,-0.090005,0.680859,-0.257344,-0.251982,0.320299, -0.806304,-0.04159,0.590037,-0.331315,-0.208938,0.222248, -0.743012,0.091749,0.66296,-0.257344,0.251982,0.320299, -0.809725,0.0624,0.583482,-0.331315,0.208938,0.222248 }; static const struct gllist toaster_frame = { GL_N3F_V3F, GL_TRIANGLES, 366, toaster_data, 0 }; const struct gllist *toaster = &toaster_frame; xscreensaver-5.36/hacks/glx/toaster_base.c000664 000767 000024 00000013122 12701612217 020640 0ustar00jwzstaff000000 000000 /* Generated from "toaster_base.dxf" on Aug-22-2014. Smoothed vertex normals. Normalized to unit bounding box. */ #include "gllist.h" static const float toaster_base_data[] = { -0.10666,0.994296,0,-0.242083,0.5,0.052679, 0.10666,0.994296,0,0.242083,0.5,-0.052679, -0.21332,0.976982,0,-0.242083,0.5,-0.052679, 0.10666,0.994296,0,0.242083,0.5,-0.052679, -0.10666,0.994296,0,-0.242083,0.5,0.052679, 0.213319,0.976983,0,0.242083,0.5,0.052679, 0.983679,0.17993,0,0.309535,0.432529,-0.052679, 0.999314,0.03703,0,0.357619,0,0.052679, 0.999314,-0.03703,0,0.357619,0,-0.052679, 0.999314,0.03703,0,0.357619,0,0.052679, 0.983679,0.17993,0,0.309535,0.432529,-0.052679, 0.968549,0.248824,0,0.309535,0.432529,0.052679, 0.10666,-0.994296,0,0.242083,-0.5,0.052679, -0.10666,-0.994296,0,-0.242083,-0.5,-0.052679, 0.213319,-0.976983,0,0.242083,-0.5,-0.052679, -0.10666,-0.994296,0,-0.242083,-0.5,-0.052679, 0.10666,-0.994296,0,0.242083,-0.5,0.052679, -0.21332,-0.976982,0,-0.242083,-0.5,0.052679, -0.983679,0.17993,0,-0.309535,0.432529,0.052679, -0.999314,0.03703,0,-0.357619,0,-0.052679, -0.999314,-0.03703,0,-0.357619,0,0.052679, -0.999314,0.03703,0,-0.357619,0,-0.052679, -0.983679,0.17993,0,-0.309535,0.432529,0.052679, -0.968549,0.248824,0,-0.309535,0.432529,-0.052679, 0,0,-1,-0.309535,0.432529,-0.052679, 0,0,-1,-0.309535,-0.432529,-0.052679, 0,0,-1,-0.357619,0,-0.052679, 0,0,-1,-0.309535,-0.432529,-0.052679, 0,0,-1,-0.309535,0.432529,-0.052679, 0,0,-1,-0.292672,0.483132,-0.052679, 0,0,-1,-0.309535,-0.432529,-0.052679, 0,0,-1,-0.292672,0.483132,-0.052679, 0,0,-1,-0.292672,-0.483132,-0.052679, 0,0,-1,-0.292672,-0.483132,-0.052679, 0,0,-1,-0.292672,0.483132,-0.052679, 0,0,-1,-0.242083,0.5,-0.052679, 0,0,-1,-0.292672,-0.483132,-0.052679, 0,0,-1,-0.242083,0.5,-0.052679, 0,0,-1,-0.242083,-0.5,-0.052679, 0,0,-1,-0.242083,-0.5,-0.052679, 0,0,-1,-0.242083,0.5,-0.052679, 0,0,-1,0.242083,0.5,-0.052679, 0,0,-1,-0.242083,-0.5,-0.052679, 0,0,-1,0.242083,0.5,-0.052679, 0,0,-1,0.242083,-0.5,-0.052679, 0,0,-1,0.242083,-0.5,-0.052679, 0,0,-1,0.242083,0.5,-0.052679, 0,0,-1,0.292672,-0.483132,-0.052679, 0,0,-1,0.292672,-0.483132,-0.052679, 0,0,-1,0.242083,0.5,-0.052679, 0,0,-1,0.292672,0.483132,-0.052679, 0,0,-1,0.292672,-0.483132,-0.052679, 0,0,-1,0.292672,0.483132,-0.052679, 0,0,-1,0.309535,-0.432529,-0.052679, 0,0,-1,0.309535,-0.432529,-0.052679, 0,0,-1,0.292672,0.483132,-0.052679, 0,0,-1,0.309535,0.432529,-0.052679, 0,0,-1,0.309535,-0.432529,-0.052679, 0,0,-1,0.309535,0.432529,-0.052679, 0,0,-1,0.357619,0,-0.052679, 0.999314,-0.03703,0,0.357619,0,-0.052679, 0.983679,-0.17993,0,0.309535,-0.432529,0.052679, 0.968549,-0.248824,0,0.309535,-0.432529,-0.052679, 0.983679,-0.17993,0,0.309535,-0.432529,0.052679, 0.999314,-0.03703,0,0.357619,0,-0.052679, 0.999314,0.03703,0,0.357619,0,0.052679, -0.999314,-0.03703,0,-0.357619,0,0.052679, -0.983679,-0.17993,0,-0.309535,-0.432529,-0.052679, -0.968549,-0.248824,0,-0.309535,-0.432529,0.052679, -0.983679,-0.17993,0,-0.309535,-0.432529,-0.052679, -0.999314,-0.03703,0,-0.357619,0,0.052679, -0.999314,0.03703,0,-0.357619,0,-0.052679, -0.968549,-0.248824,0,-0.309535,-0.432529,0.052679, -0.948709,-0.316149,0,-0.292672,-0.483132,-0.052679, -0.948709,-0.316149,0,-0.292672,-0.483132,0.052679, -0.948709,-0.316149,0,-0.292672,-0.483132,-0.052679, -0.968549,-0.248824,0,-0.309535,-0.432529,0.052679, -0.983679,-0.17993,0,-0.309535,-0.432529,-0.052679, -0.21332,-0.976982,0,-0.242083,-0.5,0.052679, -0.316307,-0.948657,0,-0.292672,-0.483132,-0.052679, -0.10666,-0.994296,0,-0.242083,-0.5,-0.052679, -0.316307,-0.948657,0,-0.292672,-0.483132,-0.052679, -0.21332,-0.976982,0,-0.242083,-0.5,0.052679, -0.316307,-0.948657,0,-0.292672,-0.483132,0.052679, 0.316307,-0.948657,0,0.292672,-0.483132,0.052679, 0.213319,-0.976983,0,0.242083,-0.5,-0.052679, 0.316307,-0.948657,0,0.292672,-0.483132,-0.052679, 0.213319,-0.976983,0,0.242083,-0.5,-0.052679, 0.316307,-0.948657,0,0.292672,-0.483132,0.052679, 0.10666,-0.994296,0,0.242083,-0.5,0.052679, 0.968549,-0.248824,0,0.309535,-0.432529,-0.052679, 0.948709,-0.316149,0,0.292672,-0.483132,0.052679, 0.948709,-0.316149,0,0.292672,-0.483132,-0.052679, 0.948709,-0.316149,0,0.292672,-0.483132,0.052679, 0.968549,-0.248824,0,0.309535,-0.432529,-0.052679, 0.983679,-0.17993,0,0.309535,-0.432529,0.052679, 0.213319,0.976983,0,0.242083,0.5,0.052679, 0.316307,0.948657,0,0.292672,0.483132,-0.052679, 0.10666,0.994296,0,0.242083,0.5,-0.052679, 0.316307,0.948657,0,0.292672,0.483132,-0.052679, 0.213319,0.976983,0,0.242083,0.5,0.052679, 0.316307,0.948657,0,0.292672,0.483132,0.052679, 0.948709,0.316149,0,0.292672,0.483132,-0.052679, 0.968549,0.248824,0,0.309535,0.432529,0.052679, 0.983679,0.17993,0,0.309535,0.432529,-0.052679, 0.968549,0.248824,0,0.309535,0.432529,0.052679, 0.948709,0.316149,0,0.292672,0.483132,-0.052679, 0.948709,0.316149,0,0.292672,0.483132,0.052679, -0.948709,0.316149,0,-0.292672,0.483132,0.052679, -0.968549,0.248824,0,-0.309535,0.432529,-0.052679, -0.983679,0.17993,0,-0.309535,0.432529,0.052679, -0.968549,0.248824,0,-0.309535,0.432529,-0.052679, -0.948709,0.316149,0,-0.292672,0.483132,0.052679, -0.948709,0.316149,0,-0.292672,0.483132,-0.052679, -0.316307,0.948657,0,-0.292672,0.483132,0.052679, -0.21332,0.976982,0,-0.242083,0.5,-0.052679, -0.316307,0.948657,0,-0.292672,0.483132,-0.052679, -0.21332,0.976982,0,-0.242083,0.5,-0.052679, -0.316307,0.948657,0,-0.292672,0.483132,0.052679, -0.10666,0.994296,0,-0.242083,0.5,0.052679 }; static const struct gllist toaster_base_frame = { GL_N3F_V3F, GL_TRIANGLES, 120, toaster_base_data, 0 }; const struct gllist *toaster_base = &toaster_base_frame; xscreensaver-5.36/hacks/glx/toaster_handle.c000664 000767 000024 00000005157 12701612217 021172 0ustar00jwzstaff000000 000000 /* Generated from "toaster_handle.dxf" on Aug-22-2014. Smoothed vertex normals. Normalized to unit bounding box. */ #include "gllist.h" static const float toaster_handle_data[] = { 0,0,1,0.5,-0.094169,0.035224, 0,0,1,-0.356403,0.038624,0.035224, 0,0,1,-0.5,-0.094169,0.035224, 0,0,1,-0.356403,0.038624,0.035224, 0,0,1,0.5,-0.094169,0.035224, 0,0,1,-0.210084,0.094169,0.035224, 0,0,1,-0.210084,0.094169,0.035224, 0,0,1,0.5,-0.094169,0.035224, 0,0,1,0.210084,0.094169,0.035224, 0,0,1,0.210084,0.094169,0.035224, 0,0,1,0.5,-0.094169,0.035224, 0,0,1,0.356403,0.038624,0.035224, -0.678947,0.734187,0,-0.5,-0.094169,0.035224, -0.58038,0.814346,0,-0.356403,0.038624,-0.035224, -0.678947,0.734187,0,-0.5,-0.094169,-0.035224, -0.58038,0.814346,0,-0.356403,0.038624,-0.035224, -0.678947,0.734187,0,-0.5,-0.094169,0.035224, -0.47058,0.882357,0,-0.356403,0.038624,0.035224, 0,0,-1,-0.356403,0.038624,-0.035224, 0,0,-1,0.5,-0.094169,-0.035224, 0,0,-1,-0.5,-0.094169,-0.035224, 0,0,-1,0.5,-0.094169,-0.035224, 0,0,-1,-0.356403,0.038624,-0.035224, 0,0,-1,-0.210084,0.094169,-0.035224, 0,0,-1,0.5,-0.094169,-0.035224, 0,0,-1,-0.210084,0.094169,-0.035224, 0,0,-1,0.210084,0.094169,-0.035224, 0,0,-1,0.5,-0.094169,-0.035224, 0,0,-1,0.210084,0.094169,-0.035224, 0,0,-1,0.356403,0.038624,-0.035224, 0.58038,0.814346,0,0.356403,0.038624,0.035224, 0.678947,0.734187,0,0.5,-0.094169,-0.035224, 0.47058,0.882357,0,0.356403,0.038624,-0.035224, 0.678947,0.734187,0,0.5,-0.094169,-0.035224, 0.58038,0.814346,0,0.356403,0.038624,0.035224, 0.678947,0.734187,0,0.5,-0.094169,0.035224, -0.120052,0.992768,0,-0.210084,0.094169,0.035224, 0.120052,0.992768,0,0.210084,0.094169,-0.035224, -0.240104,0.970747,0,-0.210084,0.094169,-0.035224, 0.120052,0.992768,0,0.210084,0.094169,-0.035224, -0.120052,0.992768,0,-0.210084,0.094169,0.035224, 0.240104,0.970747,0,0.210084,0.094169,0.035224, 0.240104,0.970747,0,0.210084,0.094169,0.035224, 0.47058,0.882357,0,0.356403,0.038624,-0.035224, 0.120052,0.992768,0,0.210084,0.094169,-0.035224, 0.47058,0.882357,0,0.356403,0.038624,-0.035224, 0.240104,0.970747,0,0.210084,0.094169,0.035224, 0.58038,0.814346,0,0.356403,0.038624,0.035224, -0.47058,0.882357,0,-0.356403,0.038624,0.035224, -0.240104,0.970747,0,-0.210084,0.094169,-0.035224, -0.58038,0.814346,0,-0.356403,0.038624,-0.035224, -0.240104,0.970747,0,-0.210084,0.094169,-0.035224, -0.47058,0.882357,0,-0.356403,0.038624,0.035224, -0.120052,0.992768,0,-0.210084,0.094169,0.035224 }; static const struct gllist toaster_handle_frame = { GL_N3F_V3F, GL_TRIANGLES, 54, toaster_handle_data, 0 }; const struct gllist *toaster_handle = &toaster_handle_frame; xscreensaver-5.36/hacks/glx/toaster_handle2.c000664 000767 000024 00000003165 12701612217 021251 0ustar00jwzstaff000000 000000 /* Generated from "toaster_handle2.dxf" on Aug-22-2014. Smoothed vertex normals. Normalized to unit bounding box. */ #include "gllist.h" static const float toaster_handle2_data[] = { 0,-0.027094,0.999633,0.038934,-0.294903,-0.5, 0,-0.027094,0.999633,-0.038934,0.321555,-0.483291, 0,-0.027094,0.999633,-0.038934,-0.294903,-0.5, 0,-0.027094,0.999633,-0.038934,0.321555,-0.483291, 0,-0.027094,0.999633,0.038934,-0.294903,-0.5, 0,-0.027094,0.999633,0.038934,0.321555,-0.483291, -1,0,0,0.038934,0.294903,0.5, -1,0,0,0.038934,-0.294903,-0.5, -1,0,0,0.038934,-0.321555,0.483291, -1,0,0,0.038934,-0.294903,-0.5, -1,0,0,0.038934,0.294903,0.5, -1,0,0,0.038934,0.321555,-0.483291, 0,0.027094,-0.999633,0.038934,0.294903,0.5, 0,0.027094,-0.999633,-0.038934,-0.321555,0.483291, 0,0.027094,-0.999633,-0.038934,0.294903,0.5, 0,0.027094,-0.999633,-0.038934,-0.321555,0.483291, 0,0.027094,-0.999633,0.038934,0.294903,0.5, 0,0.027094,-0.999633,0.038934,-0.321555,0.483291, 1,0,0,-0.038934,-0.294903,-0.5, 1,0,0,-0.038934,0.294903,0.5, 1,0,0,-0.038934,-0.321555,0.483291, 1,0,0,-0.038934,0.294903,0.5, 1,0,0,-0.038934,-0.294903,-0.5, 1,0,0,-0.038934,0.321555,-0.483291, 0,-0.999633,-0.027095,0.038934,0.294903,0.5, 0,-0.999633,-0.027095,-0.038934,0.321555,-0.483291, 0,-0.999633,-0.027095,0.038934,0.321555,-0.483291, 0,-0.999633,-0.027095,-0.038934,0.321555,-0.483291, 0,-0.999633,-0.027095,0.038934,0.294903,0.5, 0,-0.999633,-0.027095,-0.038934,0.294903,0.5 }; static const struct gllist toaster_handle2_frame = { GL_N3F_V3F, GL_TRIANGLES, 30, toaster_handle2_data, 0 }; const struct gllist *toaster_handle2 = &toaster_handle2_frame; xscreensaver-5.36/hacks/glx/toaster_jet.c000664 000767 000024 00000023145 12701612217 020516 0ustar00jwzstaff000000 000000 /* Generated from "toaster_jet.dxf" on Aug-22-2014. Smoothed vertex normals. Normalized to unit bounding box. */ #include "gllist.h" static const float toaster_jet_data[] = { 0.813787,-0.208368,0.542526,-0.002117,-0.240071,0.000396, 0.813787,-0.208368,0.542526,-0.061503,-0.5,-0.010357, 0.813787,-0.208368,0.542526,-0.031551,-0.5,-0.055285, -0.351369,0.154576,0.923388,0.012946,0.394969,0.120155, -0.354839,-0.067247,0.932506,-0.087986,-0.240071,0.081748, -0.352413,-0.134494,0.92613,0.012946,-0.240071,0.120155, -0.707849,-0.221865,0.670616,-0.002117,-0.240071,0.000396, -0.707849,-0.221865,0.670616,0.022249,-0.5,-0.059879, -0.707849,-0.221865,0.670616,0.059386,-0.5,-0.020681, -0.905798,0.309152,0.289748,-0.120888,0.394969,-0.02111, -0.950301,-0.067247,0.303983,-0.120888,-0.240071,-0.02111, -0.941009,0.154576,0.301011,-0.087986,0.394969,0.081748, -0.083052,-0.217721,-0.972471,0.022249,-0.5,-0.059879, -0.083052,-0.217721,-0.972471,-0.031551,-0.5,-0.055285, -0.084182,-0.145927,-0.985707,-0.060985,-0.240071,-0.110965, -0.084866,-0.072964,-0.993717,0.046616,-0.240071,-0.120155, -0.083916,0.165753,-0.98259,-0.060985,0.394969,-0.110965, -0.080281,0.331506,-0.940031,0.046616,0.394969,-0.120155, -0.080281,0.331506,-0.940031,0.046616,0.394969,-0.120155, -0.074495,0.483301,-0.872279,-0.031551,0.5,-0.055285, -0.074495,0.483301,-0.872279,0.022249,0.5,-0.059879, 0.987687,-0.072964,0.138384,0.105904,-0.240071,0.065189, 0.96657,-0.217721,0.135426,0.051893,-0.5,0.032792, 0.979726,-0.145927,0.137269,0.120888,-0.240071,-0.041759, -0.084866,-0.072964,-0.993717,0.046616,-0.240071,-0.120155, -0.084182,-0.145927,-0.985707,-0.060985,-0.240071,-0.110965, -0.083916,0.165753,-0.98259,-0.060985,0.394969,-0.110965, 0.63255,0.49066,-0.599278,0.059386,0.5,-0.020681, 0.683508,0.336879,-0.647556,0.120888,0.394969,-0.041759, 0.63255,0.49066,-0.599278,0.022249,0.5,-0.059879, 0.933052,-0.200826,-0.298468,-0.002117,-0.240071,0.000396, 0.933052,-0.200826,-0.298468,-0.045051,-0.5,0.041072, 0.933052,-0.200826,-0.298468,-0.061503,-0.5,-0.010357, -0.084866,-0.072964,-0.993717,0.046616,-0.240071,-0.120155, -0.083052,-0.217721,-0.972471,0.022249,-0.5,-0.059879, -0.084182,-0.145927,-0.985707,-0.060985,-0.240071,-0.110965, 0.502451,0.15961,0.849746,0.105904,0.394969,0.065189, 0.450231,0.466386,0.76143,0.051893,0.5,0.032792, 0.482347,0.31922,0.815745,0.012946,0.394969,0.120155, 0.934327,0.331506,0.130908,0.105904,0.394969,0.065189, 0.987687,-0.072964,0.138384,0.105904,-0.240071,0.065189, 0.976628,0.165753,0.136835,0.120888,0.394969,-0.041759, 0.083052,-0.217721,0.972471,0.022249,-0.5,-0.059879, 0.083052,-0.217721,0.972471,-0.002117,-0.240071,0.000396, 0.083052,-0.217721,0.972471,-0.031551,-0.5,-0.055285, -0.950301,-0.067247,0.303983,-0.120888,-0.240071,-0.02111, -0.933052,-0.200826,0.298467,-0.061503,-0.5,-0.010357, -0.943803,-0.134494,0.301905,-0.087986,-0.240071,0.081748, -0.788518,0.319219,-0.525679,-0.060985,0.394969,-0.110965, -0.830021,-0.069797,-0.553347,-0.060985,-0.240071,-0.110965, -0.821384,0.15961,-0.547589,-0.120888,0.394969,-0.02111, 0.503992,-0.139595,0.852353,0.105904,-0.240071,0.065189, 0.507735,-0.069797,0.858681,0.012946,-0.240071,0.120155, 0.497804,-0.208368,0.841887,0.005415,-0.5,0.060275, 0.074495,0.483301,0.872279,0.022249,0.5,-0.059879, 0.074495,0.483301,0.872279,-0.031551,0.5,-0.055285, 0.074495,0.483301,0.872279,-0.002117,0.394969,0.000396, -0.497804,-0.208368,-0.841887,0.051893,-0.5,0.032792, -0.497804,-0.208368,-0.841887,0.005415,-0.5,0.060275, -0.497804,-0.208368,-0.841887,-0.002117,-0.240071,0.000396, -0.943803,-0.134494,0.301905,-0.087986,-0.240071,0.081748, -0.933052,-0.200826,0.298467,-0.061503,-0.5,-0.010357, -0.933052,-0.200826,0.298468,-0.045051,-0.5,0.041072, -0.96657,-0.217721,-0.135426,-0.002117,-0.240071,0.000396, -0.96657,-0.217721,-0.135426,0.059386,-0.5,-0.020681, -0.96657,-0.217721,-0.135426,0.051893,-0.5,0.032792, 0.736015,0.466386,0.490678,-0.031551,0.5,-0.055285, 0.736015,0.466386,0.490678,-0.061503,0.5,-0.010357, 0.736015,0.466386,0.490678,-0.002117,0.394969,0.000396, 0.979726,-0.145927,0.137269,0.120888,-0.240071,-0.041759, 0.96657,-0.217721,0.135426,0.051893,-0.5,0.032792, 0.96657,-0.217721,0.135426,0.059386,-0.5,-0.020681, 0.63255,0.49066,-0.599278,0.022249,0.5,-0.059879, 0.683508,0.336879,-0.647556,0.120888,0.394969,-0.041759, 0.715569,0.16844,-0.67793,0.046616,0.394969,-0.120155, -0.736016,0.466386,-0.490678,-0.061503,0.5,-0.010357, -0.788518,0.319219,-0.525679,-0.060985,0.394969,-0.110965, -0.821384,0.15961,-0.547589,-0.120888,0.394969,-0.02111, -0.788518,0.319219,-0.525679,-0.060985,0.394969,-0.110965, -0.736016,0.466386,-0.490678,-0.061503,0.5,-0.010357, -0.736015,0.466386,-0.490678,-0.031551,0.5,-0.055285, -0.849396,0.452441,0.271706,-0.045051,0.5,0.041072, -0.849396,0.45244,0.271707,-0.061503,0.5,-0.010357, -0.905798,0.309152,0.289748,-0.120888,0.394969,-0.02111, -0.45023,0.466386,-0.76143,0.051893,0.5,0.032792, -0.45023,0.466386,-0.76143,-0.002117,0.394969,0.000396, -0.45023,0.466386,-0.76143,0.005415,0.5,0.060275, 0.723931,-0.074368,-0.685852,0.120888,-0.240071,-0.041759, 0.707849,-0.221865,-0.670616,0.059386,-0.5,-0.020681, 0.717867,-0.148736,-0.680107,0.046616,-0.240071,-0.120155, -0.63255,0.49066,0.599278,0.022249,0.5,-0.059879, -0.63255,0.49066,0.599278,-0.002117,0.394969,0.000396, -0.63255,0.49066,0.599278,0.059386,0.5,-0.020681, -0.351369,0.154576,0.923388,0.012946,0.394969,0.120155, -0.338222,0.309153,0.888837,-0.087986,0.394969,0.081748, -0.354839,-0.067247,0.932506,-0.087986,-0.240071,0.081748, 0.849395,0.452441,-0.271707,-0.045051,0.5,0.041072, 0.849395,0.452441,-0.271707,-0.002117,0.394969,0.000396, 0.849395,0.452441,-0.271707,-0.061503,0.5,-0.010357, 0.502451,0.15961,0.849746,0.105904,0.394969,0.065189, 0.507735,-0.069797,0.858681,0.012946,-0.240071,0.120155, 0.503992,-0.139595,0.852353,0.105904,-0.240071,0.065189, -0.317161,0.452441,0.83349,0.005415,0.5,0.060275, -0.317162,0.452441,0.83349,-0.045051,0.5,0.041072, -0.338222,0.309153,0.888837,-0.087986,0.394969,0.081748, -0.080281,0.331506,-0.940031,0.046616,0.394969,-0.120155, -0.083916,0.165753,-0.98259,-0.060985,0.394969,-0.110965, -0.074495,0.483301,-0.872279,-0.031551,0.5,-0.055285, 0.715569,0.16844,-0.67793,0.046616,0.394969,-0.120155, 0.723931,-0.074368,-0.685852,0.120888,-0.240071,-0.041759, 0.717867,-0.148736,-0.680107,0.046616,-0.240071,-0.120155, 0.866986,0.483301,0.121473,0.059386,0.5,-0.020681, 0.934327,0.331506,0.130908,0.105904,0.394969,0.065189, 0.976628,0.165753,0.136835,0.120888,0.394969,-0.041759, -0.866986,0.483301,-0.121473,0.059386,0.5,-0.020681, -0.866986,0.483301,-0.121473,-0.002117,0.394969,0.000396, -0.866986,0.483301,-0.121473,0.051893,0.5,0.032792, -0.352413,-0.134494,0.92613,0.012946,-0.240071,0.120155, -0.348399,-0.200826,0.91558,-0.045051,-0.5,0.041072, -0.348399,-0.200826,0.91558,0.005415,-0.5,0.060275, -0.821384,0.15961,-0.547589,-0.120888,0.394969,-0.02111, -0.830021,-0.069797,-0.553347,-0.060985,-0.240071,-0.110965, -0.823903,-0.139594,-0.549269,-0.120888,-0.240071,-0.02111, -0.941009,0.154576,0.301011,-0.087986,0.394969,0.081748, -0.950301,-0.067247,0.303983,-0.120888,-0.240071,-0.02111, -0.943803,-0.134494,0.301905,-0.087986,-0.240071,0.081748, -0.849396,0.452441,0.271706,-0.045051,0.5,0.041072, -0.905798,0.309152,0.289748,-0.120888,0.394969,-0.02111, -0.941009,0.154576,0.301011,-0.087986,0.394969,0.081748, 0.317162,0.452441,-0.83349,0.005415,0.5,0.060275, 0.317162,0.452441,-0.83349,-0.002117,0.394969,0.000396, 0.317162,0.452441,-0.83349,-0.045051,0.5,0.041072, -0.823903,-0.139594,-0.549269,-0.120888,-0.240071,-0.02111, -0.813787,-0.208368,-0.542525,-0.031551,-0.5,-0.055285, -0.813787,-0.208368,-0.542526,-0.061503,-0.5,-0.010357, -0.813787,-0.208368,-0.542525,-0.031551,-0.5,-0.055285, -0.823903,-0.139594,-0.549269,-0.120888,-0.240071,-0.02111, -0.830021,-0.069797,-0.553347,-0.060985,-0.240071,-0.110965, 0.348399,-0.200826,-0.91558,0.005415,-0.5,0.060275, 0.348399,-0.200826,-0.91558,-0.045051,-0.5,0.041072, 0.348399,-0.200826,-0.91558,-0.002117,-0.240071,0.000396, -0.352413,-0.134494,0.92613,0.012946,-0.240071,0.120155, -0.354839,-0.067247,0.932506,-0.087986,-0.240071,0.081748, -0.348399,-0.200826,0.91558,-0.045051,-0.5,0.041072, -0.351369,0.154576,0.923388,0.012946,0.394969,0.120155, -0.317161,0.452441,0.83349,0.005415,0.5,0.060275, -0.338222,0.309153,0.888837,-0.087986,0.394969,0.081748, 0.503992,-0.139595,0.852353,0.105904,-0.240071,0.065189, 0.497804,-0.208368,0.841887,0.005415,-0.5,0.060275, 0.497804,-0.208368,0.841887,0.051893,-0.5,0.032792, 0.683508,0.336879,-0.647556,0.120888,0.394969,-0.041759, 0.723931,-0.074368,-0.685852,0.120888,-0.240071,-0.041759, 0.715569,0.16844,-0.67793,0.046616,0.394969,-0.120155, 0.976628,0.165753,0.136835,0.120888,0.394969,-0.041759, 0.987687,-0.072964,0.138384,0.105904,-0.240071,0.065189, 0.979726,-0.145927,0.137269,0.120888,-0.240071,-0.041759, 0.502451,0.15961,0.849746,0.105904,0.394969,0.065189, 0.482347,0.31922,0.815745,0.012946,0.394969,0.120155, 0.507735,-0.069797,0.858681,0.012946,-0.240071,0.120155, 0.866986,0.483301,0.121473,0.051893,0.5,0.032792, 0.934327,0.331506,0.130908,0.105904,0.394969,0.065189, 0.866986,0.483301,0.121473,0.059386,0.5,-0.020681, 0.450231,0.466386,0.76143,0.051893,0.5,0.032792, 0.45023,0.466386,0.76143,0.005415,0.5,0.060275, 0.482347,0.31922,0.815745,0.012946,0.394969,0.120155, 0.717867,-0.148736,-0.680107,0.046616,-0.240071,-0.120155, 0.707849,-0.221865,-0.670616,0.059386,-0.5,-0.020681, 0.707849,-0.221865,-0.670616,0.022249,-0.5,-0.059879 }; static const struct gllist toaster_jet_frame = { GL_N3F_V3F, GL_TRIANGLES, 168, toaster_jet_data, 0 }; const struct gllist *toaster_jet = &toaster_jet_frame; xscreensaver-5.36/hacks/glx/toaster_knob.c000664 000767 000024 00000007677 12701612217 020701 0ustar00jwzstaff000000 000000 /* Generated from "toaster_knob.dxf" on Aug-22-2014. Smoothed vertex normals. Normalized to unit bounding box. */ #include "gllist.h" static const float toaster_knob_data[] = { 0.894098,0.012135,-0.447706,0.220972,-0.2059,-0.429683, 0.894098,0.012135,-0.447706,0.372946,0.214524,-0.114788, 0.894098,0.012135,-0.447706,0.372946,-0.21412,-0.126406, 0.894098,0.012135,-0.447706,0.372946,0.214524,-0.114788, 0.894098,0.012135,-0.447706,0.220972,-0.2059,-0.429683, 0.894098,0.012135,-0.447706,0.220972,0.222744,-0.418065, -0.999879,-0.000422,0.015577,-0.367658,0.209613,0.06637, -0.999879,-0.000422,0.015577,-0.372946,-0.209838,-0.284406, -0.999879,-0.000422,0.015577,-0.367658,-0.21903,0.054752, -0.999879,-0.000422,0.015577,-0.372946,-0.209838,-0.284406, -0.999879,-0.000422,0.015577,-0.367658,0.209613,0.06637, -0.999879,-0.000422,0.015577,-0.372946,0.218806,-0.272788, 0.907621,-0.011374,0.419637,0.372946,-0.21412,-0.126406, 0.911978,-0.115261,0.393715,0.2305,0.206179,0.193077, 0.907621,-0.011374,0.419637,0.2305,-0.222464,0.181458, 0.911978,-0.115261,0.393715,0.2305,0.206179,0.193077, 0.907621,-0.011374,0.419637,0.372946,-0.21412,-0.126406, 0.907621,-0.011374,0.419637,0.372946,0.214524,-0.114788, -0.611231,-0.021444,0.791162,-0.099099,-0.22465,0.262081, -0.611231,-0.021444,0.791162,-0.367658,0.209613,0.06637, -0.611231,-0.021444,0.791162,-0.367658,-0.21903,0.054752, -0.611231,-0.021444,0.791162,-0.367658,0.209613,0.06637, -0.611231,-0.021444,0.791162,-0.099099,-0.22465,0.262081, -0.655778,-0.184059,0.732173,-0.099099,0.203994,0.2737, -0,-0.999633,-0.027095,0.220972,-0.2059,-0.429683, -0,-0.999633,-0.027095,-0.372946,-0.209838,-0.284406, -0,-0.999633,-0.027096,-0.11098,-0.203994,-0.5, -0,-0.999633,-0.027095,-0.372946,-0.209838,-0.284406, -0,-0.999633,-0.027095,0.220972,-0.2059,-0.429683, 0,-0.999633,-0.027094,0.372946,-0.21412,-0.126406, -0,-0.999633,-0.027095,-0.372946,-0.209838,-0.284406, 0,-0.999633,-0.027094,0.372946,-0.21412,-0.126406, 0,-0.999633,-0.027095,-0.367658,-0.21903,0.054752, 0,-0.999633,-0.027095,-0.367658,-0.21903,0.054752, 0,-0.999633,-0.027094,0.372946,-0.21412,-0.126406, 0,-0.999633,-0.027095,0.2305,-0.222464,0.181458, 0,-0.999633,-0.027095,-0.367658,-0.21903,0.054752, 0,-0.999633,-0.027095,0.2305,-0.222464,0.181458, 0,-0.999633,-0.027095,0.065701,-0.223557,0.22177, 0,-0.999633,-0.027095,-0.367658,-0.21903,0.054752, 0,-0.999633,-0.027095,0.065701,-0.223557,0.22177, 0,-0.999633,-0.027095,-0.099099,-0.22465,0.262081, -0.635597,0.020918,-0.771737,-0.11098,0.22465,-0.488382, -0.635597,0.020918,-0.771737,-0.372946,-0.209838,-0.284406, -0.635597,0.020918,-0.771737,-0.372946,0.218806,-0.272788, -0.635597,0.020918,-0.771737,-0.372946,-0.209838,-0.284406, -0.635597,0.020918,-0.771737,-0.11098,0.22465,-0.488382, -0.635597,0.020918,-0.771737,-0.11098,-0.203994,-0.5, 0.207302,0.026506,-0.977918,0.220972,0.222744,-0.418065, 0.207302,0.026506,-0.977918,-0.11098,-0.203994,-0.5, 0.207302,0.026506,-0.977918,-0.11098,0.22465,-0.488382, 0.207302,0.026506,-0.977918,-0.11098,-0.203994,-0.5, 0.207302,0.026506,-0.977918,0.220972,0.222744,-0.418065, 0.207302,0.026506,-0.977918,0.220972,-0.2059,-0.429683, 0.237686,-0.026318,0.970985,0.065701,-0.223557,0.22177, 0.237686,-0.026318,0.970985,-0.099099,0.203994,0.2737, 0.237686,-0.026318,0.970985,-0.099099,-0.22465,0.262081, -0.6794,-0.340802,0.649823,0.116801,0.205086,0.5, -0.655778,-0.184059,0.732173,-0.099099,0.203994,0.2737, -0.6794,-0.340802,0.649823,0.065701,-0.223557,0.22177, 0.237686,-0.026318,0.970985,0.2305,0.206179,0.193077, 0.237686,-0.026318,0.970985,0.065701,-0.223557,0.22177, 0.237686,-0.026318,0.970985,0.2305,-0.222464,0.181458, 0.911978,-0.115261,0.393715,0.2305,0.206179,0.193077, 0.88909,-0.319042,0.328226,0.116801,0.205086,0.5, 0.88909,-0.319042,0.328226,0.065701,-0.223557,0.22177 }; static const struct gllist toaster_knob_frame = { GL_N3F_V3F, GL_TRIANGLES, 66, toaster_knob_data, 0 }; const struct gllist *toaster_knob = &toaster_knob_frame; xscreensaver-5.36/hacks/glx/toaster_slots.c000664 000767 000024 00000011042 12701612217 021071 0ustar00jwzstaff000000 000000 /* Generated from "toaster_slots.dxf" on Aug-22-2014. Smoothed vertex normals. Normalized to unit bounding box. */ #include "gllist.h" static const float toaster_slots_data[] = { 0.999485,-0.028052,-0.015598,-0.18331,-0.276766,0.209005, 0.998257,-0.059011,0,-0.196507,-0.5,0.123502, 0.99963,-0.0187,-0.019753,-0.196507,-0.5,-0.235113, 0.999546,0,-0.030136,-0.18331,0,0.235113, 0.999485,-0.028052,-0.015598,-0.18331,-0.276766,0.209005, 0.99963,-0.0187,-0.019753,-0.196507,-0.5,-0.235113, 0,1,0,-0.059418,-0.5,0.123502, 0,1,0,-0.058641,-0.5,-0.235113, 0,1,0,-0.196507,-0.5,-0.235113, 0,1,0,-0.059418,-0.5,0.123502, 0,1,0,-0.196507,-0.5,-0.235113, 0,1,0,-0.196507,-0.5,0.123502, 0.998257,0.059011,0,-0.196507,0.5,0.123502, 0.999485,0.028052,-0.015598,-0.18331,0.276766,0.209005, 0.99963,0.0187,-0.019753,-0.196507,0.5,-0.235113, 0.99963,0.0187,-0.019753,-0.196507,0.5,-0.235113, 0.999485,0.028052,-0.015598,-0.18331,0.276766,0.209005, 0.999546,0,-0.030136,-0.18331,0,0.235113, 0,-1,0,-0.196507,0.5,0.123502, 0,-1,0,-0.196507,0.5,-0.235113, 0,-1,0,-0.059418,0.5,0.123502, 0.99963,0.0187,-0.019753,-0.196507,0.5,-0.235113, 0.999546,0,-0.030136,-0.18331,0,0.235113, 0.99963,-0.0187,-0.019753,-0.196507,-0.5,-0.235113, -0.999997,-0.001316,-0.001828,-0.058641,0.5,-0.235113, -0.999998,0,-0.002211,-0.058641,0,0.235113, -0.999994,-0.001974,-0.002741,-0.059418,0.276766,0.209005, -0.999994,0.001974,-0.002741,-0.059418,-0.276766,0.209005, -0.999997,0.001316,-0.001828,-0.058641,-0.5,-0.235113, -0.999997,0.00083,-0.002166,-0.059418,-0.5,0.123502, -0.999998,0,-0.002211,-0.058641,0,0.235113, -0.999997,0.001316,-0.001828,-0.058641,-0.5,-0.235113, -0.999994,0.001974,-0.002741,-0.059418,-0.276766,0.209005, -0.999997,-0.001316,-0.001828,-0.058641,0.5,-0.235113, -0.999997,0.001316,-0.001828,-0.058641,-0.5,-0.235113, -0.999998,0,-0.002211,-0.058641,0,0.235113, 0,0,1,-0.058641,-0.5,-0.235113, 0,0,1,-0.058641,0.5,-0.235113, 0,0,1,-0.196507,0.5,-0.235113, 0,0,1,-0.058641,-0.5,-0.235113, 0,0,1,-0.196507,0.5,-0.235113, 0,0,1,-0.196507,-0.5,-0.235113, 0,-1,0,-0.059418,0.5,0.123502, 0,-1,0,-0.196507,0.5,-0.235113, 0,-1,0,-0.058641,0.5,-0.235113, -0.999997,-0.001316,-0.001828,-0.058641,0.5,-0.235113, -0.999994,-0.001974,-0.002741,-0.059418,0.276766,0.209005, -0.999997,-0.00083,-0.002166,-0.059418,0.5,0.123502, 0.999997,-0.001316,-0.001828,0.058641,0.5,-0.235113, 0.999998,0,-0.002211,0.058641,0,0.235113, 0.999997,0.001316,-0.001828,0.058641,-0.5,-0.235113, 0.999994,0.001974,-0.002741,0.059418,-0.276766,0.209005, 0.999997,0.00083,-0.002166,0.059418,-0.5,0.123502, 0.999997,0.001316,-0.001828,0.058641,-0.5,-0.235113, 0.999997,-0.001316,-0.001828,0.058641,0.5,-0.235113, 0.999994,-0.001974,-0.002741,0.059418,0.276766,0.209005, 0.999998,0,-0.002211,0.058641,0,0.235113, 0.999998,0,-0.002211,0.058641,0,0.235113, 0.999994,0.001974,-0.002741,0.059418,-0.276766,0.209005, 0.999997,0.001316,-0.001828,0.058641,-0.5,-0.235113, -0.99963,0.0187,-0.019753,0.196507,0.5,-0.235113, -0.999485,0.028052,-0.015598,0.18331,0.276766,0.209005, -0.998257,0.059011,0,0.196507,0.5,0.123502, -0.999546,0,-0.030136,0.18331,0,0.235113, -0.99963,-0.0187,-0.019753,0.196507,-0.5,-0.235113, -0.999485,-0.028052,-0.015598,0.18331,-0.276766,0.209005, 0,1,0,0.059418,-0.5,0.123502, 0,1,0,0.196507,-0.5,-0.235113, 0,1,0,0.058641,-0.5,-0.235113, -0.999485,-0.028052,-0.015598,0.18331,-0.276766,0.209005, -0.99963,-0.0187,-0.019753,0.196507,-0.5,-0.235113, -0.998257,-0.059011,0,0.196507,-0.5,0.123502, 0,-1,0,0.059418,0.5,0.123502, 0,-1,0,0.196507,0.5,-0.235113, 0,-1,0,0.196507,0.5,0.123502, 0,1,0,0.196507,-0.5,0.123502, 0,1,0,0.196507,-0.5,-0.235113, 0,1,0,0.059418,-0.5,0.123502, -0.99963,0.0187,-0.019753,0.196507,0.5,-0.235113, -0.999546,0,-0.030136,0.18331,0,0.235113, -0.999485,0.028052,-0.015598,0.18331,0.276766,0.209005, -0.99963,0.0187,-0.019753,0.196507,0.5,-0.235113, -0.99963,-0.0187,-0.019753,0.196507,-0.5,-0.235113, -0.999546,0,-0.030136,0.18331,0,0.235113, 0,0,1,0.196507,0.5,-0.235113, 0,0,1,0.058641,-0.5,-0.235113, 0,0,1,0.196507,-0.5,-0.235113, 0,0,1,0.196507,0.5,-0.235113, 0,0,1,0.058641,0.5,-0.235113, 0,0,1,0.058641,-0.5,-0.235113, 0.999997,-0.00083,-0.002166,0.059418,0.5,0.123502, 0.999994,-0.001974,-0.002741,0.059418,0.276766,0.209005, 0.999997,-0.001316,-0.001828,0.058641,0.5,-0.235113, 0,-1,0,0.059418,0.5,0.123502, 0,-1,0,0.058641,0.5,-0.235113, 0,-1,0,0.196507,0.5,-0.235113 }; static const struct gllist toaster_slots_frame = { GL_N3F_V3F, GL_TRIANGLES, 96, toaster_slots_data, 0 }; const struct gllist *toaster_slots = &toaster_slots_frame; xscreensaver-5.36/hacks/glx/toaster_wing.c000664 000767 000024 00000004167 12701612217 020703 0ustar00jwzstaff000000 000000 /* Generated from "toaster_wing.dxf" on Aug-22-2014. Smoothed vertex normals. Normalized to unit bounding box. */ #include "gllist.h" static const float toaster_wing_data[] = { -0.0018,-0.000471,-0.999998,0.5,-0.248054,-0.034832, -0.002699,-0.000707,-0.999996,-0.5,0.248054,-0.032483, -0.001465,-0.000586,-0.999999,0.399306,0.003521,-0.034832, 0.301513,0.649532,0.697996,0.399306,0.003521,-0.034832, 0.159005,0.609129,0.776968,-0.5,0.248054,-0.032483, 0.244597,0.610231,0.753518,0.3827,-0.039065,0.01197, 0.172439,-0.122105,0.977423,0.5,-0.248054,-0.034832, 0.064485,-0.135273,0.988708,0.3827,-0.039065,0.01197, -0.040003,-0.177228,0.983357,-0.466673,-0.094003,-0.032483, -0.0018,-0.000471,-0.999998,0.5,-0.248054,-0.034832, -0.002468,-0.00024,-0.999997,-0.466673,-0.094003,-0.032483, -0.002699,-0.000707,-0.999996,-0.5,0.248054,-0.032483, 0.064485,-0.135273,0.988708,0.3827,-0.039065,0.01197, -0.051938,-0.00506,0.998637,-0.5,0.248054,-0.032483, -0.040003,-0.177228,0.983357,-0.466673,-0.094003,-0.032483, 0.064485,-0.135273,0.988708,0.3827,-0.039065,0.01197, -0.031687,-0.285224,0.957937,-0.482606,0.13385,0.034832, -0.040003,-0.177228,0.983357,-0.466673,-0.094003,-0.032483, 0.370589,0,0.928797,0.5,-0.065307,-0.034832, 0.064485,-0.135273,0.988708,0.3827,-0.039065,0.01197, 0.172439,-0.122105,0.977423,0.5,-0.248054,-0.034832, 0.244597,0.610231,0.753518,0.3827,-0.039065,0.01197, 0.159005,0.609129,0.776968,-0.5,0.248054,-0.032483, 0.125848,0.517903,0.846131,-0.482606,0.13385,0.034832, -0.772167,-0.309062,-0.555193,0.399306,0.003521,-0.034832, -0.772167,-0.309062,-0.555193,0.5,-0.248054,-0.034832, -0.772167,-0.309062,-0.555193,0.3827,-0.039065,0.01197, 0.408832,0.598113,0.689287,0.5,-0.065307,-0.034832, 0.301513,0.649532,0.697996,0.399306,0.003521,-0.034832, 0.244597,0.610231,0.753518,0.3827,-0.039065,0.01197, -0.0018,-0.000471,-0.999998,0.5,-0.248054,-0.034832, -0.001465,-0.000586,-0.999999,0.399306,0.003521,-0.034832, 0,0,-1,0.5,-0.065307,-0.034832 }; static const struct gllist toaster_wing_frame = { GL_N3F_V3F, GL_TRIANGLES, 33, toaster_wing_data, 0 }; const struct gllist *toaster_wing = &toaster_wing_frame; xscreensaver-5.36/hacks/glx/toast.c000664 000767 000024 00000016717 12701612217 017334 0ustar00jwzstaff000000 000000 /* Generated from "toast.dxf" on Aug-22-2014. Smoothed vertex normals. Normalized to unit bounding box. */ #include "gllist.h" static const float toast_data[] = { 0,-1,0,0.391859,-0.5,0.047937, 0,-1,0,-0.3866,-0.5,-0.047937, 0,-1,0,0.391859,-0.5,-0.047937, 0,-1,0,-0.3866,-0.5,-0.047937, 0,-1,0,0.391859,-0.5,0.047937, 0,-1,0,-0.3866,-0.5,0.047937, 0.794299,-0.607527,0,0.448134,-0.426425,-0.047937, 0.794299,-0.607527,0,0.391859,-0.5,0.047937, 0.794299,-0.607527,0,0.391859,-0.5,-0.047937, 0.794299,-0.607527,0,0.391859,-0.5,0.047937, 0.794299,-0.607527,0,0.448134,-0.426425,-0.047937, 0.794299,-0.607527,0,0.448134,-0.426425,0.047937, 1,0,0,0.448134,0.061584,-0.047937, 1,0,0,0.448134,-0.426425,0.047937, 1,0,0,0.448134,-0.426425,-0.047937, 1,0,0,0.448134,-0.426425,0.047937, 1,0,0,0.448134,0.061584,-0.047937, 1,0,0,0.448134,0.061584,0.047937, -0.951883,0.306462,0,-0.3866,0.438467,0.047937, -0.978441,0.206528,0,-0.448134,0.247342,-0.047937, -0.994654,0.103264,0,-0.448134,0.247342,0.047937, -0.978441,0.206528,0,-0.448134,0.247342,-0.047937, -0.951883,0.306462,0,-0.3866,0.438467,0.047937, -0.951883,0.306462,0,-0.3866,0.438467,-0.047937, -0.994654,0.103264,0,-0.448134,0.247342,0.047937, -1,0,0,-0.448134,0.184705,-0.047937, -1,0,0,-0.448134,0.184705,0.047937, -1,0,0,-0.448134,0.184705,-0.047937, -0.994654,0.103264,0,-0.448134,0.247342,0.047937, -0.978441,0.206528,0,-0.448134,0.247342,-0.047937, -0.306512,0.951867,0,-0.3866,0.438467,0.047937, -0.206563,0.978433,0,-0.195512,0.5,-0.047937, -0.306512,0.951867,0,-0.3866,0.438467,-0.047937, -0.206563,0.978433,0,-0.195512,0.5,-0.047937, -0.306512,0.951867,0,-0.3866,0.438467,0.047937, -0.103281,0.994652,0,-0.195512,0.5,0.047937, 0.994378,0.105891,0,0.448134,0.247342,-0.047937, 1,0,0,0.448134,0.184705,0.047937, 1,0,0,0.448134,0.184705,-0.047937, 1,0,0,0.448134,0.184705,0.047937, 0.994378,0.105891,0,0.448134,0.247342,-0.047937, 0.977317,0.211783,0,0.448134,0.247342,0.047937, 0.949396,0.314082,0,0.384905,0.438467,-0.047937, 0.977317,0.211783,0,0.448134,0.247342,0.047937, 0.994378,0.105891,0,0.448134,0.247342,-0.047937, 0.977317,0.211783,0,0.448134,0.247342,0.047937, 0.949396,0.314082,0,0.384905,0.438467,-0.047937, 0.949396,0.314082,0,0.384905,0.438467,0.047937, 0,0,-1,-0.3866,0.438467,-0.047937, 0,0,-1,-0.448134,0.184705,-0.047937, 0,0,-1,-0.448134,0.247342,-0.047937, 0,0,-1,-0.448134,0.184705,-0.047937, 0,0,-1,-0.3866,0.438467,-0.047937, 0,0,-1,-0.394142,0.122068,-0.047937, 0,0,-1,0.448134,0.247342,-0.047937, 0,0,-1,0.384905,0.122068,-0.047937, 0,0,-1,0.384905,0.438467,-0.047937, 0,0,-1,0.384905,0.122068,-0.047937, 0,0,-1,0.448134,0.247342,-0.047937, 0,0,-1,0.448134,0.184705,-0.047937, 0,0,-1,-0.394142,0.122068,-0.047937, 0,0,-1,-0.448134,-0.426425,-0.047937, 0,0,-1,-0.448134,0.061584,-0.047937, 0,0,-1,-0.448134,-0.426425,-0.047937, 0,0,-1,-0.394142,0.122068,-0.047937, 0,0,-1,-0.3866,-0.5,-0.047937, 0,0,-1,-0.3866,-0.5,-0.047937, 0,0,-1,-0.394142,0.122068,-0.047937, 0,0,-1,-0.3866,0.438467,-0.047937, 0,0,-1,-0.3866,-0.5,-0.047937, 0,0,-1,-0.3866,0.438467,-0.047937, 0,0,-1,-0.195512,0.5,-0.047937, 0,0,-1,-0.3866,-0.5,-0.047937, 0,0,-1,-0.195512,0.5,-0.047937, 0,0,-1,0.391859,-0.5,-0.047937, 0,0,-1,0.391859,-0.5,-0.047937, 0,0,-1,-0.195512,0.5,-0.047937, 0,0,-1,0.193226,0.5,-0.047937, 0,0,-1,0.391859,-0.5,-0.047937, 0,0,-1,0.193226,0.5,-0.047937, 0,0,-1,0.384905,0.122068,-0.047937, 0,0,-1,0.384905,0.122068,-0.047937, 0,0,-1,0.193226,0.5,-0.047937, 0,0,-1,0.384905,0.438467,-0.047937, 0,0,-1,0.391859,-0.5,-0.047937, 0,0,-1,0.384905,0.122068,-0.047937, 0,0,-1,0.448134,0.061584,-0.047937, 0,0,-1,0.391859,-0.5,-0.047937, 0,0,-1,0.448134,0.061584,-0.047937, 0,0,-1,0.448134,-0.426425,-0.047937, 0.205973,0.978558,0,0.193226,0.5,0.047937, 0.305656,0.952142,0,0.384905,0.438467,-0.047937, 0.102986,0.994683,0,0.193226,0.5,-0.047937, 0.305656,0.952142,0,0.384905,0.438467,-0.047937, 0.205973,0.978558,0,0.193226,0.5,0.047937, 0.305656,0.952142,0,0.384905,0.438467,0.047937, -0.103281,0.994652,0,-0.195512,0.5,0.047937, 0.102986,0.994683,0,0.193226,0.5,-0.047937, -0.206563,0.978433,0,-0.195512,0.5,-0.047937, 0.102986,0.994683,0,0.193226,0.5,-0.047937, -0.103281,0.994652,0,-0.195512,0.5,0.047937, 0.205973,0.978558,0,0.193226,0.5,0.047937, 0.691249,0.722617,0,0.384905,0.122068,0.047937, 0.691249,0.722617,0,0.448134,0.061584,-0.047937, 0.691249,0.722617,0,0.384905,0.122068,-0.047937, 0.691249,0.722617,0,0.448134,0.061584,-0.047937, 0.691249,0.722617,0,0.384905,0.122068,0.047937, 0.691249,0.722617,0,0.448134,0.061584,0.047937, -1,0,0,-0.448134,0.061584,0.047937, -1,0,0,-0.448134,-0.426425,-0.047937, -1,0,0,-0.448134,-0.426425,0.047937, -1,0,0,-0.448134,-0.426425,-0.047937, -1,0,0,-0.448134,0.061584,0.047937, -1,0,0,-0.448134,0.061584,-0.047937, -0.767086,-0.641544,0,-0.448134,-0.426425,0.047937, -0.767086,-0.641544,0,-0.3866,-0.5,-0.047937, -0.767086,-0.641544,0,-0.3866,-0.5,0.047937, -0.767086,-0.641544,0,-0.3866,-0.5,-0.047937, -0.767086,-0.641544,0,-0.448134,-0.426425,0.047937, -0.767086,-0.641544,0,-0.448134,-0.426425,-0.047937, 0.703773,-0.710425,0,0.448134,0.184705,0.047937, 0.703773,-0.710425,0,0.384905,0.122068,-0.047937, 0.703773,-0.710425,0,0.448134,0.184705,-0.047937, 0.703773,-0.710425,0,0.384905,0.122068,-0.047937, 0.703773,-0.710425,0,0.448134,0.184705,0.047937, 0.703773,-0.710425,0,0.384905,0.122068,0.047937, -0.746008,0.665937,0,-0.394142,0.122068,0.047937, -0.746008,0.665937,0,-0.448134,0.061584,-0.047937, -0.746008,0.665937,0,-0.448134,0.061584,0.047937, -0.746008,0.665937,0,-0.448134,0.061584,-0.047937, -0.746008,0.665937,0,-0.394142,0.122068,0.047937, -0.746008,0.665937,0,-0.394142,0.122068,-0.047937, -0.757441,-0.652904,0,-0.448134,0.184705,0.047937, -0.757441,-0.652904,0,-0.394142,0.122068,-0.047937, -0.757441,-0.652904,0,-0.394142,0.122068,0.047937, -0.757441,-0.652904,0,-0.394142,0.122068,-0.047937, -0.757441,-0.652904,0,-0.448134,0.184705,0.047937, -0.757441,-0.652904,0,-0.448134,0.184705,-0.047937, 0,0,1,-0.3866,-0.5,0.047937, 0,0,1,-0.448134,0.061584,0.047937, 0,0,1,-0.448134,-0.426425,0.047937, 0,0,1,-0.448134,0.061584,0.047937, 0,0,1,-0.3866,-0.5,0.047937, 0,0,1,-0.394142,0.122068,0.047937, 0,0,1,-0.394142,0.122068,0.047937, 0,0,1,-0.448134,0.247342,0.047937, 0,0,1,-0.448134,0.184705,0.047937, 0,0,1,-0.448134,0.247342,0.047937, 0,0,1,-0.394142,0.122068,0.047937, 0,0,1,-0.3866,0.438467,0.047937, 0,0,1,-0.3866,0.438467,0.047937, 0,0,1,-0.394142,0.122068,0.047937, 0,0,1,-0.3866,-0.5,0.047937, 0,0,1,-0.3866,0.438467,0.047937, 0,0,1,-0.3866,-0.5,0.047937, 0,0,1,0.391859,-0.5,0.047937, 0,0,1,-0.3866,0.438467,0.047937, 0,0,1,0.391859,-0.5,0.047937, 0,0,1,-0.195512,0.5,0.047937, 0,0,1,-0.195512,0.5,0.047937, 0,0,1,0.391859,-0.5,0.047937, 0,0,1,0.193226,0.5,0.047937, 0,0,1,0.193226,0.5,0.047937, 0,0,1,0.391859,-0.5,0.047937, 0,0,1,0.384905,0.122068,0.047937, 0,0,1,0.193226,0.5,0.047937, 0,0,1,0.384905,0.122068,0.047937, 0,0,1,0.384905,0.438467,0.047937, 0,0,1,0.384905,0.122068,0.047937, 0,0,1,0.391859,-0.5,0.047937, 0,0,1,0.448134,0.061584,0.047937, 0,0,1,0.448134,0.061584,0.047937, 0,0,1,0.391859,-0.5,0.047937, 0,0,1,0.448134,-0.426425,0.047937, 0,0,1,0.384905,0.122068,0.047937, 0,0,1,0.448134,0.247342,0.047937, 0,0,1,0.384905,0.438467,0.047937, 0,0,1,0.448134,0.247342,0.047937, 0,0,1,0.384905,0.122068,0.047937, 0,0,1,0.448134,0.184705,0.047937 }; static const struct gllist toast_frame = { GL_N3F_V3F, GL_TRIANGLES, 180, toast_data, 0 }; const struct gllist *toast = &toast_frame; xscreensaver-5.36/hacks/glx/toast2.c000664 000767 000024 00000020620 12701612217 017402 0ustar00jwzstaff000000 000000 /* Generated from "toast2.dxf" on Aug-22-2014. Smoothed vertex normals. Normalized to unit bounding box. */ #include "gllist.h" static const float toast2_data[] = { -0.746008,0.665937,0,-0.394142,0.122068,0.047937, -0.746008,0.665937,0,-0.448134,0.061584,-0.047937, -0.746008,0.665937,0,-0.448134,0.061584,0.047937, -0.746008,0.665937,0,-0.448134,0.061584,-0.047937, -0.746008,0.665937,0,-0.394142,0.122068,0.047937, -0.746008,0.665937,0,-0.394142,0.122068,-0.047937, -0.757441,-0.652904,0,-0.448134,0.184705,0.047937, -0.757441,-0.652904,0,-0.394142,0.122068,-0.047937, -0.757441,-0.652904,0,-0.394142,0.122068,0.047937, -0.757441,-0.652904,0,-0.394142,0.122068,-0.047937, -0.757441,-0.652904,0,-0.448134,0.184705,0.047937, -0.757441,-0.652904,0,-0.448134,0.184705,-0.047937, 0,0,-1,0.448134,0.247342,-0.047937, 0,0,-1,0.384905,0.122068,-0.047937, 0,0,-1,0.384905,0.438467,-0.047937, 0,0,-1,0.384905,0.122068,-0.047937, 0,0,-1,0.448134,0.247342,-0.047937, 0,0,-1,0.448134,0.184705,-0.047937, 0,0,-1,-0.233894,0.20122,-0.047937, 0,0,-1,-0.448134,0.184705,-0.047937, 0,0,-1,-0.448134,0.247342,-0.047937, 0,0,-1,-0.448134,0.184705,-0.047937, 0,0,-1,-0.233894,0.20122,-0.047937, 0,0,-1,-0.394142,0.122068,-0.047937, 0,0,-1,-0.394142,0.122068,-0.047937, 0,0,-1,-0.233894,0.20122,-0.047937, 0,0,-1,-0.3866,-0.5,-0.047937, 0,0,-1,-0.3866,-0.5,-0.047937, 0,0,-1,-0.233894,0.20122,-0.047937, 0,0,-1,0.391859,-0.5,-0.047937, 0,0,-1,0.391859,-0.5,-0.047937, 0,0,-1,-0.233894,0.20122,-0.047937, 0,0,-1,-0.092355,0.236111,-0.047937, 0,0,-1,0.391859,-0.5,-0.047937, 0,0,-1,-0.092355,0.236111,-0.047937, 0,0,-1,-0.001143,0.324361,-0.047937, 0,0,-1,0.391859,-0.5,-0.047937, 0,0,-1,-0.001143,0.324361,-0.047937, 0,0,-1,0.039021,0.5,-0.047937, 0,0,-1,0.391859,-0.5,-0.047937, 0,0,-1,0.039021,0.5,-0.047937, 0,0,-1,0.193226,0.5,-0.047937, 0,0,-1,0.391859,-0.5,-0.047937, 0,0,-1,0.193226,0.5,-0.047937, 0,0,-1,0.384905,0.122068,-0.047937, 0,0,-1,0.384905,0.122068,-0.047937, 0,0,-1,0.193226,0.5,-0.047937, 0,0,-1,0.384905,0.438467,-0.047937, 0,0,-1,0.391859,-0.5,-0.047937, 0,0,-1,0.384905,0.122068,-0.047937, 0,0,-1,0.448134,0.061584,-0.047937, 0,0,-1,0.391859,-0.5,-0.047937, 0,0,-1,0.448134,0.061584,-0.047937, 0,0,-1,0.448134,-0.426425,-0.047937, 0,0,-1,-0.394142,0.122068,-0.047937, 0,0,-1,-0.448134,-0.426425,-0.047937, 0,0,-1,-0.448134,0.061584,-0.047937, 0,0,-1,-0.448134,-0.426425,-0.047937, 0,0,-1,-0.394142,0.122068,-0.047937, 0,0,-1,-0.3866,-0.5,-0.047937, 0,0,1,-0.3866,-0.5,0.047937, 0,0,1,-0.448134,0.061584,0.047937, 0,0,1,-0.448134,-0.426425,0.047937, 0,0,1,-0.448134,0.061584,0.047937, 0,0,1,-0.3866,-0.5,0.047937, 0,0,1,-0.394142,0.122068,0.047937, 0,0,1,-0.394142,0.122068,0.047937, 0,0,1,-0.448134,0.247342,0.047937, 0,0,1,-0.448134,0.184705,0.047937, 0,0,1,-0.448134,0.247342,0.047937, 0,0,1,-0.394142,0.122068,0.047937, 0,0,1,-0.233894,0.20122,0.047937, 0,0,1,-0.233894,0.20122,0.047937, 0,0,1,-0.394142,0.122068,0.047937, 0,0,1,-0.3866,-0.5,0.047937, 0,0,1,-0.233894,0.20122,0.047937, 0,0,1,-0.3866,-0.5,0.047937, 0,0,1,0.391859,-0.5,0.047937, 0,0,1,-0.233894,0.20122,0.047937, 0,0,1,0.391859,-0.5,0.047937, 0,0,1,-0.092355,0.236111,0.047937, 0,0,1,-0.092355,0.236111,0.047937, 0,0,1,0.391859,-0.5,0.047937, 0,0,1,-0.001143,0.324361,0.047937, 0,0,1,-0.001143,0.324361,0.047937, 0,0,1,0.391859,-0.5,0.047937, 0,0,1,0.039021,0.5,0.047937, 0,0,1,0.039021,0.5,0.047937, 0,0,1,0.391859,-0.5,0.047937, 0,0,1,0.193226,0.5,0.047937, 0,0,1,0.193226,0.5,0.047937, 0,0,1,0.391859,-0.5,0.047937, 0,0,1,0.384905,0.122068,0.047937, 0,0,1,0.193226,0.5,0.047937, 0,0,1,0.384905,0.122068,0.047937, 0,0,1,0.384905,0.438467,0.047937, 0,0,1,0.384905,0.122068,0.047937, 0,0,1,0.391859,-0.5,0.047937, 0,0,1,0.448134,0.061584,0.047937, 0,0,1,0.448134,0.061584,0.047937, 0,0,1,0.391859,-0.5,0.047937, 0,0,1,0.448134,-0.426425,0.047937, 0,0,1,0.384905,0.122068,0.047937, 0,0,1,0.448134,0.247342,0.047937, 0,0,1,0.384905,0.438467,0.047937, 0,0,1,0.448134,0.247342,0.047937, 0,0,1,0.384905,0.122068,0.047937, 0,0,1,0.448134,0.184705,0.047937, 0.210457,0.977603,0,-0.448134,0.247342,0.047937, 0.061931,0.99808,0,-0.233894,0.20122,-0.047937, 0.210457,0.977603,0,-0.448134,0.247342,-0.047937, 0.061931,0.99808,0,-0.233894,0.20122,-0.047937, 0.210457,0.977603,0,-0.448134,0.247342,0.047937, -0.091493,0.995806,0,-0.233894,0.20122,0.047937, -0.974837,0.222918,0,0.039021,0.5,0.047937, -0.974837,0.222918,0,-0.001143,0.324361,-0.047937, -0.974837,0.222918,0,-0.001143,0.324361,0.047937, -0.974837,0.222918,0,-0.001143,0.324361,-0.047937, -0.974837,0.222918,0,0.039021,0.5,0.047937, -0.974837,0.222918,0,0.039021,0.5,-0.047937, -0.091493,0.995806,0,-0.233894,0.20122,0.047937, -0.239346,0.970934,0,-0.092355,0.236111,-0.047937, 0.061931,0.99808,0,-0.233894,0.20122,-0.047937, -0.239346,0.970934,0,-0.092355,0.236111,-0.047937, -0.091493,0.995806,0,-0.233894,0.20122,0.047937, -0.239346,0.970934,0,-0.092355,0.236111,0.047937, -0.695338,0.718683,0,-0.092355,0.236111,0.047937, -0.695338,0.718683,0,-0.001143,0.324361,-0.047937, -0.695338,0.718683,0,-0.092355,0.236111,-0.047937, -0.695338,0.718683,0,-0.001143,0.324361,-0.047937, -0.695338,0.718683,0,-0.092355,0.236111,0.047937, -0.695338,0.718683,0,-0.001143,0.324361,0.047937, -1,0,0,-0.448134,0.247342,0.047937, -1,0,0,-0.448134,0.184705,-0.047937, -1,0,0,-0.448134,0.184705,0.047937, -1,0,0,-0.448134,0.184705,-0.047937, -1,0,0,-0.448134,0.247342,0.047937, -1,0,0,-0.448134,0.247342,-0.047937, 0,1,0,0.039021,0.5,0.047937, 0.102986,0.994683,0,0.193226,0.5,-0.047937, 0,1,0,0.039021,0.5,-0.047937, 0.102986,0.994683,0,0.193226,0.5,-0.047937, 0,1,0,0.039021,0.5,0.047937, 0.205973,0.978558,0,0.193226,0.5,0.047937, 0.205973,0.978558,0,0.193226,0.5,0.047937, 0.305656,0.952142,0,0.384905,0.438467,-0.047937, 0.102986,0.994683,0,0.193226,0.5,-0.047937, 0.305656,0.952142,0,0.384905,0.438467,-0.047937, 0.205973,0.978558,0,0.193226,0.5,0.047937, 0.305656,0.952142,0,0.384905,0.438467,0.047937, 0.949396,0.314082,0,0.384905,0.438467,-0.047937, 0.977317,0.211783,0,0.448134,0.247342,0.047937, 0.994378,0.105891,0,0.448134,0.247342,-0.047937, 0.977317,0.211783,0,0.448134,0.247342,0.047937, 0.949396,0.314082,0,0.384905,0.438467,-0.047937, 0.949396,0.314082,0,0.384905,0.438467,0.047937, 0.994378,0.105891,0,0.448134,0.247342,-0.047937, 1,0,0,0.448134,0.184705,0.047937, 1,0,0,0.448134,0.184705,-0.047937, 1,0,0,0.448134,0.184705,0.047937, 0.994378,0.105891,0,0.448134,0.247342,-0.047937, 0.977317,0.211783,0,0.448134,0.247342,0.047937, 0.703773,-0.710425,0,0.448134,0.184705,0.047937, 0.703773,-0.710425,0,0.384905,0.122068,-0.047937, 0.703773,-0.710425,0,0.448134,0.184705,-0.047937, 0.703773,-0.710425,0,0.384905,0.122068,-0.047937, 0.703773,-0.710425,0,0.448134,0.184705,0.047937, 0.703773,-0.710425,0,0.384905,0.122068,0.047937, 0.691249,0.722617,0,0.384905,0.122068,0.047937, 0.691249,0.722617,0,0.448134,0.061584,-0.047937, 0.691249,0.722617,0,0.384905,0.122068,-0.047937, 0.691249,0.722617,0,0.448134,0.061584,-0.047937, 0.691249,0.722617,0,0.384905,0.122068,0.047937, 0.691249,0.722617,0,0.448134,0.061584,0.047937, 1,0,0,0.448134,0.061584,-0.047937, 1,0,0,0.448134,-0.426425,0.047937, 1,0,0,0.448134,-0.426425,-0.047937, 1,0,0,0.448134,-0.426425,0.047937, 1,0,0,0.448134,0.061584,-0.047937, 1,0,0,0.448134,0.061584,0.047937, 0.794299,-0.607527,0,0.448134,-0.426425,-0.047937, 0.794299,-0.607527,0,0.391859,-0.5,0.047937, 0.794299,-0.607527,0,0.391859,-0.5,-0.047937, 0.794299,-0.607527,0,0.391859,-0.5,0.047937, 0.794299,-0.607527,0,0.448134,-0.426425,-0.047937, 0.794299,-0.607527,0,0.448134,-0.426425,0.047937, 0,-1,0,0.391859,-0.5,0.047937, 0,-1,0,-0.3866,-0.5,-0.047937, 0,-1,0,0.391859,-0.5,-0.047937, 0,-1,0,-0.3866,-0.5,-0.047937, 0,-1,0,0.391859,-0.5,0.047937, 0,-1,0,-0.3866,-0.5,0.047937, -0.767086,-0.641544,0,-0.448134,-0.426425,0.047937, -0.767086,-0.641544,0,-0.3866,-0.5,-0.047937, -0.767086,-0.641544,0,-0.3866,-0.5,0.047937, -0.767086,-0.641544,0,-0.3866,-0.5,-0.047937, -0.767086,-0.641544,0,-0.448134,-0.426425,0.047937, -0.767086,-0.641544,0,-0.448134,-0.426425,-0.047937, -1,0,0,-0.448134,0.061584,0.047937, -1,0,0,-0.448134,-0.426425,-0.047937, -1,0,0,-0.448134,-0.426425,0.047937, -1,0,0,-0.448134,-0.426425,-0.047937, -1,0,0,-0.448134,0.061584,0.047937, -1,0,0,-0.448134,0.061584,-0.047937 }; static const struct gllist toast2_frame = { GL_N3F_V3F, GL_TRIANGLES, 204, toast2_data, 0 }; const struct gllist *toast2 = &toast2_frame; xscreensaver-5.36/hacks/glx/bouncingcow.c000664 000767 000024 00000032557 12721365623 020527 0ustar00jwzstaff000000 000000 /* bouncingcow, Copyright (c) 2003-2014 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. * * Boing, boing, boing. Cow, cow, cow. */ #define DEFAULTS "*delay: 30000 \n" \ "*count: 1 \n" \ "*showFPS: False \n" \ "*wireframe: False \n" \ # define refresh_cow 0 # define release_cow 0 #define DEF_SPEED "1.0" #define DEF_TEXTURE "(none)" #undef countof #define countof(x) (sizeof((x))/sizeof((*x))) #undef BELLRAND #define BELLRAND(n) ((frand((n)) + frand((n)) + frand((n))) / 3) #undef RANDSIGN #define RANDSIGN() ((random() & 1) ? 1 : -1) #include "xlockmore.h" #include "rotator.h" #include "gltrackball.h" #include "xpm-ximage.h" #include #ifdef USE_GL /* whole file */ #include "gllist.h" extern struct gllist *cow_face, *cow_hide, *cow_hoofs, *cow_horns, *cow_tail, *cow_udder; static struct gllist **all_objs[] = { &cow_face, &cow_hide, &cow_hoofs, &cow_horns, &cow_tail, &cow_udder }; #define FACE 0 #define HIDE 1 #define HOOFS 2 #define HORNS 3 #define TAIL 4 #define UDDER 5 typedef struct { GLfloat x, y, z; GLfloat ix, iy, iz; GLfloat dx, dy, dz; GLfloat ddx, ddy, ddz; rotator *rot; Bool spinner_p; } floater; typedef struct { GLXContext *glx_context; trackball_state *trackball; Bool button_down_p; GLuint *dlists; GLuint texture; int nfloaters; floater *floaters; } cow_configuration; static cow_configuration *bps = NULL; static GLfloat speed; static const char *do_texture; static XrmOptionDescRec opts[] = { { "-speed", ".speed", XrmoptionSepArg, 0 }, {"-texture", ".texture", XrmoptionSepArg, 0 }, {"+texture", ".texture", XrmoptionNoArg, "(none)" }, }; static argtype vars[] = { {&speed, "speed", "Speed", DEF_SPEED, t_Float}, {&do_texture, "texture", "Texture", DEF_TEXTURE, t_String}, }; ENTRYPOINT ModeSpecOpt cow_opts = {countof(opts), opts, countof(vars), vars, NULL}; #define BOTTOM 28.0 static void reset_floater (ModeInfo *mi, floater *f) { cow_configuration *bp = &bps[MI_SCREEN(mi)]; f->y = -BOTTOM; f->x = f->ix; f->z = f->iz; /* Yes, I know I'm varying the force of gravity instead of varying the launch velocity. That's intentional: empirical studies indicate that it's way, way funnier that way. */ f->dy = 5.0; f->dx = 0; f->dz = 0; /* -0.18 max -0.3 top -0.4 middle -0.6 bottom */ f->ddy = speed * (-0.6 + BELLRAND(0.45)); f->ddx = 0; f->ddz = 0; f->spinner_p = !(random() % (12 * bp->nfloaters)); if (! (random() % (30 * bp->nfloaters))) { f->dx = BELLRAND(1.8) * RANDSIGN(); f->dz = BELLRAND(1.8) * RANDSIGN(); } } static void tick_floater (ModeInfo *mi, floater *f) { cow_configuration *bp = &bps[MI_SCREEN(mi)]; if (bp->button_down_p) return; f->dx += f->ddx; f->dy += f->ddy; f->dz += f->ddz; f->x += f->dx * speed; f->y += f->dy * speed; f->z += f->dz * speed; if (f->y < -BOTTOM || f->x < -BOTTOM*8 || f->x > BOTTOM*8 || f->z < -BOTTOM*8 || f->z > BOTTOM*8) reset_floater (mi, f); } /* Window management, etc */ ENTRYPOINT void reshape_cow (ModeInfo *mi, int width, int height) { GLfloat h = (GLfloat) height / (GLfloat) width; glViewport (0, 0, (GLint) width, (GLint) height); glMatrixMode(GL_PROJECTION); glLoadIdentity(); gluPerspective (30.0, 1/h, 1.0, 100); glMatrixMode(GL_MODELVIEW); glLoadIdentity(); gluLookAt( 0.0, 0.0, 30.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0); glClear(GL_COLOR_BUFFER_BIT); } ENTRYPOINT Bool cow_handle_event (ModeInfo *mi, XEvent *event) { cow_configuration *bp = &bps[MI_SCREEN(mi)]; if (gltrackball_event_handler (event, bp->trackball, MI_WIDTH (mi), MI_HEIGHT (mi), &bp->button_down_p)) return True; return False; } /* Textures */ static Bool load_texture (ModeInfo *mi, const char *filename) { Display *dpy = mi->dpy; Visual *visual = mi->xgwa.visual; Colormap cmap = mi->xgwa.colormap; char buf[1024]; XImage *image; if (MI_IS_WIREFRAME(mi)) return False; if (!filename || !*filename || !strcasecmp (filename, "(none)")) { glDisable (GL_TEXTURE_2D); return False; } image = xpm_file_to_ximage (dpy, visual, cmap, filename); if (!image) return False; clear_gl_error(); glTexImage2D (GL_TEXTURE_2D, 0, GL_RGBA, image->width, image->height, 0, GL_RGBA, /* GL_UNSIGNED_BYTE, */ GL_UNSIGNED_INT_8_8_8_8_REV, image->data); sprintf (buf, "texture: %.100s (%dx%d)", filename, image->width, image->height); check_gl_error(buf); glPixelStorei (GL_UNPACK_ALIGNMENT, 4); glPixelStorei (GL_UNPACK_ROW_LENGTH, image->width); return True; } ENTRYPOINT void init_cow (ModeInfo *mi) { cow_configuration *bp; int wire = MI_IS_WIREFRAME(mi); int i; Bool tex_p = False; if (!bps) { bps = (cow_configuration *) calloc (MI_NUM_SCREENS(mi), sizeof (cow_configuration)); if (!bps) { fprintf(stderr, "%s: out of memory\n", progname); exit(1); } } bp = &bps[MI_SCREEN(mi)]; bp->glx_context = init_GL(mi); reshape_cow (mi, MI_WIDTH(mi), MI_HEIGHT(mi)); glShadeModel(GL_SMOOTH); glEnable(GL_DEPTH_TEST); glEnable(GL_NORMALIZE); glEnable(GL_CULL_FACE); if (!wire) { GLfloat pos[4] = {0.4, 0.2, 0.4, 0.0}; /* GLfloat amb[4] = {0.0, 0.0, 0.0, 1.0};*/ GLfloat amb[4] = {0.2, 0.2, 0.2, 1.0}; GLfloat dif[4] = {1.0, 1.0, 1.0, 1.0}; GLfloat spc[4] = {1.0, 1.0, 1.0, 1.0}; glEnable(GL_LIGHTING); glEnable(GL_LIGHT0); glEnable(GL_DEPTH_TEST); glEnable(GL_CULL_FACE); glLightfv(GL_LIGHT0, GL_POSITION, pos); glLightfv(GL_LIGHT0, GL_AMBIENT, amb); glLightfv(GL_LIGHT0, GL_DIFFUSE, dif); glLightfv(GL_LIGHT0, GL_SPECULAR, spc); } bp->trackball = gltrackball_init (False); bp->dlists = (GLuint *) calloc (countof(all_objs)+1, sizeof(GLuint)); for (i = 0; i < countof(all_objs); i++) bp->dlists[i] = glGenLists (1); tex_p = load_texture (mi, do_texture); if (tex_p) glBindTexture (GL_TEXTURE_2D, bp->texture); for (i = 0; i < countof(all_objs); i++) { GLfloat black[4] = {0, 0, 0, 1}; const struct gllist *gll = *all_objs[i]; glNewList (bp->dlists[i], GL_COMPILE); glDisable (GL_TEXTURE_2D); if (i == HIDE) { GLfloat color[4] = {0.63, 0.43, 0.36, 1.00}; if (tex_p) { /* if we have a texture, make the base color be white. */ color[0] = color[1] = color[2] = 1.0; glTexGeni (GL_S, GL_TEXTURE_GEN_MODE, GL_OBJECT_LINEAR); glTexGeni (GL_T, GL_TEXTURE_GEN_MODE, GL_OBJECT_LINEAR); glTexEnvf (GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); glEnable(GL_TEXTURE_GEN_S); glEnable(GL_TEXTURE_GEN_T); glEnable(GL_TEXTURE_2D); /* approximately line it up with ../images/earth.xpm */ glMatrixMode (GL_TEXTURE); glLoadIdentity(); glTranslatef (0.45, 0.58, 0); glScalef (0.08, 0.16, 1); glRotatef (-5, 0, 0, 1); glMatrixMode (GL_MODELVIEW); } glMaterialfv (GL_FRONT_AND_BACK, GL_AMBIENT_AND_DIFFUSE, color); glMaterialfv (GL_FRONT_AND_BACK, GL_SPECULAR, black); glMaterialf (GL_FRONT_AND_BACK, GL_SHININESS, 128); } else if (i == TAIL) { GLfloat color[4] = {0.63, 0.43, 0.36, 1.00}; glMaterialfv (GL_FRONT_AND_BACK, GL_AMBIENT_AND_DIFFUSE, color); glMaterialfv (GL_FRONT_AND_BACK, GL_SPECULAR, black); glMaterialf (GL_FRONT_AND_BACK, GL_SHININESS, 128); } else if (i == UDDER) { GLfloat color[4] = {1.00, 0.53, 0.53, 1.00}; glMaterialfv (GL_FRONT_AND_BACK, GL_AMBIENT_AND_DIFFUSE, color); glMaterialfv (GL_FRONT_AND_BACK, GL_SPECULAR, black); glMaterialf (GL_FRONT_AND_BACK, GL_SHININESS, 128); } else if (i == HOOFS || i == HORNS) { GLfloat color[4] = {0.20, 0.20, 0.20, 1.00}; GLfloat spec[4] = {0.30, 0.30, 0.30, 1.00}; GLfloat shiny = 8.0; glMaterialfv (GL_FRONT_AND_BACK, GL_AMBIENT_AND_DIFFUSE, color); glMaterialfv (GL_FRONT_AND_BACK, GL_SPECULAR, spec); glMaterialf (GL_FRONT_AND_BACK, GL_SHININESS, shiny); } else if (i == FACE) { GLfloat color[4] = {0.10, 0.10, 0.10, 1.00}; GLfloat spec[4] = {0.10, 0.10, 0.10, 1.00}; GLfloat shiny = 8.0; glMaterialfv (GL_FRONT_AND_BACK, GL_AMBIENT_AND_DIFFUSE, color); glMaterialfv (GL_FRONT_AND_BACK, GL_SPECULAR, spec); glMaterialf (GL_FRONT_AND_BACK, GL_SHININESS, shiny); } else { GLfloat color[4] = {1.00, 1.00, 1.00, 1.00}; GLfloat spec[4] = {1.00, 1.00, 1.00, 1.00}; GLfloat shiny = 128.0; glMaterialfv (GL_FRONT_AND_BACK, GL_AMBIENT_AND_DIFFUSE, color); glMaterialfv (GL_FRONT_AND_BACK, GL_SPECULAR, spec); glMaterialf (GL_FRONT_AND_BACK, GL_SHININESS, shiny); } renderList (gll, wire); glEndList (); } bp->nfloaters = MI_COUNT (mi); bp->floaters = (floater *) calloc (bp->nfloaters, sizeof (floater)); for (i = 0; i < bp->nfloaters; i++) { floater *f = &bp->floaters[i]; f->rot = make_rotator (10.0, 0, 0, 4, 0.05 * speed, True); if (bp->nfloaters == 2) { f->x = (i ? 6 : -6); } else if (i != 0) { double th = (i - 1) * M_PI*2 / (bp->nfloaters-1); double r = 10; f->x = r * cos(th); f->z = r * sin(th); } f->ix = f->x; f->iy = f->y; f->iz = f->z; reset_floater (mi, f); } } static void draw_floater (ModeInfo *mi, floater *f) { cow_configuration *bp = &bps[MI_SCREEN(mi)]; GLfloat n; double x, y, z; get_position (f->rot, &x, &y, &z, !bp->button_down_p); 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) { glRotatef (x * 360, 1.0, 0.0, 0.0); glRotatef (z * 360, 0.0, 0.0, 1.0); } n = 1.5; if (bp->nfloaters > 99) n *= 0.05; else if (bp->nfloaters > 25) n *= 0.18; else if (bp->nfloaters > 9) n *= 0.3; else if (bp->nfloaters > 1) n *= 0.7; glScalef(n, n, n); glCallList (bp->dlists[FACE]); mi->polygon_count += (*all_objs[FACE])->points / 3; glCallList (bp->dlists[HIDE]); mi->polygon_count += (*all_objs[HIDE])->points / 3; glCallList (bp->dlists[HOOFS]); mi->polygon_count += (*all_objs[HOOFS])->points / 3; glCallList (bp->dlists[HORNS]); mi->polygon_count += (*all_objs[HORNS])->points / 3; glCallList (bp->dlists[TAIL]); mi->polygon_count += (*all_objs[TAIL])->points / 3; glCallList (bp->dlists[UDDER]); mi->polygon_count += (*all_objs[UDDER])->points / 3; glPopMatrix(); } ENTRYPOINT void draw_cow (ModeInfo *mi) { cow_configuration *bp = &bps[MI_SCREEN(mi)]; Display *dpy = MI_DISPLAY(mi); Window window = MI_WINDOW(mi); int i; if (!bp->glx_context) return; glXMakeCurrent(MI_DISPLAY(mi), MI_WINDOW(mi), *(bp->glx_context)); glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glPushMatrix (); # ifdef HAVE_MOBILE /* Keep it the same relative size when rotated. */ { GLfloat h = MI_HEIGHT(mi) / (GLfloat) MI_WIDTH(mi); int o = (int) current_device_rotation(); if (o != 0 && o != 180 && o != -180) glScalef (1/h, 1/h, 1/h); glRotatef(o, 0, 0, 1); } # endif glScalef (0.5, 0.5, 0.5); mi->polygon_count = 0; # if 0 { floater F; F.x = F.y = F.z = 0; F.dx = F.dy = F.dz = 0; F.ddx = F.ddy = F.ddz = 0; F.rot = make_rotator (0, 0, 0, 1, 0, False); glScalef(2,2,2); draw_floater (mi, &F); } # else for (i = 0; i < bp->nfloaters; i++) { /* "Don't kid yourself, Jimmy. If a cow ever got the chance, he'd eat you and everyone you care about!" -- Troy McClure in "Meat and You: Partners in Freedom" */ floater *f = &bp->floaters[i]; draw_floater (mi, f); tick_floater (mi, f); } # endif glPopMatrix (); if (mi->fps_p) do_fps (mi); glFinish(); glXSwapBuffers(dpy, window); } XSCREENSAVER_MODULE_2 ("BouncingCow", bouncingcow, cow) #endif /* USE_GL */ xscreensaver-5.36/hacks/glx/cow_face.c000644 000767 000024 00000045711 12701612217 017742 0ustar00jwzstaff000000 000000 #include "gllist.h" static const float data[]={ 0.193291,-0.074799,-0.978286,4.897808,1.946794,-0.628057, 0.133638,0.26732,-0.954296,4.925394,1.955229,-0.618837, 0.555353,0.50765,-0.658692,4.953739,1.95258,-0.592256, 0.193291,-0.074799,-0.978286,4.897808,1.946794,-0.628057, 0.555353,0.50765,-0.658692,4.953739,1.95258,-0.592256, 0.823157,0.134624,-0.551625,4.971872,1.924079,-0.586026, 0.193291,-0.074799,-0.978286,4.897808,1.946794,-0.628057, 0.823157,0.134624,-0.551625,4.971872,1.924079,-0.586026, 0.774925,-0.116115,-0.621296,4.953403,1.907939,-0.605609, 0.193291,-0.074799,-0.978286,4.897808,1.946794,-0.628057, 0.774925,-0.116115,-0.621296,4.953403,1.907939,-0.605609, 0.546619,0.025491,-0.836994,4.925499,1.917814,-0.613413, 0.872792,-0.115436,-0.474246,4.973133,1.992779,-0.533466, 0.412833,-0.156453,-0.897269,5.001903,1.914398,-0.486724, 0.823157,0.134624,-0.551625,4.971872,1.924079,-0.586026, 0.872792,-0.115436,-0.474246,4.973133,1.992779,-0.533466, 0.823157,0.134624,-0.551625,4.971872,1.924079,-0.586026, 0.555353,0.50765,-0.658692,4.953739,1.95258,-0.592256, 0.823157,0.134624,-0.551625,4.971872,1.924079,-0.586026, 0.412833,-0.156453,-0.897269,5.001903,1.914398,-0.486724, 0.108828,-0.182644,-0.977137,4.982364,1.8733,-0.53619, 0.823157,0.134624,-0.551625,4.971872,1.924079,-0.586026, 0.108828,-0.182644,-0.977137,4.982364,1.8733,-0.53619, 0.774925,-0.116115,-0.621296,4.953403,1.907939,-0.605609, 0.774925,-0.116115,-0.621296,4.953403,1.907939,-0.605609, 0.108828,-0.182644,-0.977137,4.982364,1.8733,-0.53619, 0.746476,-0.187741,-0.638379,4.926194,1.859813,-0.582137, 0.546619,0.025491,-0.836994,4.925499,1.917814,-0.613413, 0.774925,-0.116115,-0.621296,4.953403,1.907939,-0.605609, 0.746476,-0.187741,-0.638379,4.926194,1.859813,-0.582137, 0.546619,0.025491,-0.836994,4.925499,1.917814,-0.613413, 0.746476,-0.187741,-0.638379,4.926194,1.859813,-0.582137, 0.897742,-0.15037,-0.414063,4.852578,1.889721,-0.605031, 0.193291,-0.074799,-0.978286,4.897808,1.946794,-0.628057, 0.546619,0.025491,-0.836994,4.925499,1.917814,-0.613413, 0.897742,-0.15037,-0.414063,4.852578,1.889721,-0.605031, 0.193291,-0.074799,-0.978286,4.897808,1.946794,-0.628057, 0.897742,-0.15037,-0.414063,4.852578,1.889721,-0.605031, 0.544735,0.449335,-0.708069,4.824747,1.946835,-0.626358, 0.193291,-0.074799,-0.978286,4.897808,1.946794,-0.628057, 0.544735,0.449335,-0.708069,4.824747,1.946835,-0.626358, 0.721999,0.398917,-0.565316,4.861611,2.001639,-0.621913, 0.711192,0.127662,-0.69131,4.935561,2.016016,-0.5857, 0.872792,-0.115436,-0.474246,4.973133,1.992779,-0.533466, 0.555353,0.50765,-0.658692,4.953739,1.95258,-0.592256, 0.711192,0.127662,-0.69131,4.935561,2.016016,-0.5857, 0.555353,0.50765,-0.658692,4.953739,1.95258,-0.592256, 0.133638,0.26732,-0.954296,4.925394,1.955229,-0.618837, 0.909103,0.416568,-0.001454,5.908782,1.066916,0.001121, 0.535268,0.844682,0.000171,5.871947,1.021428,0.001102, -0.091049,-0.145989,-0.985087,5.897758,1.009309,-0.080583, 0.909103,0.416568,-0.001454,5.908782,1.066916,0.001121, -0.091049,-0.145989,-0.985087,5.897758,1.009309,-0.080583, 0.054456,-0.320459,-0.945696,5.934596,1.054796,-0.077039, 0.054456,-0.320459,-0.945696,5.934596,1.054796,-0.077039, -0.091049,-0.145989,-0.985087,5.897758,1.009309,-0.080583, -0.126433,-0.433465,-0.892257,5.87863,0.986485,-0.128292, 0.054456,-0.320459,-0.945696,5.934596,1.054796,-0.077039, -0.126433,-0.433465,-0.892257,5.87863,0.986485,-0.128292, 0.169576,-0.140705,-0.975421,5.923808,1.025283,-0.153084, 0.169576,-0.140705,-0.975421,5.923808,1.025283,-0.153084, -0.126433,-0.433465,-0.892257,5.87863,0.986485,-0.128292, 0.256335,-0.2349,-0.937611,5.757506,0.9579,-0.210732, 0.169576,-0.140705,-0.975421,5.923808,1.025283,-0.153084, 0.256335,-0.2349,-0.937611,5.757506,0.9579,-0.210732, 0.120494,-0.516376,-0.847843,5.85775,0.997026,-0.236768, 0.396941,-0.593504,-0.700137,5.755282,1.004149,-0.307505, 0.120494,-0.516376,-0.847843,5.85775,0.997026,-0.236768, 0.256335,-0.2349,-0.937611,5.757506,0.9579,-0.210732, 0.396941,-0.593504,-0.700137,5.755282,1.004149,-0.307505, 0.256335,-0.2349,-0.937611,5.757506,0.9579,-0.210732, 0.204472,-0.587725,-0.782797,5.674999,0.950754,-0.22796, 0.485455,-0.874253,0.003847,5.895899,1.18273,-0.164705, 0.223936,-0.919046,-0.324355,5.959462,1.157227,-0.187097, 0.051115,-0.906355,-0.419414,5.912147,1.117911,-0.254197, 0.035706,-0.99787,-0.054588,5.849792,1.19348,-0.181047, 0.485455,-0.874253,0.003847,5.895899,1.18273,-0.164705, 0.051115,-0.906355,-0.419414,5.912147,1.117911,-0.254197, 0.035706,-0.99787,-0.054588,5.849792,1.19348,-0.181047, 0.051115,-0.906355,-0.419414,5.912147,1.117911,-0.254197, 0.161367,-0.802085,-0.574996,5.837875,1.141493,-0.305184, -0.034221,-0.995012,-0.093703,5.803425,1.260787,-0.210002, 0.064626,-0.99783,0.012619,5.840665,1.221942,-0.187128, 0.218068,-0.756332,-0.616772,5.77341,1.225861,-0.323025, -0.034221,-0.995012,-0.093703,5.803425,1.260787,-0.210002, 0.218068,-0.756332,-0.616772,5.77341,1.225861,-0.323025, 0.725751,-0.657941,-0.200998,5.764774,1.279824,-0.308562, -0.034221,-0.995012,-0.093703,5.803425,1.260787,-0.210002, 0.725751,-0.657941,-0.200998,5.764774,1.279824,-0.308562, 0.188634,-0.17518,-0.966297,5.783731,1.341471,-0.28459, -0.034221,-0.995012,-0.093703,5.803425,1.260787,-0.210002, 0.188634,-0.17518,-0.966297,5.783731,1.341471,-0.28459, 0.244568,-0.04472,-0.9686,5.847989,1.311569,-0.261476, -0.034221,-0.995012,-0.093703,5.803425,1.260787,-0.210002, 0.244568,-0.04472,-0.9686,5.847989,1.311569,-0.261476, 0.193495,-0.385604,-0.902147,5.931474,1.233483,-0.215613, -0.034221,-0.995012,-0.093703,5.803425,1.260787,-0.210002, 0.193495,-0.385604,-0.902147,5.931474,1.233483,-0.215613, 0.064626,-0.99783,0.012619,5.840665,1.221942,-0.187128, 0.064626,-0.99783,0.012619,5.840665,1.221942,-0.187128, 0.193495,-0.385604,-0.902147,5.931474,1.233483,-0.215613, 0.035706,-0.99787,-0.054588,5.849792,1.19348,-0.181047, 0.193495,-0.385604,-0.902147,5.931474,1.233483,-0.215613, -0.026148,0.006311,-0.999638,5.998088,1.231874,-0.107334, 0.485455,-0.874253,0.003847,5.895899,1.18273,-0.164705, 0.193495,-0.385604,-0.902147,5.931474,1.233483,-0.215613, 0.485455,-0.874253,0.003847,5.895899,1.18273,-0.164705, 0.035706,-0.99787,-0.054588,5.849792,1.19348,-0.181047, 0.173726,-0.983856,0.042973,5.672385,1.007694,-0.341778, 0.396941,-0.593504,-0.700137,5.755282,1.004149,-0.307505, 0.204472,-0.587725,-0.782797,5.674999,0.950754,-0.22796, 0.173726,-0.983856,0.042973,5.672385,1.007694,-0.341778, 0.204472,-0.587725,-0.782797,5.674999,0.950754,-0.22796, -0.007021,-0.990239,-0.139206,5.573803,0.952578,-0.243886, 0.148862,-0.934725,-0.322692,5.580727,0.99933,-0.349867, 0.173726,-0.983856,0.042973,5.672385,1.007694,-0.341778, -0.007021,-0.990239,-0.139206,5.573803,0.952578,-0.243886, 0.148862,-0.934725,-0.322692,5.580727,0.99933,-0.349867, -0.007021,-0.990239,-0.139206,5.573803,0.952578,-0.243886, 0.241652,-0.897637,-0.368581,5.535184,0.98018,-0.341257, -0.007021,-0.990239,-0.139206,5.573803,0.952578,-0.243886, 0.204472,-0.587725,-0.782797,5.674999,0.950754,-0.22796, -0.045194,-0.595739,-0.801906,5.638369,0.904402,-0.222548, -0.007021,-0.990239,-0.139206,5.573803,0.952578,-0.243886, -0.045194,-0.595739,-0.801906,5.638369,0.904402,-0.222548, -0.016623,-0.697515,-0.716378,5.546347,0.916044,-0.246782, 0.204472,-0.587725,-0.782797,5.674999,0.950754,-0.22796, 0.256335,-0.2349,-0.937611,5.757506,0.9579,-0.210732, -0.105003,-0.636187,-0.764356,5.748613,0.92049,-0.205099, 0.204472,-0.587725,-0.782797,5.674999,0.950754,-0.22796, -0.105003,-0.636187,-0.764356,5.748613,0.92049,-0.205099, -0.045194,-0.595739,-0.801906,5.638369,0.904402,-0.222548, -0.126433,-0.433465,-0.892257,5.87863,0.986485,-0.128292, -0.106359,-0.394397,-0.912764,5.851404,0.929008,-0.105362, -0.105003,-0.636187,-0.764356,5.748613,0.92049,-0.205099, -0.126433,-0.433465,-0.892257,5.87863,0.986485,-0.128292, -0.105003,-0.636187,-0.764356,5.748613,0.92049,-0.205099, 0.256335,-0.2349,-0.937611,5.757506,0.9579,-0.210732, 0.535268,0.844682,0.000171,5.871947,1.021428,0.001102, 0.997356,-0.072614,-0.002907,5.836005,0.945722,0.001092, -0.091049,-0.145989,-0.985087,5.897758,1.009309,-0.080583, -0.091049,-0.145989,-0.985087,5.897758,1.009309,-0.080583, 0.997356,-0.072614,-0.002907,5.836005,0.945722,0.001092, -0.106359,-0.394397,-0.912764,5.851404,0.929008,-0.105362, -0.091049,-0.145989,-0.985087,5.897758,1.009309,-0.080583, -0.106359,-0.394397,-0.912764,5.851404,0.929008,-0.105362, -0.126433,-0.433465,-0.892257,5.87863,0.986485,-0.128292, -0.026148,0.006311,-0.999638,5.998088,1.231874,-0.107334, 0.223936,-0.919046,-0.324355,5.959462,1.157227,-0.187097, 0.485455,-0.874253,0.003847,5.895899,1.18273,-0.164705, 0.161367,-0.802085,-0.574996,5.837875,1.141493,-0.305184, 0.218068,-0.756332,-0.616772,5.77341,1.225861,-0.323025, 0.064626,-0.99783,0.012619,5.840665,1.221942,-0.187128, 0.161367,-0.802085,-0.574996,5.837875,1.141493,-0.305184, 0.064626,-0.99783,0.012619,5.840665,1.221942,-0.187128, 0.035706,-0.99787,-0.054588,5.849792,1.19348,-0.181047, 0.241652,-0.897637,-0.368581,5.535184,0.98018,-0.341257, -0.007021,-0.990239,-0.139206,5.573803,0.952578,-0.243886, -0.016623,-0.697515,-0.716378,5.546347,0.916044,-0.246782, 0.241652,-0.897637,-0.368581,5.535184,0.98018,-0.341257, -0.016623,-0.697515,-0.716378,5.546347,0.916044,-0.246782, 0.241049,-0.626018,-0.741618,5.480649,0.941387,-0.316248, 0.193291,-0.074799,-0.978286,4.897808,1.946794,-0.628057, 0.721999,0.398917,-0.565316,4.861611,2.001639,-0.621913, 0.711192,0.127662,-0.69131,4.935561,2.016016,-0.5857, 0.193291,-0.074799,-0.978286,4.897808,1.946794,-0.628057, 0.711192,0.127662,-0.69131,4.935561,2.016016,-0.5857, 0.133638,0.26732,-0.954296,4.925394,1.955229,-0.618837, 0.347878,0.028988,0.937092,4.925499,1.917814,0.613413, 0.458202,0.052175,0.887316,4.953403,1.907939,0.605609, 0.444094,0.036127,0.895251,4.971872,1.924079,0.586026, 0.347878,0.028988,0.937092,4.925499,1.917814,0.613413, 0.444094,0.036127,0.895251,4.971872,1.924079,0.586026, 0.328548,0.219459,0.918637,4.953739,1.95258,0.592256, 0.347878,0.028988,0.937092,4.925499,1.917814,0.613413, 0.328548,0.219459,0.918637,4.953739,1.95258,0.592256, 0.719268,0.159442,0.676189,4.925394,1.955229,0.618837, 0.347878,0.028988,0.937092,4.925499,1.917814,0.613413, 0.719268,0.159442,0.676189,4.925394,1.955229,0.618837, 0.561013,0.750789,0.348684,4.897808,1.946794,0.628057, 0.328548,0.219459,0.918637,4.953739,1.95258,0.592256, 0.444094,0.036127,0.895251,4.971872,1.924079,0.586026, 0.380651,0.443224,0.811577,5.001903,1.914398,0.486724, 0.328548,0.219459,0.918637,4.953739,1.95258,0.592256, 0.380651,0.443224,0.811577,5.001903,1.914398,0.486724, 0.282492,0.026081,0.958915,4.973133,1.992779,0.533466, 0.458202,0.052175,0.887316,4.953403,1.907939,0.605609, 0.362705,0.428702,0.827442,4.982364,1.8733,0.53619, 0.380651,0.443224,0.811577,5.001903,1.914398,0.486724, 0.458202,0.052175,0.887316,4.953403,1.907939,0.605609, 0.380651,0.443224,0.811577,5.001903,1.914398,0.486724, 0.444094,0.036127,0.895251,4.971872,1.924079,0.586026, 0.332757,0.286207,0.898531,4.926194,1.859813,0.582137, 0.362705,0.428702,0.827442,4.982364,1.8733,0.53619, 0.458202,0.052175,0.887316,4.953403,1.907939,0.605609, 0.302716,0.058971,0.951255,4.852578,1.889721,0.605031, 0.332757,0.286207,0.898531,4.926194,1.859813,0.582137, 0.458202,0.052175,0.887316,4.953403,1.907939,0.605609, 0.302716,0.058971,0.951255,4.852578,1.889721,0.605031, 0.458202,0.052175,0.887316,4.953403,1.907939,0.605609, 0.347878,0.028988,0.937092,4.925499,1.917814,0.613413, 0.347794,0.132396,0.928176,4.824747,1.946835,0.626358, 0.302716,0.058971,0.951255,4.852578,1.889721,0.605031, 0.347878,0.028988,0.937092,4.925499,1.917814,0.613413, 0.347794,0.132396,0.928176,4.824747,1.946835,0.626358, 0.347878,0.028988,0.937092,4.925499,1.917814,0.613413, 0.561013,0.750789,0.348684,4.897808,1.946794,0.628057, 0.36359,0.089346,0.927264,4.861611,2.001639,0.621913, 0.347794,0.132396,0.928176,4.824747,1.946835,0.626358, 0.561013,0.750789,0.348684,4.897808,1.946794,0.628057, 0.719268,0.159442,0.676189,4.925394,1.955229,0.618837, 0.328548,0.219459,0.918637,4.953739,1.95258,0.592256, 0.282492,0.026081,0.958915,4.973133,1.992779,0.533466, 0.719268,0.159442,0.676189,4.925394,1.955229,0.618837, 0.282492,0.026081,0.958915,4.973133,1.992779,0.533466, 0.361081,-0.056526,0.93082,4.935561,2.016016,0.5857, 0.800967,0.453079,-0.391371,5.934596,1.054796,0.077039, 0.054059,0.926072,-0.373455,5.897758,1.009309,0.080583, 0.535268,0.844682,0.000171,5.871947,1.021428,0.001102, 0.800967,0.453079,-0.391371,5.934596,1.054796,0.077039, 0.535268,0.844682,0.000171,5.871947,1.021428,0.001102, 0.909103,0.416568,-0.001454,5.908782,1.066916,0.001121, 0.693689,0.317887,-0.646331,5.923808,1.025283,0.153084, 0.329366,0.742755,-0.582952,5.87863,0.986485,0.128292, 0.054059,0.926072,-0.373455,5.897758,1.009309,0.080583, 0.693689,0.317887,-0.646331,5.923808,1.025283,0.153084, 0.054059,0.926072,-0.373455,5.897758,1.009309,0.080583, 0.800967,0.453079,-0.391371,5.934596,1.054796,0.077039, -0.051423,0.948155,-0.31362,5.85775,0.997026,0.236768, 0.971427,0.045661,-0.232906,5.757506,0.9579,0.210732, 0.329366,0.742755,-0.582952,5.87863,0.986485,0.128292, -0.051423,0.948155,-0.31362,5.85775,0.997026,0.236768, 0.329366,0.742755,-0.582952,5.87863,0.986485,0.128292, 0.693689,0.317887,-0.646331,5.923808,1.025283,0.153084, 0.850248,-0.122854,-0.511845,5.674999,0.950754,0.22796, 0.971427,0.045661,-0.232906,5.757506,0.9579,0.210732, -0.051423,0.948155,-0.31362,5.85775,0.997026,0.236768, 0.850248,-0.122854,-0.511845,5.674999,0.950754,0.22796, -0.051423,0.948155,-0.31362,5.85775,0.997026,0.236768, 0.104327,0.725166,-0.680625,5.755282,1.004149,0.307505, 0.811896,0.498733,0.303464,5.912147,1.117911,0.254197, 0.969409,0.243854,0.027951,5.959462,1.157227,0.187097, 0.169215,-0.167065,-0.971317,5.895899,1.18273,0.164705, 0.603382,-0.138832,-0.785275,5.837875,1.141493,0.305184, 0.811896,0.498733,0.303464,5.912147,1.117911,0.254197, 0.169215,-0.167065,-0.971317,5.895899,1.18273,0.164705, 0.603382,-0.138832,-0.785275,5.837875,1.141493,0.305184, 0.169215,-0.167065,-0.971317,5.895899,1.18273,0.164705, 0.054838,0.68532,-0.726174,5.849792,1.19348,0.181047, 0.104604,0.236958,-0.965872,5.764774,1.279824,0.308562, 0.335985,-0.093512,-0.937214,5.77341,1.225861,0.323025, -0.071389,0.260053,-0.962952,5.840665,1.221942,0.187128, 0.104604,0.236958,-0.965872,5.764774,1.279824,0.308562, -0.071389,0.260053,-0.962952,5.840665,1.221942,0.187128, -0.026478,0.945923,-0.323309,5.803425,1.260787,0.210002, -0.0511,0.977083,-0.206633,5.783731,1.341471,0.28459, 0.104604,0.236958,-0.965872,5.764774,1.279824,0.308562, -0.026478,0.945923,-0.323309,5.803425,1.260787,0.210002, 0.481644,0.842268,-0.242082,5.847989,1.311569,0.261476, -0.0511,0.977083,-0.206633,5.783731,1.341471,0.28459, -0.026478,0.945923,-0.323309,5.803425,1.260787,0.210002, -0.071389,0.260053,-0.962952,5.840665,1.221942,0.187128, 0.794567,0.588129,-0.15089,5.931474,1.233483,0.215613, 0.481644,0.842268,-0.242082,5.847989,1.311569,0.261476, -0.071389,0.260053,-0.962952,5.840665,1.221942,0.187128, 0.481644,0.842268,-0.242082,5.847989,1.311569,0.261476, -0.026478,0.945923,-0.323309,5.803425,1.260787,0.210002, 0.054838,0.68532,-0.726174,5.849792,1.19348,0.181047, 0.794567,0.588129,-0.15089,5.931474,1.233483,0.215613, -0.071389,0.260053,-0.962952,5.840665,1.221942,0.187128, 0.054838,0.68532,-0.726174,5.849792,1.19348,0.181047, 0.169215,-0.167065,-0.971317,5.895899,1.18273,0.164705, 0.04154,0.947538,-0.316933,5.998088,1.231874,0.107334, 0.054838,0.68532,-0.726174,5.849792,1.19348,0.181047, 0.04154,0.947538,-0.316933,5.998088,1.231874,0.107334, 0.794567,0.588129,-0.15089,5.931474,1.233483,0.215613, -0.03479,0.696668,-0.716549,5.573803,0.952578,0.243886, 0.850248,-0.122854,-0.511845,5.674999,0.950754,0.22796, 0.104327,0.725166,-0.680625,5.755282,1.004149,0.307505, -0.03479,0.696668,-0.716549,5.573803,0.952578,0.243886, 0.104327,0.725166,-0.680625,5.755282,1.004149,0.307505, -0.011269,-0.268801,-0.96313,5.672385,1.007694,0.341778, -0.03479,0.696668,-0.716549,5.573803,0.952578,0.243886, -0.011269,-0.268801,-0.96313,5.672385,1.007694,0.341778, -0.01139,0.953897,-0.299918,5.580727,0.99933,0.349867, -0.151742,0.274295,-0.949598,5.535184,0.98018,0.341257, -0.03479,0.696668,-0.716549,5.573803,0.952578,0.243886, -0.01139,0.953897,-0.299918,5.580727,0.99933,0.349867, 0.176955,-0.903058,0.391373,5.546347,0.916044,0.246782, 0.571342,-0.680689,-0.45851,5.638369,0.904402,0.222548, 0.850248,-0.122854,-0.511845,5.674999,0.950754,0.22796, 0.176955,-0.903058,0.391373,5.546347,0.916044,0.246782, 0.850248,-0.122854,-0.511845,5.674999,0.950754,0.22796, -0.03479,0.696668,-0.716549,5.573803,0.952578,0.243886, 0.571342,-0.680689,-0.45851,5.638369,0.904402,0.222548, 0.388502,-0.6643,-0.63857,5.748613,0.92049,0.205099, 0.971427,0.045661,-0.232906,5.757506,0.9579,0.210732, 0.571342,-0.680689,-0.45851,5.638369,0.904402,0.222548, 0.971427,0.045661,-0.232906,5.757506,0.9579,0.210732, 0.850248,-0.122854,-0.511845,5.674999,0.950754,0.22796, 0.971427,0.045661,-0.232906,5.757506,0.9579,0.210732, 0.388502,-0.6643,-0.63857,5.748613,0.92049,0.205099, 0.20994,-0.930128,0.301309,5.851404,0.929008,0.105362, 0.971427,0.045661,-0.232906,5.757506,0.9579,0.210732, 0.20994,-0.930128,0.301309,5.851404,0.929008,0.105362, 0.329366,0.742755,-0.582952,5.87863,0.986485,0.128292, 0.054059,0.926072,-0.373455,5.897758,1.009309,0.080583, 0.997356,-0.072614,-0.002907,5.836005,0.945722,0.001092, 0.535268,0.844682,0.000171,5.871947,1.021428,0.001102, 0.329366,0.742755,-0.582952,5.87863,0.986485,0.128292, 0.20994,-0.930128,0.301309,5.851404,0.929008,0.105362, 0.997356,-0.072614,-0.002907,5.836005,0.945722,0.001092, 0.329366,0.742755,-0.582952,5.87863,0.986485,0.128292, 0.997356,-0.072614,-0.002907,5.836005,0.945722,0.001092, 0.054059,0.926072,-0.373455,5.897758,1.009309,0.080583, 0.169215,-0.167065,-0.971317,5.895899,1.18273,0.164705, 0.969409,0.243854,0.027951,5.959462,1.157227,0.187097, 0.04154,0.947538,-0.316933,5.998088,1.231874,0.107334, 0.054838,0.68532,-0.726174,5.849792,1.19348,0.181047, -0.071389,0.260053,-0.962952,5.840665,1.221942,0.187128, 0.335985,-0.093512,-0.937214,5.77341,1.225861,0.323025, 0.054838,0.68532,-0.726174,5.849792,1.19348,0.181047, 0.335985,-0.093512,-0.937214,5.77341,1.225861,0.323025, 0.603382,-0.138832,-0.785275,5.837875,1.141493,0.305184, 0.083641,-0.81989,0.566378,5.480649,0.941387,0.316248, 0.176955,-0.903058,0.391373,5.546347,0.916044,0.246782, -0.03479,0.696668,-0.716549,5.573803,0.952578,0.243886, 0.083641,-0.81989,0.566378,5.480649,0.941387,0.316248, -0.03479,0.696668,-0.716549,5.573803,0.952578,0.243886, -0.151742,0.274295,-0.949598,5.535184,0.98018,0.341257, 0.719268,0.159442,0.676189,4.925394,1.955229,0.618837, 0.361081,-0.056526,0.93082,4.935561,2.016016,0.5857, 0.36359,0.089346,0.927264,4.861611,2.001639,0.621913, 0.719268,0.159442,0.676189,4.925394,1.955229,0.618837, 0.36359,0.089346,0.927264,4.861611,2.001639,0.621913, 0.561013,0.750789,0.348684,4.897808,1.946794,0.628057 }; static const struct gllist frame={GL_N3F_V3F,GL_TRIANGLES,336,data,NULL}; const struct gllist *cow_face=&frame; xscreensaver-5.36/hacks/glx/cow_hide.c000644 000767 000024 00002672706 12701612217 017771 0ustar00jwzstaff000000 000000 #include "gllist.h" static const float data[]={ -0.012663,0.029084,-0.999497,2.229345,-0.992723,-0.862826, -0.096144,-0.182414,-0.97851,2.292449,-0.871852,-0.8824, 0.795625,-0.129968,-0.591684,2.410367,-0.777999,-0.841105, -0.012663,0.029084,-0.999497,2.229345,-0.992723,-0.862826, 0.795625,-0.129968,-0.591684,2.410367,-0.777999,-0.841105, -0.200187,-0.124247,-0.971848,2.407309,-0.97498,-0.805091, -0.200187,-0.124247,-0.971848,2.407309,-0.97498,-0.805091, 0.795625,-0.129968,-0.591684,2.410367,-0.777999,-0.841105, 0.908163,-0.140074,-0.394486,2.5392,-0.727778,-0.750475, -0.200187,-0.124247,-0.971848,2.407309,-0.97498,-0.805091, 0.908163,-0.140074,-0.394486,2.5392,-0.727778,-0.750475, 0.023112,-0.187685,-0.981957,2.520417,-0.954785,-0.739445, 0.023112,-0.187685,-0.981957,2.520417,-0.954785,-0.739445, 0.908163,-0.140074,-0.394486,2.5392,-0.727778,-0.750475, 0.720876,-0.356662,-0.594247,2.637655,-0.768176,-0.637039, 0.720876,-0.356662,-0.594247,2.637655,-0.768176,-0.637039, 0.709718,-0.453838,-0.538824,2.669281,-0.930664,-0.557166, 0.4379,-0.250054,-0.863549,2.514167,-1.077721,-0.706614, 0.720876,-0.356662,-0.594247,2.637655,-0.768176,-0.637039, 0.4379,-0.250054,-0.863549,2.514167,-1.077721,-0.706614, 0.023112,-0.187685,-0.981957,2.520417,-0.954785,-0.739445, 0.023112,-0.187685,-0.981957,2.520417,-0.954785,-0.739445, 0.4379,-0.250054,-0.863549,2.514167,-1.077721,-0.706614, 0.6483,-0.171023,-0.741928,2.386465,-1.116066,-0.761367, 0.023112,-0.187685,-0.981957,2.520417,-0.954785,-0.739445, 0.6483,-0.171023,-0.741928,2.386465,-1.116066,-0.761367, -0.200187,-0.124247,-0.971848,2.407309,-0.97498,-0.805091, -0.200187,-0.124247,-0.971848,2.407309,-0.97498,-0.805091, 0.6483,-0.171023,-0.741928,2.386465,-1.116066,-0.761367, 0.70745,-0.193334,-0.679806,2.180012,-1.130557,-0.821812, -0.200187,-0.124247,-0.971848,2.407309,-0.97498,-0.805091, 0.70745,-0.193334,-0.679806,2.180012,-1.130557,-0.821812, -0.012663,0.029084,-0.999497,2.229345,-0.992723,-0.862826, 0.70745,-0.193334,-0.679806,2.180012,-1.130557,-0.821812, 0.6483,-0.171023,-0.741928,2.386465,-1.116066,-0.761367, 0.71475,-0.118625,-0.689246,2.354287,-1.193746,-0.735189, 0.70745,-0.193334,-0.679806,2.180012,-1.130557,-0.821812, 0.71475,-0.118625,-0.689246,2.354287,-1.193746,-0.735189, 0.608407,-0.244593,-0.754993,2.158051,-1.209613,-0.783941, 0.608407,-0.244593,-0.754993,2.158051,-1.209613,-0.783941, 0.71475,-0.118625,-0.689246,2.354287,-1.193746,-0.735189, 0.370396,-0.365961,-0.853744,2.318787,-1.29409,-0.673863, 0.608407,-0.244593,-0.754993,2.158051,-1.209613,-0.783941, 0.370396,-0.365961,-0.853744,2.318787,-1.29409,-0.673863, 0.727678,-0.414895,-0.546211,2.126237,-1.330172,-0.721011, 0.727678,-0.414895,-0.546211,2.126237,-1.330172,-0.721011, 0.370396,-0.365961,-0.853744,2.318787,-1.29409,-0.673863, 0.324748,-0.466051,-0.823003,2.274533,-1.433487,-0.567366, 0.324748,-0.466051,-0.823003,2.274533,-1.433487,-0.567366, 0.370396,-0.365961,-0.853744,2.318787,-1.29409,-0.673863, 0.727708,-0.453484,-0.514581,2.486533,-1.274971,-0.627822, 0.324748,-0.466051,-0.823003,2.274533,-1.433487,-0.567366, 0.727708,-0.453484,-0.514581,2.486533,-1.274971,-0.627822, 0.287759,-0.574148,-0.766517,2.45706,-1.400958,-0.539866, 0.287759,-0.574148,-0.766517,2.45706,-1.400958,-0.539866, 0.727708,-0.453484,-0.514581,2.486533,-1.274971,-0.627822, 0.677632,-0.514013,-0.525933,2.549322,-1.335209,-0.535156, 0.677632,-0.514013,-0.525933,2.549322,-1.335209,-0.535156, 0.727708,-0.453484,-0.514581,2.486533,-1.274971,-0.627822, 0.290845,-0.56858,-0.769497,2.61797,-1.235597,-0.520238, 0.290845,-0.56858,-0.769497,2.61797,-1.235597,-0.520238, 0.727708,-0.453484,-0.514581,2.486533,-1.274971,-0.627822, 0.478274,-0.500384,-0.721713,2.510841,-1.158786,-0.678057, 0.290845,-0.56858,-0.769497,2.61797,-1.235597,-0.520238, 0.478274,-0.500384,-0.721713,2.510841,-1.158786,-0.678057, 0.245892,-0.489895,-0.836385,2.670253,-1.108365,-0.544018, 0.478274,-0.500384,-0.721713,2.510841,-1.158786,-0.678057, 0.727708,-0.453484,-0.514581,2.486533,-1.274971,-0.627822, 0.370396,-0.365961,-0.853744,2.318787,-1.29409,-0.673863, 0.478274,-0.500384,-0.721713,2.510841,-1.158786,-0.678057, 0.370396,-0.365961,-0.853744,2.318787,-1.29409,-0.673863, 0.71475,-0.118625,-0.689246,2.354287,-1.193746,-0.735189, 0.71475,-0.118625,-0.689246,2.354287,-1.193746,-0.735189, 0.6483,-0.171023,-0.741928,2.386465,-1.116066,-0.761367, 0.4379,-0.250054,-0.863549,2.514167,-1.077721,-0.706614, 0.71475,-0.118625,-0.689246,2.354287,-1.193746,-0.735189, 0.4379,-0.250054,-0.863549,2.514167,-1.077721,-0.706614, 0.478274,-0.500384,-0.721713,2.510841,-1.158786,-0.678057, 0.478274,-0.500384,-0.721713,2.510841,-1.158786,-0.678057, 0.4379,-0.250054,-0.863549,2.514167,-1.077721,-0.706614, 0.709718,-0.453838,-0.538824,2.669281,-0.930664,-0.557166, 0.478274,-0.500384,-0.721713,2.510841,-1.158786,-0.678057, 0.709718,-0.453838,-0.538824,2.669281,-0.930664,-0.557166, 0.245892,-0.489895,-0.836385,2.670253,-1.108365,-0.544018, 0.709718,-0.453838,-0.538824,2.669281,-0.930664,-0.557166, 0.720876,-0.356662,-0.594247,2.637655,-0.768176,-0.637039, 0.430574,-0.353967,-0.830249,2.710721,-0.830091,-0.532493, 0.245892,-0.489895,-0.836385,2.670253,-1.108365,-0.544018, 0.539192,-0.226204,-0.811236,2.857666,-0.930625,-0.391195, 0.543412,-0.359347,-0.758665,2.757946,-1.099958,-0.471684, 0.543412,-0.359347,-0.758665,2.757946,-1.099958,-0.471684, 0.290845,-0.56858,-0.769497,2.61797,-1.235597,-0.520238, 0.245892,-0.489895,-0.836385,2.670253,-1.108365,-0.544018, 0.543412,-0.359347,-0.758665,2.757946,-1.099958,-0.471684, 0.663699,-0.195183,-0.722085,2.847364,-1.103812,-0.402301, 0.675576,-0.202498,-0.708937,2.803736,-1.255869,-0.438328, 0.543412,-0.359347,-0.758665,2.757946,-1.099958,-0.471684, 0.675576,-0.202498,-0.708937,2.803736,-1.255869,-0.438328, 0.290845,-0.56858,-0.769497,2.61797,-1.235597,-0.520238, 0.663699,-0.195183,-0.722085,2.847364,-1.103812,-0.402301, 0.543412,-0.359347,-0.758665,2.757946,-1.099958,-0.471684, 0.539192,-0.226204,-0.811236,2.857666,-0.930625,-0.391195, 0.290845,-0.56858,-0.769497,2.61797,-1.235597,-0.520238, 0.675576,-0.202498,-0.708937,2.803736,-1.255869,-0.438328, 0.655995,-0.105886,-0.747301,2.740886,-1.339225,-0.463604, 0.290845,-0.56858,-0.769497,2.61797,-1.235597,-0.520238, 0.655995,-0.105886,-0.747301,2.740886,-1.339225,-0.463604, 0.594643,-0.107364,-0.796789,2.663024,-1.440487,-0.478149, 0.290845,-0.56858,-0.769497,2.61797,-1.235597,-0.520238, 0.594643,-0.107364,-0.796789,2.663024,-1.440487,-0.478149, 0.677632,-0.514013,-0.525933,2.549322,-1.335209,-0.535156, 0.677632,-0.514013,-0.525933,2.549322,-1.335209,-0.535156, 0.594643,-0.107364,-0.796789,2.663024,-1.440487,-0.478149, 0.648132,-0.027411,-0.761034,2.515314,-1.507063,-0.483275, 0.677632,-0.514013,-0.525933,2.549322,-1.335209,-0.535156, 0.648132,-0.027411,-0.761034,2.515314,-1.507063,-0.483275, 0.287759,-0.574148,-0.766517,2.45706,-1.400958,-0.539866, 0.287759,-0.574148,-0.766517,2.45706,-1.400958,-0.539866, 0.648132,-0.027411,-0.761034,2.515314,-1.507063,-0.483275, 0.58512,-0.108234,-0.803692,2.422296,-1.510915,-0.494169, 0.287759,-0.574148,-0.766517,2.45706,-1.400958,-0.539866, 0.58512,-0.108234,-0.803692,2.422296,-1.510915,-0.494169, 0.518786,-0.204527,-0.830078,2.249663,-1.492705,-0.53127, 0.287759,-0.574148,-0.766517,2.45706,-1.400958,-0.539866, 0.518786,-0.204527,-0.830078,2.249663,-1.492705,-0.53127, 0.324748,-0.466051,-0.823003,2.274533,-1.433487,-0.567366, 0.324748,-0.466051,-0.823003,2.274533,-1.433487,-0.567366, 0.518786,-0.204527,-0.830078,2.249663,-1.492705,-0.53127, 0.437631,-0.408484,-0.801012,2.0796,-1.473377,-0.654997, 0.324748,-0.466051,-0.823003,2.274533,-1.433487,-0.567366, 0.437631,-0.408484,-0.801012,2.0796,-1.473377,-0.654997, 0.727678,-0.414895,-0.546211,2.126237,-1.330172,-0.721011, 0.539192,-0.226204,-0.811236,2.857666,-0.930625,-0.391195, 0.189478,-0.558571,-0.807525,2.960118,-0.941827,-0.284743, 0.112446,-0.61866,-0.77757,2.928787,-1.107467,-0.312054, 0.539192,-0.226204,-0.811236,2.857666,-0.930625,-0.391195, 0.112446,-0.61866,-0.77757,2.928787,-1.107467,-0.312054, 0.663699,-0.195183,-0.722085,2.847364,-1.103812,-0.402301, 0.663699,-0.195183,-0.722085,2.847364,-1.103812,-0.402301, 0.112446,-0.61866,-0.77757,2.928787,-1.107467,-0.312054, 0.276661,-0.626708,-0.728489,2.893096,-1.302168,-0.332049, 0.663699,-0.195183,-0.722085,2.847364,-1.103812,-0.402301, 0.276661,-0.626708,-0.728489,2.893096,-1.302168,-0.332049, 0.675576,-0.202498,-0.708937,2.803736,-1.255869,-0.438328, 0.675576,-0.202498,-0.708937,2.803736,-1.255869,-0.438328, 0.276661,-0.626708,-0.728489,2.893096,-1.302168,-0.332049, 0.690473,-0.61586,-0.379425,2.824356,-1.407256,-0.355013, 0.675576,-0.202498,-0.708937,2.803736,-1.255869,-0.438328, 0.690473,-0.61586,-0.379425,2.824356,-1.407256,-0.355013, 0.655995,-0.105886,-0.747301,2.740886,-1.339225,-0.463604, 0.690473,-0.61586,-0.379425,2.824356,-1.407256,-0.355013, 0.883063,-0.251635,-0.396079,2.721135,-1.520418,-0.362378, 0.594643,-0.107364,-0.796789,2.663024,-1.440487,-0.478149, 0.594643,-0.107364,-0.796789,2.663024,-1.440487,-0.478149, 0.883063,-0.251635,-0.396079,2.721135,-1.520418,-0.362378, 0.918784,-0.122699,-0.375208,2.545261,-1.5933,-0.38631, 0.594643,-0.107364,-0.796789,2.663024,-1.440487,-0.478149, 0.918784,-0.122699,-0.375208,2.545261,-1.5933,-0.38631, 0.648132,-0.027411,-0.761034,2.515314,-1.507063,-0.483275, 0.648132,-0.027411,-0.761034,2.515314,-1.507063,-0.483275, 0.918784,-0.122699,-0.375208,2.545261,-1.5933,-0.38631, 0.876436,-0.293555,-0.381688,2.396607,-1.593239,-0.389972, 0.648132,-0.027411,-0.761034,2.515314,-1.507063,-0.483275, 0.876436,-0.293555,-0.381688,2.396607,-1.593239,-0.389972, 0.58512,-0.108234,-0.803692,2.422296,-1.510915,-0.494169, 0.58512,-0.108234,-0.803692,2.422296,-1.510915,-0.494169, 0.876436,-0.293555,-0.381688,2.396607,-1.593239,-0.389972, 0.728904,-0.519576,-0.445802,2.243492,-1.584783,-0.431143, 0.58512,-0.108234,-0.803692,2.422296,-1.510915,-0.494169, 0.728904,-0.519576,-0.445802,2.243492,-1.584783,-0.431143, 0.518786,-0.204527,-0.830078,2.249663,-1.492705,-0.53127, 0.518786,-0.204527,-0.830078,2.249663,-1.492705,-0.53127, 0.728904,-0.519576,-0.445802,2.243492,-1.584783,-0.431143, 0.552828,-0.750794,-0.36151,2.0482,-1.581983,-0.555832, 0.518786,-0.204527,-0.830078,2.249663,-1.492705,-0.53127, 0.552828,-0.750794,-0.36151,2.0482,-1.581983,-0.555832, 0.437631,-0.408484,-0.801012,2.0796,-1.473377,-0.654997, 0.189478,-0.558571,-0.807525,2.960118,-0.941827,-0.284743, -0.334515,0.94239,0,2.970902,-0.959664,0, 0.820584,-0.571526,0,2.931756,-1.129655,0, 0.189478,-0.558571,-0.807525,2.960118,-0.941827,-0.284743, 0.820584,-0.571526,0,2.931756,-1.129655,0, 0.112446,-0.61866,-0.77757,2.928787,-1.107467,-0.312054, 0.112446,-0.61866,-0.77757,2.928787,-1.107467,-0.312054, 0.820584,-0.571526,0,2.931756,-1.129655,0, -0.255632,0.966774,0,2.896234,-1.31956,0, 0.112446,-0.61866,-0.77757,2.928787,-1.107467,-0.312054, -0.255632,0.966774,0,2.896234,-1.31956,0, 0.276661,-0.626708,-0.728489,2.893096,-1.302168,-0.332049, 0.276661,-0.626708,-0.728489,2.893096,-1.302168,-0.332049, -0.255632,0.966774,0,2.896234,-1.31956,0, 0.826305,-0.563222,0,2.821376,-1.431534,0, 0.276661,-0.626708,-0.728489,2.893096,-1.302168,-0.332049, 0.826305,-0.563222,0,2.821376,-1.431534,0, 0.690473,-0.61586,-0.379425,2.824356,-1.407256,-0.355013, 0.690473,-0.61586,-0.379425,2.824356,-1.407256,-0.355013, 0.826305,-0.563222,0,2.821376,-1.431534,0, -0.133012,0.991114,0,2.706963,-1.528854,0, 0.690473,-0.61586,-0.379425,2.824356,-1.407256,-0.355013, -0.133012,0.991114,0,2.706963,-1.528854,0, 0.883063,-0.251635,-0.396079,2.721135,-1.520418,-0.362378, 0.883063,-0.251635,-0.396079,2.721135,-1.520418,-0.362378, -0.133012,0.991114,0,2.706963,-1.528854,0, 0.815341,-0.578981,0,2.534227,-1.617078,0, 0.883063,-0.251635,-0.396079,2.721135,-1.520418,-0.362378, 0.815341,-0.578981,0,2.534227,-1.617078,0, 0.918784,-0.122699,-0.375208,2.545261,-1.5933,-0.38631, 0.918784,-0.122699,-0.375208,2.545261,-1.5933,-0.38631, 0.815341,-0.578981,0,2.534227,-1.617078,0, -0.144073,0.989567,0,2.348182,-1.624595,0, 0.918784,-0.122699,-0.375208,2.545261,-1.5933,-0.38631, -0.144073,0.989567,0,2.348182,-1.624595,0, 0.876436,-0.293555,-0.381688,2.396607,-1.593239,-0.389972, 0.876436,-0.293555,-0.381688,2.396607,-1.593239,-0.389972, -0.144073,0.989567,0,2.348182,-1.624595,0, -0.073566,0.99729,0,2.167167,-1.596326,0, 0.876436,-0.293555,-0.381688,2.396607,-1.593239,-0.389972, -0.073566,0.99729,0,2.167167,-1.596326,0, 0.728904,-0.519576,-0.445802,2.243492,-1.584783,-0.431143, 0.728904,-0.519576,-0.445802,2.243492,-1.584783,-0.431143, -0.073566,0.99729,0,2.167167,-1.596326,0, -0.034649,0.9994,0,1.920432,-1.567396,0, 0.728904,-0.519576,-0.445802,2.243492,-1.584783,-0.431143, -0.034649,0.9994,0,1.920432,-1.567396,0, 0.552828,-0.750794,-0.36151,2.0482,-1.581983,-0.555832, 0.226413,-0.89822,-0.376747,2.881063,-0.493146,-0.521968, 0.763734,0.228435,-0.603761,2.736198,-0.346225,-0.659345, 0.016767,-0.927537,-0.373356,2.835437,-0.231101,-0.57789, 0.016767,-0.927537,-0.373356,2.835437,-0.231101,-0.57789, 0.486425,0.192908,-0.852161,2.986408,-0.413503,-0.428964, 0.226413,-0.89822,-0.376747,2.881063,-0.493146,-0.521968, 0.226413,-0.89822,-0.376747,2.881063,-0.493146,-0.521968, 0.486425,0.192908,-0.852161,2.986408,-0.413503,-0.428964, 0.08136,-0.929085,-0.360806,2.910769,-0.638444,-0.431191, 0.08136,-0.929085,-0.360806,2.910769,-0.638444,-0.431191, 0.295093,-0.940225,-0.16999,2.82554,-0.567578,-0.552597, 0.226413,-0.89822,-0.376747,2.881063,-0.493146,-0.521968, 0.226413,-0.89822,-0.376747,2.881063,-0.493146,-0.521968, 0.295093,-0.940225,-0.16999,2.82554,-0.567578,-0.552597, 0.769758,0.095155,-0.631204,2.688131,-0.517509,-0.672975, 0.720876,-0.356662,-0.594247,2.637655,-0.768176,-0.637039, 0.908163,-0.140074,-0.394486,2.5392,-0.727778,-0.750475, 0.771881,-0.100912,-0.627707,2.647368,-0.61155,-0.669485, 0.771881,-0.100912,-0.627707,2.647368,-0.61155,-0.669485, 0.908163,-0.140074,-0.394486,2.5392,-0.727778,-0.750475, 0.907314,0.09913,-0.4086,2.618307,-0.549092,-0.805491, 0.907314,0.09913,-0.4086,2.618307,-0.549092,-0.805491, 0.769758,0.095155,-0.631204,2.688131,-0.517509,-0.672975, 0.771881,-0.100912,-0.627707,2.647368,-0.61155,-0.669485, 0.720876,-0.356662,-0.594247,2.637655,-0.768176,-0.637039, 0.295093,-0.940225,-0.16999,2.82554,-0.567578,-0.552597, 0.08136,-0.929085,-0.360806,2.910769,-0.638444,-0.431191, 0.720876,-0.356662,-0.594247,2.637655,-0.768176,-0.637039, 0.08136,-0.929085,-0.360806,2.910769,-0.638444,-0.431191, 0.430574,-0.353967,-0.830249,2.710721,-0.830091,-0.532493, 0.430574,-0.353967,-0.830249,2.710721,-0.830091,-0.532493, 0.08136,-0.929085,-0.360806,2.910769,-0.638444,-0.431191, 0.539192,-0.226204,-0.811236,2.857666,-0.930625,-0.391195, 0.539192,-0.226204,-0.811236,2.857666,-0.930625,-0.391195, 0.08136,-0.929085,-0.360806,2.910769,-0.638444,-0.431191, 0.676544,-0.141883,-0.722604,2.993075,-0.708434,-0.342596, 0.676544,-0.141883,-0.722604,2.993075,-0.708434,-0.342596, 0.667276,-0.159228,-0.727591,3.045715,-0.767786,-0.261741, 0.189478,-0.558571,-0.807525,2.960118,-0.941827,-0.284743, 0.676544,-0.141883,-0.722604,2.993075,-0.708434,-0.342596, 0.189478,-0.558571,-0.807525,2.960118,-0.941827,-0.284743, 0.539192,-0.226204,-0.811236,2.857666,-0.930625,-0.391195, 0.189478,-0.558571,-0.807525,2.960118,-0.941827,-0.284743, 0.667276,-0.159228,-0.727591,3.045715,-0.767786,-0.261741, 0.942695,-0.333657,0,3.065544,-0.788768,0, 0.189478,-0.558571,-0.807525,2.960118,-0.941827,-0.284743, 0.942695,-0.333657,0,3.065544,-0.788768,0, -0.334515,0.94239,0,2.970902,-0.959664,0, 0.942695,-0.333657,0,3.065544,-0.788768,0, 0.667276,-0.159228,-0.727591,3.045715,-0.767786,-0.261741, 0.533629,-0.162705,-0.82992,3.107533,-0.691019,-0.264602, 0.942695,-0.333657,0,3.065544,-0.788768,0, 0.533629,-0.162705,-0.82992,3.107533,-0.691019,-0.264602, -0.476715,0.879058,0,3.118124,-0.703925,0, 0.539192,-0.226204,-0.811236,2.857666,-0.930625,-0.391195, 0.245892,-0.489895,-0.836385,2.670253,-1.108365,-0.544018, 0.709718,-0.453838,-0.538824,2.669281,-0.930664,-0.557166, 0.430574,-0.353967,-0.830249,2.710721,-0.830091,-0.532493, 0.539192,-0.226204,-0.811236,2.857666,-0.930625,-0.391195, 0.709718,-0.453838,-0.538824,2.669281,-0.930664,-0.557166, 0.771881,-0.100912,-0.627707,2.647368,-0.61155,-0.669485, 0.769758,0.095155,-0.631204,2.688131,-0.517509,-0.672975, 0.295093,-0.940225,-0.16999,2.82554,-0.567578,-0.552597, 0.720876,-0.356662,-0.594247,2.637655,-0.768176,-0.637039, 0.771881,-0.100912,-0.627707,2.647368,-0.61155,-0.669485, 0.295093,-0.940225,-0.16999,2.82554,-0.567578,-0.552597, 0.486425,0.192908,-0.852161,2.986408,-0.413503,-0.428964, 0.449624,0.075438,-0.890027,3.053144,-0.609681,-0.326931, 0.676544,-0.141883,-0.722604,2.993075,-0.708434,-0.342596, 0.486425,0.192908,-0.852161,2.986408,-0.413503,-0.428964, 0.676544,-0.141883,-0.722604,2.993075,-0.708434,-0.342596, 0.08136,-0.929085,-0.360806,2.910769,-0.638444,-0.431191, 0.676544,-0.141883,-0.722604,2.993075,-0.708434,-0.342596, 0.449624,0.075438,-0.890027,3.053144,-0.609681,-0.326931, 0.533629,-0.162705,-0.82992,3.107533,-0.691019,-0.264602, 0.676544,-0.141883,-0.722604,2.993075,-0.708434,-0.342596, 0.533629,-0.162705,-0.82992,3.107533,-0.691019,-0.264602, 0.667276,-0.159228,-0.727591,3.045715,-0.767786,-0.261741, -0.218261,-0.26262,-0.93989,-0.953236,-1.545941,-0.89918, -0.11636,-0.749063,-0.6522,-1.091175,-1.70712,-0.727242, 0.162276,-0.745105,-0.646905,-1.226563,-1.655159,-0.687343, -0.218261,-0.26262,-0.93989,-0.953236,-1.545941,-0.89918, 0.162276,-0.745105,-0.646905,-1.226563,-1.655159,-0.687343, 0.215155,-0.464575,-0.858999,-1.200688,-1.577575,-0.799188, 0.215155,-0.464575,-0.858999,-1.200688,-1.577575,-0.799188, 0.162276,-0.745105,-0.646905,-1.226563,-1.655159,-0.687343, -0.504483,-0.438591,-0.743731,-1.376186,-1.661988,-0.718954, 0.162276,-0.745105,-0.646905,-1.226563,-1.655159,-0.687343, -0.11636,-0.749063,-0.6522,-1.091175,-1.70712,-0.727242, -0.351476,-0.711504,-0.608463,-1.089642,-1.757196,-0.685154, 0.162276,-0.745105,-0.646905,-1.226563,-1.655159,-0.687343, -0.351476,-0.711504,-0.608463,-1.089642,-1.757196,-0.685154, -0.149005,-0.65467,-0.741084,-1.266738,-1.691944,-0.557922, -0.11636,-0.749063,-0.6522,-1.091175,-1.70712,-0.727242, -0.218261,-0.26262,-0.93989,-0.953236,-1.545941,-0.89918, -0.231653,-0.530839,-0.815198,-0.972089,-1.774507,-0.76857, -0.231653,-0.530839,-0.815198,-0.972089,-1.774507,-0.76857, -0.218261,-0.26262,-0.93989,-0.953236,-1.545941,-0.89918, -0.468954,-0.586277,-0.660577,-0.812845,-1.785424,-0.768511, -0.468954,-0.586277,-0.660577,-0.812845,-1.785424,-0.768511, -0.218261,-0.26262,-0.93989,-0.953236,-1.545941,-0.89918, 0.10737,-0.293005,-0.950063,-0.535144,-1.615983,-0.920556, -0.468954,-0.586277,-0.660577,-0.812845,-1.785424,-0.768511, 0.10737,-0.293005,-0.950063,-0.535144,-1.615983,-0.920556, -0.150892,-0.83775,-0.524792,-0.680046,-1.768325,-0.81908, -0.150892,-0.83775,-0.524792,-0.680046,-1.768325,-0.81908, 0.10737,-0.293005,-0.950063,-0.535144,-1.615983,-0.920556, 0.100949,-0.548551,-0.830001,-0.564074,-1.789401,-0.803191, 0.100949,-0.548551,-0.830001,-0.564074,-1.789401,-0.803191, 0.10737,-0.293005,-0.950063,-0.535144,-1.615983,-0.920556, -0.4144,-0.844957,-0.338113,-0.422877,-1.7512,-0.823423, -0.4144,-0.844957,-0.338113,-0.422877,-1.7512,-0.823423, 0.10737,-0.293005,-0.950063,-0.535144,-1.615983,-0.920556, 0.33122,-0.270106,-0.904067,-0.063012,-1.583021,-0.865082, -0.4144,-0.844957,-0.338113,-0.422877,-1.7512,-0.823423, 0.33122,-0.270106,-0.904067,-0.063012,-1.583021,-0.865082, 0.327725,-0.489439,-0.808112,-0.07847,-1.688266,-0.80023, -0.4144,-0.844957,-0.338113,-0.422877,-1.7512,-0.823423, 0.327725,-0.489439,-0.808112,-0.07847,-1.688266,-0.80023, 0.291858,-0.681117,-0.67149,-0.094135,-1.769086,-0.556924, -0.4144,-0.844957,-0.338113,-0.422877,-1.7512,-0.823423, 0.291858,-0.681117,-0.67149,-0.094135,-1.769086,-0.556924, 0.068777,-0.757383,-0.649339,-0.543078,-1.810473,-0.563825, 0.068777,-0.757383,-0.649339,-0.543078,-1.810473,-0.563825, 0.100949,-0.548551,-0.830001,-0.564074,-1.789401,-0.803191, -0.4144,-0.844957,-0.338113,-0.422877,-1.7512,-0.823423, 0.100949,-0.548551,-0.830001,-0.564074,-1.789401,-0.803191, 0.068777,-0.757383,-0.649339,-0.543078,-1.810473,-0.563825, -0.150892,-0.83775,-0.524792,-0.680046,-1.768325,-0.81908, -0.150892,-0.83775,-0.524792,-0.680046,-1.768325,-0.81908, 0.068777,-0.757383,-0.649339,-0.543078,-1.810473,-0.563825, -0.253979,-0.745808,-0.615845,-0.977375,-1.793126,-0.498747, -0.150892,-0.83775,-0.524792,-0.680046,-1.768325,-0.81908, -0.253979,-0.745808,-0.615845,-0.977375,-1.793126,-0.498747, -0.468954,-0.586277,-0.660577,-0.812845,-1.785424,-0.768511, -0.351476,-0.711504,-0.608463,-1.089642,-1.757196,-0.685154, -0.11636,-0.749063,-0.6522,-1.091175,-1.70712,-0.727242, -0.231653,-0.530839,-0.815198,-0.972089,-1.774507,-0.76857, -0.149005,-0.65467,-0.741084,-1.266738,-1.691944,-0.557922, -0.351476,-0.711504,-0.608463,-1.089642,-1.757196,-0.685154, -0.253979,-0.745808,-0.615845,-0.977375,-1.793126,-0.498747, -0.149005,-0.65467,-0.741084,-1.266738,-1.691944,-0.557922, -0.253979,-0.745808,-0.615845,-0.977375,-1.793126,-0.498747, -0.176655,-0.950799,-0.254508,-1.108758,-1.770749,-0.473033, -0.176655,-0.950799,-0.254508,-1.108758,-1.770749,-0.473033, -0.079302,-0.84299,-0.532051,-1.305099,-1.70846,-0.48423, -0.149005,-0.65467,-0.741084,-1.266738,-1.691944,-0.557922, -0.149005,-0.65467,-0.741084,-1.266738,-1.691944,-0.557922, -0.504483,-0.438591,-0.743731,-1.376186,-1.661988,-0.718954, 0.162276,-0.745105,-0.646905,-1.226563,-1.655159,-0.687343, -0.504483,-0.438591,-0.743731,-1.376186,-1.661988,-0.718954, -0.149005,-0.65467,-0.741084,-1.266738,-1.691944,-0.557922, -0.094238,-0.851252,-0.516225,-1.397474,-1.693815,-0.570541, -0.53858,-0.616299,-0.57455,-1.386502,-1.718441,-0.350823, -0.171647,-0.971664,-0.162499,-1.406693,-1.697325,-0.450399, -0.079302,-0.84299,-0.532051,-1.305099,-1.70846,-0.48423, -0.53858,-0.616299,-0.57455,-1.386502,-1.718441,-0.350823, -0.079302,-0.84299,-0.532051,-1.305099,-1.70846,-0.48423, -0.040019,-0.929968,-0.365457,-0.972514,-1.822778,-0.372649, -0.040019,-0.929968,-0.365457,-0.972514,-1.822778,-0.372649, -0.253979,-0.745808,-0.615845,-0.977375,-1.793126,-0.498747, 0.068777,-0.757383,-0.649339,-0.543078,-1.810473,-0.563825, -0.040019,-0.929968,-0.365457,-0.972514,-1.822778,-0.372649, 0.068777,-0.757383,-0.649339,-0.543078,-1.810473,-0.563825, 0.023352,-0.872807,-0.487506,-0.523838,-1.850065,-0.388007, 0.023352,-0.872807,-0.487506,-0.523838,-1.850065,-0.388007, 0.068777,-0.757383,-0.649339,-0.543078,-1.810473,-0.563825, 0.291858,-0.681117,-0.67149,-0.094135,-1.769086,-0.556924, 0.023352,-0.872807,-0.487506,-0.523838,-1.850065,-0.388007, 0.291858,-0.681117,-0.67149,-0.094135,-1.769086,-0.556924, 0.248915,-0.807091,-0.535392,-0.112666,-1.806584,-0.383324, 0.248915,-0.807091,-0.535392,-0.112666,-1.806584,-0.383324, 0.291858,-0.681117,-0.67149,-0.094135,-1.769086,-0.556924, 0.420794,-0.405156,-0.811653,0.489819,-1.524947,-0.672392, 0.248915,-0.807091,-0.535392,-0.112666,-1.806584,-0.383324, 0.420794,-0.405156,-0.811653,0.489819,-1.524947,-0.672392, 0.383978,-0.566345,-0.729256,0.480235,-1.631521,-0.401961, 0.383978,-0.566345,-0.729256,0.480235,-1.631521,-0.401961, 0.226963,-0.973903,0,0.44655,-1.67295,0, -0.084764,-0.996401,0,-0.155114,-1.828285,0, 0.383978,-0.566345,-0.729256,0.480235,-1.631521,-0.401961, -0.084764,-0.996401,0,-0.155114,-1.828285,0, 0.248915,-0.807091,-0.535392,-0.112666,-1.806584,-0.383324, 0.248915,-0.807091,-0.535392,-0.112666,-1.806584,-0.383324, -0.084764,-0.996401,0,-0.155114,-1.828285,0, 0.854132,-0.520056,0,-0.530369,-1.860806,0, 0.248915,-0.807091,-0.535392,-0.112666,-1.806584,-0.383324, 0.854132,-0.520056,0,-0.530369,-1.860806,0, 0.023352,-0.872807,-0.487506,-0.523838,-1.850065,-0.388007, 0.023352,-0.872807,-0.487506,-0.523838,-1.850065,-0.388007, 0.854132,-0.520056,0,-0.530369,-1.860806,0, 0.113474,-0.993541,0,-0.956007,-1.825728,0, 0.023352,-0.872807,-0.487506,-0.523838,-1.850065,-0.388007, 0.113474,-0.993541,0,-0.956007,-1.825728,0, -0.040019,-0.929968,-0.365457,-0.972514,-1.822778,-0.372649, -0.040019,-0.929968,-0.365457,-0.972514,-1.822778,-0.372649, 0.113474,-0.993541,0,-0.956007,-1.825728,0, 0.011286,0.999936,0,-1.395728,-1.723811,0, -0.040019,-0.929968,-0.365457,-0.972514,-1.822778,-0.372649, 0.011286,0.999936,0,-1.395728,-1.723811,0, -0.53858,-0.616299,-0.57455,-1.386502,-1.718441,-0.350823, -0.351476,-0.711504,-0.608463,-1.089642,-1.757196,-0.685154, -0.231653,-0.530839,-0.815198,-0.972089,-1.774507,-0.76857, -0.253979,-0.745808,-0.615845,-0.977375,-1.793126,-0.498747, -0.468954,-0.586277,-0.660577,-0.812845,-1.785424,-0.768511, -0.253979,-0.745808,-0.615845,-0.977375,-1.793126,-0.498747, -0.231653,-0.530839,-0.815198,-0.972089,-1.774507,-0.76857, -0.024032,-0.835976,0.54824,1.734568,-2.965876,-0.986396, -0.246054,-0.154918,-0.956796,1.718315,-2.775468,-0.921796, -0.069043,-0.157333,-0.985129,1.771416,-2.769024,-0.9461, -0.024032,-0.835976,0.54824,1.734568,-2.965876,-0.986396, -0.069043,-0.157333,-0.985129,1.771416,-2.769024,-0.9461, -0.044013,0.340434,-0.939238,1.806371,-2.949735,-0.984058, -0.1083,-0.048546,0.992932,1.911792,-2.895773,-0.950117, 0.820312,-0.193024,-0.538358,1.880971,-2.733242,-0.8902, 0.186476,0.252953,-0.949337,1.960643,-2.71286,-0.90089, -0.1083,-0.048546,0.992932,1.911792,-2.895773,-0.950117, 0.186476,0.252953,-0.949337,1.960643,-2.71286,-0.90089, 0.43768,-0.823149,0.361748,2.021366,-2.881725,-0.945561, 0.43768,-0.823149,0.361748,2.021366,-2.881725,-0.945561, 0.186476,0.252953,-0.949337,1.960643,-2.71286,-0.90089, -0.247433,-0.24804,-0.936618,1.994078,-2.713047,-0.824553, 0.43768,-0.823149,0.361748,2.021366,-2.881725,-0.945561, -0.247433,-0.24804,-0.936618,1.994078,-2.713047,-0.824553, -0.671694,-0.023528,-0.740455,2.057496,-2.887282,-0.844225, -0.024032,-0.835976,0.54824,1.734568,-2.965876,-0.986396, -0.044013,0.340434,-0.939238,1.806371,-2.949735,-0.984058, -0.088841,0.02472,-0.995739,1.735077,-3.022732,-0.972751, -0.088841,0.02472,-0.995739,1.735077,-3.022732,-0.972751, 0.57446,0.218241,-0.788902,1.802387,-3.089615,-0.961851, 0.526213,0.349004,-0.775433,1.721745,-3.116887,-0.979111, 0.526213,0.349004,-0.775433,1.721745,-3.116887,-0.979111, 0.57446,0.218241,-0.788902,1.802387,-3.089615,-0.961851, 0.926951,0.366239,0.081429,1.811797,-3.135641,-0.933096, 0.43768,-0.823149,0.361748,2.021366,-2.881725,-0.945561, -0.671694,-0.023528,-0.740455,2.057496,-2.887282,-0.844225, 0.672893,0.661099,-0.331908,2.113587,-3.011851,-0.851648, 0.43768,-0.823149,0.361748,2.021366,-2.881725,-0.945561, 0.672893,0.661099,-0.331908,2.113587,-3.011851,-0.851648, -0.541077,0.245809,-0.804247,2.091539,-3.032437,-0.947029, -0.1083,-0.048546,0.992932,1.911792,-2.895773,-0.950117, -0.496829,-0.096649,-0.86245,1.848272,-2.92726,-0.996966, -0.845931,-0.255219,0.468256,1.830669,-2.736121,-0.903313, -0.1083,-0.048546,0.992932,1.911792,-2.895773,-0.950117, -0.845931,-0.255219,0.468256,1.830669,-2.736121,-0.903313, 0.820312,-0.193024,-0.538358,1.880971,-2.733242,-0.8902, -0.044013,0.340434,-0.939238,1.806371,-2.949735,-0.984058, -0.069043,-0.157333,-0.985129,1.771416,-2.769024,-0.9461, -0.845931,-0.255219,0.468256,1.830669,-2.736121,-0.903313, -0.044013,0.340434,-0.939238,1.806371,-2.949735,-0.984058, -0.845931,-0.255219,0.468256,1.830669,-2.736121,-0.903313, -0.496829,-0.096649,-0.86245,1.848272,-2.92726,-0.996966, -0.90358,0.003167,-0.428408,1.705953,-3.006628,-0.83263, -0.088841,0.02472,-0.995739,1.735077,-3.022732,-0.972751, 0.526213,0.349004,-0.775433,1.721745,-3.116887,-0.979111, -0.90358,0.003167,-0.428408,1.705953,-3.006628,-0.83263, 0.526213,0.349004,-0.775433,1.721745,-3.116887,-0.979111, -0.874488,-0.088621,-0.476882,1.709173,-3.133145,-0.80794, -0.874488,-0.088621,-0.476882,1.709173,-3.133145,-0.80794, 0.526213,0.349004,-0.775433,1.721745,-3.116887,-0.979111, 0.926951,0.366239,0.081429,1.811797,-3.135641,-0.933096, -0.874488,-0.088621,-0.476882,1.709173,-3.133145,-0.80794, 0.926951,0.366239,0.081429,1.811797,-3.135641,-0.933096, -0.783521,-0.393963,-0.480508,1.806407,-3.173343,-0.834455, -0.967491,-0.143323,0.208372,1.741854,-3.114181,-0.700705, -0.874488,-0.088621,-0.476882,1.709173,-3.133145,-0.80794, -0.783521,-0.393963,-0.480508,1.806407,-3.173343,-0.834455, -0.967491,-0.143323,0.208372,1.741854,-3.114181,-0.700705, -0.783521,-0.393963,-0.480508,1.806407,-3.173343,-0.834455, -0.630099,-0.773677,0.066329,1.900481,-3.131932,-0.728621, -0.90358,0.003167,-0.428408,1.705953,-3.006628,-0.83263, -0.874488,-0.088621,-0.476882,1.709173,-3.133145,-0.80794, -0.967491,-0.143323,0.208372,1.741854,-3.114181,-0.700705, -0.90358,0.003167,-0.428408,1.705953,-3.006628,-0.83263, -0.967491,-0.143323,0.208372,1.741854,-3.114181,-0.700705, -0.343436,-0.507052,0.790537,1.776024,-2.980086,-0.707575, -0.343436,-0.507052,0.790537,1.776024,-2.980086,-0.707575, 0.056398,-0.684481,0.726846,1.736425,-2.743683,-0.736866, 0.21689,-0.976039,0.017487,1.700797,-2.794792,-0.82425, -0.343436,-0.507052,0.790537,1.776024,-2.980086,-0.707575, 0.21689,-0.976039,0.017487,1.700797,-2.794792,-0.82425, -0.90358,0.003167,-0.428408,1.705953,-3.006628,-0.83263, 0.43768,-0.823149,0.361748,2.021366,-2.881725,-0.945561, -0.541077,0.245809,-0.804247,2.091539,-3.032437,-0.947029, 0.872426,0.488735,0.003222,1.980621,-3.043895,-0.964237, 0.43768,-0.823149,0.361748,2.021366,-2.881725,-0.945561, 0.872426,0.488735,0.003222,1.980621,-3.043895,-0.964237, -0.1083,-0.048546,0.992932,1.911792,-2.895773,-0.950117, 0.872426,0.488735,0.003222,1.980621,-3.043895,-0.964237, -0.069765,-0.126006,0.989573,1.898573,-3.068274,-0.994338, -0.496829,-0.096649,-0.86245,1.848272,-2.92726,-0.996966, 0.872426,0.488735,0.003222,1.980621,-3.043895,-0.964237, -0.496829,-0.096649,-0.86245,1.848272,-2.92726,-0.996966, -0.1083,-0.048546,0.992932,1.911792,-2.895773,-0.950117, -0.496829,-0.096649,-0.86245,1.848272,-2.92726,-0.996966, -0.069765,-0.126006,0.989573,1.898573,-3.068274,-0.994338, 0.383337,-0.601981,0.700479,1.855134,-3.083228,-0.986129, -0.496829,-0.096649,-0.86245,1.848272,-2.92726,-0.996966, 0.383337,-0.601981,0.700479,1.855134,-3.083228,-0.986129, -0.044013,0.340434,-0.939238,1.806371,-2.949735,-0.984058, 0.57446,0.218241,-0.788902,1.802387,-3.089615,-0.961851, 0.383337,-0.601981,0.700479,1.855134,-3.083228,-0.986129, 0.926951,0.366239,0.081429,1.811797,-3.135641,-0.933096, -0.088841,0.02472,-0.995739,1.735077,-3.022732,-0.972751, -0.044013,0.340434,-0.939238,1.806371,-2.949735,-0.984058, 0.383337,-0.601981,0.700479,1.855134,-3.083228,-0.986129, -0.088841,0.02472,-0.995739,1.735077,-3.022732,-0.972751, 0.383337,-0.601981,0.700479,1.855134,-3.083228,-0.986129, 0.57446,0.218241,-0.788902,1.802387,-3.089615,-0.961851, -0.088841,0.02472,-0.995739,1.735077,-3.022732,-0.972751, -0.90358,0.003167,-0.428408,1.705953,-3.006628,-0.83263, -0.024032,-0.835976,0.54824,1.734568,-2.965876,-0.986396, 0.672893,0.661099,-0.331908,2.113587,-3.011851,-0.851648, -0.671694,-0.023528,-0.740455,2.057496,-2.887282,-0.844225, -0.990285,-0.10079,0.095796,2.001343,-2.847715,-0.762517, 0.672893,0.661099,-0.331908,2.113587,-3.011851,-0.851648, -0.990285,-0.10079,0.095796,2.001343,-2.847715,-0.762517, -0.701253,0.091018,0.707079,2.07369,-3.020848,-0.782654, -0.967491,-0.143323,0.208372,1.741854,-3.114181,-0.700705, -0.630099,-0.773677,0.066329,1.900481,-3.131932,-0.728621, 0.963394,-0.268066,-0.003702,1.857471,-2.950722,-0.669988, -0.967491,-0.143323,0.208372,1.741854,-3.114181,-0.700705, 0.963394,-0.268066,-0.003702,1.857471,-2.950722,-0.669988, -0.343436,-0.507052,0.790537,1.776024,-2.980086,-0.707575, -0.630099,-0.773677,0.066329,1.900481,-3.131932,-0.728621, 0.714275,0.465374,0.522723,1.998099,-3.039955,-0.718855, 0.81992,-0.126246,0.558385,1.945632,-2.87671,-0.703118, -0.630099,-0.773677,0.066329,1.900481,-3.131932,-0.728621, 0.81992,-0.126246,0.558385,1.945632,-2.87671,-0.703118, 0.963394,-0.268066,-0.003702,1.857471,-2.950722,-0.669988, 0.714275,0.465374,0.522723,1.998099,-3.039955,-0.718855, -0.701253,0.091018,0.707079,2.07369,-3.020848,-0.782654, -0.990285,-0.10079,0.095796,2.001343,-2.847715,-0.762517, 0.714275,0.465374,0.522723,1.998099,-3.039955,-0.718855, -0.990285,-0.10079,0.095796,2.001343,-2.847715,-0.762517, 0.81992,-0.126246,0.558385,1.945632,-2.87671,-0.703118, 0.963394,-0.268066,-0.003702,1.857471,-2.950722,-0.669988, 0.81992,-0.126246,0.558385,1.945632,-2.87671,-0.703118, 0.751149,0.43192,0.49922,1.884318,-2.724404,-0.701999, 0.963394,-0.268066,-0.003702,1.857471,-2.950722,-0.669988, 0.751149,0.43192,0.49922,1.884318,-2.724404,-0.701999, 0.975634,-0.187232,0.114377,1.841282,-2.716008,-0.708009, 0.751149,0.43192,0.49922,1.884318,-2.724404,-0.701999, 0.81992,-0.126246,0.558385,1.945632,-2.87671,-0.703118, -0.990285,-0.10079,0.095796,2.001343,-2.847715,-0.762517, 0.751149,0.43192,0.49922,1.884318,-2.724404,-0.701999, -0.990285,-0.10079,0.095796,2.001343,-2.847715,-0.762517, -0.062994,-0.00854,0.997977,1.972647,-2.728848,-0.772496, -0.343436,-0.507052,0.790537,1.776024,-2.980086,-0.707575, 0.963394,-0.268066,-0.003702,1.857471,-2.950722,-0.669988, 0.975634,-0.187232,0.114377,1.841282,-2.716008,-0.708009, -0.343436,-0.507052,0.790537,1.776024,-2.980086,-0.707575, 0.975634,-0.187232,0.114377,1.841282,-2.716008,-0.708009, 0.056398,-0.684481,0.726846,1.736425,-2.743683,-0.736866, 0.137764,-0.289893,-0.947092,-2.591357,-1.510845,-0.88547, 0.048753,-0.975535,-0.21437,-2.734184,-1.717948,-0.749581, 0.26198,0.048424,0.963858,-2.837147,-1.791733,-0.921563, 0.137764,-0.289893,-0.947092,-2.591357,-1.510845,-0.88547, 0.26198,0.048424,0.963858,-2.837147,-1.791733,-0.921563, 0.79444,0.150524,0.588394,-2.687162,-1.539807,-0.988048, 0.79444,0.150524,0.588394,-2.687162,-1.539807,-0.988048, 0.26198,0.048424,0.963858,-2.837147,-1.791733,-0.921563, 0.24139,0.178826,0.953809,-2.918293,-1.904184,-1.004659, 0.79444,0.150524,0.588394,-2.687162,-1.539807,-0.988048, 0.24139,0.178826,0.953809,-2.918293,-1.904184,-1.004659, -0.15812,-0.033626,-0.986847,-2.765069,-1.561164,-1.084313, -0.15812,-0.033626,-0.986847,-2.765069,-1.561164,-1.084313, 0.24139,0.178826,0.953809,-2.918293,-1.904184,-1.004659, 0.247956,0.087485,0.964813,-3.010917,-1.884498,-1.08351, -0.15812,-0.033626,-0.986847,-2.765069,-1.561164,-1.084313, 0.247956,0.087485,0.964813,-3.010917,-1.884498,-1.08351, -0.234266,0.044111,-0.971171,-2.862576,-1.546894,-1.117139, -0.234266,0.044111,-0.971171,-2.862576,-1.546894,-1.117139, 0.247956,0.087485,0.964813,-3.010917,-1.884498,-1.08351, 0.81802,-0.47123,-0.329827,-3.117476,-1.866892,-1.108034, -0.234266,0.044111,-0.971171,-2.862576,-1.546894,-1.117139, 0.81802,-0.47123,-0.329827,-3.117476,-1.866892,-1.108034, 0.726897,-0.546446,-0.415953,-2.955052,-1.49684,-1.128812, 0.726897,-0.546446,-0.415953,-2.955052,-1.49684,-1.128812, 0.81802,-0.47123,-0.329827,-3.117476,-1.866892,-1.108034, 0.776291,-0.374868,-0.5068,-3.23261,-1.834299,-1.087832, 0.726897,-0.546446,-0.415953,-2.955052,-1.49684,-1.128812, 0.776291,-0.374868,-0.5068,-3.23261,-1.834299,-1.087832, -0.390861,0.032481,-0.919876,-3.063133,-1.440555,-1.090926, -0.086361,-0.084973,-0.992634,-3.36599,-1.48517,-0.888076, -0.424393,0.057227,-0.903668,-3.49052,-1.760417,-0.903104, -0.51975,0.138222,-0.843063,-3.498521,-1.762078,-0.762472, -0.086361,-0.084973,-0.992634,-3.36599,-1.48517,-0.888076, -0.51975,0.138222,-0.843063,-3.498521,-1.762078,-0.762472, -0.354058,-0.732075,0.581987,-3.387254,-1.486027,-0.672861, -0.354058,-0.732075,0.581987,-3.387254,-1.486027,-0.672861, -0.782249,0.198377,-0.590536,-3.335942,-1.365685,-0.72459, -0.811102,-0.12903,-0.570495,-3.319817,-1.365015,-0.886015, -0.354058,-0.732075,0.581987,-3.387254,-1.486027,-0.672861, -0.811102,-0.12903,-0.570495,-3.319817,-1.365015,-0.886015, -0.086361,-0.084973,-0.992634,-3.36599,-1.48517,-0.888076, -0.775358,0.344514,-0.529274,-3.078699,-2.553982,-1.046834, -0.440199,0.219838,-0.870572,-3.162498,-2.556375,-1.058409, -0.820357,0.160676,-0.548815,-3.177824,-2.279173,-1.04758, -0.775358,0.344514,-0.529274,-3.078699,-2.553982,-1.046834, -0.820357,0.160676,-0.548815,-3.177824,-2.279173,-1.04758, -0.906134,0.012265,0.422812,-3.068444,-2.260195,-1.03507, -0.906134,0.012265,0.422812,-3.068444,-2.260195,-1.03507, -0.820357,0.160676,-0.548815,-3.177824,-2.279173,-1.04758, 0.000667,0.002295,-0.999997,-3.169489,-2.110039,-1.076796, -0.906134,0.012265,0.422812,-3.068444,-2.260195,-1.03507, 0.000667,0.002295,-0.999997,-3.169489,-2.110039,-1.076796, 0.461464,-0.003303,-0.887153,-3.047974,-2.109628,-1.063497, 0.461464,-0.003303,-0.887153,-3.047974,-2.109628,-1.063497, 0.000667,0.002295,-0.999997,-3.169489,-2.110039,-1.076796, 0.81802,-0.47123,-0.329827,-3.117476,-1.866892,-1.108034, 0.461464,-0.003303,-0.887153,-3.047974,-2.109628,-1.063497, 0.81802,-0.47123,-0.329827,-3.117476,-1.866892,-1.108034, 0.247956,0.087485,0.964813,-3.010917,-1.884498,-1.08351, -0.820357,0.160676,-0.548815,-3.177824,-2.279173,-1.04758, -0.156447,-0.088128,-0.983747,-3.207447,-2.103206,-1.071366, 0.000667,0.002295,-0.999997,-3.169489,-2.110039,-1.076796, 0.000667,0.002295,-0.999997,-3.169489,-2.110039,-1.076796, -0.156447,-0.088128,-0.983747,-3.207447,-2.103206,-1.071366, 0.776291,-0.374868,-0.5068,-3.23261,-1.834299,-1.087832, 0.000667,0.002295,-0.999997,-3.169489,-2.110039,-1.076796, 0.776291,-0.374868,-0.5068,-3.23261,-1.834299,-1.087832, 0.81802,-0.47123,-0.329827,-3.117476,-1.866892,-1.108034, -0.440199,0.219838,-0.870572,-3.162498,-2.556375,-1.058409, 0.433219,-0.09361,-0.896414,-3.251541,-2.56405,-1.023627, -0.019303,-0.142974,-0.989538,-3.281816,-2.305055,-1.001878, -0.440199,0.219838,-0.870572,-3.162498,-2.556375,-1.058409, -0.019303,-0.142974,-0.989538,-3.281816,-2.305055,-1.001878, -0.820357,0.160676,-0.548815,-3.177824,-2.279173,-1.04758, -0.820357,0.160676,-0.548815,-3.177824,-2.279173,-1.04758, -0.019303,-0.142974,-0.989538,-3.281816,-2.305055,-1.001878, 0.422569,-0.18743,-0.886739,-3.327526,-2.075729,-1.005328, -0.820357,0.160676,-0.548815,-3.177824,-2.279173,-1.04758, 0.422569,-0.18743,-0.886739,-3.327526,-2.075729,-1.005328, -0.156447,-0.088128,-0.983747,-3.207447,-2.103206,-1.071366, -0.156447,-0.088128,-0.983747,-3.207447,-2.103206,-1.071366, 0.422569,-0.18743,-0.886739,-3.327526,-2.075729,-1.005328, 0.356923,-0.210291,-0.910156,-3.357996,-1.811803,-0.975625, -0.156447,-0.088128,-0.983747,-3.207447,-2.103206,-1.071366, 0.356923,-0.210291,-0.910156,-3.357996,-1.811803,-0.975625, 0.776291,-0.374868,-0.5068,-3.23261,-1.834299,-1.087832, 0.433219,-0.09361,-0.896414,-3.251541,-2.56405,-1.023627, -0.354049,-0.10839,-0.928925,-3.347304,-2.573628,-0.955211, -0.35872,0.092902,-0.928811,-3.389388,-2.305625,-0.950348, 0.433219,-0.09361,-0.896414,-3.251541,-2.56405,-1.023627, -0.35872,0.092902,-0.928811,-3.389388,-2.305625,-0.950348, -0.019303,-0.142974,-0.989538,-3.281816,-2.305055,-1.001878, -0.019303,-0.142974,-0.989538,-3.281816,-2.305055,-1.001878, -0.35872,0.092902,-0.928811,-3.389388,-2.305625,-0.950348, -0.453746,-0.057149,-0.889297,-3.451965,-2.077314,-0.931974, -0.019303,-0.142974,-0.989538,-3.281816,-2.305055,-1.001878, -0.453746,-0.057149,-0.889297,-3.451965,-2.077314,-0.931974, 0.422569,-0.18743,-0.886739,-3.327526,-2.075729,-1.005328, 0.422569,-0.18743,-0.886739,-3.327526,-2.075729,-1.005328, -0.453746,-0.057149,-0.889297,-3.451965,-2.077314,-0.931974, -0.424393,0.057227,-0.903668,-3.49052,-1.760417,-0.903104, 0.422569,-0.18743,-0.886739,-3.327526,-2.075729,-1.005328, -0.424393,0.057227,-0.903668,-3.49052,-1.760417,-0.903104, 0.356923,-0.210291,-0.910156,-3.357996,-1.811803,-0.975625, -0.501053,-0.05946,-0.863371,-3.022819,-2.52224,-0.979148, -0.775358,0.344514,-0.529274,-3.078699,-2.553982,-1.046834, -0.906134,0.012265,0.422812,-3.068444,-2.260195,-1.03507, -0.501053,-0.05946,-0.863371,-3.022819,-2.52224,-0.979148, -0.906134,0.012265,0.422812,-3.068444,-2.260195,-1.03507, -0.779685,0.025369,-0.625657,-3.007483,-2.270712,-0.984279, -0.779685,0.025369,-0.625657,-3.007483,-2.270712,-0.984279, -0.906134,0.012265,0.422812,-3.068444,-2.260195,-1.03507, 0.461464,-0.003303,-0.887153,-3.047974,-2.109628,-1.063497, -0.779685,0.025369,-0.625657,-3.007483,-2.270712,-0.984279, 0.461464,-0.003303,-0.887153,-3.047974,-2.109628,-1.063497, -0.765488,-0.115048,-0.633082,-2.969687,-2.097941,-0.982836, -0.765488,-0.115048,-0.633082,-2.969687,-2.097941,-0.982836, 0.461464,-0.003303,-0.887153,-3.047974,-2.109628,-1.063497, 0.247956,0.087485,0.964813,-3.010917,-1.884498,-1.08351, -0.765488,-0.115048,-0.633082,-2.969687,-2.097941,-0.982836, 0.247956,0.087485,0.964813,-3.010917,-1.884498,-1.08351, 0.24139,0.178826,0.953809,-2.918293,-1.904184,-1.004659, -0.807765,-0.096776,-0.581507,-2.892438,-1.95081,-0.87812, 0.24139,0.178826,0.953809,-2.918293,-1.904184,-1.004659, 0.26198,0.048424,0.963858,-2.837147,-1.791733,-0.921563, 0.24139,0.178826,0.953809,-2.918293,-1.904184,-1.004659, -0.807765,-0.096776,-0.581507,-2.892438,-1.95081,-0.87812, 0.937141,-0.149709,-0.315204,-2.981187,-2.142718,-0.858353, 0.24139,0.178826,0.953809,-2.918293,-1.904184,-1.004659, 0.937141,-0.149709,-0.315204,-2.981187,-2.142718,-0.858353, -0.765488,-0.115048,-0.633082,-2.969687,-2.097941,-0.982836, -0.765488,-0.115048,-0.633082,-2.969687,-2.097941,-0.982836, 0.937141,-0.149709,-0.315204,-2.981187,-2.142718,-0.858353, 0.866897,-0.268351,-0.420091,-3.030605,-2.311222,-0.88433, -0.765488,-0.115048,-0.633082,-2.969687,-2.097941,-0.982836, 0.866897,-0.268351,-0.420091,-3.030605,-2.311222,-0.88433, -0.779685,0.025369,-0.625657,-3.007483,-2.270712,-0.984279, -0.779685,0.025369,-0.625657,-3.007483,-2.270712,-0.984279, 0.866897,-0.268351,-0.420091,-3.030605,-2.311222,-0.88433, 0.886562,-0.46255,-0.007485,-3.04661,-2.510881,-0.900772, -0.779685,0.025369,-0.625657,-3.007483,-2.270712,-0.984279, 0.886562,-0.46255,-0.007485,-3.04661,-2.510881,-0.900772, -0.501053,-0.05946,-0.863371,-3.022819,-2.52224,-0.979148, -0.807765,-0.096776,-0.581507,-2.892438,-1.95081,-0.87812, 0.982106,-0.010346,-0.188044,-2.964215,-1.978727,-0.776572, 0.567578,-0.469833,0.6761,-3.040398,-2.156239,-0.808208, -0.807765,-0.096776,-0.581507,-2.892438,-1.95081,-0.87812, 0.567578,-0.469833,0.6761,-3.040398,-2.156239,-0.808208, 0.937141,-0.149709,-0.315204,-2.981187,-2.142718,-0.858353, 0.937141,-0.149709,-0.315204,-2.981187,-2.142718,-0.858353, 0.567578,-0.469833,0.6761,-3.040398,-2.156239,-0.808208, 0.866897,-0.268351,-0.420091,-3.030605,-2.311222,-0.88433, 0.866897,-0.268351,-0.420091,-3.030605,-2.311222,-0.88433, 0.567578,-0.469833,0.6761,-3.040398,-2.156239,-0.808208, 0.890357,-0.340018,0.302742,-3.120761,-2.15777,-0.766432, 0.866897,-0.268351,-0.420091,-3.030605,-2.311222,-0.88433, 0.890357,-0.340018,0.302742,-3.120761,-2.15777,-0.766432, 0.773659,-0.235087,0.588375,-3.144012,-2.333635,-0.829994, 0.982106,-0.010346,-0.188044,-2.964215,-1.978727,-0.776572, 0.789099,-0.039289,0.613008,-3.066022,-1.953125,-0.719516, 0.890357,-0.340018,0.302742,-3.120761,-2.15777,-0.766432, 0.982106,-0.010346,-0.188044,-2.964215,-1.978727,-0.776572, 0.890357,-0.340018,0.302742,-3.120761,-2.15777,-0.766432, 0.567578,-0.469833,0.6761,-3.040398,-2.156239,-0.808208, 0.789099,-0.039289,0.613008,-3.066022,-1.953125,-0.719516, 0.230893,-0.309688,0.922378,-3.211005,-1.850398,-0.700723, 0.257818,-0.230014,0.938415,-3.253309,-2.137354,-0.760713, 0.789099,-0.039289,0.613008,-3.066022,-1.953125,-0.719516, 0.257818,-0.230014,0.938415,-3.253309,-2.137354,-0.760713, 0.890357,-0.340018,0.302742,-3.120761,-2.15777,-0.766432, 0.890357,-0.340018,0.302742,-3.120761,-2.15777,-0.766432, 0.257818,-0.230014,0.938415,-3.253309,-2.137354,-0.760713, 0.148388,-0.325205,0.933929,-3.235873,-2.335338,-0.820588, 0.890357,-0.340018,0.302742,-3.120761,-2.15777,-0.766432, 0.148388,-0.325205,0.933929,-3.235873,-2.335338,-0.820588, 0.773659,-0.235087,0.588375,-3.144012,-2.333635,-0.829994, 0.773659,-0.235087,0.588375,-3.144012,-2.333635,-0.829994, 0.148388,-0.325205,0.933929,-3.235873,-2.335338,-0.820588, -0.215783,-0.895808,0.388544,-3.240554,-2.555467,-0.856262, 0.773659,-0.235087,0.588375,-3.144012,-2.333635,-0.829994, -0.215783,-0.895808,0.388544,-3.240554,-2.555467,-0.856262, -0.065687,-0.249194,0.966223,-3.132772,-2.528669,-0.848639, 0.515412,-0.714946,0.472444,-3.304804,-1.582192,-0.643445, -0.354058,-0.732075,0.581987,-3.387254,-1.486027,-0.672861, -0.51975,0.138222,-0.843063,-3.498521,-1.762078,-0.762472, 0.515412,-0.714946,0.472444,-3.304804,-1.582192,-0.643445, -0.51975,0.138222,-0.843063,-3.498521,-1.762078,-0.762472, -0.050511,-0.258376,0.964723,-3.381262,-1.828189,-0.697034, -0.050511,-0.258376,0.964723,-3.381262,-1.828189,-0.697034, 0.230893,-0.309688,0.922378,-3.211005,-1.850398,-0.700723, -0.012978,-0.998326,0.056357,-3.139394,-1.687482,-0.638546, -0.050511,-0.258376,0.964723,-3.381262,-1.828189,-0.697034, -0.012978,-0.998326,0.056357,-3.139394,-1.687482,-0.638546, 0.515412,-0.714946,0.472444,-3.304804,-1.582192,-0.643445, 0.230893,-0.309688,0.922378,-3.211005,-1.850398,-0.700723, -0.050511,-0.258376,0.964723,-3.381262,-1.828189,-0.697034, -0.042094,-0.220101,0.974568,-3.422698,-2.070796,-0.773898, 0.230893,-0.309688,0.922378,-3.211005,-1.850398,-0.700723, -0.042094,-0.220101,0.974568,-3.422698,-2.070796,-0.773898, 0.257818,-0.230014,0.938415,-3.253309,-2.137354,-0.760713, 0.257818,-0.230014,0.938415,-3.253309,-2.137354,-0.760713, -0.042094,-0.220101,0.974568,-3.422698,-2.070796,-0.773898, -0.085416,-0.081635,0.992995,-3.339489,-2.328145,-0.827572, 0.257818,-0.230014,0.938415,-3.253309,-2.137354,-0.760713, -0.085416,-0.081635,0.992995,-3.339489,-2.328145,-0.827572, 0.148388,-0.325205,0.933929,-3.235873,-2.335338,-0.820588, 0.148388,-0.325205,0.933929,-3.235873,-2.335338,-0.820588, -0.085416,-0.081635,0.992995,-3.339489,-2.328145,-0.827572, 0.255431,-0.055528,0.965231,-3.297886,-2.54902,-0.861657, 0.148388,-0.325205,0.933929,-3.235873,-2.335338,-0.820588, 0.255431,-0.055528,0.965231,-3.297886,-2.54902,-0.861657, -0.215783,-0.895808,0.388544,-3.240554,-2.555467,-0.856262, -0.050511,-0.258376,0.964723,-3.381262,-1.828189,-0.697034, -0.51975,0.138222,-0.843063,-3.498521,-1.762078,-0.762472, -0.348227,-0.192528,0.917426,-3.463753,-2.079892,-0.844667, -0.050511,-0.258376,0.964723,-3.381262,-1.828189,-0.697034, -0.348227,-0.192528,0.917426,-3.463753,-2.079892,-0.844667, -0.042094,-0.220101,0.974568,-3.422698,-2.070796,-0.773898, -0.042094,-0.220101,0.974568,-3.422698,-2.070796,-0.773898, -0.348227,-0.192528,0.917426,-3.463753,-2.079892,-0.844667, -0.401279,-0.250965,0.880904,-3.412068,-2.356105,-0.865813, -0.042094,-0.220101,0.974568,-3.422698,-2.070796,-0.773898, -0.401279,-0.250965,0.880904,-3.412068,-2.356105,-0.865813, -0.085416,-0.081635,0.992995,-3.339489,-2.328145,-0.827572, -0.085416,-0.081635,0.992995,-3.339489,-2.328145,-0.827572, -0.401279,-0.250965,0.880904,-3.412068,-2.356105,-0.865813, -0.326843,-0.236652,0.91497,-3.372066,-2.569159,-0.904785, -0.085416,-0.081635,0.992995,-3.339489,-2.328145,-0.827572, -0.326843,-0.236652,0.91497,-3.372066,-2.569159,-0.904785, 0.255431,-0.055528,0.965231,-3.297886,-2.54902,-0.861657, -0.348227,-0.192528,0.917426,-3.463753,-2.079892,-0.844667, -0.453746,-0.057149,-0.889297,-3.451965,-2.077314,-0.931974, -0.35872,0.092902,-0.928811,-3.389388,-2.305625,-0.950348, -0.348227,-0.192528,0.917426,-3.463753,-2.079892,-0.844667, -0.35872,0.092902,-0.928811,-3.389388,-2.305625,-0.950348, -0.401279,-0.250965,0.880904,-3.412068,-2.356105,-0.865813, -0.401279,-0.250965,0.880904,-3.412068,-2.356105,-0.865813, -0.35872,0.092902,-0.928811,-3.389388,-2.305625,-0.950348, -0.354049,-0.10839,-0.928925,-3.347304,-2.573628,-0.955211, -0.401279,-0.250965,0.880904,-3.412068,-2.356105,-0.865813, -0.354049,-0.10839,-0.928925,-3.347304,-2.573628,-0.955211, -0.326843,-0.236652,0.91497,-3.372066,-2.569159,-0.904785, -0.51975,0.138222,-0.843063,-3.498521,-1.762078,-0.762472, -0.424393,0.057227,-0.903668,-3.49052,-1.760417,-0.903104, -0.453746,-0.057149,-0.889297,-3.451965,-2.077314,-0.931974, -0.51975,0.138222,-0.843063,-3.498521,-1.762078,-0.762472, -0.453746,-0.057149,-0.889297,-3.451965,-2.077314,-0.931974, -0.348227,-0.192528,0.917426,-3.463753,-2.079892,-0.844667, 0.356923,-0.210291,-0.910156,-3.357996,-1.811803,-0.975625, -0.424393,0.057227,-0.903668,-3.49052,-1.760417,-0.903104, -0.086361,-0.084973,-0.992634,-3.36599,-1.48517,-0.888076, 0.356923,-0.210291,-0.910156,-3.357996,-1.811803,-0.975625, -0.086361,-0.084973,-0.992634,-3.36599,-1.48517,-0.888076, -0.032036,-0.072305,-0.996868,-3.342096,-1.533989,-0.921628, -0.587844,-0.244917,-0.771009,1.953911,-2.462233,-0.830594, 0.985192,-0.12583,0.116459,1.930747,-2.463535,-0.894743, 0.996811,-0.048518,0.063355,1.98533,-2.221319,-0.893145, -0.587844,-0.244917,-0.771009,1.953911,-2.462233,-0.830594, 0.996811,-0.048518,0.063355,1.98533,-2.221319,-0.893145, -0.845196,-0.27877,-0.455994,2.02453,-2.195334,-0.811284, -0.845196,-0.27877,-0.455994,2.02453,-2.195334,-0.811284, 0.996811,-0.048518,0.063355,1.98533,-2.221319,-0.893145, 0.957938,-0.285979,-0.023877,2.013095,-2.051912,-0.911043, -0.845196,-0.27877,-0.455994,2.02453,-2.195334,-0.811284, 0.957938,-0.285979,-0.023877,2.013095,-2.051912,-0.911043, -0.732521,-0.474279,-0.488336,2.047696,-2.050138,-0.814712, -0.732521,-0.474279,-0.488336,2.047696,-2.050138,-0.814712, 0.957938,-0.285979,-0.023877,2.013095,-2.051912,-0.911043, -0.274087,0.000043,0.961705,2.021591,-1.755289,-0.912093, -0.732521,-0.474279,-0.488336,2.047696,-2.050138,-0.814712, -0.274087,0.000043,0.961705,2.021591,-1.755289,-0.912093, 0.972392,0.232654,-0.018037,2.053108,-1.738285,-0.824853, 0.972392,0.232654,-0.018037,2.053108,-1.738285,-0.824853, -0.274087,0.000043,0.961705,2.021591,-1.755289,-0.912093, 0.74023,-0.090866,-0.666185,2.036036,-1.57908,-0.967151, 0.972392,0.232654,-0.018037,2.053108,-1.738285,-0.824853, 0.74023,-0.090866,-0.666185,2.036036,-1.57908,-0.967151, 0.999491,-0.02584,-0.01873,2.059844,-1.561331,-0.858957, -0.176356,-0.113876,-0.977717,1.678986,-2.513137,-0.891745, -0.051713,-0.100832,-0.993559,1.737623,-2.485017,-0.918334, -0.069043,-0.157333,-0.985129,1.771416,-2.769024,-0.9461, -0.176356,-0.113876,-0.977717,1.678986,-2.513137,-0.891745, -0.069043,-0.157333,-0.985129,1.771416,-2.769024,-0.9461, -0.246054,-0.154918,-0.956796,1.718315,-2.775468,-0.921796, -0.136917,-0.20176,-0.969818,1.648793,-2.280014,-0.929365, 0.039,-0.185675,-0.981837,1.710406,-2.272223,-0.954296, -0.051713,-0.100832,-0.993559,1.737623,-2.485017,-0.918334, -0.136917,-0.20176,-0.969818,1.648793,-2.280014,-0.929365, -0.051713,-0.100832,-0.993559,1.737623,-2.485017,-0.918334, -0.176356,-0.113876,-0.977717,1.678986,-2.513137,-0.891745, -0.17902,-0.308668,-0.934171,1.6249,-2.087301,-0.963391, 0.109483,-0.310605,-0.944213,1.720031,-2.105568,-0.971354, 0.039,-0.185675,-0.981837,1.710406,-2.272223,-0.954296, -0.17902,-0.308668,-0.934171,1.6249,-2.087301,-0.963391, 0.039,-0.185675,-0.981837,1.710406,-2.272223,-0.954296, -0.136917,-0.20176,-0.969818,1.648793,-2.280014,-0.929365, -0.739347,0.031953,-0.672566,1.572979,-1.827591,-0.985823, -0.09542,0.162222,-0.98213,1.717145,-1.80953,-1.004092, 0.109483,-0.310605,-0.944213,1.720031,-2.105568,-0.971354, -0.739347,0.031953,-0.672566,1.572979,-1.827591,-0.985823, 0.109483,-0.310605,-0.944213,1.720031,-2.105568,-0.971354, -0.17902,-0.308668,-0.934171,1.6249,-2.087301,-0.963391, -0.652584,-0.147678,-0.743186,1.54175,-1.643613,-1.01419, -0.211092,-0.082708,-0.973961,1.650318,-1.645881,-1.053347, -0.09542,0.162222,-0.98213,1.717145,-1.80953,-1.004092, -0.652584,-0.147678,-0.743186,1.54175,-1.643613,-1.01419, -0.09542,0.162222,-0.98213,1.717145,-1.80953,-1.004092, -0.739347,0.031953,-0.672566,1.572979,-1.827591,-0.985823, -0.4008,-0.167777,-0.900672,1.586321,-2.273752,-0.880969, -0.136917,-0.20176,-0.969818,1.648793,-2.280014,-0.929365, -0.176356,-0.113876,-0.977717,1.678986,-2.513137,-0.891745, -0.4008,-0.167777,-0.900672,1.586321,-2.273752,-0.880969, -0.176356,-0.113876,-0.977717,1.678986,-2.513137,-0.891745, -0.483189,-0.207332,-0.850613,1.655948,-2.520927,-0.844269, -0.417424,-0.199203,-0.886609,1.529305,-2.092083,-0.887353, -0.17902,-0.308668,-0.934171,1.6249,-2.087301,-0.963391, -0.136917,-0.20176,-0.969818,1.648793,-2.280014,-0.929365, -0.417424,-0.199203,-0.886609,1.529305,-2.092083,-0.887353, -0.136917,-0.20176,-0.969818,1.648793,-2.280014,-0.929365, -0.4008,-0.167777,-0.900672,1.586321,-2.273752,-0.880969, -0.521685,-0.261319,-0.812131,1.508714,-1.808578,-0.934359, -0.739347,0.031953,-0.672566,1.572979,-1.827591,-0.985823, -0.17902,-0.308668,-0.934171,1.6249,-2.087301,-0.963391, -0.521685,-0.261319,-0.812131,1.508714,-1.808578,-0.934359, -0.17902,-0.308668,-0.934171,1.6249,-2.087301,-0.963391, -0.417424,-0.199203,-0.886609,1.529305,-2.092083,-0.887353, -0.970971,-0.219011,-0.096178,1.480629,-1.640132,-0.953447, -0.652584,-0.147678,-0.743186,1.54175,-1.643613,-1.01419, -0.739347,0.031953,-0.672566,1.572979,-1.827591,-0.985823, -0.970971,-0.219011,-0.096178,1.480629,-1.640132,-0.953447, -0.739347,0.031953,-0.672566,1.572979,-1.827591,-0.985823, -0.521685,-0.261319,-0.812131,1.508714,-1.808578,-0.934359, -0.883058,-0.239959,-0.403273,1.60129,-2.267132,-0.787696, -0.4008,-0.167777,-0.900672,1.586321,-2.273752,-0.880969, -0.483189,-0.207332,-0.850613,1.655948,-2.520927,-0.844269, -0.883058,-0.239959,-0.403273,1.60129,-2.267132,-0.787696, -0.483189,-0.207332,-0.850613,1.655948,-2.520927,-0.844269, -0.912869,-0.285577,-0.291747,1.663494,-2.485963,-0.790773, -0.872722,-0.174901,-0.455813,1.544087,-2.080722,-0.786432, -0.417424,-0.199203,-0.886609,1.529305,-2.092083,-0.887353, -0.4008,-0.167777,-0.900672,1.586321,-2.273752,-0.880969, -0.872722,-0.174901,-0.455813,1.544087,-2.080722,-0.786432, -0.4008,-0.167777,-0.900672,1.586321,-2.273752,-0.880969, -0.883058,-0.239959,-0.403273,1.60129,-2.267132,-0.787696, -0.874358,-0.225285,-0.429819,1.473886,-1.818947,-0.799576, -0.521685,-0.261319,-0.812131,1.508714,-1.808578,-0.934359, -0.417424,-0.199203,-0.886609,1.529305,-2.092083,-0.887353, -0.874358,-0.225285,-0.429819,1.473886,-1.818947,-0.799576, -0.417424,-0.199203,-0.886609,1.529305,-2.092083,-0.887353, -0.872722,-0.174901,-0.455813,1.544087,-2.080722,-0.786432, -0.794709,-0.185222,0.578041,1.451825,-1.576856,-0.702758, -0.970971,-0.219011,-0.096178,1.480629,-1.640132,-0.953447, -0.521685,-0.261319,-0.812131,1.508714,-1.808578,-0.934359, -0.794709,-0.185222,0.578041,1.451825,-1.576856,-0.702758, -0.521685,-0.261319,-0.812131,1.508714,-1.808578,-0.934359, -0.874358,-0.225285,-0.429819,1.473886,-1.818947,-0.799576, -0.898389,-0.217201,0.381735,1.677597,-2.237953,-0.696318, -0.883058,-0.239959,-0.403273,1.60129,-2.267132,-0.787696, -0.912869,-0.285577,-0.291747,1.663494,-2.485963,-0.790773, -0.898389,-0.217201,0.381735,1.677597,-2.237953,-0.696318, -0.912869,-0.285577,-0.291747,1.663494,-2.485963,-0.790773, -0.887036,-0.210048,0.411154,1.756349,-2.446399,-0.705428, -0.819257,-0.566976,-0.085772,1.643403,-2.076583,-0.689565, -0.872722,-0.174901,-0.455813,1.544087,-2.080722,-0.786432, -0.883058,-0.239959,-0.403273,1.60129,-2.267132,-0.787696, -0.819257,-0.566976,-0.085772,1.643403,-2.076583,-0.689565, -0.883058,-0.239959,-0.403273,1.60129,-2.267132,-0.787696, -0.898389,-0.217201,0.381735,1.677597,-2.237953,-0.696318, 0.193853,0.161608,-0.967628,1.596751,-1.722028,-0.684655, -0.874358,-0.225285,-0.429819,1.473886,-1.818947,-0.799576, -0.872722,-0.174901,-0.455813,1.544087,-2.080722,-0.786432, 0.193853,0.161608,-0.967628,1.596751,-1.722028,-0.684655, -0.872722,-0.174901,-0.455813,1.544087,-2.080722,-0.786432, -0.819257,-0.566976,-0.085772,1.643403,-2.076583,-0.689565, -0.493424,-0.165611,0.853877,1.599889,-1.595526,-0.623185, -0.794709,-0.185222,0.578041,1.451825,-1.576856,-0.702758, -0.874358,-0.225285,-0.429819,1.473886,-1.818947,-0.799576, -0.493424,-0.165611,0.853877,1.599889,-1.595526,-0.623185, -0.874358,-0.225285,-0.429819,1.473886,-1.818947,-0.799576, 0.193853,0.161608,-0.967628,1.596751,-1.722028,-0.684655, 0.985192,-0.12583,0.116459,1.930747,-2.463535,-0.894743, -0.587844,-0.244917,-0.771009,1.953911,-2.462233,-0.830594, -0.247433,-0.24804,-0.936618,1.994078,-2.713047,-0.824553, 0.985192,-0.12583,0.116459,1.930747,-2.463535,-0.894743, -0.247433,-0.24804,-0.936618,1.994078,-2.713047,-0.824553, 0.186476,0.252953,-0.949337,1.960643,-2.71286,-0.90089, 0.843062,-0.10517,-0.527433,1.864064,-2.469953,-0.935601, 0.985192,-0.12583,0.116459,1.930747,-2.463535,-0.894743, 0.186476,0.252953,-0.949337,1.960643,-2.71286,-0.90089, 0.843062,-0.10517,-0.527433,1.864064,-2.469953,-0.935601, 0.186476,0.252953,-0.949337,1.960643,-2.71286,-0.90089, 0.820312,-0.193024,-0.538358,1.880971,-2.733242,-0.8902, 0.159615,0.129847,-0.978602,1.941767,-1.759457,-0.997454, 0.290478,-0.146424,-0.945612,1.937009,-1.625419,-1.026843, 0.74023,-0.090866,-0.666185,2.036036,-1.57908,-0.967151, 0.159615,0.129847,-0.978602,1.941767,-1.759457,-0.997454, 0.74023,-0.090866,-0.666185,2.036036,-1.57908,-0.967151, -0.274087,0.000043,0.961705,2.021591,-1.755289,-0.912093, 0.830793,-0.244757,-0.499878,1.918641,-2.083654,-1.001275, 0.159615,0.129847,-0.978602,1.941767,-1.759457,-0.997454, -0.274087,0.000043,0.961705,2.021591,-1.755289,-0.912093, 0.830793,-0.244757,-0.499878,1.918641,-2.083654,-1.001275, -0.274087,0.000043,0.961705,2.021591,-1.755289,-0.912093, 0.957938,-0.285979,-0.023877,2.013095,-2.051912,-0.911043, 0.846555,-0.103661,-0.52211,1.90637,-2.282284,-0.964887, 0.996811,-0.048518,0.063355,1.98533,-2.221319,-0.893145, 0.985192,-0.12583,0.116459,1.930747,-2.463535,-0.894743, 0.846555,-0.103661,-0.52211,1.90637,-2.282284,-0.964887, 0.985192,-0.12583,0.116459,1.930747,-2.463535,-0.894743, 0.843062,-0.10517,-0.527433,1.864064,-2.469953,-0.935601, 0.846555,-0.103661,-0.52211,1.90637,-2.282284,-0.964887, 0.830793,-0.244757,-0.499878,1.918641,-2.083654,-1.001275, 0.957938,-0.285979,-0.023877,2.013095,-2.051912,-0.911043, 0.846555,-0.103661,-0.52211,1.90637,-2.282284,-0.964887, 0.957938,-0.285979,-0.023877,2.013095,-2.051912,-0.911043, 0.996811,-0.048518,0.063355,1.98533,-2.221319,-0.893145, -0.069043,-0.157333,-0.985129,1.771416,-2.769024,-0.9461, -0.051713,-0.100832,-0.993559,1.737623,-2.485017,-0.918334, 0.407719,-0.190267,-0.893064,1.801127,-2.48469,-0.938593, -0.069043,-0.157333,-0.985129,1.771416,-2.769024,-0.9461, 0.407719,-0.190267,-0.893064,1.801127,-2.48469,-0.938593, -0.845931,-0.255219,0.468256,1.830669,-2.736121,-0.903313, 0.407719,-0.190267,-0.893064,1.801127,-2.48469,-0.938593, 0.843062,-0.10517,-0.527433,1.864064,-2.469953,-0.935601, 0.820312,-0.193024,-0.538358,1.880971,-2.733242,-0.8902, 0.407719,-0.190267,-0.893064,1.801127,-2.48469,-0.938593, 0.820312,-0.193024,-0.538358,1.880971,-2.733242,-0.8902, -0.845931,-0.255219,0.468256,1.830669,-2.736121,-0.903313, -0.09542,0.162222,-0.98213,1.717145,-1.80953,-1.004092, -0.211092,-0.082708,-0.973961,1.650318,-1.645881,-1.053347, 0.051664,-0.122235,-0.991156,1.804927,-1.581954,-1.089198, -0.09542,0.162222,-0.98213,1.717145,-1.80953,-1.004092, 0.051664,-0.122235,-0.991156,1.804927,-1.581954,-1.089198, 0.473622,-0.284001,-0.833682,1.818846,-1.756976,-1.023593, 0.109483,-0.310605,-0.944213,1.720031,-2.105568,-0.971354, -0.09542,0.162222,-0.98213,1.717145,-1.80953,-1.004092, 0.473622,-0.284001,-0.833682,1.818846,-1.756976,-1.023593, 0.109483,-0.310605,-0.944213,1.720031,-2.105568,-0.971354, 0.473622,-0.284001,-0.833682,1.818846,-1.756976,-1.023593, 0.459595,-0.144347,-0.87632,1.839224,-2.109267,-0.998351, 0.039,-0.185675,-0.981837,1.710406,-2.272223,-0.954296, 0.109483,-0.310605,-0.944213,1.720031,-2.105568,-0.971354, 0.459595,-0.144347,-0.87632,1.839224,-2.109267,-0.998351, 0.039,-0.185675,-0.981837,1.710406,-2.272223,-0.954296, 0.459595,-0.144347,-0.87632,1.839224,-2.109267,-0.998351, 0.431429,-0.109339,-0.895497,1.818266,-2.313852,-0.968652, -0.051713,-0.100832,-0.993559,1.737623,-2.485017,-0.918334, 0.039,-0.185675,-0.981837,1.710406,-2.272223,-0.954296, 0.431429,-0.109339,-0.895497,1.818266,-2.313852,-0.968652, -0.051713,-0.100832,-0.993559,1.737623,-2.485017,-0.918334, 0.431429,-0.109339,-0.895497,1.818266,-2.313852,-0.968652, 0.407719,-0.190267,-0.893064,1.801127,-2.48469,-0.938593, 0.473622,-0.284001,-0.833682,1.818846,-1.756976,-1.023593, 0.051664,-0.122235,-0.991156,1.804927,-1.581954,-1.089198, 0.290478,-0.146424,-0.945612,1.937009,-1.625419,-1.026843, 0.473622,-0.284001,-0.833682,1.818846,-1.756976,-1.023593, 0.290478,-0.146424,-0.945612,1.937009,-1.625419,-1.026843, 0.159615,0.129847,-0.978602,1.941767,-1.759457,-0.997454, 0.459595,-0.144347,-0.87632,1.839224,-2.109267,-0.998351, 0.473622,-0.284001,-0.833682,1.818846,-1.756976,-1.023593, 0.159615,0.129847,-0.978602,1.941767,-1.759457,-0.997454, 0.459595,-0.144347,-0.87632,1.839224,-2.109267,-0.998351, 0.159615,0.129847,-0.978602,1.941767,-1.759457,-0.997454, 0.830793,-0.244757,-0.499878,1.918641,-2.083654,-1.001275, 0.431429,-0.109339,-0.895497,1.818266,-2.313852,-0.968652, 0.459595,-0.144347,-0.87632,1.839224,-2.109267,-0.998351, 0.830793,-0.244757,-0.499878,1.918641,-2.083654,-1.001275, 0.431429,-0.109339,-0.895497,1.818266,-2.313852,-0.968652, 0.830793,-0.244757,-0.499878,1.918641,-2.083654,-1.001275, 0.846555,-0.103661,-0.52211,1.90637,-2.282284,-0.964887, 0.407719,-0.190267,-0.893064,1.801127,-2.48469,-0.938593, 0.431429,-0.109339,-0.895497,1.818266,-2.313852,-0.968652, 0.846555,-0.103661,-0.52211,1.90637,-2.282284,-0.964887, 0.407719,-0.190267,-0.893064,1.801127,-2.48469,-0.938593, 0.846555,-0.103661,-0.52211,1.90637,-2.282284,-0.964887, 0.843062,-0.10517,-0.527433,1.864064,-2.469953,-0.935601, 0.975634,-0.187232,0.114377,1.841282,-2.716008,-0.708009, -0.887036,-0.210048,0.411154,1.756349,-2.446399,-0.705428, -0.912869,-0.285577,-0.291747,1.663494,-2.485963,-0.790773, 0.975634,-0.187232,0.114377,1.841282,-2.716008,-0.708009, -0.912869,-0.285577,-0.291747,1.663494,-2.485963,-0.790773, 0.056398,-0.684481,0.726846,1.736425,-2.743683,-0.736866, -0.382074,-0.25681,0.887732,1.740323,-1.67983,-0.664098, -0.217942,-0.897186,0.384134,1.721211,-1.590185,-0.601932, -0.493424,-0.165611,0.853877,1.599889,-1.595526,-0.623185, -0.382074,-0.25681,0.887732,1.740323,-1.67983,-0.664098, -0.493424,-0.165611,0.853877,1.599889,-1.595526,-0.623185, 0.193853,0.161608,-0.967628,1.596751,-1.722028,-0.684655, -0.53197,-0.108751,0.839751,1.747671,-2.067518,-0.638841, -0.382074,-0.25681,0.887732,1.740323,-1.67983,-0.664098, 0.193853,0.161608,-0.967628,1.596751,-1.722028,-0.684655, -0.53197,-0.108751,0.839751,1.747671,-2.067518,-0.638841, 0.193853,0.161608,-0.967628,1.596751,-1.722028,-0.684655, -0.819257,-0.566976,-0.085772,1.643403,-2.076583,-0.689565, -0.570406,-0.192005,0.798606,1.772999,-2.230292,-0.64494, -0.53197,-0.108751,0.839751,1.747671,-2.067518,-0.638841, -0.819257,-0.566976,-0.085772,1.643403,-2.076583,-0.689565, -0.570406,-0.192005,0.798606,1.772999,-2.230292,-0.64494, -0.819257,-0.566976,-0.085772,1.643403,-2.076583,-0.689565, -0.898389,-0.217201,0.381735,1.677597,-2.237953,-0.696318, -0.912869,-0.285577,-0.291747,1.663494,-2.485963,-0.790773, -0.483189,-0.207332,-0.850613,1.655948,-2.520927,-0.844269, 0.21689,-0.976039,0.017487,1.700797,-2.794792,-0.82425, -0.912869,-0.285577,-0.291747,1.663494,-2.485963,-0.790773, 0.21689,-0.976039,0.017487,1.700797,-2.794792,-0.82425, 0.056398,-0.684481,0.726846,1.736425,-2.743683,-0.736866, -0.671694,-0.023528,-0.740455,2.057496,-2.887282,-0.844225, -0.247433,-0.24804,-0.936618,1.994078,-2.713047,-0.824553, -0.062994,-0.00854,0.997977,1.972647,-2.728848,-0.772496, -0.671694,-0.023528,-0.740455,2.057496,-2.887282,-0.844225, -0.062994,-0.00854,0.997977,1.972647,-2.728848,-0.772496, -0.990285,-0.10079,0.095796,2.001343,-2.847715,-0.762517, 0.601229,-0.111152,0.791308,1.828658,-2.477348,-0.67347, 0.751149,0.43192,0.49922,1.884318,-2.724404,-0.701999, -0.062994,-0.00854,0.997977,1.972647,-2.728848,-0.772496, 0.601229,-0.111152,0.791308,1.828658,-2.477348,-0.67347, -0.062994,-0.00854,0.997977,1.972647,-2.728848,-0.772496, -0.943599,-0.160394,0.289646,1.947264,-2.443232,-0.732587, -0.570406,-0.192005,0.798606,1.772999,-2.230292,-0.64494, 0.601229,-0.111152,0.791308,1.828658,-2.477348,-0.67347, -0.943599,-0.160394,0.289646,1.947264,-2.443232,-0.732587, -0.570406,-0.192005,0.798606,1.772999,-2.230292,-0.64494, -0.943599,-0.160394,0.289646,1.947264,-2.443232,-0.732587, -0.363523,-0.150625,0.919327,1.921881,-2.157616,-0.692678, 0.601229,-0.111152,0.791308,1.828658,-2.477348,-0.67347, -0.887036,-0.210048,0.411154,1.756349,-2.446399,-0.705428, 0.975634,-0.187232,0.114377,1.841282,-2.716008,-0.708009, 0.601229,-0.111152,0.791308,1.828658,-2.477348,-0.67347, 0.975634,-0.187232,0.114377,1.841282,-2.716008,-0.708009, 0.751149,0.43192,0.49922,1.884318,-2.724404,-0.701999, 0.601229,-0.111152,0.791308,1.828658,-2.477348,-0.67347, -0.570406,-0.192005,0.798606,1.772999,-2.230292,-0.64494, -0.898389,-0.217201,0.381735,1.677597,-2.237953,-0.696318, 0.601229,-0.111152,0.791308,1.828658,-2.477348,-0.67347, -0.898389,-0.217201,0.381735,1.677597,-2.237953,-0.696318, -0.887036,-0.210048,0.411154,1.756349,-2.446399,-0.705428, -0.587844,-0.244917,-0.771009,1.953911,-2.462233,-0.830594, -0.943599,-0.160394,0.289646,1.947264,-2.443232,-0.732587, -0.062994,-0.00854,0.997977,1.972647,-2.728848,-0.772496, -0.587844,-0.244917,-0.771009,1.953911,-2.462233,-0.830594, -0.062994,-0.00854,0.997977,1.972647,-2.728848,-0.772496, -0.247433,-0.24804,-0.936618,1.994078,-2.713047,-0.824553, -0.924461,-0.213386,0.315973,1.991892,-1.7484,-0.65277, -0.084936,-0.226589,0.97028,1.963153,-1.588839,-0.612861, -0.217942,-0.897186,0.384134,1.721211,-1.590185,-0.601932, -0.924461,-0.213386,0.315973,1.991892,-1.7484,-0.65277, -0.217942,-0.897186,0.384134,1.721211,-1.590185,-0.601932, -0.382074,-0.25681,0.887732,1.740323,-1.67983,-0.664098, -0.914496,-0.253608,0.315247,1.945206,-2.015769,-0.672724, -0.924461,-0.213386,0.315973,1.991892,-1.7484,-0.65277, -0.382074,-0.25681,0.887732,1.740323,-1.67983,-0.664098, -0.914496,-0.253608,0.315247,1.945206,-2.015769,-0.672724, -0.382074,-0.25681,0.887732,1.740323,-1.67983,-0.664098, -0.53197,-0.108751,0.839751,1.747671,-2.067518,-0.638841, 0.972392,0.232654,-0.018037,2.053108,-1.738285,-0.824853, 0.999491,-0.02584,-0.01873,2.059844,-1.561331,-0.858957, -0.084936,-0.226589,0.97028,1.963153,-1.588839,-0.612861, 0.972392,0.232654,-0.018037,2.053108,-1.738285,-0.824853, -0.084936,-0.226589,0.97028,1.963153,-1.588839,-0.612861, -0.924461,-0.213386,0.315973,1.991892,-1.7484,-0.65277, -0.732521,-0.474279,-0.488336,2.047696,-2.050138,-0.814712, 0.972392,0.232654,-0.018037,2.053108,-1.738285,-0.824853, -0.924461,-0.213386,0.315973,1.991892,-1.7484,-0.65277, -0.732521,-0.474279,-0.488336,2.047696,-2.050138,-0.814712, -0.924461,-0.213386,0.315973,1.991892,-1.7484,-0.65277, -0.914496,-0.253608,0.315247,1.945206,-2.015769,-0.672724, -0.845196,-0.27877,-0.455994,2.02453,-2.195334,-0.811284, -0.732521,-0.474279,-0.488336,2.047696,-2.050138,-0.814712, -0.914496,-0.253608,0.315247,1.945206,-2.015769,-0.672724, -0.845196,-0.27877,-0.455994,2.02453,-2.195334,-0.811284, -0.914496,-0.253608,0.315247,1.945206,-2.015769,-0.672724, -0.363523,-0.150625,0.919327,1.921881,-2.157616,-0.692678, -0.587844,-0.244917,-0.771009,1.953911,-2.462233,-0.830594, -0.845196,-0.27877,-0.455994,2.02453,-2.195334,-0.811284, -0.363523,-0.150625,0.919327,1.921881,-2.157616,-0.692678, -0.587844,-0.244917,-0.771009,1.953911,-2.462233,-0.830594, -0.363523,-0.150625,0.919327,1.921881,-2.157616,-0.692678, -0.943599,-0.160394,0.289646,1.947264,-2.443232,-0.732587, -0.239734,-0.173966,-0.955125,2.111557,-1.376942,-0.89657, -0.157802,-0.148625,-0.976222,2.141273,-1.234642,-0.941254, 0.608407,-0.244593,-0.754993,2.158051,-1.209613,-0.783941, -0.239734,-0.173966,-0.955125,2.111557,-1.376942,-0.89657, 0.608407,-0.244593,-0.754993,2.158051,-1.209613,-0.783941, 0.727678,-0.414895,-0.546211,2.126237,-1.330172,-0.721011, -0.498756,-0.2241,-0.83727,2.071448,-1.410118,-1.006192, -0.329905,-0.225598,-0.916661,2.099566,-1.259996,-1.055763, -0.157802,-0.148625,-0.976222,2.141273,-1.234642,-0.941254, -0.498756,-0.2241,-0.83727,2.071448,-1.410118,-1.006192, -0.157802,-0.148625,-0.976222,2.141273,-1.234642,-0.941254, -0.239734,-0.173966,-0.955125,2.111557,-1.376942,-0.89657, -0.759627,-0.28527,-0.584455,1.974215,-1.469208,-1.068951, -0.661097,-0.258238,-0.70446,1.966698,-1.22816,-1.153716, -0.329905,-0.225598,-0.916661,2.099566,-1.259996,-1.055763, -0.759627,-0.28527,-0.584455,1.974215,-1.469208,-1.068951, -0.329905,-0.225598,-0.916661,2.099566,-1.259996,-1.055763, -0.498756,-0.2241,-0.83727,2.071448,-1.410118,-1.006192, -0.672688,-0.442616,-0.592944,1.801794,-1.465464,-1.129277, -0.632119,-0.359381,-0.686491,1.805207,-1.268427,-1.165317, -0.661097,-0.258238,-0.70446,1.966698,-1.22816,-1.153716, -0.672688,-0.442616,-0.592944,1.801794,-1.465464,-1.129277, -0.661097,-0.258238,-0.70446,1.966698,-1.22816,-1.153716, -0.759627,-0.28527,-0.584455,1.974215,-1.469208,-1.068951, 0.954473,-0.270031,-0.126745,1.612396,-1.485728,-1.099731, 0.942118,-0.292663,-0.163592,1.601721,-1.262359,-1.14142, -0.632119,-0.359381,-0.686491,1.805207,-1.268427,-1.165317, 0.954473,-0.270031,-0.126745,1.612396,-1.485728,-1.099731, -0.632119,-0.359381,-0.686491,1.805207,-1.268427,-1.165317, -0.672688,-0.442616,-0.592944,1.801794,-1.465464,-1.129277, 0.80128,-0.303744,-0.515451,1.5167,-1.45305,-1.068516, 0.772916,-0.305378,-0.556189,1.49748,-1.283201,-1.088258, 0.942118,-0.292663,-0.163592,1.601721,-1.262359,-1.14142, 0.80128,-0.303744,-0.515451,1.5167,-1.45305,-1.068516, 0.942118,-0.292663,-0.163592,1.601721,-1.262359,-1.14142, 0.954473,-0.270031,-0.126745,1.612396,-1.485728,-1.099731, 0.441315,-0.29978,-0.845797,1.454817,-1.430228,-0.976569, 0.38578,-0.259547,-0.88533,1.430817,-1.301205,-1.024924, 0.772916,-0.305378,-0.556189,1.49748,-1.283201,-1.088258, 0.441315,-0.29978,-0.845797,1.454817,-1.430228,-0.976569, 0.772916,-0.305378,-0.556189,1.49748,-1.283201,-1.088258, 0.80128,-0.303744,-0.515451,1.5167,-1.45305,-1.068516, 0.080262,-0.270606,-0.959339,1.328862,-1.352627,-0.758733, 0.02992,-0.202031,-0.978922,1.348219,-1.282064,-0.845204, 0.38578,-0.259547,-0.88533,1.430817,-1.301205,-1.024924, 0.080262,-0.270606,-0.959339,1.328862,-1.352627,-0.758733, 0.38578,-0.259547,-0.88533,1.430817,-1.301205,-1.024924, 0.441315,-0.29978,-0.845797,1.454817,-1.430228,-0.976569, -0.157802,-0.148625,-0.976222,2.141273,-1.234642,-0.941254, -0.019419,-0.11596,-0.993064,2.17745,-1.127765,-0.974416, 0.70745,-0.193334,-0.679806,2.180012,-1.130557,-0.821812, -0.157802,-0.148625,-0.976222,2.141273,-1.234642,-0.941254, 0.70745,-0.193334,-0.679806,2.180012,-1.130557,-0.821812, 0.608407,-0.244593,-0.754993,2.158051,-1.209613,-0.783941, -0.329905,-0.225598,-0.916661,2.099566,-1.259996,-1.055763, -0.182029,-0.190207,-0.964721,2.148553,-1.103067,-1.06541, -0.019419,-0.11596,-0.993064,2.17745,-1.127765,-0.974416, -0.329905,-0.225598,-0.916661,2.099566,-1.259996,-1.055763, -0.019419,-0.11596,-0.993064,2.17745,-1.127765,-0.974416, -0.157802,-0.148625,-0.976222,2.141273,-1.234642,-0.941254, -0.661097,-0.258238,-0.70446,1.966698,-1.22816,-1.153716, -0.571338,-0.120921,-0.811758,2.024692,-1.074646,-1.172465, -0.182029,-0.190207,-0.964721,2.148553,-1.103067,-1.06541, -0.661097,-0.258238,-0.70446,1.966698,-1.22816,-1.153716, -0.182029,-0.190207,-0.964721,2.148553,-1.103067,-1.06541, -0.329905,-0.225598,-0.916661,2.099566,-1.259996,-1.055763, -0.632119,-0.359381,-0.686491,1.805207,-1.268427,-1.165317, -0.587909,-0.233166,-0.774594,1.838895,-1.087204,-1.201408, -0.571338,-0.120921,-0.811758,2.024692,-1.074646,-1.172465, -0.632119,-0.359381,-0.686491,1.805207,-1.268427,-1.165317, -0.571338,-0.120921,-0.811758,2.024692,-1.074646,-1.172465, -0.661097,-0.258238,-0.70446,1.966698,-1.22816,-1.153716, 0.942118,-0.292663,-0.163592,1.601721,-1.262359,-1.14142, 0.924702,-0.311562,-0.218757,1.645819,-1.087442,-1.173773, -0.587909,-0.233166,-0.774594,1.838895,-1.087204,-1.201408, 0.942118,-0.292663,-0.163592,1.601721,-1.262359,-1.14142, -0.587909,-0.233166,-0.774594,1.838895,-1.087204,-1.201408, -0.632119,-0.359381,-0.686491,1.805207,-1.268427,-1.165317, 0.772916,-0.305378,-0.556189,1.49748,-1.283201,-1.088258, 0.73827,-0.277136,-0.614942,1.524407,-1.125312,-1.142248, 0.924702,-0.311562,-0.218757,1.645819,-1.087442,-1.173773, 0.772916,-0.305378,-0.556189,1.49748,-1.283201,-1.088258, 0.924702,-0.311562,-0.218757,1.645819,-1.087442,-1.173773, 0.942118,-0.292663,-0.163592,1.601721,-1.262359,-1.14142, 0.38578,-0.259547,-0.88533,1.430817,-1.301205,-1.024924, 0.366416,-0.175098,-0.913827,1.438439,-1.148029,-1.098069, 0.73827,-0.277136,-0.614942,1.524407,-1.125312,-1.142248, 0.38578,-0.259547,-0.88533,1.430817,-1.301205,-1.024924, 0.73827,-0.277136,-0.614942,1.524407,-1.125312,-1.142248, 0.772916,-0.305378,-0.556189,1.49748,-1.283201,-1.088258, 0.02992,-0.202031,-0.978922,1.348219,-1.282064,-0.845204, 0.023392,-0.110333,-0.993619,1.310865,-1.136322,-0.914838, 0.366416,-0.175098,-0.913827,1.438439,-1.148029,-1.098069, 0.02992,-0.202031,-0.978922,1.348219,-1.282064,-0.845204, 0.366416,-0.175098,-0.913827,1.438439,-1.148029,-1.098069, 0.38578,-0.259547,-0.88533,1.430817,-1.301205,-1.024924, 0.999491,-0.02584,-0.01873,2.059844,-1.561331,-0.858957, 0.437631,-0.408484,-0.801012,2.0796,-1.473377,-0.654997, 0.552828,-0.750794,-0.36151,2.0482,-1.581983,-0.555832, 0.999491,-0.02584,-0.01873,2.059844,-1.561331,-0.858957, 0.552828,-0.750794,-0.36151,2.0482,-1.581983,-0.555832, -0.084936,-0.226589,0.97028,1.963153,-1.588839,-0.612861, 0.051664,-0.122235,-0.991156,1.804927,-1.581954,-1.089198, -0.211092,-0.082708,-0.973961,1.650318,-1.645881,-1.053347, 0.954473,-0.270031,-0.126745,1.612396,-1.485728,-1.099731, 0.051664,-0.122235,-0.991156,1.804927,-1.581954,-1.089198, 0.954473,-0.270031,-0.126745,1.612396,-1.485728,-1.099731, -0.672688,-0.442616,-0.592944,1.801794,-1.465464,-1.129277, 0.290478,-0.146424,-0.945612,1.937009,-1.625419,-1.026843, 0.051664,-0.122235,-0.991156,1.804927,-1.581954,-1.089198, -0.672688,-0.442616,-0.592944,1.801794,-1.465464,-1.129277, 0.290478,-0.146424,-0.945612,1.937009,-1.625419,-1.026843, -0.672688,-0.442616,-0.592944,1.801794,-1.465464,-1.129277, -0.759627,-0.28527,-0.584455,1.974215,-1.469208,-1.068951, 0.74023,-0.090866,-0.666185,2.036036,-1.57908,-0.967151, 0.290478,-0.146424,-0.945612,1.937009,-1.625419,-1.026843, -0.759627,-0.28527,-0.584455,1.974215,-1.469208,-1.068951, 0.74023,-0.090866,-0.666185,2.036036,-1.57908,-0.967151, -0.759627,-0.28527,-0.584455,1.974215,-1.469208,-1.068951, -0.498756,-0.2241,-0.83727,2.071448,-1.410118,-1.006192, 0.999491,-0.02584,-0.01873,2.059844,-1.561331,-0.858957, 0.74023,-0.090866,-0.666185,2.036036,-1.57908,-0.967151, -0.498756,-0.2241,-0.83727,2.071448,-1.410118,-1.006192, 0.999491,-0.02584,-0.01873,2.059844,-1.561331,-0.858957, -0.498756,-0.2241,-0.83727,2.071448,-1.410118,-1.006192, -0.239734,-0.173966,-0.955125,2.111557,-1.376942,-0.89657, 0.999491,-0.02584,-0.01873,2.059844,-1.561331,-0.858957, -0.239734,-0.173966,-0.955125,2.111557,-1.376942,-0.89657, 0.727678,-0.414895,-0.546211,2.126237,-1.330172,-0.721011, 0.999491,-0.02584,-0.01873,2.059844,-1.561331,-0.858957, 0.727678,-0.414895,-0.546211,2.126237,-1.330172,-0.721011, 0.437631,-0.408484,-0.801012,2.0796,-1.473377,-0.654997, 0.70745,-0.193334,-0.679806,2.180012,-1.130557,-0.821812, -0.019419,-0.11596,-0.993064,2.17745,-1.127765,-0.974416, -0.742985,0.015712,-0.669123,2.222082,-0.957342,-1.014137, 0.70745,-0.193334,-0.679806,2.180012,-1.130557,-0.821812, -0.742985,0.015712,-0.669123,2.222082,-0.957342,-1.014137, -0.012663,0.029084,-0.999497,2.229345,-0.992723,-0.862826, -0.587909,-0.233166,-0.774594,1.838895,-1.087204,-1.201408, 0.924702,-0.311562,-0.218757,1.645819,-1.087442,-1.173773, 0.859237,-0.17312,-0.481395,1.635139,-0.965221,-1.184968, -0.587909,-0.233166,-0.774594,1.838895,-1.087204,-1.201408, 0.859237,-0.17312,-0.481395,1.635139,-0.965221,-1.184968, -0.942755,-0.29871,0.148273,1.867657,-0.920633,-1.206933, -0.571338,-0.120921,-0.811758,2.024692,-1.074646,-1.172465, -0.587909,-0.233166,-0.774594,1.838895,-1.087204,-1.201408, -0.942755,-0.29871,0.148273,1.867657,-0.920633,-1.206933, -0.571338,-0.120921,-0.811758,2.024692,-1.074646,-1.172465, -0.942755,-0.29871,0.148273,1.867657,-0.920633,-1.206933, -0.965506,-0.176768,0.191185,2.058189,-0.931238,-1.163518, -0.182029,-0.190207,-0.964721,2.148553,-1.103067,-1.06541, -0.571338,-0.120921,-0.811758,2.024692,-1.074646,-1.172465, -0.965506,-0.176768,0.191185,2.058189,-0.931238,-1.163518, -0.182029,-0.190207,-0.964721,2.148553,-1.103067,-1.06541, -0.965506,-0.176768,0.191185,2.058189,-0.931238,-1.163518, -0.809154,0.004832,-0.587577,2.158585,-0.955809,-1.113647, -0.019419,-0.11596,-0.993064,2.17745,-1.127765,-0.974416, -0.182029,-0.190207,-0.964721,2.148553,-1.103067,-1.06541, -0.809154,0.004832,-0.587577,2.158585,-0.955809,-1.113647, -0.019419,-0.11596,-0.993064,2.17745,-1.127765,-0.974416, -0.809154,0.004832,-0.587577,2.158585,-0.955809,-1.113647, -0.742985,0.015712,-0.669123,2.222082,-0.957342,-1.014137, 0.080262,-0.270606,-0.959339,1.328862,-1.352627,-0.758733, 0.441315,-0.29978,-0.845797,1.454817,-1.430228,-0.976569, -0.970971,-0.219011,-0.096178,1.480629,-1.640132,-0.953447, 0.080262,-0.270606,-0.959339,1.328862,-1.352627,-0.758733, -0.970971,-0.219011,-0.096178,1.480629,-1.640132,-0.953447, -0.794709,-0.185222,0.578041,1.451825,-1.576856,-0.702758, 0.045651,-0.004499,-0.998947,1.337875,-0.945716,-1.021299, 0.419396,-0.035927,-0.907092,1.428883,-0.98669,-1.133905, 0.366416,-0.175098,-0.913827,1.438439,-1.148029,-1.098069, 0.045651,-0.004499,-0.998947,1.337875,-0.945716,-1.021299, 0.366416,-0.175098,-0.913827,1.438439,-1.148029,-1.098069, 0.023392,-0.110333,-0.993619,1.310865,-1.136322,-0.914838, 0.80128,-0.303744,-0.515451,1.5167,-1.45305,-1.068516, 0.954473,-0.270031,-0.126745,1.612396,-1.485728,-1.099731, -0.211092,-0.082708,-0.973961,1.650318,-1.645881,-1.053347, 0.80128,-0.303744,-0.515451,1.5167,-1.45305,-1.068516, -0.211092,-0.082708,-0.973961,1.650318,-1.645881,-1.053347, -0.652584,-0.147678,-0.743186,1.54175,-1.643613,-1.01419, 0.441315,-0.29978,-0.845797,1.454817,-1.430228,-0.976569, 0.80128,-0.303744,-0.515451,1.5167,-1.45305,-1.068516, -0.652584,-0.147678,-0.743186,1.54175,-1.643613,-1.01419, 0.441315,-0.29978,-0.845797,1.454817,-1.430228,-0.976569, -0.652584,-0.147678,-0.743186,1.54175,-1.643613,-1.01419, -0.970971,-0.219011,-0.096178,1.480629,-1.640132,-0.953447, 0.714393,-0.109998,-0.691045,1.536037,-0.985876,-1.185597, 0.859237,-0.17312,-0.481395,1.635139,-0.965221,-1.184968, 0.924702,-0.311562,-0.218757,1.645819,-1.087442,-1.173773, 0.714393,-0.109998,-0.691045,1.536037,-0.985876,-1.185597, 0.924702,-0.311562,-0.218757,1.645819,-1.087442,-1.173773, 0.73827,-0.277136,-0.614942,1.524407,-1.125312,-1.142248, 0.419396,-0.035927,-0.907092,1.428883,-0.98669,-1.133905, 0.714393,-0.109998,-0.691045,1.536037,-0.985876,-1.185597, 0.73827,-0.277136,-0.614942,1.524407,-1.125312,-1.142248, 0.419396,-0.035927,-0.907092,1.428883,-0.98669,-1.133905, 0.73827,-0.277136,-0.614942,1.524407,-1.125312,-1.142248, 0.366416,-0.175098,-0.913827,1.438439,-1.148029,-1.098069, 0.261393,-0.399072,-0.878872,3.233975,2.059193,-0.072431, 0.441787,-0.375177,-0.814903,3.009101,1.971604,-0.03422, 0.889638,-0.392482,0.233458,2.985371,1.982663,0, 0.261393,-0.399072,-0.878872,3.233975,2.059193,-0.072431, 0.889638,-0.392482,0.233458,2.985371,1.982663,0, -0.861251,0.383698,-0.333202,3.247406,2.073333,0, 0.428291,-0.499911,-0.752765,3.252224,2.026347,-0.148215, 0.483908,-0.405185,-0.775667,3.036361,1.913989,-0.169838, 0.441787,-0.375177,-0.814903,3.009101,1.971604,-0.03422, 0.428291,-0.499911,-0.752765,3.252224,2.026347,-0.148215, 0.441787,-0.375177,-0.814903,3.009101,1.971604,-0.03422, 0.261393,-0.399072,-0.878872,3.233975,2.059193,-0.072431, 0.454048,-0.464454,-0.760344,3.276333,1.863773,-0.294266, 0.482381,-0.398126,-0.780259,3.058366,1.773346,-0.297337, 0.483908,-0.405185,-0.775667,3.036361,1.913989,-0.169838, 0.454048,-0.464454,-0.760344,3.276333,1.863773,-0.294266, 0.483908,-0.405185,-0.775667,3.036361,1.913989,-0.169838, 0.428291,-0.499911,-0.752765,3.252224,2.026347,-0.148215, 0.673211,-0.58089,-0.457551,3.337545,1.748927,-0.34021, 0.702554,-0.570096,-0.42592,3.086666,1.632991,-0.338863, 0.482381,-0.398126,-0.780259,3.058366,1.773346,-0.297337, 0.673211,-0.58089,-0.457551,3.337545,1.748927,-0.34021, 0.482381,-0.398126,-0.780259,3.058366,1.773346,-0.297337, 0.454048,-0.464454,-0.760344,3.276333,1.863773,-0.294266, -0.384424,0.863444,-0.326623,3.377233,1.5878,-0.400781, -0.317114,0.866865,-0.384686,3.115383,1.49239,-0.380228, 0.702554,-0.570096,-0.42592,3.086666,1.632991,-0.338863, -0.384424,0.863444,-0.326623,3.377233,1.5878,-0.400781, 0.702554,-0.570096,-0.42592,3.086666,1.632991,-0.338863, 0.673211,-0.58089,-0.457551,3.337545,1.748927,-0.34021, -0.354832,0.724971,-0.590348,3.47341,1.366149,-0.454658, -0.273708,0.760234,-0.589175,3.163181,1.209972,-0.462438, -0.317114,0.866865,-0.384686,3.115383,1.49239,-0.380228, -0.354832,0.724971,-0.590348,3.47341,1.366149,-0.454658, -0.317114,0.866865,-0.384686,3.115383,1.49239,-0.380228, -0.384424,0.863444,-0.326623,3.377233,1.5878,-0.400781, -0.270788,0.46353,-0.84369,3.528445,1.060127,-0.489443, -0.158888,0.47696,-0.864444,3.189664,0.907503,-0.500122, -0.273708,0.760234,-0.589175,3.163181,1.209972,-0.462438, -0.270788,0.46353,-0.84369,3.528445,1.060127,-0.489443, -0.273708,0.760234,-0.589175,3.163181,1.209972,-0.462438, -0.354832,0.724971,-0.590348,3.47341,1.366149,-0.454658, -0.203969,0.261593,-0.94338,3.559394,0.706516,-0.452535, -0.095989,0.297871,-0.949768,3.280681,0.510802,-0.499434, -0.158888,0.47696,-0.864444,3.189664,0.907503,-0.500122, -0.203969,0.261593,-0.94338,3.559394,0.706516,-0.452535, -0.158888,0.47696,-0.864444,3.189664,0.907503,-0.500122, -0.270788,0.46353,-0.84369,3.528445,1.060127,-0.489443, -0.175197,0.22468,-0.958553,3.61965,0.472046,-0.391742, -0.078774,0.27578,-0.957987,3.321825,0.26669,-0.46575, -0.095989,0.297871,-0.949768,3.280681,0.510802,-0.499434, -0.175197,0.22468,-0.958553,3.61965,0.472046,-0.391742, -0.095989,0.297871,-0.949768,3.280681,0.510802,-0.499434, -0.203969,0.261593,-0.94338,3.559394,0.706516,-0.452535, -0.128537,0.152973,-0.979835,3.641195,0.407454,-0.362198, -0.027323,0.180938,-0.983115,3.36004,0.165487,-0.412685, -0.078774,0.27578,-0.957987,3.321825,0.26669,-0.46575, -0.128537,0.152973,-0.979835,3.641195,0.407454,-0.362198, -0.078774,0.27578,-0.957987,3.321825,0.26669,-0.46575, -0.175197,0.22468,-0.958553,3.61965,0.472046,-0.391742, -0.023695,0.006701,-0.999697,3.67471,0.338839,-0.30784, 0.065337,0.07376,-0.995133,3.378799,0.073736,-0.355362, -0.027323,0.180938,-0.983115,3.36004,0.165487,-0.412685, -0.023695,0.006701,-0.999697,3.67471,0.338839,-0.30784, -0.027323,0.180938,-0.983115,3.36004,0.165487,-0.412685, -0.128537,0.152973,-0.979835,3.641195,0.407454,-0.362198, 0.144017,-0.141696,-0.979378,3.700363,0.265794,-0.240762, 0.226651,-0.023678,-0.973688,3.43895,-0.08258,-0.257015, 0.065337,0.07376,-0.995133,3.378799,0.073736,-0.355362, 0.144017,-0.141696,-0.979378,3.700363,0.265794,-0.240762, 0.065337,0.07376,-0.995133,3.378799,0.073736,-0.355362, -0.023695,0.006701,-0.999697,3.67471,0.338839,-0.30784, 0.325831,-0.277459,-0.903798,3.737014,0.181837,-0.176819, 0.383941,-0.196382,-0.902232,3.514981,-0.121886,-0.187589, 0.226651,-0.023678,-0.973688,3.43895,-0.08258,-0.257015, 0.325831,-0.277459,-0.903798,3.737014,0.181837,-0.176819, 0.226651,-0.023678,-0.973688,3.43895,-0.08258,-0.257015, 0.144017,-0.141696,-0.979378,3.700363,0.265794,-0.240762, -0.910859,-0.100368,-0.400327,3.731689,0.186391,0, 0.431966,-0.771434,0.46722,3.486028,-0.141683,0, 0.383941,-0.196382,-0.902232,3.514981,-0.121886,-0.187589, -0.910859,-0.100368,-0.400327,3.731689,0.186391,0, 0.383941,-0.196382,-0.902232,3.514981,-0.121886,-0.187589, 0.325831,-0.277459,-0.903798,3.737014,0.181837,-0.176819, 0.431966,-0.771434,-0.46722,3.71636,2.343387,0, -0.451389,0.892327,-0.00019,3.727093,2.308406,-0.150049, 0.020519,-0.282941,-0.958918,3.4583,2.151656,-0.102662, 0.431966,-0.771434,-0.46722,3.71636,2.343387,0, 0.020519,-0.282941,-0.958918,3.4583,2.151656,-0.102662, 0.694153,-0.467999,0.546926,3.454971,2.169877,0, -0.086812,-0.050981,-0.994919,4.120842,0.627141,-0.185461, -0.926486,-0.356041,-0.121897,4.126565,0.642027,0, 0.338485,-0.103202,-0.935295,3.929251,0.411689,0, -0.086812,-0.050981,-0.994919,4.120842,0.627141,-0.185461, 0.338485,-0.103202,-0.935295,3.929251,0.411689,0, 0.07924,-0.231862,-0.969516,3.955635,0.432417,-0.197586, -0.086812,-0.050981,-0.994919,4.120842,0.627141,-0.185461, 0.07924,-0.231862,-0.969516,3.955635,0.432417,-0.197586, -0.081635,-0.03459,-0.996062,3.889626,0.475277,-0.247365, -0.172151,0.101796,-0.979797,4.105198,0.672581,-0.300001, -0.086812,-0.050981,-0.994919,4.120842,0.627141,-0.185461, -0.081635,-0.03459,-0.996062,3.889626,0.475277,-0.247365, -0.172151,0.101796,-0.979797,4.105198,0.672581,-0.300001, -0.081635,-0.03459,-0.996062,3.889626,0.475277,-0.247365, -0.178707,0.132414,-0.974951,3.861841,0.560638,-0.311961, -0.195132,0.128745,-0.97229,4.068249,0.798926,-0.400813, -0.172151,0.101796,-0.979797,4.105198,0.672581,-0.300001, -0.178707,0.132414,-0.974951,3.861841,0.560638,-0.311961, -0.195132,0.128745,-0.97229,4.068249,0.798926,-0.400813, -0.178707,0.132414,-0.974951,3.861841,0.560638,-0.311961, -0.21777,0.161093,-0.962614,3.849352,0.664451,-0.387198, -0.434016,0.136262,-0.890541,4.041657,1.039756,-0.496922, -0.195132,0.128745,-0.97229,4.068249,0.798926,-0.400813, -0.21777,0.161093,-0.962614,3.849352,0.664451,-0.387198, -0.434016,0.136262,-0.890541,4.041657,1.039756,-0.496922, -0.21777,0.161093,-0.962614,3.849352,0.664451,-0.387198, -0.273816,0.228927,-0.93414,3.823137,0.853054,-0.461519, -0.601466,0.441167,-0.666041,3.98851,1.297806,-0.539537, -0.434016,0.136262,-0.890541,4.041657,1.039756,-0.496922, -0.273816,0.228927,-0.93414,3.823137,0.853054,-0.461519, -0.601466,0.441167,-0.666041,3.98851,1.297806,-0.539537, -0.273816,0.228927,-0.93414,3.823137,0.853054,-0.461519, -0.385487,0.478576,-0.788901,3.747724,1.184933,-0.518662, -0.571598,0.654164,-0.495323,3.886058,1.550141,-0.50483, -0.601466,0.441167,-0.666041,3.98851,1.297806,-0.539537, -0.385487,0.478576,-0.788901,3.747724,1.184933,-0.518662, -0.571598,0.654164,-0.495323,3.886058,1.550141,-0.50483, -0.385487,0.478576,-0.788901,3.747724,1.184933,-0.518662, -0.447812,0.698934,-0.557634,3.650974,1.46374,-0.478617, -0.564871,0.754993,-0.333026,3.881998,1.764428,-0.476337, -0.571598,0.654164,-0.495323,3.886058,1.550141,-0.50483, -0.447812,0.698934,-0.557634,3.650974,1.46374,-0.478617, -0.564871,0.754993,-0.333026,3.881998,1.764428,-0.476337, -0.447812,0.698934,-0.557634,3.650974,1.46374,-0.478617, -0.463441,0.825581,-0.321928,3.590526,1.70109,-0.411994, -0.512639,0.858604,-0.000762,3.814876,1.968416,-0.443, -0.564871,0.754993,-0.333026,3.881998,1.764428,-0.476337, -0.463441,0.825581,-0.321928,3.590526,1.70109,-0.411994, -0.512639,0.858604,-0.000762,3.814876,1.968416,-0.443, -0.463441,0.825581,-0.321928,3.590526,1.70109,-0.411994, 0.492397,-0.77993,-0.386336,3.541188,1.849183,-0.386366, -0.698288,0.715816,-0.000608,3.758215,2.206683,-0.323051, -0.512639,0.858604,-0.000762,3.814876,1.968416,-0.443, 0.492397,-0.77993,-0.386336,3.541188,1.849183,-0.386366, -0.698288,0.715816,-0.000608,3.758215,2.206683,-0.323051, 0.492397,-0.77993,-0.386336,3.541188,1.849183,-0.386366, 0.313443,-0.691245,-0.651102,3.479418,1.97825,-0.317478, -0.777939,0.62834,-0.000226,3.745669,2.266001,-0.24193, -0.698288,0.715816,-0.000608,3.758215,2.206683,-0.323051, 0.313443,-0.691245,-0.651102,3.479418,1.97825,-0.317478, -0.777939,0.62834,-0.000226,3.745669,2.266001,-0.24193, 0.313443,-0.691245,-0.651102,3.479418,1.97825,-0.317478, 0.161194,-0.480657,-0.861966,3.460196,2.103494,-0.180368, -0.451389,0.892327,-0.00019,3.727093,2.308406,-0.150049, -0.777939,0.62834,-0.000226,3.745669,2.266001,-0.24193, 0.161194,-0.480657,-0.861966,3.460196,2.103494,-0.180368, -0.451389,0.892327,-0.00019,3.727093,2.308406,-0.150049, 0.161194,-0.480657,-0.861966,3.460196,2.103494,-0.180368, 0.020519,-0.282941,-0.958918,3.4583,2.151656,-0.102662, -0.476715,0.879058,0,3.118124,-0.703925,0, 0.533629,-0.162705,-0.82992,3.107533,-0.691019,-0.264602, 0.445439,-0.182623,-0.876489,3.342159,-0.384674,-0.201349, -0.476715,0.879058,0,3.118124,-0.703925,0, 0.445439,-0.182623,-0.876489,3.342159,-0.384674,-0.201349, -0.560204,0.828355,-0.00034,3.33521,-0.375755,0, 0.474213,-0.311965,-0.823286,2.361089,1.76666,-0.202595, 0.536218,-0.84408,0.000006,2.339597,1.807702,0, -0.926486,-0.356041,0.121897,2.723503,1.898839,0, 0.474213,-0.311965,-0.823286,2.361089,1.76666,-0.202595, -0.926486,-0.356041,0.121897,2.723503,1.898839,0, 0.45552,-0.330524,-0.826593,2.715712,1.828219,-0.167709, 0.488174,-0.280956,-0.826287,2.406969,1.645328,-0.341479, 0.474213,-0.311965,-0.823286,2.361089,1.76666,-0.202595, 0.45552,-0.330524,-0.826593,2.715712,1.828219,-0.167709, 0.488174,-0.280956,-0.826287,2.406969,1.645328,-0.341479, 0.45552,-0.330524,-0.826593,2.715712,1.828219,-0.167709, 0.489736,-0.346185,-0.800197,2.738132,1.687333,-0.295046, 0.531574,-0.288506,-0.796362,2.519027,1.485931,-0.422962, 0.488174,-0.280956,-0.826287,2.406969,1.645328,-0.341479, 0.489736,-0.346185,-0.800197,2.738132,1.687333,-0.295046, 0.531574,-0.288506,-0.796362,2.519027,1.485931,-0.422962, 0.489736,-0.346185,-0.800197,2.738132,1.687333,-0.295046, 0.5205,-0.336657,-0.784692,2.77568,1.53871,-0.352829, 0.769657,-0.480833,-0.420033,2.553871,1.284278,-0.512335, 0.531574,-0.288506,-0.796362,2.519027,1.485931,-0.422962, 0.5205,-0.336657,-0.784692,2.77568,1.53871,-0.352829, 0.769657,-0.480833,-0.420033,2.553871,1.284278,-0.512335, 0.5205,-0.336657,-0.784692,2.77568,1.53871,-0.352829, 0.760747,-0.509474,-0.40212,2.815366,1.377583,-0.413399, -0.080985,0.883253,-0.461851,2.637461,1.01726,-0.581611, 0.769657,-0.480833,-0.420033,2.553871,1.284278,-0.512335, 0.760747,-0.509474,-0.40212,2.815366,1.377583,-0.413399, -0.080985,0.883253,-0.461851,2.637461,1.01726,-0.581611, 0.760747,-0.509474,-0.40212,2.815366,1.377583,-0.413399, -0.16423,0.819635,-0.548842,2.854291,1.093951,-0.49465, 0.040193,0.650965,-0.758043,2.747937,0.712253,-0.615674, -0.080985,0.883253,-0.461851,2.637461,1.01726,-0.581611, -0.16423,0.819635,-0.548842,2.854291,1.093951,-0.49465, 0.040193,0.650965,-0.758043,2.747937,0.712253,-0.615674, -0.16423,0.819635,-0.548842,2.854291,1.093951,-0.49465, -0.043323,0.541029,-0.839887,2.948387,0.783357,-0.515058, 0.177367,0.480226,-0.859025,2.811504,0.469098,-0.657443, 0.040193,0.650965,-0.758043,2.747937,0.712253,-0.615674, -0.043323,0.541029,-0.839887,2.948387,0.783357,-0.515058, 0.177367,0.480226,-0.859025,2.811504,0.469098,-0.657443, -0.043323,0.541029,-0.839887,2.948387,0.783357,-0.515058, 0.04432,0.372862,-0.926828,3.06109,0.397226,-0.574193, 0.288711,0.386915,-0.875753,2.898733,0.271916,-0.651298, 0.177367,0.480226,-0.859025,2.811504,0.469098,-0.657443, 0.04432,0.372862,-0.926828,3.06109,0.397226,-0.574193, 0.41428,0.318289,-0.852681,2.91987,0.084875,-0.64246, 0.288711,0.386915,-0.875753,2.898733,0.271916,-0.651298, 0.04432,0.372862,-0.926828,3.06109,0.397226,-0.574193, 0.41428,0.318289,-0.852681,2.91987,0.084875,-0.64246, 0.04432,0.372862,-0.926828,3.06109,0.397226,-0.574193, 0.098376,0.32868,-0.939304,3.136321,0.171237,-0.539896, 0.519338,0.264458,-0.812619,2.953029,-0.12769,-0.520499, 0.41428,0.318289,-0.852681,2.91987,0.084875,-0.64246, 0.098376,0.32868,-0.939304,3.136321,0.171237,-0.539896, 0.519338,0.264458,-0.812619,2.953029,-0.12769,-0.520499, 0.098376,0.32868,-0.939304,3.136321,0.171237,-0.539896, 0.159882,0.223439,-0.961516,3.16616,0.02131,-0.457261, 0.486425,0.192908,-0.852161,2.986408,-0.413503,-0.428964, 0.519338,0.264458,-0.812619,2.953029,-0.12769,-0.520499, 0.159882,0.223439,-0.961516,3.16616,0.02131,-0.457261, 0.486425,0.192908,-0.852161,2.986408,-0.413503,-0.428964, 0.159882,0.223439,-0.961516,3.16616,0.02131,-0.457261, 0.224429,0.165293,-0.96037,3.199571,-0.153739,-0.38015, 0.449624,0.075438,-0.890027,3.053144,-0.609681,-0.326931, 0.486425,0.192908,-0.852161,2.986408,-0.413503,-0.428964, 0.224429,0.165293,-0.96037,3.199571,-0.153739,-0.38015, 0.449624,0.075438,-0.890027,3.053144,-0.609681,-0.326931, 0.224429,0.165293,-0.96037,3.199571,-0.153739,-0.38015, 0.331391,0.08899,-0.939287,3.286426,-0.300744,-0.276331, 0.533629,-0.162705,-0.82992,3.107533,-0.691019,-0.264602, 0.449624,0.075438,-0.890027,3.053144,-0.609681,-0.326931, 0.331391,0.08899,-0.939287,3.286426,-0.300744,-0.276331, 0.533629,-0.162705,-0.82992,3.107533,-0.691019,-0.264602, 0.331391,0.08899,-0.939287,3.286426,-0.300744,-0.276331, 0.445439,-0.182623,-0.876489,3.342159,-0.384674,-0.201349, 0.694153,-0.467999,0.546926,3.454971,2.169877,0, 0.020519,-0.282941,-0.958918,3.4583,2.151656,-0.102662, 0.261393,-0.399072,-0.878872,3.233975,2.059193,-0.072431, 0.694153,-0.467999,0.546926,3.454971,2.169877,0, 0.261393,-0.399072,-0.878872,3.233975,2.059193,-0.072431, -0.861251,0.383698,-0.333202,3.247406,2.073333,0, -0.560204,0.828355,-0.00034,3.33521,-0.375755,0, 0.445439,-0.182623,-0.876489,3.342159,-0.384674,-0.201349, 0.383941,-0.196382,-0.902232,3.514981,-0.121886,-0.187589, -0.560204,0.828355,-0.00034,3.33521,-0.375755,0, 0.383941,-0.196382,-0.902232,3.514981,-0.121886,-0.187589, 0.431966,-0.771434,0.46722,3.486028,-0.141683,0, -0.926486,-0.356041,0.121897,2.723503,1.898839,0, 0.889638,-0.392482,0.233458,2.985371,1.982663,0, 0.441787,-0.375177,-0.814903,3.009101,1.971604,-0.03422, 0.45552,-0.330524,-0.826593,2.715712,1.828219,-0.167709, -0.926486,-0.356041,0.121897,2.723503,1.898839,0, 0.441787,-0.375177,-0.814903,3.009101,1.971604,-0.03422, 0.45552,-0.330524,-0.826593,2.715712,1.828219,-0.167709, 0.441787,-0.375177,-0.814903,3.009101,1.971604,-0.03422, 0.483908,-0.405185,-0.775667,3.036361,1.913989,-0.169838, 0.489736,-0.346185,-0.800197,2.738132,1.687333,-0.295046, 0.45552,-0.330524,-0.826593,2.715712,1.828219,-0.167709, 0.483908,-0.405185,-0.775667,3.036361,1.913989,-0.169838, 0.489736,-0.346185,-0.800197,2.738132,1.687333,-0.295046, 0.483908,-0.405185,-0.775667,3.036361,1.913989,-0.169838, 0.482381,-0.398126,-0.780259,3.058366,1.773346,-0.297337, 0.5205,-0.336657,-0.784692,2.77568,1.53871,-0.352829, 0.489736,-0.346185,-0.800197,2.738132,1.687333,-0.295046, 0.482381,-0.398126,-0.780259,3.058366,1.773346,-0.297337, 0.5205,-0.336657,-0.784692,2.77568,1.53871,-0.352829, 0.482381,-0.398126,-0.780259,3.058366,1.773346,-0.297337, 0.702554,-0.570096,-0.42592,3.086666,1.632991,-0.338863, 0.760747,-0.509474,-0.40212,2.815366,1.377583,-0.413399, 0.5205,-0.336657,-0.784692,2.77568,1.53871,-0.352829, 0.702554,-0.570096,-0.42592,3.086666,1.632991,-0.338863, 0.760747,-0.509474,-0.40212,2.815366,1.377583,-0.413399, 0.702554,-0.570096,-0.42592,3.086666,1.632991,-0.338863, -0.317114,0.866865,-0.384686,3.115383,1.49239,-0.380228, -0.16423,0.819635,-0.548842,2.854291,1.093951,-0.49465, 0.760747,-0.509474,-0.40212,2.815366,1.377583,-0.413399, -0.317114,0.866865,-0.384686,3.115383,1.49239,-0.380228, -0.16423,0.819635,-0.548842,2.854291,1.093951,-0.49465, -0.317114,0.866865,-0.384686,3.115383,1.49239,-0.380228, -0.273708,0.760234,-0.589175,3.163181,1.209972,-0.462438, -0.043323,0.541029,-0.839887,2.948387,0.783357,-0.515058, -0.16423,0.819635,-0.548842,2.854291,1.093951,-0.49465, -0.273708,0.760234,-0.589175,3.163181,1.209972,-0.462438, -0.043323,0.541029,-0.839887,2.948387,0.783357,-0.515058, -0.273708,0.760234,-0.589175,3.163181,1.209972,-0.462438, -0.158888,0.47696,-0.864444,3.189664,0.907503,-0.500122, 0.04432,0.372862,-0.926828,3.06109,0.397226,-0.574193, -0.043323,0.541029,-0.839887,2.948387,0.783357,-0.515058, -0.158888,0.47696,-0.864444,3.189664,0.907503,-0.500122, 0.04432,0.372862,-0.926828,3.06109,0.397226,-0.574193, -0.158888,0.47696,-0.864444,3.189664,0.907503,-0.500122, -0.095989,0.297871,-0.949768,3.280681,0.510802,-0.499434, 0.098376,0.32868,-0.939304,3.136321,0.171237,-0.539896, 0.04432,0.372862,-0.926828,3.06109,0.397226,-0.574193, -0.095989,0.297871,-0.949768,3.280681,0.510802,-0.499434, 0.098376,0.32868,-0.939304,3.136321,0.171237,-0.539896, -0.095989,0.297871,-0.949768,3.280681,0.510802,-0.499434, -0.078774,0.27578,-0.957987,3.321825,0.26669,-0.46575, 0.159882,0.223439,-0.961516,3.16616,0.02131,-0.457261, 0.098376,0.32868,-0.939304,3.136321,0.171237,-0.539896, -0.078774,0.27578,-0.957987,3.321825,0.26669,-0.46575, 0.159882,0.223439,-0.961516,3.16616,0.02131,-0.457261, -0.078774,0.27578,-0.957987,3.321825,0.26669,-0.46575, -0.027323,0.180938,-0.983115,3.36004,0.165487,-0.412685, 0.224429,0.165293,-0.96037,3.199571,-0.153739,-0.38015, 0.159882,0.223439,-0.961516,3.16616,0.02131,-0.457261, -0.027323,0.180938,-0.983115,3.36004,0.165487,-0.412685, 0.224429,0.165293,-0.96037,3.199571,-0.153739,-0.38015, -0.027323,0.180938,-0.983115,3.36004,0.165487,-0.412685, 0.065337,0.07376,-0.995133,3.378799,0.073736,-0.355362, 0.331391,0.08899,-0.939287,3.286426,-0.300744,-0.276331, 0.224429,0.165293,-0.96037,3.199571,-0.153739,-0.38015, 0.065337,0.07376,-0.995133,3.378799,0.073736,-0.355362, 0.331391,0.08899,-0.939287,3.286426,-0.300744,-0.276331, 0.065337,0.07376,-0.995133,3.378799,0.073736,-0.355362, 0.226651,-0.023678,-0.973688,3.43895,-0.08258,-0.257015, 0.445439,-0.182623,-0.876489,3.342159,-0.384674,-0.201349, 0.331391,0.08899,-0.939287,3.286426,-0.300744,-0.276331, 0.226651,-0.023678,-0.973688,3.43895,-0.08258,-0.257015, 0.445439,-0.182623,-0.876489,3.342159,-0.384674,-0.201349, 0.226651,-0.023678,-0.973688,3.43895,-0.08258,-0.257015, 0.383941,-0.196382,-0.902232,3.514981,-0.121886,-0.187589, 0.07924,-0.231862,-0.969516,3.955635,0.432417,-0.197586, 0.338485,-0.103202,-0.935295,3.929251,0.411689,0, -0.910859,-0.100368,-0.400327,3.731689,0.186391,0, 0.07924,-0.231862,-0.969516,3.955635,0.432417,-0.197586, -0.910859,-0.100368,-0.400327,3.731689,0.186391,0, 0.325831,-0.277459,-0.903798,3.737014,0.181837,-0.176819, -0.081635,-0.03459,-0.996062,3.889626,0.475277,-0.247365, 0.07924,-0.231862,-0.969516,3.955635,0.432417,-0.197586, 0.325831,-0.277459,-0.903798,3.737014,0.181837,-0.176819, -0.081635,-0.03459,-0.996062,3.889626,0.475277,-0.247365, 0.325831,-0.277459,-0.903798,3.737014,0.181837,-0.176819, 0.144017,-0.141696,-0.979378,3.700363,0.265794,-0.240762, -0.178707,0.132414,-0.974951,3.861841,0.560638,-0.311961, -0.081635,-0.03459,-0.996062,3.889626,0.475277,-0.247365, 0.144017,-0.141696,-0.979378,3.700363,0.265794,-0.240762, -0.178707,0.132414,-0.974951,3.861841,0.560638,-0.311961, 0.144017,-0.141696,-0.979378,3.700363,0.265794,-0.240762, -0.023695,0.006701,-0.999697,3.67471,0.338839,-0.30784, -0.178707,0.132414,-0.974951,3.861841,0.560638,-0.311961, -0.023695,0.006701,-0.999697,3.67471,0.338839,-0.30784, -0.128537,0.152973,-0.979835,3.641195,0.407454,-0.362198, -0.21777,0.161093,-0.962614,3.849352,0.664451,-0.387198, -0.178707,0.132414,-0.974951,3.861841,0.560638,-0.311961, -0.128537,0.152973,-0.979835,3.641195,0.407454,-0.362198, -0.21777,0.161093,-0.962614,3.849352,0.664451,-0.387198, -0.128537,0.152973,-0.979835,3.641195,0.407454,-0.362198, -0.175197,0.22468,-0.958553,3.61965,0.472046,-0.391742, -0.273816,0.228927,-0.93414,3.823137,0.853054,-0.461519, -0.21777,0.161093,-0.962614,3.849352,0.664451,-0.387198, -0.175197,0.22468,-0.958553,3.61965,0.472046,-0.391742, -0.273816,0.228927,-0.93414,3.823137,0.853054,-0.461519, -0.175197,0.22468,-0.958553,3.61965,0.472046,-0.391742, -0.203969,0.261593,-0.94338,3.559394,0.706516,-0.452535, -0.385487,0.478576,-0.788901,3.747724,1.184933,-0.518662, -0.273816,0.228927,-0.93414,3.823137,0.853054,-0.461519, -0.203969,0.261593,-0.94338,3.559394,0.706516,-0.452535, -0.385487,0.478576,-0.788901,3.747724,1.184933,-0.518662, -0.203969,0.261593,-0.94338,3.559394,0.706516,-0.452535, -0.270788,0.46353,-0.84369,3.528445,1.060127,-0.489443, -0.447812,0.698934,-0.557634,3.650974,1.46374,-0.478617, -0.385487,0.478576,-0.788901,3.747724,1.184933,-0.518662, -0.270788,0.46353,-0.84369,3.528445,1.060127,-0.489443, -0.447812,0.698934,-0.557634,3.650974,1.46374,-0.478617, -0.270788,0.46353,-0.84369,3.528445,1.060127,-0.489443, -0.354832,0.724971,-0.590348,3.47341,1.366149,-0.454658, -0.463441,0.825581,-0.321928,3.590526,1.70109,-0.411994, -0.447812,0.698934,-0.557634,3.650974,1.46374,-0.478617, -0.354832,0.724971,-0.590348,3.47341,1.366149,-0.454658, -0.463441,0.825581,-0.321928,3.590526,1.70109,-0.411994, -0.354832,0.724971,-0.590348,3.47341,1.366149,-0.454658, -0.384424,0.863444,-0.326623,3.377233,1.5878,-0.400781, 0.492397,-0.77993,-0.386336,3.541188,1.849183,-0.386366, -0.463441,0.825581,-0.321928,3.590526,1.70109,-0.411994, -0.384424,0.863444,-0.326623,3.377233,1.5878,-0.400781, 0.492397,-0.77993,-0.386336,3.541188,1.849183,-0.386366, -0.384424,0.863444,-0.326623,3.377233,1.5878,-0.400781, 0.673211,-0.58089,-0.457551,3.337545,1.748927,-0.34021, 0.313443,-0.691245,-0.651102,3.479418,1.97825,-0.317478, 0.492397,-0.77993,-0.386336,3.541188,1.849183,-0.386366, 0.673211,-0.58089,-0.457551,3.337545,1.748927,-0.34021, 0.313443,-0.691245,-0.651102,3.479418,1.97825,-0.317478, 0.673211,-0.58089,-0.457551,3.337545,1.748927,-0.34021, 0.454048,-0.464454,-0.760344,3.276333,1.863773,-0.294266, 0.161194,-0.480657,-0.861966,3.460196,2.103494,-0.180368, 0.313443,-0.691245,-0.651102,3.479418,1.97825,-0.317478, 0.454048,-0.464454,-0.760344,3.276333,1.863773,-0.294266, 0.161194,-0.480657,-0.861966,3.460196,2.103494,-0.180368, 0.454048,-0.464454,-0.760344,3.276333,1.863773,-0.294266, 0.428291,-0.499911,-0.752765,3.252224,2.026347,-0.148215, 0.020519,-0.282941,-0.958918,3.4583,2.151656,-0.102662, 0.161194,-0.480657,-0.861966,3.460196,2.103494,-0.180368, 0.428291,-0.499911,-0.752765,3.252224,2.026347,-0.148215, 0.020519,-0.282941,-0.958918,3.4583,2.151656,-0.102662, 0.428291,-0.499911,-0.752765,3.252224,2.026347,-0.148215, 0.261393,-0.399072,-0.878872,3.233975,2.059193,-0.072431, 0.486425,0.192908,-0.852161,2.986408,-0.413503,-0.428964, 0.016767,-0.927537,-0.373356,2.835437,-0.231101,-0.57789, 0.519338,0.264458,-0.812619,2.953029,-0.12769,-0.520499, 0.241303,0.584583,-0.77462,2.753156,0.400829,-0.713141, 0.072694,0.752739,-0.654294,2.679445,0.687427,-0.720573, 0.040193,0.650965,-0.758043,2.747937,0.712253,-0.615674, 0.241303,0.584583,-0.77462,2.753156,0.400829,-0.713141, 0.040193,0.650965,-0.758043,2.747937,0.712253,-0.615674, 0.177367,0.480226,-0.859025,2.811504,0.469098,-0.657443, 0.462789,0.48004,-0.745243,2.790681,0.219187,-0.718263, 0.241303,0.584583,-0.77462,2.753156,0.400829,-0.713141, 0.177367,0.480226,-0.859025,2.811504,0.469098,-0.657443, 0.462789,0.48004,-0.745243,2.790681,0.219187,-0.718263, 0.177367,0.480226,-0.859025,2.811504,0.469098,-0.657443, 0.288711,0.386915,-0.875753,2.898733,0.271916,-0.651298, 0.539114,0.412574,-0.734261,2.790657,0.044324,-0.717488, 0.462789,0.48004,-0.745243,2.790681,0.219187,-0.718263, 0.288711,0.386915,-0.875753,2.898733,0.271916,-0.651298, 0.539114,0.412574,-0.734261,2.790657,0.044324,-0.717488, 0.288711,0.386915,-0.875753,2.898733,0.271916,-0.651298, 0.41428,0.318289,-0.852681,2.91987,0.084875,-0.64246, 0.016767,-0.927537,-0.373356,2.835437,-0.231101,-0.57789, 0.763734,0.228435,-0.603761,2.736198,-0.346225,-0.659345, 0.696162,0.333274,-0.635835,2.743995,-0.129852,-0.718277, 0.696162,0.333274,-0.635835,2.743995,-0.129852,-0.718277, 0.41428,0.318289,-0.852681,2.91987,0.084875,-0.64246, 0.519338,0.264458,-0.812619,2.953029,-0.12769,-0.520499, 0.696162,0.333274,-0.635835,2.743995,-0.129852,-0.718277, 0.519338,0.264458,-0.812619,2.953029,-0.12769,-0.520499, 0.016767,-0.927537,-0.373356,2.835437,-0.231101,-0.57789, 0.696162,0.333274,-0.635835,2.743995,-0.129852,-0.718277, 0.539114,0.412574,-0.734261,2.790657,0.044324,-0.717488, 0.41428,0.318289,-0.852681,2.91987,0.084875,-0.64246, 0.788801,-0.19938,-0.581412,2.514162,0.988713,-0.674527, 0.906617,-0.14387,-0.39667,2.482917,0.997637,-0.702425, 0.752227,-0.484776,-0.446258,2.396355,1.242239,-0.597722, 0.907314,0.09913,-0.4086,2.618307,-0.549092,-0.805491, 0.908163,-0.140074,-0.394486,2.5392,-0.727778,-0.750475, 0.795625,-0.129968,-0.591684,2.410367,-0.777999,-0.841105, 0.907314,0.09913,-0.4086,2.618307,-0.549092,-0.805491, 0.795625,-0.129968,-0.591684,2.410367,-0.777999,-0.841105, 0.748939,0.152982,-0.644738,2.543372,-0.548031,-0.937182, 0.85208,0.278905,-0.442914,2.690576,-0.368057,-0.819343, 0.907314,0.09913,-0.4086,2.618307,-0.549092,-0.805491, 0.748939,0.152982,-0.644738,2.543372,-0.548031,-0.937182, 0.85208,0.278905,-0.442914,2.690576,-0.368057,-0.819343, 0.748939,0.152982,-0.644738,2.543372,-0.548031,-0.937182, 0.69338,0.351142,-0.629224,2.594499,-0.422948,-0.981263, 0.759315,0.386803,-0.523282,2.702577,-0.197406,-0.795611, 0.85208,0.278905,-0.442914,2.690576,-0.368057,-0.819343, 0.69338,0.351142,-0.629224,2.594499,-0.422948,-0.981263, 0.759315,0.386803,-0.523282,2.702577,-0.197406,-0.795611, 0.69338,0.351142,-0.629224,2.594499,-0.422948,-0.981263, 0.662294,0.443714,-0.603725,2.60743,-0.208248,-0.974218, 0.636794,0.461927,-0.617346,2.734183,0.038769,-0.86581, 0.759315,0.386803,-0.523282,2.702577,-0.197406,-0.795611, 0.662294,0.443714,-0.603725,2.60743,-0.208248,-0.974218, 0.636794,0.461927,-0.617346,2.734183,0.038769,-0.86581, 0.662294,0.443714,-0.603725,2.60743,-0.208248,-0.974218, 0.614456,0.489786,-0.618509,2.649413,0.031535,-1.024796, 0.722145,-0.312679,-0.617041,2.731512,0.219003,-0.891585, 0.636794,0.461927,-0.617346,2.734183,0.038769,-0.86581, 0.614456,0.489786,-0.618509,2.649413,0.031535,-1.024796, 0.722145,-0.312679,-0.617041,2.731512,0.219003,-0.891585, 0.614456,0.489786,-0.618509,2.649413,0.031535,-1.024796, 0.718673,-0.290446,-0.631784,2.668936,0.206182,-1.014371, 0.742962,-0.255405,-0.618688,2.70696,0.393597,-0.849582, 0.722145,-0.312679,-0.617041,2.731512,0.219003,-0.891585, 0.718673,-0.290446,-0.631784,2.668936,0.206182,-1.014371, 0.742962,-0.255405,-0.618688,2.70696,0.393597,-0.849582, 0.718673,-0.290446,-0.631784,2.668936,0.206182,-1.014371, 0.815771,-0.424495,-0.392838,2.616001,0.447717,-0.960748, 0.804239,-0.153549,-0.574128,2.604217,0.728827,-0.769671, 0.742962,-0.255405,-0.618688,2.70696,0.393597,-0.849582, 0.815771,-0.424495,-0.392838,2.616001,0.447717,-0.960748, 0.804239,-0.153549,-0.574128,2.604217,0.728827,-0.769671, 0.815771,-0.424495,-0.392838,2.616001,0.447717,-0.960748, 0.900366,-0.205985,-0.38329,2.5704,0.738683,-0.830405, 0.788801,-0.19938,-0.581412,2.514162,0.988713,-0.674527, 0.804239,-0.153549,-0.574128,2.604217,0.728827,-0.769671, 0.900366,-0.205985,-0.38329,2.5704,0.738683,-0.830405, 0.788801,-0.19938,-0.581412,2.514162,0.988713,-0.674527, 0.900366,-0.205985,-0.38329,2.5704,0.738683,-0.830405, 0.906617,-0.14387,-0.39667,2.482917,0.997637,-0.702425, 0.907314,0.09913,-0.4086,2.618307,-0.549092,-0.805491, 0.85208,0.278905,-0.442914,2.690576,-0.368057,-0.819343, 0.763734,0.228435,-0.603761,2.736198,-0.346225,-0.659345, 0.907314,0.09913,-0.4086,2.618307,-0.549092,-0.805491, 0.763734,0.228435,-0.603761,2.736198,-0.346225,-0.659345, 0.769758,0.095155,-0.631204,2.688131,-0.517509,-0.672975, 0.788801,-0.19938,-0.581412,2.514162,0.988713,-0.674527, 0.752227,-0.484776,-0.446258,2.396355,1.242239,-0.597722, -0.071584,0.92252,-0.379253,2.542439,0.999928,-0.648592, 0.804239,-0.153549,-0.574128,2.604217,0.728827,-0.769671, 0.788801,-0.19938,-0.581412,2.514162,0.988713,-0.674527, -0.071584,0.92252,-0.379253,2.542439,0.999928,-0.648592, 0.804239,-0.153549,-0.574128,2.604217,0.728827,-0.769671, -0.071584,0.92252,-0.379253,2.542439,0.999928,-0.648592, 0.072694,0.752739,-0.654294,2.679445,0.687427,-0.720573, 0.742962,-0.255405,-0.618688,2.70696,0.393597,-0.849582, 0.804239,-0.153549,-0.574128,2.604217,0.728827,-0.769671, 0.072694,0.752739,-0.654294,2.679445,0.687427,-0.720573, 0.742962,-0.255405,-0.618688,2.70696,0.393597,-0.849582, 0.072694,0.752739,-0.654294,2.679445,0.687427,-0.720573, 0.241303,0.584583,-0.77462,2.753156,0.400829,-0.713141, 0.722145,-0.312679,-0.617041,2.731512,0.219003,-0.891585, 0.742962,-0.255405,-0.618688,2.70696,0.393597,-0.849582, 0.241303,0.584583,-0.77462,2.753156,0.400829,-0.713141, 0.722145,-0.312679,-0.617041,2.731512,0.219003,-0.891585, 0.241303,0.584583,-0.77462,2.753156,0.400829,-0.713141, 0.462789,0.48004,-0.745243,2.790681,0.219187,-0.718263, 0.636794,0.461927,-0.617346,2.734183,0.038769,-0.86581, 0.722145,-0.312679,-0.617041,2.731512,0.219003,-0.891585, 0.462789,0.48004,-0.745243,2.790681,0.219187,-0.718263, 0.636794,0.461927,-0.617346,2.734183,0.038769,-0.86581, 0.462789,0.48004,-0.745243,2.790681,0.219187,-0.718263, 0.539114,0.412574,-0.734261,2.790657,0.044324,-0.717488, 0.759315,0.386803,-0.523282,2.702577,-0.197406,-0.795611, 0.636794,0.461927,-0.617346,2.734183,0.038769,-0.86581, 0.539114,0.412574,-0.734261,2.790657,0.044324,-0.717488, 0.759315,0.386803,-0.523282,2.702577,-0.197406,-0.795611, 0.539114,0.412574,-0.734261,2.790657,0.044324,-0.717488, 0.696162,0.333274,-0.635835,2.743995,-0.129852,-0.718277, 0.85208,0.278905,-0.442914,2.690576,-0.368057,-0.819343, 0.759315,0.386803,-0.523282,2.702577,-0.197406,-0.795611, 0.696162,0.333274,-0.635835,2.743995,-0.129852,-0.718277, 0.85208,0.278905,-0.442914,2.690576,-0.368057,-0.819343, 0.696162,0.333274,-0.635835,2.743995,-0.129852,-0.718277, 0.763734,0.228435,-0.603761,2.736198,-0.346225,-0.659345, 0.072694,0.752739,-0.654294,2.679445,0.687427,-0.720573, -0.071584,0.92252,-0.379253,2.542439,0.999928,-0.648592, -0.080985,0.883253,-0.461851,2.637461,1.01726,-0.581611, 0.072694,0.752739,-0.654294,2.679445,0.687427,-0.720573, -0.080985,0.883253,-0.461851,2.637461,1.01726,-0.581611, 0.040193,0.650965,-0.758043,2.747937,0.712253,-0.615674, 0.547549,-0.279581,-0.788686,2.13239,1.755821,-0.180271, 0.756976,-0.653442,0,2.128139,1.788397,0, 0.536218,-0.84408,0.000006,2.339597,1.807702,0, 0.547549,-0.279581,-0.788686,2.13239,1.755821,-0.180271, 0.536218,-0.84408,0.000006,2.339597,1.807702,0, 0.474213,-0.311965,-0.823286,2.361089,1.76666,-0.202595, 0.598679,-0.200355,-0.775527,2.183003,1.65407,-0.341767, 0.547549,-0.279581,-0.788686,2.13239,1.755821,-0.180271, 0.474213,-0.311965,-0.823286,2.361089,1.76666,-0.202595, 0.598679,-0.200355,-0.775527,2.183003,1.65407,-0.341767, 0.474213,-0.311965,-0.823286,2.361089,1.76666,-0.202595, 0.488174,-0.280956,-0.826287,2.406969,1.645328,-0.341479, 0.561098,-0.272385,-0.781649,2.301359,1.397721,-0.546015, 0.598679,-0.200355,-0.775527,2.183003,1.65407,-0.341767, 0.488174,-0.280956,-0.826287,2.406969,1.645328,-0.341479, 0.561098,-0.272385,-0.781649,2.301359,1.397721,-0.546015, 0.488174,-0.280956,-0.826287,2.406969,1.645328,-0.341479, 0.531574,-0.288506,-0.796362,2.519027,1.485931,-0.422962, 0.752227,-0.484776,-0.446258,2.396355,1.242239,-0.597722, 0.561098,-0.272385,-0.781649,2.301359,1.397721,-0.546015, 0.531574,-0.288506,-0.796362,2.519027,1.485931,-0.422962, 0.752227,-0.484776,-0.446258,2.396355,1.242239,-0.597722, 0.531574,-0.288506,-0.796362,2.519027,1.485931,-0.422962, 0.769657,-0.480833,-0.420033,2.553871,1.284278,-0.512335, -0.071584,0.92252,-0.379253,2.542439,0.999928,-0.648592, 0.752227,-0.484776,-0.446258,2.396355,1.242239,-0.597722, 0.769657,-0.480833,-0.420033,2.553871,1.284278,-0.512335, -0.071584,0.92252,-0.379253,2.542439,0.999928,-0.648592, 0.769657,-0.480833,-0.420033,2.553871,1.284278,-0.512335, -0.080985,0.883253,-0.461851,2.637461,1.01726,-0.581611, -0.096144,-0.182414,-0.97851,2.292449,-0.871852,-0.8824, 0.561574,-0.148323,-0.814024,2.245624,-0.864372,-0.995778, 0.525142,-0.062799,-0.848694,2.346081,-0.74535,-1.013296, -0.096144,-0.182414,-0.97851,2.292449,-0.871852,-0.8824, 0.525142,-0.062799,-0.848694,2.346081,-0.74535,-1.013296, 0.795625,-0.129968,-0.591684,2.410367,-0.777999,-0.841105, 0.805898,-0.146097,-0.573745,2.096552,1.678482,-0.32681, 0.546571,-0.125171,0.828005,2.069379,1.727818,-0.212746, 0.547549,-0.279581,-0.788686,2.13239,1.755821,-0.180271, 0.805898,-0.146097,-0.573745,2.096552,1.678482,-0.32681, 0.547549,-0.279581,-0.788686,2.13239,1.755821,-0.180271, 0.598679,-0.200355,-0.775527,2.183003,1.65407,-0.341767, 0.772313,-0.244122,-0.586461,2.189848,1.468992,-0.517501, 0.805898,-0.146097,-0.573745,2.096552,1.678482,-0.32681, 0.598679,-0.200355,-0.775527,2.183003,1.65407,-0.341767, 0.772313,-0.244122,-0.586461,2.189848,1.468992,-0.517501, 0.598679,-0.200355,-0.775527,2.183003,1.65407,-0.341767, 0.561098,-0.272385,-0.781649,2.301359,1.397721,-0.546015, 0.697438,-0.478568,-0.533435,2.266003,1.273253,-0.663332, 0.772313,-0.244122,-0.586461,2.189848,1.468992,-0.517501, 0.561098,-0.272385,-0.781649,2.301359,1.397721,-0.546015, 0.697438,-0.478568,-0.533435,2.266003,1.273253,-0.663332, 0.561098,-0.272385,-0.781649,2.301359,1.397721,-0.546015, 0.752227,-0.484776,-0.446258,2.396355,1.242239,-0.597722, 0.628361,-0.426126,-0.65083,2.347317,1.066114,-0.758763, 0.697438,-0.478568,-0.533435,2.266003,1.273253,-0.663332, 0.752227,-0.484776,-0.446258,2.396355,1.242239,-0.597722, 0.628361,-0.426126,-0.65083,2.347317,1.066114,-0.758763, 0.752227,-0.484776,-0.446258,2.396355,1.242239,-0.597722, 0.906617,-0.14387,-0.39667,2.482917,0.997637,-0.702425, 0.065855,0.814333,-0.576649,2.399389,0.782091,-0.915279, 0.628361,-0.426126,-0.65083,2.347317,1.066114,-0.758763, 0.906617,-0.14387,-0.39667,2.482917,0.997637,-0.702425, 0.065855,0.814333,-0.576649,2.399389,0.782091,-0.915279, 0.906617,-0.14387,-0.39667,2.482917,0.997637,-0.702425, 0.900366,-0.205985,-0.38329,2.5704,0.738683,-0.830405, 0.187431,0.691784,-0.697355,2.448969,0.529858,-1.037335, 0.065855,0.814333,-0.576649,2.399389,0.782091,-0.915279, 0.900366,-0.205985,-0.38329,2.5704,0.738683,-0.830405, 0.187431,0.691784,-0.697355,2.448969,0.529858,-1.037335, 0.900366,-0.205985,-0.38329,2.5704,0.738683,-0.830405, 0.815771,-0.424495,-0.392838,2.616001,0.447717,-0.960748, 0.328244,0.603536,-0.726637,2.495354,0.250522,-1.132081, 0.187431,0.691784,-0.697355,2.448969,0.529858,-1.037335, 0.815771,-0.424495,-0.392838,2.616001,0.447717,-0.960748, 0.328244,0.603536,-0.726637,2.495354,0.250522,-1.132081, 0.815771,-0.424495,-0.392838,2.616001,0.447717,-0.960748, 0.718673,-0.290446,-0.631784,2.668936,0.206182,-1.014371, 0.387394,0.516219,-0.763835,2.50049,-0.035029,-1.170179, 0.328244,0.603536,-0.726637,2.495354,0.250522,-1.132081, 0.718673,-0.290446,-0.631784,2.668936,0.206182,-1.014371, 0.387394,0.516219,-0.763835,2.50049,-0.035029,-1.170179, 0.718673,-0.290446,-0.631784,2.668936,0.206182,-1.014371, 0.614456,0.489786,-0.618509,2.649413,0.031535,-1.024796, 0.387987,0.466054,-0.795148,2.452588,-0.244072,-1.138797, 0.387394,0.516219,-0.763835,2.50049,-0.035029,-1.170179, 0.614456,0.489786,-0.618509,2.649413,0.031535,-1.024796, 0.387987,0.466054,-0.795148,2.452588,-0.244072,-1.138797, 0.614456,0.489786,-0.618509,2.649413,0.031535,-1.024796, 0.662294,0.443714,-0.603725,2.60743,-0.208248,-0.974218, 0.397823,0.403779,-0.823832,2.439827,-0.395385,-1.131324, 0.387987,0.466054,-0.795148,2.452588,-0.244072,-1.138797, 0.662294,0.443714,-0.603725,2.60743,-0.208248,-0.974218, 0.397823,0.403779,-0.823832,2.439827,-0.395385,-1.131324, 0.662294,0.443714,-0.603725,2.60743,-0.208248,-0.974218, 0.69338,0.351142,-0.629224,2.594499,-0.422948,-0.981263, 0.449887,0.239006,-0.860511,2.384638,-0.591919,-1.043058, 0.397823,0.403779,-0.823832,2.439827,-0.395385,-1.131324, 0.69338,0.351142,-0.629224,2.594499,-0.422948,-0.981263, 0.449887,0.239006,-0.860511,2.384638,-0.591919,-1.043058, 0.69338,0.351142,-0.629224,2.594499,-0.422948,-0.981263, 0.748939,0.152982,-0.644738,2.543372,-0.548031,-0.937182, 0.525142,-0.062799,-0.848694,2.346081,-0.74535,-1.013296, 0.449887,0.239006,-0.860511,2.384638,-0.591919,-1.043058, 0.748939,0.152982,-0.644738,2.543372,-0.548031,-0.937182, 0.525142,-0.062799,-0.848694,2.346081,-0.74535,-1.013296, 0.748939,0.152982,-0.644738,2.543372,-0.548031,-0.937182, 0.795625,-0.129968,-0.591684,2.410367,-0.777999,-0.841105, -0.096144,-0.182414,-0.97851,2.292449,-0.871852,-0.8824, -0.012663,0.029084,-0.999497,2.229345,-0.992723,-0.862826, -0.742985,0.015712,-0.669123,2.222082,-0.957342,-1.014137, -0.096144,-0.182414,-0.97851,2.292449,-0.871852,-0.8824, -0.742985,0.015712,-0.669123,2.222082,-0.957342,-1.014137, 0.561574,-0.148323,-0.814024,2.245624,-0.864372,-0.995778, 0.525142,-0.062799,-0.848694,2.346081,-0.74535,-1.013296, 0.561574,-0.148323,-0.814024,2.245624,-0.864372,-0.995778, 0.097864,0.250653,-0.963118,2.013534,-0.662303,-1.191491, 0.449887,0.239006,-0.860511,2.384638,-0.591919,-1.043058, 0.525142,-0.062799,-0.848694,2.346081,-0.74535,-1.013296, 0.097864,0.250653,-0.963118,2.013534,-0.662303,-1.191491, 0.449887,0.239006,-0.860511,2.384638,-0.591919,-1.043058, 0.097864,0.250653,-0.963118,2.013534,-0.662303,-1.191491, 0.10998,0.376752,-0.919762,2.108912,-0.357128,-1.259691, -0.385788,0.922588,0,2.042206,1.777154,0, 0.546571,-0.125171,0.828005,2.069379,1.727818,-0.212746, 0.513731,-0.239493,-0.823847,1.807583,1.756546,-0.177627, -0.385788,0.922588,0,2.042206,1.777154,0, 0.513731,-0.239493,-0.823847,1.807583,1.756546,-0.177627, -0.720176,-0.693792,0,1.794465,1.787719,0, 0.397823,0.403779,-0.823832,2.439827,-0.395385,-1.131324, 0.449887,0.239006,-0.860511,2.384638,-0.591919,-1.043058, 0.10998,0.376752,-0.919762,2.108912,-0.357128,-1.259691, 0.397823,0.403779,-0.823832,2.439827,-0.395385,-1.131324, 0.10998,0.376752,-0.919762,2.108912,-0.357128,-1.259691, 0.12555,0.440005,-0.889176,2.136269,-0.187666,-1.278057, 0.387987,0.466054,-0.795148,2.452588,-0.244072,-1.138797, 0.397823,0.403779,-0.823832,2.439827,-0.395385,-1.131324, 0.12555,0.440005,-0.889176,2.136269,-0.187666,-1.278057, 0.387394,0.516219,-0.763835,2.50049,-0.035029,-1.170179, 0.387987,0.466054,-0.795148,2.452588,-0.244072,-1.138797, 0.12555,0.440005,-0.889176,2.136269,-0.187666,-1.278057, 0.387394,0.516219,-0.763835,2.50049,-0.035029,-1.170179, 0.12555,0.440005,-0.889176,2.136269,-0.187666,-1.278057, 0.146937,0.551946,-0.820832,2.14179,-0.055306,-1.295565, 0.328244,0.603536,-0.726637,2.495354,0.250522,-1.132081, 0.387394,0.516219,-0.763835,2.50049,-0.035029,-1.170179, 0.146937,0.551946,-0.820832,2.14179,-0.055306,-1.295565, 0.328244,0.603536,-0.726637,2.495354,0.250522,-1.132081, 0.146937,0.551946,-0.820832,2.14179,-0.055306,-1.295565, 0.115383,0.694944,-0.709746,2.0817,0.283249,-1.259461, 0.187431,0.691784,-0.697355,2.448969,0.529858,-1.037335, 0.328244,0.603536,-0.726637,2.495354,0.250522,-1.132081, 0.115383,0.694944,-0.709746,2.0817,0.283249,-1.259461, 0.187431,0.691784,-0.697355,2.448969,0.529858,-1.037335, 0.115383,0.694944,-0.709746,2.0817,0.283249,-1.259461, 0.052979,0.780732,-0.622616,2.023441,0.529338,-1.144399, 0.065855,0.814333,-0.576649,2.399389,0.782091,-0.915279, 0.187431,0.691784,-0.697355,2.448969,0.529858,-1.037335, 0.052979,0.780732,-0.622616,2.023441,0.529338,-1.144399, 0.065855,0.814333,-0.576649,2.399389,0.782091,-0.915279, 0.052979,0.780732,-0.622616,2.023441,0.529338,-1.144399, 0.019336,0.837694,-0.545798,1.975941,0.827957,-1.018423, 0.628361,-0.426126,-0.65083,2.347317,1.066114,-0.758763, 0.065855,0.814333,-0.576649,2.399389,0.782091,-0.915279, 0.019336,0.837694,-0.545798,1.975941,0.827957,-1.018423, 0.628361,-0.426126,-0.65083,2.347317,1.066114,-0.758763, 0.019336,0.837694,-0.545798,1.975941,0.827957,-1.018423, 0.026499,0.942993,-0.331757,1.958254,1.130271,-0.861813, 0.697438,-0.478568,-0.533435,2.266003,1.273253,-0.663332, 0.628361,-0.426126,-0.65083,2.347317,1.066114,-0.758763, 0.026499,0.942993,-0.331757,1.958254,1.130271,-0.861813, 0.697438,-0.478568,-0.533435,2.266003,1.273253,-0.663332, 0.026499,0.942993,-0.331757,1.958254,1.130271,-0.861813, 0.696414,-0.392791,-0.600602,1.859443,1.450393,-0.632222, 0.772313,-0.244122,-0.586461,2.189848,1.468992,-0.517501, 0.697438,-0.478568,-0.533435,2.266003,1.273253,-0.663332, 0.696414,-0.392791,-0.600602,1.859443,1.450393,-0.632222, 0.772313,-0.244122,-0.586461,2.189848,1.468992,-0.517501, 0.696414,-0.392791,-0.600602,1.859443,1.450393,-0.632222, 0.552632,-0.484765,-0.677938,1.821946,1.618209,-0.403751, 0.805898,-0.146097,-0.573745,2.096552,1.678482,-0.32681, 0.772313,-0.244122,-0.586461,2.189848,1.468992,-0.517501, 0.552632,-0.484765,-0.677938,1.821946,1.618209,-0.403751, 0.805898,-0.146097,-0.573745,2.096552,1.678482,-0.32681, 0.552632,-0.484765,-0.677938,1.821946,1.618209,-0.403751, 0.506924,-0.406124,-0.760323,1.798719,1.714447,-0.259352, 0.546571,-0.125171,0.828005,2.069379,1.727818,-0.212746, 0.805898,-0.146097,-0.573745,2.096552,1.678482,-0.32681, 0.506924,-0.406124,-0.760323,1.798719,1.714447,-0.259352, 0.546571,-0.125171,0.828005,2.069379,1.727818,-0.212746, 0.506924,-0.406124,-0.760323,1.798719,1.714447,-0.259352, 0.513731,-0.239493,-0.823847,1.807583,1.756546,-0.177627, 0.659349,-0.248914,-0.709437,0.737904,1.604213,-0.281713, -0.208715,-0.624734,-0.752427,0.223642,1.684075,-0.160743, 0.566114,-0.824327,0,0.234527,1.730117,0, 0.659349,-0.248914,-0.709437,0.737904,1.604213,-0.281713, 0.566114,-0.824327,0,0.234527,1.730117,0, 0.981421,-0.191868,0,0.733818,1.740873,0, 0.631747,-0.24686,-0.734817,0.725959,1.478055,-0.461804, -0.251063,-0.683027,-0.685888,0.23733,1.595746,-0.288672, -0.208715,-0.624734,-0.752427,0.223642,1.684075,-0.160743, 0.631747,-0.24686,-0.734817,0.725959,1.478055,-0.461804, -0.208715,-0.624734,-0.752427,0.223642,1.684075,-0.160743, 0.659349,-0.248914,-0.709437,0.737904,1.604213,-0.281713, 0.623235,-0.257987,-0.738255,0.760722,1.205036,-0.700545, -0.252973,-0.819125,-0.51482,0.289039,1.496446,-0.430055, -0.251063,-0.683027,-0.685888,0.23733,1.595746,-0.288672, 0.623235,-0.257987,-0.738255,0.760722,1.205036,-0.700545, -0.251063,-0.683027,-0.685888,0.23733,1.595746,-0.288672, 0.631747,-0.24686,-0.734817,0.725959,1.478055,-0.461804, 0.791391,-0.43807,-0.426373,0.857323,0.985001,-0.874029, -0.13716,-0.98063,-0.139827,0.305671,1.298417,-0.629719, -0.252973,-0.819125,-0.51482,0.289039,1.496446,-0.430055, 0.791391,-0.43807,-0.426373,0.857323,0.985001,-0.874029, -0.252973,-0.819125,-0.51482,0.289039,1.496446,-0.430055, 0.623235,-0.257987,-0.738255,0.760722,1.205036,-0.700545, -0.06371,0.842533,-0.534864,0.921312,0.755659,-0.99933, 0.007127,0.896038,-0.44392,0.243473,1.134082,-0.819993, -0.13716,-0.98063,-0.139827,0.305671,1.298417,-0.629719, -0.06371,0.842533,-0.534864,0.921312,0.755659,-0.99933, -0.13716,-0.98063,-0.139827,0.305671,1.298417,-0.629719, 0.791391,-0.43807,-0.426373,0.857323,0.985001,-0.874029, -0.069142,0.724976,-0.685295,0.939271,0.379986,-1.185872, 0.009434,0.815301,-0.578961,0.316341,0.785311,-1.08626, 0.007127,0.896038,-0.44392,0.243473,1.134082,-0.819993, -0.069142,0.724976,-0.685295,0.939271,0.379986,-1.185872, 0.007127,0.896038,-0.44392,0.243473,1.134082,-0.819993, -0.06371,0.842533,-0.534864,0.921312,0.755659,-0.99933, -0.057955,0.638634,-0.767325,0.927775,0.195225,-1.233043, 0.040473,0.760778,-0.647749,0.539252,0.353984,-1.254493, 0.009434,0.815301,-0.578961,0.316341,0.785311,-1.08626, -0.057955,0.638634,-0.767325,0.927775,0.195225,-1.233043, 0.009434,0.815301,-0.578961,0.316341,0.785311,-1.08626, -0.069142,0.724976,-0.685295,0.939271,0.379986,-1.185872, -0.024013,0.58573,-0.810151,0.950215,0.042751,-1.256188, 0.080812,0.697931,-0.711591,0.53915,0.148262,-1.321014, 0.040473,0.760778,-0.647749,0.539252,0.353984,-1.254493, -0.024013,0.58573,-0.810151,0.950215,0.042751,-1.256188, 0.040473,0.760778,-0.647749,0.539252,0.353984,-1.254493, -0.057955,0.638634,-0.767325,0.927775,0.195225,-1.233043, 0.016737,0.497476,-0.867316,0.943855,-0.101127,-1.274771, 0.09853,0.626571,-0.773111,0.516872,-0.020713,-1.356627, 0.080812,0.697931,-0.711591,0.53915,0.148262,-1.321014, 0.016737,0.497476,-0.867316,0.943855,-0.101127,-1.274771, 0.080812,0.697931,-0.711591,0.53915,0.148262,-1.321014, -0.024013,0.58573,-0.810151,0.950215,0.042751,-1.256188, 0.060533,0.377837,-0.923891,0.960321,-0.308052,-1.243133, 0.111825,0.518485,-0.847743,0.542386,-0.188227,-1.370375, 0.09853,0.626571,-0.773111,0.516872,-0.020713,-1.356627, 0.060533,0.377837,-0.923891,0.960321,-0.308052,-1.243133, 0.09853,0.626571,-0.773111,0.516872,-0.020713,-1.356627, 0.016737,0.497476,-0.867316,0.943855,-0.101127,-1.274771, 0.088722,0.251367,-0.963817,0.97453,-0.525273,-1.140353, 0.163727,0.387435,-0.907242,0.546875,-0.39094,-1.363244, 0.111825,0.518485,-0.847743,0.542386,-0.188227,-1.370375, 0.088722,0.251367,-0.963817,0.97453,-0.525273,-1.140353, 0.111825,0.518485,-0.847743,0.542386,-0.188227,-1.370375, 0.060533,0.377837,-0.923891,0.960321,-0.308052,-1.243133, 0.107989,0.168108,-0.979836,0.948819,-0.638568,-1.102958, 0.227108,0.258715,-0.938876,0.550658,-0.633015,-1.331311, 0.163727,0.387435,-0.907242,0.546875,-0.39094,-1.363244, 0.107989,0.168108,-0.979836,0.948819,-0.638568,-1.102958, 0.163727,0.387435,-0.907242,0.546875,-0.39094,-1.363244, 0.088722,0.251367,-0.963817,0.97453,-0.525273,-1.140353, 0.10833,0.05569,-0.992554,0.939974,-0.894739,-1.019809, 0.263434,0.119819,-0.957207,0.527724,-0.862854,-1.253811, 0.227108,0.258715,-0.938876,0.550658,-0.633015,-1.331311, 0.10833,0.05569,-0.992554,0.939974,-0.894739,-1.019809, 0.227108,0.258715,-0.938876,0.550658,-0.633015,-1.331311, 0.107989,0.168108,-0.979836,0.948819,-0.638568,-1.102958, 0.114032,-0.218132,-0.969234,0.956456,-1.070504,-0.921063, 0.304293,-0.024391,-0.952266,0.544825,-1.133123,-1.096902, 0.263434,0.119819,-0.957207,0.527724,-0.862854,-1.253811, 0.114032,-0.218132,-0.969234,0.956456,-1.070504,-0.921063, 0.263434,0.119819,-0.957207,0.527724,-0.862854,-1.253811, 0.10833,0.05569,-0.992554,0.939974,-0.894739,-1.019809, 0.187438,-0.340915,-0.921219,0.93066,-1.216516,-0.831196, 0.372063,-0.134052,-0.918477,0.530629,-1.316423,-0.929842, 0.304293,-0.024391,-0.952266,0.544825,-1.133123,-1.096902, 0.187438,-0.340915,-0.921219,0.93066,-1.216516,-0.831196, 0.304293,-0.024391,-0.952266,0.544825,-1.133123,-1.096902, 0.114032,-0.218132,-0.969234,0.956456,-1.070504,-0.921063, 0.25339,-0.287519,-0.923648,0.922703,-1.296032,-0.728307, 0.424286,-0.254348,-0.869073,0.538756,-1.408602,-0.764911, 0.372063,-0.134052,-0.918477,0.530629,-1.316423,-0.929842, 0.25339,-0.287519,-0.923648,0.922703,-1.296032,-0.728307, 0.372063,-0.134052,-0.918477,0.530629,-1.316423,-0.929842, 0.187438,-0.340915,-0.921219,0.93066,-1.216516,-0.831196, 0.23972,-0.400363,-0.884445,0.912699,-1.455066,-0.576185, 0.420794,-0.405156,-0.811653,0.489819,-1.524947,-0.672392, 0.424286,-0.254348,-0.869073,0.538756,-1.408602,-0.764911, 0.23972,-0.400363,-0.884445,0.912699,-1.455066,-0.576185, 0.424286,-0.254348,-0.869073,0.538756,-1.408602,-0.764911, 0.25339,-0.287519,-0.923648,0.922703,-1.296032,-0.728307, 0.213167,-0.525559,-0.823619,0.912989,-1.499314,-0.419547, 0.383978,-0.566345,-0.729256,0.480235,-1.631521,-0.401961, 0.420794,-0.405156,-0.811653,0.489819,-1.524947,-0.672392, 0.213167,-0.525559,-0.823619,0.912989,-1.499314,-0.419547, 0.420794,-0.405156,-0.811653,0.489819,-1.524947,-0.672392, 0.23972,-0.400363,-0.884445,0.912699,-1.455066,-0.576185, 0.92802,-0.37253,0,0.927497,-1.558489,0, 0.226963,-0.973903,0,0.44655,-1.67295,0, 0.383978,-0.566345,-0.729256,0.480235,-1.631521,-0.401961, 0.92802,-0.37253,0,0.927497,-1.558489,0, 0.383978,-0.566345,-0.729256,0.480235,-1.631521,-0.401961, 0.213167,-0.525559,-0.823619,0.912989,-1.499314,-0.419547, 0.335626,-0.735806,-0.588171,-0.221516,1.686349,-0.151403, 0.235033,-0.721825,-0.650944,-0.559706,1.69418,-0.186107, -0.009814,-0.999952,0,-0.547248,1.742126,0, 0.335626,-0.735806,-0.588171,-0.221516,1.686349,-0.151403, -0.009814,-0.999952,0,-0.547248,1.742126,0, -0.039092,-0.999236,0,-0.228904,1.734267,0, 0.303379,-0.73119,-0.611002,-0.267035,1.627058,-0.266577, 0.244106,-0.79539,-0.554768,-0.557624,1.641278,-0.271462, 0.235033,-0.721825,-0.650944,-0.559706,1.69418,-0.186107, 0.303379,-0.73119,-0.611002,-0.267035,1.627058,-0.266577, 0.235033,-0.721825,-0.650944,-0.559706,1.69418,-0.186107, 0.335626,-0.735806,-0.588171,-0.221516,1.686349,-0.151403, 0.298349,-0.828641,-0.473647,-0.247999,1.565146,-0.389142, 0.213948,-0.943673,-0.252405,-0.626493,1.585426,-0.443136, 0.244106,-0.79539,-0.554768,-0.557624,1.641278,-0.271462, 0.298349,-0.828641,-0.473647,-0.247999,1.565146,-0.389142, 0.244106,-0.79539,-0.554768,-0.557624,1.641278,-0.271462, 0.303379,-0.73119,-0.611002,-0.267035,1.627058,-0.266577, 0.267279,-0.944479,-0.191107,-0.179548,1.471301,-0.544513, 0.190577,-0.970681,-0.146488,-0.597781,1.48962,-0.641047, 0.213948,-0.943673,-0.252405,-0.626493,1.585426,-0.443136, 0.267279,-0.944479,-0.191107,-0.179548,1.471301,-0.544513, 0.213948,-0.943673,-0.252405,-0.626493,1.585426,-0.443136, 0.298349,-0.828641,-0.473647,-0.247999,1.565146,-0.389142, 0.029207,0.916877,-0.398099,-0.192546,1.305535,-0.70008, 0.048754,0.934073,-0.353738,-0.674657,1.333008,-0.761059, 0.190577,-0.970681,-0.146488,-0.597781,1.48962,-0.641047, 0.029207,0.916877,-0.398099,-0.192546,1.305535,-0.70008, 0.190577,-0.970681,-0.146488,-0.597781,1.48962,-0.641047, 0.267279,-0.944479,-0.191107,-0.179548,1.471301,-0.544513, 0.051939,0.876473,-0.478641,-0.406155,1.005088,-0.971088, 0.081223,0.915345,-0.394394,-0.910602,1.204118,-0.83774, 0.048754,0.934073,-0.353738,-0.674657,1.333008,-0.761059, 0.051939,0.876473,-0.478641,-0.406155,1.005088,-0.971088, 0.048754,0.934073,-0.353738,-0.674657,1.333008,-0.761059, 0.029207,0.916877,-0.398099,-0.192546,1.305535,-0.70008, 0.092427,0.86666,-0.490263,-0.11519,0.458427,-1.346197, 0.120116,0.912706,-0.390565,-0.969076,0.901205,-1.146223, 0.081223,0.915345,-0.394394,-0.910602,1.204118,-0.83774, 0.092427,0.86666,-0.490263,-0.11519,0.458427,-1.346197, 0.081223,0.915345,-0.394394,-0.910602,1.204118,-0.83774, 0.051939,0.876473,-0.478641,-0.406155,1.005088,-0.971088, 0.129186,0.757141,-0.64035,0.005537,0.163519,-1.472265, 0.1717,0.74071,-0.649514,-0.752416,0.438132,-1.467349, 0.120116,0.912706,-0.390565,-0.969076,0.901205,-1.146223, 0.129186,0.757141,-0.64035,0.005537,0.163519,-1.472265, 0.120116,0.912706,-0.390565,-0.969076,0.901205,-1.146223, 0.092427,0.86666,-0.490263,-0.11519,0.458427,-1.346197, 0.101272,0.634315,-0.766413,0.018086,0.002865,-1.523199, 0.167704,0.495674,-0.852164,-0.645496,0.179261,-1.584316, 0.1717,0.74071,-0.649514,-0.752416,0.438132,-1.467349, 0.101272,0.634315,-0.766413,0.018086,0.002865,-1.523199, 0.1717,0.74071,-0.649514,-0.752416,0.438132,-1.467349, 0.129186,0.757141,-0.64035,0.005537,0.163519,-1.472265, 0.089104,0.59547,-0.798421,0.034087,-0.225059,-1.542949, 0.140536,0.558684,-0.817388,-0.536767,-0.144454,-1.682232, 0.167704,0.495674,-0.852164,-0.645496,0.179261,-1.584316, 0.089104,0.59547,-0.798421,0.034087,-0.225059,-1.542949, 0.167704,0.495674,-0.852164,-0.645496,0.179261,-1.584316, 0.101272,0.634315,-0.766413,0.018086,0.002865,-1.523199, 0.147941,0.53134,-0.834141,0.010486,-0.502317,-1.576297, 0.136523,0.621747,-0.771228,-0.533528,-0.58228,-1.701405, 0.140536,0.558684,-0.817388,-0.536767,-0.144454,-1.682232, 0.147941,0.53134,-0.834141,0.010486,-0.502317,-1.576297, 0.140536,0.558684,-0.817388,-0.536767,-0.144454,-1.682232, 0.089104,0.59547,-0.798421,0.034087,-0.225059,-1.542949, 0.206788,0.399922,-0.892917,0.021051,-0.831931,-1.511548, 0.100131,0.509748,-0.854477,-0.505045,-0.913827,-1.645612, 0.136523,0.621747,-0.771228,-0.533528,-0.58228,-1.701405, 0.206788,0.399922,-0.892917,0.021051,-0.831931,-1.511548, 0.136523,0.621747,-0.771228,-0.533528,-0.58228,-1.701405, 0.147941,0.53134,-0.834141,0.010486,-0.502317,-1.576297, 0.246802,0.252523,-0.935586,-0.04157,-1.143825,-1.395176, 0.063174,0.351351,-0.93411,-0.487217,-1.193519,-1.504026, 0.100131,0.509748,-0.854477,-0.505045,-0.913827,-1.645612, 0.246802,0.252523,-0.935586,-0.04157,-1.143825,-1.395176, 0.100131,0.509748,-0.854477,-0.505045,-0.913827,-1.645612, 0.206788,0.399922,-0.892917,0.021051,-0.831931,-1.511548, 0.274567,0.116527,-0.954481,-0.071941,-1.346991,-1.237379, 0.078896,0.195617,-0.977502,-0.524231,-1.399266,-1.313019, 0.063174,0.351351,-0.93411,-0.487217,-1.193519,-1.504026, 0.274567,0.116527,-0.954481,-0.071941,-1.346991,-1.237379, 0.063174,0.351351,-0.93411,-0.487217,-1.193519,-1.504026, 0.246802,0.252523,-0.935586,-0.04157,-1.143825,-1.395176, 0.303729,-0.050718,-0.951408,-0.0723,-1.450245,-1.087397, 0.097816,-0.016117,-0.995074,-0.526127,-1.495,-1.167736, 0.078896,0.195617,-0.977502,-0.524231,-1.399266,-1.313019, 0.303729,-0.050718,-0.951408,-0.0723,-1.450245,-1.087397, 0.078896,0.195617,-0.977502,-0.524231,-1.399266,-1.313019, 0.274567,0.116527,-0.954481,-0.071941,-1.346991,-1.237379, 0.33122,-0.270106,-0.904067,-0.063012,-1.583021,-0.865082, 0.10737,-0.293005,-0.950063,-0.535144,-1.615983,-0.920556, 0.097816,-0.016117,-0.995074,-0.526127,-1.495,-1.167736, 0.33122,-0.270106,-0.904067,-0.063012,-1.583021,-0.865082, 0.097816,-0.016117,-0.995074,-0.526127,-1.495,-1.167736, 0.303729,-0.050718,-0.951408,-0.0723,-1.450245,-1.087397, 0.004725,-0.680391,-0.732834,-0.894132,1.712652,-0.151911, -0.267766,-0.862787,-0.428835,-1.215563,1.757097,-0.133494, -0.065586,-0.997847,0,-1.179474,1.786649,0, 0.004725,-0.680391,-0.732834,-0.894132,1.712652,-0.151911, -0.065586,-0.997847,0,-1.179474,1.786649,0, -0.098179,0.995169,0,-0.866132,1.75467,0, 0.034172,-0.858604,-0.511498,-0.954897,1.677544,-0.293034, -0.263452,-0.648591,-0.714089,-1.227613,1.709095,-0.276029, -0.267766,-0.862787,-0.428835,-1.215563,1.757097,-0.133494, 0.034172,-0.858604,-0.511498,-0.954897,1.677544,-0.293034, -0.267766,-0.862787,-0.428835,-1.215563,1.757097,-0.133494, 0.004725,-0.680391,-0.732834,-0.894132,1.712652,-0.151911, 0.037423,-0.986705,-0.158154,-1.017767,1.607824,-0.541965, -0.301558,-0.77828,-0.550766,-1.292756,1.656509,-0.51403, -0.263452,-0.648591,-0.714089,-1.227613,1.709095,-0.276029, 0.037423,-0.986705,-0.158154,-1.017767,1.607824,-0.541965, -0.263452,-0.648591,-0.714089,-1.227613,1.709095,-0.276029, 0.034172,-0.858604,-0.511498,-0.954897,1.677544,-0.293034, 0.013768,-0.992402,-0.122267,-1.04607,1.509097,-0.76106, -0.154129,-0.981148,-0.116585,-1.338488,1.613735,-0.725441, -0.301558,-0.77828,-0.550766,-1.292756,1.656509,-0.51403, 0.013768,-0.992402,-0.122267,-1.04607,1.509097,-0.76106, -0.301558,-0.77828,-0.550766,-1.292756,1.656509,-0.51403, 0.037423,-0.986705,-0.158154,-1.017767,1.607824,-0.541965, 0.076524,0.950336,-0.301672,-1.115594,1.39238,-0.819623, 0.095331,0.952335,-0.289775,-1.403848,1.533059,-0.902827, -0.154129,-0.981148,-0.116585,-1.338488,1.613735,-0.725441, 0.076524,0.950336,-0.301672,-1.115594,1.39238,-0.819623, -0.154129,-0.981148,-0.116585,-1.338488,1.613735,-0.725441, 0.013768,-0.992402,-0.122267,-1.04607,1.509097,-0.76106, 0.100598,0.942931,-0.317428,-1.278903,1.192051,-0.946843, 0.10291,0.954344,-0.280422,-1.551526,1.400025,-1.050193, 0.095331,0.952335,-0.289775,-1.403848,1.533059,-0.902827, 0.100598,0.942931,-0.317428,-1.278903,1.192051,-0.946843, 0.095331,0.952335,-0.289775,-1.403848,1.533059,-0.902827, 0.076524,0.950336,-0.301672,-1.115594,1.39238,-0.819623, 0.150328,0.92948,-0.336851,-1.200768,0.978822,-1.103391, 0.172251,0.950689,-0.257916,-1.552899,1.128654,-1.15104, 0.10291,0.954344,-0.280422,-1.551526,1.400025,-1.050193, 0.150328,0.92948,-0.336851,-1.200768,0.978822,-1.103391, 0.10291,0.954344,-0.280422,-1.551526,1.400025,-1.050193, 0.100598,0.942931,-0.317428,-1.278903,1.192051,-0.946843, 0.235667,0.756618,-0.60991,-1.147922,0.807955,-1.254191, 0.28101,0.853935,-0.437982,-1.454529,0.875045,-1.238858, 0.172251,0.950689,-0.257916,-1.552899,1.128654,-1.15104, 0.235667,0.756618,-0.60991,-1.147922,0.807955,-1.254191, 0.172251,0.950689,-0.257916,-1.552899,1.128654,-1.15104, 0.150328,0.92948,-0.336851,-1.200768,0.978822,-1.103391, 0.305452,0.425365,-0.851918,-1.120716,0.424016,-1.45699, 0.381239,0.555717,-0.738807,-1.405685,0.573835,-1.352181, 0.28101,0.853935,-0.437982,-1.454529,0.875045,-1.238858, 0.305452,0.425365,-0.851918,-1.120716,0.424016,-1.45699, 0.28101,0.853935,-0.437982,-1.454529,0.875045,-1.238858, 0.235667,0.756618,-0.60991,-1.147922,0.807955,-1.254191, 0.325482,0.443544,-0.835063,-1.077307,0.165008,-1.553393, 0.376012,0.360026,-0.853813,-1.479588,0.295746,-1.440042, 0.381239,0.555717,-0.738807,-1.405685,0.573835,-1.352181, 0.325482,0.443544,-0.835063,-1.077307,0.165008,-1.553393, 0.381239,0.555717,-0.738807,-1.405685,0.573835,-1.352181, 0.305452,0.425365,-0.851918,-1.120716,0.424016,-1.45699, 0.242426,0.58207,-0.77616,-1.053434,-0.342553,-1.690245, 0.207079,0.373404,-0.904261,-1.489699,-0.024215,-1.510987, 0.376012,0.360026,-0.853813,-1.479588,0.295746,-1.440042, 0.242426,0.58207,-0.77616,-1.053434,-0.342553,-1.690245, 0.376012,0.360026,-0.853813,-1.479588,0.295746,-1.440042, 0.325482,0.443544,-0.835063,-1.077307,0.165008,-1.553393, 0.070189,0.510248,-0.857158,-1.077209,-0.869649,-1.633144, -0.045242,0.348413,-0.936249,-1.395501,-0.698702,-1.553257, 0.207079,0.373404,-0.904261,-1.489699,-0.024215,-1.510987, 0.070189,0.510248,-0.857158,-1.077209,-0.869649,-1.633144, 0.207079,0.373404,-0.904261,-1.489699,-0.024215,-1.510987, 0.242426,0.58207,-0.77616,-1.053434,-0.342553,-1.690245, -0.078623,0.370994,-0.925301,-1.061272,-1.141877,-1.49623, -0.212948,0.334057,-0.918182,-1.376176,-0.948757,-1.451608, -0.045242,0.348413,-0.936249,-1.395501,-0.698702,-1.553257, -0.078623,0.370994,-0.925301,-1.061272,-1.141877,-1.49623, -0.045242,0.348413,-0.936249,-1.395501,-0.698702,-1.553257, 0.070189,0.510248,-0.857158,-1.077209,-0.869649,-1.633144, -0.123389,0.256577,-0.958615,-1.001366,-1.335897,-1.353338, -0.282152,0.285245,-0.915983,-1.402349,-1.127845,-1.309055, -0.212948,0.334057,-0.918182,-1.376176,-0.948757,-1.451608, -0.123389,0.256577,-0.958615,-1.001366,-1.335897,-1.353338, -0.212948,0.334057,-0.918182,-1.376176,-0.948757,-1.451608, -0.078623,0.370994,-0.925301,-1.061272,-1.141877,-1.49623, -0.165685,0.059692,-0.98437,-0.952525,-1.440582,-1.16865, -0.326048,0.118611,-0.937883,-1.407658,-1.236026,-1.11293, -0.282152,0.285245,-0.915983,-1.402349,-1.127845,-1.309055, -0.165685,0.059692,-0.98437,-0.952525,-1.440582,-1.16865, -0.282152,0.285245,-0.915983,-1.402349,-1.127845,-1.309055, -0.123389,0.256577,-0.958615,-1.001366,-1.335897,-1.353338, -0.031021,0.098798,-0.994624,1.644178,-0.857872,-1.208494, -0.039079,0.203923,-0.978207,1.640095,-0.674556,-1.246804, 0.097864,0.250653,-0.963118,2.013534,-0.662303,-1.191491, 0.12742,0.021045,-0.991626,1.462507,1.745481,-0.222394, 0.779025,-0.626993,0,1.456656,1.785879,0, -0.720176,-0.693792,0,1.794465,1.787719,0, 0.12742,0.021045,-0.991626,1.462507,1.745481,-0.222394, -0.720176,-0.693792,0,1.794465,1.787719,0, 0.513731,-0.239493,-0.823847,1.807583,1.756546,-0.177627, 0.206882,-0.117024,-0.971342,1.483832,1.697594,-0.288781, 0.12742,0.021045,-0.991626,1.462507,1.745481,-0.222394, 0.513731,-0.239493,-0.823847,1.807583,1.756546,-0.177627, 0.206882,-0.117024,-0.971342,1.483832,1.697594,-0.288781, 0.513731,-0.239493,-0.823847,1.807583,1.756546,-0.177627, 0.506924,-0.406124,-0.760323,1.798719,1.714447,-0.259352, 0.218538,-0.213954,-0.952084,1.497138,1.618935,-0.401108, 0.206882,-0.117024,-0.971342,1.483832,1.697594,-0.288781, 0.506924,-0.406124,-0.760323,1.798719,1.714447,-0.259352, 0.218538,-0.213954,-0.952084,1.497138,1.618935,-0.401108, 0.506924,-0.406124,-0.760323,1.798719,1.714447,-0.259352, 0.552632,-0.484765,-0.677938,1.821946,1.618209,-0.403751, 0.304965,-0.136677,-0.942505,1.504951,1.483493,-0.585976, 0.218538,-0.213954,-0.952084,1.497138,1.618935,-0.401108, 0.552632,-0.484765,-0.677938,1.821946,1.618209,-0.403751, 0.304965,-0.136677,-0.942505,1.504951,1.483493,-0.585976, 0.552632,-0.484765,-0.677938,1.821946,1.618209,-0.403751, 0.696414,-0.392791,-0.600602,1.859443,1.450393,-0.632222, -0.061264,0.921927,-0.382487,1.517126,1.334367,-0.741076, 0.304965,-0.136677,-0.942505,1.504951,1.483493,-0.585976, 0.696414,-0.392791,-0.600602,1.859443,1.450393,-0.632222, -0.061264,0.921927,-0.382487,1.517126,1.334367,-0.741076, 0.696414,-0.392791,-0.600602,1.859443,1.450393,-0.632222, 0.026499,0.942993,-0.331757,1.958254,1.130271,-0.861813, -0.070642,0.834207,-0.546908,1.570685,0.938327,-0.989108, -0.061264,0.921927,-0.382487,1.517126,1.334367,-0.741076, 0.026499,0.942993,-0.331757,1.958254,1.130271,-0.861813, -0.070642,0.834207,-0.546908,1.570685,0.938327,-0.989108, 0.026499,0.942993,-0.331757,1.958254,1.130271,-0.861813, 0.019336,0.837694,-0.545798,1.975941,0.827957,-1.018423, -0.055544,0.828008,-0.557959,1.582203,0.771083,-1.06818, -0.070642,0.834207,-0.546908,1.570685,0.938327,-0.989108, 0.019336,0.837694,-0.545798,1.975941,0.827957,-1.018423, -0.047373,0.758242,-0.65025,1.63008,0.420236,-1.172369, -0.055544,0.828008,-0.557959,1.582203,0.771083,-1.06818, 0.019336,0.837694,-0.545798,1.975941,0.827957,-1.018423, -0.047373,0.758242,-0.65025,1.63008,0.420236,-1.172369, 0.019336,0.837694,-0.545798,1.975941,0.827957,-1.018423, 0.052979,0.780732,-0.622616,2.023441,0.529338,-1.144399, -0.046579,0.627301,-0.777383,1.649027,0.224458,-1.211969, -0.047373,0.758242,-0.65025,1.63008,0.420236,-1.172369, 0.052979,0.780732,-0.622616,2.023441,0.529338,-1.144399, -0.046579,0.627301,-0.777383,1.649027,0.224458,-1.211969, 0.052979,0.780732,-0.622616,2.023441,0.529338,-1.144399, 0.115383,0.694944,-0.709746,2.0817,0.283249,-1.259461, -0.05128,0.509983,-0.858655,1.660355,0.019397,-1.246002, -0.046579,0.627301,-0.777383,1.649027,0.224458,-1.211969, 0.115383,0.694944,-0.709746,2.0817,0.283249,-1.259461, -0.05128,0.509983,-0.858655,1.660355,0.019397,-1.246002, 0.115383,0.694944,-0.709746,2.0817,0.283249,-1.259461, 0.146937,0.551946,-0.820832,2.14179,-0.055306,-1.295565, -0.02226,0.394285,-0.918719,1.664159,-0.189659,-1.266729, -0.05128,0.509983,-0.858655,1.660355,0.019397,-1.246002, 0.146937,0.551946,-0.820832,2.14179,-0.055306,-1.295565, -0.02226,0.394285,-0.918719,1.664159,-0.189659,-1.266729, 0.146937,0.551946,-0.820832,2.14179,-0.055306,-1.295565, 0.12555,0.440005,-0.889176,2.136269,-0.187666,-1.278057, -0.026262,0.311275,-0.949957,1.678622,-0.410061,-1.291177, -0.02226,0.394285,-0.918719,1.664159,-0.189659,-1.266729, 0.12555,0.440005,-0.889176,2.136269,-0.187666,-1.278057, -0.026262,0.311275,-0.949957,1.678622,-0.410061,-1.291177, 0.12555,0.440005,-0.889176,2.136269,-0.187666,-1.278057, 0.10998,0.376752,-0.919762,2.108912,-0.357128,-1.259691, -0.039079,0.203923,-0.978207,1.640095,-0.674556,-1.246804, -0.026262,0.311275,-0.949957,1.678622,-0.410061,-1.291177, 0.10998,0.376752,-0.919762,2.108912,-0.357128,-1.259691, -0.039079,0.203923,-0.978207,1.640095,-0.674556,-1.246804, 0.10998,0.376752,-0.919762,2.108912,-0.357128,-1.259691, 0.097864,0.250653,-0.963118,2.013534,-0.662303,-1.191491, -0.742985,0.015712,-0.669123,2.222082,-0.957342,-1.014137, -0.809154,0.004832,-0.587577,2.158585,-0.955809,-1.113647, -0.965506,-0.176768,0.191185,2.058189,-0.931238,-1.163518, -0.742985,0.015712,-0.669123,2.222082,-0.957342,-1.014137, -0.965506,-0.176768,0.191185,2.058189,-0.931238,-1.163518, 0.097864,0.250653,-0.963118,2.013534,-0.662303,-1.191491, 0.561574,-0.148323,-0.814024,2.245624,-0.864372,-0.995778, -0.742985,0.015712,-0.669123,2.222082,-0.957342,-1.014137, 0.097864,0.250653,-0.963118,2.013534,-0.662303,-1.191491, 0.859237,-0.17312,-0.481395,1.635139,-0.965221,-1.184968, -0.031021,0.098798,-0.994624,1.644178,-0.857872,-1.208494, 0.097864,0.250653,-0.963118,2.013534,-0.662303,-1.191491, -0.942755,-0.29871,0.148273,1.867657,-0.920633,-1.206933, 0.859237,-0.17312,-0.481395,1.635139,-0.965221,-1.184968, 0.097864,0.250653,-0.963118,2.013534,-0.662303,-1.191491, -0.965506,-0.176768,0.191185,2.058189,-0.931238,-1.163518, -0.942755,-0.29871,0.148273,1.867657,-0.920633,-1.206933, 0.097864,0.250653,-0.963118,2.013534,-0.662303,-1.191491, -0.560667,-0.828041,0,1.604939,-1.556997,0, -0.217942,-0.897186,0.384134,1.721211,-1.590185,-0.601932, -0.084936,-0.226589,0.97028,1.963153,-1.588839,-0.612861, -0.560667,-0.828041,0,1.604939,-1.556997,0, -0.084936,-0.226589,0.97028,1.963153,-1.588839,-0.612861, -0.034649,0.9994,0,1.920432,-1.567396,0, -0.148631,-0.373855,-0.915501,1.210555,-1.460061,-0.576841, -0.305786,-0.232288,-0.923329,1.19204,-1.330605,-0.678707, 0.080262,-0.270606,-0.959339,1.328862,-1.352627,-0.758733, -0.148631,-0.373855,-0.915501,1.210555,-1.460061,-0.576841, 0.080262,-0.270606,-0.959339,1.328862,-1.352627,-0.758733, -0.794709,-0.185222,0.578041,1.451825,-1.576856,-0.702758, -0.185127,-0.491394,-0.851035,1.223415,-1.532658,-0.434522, -0.148631,-0.373855,-0.915501,1.210555,-1.460061,-0.576841, -0.794709,-0.185222,0.578041,1.451825,-1.576856,-0.702758, -0.185127,-0.491394,-0.851035,1.223415,-1.532658,-0.434522, -0.794709,-0.185222,0.578041,1.451825,-1.576856,-0.702758, -0.493424,-0.165611,0.853877,1.599889,-1.595526,-0.623185, -0.084936,-0.226589,0.97028,1.963153,-1.588839,-0.612861, 0.552828,-0.750794,-0.36151,2.0482,-1.581983,-0.555832, -0.034649,0.9994,0,1.920432,-1.567396,0, -0.560667,-0.828041,0,1.604939,-1.556997,0, 0.770209,-0.637792,0,1.289448,-1.546597,0, -0.185127,-0.491394,-0.851035,1.223415,-1.532658,-0.434522, -0.560667,-0.828041,0,1.604939,-1.556997,0, -0.185127,-0.491394,-0.851035,1.223415,-1.532658,-0.434522, -0.493424,-0.165611,0.853877,1.599889,-1.595526,-0.623185, -0.560667,-0.828041,0,1.604939,-1.556997,0, -0.493424,-0.165611,0.853877,1.599889,-1.595526,-0.623185, -0.217942,-0.897186,0.384134,1.721211,-1.590185,-0.601932, -0.305786,-0.232288,-0.923329,1.19204,-1.330605,-0.678707, 0.102263,-0.969566,-0.222452,1.219163,-1.218342,-0.823029, 0.02992,-0.202031,-0.978922,1.348219,-1.282064,-0.845204, -0.305786,-0.232288,-0.923329,1.19204,-1.330605,-0.678707, 0.02992,-0.202031,-0.978922,1.348219,-1.282064,-0.845204, 0.080262,-0.270606,-0.959339,1.328862,-1.352627,-0.758733, 0.152876,-0.742504,-0.652163,1.252961,-0.928825,-1.001643, 0.184661,-0.694307,-0.695585,1.373216,-0.56462,-1.106245, 0.045651,-0.004499,-0.998947,1.337875,-0.945716,-1.021299, 0.120054,-0.825719,-0.551157,1.230116,-1.085439,-0.894543, 0.152876,-0.742504,-0.652163,1.252961,-0.928825,-1.001643, 0.045651,-0.004499,-0.998947,1.337875,-0.945716,-1.021299, 0.120054,-0.825719,-0.551157,1.230116,-1.085439,-0.894543, 0.045651,-0.004499,-0.998947,1.337875,-0.945716,-1.021299, 0.023392,-0.110333,-0.993619,1.310865,-1.136322,-0.914838, 0.102263,-0.969566,-0.222452,1.219163,-1.218342,-0.823029, 0.120054,-0.825719,-0.551157,1.230116,-1.085439,-0.894543, 0.023392,-0.110333,-0.993619,1.310865,-1.136322,-0.914838, 0.102263,-0.969566,-0.222452,1.219163,-1.218342,-0.823029, 0.023392,-0.110333,-0.993619,1.310865,-1.136322,-0.914838, 0.02992,-0.202031,-0.978922,1.348219,-1.282064,-0.845204, -0.031021,0.098798,-0.994624,1.644178,-0.857872,-1.208494, 0.859237,-0.17312,-0.481395,1.635139,-0.965221,-1.184968, 0.714393,-0.109998,-0.691045,1.536037,-0.985876,-1.185597, -0.039079,0.203923,-0.978207,1.640095,-0.674556,-1.246804, -0.031021,0.098798,-0.994624,1.644178,-0.857872,-1.208494, 0.714393,-0.109998,-0.691045,1.536037,-0.985876,-1.185597, -0.039079,0.203923,-0.978207,1.640095,-0.674556,-1.246804, 0.714393,-0.109998,-0.691045,1.536037,-0.985876,-1.185597, 0.419396,-0.035927,-0.907092,1.428883,-0.98669,-1.133905, 0.184661,-0.694307,-0.695585,1.373216,-0.56462,-1.106245, -0.026262,0.311275,-0.949957,1.678622,-0.410061,-1.291177, -0.039079,0.203923,-0.978207,1.640095,-0.674556,-1.246804, 0.184661,-0.694307,-0.695585,1.373216,-0.56462,-1.106245, -0.039079,0.203923,-0.978207,1.640095,-0.674556,-1.246804, 0.419396,-0.035927,-0.907092,1.428883,-0.98669,-1.133905, 0.779025,-0.626993,0,1.456656,1.785879,0, 0.12742,0.021045,-0.991626,1.462507,1.745481,-0.222394, 0.981421,-0.191868,0,0.733818,1.740873,0, -0.185127,-0.491394,-0.851035,1.223415,-1.532658,-0.434522, 0.770209,-0.637792,0,1.289448,-1.546597,0, 0.92802,-0.37253,0,0.927497,-1.558489,0, -0.185127,-0.491394,-0.851035,1.223415,-1.532658,-0.434522, 0.92802,-0.37253,0,0.927497,-1.558489,0, 0.213167,-0.525559,-0.823619,0.912989,-1.499314,-0.419547, -0.148631,-0.373855,-0.915501,1.210555,-1.460061,-0.576841, -0.185127,-0.491394,-0.851035,1.223415,-1.532658,-0.434522, 0.213167,-0.525559,-0.823619,0.912989,-1.499314,-0.419547, -0.148631,-0.373855,-0.915501,1.210555,-1.460061,-0.576841, 0.213167,-0.525559,-0.823619,0.912989,-1.499314,-0.419547, 0.23972,-0.400363,-0.884445,0.912699,-1.455066,-0.576185, -0.305786,-0.232288,-0.923329,1.19204,-1.330605,-0.678707, -0.148631,-0.373855,-0.915501,1.210555,-1.460061,-0.576841, 0.23972,-0.400363,-0.884445,0.912699,-1.455066,-0.576185, -0.305786,-0.232288,-0.923329,1.19204,-1.330605,-0.678707, 0.23972,-0.400363,-0.884445,0.912699,-1.455066,-0.576185, 0.25339,-0.287519,-0.923648,0.922703,-1.296032,-0.728307, 0.102263,-0.969566,-0.222452,1.219163,-1.218342,-0.823029, -0.305786,-0.232288,-0.923329,1.19204,-1.330605,-0.678707, 0.25339,-0.287519,-0.923648,0.922703,-1.296032,-0.728307, 0.102263,-0.969566,-0.222452,1.219163,-1.218342,-0.823029, 0.25339,-0.287519,-0.923648,0.922703,-1.296032,-0.728307, 0.187438,-0.340915,-0.921219,0.93066,-1.216516,-0.831196, 0.120054,-0.825719,-0.551157,1.230116,-1.085439,-0.894543, 0.102263,-0.969566,-0.222452,1.219163,-1.218342,-0.823029, 0.187438,-0.340915,-0.921219,0.93066,-1.216516,-0.831196, 0.120054,-0.825719,-0.551157,1.230116,-1.085439,-0.894543, 0.187438,-0.340915,-0.921219,0.93066,-1.216516,-0.831196, 0.114032,-0.218132,-0.969234,0.956456,-1.070504,-0.921063, 0.152876,-0.742504,-0.652163,1.252961,-0.928825,-1.001643, 0.120054,-0.825719,-0.551157,1.230116,-1.085439,-0.894543, 0.114032,-0.218132,-0.969234,0.956456,-1.070504,-0.921063, 0.152876,-0.742504,-0.652163,1.252961,-0.928825,-1.001643, 0.114032,-0.218132,-0.969234,0.956456,-1.070504,-0.921063, 0.10833,0.05569,-0.992554,0.939974,-0.894739,-1.019809, 0.184661,-0.694307,-0.695585,1.373216,-0.56462,-1.106245, 0.152876,-0.742504,-0.652163,1.252961,-0.928825,-1.001643, 0.10833,0.05569,-0.992554,0.939974,-0.894739,-1.019809, 0.184661,-0.694307,-0.695585,1.373216,-0.56462,-1.106245, 0.10833,0.05569,-0.992554,0.939974,-0.894739,-1.019809, 0.107989,0.168108,-0.979836,0.948819,-0.638568,-1.102958, 0.184661,-0.694307,-0.695585,1.373216,-0.56462,-1.106245, 0.107989,0.168108,-0.979836,0.948819,-0.638568,-1.102958, 0.088722,0.251367,-0.963817,0.97453,-0.525273,-1.140353, -0.026262,0.311275,-0.949957,1.678622,-0.410061,-1.291177, 0.184661,-0.694307,-0.695585,1.373216,-0.56462,-1.106245, 0.088722,0.251367,-0.963817,0.97453,-0.525273,-1.140353, -0.026262,0.311275,-0.949957,1.678622,-0.410061,-1.291177, 0.088722,0.251367,-0.963817,0.97453,-0.525273,-1.140353, 0.060533,0.377837,-0.923891,0.960321,-0.308052,-1.243133, -0.02226,0.394285,-0.918719,1.664159,-0.189659,-1.266729, -0.026262,0.311275,-0.949957,1.678622,-0.410061,-1.291177, 0.060533,0.377837,-0.923891,0.960321,-0.308052,-1.243133, -0.02226,0.394285,-0.918719,1.664159,-0.189659,-1.266729, 0.060533,0.377837,-0.923891,0.960321,-0.308052,-1.243133, 0.016737,0.497476,-0.867316,0.943855,-0.101127,-1.274771, -0.05128,0.509983,-0.858655,1.660355,0.019397,-1.246002, -0.02226,0.394285,-0.918719,1.664159,-0.189659,-1.266729, 0.016737,0.497476,-0.867316,0.943855,-0.101127,-1.274771, -0.05128,0.509983,-0.858655,1.660355,0.019397,-1.246002, 0.016737,0.497476,-0.867316,0.943855,-0.101127,-1.274771, -0.024013,0.58573,-0.810151,0.950215,0.042751,-1.256188, -0.046579,0.627301,-0.777383,1.649027,0.224458,-1.211969, -0.05128,0.509983,-0.858655,1.660355,0.019397,-1.246002, -0.024013,0.58573,-0.810151,0.950215,0.042751,-1.256188, -0.046579,0.627301,-0.777383,1.649027,0.224458,-1.211969, -0.024013,0.58573,-0.810151,0.950215,0.042751,-1.256188, -0.057955,0.638634,-0.767325,0.927775,0.195225,-1.233043, -0.047373,0.758242,-0.65025,1.63008,0.420236,-1.172369, -0.046579,0.627301,-0.777383,1.649027,0.224458,-1.211969, -0.057955,0.638634,-0.767325,0.927775,0.195225,-1.233043, -0.047373,0.758242,-0.65025,1.63008,0.420236,-1.172369, -0.057955,0.638634,-0.767325,0.927775,0.195225,-1.233043, -0.069142,0.724976,-0.685295,0.939271,0.379986,-1.185872, -0.055544,0.828008,-0.557959,1.582203,0.771083,-1.06818, -0.047373,0.758242,-0.65025,1.63008,0.420236,-1.172369, -0.069142,0.724976,-0.685295,0.939271,0.379986,-1.185872, -0.055544,0.828008,-0.557959,1.582203,0.771083,-1.06818, -0.069142,0.724976,-0.685295,0.939271,0.379986,-1.185872, -0.06371,0.842533,-0.534864,0.921312,0.755659,-0.99933, -0.070642,0.834207,-0.546908,1.570685,0.938327,-0.989108, -0.055544,0.828008,-0.557959,1.582203,0.771083,-1.06818, -0.06371,0.842533,-0.534864,0.921312,0.755659,-0.99933, -0.070642,0.834207,-0.546908,1.570685,0.938327,-0.989108, -0.06371,0.842533,-0.534864,0.921312,0.755659,-0.99933, 0.791391,-0.43807,-0.426373,0.857323,0.985001,-0.874029, -0.070642,0.834207,-0.546908,1.570685,0.938327,-0.989108, 0.791391,-0.43807,-0.426373,0.857323,0.985001,-0.874029, 0.623235,-0.257987,-0.738255,0.760722,1.205036,-0.700545, -0.061264,0.921927,-0.382487,1.517126,1.334367,-0.741076, -0.070642,0.834207,-0.546908,1.570685,0.938327,-0.989108, 0.623235,-0.257987,-0.738255,0.760722,1.205036,-0.700545, -0.061264,0.921927,-0.382487,1.517126,1.334367,-0.741076, 0.623235,-0.257987,-0.738255,0.760722,1.205036,-0.700545, 0.631747,-0.24686,-0.734817,0.725959,1.478055,-0.461804, 0.304965,-0.136677,-0.942505,1.504951,1.483493,-0.585976, -0.061264,0.921927,-0.382487,1.517126,1.334367,-0.741076, 0.631747,-0.24686,-0.734817,0.725959,1.478055,-0.461804, 0.304965,-0.136677,-0.942505,1.504951,1.483493,-0.585976, 0.631747,-0.24686,-0.734817,0.725959,1.478055,-0.461804, 0.659349,-0.248914,-0.709437,0.737904,1.604213,-0.281713, 0.218538,-0.213954,-0.952084,1.497138,1.618935,-0.401108, 0.304965,-0.136677,-0.942505,1.504951,1.483493,-0.585976, 0.659349,-0.248914,-0.709437,0.737904,1.604213,-0.281713, 0.206882,-0.117024,-0.971342,1.483832,1.697594,-0.288781, 0.218538,-0.213954,-0.952084,1.497138,1.618935,-0.401108, 0.659349,-0.248914,-0.709437,0.737904,1.604213,-0.281713, 0.206882,-0.117024,-0.971342,1.483832,1.697594,-0.288781, 0.659349,-0.248914,-0.709437,0.737904,1.604213,-0.281713, 0.981421,-0.191868,0,0.733818,1.740873,0, 0.12742,0.021045,-0.991626,1.462507,1.745481,-0.222394, 0.206882,-0.117024,-0.971342,1.483832,1.697594,-0.288781, 0.981421,-0.191868,0,0.733818,1.740873,0, -0.208715,-0.624734,-0.752427,0.223642,1.684075,-0.160743, 0.335626,-0.735806,-0.588171,-0.221516,1.686349,-0.151403, -0.039092,-0.999236,0,-0.228904,1.734267,0, -0.208715,-0.624734,-0.752427,0.223642,1.684075,-0.160743, -0.039092,-0.999236,0,-0.228904,1.734267,0, 0.566114,-0.824327,0,0.234527,1.730117,0, -0.251063,-0.683027,-0.685888,0.23733,1.595746,-0.288672, 0.303379,-0.73119,-0.611002,-0.267035,1.627058,-0.266577, 0.335626,-0.735806,-0.588171,-0.221516,1.686349,-0.151403, -0.251063,-0.683027,-0.685888,0.23733,1.595746,-0.288672, 0.335626,-0.735806,-0.588171,-0.221516,1.686349,-0.151403, -0.208715,-0.624734,-0.752427,0.223642,1.684075,-0.160743, -0.252973,-0.819125,-0.51482,0.289039,1.496446,-0.430055, 0.298349,-0.828641,-0.473647,-0.247999,1.565146,-0.389142, 0.303379,-0.73119,-0.611002,-0.267035,1.627058,-0.266577, -0.252973,-0.819125,-0.51482,0.289039,1.496446,-0.430055, 0.303379,-0.73119,-0.611002,-0.267035,1.627058,-0.266577, -0.251063,-0.683027,-0.685888,0.23733,1.595746,-0.288672, -0.13716,-0.98063,-0.139827,0.305671,1.298417,-0.629719, 0.267279,-0.944479,-0.191107,-0.179548,1.471301,-0.544513, 0.298349,-0.828641,-0.473647,-0.247999,1.565146,-0.389142, -0.13716,-0.98063,-0.139827,0.305671,1.298417,-0.629719, 0.298349,-0.828641,-0.473647,-0.247999,1.565146,-0.389142, -0.252973,-0.819125,-0.51482,0.289039,1.496446,-0.430055, 0.007127,0.896038,-0.44392,0.243473,1.134082,-0.819993, 0.029207,0.916877,-0.398099,-0.192546,1.305535,-0.70008, 0.267279,-0.944479,-0.191107,-0.179548,1.471301,-0.544513, 0.007127,0.896038,-0.44392,0.243473,1.134082,-0.819993, 0.267279,-0.944479,-0.191107,-0.179548,1.471301,-0.544513, -0.13716,-0.98063,-0.139827,0.305671,1.298417,-0.629719, 0.009434,0.815301,-0.578961,0.316341,0.785311,-1.08626, 0.051939,0.876473,-0.478641,-0.406155,1.005088,-0.971088, 0.029207,0.916877,-0.398099,-0.192546,1.305535,-0.70008, 0.009434,0.815301,-0.578961,0.316341,0.785311,-1.08626, 0.029207,0.916877,-0.398099,-0.192546,1.305535,-0.70008, 0.007127,0.896038,-0.44392,0.243473,1.134082,-0.819993, 0.040473,0.760778,-0.647749,0.539252,0.353984,-1.254493, 0.092427,0.86666,-0.490263,-0.11519,0.458427,-1.346197, 0.051939,0.876473,-0.478641,-0.406155,1.005088,-0.971088, 0.040473,0.760778,-0.647749,0.539252,0.353984,-1.254493, 0.051939,0.876473,-0.478641,-0.406155,1.005088,-0.971088, 0.009434,0.815301,-0.578961,0.316341,0.785311,-1.08626, 0.080812,0.697931,-0.711591,0.53915,0.148262,-1.321014, 0.129186,0.757141,-0.64035,0.005537,0.163519,-1.472265, 0.092427,0.86666,-0.490263,-0.11519,0.458427,-1.346197, 0.080812,0.697931,-0.711591,0.53915,0.148262,-1.321014, 0.092427,0.86666,-0.490263,-0.11519,0.458427,-1.346197, 0.040473,0.760778,-0.647749,0.539252,0.353984,-1.254493, 0.09853,0.626571,-0.773111,0.516872,-0.020713,-1.356627, 0.101272,0.634315,-0.766413,0.018086,0.002865,-1.523199, 0.129186,0.757141,-0.64035,0.005537,0.163519,-1.472265, 0.09853,0.626571,-0.773111,0.516872,-0.020713,-1.356627, 0.129186,0.757141,-0.64035,0.005537,0.163519,-1.472265, 0.080812,0.697931,-0.711591,0.53915,0.148262,-1.321014, 0.111825,0.518485,-0.847743,0.542386,-0.188227,-1.370375, 0.089104,0.59547,-0.798421,0.034087,-0.225059,-1.542949, 0.101272,0.634315,-0.766413,0.018086,0.002865,-1.523199, 0.111825,0.518485,-0.847743,0.542386,-0.188227,-1.370375, 0.101272,0.634315,-0.766413,0.018086,0.002865,-1.523199, 0.09853,0.626571,-0.773111,0.516872,-0.020713,-1.356627, 0.163727,0.387435,-0.907242,0.546875,-0.39094,-1.363244, 0.147941,0.53134,-0.834141,0.010486,-0.502317,-1.576297, 0.089104,0.59547,-0.798421,0.034087,-0.225059,-1.542949, 0.163727,0.387435,-0.907242,0.546875,-0.39094,-1.363244, 0.089104,0.59547,-0.798421,0.034087,-0.225059,-1.542949, 0.111825,0.518485,-0.847743,0.542386,-0.188227,-1.370375, 0.227108,0.258715,-0.938876,0.550658,-0.633015,-1.331311, 0.206788,0.399922,-0.892917,0.021051,-0.831931,-1.511548, 0.147941,0.53134,-0.834141,0.010486,-0.502317,-1.576297, 0.227108,0.258715,-0.938876,0.550658,-0.633015,-1.331311, 0.147941,0.53134,-0.834141,0.010486,-0.502317,-1.576297, 0.163727,0.387435,-0.907242,0.546875,-0.39094,-1.363244, 0.263434,0.119819,-0.957207,0.527724,-0.862854,-1.253811, 0.246802,0.252523,-0.935586,-0.04157,-1.143825,-1.395176, 0.206788,0.399922,-0.892917,0.021051,-0.831931,-1.511548, 0.263434,0.119819,-0.957207,0.527724,-0.862854,-1.253811, 0.206788,0.399922,-0.892917,0.021051,-0.831931,-1.511548, 0.227108,0.258715,-0.938876,0.550658,-0.633015,-1.331311, 0.304293,-0.024391,-0.952266,0.544825,-1.133123,-1.096902, 0.274567,0.116527,-0.954481,-0.071941,-1.346991,-1.237379, 0.246802,0.252523,-0.935586,-0.04157,-1.143825,-1.395176, 0.304293,-0.024391,-0.952266,0.544825,-1.133123,-1.096902, 0.246802,0.252523,-0.935586,-0.04157,-1.143825,-1.395176, 0.263434,0.119819,-0.957207,0.527724,-0.862854,-1.253811, 0.372063,-0.134052,-0.918477,0.530629,-1.316423,-0.929842, 0.303729,-0.050718,-0.951408,-0.0723,-1.450245,-1.087397, 0.274567,0.116527,-0.954481,-0.071941,-1.346991,-1.237379, 0.372063,-0.134052,-0.918477,0.530629,-1.316423,-0.929842, 0.274567,0.116527,-0.954481,-0.071941,-1.346991,-1.237379, 0.304293,-0.024391,-0.952266,0.544825,-1.133123,-1.096902, 0.424286,-0.254348,-0.869073,0.538756,-1.408602,-0.764911, 0.33122,-0.270106,-0.904067,-0.063012,-1.583021,-0.865082, 0.303729,-0.050718,-0.951408,-0.0723,-1.450245,-1.087397, 0.424286,-0.254348,-0.869073,0.538756,-1.408602,-0.764911, 0.303729,-0.050718,-0.951408,-0.0723,-1.450245,-1.087397, 0.372063,-0.134052,-0.918477,0.530629,-1.316423,-0.929842, 0.420794,-0.405156,-0.811653,0.489819,-1.524947,-0.672392, 0.327725,-0.489439,-0.808112,-0.07847,-1.688266,-0.80023, 0.33122,-0.270106,-0.904067,-0.063012,-1.583021,-0.865082, 0.420794,-0.405156,-0.811653,0.489819,-1.524947,-0.672392, 0.33122,-0.270106,-0.904067,-0.063012,-1.583021,-0.865082, 0.424286,-0.254348,-0.869073,0.538756,-1.408602,-0.764911, 0.420794,-0.405156,-0.811653,0.489819,-1.524947,-0.672392, 0.291858,-0.681117,-0.67149,-0.094135,-1.769086,-0.556924, 0.327725,-0.489439,-0.808112,-0.07847,-1.688266,-0.80023, 0.235033,-0.721825,-0.650944,-0.559706,1.69418,-0.186107, 0.004725,-0.680391,-0.732834,-0.894132,1.712652,-0.151911, -0.098179,0.995169,0,-0.866132,1.75467,0, 0.235033,-0.721825,-0.650944,-0.559706,1.69418,-0.186107, -0.098179,0.995169,0,-0.866132,1.75467,0, -0.009814,-0.999952,0,-0.547248,1.742126,0, 0.244106,-0.79539,-0.554768,-0.557624,1.641278,-0.271462, 0.034172,-0.858604,-0.511498,-0.954897,1.677544,-0.293034, 0.004725,-0.680391,-0.732834,-0.894132,1.712652,-0.151911, 0.244106,-0.79539,-0.554768,-0.557624,1.641278,-0.271462, 0.004725,-0.680391,-0.732834,-0.894132,1.712652,-0.151911, 0.235033,-0.721825,-0.650944,-0.559706,1.69418,-0.186107, 0.213948,-0.943673,-0.252405,-0.626493,1.585426,-0.443136, 0.037423,-0.986705,-0.158154,-1.017767,1.607824,-0.541965, 0.034172,-0.858604,-0.511498,-0.954897,1.677544,-0.293034, 0.213948,-0.943673,-0.252405,-0.626493,1.585426,-0.443136, 0.034172,-0.858604,-0.511498,-0.954897,1.677544,-0.293034, 0.244106,-0.79539,-0.554768,-0.557624,1.641278,-0.271462, 0.190577,-0.970681,-0.146488,-0.597781,1.48962,-0.641047, 0.013768,-0.992402,-0.122267,-1.04607,1.509097,-0.76106, 0.037423,-0.986705,-0.158154,-1.017767,1.607824,-0.541965, 0.190577,-0.970681,-0.146488,-0.597781,1.48962,-0.641047, 0.037423,-0.986705,-0.158154,-1.017767,1.607824,-0.541965, 0.213948,-0.943673,-0.252405,-0.626493,1.585426,-0.443136, 0.048754,0.934073,-0.353738,-0.674657,1.333008,-0.761059, 0.076524,0.950336,-0.301672,-1.115594,1.39238,-0.819623, 0.013768,-0.992402,-0.122267,-1.04607,1.509097,-0.76106, 0.048754,0.934073,-0.353738,-0.674657,1.333008,-0.761059, 0.013768,-0.992402,-0.122267,-1.04607,1.509097,-0.76106, 0.190577,-0.970681,-0.146488,-0.597781,1.48962,-0.641047, 0.081223,0.915345,-0.394394,-0.910602,1.204118,-0.83774, 0.100598,0.942931,-0.317428,-1.278903,1.192051,-0.946843, 0.076524,0.950336,-0.301672,-1.115594,1.39238,-0.819623, 0.081223,0.915345,-0.394394,-0.910602,1.204118,-0.83774, 0.076524,0.950336,-0.301672,-1.115594,1.39238,-0.819623, 0.048754,0.934073,-0.353738,-0.674657,1.333008,-0.761059, 0.120116,0.912706,-0.390565,-0.969076,0.901205,-1.146223, 0.150328,0.92948,-0.336851,-1.200768,0.978822,-1.103391, 0.100598,0.942931,-0.317428,-1.278903,1.192051,-0.946843, 0.120116,0.912706,-0.390565,-0.969076,0.901205,-1.146223, 0.100598,0.942931,-0.317428,-1.278903,1.192051,-0.946843, 0.081223,0.915345,-0.394394,-0.910602,1.204118,-0.83774, 0.1717,0.74071,-0.649514,-0.752416,0.438132,-1.467349, 0.235667,0.756618,-0.60991,-1.147922,0.807955,-1.254191, 0.150328,0.92948,-0.336851,-1.200768,0.978822,-1.103391, 0.1717,0.74071,-0.649514,-0.752416,0.438132,-1.467349, 0.150328,0.92948,-0.336851,-1.200768,0.978822,-1.103391, 0.120116,0.912706,-0.390565,-0.969076,0.901205,-1.146223, 0.167704,0.495674,-0.852164,-0.645496,0.179261,-1.584316, 0.305452,0.425365,-0.851918,-1.120716,0.424016,-1.45699, 0.235667,0.756618,-0.60991,-1.147922,0.807955,-1.254191, 0.167704,0.495674,-0.852164,-0.645496,0.179261,-1.584316, 0.235667,0.756618,-0.60991,-1.147922,0.807955,-1.254191, 0.1717,0.74071,-0.649514,-0.752416,0.438132,-1.467349, 0.140536,0.558684,-0.817388,-0.536767,-0.144454,-1.682232, 0.325482,0.443544,-0.835063,-1.077307,0.165008,-1.553393, 0.305452,0.425365,-0.851918,-1.120716,0.424016,-1.45699, 0.140536,0.558684,-0.817388,-0.536767,-0.144454,-1.682232, 0.305452,0.425365,-0.851918,-1.120716,0.424016,-1.45699, 0.167704,0.495674,-0.852164,-0.645496,0.179261,-1.584316, 0.136523,0.621747,-0.771228,-0.533528,-0.58228,-1.701405, 0.242426,0.58207,-0.77616,-1.053434,-0.342553,-1.690245, 0.325482,0.443544,-0.835063,-1.077307,0.165008,-1.553393, 0.136523,0.621747,-0.771228,-0.533528,-0.58228,-1.701405, 0.325482,0.443544,-0.835063,-1.077307,0.165008,-1.553393, 0.140536,0.558684,-0.817388,-0.536767,-0.144454,-1.682232, 0.100131,0.509748,-0.854477,-0.505045,-0.913827,-1.645612, 0.070189,0.510248,-0.857158,-1.077209,-0.869649,-1.633144, 0.242426,0.58207,-0.77616,-1.053434,-0.342553,-1.690245, 0.100131,0.509748,-0.854477,-0.505045,-0.913827,-1.645612, 0.242426,0.58207,-0.77616,-1.053434,-0.342553,-1.690245, 0.136523,0.621747,-0.771228,-0.533528,-0.58228,-1.701405, 0.063174,0.351351,-0.93411,-0.487217,-1.193519,-1.504026, -0.078623,0.370994,-0.925301,-1.061272,-1.141877,-1.49623, 0.070189,0.510248,-0.857158,-1.077209,-0.869649,-1.633144, 0.063174,0.351351,-0.93411,-0.487217,-1.193519,-1.504026, 0.070189,0.510248,-0.857158,-1.077209,-0.869649,-1.633144, 0.100131,0.509748,-0.854477,-0.505045,-0.913827,-1.645612, 0.078896,0.195617,-0.977502,-0.524231,-1.399266,-1.313019, -0.123389,0.256577,-0.958615,-1.001366,-1.335897,-1.353338, -0.078623,0.370994,-0.925301,-1.061272,-1.141877,-1.49623, 0.078896,0.195617,-0.977502,-0.524231,-1.399266,-1.313019, -0.078623,0.370994,-0.925301,-1.061272,-1.141877,-1.49623, 0.063174,0.351351,-0.93411,-0.487217,-1.193519,-1.504026, 0.097816,-0.016117,-0.995074,-0.526127,-1.495,-1.167736, -0.165685,0.059692,-0.98437,-0.952525,-1.440582,-1.16865, -0.123389,0.256577,-0.958615,-1.001366,-1.335897,-1.353338, 0.097816,-0.016117,-0.995074,-0.526127,-1.495,-1.167736, -0.123389,0.256577,-0.958615,-1.001366,-1.335897,-1.353338, 0.078896,0.195617,-0.977502,-0.524231,-1.399266,-1.313019, 0.10737,-0.293005,-0.950063,-0.535144,-1.615983,-0.920556, -0.218261,-0.26262,-0.93989,-0.953236,-1.545941,-0.89918, -0.165685,0.059692,-0.98437,-0.952525,-1.440582,-1.16865, 0.10737,-0.293005,-0.950063,-0.535144,-1.615983,-0.920556, -0.165685,0.059692,-0.98437,-0.952525,-1.440582,-1.16865, 0.097816,-0.016117,-0.995074,-0.526127,-1.495,-1.167736, 0.769758,0.095155,-0.631204,2.688131,-0.517509,-0.672975, 0.763734,0.228435,-0.603761,2.736198,-0.346225,-0.659345, 0.226413,-0.89822,-0.376747,2.881063,-0.493146,-0.521968, 0.594643,-0.107364,-0.796789,2.663024,-1.440487,-0.478149, 0.655995,-0.105886,-0.747301,2.740886,-1.339225,-0.463604, 0.690473,-0.61586,-0.379425,2.824356,-1.407256,-0.355013, 0.184661,-0.694307,-0.695585,1.373216,-0.56462,-1.106245, 0.419396,-0.035927,-0.907092,1.428883,-0.98669,-1.133905, 0.045651,-0.004499,-0.998947,1.337875,-0.945716,-1.021299, -0.267766,-0.862787,-0.428835,-1.215563,1.757097,-0.133494, -0.507894,-0.767261,-0.391606,-1.365948,1.769608,-0.133901, 0.262234,-0.965004,0,-1.35095,1.807009,0, -0.267766,-0.862787,-0.428835,-1.215563,1.757097,-0.133494, 0.262234,-0.965004,0,-1.35095,1.807009,0, -0.065586,-0.997847,0,-1.179474,1.786649,0, -0.263452,-0.648591,-0.714089,-1.227613,1.709095,-0.276029, -0.375453,-0.69207,-0.616502,-1.396332,1.723782,-0.267642, -0.507894,-0.767261,-0.391606,-1.365948,1.769608,-0.133901, -0.263452,-0.648591,-0.714089,-1.227613,1.709095,-0.276029, -0.507894,-0.767261,-0.391606,-1.365948,1.769608,-0.133901, -0.267766,-0.862787,-0.428835,-1.215563,1.757097,-0.133494, -0.301558,-0.77828,-0.550766,-1.292756,1.656509,-0.51403, -0.1427,-0.847733,-0.510868,-1.417595,1.67618,-0.529265, -0.375453,-0.69207,-0.616502,-1.396332,1.723782,-0.267642, -0.301558,-0.77828,-0.550766,-1.292756,1.656509,-0.51403, -0.375453,-0.69207,-0.616502,-1.396332,1.723782,-0.267642, -0.263452,-0.648591,-0.714089,-1.227613,1.709095,-0.276029, -0.154129,-0.981148,-0.116585,-1.338488,1.613735,-0.725441, -0.178511,-0.973481,-0.143068,-1.465432,1.655336,-0.722125, -0.1427,-0.847733,-0.510868,-1.417595,1.67618,-0.529265, -0.154129,-0.981148,-0.116585,-1.338488,1.613735,-0.725441, -0.1427,-0.847733,-0.510868,-1.417595,1.67618,-0.529265, -0.301558,-0.77828,-0.550766,-1.292756,1.656509,-0.51403, 0.095331,0.952335,-0.289775,-1.403848,1.533059,-0.902827, 0.067879,0.951186,-0.30106,-1.582187,1.567542,-0.982349, -0.178511,-0.973481,-0.143068,-1.465432,1.655336,-0.722125, 0.095331,0.952335,-0.289775,-1.403848,1.533059,-0.902827, -0.178511,-0.973481,-0.143068,-1.465432,1.655336,-0.722125, -0.154129,-0.981148,-0.116585,-1.338488,1.613735,-0.725441, 0.10291,0.954344,-0.280422,-1.551526,1.400025,-1.050193, 0.085022,0.963119,-0.255291,-1.721806,1.391264,-1.113307, 0.067879,0.951186,-0.30106,-1.582187,1.567542,-0.982349, 0.10291,0.954344,-0.280422,-1.551526,1.400025,-1.050193, 0.067879,0.951186,-0.30106,-1.582187,1.567542,-0.982349, 0.095331,0.952335,-0.289775,-1.403848,1.533059,-0.902827, 0.172251,0.950689,-0.257916,-1.552899,1.128654,-1.15104, 0.120743,0.971588,-0.203561,-1.733703,1.083864,-1.181489, 0.085022,0.963119,-0.255291,-1.721806,1.391264,-1.113307, 0.172251,0.950689,-0.257916,-1.552899,1.128654,-1.15104, 0.085022,0.963119,-0.255291,-1.721806,1.391264,-1.113307, 0.10291,0.954344,-0.280422,-1.551526,1.400025,-1.050193, 0.28101,0.853935,-0.437982,-1.454529,0.875045,-1.238858, 0.117963,0.926753,-0.356669,-1.807421,0.657142,-1.209422, 0.120743,0.971588,-0.203561,-1.733703,1.083864,-1.181489, 0.28101,0.853935,-0.437982,-1.454529,0.875045,-1.238858, 0.120743,0.971588,-0.203561,-1.733703,1.083864,-1.181489, 0.172251,0.950689,-0.257916,-1.552899,1.128654,-1.15104, 0.381239,0.555717,-0.738807,-1.405685,0.573835,-1.352181, 0.109947,0.693426,-0.712089,-1.796156,0.452382,-1.243643, 0.117963,0.926753,-0.356669,-1.807421,0.657142,-1.209422, 0.381239,0.555717,-0.738807,-1.405685,0.573835,-1.352181, 0.117963,0.926753,-0.356669,-1.807421,0.657142,-1.209422, 0.28101,0.853935,-0.437982,-1.454529,0.875045,-1.238858, 0.376012,0.360026,-0.853813,-1.479588,0.295746,-1.440042, 0.076565,0.333251,-0.939724,-1.81092,0.287592,-1.292257, 0.109947,0.693426,-0.712089,-1.796156,0.452382,-1.243643, 0.376012,0.360026,-0.853813,-1.479588,0.295746,-1.440042, 0.109947,0.693426,-0.712089,-1.796156,0.452382,-1.243643, 0.381239,0.555717,-0.738807,-1.405685,0.573835,-1.352181, 0.207079,0.373404,-0.904261,-1.489699,-0.024215,-1.510987, -0.039599,0.171847,-0.984327,-1.79513,0.033439,-1.37116, 0.076565,0.333251,-0.939724,-1.81092,0.287592,-1.292257, 0.207079,0.373404,-0.904261,-1.489699,-0.024215,-1.510987, 0.076565,0.333251,-0.939724,-1.81092,0.287592,-1.292257, 0.376012,0.360026,-0.853813,-1.479588,0.295746,-1.440042, -0.045242,0.348413,-0.936249,-1.395501,-0.698702,-1.553257, -0.164972,0.181757,-0.969406,-1.802864,-0.282523,-1.401315, -0.039599,0.171847,-0.984327,-1.79513,0.033439,-1.37116, -0.045242,0.348413,-0.936249,-1.395501,-0.698702,-1.553257, -0.039599,0.171847,-0.984327,-1.79513,0.033439,-1.37116, 0.207079,0.373404,-0.904261,-1.489699,-0.024215,-1.510987, -0.212948,0.334057,-0.918182,-1.376176,-0.948757,-1.451608, -0.216817,0.278777,-0.935561,-1.837859,-0.540871,-1.295851, -0.164972,0.181757,-0.969406,-1.802864,-0.282523,-1.401315, -0.212948,0.334057,-0.918182,-1.376176,-0.948757,-1.451608, -0.164972,0.181757,-0.969406,-1.802864,-0.282523,-1.401315, -0.045242,0.348413,-0.936249,-1.395501,-0.698702,-1.553257, -0.282152,0.285245,-0.915983,-1.402349,-1.127845,-1.309055, -0.219724,0.297861,-0.928978,-1.782928,-0.770786,-1.173619, -0.216817,0.278777,-0.935561,-1.837859,-0.540871,-1.295851, -0.282152,0.285245,-0.915983,-1.402349,-1.127845,-1.309055, -0.216817,0.278777,-0.935561,-1.837859,-0.540871,-1.295851, -0.212948,0.334057,-0.918182,-1.376176,-0.948757,-1.451608, -0.326048,0.118611,-0.937883,-1.407658,-1.236026,-1.11293, -0.227368,0.161984,-0.960242,-1.757573,-0.945337,-1.075832, -0.219724,0.297861,-0.928978,-1.782928,-0.770786,-1.173619, -0.326048,0.118611,-0.937883,-1.407658,-1.236026,-1.11293, -0.219724,0.297861,-0.928978,-1.782928,-0.770786,-1.173619, -0.282152,0.285245,-0.915983,-1.402349,-1.127845,-1.309055, -0.507894,-0.767261,-0.391606,-1.365948,1.769608,-0.133901, -0.387895,-0.42081,-0.820034,-1.683863,1.789041,-0.121501, 0.021487,0.999769,0,-1.67651,1.826886,0, -0.507894,-0.767261,-0.391606,-1.365948,1.769608,-0.133901, 0.021487,0.999769,0,-1.67651,1.826886,0, 0.262234,-0.965004,0,-1.35095,1.807009,0, -0.375453,-0.69207,-0.616502,-1.396332,1.723782,-0.267642, -0.433119,-0.541143,-0.720814,-1.714432,1.747956,-0.247594, -0.387895,-0.42081,-0.820034,-1.683863,1.789041,-0.121501, -0.375453,-0.69207,-0.616502,-1.396332,1.723782,-0.267642, -0.387895,-0.42081,-0.820034,-1.683863,1.789041,-0.121501, -0.507894,-0.767261,-0.391606,-1.365948,1.769608,-0.133901, -0.1427,-0.847733,-0.510868,-1.417595,1.67618,-0.529265, -0.455057,-0.684123,-0.569999,-1.744732,1.734849,-0.433807, -0.433119,-0.541143,-0.720814,-1.714432,1.747956,-0.247594, -0.1427,-0.847733,-0.510868,-1.417595,1.67618,-0.529265, -0.433119,-0.541143,-0.720814,-1.714432,1.747956,-0.247594, -0.375453,-0.69207,-0.616502,-1.396332,1.723782,-0.267642, -0.178511,-0.973481,-0.143068,-1.465432,1.655336,-0.722125, -0.084259,-0.367691,-0.926123,-1.929731,1.617188,-0.80639, -0.455057,-0.684123,-0.569999,-1.744732,1.734849,-0.433807, -0.178511,-0.973481,-0.143068,-1.465432,1.655336,-0.722125, -0.455057,-0.684123,-0.569999,-1.744732,1.734849,-0.433807, -0.1427,-0.847733,-0.510868,-1.417595,1.67618,-0.529265, 0.067879,0.951186,-0.30106,-1.582187,1.567542,-0.982349, 0.061261,0.954316,-0.292452,-1.996117,1.387891,-1.064104, -0.084259,-0.367691,-0.926123,-1.929731,1.617188,-0.80639, 0.067879,0.951186,-0.30106,-1.582187,1.567542,-0.982349, -0.084259,-0.367691,-0.926123,-1.929731,1.617188,-0.80639, -0.178511,-0.973481,-0.143068,-1.465432,1.655336,-0.722125, 0.085022,0.963119,-0.255291,-1.721806,1.391264,-1.113307, 0.076969,0.969253,-0.233719,-1.980388,1.134038,-1.143196, 0.061261,0.954316,-0.292452,-1.996117,1.387891,-1.064104, 0.085022,0.963119,-0.255291,-1.721806,1.391264,-1.113307, 0.061261,0.954316,-0.292452,-1.996117,1.387891,-1.064104, 0.067879,0.951186,-0.30106,-1.582187,1.567542,-0.982349, 0.120743,0.971588,-0.203561,-1.733703,1.083864,-1.181489, 0.057779,0.975002,-0.214553,-2.013663,0.810726,-1.158827, 0.076969,0.969253,-0.233719,-1.980388,1.134038,-1.143196, 0.120743,0.971588,-0.203561,-1.733703,1.083864,-1.181489, 0.076969,0.969253,-0.233719,-1.980388,1.134038,-1.143196, 0.085022,0.963119,-0.255291,-1.721806,1.391264,-1.113307, 0.117963,0.926753,-0.356669,-1.807421,0.657142,-1.209422, -0.021294,0.896295,-0.442946,-2.030191,0.547622,-1.189762, 0.057779,0.975002,-0.214553,-2.013663,0.810726,-1.158827, 0.117963,0.926753,-0.356669,-1.807421,0.657142,-1.209422, 0.057779,0.975002,-0.214553,-2.013663,0.810726,-1.158827, 0.120743,0.971588,-0.203561,-1.733703,1.083864,-1.181489, 0.109947,0.693426,-0.712089,-1.796156,0.452382,-1.243643, -0.072244,0.618144,-0.782738,-2.021159,0.411979,-1.234679, -0.021294,0.896295,-0.442946,-2.030191,0.547622,-1.189762, 0.109947,0.693426,-0.712089,-1.796156,0.452382,-1.243643, -0.021294,0.896295,-0.442946,-2.030191,0.547622,-1.189762, 0.117963,0.926753,-0.356669,-1.807421,0.657142,-1.209422, 0.076565,0.333251,-0.939724,-1.81092,0.287592,-1.292257, -0.038944,0.247819,-0.968023,-1.932916,0.232972,-1.304589, -0.072244,0.618144,-0.782738,-2.021159,0.411979,-1.234679, 0.076565,0.333251,-0.939724,-1.81092,0.287592,-1.292257, -0.072244,0.618144,-0.782738,-2.021159,0.411979,-1.234679, 0.109947,0.693426,-0.712089,-1.796156,0.452382,-1.243643, -0.039599,0.171847,-0.984327,-1.79513,0.033439,-1.37116, -0.00315,0.115338,-0.993321,-1.897394,0.037852,-1.365798, -0.038944,0.247819,-0.968023,-1.932916,0.232972,-1.304589, -0.039599,0.171847,-0.984327,-1.79513,0.033439,-1.37116, -0.038944,0.247819,-0.968023,-1.932916,0.232972,-1.304589, 0.076565,0.333251,-0.939724,-1.81092,0.287592,-1.292257, -0.164972,0.181757,-0.969406,-1.802864,-0.282523,-1.401315, 0.016683,0.197618,-0.980137,-1.950547,-0.275573,-1.377028, -0.00315,0.115338,-0.993321,-1.897394,0.037852,-1.365798, -0.164972,0.181757,-0.969406,-1.802864,-0.282523,-1.401315, -0.00315,0.115338,-0.993321,-1.897394,0.037852,-1.365798, -0.039599,0.171847,-0.984327,-1.79513,0.033439,-1.37116, -0.216817,0.278777,-0.935561,-1.837859,-0.540871,-1.295851, 0.032424,0.316591,-0.948008,-2.033655,-0.526012,-1.277639, 0.016683,0.197618,-0.980137,-1.950547,-0.275573,-1.377028, -0.216817,0.278777,-0.935561,-1.837859,-0.540871,-1.295851, 0.016683,0.197618,-0.980137,-1.950547,-0.275573,-1.377028, -0.164972,0.181757,-0.969406,-1.802864,-0.282523,-1.401315, -0.219724,0.297861,-0.928978,-1.782928,-0.770786,-1.173619, 0.053195,0.343167,-0.937767,-2.050292,-0.755566,-1.114167, 0.032424,0.316591,-0.948008,-2.033655,-0.526012,-1.277639, -0.219724,0.297861,-0.928978,-1.782928,-0.770786,-1.173619, 0.032424,0.316591,-0.948008,-2.033655,-0.526012,-1.277639, -0.216817,0.278777,-0.935561,-1.837859,-0.540871,-1.295851, -0.227368,0.161984,-0.960242,-1.757573,-0.945337,-1.075832, 0.057735,0.173734,-0.983099,-2.043593,-0.875823,-1.028879, 0.053195,0.343167,-0.937767,-2.050292,-0.755566,-1.114167, -0.227368,0.161984,-0.960242,-1.757573,-0.945337,-1.075832, 0.053195,0.343167,-0.937767,-2.050292,-0.755566,-1.114167, -0.219724,0.297861,-0.928978,-1.782928,-0.770786,-1.173619, -0.30296,-0.137183,-0.943078,-1.782298,-1.020581,-0.943381, 0.058723,-0.195869,-0.97887,-2.033406,-0.91003,-0.96422, 0.057735,0.173734,-0.983099,-2.043593,-0.875823,-1.028879, -0.30296,-0.137183,-0.943078,-1.782298,-1.020581,-0.943381, 0.057735,0.173734,-0.983099,-2.043593,-0.875823,-1.028879, -0.227368,0.161984,-0.960242,-1.757573,-0.945337,-1.075832, 0.121987,-0.426326,-0.896306,-1.198513,-1.456102,-0.885435, -0.326048,0.118611,-0.937883,-1.407658,-1.236026,-1.11293, -0.165685,0.059692,-0.98437,-0.952525,-1.440582,-1.16865, 0.121987,-0.426326,-0.896306,-1.198513,-1.456102,-0.885435, -0.165685,0.059692,-0.98437,-0.952525,-1.440582,-1.16865, -0.218261,-0.26262,-0.93989,-0.953236,-1.545941,-0.89918, 0.095733,-0.224552,-0.969748,-1.456655,-1.295527,-0.89424, -0.30296,-0.137183,-0.943078,-1.782298,-1.020581,-0.943381, -0.227368,0.161984,-0.960242,-1.757573,-0.945337,-1.075832, 0.095733,-0.224552,-0.969748,-1.456655,-1.295527,-0.89424, -0.227368,0.161984,-0.960242,-1.757573,-0.945337,-1.075832, -0.326048,0.118611,-0.937883,-1.407658,-1.236026,-1.11293, -0.422758,-0.178302,-0.888529,-1.366873,-1.340211,-0.907567, 0.095733,-0.224552,-0.969748,-1.456655,-1.295527,-0.89424, -0.326048,0.118611,-0.937883,-1.407658,-1.236026,-1.11293, 0.121987,-0.426326,-0.896306,-1.198513,-1.456102,-0.885435, -0.422758,-0.178302,-0.888529,-1.366873,-1.340211,-0.907567, -0.326048,0.118611,-0.937883,-1.407658,-1.236026,-1.11293, -0.387895,-0.42081,-0.820034,-1.683863,1.789041,-0.121501, 0.088769,-0.475351,-0.875307,-2.079597,1.817785,-0.138375, 0.181762,-0.983343,0,-2.057387,1.841308,0, -0.387895,-0.42081,-0.820034,-1.683863,1.789041,-0.121501, 0.181762,-0.983343,0,-2.057387,1.841308,0, 0.021487,0.999769,0,-1.67651,1.826886,0, -0.433119,-0.541143,-0.720814,-1.714432,1.747956,-0.247594, 0.099302,-0.563694,-0.819993,-2.10017,1.78998,-0.229245, 0.088769,-0.475351,-0.875307,-2.079597,1.817785,-0.138375, -0.433119,-0.541143,-0.720814,-1.714432,1.747956,-0.247594, 0.088769,-0.475351,-0.875307,-2.079597,1.817785,-0.138375, -0.387895,-0.42081,-0.820034,-1.683863,1.789041,-0.121501, -0.455057,-0.684123,-0.569999,-1.744732,1.734849,-0.433807, 0.093801,-0.705497,-0.702478,-2.137524,1.753182,-0.433142, 0.099302,-0.563694,-0.819993,-2.10017,1.78998,-0.229245, -0.455057,-0.684123,-0.569999,-1.744732,1.734849,-0.433807, 0.099302,-0.563694,-0.819993,-2.10017,1.78998,-0.229245, -0.433119,-0.541143,-0.720814,-1.714432,1.747956,-0.247594, -0.084259,-0.367691,-0.926123,-1.929731,1.617188,-0.80639, 0.058028,-0.329667,-0.942312,-2.172139,1.62301,-0.805318, 0.093801,-0.705497,-0.702478,-2.137524,1.753182,-0.433142, -0.084259,-0.367691,-0.926123,-1.929731,1.617188,-0.80639, 0.093801,-0.705497,-0.702478,-2.137524,1.753182,-0.433142, -0.455057,-0.684123,-0.569999,-1.744732,1.734849,-0.433807, 0.061261,0.954316,-0.292452,-1.996117,1.387891,-1.064104, 0.096347,0.961203,-0.258467,-2.205791,1.356023,-1.081662, 0.058028,-0.329667,-0.942312,-2.172139,1.62301,-0.805318, 0.061261,0.954316,-0.292452,-1.996117,1.387891,-1.064104, 0.058028,-0.329667,-0.942312,-2.172139,1.62301,-0.805318, -0.084259,-0.367691,-0.926123,-1.929731,1.617188,-0.80639, 0.076969,0.969253,-0.233719,-1.980388,1.134038,-1.143196, 0.098712,0.966371,-0.23745,-2.296056,1.06281,-1.171139, 0.096347,0.961203,-0.258467,-2.205791,1.356023,-1.081662, 0.076969,0.969253,-0.233719,-1.980388,1.134038,-1.143196, 0.096347,0.961203,-0.258467,-2.205791,1.356023,-1.081662, 0.061261,0.954316,-0.292452,-1.996117,1.387891,-1.064104, 0.057779,0.975002,-0.214553,-2.013663,0.810726,-1.158827, 0.079848,0.962653,-0.258695,-2.298249,0.768333,-1.203884, 0.098712,0.966371,-0.23745,-2.296056,1.06281,-1.171139, 0.057779,0.975002,-0.214553,-2.013663,0.810726,-1.158827, 0.098712,0.966371,-0.23745,-2.296056,1.06281,-1.171139, 0.076969,0.969253,-0.233719,-1.980388,1.134038,-1.143196, -0.021294,0.896295,-0.442946,-2.030191,0.547622,-1.189762, 0.031476,0.864418,-0.501788,-2.256285,0.547326,-1.238301, 0.079848,0.962653,-0.258695,-2.298249,0.768333,-1.203884, -0.021294,0.896295,-0.442946,-2.030191,0.547622,-1.189762, 0.079848,0.962653,-0.258695,-2.298249,0.768333,-1.203884, 0.057779,0.975002,-0.214553,-2.013663,0.810726,-1.158827, -0.072244,0.618144,-0.782738,-2.021159,0.411979,-1.234679, -0.004377,0.58747,-0.809234,-2.1584,0.381542,-1.272962, 0.031476,0.864418,-0.501788,-2.256285,0.547326,-1.238301, -0.072244,0.618144,-0.782738,-2.021159,0.411979,-1.234679, 0.031476,0.864418,-0.501788,-2.256285,0.547326,-1.238301, -0.021294,0.896295,-0.442946,-2.030191,0.547622,-1.189762, -0.038944,0.247819,-0.968023,-1.932916,0.232972,-1.304589, 0.044022,0.273891,-0.960753,-2.070413,0.207766,-1.335106, -0.004377,0.58747,-0.809234,-2.1584,0.381542,-1.272962, -0.038944,0.247819,-0.968023,-1.932916,0.232972,-1.304589, -0.004377,0.58747,-0.809234,-2.1584,0.381542,-1.272962, -0.072244,0.618144,-0.782738,-2.021159,0.411979,-1.234679, -0.00315,0.115338,-0.993321,-1.897394,0.037852,-1.365798, 0.136965,0.155729,-0.978258,-2.064786,0.018789,-1.411866, 0.044022,0.273891,-0.960753,-2.070413,0.207766,-1.335106, -0.00315,0.115338,-0.993321,-1.897394,0.037852,-1.365798, 0.044022,0.273891,-0.960753,-2.070413,0.207766,-1.335106, -0.038944,0.247819,-0.968023,-1.932916,0.232972,-1.304589, 0.016683,0.197618,-0.980137,-1.950547,-0.275573,-1.377028, 0.173447,0.205435,-0.963178,-2.187634,-0.375454,-1.406902, 0.136965,0.155729,-0.978258,-2.064786,0.018789,-1.411866, 0.016683,0.197618,-0.980137,-1.950547,-0.275573,-1.377028, 0.136965,0.155729,-0.978258,-2.064786,0.018789,-1.411866, -0.00315,0.115338,-0.993321,-1.897394,0.037852,-1.365798, 0.032424,0.316591,-0.948008,-2.033655,-0.526012,-1.277639, 0.136801,0.29658,-0.945159,-2.276341,-0.689823,-1.268026, 0.173447,0.205435,-0.963178,-2.187634,-0.375454,-1.406902, 0.032424,0.316591,-0.948008,-2.033655,-0.526012,-1.277639, 0.173447,0.205435,-0.963178,-2.187634,-0.375454,-1.406902, 0.016683,0.197618,-0.980137,-1.950547,-0.275573,-1.377028, 0.053195,0.343167,-0.937767,-2.050292,-0.755566,-1.114167, 0.095019,0.330845,-0.938889,-2.292049,-0.933921,-1.128136, 0.136801,0.29658,-0.945159,-2.276341,-0.689823,-1.268026, 0.053195,0.343167,-0.937767,-2.050292,-0.755566,-1.114167, 0.136801,0.29658,-0.945159,-2.276341,-0.689823,-1.268026, 0.032424,0.316591,-0.948008,-2.033655,-0.526012,-1.277639, 0.057735,0.173734,-0.983099,-2.043593,-0.875823,-1.028879, 0.53288,-0.088285,0.841573,-2.299356,-1.025449,-1.044687, 0.095019,0.330845,-0.938889,-2.292049,-0.933921,-1.128136, 0.057735,0.173734,-0.983099,-2.043593,-0.875823,-1.028879, 0.095019,0.330845,-0.938889,-2.292049,-0.933921,-1.128136, 0.053195,0.343167,-0.937767,-2.050292,-0.755566,-1.114167, 0.058723,-0.195869,-0.97887,-2.033406,-0.91003,-0.96422, 0.07657,0.16758,-0.982881,-2.306662,-1.116976,-0.961238, 0.53288,-0.088285,0.841573,-2.299356,-1.025449,-1.044687, 0.058723,-0.195869,-0.97887,-2.033406,-0.91003,-0.96422, 0.53288,-0.088285,0.841573,-2.299356,-1.025449,-1.044687, 0.057735,0.173734,-0.983099,-2.043593,-0.875823,-1.028879, 0.088769,-0.475351,-0.875307,-2.079597,1.817785,-0.138375, 0.079214,-0.175111,-0.981357,-2.672899,1.90511,-0.067168, 0.03611,0.999348,0,-2.629466,1.918204,0, 0.088769,-0.475351,-0.875307,-2.079597,1.817785,-0.138375, 0.03611,0.999348,0,-2.629466,1.918204,0, 0.181762,-0.983343,0,-2.057387,1.841308,0, 0.099302,-0.563694,-0.819993,-2.10017,1.78998,-0.229245, 0.204115,-0.405276,-0.891116,-2.697367,1.871291,-0.218796, 0.079214,-0.175111,-0.981357,-2.672899,1.90511,-0.067168, 0.099302,-0.563694,-0.819993,-2.10017,1.78998,-0.229245, 0.079214,-0.175111,-0.981357,-2.672899,1.90511,-0.067168, 0.088769,-0.475351,-0.875307,-2.079597,1.817785,-0.138375, 0.093801,-0.705497,-0.702478,-2.137524,1.753182,-0.433142, 0.396045,-0.47666,-0.784821,-2.703112,1.825435,-0.395127, 0.204115,-0.405276,-0.891116,-2.697367,1.871291,-0.218796, 0.093801,-0.705497,-0.702478,-2.137524,1.753182,-0.433142, 0.204115,-0.405276,-0.891116,-2.697367,1.871291,-0.218796, 0.099302,-0.563694,-0.819993,-2.10017,1.78998,-0.229245, 0.058028,-0.329667,-0.942312,-2.172139,1.62301,-0.805318, 0.238702,-0.258568,-0.936037,-2.715246,1.746763,-0.604653, 0.396045,-0.47666,-0.784821,-2.703112,1.825435,-0.395127, 0.058028,-0.329667,-0.942312,-2.172139,1.62301,-0.805318, 0.396045,-0.47666,-0.784821,-2.703112,1.825435,-0.395127, 0.093801,-0.705497,-0.702478,-2.137524,1.753182,-0.433142, 0.096347,0.961203,-0.258467,-2.205791,1.356023,-1.081662, 0.11717,0.938619,-0.324447,-2.71748,1.576797,-0.875971, 0.238702,-0.258568,-0.936037,-2.715246,1.746763,-0.604653, 0.096347,0.961203,-0.258467,-2.205791,1.356023,-1.081662, 0.238702,-0.258568,-0.936037,-2.715246,1.746763,-0.604653, 0.058028,-0.329667,-0.942312,-2.172139,1.62301,-0.805318, 0.098712,0.966371,-0.23745,-2.296056,1.06281,-1.171139, 0.080398,0.9582,-0.274571,-2.68493,1.262021,-1.11049, 0.11717,0.938619,-0.324447,-2.71748,1.576797,-0.875971, 0.098712,0.966371,-0.23745,-2.296056,1.06281,-1.171139, 0.11717,0.938619,-0.324447,-2.71748,1.576797,-0.875971, 0.096347,0.961203,-0.258467,-2.205791,1.356023,-1.081662, 0.079848,0.962653,-0.258695,-2.298249,0.768333,-1.203884, 0.069061,0.958871,-0.275312,-2.572286,0.835495,-1.252192, 0.080398,0.9582,-0.274571,-2.68493,1.262021,-1.11049, 0.079848,0.962653,-0.258695,-2.298249,0.768333,-1.203884, 0.080398,0.9582,-0.274571,-2.68493,1.262021,-1.11049, 0.098712,0.966371,-0.23745,-2.296056,1.06281,-1.171139, 0.031476,0.864418,-0.501788,-2.256285,0.547326,-1.238301, 0.051291,0.888276,-0.456438,-2.536112,0.656633,-1.269661, 0.069061,0.958871,-0.275312,-2.572286,0.835495,-1.252192, 0.031476,0.864418,-0.501788,-2.256285,0.547326,-1.238301, 0.069061,0.958871,-0.275312,-2.572286,0.835495,-1.252192, 0.079848,0.962653,-0.258695,-2.298249,0.768333,-1.203884, -0.004377,0.58747,-0.809234,-2.1584,0.381542,-1.272962, -0.008282,0.691944,-0.721904,-2.520947,0.559036,-1.273617, 0.051291,0.888276,-0.456438,-2.536112,0.656633,-1.269661, -0.004377,0.58747,-0.809234,-2.1584,0.381542,-1.272962, 0.051291,0.888276,-0.456438,-2.536112,0.656633,-1.269661, 0.031476,0.864418,-0.501788,-2.256285,0.547326,-1.238301, 0.044022,0.273891,-0.960753,-2.070413,0.207766,-1.335106, -0.0448,0.42163,-0.905661,-2.47375,0.300945,-1.316695, -0.008282,0.691944,-0.721904,-2.520947,0.559036,-1.273617, 0.044022,0.273891,-0.960753,-2.070413,0.207766,-1.335106, -0.008282,0.691944,-0.721904,-2.520947,0.559036,-1.273617, -0.004377,0.58747,-0.809234,-2.1584,0.381542,-1.272962, 0.136965,0.155729,-0.978258,-2.064786,0.018789,-1.411866, -0.02449,0.224062,-0.974267,-2.433366,0.078222,-1.371269, -0.0448,0.42163,-0.905661,-2.47375,0.300945,-1.316695, 0.136965,0.155729,-0.978258,-2.064786,0.018789,-1.411866, -0.0448,0.42163,-0.905661,-2.47375,0.300945,-1.316695, 0.044022,0.273891,-0.960753,-2.070413,0.207766,-1.335106, 0.173447,0.205435,-0.963178,-2.187634,-0.375454,-1.406902, -0.017579,0.132168,-0.991072,-2.41473,-0.108377,-1.395384, -0.02449,0.224062,-0.974267,-2.433366,0.078222,-1.371269, 0.173447,0.205435,-0.963178,-2.187634,-0.375454,-1.406902, -0.02449,0.224062,-0.974267,-2.433366,0.078222,-1.371269, 0.136965,0.155729,-0.978258,-2.064786,0.018789,-1.411866, 0.136801,0.29658,-0.945159,-2.276341,-0.689823,-1.268026, -0.055858,0.145868,-0.987726,-2.38292,-0.41745,-1.375045, -0.017579,0.132168,-0.991072,-2.41473,-0.108377,-1.395384, 0.136801,0.29658,-0.945159,-2.276341,-0.689823,-1.268026, -0.017579,0.132168,-0.991072,-2.41473,-0.108377,-1.395384, 0.173447,0.205435,-0.963178,-2.187634,-0.375454,-1.406902, 0.095019,0.330845,-0.938889,-2.292049,-0.933921,-1.128136, -0.115746,0.20405,-0.972094,-2.430508,-0.822313,-1.254486, -0.055858,0.145868,-0.987726,-2.38292,-0.41745,-1.375045, 0.095019,0.330845,-0.938889,-2.292049,-0.933921,-1.128136, -0.055858,0.145868,-0.987726,-2.38292,-0.41745,-1.375045, 0.136801,0.29658,-0.945159,-2.276341,-0.689823,-1.268026, 0.53288,-0.088285,0.841573,-2.299356,-1.025449,-1.044687, -0.164191,0.153328,-0.974439,-2.566746,-1.211312,-1.167101, -0.115746,0.20405,-0.972094,-2.430508,-0.822313,-1.254486, 0.53288,-0.088285,0.841573,-2.299356,-1.025449,-1.044687, -0.115746,0.20405,-0.972094,-2.430508,-0.822313,-1.254486, 0.095019,0.330845,-0.938889,-2.292049,-0.933921,-1.128136, 0.079214,-0.175111,-0.981357,-2.672899,1.90511,-0.067168, 0.005821,-0.234321,-0.972142,-3.053102,1.96881,-0.051104, 0.012502,-0.999922,0,-3.037562,2.001526,0, 0.079214,-0.175111,-0.981357,-2.672899,1.90511,-0.067168, 0.012502,-0.999922,0,-3.037562,2.001526,0, 0.03611,0.999348,0,-2.629466,1.918204,0, 0.204115,-0.405276,-0.891116,-2.697367,1.871291,-0.218796, 0.243464,-0.335965,-0.909864,-3.077669,1.871112,-0.217368, 0.005821,-0.234321,-0.972142,-3.053102,1.96881,-0.051104, 0.204115,-0.405276,-0.891116,-2.697367,1.871291,-0.218796, 0.005821,-0.234321,-0.972142,-3.053102,1.96881,-0.051104, 0.079214,-0.175111,-0.981357,-2.672899,1.90511,-0.067168, 0.396045,-0.47666,-0.784821,-2.703112,1.825435,-0.395127, 0.49938,-0.45475,-0.737443,-3.07531,1.846,-0.363149, 0.243464,-0.335965,-0.909864,-3.077669,1.871112,-0.217368, 0.396045,-0.47666,-0.784821,-2.703112,1.825435,-0.395127, 0.243464,-0.335965,-0.909864,-3.077669,1.871112,-0.217368, 0.204115,-0.405276,-0.891116,-2.697367,1.871291,-0.218796, 0.238702,-0.258568,-0.936037,-2.715246,1.746763,-0.604653, 0.573426,-0.441087,-0.69038,-3.109047,1.789477,-0.565323, 0.49938,-0.45475,-0.737443,-3.07531,1.846,-0.363149, 0.238702,-0.258568,-0.936037,-2.715246,1.746763,-0.604653, 0.49938,-0.45475,-0.737443,-3.07531,1.846,-0.363149, 0.396045,-0.47666,-0.784821,-2.703112,1.825435,-0.395127, 0.11717,0.938619,-0.324447,-2.71748,1.576797,-0.875971, 0.1643,0.873906,-0.457487,-3.08565,1.65734,-0.784479, 0.573426,-0.441087,-0.69038,-3.109047,1.789477,-0.565323, 0.11717,0.938619,-0.324447,-2.71748,1.576797,-0.875971, 0.573426,-0.441087,-0.69038,-3.109047,1.789477,-0.565323, 0.238702,-0.258568,-0.936037,-2.715246,1.746763,-0.604653, 0.080398,0.9582,-0.274571,-2.68493,1.262021,-1.11049, -0.012448,0.906487,-0.422051,-3.028932,1.461517,-0.941324, 0.1643,0.873906,-0.457487,-3.08565,1.65734,-0.784479, 0.080398,0.9582,-0.274571,-2.68493,1.262021,-1.11049, 0.1643,0.873906,-0.457487,-3.08565,1.65734,-0.784479, 0.11717,0.938619,-0.324447,-2.71748,1.576797,-0.875971, 0.069061,0.958871,-0.275312,-2.572286,0.835495,-1.252192, -0.051905,0.965082,-0.256753,-2.930312,1.10358,-1.125876, -0.012448,0.906487,-0.422051,-3.028932,1.461517,-0.941324, 0.069061,0.958871,-0.275312,-2.572286,0.835495,-1.252192, -0.012448,0.906487,-0.422051,-3.028932,1.461517,-0.941324, 0.080398,0.9582,-0.274571,-2.68493,1.262021,-1.11049, 0.051291,0.888276,-0.456438,-2.536112,0.656633,-1.269661, -0.088843,0.888,-0.45118,-2.825835,0.755899,-1.209042, -0.051905,0.965082,-0.256753,-2.930312,1.10358,-1.125876, 0.051291,0.888276,-0.456438,-2.536112,0.656633,-1.269661, -0.051905,0.965082,-0.256753,-2.930312,1.10358,-1.125876, 0.069061,0.958871,-0.275312,-2.572286,0.835495,-1.252192, -0.008282,0.691944,-0.721904,-2.520947,0.559036,-1.273617, -0.169971,0.704712,-0.688833,-2.79063,0.46881,-1.224273, -0.088843,0.888,-0.45118,-2.825835,0.755899,-1.209042, -0.008282,0.691944,-0.721904,-2.520947,0.559036,-1.273617, -0.088843,0.888,-0.45118,-2.825835,0.755899,-1.209042, 0.051291,0.888276,-0.456438,-2.536112,0.656633,-1.269661, -0.0448,0.42163,-0.905661,-2.47375,0.300945,-1.316695, -0.261543,0.44691,-0.855492,-2.787011,0.264495,-1.237352, -0.169971,0.704712,-0.688833,-2.79063,0.46881,-1.224273, -0.0448,0.42163,-0.905661,-2.47375,0.300945,-1.316695, -0.169971,0.704712,-0.688833,-2.79063,0.46881,-1.224273, -0.008282,0.691944,-0.721904,-2.520947,0.559036,-1.273617, -0.02449,0.224062,-0.974267,-2.433366,0.078222,-1.371269, -0.33898,0.203127,-0.918603,-2.687022,0.076781,-1.290565, -0.261543,0.44691,-0.855492,-2.787011,0.264495,-1.237352, -0.02449,0.224062,-0.974267,-2.433366,0.078222,-1.371269, -0.261543,0.44691,-0.855492,-2.787011,0.264495,-1.237352, -0.0448,0.42163,-0.905661,-2.47375,0.300945,-1.316695, -0.017579,0.132168,-0.991072,-2.41473,-0.108377,-1.395384, -0.351241,0.075821,-0.93321,-2.649338,-0.241719,-1.339644, -0.33898,0.203127,-0.918603,-2.687022,0.076781,-1.290565, -0.017579,0.132168,-0.991072,-2.41473,-0.108377,-1.395384, -0.33898,0.203127,-0.918603,-2.687022,0.076781,-1.290565, -0.02449,0.224062,-0.974267,-2.433366,0.078222,-1.371269, -0.055858,0.145868,-0.987726,-2.38292,-0.41745,-1.375045, -0.311485,0.082882,-0.94663,-2.616467,-0.511373,-1.344133, -0.351241,0.075821,-0.93321,-2.649338,-0.241719,-1.339644, -0.055858,0.145868,-0.987726,-2.38292,-0.41745,-1.375045, -0.351241,0.075821,-0.93321,-2.649338,-0.241719,-1.339644, -0.017579,0.132168,-0.991072,-2.41473,-0.108377,-1.395384, -0.115746,0.20405,-0.972094,-2.430508,-0.822313,-1.254486, -0.285709,0.130064,-0.949449,-2.624856,-0.8882,-1.261176, -0.311485,0.082882,-0.94663,-2.616467,-0.511373,-1.344133, -0.115746,0.20405,-0.972094,-2.430508,-0.822313,-1.254486, -0.311485,0.082882,-0.94663,-2.616467,-0.511373,-1.344133, -0.055858,0.145868,-0.987726,-2.38292,-0.41745,-1.375045, -0.164191,0.153328,-0.974439,-2.566746,-1.211312,-1.167101, -0.279485,0.127803,-0.951606,-2.725776,-1.214862,-1.190384, -0.285709,0.130064,-0.949449,-2.624856,-0.8882,-1.261176, -0.164191,0.153328,-0.974439,-2.566746,-1.211312,-1.167101, -0.285709,0.130064,-0.949449,-2.624856,-0.8882,-1.261176, -0.115746,0.20405,-0.972094,-2.430508,-0.822313,-1.254486, -0.15812,-0.033626,-0.986847,-2.765069,-1.561164,-1.084313, -0.234266,0.044111,-0.971171,-2.862576,-1.546894,-1.117139, -0.279485,0.127803,-0.951606,-2.725776,-1.214862,-1.190384, -0.15812,-0.033626,-0.986847,-2.765069,-1.561164,-1.084313, -0.279485,0.127803,-0.951606,-2.725776,-1.214862,-1.190384, -0.164191,0.153328,-0.974439,-2.566746,-1.211312,-1.167101, -0.108631,-0.122719,-0.986478,-3.35851,1.810253,-0.380095, -0.379807,-0.084066,-0.921238,-3.519716,1.685231,-0.31713, -0.153783,-0.988105,0,-3.507689,1.700214,0, -0.108631,-0.122719,-0.986478,-3.35851,1.810253,-0.380095, -0.153783,-0.988105,0,-3.507689,1.700214,0, 0.072535,0.997366,0,-3.392806,1.769365,0, -0.006683,-0.232823,-0.972496,-3.395381,1.726325,-0.55477, -0.373751,-0.169261,-0.911954,-3.527168,1.583508,-0.512679, -0.379807,-0.084066,-0.921238,-3.519716,1.685231,-0.31713, -0.006683,-0.232823,-0.972496,-3.395381,1.726325,-0.55477, -0.379807,-0.084066,-0.921238,-3.519716,1.685231,-0.31713, -0.108631,-0.122719,-0.986478,-3.35851,1.810253,-0.380095, -0.004872,-0.216103,-0.976358,-3.338742,1.598933,-0.689636, -0.426971,-0.09322,-0.899447,-3.512997,1.44805,-0.611386, -0.373751,-0.169261,-0.911954,-3.527168,1.583508,-0.512679, -0.004872,-0.216103,-0.976358,-3.338742,1.598933,-0.689636, -0.373751,-0.169261,-0.911954,-3.527168,1.583508,-0.512679, -0.006683,-0.232823,-0.972496,-3.395381,1.726325,-0.55477, 0.193955,-0.251788,-0.948148,-3.27808,1.432418,-0.853958, -0.457657,0.090776,-0.884483,-3.476235,1.287798,-0.704766, -0.426971,-0.09322,-0.899447,-3.512997,1.44805,-0.611386, 0.193955,-0.251788,-0.948148,-3.27808,1.432418,-0.853958, -0.426971,-0.09322,-0.899447,-3.512997,1.44805,-0.611386, -0.004872,-0.216103,-0.976358,-3.338742,1.598933,-0.689636, -0.337275,0.918092,-0.208215,-3.244771,1.19554,-0.910945, -0.575033,0.794917,-0.193504,-3.442151,1.105486,-0.762934, -0.457657,0.090776,-0.884483,-3.476235,1.287798,-0.704766, -0.337275,0.918092,-0.208215,-3.244771,1.19554,-0.910945, -0.457657,0.090776,-0.884483,-3.476235,1.287798,-0.704766, 0.193955,-0.251788,-0.948148,-3.27808,1.432418,-0.853958, -0.47652,0.732046,-0.486866,-3.19641,0.797564,-0.985913, -0.636638,0.552106,-0.538397,-3.379131,0.767915,-0.885996, -0.575033,0.794917,-0.193504,-3.442151,1.105486,-0.762934, -0.47652,0.732046,-0.486866,-3.19641,0.797564,-0.985913, -0.575033,0.794917,-0.193504,-3.442151,1.105486,-0.762934, -0.337275,0.918092,-0.208215,-3.244771,1.19554,-0.910945, -0.505556,0.519614,-0.688778,-3.112555,0.457376,-1.084816, -0.643784,0.341688,-0.684684,-3.306875,0.379713,-0.98762, -0.636638,0.552106,-0.538397,-3.379131,0.767915,-0.885996, -0.505556,0.519614,-0.688778,-3.112555,0.457376,-1.084816, -0.636638,0.552106,-0.538397,-3.379131,0.767915,-0.885996, -0.47652,0.732046,-0.486866,-3.19641,0.797564,-0.985913, -0.539732,0.31653,-0.780063,-3.044646,0.224321,-1.164934, -0.646492,0.202786,-0.735477,-3.251181,0.175063,-1.053445, -0.643784,0.341688,-0.684684,-3.306875,0.379713,-0.98762, -0.539732,0.31653,-0.780063,-3.044646,0.224321,-1.164934, -0.643784,0.341688,-0.684684,-3.306875,0.379713,-0.98762, -0.505556,0.519614,-0.688778,-3.112555,0.457376,-1.084816, -0.545639,0.142044,-0.825894,-2.971546,0.032038,-1.215971, -0.624566,0.121329,-0.77149,-3.160225,-0.018852,-1.113626, -0.646492,0.202786,-0.735477,-3.251181,0.175063,-1.053445, -0.545639,0.142044,-0.825894,-2.971546,0.032038,-1.215971, -0.646492,0.202786,-0.735477,-3.251181,0.175063,-1.053445, -0.539732,0.31653,-0.780063,-3.044646,0.224321,-1.164934, -0.512472,0.102596,-0.852553,-2.90708,-0.345582,-1.281557, -0.588581,0.130279,-0.797872,-3.101125,-0.35476,-1.162409, -0.624566,0.121329,-0.77149,-3.160225,-0.018852,-1.113626, -0.512472,0.102596,-0.852553,-2.90708,-0.345582,-1.281557, -0.624566,0.121329,-0.77149,-3.160225,-0.018852,-1.113626, -0.545639,0.142044,-0.825894,-2.971546,0.032038,-1.215971, -0.449233,0.123555,-0.88483,-2.901159,-0.619504,-1.284058, -0.553145,0.12021,-0.824367,-3.096267,-0.6681,-1.140081, -0.588581,0.130279,-0.797872,-3.101125,-0.35476,-1.162409, -0.449233,0.123555,-0.88483,-2.901159,-0.619504,-1.284058, -0.588581,0.130279,-0.797872,-3.101125,-0.35476,-1.162409, -0.512472,0.102596,-0.852553,-2.90708,-0.345582,-1.281557, -0.404056,0.117264,-0.907187,-2.937658,-1.002749,-1.219413, -0.547788,0.055501,-0.834774,-3.122061,-0.998702,-1.065015, -0.553145,0.12021,-0.824367,-3.096267,-0.6681,-1.140081, -0.404056,0.117264,-0.907187,-2.937658,-1.002749,-1.219413, -0.553145,0.12021,-0.824367,-3.096267,-0.6681,-1.140081, -0.449233,0.123555,-0.88483,-2.901159,-0.619504,-1.284058, -0.387051,0.087837,-0.917865,-2.982676,-1.264649,-1.133596, -0.563128,0.005618,-0.826351,-3.15021,-1.259588,-1.001021, -0.547788,0.055501,-0.834774,-3.122061,-0.998702,-1.065015, -0.387051,0.087837,-0.917865,-2.982676,-1.264649,-1.133596, -0.547788,0.055501,-0.834774,-3.122061,-0.998702,-1.065015, -0.404056,0.117264,-0.907187,-2.937658,-1.002749,-1.219413, -0.390861,0.032481,-0.919876,-3.063133,-1.440555,-1.090926, -0.596319,-0.021767,-0.802452,-3.188954,-1.408279,-0.963611, -0.563128,0.005618,-0.826351,-3.15021,-1.259588,-1.001021, -0.390861,0.032481,-0.919876,-3.063133,-1.440555,-1.090926, -0.563128,0.005618,-0.826351,-3.15021,-1.259588,-1.001021, -0.387051,0.087837,-0.917865,-2.982676,-1.264649,-1.133596, -0.379807,-0.084066,-0.921238,-3.519716,1.685231,-0.31713, -0.6343,-0.110875,-0.765095,-3.734989,1.589433,-0.295202, -0.626255,-0.080061,-0.775497,-3.690685,1.60208,0, -0.379807,-0.084066,-0.921238,-3.519716,1.685231,-0.31713, -0.626255,-0.080061,-0.775497,-3.690685,1.60208,0, -0.153783,-0.988105,0,-3.507689,1.700214,0, -0.373751,-0.169261,-0.911954,-3.527168,1.583508,-0.512679, -0.619245,-0.050391,-0.783579,-3.697974,1.466697,-0.433432, -0.6343,-0.110875,-0.765095,-3.734989,1.589433,-0.295202, -0.373751,-0.169261,-0.911954,-3.527168,1.583508,-0.512679, -0.6343,-0.110875,-0.765095,-3.734989,1.589433,-0.295202, -0.379807,-0.084066,-0.921238,-3.519716,1.685231,-0.31713, -0.426971,-0.09322,-0.899447,-3.512997,1.44805,-0.611386, -0.549206,0.149158,-0.822268,-3.684619,1.35069,-0.501428, -0.619245,-0.050391,-0.783579,-3.697974,1.466697,-0.433432, -0.426971,-0.09322,-0.899447,-3.512997,1.44805,-0.611386, -0.619245,-0.050391,-0.783579,-3.697974,1.466697,-0.433432, -0.373751,-0.169261,-0.911954,-3.527168,1.583508,-0.512679, -0.457657,0.090776,-0.884483,-3.476235,1.287798,-0.704766, -0.846545,0.532317,0,-3.655148,1.190938,-0.573692, -0.549206,0.149158,-0.822268,-3.684619,1.35069,-0.501428, -0.457657,0.090776,-0.884483,-3.476235,1.287798,-0.704766, -0.549206,0.149158,-0.822268,-3.684619,1.35069,-0.501428, -0.426971,-0.09322,-0.899447,-3.512997,1.44805,-0.611386, -0.575033,0.794917,-0.193504,-3.442151,1.105486,-0.762934, -0.881408,0.44424,-0.16053,-3.639878,1.015186,-0.615203, -0.846545,0.532317,0,-3.655148,1.190938,-0.573692, -0.575033,0.794917,-0.193504,-3.442151,1.105486,-0.762934, -0.846545,0.532317,0,-3.655148,1.190938,-0.573692, -0.457657,0.090776,-0.884483,-3.476235,1.287798,-0.704766, -0.636638,0.552106,-0.538397,-3.379131,0.767915,-0.885996, -0.881352,0.261345,-0.393596,-3.582867,0.734419,-0.697787, -0.881408,0.44424,-0.16053,-3.639878,1.015186,-0.615203, -0.636638,0.552106,-0.538397,-3.379131,0.767915,-0.885996, -0.881408,0.44424,-0.16053,-3.639878,1.015186,-0.615203, -0.575033,0.794917,-0.193504,-3.442151,1.105486,-0.762934, -0.643784,0.341688,-0.684684,-3.306875,0.379713,-0.98762, -0.880731,0.130089,-0.4554,-3.504525,0.405574,-0.847066, -0.881352,0.261345,-0.393596,-3.582867,0.734419,-0.697787, -0.643784,0.341688,-0.684684,-3.306875,0.379713,-0.98762, -0.881352,0.261345,-0.393596,-3.582867,0.734419,-0.697787, -0.636638,0.552106,-0.538397,-3.379131,0.767915,-0.885996, -0.646492,0.202786,-0.735477,-3.251181,0.175063,-1.053445, -0.874101,0.053175,-0.482825,-3.424258,0.158638,-0.918279, -0.880731,0.130089,-0.4554,-3.504525,0.405574,-0.847066, -0.646492,0.202786,-0.735477,-3.251181,0.175063,-1.053445, -0.880731,0.130089,-0.4554,-3.504525,0.405574,-0.847066, -0.643784,0.341688,-0.684684,-3.306875,0.379713,-0.98762, -0.624566,0.121329,-0.77149,-3.160225,-0.018852,-1.113626, -0.875552,0.01506,-0.482889,-3.365413,-0.113447,-0.9524, -0.874101,0.053175,-0.482825,-3.424258,0.158638,-0.918279, -0.624566,0.121329,-0.77149,-3.160225,-0.018852,-1.113626, -0.874101,0.053175,-0.482825,-3.424258,0.158638,-0.918279, -0.646492,0.202786,-0.735477,-3.251181,0.175063,-1.053445, -0.588581,0.130279,-0.797872,-3.101125,-0.35476,-1.162409, -0.86587,-0.001845,-0.500266,-3.290393,-0.424259,-0.984153, -0.875552,0.01506,-0.482889,-3.365413,-0.113447,-0.9524, -0.588581,0.130279,-0.797872,-3.101125,-0.35476,-1.162409, -0.875552,0.01506,-0.482889,-3.365413,-0.113447,-0.9524, -0.624566,0.121329,-0.77149,-3.160225,-0.018852,-1.113626, -0.553145,0.12021,-0.824367,-3.096267,-0.6681,-1.140081, -0.84112,-0.026303,-0.540209,-3.233333,-0.683782,-1.015512, -0.86587,-0.001845,-0.500266,-3.290393,-0.424259,-0.984153, -0.553145,0.12021,-0.824367,-3.096267,-0.6681,-1.140081, -0.86587,-0.001845,-0.500266,-3.290393,-0.424259,-0.984153, -0.588581,0.130279,-0.797872,-3.101125,-0.35476,-1.162409, -0.547788,0.055501,-0.834774,-3.122061,-0.998702,-1.065015, -0.813168,-0.06637,-0.578232,-3.238094,-0.979377,-0.961631, -0.84112,-0.026303,-0.540209,-3.233333,-0.683782,-1.015512, -0.547788,0.055501,-0.834774,-3.122061,-0.998702,-1.065015, -0.84112,-0.026303,-0.540209,-3.233333,-0.683782,-1.015512, -0.553145,0.12021,-0.824367,-3.096267,-0.6681,-1.140081, -0.563128,0.005618,-0.826351,-3.15021,-1.259588,-1.001021, -0.799953,-0.096213,-0.592299,-3.27751,-1.177346,-0.9153, -0.813168,-0.06637,-0.578232,-3.238094,-0.979377,-0.961631, -0.563128,0.005618,-0.826351,-3.15021,-1.259588,-1.001021, -0.813168,-0.06637,-0.578232,-3.238094,-0.979377,-0.961631, -0.547788,0.055501,-0.834774,-3.122061,-0.998702,-1.065015, -0.596319,-0.021767,-0.802452,-3.188954,-1.408279,-0.963611, -0.811102,-0.12903,-0.570495,-3.319817,-1.365015,-0.886015, -0.799953,-0.096213,-0.592299,-3.27751,-1.177346,-0.9153, -0.596319,-0.021767,-0.802452,-3.188954,-1.408279,-0.963611, -0.799953,-0.096213,-0.592299,-3.27751,-1.177346,-0.9153, -0.563128,0.005618,-0.826351,-3.15021,-1.259588,-1.001021, -0.6343,-0.110875,-0.765095,-3.734989,1.589433,-0.295202, -0.880002,-0.033987,-0.473752,-3.709741,1.351194,-0.211745, -0.848349,-0.120539,-0.515533,-3.709827,1.417763,0, -0.6343,-0.110875,-0.765095,-3.734989,1.589433,-0.295202, -0.848349,-0.120539,-0.515533,-3.709827,1.417763,0, -0.626255,-0.080061,-0.775497,-3.690685,1.60208,0, -0.619245,-0.050391,-0.783579,-3.697974,1.466697,-0.433432, -0.870331,0.069096,-0.487595,-3.701634,1.27265,-0.270469, -0.880002,-0.033987,-0.473752,-3.709741,1.351194,-0.211745, -0.619245,-0.050391,-0.783579,-3.697974,1.466697,-0.433432, -0.880002,-0.033987,-0.473752,-3.709741,1.351194,-0.211745, -0.6343,-0.110875,-0.765095,-3.734989,1.589433,-0.295202, -0.549206,0.149158,-0.822268,-3.684619,1.35069,-0.501428, -0.822733,0.223687,-0.522565,-3.695872,1.156978,-0.316829, -0.870331,0.069096,-0.487595,-3.701634,1.27265,-0.270469, -0.549206,0.149158,-0.822268,-3.684619,1.35069,-0.501428, -0.870331,0.069096,-0.487595,-3.701634,1.27265,-0.270469, -0.619245,-0.050391,-0.783579,-3.697974,1.466697,-0.433432, -0.846545,0.532317,0,-3.655148,1.190938,-0.573692, -0.938447,-0.345423,0,-3.672431,1.044224,-0.364991, -0.822733,0.223687,-0.522565,-3.695872,1.156978,-0.316829, -0.846545,0.532317,0,-3.655148,1.190938,-0.573692, -0.822733,0.223687,-0.522565,-3.695872,1.156978,-0.316829, -0.549206,0.149158,-0.822268,-3.684619,1.35069,-0.501428, -0.881408,0.44424,-0.16053,-3.639878,1.015186,-0.615203, -0.946902,-0.290276,0.138264,-3.664355,0.932851,-0.370749, -0.938447,-0.345423,0,-3.672431,1.044224,-0.364991, -0.881408,0.44424,-0.16053,-3.639878,1.015186,-0.615203, -0.938447,-0.345423,0,-3.672431,1.044224,-0.364991, -0.846545,0.532317,0,-3.655148,1.190938,-0.573692, -0.881352,0.261345,-0.393596,-3.582867,0.734419,-0.697787, -0.982633,-0.143429,0.11773,-3.631292,0.701013,-0.420276, -0.946902,-0.290276,0.138264,-3.664355,0.932851,-0.370749, -0.881352,0.261345,-0.393596,-3.582867,0.734419,-0.697787, -0.946902,-0.290276,0.138264,-3.664355,0.932851,-0.370749, -0.881408,0.44424,-0.16053,-3.639878,1.015186,-0.615203, -0.880731,0.130089,-0.4554,-3.504525,0.405574,-0.847066, -0.995584,-0.070631,0.061842,-3.570384,0.385564,-0.52448, -0.982633,-0.143429,0.11773,-3.631292,0.701013,-0.420276, -0.880731,0.130089,-0.4554,-3.504525,0.405574,-0.847066, -0.982633,-0.143429,0.11773,-3.631292,0.701013,-0.420276, -0.881352,0.261345,-0.393596,-3.582867,0.734419,-0.697787, -0.874101,0.053175,-0.482825,-3.424258,0.158638,-0.918279, -0.997475,-0.070819,0.005318,-3.520188,0.140164,-0.618561, -0.995584,-0.070631,0.061842,-3.570384,0.385564,-0.52448, -0.874101,0.053175,-0.482825,-3.424258,0.158638,-0.918279, -0.995584,-0.070631,0.061842,-3.570384,0.385564,-0.52448, -0.880731,0.130089,-0.4554,-3.504525,0.405574,-0.847066, -0.875552,0.01506,-0.482889,-3.365413,-0.113447,-0.9524, -0.980175,-0.184883,0.071243,-3.458251,-0.12595,-0.731712, -0.997475,-0.070819,0.005318,-3.520188,0.140164,-0.618561, -0.875552,0.01506,-0.482889,-3.365413,-0.113447,-0.9524, -0.997475,-0.070819,0.005318,-3.520188,0.140164,-0.618561, -0.874101,0.053175,-0.482825,-3.424258,0.158638,-0.918279, -0.86587,-0.001845,-0.500266,-3.290393,-0.424259,-0.984153, -0.976177,-0.17359,0.130171,-3.406618,-0.343461,-0.746456, -0.980175,-0.184883,0.071243,-3.458251,-0.12595,-0.731712, -0.86587,-0.001845,-0.500266,-3.290393,-0.424259,-0.984153, -0.980175,-0.184883,0.071243,-3.458251,-0.12595,-0.731712, -0.875552,0.01506,-0.482889,-3.365413,-0.113447,-0.9524, -0.84112,-0.026303,-0.540209,-3.233333,-0.683782,-1.015512, -0.984416,-0.175855,-0.000915,-3.283698,-0.730967,-0.793898, -0.976177,-0.17359,0.130171,-3.406618,-0.343461,-0.746456, -0.84112,-0.026303,-0.540209,-3.233333,-0.683782,-1.015512, -0.976177,-0.17359,0.130171,-3.406618,-0.343461,-0.746456, -0.86587,-0.001845,-0.500266,-3.290393,-0.424259,-0.984153, -0.285709,0.130064,-0.949449,-2.624856,-0.8882,-1.261176, -0.279485,0.127803,-0.951606,-2.725776,-1.214862,-1.190384, -0.387051,0.087837,-0.917865,-2.982676,-1.264649,-1.133596, -0.285709,0.130064,-0.949449,-2.624856,-0.8882,-1.261176, -0.387051,0.087837,-0.917865,-2.982676,-1.264649,-1.133596, -0.404056,0.117264,-0.907187,-2.937658,-1.002749,-1.219413, -0.311485,0.082882,-0.94663,-2.616467,-0.511373,-1.344133, -0.285709,0.130064,-0.949449,-2.624856,-0.8882,-1.261176, -0.404056,0.117264,-0.907187,-2.937658,-1.002749,-1.219413, -0.311485,0.082882,-0.94663,-2.616467,-0.511373,-1.344133, -0.404056,0.117264,-0.907187,-2.937658,-1.002749,-1.219413, -0.449233,0.123555,-0.88483,-2.901159,-0.619504,-1.284058, -0.351241,0.075821,-0.93321,-2.649338,-0.241719,-1.339644, -0.311485,0.082882,-0.94663,-2.616467,-0.511373,-1.344133, -0.449233,0.123555,-0.88483,-2.901159,-0.619504,-1.284058, -0.351241,0.075821,-0.93321,-2.649338,-0.241719,-1.339644, -0.449233,0.123555,-0.88483,-2.901159,-0.619504,-1.284058, -0.512472,0.102596,-0.852553,-2.90708,-0.345582,-1.281557, -0.33898,0.203127,-0.918603,-2.687022,0.076781,-1.290565, -0.351241,0.075821,-0.93321,-2.649338,-0.241719,-1.339644, -0.512472,0.102596,-0.852553,-2.90708,-0.345582,-1.281557, -0.33898,0.203127,-0.918603,-2.687022,0.076781,-1.290565, -0.512472,0.102596,-0.852553,-2.90708,-0.345582,-1.281557, -0.545639,0.142044,-0.825894,-2.971546,0.032038,-1.215971, -0.261543,0.44691,-0.855492,-2.787011,0.264495,-1.237352, -0.33898,0.203127,-0.918603,-2.687022,0.076781,-1.290565, -0.545639,0.142044,-0.825894,-2.971546,0.032038,-1.215971, -0.261543,0.44691,-0.855492,-2.787011,0.264495,-1.237352, -0.545639,0.142044,-0.825894,-2.971546,0.032038,-1.215971, -0.539732,0.31653,-0.780063,-3.044646,0.224321,-1.164934, -0.169971,0.704712,-0.688833,-2.79063,0.46881,-1.224273, -0.261543,0.44691,-0.855492,-2.787011,0.264495,-1.237352, -0.539732,0.31653,-0.780063,-3.044646,0.224321,-1.164934, -0.169971,0.704712,-0.688833,-2.79063,0.46881,-1.224273, -0.539732,0.31653,-0.780063,-3.044646,0.224321,-1.164934, -0.505556,0.519614,-0.688778,-3.112555,0.457376,-1.084816, -0.088843,0.888,-0.45118,-2.825835,0.755899,-1.209042, -0.169971,0.704712,-0.688833,-2.79063,0.46881,-1.224273, -0.505556,0.519614,-0.688778,-3.112555,0.457376,-1.084816, -0.088843,0.888,-0.45118,-2.825835,0.755899,-1.209042, -0.505556,0.519614,-0.688778,-3.112555,0.457376,-1.084816, -0.47652,0.732046,-0.486866,-3.19641,0.797564,-0.985913, -0.051905,0.965082,-0.256753,-2.930312,1.10358,-1.125876, -0.088843,0.888,-0.45118,-2.825835,0.755899,-1.209042, -0.47652,0.732046,-0.486866,-3.19641,0.797564,-0.985913, -0.051905,0.965082,-0.256753,-2.930312,1.10358,-1.125876, -0.47652,0.732046,-0.486866,-3.19641,0.797564,-0.985913, -0.337275,0.918092,-0.208215,-3.244771,1.19554,-0.910945, -0.012448,0.906487,-0.422051,-3.028932,1.461517,-0.941324, -0.051905,0.965082,-0.256753,-2.930312,1.10358,-1.125876, -0.337275,0.918092,-0.208215,-3.244771,1.19554,-0.910945, -0.012448,0.906487,-0.422051,-3.028932,1.461517,-0.941324, -0.337275,0.918092,-0.208215,-3.244771,1.19554,-0.910945, 0.193955,-0.251788,-0.948148,-3.27808,1.432418,-0.853958, 0.1643,0.873906,-0.457487,-3.08565,1.65734,-0.784479, -0.012448,0.906487,-0.422051,-3.028932,1.461517,-0.941324, 0.193955,-0.251788,-0.948148,-3.27808,1.432418,-0.853958, 0.1643,0.873906,-0.457487,-3.08565,1.65734,-0.784479, 0.193955,-0.251788,-0.948148,-3.27808,1.432418,-0.853958, -0.004872,-0.216103,-0.976358,-3.338742,1.598933,-0.689636, 0.573426,-0.441087,-0.69038,-3.109047,1.789477,-0.565323, 0.1643,0.873906,-0.457487,-3.08565,1.65734,-0.784479, -0.004872,-0.216103,-0.976358,-3.338742,1.598933,-0.689636, 0.573426,-0.441087,-0.69038,-3.109047,1.789477,-0.565323, -0.004872,-0.216103,-0.976358,-3.338742,1.598933,-0.689636, -0.006683,-0.232823,-0.972496,-3.395381,1.726325,-0.55477, 0.49938,-0.45475,-0.737443,-3.07531,1.846,-0.363149, 0.573426,-0.441087,-0.69038,-3.109047,1.789477,-0.565323, -0.006683,-0.232823,-0.972496,-3.395381,1.726325,-0.55477, 0.49938,-0.45475,-0.737443,-3.07531,1.846,-0.363149, -0.006683,-0.232823,-0.972496,-3.395381,1.726325,-0.55477, -0.108631,-0.122719,-0.986478,-3.35851,1.810253,-0.380095, -0.15812,-0.033626,-0.986847,-2.765069,-1.561164,-1.084313, -0.164191,0.153328,-0.974439,-2.566746,-1.211312,-1.167101, 0.79444,0.150524,0.588394,-2.687162,-1.539807,-0.988048, -0.164191,0.153328,-0.974439,-2.566746,-1.211312,-1.167101, 0.53288,-0.088285,0.841573,-2.299356,-1.025449,-1.044687, 0.07657,0.16758,-0.982881,-2.306662,-1.116976,-0.961238, -0.164191,0.153328,-0.974439,-2.566746,-1.211312,-1.167101, 0.07657,0.16758,-0.982881,-2.306662,-1.116976,-0.961238, -0.955382,-0.23808,-0.174826,-2.462835,-1.3055,-0.966395, -0.164191,0.153328,-0.974439,-2.566746,-1.211312,-1.167101, -0.955382,-0.23808,-0.174826,-2.462835,-1.3055,-0.966395, 0.137764,-0.289893,-0.947092,-2.591357,-1.510845,-0.88547, -0.164191,0.153328,-0.974439,-2.566746,-1.211312,-1.167101, 0.137764,-0.289893,-0.947092,-2.591357,-1.510845,-0.88547, 0.79444,0.150524,0.588394,-2.687162,-1.539807,-0.988048, -0.363523,-0.150625,0.919327,1.921881,-2.157616,-0.692678, -0.914496,-0.253608,0.315247,1.945206,-2.015769,-0.672724, -0.53197,-0.108751,0.839751,1.747671,-2.067518,-0.638841, -0.363523,-0.150625,0.919327,1.921881,-2.157616,-0.692678, -0.53197,-0.108751,0.839751,1.747671,-2.067518,-0.638841, -0.570406,-0.192005,0.798606,1.772999,-2.230292,-0.64494, 0.546571,-0.125171,0.828005,2.069379,1.727818,-0.212746, -0.385788,0.922588,0,2.042206,1.777154,0, 0.756976,-0.653442,0,2.128139,1.788397,0, 0.546571,-0.125171,0.828005,2.069379,1.727818,-0.212746, 0.756976,-0.653442,0,2.128139,1.788397,0, 0.547549,-0.279581,-0.788686,2.13239,1.755821,-0.180271, 0.726897,-0.546446,-0.415953,-2.955052,-1.49684,-1.128812, -0.279485,0.127803,-0.951606,-2.725776,-1.214862,-1.190384, -0.234266,0.044111,-0.971171,-2.862576,-1.546894,-1.117139, 0.776291,-0.374868,-0.5068,-3.23261,-1.834299,-1.087832, 0.356923,-0.210291,-0.910156,-3.357996,-1.811803,-0.975625, -0.596319,-0.021767,-0.802452,-3.188954,-1.408279,-0.963611, 0.776291,-0.374868,-0.5068,-3.23261,-1.834299,-1.087832, -0.596319,-0.021767,-0.802452,-3.188954,-1.408279,-0.963611, -0.390861,0.032481,-0.919876,-3.063133,-1.440555,-1.090926, 0.726897,-0.546446,-0.415953,-2.955052,-1.49684,-1.128812, -0.390861,0.032481,-0.919876,-3.063133,-1.440555,-1.090926, -0.387051,0.087837,-0.917865,-2.982676,-1.264649,-1.133596, 0.726897,-0.546446,-0.415953,-2.955052,-1.49684,-1.128812, -0.387051,0.087837,-0.917865,-2.982676,-1.264649,-1.133596, -0.279485,0.127803,-0.951606,-2.725776,-1.214862,-1.190384, -0.032036,-0.072305,-0.996868,-3.342096,-1.533989,-0.921628, -0.086361,-0.084973,-0.992634,-3.36599,-1.48517,-0.888076, -0.811102,-0.12903,-0.570495,-3.319817,-1.365015,-0.886015, -0.032036,-0.072305,-0.996868,-3.342096,-1.533989,-0.921628, -0.811102,-0.12903,-0.570495,-3.319817,-1.365015,-0.886015, -0.596319,-0.021767,-0.802452,-3.188954,-1.408279,-0.963611, 0.356923,-0.210291,-0.910156,-3.357996,-1.811803,-0.975625, -0.032036,-0.072305,-0.996868,-3.342096,-1.533989,-0.921628, -0.596319,-0.021767,-0.802452,-3.188954,-1.408279,-0.963611, -0.807765,-0.096776,-0.581507,-2.892438,-1.95081,-0.87812, 0.048753,-0.975535,-0.21437,-2.734184,-1.717948,-0.749581, 0.43907,-0.579988,-0.686171,-2.811581,-1.79821,-0.712737, -0.807765,-0.096776,-0.581507,-2.892438,-1.95081,-0.87812, 0.43907,-0.579988,-0.686171,-2.811581,-1.79821,-0.712737, 0.982106,-0.010346,-0.188044,-2.964215,-1.978727,-0.776572, -0.807765,-0.096776,-0.581507,-2.892438,-1.95081,-0.87812, 0.26198,0.048424,0.963858,-2.837147,-1.791733,-0.921563, 0.048753,-0.975535,-0.21437,-2.734184,-1.717948,-0.749581, 0.866897,-0.268351,-0.420091,-3.030605,-2.311222,-0.88433, 0.773659,-0.235087,0.588375,-3.144012,-2.333635,-0.829994, -0.065687,-0.249194,0.966223,-3.132772,-2.528669,-0.848639, 0.866897,-0.268351,-0.420091,-3.030605,-2.311222,-0.88433, -0.065687,-0.249194,0.966223,-3.132772,-2.528669,-0.848639, 0.886562,-0.46255,-0.007485,-3.04661,-2.510881,-0.900772, 0.517272,-0.552302,-0.653753,-3.302419,-3.017921,-1.128514, -0.020456,0.943466,-0.330837,-3.32033,-2.827513,-1.063914, 0.030762,-0.124297,0.991768,-3.26181,-2.821069,-1.088218, 0.517272,-0.552302,-0.653753,-3.302419,-3.017921,-1.128514, 0.030762,-0.124297,0.991768,-3.26181,-2.821069,-1.088218, 0.753698,-0.027204,0.656657,-3.223286,-3.00178,-1.126176, -0.661663,-0.02548,-0.749368,-3.107105,-2.947818,-1.092235, -0.753891,0.130682,-0.643872,-3.141072,-2.785287,-1.032318, -0.156071,0.243426,-0.95728,-3.053267,-2.764905,-1.043008, -0.661663,-0.02548,-0.749368,-3.107105,-2.947818,-1.092235, -0.156071,0.243426,-0.95728,-3.053267,-2.764905,-1.043008, -0.080858,0.024731,-0.996419,-2.986345,-2.93377,-1.087679, -0.080858,0.024731,-0.996419,-2.986345,-2.93377,-1.087679, -0.156071,0.243426,-0.95728,-3.053267,-2.764905,-1.043008, 0.484364,0.195734,-0.85269,-3.016419,-2.765091,-0.966671, -0.080858,0.024731,-0.996419,-2.986345,-2.93377,-1.087679, 0.484364,0.195734,-0.85269,-3.016419,-2.765091,-0.966671, 0.507452,0.36284,-0.781563,-2.946527,-2.939327,-0.986343, 0.517272,-0.552302,-0.653753,-3.302419,-3.017921,-1.128514, 0.753698,-0.027204,0.656657,-3.223286,-3.00178,-1.126176, 0.121953,0.140869,-0.982488,-3.301857,-3.074776,-1.114869, 0.121953,0.140869,-0.982488,-3.301857,-3.074776,-1.114869, 0.913315,0.39776,0.087427,-3.227676,-3.14166,-1.103969, 0.170703,0.25395,-0.952035,-3.316551,-3.168932,-1.121229, 0.170703,0.25395,-0.952035,-3.316551,-3.168932,-1.121229, 0.913315,0.39776,0.087427,-3.227676,-3.14166,-1.103969, 0.977763,0.208696,-0.020643,-3.217306,-3.187686,-1.075214, -0.080858,0.024731,-0.996419,-2.986345,-2.93377,-1.087679, 0.507452,0.36284,-0.781563,-2.946527,-2.939327,-0.986343, 0.737412,0.542596,-0.402261,-2.884711,-3.063896,-0.993766, -0.080858,0.024731,-0.996419,-2.986345,-2.93377,-1.087679, 0.737412,0.542596,-0.402261,-2.884711,-3.063896,-0.993766, 0.637284,0.689194,-0.344791,-2.90901,-3.084482,-1.089147, -0.661663,-0.02548,-0.749368,-3.107105,-2.947818,-1.092235, -0.833016,0.038682,-0.551896,-3.177108,-2.979305,-1.139084, -0.637764,0.107242,-0.76273,-3.196508,-2.788166,-1.045431, -0.661663,-0.02548,-0.749368,-3.107105,-2.947818,-1.092235, -0.637764,0.107242,-0.76273,-3.196508,-2.788166,-1.045431, -0.753891,0.130682,-0.643872,-3.141072,-2.785287,-1.032318, 0.753698,-0.027204,0.656657,-3.223286,-3.00178,-1.126176, 0.030762,-0.124297,0.991768,-3.26181,-2.821069,-1.088218, -0.637764,0.107242,-0.76273,-3.196508,-2.788166,-1.045431, 0.753698,-0.027204,0.656657,-3.223286,-3.00178,-1.126176, -0.637764,0.107242,-0.76273,-3.196508,-2.788166,-1.045431, -0.833016,0.038682,-0.551896,-3.177108,-2.979305,-1.139084, 0.197648,0.486888,-0.850809,-3.333954,-3.058673,-0.974748, 0.121953,0.140869,-0.982488,-3.301857,-3.074776,-1.114869, 0.170703,0.25395,-0.952035,-3.316551,-3.168932,-1.121229, 0.197648,0.486888,-0.850809,-3.333954,-3.058673,-0.974748, 0.170703,0.25395,-0.952035,-3.316551,-3.168932,-1.121229, -0.67011,-0.018974,-0.742019,-3.330406,-3.18519,-0.950058, -0.67011,-0.018974,-0.742019,-3.330406,-3.18519,-0.950058, 0.170703,0.25395,-0.952035,-3.316551,-3.168932,-1.121229, 0.977763,0.208696,-0.020643,-3.217306,-3.187686,-1.075214, -0.67011,-0.018974,-0.742019,-3.330406,-3.18519,-0.950058, 0.977763,0.208696,-0.020643,-3.217306,-3.187686,-1.075214, 0.163153,0.19945,-0.96623,-3.223246,-3.225388,-0.976573, -0.178214,-0.110838,0.977729,-3.294389,-3.166225,-0.842823, -0.67011,-0.018974,-0.742019,-3.330406,-3.18519,-0.950058, 0.163153,0.19945,-0.96623,-3.223246,-3.225388,-0.976573, -0.178214,-0.110838,0.977729,-3.294389,-3.166225,-0.842823, 0.163153,0.19945,-0.96623,-3.223246,-3.225388,-0.976573, -0.948594,-0.185732,0.256269,-3.11957,-3.183977,-0.870739, 0.197648,0.486888,-0.850809,-3.333954,-3.058673,-0.974748, -0.67011,-0.018974,-0.742019,-3.330406,-3.18519,-0.950058, -0.178214,-0.110838,0.977729,-3.294389,-3.166225,-0.842823, 0.197648,0.486888,-0.850809,-3.333954,-3.058673,-0.974748, -0.178214,-0.110838,0.977729,-3.294389,-3.166225,-0.842823, -0.674431,0.094186,0.732306,-3.256731,-3.032131,-0.849693, -0.674431,0.094186,0.732306,-3.256731,-3.032131,-0.849693, -0.556404,-0.045521,0.829664,-3.300372,-2.795728,-0.878984, -0.978077,-0.070308,0.196017,-3.339637,-2.846837,-0.966368, -0.674431,0.094186,0.732306,-3.256731,-3.032131,-0.849693, -0.978077,-0.070308,0.196017,-3.339637,-2.846837,-0.966368, 0.197648,0.486888,-0.850809,-3.333954,-3.058673,-0.974748, -0.080858,0.024731,-0.996419,-2.986345,-2.93377,-1.087679, 0.637284,0.689194,-0.344791,-2.90901,-3.084482,-1.089147, 0.503689,0.453945,-0.735004,-3.03125,-3.09594,-1.106355, -0.080858,0.024731,-0.996419,-2.986345,-2.93377,-1.087679, 0.503689,0.453945,-0.735004,-3.03125,-3.09594,-1.106355, -0.661663,-0.02548,-0.749368,-3.107105,-2.947818,-1.092235, 0.503689,0.453945,-0.735004,-3.03125,-3.09594,-1.106355, -0.039603,0.339955,-0.939607,-3.121673,-3.120319,-1.136456, -0.833016,0.038682,-0.551896,-3.177108,-2.979305,-1.139084, 0.503689,0.453945,-0.735004,-3.03125,-3.09594,-1.106355, -0.833016,0.038682,-0.551896,-3.177108,-2.979305,-1.139084, -0.661663,-0.02548,-0.749368,-3.107105,-2.947818,-1.092235, -0.833016,0.038682,-0.551896,-3.177108,-2.979305,-1.139084, -0.039603,0.339955,-0.939607,-3.121673,-3.120319,-1.136456, -0.377491,-0.043727,-0.92498,-3.169546,-3.135273,-1.128247, -0.833016,0.038682,-0.551896,-3.177108,-2.979305,-1.139084, -0.377491,-0.043727,-0.92498,-3.169546,-3.135273,-1.128247, 0.753698,-0.027204,0.656657,-3.223286,-3.00178,-1.126176, 0.913315,0.39776,0.087427,-3.227676,-3.14166,-1.103969, -0.377491,-0.043727,-0.92498,-3.169546,-3.135273,-1.128247, 0.977763,0.208696,-0.020643,-3.217306,-3.187686,-1.075214, 0.121953,0.140869,-0.982488,-3.301857,-3.074776,-1.114869, 0.753698,-0.027204,0.656657,-3.223286,-3.00178,-1.126176, -0.377491,-0.043727,-0.92498,-3.169546,-3.135273,-1.128247, 0.121953,0.140869,-0.982488,-3.301857,-3.074776,-1.114869, -0.377491,-0.043727,-0.92498,-3.169546,-3.135273,-1.128247, 0.913315,0.39776,0.087427,-3.227676,-3.14166,-1.103969, 0.121953,0.140869,-0.982488,-3.301857,-3.074776,-1.114869, 0.197648,0.486888,-0.850809,-3.333954,-3.058673,-0.974748, 0.517272,-0.552302,-0.653753,-3.302419,-3.017921,-1.128514, -0.978077,-0.070308,0.196017,-3.339637,-2.846837,-0.966368, -0.020456,0.943466,-0.330837,-3.32033,-2.827513,-1.063914, 0.517272,-0.552302,-0.653753,-3.302419,-3.017921,-1.128514, -0.978077,-0.070308,0.196017,-3.339637,-2.846837,-0.966368, 0.517272,-0.552302,-0.653753,-3.302419,-3.017921,-1.128514, 0.197648,0.486888,-0.850809,-3.333954,-3.058673,-0.974748, 0.737412,0.542596,-0.402261,-2.884711,-3.063896,-0.993766, 0.507452,0.36284,-0.781563,-2.946527,-2.939327,-0.986343, 0.72114,0.258272,0.642848,-3.008412,-2.89976,-0.904635, 0.737412,0.542596,-0.402261,-2.884711,-3.063896,-0.993766, 0.72114,0.258272,0.642848,-3.008412,-2.89976,-0.904635, 0.684558,0.361154,0.633205,-2.928681,-3.072892,-0.924772, -0.178214,-0.110838,0.977729,-3.294389,-3.166225,-0.842823, -0.948594,-0.185732,0.256269,-3.11957,-3.183977,-0.870739, -0.058899,-0.007802,0.998233,-3.166971,-3.002766,-0.812106, -0.178214,-0.110838,0.977729,-3.294389,-3.166225,-0.842823, -0.058899,-0.007802,0.998233,-3.166971,-3.002766,-0.812106, -0.674431,0.094186,0.732306,-3.256731,-3.032131,-0.849693, -0.948594,-0.185732,0.256269,-3.11957,-3.183977,-0.870739, 0.308087,0.149605,0.939521,-3.011987,-3.092,-0.860973, 0.403627,0.101273,0.909301,-3.06981,-2.928755,-0.845236, -0.948594,-0.185732,0.256269,-3.11957,-3.183977,-0.870739, 0.403627,0.101273,0.909301,-3.06981,-2.928755,-0.845236, -0.058899,-0.007802,0.998233,-3.166971,-3.002766,-0.812106, 0.308087,0.149605,0.939521,-3.011987,-3.092,-0.860973, 0.684558,0.361154,0.633205,-2.928681,-3.072892,-0.924772, 0.72114,0.258272,0.642848,-3.008412,-2.89976,-0.904635, 0.308087,0.149605,0.939521,-3.011987,-3.092,-0.860973, 0.72114,0.258272,0.642848,-3.008412,-2.89976,-0.904635, 0.403627,0.101273,0.909301,-3.06981,-2.928755,-0.845236, -0.058899,-0.007802,0.998233,-3.166971,-3.002766,-0.812106, 0.403627,0.101273,0.909301,-3.06981,-2.928755,-0.845236, 0.313529,0.096126,0.944701,-3.137383,-2.776449,-0.844117, -0.058899,-0.007802,0.998233,-3.166971,-3.002766,-0.812106, 0.313529,0.096126,0.944701,-3.137383,-2.776449,-0.844117, -0.121543,0.046,0.99152,-3.184812,-2.768053,-0.850127, 0.313529,0.096126,0.944701,-3.137383,-2.776449,-0.844117, 0.403627,0.101273,0.909301,-3.06981,-2.928755,-0.845236, 0.72114,0.258272,0.642848,-3.008412,-2.89976,-0.904635, 0.313529,0.096126,0.944701,-3.137383,-2.776449,-0.844117, 0.72114,0.258272,0.642848,-3.008412,-2.89976,-0.904635, 0.761939,0.13671,0.633055,-3.040038,-2.780893,-0.914614, -0.674431,0.094186,0.732306,-3.256731,-3.032131,-0.849693, -0.058899,-0.007802,0.998233,-3.166971,-3.002766,-0.812106, -0.121543,0.046,0.99152,-3.184812,-2.768053,-0.850127, -0.674431,0.094186,0.732306,-3.256731,-3.032131,-0.849693, -0.121543,0.046,0.99152,-3.184812,-2.768053,-0.850127, -0.556404,-0.045521,0.829664,-3.300372,-2.795728,-0.878984, 0.507452,0.36284,-0.781563,-2.946527,-2.939327,-0.986343, 0.484364,0.195734,-0.85269,-3.016419,-2.765091,-0.966671, 0.761939,0.13671,0.633055,-3.040038,-2.780893,-0.914614, 0.507452,0.36284,-0.781563,-2.946527,-2.939327,-0.986343, 0.761939,0.13671,0.633055,-3.040038,-2.780893,-0.914614, 0.72114,0.258272,0.642848,-3.008412,-2.89976,-0.904635, -0.156071,0.243426,-0.95728,-3.053267,-2.764905,-1.043008, -0.753891,0.130682,-0.643872,-3.141072,-2.785287,-1.032318, -0.440199,0.219838,-0.870572,-3.162498,-2.556375,-1.058409, -0.156071,0.243426,-0.95728,-3.053267,-2.764905,-1.043008, -0.440199,0.219838,-0.870572,-3.162498,-2.556375,-1.058409, -0.775358,0.344514,-0.529274,-3.078699,-2.553982,-1.046834, -0.020456,0.943466,-0.330837,-3.32033,-2.827513,-1.063914, -0.978077,-0.070308,0.196017,-3.339637,-2.846837,-0.966368, -0.326843,-0.236652,0.91497,-3.372066,-2.569159,-0.904785, -0.020456,0.943466,-0.330837,-3.32033,-2.827513,-1.063914, -0.326843,-0.236652,0.91497,-3.372066,-2.569159,-0.904785, -0.354049,-0.10839,-0.928925,-3.347304,-2.573628,-0.955211, 0.030762,-0.124297,0.991768,-3.26181,-2.821069,-1.088218, -0.020456,0.943466,-0.330837,-3.32033,-2.827513,-1.063914, -0.354049,-0.10839,-0.928925,-3.347304,-2.573628,-0.955211, 0.030762,-0.124297,0.991768,-3.26181,-2.821069,-1.088218, -0.354049,-0.10839,-0.928925,-3.347304,-2.573628,-0.955211, 0.433219,-0.09361,-0.896414,-3.251541,-2.56405,-1.023627, -0.637764,0.107242,-0.76273,-3.196508,-2.788166,-1.045431, 0.030762,-0.124297,0.991768,-3.26181,-2.821069,-1.088218, 0.433219,-0.09361,-0.896414,-3.251541,-2.56405,-1.023627, -0.637764,0.107242,-0.76273,-3.196508,-2.788166,-1.045431, 0.433219,-0.09361,-0.896414,-3.251541,-2.56405,-1.023627, -0.440199,0.219838,-0.870572,-3.162498,-2.556375,-1.058409, -0.753891,0.130682,-0.643872,-3.141072,-2.785287,-1.032318, -0.637764,0.107242,-0.76273,-3.196508,-2.788166,-1.045431, -0.440199,0.219838,-0.870572,-3.162498,-2.556375,-1.058409, -0.775358,0.344514,-0.529274,-3.078699,-2.553982,-1.046834, -0.501053,-0.05946,-0.863371,-3.022819,-2.52224,-0.979148, 0.484364,0.195734,-0.85269,-3.016419,-2.765091,-0.966671, -0.775358,0.344514,-0.529274,-3.078699,-2.553982,-1.046834, 0.484364,0.195734,-0.85269,-3.016419,-2.765091,-0.966671, -0.156071,0.243426,-0.95728,-3.053267,-2.764905,-1.043008, 0.255431,-0.055528,0.965231,-3.297886,-2.54902,-0.861657, -0.326843,-0.236652,0.91497,-3.372066,-2.569159,-0.904785, -0.978077,-0.070308,0.196017,-3.339637,-2.846837,-0.966368, 0.255431,-0.055528,0.965231,-3.297886,-2.54902,-0.861657, -0.978077,-0.070308,0.196017,-3.339637,-2.846837,-0.966368, -0.556404,-0.045521,0.829664,-3.300372,-2.795728,-0.878984, -0.215783,-0.895808,0.388544,-3.240554,-2.555467,-0.856262, 0.255431,-0.055528,0.965231,-3.297886,-2.54902,-0.861657, -0.556404,-0.045521,0.829664,-3.300372,-2.795728,-0.878984, -0.215783,-0.895808,0.388544,-3.240554,-2.555467,-0.856262, -0.556404,-0.045521,0.829664,-3.300372,-2.795728,-0.878984, -0.121543,0.046,0.99152,-3.184812,-2.768053,-0.850127, -0.065687,-0.249194,0.966223,-3.132772,-2.528669,-0.848639, -0.215783,-0.895808,0.388544,-3.240554,-2.555467,-0.856262, -0.121543,0.046,0.99152,-3.184812,-2.768053,-0.850127, -0.065687,-0.249194,0.966223,-3.132772,-2.528669,-0.848639, -0.121543,0.046,0.99152,-3.184812,-2.768053,-0.850127, 0.313529,0.096126,0.944701,-3.137383,-2.776449,-0.844117, 0.886562,-0.46255,-0.007485,-3.04661,-2.510881,-0.900772, -0.065687,-0.249194,0.966223,-3.132772,-2.528669,-0.848639, 0.313529,0.096126,0.944701,-3.137383,-2.776449,-0.844117, 0.886562,-0.46255,-0.007485,-3.04661,-2.510881,-0.900772, 0.313529,0.096126,0.944701,-3.137383,-2.776449,-0.844117, 0.761939,0.13671,0.633055,-3.040038,-2.780893,-0.914614, -0.501053,-0.05946,-0.863371,-3.022819,-2.52224,-0.979148, 0.886562,-0.46255,-0.007485,-3.04661,-2.510881,-0.900772, 0.761939,0.13671,0.633055,-3.040038,-2.780893,-0.914614, -0.501053,-0.05946,-0.863371,-3.022819,-2.52224,-0.979148, 0.761939,0.13671,0.633055,-3.040038,-2.780893,-0.914614, 0.484364,0.195734,-0.85269,-3.016419,-2.765091,-0.966671, -0.823768,0.005745,-0.566899,-3.27979,-1.162072,-0.784602, -0.799953,-0.096213,-0.592299,-3.27751,-1.177346,-0.9153, -0.811102,-0.12903,-0.570495,-3.319817,-1.365015,-0.886015, -0.823768,0.005745,-0.566899,-3.27979,-1.162072,-0.784602, -0.811102,-0.12903,-0.570495,-3.319817,-1.365015,-0.886015, -0.782249,0.198377,-0.590536,-3.335942,-1.365685,-0.72459, -0.838192,0.000365,-0.545375,-3.25121,-0.948205,-0.819868, -0.984416,-0.175855,-0.000915,-3.283698,-0.730967,-0.793898, -0.84112,-0.026303,-0.540209,-3.233333,-0.683782,-1.015512, -0.838192,0.000365,-0.545375,-3.25121,-0.948205,-0.819868, -0.84112,-0.026303,-0.540209,-3.233333,-0.683782,-1.015512, -0.813168,-0.06637,-0.578232,-3.238094,-0.979377,-0.961631, -0.823768,0.005745,-0.566899,-3.27979,-1.162072,-0.784602, -0.838192,0.000365,-0.545375,-3.25121,-0.948205,-0.819868, -0.813168,-0.06637,-0.578232,-3.238094,-0.979377,-0.961631, -0.823768,0.005745,-0.566899,-3.27979,-1.162072,-0.784602, -0.813168,-0.06637,-0.578232,-3.238094,-0.979377,-0.961631, -0.799953,-0.096213,-0.592299,-3.27751,-1.177346,-0.9153, -0.743901,0.102645,-0.66036,-3.415655,-0.308965,-0.671045, -0.976177,-0.17359,0.130171,-3.406618,-0.343461,-0.746456, -0.984416,-0.175855,-0.000915,-3.283698,-0.730967,-0.793898, -0.472479,0.093412,-0.876377,-3.556552,0.704883,-0.28063, -0.43302,-0.02622,-0.901003,-3.57817,0.837714,-0.288502, -0.946902,-0.290276,0.138264,-3.664355,0.932851,-0.370749, -0.472479,0.093412,-0.876377,-3.556552,0.704883,-0.28063, -0.946902,-0.290276,0.138264,-3.664355,0.932851,-0.370749, -0.982633,-0.143429,0.11773,-3.631292,0.701013,-0.420276, -0.971344,0.144305,-0.188856,-3.536654,0.442277,-0.322, -0.472479,0.093412,-0.876377,-3.556552,0.704883,-0.28063, -0.982633,-0.143429,0.11773,-3.631292,0.701013,-0.420276, -0.971344,0.144305,-0.188856,-3.536654,0.442277,-0.322, -0.982633,-0.143429,0.11773,-3.631292,0.701013,-0.420276, -0.995584,-0.070631,0.061842,-3.570384,0.385564,-0.52448, -0.923845,0.18432,-0.335466,-3.51684,0.149002,-0.430359, -0.971344,0.144305,-0.188856,-3.536654,0.442277,-0.322, -0.995584,-0.070631,0.061842,-3.570384,0.385564,-0.52448, -0.923845,0.18432,-0.335466,-3.51684,0.149002,-0.430359, -0.995584,-0.070631,0.061842,-3.570384,0.385564,-0.52448, -0.997475,-0.070819,0.005318,-3.520188,0.140164,-0.618561, -0.908258,0.139498,-0.394471,-3.470778,-0.078218,-0.546398, -0.923845,0.18432,-0.335466,-3.51684,0.149002,-0.430359, -0.997475,-0.070819,0.005318,-3.520188,0.140164,-0.618561, -0.908258,0.139498,-0.394471,-3.470778,-0.078218,-0.546398, -0.997475,-0.070819,0.005318,-3.520188,0.140164,-0.618561, -0.980175,-0.184883,0.071243,-3.458251,-0.12595,-0.731712, -0.743901,0.102645,-0.66036,-3.415655,-0.308965,-0.671045, -0.908258,0.139498,-0.394471,-3.470778,-0.078218,-0.546398, -0.980175,-0.184883,0.071243,-3.458251,-0.12595,-0.731712, -0.743901,0.102645,-0.66036,-3.415655,-0.308965,-0.671045, -0.980175,-0.184883,0.071243,-3.458251,-0.12595,-0.731712, -0.976177,-0.17359,0.130171,-3.406618,-0.343461,-0.746456, -0.996668,0.081567,0,-3.623861,0.911561,0, -0.946902,-0.290276,0.138264,-3.664355,0.932851,-0.370749, -0.43302,-0.02622,-0.901003,-3.57817,0.837714,-0.288502, -0.996668,0.081567,0,-3.623861,0.911561,0, -0.43302,-0.02622,-0.901003,-3.57817,0.837714,-0.288502, -0.989171,0.146765,0,-3.599077,0.796217,0, -0.844095,-0.536194,0,-3.601668,1.293049,0, -0.848349,-0.120539,-0.515533,-3.709827,1.417763,0, -0.880002,-0.033987,-0.473752,-3.709741,1.351194,-0.211745, -0.844095,-0.536194,0,-3.601668,1.293049,0, -0.880002,-0.033987,-0.473752,-3.709741,1.351194,-0.211745, -0.870331,0.069096,-0.487595,-3.701634,1.27265,-0.270469, -0.946116,-0.323827,0,-3.608593,1.163581,0, -0.844095,-0.536194,0,-3.601668,1.293049,0, -0.870331,0.069096,-0.487595,-3.701634,1.27265,-0.270469, -0.946116,-0.323827,0,-3.608593,1.163581,0, -0.870331,0.069096,-0.487595,-3.701634,1.27265,-0.270469, -0.822733,0.223687,-0.522565,-3.695872,1.156978,-0.316829, -0.997181,-0.075036,0,-3.622326,1.005378,0, -0.946116,-0.323827,0,-3.608593,1.163581,0, -0.822733,0.223687,-0.522565,-3.695872,1.156978,-0.316829, -0.997181,-0.075036,0,-3.622326,1.005378,0, -0.822733,0.223687,-0.522565,-3.695872,1.156978,-0.316829, -0.938447,-0.345423,0,-3.672431,1.044224,-0.364991, -0.996668,0.081567,0,-3.623861,0.911561,0, -0.997181,-0.075036,0,-3.622326,1.005378,0, -0.938447,-0.345423,0,-3.672431,1.044224,-0.364991, -0.996668,0.081567,0,-3.623861,0.911561,0, -0.938447,-0.345423,0,-3.672431,1.044224,-0.364991, -0.946902,-0.290276,0.138264,-3.664355,0.932851,-0.370749, -0.999862,-0.016634,0,-3.900566,1.002504,0, -0.891992,-0.016938,-0.451734,-3.88734,1.003866,-0.057635, -0.888551,-0.077176,-0.452239,-3.84447,0.498176,-0.053132, -0.999862,-0.016634,0,-3.900566,1.002504,0, -0.888551,-0.077176,-0.452239,-3.84447,0.498176,-0.053132, -0.996511,-0.083465,-0.000062,-3.856649,0.496801,0, -0.964752,0.26316,0,-3.87514,1.480358,0, -0.860797,0.234294,-0.451812,-3.86082,1.479723,-0.062137, -0.891992,-0.016938,-0.451734,-3.88734,1.003866,-0.057635, -0.964752,0.26316,0,-3.87514,1.480358,0, -0.891992,-0.016938,-0.451734,-3.88734,1.003866,-0.057635, -0.999862,-0.016634,0,-3.900566,1.002504,0, -0.766357,0.642415,0,-3.712832,1.794492,0, -0.686439,0.576002,-0.443872,-3.698925,1.787941,-0.06664, -0.860797,0.234294,-0.451812,-3.86082,1.479723,-0.062137, -0.766357,0.642415,0,-3.712832,1.794492,0, -0.860797,0.234294,-0.451812,-3.86082,1.479723,-0.062137, -0.964752,0.26316,0,-3.87514,1.480358,0, -0.410619,0.911807,0,-3.47843,1.975409,0, -0.369855,0.817227,-0.441981,-3.469715,1.961504,-0.071141, -0.686439,0.576002,-0.443872,-3.698925,1.787941,-0.06664, -0.410619,0.911807,0,-3.47843,1.975409,0, -0.686439,0.576002,-0.443872,-3.698925,1.787941,-0.06664, -0.766357,0.642415,0,-3.712832,1.794492,0, -0.433128,-0.901332,0,-3.242148,2.021387,0, 0.011581,0.887039,-0.461548,-3.238225,2.005405,-0.075645, -0.369855,0.817227,-0.441981,-3.469715,1.961504,-0.071141, -0.433128,-0.901332,0,-3.242148,2.021387,0, -0.369855,0.817227,-0.441981,-3.469715,1.961504,-0.071141, -0.410619,0.911807,0,-3.47843,1.975409,0, -0.891992,-0.016938,-0.451734,-3.88734,1.003866,-0.057635, -0.548359,-0.017804,-0.836053,-3.851206,1.007586,-0.099831, -0.545298,-0.056465,-0.836338,-3.811194,0.501935,-0.092033, -0.891992,-0.016938,-0.451734,-3.88734,1.003866,-0.057635, -0.545298,-0.056465,-0.836338,-3.811194,0.501935,-0.092033, -0.888551,-0.077176,-0.452239,-3.84447,0.498176,-0.053132, -0.860797,0.234294,-0.451812,-3.86082,1.479723,-0.062137, -0.530021,0.13773,-0.836725,-3.821694,1.477989,-0.107631, -0.548359,-0.017804,-0.836053,-3.851206,1.007586,-0.099831, -0.860797,0.234294,-0.451812,-3.86082,1.479723,-0.062137, -0.548359,-0.017804,-0.836053,-3.851206,1.007586,-0.099831, -0.891992,-0.016938,-0.451734,-3.88734,1.003866,-0.057635, -0.686439,0.576002,-0.443872,-3.698925,1.787941,-0.06664, -0.429713,0.351913,-0.831568,-3.660928,1.770041,-0.115431, -0.530021,0.13773,-0.836725,-3.821694,1.477989,-0.107631, -0.686439,0.576002,-0.443872,-3.698925,1.787941,-0.06664, -0.530021,0.13773,-0.836725,-3.821694,1.477989,-0.107631, -0.860797,0.234294,-0.451812,-3.86082,1.479723,-0.062137, -0.369855,0.817227,-0.441981,-3.469715,1.961504,-0.071141, -0.240211,0.502412,-0.830591,-3.445903,1.923509,-0.123229, -0.429713,0.351913,-0.831568,-3.660928,1.770041,-0.115431, -0.369855,0.817227,-0.441981,-3.469715,1.961504,-0.071141, -0.429713,0.351913,-0.831568,-3.660928,1.770041,-0.115431, -0.686439,0.576002,-0.443872,-3.698925,1.787941,-0.06664, 0.011581,0.887039,-0.461548,-3.238225,2.005405,-0.075645, 0.000909,0.669011,-0.743252,-3.227504,1.961738,-0.131029, -0.240211,0.502412,-0.830591,-3.445903,1.923509,-0.123229, 0.011581,0.887039,-0.461548,-3.238225,2.005405,-0.075645, -0.240211,0.502412,-0.830591,-3.445903,1.923509,-0.123229, -0.369855,0.817227,-0.441981,-3.469715,1.961504,-0.071141, -0.548359,-0.017804,-0.836053,-3.851206,1.007586,-0.099831, 0.000763,-0.01871,-0.999825,-3.80184,1.012668,-0.115288, 0.002291,-0.021629,-0.999763,-3.765736,0.50707,-0.106281, -0.548359,-0.017804,-0.836053,-3.851206,1.007586,-0.099831, 0.002291,-0.021629,-0.999763,-3.765736,0.50707,-0.106281, -0.545298,-0.056465,-0.836338,-3.811194,0.501935,-0.092033, -0.530021,0.13773,-0.836725,-3.821694,1.477989,-0.107631, -0.004656,-0.025693,-0.999659,-3.768245,1.475619,-0.124295, 0.000763,-0.01871,-0.999825,-3.80184,1.012668,-0.115288, -0.530021,0.13773,-0.836725,-3.821694,1.477989,-0.107631, 0.000763,-0.01871,-0.999825,-3.80184,1.012668,-0.115288, -0.548359,-0.017804,-0.836053,-3.851206,1.007586,-0.099831, -0.429713,0.351913,-0.831568,-3.660928,1.770041,-0.115431, -0.020872,-0.032587,-0.999251,-3.609021,1.745588,-0.133304, -0.004656,-0.025693,-0.999659,-3.768245,1.475619,-0.124295, -0.429713,0.351913,-0.831568,-3.660928,1.770041,-0.115431, -0.004656,-0.025693,-0.999659,-3.768245,1.475619,-0.124295, -0.530021,0.13773,-0.836725,-3.821694,1.477989,-0.107631, -0.240211,0.502412,-0.830591,-3.445903,1.923509,-0.123229, -0.091034,0.391629,-0.915609,-3.413372,1.871604,-0.142309, -0.020872,-0.032587,-0.999251,-3.609021,1.745588,-0.133304, -0.240211,0.502412,-0.830591,-3.445903,1.923509,-0.123229, -0.020872,-0.032587,-0.999251,-3.609021,1.745588,-0.133304, -0.429713,0.351913,-0.831568,-3.660928,1.770041,-0.115431, 0.000909,0.669011,-0.743252,-3.227504,1.961738,-0.131029, -0.091034,0.391629,-0.915609,-3.413372,1.871604,-0.142309, -0.240211,0.502412,-0.830591,-3.445903,1.923509,-0.123229, 0.000763,-0.01871,-0.999825,-3.80184,1.012668,-0.115288, 0.549332,-0.018885,-0.835391,-3.752468,1.017751,-0.099865, 0.549192,0.015162,-0.835559,-3.720269,0.512205,-0.092064, 0.000763,-0.01871,-0.999825,-3.80184,1.012668,-0.115288, 0.549192,0.015162,-0.835559,-3.720269,0.512205,-0.092064, 0.002291,-0.021629,-0.999763,-3.765736,0.50707,-0.106281, -0.004656,-0.025693,-0.999659,-3.768245,1.475619,-0.124295, 0.516335,-0.196022,-0.833651,-3.714787,1.473248,-0.107668, 0.549332,-0.018885,-0.835391,-3.752468,1.017751,-0.099865, -0.004656,-0.025693,-0.999659,-3.768245,1.475619,-0.124295, 0.549332,-0.018885,-0.835391,-3.752468,1.017751,-0.099865, 0.000763,-0.01871,-0.999825,-3.80184,1.012668,-0.115288, -0.020872,-0.032587,-0.999251,-3.609021,1.745588,-0.133304, 0.368421,-0.433142,-0.82259,-3.557104,1.72113,-0.11547, 0.516335,-0.196022,-0.833651,-3.714787,1.473248,-0.107668, -0.020872,-0.032587,-0.999251,-3.609021,1.745588,-0.133304, 0.516335,-0.196022,-0.833651,-3.714787,1.473248,-0.107668, -0.004656,-0.025693,-0.999659,-3.768245,1.475619,-0.124295, -0.091034,0.391629,-0.915609,-3.413372,1.871604,-0.142309, 0.255239,-0.528231,-0.80983,-3.380836,1.819691,-0.123273, 0.368421,-0.433142,-0.82259,-3.557104,1.72113,-0.11547, -0.091034,0.391629,-0.915609,-3.413372,1.871604,-0.142309, 0.368421,-0.433142,-0.82259,-3.557104,1.72113,-0.11547, -0.020872,-0.032587,-0.999251,-3.609021,1.745588,-0.133304, 0.549332,-0.018885,-0.835391,-3.752468,1.017751,-0.099865, 0.892142,-0.018571,-0.451373,-3.716312,1.021474,-0.057693, 0.891325,0.039302,-0.451658,-3.686972,0.515966,-0.053185, 0.549332,-0.018885,-0.835391,-3.752468,1.017751,-0.099865, 0.891325,0.039302,-0.451658,-3.686972,0.515966,-0.053185, 0.549192,0.015162,-0.835559,-3.720269,0.512205,-0.092064, 0.516335,-0.196022,-0.833651,-3.714787,1.473248,-0.107668, 0.843387,-0.305323,-0.442128,-3.675638,1.471512,-0.062201, 0.892142,-0.018571,-0.451373,-3.716312,1.021474,-0.057693, 0.516335,-0.196022,-0.833651,-3.714787,1.473248,-0.107668, 0.892142,-0.018571,-0.451373,-3.716312,1.021474,-0.057693, 0.549332,-0.018885,-0.835391,-3.752468,1.017751,-0.099865, 0.368421,-0.433142,-0.82259,-3.557104,1.72113,-0.11547, 0.589192,-0.69056,-0.4195,-3.519086,1.70322,-0.066709, 0.843387,-0.305323,-0.442128,-3.675638,1.471512,-0.062201, 0.368421,-0.433142,-0.82259,-3.557104,1.72113,-0.11547, 0.843387,-0.305323,-0.442128,-3.675638,1.471512,-0.062201, 0.516335,-0.196022,-0.833651,-3.714787,1.473248,-0.107668, 0.255239,-0.528231,-0.80983,-3.380836,1.819691,-0.123273, 0.389161,-0.829175,-0.401277,-3.357009,1.781675,-0.071216, 0.589192,-0.69056,-0.4195,-3.519086,1.70322,-0.066709, 0.255239,-0.528231,-0.80983,-3.380836,1.819691,-0.123273, 0.589192,-0.69056,-0.4195,-3.519086,1.70322,-0.066709, 0.368421,-0.433142,-0.82259,-3.557104,1.72113,-0.11547, 0.892142,-0.018571,-0.451373,-3.716312,1.021474,-0.057693, 0.999831,-0.018401,-0.000261,-3.703058,1.022838,-0.000069, 0.998889,0.047122,-0.000074,-3.674766,0.517345,-0.000063, 0.892142,-0.018571,-0.451373,-3.716312,1.021474,-0.057693, 0.998889,0.047122,-0.000074,-3.674766,0.517345,-0.000063, 0.891325,0.039302,-0.451658,-3.686972,0.515966,-0.053185, 0.843387,-0.305323,-0.442128,-3.675638,1.471512,-0.062201, 0.941293,-0.337592,-0.000186,-3.661286,1.470876,-0.000074, 0.999831,-0.018401,-0.000261,-3.703058,1.022838,-0.000069, 0.843387,-0.305323,-0.442128,-3.675638,1.471512,-0.062201, 0.999831,-0.018401,-0.000261,-3.703058,1.022838,-0.000069, 0.892142,-0.018571,-0.451373,-3.716312,1.021474,-0.057693, 0.589192,-0.69056,-0.4195,-3.519086,1.70322,-0.066709, -0.153783,-0.988105,0,-3.507689,1.700214,0, 0.941293,-0.337592,-0.000186,-3.661286,1.470876,-0.000074, 0.589192,-0.69056,-0.4195,-3.519086,1.70322,-0.066709, 0.941293,-0.337592,-0.000186,-3.661286,1.470876,-0.000074, 0.843387,-0.305323,-0.442128,-3.675638,1.471512,-0.062201, 0.389161,-0.829175,-0.401277,-3.357009,1.781675,-0.071216, 0.411442,-0.911436,-0.000099,-3.348274,1.767738,-0.000085, -0.153783,-0.988105,0,-3.507689,1.700214,0, 0.389161,-0.829175,-0.401277,-3.357009,1.781675,-0.071216, -0.153783,-0.988105,0,-3.507689,1.700214,0, 0.589192,-0.69056,-0.4195,-3.519086,1.70322,-0.066709, 0.000909,0.669011,-0.743252,-3.227504,1.961738,-0.131029, 0.243464,-0.335965,-0.909864,-3.077669,1.871112,-0.217368, -0.091034,0.391629,-0.915609,-3.413372,1.871604,-0.142309, 0.011581,0.887039,-0.461548,-3.238225,2.005405,-0.075645, -0.433128,-0.901332,0,-3.242148,2.021387,0, 0.012502,-0.999922,0,-3.037562,2.001526,0, 0.011581,0.887039,-0.461548,-3.238225,2.005405,-0.075645, 0.012502,-0.999922,0,-3.037562,2.001526,0, 0.005821,-0.234321,-0.972142,-3.053102,1.96881,-0.051104, 0.000909,0.669011,-0.743252,-3.227504,1.961738,-0.131029, 0.011581,0.887039,-0.461548,-3.238225,2.005405,-0.075645, 0.005821,-0.234321,-0.972142,-3.053102,1.96881,-0.051104, 0.000909,0.669011,-0.743252,-3.227504,1.961738,-0.131029, 0.005821,-0.234321,-0.972142,-3.053102,1.96881,-0.051104, 0.243464,-0.335965,-0.909864,-3.077669,1.871112,-0.217368, 0.243464,-0.335965,-0.909864,-3.077669,1.871112,-0.217368, -0.108631,-0.122719,-0.986478,-3.35851,1.810253,-0.380095, -0.091034,0.391629,-0.915609,-3.413372,1.871604,-0.142309, 0.243464,-0.335965,-0.909864,-3.077669,1.871112,-0.217368, 0.49938,-0.45475,-0.737443,-3.07531,1.846,-0.363149, -0.108631,-0.122719,-0.986478,-3.35851,1.810253,-0.380095, 0.269343,0.329305,-0.904993,4.760921,1.881357,-0.61312, 0.544735,0.449335,-0.708069,4.824747,1.946835,-0.626358, 0.897742,-0.15037,-0.414063,4.852578,1.889721,-0.605031, 0.269343,0.329305,-0.904993,4.760921,1.881357,-0.61312, 0.897742,-0.15037,-0.414063,4.852578,1.889721,-0.605031, 0.397989,0.4494,-0.799778,4.861618,1.854067,-0.618095, 0.721999,0.398917,-0.565316,4.861611,2.001639,-0.621913, 0.264979,0.116702,-0.957166,4.842883,2.021333,-0.638025, 0.312982,-0.015529,-0.949632,4.93588,2.051665,-0.572853, 0.721999,0.398917,-0.565316,4.861611,2.001639,-0.621913, 0.312982,-0.015529,-0.949632,4.93588,2.051665,-0.572853, 0.711192,0.127662,-0.69131,4.935561,2.016016,-0.5857, 0.470021,0.182979,-0.863481,4.991746,2.009819,-0.523206, 0.412833,-0.156453,-0.897269,5.001903,1.914398,-0.486724, 0.872792,-0.115436,-0.474246,4.973133,1.992779,-0.533466, 0.746476,-0.187741,-0.638379,4.926194,1.859813,-0.582137, 0.560378,0.257626,-0.78715,4.944706,1.840663,-0.575374, 0.397989,0.4494,-0.799778,4.861618,1.854067,-0.618095, 0.746476,-0.187741,-0.638379,4.926194,1.859813,-0.582137, 0.397989,0.4494,-0.799778,4.861618,1.854067,-0.618095, 0.897742,-0.15037,-0.414063,4.852578,1.889721,-0.605031, 0.746476,-0.187741,-0.638379,4.926194,1.859813,-0.582137, 0.108828,-0.182644,-0.977137,4.982364,1.8733,-0.53619, 0.661825,0.260115,-0.703085,4.991709,1.844295,-0.520761, 0.746476,-0.187741,-0.638379,4.926194,1.859813,-0.582137, 0.661825,0.260115,-0.703085,4.991709,1.844295,-0.520761, 0.560378,0.257626,-0.78715,4.944706,1.840663,-0.575374, 0.397989,0.4494,-0.799778,4.861618,1.854067,-0.618095, 0.560378,0.257626,-0.78715,4.944706,1.840663,-0.575374, 0.675892,0.137563,-0.724049,4.908019,1.796041,-0.587882, 0.397989,0.4494,-0.799778,4.861618,1.854067,-0.618095, 0.675892,0.137563,-0.724049,4.908019,1.796041,-0.587882, 0.708269,-0.122724,-0.695193,4.852582,1.816115,-0.603105, 0.560378,0.257626,-0.78715,4.944706,1.840663,-0.575374, 0.661825,0.260115,-0.703085,4.991709,1.844295,-0.520761, 0.683237,-0.051725,-0.728363,4.963546,1.783161,-0.553515, 0.560378,0.257626,-0.78715,4.944706,1.840663,-0.575374, 0.683237,-0.051725,-0.728363,4.963546,1.783161,-0.553515, 0.675892,0.137563,-0.724049,4.908019,1.796041,-0.587882, 0.661825,0.260115,-0.703085,4.991709,1.844295,-0.520761, 0.762434,-0.012904,-0.646937,4.983034,1.806343,-0.505779, 0.683237,-0.051725,-0.728363,4.963546,1.783161,-0.553515, 0.661825,0.260115,-0.703085,4.991709,1.844295,-0.520761, 0.431713,0.22912,-0.872427,5.01143,1.875569,-0.463205, 0.762434,-0.012904,-0.646937,4.983034,1.806343,-0.505779, 0.588787,-0.248293,-0.769207,4.918466,2.084725,-0.532713, 0.274422,-0.24433,-0.930051,4.964945,2.053575,-0.499903, 0.470021,0.182979,-0.863481,4.991746,2.009819,-0.523206, 0.588787,-0.248293,-0.769207,4.918466,2.084725,-0.532713, 0.470021,0.182979,-0.863481,4.991746,2.009819,-0.523206, 0.312982,-0.015529,-0.949632,4.93588,2.051665,-0.572853, 0.274422,-0.24433,-0.930051,4.964945,2.053575,-0.499903, 0.017555,-0.142899,-0.989582,5.020077,1.97817,-0.480978, 0.470021,0.182979,-0.863481,4.991746,2.009819,-0.523206, 0.470021,0.182979,-0.863481,4.991746,2.009819,-0.523206, 0.017555,-0.142899,-0.989582,5.020077,1.97817,-0.480978, 0.431713,0.22912,-0.872427,5.01143,1.875569,-0.463205, 0.264979,0.116702,-0.957166,4.842883,2.021333,-0.638025, 0.961046,0.110911,-0.253159,4.825996,2.089176,-0.576083, 0.910294,-0.144636,-0.387873,4.881574,2.094571,-0.539949, 0.264979,0.116702,-0.957166,4.842883,2.021333,-0.638025, 0.910294,-0.144636,-0.387873,4.881574,2.094571,-0.539949, 0.312982,-0.015529,-0.949632,4.93588,2.051665,-0.572853, 0.961046,0.110911,-0.253159,4.825996,2.089176,-0.576083, 0.264979,0.116702,-0.957166,4.842883,2.021333,-0.638025, 0.269343,0.329305,-0.904993,4.760921,1.881357,-0.61312, 0.961046,0.110911,-0.253159,4.825996,2.089176,-0.576083, 0.269343,0.329305,-0.904993,4.760921,1.881357,-0.61312, 0.813293,0.022433,-0.581422,4.788476,2.028047,-0.608619, 0.699393,0.056752,-0.71248,4.751519,2.039658,-0.634134, 0.490646,-0.178293,-0.852923,4.798297,2.118191,-0.591085, 0.961046,0.110911,-0.253159,4.825996,2.089176,-0.576083, 0.699393,0.056752,-0.71248,4.751519,2.039658,-0.634134, 0.961046,0.110911,-0.253159,4.825996,2.089176,-0.576083, 0.813293,0.022433,-0.581422,4.788476,2.028047,-0.608619, 0.490646,-0.178293,-0.852923,4.798297,2.118191,-0.591085, 0.267717,-0.172975,-0.947844,4.872539,2.159259,-0.542891, 0.910294,-0.144636,-0.387873,4.881574,2.094571,-0.539949, 0.490646,-0.178293,-0.852923,4.798297,2.118191,-0.591085, 0.910294,-0.144636,-0.387873,4.881574,2.094571,-0.539949, 0.961046,0.110911,-0.253159,4.825996,2.089176,-0.576083, 0.267717,-0.172975,-0.947844,4.872539,2.159259,-0.542891, -0.028502,-0.108631,-0.993673,4.927885,2.15656,-0.516579, 0.588787,-0.248293,-0.769207,4.918466,2.084725,-0.532713, 0.267717,-0.172975,-0.947844,4.872539,2.159259,-0.542891, 0.588787,-0.248293,-0.769207,4.918466,2.084725,-0.532713, 0.910294,-0.144636,-0.387873,4.881574,2.094571,-0.539949, -0.028502,-0.108631,-0.993673,4.927885,2.15656,-0.516579, -0.064166,-0.189382,-0.979805,5.00244,2.105746,-0.468233, 0.274422,-0.24433,-0.930051,4.964945,2.053575,-0.499903, -0.028502,-0.108631,-0.993673,4.927885,2.15656,-0.516579, 0.274422,-0.24433,-0.930051,4.964945,2.053575,-0.499903, 0.588787,-0.248293,-0.769207,4.918466,2.084725,-0.532713, -0.064166,-0.189382,-0.979805,5.00244,2.105746,-0.468233, 0.781868,0.537364,-0.316105,5.057495,2.002751,-0.451974, 0.017555,-0.142899,-0.989582,5.020077,1.97817,-0.480978, -0.064166,-0.189382,-0.979805,5.00244,2.105746,-0.468233, 0.017555,-0.142899,-0.989582,5.020077,1.97817,-0.480978, 0.274422,-0.24433,-0.930051,4.964945,2.053575,-0.499903, 0.781868,0.537364,-0.316105,5.057495,2.002751,-0.451974, 0.89264,0.34991,-0.284178,5.075994,1.900999,-0.443793, 0.431713,0.22912,-0.872427,5.01143,1.875569,-0.463205, 0.781868,0.537364,-0.316105,5.057495,2.002751,-0.451974, 0.431713,0.22912,-0.872427,5.01143,1.875569,-0.463205, 0.017555,-0.142899,-0.989582,5.020077,1.97817,-0.480978, 0.89264,0.34991,-0.284178,5.075994,1.900999,-0.443793, 0.618085,0.650911,-0.440779,5.030289,1.827419,-0.440803, 0.431713,0.22912,-0.872427,5.01143,1.875569,-0.463205, 0.431713,0.22912,-0.872427,5.01143,1.875569,-0.463205, 0.618085,0.650911,-0.440779,5.030289,1.827419,-0.440803, 0.352601,0.621479,-0.699597,4.991904,1.760829,-0.510386, 0.431713,0.22912,-0.872427,5.01143,1.875569,-0.463205, 0.352601,0.621479,-0.699597,4.991904,1.760829,-0.510386, 0.762434,-0.012904,-0.646937,4.983034,1.806343,-0.505779, 0.762434,-0.012904,-0.646937,4.983034,1.806343,-0.505779, 0.352601,0.621479,-0.699597,4.991904,1.760829,-0.510386, 0.171039,0.554898,-0.814146,4.936066,1.737668,-0.557276, 0.762434,-0.012904,-0.646937,4.983034,1.806343,-0.505779, 0.171039,0.554898,-0.814146,4.936066,1.737668,-0.557276, 0.683237,-0.051725,-0.728363,4.963546,1.783161,-0.553515, 0.675892,0.137563,-0.724049,4.908019,1.796041,-0.587882, 0.683237,-0.051725,-0.728363,4.963546,1.783161,-0.553515, 0.171039,0.554898,-0.814146,4.936066,1.737668,-0.557276, 0.675892,0.137563,-0.724049,4.908019,1.796041,-0.587882, 0.171039,0.554898,-0.814146,4.936066,1.737668,-0.557276, -0.281999,-0.030938,-0.958916,4.871155,1.741238,-0.592326, 0.708269,-0.122724,-0.695193,4.852582,1.816115,-0.603105, 0.675892,0.137563,-0.724049,4.908019,1.796041,-0.587882, -0.281999,-0.030938,-0.958916,4.871155,1.741238,-0.592326, 0.708269,-0.122724,-0.695193,4.852582,1.816115,-0.603105, -0.281999,-0.030938,-0.958916,4.871155,1.741238,-0.592326, -0.120429,-0.209965,-0.970264,4.816181,1.79786,-0.604026, 0.269343,0.329305,-0.904993,4.760921,1.881357,-0.61312, 0.708269,-0.122724,-0.695193,4.852582,1.816115,-0.603105, -0.120429,-0.209965,-0.970264,4.816181,1.79786,-0.604026, 0.89264,0.34991,-0.284178,5.075994,1.900999,-0.443793, 0.077536,0.770695,-0.632469,5.095375,1.961238,-0.401516, -0.222902,0.035918,-0.974179,5.085813,1.888503,-0.408327, 0.89264,0.34991,-0.284178,5.075994,1.900999,-0.443793, -0.222902,0.035918,-0.974179,5.085813,1.888503,-0.408327, 0.269003,0.864361,-0.424874,5.058179,1.788186,-0.417387, 0.89264,0.34991,-0.284178,5.075994,1.900999,-0.443793, 0.269003,0.864361,-0.424874,5.058179,1.788186,-0.417387, 0.618085,0.650911,-0.440779,5.030289,1.827419,-0.440803, 0.618085,0.650911,-0.440779,5.030289,1.827419,-0.440803, 0.269003,0.864361,-0.424874,5.058179,1.788186,-0.417387, 0.532717,0.840798,-0.09629,5.019836,1.739907,-0.485562, 0.618085,0.650911,-0.440779,5.030289,1.827419,-0.440803, 0.532717,0.840798,-0.09629,5.019836,1.739907,-0.485562, 0.352601,0.621479,-0.699597,4.991904,1.760829,-0.510386, 0.352601,0.621479,-0.699597,4.991904,1.760829,-0.510386, 0.532717,0.840798,-0.09629,5.019836,1.739907,-0.485562, 0.722741,0.690989,0.01339,4.917973,1.68148,-0.544201, 0.352601,0.621479,-0.699597,4.991904,1.760829,-0.510386, 0.722741,0.690989,0.01339,4.917973,1.68148,-0.544201, 0.171039,0.554898,-0.814146,4.936066,1.737668,-0.557276, -0.281999,-0.030938,-0.958916,4.871155,1.741238,-0.592326, 0.171039,0.554898,-0.814146,4.936066,1.737668,-0.557276, 0.722741,0.690989,0.01339,4.917973,1.68148,-0.544201, -0.281999,-0.030938,-0.958916,4.871155,1.741238,-0.592326, 0.722741,0.690989,0.01339,4.917973,1.68148,-0.544201, 0.870384,0.492055,-0.017698,4.862636,1.684144,-0.570155, -0.120429,-0.209965,-0.970264,4.816181,1.79786,-0.604026, -0.281999,-0.030938,-0.958916,4.871155,1.741238,-0.592326, 0.870384,0.492055,-0.017698,4.862636,1.684144,-0.570155, -0.120429,-0.209965,-0.970264,4.816181,1.79786,-0.604026, 0.870384,0.492055,-0.017698,4.862636,1.684144,-0.570155, 0.947044,0.280641,-0.156039,4.752337,1.723388,-0.591296, 0.269343,0.329305,-0.904993,4.760921,1.881357,-0.61312, -0.120429,-0.209965,-0.970264,4.816181,1.79786,-0.604026, 0.947044,0.280641,-0.156039,4.752337,1.723388,-0.591296, 0.269343,0.329305,-0.904993,4.760921,1.881357,-0.61312, 0.947044,0.280641,-0.156039,4.752337,1.723388,-0.591296, 0.925586,0.05083,-0.375109,4.697607,1.768061,-0.576663, -0.064166,-0.189382,-0.979805,5.00244,2.105746,-0.468233, -0.212651,-0.104685,-0.971504,5.030641,2.102197,-0.432329, 0.332526,0.910491,-0.245832,5.067202,2.027704,-0.422291, -0.064166,-0.189382,-0.979805,5.00244,2.105746,-0.468233, 0.332526,0.910491,-0.245832,5.067202,2.027704,-0.422291, 0.781868,0.537364,-0.316105,5.057495,2.002751,-0.451974, 0.530808,0.847432,0.010124,4.93795,2.181155,-0.486939, -0.212651,-0.104685,-0.971504,5.030641,2.102197,-0.432329, -0.064166,-0.189382,-0.979805,5.00244,2.105746,-0.468233, 0.530808,0.847432,0.010124,4.93795,2.181155,-0.486939, -0.064166,-0.189382,-0.979805,5.00244,2.105746,-0.468233, -0.028502,-0.108631,-0.993673,4.927885,2.15656,-0.516579, 0.668087,0.738269,0.092842,4.881855,2.194544,-0.530288, 0.530808,0.847432,0.010124,4.93795,2.181155,-0.486939, -0.028502,-0.108631,-0.993673,4.927885,2.15656,-0.516579, 0.668087,0.738269,0.092842,4.881855,2.194544,-0.530288, -0.028502,-0.108631,-0.993673,4.927885,2.15656,-0.516579, 0.267717,-0.172975,-0.947844,4.872539,2.159259,-0.542891, 0.668087,0.738269,0.092842,4.881855,2.194544,-0.530288, 0.267717,-0.172975,-0.947844,4.872539,2.159259,-0.542891, 0.490646,-0.178293,-0.852923,4.798297,2.118191,-0.591085, 0.668087,0.738269,0.092842,4.881855,2.194544,-0.530288, 0.490646,-0.178293,-0.852923,4.798297,2.118191,-0.591085, 0.787133,0.61647,0.019654,4.807794,2.143653,-0.570393, 0.787133,0.61647,0.019654,4.807794,2.143653,-0.570393, 0.490646,-0.178293,-0.852923,4.798297,2.118191,-0.591085, 0.699393,0.056752,-0.71248,4.751519,2.039658,-0.634134, 0.787133,0.61647,0.019654,4.807794,2.143653,-0.570393, 0.699393,0.056752,-0.71248,4.751519,2.039658,-0.634134, 0.856604,0.474873,-0.201803,4.728963,2.036146,-0.614307, 0.827569,0.284292,-0.484054,4.742358,1.882232,-0.62165, 0.856604,0.474873,-0.201803,4.728963,2.036146,-0.614307, 0.699393,0.056752,-0.71248,4.751519,2.039658,-0.634134, 0.827569,0.284292,-0.484054,4.742358,1.882232,-0.62165, 0.699393,0.056752,-0.71248,4.751519,2.039658,-0.634134, 0.269343,0.329305,-0.904993,4.760921,1.881357,-0.61312, 0.827569,0.284292,-0.484054,4.742358,1.882232,-0.62165, 0.269343,0.329305,-0.904993,4.760921,1.881357,-0.61312, 0.925586,0.05083,-0.375109,4.697607,1.768061,-0.576663, 0.766773,0.253147,-0.589894,4.74405,2.179337,-0.556057, 0.787133,0.61647,0.019654,4.807794,2.143653,-0.570393, 0.856604,0.474873,-0.201803,4.728963,2.036146,-0.614307, 0.766773,0.253147,-0.589894,4.74405,2.179337,-0.556057, 0.856604,0.474873,-0.201803,4.728963,2.036146,-0.614307, 0.667258,0.181112,-0.722471,4.688114,2.046378,-0.604518, 0.766773,0.253147,-0.589894,4.74405,2.179337,-0.556057, 0.45571,-0.00339,-0.890122,4.837331,2.235678,-0.479332, 0.668087,0.738269,0.092842,4.881855,2.194544,-0.530288, 0.766773,0.253147,-0.589894,4.74405,2.179337,-0.556057, 0.668087,0.738269,0.092842,4.881855,2.194544,-0.530288, 0.787133,0.61647,0.019654,4.807794,2.143653,-0.570393, 0.45571,-0.00339,-0.890122,4.837331,2.235678,-0.479332, 0.373808,-0.059429,-0.9256,4.89385,2.220523,-0.417713, 0.530808,0.847432,0.010124,4.93795,2.181155,-0.486939, 0.45571,-0.00339,-0.890122,4.837331,2.235678,-0.479332, 0.530808,0.847432,0.010124,4.93795,2.181155,-0.486939, 0.668087,0.738269,0.092842,4.881855,2.194544,-0.530288, 0.373808,-0.059429,-0.9256,4.89385,2.220523,-0.417713, 0.276212,-0.065585,-0.958856,4.995978,2.148785,-0.344534, -0.212651,-0.104685,-0.971504,5.030641,2.102197,-0.432329, 0.373808,-0.059429,-0.9256,4.89385,2.220523,-0.417713, -0.212651,-0.104685,-0.971504,5.030641,2.102197,-0.432329, 0.530808,0.847432,0.010124,4.93795,2.181155,-0.486939, 0.276212,-0.065585,-0.958856,4.995978,2.148785,-0.344534, 0.122987,-0.006582,-0.992386,5.06084,2.053335,-0.309324, 0.332526,0.910491,-0.245832,5.067202,2.027704,-0.422291, 0.276212,-0.065585,-0.958856,4.995978,2.148785,-0.344534, 0.332526,0.910491,-0.245832,5.067202,2.027704,-0.422291, -0.212651,-0.104685,-0.971504,5.030641,2.102197,-0.432329, 0.122987,-0.006582,-0.992386,5.06084,2.053335,-0.309324, 0.041586,0.068165,-0.996807,5.097062,1.954206,-0.328795, 0.077536,0.770695,-0.632469,5.095375,1.961238,-0.401516, 0.122987,-0.006582,-0.992386,5.06084,2.053335,-0.309324, 0.077536,0.770695,-0.632469,5.095375,1.961238,-0.401516, 0.332526,0.910491,-0.245832,5.067202,2.027704,-0.422291, 0.077536,0.770695,-0.632469,5.095375,1.961238,-0.401516, 0.041586,0.068165,-0.996807,5.097062,1.954206,-0.328795, 0.035084,0.005692,-0.999368,5.105589,1.864086,-0.347113, 0.077536,0.770695,-0.632469,5.095375,1.961238,-0.401516, 0.035084,0.005692,-0.999368,5.105589,1.864086,-0.347113, -0.222902,0.035918,-0.974179,5.085813,1.888503,-0.408327, -0.222902,0.035918,-0.974179,5.085813,1.888503,-0.408327, 0.035084,0.005692,-0.999368,5.105589,1.864086,-0.347113, 0.269003,0.864361,-0.424874,5.058179,1.788186,-0.417387, -0.013461,-0.014478,-0.999805,4.697024,1.862575,-0.604048, 0.827569,0.284292,-0.484054,4.742358,1.882232,-0.62165, 0.925586,0.05083,-0.375109,4.697607,1.768061,-0.576663, 0.45571,-0.00339,-0.890122,4.837331,2.235678,-0.479332, -0.114527,0.103064,-0.988059,4.739441,2.299169,-0.369987, 0.2189,0.87846,-0.424724,4.83289,2.262727,-0.283787, 0.45571,-0.00339,-0.890122,4.837331,2.235678,-0.479332, 0.2189,0.87846,-0.424724,4.83289,2.262727,-0.283787, 0.373808,-0.059429,-0.9256,4.89385,2.220523,-0.417713, 0.2189,0.87846,-0.424724,4.83289,2.262727,-0.283787, -0.194126,0.280848,-0.939914,4.971394,2.146686,-0.224781, 0.276212,-0.065585,-0.958856,4.995978,2.148785,-0.344534, 0.2189,0.87846,-0.424724,4.83289,2.262727,-0.283787, 0.276212,-0.065585,-0.958856,4.995978,2.148785,-0.344534, 0.373808,-0.059429,-0.9256,4.89385,2.220523,-0.417713, -0.194126,0.280848,-0.939914,4.971394,2.146686,-0.224781, 0.742633,0.65679,-0.130853,5.072165,2.04363,-0.209228, 0.122987,-0.006582,-0.992386,5.06084,2.053335,-0.309324, -0.194126,0.280848,-0.939914,4.971394,2.146686,-0.224781, 0.122987,-0.006582,-0.992386,5.06084,2.053335,-0.309324, 0.276212,-0.065585,-0.958856,4.995978,2.148785,-0.344534, 0.742633,0.65679,-0.130853,5.072165,2.04363,-0.209228, 0.681964,0.386262,-0.621069,5.127157,1.942759,-0.211214, 0.041586,0.068165,-0.996807,5.097062,1.954206,-0.328795, 0.742633,0.65679,-0.130853,5.072165,2.04363,-0.209228, 0.041586,0.068165,-0.996807,5.097062,1.954206,-0.328795, 0.122987,-0.006582,-0.992386,5.06084,2.053335,-0.309324, 0.681964,0.386262,-0.621069,5.127157,1.942759,-0.211214, 0.584509,0.341142,-0.736187,5.152698,1.830661,-0.287042, 0.035084,0.005692,-0.999368,5.105589,1.864086,-0.347113, 0.681964,0.386262,-0.621069,5.127157,1.942759,-0.211214, 0.035084,0.005692,-0.999368,5.105589,1.864086,-0.347113, 0.041586,0.068165,-0.996807,5.097062,1.954206,-0.328795, 0.035084,0.005692,-0.999368,5.105589,1.864086,-0.347113, 0.584509,0.341142,-0.736187,5.152698,1.830661,-0.287042, 0.577823,0.271654,-0.769626,5.133171,1.715563,-0.334258, 0.035084,0.005692,-0.999368,5.105589,1.864086,-0.347113, 0.577823,0.271654,-0.769626,5.133171,1.715563,-0.334258, 0.269003,0.864361,-0.424874,5.058179,1.788186,-0.417387, 0.269003,0.864361,-0.424874,5.058179,1.788186,-0.417387, 0.577823,0.271654,-0.769626,5.133171,1.715563,-0.334258, 0.237937,0.08172,-0.967837,5.103427,1.624404,-0.434275, 0.269003,0.864361,-0.424874,5.058179,1.788186,-0.417387, 0.237937,0.08172,-0.967837,5.103427,1.624404,-0.434275, 0.532717,0.840798,-0.09629,5.019836,1.739907,-0.485562, 0.532717,0.840798,-0.09629,5.019836,1.739907,-0.485562, 0.237937,0.08172,-0.967837,5.103427,1.624404,-0.434275, 0.198142,0.152918,-0.968171,4.982822,1.503071,-0.507606, 0.532717,0.840798,-0.09629,5.019836,1.739907,-0.485562, 0.198142,0.152918,-0.968171,4.982822,1.503071,-0.507606, 0.722741,0.690989,0.01339,4.917973,1.68148,-0.544201, 0.870384,0.492055,-0.017698,4.862636,1.684144,-0.570155, 0.722741,0.690989,0.01339,4.917973,1.68148,-0.544201, 0.198142,0.152918,-0.968171,4.982822,1.503071,-0.507606, 0.870384,0.492055,-0.017698,4.862636,1.684144,-0.570155, 0.198142,0.152918,-0.968171,4.982822,1.503071,-0.507606, 0.198441,0.172024,-0.964898,4.927282,1.486953,-0.526327, 0.870384,0.492055,-0.017698,4.862636,1.684144,-0.570155, 0.198441,0.172024,-0.964898,4.927282,1.486953,-0.526327, 0.204819,0.130792,-0.970022,4.79841,1.473149,-0.570618, 0.947044,0.280641,-0.156039,4.752337,1.723388,-0.591296, 0.870384,0.492055,-0.017698,4.862636,1.684144,-0.570155, 0.204819,0.130792,-0.970022,4.79841,1.473149,-0.570618, 0.947044,0.280641,-0.156039,4.752337,1.723388,-0.591296, 0.204819,0.130792,-0.970022,4.79841,1.473149,-0.570618, 0.154028,0.078449,-0.984947,4.715646,1.502195,-0.584339, 0.925586,0.05083,-0.375109,4.697607,1.768061,-0.576663, 0.947044,0.280641,-0.156039,4.752337,1.723388,-0.591296, 0.154028,0.078449,-0.984947,4.715646,1.502195,-0.584339, 0.925586,0.05083,-0.375109,4.697607,1.768061,-0.576663, 0.154028,0.078449,-0.984947,4.715646,1.502195,-0.584339, 0.032152,0.123743,-0.991793,4.615408,1.639641,-0.577768, -0.013461,-0.014478,-0.999805,4.697024,1.862575,-0.604048, 0.925586,0.05083,-0.375109,4.697607,1.768061,-0.576663, 0.032152,0.123743,-0.991793,4.615408,1.639641,-0.577768, -0.013461,-0.014478,-0.999805,4.697024,1.862575,-0.604048, 0.032152,0.123743,-0.991793,4.615408,1.639641,-0.577768, -0.077208,0.343417,-0.936004,4.560751,1.785154,-0.562428, 0.510305,0.850999,-0.124054,4.551484,1.841749,-0.575191, 0.667258,0.181112,-0.722471,4.688114,2.046378,-0.604518, -0.013461,-0.014478,-0.999805,4.697024,1.862575,-0.604048, 0.510305,0.850999,-0.124054,4.551484,1.841749,-0.575191, -0.013461,-0.014478,-0.999805,4.697024,1.862575,-0.604048, -0.077208,0.343417,-0.936004,4.560751,1.785154,-0.562428, 0.561002,0.750769,-0.348745,4.533113,1.989009,-0.578975, 0.667258,0.181112,-0.722471,4.688114,2.046378,-0.604518, 0.510305,0.850999,-0.124054,4.551484,1.841749,-0.575191, 0.719268,0.159441,-0.676189,4.636582,2.263383,-0.471997, 0.766773,0.253147,-0.589894,4.74405,2.179337,-0.556057, 0.667258,0.181112,-0.722471,4.688114,2.046378,-0.604518, 0.719268,0.159441,-0.676189,4.636582,2.263383,-0.471997, 0.667258,0.181112,-0.722471,4.688114,2.046378,-0.604518, 0.328548,0.219459,-0.918637,4.561299,2.133066,-0.547248, 0.328548,0.219459,-0.918637,4.561299,2.133066,-0.547248, 0.667258,0.181112,-0.722471,4.688114,2.046378,-0.604518, 0.561002,0.750769,-0.348745,4.533113,1.989009,-0.578975, -0.989689,-0.143234,0,4.912303,2.162645,-0.00009, -0.941169,-0.337937,0,5.04969,2.032731,0.000071, 0.742633,0.65679,-0.130853,5.072165,2.04363,-0.209228, -0.989689,-0.143234,0,4.912303,2.162645,-0.00009, 0.742633,0.65679,-0.130853,5.072165,2.04363,-0.209228, -0.194126,0.280848,-0.939914,4.971394,2.146686,-0.224781, -0.941169,-0.337937,0,5.04969,2.032731,0.000071, 0.444094,0.036128,-0.895251,5.156645,1.942902,-0.119993, 0.681964,0.386262,-0.621069,5.127157,1.942759,-0.211214, -0.941169,-0.337937,0,5.04969,2.032731,0.000071, 0.681964,0.386262,-0.621069,5.127157,1.942759,-0.211214, 0.742633,0.65679,-0.130853,5.072165,2.04363,-0.209228, 0.444094,0.036128,-0.895251,5.156645,1.942902,-0.119993, 0.458202,0.052175,-0.887316,5.218821,1.803552,-0.199306, 0.584509,0.341142,-0.736187,5.152698,1.830661,-0.287042, 0.444094,0.036128,-0.895251,5.156645,1.942902,-0.119993, 0.584509,0.341142,-0.736187,5.152698,1.830661,-0.287042, 0.681964,0.386262,-0.621069,5.127157,1.942759,-0.211214, 0.458202,0.052175,-0.887316,5.218821,1.803552,-0.199306, 0.347878,0.028988,-0.937092,5.216855,1.636645,-0.279797, 0.577823,0.271654,-0.769626,5.133171,1.715563,-0.334258, 0.458202,0.052175,-0.887316,5.218821,1.803552,-0.199306, 0.577823,0.271654,-0.769626,5.133171,1.715563,-0.334258, 0.584509,0.341142,-0.736187,5.152698,1.830661,-0.287042, 0.577823,0.271654,-0.769626,5.133171,1.715563,-0.334258, 0.347878,0.028988,-0.937092,5.216855,1.636645,-0.279797, 0.282492,0.026082,-0.958915,5.233176,1.442459,-0.362988, 0.577823,0.271654,-0.769626,5.133171,1.715563,-0.334258, 0.282492,0.026082,-0.958915,5.233176,1.442459,-0.362988, 0.237937,0.08172,-0.967837,5.103427,1.624404,-0.434275, 0.032152,0.123743,-0.991793,4.615408,1.639641,-0.577768, 0.154028,0.078449,-0.984947,4.715646,1.502195,-0.584339, 0.380651,0.443224,-0.811577,4.679116,1.438434,-0.589658, 0.032152,0.123743,-0.991793,4.615408,1.639641,-0.577768, 0.380651,0.443224,-0.811577,4.679116,1.438434,-0.589658, 0.362705,0.428702,-0.827442,4.596478,1.512987,-0.598982, 0.032152,0.123743,-0.991793,4.615408,1.639641,-0.577768, 0.362705,0.428702,-0.827442,4.596478,1.512987,-0.598982, 0.332757,0.286207,-0.898531,4.560024,1.604023,-0.589333, -0.077208,0.343417,-0.936004,4.560751,1.785154,-0.562428, 0.032152,0.123743,-0.991793,4.615408,1.639641,-0.577768, 0.332757,0.286207,-0.898531,4.560024,1.604023,-0.589333, -0.077208,0.343417,-0.936004,4.560751,1.785154,-0.562428, 0.332757,0.286207,-0.898531,4.560024,1.604023,-0.589333, 0.302715,0.058971,-0.951255,4.477781,1.687858,-0.597407, 0.510305,0.850999,-0.124054,4.551484,1.841749,-0.575191, -0.077208,0.343417,-0.936004,4.560751,1.785154,-0.562428, 0.302715,0.058971,-0.951255,4.477781,1.687858,-0.597407, 0.510305,0.850999,-0.124054,4.551484,1.841749,-0.575191, 0.302715,0.058971,-0.951255,4.477781,1.687858,-0.597407, 0.347794,0.132396,-0.928176,4.459682,1.778884,-0.588185, 0.36359,0.089346,-0.927264,4.43261,1.878873,-0.577888, 0.561002,0.750769,-0.348745,4.533113,1.989009,-0.578975, 0.510305,0.850999,-0.124054,4.551484,1.841749,-0.575191, 0.36359,0.089346,-0.927264,4.43261,1.878873,-0.577888, 0.510305,0.850999,-0.124054,4.551484,1.841749,-0.575191, 0.347794,0.132396,-0.928176,4.459682,1.778884,-0.588185, 0.361081,-0.056526,-0.93082,4.43302,2.024714,-0.563794, 0.328548,0.219459,-0.918637,4.561299,2.133066,-0.547248, 0.561002,0.750769,-0.348745,4.533113,1.989009,-0.578975, 0.361081,-0.056526,-0.93082,4.43302,2.024714,-0.563794, 0.561002,0.750769,-0.348745,4.533113,1.989009,-0.578975, 0.36359,0.089346,-0.927264,4.43261,1.878873,-0.577888, 0.337014,-0.030018,-0.941021,4.634996,2.369115,-0.140117, -0.965284,-0.261201,0,4.747988,2.300163,-0.000276, 0.2189,0.87846,-0.424724,4.83289,2.262727,-0.283787, 0.337014,-0.030018,-0.941021,4.634996,2.369115,-0.140117, 0.2189,0.87846,-0.424724,4.83289,2.262727,-0.283787, -0.114527,0.103064,-0.988059,4.739441,2.299169,-0.369987, 0.272203,0.043076,-0.961275,4.577573,2.389535,-0.256196, 0.337014,-0.030018,-0.941021,4.634996,2.369115,-0.140117, -0.114527,0.103064,-0.988059,4.739441,2.299169,-0.369987, 0.272203,0.043076,-0.961275,4.577573,2.389535,-0.256196, -0.114527,0.103064,-0.988059,4.739441,2.299169,-0.369987, 0.719268,0.159441,-0.676189,4.636582,2.263383,-0.471997, 0.195545,0.103956,-0.975169,4.472349,2.325133,-0.443764, 0.272203,0.043076,-0.961275,4.577573,2.389535,-0.256196, 0.719268,0.159441,-0.676189,4.636582,2.263383,-0.471997, 0.195545,0.103956,-0.975169,4.472349,2.325133,-0.443764, 0.719268,0.159441,-0.676189,4.636582,2.263383,-0.471997, 0.328548,0.219459,-0.918637,4.561299,2.133066,-0.547248, 0.195545,0.103956,-0.975169,4.472349,2.325133,-0.443764, 0.328548,0.219459,-0.918637,4.561299,2.133066,-0.547248, 0.196849,0.14562,-0.969559,4.389484,2.190421,-0.47332, 0.196849,0.14562,-0.969559,4.389484,2.190421,-0.47332, 0.328548,0.219459,-0.918637,4.561299,2.133066,-0.547248, 0.361081,-0.056526,-0.93082,4.43302,2.024714,-0.563794, 0.237937,0.08172,-0.967837,5.103427,1.624404,-0.434275, 0.282492,0.026082,-0.958915,5.233176,1.442459,-0.362988, 0.210495,0.185422,-0.959849,5.223191,1.371491,-0.388069, 0.237937,0.08172,-0.967837,5.103427,1.624404,-0.434275, 0.210495,0.185422,-0.959849,5.223191,1.371491,-0.388069, 0.198142,0.152918,-0.968171,4.982822,1.503071,-0.507606, 0.198142,0.152918,-0.968171,4.982822,1.503071,-0.507606, 0.210495,0.185422,-0.959849,5.223191,1.371491,-0.388069, 0.154687,0.171026,-0.973048,5.158322,1.23677,-0.418043, 0.198142,0.152918,-0.968171,4.982822,1.503071,-0.507606, 0.154687,0.171026,-0.973048,5.158322,1.23677,-0.418043, 0.198441,0.172024,-0.964898,4.927282,1.486953,-0.526327, 0.198441,0.172024,-0.964898,4.927282,1.486953,-0.526327, 0.154687,0.171026,-0.973048,5.158322,1.23677,-0.418043, -0.03359,0.173471,-0.984266,4.95536,1.236724,-0.50523, 0.198441,0.172024,-0.964898,4.927282,1.486953,-0.526327, -0.03359,0.173471,-0.984266,4.95536,1.236724,-0.50523, 0.204819,0.130792,-0.970022,4.79841,1.473149,-0.570618, 0.204819,0.130792,-0.970022,4.79841,1.473149,-0.570618, -0.03359,0.173471,-0.984266,4.95536,1.236724,-0.50523, 0.289202,0.572304,-0.767353,4.761601,1.363013,-0.57137, 0.204819,0.130792,-0.970022,4.79841,1.473149,-0.570618, 0.289202,0.572304,-0.767353,4.761601,1.363013,-0.57137, 0.154028,0.078449,-0.984947,4.715646,1.502195,-0.584339, 0.154028,0.078449,-0.984947,4.715646,1.502195,-0.584339, 0.289202,0.572304,-0.767353,4.761601,1.363013,-0.57137, 0.380651,0.443224,-0.811577,4.679116,1.438434,-0.589658, -0.998597,-0.052951,0,5.177545,1.932323,0.000214, 0.243507,0.533327,-0.810103,5.321136,1.795562,-0.119606, 0.458202,0.052175,-0.887316,5.218821,1.803552,-0.199306, -0.998597,-0.052951,0,5.177545,1.932323,0.000214, 0.458202,0.052175,-0.887316,5.218821,1.803552,-0.199306, 0.444094,0.036128,-0.895251,5.156645,1.942902,-0.119993, -0.998597,-0.052951,0,5.177545,1.932323,0.000214, -0.99798,-0.063521,0,5.378289,1.768448,0.000441, 0.243507,0.533327,-0.810103,5.321136,1.795562,-0.119606, -0.99798,-0.063521,0,5.378289,1.768448,0.000441, -0.925873,-0.377836,0,5.424281,1.721152,0.000496, 0.168187,0.30029,-0.938903,5.421809,1.685349,-0.123555, -0.99798,-0.063521,0,5.378289,1.768448,0.000441, 0.168187,0.30029,-0.938903,5.421809,1.685349,-0.123555, 0.243507,0.533327,-0.810103,5.321136,1.795562,-0.119606, 0.458202,0.052175,-0.887316,5.218821,1.803552,-0.199306, 0.243507,0.533327,-0.810103,5.321136,1.795562,-0.119606, 0.168187,0.30029,-0.938903,5.421809,1.685349,-0.123555, 0.458202,0.052175,-0.887316,5.218821,1.803552,-0.199306, 0.168187,0.30029,-0.938903,5.421809,1.685349,-0.123555, 0.112152,0.130705,-0.985057,5.383208,1.619661,-0.202452, 0.458202,0.052175,-0.887316,5.218821,1.803552,-0.199306, 0.112152,0.130705,-0.985057,5.383208,1.619661,-0.202452, 0.069483,0.206284,-0.976022,5.373133,1.541142,-0.246712, 0.458202,0.052175,-0.887316,5.218821,1.803552,-0.199306, 0.069483,0.206284,-0.976022,5.373133,1.541142,-0.246712, 0.347878,0.028988,-0.937092,5.216855,1.636645,-0.279797, 0.347878,0.028988,-0.937092,5.216855,1.636645,-0.279797, 0.069483,0.206284,-0.976022,5.373133,1.541142,-0.246712, 0.054287,0.055115,-0.997003,5.334328,1.402713,-0.332639, 0.347878,0.028988,-0.937092,5.216855,1.636645,-0.279797, 0.054287,0.055115,-0.997003,5.334328,1.402713,-0.332639, 0.282492,0.026082,-0.958915,5.233176,1.442459,-0.362988, 0.282492,0.026082,-0.958915,5.233176,1.442459,-0.362988, 0.054287,0.055115,-0.997003,5.334328,1.402713,-0.332639, 0.235746,0.648569,-0.723728,5.296963,1.322443,-0.357984, 0.282492,0.026082,-0.958915,5.233176,1.442459,-0.362988, 0.235746,0.648569,-0.723728,5.296963,1.322443,-0.357984, 0.210495,0.185422,-0.959849,5.223191,1.371491,-0.388069, 0.210495,0.185422,-0.959849,5.223191,1.371491,-0.388069, 0.235746,0.648569,-0.723728,5.296963,1.322443,-0.357984, 0.101496,0.616609,-0.780699,5.260653,1.184173,-0.352062, 0.210495,0.185422,-0.959849,5.223191,1.371491,-0.388069, 0.101496,0.616609,-0.780699,5.260653,1.184173,-0.352062, 0.154687,0.171026,-0.973048,5.158322,1.23677,-0.418043, 0.154687,0.171026,-0.973048,5.158322,1.23677,-0.418043, 0.101496,0.616609,-0.780699,5.260653,1.184173,-0.352062, 0.043397,0.435461,-0.899161,5.250485,1.123029,-0.385234, 0.154687,0.171026,-0.973048,5.158322,1.23677,-0.418043, 0.043397,0.435461,-0.899161,5.250485,1.123029,-0.385234, 0.012421,0.392537,-0.919653,4.991713,1.163096,-0.504149, 0.154687,0.171026,-0.973048,5.158322,1.23677,-0.418043, 0.012421,0.392537,-0.919653,4.991713,1.163096,-0.504149, -0.03359,0.173471,-0.984266,4.95536,1.236724,-0.50523, 0.289202,0.572304,-0.767353,4.761601,1.363013,-0.57137, -0.03359,0.173471,-0.984266,4.95536,1.236724,-0.50523, 0.012421,0.392537,-0.919653,4.991713,1.163096,-0.504149, 0.289202,0.572304,-0.767353,4.761601,1.363013,-0.57137, 0.012421,0.392537,-0.919653,4.991713,1.163096,-0.504149, 0.067357,0.280762,-0.957411,4.733657,1.227371,-0.592883, 0.380651,0.443224,-0.811577,4.679116,1.438434,-0.589658, 0.289202,0.572304,-0.767353,4.761601,1.363013,-0.57137, 0.067357,0.280762,-0.957411,4.733657,1.227371,-0.592883, 0.380651,0.443224,-0.811577,4.679116,1.438434,-0.589658, 0.067357,0.280762,-0.957411,4.733657,1.227371,-0.592883, -0.026366,0.234118,-0.971851,4.641547,1.285422,-0.622034, 0.362705,0.428702,-0.827442,4.596478,1.512987,-0.598982, 0.380651,0.443224,-0.811577,4.679116,1.438434,-0.589658, -0.026366,0.234118,-0.971851,4.641547,1.285422,-0.622034, 0.362705,0.428702,-0.827442,4.596478,1.512987,-0.598982, -0.026366,0.234118,-0.971851,4.641547,1.285422,-0.622034, 0.184871,0.227139,-0.956154,4.522247,1.398278,-0.644892, 0.332757,0.286207,-0.898531,4.560024,1.604023,-0.589333, 0.362705,0.428702,-0.827442,4.596478,1.512987,-0.598982, 0.184871,0.227139,-0.956154,4.522247,1.398278,-0.644892, 0.332757,0.286207,-0.898531,4.560024,1.604023,-0.589333, 0.184871,0.227139,-0.956154,4.522247,1.398278,-0.644892, -0.034875,0.308036,-0.950735,4.430999,1.535753,-0.638888, 0.302715,0.058971,-0.951255,4.477781,1.687858,-0.597407, 0.332757,0.286207,-0.898531,4.560024,1.604023,-0.589333, -0.034875,0.308036,-0.950735,4.430999,1.535753,-0.638888, 0.302715,0.058971,-0.951255,4.477781,1.687858,-0.597407, -0.034875,0.308036,-0.950735,4.430999,1.535753,-0.638888, -0.148853,0.101172,-0.98367,4.404221,1.662433,-0.61661, 0.504832,0.844097,-0.180678,4.38638,1.770868,-0.596666, 0.347794,0.132396,-0.928176,4.459682,1.778884,-0.588185, 0.302715,0.058971,-0.951255,4.477781,1.687858,-0.597407, 0.504832,0.844097,-0.180678,4.38638,1.770868,-0.596666, 0.302715,0.058971,-0.951255,4.477781,1.687858,-0.597407, -0.148853,0.101172,-0.98367,4.404221,1.662433,-0.61661, 0.615047,0.769185,-0.17341,4.377095,1.871713,-0.595743, 0.36359,0.089346,-0.927264,4.43261,1.878873,-0.577888, 0.347794,0.132396,-0.928176,4.459682,1.778884,-0.588185, 0.615047,0.769185,-0.17341,4.377095,1.871713,-0.595743, 0.347794,0.132396,-0.928176,4.459682,1.778884,-0.588185, 0.504832,0.844097,-0.180678,4.38638,1.770868,-0.596666, -0.925873,-0.377836,0,5.424281,1.721152,0.000496, 0.027992,0.999608,0,5.588763,1.573846,0.000686, 0.550962,0.627632,-0.550018,5.604888,1.546091,-0.113773, -0.925873,-0.377836,0,5.424281,1.721152,0.000496, 0.550962,0.627632,-0.550018,5.604888,1.546091,-0.113773, 0.168187,0.30029,-0.938903,5.421809,1.685349,-0.123555, 0.168187,0.30029,-0.938903,5.421809,1.685349,-0.123555, 0.550962,0.627632,-0.550018,5.604888,1.546091,-0.113773, 0.477288,0.71618,-0.509197,5.566339,1.498677,-0.190905, 0.168187,0.30029,-0.938903,5.421809,1.685349,-0.123555, 0.477288,0.71618,-0.509197,5.566339,1.498677,-0.190905, 0.112152,0.130705,-0.985057,5.383208,1.619661,-0.202452, 0.112152,0.130705,-0.985057,5.383208,1.619661,-0.202452, 0.477288,0.71618,-0.509197,5.566339,1.498677,-0.190905, 0.887994,0.419811,-0.187682,5.528186,1.44018,-0.250666, 0.112152,0.130705,-0.985057,5.383208,1.619661,-0.202452, 0.887994,0.419811,-0.187682,5.528186,1.44018,-0.250666, 0.069483,0.206284,-0.976022,5.373133,1.541142,-0.246712, 0.069483,0.206284,-0.976022,5.373133,1.541142,-0.246712, 0.887994,0.419811,-0.187682,5.528186,1.44018,-0.250666, 0.749779,0.312647,-0.583167,5.471928,1.345179,-0.313899, 0.069483,0.206284,-0.976022,5.373133,1.541142,-0.246712, 0.749779,0.312647,-0.583167,5.471928,1.345179,-0.313899, 0.054287,0.055115,-0.997003,5.334328,1.402713,-0.332639, 0.054287,0.055115,-0.997003,5.334328,1.402713,-0.332639, 0.749779,0.312647,-0.583167,5.471928,1.345179,-0.313899, 0.358075,0.480709,-0.800438,5.425783,1.264372,-0.329687, 0.054287,0.055115,-0.997003,5.334328,1.402713,-0.332639, 0.358075,0.480709,-0.800438,5.425783,1.264372,-0.329687, 0.235746,0.648569,-0.723728,5.296963,1.322443,-0.357984, 0.235746,0.648569,-0.723728,5.296963,1.322443,-0.357984, 0.358075,0.480709,-0.800438,5.425783,1.264372,-0.329687, 0.524848,0.480957,-0.702293,5.397967,1.174238,-0.346802, 0.235746,0.648569,-0.723728,5.296963,1.322443,-0.357984, 0.524848,0.480957,-0.702293,5.397967,1.174238,-0.346802, 0.101496,0.616609,-0.780699,5.260653,1.184173,-0.352062, 0.101496,0.616609,-0.780699,5.260653,1.184173,-0.352062, 0.524848,0.480957,-0.702293,5.397967,1.174238,-0.346802, 0.72603,0.248277,-0.641279,5.388455,1.119419,-0.351883, 0.101496,0.616609,-0.780699,5.260653,1.184173,-0.352062, 0.72603,0.248277,-0.641279,5.388455,1.119419,-0.351883, 0.043397,0.435461,-0.899161,5.250485,1.123029,-0.385234, 0.987857,-0.047506,-0.147925,5.687035,1.499636,-0.110765, 0.936734,-0.314344,0.154001,5.741781,1.463956,-0.124891, 0.831976,-0.511655,0.214534,5.730427,1.435668,-0.209848, 0.987857,-0.047506,-0.147925,5.687035,1.499636,-0.110765, 0.831976,-0.511655,0.214534,5.730427,1.435668,-0.209848, 0.798302,-0.559383,0.22317,5.685194,1.452202,-0.188749, 0.744254,-0.654161,-0.134758,5.710154,1.360653,-0.290072, 0.884602,-0.366981,-0.287755,5.608974,1.317869,-0.319719, 0.707709,-0.687035,-0.164711,5.647186,1.394606,-0.257833, 0.884602,-0.366981,-0.287755,5.608974,1.317869,-0.319719, 0.744254,-0.654161,-0.134758,5.710154,1.360653,-0.290072, 0.364327,0.145753,-0.919795,5.681726,1.282503,-0.333871, 0.884602,-0.366981,-0.287755,5.608974,1.317869,-0.319719, 0.364327,0.145753,-0.919795,5.681726,1.282503,-0.333871, 0.777215,-0.378098,-0.50297,5.563253,1.235295,-0.317238, 0.777215,-0.378098,-0.50297,5.563253,1.235295,-0.317238, 0.364327,0.145753,-0.919795,5.681726,1.282503,-0.333871, 0.612046,-0.714077,-0.339844,5.672187,1.164767,-0.35408, 0.777215,-0.378098,-0.50297,5.563253,1.235295,-0.317238, 0.612046,-0.714077,-0.339844,5.672187,1.164767,-0.35408, 0.348619,-0.077188,-0.934081,5.580797,1.174135,-0.351054, -0.026558,-0.999647,0,5.680007,1.510009,0.000786, 0.987857,-0.047506,-0.147925,5.687035,1.499636,-0.110765, 0.550962,0.627632,-0.550018,5.604888,1.546091,-0.113773, -0.026558,-0.999647,0,5.680007,1.510009,0.000786, 0.550962,0.627632,-0.550018,5.604888,1.546091,-0.113773, 0.027992,0.999608,0,5.588763,1.573846,0.000686, 0.550962,0.627632,-0.550018,5.604888,1.546091,-0.113773, 0.987857,-0.047506,-0.147925,5.687035,1.499636,-0.110765, 0.798302,-0.559383,0.22317,5.685194,1.452202,-0.188749, 0.550962,0.627632,-0.550018,5.604888,1.546091,-0.113773, 0.798302,-0.559383,0.22317,5.685194,1.452202,-0.188749, 0.477288,0.71618,-0.509197,5.566339,1.498677,-0.190905, 0.798302,-0.559383,0.22317,5.685194,1.452202,-0.188749, 0.707709,-0.687035,-0.164711,5.647186,1.394606,-0.257833, 0.887994,0.419811,-0.187682,5.528186,1.44018,-0.250666, 0.798302,-0.559383,0.22317,5.685194,1.452202,-0.188749, 0.887994,0.419811,-0.187682,5.528186,1.44018,-0.250666, 0.477288,0.71618,-0.509197,5.566339,1.498677,-0.190905, 0.887994,0.419811,-0.187682,5.528186,1.44018,-0.250666, 0.707709,-0.687035,-0.164711,5.647186,1.394606,-0.257833, 0.884602,-0.366981,-0.287755,5.608974,1.317869,-0.319719, 0.887994,0.419811,-0.187682,5.528186,1.44018,-0.250666, 0.884602,-0.366981,-0.287755,5.608974,1.317869,-0.319719, 0.749779,0.312647,-0.583167,5.471928,1.345179,-0.313899, 0.749779,0.312647,-0.583167,5.471928,1.345179,-0.313899, 0.884602,-0.366981,-0.287755,5.608974,1.317869,-0.319719, 0.777215,-0.378098,-0.50297,5.563253,1.235295,-0.317238, 0.749779,0.312647,-0.583167,5.471928,1.345179,-0.313899, 0.777215,-0.378098,-0.50297,5.563253,1.235295,-0.317238, 0.358075,0.480709,-0.800438,5.425783,1.264372,-0.329687, 0.358075,0.480709,-0.800438,5.425783,1.264372,-0.329687, 0.777215,-0.378098,-0.50297,5.563253,1.235295,-0.317238, 0.348619,-0.077188,-0.934081,5.580797,1.174135,-0.351054, 0.358075,0.480709,-0.800438,5.425783,1.264372,-0.329687, 0.348619,-0.077188,-0.934081,5.580797,1.174135,-0.351054, 0.524848,0.480957,-0.702293,5.397967,1.174238,-0.346802, 0.524848,0.480957,-0.702293,5.397967,1.174238,-0.346802, 0.348619,-0.077188,-0.934081,5.580797,1.174135,-0.351054, 0.802898,-0.287005,-0.522477,5.47963,1.11131,-0.364188, 0.524848,0.480957,-0.702293,5.397967,1.174238,-0.346802, 0.802898,-0.287005,-0.522477,5.47963,1.11131,-0.364188, 0.72603,0.248277,-0.641279,5.388455,1.119419,-0.351883, 0.901575,-0.270544,-0.337593,5.842092,1.427708,-0.130724, 0.461068,-0.584089,-0.668024,5.915025,1.382159,-0.13682, 0.194103,-0.204609,-0.959406,5.886832,1.385674,-0.172365, 0.901575,-0.270544,-0.337593,5.842092,1.427708,-0.130724, 0.194103,-0.204609,-0.959406,5.886832,1.385674,-0.172365, 0.286794,0.030057,-0.957521,5.813217,1.415581,-0.195261, -0.016213,0.999869,0,5.908842,1.388968,0.001026, 0.663563,0.74812,0.000025,5.963117,1.307775,0.001098, 0.259896,0.111139,-0.95922,5.979357,1.325532,-0.125337, -0.016213,0.999869,0,5.908842,1.388968,0.001026, 0.259896,0.111139,-0.95922,5.979357,1.325532,-0.125337, 0.461068,-0.584089,-0.668024,5.915025,1.382159,-0.13682, 0.461068,-0.584089,-0.668024,5.915025,1.382159,-0.13682, 0.259896,0.111139,-0.95922,5.979357,1.325532,-0.125337, 0.230527,0.277297,-0.932718,5.941384,1.330818,-0.178936, 0.461068,-0.584089,-0.668024,5.915025,1.382159,-0.13682, 0.230527,0.277297,-0.932718,5.941384,1.330818,-0.178936, 0.194103,-0.204609,-0.959406,5.886832,1.385674,-0.172365, 0.694651,0.719347,0.000019,5.743997,1.482739,0.000851, 0.569495,0.821995,-0.000075,5.835498,1.43628,0.000946, 0.901575,-0.270544,-0.337593,5.842092,1.427708,-0.130724, 0.694651,0.719347,0.000019,5.743997,1.482739,0.000851, 0.901575,-0.270544,-0.337593,5.842092,1.427708,-0.130724, 0.936734,-0.314344,0.154001,5.741781,1.463956,-0.124891, 0.936734,-0.314344,0.154001,5.741781,1.463956,-0.124891, 0.901575,-0.270544,-0.337593,5.842092,1.427708,-0.130724, 0.286794,0.030057,-0.957521,5.813217,1.415581,-0.195261, 0.936734,-0.314344,0.154001,5.741781,1.463956,-0.124891, 0.286794,0.030057,-0.957521,5.813217,1.415581,-0.195261, 0.831976,-0.511655,0.214534,5.730427,1.435668,-0.209848, 0.831976,-0.511655,0.214534,5.730427,1.435668,-0.209848, 0.286794,0.030057,-0.957521,5.813217,1.415581,-0.195261, 0.188634,-0.17518,-0.966297,5.783731,1.341471,-0.28459, 0.831976,-0.511655,0.214534,5.730427,1.435668,-0.209848, 0.188634,-0.17518,-0.966297,5.783731,1.341471,-0.28459, 0.744254,-0.654161,-0.134758,5.710154,1.360653,-0.290072, 0.286794,0.030057,-0.957521,5.813217,1.415581,-0.195261, 0.194103,-0.204609,-0.959406,5.886832,1.385674,-0.172365, 0.244568,-0.04472,-0.9686,5.847989,1.311569,-0.261476, 0.286794,0.030057,-0.957521,5.813217,1.415581,-0.195261, 0.244568,-0.04472,-0.9686,5.847989,1.311569,-0.261476, 0.188634,-0.17518,-0.966297,5.783731,1.341471,-0.28459, 0.194103,-0.204609,-0.959406,5.886832,1.385674,-0.172365, 0.230527,0.277297,-0.932718,5.941384,1.330818,-0.178936, 0.193495,-0.385604,-0.902147,5.931474,1.233483,-0.215613, 0.194103,-0.204609,-0.959406,5.886832,1.385674,-0.172365, 0.193495,-0.385604,-0.902147,5.931474,1.233483,-0.215613, 0.244568,-0.04472,-0.9686,5.847989,1.311569,-0.261476, 0.259896,0.111139,-0.95922,5.979357,1.325532,-0.125337, -0.026148,0.006311,-0.999638,5.998088,1.231874,-0.107334, 0.230527,0.277297,-0.932718,5.941384,1.330818,-0.178936, 0.663563,0.74812,0.000025,5.963117,1.307775,0.001098, 0.617634,0.786466,0.000062,5.963527,1.232407,0.001121, -0.026148,0.006311,-0.999638,5.998088,1.231874,-0.107334, 0.663563,0.74812,0.000025,5.963117,1.307775,0.001098, -0.026148,0.006311,-0.999638,5.998088,1.231874,-0.107334, 0.259896,0.111139,-0.95922,5.979357,1.325532,-0.125337, 0.230527,0.277297,-0.932718,5.941384,1.330818,-0.178936, -0.026148,0.006311,-0.999638,5.998088,1.231874,-0.107334, 0.193495,-0.385604,-0.902147,5.931474,1.233483,-0.215613, -0.026148,0.006311,-0.999638,5.998088,1.231874,-0.107334, 0.617634,0.786466,0.000062,5.963527,1.232407,0.001121, 0.651313,0.75881,-0.000286,5.92711,1.131195,0.001118, -0.026148,0.006311,-0.999638,5.998088,1.231874,-0.107334, 0.651313,0.75881,-0.000286,5.92711,1.131195,0.001118, -0.2127,-0.171223,-0.961999,5.961686,1.110978,-0.090324, 0.651313,0.75881,-0.000286,5.92711,1.131195,0.001118, 0.909103,0.416568,-0.001454,5.908782,1.066916,0.001121, 0.054456,-0.320459,-0.945696,5.934596,1.054796,-0.077039, 0.651313,0.75881,-0.000286,5.92711,1.131195,0.001118, 0.054456,-0.320459,-0.945696,5.934596,1.054796,-0.077039, -0.2127,-0.171223,-0.961999,5.961686,1.110978,-0.090324, -0.2127,-0.171223,-0.961999,5.961686,1.110978,-0.090324, 0.054456,-0.320459,-0.945696,5.934596,1.054796,-0.077039, 0.169576,-0.140705,-0.975421,5.923808,1.025283,-0.153084, -0.2127,-0.171223,-0.961999,5.961686,1.110978,-0.090324, 0.169576,-0.140705,-0.975421,5.923808,1.025283,-0.153084, 0.111896,-0.605741,-0.787755,5.950684,1.082725,-0.175648, 0.063422,-0.817077,-0.573029,5.800778,1.078596,-0.31945, 0.16399,-0.527952,-0.833291,5.884856,1.062202,-0.249545, 0.120494,-0.516376,-0.847843,5.85775,0.997026,-0.236768, 0.063422,-0.817077,-0.573029,5.800778,1.078596,-0.31945, 0.120494,-0.516376,-0.847843,5.85775,0.997026,-0.236768, 0.396941,-0.593504,-0.700137,5.755282,1.004149,-0.307505, 0.063422,-0.817077,-0.573029,5.800778,1.078596,-0.31945, 0.396941,-0.593504,-0.700137,5.755282,1.004149,-0.307505, 0.010578,-0.902776,-0.429981,5.763952,1.062109,-0.338641, 0.051115,-0.906355,-0.419414,5.912147,1.117911,-0.254197, 0.223936,-0.919046,-0.324355,5.959462,1.157227,-0.187097, 0.111896,-0.605741,-0.787755,5.950684,1.082725,-0.175648, 0.051115,-0.906355,-0.419414,5.912147,1.117911,-0.254197, 0.111896,-0.605741,-0.787755,5.950684,1.082725,-0.175648, 0.16399,-0.527952,-0.833291,5.884856,1.062202,-0.249545, 0.16399,-0.527952,-0.833291,5.884856,1.062202,-0.249545, 0.111896,-0.605741,-0.787755,5.950684,1.082725,-0.175648, 0.169576,-0.140705,-0.975421,5.923808,1.025283,-0.153084, 0.16399,-0.527952,-0.833291,5.884856,1.062202,-0.249545, 0.169576,-0.140705,-0.975421,5.923808,1.025283,-0.153084, 0.120494,-0.516376,-0.847843,5.85775,0.997026,-0.236768, 0.063422,-0.817077,-0.573029,5.800778,1.078596,-0.31945, 0.161367,-0.802085,-0.574996,5.837875,1.141493,-0.305184, 0.051115,-0.906355,-0.419414,5.912147,1.117911,-0.254197, 0.063422,-0.817077,-0.573029,5.800778,1.078596,-0.31945, 0.051115,-0.906355,-0.419414,5.912147,1.117911,-0.254197, 0.16399,-0.527952,-0.833291,5.884856,1.062202,-0.249545, 0.612046,-0.714077,-0.339844,5.672187,1.164767,-0.35408, 0.218068,-0.756332,-0.616772,5.77341,1.225861,-0.323025, 0.161367,-0.802085,-0.574996,5.837875,1.141493,-0.305184, 0.612046,-0.714077,-0.339844,5.672187,1.164767,-0.35408, 0.161367,-0.802085,-0.574996,5.837875,1.141493,-0.305184, 0.063422,-0.817077,-0.573029,5.800778,1.078596,-0.31945, 0.364327,0.145753,-0.919795,5.681726,1.282503,-0.333871, 0.725751,-0.657941,-0.200998,5.764774,1.279824,-0.308562, 0.218068,-0.756332,-0.616772,5.77341,1.225861,-0.323025, 0.364327,0.145753,-0.919795,5.681726,1.282503,-0.333871, 0.218068,-0.756332,-0.616772,5.77341,1.225861,-0.323025, 0.612046,-0.714077,-0.339844,5.672187,1.164767,-0.35408, 0.744254,-0.654161,-0.134758,5.710154,1.360653,-0.290072, 0.188634,-0.17518,-0.966297,5.783731,1.341471,-0.28459, 0.725751,-0.657941,-0.200998,5.764774,1.279824,-0.308562, 0.744254,-0.654161,-0.134758,5.710154,1.360653,-0.290072, 0.725751,-0.657941,-0.200998,5.764774,1.279824,-0.308562, 0.364327,0.145753,-0.919795,5.681726,1.282503,-0.333871, 0.17011,-0.985049,0.027217,5.690122,1.092917,-0.37085, 0.010578,-0.902776,-0.429981,5.763952,1.062109,-0.338641, 0.231006,-0.859096,-0.456717,5.681086,1.054964,-0.35586, 0.612046,-0.714077,-0.339844,5.672187,1.164767,-0.35408, 0.063422,-0.817077,-0.573029,5.800778,1.078596,-0.31945, 0.010578,-0.902776,-0.429981,5.763952,1.062109,-0.338641, 0.612046,-0.714077,-0.339844,5.672187,1.164767,-0.35408, 0.010578,-0.902776,-0.429981,5.763952,1.062109,-0.338641, 0.17011,-0.985049,0.027217,5.690122,1.092917,-0.37085, 0.348619,-0.077188,-0.934081,5.580797,1.174135,-0.351054, 0.612046,-0.714077,-0.339844,5.672187,1.164767,-0.35408, 0.17011,-0.985049,0.027217,5.690122,1.092917,-0.37085, 0.348619,-0.077188,-0.934081,5.580797,1.174135,-0.351054, 0.17011,-0.985049,0.027217,5.690122,1.092917,-0.37085, 0.108306,-0.808441,-0.578527,5.598282,1.094735,-0.386994, 0.348619,-0.077188,-0.934081,5.580797,1.174135,-0.351054, 0.108306,-0.808441,-0.578527,5.598282,1.094735,-0.386994, 0.802898,-0.287005,-0.522477,5.47963,1.11131,-0.364188, 0.802898,-0.287005,-0.522477,5.47963,1.11131,-0.364188, 0.108306,-0.808441,-0.578527,5.598282,1.094735,-0.386994, 0.155351,-0.987262,-0.034337,5.470775,1.009574,-0.355371, 0.108306,-0.808441,-0.578527,5.598282,1.094735,-0.386994, 0.17011,-0.985049,0.027217,5.690122,1.092917,-0.37085, 0.231006,-0.859096,-0.456717,5.681086,1.054964,-0.35586, 0.108306,-0.808441,-0.578527,5.598282,1.094735,-0.386994, 0.231006,-0.859096,-0.456717,5.681086,1.054964,-0.35586, 0.228199,-0.705361,-0.671112,5.580223,1.04747,-0.372696, 0.228199,-0.705361,-0.671112,5.580223,1.04747,-0.372696, 0.231006,-0.859096,-0.456717,5.681086,1.054964,-0.35586, 0.173726,-0.983856,0.042973,5.672385,1.007694,-0.341778, 0.228199,-0.705361,-0.671112,5.580223,1.04747,-0.372696, 0.173726,-0.983856,0.042973,5.672385,1.007694,-0.341778, 0.148862,-0.934725,-0.322692,5.580727,0.99933,-0.349867, 0.228199,-0.705361,-0.671112,5.580223,1.04747,-0.372696, 0.155351,-0.987262,-0.034337,5.470775,1.009574,-0.355371, 0.108306,-0.808441,-0.578527,5.598282,1.094735,-0.386994, 0.228199,-0.705361,-0.671112,5.580223,1.04747,-0.372696, 0.148862,-0.934725,-0.322692,5.580727,0.99933,-0.349867, 0.241652,-0.897637,-0.368581,5.535184,0.98018,-0.341257, 0.228199,-0.705361,-0.671112,5.580223,1.04747,-0.372696, 0.241652,-0.897637,-0.368581,5.535184,0.98018,-0.341257, 0.155351,-0.987262,-0.034337,5.470775,1.009574,-0.355371, 0.72603,0.248277,-0.641279,5.388455,1.119419,-0.351883, 0.802898,-0.287005,-0.522477,5.47963,1.11131,-0.364188, 0.155351,-0.987262,-0.034337,5.470775,1.009574,-0.355371, 0.72603,0.248277,-0.641279,5.388455,1.119419,-0.351883, 0.155351,-0.987262,-0.034337,5.470775,1.009574,-0.355371, 0.114701,-0.691524,-0.713188,5.425352,1.035967,-0.34272, 0.114701,-0.691524,-0.713188,5.425352,1.035967,-0.34272, 0.155351,-0.987262,-0.034337,5.470775,1.009574,-0.355371, 0.298912,-0.321997,-0.898315,5.434594,0.970412,-0.330823, 0.155351,-0.987262,-0.034337,5.470775,1.009574,-0.355371, 0.241652,-0.897637,-0.368581,5.535184,0.98018,-0.341257, 0.298912,-0.321997,-0.898315,5.434594,0.970412,-0.330823, 0.241652,-0.897637,-0.368581,5.535184,0.98018,-0.341257, 0.241049,-0.626018,-0.741618,5.480649,0.941387,-0.316248, 0.298912,-0.321997,-0.898315,5.434594,0.970412,-0.330823, 0.72603,0.248277,-0.641279,5.388455,1.119419,-0.351883, 0.114701,-0.691524,-0.713188,5.425352,1.035967,-0.34272, 0.272751,-0.332382,-0.902845,5.379461,1.045817,-0.349748, 0.272751,-0.332382,-0.902845,5.379461,1.045817,-0.349748, 0.114701,-0.691524,-0.713188,5.425352,1.035967,-0.34272, 0.298912,-0.321997,-0.898315,5.434594,0.970412,-0.330823, 0.272751,-0.332382,-0.902845,5.379461,1.045817,-0.349748, 0.298912,-0.321997,-0.898315,5.434594,0.970412,-0.330823, 0.161397,-0.648357,-0.744032,5.370709,0.980272,-0.337432, 0.298912,-0.321997,-0.898315,5.434594,0.970412,-0.330823, 0.241049,-0.626018,-0.741618,5.480649,0.941387,-0.316248, 0.142784,-0.229696,-0.962732,5.373646,0.885375,-0.20884, 0.161397,-0.648357,-0.744032,5.370709,0.980272,-0.337432, 0.298912,-0.321997,-0.898315,5.434594,0.970412,-0.330823, 0.142784,-0.229696,-0.962732,5.373646,0.885375,-0.20884, 0.241049,-0.626018,-0.741618,5.480649,0.941387,-0.316248, -0.016623,-0.697515,-0.716378,5.546347,0.916044,-0.246782, 0.009824,-0.644035,-0.764933,5.511556,0.863525,-0.177613, 0.241049,-0.626018,-0.741618,5.480649,0.941387,-0.316248, 0.009824,-0.644035,-0.764933,5.511556,0.863525,-0.177613, 0.142784,-0.229696,-0.962732,5.373646,0.885375,-0.20884, -0.016623,-0.697515,-0.716378,5.546347,0.916044,-0.246782, -0.045194,-0.595739,-0.801906,5.638369,0.904402,-0.222548, -0.023775,-0.598435,-0.800819,5.60337,0.852748,-0.162335, -0.016623,-0.697515,-0.716378,5.546347,0.916044,-0.246782, -0.023775,-0.598435,-0.800819,5.60337,0.852748,-0.162335, 0.009824,-0.644035,-0.764933,5.511556,0.863525,-0.177613, -0.045194,-0.595739,-0.801906,5.638369,0.904402,-0.222548, -0.105003,-0.636187,-0.764356,5.748613,0.92049,-0.205099, 0.200817,-0.971977,-0.122205,5.70463,0.849158,-0.12813, -0.045194,-0.595739,-0.801906,5.638369,0.904402,-0.222548, 0.200817,-0.971977,-0.122205,5.70463,0.849158,-0.12813, -0.023775,-0.598435,-0.800819,5.60337,0.852748,-0.162335, 0.043397,0.435461,-0.899161,5.250485,1.123029,-0.385234, 0.72603,0.248277,-0.641279,5.388455,1.119419,-0.351883, 0.272751,-0.332382,-0.902845,5.379461,1.045817,-0.349748, 0.043397,0.435461,-0.899161,5.250485,1.123029,-0.385234, 0.272751,-0.332382,-0.902845,5.379461,1.045817,-0.349748, 0.123418,-0.784469,-0.607763,5.241466,1.040469,-0.383965, 0.123418,-0.784469,-0.607763,5.241466,1.040469,-0.383965, 0.272751,-0.332382,-0.902845,5.379461,1.045817,-0.349748, 0.161397,-0.648357,-0.744032,5.370709,0.980272,-0.337432, 0.123418,-0.784469,-0.607763,5.241466,1.040469,-0.383965, 0.161397,-0.648357,-0.744032,5.370709,0.980272,-0.337432, 0.050019,-0.552867,-0.831767,5.223571,0.974029,-0.362117, 0.161397,-0.648357,-0.744032,5.370709,0.980272,-0.337432, 0.142784,-0.229696,-0.962732,5.373646,0.885375,-0.20884, 0.037801,-0.082839,-0.995846,5.299005,0.908991,-0.260177, 0.050019,-0.552867,-0.831767,5.223571,0.974029,-0.362117, 0.161397,-0.648357,-0.744032,5.370709,0.980272,-0.337432, 0.037801,-0.082839,-0.995846,5.299005,0.908991,-0.260177, 0.050019,-0.552867,-0.831767,5.223571,0.974029,-0.362117, 0.037801,-0.082839,-0.995846,5.299005,0.908991,-0.260177, -0.196146,-0.333078,-0.922272,5.197562,0.922406,-0.302473, 0.997356,-0.072614,-0.002907,5.836005,0.945722,0.001092, 0.953994,-0.299798,-0.004126,5.78079,0.891286,0.001059, -0.277696,-0.435918,-0.856073,5.797411,0.880032,-0.072306, 0.997356,-0.072614,-0.002907,5.836005,0.945722,0.001092, -0.277696,-0.435918,-0.856073,5.797411,0.880032,-0.072306, -0.106359,-0.394397,-0.912764,5.851404,0.929008,-0.105362, -0.106359,-0.394397,-0.912764,5.851404,0.929008,-0.105362, -0.277696,-0.435918,-0.856073,5.797411,0.880032,-0.072306, 0.200817,-0.971977,-0.122205,5.70463,0.849158,-0.12813, -0.106359,-0.394397,-0.912764,5.851404,0.929008,-0.105362, 0.200817,-0.971977,-0.122205,5.70463,0.849158,-0.12813, -0.105003,-0.636187,-0.764356,5.748613,0.92049,-0.205099, -0.277696,-0.435918,-0.856073,5.797411,0.880032,-0.072306, 0.953994,-0.299798,-0.004126,5.78079,0.891286,0.001059, 0.874313,-0.485341,-0.004579,5.679621,0.8395,0.000985, -0.277696,-0.435918,-0.856073,5.797411,0.880032,-0.072306, 0.874313,-0.485341,-0.004579,5.679621,0.8395,0.000985, -0.301162,-0.110218,-0.947182,5.568745,0.834653,-0.07139, -0.277696,-0.435918,-0.856073,5.797411,0.880032,-0.072306, -0.301162,-0.110218,-0.947182,5.568745,0.834653,-0.07139, 0.200817,-0.971977,-0.122205,5.70463,0.849158,-0.12813, 0.874313,-0.485341,-0.004579,5.679621,0.8395,0.000985, 0.84332,-0.537393,-0.004381,5.579253,0.837796,0.000896, -0.301162,-0.110218,-0.947182,5.568745,0.834653,-0.07139, 0.200817,-0.971977,-0.122205,5.70463,0.849158,-0.12813, -0.301162,-0.110218,-0.947182,5.568745,0.834653,-0.07139, -0.430969,-0.132769,-0.892546,5.449164,0.847535,-0.103909, 0.200817,-0.971977,-0.122205,5.70463,0.849158,-0.12813, -0.430969,-0.132769,-0.892546,5.449164,0.847535,-0.103909, -0.023775,-0.598435,-0.800819,5.60337,0.852748,-0.162335, -0.293162,-0.051827,-0.954657,5.247762,0.848549,-0.108546, 0.832605,-0.553861,-0.002629,5.213434,0.856784,0.000565, 0.598791,-0.8009,-0.003109,5.112563,0.840686,0.00048, -0.293162,-0.051827,-0.954657,5.247762,0.848549,-0.108546, 0.598791,-0.8009,-0.003109,5.112563,0.840686,0.00048, -0.034138,0.050771,-0.998127,5.137075,0.824518,-0.144842, -0.023775,-0.598435,-0.800819,5.60337,0.852748,-0.162335, -0.430969,-0.132769,-0.892546,5.449164,0.847535,-0.103909, -0.101883,0.176778,-0.978963,5.3569,0.85112,-0.138324, -0.023775,-0.598435,-0.800819,5.60337,0.852748,-0.162335, -0.101883,0.176778,-0.978963,5.3569,0.85112,-0.138324, 0.009824,-0.644035,-0.764933,5.511556,0.863525,-0.177613, 0.009824,-0.644035,-0.764933,5.511556,0.863525,-0.177613, -0.101883,0.176778,-0.978963,5.3569,0.85112,-0.138324, -0.172671,0.234525,-0.956652,5.26443,0.855571,-0.181694, 0.009824,-0.644035,-0.764933,5.511556,0.863525,-0.177613, -0.172671,0.234525,-0.956652,5.26443,0.855571,-0.181694, 0.142784,-0.229696,-0.962732,5.373646,0.885375,-0.20884, 0.224122,-0.97456,-0.001209,5.323232,0.866039,0.00066, 0.832605,-0.553861,-0.002629,5.213434,0.856784,0.000565, -0.293162,-0.051827,-0.954657,5.247762,0.848549,-0.108546, -0.301162,-0.110218,-0.947182,5.568745,0.834653,-0.07139, 0.84332,-0.537393,-0.004381,5.579253,0.837796,0.000896, -0.020035,-0.999799,-0.000148,5.469641,0.838722,0.000798, -0.301162,-0.110218,-0.947182,5.568745,0.834653,-0.07139, -0.020035,-0.999799,-0.000148,5.469641,0.838722,0.000798, -0.430969,-0.132769,-0.892546,5.449164,0.847535,-0.103909, -0.430969,-0.132769,-0.892546,5.449164,0.847535,-0.103909, -0.020035,-0.999799,-0.000148,5.469641,0.838722,0.000798, 0.224122,-0.97456,-0.001209,5.323232,0.866039,0.00066, -0.430969,-0.132769,-0.892546,5.449164,0.847535,-0.103909, 0.224122,-0.97456,-0.001209,5.323232,0.866039,0.00066, -0.293162,-0.051827,-0.954657,5.247762,0.848549,-0.108546, -0.101883,0.176778,-0.978963,5.3569,0.85112,-0.138324, -0.430969,-0.132769,-0.892546,5.449164,0.847535,-0.103909, -0.293162,-0.051827,-0.954657,5.247762,0.848549,-0.108546, -0.101883,0.176778,-0.978963,5.3569,0.85112,-0.138324, -0.293162,-0.051827,-0.954657,5.247762,0.848549,-0.108546, -0.172671,0.234525,-0.956652,5.26443,0.855571,-0.181694, 0.037801,-0.082839,-0.995846,5.299005,0.908991,-0.260177, 0.142784,-0.229696,-0.962732,5.373646,0.885375,-0.20884, -0.172671,0.234525,-0.956652,5.26443,0.855571,-0.181694, -0.196146,-0.333078,-0.922272,5.197562,0.922406,-0.302473, 0.037801,-0.082839,-0.995846,5.299005,0.908991,-0.260177, -0.172671,0.234525,-0.956652,5.26443,0.855571,-0.181694, -0.196146,-0.333078,-0.922272,5.197562,0.922406,-0.302473, -0.172671,0.234525,-0.956652,5.26443,0.855571,-0.181694, -0.317809,0.237299,-0.91798,5.153735,0.831575,-0.218348, -0.172671,0.234525,-0.956652,5.26443,0.855571,-0.181694, -0.293162,-0.051827,-0.954657,5.247762,0.848549,-0.108546, -0.034138,0.050771,-0.998127,5.137075,0.824518,-0.144842, -0.172671,0.234525,-0.956652,5.26443,0.855571,-0.181694, -0.034138,0.050771,-0.998127,5.137075,0.824518,-0.144842, -0.317809,0.237299,-0.91798,5.153735,0.831575,-0.218348, -0.034138,0.050771,-0.998127,5.137075,0.824518,-0.144842, 0.598791,-0.8009,-0.003109,5.112563,0.840686,0.00048, 0.124158,-0.992262,-0.000543,4.920855,0.812339,0.000318, -0.034138,0.050771,-0.998127,5.137075,0.824518,-0.144842, 0.124158,-0.992262,-0.000543,4.920855,0.812339,0.000318, -0.241534,0.200654,-0.949421,4.963526,0.797382,-0.14344, -0.317809,0.237299,-0.91798,5.153735,0.831575,-0.218348, -0.034138,0.050771,-0.998127,5.137075,0.824518,-0.144842, -0.241534,0.200654,-0.949421,4.963526,0.797382,-0.14344, -0.317809,0.237299,-0.91798,5.153735,0.831575,-0.218348, -0.241534,0.200654,-0.949421,4.963526,0.797382,-0.14344, -0.31398,0.125785,-0.94106,4.99671,0.81056,-0.280771, -0.434729,0.079706,-0.897027,4.712067,0.770512,-0.333393, -0.31398,0.125785,-0.94106,4.99671,0.81056,-0.280771, -0.241534,0.200654,-0.949421,4.963526,0.797382,-0.14344, -0.434729,0.079706,-0.897027,4.712067,0.770512,-0.333393, -0.241534,0.200654,-0.949421,4.963526,0.797382,-0.14344, -0.419631,0.061765,-0.905591,4.66969,0.738163,-0.188296, -0.241534,0.200654,-0.949421,4.963526,0.797382,-0.14344, 0.124158,-0.992262,-0.000543,4.920855,0.812339,0.000318, 0.157494,-0.98752,-0.000465,4.655453,0.758022,0.000098, -0.241534,0.200654,-0.949421,4.963526,0.797382,-0.14344, 0.157494,-0.98752,-0.000465,4.655453,0.758022,0.000098, -0.419631,0.061765,-0.905591,4.66969,0.738163,-0.188296, -0.400711,0.089185,-0.911853,5.004627,0.908637,-0.345273, -0.196146,-0.333078,-0.922272,5.197562,0.922406,-0.302473, -0.317809,0.237299,-0.91798,5.153735,0.831575,-0.218348, -0.400711,0.089185,-0.911853,5.004627,0.908637,-0.345273, -0.317809,0.237299,-0.91798,5.153735,0.831575,-0.218348, -0.31398,0.125785,-0.94106,4.99671,0.81056,-0.280771, -0.497134,0.140473,-0.856227,4.728809,0.878731,-0.405801, -0.400711,0.089185,-0.911853,5.004627,0.908637,-0.345273, -0.31398,0.125785,-0.94106,4.99671,0.81056,-0.280771, -0.497134,0.140473,-0.856227,4.728809,0.878731,-0.405801, -0.31398,0.125785,-0.94106,4.99671,0.81056,-0.280771, -0.434729,0.079706,-0.897027,4.712067,0.770512,-0.333393, 0.274481,0.961015,-0.033322,5.011084,1.06677,-0.458562, 0.123418,-0.784469,-0.607763,5.241466,1.040469,-0.383965, 0.050019,-0.552867,-0.831767,5.223571,0.974029,-0.362117, 0.274481,0.961015,-0.033322,5.011084,1.06677,-0.458562, 0.050019,-0.552867,-0.831767,5.223571,0.974029,-0.362117, 0.563602,0.822451,-0.076991,5.021254,0.951308,-0.405567, 0.050019,-0.552867,-0.831767,5.223571,0.974029,-0.362117, -0.196146,-0.333078,-0.922272,5.197562,0.922406,-0.302473, -0.400711,0.089185,-0.911853,5.004627,0.908637,-0.345273, 0.050019,-0.552867,-0.831767,5.223571,0.974029,-0.362117, -0.400711,0.089185,-0.911853,5.004627,0.908637,-0.345273, 0.563602,0.822451,-0.076991,5.021254,0.951308,-0.405567, 0.067357,0.280762,-0.957411,4.733657,1.227371,-0.592883, 0.012421,0.392537,-0.919653,4.991713,1.163096,-0.504149, 0.274481,0.961015,-0.033322,5.011084,1.06677,-0.458562, 0.067357,0.280762,-0.957411,4.733657,1.227371,-0.592883, 0.274481,0.961015,-0.033322,5.011084,1.06677,-0.458562, 0.311768,0.950117,0.008871,4.74325,1.05921,-0.563421, 0.311768,0.950117,0.008871,4.74325,1.05921,-0.563421, 0.274481,0.961015,-0.033322,5.011084,1.06677,-0.458562, 0.563602,0.822451,-0.076991,5.021254,0.951308,-0.405567, 0.311768,0.950117,0.008871,4.74325,1.05921,-0.563421, 0.563602,0.822451,-0.076991,5.021254,0.951308,-0.405567, 0.609817,0.770093,-0.187297,4.744871,0.950945,-0.491082, 0.609817,0.770093,-0.187297,4.744871,0.950945,-0.491082, 0.563602,0.822451,-0.076991,5.021254,0.951308,-0.405567, -0.400711,0.089185,-0.911853,5.004627,0.908637,-0.345273, 0.609817,0.770093,-0.187297,4.744871,0.950945,-0.491082, -0.400711,0.089185,-0.911853,5.004627,0.908637,-0.345273, -0.497134,0.140473,-0.856227,4.728809,0.878731,-0.405801, -0.026366,0.234118,-0.971851,4.641547,1.285422,-0.622034, 0.067357,0.280762,-0.957411,4.733657,1.227371,-0.592883, 0.311768,0.950117,0.008871,4.74325,1.05921,-0.563421, -0.026366,0.234118,-0.971851,4.641547,1.285422,-0.622034, 0.311768,0.950117,0.008871,4.74325,1.05921,-0.563421, 0.381066,0.919021,-0.100938,4.567896,1.149805,-0.642484, 0.381066,0.919021,-0.100938,4.567896,1.149805,-0.642484, 0.311768,0.950117,0.008871,4.74325,1.05921,-0.563421, 0.609817,0.770093,-0.187297,4.744871,0.950945,-0.491082, 0.381066,0.919021,-0.100938,4.567896,1.149805,-0.642484, 0.609817,0.770093,-0.187297,4.744871,0.950945,-0.491082, 0.651262,0.697944,-0.29788,4.496191,1.024566,-0.579491, 0.651262,0.697944,-0.29788,4.496191,1.024566,-0.579491, 0.609817,0.770093,-0.187297,4.744871,0.950945,-0.491082, -0.497134,0.140473,-0.856227,4.728809,0.878731,-0.405801, 0.651262,0.697944,-0.29788,4.496191,1.024566,-0.579491, -0.497134,0.140473,-0.856227,4.728809,0.878731,-0.405801, -0.062739,0.996071,-0.062495,4.416475,0.921264,-0.458839, -0.11884,0.991349,0.055713,4.333503,0.951176,-0.481517, -0.062739,0.996071,-0.062495,4.416475,0.921264,-0.458839, -0.134248,0.990294,0.035989,4.399629,0.850459,-0.391855, -0.11884,0.991349,0.055713,4.333503,0.951176,-0.481517, -0.134248,0.990294,0.035989,4.399629,0.850459,-0.391855, -0.081906,0.996619,0.006487,4.297891,0.911506,-0.447987, -0.419631,0.061765,-0.905591,4.66969,0.738163,-0.188296, 0.157494,-0.98752,-0.000465,4.655453,0.758022,0.000098, 0.000801,-1,-0.000539,4.380854,0.704574,-0.00013, -0.419631,0.061765,-0.905591,4.66969,0.738163,-0.188296, 0.000801,-1,-0.000539,4.380854,0.704574,-0.00013, 0.448666,0.893201,-0.029856,4.359048,0.700414,-0.166651, -0.434729,0.079706,-0.897027,4.712067,0.770512,-0.333393, -0.419631,0.061765,-0.905591,4.66969,0.738163,-0.188296, 0.448666,0.893201,-0.029856,4.359048,0.700414,-0.166651, -0.434729,0.079706,-0.897027,4.712067,0.770512,-0.333393, 0.448666,0.893201,-0.029856,4.359048,0.700414,-0.166651, 0.731768,0.675964,-0.087106,4.319799,0.731007,-0.291212, -0.134248,0.990294,0.035989,4.399629,0.850459,-0.391855, -0.434729,0.079706,-0.897027,4.712067,0.770512,-0.333393, 0.731768,0.675964,-0.087106,4.319799,0.731007,-0.291212, -0.134248,0.990294,0.035989,4.399629,0.850459,-0.391855, 0.731768,0.675964,-0.087106,4.319799,0.731007,-0.291212, -0.051101,0.977083,0.206633,4.216374,0.852328,-0.405873, -0.134248,0.990294,0.035989,4.399629,0.850459,-0.391855, -0.051101,0.977083,0.206633,4.216374,0.852328,-0.405873, -0.081906,0.996619,0.006487,4.297891,0.911506,-0.447987, -0.134248,0.990294,0.035989,4.399629,0.850459,-0.391855, -0.062739,0.996071,-0.062495,4.416475,0.921264,-0.458839, -0.497134,0.140473,-0.856227,4.728809,0.878731,-0.405801, -0.134248,0.990294,0.035989,4.399629,0.850459,-0.391855, -0.497134,0.140473,-0.856227,4.728809,0.878731,-0.405801, -0.434729,0.079706,-0.897027,4.712067,0.770512,-0.333393, 0.481644,0.842268,0.242081,4.449011,1.260929,-0.647431, 0.381066,0.919021,-0.100938,4.567896,1.149805,-0.642484, 0.651262,0.697944,-0.29788,4.496191,1.024566,-0.579491, 0.481644,0.842268,0.242081,4.449011,1.260929,-0.647431, 0.651262,0.697944,-0.29788,4.496191,1.024566,-0.579491, 0.794567,0.588129,0.15089,4.366867,1.131136,-0.630581, 0.04154,0.947538,0.316932,4.141189,1.008775,-0.499342, -0.081906,0.996619,0.006487,4.297891,0.911506,-0.447987, -0.051101,0.977083,0.206633,4.216374,0.852328,-0.405873, 0.04154,0.947538,0.316932,4.141189,1.008775,-0.499342, 0.461485,0.788927,0.405742,4.277227,1.077746,-0.550819, -0.11884,0.991349,0.055713,4.333503,0.951176,-0.481517, 0.04154,0.947538,0.316932,4.141189,1.008775,-0.499342, -0.11884,0.991349,0.055713,4.333503,0.951176,-0.481517, -0.081906,0.996619,0.006487,4.297891,0.911506,-0.447987, 0.800967,0.453078,0.391371,4.085564,1.288885,-0.544406, 0.054059,0.926072,0.373454,4.175444,1.350332,-0.613988, 0.461485,0.788927,0.405742,4.277227,1.077746,-0.550819, 0.800967,0.453078,0.391371,4.085564,1.288885,-0.544406, 0.461485,0.788927,0.405742,4.277227,1.077746,-0.550819, 0.04154,0.947538,0.316932,4.141189,1.008775,-0.499342, -0.11884,0.991349,0.055713,4.333503,0.951176,-0.481517, 0.651262,0.697944,-0.29788,4.496191,1.024566,-0.579491, -0.062739,0.996071,-0.062495,4.416475,0.921264,-0.458839, 0.461485,0.788927,0.405742,4.277227,1.077746,-0.550819, 0.794567,0.588129,0.15089,4.366867,1.131136,-0.630581, 0.651262,0.697944,-0.29788,4.496191,1.024566,-0.579491, 0.461485,0.788927,0.405742,4.277227,1.077746,-0.550819, 0.651262,0.697944,-0.29788,4.496191,1.024566,-0.579491, -0.11884,0.991349,0.055713,4.333503,0.951176,-0.481517, 0.054059,0.926072,0.373454,4.175444,1.350332,-0.613988, 0.329366,0.742755,0.582952,4.247733,1.381058,-0.649596, 0.794567,0.588129,0.15089,4.366867,1.131136,-0.630581, 0.054059,0.926072,0.373454,4.175444,1.350332,-0.613988, 0.794567,0.588129,0.15089,4.366867,1.131136,-0.630581, 0.461485,0.788927,0.405742,4.277227,1.077746,-0.550819, 0.329366,0.742755,0.582952,4.247733,1.381058,-0.649596, 0.693689,0.317886,0.646331,4.329607,1.464801,-0.661485, 0.481644,0.842268,0.242081,4.449011,1.260929,-0.647431, 0.329366,0.742755,0.582952,4.247733,1.381058,-0.649596, 0.481644,0.842268,0.242081,4.449011,1.260929,-0.647431, 0.794567,0.588129,0.15089,4.366867,1.131136,-0.630581, 0.693689,0.317886,0.646331,4.329607,1.464801,-0.661485, -0.034875,0.308036,-0.950735,4.430999,1.535753,-0.638888, 0.184871,0.227139,-0.956154,4.522247,1.398278,-0.644892, 0.693689,0.317886,0.646331,4.329607,1.464801,-0.661485, 0.184871,0.227139,-0.956154,4.522247,1.398278,-0.644892, 0.481644,0.842268,0.242081,4.449011,1.260929,-0.647431, 0.000755,0.939587,0.34231,4.312225,1.683392,-0.639944, -0.148853,0.101172,-0.98367,4.404221,1.662433,-0.61661, -0.034875,0.308036,-0.950735,4.430999,1.535753,-0.638888, 0.000755,0.939587,0.34231,4.312225,1.683392,-0.639944, -0.034875,0.308036,-0.950735,4.430999,1.535753,-0.638888, 0.693689,0.317886,0.646331,4.329607,1.464801,-0.661485, 0.204286,0.745568,0.634347,4.303615,1.799914,-0.610388, 0.504832,0.844097,-0.180678,4.38638,1.770868,-0.596666, -0.148853,0.101172,-0.98367,4.404221,1.662433,-0.61661, 0.204286,0.745568,0.634347,4.303615,1.799914,-0.610388, -0.148853,0.101172,-0.98367,4.404221,1.662433,-0.61661, 0.000755,0.939587,0.34231,4.312225,1.683392,-0.639944, 0.525316,0.261331,0.809784,4.304562,1.906537,-0.572242, 0.615047,0.769185,-0.17341,4.377095,1.871713,-0.595743, 0.504832,0.844097,-0.180678,4.38638,1.770868,-0.596666, 0.525316,0.261331,0.809784,4.304562,1.906537,-0.572242, 0.504832,0.844097,-0.180678,4.38638,1.770868,-0.596666, 0.204286,0.745568,0.634347,4.303615,1.799914,-0.610388, -0.051423,0.948155,0.313619,4.240116,1.770049,-0.583946, 0.204286,0.745568,0.634347,4.303615,1.799914,-0.610388, 0.000755,0.939587,0.34231,4.312225,1.683392,-0.639944, -0.051423,0.948155,0.313619,4.240116,1.770049,-0.583946, 0.000755,0.939587,0.34231,4.312225,1.683392,-0.639944, 0.104327,0.725166,0.680624,4.221814,1.660769,-0.59409, 0.104327,0.725166,0.680624,4.221814,1.660769,-0.59409, 0.000755,0.939587,0.34231,4.312225,1.683392,-0.639944, 0.693689,0.317886,0.646331,4.329607,1.464801,-0.661485, 0.104327,0.725166,0.680624,4.221814,1.660769,-0.59409, 0.693689,0.317886,0.646331,4.329607,1.464801,-0.661485, 0.329366,0.742755,0.582952,4.247733,1.381058,-0.649596, 0.288171,0.239224,0.927216,4.121121,1.614451,-0.587188, 0.104327,0.725166,0.680624,4.221814,1.660769,-0.59409, 0.329366,0.742755,0.582952,4.247733,1.381058,-0.649596, 0.288171,0.239224,0.927216,4.121121,1.614451,-0.587188, 0.329366,0.742755,0.582952,4.247733,1.381058,-0.649596, 0.054059,0.926072,0.373454,4.175444,1.350332,-0.613988, 0.811896,0.498733,-0.303464,4.067576,1.572668,-0.534997, 0.288171,0.239224,0.927216,4.121121,1.614451,-0.587188, 0.054059,0.926072,0.373454,4.175444,1.350332,-0.613988, 0.811896,0.498733,-0.303464,4.067576,1.572668,-0.534997, 0.054059,0.926072,0.373454,4.175444,1.350332,-0.613988, 0.800967,0.453078,0.391371,4.085564,1.288885,-0.544406, 0.969409,0.243853,-0.027951,4.148883,1.759918,-0.573765, -0.051423,0.948155,0.313619,4.240116,1.770049,-0.583946, 0.104327,0.725166,0.680624,4.221814,1.660769,-0.59409, 0.969409,0.243853,-0.027951,4.148883,1.759918,-0.573765, 0.104327,0.725166,0.680624,4.221814,1.660769,-0.59409, 0.288171,0.239224,0.927216,4.121121,1.614451,-0.587188, 0.971427,0.04566,0.232906,4.076852,1.746601,-0.527436, 0.969409,0.243853,-0.027951,4.148883,1.759918,-0.573765, 0.288171,0.239224,0.927216,4.121121,1.614451,-0.587188, 0.971427,0.04566,0.232906,4.076852,1.746601,-0.527436, 0.288171,0.239224,0.927216,4.121121,1.614451,-0.587188, 0.811896,0.498733,-0.303464,4.067576,1.572668,-0.534997, -0.965284,-0.261201,0,4.747988,2.300163,-0.000276, -0.989689,-0.143234,0,4.912303,2.162645,-0.00009, -0.194126,0.280848,-0.939914,4.971394,2.146686,-0.224781, -0.965284,-0.261201,0,4.747988,2.300163,-0.000276, -0.194126,0.280848,-0.939914,4.971394,2.146686,-0.224781, 0.2189,0.87846,-0.424724,4.83289,2.262727,-0.283787, -0.941169,-0.337937,0,5.04969,2.032731,0.000071, -0.998597,-0.052951,0,5.177545,1.932323,0.000214, 0.444094,0.036128,-0.895251,5.156645,1.942902,-0.119993, -0.026558,-0.999647,0,5.680007,1.510009,0.000786, 0.694651,0.719347,0.000019,5.743997,1.482739,0.000851, 0.936734,-0.314344,0.154001,5.741781,1.463956,-0.124891, -0.026558,-0.999647,0,5.680007,1.510009,0.000786, 0.936734,-0.314344,0.154001,5.741781,1.463956,-0.124891, 0.987857,-0.047506,-0.147925,5.687035,1.499636,-0.110765, 0.569495,0.821995,-0.000075,5.835498,1.43628,0.000946, -0.016213,0.999869,0,5.908842,1.388968,0.001026, 0.461068,-0.584089,-0.668024,5.915025,1.382159,-0.13682, 0.569495,0.821995,-0.000075,5.835498,1.43628,0.000946, 0.461068,-0.584089,-0.668024,5.915025,1.382159,-0.13682, 0.901575,-0.270544,-0.337593,5.842092,1.427708,-0.130724, 0.850248,-0.122855,0.511845,4.342351,2.581176,-0.140317, -0.069594,-0.997575,-0.000151,4.317602,2.588926,-0.000745, 0.169654,-0.985504,-0.000285,4.454962,2.523303,-0.000603, 0.850248,-0.122855,0.511845,4.342351,2.581176,-0.140317, 0.169654,-0.985504,-0.000285,4.454962,2.523303,-0.000603, 0.603381,-0.138834,0.785275,4.452383,2.524558,-0.130255, 0.335985,-0.093511,0.937214,4.332083,2.586481,-0.194917, 0.850248,-0.122855,0.511845,4.342351,2.581176,-0.140317, 0.603381,-0.138834,0.785275,4.452383,2.524558,-0.130255, 0.335985,-0.093511,0.937214,4.332083,2.586481,-0.194917, 0.603381,-0.138834,0.785275,4.452383,2.524558,-0.130255, 0.104604,0.23696,0.965872,4.440143,2.510529,-0.269164, 0.169215,-0.167065,0.971316,4.339601,2.592642,-0.258891, 0.335985,-0.093511,0.937214,4.332083,2.586481,-0.194917, 0.104604,0.23696,0.965872,4.440143,2.510529,-0.269164, 0.169215,-0.167065,0.971316,4.339601,2.592642,-0.258891, 0.104604,0.23696,0.965872,4.440143,2.510529,-0.269164, 0.054838,0.685321,0.726174,4.429895,2.495758,-0.306894, -0.026478,0.945923,0.32331,4.187258,2.590221,-0.135844, 0.172357,-0.985035,-0.000083,4.189883,2.606916,-0.000863, -0.069594,-0.997575,-0.000151,4.317602,2.588926,-0.000745, -0.026478,0.945923,0.32331,4.187258,2.590221,-0.135844, -0.069594,-0.997575,-0.000151,4.317602,2.588926,-0.000745, 0.850248,-0.122855,0.511845,4.342351,2.581176,-0.140317, -0.071389,0.260054,0.962951,4.203325,2.589186,-0.219164, -0.026478,0.945923,0.32331,4.187258,2.590221,-0.135844, 0.850248,-0.122855,0.511845,4.342351,2.581176,-0.140317, -0.071389,0.260054,0.962951,4.203325,2.589186,-0.219164, 0.850248,-0.122855,0.511845,4.342351,2.581176,-0.140317, 0.335985,-0.093511,0.937214,4.332083,2.586481,-0.194917, -0.01127,-0.268802,0.96313,4.211652,2.602538,-0.264011, -0.071389,0.260054,0.962951,4.203325,2.589186,-0.219164, 0.335985,-0.093511,0.937214,4.332083,2.586481,-0.194917, -0.01127,-0.268802,0.96313,4.211652,2.602538,-0.264011, 0.335985,-0.093511,0.937214,4.332083,2.586481,-0.194917, 0.169215,-0.167065,0.971316,4.339601,2.592642,-0.258891, -0.03479,0.69667,0.716547,4.209941,2.600612,-0.337597, -0.01127,-0.268802,0.96313,4.211652,2.602538,-0.264011, 0.169215,-0.167065,0.971316,4.339601,2.592642,-0.258891, -0.03479,0.69667,0.716547,4.209941,2.600612,-0.337597, 0.169215,-0.167065,0.971316,4.339601,2.592642,-0.258891, -0.01139,0.953897,0.299916,4.328606,2.563996,-0.343892, -0.01139,0.953897,0.299916,4.328606,2.563996,-0.343892, 0.169215,-0.167065,0.971316,4.339601,2.592642,-0.258891, 0.054838,0.685321,0.726174,4.429895,2.495758,-0.306894, -0.01139,0.953897,0.299916,4.328606,2.563996,-0.343892, 0.054838,0.685321,0.726174,4.429895,2.495758,-0.306894, -0.151742,0.274295,0.949598,4.410844,2.500167,-0.351972, 0.210866,-0.977515,0.000009,4.528082,2.467537,-0.000521, -0.965284,-0.261201,0,4.747988,2.300163,-0.000276, 0.337014,-0.030018,-0.941021,4.634996,2.369115,-0.140117, 0.603381,-0.138834,0.785275,4.452383,2.524558,-0.130255, 0.169654,-0.985504,-0.000285,4.454962,2.523303,-0.000603, 0.210866,-0.977515,0.000009,4.528082,2.467537,-0.000521, 0.603381,-0.138834,0.785275,4.452383,2.524558,-0.130255, 0.210866,-0.977515,0.000009,4.528082,2.467537,-0.000521, 0.337014,-0.030018,-0.941021,4.634996,2.369115,-0.140117, 0.603381,-0.138834,0.785275,4.452383,2.524558,-0.130255, 0.337014,-0.030018,-0.941021,4.634996,2.369115,-0.140117, 0.272203,0.043076,-0.961275,4.577573,2.389535,-0.256196, 0.104604,0.23696,0.965872,4.440143,2.510529,-0.269164, 0.603381,-0.138834,0.785275,4.452383,2.524558,-0.130255, 0.272203,0.043076,-0.961275,4.577573,2.389535,-0.256196, 0.054838,0.685321,0.726174,4.429895,2.495758,-0.306894, 0.104604,0.23696,0.965872,4.440143,2.510529,-0.269164, 0.272203,0.043076,-0.961275,4.577573,2.389535,-0.256196, 0.288841,-0.745301,0.600914,4.474318,2.418432,-0.361347, -0.151742,0.274295,0.949598,4.410844,2.500167,-0.351972, 0.054838,0.685321,0.726174,4.429895,2.495758,-0.306894, 0.288841,-0.745301,0.600914,4.474318,2.418432,-0.361347, 0.054838,0.685321,0.726174,4.429895,2.495758,-0.306894, 0.272203,0.043076,-0.961275,4.577573,2.389535,-0.256196, 0.288841,-0.745301,0.600914,4.474318,2.418432,-0.361347, 0.272203,0.043076,-0.961275,4.577573,2.389535,-0.256196, 0.195545,0.103956,-0.975169,4.472349,2.325133,-0.443764, -0.130291,0.991051,-0.029017,4.063205,2.509679,-0.342987, -0.904972,-0.026554,-0.424642,4.088356,2.510913,-0.453793, -0.330515,0.821242,-0.465103,4.07851,2.41181,-0.472193, -0.130291,0.991051,-0.029017,4.063205,2.509679,-0.342987, -0.330515,0.821242,-0.465103,4.07851,2.41181,-0.472193, -0.501952,0.842503,-0.195533,4.043796,2.386524,-0.400392, -0.778384,0.466328,-0.420305,4.055262,2.505284,-0.297282, -0.130291,0.991051,-0.029017,4.063205,2.509679,-0.342987, -0.501952,0.842503,-0.195533,4.043796,2.386524,-0.400392, -0.778384,0.466328,-0.420305,4.055262,2.505284,-0.297282, -0.501952,0.842503,-0.195533,4.043796,2.386524,-0.400392, -0.877603,-0.025307,-0.47872,4.035753,2.399538,-0.343957, -0.026478,0.945923,0.32331,4.187258,2.590221,-0.135844, 0.223577,0.97296,0.057987,4.084506,2.570978,-0.218168, 0.272993,0.962016,-0.000199,4.079812,2.571649,-0.000951, -0.026478,0.945923,0.32331,4.187258,2.590221,-0.135844, 0.272993,0.962016,-0.000199,4.079812,2.571649,-0.000951, 0.172357,-0.985035,-0.000083,4.189883,2.606916,-0.000863, -0.071389,0.260054,0.962951,4.203325,2.589186,-0.219164, -0.247355,0.948391,0.198417,4.101754,2.557092,-0.265856, 0.223577,0.97296,0.057987,4.084506,2.570978,-0.218168, -0.071389,0.260054,0.962951,4.203325,2.589186,-0.219164, 0.223577,0.97296,0.057987,4.084506,2.570978,-0.218168, -0.026478,0.945923,0.32331,4.187258,2.590221,-0.135844, -0.01127,-0.268802,0.96313,4.211652,2.602538,-0.264011, -0.671787,0.737297,-0.07138,4.100907,2.560626,-0.302396, -0.247355,0.948391,0.198417,4.101754,2.557092,-0.265856, -0.01127,-0.268802,0.96313,4.211652,2.602538,-0.264011, -0.247355,0.948391,0.198417,4.101754,2.557092,-0.265856, -0.071389,0.260054,0.962951,4.203325,2.589186,-0.219164, -0.03479,0.69667,0.716547,4.209941,2.600612,-0.337597, -0.860594,0.405545,-0.308076,4.117367,2.568514,-0.3845, -0.671787,0.737297,-0.07138,4.100907,2.560626,-0.302396, -0.03479,0.69667,0.716547,4.209941,2.600612,-0.337597, -0.671787,0.737297,-0.07138,4.100907,2.560626,-0.302396, -0.01127,-0.268802,0.96313,4.211652,2.602538,-0.264011, -0.877603,-0.025307,-0.47872,4.035753,2.399538,-0.343957, -0.683788,0.700764,0.203383,4.00011,2.424158,-0.313254, -0.849668,0.488772,0.197904,4.029016,2.519175,-0.249385, -0.877603,-0.025307,-0.47872,4.035753,2.399538,-0.343957, -0.849668,0.488772,0.197904,4.029016,2.519175,-0.249385, -0.778384,0.466328,-0.420305,4.055262,2.505284,-0.297282, 0.544067,0.839042,-0.000076,4.024214,2.527933,-0.000987, -0.849668,0.488772,0.197904,4.029016,2.519175,-0.249385, -0.683788,0.700764,0.203383,4.00011,2.424158,-0.313254, 0.544067,0.839042,-0.000076,4.024214,2.527933,-0.000987, -0.683788,0.700764,0.203383,4.00011,2.424158,-0.313254, -0.069267,0.997598,-0.000362,3.988172,2.489642,-0.001008, 0.544067,0.839042,-0.000076,4.024214,2.527933,-0.000987, 0.272993,0.962016,-0.000199,4.079812,2.571649,-0.000951, 0.223577,0.97296,0.057987,4.084506,2.570978,-0.218168, 0.544067,0.839042,-0.000076,4.024214,2.527933,-0.000987, 0.223577,0.97296,0.057987,4.084506,2.570978,-0.218168, -0.849668,0.488772,0.197904,4.029016,2.519175,-0.249385, -0.849668,0.488772,0.197904,4.029016,2.519175,-0.249385, 0.223577,0.97296,0.057987,4.084506,2.570978,-0.218168, -0.247355,0.948391,0.198417,4.101754,2.557092,-0.265856, -0.849668,0.488772,0.197904,4.029016,2.519175,-0.249385, -0.247355,0.948391,0.198417,4.101754,2.557092,-0.265856, -0.778384,0.466328,-0.420305,4.055262,2.505284,-0.297282, -0.778384,0.466328,-0.420305,4.055262,2.505284,-0.297282, -0.247355,0.948391,0.198417,4.101754,2.557092,-0.265856, -0.671787,0.737297,-0.07138,4.100907,2.560626,-0.302396, -0.778384,0.466328,-0.420305,4.055262,2.505284,-0.297282, -0.671787,0.737297,-0.07138,4.100907,2.560626,-0.302396, -0.130291,0.991051,-0.029017,4.063205,2.509679,-0.342987, -0.130291,0.991051,-0.029017,4.063205,2.509679,-0.342987, -0.671787,0.737297,-0.07138,4.100907,2.560626,-0.302396, -0.860594,0.405545,-0.308076,4.117367,2.568514,-0.3845, -0.130291,0.991051,-0.029017,4.063205,2.509679,-0.342987, -0.860594,0.405545,-0.308076,4.117367,2.568514,-0.3845, -0.904972,-0.026554,-0.424642,4.088356,2.510913,-0.453793, 0.622247,0.782821,-0.000247,3.787342,2.396113,-0.001159, -0.069267,0.997598,-0.000362,3.988172,2.489642,-0.001008, -0.683788,0.700764,0.203383,4.00011,2.424158,-0.313254, 0.622247,0.782821,-0.000247,3.787342,2.396113,-0.001159, -0.683788,0.700764,0.203383,4.00011,2.424158,-0.313254, -0.210883,0.942026,0.260987,3.828001,2.35254,-0.233341, -0.683788,0.700764,0.203383,4.00011,2.424158,-0.313254, -0.892748,0.392127,0.221893,3.961908,2.347745,-0.374747, -0.502349,0.838172,0.212398,3.870548,2.292106,-0.368964, -0.683788,0.700764,0.203383,4.00011,2.424158,-0.313254, -0.502349,0.838172,0.212398,3.870548,2.292106,-0.368964, -0.210883,0.942026,0.260987,3.828001,2.35254,-0.233341, -0.683788,0.700764,0.203383,4.00011,2.424158,-0.313254, -0.877603,-0.025307,-0.47872,4.035753,2.399538,-0.343957, -0.501952,0.842503,-0.195533,4.043796,2.386524,-0.400392, -0.683788,0.700764,0.203383,4.00011,2.424158,-0.313254, -0.501952,0.842503,-0.195533,4.043796,2.386524,-0.400392, -0.981668,0.173926,0.077954,4.025364,2.3593,-0.402597, -0.683788,0.700764,0.203383,4.00011,2.424158,-0.313254, -0.981668,0.173926,0.077954,4.025364,2.3593,-0.402597, -0.892748,0.392127,0.221893,3.961908,2.347745,-0.374747, -0.892748,0.392127,0.221893,3.961908,2.347745,-0.374747, -0.981668,0.173926,0.077954,4.025364,2.3593,-0.402597, -0.990661,0.056144,0.124249,4.077563,2.305187,-0.510338, -0.892748,0.392127,0.221893,3.961908,2.347745,-0.374747, -0.990661,0.056144,0.124249,4.077563,2.305187,-0.510338, -0.894795,0.444359,0.043442,3.967085,2.280648,-0.537643, -0.502349,0.838172,0.212398,3.870548,2.292106,-0.368964, -0.892748,0.392127,0.221893,3.961908,2.347745,-0.374747, -0.894795,0.444359,0.043442,3.967085,2.280648,-0.537643, -0.502349,0.838172,0.212398,3.870548,2.292106,-0.368964, -0.894795,0.444359,0.043442,3.967085,2.280648,-0.537643, -0.941564,0.056552,-0.332054,3.903911,2.241501,-0.512468, -0.502349,0.838172,0.212398,3.870548,2.292106,-0.368964, -0.941564,0.056552,-0.332054,3.903911,2.241501,-0.512468, -0.984655,0.15519,-0.07981,3.857922,2.141554,-0.521067, -0.502349,0.838172,0.212398,3.870548,2.292106,-0.368964, -0.984655,0.15519,-0.07981,3.857922,2.141554,-0.521067, -0.768362,0.592232,0.242656,3.823349,2.141733,-0.428356, -0.501952,0.842503,-0.195533,4.043796,2.386524,-0.400392, -0.330515,0.821242,-0.465103,4.07851,2.41181,-0.472193, -0.536307,0.710867,-0.45502,4.113935,2.334131,-0.526471, -0.501952,0.842503,-0.195533,4.043796,2.386524,-0.400392, -0.536307,0.710867,-0.45502,4.113935,2.334131,-0.526471, -0.990661,0.056144,0.124249,4.077563,2.305187,-0.510338, -0.501952,0.842503,-0.195533,4.043796,2.386524,-0.400392, -0.990661,0.056144,0.124249,4.077563,2.305187,-0.510338, -0.981668,0.173926,0.077954,4.025364,2.3593,-0.402597, -0.990661,0.056144,0.124249,4.077563,2.305187,-0.510338, -0.978317,0.206989,0.00716,4.112302,2.285832,-0.5955, -0.463096,-0.149334,-0.873637,4.010847,2.270246,-0.622149, -0.990661,0.056144,0.124249,4.077563,2.305187,-0.510338, -0.463096,-0.149334,-0.873637,4.010847,2.270246,-0.622149, -0.894795,0.444359,0.043442,3.967085,2.280648,-0.537643, -0.894795,0.444359,0.043442,3.967085,2.280648,-0.537643, -0.463096,-0.149334,-0.873637,4.010847,2.270246,-0.622149, -0.641549,-0.578509,-0.503727,3.928869,2.223919,-0.615683, -0.894795,0.444359,0.043442,3.967085,2.280648,-0.537643, -0.641549,-0.578509,-0.503727,3.928869,2.223919,-0.615683, -0.941564,0.056552,-0.332054,3.903911,2.241501,-0.512468, -0.941564,0.056552,-0.332054,3.903911,2.241501,-0.512468, -0.641549,-0.578509,-0.503727,3.928869,2.223919,-0.615683, -0.791764,-0.610494,0.020171,3.892378,2.149432,-0.603589, -0.941564,0.056552,-0.332054,3.903911,2.241501,-0.512468, -0.791764,-0.610494,0.020171,3.892378,2.149432,-0.603589, -0.984655,0.15519,-0.07981,3.857922,2.141554,-0.521067, -0.978317,0.206989,0.00716,4.112302,2.285832,-0.5955, -0.832539,-0.5495,-0.070196,4.146067,2.278102,-0.707372, -0.862876,-0.450622,-0.228877,4.04473,2.254459,-0.744209, -0.978317,0.206989,0.00716,4.112302,2.285832,-0.5955, -0.862876,-0.450622,-0.228877,4.04473,2.254459,-0.744209, -0.463096,-0.149334,-0.873637,4.010847,2.270246,-0.622149, -0.641549,-0.578509,-0.503727,3.928869,2.223919,-0.615683, -0.463096,-0.149334,-0.873637,4.010847,2.270246,-0.622149, -0.862876,-0.450622,-0.228877,4.04473,2.254459,-0.744209, -0.641549,-0.578509,-0.503727,3.928869,2.223919,-0.615683, -0.862876,-0.450622,-0.228877,4.04473,2.254459,-0.744209, -0.916648,-0.2944,-0.270344,3.990744,2.205448,-0.710795, -0.641549,-0.578509,-0.503727,3.928869,2.223919,-0.615683, -0.916648,-0.2944,-0.270344,3.990744,2.205448,-0.710795, -0.975013,-0.179567,-0.130791,3.945464,2.1301,-0.689536, -0.641549,-0.578509,-0.503727,3.928869,2.223919,-0.615683, -0.975013,-0.179567,-0.130791,3.945464,2.1301,-0.689536, -0.791764,-0.610494,0.020171,3.892378,2.149432,-0.603589, -0.536307,0.710867,-0.45502,4.113935,2.334131,-0.526471, -0.091679,0.768658,-0.633056,4.296769,2.260422,-0.528796, -0.963659,-0.230665,-0.134738,4.212974,2.303184,-0.587113, -0.990661,0.056144,0.124249,4.077563,2.305187,-0.510338, -0.536307,0.710867,-0.45502,4.113935,2.334131,-0.526471, -0.963659,-0.230665,-0.134738,4.212974,2.303184,-0.587113, -0.990661,0.056144,0.124249,4.077563,2.305187,-0.510338, -0.963659,-0.230665,-0.134738,4.212974,2.303184,-0.587113, -0.978317,0.206989,0.00716,4.112302,2.285832,-0.5955, -0.963659,-0.230665,-0.134738,4.212974,2.303184,-0.587113, -0.990956,-0.062739,-0.118613,4.212058,2.27945,-0.625927, -0.832539,-0.5495,-0.070196,4.146067,2.278102,-0.707372, -0.963659,-0.230665,-0.134738,4.212974,2.303184,-0.587113, -0.832539,-0.5495,-0.070196,4.146067,2.278102,-0.707372, -0.978317,0.206989,0.00716,4.112302,2.285832,-0.5955, -0.990956,-0.062739,-0.118613,4.212058,2.27945,-0.625927, -0.938303,-0.3372,-0.076703,4.229332,2.274522,-0.672749, -0.473779,-0.24744,-0.845167,4.172143,2.303394,-0.778972, -0.990956,-0.062739,-0.118613,4.212058,2.27945,-0.625927, -0.473779,-0.24744,-0.845167,4.172143,2.303394,-0.778972, -0.832539,-0.5495,-0.070196,4.146067,2.278102,-0.707372, -0.832539,-0.5495,-0.070196,4.146067,2.278102,-0.707372, -0.473779,-0.24744,-0.845167,4.172143,2.303394,-0.778972, -0.713872,-0.610821,-0.342469,4.079122,2.264104,-0.84501, -0.832539,-0.5495,-0.070196,4.146067,2.278102,-0.707372, -0.713872,-0.610821,-0.342469,4.079122,2.264104,-0.84501, -0.862876,-0.450622,-0.228877,4.04473,2.254459,-0.744209, -0.862876,-0.450622,-0.228877,4.04473,2.254459,-0.744209, -0.713872,-0.610821,-0.342469,4.079122,2.264104,-0.84501, -0.719395,-0.61545,-0.322011,4.0247,2.187859,-0.814219, -0.862876,-0.450622,-0.228877,4.04473,2.254459,-0.744209, -0.719395,-0.61545,-0.322011,4.0247,2.187859,-0.814219, -0.916648,-0.2944,-0.270344,3.990744,2.205448,-0.710795, -0.938303,-0.3372,-0.076703,4.229332,2.274522,-0.672749, -0.841909,-0.49598,-0.212588,4.273005,2.310529,-0.762172, 0.760119,-0.003927,-0.649772,4.215419,2.350484,-0.885764, -0.938303,-0.3372,-0.076703,4.229332,2.274522,-0.672749, 0.760119,-0.003927,-0.649772,4.215419,2.350484,-0.885764, -0.473779,-0.24744,-0.845167,4.172143,2.303394,-0.778972, -0.473779,-0.24744,-0.845167,4.172143,2.303394,-0.778972, 0.760119,-0.003927,-0.649772,4.215419,2.350484,-0.885764, 0.911709,-0.064352,-0.405765,4.104864,2.298353,-0.915735, -0.473779,-0.24744,-0.845167,4.172143,2.303394,-0.778972, 0.911709,-0.064352,-0.405765,4.104864,2.298353,-0.915735, -0.713872,-0.610821,-0.342469,4.079122,2.264104,-0.84501, -0.713872,-0.610821,-0.342469,4.079122,2.264104,-0.84501, 0.911709,-0.064352,-0.405765,4.104864,2.298353,-0.915735, 0.3335,0.232683,-0.913584,4.059714,2.194906,-0.888152, -0.713872,-0.610821,-0.342469,4.079122,2.264104,-0.84501, 0.3335,0.232683,-0.913584,4.059714,2.194906,-0.888152, -0.719395,-0.61545,-0.322011,4.0247,2.187859,-0.814219, 0.245858,0.150988,-0.957474,4.061989,2.231988,-1.178382, 0.89585,0.32639,-0.301532,4.102304,2.29996,-1.025862, -0.396467,0.225967,-0.889805,4.155551,2.388662,-1.09196, 0.245858,0.150988,-0.957474,4.061989,2.231988,-1.178382, -0.396467,0.225967,-0.889805,4.155551,2.388662,-1.09196, -0.279333,0.256919,-0.925184,4.097362,2.3666,-1.239986, 0.911709,-0.064352,-0.405765,4.104864,2.298353,-0.915735, 0.760119,-0.003927,-0.649772,4.215419,2.350484,-0.885764, -0.564249,0.755597,0.33271,4.194233,2.408334,-1.008471, 0.911709,-0.064352,-0.405765,4.104864,2.298353,-0.915735, -0.564249,0.755597,0.33271,4.194233,2.408334,-1.008471, 0.89585,0.32639,-0.301532,4.102304,2.29996,-1.025862, 0.89585,0.32639,-0.301532,4.102304,2.29996,-1.025862, -0.564249,0.755597,0.33271,4.194233,2.408334,-1.008471, -0.396467,0.225967,-0.889805,4.155551,2.388662,-1.09196, 0.760119,-0.003927,-0.649772,4.215419,2.350484,-0.885764, -0.841909,-0.49598,-0.212588,4.273005,2.310529,-0.762172, -0.571598,0.654164,0.495323,4.307092,2.367482,-0.877202, 0.760119,-0.003927,-0.649772,4.215419,2.350484,-0.885764, -0.571598,0.654164,0.495323,4.307092,2.367482,-0.877202, -0.601466,0.441167,0.666041,4.266263,2.421651,-1.054799, 0.760119,-0.003927,-0.649772,4.215419,2.350484,-0.885764, -0.601466,0.441167,0.666041,4.266263,2.421651,-1.054799, -0.564249,0.755597,0.33271,4.194233,2.408334,-1.008471, -0.564249,0.755597,0.33271,4.194233,2.408334,-1.008471, -0.601466,0.441167,0.666041,4.266263,2.421651,-1.054799, -0.434016,0.136262,0.890541,4.228523,2.435029,-1.098575, -0.564249,0.755597,0.33271,4.194233,2.408334,-1.008471, -0.434016,0.136262,0.890541,4.228523,2.435029,-1.098575, -0.396467,0.225967,-0.889805,4.155551,2.388662,-1.09196, -0.396467,0.225967,-0.889805,4.155551,2.388662,-1.09196, -0.434016,0.136262,0.890541,4.228523,2.435029,-1.098575, -0.195132,0.128745,0.97229,4.17047,2.458441,-1.241846, -0.396467,0.225967,-0.889805,4.155551,2.388662,-1.09196, -0.195132,0.128745,0.97229,4.17047,2.458441,-1.241846, -0.279333,0.256919,-0.925184,4.097362,2.3666,-1.239986, -0.279333,0.256919,-0.925184,4.097362,2.3666,-1.239986, -0.195132,0.128745,0.97229,4.17047,2.458441,-1.241846, -0.172151,0.101796,0.979797,4.094116,2.426172,-1.381032, -0.279333,0.256919,-0.925184,4.097362,2.3666,-1.239986, -0.172151,0.101796,0.979797,4.094116,2.426172,-1.381032, -0.086812,-0.050981,0.994919,4.058311,2.293363,-1.338054, -0.086812,-0.050981,0.994919,4.058311,2.293363,-1.338054, -0.172151,0.101796,0.979797,4.094116,2.426172,-1.381032, 0.020519,-0.282941,0.958918,4.046673,2.341349,-1.45253, 0.3335,0.232683,-0.913584,4.059714,2.194906,-0.888152, 0.911709,-0.064352,-0.405765,4.104864,2.298353,-0.915735, 0.89585,0.32639,-0.301532,4.102304,2.29996,-1.025862, 0.3335,0.232683,-0.913584,4.059714,2.194906,-0.888152, 0.89585,0.32639,-0.301532,4.102304,2.29996,-1.025862, 0.161194,-0.480657,0.861966,4.047406,2.207209,-1.015108, 0.161194,-0.480657,0.861966,4.047406,2.207209,-1.015108, 0.89585,0.32639,-0.301532,4.102304,2.29996,-1.025862, 0.245858,0.150988,-0.957474,4.061989,2.231988,-1.178382, -0.975013,-0.179567,-0.130791,3.945464,2.1301,-0.689536, -0.916648,-0.2944,-0.270344,3.990744,2.205448,-0.710795, -0.719395,-0.61545,-0.322011,4.0247,2.187859,-0.814219, -0.975013,-0.179567,-0.130791,3.945464,2.1301,-0.689536, -0.719395,-0.61545,-0.322011,4.0247,2.187859,-0.814219, 0.313443,-0.691245,0.651102,3.989434,2.118832,-0.765086, 0.313443,-0.691245,0.651102,3.989434,2.118832,-0.765086, -0.719395,-0.61545,-0.322011,4.0247,2.187859,-0.814219, 0.3335,0.232683,-0.913584,4.059714,2.194906,-0.888152, 0.313443,-0.691245,0.651102,3.989434,2.118832,-0.765086, 0.3335,0.232683,-0.913584,4.059714,2.194906,-0.888152, 0.492393,-0.77993,0.38634,4.022592,2.123052,-0.903284, 0.492393,-0.77993,0.38634,4.022592,2.123052,-0.903284, 0.3335,0.232683,-0.913584,4.059714,2.194906,-0.888152, 0.161194,-0.480657,0.861966,4.047406,2.207209,-1.015108, 0.492393,-0.77993,0.38634,4.022592,2.123052,-0.903284, 0.161194,-0.480657,0.861966,4.047406,2.207209,-1.015108, -0.463441,0.825581,0.321928,4.020299,2.141675,-1.002365, -0.463441,0.825581,0.321928,4.020299,2.141675,-1.002365, 0.161194,-0.480657,0.861966,4.047406,2.207209,-1.015108, 0.245858,0.150988,-0.957474,4.061989,2.231988,-1.178382, 0.245858,0.150988,-0.957474,4.061989,2.231988,-1.178382, -0.279333,0.256919,-0.925184,4.097362,2.3666,-1.239986, -0.086812,-0.050981,0.994919,4.058311,2.293363,-1.338054, 0.261393,-0.399072,0.878872,4.036947,1.992167,-1.072561, -0.463441,0.825581,0.321928,4.020299,2.141675,-1.002365, 0.245858,0.150988,-0.957474,4.061989,2.231988,-1.178382, 0.261393,-0.399072,0.878872,4.036947,1.992167,-1.072561, 0.245858,0.150988,-0.957474,4.061989,2.231988,-1.178382, 0.428291,-0.499911,0.752765,4.024858,2.106568,-1.208099, 0.428291,-0.499911,0.752765,4.024858,2.106568,-1.208099, 0.245858,0.150988,-0.957474,4.061989,2.231988,-1.178382, -0.086812,-0.050981,0.994919,4.058311,2.293363,-1.338054, -0.086812,-0.050981,0.994919,4.058311,2.293363,-1.338054, 0.020519,-0.282941,0.958918,4.046673,2.341349,-1.45253, 0.07924,-0.231863,0.969516,4.082988,2.175805,-1.45093, -0.081635,-0.03459,0.996062,4.103303,2.038565,-1.363737, 0.428291,-0.499911,0.752765,4.024858,2.106568,-1.208099, -0.086812,-0.050981,0.994919,4.058311,2.293363,-1.338054, -0.081635,-0.03459,0.996062,4.103303,2.038565,-1.363737, -0.086812,-0.050981,0.994919,4.058311,2.293363,-1.338054, 0.07924,-0.231863,0.969516,4.082988,2.175805,-1.45093, 0.428291,-0.499911,0.752765,4.024858,2.106568,-1.208099, -0.081635,-0.03459,0.996062,4.103303,2.038565,-1.363737, -0.178707,0.132414,0.974951,4.152166,1.868775,-1.225002, 0.428291,-0.499911,0.752765,4.024858,2.106568,-1.208099, -0.178707,0.132414,0.974951,4.152166,1.868775,-1.225002, 0.261393,-0.399072,0.878872,4.036947,1.992167,-1.072561, 0.454048,-0.464454,0.760344,4.031515,1.968248,-0.91846, 0.261393,-0.399072,0.878872,4.036947,1.992167,-1.072561, -0.178707,0.132414,0.974951,4.152166,1.868775,-1.225002, 0.454048,-0.464454,0.760344,4.031515,1.968248,-0.91846, -0.178707,0.132414,0.974951,4.152166,1.868775,-1.225002, -0.21777,0.161093,0.962614,4.127903,1.828359,-1.090512, 0.454048,-0.464454,0.760344,4.031515,1.968248,-0.91846, 0.492393,-0.77993,0.38634,4.022592,2.123052,-0.903284, -0.463441,0.825581,0.321928,4.020299,2.141675,-1.002365, 0.454048,-0.464454,0.760344,4.031515,1.968248,-0.91846, -0.463441,0.825581,0.321928,4.020299,2.141675,-1.002365, 0.261393,-0.399072,0.878872,4.036947,1.992167,-1.072561, 0.673211,-0.580891,0.457551,3.922437,1.972461,-0.483563, -0.768362,0.592232,0.242656,3.823349,2.141733,-0.428356, -0.984655,0.15519,-0.07981,3.857922,2.141554,-0.521067, 0.673211,-0.580891,0.457551,3.922437,1.972461,-0.483563, -0.984655,0.15519,-0.07981,3.857922,2.141554,-0.521067, -0.384424,0.863444,0.326623,3.966639,1.969285,-0.549291, -0.384424,0.863444,0.326623,3.966639,1.969285,-0.549291, -0.984655,0.15519,-0.07981,3.857922,2.141554,-0.521067, -0.791764,-0.610494,0.020171,3.892378,2.149432,-0.603589, -0.384424,0.863444,0.326623,3.966639,1.969285,-0.549291, -0.791764,-0.610494,0.020171,3.892378,2.149432,-0.603589, -0.354832,0.724971,0.590348,3.98291,1.987391,-0.639809, 0.673211,-0.580891,0.457551,3.922437,1.972461,-0.483563, -0.384424,0.863444,0.326623,3.966639,1.969285,-0.549291, -0.385487,0.478576,0.788901,4.094112,1.889281,-0.578435, 0.673211,-0.580891,0.457551,3.922437,1.972461,-0.483563, -0.385487,0.478576,0.788901,4.094112,1.889281,-0.578435, -0.447812,0.698934,0.557634,4.059885,1.86046,-0.470087, -0.384424,0.863444,0.326623,3.966639,1.969285,-0.549291, -0.354832,0.724971,0.590348,3.98291,1.987391,-0.639809, -0.385487,0.478576,0.788901,4.094112,1.889281,-0.578435, 0.313443,-0.691245,0.651102,3.989434,2.118832,-0.765086, 0.492393,-0.77993,0.38634,4.022592,2.123052,-0.903284, 0.454048,-0.464454,0.760344,4.031515,1.968248,-0.91846, 0.313443,-0.691245,0.651102,3.989434,2.118832,-0.765086, 0.454048,-0.464454,0.760344,4.031515,1.968248,-0.91846, -0.270788,0.46353,0.843691,4.017509,1.996169,-0.731654, -0.270788,0.46353,0.843691,4.017509,1.996169,-0.731654, -0.975013,-0.179567,-0.130791,3.945464,2.1301,-0.689536, 0.313443,-0.691245,0.651102,3.989434,2.118832,-0.765086, -0.354832,0.724971,0.590348,3.98291,1.987391,-0.639809, -0.791764,-0.610494,0.020171,3.892378,2.149432,-0.603589, -0.975013,-0.179567,-0.130791,3.945464,2.1301,-0.689536, -0.354832,0.724971,0.590348,3.98291,1.987391,-0.639809, -0.975013,-0.179567,-0.130791,3.945464,2.1301,-0.689536, -0.270788,0.46353,0.843691,4.017509,1.996169,-0.731654, -0.354832,0.724971,0.590348,3.98291,1.987391,-0.639809, -0.270788,0.46353,0.843691,4.017509,1.996169,-0.731654, -0.385487,0.478576,0.788901,4.094112,1.889281,-0.578435, -0.270788,0.46353,0.843691,4.017509,1.996169,-0.731654, -0.273816,0.228927,0.93414,4.150297,1.820575,-0.917046, -0.385487,0.478576,0.788901,4.094112,1.889281,-0.578435, -0.270788,0.46353,0.843691,4.017509,1.996169,-0.731654, 0.454048,-0.464454,0.760344,4.031515,1.968248,-0.91846, -0.21777,0.161093,0.962614,4.127903,1.828359,-1.090512, -0.270788,0.46353,0.843691,4.017509,1.996169,-0.731654, -0.21777,0.161093,0.962614,4.127903,1.828359,-1.090512, -0.273816,0.228927,0.93414,4.150297,1.820575,-0.917046, -0.091679,0.768658,-0.633056,4.296769,2.260422,-0.528796, 0.195545,0.103956,-0.975169,4.472349,2.325133,-0.443764, 0.196849,0.14562,-0.969559,4.389484,2.190421,-0.47332, -0.203969,0.261593,0.94338,4.314791,2.142163,-0.54065, 0.196849,0.14562,-0.969559,4.389484,2.190421,-0.47332, 0.159882,0.223439,0.961516,4.3427,2.112281,-0.516692, -0.203969,0.261593,0.94338,4.314791,2.142163,-0.54065, 0.159882,0.223439,0.961516,4.3427,2.112281,-0.516692, 0.224429,0.165293,0.96037,4.305411,2.059245,-0.539407, -0.203969,0.261593,0.94338,4.314791,2.142163,-0.54065, -0.091679,0.768658,-0.633056,4.296769,2.260422,-0.528796, 0.196849,0.14562,-0.969559,4.389484,2.190421,-0.47332, 0.159882,0.223439,0.961516,4.3427,2.112281,-0.516692, 0.196849,0.14562,-0.969559,4.389484,2.190421,-0.47332, 0.361081,-0.056526,-0.93082,4.43302,2.024714,-0.563794, 0.224429,0.165293,0.96037,4.305411,2.059245,-0.539407, 0.159882,0.223439,0.961516,4.3427,2.112281,-0.516692, 0.361081,-0.056526,-0.93082,4.43302,2.024714,-0.563794, 0.020519,-0.282941,0.958918,4.046673,2.341349,-1.45253, -0.172151,0.101796,0.979797,4.094116,2.426172,-1.381032, 0.482381,-0.398126,0.780259,4.148927,2.388726,-1.376879, 0.020519,-0.282941,0.958918,4.046673,2.341349,-1.45253, 0.482381,-0.398126,0.780259,4.148927,2.388726,-1.376879, 0.702554,-0.570096,0.42592,4.101726,2.312318,-1.438163, 0.45552,-0.330523,0.826593,4.149438,2.34055,-1.353693, 0.331391,0.08899,0.939287,4.169404,2.306276,-1.284031, 0.445439,-0.182623,0.876489,4.140097,2.295949,-1.367196, 0.45552,-0.330523,0.826593,4.149438,2.34055,-1.353693, 0.445439,-0.182623,0.876489,4.140097,2.295949,-1.367196, 0.489736,-0.346185,0.800197,4.129926,2.30877,-1.402259, 0.331391,0.08899,0.939287,4.169404,2.306276,-1.284031, 0.474213,-0.311965,0.823286,4.141759,2.279958,-1.29534, 0.445439,-0.182623,0.876489,4.140097,2.295949,-1.367196, -0.172151,0.101796,0.979797,4.094116,2.426172,-1.381032, -0.195132,0.128745,0.97229,4.17047,2.458441,-1.241846, 0.483908,-0.405185,0.775667,4.197644,2.394643,-1.248646, -0.172151,0.101796,0.979797,4.094116,2.426172,-1.381032, 0.483908,-0.405185,0.775667,4.197644,2.394643,-1.248646, 0.482381,-0.398126,0.780259,4.148927,2.388726,-1.376879, 0.482381,-0.398126,0.780259,4.148927,2.388726,-1.376879, 0.483908,-0.405185,0.775667,4.197644,2.394643,-1.248646, 0.383941,-0.196382,0.902232,4.197516,2.349135,-1.253043, 0.482381,-0.398126,0.780259,4.148927,2.388726,-1.376879, 0.383941,-0.196382,0.902232,4.197516,2.349135,-1.253043, 0.45552,-0.330523,0.826593,4.149438,2.34055,-1.353693, 0.383941,-0.196382,0.902232,4.197516,2.349135,-1.253043, 0.488174,-0.280956,0.826287,4.199317,2.304652,-1.17454, 0.331391,0.08899,0.939287,4.169404,2.306276,-1.284031, 0.383941,-0.196382,0.902232,4.197516,2.349135,-1.253043, 0.331391,0.08899,0.939287,4.169404,2.306276,-1.284031, 0.45552,-0.330523,0.826593,4.149438,2.34055,-1.353693, 0.531574,-0.288506,0.796362,4.274886,2.22003,-0.679075, -0.091679,0.768658,-0.633056,4.296769,2.260422,-0.528796, -0.203969,0.261593,0.94338,4.314791,2.142163,-0.54065, 0.531574,-0.288506,0.796362,4.274886,2.22003,-0.679075, -0.203969,0.261593,0.94338,4.314791,2.142163,-0.54065, -0.175197,0.22468,0.958553,4.26732,2.121987,-0.61494, -0.023695,0.006701,0.999697,4.38099,2.207701,-0.839016, 0.531574,-0.288506,0.796362,4.274886,2.22003,-0.679075, -0.175197,0.22468,0.958553,4.26732,2.121987,-0.61494, -0.023695,0.006701,0.999697,4.38099,2.207701,-0.839016, -0.175197,0.22468,0.958553,4.26732,2.121987,-0.61494, -0.128537,0.152973,0.979835,4.354411,2.102985,-0.80258, -0.963659,-0.230665,-0.134738,4.212974,2.303184,-0.587113, -0.091679,0.768658,-0.633056,4.296769,2.260422,-0.528796, -0.990956,-0.062739,-0.118613,4.212058,2.27945,-0.625927, -0.990956,-0.062739,-0.118613,4.212058,2.27945,-0.625927, -0.091679,0.768658,-0.633056,4.296769,2.260422,-0.528796, -0.938303,-0.3372,-0.076703,4.229332,2.274522,-0.672749, -0.938303,-0.3372,-0.076703,4.229332,2.274522,-0.672749, -0.091679,0.768658,-0.633056,4.296769,2.260422,-0.528796, 0.531574,-0.288506,0.796362,4.274886,2.22003,-0.679075, -0.841909,-0.49598,-0.212588,4.273005,2.310529,-0.762172, -0.938303,-0.3372,-0.076703,4.229332,2.274522,-0.672749, 0.531574,-0.288506,0.796362,4.274886,2.22003,-0.679075, -0.841909,-0.49598,-0.212588,4.273005,2.310529,-0.762172, 0.531574,-0.288506,0.796362,4.274886,2.22003,-0.679075, -0.571598,0.654164,0.495323,4.307092,2.367482,-0.877202, -0.175197,0.22468,0.958553,4.26732,2.121987,-0.61494, -0.203969,0.261593,0.94338,4.314791,2.142163,-0.54065, 0.224429,0.165293,0.96037,4.305411,2.059245,-0.539407, -0.571598,0.654164,0.495323,4.307092,2.367482,-0.877202, 0.531574,-0.288506,0.796362,4.274886,2.22003,-0.679075, -0.023695,0.006701,0.999697,4.38099,2.207701,-0.839016, -0.571598,0.654164,0.495323,4.307092,2.367482,-0.877202, -0.023695,0.006701,0.999697,4.38099,2.207701,-0.839016, 0.144017,-0.141696,0.979378,4.369751,2.298204,-0.921894, 0.325831,-0.277459,0.903798,4.303193,2.347123,-1.044413, -0.601466,0.441167,0.666041,4.266263,2.421651,-1.054799, -0.571598,0.654164,0.495323,4.307092,2.367482,-0.877202, 0.325831,-0.277459,0.903798,4.303193,2.347123,-1.044413, -0.571598,0.654164,0.495323,4.307092,2.367482,-0.877202, 0.144017,-0.141696,0.979378,4.369751,2.298204,-0.921894, 0.441787,-0.375177,0.814903,4.245861,2.375093,-1.141312, -0.434016,0.136262,0.890541,4.228523,2.435029,-1.098575, -0.601466,0.441167,0.666041,4.266263,2.421651,-1.054799, 0.441787,-0.375177,0.814903,4.245861,2.375093,-1.141312, -0.601466,0.441167,0.666041,4.266263,2.421651,-1.054799, 0.325831,-0.277459,0.903798,4.303193,2.347123,-1.044413, 0.441787,-0.375177,0.814903,4.245861,2.375093,-1.141312, 0.483908,-0.405185,0.775667,4.197644,2.394643,-1.248646, -0.195132,0.128745,0.97229,4.17047,2.458441,-1.241846, 0.441787,-0.375177,0.814903,4.245861,2.375093,-1.141312, -0.195132,0.128745,0.97229,4.17047,2.458441,-1.241846, -0.434016,0.136262,0.890541,4.228523,2.435029,-1.098575, 0.383941,-0.196382,0.902232,4.197516,2.349135,-1.253043, 0.483908,-0.405185,0.775667,4.197644,2.394643,-1.248646, 0.441787,-0.375177,0.814903,4.245861,2.375093,-1.141312, 0.383941,-0.196382,0.902232,4.197516,2.349135,-1.253043, 0.441787,-0.375177,0.814903,4.245861,2.375093,-1.141312, 0.226651,-0.023678,0.973688,4.218457,2.356834,-1.142444, 0.226651,-0.023678,0.973688,4.218457,2.356834,-1.142444, 0.441787,-0.375177,0.814903,4.245861,2.375093,-1.141312, 0.325831,-0.277459,0.903798,4.303193,2.347123,-1.044413, 0.226651,-0.023678,0.973688,4.218457,2.356834,-1.142444, 0.325831,-0.277459,0.903798,4.303193,2.347123,-1.044413, 0.065337,0.07376,0.995133,4.275405,2.319905,-1.0464, 0.325831,-0.277459,0.903798,4.303193,2.347123,-1.044413, 0.144017,-0.141696,0.979378,4.369751,2.298204,-0.921894, -0.027323,0.180938,0.983115,4.296538,2.243779,-0.925459, 0.325831,-0.277459,0.903798,4.303193,2.347123,-1.044413, -0.027323,0.180938,0.983115,4.296538,2.243779,-0.925459, 0.065337,0.07376,0.995133,4.275405,2.319905,-1.0464, 0.144017,-0.141696,0.979378,4.369751,2.298204,-0.921894, -0.023695,0.006701,0.999697,4.38099,2.207701,-0.839016, -0.078774,0.27578,0.957987,4.289048,2.172969,-0.858693, 0.144017,-0.141696,0.979378,4.369751,2.298204,-0.921894, -0.078774,0.27578,0.957987,4.289048,2.172969,-0.858693, -0.027323,0.180938,0.983115,4.296538,2.243779,-0.925459, 0.488174,-0.280956,0.826287,4.199317,2.304652,-1.17454, 0.383941,-0.196382,0.902232,4.197516,2.349135,-1.253043, 0.226651,-0.023678,0.973688,4.218457,2.356834,-1.142444, 0.488174,-0.280956,0.826287,4.199317,2.304652,-1.17454, 0.226651,-0.023678,0.973688,4.218457,2.356834,-1.142444, 0.065337,0.07376,0.995133,4.275405,2.319905,-1.0464, 0.488174,-0.280956,0.826287,4.199317,2.304652,-1.17454, 0.065337,0.07376,0.995133,4.275405,2.319905,-1.0464, 0.769657,-0.480833,0.420033,4.211815,2.28249,-1.039137, -0.128537,0.152973,0.979835,4.354411,2.102985,-0.80258, -0.175197,0.22468,0.958553,4.26732,2.121987,-0.61494, 0.224429,0.165293,0.96037,4.305411,2.059245,-0.539407, -0.128537,0.152973,0.979835,4.354411,2.102985,-0.80258, 0.224429,0.165293,0.96037,4.305411,2.059245,-0.539407, -0.080985,0.883253,0.461851,4.278045,1.97666,-0.537351, -0.078774,0.27578,0.957987,4.289048,2.172969,-0.858693, -0.023695,0.006701,0.999697,4.38099,2.207701,-0.839016, -0.128537,0.152973,0.979835,4.354411,2.102985,-0.80258, -0.078774,0.27578,0.957987,4.289048,2.172969,-0.858693, -0.128537,0.152973,0.979835,4.354411,2.102985,-0.80258, -0.095989,0.297871,0.949768,4.290375,2.112337,-0.80019, 0.769657,-0.480833,0.420033,4.211815,2.28249,-1.039137, 0.065337,0.07376,0.995133,4.275405,2.319905,-1.0464, -0.027323,0.180938,0.983115,4.296538,2.243779,-0.925459, 0.769657,-0.480833,0.420033,4.211815,2.28249,-1.039137, -0.027323,0.180938,0.983115,4.296538,2.243779,-0.925459, 0.040193,0.650965,0.758043,4.222795,2.228178,-0.952752, 0.040193,0.650965,0.758043,4.222795,2.228178,-0.952752, -0.027323,0.180938,0.983115,4.296538,2.243779,-0.925459, -0.078774,0.27578,0.957987,4.289048,2.172969,-0.858693, 0.040193,0.650965,0.758043,4.222795,2.228178,-0.952752, -0.078774,0.27578,0.957987,4.289048,2.172969,-0.858693, 0.177367,0.480226,0.859025,4.197609,2.164063,-0.857433, 0.177367,0.480226,0.859025,4.197609,2.164063,-0.857433, -0.078774,0.27578,0.957987,4.289048,2.172969,-0.858693, -0.095989,0.297871,0.949768,4.290375,2.112337,-0.80019, 0.177367,0.480226,0.859025,4.197609,2.164063,-0.857433, -0.095989,0.297871,0.949768,4.290375,2.112337,-0.80019, 0.288711,0.386915,0.875753,4.153175,2.084823,-0.799668, 0.41428,0.318289,0.85268,4.15109,2.102939,-0.889759, 0.177367,0.480226,0.859025,4.197609,2.164063,-0.857433, 0.288711,0.386915,0.875753,4.153175,2.084823,-0.799668, 0.519338,0.264458,0.812619,4.148865,2.148829,-0.986567, 0.040193,0.650965,0.758043,4.222795,2.228178,-0.952752, 0.177367,0.480226,0.859025,4.197609,2.164063,-0.857433, 0.519338,0.264458,0.812619,4.148865,2.148829,-0.986567, 0.177367,0.480226,0.859025,4.197609,2.164063,-0.857433, 0.41428,0.318289,0.85268,4.15109,2.102939,-0.889759, 0.486425,0.192908,0.852161,4.154566,2.19048,-1.129552, 0.769657,-0.480833,0.420033,4.211815,2.28249,-1.039137, 0.040193,0.650965,0.758043,4.222795,2.228178,-0.952752, 0.486425,0.192908,0.852161,4.154566,2.19048,-1.129552, 0.040193,0.650965,0.758043,4.222795,2.228178,-0.952752, 0.519338,0.264458,0.812619,4.148865,2.148829,-0.986567, 0.449624,0.075438,0.890027,4.152557,2.235471,-1.217046, 0.488174,-0.280956,0.826287,4.199317,2.304652,-1.17454, 0.769657,-0.480833,0.420033,4.211815,2.28249,-1.039137, 0.449624,0.075438,0.890027,4.152557,2.235471,-1.217046, 0.769657,-0.480833,0.420033,4.211815,2.28249,-1.039137, 0.486425,0.192908,0.852161,4.154566,2.19048,-1.129552, 0.474213,-0.311965,0.823286,4.141759,2.279958,-1.29534, 0.331391,0.08899,0.939287,4.169404,2.306276,-1.284031, 0.488174,-0.280956,0.826287,4.199317,2.304652,-1.17454, 0.474213,-0.311965,0.823286,4.141759,2.279958,-1.29534, 0.488174,-0.280956,0.826287,4.199317,2.304652,-1.17454, 0.449624,0.075438,0.890027,4.152557,2.235471,-1.217046, 0.533629,-0.162705,0.82992,4.131949,2.050757,-0.921856, 0.41428,0.318289,0.85268,4.15109,2.102939,-0.889759, 0.288711,0.386915,0.875753,4.153175,2.084823,-0.799668, 0.547549,-0.279581,0.788686,4.119993,2.063095,-1.049178, 0.519338,0.264458,0.812619,4.148865,2.148829,-0.986567, 0.41428,0.318289,0.85268,4.15109,2.102939,-0.889759, 0.547549,-0.279581,0.788686,4.119993,2.063095,-1.049178, 0.41428,0.318289,0.85268,4.15109,2.102939,-0.889759, 0.533629,-0.162705,0.82992,4.131949,2.050757,-0.921856, 0.598679,-0.200355,0.775527,4.12616,2.12093,-1.17252, 0.486425,0.192908,0.852161,4.154566,2.19048,-1.129552, 0.519338,0.264458,0.812619,4.148865,2.148829,-0.986567, 0.598679,-0.200355,0.775527,4.12616,2.12093,-1.17252, 0.519338,0.264458,0.812619,4.148865,2.148829,-0.986567, 0.547549,-0.279581,0.788686,4.119993,2.063095,-1.049178, 0.561098,-0.272385,0.78165,4.133175,2.175231,-1.259323, 0.449624,0.075438,0.890027,4.152557,2.235471,-1.217046, 0.486425,0.192908,0.852161,4.154566,2.19048,-1.129552, 0.561098,-0.272385,0.78165,4.133175,2.175231,-1.259323, 0.486425,0.192908,0.852161,4.154566,2.19048,-1.129552, 0.598679,-0.200355,0.775527,4.12616,2.12093,-1.17252, 0.561098,-0.272385,0.78165,4.133175,2.175231,-1.259323, 0.474213,-0.311965,0.823286,4.141759,2.279958,-1.29534, 0.449624,0.075438,0.890027,4.152557,2.235471,-1.217046, 0.760747,-0.509474,0.40212,4.137657,1.944837,-1.061024, 0.547549,-0.279581,0.788686,4.119993,2.063095,-1.049178, 0.533629,-0.162705,0.82992,4.131949,2.050757,-0.921856, 0.760747,-0.509474,0.40212,4.137657,1.944837,-1.061024, 0.533629,-0.162705,0.82992,4.131949,2.050757,-0.921856, 0.5205,-0.336657,0.784692,4.159229,1.949902,-0.923197, -0.16423,0.819635,0.548842,4.143794,2.01372,-1.201386, 0.598679,-0.200355,0.775527,4.12616,2.12093,-1.17252, 0.547549,-0.279581,0.788686,4.119993,2.063095,-1.049178, -0.16423,0.819635,0.548842,4.143794,2.01372,-1.201386, 0.547549,-0.279581,0.788686,4.119993,2.063095,-1.049178, 0.760747,-0.509474,0.40212,4.137657,1.944837,-1.061024, -0.043323,0.541029,0.839887,4.12329,2.086854,-1.295135, 0.561098,-0.272385,0.78165,4.133175,2.175231,-1.259323, 0.598679,-0.200355,0.775527,4.12616,2.12093,-1.17252, -0.043323,0.541029,0.839887,4.12329,2.086854,-1.295135, 0.598679,-0.200355,0.775527,4.12616,2.12093,-1.17252, -0.16423,0.819635,0.548842,4.143794,2.01372,-1.201386, 0.04432,0.372862,0.926827,4.11268,2.195089,-1.366908, 0.474213,-0.311965,0.823286,4.141759,2.279958,-1.29534, 0.561098,-0.272385,0.78165,4.133175,2.175231,-1.259323, 0.04432,0.372862,0.926827,4.11268,2.195089,-1.366908, 0.561098,-0.272385,0.78165,4.133175,2.175231,-1.259323, -0.043323,0.541029,0.839887,4.12329,2.086854,-1.295135, 0.098376,0.32868,0.939304,4.111934,2.234814,-1.399949, 0.445439,-0.182623,0.876489,4.140097,2.295949,-1.367196, 0.474213,-0.311965,0.823286,4.141759,2.279958,-1.29534, 0.098376,0.32868,0.939304,4.111934,2.234814,-1.399949, 0.474213,-0.311965,0.823286,4.141759,2.279958,-1.29534, 0.04432,0.372862,0.926827,4.11268,2.195089,-1.366908, 0.098376,0.32868,0.939304,4.111934,2.234814,-1.399949, 0.489736,-0.346185,0.800197,4.129926,2.30877,-1.402259, 0.445439,-0.182623,0.876489,4.140097,2.295949,-1.367196, -0.080985,0.883253,0.461851,4.278045,1.97666,-0.537351, 0.525316,0.261331,0.809784,4.304562,1.906537,-0.572242, 0.752227,-0.484776,0.446258,4.232341,1.903079,-0.534362, -0.051423,0.948155,0.313619,4.240116,1.770049,-0.583946, 0.752227,-0.484776,0.446258,4.232341,1.903079,-0.534362, 0.525316,0.261331,0.809784,4.304562,1.906537,-0.572242, -0.051423,0.948155,0.313619,4.240116,1.770049,-0.583946, 0.525316,0.261331,0.809784,4.304562,1.906537,-0.572242, 0.204286,0.745568,0.634347,4.303615,1.799914,-0.610388, 0.525316,0.261331,0.809784,4.304562,1.906537,-0.572242, -0.080985,0.883253,0.461851,4.278045,1.97666,-0.537351, 0.224429,0.165293,0.96037,4.305411,2.059245,-0.539407, 0.525316,0.261331,0.809784,4.304562,1.906537,-0.572242, 0.224429,0.165293,0.96037,4.305411,2.059245,-0.539407, 0.615047,0.769185,-0.17341,4.377095,1.871713,-0.595743, 0.615047,0.769185,-0.17341,4.377095,1.871713,-0.595743, 0.224429,0.165293,0.96037,4.305411,2.059245,-0.539407, 0.361081,-0.056526,-0.93082,4.43302,2.024714,-0.563794, 0.615047,0.769185,-0.17341,4.377095,1.871713,-0.595743, 0.361081,-0.056526,-0.93082,4.43302,2.024714,-0.563794, 0.36359,0.089346,-0.927264,4.43261,1.878873,-0.577888, 0.969409,0.243853,-0.027951,4.148883,1.759918,-0.573765, -0.385487,0.478576,0.788901,4.094112,1.889281,-0.578435, 0.752227,-0.484776,0.446258,4.232341,1.903079,-0.534362, 0.969409,0.243853,-0.027951,4.148883,1.759918,-0.573765, 0.752227,-0.484776,0.446258,4.232341,1.903079,-0.534362, -0.051423,0.948155,0.313619,4.240116,1.770049,-0.583946, -0.095989,0.297871,0.949768,4.290375,2.112337,-0.80019, -0.128537,0.152973,0.979835,4.354411,2.102985,-0.80258, -0.158888,0.47696,0.864444,4.281287,2.055751,-0.787, -0.128537,0.152973,0.979835,4.354411,2.102985,-0.80258, -0.317114,0.866865,0.384686,4.354941,2.064161,-0.778851, -0.158888,0.47696,0.864444,4.281287,2.055751,-0.787, -0.158888,0.47696,0.864444,4.281287,2.055751,-0.787, -0.317114,0.866865,0.384686,4.354941,2.064161,-0.778851, -0.273708,0.760234,0.589175,4.245225,2.008532,-0.772641, 0.288711,0.386915,0.875753,4.153175,2.084823,-0.799668, -0.095989,0.297871,0.949768,4.290375,2.112337,-0.80019, -0.158888,0.47696,0.864444,4.281287,2.055751,-0.787, 0.533629,-0.162705,0.82992,4.131949,2.050757,-0.921856, 0.288711,0.386915,0.875753,4.153175,2.084823,-0.799668, -0.158888,0.47696,0.864444,4.281287,2.055751,-0.787, 0.533629,-0.162705,0.82992,4.131949,2.050757,-0.921856, -0.158888,0.47696,0.864444,4.281287,2.055751,-0.787, 0.5205,-0.336657,0.784692,4.159229,1.949902,-0.923197, -0.317114,0.866865,0.384686,4.354941,2.064161,-0.778851, -0.128537,0.152973,0.979835,4.354411,2.102985,-0.80258, -0.080985,0.883253,0.461851,4.278045,1.97666,-0.537351, -0.317114,0.866865,0.384686,4.354941,2.064161,-0.778851, -0.080985,0.883253,0.461851,4.278045,1.97666,-0.537351, 0.752227,-0.484776,0.446258,4.232341,1.903079,-0.534362, -0.317114,0.866865,0.384686,4.354941,2.064161,-0.778851, 0.752227,-0.484776,0.446258,4.232341,1.903079,-0.534362, -0.273708,0.760234,0.589175,4.245225,2.008532,-0.772641, 0.5205,-0.336657,0.784692,4.159229,1.949902,-0.923197, -0.158888,0.47696,0.864444,4.281287,2.055751,-0.787, -0.273708,0.760234,0.589175,4.245225,2.008532,-0.772641, -0.026148,0.006311,-0.999638,5.998088,1.231874,-0.107334, -0.2127,-0.171223,-0.961999,5.961686,1.110978,-0.090324, 0.111896,-0.605741,-0.787755,5.950684,1.082725,-0.175648, -0.026148,0.006311,-0.999638,5.998088,1.231874,-0.107334, 0.111896,-0.605741,-0.787755,5.950684,1.082725,-0.175648, 0.223936,-0.919046,-0.324355,5.959462,1.157227,-0.187097, 0.173726,-0.983856,0.042973,5.672385,1.007694,-0.341778, 0.231006,-0.859096,-0.456717,5.681086,1.054964,-0.35586, 0.010578,-0.902776,-0.429981,5.763952,1.062109,-0.338641, 0.173726,-0.983856,0.042973,5.672385,1.007694,-0.341778, 0.010578,-0.902776,-0.429981,5.763952,1.062109,-0.338641, 0.396941,-0.593504,-0.700137,5.755282,1.004149,-0.307505, 0.707709,-0.687035,-0.164711,5.647186,1.394606,-0.257833, 0.798302,-0.559383,0.22317,5.685194,1.452202,-0.188749, 0.831976,-0.511655,0.214534,5.730427,1.435668,-0.209848, 0.707709,-0.687035,-0.164711,5.647186,1.394606,-0.257833, 0.831976,-0.511655,0.214534,5.730427,1.435668,-0.209848, 0.744254,-0.654161,-0.134758,5.710154,1.360653,-0.290072, 0.043397,0.435461,-0.899161,5.250485,1.123029,-0.385234, 0.123418,-0.784469,-0.607763,5.241466,1.040469,-0.383965, 0.274481,0.961015,-0.033322,5.011084,1.06677,-0.458562, 0.043397,0.435461,-0.899161,5.250485,1.123029,-0.385234, 0.274481,0.961015,-0.033322,5.011084,1.06677,-0.458562, 0.012421,0.392537,-0.919653,4.991713,1.163096,-0.504149, 0.381066,0.919021,-0.100938,4.567896,1.149805,-0.642484, 0.481644,0.842268,0.242081,4.449011,1.260929,-0.647431, 0.184871,0.227139,-0.956154,4.522247,1.398278,-0.644892, 0.381066,0.919021,-0.100938,4.567896,1.149805,-0.642484, 0.184871,0.227139,-0.956154,4.522247,1.398278,-0.644892, -0.026366,0.234118,-0.971851,4.641547,1.285422,-0.622034, -0.013461,-0.014478,-0.999805,4.697024,1.862575,-0.604048, 0.667258,0.181112,-0.722471,4.688114,2.046378,-0.604518, 0.856604,0.474873,-0.201803,4.728963,2.036146,-0.614307, -0.013461,-0.014478,-0.999805,4.697024,1.862575,-0.604048, 0.856604,0.474873,-0.201803,4.728963,2.036146,-0.614307, 0.827569,0.284292,-0.484054,4.742358,1.882232,-0.62165, 0.264979,0.116702,-0.957166,4.842883,2.021333,-0.638025, 0.721999,0.398917,-0.565316,4.861611,2.001639,-0.621913, 0.544735,0.449335,-0.708069,4.824747,1.946835,-0.626358, 0.264979,0.116702,-0.957166,4.842883,2.021333,-0.638025, 0.544735,0.449335,-0.708069,4.824747,1.946835,-0.626358, 0.269343,0.329305,-0.904993,4.760921,1.881357,-0.61312, 0.269343,0.329305,-0.904993,4.760921,1.881357,-0.61312, 0.397989,0.4494,-0.799778,4.861618,1.854067,-0.618095, 0.708269,-0.122724,-0.695193,4.852582,1.816115,-0.603105, 0.711192,0.127662,-0.69131,4.935561,2.016016,-0.5857, 0.312982,-0.015529,-0.949632,4.93588,2.051665,-0.572853, 0.470021,0.182979,-0.863481,4.991746,2.009819,-0.523206, 0.711192,0.127662,-0.69131,4.935561,2.016016,-0.5857, 0.470021,0.182979,-0.863481,4.991746,2.009819,-0.523206, 0.872792,-0.115436,-0.474246,4.973133,1.992779,-0.533466, 0.699393,0.056752,-0.71248,4.751519,2.039658,-0.634134, 0.813293,0.022433,-0.581422,4.788476,2.028047,-0.608619, 0.269343,0.329305,-0.904993,4.760921,1.881357,-0.61312, 0.108828,-0.182644,-0.977137,4.982364,1.8733,-0.53619, 0.412833,-0.156453,-0.897269,5.001903,1.914398,-0.486724, 0.431713,0.22912,-0.872427,5.01143,1.875569,-0.463205, 0.108828,-0.182644,-0.977137,4.982364,1.8733,-0.53619, 0.431713,0.22912,-0.872427,5.01143,1.875569,-0.463205, 0.661825,0.260115,-0.703085,4.991709,1.844295,-0.520761, 0.470021,0.182979,-0.863481,4.991746,2.009819,-0.523206, 0.431713,0.22912,-0.872427,5.01143,1.875569,-0.463205, 0.412833,-0.156453,-0.897269,5.001903,1.914398,-0.486724, 0.910294,-0.144636,-0.387873,4.881574,2.094571,-0.539949, 0.588787,-0.248293,-0.769207,4.918466,2.084725,-0.532713, 0.312982,-0.015529,-0.949632,4.93588,2.051665,-0.572853, 0.719268,0.159441,-0.676189,4.636582,2.263383,-0.471997, -0.114527,0.103064,-0.988059,4.739441,2.299169,-0.369987, 0.45571,-0.00339,-0.890122,4.837331,2.235678,-0.479332, 0.719268,0.159441,-0.676189,4.636582,2.263383,-0.471997, 0.45571,-0.00339,-0.890122,4.837331,2.235678,-0.479332, 0.766773,0.253147,-0.589894,4.74405,2.179337,-0.556057, 0.781868,0.537364,-0.316105,5.057495,2.002751,-0.451974, 0.332526,0.910491,-0.245832,5.067202,2.027704,-0.422291, 0.077536,0.770695,-0.632469,5.095375,1.961238,-0.401516, 0.781868,0.537364,-0.316105,5.057495,2.002751,-0.451974, 0.077536,0.770695,-0.632469,5.095375,1.961238,-0.401516, 0.89264,0.34991,-0.284178,5.075994,1.900999,-0.443793, 0.07924,-0.231863,0.969516,4.082988,2.175805,-1.45093, 0.020519,-0.282941,0.958918,4.046673,2.341349,-1.45253, 0.702554,-0.570096,0.42592,4.101726,2.312318,-1.438163, 0.07924,-0.231863,0.969516,4.082988,2.175805,-1.45093, 0.702554,-0.570096,0.42592,4.101726,2.312318,-1.438163, 0.489736,-0.346185,0.800197,4.129926,2.30877,-1.402259, 0.07924,-0.231863,0.969516,4.082988,2.175805,-1.45093, 0.489736,-0.346185,0.800197,4.129926,2.30877,-1.402259, 0.098376,0.32868,0.939304,4.111934,2.234814,-1.399949, 0.5205,-0.336657,0.784692,4.159229,1.949902,-0.923197, -0.273708,0.760234,0.589175,4.245225,2.008532,-0.772641, -0.385487,0.478576,0.788901,4.094112,1.889281,-0.578435, 0.5205,-0.336657,0.784692,4.159229,1.949902,-0.923197, -0.385487,0.478576,0.788901,4.094112,1.889281,-0.578435, -0.273816,0.228927,0.93414,4.150297,1.820575,-0.917046, 0.760747,-0.509474,0.40212,4.137657,1.944837,-1.061024, 0.5205,-0.336657,0.784692,4.159229,1.949902,-0.923197, -0.273816,0.228927,0.93414,4.150297,1.820575,-0.917046, 0.760747,-0.509474,0.40212,4.137657,1.944837,-1.061024, -0.273816,0.228927,0.93414,4.150297,1.820575,-0.917046, -0.21777,0.161093,0.962614,4.127903,1.828359,-1.090512, -0.16423,0.819635,0.548842,4.143794,2.01372,-1.201386, 0.760747,-0.509474,0.40212,4.137657,1.944837,-1.061024, -0.21777,0.161093,0.962614,4.127903,1.828359,-1.090512, -0.16423,0.819635,0.548842,4.143794,2.01372,-1.201386, -0.21777,0.161093,0.962614,4.127903,1.828359,-1.090512, -0.178707,0.132414,0.974951,4.152166,1.868775,-1.225002, -0.043323,0.541029,0.839887,4.12329,2.086854,-1.295135, -0.16423,0.819635,0.548842,4.143794,2.01372,-1.201386, -0.178707,0.132414,0.974951,4.152166,1.868775,-1.225002, -0.043323,0.541029,0.839887,4.12329,2.086854,-1.295135, -0.178707,0.132414,0.974951,4.152166,1.868775,-1.225002, -0.081635,-0.03459,0.996062,4.103303,2.038565,-1.363737, 0.04432,0.372862,0.926827,4.11268,2.195089,-1.366908, -0.043323,0.541029,0.839887,4.12329,2.086854,-1.295135, -0.081635,-0.03459,0.996062,4.103303,2.038565,-1.363737, 0.04432,0.372862,0.926827,4.11268,2.195089,-1.366908, -0.081635,-0.03459,0.996062,4.103303,2.038565,-1.363737, 0.07924,-0.231863,0.969516,4.082988,2.175805,-1.45093, 0.098376,0.32868,0.939304,4.111934,2.234814,-1.399949, 0.04432,0.372862,0.926827,4.11268,2.195089,-1.366908, 0.07924,-0.231863,0.969516,4.082988,2.175805,-1.45093, -0.447812,0.698934,0.557634,4.059885,1.86046,-0.470087, -0.385487,0.478576,0.788901,4.094112,1.889281,-0.578435, 0.969409,0.243853,-0.027951,4.148883,1.759918,-0.573765, -0.447812,0.698934,0.557634,4.059885,1.86046,-0.470087, 0.969409,0.243853,-0.027951,4.148883,1.759918,-0.573765, 0.971427,0.04566,0.232906,4.076852,1.746601,-0.527436, -0.926486,-0.356041,-0.121897,4.126565,0.642027,0, -0.086812,-0.050981,-0.994919,4.120842,0.627141,-0.185461, 0.448666,0.893201,-0.029856,4.359048,0.700414,-0.166651, -0.926486,-0.356041,-0.121897,4.126565,0.642027,0, 0.448666,0.893201,-0.029856,4.359048,0.700414,-0.166651, 0.000801,-1,-0.000539,4.380854,0.704574,-0.00013, -0.564871,0.754993,-0.333026,3.881998,1.764428,-0.476337, -0.447812,0.698934,0.557634,4.059885,1.86046,-0.470087, 0.971427,0.04566,0.232906,4.076852,1.746601,-0.527436, -0.571598,0.654164,-0.495323,3.886058,1.550141,-0.50483, -0.564871,0.754993,-0.333026,3.881998,1.764428,-0.476337, 0.971427,0.04566,0.232906,4.076852,1.746601,-0.527436, -0.571598,0.654164,-0.495323,3.886058,1.550141,-0.50483, 0.971427,0.04566,0.232906,4.076852,1.746601,-0.527436, 0.811896,0.498733,-0.303464,4.067576,1.572668,-0.534997, -0.601466,0.441167,-0.666041,3.98851,1.297806,-0.539537, -0.571598,0.654164,-0.495323,3.886058,1.550141,-0.50483, 0.811896,0.498733,-0.303464,4.067576,1.572668,-0.534997, -0.601466,0.441167,-0.666041,3.98851,1.297806,-0.539537, 0.811896,0.498733,-0.303464,4.067576,1.572668,-0.534997, 0.800967,0.453078,0.391371,4.085564,1.288885,-0.544406, -0.434016,0.136262,-0.890541,4.041657,1.039756,-0.496922, -0.601466,0.441167,-0.666041,3.98851,1.297806,-0.539537, 0.800967,0.453078,0.391371,4.085564,1.288885,-0.544406, -0.434016,0.136262,-0.890541,4.041657,1.039756,-0.496922, 0.800967,0.453078,0.391371,4.085564,1.288885,-0.544406, 0.04154,0.947538,0.316932,4.141189,1.008775,-0.499342, -0.195132,0.128745,-0.97229,4.068249,0.798926,-0.400813, -0.434016,0.136262,-0.890541,4.041657,1.039756,-0.496922, 0.04154,0.947538,0.316932,4.141189,1.008775,-0.499342, -0.195132,0.128745,-0.97229,4.068249,0.798926,-0.400813, 0.04154,0.947538,0.316932,4.141189,1.008775,-0.499342, -0.051101,0.977083,0.206633,4.216374,0.852328,-0.405873, -0.172151,0.101796,-0.979797,4.105198,0.672581,-0.300001, -0.195132,0.128745,-0.97229,4.068249,0.798926,-0.400813, -0.051101,0.977083,0.206633,4.216374,0.852328,-0.405873, -0.172151,0.101796,-0.979797,4.105198,0.672581,-0.300001, -0.051101,0.977083,0.206633,4.216374,0.852328,-0.405873, 0.731768,0.675964,-0.087106,4.319799,0.731007,-0.291212, -0.086812,-0.050981,-0.994919,4.120842,0.627141,-0.185461, -0.172151,0.101796,-0.979797,4.105198,0.672581,-0.300001, 0.731768,0.675964,-0.087106,4.319799,0.731007,-0.291212, -0.086812,-0.050981,-0.994919,4.120842,0.627141,-0.185461, 0.731768,0.675964,-0.087106,4.319799,0.731007,-0.291212, 0.448666,0.893201,-0.029856,4.359048,0.700414,-0.166651, -0.777939,0.62834,-0.000226,3.745669,2.266001,-0.24193, -0.210883,0.942026,0.260987,3.828001,2.35254,-0.233341, -0.502349,0.838172,0.212398,3.870548,2.292106,-0.368964, -0.777939,0.62834,-0.000226,3.745669,2.266001,-0.24193, -0.502349,0.838172,0.212398,3.870548,2.292106,-0.368964, -0.698288,0.715816,-0.000608,3.758215,2.206683,-0.323051, -0.451389,0.892327,-0.00019,3.727093,2.308406,-0.150049, 0.431966,-0.771434,-0.46722,3.71636,2.343387,0, 0.622247,0.782821,-0.000247,3.787342,2.396113,-0.001159, -0.451389,0.892327,-0.00019,3.727093,2.308406,-0.150049, 0.622247,0.782821,-0.000247,3.787342,2.396113,-0.001159, -0.210883,0.942026,0.260987,3.828001,2.35254,-0.233341, -0.777939,0.62834,-0.000226,3.745669,2.266001,-0.24193, -0.451389,0.892327,-0.00019,3.727093,2.308406,-0.150049, -0.210883,0.942026,0.260987,3.828001,2.35254,-0.233341, 0.673211,-0.580891,0.457551,3.922437,1.972461,-0.483563, -0.447812,0.698934,0.557634,4.059885,1.86046,-0.470087, -0.564871,0.754993,-0.333026,3.881998,1.764428,-0.476337, 0.673211,-0.580891,0.457551,3.922437,1.972461,-0.483563, -0.564871,0.754993,-0.333026,3.881998,1.764428,-0.476337, -0.512639,0.858604,-0.000762,3.814876,1.968416,-0.443, -0.768362,0.592232,0.242656,3.823349,2.141733,-0.428356, 0.673211,-0.580891,0.457551,3.922437,1.972461,-0.483563, -0.512639,0.858604,-0.000762,3.814876,1.968416,-0.443, -0.768362,0.592232,0.242656,3.823349,2.141733,-0.428356, -0.512639,0.858604,-0.000762,3.814876,1.968416,-0.443, -0.698288,0.715816,-0.000608,3.758215,2.206683,-0.323051, -0.502349,0.838172,0.212398,3.870548,2.292106,-0.368964, -0.768362,0.592232,0.242656,3.823349,2.141733,-0.428356, -0.698288,0.715816,-0.000608,3.758215,2.206683,-0.323051, -0.273708,0.760234,0.589175,4.245225,2.008532,-0.772641, 0.752227,-0.484776,0.446258,4.232341,1.903079,-0.534362, -0.385487,0.478576,0.788901,4.094112,1.889281,-0.578435, -0.483189,-0.207332,-0.850613,1.655948,-2.520927,-0.844269, -0.176356,-0.113876,-0.977717,1.678986,-2.513137,-0.891745, -0.246054,-0.154918,-0.956796,1.718315,-2.775468,-0.921796, -0.483189,-0.207332,-0.850613,1.655948,-2.520927,-0.844269, -0.246054,-0.154918,-0.956796,1.718315,-2.775468,-0.921796, 0.21689,-0.976039,0.017487,1.700797,-2.794792,-0.82425, -0.246054,-0.154918,-0.956796,1.718315,-2.775468,-0.921796, -0.024032,-0.835976,0.54824,1.734568,-2.965876,-0.986396, -0.90358,0.003167,-0.428408,1.705953,-3.006628,-0.83263, -0.246054,-0.154918,-0.956796,1.718315,-2.775468,-0.921796, -0.90358,0.003167,-0.428408,1.705953,-3.006628,-0.83263, 0.21689,-0.976039,0.017487,1.700797,-2.794792,-0.82425, -0.079302,-0.84299,-0.532051,-1.305099,-1.70846,-0.48423, -0.176655,-0.950799,-0.254508,-1.108758,-1.770749,-0.473033, -0.253979,-0.745808,-0.615845,-0.977375,-1.793126,-0.498747, -0.079302,-0.84299,-0.532051,-1.305099,-1.70846,-0.48423, -0.253979,-0.745808,-0.615845,-0.977375,-1.793126,-0.498747, -0.040019,-0.929968,-0.365457,-0.972514,-1.822778,-0.372649, -0.171647,-0.971664,-0.162499,-1.406693,-1.697325,-0.450399, -0.094238,-0.851252,-0.516225,-1.397474,-1.693815,-0.570541, -0.149005,-0.65467,-0.741084,-1.266738,-1.691944,-0.557922, -0.171647,-0.971664,-0.162499,-1.406693,-1.697325,-0.450399, -0.149005,-0.65467,-0.741084,-1.266738,-1.691944,-0.557922, -0.079302,-0.84299,-0.532051,-1.305099,-1.70846,-0.48423, 0.072535,0.997366,0,-3.392806,1.769365,0, -0.091034,0.391629,-0.915609,-3.413372,1.871604,-0.142309, -0.108631,-0.122719,-0.986478,-3.35851,1.810253,-0.380095, 0.411442,-0.911436,-0.000099,-3.348274,1.767738,-0.000085, 0.255239,-0.528231,-0.80983,-3.380836,1.819691,-0.123273, -0.091034,0.391629,-0.915609,-3.413372,1.871604,-0.142309, 0.411442,-0.911436,-0.000099,-3.348274,1.767738,-0.000085, -0.091034,0.391629,-0.915609,-3.413372,1.871604,-0.142309, 0.072535,0.997366,0,-3.392806,1.769365,0, 0.45552,-0.330523,0.826593,4.149438,2.34055,-1.353693, 0.489736,-0.346185,0.800197,4.129926,2.30877,-1.402259, 0.702554,-0.570096,0.42592,4.101726,2.312318,-1.438163, 0.45552,-0.330523,0.826593,4.149438,2.34055,-1.353693, 0.702554,-0.570096,0.42592,4.101726,2.312318,-1.438163, 0.482381,-0.398126,0.780259,4.148927,2.388726,-1.376879, 0.43907,-0.579988,-0.686171,-2.811581,-1.79821,-0.712737, 0.579344,-0.339433,0.741044,-3.008323,-1.759271,-0.655672, 0.789099,-0.039289,0.613008,-3.066022,-1.953125,-0.719516, 0.43907,-0.579988,-0.686171,-2.811581,-1.79821,-0.712737, 0.789099,-0.039289,0.613008,-3.066022,-1.953125,-0.719516, 0.982106,-0.010346,-0.188044,-2.964215,-1.978727,-0.776572, 0.579344,-0.339433,0.741044,-3.008323,-1.759271,-0.655672, -0.012978,-0.998326,0.056357,-3.139394,-1.687482,-0.638546, 0.230893,-0.309688,0.922378,-3.211005,-1.850398,-0.700723, 0.579344,-0.339433,0.741044,-3.008323,-1.759271,-0.655672, 0.230893,-0.309688,0.922378,-3.211005,-1.850398,-0.700723, 0.789099,-0.039289,0.613008,-3.066022,-1.953125,-0.719516, 0.111825,0.518485,0.847743,2.407309,-0.97498,0.805091, 0.728904,-0.519577,0.445802,2.410367,-0.777999,0.841105, 0.09853,0.626571,0.773111,2.292449,-0.871852,0.8824, 0.111825,0.518485,0.847743,2.407309,-0.97498,0.805091, 0.09853,0.626571,0.773111,2.292449,-0.871852,0.8824, 0.080812,0.697931,0.711591,2.229345,-0.992723,0.862826, 0.163727,0.387435,0.907242,2.520417,-0.954785,0.739445, 0.518786,-0.204527,0.830078,2.5392,-0.727778,0.750475, 0.728904,-0.519577,0.445802,2.410367,-0.777999,0.841105, 0.163727,0.387435,0.907242,2.520417,-0.954785,0.739445, 0.728904,-0.519577,0.445802,2.410367,-0.777999,0.841105, 0.111825,0.518485,0.847743,2.407309,-0.97498,0.805091, 0.227108,0.258715,0.938876,2.637655,-0.768176,0.637039, 0.518786,-0.204527,0.830078,2.5392,-0.727778,0.750475, 0.163727,0.387435,0.907242,2.520417,-0.954785,0.739445, 0.163727,0.387435,0.907242,2.520417,-0.954785,0.739445, 0.304293,-0.024391,0.952266,2.514167,-1.077721,0.706614, 0.263434,0.119819,0.957207,2.669281,-0.930664,0.557166, 0.163727,0.387435,0.907242,2.520417,-0.954785,0.739445, 0.263434,0.119819,0.957207,2.669281,-0.930664,0.557166, 0.227108,0.258715,0.938876,2.637655,-0.768176,0.637039, 0.111825,0.518485,0.847743,2.407309,-0.97498,0.805091, 0.372063,-0.134052,0.918477,2.386465,-1.116066,0.761367, 0.304293,-0.024391,0.952266,2.514167,-1.077721,0.706614, 0.111825,0.518485,0.847743,2.407309,-0.97498,0.805091, 0.304293,-0.024391,0.952266,2.514167,-1.077721,0.706614, 0.163727,0.387435,0.907242,2.520417,-0.954785,0.739445, 0.080812,0.697931,0.711591,2.229345,-0.992723,0.862826, 0.424286,-0.254348,0.869073,2.180012,-1.130557,0.821812, 0.372063,-0.134052,0.918477,2.386465,-1.116066,0.761367, 0.080812,0.697931,0.711591,2.229345,-0.992723,0.862826, 0.372063,-0.134052,0.918477,2.386465,-1.116066,0.761367, 0.111825,0.518485,0.847743,2.407309,-0.97498,0.805091, 0.383978,-0.566345,0.729256,2.158051,-1.209613,0.783941, 0.420794,-0.405156,0.811653,2.354287,-1.193746,0.735189, 0.372063,-0.134052,0.918477,2.386465,-1.116066,0.761367, 0.383978,-0.566345,0.729256,2.158051,-1.209613,0.783941, 0.372063,-0.134052,0.918477,2.386465,-1.116066,0.761367, 0.424286,-0.254348,0.869073,2.180012,-1.130557,0.821812, 0.303379,-0.73119,0.611002,2.126237,-1.330172,0.721011, 0.335626,-0.735806,0.588171,2.318787,-1.29409,0.673863, 0.420794,-0.405156,0.811653,2.354287,-1.193746,0.735189, 0.303379,-0.73119,0.611002,2.126237,-1.330172,0.721011, 0.420794,-0.405156,0.811653,2.354287,-1.193746,0.735189, 0.383978,-0.566345,0.729256,2.158051,-1.209613,0.783941, 0.298349,-0.828641,0.473647,2.274533,-1.433487,0.567366, 0.335626,-0.735806,0.588171,2.318787,-1.29409,0.673863, 0.303379,-0.73119,0.611002,2.126237,-1.330172,0.721011, 0.029207,0.916877,0.398099,2.45706,-1.400958,0.539866, 0.267279,-0.944479,0.191107,2.486533,-1.274971,0.627822, 0.335626,-0.735806,0.588171,2.318787,-1.29409,0.673863, 0.029207,0.916877,0.398099,2.45706,-1.400958,0.539866, 0.335626,-0.735806,0.588171,2.318787,-1.29409,0.673863, 0.298349,-0.828641,0.473647,2.274533,-1.433487,0.567366, 0.051939,0.876473,0.478641,2.549322,-1.335209,0.535156, 0.267279,-0.944479,0.191107,2.486533,-1.274971,0.627822, 0.029207,0.916877,0.398099,2.45706,-1.400958,0.539866, 0.092427,0.86666,0.490262,2.61797,-1.235597,0.520238, 0.267279,-0.944479,0.191107,2.486533,-1.274971,0.627822, 0.051939,0.876473,0.478641,2.549322,-1.335209,0.535156, 0.101272,0.634315,0.766413,2.670253,-1.108365,0.544018, 0.129186,0.757141,0.64035,2.510841,-1.158786,0.678057, 0.267279,-0.944479,0.191107,2.486533,-1.274971,0.627822, 0.101272,0.634315,0.766413,2.670253,-1.108365,0.544018, 0.267279,-0.944479,0.191107,2.486533,-1.274971,0.627822, 0.092427,0.86666,0.490262,2.61797,-1.235597,0.520238, 0.420794,-0.405156,0.811653,2.354287,-1.193746,0.735189, 0.335626,-0.735806,0.588171,2.318787,-1.29409,0.673863, 0.267279,-0.944479,0.191107,2.486533,-1.274971,0.627822, 0.420794,-0.405156,0.811653,2.354287,-1.193746,0.735189, 0.267279,-0.944479,0.191107,2.486533,-1.274971,0.627822, 0.129186,0.757141,0.64035,2.510841,-1.158786,0.678057, 0.129186,0.757141,0.64035,2.510841,-1.158786,0.678057, 0.304293,-0.024391,0.952266,2.514167,-1.077721,0.706614, 0.372063,-0.134052,0.918477,2.386465,-1.116066,0.761367, 0.129186,0.757141,0.64035,2.510841,-1.158786,0.678057, 0.372063,-0.134052,0.918477,2.386465,-1.116066,0.761367, 0.420794,-0.405156,0.811653,2.354287,-1.193746,0.735189, 0.101272,0.634315,0.766413,2.670253,-1.108365,0.544018, 0.263434,0.119819,0.957207,2.669281,-0.930664,0.557166, 0.304293,-0.024391,0.952266,2.514167,-1.077721,0.706614, 0.101272,0.634315,0.766413,2.670253,-1.108365,0.544018, 0.304293,-0.024391,0.952266,2.514167,-1.077721,0.706614, 0.129186,0.757141,0.64035,2.510841,-1.158786,0.678057, 0.089104,0.59547,0.798421,2.710721,-0.830091,0.532493, 0.227108,0.258715,0.938876,2.637655,-0.768176,0.637039, 0.263434,0.119819,0.957207,2.669281,-0.930664,0.557166, 0.206788,0.399922,0.892917,2.757946,-1.099958,0.471684, 0.147941,0.53134,0.834141,2.857666,-0.930625,0.391195, 0.101272,0.634315,0.766413,2.670253,-1.108365,0.544018, 0.101272,0.634315,0.766413,2.670253,-1.108365,0.544018, 0.092427,0.86666,0.490262,2.61797,-1.235597,0.520238, 0.206788,0.399922,0.892917,2.757946,-1.099958,0.471684, 0.092427,0.86666,0.490262,2.61797,-1.235597,0.520238, 0.274567,0.116527,0.954481,2.803736,-1.255869,0.438328, 0.246802,0.252523,0.935586,2.847364,-1.103812,0.402301, 0.092427,0.86666,0.490262,2.61797,-1.235597,0.520238, 0.246802,0.252523,0.935586,2.847364,-1.103812,0.402301, 0.206788,0.399922,0.892917,2.757946,-1.099958,0.471684, 0.147941,0.53134,0.834141,2.857666,-0.930625,0.391195, 0.206788,0.399922,0.892917,2.757946,-1.099958,0.471684, 0.246802,0.252523,0.935586,2.847364,-1.103812,0.402301, 0.303729,-0.050718,0.951408,2.740886,-1.339225,0.463604, 0.274567,0.116527,0.954481,2.803736,-1.255869,0.438328, 0.092427,0.86666,0.490262,2.61797,-1.235597,0.520238, 0.051939,0.876473,0.478641,2.549322,-1.335209,0.535156, 0.33122,-0.270106,0.904067,2.663024,-1.440487,0.478149, 0.303729,-0.050718,0.951408,2.740886,-1.339225,0.463604, 0.051939,0.876473,0.478641,2.549322,-1.335209,0.535156, 0.303729,-0.050718,0.951408,2.740886,-1.339225,0.463604, 0.092427,0.86666,0.490262,2.61797,-1.235597,0.520238, 0.029207,0.916877,0.398099,2.45706,-1.400958,0.539866, 0.327725,-0.489439,0.808112,2.515314,-1.507063,0.483275, 0.33122,-0.270106,0.904067,2.663024,-1.440487,0.478149, 0.029207,0.916877,0.398099,2.45706,-1.400958,0.539866, 0.33122,-0.270106,0.904067,2.663024,-1.440487,0.478149, 0.051939,0.876473,0.478641,2.549322,-1.335209,0.535156, 0.291858,-0.681117,0.67149,2.422296,-1.510915,0.494169, 0.327725,-0.489439,0.808112,2.515314,-1.507063,0.483275, 0.029207,0.916877,0.398099,2.45706,-1.400958,0.539866, 0.298349,-0.828641,0.473647,2.274533,-1.433487,0.567366, 0.248915,-0.807091,0.535392,2.249663,-1.492705,0.53127, 0.291858,-0.681117,0.67149,2.422296,-1.510915,0.494169, 0.298349,-0.828641,0.473647,2.274533,-1.433487,0.567366, 0.291858,-0.681117,0.67149,2.422296,-1.510915,0.494169, 0.029207,0.916877,0.398099,2.45706,-1.400958,0.539866, 0.303379,-0.73119,0.611002,2.126237,-1.330172,0.721011, 0.235033,-0.721825,0.650944,2.0796,-1.473377,0.654997, 0.248915,-0.807091,0.535392,2.249663,-1.492705,0.53127, 0.303379,-0.73119,0.611002,2.126237,-1.330172,0.721011, 0.248915,-0.807091,0.535392,2.249663,-1.492705,0.53127, 0.298349,-0.828641,0.473647,2.274533,-1.433487,0.567366, 0.246802,0.252523,0.935586,2.847364,-1.103812,0.402301, 0.213948,-0.943673,0.252405,2.928787,-1.107467,0.312054, 0.244106,-0.79539,0.554768,2.960118,-0.941827,0.284743, 0.246802,0.252523,0.935586,2.847364,-1.103812,0.402301, 0.244106,-0.79539,0.554768,2.960118,-0.941827,0.284743, 0.147941,0.53134,0.834141,2.857666,-0.930625,0.391195, 0.274567,0.116527,0.954481,2.803736,-1.255869,0.438328, 0.190577,-0.970681,0.146488,2.893096,-1.302168,0.332049, 0.213948,-0.943673,0.252405,2.928787,-1.107467,0.312054, 0.274567,0.116527,0.954481,2.803736,-1.255869,0.438328, 0.213948,-0.943673,0.252405,2.928787,-1.107467,0.312054, 0.246802,0.252523,0.935586,2.847364,-1.103812,0.402301, 0.303729,-0.050718,0.951408,2.740886,-1.339225,0.463604, 0.048754,0.934073,0.353738,2.824356,-1.407256,0.355013, 0.190577,-0.970681,0.146488,2.893096,-1.302168,0.332049, 0.303729,-0.050718,0.951408,2.740886,-1.339225,0.463604, 0.190577,-0.970681,0.146488,2.893096,-1.302168,0.332049, 0.274567,0.116527,0.954481,2.803736,-1.255869,0.438328, 0.33122,-0.270106,0.904067,2.663024,-1.440487,0.478149, 0.081223,0.915345,0.394394,2.721135,-1.520418,0.362378, 0.048754,0.934073,0.353738,2.824356,-1.407256,0.355013, 0.327725,-0.489439,0.808112,2.515314,-1.507063,0.483275, 0.120116,0.912706,0.390565,2.545261,-1.5933,0.38631, 0.081223,0.915345,0.394394,2.721135,-1.520418,0.362378, 0.327725,-0.489439,0.808112,2.515314,-1.507063,0.483275, 0.081223,0.915345,0.394394,2.721135,-1.520418,0.362378, 0.33122,-0.270106,0.904067,2.663024,-1.440487,0.478149, 0.291858,-0.681117,0.67149,2.422296,-1.510915,0.494169, 0.1717,0.74071,0.649514,2.396607,-1.593239,0.389972, 0.120116,0.912706,0.390565,2.545261,-1.5933,0.38631, 0.291858,-0.681117,0.67149,2.422296,-1.510915,0.494169, 0.120116,0.912706,0.390565,2.545261,-1.5933,0.38631, 0.327725,-0.489439,0.808112,2.515314,-1.507063,0.483275, 0.248915,-0.807091,0.535392,2.249663,-1.492705,0.53127, 0.167704,0.495674,0.852164,2.243492,-1.584783,0.431143, 0.1717,0.74071,0.649514,2.396607,-1.593239,0.389972, 0.248915,-0.807091,0.535392,2.249663,-1.492705,0.53127, 0.1717,0.74071,0.649514,2.396607,-1.593239,0.389972, 0.291858,-0.681117,0.67149,2.422296,-1.510915,0.494169, 0.235033,-0.721825,0.650944,2.0796,-1.473377,0.654997, 0.140536,0.558684,0.817388,2.0482,-1.581983,0.555832, 0.167704,0.495674,0.852164,2.243492,-1.584783,0.431143, 0.235033,-0.721825,0.650944,2.0796,-1.473377,0.654997, 0.167704,0.495674,0.852164,2.243492,-1.584783,0.431143, 0.248915,-0.807091,0.535392,2.249663,-1.492705,0.53127, 0.213948,-0.943673,0.252405,2.928787,-1.107467,0.312054, 0.820584,-0.571526,0,2.931756,-1.129655,0, -0.334515,0.94239,0,2.970902,-0.959664,0, 0.213948,-0.943673,0.252405,2.928787,-1.107467,0.312054, -0.334515,0.94239,0,2.970902,-0.959664,0, 0.244106,-0.79539,0.554768,2.960118,-0.941827,0.284743, 0.190577,-0.970681,0.146488,2.893096,-1.302168,0.332049, -0.255632,0.966774,0,2.896234,-1.31956,0, 0.820584,-0.571526,0,2.931756,-1.129655,0, 0.190577,-0.970681,0.146488,2.893096,-1.302168,0.332049, 0.820584,-0.571526,0,2.931756,-1.129655,0, 0.213948,-0.943673,0.252405,2.928787,-1.107467,0.312054, 0.048754,0.934073,0.353738,2.824356,-1.407256,0.355013, 0.826305,-0.563222,0,2.821376,-1.431534,0, -0.255632,0.966774,0,2.896234,-1.31956,0, 0.048754,0.934073,0.353738,2.824356,-1.407256,0.355013, -0.255632,0.966774,0,2.896234,-1.31956,0, 0.190577,-0.970681,0.146488,2.893096,-1.302168,0.332049, 0.081223,0.915345,0.394394,2.721135,-1.520418,0.362378, -0.133012,0.991114,0,2.706963,-1.528854,0, 0.826305,-0.563222,0,2.821376,-1.431534,0, 0.081223,0.915345,0.394394,2.721135,-1.520418,0.362378, 0.826305,-0.563222,0,2.821376,-1.431534,0, 0.048754,0.934073,0.353738,2.824356,-1.407256,0.355013, 0.120116,0.912706,0.390565,2.545261,-1.5933,0.38631, 0.815341,-0.578981,0,2.534227,-1.617078,0, -0.133012,0.991114,0,2.706963,-1.528854,0, 0.120116,0.912706,0.390565,2.545261,-1.5933,0.38631, -0.133012,0.991114,0,2.706963,-1.528854,0, 0.081223,0.915345,0.394394,2.721135,-1.520418,0.362378, 0.1717,0.74071,0.649514,2.396607,-1.593239,0.389972, -0.144073,0.989567,0,2.348182,-1.624595,0, 0.815341,-0.578981,0,2.534227,-1.617078,0, 0.1717,0.74071,0.649514,2.396607,-1.593239,0.389972, 0.815341,-0.578981,0,2.534227,-1.617078,0, 0.120116,0.912706,0.390565,2.545261,-1.5933,0.38631, 0.167704,0.495674,0.852164,2.243492,-1.584783,0.431143, -0.073566,0.99729,0,2.167167,-1.596326,0, -0.144073,0.989567,0,2.348182,-1.624595,0, 0.167704,0.495674,0.852164,2.243492,-1.584783,0.431143, -0.144073,0.989567,0,2.348182,-1.624595,0, 0.1717,0.74071,0.649514,2.396607,-1.593239,0.389972, 0.140536,0.558684,0.817388,2.0482,-1.581983,0.555832, -0.034649,0.9994,0,1.920432,-1.567396,0, -0.073566,0.99729,0,2.167167,-1.596326,0, 0.140536,0.558684,0.817388,2.0482,-1.581983,0.555832, -0.073566,0.99729,0,2.167167,-1.596326,0, 0.167704,0.495674,0.852164,2.243492,-1.584783,0.431143, 0.100131,0.509748,0.854477,2.835437,-0.231101,0.57789, 0.478274,-0.500384,0.721713,2.736198,-0.346225,0.659345, 0.136523,0.621747,0.771228,2.881063,-0.493146,0.521968, 0.136523,0.621747,0.771228,2.881063,-0.493146,0.521968, 0.709718,-0.453837,0.538824,2.986408,-0.413503,0.428964, 0.100131,0.509748,0.854477,2.835437,-0.231101,0.57789, 0.063174,0.351351,0.93411,2.910769,-0.638444,0.431191, 0.709718,-0.453837,0.538824,2.986408,-0.413503,0.428964, 0.136523,0.621747,0.771228,2.881063,-0.493146,0.521968, 0.136523,0.621747,0.771228,2.881063,-0.493146,0.521968, 0.078896,0.195617,0.977502,2.82554,-0.567578,0.552597, 0.063174,0.351351,0.93411,2.910769,-0.638444,0.431191, 0.245892,-0.489895,0.836385,2.688131,-0.517509,0.672975, 0.078896,0.195617,0.977502,2.82554,-0.567578,0.552597, 0.136523,0.621747,0.771228,2.881063,-0.493146,0.521968, 0.430574,-0.353967,0.830249,2.647368,-0.61155,0.669485, 0.518786,-0.204527,0.830078,2.5392,-0.727778,0.750475, 0.227108,0.258715,0.938876,2.637655,-0.768176,0.637039, 0.58512,-0.108234,0.803692,2.618307,-0.549092,0.805491, 0.518786,-0.204527,0.830078,2.5392,-0.727778,0.750475, 0.430574,-0.353967,0.830249,2.647368,-0.61155,0.669485, 0.430574,-0.353967,0.830249,2.647368,-0.61155,0.669485, 0.245892,-0.489895,0.836385,2.688131,-0.517509,0.672975, 0.58512,-0.108234,0.803692,2.618307,-0.549092,0.805491, 0.089104,0.59547,0.798421,2.710721,-0.830091,0.532493, 0.063174,0.351351,0.93411,2.910769,-0.638444,0.431191, 0.078896,0.195617,0.977502,2.82554,-0.567578,0.552597, 0.089104,0.59547,0.798421,2.710721,-0.830091,0.532493, 0.078896,0.195617,0.977502,2.82554,-0.567578,0.552597, 0.227108,0.258715,0.938876,2.637655,-0.768176,0.637039, 0.147941,0.53134,0.834141,2.857666,-0.930625,0.391195, 0.063174,0.351351,0.93411,2.910769,-0.638444,0.431191, 0.089104,0.59547,0.798421,2.710721,-0.830091,0.532493, 0.097816,-0.016117,0.995074,2.993075,-0.708434,0.342596, 0.063174,0.351351,0.93411,2.910769,-0.638444,0.431191, 0.147941,0.53134,0.834141,2.857666,-0.930625,0.391195, 0.147941,0.53134,0.834141,2.857666,-0.930625,0.391195, 0.244106,-0.79539,0.554768,2.960118,-0.941827,0.284743, 0.10737,-0.293005,0.950063,3.045715,-0.767786,0.261741, 0.147941,0.53134,0.834141,2.857666,-0.930625,0.391195, 0.10737,-0.293005,0.950063,3.045715,-0.767786,0.261741, 0.097816,-0.016117,0.995074,2.993075,-0.708434,0.342596, -0.334515,0.94239,0,2.970902,-0.959664,0, 0.942695,-0.333657,0,3.065544,-0.788768,0, 0.10737,-0.293005,0.950063,3.045715,-0.767786,0.261741, -0.334515,0.94239,0,2.970902,-0.959664,0, 0.10737,-0.293005,0.950063,3.045715,-0.767786,0.261741, 0.244106,-0.79539,0.554768,2.960118,-0.941827,0.284743, -0.476715,0.879058,0,3.118124,-0.703925,0, 0.6483,-0.171023,0.741928,3.107533,-0.691019,0.264602, 0.10737,-0.293005,0.950063,3.045715,-0.767786,0.261741, -0.476715,0.879058,0,3.118124,-0.703925,0, 0.10737,-0.293005,0.950063,3.045715,-0.767786,0.261741, 0.942695,-0.333657,0,3.065544,-0.788768,0, 0.263434,0.119819,0.957207,2.669281,-0.930664,0.557166, 0.101272,0.634315,0.766413,2.670253,-1.108365,0.544018, 0.147941,0.53134,0.834141,2.857666,-0.930625,0.391195, 0.263434,0.119819,0.957207,2.669281,-0.930664,0.557166, 0.147941,0.53134,0.834141,2.857666,-0.930625,0.391195, 0.089104,0.59547,0.798421,2.710721,-0.830091,0.532493, 0.078896,0.195617,0.977502,2.82554,-0.567578,0.552597, 0.245892,-0.489895,0.836385,2.688131,-0.517509,0.672975, 0.430574,-0.353967,0.830249,2.647368,-0.61155,0.669485, 0.078896,0.195617,0.977502,2.82554,-0.567578,0.552597, 0.430574,-0.353967,0.830249,2.647368,-0.61155,0.669485, 0.227108,0.258715,0.938876,2.637655,-0.768176,0.637039, 0.063174,0.351351,0.93411,2.910769,-0.638444,0.431191, 0.097816,-0.016117,0.995074,2.993075,-0.708434,0.342596, 0.4379,-0.250054,0.863549,3.053144,-0.609681,0.326931, 0.063174,0.351351,0.93411,2.910769,-0.638444,0.431191, 0.4379,-0.250054,0.863549,3.053144,-0.609681,0.326931, 0.709718,-0.453837,0.538824,2.986408,-0.413503,0.428964, 0.10737,-0.293005,0.950063,3.045715,-0.767786,0.261741, 0.6483,-0.171023,0.741928,3.107533,-0.691019,0.264602, 0.4379,-0.250054,0.863549,3.053144,-0.609681,0.326931, 0.10737,-0.293005,0.950063,3.045715,-0.767786,0.261741, 0.4379,-0.250054,0.863549,3.053144,-0.609681,0.326931, 0.097816,-0.016117,0.995074,2.993075,-0.708434,0.342596, -0.809154,0.004832,0.587577,-1.200688,-1.577575,0.799188, -0.942755,-0.29871,-0.148273,-1.226563,-1.655159,0.687343, -0.965506,-0.176768,-0.191185,-1.091175,-1.70712,0.727242, -0.809154,0.004832,0.587577,-1.200688,-1.577575,0.799188, -0.965506,-0.176768,-0.191185,-1.091175,-1.70712,0.727242, -0.02449,0.224062,0.974267,-0.953236,-1.545941,0.89918, -0.285709,0.130064,0.949449,-1.376186,-1.661988,0.718954, -0.942755,-0.29871,-0.148273,-1.226563,-1.655159,0.687343, -0.809154,0.004832,0.587577,-1.200688,-1.577575,0.799188, 0.714393,-0.109998,0.691045,-1.266738,-1.691944,0.557922, 0.859237,-0.17312,0.481395,-1.089642,-1.757196,0.685154, -0.965506,-0.176768,-0.191185,-1.091175,-1.70712,0.727242, 0.714393,-0.109998,0.691045,-1.266738,-1.691944,0.557922, -0.965506,-0.176768,-0.191185,-1.091175,-1.70712,0.727242, -0.942755,-0.29871,-0.148273,-1.226563,-1.655159,0.687343, -0.017579,0.132168,0.991072,-0.972089,-1.774507,0.76857, -0.02449,0.224062,0.974267,-0.953236,-1.545941,0.89918, -0.965506,-0.176768,-0.191185,-1.091175,-1.70712,0.727242, 0.419396,-0.035927,0.907092,-0.812845,-1.785424,0.768511, -0.02449,0.224062,0.974267,-0.953236,-1.545941,0.89918, -0.017579,0.132168,0.991072,-0.972089,-1.774507,0.76857, 0.045651,-0.004499,0.998947,-0.680046,-1.768325,0.81908, 0.079848,0.962653,0.258695,-0.535144,-1.615983,0.920556, -0.02449,0.224062,0.974267,-0.953236,-1.545941,0.89918, 0.045651,-0.004499,0.998947,-0.680046,-1.768325,0.81908, -0.02449,0.224062,0.974267,-0.953236,-1.545941,0.89918, 0.419396,-0.035927,0.907092,-0.812845,-1.785424,0.768511, 0.031476,0.864418,0.501787,-0.564074,-1.789401,0.803191, 0.079848,0.962653,0.258695,-0.535144,-1.615983,0.920556, 0.045651,-0.004499,0.998947,-0.680046,-1.768325,0.81908, -0.019419,-0.11596,0.993064,-0.422877,-1.7512,0.823423, 0.079848,0.962653,0.258695,-0.535144,-1.615983,0.920556, 0.031476,0.864418,0.501787,-0.564074,-1.789401,0.803191, 0.061261,0.954316,0.292452,-0.07847,-1.688266,0.80023, -0.084259,-0.367691,0.926123,-0.063012,-1.583021,0.865082, 0.079848,0.962653,0.258695,-0.535144,-1.615983,0.920556, 0.061261,0.954316,0.292452,-0.07847,-1.688266,0.80023, 0.079848,0.962653,0.258695,-0.535144,-1.615983,0.920556, -0.019419,-0.11596,0.993064,-0.422877,-1.7512,0.823423, -0.004377,0.58747,0.809234,-0.543078,-1.810473,0.563825, 0.076968,0.969253,0.233719,-0.094135,-1.769086,0.556924, 0.061261,0.954316,0.292452,-0.07847,-1.688266,0.80023, -0.004377,0.58747,0.809234,-0.543078,-1.810473,0.563825, 0.061261,0.954316,0.292452,-0.07847,-1.688266,0.80023, -0.019419,-0.11596,0.993064,-0.422877,-1.7512,0.823423, -0.019419,-0.11596,0.993064,-0.422877,-1.7512,0.823423, 0.031476,0.864418,0.501787,-0.564074,-1.789401,0.803191, -0.004377,0.58747,0.809234,-0.543078,-1.810473,0.563825, 0.045651,-0.004499,0.998947,-0.680046,-1.768325,0.81908, -0.004377,0.58747,0.809234,-0.543078,-1.810473,0.563825, 0.031476,0.864418,0.501787,-0.564074,-1.789401,0.803191, 0.419396,-0.035927,0.907092,-0.812845,-1.785424,0.768511, -0.055857,0.145868,0.987726,-0.977375,-1.793126,0.498747, -0.004377,0.58747,0.809234,-0.543078,-1.810473,0.563825, 0.419396,-0.035927,0.907092,-0.812845,-1.785424,0.768511, -0.004377,0.58747,0.809234,-0.543078,-1.810473,0.563825, 0.045651,-0.004499,0.998947,-0.680046,-1.768325,0.81908, -0.017579,0.132168,0.991072,-0.972089,-1.774507,0.76857, -0.965506,-0.176768,-0.191185,-1.091175,-1.70712,0.727242, 0.859237,-0.17312,0.481395,-1.089642,-1.757196,0.685154, -0.182029,-0.190207,0.964721,-1.108758,-1.770749,0.473033, -0.055857,0.145868,0.987726,-0.977375,-1.793126,0.498747, 0.859237,-0.17312,0.481395,-1.089642,-1.757196,0.685154, -0.182029,-0.190207,0.964721,-1.108758,-1.770749,0.473033, 0.859237,-0.17312,0.481395,-1.089642,-1.757196,0.685154, 0.714393,-0.109998,0.691045,-1.266738,-1.691944,0.557922, 0.714393,-0.109998,0.691045,-1.266738,-1.691944,0.557922, -0.571338,-0.120921,0.811758,-1.305099,-1.70846,0.48423, -0.182029,-0.190207,0.964721,-1.108758,-1.770749,0.473033, -0.942755,-0.29871,-0.148273,-1.226563,-1.655159,0.687343, -0.285709,0.130064,0.949449,-1.376186,-1.661988,0.718954, 0.714393,-0.109998,0.691045,-1.266738,-1.691944,0.557922, -0.587909,-0.233166,0.774594,-1.397474,-1.693815,0.570541, 0.714393,-0.109998,0.691045,-1.266738,-1.691944,0.557922, -0.285709,0.130064,0.949449,-1.376186,-1.661988,0.718954, -0.571338,-0.120921,0.811758,-1.305099,-1.70846,0.48423, 0.023392,-0.110333,0.993619,-1.406693,-1.697325,0.450399, -0.279485,0.127803,0.951606,-1.386502,-1.718441,0.350823, -0.329905,-0.225598,0.916661,-0.972514,-1.822778,0.372649, -0.571338,-0.120921,0.811758,-1.305099,-1.70846,0.48423, -0.279485,0.127803,0.951606,-1.386502,-1.718441,0.350823, 0.044022,0.273891,0.960753,-0.523838,-1.850065,0.388007, -0.004377,0.58747,0.809234,-0.543078,-1.810473,0.563825, -0.055857,0.145868,0.987726,-0.977375,-1.793126,0.498747, 0.044022,0.273891,0.960753,-0.523838,-1.850065,0.388007, -0.055857,0.145868,0.987726,-0.977375,-1.793126,0.498747, -0.329905,-0.225598,0.916661,-0.972514,-1.822778,0.372649, 0.057779,0.975002,0.214553,-0.112666,-1.806584,0.383324, 0.076968,0.969253,0.233719,-0.094135,-1.769086,0.556924, -0.004377,0.58747,0.809234,-0.543078,-1.810473,0.563825, 0.057779,0.975002,0.214553,-0.112666,-1.806584,0.383324, -0.004377,0.58747,0.809234,-0.543078,-1.810473,0.563825, 0.044022,0.273891,0.960753,-0.523838,-1.850065,0.388007, -0.178511,-0.973481,0.143068,0.480235,-1.631521,0.401961, -0.1427,-0.847733,0.510868,0.489819,-1.524947,0.672392, 0.076968,0.969253,0.233719,-0.094135,-1.769086,0.556924, -0.178511,-0.973481,0.143068,0.480235,-1.631521,0.401961, 0.076968,0.969253,0.233719,-0.094135,-1.769086,0.556924, 0.057779,0.975002,0.214553,-0.112666,-1.806584,0.383324, 0.057779,0.975002,0.214553,-0.112666,-1.806584,0.383324, -0.084764,-0.996401,0,-0.155114,-1.828285,0, 0.226963,-0.973903,0,0.44655,-1.67295,0, 0.057779,0.975002,0.214553,-0.112666,-1.806584,0.383324, 0.226963,-0.973903,0,0.44655,-1.67295,0, -0.178511,-0.973481,0.143068,0.480235,-1.631521,0.401961, 0.044022,0.273891,0.960753,-0.523838,-1.850065,0.388007, 0.854132,-0.520056,0,-0.530369,-1.860806,0, -0.084764,-0.996401,0,-0.155114,-1.828285,0, 0.044022,0.273891,0.960753,-0.523838,-1.850065,0.388007, -0.084764,-0.996401,0,-0.155114,-1.828285,0, 0.057779,0.975002,0.214553,-0.112666,-1.806584,0.383324, -0.329905,-0.225598,0.916661,-0.972514,-1.822778,0.372649, 0.113474,-0.993541,0,-0.956007,-1.825728,0, 0.854132,-0.520056,0,-0.530369,-1.860806,0, -0.329905,-0.225598,0.916661,-0.972514,-1.822778,0.372649, 0.854132,-0.520056,0,-0.530369,-1.860806,0, 0.044022,0.273891,0.960753,-0.523838,-1.850065,0.388007, -0.279485,0.127803,0.951606,-1.386502,-1.718441,0.350823, 0.011286,0.999936,0,-1.395728,-1.723811,0, 0.113474,-0.993541,0,-0.956007,-1.825728,0, -0.279485,0.127803,0.951606,-1.386502,-1.718441,0.350823, 0.113474,-0.993541,0,-0.956007,-1.825728,0, -0.329905,-0.225598,0.916661,-0.972514,-1.822778,0.372649, -0.055857,0.145868,0.987726,-0.977375,-1.793126,0.498747, -0.017579,0.132168,0.991072,-0.972089,-1.774507,0.76857, 0.859237,-0.17312,0.481395,-1.089642,-1.757196,0.685154, -0.017579,0.132168,0.991072,-0.972089,-1.774507,0.76857, -0.055857,0.145868,0.987726,-0.977375,-1.793126,0.498747, 0.419396,-0.035927,0.907092,-0.812845,-1.785424,0.768511, -0.51975,0.138222,0.843063,1.806371,-2.949735,0.984058, -0.4909,0.016111,-0.871067,1.771416,-2.769024,0.9461, 0.21689,-0.976039,-0.017487,1.718315,-2.775468,0.921796, -0.51975,0.138222,0.843063,1.806371,-2.949735,0.984058, 0.21689,-0.976039,-0.017487,1.718315,-2.775468,0.921796, -0.424393,0.057227,0.903668,1.734568,-2.965876,0.986396, -0.775358,0.344514,0.529274,2.021366,-2.881725,0.945561, -0.440199,0.219838,0.870572,1.960643,-2.71286,0.90089, -0.90358,0.003168,0.428409,1.880971,-2.733242,0.8902, -0.775358,0.344514,0.529274,2.021366,-2.881725,0.945561, -0.90358,0.003168,0.428409,1.880971,-2.733242,0.8902, -0.032037,-0.072305,0.996868,1.911792,-2.895773,0.950117, -0.820357,0.160676,0.548815,2.057496,-2.887282,0.844225, 0.636282,0.100894,0.76483,1.994078,-2.713047,0.824553, -0.440199,0.219838,0.870572,1.960643,-2.71286,0.90089, -0.820357,0.160676,0.548815,2.057496,-2.887282,0.844225, -0.440199,0.219838,0.870572,1.960643,-2.71286,0.90089, -0.775358,0.344514,0.529274,2.021366,-2.881725,0.945561, -0.906134,0.012265,-0.422813,1.735077,-3.022732,0.972751, -0.51975,0.138222,0.843063,1.806371,-2.949735,0.984058, -0.424393,0.057227,0.903668,1.734568,-2.965876,0.986396, 0.461464,-0.003303,0.887153,1.721745,-3.116887,0.979111, 0.000666,0.002295,0.999997,1.802387,-3.089615,0.961851, -0.906134,0.012265,-0.422813,1.735077,-3.022732,0.972751, -0.156447,-0.088128,0.983747,1.811797,-3.135641,0.933096, 0.000666,0.002295,0.999997,1.802387,-3.089615,0.961851, 0.461464,-0.003303,0.887153,1.721745,-3.116887,0.979111, 0.773659,-0.235087,-0.588375,2.091539,-3.032437,0.947029, 0.789099,-0.039289,-0.613008,2.113587,-3.011851,0.851648, -0.820357,0.160676,0.548815,2.057496,-2.887282,0.844225, 0.773659,-0.235087,-0.588375,2.091539,-3.032437,0.947029, -0.820357,0.160676,0.548815,2.057496,-2.887282,0.844225, -0.775358,0.344514,0.529274,2.021366,-2.881725,0.945561, -0.90358,0.003168,0.428409,1.880971,-2.733242,0.8902, -0.062994,-0.00854,-0.997977,1.830669,-2.736121,0.903313, 0.433219,-0.09361,0.896414,1.848272,-2.92726,0.996966, -0.90358,0.003168,0.428409,1.880971,-2.733242,0.8902, 0.433219,-0.09361,0.896414,1.848272,-2.92726,0.996966, -0.032037,-0.072305,0.996868,1.911792,-2.895773,0.950117, 0.433219,-0.09361,0.896414,1.848272,-2.92726,0.996966, -0.062994,-0.00854,-0.997977,1.830669,-2.736121,0.903313, -0.4909,0.016111,-0.871067,1.771416,-2.769024,0.9461, 0.433219,-0.09361,0.896414,1.848272,-2.92726,0.996966, -0.4909,0.016111,-0.871067,1.771416,-2.769024,0.9461, -0.51975,0.138222,0.843063,1.806371,-2.949735,0.984058, -0.050511,-0.258376,-0.964723,1.709173,-3.133145,0.80794, 0.461464,-0.003303,0.887153,1.721745,-3.116887,0.979111, -0.906134,0.012265,-0.422813,1.735077,-3.022732,0.972751, -0.050511,-0.258376,-0.964723,1.709173,-3.133145,0.80794, -0.906134,0.012265,-0.422813,1.735077,-3.022732,0.972751, -0.065687,-0.249194,-0.966223,1.705953,-3.006628,0.83263, -0.042094,-0.220101,-0.974568,1.806407,-3.173343,0.834455, -0.156447,-0.088128,0.983747,1.811797,-3.135641,0.933096, 0.461464,-0.003303,0.887153,1.721745,-3.116887,0.979111, -0.042094,-0.220101,-0.974568,1.806407,-3.173343,0.834455, 0.461464,-0.003303,0.887153,1.721745,-3.116887,0.979111, -0.050511,-0.258376,-0.964723,1.709173,-3.133145,0.80794, -0.363523,-0.150625,-0.919327,1.900481,-3.131932,0.728621, -0.042094,-0.220101,-0.974568,1.806407,-3.173343,0.834455, -0.050511,-0.258376,-0.964723,1.709173,-3.133145,0.80794, -0.363523,-0.150625,-0.919327,1.900481,-3.131932,0.728621, -0.050511,-0.258376,-0.964723,1.709173,-3.133145,0.80794, -0.326843,-0.236651,-0.91497,1.741854,-3.114181,0.700705, 0.753698,-0.027204,-0.656657,1.776024,-2.980086,0.707575, -0.326843,-0.236651,-0.91497,1.741854,-3.114181,0.700705, -0.050511,-0.258376,-0.964723,1.709173,-3.133145,0.80794, 0.753698,-0.027204,-0.656657,1.776024,-2.980086,0.707575, -0.050511,-0.258376,-0.964723,1.709173,-3.133145,0.80794, -0.065687,-0.249194,-0.966223,1.705953,-3.006628,0.83263, -0.065687,-0.249194,-0.966223,1.705953,-3.006628,0.83263, -0.020456,0.943466,0.330837,1.700797,-2.794792,0.82425, 0.030762,-0.124297,-0.991768,1.736425,-2.743683,0.736866, -0.065687,-0.249194,-0.966223,1.705953,-3.006628,0.83263, 0.030762,-0.124297,-0.991768,1.736425,-2.743683,0.736866, 0.753698,-0.027204,-0.656657,1.776024,-2.980086,0.707575, -0.032037,-0.072305,0.996868,1.911792,-2.895773,0.950117, -0.215783,-0.895808,-0.388544,1.980621,-3.043895,0.964237, 0.773659,-0.235087,-0.588375,2.091539,-3.032437,0.947029, -0.032037,-0.072305,0.996868,1.911792,-2.895773,0.950117, 0.773659,-0.235087,-0.588375,2.091539,-3.032437,0.947029, -0.775358,0.344514,0.529274,2.021366,-2.881725,0.945561, -0.032037,-0.072305,0.996868,1.911792,-2.895773,0.950117, 0.433219,-0.09361,0.896414,1.848272,-2.92726,0.996966, 0.356923,-0.210291,0.910156,1.898573,-3.068274,0.994338, -0.032037,-0.072305,0.996868,1.911792,-2.895773,0.950117, 0.356923,-0.210291,0.910156,1.898573,-3.068274,0.994338, -0.215783,-0.895808,-0.388544,1.980621,-3.043895,0.964237, -0.51975,0.138222,0.843063,1.806371,-2.949735,0.984058, 0.517272,-0.552302,0.653753,1.855134,-3.083228,0.986129, 0.356923,-0.210291,0.910156,1.898573,-3.068274,0.994338, -0.51975,0.138222,0.843063,1.806371,-2.949735,0.984058, 0.356923,-0.210291,0.910156,1.898573,-3.068274,0.994338, 0.433219,-0.09361,0.896414,1.848272,-2.92726,0.996966, -0.156447,-0.088128,0.983747,1.811797,-3.135641,0.933096, 0.517272,-0.552302,0.653753,1.855134,-3.083228,0.986129, 0.000666,0.002295,0.999997,1.802387,-3.089615,0.961851, 0.000666,0.002295,0.999997,1.802387,-3.089615,0.961851, 0.517272,-0.552302,0.653753,1.855134,-3.083228,0.986129, -0.51975,0.138222,0.843063,1.806371,-2.949735,0.984058, 0.000666,0.002295,0.999997,1.802387,-3.089615,0.961851, -0.51975,0.138222,0.843063,1.806371,-2.949735,0.984058, -0.906134,0.012265,-0.422813,1.735077,-3.022732,0.972751, -0.424393,0.057227,0.903668,1.734568,-2.965876,0.986396, -0.065687,-0.249194,-0.966223,1.705953,-3.006628,0.83263, -0.906134,0.012265,-0.422813,1.735077,-3.022732,0.972751, -0.080858,0.024731,0.996419,2.07369,-3.020848,0.782654, -0.753891,0.130682,0.643872,2.001343,-2.847715,0.762517, -0.820357,0.160676,0.548815,2.057496,-2.887282,0.844225, -0.080858,0.024731,0.996419,2.07369,-3.020848,0.782654, -0.820357,0.160676,0.548815,2.057496,-2.887282,0.844225, 0.789099,-0.039289,-0.613008,2.113587,-3.011851,0.851648, -0.492859,-0.096404,0.864752,1.857471,-2.950722,0.669988, -0.363523,-0.150625,-0.919327,1.900481,-3.131932,0.728621, -0.326843,-0.236651,-0.91497,1.741854,-3.114181,0.700705, 0.753698,-0.027204,-0.656657,1.776024,-2.980086,0.707575, -0.492859,-0.096404,0.864752,1.857471,-2.950722,0.669988, -0.326843,-0.236651,-0.91497,1.741854,-3.114181,0.700705, -0.492859,-0.096404,0.864752,1.857471,-2.950722,0.669988, 0.012244,-0.298111,0.954453,1.945632,-2.87671,0.703118, -0.245482,-0.183394,0.951896,1.998099,-3.039955,0.718855, -0.492859,-0.096404,0.864752,1.857471,-2.950722,0.669988, -0.245482,-0.183394,0.951896,1.998099,-3.039955,0.718855, -0.363523,-0.150625,-0.919327,1.900481,-3.131932,0.728621, 0.012244,-0.298111,0.954453,1.945632,-2.87671,0.703118, -0.753891,0.130682,0.643872,2.001343,-2.847715,0.762517, -0.080858,0.024731,0.996419,2.07369,-3.020848,0.782654, 0.012244,-0.298111,0.954453,1.945632,-2.87671,0.703118, -0.080858,0.024731,0.996419,2.07369,-3.020848,0.782654, -0.245482,-0.183394,0.951896,1.998099,-3.039955,0.718855, 0.672894,0.661099,0.331907,1.841282,-2.716008,0.708009, -0.545598,-0.330416,0.770161,1.884318,-2.724404,0.701999, 0.012244,-0.298111,0.954453,1.945632,-2.87671,0.703118, 0.672894,0.661099,0.331907,1.841282,-2.716008,0.708009, 0.012244,-0.298111,0.954453,1.945632,-2.87671,0.703118, -0.492859,-0.096404,0.864752,1.857471,-2.950722,0.669988, -0.074103,0.409269,0.909399,1.972647,-2.728848,0.772496, -0.753891,0.130682,0.643872,2.001343,-2.847715,0.762517, 0.012244,-0.298111,0.954453,1.945632,-2.87671,0.703118, -0.074103,0.409269,0.909399,1.972647,-2.728848,0.772496, 0.012244,-0.298111,0.954453,1.945632,-2.87671,0.703118, -0.545598,-0.330416,0.770161,1.884318,-2.724404,0.701999, 0.030762,-0.124297,-0.991768,1.736425,-2.743683,0.736866, 0.672894,0.661099,0.331907,1.841282,-2.716008,0.708009, -0.492859,-0.096404,0.864752,1.857471,-2.950722,0.669988, 0.030762,-0.124297,-0.991768,1.736425,-2.743683,0.736866, -0.492859,-0.096404,0.864752,1.857471,-2.950722,0.669988, 0.753698,-0.027204,-0.656657,1.776024,-2.980086,0.707575, 0.009712,0.399549,0.91666,-2.687162,-1.539807,0.988048, -0.13251,0.440061,0.888137,-2.837147,-1.791733,0.921563, 0.942117,-0.292664,0.163592,-2.734184,-1.717948,0.749581, 0.009712,0.399549,0.91666,-2.687162,-1.539807,0.988048, 0.942117,-0.292664,0.163592,-2.734184,-1.717948,0.749581, -0.995081,-0.092251,-0.036114,-2.591357,-1.510845,0.88547, 0.095733,-0.224552,0.969748,-2.765069,-1.561164,1.084313, 0.413011,0.629609,0.658038,-2.918293,-1.904184,1.004659, -0.13251,0.440061,0.888137,-2.837147,-1.791733,0.921563, 0.095733,-0.224552,0.969748,-2.765069,-1.561164,1.084313, -0.13251,0.440061,0.888137,-2.837147,-1.791733,0.921563, 0.009712,0.399549,0.91666,-2.687162,-1.539807,0.988048, -0.149005,-0.65467,0.741084,-2.862576,-1.546894,1.117139, 0.070969,0.266956,0.961092,-3.010917,-1.884498,1.08351, 0.413011,0.629609,0.658038,-2.918293,-1.904184,1.004659, -0.149005,-0.65467,0.741084,-2.862576,-1.546894,1.117139, 0.413011,0.629609,0.658038,-2.918293,-1.904184,1.004659, 0.095733,-0.224552,0.969748,-2.765069,-1.561164,1.084313, -0.461794,0.113692,0.879671,-2.955052,-1.49684,1.128812, 0.405633,0.578229,0.707893,-3.117476,-1.866892,1.108034, 0.070969,0.266956,0.961092,-3.010917,-1.884498,1.08351, -0.461794,0.113692,0.879671,-2.955052,-1.49684,1.128812, 0.070969,0.266956,0.961092,-3.010917,-1.884498,1.08351, -0.149005,-0.65467,0.741084,-2.862576,-1.546894,1.117139, -0.18119,-0.970212,0.160805,-3.063133,-1.440555,1.090926, -0.431118,-0.034268,0.901645,-3.23261,-1.834299,1.087832, 0.405633,0.578229,0.707893,-3.117476,-1.866892,1.108034, -0.18119,-0.970212,0.160805,-3.063133,-1.440555,1.090926, 0.405633,0.578229,0.707893,-3.117476,-1.866892,1.108034, -0.461794,0.113692,0.879671,-2.955052,-1.49684,1.128812, 0.290478,-0.146424,0.945612,-3.387254,-1.486027,0.672861, 0.596352,0.583149,0.551635,-3.498521,-1.762078,0.762472, 0.637284,0.689194,0.344791,-3.49052,-1.760417,0.903104, 0.290478,-0.146424,0.945612,-3.387254,-1.486027,0.672861, 0.637284,0.689194,0.344791,-3.49052,-1.760417,0.903104, 0.737412,0.542596,0.402261,-3.36599,-1.48517,0.888076, 0.737412,0.542596,0.402261,-3.36599,-1.48517,0.888076, 0.515412,-0.714946,-0.472444,-3.319817,-1.365015,0.886015, -0.521685,-0.261319,0.812131,-3.335942,-1.365685,0.72459, 0.737412,0.542596,0.402261,-3.36599,-1.48517,0.888076, -0.521685,-0.261319,0.812131,-3.335942,-1.365685,0.72459, 0.290478,-0.146424,0.945612,-3.387254,-1.486027,0.672861, -0.637763,0.107242,0.76273,-3.068444,-2.260195,1.03507, 0.503689,0.453945,0.735004,-3.177824,-2.279173,1.04758, 0.851754,0.52393,-0.003494,-3.162498,-2.556375,1.058409, -0.637763,0.107242,0.76273,-3.068444,-2.260195,1.03507, 0.851754,0.52393,-0.003494,-3.162498,-2.556375,1.058409, 0.840313,0.535537,-0.084107,-3.078699,-2.553982,1.046834, -0.67011,-0.018974,0.742019,-3.047974,-2.109628,1.063497, -0.833016,0.038682,0.551896,-3.169489,-2.110039,1.076796, 0.503689,0.453945,0.735004,-3.177824,-2.279173,1.04758, -0.67011,-0.018974,0.742019,-3.047974,-2.109628,1.063497, 0.503689,0.453945,0.735004,-3.177824,-2.279173,1.04758, -0.637763,0.107242,0.76273,-3.068444,-2.260195,1.03507, 0.070969,0.266956,0.961092,-3.010917,-1.884498,1.08351, 0.405633,0.578229,0.707893,-3.117476,-1.866892,1.108034, -0.833016,0.038682,0.551896,-3.169489,-2.110039,1.076796, 0.070969,0.266956,0.961092,-3.010917,-1.884498,1.08351, -0.833016,0.038682,0.551896,-3.169489,-2.110039,1.076796, -0.67011,-0.018974,0.742019,-3.047974,-2.109628,1.063497, -0.833016,0.038682,0.551896,-3.169489,-2.110039,1.076796, 0.197648,0.486888,0.850809,-3.207447,-2.103206,1.071366, 0.503689,0.453945,0.735004,-3.177824,-2.279173,1.04758, 0.405633,0.578229,0.707893,-3.117476,-1.866892,1.108034, -0.431118,-0.034268,0.901645,-3.23261,-1.834299,1.087832, 0.197648,0.486888,0.850809,-3.207447,-2.103206,1.071366, 0.405633,0.578229,0.707893,-3.117476,-1.866892,1.108034, 0.197648,0.486888,0.850809,-3.207447,-2.103206,1.071366, -0.833016,0.038682,0.551896,-3.169489,-2.110039,1.076796, 0.503689,0.453945,0.735004,-3.177824,-2.279173,1.04758, 0.144389,0.231536,0.962051,-3.281816,-2.305055,1.001878, 0.163153,0.19945,0.96623,-3.251541,-2.56405,1.023627, 0.503689,0.453945,0.735004,-3.177824,-2.279173,1.04758, 0.163153,0.19945,0.96623,-3.251541,-2.56405,1.023627, 0.851754,0.52393,-0.003494,-3.162498,-2.556375,1.058409, 0.197648,0.486888,0.850809,-3.207447,-2.103206,1.071366, -0.985013,0.106757,-0.135469,-3.327526,-2.075729,1.005328, 0.144389,0.231536,0.962051,-3.281816,-2.305055,1.001878, 0.197648,0.486888,0.850809,-3.207447,-2.103206,1.071366, 0.144389,0.231536,0.962051,-3.281816,-2.305055,1.001878, 0.503689,0.453945,0.735004,-3.177824,-2.279173,1.04758, -0.431118,-0.034268,0.901645,-3.23261,-1.834299,1.087832, -0.46316,0.228643,0.856274,-3.357996,-1.811803,0.975625, -0.985013,0.106757,-0.135469,-3.327526,-2.075729,1.005328, -0.431118,-0.034268,0.901645,-3.23261,-1.834299,1.087832, -0.985013,0.106757,-0.135469,-3.327526,-2.075729,1.005328, 0.197648,0.486888,0.850809,-3.207447,-2.103206,1.071366, 0.144389,0.231536,0.962051,-3.281816,-2.305055,1.001878, -0.948593,-0.185732,-0.25627,-3.389388,-2.305625,0.950348, -0.99734,0.010762,-0.072093,-3.347304,-2.573628,0.955211, 0.144389,0.231536,0.962051,-3.281816,-2.305055,1.001878, -0.99734,0.010762,-0.072093,-3.347304,-2.573628,0.955211, 0.163153,0.19945,0.96623,-3.251541,-2.56405,1.023627, -0.985013,0.106757,-0.135469,-3.327526,-2.075729,1.005328, -0.948593,-0.185732,-0.25627,-3.451965,-2.077314,0.931974, -0.948593,-0.185732,-0.25627,-3.389388,-2.305625,0.950348, -0.985013,0.106757,-0.135469,-3.327526,-2.075729,1.005328, -0.948593,-0.185732,-0.25627,-3.389388,-2.305625,0.950348, 0.144389,0.231536,0.962051,-3.281816,-2.305055,1.001878, -0.46316,0.228643,0.856274,-3.357996,-1.811803,0.975625, 0.637284,0.689194,0.344791,-3.49052,-1.760417,0.903104, -0.948593,-0.185732,-0.25627,-3.451965,-2.077314,0.931974, -0.46316,0.228643,0.856274,-3.357996,-1.811803,0.975625, -0.948593,-0.185732,-0.25627,-3.451965,-2.077314,0.931974, -0.985013,0.106757,-0.135469,-3.327526,-2.075729,1.005328, -0.471141,0.022027,-0.881783,-3.007483,-2.270712,0.984279, -0.637763,0.107242,0.76273,-3.068444,-2.260195,1.03507, 0.840313,0.535537,-0.084107,-3.078699,-2.553982,1.046834, -0.471141,0.022027,-0.881783,-3.007483,-2.270712,0.984279, 0.840313,0.535537,-0.084107,-3.078699,-2.553982,1.046834, -0.178214,-0.110838,-0.977729,-3.022819,-2.52224,0.979148, -0.385346,-0.01874,-0.922582,-2.969687,-2.097941,0.982836, -0.67011,-0.018974,0.742019,-3.047974,-2.109628,1.063497, -0.637763,0.107242,0.76273,-3.068444,-2.260195,1.03507, -0.385346,-0.01874,-0.922582,-2.969687,-2.097941,0.982836, -0.637763,0.107242,0.76273,-3.068444,-2.260195,1.03507, -0.471141,0.022027,-0.881783,-3.007483,-2.270712,0.984279, 0.413011,0.629609,0.658038,-2.918293,-1.904184,1.004659, 0.070969,0.266956,0.961092,-3.010917,-1.884498,1.08351, -0.67011,-0.018974,0.742019,-3.047974,-2.109628,1.063497, 0.413011,0.629609,0.658038,-2.918293,-1.904184,1.004659, -0.67011,-0.018974,0.742019,-3.047974,-2.109628,1.063497, -0.385346,-0.01874,-0.922582,-2.969687,-2.097941,0.982836, -0.13251,0.440061,0.888137,-2.837147,-1.791733,0.921563, 0.413011,0.629609,0.658038,-2.918293,-1.904184,1.004659, -0.11646,-0.017993,-0.993032,-2.892438,-1.95081,0.87812, -0.385346,-0.01874,-0.922582,-2.969687,-2.097941,0.982836, 0.156207,-0.109405,-0.981647,-2.981187,-2.142718,0.858353, -0.11646,-0.017993,-0.993032,-2.892438,-1.95081,0.87812, -0.385346,-0.01874,-0.922582,-2.969687,-2.097941,0.982836, -0.11646,-0.017993,-0.993032,-2.892438,-1.95081,0.87812, 0.413011,0.629609,0.658038,-2.918293,-1.904184,1.004659, -0.471141,0.022027,-0.881783,-3.007483,-2.270712,0.984279, 0.339875,0.026681,-0.940092,-3.030605,-2.311222,0.88433, 0.156207,-0.109405,-0.981647,-2.981187,-2.142718,0.858353, -0.471141,0.022027,-0.881783,-3.007483,-2.270712,0.984279, 0.156207,-0.109405,-0.981647,-2.981187,-2.142718,0.858353, -0.385346,-0.01874,-0.922582,-2.969687,-2.097941,0.982836, -0.178214,-0.110838,-0.977729,-3.022819,-2.52224,0.979148, -0.674431,0.094186,-0.732306,-3.04661,-2.510881,0.900772, 0.339875,0.026681,-0.940092,-3.030605,-2.311222,0.88433, -0.178214,-0.110838,-0.977729,-3.022819,-2.52224,0.979148, 0.339875,0.026681,-0.940092,-3.030605,-2.311222,0.88433, -0.471141,0.022027,-0.881783,-3.007483,-2.270712,0.984279, 0.156207,-0.109405,-0.981647,-2.981187,-2.142718,0.858353, -0.978077,-0.070308,-0.196017,-3.040398,-2.156239,0.808208, -0.037581,-0.042039,-0.998409,-2.964215,-1.978727,0.776572, 0.156207,-0.109405,-0.981647,-2.981187,-2.142718,0.858353, -0.037581,-0.042039,-0.998409,-2.964215,-1.978727,0.776572, -0.11646,-0.017993,-0.993032,-2.892438,-1.95081,0.87812, 0.339875,0.026681,-0.940092,-3.030605,-2.311222,0.88433, -0.978077,-0.070308,-0.196017,-3.040398,-2.156239,0.808208, 0.156207,-0.109405,-0.981647,-2.981187,-2.142718,0.858353, -0.039603,0.339955,0.939607,-3.144012,-2.333635,0.829994, -0.556404,-0.045521,-0.829664,-3.120761,-2.15777,0.766432, -0.978077,-0.070308,-0.196017,-3.040398,-2.156239,0.808208, -0.039603,0.339955,0.939607,-3.144012,-2.333635,0.829994, -0.978077,-0.070308,-0.196017,-3.040398,-2.156239,0.808208, 0.339875,0.026681,-0.940092,-3.030605,-2.311222,0.88433, -0.978077,-0.070308,-0.196017,-3.040398,-2.156239,0.808208, -0.556404,-0.045521,-0.829664,-3.120761,-2.15777,0.766432, -0.377491,-0.043727,0.92498,-3.066022,-1.953125,0.719516, -0.978077,-0.070308,-0.196017,-3.040398,-2.156239,0.808208, -0.377491,-0.043727,0.92498,-3.066022,-1.953125,0.719516, -0.037581,-0.042039,-0.998409,-2.964215,-1.978727,0.776572, -0.556404,-0.045521,-0.829664,-3.120761,-2.15777,0.766432, 0.72114,0.258271,-0.642848,-3.253309,-2.137354,0.760713, 0.684558,0.361153,-0.633205,-3.211005,-1.850398,0.700723, -0.556404,-0.045521,-0.829664,-3.120761,-2.15777,0.766432, 0.684558,0.361153,-0.633205,-3.211005,-1.850398,0.700723, -0.377491,-0.043727,0.92498,-3.066022,-1.953125,0.719516, -0.039603,0.339955,0.939607,-3.144012,-2.333635,0.829994, 0.845209,0.529005,0.075999,-3.235873,-2.335338,0.820588, 0.72114,0.258271,-0.642848,-3.253309,-2.137354,0.760713, -0.039603,0.339955,0.939607,-3.144012,-2.333635,0.829994, 0.72114,0.258271,-0.642848,-3.253309,-2.137354,0.760713, -0.556404,-0.045521,-0.829664,-3.120761,-2.15777,0.766432, 0.780958,0.624512,0.00945,-3.132772,-2.528669,0.848639, 0.61389,0.702597,0.359856,-3.240554,-2.555467,0.856262, 0.845209,0.529005,0.075999,-3.235873,-2.335338,0.820588, 0.780958,0.624512,0.00945,-3.132772,-2.528669,0.848639, 0.845209,0.529005,0.075999,-3.235873,-2.335338,0.820588, -0.039603,0.339955,0.939607,-3.144012,-2.333635,0.829994, 0.77125,0.634502,0.050796,-3.381262,-1.828189,0.697034, 0.596352,0.583149,0.551635,-3.498521,-1.762078,0.762472, 0.290478,-0.146424,0.945612,-3.387254,-1.486027,0.672861, 0.77125,0.634502,0.050796,-3.381262,-1.828189,0.697034, 0.290478,-0.146424,0.945612,-3.387254,-1.486027,0.672861, 0.830793,-0.244757,0.499877,-3.304804,-1.582192,0.643445, 0.830793,-0.244757,0.499877,-3.304804,-1.582192,0.643445, 0.843062,-0.10517,0.527433,-3.139394,-1.687482,0.638546, 0.684558,0.361153,-0.633205,-3.211005,-1.850398,0.700723, 0.830793,-0.244757,0.499877,-3.304804,-1.582192,0.643445, 0.684558,0.361153,-0.633205,-3.211005,-1.850398,0.700723, 0.77125,0.634502,0.050796,-3.381262,-1.828189,0.697034, 0.72114,0.258271,-0.642848,-3.253309,-2.137354,0.760713, 0.712283,0.385668,-0.586441,-3.422698,-2.070796,0.773898, 0.77125,0.634502,0.050796,-3.381262,-1.828189,0.697034, 0.72114,0.258271,-0.642848,-3.253309,-2.137354,0.760713, 0.77125,0.634502,0.050796,-3.381262,-1.828189,0.697034, 0.684558,0.361153,-0.633205,-3.211005,-1.850398,0.700723, 0.845209,0.529005,0.075999,-3.235873,-2.335338,0.820588, 0.684834,0.490952,-0.538488,-3.339489,-2.328145,0.827572, 0.712283,0.385668,-0.586441,-3.422698,-2.070796,0.773898, 0.845209,0.529005,0.075999,-3.235873,-2.335338,0.820588, 0.712283,0.385668,-0.586441,-3.422698,-2.070796,0.773898, 0.72114,0.258271,-0.642848,-3.253309,-2.137354,0.760713, 0.61389,0.702597,0.359856,-3.240554,-2.555467,0.856262, 0.722847,0.455753,-0.519404,-3.297886,-2.54902,0.861657, 0.684834,0.490952,-0.538488,-3.339489,-2.328145,0.827572, 0.61389,0.702597,0.359856,-3.240554,-2.555467,0.856262, 0.684834,0.490952,-0.538488,-3.339489,-2.328145,0.827572, 0.845209,0.529005,0.075999,-3.235873,-2.335338,0.820588, 0.712283,0.385668,-0.586441,-3.422698,-2.070796,0.773898, -0.058899,-0.007802,-0.998233,-3.463753,-2.079892,0.844667, 0.596352,0.583149,0.551635,-3.498521,-1.762078,0.762472, 0.712283,0.385668,-0.586441,-3.422698,-2.070796,0.773898, 0.596352,0.583149,0.551635,-3.498521,-1.762078,0.762472, 0.77125,0.634502,0.050796,-3.381262,-1.828189,0.697034, 0.684834,0.490952,-0.538488,-3.339489,-2.328145,0.827572, 0.403627,0.101273,-0.909302,-3.412068,-2.356105,0.865813, -0.058899,-0.007802,-0.998233,-3.463753,-2.079892,0.844667, 0.684834,0.490952,-0.538488,-3.339489,-2.328145,0.827572, -0.058899,-0.007802,-0.998233,-3.463753,-2.079892,0.844667, 0.712283,0.385668,-0.586441,-3.422698,-2.070796,0.773898, 0.722847,0.455753,-0.519404,-3.297886,-2.54902,0.861657, 0.308087,0.149605,-0.939522,-3.372066,-2.569159,0.904785, 0.403627,0.101273,-0.909302,-3.412068,-2.356105,0.865813, 0.722847,0.455753,-0.519404,-3.297886,-2.54902,0.861657, 0.403627,0.101273,-0.909302,-3.412068,-2.356105,0.865813, 0.684834,0.490952,-0.538488,-3.339489,-2.328145,0.827572, 0.403627,0.101273,-0.909302,-3.412068,-2.356105,0.865813, -0.948593,-0.185732,-0.25627,-3.389388,-2.305625,0.950348, -0.948593,-0.185732,-0.25627,-3.451965,-2.077314,0.931974, 0.403627,0.101273,-0.909302,-3.412068,-2.356105,0.865813, -0.948593,-0.185732,-0.25627,-3.451965,-2.077314,0.931974, -0.058899,-0.007802,-0.998233,-3.463753,-2.079892,0.844667, 0.308087,0.149605,-0.939522,-3.372066,-2.569159,0.904785, -0.99734,0.010762,-0.072093,-3.347304,-2.573628,0.955211, -0.948593,-0.185732,-0.25627,-3.389388,-2.305625,0.950348, 0.308087,0.149605,-0.939522,-3.372066,-2.569159,0.904785, -0.948593,-0.185732,-0.25627,-3.389388,-2.305625,0.950348, 0.403627,0.101273,-0.909302,-3.412068,-2.356105,0.865813, -0.058899,-0.007802,-0.998233,-3.463753,-2.079892,0.844667, -0.948593,-0.185732,-0.25627,-3.451965,-2.077314,0.931974, 0.637284,0.689194,0.344791,-3.49052,-1.760417,0.903104, -0.058899,-0.007802,-0.998233,-3.463753,-2.079892,0.844667, 0.637284,0.689194,0.344791,-3.49052,-1.760417,0.903104, 0.596352,0.583149,0.551635,-3.498521,-1.762078,0.762472, -0.508357,0.250892,0.823787,-3.342096,-1.533989,0.921628, 0.737412,0.542596,0.402261,-3.36599,-1.48517,0.888076, 0.637284,0.689194,0.344791,-3.49052,-1.760417,0.903104, -0.508357,0.250892,0.823787,-3.342096,-1.533989,0.921628, 0.637284,0.689194,0.344791,-3.49052,-1.760417,0.903104, -0.46316,0.228643,0.856274,-3.357996,-1.811803,0.975625, -0.430524,-0.648446,0.627828,2.02453,-2.195334,0.811284, 0.626232,0.565165,0.53705,1.98533,-2.221319,0.893145, 0.768073,0.514956,0.380637,1.930747,-2.463535,0.894743, -0.430524,-0.648446,0.627828,2.02453,-2.195334,0.811284, 0.768073,0.514956,0.380637,1.930747,-2.463535,0.894743, 0.213417,-0.547722,0.808983,1.953911,-2.462233,0.830594, -0.492627,0.113675,0.862784,2.047696,-2.050138,0.814712, 0.52783,0.437826,0.727807,2.013095,-2.051912,0.911043, 0.626232,0.565165,0.53705,1.98533,-2.221319,0.893145, -0.492627,0.113675,0.862784,2.047696,-2.050138,0.814712, 0.626232,0.565165,0.53705,1.98533,-2.221319,0.893145, -0.430524,-0.648446,0.627828,2.02453,-2.195334,0.811284, -0.495591,0.225654,0.838731,2.053108,-1.738285,0.824853, 0.862528,0.499882,-0.078511,2.021591,-1.755289,0.912093, 0.52783,0.437826,0.727807,2.013095,-2.051912,0.911043, -0.495591,0.225654,0.838731,2.053108,-1.738285,0.824853, 0.52783,0.437826,0.727807,2.013095,-2.051912,0.911043, -0.492627,0.113675,0.862784,2.047696,-2.050138,0.814712, -0.541077,0.245809,0.804247,2.059844,-1.561331,0.858957, 0.872426,0.488735,-0.003223,2.036036,-1.57908,0.967151, 0.862528,0.499882,-0.078511,2.021591,-1.755289,0.912093, -0.541077,0.245809,0.804247,2.059844,-1.561331,0.858957, 0.862528,0.499882,-0.078511,2.021591,-1.755289,0.912093, -0.495591,0.225654,0.838731,2.053108,-1.738285,0.824853, 0.21689,-0.976039,-0.017487,1.718315,-2.775468,0.921796, -0.4909,0.016111,-0.871067,1.771416,-2.769024,0.9461, -0.184432,-0.109597,-0.976716,1.737623,-2.485017,0.918334, 0.21689,-0.976039,-0.017487,1.718315,-2.775468,0.921796, -0.184432,-0.109597,-0.976716,1.737623,-2.485017,0.918334, 0.383337,-0.601981,-0.700479,1.678986,-2.513137,0.891745, 0.383337,-0.601981,-0.700479,1.678986,-2.513137,0.891745, -0.184432,-0.109597,-0.976716,1.737623,-2.485017,0.918334, -0.554502,-0.046423,-0.830886,1.710406,-2.272223,0.954296, 0.383337,-0.601981,-0.700479,1.678986,-2.513137,0.891745, -0.554502,-0.046423,-0.830886,1.710406,-2.272223,0.954296, -0.701253,0.091018,-0.707079,1.648793,-2.280014,0.929365, -0.701253,0.091018,-0.707079,1.648793,-2.280014,0.929365, -0.554502,-0.046423,-0.830886,1.710406,-2.272223,0.954296, -0.554151,-0.205896,-0.80655,1.720031,-2.105568,0.971354, -0.701253,0.091018,-0.707079,1.648793,-2.280014,0.929365, -0.554151,-0.205896,-0.80655,1.720031,-2.105568,0.971354, -0.706628,-0.050081,-0.705811,1.6249,-2.087301,0.963391, -0.706628,-0.050081,-0.705811,1.6249,-2.087301,0.963391, -0.554151,-0.205896,-0.80655,1.720031,-2.105568,0.971354, -0.343436,-0.507052,-0.790537,1.717145,-1.80953,1.004092, -0.706628,-0.050081,-0.705811,1.6249,-2.087301,0.963391, -0.343436,-0.507052,-0.790537,1.717145,-1.80953,1.004092, -0.990285,-0.10079,-0.095796,1.572979,-1.827591,0.985823, -0.990285,-0.10079,-0.095796,1.572979,-1.827591,0.985823, -0.343436,-0.507052,-0.790537,1.717145,-1.80953,1.004092, 0.056398,-0.684481,-0.726846,1.650318,-1.645881,1.053347, -0.990285,-0.10079,-0.095796,1.572979,-1.827591,0.985823, 0.056398,-0.684481,-0.726846,1.650318,-1.645881,1.053347, -0.404532,-0.045989,0.913367,1.54175,-1.643613,1.01419, 0.717573,0.343682,-0.605782,1.655948,-2.520927,0.844269, 0.383337,-0.601981,-0.700479,1.678986,-2.513137,0.891745, -0.701253,0.091018,-0.707079,1.648793,-2.280014,0.929365, 0.717573,0.343682,-0.605782,1.655948,-2.520927,0.844269, -0.701253,0.091018,-0.707079,1.648793,-2.280014,0.929365, 0.743894,0.373896,-0.553916,1.586321,-2.273752,0.880969, 0.743894,0.373896,-0.553916,1.586321,-2.273752,0.880969, -0.701253,0.091018,-0.707079,1.648793,-2.280014,0.929365, -0.706628,-0.050081,-0.705811,1.6249,-2.087301,0.963391, 0.743894,0.373896,-0.553916,1.586321,-2.273752,0.880969, -0.706628,-0.050081,-0.705811,1.6249,-2.087301,0.963391, 0.752232,0.244351,-0.611914,1.529305,-2.092083,0.887353, 0.752232,0.244351,-0.611914,1.529305,-2.092083,0.887353, -0.706628,-0.050081,-0.705811,1.6249,-2.087301,0.963391, -0.990285,-0.10079,-0.095796,1.572979,-1.827591,0.985823, 0.752232,0.244351,-0.611914,1.529305,-2.092083,0.887353, -0.990285,-0.10079,-0.095796,1.572979,-1.827591,0.985823, 0.866543,0.493887,0.071972,1.508714,-1.808578,0.934359, 0.866543,0.493887,0.071972,1.508714,-1.808578,0.934359, -0.990285,-0.10079,-0.095796,1.572979,-1.827591,0.985823, -0.404532,-0.045989,0.913367,1.54175,-1.643613,1.01419, 0.866543,0.493887,0.071972,1.508714,-1.808578,0.934359, -0.404532,-0.045989,0.913367,1.54175,-1.643613,1.01419, 0.874983,0.217677,0.432459,1.480629,-1.640132,0.953447, 0.79991,0.598082,0.049409,1.663494,-2.485963,0.790773, 0.717573,0.343682,-0.605782,1.655948,-2.520927,0.844269, 0.743894,0.373896,-0.553916,1.586321,-2.273752,0.880969, 0.79991,0.598082,0.049409,1.663494,-2.485963,0.790773, 0.743894,0.373896,-0.553916,1.586321,-2.273752,0.880969, 0.963394,-0.268066,0.003702,1.60129,-2.267132,0.787696, 0.963394,-0.268066,0.003702,1.60129,-2.267132,0.787696, 0.743894,0.373896,-0.553916,1.586321,-2.273752,0.880969, 0.752232,0.244351,-0.611914,1.529305,-2.092083,0.887353, 0.963394,-0.268066,0.003702,1.60129,-2.267132,0.787696, 0.752232,0.244351,-0.611914,1.529305,-2.092083,0.887353, 0.714275,0.465374,-0.522723,1.544087,-2.080722,0.786432, 0.714275,0.465374,-0.522723,1.544087,-2.080722,0.786432, 0.752232,0.244351,-0.611914,1.529305,-2.092083,0.887353, 0.866543,0.493887,0.071972,1.508714,-1.808578,0.934359, 0.714275,0.465374,-0.522723,1.544087,-2.080722,0.786432, 0.866543,0.493887,0.071972,1.508714,-1.808578,0.934359, 0.81992,-0.126246,-0.558385,1.473886,-1.818947,0.799576, 0.81992,-0.126246,-0.558385,1.473886,-1.818947,0.799576, 0.866543,0.493887,0.071972,1.508714,-1.808578,0.934359, 0.874983,0.217677,0.432459,1.480629,-1.640132,0.953447, 0.81992,-0.126246,-0.558385,1.473886,-1.818947,0.799576, 0.874983,0.217677,0.432459,1.480629,-1.640132,0.953447, 0.751148,0.43192,-0.49922,1.451825,-1.576856,0.702758, 0.331576,0.146631,-0.931964,1.756349,-2.446399,0.705428, 0.79991,0.598082,0.049409,1.663494,-2.485963,0.790773, 0.963394,-0.268066,0.003702,1.60129,-2.267132,0.787696, 0.331576,0.146631,-0.931964,1.756349,-2.446399,0.705428, 0.963394,-0.268066,0.003702,1.60129,-2.267132,0.787696, 0.43336,0.0979,-0.895888,1.677597,-2.237953,0.696318, 0.43336,0.0979,-0.895888,1.677597,-2.237953,0.696318, 0.963394,-0.268066,0.003702,1.60129,-2.267132,0.787696, 0.714275,0.465374,-0.522723,1.544087,-2.080722,0.786432, 0.43336,0.0979,-0.895888,1.677597,-2.237953,0.696318, 0.714275,0.465374,-0.522723,1.544087,-2.080722,0.786432, 0.261981,0.048424,-0.963857,1.643403,-2.076583,0.689565, 0.261981,0.048424,-0.963857,1.643403,-2.076583,0.689565, 0.714275,0.465374,-0.522723,1.544087,-2.080722,0.786432, 0.81992,-0.126246,-0.558385,1.473886,-1.818947,0.799576, 0.261981,0.048424,-0.963857,1.643403,-2.076583,0.689565, 0.81992,-0.126246,-0.558385,1.473886,-1.818947,0.799576, 0.79444,0.150525,-0.588393,1.596751,-1.722028,0.684655, 0.79444,0.150525,-0.588393,1.596751,-1.722028,0.684655, 0.81992,-0.126246,-0.558385,1.473886,-1.818947,0.799576, 0.751148,0.43192,-0.49922,1.451825,-1.576856,0.702758, 0.79444,0.150525,-0.588393,1.596751,-1.722028,0.684655, 0.751148,0.43192,-0.49922,1.451825,-1.576856,0.702758, 0.24139,0.178826,-0.953809,1.599889,-1.595526,0.623185, -0.440199,0.219838,0.870572,1.960643,-2.71286,0.90089, 0.636282,0.100894,0.76483,1.994078,-2.713047,0.824553, 0.213417,-0.547722,0.808983,1.953911,-2.462233,0.830594, -0.440199,0.219838,0.870572,1.960643,-2.71286,0.90089, 0.213417,-0.547722,0.808983,1.953911,-2.462233,0.830594, 0.768073,0.514956,0.380637,1.930747,-2.463535,0.894743, -0.90358,0.003168,0.428409,1.880971,-2.733242,0.8902, -0.440199,0.219838,0.870572,1.960643,-2.71286,0.90089, 0.768073,0.514956,0.380637,1.930747,-2.463535,0.894743, -0.90358,0.003168,0.428409,1.880971,-2.733242,0.8902, 0.768073,0.514956,0.380637,1.930747,-2.463535,0.894743, -0.874488,-0.088621,0.476882,1.864064,-2.469953,0.935601, 0.862528,0.499882,-0.078511,2.021591,-1.755289,0.912093, 0.872426,0.488735,-0.003223,2.036036,-1.57908,0.967151, -0.987313,0.097591,-0.125253,1.937009,-1.625419,1.026843, 0.862528,0.499882,-0.078511,2.021591,-1.755289,0.912093, -0.987313,0.097591,-0.125253,1.937009,-1.625419,1.026843, -0.997638,0.009858,-0.067986,1.941767,-1.759457,0.997454, 0.52783,0.437826,0.727807,2.013095,-2.051912,0.911043, 0.862528,0.499882,-0.078511,2.021591,-1.755289,0.912093, -0.997638,0.009858,-0.067986,1.941767,-1.759457,0.997454, 0.52783,0.437826,0.727807,2.013095,-2.051912,0.911043, -0.997638,0.009858,-0.067986,1.941767,-1.759457,0.997454, 0.21581,0.484483,0.847763,1.918641,-2.083654,1.001275, -0.874488,-0.088621,0.476882,1.864064,-2.469953,0.935601, 0.768073,0.514956,0.380637,1.930747,-2.463535,0.894743, 0.626232,0.565165,0.53705,1.98533,-2.221319,0.893145, -0.874488,-0.088621,0.476882,1.864064,-2.469953,0.935601, 0.626232,0.565165,0.53705,1.98533,-2.221319,0.893145, -0.783521,-0.393963,0.480508,1.90637,-2.282284,0.964887, 0.626232,0.565165,0.53705,1.98533,-2.221319,0.893145, 0.52783,0.437826,0.727807,2.013095,-2.051912,0.911043, 0.21581,0.484483,0.847763,1.918641,-2.083654,1.001275, 0.626232,0.565165,0.53705,1.98533,-2.221319,0.893145, 0.21581,0.484483,0.847763,1.918641,-2.083654,1.001275, -0.783521,-0.393963,0.480508,1.90637,-2.282284,0.964887, -0.062994,-0.00854,-0.997977,1.830669,-2.736121,0.903313, -0.955753,-0.169718,-0.240275,1.801127,-2.48469,0.938593, -0.184432,-0.109597,-0.976716,1.737623,-2.485017,0.918334, -0.062994,-0.00854,-0.997977,1.830669,-2.736121,0.903313, -0.184432,-0.109597,-0.976716,1.737623,-2.485017,0.918334, -0.4909,0.016111,-0.871067,1.771416,-2.769024,0.9461, -0.062994,-0.00854,-0.997977,1.830669,-2.736121,0.903313, -0.90358,0.003168,0.428409,1.880971,-2.733242,0.8902, -0.874488,-0.088621,0.476882,1.864064,-2.469953,0.935601, -0.062994,-0.00854,-0.997977,1.830669,-2.736121,0.903313, -0.874488,-0.088621,0.476882,1.864064,-2.469953,0.935601, -0.955753,-0.169718,-0.240275,1.801127,-2.48469,0.938593, -0.150944,-0.987886,-0.036012,1.818846,-1.756976,1.023593, -0.937976,-0.320543,-0.132115,1.804927,-1.581954,1.089198, 0.056398,-0.684481,-0.726846,1.650318,-1.645881,1.053347, -0.150944,-0.987886,-0.036012,1.818846,-1.756976,1.023593, 0.056398,-0.684481,-0.726846,1.650318,-1.645881,1.053347, -0.343436,-0.507052,-0.790537,1.717145,-1.80953,1.004092, -0.630099,-0.773677,-0.066329,1.839224,-2.109267,0.998351, -0.150944,-0.987886,-0.036012,1.818846,-1.756976,1.023593, -0.343436,-0.507052,-0.790537,1.717145,-1.80953,1.004092, -0.630099,-0.773677,-0.066329,1.839224,-2.109267,0.998351, -0.343436,-0.507052,-0.790537,1.717145,-1.80953,1.004092, -0.554151,-0.205896,-0.80655,1.720031,-2.105568,0.971354, -0.967491,-0.143323,-0.208372,1.818266,-2.313852,0.968652, -0.630099,-0.773677,-0.066329,1.839224,-2.109267,0.998351, -0.554151,-0.205896,-0.80655,1.720031,-2.105568,0.971354, -0.967491,-0.143323,-0.208372,1.818266,-2.313852,0.968652, -0.554151,-0.205896,-0.80655,1.720031,-2.105568,0.971354, -0.554502,-0.046423,-0.830886,1.710406,-2.272223,0.954296, -0.955753,-0.169718,-0.240275,1.801127,-2.48469,0.938593, -0.967491,-0.143323,-0.208372,1.818266,-2.313852,0.968652, -0.554502,-0.046423,-0.830886,1.710406,-2.272223,0.954296, -0.955753,-0.169718,-0.240275,1.801127,-2.48469,0.938593, -0.554502,-0.046423,-0.830886,1.710406,-2.272223,0.954296, -0.184432,-0.109597,-0.976716,1.737623,-2.485017,0.918334, -0.997638,0.009858,-0.067986,1.941767,-1.759457,0.997454, -0.987313,0.097591,-0.125253,1.937009,-1.625419,1.026843, -0.937976,-0.320543,-0.132115,1.804927,-1.581954,1.089198, -0.997638,0.009858,-0.067986,1.941767,-1.759457,0.997454, -0.937976,-0.320543,-0.132115,1.804927,-1.581954,1.089198, -0.150944,-0.987886,-0.036012,1.818846,-1.756976,1.023593, 0.21581,0.484483,0.847763,1.918641,-2.083654,1.001275, -0.997638,0.009858,-0.067986,1.941767,-1.759457,0.997454, -0.150944,-0.987886,-0.036012,1.818846,-1.756976,1.023593, 0.21581,0.484483,0.847763,1.918641,-2.083654,1.001275, -0.150944,-0.987886,-0.036012,1.818846,-1.756976,1.023593, -0.630099,-0.773677,-0.066329,1.839224,-2.109267,0.998351, -0.783521,-0.393963,0.480508,1.90637,-2.282284,0.964887, 0.21581,0.484483,0.847763,1.918641,-2.083654,1.001275, -0.630099,-0.773677,-0.066329,1.839224,-2.109267,0.998351, -0.783521,-0.393963,0.480508,1.90637,-2.282284,0.964887, -0.630099,-0.773677,-0.066329,1.839224,-2.109267,0.998351, -0.967491,-0.143323,-0.208372,1.818266,-2.313852,0.968652, -0.874488,-0.088621,0.476882,1.864064,-2.469953,0.935601, -0.783521,-0.393963,0.480508,1.90637,-2.282284,0.964887, -0.967491,-0.143323,-0.208372,1.818266,-2.313852,0.968652, -0.874488,-0.088621,0.476882,1.864064,-2.469953,0.935601, -0.967491,-0.143323,-0.208372,1.818266,-2.313852,0.968652, -0.955753,-0.169718,-0.240275,1.801127,-2.48469,0.938593, 0.030762,-0.124297,-0.991768,1.736425,-2.743683,0.736866, 0.79991,0.598082,0.049409,1.663494,-2.485963,0.790773, 0.331576,0.146631,-0.931964,1.756349,-2.446399,0.705428, 0.030762,-0.124297,-0.991768,1.736425,-2.743683,0.736866, 0.331576,0.146631,-0.931964,1.756349,-2.446399,0.705428, 0.672894,0.661099,0.331907,1.841282,-2.716008,0.708009, 0.79444,0.150525,-0.588393,1.596751,-1.722028,0.684655, 0.24139,0.178826,-0.953809,1.599889,-1.595526,0.623185, 0.776291,-0.374867,0.5068,1.721211,-1.590185,0.601932, 0.79444,0.150525,-0.588393,1.596751,-1.722028,0.684655, 0.776291,-0.374867,0.5068,1.721211,-1.590185,0.601932, 0.726897,-0.546447,0.415952,1.740323,-1.67983,0.664098, 0.261981,0.048424,-0.963857,1.643403,-2.076583,0.689565, 0.79444,0.150525,-0.588393,1.596751,-1.722028,0.684655, 0.726897,-0.546447,0.415952,1.740323,-1.67983,0.664098, 0.261981,0.048424,-0.963857,1.643403,-2.076583,0.689565, 0.726897,-0.546447,0.415952,1.740323,-1.67983,0.664098, 0.81802,-0.47123,0.329827,1.747671,-2.067518,0.638841, 0.43336,0.0979,-0.895888,1.677597,-2.237953,0.696318, 0.261981,0.048424,-0.963857,1.643403,-2.076583,0.689565, 0.81802,-0.47123,0.329827,1.747671,-2.067518,0.638841, 0.43336,0.0979,-0.895888,1.677597,-2.237953,0.696318, 0.81802,-0.47123,0.329827,1.747671,-2.067518,0.638841, 0.247956,0.087485,-0.964813,1.772999,-2.230292,0.64494, 0.030762,-0.124297,-0.991768,1.736425,-2.743683,0.736866, -0.020456,0.943466,0.330837,1.700797,-2.794792,0.82425, 0.717573,0.343682,-0.605782,1.655948,-2.520927,0.844269, 0.030762,-0.124297,-0.991768,1.736425,-2.743683,0.736866, 0.717573,0.343682,-0.605782,1.655948,-2.520927,0.844269, 0.79991,0.598082,0.049409,1.663494,-2.485963,0.790773, -0.753891,0.130682,0.643872,2.001343,-2.847715,0.762517, -0.074103,0.409269,0.909399,1.972647,-2.728848,0.772496, 0.636282,0.100894,0.76483,1.994078,-2.713047,0.824553, -0.753891,0.130682,0.643872,2.001343,-2.847715,0.762517, 0.636282,0.100894,0.76483,1.994078,-2.713047,0.824553, -0.820357,0.160676,0.548815,2.057496,-2.887282,0.844225, 0.225987,0.181604,-0.957053,1.947264,-2.443232,0.732587, -0.074103,0.409269,0.909399,1.972647,-2.728848,0.772496, -0.545598,-0.330416,0.770161,1.884318,-2.724404,0.701999, 0.225987,0.181604,-0.957053,1.947264,-2.443232,0.732587, -0.545598,-0.330416,0.770161,1.884318,-2.724404,0.701999, 0.229413,0.089674,-0.96919,1.828658,-2.477348,0.67347, -0.121543,0.046,-0.99152,1.921881,-2.157616,0.692678, 0.225987,0.181604,-0.957053,1.947264,-2.443232,0.732587, 0.229413,0.089674,-0.96919,1.828658,-2.477348,0.67347, -0.121543,0.046,-0.99152,1.921881,-2.157616,0.692678, 0.229413,0.089674,-0.96919,1.828658,-2.477348,0.67347, 0.247956,0.087485,-0.964813,1.772999,-2.230292,0.64494, -0.545598,-0.330416,0.770161,1.884318,-2.724404,0.701999, 0.672894,0.661099,0.331907,1.841282,-2.716008,0.708009, 0.331576,0.146631,-0.931964,1.756349,-2.446399,0.705428, -0.545598,-0.330416,0.770161,1.884318,-2.724404,0.701999, 0.331576,0.146631,-0.931964,1.756349,-2.446399,0.705428, 0.229413,0.089674,-0.96919,1.828658,-2.477348,0.67347, 0.331576,0.146631,-0.931964,1.756349,-2.446399,0.705428, 0.43336,0.0979,-0.895888,1.677597,-2.237953,0.696318, 0.247956,0.087485,-0.964813,1.772999,-2.230292,0.64494, 0.331576,0.146631,-0.931964,1.756349,-2.446399,0.705428, 0.247956,0.087485,-0.964813,1.772999,-2.230292,0.64494, 0.229413,0.089674,-0.96919,1.828658,-2.477348,0.67347, 0.636282,0.100894,0.76483,1.994078,-2.713047,0.824553, -0.074103,0.409269,0.909399,1.972647,-2.728848,0.772496, 0.225987,0.181604,-0.957053,1.947264,-2.443232,0.732587, 0.636282,0.100894,0.76483,1.994078,-2.713047,0.824553, 0.225987,0.181604,-0.957053,1.947264,-2.443232,0.732587, 0.213417,-0.547722,0.808983,1.953911,-2.462233,0.830594, 0.726897,-0.546447,0.415952,1.740323,-1.67983,0.664098, 0.776291,-0.374867,0.5068,1.721211,-1.590185,0.601932, -0.086361,-0.084973,0.992634,1.963153,-1.588839,0.612861, 0.726897,-0.546447,0.415952,1.740323,-1.67983,0.664098, -0.086361,-0.084973,0.992634,1.963153,-1.588839,0.612861, 0.313529,0.096126,-0.944701,1.991892,-1.7484,0.65277, 0.81802,-0.47123,0.329827,1.747671,-2.067518,0.638841, 0.726897,-0.546447,0.415952,1.740323,-1.67983,0.664098, 0.313529,0.096126,-0.944701,1.991892,-1.7484,0.65277, 0.81802,-0.47123,0.329827,1.747671,-2.067518,0.638841, 0.313529,0.096126,-0.944701,1.991892,-1.7484,0.65277, 0.761939,0.13671,-0.633055,1.945206,-2.015769,0.672724, 0.313529,0.096126,-0.944701,1.991892,-1.7484,0.65277, -0.086361,-0.084973,0.992634,1.963153,-1.588839,0.612861, -0.541077,0.245809,0.804247,2.059844,-1.561331,0.858957, 0.313529,0.096126,-0.944701,1.991892,-1.7484,0.65277, -0.541077,0.245809,0.804247,2.059844,-1.561331,0.858957, -0.495591,0.225654,0.838731,2.053108,-1.738285,0.824853, 0.761939,0.13671,-0.633055,1.945206,-2.015769,0.672724, 0.313529,0.096126,-0.944701,1.991892,-1.7484,0.65277, -0.495591,0.225654,0.838731,2.053108,-1.738285,0.824853, 0.761939,0.13671,-0.633055,1.945206,-2.015769,0.672724, -0.495591,0.225654,0.838731,2.053108,-1.738285,0.824853, -0.492627,0.113675,0.862784,2.047696,-2.050138,0.814712, -0.121543,0.046,-0.99152,1.921881,-2.157616,0.692678, 0.761939,0.13671,-0.633055,1.945206,-2.015769,0.672724, -0.492627,0.113675,0.862784,2.047696,-2.050138,0.814712, -0.121543,0.046,-0.99152,1.921881,-2.157616,0.692678, -0.492627,0.113675,0.862784,2.047696,-2.050138,0.814712, -0.430524,-0.648446,0.627828,2.02453,-2.195334,0.811284, 0.225987,0.181604,-0.957053,1.947264,-2.443232,0.732587, -0.121543,0.046,-0.99152,1.921881,-2.157616,0.692678, -0.430524,-0.648446,0.627828,2.02453,-2.195334,0.811284, 0.225987,0.181604,-0.957053,1.947264,-2.443232,0.732587, -0.430524,-0.648446,0.627828,2.02453,-2.195334,0.811284, 0.213417,-0.547722,0.808983,1.953911,-2.462233,0.830594, 0.303379,-0.73119,0.611002,2.126237,-1.330172,0.721011, 0.383978,-0.566345,0.729256,2.158051,-1.209613,0.783941, -0.671694,-0.023528,0.740455,2.141273,-1.234642,0.941254, 0.303379,-0.73119,0.611002,2.126237,-1.330172,0.721011, -0.671694,-0.023528,0.740455,2.141273,-1.234642,0.941254, -0.562282,-0.328887,0.758731,2.111557,-1.376942,0.89657, -0.562282,-0.328887,0.758731,2.111557,-1.376942,0.89657, -0.671694,-0.023528,0.740455,2.141273,-1.234642,0.941254, -0.088841,0.02472,0.995739,2.099566,-1.259996,1.055763, -0.562282,-0.328887,0.758731,2.111557,-1.376942,0.89657, -0.088841,0.02472,0.995739,2.099566,-1.259996,1.055763, 0.157806,0.230905,0.960094,2.071448,-1.410118,1.006192, 0.157806,0.230905,0.960094,2.071448,-1.410118,1.006192, -0.088841,0.02472,0.995739,2.099566,-1.259996,1.055763, 0.57446,0.218241,0.788902,1.966698,-1.22816,1.153716, 0.157806,0.230905,0.960094,2.071448,-1.410118,1.006192, 0.57446,0.218241,0.788902,1.966698,-1.22816,1.153716, -0.144755,0.439659,0.886423,1.974215,-1.469208,1.068951, -0.144755,0.439659,0.886423,1.974215,-1.469208,1.068951, 0.57446,0.218241,0.788902,1.966698,-1.22816,1.153716, 0.526213,0.349004,0.775433,1.805207,-1.268427,1.165317, -0.144755,0.439659,0.886423,1.974215,-1.469208,1.068951, 0.526213,0.349004,0.775433,1.805207,-1.268427,1.165317, 0.339699,0.626415,0.701576,1.801794,-1.465464,1.129277, 0.339699,0.626415,0.701576,1.801794,-1.465464,1.129277, 0.526213,0.349004,0.775433,1.805207,-1.268427,1.165317, 0.926951,0.366239,-0.081429,1.601721,-1.262359,1.14142, 0.339699,0.626415,0.701576,1.801794,-1.465464,1.129277, 0.926951,0.366239,-0.081429,1.601721,-1.262359,1.14142, 0.457853,0.537523,0.708124,1.612396,-1.485728,1.099731, 0.457853,0.537523,0.708124,1.612396,-1.485728,1.099731, 0.926951,0.366239,-0.081429,1.601721,-1.262359,1.14142, -0.496829,-0.096649,0.86245,1.49748,-1.283201,1.088258, 0.457853,0.537523,0.708124,1.612396,-1.485728,1.099731, -0.496829,-0.096649,0.86245,1.49748,-1.283201,1.088258, -0.081045,0.40912,0.908874,1.5167,-1.45305,1.068516, -0.081045,0.40912,0.908874,1.5167,-1.45305,1.068516, -0.496829,-0.096649,0.86245,1.49748,-1.283201,1.088258, 0.013288,-0.297478,0.954636,1.430817,-1.301205,1.024924, -0.081045,0.40912,0.908874,1.5167,-1.45305,1.068516, 0.013288,-0.297478,0.954636,1.430817,-1.301205,1.024924, 0.444124,0.617476,0.649214,1.454817,-1.430228,0.976569, 0.444124,0.617476,0.649214,1.454817,-1.430228,0.976569, 0.013288,-0.297478,0.954636,1.430817,-1.301205,1.024924, -0.228294,-0.186048,0.955651,1.348219,-1.282064,0.845204, 0.444124,0.617476,0.649214,1.454817,-1.430228,0.976569, -0.228294,-0.186048,0.955651,1.348219,-1.282064,0.845204, 0.010538,0.399391,0.91672,1.328862,-1.352627,0.758733, 0.383978,-0.566345,0.729256,2.158051,-1.209613,0.783941, 0.424286,-0.254348,0.869073,2.180012,-1.130557,0.821812, -0.217942,-0.897186,-0.384133,2.17745,-1.127765,0.974416, 0.383978,-0.566345,0.729256,2.158051,-1.209613,0.783941, -0.217942,-0.897186,-0.384133,2.17745,-1.127765,0.974416, -0.671694,-0.023528,0.740455,2.141273,-1.234642,0.941254, -0.671694,-0.023528,0.740455,2.141273,-1.234642,0.941254, -0.217942,-0.897186,-0.384133,2.17745,-1.127765,0.974416, -0.069765,-0.126006,-0.989573,2.148553,-1.103067,1.06541, -0.671694,-0.023528,0.740455,2.141273,-1.234642,0.941254, -0.069765,-0.126006,-0.989573,2.148553,-1.103067,1.06541, -0.088841,0.02472,0.995739,2.099566,-1.259996,1.055763, -0.088841,0.02472,0.995739,2.099566,-1.259996,1.055763, -0.069765,-0.126006,-0.989573,2.148553,-1.103067,1.06541, -0.1083,-0.048546,-0.992932,2.024692,-1.074646,1.172465, -0.088841,0.02472,0.995739,2.099566,-1.259996,1.055763, -0.1083,-0.048546,-0.992932,2.024692,-1.074646,1.172465, 0.57446,0.218241,0.788902,1.966698,-1.22816,1.153716, 0.57446,0.218241,0.788902,1.966698,-1.22816,1.153716, -0.1083,-0.048546,-0.992932,2.024692,-1.074646,1.172465, -0.084936,-0.226589,-0.97028,1.838895,-1.087204,1.201408, 0.57446,0.218241,0.788902,1.966698,-1.22816,1.153716, -0.084936,-0.226589,-0.97028,1.838895,-1.087204,1.201408, 0.526213,0.349004,0.775433,1.805207,-1.268427,1.165317, 0.526213,0.349004,0.775433,1.805207,-1.268427,1.165317, -0.084936,-0.226589,-0.97028,1.838895,-1.087204,1.201408, -0.024032,-0.835976,-0.54824,1.645819,-1.087442,1.173773, 0.526213,0.349004,0.775433,1.805207,-1.268427,1.165317, -0.024032,-0.835976,-0.54824,1.645819,-1.087442,1.173773, 0.926951,0.366239,-0.081429,1.601721,-1.262359,1.14142, 0.926951,0.366239,-0.081429,1.601721,-1.262359,1.14142, -0.024032,-0.835976,-0.54824,1.645819,-1.087442,1.173773, -0.044013,0.340434,0.939238,1.524407,-1.125312,1.142248, 0.926951,0.366239,-0.081429,1.601721,-1.262359,1.14142, -0.044013,0.340434,0.939238,1.524407,-1.125312,1.142248, -0.496829,-0.096649,0.86245,1.49748,-1.283201,1.088258, -0.496829,-0.096649,0.86245,1.49748,-1.283201,1.088258, -0.044013,0.340434,0.939238,1.524407,-1.125312,1.142248, 0.186476,0.252953,0.949337,1.438439,-1.148029,1.098069, -0.496829,-0.096649,0.86245,1.49748,-1.283201,1.088258, 0.186476,0.252953,0.949337,1.438439,-1.148029,1.098069, 0.013288,-0.297478,0.954636,1.430817,-1.301205,1.024924, 0.013288,-0.297478,0.954636,1.430817,-1.301205,1.024924, 0.186476,0.252953,0.949337,1.438439,-1.148029,1.098069, 0.43768,-0.823149,-0.361748,1.310865,-1.136322,0.914838, 0.013288,-0.297478,0.954636,1.430817,-1.301205,1.024924, 0.43768,-0.823149,-0.361748,1.310865,-1.136322,0.914838, -0.228294,-0.186048,0.955651,1.348219,-1.282064,0.845204, -0.086361,-0.084973,0.992634,1.963153,-1.588839,0.612861, 0.140536,0.558684,0.817388,2.0482,-1.581983,0.555832, 0.235033,-0.721825,0.650944,2.0796,-1.473377,0.654997, -0.086361,-0.084973,0.992634,1.963153,-1.588839,0.612861, 0.235033,-0.721825,0.650944,2.0796,-1.473377,0.654997, -0.541077,0.245809,0.804247,2.059844,-1.561331,0.858957, 0.339699,0.626415,0.701576,1.801794,-1.465464,1.129277, 0.457853,0.537523,0.708124,1.612396,-1.485728,1.099731, 0.056398,-0.684481,-0.726846,1.650318,-1.645881,1.053347, 0.339699,0.626415,0.701576,1.801794,-1.465464,1.129277, 0.056398,-0.684481,-0.726846,1.650318,-1.645881,1.053347, -0.937976,-0.320543,-0.132115,1.804927,-1.581954,1.089198, -0.144755,0.439659,0.886423,1.974215,-1.469208,1.068951, 0.339699,0.626415,0.701576,1.801794,-1.465464,1.129277, -0.937976,-0.320543,-0.132115,1.804927,-1.581954,1.089198, -0.144755,0.439659,0.886423,1.974215,-1.469208,1.068951, -0.937976,-0.320543,-0.132115,1.804927,-1.581954,1.089198, -0.987313,0.097591,-0.125253,1.937009,-1.625419,1.026843, 0.157806,0.230905,0.960094,2.071448,-1.410118,1.006192, -0.144755,0.439659,0.886423,1.974215,-1.469208,1.068951, -0.987313,0.097591,-0.125253,1.937009,-1.625419,1.026843, 0.157806,0.230905,0.960094,2.071448,-1.410118,1.006192, -0.987313,0.097591,-0.125253,1.937009,-1.625419,1.026843, 0.872426,0.488735,-0.003223,2.036036,-1.57908,0.967151, -0.562282,-0.328887,0.758731,2.111557,-1.376942,0.89657, 0.157806,0.230905,0.960094,2.071448,-1.410118,1.006192, 0.872426,0.488735,-0.003223,2.036036,-1.57908,0.967151, -0.562282,-0.328887,0.758731,2.111557,-1.376942,0.89657, 0.872426,0.488735,-0.003223,2.036036,-1.57908,0.967151, -0.541077,0.245809,0.804247,2.059844,-1.561331,0.858957, 0.235033,-0.721825,0.650944,2.0796,-1.473377,0.654997, 0.303379,-0.73119,0.611002,2.126237,-1.330172,0.721011, -0.562282,-0.328887,0.758731,2.111557,-1.376942,0.89657, 0.235033,-0.721825,0.650944,2.0796,-1.473377,0.654997, -0.562282,-0.328887,0.758731,2.111557,-1.376942,0.89657, -0.541077,0.245809,0.804247,2.059844,-1.561331,0.858957, 0.080812,0.697931,0.711591,2.229345,-0.992723,0.862826, -0.887036,-0.210048,-0.411154,2.222082,-0.957342,1.014137, -0.217942,-0.897186,-0.384133,2.17745,-1.127765,0.974416, 0.080812,0.697931,0.711591,2.229345,-0.992723,0.862826, -0.217942,-0.897186,-0.384133,2.17745,-1.127765,0.974416, 0.424286,-0.254348,0.869073,2.180012,-1.130557,0.821812, 0.193853,0.161608,0.967628,1.867657,-0.920633,1.206933, -0.493424,-0.16561,-0.853877,1.635139,-0.965221,1.184968, -0.024032,-0.835976,-0.54824,1.645819,-1.087442,1.173773, 0.193853,0.161608,0.967628,1.867657,-0.920633,1.206933, -0.024032,-0.835976,-0.54824,1.645819,-1.087442,1.173773, -0.084936,-0.226589,-0.97028,1.838895,-1.087204,1.201408, -0.819256,-0.566976,0.085772,2.058189,-0.931238,1.163518, 0.193853,0.161608,0.967628,1.867657,-0.920633,1.206933, -0.084936,-0.226589,-0.97028,1.838895,-1.087204,1.201408, -0.819256,-0.566976,0.085772,2.058189,-0.931238,1.163518, -0.084936,-0.226589,-0.97028,1.838895,-1.087204,1.201408, -0.1083,-0.048546,-0.992932,2.024692,-1.074646,1.172465, -0.898389,-0.217201,-0.381735,2.158585,-0.955809,1.113647, -0.819256,-0.566976,0.085772,2.058189,-0.931238,1.163518, -0.1083,-0.048546,-0.992932,2.024692,-1.074646,1.172465, -0.898389,-0.217201,-0.381735,2.158585,-0.955809,1.113647, -0.1083,-0.048546,-0.992932,2.024692,-1.074646,1.172465, -0.069765,-0.126006,-0.989573,2.148553,-1.103067,1.06541, -0.887036,-0.210048,-0.411154,2.222082,-0.957342,1.014137, -0.898389,-0.217201,-0.381735,2.158585,-0.955809,1.113647, -0.069765,-0.126006,-0.989573,2.148553,-1.103067,1.06541, -0.887036,-0.210048,-0.411154,2.222082,-0.957342,1.014137, -0.069765,-0.126006,-0.989573,2.148553,-1.103067,1.06541, -0.217942,-0.897186,-0.384133,2.17745,-1.127765,0.974416, 0.751148,0.43192,-0.49922,1.451825,-1.576856,0.702758, 0.874983,0.217677,0.432459,1.480629,-1.640132,0.953447, 0.444124,0.617476,0.649214,1.454817,-1.430228,0.976569, 0.751148,0.43192,-0.49922,1.451825,-1.576856,0.702758, 0.444124,0.617476,0.649214,1.454817,-1.430228,0.976569, 0.010538,0.399391,0.91672,1.328862,-1.352627,0.758733, 0.43768,-0.823149,-0.361748,1.310865,-1.136322,0.914838, 0.186476,0.252953,0.949337,1.438439,-1.148029,1.098069, -0.53197,-0.108751,-0.839751,1.428883,-0.98669,1.133905, 0.43768,-0.823149,-0.361748,1.310865,-1.136322,0.914838, -0.53197,-0.108751,-0.839751,1.428883,-0.98669,1.133905, -0.382074,-0.25681,-0.887732,1.337875,-0.945716,1.021299, -0.404532,-0.045989,0.913367,1.54175,-1.643613,1.01419, 0.056398,-0.684481,-0.726846,1.650318,-1.645881,1.053347, 0.457853,0.537523,0.708124,1.612396,-1.485728,1.099731, -0.404532,-0.045989,0.913367,1.54175,-1.643613,1.01419, 0.457853,0.537523,0.708124,1.612396,-1.485728,1.099731, -0.081045,0.40912,0.908874,1.5167,-1.45305,1.068516, 0.874983,0.217677,0.432459,1.480629,-1.640132,0.953447, -0.404532,-0.045989,0.913367,1.54175,-1.643613,1.01419, -0.081045,0.40912,0.908874,1.5167,-1.45305,1.068516, 0.874983,0.217677,0.432459,1.480629,-1.640132,0.953447, -0.081045,0.40912,0.908874,1.5167,-1.45305,1.068516, 0.444124,0.617476,0.649214,1.454817,-1.430228,0.976569, -0.044013,0.340434,0.939238,1.524407,-1.125312,1.142248, -0.024032,-0.835976,-0.54824,1.645819,-1.087442,1.173773, -0.493424,-0.16561,-0.853877,1.635139,-0.965221,1.184968, -0.044013,0.340434,0.939238,1.524407,-1.125312,1.142248, -0.493424,-0.16561,-0.853877,1.635139,-0.965221,1.184968, -0.570406,-0.192005,-0.798606,1.536037,-0.985876,1.185597, 0.186476,0.252953,0.949337,1.438439,-1.148029,1.098069, -0.044013,0.340434,0.939238,1.524407,-1.125312,1.142248, -0.570406,-0.192005,-0.798606,1.536037,-0.985876,1.185597, 0.186476,0.252953,0.949337,1.438439,-1.148029,1.098069, -0.570406,-0.192005,-0.798606,1.536037,-0.985876,1.185597, -0.53197,-0.108751,-0.839751,1.428883,-0.98669,1.133905, -0.861251,0.383698,-0.333202,3.247406,2.073333,0, 0.889638,-0.392482,0.233458,2.985371,1.982663,0, 0.397823,0.403779,0.823832,3.009101,1.971604,0.03422, -0.861251,0.383698,-0.333202,3.247406,2.073333,0, 0.397823,0.403779,0.823832,3.009101,1.971604,0.03422, 0.662294,0.443714,0.603726,3.233975,2.059193,0.072431, 0.662294,0.443714,0.603726,3.233975,2.059193,0.072431, 0.397823,0.403779,0.823832,3.009101,1.971604,0.03422, 0.449887,0.239005,0.860511,3.036361,1.913989,0.169838, 0.662294,0.443714,0.603726,3.233975,2.059193,0.072431, 0.449887,0.239005,0.860511,3.036361,1.913989,0.169838, 0.693381,0.351142,0.629224,3.252224,2.026347,0.148215, 0.693381,0.351142,0.629224,3.252224,2.026347,0.148215, 0.449887,0.239005,0.860511,3.036361,1.913989,0.169838, 0.525142,-0.062799,0.848695,3.058366,1.773346,0.297337, 0.693381,0.351142,0.629224,3.252224,2.026347,0.148215, 0.525142,-0.062799,0.848695,3.058366,1.773346,0.297337, 0.748939,0.152982,0.644738,3.276333,1.863773,0.294266, 0.748939,0.152982,0.644738,3.276333,1.863773,0.294266, 0.525142,-0.062799,0.848695,3.058366,1.773346,0.297337, 0.561573,-0.148323,0.814024,3.086666,1.632991,0.338863, 0.748939,0.152982,0.644738,3.276333,1.863773,0.294266, 0.561573,-0.148323,0.814024,3.086666,1.632991,0.338863, 0.795625,-0.129968,0.591684,3.337545,1.748927,0.34021, 0.795625,-0.129968,0.591684,3.337545,1.748927,0.34021, 0.561573,-0.148323,0.814024,3.086666,1.632991,0.338863, 0.513731,-0.239493,0.823847,3.115383,1.49239,0.380228, 0.795625,-0.129968,0.591684,3.337545,1.748927,0.34021, 0.513731,-0.239493,0.823847,3.115383,1.49239,0.380228, 0.805898,-0.146097,0.573745,3.377233,1.5878,0.400781, 0.805898,-0.146097,0.573745,3.377233,1.5878,0.400781, 0.513731,-0.239493,0.823847,3.115383,1.49239,0.380228, 0.506924,-0.406124,0.760323,3.163181,1.209972,0.462438, 0.805898,-0.146097,0.573745,3.377233,1.5878,0.400781, 0.506924,-0.406124,0.760323,3.163181,1.209972,0.462438, 0.772313,-0.244122,0.586461,3.47341,1.366149,0.454658, 0.772313,-0.244122,0.586461,3.47341,1.366149,0.454658, 0.506924,-0.406124,0.760323,3.163181,1.209972,0.462438, 0.552633,-0.484765,0.677938,3.189664,0.907503,0.500122, 0.772313,-0.244122,0.586461,3.47341,1.366149,0.454658, 0.552633,-0.484765,0.677938,3.189664,0.907503,0.500122, 0.697438,-0.478568,0.533435,3.528445,1.060127,0.489443, 0.697438,-0.478568,0.533435,3.528445,1.060127,0.489443, 0.552633,-0.484765,0.677938,3.189664,0.907503,0.500122, 0.696414,-0.392791,0.600602,3.280681,0.510802,0.499434, 0.697438,-0.478568,0.533435,3.528445,1.060127,0.489443, 0.696414,-0.392791,0.600602,3.280681,0.510802,0.499434, 0.628361,-0.426126,0.65083,3.559394,0.706516,0.452535, 0.628361,-0.426126,0.65083,3.559394,0.706516,0.452535, 0.696414,-0.392791,0.600602,3.280681,0.510802,0.499434, 0.026499,0.942993,0.331757,3.321825,0.26669,0.46575, 0.628361,-0.426126,0.65083,3.559394,0.706516,0.452535, 0.026499,0.942993,0.331757,3.321825,0.26669,0.46575, 0.065855,0.814333,0.576649,3.61965,0.472046,0.391742, 0.065855,0.814333,0.576649,3.61965,0.472046,0.391742, 0.026499,0.942993,0.331757,3.321825,0.26669,0.46575, 0.019336,0.837694,0.545798,3.36004,0.165487,0.412685, 0.065855,0.814333,0.576649,3.61965,0.472046,0.391742, 0.019336,0.837694,0.545798,3.36004,0.165487,0.412685, 0.187432,0.691784,0.697355,3.641195,0.407454,0.362198, 0.187432,0.691784,0.697355,3.641195,0.407454,0.362198, 0.019336,0.837694,0.545798,3.36004,0.165487,0.412685, 0.05298,0.780732,0.622615,3.378799,0.073736,0.355362, 0.187432,0.691784,0.697355,3.641195,0.407454,0.362198, 0.05298,0.780732,0.622615,3.378799,0.073736,0.355362, 0.328244,0.603535,0.726637,3.67471,0.338839,0.30784, 0.328244,0.603535,0.726637,3.67471,0.338839,0.30784, 0.05298,0.780732,0.622615,3.378799,0.073736,0.355362, 0.115383,0.694945,0.709746,3.43895,-0.08258,0.257015, 0.328244,0.603535,0.726637,3.67471,0.338839,0.30784, 0.115383,0.694945,0.709746,3.43895,-0.08258,0.257015, 0.387394,0.516219,0.763835,3.700363,0.265794,0.240762, 0.387394,0.516219,0.763835,3.700363,0.265794,0.240762, 0.115383,0.694945,0.709746,3.43895,-0.08258,0.257015, 0.146937,0.551946,0.820832,3.514981,-0.121886,0.187589, 0.387394,0.516219,0.763835,3.700363,0.265794,0.240762, 0.146937,0.551946,0.820832,3.514981,-0.121886,0.187589, 0.387987,0.466053,0.795148,3.737014,0.181837,0.176819, 0.387987,0.466053,0.795148,3.737014,0.181837,0.176819, 0.146937,0.551946,0.820832,3.514981,-0.121886,0.187589, 0.431966,-0.771434,0.46722,3.486028,-0.141683,0, 0.387987,0.466053,0.795148,3.737014,0.181837,0.176819, 0.431966,-0.771434,0.46722,3.486028,-0.141683,0, -0.910859,-0.100368,-0.400327,3.731689,0.186391,0, 0.694153,-0.467999,0.546926,3.454971,2.169877,0, 0.742962,-0.255405,0.618688,3.4583,2.151656,0.102662, -0.071584,0.92252,0.379253,3.727093,2.308406,0.150049, 0.694153,-0.467999,0.546926,3.454971,2.169877,0, -0.071584,0.92252,0.379253,3.727093,2.308406,0.150049, 0.431966,-0.771434,-0.46722,3.71636,2.343387,0, 0.614456,0.489786,0.618509,3.955635,0.432417,0.197586, 0.338485,-0.103202,-0.935295,3.929251,0.411689,0, -0.926486,-0.356041,-0.121897,4.126565,0.642027,0, 0.614456,0.489786,0.618509,3.955635,0.432417,0.197586, -0.926486,-0.356041,-0.121897,4.126565,0.642027,0, 0.804239,-0.153549,0.574128,4.120842,0.627141,0.185461, 0.718673,-0.290446,0.631784,3.889626,0.475277,0.247365, 0.614456,0.489786,0.618509,3.955635,0.432417,0.197586, 0.804239,-0.153549,0.574128,4.120842,0.627141,0.185461, 0.815771,-0.424495,0.392838,3.861841,0.560638,0.311961, 0.718673,-0.290446,0.631784,3.889626,0.475277,0.247365, 0.804239,-0.153549,0.574128,4.120842,0.627141,0.185461, 0.815771,-0.424495,0.392838,3.861841,0.560638,0.311961, 0.804239,-0.153549,0.574128,4.120842,0.627141,0.185461, 0.788801,-0.199379,0.581412,4.105198,0.672581,0.300001, 0.900366,-0.205985,0.38329,3.849352,0.664451,0.387198, 0.815771,-0.424495,0.392838,3.861841,0.560638,0.311961, 0.788801,-0.199379,0.581412,4.105198,0.672581,0.300001, 0.900366,-0.205985,0.38329,3.849352,0.664451,0.387198, 0.788801,-0.199379,0.581412,4.105198,0.672581,0.300001, 0.771881,-0.100912,0.627707,4.068249,0.798926,0.400813, 0.906617,-0.14387,0.39667,3.823137,0.853054,0.461519, 0.900366,-0.205985,0.38329,3.849352,0.664451,0.387198, 0.771881,-0.100912,0.627707,4.068249,0.798926,0.400813, 0.906617,-0.14387,0.39667,3.823137,0.853054,0.461519, 0.771881,-0.100912,0.627707,4.068249,0.798926,0.400813, 0.769758,0.095155,0.631204,4.041657,1.039756,0.496922, 0.908163,-0.140074,0.394486,3.747724,1.184933,0.518662, 0.906617,-0.14387,0.39667,3.823137,0.853054,0.461519, 0.769758,0.095155,0.631204,4.041657,1.039756,0.496922, 0.908163,-0.140074,0.394486,3.747724,1.184933,0.518662, 0.769758,0.095155,0.631204,4.041657,1.039756,0.496922, 0.763734,0.228435,0.603761,3.98851,1.297806,0.539537, 0.907314,0.09913,0.4086,3.650974,1.46374,0.478617, 0.908163,-0.140074,0.394486,3.747724,1.184933,0.518662, 0.763734,0.228435,0.603761,3.98851,1.297806,0.539537, 0.907314,0.09913,0.4086,3.650974,1.46374,0.478617, 0.763734,0.228435,0.603761,3.98851,1.297806,0.539537, 0.696162,0.333274,0.635835,3.886058,1.550141,0.50483, 0.85208,0.278905,0.442914,3.590526,1.70109,0.411994, 0.907314,0.09913,0.4086,3.650974,1.46374,0.478617, 0.696162,0.333274,0.635835,3.886058,1.550141,0.50483, 0.85208,0.278905,0.442914,3.590526,1.70109,0.411994, 0.696162,0.333274,0.635835,3.886058,1.550141,0.50483, 0.539114,0.412574,0.734261,3.881998,1.764428,0.476337, 0.759315,0.386803,0.523282,3.541188,1.849183,0.386366, 0.85208,0.278905,0.442914,3.590526,1.70109,0.411994, 0.539114,0.412574,0.734261,3.881998,1.764428,0.476337, 0.759315,0.386803,0.523282,3.541188,1.849183,0.386366, 0.539114,0.412574,0.734261,3.881998,1.764428,0.476337, 0.462789,0.48004,0.745243,3.814876,1.968416,0.443, 0.636794,0.461927,0.617346,3.479418,1.97825,0.317478, 0.759315,0.386803,0.523282,3.541188,1.849183,0.386366, 0.462789,0.48004,0.745243,3.814876,1.968416,0.443, 0.636794,0.461927,0.617346,3.479418,1.97825,0.317478, 0.462789,0.48004,0.745243,3.814876,1.968416,0.443, 0.241303,0.584582,0.77462,3.758215,2.206683,0.323051, 0.722145,-0.312679,0.617041,3.460196,2.103494,0.180368, 0.636794,0.461927,0.617346,3.479418,1.97825,0.317478, 0.241303,0.584582,0.77462,3.758215,2.206683,0.323051, 0.722145,-0.312679,0.617041,3.460196,2.103494,0.180368, 0.241303,0.584582,0.77462,3.758215,2.206683,0.323051, 0.072694,0.752739,0.654294,3.745669,2.266001,0.24193, 0.742962,-0.255405,0.618688,3.4583,2.151656,0.102662, 0.722145,-0.312679,0.617041,3.460196,2.103494,0.180368, 0.072694,0.752739,0.654294,3.745669,2.266001,0.24193, 0.742962,-0.255405,0.618688,3.4583,2.151656,0.102662, 0.072694,0.752739,0.654294,3.745669,2.266001,0.24193, -0.071584,0.92252,0.379253,3.727093,2.308406,0.150049, -0.560204,0.828355,-0.00034,3.33521,-0.375755,0, -0.046579,0.627301,0.777383,3.342159,-0.384674,0.201349, 0.6483,-0.171023,0.741928,3.107533,-0.691019,0.264602, -0.560204,0.828355,-0.00034,3.33521,-0.375755,0, 0.6483,-0.171023,0.741928,3.107533,-0.691019,0.264602, -0.476715,0.879058,0,3.118124,-0.703925,0, 0.12555,0.440005,0.889176,2.715712,1.828219,0.167709, -0.926486,-0.356041,0.121897,2.723503,1.898839,0, 0.536218,-0.84408,0.000006,2.339597,1.807702,0, 0.12555,0.440005,0.889176,2.715712,1.828219,0.167709, 0.536218,-0.84408,0.000006,2.339597,1.807702,0, -0.05128,0.509983,0.858655,2.361089,1.76666,0.202595, 0.10998,0.376752,0.919762,2.738132,1.687333,0.295046, 0.12555,0.440005,0.889176,2.715712,1.828219,0.167709, -0.05128,0.509983,0.858655,2.361089,1.76666,0.202595, 0.10998,0.376752,0.919762,2.738132,1.687333,0.295046, -0.05128,0.509983,0.858655,2.361089,1.76666,0.202595, -0.02226,0.394285,0.918719,2.406969,1.645328,0.341479, 0.097864,0.250653,0.963118,2.77568,1.53871,0.352829, 0.10998,0.376752,0.919762,2.738132,1.687333,0.295046, -0.02226,0.394285,0.918719,2.406969,1.645328,0.341479, 0.097864,0.250653,0.963118,2.77568,1.53871,0.352829, -0.02226,0.394285,0.918719,2.406969,1.645328,0.341479, -0.026262,0.311275,0.949957,2.519027,1.485931,0.422962, 0.12742,0.021045,0.991626,2.815366,1.377583,0.413399, 0.097864,0.250653,0.963118,2.77568,1.53871,0.352829, -0.026262,0.311275,0.949957,2.519027,1.485931,0.422962, 0.12742,0.021045,0.991626,2.815366,1.377583,0.413399, -0.026262,0.311275,0.949957,2.519027,1.485931,0.422962, -0.039079,0.203923,0.978207,2.553871,1.284278,0.512335, 0.206882,-0.117024,0.971342,2.854291,1.093951,0.49465, 0.12742,0.021045,0.991626,2.815366,1.377583,0.413399, -0.039079,0.203923,0.978207,2.553871,1.284278,0.512335, 0.206882,-0.117024,0.971342,2.854291,1.093951,0.49465, -0.039079,0.203923,0.978207,2.553871,1.284278,0.512335, -0.031021,0.098798,0.994624,2.637461,1.01726,0.581611, 0.218538,-0.213954,0.952084,2.948387,0.783357,0.515058, 0.206882,-0.117024,0.971342,2.854291,1.093951,0.49465, -0.031021,0.098798,0.994624,2.637461,1.01726,0.581611, 0.218538,-0.213954,0.952084,2.948387,0.783357,0.515058, -0.031021,0.098798,0.994624,2.637461,1.01726,0.581611, -0.012663,0.029084,0.999497,2.747937,0.712253,0.615674, 0.304965,-0.136677,0.942505,3.06109,0.397226,0.574193, 0.218538,-0.213954,0.952084,2.948387,0.783357,0.515058, -0.012663,0.029084,0.999497,2.747937,0.712253,0.615674, 0.304965,-0.136677,0.942505,3.06109,0.397226,0.574193, -0.012663,0.029084,0.999497,2.747937,0.712253,0.615674, -0.096144,-0.182414,0.97851,2.811504,0.469098,0.657443, 0.304965,-0.136677,0.942505,3.06109,0.397226,0.574193, -0.096144,-0.182414,0.97851,2.811504,0.469098,0.657443, -0.200187,-0.124247,0.971848,2.898733,0.271916,0.651298, -0.061264,0.921927,0.382487,3.136321,0.171237,0.539896, 0.304965,-0.136677,0.942505,3.06109,0.397226,0.574193, -0.200187,-0.124247,0.971848,2.898733,0.271916,0.651298, -0.061264,0.921927,0.382487,3.136321,0.171237,0.539896, -0.200187,-0.124247,0.971848,2.898733,0.271916,0.651298, 0.023112,-0.187685,0.981957,2.91987,0.084875,0.64246, -0.070642,0.834207,0.546908,3.16616,0.02131,0.457261, -0.061264,0.921927,0.382487,3.136321,0.171237,0.539896, 0.023112,-0.187685,0.981957,2.91987,0.084875,0.64246, -0.070642,0.834207,0.546908,3.16616,0.02131,0.457261, 0.023112,-0.187685,0.981957,2.91987,0.084875,0.64246, 0.720876,-0.356662,0.594247,2.953029,-0.12769,0.520499, -0.055544,0.828008,0.557959,3.199571,-0.153739,0.38015, -0.070642,0.834207,0.546908,3.16616,0.02131,0.457261, 0.720876,-0.356662,0.594247,2.953029,-0.12769,0.520499, -0.055544,0.828008,0.557959,3.199571,-0.153739,0.38015, 0.720876,-0.356662,0.594247,2.953029,-0.12769,0.520499, 0.709718,-0.453837,0.538824,2.986408,-0.413503,0.428964, -0.047374,0.758242,0.65025,3.286426,-0.300744,0.276331, -0.055544,0.828008,0.557959,3.199571,-0.153739,0.38015, 0.709718,-0.453837,0.538824,2.986408,-0.413503,0.428964, -0.047374,0.758242,0.65025,3.286426,-0.300744,0.276331, 0.709718,-0.453837,0.538824,2.986408,-0.413503,0.428964, 0.4379,-0.250054,0.863549,3.053144,-0.609681,0.326931, -0.046579,0.627301,0.777383,3.342159,-0.384674,0.201349, -0.047374,0.758242,0.65025,3.286426,-0.300744,0.276331, 0.4379,-0.250054,0.863549,3.053144,-0.609681,0.326931, -0.046579,0.627301,0.777383,3.342159,-0.384674,0.201349, 0.4379,-0.250054,0.863549,3.053144,-0.609681,0.326931, 0.6483,-0.171023,0.741928,3.107533,-0.691019,0.264602, -0.861251,0.383698,-0.333202,3.247406,2.073333,0, 0.662294,0.443714,0.603726,3.233975,2.059193,0.072431, 0.742962,-0.255405,0.618688,3.4583,2.151656,0.102662, -0.861251,0.383698,-0.333202,3.247406,2.073333,0, 0.742962,-0.255405,0.618688,3.4583,2.151656,0.102662, 0.694153,-0.467999,0.546926,3.454971,2.169877,0, 0.431966,-0.771434,0.46722,3.486028,-0.141683,0, 0.146937,0.551946,0.820832,3.514981,-0.121886,0.187589, -0.046579,0.627301,0.777383,3.342159,-0.384674,0.201349, 0.431966,-0.771434,0.46722,3.486028,-0.141683,0, -0.046579,0.627301,0.777383,3.342159,-0.384674,0.201349, -0.560204,0.828355,-0.00034,3.33521,-0.375755,0, 0.397823,0.403779,0.823832,3.009101,1.971604,0.03422, 0.889638,-0.392482,0.233458,2.985371,1.982663,0, -0.926486,-0.356041,0.121897,2.723503,1.898839,0, 0.449887,0.239005,0.860511,3.036361,1.913989,0.169838, 0.397823,0.403779,0.823832,3.009101,1.971604,0.03422, -0.926486,-0.356041,0.121897,2.723503,1.898839,0, 0.449887,0.239005,0.860511,3.036361,1.913989,0.169838, -0.926486,-0.356041,0.121897,2.723503,1.898839,0, 0.12555,0.440005,0.889176,2.715712,1.828219,0.167709, 0.525142,-0.062799,0.848695,3.058366,1.773346,0.297337, 0.449887,0.239005,0.860511,3.036361,1.913989,0.169838, 0.12555,0.440005,0.889176,2.715712,1.828219,0.167709, 0.525142,-0.062799,0.848695,3.058366,1.773346,0.297337, 0.12555,0.440005,0.889176,2.715712,1.828219,0.167709, 0.10998,0.376752,0.919762,2.738132,1.687333,0.295046, 0.561573,-0.148323,0.814024,3.086666,1.632991,0.338863, 0.525142,-0.062799,0.848695,3.058366,1.773346,0.297337, 0.10998,0.376752,0.919762,2.738132,1.687333,0.295046, 0.561573,-0.148323,0.814024,3.086666,1.632991,0.338863, 0.10998,0.376752,0.919762,2.738132,1.687333,0.295046, 0.097864,0.250653,0.963118,2.77568,1.53871,0.352829, 0.513731,-0.239493,0.823847,3.115383,1.49239,0.380228, 0.561573,-0.148323,0.814024,3.086666,1.632991,0.338863, 0.097864,0.250653,0.963118,2.77568,1.53871,0.352829, 0.513731,-0.239493,0.823847,3.115383,1.49239,0.380228, 0.097864,0.250653,0.963118,2.77568,1.53871,0.352829, 0.12742,0.021045,0.991626,2.815366,1.377583,0.413399, 0.506924,-0.406124,0.760323,3.163181,1.209972,0.462438, 0.513731,-0.239493,0.823847,3.115383,1.49239,0.380228, 0.12742,0.021045,0.991626,2.815366,1.377583,0.413399, 0.506924,-0.406124,0.760323,3.163181,1.209972,0.462438, 0.12742,0.021045,0.991626,2.815366,1.377583,0.413399, 0.206882,-0.117024,0.971342,2.854291,1.093951,0.49465, 0.552633,-0.484765,0.677938,3.189664,0.907503,0.500122, 0.506924,-0.406124,0.760323,3.163181,1.209972,0.462438, 0.206882,-0.117024,0.971342,2.854291,1.093951,0.49465, 0.552633,-0.484765,0.677938,3.189664,0.907503,0.500122, 0.206882,-0.117024,0.971342,2.854291,1.093951,0.49465, 0.218538,-0.213954,0.952084,2.948387,0.783357,0.515058, 0.696414,-0.392791,0.600602,3.280681,0.510802,0.499434, 0.552633,-0.484765,0.677938,3.189664,0.907503,0.500122, 0.218538,-0.213954,0.952084,2.948387,0.783357,0.515058, 0.696414,-0.392791,0.600602,3.280681,0.510802,0.499434, 0.218538,-0.213954,0.952084,2.948387,0.783357,0.515058, 0.304965,-0.136677,0.942505,3.06109,0.397226,0.574193, 0.026499,0.942993,0.331757,3.321825,0.26669,0.46575, 0.696414,-0.392791,0.600602,3.280681,0.510802,0.499434, 0.304965,-0.136677,0.942505,3.06109,0.397226,0.574193, 0.026499,0.942993,0.331757,3.321825,0.26669,0.46575, 0.304965,-0.136677,0.942505,3.06109,0.397226,0.574193, -0.061264,0.921927,0.382487,3.136321,0.171237,0.539896, 0.019336,0.837694,0.545798,3.36004,0.165487,0.412685, 0.026499,0.942993,0.331757,3.321825,0.26669,0.46575, -0.061264,0.921927,0.382487,3.136321,0.171237,0.539896, 0.019336,0.837694,0.545798,3.36004,0.165487,0.412685, -0.061264,0.921927,0.382487,3.136321,0.171237,0.539896, -0.070642,0.834207,0.546908,3.16616,0.02131,0.457261, 0.05298,0.780732,0.622615,3.378799,0.073736,0.355362, 0.019336,0.837694,0.545798,3.36004,0.165487,0.412685, -0.070642,0.834207,0.546908,3.16616,0.02131,0.457261, 0.05298,0.780732,0.622615,3.378799,0.073736,0.355362, -0.070642,0.834207,0.546908,3.16616,0.02131,0.457261, -0.055544,0.828008,0.557959,3.199571,-0.153739,0.38015, 0.115383,0.694945,0.709746,3.43895,-0.08258,0.257015, 0.05298,0.780732,0.622615,3.378799,0.073736,0.355362, -0.055544,0.828008,0.557959,3.199571,-0.153739,0.38015, 0.115383,0.694945,0.709746,3.43895,-0.08258,0.257015, -0.055544,0.828008,0.557959,3.199571,-0.153739,0.38015, -0.047374,0.758242,0.65025,3.286426,-0.300744,0.276331, 0.146937,0.551946,0.820832,3.514981,-0.121886,0.187589, 0.115383,0.694945,0.709746,3.43895,-0.08258,0.257015, -0.047374,0.758242,0.65025,3.286426,-0.300744,0.276331, 0.146937,0.551946,0.820832,3.514981,-0.121886,0.187589, -0.047374,0.758242,0.65025,3.286426,-0.300744,0.276331, -0.046579,0.627301,0.777383,3.342159,-0.384674,0.201349, 0.387987,0.466053,0.795148,3.737014,0.181837,0.176819, -0.910859,-0.100368,-0.400327,3.731689,0.186391,0, 0.338485,-0.103202,-0.935295,3.929251,0.411689,0, 0.387987,0.466053,0.795148,3.737014,0.181837,0.176819, 0.338485,-0.103202,-0.935295,3.929251,0.411689,0, 0.614456,0.489786,0.618509,3.955635,0.432417,0.197586, 0.387394,0.516219,0.763835,3.700363,0.265794,0.240762, 0.387987,0.466053,0.795148,3.737014,0.181837,0.176819, 0.614456,0.489786,0.618509,3.955635,0.432417,0.197586, 0.387394,0.516219,0.763835,3.700363,0.265794,0.240762, 0.614456,0.489786,0.618509,3.955635,0.432417,0.197586, 0.718673,-0.290446,0.631784,3.889626,0.475277,0.247365, 0.328244,0.603535,0.726637,3.67471,0.338839,0.30784, 0.387394,0.516219,0.763835,3.700363,0.265794,0.240762, 0.718673,-0.290446,0.631784,3.889626,0.475277,0.247365, 0.328244,0.603535,0.726637,3.67471,0.338839,0.30784, 0.718673,-0.290446,0.631784,3.889626,0.475277,0.247365, 0.815771,-0.424495,0.392838,3.861841,0.560638,0.311961, 0.187432,0.691784,0.697355,3.641195,0.407454,0.362198, 0.328244,0.603535,0.726637,3.67471,0.338839,0.30784, 0.815771,-0.424495,0.392838,3.861841,0.560638,0.311961, 0.065855,0.814333,0.576649,3.61965,0.472046,0.391742, 0.187432,0.691784,0.697355,3.641195,0.407454,0.362198, 0.815771,-0.424495,0.392838,3.861841,0.560638,0.311961, 0.065855,0.814333,0.576649,3.61965,0.472046,0.391742, 0.815771,-0.424495,0.392838,3.861841,0.560638,0.311961, 0.900366,-0.205985,0.38329,3.849352,0.664451,0.387198, 0.628361,-0.426126,0.65083,3.559394,0.706516,0.452535, 0.065855,0.814333,0.576649,3.61965,0.472046,0.391742, 0.900366,-0.205985,0.38329,3.849352,0.664451,0.387198, 0.628361,-0.426126,0.65083,3.559394,0.706516,0.452535, 0.900366,-0.205985,0.38329,3.849352,0.664451,0.387198, 0.906617,-0.14387,0.39667,3.823137,0.853054,0.461519, 0.697438,-0.478568,0.533435,3.528445,1.060127,0.489443, 0.628361,-0.426126,0.65083,3.559394,0.706516,0.452535, 0.906617,-0.14387,0.39667,3.823137,0.853054,0.461519, 0.697438,-0.478568,0.533435,3.528445,1.060127,0.489443, 0.906617,-0.14387,0.39667,3.823137,0.853054,0.461519, 0.908163,-0.140074,0.394486,3.747724,1.184933,0.518662, 0.772313,-0.244122,0.586461,3.47341,1.366149,0.454658, 0.697438,-0.478568,0.533435,3.528445,1.060127,0.489443, 0.908163,-0.140074,0.394486,3.747724,1.184933,0.518662, 0.772313,-0.244122,0.586461,3.47341,1.366149,0.454658, 0.908163,-0.140074,0.394486,3.747724,1.184933,0.518662, 0.907314,0.09913,0.4086,3.650974,1.46374,0.478617, 0.805898,-0.146097,0.573745,3.377233,1.5878,0.400781, 0.772313,-0.244122,0.586461,3.47341,1.366149,0.454658, 0.907314,0.09913,0.4086,3.650974,1.46374,0.478617, 0.805898,-0.146097,0.573745,3.377233,1.5878,0.400781, 0.907314,0.09913,0.4086,3.650974,1.46374,0.478617, 0.85208,0.278905,0.442914,3.590526,1.70109,0.411994, 0.795625,-0.129968,0.591684,3.337545,1.748927,0.34021, 0.805898,-0.146097,0.573745,3.377233,1.5878,0.400781, 0.85208,0.278905,0.442914,3.590526,1.70109,0.411994, 0.795625,-0.129968,0.591684,3.337545,1.748927,0.34021, 0.85208,0.278905,0.442914,3.590526,1.70109,0.411994, 0.759315,0.386803,0.523282,3.541188,1.849183,0.386366, 0.748939,0.152982,0.644738,3.276333,1.863773,0.294266, 0.795625,-0.129968,0.591684,3.337545,1.748927,0.34021, 0.759315,0.386803,0.523282,3.541188,1.849183,0.386366, 0.748939,0.152982,0.644738,3.276333,1.863773,0.294266, 0.759315,0.386803,0.523282,3.541188,1.849183,0.386366, 0.636794,0.461927,0.617346,3.479418,1.97825,0.317478, 0.693381,0.351142,0.629224,3.252224,2.026347,0.148215, 0.748939,0.152982,0.644738,3.276333,1.863773,0.294266, 0.636794,0.461927,0.617346,3.479418,1.97825,0.317478, 0.693381,0.351142,0.629224,3.252224,2.026347,0.148215, 0.636794,0.461927,0.617346,3.479418,1.97825,0.317478, 0.722145,-0.312679,0.617041,3.460196,2.103494,0.180368, 0.662294,0.443714,0.603726,3.233975,2.059193,0.072431, 0.693381,0.351142,0.629224,3.252224,2.026347,0.148215, 0.722145,-0.312679,0.617041,3.460196,2.103494,0.180368, 0.662294,0.443714,0.603726,3.233975,2.059193,0.072431, 0.722145,-0.312679,0.617041,3.460196,2.103494,0.180368, 0.742962,-0.255405,0.618688,3.4583,2.151656,0.102662, 0.720876,-0.356662,0.594247,2.953029,-0.12769,0.520499, 0.100131,0.509748,0.854477,2.835437,-0.231101,0.57789, 0.709718,-0.453837,0.538824,2.986408,-0.413503,0.428964, -0.096144,-0.182414,0.97851,2.811504,0.469098,0.657443, -0.012663,0.029084,0.999497,2.747937,0.712253,0.615674, 0.324748,-0.466051,0.823004,2.679445,0.687427,0.720573, -0.096144,-0.182414,0.97851,2.811504,0.469098,0.657443, 0.324748,-0.466051,0.823004,2.679445,0.687427,0.720573, 0.727708,-0.453484,0.514581,2.753156,0.400829,0.713141, -0.200187,-0.124247,0.971848,2.898733,0.271916,0.651298, -0.096144,-0.182414,0.97851,2.811504,0.469098,0.657443, 0.727708,-0.453484,0.514581,2.753156,0.400829,0.713141, -0.200187,-0.124247,0.971848,2.898733,0.271916,0.651298, 0.727708,-0.453484,0.514581,2.753156,0.400829,0.713141, 0.287759,-0.574148,0.766517,2.790681,0.219187,0.718263, 0.023112,-0.187685,0.981957,2.91987,0.084875,0.64246, -0.200187,-0.124247,0.971848,2.898733,0.271916,0.651298, 0.287759,-0.574148,0.766517,2.790681,0.219187,0.718263, 0.023112,-0.187685,0.981957,2.91987,0.084875,0.64246, 0.287759,-0.574148,0.766517,2.790681,0.219187,0.718263, 0.677632,-0.514013,0.525933,2.790657,0.044324,0.717488, 0.290845,-0.568581,0.769497,2.743995,-0.129852,0.718277, 0.478274,-0.500384,0.721713,2.736198,-0.346225,0.659345, 0.100131,0.509748,0.854477,2.835437,-0.231101,0.57789, 0.100131,0.509748,0.854477,2.835437,-0.231101,0.57789, 0.720876,-0.356662,0.594247,2.953029,-0.12769,0.520499, 0.023112,-0.187685,0.981957,2.91987,0.084875,0.64246, 0.100131,0.509748,0.854477,2.835437,-0.231101,0.57789, 0.023112,-0.187685,0.981957,2.91987,0.084875,0.64246, 0.290845,-0.568581,0.769497,2.743995,-0.129852,0.718277, 0.023112,-0.187685,0.981957,2.91987,0.084875,0.64246, 0.677632,-0.514013,0.525933,2.790657,0.044324,0.717488, 0.290845,-0.568581,0.769497,2.743995,-0.129852,0.718277, 0.370396,-0.36596,0.853745,2.396355,1.242239,0.597722, 0.437631,-0.408484,0.801012,2.482917,0.997637,0.702425, 0.539192,-0.226204,0.811236,2.514162,0.988713,0.674527, 0.876436,-0.293555,0.381688,2.543372,-0.548031,0.937182, 0.728904,-0.519577,0.445802,2.410367,-0.777999,0.841105, 0.518786,-0.204527,0.830078,2.5392,-0.727778,0.750475, 0.876436,-0.293555,0.381688,2.543372,-0.548031,0.937182, 0.518786,-0.204527,0.830078,2.5392,-0.727778,0.750475, 0.58512,-0.108234,0.803692,2.618307,-0.549092,0.805491, 0.918784,-0.122699,0.375208,2.594499,-0.422948,0.981263, 0.876436,-0.293555,0.381688,2.543372,-0.548031,0.937182, 0.58512,-0.108234,0.803692,2.618307,-0.549092,0.805491, 0.918784,-0.122699,0.375208,2.594499,-0.422948,0.981263, 0.58512,-0.108234,0.803692,2.618307,-0.549092,0.805491, 0.648132,-0.027411,0.761034,2.690576,-0.368057,0.819343, 0.883063,-0.251635,0.396079,2.60743,-0.208248,0.974218, 0.918784,-0.122699,0.375208,2.594499,-0.422948,0.981263, 0.648132,-0.027411,0.761034,2.690576,-0.368057,0.819343, 0.883063,-0.251635,0.396079,2.60743,-0.208248,0.974218, 0.648132,-0.027411,0.761034,2.690576,-0.368057,0.819343, 0.594643,-0.107364,0.796789,2.702577,-0.197406,0.795611, 0.690473,-0.61586,0.379425,2.649413,0.031535,1.024796, 0.883063,-0.251635,0.396079,2.60743,-0.208248,0.974218, 0.594643,-0.107364,0.796789,2.702577,-0.197406,0.795611, 0.690473,-0.61586,0.379425,2.649413,0.031535,1.024796, 0.594643,-0.107364,0.796789,2.702577,-0.197406,0.795611, 0.655995,-0.105886,0.747301,2.734183,0.038769,0.86581, 0.276661,-0.626708,0.728489,2.668936,0.206182,1.014371, 0.690473,-0.61586,0.379425,2.649413,0.031535,1.024796, 0.655995,-0.105886,0.747301,2.734183,0.038769,0.86581, 0.276661,-0.626708,0.728489,2.668936,0.206182,1.014371, 0.655995,-0.105886,0.747301,2.734183,0.038769,0.86581, 0.675576,-0.202498,0.708937,2.731512,0.219003,0.891585, 0.112446,-0.618661,0.77757,2.616001,0.447717,0.960748, 0.276661,-0.626708,0.728489,2.668936,0.206182,1.014371, 0.675576,-0.202498,0.708937,2.731512,0.219003,0.891585, 0.112446,-0.618661,0.77757,2.616001,0.447717,0.960748, 0.675576,-0.202498,0.708937,2.731512,0.219003,0.891585, 0.663699,-0.195183,0.722085,2.70696,0.393597,0.849582, 0.189478,-0.558571,0.807525,2.5704,0.738683,0.830405, 0.112446,-0.618661,0.77757,2.616001,0.447717,0.960748, 0.663699,-0.195183,0.722085,2.70696,0.393597,0.849582, 0.189478,-0.558571,0.807525,2.5704,0.738683,0.830405, 0.663699,-0.195183,0.722085,2.70696,0.393597,0.849582, 0.543412,-0.359347,0.758665,2.604217,0.728827,0.769671, 0.437631,-0.408484,0.801012,2.482917,0.997637,0.702425, 0.189478,-0.558571,0.807525,2.5704,0.738683,0.830405, 0.543412,-0.359347,0.758665,2.604217,0.728827,0.769671, 0.437631,-0.408484,0.801012,2.482917,0.997637,0.702425, 0.543412,-0.359347,0.758665,2.604217,0.728827,0.769671, 0.539192,-0.226204,0.811236,2.514162,0.988713,0.674527, 0.245892,-0.489895,0.836385,2.688131,-0.517509,0.672975, 0.478274,-0.500384,0.721713,2.736198,-0.346225,0.659345, 0.648132,-0.027411,0.761034,2.690576,-0.368057,0.819343, 0.245892,-0.489895,0.836385,2.688131,-0.517509,0.672975, 0.648132,-0.027411,0.761034,2.690576,-0.368057,0.819343, 0.58512,-0.108234,0.803692,2.618307,-0.549092,0.805491, 0.727678,-0.414895,0.546211,2.542439,0.999928,0.648592, 0.370396,-0.36596,0.853745,2.396355,1.242239,0.597722, 0.539192,-0.226204,0.811236,2.514162,0.988713,0.674527, 0.324748,-0.466051,0.823004,2.679445,0.687427,0.720573, 0.727678,-0.414895,0.546211,2.542439,0.999928,0.648592, 0.539192,-0.226204,0.811236,2.514162,0.988713,0.674527, 0.324748,-0.466051,0.823004,2.679445,0.687427,0.720573, 0.539192,-0.226204,0.811236,2.514162,0.988713,0.674527, 0.543412,-0.359347,0.758665,2.604217,0.728827,0.769671, 0.727708,-0.453484,0.514581,2.753156,0.400829,0.713141, 0.324748,-0.466051,0.823004,2.679445,0.687427,0.720573, 0.543412,-0.359347,0.758665,2.604217,0.728827,0.769671, 0.727708,-0.453484,0.514581,2.753156,0.400829,0.713141, 0.543412,-0.359347,0.758665,2.604217,0.728827,0.769671, 0.663699,-0.195183,0.722085,2.70696,0.393597,0.849582, 0.287759,-0.574148,0.766517,2.790681,0.219187,0.718263, 0.727708,-0.453484,0.514581,2.753156,0.400829,0.713141, 0.663699,-0.195183,0.722085,2.70696,0.393597,0.849582, 0.287759,-0.574148,0.766517,2.790681,0.219187,0.718263, 0.663699,-0.195183,0.722085,2.70696,0.393597,0.849582, 0.675576,-0.202498,0.708937,2.731512,0.219003,0.891585, 0.677632,-0.514013,0.525933,2.790657,0.044324,0.717488, 0.287759,-0.574148,0.766517,2.790681,0.219187,0.718263, 0.675576,-0.202498,0.708937,2.731512,0.219003,0.891585, 0.677632,-0.514013,0.525933,2.790657,0.044324,0.717488, 0.675576,-0.202498,0.708937,2.731512,0.219003,0.891585, 0.655995,-0.105886,0.747301,2.734183,0.038769,0.86581, 0.290845,-0.568581,0.769497,2.743995,-0.129852,0.718277, 0.677632,-0.514013,0.525933,2.790657,0.044324,0.717488, 0.655995,-0.105886,0.747301,2.734183,0.038769,0.86581, 0.290845,-0.568581,0.769497,2.743995,-0.129852,0.718277, 0.655995,-0.105886,0.747301,2.734183,0.038769,0.86581, 0.594643,-0.107364,0.796789,2.702577,-0.197406,0.795611, 0.478274,-0.500384,0.721713,2.736198,-0.346225,0.659345, 0.290845,-0.568581,0.769497,2.743995,-0.129852,0.718277, 0.594643,-0.107364,0.796789,2.702577,-0.197406,0.795611, 0.478274,-0.500384,0.721713,2.736198,-0.346225,0.659345, 0.594643,-0.107364,0.796789,2.702577,-0.197406,0.795611, 0.648132,-0.027411,0.761034,2.690576,-0.368057,0.819343, -0.012663,0.029084,0.999497,2.747937,0.712253,0.615674, -0.031021,0.098798,0.994624,2.637461,1.01726,0.581611, 0.727678,-0.414895,0.546211,2.542439,0.999928,0.648592, -0.012663,0.029084,0.999497,2.747937,0.712253,0.615674, 0.727678,-0.414895,0.546211,2.542439,0.999928,0.648592, 0.324748,-0.466051,0.823004,2.679445,0.687427,0.720573, -0.05128,0.509983,0.858655,2.361089,1.76666,0.202595, 0.536218,-0.84408,0.000006,2.339597,1.807702,0, 0.756976,-0.653442,0,2.128139,1.788397,0, -0.05128,0.509983,0.858655,2.361089,1.76666,0.202595, 0.756976,-0.653442,0,2.128139,1.788397,0, 0.70745,-0.193334,0.679806,2.13239,1.755821,0.180271, -0.02226,0.394285,0.918719,2.406969,1.645328,0.341479, -0.05128,0.509983,0.858655,2.361089,1.76666,0.202595, 0.70745,-0.193334,0.679806,2.13239,1.755821,0.180271, -0.02226,0.394285,0.918719,2.406969,1.645328,0.341479, 0.70745,-0.193334,0.679806,2.13239,1.755821,0.180271, 0.71475,-0.118625,0.689247,2.183003,1.65407,0.341767, -0.026262,0.311275,0.949957,2.519027,1.485931,0.422962, -0.02226,0.394285,0.918719,2.406969,1.645328,0.341479, 0.71475,-0.118625,0.689247,2.183003,1.65407,0.341767, -0.026262,0.311275,0.949957,2.519027,1.485931,0.422962, 0.71475,-0.118625,0.689247,2.183003,1.65407,0.341767, 0.608407,-0.244593,0.754993,2.301359,1.397721,0.546015, -0.039079,0.203923,0.978207,2.553871,1.284278,0.512335, -0.026262,0.311275,0.949957,2.519027,1.485931,0.422962, 0.608407,-0.244593,0.754993,2.301359,1.397721,0.546015, -0.039079,0.203923,0.978207,2.553871,1.284278,0.512335, 0.608407,-0.244593,0.754993,2.301359,1.397721,0.546015, 0.370396,-0.36596,0.853745,2.396355,1.242239,0.597722, -0.031021,0.098798,0.994624,2.637461,1.01726,0.581611, -0.039079,0.203923,0.978207,2.553871,1.284278,0.512335, 0.370396,-0.36596,0.853745,2.396355,1.242239,0.597722, -0.031021,0.098798,0.994624,2.637461,1.01726,0.581611, 0.370396,-0.36596,0.853745,2.396355,1.242239,0.597722, 0.727678,-0.414895,0.546211,2.542439,0.999928,0.648592, 0.728904,-0.519577,0.445802,2.410367,-0.777999,0.841105, -0.06371,0.842533,0.534864,2.346081,-0.74535,1.013296, -0.069142,0.724976,0.685295,2.245624,-0.864372,0.995778, 0.728904,-0.519577,0.445802,2.410367,-0.777999,0.841105, -0.069142,0.724976,0.685295,2.245624,-0.864372,0.995778, 0.09853,0.626571,0.773111,2.292449,-0.871852,0.8824, 0.71475,-0.118625,0.689247,2.183003,1.65407,0.341767, 0.70745,-0.193334,0.679806,2.13239,1.755821,0.180271, 0.411872,0.04507,0.910127,2.069379,1.727818,0.212746, 0.71475,-0.118625,0.689247,2.183003,1.65407,0.341767, 0.411872,0.04507,0.910127,2.069379,1.727818,0.212746, 0.552828,-0.750794,0.36151,2.096552,1.678482,0.32681, 0.608407,-0.244593,0.754993,2.301359,1.397721,0.546015, 0.71475,-0.118625,0.689247,2.183003,1.65407,0.341767, 0.552828,-0.750794,0.36151,2.096552,1.678482,0.32681, 0.608407,-0.244593,0.754993,2.301359,1.397721,0.546015, 0.552828,-0.750794,0.36151,2.096552,1.678482,0.32681, 0.226413,-0.89822,0.376747,2.189848,1.468992,0.517501, 0.370396,-0.36596,0.853745,2.396355,1.242239,0.597722, 0.608407,-0.244593,0.754993,2.301359,1.397721,0.546015, 0.226413,-0.89822,0.376747,2.189848,1.468992,0.517501, 0.370396,-0.36596,0.853745,2.396355,1.242239,0.597722, 0.226413,-0.89822,0.376747,2.189848,1.468992,0.517501, 0.016767,-0.927537,0.373356,2.266003,1.273253,0.663332, 0.437631,-0.408484,0.801012,2.482917,0.997637,0.702425, 0.370396,-0.36596,0.853745,2.396355,1.242239,0.597722, 0.016767,-0.927537,0.373356,2.266003,1.273253,0.663332, 0.437631,-0.408484,0.801012,2.482917,0.997637,0.702425, 0.016767,-0.927537,0.373356,2.266003,1.273253,0.663332, 0.08136,-0.929085,0.360806,2.347317,1.066114,0.758763, 0.189478,-0.558571,0.807525,2.5704,0.738683,0.830405, 0.437631,-0.408484,0.801012,2.482917,0.997637,0.702425, 0.08136,-0.929085,0.360806,2.347317,1.066114,0.758763, 0.189478,-0.558571,0.807525,2.5704,0.738683,0.830405, 0.08136,-0.929085,0.360806,2.347317,1.066114,0.758763, 0.295093,-0.940225,0.16999,2.399389,0.782091,0.915279, 0.112446,-0.618661,0.77757,2.616001,0.447717,0.960748, 0.189478,-0.558571,0.807525,2.5704,0.738683,0.830405, 0.295093,-0.940225,0.16999,2.399389,0.782091,0.915279, 0.112446,-0.618661,0.77757,2.616001,0.447717,0.960748, 0.295093,-0.940225,0.16999,2.399389,0.782091,0.915279, 0.676544,-0.141883,0.722604,2.448969,0.529858,1.037335, 0.276661,-0.626708,0.728489,2.668936,0.206182,1.014371, 0.112446,-0.618661,0.77757,2.616001,0.447717,0.960748, 0.676544,-0.141883,0.722604,2.448969,0.529858,1.037335, 0.276661,-0.626708,0.728489,2.668936,0.206182,1.014371, 0.676544,-0.141883,0.722604,2.448969,0.529858,1.037335, 0.667276,-0.159228,0.727591,2.495354,0.250522,1.132081, 0.690473,-0.61586,0.379425,2.649413,0.031535,1.024796, 0.276661,-0.626708,0.728489,2.668936,0.206182,1.014371, 0.667276,-0.159228,0.727591,2.495354,0.250522,1.132081, 0.690473,-0.61586,0.379425,2.649413,0.031535,1.024796, 0.667276,-0.159228,0.727591,2.495354,0.250522,1.132081, 0.659349,-0.248914,0.709437,2.50049,-0.035029,1.170179, 0.883063,-0.251635,0.396079,2.60743,-0.208248,0.974218, 0.690473,-0.61586,0.379425,2.649413,0.031535,1.024796, 0.659349,-0.248914,0.709437,2.50049,-0.035029,1.170179, 0.883063,-0.251635,0.396079,2.60743,-0.208248,0.974218, 0.659349,-0.248914,0.709437,2.50049,-0.035029,1.170179, 0.631747,-0.24686,0.734817,2.452588,-0.244072,1.138797, 0.918784,-0.122699,0.375208,2.594499,-0.422948,0.981263, 0.883063,-0.251635,0.396079,2.60743,-0.208248,0.974218, 0.631747,-0.24686,0.734817,2.452588,-0.244072,1.138797, 0.918784,-0.122699,0.375208,2.594499,-0.422948,0.981263, 0.631747,-0.24686,0.734817,2.452588,-0.244072,1.138797, 0.623235,-0.257987,0.738255,2.439827,-0.395385,1.131324, 0.876436,-0.293555,0.381688,2.543372,-0.548031,0.937182, 0.918784,-0.122699,0.375208,2.594499,-0.422948,0.981263, 0.623235,-0.257987,0.738255,2.439827,-0.395385,1.131324, 0.876436,-0.293555,0.381688,2.543372,-0.548031,0.937182, 0.623235,-0.257987,0.738255,2.439827,-0.395385,1.131324, 0.791391,-0.43807,0.426373,2.384638,-0.591919,1.043058, 0.728904,-0.519577,0.445802,2.410367,-0.777999,0.841105, 0.876436,-0.293555,0.381688,2.543372,-0.548031,0.937182, 0.791391,-0.43807,0.426373,2.384638,-0.591919,1.043058, 0.728904,-0.519577,0.445802,2.410367,-0.777999,0.841105, 0.791391,-0.43807,0.426373,2.384638,-0.591919,1.043058, -0.06371,0.842533,0.534864,2.346081,-0.74535,1.013296, -0.069142,0.724976,0.685295,2.245624,-0.864372,0.995778, -0.887036,-0.210048,-0.411154,2.222082,-0.957342,1.014137, 0.080812,0.697931,0.711591,2.229345,-0.992723,0.862826, -0.069142,0.724976,0.685295,2.245624,-0.864372,0.995778, 0.080812,0.697931,0.711591,2.229345,-0.992723,0.862826, 0.09853,0.626571,0.773111,2.292449,-0.871852,0.8824, 0.213167,-0.525559,0.823619,2.013534,-0.662303,1.191491, -0.069142,0.724976,0.685295,2.245624,-0.864372,0.995778, -0.06371,0.842533,0.534864,2.346081,-0.74535,1.013296, 0.23972,-0.400363,0.884445,2.108912,-0.357128,1.259691, 0.213167,-0.525559,0.823619,2.013534,-0.662303,1.191491, -0.06371,0.842533,0.534864,2.346081,-0.74535,1.013296, 0.23972,-0.400363,0.884445,2.108912,-0.357128,1.259691, -0.06371,0.842533,0.534864,2.346081,-0.74535,1.013296, 0.791391,-0.43807,0.426373,2.384638,-0.591919,1.043058, -0.720176,-0.693792,0,1.794465,1.787719,0, -0.057955,0.638634,0.767325,1.807583,1.756546,0.177627, 0.411872,0.04507,0.910127,2.069379,1.727818,0.212746, -0.720176,-0.693792,0,1.794465,1.787719,0, 0.411872,0.04507,0.910127,2.069379,1.727818,0.212746, -0.385788,0.922588,0,2.042206,1.777154,0, 0.25339,-0.287519,0.923648,2.136269,-0.187666,1.278057, 0.23972,-0.400363,0.884445,2.108912,-0.357128,1.259691, 0.791391,-0.43807,0.426373,2.384638,-0.591919,1.043058, 0.25339,-0.287519,0.923648,2.136269,-0.187666,1.278057, 0.791391,-0.43807,0.426373,2.384638,-0.591919,1.043058, 0.623235,-0.257987,0.738255,2.439827,-0.395385,1.131324, 0.25339,-0.287519,0.923648,2.136269,-0.187666,1.278057, 0.623235,-0.257987,0.738255,2.439827,-0.395385,1.131324, 0.631747,-0.24686,0.734817,2.452588,-0.244072,1.138797, 0.187438,-0.340915,0.921219,2.14179,-0.055306,1.295565, 0.25339,-0.287519,0.923648,2.136269,-0.187666,1.278057, 0.631747,-0.24686,0.734817,2.452588,-0.244072,1.138797, 0.187438,-0.340915,0.921219,2.14179,-0.055306,1.295565, 0.631747,-0.24686,0.734817,2.452588,-0.244072,1.138797, 0.659349,-0.248914,0.709437,2.50049,-0.035029,1.170179, 0.114032,-0.218132,0.969234,2.0817,0.283249,1.259461, 0.187438,-0.340915,0.921219,2.14179,-0.055306,1.295565, 0.659349,-0.248914,0.709437,2.50049,-0.035029,1.170179, 0.114032,-0.218132,0.969234,2.0817,0.283249,1.259461, 0.659349,-0.248914,0.709437,2.50049,-0.035029,1.170179, 0.667276,-0.159228,0.727591,2.495354,0.250522,1.132081, 0.10833,0.05569,0.992554,2.023441,0.529338,1.144399, 0.114032,-0.218132,0.969234,2.0817,0.283249,1.259461, 0.667276,-0.159228,0.727591,2.495354,0.250522,1.132081, 0.10833,0.05569,0.992554,2.023441,0.529338,1.144399, 0.667276,-0.159228,0.727591,2.495354,0.250522,1.132081, 0.676544,-0.141883,0.722604,2.448969,0.529858,1.037335, 0.107989,0.168108,0.979836,1.975941,0.827957,1.018423, 0.10833,0.05569,0.992554,2.023441,0.529338,1.144399, 0.676544,-0.141883,0.722604,2.448969,0.529858,1.037335, 0.107989,0.168108,0.979836,1.975941,0.827957,1.018423, 0.676544,-0.141883,0.722604,2.448969,0.529858,1.037335, 0.295093,-0.940225,0.16999,2.399389,0.782091,0.915279, 0.088722,0.251367,0.963817,1.958254,1.130271,0.861813, 0.107989,0.168108,0.979836,1.975941,0.827957,1.018423, 0.295093,-0.940225,0.16999,2.399389,0.782091,0.915279, 0.088722,0.251367,0.963817,1.958254,1.130271,0.861813, 0.295093,-0.940225,0.16999,2.399389,0.782091,0.915279, 0.08136,-0.929085,0.360806,2.347317,1.066114,0.758763, 0.060533,0.377837,0.923891,1.859443,1.450393,0.632222, 0.088722,0.251367,0.963817,1.958254,1.130271,0.861813, 0.08136,-0.929085,0.360806,2.347317,1.066114,0.758763, 0.060533,0.377837,0.923891,1.859443,1.450393,0.632222, 0.08136,-0.929085,0.360806,2.347317,1.066114,0.758763, 0.016767,-0.927537,0.373356,2.266003,1.273253,0.663332, 0.016737,0.497476,0.867316,1.821946,1.618209,0.403751, 0.060533,0.377837,0.923891,1.859443,1.450393,0.632222, 0.016767,-0.927537,0.373356,2.266003,1.273253,0.663332, 0.016737,0.497476,0.867316,1.821946,1.618209,0.403751, 0.016767,-0.927537,0.373356,2.266003,1.273253,0.663332, 0.226413,-0.89822,0.376747,2.189848,1.468992,0.517501, -0.024013,0.58573,0.810151,1.798719,1.714447,0.259352, 0.016737,0.497476,0.867316,1.821946,1.618209,0.403751, 0.226413,-0.89822,0.376747,2.189848,1.468992,0.517501, -0.024013,0.58573,0.810151,1.798719,1.714447,0.259352, 0.226413,-0.89822,0.376747,2.189848,1.468992,0.517501, 0.552828,-0.750794,0.36151,2.096552,1.678482,0.32681, -0.057955,0.638634,0.767325,1.807583,1.756546,0.177627, -0.024013,0.58573,0.810151,1.798719,1.714447,0.259352, 0.552828,-0.750794,0.36151,2.096552,1.678482,0.32681, -0.057955,0.638634,0.767325,1.807583,1.756546,0.177627, 0.552828,-0.750794,0.36151,2.096552,1.678482,0.32681, 0.411872,0.04507,0.910127,2.069379,1.727818,0.212746, 0.981421,-0.191868,0,0.733818,1.740873,0, 0.566114,-0.824327,0,0.234527,1.730117,0, 0.095331,0.952335,0.289775,0.223642,1.684075,0.160743, 0.981421,-0.191868,0,0.733818,1.740873,0, 0.095331,0.952335,0.289775,0.223642,1.684075,0.160743, 0.100949,-0.548551,0.830001,0.737904,1.604213,0.281713, 0.100949,-0.548551,0.830001,0.737904,1.604213,0.281713, 0.095331,0.952335,0.289775,0.223642,1.684075,0.160743, 0.10291,0.954344,0.280422,0.23733,1.595746,0.288672, 0.100949,-0.548551,0.830001,0.737904,1.604213,0.281713, 0.10291,0.954344,0.280422,0.23733,1.595746,0.288672, 0.068777,-0.757383,0.649339,0.725959,1.478055,0.461804, 0.068777,-0.757383,0.649339,0.725959,1.478055,0.461804, 0.10291,0.954344,0.280422,0.23733,1.595746,0.288672, 0.172251,0.950689,0.257916,0.289039,1.496446,0.430055, 0.068777,-0.757383,0.649339,0.725959,1.478055,0.461804, 0.172251,0.950689,0.257916,0.289039,1.496446,0.430055, 0.023352,-0.872807,0.487506,0.760722,1.205036,0.700545, 0.023352,-0.872807,0.487506,0.760722,1.205036,0.700545, 0.172251,0.950689,0.257916,0.289039,1.496446,0.430055, 0.28101,0.853935,0.437982,0.305671,1.298417,0.629719, 0.023352,-0.872807,0.487506,0.760722,1.205036,0.700545, 0.28101,0.853935,0.437982,0.305671,1.298417,0.629719, 0.004725,-0.680391,0.732834,0.857323,0.985001,0.874029, 0.004725,-0.680391,0.732834,0.857323,0.985001,0.874029, 0.28101,0.853935,0.437982,0.305671,1.298417,0.629719, 0.381239,0.555717,0.738807,0.243473,1.134082,0.819993, 0.004725,-0.680391,0.732834,0.857323,0.985001,0.874029, 0.381239,0.555717,0.738807,0.243473,1.134082,0.819993, 0.034172,-0.858604,0.511498,0.921312,0.755659,0.99933, 0.034172,-0.858604,0.511498,0.921312,0.755659,0.99933, 0.381239,0.555717,0.738807,0.243473,1.134082,0.819993, 0.376012,0.360026,0.853813,0.316341,0.785311,1.08626, 0.034172,-0.858604,0.511498,0.921312,0.755659,0.99933, 0.376012,0.360026,0.853813,0.316341,0.785311,1.08626, 0.037423,-0.986705,0.158154,0.939271,0.379986,1.185872, 0.037423,-0.986705,0.158154,0.939271,0.379986,1.185872, 0.376012,0.360026,0.853813,0.316341,0.785311,1.08626, 0.207079,0.373404,0.904261,0.539252,0.353984,1.254493, 0.037423,-0.986705,0.158154,0.939271,0.379986,1.185872, 0.207079,0.373404,0.904261,0.539252,0.353984,1.254493, 0.013768,-0.992402,0.122267,0.927775,0.195225,1.233043, 0.013768,-0.992402,0.122267,0.927775,0.195225,1.233043, 0.207079,0.373404,0.904261,0.539252,0.353984,1.254493, -0.045242,0.348413,0.936249,0.53915,0.148262,1.321014, 0.013768,-0.992402,0.122267,0.927775,0.195225,1.233043, -0.045242,0.348413,0.936249,0.53915,0.148262,1.321014, 0.076524,0.950336,0.301672,0.950215,0.042751,1.256188, 0.076524,0.950336,0.301672,0.950215,0.042751,1.256188, -0.045242,0.348413,0.936249,0.53915,0.148262,1.321014, -0.212948,0.334057,0.918182,0.516872,-0.020713,1.356627, 0.076524,0.950336,0.301672,0.950215,0.042751,1.256188, -0.212948,0.334057,0.918182,0.516872,-0.020713,1.356627, 0.100598,0.942931,0.317428,0.943855,-0.101127,1.274771, 0.100598,0.942931,0.317428,0.943855,-0.101127,1.274771, -0.212948,0.334057,0.918182,0.516872,-0.020713,1.356627, -0.282152,0.285245,0.915983,0.542386,-0.188227,1.370375, 0.100598,0.942931,0.317428,0.943855,-0.101127,1.274771, -0.282152,0.285245,0.915983,0.542386,-0.188227,1.370375, 0.150328,0.92948,0.336851,0.960321,-0.308052,1.243133, 0.150328,0.92948,0.336851,0.960321,-0.308052,1.243133, -0.282152,0.285245,0.915983,0.542386,-0.188227,1.370375, -0.326048,0.118611,0.937883,0.546875,-0.39094,1.363244, 0.150328,0.92948,0.336851,0.960321,-0.308052,1.243133, -0.326048,0.118611,0.937883,0.546875,-0.39094,1.363244, 0.235667,0.756618,0.60991,0.97453,-0.525273,1.140353, 0.235667,0.756618,0.60991,0.97453,-0.525273,1.140353, -0.326048,0.118611,0.937883,0.546875,-0.39094,1.363244, -0.422758,-0.178302,0.888529,0.550658,-0.633015,1.331311, 0.235667,0.756618,0.60991,0.97453,-0.525273,1.140353, -0.422758,-0.178302,0.888529,0.550658,-0.633015,1.331311, 0.305452,0.425365,0.851918,0.948819,-0.638568,1.102958, 0.305452,0.425365,0.851918,0.948819,-0.638568,1.102958, -0.422758,-0.178302,0.888529,0.550658,-0.633015,1.331311, -0.504483,-0.438591,0.743731,0.527724,-0.862854,1.253811, 0.305452,0.425365,0.851918,0.948819,-0.638568,1.102958, -0.504483,-0.438591,0.743731,0.527724,-0.862854,1.253811, 0.325482,0.443544,0.835063,0.939974,-0.894739,1.019809, 0.325482,0.443544,0.835063,0.939974,-0.894739,1.019809, -0.504483,-0.438591,0.743731,0.527724,-0.862854,1.253811, -0.53858,-0.616298,0.57455,0.544825,-1.133123,1.096902, 0.325482,0.443544,0.835063,0.939974,-0.894739,1.019809, -0.53858,-0.616298,0.57455,0.544825,-1.133123,1.096902, 0.242426,0.58207,0.77616,0.956456,-1.070504,0.921063, 0.242426,0.58207,0.77616,0.956456,-1.070504,0.921063, -0.53858,-0.616298,0.57455,0.544825,-1.133123,1.096902, -0.507894,-0.767261,0.391606,0.530629,-1.316423,0.929842, 0.242426,0.58207,0.77616,0.956456,-1.070504,0.921063, -0.507894,-0.767261,0.391606,0.530629,-1.316423,0.929842, 0.070189,0.510248,0.857158,0.93066,-1.216516,0.831196, 0.070189,0.510248,0.857158,0.93066,-1.216516,0.831196, -0.507894,-0.767261,0.391606,0.530629,-1.316423,0.929842, -0.375453,-0.69207,0.616502,0.538756,-1.408602,0.764911, 0.070189,0.510248,0.857158,0.93066,-1.216516,0.831196, -0.375453,-0.69207,0.616502,0.538756,-1.408602,0.764911, -0.078623,0.370994,0.925301,0.922703,-1.296032,0.728307, -0.078623,0.370994,0.925301,0.922703,-1.296032,0.728307, -0.375453,-0.69207,0.616502,0.538756,-1.408602,0.764911, -0.1427,-0.847733,0.510868,0.489819,-1.524947,0.672392, -0.078623,0.370994,0.925301,0.922703,-1.296032,0.728307, -0.1427,-0.847733,0.510868,0.489819,-1.524947,0.672392, -0.123389,0.256577,0.958615,0.912699,-1.455066,0.576185, -0.123389,0.256577,0.958615,0.912699,-1.455066,0.576185, -0.1427,-0.847733,0.510868,0.489819,-1.524947,0.672392, -0.178511,-0.973481,0.143068,0.480235,-1.631521,0.401961, -0.123389,0.256577,0.958615,0.912699,-1.455066,0.576185, -0.178511,-0.973481,0.143068,0.480235,-1.631521,0.401961, -0.165685,0.059692,0.98437,0.912989,-1.499314,0.419547, -0.165685,0.059692,0.98437,0.912989,-1.499314,0.419547, -0.178511,-0.973481,0.143068,0.480235,-1.631521,0.401961, 0.226963,-0.973903,0,0.44655,-1.67295,0, -0.165685,0.059692,0.98437,0.912989,-1.499314,0.419547, 0.226963,-0.973903,0,0.44655,-1.67295,0, 0.92802,-0.37253,0,0.927497,-1.558489,0, -0.039092,-0.999236,0,-0.228904,1.734267,0, -0.009814,-0.999952,0,-0.547248,1.742126,0, -0.021294,0.896295,0.442946,-0.559706,1.69418,0.186107, -0.039092,-0.999236,0,-0.228904,1.734267,0, -0.021294,0.896295,0.442946,-0.559706,1.69418,0.186107, 0.067879,0.951186,0.30106,-0.221516,1.686349,0.151403, 0.067879,0.951186,0.30106,-0.221516,1.686349,0.151403, -0.021294,0.896295,0.442946,-0.559706,1.69418,0.186107, -0.072244,0.618144,0.782738,-0.557624,1.641278,0.271462, 0.067879,0.951186,0.30106,-0.221516,1.686349,0.151403, -0.072244,0.618144,0.782738,-0.557624,1.641278,0.271462, 0.085022,0.963119,0.255291,-0.267035,1.627058,0.266577, 0.085022,0.963119,0.255291,-0.267035,1.627058,0.266577, -0.072244,0.618144,0.782738,-0.557624,1.641278,0.271462, -0.038944,0.247819,0.968023,-0.626493,1.585426,0.443136, 0.085022,0.963119,0.255291,-0.267035,1.627058,0.266577, -0.038944,0.247819,0.968023,-0.626493,1.585426,0.443136, 0.120743,0.971588,0.203561,-0.247999,1.565146,0.389142, 0.120743,0.971588,0.203561,-0.247999,1.565146,0.389142, -0.038944,0.247819,0.968023,-0.626493,1.585426,0.443136, -0.00315,0.115338,0.993321,-0.597781,1.48962,0.641047, 0.120743,0.971588,0.203561,-0.247999,1.565146,0.389142, -0.00315,0.115338,0.993321,-0.597781,1.48962,0.641047, 0.117963,0.926753,0.356669,-0.179548,1.471301,0.544513, 0.117963,0.926753,0.356669,-0.179548,1.471301,0.544513, -0.00315,0.115338,0.993321,-0.597781,1.48962,0.641047, 0.016683,0.197618,0.980137,-0.674657,1.333008,0.761059, 0.117963,0.926753,0.356669,-0.179548,1.471301,0.544513, 0.016683,0.197618,0.980137,-0.674657,1.333008,0.761059, 0.109947,0.693426,0.71209,-0.192546,1.305535,0.70008, 0.109947,0.693426,0.71209,-0.192546,1.305535,0.70008, 0.016683,0.197618,0.980137,-0.674657,1.333008,0.761059, 0.032424,0.316591,0.948008,-0.910602,1.204118,0.83774, 0.109947,0.693426,0.71209,-0.192546,1.305535,0.70008, 0.032424,0.316591,0.948008,-0.910602,1.204118,0.83774, 0.076565,0.333251,0.939724,-0.406155,1.005088,0.971088, 0.076565,0.333251,0.939724,-0.406155,1.005088,0.971088, 0.032424,0.316591,0.948008,-0.910602,1.204118,0.83774, 0.053195,0.343167,0.937767,-0.969076,0.901205,1.146223, 0.076565,0.333251,0.939724,-0.406155,1.005088,0.971088, 0.053195,0.343167,0.937767,-0.969076,0.901205,1.146223, -0.039599,0.171847,0.984327,-0.11519,0.458427,1.346197, -0.039599,0.171847,0.984327,-0.11519,0.458427,1.346197, 0.053195,0.343167,0.937767,-0.969076,0.901205,1.146223, 0.057735,0.173734,0.983099,-0.752416,0.438132,1.467349, -0.039599,0.171847,0.984327,-0.11519,0.458427,1.346197, 0.057735,0.173734,0.983099,-0.752416,0.438132,1.467349, -0.164971,0.181757,0.969406,0.005537,0.163519,1.472265, -0.164971,0.181757,0.969406,0.005537,0.163519,1.472265, 0.057735,0.173734,0.983099,-0.752416,0.438132,1.467349, 0.058723,-0.195869,0.97887,-0.645496,0.179261,1.584316, -0.164971,0.181757,0.969406,0.005537,0.163519,1.472265, 0.058723,-0.195869,0.97887,-0.645496,0.179261,1.584316, -0.216817,0.278777,0.935561,0.018086,0.002865,1.523199, -0.216817,0.278777,0.935561,0.018086,0.002865,1.523199, 0.058723,-0.195869,0.97887,-0.645496,0.179261,1.584316, 0.088769,-0.475351,0.875307,-0.536767,-0.144454,1.682232, -0.216817,0.278777,0.935561,0.018086,0.002865,1.523199, 0.088769,-0.475351,0.875307,-0.536767,-0.144454,1.682232, -0.219724,0.297861,0.928978,0.034087,-0.225059,1.542949, -0.219724,0.297861,0.928978,0.034087,-0.225059,1.542949, 0.088769,-0.475351,0.875307,-0.536767,-0.144454,1.682232, 0.099302,-0.563694,0.819993,-0.533528,-0.58228,1.701405, -0.219724,0.297861,0.928978,0.034087,-0.225059,1.542949, 0.099302,-0.563694,0.819993,-0.533528,-0.58228,1.701405, -0.227369,0.161984,0.960242,0.010486,-0.502317,1.576297, -0.227369,0.161984,0.960242,0.010486,-0.502317,1.576297, 0.099302,-0.563694,0.819993,-0.533528,-0.58228,1.701405, 0.093802,-0.705497,0.702478,-0.505045,-0.913827,1.645612, -0.227369,0.161984,0.960242,0.010486,-0.502317,1.576297, 0.093802,-0.705497,0.702478,-0.505045,-0.913827,1.645612, -0.30296,-0.137183,0.943078,0.021051,-0.831931,1.511548, -0.30296,-0.137183,0.943078,0.021051,-0.831931,1.511548, 0.093802,-0.705497,0.702478,-0.505045,-0.913827,1.645612, 0.058028,-0.329667,0.942312,-0.487217,-1.193519,1.504026, -0.30296,-0.137183,0.943078,0.021051,-0.831931,1.511548, 0.058028,-0.329667,0.942312,-0.487217,-1.193519,1.504026, -0.387895,-0.42081,0.820034,-0.04157,-1.143825,1.395176, -0.387895,-0.42081,0.820034,-0.04157,-1.143825,1.395176, 0.058028,-0.329667,0.942312,-0.487217,-1.193519,1.504026, 0.096347,0.961203,0.258467,-0.524231,-1.399266,1.313019, -0.387895,-0.42081,0.820034,-0.04157,-1.143825,1.395176, 0.096347,0.961203,0.258467,-0.524231,-1.399266,1.313019, -0.433119,-0.541142,0.720814,-0.071941,-1.346991,1.237379, -0.433119,-0.541142,0.720814,-0.071941,-1.346991,1.237379, 0.096347,0.961203,0.258467,-0.524231,-1.399266,1.313019, 0.098712,0.966371,0.23745,-0.526127,-1.495,1.167736, -0.433119,-0.541142,0.720814,-0.071941,-1.346991,1.237379, 0.098712,0.966371,0.23745,-0.526127,-1.495,1.167736, -0.455057,-0.684123,0.569999,-0.0723,-1.450245,1.087397, -0.455057,-0.684123,0.569999,-0.0723,-1.450245,1.087397, 0.098712,0.966371,0.23745,-0.526127,-1.495,1.167736, 0.079848,0.962653,0.258695,-0.535144,-1.615983,0.920556, -0.455057,-0.684123,0.569999,-0.0723,-1.450245,1.087397, 0.079848,0.962653,0.258695,-0.535144,-1.615983,0.920556, -0.084259,-0.367691,0.926123,-0.063012,-1.583021,0.865082, -0.098179,0.995169,0,-0.866132,1.75467,0, -0.065586,-0.997847,0,-1.179474,1.786649,0, -0.115746,0.20405,0.972094,-1.215563,1.757097,0.133494, -0.098179,0.995169,0,-0.866132,1.75467,0, -0.115746,0.20405,0.972094,-1.215563,1.757097,0.133494, 0.136965,0.155729,0.978258,-0.894132,1.712652,0.151911, 0.136965,0.155729,0.978258,-0.894132,1.712652,0.151911, -0.115746,0.20405,0.972094,-1.215563,1.757097,0.133494, -0.164191,0.153328,0.974439,-1.227613,1.709095,0.276029, 0.136965,0.155729,0.978258,-0.894132,1.712652,0.151911, -0.164191,0.153328,0.974439,-1.227613,1.709095,0.276029, 0.173447,0.205435,0.963178,-0.954897,1.677544,0.293034, 0.173447,0.205435,0.963178,-0.954897,1.677544,0.293034, -0.164191,0.153328,0.974439,-1.227613,1.709095,0.276029, -0.15812,-0.033626,0.986847,-1.292756,1.656509,0.51403, 0.173447,0.205435,0.963178,-0.954897,1.677544,0.293034, -0.15812,-0.033626,0.986847,-1.292756,1.656509,0.51403, 0.136801,0.29658,0.945159,-1.017767,1.607824,0.541965, 0.136801,0.29658,0.945159,-1.017767,1.607824,0.541965, -0.15812,-0.033626,0.986847,-1.292756,1.656509,0.51403, 0.005821,-0.234321,0.972142,-1.338488,1.613735,0.725441, 0.136801,0.29658,0.945159,-1.017767,1.607824,0.541965, 0.005821,-0.234321,0.972142,-1.338488,1.613735,0.725441, 0.095019,0.330845,0.938889,-1.04607,1.509097,0.76106, 0.095019,0.330845,0.938889,-1.04607,1.509097,0.76106, 0.005821,-0.234321,0.972142,-1.338488,1.613735,0.725441, 0.243464,-0.335965,0.909864,-1.403848,1.533059,0.902827, 0.095019,0.330845,0.938889,-1.04607,1.509097,0.76106, 0.243464,-0.335965,0.909864,-1.403848,1.533059,0.902827, 0.07657,0.16758,0.982881,-1.115594,1.39238,0.819623, 0.07657,0.16758,0.982881,-1.115594,1.39238,0.819623, 0.243464,-0.335965,0.909864,-1.403848,1.533059,0.902827, 0.49938,-0.45475,0.737443,-1.551526,1.400025,1.050193, 0.07657,0.16758,0.982881,-1.115594,1.39238,0.819623, 0.49938,-0.45475,0.737443,-1.551526,1.400025,1.050193, 0.079214,-0.175111,0.981357,-1.278903,1.192051,0.946843, 0.079214,-0.175111,0.981357,-1.278903,1.192051,0.946843, 0.49938,-0.45475,0.737443,-1.551526,1.400025,1.050193, 0.573426,-0.441087,0.69038,-1.552899,1.128654,1.15104, 0.079214,-0.175111,0.981357,-1.278903,1.192051,0.946843, 0.573426,-0.441087,0.69038,-1.552899,1.128654,1.15104, 0.204115,-0.405276,0.891116,-1.200768,0.978822,1.103391, 0.204115,-0.405276,0.891116,-1.200768,0.978822,1.103391, 0.573426,-0.441087,0.69038,-1.552899,1.128654,1.15104, 0.1643,0.873906,0.457487,-1.454529,0.875045,1.238858, 0.204115,-0.405276,0.891116,-1.200768,0.978822,1.103391, 0.1643,0.873906,0.457487,-1.454529,0.875045,1.238858, 0.396045,-0.47666,0.784821,-1.147922,0.807955,1.254191, 0.396045,-0.47666,0.784821,-1.147922,0.807955,1.254191, 0.1643,0.873906,0.457487,-1.454529,0.875045,1.238858, -0.012448,0.906487,0.422051,-1.405685,0.573835,1.352181, 0.396045,-0.47666,0.784821,-1.147922,0.807955,1.254191, -0.012448,0.906487,0.422051,-1.405685,0.573835,1.352181, 0.238702,-0.258568,0.936036,-1.120716,0.424016,1.45699, 0.238702,-0.258568,0.936036,-1.120716,0.424016,1.45699, -0.012448,0.906487,0.422051,-1.405685,0.573835,1.352181, -0.051905,0.965082,0.256753,-1.479588,0.295746,1.440042, 0.238702,-0.258568,0.936036,-1.120716,0.424016,1.45699, -0.051905,0.965082,0.256753,-1.479588,0.295746,1.440042, 0.11717,0.938619,0.324447,-1.077307,0.165008,1.553393, 0.11717,0.938619,0.324447,-1.077307,0.165008,1.553393, -0.051905,0.965082,0.256753,-1.479588,0.295746,1.440042, -0.088843,0.888,0.45118,-1.489699,-0.024215,1.510987, 0.11717,0.938619,0.324447,-1.077307,0.165008,1.553393, -0.088843,0.888,0.45118,-1.489699,-0.024215,1.510987, 0.080398,0.9582,0.274571,-1.053434,-0.342553,1.690245, 0.080398,0.9582,0.274571,-1.053434,-0.342553,1.690245, -0.088843,0.888,0.45118,-1.489699,-0.024215,1.510987, -0.169971,0.704712,0.688832,-1.395501,-0.698702,1.553257, 0.080398,0.9582,0.274571,-1.053434,-0.342553,1.690245, -0.169971,0.704712,0.688832,-1.395501,-0.698702,1.553257, 0.069061,0.958871,0.275312,-1.077209,-0.869649,1.633144, 0.069061,0.958871,0.275312,-1.077209,-0.869649,1.633144, -0.169971,0.704712,0.688832,-1.395501,-0.698702,1.553257, -0.261543,0.44691,0.855492,-1.376176,-0.948757,1.451608, 0.069061,0.958871,0.275312,-1.077209,-0.869649,1.633144, -0.261543,0.44691,0.855492,-1.376176,-0.948757,1.451608, 0.051291,0.888276,0.456438,-1.061272,-1.141877,1.49623, 0.051291,0.888276,0.456438,-1.061272,-1.141877,1.49623, -0.261543,0.44691,0.855492,-1.376176,-0.948757,1.451608, -0.33898,0.203127,0.918603,-1.402349,-1.127845,1.309055, 0.051291,0.888276,0.456438,-1.061272,-1.141877,1.49623, -0.33898,0.203127,0.918603,-1.402349,-1.127845,1.309055, -0.008282,0.691944,0.721904,-1.001366,-1.335897,1.353338, -0.008282,0.691944,0.721904,-1.001366,-1.335897,1.353338, -0.33898,0.203127,0.918603,-1.402349,-1.127845,1.309055, -0.351241,0.07582,0.93321,-1.407658,-1.236026,1.11293, -0.008282,0.691944,0.721904,-1.001366,-1.335897,1.353338, -0.351241,0.07582,0.93321,-1.407658,-1.236026,1.11293, -0.0448,0.42163,0.905661,-0.952525,-1.440582,1.16865, 0.213167,-0.525559,0.823619,2.013534,-0.662303,1.191491, 0.009434,0.815301,0.578961,1.640095,-0.674556,1.246804, 0.040473,0.760778,0.647749,1.644178,-0.857872,1.208494, -0.057955,0.638634,0.767325,1.807583,1.756546,0.177627, -0.720176,-0.693792,0,1.794465,1.787719,0, 0.779025,-0.626993,0,1.456656,1.785879,0, -0.057955,0.638634,0.767325,1.807583,1.756546,0.177627, 0.779025,-0.626993,0,1.456656,1.785879,0, 0.184661,-0.694307,0.695585,1.462507,1.745481,0.222394, -0.024013,0.58573,0.810151,1.798719,1.714447,0.259352, -0.057955,0.638634,0.767325,1.807583,1.756546,0.177627, 0.184661,-0.694307,0.695585,1.462507,1.745481,0.222394, -0.024013,0.58573,0.810151,1.798719,1.714447,0.259352, 0.184661,-0.694307,0.695585,1.462507,1.745481,0.222394, 0.152876,-0.742504,0.652163,1.483832,1.697594,0.288781, 0.016737,0.497476,0.867316,1.821946,1.618209,0.403751, -0.024013,0.58573,0.810151,1.798719,1.714447,0.259352, 0.152876,-0.742504,0.652163,1.483832,1.697594,0.288781, 0.016737,0.497476,0.867316,1.821946,1.618209,0.403751, 0.152876,-0.742504,0.652163,1.483832,1.697594,0.288781, 0.120054,-0.825719,0.551157,1.497138,1.618935,0.401108, 0.060533,0.377837,0.923891,1.859443,1.450393,0.632222, 0.016737,0.497476,0.867316,1.821946,1.618209,0.403751, 0.120054,-0.825719,0.551157,1.497138,1.618935,0.401108, 0.060533,0.377837,0.923891,1.859443,1.450393,0.632222, 0.120054,-0.825719,0.551157,1.497138,1.618935,0.401108, 0.102263,-0.969566,0.222452,1.504951,1.483493,0.585976, 0.088722,0.251367,0.963817,1.958254,1.130271,0.861813, 0.060533,0.377837,0.923891,1.859443,1.450393,0.632222, 0.102263,-0.969566,0.222452,1.504951,1.483493,0.585976, 0.088722,0.251367,0.963817,1.958254,1.130271,0.861813, 0.102263,-0.969566,0.222452,1.504951,1.483493,0.585976, -0.305786,-0.232288,0.923329,1.517126,1.334367,0.741076, 0.107989,0.168108,0.979836,1.975941,0.827957,1.018423, 0.088722,0.251367,0.963817,1.958254,1.130271,0.861813, -0.305786,-0.232288,0.923329,1.517126,1.334367,0.741076, 0.107989,0.168108,0.979836,1.975941,0.827957,1.018423, -0.305786,-0.232288,0.923329,1.517126,1.334367,0.741076, -0.148631,-0.373855,0.915501,1.570685,0.938327,0.989108, 0.107989,0.168108,0.979836,1.975941,0.827957,1.018423, -0.148631,-0.373855,0.915501,1.570685,0.938327,0.989108, -0.185127,-0.491394,0.851035,1.582203,0.771083,1.06818, 0.10833,0.05569,0.992554,2.023441,0.529338,1.144399, 0.107989,0.168108,0.979836,1.975941,0.827957,1.018423, -0.185127,-0.491394,0.851035,1.582203,0.771083,1.06818, 0.10833,0.05569,0.992554,2.023441,0.529338,1.144399, -0.185127,-0.491394,0.851035,1.582203,0.771083,1.06818, -0.208715,-0.624734,0.752427,1.63008,0.420236,1.172369, 0.114032,-0.218132,0.969234,2.0817,0.283249,1.259461, 0.10833,0.05569,0.992554,2.023441,0.529338,1.144399, -0.208715,-0.624734,0.752427,1.63008,0.420236,1.172369, 0.114032,-0.218132,0.969234,2.0817,0.283249,1.259461, -0.208715,-0.624734,0.752427,1.63008,0.420236,1.172369, -0.251063,-0.683027,0.685888,1.649027,0.224458,1.211969, 0.187438,-0.340915,0.921219,2.14179,-0.055306,1.295565, 0.114032,-0.218132,0.969234,2.0817,0.283249,1.259461, -0.251063,-0.683027,0.685888,1.649027,0.224458,1.211969, 0.187438,-0.340915,0.921219,2.14179,-0.055306,1.295565, -0.251063,-0.683027,0.685888,1.649027,0.224458,1.211969, -0.252973,-0.819125,0.51482,1.660355,0.019397,1.246002, 0.25339,-0.287519,0.923648,2.136269,-0.187666,1.278057, 0.187438,-0.340915,0.921219,2.14179,-0.055306,1.295565, -0.252973,-0.819125,0.51482,1.660355,0.019397,1.246002, 0.25339,-0.287519,0.923648,2.136269,-0.187666,1.278057, -0.252973,-0.819125,0.51482,1.660355,0.019397,1.246002, -0.137161,-0.98063,0.139827,1.664159,-0.189659,1.266729, 0.23972,-0.400363,0.884445,2.108912,-0.357128,1.259691, 0.25339,-0.287519,0.923648,2.136269,-0.187666,1.278057, -0.137161,-0.98063,0.139827,1.664159,-0.189659,1.266729, 0.23972,-0.400363,0.884445,2.108912,-0.357128,1.259691, -0.137161,-0.98063,0.139827,1.664159,-0.189659,1.266729, 0.007127,0.896038,0.44392,1.678622,-0.410061,1.291177, 0.213167,-0.525559,0.823619,2.013534,-0.662303,1.191491, 0.23972,-0.400363,0.884445,2.108912,-0.357128,1.259691, 0.007127,0.896038,0.44392,1.678622,-0.410061,1.291177, 0.213167,-0.525559,0.823619,2.013534,-0.662303,1.191491, 0.007127,0.896038,0.44392,1.678622,-0.410061,1.291177, 0.009434,0.815301,0.578961,1.640095,-0.674556,1.246804, 0.213167,-0.525559,0.823619,2.013534,-0.662303,1.191491, -0.819256,-0.566976,0.085772,2.058189,-0.931238,1.163518, -0.898389,-0.217201,-0.381735,2.158585,-0.955809,1.113647, 0.213167,-0.525559,0.823619,2.013534,-0.662303,1.191491, -0.898389,-0.217201,-0.381735,2.158585,-0.955809,1.113647, -0.887036,-0.210048,-0.411154,2.222082,-0.957342,1.014137, 0.213167,-0.525559,0.823619,2.013534,-0.662303,1.191491, -0.887036,-0.210048,-0.411154,2.222082,-0.957342,1.014137, -0.069142,0.724976,0.685295,2.245624,-0.864372,0.995778, 0.213167,-0.525559,0.823619,2.013534,-0.662303,1.191491, 0.040473,0.760778,0.647749,1.644178,-0.857872,1.208494, -0.493424,-0.16561,-0.853877,1.635139,-0.965221,1.184968, 0.213167,-0.525559,0.823619,2.013534,-0.662303,1.191491, -0.493424,-0.16561,-0.853877,1.635139,-0.965221,1.184968, 0.193853,0.161608,0.967628,1.867657,-0.920633,1.206933, 0.213167,-0.525559,0.823619,2.013534,-0.662303,1.191491, 0.193853,0.161608,0.967628,1.867657,-0.920633,1.206933, -0.819256,-0.566976,0.085772,2.058189,-0.931238,1.163518, -0.034649,0.9994,0,1.920432,-1.567396,0, -0.086361,-0.084973,0.992634,1.963153,-1.588839,0.612861, 0.776291,-0.374867,0.5068,1.721211,-1.590185,0.601932, -0.034649,0.9994,0,1.920432,-1.567396,0, 0.776291,-0.374867,0.5068,1.721211,-1.590185,0.601932, -0.560667,-0.828041,0,1.604939,-1.556997,0, 0.751148,0.43192,-0.49922,1.451825,-1.576856,0.702758, 0.010538,0.399391,0.91672,1.328862,-1.352627,0.758733, -0.263451,-0.648591,0.714089,1.19204,-1.330605,0.678707, 0.751148,0.43192,-0.49922,1.451825,-1.576856,0.702758, -0.263451,-0.648591,0.714089,1.19204,-1.330605,0.678707, -0.301558,-0.77828,0.550766,1.210555,-1.460061,0.576841, 0.24139,0.178826,-0.953809,1.599889,-1.595526,0.623185, 0.751148,0.43192,-0.49922,1.451825,-1.576856,0.702758, -0.301558,-0.77828,0.550766,1.210555,-1.460061,0.576841, 0.24139,0.178826,-0.953809,1.599889,-1.595526,0.623185, -0.301558,-0.77828,0.550766,1.210555,-1.460061,0.576841, -0.154129,-0.981148,0.116585,1.223415,-1.532658,0.434522, -0.034649,0.9994,0,1.920432,-1.567396,0, 0.140536,0.558684,0.817388,2.0482,-1.581983,0.555832, -0.086361,-0.084973,0.992634,1.963153,-1.588839,0.612861, 0.24139,0.178826,-0.953809,1.599889,-1.595526,0.623185, -0.154129,-0.981148,0.116585,1.223415,-1.532658,0.434522, 0.770209,-0.637792,0,1.289448,-1.546597,0, 0.24139,0.178826,-0.953809,1.599889,-1.595526,0.623185, 0.770209,-0.637792,0,1.289448,-1.546597,0, -0.560667,-0.828041,0,1.604939,-1.556997,0, 0.776291,-0.374867,0.5068,1.721211,-1.590185,0.601932, 0.24139,0.178826,-0.953809,1.599889,-1.595526,0.623185, -0.560667,-0.828041,0,1.604939,-1.556997,0, 0.010538,0.399391,0.91672,1.328862,-1.352627,0.758733, -0.228294,-0.186048,0.955651,1.348219,-1.282064,0.845204, -0.267766,-0.862787,0.428835,1.219163,-1.218342,0.823029, 0.010538,0.399391,0.91672,1.328862,-1.352627,0.758733, -0.267766,-0.862787,0.428835,1.219163,-1.218342,0.823029, -0.263451,-0.648591,0.714089,1.19204,-1.330605,0.678707, -0.382074,-0.25681,-0.887732,1.337875,-0.945716,1.021299, -0.218261,-0.26262,0.93989,1.373216,-0.56462,1.106245, -0.231653,-0.530839,0.815198,1.252961,-0.928825,1.001643, 0.43768,-0.823149,-0.361748,1.310865,-1.136322,0.914838, -0.382074,-0.25681,-0.887732,1.337875,-0.945716,1.021299, -0.231653,-0.530839,0.815198,1.252961,-0.928825,1.001643, 0.43768,-0.823149,-0.361748,1.310865,-1.136322,0.914838, -0.231653,-0.530839,0.815198,1.252961,-0.928825,1.001643, -0.253979,-0.745808,0.615845,1.230116,-1.085439,0.894543, -0.228294,-0.186048,0.955651,1.348219,-1.282064,0.845204, 0.43768,-0.823149,-0.361748,1.310865,-1.136322,0.914838, -0.253979,-0.745808,0.615845,1.230116,-1.085439,0.894543, -0.228294,-0.186048,0.955651,1.348219,-1.282064,0.845204, -0.253979,-0.745808,0.615845,1.230116,-1.085439,0.894543, -0.267766,-0.862787,0.428835,1.219163,-1.218342,0.823029, -0.570406,-0.192005,-0.798606,1.536037,-0.985876,1.185597, -0.493424,-0.16561,-0.853877,1.635139,-0.965221,1.184968, 0.040473,0.760778,0.647749,1.644178,-0.857872,1.208494, -0.53197,-0.108751,-0.839751,1.428883,-0.98669,1.133905, -0.570406,-0.192005,-0.798606,1.536037,-0.985876,1.185597, 0.040473,0.760778,0.647749,1.644178,-0.857872,1.208494, -0.53197,-0.108751,-0.839751,1.428883,-0.98669,1.133905, 0.040473,0.760778,0.647749,1.644178,-0.857872,1.208494, 0.009434,0.815301,0.578961,1.640095,-0.674556,1.246804, 0.009434,0.815301,0.578961,1.640095,-0.674556,1.246804, 0.007127,0.896038,0.44392,1.678622,-0.410061,1.291177, -0.218261,-0.26262,0.93989,1.373216,-0.56462,1.106245, -0.53197,-0.108751,-0.839751,1.428883,-0.98669,1.133905, 0.009434,0.815301,0.578961,1.640095,-0.674556,1.246804, -0.218261,-0.26262,0.93989,1.373216,-0.56462,1.106245, 0.981421,-0.191868,0,0.733818,1.740873,0, 0.184661,-0.694307,0.695585,1.462507,1.745481,0.222394, 0.779025,-0.626993,0,1.456656,1.785879,0, -0.165685,0.059692,0.98437,0.912989,-1.499314,0.419547, 0.92802,-0.37253,0,0.927497,-1.558489,0, 0.770209,-0.637792,0,1.289448,-1.546597,0, -0.165685,0.059692,0.98437,0.912989,-1.499314,0.419547, 0.770209,-0.637792,0,1.289448,-1.546597,0, -0.154129,-0.981148,0.116585,1.223415,-1.532658,0.434522, -0.123389,0.256577,0.958615,0.912699,-1.455066,0.576185, -0.165685,0.059692,0.98437,0.912989,-1.499314,0.419547, -0.154129,-0.981148,0.116585,1.223415,-1.532658,0.434522, -0.123389,0.256577,0.958615,0.912699,-1.455066,0.576185, -0.154129,-0.981148,0.116585,1.223415,-1.532658,0.434522, -0.301558,-0.77828,0.550766,1.210555,-1.460061,0.576841, -0.078623,0.370994,0.925301,0.922703,-1.296032,0.728307, -0.123389,0.256577,0.958615,0.912699,-1.455066,0.576185, -0.301558,-0.77828,0.550766,1.210555,-1.460061,0.576841, -0.078623,0.370994,0.925301,0.922703,-1.296032,0.728307, -0.301558,-0.77828,0.550766,1.210555,-1.460061,0.576841, -0.263451,-0.648591,0.714089,1.19204,-1.330605,0.678707, 0.070189,0.510248,0.857158,0.93066,-1.216516,0.831196, -0.078623,0.370994,0.925301,0.922703,-1.296032,0.728307, -0.263451,-0.648591,0.714089,1.19204,-1.330605,0.678707, 0.070189,0.510248,0.857158,0.93066,-1.216516,0.831196, -0.263451,-0.648591,0.714089,1.19204,-1.330605,0.678707, -0.267766,-0.862787,0.428835,1.219163,-1.218342,0.823029, 0.242426,0.58207,0.77616,0.956456,-1.070504,0.921063, 0.070189,0.510248,0.857158,0.93066,-1.216516,0.831196, -0.267766,-0.862787,0.428835,1.219163,-1.218342,0.823029, 0.242426,0.58207,0.77616,0.956456,-1.070504,0.921063, -0.267766,-0.862787,0.428835,1.219163,-1.218342,0.823029, -0.253979,-0.745808,0.615845,1.230116,-1.085439,0.894543, 0.325482,0.443544,0.835063,0.939974,-0.894739,1.019809, 0.242426,0.58207,0.77616,0.956456,-1.070504,0.921063, -0.253979,-0.745808,0.615845,1.230116,-1.085439,0.894543, 0.325482,0.443544,0.835063,0.939974,-0.894739,1.019809, -0.253979,-0.745808,0.615845,1.230116,-1.085439,0.894543, -0.231653,-0.530839,0.815198,1.252961,-0.928825,1.001643, 0.305452,0.425365,0.851918,0.948819,-0.638568,1.102958, 0.325482,0.443544,0.835063,0.939974,-0.894739,1.019809, -0.231653,-0.530839,0.815198,1.252961,-0.928825,1.001643, 0.305452,0.425365,0.851918,0.948819,-0.638568,1.102958, -0.231653,-0.530839,0.815198,1.252961,-0.928825,1.001643, -0.218261,-0.26262,0.93989,1.373216,-0.56462,1.106245, 0.235667,0.756618,0.60991,0.97453,-0.525273,1.140353, 0.305452,0.425365,0.851918,0.948819,-0.638568,1.102958, -0.218261,-0.26262,0.93989,1.373216,-0.56462,1.106245, 0.150328,0.92948,0.336851,0.960321,-0.308052,1.243133, 0.235667,0.756618,0.60991,0.97453,-0.525273,1.140353, -0.218261,-0.26262,0.93989,1.373216,-0.56462,1.106245, 0.150328,0.92948,0.336851,0.960321,-0.308052,1.243133, -0.218261,-0.26262,0.93989,1.373216,-0.56462,1.106245, 0.007127,0.896038,0.44392,1.678622,-0.410061,1.291177, 0.100598,0.942931,0.317428,0.943855,-0.101127,1.274771, 0.150328,0.92948,0.336851,0.960321,-0.308052,1.243133, 0.007127,0.896038,0.44392,1.678622,-0.410061,1.291177, 0.100598,0.942931,0.317428,0.943855,-0.101127,1.274771, 0.007127,0.896038,0.44392,1.678622,-0.410061,1.291177, -0.137161,-0.98063,0.139827,1.664159,-0.189659,1.266729, 0.076524,0.950336,0.301672,0.950215,0.042751,1.256188, 0.100598,0.942931,0.317428,0.943855,-0.101127,1.274771, -0.137161,-0.98063,0.139827,1.664159,-0.189659,1.266729, 0.076524,0.950336,0.301672,0.950215,0.042751,1.256188, -0.137161,-0.98063,0.139827,1.664159,-0.189659,1.266729, -0.252973,-0.819125,0.51482,1.660355,0.019397,1.246002, 0.013768,-0.992402,0.122267,0.927775,0.195225,1.233043, 0.076524,0.950336,0.301672,0.950215,0.042751,1.256188, -0.252973,-0.819125,0.51482,1.660355,0.019397,1.246002, 0.013768,-0.992402,0.122267,0.927775,0.195225,1.233043, -0.252973,-0.819125,0.51482,1.660355,0.019397,1.246002, -0.251063,-0.683027,0.685888,1.649027,0.224458,1.211969, 0.037423,-0.986705,0.158154,0.939271,0.379986,1.185872, 0.013768,-0.992402,0.122267,0.927775,0.195225,1.233043, -0.251063,-0.683027,0.685888,1.649027,0.224458,1.211969, 0.037423,-0.986705,0.158154,0.939271,0.379986,1.185872, -0.251063,-0.683027,0.685888,1.649027,0.224458,1.211969, -0.208715,-0.624734,0.752427,1.63008,0.420236,1.172369, 0.034172,-0.858604,0.511498,0.921312,0.755659,0.99933, 0.037423,-0.986705,0.158154,0.939271,0.379986,1.185872, -0.208715,-0.624734,0.752427,1.63008,0.420236,1.172369, 0.034172,-0.858604,0.511498,0.921312,0.755659,0.99933, -0.208715,-0.624734,0.752427,1.63008,0.420236,1.172369, -0.185127,-0.491394,0.851035,1.582203,0.771083,1.06818, 0.004725,-0.680391,0.732834,0.857323,0.985001,0.874029, 0.034172,-0.858604,0.511498,0.921312,0.755659,0.99933, -0.185127,-0.491394,0.851035,1.582203,0.771083,1.06818, 0.004725,-0.680391,0.732834,0.857323,0.985001,0.874029, -0.185127,-0.491394,0.851035,1.582203,0.771083,1.06818, -0.148631,-0.373855,0.915501,1.570685,0.938327,0.989108, 0.023352,-0.872807,0.487506,0.760722,1.205036,0.700545, 0.004725,-0.680391,0.732834,0.857323,0.985001,0.874029, -0.148631,-0.373855,0.915501,1.570685,0.938327,0.989108, 0.068777,-0.757383,0.649339,0.725959,1.478055,0.461804, 0.023352,-0.872807,0.487506,0.760722,1.205036,0.700545, -0.148631,-0.373855,0.915501,1.570685,0.938327,0.989108, 0.068777,-0.757383,0.649339,0.725959,1.478055,0.461804, -0.148631,-0.373855,0.915501,1.570685,0.938327,0.989108, -0.305786,-0.232288,0.923329,1.517126,1.334367,0.741076, 0.100949,-0.548551,0.830001,0.737904,1.604213,0.281713, 0.068777,-0.757383,0.649339,0.725959,1.478055,0.461804, -0.305786,-0.232288,0.923329,1.517126,1.334367,0.741076, 0.100949,-0.548551,0.830001,0.737904,1.604213,0.281713, -0.305786,-0.232288,0.923329,1.517126,1.334367,0.741076, 0.102263,-0.969566,0.222452,1.504951,1.483493,0.585976, 0.100949,-0.548551,0.830001,0.737904,1.604213,0.281713, 0.102263,-0.969566,0.222452,1.504951,1.483493,0.585976, 0.120054,-0.825719,0.551157,1.497138,1.618935,0.401108, 0.981421,-0.191868,0,0.733818,1.740873,0, 0.100949,-0.548551,0.830001,0.737904,1.604213,0.281713, 0.120054,-0.825719,0.551157,1.497138,1.618935,0.401108, 0.981421,-0.191868,0,0.733818,1.740873,0, 0.120054,-0.825719,0.551157,1.497138,1.618935,0.401108, 0.152876,-0.742504,0.652163,1.483832,1.697594,0.288781, 0.981421,-0.191868,0,0.733818,1.740873,0, 0.152876,-0.742504,0.652163,1.483832,1.697594,0.288781, 0.184661,-0.694307,0.695585,1.462507,1.745481,0.222394, 0.566114,-0.824327,0,0.234527,1.730117,0, -0.039092,-0.999236,0,-0.228904,1.734267,0, 0.067879,0.951186,0.30106,-0.221516,1.686349,0.151403, 0.566114,-0.824327,0,0.234527,1.730117,0, 0.067879,0.951186,0.30106,-0.221516,1.686349,0.151403, 0.095331,0.952335,0.289775,0.223642,1.684075,0.160743, 0.095331,0.952335,0.289775,0.223642,1.684075,0.160743, 0.067879,0.951186,0.30106,-0.221516,1.686349,0.151403, 0.085022,0.963119,0.255291,-0.267035,1.627058,0.266577, 0.095331,0.952335,0.289775,0.223642,1.684075,0.160743, 0.085022,0.963119,0.255291,-0.267035,1.627058,0.266577, 0.10291,0.954344,0.280422,0.23733,1.595746,0.288672, 0.10291,0.954344,0.280422,0.23733,1.595746,0.288672, 0.085022,0.963119,0.255291,-0.267035,1.627058,0.266577, 0.120743,0.971588,0.203561,-0.247999,1.565146,0.389142, 0.10291,0.954344,0.280422,0.23733,1.595746,0.288672, 0.120743,0.971588,0.203561,-0.247999,1.565146,0.389142, 0.172251,0.950689,0.257916,0.289039,1.496446,0.430055, 0.172251,0.950689,0.257916,0.289039,1.496446,0.430055, 0.120743,0.971588,0.203561,-0.247999,1.565146,0.389142, 0.117963,0.926753,0.356669,-0.179548,1.471301,0.544513, 0.172251,0.950689,0.257916,0.289039,1.496446,0.430055, 0.117963,0.926753,0.356669,-0.179548,1.471301,0.544513, 0.28101,0.853935,0.437982,0.305671,1.298417,0.629719, 0.28101,0.853935,0.437982,0.305671,1.298417,0.629719, 0.117963,0.926753,0.356669,-0.179548,1.471301,0.544513, 0.109947,0.693426,0.71209,-0.192546,1.305535,0.70008, 0.28101,0.853935,0.437982,0.305671,1.298417,0.629719, 0.109947,0.693426,0.71209,-0.192546,1.305535,0.70008, 0.381239,0.555717,0.738807,0.243473,1.134082,0.819993, 0.381239,0.555717,0.738807,0.243473,1.134082,0.819993, 0.109947,0.693426,0.71209,-0.192546,1.305535,0.70008, 0.076565,0.333251,0.939724,-0.406155,1.005088,0.971088, 0.381239,0.555717,0.738807,0.243473,1.134082,0.819993, 0.076565,0.333251,0.939724,-0.406155,1.005088,0.971088, 0.376012,0.360026,0.853813,0.316341,0.785311,1.08626, 0.376012,0.360026,0.853813,0.316341,0.785311,1.08626, 0.076565,0.333251,0.939724,-0.406155,1.005088,0.971088, -0.039599,0.171847,0.984327,-0.11519,0.458427,1.346197, 0.376012,0.360026,0.853813,0.316341,0.785311,1.08626, -0.039599,0.171847,0.984327,-0.11519,0.458427,1.346197, 0.207079,0.373404,0.904261,0.539252,0.353984,1.254493, 0.207079,0.373404,0.904261,0.539252,0.353984,1.254493, -0.039599,0.171847,0.984327,-0.11519,0.458427,1.346197, -0.164971,0.181757,0.969406,0.005537,0.163519,1.472265, 0.207079,0.373404,0.904261,0.539252,0.353984,1.254493, -0.164971,0.181757,0.969406,0.005537,0.163519,1.472265, -0.045242,0.348413,0.936249,0.53915,0.148262,1.321014, -0.045242,0.348413,0.936249,0.53915,0.148262,1.321014, -0.164971,0.181757,0.969406,0.005537,0.163519,1.472265, -0.216817,0.278777,0.935561,0.018086,0.002865,1.523199, -0.045242,0.348413,0.936249,0.53915,0.148262,1.321014, -0.216817,0.278777,0.935561,0.018086,0.002865,1.523199, -0.212948,0.334057,0.918182,0.516872,-0.020713,1.356627, -0.212948,0.334057,0.918182,0.516872,-0.020713,1.356627, -0.216817,0.278777,0.935561,0.018086,0.002865,1.523199, -0.219724,0.297861,0.928978,0.034087,-0.225059,1.542949, -0.212948,0.334057,0.918182,0.516872,-0.020713,1.356627, -0.219724,0.297861,0.928978,0.034087,-0.225059,1.542949, -0.282152,0.285245,0.915983,0.542386,-0.188227,1.370375, -0.282152,0.285245,0.915983,0.542386,-0.188227,1.370375, -0.219724,0.297861,0.928978,0.034087,-0.225059,1.542949, -0.227369,0.161984,0.960242,0.010486,-0.502317,1.576297, -0.282152,0.285245,0.915983,0.542386,-0.188227,1.370375, -0.227369,0.161984,0.960242,0.010486,-0.502317,1.576297, -0.326048,0.118611,0.937883,0.546875,-0.39094,1.363244, -0.326048,0.118611,0.937883,0.546875,-0.39094,1.363244, -0.227369,0.161984,0.960242,0.010486,-0.502317,1.576297, -0.30296,-0.137183,0.943078,0.021051,-0.831931,1.511548, -0.326048,0.118611,0.937883,0.546875,-0.39094,1.363244, -0.30296,-0.137183,0.943078,0.021051,-0.831931,1.511548, -0.422758,-0.178302,0.888529,0.550658,-0.633015,1.331311, -0.422758,-0.178302,0.888529,0.550658,-0.633015,1.331311, -0.30296,-0.137183,0.943078,0.021051,-0.831931,1.511548, -0.387895,-0.42081,0.820034,-0.04157,-1.143825,1.395176, -0.422758,-0.178302,0.888529,0.550658,-0.633015,1.331311, -0.387895,-0.42081,0.820034,-0.04157,-1.143825,1.395176, -0.504483,-0.438591,0.743731,0.527724,-0.862854,1.253811, -0.504483,-0.438591,0.743731,0.527724,-0.862854,1.253811, -0.387895,-0.42081,0.820034,-0.04157,-1.143825,1.395176, -0.433119,-0.541142,0.720814,-0.071941,-1.346991,1.237379, -0.504483,-0.438591,0.743731,0.527724,-0.862854,1.253811, -0.433119,-0.541142,0.720814,-0.071941,-1.346991,1.237379, -0.53858,-0.616298,0.57455,0.544825,-1.133123,1.096902, -0.53858,-0.616298,0.57455,0.544825,-1.133123,1.096902, -0.433119,-0.541142,0.720814,-0.071941,-1.346991,1.237379, -0.455057,-0.684123,0.569999,-0.0723,-1.450245,1.087397, -0.53858,-0.616298,0.57455,0.544825,-1.133123,1.096902, -0.455057,-0.684123,0.569999,-0.0723,-1.450245,1.087397, -0.507894,-0.767261,0.391606,0.530629,-1.316423,0.929842, -0.507894,-0.767261,0.391606,0.530629,-1.316423,0.929842, -0.455057,-0.684123,0.569999,-0.0723,-1.450245,1.087397, -0.084259,-0.367691,0.926123,-0.063012,-1.583021,0.865082, -0.507894,-0.767261,0.391606,0.530629,-1.316423,0.929842, -0.084259,-0.367691,0.926123,-0.063012,-1.583021,0.865082, -0.375453,-0.69207,0.616502,0.538756,-1.408602,0.764911, -0.375453,-0.69207,0.616502,0.538756,-1.408602,0.764911, -0.084259,-0.367691,0.926123,-0.063012,-1.583021,0.865082, 0.061261,0.954316,0.292452,-0.07847,-1.688266,0.80023, -0.375453,-0.69207,0.616502,0.538756,-1.408602,0.764911, 0.061261,0.954316,0.292452,-0.07847,-1.688266,0.80023, -0.1427,-0.847733,0.510868,0.489819,-1.524947,0.672392, 0.061261,0.954316,0.292452,-0.07847,-1.688266,0.80023, 0.076968,0.969253,0.233719,-0.094135,-1.769086,0.556924, -0.1427,-0.847733,0.510868,0.489819,-1.524947,0.672392, -0.009814,-0.999952,0,-0.547248,1.742126,0, -0.098179,0.995169,0,-0.866132,1.75467,0, 0.136965,0.155729,0.978258,-0.894132,1.712652,0.151911, -0.009814,-0.999952,0,-0.547248,1.742126,0, 0.136965,0.155729,0.978258,-0.894132,1.712652,0.151911, -0.021294,0.896295,0.442946,-0.559706,1.69418,0.186107, -0.021294,0.896295,0.442946,-0.559706,1.69418,0.186107, 0.136965,0.155729,0.978258,-0.894132,1.712652,0.151911, 0.173447,0.205435,0.963178,-0.954897,1.677544,0.293034, -0.021294,0.896295,0.442946,-0.559706,1.69418,0.186107, 0.173447,0.205435,0.963178,-0.954897,1.677544,0.293034, -0.072244,0.618144,0.782738,-0.557624,1.641278,0.271462, -0.072244,0.618144,0.782738,-0.557624,1.641278,0.271462, 0.173447,0.205435,0.963178,-0.954897,1.677544,0.293034, 0.136801,0.29658,0.945159,-1.017767,1.607824,0.541965, -0.072244,0.618144,0.782738,-0.557624,1.641278,0.271462, 0.136801,0.29658,0.945159,-1.017767,1.607824,0.541965, -0.038944,0.247819,0.968023,-0.626493,1.585426,0.443136, -0.038944,0.247819,0.968023,-0.626493,1.585426,0.443136, 0.136801,0.29658,0.945159,-1.017767,1.607824,0.541965, 0.095019,0.330845,0.938889,-1.04607,1.509097,0.76106, -0.038944,0.247819,0.968023,-0.626493,1.585426,0.443136, 0.095019,0.330845,0.938889,-1.04607,1.509097,0.76106, -0.00315,0.115338,0.993321,-0.597781,1.48962,0.641047, -0.00315,0.115338,0.993321,-0.597781,1.48962,0.641047, 0.095019,0.330845,0.938889,-1.04607,1.509097,0.76106, 0.07657,0.16758,0.982881,-1.115594,1.39238,0.819623, -0.00315,0.115338,0.993321,-0.597781,1.48962,0.641047, 0.07657,0.16758,0.982881,-1.115594,1.39238,0.819623, 0.016683,0.197618,0.980137,-0.674657,1.333008,0.761059, 0.016683,0.197618,0.980137,-0.674657,1.333008,0.761059, 0.07657,0.16758,0.982881,-1.115594,1.39238,0.819623, 0.079214,-0.175111,0.981357,-1.278903,1.192051,0.946843, 0.016683,0.197618,0.980137,-0.674657,1.333008,0.761059, 0.079214,-0.175111,0.981357,-1.278903,1.192051,0.946843, 0.032424,0.316591,0.948008,-0.910602,1.204118,0.83774, 0.032424,0.316591,0.948008,-0.910602,1.204118,0.83774, 0.079214,-0.175111,0.981357,-1.278903,1.192051,0.946843, 0.204115,-0.405276,0.891116,-1.200768,0.978822,1.103391, 0.032424,0.316591,0.948008,-0.910602,1.204118,0.83774, 0.204115,-0.405276,0.891116,-1.200768,0.978822,1.103391, 0.053195,0.343167,0.937767,-0.969076,0.901205,1.146223, 0.053195,0.343167,0.937767,-0.969076,0.901205,1.146223, 0.204115,-0.405276,0.891116,-1.200768,0.978822,1.103391, 0.396045,-0.47666,0.784821,-1.147922,0.807955,1.254191, 0.053195,0.343167,0.937767,-0.969076,0.901205,1.146223, 0.396045,-0.47666,0.784821,-1.147922,0.807955,1.254191, 0.057735,0.173734,0.983099,-0.752416,0.438132,1.467349, 0.057735,0.173734,0.983099,-0.752416,0.438132,1.467349, 0.396045,-0.47666,0.784821,-1.147922,0.807955,1.254191, 0.238702,-0.258568,0.936036,-1.120716,0.424016,1.45699, 0.057735,0.173734,0.983099,-0.752416,0.438132,1.467349, 0.238702,-0.258568,0.936036,-1.120716,0.424016,1.45699, 0.058723,-0.195869,0.97887,-0.645496,0.179261,1.584316, 0.058723,-0.195869,0.97887,-0.645496,0.179261,1.584316, 0.238702,-0.258568,0.936036,-1.120716,0.424016,1.45699, 0.11717,0.938619,0.324447,-1.077307,0.165008,1.553393, 0.058723,-0.195869,0.97887,-0.645496,0.179261,1.584316, 0.11717,0.938619,0.324447,-1.077307,0.165008,1.553393, 0.088769,-0.475351,0.875307,-0.536767,-0.144454,1.682232, 0.088769,-0.475351,0.875307,-0.536767,-0.144454,1.682232, 0.11717,0.938619,0.324447,-1.077307,0.165008,1.553393, 0.080398,0.9582,0.274571,-1.053434,-0.342553,1.690245, 0.088769,-0.475351,0.875307,-0.536767,-0.144454,1.682232, 0.080398,0.9582,0.274571,-1.053434,-0.342553,1.690245, 0.099302,-0.563694,0.819993,-0.533528,-0.58228,1.701405, 0.099302,-0.563694,0.819993,-0.533528,-0.58228,1.701405, 0.080398,0.9582,0.274571,-1.053434,-0.342553,1.690245, 0.069061,0.958871,0.275312,-1.077209,-0.869649,1.633144, 0.099302,-0.563694,0.819993,-0.533528,-0.58228,1.701405, 0.069061,0.958871,0.275312,-1.077209,-0.869649,1.633144, 0.093802,-0.705497,0.702478,-0.505045,-0.913827,1.645612, 0.093802,-0.705497,0.702478,-0.505045,-0.913827,1.645612, 0.069061,0.958871,0.275312,-1.077209,-0.869649,1.633144, 0.051291,0.888276,0.456438,-1.061272,-1.141877,1.49623, 0.093802,-0.705497,0.702478,-0.505045,-0.913827,1.645612, 0.051291,0.888276,0.456438,-1.061272,-1.141877,1.49623, 0.058028,-0.329667,0.942312,-0.487217,-1.193519,1.504026, 0.058028,-0.329667,0.942312,-0.487217,-1.193519,1.504026, 0.051291,0.888276,0.456438,-1.061272,-1.141877,1.49623, -0.008282,0.691944,0.721904,-1.001366,-1.335897,1.353338, 0.058028,-0.329667,0.942312,-0.487217,-1.193519,1.504026, -0.008282,0.691944,0.721904,-1.001366,-1.335897,1.353338, 0.096347,0.961203,0.258467,-0.524231,-1.399266,1.313019, 0.096347,0.961203,0.258467,-0.524231,-1.399266,1.313019, -0.008282,0.691944,0.721904,-1.001366,-1.335897,1.353338, -0.0448,0.42163,0.905661,-0.952525,-1.440582,1.16865, 0.096347,0.961203,0.258467,-0.524231,-1.399266,1.313019, -0.0448,0.42163,0.905661,-0.952525,-1.440582,1.16865, 0.098712,0.966371,0.23745,-0.526127,-1.495,1.167736, 0.098712,0.966371,0.23745,-0.526127,-1.495,1.167736, -0.0448,0.42163,0.905661,-0.952525,-1.440582,1.16865, -0.02449,0.224062,0.974267,-0.953236,-1.545941,0.89918, 0.098712,0.966371,0.23745,-0.526127,-1.495,1.167736, -0.02449,0.224062,0.974267,-0.953236,-1.545941,0.89918, 0.079848,0.962653,0.258695,-0.535144,-1.615983,0.920556, 0.136523,0.621747,0.771228,2.881063,-0.493146,0.521968, 0.478274,-0.500384,0.721713,2.736198,-0.346225,0.659345, 0.245892,-0.489895,0.836385,2.688131,-0.517509,0.672975, 0.048754,0.934073,0.353738,2.824356,-1.407256,0.355013, 0.303729,-0.050718,0.951408,2.740886,-1.339225,0.463604, 0.33122,-0.270106,0.904067,2.663024,-1.440487,0.478149, -0.382074,-0.25681,-0.887732,1.337875,-0.945716,1.021299, -0.53197,-0.108751,-0.839751,1.428883,-0.98669,1.133905, -0.218261,-0.26262,0.93989,1.373216,-0.56462,1.106245, -0.065586,-0.997847,0,-1.179474,1.786649,0, 0.262234,-0.965004,0,-1.35095,1.807009,0, -0.234266,0.044111,0.971171,-1.365948,1.769608,0.133901, -0.065586,-0.997847,0,-1.179474,1.786649,0, -0.234266,0.044111,0.971171,-1.365948,1.769608,0.133901, -0.115746,0.20405,0.972094,-1.215563,1.757097,0.133494, -0.115746,0.20405,0.972094,-1.215563,1.757097,0.133494, -0.234266,0.044111,0.971171,-1.365948,1.769608,0.133901, -0.108631,-0.122719,0.986478,-1.396332,1.723782,0.267642, -0.115746,0.20405,0.972094,-1.215563,1.757097,0.133494, -0.108631,-0.122719,0.986478,-1.396332,1.723782,0.267642, -0.164191,0.153328,0.974439,-1.227613,1.709095,0.276029, -0.164191,0.153328,0.974439,-1.227613,1.709095,0.276029, -0.108631,-0.122719,0.986478,-1.396332,1.723782,0.267642, -0.006683,-0.232823,0.972496,-1.417595,1.67618,0.529265, -0.164191,0.153328,0.974439,-1.227613,1.709095,0.276029, -0.006683,-0.232823,0.972496,-1.417595,1.67618,0.529265, -0.15812,-0.033626,0.986847,-1.292756,1.656509,0.51403, -0.15812,-0.033626,0.986847,-1.292756,1.656509,0.51403, -0.006683,-0.232823,0.972496,-1.417595,1.67618,0.529265, -0.004872,-0.216103,0.976358,-1.465432,1.655336,0.722125, -0.15812,-0.033626,0.986847,-1.292756,1.656509,0.51403, -0.004872,-0.216103,0.976358,-1.465432,1.655336,0.722125, 0.005821,-0.234321,0.972142,-1.338488,1.613735,0.725441, 0.005821,-0.234321,0.972142,-1.338488,1.613735,0.725441, -0.004872,-0.216103,0.976358,-1.465432,1.655336,0.722125, 0.193955,-0.251788,0.948148,-1.582187,1.567542,0.982349, 0.005821,-0.234321,0.972142,-1.338488,1.613735,0.725441, 0.193955,-0.251788,0.948148,-1.582187,1.567542,0.982349, 0.243464,-0.335965,0.909864,-1.403848,1.533059,0.902827, 0.243464,-0.335965,0.909864,-1.403848,1.533059,0.902827, 0.193955,-0.251788,0.948148,-1.582187,1.567542,0.982349, -0.337275,0.918092,0.208215,-1.721806,1.391264,1.113307, 0.243464,-0.335965,0.909864,-1.403848,1.533059,0.902827, -0.337275,0.918092,0.208215,-1.721806,1.391264,1.113307, 0.49938,-0.45475,0.737443,-1.551526,1.400025,1.050193, 0.49938,-0.45475,0.737443,-1.551526,1.400025,1.050193, -0.337275,0.918092,0.208215,-1.721806,1.391264,1.113307, -0.47652,0.732046,0.486866,-1.733703,1.083864,1.181489, 0.49938,-0.45475,0.737443,-1.551526,1.400025,1.050193, -0.47652,0.732046,0.486866,-1.733703,1.083864,1.181489, 0.573426,-0.441087,0.69038,-1.552899,1.128654,1.15104, 0.573426,-0.441087,0.69038,-1.552899,1.128654,1.15104, -0.47652,0.732046,0.486866,-1.733703,1.083864,1.181489, -0.505556,0.519614,0.688777,-1.807421,0.657142,1.209422, 0.573426,-0.441087,0.69038,-1.552899,1.128654,1.15104, -0.505556,0.519614,0.688777,-1.807421,0.657142,1.209422, 0.1643,0.873906,0.457487,-1.454529,0.875045,1.238858, 0.1643,0.873906,0.457487,-1.454529,0.875045,1.238858, -0.505556,0.519614,0.688777,-1.807421,0.657142,1.209422, -0.539732,0.31653,0.780063,-1.796156,0.452382,1.243643, 0.1643,0.873906,0.457487,-1.454529,0.875045,1.238858, -0.539732,0.31653,0.780063,-1.796156,0.452382,1.243643, -0.012448,0.906487,0.422051,-1.405685,0.573835,1.352181, -0.012448,0.906487,0.422051,-1.405685,0.573835,1.352181, -0.539732,0.31653,0.780063,-1.796156,0.452382,1.243643, -0.545639,0.142044,0.825894,-1.81092,0.287592,1.292257, -0.012448,0.906487,0.422051,-1.405685,0.573835,1.352181, -0.545639,0.142044,0.825894,-1.81092,0.287592,1.292257, -0.051905,0.965082,0.256753,-1.479588,0.295746,1.440042, -0.051905,0.965082,0.256753,-1.479588,0.295746,1.440042, -0.545639,0.142044,0.825894,-1.81092,0.287592,1.292257, -0.512472,0.102596,0.852553,-1.79513,0.033439,1.37116, -0.051905,0.965082,0.256753,-1.479588,0.295746,1.440042, -0.512472,0.102596,0.852553,-1.79513,0.033439,1.37116, -0.088843,0.888,0.45118,-1.489699,-0.024215,1.510987, -0.088843,0.888,0.45118,-1.489699,-0.024215,1.510987, -0.512472,0.102596,0.852553,-1.79513,0.033439,1.37116, -0.449233,0.123555,0.88483,-1.802864,-0.282523,1.401315, -0.088843,0.888,0.45118,-1.489699,-0.024215,1.510987, -0.449233,0.123555,0.88483,-1.802864,-0.282523,1.401315, -0.169971,0.704712,0.688832,-1.395501,-0.698702,1.553257, -0.169971,0.704712,0.688832,-1.395501,-0.698702,1.553257, -0.449233,0.123555,0.88483,-1.802864,-0.282523,1.401315, -0.404056,0.117264,0.907187,-1.837859,-0.540871,1.295851, -0.169971,0.704712,0.688832,-1.395501,-0.698702,1.553257, -0.404056,0.117264,0.907187,-1.837859,-0.540871,1.295851, -0.261543,0.44691,0.855492,-1.376176,-0.948757,1.451608, -0.261543,0.44691,0.855492,-1.376176,-0.948757,1.451608, -0.404056,0.117264,0.907187,-1.837859,-0.540871,1.295851, -0.387051,0.087836,0.917865,-1.782928,-0.770786,1.173619, -0.261543,0.44691,0.855492,-1.376176,-0.948757,1.451608, -0.387051,0.087836,0.917865,-1.782928,-0.770786,1.173619, -0.33898,0.203127,0.918603,-1.402349,-1.127845,1.309055, -0.33898,0.203127,0.918603,-1.402349,-1.127845,1.309055, -0.387051,0.087836,0.917865,-1.782928,-0.770786,1.173619, -0.390861,0.032481,0.919876,-1.757573,-0.945337,1.075832, -0.33898,0.203127,0.918603,-1.402349,-1.127845,1.309055, -0.390861,0.032481,0.919876,-1.757573,-0.945337,1.075832, -0.351241,0.07582,0.93321,-1.407658,-1.236026,1.11293, 0.262234,-0.965004,0,-1.35095,1.807009,0, 0.021487,0.999769,0,-1.67651,1.826886,0, -0.373751,-0.169261,0.911954,-1.683863,1.789041,0.121501, 0.262234,-0.965004,0,-1.35095,1.807009,0, -0.373751,-0.169261,0.911954,-1.683863,1.789041,0.121501, -0.234266,0.044111,0.971171,-1.365948,1.769608,0.133901, -0.234266,0.044111,0.971171,-1.365948,1.769608,0.133901, -0.373751,-0.169261,0.911954,-1.683863,1.789041,0.121501, -0.426971,-0.09322,0.899447,-1.714432,1.747956,0.247594, -0.234266,0.044111,0.971171,-1.365948,1.769608,0.133901, -0.426971,-0.09322,0.899447,-1.714432,1.747956,0.247594, -0.108631,-0.122719,0.986478,-1.396332,1.723782,0.267642, -0.108631,-0.122719,0.986478,-1.396332,1.723782,0.267642, -0.426971,-0.09322,0.899447,-1.714432,1.747956,0.247594, -0.457657,0.090776,0.884483,-1.744732,1.734849,0.433807, -0.108631,-0.122719,0.986478,-1.396332,1.723782,0.267642, -0.457657,0.090776,0.884483,-1.744732,1.734849,0.433807, -0.006683,-0.232823,0.972496,-1.417595,1.67618,0.529265, -0.006683,-0.232823,0.972496,-1.417595,1.67618,0.529265, -0.457657,0.090776,0.884483,-1.744732,1.734849,0.433807, -0.575033,0.794917,0.193504,-1.929731,1.617188,0.80639, -0.006683,-0.232823,0.972496,-1.417595,1.67618,0.529265, -0.575033,0.794917,0.193504,-1.929731,1.617188,0.80639, -0.004872,-0.216103,0.976358,-1.465432,1.655336,0.722125, -0.004872,-0.216103,0.976358,-1.465432,1.655336,0.722125, -0.575033,0.794917,0.193504,-1.929731,1.617188,0.80639, -0.636638,0.552106,0.538397,-1.996117,1.387891,1.064104, -0.004872,-0.216103,0.976358,-1.465432,1.655336,0.722125, -0.636638,0.552106,0.538397,-1.996117,1.387891,1.064104, 0.193955,-0.251788,0.948148,-1.582187,1.567542,0.982349, 0.193955,-0.251788,0.948148,-1.582187,1.567542,0.982349, -0.636638,0.552106,0.538397,-1.996117,1.387891,1.064104, -0.643784,0.341688,0.684684,-1.980388,1.134038,1.143196, 0.193955,-0.251788,0.948148,-1.582187,1.567542,0.982349, -0.643784,0.341688,0.684684,-1.980388,1.134038,1.143196, -0.337275,0.918092,0.208215,-1.721806,1.391264,1.113307, -0.337275,0.918092,0.208215,-1.721806,1.391264,1.113307, -0.643784,0.341688,0.684684,-1.980388,1.134038,1.143196, -0.646492,0.202786,0.735477,-2.013663,0.810726,1.158827, -0.337275,0.918092,0.208215,-1.721806,1.391264,1.113307, -0.646492,0.202786,0.735477,-2.013663,0.810726,1.158827, -0.47652,0.732046,0.486866,-1.733703,1.083864,1.181489, -0.47652,0.732046,0.486866,-1.733703,1.083864,1.181489, -0.646492,0.202786,0.735477,-2.013663,0.810726,1.158827, -0.624566,0.121329,0.77149,-2.030191,0.547622,1.189762, -0.47652,0.732046,0.486866,-1.733703,1.083864,1.181489, -0.624566,0.121329,0.77149,-2.030191,0.547622,1.189762, -0.505556,0.519614,0.688777,-1.807421,0.657142,1.209422, -0.505556,0.519614,0.688777,-1.807421,0.657142,1.209422, -0.624566,0.121329,0.77149,-2.030191,0.547622,1.189762, -0.588582,0.130278,0.797872,-2.021159,0.411979,1.234679, -0.505556,0.519614,0.688777,-1.807421,0.657142,1.209422, -0.588582,0.130278,0.797872,-2.021159,0.411979,1.234679, -0.539732,0.31653,0.780063,-1.796156,0.452382,1.243643, -0.539732,0.31653,0.780063,-1.796156,0.452382,1.243643, -0.588582,0.130278,0.797872,-2.021159,0.411979,1.234679, -0.553145,0.120209,0.824367,-1.932916,0.232972,1.304589, -0.539732,0.31653,0.780063,-1.796156,0.452382,1.243643, -0.553145,0.120209,0.824367,-1.932916,0.232972,1.304589, -0.545639,0.142044,0.825894,-1.81092,0.287592,1.292257, -0.545639,0.142044,0.825894,-1.81092,0.287592,1.292257, -0.553145,0.120209,0.824367,-1.932916,0.232972,1.304589, -0.547788,0.055501,0.834774,-1.897394,0.037852,1.365798, -0.545639,0.142044,0.825894,-1.81092,0.287592,1.292257, -0.547788,0.055501,0.834774,-1.897394,0.037852,1.365798, -0.512472,0.102596,0.852553,-1.79513,0.033439,1.37116, -0.512472,0.102596,0.852553,-1.79513,0.033439,1.37116, -0.547788,0.055501,0.834774,-1.897394,0.037852,1.365798, -0.563128,0.005618,0.826351,-1.950547,-0.275573,1.377028, -0.512472,0.102596,0.852553,-1.79513,0.033439,1.37116, -0.563128,0.005618,0.826351,-1.950547,-0.275573,1.377028, -0.449233,0.123555,0.88483,-1.802864,-0.282523,1.401315, -0.449233,0.123555,0.88483,-1.802864,-0.282523,1.401315, -0.563128,0.005618,0.826351,-1.950547,-0.275573,1.377028, -0.596319,-0.021767,0.802452,-2.033655,-0.526012,1.277639, -0.449233,0.123555,0.88483,-1.802864,-0.282523,1.401315, -0.596319,-0.021767,0.802452,-2.033655,-0.526012,1.277639, -0.404056,0.117264,0.907187,-1.837859,-0.540871,1.295851, -0.404056,0.117264,0.907187,-1.837859,-0.540871,1.295851, -0.596319,-0.021767,0.802452,-2.033655,-0.526012,1.277639, -0.626255,-0.080061,0.775497,-2.050292,-0.755566,1.114167, -0.404056,0.117264,0.907187,-1.837859,-0.540871,1.295851, -0.626255,-0.080061,0.775497,-2.050292,-0.755566,1.114167, -0.387051,0.087836,0.917865,-1.782928,-0.770786,1.173619, -0.387051,0.087836,0.917865,-1.782928,-0.770786,1.173619, -0.626255,-0.080061,0.775497,-2.050292,-0.755566,1.114167, -0.6343,-0.110875,0.765095,-2.043593,-0.875823,1.028879, -0.387051,0.087836,0.917865,-1.782928,-0.770786,1.173619, -0.6343,-0.110875,0.765095,-2.043593,-0.875823,1.028879, -0.390861,0.032481,0.919876,-1.757573,-0.945337,1.075832, -0.390861,0.032481,0.919876,-1.757573,-0.945337,1.075832, -0.6343,-0.110875,0.765095,-2.043593,-0.875823,1.028879, -0.619245,-0.050391,0.783579,-2.033406,-0.91003,0.96422, -0.390861,0.032481,0.919876,-1.757573,-0.945337,1.075832, -0.619245,-0.050391,0.783579,-2.033406,-0.91003,0.96422, -0.379807,-0.084066,0.921238,-1.782298,-1.020581,0.943381, -0.02449,0.224062,0.974267,-0.953236,-1.545941,0.89918, -0.0448,0.42163,0.905661,-0.952525,-1.440582,1.16865, -0.351241,0.07582,0.93321,-1.407658,-1.236026,1.11293, -0.02449,0.224062,0.974267,-0.953236,-1.545941,0.89918, -0.351241,0.07582,0.93321,-1.407658,-1.236026,1.11293, -0.742985,0.015712,0.669123,-1.198513,-1.456102,0.885435, -0.351241,0.07582,0.93321,-1.407658,-1.236026,1.11293, -0.390861,0.032481,0.919876,-1.757573,-0.945337,1.075832, -0.379807,-0.084066,0.921238,-1.782298,-1.020581,0.943381, -0.351241,0.07582,0.93321,-1.407658,-1.236026,1.11293, -0.379807,-0.084066,0.921238,-1.782298,-1.020581,0.943381, -0.982334,-0.04331,0.182057,-1.456655,-1.295527,0.89424, -0.351241,0.07582,0.93321,-1.407658,-1.236026,1.11293, -0.982334,-0.04331,0.182057,-1.456655,-1.295527,0.89424, -0.311485,0.082882,0.94663,-1.366873,-1.340211,0.907567, -0.351241,0.07582,0.93321,-1.407658,-1.236026,1.11293, -0.311485,0.082882,0.94663,-1.366873,-1.340211,0.907567, -0.742985,0.015712,0.669123,-1.198513,-1.456102,0.885435, 0.021487,0.999769,0,-1.67651,1.826886,0, 0.181762,-0.983343,0,-2.057387,1.841308,0, -0.549206,0.149158,0.822268,-2.079597,1.817785,0.138375, 0.021487,0.999769,0,-1.67651,1.826886,0, -0.549206,0.149158,0.822268,-2.079597,1.817785,0.138375, -0.373751,-0.169261,0.911954,-1.683863,1.789041,0.121501, -0.373751,-0.169261,0.911954,-1.683863,1.789041,0.121501, -0.549206,0.149158,0.822268,-2.079597,1.817785,0.138375, -0.881408,0.44424,0.16053,-2.10017,1.78998,0.229245, -0.373751,-0.169261,0.911954,-1.683863,1.789041,0.121501, -0.881408,0.44424,0.16053,-2.10017,1.78998,0.229245, -0.426971,-0.09322,0.899447,-1.714432,1.747956,0.247594, -0.426971,-0.09322,0.899447,-1.714432,1.747956,0.247594, -0.881408,0.44424,0.16053,-2.10017,1.78998,0.229245, -0.881352,0.261345,0.393596,-2.137524,1.753182,0.433142, -0.426971,-0.09322,0.899447,-1.714432,1.747956,0.247594, -0.881352,0.261345,0.393596,-2.137524,1.753182,0.433142, -0.457657,0.090776,0.884483,-1.744732,1.734849,0.433807, -0.457657,0.090776,0.884483,-1.744732,1.734849,0.433807, -0.881352,0.261345,0.393596,-2.137524,1.753182,0.433142, -0.880731,0.130088,0.4554,-2.172139,1.62301,0.805318, -0.457657,0.090776,0.884483,-1.744732,1.734849,0.433807, -0.880731,0.130088,0.4554,-2.172139,1.62301,0.805318, -0.575033,0.794917,0.193504,-1.929731,1.617188,0.80639, -0.575033,0.794917,0.193504,-1.929731,1.617188,0.80639, -0.880731,0.130088,0.4554,-2.172139,1.62301,0.805318, -0.874101,0.053175,0.482825,-2.205791,1.356023,1.081662, -0.575033,0.794917,0.193504,-1.929731,1.617188,0.80639, -0.874101,0.053175,0.482825,-2.205791,1.356023,1.081662, -0.636638,0.552106,0.538397,-1.996117,1.387891,1.064104, -0.636638,0.552106,0.538397,-1.996117,1.387891,1.064104, -0.874101,0.053175,0.482825,-2.205791,1.356023,1.081662, -0.875552,0.01506,0.482889,-2.296056,1.06281,1.171139, -0.636638,0.552106,0.538397,-1.996117,1.387891,1.064104, -0.875552,0.01506,0.482889,-2.296056,1.06281,1.171139, -0.643784,0.341688,0.684684,-1.980388,1.134038,1.143196, -0.643784,0.341688,0.684684,-1.980388,1.134038,1.143196, -0.875552,0.01506,0.482889,-2.296056,1.06281,1.171139, -0.86587,-0.001845,0.500266,-2.298249,0.768333,1.203884, -0.643784,0.341688,0.684684,-1.980388,1.134038,1.143196, -0.86587,-0.001845,0.500266,-2.298249,0.768333,1.203884, -0.646492,0.202786,0.735477,-2.013663,0.810726,1.158827, -0.646492,0.202786,0.735477,-2.013663,0.810726,1.158827, -0.86587,-0.001845,0.500266,-2.298249,0.768333,1.203884, -0.84112,-0.026303,0.540209,-2.256285,0.547326,1.238301, -0.646492,0.202786,0.735477,-2.013663,0.810726,1.158827, -0.84112,-0.026303,0.540209,-2.256285,0.547326,1.238301, -0.624566,0.121329,0.77149,-2.030191,0.547622,1.189762, -0.624566,0.121329,0.77149,-2.030191,0.547622,1.189762, -0.84112,-0.026303,0.540209,-2.256285,0.547326,1.238301, -0.813168,-0.06637,0.578232,-2.1584,0.381542,1.272962, -0.624566,0.121329,0.77149,-2.030191,0.547622,1.189762, -0.813168,-0.06637,0.578232,-2.1584,0.381542,1.272962, -0.588582,0.130278,0.797872,-2.021159,0.411979,1.234679, -0.588582,0.130278,0.797872,-2.021159,0.411979,1.234679, -0.813168,-0.06637,0.578232,-2.1584,0.381542,1.272962, -0.799953,-0.096213,0.592299,-2.070413,0.207766,1.335106, -0.588582,0.130278,0.797872,-2.021159,0.411979,1.234679, -0.799953,-0.096213,0.592299,-2.070413,0.207766,1.335106, -0.553145,0.120209,0.824367,-1.932916,0.232972,1.304589, -0.553145,0.120209,0.824367,-1.932916,0.232972,1.304589, -0.799953,-0.096213,0.592299,-2.070413,0.207766,1.335106, -0.811102,-0.12903,0.570495,-2.064786,0.018789,1.411866, -0.553145,0.120209,0.824367,-1.932916,0.232972,1.304589, -0.811102,-0.12903,0.570495,-2.064786,0.018789,1.411866, -0.547788,0.055501,0.834774,-1.897394,0.037852,1.365798, -0.547788,0.055501,0.834774,-1.897394,0.037852,1.365798, -0.811102,-0.12903,0.570495,-2.064786,0.018789,1.411866, -0.848349,-0.120539,0.515533,-2.187634,-0.375454,1.406902, -0.547788,0.055501,0.834774,-1.897394,0.037852,1.365798, -0.848349,-0.120539,0.515533,-2.187634,-0.375454,1.406902, -0.563128,0.005618,0.826351,-1.950547,-0.275573,1.377028, -0.563128,0.005618,0.826351,-1.950547,-0.275573,1.377028, -0.848349,-0.120539,0.515533,-2.187634,-0.375454,1.406902, -0.880002,-0.033987,0.473752,-2.276341,-0.689823,1.268026, -0.563128,0.005618,0.826351,-1.950547,-0.275573,1.377028, -0.880002,-0.033987,0.473752,-2.276341,-0.689823,1.268026, -0.596319,-0.021767,0.802452,-2.033655,-0.526012,1.277639, -0.596319,-0.021767,0.802452,-2.033655,-0.526012,1.277639, -0.880002,-0.033987,0.473752,-2.276341,-0.689823,1.268026, -0.870332,0.069095,0.487595,-2.292049,-0.933921,1.128136, -0.596319,-0.021767,0.802452,-2.033655,-0.526012,1.277639, -0.870332,0.069095,0.487595,-2.292049,-0.933921,1.128136, -0.626255,-0.080061,0.775497,-2.050292,-0.755566,1.114167, -0.626255,-0.080061,0.775497,-2.050292,-0.755566,1.114167, -0.870332,0.069095,0.487595,-2.292049,-0.933921,1.128136, 0.074896,0.047734,0.996048,-2.299356,-1.025449,1.044687, -0.626255,-0.080061,0.775497,-2.050292,-0.755566,1.114167, 0.074896,0.047734,0.996048,-2.299356,-1.025449,1.044687, -0.6343,-0.110875,0.765095,-2.043593,-0.875823,1.028879, -0.6343,-0.110875,0.765095,-2.043593,-0.875823,1.028879, 0.074896,0.047734,0.996048,-2.299356,-1.025449,1.044687, -0.822733,0.223687,0.522565,-2.306662,-1.116976,0.961238, -0.6343,-0.110875,0.765095,-2.043593,-0.875823,1.028879, -0.822733,0.223687,0.522565,-2.306662,-1.116976,0.961238, -0.619245,-0.050391,0.783579,-2.033406,-0.91003,0.96422, 0.181762,-0.983343,0,-2.057387,1.841308,0, 0.03611,0.999348,0,-2.629466,1.918204,0, -0.946902,-0.290276,-0.138264,-2.672899,1.90511,0.067168, 0.181762,-0.983343,0,-2.057387,1.841308,0, -0.946902,-0.290276,-0.138264,-2.672899,1.90511,0.067168, -0.549206,0.149158,0.822268,-2.079597,1.817785,0.138375, -0.549206,0.149158,0.822268,-2.079597,1.817785,0.138375, -0.946902,-0.290276,-0.138264,-2.672899,1.90511,0.067168, -0.982633,-0.14343,-0.11773,-2.697367,1.871291,0.218796, -0.549206,0.149158,0.822268,-2.079597,1.817785,0.138375, -0.982633,-0.14343,-0.11773,-2.697367,1.871291,0.218796, -0.881408,0.44424,0.16053,-2.10017,1.78998,0.229245, -0.881408,0.44424,0.16053,-2.10017,1.78998,0.229245, -0.982633,-0.14343,-0.11773,-2.697367,1.871291,0.218796, -0.995584,-0.070631,-0.061842,-2.703112,1.825435,0.395127, -0.881408,0.44424,0.16053,-2.10017,1.78998,0.229245, -0.995584,-0.070631,-0.061842,-2.703112,1.825435,0.395127, -0.881352,0.261345,0.393596,-2.137524,1.753182,0.433142, -0.881352,0.261345,0.393596,-2.137524,1.753182,0.433142, -0.995584,-0.070631,-0.061842,-2.703112,1.825435,0.395127, -0.997475,-0.070819,-0.005318,-2.715246,1.746763,0.604653, -0.881352,0.261345,0.393596,-2.137524,1.753182,0.433142, -0.997475,-0.070819,-0.005318,-2.715246,1.746763,0.604653, -0.880731,0.130088,0.4554,-2.172139,1.62301,0.805318, -0.880731,0.130088,0.4554,-2.172139,1.62301,0.805318, -0.997475,-0.070819,-0.005318,-2.715246,1.746763,0.604653, -0.980175,-0.184883,-0.071243,-2.71748,1.576797,0.875971, -0.880731,0.130088,0.4554,-2.172139,1.62301,0.805318, -0.980175,-0.184883,-0.071243,-2.71748,1.576797,0.875971, -0.874101,0.053175,0.482825,-2.205791,1.356023,1.081662, -0.874101,0.053175,0.482825,-2.205791,1.356023,1.081662, -0.980175,-0.184883,-0.071243,-2.71748,1.576797,0.875971, -0.976177,-0.17359,-0.130171,-2.68493,1.262021,1.11049, -0.874101,0.053175,0.482825,-2.205791,1.356023,1.081662, -0.976177,-0.17359,-0.130171,-2.68493,1.262021,1.11049, -0.875552,0.01506,0.482889,-2.296056,1.06281,1.171139, -0.875552,0.01506,0.482889,-2.296056,1.06281,1.171139, -0.976177,-0.17359,-0.130171,-2.68493,1.262021,1.11049, -0.984416,-0.175855,0.000915,-2.572286,0.835495,1.252192, -0.875552,0.01506,0.482889,-2.296056,1.06281,1.171139, -0.984416,-0.175855,0.000915,-2.572286,0.835495,1.252192, -0.86587,-0.001845,0.500266,-2.298249,0.768333,1.203884, -0.86587,-0.001845,0.500266,-2.298249,0.768333,1.203884, -0.984416,-0.175855,0.000915,-2.572286,0.835495,1.252192, -0.977902,-0.171035,0.12023,-2.536112,0.656633,1.269661, -0.86587,-0.001845,0.500266,-2.298249,0.768333,1.203884, -0.977902,-0.171035,0.12023,-2.536112,0.656633,1.269661, -0.84112,-0.026303,0.540209,-2.256285,0.547326,1.238301, -0.84112,-0.026303,0.540209,-2.256285,0.547326,1.238301, -0.977902,-0.171035,0.12023,-2.536112,0.656633,1.269661, -0.964119,-0.189683,0.18573,-2.520947,0.559036,1.273617, -0.84112,-0.026303,0.540209,-2.256285,0.547326,1.238301, -0.964119,-0.189683,0.18573,-2.520947,0.559036,1.273617, -0.813168,-0.06637,0.578232,-2.1584,0.381542,1.272962, -0.813168,-0.06637,0.578232,-2.1584,0.381542,1.272962, -0.964119,-0.189683,0.18573,-2.520947,0.559036,1.273617, -0.955381,-0.23808,0.174826,-2.47375,0.300945,1.316695, -0.813168,-0.06637,0.578232,-2.1584,0.381542,1.272962, -0.955381,-0.23808,0.174826,-2.47375,0.300945,1.316695, -0.799953,-0.096213,0.592299,-2.070413,0.207766,1.335106, -0.799953,-0.096213,0.592299,-2.070413,0.207766,1.335106, -0.955381,-0.23808,0.174826,-2.47375,0.300945,1.316695, -0.843742,-0.096325,0.528036,-2.433366,0.078222,1.371269, -0.799953,-0.096213,0.592299,-2.070413,0.207766,1.335106, -0.843742,-0.096325,0.528036,-2.433366,0.078222,1.371269, -0.811102,-0.12903,0.570495,-2.064786,0.018789,1.411866, -0.811102,-0.12903,0.570495,-2.064786,0.018789,1.411866, -0.843742,-0.096325,0.528036,-2.433366,0.078222,1.371269, 0.028952,-0.016247,0.999449,-2.41473,-0.108377,1.395384, -0.811102,-0.12903,0.570495,-2.064786,0.018789,1.411866, 0.028952,-0.016247,0.999449,-2.41473,-0.108377,1.395384, -0.848349,-0.120539,0.515533,-2.187634,-0.375454,1.406902, -0.848349,-0.120539,0.515533,-2.187634,-0.375454,1.406902, 0.028952,-0.016247,0.999449,-2.41473,-0.108377,1.395384, 0.093953,-0.049433,0.994349,-2.38292,-0.41745,1.375045, -0.848349,-0.120539,0.515533,-2.187634,-0.375454,1.406902, 0.093953,-0.049433,0.994349,-2.38292,-0.41745,1.375045, -0.880002,-0.033987,0.473752,-2.276341,-0.689823,1.268026, -0.880002,-0.033987,0.473752,-2.276341,-0.689823,1.268026, 0.093953,-0.049433,0.994349,-2.38292,-0.41745,1.375045, 0.335613,-0.388493,0.858159,-2.430508,-0.822313,1.254486, -0.880002,-0.033987,0.473752,-2.276341,-0.689823,1.268026, 0.335613,-0.388493,0.858159,-2.430508,-0.822313,1.254486, -0.870332,0.069095,0.487595,-2.292049,-0.933921,1.128136, -0.870332,0.069095,0.487595,-2.292049,-0.933921,1.128136, 0.335613,-0.388493,0.858159,-2.430508,-0.822313,1.254486, -0.004413,-0.170526,0.985343,-2.566746,-1.211312,1.167101, -0.870332,0.069095,0.487595,-2.292049,-0.933921,1.128136, -0.004413,-0.170526,0.985343,-2.566746,-1.211312,1.167101, 0.074896,0.047734,0.996048,-2.299356,-1.025449,1.044687, 0.03611,0.999348,0,-2.629466,1.918204,0, 0.012502,-0.999922,0,-3.037562,2.001526,0, 0.137764,-0.289893,0.947092,-3.053102,1.96881,0.051104, 0.03611,0.999348,0,-2.629466,1.918204,0, 0.137764,-0.289893,0.947092,-3.053102,1.96881,0.051104, -0.946902,-0.290276,-0.138264,-2.672899,1.90511,0.067168, -0.946902,-0.290276,-0.138264,-2.672899,1.90511,0.067168, 0.137764,-0.289893,0.947092,-3.053102,1.96881,0.051104, 0.137206,-0.207537,0.968557,-3.077669,1.871112,0.217368, -0.946902,-0.290276,-0.138264,-2.672899,1.90511,0.067168, 0.137206,-0.207537,0.968557,-3.077669,1.871112,0.217368, -0.982633,-0.14343,-0.11773,-2.697367,1.871291,0.218796, -0.982633,-0.14343,-0.11773,-2.697367,1.871291,0.218796, 0.137206,-0.207537,0.968557,-3.077669,1.871112,0.217368, 0.094371,-0.230057,0.968591,-3.07531,1.846,0.363149, -0.982633,-0.14343,-0.11773,-2.697367,1.871291,0.218796, 0.094371,-0.230057,0.968591,-3.07531,1.846,0.363149, -0.995584,-0.070631,-0.061842,-2.703112,1.825435,0.395127, -0.995584,-0.070631,-0.061842,-2.703112,1.825435,0.395127, 0.094371,-0.230057,0.968591,-3.07531,1.846,0.363149, -0.201818,-0.568242,0.797728,-3.109047,1.789477,0.565323, -0.995584,-0.070631,-0.061842,-2.703112,1.825435,0.395127, -0.201818,-0.568242,0.797728,-3.109047,1.789477,0.565323, -0.997475,-0.070819,-0.005318,-2.715246,1.746763,0.604653, -0.997475,-0.070819,-0.005318,-2.715246,1.746763,0.604653, -0.201818,-0.568242,0.797728,-3.109047,1.789477,0.565323, 0.357021,-0.590654,0.723646,-3.08565,1.65734,0.784479, -0.997475,-0.070819,-0.005318,-2.715246,1.746763,0.604653, 0.357021,-0.590654,0.723646,-3.08565,1.65734,0.784479, -0.980175,-0.184883,-0.071243,-2.71748,1.576797,0.875971, -0.980175,-0.184883,-0.071243,-2.71748,1.576797,0.875971, 0.357021,-0.590654,0.723646,-3.08565,1.65734,0.784479, 0.008663,-0.516082,0.856495,-3.028932,1.461517,0.941324, -0.980175,-0.184883,-0.071243,-2.71748,1.576797,0.875971, 0.008663,-0.516082,0.856495,-3.028932,1.461517,0.941324, -0.976177,-0.17359,-0.130171,-2.68493,1.262021,1.11049, -0.976177,-0.17359,-0.130171,-2.68493,1.262021,1.11049, 0.008663,-0.516082,0.856495,-3.028932,1.461517,0.941324, 0.106237,-0.558927,0.822383,-2.930312,1.10358,1.125876, -0.976177,-0.17359,-0.130171,-2.68493,1.262021,1.11049, 0.106237,-0.558927,0.822383,-2.930312,1.10358,1.125876, -0.984416,-0.175855,0.000915,-2.572286,0.835495,1.252192, -0.984416,-0.175855,0.000915,-2.572286,0.835495,1.252192, 0.106237,-0.558927,0.822383,-2.930312,1.10358,1.125876, 0.155794,-0.590112,0.792146,-2.825835,0.755899,1.209042, -0.984416,-0.175855,0.000915,-2.572286,0.835495,1.252192, 0.155794,-0.590112,0.792146,-2.825835,0.755899,1.209042, -0.977902,-0.171035,0.12023,-2.536112,0.656633,1.269661, -0.977902,-0.171035,0.12023,-2.536112,0.656633,1.269661, 0.155794,-0.590112,0.792146,-2.825835,0.755899,1.209042, 0.08565,-0.422547,0.902285,-2.79063,0.46881,1.224273, -0.977902,-0.171035,0.12023,-2.536112,0.656633,1.269661, 0.08565,-0.422547,0.902285,-2.79063,0.46881,1.224273, -0.964119,-0.189683,0.18573,-2.520947,0.559036,1.273617, -0.964119,-0.189683,0.18573,-2.520947,0.559036,1.273617, 0.08565,-0.422547,0.902285,-2.79063,0.46881,1.224273, 0.161064,-0.731195,0.662882,-2.787011,0.264495,1.237352, -0.964119,-0.189683,0.18573,-2.520947,0.559036,1.273617, 0.161064,-0.731195,0.662882,-2.787011,0.264495,1.237352, -0.955381,-0.23808,0.174826,-2.47375,0.300945,1.316695, -0.955381,-0.23808,0.174826,-2.47375,0.300945,1.316695, 0.161064,-0.731195,0.662882,-2.787011,0.264495,1.237352, 0.121987,-0.426327,0.896306,-2.687022,0.076781,1.290565, -0.955381,-0.23808,0.174826,-2.47375,0.300945,1.316695, 0.121987,-0.426327,0.896306,-2.687022,0.076781,1.290565, -0.843742,-0.096325,0.528036,-2.433366,0.078222,1.371269, -0.843742,-0.096325,0.528036,-2.433366,0.078222,1.371269, 0.121987,-0.426327,0.896306,-2.687022,0.076781,1.290565, 0.215155,-0.464575,0.858999,-2.649338,-0.241719,1.339644, -0.843742,-0.096325,0.528036,-2.433366,0.078222,1.371269, 0.215155,-0.464575,0.858999,-2.649338,-0.241719,1.339644, 0.028952,-0.016247,0.999449,-2.41473,-0.108377,1.395384, 0.028952,-0.016247,0.999449,-2.41473,-0.108377,1.395384, 0.215155,-0.464575,0.858999,-2.649338,-0.241719,1.339644, -0.11636,-0.749063,0.652201,-2.616467,-0.511373,1.344133, 0.028952,-0.016247,0.999449,-2.41473,-0.108377,1.395384, -0.11636,-0.749063,0.652201,-2.616467,-0.511373,1.344133, 0.093953,-0.049433,0.994349,-2.38292,-0.41745,1.375045, 0.093953,-0.049433,0.994349,-2.38292,-0.41745,1.375045, -0.11636,-0.749063,0.652201,-2.616467,-0.511373,1.344133, 0.162276,-0.745105,0.646905,-2.624856,-0.8882,1.261176, 0.093953,-0.049433,0.994349,-2.38292,-0.41745,1.375045, 0.162276,-0.745105,0.646905,-2.624856,-0.8882,1.261176, 0.335613,-0.388493,0.858159,-2.430508,-0.822313,1.254486, 0.335613,-0.388493,0.858159,-2.430508,-0.822313,1.254486, 0.162276,-0.745105,0.646905,-2.624856,-0.8882,1.261176, -0.351476,-0.711504,0.608463,-2.725776,-1.214862,1.190384, 0.335613,-0.388493,0.858159,-2.430508,-0.822313,1.254486, -0.351476,-0.711504,0.608463,-2.725776,-1.214862,1.190384, -0.004413,-0.170526,0.985343,-2.566746,-1.211312,1.167101, -0.004413,-0.170526,0.985343,-2.566746,-1.211312,1.167101, -0.351476,-0.711504,0.608463,-2.725776,-1.214862,1.190384, -0.149005,-0.65467,0.741084,-2.862576,-1.546894,1.117139, -0.004413,-0.170526,0.985343,-2.566746,-1.211312,1.167101, -0.149005,-0.65467,0.741084,-2.862576,-1.546894,1.117139, 0.095733,-0.224552,0.969748,-2.765069,-1.561164,1.084313, 0.072535,0.997366,0,-3.392806,1.769365,0, -0.153783,-0.988105,0,-3.507689,1.700214,0, 0.048753,-0.975535,0.21437,-3.519716,1.685231,0.31713, 0.072535,0.997366,0,-3.392806,1.769365,0, 0.048753,-0.975535,0.21437,-3.519716,1.685231,0.31713, -0.468954,-0.586277,0.660577,-3.35851,1.810253,0.380095, -0.468954,-0.586277,0.660577,-3.35851,1.810253,0.380095, 0.048753,-0.975535,0.21437,-3.519716,1.685231,0.31713, -0.177142,-0.976279,0.124502,-3.527168,1.583508,0.512679, -0.468954,-0.586277,0.660577,-3.35851,1.810253,0.380095, -0.177142,-0.976279,0.124502,-3.527168,1.583508,0.512679, -0.150892,-0.83775,0.524792,-3.395381,1.726325,0.55477, -0.150892,-0.83775,0.524792,-3.395381,1.726325,0.55477, -0.177142,-0.976279,0.124502,-3.527168,1.583508,0.512679, 0.430742,-0.887318,0.164705,-3.512997,1.44805,0.611386, -0.150892,-0.83775,0.524792,-3.395381,1.726325,0.55477, 0.430742,-0.887318,0.164705,-3.512997,1.44805,0.611386, -0.4144,-0.844957,0.338113,-3.338742,1.598933,0.689636, -0.4144,-0.844957,0.338113,-3.338742,1.598933,0.689636, 0.430742,-0.887318,0.164705,-3.512997,1.44805,0.611386, 0.35682,-0.781398,0.511954,-3.476235,1.287798,0.704766, -0.4144,-0.844957,0.338113,-3.338742,1.598933,0.689636, 0.35682,-0.781398,0.511954,-3.476235,1.287798,0.704766, -0.176655,-0.950799,0.254508,-3.27808,1.432418,0.853958, -0.176655,-0.950799,0.254508,-3.27808,1.432418,0.853958, 0.35682,-0.781398,0.511954,-3.476235,1.287798,0.704766, 0.493535,-0.729115,0.474147,-3.442151,1.105486,0.762934, -0.176655,-0.950799,0.254508,-3.27808,1.432418,0.853958, 0.493535,-0.729115,0.474147,-3.442151,1.105486,0.762934, -0.079302,-0.84299,0.532051,-3.244771,1.19554,0.910945, -0.079302,-0.84299,0.532051,-3.244771,1.19554,0.910945, 0.493535,-0.729115,0.474147,-3.442151,1.105486,0.762934, 0.04422,-0.704109,0.708714,-3.379131,0.767915,0.885996, -0.079302,-0.84299,0.532051,-3.244771,1.19554,0.910945, 0.04422,-0.704109,0.708714,-3.379131,0.767915,0.885996, -0.094238,-0.851252,0.516225,-3.19641,0.797564,0.985913, -0.094238,-0.851252,0.516225,-3.19641,0.797564,0.985913, 0.04422,-0.704109,0.708714,-3.379131,0.767915,0.885996, 0.083262,-0.787311,0.610908,-3.306875,0.379713,0.98762, -0.094238,-0.851252,0.516225,-3.19641,0.797564,0.985913, 0.083262,-0.787311,0.610908,-3.306875,0.379713,0.98762, 0.152347,-0.821467,0.549529,-3.112555,0.457376,1.084816, 0.152347,-0.821467,0.549529,-3.112555,0.457376,1.084816, 0.083262,-0.787311,0.610908,-3.306875,0.379713,0.98762, 0.170756,-0.748007,0.641349,-3.251181,0.175063,1.053445, 0.152347,-0.821467,0.549529,-3.112555,0.457376,1.084816, 0.170756,-0.748007,0.641349,-3.251181,0.175063,1.053445, -0.279342,-0.940234,0.19475,-3.044646,0.224321,1.164934, -0.279342,-0.940234,0.19475,-3.044646,0.224321,1.164934, 0.170756,-0.748007,0.641349,-3.251181,0.175063,1.053445, 0.64791,-0.754869,-0.101908,-3.160225,-0.018852,1.113626, -0.279342,-0.940234,0.19475,-3.044646,0.224321,1.164934, 0.64791,-0.754869,-0.101908,-3.160225,-0.018852,1.113626, -0.198045,-0.959194,0.201804,-2.971546,0.032038,1.215971, -0.198045,-0.959194,0.201804,-2.971546,0.032038,1.215971, 0.64791,-0.754869,-0.101908,-3.160225,-0.018852,1.113626, 0.381337,-0.795981,0.470103,-3.101125,-0.35476,1.162409, -0.198045,-0.959194,0.201804,-2.971546,0.032038,1.215971, 0.381337,-0.795981,0.470103,-3.101125,-0.35476,1.162409, -0.171647,-0.971664,0.162499,-2.90708,-0.345582,1.281557, -0.171647,-0.971664,0.162499,-2.90708,-0.345582,1.281557, 0.381337,-0.795981,0.470103,-3.101125,-0.35476,1.162409, 0.183908,-0.773381,0.606679,-3.096267,-0.6681,1.140081, -0.171647,-0.971664,0.162499,-2.90708,-0.345582,1.281557, 0.183908,-0.773381,0.606679,-3.096267,-0.6681,1.140081, -0.403877,-0.879274,0.252509,-2.901159,-0.619504,1.284058, -0.403877,-0.879274,0.252509,-2.901159,-0.619504,1.284058, 0.183908,-0.773381,0.606679,-3.096267,-0.6681,1.140081, 0.018755,-0.837462,0.546174,-3.122061,-0.998702,1.065015, -0.403877,-0.879274,0.252509,-2.901159,-0.619504,1.284058, 0.018755,-0.837462,0.546174,-3.122061,-0.998702,1.065015, -0.040019,-0.929968,0.365457,-2.937658,-1.002749,1.219413, -0.040019,-0.929968,0.365457,-2.937658,-1.002749,1.219413, 0.018755,-0.837462,0.546174,-3.122061,-0.998702,1.065015, -0.094688,-0.959937,0.263734,-3.15021,-1.259588,1.001021, -0.040019,-0.929968,0.365457,-2.937658,-1.002749,1.219413, -0.094688,-0.959937,0.263734,-3.15021,-1.259588,1.001021, -0.299215,-0.929389,0.216115,-2.982676,-1.264649,1.133596, -0.299215,-0.929389,0.216115,-2.982676,-1.264649,1.133596, -0.094688,-0.959937,0.263734,-3.15021,-1.259588,1.001021, 0.059023,-0.965365,0.25414,-3.188954,-1.408279,0.963611, -0.299215,-0.929389,0.216115,-2.982676,-1.264649,1.133596, 0.059023,-0.965365,0.25414,-3.188954,-1.408279,0.963611, -0.18119,-0.970212,0.160805,-3.063133,-1.440555,1.090926, -0.153783,-0.988105,0,-3.507689,1.700214,0, -0.626255,-0.080061,-0.775497,-3.690685,1.60208,0, 0.49176,-0.810764,0.317543,-3.734989,1.589433,0.295202, -0.153783,-0.988105,0,-3.507689,1.700214,0, 0.49176,-0.810764,0.317543,-3.734989,1.589433,0.295202, 0.048753,-0.975535,0.21437,-3.519716,1.685231,0.31713, 0.048753,-0.975535,0.21437,-3.519716,1.685231,0.31713, 0.49176,-0.810764,0.317543,-3.734989,1.589433,0.295202, 0.43907,-0.579988,0.686172,-3.697974,1.466697,0.433432, 0.048753,-0.975535,0.21437,-3.519716,1.685231,0.31713, 0.43907,-0.579988,0.686172,-3.697974,1.466697,0.433432, -0.177142,-0.976279,0.124502,-3.527168,1.583508,0.512679, -0.177142,-0.976279,0.124502,-3.527168,1.583508,0.512679, 0.43907,-0.579988,0.686172,-3.697974,1.466697,0.433432, 0.099157,-0.476834,0.873383,-3.684619,1.35069,0.501428, -0.177142,-0.976279,0.124502,-3.527168,1.583508,0.512679, 0.099157,-0.476834,0.873383,-3.684619,1.35069,0.501428, 0.430742,-0.887318,0.164705,-3.512997,1.44805,0.611386, 0.430742,-0.887318,0.164705,-3.512997,1.44805,0.611386, 0.099157,-0.476834,0.873383,-3.684619,1.35069,0.501428, -0.073547,-0.481419,0.8734,-3.655148,1.190938,0.573692, 0.430742,-0.887318,0.164705,-3.512997,1.44805,0.611386, -0.073547,-0.481419,0.8734,-3.655148,1.190938,0.573692, 0.35682,-0.781398,0.511954,-3.476235,1.287798,0.704766, 0.35682,-0.781398,0.511954,-3.476235,1.287798,0.704766, -0.073547,-0.481419,0.8734,-3.655148,1.190938,0.573692, -0.147229,-0.706225,0.69251,-3.639878,1.015186,0.615203, 0.35682,-0.781398,0.511954,-3.476235,1.287798,0.704766, -0.147229,-0.706225,0.69251,-3.639878,1.015186,0.615203, 0.493535,-0.729115,0.474147,-3.442151,1.105486,0.762934, 0.493535,-0.729115,0.474147,-3.442151,1.105486,0.762934, -0.147229,-0.706225,0.69251,-3.639878,1.015186,0.615203, 0.328487,-0.940917,-0.082286,-3.582867,0.734419,0.697787, 0.493535,-0.729115,0.474147,-3.442151,1.105486,0.762934, 0.328487,-0.940917,-0.082286,-3.582867,0.734419,0.697787, 0.04422,-0.704109,0.708714,-3.379131,0.767915,0.885996, 0.04422,-0.704109,0.708714,-3.379131,0.767915,0.885996, 0.328487,-0.940917,-0.082286,-3.582867,0.734419,0.697787, -0.319475,-0.944225,0.079844,-3.504525,0.405574,0.847066, 0.04422,-0.704109,0.708714,-3.379131,0.767915,0.885996, -0.319475,-0.944225,0.079844,-3.504525,0.405574,0.847066, 0.083262,-0.787311,0.610908,-3.306875,0.379713,0.98762, 0.083262,-0.787311,0.610908,-3.306875,0.379713,0.98762, -0.319475,-0.944225,0.079844,-3.504525,0.405574,0.847066, -0.393694,-0.919049,-0.018795,-3.424258,0.158638,0.918279, 0.083262,-0.787311,0.610908,-3.306875,0.379713,0.98762, -0.393694,-0.919049,-0.018795,-3.424258,0.158638,0.918279, 0.170756,-0.748007,0.641349,-3.251181,0.175063,1.053445, 0.170756,-0.748007,0.641349,-3.251181,0.175063,1.053445, -0.393694,-0.919049,-0.018795,-3.424258,0.158638,0.918279, -0.327707,-0.94199,-0.072547,-3.365413,-0.113447,0.9524, 0.170756,-0.748007,0.641349,-3.251181,0.175063,1.053445, -0.327707,-0.94199,-0.072547,-3.365413,-0.113447,0.9524, 0.64791,-0.754869,-0.101908,-3.160225,-0.018852,1.113626, 0.64791,-0.754869,-0.101908,-3.160225,-0.018852,1.113626, -0.327707,-0.94199,-0.072547,-3.365413,-0.113447,0.9524, -0.163041,-0.980692,-0.107986,-3.290393,-0.424259,0.984153, 0.64791,-0.754869,-0.101908,-3.160225,-0.018852,1.113626, -0.163041,-0.980692,-0.107986,-3.290393,-0.424259,0.984153, 0.381337,-0.795981,0.470103,-3.101125,-0.35476,1.162409, 0.381337,-0.795981,0.470103,-3.101125,-0.35476,1.162409, -0.163041,-0.980692,-0.107986,-3.290393,-0.424259,0.984153, 0.074429,-0.99521,-0.063385,-3.233333,-0.683782,1.015512, 0.381337,-0.795981,0.470103,-3.101125,-0.35476,1.162409, 0.074429,-0.99521,-0.063385,-3.233333,-0.683782,1.015512, 0.183908,-0.773381,0.606679,-3.096267,-0.6681,1.140081, 0.183908,-0.773381,0.606679,-3.096267,-0.6681,1.140081, 0.074429,-0.99521,-0.063385,-3.233333,-0.683782,1.015512, -0.012978,-0.998326,-0.056357,-3.238094,-0.979377,0.961631, 0.183908,-0.773381,0.606679,-3.096267,-0.6681,1.140081, -0.012978,-0.998326,-0.056357,-3.238094,-0.979377,0.961631, 0.018755,-0.837462,0.546174,-3.122061,-0.998702,1.065015, 0.018755,-0.837462,0.546174,-3.122061,-0.998702,1.065015, -0.012978,-0.998326,-0.056357,-3.238094,-0.979377,0.961631, 0.249604,-0.855993,-0.452741,-3.27751,-1.177346,0.9153, 0.018755,-0.837462,0.546174,-3.122061,-0.998702,1.065015, 0.249604,-0.855993,-0.452741,-3.27751,-1.177346,0.9153, -0.094688,-0.959937,0.263734,-3.15021,-1.259588,1.001021, -0.094688,-0.959937,0.263734,-3.15021,-1.259588,1.001021, 0.249604,-0.855993,-0.452741,-3.27751,-1.177346,0.9153, 0.515412,-0.714946,-0.472444,-3.319817,-1.365015,0.886015, -0.094688,-0.959937,0.263734,-3.15021,-1.259588,1.001021, 0.515412,-0.714946,-0.472444,-3.319817,-1.365015,0.886015, 0.059023,-0.965365,0.25414,-3.188954,-1.408279,0.963611, -0.626255,-0.080061,-0.775497,-3.690685,1.60208,0, -0.848349,-0.120539,-0.515533,-3.709827,1.417763,0, -0.454242,-0.890878,-0.000928,-3.709741,1.351194,0.211745, -0.626255,-0.080061,-0.775497,-3.690685,1.60208,0, -0.454242,-0.890878,-0.000928,-3.709741,1.351194,0.211745, 0.49176,-0.810764,0.317543,-3.734989,1.589433,0.295202, 0.49176,-0.810764,0.317543,-3.734989,1.589433,0.295202, -0.454242,-0.890878,-0.000928,-3.709741,1.351194,0.211745, -0.354058,-0.732075,-0.581987,-3.701634,1.27265,0.270469, 0.49176,-0.810764,0.317543,-3.734989,1.589433,0.295202, -0.354058,-0.732075,-0.581987,-3.701634,1.27265,0.270469, 0.43907,-0.579988,0.686172,-3.697974,1.466697,0.433432, 0.43907,-0.579988,0.686172,-3.697974,1.466697,0.433432, -0.354058,-0.732075,-0.581987,-3.701634,1.27265,0.270469, -0.587869,-0.808404,0.029894,-3.695872,1.156978,0.316829, 0.43907,-0.579988,0.686172,-3.697974,1.466697,0.433432, -0.587869,-0.808404,0.029894,-3.695872,1.156978,0.316829, 0.099157,-0.476834,0.873383,-3.684619,1.35069,0.501428, 0.099157,-0.476834,0.873383,-3.684619,1.35069,0.501428, -0.587869,-0.808404,0.029894,-3.695872,1.156978,0.316829, -0.581301,-0.608503,-0.540197,-3.672431,1.044224,0.364991, 0.099157,-0.476834,0.873383,-3.684619,1.35069,0.501428, -0.581301,-0.608503,-0.540197,-3.672431,1.044224,0.364991, -0.073547,-0.481419,0.8734,-3.655148,1.190938,0.573692, -0.073547,-0.481419,0.8734,-3.655148,1.190938,0.573692, -0.581301,-0.608503,-0.540197,-3.672431,1.044224,0.364991, -0.736087,-0.675143,0.048562,-3.664355,0.932851,0.370749, -0.073547,-0.481419,0.8734,-3.655148,1.190938,0.573692, -0.736087,-0.675143,0.048562,-3.664355,0.932851,0.370749, -0.147229,-0.706225,0.69251,-3.639878,1.015186,0.615203, -0.147229,-0.706225,0.69251,-3.639878,1.015186,0.615203, -0.736087,-0.675143,0.048562,-3.664355,0.932851,0.370749, -0.98615,-0.150918,0.068783,-3.631292,0.701013,0.420276, -0.147229,-0.706225,0.69251,-3.639878,1.015186,0.615203, -0.98615,-0.150918,0.068783,-3.631292,0.701013,0.420276, 0.328487,-0.940917,-0.082286,-3.582867,0.734419,0.697787, 0.328487,-0.940917,-0.082286,-3.582867,0.734419,0.697787, -0.98615,-0.150918,0.068783,-3.631292,0.701013,0.420276, -0.84728,-0.52968,0.039439,-3.570384,0.385564,0.52448, 0.328487,-0.940917,-0.082286,-3.582867,0.734419,0.697787, -0.84728,-0.52968,0.039439,-3.570384,0.385564,0.52448, -0.319475,-0.944225,0.079844,-3.504525,0.405574,0.847066, -0.319475,-0.944225,0.079844,-3.504525,0.405574,0.847066, -0.84728,-0.52968,0.039439,-3.570384,0.385564,0.52448, -0.815087,-0.388054,0.430171,-3.520188,0.140164,0.618561, -0.319475,-0.944225,0.079844,-3.504525,0.405574,0.847066, -0.815087,-0.388054,0.430171,-3.520188,0.140164,0.618561, -0.393694,-0.919049,-0.018795,-3.424258,0.158638,0.918279, -0.393694,-0.919049,-0.018795,-3.424258,0.158638,0.918279, -0.815087,-0.388054,0.430171,-3.520188,0.140164,0.618561, -0.945906,-0.323169,0.028687,-3.458251,-0.12595,0.731712, -0.393694,-0.919049,-0.018795,-3.424258,0.158638,0.918279, -0.945906,-0.323169,0.028687,-3.458251,-0.12595,0.731712, -0.327707,-0.94199,-0.072547,-3.365413,-0.113447,0.9524, -0.327707,-0.94199,-0.072547,-3.365413,-0.113447,0.9524, -0.945906,-0.323169,0.028687,-3.458251,-0.12595,0.731712, -0.896964,-0.287307,0.336022,-3.406618,-0.343461,0.746456, -0.327707,-0.94199,-0.072547,-3.365413,-0.113447,0.9524, -0.896964,-0.287307,0.336022,-3.406618,-0.343461,0.746456, -0.163041,-0.980692,-0.107986,-3.290393,-0.424259,0.984153, -0.163041,-0.980692,-0.107986,-3.290393,-0.424259,0.984153, -0.896964,-0.287307,0.336022,-3.406618,-0.343461,0.746456, -0.99574,-0.082547,0.041071,-3.283698,-0.730967,0.793898, -0.163041,-0.980692,-0.107986,-3.290393,-0.424259,0.984153, -0.99574,-0.082547,0.041071,-3.283698,-0.730967,0.793898, 0.074429,-0.99521,-0.063385,-3.233333,-0.683782,1.015512, -0.040019,-0.929968,0.365457,-2.937658,-1.002749,1.219413, -0.299215,-0.929389,0.216115,-2.982676,-1.264649,1.133596, -0.351476,-0.711504,0.608463,-2.725776,-1.214862,1.190384, -0.040019,-0.929968,0.365457,-2.937658,-1.002749,1.219413, -0.351476,-0.711504,0.608463,-2.725776,-1.214862,1.190384, 0.162276,-0.745105,0.646905,-2.624856,-0.8882,1.261176, -0.403877,-0.879274,0.252509,-2.901159,-0.619504,1.284058, -0.040019,-0.929968,0.365457,-2.937658,-1.002749,1.219413, 0.162276,-0.745105,0.646905,-2.624856,-0.8882,1.261176, -0.403877,-0.879274,0.252509,-2.901159,-0.619504,1.284058, 0.162276,-0.745105,0.646905,-2.624856,-0.8882,1.261176, -0.11636,-0.749063,0.652201,-2.616467,-0.511373,1.344133, -0.171647,-0.971664,0.162499,-2.90708,-0.345582,1.281557, -0.403877,-0.879274,0.252509,-2.901159,-0.619504,1.284058, -0.11636,-0.749063,0.652201,-2.616467,-0.511373,1.344133, -0.171647,-0.971664,0.162499,-2.90708,-0.345582,1.281557, -0.11636,-0.749063,0.652201,-2.616467,-0.511373,1.344133, 0.215155,-0.464575,0.858999,-2.649338,-0.241719,1.339644, -0.198045,-0.959194,0.201804,-2.971546,0.032038,1.215971, -0.171647,-0.971664,0.162499,-2.90708,-0.345582,1.281557, 0.215155,-0.464575,0.858999,-2.649338,-0.241719,1.339644, -0.198045,-0.959194,0.201804,-2.971546,0.032038,1.215971, 0.215155,-0.464575,0.858999,-2.649338,-0.241719,1.339644, 0.121987,-0.426327,0.896306,-2.687022,0.076781,1.290565, -0.279342,-0.940234,0.19475,-3.044646,0.224321,1.164934, -0.198045,-0.959194,0.201804,-2.971546,0.032038,1.215971, 0.121987,-0.426327,0.896306,-2.687022,0.076781,1.290565, -0.279342,-0.940234,0.19475,-3.044646,0.224321,1.164934, 0.121987,-0.426327,0.896306,-2.687022,0.076781,1.290565, 0.161064,-0.731195,0.662882,-2.787011,0.264495,1.237352, 0.152347,-0.821467,0.549529,-3.112555,0.457376,1.084816, -0.279342,-0.940234,0.19475,-3.044646,0.224321,1.164934, 0.161064,-0.731195,0.662882,-2.787011,0.264495,1.237352, 0.152347,-0.821467,0.549529,-3.112555,0.457376,1.084816, 0.161064,-0.731195,0.662882,-2.787011,0.264495,1.237352, 0.08565,-0.422547,0.902285,-2.79063,0.46881,1.224273, -0.094238,-0.851252,0.516225,-3.19641,0.797564,0.985913, 0.152347,-0.821467,0.549529,-3.112555,0.457376,1.084816, 0.08565,-0.422547,0.902285,-2.79063,0.46881,1.224273, -0.094238,-0.851252,0.516225,-3.19641,0.797564,0.985913, 0.08565,-0.422547,0.902285,-2.79063,0.46881,1.224273, 0.155794,-0.590112,0.792146,-2.825835,0.755899,1.209042, -0.079302,-0.84299,0.532051,-3.244771,1.19554,0.910945, -0.094238,-0.851252,0.516225,-3.19641,0.797564,0.985913, 0.155794,-0.590112,0.792146,-2.825835,0.755899,1.209042, -0.079302,-0.84299,0.532051,-3.244771,1.19554,0.910945, 0.155794,-0.590112,0.792146,-2.825835,0.755899,1.209042, 0.106237,-0.558927,0.822383,-2.930312,1.10358,1.125876, -0.176655,-0.950799,0.254508,-3.27808,1.432418,0.853958, -0.079302,-0.84299,0.532051,-3.244771,1.19554,0.910945, 0.106237,-0.558927,0.822383,-2.930312,1.10358,1.125876, -0.176655,-0.950799,0.254508,-3.27808,1.432418,0.853958, 0.106237,-0.558927,0.822383,-2.930312,1.10358,1.125876, 0.008663,-0.516082,0.856495,-3.028932,1.461517,0.941324, -0.4144,-0.844957,0.338113,-3.338742,1.598933,0.689636, -0.176655,-0.950799,0.254508,-3.27808,1.432418,0.853958, 0.008663,-0.516082,0.856495,-3.028932,1.461517,0.941324, -0.4144,-0.844957,0.338113,-3.338742,1.598933,0.689636, 0.008663,-0.516082,0.856495,-3.028932,1.461517,0.941324, 0.357021,-0.590654,0.723646,-3.08565,1.65734,0.784479, -0.150892,-0.83775,0.524792,-3.395381,1.726325,0.55477, -0.4144,-0.844957,0.338113,-3.338742,1.598933,0.689636, 0.357021,-0.590654,0.723646,-3.08565,1.65734,0.784479, -0.150892,-0.83775,0.524792,-3.395381,1.726325,0.55477, 0.357021,-0.590654,0.723646,-3.08565,1.65734,0.784479, -0.201818,-0.568242,0.797728,-3.109047,1.789477,0.565323, -0.468954,-0.586277,0.660577,-3.35851,1.810253,0.380095, -0.150892,-0.83775,0.524792,-3.395381,1.726325,0.55477, -0.201818,-0.568242,0.797728,-3.109047,1.789477,0.565323, -0.468954,-0.586277,0.660577,-3.35851,1.810253,0.380095, -0.201818,-0.568242,0.797728,-3.109047,1.789477,0.565323, 0.094371,-0.230057,0.968591,-3.07531,1.846,0.363149, 0.009712,0.399549,0.91666,-2.687162,-1.539807,0.988048, -0.004413,-0.170526,0.985343,-2.566746,-1.211312,1.167101, 0.095733,-0.224552,0.969748,-2.765069,-1.561164,1.084313, -0.951862,0.098243,0.290356,-2.462835,-1.3055,0.966395, -0.822733,0.223687,0.522565,-2.306662,-1.116976,0.961238, 0.074896,0.047734,0.996048,-2.299356,-1.025449,1.044687, -0.951862,0.098243,0.290356,-2.462835,-1.3055,0.966395, 0.074896,0.047734,0.996048,-2.299356,-1.025449,1.044687, -0.004413,-0.170526,0.985343,-2.566746,-1.211312,1.167101, 0.009712,0.399549,0.91666,-2.687162,-1.539807,0.988048, -0.995081,-0.092251,-0.036114,-2.591357,-1.510845,0.88547, -0.951862,0.098243,0.290356,-2.462835,-1.3055,0.966395, 0.009712,0.399549,0.91666,-2.687162,-1.539807,0.988048, -0.951862,0.098243,0.290356,-2.462835,-1.3055,0.966395, -0.004413,-0.170526,0.985343,-2.566746,-1.211312,1.167101, 0.247956,0.087485,-0.964813,1.772999,-2.230292,0.64494, 0.81802,-0.47123,0.329827,1.747671,-2.067518,0.638841, 0.761939,0.13671,-0.633055,1.945206,-2.015769,0.672724, 0.247956,0.087485,-0.964813,1.772999,-2.230292,0.64494, 0.761939,0.13671,-0.633055,1.945206,-2.015769,0.672724, -0.121543,0.046,-0.99152,1.921881,-2.157616,0.692678, 0.70745,-0.193334,0.679806,2.13239,1.755821,0.180271, 0.756976,-0.653442,0,2.128139,1.788397,0, -0.385788,0.922588,0,2.042206,1.777154,0, 0.70745,-0.193334,0.679806,2.13239,1.755821,0.180271, -0.385788,0.922588,0,2.042206,1.777154,0, 0.411872,0.04507,0.910127,2.069379,1.727818,0.212746, -0.149005,-0.65467,0.741084,-2.862576,-1.546894,1.117139, -0.351476,-0.711504,0.608463,-2.725776,-1.214862,1.190384, -0.461794,0.113692,0.879671,-2.955052,-1.49684,1.128812, -0.18119,-0.970212,0.160805,-3.063133,-1.440555,1.090926, 0.059023,-0.965365,0.25414,-3.188954,-1.408279,0.963611, -0.46316,0.228643,0.856274,-3.357996,-1.811803,0.975625, -0.18119,-0.970212,0.160805,-3.063133,-1.440555,1.090926, -0.46316,0.228643,0.856274,-3.357996,-1.811803,0.975625, -0.431118,-0.034268,0.901645,-3.23261,-1.834299,1.087832, -0.351476,-0.711504,0.608463,-2.725776,-1.214862,1.190384, -0.299215,-0.929389,0.216115,-2.982676,-1.264649,1.133596, -0.18119,-0.970212,0.160805,-3.063133,-1.440555,1.090926, -0.351476,-0.711504,0.608463,-2.725776,-1.214862,1.190384, -0.18119,-0.970212,0.160805,-3.063133,-1.440555,1.090926, -0.461794,0.113692,0.879671,-2.955052,-1.49684,1.128812, 0.059023,-0.965365,0.25414,-3.188954,-1.408279,0.963611, 0.515412,-0.714946,-0.472444,-3.319817,-1.365015,0.886015, 0.737412,0.542596,0.402261,-3.36599,-1.48517,0.888076, 0.059023,-0.965365,0.25414,-3.188954,-1.408279,0.963611, 0.737412,0.542596,0.402261,-3.36599,-1.48517,0.888076, -0.508357,0.250892,0.823787,-3.342096,-1.533989,0.921628, 0.059023,-0.965365,0.25414,-3.188954,-1.408279,0.963611, -0.508357,0.250892,0.823787,-3.342096,-1.533989,0.921628, -0.46316,0.228643,0.856274,-3.357996,-1.811803,0.975625, -0.037581,-0.042039,-0.998409,-2.964215,-1.978727,0.776572, -0.732521,-0.474279,0.488336,-2.811581,-1.79821,0.712737, 0.942117,-0.292664,0.163592,-2.734184,-1.717948,0.749581, -0.037581,-0.042039,-0.998409,-2.964215,-1.978727,0.776572, 0.942117,-0.292664,0.163592,-2.734184,-1.717948,0.749581, -0.11646,-0.017993,-0.993032,-2.892438,-1.95081,0.87812, 0.942117,-0.292664,0.163592,-2.734184,-1.717948,0.749581, -0.13251,0.440061,0.888137,-2.837147,-1.791733,0.921563, -0.11646,-0.017993,-0.993032,-2.892438,-1.95081,0.87812, -0.674431,0.094186,-0.732306,-3.04661,-2.510881,0.900772, 0.780958,0.624512,0.00945,-3.132772,-2.528669,0.848639, -0.039603,0.339955,0.939607,-3.144012,-2.333635,0.829994, -0.674431,0.094186,-0.732306,-3.04661,-2.510881,0.900772, -0.039603,0.339955,0.939607,-3.144012,-2.333635,0.829994, 0.339875,0.026681,-0.940092,-3.030605,-2.311222,0.88433, 0.245984,0.029506,0.968825,-3.223286,-3.00178,1.126176, 0.567548,-0.015056,0.823203,-3.26181,-2.821069,1.088218, 0.71789,-0.165877,0.676106,-3.32033,-2.827513,1.063914, 0.245984,0.029506,0.968825,-3.223286,-3.00178,1.126176, 0.71789,-0.165877,0.676106,-3.32033,-2.827513,1.063914, 0.788485,-0.288832,0.543017,-3.302419,-3.017921,1.128514, 0.701058,-0.463233,0.542155,-2.986345,-2.93377,1.087679, 0.705477,-0.524425,0.47674,-3.053267,-2.764905,1.043008, -0.119083,0.074969,0.99005,-3.141072,-2.785287,1.032318, 0.701058,-0.463233,0.542155,-2.986345,-2.93377,1.087679, -0.119083,0.074969,0.99005,-3.141072,-2.785287,1.032318, 0.021785,0.053611,0.998324,-3.107105,-2.947818,1.092235, 0.23503,0.016105,0.971855,-2.946527,-2.939327,0.986343, 0.441943,-0.143195,0.88554,-3.016419,-2.765091,0.966671, 0.705477,-0.524425,0.47674,-3.053267,-2.764905,1.043008, 0.23503,0.016105,0.971855,-2.946527,-2.939327,0.986343, 0.705477,-0.524425,0.47674,-3.053267,-2.764905,1.043008, 0.701058,-0.463233,0.542155,-2.986345,-2.93377,1.087679, 0.586456,-0.375618,0.717621,-3.301857,-3.074776,1.114869, 0.245984,0.029506,0.968825,-3.223286,-3.00178,1.126176, 0.788485,-0.288832,0.543017,-3.302419,-3.017921,1.128514, 0.585043,-0.503499,0.635777,-3.316551,-3.168932,1.121229, -0.140754,0.08766,0.986156,-3.227676,-3.14166,1.103969, 0.586456,-0.375618,0.717621,-3.301857,-3.074776,1.114869, 0.085126,0.114843,0.98973,-3.217306,-3.187686,1.075214, -0.140754,0.08766,0.986156,-3.227676,-3.14166,1.103969, 0.585043,-0.503499,0.635777,-3.316551,-3.168932,1.121229, 0.07463,0.029476,0.996776,-2.90901,-3.084482,1.089147, -0.161613,0.16539,0.972896,-2.884711,-3.063896,0.993766, 0.23503,0.016105,0.971855,-2.946527,-2.939327,0.986343, 0.07463,0.029476,0.996776,-2.90901,-3.084482,1.089147, 0.23503,0.016105,0.971855,-2.946527,-2.939327,0.986343, 0.701058,-0.463233,0.542155,-2.986345,-2.93377,1.087679, -0.119083,0.074969,0.99005,-3.141072,-2.785287,1.032318, -0.347185,0.293858,0.890567,-3.196508,-2.788166,1.045431, -0.225282,0.274902,0.934707,-3.177108,-2.979305,1.139084, -0.119083,0.074969,0.99005,-3.141072,-2.785287,1.032318, -0.225282,0.274902,0.934707,-3.177108,-2.979305,1.139084, 0.021785,0.053611,0.998324,-3.107105,-2.947818,1.092235, -0.225282,0.274902,0.934707,-3.177108,-2.979305,1.139084, -0.347185,0.293858,0.890567,-3.196508,-2.788166,1.045431, 0.567548,-0.015056,0.823203,-3.26181,-2.821069,1.088218, -0.225282,0.274902,0.934707,-3.177108,-2.979305,1.139084, 0.567548,-0.015056,0.823203,-3.26181,-2.821069,1.088218, 0.245984,0.029506,0.968825,-3.223286,-3.00178,1.126176, -0.921044,0.324519,0.215325,-3.330406,-3.18519,0.950058, 0.585043,-0.503499,0.635777,-3.316551,-3.168932,1.121229, 0.586456,-0.375618,0.717621,-3.301857,-3.074776,1.114869, -0.921044,0.324519,0.215325,-3.330406,-3.18519,0.950058, 0.586456,-0.375618,0.717621,-3.301857,-3.074776,1.114869, -0.904362,0.426369,-0.018424,-3.333954,-3.058673,0.974748, -0.588311,0.26373,0.764419,-3.223246,-3.225388,0.976573, 0.085126,0.114843,0.98973,-3.217306,-3.187686,1.075214, 0.585043,-0.503499,0.635777,-3.316551,-3.168932,1.121229, -0.588311,0.26373,0.764419,-3.223246,-3.225388,0.976573, 0.585043,-0.503499,0.635777,-3.316551,-3.168932,1.121229, -0.921044,0.324519,0.215325,-3.330406,-3.18519,0.950058, -0.64352,0.086605,-0.760514,-3.11957,-3.183977,0.870739, -0.588311,0.26373,0.764419,-3.223246,-3.225388,0.976573, -0.921044,0.324519,0.215325,-3.330406,-3.18519,0.950058, -0.64352,0.086605,-0.760514,-3.11957,-3.183977,0.870739, -0.921044,0.324519,0.215325,-3.330406,-3.18519,0.950058, -0.190279,0.223108,-0.956042,-3.294389,-3.166225,0.842823, -0.121989,0.019056,-0.992349,-3.256731,-3.032131,0.849693, -0.190279,0.223108,-0.956042,-3.294389,-3.166225,0.842823, -0.921044,0.324519,0.215325,-3.330406,-3.18519,0.950058, -0.121989,0.019056,-0.992349,-3.256731,-3.032131,0.849693, -0.921044,0.324519,0.215325,-3.330406,-3.18519,0.950058, -0.904362,0.426369,-0.018424,-3.333954,-3.058673,0.974748, -0.904362,0.426369,-0.018424,-3.333954,-3.058673,0.974748, -0.149743,-0.291108,-0.944898,-3.339637,-2.846837,0.966368, -0.146645,-0.575935,-0.804235,-3.300372,-2.795728,0.878984, -0.904362,0.426369,-0.018424,-3.333954,-3.058673,0.974748, -0.146645,-0.575935,-0.804235,-3.300372,-2.795728,0.878984, -0.121989,0.019056,-0.992349,-3.256731,-3.032131,0.849693, 0.021785,0.053611,0.998324,-3.107105,-2.947818,1.092235, -0.541406,0.227835,0.809302,-3.03125,-3.09594,1.106355, 0.07463,0.029476,0.996776,-2.90901,-3.084482,1.089147, 0.021785,0.053611,0.998324,-3.107105,-2.947818,1.092235, 0.07463,0.029476,0.996776,-2.90901,-3.084482,1.089147, 0.701058,-0.463233,0.542155,-2.986345,-2.93377,1.087679, 0.021785,0.053611,0.998324,-3.107105,-2.947818,1.092235, -0.225282,0.274902,0.934707,-3.177108,-2.979305,1.139084, -0.125911,-0.68432,-0.718229,-3.121673,-3.120319,1.136456, 0.021785,0.053611,0.998324,-3.107105,-2.947818,1.092235, -0.125911,-0.68432,-0.718229,-3.121673,-3.120319,1.136456, -0.541406,0.227835,0.809302,-3.03125,-3.09594,1.106355, 0.245984,0.029506,0.968825,-3.223286,-3.00178,1.126176, 0.535863,0.090315,-0.83946,-3.169546,-3.135273,1.128247, -0.125911,-0.68432,-0.718229,-3.121673,-3.120319,1.136456, 0.245984,0.029506,0.968825,-3.223286,-3.00178,1.126176, -0.125911,-0.68432,-0.718229,-3.121673,-3.120319,1.136456, -0.225282,0.274902,0.934707,-3.177108,-2.979305,1.139084, 0.085126,0.114843,0.98973,-3.217306,-3.187686,1.075214, 0.535863,0.090315,-0.83946,-3.169546,-3.135273,1.128247, -0.140754,0.08766,0.986156,-3.227676,-3.14166,1.103969, -0.140754,0.08766,0.986156,-3.227676,-3.14166,1.103969, 0.535863,0.090315,-0.83946,-3.169546,-3.135273,1.128247, 0.245984,0.029506,0.968825,-3.223286,-3.00178,1.126176, -0.140754,0.08766,0.986156,-3.227676,-3.14166,1.103969, 0.245984,0.029506,0.968825,-3.223286,-3.00178,1.126176, 0.586456,-0.375618,0.717621,-3.301857,-3.074776,1.114869, 0.788485,-0.288832,0.543017,-3.302419,-3.017921,1.128514, -0.904362,0.426369,-0.018424,-3.333954,-3.058673,0.974748, 0.586456,-0.375618,0.717621,-3.301857,-3.074776,1.114869, -0.904362,0.426369,-0.018424,-3.333954,-3.058673,0.974748, 0.788485,-0.288832,0.543017,-3.302419,-3.017921,1.128514, 0.71789,-0.165877,0.676106,-3.32033,-2.827513,1.063914, -0.904362,0.426369,-0.018424,-3.333954,-3.058673,0.974748, 0.71789,-0.165877,0.676106,-3.32033,-2.827513,1.063914, -0.149743,-0.291108,-0.944898,-3.339637,-2.846837,0.966368, 0.236645,-0.06852,-0.969177,-2.928681,-3.072892,0.924772, 0.091886,-0.230243,-0.968785,-3.008412,-2.89976,0.904635, 0.23503,0.016105,0.971855,-2.946527,-2.939327,0.986343, 0.236645,-0.06852,-0.969177,-2.928681,-3.072892,0.924772, 0.23503,0.016105,0.971855,-2.946527,-2.939327,0.986343, -0.161613,0.16539,0.972896,-2.884711,-3.063896,0.993766, -0.888643,-0.077171,0.45206,-3.166971,-3.002766,0.812106, -0.64352,0.086605,-0.760514,-3.11957,-3.183977,0.870739, -0.190279,0.223108,-0.956042,-3.294389,-3.166225,0.842823, -0.121989,0.019056,-0.992349,-3.256731,-3.032131,0.849693, -0.888643,-0.077171,0.45206,-3.166971,-3.002766,0.812106, -0.190279,0.223108,-0.956042,-3.294389,-3.166225,0.842823, -0.888643,-0.077171,0.45206,-3.166971,-3.002766,0.812106, -0.891992,-0.016937,0.451734,-3.06981,-2.928755,0.845236, -0.860798,0.234294,0.451812,-3.011987,-3.092,0.860973, -0.888643,-0.077171,0.45206,-3.166971,-3.002766,0.812106, -0.860798,0.234294,0.451812,-3.011987,-3.092,0.860973, -0.64352,0.086605,-0.760514,-3.11957,-3.183977,0.870739, -0.891992,-0.016937,0.451734,-3.06981,-2.928755,0.845236, 0.091886,-0.230243,-0.968785,-3.008412,-2.89976,0.904635, 0.236645,-0.06852,-0.969177,-2.928681,-3.072892,0.924772, -0.891992,-0.016937,0.451734,-3.06981,-2.928755,0.845236, 0.236645,-0.06852,-0.969177,-2.928681,-3.072892,0.924772, -0.860798,0.234294,0.451812,-3.011987,-3.092,0.860973, -0.686439,0.576002,0.443872,-3.184812,-2.768053,0.850127, -0.369855,0.817227,0.441981,-3.137383,-2.776449,0.844117, -0.891992,-0.016937,0.451734,-3.06981,-2.928755,0.845236, -0.686439,0.576002,0.443872,-3.184812,-2.768053,0.850127, -0.891992,-0.016937,0.451734,-3.06981,-2.928755,0.845236, -0.888643,-0.077171,0.45206,-3.166971,-3.002766,0.812106, 0.011581,0.887039,0.461548,-3.040038,-2.780893,0.914614, 0.091886,-0.230243,-0.968785,-3.008412,-2.89976,0.904635, -0.891992,-0.016937,0.451734,-3.06981,-2.928755,0.845236, 0.011581,0.887039,0.461548,-3.040038,-2.780893,0.914614, -0.891992,-0.016937,0.451734,-3.06981,-2.928755,0.845236, -0.369855,0.817227,0.441981,-3.137383,-2.776449,0.844117, -0.146645,-0.575935,-0.804235,-3.300372,-2.795728,0.878984, -0.686439,0.576002,0.443872,-3.184812,-2.768053,0.850127, -0.888643,-0.077171,0.45206,-3.166971,-3.002766,0.812106, -0.146645,-0.575935,-0.804235,-3.300372,-2.795728,0.878984, -0.888643,-0.077171,0.45206,-3.166971,-3.002766,0.812106, -0.121989,0.019056,-0.992349,-3.256731,-3.032131,0.849693, 0.091886,-0.230243,-0.968785,-3.008412,-2.89976,0.904635, 0.011581,0.887039,0.461548,-3.040038,-2.780893,0.914614, 0.441943,-0.143195,0.88554,-3.016419,-2.765091,0.966671, 0.091886,-0.230243,-0.968785,-3.008412,-2.89976,0.904635, 0.441943,-0.143195,0.88554,-3.016419,-2.765091,0.966671, 0.23503,0.016105,0.971855,-2.946527,-2.939327,0.986343, 0.840313,0.535537,-0.084107,-3.078699,-2.553982,1.046834, 0.851754,0.52393,-0.003494,-3.162498,-2.556375,1.058409, -0.119083,0.074969,0.99005,-3.141072,-2.785287,1.032318, 0.840313,0.535537,-0.084107,-3.078699,-2.553982,1.046834, -0.119083,0.074969,0.99005,-3.141072,-2.785287,1.032318, 0.705477,-0.524425,0.47674,-3.053267,-2.764905,1.043008, -0.99734,0.010762,-0.072093,-3.347304,-2.573628,0.955211, 0.308087,0.149605,-0.939522,-3.372066,-2.569159,0.904785, -0.149743,-0.291108,-0.944898,-3.339637,-2.846837,0.966368, -0.99734,0.010762,-0.072093,-3.347304,-2.573628,0.955211, -0.149743,-0.291108,-0.944898,-3.339637,-2.846837,0.966368, 0.71789,-0.165877,0.676106,-3.32033,-2.827513,1.063914, 0.163153,0.19945,0.96623,-3.251541,-2.56405,1.023627, -0.99734,0.010762,-0.072093,-3.347304,-2.573628,0.955211, 0.71789,-0.165877,0.676106,-3.32033,-2.827513,1.063914, 0.163153,0.19945,0.96623,-3.251541,-2.56405,1.023627, 0.71789,-0.165877,0.676106,-3.32033,-2.827513,1.063914, 0.567548,-0.015056,0.823203,-3.26181,-2.821069,1.088218, 0.851754,0.52393,-0.003494,-3.162498,-2.556375,1.058409, 0.163153,0.19945,0.96623,-3.251541,-2.56405,1.023627, 0.567548,-0.015056,0.823203,-3.26181,-2.821069,1.088218, 0.851754,0.52393,-0.003494,-3.162498,-2.556375,1.058409, 0.567548,-0.015056,0.823203,-3.26181,-2.821069,1.088218, -0.347185,0.293858,0.890567,-3.196508,-2.788166,1.045431, 0.851754,0.52393,-0.003494,-3.162498,-2.556375,1.058409, -0.347185,0.293858,0.890567,-3.196508,-2.788166,1.045431, -0.119083,0.074969,0.99005,-3.141072,-2.785287,1.032318, 0.705477,-0.524425,0.47674,-3.053267,-2.764905,1.043008, 0.441943,-0.143195,0.88554,-3.016419,-2.765091,0.966671, -0.178214,-0.110838,-0.977729,-3.022819,-2.52224,0.979148, 0.705477,-0.524425,0.47674,-3.053267,-2.764905,1.043008, -0.178214,-0.110838,-0.977729,-3.022819,-2.52224,0.979148, 0.840313,0.535537,-0.084107,-3.078699,-2.553982,1.046834, -0.146645,-0.575935,-0.804235,-3.300372,-2.795728,0.878984, -0.149743,-0.291108,-0.944898,-3.339637,-2.846837,0.966368, 0.308087,0.149605,-0.939522,-3.372066,-2.569159,0.904785, -0.146645,-0.575935,-0.804235,-3.300372,-2.795728,0.878984, 0.308087,0.149605,-0.939522,-3.372066,-2.569159,0.904785, 0.722847,0.455753,-0.519404,-3.297886,-2.54902,0.861657, -0.686439,0.576002,0.443872,-3.184812,-2.768053,0.850127, -0.146645,-0.575935,-0.804235,-3.300372,-2.795728,0.878984, 0.722847,0.455753,-0.519404,-3.297886,-2.54902,0.861657, -0.686439,0.576002,0.443872,-3.184812,-2.768053,0.850127, 0.722847,0.455753,-0.519404,-3.297886,-2.54902,0.861657, 0.61389,0.702597,0.359856,-3.240554,-2.555467,0.856262, -0.369855,0.817227,0.441981,-3.137383,-2.776449,0.844117, -0.686439,0.576002,0.443872,-3.184812,-2.768053,0.850127, 0.61389,0.702597,0.359856,-3.240554,-2.555467,0.856262, -0.369855,0.817227,0.441981,-3.137383,-2.776449,0.844117, 0.61389,0.702597,0.359856,-3.240554,-2.555467,0.856262, 0.780958,0.624512,0.00945,-3.132772,-2.528669,0.848639, 0.011581,0.887039,0.461548,-3.040038,-2.780893,0.914614, -0.369855,0.817227,0.441981,-3.137383,-2.776449,0.844117, 0.780958,0.624512,0.00945,-3.132772,-2.528669,0.848639, 0.011581,0.887039,0.461548,-3.040038,-2.780893,0.914614, 0.780958,0.624512,0.00945,-3.132772,-2.528669,0.848639, -0.674431,0.094186,-0.732306,-3.04661,-2.510881,0.900772, 0.441943,-0.143195,0.88554,-3.016419,-2.765091,0.966671, 0.011581,0.887039,0.461548,-3.040038,-2.780893,0.914614, -0.674431,0.094186,-0.732306,-3.04661,-2.510881,0.900772, 0.441943,-0.143195,0.88554,-3.016419,-2.765091,0.966671, -0.674431,0.094186,-0.732306,-3.04661,-2.510881,0.900772, -0.178214,-0.110838,-0.977729,-3.022819,-2.52224,0.979148, -0.521685,-0.261319,0.812131,-3.335942,-1.365685,0.72459, 0.515412,-0.714946,-0.472444,-3.319817,-1.365015,0.886015, 0.249604,-0.855993,-0.452741,-3.27751,-1.177346,0.9153, -0.521685,-0.261319,0.812131,-3.335942,-1.365685,0.72459, 0.249604,-0.855993,-0.452741,-3.27751,-1.177346,0.9153, -0.872722,-0.174901,0.455813,-3.27979,-1.162072,0.784602, -0.012978,-0.998326,-0.056357,-3.238094,-0.979377,0.961631, 0.074429,-0.99521,-0.063385,-3.233333,-0.683782,1.015512, -0.99574,-0.082547,0.041071,-3.283698,-0.730967,0.793898, -0.012978,-0.998326,-0.056357,-3.238094,-0.979377,0.961631, -0.99574,-0.082547,0.041071,-3.283698,-0.730967,0.793898, -0.874358,-0.225285,0.429819,-3.25121,-0.948205,0.819868, 0.249604,-0.855993,-0.452741,-3.27751,-1.177346,0.9153, -0.012978,-0.998326,-0.056357,-3.238094,-0.979377,0.961631, -0.874358,-0.225285,0.429819,-3.25121,-0.948205,0.819868, 0.249604,-0.855993,-0.452741,-3.27751,-1.177346,0.9153, -0.874358,-0.225285,0.429819,-3.25121,-0.948205,0.819868, -0.872722,-0.174901,0.455813,-3.27979,-1.162072,0.784602, -0.99574,-0.082547,0.041071,-3.283698,-0.730967,0.793898, -0.896964,-0.287307,0.336022,-3.406618,-0.343461,0.746456, -0.970971,-0.219011,0.096178,-3.415655,-0.308965,0.671045, -0.98615,-0.150918,0.068783,-3.631292,0.701013,0.420276, -0.736087,-0.675143,0.048562,-3.664355,0.932851,0.370749, -0.845931,-0.255219,-0.468256,-3.57817,0.837714,0.288502, -0.98615,-0.150918,0.068783,-3.631292,0.701013,0.420276, -0.845931,-0.255219,-0.468256,-3.57817,0.837714,0.288502, -0.794709,-0.185222,-0.57804,-3.556552,0.704883,0.28063, -0.84728,-0.52968,0.039439,-3.570384,0.385564,0.52448, -0.98615,-0.150918,0.068783,-3.631292,0.701013,0.420276, -0.794709,-0.185222,-0.57804,-3.556552,0.704883,0.28063, -0.84728,-0.52968,0.039439,-3.570384,0.385564,0.52448, -0.794709,-0.185222,-0.57804,-3.556552,0.704883,0.28063, -0.17902,-0.308668,0.934171,-3.536654,0.442277,0.322, -0.815087,-0.388054,0.430171,-3.520188,0.140164,0.618561, -0.84728,-0.52968,0.039439,-3.570384,0.385564,0.52448, -0.17902,-0.308668,0.934171,-3.536654,0.442277,0.322, -0.815087,-0.388054,0.430171,-3.520188,0.140164,0.618561, -0.17902,-0.308668,0.934171,-3.536654,0.442277,0.322, -0.136917,-0.20176,0.969818,-3.51684,0.149002,0.430359, -0.945906,-0.323169,0.028687,-3.458251,-0.12595,0.731712, -0.815087,-0.388054,0.430171,-3.520188,0.140164,0.618561, -0.136917,-0.20176,0.969818,-3.51684,0.149002,0.430359, -0.945906,-0.323169,0.028687,-3.458251,-0.12595,0.731712, -0.136917,-0.20176,0.969818,-3.51684,0.149002,0.430359, -0.739347,0.031953,0.672566,-3.470778,-0.078218,0.546398, -0.896964,-0.287307,0.336022,-3.406618,-0.343461,0.746456, -0.945906,-0.323169,0.028687,-3.458251,-0.12595,0.731712, -0.739347,0.031953,0.672566,-3.470778,-0.078218,0.546398, -0.896964,-0.287307,0.336022,-3.406618,-0.343461,0.746456, -0.739347,0.031953,0.672566,-3.470778,-0.078218,0.546398, -0.970971,-0.219011,0.096178,-3.415655,-0.308965,0.671045, -0.989171,0.146765,0,-3.599077,0.796217,0, -0.845931,-0.255219,-0.468256,-3.57817,0.837714,0.288502, -0.736087,-0.675143,0.048562,-3.664355,0.932851,0.370749, -0.989171,0.146765,0,-3.599077,0.796217,0, -0.736087,-0.675143,0.048562,-3.664355,0.932851,0.370749, -0.996668,0.081567,0,-3.623861,0.911561,0, -0.454242,-0.890878,-0.000928,-3.709741,1.351194,0.211745, -0.848349,-0.120539,-0.515533,-3.709827,1.417763,0, -0.844095,-0.536194,0,-3.601668,1.293049,0, -0.354058,-0.732075,-0.581987,-3.701634,1.27265,0.270469, -0.454242,-0.890878,-0.000928,-3.709741,1.351194,0.211745, -0.844095,-0.536194,0,-3.601668,1.293049,0, -0.587869,-0.808404,0.029894,-3.695872,1.156978,0.316829, -0.354058,-0.732075,-0.581987,-3.701634,1.27265,0.270469, -0.844095,-0.536194,0,-3.601668,1.293049,0, -0.587869,-0.808404,0.029894,-3.695872,1.156978,0.316829, -0.844095,-0.536194,0,-3.601668,1.293049,0, -0.946116,-0.323827,0,-3.608593,1.163581,0, -0.581301,-0.608503,-0.540197,-3.672431,1.044224,0.364991, -0.587869,-0.808404,0.029894,-3.695872,1.156978,0.316829, -0.946116,-0.323827,0,-3.608593,1.163581,0, -0.581301,-0.608503,-0.540197,-3.672431,1.044224,0.364991, -0.946116,-0.323827,0,-3.608593,1.163581,0, -0.997181,-0.075036,0,-3.622326,1.005378,0, -0.736087,-0.675143,0.048562,-3.664355,0.932851,0.370749, -0.581301,-0.608503,-0.540197,-3.672431,1.044224,0.364991, -0.997181,-0.075036,0,-3.622326,1.005378,0, -0.736087,-0.675143,0.048562,-3.664355,0.932851,0.370749, -0.997181,-0.075036,0,-3.622326,1.005378,0, -0.996668,0.081567,0,-3.623861,0.911561,0, 0.166377,-0.157108,0.973466,-3.86074,-0.188349,-0.024962, 0.238843,0.101951,0.965691,-3.84599,-0.18882,0.019164, 0.604306,0.20436,0.770098,-3.81743,0.150343,0.048629, 0.166377,-0.157108,0.973466,-3.86074,-0.188349,-0.024962, 0.604306,0.20436,0.770098,-3.81743,0.150343,0.048629, 0.054863,-0.132814,0.989621,-3.828633,0.149083,0, 0.054863,-0.132814,0.989621,-3.828633,0.149083,0, 0.604306,0.20436,0.770098,-3.81743,0.150343,0.048629, 0.02054,-0.128179,0.991538,-3.84447,0.498176,0.053132, 0.054863,-0.132814,0.989621,-3.828633,0.149083,0, 0.02054,-0.128179,0.991538,-3.84447,0.498176,0.053132, -0.996511,-0.083465,-0.000062,-3.856649,0.496801,0, -0.996511,-0.083465,-0.000062,-3.856649,0.496801,0, 0.02054,-0.128179,0.991538,-3.84447,0.498176,0.053132, 0.193291,-0.0748,0.978286,-3.88734,1.003866,0.057635, -0.996511,-0.083465,-0.000062,-3.856649,0.496801,0, 0.193291,-0.0748,0.978286,-3.88734,1.003866,0.057635, -0.999862,-0.016634,0,-3.900566,1.002504,0, -0.999862,-0.016634,0,-3.900566,1.002504,0, 0.193291,-0.0748,0.978286,-3.88734,1.003866,0.057635, 0.133637,0.26732,0.954296,-3.86082,1.479723,0.062137, -0.999862,-0.016634,0,-3.900566,1.002504,0, 0.133637,0.26732,0.954296,-3.86082,1.479723,0.062137, -0.964752,0.26316,0,-3.87514,1.480358,0, -0.964752,0.26316,0,-3.87514,1.480358,0, 0.133637,0.26732,0.954296,-3.86082,1.479723,0.062137, 0.555353,0.507651,0.65869,-3.698925,1.787941,0.06664, -0.964752,0.26316,0,-3.87514,1.480358,0, 0.555353,0.507651,0.65869,-3.698925,1.787941,0.06664, -0.766357,0.642415,0,-3.712832,1.794492,0, -0.766357,0.642415,0,-3.712832,1.794492,0, 0.555353,0.507651,0.65869,-3.698925,1.787941,0.06664, 0.823156,0.134626,0.551624,-3.469715,1.961504,0.071141, -0.766357,0.642415,0,-3.712832,1.794492,0, 0.823156,0.134626,0.551624,-3.469715,1.961504,0.071141, -0.410619,0.911807,0,-3.47843,1.975409,0, -0.410619,0.911807,0,-3.47843,1.975409,0, 0.823156,0.134626,0.551624,-3.469715,1.961504,0.071141, 0.707626,-0.125604,0.695334,-3.238225,2.005405,0.075645, -0.410619,0.911807,0,-3.47843,1.975409,0, 0.707626,-0.125604,0.695334,-3.238225,2.005405,0.075645, -0.433128,-0.901332,0,-3.242148,2.021387,0, 0.238843,0.101951,0.965691,-3.84599,-0.18882,0.019164, 0.546619,0.025488,0.836993,-3.805688,-0.190106,0.051472, 0.836108,-0.069219,0.54418,-3.786822,0.153783,0.084233, 0.238843,0.101951,0.965691,-3.84599,-0.18882,0.019164, 0.836108,-0.069219,0.54418,-3.786822,0.153783,0.084233, 0.604306,0.20436,0.770098,-3.81743,0.150343,0.048629, 0.604306,0.20436,0.770098,-3.81743,0.150343,0.048629, 0.836108,-0.069219,0.54418,-3.786822,0.153783,0.084233, 0.412833,-0.156454,0.897269,-3.811194,0.501935,0.092033, 0.604306,0.20436,0.770098,-3.81743,0.150343,0.048629, 0.412833,-0.156454,0.897269,-3.811194,0.501935,0.092033, 0.02054,-0.128179,0.991538,-3.84447,0.498176,0.053132, 0.02054,-0.128179,0.991538,-3.84447,0.498176,0.053132, 0.412833,-0.156454,0.897269,-3.811194,0.501935,0.092033, 0.108828,-0.182644,0.977137,-3.851206,1.007586,0.099831, 0.02054,-0.128179,0.991538,-3.84447,0.498176,0.053132, 0.108828,-0.182644,0.977137,-3.851206,1.007586,0.099831, 0.193291,-0.0748,0.978286,-3.88734,1.003866,0.057635, 0.193291,-0.0748,0.978286,-3.88734,1.003866,0.057635, 0.108828,-0.182644,0.977137,-3.851206,1.007586,0.099831, 0.746476,-0.187741,0.638379,-3.821694,1.477989,0.107631, 0.193291,-0.0748,0.978286,-3.88734,1.003866,0.057635, 0.746476,-0.187741,0.638379,-3.821694,1.477989,0.107631, 0.133637,0.26732,0.954296,-3.86082,1.479723,0.062137, 0.133637,0.26732,0.954296,-3.86082,1.479723,0.062137, 0.746476,-0.187741,0.638379,-3.821694,1.477989,0.107631, 0.883859,-0.211187,0.417364,-3.660928,1.770041,0.115431, 0.133637,0.26732,0.954296,-3.86082,1.479723,0.062137, 0.883859,-0.211187,0.417364,-3.660928,1.770041,0.115431, 0.555353,0.507651,0.65869,-3.698925,1.787941,0.06664, 0.555353,0.507651,0.65869,-3.698925,1.787941,0.06664, 0.883859,-0.211187,0.417364,-3.660928,1.770041,0.115431, 0.544736,0.449333,0.708069,-3.445903,1.923509,0.123229, 0.555353,0.507651,0.65869,-3.698925,1.787941,0.06664, 0.544736,0.449333,0.708069,-3.445903,1.923509,0.123229, 0.823156,0.134626,0.551624,-3.469715,1.961504,0.071141, 0.823156,0.134626,0.551624,-3.469715,1.961504,0.071141, 0.544736,0.449333,0.708069,-3.445903,1.923509,0.123229, 0.722,0.398916,0.565317,-3.227504,1.961738,0.131029, 0.823156,0.134626,0.551624,-3.469715,1.961504,0.071141, 0.722,0.398916,0.565317,-3.227504,1.961738,0.131029, 0.707626,-0.125604,0.695334,-3.238225,2.005405,0.075645, 0.546619,0.025488,0.836993,-3.805688,-0.190106,0.051472, 0.711192,0.127662,0.69131,-3.75063,-0.191863,0.063305, 0.269343,0.329305,0.904993,-3.745007,0.158482,0.097274, 0.546619,0.025488,0.836993,-3.805688,-0.190106,0.051472, 0.269343,0.329305,0.904993,-3.745007,0.158482,0.097274, 0.836108,-0.069219,0.54418,-3.786822,0.153783,0.084233, 0.836108,-0.069219,0.54418,-3.786822,0.153783,0.084233, 0.269343,0.329305,0.904993,-3.745007,0.158482,0.097274, 0.397989,0.4494,0.799778,-3.765736,0.50707,0.106281, 0.836108,-0.069219,0.54418,-3.786822,0.153783,0.084233, 0.397989,0.4494,0.799778,-3.765736,0.50707,0.106281, 0.412833,-0.156454,0.897269,-3.811194,0.501935,0.092033, 0.412833,-0.156454,0.897269,-3.811194,0.501935,0.092033, 0.397989,0.4494,0.799778,-3.765736,0.50707,0.106281, 0.264978,0.116702,0.957166,-3.80184,1.012668,0.115288, 0.412833,-0.156454,0.897269,-3.811194,0.501935,0.092033, 0.264978,0.116702,0.957166,-3.80184,1.012668,0.115288, 0.108828,-0.182644,0.977137,-3.851206,1.007586,0.099831, 0.108828,-0.182644,0.977137,-3.851206,1.007586,0.099831, 0.264978,0.116702,0.957166,-3.80184,1.012668,0.115288, 0.312982,-0.015529,0.949632,-3.768245,1.475619,0.124295, 0.108828,-0.182644,0.977137,-3.851206,1.007586,0.099831, 0.312982,-0.015529,0.949632,-3.768245,1.475619,0.124295, 0.746476,-0.187741,0.638379,-3.821694,1.477989,0.107631, 0.746476,-0.187741,0.638379,-3.821694,1.477989,0.107631, 0.312982,-0.015529,0.949632,-3.768245,1.475619,0.124295, 0.470021,0.18298,0.863481,-3.609021,1.745588,0.133304, 0.746476,-0.187741,0.638379,-3.821694,1.477989,0.107631, 0.470021,0.18298,0.863481,-3.609021,1.745588,0.133304, 0.883859,-0.211187,0.417364,-3.660928,1.770041,0.115431, 0.883859,-0.211187,0.417364,-3.660928,1.770041,0.115431, 0.470021,0.18298,0.863481,-3.609021,1.745588,0.133304, 0.431712,0.22912,0.872427,-3.413372,1.871604,0.142309, 0.883859,-0.211187,0.417364,-3.660928,1.770041,0.115431, 0.431712,0.22912,0.872427,-3.413372,1.871604,0.142309, 0.544736,0.449333,0.708069,-3.445903,1.923509,0.123229, 0.544736,0.449333,0.708069,-3.445903,1.923509,0.123229, 0.431712,0.22912,0.872427,-3.413372,1.871604,0.142309, 0.722,0.398916,0.565317,-3.227504,1.961738,0.131029, 0.711192,0.127662,0.69131,-3.75063,-0.191863,0.063305, 0.560378,0.257624,0.787151,-3.695565,-0.19362,0.051497, 0.661824,0.260114,0.703086,-3.703185,0.163182,0.084262, 0.711192,0.127662,0.69131,-3.75063,-0.191863,0.063305, 0.661824,0.260114,0.703086,-3.703185,0.163182,0.084262, 0.269343,0.329305,0.904993,-3.745007,0.158482,0.097274, 0.269343,0.329305,0.904993,-3.745007,0.158482,0.097274, 0.661824,0.260114,0.703086,-3.703185,0.163182,0.084262, 0.675892,0.137563,0.724049,-3.720269,0.512205,0.092064, 0.269343,0.329305,0.904993,-3.745007,0.158482,0.097274, 0.675892,0.137563,0.724049,-3.720269,0.512205,0.092064, 0.397989,0.4494,0.799778,-3.765736,0.50707,0.106281, 0.397989,0.4494,0.799778,-3.765736,0.50707,0.106281, 0.675892,0.137563,0.724049,-3.720269,0.512205,0.092064, 0.708269,-0.122725,0.695193,-3.752468,1.017751,0.099865, 0.397989,0.4494,0.799778,-3.765736,0.50707,0.106281, 0.708269,-0.122725,0.695193,-3.752468,1.017751,0.099865, 0.264978,0.116702,0.957166,-3.80184,1.012668,0.115288, 0.264978,0.116702,0.957166,-3.80184,1.012668,0.115288, 0.708269,-0.122725,0.695193,-3.752468,1.017751,0.099865, 0.540204,-0.272055,0.796345,-3.714787,1.473248,0.107668, 0.264978,0.116702,0.957166,-3.80184,1.012668,0.115288, 0.540204,-0.272055,0.796345,-3.714787,1.473248,0.107668, 0.312982,-0.015529,0.949632,-3.768245,1.475619,0.124295, 0.312982,-0.015529,0.949632,-3.768245,1.475619,0.124295, 0.540204,-0.272055,0.796345,-3.714787,1.473248,0.107668, 0.723289,-0.195474,0.662302,-3.557104,1.72113,0.11547, 0.312982,-0.015529,0.949632,-3.768245,1.475619,0.124295, 0.723289,-0.195474,0.662302,-3.557104,1.72113,0.11547, 0.470021,0.18298,0.863481,-3.609021,1.745588,0.133304, 0.470021,0.18298,0.863481,-3.609021,1.745588,0.133304, 0.723289,-0.195474,0.662302,-3.557104,1.72113,0.11547, 0.588787,-0.248294,0.769207,-3.380836,1.819691,0.123273, 0.470021,0.18298,0.863481,-3.609021,1.745588,0.133304, 0.588787,-0.248294,0.769207,-3.380836,1.819691,0.123273, 0.431712,0.22912,0.872427,-3.413372,1.871604,0.142309, 0.560378,0.257624,0.787151,-3.695565,-0.19362,0.051497, 0.274422,-0.24433,0.930051,-3.65524,-0.194907,0.019209, 0.017555,-0.142899,0.989582,-3.672559,0.166625,0.048678, 0.560378,0.257624,0.787151,-3.695565,-0.19362,0.051497, 0.017555,-0.142899,0.989582,-3.672559,0.166625,0.048678, 0.661824,0.260114,0.703086,-3.703185,0.163182,0.084262, 0.661824,0.260114,0.703086,-3.703185,0.163182,0.084262, 0.017555,-0.142899,0.989582,-3.672559,0.166625,0.048678, 0.961046,0.110911,0.253159,-3.686972,0.515966,0.053185, 0.661824,0.260114,0.703086,-3.703185,0.163182,0.084262, 0.961046,0.110911,0.253159,-3.686972,0.515966,0.053185, 0.675892,0.137563,0.724049,-3.720269,0.512205,0.092064, 0.675892,0.137563,0.724049,-3.720269,0.512205,0.092064, 0.961046,0.110911,0.253159,-3.686972,0.515966,0.053185, 0.910294,-0.144636,0.387873,-3.716312,1.021474,0.057693, 0.675892,0.137563,0.724049,-3.720269,0.512205,0.092064, 0.910294,-0.144636,0.387873,-3.716312,1.021474,0.057693, 0.708269,-0.122725,0.695193,-3.752468,1.017751,0.099865, 0.708269,-0.122725,0.695193,-3.752468,1.017751,0.099865, 0.910294,-0.144636,0.387873,-3.716312,1.021474,0.057693, 0.813709,-0.132052,0.566074,-3.675638,1.471512,0.062201, 0.708269,-0.122725,0.695193,-3.752468,1.017751,0.099865, 0.813709,-0.132052,0.566074,-3.675638,1.471512,0.062201, 0.540204,-0.272055,0.796345,-3.714787,1.473248,0.107668, 0.540204,-0.272055,0.796345,-3.714787,1.473248,0.107668, 0.813709,-0.132052,0.566074,-3.675638,1.471512,0.062201, 0.577502,-0.140087,0.804281,-3.519086,1.70322,0.066709, 0.540204,-0.272055,0.796345,-3.714787,1.473248,0.107668, 0.577502,-0.140087,0.804281,-3.519086,1.70322,0.066709, 0.723289,-0.195474,0.662302,-3.557104,1.72113,0.11547, 0.723289,-0.195474,0.662302,-3.557104,1.72113,0.11547, 0.577502,-0.140087,0.804281,-3.519086,1.70322,0.066709, 0.490646,-0.178294,0.852923,-3.357009,1.781675,0.071216, 0.723289,-0.195474,0.662302,-3.557104,1.72113,0.11547, 0.490646,-0.178294,0.852923,-3.357009,1.781675,0.071216, 0.588787,-0.248294,0.769207,-3.380836,1.819691,0.123273, 0.274422,-0.24433,0.930051,-3.65524,-0.194907,0.019209, 0.267717,-0.172975,0.947844,-3.640457,-0.195379,-0.024909, -0.028502,-0.108631,0.993674,-3.661331,0.167886,0.000058, 0.274422,-0.24433,0.930051,-3.65524,-0.194907,0.019209, -0.028502,-0.108631,0.993674,-3.661331,0.167886,0.000058, 0.017555,-0.142899,0.989582,-3.672559,0.166625,0.048678, 0.017555,-0.142899,0.989582,-3.672559,0.166625,0.048678, -0.028502,-0.108631,0.993674,-3.661331,0.167886,0.000058, 0.998889,0.047122,-0.000074,-3.674766,0.517345,-0.000063, 0.017555,-0.142899,0.989582,-3.672559,0.166625,0.048678, 0.998889,0.047122,-0.000074,-3.674766,0.517345,-0.000063, 0.961046,0.110911,0.253159,-3.686972,0.515966,0.053185, 0.961046,0.110911,0.253159,-3.686972,0.515966,0.053185, 0.998889,0.047122,-0.000074,-3.674766,0.517345,-0.000063, 0.999831,-0.018401,-0.000261,-3.703058,1.022838,-0.000069, 0.961046,0.110911,0.253159,-3.686972,0.515966,0.053185, 0.999831,-0.018401,-0.000261,-3.703058,1.022838,-0.000069, 0.910294,-0.144636,0.387873,-3.716312,1.021474,0.057693, 0.910294,-0.144636,0.387873,-3.716312,1.021474,0.057693, 0.999831,-0.018401,-0.000261,-3.703058,1.022838,-0.000069, 0.941293,-0.337592,-0.000186,-3.661286,1.470876,-0.000074, 0.910294,-0.144636,0.387873,-3.716312,1.021474,0.057693, 0.941293,-0.337592,-0.000186,-3.661286,1.470876,-0.000074, 0.813709,-0.132052,0.566074,-3.675638,1.471512,0.062201, 0.813709,-0.132052,0.566074,-3.675638,1.471512,0.062201, 0.941293,-0.337592,-0.000186,-3.661286,1.470876,-0.000074, -0.153783,-0.988105,0,-3.507689,1.700214,0, 0.813709,-0.132052,0.566074,-3.675638,1.471512,0.062201, -0.153783,-0.988105,0,-3.507689,1.700214,0, 0.577502,-0.140087,0.804281,-3.519086,1.70322,0.066709, 0.577502,-0.140087,0.804281,-3.519086,1.70322,0.066709, -0.153783,-0.988105,0,-3.507689,1.700214,0, 0.411442,-0.911436,-0.000099,-3.348274,1.767738,-0.000085, 0.577502,-0.140087,0.804281,-3.519086,1.70322,0.066709, 0.411442,-0.911436,-0.000099,-3.348274,1.767738,-0.000085, 0.490646,-0.178294,0.852923,-3.357009,1.781675,0.071216, 0.267717,-0.172975,0.947844,-3.640457,-0.195379,-0.024909, -0.064166,-0.189382,0.979805,-3.655175,-0.194909,-0.069044, 0.781868,0.537363,0.316106,-3.67251,0.16663,-0.048579, 0.267717,-0.172975,0.947844,-3.640457,-0.195379,-0.024909, 0.781868,0.537363,0.316106,-3.67251,0.16663,-0.048579, -0.028502,-0.108631,0.993674,-3.661331,0.167886,0.000058, -0.028502,-0.108631,0.993674,-3.661331,0.167886,0.000058, 0.781868,0.537363,0.316106,-3.67251,0.16663,-0.048579, 0.891325,0.039302,-0.451658,-3.686972,0.515966,-0.053185, -0.028502,-0.108631,0.993674,-3.661331,0.167886,0.000058, 0.891325,0.039302,-0.451658,-3.686972,0.515966,-0.053185, 0.998889,0.047122,-0.000074,-3.674766,0.517345,-0.000063, -0.064166,-0.189382,0.979805,-3.655175,-0.194909,-0.069044, 0.89264,0.349909,0.284178,-3.695452,-0.193624,-0.101369, 0.618085,0.65091,0.440781,-3.703099,0.163192,-0.084205, -0.064166,-0.189382,0.979805,-3.655175,-0.194909,-0.069044, 0.618085,0.65091,0.440781,-3.703099,0.163192,-0.084205, 0.781868,0.537363,0.316106,-3.67251,0.16663,-0.048579, 0.781868,0.537363,0.316106,-3.67251,0.16663,-0.048579, 0.618085,0.65091,0.440781,-3.703099,0.163192,-0.084205, 0.549192,0.015162,-0.835559,-3.720269,0.512205,-0.092064, 0.781868,0.537363,0.316106,-3.67251,0.16663,-0.048579, 0.549192,0.015162,-0.835559,-3.720269,0.512205,-0.092064, 0.891325,0.039302,-0.451658,-3.686972,0.515966,-0.053185, 0.89264,0.349909,0.284178,-3.695452,-0.193624,-0.101369, 0.3526,0.621479,0.699598,-3.7505,-0.191867,-0.11323, 0.171039,0.554898,0.814146,-3.744907,0.158493,-0.097274, 0.89264,0.349909,0.284178,-3.695452,-0.193624,-0.101369, 0.171039,0.554898,0.814146,-3.744907,0.158493,-0.097274, 0.618085,0.65091,0.440781,-3.703099,0.163192,-0.084205, 0.618085,0.65091,0.440781,-3.703099,0.163192,-0.084205, 0.171039,0.554898,0.814146,-3.744907,0.158493,-0.097274, 0.002291,-0.021629,-0.999763,-3.765736,0.50707,-0.106281, 0.618085,0.65091,0.440781,-3.703099,0.163192,-0.084205, 0.002291,-0.021629,-0.999763,-3.765736,0.50707,-0.106281, 0.549192,0.015162,-0.835559,-3.720269,0.512205,-0.092064, 0.3526,0.621479,0.699598,-3.7505,-0.191867,-0.11323, -0.281998,-0.030938,0.958916,-3.805575,-0.190109,-0.101447, -0.120429,-0.209965,0.970264,-3.786736,0.153792,-0.084291, 0.3526,0.621479,0.699598,-3.7505,-0.191867,-0.11323, -0.120429,-0.209965,0.970264,-3.786736,0.153792,-0.084291, 0.171039,0.554898,0.814146,-3.744907,0.158493,-0.097274, 0.171039,0.554898,0.814146,-3.744907,0.158493,-0.097274, -0.120429,-0.209965,0.970264,-3.786736,0.153792,-0.084291, -0.545298,-0.056465,-0.836338,-3.811194,0.501935,-0.092033, 0.171039,0.554898,0.814146,-3.744907,0.158493,-0.097274, -0.545298,-0.056465,-0.836338,-3.811194,0.501935,-0.092033, 0.002291,-0.021629,-0.999763,-3.765736,0.50707,-0.106281, -0.281998,-0.030938,0.958916,-3.805575,-0.190109,-0.101447, 0.077536,0.770695,0.632469,-3.845923,-0.188822,-0.06918, -0.222902,0.035918,0.974179,-3.817381,0.150348,-0.048728, -0.281998,-0.030938,0.958916,-3.805575,-0.190109,-0.101447, -0.222902,0.035918,0.974179,-3.817381,0.150348,-0.048728, -0.120429,-0.209965,0.970264,-3.786736,0.153792,-0.084291, -0.120429,-0.209965,0.970264,-3.786736,0.153792,-0.084291, -0.222902,0.035918,0.974179,-3.817381,0.150348,-0.048728, -0.888551,-0.077176,-0.452239,-3.84447,0.498176,-0.053132, -0.120429,-0.209965,0.970264,-3.786736,0.153792,-0.084291, -0.888551,-0.077176,-0.452239,-3.84447,0.498176,-0.053132, -0.545298,-0.056465,-0.836338,-3.811194,0.501935,-0.092033, 0.077536,0.770695,0.632469,-3.845923,-0.188822,-0.06918, 0.166377,-0.157108,0.973466,-3.86074,-0.188349,-0.024962, 0.054863,-0.132814,0.989621,-3.828633,0.149083,0, 0.077536,0.770695,0.632469,-3.845923,-0.188822,-0.06918, 0.054863,-0.132814,0.989621,-3.828633,0.149083,0, -0.222902,0.035918,0.974179,-3.817381,0.150348,-0.048728, -0.222902,0.035918,0.974179,-3.817381,0.150348,-0.048728, 0.054863,-0.132814,0.989621,-3.828633,0.149083,0, -0.996511,-0.083465,-0.000062,-3.856649,0.496801,0, -0.222902,0.035918,0.974179,-3.817381,0.150348,-0.048728, -0.996511,-0.083465,-0.000062,-3.856649,0.496801,0, -0.888551,-0.077176,-0.452239,-3.84447,0.498176,-0.053132, 0.431712,0.22912,0.872427,-3.413372,1.871604,0.142309, 0.137206,-0.207537,0.968557,-3.077669,1.871112,0.217368, 0.722,0.398916,0.565317,-3.227504,1.961738,0.131029, 0.137764,-0.289893,0.947092,-3.053102,1.96881,0.051104, 0.012502,-0.999922,0,-3.037562,2.001526,0, -0.433128,-0.901332,0,-3.242148,2.021387,0, 0.137764,-0.289893,0.947092,-3.053102,1.96881,0.051104, -0.433128,-0.901332,0,-3.242148,2.021387,0, 0.707626,-0.125604,0.695334,-3.238225,2.005405,0.075645, 0.137764,-0.289893,0.947092,-3.053102,1.96881,0.051104, 0.707626,-0.125604,0.695334,-3.238225,2.005405,0.075645, 0.722,0.398916,0.565317,-3.227504,1.961738,0.131029, 0.137206,-0.207537,0.968557,-3.077669,1.871112,0.217368, 0.137764,-0.289893,0.947092,-3.053102,1.96881,0.051104, 0.722,0.398916,0.565317,-3.227504,1.961738,0.131029, 0.431712,0.22912,0.872427,-3.413372,1.871604,0.142309, -0.468954,-0.586277,0.660577,-3.35851,1.810253,0.380095, 0.137206,-0.207537,0.968557,-3.077669,1.871112,0.217368, -0.468954,-0.586277,0.660577,-3.35851,1.810253,0.380095, 0.094371,-0.230057,0.968591,-3.07531,1.846,0.363149, 0.137206,-0.207537,0.968557,-3.077669,1.871112,0.217368, 0.272203,0.043076,0.961275,4.861618,1.854067,0.618095, 0.302716,0.058971,0.951255,4.852578,1.889721,0.605031, 0.347794,0.132396,0.928176,4.824747,1.946835,0.626358, 0.272203,0.043076,0.961275,4.861618,1.854067,0.618095, 0.347794,0.132396,0.928176,4.824747,1.946835,0.626358, 0.337014,-0.030018,0.941021,4.760921,1.881357,0.61312, 0.361081,-0.056526,0.93082,4.935561,2.016016,0.5857, 0.196849,0.14562,0.969559,4.93588,2.051665,0.572853, 0.195545,0.103956,0.975169,4.842883,2.021333,0.638025, 0.361081,-0.056526,0.93082,4.935561,2.016016,0.5857, 0.195545,0.103956,0.975169,4.842883,2.021333,0.638025, 0.36359,0.089346,0.927264,4.861611,2.001639,0.621913, 0.282492,0.026081,0.958915,4.973133,1.992779,0.533466, 0.380651,0.443224,0.811577,5.001903,1.914398,0.486724, 0.210495,0.185422,0.959849,4.991746,2.009819,0.523206, 0.302716,0.058971,0.951255,4.852578,1.889721,0.605031, 0.272203,0.043076,0.961275,4.861618,1.854067,0.618095, -0.03359,0.173471,0.984266,4.944706,1.840663,0.575374, 0.302716,0.058971,0.951255,4.852578,1.889721,0.605031, -0.03359,0.173471,0.984266,4.944706,1.840663,0.575374, 0.332757,0.286207,0.898531,4.926194,1.859813,0.582137, -0.03359,0.173471,0.984266,4.944706,1.840663,0.575374, 0.289202,0.572304,0.767353,4.991709,1.844295,0.520761, 0.362705,0.428702,0.827442,4.982364,1.8733,0.53619, -0.03359,0.173471,0.984266,4.944706,1.840663,0.575374, 0.362705,0.428702,0.827442,4.982364,1.8733,0.53619, 0.332757,0.286207,0.898531,4.926194,1.859813,0.582137, 0.168187,0.300291,0.938903,4.852582,1.816115,0.603105, 0.243508,0.533327,0.810103,4.908019,1.796041,0.587882, -0.03359,0.173471,0.984266,4.944706,1.840663,0.575374, 0.168187,0.300291,0.938903,4.852582,1.816115,0.603105, -0.03359,0.173471,0.984266,4.944706,1.840663,0.575374, 0.272203,0.043076,0.961275,4.861618,1.854067,0.618095, 0.243508,0.533327,0.810103,4.908019,1.796041,0.587882, 0.112152,0.130705,0.985057,4.963546,1.783161,0.553515, 0.289202,0.572304,0.767353,4.991709,1.844295,0.520761, 0.243508,0.533327,0.810103,4.908019,1.796041,0.587882, 0.289202,0.572304,0.767353,4.991709,1.844295,0.520761, -0.03359,0.173471,0.984266,4.944706,1.840663,0.575374, 0.112152,0.130705,0.985057,4.963546,1.783161,0.553515, 0.069483,0.206285,0.976022,4.983034,1.806343,0.505779, 0.289202,0.572304,0.767353,4.991709,1.844295,0.520761, 0.069483,0.206285,0.976022,4.983034,1.806343,0.505779, 0.154687,0.171026,0.973048,5.01143,1.875569,0.463205, 0.289202,0.572304,0.767353,4.991709,1.844295,0.520761, 0.196849,0.14562,0.969559,4.93588,2.051665,0.572853, 0.210495,0.185422,0.959849,4.991746,2.009819,0.523206, 0.235746,0.648569,0.723728,4.964945,2.053575,0.499903, 0.196849,0.14562,0.969559,4.93588,2.051665,0.572853, 0.235746,0.648569,0.723728,4.964945,2.053575,0.499903, 0.054287,0.055115,0.997003,4.918466,2.084725,0.532713, 0.210495,0.185422,0.959849,4.991746,2.009819,0.523206, 0.101497,0.61661,0.780699,5.020077,1.97817,0.480978, 0.235746,0.648569,0.723728,4.964945,2.053575,0.499903, 0.154687,0.171026,0.973048,5.01143,1.875569,0.463205, 0.101497,0.61661,0.780699,5.020077,1.97817,0.480978, 0.210495,0.185422,0.959849,4.991746,2.009819,0.523206, 0.196849,0.14562,0.969559,4.93588,2.051665,0.572853, 0.012421,0.392537,0.919652,4.881574,2.094571,0.539949, 0.043397,0.435463,0.89916,4.825996,2.089176,0.576083, 0.196849,0.14562,0.969559,4.93588,2.051665,0.572853, 0.043397,0.435463,0.89916,4.825996,2.089176,0.576083, 0.195545,0.103956,0.975169,4.842883,2.021333,0.638025, 0.067357,0.280764,0.95741,4.788476,2.028047,0.608619, 0.337014,-0.030018,0.941021,4.760921,1.881357,0.61312, 0.195545,0.103956,0.975169,4.842883,2.021333,0.638025, 0.067357,0.280764,0.95741,4.788476,2.028047,0.608619, 0.195545,0.103956,0.975169,4.842883,2.021333,0.638025, 0.043397,0.435463,0.89916,4.825996,2.089176,0.576083, 0.067357,0.280764,0.95741,4.788476,2.028047,0.608619, 0.043397,0.435463,0.89916,4.825996,2.089176,0.576083, 0.184871,0.227138,0.956154,4.798297,2.118191,0.591085, 0.067357,0.280764,0.95741,4.788476,2.028047,0.608619, 0.184871,0.227138,0.956154,4.798297,2.118191,0.591085, -0.026366,0.234118,0.971851,4.751519,2.039658,0.634134, 0.043397,0.435463,0.89916,4.825996,2.089176,0.576083, 0.012421,0.392537,0.919652,4.881574,2.094571,0.539949, -0.034875,0.308036,0.950735,4.872539,2.159259,0.542891, 0.043397,0.435463,0.89916,4.825996,2.089176,0.576083, -0.034875,0.308036,0.950735,4.872539,2.159259,0.542891, 0.184871,0.227138,0.956154,4.798297,2.118191,0.591085, 0.012421,0.392537,0.919652,4.881574,2.094571,0.539949, 0.054287,0.055115,0.997003,4.918466,2.084725,0.532713, -0.148853,0.101172,0.98367,4.927885,2.15656,0.516579, 0.012421,0.392537,0.919652,4.881574,2.094571,0.539949, -0.148853,0.101172,0.98367,4.927885,2.15656,0.516579, -0.034875,0.308036,0.950735,4.872539,2.159259,0.542891, 0.054287,0.055115,0.997003,4.918466,2.084725,0.532713, 0.235746,0.648569,0.723728,4.964945,2.053575,0.499903, 0.504806,0.844077,0.180846,5.00244,2.105746,0.468233, 0.054287,0.055115,0.997003,4.918466,2.084725,0.532713, 0.504806,0.844077,0.180846,5.00244,2.105746,0.468233, -0.148853,0.101172,0.98367,4.927885,2.15656,0.516579, 0.235746,0.648569,0.723728,4.964945,2.053575,0.499903, 0.101497,0.61661,0.780699,5.020077,1.97817,0.480978, 0.615065,0.769234,0.173133,5.057495,2.002751,0.451974, 0.235746,0.648569,0.723728,4.964945,2.053575,0.499903, 0.615065,0.769234,0.173133,5.057495,2.002751,0.451974, 0.504806,0.844077,0.180846,5.00244,2.105746,0.468233, 0.101497,0.61661,0.780699,5.020077,1.97817,0.480978, 0.154687,0.171026,0.973048,5.01143,1.875569,0.463205, 0.550963,0.62763,0.550018,5.075994,1.900999,0.443793, 0.101497,0.61661,0.780699,5.020077,1.97817,0.480978, 0.550963,0.62763,0.550018,5.075994,1.900999,0.443793, 0.615065,0.769234,0.173133,5.057495,2.002751,0.451974, 0.154687,0.171026,0.973048,5.01143,1.875569,0.463205, 0.477291,0.716177,0.509199,5.030289,1.827419,0.440803, 0.550963,0.62763,0.550018,5.075994,1.900999,0.443793, 0.069483,0.206285,0.976022,4.983034,1.806343,0.505779, 0.888167,0.420088,0.186241,4.991904,1.760829,0.510386, 0.477291,0.716177,0.509199,5.030289,1.827419,0.440803, 0.069483,0.206285,0.976022,4.983034,1.806343,0.505779, 0.477291,0.716177,0.509199,5.030289,1.827419,0.440803, 0.154687,0.171026,0.973048,5.01143,1.875569,0.463205, 0.112152,0.130705,0.985057,4.963546,1.783161,0.553515, 0.749779,0.312648,0.583167,4.936066,1.737668,0.557276, 0.888167,0.420088,0.186241,4.991904,1.760829,0.510386, 0.112152,0.130705,0.985057,4.963546,1.783161,0.553515, 0.888167,0.420088,0.186241,4.991904,1.760829,0.510386, 0.069483,0.206285,0.976022,4.983034,1.806343,0.505779, 0.358075,0.480709,0.800438,4.871155,1.741238,0.592326, 0.749779,0.312648,0.583167,4.936066,1.737668,0.557276, 0.112152,0.130705,0.985057,4.963546,1.783161,0.553515, 0.358075,0.480709,0.800438,4.871155,1.741238,0.592326, 0.112152,0.130705,0.985057,4.963546,1.783161,0.553515, 0.243508,0.533327,0.810103,4.908019,1.796041,0.587882, 0.524848,0.480955,0.702294,4.816181,1.79786,0.604026, 0.358075,0.480709,0.800438,4.871155,1.741238,0.592326, 0.243508,0.533327,0.810103,4.908019,1.796041,0.587882, 0.524848,0.480955,0.702294,4.816181,1.79786,0.604026, 0.243508,0.533327,0.810103,4.908019,1.796041,0.587882, 0.168187,0.300291,0.938903,4.852582,1.816115,0.603105, 0.524848,0.480955,0.702294,4.816181,1.79786,0.604026, 0.168187,0.300291,0.938903,4.852582,1.816115,0.603105, 0.337014,-0.030018,0.941021,4.760921,1.881357,0.61312, 0.988203,-0.047217,0.145687,5.085813,1.888503,0.408327, 0.72603,0.248277,0.641279,5.095375,1.961238,0.401516, 0.550963,0.62763,0.550018,5.075994,1.900999,0.443793, 0.477291,0.716177,0.509199,5.030289,1.827419,0.440803, 0.936242,-0.313777,-0.158096,5.058179,1.788186,0.417387, 0.988203,-0.047217,0.145687,5.085813,1.888503,0.408327, 0.477291,0.716177,0.509199,5.030289,1.827419,0.440803, 0.988203,-0.047217,0.145687,5.085813,1.888503,0.408327, 0.550963,0.62763,0.550018,5.075994,1.900999,0.443793, 0.888167,0.420088,0.186241,4.991904,1.760829,0.510386, 0.831186,-0.511045,-0.219005,5.019836,1.739907,0.485562, 0.936242,-0.313777,-0.158096,5.058179,1.788186,0.417387, 0.888167,0.420088,0.186241,4.991904,1.760829,0.510386, 0.936242,-0.313777,-0.158096,5.058179,1.788186,0.417387, 0.477291,0.716177,0.509199,5.030289,1.827419,0.440803, 0.749779,0.312648,0.583167,4.936066,1.737668,0.557276, 0.797293,-0.558933,-0.227857,4.917973,1.68148,0.544201, 0.831186,-0.511045,-0.219005,5.019836,1.739907,0.485562, 0.749779,0.312648,0.583167,4.936066,1.737668,0.557276, 0.831186,-0.511045,-0.219005,5.019836,1.739907,0.485562, 0.888167,0.420088,0.186241,4.991904,1.760829,0.510386, 0.707669,-0.687185,0.164261,4.862636,1.684144,0.570155, 0.797293,-0.558933,-0.227857,4.917973,1.68148,0.544201, 0.749779,0.312648,0.583167,4.936066,1.737668,0.557276, 0.707669,-0.687185,0.164261,4.862636,1.684144,0.570155, 0.749779,0.312648,0.583167,4.936066,1.737668,0.557276, 0.358075,0.480709,0.800438,4.871155,1.741238,0.592326, 0.744254,-0.65416,0.134758,4.752337,1.723388,0.591296, 0.707669,-0.687185,0.164261,4.862636,1.684144,0.570155, 0.358075,0.480709,0.800438,4.871155,1.741238,0.592326, 0.744254,-0.65416,0.134758,4.752337,1.723388,0.591296, 0.358075,0.480709,0.800438,4.871155,1.741238,0.592326, 0.524848,0.480955,0.702294,4.816181,1.79786,0.604026, 0.884603,-0.366979,0.287755,4.697607,1.768061,0.576663, 0.744254,-0.65416,0.134758,4.752337,1.723388,0.591296, 0.524848,0.480955,0.702294,4.816181,1.79786,0.604026, 0.884603,-0.366979,0.287755,4.697607,1.768061,0.576663, 0.524848,0.480955,0.702294,4.816181,1.79786,0.604026, 0.337014,-0.030018,0.941021,4.760921,1.881357,0.61312, 0.615065,0.769234,0.173133,5.057495,2.002751,0.451974, 0.670109,-0.356989,0.650778,5.067202,2.027704,0.422291, 0.468872,-0.092982,0.878359,5.030641,2.102197,0.432329, 0.615065,0.769234,0.173133,5.057495,2.002751,0.451974, 0.468872,-0.092982,0.878359,5.030641,2.102197,0.432329, 0.504806,0.844077,0.180846,5.00244,2.105746,0.468233, -0.148853,0.101172,0.98367,4.927885,2.15656,0.516579, 0.504806,0.844077,0.180846,5.00244,2.105746,0.468233, 0.468872,-0.092982,0.878359,5.030641,2.102197,0.432329, -0.148853,0.101172,0.98367,4.927885,2.15656,0.516579, 0.468872,-0.092982,0.878359,5.030641,2.102197,0.432329, 0.507131,-0.710633,0.487667,4.93795,2.181155,0.486939, -0.034875,0.308036,0.950735,4.872539,2.159259,0.542891, -0.148853,0.101172,0.98367,4.927885,2.15656,0.516579, 0.507131,-0.710633,0.487667,4.93795,2.181155,0.486939, -0.034875,0.308036,0.950735,4.872539,2.159259,0.542891, 0.507131,-0.710633,0.487667,4.93795,2.181155,0.486939, 0.292794,-0.691168,0.660725,4.881855,2.194544,0.530288, 0.384025,-0.256534,0.88697,4.807794,2.143653,0.570393, 0.184871,0.227138,0.956154,4.798297,2.118191,0.591085, -0.034875,0.308036,0.950735,4.872539,2.159259,0.542891, 0.384025,-0.256534,0.88697,4.807794,2.143653,0.570393, -0.034875,0.308036,0.950735,4.872539,2.159259,0.542891, 0.292794,-0.691168,0.660725,4.881855,2.194544,0.530288, 0.689769,-0.265624,0.673544,4.728963,2.036146,0.614307, -0.026366,0.234118,0.971851,4.751519,2.039658,0.634134, 0.184871,0.227138,0.956154,4.798297,2.118191,0.591085, 0.689769,-0.265624,0.673544,4.728963,2.036146,0.614307, 0.184871,0.227138,0.956154,4.798297,2.118191,0.591085, 0.384025,-0.256534,0.88697,4.807794,2.143653,0.570393, 0.337014,-0.030018,0.941021,4.760921,1.881357,0.61312, -0.026366,0.234118,0.971851,4.751519,2.039658,0.634134, 0.689769,-0.265624,0.673544,4.728963,2.036146,0.614307, 0.337014,-0.030018,0.941021,4.760921,1.881357,0.61312, 0.689769,-0.265624,0.673544,4.728963,2.036146,0.614307, 0.901575,-0.270544,0.337593,4.742358,1.882232,0.62165, 0.884603,-0.366979,0.287755,4.697607,1.768061,0.576663, 0.337014,-0.030018,0.941021,4.760921,1.881357,0.61312, 0.901575,-0.270544,0.337593,4.742358,1.882232,0.62165, 0.190357,-0.604308,0.773677,4.688114,2.046378,0.604518, 0.689769,-0.265624,0.673544,4.728963,2.036146,0.614307, 0.384025,-0.256534,0.88697,4.807794,2.143653,0.570393, 0.190357,-0.604308,0.773677,4.688114,2.046378,0.604518, 0.384025,-0.256534,0.88697,4.807794,2.143653,0.570393, 0.399187,-0.679804,0.615237,4.74405,2.179337,0.556057, 0.384025,-0.256534,0.88697,4.807794,2.143653,0.570393, 0.292794,-0.691168,0.660725,4.881855,2.194544,0.530288, 0.428199,-0.104479,0.897624,4.837331,2.235678,0.479332, 0.384025,-0.256534,0.88697,4.807794,2.143653,0.570393, 0.428199,-0.104479,0.897624,4.837331,2.235678,0.479332, 0.399187,-0.679804,0.615237,4.74405,2.179337,0.556057, 0.292794,-0.691168,0.660725,4.881855,2.194544,0.530288, 0.507131,-0.710633,0.487667,4.93795,2.181155,0.486939, 0.259896,0.111139,0.95922,4.89385,2.220523,0.417713, 0.292794,-0.691168,0.660725,4.881855,2.194544,0.530288, 0.259896,0.111139,0.95922,4.89385,2.220523,0.417713, 0.428199,-0.104479,0.897624,4.837331,2.235678,0.479332, 0.507131,-0.710633,0.487667,4.93795,2.181155,0.486939, 0.468872,-0.092982,0.878359,5.030641,2.102197,0.432329, 0.230527,0.277299,0.932718,4.995978,2.148785,0.344534, 0.507131,-0.710633,0.487667,4.93795,2.181155,0.486939, 0.230527,0.277299,0.932718,4.995978,2.148785,0.344534, 0.259896,0.111139,0.95922,4.89385,2.220523,0.417713, 0.468872,-0.092982,0.878359,5.030641,2.102197,0.432329, 0.670109,-0.356989,0.650778,5.067202,2.027704,0.422291, 0.171367,-0.69152,0.701736,5.06084,2.053335,0.309324, 0.468872,-0.092982,0.878359,5.030641,2.102197,0.432329, 0.171367,-0.69152,0.701736,5.06084,2.053335,0.309324, 0.230527,0.277299,0.932718,4.995978,2.148785,0.344534, 0.670109,-0.356989,0.650778,5.067202,2.027704,0.422291, 0.72603,0.248277,0.641279,5.095375,1.961238,0.401516, 0.258975,-0.768157,0.585548,5.097062,1.954206,0.328795, 0.670109,-0.356989,0.650778,5.067202,2.027704,0.422291, 0.258975,-0.768157,0.585548,5.097062,1.954206,0.328795, 0.171367,-0.69152,0.701736,5.06084,2.053335,0.309324, 0.988203,-0.047217,0.145687,5.085813,1.888503,0.408327, 0.154813,-0.698608,0.698556,5.105589,1.864086,0.347113, 0.258975,-0.768157,0.585548,5.097062,1.954206,0.328795, 0.988203,-0.047217,0.145687,5.085813,1.888503,0.408327, 0.258975,-0.768157,0.585548,5.097062,1.954206,0.328795, 0.72603,0.248277,0.641279,5.095375,1.961238,0.401516, 0.936242,-0.313777,-0.158096,5.058179,1.788186,0.417387, 0.154813,-0.698608,0.698556,5.105589,1.864086,0.347113, 0.988203,-0.047217,0.145687,5.085813,1.888503,0.408327, 0.884603,-0.366979,0.287755,4.697607,1.768061,0.576663, 0.901575,-0.270544,0.337593,4.742358,1.882232,0.62165, 0.152967,-0.640193,0.752831,4.697024,1.862575,0.604048, 0.259896,0.111139,0.95922,4.89385,2.220523,0.417713, 0.203778,-0.389736,0.898098,4.83289,2.262727,0.283787, 0.244568,-0.044721,0.9686,4.739441,2.299169,0.369987, 0.259896,0.111139,0.95922,4.89385,2.220523,0.417713, 0.244568,-0.044721,0.9686,4.739441,2.299169,0.369987, 0.428199,-0.104479,0.897624,4.837331,2.235678,0.479332, 0.259896,0.111139,0.95922,4.89385,2.220523,0.417713, 0.230527,0.277299,0.932718,4.995978,2.148785,0.344534, -0.026148,0.006311,0.999638,4.971394,2.146686,0.224781, 0.259896,0.111139,0.95922,4.89385,2.220523,0.417713, -0.026148,0.006311,0.999638,4.971394,2.146686,0.224781, 0.203778,-0.389736,0.898098,4.83289,2.262727,0.283787, 0.230527,0.277299,0.932718,4.995978,2.148785,0.344534, 0.171367,-0.69152,0.701736,5.06084,2.053335,0.309324, -0.149467,-0.273889,0.950076,5.072165,2.04363,0.209228, 0.230527,0.277299,0.932718,4.995978,2.148785,0.344534, -0.149467,-0.273889,0.950076,5.072165,2.04363,0.209228, -0.026148,0.006311,0.999638,4.971394,2.146686,0.224781, 0.171367,-0.69152,0.701736,5.06084,2.053335,0.309324, 0.258975,-0.768157,0.585548,5.097062,1.954206,0.328795, 0.06611,-0.359829,0.930673,5.127157,1.942759,0.211214, 0.171367,-0.69152,0.701736,5.06084,2.053335,0.309324, 0.06611,-0.359829,0.930673,5.127157,1.942759,0.211214, -0.149467,-0.273889,0.950076,5.072165,2.04363,0.209228, 0.258975,-0.768157,0.585548,5.097062,1.954206,0.328795, 0.154813,-0.698608,0.698556,5.105589,1.864086,0.347113, -0.091049,-0.145989,0.985087,5.152698,1.830661,0.287042, 0.258975,-0.768157,0.585548,5.097062,1.954206,0.328795, -0.091049,-0.145989,0.985087,5.152698,1.830661,0.287042, 0.06611,-0.359829,0.930673,5.127157,1.942759,0.211214, 0.936242,-0.313777,-0.158096,5.058179,1.788186,0.417387, -0.12102,-0.514608,0.848842,5.133171,1.715563,0.334258, -0.091049,-0.145989,0.985087,5.152698,1.830661,0.287042, 0.936242,-0.313777,-0.158096,5.058179,1.788186,0.417387, -0.091049,-0.145989,0.985087,5.152698,1.830661,0.287042, 0.154813,-0.698608,0.698556,5.105589,1.864086,0.347113, 0.831186,-0.511045,-0.219005,5.019836,1.739907,0.485562, 0.063508,-0.739371,0.670296,5.103427,1.624404,0.434275, -0.12102,-0.514608,0.848842,5.133171,1.715563,0.334258, 0.831186,-0.511045,-0.219005,5.019836,1.739907,0.485562, -0.12102,-0.514608,0.848842,5.133171,1.715563,0.334258, 0.936242,-0.313777,-0.158096,5.058179,1.788186,0.417387, 0.797293,-0.558933,-0.227857,4.917973,1.68148,0.544201, 0.169576,-0.140705,0.975421,4.982822,1.503071,0.507606, 0.063508,-0.739371,0.670296,5.103427,1.624404,0.434275, 0.797293,-0.558933,-0.227857,4.917973,1.68148,0.544201, 0.063508,-0.739371,0.670296,5.103427,1.624404,0.434275, 0.831186,-0.511045,-0.219005,5.019836,1.739907,0.485562, 0.111896,-0.605741,0.787755,4.927282,1.486953,0.526327, 0.169576,-0.140705,0.975421,4.982822,1.503071,0.507606, 0.797293,-0.558933,-0.227857,4.917973,1.68148,0.544201, 0.111896,-0.605741,0.787755,4.927282,1.486953,0.526327, 0.797293,-0.558933,-0.227857,4.917973,1.68148,0.544201, 0.707669,-0.687185,0.164261,4.862636,1.684144,0.570155, 0.002178,-0.833415,0.552643,4.79841,1.473149,0.570618, 0.111896,-0.605741,0.787755,4.927282,1.486953,0.526327, 0.707669,-0.687185,0.164261,4.862636,1.684144,0.570155, 0.16399,-0.527953,0.833291,4.715646,1.502195,0.584339, 0.002178,-0.833415,0.552643,4.79841,1.473149,0.570618, 0.707669,-0.687185,0.164261,4.862636,1.684144,0.570155, 0.16399,-0.527953,0.833291,4.715646,1.502195,0.584339, 0.707669,-0.687185,0.164261,4.862636,1.684144,0.570155, 0.744254,-0.65416,0.134758,4.752337,1.723388,0.591296, 0.205809,-0.680492,0.703259,4.615408,1.639641,0.577768, 0.16399,-0.527953,0.833291,4.715646,1.502195,0.584339, 0.744254,-0.65416,0.134758,4.752337,1.723388,0.591296, 0.205809,-0.680492,0.703259,4.615408,1.639641,0.577768, 0.744254,-0.65416,0.134758,4.752337,1.723388,0.591296, 0.884603,-0.366979,0.287755,4.697607,1.768061,0.576663, 0.396941,-0.593503,0.700137,4.560751,1.785154,0.562428, 0.205809,-0.680492,0.703259,4.615408,1.639641,0.577768, 0.884603,-0.366979,0.287755,4.697607,1.768061,0.576663, 0.396941,-0.593503,0.700137,4.560751,1.785154,0.562428, 0.884603,-0.366979,0.287755,4.697607,1.768061,0.576663, 0.152967,-0.640193,0.752831,4.697024,1.862575,0.604048, 0.396941,-0.593503,0.700137,4.560751,1.785154,0.562428, 0.152967,-0.640193,0.752831,4.697024,1.862575,0.604048, 0.190357,-0.604308,0.773677,4.688114,2.046378,0.604518, 0.396941,-0.593503,0.700137,4.560751,1.785154,0.562428, 0.190357,-0.604308,0.773677,4.688114,2.046378,0.604518, 0.025716,-0.894111,0.447106,4.551484,1.841749,0.575191, 0.025716,-0.894111,0.447106,4.551484,1.841749,0.575191, 0.190357,-0.604308,0.773677,4.688114,2.046378,0.604518, 0.051115,-0.906355,0.419413,4.533113,1.989009,0.578975, 0.256335,-0.2349,0.937611,4.561299,2.133066,0.547248, 0.190357,-0.604308,0.773677,4.688114,2.046378,0.604518, 0.399187,-0.679804,0.615237,4.74405,2.179337,0.556057, 0.256335,-0.2349,0.937611,4.561299,2.133066,0.547248, 0.399187,-0.679804,0.615237,4.74405,2.179337,0.556057, 0.223925,-0.919003,0.324486,4.636582,2.263383,0.471997, 0.051115,-0.906355,0.419413,4.533113,1.989009,0.578975, 0.190357,-0.604308,0.773677,4.688114,2.046378,0.604518, 0.256335,-0.2349,0.937611,4.561299,2.133066,0.547248, -0.026148,0.006311,0.999638,4.971394,2.146686,0.224781, -0.149467,-0.273889,0.950076,5.072165,2.04363,0.209228, -0.941169,-0.337937,0,5.04969,2.032731,0.000071, -0.026148,0.006311,0.999638,4.971394,2.146686,0.224781, -0.941169,-0.337937,0,5.04969,2.032731,0.000071, -0.989689,-0.143234,0,4.912303,2.162645,-0.00009, -0.149467,-0.273889,0.950076,5.072165,2.04363,0.209228, 0.06611,-0.359829,0.930673,5.127157,1.942759,0.211214, 0.204472,-0.587725,0.782797,5.156645,1.942902,0.119993, -0.149467,-0.273889,0.950076,5.072165,2.04363,0.209228, 0.204472,-0.587725,0.782797,5.156645,1.942902,0.119993, -0.941169,-0.337937,0,5.04969,2.032731,0.000071, 0.06611,-0.359829,0.930673,5.127157,1.942759,0.211214, -0.091049,-0.145989,0.985087,5.152698,1.830661,0.287042, 0.161367,-0.802085,0.574996,5.218821,1.803552,0.199306, 0.06611,-0.359829,0.930673,5.127157,1.942759,0.211214, 0.161367,-0.802085,0.574996,5.218821,1.803552,0.199306, 0.204472,-0.587725,0.782797,5.156645,1.942902,0.119993, -0.091049,-0.145989,0.985087,5.152698,1.830661,0.287042, -0.12102,-0.514608,0.848842,5.133171,1.715563,0.334258, 0.218068,-0.756333,0.616772,5.216855,1.636645,0.279797, -0.091049,-0.145989,0.985087,5.152698,1.830661,0.287042, 0.218068,-0.756333,0.616772,5.216855,1.636645,0.279797, 0.161367,-0.802085,0.574996,5.218821,1.803552,0.199306, 0.726183,-0.658007,0.199213,5.233176,1.442459,0.362988, 0.218068,-0.756333,0.616772,5.216855,1.636645,0.279797, -0.12102,-0.514608,0.848842,5.133171,1.715563,0.334258, 0.063508,-0.739371,0.670296,5.103427,1.624404,0.434275, 0.726183,-0.658007,0.199213,5.233176,1.442459,0.362988, -0.12102,-0.514608,0.848842,5.133171,1.715563,0.334258, 0.035735,-0.99787,0.054579,4.596478,1.512987,0.598982, 0.485742,-0.874075,-0.006874,4.679116,1.438434,0.589658, 0.16399,-0.527953,0.833291,4.715646,1.502195,0.584339, 0.035735,-0.99787,0.054579,4.596478,1.512987,0.598982, 0.16399,-0.527953,0.833291,4.715646,1.502195,0.584339, 0.205809,-0.680492,0.703259,4.615408,1.639641,0.577768, -0.034202,-0.995024,0.093584,4.560024,1.604023,0.589333, 0.035735,-0.99787,0.054579,4.596478,1.512987,0.598982, 0.205809,-0.680492,0.703259,4.615408,1.639641,0.577768, 0.06465,-0.997821,-0.013157,4.477781,1.687858,0.597407, -0.034202,-0.995024,0.093584,4.560024,1.604023,0.589333, 0.205809,-0.680492,0.703259,4.615408,1.639641,0.577768, 0.06465,-0.997821,-0.013157,4.477781,1.687858,0.597407, 0.205809,-0.680492,0.703259,4.615408,1.639641,0.577768, 0.396941,-0.593503,0.700137,4.560751,1.785154,0.562428, 0.173736,-0.983834,-0.043437,4.459682,1.778884,0.588185, 0.06465,-0.997821,-0.013157,4.477781,1.687858,0.597407, 0.396941,-0.593503,0.700137,4.560751,1.785154,0.562428, 0.173736,-0.983834,-0.043437,4.459682,1.778884,0.588185, 0.396941,-0.593503,0.700137,4.560751,1.785154,0.562428, 0.025716,-0.894111,0.447106,4.551484,1.841749,0.575191, 0.173736,-0.983834,-0.043437,4.459682,1.778884,0.588185, 0.025716,-0.894111,0.447106,4.551484,1.841749,0.575191, 0.051115,-0.906355,0.419413,4.533113,1.989009,0.578975, 0.173736,-0.983834,-0.043437,4.459682,1.778884,0.588185, 0.051115,-0.906355,0.419413,4.533113,1.989009,0.578975, 0.003817,-0.976864,0.213829,4.43261,1.878873,0.577888, 0.003817,-0.976864,0.213829,4.43261,1.878873,0.577888, 0.051115,-0.906355,0.419413,4.533113,1.989009,0.578975, 0.256335,-0.2349,0.937611,4.561299,2.133066,0.547248, 0.003817,-0.976864,0.213829,4.43261,1.878873,0.577888, 0.256335,-0.2349,0.937611,4.561299,2.133066,0.547248, 0.125846,-0.929941,0.345503,4.43302,2.024714,0.563794, 0.244568,-0.044721,0.9686,4.739441,2.299169,0.369987, 0.203778,-0.389736,0.898098,4.83289,2.262727,0.283787, -0.965284,-0.261201,0,4.747988,2.300163,-0.000276, 0.244568,-0.044721,0.9686,4.739441,2.299169,0.369987, -0.965284,-0.261201,0,4.747988,2.300163,-0.000276, 0.241652,-0.897637,0.368581,4.634996,2.369115,0.140117, 0.223925,-0.919003,0.324486,4.636582,2.263383,0.471997, 0.244568,-0.044721,0.9686,4.739441,2.299169,0.369987, 0.241652,-0.897637,0.368581,4.634996,2.369115,0.140117, 0.223925,-0.919003,0.324486,4.636582,2.263383,0.471997, 0.241652,-0.897637,0.368581,4.634996,2.369115,0.140117, 0.170159,-0.985033,-0.027502,4.577573,2.389535,0.256196, 0.223925,-0.919003,0.324486,4.636582,2.263383,0.471997, 0.170159,-0.985033,-0.027502,4.577573,2.389535,0.256196, 0.231006,-0.859096,0.456717,4.472349,2.325133,0.443764, 0.108306,-0.808441,0.578527,4.389484,2.190421,0.47332, 0.256335,-0.2349,0.937611,4.561299,2.133066,0.547248, 0.223925,-0.919003,0.324486,4.636582,2.263383,0.471997, 0.108306,-0.808441,0.578527,4.389484,2.190421,0.47332, 0.223925,-0.919003,0.324486,4.636582,2.263383,0.471997, 0.231006,-0.859096,0.456717,4.472349,2.325133,0.443764, 0.125846,-0.929941,0.345503,4.43302,2.024714,0.563794, 0.256335,-0.2349,0.937611,4.561299,2.133066,0.547248, 0.108306,-0.808441,0.578527,4.389484,2.190421,0.47332, 0.169576,-0.140705,0.975421,4.982822,1.503071,0.507606, 0.155382,-0.98726,0.034255,5.223191,1.371491,0.388069, 0.726183,-0.658007,0.199213,5.233176,1.442459,0.362988, 0.169576,-0.140705,0.975421,4.982822,1.503071,0.507606, 0.726183,-0.658007,0.199213,5.233176,1.442459,0.362988, 0.063508,-0.739371,0.670296,5.103427,1.624404,0.434275, 0.111896,-0.605741,0.787755,4.927282,1.486953,0.526327, 0.228199,-0.705361,0.671111,5.158322,1.23677,0.418043, 0.155382,-0.98726,0.034255,5.223191,1.371491,0.388069, 0.111896,-0.605741,0.787755,4.927282,1.486953,0.526327, 0.155382,-0.98726,0.034255,5.223191,1.371491,0.388069, 0.169576,-0.140705,0.975421,4.982822,1.503071,0.507606, 0.002178,-0.833415,0.552643,4.79841,1.473149,0.570618, 0.114701,-0.691525,0.713188,4.95536,1.236724,0.50523, 0.228199,-0.705361,0.671111,5.158322,1.23677,0.418043, 0.002178,-0.833415,0.552643,4.79841,1.473149,0.570618, 0.228199,-0.705361,0.671111,5.158322,1.23677,0.418043, 0.111896,-0.605741,0.787755,4.927282,1.486953,0.526327, 0.16399,-0.527953,0.833291,4.715646,1.502195,0.584339, 0.298912,-0.321997,0.898315,4.761601,1.363013,0.57137, 0.114701,-0.691525,0.713188,4.95536,1.236724,0.50523, 0.16399,-0.527953,0.833291,4.715646,1.502195,0.584339, 0.114701,-0.691525,0.713188,4.95536,1.236724,0.50523, 0.002178,-0.833415,0.552643,4.79841,1.473149,0.570618, 0.485742,-0.874075,-0.006874,4.679116,1.438434,0.589658, 0.298912,-0.321997,0.898315,4.761601,1.363013,0.57137, 0.16399,-0.527953,0.833291,4.715646,1.502195,0.584339, 0.204472,-0.587725,0.782797,5.156645,1.942902,0.119993, 0.161367,-0.802085,0.574996,5.218821,1.803552,0.199306, 0.241049,-0.626018,0.741618,5.321136,1.795562,0.119606, 0.204472,-0.587725,0.782797,5.156645,1.942902,0.119993, 0.241049,-0.626018,0.741618,5.321136,1.795562,0.119606, -0.998597,-0.052951,0,5.177545,1.932323,0.000214, 0.241049,-0.626018,0.741618,5.321136,1.795562,0.119606, -0.99798,-0.063521,0,5.378289,1.768448,0.000441, -0.998597,-0.052951,0,5.177545,1.932323,0.000214, 0.241049,-0.626018,0.741618,5.321136,1.795562,0.119606, 0.272751,-0.332382,0.902845,5.421809,1.685349,0.123555, -0.925873,-0.377836,0,5.424281,1.721152,0.000496, 0.241049,-0.626018,0.741618,5.321136,1.795562,0.119606, -0.925873,-0.377836,0,5.424281,1.721152,0.000496, -0.99798,-0.063521,0,5.378289,1.768448,0.000441, 0.161397,-0.648358,0.744032,5.383208,1.619661,0.202452, 0.272751,-0.332382,0.902845,5.421809,1.685349,0.123555, 0.241049,-0.626018,0.741618,5.321136,1.795562,0.119606, 0.161397,-0.648358,0.744032,5.383208,1.619661,0.202452, 0.241049,-0.626018,0.741618,5.321136,1.795562,0.119606, 0.161367,-0.802085,0.574996,5.218821,1.803552,0.199306, 0.218068,-0.756333,0.616772,5.216855,1.636645,0.279797, 0.142784,-0.229696,0.962732,5.373133,1.541142,0.246712, 0.161397,-0.648358,0.744032,5.383208,1.619661,0.202452, 0.218068,-0.756333,0.616772,5.216855,1.636645,0.279797, 0.161397,-0.648358,0.744032,5.383208,1.619661,0.202452, 0.161367,-0.802085,0.574996,5.218821,1.803552,0.199306, 0.726183,-0.658007,0.199213,5.233176,1.442459,0.362988, -0.045194,-0.595739,0.801906,5.334328,1.402713,0.332639, 0.142784,-0.229696,0.962732,5.373133,1.541142,0.246712, 0.726183,-0.658007,0.199213,5.233176,1.442459,0.362988, 0.142784,-0.229696,0.962732,5.373133,1.541142,0.246712, 0.218068,-0.756333,0.616772,5.216855,1.636645,0.279797, 0.155382,-0.98726,0.034255,5.223191,1.371491,0.388069, -0.016623,-0.697515,0.716377,5.296963,1.322443,0.357984, -0.045194,-0.595739,0.801906,5.334328,1.402713,0.332639, 0.155382,-0.98726,0.034255,5.223191,1.371491,0.388069, -0.045194,-0.595739,0.801906,5.334328,1.402713,0.332639, 0.726183,-0.658007,0.199213,5.233176,1.442459,0.362988, 0.228199,-0.705361,0.671111,5.158322,1.23677,0.418043, -0.105003,-0.636187,0.764356,5.260653,1.184173,0.352062, -0.016623,-0.697515,0.716377,5.296963,1.322443,0.357984, 0.228199,-0.705361,0.671111,5.158322,1.23677,0.418043, -0.016623,-0.697515,0.716377,5.296963,1.322443,0.357984, 0.155382,-0.98726,0.034255,5.223191,1.371491,0.388069, 0.009824,-0.644035,0.764933,5.250485,1.123029,0.385234, -0.105003,-0.636187,0.764356,5.260653,1.184173,0.352062, 0.228199,-0.705361,0.671111,5.158322,1.23677,0.418043, 0.114701,-0.691525,0.713188,4.95536,1.236724,0.50523, -0.023775,-0.598435,0.800818,4.991713,1.163096,0.504149, 0.009824,-0.644035,0.764933,5.250485,1.123029,0.385234, 0.114701,-0.691525,0.713188,4.95536,1.236724,0.50523, 0.009824,-0.644035,0.764933,5.250485,1.123029,0.385234, 0.228199,-0.705361,0.671111,5.158322,1.23677,0.418043, 0.200825,-0.971974,0.122213,4.733657,1.227371,0.592883, -0.023775,-0.598435,0.800818,4.991713,1.163096,0.504149, 0.114701,-0.691525,0.713188,4.95536,1.236724,0.50523, 0.200825,-0.971974,0.122213,4.733657,1.227371,0.592883, 0.114701,-0.691525,0.713188,4.95536,1.236724,0.50523, 0.298912,-0.321997,0.898315,4.761601,1.363013,0.57137, 0.123418,-0.784469,0.607763,4.641547,1.285422,0.622034, 0.200825,-0.971974,0.122213,4.733657,1.227371,0.592883, 0.298912,-0.321997,0.898315,4.761601,1.363013,0.57137, 0.123418,-0.784469,0.607763,4.641547,1.285422,0.622034, 0.298912,-0.321997,0.898315,4.761601,1.363013,0.57137, 0.485742,-0.874075,-0.006874,4.679116,1.438434,0.589658, 0.050019,-0.552867,0.831767,4.522247,1.398278,0.644892, 0.123418,-0.784469,0.607763,4.641547,1.285422,0.622034, 0.485742,-0.874075,-0.006874,4.679116,1.438434,0.589658, 0.050019,-0.552867,0.831767,4.522247,1.398278,0.644892, 0.485742,-0.874075,-0.006874,4.679116,1.438434,0.589658, 0.035735,-0.99787,0.054579,4.596478,1.512987,0.598982, 0.037801,-0.082839,0.995846,4.430999,1.535753,0.638888, 0.050019,-0.552867,0.831767,4.522247,1.398278,0.644892, 0.035735,-0.99787,0.054579,4.596478,1.512987,0.598982, 0.037801,-0.082839,0.995846,4.430999,1.535753,0.638888, 0.035735,-0.99787,0.054579,4.596478,1.512987,0.598982, -0.034202,-0.995024,0.093584,4.560024,1.604023,0.589333, -0.196146,-0.333078,0.922272,4.404221,1.662433,0.61661, 0.037801,-0.082839,0.995846,4.430999,1.535753,0.638888, -0.034202,-0.995024,0.093584,4.560024,1.604023,0.589333, -0.196146,-0.333078,0.922272,4.404221,1.662433,0.61661, -0.034202,-0.995024,0.093584,4.560024,1.604023,0.589333, 0.06465,-0.997821,-0.013157,4.477781,1.687858,0.597407, -0.196146,-0.333078,0.922272,4.404221,1.662433,0.61661, 0.06465,-0.997821,-0.013157,4.477781,1.687858,0.597407, 0.173736,-0.983834,-0.043437,4.459682,1.778884,0.588185, -0.196146,-0.333078,0.922272,4.404221,1.662433,0.61661, 0.173736,-0.983834,-0.043437,4.459682,1.778884,0.588185, -0.106358,-0.394397,0.912765,4.38638,1.770868,0.596666, -0.106358,-0.394397,0.912765,4.38638,1.770868,0.596666, 0.173736,-0.983834,-0.043437,4.459682,1.778884,0.588185, 0.003817,-0.976864,0.213829,4.43261,1.878873,0.577888, -0.106358,-0.394397,0.912765,4.38638,1.770868,0.596666, 0.003817,-0.976864,0.213829,4.43261,1.878873,0.577888, -0.277696,-0.435918,0.856073,4.377095,1.871713,0.595743, 0.272751,-0.332382,0.902845,5.421809,1.685349,0.123555, -0.301162,-0.110219,0.947182,5.604888,1.546091,0.113773, 0.027992,0.999608,0,5.588763,1.573846,0.000686, 0.272751,-0.332382,0.902845,5.421809,1.685349,0.123555, 0.027992,0.999608,0,5.588763,1.573846,0.000686, -0.925873,-0.377836,0,5.424281,1.721152,0.000496, 0.161397,-0.648358,0.744032,5.383208,1.619661,0.202452, -0.430969,-0.132769,0.892546,5.566339,1.498677,0.190905, -0.301162,-0.110219,0.947182,5.604888,1.546091,0.113773, 0.161397,-0.648358,0.744032,5.383208,1.619661,0.202452, -0.301162,-0.110219,0.947182,5.604888,1.546091,0.113773, 0.272751,-0.332382,0.902845,5.421809,1.685349,0.123555, 0.142784,-0.229696,0.962732,5.373133,1.541142,0.246712, -0.293162,-0.051827,0.954657,5.528186,1.44018,0.250666, -0.430969,-0.132769,0.892546,5.566339,1.498677,0.190905, 0.142784,-0.229696,0.962732,5.373133,1.541142,0.246712, -0.430969,-0.132769,0.892546,5.566339,1.498677,0.190905, 0.161397,-0.648358,0.744032,5.383208,1.619661,0.202452, -0.045194,-0.595739,0.801906,5.334328,1.402713,0.332639, -0.034138,0.050771,0.998127,5.471928,1.345179,0.313899, -0.293162,-0.051827,0.954657,5.528186,1.44018,0.250666, -0.045194,-0.595739,0.801906,5.334328,1.402713,0.332639, -0.293162,-0.051827,0.954657,5.528186,1.44018,0.250666, 0.142784,-0.229696,0.962732,5.373133,1.541142,0.246712, -0.016623,-0.697515,0.716377,5.296963,1.322443,0.357984, -0.101883,0.176778,0.978963,5.425783,1.264372,0.329687, -0.034138,0.050771,0.998127,5.471928,1.345179,0.313899, -0.016623,-0.697515,0.716377,5.296963,1.322443,0.357984, -0.034138,0.050771,0.998127,5.471928,1.345179,0.313899, -0.045194,-0.595739,0.801906,5.334328,1.402713,0.332639, -0.105003,-0.636187,0.764356,5.260653,1.184173,0.352062, -0.172671,0.234525,0.956652,5.397967,1.174238,0.346802, -0.101883,0.176778,0.978963,5.425783,1.264372,0.329687, -0.105003,-0.636187,0.764356,5.260653,1.184173,0.352062, -0.101883,0.176778,0.978963,5.425783,1.264372,0.329687, -0.016623,-0.697515,0.716377,5.296963,1.322443,0.357984, 0.009824,-0.644035,0.764933,5.250485,1.123029,0.385234, -0.317809,0.237298,0.91798,5.388455,1.119419,0.351883, -0.172671,0.234525,0.956652,5.397967,1.174238,0.346802, 0.009824,-0.644035,0.764933,5.250485,1.123029,0.385234, -0.172671,0.234525,0.956652,5.397967,1.174238,0.346802, -0.105003,-0.636187,0.764356,5.260653,1.184173,0.352062, -0.419631,0.061765,0.905591,5.685194,1.452202,0.188749, -0.434729,0.079706,0.897027,5.730427,1.435668,0.209848, -0.31398,0.125786,0.94106,5.741781,1.463956,0.124891, -0.419631,0.061765,0.905591,5.685194,1.452202,0.188749, -0.31398,0.125786,0.94106,5.741781,1.463956,0.124891, -0.241533,0.200654,0.949421,5.687035,1.499636,0.110765, -0.400711,0.089186,0.911853,5.647186,1.394606,0.257833, 0.274471,0.961025,0.033122,5.608974,1.317869,0.319719, -0.497134,0.140474,0.856227,5.710154,1.360653,0.290072, 0.311768,0.950117,-0.008871,5.563253,1.235295,0.317238, 0.563605,0.822456,0.076915,5.681726,1.282503,0.333871, -0.497134,0.140474,0.856227,5.710154,1.360653,0.290072, 0.311768,0.950117,-0.008871,5.563253,1.235295,0.317238, -0.497134,0.140474,0.856227,5.710154,1.360653,0.290072, 0.274471,0.961025,0.033122,5.608974,1.317869,0.319719, 0.381066,0.919021,0.100938,5.580797,1.174135,0.351054, 0.609817,0.770093,0.187296,5.672187,1.164767,0.35408, 0.563605,0.822456,0.076915,5.681726,1.282503,0.333871, 0.381066,0.919021,0.100938,5.580797,1.174135,0.351054, 0.563605,0.822456,0.076915,5.681726,1.282503,0.333871, 0.311768,0.950117,-0.008871,5.563253,1.235295,0.317238, 0.027992,0.999608,0,5.588763,1.573846,0.000686, -0.301162,-0.110219,0.947182,5.604888,1.546091,0.113773, -0.241533,0.200654,0.949421,5.687035,1.499636,0.110765, 0.027992,0.999608,0,5.588763,1.573846,0.000686, -0.241533,0.200654,0.949421,5.687035,1.499636,0.110765, -0.026558,-0.999647,0,5.680007,1.510009,0.000786, -0.430969,-0.132769,0.892546,5.566339,1.498677,0.190905, -0.419631,0.061765,0.905591,5.685194,1.452202,0.188749, -0.241533,0.200654,0.949421,5.687035,1.499636,0.110765, -0.430969,-0.132769,0.892546,5.566339,1.498677,0.190905, -0.241533,0.200654,0.949421,5.687035,1.499636,0.110765, -0.301162,-0.110219,0.947182,5.604888,1.546091,0.113773, -0.430969,-0.132769,0.892546,5.566339,1.498677,0.190905, -0.293162,-0.051827,0.954657,5.528186,1.44018,0.250666, -0.400711,0.089186,0.911853,5.647186,1.394606,0.257833, -0.430969,-0.132769,0.892546,5.566339,1.498677,0.190905, -0.400711,0.089186,0.911853,5.647186,1.394606,0.257833, -0.419631,0.061765,0.905591,5.685194,1.452202,0.188749, -0.034138,0.050771,0.998127,5.471928,1.345179,0.313899, 0.274471,0.961025,0.033122,5.608974,1.317869,0.319719, -0.400711,0.089186,0.911853,5.647186,1.394606,0.257833, -0.034138,0.050771,0.998127,5.471928,1.345179,0.313899, -0.400711,0.089186,0.911853,5.647186,1.394606,0.257833, -0.293162,-0.051827,0.954657,5.528186,1.44018,0.250666, -0.101883,0.176778,0.978963,5.425783,1.264372,0.329687, 0.311768,0.950117,-0.008871,5.563253,1.235295,0.317238, 0.274471,0.961025,0.033122,5.608974,1.317869,0.319719, -0.101883,0.176778,0.978963,5.425783,1.264372,0.329687, 0.274471,0.961025,0.033122,5.608974,1.317869,0.319719, -0.034138,0.050771,0.998127,5.471928,1.345179,0.313899, -0.172671,0.234525,0.956652,5.397967,1.174238,0.346802, 0.381066,0.919021,0.100938,5.580797,1.174135,0.351054, 0.311768,0.950117,-0.008871,5.563253,1.235295,0.317238, -0.172671,0.234525,0.956652,5.397967,1.174238,0.346802, 0.311768,0.950117,-0.008871,5.563253,1.235295,0.317238, -0.101883,0.176778,0.978963,5.425783,1.264372,0.329687, -0.317809,0.237298,0.91798,5.388455,1.119419,0.351883, 0.651262,0.697944,0.297879,5.47963,1.11131,0.364188, 0.381066,0.919021,0.100938,5.580797,1.174135,0.351054, -0.317809,0.237298,0.91798,5.388455,1.119419,0.351883, 0.381066,0.919021,0.100938,5.580797,1.174135,0.351054, -0.172671,0.234525,0.956652,5.397967,1.174238,0.346802, -0.081905,0.996619,-0.006486,5.813217,1.415581,0.195261, -0.134248,0.990294,-0.035988,5.886832,1.385674,0.172365, -0.11884,0.991349,-0.055713,5.915025,1.382159,0.13682, -0.081905,0.996619,-0.006486,5.813217,1.415581,0.195261, -0.11884,0.991349,-0.055713,5.915025,1.382159,0.13682, -0.062808,0.99609,0.062134,5.842092,1.427708,0.130724, -0.11884,0.991349,-0.055713,5.915025,1.382159,0.13682, 0.448666,0.893201,0.029856,5.979357,1.325532,0.125337, 0.663563,0.74812,0.000025,5.963117,1.307775,0.001098, -0.11884,0.991349,-0.055713,5.915025,1.382159,0.13682, 0.663563,0.74812,0.000025,5.963117,1.307775,0.001098, -0.016213,0.999869,0,5.908842,1.388968,0.001026, -0.134248,0.990294,-0.035988,5.886832,1.385674,0.172365, 0.731768,0.675964,0.087106,5.941384,1.330818,0.178936, 0.448666,0.893201,0.029856,5.979357,1.325532,0.125337, -0.134248,0.990294,-0.035988,5.886832,1.385674,0.172365, 0.448666,0.893201,0.029856,5.979357,1.325532,0.125337, -0.11884,0.991349,-0.055713,5.915025,1.382159,0.13682, -0.31398,0.125786,0.94106,5.741781,1.463956,0.124891, -0.062808,0.99609,0.062134,5.842092,1.427708,0.130724, 0.569495,0.821995,-0.000075,5.835498,1.43628,0.000946, -0.31398,0.125786,0.94106,5.741781,1.463956,0.124891, 0.569495,0.821995,-0.000075,5.835498,1.43628,0.000946, 0.694651,0.719347,0.000019,5.743997,1.482739,0.000851, -0.434729,0.079706,0.897027,5.730427,1.435668,0.209848, -0.081905,0.996619,-0.006486,5.813217,1.415581,0.195261, -0.062808,0.99609,0.062134,5.842092,1.427708,0.130724, -0.434729,0.079706,0.897027,5.730427,1.435668,0.209848, -0.062808,0.99609,0.062134,5.842092,1.427708,0.130724, -0.31398,0.125786,0.94106,5.741781,1.463956,0.124891, -0.497134,0.140474,0.856227,5.710154,1.360653,0.290072, -0.0511,0.977083,-0.206633,5.783731,1.341471,0.28459, -0.081905,0.996619,-0.006486,5.813217,1.415581,0.195261, -0.497134,0.140474,0.856227,5.710154,1.360653,0.290072, -0.081905,0.996619,-0.006486,5.813217,1.415581,0.195261, -0.434729,0.079706,0.897027,5.730427,1.435668,0.209848, -0.0511,0.977083,-0.206633,5.783731,1.341471,0.28459, 0.481644,0.842268,-0.242082,5.847989,1.311569,0.261476, -0.134248,0.990294,-0.035988,5.886832,1.385674,0.172365, -0.0511,0.977083,-0.206633,5.783731,1.341471,0.28459, -0.134248,0.990294,-0.035988,5.886832,1.385674,0.172365, -0.081905,0.996619,-0.006486,5.813217,1.415581,0.195261, 0.481644,0.842268,-0.242082,5.847989,1.311569,0.261476, 0.794567,0.588129,-0.15089,5.931474,1.233483,0.215613, 0.731768,0.675964,0.087106,5.941384,1.330818,0.178936, 0.481644,0.842268,-0.242082,5.847989,1.311569,0.261476, 0.731768,0.675964,0.087106,5.941384,1.330818,0.178936, -0.134248,0.990294,-0.035988,5.886832,1.385674,0.172365, 0.731768,0.675964,0.087106,5.941384,1.330818,0.178936, 0.04154,0.947538,-0.316933,5.998088,1.231874,0.107334, 0.448666,0.893201,0.029856,5.979357,1.325532,0.125337, 0.448666,0.893201,0.029856,5.979357,1.325532,0.125337, 0.04154,0.947538,-0.316933,5.998088,1.231874,0.107334, 0.617634,0.786466,0.000062,5.963527,1.232407,0.001121, 0.448666,0.893201,0.029856,5.979357,1.325532,0.125337, 0.617634,0.786466,0.000062,5.963527,1.232407,0.001121, 0.663563,0.74812,0.000025,5.963117,1.307775,0.001098, 0.794567,0.588129,-0.15089,5.931474,1.233483,0.215613, 0.04154,0.947538,-0.316933,5.998088,1.231874,0.107334, 0.731768,0.675964,0.087106,5.941384,1.330818,0.178936, 0.461485,0.788926,-0.405742,5.961686,1.110978,0.090324, 0.651313,0.75881,-0.000286,5.92711,1.131195,0.001118, 0.617634,0.786466,0.000062,5.963527,1.232407,0.001121, 0.461485,0.788926,-0.405742,5.961686,1.110978,0.090324, 0.617634,0.786466,0.000062,5.963527,1.232407,0.001121, 0.04154,0.947538,-0.316933,5.998088,1.231874,0.107334, 0.461485,0.788926,-0.405742,5.961686,1.110978,0.090324, 0.800967,0.453079,-0.391371,5.934596,1.054796,0.077039, 0.909103,0.416568,-0.001454,5.908782,1.066916,0.001121, 0.461485,0.788926,-0.405742,5.961686,1.110978,0.090324, 0.909103,0.416568,-0.001454,5.908782,1.066916,0.001121, 0.651313,0.75881,-0.000286,5.92711,1.131195,0.001118, 0.000755,0.939586,-0.342312,5.950684,1.082725,0.175648, 0.693689,0.317887,-0.646331,5.923808,1.025283,0.153084, 0.800967,0.453079,-0.391371,5.934596,1.054796,0.077039, 0.000755,0.939586,-0.342312,5.950684,1.082725,0.175648, 0.800967,0.453079,-0.391371,5.934596,1.054796,0.077039, 0.461485,0.788926,-0.405742,5.961686,1.110978,0.090324, 0.288171,0.239223,-0.927216,5.763952,1.062109,0.338641, 0.104327,0.725166,-0.680625,5.755282,1.004149,0.307505, -0.051423,0.948155,-0.31362,5.85775,0.997026,0.236768, 0.288171,0.239223,-0.927216,5.763952,1.062109,0.338641, -0.051423,0.948155,-0.31362,5.85775,0.997026,0.236768, 0.525316,0.261332,-0.809783,5.884856,1.062202,0.249545, 0.288171,0.239223,-0.927216,5.763952,1.062109,0.338641, 0.525316,0.261332,-0.809783,5.884856,1.062202,0.249545, 0.204286,0.745568,-0.634347,5.800778,1.078596,0.31945, 0.525316,0.261332,-0.809783,5.884856,1.062202,0.249545, 0.000755,0.939586,-0.342312,5.950684,1.082725,0.175648, 0.969409,0.243854,0.027951,5.959462,1.157227,0.187097, 0.525316,0.261332,-0.809783,5.884856,1.062202,0.249545, 0.969409,0.243854,0.027951,5.959462,1.157227,0.187097, 0.811896,0.498733,0.303464,5.912147,1.117911,0.254197, -0.051423,0.948155,-0.31362,5.85775,0.997026,0.236768, 0.693689,0.317887,-0.646331,5.923808,1.025283,0.153084, 0.000755,0.939586,-0.342312,5.950684,1.082725,0.175648, -0.051423,0.948155,-0.31362,5.85775,0.997026,0.236768, 0.000755,0.939586,-0.342312,5.950684,1.082725,0.175648, 0.525316,0.261332,-0.809783,5.884856,1.062202,0.249545, 0.525316,0.261332,-0.809783,5.884856,1.062202,0.249545, 0.811896,0.498733,0.303464,5.912147,1.117911,0.254197, 0.603382,-0.138832,-0.785275,5.837875,1.141493,0.305184, 0.525316,0.261332,-0.809783,5.884856,1.062202,0.249545, 0.603382,-0.138832,-0.785275,5.837875,1.141493,0.305184, 0.204286,0.745568,-0.634347,5.800778,1.078596,0.31945, 0.204286,0.745568,-0.634347,5.800778,1.078596,0.31945, 0.603382,-0.138832,-0.785275,5.837875,1.141493,0.305184, 0.335985,-0.093512,-0.937214,5.77341,1.225861,0.323025, 0.204286,0.745568,-0.634347,5.800778,1.078596,0.31945, 0.335985,-0.093512,-0.937214,5.77341,1.225861,0.323025, 0.609817,0.770093,0.187296,5.672187,1.164767,0.35408, 0.609817,0.770093,0.187296,5.672187,1.164767,0.35408, 0.335985,-0.093512,-0.937214,5.77341,1.225861,0.323025, 0.104604,0.236958,-0.965872,5.764774,1.279824,0.308562, 0.609817,0.770093,0.187296,5.672187,1.164767,0.35408, 0.104604,0.236958,-0.965872,5.764774,1.279824,0.308562, 0.563605,0.822456,0.076915,5.681726,1.282503,0.333871, 0.563605,0.822456,0.076915,5.681726,1.282503,0.333871, 0.104604,0.236958,-0.965872,5.764774,1.279824,0.308562, -0.0511,0.977083,-0.206633,5.783731,1.341471,0.28459, 0.563605,0.822456,0.076915,5.681726,1.282503,0.333871, -0.0511,0.977083,-0.206633,5.783731,1.341471,0.28459, -0.497134,0.140474,0.856227,5.710154,1.360653,0.290072, -0.163152,0.699849,-0.695408,5.681086,1.054964,0.35586, 0.288171,0.239223,-0.927216,5.763952,1.062109,0.338641, -0.000715,-0.295728,-0.955272,5.690122,1.092917,0.37085, -0.000715,-0.295728,-0.955272,5.690122,1.092917,0.37085, 0.288171,0.239223,-0.927216,5.763952,1.062109,0.338641, 0.204286,0.745568,-0.634347,5.800778,1.078596,0.31945, -0.000715,-0.295728,-0.955272,5.690122,1.092917,0.37085, 0.204286,0.745568,-0.634347,5.800778,1.078596,0.31945, 0.609817,0.770093,0.187296,5.672187,1.164767,0.35408, -0.090939,0.953561,-0.287143,5.598282,1.094735,0.386994, -0.000715,-0.295728,-0.955272,5.690122,1.092917,0.37085, 0.609817,0.770093,0.187296,5.672187,1.164767,0.35408, -0.090939,0.953561,-0.287143,5.598282,1.094735,0.386994, 0.609817,0.770093,0.187296,5.672187,1.164767,0.35408, 0.381066,0.919021,0.100938,5.580797,1.174135,0.351054, 0.651262,0.697944,0.297879,5.47963,1.11131,0.364188, -0.090939,0.953561,-0.287143,5.598282,1.094735,0.386994, 0.381066,0.919021,0.100938,5.580797,1.174135,0.351054, 0.008972,0.708004,-0.706152,5.470775,1.009574,0.355371, -0.090939,0.953561,-0.287143,5.598282,1.094735,0.386994, 0.651262,0.697944,0.297879,5.47963,1.11131,0.364188, 0.809878,-0.450756,0.375387,5.580223,1.04747,0.372696, -0.163152,0.699849,-0.695408,5.681086,1.054964,0.35586, -0.000715,-0.295728,-0.955272,5.690122,1.092917,0.37085, 0.809878,-0.450756,0.375387,5.580223,1.04747,0.372696, -0.000715,-0.295728,-0.955272,5.690122,1.092917,0.37085, -0.090939,0.953561,-0.287143,5.598282,1.094735,0.386994, -0.01139,0.953897,-0.299918,5.580727,0.99933,0.349867, -0.011269,-0.268801,-0.96313,5.672385,1.007694,0.341778, -0.163152,0.699849,-0.695408,5.681086,1.054964,0.35586, -0.01139,0.953897,-0.299918,5.580727,0.99933,0.349867, -0.163152,0.699849,-0.695408,5.681086,1.054964,0.35586, 0.809878,-0.450756,0.375387,5.580223,1.04747,0.372696, -0.090939,0.953561,-0.287143,5.598282,1.094735,0.386994, 0.008972,0.708004,-0.706152,5.470775,1.009574,0.355371, 0.809878,-0.450756,0.375387,5.580223,1.04747,0.372696, 0.008972,0.708004,-0.706152,5.470775,1.009574,0.355371, -0.151742,0.274295,-0.949598,5.535184,0.98018,0.341257, -0.01139,0.953897,-0.299918,5.580727,0.99933,0.349867, 0.008972,0.708004,-0.706152,5.470775,1.009574,0.355371, -0.01139,0.953897,-0.299918,5.580727,0.99933,0.349867, 0.809878,-0.450756,0.375387,5.580223,1.04747,0.372696, 0.795507,-0.586003,0.154171,5.425352,1.035967,0.34272, 0.008972,0.708004,-0.706152,5.470775,1.009574,0.355371, 0.651262,0.697944,0.297879,5.47963,1.11131,0.364188, 0.795507,-0.586003,0.154171,5.425352,1.035967,0.34272, 0.651262,0.697944,0.297879,5.47963,1.11131,0.364188, -0.317809,0.237298,0.91798,5.388455,1.119419,0.351883, 0.743898,-0.655713,-0.129057,5.434594,0.970412,0.330823, 0.008972,0.708004,-0.706152,5.470775,1.009574,0.355371, 0.795507,-0.586003,0.154171,5.425352,1.035967,0.34272, 0.743898,-0.655713,-0.129057,5.434594,0.970412,0.330823, -0.151742,0.274295,-0.949598,5.535184,0.98018,0.341257, 0.008972,0.708004,-0.706152,5.470775,1.009574,0.355371, 0.743898,-0.655713,-0.129057,5.434594,0.970412,0.330823, 0.083641,-0.81989,0.566378,5.480649,0.941387,0.316248, -0.151742,0.274295,-0.949598,5.535184,0.98018,0.341257, 0.042118,-0.881893,0.469564,5.379461,1.045817,0.349748, 0.795507,-0.586003,0.154171,5.425352,1.035967,0.34272, -0.317809,0.237298,0.91798,5.388455,1.119419,0.351883, 0.713982,0.301535,0.631907,5.370709,0.980272,0.337432, 0.743898,-0.655713,-0.129057,5.434594,0.970412,0.330823, 0.795507,-0.586003,0.154171,5.425352,1.035967,0.34272, 0.713982,0.301535,0.631907,5.370709,0.980272,0.337432, 0.795507,-0.586003,0.154171,5.425352,1.035967,0.34272, 0.042118,-0.881893,0.469564,5.379461,1.045817,0.349748, 0.086688,-0.887002,0.453556,5.373646,0.885375,0.20884, 0.083641,-0.81989,0.566378,5.480649,0.941387,0.316248, 0.743898,-0.655713,-0.129057,5.434594,0.970412,0.330823, 0.086688,-0.887002,0.453556,5.373646,0.885375,0.20884, 0.743898,-0.655713,-0.129057,5.434594,0.970412,0.330823, 0.713982,0.301535,0.631907,5.370709,0.980272,0.337432, 0.086688,-0.887002,0.453556,5.373646,0.885375,0.20884, 0.21141,-0.953268,0.215838,5.511556,0.863525,0.177613, 0.176955,-0.903058,0.391373,5.546347,0.916044,0.246782, 0.086688,-0.887002,0.453556,5.373646,0.885375,0.20884, 0.176955,-0.903058,0.391373,5.546347,0.916044,0.246782, 0.083641,-0.81989,0.566378,5.480649,0.941387,0.316248, 0.21141,-0.953268,0.215838,5.511556,0.863525,0.177613, 0.288841,-0.745301,-0.600914,5.60337,0.852748,0.162335, 0.571342,-0.680689,-0.45851,5.638369,0.904402,0.222548, 0.21141,-0.953268,0.215838,5.511556,0.863525,0.177613, 0.571342,-0.680689,-0.45851,5.638369,0.904402,0.222548, 0.176955,-0.903058,0.391373,5.546347,0.916044,0.246782, 0.288841,-0.745301,-0.600914,5.60337,0.852748,0.162335, 0.237421,-0.963021,0.127366,5.70463,0.849158,0.12813, 0.388502,-0.6643,-0.63857,5.748613,0.92049,0.205099, 0.288841,-0.745301,-0.600914,5.60337,0.852748,0.162335, 0.388502,-0.6643,-0.63857,5.748613,0.92049,0.205099, 0.571342,-0.680689,-0.45851,5.638369,0.904402,0.222548, 0.157921,-0.851177,-0.500559,5.241466,1.040469,0.383965, 0.042118,-0.881893,0.469564,5.379461,1.045817,0.349748, -0.317809,0.237298,0.91798,5.388455,1.119419,0.351883, 0.157921,-0.851177,-0.500559,5.241466,1.040469,0.383965, -0.317809,0.237298,0.91798,5.388455,1.119419,0.351883, 0.009824,-0.644035,0.764933,5.250485,1.123029,0.385234, 0.254106,-0.95176,0.171999,5.223571,0.974029,0.362117, 0.713982,0.301535,0.631907,5.370709,0.980272,0.337432, 0.042118,-0.881893,0.469564,5.379461,1.045817,0.349748, 0.254106,-0.95176,0.171999,5.223571,0.974029,0.362117, 0.042118,-0.881893,0.469564,5.379461,1.045817,0.349748, 0.157921,-0.851177,-0.500559,5.241466,1.040469,0.383965, 0.165259,-0.797056,-0.580854,5.299005,0.908991,0.260177, 0.086688,-0.887002,0.453556,5.373646,0.885375,0.20884, 0.713982,0.301535,0.631907,5.370709,0.980272,0.337432, 0.243744,-0.944481,0.220328,5.197562,0.922406,0.302473, 0.165259,-0.797056,-0.580854,5.299005,0.908991,0.260177, 0.713982,0.301535,0.631907,5.370709,0.980272,0.337432, 0.243744,-0.944481,0.220328,5.197562,0.922406,0.302473, 0.713982,0.301535,0.631907,5.370709,0.980272,0.337432, 0.254106,-0.95176,0.171999,5.223571,0.974029,0.362117, 0.20994,-0.930128,0.301309,5.851404,0.929008,0.105362, -0.05208,-0.715695,0.696469,5.797411,0.880032,0.072306, 0.953994,-0.299798,-0.004126,5.78079,0.891286,0.001059, 0.20994,-0.930128,0.301309,5.851404,0.929008,0.105362, 0.953994,-0.299798,-0.004126,5.78079,0.891286,0.001059, 0.997356,-0.072614,-0.002907,5.836005,0.945722,0.001092, 0.388502,-0.6643,-0.63857,5.748613,0.92049,0.205099, 0.237421,-0.963021,0.127366,5.70463,0.849158,0.12813, -0.05208,-0.715695,0.696469,5.797411,0.880032,0.072306, 0.388502,-0.6643,-0.63857,5.748613,0.92049,0.205099, -0.05208,-0.715695,0.696469,5.797411,0.880032,0.072306, 0.20994,-0.930128,0.301309,5.851404,0.929008,0.105362, 0.874313,-0.485341,-0.004579,5.679621,0.8395,0.000985, 0.953994,-0.299798,-0.004126,5.78079,0.891286,0.001059, -0.05208,-0.715695,0.696469,5.797411,0.880032,0.072306, 0.237421,-0.963021,0.127366,5.70463,0.849158,0.12813, 0.287073,-0.905921,0.311283,5.568745,0.834653,0.07139, 0.874313,-0.485341,-0.004579,5.679621,0.8395,0.000985, 0.237421,-0.963021,0.127366,5.70463,0.849158,0.12813, 0.874313,-0.485341,-0.004579,5.679621,0.8395,0.000985, -0.05208,-0.715695,0.696469,5.797411,0.880032,0.072306, 0.287073,-0.905921,0.311283,5.568745,0.834653,0.07139, 0.84332,-0.537393,-0.004381,5.579253,0.837796,0.000896, 0.874313,-0.485341,-0.004579,5.679621,0.8395,0.000985, 0.288841,-0.745301,-0.600914,5.60337,0.852748,0.162335, 0.267121,-0.895396,0.356249,5.449164,0.847535,0.103909, 0.287073,-0.905921,0.311283,5.568745,0.834653,0.07139, 0.288841,-0.745301,-0.600914,5.60337,0.852748,0.162335, 0.287073,-0.905921,0.311283,5.568745,0.834653,0.07139, 0.237421,-0.963021,0.127366,5.70463,0.849158,0.12813, -0.501598,-0.526154,0.686704,5.137075,0.824518,0.144842, 0.598791,-0.8009,-0.003109,5.112563,0.840686,0.00048, 0.832605,-0.553861,-0.002629,5.213434,0.856784,0.000565, -0.501598,-0.526154,0.686704,5.137075,0.824518,0.144842, 0.832605,-0.553861,-0.002629,5.213434,0.856784,0.000565, -0.290459,-0.499809,0.815981,5.247762,0.848549,0.108546, 0.21141,-0.953268,0.215838,5.511556,0.863525,0.177613, -0.538845,-0.659239,0.524452,5.3569,0.85112,0.138324, 0.267121,-0.895396,0.356249,5.449164,0.847535,0.103909, 0.21141,-0.953268,0.215838,5.511556,0.863525,0.177613, 0.267121,-0.895396,0.356249,5.449164,0.847535,0.103909, 0.288841,-0.745301,-0.600914,5.60337,0.852748,0.162335, 0.086688,-0.887002,0.453556,5.373646,0.885375,0.20884, -0.53682,-0.608254,0.58468,5.26443,0.855571,0.181694, -0.538845,-0.659239,0.524452,5.3569,0.85112,0.138324, 0.086688,-0.887002,0.453556,5.373646,0.885375,0.20884, -0.538845,-0.659239,0.524452,5.3569,0.85112,0.138324, 0.21141,-0.953268,0.215838,5.511556,0.863525,0.177613, -0.290459,-0.499809,0.815981,5.247762,0.848549,0.108546, 0.832605,-0.553861,-0.002629,5.213434,0.856784,0.000565, 0.224122,-0.97456,-0.001209,5.323232,0.866039,0.00066, 0.267121,-0.895396,0.356249,5.449164,0.847535,0.103909, -0.020035,-0.999799,-0.000148,5.469641,0.838722,0.000798, 0.84332,-0.537393,-0.004381,5.579253,0.837796,0.000896, 0.267121,-0.895396,0.356249,5.449164,0.847535,0.103909, 0.84332,-0.537393,-0.004381,5.579253,0.837796,0.000896, 0.287073,-0.905921,0.311283,5.568745,0.834653,0.07139, -0.290459,-0.499809,0.815981,5.247762,0.848549,0.108546, 0.224122,-0.97456,-0.001209,5.323232,0.866039,0.00066, -0.020035,-0.999799,-0.000148,5.469641,0.838722,0.000798, -0.290459,-0.499809,0.815981,5.247762,0.848549,0.108546, -0.020035,-0.999799,-0.000148,5.469641,0.838722,0.000798, 0.267121,-0.895396,0.356249,5.449164,0.847535,0.103909, -0.290459,-0.499809,0.815981,5.247762,0.848549,0.108546, 0.267121,-0.895396,0.356249,5.449164,0.847535,0.103909, -0.538845,-0.659239,0.524452,5.3569,0.85112,0.138324, -0.53682,-0.608254,0.58468,5.26443,0.855571,0.181694, -0.290459,-0.499809,0.815981,5.247762,0.848549,0.108546, -0.538845,-0.659239,0.524452,5.3569,0.85112,0.138324, -0.53682,-0.608254,0.58468,5.26443,0.855571,0.181694, 0.086688,-0.887002,0.453556,5.373646,0.885375,0.20884, 0.165259,-0.797056,-0.580854,5.299005,0.908991,0.260177, -0.635877,0.324329,0.700337,5.153735,0.831575,0.218348, -0.53682,-0.608254,0.58468,5.26443,0.855571,0.181694, 0.165259,-0.797056,-0.580854,5.299005,0.908991,0.260177, -0.635877,0.324329,0.700337,5.153735,0.831575,0.218348, 0.165259,-0.797056,-0.580854,5.299005,0.908991,0.260177, 0.243744,-0.944481,0.220328,5.197562,0.922406,0.302473, -0.635877,0.324329,0.700337,5.153735,0.831575,0.218348, -0.501598,-0.526154,0.686704,5.137075,0.824518,0.144842, -0.290459,-0.499809,0.815981,5.247762,0.848549,0.108546, -0.635877,0.324329,0.700337,5.153735,0.831575,0.218348, -0.290459,-0.499809,0.815981,5.247762,0.848549,0.108546, -0.53682,-0.608254,0.58468,5.26443,0.855571,0.181694, -0.376273,-0.140159,0.915846,4.963526,0.797382,0.14344, 0.124158,-0.992262,-0.000543,4.920855,0.812339,0.000318, 0.598791,-0.8009,-0.003109,5.112563,0.840686,0.00048, -0.376273,-0.140159,0.915846,4.963526,0.797382,0.14344, 0.598791,-0.8009,-0.003109,5.112563,0.840686,0.00048, -0.501598,-0.526154,0.686704,5.137075,0.824518,0.144842, -0.508574,-0.111047,0.853827,4.99671,0.81056,0.280771, -0.376273,-0.140159,0.915846,4.963526,0.797382,0.14344, -0.501598,-0.526154,0.686704,5.137075,0.824518,0.144842, -0.508574,-0.111047,0.853827,4.99671,0.81056,0.280771, -0.501598,-0.526154,0.686704,5.137075,0.824518,0.144842, -0.635877,0.324329,0.700337,5.153735,0.831575,0.218348, -0.86136,-0.239794,0.447836,4.66969,0.738163,0.188296, -0.376273,-0.140159,0.915846,4.963526,0.797382,0.14344, -0.508574,-0.111047,0.853827,4.99671,0.81056,0.280771, -0.86136,-0.239794,0.447836,4.66969,0.738163,0.188296, -0.508574,-0.111047,0.853827,4.99671,0.81056,0.280771, -0.724544,-0.128977,0.677054,4.712067,0.770512,0.333393, -0.86136,-0.239794,0.447836,4.66969,0.738163,0.188296, 0.157494,-0.98752,-0.000465,4.655453,0.758022,0.000098, 0.124158,-0.992262,-0.000543,4.920855,0.812339,0.000318, -0.86136,-0.239794,0.447836,4.66969,0.738163,0.188296, 0.124158,-0.992262,-0.000543,4.920855,0.812339,0.000318, -0.376273,-0.140159,0.915846,4.963526,0.797382,0.14344, -0.508574,-0.111047,0.853827,4.99671,0.81056,0.280771, -0.635877,0.324329,0.700337,5.153735,0.831575,0.218348, 0.243744,-0.944481,0.220328,5.197562,0.922406,0.302473, -0.508574,-0.111047,0.853827,4.99671,0.81056,0.280771, 0.243744,-0.944481,0.220328,5.197562,0.922406,0.302473, -0.903777,-0.182749,0.387027,5.004627,0.908637,0.345273, -0.724544,-0.128977,0.677054,4.712067,0.770512,0.333393, -0.508574,-0.111047,0.853827,4.99671,0.81056,0.280771, -0.903777,-0.182749,0.387027,5.004627,0.908637,0.345273, -0.724544,-0.128977,0.677054,4.712067,0.770512,0.333393, -0.903777,-0.182749,0.387027,5.004627,0.908637,0.345273, -0.911341,0.002265,0.411646,4.728809,0.878731,0.405801, -0.566117,0.431683,0.702254,5.021254,0.951308,0.405567, 0.254106,-0.95176,0.171999,5.223571,0.974029,0.362117, 0.157921,-0.851177,-0.500559,5.241466,1.040469,0.383965, -0.566117,0.431683,0.702254,5.021254,0.951308,0.405567, 0.157921,-0.851177,-0.500559,5.241466,1.040469,0.383965, -0.77316,0.344902,0.532228,5.011084,1.06677,0.458562, -0.566117,0.431683,0.702254,5.021254,0.951308,0.405567, -0.903777,-0.182749,0.387027,5.004627,0.908637,0.345273, 0.243744,-0.944481,0.220328,5.197562,0.922406,0.302473, -0.566117,0.431683,0.702254,5.021254,0.951308,0.405567, 0.243744,-0.944481,0.220328,5.197562,0.922406,0.302473, 0.254106,-0.95176,0.171999,5.223571,0.974029,0.362117, -0.383862,0.612068,0.691392,4.74325,1.05921,0.563421, -0.77316,0.344902,0.532228,5.011084,1.06677,0.458562, -0.023775,-0.598435,0.800818,4.991713,1.163096,0.504149, -0.383862,0.612068,0.691392,4.74325,1.05921,0.563421, -0.023775,-0.598435,0.800818,4.991713,1.163096,0.504149, 0.200825,-0.971974,0.122213,4.733657,1.227371,0.592883, -0.091679,0.768658,0.633057,4.744871,0.950945,0.491082, -0.566117,0.431683,0.702254,5.021254,0.951308,0.405567, -0.77316,0.344902,0.532228,5.011084,1.06677,0.458562, -0.091679,0.768658,0.633057,4.744871,0.950945,0.491082, -0.77316,0.344902,0.532228,5.011084,1.06677,0.458562, -0.383862,0.612068,0.691392,4.74325,1.05921,0.563421, -0.911341,0.002265,0.411646,4.728809,0.878731,0.405801, -0.903777,-0.182749,0.387027,5.004627,0.908637,0.345273, -0.566117,0.431683,0.702254,5.021254,0.951308,0.405567, -0.911341,0.002265,0.411646,4.728809,0.878731,0.405801, -0.566117,0.431683,0.702254,5.021254,0.951308,0.405567, -0.091679,0.768658,0.633057,4.744871,0.950945,0.491082, -0.911194,0.285551,0.296961,4.567896,1.149805,0.642484, -0.383862,0.612068,0.691392,4.74325,1.05921,0.563421, 0.200825,-0.971974,0.122213,4.733657,1.227371,0.592883, -0.911194,0.285551,0.296961,4.567896,1.149805,0.642484, 0.200825,-0.971974,0.122213,4.733657,1.227371,0.592883, 0.123418,-0.784469,0.607763,4.641547,1.285422,0.622034, -0.931592,0.319003,0.174278,4.496191,1.024566,0.579491, -0.091679,0.768658,0.633057,4.744871,0.950945,0.491082, -0.383862,0.612068,0.691392,4.74325,1.05921,0.563421, -0.931592,0.319003,0.174278,4.496191,1.024566,0.579491, -0.383862,0.612068,0.691392,4.74325,1.05921,0.563421, -0.911194,0.285551,0.296961,4.567896,1.149805,0.642484, -0.895156,0.397807,0.201112,4.416475,0.921264,0.458839, -0.911341,0.002265,0.411646,4.728809,0.878731,0.405801, -0.091679,0.768658,0.633057,4.744871,0.950945,0.491082, -0.895156,0.397807,0.201112,4.416475,0.921264,0.458839, -0.091679,0.768658,0.633057,4.744871,0.950945,0.491082, -0.931592,0.319003,0.174278,4.496191,1.024566,0.579491, -0.742898,0.572423,0.347036,4.297891,0.911506,0.447987, -0.821562,0.369566,0.434117,4.399629,0.850459,0.391855, -0.895156,0.397807,0.201112,4.416475,0.921264,0.458839, -0.742898,0.572423,0.347036,4.297891,0.911506,0.447987, -0.895156,0.397807,0.201112,4.416475,0.921264,0.458839, -0.885175,0.439902,0.1515,4.333503,0.951176,0.481517, -0.659696,0.567802,0.492343,4.359048,0.700414,0.166651, 0.000801,-1,-0.000539,4.380854,0.704574,-0.00013, 0.157494,-0.98752,-0.000465,4.655453,0.758022,0.000098, -0.659696,0.567802,0.492343,4.359048,0.700414,0.166651, 0.157494,-0.98752,-0.000465,4.655453,0.758022,0.000098, -0.86136,-0.239794,0.447836,4.66969,0.738163,0.188296, 0.11638,0.680311,0.723624,4.319799,0.731007,0.291212, -0.659696,0.567802,0.492343,4.359048,0.700414,0.166651, -0.86136,-0.239794,0.447836,4.66969,0.738163,0.188296, 0.11638,0.680311,0.723624,4.319799,0.731007,0.291212, -0.86136,-0.239794,0.447836,4.66969,0.738163,0.188296, -0.724544,-0.128977,0.677054,4.712067,0.770512,0.333393, 0.11638,0.680311,0.723624,4.319799,0.731007,0.291212, -0.724544,-0.128977,0.677054,4.712067,0.770512,0.333393, -0.821562,0.369566,0.434117,4.399629,0.850459,0.391855, -0.742898,0.572423,0.347036,4.297891,0.911506,0.447987, 0.206279,0.744917,0.634467,4.216374,0.852328,0.405873, 0.11638,0.680311,0.723624,4.319799,0.731007,0.291212, -0.742898,0.572423,0.347036,4.297891,0.911506,0.447987, 0.11638,0.680311,0.723624,4.319799,0.731007,0.291212, -0.821562,0.369566,0.434117,4.399629,0.850459,0.391855, -0.724544,-0.128977,0.677054,4.712067,0.770512,0.333393, -0.911341,0.002265,0.411646,4.728809,0.878731,0.405801, -0.895156,0.397807,0.201112,4.416475,0.921264,0.458839, -0.724544,-0.128977,0.677054,4.712067,0.770512,0.333393, -0.895156,0.397807,0.201112,4.416475,0.921264,0.458839, -0.821562,0.369566,0.434117,4.399629,0.850459,0.391855, -0.476949,0.871027,0.117605,4.366867,1.131136,0.630581, -0.931592,0.319003,0.174278,4.496191,1.024566,0.579491, -0.911194,0.285551,0.296961,4.567896,1.149805,0.642484, -0.476949,0.871027,0.117605,4.366867,1.131136,0.630581, -0.911194,0.285551,0.296961,4.567896,1.149805,0.642484, -0.395804,0.901672,0.174144,4.449011,1.260929,0.647431, 0.206279,0.744917,0.634467,4.216374,0.852328,0.405873, -0.742898,0.572423,0.347036,4.297891,0.911506,0.447987, -0.590367,0.807126,-0.003753,4.141189,1.008775,0.499342, -0.742898,0.572423,0.347036,4.297891,0.911506,0.447987, -0.885175,0.439902,0.1515,4.333503,0.951176,0.481517, -0.594389,0.803108,0.041468,4.277227,1.077746,0.550819, -0.742898,0.572423,0.347036,4.297891,0.911506,0.447987, -0.594389,0.803108,0.041468,4.277227,1.077746,0.550819, -0.590367,0.807126,-0.003753,4.141189,1.008775,0.499342, -0.590367,0.807126,-0.003753,4.141189,1.008775,0.499342, -0.594389,0.803108,0.041468,4.277227,1.077746,0.550819, -0.091114,0.94565,0.312162,4.175444,1.350332,0.613988, -0.590367,0.807126,-0.003753,4.141189,1.008775,0.499342, -0.091114,0.94565,0.312162,4.175444,1.350332,0.613988, -0.610894,0.790229,-0.048447,4.085564,1.288885,0.544406, -0.895156,0.397807,0.201112,4.416475,0.921264,0.458839, -0.931592,0.319003,0.174278,4.496191,1.024566,0.579491, -0.885175,0.439902,0.1515,4.333503,0.951176,0.481517, -0.885175,0.439902,0.1515,4.333503,0.951176,0.481517, -0.931592,0.319003,0.174278,4.496191,1.024566,0.579491, -0.476949,0.871027,0.117605,4.366867,1.131136,0.630581, -0.885175,0.439902,0.1515,4.333503,0.951176,0.481517, -0.476949,0.871027,0.117605,4.366867,1.131136,0.630581, -0.594389,0.803108,0.041468,4.277227,1.077746,0.550819, -0.594389,0.803108,0.041468,4.277227,1.077746,0.550819, -0.476949,0.871027,0.117605,4.366867,1.131136,0.630581, -0.216454,0.960138,0.176868,4.247733,1.381058,0.649596, -0.594389,0.803108,0.041468,4.277227,1.077746,0.550819, -0.216454,0.960138,0.176868,4.247733,1.381058,0.649596, -0.091114,0.94565,0.312162,4.175444,1.350332,0.613988, -0.476949,0.871027,0.117605,4.366867,1.131136,0.630581, -0.395804,0.901672,0.174144,4.449011,1.260929,0.647431, -0.283495,0.953867,0.098839,4.329607,1.464801,0.661485, -0.476949,0.871027,0.117605,4.366867,1.131136,0.630581, -0.283495,0.953867,0.098839,4.329607,1.464801,0.661485, -0.216454,0.960138,0.176868,4.247733,1.381058,0.649596, -0.395804,0.901672,0.174144,4.449011,1.260929,0.647431, 0.050019,-0.552867,0.831767,4.522247,1.398278,0.644892, 0.037801,-0.082839,0.995846,4.430999,1.535753,0.638888, -0.395804,0.901672,0.174144,4.449011,1.260929,0.647431, 0.037801,-0.082839,0.995846,4.430999,1.535753,0.638888, -0.283495,0.953867,0.098839,4.329607,1.464801,0.661485, -0.283495,0.953867,0.098839,4.329607,1.464801,0.661485, 0.037801,-0.082839,0.995846,4.430999,1.535753,0.638888, -0.196146,-0.333078,0.922272,4.404221,1.662433,0.61661, -0.283495,0.953867,0.098839,4.329607,1.464801,0.661485, -0.196146,-0.333078,0.922272,4.404221,1.662433,0.61661, -0.421166,0.906102,0.039982,4.312225,1.683392,0.639944, -0.421166,0.906102,0.039982,4.312225,1.683392,0.639944, -0.196146,-0.333078,0.922272,4.404221,1.662433,0.61661, -0.106358,-0.394397,0.912765,4.38638,1.770868,0.596666, -0.421166,0.906102,0.039982,4.312225,1.683392,0.639944, -0.106358,-0.394397,0.912765,4.38638,1.770868,0.596666, -0.557881,0.828586,-0.047048,4.303615,1.799914,0.610388, -0.557881,0.828586,-0.047048,4.303615,1.799914,0.610388, -0.106358,-0.394397,0.912765,4.38638,1.770868,0.596666, -0.277696,-0.435918,0.856073,4.377095,1.871713,0.595743, -0.557881,0.828586,-0.047048,4.303615,1.799914,0.610388, -0.277696,-0.435918,0.856073,4.377095,1.871713,0.595743, -0.536419,0.710997,0.454685,4.304562,1.906537,0.572242, 0.055369,0.916343,0.396547,4.221814,1.660769,0.59409, -0.421166,0.906102,0.039982,4.312225,1.683392,0.639944, -0.557881,0.828586,-0.047048,4.303615,1.799914,0.610388, 0.055369,0.916343,0.396547,4.221814,1.660769,0.59409, -0.557881,0.828586,-0.047048,4.303615,1.799914,0.610388, -0.678336,0.658323,0.326299,4.240116,1.770049,0.583946, -0.216454,0.960138,0.176868,4.247733,1.381058,0.649596, -0.283495,0.953867,0.098839,4.329607,1.464801,0.661485, -0.421166,0.906102,0.039982,4.312225,1.683392,0.639944, -0.216454,0.960138,0.176868,4.247733,1.381058,0.649596, -0.421166,0.906102,0.039982,4.312225,1.683392,0.639944, 0.055369,0.916343,0.396547,4.221814,1.660769,0.59409, -0.091114,0.94565,0.312162,4.175444,1.350332,0.613988, -0.216454,0.960138,0.176868,4.247733,1.381058,0.649596, 0.055369,0.916343,0.396547,4.221814,1.660769,0.59409, -0.091114,0.94565,0.312162,4.175444,1.350332,0.613988, 0.055369,0.916343,0.396547,4.221814,1.660769,0.59409, 0.090337,0.942369,0.32215,4.121121,1.614451,0.587188, -0.610894,0.790229,-0.048447,4.085564,1.288885,0.544406, -0.091114,0.94565,0.312162,4.175444,1.350332,0.613988, 0.090337,0.942369,0.32215,4.121121,1.614451,0.587188, -0.610894,0.790229,-0.048447,4.085564,1.288885,0.544406, 0.090337,0.942369,0.32215,4.121121,1.614451,0.587188, -0.560402,0.735791,0.380211,4.067576,1.572668,0.534997, 0.090337,0.942369,0.32215,4.121121,1.614451,0.587188, 0.055369,0.916343,0.396547,4.221814,1.660769,0.59409, -0.678336,0.658323,0.326299,4.240116,1.770049,0.583946, 0.090337,0.942369,0.32215,4.121121,1.614451,0.587188, -0.678336,0.658323,0.326299,4.240116,1.770049,0.583946, -0.641133,0.599375,0.479267,4.148883,1.759918,0.573765, -0.560402,0.735791,0.380211,4.067576,1.572668,0.534997, 0.090337,0.942369,0.32215,4.121121,1.614451,0.587188, -0.641133,0.599375,0.479267,4.148883,1.759918,0.573765, -0.560402,0.735791,0.380211,4.067576,1.572668,0.534997, -0.641133,0.599375,0.479267,4.148883,1.759918,0.573765, -0.760994,0.140163,0.633437,4.076852,1.746601,0.527436, 0.203778,-0.389736,0.898098,4.83289,2.262727,0.283787, -0.026148,0.006311,0.999638,4.971394,2.146686,0.224781, -0.989689,-0.143234,0,4.912303,2.162645,-0.00009, 0.203778,-0.389736,0.898098,4.83289,2.262727,0.283787, -0.989689,-0.143234,0,4.912303,2.162645,-0.00009, -0.965284,-0.261201,0,4.747988,2.300163,-0.000276, 0.204472,-0.587725,0.782797,5.156645,1.942902,0.119993, -0.998597,-0.052951,0,5.177545,1.932323,0.000214, -0.941169,-0.337937,0,5.04969,2.032731,0.000071, -0.241533,0.200654,0.949421,5.687035,1.499636,0.110765, -0.31398,0.125786,0.94106,5.741781,1.463956,0.124891, 0.694651,0.719347,0.000019,5.743997,1.482739,0.000851, -0.241533,0.200654,0.949421,5.687035,1.499636,0.110765, 0.694651,0.719347,0.000019,5.743997,1.482739,0.000851, -0.026558,-0.999647,0,5.680007,1.510009,0.000786, -0.062808,0.99609,0.062134,5.842092,1.427708,0.130724, -0.11884,0.991349,-0.055713,5.915025,1.382159,0.13682, -0.016213,0.999869,0,5.908842,1.388968,0.001026, -0.062808,0.99609,0.062134,5.842092,1.427708,0.130724, -0.016213,0.999869,0,5.908842,1.388968,0.001026, 0.569495,0.821995,-0.000075,5.835498,1.43628,0.000946, -0.395037,0.740118,0.544216,4.452383,2.524558,0.130255, 0.169654,-0.985504,-0.000285,4.454962,2.523303,-0.000603, -0.069594,-0.997575,-0.000151,4.317602,2.588926,-0.000745, -0.395037,0.740118,0.544216,4.452383,2.524558,0.130255, -0.069594,-0.997575,-0.000151,4.317602,2.588926,-0.000745, -0.411843,0.771855,0.484381,4.342351,2.581176,0.140317, -0.353793,0.870619,0.341838,4.440143,2.510529,0.269164, -0.395037,0.740118,0.544216,4.452383,2.524558,0.130255, -0.411843,0.771855,0.484381,4.342351,2.581176,0.140317, -0.353793,0.870619,0.341838,4.440143,2.510529,0.269164, -0.411843,0.771855,0.484381,4.342351,2.581176,0.140317, -0.330516,0.821242,0.465104,4.332083,2.586481,0.194917, -0.929249,-0.009268,0.369337,4.429895,2.495758,0.306894, -0.353793,0.870619,0.341838,4.440143,2.510529,0.269164, -0.330516,0.821242,0.465104,4.332083,2.586481,0.194917, -0.929249,-0.009268,0.369337,4.429895,2.495758,0.306894, -0.330516,0.821242,0.465104,4.332083,2.586481,0.194917, -0.718934,0.608496,0.335955,4.339601,2.592642,0.258891, -0.411843,0.771855,0.484381,4.342351,2.581176,0.140317, -0.069594,-0.997575,-0.000151,4.317602,2.588926,-0.000745, 0.172357,-0.985035,-0.000083,4.189883,2.606916,-0.000863, -0.411843,0.771855,0.484381,4.342351,2.581176,0.140317, 0.172357,-0.985035,-0.000083,4.189883,2.606916,-0.000863, -0.144656,0.947613,0.284787,4.187258,2.590221,0.135844, -0.330516,0.821242,0.465104,4.332083,2.586481,0.194917, -0.411843,0.771855,0.484381,4.342351,2.581176,0.140317, -0.144656,0.947613,0.284787,4.187258,2.590221,0.135844, -0.330516,0.821242,0.465104,4.332083,2.586481,0.194917, -0.144656,0.947613,0.284787,4.187258,2.590221,0.135844, -0.364192,0.890167,0.273801,4.203325,2.589186,0.219164, -0.718934,0.608496,0.335955,4.339601,2.592642,0.258891, -0.330516,0.821242,0.465104,4.332083,2.586481,0.194917, -0.364192,0.890167,0.273801,4.203325,2.589186,0.219164, -0.718934,0.608496,0.335955,4.339601,2.592642,0.258891, -0.364192,0.890167,0.273801,4.203325,2.589186,0.219164, -0.719327,0.568276,0.399538,4.211652,2.602538,0.264011, -0.130291,0.991051,0.029017,4.328606,2.563996,0.343892, -0.718934,0.608496,0.335955,4.339601,2.592642,0.258891, -0.719327,0.568276,0.399538,4.211652,2.602538,0.264011, -0.130291,0.991051,0.029017,4.328606,2.563996,0.343892, -0.719327,0.568276,0.399538,4.211652,2.602538,0.264011, -0.904972,-0.026555,0.424641,4.209941,2.600612,0.337597, -0.501953,0.842502,0.195534,4.410844,2.500167,0.351972, -0.929249,-0.009268,0.369337,4.429895,2.495758,0.306894, -0.718934,0.608496,0.335955,4.339601,2.592642,0.258891, -0.501953,0.842502,0.195534,4.410844,2.500167,0.351972, -0.718934,0.608496,0.335955,4.339601,2.592642,0.258891, -0.130291,0.991051,0.029017,4.328606,2.563996,0.343892, 0.241652,-0.897637,0.368581,4.634996,2.369115,0.140117, -0.965284,-0.261201,0,4.747988,2.300163,-0.000276, 0.210866,-0.977515,0.000009,4.528082,2.467537,-0.000521, 0.170159,-0.985033,-0.027502,4.577573,2.389535,0.256196, 0.241652,-0.897637,0.368581,4.634996,2.369115,0.140117, 0.210866,-0.977515,0.000009,4.528082,2.467537,-0.000521, 0.170159,-0.985033,-0.027502,4.577573,2.389535,0.256196, 0.210866,-0.977515,0.000009,4.528082,2.467537,-0.000521, 0.169654,-0.985504,-0.000285,4.454962,2.523303,-0.000603, 0.170159,-0.985033,-0.027502,4.577573,2.389535,0.256196, 0.169654,-0.985504,-0.000285,4.454962,2.523303,-0.000603, -0.395037,0.740118,0.544216,4.452383,2.524558,0.130255, 0.170159,-0.985033,-0.027502,4.577573,2.389535,0.256196, -0.395037,0.740118,0.544216,4.452383,2.524558,0.130255, -0.353793,0.870619,0.341838,4.440143,2.510529,0.269164, 0.170159,-0.985033,-0.027502,4.577573,2.389535,0.256196, -0.353793,0.870619,0.341838,4.440143,2.510529,0.269164, -0.929249,-0.009268,0.369337,4.429895,2.495758,0.306894, -0.929249,-0.009268,0.369337,4.429895,2.495758,0.306894, -0.501953,0.842502,0.195534,4.410844,2.500167,0.351972, -0.849668,0.488771,-0.197904,4.474318,2.418432,0.361347, 0.170159,-0.985033,-0.027502,4.577573,2.389535,0.256196, -0.929249,-0.009268,0.369337,4.429895,2.495758,0.306894, -0.849668,0.488771,-0.197904,4.474318,2.418432,0.361347, 0.231006,-0.859096,0.456717,4.472349,2.325133,0.443764, 0.170159,-0.985033,-0.027502,4.577573,2.389535,0.256196, -0.849668,0.488771,-0.197904,4.474318,2.418432,0.361347, 0.361848,-0.921221,-0.142892,4.043796,2.386524,0.400392, -0.138401,-0.989733,0.035683,4.07851,2.41181,0.472193, 0.207048,-0.965263,0.159371,4.088356,2.510913,0.453793, 0.361848,-0.921221,-0.142892,4.043796,2.386524,0.400392, 0.207048,-0.965263,0.159371,4.088356,2.510913,0.453793, 0.198783,-0.979888,0.017481,4.063205,2.509679,0.342987, 0.3579,-0.920931,0.154253,4.035753,2.399538,0.343957, 0.361848,-0.921221,-0.142892,4.043796,2.386524,0.400392, 0.198783,-0.979888,0.017481,4.063205,2.509679,0.342987, 0.3579,-0.920931,0.154253,4.035753,2.399538,0.343957, 0.198783,-0.979888,0.017481,4.063205,2.509679,0.342987, 0.363913,-0.931415,0.005744,4.055262,2.505284,0.297282, 0.172357,-0.985035,-0.000083,4.189883,2.606916,-0.000863, 0.272993,0.962016,-0.000199,4.079812,2.571649,-0.000951, 0.579082,-0.064826,-0.812688,4.084506,2.570978,0.218168, 0.172357,-0.985035,-0.000083,4.189883,2.606916,-0.000863, 0.579082,-0.064826,-0.812688,4.084506,2.570978,0.218168, -0.144656,0.947613,0.284787,4.187258,2.590221,0.135844, -0.144656,0.947613,0.284787,4.187258,2.590221,0.135844, 0.579082,-0.064826,-0.812688,4.084506,2.570978,0.218168, 0.849086,-0.12151,-0.51409,4.101754,2.557092,0.265856, -0.144656,0.947613,0.284787,4.187258,2.590221,0.135844, 0.849086,-0.12151,-0.51409,4.101754,2.557092,0.265856, -0.364192,0.890167,0.273801,4.203325,2.589186,0.219164, -0.364192,0.890167,0.273801,4.203325,2.589186,0.219164, 0.849086,-0.12151,-0.51409,4.101754,2.557092,0.265856, 0.727891,-0.103877,-0.677779,4.100907,2.560626,0.302396, -0.364192,0.890167,0.273801,4.203325,2.589186,0.219164, 0.727891,-0.103877,-0.677779,4.100907,2.560626,0.302396, -0.719327,0.568276,0.399538,4.211652,2.602538,0.264011, -0.719327,0.568276,0.399538,4.211652,2.602538,0.264011, 0.727891,-0.103877,-0.677779,4.100907,2.560626,0.302396, 0.576293,-0.081905,-0.813128,4.117367,2.568514,0.3845, -0.719327,0.568276,0.399538,4.211652,2.602538,0.264011, 0.576293,-0.081905,-0.813128,4.117367,2.568514,0.3845, -0.904972,-0.026555,0.424641,4.209941,2.600612,0.337597, 0.363913,-0.931415,0.005744,4.055262,2.505284,0.297282, 0.740815,-0.598363,-0.305214,4.029016,2.519175,0.249385, 0.640669,-0.433938,-0.633436,4.00011,2.424158,0.313254, 0.363913,-0.931415,0.005744,4.055262,2.505284,0.297282, 0.640669,-0.433938,-0.633436,4.00011,2.424158,0.313254, 0.3579,-0.920931,0.154253,4.035753,2.399538,0.343957, -0.069267,0.997598,-0.000362,3.988172,2.489642,-0.001008, 0.640669,-0.433938,-0.633436,4.00011,2.424158,0.313254, 0.740815,-0.598363,-0.305214,4.029016,2.519175,0.249385, -0.069267,0.997598,-0.000362,3.988172,2.489642,-0.001008, 0.740815,-0.598363,-0.305214,4.029016,2.519175,0.249385, 0.544067,0.839042,-0.000076,4.024214,2.527933,-0.000987, 0.740815,-0.598363,-0.305214,4.029016,2.519175,0.249385, 0.579082,-0.064826,-0.812688,4.084506,2.570978,0.218168, 0.272993,0.962016,-0.000199,4.079812,2.571649,-0.000951, 0.740815,-0.598363,-0.305214,4.029016,2.519175,0.249385, 0.272993,0.962016,-0.000199,4.079812,2.571649,-0.000951, 0.544067,0.839042,-0.000076,4.024214,2.527933,-0.000987, 0.363913,-0.931415,0.005744,4.055262,2.505284,0.297282, 0.849086,-0.12151,-0.51409,4.101754,2.557092,0.265856, 0.579082,-0.064826,-0.812688,4.084506,2.570978,0.218168, 0.363913,-0.931415,0.005744,4.055262,2.505284,0.297282, 0.579082,-0.064826,-0.812688,4.084506,2.570978,0.218168, 0.740815,-0.598363,-0.305214,4.029016,2.519175,0.249385, 0.198783,-0.979888,0.017481,4.063205,2.509679,0.342987, 0.727891,-0.103877,-0.677779,4.100907,2.560626,0.302396, 0.849086,-0.12151,-0.51409,4.101754,2.557092,0.265856, 0.198783,-0.979888,0.017481,4.063205,2.509679,0.342987, 0.849086,-0.12151,-0.51409,4.101754,2.557092,0.265856, 0.363913,-0.931415,0.005744,4.055262,2.505284,0.297282, 0.207048,-0.965263,0.159371,4.088356,2.510913,0.453793, 0.576293,-0.081905,-0.813128,4.117367,2.568514,0.3845, 0.727891,-0.103877,-0.677779,4.100907,2.560626,0.302396, 0.207048,-0.965263,0.159371,4.088356,2.510913,0.453793, 0.727891,-0.103877,-0.677779,4.100907,2.560626,0.302396, 0.198783,-0.979888,0.017481,4.063205,2.509679,0.342987, -0.613241,-0.041068,-0.788827,3.828001,2.35254,0.233341, 0.640669,-0.433938,-0.633436,4.00011,2.424158,0.313254, -0.069267,0.997598,-0.000362,3.988172,2.489642,-0.001008, -0.613241,-0.041068,-0.788827,3.828001,2.35254,0.233341, -0.069267,0.997598,-0.000362,3.988172,2.489642,-0.001008, 0.622247,0.782821,-0.000247,3.787342,2.396113,-0.001159, -0.613241,-0.041068,-0.788827,3.828001,2.35254,0.233341, -0.745507,-0.065161,-0.663305,3.870548,2.292106,0.368964, -0.611332,-0.037351,-0.790492,3.961908,2.347745,0.374747, -0.613241,-0.041068,-0.788827,3.828001,2.35254,0.233341, -0.611332,-0.037351,-0.790492,3.961908,2.347745,0.374747, 0.640669,-0.433938,-0.633436,4.00011,2.424158,0.313254, -0.747931,-0.041912,-0.662452,4.025364,2.3593,0.402597, 0.361848,-0.921221,-0.142892,4.043796,2.386524,0.400392, 0.3579,-0.920931,0.154253,4.035753,2.399538,0.343957, -0.747931,-0.041912,-0.662452,4.025364,2.3593,0.402597, 0.3579,-0.920931,0.154253,4.035753,2.399538,0.343957, 0.640669,-0.433938,-0.633436,4.00011,2.424158,0.313254, -0.611332,-0.037351,-0.790492,3.961908,2.347745,0.374747, -0.747931,-0.041912,-0.662452,4.025364,2.3593,0.402597, 0.640669,-0.433938,-0.633436,4.00011,2.424158,0.313254, -0.609407,-0.033626,-0.792144,3.967085,2.280648,0.537643, -0.749946,-0.01864,-0.661236,4.077563,2.305187,0.510338, -0.747931,-0.041912,-0.662452,4.025364,2.3593,0.402597, -0.609407,-0.033626,-0.792144,3.967085,2.280648,0.537643, -0.747931,-0.041912,-0.662452,4.025364,2.3593,0.402597, -0.611332,-0.037351,-0.790492,3.961908,2.347745,0.374747, -0.446251,-0.047365,-0.893653,3.903911,2.241501,0.512468, -0.609407,-0.033626,-0.792144,3.967085,2.280648,0.537643, -0.611332,-0.037351,-0.790492,3.961908,2.347745,0.374747, -0.446251,-0.047365,-0.893653,3.903911,2.241501,0.512468, -0.611332,-0.037351,-0.790492,3.961908,2.347745,0.374747, -0.745507,-0.065161,-0.663305,3.870548,2.292106,0.368964, -0.453311,-0.031481,-0.890797,3.823349,2.141733,0.428356, -0.93621,-0.256398,0.240355,3.857922,2.141554,0.521067, -0.446251,-0.047365,-0.893653,3.903911,2.241501,0.512468, -0.453311,-0.031481,-0.890797,3.823349,2.141733,0.428356, -0.446251,-0.047365,-0.893653,3.903911,2.241501,0.512468, -0.745507,-0.065161,-0.663305,3.870548,2.292106,0.368964, -0.124529,-0.930217,0.345238,4.113935,2.334131,0.526471, -0.138401,-0.989733,0.035683,4.07851,2.41181,0.472193, 0.361848,-0.921221,-0.142892,4.043796,2.386524,0.400392, -0.747931,-0.041912,-0.662452,4.025364,2.3593,0.402597, -0.749946,-0.01864,-0.661236,4.077563,2.305187,0.510338, -0.124529,-0.930217,0.345238,4.113935,2.334131,0.526471, -0.747931,-0.041912,-0.662452,4.025364,2.3593,0.402597, -0.124529,-0.930217,0.345238,4.113935,2.334131,0.526471, 0.361848,-0.921221,-0.142892,4.043796,2.386524,0.400392, -0.609407,-0.033626,-0.792144,3.967085,2.280648,0.537643, -0.450889,-0.363512,0.815205,4.010847,2.270246,0.622149, -0.749779,-0.335085,0.57057,4.112302,2.285832,0.5955, -0.609407,-0.033626,-0.792144,3.967085,2.280648,0.537643, -0.749779,-0.335085,0.57057,4.112302,2.285832,0.5955, -0.749946,-0.01864,-0.661236,4.077563,2.305187,0.510338, -0.446251,-0.047365,-0.893653,3.903911,2.241501,0.512468, -0.948723,-0.104868,0.298208,3.928869,2.223919,0.615683, -0.450889,-0.363512,0.815205,4.010847,2.270246,0.622149, -0.446251,-0.047365,-0.893653,3.903911,2.241501,0.512468, -0.450889,-0.363512,0.815205,4.010847,2.270246,0.622149, -0.609407,-0.033626,-0.792144,3.967085,2.280648,0.537643, -0.93621,-0.256398,0.240355,3.857922,2.141554,0.521067, -0.782361,-0.139191,0.607073,3.892378,2.149432,0.603589, -0.948723,-0.104868,0.298208,3.928869,2.223919,0.615683, -0.93621,-0.256398,0.240355,3.857922,2.141554,0.521067, -0.948723,-0.104868,0.298208,3.928869,2.223919,0.615683, -0.446251,-0.047365,-0.893653,3.903911,2.241501,0.512468, -0.450889,-0.363512,0.815205,4.010847,2.270246,0.622149, -0.555116,0.058381,0.829722,4.04473,2.254459,0.744209, -0.515329,-0.156304,0.842618,4.146067,2.278102,0.707372, -0.450889,-0.363512,0.815205,4.010847,2.270246,0.622149, -0.515329,-0.156304,0.842618,4.146067,2.278102,0.707372, -0.749779,-0.335085,0.57057,4.112302,2.285832,0.5955, -0.783471,0.056646,0.618841,3.990744,2.205448,0.710795, -0.555116,0.058381,0.829722,4.04473,2.254459,0.744209, -0.450889,-0.363512,0.815205,4.010847,2.270246,0.622149, -0.783471,0.056646,0.618841,3.990744,2.205448,0.710795, -0.450889,-0.363512,0.815205,4.010847,2.270246,0.622149, -0.948723,-0.104868,0.298208,3.928869,2.223919,0.615683, -0.782361,-0.139191,0.607073,3.892378,2.149432,0.603589, -0.936127,0.049437,0.348169,3.945464,2.1301,0.689536, -0.783471,0.056646,0.618841,3.990744,2.205448,0.710795, -0.782361,-0.139191,0.607073,3.892378,2.149432,0.603589, -0.783471,0.056646,0.618841,3.990744,2.205448,0.710795, -0.948723,-0.104868,0.298208,3.928869,2.223919,0.615683, 0.73986,-0.312403,0.595828,4.212974,2.303184,0.587113, -0.713872,-0.610821,0.342469,4.296769,2.260422,0.528796, -0.124529,-0.930217,0.345238,4.113935,2.334131,0.526471, -0.749779,-0.335085,0.57057,4.112302,2.285832,0.5955, 0.73986,-0.312403,0.595828,4.212974,2.303184,0.587113, -0.124529,-0.930217,0.345238,4.113935,2.334131,0.526471, -0.749779,-0.335085,0.57057,4.112302,2.285832,0.5955, -0.124529,-0.930217,0.345238,4.113935,2.334131,0.526471, -0.749946,-0.01864,-0.661236,4.077563,2.305187,0.510338, -0.749779,-0.335085,0.57057,4.112302,2.285832,0.5955, -0.515329,-0.156304,0.842618,4.146067,2.278102,0.707372, -0.965005,-0.14502,-0.218484,4.212058,2.27945,0.625927, -0.749779,-0.335085,0.57057,4.112302,2.285832,0.5955, -0.965005,-0.14502,-0.218484,4.212058,2.27945,0.625927, 0.73986,-0.312403,0.595828,4.212974,2.303184,0.587113, -0.515329,-0.156304,0.842618,4.146067,2.278102,0.707372, -0.766653,-0.188233,0.61385,4.172143,2.303394,0.778972, -0.98488,-0.159984,0.066451,4.229332,2.274522,0.672749, -0.515329,-0.156304,0.842618,4.146067,2.278102,0.707372, -0.98488,-0.159984,0.066451,4.229332,2.274522,0.672749, -0.965005,-0.14502,-0.218484,4.212058,2.27945,0.625927, -0.555116,0.058381,0.829722,4.04473,2.254459,0.744209, -0.172109,-0.240744,0.955207,4.079122,2.264104,0.84501, -0.766653,-0.188233,0.61385,4.172143,2.303394,0.778972, -0.555116,0.058381,0.829722,4.04473,2.254459,0.744209, -0.766653,-0.188233,0.61385,4.172143,2.303394,0.778972, -0.515329,-0.156304,0.842618,4.146067,2.278102,0.707372, -0.783471,0.056646,0.618841,3.990744,2.205448,0.710795, 0.50391,-0.29577,0.811538,4.0247,2.187859,0.814219, -0.172109,-0.240744,0.955207,4.079122,2.264104,0.84501, -0.783471,0.056646,0.618841,3.990744,2.205448,0.710795, -0.172109,-0.240744,0.955207,4.079122,2.264104,0.84501, -0.555116,0.058381,0.829722,4.04473,2.254459,0.744209, -0.766653,-0.188233,0.61385,4.172143,2.303394,0.778972, -0.986028,-0.026302,-0.164487,4.215419,2.350484,0.885764, 0.74814,-0.190428,0.635629,4.273005,2.310529,0.762172, -0.766653,-0.188233,0.61385,4.172143,2.303394,0.778972, 0.74814,-0.190428,0.635629,4.273005,2.310529,0.762172, -0.98488,-0.159984,0.066451,4.229332,2.274522,0.672749, -0.172109,-0.240744,0.955207,4.079122,2.264104,0.84501, -0.993835,-0.024167,0.108201,4.104864,2.298353,0.915735, -0.986028,-0.026302,-0.164487,4.215419,2.350484,0.885764, -0.172109,-0.240744,0.955207,4.079122,2.264104,0.84501, -0.986028,-0.026302,-0.164487,4.215419,2.350484,0.885764, -0.766653,-0.188233,0.61385,4.172143,2.303394,0.778972, 0.50391,-0.29577,0.811538,4.0247,2.187859,0.814219, -0.76371,-0.034453,0.644639,4.059714,2.194906,0.888152, -0.993835,-0.024167,0.108201,4.104864,2.298353,0.915735, 0.50391,-0.29577,0.811538,4.0247,2.187859,0.814219, -0.993835,-0.024167,0.108201,4.104864,2.298353,0.915735, -0.172109,-0.240744,0.955207,4.079122,2.264104,0.84501, 0.513205,-0.021212,0.858004,4.097362,2.3666,1.239986, 0.744052,-0.065305,0.664923,4.155551,2.388662,1.09196, 0.513577,-0.159689,0.843053,4.102304,2.29996,1.025862, 0.513205,-0.021212,0.858004,4.097362,2.3666,1.239986, 0.513577,-0.159689,0.843053,4.102304,2.29996,1.025862, -0.158973,-0.085654,0.98356,4.061989,2.231988,1.178382, 0.513577,-0.159689,0.843053,4.102304,2.29996,1.025862, -0.141926,0.071007,0.987327,4.194233,2.408334,1.008471, -0.986028,-0.026302,-0.164487,4.215419,2.350484,0.885764, 0.513577,-0.159689,0.843053,4.102304,2.29996,1.025862, -0.986028,-0.026302,-0.164487,4.215419,2.350484,0.885764, -0.993835,-0.024167,0.108201,4.104864,2.298353,0.915735, 0.744052,-0.065305,0.664923,4.155551,2.388662,1.09196, -0.141926,0.071007,0.987327,4.194233,2.408334,1.008471, 0.513577,-0.159689,0.843053,4.102304,2.29996,1.025862, -0.741934,0.120389,0.659576,4.307092,2.367482,0.877202, 0.74814,-0.190428,0.635629,4.273005,2.310529,0.762172, -0.986028,-0.026302,-0.164487,4.215419,2.350484,0.885764, -0.141926,0.071007,0.987327,4.194233,2.408334,1.008471, -0.982826,0.110983,0.147432,4.266263,2.421651,1.054799, -0.741934,0.120389,0.659576,4.307092,2.367482,0.877202, -0.141926,0.071007,0.987327,4.194233,2.408334,1.008471, -0.741934,0.120389,0.659576,4.307092,2.367482,0.877202, -0.986028,-0.026302,-0.164487,4.215419,2.350484,0.885764, 0.744052,-0.065305,0.664923,4.155551,2.388662,1.09196, -0.989845,0.092874,-0.10762,4.228523,2.435029,1.098575, -0.982826,0.110983,0.147432,4.266263,2.421651,1.054799, 0.744052,-0.065305,0.664923,4.155551,2.388662,1.09196, -0.982826,0.110983,0.147432,4.266263,2.421651,1.054799, -0.141926,0.071007,0.987327,4.194233,2.408334,1.008471, 0.513205,-0.021212,0.858004,4.097362,2.3666,1.239986, 0.3936,0.919282,0.000642,4.17047,2.458441,1.241846, -0.989845,0.092874,-0.10762,4.228523,2.435029,1.098575, 0.513205,-0.021212,0.858004,4.097362,2.3666,1.239986, -0.989845,0.092874,-0.10762,4.228523,2.435029,1.098575, 0.744052,-0.065305,0.664923,4.155551,2.388662,1.09196, -0.570564,0.630958,-0.525689,4.058311,2.293363,1.338054, 0.3936,0.919282,0.000642,4.094116,2.426172,1.381032, 0.3936,0.919282,0.000642,4.17047,2.458441,1.241846, -0.570564,0.630958,-0.525689,4.058311,2.293363,1.338054, 0.3936,0.919282,0.000642,4.17047,2.458441,1.241846, 0.513205,-0.021212,0.858004,4.097362,2.3666,1.239986, -0.570564,0.630958,-0.525689,4.046673,2.341349,1.45253, 0.3936,0.919282,0.000642,4.094116,2.426172,1.381032, -0.570564,0.630958,-0.525689,4.058311,2.293363,1.338054, -0.329373,0.540393,-0.774267,4.047406,2.207209,1.015108, 0.513577,-0.159689,0.843053,4.102304,2.29996,1.025862, -0.993835,-0.024167,0.108201,4.104864,2.298353,0.915735, -0.329373,0.540393,-0.774267,4.047406,2.207209,1.015108, -0.993835,-0.024167,0.108201,4.104864,2.298353,0.915735, -0.76371,-0.034453,0.644639,4.059714,2.194906,0.888152, -0.158973,-0.085654,0.98356,4.061989,2.231988,1.178382, 0.513577,-0.159689,0.843053,4.102304,2.29996,1.025862, -0.329373,0.540393,-0.774267,4.047406,2.207209,1.015108, -0.329373,0.540393,-0.774267,3.989434,2.118832,0.765086, 0.50391,-0.29577,0.811538,4.0247,2.187859,0.814219, -0.783471,0.056646,0.618841,3.990744,2.205448,0.710795, -0.329373,0.540393,-0.774267,3.989434,2.118832,0.765086, -0.783471,0.056646,0.618841,3.990744,2.205448,0.710795, -0.936127,0.049437,0.348169,3.945464,2.1301,0.689536, -0.105514,0.43457,-0.894436,4.022592,2.123052,0.903284, -0.76371,-0.034453,0.644639,4.059714,2.194906,0.888152, 0.50391,-0.29577,0.811538,4.0247,2.187859,0.814219, -0.105514,0.43457,-0.894436,4.022592,2.123052,0.903284, 0.50391,-0.29577,0.811538,4.0247,2.187859,0.814219, -0.329373,0.540393,-0.774267,3.989434,2.118832,0.765086, -0.105514,0.43457,-0.894436,4.020299,2.141675,1.002365, -0.329373,0.540393,-0.774267,4.047406,2.207209,1.015108, -0.76371,-0.034453,0.644639,4.059714,2.194906,0.888152, -0.105514,0.43457,-0.894436,4.020299,2.141675,1.002365, -0.76371,-0.034453,0.644639,4.059714,2.194906,0.888152, -0.105514,0.43457,-0.894436,4.022592,2.123052,0.903284, -0.158973,-0.085654,0.98356,4.061989,2.231988,1.178382, -0.329373,0.540393,-0.774267,4.047406,2.207209,1.015108, -0.105514,0.43457,-0.894436,4.020299,2.141675,1.002365, -0.570564,0.630958,-0.525689,4.058311,2.293363,1.338054, 0.513205,-0.021212,0.858004,4.097362,2.3666,1.239986, -0.158973,-0.085654,0.98356,4.061989,2.231988,1.178382, 0.908355,-0.087284,0.408989,4.024858,2.106568,1.208099, -0.158973,-0.085654,0.98356,4.061989,2.231988,1.178382, -0.105514,0.43457,-0.894436,4.020299,2.141675,1.002365, 0.908355,-0.087284,0.408989,4.024858,2.106568,1.208099, -0.105514,0.43457,-0.894436,4.020299,2.141675,1.002365, 0.944023,-0.282834,0.169783,4.036947,1.992167,1.072561, -0.570564,0.630958,-0.525689,4.058311,2.293363,1.338054, -0.158973,-0.085654,0.98356,4.061989,2.231988,1.178382, 0.908355,-0.087284,0.408989,4.024858,2.106568,1.208099, 0.908355,-0.087284,0.408989,4.082988,2.175805,1.45093, -0.570564,0.630958,-0.525689,4.046673,2.341349,1.45253, -0.570564,0.630958,-0.525689,4.058311,2.293363,1.338054, 0.908355,-0.087284,0.408989,4.082988,2.175805,1.45093, -0.570564,0.630958,-0.525689,4.058311,2.293363,1.338054, 0.908355,-0.087284,0.408989,4.024858,2.106568,1.208099, 0.908355,-0.087284,0.408989,4.082988,2.175805,1.45093, 0.908355,-0.087284,0.408989,4.024858,2.106568,1.208099, 0.392037,0.915475,-0.09062,4.103303,2.038565,1.363737, 0.944023,-0.282834,0.169783,4.036947,1.992167,1.072561, 0.392037,0.915475,-0.09062,4.152166,1.868775,1.225002, 0.392037,0.915475,-0.09062,4.103303,2.038565,1.363737, 0.944023,-0.282834,0.169783,4.036947,1.992167,1.072561, 0.392037,0.915475,-0.09062,4.103303,2.038565,1.363737, 0.908355,-0.087284,0.408989,4.024858,2.106568,1.208099, -0.121207,0.426739,-0.896216,4.127903,1.828359,1.090512, 0.392037,0.915475,-0.09062,4.152166,1.868775,1.225002, 0.944023,-0.282834,0.169783,4.036947,1.992167,1.072561, -0.121207,0.426739,-0.896216,4.127903,1.828359,1.090512, 0.944023,-0.282834,0.169783,4.036947,1.992167,1.072561, -0.570559,0.630963,0.525688,4.031515,1.968248,0.91846, 0.944023,-0.282834,0.169783,4.036947,1.992167,1.072561, -0.105514,0.43457,-0.894436,4.020299,2.141675,1.002365, -0.105514,0.43457,-0.894436,4.022592,2.123052,0.903284, 0.944023,-0.282834,0.169783,4.036947,1.992167,1.072561, -0.105514,0.43457,-0.894436,4.022592,2.123052,0.903284, -0.570559,0.630963,0.525688,4.031515,1.968248,0.91846, 0.774828,0.16858,0.60928,3.966639,1.969285,0.549291, -0.93621,-0.256398,0.240355,3.857922,2.141554,0.521067, -0.453311,-0.031481,-0.890797,3.823349,2.141733,0.428356, 0.774828,0.16858,0.60928,3.966639,1.969285,0.549291, -0.453311,-0.031481,-0.890797,3.823349,2.141733,0.428356, -0.570559,0.630963,0.525688,3.922437,1.972461,0.483563, 0.774828,0.16858,0.60928,3.98291,1.987391,0.639809, -0.782361,-0.139191,0.607073,3.892378,2.149432,0.603589, -0.93621,-0.256398,0.240355,3.857922,2.141554,0.521067, 0.774828,0.16858,0.60928,3.98291,1.987391,0.639809, -0.93621,-0.256398,0.240355,3.857922,2.141554,0.521067, 0.774828,0.16858,0.60928,3.966639,1.969285,0.549291, -0.142868,0.456449,-0.878204,4.059885,1.86046,0.470087, -0.142868,0.456449,-0.878204,4.094112,1.889281,0.578435, 0.774828,0.16858,0.60928,3.966639,1.969285,0.549291, -0.142868,0.456449,-0.878204,4.059885,1.86046,0.470087, 0.774828,0.16858,0.60928,3.966639,1.969285,0.549291, -0.570559,0.630963,0.525688,3.922437,1.972461,0.483563, -0.142868,0.456449,-0.878204,4.094112,1.889281,0.578435, 0.774828,0.16858,0.60928,3.98291,1.987391,0.639809, 0.774828,0.16858,0.60928,3.966639,1.969285,0.549291, 0.77718,0.24762,0.578512,4.017509,1.996169,0.731654, -0.570559,0.630963,0.525688,4.031515,1.968248,0.91846, -0.105514,0.43457,-0.894436,4.022592,2.123052,0.903284, 0.77718,0.24762,0.578512,4.017509,1.996169,0.731654, -0.105514,0.43457,-0.894436,4.022592,2.123052,0.903284, -0.329373,0.540393,-0.774267,3.989434,2.118832,0.765086, -0.329373,0.540393,-0.774267,3.989434,2.118832,0.765086, -0.936127,0.049437,0.348169,3.945464,2.1301,0.689536, 0.77718,0.24762,0.578512,4.017509,1.996169,0.731654, 0.77718,0.24762,0.578512,4.017509,1.996169,0.731654, -0.936127,0.049437,0.348169,3.945464,2.1301,0.689536, -0.782361,-0.139191,0.607073,3.892378,2.149432,0.603589, 0.77718,0.24762,0.578512,4.017509,1.996169,0.731654, -0.782361,-0.139191,0.607073,3.892378,2.149432,0.603589, 0.774828,0.16858,0.60928,3.98291,1.987391,0.639809, -0.142868,0.456449,-0.878204,4.094112,1.889281,0.578435, 0.77718,0.24762,0.578512,4.017509,1.996169,0.731654, 0.774828,0.16858,0.60928,3.98291,1.987391,0.639809, -0.142868,0.456449,-0.878204,4.094112,1.889281,0.578435, -0.121207,0.426739,-0.896216,4.150297,1.820575,0.917046, 0.77718,0.24762,0.578512,4.017509,1.996169,0.731654, -0.121207,0.426739,-0.896216,4.150297,1.820575,0.917046, -0.121207,0.426739,-0.896216,4.127903,1.828359,1.090512, -0.570559,0.630963,0.525688,4.031515,1.968248,0.91846, -0.121207,0.426739,-0.896216,4.150297,1.820575,0.917046, -0.570559,0.630963,0.525688,4.031515,1.968248,0.91846, 0.77718,0.24762,0.578512,4.017509,1.996169,0.731654, 0.108306,-0.808441,0.578527,4.389484,2.190421,0.47332, 0.231006,-0.859096,0.456717,4.472349,2.325133,0.443764, -0.713872,-0.610821,0.342469,4.296769,2.260422,0.528796, 0.424214,0.855079,-0.298131,4.3427,2.112281,0.516692, 0.108306,-0.808441,0.578527,4.389484,2.190421,0.47332, 0.77718,0.24762,0.578512,4.314791,2.142163,0.54065, 0.353564,0.891052,-0.284638,4.305411,2.059245,0.539407, 0.424214,0.855079,-0.298131,4.3427,2.112281,0.516692, 0.77718,0.24762,0.578512,4.314791,2.142163,0.54065, 0.108306,-0.808441,0.578527,4.389484,2.190421,0.47332, -0.713872,-0.610821,0.342469,4.296769,2.260422,0.528796, 0.77718,0.24762,0.578512,4.314791,2.142163,0.54065, 0.125846,-0.929941,0.345503,4.43302,2.024714,0.563794, 0.108306,-0.808441,0.578527,4.389484,2.190421,0.47332, 0.424214,0.855079,-0.298131,4.3427,2.112281,0.516692, 0.125846,-0.929941,0.345503,4.43302,2.024714,0.563794, 0.424214,0.855079,-0.298131,4.3427,2.112281,0.516692, 0.353564,0.891052,-0.284638,4.305411,2.059245,0.539407, 0.771387,0.339113,0.538483,4.101726,2.312318,1.438163, -0.142868,0.456449,0.878205,4.148927,2.388726,1.376879, 0.3936,0.919282,0.000642,4.094116,2.426172,1.381032, 0.771387,0.339113,0.538483,4.101726,2.312318,1.438163, 0.3936,0.919282,0.000642,4.094116,2.426172,1.381032, -0.570564,0.630958,-0.525689,4.046673,2.341349,1.45253, 0.63166,0.704336,-0.323908,4.129926,2.30877,1.402259, 0.229942,0.797697,-0.5575,4.140097,2.295949,1.367196, 0.22211,0.815123,-0.535015,4.169404,2.306276,1.284031, 0.63166,0.704336,-0.323908,4.129926,2.30877,1.402259, 0.22211,0.815123,-0.535015,4.169404,2.306276,1.284031, 0.459043,0.888414,0.000701,4.149438,2.34055,1.353693, 0.229942,0.797697,-0.5575,4.140097,2.295949,1.367196, 0.017957,0.744062,-0.667869,4.141759,2.279958,1.29534, 0.22211,0.815123,-0.535015,4.169404,2.306276,1.284031, -0.142868,0.456449,0.878205,4.148927,2.388726,1.376879, -0.142868,0.456449,0.878205,4.197644,2.394643,1.248646, 0.3936,0.919282,0.000642,4.17047,2.458441,1.241846, -0.142868,0.456449,0.878205,4.148927,2.388726,1.376879, 0.3936,0.919282,0.000642,4.17047,2.458441,1.241846, 0.3936,0.919282,0.000642,4.094116,2.426172,1.381032, 0.459043,0.888414,0.000701,4.149438,2.34055,1.353693, 0.498956,0.866627,0.000639,4.197516,2.349135,1.253043, -0.142868,0.456449,0.878205,4.197644,2.394643,1.248646, 0.459043,0.888414,0.000701,4.149438,2.34055,1.353693, -0.142868,0.456449,0.878205,4.197644,2.394643,1.248646, -0.142868,0.456449,0.878205,4.148927,2.388726,1.376879, 0.459043,0.888414,0.000701,4.149438,2.34055,1.353693, 0.22211,0.815123,-0.535015,4.169404,2.306276,1.284031, 0.13983,0.720686,-0.679014,4.199317,2.304652,1.17454, 0.459043,0.888414,0.000701,4.149438,2.34055,1.353693, 0.13983,0.720686,-0.679014,4.199317,2.304652,1.17454, 0.498956,0.866627,0.000639,4.197516,2.349135,1.253043, -0.329371,0.540395,0.774266,4.26732,2.121987,0.61494, 0.77718,0.24762,0.578512,4.314791,2.142163,0.54065, -0.713872,-0.610821,0.342469,4.296769,2.260422,0.528796, -0.329371,0.540395,0.774266,4.26732,2.121987,0.61494, -0.713872,-0.610821,0.342469,4.296769,2.260422,0.528796, 0.292429,0.900404,-0.322114,4.274886,2.22003,0.679075, -0.329371,0.540395,0.774266,4.354411,2.102985,0.80258, -0.329371,0.540395,0.774266,4.26732,2.121987,0.61494, 0.292429,0.900404,-0.322114,4.274886,2.22003,0.679075, -0.329371,0.540395,0.774266,4.354411,2.102985,0.80258, 0.292429,0.900404,-0.322114,4.274886,2.22003,0.679075, -0.105515,0.43457,0.894436,4.38099,2.207701,0.839016, -0.965005,-0.14502,-0.218484,4.212058,2.27945,0.625927, -0.713872,-0.610821,0.342469,4.296769,2.260422,0.528796, 0.73986,-0.312403,0.595828,4.212974,2.303184,0.587113, -0.98488,-0.159984,0.066451,4.229332,2.274522,0.672749, -0.713872,-0.610821,0.342469,4.296769,2.260422,0.528796, -0.965005,-0.14502,-0.218484,4.212058,2.27945,0.625927, 0.292429,0.900404,-0.322114,4.274886,2.22003,0.679075, -0.713872,-0.610821,0.342469,4.296769,2.260422,0.528796, -0.98488,-0.159984,0.066451,4.229332,2.274522,0.672749, 0.292429,0.900404,-0.322114,4.274886,2.22003,0.679075, -0.98488,-0.159984,0.066451,4.229332,2.274522,0.672749, 0.74814,-0.190428,0.635629,4.273005,2.310529,0.762172, -0.741934,0.120389,0.659576,4.307092,2.367482,0.877202, 0.292429,0.900404,-0.322114,4.274886,2.22003,0.679075, 0.74814,-0.190428,0.635629,4.273005,2.310529,0.762172, 0.353564,0.891052,-0.284638,4.305411,2.059245,0.539407, 0.77718,0.24762,0.578512,4.314791,2.142163,0.54065, -0.329371,0.540395,0.774266,4.26732,2.121987,0.61494, -0.105515,0.43457,0.894436,4.369751,2.298204,0.921894, -0.105515,0.43457,0.894436,4.38099,2.207701,0.839016, 0.292429,0.900404,-0.322114,4.274886,2.22003,0.679075, -0.105515,0.43457,0.894436,4.369751,2.298204,0.921894, 0.292429,0.900404,-0.322114,4.274886,2.22003,0.679075, -0.741934,0.120389,0.659576,4.307092,2.367482,0.877202, -0.105515,0.43457,0.894436,4.369751,2.298204,0.921894, -0.741934,0.120389,0.659576,4.307092,2.367482,0.877202, -0.982826,0.110983,0.147432,4.266263,2.421651,1.054799, -0.105515,0.43457,0.894436,4.369751,2.298204,0.921894, -0.982826,0.110983,0.147432,4.266263,2.421651,1.054799, 0.781263,0.307132,0.543414,4.303193,2.347123,1.044413, 0.781263,0.307132,0.543414,4.303193,2.347123,1.044413, -0.982826,0.110983,0.147432,4.266263,2.421651,1.054799, -0.989845,0.092874,-0.10762,4.228523,2.435029,1.098575, 0.781263,0.307132,0.543414,4.303193,2.347123,1.044413, -0.989845,0.092874,-0.10762,4.228523,2.435029,1.098575, 0.781263,0.307132,0.543414,4.245861,2.375093,1.141312, -0.989845,0.092874,-0.10762,4.228523,2.435029,1.098575, 0.3936,0.919282,0.000642,4.17047,2.458441,1.241846, -0.142868,0.456449,0.878205,4.197644,2.394643,1.248646, -0.989845,0.092874,-0.10762,4.228523,2.435029,1.098575, -0.142868,0.456449,0.878205,4.197644,2.394643,1.248646, 0.781263,0.307132,0.543414,4.245861,2.375093,1.141312, 0.589285,0.807925,0.000704,4.218457,2.356834,1.142444, 0.781263,0.307132,0.543414,4.245861,2.375093,1.141312, -0.142868,0.456449,0.878205,4.197644,2.394643,1.248646, 0.589285,0.807925,0.000704,4.218457,2.356834,1.142444, -0.142868,0.456449,0.878205,4.197644,2.394643,1.248646, 0.498956,0.866627,0.000639,4.197516,2.349135,1.253043, 0.685325,0.728237,0.000788,4.275405,2.319905,1.0464, 0.781263,0.307132,0.543414,4.303193,2.347123,1.044413, 0.781263,0.307132,0.543414,4.245861,2.375093,1.141312, 0.685325,0.728237,0.000788,4.275405,2.319905,1.0464, 0.781263,0.307132,0.543414,4.245861,2.375093,1.141312, 0.589285,0.807925,0.000704,4.218457,2.356834,1.142444, 0.685325,0.728237,0.000788,4.275405,2.319905,1.0464, 0.682044,0.731311,0.000573,4.296538,2.243779,0.925459, -0.105515,0.43457,0.894436,4.369751,2.298204,0.921894, 0.685325,0.728237,0.000788,4.275405,2.319905,1.0464, -0.105515,0.43457,0.894436,4.369751,2.298204,0.921894, 0.781263,0.307132,0.543414,4.303193,2.347123,1.044413, 0.682044,0.731311,0.000573,4.296538,2.243779,0.925459, 0.649774,0.760128,0.000367,4.289048,2.172969,0.858693, -0.105515,0.43457,0.894436,4.38099,2.207701,0.839016, 0.682044,0.731311,0.000573,4.296538,2.243779,0.925459, -0.105515,0.43457,0.894436,4.38099,2.207701,0.839016, -0.105515,0.43457,0.894436,4.369751,2.298204,0.921894, 0.589285,0.807925,0.000704,4.218457,2.356834,1.142444, 0.498956,0.866627,0.000639,4.197516,2.349135,1.253043, 0.13983,0.720686,-0.679014,4.199317,2.304652,1.17454, 0.282216,0.811186,-0.512182,4.211815,2.28249,1.039137, 0.685325,0.728237,0.000788,4.275405,2.319905,1.0464, 0.589285,0.807925,0.000704,4.218457,2.356834,1.142444, 0.282216,0.811186,-0.512182,4.211815,2.28249,1.039137, 0.589285,0.807925,0.000704,4.218457,2.356834,1.142444, 0.13983,0.720686,-0.679014,4.199317,2.304652,1.17454, 0.259533,0.686122,-0.679617,4.278045,1.97666,0.537351, 0.353564,0.891052,-0.284638,4.305411,2.059245,0.539407, -0.329371,0.540395,0.774266,4.26732,2.121987,0.61494, 0.259533,0.686122,-0.679617,4.278045,1.97666,0.537351, -0.329371,0.540395,0.774266,4.26732,2.121987,0.61494, -0.329371,0.540395,0.774266,4.354411,2.102985,0.80258, 0.391878,0.915416,0.091898,4.290375,2.112337,0.80019, -0.329371,0.540395,0.774266,4.354411,2.102985,0.80258, -0.105515,0.43457,0.894436,4.38099,2.207701,0.839016, 0.391878,0.915416,0.091898,4.290375,2.112337,0.80019, -0.105515,0.43457,0.894436,4.38099,2.207701,0.839016, 0.649774,0.760128,0.000367,4.289048,2.172969,0.858693, 0.540427,-0.323841,-0.776573,4.222795,2.228178,0.952752, 0.682044,0.731311,0.000573,4.296538,2.243779,0.925459, 0.685325,0.728237,0.000788,4.275405,2.319905,1.0464, 0.540427,-0.323841,-0.776573,4.222795,2.228178,0.952752, 0.685325,0.728237,0.000788,4.275405,2.319905,1.0464, 0.282216,0.811186,-0.512182,4.211815,2.28249,1.039137, 0.540427,-0.323841,-0.776573,4.197609,2.164063,0.857433, 0.649774,0.760128,0.000367,4.289048,2.172969,0.858693, 0.682044,0.731311,0.000573,4.296538,2.243779,0.925459, 0.540427,-0.323841,-0.776573,4.197609,2.164063,0.857433, 0.682044,0.731311,0.000573,4.296538,2.243779,0.925459, 0.540427,-0.323841,-0.776573,4.222795,2.228178,0.952752, 0.384749,-0.683591,-0.620219,4.153175,2.084823,0.799668, 0.391878,0.915416,0.091898,4.290375,2.112337,0.80019, 0.649774,0.760128,0.000367,4.289048,2.172969,0.858693, 0.384749,-0.683591,-0.620219,4.153175,2.084823,0.799668, 0.649774,0.760128,0.000367,4.289048,2.172969,0.858693, 0.540427,-0.323841,-0.776573,4.197609,2.164063,0.857433, 0.384749,-0.683591,-0.620219,4.153175,2.084823,0.799668, 0.540427,-0.323841,-0.776573,4.197609,2.164063,0.857433, 0.292794,-0.691168,-0.660725,4.15109,2.102939,0.889759, 0.292794,-0.691168,-0.660725,4.15109,2.102939,0.889759, 0.540427,-0.323841,-0.776573,4.197609,2.164063,0.857433, 0.540427,-0.323841,-0.776573,4.222795,2.228178,0.952752, 0.292794,-0.691168,-0.660725,4.15109,2.102939,0.889759, 0.540427,-0.323841,-0.776573,4.222795,2.228178,0.952752, 0.404933,-0.417851,-0.813283,4.148865,2.148829,0.986567, 0.404933,-0.417851,-0.813283,4.148865,2.148829,0.986567, 0.540427,-0.323841,-0.776573,4.222795,2.228178,0.952752, 0.282216,0.811186,-0.512182,4.211815,2.28249,1.039137, 0.404933,-0.417851,-0.813283,4.148865,2.148829,0.986567, 0.282216,0.811186,-0.512182,4.211815,2.28249,1.039137, 0.551755,-0.23466,-0.800313,4.154566,2.19048,1.129552, 0.551755,-0.23466,-0.800313,4.154566,2.19048,1.129552, 0.282216,0.811186,-0.512182,4.211815,2.28249,1.039137, 0.13983,0.720686,-0.679014,4.199317,2.304652,1.17454, 0.551755,-0.23466,-0.800313,4.154566,2.19048,1.129552, 0.13983,0.720686,-0.679014,4.199317,2.304652,1.17454, 0.202713,-0.881703,-0.426036,4.152557,2.235471,1.217046, 0.202713,-0.881703,-0.426036,4.152557,2.235471,1.217046, 0.13983,0.720686,-0.679014,4.199317,2.304652,1.17454, 0.22211,0.815123,-0.535015,4.169404,2.306276,1.284031, 0.202713,-0.881703,-0.426036,4.152557,2.235471,1.217046, 0.22211,0.815123,-0.535015,4.169404,2.306276,1.284031, 0.017957,0.744062,-0.667869,4.141759,2.279958,1.29534, 0.384749,-0.683591,-0.620219,4.153175,2.084823,0.799668, 0.292794,-0.691168,-0.660725,4.15109,2.102939,0.889759, 0.149569,-0.88683,-0.437221,4.131949,2.050757,0.921856, 0.149569,-0.88683,-0.437221,4.131949,2.050757,0.921856, 0.292794,-0.691168,-0.660725,4.15109,2.102939,0.889759, 0.404933,-0.417851,-0.813283,4.148865,2.148829,0.986567, 0.149569,-0.88683,-0.437221,4.131949,2.050757,0.921856, 0.404933,-0.417851,-0.813283,4.148865,2.148829,0.986567, 0.551755,-0.23466,-0.800313,4.119993,2.063095,1.049178, 0.551755,-0.23466,-0.800313,4.119993,2.063095,1.049178, 0.404933,-0.417851,-0.813283,4.148865,2.148829,0.986567, 0.551755,-0.23466,-0.800313,4.154566,2.19048,1.129552, 0.551755,-0.23466,-0.800313,4.119993,2.063095,1.049178, 0.551755,-0.23466,-0.800313,4.154566,2.19048,1.129552, 0.171366,-0.691521,-0.701735,4.12616,2.12093,1.17252, 0.171366,-0.691521,-0.701735,4.12616,2.12093,1.17252, 0.551755,-0.23466,-0.800313,4.154566,2.19048,1.129552, 0.202713,-0.881703,-0.426036,4.152557,2.235471,1.217046, 0.171366,-0.691521,-0.701735,4.12616,2.12093,1.17252, 0.202713,-0.881703,-0.426036,4.152557,2.235471,1.217046, 0.256636,-0.859143,-0.442732,4.133175,2.175231,1.259323, 0.202713,-0.881703,-0.426036,4.152557,2.235471,1.217046, 0.017957,0.744062,-0.667869,4.141759,2.279958,1.29534, 0.256636,-0.859143,-0.442732,4.133175,2.175231,1.259323, 0.600629,0.618513,-0.506642,4.159229,1.949902,0.923197, 0.149569,-0.88683,-0.437221,4.131949,2.050757,0.921856, 0.551755,-0.23466,-0.800313,4.119993,2.063095,1.049178, 0.600629,0.618513,-0.506642,4.159229,1.949902,0.923197, 0.551755,-0.23466,-0.800313,4.119993,2.063095,1.049178, 0.648166,0.682063,-0.338631,4.137657,1.944837,1.061024, 0.648166,0.682063,-0.338631,4.137657,1.944837,1.061024, 0.551755,-0.23466,-0.800313,4.119993,2.063095,1.049178, 0.171366,-0.691521,-0.701735,4.12616,2.12093,1.17252, 0.648166,0.682063,-0.338631,4.137657,1.944837,1.061024, 0.171366,-0.691521,-0.701735,4.12616,2.12093,1.17252, 0.61118,0.658001,-0.439878,4.143794,2.01372,1.201386, 0.61118,0.658001,-0.439878,4.143794,2.01372,1.201386, 0.171366,-0.691521,-0.701735,4.12616,2.12093,1.17252, 0.256636,-0.859143,-0.442732,4.133175,2.175231,1.259323, 0.61118,0.658001,-0.439878,4.143794,2.01372,1.201386, 0.256636,-0.859143,-0.442732,4.133175,2.175231,1.259323, 0.503641,0.551737,-0.66478,4.12329,2.086854,1.295135, 0.503641,0.551737,-0.66478,4.12329,2.086854,1.295135, 0.256636,-0.859143,-0.442732,4.133175,2.175231,1.259323, 0.017957,0.744062,-0.667869,4.141759,2.279958,1.29534, 0.503641,0.551737,-0.66478,4.12329,2.086854,1.295135, 0.017957,0.744062,-0.667869,4.141759,2.279958,1.29534, 0.517427,0.766113,-0.381235,4.11268,2.195089,1.366908, 0.517427,0.766113,-0.381235,4.11268,2.195089,1.366908, 0.017957,0.744062,-0.667869,4.141759,2.279958,1.29534, 0.229942,0.797697,-0.5575,4.140097,2.295949,1.367196, 0.517427,0.766113,-0.381235,4.11268,2.195089,1.366908, 0.229942,0.797697,-0.5575,4.140097,2.295949,1.367196, 0.41344,0.676483,-0.609457,4.111934,2.234814,1.399949, 0.229942,0.797697,-0.5575,4.140097,2.295949,1.367196, 0.63166,0.704336,-0.323908,4.129926,2.30877,1.402259, 0.41344,0.676483,-0.609457,4.111934,2.234814,1.399949, 0.154813,-0.698608,-0.698555,4.232341,1.903079,0.534362, -0.536419,0.710997,0.454685,4.304562,1.906537,0.572242, 0.259533,0.686122,-0.679617,4.278045,1.97666,0.537351, -0.557881,0.828586,-0.047048,4.303615,1.799914,0.610388, -0.536419,0.710997,0.454685,4.304562,1.906537,0.572242, 0.154813,-0.698608,-0.698555,4.232341,1.903079,0.534362, -0.557881,0.828586,-0.047048,4.303615,1.799914,0.610388, 0.154813,-0.698608,-0.698555,4.232341,1.903079,0.534362, -0.678336,0.658323,0.326299,4.240116,1.770049,0.583946, -0.277696,-0.435918,0.856073,4.377095,1.871713,0.595743, 0.353564,0.891052,-0.284638,4.305411,2.059245,0.539407, 0.259533,0.686122,-0.679617,4.278045,1.97666,0.537351, -0.277696,-0.435918,0.856073,4.377095,1.871713,0.595743, 0.259533,0.686122,-0.679617,4.278045,1.97666,0.537351, -0.536419,0.710997,0.454685,4.304562,1.906537,0.572242, 0.003817,-0.976864,0.213829,4.43261,1.878873,0.577888, 0.125846,-0.929941,0.345503,4.43302,2.024714,0.563794, 0.353564,0.891052,-0.284638,4.305411,2.059245,0.539407, 0.003817,-0.976864,0.213829,4.43261,1.878873,0.577888, 0.353564,0.891052,-0.284638,4.305411,2.059245,0.539407, -0.277696,-0.435918,0.856073,4.377095,1.871713,0.595743, -0.678336,0.658323,0.326299,4.240116,1.770049,0.583946, 0.154813,-0.698608,-0.698555,4.232341,1.903079,0.534362, -0.142868,0.456449,-0.878204,4.094112,1.889281,0.578435, -0.678336,0.658323,0.326299,4.240116,1.770049,0.583946, -0.142868,0.456449,-0.878204,4.094112,1.889281,0.578435, -0.641133,0.599375,0.479267,4.148883,1.759918,0.573765, 0.391878,0.915416,0.091898,4.281287,2.055751,0.787, -0.329371,0.540395,0.774266,4.354411,2.102985,0.80258, 0.391878,0.915416,0.091898,4.290375,2.112337,0.80019, 0.391878,0.915416,0.091898,4.281287,2.055751,0.787, -0.121207,0.426739,0.896216,4.354941,2.064161,0.778851, -0.329371,0.540395,0.774266,4.354411,2.102985,0.80258, -0.121207,0.426739,0.896216,4.245225,2.008532,0.772641, -0.121207,0.426739,0.896216,4.354941,2.064161,0.778851, 0.391878,0.915416,0.091898,4.281287,2.055751,0.787, 0.391878,0.915416,0.091898,4.281287,2.055751,0.787, 0.391878,0.915416,0.091898,4.290375,2.112337,0.80019, 0.384749,-0.683591,-0.620219,4.153175,2.084823,0.799668, 0.600629,0.618513,-0.506642,4.159229,1.949902,0.923197, 0.391878,0.915416,0.091898,4.281287,2.055751,0.787, 0.384749,-0.683591,-0.620219,4.153175,2.084823,0.799668, 0.600629,0.618513,-0.506642,4.159229,1.949902,0.923197, 0.384749,-0.683591,-0.620219,4.153175,2.084823,0.799668, 0.149569,-0.88683,-0.437221,4.131949,2.050757,0.921856, 0.259533,0.686122,-0.679617,4.278045,1.97666,0.537351, -0.329371,0.540395,0.774266,4.354411,2.102985,0.80258, -0.121207,0.426739,0.896216,4.354941,2.064161,0.778851, -0.121207,0.426739,0.896216,4.245225,2.008532,0.772641, 0.154813,-0.698608,-0.698555,4.232341,1.903079,0.534362, 0.259533,0.686122,-0.679617,4.278045,1.97666,0.537351, -0.121207,0.426739,0.896216,4.245225,2.008532,0.772641, 0.259533,0.686122,-0.679617,4.278045,1.97666,0.537351, -0.121207,0.426739,0.896216,4.354941,2.064161,0.778851, -0.121207,0.426739,0.896216,4.245225,2.008532,0.772641, 0.391878,0.915416,0.091898,4.281287,2.055751,0.787, 0.600629,0.618513,-0.506642,4.159229,1.949902,0.923197, 0.969409,0.243854,0.027951,5.959462,1.157227,0.187097, 0.000755,0.939586,-0.342312,5.950684,1.082725,0.175648, 0.461485,0.788926,-0.405742,5.961686,1.110978,0.090324, 0.969409,0.243854,0.027951,5.959462,1.157227,0.187097, 0.461485,0.788926,-0.405742,5.961686,1.110978,0.090324, 0.04154,0.947538,-0.316933,5.998088,1.231874,0.107334, 0.104327,0.725166,-0.680625,5.755282,1.004149,0.307505, 0.288171,0.239223,-0.927216,5.763952,1.062109,0.338641, -0.163152,0.699849,-0.695408,5.681086,1.054964,0.35586, 0.104327,0.725166,-0.680625,5.755282,1.004149,0.307505, -0.163152,0.699849,-0.695408,5.681086,1.054964,0.35586, -0.011269,-0.268801,-0.96313,5.672385,1.007694,0.341778, -0.497134,0.140474,0.856227,5.710154,1.360653,0.290072, -0.434729,0.079706,0.897027,5.730427,1.435668,0.209848, -0.419631,0.061765,0.905591,5.685194,1.452202,0.188749, -0.497134,0.140474,0.856227,5.710154,1.360653,0.290072, -0.419631,0.061765,0.905591,5.685194,1.452202,0.188749, -0.400711,0.089186,0.911853,5.647186,1.394606,0.257833, -0.023775,-0.598435,0.800818,4.991713,1.163096,0.504149, -0.77316,0.344902,0.532228,5.011084,1.06677,0.458562, 0.157921,-0.851177,-0.500559,5.241466,1.040469,0.383965, -0.023775,-0.598435,0.800818,4.991713,1.163096,0.504149, 0.157921,-0.851177,-0.500559,5.241466,1.040469,0.383965, 0.009824,-0.644035,0.764933,5.250485,1.123029,0.385234, 0.123418,-0.784469,0.607763,4.641547,1.285422,0.622034, 0.050019,-0.552867,0.831767,4.522247,1.398278,0.644892, -0.395804,0.901672,0.174144,4.449011,1.260929,0.647431, 0.123418,-0.784469,0.607763,4.641547,1.285422,0.622034, -0.395804,0.901672,0.174144,4.449011,1.260929,0.647431, -0.911194,0.285551,0.296961,4.567896,1.149805,0.642484, 0.901575,-0.270544,0.337593,4.742358,1.882232,0.62165, 0.689769,-0.265624,0.673544,4.728963,2.036146,0.614307, 0.190357,-0.604308,0.773677,4.688114,2.046378,0.604518, 0.901575,-0.270544,0.337593,4.742358,1.882232,0.62165, 0.190357,-0.604308,0.773677,4.688114,2.046378,0.604518, 0.152967,-0.640193,0.752831,4.697024,1.862575,0.604048, 0.337014,-0.030018,0.941021,4.760921,1.881357,0.61312, 0.347794,0.132396,0.928176,4.824747,1.946835,0.626358, 0.36359,0.089346,0.927264,4.861611,2.001639,0.621913, 0.337014,-0.030018,0.941021,4.760921,1.881357,0.61312, 0.36359,0.089346,0.927264,4.861611,2.001639,0.621913, 0.195545,0.103956,0.975169,4.842883,2.021333,0.638025, 0.168187,0.300291,0.938903,4.852582,1.816115,0.603105, 0.272203,0.043076,0.961275,4.861618,1.854067,0.618095, 0.337014,-0.030018,0.941021,4.760921,1.881357,0.61312, 0.282492,0.026081,0.958915,4.973133,1.992779,0.533466, 0.210495,0.185422,0.959849,4.991746,2.009819,0.523206, 0.196849,0.14562,0.969559,4.93588,2.051665,0.572853, 0.282492,0.026081,0.958915,4.973133,1.992779,0.533466, 0.196849,0.14562,0.969559,4.93588,2.051665,0.572853, 0.361081,-0.056526,0.93082,4.935561,2.016016,0.5857, 0.337014,-0.030018,0.941021,4.760921,1.881357,0.61312, 0.067357,0.280764,0.95741,4.788476,2.028047,0.608619, -0.026366,0.234118,0.971851,4.751519,2.039658,0.634134, 0.289202,0.572304,0.767353,4.991709,1.844295,0.520761, 0.154687,0.171026,0.973048,5.01143,1.875569,0.463205, 0.380651,0.443224,0.811577,5.001903,1.914398,0.486724, 0.289202,0.572304,0.767353,4.991709,1.844295,0.520761, 0.380651,0.443224,0.811577,5.001903,1.914398,0.486724, 0.362705,0.428702,0.827442,4.982364,1.8733,0.53619, 0.380651,0.443224,0.811577,5.001903,1.914398,0.486724, 0.154687,0.171026,0.973048,5.01143,1.875569,0.463205, 0.210495,0.185422,0.959849,4.991746,2.009819,0.523206, 0.196849,0.14562,0.969559,4.93588,2.051665,0.572853, 0.054287,0.055115,0.997003,4.918466,2.084725,0.532713, 0.012421,0.392537,0.919652,4.881574,2.094571,0.539949, 0.399187,-0.679804,0.615237,4.74405,2.179337,0.556057, 0.428199,-0.104479,0.897624,4.837331,2.235678,0.479332, 0.244568,-0.044721,0.9686,4.739441,2.299169,0.369987, 0.399187,-0.679804,0.615237,4.74405,2.179337,0.556057, 0.244568,-0.044721,0.9686,4.739441,2.299169,0.369987, 0.223925,-0.919003,0.324486,4.636582,2.263383,0.471997, 0.550963,0.62763,0.550018,5.075994,1.900999,0.443793, 0.72603,0.248277,0.641279,5.095375,1.961238,0.401516, 0.670109,-0.356989,0.650778,5.067202,2.027704,0.422291, 0.550963,0.62763,0.550018,5.075994,1.900999,0.443793, 0.670109,-0.356989,0.650778,5.067202,2.027704,0.422291, 0.615065,0.769234,0.173133,5.057495,2.002751,0.451974, 0.771387,0.339113,0.538483,4.101726,2.312318,1.438163, -0.570564,0.630958,-0.525689,4.046673,2.341349,1.45253, 0.908355,-0.087284,0.408989,4.082988,2.175805,1.45093, 0.41344,0.676483,-0.609457,4.111934,2.234814,1.399949, 0.63166,0.704336,-0.323908,4.129926,2.30877,1.402259, 0.771387,0.339113,0.538483,4.101726,2.312318,1.438163, 0.41344,0.676483,-0.609457,4.111934,2.234814,1.399949, 0.771387,0.339113,0.538483,4.101726,2.312318,1.438163, 0.908355,-0.087284,0.408989,4.082988,2.175805,1.45093, -0.121207,0.426739,-0.896216,4.150297,1.820575,0.917046, -0.142868,0.456449,-0.878204,4.094112,1.889281,0.578435, -0.121207,0.426739,0.896216,4.245225,2.008532,0.772641, -0.121207,0.426739,-0.896216,4.150297,1.820575,0.917046, -0.121207,0.426739,0.896216,4.245225,2.008532,0.772641, 0.600629,0.618513,-0.506642,4.159229,1.949902,0.923197, -0.121207,0.426739,-0.896216,4.127903,1.828359,1.090512, -0.121207,0.426739,-0.896216,4.150297,1.820575,0.917046, 0.600629,0.618513,-0.506642,4.159229,1.949902,0.923197, -0.121207,0.426739,-0.896216,4.127903,1.828359,1.090512, 0.600629,0.618513,-0.506642,4.159229,1.949902,0.923197, 0.648166,0.682063,-0.338631,4.137657,1.944837,1.061024, 0.392037,0.915475,-0.09062,4.152166,1.868775,1.225002, -0.121207,0.426739,-0.896216,4.127903,1.828359,1.090512, 0.648166,0.682063,-0.338631,4.137657,1.944837,1.061024, 0.392037,0.915475,-0.09062,4.152166,1.868775,1.225002, 0.648166,0.682063,-0.338631,4.137657,1.944837,1.061024, 0.61118,0.658001,-0.439878,4.143794,2.01372,1.201386, 0.392037,0.915475,-0.09062,4.103303,2.038565,1.363737, 0.392037,0.915475,-0.09062,4.152166,1.868775,1.225002, 0.61118,0.658001,-0.439878,4.143794,2.01372,1.201386, 0.392037,0.915475,-0.09062,4.103303,2.038565,1.363737, 0.61118,0.658001,-0.439878,4.143794,2.01372,1.201386, 0.503641,0.551737,-0.66478,4.12329,2.086854,1.295135, 0.908355,-0.087284,0.408989,4.082988,2.175805,1.45093, 0.392037,0.915475,-0.09062,4.103303,2.038565,1.363737, 0.503641,0.551737,-0.66478,4.12329,2.086854,1.295135, 0.908355,-0.087284,0.408989,4.082988,2.175805,1.45093, 0.503641,0.551737,-0.66478,4.12329,2.086854,1.295135, 0.517427,0.766113,-0.381235,4.11268,2.195089,1.366908, 0.908355,-0.087284,0.408989,4.082988,2.175805,1.45093, 0.517427,0.766113,-0.381235,4.11268,2.195089,1.366908, 0.41344,0.676483,-0.609457,4.111934,2.234814,1.399949, -0.760994,0.140163,0.633437,4.076852,1.746601,0.527436, -0.641133,0.599375,0.479267,4.148883,1.759918,0.573765, -0.142868,0.456449,-0.878204,4.094112,1.889281,0.578435, -0.760994,0.140163,0.633437,4.076852,1.746601,0.527436, -0.142868,0.456449,-0.878204,4.094112,1.889281,0.578435, -0.142868,0.456449,-0.878204,4.059885,1.86046,0.470087, 0.000801,-1,-0.000539,4.380854,0.704574,-0.00013, -0.659696,0.567802,0.492343,4.359048,0.700414,0.166651, 0.804239,-0.153549,0.574128,4.120842,0.627141,0.185461, 0.000801,-1,-0.000539,4.380854,0.704574,-0.00013, 0.804239,-0.153549,0.574128,4.120842,0.627141,0.185461, -0.926486,-0.356041,-0.121897,4.126565,0.642027,0, -0.760994,0.140163,0.633437,4.076852,1.746601,0.527436, -0.142868,0.456449,-0.878204,4.059885,1.86046,0.470087, 0.539114,0.412574,0.734261,3.881998,1.764428,0.476337, -0.560402,0.735791,0.380211,4.067576,1.572668,0.534997, -0.760994,0.140163,0.633437,4.076852,1.746601,0.527436, 0.539114,0.412574,0.734261,3.881998,1.764428,0.476337, -0.560402,0.735791,0.380211,4.067576,1.572668,0.534997, 0.539114,0.412574,0.734261,3.881998,1.764428,0.476337, 0.696162,0.333274,0.635835,3.886058,1.550141,0.50483, -0.610894,0.790229,-0.048447,4.085564,1.288885,0.544406, -0.560402,0.735791,0.380211,4.067576,1.572668,0.534997, 0.696162,0.333274,0.635835,3.886058,1.550141,0.50483, -0.610894,0.790229,-0.048447,4.085564,1.288885,0.544406, 0.696162,0.333274,0.635835,3.886058,1.550141,0.50483, 0.763734,0.228435,0.603761,3.98851,1.297806,0.539537, -0.590367,0.807126,-0.003753,4.141189,1.008775,0.499342, -0.610894,0.790229,-0.048447,4.085564,1.288885,0.544406, 0.763734,0.228435,0.603761,3.98851,1.297806,0.539537, -0.590367,0.807126,-0.003753,4.141189,1.008775,0.499342, 0.763734,0.228435,0.603761,3.98851,1.297806,0.539537, 0.769758,0.095155,0.631204,4.041657,1.039756,0.496922, 0.206279,0.744917,0.634467,4.216374,0.852328,0.405873, -0.590367,0.807126,-0.003753,4.141189,1.008775,0.499342, 0.769758,0.095155,0.631204,4.041657,1.039756,0.496922, 0.206279,0.744917,0.634467,4.216374,0.852328,0.405873, 0.769758,0.095155,0.631204,4.041657,1.039756,0.496922, 0.771881,-0.100912,0.627707,4.068249,0.798926,0.400813, 0.11638,0.680311,0.723624,4.319799,0.731007,0.291212, 0.206279,0.744917,0.634467,4.216374,0.852328,0.405873, 0.771881,-0.100912,0.627707,4.068249,0.798926,0.400813, 0.11638,0.680311,0.723624,4.319799,0.731007,0.291212, 0.771881,-0.100912,0.627707,4.068249,0.798926,0.400813, 0.788801,-0.199379,0.581412,4.105198,0.672581,0.300001, -0.659696,0.567802,0.492343,4.359048,0.700414,0.166651, 0.11638,0.680311,0.723624,4.319799,0.731007,0.291212, 0.788801,-0.199379,0.581412,4.105198,0.672581,0.300001, -0.659696,0.567802,0.492343,4.359048,0.700414,0.166651, 0.788801,-0.199379,0.581412,4.105198,0.672581,0.300001, 0.804239,-0.153549,0.574128,4.120842,0.627141,0.185461, 0.241303,0.584582,0.77462,3.758215,2.206683,0.323051, -0.745507,-0.065161,-0.663305,3.870548,2.292106,0.368964, -0.613241,-0.041068,-0.788827,3.828001,2.35254,0.233341, 0.241303,0.584582,0.77462,3.758215,2.206683,0.323051, -0.613241,-0.041068,-0.788827,3.828001,2.35254,0.233341, 0.072694,0.752739,0.654294,3.745669,2.266001,0.24193, -0.613241,-0.041068,-0.788827,3.828001,2.35254,0.233341, 0.622247,0.782821,-0.000247,3.787342,2.396113,-0.001159, 0.431966,-0.771434,-0.46722,3.71636,2.343387,0, -0.613241,-0.041068,-0.788827,3.828001,2.35254,0.233341, 0.431966,-0.771434,-0.46722,3.71636,2.343387,0, -0.071584,0.92252,0.379253,3.727093,2.308406,0.150049, -0.613241,-0.041068,-0.788827,3.828001,2.35254,0.233341, -0.071584,0.92252,0.379253,3.727093,2.308406,0.150049, 0.072694,0.752739,0.654294,3.745669,2.266001,0.24193, 0.539114,0.412574,0.734261,3.881998,1.764428,0.476337, -0.142868,0.456449,-0.878204,4.059885,1.86046,0.470087, -0.570559,0.630963,0.525688,3.922437,1.972461,0.483563, 0.462789,0.48004,0.745243,3.814876,1.968416,0.443, 0.539114,0.412574,0.734261,3.881998,1.764428,0.476337, -0.570559,0.630963,0.525688,3.922437,1.972461,0.483563, 0.462789,0.48004,0.745243,3.814876,1.968416,0.443, -0.570559,0.630963,0.525688,3.922437,1.972461,0.483563, -0.453311,-0.031481,-0.890797,3.823349,2.141733,0.428356, 0.241303,0.584582,0.77462,3.758215,2.206683,0.323051, 0.462789,0.48004,0.745243,3.814876,1.968416,0.443, -0.453311,-0.031481,-0.890797,3.823349,2.141733,0.428356, 0.241303,0.584582,0.77462,3.758215,2.206683,0.323051, -0.453311,-0.031481,-0.890797,3.823349,2.141733,0.428356, -0.745507,-0.065161,-0.663305,3.870548,2.292106,0.368964, -0.142868,0.456449,-0.878204,4.094112,1.889281,0.578435, 0.154813,-0.698608,-0.698555,4.232341,1.903079,0.534362, -0.121207,0.426739,0.896216,4.245225,2.008532,0.772641, -0.020456,0.943466,0.330837,1.700797,-2.794792,0.82425, 0.21689,-0.976039,-0.017487,1.718315,-2.775468,0.921796, 0.383337,-0.601981,-0.700479,1.678986,-2.513137,0.891745, -0.020456,0.943466,0.330837,1.700797,-2.794792,0.82425, 0.383337,-0.601981,-0.700479,1.678986,-2.513137,0.891745, 0.717573,0.343682,-0.605782,1.655948,-2.520927,0.844269, -0.020456,0.943466,0.330837,1.700797,-2.794792,0.82425, -0.065687,-0.249194,-0.966223,1.705953,-3.006628,0.83263, -0.424393,0.057227,0.903668,1.734568,-2.965876,0.986396, -0.020456,0.943466,0.330837,1.700797,-2.794792,0.82425, -0.424393,0.057227,0.903668,1.734568,-2.965876,0.986396, 0.21689,-0.976039,-0.017487,1.718315,-2.775468,0.921796, -0.329905,-0.225598,0.916661,-0.972514,-1.822778,0.372649, -0.055857,0.145868,0.987726,-0.977375,-1.793126,0.498747, -0.182029,-0.190207,0.964721,-1.108758,-1.770749,0.473033, -0.329905,-0.225598,0.916661,-0.972514,-1.822778,0.372649, -0.182029,-0.190207,0.964721,-1.108758,-1.770749,0.473033, -0.571338,-0.120921,0.811758,-1.305099,-1.70846,0.48423, -0.571338,-0.120921,0.811758,-1.305099,-1.70846,0.48423, 0.714393,-0.109998,0.691045,-1.266738,-1.691944,0.557922, -0.587909,-0.233166,0.774594,-1.397474,-1.693815,0.570541, -0.571338,-0.120921,0.811758,-1.305099,-1.70846,0.48423, -0.587909,-0.233166,0.774594,-1.397474,-1.693815,0.570541, 0.023392,-0.110333,0.993619,-1.406693,-1.697325,0.450399, -0.468954,-0.586277,0.660577,-3.35851,1.810253,0.380095, 0.431712,0.22912,0.872427,-3.413372,1.871604,0.142309, 0.072535,0.997366,0,-3.392806,1.769365,0, 0.072535,0.997366,0,-3.392806,1.769365,0, 0.431712,0.22912,0.872427,-3.413372,1.871604,0.142309, 0.588787,-0.248294,0.769207,-3.380836,1.819691,0.123273, 0.072535,0.997366,0,-3.392806,1.769365,0, 0.588787,-0.248294,0.769207,-3.380836,1.819691,0.123273, 0.411442,-0.911436,-0.000099,-3.348274,1.767738,-0.000085, -0.142868,0.456449,0.878205,4.148927,2.388726,1.376879, 0.771387,0.339113,0.538483,4.101726,2.312318,1.438163, 0.63166,0.704336,-0.323908,4.129926,2.30877,1.402259, -0.142868,0.456449,0.878205,4.148927,2.388726,1.376879, 0.63166,0.704336,-0.323908,4.129926,2.30877,1.402259, 0.459043,0.888414,0.000701,4.149438,2.34055,1.353693, -0.037581,-0.042039,-0.998409,-2.964215,-1.978727,0.776572, -0.377491,-0.043727,0.92498,-3.066022,-1.953125,0.719516, 0.713401,0.39471,-0.579019,-3.008323,-1.759271,0.655672, -0.037581,-0.042039,-0.998409,-2.964215,-1.978727,0.776572, 0.713401,0.39471,-0.579019,-3.008323,-1.759271,0.655672, -0.732521,-0.474279,0.488336,-2.811581,-1.79821,0.712737, -0.377491,-0.043727,0.92498,-3.066022,-1.953125,0.719516, 0.684558,0.361153,-0.633205,-3.211005,-1.850398,0.700723, 0.843062,-0.10517,0.527433,-3.139394,-1.687482,0.638546, -0.377491,-0.043727,0.92498,-3.066022,-1.953125,0.719516, 0.843062,-0.10517,0.527433,-3.139394,-1.687482,0.638546, 0.713401,0.39471,-0.579019,-3.008323,-1.759271,0.655672, 0.588787,-0.248294,0.769207,-3.380836,1.819691,0.123273, 0.490646,-0.178294,0.852923,-3.357009,1.781675,0.071216, 0.411442,-0.911436,-0.000099,-3.348274,1.767738,-0.000085, 0.389161,-0.829175,-0.401277,-3.357009,1.781675,-0.071216, 0.255239,-0.528231,-0.80983,-3.380836,1.819691,-0.123273, 0.411442,-0.911436,-0.000099,-3.348274,1.767738,-0.000085 }; static const struct gllist frame={GL_N3F_V3F,GL_TRIANGLES,13050,data,NULL}; const struct gllist *cow_hide=&frame; xscreensaver-5.36/hacks/glx/cow_hoofs.c000644 000767 000024 00000166644 12701612217 020173 0ustar00jwzstaff000000 000000 #include "gllist.h" static const float data[]={ 0.013288,-0.297478,-0.954636,1.970051,-3.141862,-1.065178, -0.228294,-0.186048,-0.955651,2.110033,-3.148257,-1.068816, -0.562282,-0.328888,-0.75873,2.14888,-3.221616,-1.076203, 0.013288,-0.297478,-0.954636,1.970051,-3.141862,-1.065178, -0.562282,-0.328888,-0.75873,2.14888,-3.221616,-1.076203, 0.157806,0.230904,-0.960094,2.031262,-3.256709,-1.111122, 0.157806,0.230904,-0.960094,2.031262,-3.256709,-1.111122, -0.562282,-0.328888,-0.75873,2.14888,-3.221616,-1.076203, -0.144755,0.439659,-0.886423,2.247981,-3.342804,-1.127459, 0.157806,0.230904,-0.960094,2.031262,-3.256709,-1.111122, -0.144755,0.439659,-0.886423,2.247981,-3.342804,-1.127459, 0.339699,0.626415,-0.701576,2.138771,-3.397683,-1.214726, 0.339699,0.626415,-0.701576,2.138771,-3.397683,-1.214726, -0.144755,0.439659,-0.886423,2.247981,-3.342804,-1.127459, 0.457854,0.537523,-0.708123,2.343303,-3.507846,-1.195262, 0.339699,0.626415,-0.701576,2.138771,-3.397683,-1.214726, 0.457854,0.537523,-0.708123,2.343303,-3.507846,-1.195262, -0.081045,0.409121,-0.908874,2.254361,-3.550931,-1.235118, -0.081045,0.409121,-0.908874,2.254361,-3.550931,-1.235118, 0.444124,0.617475,-0.649214,2.025468,-3.556842,-1.204841, 0.010538,0.399391,-0.91672,1.981186,-3.441282,-1.180532, -0.081045,0.409121,-0.908874,2.254361,-3.550931,-1.235118, 0.010538,0.399391,-0.91672,1.981186,-3.441282,-1.180532, 0.339699,0.626415,-0.701576,2.138771,-3.397683,-1.214726, 0.339699,0.626415,-0.701576,2.138771,-3.397683,-1.214726, 0.010538,0.399391,-0.91672,1.981186,-3.441282,-1.180532, 0.636282,0.100893,-0.764831,1.926176,-3.28888,-1.093746, 0.339699,0.626415,-0.701576,2.138771,-3.397683,-1.214726, 0.636282,0.100893,-0.764831,1.926176,-3.28888,-1.093746, 0.157806,0.230904,-0.960094,2.031262,-3.256709,-1.111122, 0.157806,0.230904,-0.960094,2.031262,-3.256709,-1.111122, 0.636282,0.100893,-0.764831,1.926176,-3.28888,-1.093746, 0.213417,-0.547723,-0.808983,1.886443,-3.191742,-1.047318, 0.157806,0.230904,-0.960094,2.031262,-3.256709,-1.111122, 0.213417,-0.547723,-0.808983,1.886443,-3.191742,-1.047318, 0.013288,-0.297478,-0.954636,1.970051,-3.141862,-1.065178, -0.430523,-0.648445,-0.627828,2.281229,-3.33825,-1.043475, -0.144755,0.439659,-0.886423,2.247981,-3.342804,-1.127459, -0.562282,-0.328888,-0.75873,2.14888,-3.221616,-1.076203, -0.430523,-0.648445,-0.627828,2.281229,-3.33825,-1.043475, -0.562282,-0.328888,-0.75873,2.14888,-3.221616,-1.076203, -0.492627,0.113675,-0.862784,2.201939,-3.226457,-0.996503, -0.492627,0.113675,-0.862784,2.201939,-3.226457,-0.996503, -0.562282,-0.328888,-0.75873,2.14888,-3.221616,-1.076203, -0.228294,-0.186048,-0.955651,2.110033,-3.148257,-1.068816, -0.492627,0.113675,-0.862784,2.201939,-3.226457,-0.996503, -0.228294,-0.186048,-0.955651,2.110033,-3.148257,-1.068816, -0.495591,0.225654,-0.838731,2.170039,-3.134504,-0.978866, -0.495591,0.225654,-0.838731,2.170039,-3.134504,-0.978866, -0.541077,0.245809,-0.804247,2.091539,-3.032437,-0.947029, 0.672893,0.661099,-0.331908,2.113587,-3.011851,-0.851648, -0.495591,0.225654,-0.838731,2.170039,-3.134504,-0.978866, 0.672893,0.661099,-0.331908,2.113587,-3.011851,-0.851648, 0.768072,0.514957,-0.380637,2.217369,-3.156093,-0.888927, 0.626232,0.565165,-0.53705,1.841888,-3.246003,-1.014774, 0.213417,-0.547723,-0.808983,1.886443,-3.191742,-1.047318, 0.636282,0.100893,-0.764831,1.926176,-3.28888,-1.093746, 0.626232,0.565165,-0.53705,1.841888,-3.246003,-1.014774, 0.636282,0.100893,-0.764831,1.926176,-3.28888,-1.093746, 0.52783,0.437826,-0.727807,1.865135,-3.353827,-1.054981, 0.862528,0.499882,0.078511,1.919391,-3.487078,-1.110869, 0.52783,0.437826,-0.727807,1.865135,-3.353827,-1.054981, 0.636282,0.100893,-0.764831,1.926176,-3.28888,-1.093746, 0.862528,0.499882,0.078511,1.919391,-3.487078,-1.110869, 0.636282,0.100893,-0.764831,1.926176,-3.28888,-1.093746, 0.010538,0.399391,-0.91672,1.981186,-3.441282,-1.180532, 0.010538,0.399391,-0.91672,1.981186,-3.441282,-1.180532, 0.444124,0.617475,-0.649214,2.025468,-3.556842,-1.204841, 0.862528,0.499882,0.078511,1.919391,-3.487078,-1.110869, 0.872426,0.488735,0.003222,1.980621,-3.043895,-0.964237, -0.495591,0.225654,-0.838731,2.170039,-3.134504,-0.978866, -0.228294,-0.186048,-0.955651,2.110033,-3.148257,-1.068816, -0.783521,-0.393963,-0.480508,1.806407,-3.173343,-0.834455, 0.926951,0.366239,0.081429,1.811797,-3.135641,-0.933096, 0.626232,0.565165,-0.53705,1.841888,-3.246003,-1.014774, -0.783521,-0.393963,-0.480508,1.806407,-3.173343,-0.834455, 0.626232,0.565165,-0.53705,1.841888,-3.246003,-1.014774, 0.215809,0.484483,-0.847763,1.83279,-3.296508,-0.865078, -0.997638,0.009858,0.067986,1.933899,-3.546253,-0.912438, 0.862528,0.499882,0.078511,1.919391,-3.487078,-1.110869, 0.444124,0.617475,-0.649214,2.025468,-3.556842,-1.204841, -0.997638,0.009858,0.067986,1.933899,-3.546253,-0.912438, 0.444124,0.617475,-0.649214,2.025468,-3.556842,-1.204841, -0.987313,0.097592,0.125253,2.078928,-3.584991,-0.917088, 0.215809,0.484483,-0.847763,1.83279,-3.296508,-0.865078, 0.626232,0.565165,-0.53705,1.841888,-3.246003,-1.014774, 0.52783,0.437826,-0.727807,1.865135,-3.353827,-1.054981, 0.215809,0.484483,-0.847763,1.83279,-3.296508,-0.865078, 0.52783,0.437826,-0.727807,1.865135,-3.353827,-1.054981, -0.955753,-0.169718,0.240275,1.839523,-3.405292,-0.883488, -0.955753,-0.169718,0.240275,1.839523,-3.405292,-0.883488, 0.52783,0.437826,-0.727807,1.865135,-3.353827,-1.054981, 0.862528,0.499882,0.078511,1.919391,-3.487078,-1.110869, -0.955753,-0.169718,0.240275,1.839523,-3.405292,-0.883488, 0.862528,0.499882,0.078511,1.919391,-3.487078,-1.110869, -0.997638,0.009858,0.067986,1.933899,-3.546253,-0.912438, 0.215809,0.484483,-0.847763,1.83279,-3.296508,-0.865078, -0.150944,-0.987886,0.036011,1.92973,-3.298418,-0.689538, -0.630099,-0.773677,0.066329,1.900481,-3.131932,-0.728621, 0.215809,0.484483,-0.847763,1.83279,-3.296508,-0.865078, -0.630099,-0.773677,0.066329,1.900481,-3.131932,-0.728621, -0.783521,-0.393963,-0.480508,1.806407,-3.173343,-0.834455, 0.215809,0.484483,-0.847763,1.83279,-3.296508,-0.865078, -0.955753,-0.169718,0.240275,1.839523,-3.405292,-0.883488, -0.937976,-0.320543,0.132115,1.941325,-3.434803,-0.701314, 0.215809,0.484483,-0.847763,1.83279,-3.296508,-0.865078, -0.937976,-0.320543,0.132115,1.941325,-3.434803,-0.701314, -0.150944,-0.987886,0.036011,1.92973,-3.298418,-0.689538, -0.937976,-0.320543,0.132115,1.941325,-3.434803,-0.701314, -0.955753,-0.169718,0.240275,1.839523,-3.405292,-0.883488, -0.997638,0.009858,0.067986,1.933899,-3.546253,-0.912438, -0.937976,-0.320543,0.132115,1.941325,-3.434803,-0.701314, -0.997638,0.009858,0.067986,1.933899,-3.546253,-0.912438, -0.4909,0.016111,0.871067,2.002745,-3.52342,-0.688103, -0.4909,0.016111,0.871067,2.002745,-3.52342,-0.688103, -0.997638,0.009858,0.067986,1.933899,-3.546253,-0.912438, -0.987313,0.097592,0.125253,2.078928,-3.584991,-0.917088, -0.4909,0.016111,0.871067,2.002745,-3.52342,-0.688103, -0.987313,0.097592,0.125253,2.078928,-3.584991,-0.917088, -0.184432,-0.109597,0.976716,2.126553,-3.549679,-0.701005, -0.184432,-0.109597,0.976716,2.126553,-3.549679,-0.701005, -0.987313,0.097592,0.125253,2.078928,-3.584991,-0.917088, -0.554502,-0.046423,0.830886,2.197935,-3.583948,-0.936437, -0.184432,-0.109597,0.976716,2.126553,-3.549679,-0.701005, -0.554502,-0.046423,0.830886,2.197935,-3.583948,-0.936437, -0.554151,-0.205896,0.806551,2.244147,-3.545557,-0.732888, -0.069765,-0.126006,0.989573,1.898573,-3.068274,-0.994338, 0.872426,0.488735,0.003222,1.980621,-3.043895,-0.964237, -0.228294,-0.186048,-0.955651,2.110033,-3.148257,-1.068816, -0.069765,-0.126006,0.989573,1.898573,-3.068274,-0.994338, -0.228294,-0.186048,-0.955651,2.110033,-3.148257,-1.068816, 0.013288,-0.297478,-0.954636,1.970051,-3.141862,-1.065178, 0.383337,-0.601981,0.700479,1.855134,-3.083228,-0.986129, -0.069765,-0.126006,0.989573,1.898573,-3.068274,-0.994338, 0.013288,-0.297478,-0.954636,1.970051,-3.141862,-1.065178, 0.383337,-0.601981,0.700479,1.855134,-3.083228,-0.986129, 0.013288,-0.297478,-0.954636,1.970051,-3.141862,-1.065178, 0.213417,-0.547723,-0.808983,1.886443,-3.191742,-1.047318, 0.926951,0.366239,0.081429,1.811797,-3.135641,-0.933096, 0.383337,-0.601981,0.700479,1.855134,-3.083228,-0.986129, 0.213417,-0.547723,-0.808983,1.886443,-3.191742,-1.047318, 0.926951,0.366239,0.081429,1.811797,-3.135641,-0.933096, 0.213417,-0.547723,-0.808983,1.886443,-3.191742,-1.047318, 0.626232,0.565165,-0.53705,1.841888,-3.246003,-1.014774, 0.768072,0.514957,-0.380637,2.217369,-3.156093,-0.888927, 0.672893,0.661099,-0.331908,2.113587,-3.011851,-0.851648, -0.701253,0.091018,0.707079,2.07369,-3.020848,-0.782654, 0.768072,0.514957,-0.380637,2.217369,-3.156093,-0.888927, -0.701253,0.091018,0.707079,2.07369,-3.020848,-0.782654, -0.706628,-0.050081,0.705811,2.187495,-3.161535,-0.800285, -0.495591,0.225654,-0.838731,2.170039,-3.134504,-0.978866, 0.768072,0.514957,-0.380637,2.217369,-3.156093,-0.888927, -0.404532,-0.045989,-0.913367,2.236407,-3.220054,-0.89203, -0.495591,0.225654,-0.838731,2.170039,-3.134504,-0.978866, -0.404532,-0.045989,-0.913367,2.236407,-3.220054,-0.89203, -0.492627,0.113675,-0.862784,2.201939,-3.226457,-0.996503, -0.144755,0.439659,-0.886423,2.247981,-3.342804,-1.127459, -0.430523,-0.648445,-0.627828,2.281229,-3.33825,-1.043475, 0.717573,0.343682,0.605781,2.386827,-3.462222,-1.13648, -0.144755,0.439659,-0.886423,2.247981,-3.342804,-1.127459, 0.717573,0.343682,0.605781,2.386827,-3.462222,-1.13648, 0.457854,0.537523,-0.708123,2.343303,-3.507846,-1.195262, 0.717573,0.343682,0.605781,2.386827,-3.462222,-1.13648, -0.430523,-0.648445,-0.627828,2.281229,-3.33825,-1.043475, 0.743895,0.373896,0.553916,2.327021,-3.352317,-0.958234, 0.717573,0.343682,0.605781,2.386827,-3.462222,-1.13648, 0.743895,0.373896,0.553916,2.327021,-3.352317,-0.958234, 0.752232,0.244352,0.611914,2.440236,-3.509564,-1.019417, 0.743895,0.373896,0.553916,2.327021,-3.352317,-0.958234, -0.430523,-0.648445,-0.627828,2.281229,-3.33825,-1.043475, -0.492627,0.113675,-0.862784,2.201939,-3.226457,-0.996503, 0.743895,0.373896,0.553916,2.327021,-3.352317,-0.958234, -0.492627,0.113675,-0.862784,2.201939,-3.226457,-0.996503, -0.404532,-0.045989,-0.913367,2.236407,-3.220054,-0.89203, 0.752232,0.244352,0.611914,2.440236,-3.509564,-1.019417, 0.743895,0.373896,0.553916,2.327021,-3.352317,-0.958234, 0.866542,0.493887,-0.071973,2.309358,-3.345468,-0.801508, 0.752232,0.244352,0.611914,2.440236,-3.509564,-1.019417, 0.866542,0.493887,-0.071973,2.309358,-3.345468,-0.801508, 0.874983,0.217676,-0.43246,2.377814,-3.484109,-0.800332, 0.866542,0.493887,-0.071973,2.309358,-3.345468,-0.801508, 0.743895,0.373896,0.553916,2.327021,-3.352317,-0.958234, -0.404532,-0.045989,-0.913367,2.236407,-3.220054,-0.89203, 0.866542,0.493887,-0.071973,2.309358,-3.345468,-0.801508, -0.404532,-0.045989,-0.913367,2.236407,-3.220054,-0.89203, 0.79991,0.598082,-0.049409,2.235942,-3.243103,-0.823955, 0.79991,0.598082,-0.049409,2.235942,-3.243103,-0.823955, -0.404532,-0.045989,-0.913367,2.236407,-3.220054,-0.89203, 0.768072,0.514957,-0.380637,2.217369,-3.156093,-0.888927, 0.79991,0.598082,-0.049409,2.235942,-3.243103,-0.823955, 0.768072,0.514957,-0.380637,2.217369,-3.156093,-0.888927, -0.706628,-0.050081,0.705811,2.187495,-3.161535,-0.800285, -0.630099,-0.773677,0.066329,1.900481,-3.131932,-0.728621, -0.150944,-0.987886,0.036011,1.92973,-3.298418,-0.689538, 0.331575,0.146631,0.931964,2.059222,-3.230076,-0.674936, -0.630099,-0.773677,0.066329,1.900481,-3.131932,-0.728621, 0.331575,0.146631,0.931964,2.059222,-3.230076,-0.674936, 0.714275,0.465374,0.522723,1.998099,-3.039955,-0.718855, 0.714275,0.465374,0.522723,1.998099,-3.039955,-0.718855, 0.331575,0.146631,0.931964,2.059222,-3.230076,-0.674936, -0.706628,-0.050081,0.705811,2.187495,-3.161535,-0.800285, 0.714275,0.465374,0.522723,1.998099,-3.039955,-0.718855, -0.706628,-0.050081,0.705811,2.187495,-3.161535,-0.800285, -0.701253,0.091018,0.707079,2.07369,-3.020848,-0.782654, -0.150944,-0.987886,0.036011,1.92973,-3.298418,-0.689538, -0.937976,-0.320543,0.132115,1.941325,-3.434803,-0.701314, 0.43336,0.0979,0.895888,2.107985,-3.363571,-0.677007, -0.150944,-0.987886,0.036011,1.92973,-3.298418,-0.689538, 0.43336,0.0979,0.895888,2.107985,-3.363571,-0.677007, 0.331575,0.146631,0.931964,2.059222,-3.230076,-0.674936, 0.331575,0.146631,0.931964,2.059222,-3.230076,-0.674936, 0.43336,0.0979,0.895888,2.107985,-3.363571,-0.677007, 0.79991,0.598082,-0.049409,2.235942,-3.243103,-0.823955, 0.331575,0.146631,0.931964,2.059222,-3.230076,-0.674936, 0.79991,0.598082,-0.049409,2.235942,-3.243103,-0.823955, -0.706628,-0.050081,0.705811,2.187495,-3.161535,-0.800285, 0.43336,0.0979,0.895888,2.107985,-3.363571,-0.677007, -0.937976,-0.320543,0.132115,1.941325,-3.434803,-0.701314, -0.4909,0.016111,0.871067,2.002745,-3.52342,-0.688103, -0.184432,-0.109597,0.976716,2.126553,-3.549679,-0.701005, 0.43336,0.0979,0.895888,2.107985,-3.363571,-0.677007, -0.4909,0.016111,0.871067,2.002745,-3.52342,-0.688103, 0.79991,0.598082,-0.049409,2.235942,-3.243103,-0.823955, 0.43336,0.0979,0.895888,2.107985,-3.363571,-0.677007, 0.866542,0.493887,-0.071973,2.309358,-3.345468,-0.801508, -0.184432,-0.109597,0.976716,2.126553,-3.549679,-0.701005, -0.554151,-0.205896,0.806551,2.244147,-3.545557,-0.732888, 0.43336,0.0979,0.895888,2.107985,-3.363571,-0.677007, 0.874983,0.217676,-0.43246,2.377814,-3.484109,-0.800332, 0.866542,0.493887,-0.071973,2.309358,-3.345468,-0.801508, 0.43336,0.0979,0.895888,2.107985,-3.363571,-0.677007, 0.874983,0.217676,-0.43246,2.377814,-3.484109,-0.800332, 0.43336,0.0979,0.895888,2.107985,-3.363571,-0.677007, -0.554151,-0.205896,0.806551,2.244147,-3.545557,-0.732888, 0.752232,0.244352,0.611914,2.440236,-3.509564,-1.019417, 0.874983,0.217676,-0.43246,2.377814,-3.484109,-0.800332, -0.554151,-0.205896,0.806551,2.244147,-3.545557,-0.732888, 0.752232,0.244352,0.611914,2.440236,-3.509564,-1.019417, -0.554151,-0.205896,0.806551,2.244147,-3.545557,-0.732888, -0.554502,-0.046423,0.830886,2.197935,-3.583948,-0.936437, -0.987313,0.097592,0.125253,2.078928,-3.584991,-0.917088, 0.444124,0.617475,-0.649214,2.025468,-3.556842,-1.204841, -0.081045,0.409121,-0.908874,2.254361,-3.550931,-1.235118, -0.987313,0.097592,0.125253,2.078928,-3.584991,-0.917088, -0.081045,0.409121,-0.908874,2.254361,-3.550931,-1.235118, -0.554502,-0.046423,0.830886,2.197935,-3.583948,-0.936437, 0.872426,0.488735,0.003222,1.980621,-3.043895,-0.964237, -0.541077,0.245809,-0.804247,2.091539,-3.032437,-0.947029, -0.495591,0.225654,-0.838731,2.170039,-3.134504,-0.978866, -0.554502,-0.046423,0.830886,2.197935,-3.583948,-0.936437, -0.081045,0.409121,-0.908874,2.254361,-3.550931,-1.235118, 0.457854,0.537523,-0.708123,2.343303,-3.507846,-1.195262, -0.554502,-0.046423,0.830886,2.197935,-3.583948,-0.936437, 0.457854,0.537523,-0.708123,2.343303,-3.507846,-1.195262, 0.717573,0.343682,0.605781,2.386827,-3.462222,-1.13648, -0.554502,-0.046423,0.830886,2.197935,-3.583948,-0.936437, 0.717573,0.343682,0.605781,2.386827,-3.462222,-1.13648, 0.752232,0.244352,0.611914,2.440236,-3.509564,-1.019417, -0.545598,-0.330415,-0.770161,-3.042899,-3.193907,-1.207296, 0.012244,-0.298111,-0.954453,-2.888628,-3.200302,-1.210934, -0.245482,-0.183395,-0.951896,-2.845816,-3.273661,-1.218321, -0.545598,-0.330415,-0.770161,-3.042899,-3.193907,-1.207296, -0.245482,-0.183395,-0.951896,-2.845816,-3.273661,-1.218321, -0.492859,-0.096405,-0.864752,-2.975439,-3.308754,-1.25324, -0.492859,-0.096405,-0.864752,-2.975439,-3.308754,-1.25324, -0.245482,-0.183395,-0.951896,-2.845816,-3.273661,-1.218321, 0.430301,0.548598,-0.716855,-2.736599,-3.394849,-1.269577, -0.492859,-0.096405,-0.864752,-2.975439,-3.308754,-1.25324, 0.430301,0.548598,-0.716855,-2.736599,-3.394849,-1.269577, -0.074103,0.409269,-0.909399,-2.856957,-3.449728,-1.356844, -0.074103,0.409269,-0.909399,-2.856957,-3.449728,-1.356844, 0.430301,0.548598,-0.716855,-2.736599,-3.394849,-1.269577, -0.13251,0.440061,-0.888137,-2.631547,-3.559891,-1.33738, -0.074103,0.409269,-0.909399,-2.856957,-3.449728,-1.356844, -0.13251,0.440061,-0.888137,-2.631547,-3.559891,-1.33738, 0.317837,0.631876,-0.706903,-2.729567,-3.602976,-1.377236, 0.317837,0.631876,-0.706903,-2.729567,-3.602976,-1.377236, 0.413011,0.629609,-0.658038,-2.981824,-3.608887,-1.346959, 0.009712,0.399549,-0.91666,-3.030627,-3.493327,-1.32265, 0.317837,0.631876,-0.706903,-2.729567,-3.602976,-1.377236, 0.009712,0.399549,-0.91666,-3.030627,-3.493327,-1.32265, -0.074103,0.409269,-0.909399,-2.856957,-3.449728,-1.356844, -0.074103,0.409269,-0.909399,-2.856957,-3.449728,-1.356844, 0.009712,0.399549,-0.91666,-3.030627,-3.493327,-1.32265, 0.070969,0.266956,-0.961092,-3.091252,-3.340925,-1.235864, -0.074103,0.409269,-0.909399,-2.856957,-3.449728,-1.356844, 0.070969,0.266956,-0.961092,-3.091252,-3.340925,-1.235864, -0.492859,-0.096405,-0.864752,-2.975439,-3.308754,-1.25324, -0.492859,-0.096405,-0.864752,-2.975439,-3.308754,-1.25324, 0.070969,0.266956,-0.961092,-3.091252,-3.340925,-1.235864, 0.405633,0.57823,-0.707893,-3.135041,-3.243787,-1.189436, -0.492859,-0.096405,-0.864752,-2.975439,-3.308754,-1.25324, 0.405633,0.57823,-0.707893,-3.135041,-3.243787,-1.189436, -0.545598,-0.330415,-0.770161,-3.042899,-3.193907,-1.207296, -0.431117,-0.034268,-0.901645,-2.699957,-3.390295,-1.185593, 0.430301,0.548598,-0.716855,-2.736599,-3.394849,-1.269577, -0.245482,-0.183395,-0.951896,-2.845816,-3.273661,-1.218321, -0.431117,-0.034268,-0.901645,-2.699957,-3.390295,-1.185593, -0.245482,-0.183395,-0.951896,-2.845816,-3.273661,-1.218321, -0.461794,0.113692,-0.879671,-2.787341,-3.278502,-1.138621, -0.461794,0.113692,-0.879671,-2.787341,-3.278502,-1.138621, -0.245482,-0.183395,-0.951896,-2.845816,-3.273661,-1.218321, 0.012244,-0.298111,-0.954453,-2.888628,-3.200302,-1.210934, -0.461794,0.113692,-0.879671,-2.787341,-3.278502,-1.138621, 0.012244,-0.298111,-0.954453,-2.888628,-3.200302,-1.210934, -0.46316,0.228643,-0.856274,-2.822497,-3.186549,-1.120984, -0.46316,0.228643,-0.856274,-2.822497,-3.186549,-1.120984, 0.637284,0.689194,-0.344791,-2.90901,-3.084482,-1.089147, 0.737412,0.542596,-0.402261,-2.884711,-3.063896,-0.993766, -0.46316,0.228643,-0.856274,-2.822497,-3.186549,-1.120984, 0.737412,0.542596,-0.402261,-2.884711,-3.063896,-0.993766, -0.508358,0.250892,-0.823787,-2.770335,-3.208138,-1.031045, 0.851754,0.52393,0.003494,-3.184143,-3.298048,-1.156892, 0.405633,0.57823,-0.707893,-3.135041,-3.243787,-1.189436, 0.070969,0.266956,-0.961092,-3.091252,-3.340925,-1.235864, 0.851754,0.52393,0.003494,-3.184143,-3.298048,-1.156892, 0.070969,0.266956,-0.961092,-3.091252,-3.340925,-1.235864, 0.596352,0.583149,-0.551635,-3.158524,-3.405872,-1.197099, 0.840313,0.535537,0.084106,-3.09873,-3.539123,-1.252987, 0.596352,0.583149,-0.551635,-3.158524,-3.405872,-1.197099, 0.070969,0.266956,-0.961092,-3.091252,-3.340925,-1.235864, 0.840313,0.535537,0.084106,-3.09873,-3.539123,-1.252987, 0.070969,0.266956,-0.961092,-3.091252,-3.340925,-1.235864, 0.009712,0.399549,-0.91666,-3.030627,-3.493327,-1.32265, 0.009712,0.399549,-0.91666,-3.030627,-3.493327,-1.32265, 0.413011,0.629609,-0.658038,-2.981824,-3.608887,-1.346959, 0.840313,0.535537,0.084106,-3.09873,-3.539123,-1.252987, 0.503689,0.453945,-0.735004,-3.03125,-3.09594,-1.106355, -0.46316,0.228643,-0.856274,-2.822497,-3.186549,-1.120984, 0.012244,-0.298111,-0.954453,-2.888628,-3.200302,-1.210934, 0.163153,0.19945,-0.96623,-3.223246,-3.225388,-0.976573, 0.977763,0.208696,-0.020643,-3.217306,-3.187686,-1.075214, 0.851754,0.52393,0.003494,-3.184143,-3.298048,-1.156892, 0.163153,0.19945,-0.96623,-3.223246,-3.225388,-0.976573, 0.851754,0.52393,0.003494,-3.184143,-3.298048,-1.156892, 0.144389,0.231536,-0.962051,-3.19417,-3.348553,-1.007196, -0.99734,0.010761,0.072093,-3.082741,-3.598298,-1.054556, 0.840313,0.535537,0.084106,-3.09873,-3.539123,-1.252987, 0.413011,0.629609,-0.658038,-2.981824,-3.608887,-1.346959, -0.99734,0.010761,0.072093,-3.082741,-3.598298,-1.054556, 0.413011,0.629609,-0.658038,-2.981824,-3.608887,-1.346959, -0.985013,0.106756,0.135469,-2.922908,-3.637036,-1.059206, 0.144389,0.231536,-0.962051,-3.19417,-3.348553,-1.007196, 0.851754,0.52393,0.003494,-3.184143,-3.298048,-1.156892, 0.596352,0.583149,-0.551635,-3.158524,-3.405872,-1.197099, 0.144389,0.231536,-0.962051,-3.19417,-3.348553,-1.007196, 0.596352,0.583149,-0.551635,-3.158524,-3.405872,-1.197099, -0.948594,-0.185732,0.256269,-3.18675,-3.457336,-1.025606, -0.948594,-0.185732,0.256269,-3.18675,-3.457336,-1.025606, 0.596352,0.583149,-0.551635,-3.158524,-3.405872,-1.197099, 0.840313,0.535537,0.084106,-3.09873,-3.539123,-1.252987, -0.948594,-0.185732,0.256269,-3.18675,-3.457336,-1.025606, 0.840313,0.535537,0.084106,-3.09873,-3.539123,-1.252987, -0.99734,0.010761,0.072093,-3.082741,-3.598298,-1.054556, 0.144389,0.231536,-0.962051,-3.19417,-3.348553,-1.007196, -0.471141,0.022027,0.881783,-3.087335,-3.350463,-0.831656, -0.948594,-0.185732,0.256269,-3.11957,-3.183977,-0.870739, 0.144389,0.231536,-0.962051,-3.19417,-3.348553,-1.007196, -0.948594,-0.185732,0.256269,-3.11957,-3.183977,-0.870739, 0.163153,0.19945,-0.96623,-3.223246,-3.225388,-0.976573, 0.144389,0.231536,-0.962051,-3.19417,-3.348553,-1.007196, -0.948594,-0.185732,0.256269,-3.18675,-3.457336,-1.025606, -0.385346,-0.01874,0.922582,-3.074557,-3.486847,-0.843432, 0.144389,0.231536,-0.962051,-3.19417,-3.348553,-1.007196, -0.385346,-0.01874,0.922582,-3.074557,-3.486847,-0.843432, -0.471141,0.022027,0.881783,-3.087335,-3.350463,-0.831656, -0.385346,-0.01874,0.922582,-3.074557,-3.486847,-0.843432, -0.948594,-0.185732,0.256269,-3.18675,-3.457336,-1.025606, -0.99734,0.010761,0.072093,-3.082741,-3.598298,-1.054556, -0.385346,-0.01874,0.922582,-3.074557,-3.486847,-0.843432, -0.99734,0.010761,0.072093,-3.082741,-3.598298,-1.054556, -0.11646,-0.017993,0.993032,-3.006867,-3.575464,-0.830221, -0.11646,-0.017993,0.993032,-3.006867,-3.575464,-0.830221, -0.99734,0.010761,0.072093,-3.082741,-3.598298,-1.054556, -0.985013,0.106756,0.135469,-2.922908,-3.637036,-1.059206, -0.11646,-0.017993,0.993032,-3.006867,-3.575464,-0.830221, -0.985013,0.106756,0.135469,-2.922908,-3.637036,-1.059206, -0.037581,-0.042039,0.998409,-2.870422,-3.601724,-0.843123, -0.037581,-0.042039,0.998409,-2.870422,-3.601724,-0.843123, -0.985013,0.106756,0.135469,-2.922908,-3.637036,-1.059206, 0.339875,0.026681,0.940092,-2.791754,-3.635993,-1.078555, -0.037581,-0.042039,0.998409,-2.870422,-3.601724,-0.843123, 0.339875,0.026681,0.940092,-2.791754,-3.635993,-1.078555, 0.156207,-0.109405,0.981647,-2.740824,-3.597601,-0.875006, -0.039603,0.339955,-0.939607,-3.121673,-3.120319,-1.136456, 0.503689,0.453945,-0.735004,-3.03125,-3.09594,-1.106355, 0.012244,-0.298111,-0.954453,-2.888628,-3.200302,-1.210934, -0.039603,0.339955,-0.939607,-3.121673,-3.120319,-1.136456, 0.012244,-0.298111,-0.954453,-2.888628,-3.200302,-1.210934, -0.545598,-0.330415,-0.770161,-3.042899,-3.193907,-1.207296, -0.377491,-0.043727,-0.92498,-3.169546,-3.135273,-1.128247, -0.039603,0.339955,-0.939607,-3.121673,-3.120319,-1.136456, -0.545598,-0.330415,-0.770161,-3.042899,-3.193907,-1.207296, -0.377491,-0.043727,-0.92498,-3.169546,-3.135273,-1.128247, -0.545598,-0.330415,-0.770161,-3.042899,-3.193907,-1.207296, 0.405633,0.57823,-0.707893,-3.135041,-3.243787,-1.189436, 0.977763,0.208696,-0.020643,-3.217306,-3.187686,-1.075214, -0.377491,-0.043727,-0.92498,-3.169546,-3.135273,-1.128247, 0.405633,0.57823,-0.707893,-3.135041,-3.243787,-1.189436, 0.977763,0.208696,-0.020643,-3.217306,-3.187686,-1.075214, 0.405633,0.57823,-0.707893,-3.135041,-3.243787,-1.189436, 0.851754,0.52393,0.003494,-3.184143,-3.298048,-1.156892, -0.508358,0.250892,-0.823787,-2.770335,-3.208138,-1.031045, 0.737412,0.542596,-0.402261,-2.884711,-3.063896,-0.993766, 0.684558,0.361154,0.633205,-2.928681,-3.072892,-0.924772, -0.508358,0.250892,-0.823787,-2.770335,-3.208138,-1.031045, 0.684558,0.361154,0.633205,-2.928681,-3.072892,-0.924772, 0.713402,0.39471,0.579018,-2.80326,-3.21358,-0.942403, -0.46316,0.228643,-0.856274,-2.822497,-3.186549,-1.120984, -0.508358,0.250892,-0.823787,-2.770335,-3.208138,-1.031045, 0.845209,0.529004,-0.075999,-2.749355,-3.272099,-1.034148, -0.46316,0.228643,-0.856274,-2.822497,-3.186549,-1.120984, 0.845209,0.529004,-0.075999,-2.749355,-3.272099,-1.034148, -0.461794,0.113692,-0.879671,-2.787341,-3.278502,-1.138621, 0.430301,0.548598,-0.716855,-2.736599,-3.394849,-1.269577, -0.431117,-0.034268,-0.901645,-2.699957,-3.390295,-1.185593, 0.61389,0.702597,-0.359856,-2.58358,-3.514267,-1.278598, 0.430301,0.548598,-0.716855,-2.736599,-3.394849,-1.269577, 0.61389,0.702597,-0.359856,-2.58358,-3.514267,-1.278598, -0.13251,0.440061,-0.888137,-2.631547,-3.559891,-1.33738, 0.61389,0.702597,-0.359856,-2.58358,-3.514267,-1.278598, -0.431117,-0.034268,-0.901645,-2.699957,-3.390295,-1.185593, 0.77125,0.634502,-0.050796,-2.649491,-3.404362,-1.100352, 0.61389,0.702597,-0.359856,-2.58358,-3.514267,-1.278598, 0.77125,0.634502,-0.050796,-2.649491,-3.404362,-1.100352, 0.780958,0.624512,-0.009449,-2.52472,-3.561609,-1.161535, 0.77125,0.634502,-0.050796,-2.649491,-3.404362,-1.100352, -0.431117,-0.034268,-0.901645,-2.699957,-3.390295,-1.185593, -0.461794,0.113692,-0.879671,-2.787341,-3.278502,-1.138621, 0.77125,0.634502,-0.050796,-2.649491,-3.404362,-1.100352, -0.461794,0.113692,-0.879671,-2.787341,-3.278502,-1.138621, 0.845209,0.529004,-0.075999,-2.749355,-3.272099,-1.034148, 0.780958,0.624512,-0.009449,-2.52472,-3.561609,-1.161535, 0.77125,0.634502,-0.050796,-2.649491,-3.404362,-1.100352, 0.684834,0.490952,0.538488,-2.668957,-3.397513,-0.943626, 0.780958,0.624512,-0.009449,-2.52472,-3.561609,-1.161535, 0.684834,0.490952,0.538488,-2.668957,-3.397513,-0.943626, 0.712283,0.385667,0.586441,-2.593513,-3.536154,-0.94245, 0.684834,0.490952,0.538488,-2.668957,-3.397513,-0.943626, 0.77125,0.634502,-0.050796,-2.649491,-3.404362,-1.100352, 0.845209,0.529004,-0.075999,-2.749355,-3.272099,-1.034148, 0.684834,0.490952,0.538488,-2.668957,-3.397513,-0.943626, 0.845209,0.529004,-0.075999,-2.749355,-3.272099,-1.034148, 0.722848,0.455753,0.519404,-2.749867,-3.295148,-0.966073, 0.722848,0.455753,0.519404,-2.749867,-3.295148,-0.966073, 0.845209,0.529004,-0.075999,-2.749355,-3.272099,-1.034148, -0.508358,0.250892,-0.823787,-2.770335,-3.208138,-1.031045, 0.722848,0.455753,0.519404,-2.749867,-3.295148,-0.966073, -0.508358,0.250892,-0.823787,-2.770335,-3.208138,-1.031045, 0.713402,0.39471,0.579018,-2.80326,-3.21358,-0.942403, -0.948594,-0.185732,0.256269,-3.11957,-3.183977,-0.870739, -0.471141,0.022027,0.881783,-3.087335,-3.350463,-0.831656, 0.225987,0.181605,0.957053,-2.944625,-3.282121,-0.817054, -0.948594,-0.185732,0.256269,-3.11957,-3.183977,-0.870739, 0.225987,0.181605,0.957053,-2.944625,-3.282121,-0.817054, 0.308087,0.149605,0.939521,-3.011987,-3.092,-0.860973, 0.308087,0.149605,0.939521,-3.011987,-3.092,-0.860973, 0.225987,0.181605,0.957053,-2.944625,-3.282121,-0.817054, 0.713402,0.39471,0.579018,-2.80326,-3.21358,-0.942403, 0.308087,0.149605,0.939521,-3.011987,-3.092,-0.860973, 0.713402,0.39471,0.579018,-2.80326,-3.21358,-0.942403, 0.684558,0.361154,0.633205,-2.928681,-3.072892,-0.924772, -0.471141,0.022027,0.881783,-3.087335,-3.350463,-0.831656, -0.385346,-0.01874,0.922582,-3.074557,-3.486847,-0.843432, 0.229413,0.089674,0.96919,-2.890885,-3.415616,-0.819125, -0.471141,0.022027,0.881783,-3.087335,-3.350463,-0.831656, 0.229413,0.089674,0.96919,-2.890885,-3.415616,-0.819125, 0.225987,0.181605,0.957053,-2.944625,-3.282121,-0.817054, 0.225987,0.181605,0.957053,-2.944625,-3.282121,-0.817054, 0.229413,0.089674,0.96919,-2.890885,-3.415616,-0.819125, 0.722848,0.455753,0.519404,-2.749867,-3.295148,-0.966073, 0.225987,0.181605,0.957053,-2.944625,-3.282121,-0.817054, 0.722848,0.455753,0.519404,-2.749867,-3.295148,-0.966073, 0.713402,0.39471,0.579018,-2.80326,-3.21358,-0.942403, 0.229413,0.089674,0.96919,-2.890885,-3.415616,-0.819125, -0.385346,-0.01874,0.922582,-3.074557,-3.486847,-0.843432, -0.11646,-0.017993,0.993032,-3.006867,-3.575464,-0.830221, -0.037581,-0.042039,0.998409,-2.870422,-3.601724,-0.843123, 0.229413,0.089674,0.96919,-2.890885,-3.415616,-0.819125, -0.11646,-0.017993,0.993032,-3.006867,-3.575464,-0.830221, 0.722848,0.455753,0.519404,-2.749867,-3.295148,-0.966073, 0.229413,0.089674,0.96919,-2.890885,-3.415616,-0.819125, 0.684834,0.490952,0.538488,-2.668957,-3.397513,-0.943626, -0.037581,-0.042039,0.998409,-2.870422,-3.601724,-0.843123, 0.156207,-0.109405,0.981647,-2.740824,-3.597601,-0.875006, 0.229413,0.089674,0.96919,-2.890885,-3.415616,-0.819125, 0.712283,0.385667,0.586441,-2.593513,-3.536154,-0.94245, 0.684834,0.490952,0.538488,-2.668957,-3.397513,-0.943626, 0.229413,0.089674,0.96919,-2.890885,-3.415616,-0.819125, 0.712283,0.385667,0.586441,-2.593513,-3.536154,-0.94245, 0.229413,0.089674,0.96919,-2.890885,-3.415616,-0.819125, 0.156207,-0.109405,0.981647,-2.740824,-3.597601,-0.875006, 0.780958,0.624512,-0.009449,-2.52472,-3.561609,-1.161535, 0.712283,0.385667,0.586441,-2.593513,-3.536154,-0.94245, 0.156207,-0.109405,0.981647,-2.740824,-3.597601,-0.875006, 0.780958,0.624512,-0.009449,-2.52472,-3.561609,-1.161535, 0.156207,-0.109405,0.981647,-2.740824,-3.597601,-0.875006, 0.339875,0.026681,0.940092,-2.791754,-3.635993,-1.078555, -0.985013,0.106756,0.135469,-2.922908,-3.637036,-1.059206, 0.413011,0.629609,-0.658038,-2.981824,-3.608887,-1.346959, 0.317837,0.631876,-0.706903,-2.729567,-3.602976,-1.377236, -0.985013,0.106756,0.135469,-2.922908,-3.637036,-1.059206, 0.317837,0.631876,-0.706903,-2.729567,-3.602976,-1.377236, 0.339875,0.026681,0.940092,-2.791754,-3.635993,-1.078555, 0.503689,0.453945,-0.735004,-3.03125,-3.09594,-1.106355, 0.637284,0.689194,-0.344791,-2.90901,-3.084482,-1.089147, -0.46316,0.228643,-0.856274,-2.822497,-3.186549,-1.120984, 0.339875,0.026681,0.940092,-2.791754,-3.635993,-1.078555, 0.317837,0.631876,-0.706903,-2.729567,-3.602976,-1.377236, -0.13251,0.440061,-0.888137,-2.631547,-3.559891,-1.33738, 0.339875,0.026681,0.940092,-2.791754,-3.635993,-1.078555, -0.13251,0.440061,-0.888137,-2.631547,-3.559891,-1.33738, 0.61389,0.702597,-0.359856,-2.58358,-3.514267,-1.278598, 0.339875,0.026681,0.940092,-2.791754,-3.635993,-1.078555, 0.61389,0.702597,-0.359856,-2.58358,-3.514267,-1.278598, 0.780958,0.624512,-0.009449,-2.52472,-3.561609,-1.161535, -0.35872,0.092902,0.928811,2.031262,-3.256709,1.111122, -0.354049,-0.10839,0.928924,2.14888,-3.221616,1.076203, 0.422569,-0.18743,0.886739,2.110033,-3.148257,1.068816, -0.35872,0.092902,0.928811,2.031262,-3.256709,1.111122, 0.422569,-0.18743,0.886739,2.110033,-3.148257,1.068816, -0.019303,-0.142974,0.989538,1.970051,-3.141862,1.065178, -0.501053,-0.05946,0.863371,2.138771,-3.397683,1.214726, -0.453746,-0.057149,0.889297,2.247981,-3.342804,1.127459, -0.354049,-0.10839,0.928924,2.14888,-3.221616,1.076203, -0.501053,-0.05946,0.863371,2.138771,-3.397683,1.214726, -0.354049,-0.10839,0.928924,2.14888,-3.221616,1.076203, -0.35872,0.092902,0.928811,2.031262,-3.256709,1.111122, -0.765488,-0.115047,0.633082,2.254361,-3.550931,1.235118, -0.779685,0.02537,0.625657,2.343303,-3.507846,1.195262, -0.453746,-0.057149,0.889297,2.247981,-3.342804,1.127459, -0.765488,-0.115047,0.633082,2.254361,-3.550931,1.235118, -0.453746,-0.057149,0.889297,2.247981,-3.342804,1.127459, -0.501053,-0.05946,0.863371,2.138771,-3.397683,1.214726, -0.501053,-0.05946,0.863371,2.138771,-3.397683,1.214726, 0.982106,-0.010346,0.188044,1.981186,-3.441282,1.180532, -0.807765,-0.096776,0.581507,2.025468,-3.556842,1.204841, -0.501053,-0.05946,0.863371,2.138771,-3.397683,1.214726, -0.807765,-0.096776,0.581507,2.025468,-3.556842,1.204841, -0.765488,-0.115047,0.633082,2.254361,-3.550931,1.235118, -0.35872,0.092902,0.928811,2.031262,-3.256709,1.111122, 0.937141,-0.149709,0.315204,1.926176,-3.28888,1.093746, 0.982106,-0.010346,0.188044,1.981186,-3.441282,1.180532, -0.35872,0.092902,0.928811,2.031262,-3.256709,1.111122, 0.982106,-0.010346,0.188044,1.981186,-3.441282,1.180532, -0.501053,-0.05946,0.863371,2.138771,-3.397683,1.214726, -0.019303,-0.142974,0.989538,1.970051,-3.141862,1.065178, 0.866898,-0.268351,0.420091,1.886443,-3.191742,1.047318, 0.937141,-0.149709,0.315204,1.926176,-3.28888,1.093746, -0.019303,-0.142974,0.989538,1.970051,-3.141862,1.065178, 0.937141,-0.149709,0.315204,1.926176,-3.28888,1.093746, -0.35872,0.092902,0.928811,2.031262,-3.256709,1.111122, 0.567579,-0.469834,-0.6761,2.201939,-3.226457,0.996503, -0.354049,-0.10839,0.928924,2.14888,-3.221616,1.076203, -0.453746,-0.057149,0.889297,2.247981,-3.342804,1.127459, 0.567579,-0.469834,-0.6761,2.201939,-3.226457,0.996503, -0.453746,-0.057149,0.889297,2.247981,-3.342804,1.127459, 0.886562,-0.46255,0.007486,2.281229,-3.33825,1.043475, 0.890357,-0.340018,-0.302742,2.170039,-3.134504,0.978866, 0.422569,-0.18743,0.886739,2.110033,-3.148257,1.068816, -0.354049,-0.10839,0.928924,2.14888,-3.221616,1.076203, 0.890357,-0.340018,-0.302742,2.170039,-3.134504,0.978866, -0.354049,-0.10839,0.928924,2.14888,-3.221616,1.076203, 0.567579,-0.469834,-0.6761,2.201939,-3.226457,0.996503, 0.579344,-0.339433,-0.741044,2.217369,-3.156093,0.888927, 0.789099,-0.039289,-0.613008,2.113587,-3.011851,0.851648, 0.773659,-0.235087,-0.588375,2.091539,-3.032437,0.947029, 0.579344,-0.339433,-0.741044,2.217369,-3.156093,0.888927, 0.773659,-0.235087,-0.588375,2.091539,-3.032437,0.947029, 0.890357,-0.340018,-0.302742,2.170039,-3.134504,0.978866, 0.257818,-0.230014,-0.938415,1.865135,-3.353827,1.054981, 0.937141,-0.149709,0.315204,1.926176,-3.28888,1.093746, 0.866898,-0.268351,0.420091,1.886443,-3.191742,1.047318, 0.257818,-0.230014,-0.938415,1.865135,-3.353827,1.054981, 0.866898,-0.268351,0.420091,1.886443,-3.191742,1.047318, 0.230893,-0.309688,-0.922378,1.841888,-3.246003,1.014774, 0.982106,-0.010346,0.188044,1.981186,-3.441282,1.180532, 0.937141,-0.149709,0.315204,1.926176,-3.28888,1.093746, 0.257818,-0.230014,-0.938415,1.865135,-3.353827,1.054981, 0.982106,-0.010346,0.188044,1.981186,-3.441282,1.180532, 0.257818,-0.230014,-0.938415,1.865135,-3.353827,1.054981, 0.148388,-0.325205,-0.933929,1.919391,-3.487078,1.110869, 0.148388,-0.325205,-0.933929,1.919391,-3.487078,1.110869, -0.807765,-0.096776,0.581507,2.025468,-3.556842,1.204841, 0.982106,-0.010346,0.188044,1.981186,-3.441282,1.180532, 0.422569,-0.18743,0.886739,2.110033,-3.148257,1.068816, 0.890357,-0.340018,-0.302742,2.170039,-3.134504,0.978866, -0.215783,-0.895808,-0.388544,1.980621,-3.043895,0.964237, -0.085416,-0.081635,-0.992995,1.83279,-3.296508,0.865078, 0.230893,-0.309688,-0.922378,1.841888,-3.246003,1.014774, -0.156447,-0.088128,0.983747,1.811797,-3.135641,0.933096, -0.085416,-0.081635,-0.992995,1.83279,-3.296508,0.865078, -0.156447,-0.088128,0.983747,1.811797,-3.135641,0.933096, -0.042094,-0.220101,-0.974568,1.806407,-3.173343,0.834455, -0.348227,-0.192527,-0.917427,2.078928,-3.584991,0.917088, -0.807765,-0.096776,0.581507,2.025468,-3.556842,1.204841, 0.148388,-0.325205,-0.933929,1.919391,-3.487078,1.110869, -0.348227,-0.192527,-0.917427,2.078928,-3.584991,0.917088, 0.148388,-0.325205,-0.933929,1.919391,-3.487078,1.110869, 0.255431,-0.055528,-0.965231,1.933899,-3.546253,0.912438, -0.401279,-0.250965,-0.880904,1.839523,-3.405292,0.883488, 0.257818,-0.230014,-0.938415,1.865135,-3.353827,1.054981, 0.230893,-0.309688,-0.922378,1.841888,-3.246003,1.014774, -0.401279,-0.250965,-0.880904,1.839523,-3.405292,0.883488, 0.230893,-0.309688,-0.922378,1.841888,-3.246003,1.014774, -0.085416,-0.081635,-0.992995,1.83279,-3.296508,0.865078, 0.255431,-0.055528,-0.965231,1.933899,-3.546253,0.912438, 0.148388,-0.325205,-0.933929,1.919391,-3.487078,1.110869, 0.257818,-0.230014,-0.938415,1.865135,-3.353827,1.054981, 0.255431,-0.055528,-0.965231,1.933899,-3.546253,0.912438, 0.257818,-0.230014,-0.938415,1.865135,-3.353827,1.054981, -0.401279,-0.250965,-0.880904,1.839523,-3.405292,0.883488, -0.042094,-0.220101,-0.974568,1.806407,-3.173343,0.834455, -0.363523,-0.150625,-0.919327,1.900481,-3.131932,0.728621, -0.924461,-0.213385,-0.315973,1.92973,-3.298418,0.689538, -0.042094,-0.220101,-0.974568,1.806407,-3.173343,0.834455, -0.924461,-0.213385,-0.315973,1.92973,-3.298418,0.689538, -0.085416,-0.081635,-0.992995,1.83279,-3.296508,0.865078, -0.924461,-0.213385,-0.315973,1.92973,-3.298418,0.689538, -0.914496,-0.253607,-0.315247,1.941325,-3.434803,0.701314, -0.401279,-0.250965,-0.880904,1.839523,-3.405292,0.883488, -0.924461,-0.213385,-0.315973,1.92973,-3.298418,0.689538, -0.401279,-0.250965,-0.880904,1.839523,-3.405292,0.883488, -0.085416,-0.081635,-0.992995,1.83279,-3.296508,0.865078, -0.943599,-0.160394,-0.289646,2.002745,-3.52342,0.688103, 0.255431,-0.055528,-0.965231,1.933899,-3.546253,0.912438, -0.401279,-0.250965,-0.880904,1.839523,-3.405292,0.883488, -0.943599,-0.160394,-0.289646,2.002745,-3.52342,0.688103, -0.401279,-0.250965,-0.880904,1.839523,-3.405292,0.883488, -0.914496,-0.253607,-0.315247,1.941325,-3.434803,0.701314, 0.601229,-0.111151,-0.791308,2.126553,-3.549679,0.701005, -0.348227,-0.192527,-0.917427,2.078928,-3.584991,0.917088, 0.255431,-0.055528,-0.965231,1.933899,-3.546253,0.912438, 0.601229,-0.111151,-0.791308,2.126553,-3.549679,0.701005, 0.255431,-0.055528,-0.965231,1.933899,-3.546253,0.912438, -0.943599,-0.160394,-0.289646,2.002745,-3.52342,0.688103, 0.53288,-0.088285,-0.841572,2.244147,-3.545557,0.732888, 0.546571,-0.125171,-0.828005,2.197935,-3.583948,0.936437, -0.348227,-0.192527,-0.917427,2.078928,-3.584991,0.917088, 0.53288,-0.088285,-0.841572,2.244147,-3.545557,0.732888, -0.348227,-0.192527,-0.917427,2.078928,-3.584991,0.917088, 0.601229,-0.111151,-0.791308,2.126553,-3.549679,0.701005, -0.019303,-0.142974,0.989538,1.970051,-3.141862,1.065178, 0.422569,-0.18743,0.886739,2.110033,-3.148257,1.068816, -0.215783,-0.895808,-0.388544,1.980621,-3.043895,0.964237, -0.019303,-0.142974,0.989538,1.970051,-3.141862,1.065178, -0.215783,-0.895808,-0.388544,1.980621,-3.043895,0.964237, 0.356923,-0.210291,0.910156,1.898573,-3.068274,0.994338, 0.866898,-0.268351,0.420091,1.886443,-3.191742,1.047318, -0.019303,-0.142974,0.989538,1.970051,-3.141862,1.065178, 0.356923,-0.210291,0.910156,1.898573,-3.068274,0.994338, 0.866898,-0.268351,0.420091,1.886443,-3.191742,1.047318, 0.356923,-0.210291,0.910156,1.898573,-3.068274,0.994338, 0.517272,-0.552302,0.653753,1.855134,-3.083228,0.986129, 0.230893,-0.309688,-0.922378,1.841888,-3.246003,1.014774, 0.866898,-0.268351,0.420091,1.886443,-3.191742,1.047318, 0.517272,-0.552302,0.653753,1.855134,-3.083228,0.986129, 0.230893,-0.309688,-0.922378,1.841888,-3.246003,1.014774, 0.517272,-0.552302,0.653753,1.855134,-3.083228,0.986129, -0.156447,-0.088128,0.983747,1.811797,-3.135641,0.933096, -0.156072,0.243426,0.95728,2.187495,-3.161535,0.800285, -0.080858,0.024731,0.996419,2.07369,-3.020848,0.782654, 0.789099,-0.039289,-0.613008,2.113587,-3.011851,0.851648, -0.156072,0.243426,0.95728,2.187495,-3.161535,0.800285, 0.789099,-0.039289,-0.613008,2.113587,-3.011851,0.851648, 0.579344,-0.339433,-0.741044,2.217369,-3.156093,0.888927, 0.567579,-0.469834,-0.6761,2.201939,-3.226457,0.996503, -0.661663,-0.025481,0.749369,2.236407,-3.220054,0.89203, 0.579344,-0.339433,-0.741044,2.217369,-3.156093,0.888927, 0.567579,-0.469834,-0.6761,2.201939,-3.226457,0.996503, 0.579344,-0.339433,-0.741044,2.217369,-3.156093,0.888927, 0.890357,-0.340018,-0.302742,2.170039,-3.134504,0.978866, -0.779685,0.02537,0.625657,2.343303,-3.507846,1.195262, 0.507452,0.36284,0.781562,2.386827,-3.462222,1.13648, 0.886562,-0.46255,0.007486,2.281229,-3.33825,1.043475, -0.779685,0.02537,0.625657,2.343303,-3.507846,1.195262, 0.886562,-0.46255,0.007486,2.281229,-3.33825,1.043475, -0.453746,-0.057149,0.889297,2.247981,-3.342804,1.127459, 0.121953,0.140869,0.982488,2.440236,-3.509564,1.019417, 0.484364,0.195735,0.85269,2.327021,-3.352317,0.958234, 0.886562,-0.46255,0.007486,2.281229,-3.33825,1.043475, 0.121953,0.140869,0.982488,2.440236,-3.509564,1.019417, 0.886562,-0.46255,0.007486,2.281229,-3.33825,1.043475, 0.507452,0.36284,0.781562,2.386827,-3.462222,1.13648, -0.661663,-0.025481,0.749369,2.236407,-3.220054,0.89203, 0.567579,-0.469834,-0.6761,2.201939,-3.226457,0.996503, 0.886562,-0.46255,0.007486,2.281229,-3.33825,1.043475, -0.661663,-0.025481,0.749369,2.236407,-3.220054,0.89203, 0.886562,-0.46255,0.007486,2.281229,-3.33825,1.043475, 0.484364,0.195735,0.85269,2.327021,-3.352317,0.958234, 0.913315,0.39776,-0.087428,2.377814,-3.484109,0.800332, 0.170703,0.25395,0.952035,2.309358,-3.345468,0.801508, 0.484364,0.195735,0.85269,2.327021,-3.352317,0.958234, 0.913315,0.39776,-0.087428,2.377814,-3.484109,0.800332, 0.484364,0.195735,0.85269,2.327021,-3.352317,0.958234, 0.121953,0.140869,0.982488,2.440236,-3.509564,1.019417, 0.977763,0.208696,0.020643,2.235942,-3.243103,0.823955, -0.661663,-0.025481,0.749369,2.236407,-3.220054,0.89203, 0.484364,0.195735,0.85269,2.327021,-3.352317,0.958234, 0.977763,0.208696,0.020643,2.235942,-3.243103,0.823955, 0.484364,0.195735,0.85269,2.327021,-3.352317,0.958234, 0.170703,0.25395,0.952035,2.309358,-3.345468,0.801508, -0.156072,0.243426,0.95728,2.187495,-3.161535,0.800285, 0.579344,-0.339433,-0.741044,2.217369,-3.156093,0.888927, -0.661663,-0.025481,0.749369,2.236407,-3.220054,0.89203, -0.156072,0.243426,0.95728,2.187495,-3.161535,0.800285, -0.661663,-0.025481,0.749369,2.236407,-3.220054,0.89203, 0.977763,0.208696,0.020643,2.235942,-3.243103,0.823955, -0.245482,-0.183394,0.951896,1.998099,-3.039955,0.718855, 0.430301,0.548598,0.716855,2.059222,-3.230076,0.674936, -0.924461,-0.213385,-0.315973,1.92973,-3.298418,0.689538, -0.245482,-0.183394,0.951896,1.998099,-3.039955,0.718855, -0.924461,-0.213385,-0.315973,1.92973,-3.298418,0.689538, -0.363523,-0.150625,-0.919327,1.900481,-3.131932,0.728621, -0.080858,0.024731,0.996419,2.07369,-3.020848,0.782654, -0.156072,0.243426,0.95728,2.187495,-3.161535,0.800285, 0.430301,0.548598,0.716855,2.059222,-3.230076,0.674936, -0.080858,0.024731,0.996419,2.07369,-3.020848,0.782654, 0.430301,0.548598,0.716855,2.059222,-3.230076,0.674936, -0.245482,-0.183394,0.951896,1.998099,-3.039955,0.718855, 0.430301,0.548598,0.716855,2.059222,-3.230076,0.674936, 0.317836,0.631876,0.706903,2.107985,-3.363571,0.677007, -0.914496,-0.253607,-0.315247,1.941325,-3.434803,0.701314, 0.430301,0.548598,0.716855,2.059222,-3.230076,0.674936, -0.914496,-0.253607,-0.315247,1.941325,-3.434803,0.701314, -0.924461,-0.213385,-0.315973,1.92973,-3.298418,0.689538, -0.156072,0.243426,0.95728,2.187495,-3.161535,0.800285, 0.977763,0.208696,0.020643,2.235942,-3.243103,0.823955, 0.317836,0.631876,0.706903,2.107985,-3.363571,0.677007, -0.156072,0.243426,0.95728,2.187495,-3.161535,0.800285, 0.317836,0.631876,0.706903,2.107985,-3.363571,0.677007, 0.430301,0.548598,0.716855,2.059222,-3.230076,0.674936, -0.943599,-0.160394,-0.289646,2.002745,-3.52342,0.688103, -0.914496,-0.253607,-0.315247,1.941325,-3.434803,0.701314, 0.317836,0.631876,0.706903,2.107985,-3.363571,0.677007, -0.943599,-0.160394,-0.289646,2.002745,-3.52342,0.688103, 0.317836,0.631876,0.706903,2.107985,-3.363571,0.677007, 0.601229,-0.111151,-0.791308,2.126553,-3.549679,0.701005, 0.170703,0.25395,0.952035,2.309358,-3.345468,0.801508, 0.317836,0.631876,0.706903,2.107985,-3.363571,0.677007, 0.977763,0.208696,0.020643,2.235942,-3.243103,0.823955, 0.317836,0.631876,0.706903,2.107985,-3.363571,0.677007, 0.53288,-0.088285,-0.841572,2.244147,-3.545557,0.732888, 0.601229,-0.111151,-0.791308,2.126553,-3.549679,0.701005, 0.53288,-0.088285,-0.841572,2.244147,-3.545557,0.732888, 0.317836,0.631876,0.706903,2.107985,-3.363571,0.677007, 0.170703,0.25395,0.952035,2.309358,-3.345468,0.801508, 0.53288,-0.088285,-0.841572,2.244147,-3.545557,0.732888, 0.170703,0.25395,0.952035,2.309358,-3.345468,0.801508, 0.913315,0.39776,-0.087428,2.377814,-3.484109,0.800332, 0.546571,-0.125171,-0.828005,2.197935,-3.583948,0.936437, 0.53288,-0.088285,-0.841572,2.244147,-3.545557,0.732888, 0.913315,0.39776,-0.087428,2.377814,-3.484109,0.800332, 0.546571,-0.125171,-0.828005,2.197935,-3.583948,0.936437, 0.913315,0.39776,-0.087428,2.377814,-3.484109,0.800332, 0.121953,0.140869,0.982488,2.440236,-3.509564,1.019417, 0.546571,-0.125171,-0.828005,2.197935,-3.583948,0.936437, -0.765488,-0.115047,0.633082,2.254361,-3.550931,1.235118, -0.807765,-0.096776,0.581507,2.025468,-3.556842,1.204841, 0.546571,-0.125171,-0.828005,2.197935,-3.583948,0.936437, -0.807765,-0.096776,0.581507,2.025468,-3.556842,1.204841, -0.348227,-0.192527,-0.917427,2.078928,-3.584991,0.917088, 0.890357,-0.340018,-0.302742,2.170039,-3.134504,0.978866, 0.773659,-0.235087,-0.588375,2.091539,-3.032437,0.947029, -0.215783,-0.895808,-0.388544,1.980621,-3.043895,0.964237, 0.121953,0.140869,0.982488,2.440236,-3.509564,1.019417, 0.507452,0.36284,0.781562,2.386827,-3.462222,1.13648, -0.779685,0.02537,0.625657,2.343303,-3.507846,1.195262, 0.121953,0.140869,0.982488,2.440236,-3.509564,1.019417, -0.779685,0.02537,0.625657,2.343303,-3.507846,1.195262, -0.765488,-0.115047,0.633082,2.254361,-3.550931,1.235118, 0.121953,0.140869,0.982488,2.440236,-3.509564,1.019417, -0.765488,-0.115047,0.633082,2.254361,-3.550931,1.235118, 0.546571,-0.125171,-0.828005,2.197935,-3.583948,0.936437, 0.205604,0.070037,0.976126,-2.975439,-3.308754,1.25324, 0.193496,0.00102,0.981101,-2.845816,-3.273661,1.218321, 0.254799,-0.149124,0.955426,-2.888628,-3.200302,1.210934, 0.205604,0.070037,0.976126,-2.975439,-3.308754,1.25324, 0.254799,-0.149124,0.955426,-2.888628,-3.200302,1.210934, 0.405755,-0.293021,0.865737,-3.042899,-3.193907,1.207296, 0.580504,-0.526296,0.621312,-2.856957,-3.449728,1.356844, 0.011655,0.055061,0.998415,-2.736599,-3.394849,1.269577, 0.193496,0.00102,0.981101,-2.845816,-3.273661,1.218321, 0.580504,-0.526296,0.621312,-2.856957,-3.449728,1.356844, 0.193496,0.00102,0.981101,-2.845816,-3.273661,1.218321, 0.205604,0.070037,0.976126,-2.975439,-3.308754,1.25324, -0.093334,0.204552,0.974396,-2.729567,-3.602976,1.377236, -0.026425,0.178249,0.983631,-2.631547,-3.559891,1.33738, 0.011655,0.055061,0.998415,-2.736599,-3.394849,1.269577, -0.093334,0.204552,0.974396,-2.729567,-3.602976,1.377236, 0.011655,0.055061,0.998415,-2.736599,-3.394849,1.269577, 0.580504,-0.526296,0.621312,-2.856957,-3.449728,1.356844, 0.580504,-0.526296,0.621312,-2.856957,-3.449728,1.356844, -0.028076,0.054588,0.998114,-3.030627,-3.493327,1.32265, -0.057735,0.03099,0.997851,-2.981824,-3.608887,1.346959, 0.580504,-0.526296,0.621312,-2.856957,-3.449728,1.356844, -0.057735,0.03099,0.997851,-2.981824,-3.608887,1.346959, -0.093334,0.204552,0.974396,-2.729567,-3.602976,1.377236, 0.205604,0.070037,0.976126,-2.975439,-3.308754,1.25324, 0.089482,-0.029551,0.99555,-3.091252,-3.340925,1.235864, -0.028076,0.054588,0.998114,-3.030627,-3.493327,1.32265, 0.205604,0.070037,0.976126,-2.975439,-3.308754,1.25324, -0.028076,0.054588,0.998114,-3.030627,-3.493327,1.32265, 0.580504,-0.526296,0.621312,-2.856957,-3.449728,1.356844, 0.405755,-0.293021,0.865737,-3.042899,-3.193907,1.207296, 0.487947,-0.44627,0.750167,-3.135041,-3.243787,1.189436, 0.089482,-0.029551,0.99555,-3.091252,-3.340925,1.235864, 0.405755,-0.293021,0.865737,-3.042899,-3.193907,1.207296, 0.089482,-0.029551,0.99555,-3.091252,-3.340925,1.235864, 0.205604,0.070037,0.976126,-2.975439,-3.308754,1.25324, 0.177373,0.037311,0.983436,-2.787341,-3.278502,1.138621, 0.193496,0.00102,0.981101,-2.845816,-3.273661,1.218321, 0.011655,0.055061,0.998415,-2.736599,-3.394849,1.269577, 0.177373,0.037311,0.983436,-2.787341,-3.278502,1.138621, 0.011655,0.055061,0.998415,-2.736599,-3.394849,1.269577, -0.048366,0.138166,0.989227,-2.699957,-3.390295,1.185593, -0.308543,0.191148,0.931807,-2.822497,-3.186549,1.120984, 0.254799,-0.149124,0.955426,-2.888628,-3.200302,1.210934, 0.193496,0.00102,0.981101,-2.845816,-3.273661,1.218321, -0.308543,0.191148,0.931807,-2.822497,-3.186549,1.120984, 0.193496,0.00102,0.981101,-2.845816,-3.273661,1.218321, 0.177373,0.037311,0.983436,-2.787341,-3.278502,1.138621, -0.206994,0.072903,0.975622,-2.770335,-3.208138,1.031045, -0.161613,0.16539,0.972896,-2.884711,-3.063896,0.993766, 0.07463,0.029476,0.996776,-2.90901,-3.084482,1.089147, -0.206994,0.072903,0.975622,-2.770335,-3.208138,1.031045, 0.07463,0.029476,0.996776,-2.90901,-3.084482,1.089147, -0.308543,0.191148,0.931807,-2.822497,-3.186549,1.120984, -0.730585,0.298655,0.614045,-3.158524,-3.405872,1.197099, 0.089482,-0.029551,0.99555,-3.091252,-3.340925,1.235864, 0.487947,-0.44627,0.750167,-3.135041,-3.243787,1.189436, -0.730585,0.298655,0.614045,-3.158524,-3.405872,1.197099, 0.487947,-0.44627,0.750167,-3.135041,-3.243787,1.189436, -0.059163,0.13391,0.989226,-3.184143,-3.298048,1.156892, -0.028076,0.054588,0.998114,-3.030627,-3.493327,1.32265, 0.089482,-0.029551,0.99555,-3.091252,-3.340925,1.235864, -0.730585,0.298655,0.614045,-3.158524,-3.405872,1.197099, -0.028076,0.054588,0.998114,-3.030627,-3.493327,1.32265, -0.730585,0.298655,0.614045,-3.158524,-3.405872,1.197099, -0.498861,0.185917,0.846506,-3.09873,-3.539123,1.252987, -0.498861,0.185917,0.846506,-3.09873,-3.539123,1.252987, -0.057735,0.03099,0.997851,-2.981824,-3.608887,1.346959, -0.028076,0.054588,0.998114,-3.030627,-3.493327,1.32265, 0.254799,-0.149124,0.955426,-2.888628,-3.200302,1.210934, -0.308543,0.191148,0.931807,-2.822497,-3.186549,1.120984, -0.541406,0.227835,0.809302,-3.03125,-3.09594,1.106355, -0.626758,0.377346,0.681751,-3.19417,-3.348553,1.007196, -0.059163,0.13391,0.989226,-3.184143,-3.298048,1.156892, 0.085126,0.114843,0.98973,-3.217306,-3.187686,1.075214, -0.626758,0.377346,0.681751,-3.19417,-3.348553,1.007196, 0.085126,0.114843,0.98973,-3.217306,-3.187686,1.075214, -0.588311,0.26373,0.764419,-3.223246,-3.225388,0.976573, -0.670566,0.283017,-0.685743,-2.922908,-3.637036,1.059206, -0.057735,0.03099,0.997851,-2.981824,-3.608887,1.346959, -0.498861,0.185917,0.846506,-3.09873,-3.539123,1.252987, -0.670566,0.283017,-0.685743,-2.922908,-3.637036,1.059206, -0.498861,0.185917,0.846506,-3.09873,-3.539123,1.252987, -0.738865,0.325814,-0.589851,-3.082741,-3.598298,1.054556, -0.701121,0.259575,-0.664117,-3.18675,-3.457336,1.025606, -0.730585,0.298655,0.614045,-3.158524,-3.405872,1.197099, -0.059163,0.13391,0.989226,-3.184143,-3.298048,1.156892, -0.701121,0.259575,-0.664117,-3.18675,-3.457336,1.025606, -0.059163,0.13391,0.989226,-3.184143,-3.298048,1.156892, -0.626758,0.377346,0.681751,-3.19417,-3.348553,1.007196, -0.738865,0.325814,-0.589851,-3.082741,-3.598298,1.054556, -0.498861,0.185917,0.846506,-3.09873,-3.539123,1.252987, -0.730585,0.298655,0.614045,-3.158524,-3.405872,1.197099, -0.738865,0.325814,-0.589851,-3.082741,-3.598298,1.054556, -0.730585,0.298655,0.614045,-3.158524,-3.405872,1.197099, -0.701121,0.259575,-0.664117,-3.18675,-3.457336,1.025606, -0.588311,0.26373,0.764419,-3.223246,-3.225388,0.976573, -0.64352,0.086605,-0.760514,-3.11957,-3.183977,0.870739, -0.382827,0.20765,-0.900181,-3.087335,-3.350463,0.831656, -0.588311,0.26373,0.764419,-3.223246,-3.225388,0.976573, -0.382827,0.20765,-0.900181,-3.087335,-3.350463,0.831656, -0.626758,0.377346,0.681751,-3.19417,-3.348553,1.007196, -0.382827,0.20765,-0.900181,-3.087335,-3.350463,0.831656, -0.421241,0.09636,-0.901815,-3.074557,-3.486847,0.843432, -0.701121,0.259575,-0.664117,-3.18675,-3.457336,1.025606, -0.382827,0.20765,-0.900181,-3.087335,-3.350463,0.831656, -0.701121,0.259575,-0.664117,-3.18675,-3.457336,1.025606, -0.626758,0.377346,0.681751,-3.19417,-3.348553,1.007196, -0.482826,-0.146891,-0.863309,-3.006867,-3.575464,0.830221, -0.738865,0.325814,-0.589851,-3.082741,-3.598298,1.054556, -0.701121,0.259575,-0.664117,-3.18675,-3.457336,1.025606, -0.482826,-0.146891,-0.863309,-3.006867,-3.575464,0.830221, -0.701121,0.259575,-0.664117,-3.18675,-3.457336,1.025606, -0.421241,0.09636,-0.901815,-3.074557,-3.486847,0.843432, -0.562406,-0.352304,-0.748051,-2.870422,-3.601724,0.843123, -0.670566,0.283017,-0.685743,-2.922908,-3.637036,1.059206, -0.738865,0.325814,-0.589851,-3.082741,-3.598298,1.054556, -0.562406,-0.352304,-0.748051,-2.870422,-3.601724,0.843123, -0.738865,0.325814,-0.589851,-3.082741,-3.598298,1.054556, -0.482826,-0.146891,-0.863309,-3.006867,-3.575464,0.830221, 0.115225,0.169061,-0.978847,-2.740824,-3.597601,0.875006, 0.024044,0.175693,-0.984151,-2.791754,-3.635993,1.078555, -0.670566,0.283017,-0.685743,-2.922908,-3.637036,1.059206, 0.115225,0.169061,-0.978847,-2.740824,-3.597601,0.875006, -0.670566,0.283017,-0.685743,-2.922908,-3.637036,1.059206, -0.562406,-0.352304,-0.748051,-2.870422,-3.601724,0.843123, 0.405755,-0.293021,0.865737,-3.042899,-3.193907,1.207296, 0.254799,-0.149124,0.955426,-2.888628,-3.200302,1.210934, -0.541406,0.227835,0.809302,-3.03125,-3.09594,1.106355, 0.405755,-0.293021,0.865737,-3.042899,-3.193907,1.207296, -0.541406,0.227835,0.809302,-3.03125,-3.09594,1.106355, -0.125911,-0.68432,-0.718229,-3.121673,-3.120319,1.136456, 0.487947,-0.44627,0.750167,-3.135041,-3.243787,1.189436, 0.405755,-0.293021,0.865737,-3.042899,-3.193907,1.207296, -0.125911,-0.68432,-0.718229,-3.121673,-3.120319,1.136456, 0.487947,-0.44627,0.750167,-3.135041,-3.243787,1.189436, -0.125911,-0.68432,-0.718229,-3.121673,-3.120319,1.136456, 0.535863,0.090315,-0.83946,-3.169546,-3.135273,1.128247, -0.059163,0.13391,0.989226,-3.184143,-3.298048,1.156892, 0.487947,-0.44627,0.750167,-3.135041,-3.243787,1.189436, 0.535863,0.090315,-0.83946,-3.169546,-3.135273,1.128247, -0.059163,0.13391,0.989226,-3.184143,-3.298048,1.156892, 0.535863,0.090315,-0.83946,-3.169546,-3.135273,1.128247, 0.085126,0.114843,0.98973,-3.217306,-3.187686,1.075214, 0.199599,0.097869,-0.974978,-2.80326,-3.21358,0.942403, 0.236645,-0.06852,-0.969177,-2.928681,-3.072892,0.924772, -0.161613,0.16539,0.972896,-2.884711,-3.063896,0.993766, 0.199599,0.097869,-0.974978,-2.80326,-3.21358,0.942403, -0.161613,0.16539,0.972896,-2.884711,-3.063896,0.993766, -0.206994,0.072903,0.975622,-2.770335,-3.208138,1.031045, 0.177373,0.037311,0.983436,-2.787341,-3.278502,1.138621, 0.159383,-0.507401,-0.846842,-2.749355,-3.272099,1.034148, -0.206994,0.072903,0.975622,-2.770335,-3.208138,1.031045, 0.177373,0.037311,0.983436,-2.787341,-3.278502,1.138621, -0.206994,0.072903,0.975622,-2.770335,-3.208138,1.031045, -0.308543,0.191148,0.931807,-2.822497,-3.186549,1.120984, -0.026425,0.178249,0.983631,-2.631547,-3.559891,1.33738, 0.35124,-0.91474,-0.199704,-2.58358,-3.514267,1.278598, -0.048366,0.138166,0.989227,-2.699957,-3.390295,1.185593, -0.026425,0.178249,0.983631,-2.631547,-3.559891,1.33738, -0.048366,0.138166,0.989227,-2.699957,-3.390295,1.185593, 0.011655,0.055061,0.998415,-2.736599,-3.394849,1.269577, 0.285409,-0.933801,-0.215773,-2.52472,-3.561609,1.161535, -0.97518,0.20982,-0.070713,-2.649491,-3.404362,1.100352, -0.048366,0.138166,0.989227,-2.699957,-3.390295,1.185593, 0.285409,-0.933801,-0.215773,-2.52472,-3.561609,1.161535, -0.048366,0.138166,0.989227,-2.699957,-3.390295,1.185593, 0.35124,-0.91474,-0.199704,-2.58358,-3.514267,1.278598, 0.159383,-0.507401,-0.846842,-2.749355,-3.272099,1.034148, 0.177373,0.037311,0.983436,-2.787341,-3.278502,1.138621, -0.048366,0.138166,0.989227,-2.699957,-3.390295,1.185593, 0.159383,-0.507401,-0.846842,-2.749355,-3.272099,1.034148, -0.048366,0.138166,0.989227,-2.699957,-3.390295,1.185593, -0.97518,0.20982,-0.070713,-2.649491,-3.404362,1.100352, -0.999995,0.003039,0.000095,-2.593513,-3.536154,0.94245, -0.830756,0.127038,0.541946,-2.668957,-3.397513,0.943626, -0.97518,0.20982,-0.070713,-2.649491,-3.404362,1.100352, -0.999995,0.003039,0.000095,-2.593513,-3.536154,0.94245, -0.97518,0.20982,-0.070713,-2.649491,-3.404362,1.100352, 0.285409,-0.933801,-0.215773,-2.52472,-3.561609,1.161535, -0.874688,-0.025586,0.48401,-2.749867,-3.295148,0.966073, 0.159383,-0.507401,-0.846842,-2.749355,-3.272099,1.034148, -0.97518,0.20982,-0.070713,-2.649491,-3.404362,1.100352, -0.874688,-0.025586,0.48401,-2.749867,-3.295148,0.966073, -0.97518,0.20982,-0.070713,-2.649491,-3.404362,1.100352, -0.830756,0.127038,0.541946,-2.668957,-3.397513,0.943626, 0.199599,0.097869,-0.974978,-2.80326,-3.21358,0.942403, -0.206994,0.072903,0.975622,-2.770335,-3.208138,1.031045, 0.159383,-0.507401,-0.846842,-2.749355,-3.272099,1.034148, 0.199599,0.097869,-0.974978,-2.80326,-3.21358,0.942403, 0.159383,-0.507401,-0.846842,-2.749355,-3.272099,1.034148, -0.874688,-0.025586,0.48401,-2.749867,-3.295148,0.966073, -0.860798,0.234294,0.451812,-3.011987,-3.092,0.860973, -0.405387,0.054444,0.912522,-2.944625,-3.282121,0.817054, -0.382827,0.20765,-0.900181,-3.087335,-3.350463,0.831656, -0.860798,0.234294,0.451812,-3.011987,-3.092,0.860973, -0.382827,0.20765,-0.900181,-3.087335,-3.350463,0.831656, -0.64352,0.086605,-0.760514,-3.11957,-3.183977,0.870739, 0.236645,-0.06852,-0.969177,-2.928681,-3.072892,0.924772, 0.199599,0.097869,-0.974978,-2.80326,-3.21358,0.942403, -0.405387,0.054444,0.912522,-2.944625,-3.282121,0.817054, 0.236645,-0.06852,-0.969177,-2.928681,-3.072892,0.924772, -0.405387,0.054444,0.912522,-2.944625,-3.282121,0.817054, -0.860798,0.234294,0.451812,-3.011987,-3.092,0.860973, -0.405387,0.054444,0.912522,-2.944625,-3.282121,0.817054, -0.51506,-0.054833,0.855398,-2.890885,-3.415616,0.819125, -0.421241,0.09636,-0.901815,-3.074557,-3.486847,0.843432, -0.405387,0.054444,0.912522,-2.944625,-3.282121,0.817054, -0.421241,0.09636,-0.901815,-3.074557,-3.486847,0.843432, -0.382827,0.20765,-0.900181,-3.087335,-3.350463,0.831656, 0.199599,0.097869,-0.974978,-2.80326,-3.21358,0.942403, -0.874688,-0.025586,0.48401,-2.749867,-3.295148,0.966073, -0.51506,-0.054833,0.855398,-2.890885,-3.415616,0.819125, 0.199599,0.097869,-0.974978,-2.80326,-3.21358,0.942403, -0.51506,-0.054833,0.855398,-2.890885,-3.415616,0.819125, -0.405387,0.054444,0.912522,-2.944625,-3.282121,0.817054, -0.482826,-0.146891,-0.863309,-3.006867,-3.575464,0.830221, -0.421241,0.09636,-0.901815,-3.074557,-3.486847,0.843432, -0.51506,-0.054833,0.855398,-2.890885,-3.415616,0.819125, -0.482826,-0.146891,-0.863309,-3.006867,-3.575464,0.830221, -0.51506,-0.054833,0.855398,-2.890885,-3.415616,0.819125, -0.562406,-0.352304,-0.748051,-2.870422,-3.601724,0.843123, -0.830756,0.127038,0.541946,-2.668957,-3.397513,0.943626, -0.51506,-0.054833,0.855398,-2.890885,-3.415616,0.819125, -0.874688,-0.025586,0.48401,-2.749867,-3.295148,0.966073, -0.51506,-0.054833,0.855398,-2.890885,-3.415616,0.819125, 0.115225,0.169061,-0.978847,-2.740824,-3.597601,0.875006, -0.562406,-0.352304,-0.748051,-2.870422,-3.601724,0.843123, 0.115225,0.169061,-0.978847,-2.740824,-3.597601,0.875006, -0.51506,-0.054833,0.855398,-2.890885,-3.415616,0.819125, -0.830756,0.127038,0.541946,-2.668957,-3.397513,0.943626, 0.115225,0.169061,-0.978847,-2.740824,-3.597601,0.875006, -0.830756,0.127038,0.541946,-2.668957,-3.397513,0.943626, -0.999995,0.003039,0.000095,-2.593513,-3.536154,0.94245, 0.024044,0.175693,-0.984151,-2.791754,-3.635993,1.078555, 0.115225,0.169061,-0.978847,-2.740824,-3.597601,0.875006, -0.999995,0.003039,0.000095,-2.593513,-3.536154,0.94245, 0.024044,0.175693,-0.984151,-2.791754,-3.635993,1.078555, -0.999995,0.003039,0.000095,-2.593513,-3.536154,0.94245, 0.285409,-0.933801,-0.215773,-2.52472,-3.561609,1.161535, 0.024044,0.175693,-0.984151,-2.791754,-3.635993,1.078555, -0.093334,0.204552,0.974396,-2.729567,-3.602976,1.377236, -0.057735,0.03099,0.997851,-2.981824,-3.608887,1.346959, 0.024044,0.175693,-0.984151,-2.791754,-3.635993,1.078555, -0.057735,0.03099,0.997851,-2.981824,-3.608887,1.346959, -0.670566,0.283017,-0.685743,-2.922908,-3.637036,1.059206, -0.308543,0.191148,0.931807,-2.822497,-3.186549,1.120984, 0.07463,0.029476,0.996776,-2.90901,-3.084482,1.089147, -0.541406,0.227835,0.809302,-3.03125,-3.09594,1.106355, 0.285409,-0.933801,-0.215773,-2.52472,-3.561609,1.161535, 0.35124,-0.91474,-0.199704,-2.58358,-3.514267,1.278598, -0.026425,0.178249,0.983631,-2.631547,-3.559891,1.33738, 0.285409,-0.933801,-0.215773,-2.52472,-3.561609,1.161535, -0.026425,0.178249,0.983631,-2.631547,-3.559891,1.33738, -0.093334,0.204552,0.974396,-2.729567,-3.602976,1.377236, 0.285409,-0.933801,-0.215773,-2.52472,-3.561609,1.161535, -0.093334,0.204552,0.974396,-2.729567,-3.602976,1.377236, 0.024044,0.175693,-0.984151,-2.791754,-3.635993,1.078555 }; static const struct gllist frame={GL_N3F_V3F,GL_TRIANGLES,1032,data,NULL}; const struct gllist *cow_hoofs=&frame; xscreensaver-5.36/hacks/glx/cow_horns.c000644 000767 000024 00000163173 12701612217 020200 0ustar00jwzstaff000000 000000 #include "gllist.h" static const float data[]={ -0.000715,-0.295728,0.955272,4.22473,2.624525,-0.491916, -0.03479,0.69667,0.716547,4.209941,2.600612,-0.337597, -0.01139,0.953897,0.299916,4.328606,2.563996,-0.343892, -0.000715,-0.295728,0.955272,4.22473,2.624525,-0.491916, -0.01139,0.953897,0.299916,4.328606,2.563996,-0.343892, -0.163152,0.69985,0.695407,4.344028,2.585635,-0.470949, -0.163152,0.69985,0.695407,4.344028,2.585635,-0.470949, -0.01139,0.953897,0.299916,4.328606,2.563996,-0.343892, -0.151742,0.274295,0.949598,4.410844,2.500167,-0.351972, -0.163152,0.69985,0.695407,4.344028,2.585635,-0.470949, -0.151742,0.274295,0.949598,4.410844,2.500167,-0.351972, -0.090939,0.953562,0.287141,4.407729,2.53164,-0.486692, 0.008972,0.708004,0.706152,4.277169,2.652435,-0.591369, -0.000715,-0.295728,0.955272,4.22473,2.624525,-0.491916, -0.163152,0.69985,0.695407,4.344028,2.585635,-0.470949, 0.008972,0.708004,0.706152,4.277169,2.652435,-0.591369, -0.163152,0.69985,0.695407,4.344028,2.585635,-0.470949, 0.809878,-0.450757,-0.375386,4.359483,2.615839,-0.596817, 0.809878,-0.450757,-0.375386,4.359483,2.615839,-0.596817, -0.163152,0.69985,0.695407,4.344028,2.585635,-0.470949, -0.090939,0.953562,0.287141,4.407729,2.53164,-0.486692, 0.809878,-0.450757,-0.375386,4.359483,2.615839,-0.596817, -0.090939,0.953562,0.287141,4.407729,2.53164,-0.486692, 0.795507,-0.586003,-0.154171,4.423033,2.561337,-0.603562, 0.743898,-0.655714,0.129057,4.35668,2.682996,-0.71905, 0.008972,0.708004,0.706152,4.277169,2.652435,-0.591369, 0.809878,-0.450757,-0.375386,4.359483,2.615839,-0.596817, 0.743898,-0.655714,0.129057,4.35668,2.682996,-0.71905, 0.809878,-0.450757,-0.375386,4.359483,2.615839,-0.596817, 0.083641,-0.819891,-0.566378,4.411541,2.663824,-0.713132, 0.083641,-0.819891,-0.566378,4.411541,2.663824,-0.713132, 0.809878,-0.450757,-0.375386,4.359483,2.615839,-0.596817, 0.795507,-0.586003,-0.154171,4.423033,2.561337,-0.603562, 0.083641,-0.819891,-0.566378,4.411541,2.663824,-0.713132, 0.795507,-0.586003,-0.154171,4.423033,2.561337,-0.603562, 0.042118,-0.881894,-0.469563,4.47609,2.606654,-0.692301, 0.713982,0.301536,-0.631907,4.418954,2.707401,-0.782531, 0.743898,-0.655714,0.129057,4.35668,2.682996,-0.71905, 0.083641,-0.819891,-0.566378,4.411541,2.663824,-0.713132, 0.713982,0.301536,-0.631907,4.418954,2.707401,-0.782531, 0.083641,-0.819891,-0.566378,4.411541,2.663824,-0.713132, 0.086688,-0.887002,-0.453556,4.465268,2.695425,-0.757267, 0.083641,-0.819891,-0.566378,4.411541,2.663824,-0.713132, 0.042118,-0.881894,-0.469563,4.47609,2.606654,-0.692301, 0.571341,-0.68069,0.458509,4.520603,2.639162,-0.745542, 0.083641,-0.819891,-0.566378,4.411541,2.663824,-0.713132, 0.571341,-0.68069,0.458509,4.520603,2.639162,-0.745542, 0.086688,-0.887002,-0.453556,4.465268,2.695425,-0.757267, 0.176955,-0.903058,-0.391373,4.509555,2.719807,-0.819972, 0.713982,0.301536,-0.631907,4.418954,2.707401,-0.782531, 0.086688,-0.887002,-0.453556,4.465268,2.695425,-0.757267, 0.176955,-0.903058,-0.391373,4.509555,2.719807,-0.819972, 0.086688,-0.887002,-0.453556,4.465268,2.695425,-0.757267, 0.388502,-0.664299,0.638571,4.546655,2.709095,-0.80378, 0.086688,-0.887002,-0.453556,4.465268,2.695425,-0.757267, 0.571341,-0.68069,0.458509,4.520603,2.639162,-0.745542, 0.21141,-0.953268,-0.215838,4.574545,2.669863,-0.780363, 0.086688,-0.887002,-0.453556,4.465268,2.695425,-0.757267, 0.21141,-0.953268,-0.215838,4.574545,2.669863,-0.780363, 0.388502,-0.664299,0.638571,4.546655,2.709095,-0.80378, -0.090939,0.953562,0.287141,4.407729,2.53164,-0.486692, -0.151742,0.274295,0.949598,4.410844,2.500167,-0.351972, 0.288841,-0.745301,0.600914,4.474318,2.418432,-0.361347, -0.090939,0.953562,0.287141,4.407729,2.53164,-0.486692, 0.288841,-0.745301,0.600914,4.474318,2.418432,-0.361347, 0.237421,-0.963021,-0.127365,4.44385,2.449921,-0.495432, 0.795507,-0.586003,-0.154171,4.423033,2.561337,-0.603562, -0.090939,0.953562,0.287141,4.407729,2.53164,-0.486692, 0.237421,-0.963021,-0.127365,4.44385,2.449921,-0.495432, 0.795507,-0.586003,-0.154171,4.423033,2.561337,-0.603562, 0.237421,-0.963021,-0.127365,4.44385,2.449921,-0.495432, 0.157921,-0.851177,0.500558,4.44076,2.490353,-0.629287, 0.042118,-0.881894,-0.469563,4.47609,2.606654,-0.692301, 0.795507,-0.586003,-0.154171,4.423033,2.561337,-0.603562, 0.157921,-0.851177,0.500558,4.44076,2.490353,-0.629287, 0.042118,-0.881894,-0.469563,4.47609,2.606654,-0.692301, 0.157921,-0.851177,0.500558,4.44076,2.490353,-0.629287, 0.254106,-0.95176,-0.171999,4.484667,2.534451,-0.708888, 0.571341,-0.68069,0.458509,4.520603,2.639162,-0.745542, 0.042118,-0.881894,-0.469563,4.47609,2.606654,-0.692301, 0.254106,-0.95176,-0.171999,4.484667,2.534451,-0.708888, 0.571341,-0.68069,0.458509,4.520603,2.639162,-0.745542, 0.254106,-0.95176,-0.171999,4.484667,2.534451,-0.708888, 0.165259,-0.797056,0.580854,4.520165,2.557971,-0.762427, 0.21141,-0.953268,-0.215838,4.574545,2.669863,-0.780363, 0.571341,-0.68069,0.458509,4.520603,2.639162,-0.745542, 0.165259,-0.797056,0.580854,4.520165,2.557971,-0.762427, 0.21141,-0.953268,-0.215838,4.574545,2.669863,-0.780363, 0.165259,-0.797056,0.580854,4.520165,2.557971,-0.762427, 0.243744,-0.944481,-0.220328,4.59262,2.569879,-0.790452, 0.209939,-0.930128,-0.301309,4.656565,2.680542,-0.799684, 0.21141,-0.953268,-0.215838,4.574545,2.669863,-0.780363, 0.243744,-0.944481,-0.220328,4.59262,2.569879,-0.790452, 0.209939,-0.930128,-0.301309,4.656565,2.680542,-0.799684, 0.243744,-0.944481,-0.220328,4.59262,2.569879,-0.790452, -0.05208,-0.715695,-0.696469,4.674691,2.598833,-0.808006, 0.287073,-0.905921,-0.311283,4.646703,2.728688,-0.822295, 0.388502,-0.664299,0.638571,4.546655,2.709095,-0.80378, 0.21141,-0.953268,-0.215838,4.574545,2.669863,-0.780363, 0.287073,-0.905921,-0.311283,4.646703,2.728688,-0.822295, 0.21141,-0.953268,-0.215838,4.574545,2.669863,-0.780363, 0.209939,-0.930128,-0.301309,4.656565,2.680542,-0.799684, 0.267121,-0.895396,-0.356249,4.636909,2.750501,-0.856859, 0.176955,-0.903058,-0.391373,4.509555,2.719807,-0.819972, 0.388502,-0.664299,0.638571,4.546655,2.709095,-0.80378, 0.267121,-0.895396,-0.356249,4.636909,2.750501,-0.856859, 0.388502,-0.664299,0.638571,4.546655,2.709095,-0.80378, 0.287073,-0.905921,-0.311283,4.646703,2.728688,-0.822295, -0.290459,-0.499809,-0.815981,4.748031,2.683805,-0.800044, 0.209939,-0.930128,-0.301309,4.656565,2.680542,-0.799684, -0.05208,-0.715695,-0.696469,4.674691,2.598833,-0.808006, -0.290459,-0.499809,-0.815981,4.748031,2.683805,-0.800044, -0.05208,-0.715695,-0.696469,4.674691,2.598833,-0.808006, -0.501597,-0.526154,-0.686704,4.729447,2.606204,-0.807513, -0.538845,-0.659239,-0.524452,4.728931,2.721892,-0.832625, 0.287073,-0.905921,-0.311283,4.646703,2.728688,-0.822295, 0.209939,-0.930128,-0.301309,4.656565,2.680542,-0.799684, -0.538845,-0.659239,-0.524452,4.728931,2.721892,-0.832625, 0.209939,-0.930128,-0.301309,4.656565,2.680542,-0.799684, -0.290459,-0.499809,-0.815981,4.748031,2.683805,-0.800044, -0.53682,-0.608254,-0.58468,4.719171,2.751091,-0.865965, 0.267121,-0.895396,-0.356249,4.636909,2.750501,-0.856859, 0.287073,-0.905921,-0.311283,4.646703,2.728688,-0.822295, -0.53682,-0.608254,-0.58468,4.719171,2.751091,-0.865965, 0.287073,-0.905921,-0.311283,4.646703,2.728688,-0.822295, -0.538845,-0.659239,-0.524452,4.728931,2.721892,-0.832625, -0.635876,0.32433,-0.700337,4.821325,2.691794,-0.791887, -0.290459,-0.499809,-0.815981,4.748031,2.683805,-0.800044, -0.501597,-0.526154,-0.686704,4.729447,2.606204,-0.807513, -0.635876,0.32433,-0.700337,4.821325,2.691794,-0.791887, -0.501597,-0.526154,-0.686704,4.729447,2.606204,-0.807513, -0.376273,-0.14016,-0.915846,4.821336,2.621498,-0.789636, -0.508573,-0.111047,-0.853828,4.811798,2.72868,-0.815406, -0.538845,-0.659239,-0.524452,4.728931,2.721892,-0.832625, -0.290459,-0.499809,-0.815981,4.748031,2.683805,-0.800044, -0.508573,-0.111047,-0.853828,4.811798,2.72868,-0.815406, -0.290459,-0.499809,-0.815981,4.748031,2.683805,-0.800044, -0.635876,0.32433,-0.700337,4.821325,2.691794,-0.791887, -0.53682,-0.608254,-0.58468,4.719171,2.751091,-0.865965, -0.538845,-0.659239,-0.524452,4.728931,2.721892,-0.832625, -0.508573,-0.111047,-0.853828,4.811798,2.72868,-0.815406, -0.53682,-0.608254,-0.58468,4.719171,2.751091,-0.865965, -0.508573,-0.111047,-0.853828,4.811798,2.72868,-0.815406, -0.724543,-0.128977,-0.677054,4.801436,2.750224,-0.858918, -0.86136,-0.239794,-0.447836,5.096148,2.75972,-0.774729, -0.724543,-0.128977,-0.677054,4.801436,2.750224,-0.858918, -0.508573,-0.111047,-0.853828,4.811798,2.72868,-0.815406, -0.86136,-0.239794,-0.447836,5.096148,2.75972,-0.774729, -0.508573,-0.111047,-0.853828,4.811798,2.72868,-0.815406, -0.635876,0.32433,-0.700337,4.821325,2.691794,-0.791887, -0.86136,-0.239794,-0.447836,5.096148,2.75972,-0.774729, -0.635876,0.32433,-0.700337,4.821325,2.691794,-0.791887, -0.376273,-0.14016,-0.915846,4.821336,2.621498,-0.789636, -0.903777,-0.182749,-0.387027,4.442912,2.343263,-0.53322, 0.237421,-0.963021,-0.127365,4.44385,2.449921,-0.495432, 0.288841,-0.745301,0.600914,4.474318,2.418432,-0.361347, -0.903777,-0.182749,-0.387027,4.442912,2.343263,-0.53322, 0.288841,-0.745301,0.600914,4.474318,2.418432,-0.361347, 0.195545,0.103956,-0.975169,4.472349,2.325133,-0.443764, -0.911341,0.002265,-0.411646,4.440713,2.398472,-0.629128, 0.157921,-0.851177,0.500558,4.44076,2.490353,-0.629287, 0.237421,-0.963021,-0.127365,4.44385,2.449921,-0.495432, -0.911341,0.002265,-0.411646,4.440713,2.398472,-0.629128, 0.237421,-0.963021,-0.127365,4.44385,2.449921,-0.495432, -0.903777,-0.182749,-0.387027,4.442912,2.343263,-0.53322, 0.254106,-0.95176,-0.171999,4.484667,2.534451,-0.708888, 0.157921,-0.851177,0.500558,4.44076,2.490353,-0.629287, -0.911341,0.002265,-0.411646,4.440713,2.398472,-0.629128, 0.254106,-0.95176,-0.171999,4.484667,2.534451,-0.708888, -0.911341,0.002265,-0.411646,4.440713,2.398472,-0.629128, -0.77316,0.344901,-0.532228,4.474625,2.465214,-0.75189, -0.911341,0.002265,-0.411646,4.440713,2.398472,-0.629128, -0.903777,-0.182749,-0.387027,4.442912,2.343263,-0.53322, -0.566117,0.431682,-0.702255,4.314039,2.32946,-0.57751, -0.911341,0.002265,-0.411646,4.440713,2.398472,-0.629128, -0.566117,0.431682,-0.702255,4.314039,2.32946,-0.57751, -0.383863,0.612068,-0.691392,4.32063,2.385528,-0.682583, -0.566117,0.431682,-0.702255,4.314039,2.32946,-0.57751, -0.903777,-0.182749,-0.387027,4.442912,2.343263,-0.53322, 0.195545,0.103956,-0.975169,4.472349,2.325133,-0.443764, -0.566117,0.431682,-0.702255,4.314039,2.32946,-0.57751, 0.195545,0.103956,-0.975169,4.472349,2.325133,-0.443764, -0.091679,0.768658,-0.633056,4.296769,2.260422,-0.528796, -0.77316,0.344901,-0.532228,4.474625,2.465214,-0.75189, -0.911341,0.002265,-0.411646,4.440713,2.398472,-0.629128, -0.383863,0.612068,-0.691392,4.32063,2.385528,-0.682583, -0.77316,0.344901,-0.532228,4.474625,2.465214,-0.75189, -0.383863,0.612068,-0.691392,4.32063,2.385528,-0.682583, -0.911194,0.285551,-0.296961,4.382053,2.433474,-0.798757, 0.165259,-0.797056,0.580854,4.520165,2.557971,-0.762427, 0.254106,-0.95176,-0.171999,4.484667,2.534451,-0.708888, -0.77316,0.344901,-0.532228,4.474625,2.465214,-0.75189, 0.165259,-0.797056,0.580854,4.520165,2.557971,-0.762427, -0.77316,0.344901,-0.532228,4.474625,2.465214,-0.75189, -0.931592,0.319003,-0.174277,4.538177,2.513353,-0.776566, -0.931592,0.319003,-0.174277,4.538177,2.513353,-0.776566, -0.77316,0.344901,-0.532228,4.474625,2.465214,-0.75189, -0.911194,0.285551,-0.296961,4.382053,2.433474,-0.798757, -0.931592,0.319003,-0.174277,4.538177,2.513353,-0.776566, -0.911194,0.285551,-0.296961,4.382053,2.433474,-0.798757, -0.895156,0.397807,-0.201111,4.444739,2.475795,-0.860515, 0.243744,-0.944481,-0.220328,4.59262,2.569879,-0.790452, 0.165259,-0.797056,0.580854,4.520165,2.557971,-0.762427, -0.931592,0.319003,-0.174277,4.538177,2.513353,-0.776566, 0.243744,-0.944481,-0.220328,4.59262,2.569879,-0.790452, -0.931592,0.319003,-0.174277,4.538177,2.513353,-0.776566, -0.885174,0.439903,-0.1515,4.601515,2.533324,-0.794193, -0.885174,0.439903,-0.1515,4.601515,2.533324,-0.794193, -0.931592,0.319003,-0.174277,4.538177,2.513353,-0.776566, -0.895156,0.397807,-0.201111,4.444739,2.475795,-0.860515, -0.885174,0.439903,-0.1515,4.601515,2.533324,-0.794193, -0.895156,0.397807,-0.201111,4.444739,2.475795,-0.860515, -0.821561,0.369567,-0.434116,4.554459,2.511417,-0.850571, -0.05208,-0.715695,-0.696469,4.674691,2.598833,-0.808006, 0.243744,-0.944481,-0.220328,4.59262,2.569879,-0.790452, -0.885174,0.439903,-0.1515,4.601515,2.533324,-0.794193, -0.05208,-0.715695,-0.696469,4.674691,2.598833,-0.808006, -0.885174,0.439903,-0.1515,4.601515,2.533324,-0.794193, -0.742898,0.572423,-0.347037,4.683344,2.554221,-0.821927, -0.742898,0.572423,-0.347037,4.683344,2.554221,-0.821927, -0.885174,0.439903,-0.1515,4.601515,2.533324,-0.794193, -0.821561,0.369567,-0.434116,4.554459,2.511417,-0.850571, -0.742898,0.572423,-0.347037,4.683344,2.554221,-0.821927, -0.821561,0.369567,-0.434116,4.554459,2.511417,-0.850571, -0.659696,0.567803,-0.492342,4.681847,2.551036,-0.886235, 0.11638,0.680313,-0.723623,4.737893,2.564648,-0.830389, -0.742898,0.572423,-0.347037,4.683344,2.554221,-0.821927, -0.659696,0.567803,-0.492342,4.681847,2.551036,-0.886235, 0.11638,0.680313,-0.723623,4.737893,2.564648,-0.830389, -0.659696,0.567803,-0.492342,4.681847,2.551036,-0.886235, 0.206279,0.744918,-0.634466,4.755192,2.568818,-0.876311, -0.395723,0.901671,-0.174334,4.829566,2.580797,-0.821827, 0.11638,0.680313,-0.723623,4.737893,2.564648,-0.830389, 0.206279,0.744918,-0.634466,4.755192,2.568818,-0.876311, -0.395723,0.901671,-0.174334,4.829566,2.580797,-0.821827, 0.206279,0.744918,-0.634466,4.755192,2.568818,-0.876311, -0.476949,0.871028,-0.117606,4.856249,2.593812,-0.867067, -0.501597,-0.526154,-0.686704,4.729447,2.606204,-0.807513, -0.05208,-0.715695,-0.696469,4.674691,2.598833,-0.808006, -0.742898,0.572423,-0.347037,4.683344,2.554221,-0.821927, -0.501597,-0.526154,-0.686704,4.729447,2.606204,-0.807513, -0.742898,0.572423,-0.347037,4.683344,2.554221,-0.821927, 0.11638,0.680313,-0.723623,4.737893,2.564648,-0.830389, -0.376273,-0.14016,-0.915846,4.821336,2.621498,-0.789636, -0.501597,-0.526154,-0.686704,4.729447,2.606204,-0.807513, 0.11638,0.680313,-0.723623,4.737893,2.564648,-0.830389, -0.376273,-0.14016,-0.915846,4.821336,2.621498,-0.789636, 0.11638,0.680313,-0.723623,4.737893,2.564648,-0.830389, -0.395723,0.901671,-0.174334,4.829566,2.580797,-0.821827, -0.590366,0.807127,0.003753,4.662221,2.556346,-0.940618, -0.659696,0.567803,-0.492342,4.681847,2.551036,-0.886235, -0.821561,0.369567,-0.434116,4.554459,2.511417,-0.850571, -0.590366,0.807127,0.003753,4.662221,2.556346,-0.940618, -0.821561,0.369567,-0.434116,4.554459,2.511417,-0.850571, -0.594389,0.803108,-0.041468,4.497719,2.54748,-0.937659, -0.659696,0.567803,-0.492342,4.681847,2.551036,-0.886235, -0.590366,0.807127,0.003753,4.662221,2.556346,-0.940618, -0.610894,0.790229,0.048447,4.763337,2.590834,-0.929248, -0.659696,0.567803,-0.492342,4.681847,2.551036,-0.886235, -0.610894,0.790229,0.048447,4.763337,2.590834,-0.929248, 0.206279,0.744918,-0.634466,4.755192,2.568818,-0.876311, -0.091114,0.94565,-0.312161,4.883022,2.613658,-0.893163, -0.476949,0.871028,-0.117606,4.856249,2.593812,-0.867067, 0.206279,0.744918,-0.634466,4.755192,2.568818,-0.876311, -0.091114,0.94565,-0.312161,4.883022,2.613658,-0.893163, 0.206279,0.744918,-0.634466,4.755192,2.568818,-0.876311, -0.610894,0.790229,0.048447,4.763337,2.590834,-0.929248, -0.821561,0.369567,-0.434116,4.554459,2.511417,-0.850571, -0.895156,0.397807,-0.201111,4.444739,2.475795,-0.860515, -0.216454,0.960138,-0.176868,4.352603,2.524888,-0.890532, -0.821561,0.369567,-0.434116,4.554459,2.511417,-0.850571, -0.216454,0.960138,-0.176868,4.352603,2.524888,-0.890532, -0.594389,0.803108,-0.041468,4.497719,2.54748,-0.937659, -0.216454,0.960138,-0.176868,4.352603,2.524888,-0.890532, -0.895156,0.397807,-0.201111,4.444739,2.475795,-0.860515, -0.911194,0.285551,-0.296961,4.382053,2.433474,-0.798757, -0.216454,0.960138,-0.176868,4.352603,2.524888,-0.890532, -0.911194,0.285551,-0.296961,4.382053,2.433474,-0.798757, -0.283496,0.953866,-0.098841,4.262798,2.490674,-0.818316, -0.283496,0.953866,-0.098841,4.262798,2.490674,-0.818316, -0.911194,0.285551,-0.296961,4.382053,2.433474,-0.798757, -0.383863,0.612068,-0.691392,4.32063,2.385528,-0.682583, -0.283496,0.953866,-0.098841,4.262798,2.490674,-0.818316, -0.383863,0.612068,-0.691392,4.32063,2.385528,-0.682583, -0.421167,0.906102,-0.039984,4.192789,2.411967,-0.668016, -0.421167,0.906102,-0.039984,4.192789,2.411967,-0.668016, -0.383863,0.612068,-0.691392,4.32063,2.385528,-0.682583, -0.566117,0.431682,-0.702255,4.314039,2.32946,-0.57751, -0.421167,0.906102,-0.039984,4.192789,2.411967,-0.668016, -0.566117,0.431682,-0.702255,4.314039,2.32946,-0.57751, -0.557881,0.828586,0.047047,4.193959,2.370476,-0.616705, -0.536307,0.710867,-0.45502,4.113935,2.334131,-0.526471, -0.557881,0.828586,0.047047,4.193959,2.370476,-0.616705, -0.566117,0.431682,-0.702255,4.314039,2.32946,-0.57751, -0.536307,0.710867,-0.45502,4.113935,2.334131,-0.526471, -0.566117,0.431682,-0.702255,4.314039,2.32946,-0.57751, -0.091679,0.768658,-0.633056,4.296769,2.260422,-0.528796, -0.091114,0.94565,-0.312161,4.883022,2.613658,-0.893163, -0.86136,-0.239794,-0.447836,5.096148,2.75972,-0.774729, -0.476949,0.871028,-0.117606,4.856249,2.593812,-0.867067, -0.610894,0.790229,0.048447,4.763337,2.590834,-0.929248, -0.678216,0.658343,-0.326508,4.735139,2.645464,-0.95089, 0.05537,0.916343,-0.396546,4.854957,2.660227,-0.92431, -0.610894,0.790229,0.048447,4.763337,2.590834,-0.929248, 0.05537,0.916343,-0.396546,4.854957,2.660227,-0.92431, -0.091114,0.94565,-0.312161,4.883022,2.613658,-0.893163, -0.590366,0.807127,0.003753,4.662221,2.556346,-0.940618, 0.090337,0.942369,-0.32215,4.615662,2.63387,-0.977986, -0.678216,0.658343,-0.326508,4.735139,2.645464,-0.95089, -0.590366,0.807127,0.003753,4.662221,2.556346,-0.940618, -0.678216,0.658343,-0.326508,4.735139,2.645464,-0.95089, -0.610894,0.790229,0.048447,4.763337,2.590834,-0.929248, -0.594389,0.803108,-0.041468,4.497719,2.54748,-0.937659, -0.560855,0.735161,-0.380763,4.460582,2.622875,-0.957002, 0.090337,0.942369,-0.32215,4.615662,2.63387,-0.977986, -0.594389,0.803108,-0.041468,4.497719,2.54748,-0.937659, 0.090337,0.942369,-0.32215,4.615662,2.63387,-0.977986, -0.590366,0.807127,0.003753,4.662221,2.556346,-0.940618, -0.216454,0.960138,-0.176868,4.352603,2.524888,-0.890532, -0.641133,0.599375,-0.479267,4.343217,2.589542,-0.893106, -0.560855,0.735161,-0.380763,4.460582,2.622875,-0.957002, -0.216454,0.960138,-0.176868,4.352603,2.524888,-0.890532, -0.560855,0.735161,-0.380763,4.460582,2.622875,-0.957002, -0.594389,0.803108,-0.041468,4.497719,2.54748,-0.937659, -0.283496,0.953866,-0.098841,4.262798,2.490674,-0.818316, -0.760994,0.140162,-0.633436,4.244622,2.554467,-0.811726, -0.641133,0.599375,-0.479267,4.343217,2.589542,-0.893106, -0.283496,0.953866,-0.098841,4.262798,2.490674,-0.818316, -0.641133,0.599375,-0.479267,4.343217,2.589542,-0.893106, -0.216454,0.960138,-0.176868,4.352603,2.524888,-0.890532, -0.421167,0.906102,-0.039984,4.192789,2.411967,-0.668016, -0.411843,0.771855,-0.484381,4.138687,2.474013,-0.642311, -0.760994,0.140162,-0.633436,4.244622,2.554467,-0.811726, -0.421167,0.906102,-0.039984,4.192789,2.411967,-0.668016, -0.760994,0.140162,-0.633436,4.244622,2.554467,-0.811726, -0.283496,0.953866,-0.098841,4.262798,2.490674,-0.818316, -0.091114,0.94565,-0.312161,4.883022,2.613658,-0.893163, 0.05537,0.916343,-0.396546,4.854957,2.660227,-0.92431, -0.86136,-0.239794,-0.447836,5.096148,2.75972,-0.774729, -0.395036,0.74012,-0.544214,4.121994,2.458034,-0.570029, -0.411843,0.771855,-0.484381,4.138687,2.474013,-0.642311, -0.421167,0.906102,-0.039984,4.192789,2.411967,-0.668016, -0.395036,0.74012,-0.544214,4.121994,2.458034,-0.570029, -0.421167,0.906102,-0.039984,4.192789,2.411967,-0.668016, -0.557881,0.828586,0.047047,4.193959,2.370476,-0.616705, -0.395036,0.74012,-0.544214,4.121994,2.458034,-0.570029, -0.557881,0.828586,0.047047,4.193959,2.370476,-0.616705, -0.536307,0.710867,-0.45502,4.113935,2.334131,-0.526471, -0.395036,0.74012,-0.544214,4.121994,2.458034,-0.570029, -0.536307,0.710867,-0.45502,4.113935,2.334131,-0.526471, -0.330515,0.821242,-0.465103,4.07851,2.41181,-0.472193, -0.760994,0.140162,-0.633436,4.244622,2.554467,-0.811726, -0.353793,0.870619,-0.341838,4.235494,2.636171,-0.803613, -0.718934,0.608496,-0.335955,4.342998,2.664049,-0.904347, -0.760994,0.140162,-0.633436,4.244622,2.554467,-0.811726, -0.718934,0.608496,-0.335955,4.342998,2.664049,-0.904347, -0.641133,0.599375,-0.479267,4.343217,2.589542,-0.893106, -0.641133,0.599375,-0.479267,4.343217,2.589542,-0.893106, -0.718934,0.608496,-0.335955,4.342998,2.664049,-0.904347, -0.929249,-0.009269,-0.369337,4.460786,2.695616,-0.949972, -0.641133,0.599375,-0.479267,4.343217,2.589542,-0.893106, -0.929249,-0.009269,-0.369337,4.460786,2.695616,-0.949972, -0.560855,0.735161,-0.380763,4.460582,2.622875,-0.957002, -0.560855,0.735161,-0.380763,4.460582,2.622875,-0.957002, -0.929249,-0.009269,-0.369337,4.460786,2.695616,-0.949972, -0.144656,0.947613,-0.284787,4.6248,2.708372,-0.989445, -0.560855,0.735161,-0.380763,4.460582,2.622875,-0.957002, -0.144656,0.947613,-0.284787,4.6248,2.708372,-0.989445, 0.090337,0.942369,-0.32215,4.615662,2.63387,-0.977986, -0.411843,0.771855,-0.484381,4.138687,2.474013,-0.642311, -0.364192,0.890167,-0.2738,4.138494,2.557838,-0.652651, -0.353793,0.870619,-0.341838,4.235494,2.636171,-0.803613, -0.411843,0.771855,-0.484381,4.138687,2.474013,-0.642311, -0.353793,0.870619,-0.341838,4.235494,2.636171,-0.803613, -0.760994,0.140162,-0.633436,4.244622,2.554467,-0.811726, -0.719327,0.568277,-0.399538,4.104292,2.537976,-0.543437, -0.364192,0.890167,-0.2738,4.138494,2.557838,-0.652651, -0.411843,0.771855,-0.484381,4.138687,2.474013,-0.642311, -0.719327,0.568277,-0.399538,4.104292,2.537976,-0.543437, -0.411843,0.771855,-0.484381,4.138687,2.474013,-0.642311, -0.395036,0.74012,-0.544214,4.121994,2.458034,-0.570029, -0.904972,-0.026554,-0.424642,4.088356,2.510913,-0.453793, -0.719327,0.568277,-0.399538,4.104292,2.537976,-0.543437, -0.395036,0.74012,-0.544214,4.121994,2.458034,-0.570029, -0.904972,-0.026554,-0.424642,4.088356,2.510913,-0.453793, -0.395036,0.74012,-0.544214,4.121994,2.458034,-0.570029, -0.330515,0.821242,-0.465103,4.07851,2.41181,-0.472193, -0.144656,0.947613,-0.284787,4.6248,2.708372,-0.989445, 0.197027,0.937222,-0.287742,4.753015,2.699695,-0.973279, -0.678216,0.658343,-0.326508,4.735139,2.645464,-0.95089, -0.144656,0.947613,-0.284787,4.6248,2.708372,-0.989445, -0.678216,0.658343,-0.326508,4.735139,2.645464,-0.95089, 0.090337,0.942369,-0.32215,4.615662,2.63387,-0.977986, -0.678216,0.658343,-0.326508,4.735139,2.645464,-0.95089, 0.197027,0.937222,-0.287742,4.753015,2.699695,-0.973279, 0.225135,0.965893,-0.127928,4.863709,2.722151,-0.93666, -0.678216,0.658343,-0.326508,4.735139,2.645464,-0.95089, 0.225135,0.965893,-0.127928,4.863709,2.722151,-0.93666, 0.05537,0.916343,-0.396546,4.854957,2.660227,-0.92431, -0.000715,-0.295728,0.955272,4.22473,2.624525,-0.491916, -0.162972,0.917259,0.363422,4.151183,2.579059,-0.494606, -0.860594,0.405545,-0.308076,4.117367,2.568514,-0.3845, -0.000715,-0.295728,0.955272,4.22473,2.624525,-0.491916, -0.860594,0.405545,-0.308076,4.117367,2.568514,-0.3845, -0.03479,0.69667,0.716547,4.209941,2.600612,-0.337597, 0.267121,-0.895396,-0.356249,4.636909,2.750501,-0.856859, -0.31499,0.894135,0.318282,4.616626,2.749486,-0.939333, -0.758791,0.646991,0.075091,4.462368,2.725999,-0.882675, 0.267121,-0.895396,-0.356249,4.636909,2.750501,-0.856859, -0.758791,0.646991,0.075091,4.462368,2.725999,-0.882675, 0.176955,-0.903058,-0.391373,4.509555,2.719807,-0.819972, 0.176955,-0.903058,-0.391373,4.509555,2.719807,-0.819972, -0.758791,0.646991,0.075091,4.462368,2.725999,-0.882675, -0.900694,0.426849,-0.080936,4.354196,2.711836,-0.826545, 0.176955,-0.903058,-0.391373,4.509555,2.719807,-0.819972, -0.900694,0.426849,-0.080936,4.354196,2.711836,-0.826545, 0.713982,0.301536,-0.631907,4.418954,2.707401,-0.782531, 0.713982,0.301536,-0.631907,4.418954,2.707401,-0.782531, -0.900694,0.426849,-0.080936,4.354196,2.711836,-0.826545, -0.940255,0.335069,0.060403,4.273414,2.686575,-0.753674, 0.713982,0.301536,-0.631907,4.418954,2.707401,-0.782531, -0.940255,0.335069,0.060403,4.273414,2.686575,-0.753674, 0.743898,-0.655714,0.129057,4.35668,2.682996,-0.71905, -0.162972,0.917259,0.363422,4.151183,2.579059,-0.494606, -0.000715,-0.295728,0.955272,4.22473,2.624525,-0.491916, 0.008972,0.708004,0.706152,4.277169,2.652435,-0.591369, -0.162972,0.917259,0.363422,4.151183,2.579059,-0.494606, 0.008972,0.708004,0.706152,4.277169,2.652435,-0.591369, -0.816521,0.559553,0.142109,4.176065,2.636883,-0.618384, -0.904972,-0.026554,-0.424642,4.088356,2.510913,-0.453793, -0.860594,0.405545,-0.308076,4.117367,2.568514,-0.3845, -0.162972,0.917259,0.363422,4.151183,2.579059,-0.494606, -0.904972,-0.026554,-0.424642,4.088356,2.510913,-0.453793, -0.162972,0.917259,0.363422,4.151183,2.579059,-0.494606, -0.719327,0.568277,-0.399538,4.104292,2.537976,-0.543437, -0.816521,0.559553,0.142109,4.176065,2.636883,-0.618384, 0.008972,0.708004,0.706152,4.277169,2.652435,-0.591369, 0.743898,-0.655714,0.129057,4.35668,2.682996,-0.71905, -0.816521,0.559553,0.142109,4.176065,2.636883,-0.618384, 0.743898,-0.655714,0.129057,4.35668,2.682996,-0.71905, -0.940255,0.335069,0.060403,4.273414,2.686575,-0.753674, -0.719327,0.568277,-0.399538,4.104292,2.537976,-0.543437, -0.162972,0.917259,0.363422,4.151183,2.579059,-0.494606, -0.816521,0.559553,0.142109,4.176065,2.636883,-0.618384, -0.719327,0.568277,-0.399538,4.104292,2.537976,-0.543437, -0.816521,0.559553,0.142109,4.176065,2.636883,-0.618384, -0.364192,0.890167,-0.2738,4.138494,2.557838,-0.652651, -0.364192,0.890167,-0.2738,4.138494,2.557838,-0.652651, -0.816521,0.559553,0.142109,4.176065,2.636883,-0.618384, -0.940255,0.335069,0.060403,4.273414,2.686575,-0.753674, -0.364192,0.890167,-0.2738,4.138494,2.557838,-0.652651, -0.940255,0.335069,0.060403,4.273414,2.686575,-0.753674, -0.353793,0.870619,-0.341838,4.235494,2.636171,-0.803613, -0.353793,0.870619,-0.341838,4.235494,2.636171,-0.803613, -0.940255,0.335069,0.060403,4.273414,2.686575,-0.753674, -0.900694,0.426849,-0.080936,4.354196,2.711836,-0.826545, -0.353793,0.870619,-0.341838,4.235494,2.636171,-0.803613, -0.900694,0.426849,-0.080936,4.354196,2.711836,-0.826545, -0.718934,0.608496,-0.335955,4.342998,2.664049,-0.904347, -0.718934,0.608496,-0.335955,4.342998,2.664049,-0.904347, -0.900694,0.426849,-0.080936,4.354196,2.711836,-0.826545, -0.758791,0.646991,0.075091,4.462368,2.725999,-0.882675, -0.718934,0.608496,-0.335955,4.342998,2.664049,-0.904347, -0.758791,0.646991,0.075091,4.462368,2.725999,-0.882675, -0.929249,-0.009269,-0.369337,4.460786,2.695616,-0.949972, 0.267121,-0.895396,-0.356249,4.636909,2.750501,-0.856859, -0.53682,-0.608254,-0.58468,4.719171,2.751091,-0.865965, -0.47673,0.840923,0.25608,4.735445,2.749285,-0.940329, 0.267121,-0.895396,-0.356249,4.636909,2.750501,-0.856859, -0.47673,0.840923,0.25608,4.735445,2.749285,-0.940329, -0.31499,0.894135,0.318282,4.616626,2.749486,-0.939333, -0.724543,-0.128977,-0.677054,4.801436,2.750224,-0.858918, -0.145585,0.915338,0.375448,4.827733,2.75439,-0.905049, -0.47673,0.840923,0.25608,4.735445,2.749285,-0.940329, -0.724543,-0.128977,-0.677054,4.801436,2.750224,-0.858918, -0.47673,0.840923,0.25608,4.735445,2.749285,-0.940329, -0.53682,-0.608254,-0.58468,4.719171,2.751091,-0.865965, -0.145585,0.915338,0.375448,4.827733,2.75439,-0.905049, -0.724543,-0.128977,-0.677054,4.801436,2.750224,-0.858918, -0.86136,-0.239794,-0.447836,5.096148,2.75972,-0.774729, -0.758791,0.646991,0.075091,4.462368,2.725999,-0.882675, -0.31499,0.894135,0.318282,4.616626,2.749486,-0.939333, -0.144656,0.947613,-0.284787,4.6248,2.708372,-0.989445, -0.758791,0.646991,0.075091,4.462368,2.725999,-0.882675, -0.144656,0.947613,-0.284787,4.6248,2.708372,-0.989445, -0.929249,-0.009269,-0.369337,4.460786,2.695616,-0.949972, -0.31499,0.894135,0.318282,4.616626,2.749486,-0.939333, -0.47673,0.840923,0.25608,4.735445,2.749285,-0.940329, 0.197027,0.937222,-0.287742,4.753015,2.699695,-0.973279, -0.31499,0.894135,0.318282,4.616626,2.749486,-0.939333, 0.197027,0.937222,-0.287742,4.753015,2.699695,-0.973279, -0.144656,0.947613,-0.284787,4.6248,2.708372,-0.989445, 0.225135,0.965893,-0.127928,4.863709,2.722151,-0.93666, 0.197027,0.937222,-0.287742,4.753015,2.699695,-0.973279, -0.47673,0.840923,0.25608,4.735445,2.749285,-0.940329, 0.225135,0.965893,-0.127928,4.863709,2.722151,-0.93666, -0.47673,0.840923,0.25608,4.735445,2.749285,-0.940329, -0.145585,0.915338,0.375448,4.827733,2.75439,-0.905049, 0.225135,0.965893,-0.127928,4.863709,2.722151,-0.93666, -0.145585,0.915338,0.375448,4.827733,2.75439,-0.905049, -0.86136,-0.239794,-0.447836,5.096148,2.75972,-0.774729, 0.05537,0.916343,-0.396546,4.854957,2.660227,-0.92431, 0.225135,0.965893,-0.127928,4.863709,2.722151,-0.93666, -0.86136,-0.239794,-0.447836,5.096148,2.75972,-0.774729, -0.376273,-0.14016,-0.915846,4.821336,2.621498,-0.789636, -0.395723,0.901671,-0.174334,4.829566,2.580797,-0.821827, -0.86136,-0.239794,-0.447836,5.096148,2.75972,-0.774729, -0.395723,0.901671,-0.174334,4.829566,2.580797,-0.821827, -0.476949,0.871028,-0.117606,4.856249,2.593812,-0.867067, -0.86136,-0.239794,-0.447836,5.096148,2.75972,-0.774729, -0.877603,-0.025309,0.478719,4.344028,2.585635,0.470949, -0.130291,0.991051,0.029017,4.328606,2.563996,0.343892, -0.904972,-0.026555,0.424641,4.209941,2.600612,0.337597, -0.877603,-0.025309,0.478719,4.344028,2.585635,0.470949, -0.904972,-0.026555,0.424641,4.209941,2.600612,0.337597, -0.778386,0.466325,0.420305,4.22473,2.624525,0.491916, 0.197027,0.937222,0.287741,4.407729,2.53164,0.486692, -0.501953,0.842502,0.195534,4.410844,2.500167,0.351972, -0.130291,0.991051,0.029017,4.328606,2.563996,0.343892, 0.197027,0.937222,0.287741,4.407729,2.53164,0.486692, -0.130291,0.991051,0.029017,4.328606,2.563996,0.343892, -0.877603,-0.025309,0.478719,4.344028,2.585635,0.470949, 0.223577,0.97296,-0.057987,4.359483,2.615839,0.596817, -0.877603,-0.025309,0.478719,4.344028,2.585635,0.470949, -0.778386,0.466325,0.420305,4.22473,2.624525,0.491916, 0.223577,0.97296,-0.057987,4.359483,2.615839,0.596817, -0.778386,0.466325,0.420305,4.22473,2.624525,0.491916, 0.225135,0.965893,0.127928,4.277169,2.652435,0.591369, -0.247355,0.948391,-0.198417,4.423033,2.561337,0.603562, 0.197027,0.937222,0.287741,4.407729,2.53164,0.486692, -0.877603,-0.025309,0.478719,4.344028,2.585635,0.470949, -0.247355,0.948391,-0.198417,4.423033,2.561337,0.603562, -0.877603,-0.025309,0.478719,4.344028,2.585635,0.470949, 0.223577,0.97296,-0.057987,4.359483,2.615839,0.596817, -0.860595,0.405543,0.308077,4.411541,2.663824,0.713132, 0.223577,0.97296,-0.057987,4.359483,2.615839,0.596817, 0.225135,0.965893,0.127928,4.277169,2.652435,0.591369, -0.860595,0.405543,0.308077,4.411541,2.663824,0.713132, 0.225135,0.965893,0.127928,4.277169,2.652435,0.591369, -0.671788,0.737297,0.07138,4.35668,2.682996,0.71905, -0.162972,0.917259,-0.363422,4.47609,2.606654,0.692301, -0.247355,0.948391,-0.198417,4.423033,2.561337,0.603562, 0.223577,0.97296,-0.057987,4.359483,2.615839,0.596817, -0.162972,0.917259,-0.363422,4.47609,2.606654,0.692301, 0.223577,0.97296,-0.057987,4.359483,2.615839,0.596817, -0.860595,0.405543,0.308077,4.411541,2.663824,0.713132, -0.758791,0.646991,-0.075091,4.465268,2.695425,0.757267, -0.860595,0.405543,0.308077,4.411541,2.663824,0.713132, -0.671788,0.737297,0.07138,4.35668,2.682996,0.71905, -0.758791,0.646991,-0.075091,4.465268,2.695425,0.757267, -0.671788,0.737297,0.07138,4.35668,2.682996,0.71905, -0.31499,0.894135,-0.318282,4.418954,2.707401,0.782531, -0.758791,0.646991,-0.075091,4.465268,2.695425,0.757267, -0.900694,0.426849,0.080936,4.520603,2.639162,0.745542, -0.162972,0.917259,-0.363422,4.47609,2.606654,0.692301, -0.758791,0.646991,-0.075091,4.465268,2.695425,0.757267, -0.162972,0.917259,-0.363422,4.47609,2.606654,0.692301, -0.860595,0.405543,0.308077,4.411541,2.663824,0.713132, -0.816521,0.559553,-0.142109,4.546655,2.709095,0.80378, -0.758791,0.646991,-0.075091,4.465268,2.695425,0.757267, -0.31499,0.894135,-0.318282,4.418954,2.707401,0.782531, -0.816521,0.559553,-0.142109,4.546655,2.709095,0.80378, -0.31499,0.894135,-0.318282,4.418954,2.707401,0.782531, -0.940256,0.335069,-0.060403,4.509555,2.719807,0.819972, -0.816521,0.559553,-0.142109,4.546655,2.709095,0.80378, -0.683788,0.700764,-0.203383,4.574545,2.669863,0.780363, -0.900694,0.426849,0.080936,4.520603,2.639162,0.745542, -0.816521,0.559553,-0.142109,4.546655,2.709095,0.80378, -0.900694,0.426849,0.080936,4.520603,2.639162,0.745542, -0.758791,0.646991,-0.075091,4.465268,2.695425,0.757267, -0.476729,0.840923,-0.25608,4.44385,2.449921,0.495432, -0.849668,0.488771,-0.197904,4.474318,2.418432,0.361347, -0.501953,0.842502,0.195534,4.410844,2.500167,0.351972, -0.476729,0.840923,-0.25608,4.44385,2.449921,0.495432, -0.501953,0.842502,0.195534,4.410844,2.500167,0.351972, 0.197027,0.937222,0.287741,4.407729,2.53164,0.486692, -0.145585,0.915338,-0.375448,4.44076,2.490353,0.629287, -0.476729,0.840923,-0.25608,4.44385,2.449921,0.495432, 0.197027,0.937222,0.287741,4.407729,2.53164,0.486692, -0.145585,0.915338,-0.375448,4.44076,2.490353,0.629287, 0.197027,0.937222,0.287741,4.407729,2.53164,0.486692, -0.247355,0.948391,-0.198417,4.423033,2.561337,0.603562, -0.210882,0.942026,-0.260988,4.484667,2.534451,0.708888, -0.145585,0.915338,-0.375448,4.44076,2.490353,0.629287, -0.247355,0.948391,-0.198417,4.423033,2.561337,0.603562, -0.210882,0.942026,-0.260988,4.484667,2.534451,0.708888, -0.247355,0.948391,-0.198417,4.423033,2.561337,0.603562, -0.162972,0.917259,-0.363422,4.47609,2.606654,0.692301, -0.502348,0.838173,-0.212398,4.520165,2.557971,0.762427, -0.210882,0.942026,-0.260988,4.484667,2.534451,0.708888, -0.162972,0.917259,-0.363422,4.47609,2.606654,0.692301, -0.502348,0.838173,-0.212398,4.520165,2.557971,0.762427, -0.162972,0.917259,-0.363422,4.47609,2.606654,0.692301, -0.900694,0.426849,0.080936,4.520603,2.639162,0.745542, -0.768362,0.592231,-0.242657,4.59262,2.569879,0.790452, -0.502348,0.838173,-0.212398,4.520165,2.557971,0.762427, -0.900694,0.426849,0.080936,4.520603,2.639162,0.745542, -0.768362,0.592231,-0.242657,4.59262,2.569879,0.790452, -0.900694,0.426849,0.080936,4.520603,2.639162,0.745542, -0.683788,0.700764,-0.203383,4.574545,2.669863,0.780363, -0.981668,0.173926,-0.077954,4.674691,2.598833,0.808006, -0.768362,0.592231,-0.242657,4.59262,2.569879,0.790452, -0.683788,0.700764,-0.203383,4.574545,2.669863,0.780363, -0.981668,0.173926,-0.077954,4.674691,2.598833,0.808006, -0.683788,0.700764,-0.203383,4.574545,2.669863,0.780363, -0.892748,0.392127,-0.221893,4.656565,2.680542,0.799684, -0.892748,0.392127,-0.221893,4.656565,2.680542,0.799684, -0.683788,0.700764,-0.203383,4.574545,2.669863,0.780363, -0.816521,0.559553,-0.142109,4.546655,2.709095,0.80378, -0.892748,0.392127,-0.221893,4.656565,2.680542,0.799684, -0.816521,0.559553,-0.142109,4.546655,2.709095,0.80378, -0.990661,0.056144,-0.124249,4.646703,2.728688,0.822295, -0.990661,0.056144,-0.124249,4.646703,2.728688,0.822295, -0.816521,0.559553,-0.142109,4.546655,2.709095,0.80378, -0.940256,0.335069,-0.060403,4.509555,2.719807,0.819972, -0.990661,0.056144,-0.124249,4.646703,2.728688,0.822295, -0.940256,0.335069,-0.060403,4.509555,2.719807,0.819972, -0.894795,0.444359,-0.043442,4.636909,2.750501,0.856859, -0.984655,0.15519,0.07981,4.729447,2.606204,0.807513, -0.981668,0.173926,-0.077954,4.674691,2.598833,0.808006, -0.892748,0.392127,-0.221893,4.656565,2.680542,0.799684, -0.984655,0.15519,0.07981,4.729447,2.606204,0.807513, -0.892748,0.392127,-0.221893,4.656565,2.680542,0.799684, -0.941564,0.056551,0.332054,4.748031,2.683805,0.800044, -0.941564,0.056551,0.332054,4.748031,2.683805,0.800044, -0.892748,0.392127,-0.221893,4.656565,2.680542,0.799684, -0.990661,0.056144,-0.124249,4.646703,2.728688,0.822295, -0.941564,0.056551,0.332054,4.748031,2.683805,0.800044, -0.990661,0.056144,-0.124249,4.646703,2.728688,0.822295, -0.978317,0.206989,-0.00716,4.728931,2.721892,0.832625, -0.978317,0.206989,-0.00716,4.728931,2.721892,0.832625, -0.990661,0.056144,-0.124249,4.646703,2.728688,0.822295, -0.894795,0.444359,-0.043442,4.636909,2.750501,0.856859, -0.978317,0.206989,-0.00716,4.728931,2.721892,0.832625, -0.894795,0.444359,-0.043442,4.636909,2.750501,0.856859, -0.463096,-0.149333,0.873637,4.719171,2.751091,0.865965, -0.791764,-0.610494,-0.020171,4.821336,2.621498,0.789636, -0.984655,0.15519,0.07981,4.729447,2.606204,0.807513, -0.941564,0.056551,0.332054,4.748031,2.683805,0.800044, -0.791764,-0.610494,-0.020171,4.821336,2.621498,0.789636, -0.941564,0.056551,0.332054,4.748031,2.683805,0.800044, -0.64155,-0.578509,0.503727,4.821325,2.691794,0.791887, -0.64155,-0.578509,0.503727,4.821325,2.691794,0.791887, -0.941564,0.056551,0.332054,4.748031,2.683805,0.800044, -0.978317,0.206989,-0.00716,4.728931,2.721892,0.832625, -0.64155,-0.578509,0.503727,4.821325,2.691794,0.791887, -0.978317,0.206989,-0.00716,4.728931,2.721892,0.832625, -0.832539,-0.5495,0.070196,4.811798,2.72868,0.815406, -0.862876,-0.450622,0.228877,4.801436,2.750224,0.858918, -0.832539,-0.5495,0.070196,4.811798,2.72868,0.815406, -0.978317,0.206989,-0.00716,4.728931,2.721892,0.832625, -0.862876,-0.450622,0.228877,4.801436,2.750224,0.858918, -0.978317,0.206989,-0.00716,4.728931,2.721892,0.832625, -0.463096,-0.149333,0.873637,4.719171,2.751091,0.865965, -0.832539,-0.5495,0.070196,4.811798,2.72868,0.815406, -0.862876,-0.450622,0.228877,4.801436,2.750224,0.858918, -0.916647,-0.2944,0.270344,5.096148,2.75972,0.774729, -0.64155,-0.578509,0.503727,4.821325,2.691794,0.791887, -0.832539,-0.5495,0.070196,4.811798,2.72868,0.815406, -0.916647,-0.2944,0.270344,5.096148,2.75972,0.774729, -0.791764,-0.610494,-0.020171,4.821336,2.621498,0.789636, -0.64155,-0.578509,0.503727,4.821325,2.691794,0.791887, -0.916647,-0.2944,0.270344,5.096148,2.75972,0.774729, 0.231006,-0.859096,0.456717,4.472349,2.325133,0.443764, -0.849668,0.488771,-0.197904,4.474318,2.418432,0.361347, -0.476729,0.840923,-0.25608,4.44385,2.449921,0.495432, 0.231006,-0.859096,0.456717,4.472349,2.325133,0.443764, -0.476729,0.840923,-0.25608,4.44385,2.449921,0.495432, -0.975013,-0.179566,0.130791,4.442912,2.343263,0.53322, -0.975013,-0.179566,0.130791,4.442912,2.343263,0.53322, -0.476729,0.840923,-0.25608,4.44385,2.449921,0.495432, -0.145585,0.915338,-0.375448,4.44076,2.490353,0.629287, -0.975013,-0.179566,0.130791,4.442912,2.343263,0.53322, -0.145585,0.915338,-0.375448,4.44076,2.490353,0.629287, -0.963659,-0.230665,0.134738,4.440713,2.398472,0.629128, -0.990956,-0.062739,0.118613,4.474625,2.465214,0.75189, -0.963659,-0.230665,0.134738,4.440713,2.398472,0.629128, -0.145585,0.915338,-0.375448,4.44076,2.490353,0.629287, -0.990956,-0.062739,0.118613,4.474625,2.465214,0.75189, -0.145585,0.915338,-0.375448,4.44076,2.490353,0.629287, -0.210882,0.942026,-0.260988,4.484667,2.534451,0.708888, -0.473779,-0.24744,0.845167,4.32063,2.385528,0.682583, -0.938303,-0.3372,0.076703,4.314039,2.32946,0.57751, -0.975013,-0.179566,0.130791,4.442912,2.343263,0.53322, -0.473779,-0.24744,0.845167,4.32063,2.385528,0.682583, -0.975013,-0.179566,0.130791,4.442912,2.343263,0.53322, -0.963659,-0.230665,0.134738,4.440713,2.398472,0.629128, -0.713872,-0.610821,0.342469,4.296769,2.260422,0.528796, 0.231006,-0.859096,0.456717,4.472349,2.325133,0.443764, -0.975013,-0.179566,0.130791,4.442912,2.343263,0.53322, -0.713872,-0.610821,0.342469,4.296769,2.260422,0.528796, -0.975013,-0.179566,0.130791,4.442912,2.343263,0.53322, -0.938303,-0.3372,0.076703,4.314039,2.32946,0.57751, -0.719395,-0.61545,0.322011,4.382053,2.433474,0.798757, -0.473779,-0.24744,0.845167,4.32063,2.385528,0.682583, -0.963659,-0.230665,0.134738,4.440713,2.398472,0.629128, -0.719395,-0.61545,0.322011,4.382053,2.433474,0.798757, -0.963659,-0.230665,0.134738,4.440713,2.398472,0.629128, -0.990956,-0.062739,0.118613,4.474625,2.465214,0.75189, -0.841909,-0.49598,0.212588,4.538177,2.513353,0.776566, -0.990956,-0.062739,0.118613,4.474625,2.465214,0.75189, -0.210882,0.942026,-0.260988,4.484667,2.534451,0.708888, -0.841909,-0.49598,0.212588,4.538177,2.513353,0.776566, -0.210882,0.942026,-0.260988,4.484667,2.534451,0.708888, -0.502348,0.838173,-0.212398,4.520165,2.557971,0.762427, 0.760119,-0.003927,0.649772,4.444739,2.475795,0.860515, -0.719395,-0.61545,0.322011,4.382053,2.433474,0.798757, -0.990956,-0.062739,0.118613,4.474625,2.465214,0.75189, 0.760119,-0.003927,0.649772,4.444739,2.475795,0.860515, -0.990956,-0.062739,0.118613,4.474625,2.465214,0.75189, -0.841909,-0.49598,0.212588,4.538177,2.513353,0.776566, 0.911709,-0.064353,0.405764,4.601515,2.533324,0.794193, -0.841909,-0.49598,0.212588,4.538177,2.513353,0.776566, -0.502348,0.838173,-0.212398,4.520165,2.557971,0.762427, 0.911709,-0.064353,0.405764,4.601515,2.533324,0.794193, -0.502348,0.838173,-0.212398,4.520165,2.557971,0.762427, -0.768362,0.592231,-0.242657,4.59262,2.569879,0.790452, 0.3335,0.232683,0.913584,4.554459,2.511417,0.850571, 0.760119,-0.003927,0.649772,4.444739,2.475795,0.860515, -0.841909,-0.49598,0.212588,4.538177,2.513353,0.776566, 0.3335,0.232683,0.913584,4.554459,2.511417,0.850571, -0.841909,-0.49598,0.212588,4.538177,2.513353,0.776566, 0.911709,-0.064353,0.405764,4.601515,2.533324,0.794193, 0.245858,0.150988,0.957474,4.683344,2.554221,0.821927, 0.911709,-0.064353,0.405764,4.601515,2.533324,0.794193, -0.768362,0.592231,-0.242657,4.59262,2.569879,0.790452, 0.245858,0.150988,0.957474,4.683344,2.554221,0.821927, -0.768362,0.592231,-0.242657,4.59262,2.569879,0.790452, -0.981668,0.173926,-0.077954,4.674691,2.598833,0.808006, 0.895851,0.326389,0.301532,4.681847,2.551036,0.886235, 0.3335,0.232683,0.913584,4.554459,2.511417,0.850571, 0.911709,-0.064353,0.405764,4.601515,2.533324,0.794193, 0.895851,0.326389,0.301532,4.681847,2.551036,0.886235, 0.911709,-0.064353,0.405764,4.601515,2.533324,0.794193, 0.245858,0.150988,0.957474,4.683344,2.554221,0.821927, -0.279333,0.256918,0.925184,4.755192,2.568818,0.876311, 0.895851,0.326389,0.301532,4.681847,2.551036,0.886235, 0.245858,0.150988,0.957474,4.683344,2.554221,0.821927, -0.279333,0.256918,0.925184,4.755192,2.568818,0.876311, 0.245858,0.150988,0.957474,4.683344,2.554221,0.821927, -0.396467,0.225967,0.889805,4.737893,2.564648,0.830389, -0.274209,-0.939323,-0.20611,4.856249,2.593812,0.867067, -0.279333,0.256918,0.925184,4.755192,2.568818,0.876311, -0.396467,0.225967,0.889805,4.737893,2.564648,0.830389, -0.274209,-0.939323,-0.20611,4.856249,2.593812,0.867067, -0.396467,0.225967,0.889805,4.737893,2.564648,0.830389, -0.274209,-0.939323,-0.20611,4.829566,2.580797,0.821827, -0.396467,0.225967,0.889805,4.737893,2.564648,0.830389, 0.245858,0.150988,0.957474,4.683344,2.554221,0.821927, -0.981668,0.173926,-0.077954,4.674691,2.598833,0.808006, -0.396467,0.225967,0.889805,4.737893,2.564648,0.830389, -0.981668,0.173926,-0.077954,4.674691,2.598833,0.808006, -0.984655,0.15519,0.07981,4.729447,2.606204,0.807513, -0.274209,-0.939323,-0.20611,4.829566,2.580797,0.821827, -0.396467,0.225967,0.889805,4.737893,2.564648,0.830389, -0.984655,0.15519,0.07981,4.729447,2.606204,0.807513, -0.274209,-0.939323,-0.20611,4.829566,2.580797,0.821827, -0.984655,0.15519,0.07981,4.729447,2.606204,0.807513, -0.791764,-0.610494,-0.020171,4.821336,2.621498,0.789636, -0.21443,-0.974064,0.072245,4.497719,2.54748,0.937659, 0.3335,0.232683,0.913584,4.554459,2.511417,0.850571, 0.895851,0.326389,0.301532,4.681847,2.551036,0.886235, -0.21443,-0.974064,0.072245,4.497719,2.54748,0.937659, 0.895851,0.326389,0.301532,4.681847,2.551036,0.886235, -0.21443,-0.974064,0.072245,4.662221,2.556346,0.940618, -0.279333,0.256918,0.925184,4.755192,2.568818,0.876311, -0.137011,-0.928676,0.344657,4.763337,2.590834,0.929248, -0.21443,-0.974064,0.072245,4.662221,2.556346,0.940618, -0.279333,0.256918,0.925184,4.755192,2.568818,0.876311, -0.21443,-0.974064,0.072245,4.662221,2.556346,0.940618, 0.895851,0.326389,0.301532,4.681847,2.551036,0.886235, -0.137011,-0.928676,0.344657,4.763337,2.590834,0.929248, -0.279333,0.256918,0.925184,4.755192,2.568818,0.876311, -0.274209,-0.939323,-0.20611,4.856249,2.593812,0.867067, -0.137011,-0.928676,0.344657,4.763337,2.590834,0.929248, -0.274209,-0.939323,-0.20611,4.856249,2.593812,0.867067, -0.137011,-0.928676,0.344657,4.883022,2.613658,0.893163, -0.21443,-0.974064,0.072245,4.497719,2.54748,0.937659, -0.250481,-0.945625,-0.207493,4.352603,2.524888,0.890532, 0.760119,-0.003927,0.649772,4.444739,2.475795,0.860515, -0.21443,-0.974064,0.072245,4.497719,2.54748,0.937659, 0.760119,-0.003927,0.649772,4.444739,2.475795,0.860515, 0.3335,0.232683,0.913584,4.554459,2.511417,0.850571, -0.250481,-0.945625,-0.207493,4.262798,2.490674,0.818316, -0.719395,-0.61545,0.322011,4.382053,2.433474,0.798757, 0.760119,-0.003927,0.649772,4.444739,2.475795,0.860515, -0.250481,-0.945625,-0.207493,4.262798,2.490674,0.818316, 0.760119,-0.003927,0.649772,4.444739,2.475795,0.860515, -0.250481,-0.945625,-0.207493,4.352603,2.524888,0.890532, -0.19553,-0.978064,0.071821,4.192789,2.411967,0.668016, -0.473779,-0.24744,0.845167,4.32063,2.385528,0.682583, -0.719395,-0.61545,0.322011,4.382053,2.433474,0.798757, -0.19553,-0.978064,0.071821,4.192789,2.411967,0.668016, -0.719395,-0.61545,0.322011,4.382053,2.433474,0.798757, -0.250481,-0.945625,-0.207493,4.262798,2.490674,0.818316, -0.19553,-0.978064,0.071821,4.193959,2.370476,0.616705, -0.938303,-0.3372,0.076703,4.314039,2.32946,0.57751, -0.473779,-0.24744,0.845167,4.32063,2.385528,0.682583, -0.19553,-0.978064,0.071821,4.193959,2.370476,0.616705, -0.473779,-0.24744,0.845167,4.32063,2.385528,0.682583, -0.19553,-0.978064,0.071821,4.192789,2.411967,0.668016, -0.713872,-0.610821,0.342469,4.296769,2.260422,0.528796, -0.938303,-0.3372,0.076703,4.314039,2.32946,0.57751, -0.19553,-0.978064,0.071821,4.193959,2.370476,0.616705, -0.713872,-0.610821,0.342469,4.296769,2.260422,0.528796, -0.19553,-0.978064,0.071821,4.193959,2.370476,0.616705, -0.124529,-0.930217,0.345238,4.113935,2.334131,0.526471, -0.274209,-0.939323,-0.20611,4.856249,2.593812,0.867067, -0.916647,-0.2944,0.270344,5.096148,2.75972,0.774729, -0.137011,-0.928676,0.344657,4.883022,2.613658,0.893163, -0.137011,-0.928676,0.344657,4.883022,2.613658,0.893163, 0.186393,-0.974436,-0.125429,4.854957,2.660227,0.92431, -0.124529,-0.930217,0.345238,4.735139,2.645464,0.95089, -0.137011,-0.928676,0.344657,4.883022,2.613658,0.893163, -0.124529,-0.930217,0.345238,4.735139,2.645464,0.95089, -0.137011,-0.928676,0.344657,4.763337,2.590834,0.929248, -0.137011,-0.928676,0.344657,4.763337,2.590834,0.929248, -0.124529,-0.930217,0.345238,4.735139,2.645464,0.95089, 0.361848,-0.921221,-0.142892,4.615662,2.63387,0.977986, -0.137011,-0.928676,0.344657,4.763337,2.590834,0.929248, 0.361848,-0.921221,-0.142892,4.615662,2.63387,0.977986, -0.21443,-0.974064,0.072245,4.662221,2.556346,0.940618, -0.21443,-0.974064,0.072245,4.662221,2.556346,0.940618, 0.361848,-0.921221,-0.142892,4.615662,2.63387,0.977986, -0.199236,-0.974239,-0.105658,4.460582,2.622875,0.957002, -0.21443,-0.974064,0.072245,4.662221,2.556346,0.940618, -0.199236,-0.974239,-0.105658,4.460582,2.622875,0.957002, -0.21443,-0.974064,0.072245,4.497719,2.54748,0.937659, -0.21443,-0.974064,0.072245,4.497719,2.54748,0.937659, -0.199236,-0.974239,-0.105658,4.460582,2.622875,0.957002, -0.942162,-0.29295,-0.162822,4.343217,2.589542,0.893106, -0.21443,-0.974064,0.072245,4.497719,2.54748,0.937659, -0.942162,-0.29295,-0.162822,4.343217,2.589542,0.893106, -0.250481,-0.945625,-0.207493,4.352603,2.524888,0.890532, -0.250481,-0.945625,-0.207493,4.352603,2.524888,0.890532, -0.942162,-0.29295,-0.162822,4.343217,2.589542,0.893106, -0.982438,-0.108835,-0.151559,4.244622,2.554467,0.811726, -0.250481,-0.945625,-0.207493,4.352603,2.524888,0.890532, -0.982438,-0.108835,-0.151559,4.244622,2.554467,0.811726, -0.250481,-0.945625,-0.207493,4.262798,2.490674,0.818316, -0.250481,-0.945625,-0.207493,4.262798,2.490674,0.818316, -0.982438,-0.108835,-0.151559,4.244622,2.554467,0.811726, -0.668254,-0.729938,-0.143622,4.138687,2.474013,0.642311, -0.250481,-0.945625,-0.207493,4.262798,2.490674,0.818316, -0.668254,-0.729938,-0.143622,4.138687,2.474013,0.642311, -0.19553,-0.978064,0.071821,4.192789,2.411967,0.668016, -0.916647,-0.2944,0.270344,5.096148,2.75972,0.774729, 0.186393,-0.974436,-0.125429,4.854957,2.660227,0.92431, -0.137011,-0.928676,0.344657,4.883022,2.613658,0.893163, -0.19553,-0.978064,0.071821,4.193959,2.370476,0.616705, -0.19553,-0.978064,0.071821,4.192789,2.411967,0.668016, -0.668254,-0.729938,-0.143622,4.138687,2.474013,0.642311, -0.19553,-0.978064,0.071821,4.193959,2.370476,0.616705, -0.668254,-0.729938,-0.143622,4.138687,2.474013,0.642311, -0.973393,-0.128296,0.18986,4.121994,2.458034,0.570029, -0.138401,-0.989733,0.035683,4.07851,2.41181,0.472193, -0.124529,-0.930217,0.345238,4.113935,2.334131,0.526471, -0.19553,-0.978064,0.071821,4.193959,2.370476,0.616705, -0.138401,-0.989733,0.035683,4.07851,2.41181,0.472193, -0.19553,-0.978064,0.071821,4.193959,2.370476,0.616705, -0.973393,-0.128296,0.18986,4.121994,2.458034,0.570029, -0.942162,-0.29295,-0.162822,4.343217,2.589542,0.893106, -0.927379,-0.346541,0.14099,4.342998,2.664049,0.904347, -0.601432,-0.796051,0.067694,4.235494,2.636171,0.803613, -0.942162,-0.29295,-0.162822,4.343217,2.589542,0.893106, -0.601432,-0.796051,0.067694,4.235494,2.636171,0.803613, -0.982438,-0.108835,-0.151559,4.244622,2.554467,0.811726, -0.199236,-0.974239,-0.105658,4.460582,2.622875,0.957002, -0.850433,-0.132742,0.509061,4.460786,2.695616,0.949972, -0.927379,-0.346541,0.14099,4.342998,2.664049,0.904347, -0.199236,-0.974239,-0.105658,4.460582,2.622875,0.957002, -0.927379,-0.346541,0.14099,4.342998,2.664049,0.904347, -0.942162,-0.29295,-0.162822,4.343217,2.589542,0.893106, 0.361848,-0.921221,-0.142892,4.615662,2.63387,0.977986, -0.822149,-0.367113,0.435086,4.6248,2.708372,0.989445, -0.850433,-0.132742,0.509061,4.460786,2.695616,0.949972, 0.361848,-0.921221,-0.142892,4.615662,2.63387,0.977986, -0.850433,-0.132742,0.509061,4.460786,2.695616,0.949972, -0.199236,-0.974239,-0.105658,4.460582,2.622875,0.957002, -0.982438,-0.108835,-0.151559,4.244622,2.554467,0.811726, -0.601432,-0.796051,0.067694,4.235494,2.636171,0.803613, -0.501842,-0.819591,0.27645,4.138494,2.557838,0.652651, -0.982438,-0.108835,-0.151559,4.244622,2.554467,0.811726, -0.501842,-0.819591,0.27645,4.138494,2.557838,0.652651, -0.668254,-0.729938,-0.143622,4.138687,2.474013,0.642311, -0.973393,-0.128296,0.18986,4.121994,2.458034,0.570029, -0.668254,-0.729938,-0.143622,4.138687,2.474013,0.642311, -0.501842,-0.819591,0.27645,4.138494,2.557838,0.652651, -0.973393,-0.128296,0.18986,4.121994,2.458034,0.570029, -0.501842,-0.819591,0.27645,4.138494,2.557838,0.652651, -0.075112,-0.981815,0.174346,4.104292,2.537976,0.543437, -0.138401,-0.989733,0.035683,4.07851,2.41181,0.472193, -0.973393,-0.128296,0.18986,4.121994,2.458034,0.570029, -0.075112,-0.981815,0.174346,4.104292,2.537976,0.543437, -0.138401,-0.989733,0.035683,4.07851,2.41181,0.472193, -0.075112,-0.981815,0.174346,4.104292,2.537976,0.543437, 0.207048,-0.965263,0.159371,4.088356,2.510913,0.453793, 0.361848,-0.921221,-0.142892,4.615662,2.63387,0.977986, -0.124529,-0.930217,0.345238,4.735139,2.645464,0.95089, 0.846486,-0.14409,-0.512541,4.753015,2.699695,0.973279, 0.361848,-0.921221,-0.142892,4.615662,2.63387,0.977986, 0.846486,-0.14409,-0.512541,4.753015,2.699695,0.973279, -0.822149,-0.367113,0.435086,4.6248,2.708372,0.989445, 0.186393,-0.974436,-0.125429,4.854957,2.660227,0.92431, 0.728229,-0.106722,-0.676973,4.863709,2.722151,0.93666, 0.846486,-0.14409,-0.512541,4.753015,2.699695,0.973279, 0.186393,-0.974436,-0.125429,4.854957,2.660227,0.92431, 0.846486,-0.14409,-0.512541,4.753015,2.699695,0.973279, -0.124529,-0.930217,0.345238,4.735139,2.645464,0.95089, -0.904972,-0.026555,0.424641,4.209941,2.600612,0.337597, 0.576293,-0.081905,-0.813128,4.117367,2.568514,0.3845, 0.42646,-0.865041,0.264264,4.151183,2.579059,0.494606, -0.904972,-0.026555,0.424641,4.209941,2.600612,0.337597, 0.42646,-0.865041,0.264264,4.151183,2.579059,0.494606, -0.778386,0.466325,0.420305,4.22473,2.624525,0.491916, -0.940256,0.335069,-0.060403,4.509555,2.719807,0.819972, -0.266521,-0.953514,0.14063,4.462368,2.725999,0.882675, 0.078387,-0.886884,0.455294,4.616626,2.749486,0.939333, -0.940256,0.335069,-0.060403,4.509555,2.719807,0.819972, 0.078387,-0.886884,0.455294,4.616626,2.749486,0.939333, -0.894795,0.444359,-0.043442,4.636909,2.750501,0.856859, -0.31499,0.894135,-0.318282,4.418954,2.707401,0.782531, -0.393317,-0.870591,-0.295589,4.354196,2.711836,0.826545, -0.266521,-0.953514,0.14063,4.462368,2.725999,0.882675, -0.31499,0.894135,-0.318282,4.418954,2.707401,0.782531, -0.266521,-0.953514,0.14063,4.462368,2.725999,0.882675, -0.940256,0.335069,-0.060403,4.509555,2.719807,0.819972, -0.671788,0.737297,0.07138,4.35668,2.682996,0.71905, -0.180888,-0.792822,-0.58199,4.273414,2.686575,0.753674, -0.393317,-0.870591,-0.295589,4.354196,2.711836,0.826545, -0.671788,0.737297,0.07138,4.35668,2.682996,0.71905, -0.393317,-0.870591,-0.295589,4.354196,2.711836,0.826545, -0.31499,0.894135,-0.318282,4.418954,2.707401,0.782531, 0.333262,-0.530645,-0.779328,4.176065,2.636883,0.618384, 0.225135,0.965893,0.127928,4.277169,2.652435,0.591369, -0.778386,0.466325,0.420305,4.22473,2.624525,0.491916, 0.333262,-0.530645,-0.779328,4.176065,2.636883,0.618384, -0.778386,0.466325,0.420305,4.22473,2.624525,0.491916, 0.42646,-0.865041,0.264264,4.151183,2.579059,0.494606, -0.075112,-0.981815,0.174346,4.104292,2.537976,0.543437, 0.42646,-0.865041,0.264264,4.151183,2.579059,0.494606, 0.576293,-0.081905,-0.813128,4.117367,2.568514,0.3845, -0.075112,-0.981815,0.174346,4.104292,2.537976,0.543437, 0.576293,-0.081905,-0.813128,4.117367,2.568514,0.3845, 0.207048,-0.965263,0.159371,4.088356,2.510913,0.453793, -0.180888,-0.792822,-0.58199,4.273414,2.686575,0.753674, -0.671788,0.737297,0.07138,4.35668,2.682996,0.71905, 0.225135,0.965893,0.127928,4.277169,2.652435,0.591369, -0.180888,-0.792822,-0.58199,4.273414,2.686575,0.753674, 0.225135,0.965893,0.127928,4.277169,2.652435,0.591369, 0.333262,-0.530645,-0.779328,4.176065,2.636883,0.618384, -0.501842,-0.819591,0.27645,4.138494,2.557838,0.652651, 0.333262,-0.530645,-0.779328,4.176065,2.636883,0.618384, 0.42646,-0.865041,0.264264,4.151183,2.579059,0.494606, -0.501842,-0.819591,0.27645,4.138494,2.557838,0.652651, 0.42646,-0.865041,0.264264,4.151183,2.579059,0.494606, -0.075112,-0.981815,0.174346,4.104292,2.537976,0.543437, -0.601432,-0.796051,0.067694,4.235494,2.636171,0.803613, -0.180888,-0.792822,-0.58199,4.273414,2.686575,0.753674, 0.333262,-0.530645,-0.779328,4.176065,2.636883,0.618384, -0.601432,-0.796051,0.067694,4.235494,2.636171,0.803613, 0.333262,-0.530645,-0.779328,4.176065,2.636883,0.618384, -0.501842,-0.819591,0.27645,4.138494,2.557838,0.652651, -0.927379,-0.346541,0.14099,4.342998,2.664049,0.904347, -0.393317,-0.870591,-0.295589,4.354196,2.711836,0.826545, -0.180888,-0.792822,-0.58199,4.273414,2.686575,0.753674, -0.927379,-0.346541,0.14099,4.342998,2.664049,0.904347, -0.180888,-0.792822,-0.58199,4.273414,2.686575,0.753674, -0.601432,-0.796051,0.067694,4.235494,2.636171,0.803613, -0.850433,-0.132742,0.509061,4.460786,2.695616,0.949972, -0.266521,-0.953514,0.14063,4.462368,2.725999,0.882675, -0.393317,-0.870591,-0.295589,4.354196,2.711836,0.826545, -0.850433,-0.132742,0.509061,4.460786,2.695616,0.949972, -0.393317,-0.870591,-0.295589,4.354196,2.711836,0.826545, -0.927379,-0.346541,0.14099,4.342998,2.664049,0.904347, 0.078387,-0.886884,0.455294,4.616626,2.749486,0.939333, 0.136995,-0.968757,-0.206741,4.735445,2.749285,0.940329, -0.463096,-0.149333,0.873637,4.719171,2.751091,0.865965, 0.078387,-0.886884,0.455294,4.616626,2.749486,0.939333, -0.463096,-0.149333,0.873637,4.719171,2.751091,0.865965, -0.894795,0.444359,-0.043442,4.636909,2.750501,0.856859, -0.463096,-0.149333,0.873637,4.719171,2.751091,0.865965, 0.136995,-0.968757,-0.206741,4.735445,2.749285,0.940329, -0.460229,-0.015586,-0.887663,4.827733,2.75439,0.905049, -0.463096,-0.149333,0.873637,4.719171,2.751091,0.865965, -0.460229,-0.015586,-0.887663,4.827733,2.75439,0.905049, -0.862876,-0.450622,0.228877,4.801436,2.750224,0.858918, -0.916647,-0.2944,0.270344,5.096148,2.75972,0.774729, -0.862876,-0.450622,0.228877,4.801436,2.750224,0.858918, -0.460229,-0.015586,-0.887663,4.827733,2.75439,0.905049, -0.850433,-0.132742,0.509061,4.460786,2.695616,0.949972, -0.822149,-0.367113,0.435086,4.6248,2.708372,0.989445, 0.078387,-0.886884,0.455294,4.616626,2.749486,0.939333, -0.850433,-0.132742,0.509061,4.460786,2.695616,0.949972, 0.078387,-0.886884,0.455294,4.616626,2.749486,0.939333, -0.266521,-0.953514,0.14063,4.462368,2.725999,0.882675, -0.822149,-0.367113,0.435086,4.6248,2.708372,0.989445, 0.846486,-0.14409,-0.512541,4.753015,2.699695,0.973279, 0.136995,-0.968757,-0.206741,4.735445,2.749285,0.940329, -0.822149,-0.367113,0.435086,4.6248,2.708372,0.989445, 0.136995,-0.968757,-0.206741,4.735445,2.749285,0.940329, 0.078387,-0.886884,0.455294,4.616626,2.749486,0.939333, -0.460229,-0.015586,-0.887663,4.827733,2.75439,0.905049, 0.136995,-0.968757,-0.206741,4.735445,2.749285,0.940329, 0.846486,-0.14409,-0.512541,4.753015,2.699695,0.973279, -0.460229,-0.015586,-0.887663,4.827733,2.75439,0.905049, 0.846486,-0.14409,-0.512541,4.753015,2.699695,0.973279, 0.728229,-0.106722,-0.676973,4.863709,2.722151,0.93666, -0.916647,-0.2944,0.270344,5.096148,2.75972,0.774729, -0.460229,-0.015586,-0.887663,4.827733,2.75439,0.905049, 0.728229,-0.106722,-0.676973,4.863709,2.722151,0.93666, -0.916647,-0.2944,0.270344,5.096148,2.75972,0.774729, 0.728229,-0.106722,-0.676973,4.863709,2.722151,0.93666, 0.186393,-0.974436,-0.125429,4.854957,2.660227,0.92431, -0.916647,-0.2944,0.270344,5.096148,2.75972,0.774729, -0.274209,-0.939323,-0.20611,4.829566,2.580797,0.821827, -0.791764,-0.610494,-0.020171,4.821336,2.621498,0.789636, -0.916647,-0.2944,0.270344,5.096148,2.75972,0.774729, -0.274209,-0.939323,-0.20611,4.856249,2.593812,0.867067, -0.274209,-0.939323,-0.20611,4.829566,2.580797,0.821827 }; static const struct gllist frame={GL_N3F_V3F,GL_TRIANGLES,1020,data,NULL}; const struct gllist *cow_horns=&frame; xscreensaver-5.36/hacks/glx/cow_tail.c000644 000767 000024 00000065062 12701612217 017776 0ustar00jwzstaff000000 000000 #include "gllist.h" static const float data[]={ -0.54555,-0.056478,0.836173,-3.67645,-0.551317,0.077574, 0.00197,-0.021649,0.999764,-3.740631,-0.558176,0.085478, 0.000763,-0.01871,0.999825,-3.72947,-0.869371,0.096946, -0.54555,-0.056478,0.836173,-3.67645,-0.551317,0.077574, 0.000763,-0.01871,0.999825,-3.72947,-0.869371,0.096946, -0.548359,-0.017804,0.836053,-3.699784,-0.759901,0.088664, -0.548359,-0.017804,0.836053,-3.699784,-0.759901,0.088664, 0.000763,-0.01871,0.999825,-3.72947,-0.869371,0.096946, -0.530021,0.13773,0.836724,-3.697889,-0.951955,0.098793, -0.530021,0.13773,0.836724,-3.697889,-0.951955,0.098793, 0.000763,-0.01871,0.999825,-3.72947,-0.869371,0.096946, -0.004656,-0.025693,0.999659,-3.733767,-1.141917,0.111139, -0.530021,0.13773,0.836724,-3.697889,-0.951955,0.098793, -0.004656,-0.025693,0.999659,-3.733767,-1.141917,0.111139, -0.429713,0.351913,0.831567,-3.666536,-1.140372,0.078261, -0.429713,0.351913,0.831567,-3.666536,-1.140372,0.078261, -0.004656,-0.025693,0.999659,-3.733767,-1.141917,0.111139, -0.020872,-0.032587,0.999251,-3.743747,-1.367219,0.100951, -0.429713,0.351913,0.831567,-3.666536,-1.140372,0.078261, -0.020872,-0.032587,0.999251,-3.743747,-1.367219,0.100951, -0.24021,0.502412,0.830591,-3.639696,-1.242349,0.05719, -0.24021,0.502412,0.830591,-3.639696,-1.242349,0.05719, -0.020872,-0.032587,0.999251,-3.743747,-1.367219,0.100951, -0.091034,0.391629,0.915609,-3.823638,-1.557534,0.081533, -0.24021,0.502412,0.830591,-3.639696,-1.242349,0.05719, -0.091034,0.391629,0.915609,-3.823638,-1.557534,0.081533, 0.000909,0.669011,0.743252,-3.581963,-1.413947,-0.104371, 0.000909,0.669011,0.743252,-3.581963,-1.413947,-0.104371, -0.091034,0.391629,0.915609,-3.823638,-1.557534,0.081533, -0.041225,-0.030655,0.99868,-3.683069,-1.591975,-0.115233, -0.041225,-0.030655,0.99868,-3.683069,-1.591975,-0.115233, -0.091034,0.391629,0.915609,-3.823638,-1.557534,0.081533, 0.231733,0.017467,0.972623,-3.890388,-1.750102,0.017612, -0.041225,-0.030655,0.99868,-3.683069,-1.591975,-0.115233, 0.231733,0.017467,0.972623,-3.890388,-1.750102,0.017612, 0.002322,-0.058071,0.99831,-3.828485,-1.786559,-0.114095, 0.00197,-0.021649,0.999764,-3.740631,-0.558176,0.085478, 0.518386,-0.029316,0.854644,-3.778908,-0.541975,0.064258, 0.000763,-0.01871,0.999825,-3.72947,-0.869371,0.096946, 0.518386,-0.029316,0.854644,-3.778908,-0.541975,0.064258, 0.548941,0.015145,0.835724,-3.805841,-0.798961,0.099237, 0.000763,-0.01871,0.999825,-3.72947,-0.869371,0.096946, 0.000763,-0.01871,0.999825,-3.72947,-0.869371,0.096946, 0.548941,0.015145,0.835724,-3.805841,-0.798961,0.099237, -0.004656,-0.025693,0.999659,-3.733767,-1.141917,0.111139, 0.548941,0.015145,0.835724,-3.805841,-0.798961,0.099237, 0.549332,-0.018885,0.835391,-3.843256,-0.981402,0.116282, -0.004656,-0.025693,0.999659,-3.733767,-1.141917,0.111139, 0.549332,-0.018885,0.835391,-3.843256,-0.981402,0.116282, 0.516335,-0.196022,0.833651,-3.884588,-1.261469,0.148322, -0.004656,-0.025693,0.999659,-3.733767,-1.141917,0.111139, -0.004656,-0.025693,0.999659,-3.733767,-1.141917,0.111139, 0.516335,-0.196022,0.833651,-3.884588,-1.261469,0.148322, -0.020872,-0.032587,0.999251,-3.743747,-1.367219,0.100951, 0.516335,-0.196022,0.833651,-3.884588,-1.261469,0.148322, 0.368421,-0.433142,0.82259,-3.914006,-1.486854,0.149147, -0.020872,-0.032587,0.999251,-3.743747,-1.367219,0.100951, -0.020872,-0.032587,0.999251,-3.743747,-1.367219,0.100951, 0.368421,-0.433142,0.82259,-3.914006,-1.486854,0.149147, -0.091034,0.391629,0.915609,-3.823638,-1.557534,0.081533, 0.368421,-0.433142,0.82259,-3.914006,-1.486854,0.149147, 0.255239,-0.528232,0.80983,-4.015306,-1.659952,0.130331, -0.091034,0.391629,0.915609,-3.823638,-1.557534,0.081533, -0.091034,0.391629,0.915609,-3.823638,-1.557534,0.081533, 0.255239,-0.528232,0.80983,-4.015306,-1.659952,0.130331, 0.231733,0.017467,0.972623,-3.890388,-1.750102,0.017612, 0.255239,-0.528232,0.80983,-4.015306,-1.659952,0.130331, 0.791625,0.052579,0.608741,-4.107191,-1.83652,0.120149, 0.231733,0.017467,0.972623,-3.890388,-1.750102,0.017612, 0.518386,-0.029316,0.854644,-3.778908,-0.541975,0.064258, 0.875325,0.013439,0.483348,-3.818598,-0.52269,0.055572, 0.891295,0.039311,0.451717,-3.900964,-0.780883,0.091579, 0.518386,-0.029316,0.854644,-3.778908,-0.541975,0.064258, 0.891295,0.039311,0.451717,-3.900964,-0.780883,0.091579, 0.548941,0.015145,0.835724,-3.805841,-0.798961,0.099237, 0.548941,0.015145,0.835724,-3.805841,-0.798961,0.099237, 0.891295,0.039311,0.451717,-3.900964,-0.780883,0.091579, 0.892259,-0.018571,0.451141,-3.949814,-0.963797,0.140806, 0.548941,0.015145,0.835724,-3.805841,-0.798961,0.099237, 0.892259,-0.018571,0.451141,-3.949814,-0.963797,0.140806, 0.549332,-0.018885,0.835391,-3.843256,-0.981402,0.116282, 0.549332,-0.018885,0.835391,-3.843256,-0.981402,0.116282, 0.892259,-0.018571,0.451141,-3.949814,-0.963797,0.140806, 0.843461,-0.305355,0.441963,-3.974499,-1.1696,0.164243, 0.549332,-0.018885,0.835391,-3.843256,-0.981402,0.116282, 0.843461,-0.305355,0.441963,-3.974499,-1.1696,0.164243, 0.516335,-0.196022,0.833651,-3.884588,-1.261469,0.148322, 0.516335,-0.196022,0.833651,-3.884588,-1.261469,0.148322, 0.843461,-0.305355,0.441963,-3.974499,-1.1696,0.164243, 0.589229,-0.690587,0.419402,-4.018866,-1.413191,0.154149, 0.516335,-0.196022,0.833651,-3.884588,-1.261469,0.148322, 0.589229,-0.690587,0.419402,-4.018866,-1.413191,0.154149, 0.368421,-0.433142,0.82259,-3.914006,-1.486854,0.149147, 0.368421,-0.433142,0.82259,-3.914006,-1.486854,0.149147, 0.589229,-0.690587,0.419402,-4.018866,-1.413191,0.154149, 0.389217,-0.829193,0.401185,-4.154334,-1.677827,0.165852, 0.368421,-0.433142,0.82259,-3.914006,-1.486854,0.149147, 0.389217,-0.829193,0.401185,-4.154334,-1.677827,0.165852, 0.255239,-0.528232,0.80983,-4.015306,-1.659952,0.130331, 0.255239,-0.528232,0.80983,-4.015306,-1.659952,0.130331, 0.389217,-0.829193,0.401185,-4.154334,-1.677827,0.165852, 0.981696,0.042552,-0.185638,-4.207566,-1.922824,0.155104, 0.255239,-0.528232,0.80983,-4.015306,-1.659952,0.130331, 0.981696,0.042552,-0.185638,-4.207566,-1.922824,0.155104, 0.791625,0.052579,0.608741,-4.107191,-1.83652,0.120149, 0.875325,0.013439,0.483348,-3.818598,-0.52269,0.055572, 0.999006,0.044565,0.000415,-3.896204,-0.629183,0.077883, 0.839295,0.00969,-0.54359,-3.978115,-0.82344,0.09928, 0.875325,0.013439,0.483348,-3.818598,-0.52269,0.055572, 0.839295,0.00969,-0.54359,-3.978115,-0.82344,0.09928, 0.891295,0.039311,0.451717,-3.900964,-0.780883,0.091579, 0.891295,0.039311,0.451717,-3.900964,-0.780883,0.091579, 0.839295,0.00969,-0.54359,-3.978115,-0.82344,0.09928, 0.874434,0.048946,-0.48267,-4.029726,-1.043238,0.136305, 0.891295,0.039311,0.451717,-3.900964,-0.780883,0.091579, 0.874434,0.048946,-0.48267,-4.029726,-1.043238,0.136305, 0.892259,-0.018571,0.451141,-3.949814,-0.963797,0.140806, 0.892259,-0.018571,0.451141,-3.949814,-0.963797,0.140806, 0.874434,0.048946,-0.48267,-4.029726,-1.043238,0.136305, 0.843461,-0.305355,0.441963,-3.974499,-1.1696,0.164243, 0.843461,-0.305355,0.441963,-3.974499,-1.1696,0.164243, 0.874434,0.048946,-0.48267,-4.029726,-1.043238,0.136305, 0.432653,0.056559,-0.899785,-4.129295,-1.228786,0.120745, 0.843461,-0.305355,0.441963,-3.974499,-1.1696,0.164243, 0.432653,0.056559,-0.899785,-4.129295,-1.228786,0.120745, 0.589229,-0.690587,0.419402,-4.018866,-1.413191,0.154149, 0.589229,-0.690587,0.419402,-4.018866,-1.413191,0.154149, 0.432653,0.056559,-0.899785,-4.129295,-1.228786,0.120745, 0.517516,0.032105,-0.855071,-4.184154,-1.59808,0.151191, 0.589229,-0.690587,0.419402,-4.018866,-1.413191,0.154149, 0.517516,0.032105,-0.855071,-4.184154,-1.59808,0.151191, 0.389217,-0.829193,0.401185,-4.154334,-1.677827,0.165852, 0.389217,-0.829193,0.401185,-4.154334,-1.677827,0.165852, 0.517516,0.032105,-0.855071,-4.184154,-1.59808,0.151191, 0.002983,0.098874,-0.995096,-4.297769,-1.889903,0.177707, 0.389217,-0.829193,0.401185,-4.154334,-1.677827,0.165852, 0.002983,0.098874,-0.995096,-4.297769,-1.889903,0.177707, 0.981696,0.042552,-0.185638,-4.207566,-1.922824,0.155104, 0.999006,0.044565,0.000415,-3.896204,-0.629183,0.077883, 0.001234,0.013557,-0.999907,-3.932489,-0.556566,0.037354, -0.369174,0.174156,-0.912897,-4.070739,-0.947648,0.110554, 0.999006,0.044565,0.000415,-3.896204,-0.629183,0.077883, -0.369174,0.174156,-0.912897,-4.070739,-0.947648,0.110554, 0.839295,0.00969,-0.54359,-3.978115,-0.82344,0.09928, 0.839295,0.00969,-0.54359,-3.978115,-0.82344,0.09928, -0.369174,0.174156,-0.912897,-4.070739,-0.947648,0.110554, -0.516127,0.008586,-0.856469,-4.227645,-1.227895,0.069894, 0.839295,0.00969,-0.54359,-3.978115,-0.82344,0.09928, -0.516127,0.008586,-0.856469,-4.227645,-1.227895,0.069894, 0.874434,0.048946,-0.48267,-4.029726,-1.043238,0.136305, 0.874434,0.048946,-0.48267,-4.029726,-1.043238,0.136305, -0.516127,0.008586,-0.856469,-4.227645,-1.227895,0.069894, -0.822516,0.195417,-0.534116,-4.229164,-1.473093,0.11156, 0.874434,0.048946,-0.48267,-4.029726,-1.043238,0.136305, -0.822516,0.195417,-0.534116,-4.229164,-1.473093,0.11156, 0.432653,0.056559,-0.899785,-4.129295,-1.228786,0.120745, 0.432653,0.056559,-0.899785,-4.129295,-1.228786,0.120745, -0.822516,0.195417,-0.534116,-4.229164,-1.473093,0.11156, -0.874954,0.011842,-0.484061,-4.309744,-1.743848,0.150329, 0.432653,0.056559,-0.899785,-4.129295,-1.228786,0.120745, -0.874954,0.011842,-0.484061,-4.309744,-1.743848,0.150329, 0.517516,0.032105,-0.855071,-4.184154,-1.59808,0.151191, 0.517516,0.032105,-0.855071,-4.184154,-1.59808,0.151191, -0.874954,0.011842,-0.484061,-4.309744,-1.743848,0.150329, 0.924466,0.048977,0.378105,-4.405365,-1.921443,0.192978, 0.517516,0.032105,-0.855071,-4.184154,-1.59808,0.151191, 0.924466,0.048977,0.378105,-4.405365,-1.921443,0.192978, 0.002983,0.098874,-0.995096,-4.297769,-1.889903,0.177707, 0.001234,0.013557,-0.999907,-3.932489,-0.556566,0.037354, 0.728068,-0.191899,-0.658097,-3.975337,-0.554961,-0.014407, 0.313565,-0.18353,-0.931662,-4.112449,-0.875765,0.016326, 0.001234,0.013557,-0.999907,-3.932489,-0.556566,0.037354, 0.313565,-0.18353,-0.931662,-4.112449,-0.875765,0.016326, -0.369174,0.174156,-0.912897,-4.070739,-0.947648,0.110554, -0.369174,0.174156,-0.912897,-4.070739,-0.947648,0.110554, 0.313565,-0.18353,-0.931662,-4.112449,-0.875765,0.016326, 0.537835,-0.193789,-0.820475,-4.233834,-1.166542,0.022074, -0.369174,0.174156,-0.912897,-4.070739,-0.947648,0.110554, 0.537835,-0.193789,-0.820475,-4.233834,-1.166542,0.022074, -0.516127,0.008586,-0.856469,-4.227645,-1.227895,0.069894, -0.516127,0.008586,-0.856469,-4.227645,-1.227895,0.069894, 0.537835,-0.193789,-0.820475,-4.233834,-1.166542,0.022074, 0.908243,-0.229695,0.349765,-4.333831,-1.548255,0.056938, -0.516127,0.008586,-0.856469,-4.227645,-1.227895,0.069894, 0.908243,-0.229695,0.349765,-4.333831,-1.548255,0.056938, -0.822516,0.195417,-0.534116,-4.229164,-1.473093,0.11156, -0.822516,0.195417,-0.534116,-4.229164,-1.473093,0.11156, 0.908243,-0.229695,0.349765,-4.333831,-1.548255,0.056938, 0.701057,-0.21056,0.68131,-4.424122,-1.831742,0.130839, -0.822516,0.195417,-0.534116,-4.229164,-1.473093,0.11156, 0.701057,-0.21056,0.68131,-4.424122,-1.831742,0.130839, -0.874954,0.011842,-0.484061,-4.309744,-1.743848,0.150329, -0.874954,0.011842,-0.484061,-4.309744,-1.743848,0.150329, 0.701057,-0.21056,0.68131,-4.424122,-1.831742,0.130839, 0.129519,-0.132707,0.982656,-4.445835,-2.015127,0.189702, -0.874954,0.011842,-0.484061,-4.309744,-1.743848,0.150329, 0.129519,-0.132707,0.982656,-4.445835,-2.015127,0.189702, 0.924466,0.048977,0.378105,-4.405365,-1.921443,0.192978, 0.728068,-0.191899,-0.658097,-3.975337,-0.554961,-0.014407, -0.276108,-0.088023,0.957087,-3.921874,-0.538502,-0.145307, -0.409041,-0.077841,0.90919,-4.042715,-0.87671,-0.168968, 0.728068,-0.191899,-0.658097,-3.975337,-0.554961,-0.014407, -0.409041,-0.077841,0.90919,-4.042715,-0.87671,-0.168968, 0.313565,-0.18353,-0.931662,-4.112449,-0.875765,0.016326, 0.313565,-0.18353,-0.931662,-4.112449,-0.875765,0.016326, -0.409041,-0.077841,0.90919,-4.042715,-0.87671,-0.168968, 0.50178,0.000639,-0.864995,-4.216296,-1.160854,-0.104034, 0.313565,-0.18353,-0.931662,-4.112449,-0.875765,0.016326, 0.50178,0.000639,-0.864995,-4.216296,-1.160854,-0.104034, 0.537835,-0.193789,-0.820475,-4.233834,-1.166542,0.022074, 0.537835,-0.193789,-0.820475,-4.233834,-1.166542,0.022074, 0.50178,0.000639,-0.864995,-4.216296,-1.160854,-0.104034, 0.300485,0.019099,-0.953595,-4.252683,-1.437854,-0.14562, 0.537835,-0.193789,-0.820475,-4.233834,-1.166542,0.022074, 0.300485,0.019099,-0.953595,-4.252683,-1.437854,-0.14562, 0.908243,-0.229695,0.349765,-4.333831,-1.548255,0.056938, 0.908243,-0.229695,0.349765,-4.333831,-1.548255,0.056938, 0.300485,0.019099,-0.953595,-4.252683,-1.437854,-0.14562, 0.678632,-0.017853,-0.734261,-4.331331,-1.69259,-0.043593, 0.908243,-0.229695,0.349765,-4.333831,-1.548255,0.056938, 0.678632,-0.017853,-0.734261,-4.331331,-1.69259,-0.043593, 0.701057,-0.21056,0.68131,-4.424122,-1.831742,0.130839, 0.701057,-0.21056,0.68131,-4.424122,-1.831742,0.130839, 0.678632,-0.017853,-0.734261,-4.331331,-1.69259,-0.043593, 0.687126,-0.68509,0.241888,-4.387148,-1.967814,0.045602, 0.701057,-0.21056,0.68131,-4.424122,-1.831742,0.130839, 0.687126,-0.68509,0.241888,-4.387148,-1.967814,0.045602, 0.129519,-0.132707,0.982656,-4.445835,-2.015127,0.189702, -0.276108,-0.088023,0.957087,-3.921874,-0.538502,-0.145307, 0.260319,-0.908993,-0.325523,-3.910546,-0.601719,-0.163159, -0.148191,-0.901516,-0.40658,-3.988138,-0.962789,-0.223649, -0.276108,-0.088023,0.957087,-3.921874,-0.538502,-0.145307, -0.148191,-0.901516,-0.40658,-3.988138,-0.962789,-0.223649, -0.409041,-0.077841,0.90919,-4.042715,-0.87671,-0.168968, -0.409041,-0.077841,0.90919,-4.042715,-0.87671,-0.168968, -0.148191,-0.901516,-0.40658,-3.988138,-0.962789,-0.223649, -0.443612,-0.876487,-0.187028,-4.111927,-1.333141,-0.26716, -0.409041,-0.077841,0.90919,-4.042715,-0.87671,-0.168968, -0.443612,-0.876487,-0.187028,-4.111927,-1.333141,-0.26716, 0.50178,0.000639,-0.864995,-4.216296,-1.160854,-0.104034, 0.50178,0.000639,-0.864995,-4.216296,-1.160854,-0.104034, -0.443612,-0.876487,-0.187028,-4.111927,-1.333141,-0.26716, -0.508388,-0.837291,0.20121,-4.201904,-1.668554,-0.214859, 0.50178,0.000639,-0.864995,-4.216296,-1.160854,-0.104034, -0.508388,-0.837291,0.20121,-4.201904,-1.668554,-0.214859, 0.300485,0.019099,-0.953595,-4.252683,-1.437854,-0.14562, 0.300485,0.019099,-0.953595,-4.252683,-1.437854,-0.14562, -0.508388,-0.837291,0.20121,-4.201904,-1.668554,-0.214859, -0.409829,-0.525605,0.745506,-4.273069,-1.798884,-0.099878, 0.300485,0.019099,-0.953595,-4.252683,-1.437854,-0.14562, -0.409829,-0.525605,0.745506,-4.273069,-1.798884,-0.099878, 0.678632,-0.017853,-0.734261,-4.331331,-1.69259,-0.043593, 0.678632,-0.017853,-0.734261,-4.331331,-1.69259,-0.043593, -0.409829,-0.525605,0.745506,-4.273069,-1.798884,-0.099878, -0.227573,-0.361148,0.904313,-4.351543,-1.947675,0.02502, 0.678632,-0.017853,-0.734261,-4.331331,-1.69259,-0.043593, -0.227573,-0.361148,0.904313,-4.351543,-1.947675,0.02502, 0.687126,-0.68509,0.241888,-4.387148,-1.967814,0.045602, 0.260319,-0.908993,-0.325523,-3.910546,-0.601719,-0.163159, 0.10009,-0.380026,0.919545,-3.873622,-0.759035,-0.197169, 0.547733,-0.470267,0.691981,-3.917882,-1.082831,-0.289171, 0.260319,-0.908993,-0.325523,-3.910546,-0.601719,-0.163159, 0.547733,-0.470267,0.691981,-3.917882,-1.082831,-0.289171, -0.148191,-0.901516,-0.40658,-3.988138,-0.962789,-0.223649, -0.148191,-0.901516,-0.40658,-3.988138,-0.962789,-0.223649, 0.547733,-0.470267,0.691981,-3.917882,-1.082831,-0.289171, -0.071182,-0.950841,0.301389,-4.001496,-1.375703,-0.285641, -0.148191,-0.901516,-0.40658,-3.988138,-0.962789,-0.223649, -0.071182,-0.950841,0.301389,-4.001496,-1.375703,-0.285641, -0.443612,-0.876487,-0.187028,-4.111927,-1.333141,-0.26716, -0.443612,-0.876487,-0.187028,-4.111927,-1.333141,-0.26716, -0.071182,-0.950841,0.301389,-4.001496,-1.375703,-0.285641, 0.216747,0.039317,0.975436,-4.073086,-1.649491,-0.238382, -0.443612,-0.876487,-0.187028,-4.111927,-1.333141,-0.26716, 0.216747,0.039317,0.975436,-4.073086,-1.649491,-0.238382, -0.508388,-0.837291,0.20121,-4.201904,-1.668554,-0.214859, -0.508388,-0.837291,0.20121,-4.201904,-1.668554,-0.214859, 0.216747,0.039317,0.975436,-4.073086,-1.649491,-0.238382, 0.555948,0.246866,0.793712,-4.175757,-1.808223,-0.140659, -0.508388,-0.837291,0.20121,-4.201904,-1.668554,-0.214859, 0.555948,0.246866,0.793712,-4.175757,-1.808223,-0.140659, -0.409829,-0.525605,0.745506,-4.273069,-1.798884,-0.099878, -0.409829,-0.525605,0.745506,-4.273069,-1.798884,-0.099878, 0.555948,0.246866,0.793712,-4.175757,-1.808223,-0.140659, 0.768311,0.202351,0.60725,-4.321269,-1.963488,0.025072, -0.409829,-0.525605,0.745506,-4.273069,-1.798884,-0.099878, 0.768311,0.202351,0.60725,-4.321269,-1.963488,0.025072, -0.227573,-0.361148,0.904313,-4.351543,-1.947675,0.02502, 0.10009,-0.380026,0.919545,-3.873622,-0.759035,-0.197169, 0.833232,0.046885,0.550932,-3.742608,-0.729374,-0.149361, 0.547733,-0.470267,0.691981,-3.917882,-1.082831,-0.289171, 0.833232,0.046885,0.550932,-3.742608,-0.729374,-0.149361, 0.587809,-0.328909,0.739121,-3.777709,-1.051411,-0.240495, 0.547733,-0.470267,0.691981,-3.917882,-1.082831,-0.289171, 0.547733,-0.470267,0.691981,-3.917882,-1.082831,-0.289171, 0.587809,-0.328909,0.739121,-3.777709,-1.051411,-0.240495, -0.071182,-0.950841,0.301389,-4.001496,-1.375703,-0.285641, 0.587809,-0.328909,0.739121,-3.777709,-1.051411,-0.240495, 0.213242,-0.278117,0.936578,-3.82037,-1.239135,-0.269807, -0.071182,-0.950841,0.301389,-4.001496,-1.375703,-0.285641, 0.213242,-0.278117,0.936578,-3.82037,-1.239135,-0.269807, 0.794828,0.083383,0.601079,-4.000019,-1.567512,-0.27535, -0.071182,-0.950841,0.301389,-4.001496,-1.375703,-0.285641, -0.071182,-0.950841,0.301389,-4.001496,-1.375703,-0.285641, 0.794828,0.083383,0.601079,-4.000019,-1.567512,-0.27535, 0.216747,0.039317,0.975436,-4.073086,-1.649491,-0.238382, 0.794828,0.083383,0.601079,-4.000019,-1.567512,-0.27535, 0.873201,-0.045461,0.485235,-3.977657,-1.750845,-0.184909, 0.216747,0.039317,0.975436,-4.073086,-1.649491,-0.238382, 0.216747,0.039317,0.975436,-4.073086,-1.649491,-0.238382, 0.873201,-0.045461,0.485235,-3.977657,-1.750845,-0.184909, 0.555948,0.246866,0.793712,-4.175757,-1.808223,-0.140659, 0.873201,-0.045461,0.485235,-3.977657,-1.750845,-0.184909, 0.829377,-0.173626,0.531026,-4.075028,-1.904403,-0.041324, 0.555948,0.246866,0.793712,-4.175757,-1.808223,-0.140659, 0.555948,0.246866,0.793712,-4.175757,-1.808223,-0.140659, 0.829377,-0.173626,0.531026,-4.075028,-1.904403,-0.041324, 0.768311,0.202351,0.60725,-4.321269,-1.963488,0.025072, 0.829377,-0.173626,0.531026,-4.075028,-1.904403,-0.041324, 0.506864,-0.193038,0.840134,-4.192486,-1.953852,0.017313, 0.768311,0.202351,0.60725,-4.321269,-1.963488,0.025072, 0.274422,-0.24433,0.930051,-3.65524,-0.194907,0.019209, 0.560378,0.257624,0.787151,-3.695565,-0.19362,0.051497, 0.00197,-0.021649,0.999764,-3.740631,-0.558176,0.085478, 0.274422,-0.24433,0.930051,-3.65524,-0.194907,0.019209, 0.00197,-0.021649,0.999764,-3.740631,-0.558176,0.085478, -0.54555,-0.056478,0.836173,-3.67645,-0.551317,0.077574, 0.546619,0.025488,0.836993,-3.805688,-0.190106,0.051472, 0.728068,-0.191899,-0.658097,-3.975337,-0.554961,-0.014407, 0.001234,0.013557,-0.999907,-3.932489,-0.556566,0.037354, 0.546619,0.025488,0.836993,-3.805688,-0.190106,0.051472, 0.001234,0.013557,-0.999907,-3.932489,-0.556566,0.037354, 0.999006,0.044565,0.000415,-3.896204,-0.629183,0.077883, 0.546619,0.025488,0.836993,-3.805688,-0.190106,0.051472, 0.999006,0.044565,0.000415,-3.896204,-0.629183,0.077883, 0.875325,0.013439,0.483348,-3.818598,-0.52269,0.055572, 0.711192,0.127662,0.69131,-3.75063,-0.191863,0.063305, 0.546619,0.025488,0.836993,-3.805688,-0.190106,0.051472, 0.875325,0.013439,0.483348,-3.818598,-0.52269,0.055572, 0.711192,0.127662,0.69131,-3.75063,-0.191863,0.063305, 0.875325,0.013439,0.483348,-3.818598,-0.52269,0.055572, 0.518386,-0.029316,0.854644,-3.778908,-0.541975,0.064258, 0.560378,0.257624,0.787151,-3.695565,-0.19362,0.051497, 0.518386,-0.029316,0.854644,-3.778908,-0.541975,0.064258, 0.00197,-0.021649,0.999764,-3.740631,-0.558176,0.085478, 0.238843,0.101951,0.965691,-3.84599,-0.18882,0.019164, 0.166377,-0.157108,0.973466,-3.86074,-0.188349,-0.024962, 0.728068,-0.191899,-0.658097,-3.975337,-0.554961,-0.014407, 0.89264,0.349909,0.284178,-3.695452,-0.193624,-0.101369, 0.833232,0.046885,0.550932,-3.742608,-0.729374,-0.149361, 0.10009,-0.380026,0.919545,-3.873622,-0.759035,-0.197169, 0.3526,0.621479,0.699598,-3.7505,-0.191867,-0.11323, 0.89264,0.349909,0.284178,-3.695452,-0.193624,-0.101369, 0.10009,-0.380026,0.919545,-3.873622,-0.759035,-0.197169, -0.281998,-0.030938,0.958916,-3.805575,-0.190109,-0.101447, 0.3526,0.621479,0.699598,-3.7505,-0.191867,-0.11323, 0.10009,-0.380026,0.919545,-3.873622,-0.759035,-0.197169, -0.281998,-0.030938,0.958916,-3.805575,-0.190109,-0.101447, 0.10009,-0.380026,0.919545,-3.873622,-0.759035,-0.197169, 0.260319,-0.908993,-0.325523,-3.910546,-0.601719,-0.163159, -0.281998,-0.030938,0.958916,-3.805575,-0.190109,-0.101447, 0.260319,-0.908993,-0.325523,-3.910546,-0.601719,-0.163159, -0.276108,-0.088023,0.957087,-3.921874,-0.538502,-0.145307, 0.077536,0.770695,0.632469,-3.845923,-0.188822,-0.06918, -0.281998,-0.030938,0.958916,-3.805575,-0.190109,-0.101447, -0.276108,-0.088023,0.957087,-3.921874,-0.538502,-0.145307, 0.166377,-0.157108,0.973466,-3.86074,-0.188349,-0.024962, -0.276108,-0.088023,0.957087,-3.921874,-0.538502,-0.145307, 0.728068,-0.191899,-0.658097,-3.975337,-0.554961,-0.014407, 0.833232,0.046885,0.550932,-3.742608,-0.729374,-0.149361, -0.064166,-0.189382,0.979805,-3.655175,-0.194909,-0.069044, 0.267717,-0.172975,0.947844,-3.640457,-0.195379,-0.024909, 0.833232,0.046885,0.550932,-3.742608,-0.729374,-0.149361, 0.89264,0.349909,0.284178,-3.695452,-0.193624,-0.101369, -0.064166,-0.189382,0.979805,-3.655175,-0.194909,-0.069044, 0.274422,-0.24433,0.930051,-3.65524,-0.194907,0.019209, -0.54555,-0.056478,0.836173,-3.67645,-0.551317,0.077574, 0.269003,0.86436,0.424875,-3.569386,-0.761644,-0.035893, 0.269003,0.86436,0.424875,-3.569386,-0.761644,-0.035893, 0.833232,0.046885,0.550932,-3.742608,-0.729374,-0.149361, 0.267717,-0.172975,0.947844,-3.640457,-0.195379,-0.024909, -0.54555,-0.056478,0.836173,-3.67645,-0.551317,0.077574, -0.530021,0.13773,0.836724,-3.697889,-0.951955,0.098793, -0.429713,0.351913,0.831567,-3.666536,-1.140372,0.078261, 0.213242,-0.278117,0.936578,-3.82037,-1.239135,-0.269807, 0.587809,-0.328909,0.739121,-3.777709,-1.051411,-0.240495, 0.000909,0.669011,0.743252,-3.581963,-1.413947,-0.104371, 0.269003,0.86436,0.424875,-3.569386,-0.761644,-0.035893, -0.54555,-0.056478,0.836173,-3.67645,-0.551317,0.077574, -0.429713,0.351913,0.831567,-3.666536,-1.140372,0.078261, 0.269003,0.86436,0.424875,-3.569386,-0.761644,-0.035893, -0.429713,0.351913,0.831567,-3.666536,-1.140372,0.078261, -0.24021,0.502412,0.830591,-3.639696,-1.242349,0.05719, 0.269003,0.86436,0.424875,-3.569386,-0.761644,-0.035893, -0.24021,0.502412,0.830591,-3.639696,-1.242349,0.05719, 0.000909,0.669011,0.743252,-3.581963,-1.413947,-0.104371, 0.833232,0.046885,0.550932,-3.742608,-0.729374,-0.149361, 0.269003,0.86436,0.424875,-3.569386,-0.761644,-0.035893, 0.000909,0.669011,0.743252,-3.581963,-1.413947,-0.104371, 0.587809,-0.328909,0.739121,-3.777709,-1.051411,-0.240495, 0.833232,0.046885,0.550932,-3.742608,-0.729374,-0.149361, 0.000909,0.669011,0.743252,-3.581963,-1.413947,-0.104371, 0.873201,-0.045461,0.485235,-3.977657,-1.750845,-0.184909, 0.231733,0.017467,0.972623,-3.890388,-1.750102,0.017612, 0.829377,-0.173626,0.531026,-4.075028,-1.904403,-0.041324, 0.873201,-0.045461,0.485235,-3.977657,-1.750845,-0.184909, 0.794828,0.083383,0.601079,-4.000019,-1.567512,-0.27535, 0.213242,-0.278117,0.936578,-3.82037,-1.239135,-0.269807, 0.213242,-0.278117,0.936578,-3.82037,-1.239135,-0.269807, 0.000909,0.669011,0.743252,-3.581963,-1.413947,-0.104371, -0.041225,-0.030655,0.99868,-3.683069,-1.591975,-0.115233, 0.213242,-0.278117,0.936578,-3.82037,-1.239135,-0.269807, -0.041225,-0.030655,0.99868,-3.683069,-1.591975,-0.115233, 0.002322,-0.058071,0.99831,-3.828485,-1.786559,-0.114095, 0.213242,-0.278117,0.936578,-3.82037,-1.239135,-0.269807, 0.002322,-0.058071,0.99831,-3.828485,-1.786559,-0.114095, 0.231733,0.017467,0.972623,-3.890388,-1.750102,0.017612, 0.873201,-0.045461,0.485235,-3.977657,-1.750845,-0.184909, 0.213242,-0.278117,0.936578,-3.82037,-1.239135,-0.269807, 0.231733,0.017467,0.972623,-3.890388,-1.750102,0.017612, 0.231733,0.017467,0.972623,-3.890388,-1.750102,0.017612, 0.791625,0.052579,0.608741,-4.107191,-1.83652,0.120149, 0.829377,-0.173626,0.531026,-4.075028,-1.904403,-0.041324, 0.791625,0.052579,0.608741,-4.107191,-1.83652,0.120149, 0.981696,0.042552,-0.185638,-4.207566,-1.922824,0.155104, 0.829377,-0.173626,0.531026,-4.075028,-1.904403,-0.041324, 0.924466,0.048977,0.378105,-4.405365,-1.921443,0.192978, 0.687126,-0.68509,0.241888,-4.387148,-1.967814,0.045602, 0.002983,0.098874,-0.995096,-4.297769,-1.889903,0.177707, 0.506864,-0.193038,0.840134,-4.192486,-1.953852,0.017313, 0.829377,-0.173626,0.531026,-4.075028,-1.904403,-0.041324, 0.981696,0.042552,-0.185638,-4.207566,-1.922824,0.155104, 0.506864,-0.193038,0.840134,-4.192486,-1.953852,0.017313, 0.981696,0.042552,-0.185638,-4.207566,-1.922824,0.155104, 0.002983,0.098874,-0.995096,-4.297769,-1.889903,0.177707, 0.768311,0.202351,0.60725,-4.321269,-1.963488,0.025072, 0.506864,-0.193038,0.840134,-4.192486,-1.953852,0.017313, 0.002983,0.098874,-0.995096,-4.297769,-1.889903,0.177707, -0.227573,-0.361148,0.904313,-4.351543,-1.947675,0.02502, 0.768311,0.202351,0.60725,-4.321269,-1.963488,0.025072, 0.002983,0.098874,-0.995096,-4.297769,-1.889903,0.177707, 0.687126,-0.68509,0.241888,-4.387148,-1.967814,0.045602, -0.227573,-0.361148,0.904313,-4.351543,-1.947675,0.02502, 0.002983,0.098874,-0.995096,-4.297769,-1.889903,0.177707, 0.924466,0.048977,0.378105,-4.405365,-1.921443,0.192978, 0.129519,-0.132707,0.982656,-4.445835,-2.015127,0.189702, 0.687126,-0.68509,0.241888,-4.387148,-1.967814,0.045602, 0.560378,0.257624,0.787151,-3.695565,-0.19362,0.051497, 0.711192,0.127662,0.69131,-3.75063,-0.191863,0.063305, 0.518386,-0.029316,0.854644,-3.778908,-0.541975,0.064258, 0.546619,0.025488,0.836993,-3.805688,-0.190106,0.051472, 0.238843,0.101951,0.965691,-3.84599,-0.18882,0.019164, 0.728068,-0.191899,-0.658097,-3.975337,-0.554961,-0.014407, 0.166377,-0.157108,0.973466,-3.86074,-0.188349,-0.024962, 0.077536,0.770695,0.632469,-3.845923,-0.188822,-0.06918, -0.276108,-0.088023,0.957087,-3.921874,-0.538502,-0.145307, 0.269003,0.86436,0.424875,-3.569386,-0.761644,-0.035893, 0.267717,-0.172975,0.947844,-3.640457,-0.195379,-0.024909, 0.274422,-0.24433,0.930051,-3.65524,-0.194907,0.019209 }; static const struct gllist frame={GL_N3F_V3F,GL_TRIANGLES,459,data,NULL}; const struct gllist *cow_tail=&frame; xscreensaver-5.36/hacks/glx/cow_udder.c000644 000767 000024 00000254110 12701612217 020142 0ustar00jwzstaff000000 000000 #include "gllist.h" static const float data[]={ 0.058723,-0.195869,-0.97887,-2.033406,-0.91003,-0.96422, -0.977902,-0.171036,-0.12023,-2.119856,-1.1288,-0.97096, 0.07657,0.16758,-0.982881,-2.306662,-1.116976,-0.961238, -0.977902,-0.171036,-0.12023,-2.119856,-1.1288,-0.97096, 0.058723,-0.195869,-0.97887,-2.033406,-0.91003,-0.96422, -0.964119,-0.189683,-0.18573,-2.031698,-1.097344,-0.966701, -0.964119,-0.189683,-0.18573,-2.031698,-1.097344,-0.966701, 0.058723,-0.195869,-0.97887,-2.033406,-0.91003,-0.96422, -0.30296,-0.137183,-0.943078,-1.782298,-1.020581,-0.943381, -0.955382,-0.23808,-0.174826,-2.462835,-1.3055,-0.966395, 0.07657,0.16758,-0.982881,-2.306662,-1.116976,-0.961238, -0.843742,-0.096326,-0.528036,-2.337617,-1.334842,-0.966761, -0.843742,-0.096326,-0.528036,-2.337617,-1.334842,-0.966761, 0.07657,0.16758,-0.982881,-2.306662,-1.116976,-0.961238, -0.977902,-0.171036,-0.12023,-2.119856,-1.1288,-0.97096, -0.843742,-0.096326,-0.528036,-2.337617,-1.334842,-0.966761, -0.977902,-0.171036,-0.12023,-2.119856,-1.1288,-0.97096, 0.028952,-0.016247,-0.999449,-2.161843,-1.325837,-0.957465, 0.028952,-0.016247,-0.999449,-2.161843,-1.325837,-0.957465, -0.977902,-0.171036,-0.12023,-2.119856,-1.1288,-0.97096, -0.964119,-0.189683,-0.18573,-2.031698,-1.097344,-0.966701, 0.028952,-0.016247,-0.999449,-2.161843,-1.325837,-0.957465, -0.964119,-0.189683,-0.18573,-2.031698,-1.097344,-0.966701, 0.093953,-0.049433,-0.994349,-2.042059,-1.312976,-0.940911, 0.093953,-0.049433,-0.994349,-2.042059,-1.312976,-0.940911, -0.964119,-0.189683,-0.18573,-2.031698,-1.097344,-0.966701, -0.30296,-0.137183,-0.943078,-1.782298,-1.020581,-0.943381, 0.093953,-0.049433,-0.994349,-2.042059,-1.312976,-0.940911, -0.30296,-0.137183,-0.943078,-1.782298,-1.020581,-0.943381, 0.335613,-0.388493,-0.858159,-1.776785,-1.275107,-0.914703, 0.335613,-0.388493,-0.858159,-1.776785,-1.275107,-0.914703, -0.30296,-0.137183,-0.943078,-1.782298,-1.020581,-0.943381, -0.004413,-0.170526,-0.985343,-1.709172,-1.283232,-0.897427, -0.004413,-0.170526,-0.985343,-1.709172,-1.283232,-0.897427, -0.30296,-0.137183,-0.943078,-1.782298,-1.020581,-0.943381, 0.095733,-0.224552,-0.969748,-1.456655,-1.295527,-0.89424, 0.137764,-0.289893,-0.947092,-2.591357,-1.510845,-0.88547, -0.955382,-0.23808,-0.174826,-2.462835,-1.3055,-0.966395, -0.843742,-0.096326,-0.528036,-2.337617,-1.334842,-0.966761, 0.137764,-0.289893,-0.947092,-2.591357,-1.510845,-0.88547, -0.843742,-0.096326,-0.528036,-2.337617,-1.334842,-0.966761, 0.137206,-0.207537,-0.968557,-2.417777,-1.553136,-0.887222, 0.137206,-0.207537,-0.968557,-2.417777,-1.553136,-0.887222, -0.843742,-0.096326,-0.528036,-2.337617,-1.334842,-0.966761, 0.028952,-0.016247,-0.999449,-2.161843,-1.325837,-0.957465, 0.137206,-0.207537,-0.968557,-2.417777,-1.553136,-0.887222, 0.028952,-0.016247,-0.999449,-2.161843,-1.325837,-0.957465, 0.094371,-0.230057,-0.968591,-2.223917,-1.541268,-0.87926, 0.094371,-0.230057,-0.968591,-2.223917,-1.541268,-0.87926, 0.028952,-0.016247,-0.999449,-2.161843,-1.325837,-0.957465, 0.093953,-0.049433,-0.994349,-2.042059,-1.312976,-0.940911, 0.094371,-0.230057,-0.968591,-2.223917,-1.541268,-0.87926, 0.093953,-0.049433,-0.994349,-2.042059,-1.312976,-0.940911, -0.201818,-0.568242,-0.797728,-2.049879,-1.562369,-0.829319, -0.201818,-0.568242,-0.797728,-2.049879,-1.562369,-0.829319, 0.093953,-0.049433,-0.994349,-2.042059,-1.312976,-0.940911, 0.357021,-0.590654,-0.723646,-1.777628,-1.473076,-0.845827, -0.201818,-0.568242,-0.797728,-2.049879,-1.562369,-0.829319, 0.357021,-0.590654,-0.723646,-1.777628,-1.473076,-0.845827, 0.008663,-0.516082,-0.856495,-1.778934,-1.550199,-0.776454, 0.357021,-0.590654,-0.723646,-1.777628,-1.473076,-0.845827, 0.093953,-0.049433,-0.994349,-2.042059,-1.312976,-0.940911, 0.335613,-0.388493,-0.858159,-1.776785,-1.275107,-0.914703, 0.357021,-0.590654,-0.723646,-1.777628,-1.473076,-0.845827, 0.335613,-0.388493,-0.858159,-1.776785,-1.275107,-0.914703, -0.004413,-0.170526,-0.985343,-1.709172,-1.283232,-0.897427, 0.357021,-0.590654,-0.723646,-1.777628,-1.473076,-0.845827, -0.004413,-0.170526,-0.985343,-1.709172,-1.283232,-0.897427, 0.106237,-0.558927,-0.822383,-1.686329,-1.414405,-0.869373, 0.106237,-0.558927,-0.822383,-1.686329,-1.414405,-0.869373, -0.004413,-0.170526,-0.985343,-1.709172,-1.283232,-0.897427, 0.095733,-0.224552,-0.969748,-1.456655,-1.295527,-0.89424, 0.106237,-0.558927,-0.822383,-1.686329,-1.414405,-0.869373, 0.095733,-0.224552,-0.969748,-1.456655,-1.295527,-0.89424, 0.155794,-0.590112,-0.792146,-1.592146,-1.408592,-0.838483, 0.155794,-0.590112,-0.792146,-1.592146,-1.408592,-0.838483, 0.095733,-0.224552,-0.969748,-1.456655,-1.295527,-0.89424, 0.08565,-0.422547,-0.902285,-1.552229,-1.555077,-0.735708, 0.08565,-0.422547,-0.902285,-1.552229,-1.555077,-0.735708, 0.161064,-0.731195,-0.662882,-1.659758,-1.544361,-0.788181, 0.155794,-0.590112,-0.792146,-1.592146,-1.408592,-0.838483, 0.155794,-0.590112,-0.792146,-1.592146,-1.408592,-0.838483, 0.161064,-0.731195,-0.662882,-1.659758,-1.544361,-0.788181, 0.106237,-0.558927,-0.822383,-1.686329,-1.414405,-0.869373, 0.106237,-0.558927,-0.822383,-1.686329,-1.414405,-0.869373, 0.161064,-0.731195,-0.662882,-1.659758,-1.544361,-0.788181, 0.008663,-0.516082,-0.856495,-1.778934,-1.550199,-0.776454, 0.106237,-0.558927,-0.822383,-1.686329,-1.414405,-0.869373, 0.008663,-0.516082,-0.856495,-1.778934,-1.550199,-0.776454, 0.357021,-0.590654,-0.723646,-1.777628,-1.473076,-0.845827, 0.08565,-0.422547,-0.902285,-1.552229,-1.555077,-0.735708, 0.095733,-0.224552,-0.969748,-1.456655,-1.295527,-0.89424, -0.422758,-0.178302,-0.888529,-1.366873,-1.340211,-0.907567, 0.08565,-0.422547,-0.902285,-1.552229,-1.555077,-0.735708, -0.422758,-0.178302,-0.888529,-1.366873,-1.340211,-0.907567, -0.504483,-0.438591,-0.743731,-1.376186,-1.661988,-0.718954, -0.504483,-0.438591,-0.743731,-1.376186,-1.661988,-0.718954, -0.422758,-0.178302,-0.888529,-1.366873,-1.340211,-0.907567, 0.121987,-0.426326,-0.896306,-1.198513,-1.456102,-0.885435, -0.504483,-0.438591,-0.743731,-1.376186,-1.661988,-0.718954, 0.121987,-0.426326,-0.896306,-1.198513,-1.456102,-0.885435, 0.215155,-0.464575,-0.858999,-1.200688,-1.577575,-0.799188, 0.215155,-0.464575,-0.858999,-1.200688,-1.577575,-0.799188, 0.121987,-0.426326,-0.896306,-1.198513,-1.456102,-0.885435, -0.218261,-0.26262,-0.93989,-0.953236,-1.545941,-0.89918, -0.094238,-0.851252,-0.516225,-1.397474,-1.693815,-0.570541, 0.152347,-0.821467,-0.549529,-1.480217,-1.6566,-0.606638, -0.504483,-0.438591,-0.743731,-1.376186,-1.661988,-0.718954, -0.504483,-0.438591,-0.743731,-1.376186,-1.661988,-0.718954, 0.152347,-0.821467,-0.549529,-1.480217,-1.6566,-0.606638, 0.08565,-0.422547,-0.902285,-1.552229,-1.555077,-0.735708, 0.08565,-0.422547,-0.902285,-1.552229,-1.555077,-0.735708, 0.152347,-0.821467,-0.549529,-1.480217,-1.6566,-0.606638, -0.279342,-0.940234,-0.19475,-1.601625,-1.593321,-0.605607, -0.279342,-0.940234,-0.19475,-1.601625,-1.593321,-0.605607, 0.152347,-0.821467,-0.549529,-1.480217,-1.6566,-0.606638, -0.198045,-0.959194,-0.201804,-1.519339,-1.653776,-0.501741, -0.198045,-0.959194,-0.201804,-1.519339,-1.653776,-0.501741, 0.152347,-0.821467,-0.549529,-1.480217,-1.6566,-0.606638, -0.094238,-0.851252,-0.516225,-1.397474,-1.693815,-0.570541, -0.198045,-0.959194,-0.201804,-1.519339,-1.653776,-0.501741, -0.094238,-0.851252,-0.516225,-1.397474,-1.693815,-0.570541, -0.171647,-0.971664,-0.162499,-1.406693,-1.697325,-0.450399, -0.279342,-0.940234,-0.19475,-1.601625,-1.593321,-0.605607, -0.198045,-0.959194,-0.201804,-1.519339,-1.653776,-0.501741, -0.403877,-0.879274,-0.252509,-1.576196,-1.696317,-0.358146, -0.403877,-0.879274,-0.252509,-1.576196,-1.696317,-0.358146, -0.198045,-0.959194,-0.201804,-1.519339,-1.653776,-0.501741, -0.171647,-0.971664,-0.162499,-1.406693,-1.697325,-0.450399, -0.403877,-0.879274,-0.252509,-1.576196,-1.696317,-0.358146, -0.171647,-0.971664,-0.162499,-1.406693,-1.697325,-0.450399, -0.53858,-0.616299,-0.57455,-1.386502,-1.718441,-0.350823, -0.53858,-0.616299,-0.57455,-1.386502,-1.718441,-0.350823, 0.011286,0.999936,0,-1.395728,-1.723811,0, 0.106808,0.99428,0,-1.610025,-1.711571,0, -0.53858,-0.616299,-0.57455,-1.386502,-1.718441,-0.350823, 0.106808,0.99428,0,-1.610025,-1.711571,0, -0.403877,-0.879274,-0.252509,-1.576196,-1.696317,-0.358146, -0.403877,-0.879274,-0.252509,-1.576196,-1.696317,-0.358146, 0.106808,0.99428,0,-1.610025,-1.711571,0, -0.160087,-0.987103,0,-1.799827,-1.753136,0, -0.403877,-0.879274,-0.252509,-1.576196,-1.696317,-0.358146, -0.160087,-0.987103,0,-1.799827,-1.753136,0, -0.299215,-0.929389,-0.216116,-1.764045,-1.764987,-0.406586, -0.299215,-0.929389,-0.216116,-1.764045,-1.764987,-0.406586, -0.18119,-0.970212,-0.160805,-1.74779,-1.667608,-0.60634, -0.279342,-0.940234,-0.19475,-1.601625,-1.593321,-0.605607, -0.299215,-0.929389,-0.216116,-1.764045,-1.764987,-0.406586, -0.279342,-0.940234,-0.19475,-1.601625,-1.593321,-0.605607, -0.403877,-0.879274,-0.252509,-1.576196,-1.696317,-0.358146, -0.279342,-0.940234,-0.19475,-1.601625,-1.593321,-0.605607, -0.18119,-0.970212,-0.160805,-1.74779,-1.667608,-0.60634, 0.008663,-0.516082,-0.856495,-1.778934,-1.550199,-0.776454, 0.008663,-0.516082,-0.856495,-1.778934,-1.550199,-0.776454, 0.161064,-0.731195,-0.662882,-1.659758,-1.544361,-0.788181, -0.279342,-0.940234,-0.19475,-1.601625,-1.593321,-0.605607, -0.279342,-0.940234,-0.19475,-1.601625,-1.593321,-0.605607, 0.161064,-0.731195,-0.662882,-1.659758,-1.544361,-0.788181, 0.08565,-0.422547,-0.902285,-1.552229,-1.555077,-0.735708, 0.048753,-0.975535,-0.21437,-2.734184,-1.717948,-0.749581, 0.137764,-0.289893,-0.947092,-2.591357,-1.510845,-0.88547, 0.137206,-0.207537,-0.968557,-2.417777,-1.553136,-0.887222, 0.048753,-0.975535,-0.21437,-2.734184,-1.717948,-0.749581, 0.137206,-0.207537,-0.968557,-2.417777,-1.553136,-0.887222, -0.177142,-0.976279,-0.124502,-2.508885,-1.719933,-0.721675, -0.177142,-0.976279,-0.124502,-2.508885,-1.719933,-0.721675, 0.137206,-0.207537,-0.968557,-2.417777,-1.553136,-0.887222, 0.094371,-0.230057,-0.968591,-2.223917,-1.541268,-0.87926, -0.177142,-0.976279,-0.124502,-2.508885,-1.719933,-0.721675, 0.094371,-0.230057,-0.968591,-2.223917,-1.541268,-0.87926, 0.430742,-0.887318,-0.164704,-2.267049,-1.753901,-0.662106, 0.430742,-0.887318,-0.164704,-2.267049,-1.753901,-0.662106, 0.094371,-0.230057,-0.968591,-2.223917,-1.541268,-0.87926, -0.201818,-0.568242,-0.797728,-2.049879,-1.562369,-0.829319, 0.430742,-0.887318,-0.164704,-2.267049,-1.753901,-0.662106, -0.201818,-0.568242,-0.797728,-2.049879,-1.562369,-0.829319, 0.35682,-0.781398,-0.511953,-2.037371,-1.73636,-0.656787, 0.35682,-0.781398,-0.511953,-2.037371,-1.73636,-0.656787, -0.201818,-0.568242,-0.797728,-2.049879,-1.562369,-0.829319, 0.008663,-0.516082,-0.856495,-1.778934,-1.550199,-0.776454, 0.35682,-0.781398,-0.511953,-2.037371,-1.73636,-0.656787, 0.008663,-0.516082,-0.856495,-1.778934,-1.550199,-0.776454, -0.18119,-0.970212,-0.160805,-1.74779,-1.667608,-0.60634, -0.18119,-0.970212,-0.160805,-1.74779,-1.667608,-0.60634, -0.299215,-0.929389,-0.216116,-1.764045,-1.764987,-0.406586, 0.493535,-0.729115,-0.474147,-1.88316,-1.829718,-0.401567, -0.18119,-0.970212,-0.160805,-1.74779,-1.667608,-0.60634, 0.493535,-0.729115,-0.474147,-1.88316,-1.829718,-0.401567, 0.04422,-0.704109,-0.708714,-1.936032,-1.829617,-0.488916, 0.04422,-0.704109,-0.708714,-1.936032,-1.829617,-0.488916, 0.083262,-0.787311,-0.610907,-2.027242,-1.813012,-0.555232, 0.35682,-0.781398,-0.511953,-2.037371,-1.73636,-0.656787, 0.04422,-0.704109,-0.708714,-1.936032,-1.829617,-0.488916, 0.35682,-0.781398,-0.511953,-2.037371,-1.73636,-0.656787, -0.18119,-0.970212,-0.160805,-1.74779,-1.667608,-0.60634, 0.35682,-0.781398,-0.511953,-2.037371,-1.73636,-0.656787, 0.083262,-0.787311,-0.610907,-2.027242,-1.813012,-0.555232, 0.170756,-0.748007,-0.641349,-2.126375,-1.866497,-0.502895, 0.35682,-0.781398,-0.511953,-2.037371,-1.73636,-0.656787, 0.170756,-0.748007,-0.641349,-2.126375,-1.866497,-0.502895, 0.430742,-0.887318,-0.164704,-2.267049,-1.753901,-0.662106, 0.430742,-0.887318,-0.164704,-2.267049,-1.753901,-0.662106, 0.170756,-0.748007,-0.641349,-2.126375,-1.866497,-0.502895, 0.64791,-0.754869,0.101909,-2.176551,-1.873816,-0.445782, 0.430742,-0.887318,-0.164704,-2.267049,-1.753901,-0.662106, 0.64791,-0.754869,0.101909,-2.176551,-1.873816,-0.445782, 0.381337,-0.795981,-0.470102,-2.317557,-1.8742,-0.470587, 0.381337,-0.795981,-0.470102,-2.317557,-1.8742,-0.470587, 0.183908,-0.773381,-0.606679,-2.446375,-1.893261,-0.49411, 0.018755,-0.837462,-0.546174,-2.466779,-1.857679,-0.570461, 0.381337,-0.795981,-0.470102,-2.317557,-1.8742,-0.470587, 0.018755,-0.837462,-0.546174,-2.466779,-1.857679,-0.570461, 0.430742,-0.887318,-0.164704,-2.267049,-1.753901,-0.662106, 0.430742,-0.887318,-0.164704,-2.267049,-1.753901,-0.662106, 0.018755,-0.837462,-0.546174,-2.466779,-1.857679,-0.570461, -0.094688,-0.959937,-0.263734,-2.547737,-1.833025,-0.609321, 0.430742,-0.887318,-0.164704,-2.267049,-1.753901,-0.662106, -0.094688,-0.959937,-0.263734,-2.547737,-1.833025,-0.609321, -0.177142,-0.976279,-0.124502,-2.508885,-1.719933,-0.721675, -0.177142,-0.976279,-0.124502,-2.508885,-1.719933,-0.721675, -0.094688,-0.959937,-0.263734,-2.547737,-1.833025,-0.609321, 0.059023,-0.965365,-0.25414,-2.64722,-1.84401,-0.594347, -0.177142,-0.976279,-0.124502,-2.508885,-1.719933,-0.721675, 0.059023,-0.965365,-0.25414,-2.64722,-1.84401,-0.594347, 0.048753,-0.975535,-0.21437,-2.734184,-1.717948,-0.749581, 0.048753,-0.975535,-0.21437,-2.734184,-1.717948,-0.749581, 0.059023,-0.965365,-0.25414,-2.64722,-1.84401,-0.594347, 0.49176,-0.810764,-0.317543,-2.699966,-1.850397,-0.57007, 0.048753,-0.975535,-0.21437,-2.734184,-1.717948,-0.749581, 0.49176,-0.810764,-0.317543,-2.699966,-1.850397,-0.57007, 0.43907,-0.579988,-0.686171,-2.811581,-1.79821,-0.712737, -0.073547,-0.481419,-0.8734,-2.941731,-1.787431,-0.442574, 0.099157,-0.476834,-0.873383,-2.709403,-1.879947,-0.508775, -0.147229,-0.706225,-0.69251,-2.684452,-1.891207,-0.447388, -0.073547,-0.481419,-0.8734,-2.941731,-1.787431,-0.442574, -0.147229,-0.706225,-0.69251,-2.684452,-1.891207,-0.447388, 0.0787,0.996898,0,-2.892162,-1.781087,0, 0.0787,0.996898,0,-2.892162,-1.781087,0, -0.147229,-0.706225,-0.69251,-2.684452,-1.891207,-0.447388, 0.328486,-0.940918,0.082286,-2.614084,-1.905005,-0.404925, 0.0787,0.996898,0,-2.892162,-1.781087,0, 0.328486,-0.940918,0.082286,-2.614084,-1.905005,-0.404925, 0.058013,0.998316,0,-2.656867,-1.853045,0, 0.058013,0.998316,0,-2.656867,-1.853045,0, 0.328486,-0.940918,0.082286,-2.614084,-1.905005,-0.404925, -0.319475,-0.944225,-0.079844,-2.503818,-1.909806,-0.431456, 0.058013,0.998316,0,-2.656867,-1.853045,0, -0.319475,-0.944225,-0.079844,-2.503818,-1.909806,-0.431456, 0.093777,0.995593,0,-2.348005,-1.869142,0, 0.093777,0.995593,0,-2.348005,-1.869142,0, -0.319475,-0.944225,-0.079844,-2.503818,-1.909806,-0.431456, 0.183908,-0.773381,-0.606679,-2.446375,-1.893261,-0.49411, 0.093777,0.995593,0,-2.348005,-1.869142,0, 0.183908,-0.773381,-0.606679,-2.446375,-1.893261,-0.49411, 0.381337,-0.795981,-0.470102,-2.317557,-1.8742,-0.470587, 0.381337,-0.795981,-0.470102,-2.317557,-1.8742,-0.470587, 0.64791,-0.754869,0.101909,-2.176551,-1.873816,-0.445782, -0.393694,-0.919049,0.018795,-2.147113,-1.903198,-0.362462, 0.381337,-0.795981,-0.470102,-2.317557,-1.8742,-0.470587, -0.393694,-0.919049,0.018795,-2.147113,-1.903198,-0.362462, 0.093777,0.995593,0,-2.348005,-1.869142,0, 0.093777,0.995593,0,-2.348005,-1.869142,0, -0.393694,-0.919049,0.018795,-2.147113,-1.903198,-0.362462, -0.327707,-0.94199,0.072547,-2.062725,-1.884246,-0.307336, 0.093777,0.995593,0,-2.348005,-1.869142,0, -0.327707,-0.94199,0.072547,-2.062725,-1.884246,-0.307336, 0.149455,0.988769,0,-2.092921,-1.839622,0, 0.149455,0.988769,0,-2.092921,-1.839622,0, -0.327707,-0.94199,0.072547,-2.062725,-1.884246,-0.307336, -0.163041,-0.980692,0.107986,-1.946306,-1.872735,-0.344251, 0.149455,0.988769,0,-2.092921,-1.839622,0, -0.163041,-0.980692,0.107986,-1.946306,-1.872735,-0.344251, -0.160087,-0.987103,0,-1.799827,-1.753136,0, -0.160087,-0.987103,0,-1.799827,-1.753136,0, -0.163041,-0.980692,0.107986,-1.946306,-1.872735,-0.344251, 0.493535,-0.729115,-0.474147,-1.88316,-1.829718,-0.401567, -0.160087,-0.987103,0,-1.799827,-1.753136,0, 0.493535,-0.729115,-0.474147,-1.88316,-1.829718,-0.401567, -0.299215,-0.929389,-0.216116,-1.764045,-1.764987,-0.406586, -0.012978,-0.998326,0.056357,-3.139394,-1.687482,-0.638546, 0.074429,-0.99521,0.063385,-3.120907,-1.707924,-0.431829, 0.249604,-0.855993,0.452741,-3.314868,-1.599081,-0.439626, -0.012978,-0.998326,0.056357,-3.139394,-1.687482,-0.638546, 0.249604,-0.855993,0.452741,-3.314868,-1.599081,-0.439626, 0.515412,-0.714946,0.472444,-3.304804,-1.582192,-0.643445, 0.515412,-0.714946,0.472444,-3.304804,-1.582192,-0.643445, 0.249604,-0.855993,0.452741,-3.314868,-1.599081,-0.439626, -0.454242,-0.890878,0.000928,-3.442085,-1.48412,-0.406377, 0.515412,-0.714946,0.472444,-3.304804,-1.582192,-0.643445, -0.454242,-0.890878,0.000928,-3.442085,-1.48412,-0.406377, -0.354058,-0.732075,0.581987,-3.387254,-1.486027,-0.672861, -0.354058,-0.732075,0.581987,-3.387254,-1.486027,-0.672861, -0.454242,-0.890878,0.000928,-3.442085,-1.48412,-0.406377, -0.587869,-0.808404,-0.029894,-3.557869,-1.325941,-0.37803, -0.354058,-0.732075,0.581987,-3.387254,-1.486027,-0.672861, -0.587869,-0.808404,-0.029894,-3.557869,-1.325941,-0.37803, -0.581301,-0.608503,0.540197,-3.53391,-1.330455,-0.568246, -0.581301,-0.608503,0.540197,-3.53391,-1.330455,-0.568246, -0.587869,-0.808404,-0.029894,-3.557869,-1.325941,-0.37803, -0.736087,-0.675142,-0.048562,-3.639586,-1.140102,-0.3338, -0.581301,-0.608503,0.540197,-3.53391,-1.330455,-0.568246, -0.736087,-0.675142,-0.048562,-3.639586,-1.140102,-0.3338, -0.98615,-0.150918,-0.068783,-3.631179,-1.157838,-0.50561, -0.98615,-0.150918,-0.068783,-3.631179,-1.157838,-0.50561, -0.736087,-0.675142,-0.048562,-3.639586,-1.140102,-0.3338, -0.84728,-0.52968,-0.039439,-3.686518,-0.955181,-0.320349, -0.98615,-0.150918,-0.068783,-3.631179,-1.157838,-0.50561, -0.84728,-0.52968,-0.039439,-3.686518,-0.955181,-0.320349, -0.815087,-0.388053,-0.430171,-3.667859,-0.964867,-0.464702, -0.815087,-0.388053,-0.430171,-3.667859,-0.964867,-0.464702, -0.84728,-0.52968,-0.039439,-3.686518,-0.955181,-0.320349, -0.945906,-0.323169,-0.028687,-3.676599,-0.729578,-0.330724, -0.815087,-0.388053,-0.430171,-3.667859,-0.964867,-0.464702, -0.945906,-0.323169,-0.028687,-3.676599,-0.729578,-0.330724, -0.896964,-0.287307,-0.336022,-3.665774,-0.73408,-0.446286, -0.896964,-0.287307,-0.336022,-3.665774,-0.73408,-0.446286, -0.945906,-0.323169,-0.028687,-3.676599,-0.729578,-0.330724, -0.99574,-0.082547,-0.041071,-3.616627,-0.350374,-0.338492, -0.896964,-0.287307,-0.336022,-3.665774,-0.73408,-0.446286, -0.99574,-0.082547,-0.041071,-3.616627,-0.350374,-0.338492, -0.950882,-0.075567,-0.300188,-3.595973,-0.346391,-0.426453, -0.950882,-0.075567,-0.300188,-3.595973,-0.346391,-0.426453, -0.99574,-0.082547,-0.041071,-3.616627,-0.350374,-0.338492, -0.993498,0.089934,-0.06981,-3.570243,-0.060093,-0.344854, -0.950882,-0.075567,-0.300188,-3.595973,-0.346391,-0.426453, -0.993498,0.089934,-0.06981,-3.570243,-0.060093,-0.344854, -0.951862,0.098243,-0.290356,-3.529709,-0.065998,-0.437217, -0.951862,0.098243,-0.290356,-3.529709,-0.065998,-0.437217, -0.993498,0.089934,-0.06981,-3.570243,-0.060093,-0.344854, -0.9775,0.159844,-0.137638,-3.535416,0.191408,-0.338478, -0.951862,0.098243,-0.290356,-3.529709,-0.065998,-0.437217, -0.9775,0.159844,-0.137638,-3.535416,0.191408,-0.338478, -0.923845,0.18432,-0.335466,-3.51684,0.149002,-0.430359, -0.923845,0.18432,-0.335466,-3.51684,0.149002,-0.430359, -0.9775,0.159844,-0.137638,-3.535416,0.191408,-0.338478, -0.971344,0.144305,-0.188856,-3.536654,0.442277,-0.322, -0.971344,0.144305,-0.188856,-3.536654,0.442277,-0.322, -0.9775,0.159844,-0.137638,-3.535416,0.191408,-0.338478, 0.170833,0.9853,0,-3.55232,0.219613,0, -0.971344,0.144305,-0.188856,-3.536654,0.442277,-0.322, 0.170833,0.9853,0,-3.55232,0.219613,0, -0.57342,0.819261,0,-3.544507,0.467147,0, 0.170833,0.9853,0,-3.55232,0.219613,0, -0.9775,0.159844,-0.137638,-3.535416,0.191408,-0.338478, -0.993498,0.089934,-0.06981,-3.570243,-0.060093,-0.344854, 0.170833,0.9853,0,-3.55232,0.219613,0, -0.993498,0.089934,-0.06981,-3.570243,-0.060093,-0.344854, 0.614301,0.789071,-0.000581,-3.583763,-0.052271,0, 0.098463,-0.995141,0,-3.637643,-0.356271,0, -0.99574,-0.082547,-0.041071,-3.616627,-0.350374,-0.338492, -0.945906,-0.323169,-0.028687,-3.676599,-0.729578,-0.330724, 0.098463,-0.995141,0,-3.637643,-0.356271,0, -0.945906,-0.323169,-0.028687,-3.676599,-0.729578,-0.330724, 0.353735,-0.935346,0,-3.673607,-0.720796,0, 0.353735,-0.935346,0,-3.673607,-0.720796,0, -0.945906,-0.323169,-0.028687,-3.676599,-0.729578,-0.330724, -0.84728,-0.52968,-0.039439,-3.686518,-0.955181,-0.320349, 0.353735,-0.935346,0,-3.673607,-0.720796,0, -0.84728,-0.52968,-0.039439,-3.686518,-0.955181,-0.320349, -0.34926,-0.937026,0,-3.678793,-0.926816,0, -0.34926,-0.937026,0,-3.678793,-0.926816,0, -0.84728,-0.52968,-0.039439,-3.686518,-0.955181,-0.320349, -0.736087,-0.675142,-0.048562,-3.639586,-1.140102,-0.3338, -0.34926,-0.937026,0,-3.678793,-0.926816,0, -0.736087,-0.675142,-0.048562,-3.639586,-1.140102,-0.3338, -0.164,-0.98646,0,-3.650579,-1.142448,0, -0.164,-0.98646,0,-3.650579,-1.142448,0, -0.736087,-0.675142,-0.048562,-3.639586,-1.140102,-0.3338, -0.587869,-0.808404,-0.029894,-3.557869,-1.325941,-0.37803, -0.164,-0.98646,0,-3.650579,-1.142448,0, -0.587869,-0.808404,-0.029894,-3.557869,-1.325941,-0.37803, 0.030921,-0.999522,0,-3.522115,-1.366623,0, 0.030921,-0.999522,0,-3.522115,-1.366623,0, -0.587869,-0.808404,-0.029894,-3.557869,-1.325941,-0.37803, -0.454242,-0.890878,0.000928,-3.442085,-1.48412,-0.406377, 0.030921,-0.999522,0,-3.522115,-1.366623,0, -0.454242,-0.890878,0.000928,-3.442085,-1.48412,-0.406377, 0.183204,-0.983075,0,-3.417689,-1.494416,0, 0.183204,-0.983075,0,-3.417689,-1.494416,0, -0.454242,-0.890878,0.000928,-3.442085,-1.48412,-0.406377, 0.249604,-0.855993,0.452741,-3.314868,-1.599081,-0.439626, 0.183204,-0.983075,0,-3.417689,-1.494416,0, 0.249604,-0.855993,0.452741,-3.314868,-1.599081,-0.439626, -0.997516,0.070442,0,-3.271035,-1.609292,0, -0.997516,0.070442,0,-3.271035,-1.609292,0, 0.249604,-0.855993,0.452741,-3.314868,-1.599081,-0.439626, 0.074429,-0.99521,0.063385,-3.120907,-1.707924,-0.431829, -0.997516,0.070442,0,-3.271035,-1.609292,0, 0.074429,-0.99521,0.063385,-3.120907,-1.707924,-0.431829, -0.99928,-0.037933,0,-3.1103,-1.69172,0, -0.99928,-0.037933,0,-3.1103,-1.69172,0, 0.074429,-0.99521,0.063385,-3.120907,-1.707924,-0.431829, -0.073547,-0.481419,-0.8734,-2.941731,-1.787431,-0.442574, -0.99928,-0.037933,0,-3.1103,-1.69172,0, -0.073547,-0.481419,-0.8734,-2.941731,-1.787431,-0.442574, 0.0787,0.996898,0,-2.892162,-1.781087,0, 0.614301,0.789071,-0.000581,-3.583763,-0.052271,0, -0.993498,0.089934,-0.06981,-3.570243,-0.060093,-0.344854, -0.99574,-0.082547,-0.041071,-3.616627,-0.350374,-0.338492, 0.614301,0.789071,-0.000581,-3.583763,-0.052271,0, -0.99574,-0.082547,-0.041071,-3.616627,-0.350374,-0.338492, 0.098463,-0.995141,0,-3.637643,-0.356271,0, -0.923845,0.18432,-0.335466,-3.51684,0.149002,-0.430359, -0.908258,0.139498,-0.394471,-3.470778,-0.078218,-0.546398, -0.951862,0.098243,-0.290356,-3.529709,-0.065998,-0.437217, -0.951862,0.098243,-0.290356,-3.529709,-0.065998,-0.437217, -0.908258,0.139498,-0.394471,-3.470778,-0.078218,-0.546398, -0.985615,0.064121,-0.156369,-3.526766,-0.317542,-0.560837, -0.951862,0.098243,-0.290356,-3.529709,-0.065998,-0.437217, -0.985615,0.064121,-0.156369,-3.526766,-0.317542,-0.560837, -0.950882,-0.075567,-0.300188,-3.595973,-0.346391,-0.426453, -0.950882,-0.075567,-0.300188,-3.595973,-0.346391,-0.426453, -0.985615,0.064121,-0.156369,-3.526766,-0.317542,-0.560837, -0.982334,-0.04331,-0.182057,-3.569993,-0.731989,-0.649435, -0.950882,-0.075567,-0.300188,-3.595973,-0.346391,-0.426453, -0.982334,-0.04331,-0.182057,-3.569993,-0.731989,-0.649435, -0.896964,-0.287307,-0.336022,-3.665774,-0.73408,-0.446286, -0.896964,-0.287307,-0.336022,-3.665774,-0.73408,-0.446286, -0.982334,-0.04331,-0.182057,-3.569993,-0.731989,-0.649435, -0.995081,-0.092251,0.036114,-3.55012,-0.984868,-0.675228, -0.896964,-0.287307,-0.336022,-3.665774,-0.73408,-0.446286, -0.995081,-0.092251,0.036114,-3.55012,-0.984868,-0.675228, -0.815087,-0.388053,-0.430171,-3.667859,-0.964867,-0.464702, -0.815087,-0.388053,-0.430171,-3.667859,-0.964867,-0.464702, -0.995081,-0.092251,0.036114,-3.55012,-0.984868,-0.675228, -0.938884,0.007108,-0.344159,-3.492599,-1.180646,-0.692282, -0.815087,-0.388053,-0.430171,-3.667859,-0.964867,-0.464702, -0.938884,0.007108,-0.344159,-3.492599,-1.180646,-0.692282, -0.98615,-0.150918,-0.068783,-3.631179,-1.157838,-0.50561, -0.98615,-0.150918,-0.068783,-3.631179,-1.157838,-0.50561, -0.938884,0.007108,-0.344159,-3.492599,-1.180646,-0.692282, -0.782249,0.198377,-0.590536,-3.335942,-1.365685,-0.72459, -0.98615,-0.150918,-0.068783,-3.631179,-1.157838,-0.50561, -0.782249,0.198377,-0.590536,-3.335942,-1.365685,-0.72459, -0.581301,-0.608503,0.540197,-3.53391,-1.330455,-0.568246, -0.581301,-0.608503,0.540197,-3.53391,-1.330455,-0.568246, -0.782249,0.198377,-0.590536,-3.335942,-1.365685,-0.72459, -0.354058,-0.732075,0.581987,-3.387254,-1.486027,-0.672861, -0.743901,0.102645,-0.66036,-3.415655,-0.308965,-0.671045, -0.984416,-0.175855,-0.000915,-3.283698,-0.730967,-0.793898, -0.681141,-0.040116,-0.731052,-3.438226,-0.721479,-0.728141, -0.908258,0.139498,-0.394471,-3.470778,-0.078218,-0.546398, -0.743901,0.102645,-0.66036,-3.415655,-0.308965,-0.671045, -0.985615,0.064121,-0.156369,-3.526766,-0.317542,-0.560837, -0.985615,0.064121,-0.156369,-3.526766,-0.317542,-0.560837, -0.743901,0.102645,-0.66036,-3.415655,-0.308965,-0.671045, -0.681141,-0.040116,-0.731052,-3.438226,-0.721479,-0.728141, -0.985615,0.064121,-0.156369,-3.526766,-0.317542,-0.560837, -0.681141,-0.040116,-0.731052,-3.438226,-0.721479,-0.728141, -0.982334,-0.04331,-0.182057,-3.569993,-0.731989,-0.649435, -0.982334,-0.04331,-0.182057,-3.569993,-0.731989,-0.649435, -0.681141,-0.040116,-0.731052,-3.438226,-0.721479,-0.728141, -0.605564,-0.17532,-0.776244,-3.355398,-0.969157,-0.766213, -0.982334,-0.04331,-0.182057,-3.569993,-0.731989,-0.649435, -0.605564,-0.17532,-0.776244,-3.355398,-0.969157,-0.766213, -0.995081,-0.092251,0.036114,-3.55012,-0.984868,-0.675228, -0.995081,-0.092251,0.036114,-3.55012,-0.984868,-0.675228, -0.605564,-0.17532,-0.776244,-3.355398,-0.969157,-0.766213, -0.823768,0.005745,-0.566899,-3.27979,-1.162072,-0.784602, -0.995081,-0.092251,0.036114,-3.55012,-0.984868,-0.675228, -0.823768,0.005745,-0.566899,-3.27979,-1.162072,-0.784602, -0.938884,0.007108,-0.344159,-3.492599,-1.180646,-0.692282, -0.938884,0.007108,-0.344159,-3.492599,-1.180646,-0.692282, -0.823768,0.005745,-0.566899,-3.27979,-1.162072,-0.784602, -0.782249,0.198377,-0.590536,-3.335942,-1.365685,-0.72459, -0.823768,0.005745,-0.566899,-3.27979,-1.162072,-0.784602, -0.605564,-0.17532,-0.776244,-3.355398,-0.969157,-0.766213, -0.838192,0.000365,-0.545375,-3.25121,-0.948205,-0.819868, -0.971344,0.144305,-0.188856,-3.536654,0.442277,-0.322, -0.57342,0.819261,0,-3.544507,0.467147,0, -0.989276,0.146061,0,-3.566995,0.656967,0, -0.971344,0.144305,-0.188856,-3.536654,0.442277,-0.322, -0.989276,0.146061,0,-3.566995,0.656967,0, -0.472479,0.093412,-0.876377,-3.556552,0.704883,-0.28063, -0.472479,0.093412,-0.876377,-3.556552,0.704883,-0.28063, -0.989276,0.146061,0,-3.566995,0.656967,0, -0.989171,0.146765,0,-3.599077,0.796217,0, -0.472479,0.093412,-0.876377,-3.556552,0.704883,-0.28063, -0.989171,0.146765,0,-3.599077,0.796217,0, -0.43302,-0.02622,-0.901003,-3.57817,0.837714,-0.288502, -0.838192,0.000365,-0.545375,-3.25121,-0.948205,-0.819868, -0.605564,-0.17532,-0.776244,-3.355398,-0.969157,-0.766213, -0.681141,-0.040116,-0.731052,-3.438226,-0.721479,-0.728141, -0.838192,0.000365,-0.545375,-3.25121,-0.948205,-0.819868, -0.681141,-0.040116,-0.731052,-3.438226,-0.721479,-0.728141, -0.984416,-0.175855,-0.000915,-3.283698,-0.730967,-0.793898, 0.493535,-0.729115,-0.474147,-1.88316,-1.829718,-0.401567, 0.728068,-0.191899,0.658097,-1.933565,-1.993029,-0.438902, 0.313565,-0.18353,0.931662,-1.971059,-1.992958,-0.500845, 0.493535,-0.729115,-0.474147,-1.88316,-1.829718,-0.401567, 0.313565,-0.18353,0.931662,-1.971059,-1.992958,-0.500845, 0.04422,-0.704109,-0.708714,-1.936032,-1.829617,-0.488916, 0.04422,-0.704109,-0.708714,-1.936032,-1.829617,-0.488916, 0.313565,-0.18353,0.931662,-1.971059,-1.992958,-0.500845, 0.537835,-0.193789,0.820475,-2.03574,-1.981182,-0.547873, 0.04422,-0.704109,-0.708714,-1.936032,-1.829617,-0.488916, 0.537835,-0.193789,0.820475,-2.03574,-1.981182,-0.547873, 0.083262,-0.787311,-0.610907,-2.027242,-1.813012,-0.555232, 0.083262,-0.787311,-0.610907,-2.027242,-1.813012,-0.555232, 0.537835,-0.193789,0.820475,-2.03574,-1.981182,-0.547873, 0.908243,-0.229695,-0.349765,-2.106039,-2.019111,-0.510759, 0.083262,-0.787311,-0.610907,-2.027242,-1.813012,-0.555232, 0.908243,-0.229695,-0.349765,-2.106039,-2.019111,-0.510759, 0.170756,-0.748007,-0.641349,-2.126375,-1.866497,-0.502895, 0.170756,-0.748007,-0.641349,-2.126375,-1.866497,-0.502895, 0.908243,-0.229695,-0.349765,-2.106039,-2.019111,-0.510759, 0.701057,-0.210559,-0.68131,-2.141621,-2.024301,-0.470257, 0.170756,-0.748007,-0.641349,-2.126375,-1.866497,-0.502895, 0.701057,-0.210559,-0.68131,-2.141621,-2.024301,-0.470257, 0.64791,-0.754869,0.101909,-2.176551,-1.873816,-0.445782, 0.64791,-0.754869,0.101909,-2.176551,-1.873816,-0.445782, 0.701057,-0.210559,-0.68131,-2.141621,-2.024301,-0.470257, 0.129519,-0.132707,-0.982656,-2.120746,-2.045137,-0.411171, 0.64791,-0.754869,0.101909,-2.176551,-1.873816,-0.445782, 0.129519,-0.132707,-0.982656,-2.120746,-2.045137,-0.411171, -0.393694,-0.919049,0.018795,-2.147113,-1.903198,-0.362462, -0.393694,-0.919049,0.018795,-2.147113,-1.903198,-0.362462, 0.129519,-0.132707,-0.982656,-2.120746,-2.045137,-0.411171, -0.276108,-0.088024,-0.957087,-2.060902,-2.031698,-0.372079, -0.393694,-0.919049,0.018795,-2.147113,-1.903198,-0.362462, -0.276108,-0.088024,-0.957087,-2.060902,-2.031698,-0.372079, -0.327707,-0.94199,0.072547,-2.062725,-1.884246,-0.307336, -0.327707,-0.94199,0.072547,-2.062725,-1.884246,-0.307336, -0.276108,-0.088024,-0.957087,-2.060902,-2.031698,-0.372079, -0.40904,-0.077842,-0.90919,-1.978344,-2.023535,-0.398257, -0.327707,-0.94199,0.072547,-2.062725,-1.884246,-0.307336, -0.40904,-0.077842,-0.90919,-1.978344,-2.023535,-0.398257, -0.163041,-0.980692,0.107986,-1.946306,-1.872735,-0.344251, -0.163041,-0.980692,0.107986,-1.946306,-1.872735,-0.344251, -0.40904,-0.077842,-0.90919,-1.978344,-2.023535,-0.398257, 0.728068,-0.191899,0.658097,-1.933565,-1.993029,-0.438902, -0.163041,-0.980692,0.107986,-1.946306,-1.872735,-0.344251, 0.728068,-0.191899,0.658097,-1.933565,-1.993029,-0.438902, 0.493535,-0.729115,-0.474147,-1.88316,-1.829718,-0.401567, 0.183908,-0.773381,-0.606679,-2.446375,-1.893261,-0.49411, 0.50178,0.000639,0.864995,-2.499138,-2.03809,-0.504529, 0.300485,0.019099,0.953595,-2.513608,-2.012858,-0.558673, 0.183908,-0.773381,-0.606679,-2.446375,-1.893261,-0.49411, 0.300485,0.019099,0.953595,-2.513608,-2.012858,-0.558673, 0.018755,-0.837462,-0.546174,-2.466779,-1.857679,-0.570461, 0.018755,-0.837462,-0.546174,-2.466779,-1.857679,-0.570461, 0.300485,0.019099,0.953595,-2.513608,-2.012858,-0.558673, 0.678632,-0.017853,0.734261,-2.571019,-1.995375,-0.58623, 0.018755,-0.837462,-0.546174,-2.466779,-1.857679,-0.570461, 0.678632,-0.017853,0.734261,-2.571019,-1.995375,-0.58623, -0.094688,-0.959937,-0.263734,-2.547737,-1.833025,-0.609321, -0.094688,-0.959937,-0.263734,-2.547737,-1.833025,-0.609321, 0.678632,-0.017853,0.734261,-2.571019,-1.995375,-0.58623, 0.687126,-0.68509,-0.241887,-2.641567,-2.003164,-0.575611, -0.094688,-0.959937,-0.263734,-2.547737,-1.833025,-0.609321, 0.687126,-0.68509,-0.241887,-2.641567,-2.003164,-0.575611, 0.059023,-0.965365,-0.25414,-2.64722,-1.84401,-0.594347, 0.059023,-0.965365,-0.25414,-2.64722,-1.84401,-0.594347, 0.687126,-0.68509,-0.241887,-2.641567,-2.003164,-0.575611, 0.260319,-0.908993,0.325523,-2.678971,-2.007694,-0.558395, 0.059023,-0.965365,-0.25414,-2.64722,-1.84401,-0.594347, 0.260319,-0.908993,0.325523,-2.678971,-2.007694,-0.558395, 0.49176,-0.810764,-0.317543,-2.699966,-1.850397,-0.57007, 0.49176,-0.810764,-0.317543,-2.699966,-1.850397,-0.57007, 0.260319,-0.908993,0.325523,-2.678971,-2.007694,-0.558395, -0.148191,-0.901516,0.40658,-2.685663,-2.028649,-0.514928, 0.49176,-0.810764,-0.317543,-2.699966,-1.850397,-0.57007, -0.148191,-0.901516,0.40658,-2.685663,-2.028649,-0.514928, 0.099157,-0.476834,-0.873383,-2.709403,-1.879947,-0.508775, 0.099157,-0.476834,-0.873383,-2.709403,-1.879947,-0.508775, -0.148191,-0.901516,0.40658,-2.685663,-2.028649,-0.514928, -0.443612,-0.876487,0.187028,-2.667969,-2.036634,-0.471396, 0.099157,-0.476834,-0.873383,-2.709403,-1.879947,-0.508775, -0.443612,-0.876487,0.187028,-2.667969,-2.036634,-0.471396, -0.147229,-0.706225,-0.69251,-2.684452,-1.891207,-0.447388, -0.147229,-0.706225,-0.69251,-2.684452,-1.891207,-0.447388, -0.443612,-0.876487,0.187028,-2.667969,-2.036634,-0.471396, -0.508388,-0.837291,-0.20121,-2.618068,-2.046419,-0.441284, -0.147229,-0.706225,-0.69251,-2.684452,-1.891207,-0.447388, -0.508388,-0.837291,-0.20121,-2.618068,-2.046419,-0.441284, 0.328486,-0.940918,0.082286,-2.614084,-1.905005,-0.404925, 0.328486,-0.940918,0.082286,-2.614084,-1.905005,-0.404925, -0.508388,-0.837291,-0.20121,-2.618068,-2.046419,-0.441284, -0.409829,-0.525605,-0.745506,-2.539874,-2.049824,-0.460098, 0.328486,-0.940918,0.082286,-2.614084,-1.905005,-0.404925, -0.409829,-0.525605,-0.745506,-2.539874,-2.049824,-0.460098, -0.319475,-0.944225,-0.079844,-2.503818,-1.909806,-0.431456, -0.319475,-0.944225,-0.079844,-2.503818,-1.909806,-0.431456, -0.409829,-0.525605,-0.745506,-2.539874,-2.049824,-0.460098, 0.50178,0.000639,0.864995,-2.499138,-2.03809,-0.504529, -0.319475,-0.944225,-0.079844,-2.503818,-1.909806,-0.431456, 0.50178,0.000639,0.864995,-2.499138,-2.03809,-0.504529, 0.183908,-0.773381,-0.606679,-2.446375,-1.893261,-0.49411, -0.276108,-0.088024,-0.957087,-2.060902,-2.031698,-0.372079, 0.10009,-0.380026,-0.919545,-2.065655,-2.124623,-0.36872, -0.227573,-0.361149,-0.904313,-1.985123,-2.116661,-0.394256, -0.276108,-0.088024,-0.957087,-2.060902,-2.031698,-0.372079, -0.227573,-0.361149,-0.904313,-1.985123,-2.116661,-0.394256, -0.40904,-0.077842,-0.90919,-1.978344,-2.023535,-0.398257, 0.129519,-0.132707,-0.982656,-2.120746,-2.045137,-0.411171, 0.547733,-0.470267,-0.691981,-2.12403,-2.137733,-0.406853, 0.10009,-0.380026,-0.919545,-2.065655,-2.124623,-0.36872, 0.129519,-0.132707,-0.982656,-2.120746,-2.045137,-0.411171, 0.10009,-0.380026,-0.919545,-2.065655,-2.124623,-0.36872, -0.276108,-0.088024,-0.957087,-2.060902,-2.031698,-0.372079, 0.701057,-0.210559,-0.68131,-2.141621,-2.024301,-0.470257, -0.071182,-0.950841,-0.301389,-2.144393,-2.117408,-0.464489, 0.547733,-0.470267,-0.691981,-2.12403,-2.137733,-0.406853, 0.701057,-0.210559,-0.68131,-2.141621,-2.024301,-0.470257, 0.547733,-0.470267,-0.691981,-2.12403,-2.137733,-0.406853, 0.129519,-0.132707,-0.982656,-2.120746,-2.045137,-0.411171, 0.908243,-0.229695,-0.349765,-2.106039,-2.019111,-0.510759, 0.216748,0.039315,-0.975436,-2.109684,-2.112345,-0.503997, -0.071182,-0.950841,-0.301389,-2.144393,-2.117408,-0.464489, 0.908243,-0.229695,-0.349765,-2.106039,-2.019111,-0.510759, -0.071182,-0.950841,-0.301389,-2.144393,-2.117408,-0.464489, 0.701057,-0.210559,-0.68131,-2.141621,-2.024301,-0.470257, 0.537835,-0.193789,0.820475,-2.03574,-1.981182,-0.547873, 0.555949,0.246865,-0.793712,-2.04111,-2.075348,-0.540201, 0.216748,0.039315,-0.975436,-2.109684,-2.112345,-0.503997, 0.537835,-0.193789,0.820475,-2.03574,-1.981182,-0.547873, 0.216748,0.039315,-0.975436,-2.109684,-2.112345,-0.503997, 0.908243,-0.229695,-0.349765,-2.106039,-2.019111,-0.510759, 0.313565,-0.18353,0.931662,-1.971059,-1.992958,-0.500845, 0.768311,0.202351,-0.60725,-1.978016,-2.086834,-0.494327, 0.555949,0.246865,-0.793712,-2.04111,-2.075348,-0.540201, 0.313565,-0.18353,0.931662,-1.971059,-1.992958,-0.500845, 0.555949,0.246865,-0.793712,-2.04111,-2.075348,-0.540201, 0.537835,-0.193789,0.820475,-2.03574,-1.981182,-0.547873, 0.728068,-0.191899,0.658097,-1.933565,-1.993029,-0.438902, 0.833232,0.046883,-0.550932,-1.941442,-2.086904,-0.433904, 0.768311,0.202351,-0.60725,-1.978016,-2.086834,-0.494327, 0.728068,-0.191899,0.658097,-1.933565,-1.993029,-0.438902, 0.768311,0.202351,-0.60725,-1.978016,-2.086834,-0.494327, 0.313565,-0.18353,0.931662,-1.971059,-1.992958,-0.500845, -0.40904,-0.077842,-0.90919,-1.978344,-2.023535,-0.398257, -0.227573,-0.361149,-0.904313,-1.985123,-2.116661,-0.394256, 0.833232,0.046883,-0.550932,-1.941442,-2.086904,-0.433904, -0.40904,-0.077842,-0.90919,-1.978344,-2.023535,-0.398257, 0.833232,0.046883,-0.550932,-1.941442,-2.086904,-0.433904, 0.728068,-0.191899,0.658097,-1.933565,-1.993029,-0.438902, -0.409829,-0.525605,-0.745506,-2.539874,-2.049824,-0.460098, 0.213243,-0.278119,-0.936578,-2.552923,-2.142304,-0.454579, 0.587809,-0.328911,-0.73912,-2.513187,-2.130859,-0.49792, -0.409829,-0.525605,-0.745506,-2.539874,-2.049824,-0.460098, 0.587809,-0.328911,-0.73912,-2.513187,-2.130859,-0.49792, 0.50178,0.000639,0.864995,-2.499138,-2.03809,-0.504529, -0.508388,-0.837291,-0.20121,-2.618068,-2.046419,-0.441284, 0.794828,0.083381,-0.601079,-2.629199,-2.138983,-0.436227, 0.213243,-0.278119,-0.936578,-2.552923,-2.142304,-0.454579, -0.508388,-0.837291,-0.20121,-2.618068,-2.046419,-0.441284, 0.213243,-0.278119,-0.936578,-2.552923,-2.142304,-0.454579, -0.409829,-0.525605,-0.745506,-2.539874,-2.049824,-0.460098, -0.443612,-0.876487,0.187028,-2.667969,-2.036634,-0.471396, 0.873201,-0.04546,-0.485236,-2.677875,-2.129439,-0.4656, 0.794828,0.083381,-0.601079,-2.629199,-2.138983,-0.436227, -0.443612,-0.876487,0.187028,-2.667969,-2.036634,-0.471396, 0.794828,0.083381,-0.601079,-2.629199,-2.138983,-0.436227, -0.508388,-0.837291,-0.20121,-2.618068,-2.046419,-0.441284, -0.148191,-0.901516,0.40658,-2.685663,-2.028649,-0.514928, 0.829377,-0.173624,-0.531026,-2.695135,-2.12165,-0.508064, 0.873201,-0.04546,-0.485236,-2.677875,-2.129439,-0.4656, -0.148191,-0.901516,0.40658,-2.685663,-2.028649,-0.514928, 0.873201,-0.04546,-0.485236,-2.677875,-2.129439,-0.4656, -0.443612,-0.876487,0.187028,-2.667969,-2.036634,-0.471396, 0.260319,-0.908993,0.325523,-2.678971,-2.007694,-0.558395, 0.506864,-0.193035,-0.840135,-2.688607,-2.101208,-0.550465, 0.829377,-0.173624,-0.531026,-2.695135,-2.12165,-0.508064, 0.260319,-0.908993,0.325523,-2.678971,-2.007694,-0.558395, 0.829377,-0.173624,-0.531026,-2.695135,-2.12165,-0.508064, -0.148191,-0.901516,0.40658,-2.685663,-2.028649,-0.514928, 0.687126,-0.68509,-0.241887,-2.641567,-2.003164,-0.575611, 0.166377,-0.157108,-0.973466,-2.65212,-2.09679,-0.567258, 0.506864,-0.193035,-0.840135,-2.688607,-2.101208,-0.550465, 0.687126,-0.68509,-0.241887,-2.641567,-2.003164,-0.575611, 0.506864,-0.193035,-0.840135,-2.688607,-2.101208,-0.550465, 0.260319,-0.908993,0.325523,-2.678971,-2.007694,-0.558395, 0.678632,-0.017853,0.734261,-2.571019,-1.995375,-0.58623, 0.054863,-0.132815,-0.989621,-2.583303,-2.089191,-0.577616, 0.166377,-0.157108,-0.973466,-2.65212,-2.09679,-0.567258, 0.678632,-0.017853,0.734261,-2.571019,-1.995375,-0.58623, 0.166377,-0.157108,-0.973466,-2.65212,-2.09679,-0.567258, 0.687126,-0.68509,-0.241887,-2.641567,-2.003164,-0.575611, 0.300485,0.019099,0.953595,-2.513608,-2.012858,-0.558673, 0.238844,0.101951,-0.965691,-2.527301,-2.106246,-0.550735, 0.054863,-0.132815,-0.989621,-2.583303,-2.089191,-0.577616, 0.300485,0.019099,0.953595,-2.513608,-2.012858,-0.558673, 0.054863,-0.132815,-0.989621,-2.583303,-2.089191,-0.577616, 0.678632,-0.017853,0.734261,-2.571019,-1.995375,-0.58623, 0.50178,0.000639,0.864995,-2.499138,-2.03809,-0.504529, 0.587809,-0.328911,-0.73912,-2.513187,-2.130859,-0.49792, 0.238844,0.101951,-0.965691,-2.527301,-2.106246,-0.550735, 0.50178,0.000639,0.864995,-2.499138,-2.03809,-0.504529, 0.238844,0.101951,-0.965691,-2.527301,-2.106246,-0.550735, 0.300485,0.019099,0.953595,-2.513608,-2.012858,-0.558673, 0.768311,0.202351,-0.60725,-1.978016,-2.086834,-0.494327, 0.833232,0.046883,-0.550932,-1.941442,-2.086904,-0.433904, 0.604307,0.204357,-0.770098,-2.048681,-2.165282,-0.450843, 0.555949,0.246865,-0.793712,-2.04111,-2.075348,-0.540201, 0.768311,0.202351,-0.60725,-1.978016,-2.086834,-0.494327, 0.604307,0.204357,-0.770098,-2.048681,-2.165282,-0.450843, 0.216748,0.039315,-0.975436,-2.109684,-2.112345,-0.503997, 0.555949,0.246865,-0.793712,-2.04111,-2.075348,-0.540201, 0.604307,0.204357,-0.770098,-2.048681,-2.165282,-0.450843, -0.071182,-0.950841,-0.301389,-2.144393,-2.117408,-0.464489, 0.216748,0.039315,-0.975436,-2.109684,-2.112345,-0.503997, 0.604307,0.204357,-0.770098,-2.048681,-2.165282,-0.450843, 0.547733,-0.470267,-0.691981,-2.12403,-2.137733,-0.406853, -0.071182,-0.950841,-0.301389,-2.144393,-2.117408,-0.464489, 0.604307,0.204357,-0.770098,-2.048681,-2.165282,-0.450843, 0.10009,-0.380026,-0.919545,-2.065655,-2.124623,-0.36872, 0.547733,-0.470267,-0.691981,-2.12403,-2.137733,-0.406853, 0.604307,0.204357,-0.770098,-2.048681,-2.165282,-0.450843, -0.227573,-0.361149,-0.904313,-1.985123,-2.116661,-0.394256, 0.10009,-0.380026,-0.919545,-2.065655,-2.124623,-0.36872, 0.604307,0.204357,-0.770098,-2.048681,-2.165282,-0.450843, 0.833232,0.046883,-0.550932,-1.941442,-2.086904,-0.433904, -0.227573,-0.361149,-0.904313,-1.985123,-2.116661,-0.394256, 0.604307,0.204357,-0.770098,-2.048681,-2.165282,-0.450843, 0.238844,0.101951,-0.965691,-2.527301,-2.106246,-0.550735, 0.587809,-0.328911,-0.73912,-2.513187,-2.130859,-0.49792, 0.02054,-0.128179,-0.991538,-2.603284,-2.176802,-0.510638, 0.054863,-0.132815,-0.989621,-2.583303,-2.089191,-0.577616, 0.238844,0.101951,-0.965691,-2.527301,-2.106246,-0.550735, 0.02054,-0.128179,-0.991538,-2.603284,-2.176802,-0.510638, 0.166377,-0.157108,-0.973466,-2.65212,-2.09679,-0.567258, 0.054863,-0.132815,-0.989621,-2.583303,-2.089191,-0.577616, 0.02054,-0.128179,-0.991538,-2.603284,-2.176802,-0.510638, 0.506864,-0.193035,-0.840135,-2.688607,-2.101208,-0.550465, 0.166377,-0.157108,-0.973466,-2.65212,-2.09679,-0.567258, 0.02054,-0.128179,-0.991538,-2.603284,-2.176802,-0.510638, 0.829377,-0.173624,-0.531026,-2.695135,-2.12165,-0.508064, 0.506864,-0.193035,-0.840135,-2.688607,-2.101208,-0.550465, 0.02054,-0.128179,-0.991538,-2.603284,-2.176802,-0.510638, 0.873201,-0.04546,-0.485236,-2.677875,-2.129439,-0.4656, 0.829377,-0.173624,-0.531026,-2.695135,-2.12165,-0.508064, 0.02054,-0.128179,-0.991538,-2.603284,-2.176802,-0.510638, 0.794828,0.083381,-0.601079,-2.629199,-2.138983,-0.436227, 0.873201,-0.04546,-0.485236,-2.677875,-2.129439,-0.4656, 0.02054,-0.128179,-0.991538,-2.603284,-2.176802,-0.510638, 0.213243,-0.278119,-0.936578,-2.552923,-2.142304,-0.454579, 0.794828,0.083381,-0.601079,-2.629199,-2.138983,-0.436227, 0.02054,-0.128179,-0.991538,-2.603284,-2.176802,-0.510638, 0.587809,-0.328911,-0.73912,-2.513187,-2.130859,-0.49792, 0.213243,-0.278119,-0.936578,-2.552923,-2.142304,-0.454579, 0.02054,-0.128179,-0.991538,-2.603284,-2.176802,-0.510638, -0.012978,-0.998326,0.056357,-3.139394,-1.687482,-0.638546, 0.579344,-0.339433,0.741044,-3.008323,-1.759271,-0.655672, -0.073547,-0.481419,-0.8734,-2.941731,-1.787431,-0.442574, -0.012978,-0.998326,0.056357,-3.139394,-1.687482,-0.638546, -0.073547,-0.481419,-0.8734,-2.941731,-1.787431,-0.442574, 0.074429,-0.99521,0.063385,-3.120907,-1.707924,-0.431829, 0.579344,-0.339433,0.741044,-3.008323,-1.759271,-0.655672, 0.099157,-0.476834,-0.873383,-2.709403,-1.879947,-0.508775, -0.073547,-0.481419,-0.8734,-2.941731,-1.787431,-0.442574, 0.579344,-0.339433,0.741044,-3.008323,-1.759271,-0.655672, 0.43907,-0.579988,-0.686171,-2.811581,-1.79821,-0.712737, 0.49176,-0.810764,-0.317543,-2.699966,-1.850397,-0.57007, 0.579344,-0.339433,0.741044,-3.008323,-1.759271,-0.655672, 0.49176,-0.810764,-0.317543,-2.699966,-1.850397,-0.57007, 0.099157,-0.476834,-0.873383,-2.709403,-1.879947,-0.508775, -0.822733,0.223687,0.522565,-2.306662,-1.116976,0.961238, -0.950882,-0.075567,0.300188,-2.119856,-1.1288,0.97096, -0.619245,-0.050391,0.783579,-2.033406,-0.91003,0.96422, -0.993498,0.089934,0.06981,-2.031698,-1.097344,0.966701, -0.619245,-0.050391,0.783579,-2.033406,-0.91003,0.96422, -0.950882,-0.075567,0.300188,-2.119856,-1.1288,0.97096, -0.379807,-0.084066,0.921238,-1.782298,-1.020581,0.943381, -0.619245,-0.050391,0.783579,-2.033406,-0.91003,0.96422, -0.993498,0.089934,0.06981,-2.031698,-1.097344,0.966701, -0.9775,0.159844,0.137638,-2.337617,-1.334842,0.966761, -0.822733,0.223687,0.522565,-2.306662,-1.116976,0.961238, -0.951862,0.098243,0.290356,-2.462835,-1.3055,0.966395, -0.923845,0.18432,0.335466,-2.161843,-1.325837,0.957465, -0.950882,-0.075567,0.300188,-2.119856,-1.1288,0.97096, -0.822733,0.223687,0.522565,-2.306662,-1.116976,0.961238, -0.923845,0.18432,0.335466,-2.161843,-1.325837,0.957465, -0.822733,0.223687,0.522565,-2.306662,-1.116976,0.961238, -0.9775,0.159844,0.137638,-2.337617,-1.334842,0.966761, -0.971344,0.144305,0.188856,-2.042059,-1.312976,0.940911, -0.993498,0.089934,0.06981,-2.031698,-1.097344,0.966701, -0.950882,-0.075567,0.300188,-2.119856,-1.1288,0.97096, -0.971344,0.144305,0.188856,-2.042059,-1.312976,0.940911, -0.950882,-0.075567,0.300188,-2.119856,-1.1288,0.97096, -0.923845,0.18432,0.335466,-2.161843,-1.325837,0.957465, -0.908258,0.139498,0.394471,-1.776785,-1.275107,0.914703, -0.379807,-0.084066,0.921238,-1.782298,-1.020581,0.943381, -0.993498,0.089934,0.06981,-2.031698,-1.097344,0.966701, -0.908258,0.139498,0.394471,-1.776785,-1.275107,0.914703, -0.993498,0.089934,0.06981,-2.031698,-1.097344,0.966701, -0.971344,0.144305,0.188856,-2.042059,-1.312976,0.940911, -0.985615,0.064121,0.156369,-1.709172,-1.283232,0.897427, -0.379807,-0.084066,0.921238,-1.782298,-1.020581,0.943381, -0.908258,0.139498,0.394471,-1.776785,-1.275107,0.914703, -0.982334,-0.04331,0.182057,-1.456655,-1.295527,0.89424, -0.379807,-0.084066,0.921238,-1.782298,-1.020581,0.943381, -0.985615,0.064121,0.156369,-1.709172,-1.283232,0.897427, -0.938884,0.007108,0.344159,-2.417777,-1.553136,0.887222, -0.9775,0.159844,0.137638,-2.337617,-1.334842,0.966761, -0.951862,0.098243,0.290356,-2.462835,-1.3055,0.966395, -0.938884,0.007108,0.344159,-2.417777,-1.553136,0.887222, -0.951862,0.098243,0.290356,-2.462835,-1.3055,0.966395, -0.995081,-0.092251,-0.036114,-2.591357,-1.510845,0.88547, -0.782249,0.198377,0.590536,-2.223917,-1.541268,0.87926, -0.923845,0.18432,0.335466,-2.161843,-1.325837,0.957465, -0.9775,0.159844,0.137638,-2.337617,-1.334842,0.966761, -0.782249,0.198377,0.590536,-2.223917,-1.541268,0.87926, -0.9775,0.159844,0.137638,-2.337617,-1.334842,0.966761, -0.938884,0.007108,0.344159,-2.417777,-1.553136,0.887222, -0.743901,0.102645,0.66036,-2.049879,-1.562369,0.829319, -0.971344,0.144305,0.188856,-2.042059,-1.312976,0.940911, -0.923845,0.18432,0.335466,-2.161843,-1.325837,0.957465, -0.743901,0.102645,0.66036,-2.049879,-1.562369,0.829319, -0.923845,0.18432,0.335466,-2.161843,-1.325837,0.957465, -0.782249,0.198377,0.590536,-2.223917,-1.541268,0.87926, -0.605564,-0.17532,0.776244,-1.778934,-1.550199,0.776454, -0.681141,-0.040116,0.731052,-1.777628,-1.473076,0.845827, -0.971344,0.144305,0.188856,-2.042059,-1.312976,0.940911, -0.605564,-0.17532,0.776244,-1.778934,-1.550199,0.776454, -0.971344,0.144305,0.188856,-2.042059,-1.312976,0.940911, -0.743901,0.102645,0.66036,-2.049879,-1.562369,0.829319, -0.908258,0.139498,0.394471,-1.776785,-1.275107,0.914703, -0.971344,0.144305,0.188856,-2.042059,-1.312976,0.940911, -0.681141,-0.040116,0.731052,-1.777628,-1.473076,0.845827, -0.823768,0.005745,0.566899,-1.686329,-1.414405,0.869373, -0.985615,0.064121,0.156369,-1.709172,-1.283232,0.897427, -0.908258,0.139498,0.394471,-1.776785,-1.275107,0.914703, -0.823768,0.005745,0.566899,-1.686329,-1.414405,0.869373, -0.908258,0.139498,0.394471,-1.776785,-1.275107,0.914703, -0.681141,-0.040116,0.731052,-1.777628,-1.473076,0.845827, -0.838192,0.000364,0.545375,-1.592146,-1.408592,0.838483, -0.982334,-0.04331,0.182057,-1.456655,-1.295527,0.89424, -0.985615,0.064121,0.156369,-1.709172,-1.283232,0.897427, -0.838192,0.000364,0.545375,-1.592146,-1.408592,0.838483, -0.985615,0.064121,0.156369,-1.709172,-1.283232,0.897427, -0.823768,0.005745,0.566899,-1.686329,-1.414405,0.869373, -0.472479,0.093413,0.876377,-1.552229,-1.555077,0.735708, -0.982334,-0.04331,0.182057,-1.456655,-1.295527,0.89424, -0.838192,0.000364,0.545375,-1.592146,-1.408592,0.838483, -0.838192,0.000364,0.545375,-1.592146,-1.408592,0.838483, -0.43302,-0.02622,0.901003,-1.659758,-1.544361,0.788181, -0.472479,0.093413,0.876377,-1.552229,-1.555077,0.735708, -0.823768,0.005745,0.566899,-1.686329,-1.414405,0.869373, -0.43302,-0.02622,0.901003,-1.659758,-1.544361,0.788181, -0.838192,0.000364,0.545375,-1.592146,-1.408592,0.838483, -0.681141,-0.040116,0.731052,-1.777628,-1.473076,0.845827, -0.605564,-0.17532,0.776244,-1.778934,-1.550199,0.776454, -0.43302,-0.02622,0.901003,-1.659758,-1.544361,0.788181, -0.681141,-0.040116,0.731052,-1.777628,-1.473076,0.845827, -0.43302,-0.02622,0.901003,-1.659758,-1.544361,0.788181, -0.823768,0.005745,0.566899,-1.686329,-1.414405,0.869373, -0.285709,0.130064,0.949449,-1.376186,-1.661988,0.718954, -0.311485,0.082882,0.94663,-1.366873,-1.340211,0.907567, -0.982334,-0.04331,0.182057,-1.456655,-1.295527,0.89424, -0.285709,0.130064,0.949449,-1.376186,-1.661988,0.718954, -0.982334,-0.04331,0.182057,-1.456655,-1.295527,0.89424, -0.472479,0.093413,0.876377,-1.552229,-1.555077,0.735708, -0.809154,0.004832,0.587577,-1.200688,-1.577575,0.799188, -0.742985,0.015712,0.669123,-1.198513,-1.456102,0.885435, -0.311485,0.082882,0.94663,-1.366873,-1.340211,0.907567, -0.809154,0.004832,0.587577,-1.200688,-1.577575,0.799188, -0.311485,0.082882,0.94663,-1.366873,-1.340211,0.907567, -0.285709,0.130064,0.949449,-1.376186,-1.661988,0.718954, -0.02449,0.224062,0.974267,-0.953236,-1.545941,0.89918, -0.742985,0.015712,0.669123,-1.198513,-1.456102,0.885435, -0.809154,0.004832,0.587577,-1.200688,-1.577575,0.799188, -0.285709,0.130064,0.949449,-1.376186,-1.661988,0.718954, 0.924702,-0.311563,0.218757,-1.480217,-1.6566,0.606638, -0.587909,-0.233166,0.774594,-1.397474,-1.693815,0.570541, -0.472479,0.093413,0.876377,-1.552229,-1.555077,0.735708, 0.924702,-0.311563,0.218757,-1.480217,-1.6566,0.606638, -0.285709,0.130064,0.949449,-1.376186,-1.661988,0.718954, 0.73827,-0.277136,0.614942,-1.601625,-1.593321,0.605607, 0.924702,-0.311563,0.218757,-1.480217,-1.6566,0.606638, -0.472479,0.093413,0.876377,-1.552229,-1.555077,0.735708, 0.366416,-0.175098,0.913827,-1.519339,-1.653776,0.501741, 0.924702,-0.311563,0.218757,-1.480217,-1.6566,0.606638, 0.73827,-0.277136,0.614942,-1.601625,-1.593321,0.605607, 0.023392,-0.110333,0.993619,-1.406693,-1.697325,0.450399, -0.587909,-0.233166,0.774594,-1.397474,-1.693815,0.570541, 0.924702,-0.311563,0.218757,-1.480217,-1.6566,0.606638, 0.023392,-0.110333,0.993619,-1.406693,-1.697325,0.450399, 0.924702,-0.311563,0.218757,-1.480217,-1.6566,0.606638, 0.366416,-0.175098,0.913827,-1.519339,-1.653776,0.501741, -0.157802,-0.148625,0.976222,-1.576196,-1.696317,0.358146, 0.366416,-0.175098,0.913827,-1.519339,-1.653776,0.501741, 0.73827,-0.277136,0.614942,-1.601625,-1.593321,0.605607, -0.279485,0.127803,0.951606,-1.386502,-1.718441,0.350823, 0.023392,-0.110333,0.993619,-1.406693,-1.697325,0.450399, 0.366416,-0.175098,0.913827,-1.519339,-1.653776,0.501741, -0.279485,0.127803,0.951606,-1.386502,-1.718441,0.350823, 0.366416,-0.175098,0.913827,-1.519339,-1.653776,0.501741, -0.157802,-0.148625,0.976222,-1.576196,-1.696317,0.358146, -0.157802,-0.148625,0.976222,-1.576196,-1.696317,0.358146, 0.106808,0.99428,0,-1.610025,-1.711571,0, 0.011286,0.999936,0,-1.395728,-1.723811,0, -0.157802,-0.148625,0.976222,-1.576196,-1.696317,0.358146, 0.011286,0.999936,0,-1.395728,-1.723811,0, -0.279485,0.127803,0.951606,-1.386502,-1.718441,0.350823, -0.661097,-0.258238,0.70446,-1.764045,-1.764987,0.406586, -0.160087,-0.987103,0,-1.799827,-1.753136,0, 0.106808,0.99428,0,-1.610025,-1.711571,0, -0.661097,-0.258238,0.70446,-1.764045,-1.764987,0.406586, 0.106808,0.99428,0,-1.610025,-1.711571,0, -0.157802,-0.148625,0.976222,-1.576196,-1.696317,0.358146, -0.157802,-0.148625,0.976222,-1.576196,-1.696317,0.358146, 0.73827,-0.277136,0.614942,-1.601625,-1.593321,0.605607, -0.632119,-0.359381,0.686492,-1.74779,-1.667608,0.60634, -0.157802,-0.148625,0.976222,-1.576196,-1.696317,0.358146, -0.632119,-0.359381,0.686492,-1.74779,-1.667608,0.60634, -0.661097,-0.258238,0.70446,-1.764045,-1.764987,0.406586, -0.605564,-0.17532,0.776244,-1.778934,-1.550199,0.776454, -0.632119,-0.359381,0.686492,-1.74779,-1.667608,0.60634, 0.73827,-0.277136,0.614942,-1.601625,-1.593321,0.605607, 0.73827,-0.277136,0.614942,-1.601625,-1.593321,0.605607, -0.43302,-0.02622,0.901003,-1.659758,-1.544361,0.788181, -0.605564,-0.17532,0.776244,-1.778934,-1.550199,0.776454, -0.472479,0.093413,0.876377,-1.552229,-1.555077,0.735708, -0.43302,-0.02622,0.901003,-1.659758,-1.544361,0.788181, 0.73827,-0.277136,0.614942,-1.601625,-1.593321,0.605607, 0.772916,-0.305378,0.556188,-2.508885,-1.719933,0.721675, -0.938884,0.007108,0.344159,-2.417777,-1.553136,0.887222, -0.995081,-0.092251,-0.036114,-2.591357,-1.510845,0.88547, 0.772916,-0.305378,0.556188,-2.508885,-1.719933,0.721675, -0.995081,-0.092251,-0.036114,-2.591357,-1.510845,0.88547, 0.942117,-0.292664,0.163592,-2.734184,-1.717948,0.749581, 0.38578,-0.259547,0.88533,-2.267049,-1.753901,0.662106, -0.782249,0.198377,0.590536,-2.223917,-1.541268,0.87926, -0.938884,0.007108,0.344159,-2.417777,-1.553136,0.887222, 0.38578,-0.259547,0.88533,-2.267049,-1.753901,0.662106, -0.938884,0.007108,0.344159,-2.417777,-1.553136,0.887222, 0.772916,-0.305378,0.556188,-2.508885,-1.719933,0.721675, 0.02992,-0.202031,0.978922,-2.037371,-1.73636,0.656787, -0.743901,0.102645,0.66036,-2.049879,-1.562369,0.829319, -0.782249,0.198377,0.590536,-2.223917,-1.541268,0.87926, 0.02992,-0.202031,0.978922,-2.037371,-1.73636,0.656787, -0.782249,0.198377,0.590536,-2.223917,-1.541268,0.87926, 0.38578,-0.259547,0.88533,-2.267049,-1.753901,0.662106, -0.632119,-0.359381,0.686492,-1.74779,-1.667608,0.60634, -0.605564,-0.17532,0.776244,-1.778934,-1.550199,0.776454, -0.743901,0.102645,0.66036,-2.049879,-1.562369,0.829319, -0.632119,-0.359381,0.686492,-1.74779,-1.667608,0.60634, -0.743901,0.102645,0.66036,-2.049879,-1.562369,0.829319, 0.02992,-0.202031,0.978922,-2.037371,-1.73636,0.656787, -0.498756,-0.224101,0.83727,-1.936032,-1.829617,0.488916, -0.239734,-0.173966,0.955125,-1.88316,-1.829718,0.401567, -0.661097,-0.258238,0.70446,-1.764045,-1.764987,0.406586, -0.498756,-0.224101,0.83727,-1.936032,-1.829617,0.488916, -0.661097,-0.258238,0.70446,-1.764045,-1.764987,0.406586, -0.632119,-0.359381,0.686492,-1.74779,-1.667608,0.60634, -0.632119,-0.359381,0.686492,-1.74779,-1.667608,0.60634, 0.02992,-0.202031,0.978922,-2.037371,-1.73636,0.656787, -0.759627,-0.28527,0.584455,-2.027242,-1.813012,0.555232, -0.632119,-0.359381,0.686492,-1.74779,-1.667608,0.60634, -0.759627,-0.28527,0.584455,-2.027242,-1.813012,0.555232, -0.498756,-0.224101,0.83727,-1.936032,-1.829617,0.488916, 0.38578,-0.259547,0.88533,-2.267049,-1.753901,0.662106, -0.672688,-0.442616,0.592944,-2.126375,-1.866497,0.502895, -0.759627,-0.28527,0.584455,-2.027242,-1.813012,0.555232, 0.38578,-0.259547,0.88533,-2.267049,-1.753901,0.662106, -0.759627,-0.28527,0.584455,-2.027242,-1.813012,0.555232, 0.02992,-0.202031,0.978922,-2.037371,-1.73636,0.656787, 0.80128,-0.303744,0.515451,-2.317557,-1.8742,0.470587, 0.954473,-0.270031,0.126745,-2.176551,-1.873816,0.445782, -0.672688,-0.442616,0.592944,-2.126375,-1.866497,0.502895, 0.80128,-0.303744,0.515451,-2.317557,-1.8742,0.470587, -0.672688,-0.442616,0.592944,-2.126375,-1.866497,0.502895, 0.38578,-0.259547,0.88533,-2.267049,-1.753901,0.662106, 0.38578,-0.259547,0.88533,-2.267049,-1.753901,0.662106, 0.080262,-0.270606,0.959339,-2.466779,-1.857679,0.570461, 0.441315,-0.29978,0.845797,-2.446375,-1.893261,0.49411, 0.38578,-0.259547,0.88533,-2.267049,-1.753901,0.662106, 0.441315,-0.29978,0.845797,-2.446375,-1.893261,0.49411, 0.80128,-0.303744,0.515451,-2.317557,-1.8742,0.470587, 0.772916,-0.305378,0.556188,-2.508885,-1.719933,0.721675, -0.247433,-0.24804,0.936618,-2.547737,-1.833025,0.609321, 0.080262,-0.270606,0.959339,-2.466779,-1.857679,0.570461, 0.772916,-0.305378,0.556188,-2.508885,-1.719933,0.721675, 0.080262,-0.270606,0.959339,-2.466779,-1.857679,0.570461, 0.38578,-0.259547,0.88533,-2.267049,-1.753901,0.662106, 0.942117,-0.292664,0.163592,-2.734184,-1.717948,0.749581, -0.587844,-0.244917,0.771009,-2.64722,-1.84401,0.594347, -0.247433,-0.24804,0.936618,-2.547737,-1.833025,0.609321, 0.942117,-0.292664,0.163592,-2.734184,-1.717948,0.749581, -0.247433,-0.24804,0.936618,-2.547737,-1.833025,0.609321, 0.772916,-0.305378,0.556188,-2.508885,-1.719933,0.721675, -0.732521,-0.474279,0.488336,-2.811581,-1.79821,0.712737, -0.845196,-0.27877,0.455994,-2.699966,-1.850397,0.57007, -0.587844,-0.244917,0.771009,-2.64722,-1.84401,0.594347, -0.732521,-0.474279,0.488336,-2.811581,-1.79821,0.712737, -0.587844,-0.244917,0.771009,-2.64722,-1.84401,0.594347, 0.942117,-0.292664,0.163592,-2.734184,-1.717948,0.749581, 0.0787,0.996898,0,-2.892162,-1.781087,0, 0.975634,-0.187231,-0.114377,-2.684452,-1.891207,0.447388, 0.972392,0.232654,0.018037,-2.709403,-1.879947,0.508775, 0.0787,0.996898,0,-2.892162,-1.781087,0, 0.972392,0.232654,0.018037,-2.709403,-1.879947,0.508775, 0.999491,-0.02584,0.01873,-2.941731,-1.787431,0.442574, 0.058013,0.998316,0,-2.656867,-1.853045,0, 0.985192,-0.12583,-0.116459,-2.614084,-1.905005,0.404925, 0.975634,-0.187231,-0.114377,-2.684452,-1.891207,0.447388, 0.058013,0.998316,0,-2.656867,-1.853045,0, 0.975634,-0.187231,-0.114377,-2.684452,-1.891207,0.447388, 0.0787,0.996898,0,-2.892162,-1.781087,0, 0.093777,0.995593,0,-2.348005,-1.869142,0, 0.996811,-0.048518,-0.063355,-2.503818,-1.909806,0.431456, 0.985192,-0.12583,-0.116459,-2.614084,-1.905005,0.404925, 0.093777,0.995593,0,-2.348005,-1.869142,0, 0.985192,-0.12583,-0.116459,-2.614084,-1.905005,0.404925, 0.058013,0.998316,0,-2.656867,-1.853045,0, 0.80128,-0.303744,0.515451,-2.317557,-1.8742,0.470587, 0.441315,-0.29978,0.845797,-2.446375,-1.893261,0.49411, 0.996811,-0.048518,-0.063355,-2.503818,-1.909806,0.431456, 0.80128,-0.303744,0.515451,-2.317557,-1.8742,0.470587, 0.996811,-0.048518,-0.063355,-2.503818,-1.909806,0.431456, 0.093777,0.995593,0,-2.348005,-1.869142,0, 0.093777,0.995593,0,-2.348005,-1.869142,0, 0.957938,-0.285979,0.023877,-2.147113,-1.903198,0.362462, 0.954473,-0.270031,0.126745,-2.176551,-1.873816,0.445782, 0.093777,0.995593,0,-2.348005,-1.869142,0, 0.954473,-0.270031,0.126745,-2.176551,-1.873816,0.445782, 0.80128,-0.303744,0.515451,-2.317557,-1.8742,0.470587, 0.149455,0.988769,0,-2.092921,-1.839622,0, -0.274087,0.000043,-0.961705,-2.062725,-1.884246,0.307336, 0.957938,-0.285979,0.023877,-2.147113,-1.903198,0.362462, 0.149455,0.988769,0,-2.092921,-1.839622,0, 0.957938,-0.285979,0.023877,-2.147113,-1.903198,0.362462, 0.093777,0.995593,0,-2.348005,-1.869142,0, -0.160087,-0.987103,0,-1.799827,-1.753136,0, 0.74023,-0.090866,0.666185,-1.946306,-1.872735,0.344251, -0.274087,0.000043,-0.961705,-2.062725,-1.884246,0.307336, -0.160087,-0.987103,0,-1.799827,-1.753136,0, -0.274087,0.000043,-0.961705,-2.062725,-1.884246,0.307336, 0.149455,0.988769,0,-2.092921,-1.839622,0, -0.661097,-0.258238,0.70446,-1.764045,-1.764987,0.406586, -0.239734,-0.173966,0.955125,-1.88316,-1.829718,0.401567, 0.74023,-0.090866,0.666185,-1.946306,-1.872735,0.344251, -0.661097,-0.258238,0.70446,-1.764045,-1.764987,0.406586, 0.74023,-0.090866,0.666185,-1.946306,-1.872735,0.344251, -0.160087,-0.987103,0,-1.799827,-1.753136,0, 0.830793,-0.244757,0.499877,-3.304804,-1.582192,0.643445, 0.846555,-0.103662,0.52211,-3.314868,-1.599081,0.439626, 0.820312,-0.193024,0.538358,-3.120907,-1.707924,0.431829, 0.830793,-0.244757,0.499877,-3.304804,-1.582192,0.643445, 0.820312,-0.193024,0.538358,-3.120907,-1.707924,0.431829, 0.843062,-0.10517,0.527433,-3.139394,-1.687482,0.638546, 0.290478,-0.146424,0.945612,-3.387254,-1.486027,0.672861, 0.159615,0.129847,0.978602,-3.442085,-1.48412,0.406377, 0.846555,-0.103662,0.52211,-3.314868,-1.599081,0.439626, 0.290478,-0.146424,0.945612,-3.387254,-1.486027,0.672861, 0.846555,-0.103662,0.52211,-3.314868,-1.599081,0.439626, 0.830793,-0.244757,0.499877,-3.304804,-1.582192,0.643445, 0.431429,-0.109339,0.895497,-3.53391,-1.330455,0.568246, 0.407719,-0.190267,0.893064,-3.557869,-1.325941,0.37803, 0.159615,0.129847,0.978602,-3.442085,-1.48412,0.406377, 0.431429,-0.109339,0.895497,-3.53391,-1.330455,0.568246, 0.159615,0.129847,0.978602,-3.442085,-1.48412,0.406377, 0.290478,-0.146424,0.945612,-3.387254,-1.486027,0.672861, 0.473622,-0.284001,0.833682,-3.631179,-1.157838,0.50561, 0.459595,-0.144347,0.87632,-3.639586,-1.140102,0.3338, 0.407719,-0.190267,0.893064,-3.557869,-1.325941,0.37803, 0.473622,-0.284001,0.833682,-3.631179,-1.157838,0.50561, 0.407719,-0.190267,0.893064,-3.557869,-1.325941,0.37803, 0.431429,-0.109339,0.895497,-3.53391,-1.330455,0.568246, -0.069043,-0.157333,0.985129,-3.667859,-0.964867,0.464702, 0.051664,-0.122235,0.991156,-3.686518,-0.955181,0.320349, 0.459595,-0.144347,0.87632,-3.639586,-1.140102,0.3338, -0.069043,-0.157333,0.985129,-3.667859,-0.964867,0.464702, 0.459595,-0.144347,0.87632,-3.639586,-1.140102,0.3338, 0.473622,-0.284001,0.833682,-3.631179,-1.157838,0.50561, 0.039,-0.185675,0.981837,-3.665774,-0.73408,0.446286, -0.051713,-0.100833,0.993559,-3.676599,-0.729578,0.330724, 0.051664,-0.122235,0.991156,-3.686518,-0.955181,0.320349, 0.039,-0.185675,0.981837,-3.665774,-0.73408,0.446286, 0.051664,-0.122235,0.991156,-3.686518,-0.955181,0.320349, -0.069043,-0.157333,0.985129,-3.667859,-0.964867,0.464702, -0.09542,0.162222,0.98213,-3.595973,-0.346391,0.426453, 0.109483,-0.310605,0.944213,-3.616627,-0.350374,0.338492, -0.051713,-0.100833,0.993559,-3.676599,-0.729578,0.330724, -0.09542,0.162222,0.98213,-3.595973,-0.346391,0.426453, -0.051713,-0.100833,0.993559,-3.676599,-0.729578,0.330724, 0.039,-0.185675,0.981837,-3.665774,-0.73408,0.446286, -0.246054,-0.154918,0.956796,-3.529709,-0.065998,0.437217, -0.211092,-0.082708,0.973961,-3.570243,-0.060093,0.344854, 0.109483,-0.310605,0.944213,-3.616627,-0.350374,0.338492, -0.246054,-0.154918,0.956796,-3.529709,-0.065998,0.437217, 0.109483,-0.310605,0.944213,-3.616627,-0.350374,0.338492, -0.09542,0.162222,0.98213,-3.595973,-0.346391,0.426453, -0.136917,-0.20176,0.969818,-3.51684,0.149002,0.430359, -0.176356,-0.113876,0.977717,-3.535416,0.191408,0.338478, -0.211092,-0.082708,0.973961,-3.570243,-0.060093,0.344854, -0.136917,-0.20176,0.969818,-3.51684,0.149002,0.430359, -0.211092,-0.082708,0.973961,-3.570243,-0.060093,0.344854, -0.246054,-0.154918,0.956796,-3.529709,-0.065998,0.437217, -0.17902,-0.308668,0.934171,-3.536654,0.442277,0.322, -0.176356,-0.113876,0.977717,-3.535416,0.191408,0.338478, -0.136917,-0.20176,0.969818,-3.51684,0.149002,0.430359, -0.57342,0.819261,0,-3.544507,0.467147,0, 0.170833,0.9853,0,-3.55232,0.219613,0, -0.176356,-0.113876,0.977717,-3.535416,0.191408,0.338478, -0.57342,0.819261,0,-3.544507,0.467147,0, -0.176356,-0.113876,0.977717,-3.535416,0.191408,0.338478, -0.17902,-0.308668,0.934171,-3.536654,0.442277,0.322, 0.614301,0.789071,-0.000581,-3.583763,-0.052271,0, -0.211092,-0.082708,0.973961,-3.570243,-0.060093,0.344854, -0.176356,-0.113876,0.977717,-3.535416,0.191408,0.338478, 0.614301,0.789071,-0.000581,-3.583763,-0.052271,0, -0.176356,-0.113876,0.977717,-3.535416,0.191408,0.338478, 0.170833,0.9853,0,-3.55232,0.219613,0, 0.353735,-0.935346,0,-3.673607,-0.720796,0, -0.051713,-0.100833,0.993559,-3.676599,-0.729578,0.330724, 0.109483,-0.310605,0.944213,-3.616627,-0.350374,0.338492, 0.353735,-0.935346,0,-3.673607,-0.720796,0, 0.109483,-0.310605,0.944213,-3.616627,-0.350374,0.338492, 0.098463,-0.995141,0,-3.637643,-0.356271,0, -0.34926,-0.937026,0,-3.678793,-0.926816,0, 0.051664,-0.122235,0.991156,-3.686518,-0.955181,0.320349, -0.051713,-0.100833,0.993559,-3.676599,-0.729578,0.330724, -0.34926,-0.937026,0,-3.678793,-0.926816,0, -0.051713,-0.100833,0.993559,-3.676599,-0.729578,0.330724, 0.353735,-0.935346,0,-3.673607,-0.720796,0, -0.164,-0.98646,0,-3.650579,-1.142448,0, 0.459595,-0.144347,0.87632,-3.639586,-1.140102,0.3338, 0.051664,-0.122235,0.991156,-3.686518,-0.955181,0.320349, -0.164,-0.98646,0,-3.650579,-1.142448,0, 0.051664,-0.122235,0.991156,-3.686518,-0.955181,0.320349, -0.34926,-0.937026,0,-3.678793,-0.926816,0, 0.030921,-0.999522,0,-3.522115,-1.366623,0, 0.407719,-0.190267,0.893064,-3.557869,-1.325941,0.37803, 0.459595,-0.144347,0.87632,-3.639586,-1.140102,0.3338, 0.030921,-0.999522,0,-3.522115,-1.366623,0, 0.459595,-0.144347,0.87632,-3.639586,-1.140102,0.3338, -0.164,-0.98646,0,-3.650579,-1.142448,0, 0.183204,-0.983075,0,-3.417689,-1.494416,0, 0.159615,0.129847,0.978602,-3.442085,-1.48412,0.406377, 0.407719,-0.190267,0.893064,-3.557869,-1.325941,0.37803, 0.183204,-0.983075,0,-3.417689,-1.494416,0, 0.407719,-0.190267,0.893064,-3.557869,-1.325941,0.37803, 0.030921,-0.999522,0,-3.522115,-1.366623,0, -0.997516,0.070442,0,-3.271035,-1.609292,0, 0.846555,-0.103662,0.52211,-3.314868,-1.599081,0.439626, 0.159615,0.129847,0.978602,-3.442085,-1.48412,0.406377, -0.997516,0.070442,0,-3.271035,-1.609292,0, 0.159615,0.129847,0.978602,-3.442085,-1.48412,0.406377, 0.183204,-0.983075,0,-3.417689,-1.494416,0, -0.99928,-0.037933,0,-3.1103,-1.69172,0, 0.820312,-0.193024,0.538358,-3.120907,-1.707924,0.431829, 0.846555,-0.103662,0.52211,-3.314868,-1.599081,0.439626, -0.99928,-0.037933,0,-3.1103,-1.69172,0, 0.846555,-0.103662,0.52211,-3.314868,-1.599081,0.439626, -0.997516,0.070442,0,-3.271035,-1.609292,0, 0.0787,0.996898,0,-2.892162,-1.781087,0, 0.999491,-0.02584,0.01873,-2.941731,-1.787431,0.442574, 0.820312,-0.193024,0.538358,-3.120907,-1.707924,0.431829, 0.0787,0.996898,0,-2.892162,-1.781087,0, 0.820312,-0.193024,0.538358,-3.120907,-1.707924,0.431829, -0.99928,-0.037933,0,-3.1103,-1.69172,0, 0.098463,-0.995141,0,-3.637643,-0.356271,0, 0.109483,-0.310605,0.944213,-3.616627,-0.350374,0.338492, -0.211092,-0.082708,0.973961,-3.570243,-0.060093,0.344854, 0.098463,-0.995141,0,-3.637643,-0.356271,0, -0.211092,-0.082708,0.973961,-3.570243,-0.060093,0.344854, 0.614301,0.789071,-0.000581,-3.583763,-0.052271,0, -0.246054,-0.154918,0.956796,-3.529709,-0.065998,0.437217, -0.739347,0.031953,0.672566,-3.470778,-0.078218,0.546398, -0.136917,-0.20176,0.969818,-3.51684,0.149002,0.430359, -0.09542,0.162222,0.98213,-3.595973,-0.346391,0.426453, -0.652584,-0.147678,0.743186,-3.526766,-0.317542,0.560837, -0.739347,0.031953,0.672566,-3.470778,-0.078218,0.546398, -0.09542,0.162222,0.98213,-3.595973,-0.346391,0.426453, -0.739347,0.031953,0.672566,-3.470778,-0.078218,0.546398, -0.246054,-0.154918,0.956796,-3.529709,-0.065998,0.437217, 0.039,-0.185675,0.981837,-3.665774,-0.73408,0.446286, -0.483189,-0.207332,0.850613,-3.569993,-0.731989,0.649435, -0.652584,-0.147678,0.743186,-3.526766,-0.317542,0.560837, 0.039,-0.185675,0.981837,-3.665774,-0.73408,0.446286, -0.652584,-0.147678,0.743186,-3.526766,-0.317542,0.560837, -0.09542,0.162222,0.98213,-3.595973,-0.346391,0.426453, -0.069043,-0.157333,0.985129,-3.667859,-0.964867,0.464702, -0.4008,-0.167777,0.900672,-3.55012,-0.984868,0.675228, -0.483189,-0.207332,0.850613,-3.569993,-0.731989,0.649435, -0.069043,-0.157333,0.985129,-3.667859,-0.964867,0.464702, -0.483189,-0.207332,0.850613,-3.569993,-0.731989,0.649435, 0.039,-0.185675,0.981837,-3.665774,-0.73408,0.446286, 0.473622,-0.284001,0.833682,-3.631179,-1.157838,0.50561, -0.417424,-0.199203,0.886609,-3.492599,-1.180646,0.692282, -0.4008,-0.167777,0.900672,-3.55012,-0.984868,0.675228, 0.473622,-0.284001,0.833682,-3.631179,-1.157838,0.50561, -0.4008,-0.167777,0.900672,-3.55012,-0.984868,0.675228, -0.069043,-0.157333,0.985129,-3.667859,-0.964867,0.464702, 0.431429,-0.109339,0.895497,-3.53391,-1.330455,0.568246, -0.521685,-0.261319,0.812131,-3.335942,-1.365685,0.72459, -0.417424,-0.199203,0.886609,-3.492599,-1.180646,0.692282, 0.431429,-0.109339,0.895497,-3.53391,-1.330455,0.568246, -0.417424,-0.199203,0.886609,-3.492599,-1.180646,0.692282, 0.473622,-0.284001,0.833682,-3.631179,-1.157838,0.50561, 0.290478,-0.146424,0.945612,-3.387254,-1.486027,0.672861, -0.521685,-0.261319,0.812131,-3.335942,-1.365685,0.72459, 0.431429,-0.109339,0.895497,-3.53391,-1.330455,0.568246, -0.912869,-0.285577,0.291747,-3.438226,-0.721479,0.728141, -0.99574,-0.082547,0.041071,-3.283698,-0.730967,0.793898, -0.970971,-0.219011,0.096178,-3.415655,-0.308965,0.671045, -0.652584,-0.147678,0.743186,-3.526766,-0.317542,0.560837, -0.970971,-0.219011,0.096178,-3.415655,-0.308965,0.671045, -0.739347,0.031953,0.672566,-3.470778,-0.078218,0.546398, -0.483189,-0.207332,0.850613,-3.569993,-0.731989,0.649435, -0.912869,-0.285577,0.291747,-3.438226,-0.721479,0.728141, -0.970971,-0.219011,0.096178,-3.415655,-0.308965,0.671045, -0.483189,-0.207332,0.850613,-3.569993,-0.731989,0.649435, -0.970971,-0.219011,0.096178,-3.415655,-0.308965,0.671045, -0.652584,-0.147678,0.743186,-3.526766,-0.317542,0.560837, -0.4008,-0.167777,0.900672,-3.55012,-0.984868,0.675228, -0.883057,-0.239959,0.403273,-3.355398,-0.969157,0.766213, -0.912869,-0.285577,0.291747,-3.438226,-0.721479,0.728141, -0.4008,-0.167777,0.900672,-3.55012,-0.984868,0.675228, -0.912869,-0.285577,0.291747,-3.438226,-0.721479,0.728141, -0.483189,-0.207332,0.850613,-3.569993,-0.731989,0.649435, -0.417424,-0.199203,0.886609,-3.492599,-1.180646,0.692282, -0.872722,-0.174901,0.455813,-3.27979,-1.162072,0.784602, -0.883057,-0.239959,0.403273,-3.355398,-0.969157,0.766213, -0.417424,-0.199203,0.886609,-3.492599,-1.180646,0.692282, -0.883057,-0.239959,0.403273,-3.355398,-0.969157,0.766213, -0.4008,-0.167777,0.900672,-3.55012,-0.984868,0.675228, -0.521685,-0.261319,0.812131,-3.335942,-1.365685,0.72459, -0.872722,-0.174901,0.455813,-3.27979,-1.162072,0.784602, -0.417424,-0.199203,0.886609,-3.492599,-1.180646,0.692282, -0.874358,-0.225285,0.429819,-3.25121,-0.948205,0.819868, -0.883057,-0.239959,0.403273,-3.355398,-0.969157,0.766213, -0.872722,-0.174901,0.455813,-3.27979,-1.162072,0.784602, -0.794709,-0.185222,-0.57804,-3.556552,0.704883,0.28063, -0.989276,0.146061,0,-3.566995,0.656967,0, -0.57342,0.819261,0,-3.544507,0.467147,0, -0.794709,-0.185222,-0.57804,-3.556552,0.704883,0.28063, -0.57342,0.819261,0,-3.544507,0.467147,0, -0.17902,-0.308668,0.934171,-3.536654,0.442277,0.322, -0.845931,-0.255219,-0.468256,-3.57817,0.837714,0.288502, -0.989171,0.146765,0,-3.599077,0.796217,0, -0.989276,0.146061,0,-3.566995,0.656967,0, -0.845931,-0.255219,-0.468256,-3.57817,0.837714,0.288502, -0.989276,0.146061,0,-3.566995,0.656967,0, -0.794709,-0.185222,-0.57804,-3.556552,0.704883,0.28063, -0.99574,-0.082547,0.041071,-3.283698,-0.730967,0.793898, -0.912869,-0.285577,0.291747,-3.438226,-0.721479,0.728141, -0.883057,-0.239959,0.403273,-3.355398,-0.969157,0.766213, -0.99574,-0.082547,0.041071,-3.283698,-0.730967,0.793898, -0.883057,-0.239959,0.403273,-3.355398,-0.969157,0.766213, -0.874358,-0.225285,0.429819,-3.25121,-0.948205,0.819868, -0.498756,-0.224101,0.83727,-1.936032,-1.829617,0.488916, 0.722741,0.690989,-0.01339,-1.971059,-1.992958,0.500845, 0.532717,0.840798,0.09629,-1.933565,-1.993029,0.438902, -0.498756,-0.224101,0.83727,-1.936032,-1.829617,0.488916, 0.532717,0.840798,0.09629,-1.933565,-1.993029,0.438902, -0.239734,-0.173966,0.955125,-1.88316,-1.829718,0.401567, -0.759627,-0.28527,0.584455,-2.027242,-1.813012,0.555232, 0.870384,0.492056,0.017698,-2.03574,-1.981182,0.547873, 0.722741,0.690989,-0.01339,-1.971059,-1.992958,0.500845, -0.759627,-0.28527,0.584455,-2.027242,-1.813012,0.555232, 0.722741,0.690989,-0.01339,-1.971059,-1.992958,0.500845, -0.498756,-0.224101,0.83727,-1.936032,-1.829617,0.488916, -0.672688,-0.442616,0.592944,-2.126375,-1.866497,0.502895, 0.947044,0.280641,0.156039,-2.106039,-2.019111,0.510759, 0.870384,0.492056,0.017698,-2.03574,-1.981182,0.547873, -0.672688,-0.442616,0.592944,-2.126375,-1.866497,0.502895, 0.870384,0.492056,0.017698,-2.03574,-1.981182,0.547873, -0.759627,-0.28527,0.584455,-2.027242,-1.813012,0.555232, 0.954473,-0.270031,0.126745,-2.176551,-1.873816,0.445782, 0.925586,0.050829,0.375109,-2.141621,-2.024301,0.470257, 0.947044,0.280641,0.156039,-2.106039,-2.019111,0.510759, 0.954473,-0.270031,0.126745,-2.176551,-1.873816,0.445782, 0.947044,0.280641,0.156039,-2.106039,-2.019111,0.510759, -0.672688,-0.442616,0.592944,-2.126375,-1.866497,0.502895, 0.957938,-0.285979,0.023877,-2.147113,-1.903198,0.362462, -0.212651,-0.104685,0.971504,-2.120746,-2.045137,0.411171, 0.925586,0.050829,0.375109,-2.141621,-2.024301,0.470257, 0.957938,-0.285979,0.023877,-2.147113,-1.903198,0.362462, 0.925586,0.050829,0.375109,-2.141621,-2.024301,0.470257, 0.954473,-0.270031,0.126745,-2.176551,-1.873816,0.445782, -0.274087,0.000043,-0.961705,-2.062725,-1.884246,0.307336, 0.332529,0.910491,0.245827,-2.060902,-2.031698,0.372079, -0.212651,-0.104685,0.971504,-2.120746,-2.045137,0.411171, -0.274087,0.000043,-0.961705,-2.062725,-1.884246,0.307336, -0.212651,-0.104685,0.971504,-2.120746,-2.045137,0.411171, 0.957938,-0.285979,0.023877,-2.147113,-1.903198,0.362462, 0.74023,-0.090866,0.666185,-1.946306,-1.872735,0.344251, 0.530834,0.847416,-0.010102,-1.978344,-2.023535,0.398257, 0.332529,0.910491,0.245827,-2.060902,-2.031698,0.372079, 0.74023,-0.090866,0.666185,-1.946306,-1.872735,0.344251, 0.332529,0.910491,0.245827,-2.060902,-2.031698,0.372079, -0.274087,0.000043,-0.961705,-2.062725,-1.884246,0.307336, -0.239734,-0.173966,0.955125,-1.88316,-1.829718,0.401567, 0.532717,0.840798,0.09629,-1.933565,-1.993029,0.438902, 0.530834,0.847416,-0.010102,-1.978344,-2.023535,0.398257, -0.239734,-0.173966,0.955125,-1.88316,-1.829718,0.401567, 0.530834,0.847416,-0.010102,-1.978344,-2.023535,0.398257, 0.74023,-0.090866,0.666185,-1.946306,-1.872735,0.344251, 0.080262,-0.270606,0.959339,-2.466779,-1.857679,0.570461, 0.78715,0.616449,-0.019656,-2.513608,-2.012858,0.558673, 0.66813,0.738233,-0.092817,-2.499138,-2.03809,0.504529, 0.080262,-0.270606,0.959339,-2.466779,-1.857679,0.570461, 0.66813,0.738233,-0.092817,-2.499138,-2.03809,0.504529, 0.441315,-0.29978,0.845797,-2.446375,-1.893261,0.49411, -0.247433,-0.24804,0.936618,-2.547737,-1.833025,0.609321, 0.856604,0.474875,0.201802,-2.571019,-1.995375,0.58623, 0.78715,0.616449,-0.019656,-2.513608,-2.012858,0.558673, -0.247433,-0.24804,0.936618,-2.547737,-1.833025,0.609321, 0.78715,0.616449,-0.019656,-2.513608,-2.012858,0.558673, 0.080262,-0.270606,0.959339,-2.466779,-1.857679,0.570461, -0.587844,-0.244917,0.771009,-2.64722,-1.84401,0.594347, 0.827569,0.284291,0.484054,-2.641567,-2.003164,0.575611, 0.856604,0.474875,0.201802,-2.571019,-1.995375,0.58623, -0.587844,-0.244917,0.771009,-2.64722,-1.84401,0.594347, 0.856604,0.474875,0.201802,-2.571019,-1.995375,0.58623, -0.247433,-0.24804,0.936618,-2.547737,-1.833025,0.609321, -0.845196,-0.27877,0.455994,-2.699966,-1.850397,0.57007, 0.754806,0.216246,0.619279,-2.678971,-2.007694,0.558395, 0.827569,0.284291,0.484054,-2.641567,-2.003164,0.575611, -0.845196,-0.27877,0.455994,-2.699966,-1.850397,0.57007, 0.827569,0.284291,0.484054,-2.641567,-2.003164,0.575611, -0.587844,-0.244917,0.771009,-2.64722,-1.84401,0.594347, 0.972392,0.232654,0.018037,-2.709403,-1.879947,0.508775, 0.512523,0.043999,0.857545,-2.685663,-2.028649,0.514928, 0.754806,0.216246,0.619279,-2.678971,-2.007694,0.558395, 0.972392,0.232654,0.018037,-2.709403,-1.879947,0.508775, 0.754806,0.216246,0.619279,-2.678971,-2.007694,0.558395, -0.845196,-0.27877,0.455994,-2.699966,-1.850397,0.57007, 0.975634,-0.187231,-0.114377,-2.684452,-1.891207,0.447388, 0.45571,-0.00339,0.890122,-2.667969,-2.036634,0.471396, 0.512523,0.043999,0.857545,-2.685663,-2.028649,0.514928, 0.975634,-0.187231,-0.114377,-2.684452,-1.891207,0.447388, 0.512523,0.043999,0.857545,-2.685663,-2.028649,0.514928, 0.972392,0.232654,0.018037,-2.709403,-1.879947,0.508775, 0.985192,-0.12583,-0.116459,-2.614084,-1.905005,0.404925, 0.373808,-0.059429,0.9256,-2.618068,-2.046419,0.441284, 0.45571,-0.00339,0.890122,-2.667969,-2.036634,0.471396, 0.985192,-0.12583,-0.116459,-2.614084,-1.905005,0.404925, 0.45571,-0.00339,0.890122,-2.667969,-2.036634,0.471396, 0.975634,-0.187231,-0.114377,-2.684452,-1.891207,0.447388, 0.996811,-0.048518,-0.063355,-2.503818,-1.909806,0.431456, 0.276212,-0.065585,0.958856,-2.539874,-2.049824,0.460098, 0.373808,-0.059429,0.9256,-2.618068,-2.046419,0.441284, 0.996811,-0.048518,-0.063355,-2.503818,-1.909806,0.431456, 0.373808,-0.059429,0.9256,-2.618068,-2.046419,0.441284, 0.985192,-0.12583,-0.116459,-2.614084,-1.905005,0.404925, 0.441315,-0.29978,0.845797,-2.446375,-1.893261,0.49411, 0.66813,0.738233,-0.092817,-2.499138,-2.03809,0.504529, 0.276212,-0.065585,0.958856,-2.539874,-2.049824,0.460098, 0.441315,-0.29978,0.845797,-2.446375,-1.893261,0.49411, 0.276212,-0.065585,0.958856,-2.539874,-2.049824,0.460098, 0.996811,-0.048518,-0.063355,-2.503818,-1.909806,0.431456, 0.530834,0.847416,-0.010102,-1.978344,-2.023535,0.398257, 0.122987,-0.006582,0.992387,-1.985123,-2.116661,0.394256, 0.041586,0.068165,0.996807,-2.065655,-2.124623,0.36872, 0.530834,0.847416,-0.010102,-1.978344,-2.023535,0.398257, 0.041586,0.068165,0.996807,-2.065655,-2.124623,0.36872, 0.332529,0.910491,0.245827,-2.060902,-2.031698,0.372079, 0.332529,0.910491,0.245827,-2.060902,-2.031698,0.372079, 0.041586,0.068165,0.996807,-2.065655,-2.124623,0.36872, 0.035084,0.005692,0.999368,-2.12403,-2.137733,0.406853, 0.332529,0.910491,0.245827,-2.060902,-2.031698,0.372079, 0.035084,0.005692,0.999368,-2.12403,-2.137733,0.406853, -0.212651,-0.104685,0.971504,-2.120746,-2.045137,0.411171, -0.212651,-0.104685,0.971504,-2.120746,-2.045137,0.411171, 0.035084,0.005692,0.999368,-2.12403,-2.137733,0.406853, -0.01346,-0.014478,0.999805,-2.144393,-2.117408,0.464489, -0.212651,-0.104685,0.971504,-2.120746,-2.045137,0.411171, -0.01346,-0.014478,0.999805,-2.144393,-2.117408,0.464489, 0.925586,0.050829,0.375109,-2.141621,-2.024301,0.470257, 0.925586,0.050829,0.375109,-2.141621,-2.024301,0.470257, -0.01346,-0.014478,0.999805,-2.144393,-2.117408,0.464489, -0.114527,0.103064,0.988059,-2.109684,-2.112345,0.503997, 0.925586,0.050829,0.375109,-2.141621,-2.024301,0.470257, -0.114527,0.103064,0.988059,-2.109684,-2.112345,0.503997, 0.947044,0.280641,0.156039,-2.106039,-2.019111,0.510759, 0.947044,0.280641,0.156039,-2.106039,-2.019111,0.510759, -0.114527,0.103064,0.988059,-2.109684,-2.112345,0.503997, 0.2189,0.87846,0.424724,-2.04111,-2.075348,0.540201, 0.947044,0.280641,0.156039,-2.106039,-2.019111,0.510759, 0.2189,0.87846,0.424724,-2.04111,-2.075348,0.540201, 0.870384,0.492056,0.017698,-2.03574,-1.981182,0.547873, 0.870384,0.492056,0.017698,-2.03574,-1.981182,0.547873, 0.2189,0.87846,0.424724,-2.04111,-2.075348,0.540201, -0.194126,0.280848,0.939914,-1.978016,-2.086834,0.494327, 0.870384,0.492056,0.017698,-2.03574,-1.981182,0.547873, -0.194126,0.280848,0.939914,-1.978016,-2.086834,0.494327, 0.722741,0.690989,-0.01339,-1.971059,-1.992958,0.500845, 0.722741,0.690989,-0.01339,-1.971059,-1.992958,0.500845, -0.194126,0.280848,0.939914,-1.978016,-2.086834,0.494327, 0.742615,0.656803,0.130894,-1.941442,-2.086904,0.433904, 0.722741,0.690989,-0.01339,-1.971059,-1.992958,0.500845, 0.742615,0.656803,0.130894,-1.941442,-2.086904,0.433904, 0.532717,0.840798,0.09629,-1.933565,-1.993029,0.438902, 0.532717,0.840798,0.09629,-1.933565,-1.993029,0.438902, 0.742615,0.656803,0.130894,-1.941442,-2.086904,0.433904, 0.122987,-0.006582,0.992387,-1.985123,-2.116661,0.394256, 0.532717,0.840798,0.09629,-1.933565,-1.993029,0.438902, 0.122987,-0.006582,0.992387,-1.985123,-2.116661,0.394256, 0.530834,0.847416,-0.010102,-1.978344,-2.023535,0.398257, 0.66813,0.738233,-0.092817,-2.499138,-2.03809,0.504529, 0.681964,0.386261,0.621069,-2.513187,-2.130859,0.49792, 0.584509,0.341142,0.736187,-2.552923,-2.142304,0.454579, 0.66813,0.738233,-0.092817,-2.499138,-2.03809,0.504529, 0.584509,0.341142,0.736187,-2.552923,-2.142304,0.454579, 0.276212,-0.065585,0.958856,-2.539874,-2.049824,0.460098, 0.276212,-0.065585,0.958856,-2.539874,-2.049824,0.460098, 0.584509,0.341142,0.736187,-2.552923,-2.142304,0.454579, 0.519595,0.25029,0.816931,-2.629199,-2.138983,0.436227, 0.276212,-0.065585,0.958856,-2.539874,-2.049824,0.460098, 0.519595,0.25029,0.816931,-2.629199,-2.138983,0.436227, 0.373808,-0.059429,0.9256,-2.618068,-2.046419,0.441284, 0.373808,-0.059429,0.9256,-2.618068,-2.046419,0.441284, 0.519595,0.25029,0.816931,-2.629199,-2.138983,0.436227, 0.237937,0.08172,0.967837,-2.677875,-2.129439,0.4656, 0.373808,-0.059429,0.9256,-2.618068,-2.046419,0.441284, 0.237937,0.08172,0.967837,-2.677875,-2.129439,0.4656, 0.45571,-0.00339,0.890122,-2.667969,-2.036634,0.471396, 0.45571,-0.00339,0.890122,-2.667969,-2.036634,0.471396, 0.237937,0.08172,0.967837,-2.677875,-2.129439,0.4656, 0.198142,0.152918,0.968171,-2.695135,-2.12165,0.508064, 0.45571,-0.00339,0.890122,-2.667969,-2.036634,0.471396, 0.198142,0.152918,0.968171,-2.695135,-2.12165,0.508064, 0.512523,0.043999,0.857545,-2.685663,-2.028649,0.514928, 0.512523,0.043999,0.857545,-2.685663,-2.028649,0.514928, 0.198142,0.152918,0.968171,-2.695135,-2.12165,0.508064, 0.198441,0.172024,0.964898,-2.688607,-2.101208,0.550465, 0.512523,0.043999,0.857545,-2.685663,-2.028649,0.514928, 0.198441,0.172024,0.964898,-2.688607,-2.101208,0.550465, 0.754806,0.216246,0.619279,-2.678971,-2.007694,0.558395, 0.754806,0.216246,0.619279,-2.678971,-2.007694,0.558395, 0.198441,0.172024,0.964898,-2.688607,-2.101208,0.550465, 0.204819,0.130792,0.970022,-2.65212,-2.09679,0.567258, 0.754806,0.216246,0.619279,-2.678971,-2.007694,0.558395, 0.204819,0.130792,0.970022,-2.65212,-2.09679,0.567258, 0.827569,0.284291,0.484054,-2.641567,-2.003164,0.575611, 0.827569,0.284291,0.484054,-2.641567,-2.003164,0.575611, 0.204819,0.130792,0.970022,-2.65212,-2.09679,0.567258, 0.154029,0.078449,0.984947,-2.583303,-2.089191,0.577616, 0.827569,0.284291,0.484054,-2.641567,-2.003164,0.575611, 0.154029,0.078449,0.984947,-2.583303,-2.089191,0.577616, 0.856604,0.474875,0.201802,-2.571019,-1.995375,0.58623, 0.856604,0.474875,0.201802,-2.571019,-1.995375,0.58623, 0.154029,0.078449,0.984947,-2.583303,-2.089191,0.577616, 0.032152,0.123743,0.991793,-2.527301,-2.106246,0.550735, 0.856604,0.474875,0.201802,-2.571019,-1.995375,0.58623, 0.032152,0.123743,0.991793,-2.527301,-2.106246,0.550735, 0.78715,0.616449,-0.019656,-2.513608,-2.012858,0.558673, 0.78715,0.616449,-0.019656,-2.513608,-2.012858,0.558673, 0.032152,0.123743,0.991793,-2.527301,-2.106246,0.550735, 0.681964,0.386261,0.621069,-2.513187,-2.130859,0.49792, 0.78715,0.616449,-0.019656,-2.513608,-2.012858,0.558673, 0.681964,0.386261,0.621069,-2.513187,-2.130859,0.49792, 0.66813,0.738233,-0.092817,-2.499138,-2.03809,0.504529, -0.077208,0.343417,0.936004,-2.048681,-2.165282,0.450843, 0.742615,0.656803,0.130894,-1.941442,-2.086904,0.433904, -0.194126,0.280848,0.939914,-1.978016,-2.086834,0.494327, -0.077208,0.343417,0.936004,-2.048681,-2.165282,0.450843, -0.194126,0.280848,0.939914,-1.978016,-2.086834,0.494327, 0.2189,0.87846,0.424724,-2.04111,-2.075348,0.540201, -0.077208,0.343417,0.936004,-2.048681,-2.165282,0.450843, 0.2189,0.87846,0.424724,-2.04111,-2.075348,0.540201, -0.114527,0.103064,0.988059,-2.109684,-2.112345,0.503997, -0.077208,0.343417,0.936004,-2.048681,-2.165282,0.450843, -0.114527,0.103064,0.988059,-2.109684,-2.112345,0.503997, -0.01346,-0.014478,0.999805,-2.144393,-2.117408,0.464489, -0.077208,0.343417,0.936004,-2.048681,-2.165282,0.450843, -0.01346,-0.014478,0.999805,-2.144393,-2.117408,0.464489, 0.035084,0.005692,0.999368,-2.12403,-2.137733,0.406853, -0.077208,0.343417,0.936004,-2.048681,-2.165282,0.450843, 0.035084,0.005692,0.999368,-2.12403,-2.137733,0.406853, 0.041586,0.068165,0.996807,-2.065655,-2.124623,0.36872, -0.077208,0.343417,0.936004,-2.048681,-2.165282,0.450843, 0.041586,0.068165,0.996807,-2.065655,-2.124623,0.36872, 0.122987,-0.006582,0.992387,-1.985123,-2.116661,0.394256, -0.077208,0.343417,0.936004,-2.048681,-2.165282,0.450843, 0.122987,-0.006582,0.992387,-1.985123,-2.116661,0.394256, 0.742615,0.656803,0.130894,-1.941442,-2.086904,0.433904, 0.510285,0.851048,0.1238,-2.603284,-2.176802,0.510638, 0.681964,0.386261,0.621069,-2.513187,-2.130859,0.49792, 0.032152,0.123743,0.991793,-2.527301,-2.106246,0.550735, 0.510285,0.851048,0.1238,-2.603284,-2.176802,0.510638, 0.032152,0.123743,0.991793,-2.527301,-2.106246,0.550735, 0.154029,0.078449,0.984947,-2.583303,-2.089191,0.577616, 0.510285,0.851048,0.1238,-2.603284,-2.176802,0.510638, 0.154029,0.078449,0.984947,-2.583303,-2.089191,0.577616, 0.204819,0.130792,0.970022,-2.65212,-2.09679,0.567258, 0.510285,0.851048,0.1238,-2.603284,-2.176802,0.510638, 0.204819,0.130792,0.970022,-2.65212,-2.09679,0.567258, 0.198441,0.172024,0.964898,-2.688607,-2.101208,0.550465, 0.510285,0.851048,0.1238,-2.603284,-2.176802,0.510638, 0.198441,0.172024,0.964898,-2.688607,-2.101208,0.550465, 0.198142,0.152918,0.968171,-2.695135,-2.12165,0.508064, 0.510285,0.851048,0.1238,-2.603284,-2.176802,0.510638, 0.198142,0.152918,0.968171,-2.695135,-2.12165,0.508064, 0.237937,0.08172,0.967837,-2.677875,-2.129439,0.4656, 0.510285,0.851048,0.1238,-2.603284,-2.176802,0.510638, 0.237937,0.08172,0.967837,-2.677875,-2.129439,0.4656, 0.519595,0.25029,0.816931,-2.629199,-2.138983,0.436227, 0.510285,0.851048,0.1238,-2.603284,-2.176802,0.510638, 0.519595,0.25029,0.816931,-2.629199,-2.138983,0.436227, 0.584509,0.341142,0.736187,-2.552923,-2.142304,0.454579, 0.510285,0.851048,0.1238,-2.603284,-2.176802,0.510638, 0.584509,0.341142,0.736187,-2.552923,-2.142304,0.454579, 0.681964,0.386261,0.621069,-2.513187,-2.130859,0.49792, 0.820312,-0.193024,0.538358,-3.120907,-1.707924,0.431829, 0.999491,-0.02584,0.01873,-2.941731,-1.787431,0.442574, 0.713401,0.39471,-0.579019,-3.008323,-1.759271,0.655672, 0.820312,-0.193024,0.538358,-3.120907,-1.707924,0.431829, 0.713401,0.39471,-0.579019,-3.008323,-1.759271,0.655672, 0.843062,-0.10517,0.527433,-3.139394,-1.687482,0.638546, 0.999491,-0.02584,0.01873,-2.941731,-1.787431,0.442574, 0.972392,0.232654,0.018037,-2.709403,-1.879947,0.508775, 0.713401,0.39471,-0.579019,-3.008323,-1.759271,0.655672, 0.972392,0.232654,0.018037,-2.709403,-1.879947,0.508775, -0.845196,-0.27877,0.455994,-2.699966,-1.850397,0.57007, -0.732521,-0.474279,0.488336,-2.811581,-1.79821,0.712737, 0.972392,0.232654,0.018037,-2.709403,-1.879947,0.508775, -0.732521,-0.474279,0.488336,-2.811581,-1.79821,0.712737, 0.713401,0.39471,-0.579019,-3.008323,-1.759271,0.655672, -0.530021,0.13773,0.836724,-3.697889,-0.951955,0.098793, -0.54555,-0.056478,0.836173,-3.67645,-0.551317,0.077574, -0.548359,-0.017804,0.836053,-3.699784,-0.759901,0.088664 }; static const struct gllist frame={GL_N3F_V3F,GL_TRIANGLES,1515,data,NULL}; const struct gllist *cow_udder=&frame; xscreensaver-5.36/hacks/glx/glslideshow.c000664 000767 000024 00000104446 12717747743 020547 0ustar00jwzstaff000000 000000 /* glslideshow, Copyright (c) 2003-2014 Jamie Zawinski * Loads a sequence of images and smoothly pans around them; crossfades * when loading new images. * * Originally written by Mike Oliphant (c) 2002, 2003. * Rewritten by jwz, 21-Jun-2003. * Rewritten by jwz again, 6-Feb-2005. * * 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. * ***************************************************************************** * * TODO: * * - When a new image is loaded, there is a glitch: animation pauses during * the period when we're loading the image-to-fade-in. On fast (2GHz) * machines, this stutter is short but noticable (usually around 1/10th * second.) On slower machines, it can be much more pronounced. * This turns out to be hard to fix... * * Image loading happens in three stages: * * 1: Fork a process and run xscreensaver-getimage in the background. * This writes image data to a server-side X pixmap. * * 2: When that completes, a callback informs us that the pixmap is ready. * We must then download the pixmap data from the server with XGetImage * (or XShmGetImage.) * * 3: Once we have the bits, we must convert them from server-native bitmap * layout to 32 bit RGBA in client-endianness, to make them usable as * OpenGL textures. * * 4: We must actually construct a texture. * * So, the speed of step 1 doesn't really matter, since that happens in * the background. But steps 2, 3, and 4 happen in *this* process, and * cause the visible glitch. * * Step 2 can't be moved to another process without opening a second * connection to the X server, which is pretty heavy-weight. (That would * be possible, though; the other process could open an X connection, * retrieve the pixmap, and feed it back to us through a pipe or * something.) * * Step 3 might be able to be optimized by coding tuned versions of * grab-ximage.c:copy_ximage() for the most common depths and bit orders. * (Or by moving it into the other process along with step 2.) * * Step 4 is the hard one, though. It might be possible to speed up this * step if there is some way to allow two GL processes share texture * data. Unless, of course, all the time being consumed by step 4 is * because the graphics pipeline is flooded, in which case, that other * process would starve the screen anyway. * * Is it possible to use a single GLX context in a multithreaded way? * Or use a second GLX context, but allow the two contexts to share data? * I can't find any documentation about this. * * How does Apple do this with their MacOSX slideshow screen saver? * Perhaps it's easier for them because their OpenGL libraries have * thread support at a lower level? */ #define DEFAULTS "*delay: 20000 \n" \ "*wireframe: False \n" \ "*showFPS: False \n" \ "*fpsSolid: True \n" \ "*useSHM: True \n" \ "*titleFont: -*-helvetica-medium-r-normal-*-*-180-*-*-*-*-*-*\n" \ "*desktopGrabber: xscreensaver-getimage -no-desktop %s\n" \ "*grabDesktopImages: False \n" \ "*chooseRandomImages: True \n" # define refresh_slideshow 0 # define release_slideshow 0 # include "xlockmore.h" #undef countof #define countof(x) (sizeof((x))/sizeof((*x))) #ifdef USE_GL # define DEF_FADE_DURATION "2" # define DEF_PAN_DURATION "6" # define DEF_IMAGE_DURATION "30" # define DEF_ZOOM "75" # define DEF_FPS_CUTOFF "5" # define DEF_TITLES "False" # define DEF_LETTERBOX "True" # define DEF_DEBUG "False" # define DEF_MIPMAP "True" #include "grab-ximage.h" #include "texfont.h" typedef struct { double x, y, w, h; } rect; typedef struct { ModeInfo *mi; int id; /* unique number for debugging */ char *title; /* the filename of this image */ int w, h; /* size in pixels of the image */ int tw, th; /* size in pixels of the texture */ XRectangle geom; /* where in the image the bits are */ Bool loaded_p; /* whether the image has finished loading */ Bool used_p; /* whether the image has yet appeared on screen */ GLuint texid; /* which texture contains the image */ int refcount; /* how many sprites refer to this image */ } image; typedef enum { NEW, IN, FULL, OUT, DEAD } sprite_state; typedef struct { int id; /* unique number for debugging */ image *img; /* which image this animation displays */ GLfloat opacity; /* how to render it */ double start_time; /* when this animation began */ rect from, to, current; /* the journey this image is taking */ sprite_state state; /* the state we're in right now */ sprite_state prev_state; /* the state we were in previously */ double state_time; /* time of last state change */ int frame_count; /* frames since last state change */ } sprite; typedef struct { GLXContext *glx_context; int nimages; /* how many images are loaded or loading now */ image *images[10]; /* pointers to the images */ int nsprites; /* how many sprites are animating right now */ sprite *sprites[10]; /* pointers to the live sprites */ double now; /* current time in seconds */ double dawn_of_time; /* when the program launched */ double image_load_time; /* time when we last loaded a new image */ double prev_frame_time; /* time when we last drew a frame */ Bool awaiting_first_image_p; /* Early in startup: nothing to display yet */ Bool redisplay_needed_p; /* Sometimes we can get away with not re-painting. Tick this if a redisplay is required. */ Bool change_now_p; /* Set when the user clicks to ask for a new image right now. */ GLfloat fps; /* approximate frame rate we're achieving */ GLfloat theoretical_fps; /* maximum frame rate that might be possible */ Bool checked_fps_p; /* Whether we have checked for a low frame rate. */ texture_font_data *font_data; /* for printing image file names */ int sprite_id, image_id; /* debugging id counters */ double time_elapsed; int frames_elapsed; } slideshow_state; static slideshow_state *sss = NULL; /* Command-line arguments */ static int fade_seconds; /* Duration in seconds of fade transitions. If 0, jump-cut instead of fading. */ static int pan_seconds; /* Duration of each pan through an image. */ static int image_seconds; /* How many seconds until loading a new image. */ static int zoom; /* How far in to zoom when panning, in percent of image size: that is, 75 means "when zoomed all the way in, 75% of the image will be visible." */ static int fps_cutoff; /* If the frame-rate falls below this, turn off zooming.*/ static Bool letterbox_p; /* When a loaded image is not the same aspect ratio as the window, whether to display black bars. */ static Bool mipmap_p; /* Use mipmaps instead of single textures. */ static Bool do_titles; /* Display image titles. */ static Bool debug_p; /* Be loud and do weird things. */ static XrmOptionDescRec opts[] = { {"-fade", ".fadeDuration", XrmoptionSepArg, 0 }, {"-pan", ".panDuration", XrmoptionSepArg, 0 }, {"-duration", ".imageDuration", XrmoptionSepArg, 0 }, {"-zoom", ".zoom", XrmoptionSepArg, 0 }, {"-cutoff", ".FPScutoff", XrmoptionSepArg, 0 }, {"-titles", ".titles", XrmoptionNoArg, "True" }, {"-letterbox", ".letterbox", XrmoptionNoArg, "True" }, {"-no-letterbox", ".letterbox", XrmoptionNoArg, "False" }, {"-clip", ".letterbox", XrmoptionNoArg, "False" }, {"-mipmaps", ".mipmap", XrmoptionNoArg, "True" }, {"-no-mipmaps", ".mipmap", XrmoptionNoArg, "False" }, {"-debug", ".debug", XrmoptionNoArg, "True" }, }; static argtype vars[] = { { &fade_seconds, "fadeDuration", "FadeDuration", DEF_FADE_DURATION, t_Int}, { &pan_seconds, "panDuration", "PanDuration", DEF_PAN_DURATION, t_Int}, { &image_seconds, "imageDuration","ImageDuration",DEF_IMAGE_DURATION, t_Int}, { &zoom, "zoom", "Zoom", DEF_ZOOM, t_Int}, { &mipmap_p, "mipmap", "Mipmap", DEF_MIPMAP, t_Bool}, { &letterbox_p, "letterbox", "Letterbox", DEF_LETTERBOX, t_Bool}, { &fps_cutoff, "FPScutoff", "FPSCutoff", DEF_FPS_CUTOFF, t_Int}, { &debug_p, "debug", "Debug", DEF_DEBUG, t_Bool}, { &do_titles, "titles", "Titles", DEF_TITLES, t_Bool}, }; ENTRYPOINT ModeSpecOpt slideshow_opts = {countof(opts), opts, countof(vars), vars, NULL}; static const char * blurb (void) { # ifdef HAVE_JWXYZ return "GLSlideshow"; # else static char buf[255]; time_t now = time ((time_t *) 0); char *ct = (char *) ctime (&now); int n = strlen(progname); if (n > 100) n = 99; strncpy(buf, progname, n); buf[n++] = ':'; buf[n++] = ' '; strncpy(buf+n, ct+11, 8); strcpy(buf+n+9, ": "); return buf; # endif } /* Returns the current time in seconds as a double. */ static double double_time (void) { struct timeval now; # ifdef GETTIMEOFDAY_TWO_ARGS struct timezone tzp; gettimeofday(&now, &tzp); # else gettimeofday(&now); # endif return (now.tv_sec + ((double) now.tv_usec * 0.000001)); } static void image_loaded_cb (const char *filename, XRectangle *geom, int image_width, int image_height, int texture_width, int texture_height, void *closure); /* Allocate an image structure and start a file loading in the background. */ static image * alloc_image (ModeInfo *mi) { slideshow_state *ss = &sss[MI_SCREEN(mi)]; int wire = MI_IS_WIREFRAME(mi); image *img = (image *) calloc (1, sizeof (*img)); img->id = ++ss->image_id; img->loaded_p = False; img->used_p = False; img->mi = mi; glGenTextures (1, &img->texid); if (img->texid <= 0) abort(); ss->image_load_time = ss->now; if (wire) image_loaded_cb (0, 0, 0, 0, 0, 0, img); else load_texture_async (mi->xgwa.screen, mi->window, *ss->glx_context, 0, 0, mipmap_p, img->texid, image_loaded_cb, img); ss->images[ss->nimages++] = img; if (ss->nimages >= countof(ss->images)) abort(); return img; } /* Callback that tells us that the texture has been loaded. */ static void image_loaded_cb (const char *filename, XRectangle *geom, int image_width, int image_height, int texture_width, int texture_height, void *closure) { image *img = (image *) closure; ModeInfo *mi = img->mi; /* slideshow_state *ss = &sss[MI_SCREEN(mi)]; */ int wire = MI_IS_WIREFRAME(mi); if (wire) { img->w = MI_WIDTH (mi) * (0.5 + frand (1.0)); img->h = MI_HEIGHT (mi); img->geom.width = img->w; img->geom.height = img->h; goto DONE; } if (image_width == 0 || image_height == 0) exit (1); glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, mipmap_p ? GL_LINEAR_MIPMAP_LINEAR : GL_LINEAR); glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT); glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT); img->w = image_width; img->h = image_height; img->tw = texture_width; img->th = texture_height; img->geom = *geom; img->title = (filename ? strdup (filename) : 0); /* If the image's width doesn't come back as the width of the screen, then the image must have been scaled down (due to insufficient texture memory.) Scale up the coordinates to stretch the image to fill the window. */ if (img->w != MI_WIDTH(mi)) { double scale = (double) MI_WIDTH(mi) / img->w; img->w *= scale; img->h *= scale; img->tw *= scale; img->th *= scale; img->geom.x *= scale; img->geom.y *= scale; img->geom.width *= scale; img->geom.height *= scale; } /* xscreensaver-getimage returns paths relative to the image directory now, so leave the sub-directory part in. Unless it's an absolute path. */ if (img->title && img->title[0] == '/') { /* strip filename to part between last "/" and last ".". */ char *s = strrchr (img->title, '/'); if (s) strcpy (img->title, s+1); s = strrchr (img->title, '.'); if (s) *s = 0; } if (debug_p) fprintf (stderr, "%s: loaded img %2d: \"%s\"\n", blurb(), img->id, (img->title ? img->title : "(null)")); DONE: img->loaded_p = True; } /* Free the image and texture, after nobody is referencing it. */ static void destroy_image (ModeInfo *mi, image *img) { slideshow_state *ss = &sss[MI_SCREEN(mi)]; Bool freed_p = False; int i; if (!img) abort(); if (!img->loaded_p) abort(); if (!img->used_p) abort(); if (img->texid <= 0) abort(); if (img->refcount != 0) abort(); for (i = 0; i < ss->nimages; i++) /* unlink it from the list */ if (ss->images[i] == img) { int j; for (j = i; j < ss->nimages-1; j++) /* pull remainder forward */ ss->images[j] = ss->images[j+1]; ss->images[j] = 0; ss->nimages--; freed_p = True; break; } if (!freed_p) abort(); if (debug_p) fprintf (stderr, "%s: unloaded img %2d: \"%s\"\n", blurb(), img->id, (img->title ? img->title : "(null)")); if (img->title) free (img->title); glDeleteTextures (1, &img->texid); free (img); } /* Return an image to use for a sprite. If it's time for a new one, get a new one. Otherwise, use an old one. Might return 0 if the machine is really slow. */ static image * get_image (ModeInfo *mi) { slideshow_state *ss = &sss[MI_SCREEN(mi)]; image *img = 0; double now = ss->now; Bool want_new_p = (ss->change_now_p || ss->image_load_time + image_seconds <= now); image *new_img = 0; image *old_img = 0; image *loading_img = 0; int i; for (i = 0; i < ss->nimages; i++) { image *img2 = ss->images[i]; if (!img2) abort(); if (!img2->loaded_p) loading_img = img2; else if (!img2->used_p) new_img = img2; else old_img = img2; } if (want_new_p && new_img) img = new_img, new_img = 0, ss->change_now_p = False; else if (old_img) img = old_img, old_img = 0; else if (new_img) img = new_img, new_img = 0, ss->change_now_p = False; /* Make sure that there is always one unused image in the pipe. */ if (!new_img && !loading_img) alloc_image (mi); return img; } /* Pick random starting and ending positions for the given sprite. */ static void randomize_sprite (ModeInfo *mi, sprite *sp) { int vp_w = MI_WIDTH(mi); int vp_h = MI_HEIGHT(mi); int img_w = sp->img->geom.width; int img_h = sp->img->geom.height; int min_w, max_w; double ratio = (double) img_h / img_w; if (letterbox_p) { min_w = img_w; } else { if (img_w < vp_w) min_w = vp_w; else min_w = img_w * (float) vp_h / img_h; } max_w = min_w * 100 / zoom; sp->from.w = min_w + frand ((max_w - min_w) * 0.4); sp->to.w = max_w - frand ((max_w - min_w) * 0.4); sp->from.h = sp->from.w * ratio; sp->to.h = sp->to.w * ratio; if (zoom == 100) /* only one box, and it is centered */ { sp->from.x = (sp->from.w > vp_w ? -(sp->from.w - vp_w) / 2 : (vp_w - sp->from.w) / 2); sp->from.y = (sp->from.h > vp_h ? -(sp->from.h - vp_h) / 2 : (vp_h - sp->from.h) / 2); sp->to = sp->from; } else /* position both boxes randomly */ { sp->from.x = (sp->from.w > vp_w ? -frand (sp->from.w - vp_w) : frand (vp_w - sp->from.w)); sp->from.y = (sp->from.h > vp_h ? -frand (sp->from.h - vp_h) : frand (vp_h - sp->from.h)); sp->to.x = (sp->to.w > vp_w ? -frand (sp->to.w - vp_w) : frand (vp_w - sp->to.w)); sp->to.y = (sp->to.h > vp_h ? -frand (sp->to.h - vp_h) : frand (vp_h - sp->to.h)); } if (random() & 1) { rect swap = sp->to; sp->to = sp->from; sp->from = swap; } /* Make sure the aspect ratios are within 0.001 of each other. */ { int r1 = 0.5 + (sp->from.w * 1000 / sp->from.h); int r2 = 0.5 + (sp->to.w * 1000 / sp->to.h); if (r1 < r2-1 || r1 > r2+1) { fprintf (stderr, "%s: botched aspect: %f x %f (%d) vs %f x %f (%d): %s\n", progname, sp->from.w, sp->from.h, r1, sp->to.w, sp->to.h, r2, (sp->img->title ? sp->img->title : "[null]")); abort(); } } sp->from.x /= vp_w; sp->from.y /= vp_h; sp->from.w /= vp_w; sp->from.h /= vp_h; sp->to.x /= vp_w; sp->to.y /= vp_h; sp->to.w /= vp_w; sp->to.h /= vp_h; } /* Allocate a new sprite and start its animation going. */ static sprite * new_sprite (ModeInfo *mi) { slideshow_state *ss = &sss[MI_SCREEN(mi)]; image *img = get_image (mi); sprite *sp; if (!img) { /* Oops, no images yet! The machine is probably hurting bad. Let's give it some time before thrashing again. */ usleep (250000); return 0; } sp = (sprite *) calloc (1, sizeof (*sp)); sp->id = ++ss->sprite_id; sp->start_time = ss->now; sp->state_time = sp->start_time; sp->state = sp->prev_state = NEW; sp->img = img; sp->img->refcount++; sp->img->used_p = True; ss->sprites[ss->nsprites++] = sp; if (ss->nsprites >= countof(ss->sprites)) abort(); randomize_sprite (mi, sp); return sp; } /* Free the given sprite, and decrement the reference count on its image. */ static void destroy_sprite (ModeInfo *mi, sprite *sp) { slideshow_state *ss = &sss[MI_SCREEN(mi)]; Bool freed_p = False; image *img; int i; if (!sp) abort(); if (sp->state != DEAD) abort(); img = sp->img; if (!img) abort(); if (!img->loaded_p) abort(); if (!img->used_p) abort(); if (img->refcount <= 0) abort(); for (i = 0; i < ss->nsprites; i++) /* unlink it from the list */ if (ss->sprites[i] == sp) { int j; for (j = i; j < ss->nsprites-1; j++) /* pull remainder forward */ ss->sprites[j] = ss->sprites[j+1]; ss->sprites[j] = 0; ss->nsprites--; freed_p = True; break; } if (!freed_p) abort(); free (sp); sp = 0; img->refcount--; if (img->refcount < 0) abort(); if (img->refcount == 0) destroy_image (mi, img); } /* Updates the sprite for the current frame of the animation based on its creation time compared to the current wall clock. */ static void tick_sprite (ModeInfo *mi, sprite *sp) { slideshow_state *ss = &sss[MI_SCREEN(mi)]; image *img = sp->img; double now = ss->now; double secs; double ratio; rect prev_rect = sp->current; GLfloat prev_opacity = sp->opacity; if (! sp->img) abort(); if (! img->loaded_p) abort(); secs = now - sp->start_time; ratio = secs / (pan_seconds + fade_seconds); if (ratio > 1) ratio = 1; sp->current.x = sp->from.x + ratio * (sp->to.x - sp->from.x); sp->current.y = sp->from.y + ratio * (sp->to.y - sp->from.y); sp->current.w = sp->from.w + ratio * (sp->to.w - sp->from.w); sp->current.h = sp->from.h + ratio * (sp->to.h - sp->from.h); sp->prev_state = sp->state; if (secs < fade_seconds) { sp->state = IN; sp->opacity = secs / (GLfloat) fade_seconds; } else if (secs < pan_seconds) { sp->state = FULL; sp->opacity = 1; } else if (secs < pan_seconds + fade_seconds) { sp->state = OUT; sp->opacity = 1 - ((secs - pan_seconds) / (GLfloat) fade_seconds); } else { sp->state = DEAD; sp->opacity = 0; } if (sp->state != sp->prev_state && (sp->prev_state == IN || sp->prev_state == FULL)) { double secs = now - sp->state_time; if (debug_p) fprintf (stderr, "%s: %s %3d frames %2.0f sec %5.1f fps (%.1f fps?)\n", blurb(), (sp->prev_state == IN ? "fade" : "pan "), sp->frame_count, secs, sp->frame_count / secs, ss->theoretical_fps); sp->state_time = now; sp->frame_count = 0; } sp->frame_count++; if (sp->state != DEAD && (prev_rect.x != sp->current.x || prev_rect.y != sp->current.y || prev_rect.w != sp->current.w || prev_rect.h != sp->current.h || prev_opacity != sp->opacity)) ss->redisplay_needed_p = True; } /* Draw the given sprite at the phase of its animation dictated by its creation time compared to the current wall clock. */ static void draw_sprite (ModeInfo *mi, sprite *sp) { slideshow_state *ss = &sss[MI_SCREEN(mi)]; int wire = MI_IS_WIREFRAME(mi); image *img = sp->img; if (! sp->img) abort(); if (! img->loaded_p) abort(); glPushMatrix(); { glTranslatef (sp->current.x, sp->current.y, 0); glScalef (sp->current.w, sp->current.h, 1); if (wire) /* Draw a grid inside the box */ { GLfloat dy = 0.1; GLfloat dx = dy * img->w / img->h; GLfloat x, y; if (sp->id & 1) glColor4f (sp->opacity, 0, 0, 1); else glColor4f (0, 0, sp->opacity, 1); glBegin(GL_LINES); glVertex3f (0, 0, 0); glVertex3f (1, 1, 0); glVertex3f (1, 0, 0); glVertex3f (0, 1, 0); for (y = 0; y < 1+dy; y += dy) { GLfloat yy = (y > 1 ? 1 : y); for (x = 0.5; x < 1+dx; x += dx) { GLfloat xx = (x > 1 ? 1 : x); glVertex3f (0, xx, 0); glVertex3f (1, xx, 0); glVertex3f (yy, 0, 0); glVertex3f (yy, 1, 0); } for (x = 0.5; x > -dx; x -= dx) { GLfloat xx = (x < 0 ? 0 : x); glVertex3f (0, xx, 0); glVertex3f (1, xx, 0); glVertex3f (yy, 0, 0); glVertex3f (yy, 1, 0); } } glEnd(); } else /* Draw the texture quad */ { GLfloat texw = img->geom.width / (GLfloat) img->tw; GLfloat texh = img->geom.height / (GLfloat) img->th; GLfloat texx1 = img->geom.x / (GLfloat) img->tw; GLfloat texy1 = img->geom.y / (GLfloat) img->th; GLfloat texx2 = texx1 + texw; GLfloat texy2 = texy1 + texh; glBindTexture (GL_TEXTURE_2D, img->texid); glColor4f (1, 1, 1, sp->opacity); glNormal3f (0, 0, 1); glBegin (GL_QUADS); glTexCoord2f (texx1, texy2); glVertex3f (0, 0, 0); glTexCoord2f (texx2, texy2); glVertex3f (1, 0, 0); glTexCoord2f (texx2, texy1); glVertex3f (1, 1, 0); glTexCoord2f (texx1, texy1); glVertex3f (0, 1, 0); glEnd(); if (debug_p) /* Draw a border around the image */ { if (!wire) glDisable (GL_TEXTURE_2D); if (sp->id & 1) glColor4f (sp->opacity, 0, 0, 1); else glColor4f (0, 0, sp->opacity, 1); glBegin (GL_LINE_LOOP); glVertex3f (0, 0, 0); glVertex3f (0, 1, 0); glVertex3f (1, 1, 0); glVertex3f (1, 0, 0); glEnd(); if (!wire) glEnable (GL_TEXTURE_2D); } } if (do_titles && img->title && *img->title && (sp->state == IN || sp->state == FULL)) { glColor4f (1, 1, 1, sp->opacity); print_texture_label (mi->dpy, ss->font_data, mi->xgwa.width, mi->xgwa.height, 1, img->title); } } glPopMatrix(); if (debug_p) { if (!wire) glDisable (GL_TEXTURE_2D); if (sp->id & 1) glColor4f (1, 0, 0, 1); else glColor4f (0, 0, 1, 1); /* Draw the "from" and "to" boxes */ glBegin (GL_LINE_LOOP); glVertex3f (sp->from.x, sp->from.y, 0); glVertex3f (sp->from.x + sp->from.w, sp->from.y, 0); glVertex3f (sp->from.x + sp->from.w, sp->from.y + sp->from.h, 0); glVertex3f (sp->from.x, sp->from.y + sp->from.h, 0); glEnd(); glBegin (GL_LINE_LOOP); glVertex3f (sp->to.x, sp->to.y, 0); glVertex3f (sp->to.x + sp->to.w, sp->to.y, 0); glVertex3f (sp->to.x + sp->to.w, sp->to.y + sp->to.h, 0); glVertex3f (sp->to.x, sp->to.y + sp->to.h, 0); glEnd(); if (!wire) glEnable (GL_TEXTURE_2D); } } static void tick_sprites (ModeInfo *mi) { slideshow_state *ss = &sss[MI_SCREEN(mi)]; int i; for (i = 0; i < ss->nsprites; i++) tick_sprite (mi, ss->sprites[i]); } static void draw_sprites (ModeInfo *mi) { slideshow_state *ss = &sss[MI_SCREEN(mi)]; int i; glClear (GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glPushMatrix(); /* { GLfloat rot = current_device_rotation(); glTranslatef (0.5, 0.5, 0); 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.5, -0.5, 0); } */ for (i = 0; i < ss->nsprites; i++) draw_sprite (mi, ss->sprites[i]); glPopMatrix(); if (debug_p) /* draw a white box (the "screen") */ { int wire = MI_IS_WIREFRAME(mi); if (!wire) glDisable (GL_TEXTURE_2D); glColor4f (1, 1, 1, 1); glBegin (GL_LINE_LOOP); glVertex3f (0, 0, 0); glVertex3f (0, 1, 0); glVertex3f (1, 1, 0); glVertex3f (1, 0, 0); glEnd(); if (!wire) glEnable (GL_TEXTURE_2D); } } ENTRYPOINT void reshape_slideshow (ModeInfo *mi, int width, int height) { slideshow_state *ss = &sss[MI_SCREEN(mi)]; GLfloat s; glViewport (0, 0, width, height); glMatrixMode (GL_PROJECTION); glLoadIdentity(); glRotatef (current_device_rotation(), 0, 0, 1); glMatrixMode (GL_MODELVIEW); glLoadIdentity(); s = 2; if (debug_p) { s *= (zoom / 100.0) * 0.75; if (s < 0.1) s = 0.1; } glScalef (s, s, s); glTranslatef (-0.5, -0.5, 0); glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); ss->redisplay_needed_p = True; } ENTRYPOINT Bool slideshow_handle_event (ModeInfo *mi, XEvent *event) { slideshow_state *ss = &sss[MI_SCREEN(mi)]; if (event->xany.type == Expose || event->xany.type == GraphicsExpose || event->xany.type == VisibilityNotify) { ss->redisplay_needed_p = True; if (debug_p) fprintf (stderr, "%s: exposure\n", blurb()); return False; } else if (screenhack_event_helper (MI_DISPLAY(mi), MI_WINDOW(mi), event)) { ss->change_now_p = True; return True; } return False; } /* Do some sanity checking on various user-supplied values, and make sure they are all internally consistent. */ static void sanity_check (ModeInfo *mi) { if (zoom < 1) zoom = 1; /* zoom is a positive percentage */ else if (zoom > 100) zoom = 100; if (zoom == 100) /* with no zooming, there is no panning */ pan_seconds = 0; if (pan_seconds < fade_seconds) /* pan is inclusive of fade */ pan_seconds = fade_seconds; if (pan_seconds == 0) /* no zero-length cycles, please... */ pan_seconds = 1; if (image_seconds < pan_seconds) /* we only change images at fade-time */ image_seconds = pan_seconds; /* If we're not panning/zooming within the image, then there's no point in crossfading the image with itself -- only do crossfades when changing to a new image. */ if (zoom == 100 && pan_seconds < image_seconds) pan_seconds = image_seconds; /* No need to use mipmaps if we're not changing the image size much */ if (zoom >= 80) mipmap_p = False; if (fps_cutoff < 0) fps_cutoff = 0; else if (fps_cutoff > 30) fps_cutoff = 30; } static void check_fps (ModeInfo *mi) { #ifndef HAVE_JWXYZ /* always assume Cocoa and mobile are fast enough */ slideshow_state *ss = &sss[MI_SCREEN(mi)]; double start_time, end_time, wall_elapsed, frame_duration, fps; int i; start_time = ss->now; end_time = double_time(); frame_duration = end_time - start_time; /* time spent drawing this frame */ ss->time_elapsed += frame_duration; /* time spent drawing all frames */ ss->frames_elapsed++; wall_elapsed = end_time - ss->dawn_of_time; fps = ss->frames_elapsed / ss->time_elapsed; ss->theoretical_fps = fps; if (ss->checked_fps_p) return; if (wall_elapsed <= 8) /* too early to be sure */ return; ss->checked_fps_p = True; if (fps >= fps_cutoff) { if (debug_p) fprintf (stderr, "%s: %.1f fps is fast enough (with %d frames in %.1f secs)\n", blurb(), fps, ss->frames_elapsed, wall_elapsed); return; } fprintf (stderr, "%s: only %.1f fps! Turning off pan/fade to compensate...\n", blurb(), fps); zoom = 100; fade_seconds = 0; sanity_check (mi); for (i = 0; i < ss->nsprites; i++) { sprite *sp = ss->sprites[i]; randomize_sprite (mi, sp); sp->state = FULL; } ss->redisplay_needed_p = True; /* Need this in case zoom changed. */ reshape_slideshow (mi, mi->xgwa.width, mi->xgwa.height); #endif /* HAVE_JWXYZ */ } /* Kludge to add "-v" to invocation of "xscreensaver-getimage" in -debug mode */ static void hack_resources (void) { #if 0 char *res = "desktopGrabber"; char *val = get_string_resource (res, "DesktopGrabber"); char buf1[255]; char buf2[255]; XrmValue value; sprintf (buf1, "%.100s.%.100s", progclass, res); sprintf (buf2, "%.200s -v", val); value.addr = buf2; value.size = strlen(buf2); XrmPutResource (&db, buf1, "String", &value); #endif } ENTRYPOINT void init_slideshow (ModeInfo *mi) { int screen = MI_SCREEN(mi); slideshow_state *ss; int wire = MI_IS_WIREFRAME(mi); if (sss == NULL) { if ((sss = (slideshow_state *) calloc (MI_NUM_SCREENS(mi), sizeof(slideshow_state))) == NULL) return; } ss = &sss[screen]; if ((ss->glx_context = init_GL(mi)) != NULL) { reshape_slideshow (mi, MI_WIDTH(mi), MI_HEIGHT(mi)); } else { MI_CLEARWINDOW(mi); } if (debug_p) fprintf (stderr, "%s: pan: %d; fade: %d; img: %d; zoom: %d%%\n", blurb(), pan_seconds, fade_seconds, image_seconds, zoom); sanity_check(mi); if (debug_p) fprintf (stderr, "%s: pan: %d; fade: %d; img: %d; zoom: %d%%\n\n", blurb(), pan_seconds, fade_seconds, image_seconds, zoom); glDisable (GL_LIGHTING); glDisable (GL_DEPTH_TEST); glDepthMask (GL_FALSE); glEnable (GL_CULL_FACE); glCullFace (GL_BACK); if (! wire) { glEnable (GL_TEXTURE_2D); glShadeModel (GL_SMOOTH); glEnable (GL_BLEND); glBlendFunc (GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); } if (debug_p) glLineWidth (3); ss->font_data = load_texture_font (mi->dpy, "titleFont"); if (debug_p) hack_resources(); ss->now = double_time(); ss->dawn_of_time = ss->now; ss->prev_frame_time = ss->now; ss->awaiting_first_image_p = True; alloc_image (mi); } ENTRYPOINT void draw_slideshow (ModeInfo *mi) { slideshow_state *ss = &sss[MI_SCREEN(mi)]; int i; if (!ss->glx_context) return; glXMakeCurrent(MI_DISPLAY(mi), MI_WINDOW(mi), *(ss->glx_context)); if (ss->awaiting_first_image_p) { image *img = ss->images[0]; if (!img) abort(); if (!img->loaded_p) return; ss->awaiting_first_image_p = False; ss->dawn_of_time = double_time(); /* start the very first sprite fading in */ new_sprite (mi); } ss->now = double_time(); /* Each sprite has three states: fading in, full, fading out. The in/out states overlap like this: iiiiiiFFFFFFFFFFFFoooooo . . . . . . . . . . . . . . . . . . . . . . . . . . iiiiiiFFFFFFFFFFFFoooooo . . . . . . . . . . . . . . . . . . . . . . . . . . iiiiiiFFFFFFFFFFFFooooo So as soon as a sprite goes into the "out" state, we create a new sprite (in the "in" state.) */ if (ss->nsprites > 2) abort(); /* If a sprite is just entering the fade-out state, then add a new sprite in the fade-in state. */ for (i = 0; i < ss->nsprites; i++) { sprite *sp = ss->sprites[i]; if (sp->state != sp->prev_state && sp->state == (fade_seconds == 0 ? DEAD : OUT)) new_sprite (mi); } tick_sprites (mi); /* Now garbage collect the dead sprites. */ for (i = 0; i < ss->nsprites; i++) { sprite *sp = ss->sprites[i]; if (sp->state == DEAD) { destroy_sprite (mi, sp); i--; } } /* We can only ever end up with no sprites at all if the machine is being really slow and we hopped states directly from FULL to DEAD without passing OUT... */ if (ss->nsprites == 0) new_sprite (mi); if (!ss->redisplay_needed_p) return; if (debug_p && ss->now - ss->prev_frame_time > 1) fprintf (stderr, "%s: static screen for %.1f secs\n", blurb(), ss->now - ss->prev_frame_time); draw_sprites (mi); if (mi->fps_p) do_fps (mi); glFinish(); glXSwapBuffers (MI_DISPLAY (mi), MI_WINDOW(mi)); ss->prev_frame_time = ss->now; ss->redisplay_needed_p = False; check_fps (mi); } XSCREENSAVER_MODULE_2 ("GLSlideshow", glslideshow, slideshow) #endif /* USE_GL */ xscreensaver-5.36/hacks/glx/jigglypuff.c000644 000767 000024 00000065027 12710313214 020337 0ustar00jwzstaff000000 000000 /* jigglypuff - a most, most, unfortunate screensaver. * * Copyright (c) 2003 Keith Macleod (kmacleod@primus.ca) * * 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. * * Draws all varieties of obscene, spastic, puffy balls * orbiting lazily about the screen. More of an accident * than anything else. * * Apologies to anyone who thought they were getting a Pokemon * out of this. * * Of course, if you modify it to do something interesting and/or * funny, I'd appreciate receiving a copy. * * 04/06/2003 - Oops, figured out what was wrong with the sphere * mapping. I had assumed it was done in model space, * but of course I was totally wrong... Eye space you * say? Yup. km * * 03/31/2003 - Added chrome to the color options. The mapping * is anything but 'correct', but it's a pretty good * effect anyways, as long as the surface is jiggling * enough that you can't tell. Sure, it seems kind of odd * that it's reflecting a sky that's obviously not there, * but who has time to worry about silly details like * that? Not me, ah rekkin'. km * */ #ifdef STANDALONE # define DEFAULTS "*delay: 20000\n" \ "*showFPS: False\n" \ "*wireframe: False\n" \ "*suppressRotationAnimation: True\n" \ # define refresh_jigglypuff 0 # define release_jigglypuff 0 # include "xlockmore.h" #else # include "xlock.h" #endif #ifdef HAVE_CONFIG_H # include "config.h" #endif #include "xpm-ximage.h" #include "gltrackball.h" #include "../images/jigglymap.xpm" #ifdef USE_GL #define DEF_COLOR "cycle" #define DEF_SHININESS "100" #define DEF_COMPLEXITY "2" #define DEF_SPEED "500" #define DEF_DISTANCE "100" #define DEF_HOLD "800" #define DEF_SPHERISM "75" #define DEF_DAMPING "500" #define DEF_RANDOM "True" #define DEF_TETRA "False" #define DEF_SPOOKY "0" #ifndef max #define max(a,b) (((a)>(b))?(a):(b)) #define min(a,b) (((a)<(b))?(a):(b)) #endif /* Why isn't RAND_MAX correct in the first place? */ #define REAL_RAND_MAX (2.0*(float)RAND_MAX) static int spherism; static int hold; static int distance; static int damping; static int complexity; static int speed; static int do_tetrahedron; static int spooky; static char *color; static int shininess; static int random_parms; typedef struct solid solid; typedef struct { float stable_distance; float hold_strength; float spherify_strength; float damping_velocity; float damping_factor; int do_wireframe; int spooky; int color_style; GLint shininess; GLfloat jiggly_color[4]; GLfloat color_dir[3]; solid *shape; trackball_state *trackball; int button_down; float angle; float axis; float speed; GLXContext *glx_context; } jigglystruct; static jigglystruct *jss = NULL; static XrmOptionDescRec opts[] = { {"-random", ".Jigglypuff.random", XrmoptionNoArg, "true"}, {"+random", ".Jigglypuff.random", XrmoptionNoArg, "false"}, {"-tetra", ".Jigglypuff.tetra", XrmoptionNoArg, "true"}, {"+tetra", ".Jigglypuff.tetra", XrmoptionNoArg, "false"}, {"-spooky", ".Jigglypuff.spooky", XrmoptionSepArg, "0"}, {"-color", ".Jigglypuff.color", XrmoptionSepArg, DEF_COLOR}, {"-shininess", ".Jigglypuff.shininess", XrmoptionSepArg, DEF_SHININESS}, {"-complexity", ".Jigglypuff.complexity", XrmoptionSepArg, DEF_COMPLEXITY}, {"-speed", ".Jigglypuff.speed", XrmoptionSepArg, DEF_SPEED}, {"-spherism", ".Jigglypuff.spherism", XrmoptionSepArg, DEF_SPHERISM}, {"-hold", ".Jigglypuff.hold", XrmoptionSepArg, DEF_HOLD}, {"-distance", "Jigglypuff.distance", XrmoptionSepArg, DEF_DISTANCE}, {"-damping", "Jigglypuff.damping", XrmoptionSepArg, DEF_DAMPING} }; static argtype vars[] = { {&random_parms, "random", "Random", DEF_RANDOM, t_Bool}, {&do_tetrahedron, "tetra", "Tetra", DEF_TETRA, t_Bool}, {&spooky, "spooky", "Spooky", DEF_SPOOKY, t_Int}, {&color, "color", "Color", DEF_COLOR, t_String}, {&shininess, "shininess", "Shininess", DEF_SHININESS, t_Int}, {&complexity, "complexity", "Complexity", DEF_COMPLEXITY, t_Int}, {&speed, "speed", "Speed", DEF_SPEED, t_Int}, {&spherism, "spherism", "Spherism", DEF_SPHERISM, t_Int}, {&hold, "hold", "Hold", DEF_HOLD, t_Int}, {&distance, "distance", "Distance", DEF_DISTANCE, t_Int}, {&damping, "damping", "Damping", DEF_DAMPING, t_Int} }; #undef countof #define countof(x) ((int)(sizeof(x)/sizeof(*(x)))) ENTRYPOINT ModeSpecOpt jigglypuff_opts = {countof(opts), opts, countof(vars), vars, NULL}; #define COLOR_STYLE_NORMAL 0 #define COLOR_STYLE_CYCLE 1 #define COLOR_STYLE_CLOWNBARF 2 #define COLOR_STYLE_FLOWERBOX 3 #define COLOR_STYLE_CHROME 4 #define CLOWNBARF_NCOLORS 5 static const GLfloat clownbarf_colors[CLOWNBARF_NCOLORS][4] = { {0.7, 0.7, 0.0, 1.0}, {0.8, 0.1, 0.1, 1.0}, {0.1, 0.1, 0.8, 1.0}, {0.9, 0.9, 0.9, 1.0}, {0.0, 0.0, 0.0, 1.0} }; static const GLfloat flowerbox_colors[4][4] = { {0.7, 0.7, 0.0, 1.0}, {0.9, 0.0, 0.0, 1.0}, {0.0, 0.9, 0.0, 1.0}, {0.0, 0.0, 0.9, 1.0}, }; # if 0 /* I am not even going to *try* and make this bullshit compile without warning under gcc -std=c89 -pedantic. -jwz. */ #ifdef DEBUG # ifdef __GNUC__ /* GCC style */ #define _DEBUG(msg, args...) do { \ fprintf(stderr, "%s : %d : " msg ,__FILE__,__LINE__ ,##args); \ } while(0) # else /* C99 standard style */ #define _DEBUG(msg, ...) do { \ fprintf(stderr, "%s : %d : " msg ,__FILE__,__LINE__,__VA_ARGS__); \ } while(0) # endif #else # ifdef __GNUC__ /* GCC style */ #define _DEBUG(msg, args...) # else /* C99 standard style */ #define _DEBUG(msg, ...) # endif #endif #endif /* 0 */ /* This is all the half-edge b-rep code (as well as basic geometry) */ typedef struct face face; typedef struct edge edge; typedef struct hedge hedge; typedef struct vertex vertex; typedef GLfloat coord; typedef coord vector[3]; struct solid { face *faces; edge *edges; vertex *vertices; }; struct face { solid *s; hedge *start; const GLfloat *color; face *next; }; struct edge { solid *s; hedge *left; hedge *right; edge *next; }; struct hedge { face *f; edge *e; vertex *vtx; hedge *next; hedge *prev; }; struct vertex { solid *s; hedge *h; vector v; vector n; vector f; vector vel; vertex *next; }; static inline void vector_init(vector v, coord x, coord y, coord z) { v[0] = x; v[1] = y; v[2] = z; } static inline void vector_copy(vector d, vector s) { d[0] = s[0]; d[1] = s[1]; d[2] = s[2]; } static inline void vector_add(vector v1, vector v2, vector v) { vector_init(v, v1[0]+v2[0], v1[1]+v2[1], v1[2]+v2[2]); } static inline void vector_add_to(vector v1, vector v2) { v1[0] += v2[0]; v1[1] += v2[1]; v1[2] += v2[2]; } static inline void vector_sub(vector v1, vector v2, vector v) { vector_init(v, v1[0]-v2[0], v1[1]-v2[1], v1[2]-v2[2]); } static inline void vector_scale(vector v, coord s) { v[0] *= s; v[1] *= s; v[2] *= s; } /* static inline coord dot(vector v1, vector v2) { return v1[0]*v2[0] + v1[1]*v2[1] + v1[2]*v2[2]; } */ static inline void cross(vector v1, vector v2, vector v) { vector_init(v, v1[1]*v2[2] - v2[1]*v1[2], v1[2]*v2[0] - v2[2]*v1[0], v1[0]*v2[1] - v2[0]*v1[1]); } static inline coord magnitude2(vector v) { return v[0]*v[0] + v[1]*v[1] + v[2]*v[2]; } static inline coord magnitude(vector v) { return sqrt(v[0]*v[0] + v[1]*v[1] + v[2]*v[2]); } static inline void normalize(vector v) { coord mag = 1.0/sqrt(v[0]*v[0]+v[1]*v[1]+v[2]*v[2]); v[0] *= mag; v[1] *= mag; v[2] *= mag; } static inline void normalize_to(vector v, coord m) { coord mag = 1.0/sqrt(v[0]*v[0]+v[1]*v[1]+v[2]*v[2])/m; v[0] *= mag; v[1] *= mag; v[2] *= mag; } static inline void midpoint(vector v1, vector v2, vector v) { vector_init(v, v1[0] + 0.5 * (v2[0] - v1[0]), v1[1] + 0.5 * (v2[1] - v1[1]), v1[2] + 0.5 * (v2[2] - v1[2])); } static inline hedge *partner(hedge *h) { if(!h->e) return NULL; if(h == h->e->left) { return h->e->right; } else if(h == h->e->right) { return h->e->left; } else { /* _DEBUG("Inconsistent edge detected. Presumably, this is a bug. Exiting.\n", NULL); */ exit(-1); } } static vertex *vertex_new(solid *s, vector v) { vertex *vtx = (vertex*)malloc(sizeof(vertex)); if(!vtx) return NULL; vtx->s = s; vtx->next = s->vertices; s->vertices = vtx; vector_copy(vtx->v, v); vector_init(vtx->f, 0, 0, 0); vector_init(vtx->vel, 0, 0, 0); return vtx; } /* insert a new halfedge after hafter. this is low-level, * i.e. it is a helper for the split_* functions, which * maintain the consistency of the solid. */ static hedge *hedge_new(hedge *hafter, vertex *vtx) { hedge *h = (hedge*)malloc(sizeof(hedge)); if(!h) { /* _DEBUG("Out of memory in hedge_new()\n",NULL); */ return NULL; } h->f = hafter->f; h->vtx = vtx; h->e = NULL; h->prev = hafter; h->next = hafter->next; hafter->next = h; h->next->prev = h; return h; } static edge *edge_new(solid *s) { edge *e = (edge*)malloc(sizeof(edge)); if(!e) { /* _DEBUG("Out of memory in edge_new()\n",NULL);*/ exit(-1); } e->next = s->edges; s->edges = e; e-> s = s; e->left = e->right = NULL; return e; } static face *face_new(solid *s, hedge *h) { face *f = (face*)malloc(sizeof(face)); if(!f) { /* _DEBUG("Out of memory in face_new()",NULL);*/ exit(-1); } f->s = s; f->start = h; f->next = s->faces; s->faces = f; return f; } /* split vertex vtx, creating a new edge after v on f * that goes to a new vertex at v, adjoining whatever * face is on the other side of the halfedge attached to * v on f. * Assumptions: * there are at least 2 faces. * partner(h)->next->vtx == vtx * Post-assumptions: * the new halfedge will be inserted AFTER the indicated * halfedge. This means that f->start is guaranteed not to * change. * the vertex returned will have h==. */ static vertex *vertex_split(hedge *h, vector v) { hedge *h2, *hn1, *hn2; vertex *vtxn; edge *en; face *f1; f1 = h->f; h2 = partner(h); vtxn = vertex_new(f1->s, v); hn1 = hedge_new(h, vtxn); vtxn->h = hn1; hn2 = hedge_new(h2, vtxn); hn2->e = h->e; if(h2->e->left == h2) h2->e->left = hn2; else h2->e->right = hn2; en = edge_new(f1->s); en->left = hn1; en->right = h2; hn1->e = en; h2->e = en; return vtxn; } static face *face_split(face *f, hedge *h1, hedge *h2) { hedge *hn1, *hn2, *tmp; edge *en; face *fn; if(h1->f != f || h2->f != f) { /* _DEBUG("Whoah, cap'n, yer usin' a bad halfedge!\n",NULL);*/ exit(-1); } if(h1 == h2) { /* _DEBUG("Trying to split a face at a single vertex\n",NULL);*/ exit(-1); } /* close the loops */ h1->prev->next = h2; h2->prev->next = h1; tmp = h1->prev; h1->prev = h2->prev; h2->prev = tmp; /* insert halfedges & create edge */ hn1 = hedge_new(h2->prev, h1->vtx); hn2 = hedge_new(h1->prev, h2->vtx); en = edge_new(f->s); en->left = hn1; en->right = hn2; hn1->e = en; hn2->e = en; /* make the new face, first find out which hedge is contained * in the original face, then start the new face at the other */ tmp = f->start; while(tmp != h1 && tmp != h2) tmp = tmp->next; tmp = (tmp == h1) ? h2 : h1 ; fn = face_new(f->s, tmp); do { tmp->f = fn; tmp = tmp->next; } while(tmp != fn->start); fn->color = f->color; return fn; } static solid *solid_new(vector where) { solid *s = (solid*)malloc(sizeof(solid)); face *f1, *f2; edge *e; vertex *vtx; hedge *h1,*h2; s->faces = NULL; s->edges = NULL; s->vertices = NULL; h1 = (hedge*)malloc(sizeof(hedge)); h2 = (hedge*)malloc(sizeof(hedge)); h1->next = h1->prev = h1; h2->next = h2->prev = h2; vtx = vertex_new(s, where); vtx->h = h1; h1->vtx = vtx; h2->vtx = vtx; e = edge_new(s); e->left = h1; e->right = h2; h1->e = e; h2->e = e; f1 = face_new(s, h1); f2 = face_new(s, h2); h1->f = f1; h2->f = f2; return s; } /* This is all the code directly related to constructing the jigglypuff */ static void face_tessel2(face *f) { hedge *h1=f->start->prev, *h2=f->start->next; if(h1->next == h1) return; while(h2 != h1 && h2->next != h1) { f = face_split(f, h1, h2); h1 = f->start; h2 = f->start->next->next; } } /* This will only work with solids composed entirely of * triangular faces. It first add a vertex to the middle * of each edge, then walks the faces, connecting the * dots. * I'm abusing the fact that new faces and edges are always * added at the head of the list. If that ever changes, * this is borked. */ static void solid_tesselate(solid *s) { edge *e = s->edges; face *f = s->faces; while(e) { vector v; midpoint(e->left->vtx->v, e->right->vtx->v, v); vertex_split(e->left, v); e = e->next; } while(f) { face_tessel2(f); f=f->next; } } static void solid_spherify(solid * s, coord size) { vertex *vtx = s->vertices; while(vtx) { normalize_to(vtx->v, size); vtx = vtx->next; } } static solid *tetrahedron(jigglystruct *js) { solid *s; vertex *vtx; vector v; hedge *h; face *f; int i; vector_init(v, 1, 1, 1); s = solid_new(v); vector_init(v, -1, -1, 1); h = s->faces->start; vtx = vertex_split(h, v); vector_init(v, -1, 1, -1); vtx = vertex_split(vtx->h, v); h = vtx->h; f = face_split(s->faces, h, h->prev); vector_init(v, 1, -1, -1); vertex_split(f->start, v); f = s->faces->next->next; h = f->start; face_split(f, h, h->next->next); if(js->color_style == COLOR_STYLE_FLOWERBOX) { f = s->faces; for(i=0; i<4; i++) { f->color = flowerbox_colors[i]; f = f->next; } } return s; } static solid *tesselated_tetrahedron(coord size, int iter, jigglystruct *js) { solid *s = tetrahedron(js); int i; for(i=0; ifaces; while(f) { f->color = clownbarf_colors[random() % CLOWNBARF_NCOLORS]; f = f->next; } } /* Here be the rendering code */ static inline void vertex_calcnormal(vertex *vtx, jigglystruct *js) { hedge *start = vtx->h, *h=start; vector_init(vtx->n, 0, 0, 0); do { vector u, v, norm; vector_sub(h->prev->vtx->v, vtx->v, u); vector_sub(h->next->vtx->v, vtx->v, v); cross(u, v, norm); vector_add_to(vtx->n, norm); h = partner(h)->next; } while(h != start); if(!js->spooky) normalize(vtx->n); else vector_scale(vtx->n, js->spooky); } static inline void vertex_render(vertex *vtx, jigglystruct *js) { glNormal3fv(vtx->n); glVertex3fv(vtx->v); } /* This can be optimized somewhat due to the fact that all * the faces are triangles. I haven't actually tested to * see what the cost is of calling glBegin/glEnd for each * triangle. */ static inline int face_render(face *f, jigglystruct *js) { hedge *h1, *h2, *hend; int polys = 0; h1 = f->start; hend = h1->prev; h2 = h1->next; if(js->color_style == COLOR_STYLE_FLOWERBOX || js->color_style == COLOR_STYLE_CLOWNBARF) glColor4fv(f->color); glBegin(GL_TRIANGLES); while(h1 != hend && h2 !=hend) { vertex_render(h1->vtx, js); vertex_render(h2->vtx, js); vertex_render(hend->vtx, js); h1 = h2; h2 = h1->next; polys++; } glEnd(); return polys; } static int jigglypuff_render(jigglystruct *js) { int polys = 0; face *f = js->shape->faces; vertex *vtx = js->shape->vertices; while(vtx) { vertex_calcnormal(vtx, js); vtx = vtx->next; } while(f) { polys += face_render(f, js); f=f->next; } return polys; } /* This is the jiggling code */ /* stable distance when subdivs == 4 */ #define STABLE_DISTANCE 0.088388347648 static void update_shape(jigglystruct *js) { vertex *vtx = js->shape->vertices; edge *e = js->shape->edges; vector zero; vector_init(zero, 0, 0, 0); /* sum all the vertex-vertex forces */ while(e) { vector f; coord mag; vector_sub(e->left->vtx->v, e->right->vtx->v, f); mag = js->stable_distance - magnitude(f); vector_scale(f, mag); vector_add_to(e->left->vtx->f, f); vector_sub(zero, f, f); vector_add_to(e->right->vtx->f, f); e = e->next; } /* scale back the v-v force and add the spherical force * then add the result to the vertex velocity, damping * if necessary. Finally, move the vertex */ while(vtx) { coord mag; vector to_sphere; vector_scale(vtx->f, js->hold_strength); vector_copy(to_sphere, vtx->v); mag = 1 - magnitude(to_sphere); vector_scale(to_sphere, mag * js->spherify_strength); vector_add_to(vtx->f, to_sphere); vector_add_to(vtx->vel, vtx->f); vector_init(vtx->f, 0, 0, 0); mag = magnitude2(vtx->vel); if(mag > js->damping_velocity) vector_scale(vtx->vel, js->damping_factor); vector_add_to(vtx->v, vtx->vel); vtx = vtx->next; } } /* These are the various initialization routines */ static void init_texture(ModeInfo *mi) { XImage *img = xpm_to_ximage(mi->dpy, mi->xgwa.visual, mi->xgwa.colormap, jigglymap_xpm); glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, img->width, img->height, 0, GL_RGBA, GL_UNSIGNED_BYTE, img->data); XDestroyImage(img); } static void setup_opengl(ModeInfo *mi, jigglystruct *js) { const GLfloat lpos0[4] = {-12, 8, 12, 0}; const GLfloat lpos1[4] = {7, -5, 0, 0}; const GLfloat lcol0[4] = {0.7f, 0.7f, 0.65f, 1}; const GLfloat lcol1[4] = {0.3f, 0.2f, 0.1f, 1}; const GLfloat scolor[4]= {0.9f, 0.9f, 0.9f, 0.5f}; glDrawBuffer(GL_BACK); glShadeModel(GL_SMOOTH); glEnable(GL_DEPTH_TEST); if(js->do_wireframe) { glPolygonMode(GL_FRONT_AND_BACK, GL_LINE); } else { glCullFace(GL_BACK); glFrontFace(GL_CW); glEnable(GL_CULL_FACE); } if(js->color_style != COLOR_STYLE_CHROME) { glEnable(GL_LIGHTING); glEnable(GL_LIGHT0); glEnable(GL_LIGHT1); glLightfv(GL_LIGHT0, GL_POSITION, lpos0); glLightfv(GL_LIGHT1, GL_POSITION, lpos1); glLightfv(GL_LIGHT0, GL_DIFFUSE, lcol0); glLightfv(GL_LIGHT1, GL_DIFFUSE, lcol1); glEnable(GL_COLOR_MATERIAL); glColor4fv(js->jiggly_color); glMaterialfv(GL_FRONT, GL_SPECULAR, scolor); glMateriali(GL_FRONT, GL_SHININESS, js->shininess); } else { /* chrome */ init_texture(mi); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); glTexGeni(GL_S, GL_TEXTURE_GEN_MODE, GL_SPHERE_MAP); glTexGeni(GL_T, GL_TEXTURE_GEN_MODE, GL_SPHERE_MAP); glEnable(GL_TEXTURE_GEN_S); glEnable(GL_TEXTURE_GEN_T); glEnable(GL_TEXTURE_2D); glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_DECAL); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT); } } static int parse_color(jigglystruct *js) { unsigned int r, g, b; if(!strcmp(color, "clownbarf")) { js->color_style = COLOR_STYLE_CLOWNBARF; return 1; } else if(!strcmp(color, "flowerbox")) { js->color_style = COLOR_STYLE_FLOWERBOX; return 1; } # ifndef HAVE_JWZGLES /* SPHERE_MAP unimplemented */ else if(!strcmp(color, "chrome")) { js->color_style = COLOR_STYLE_CHROME; return 1; } # endif else if(!strcmp(color, "cycle")) { js->color_style = COLOR_STYLE_CYCLE; js->jiggly_color[0] = ((float)random()) / REAL_RAND_MAX * 0.7 + 0.3; js->jiggly_color[1] = ((float)random()) / REAL_RAND_MAX * 0.7 + 0.3; js->jiggly_color[2] = ((float)random()) / REAL_RAND_MAX * 0.7 + 0.3; js->jiggly_color[3] = 1.0f; js->color_dir[0] = ((float)random()) / REAL_RAND_MAX / 100.0; js->color_dir[1] = ((float)random()) / REAL_RAND_MAX / 100.0; js->color_dir[2] = ((float)random()) / REAL_RAND_MAX / 100.0; return 1; } else js->color_style = 0; if(strlen(color) != 7) return 0; if(sscanf(color,"#%02x%02x%02x", &r, &g, &b) != 3) { return 0; } js->jiggly_color[0] = ((float)r)/255; js->jiggly_color[1] = ((float)g)/255; js->jiggly_color[2] = ((float)b)/255; js->jiggly_color[3] = 1.0f; return 1; } static void randomize_parameters(jigglystruct *js) { do_tetrahedron = random() & 1; # ifndef HAVE_JWZGLES /* #### glPolygonMode other than GL_FILL unimplemented */ js->do_wireframe = !(random() & 3); # endif js->color_style = random() % 5; # ifdef HAVE_JWZGLES /* #### SPHERE_MAP unimplemented */ while (js->color_style == COLOR_STYLE_CHROME) js->color_style = random() % 5;; # endif if(js->color_style == COLOR_STYLE_NORMAL || js->color_style == COLOR_STYLE_CYCLE) { js->jiggly_color[0] = ((float)random()) / REAL_RAND_MAX * 0.5 + 0.5; js->jiggly_color[1] = ((float)random()) / REAL_RAND_MAX * 0.5 + 0.5; js->jiggly_color[2] = ((float)random()) / REAL_RAND_MAX * 0.5 + 0.5; js->jiggly_color[3] = 1.0f; if(js->color_style == COLOR_STYLE_CYCLE) { js->color_dir[0] = ((float)random()) / REAL_RAND_MAX / 100.0; js->color_dir[1] = ((float)random()) / REAL_RAND_MAX / 100.0; js->color_dir[2] = ((float)random()) / REAL_RAND_MAX / 100.0; } } if((js->color_style != COLOR_STYLE_CHROME) && (random() & 1)) js->spooky = (random() % 6) + 4; else js->spooky = 0; js->shininess = random() % 200; speed = (random() % 700) + 50; /* It' kind of dull if this is too high when it starts as a sphere */ spherism = do_tetrahedron ? (random() % 500) + 20 : (random() % 100) + 10; hold = (random() % 800) + 100; distance = (random() % 500) + 100; damping = (random() % 800) + 50; } static void calculate_parameters(jigglystruct *js, int subdivs) { /* try to compensate for the inherent instability at * low complexity. */ float dist_factor = (subdivs == 6) ? 2 : (subdivs == 5) ? 1 : 0.5; js->stable_distance = ((float)distance / 500.0) * (STABLE_DISTANCE / dist_factor); js->hold_strength = (float)hold / 10000.0; js->spherify_strength = (float)spherism / 10000.0; js->damping_velocity = (float)damping / 100000.0; js->damping_factor = 0.001/max(js->hold_strength, js->spherify_strength); js->speed = (float)speed / 1000.0; } /* The screenhack related functions begin here */ ENTRYPOINT Bool jigglypuff_handle_event(ModeInfo *mi, XEvent *event) { jigglystruct *js = &jss[MI_SCREEN(mi)]; if (gltrackball_event_handler (event, js->trackball, MI_WIDTH (mi), MI_HEIGHT (mi), &js->button_down)) return True; return False; } ENTRYPOINT void reshape_jigglypuff(ModeInfo *mi, int width, int height) { GLfloat aspect = (GLfloat)width / (GLfloat)height; glViewport(0, 0, width, height); glMatrixMode(GL_PROJECTION); glLoadIdentity(); glFrustum(-0.5*aspect, 0.5*aspect, -0.5, 0.5, 1, 20); /* glTranslatef(0, 0, -10);*/ } ENTRYPOINT void draw_jigglypuff(ModeInfo *mi) { jigglystruct *js = &jss[MI_SCREEN(mi)]; glXMakeCurrent(MI_DISPLAY(mi), MI_WINDOW(mi), *(js->glx_context)); glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glMatrixMode(GL_MODELVIEW); glLoadIdentity(); glTranslatef(0,0,-10); # ifdef HAVE_MOBILE /* Keep it the same relative size when rotated. */ { GLfloat h = MI_HEIGHT(mi) / (GLfloat) MI_WIDTH(mi); int o = (int) current_device_rotation(); if (o != 0 && o != 180 && o != -180) glScalef (1/h, 1/h, 1/h); } # endif glRotatef(js->angle, sin(js->axis), cos(js->axis), -sin(js->axis)); glTranslatef(0, 0, 5); if(!(js->button_down)) { if((js->angle += js->speed) >= 360.0f ) { js->angle -= 360.0f; } if((js->axis+=0.01f) >= 2*M_PI ) { js->axis -= 2*M_PI; } } gltrackball_rotate(js->trackball); if(js->color_style == COLOR_STYLE_CYCLE) { int i; vector_add(js->jiggly_color, js->color_dir, js->jiggly_color); for(i=0; i<3; i++) { if(js->jiggly_color[i] > 1.0 || js->jiggly_color[i] < 0.3) { js->color_dir[i] = (-js->color_dir[i]); js->jiggly_color[i] += js->color_dir[i]; } } glColor4fv(js->jiggly_color); } mi->polygon_count = jigglypuff_render(js); if(MI_IS_FPS(mi)) do_fps(mi); glFinish(); update_shape(js); glXSwapBuffers(MI_DISPLAY(mi), MI_WINDOW(mi)); } ENTRYPOINT void init_jigglypuff(ModeInfo *mi) { jigglystruct *js; int subdivs; if(!jss) { jss = (jigglystruct*) calloc(MI_NUM_SCREENS(mi), sizeof(jigglystruct)); if(!jss) { fprintf(stderr, "%s: No..memory...must...abort..\n", progname); exit(1); } } js = &jss[MI_SCREEN(mi)]; js->do_wireframe = MI_IS_WIREFRAME(mi); # ifdef HAVE_JWZGLES js->do_wireframe = 0; /* GL_LINE unimplemented */ # endif js->shininess = shininess; subdivs = (complexity==1) ? 4 : (complexity==2) ? 5 : (complexity==3) ? 6 : 5; js->spooky = spooky << (subdivs-3); if(!parse_color(js)) { fprintf(stderr, "%s: Bad color specification: '%s'.\n", progname, color); exit(-1); } if(random_parms) randomize_parameters(js); js->angle = frand(180); js->axis = frand(M_PI); js->shape = tesselated_tetrahedron(1, subdivs, js); if(!do_tetrahedron) solid_spherify(js->shape, 1); if(js->color_style == COLOR_STYLE_CLOWNBARF) clownbarf_colorize(js->shape); calculate_parameters(js, subdivs); if((js->glx_context = init_GL(mi)) != NULL) { glXMakeCurrent(MI_DISPLAY(mi), MI_WINDOW(mi), *(js->glx_context)); setup_opengl(mi, js); reshape_jigglypuff(mi, MI_WIDTH(mi), MI_HEIGHT(mi)); } else { MI_CLEARWINDOW(mi); } js->trackball = gltrackball_init(True); /* _DEBUG("distance : %f\nhold : %f\nspherify : %f\ndamping : %f\ndfact : %f\n", js->stable_distance, js->hold_strength, js->spherify_strength, js->damping_velocity, js->damping_factor); _DEBUG("wire : %d\nspooky : %d\nstyle : %d\nshininess : %d\n", js->do_wireframe, js->spooky, js->color_style, js->shininess);*/ } XSCREENSAVER_MODULE ("JigglyPuff", jigglypuff) #endif /* USE_GL */ /* This is the end of the file */ xscreensaver-5.36/hacks/glx/klein.c000644 000767 000024 00000166332 12707725632 017315 0ustar00jwzstaff000000 000000 /* klein --- Shows a Klein bottle that rotates in 4d or on which you can walk */ #if 0 static const char sccsid[] = "@(#)klein.c 1.1 08/10/04 xlockmore"; #endif /* Copyright (c) 2005-2014 Carsten Steger . */ /* * Permission to use, copy, modify, and distribute this software and its * documentation for any purpose and without fee is hereby granted, * provided that the above copyright notice appear in all copies and that * both that copyright notice and this permission notice appear in * supporting documentation. * * This file is provided AS IS with no warranties of any kind. The author * shall have no liability with respect to the infringement of copyrights, * trade secrets or any patents by this file or any part thereof. In no * event will the author be liable for any lost revenue or profits or * other special, indirect and consequential damages. * * REVISION HISTORY: * C. Steger - 08/10/04: Initial version * C. Steger - 09/08/03: Changes to the parameter handling * C. Steger - 13/12/25: Added the squeezed torus Klein bottle * C. Steger - 14/10/03: Moved the curlicue texture to curlicue.h */ /* * This program shows three different Klein bottles in 4d: the figure-8 Klein * bottle, the squeezed torus Klein bottle, or the Lawson Klein bottle. You * can walk on the Klein bottle, see it turn in 4d, or walk on it while it * turns in 4d. The figure-8 Klein bottle is well known in its 3d form. The * 4d form used in this program is an extension of the 3d form to 4d that * does not intersect itself in 4d (which can be seen in the depth colors * mode). The squeezed torus Klein bottle also does not intersect itself in * 4d (which can be seen in the depth colors mode). The Lawson Klein bottle, * on the other hand, does intersect itself in 4d. Its primary use is that * it has a nice appearance for walking and for turning in 3d. The Klein * bottle is a non-orientable surface. To make this apparent, the two-sided * color mode can be used. Alternatively, orientation markers (curling * arrows) can be drawn as a texture map on the surface of the Klein bottle. * While walking on the Klein bottle, you will notice that the orientation * of the curling arrows changes (which it must because the Klein bottle is * non-orientable). The program projects the 4d Klein bottle to 3d using * either a perspective or an orthographic projection. Which of the two * alternatives looks more appealing depends on the viewing mode and the * Klein bottle. For example, the Lawson Klein bottle looks nicest when * projected perspectively. The figure-8 Klein bottle, on the other * hand, looks nicer while walking when projected orthographically from 4d. * For the squeezed torus Klein bottle, both projection modes give equally * acceptable projections. The projected Klein bottle can then be projected * to the screen either perspectively or orthographically. When using the * walking modes, perspective projection to the screen should be used. There * are three display modes for the Klein bottle: mesh (wireframe), solid, or * transparent. Furthermore, the appearance of the Klein bottle can be as * a solid object or as a set of see-through bands. Finally, the colors * with with the Klein bottle is drawn can be set to two-sided, rainbow, or * depth. In the first case, the Klein bottle is drawn with red on one * "side" and green on the "other side". Of course, the Klein bottle only * has one side, so the color jumps from red to green along a curve on the * surface of the Klein bottle. This mode enables you to see that the Klein * bottle is non-orientable. The second mode draws the Klein bottle with * fully saturated rainbow colors. This gives a very nice effect when * combined with the see-through bands mode or with the orientation markers * drawn. The third mode draws the Klein bottle with colors that are chosen * according to the 4d "depth" of the points. This mode enables you to see * that the figure-8 and squeezed torus Klein bottles do not intersect * themselves in 4d, while the Lawson Klein bottle does intersect itself. * The rotation speed for each of the six planes around which the Klein * bottle rotates can be chosen. For the walk-and-turn more, only the * rotation speeds around the true 4d planes are used (the xy, xz, and yz * planes). Furthermore, in the walking modes the walking direction in the * 2d base square of the Klein bottle and the walking speed can be chosen. * This program is somewhat inspired by Thomas Banchoff's book "Beyond the * Third Dimension: Geometry, Computer Graphics, and Higher Dimensions", * Scientific American Library, 1990. */ #include "curlicue.h" #ifndef M_PI #define M_PI 3.14159265358979323846 #endif #define KLEIN_BOTTLE_FIGURE_8 0 #define KLEIN_BOTTLE_SQUEEZED_TORUS 1 #define KLEIN_BOTTLE_LAWSON 2 #define NUM_KLEIN_BOTTLES 3 #define DISP_WIREFRAME 0 #define DISP_SURFACE 1 #define DISP_TRANSPARENT 2 #define NUM_DISPLAY_MODES 3 #define APPEARANCE_SOLID 0 #define APPEARANCE_BANDS 1 #define NUM_APPEARANCES 2 #define COLORS_TWOSIDED 0 #define COLORS_RAINBOW 1 #define COLORS_DEPTH 2 #define NUM_COLORS 3 #define VIEW_WALK 0 #define VIEW_TURN 1 #define VIEW_WALKTURN 2 #define NUM_VIEW_MODES 3 #define DISP_3D_PERSPECTIVE 0 #define DISP_3D_ORTHOGRAPHIC 1 #define NUM_DISP_3D_MODES 2 #define DISP_4D_PERSPECTIVE 0 #define DISP_4D_ORTHOGRAPHIC 1 #define NUM_DISP_4D_MODES 2 #define DEF_KLEIN_BOTTLE "random" #define DEF_DISPLAY_MODE "random" #define DEF_APPEARANCE "random" #define DEF_COLORS "random" #define DEF_VIEW_MODE "random" #define DEF_MARKS "False" #define DEF_PROJECTION_3D "random" #define DEF_PROJECTION_4D "random" #define DEF_SPEEDWX "1.1" #define DEF_SPEEDWY "1.3" #define DEF_SPEEDWZ "1.5" #define DEF_SPEEDXY "1.7" #define DEF_SPEEDXZ "1.9" #define DEF_SPEEDYZ "2.1" #define DEF_WALK_DIRECTION "7.0" #define DEF_WALK_SPEED "20.0" #ifdef STANDALONE # define DEFAULTS "*delay: 10000 \n" \ "*showFPS: False \n" \ # define refresh_klein 0 # include "xlockmore.h" /* from the xscreensaver distribution */ #else /* !STANDALONE */ # include "xlock.h" /* from the xlockmore distribution */ #endif /* !STANDALONE */ #ifdef USE_GL #ifndef HAVE_JWXYZ # include #endif #include "gltrackball.h" #ifdef USE_MODULES ModStruct klein_description = {"klein", "init_klein", "draw_klein", "release_klein", "draw_klein", "change_klein", NULL, &klein_opts, 25000, 1, 1, 1, 1.0, 4, "", "Rotate a Klein bottle in 4d or walk on it", 0, NULL}; #endif static char *klein_bottle; static int bottle_type; static char *mode; static int display_mode; static char *appear; static int appearance; static char *color_mode; static int colors; static char *view_mode; static int view; static Bool marks; static char *proj_3d; static int projection_3d; static char *proj_4d; static int projection_4d; static float speed_wx; static float speed_wy; static float speed_wz; static float speed_xy; static float speed_xz; static float speed_yz; static float walk_direction; static float walk_speed; static XrmOptionDescRec opts[] = { {"-klein-bottle", ".kleinBottle", XrmoptionSepArg, 0 }, {"-figure-8", ".kleinBottle", XrmoptionNoArg, "figure-8" }, {"-squeezed-torus", ".kleinBottle", XrmoptionNoArg, "squeezed-torus" }, {"-lawson", ".kleinBottle", XrmoptionNoArg, "lawson" }, {"-mode", ".displayMode", XrmoptionSepArg, 0 }, {"-wireframe", ".displayMode", XrmoptionNoArg, "wireframe" }, {"-surface", ".displayMode", XrmoptionNoArg, "surface" }, {"-transparent", ".displayMode", XrmoptionNoArg, "transparent" }, {"-appearance", ".appearance", XrmoptionSepArg, 0 }, {"-solid", ".appearance", XrmoptionNoArg, "solid" }, {"-bands", ".appearance", XrmoptionNoArg, "bands" }, {"-colors", ".colors", XrmoptionSepArg, 0 }, {"-twosided", ".colors", XrmoptionNoArg, "two-sided" }, {"-rainbow", ".colors", XrmoptionNoArg, "rainbow" }, {"-depth", ".colors", XrmoptionNoArg, "depth" }, {"-view-mode", ".viewMode", XrmoptionSepArg, 0 }, {"-walk", ".viewMode", XrmoptionNoArg, "walk" }, {"-turn", ".viewMode", XrmoptionNoArg, "turn" }, {"-walk-turn", ".viewMode", XrmoptionNoArg, "walk-turn" }, {"-orientation-marks", ".marks", XrmoptionNoArg, "on"}, {"+orientation-marks", ".marks", XrmoptionNoArg, "off"}, {"-projection-3d", ".projection3d", XrmoptionSepArg, 0 }, {"-perspective-3d", ".projection3d", XrmoptionNoArg, "perspective" }, {"-orthographic-3d", ".projection3d", XrmoptionNoArg, "orthographic" }, {"-projection-4d", ".projection4d", XrmoptionSepArg, 0 }, {"-perspective-4d", ".projection4d", XrmoptionNoArg, "perspective" }, {"-orthographic-4d", ".projection4d", XrmoptionNoArg, "orthographic" }, {"-speed-wx", ".speedwx", XrmoptionSepArg, 0 }, {"-speed-wy", ".speedwy", XrmoptionSepArg, 0 }, {"-speed-wz", ".speedwz", XrmoptionSepArg, 0 }, {"-speed-xy", ".speedxy", XrmoptionSepArg, 0 }, {"-speed-xz", ".speedxz", XrmoptionSepArg, 0 }, {"-speed-yz", ".speedyz", XrmoptionSepArg, 0 }, {"-walk-direction", ".walkDirection", XrmoptionSepArg, 0 }, {"-walk-speed", ".walkSpeed", XrmoptionSepArg, 0 } }; static argtype vars[] = { { &klein_bottle, "kleinBottle", "KleinBottle", DEF_KLEIN_BOTTLE, t_String }, { &mode, "displayMode", "DisplayMode", DEF_DISPLAY_MODE, t_String }, { &appear, "appearance", "Appearance", DEF_APPEARANCE, t_String }, { &color_mode, "colors", "Colors", DEF_COLORS, t_String }, { &view_mode, "viewMode", "ViewMode", DEF_VIEW_MODE, t_String }, { &marks, "marks", "Marks", DEF_MARKS, t_Bool }, { &proj_3d, "projection3d", "Projection3d", DEF_PROJECTION_3D, t_String }, { &proj_4d, "projection4d", "Projection4d", DEF_PROJECTION_4D, t_String }, { &speed_wx, "speedwx", "Speedwx", DEF_SPEEDWX, t_Float}, { &speed_wy, "speedwy", "Speedwy", DEF_SPEEDWY, t_Float}, { &speed_wz, "speedwz", "Speedwz", DEF_SPEEDWZ, t_Float}, { &speed_xy, "speedxy", "Speedxy", DEF_SPEEDXY, t_Float}, { &speed_xz, "speedxz", "Speedxz", DEF_SPEEDXZ, t_Float}, { &speed_yz, "speedyz", "Speedyz", DEF_SPEEDYZ, t_Float}, { &walk_direction, "walkDirection", "WalkDirection", DEF_WALK_DIRECTION, t_Float}, { &walk_speed, "walkSpeed", "WalkSpeed", DEF_WALK_SPEED, t_Float} }; ENTRYPOINT ModeSpecOpt klein_opts = {sizeof opts / sizeof opts[0], opts, sizeof vars / sizeof vars[0], vars, NULL}; /* Radius of the figure-8 Klein bottle */ #define FIGURE_8_RADIUS 2.0 /* Radius of the squeezed torus Klein bottle */ #define SQUEEZED_TORUS_RADIUS 2.0 /* Offset by which we walk above the Klein bottle */ #define DELTAY 0.02 /* Number of subdivisions of the Klein bottle */ #define NUMU 128 #define NUMV 128 /* Number of subdivisions per band */ #define NUMB 8 typedef struct { GLint WindH, WindW; GLXContext *glx_context; /* 4D rotation angles */ float alpha, beta, delta, zeta, eta, theta; /* Movement parameters */ float umove, vmove, dumove, dvmove; int side; /* The viewing offset in 4d */ float offset4d[4]; /* The viewing offset in 3d */ float offset3d[4]; /* The 4d coordinates of the Klein bottle and their derivatives */ float x[(NUMU+1)*(NUMV+1)][4]; float xu[(NUMU+1)*(NUMV+1)][4]; float xv[(NUMU+1)*(NUMV+1)][4]; float pp[(NUMU+1)*(NUMV+1)][3]; float pn[(NUMU+1)*(NUMV+1)][3]; /* The precomputed colors of the Klein bottle */ float col[(NUMU+1)*(NUMV+1)][4]; /* The precomputed texture coordinates of the Klein bottle */ float tex[(NUMU+1)*(NUMV+1)][2]; /* The "curlicue" texture */ GLuint tex_name; /* Aspect ratio of the current window */ float aspect; /* Trackball states */ trackball_state *trackballs[2]; int current_trackball; Bool button_pressed; /* A random factor to modify the rotation speeds */ float speed_scale; } kleinstruct; static kleinstruct *klein = (kleinstruct *) NULL; /* Add a rotation around the wx-plane to the matrix m. */ static void rotatewx(float m[4][4], float phi) { float c, s, u, v; int i; phi *= M_PI/180.0; c = cos(phi); s = sin(phi); for (i=0; i<4; i++) { u = m[i][1]; v = m[i][2]; m[i][1] = c*u+s*v; m[i][2] = -s*u+c*v; } } /* Add a rotation around the wy-plane to the matrix m. */ static void rotatewy(float m[4][4], float phi) { float c, s, u, v; int i; phi *= M_PI/180.0; c = cos(phi); s = sin(phi); for (i=0; i<4; i++) { u = m[i][0]; v = m[i][2]; m[i][0] = c*u-s*v; m[i][2] = s*u+c*v; } } /* Add a rotation around the wz-plane to the matrix m. */ static void rotatewz(float m[4][4], float phi) { float c, s, u, v; int i; phi *= M_PI/180.0; c = cos(phi); s = sin(phi); for (i=0; i<4; i++) { u = m[i][0]; v = m[i][1]; m[i][0] = c*u+s*v; m[i][1] = -s*u+c*v; } } /* Add a rotation around the xy-plane to the matrix m. */ static void rotatexy(float m[4][4], float phi) { float c, s, u, v; int i; phi *= M_PI/180.0; c = cos(phi); s = sin(phi); for (i=0; i<4; i++) { u = m[i][2]; v = m[i][3]; m[i][2] = c*u+s*v; m[i][3] = -s*u+c*v; } } /* Add a rotation around the xz-plane to the matrix m. */ static void rotatexz(float m[4][4], float phi) { float c, s, u, v; int i; phi *= M_PI/180.0; c = cos(phi); s = sin(phi); for (i=0; i<4; i++) { u = m[i][1]; v = m[i][3]; m[i][1] = c*u-s*v; m[i][3] = s*u+c*v; } } /* Add a rotation around the yz-plane to the matrix m. */ static void rotateyz(float m[4][4], float phi) { float c, s, u, v; int i; phi *= M_PI/180.0; c = cos(phi); s = sin(phi); for (i=0; i<4; i++) { u = m[i][0]; v = m[i][3]; m[i][0] = c*u-s*v; m[i][3] = s*u+c*v; } } /* Compute the rotation matrix m from the rotation angles. */ static void rotateall(float al, float be, float de, float ze, float et, float th, float m[4][4]) { int i, j; for (i=0; i<4; i++) for (j=0; j<4; j++) m[i][j] = (i==j); rotatewx(m,al); rotatewy(m,be); rotatewz(m,de); rotatexy(m,ze); rotatexz(m,et); rotateyz(m,th); } /* Compute the rotation matrix m from the 4d rotation angles. */ static void rotateall4d(float ze, float et, float th, float m[4][4]) { int i, j; for (i=0; i<4; i++) for (j=0; j<4; j++) m[i][j] = (i==j); rotatexy(m,ze); rotatexz(m,et); rotateyz(m,th); } /* Multiply two rotation matrices: o=m*n. */ static void mult_rotmat(float m[4][4], float n[4][4], float o[4][4]) { int i, j, k; for (i=0; i<4; i++) { for (j=0; j<4; j++) { o[i][j] = 0.0; for (k=0; k<4; k++) o[i][j] += m[i][k]*n[k][j]; } } } /* Compute a 4D rotation matrix from two unit quaternions. */ static void quats_to_rotmat(float p[4], float q[4], float m[4][4]) { double al, be, de, ze, et, th; double r00, r01, r02, r12, r22; r00 = 1.0-2.0*(p[1]*p[1]+p[2]*p[2]); r01 = 2.0*(p[0]*p[1]+p[2]*p[3]); r02 = 2.0*(p[2]*p[0]-p[1]*p[3]); r12 = 2.0*(p[1]*p[2]+p[0]*p[3]); r22 = 1.0-2.0*(p[1]*p[1]+p[0]*p[0]); al = atan2(-r12,r22)*180.0/M_PI; be = atan2(r02,sqrt(r00*r00+r01*r01))*180.0/M_PI; de = atan2(-r01,r00)*180.0/M_PI; r00 = 1.0-2.0*(q[1]*q[1]+q[2]*q[2]); r01 = 2.0*(q[0]*q[1]+q[2]*q[3]); r02 = 2.0*(q[2]*q[0]-q[1]*q[3]); r12 = 2.0*(q[1]*q[2]+q[0]*q[3]); r22 = 1.0-2.0*(q[1]*q[1]+q[0]*q[0]); et = atan2(-r12,r22)*180.0/M_PI; th = atan2(r02,sqrt(r00*r00+r01*r01))*180.0/M_PI; ze = atan2(-r01,r00)*180.0/M_PI; rotateall(al,be,de,ze,et,-th,m); } /* Compute a fully saturated and bright color based on an angle. */ static void color(double angle, float col[4]) { int s; double t; if (colors == COLORS_TWOSIDED) return; if (angle >= 0.0) angle = fmod(angle,2.0*M_PI); else angle = fmod(angle,-2.0*M_PI); s = floor(angle/(M_PI/3)); t = angle/(M_PI/3)-s; if (s >= 6) s = 0; switch (s) { case 0: col[0] = 1.0; col[1] = t; col[2] = 0.0; break; case 1: col[0] = 1.0-t; col[1] = 1.0; col[2] = 0.0; break; case 2: col[0] = 0.0; col[1] = 1.0; col[2] = t; break; case 3: col[0] = 0.0; col[1] = 1.0-t; col[2] = 1.0; break; case 4: col[0] = t; col[1] = 0.0; col[2] = 1.0; break; case 5: col[0] = 1.0; col[1] = 0.0; col[2] = 1.0-t; break; } if (display_mode == DISP_TRANSPARENT) col[3] = 0.7; else col[3] = 1.0; } /* Set up the figure-8 Klein bottle coordinates, colors, and texture. */ static void setup_figure8(ModeInfo *mi, double umin, double umax, double vmin, double vmax) { int i, j, k, l; double u, v, ur, vr; double cu, su, cv, sv, cv2, sv2, c2u, s2u; kleinstruct *kb = &klein[MI_SCREEN(mi)]; ur = umax-umin; vr = vmax-vmin; for (i=0; i<=NUMU; i++) { for (j=0; j<=NUMV; j++) { k = i*(NUMV+1)+j; u = -ur*j/NUMU+umin; v = vr*i/NUMV+vmin; if (colors == COLORS_DEPTH) color((cos(u)+1.0)*M_PI*2.0/3.0,kb->col[k]); else color(v,kb->col[k]); kb->tex[k][0] = -32*u/(2.0*M_PI); kb->tex[k][1] = 32*v/(2.0*M_PI); cu = cos(u); su = sin(u); cv = cos(v); sv = sin(v); cv2 = cos(0.5*v); sv2 = sin(0.5*v); c2u = cos(2.0*u); s2u = sin(2.0*u); kb->x[k][0] = (su*cv2-s2u*sv2+FIGURE_8_RADIUS)*cv; kb->x[k][1] = (su*cv2-s2u*sv2+FIGURE_8_RADIUS)*sv; kb->x[k][2] = su*sv2+s2u*cv2; kb->x[k][3] = cu; kb->xu[k][0] = (cu*cv2-2.0*c2u*sv2)*cv; kb->xu[k][1] = (cu*cv2-2.0*c2u*sv2)*sv; kb->xu[k][2] = cu*sv2+2.0*c2u*cv2; kb->xu[k][3] = -su; kb->xv[k][0] = ((-0.5*su*sv2-0.5*s2u*cv2)*cv- (su*cv2-s2u*sv2+FIGURE_8_RADIUS)*sv); kb->xv[k][1] = ((-0.5*su*sv2-0.5*s2u*cv2)*sv+ (su*cv2-s2u*sv2+FIGURE_8_RADIUS)*cv); kb->xv[k][2] = 0.5*su*cv2-0.5*s2u*sv2; kb->xv[k][3] = 0.0; for (l=0; l<4; l++) { kb->x[k][l] /= FIGURE_8_RADIUS+1.25; kb->xu[k][l] /= FIGURE_8_RADIUS+1.25; kb->xv[k][l] /= FIGURE_8_RADIUS+1.25; } } } } /* Set up the squeezed torus Klein bottle coordinates, colors, and texture. */ static void setup_squeezed_torus(ModeInfo *mi, double umin, double umax, double vmin, double vmax) { int i, j, k, l; double u, v, ur, vr; double cu, su, cv, sv, cv2, sv2; kleinstruct *kb = &klein[MI_SCREEN(mi)]; ur = umax-umin; vr = vmax-vmin; for (i=0; i<=NUMU; i++) { for (j=0; j<=NUMV; j++) { k = i*(NUMV+1)+j; u = -ur*j/NUMU+umin; v = vr*i/NUMV+vmin; if (colors == COLORS_DEPTH) color((sin(u)*sin(0.5*v)+1.0)*M_PI*2.0/3.0,kb->col[k]); else color(v,kb->col[k]); kb->tex[k][0] = -32*u/(2.0*M_PI); kb->tex[k][1] = 32*v/(2.0*M_PI); cu = cos(u); su = sin(u); cv = cos(v); sv = sin(v); cv2 = cos(0.5*v); sv2 = sin(0.5*v); kb->x[k][0] = (SQUEEZED_TORUS_RADIUS+cu)*cv; kb->x[k][1] = (SQUEEZED_TORUS_RADIUS+cu)*sv; kb->x[k][2] = su*cv2; kb->x[k][3] = su*sv2; kb->xu[k][0] = -su*cv; kb->xu[k][1] = -su*sv; kb->xu[k][2] = cu*cv2; kb->xu[k][3] = cu*sv2; kb->xv[k][0] = -(SQUEEZED_TORUS_RADIUS+cu)*sv; kb->xv[k][1] = (SQUEEZED_TORUS_RADIUS+cu)*cv; kb->xv[k][2] = -0.5*su*sv2; kb->xv[k][3] = 0.5*su*cv2; for (l=0; l<4; l++) { kb->x[k][l] /= SQUEEZED_TORUS_RADIUS+1.25; kb->xu[k][l] /= SQUEEZED_TORUS_RADIUS+1.25; kb->xv[k][l] /= SQUEEZED_TORUS_RADIUS+1.25; } } } } /* Set up the Lawson Klein bottle coordinates, colors, and texture. */ static void setup_lawson(ModeInfo *mi, double umin, double umax, double vmin, double vmax) { int i, j, k; double u, v, ur, vr; double cu, su, cv, sv, cv2, sv2; kleinstruct *kb = &klein[MI_SCREEN(mi)]; ur = umax-umin; vr = vmax-vmin; for (i=0; i<=NUMV; i++) { for (j=0; j<=NUMU; j++) { k = i*(NUMU+1)+j; u = -ur*j/NUMU+umin; v = vr*i/NUMV+vmin; if (colors == COLORS_DEPTH) color((sin(u)*cos(0.5*v)+1.0)*M_PI*2.0/3.0,kb->col[k]); else color(v,kb->col[k]); kb->tex[k][0] = -32*u/(2.0*M_PI); kb->tex[k][1] = 32*v/(2.0*M_PI); cu = cos(u); su = sin(u); cv = cos(v); sv = sin(v); cv2 = cos(0.5*v); sv2 = sin(0.5*v); kb->x[k][0] = cu*cv; kb->x[k][1] = cu*sv; kb->x[k][2] = su*sv2; kb->x[k][3] = su*cv2; kb->xu[k][0] = -su*cv; kb->xu[k][1] = -su*sv; kb->xu[k][2] = cu*sv2; kb->xu[k][3] = cu*cv2; kb->xv[k][0] = -cu*sv; kb->xv[k][1] = cu*cv; kb->xv[k][2] = su*cv2*0.5; kb->xv[k][3] = -su*sv2*0.5; } } } /* Draw a figure-8 Klein bottle projected into 3D. */ static int figure8(ModeInfo *mi, double umin, double umax, double vmin, double vmax) { int polys = 0; static const GLfloat mat_diff_red[] = { 1.0, 0.0, 0.0, 1.0 }; static const GLfloat mat_diff_green[] = { 0.0, 1.0, 0.0, 1.0 }; static const GLfloat mat_diff_trans_red[] = { 1.0, 0.0, 0.0, 0.7 }; static const GLfloat mat_diff_trans_green[] = { 0.0, 1.0, 0.0, 0.7 }; float p[3], pu[3], pv[3], pm[3], n[3], b[3], mat[4][4]; int i, j, k, l, m, o; double u, v; double xx[4], xxu[4], xxv[4], y[4], yu[4], yv[4]; double q, r, s, t; double cu, su, cv, sv, cv2, sv2, c2u, s2u; float q1[4], q2[4], r1[4][4], r2[4][4]; kleinstruct *kb = &klein[MI_SCREEN(mi)]; if (view == VIEW_WALK || view == VIEW_WALKTURN) { /* Compute the rotation that rotates the Klein bottle in 4D without the trackball rotations. */ rotateall4d(kb->zeta,kb->eta,kb->theta,mat); u = kb->umove; v = kb->vmove; cu = cos(u); su = sin(u); cv = cos(v); sv = sin(v); cv2 = cos(0.5*v); sv2 = sin(0.5*v); c2u = cos(2.0*u); s2u = sin(2.0*u); xx[0] = (su*cv2-s2u*sv2+FIGURE_8_RADIUS)*cv; xx[1] = (su*cv2-s2u*sv2+FIGURE_8_RADIUS)*sv; xx[2] = su*sv2+s2u*cv2; xx[3] = cu; xxu[0] = (cu*cv2-2.0*c2u*sv2)*cv; xxu[1] = (cu*cv2-2.0*c2u*sv2)*sv; xxu[2] = cu*sv2+2.0*c2u*cv2; xxu[3] = -su; xxv[0] = ((-0.5*su*sv2-0.5*s2u*cv2)*cv- (su*cv2-s2u*sv2+FIGURE_8_RADIUS)*sv); xxv[1] = ((-0.5*su*sv2-0.5*s2u*cv2)*sv+ (su*cv2-s2u*sv2+FIGURE_8_RADIUS)*cv); xxv[2] = 0.5*su*cv2-0.5*s2u*sv2; xxv[3] = 0.0; for (l=0; l<4; l++) { xx[l] /= FIGURE_8_RADIUS+1.25; xxu[l] /= FIGURE_8_RADIUS+1.25; xxv[l] /= FIGURE_8_RADIUS+1.25; } for (l=0; l<4; l++) { y[l] = (mat[l][0]*xx[0]+mat[l][1]*xx[1]+ mat[l][2]*xx[2]+mat[l][3]*xx[3]); yu[l] = (mat[l][0]*xxu[0]+mat[l][1]*xxu[1]+ mat[l][2]*xxu[2]+mat[l][3]*xxu[3]); yv[l] = (mat[l][0]*xxv[0]+mat[l][1]*xxv[1]+ mat[l][2]*xxv[2]+mat[l][3]*xxv[3]); } if (projection_4d == DISP_4D_ORTHOGRAPHIC) { for (l=0; l<3; l++) { p[l] = y[l]+kb->offset4d[l]; pu[l] = yu[l]; pv[l] = yv[l]; } } else { s = y[3]+kb->offset4d[3]; q = 1.0/s; t = q*q; for (l=0; l<3; l++) { r = y[l]+kb->offset4d[l]; p[l] = r*q; pu[l] = (yu[l]*s-r*yu[3])*t; pv[l] = (yv[l]*s-r*yv[3])*t; } } n[0] = pu[1]*pv[2]-pu[2]*pv[1]; n[1] = pu[2]*pv[0]-pu[0]*pv[2]; n[2] = pu[0]*pv[1]-pu[1]*pv[0]; t = 1.0/(kb->side*4.0*sqrt(n[0]*n[0]+n[1]*n[1]+n[2]*n[2])); n[0] *= t; n[1] *= t; n[2] *= t; pm[0] = pu[0]*kb->dumove+pv[0]*kb->dvmove; pm[1] = pu[1]*kb->dumove+pv[1]*kb->dvmove; pm[2] = pu[2]*kb->dumove+pv[2]*kb->dvmove; t = 1.0/(4.0*sqrt(pm[0]*pm[0]+pm[1]*pm[1]+pm[2]*pm[2])); pm[0] *= t; pm[1] *= t; pm[2] *= t; b[0] = n[1]*pm[2]-n[2]*pm[1]; b[1] = n[2]*pm[0]-n[0]*pm[2]; b[2] = n[0]*pm[1]-n[1]*pm[0]; t = 1.0/(4.0*sqrt(b[0]*b[0]+b[1]*b[1]+b[2]*b[2])); b[0] *= t; b[1] *= t; b[2] *= t; /* Compute alpha, beta, delta from the three basis vectors. | -b[0] -b[1] -b[2] | m = | n[0] n[1] n[2] | | -pm[0] -pm[1] -pm[2] | */ kb->alpha = atan2(-n[2],-pm[2])*180/M_PI; kb->beta = atan2(-b[2],sqrt(b[0]*b[0]+b[1]*b[1]))*180/M_PI; kb->delta = atan2(b[1],-b[0])*180/M_PI; /* Compute the rotation that rotates the Klein bottle in 4D. */ rotateall(kb->alpha,kb->beta,kb->delta,kb->zeta,kb->eta,kb->theta,mat); u = kb->umove; v = kb->vmove; cu = cos(u); su = sin(u); cv = cos(v); sv = sin(v); cv2 = cos(0.5*v); sv2 = sin(0.5*v); /*c2u = cos(2.0*u);*/ s2u = sin(2.0*u); xx[0] = (su*cv2-s2u*sv2+FIGURE_8_RADIUS)*cv; xx[1] = (su*cv2-s2u*sv2+FIGURE_8_RADIUS)*sv; xx[2] = su*sv2+s2u*cv2; xx[3] = cu; for (l=0; l<4; l++) xx[l] /= FIGURE_8_RADIUS+1.25; for (l=0; l<4; l++) { r = 0.0; for (m=0; m<4; m++) r += mat[l][m]*xx[m]; y[l] = r; } if (projection_4d == DISP_4D_ORTHOGRAPHIC) { for (l=0; l<3; l++) p[l] = y[l]+kb->offset4d[l]; } else { s = y[3]+kb->offset4d[3]; for (l=0; l<3; l++) p[l] = (y[l]+kb->offset4d[l])/s; } kb->offset3d[0] = -p[0]; kb->offset3d[1] = -p[1]-DELTAY; kb->offset3d[2] = -p[2]; } else { /* Compute the rotation that rotates the Klein bottle in 4D, including the trackball rotations. */ rotateall(kb->alpha,kb->beta,kb->delta,kb->zeta,kb->eta,kb->theta,r1); gltrackball_get_quaternion(kb->trackballs[0],q1); gltrackball_get_quaternion(kb->trackballs[1],q2); quats_to_rotmat(q1,q2,r2); mult_rotmat(r2,r1,mat); } /* Project the points from 4D to 3D. */ for (i=0; i<=NUMU; i++) { for (j=0; j<=NUMV; j++) { o = i*(NUMV+1)+j; for (l=0; l<4; l++) { y[l] = (mat[l][0]*kb->x[o][0]+mat[l][1]*kb->x[o][1]+ mat[l][2]*kb->x[o][2]+mat[l][3]*kb->x[o][3]); yu[l] = (mat[l][0]*kb->xu[o][0]+mat[l][1]*kb->xu[o][1]+ mat[l][2]*kb->xu[o][2]+mat[l][3]*kb->xu[o][3]); yv[l] = (mat[l][0]*kb->xv[o][0]+mat[l][1]*kb->xv[o][1]+ mat[l][2]*kb->xv[o][2]+mat[l][3]*kb->xv[o][3]); } if (projection_4d == DISP_4D_ORTHOGRAPHIC) { for (l=0; l<3; l++) { kb->pp[o][l] = (y[l]+kb->offset4d[l])+kb->offset3d[l]; pu[l] = yu[l]; pv[l] = yv[l]; } } else { s = y[3]+kb->offset4d[3]; q = 1.0/s; t = q*q; for (l=0; l<3; l++) { r = y[l]+kb->offset4d[l]; kb->pp[o][l] = r*q+kb->offset3d[l]; pu[l] = (yu[l]*s-r*yu[3])*t; pv[l] = (yv[l]*s-r*yv[3])*t; } } kb->pn[o][0] = pu[1]*pv[2]-pu[2]*pv[1]; kb->pn[o][1] = pu[2]*pv[0]-pu[0]*pv[2]; kb->pn[o][2] = pu[0]*pv[1]-pu[1]*pv[0]; t = 1.0/sqrt(kb->pn[o][0]*kb->pn[o][0]+kb->pn[o][1]*kb->pn[o][1]+ kb->pn[o][2]*kb->pn[o][2]); kb->pn[o][0] *= t; kb->pn[o][1] *= t; kb->pn[o][2] *= t; } } if (colors == COLORS_TWOSIDED) { glColor3fv(mat_diff_red); if (display_mode == DISP_TRANSPARENT) { glMaterialfv(GL_FRONT,GL_AMBIENT_AND_DIFFUSE,mat_diff_trans_red); glMaterialfv(GL_BACK,GL_AMBIENT_AND_DIFFUSE,mat_diff_trans_green); } else { glMaterialfv(GL_FRONT,GL_AMBIENT_AND_DIFFUSE,mat_diff_red); glMaterialfv(GL_BACK,GL_AMBIENT_AND_DIFFUSE,mat_diff_green); } } glBindTexture(GL_TEXTURE_2D,kb->tex_name); for (i=0; i= NUMB/2)) continue; if (display_mode == DISP_WIREFRAME) glBegin(GL_QUAD_STRIP); else glBegin(GL_TRIANGLE_STRIP); for (j=0; j<=NUMV; j++) { for (k=0; k<=1; k++) { l = (i+k); m = j; o = l*(NUMV+1)+m; glNormal3fv(kb->pn[o]); glTexCoord2fv(kb->tex[o]); if (colors != COLORS_TWOSIDED) { glColor3fv(kb->col[o]); glMaterialfv(GL_FRONT_AND_BACK,GL_AMBIENT_AND_DIFFUSE,kb->col[o]); } glVertex3fv(kb->pp[o]); polys++; } } glEnd(); } polys /= 2; return polys; } /* Draw a squeezed torus Klein bottle projected into 3D. */ static int squeezed_torus(ModeInfo *mi, double umin, double umax, double vmin, double vmax) { int polys = 0; static const GLfloat mat_diff_red[] = { 1.0, 0.0, 0.0, 1.0 }; static const GLfloat mat_diff_green[] = { 0.0, 1.0, 0.0, 1.0 }; static const GLfloat mat_diff_trans_red[] = { 1.0, 0.0, 0.0, 0.7 }; static const GLfloat mat_diff_trans_green[] = { 0.0, 1.0, 0.0, 0.7 }; float p[3], pu[3], pv[3], pm[3], n[3], b[3], mat[4][4]; int i, j, k, l, m, o; double u, v; double xx[4], xxu[4], xxv[4], y[4], yu[4], yv[4]; double q, r, s, t; double cu, su, cv, sv, cv2, sv2; float q1[4], q2[4], r1[4][4], r2[4][4]; kleinstruct *kb = &klein[MI_SCREEN(mi)]; if (view == VIEW_WALK || view == VIEW_WALKTURN) { /* Compute the rotation that rotates the Klein bottle in 4D without the trackball rotations. */ rotateall4d(kb->zeta,kb->eta,kb->theta,mat); u = kb->umove; v = kb->vmove; cu = cos(u); su = sin(u); cv = cos(v); sv = sin(v); cv2 = cos(0.5*v); sv2 = sin(0.5*v); xx[0] = (SQUEEZED_TORUS_RADIUS+cu)*cv; xx[1] = (SQUEEZED_TORUS_RADIUS+cu)*sv; xx[2] = su*cv2; xx[3] = su*sv2; xxu[0] = -su*cv; xxu[1] = -su*sv; xxu[2] = cu*cv2; xxu[3] = cu*sv2; xxv[0] = -(SQUEEZED_TORUS_RADIUS+cu)*sv; xxv[1] = (SQUEEZED_TORUS_RADIUS+cu)*cv; xxv[2] = -0.5*su*sv2; xxv[3] = 0.5*su*cv2; for (l=0; l<4; l++) { xx[l] /= SQUEEZED_TORUS_RADIUS+1.25; xxu[l] /= SQUEEZED_TORUS_RADIUS+1.25; xxv[l] /= SQUEEZED_TORUS_RADIUS+1.25; } for (l=0; l<4; l++) { y[l] = (mat[l][0]*xx[0]+mat[l][1]*xx[1]+ mat[l][2]*xx[2]+mat[l][3]*xx[3]); yu[l] = (mat[l][0]*xxu[0]+mat[l][1]*xxu[1]+ mat[l][2]*xxu[2]+mat[l][3]*xxu[3]); yv[l] = (mat[l][0]*xxv[0]+mat[l][1]*xxv[1]+ mat[l][2]*xxv[2]+mat[l][3]*xxv[3]); } if (projection_4d == DISP_4D_ORTHOGRAPHIC) { for (l=0; l<3; l++) { p[l] = y[l]+kb->offset4d[l]; pu[l] = yu[l]; pv[l] = yv[l]; } } else { s = y[3]+kb->offset4d[3]; q = 1.0/s; t = q*q; for (l=0; l<3; l++) { r = y[l]+kb->offset4d[l]; p[l] = r*q; pu[l] = (yu[l]*s-r*yu[3])*t; pv[l] = (yv[l]*s-r*yv[3])*t; } } n[0] = pu[1]*pv[2]-pu[2]*pv[1]; n[1] = pu[2]*pv[0]-pu[0]*pv[2]; n[2] = pu[0]*pv[1]-pu[1]*pv[0]; t = 1.0/(kb->side*4.0*sqrt(n[0]*n[0]+n[1]*n[1]+n[2]*n[2])); n[0] *= t; n[1] *= t; n[2] *= t; pm[0] = pu[0]*kb->dumove+pv[0]*kb->dvmove; pm[1] = pu[1]*kb->dumove+pv[1]*kb->dvmove; pm[2] = pu[2]*kb->dumove+pv[2]*kb->dvmove; t = 1.0/(4.0*sqrt(pm[0]*pm[0]+pm[1]*pm[1]+pm[2]*pm[2])); pm[0] *= t; pm[1] *= t; pm[2] *= t; b[0] = n[1]*pm[2]-n[2]*pm[1]; b[1] = n[2]*pm[0]-n[0]*pm[2]; b[2] = n[0]*pm[1]-n[1]*pm[0]; t = 1.0/(4.0*sqrt(b[0]*b[0]+b[1]*b[1]+b[2]*b[2])); b[0] *= t; b[1] *= t; b[2] *= t; /* Compute alpha, beta, delta from the three basis vectors. | -b[0] -b[1] -b[2] | m = | n[0] n[1] n[2] | | -pm[0] -pm[1] -pm[2] | */ kb->alpha = atan2(-n[2],-pm[2])*180/M_PI; kb->beta = atan2(-b[2],sqrt(b[0]*b[0]+b[1]*b[1]))*180/M_PI; kb->delta = atan2(b[1],-b[0])*180/M_PI; /* Compute the rotation that rotates the Klein bottle in 4D. */ rotateall(kb->alpha,kb->beta,kb->delta,kb->zeta,kb->eta,kb->theta,mat); u = kb->umove; v = kb->vmove; cu = cos(u); su = sin(u); cv = cos(v); sv = sin(v); cv2 = cos(0.5*v); sv2 = sin(0.5*v); xx[0] = (SQUEEZED_TORUS_RADIUS+cu)*cv; xx[1] = (SQUEEZED_TORUS_RADIUS+cu)*sv; xx[2] = su*cv2; xx[3] = su*sv2; for (l=0; l<4; l++) xx[l] /= SQUEEZED_TORUS_RADIUS+1.25; for (l=0; l<4; l++) { r = 0.0; for (m=0; m<4; m++) r += mat[l][m]*xx[m]; y[l] = r; } if (projection_4d == DISP_4D_ORTHOGRAPHIC) { for (l=0; l<3; l++) p[l] = y[l]+kb->offset4d[l]; } else { s = y[3]+kb->offset4d[3]; for (l=0; l<3; l++) p[l] = (y[l]+kb->offset4d[l])/s; } kb->offset3d[0] = -p[0]; kb->offset3d[1] = -p[1]-DELTAY; kb->offset3d[2] = -p[2]; } else { /* Compute the rotation that rotates the Klein bottle in 4D, including the trackball rotations. */ rotateall(kb->alpha,kb->beta,kb->delta,kb->zeta,kb->eta,kb->theta,r1); gltrackball_get_quaternion(kb->trackballs[0],q1); gltrackball_get_quaternion(kb->trackballs[1],q2); quats_to_rotmat(q1,q2,r2); mult_rotmat(r2,r1,mat); } /* Project the points from 4D to 3D. */ for (i=0; i<=NUMU; i++) { for (j=0; j<=NUMV; j++) { o = i*(NUMV+1)+j; for (l=0; l<4; l++) { y[l] = (mat[l][0]*kb->x[o][0]+mat[l][1]*kb->x[o][1]+ mat[l][2]*kb->x[o][2]+mat[l][3]*kb->x[o][3]); yu[l] = (mat[l][0]*kb->xu[o][0]+mat[l][1]*kb->xu[o][1]+ mat[l][2]*kb->xu[o][2]+mat[l][3]*kb->xu[o][3]); yv[l] = (mat[l][0]*kb->xv[o][0]+mat[l][1]*kb->xv[o][1]+ mat[l][2]*kb->xv[o][2]+mat[l][3]*kb->xv[o][3]); } if (projection_4d == DISP_4D_ORTHOGRAPHIC) { for (l=0; l<3; l++) { kb->pp[o][l] = (y[l]+kb->offset4d[l])+kb->offset3d[l]; pu[l] = yu[l]; pv[l] = yv[l]; } } else { s = y[3]+kb->offset4d[3]; q = 1.0/s; t = q*q; for (l=0; l<3; l++) { r = y[l]+kb->offset4d[l]; kb->pp[o][l] = r*q+kb->offset3d[l]; pu[l] = (yu[l]*s-r*yu[3])*t; pv[l] = (yv[l]*s-r*yv[3])*t; } } kb->pn[o][0] = pu[1]*pv[2]-pu[2]*pv[1]; kb->pn[o][1] = pu[2]*pv[0]-pu[0]*pv[2]; kb->pn[o][2] = pu[0]*pv[1]-pu[1]*pv[0]; t = 1.0/sqrt(kb->pn[o][0]*kb->pn[o][0]+kb->pn[o][1]*kb->pn[o][1]+ kb->pn[o][2]*kb->pn[o][2]); kb->pn[o][0] *= t; kb->pn[o][1] *= t; kb->pn[o][2] *= t; } } if (colors == COLORS_TWOSIDED) { glColor3fv(mat_diff_red); if (display_mode == DISP_TRANSPARENT) { glMaterialfv(GL_FRONT,GL_AMBIENT_AND_DIFFUSE,mat_diff_trans_red); glMaterialfv(GL_BACK,GL_AMBIENT_AND_DIFFUSE,mat_diff_trans_green); } else { glMaterialfv(GL_FRONT,GL_AMBIENT_AND_DIFFUSE,mat_diff_red); glMaterialfv(GL_BACK,GL_AMBIENT_AND_DIFFUSE,mat_diff_green); } } glBindTexture(GL_TEXTURE_2D,kb->tex_name); for (i=0; i= NUMB/2)) continue; if (display_mode == DISP_WIREFRAME) glBegin(GL_QUAD_STRIP); else glBegin(GL_TRIANGLE_STRIP); for (j=0; j<=NUMV; j++) { for (k=0; k<=1; k++) { l = (i+k); m = j; o = l*(NUMV+1)+m; glNormal3fv(kb->pn[o]); glTexCoord2fv(kb->tex[o]); if (colors != COLORS_TWOSIDED) { glColor3fv(kb->col[o]); glMaterialfv(GL_FRONT_AND_BACK,GL_AMBIENT_AND_DIFFUSE,kb->col[o]); } glVertex3fv(kb->pp[o]); polys++; } } glEnd(); } polys /= 2; return polys; } /* Draw a Lawson Klein bottle projected into 3D. */ static int lawson(ModeInfo *mi, double umin, double umax, double vmin, double vmax) { int polys = 0; static const GLfloat mat_diff_red[] = { 1.0, 0.0, 0.0, 1.0 }; static const GLfloat mat_diff_green[] = { 0.0, 1.0, 0.0, 1.0 }; static const GLfloat mat_diff_trans_red[] = { 1.0, 0.0, 0.0, 0.7 }; static const GLfloat mat_diff_trans_green[] = { 0.0, 1.0, 0.0, 0.7 }; float p[3], pu[3], pv[3], pm[3], n[3], b[3], mat[4][4]; int i, j, k, l, m, o; double u, v; double cu, su, cv, sv, cv2, sv2; double xx[4], xxu[4], xxv[4], y[4], yu[4], yv[4]; double q, r, s, t; float q1[4], q2[4], r1[4][4], r2[4][4]; kleinstruct *kb = &klein[MI_SCREEN(mi)]; if (view == VIEW_WALK || view == VIEW_WALKTURN) { /* Compute the rotation that rotates the Klein bottle in 4D without the trackball rotations. */ rotateall4d(kb->zeta,kb->eta,kb->theta,mat); u = kb->umove; v = kb->vmove; cu = cos(u); su = sin(u); cv = cos(v); sv = sin(v); cv2 = cos(0.5*v); sv2 = sin(0.5*v); xx[0] = cu*cv; xx[1] = cu*sv; xx[2] = su*sv2; xx[3] = su*cv2; xxu[0] = -su*cv; xxu[1] = -su*sv; xxu[2] = cu*sv2; xxu[3] = cu*cv2; xxv[0] = -cu*sv; xxv[1] = cu*cv; xxv[2] = su*cv2*0.5; xxv[3] = -su*sv2*0.5; for (l=0; l<4; l++) { y[l] = (mat[l][0]*xx[0]+mat[l][1]*xx[1]+ mat[l][2]*xx[2]+mat[l][3]*xx[3]); yu[l] = (mat[l][0]*xxu[0]+mat[l][1]*xxu[1]+ mat[l][2]*xxu[2]+mat[l][3]*xxu[3]); yv[l] = (mat[l][0]*xxv[0]+mat[l][1]*xxv[1]+ mat[l][2]*xxv[2]+mat[l][3]*xxv[3]); } if (projection_4d == DISP_4D_ORTHOGRAPHIC) { for (l=0; l<3; l++) { p[l] = y[l]+kb->offset4d[l]; pu[l] = yu[l]; pv[l] = yv[l]; } } else { s = y[3]+kb->offset4d[3]; q = 1.0/s; t = q*q; for (l=0; l<3; l++) { r = y[l]+kb->offset4d[l]; p[l] = r*q; pu[l] = (yu[l]*s-r*yu[3])*t; pv[l] = (yv[l]*s-r*yv[3])*t; } } n[0] = pu[1]*pv[2]-pu[2]*pv[1]; n[1] = pu[2]*pv[0]-pu[0]*pv[2]; n[2] = pu[0]*pv[1]-pu[1]*pv[0]; t = 1.0/(kb->side*4.0*sqrt(n[0]*n[0]+n[1]*n[1]+n[2]*n[2])); n[0] *= t; n[1] *= t; n[2] *= t; pm[0] = pu[0]*kb->dumove+pv[0]*kb->dvmove; pm[1] = pu[1]*kb->dumove+pv[1]*kb->dvmove; pm[2] = pu[2]*kb->dumove+pv[2]*kb->dvmove; t = 1.0/(4.0*sqrt(pm[0]*pm[0]+pm[1]*pm[1]+pm[2]*pm[2])); pm[0] *= t; pm[1] *= t; pm[2] *= t; b[0] = n[1]*pm[2]-n[2]*pm[1]; b[1] = n[2]*pm[0]-n[0]*pm[2]; b[2] = n[0]*pm[1]-n[1]*pm[0]; t = 1.0/(4.0*sqrt(b[0]*b[0]+b[1]*b[1]+b[2]*b[2])); b[0] *= t; b[1] *= t; b[2] *= t; /* Compute alpha, beta, delta from the three basis vectors. | -b[0] -b[1] -b[2] | m = | n[0] n[1] n[2] | | -pm[0] -pm[1] -pm[2] | */ kb->alpha = atan2(-n[2],-pm[2])*180/M_PI; kb->beta = atan2(-b[2],sqrt(b[0]*b[0]+b[1]*b[1]))*180/M_PI; kb->delta = atan2(b[1],-b[0])*180/M_PI; /* Compute the rotation that rotates the Klein bottle in 4D. */ rotateall(kb->alpha,kb->beta,kb->delta,kb->zeta,kb->eta,kb->theta,mat); u = kb->umove; v = kb->vmove; cu = cos(u); su = sin(u); cv = cos(v); sv = sin(v); cv2 = cos(0.5*v); sv2 = sin(0.5*v); xx[0] = cu*cv; xx[1] = cu*sv; xx[2] = su*sv2; xx[3] = su*cv2; for (l=0; l<4; l++) { r = 0.0; for (m=0; m<4; m++) r += mat[l][m]*xx[m]; y[l] = r; } if (projection_4d == DISP_4D_ORTHOGRAPHIC) { for (l=0; l<3; l++) p[l] = y[l]+kb->offset4d[l]; } else { s = y[3]+kb->offset4d[3]; for (l=0; l<3; l++) p[l] = (y[l]+kb->offset4d[l])/s; } kb->offset3d[0] = -p[0]; kb->offset3d[1] = -p[1]-DELTAY; kb->offset3d[2] = -p[2]; } else { /* Compute the rotation that rotates the Klein bottle in 4D, including the trackball rotations. */ rotateall(kb->alpha,kb->beta,kb->delta,kb->zeta,kb->eta,kb->theta,r1); gltrackball_get_quaternion(kb->trackballs[0],q1); gltrackball_get_quaternion(kb->trackballs[1],q2); quats_to_rotmat(q1,q2,r2); mult_rotmat(r2,r1,mat); } /* Project the points from 4D to 3D. */ for (i=0; i<=NUMV; i++) { for (j=0; j<=NUMU; j++) { o = i*(NUMU+1)+j; for (l=0; l<4; l++) { y[l] = (mat[l][0]*kb->x[o][0]+mat[l][1]*kb->x[o][1]+ mat[l][2]*kb->x[o][2]+mat[l][3]*kb->x[o][3]); yu[l] = (mat[l][0]*kb->xu[o][0]+mat[l][1]*kb->xu[o][1]+ mat[l][2]*kb->xu[o][2]+mat[l][3]*kb->xu[o][3]); yv[l] = (mat[l][0]*kb->xv[o][0]+mat[l][1]*kb->xv[o][1]+ mat[l][2]*kb->xv[o][2]+mat[l][3]*kb->xv[o][3]); } if (projection_4d == DISP_4D_ORTHOGRAPHIC) { for (l=0; l<3; l++) { kb->pp[o][l] = (y[l]+kb->offset4d[l])+kb->offset3d[l]; pu[l] = yu[l]; pv[l] = yv[l]; } } else { s = y[3]+kb->offset4d[3]; q = 1.0/s; t = q*q; for (l=0; l<3; l++) { r = y[l]+kb->offset4d[l]; kb->pp[o][l] = r*q+kb->offset3d[l]; pu[l] = (yu[l]*s-r*yu[3])*t; pv[l] = (yv[l]*s-r*yv[3])*t; } } kb->pn[o][0] = pu[1]*pv[2]-pu[2]*pv[1]; kb->pn[o][1] = pu[2]*pv[0]-pu[0]*pv[2]; kb->pn[o][2] = pu[0]*pv[1]-pu[1]*pv[0]; t = 1.0/sqrt(kb->pn[o][0]*kb->pn[o][0]+kb->pn[o][1]*kb->pn[o][1]+ kb->pn[o][2]*kb->pn[o][2]); kb->pn[o][0] *= t; kb->pn[o][1] *= t; kb->pn[o][2] *= t; } } if (colors == COLORS_TWOSIDED) { glColor3fv(mat_diff_red); if (display_mode == DISP_TRANSPARENT) { glMaterialfv(GL_FRONT,GL_AMBIENT_AND_DIFFUSE,mat_diff_trans_red); glMaterialfv(GL_BACK,GL_AMBIENT_AND_DIFFUSE,mat_diff_trans_green); } else { glMaterialfv(GL_FRONT,GL_AMBIENT_AND_DIFFUSE,mat_diff_red); glMaterialfv(GL_BACK,GL_AMBIENT_AND_DIFFUSE,mat_diff_green); } } glBindTexture(GL_TEXTURE_2D,kb->tex_name); for (i=0; i= NUMB/2)) continue; if (display_mode == DISP_WIREFRAME) glBegin(GL_QUAD_STRIP); else glBegin(GL_TRIANGLE_STRIP); for (j=0; j<=NUMU; j++) { for (k=0; k<=1; k++) { l = (i+k); m = j; o = l*(NUMU+1)+m; glNormal3fv(kb->pn[o]); glTexCoord2fv(kb->tex[o]); if (colors != COLORS_TWOSIDED) { glColor3fv(kb->col[o]); glMaterialfv(GL_FRONT_AND_BACK,GL_AMBIENT_AND_DIFFUSE,kb->col[o]); } glVertex3fv(kb->pp[o]); polys++; } } glEnd(); } polys /= 2; return polys; } /* Generate a texture image that shows the orientation reversal. */ static void gen_texture(ModeInfo *mi) { kleinstruct *kb = &klein[MI_SCREEN(mi)]; glGenTextures(1,&kb->tex_name); glBindTexture(GL_TEXTURE_2D,kb->tex_name); glPixelStorei(GL_UNPACK_ALIGNMENT,1); glTexParameterf(GL_TEXTURE_2D,GL_TEXTURE_WRAP_S,GL_REPEAT); glTexParameterf(GL_TEXTURE_2D,GL_TEXTURE_WRAP_T,GL_REPEAT); glTexParameterf(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR); glTexParameterf(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR); glTexEnvf(GL_TEXTURE_ENV,GL_TEXTURE_ENV_MODE,GL_MODULATE); glTexImage2D(GL_TEXTURE_2D,0,GL_RGB,TEX_DIMENSION,TEX_DIMENSION,0, GL_LUMINANCE,GL_UNSIGNED_BYTE,texture); } static void init(ModeInfo *mi) { static const GLfloat light_ambient[] = { 0.0, 0.0, 0.0, 1.0 }; static const GLfloat light_diffuse[] = { 1.0, 1.0, 1.0, 1.0 }; static const GLfloat light_specular[] = { 1.0, 1.0, 1.0, 1.0 }; static const GLfloat light_position[] = { 1.0, 1.0, 1.0, 0.0 }; static const GLfloat mat_specular[] = { 1.0, 1.0, 1.0, 1.0 }; kleinstruct *kb = &klein[MI_SCREEN(mi)]; if (walk_speed == 0.0) walk_speed = 20.0; if (view == VIEW_TURN) { kb->alpha = frand(360.0); kb->beta = frand(360.0); kb->delta = frand(360.0); } else { kb->alpha = 0.0; kb->beta = 0.0; kb->delta = 0.0; } kb->zeta = 0.0; if (bottle_type == KLEIN_BOTTLE_FIGURE_8 || bottle_type == KLEIN_BOTTLE_SQUEEZED_TORUS) kb->eta = 0.0; else kb->eta = 45.0; kb->theta = 0.0; kb->umove = frand(2.0*M_PI); kb->vmove = frand(2.0*M_PI); kb->dumove = 0.0; kb->dvmove = 0.0; kb->side = 1; if (bottle_type == KLEIN_BOTTLE_FIGURE_8) { kb->offset4d[0] = 0.0; kb->offset4d[1] = 0.0; kb->offset4d[2] = 0.0; kb->offset4d[3] = 1.5; kb->offset3d[0] = 0.0; kb->offset3d[1] = 0.0; if (projection_4d == DISP_4D_ORTHOGRAPHIC) kb->offset3d[2] = -2.1; else kb->offset3d[2] = -1.9; kb->offset3d[3] = 0.0; } else if (bottle_type == KLEIN_BOTTLE_SQUEEZED_TORUS) { kb->offset4d[0] = 0.0; kb->offset4d[1] = 0.0; kb->offset4d[2] = 0.0; kb->offset4d[3] = 1.4; kb->offset3d[0] = 0.0; kb->offset3d[1] = 0.0; kb->offset3d[2] = -2.0; kb->offset3d[3] = 0.0; } else /* bottle_type == KLEIN_BOTTLE_LAWSON */ { kb->offset4d[0] = 0.0; kb->offset4d[1] = 0.0; kb->offset4d[2] = 0.0; if (projection_4d == DISP_4D_PERSPECTIVE && projection_3d == DISP_3D_ORTHOGRAPHIC) kb->offset4d[3] = 1.5; else kb->offset4d[3] = 1.1; kb->offset3d[0] = 0.0; kb->offset3d[1] = 0.0; if (projection_4d == DISP_4D_ORTHOGRAPHIC) kb->offset3d[2] = -2.0; else kb->offset3d[2] = -5.0; kb->offset3d[3] = 0.0; } gen_texture(mi); if (bottle_type == KLEIN_BOTTLE_FIGURE_8) setup_figure8(mi,0.0,2.0*M_PI,0.0,2.0*M_PI); else if (bottle_type == KLEIN_BOTTLE_SQUEEZED_TORUS) setup_squeezed_torus(mi,0.0,2.0*M_PI,0.0,2.0*M_PI); else /* bottle_type == KLEIN_BOTTLE_LAWSON */ setup_lawson(mi,0.0,2.0*M_PI,0.0,2.0*M_PI); if (marks) glEnable(GL_TEXTURE_2D); else glDisable(GL_TEXTURE_2D); glMatrixMode(GL_PROJECTION); glLoadIdentity(); if (projection_3d == DISP_3D_PERSPECTIVE || view == VIEW_WALK || view == VIEW_WALKTURN) { if (view == VIEW_WALK || view == VIEW_WALKTURN) gluPerspective(60.0,1.0,0.01,10.0); else gluPerspective(60.0,1.0,0.1,10.0); } else { glOrtho(-1.0,1.0,-1.0,1.0,0.1,10.0); } glMatrixMode(GL_MODELVIEW); glLoadIdentity(); # ifdef HAVE_JWZGLES /* #### glPolygonMode other than GL_FILL unimplemented */ if (display_mode == DISP_WIREFRAME) display_mode = DISP_SURFACE; # endif if (display_mode == DISP_SURFACE) { glEnable(GL_DEPTH_TEST); glDepthFunc(GL_LESS); glShadeModel(GL_SMOOTH); glPolygonMode(GL_FRONT_AND_BACK,GL_FILL); glLightModeli(GL_LIGHT_MODEL_TWO_SIDE,GL_TRUE); glEnable(GL_LIGHTING); glEnable(GL_LIGHT0); glLightfv(GL_LIGHT0,GL_AMBIENT,light_ambient); glLightfv(GL_LIGHT0,GL_DIFFUSE,light_diffuse); glLightfv(GL_LIGHT0,GL_SPECULAR,light_specular); glLightfv(GL_LIGHT0,GL_POSITION,light_position); glMaterialfv(GL_FRONT_AND_BACK,GL_SPECULAR,mat_specular); glMaterialf(GL_FRONT_AND_BACK,GL_SHININESS,50.0); glDepthMask(GL_TRUE); glDisable(GL_BLEND); } else if (display_mode == DISP_TRANSPARENT) { glDisable(GL_DEPTH_TEST); glShadeModel(GL_SMOOTH); glPolygonMode(GL_FRONT_AND_BACK,GL_FILL); glLightModeli(GL_LIGHT_MODEL_TWO_SIDE,GL_TRUE); glEnable(GL_LIGHTING); glEnable(GL_LIGHT0); glLightfv(GL_LIGHT0,GL_AMBIENT,light_ambient); glLightfv(GL_LIGHT0,GL_DIFFUSE,light_diffuse); glLightfv(GL_LIGHT0,GL_SPECULAR,light_specular); glLightfv(GL_LIGHT0,GL_POSITION,light_position); glMaterialfv(GL_FRONT_AND_BACK,GL_SPECULAR,mat_specular); glMaterialf(GL_FRONT_AND_BACK,GL_SHININESS,50.0); glDepthMask(GL_FALSE); glEnable(GL_BLEND); glBlendFunc(GL_SRC_ALPHA,GL_ONE); } else /* display_mode == DISP_WIREFRAME */ { glDisable(GL_DEPTH_TEST); glShadeModel(GL_FLAT); glPolygonMode(GL_FRONT_AND_BACK,GL_LINE); glDisable(GL_LIGHTING); glDisable(GL_LIGHT0); glDisable(GL_BLEND); } } /* Redisplay the Klein bottle. */ static void display_klein(ModeInfo *mi) { kleinstruct *kb = &klein[MI_SCREEN(mi)]; if (!kb->button_pressed) { if (view == VIEW_TURN) { kb->alpha += speed_wx * kb->speed_scale; if (kb->alpha >= 360.0) kb->alpha -= 360.0; kb->beta += speed_wy * kb->speed_scale; if (kb->beta >= 360.0) kb->beta -= 360.0; kb->delta += speed_wz * kb->speed_scale; if (kb->delta >= 360.0) kb->delta -= 360.0; kb->zeta += speed_xy * kb->speed_scale; if (kb->zeta >= 360.0) kb->zeta -= 360.0; kb->eta += speed_xz * kb->speed_scale; if (kb->eta >= 360.0) kb->eta -= 360.0; kb->theta += speed_yz * kb->speed_scale; if (kb->theta >= 360.0) kb->theta -= 360.0; } if (view == VIEW_WALKTURN) { kb->zeta += speed_xy * kb->speed_scale; if (kb->zeta >= 360.0) kb->zeta -= 360.0; kb->eta += speed_xz * kb->speed_scale; if (kb->eta >= 360.0) kb->eta -= 360.0; kb->theta += speed_yz * kb->speed_scale; if (kb->theta >= 360.0) kb->theta -= 360.0; } if (view == VIEW_WALK || view == VIEW_WALKTURN) { kb->dvmove = cos(walk_direction*M_PI/180.0)*walk_speed*M_PI/4096.0; kb->vmove += kb->dvmove; if (kb->vmove >= 2.0*M_PI) { kb->vmove -= 2.0*M_PI; kb->umove = 2.0*M_PI-kb->umove; kb->side = -kb->side; } kb->dumove = (kb->side*sin(walk_direction*M_PI/180.0)* walk_speed*M_PI/4096.0); kb->umove += kb->dumove; if (kb->umove >= 2.0*M_PI) kb->umove -= 2.0*M_PI; if (kb->umove < 0.0) kb->umove += 2.0*M_PI; } } glMatrixMode(GL_PROJECTION); glLoadIdentity(); if (projection_3d == DISP_3D_PERSPECTIVE || view == VIEW_WALK || view == VIEW_WALKTURN) { if (view == VIEW_WALK || view == VIEW_WALKTURN) gluPerspective(60.0,kb->aspect,0.01,10.0); else gluPerspective(60.0,kb->aspect,0.1,10.0); } else { if (kb->aspect >= 1.0) glOrtho(-kb->aspect,kb->aspect,-1.0,1.0,0.1,10.0); else glOrtho(-1.0,1.0,-1.0/kb->aspect,1.0/kb->aspect,0.1,10.0); } glMatrixMode(GL_MODELVIEW); glLoadIdentity(); if (bottle_type == KLEIN_BOTTLE_FIGURE_8) mi->polygon_count = figure8(mi,0.0,2.0*M_PI,0.0,2.0*M_PI); else if (bottle_type == KLEIN_BOTTLE_SQUEEZED_TORUS) mi->polygon_count = squeezed_torus(mi,0.0,2.0*M_PI,0.0,2.0*M_PI); else /* bottle_type == KLEIN_BOTTLE_LAWSON */ mi->polygon_count = lawson(mi,0.0,2.0*M_PI,0.0,2.0*M_PI); } ENTRYPOINT void reshape_klein(ModeInfo *mi, int width, int height) { kleinstruct *kb = &klein[MI_SCREEN(mi)]; kb->WindW = (GLint)width; kb->WindH = (GLint)height; glViewport(0,0,width,height); kb->aspect = (GLfloat)width/(GLfloat)height; } ENTRYPOINT Bool klein_handle_event(ModeInfo *mi, XEvent *event) { kleinstruct *kb = &klein[MI_SCREEN(mi)]; KeySym sym = 0; char c = 0; if (event->xany.type == KeyPress || event->xany.type == KeyRelease) XLookupString (&event->xkey, &c, 1, &sym, 0); if (event->xany.type == ButtonPress && event->xbutton.button == Button1) { kb->button_pressed = True; gltrackball_start(kb->trackballs[kb->current_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) { kb->button_pressed = False; return True; } else if (event->xany.type == KeyPress) { if (sym == XK_Shift_L || sym == XK_Shift_R) { kb->current_trackball = 1; if (kb->button_pressed) gltrackball_start(kb->trackballs[kb->current_trackball], event->xbutton.x, event->xbutton.y, MI_WIDTH(mi), MI_HEIGHT(mi)); return True; } } else if (event->xany.type == KeyRelease) { if (sym == XK_Shift_L || sym == XK_Shift_R) { kb->current_trackball = 0; if (kb->button_pressed) gltrackball_start(kb->trackballs[kb->current_trackball], event->xbutton.x, event->xbutton.y, MI_WIDTH(mi), MI_HEIGHT(mi)); return True; } } else if (event->xany.type == MotionNotify && kb->button_pressed) { gltrackball_track(kb->trackballs[kb->current_trackball], event->xmotion.x, event->xmotion.y, MI_WIDTH(mi), MI_HEIGHT(mi)); return True; } return False; } /* *----------------------------------------------------------------------------- *----------------------------------------------------------------------------- * Xlock hooks. *----------------------------------------------------------------------------- *----------------------------------------------------------------------------- */ /* *----------------------------------------------------------------------------- * Initialize klein. Called each time the window changes. *----------------------------------------------------------------------------- */ ENTRYPOINT void init_klein(ModeInfo *mi) { kleinstruct *kb; if (klein == NULL) { klein = (kleinstruct *)calloc(MI_NUM_SCREENS(mi), sizeof(kleinstruct)); if (klein == NULL) return; } kb = &klein[MI_SCREEN(mi)]; kb->trackballs[0] = gltrackball_init(True); kb->trackballs[1] = gltrackball_init(True); kb->current_trackball = 0; kb->button_pressed = False; /* Set the Klein bottle. */ if (!strcasecmp(klein_bottle,"random")) { bottle_type = random() % NUM_KLEIN_BOTTLES; } else if (!strcasecmp(klein_bottle,"figure-8")) { bottle_type = KLEIN_BOTTLE_FIGURE_8; } else if (!strcasecmp(klein_bottle,"squeezed-torus")) { bottle_type = KLEIN_BOTTLE_SQUEEZED_TORUS; } else if (!strcasecmp(klein_bottle,"lawson")) { bottle_type = KLEIN_BOTTLE_LAWSON; } else { bottle_type = random() % NUM_KLEIN_BOTTLES; } /* Set the display mode. */ if (!strcasecmp(mode,"random")) { display_mode = random() % NUM_DISPLAY_MODES; } else if (!strcasecmp(mode,"wireframe")) { display_mode = DISP_WIREFRAME; } else if (!strcasecmp(mode,"surface")) { display_mode = DISP_SURFACE; } else if (!strcasecmp(mode,"transparent")) { display_mode = DISP_TRANSPARENT; } else { display_mode = random() % NUM_DISPLAY_MODES; } /* Orientation marks don't make sense in wireframe mode. */ if (display_mode == DISP_WIREFRAME) marks = False; /* Set the appearance. */ if (!strcasecmp(appear,"random")) { appearance = random() % NUM_APPEARANCES; } else if (!strcasecmp(appear,"solid")) { appearance = APPEARANCE_SOLID; } else if (!strcasecmp(appear,"bands")) { appearance = APPEARANCE_BANDS; } else { appearance = random() % NUM_APPEARANCES; } /* Set the color mode. */ if (!strcasecmp(color_mode,"random")) { colors = random() % NUM_COLORS; } else if (!strcasecmp(color_mode,"two-sided")) { colors = COLORS_TWOSIDED; } else if (!strcasecmp(color_mode,"rainbow")) { colors = COLORS_RAINBOW; } else if (!strcasecmp(color_mode,"depth")) { colors = COLORS_DEPTH; } else { colors = random() % NUM_COLORS; } /* Set the view mode. */ if (!strcasecmp(view_mode,"random")) { view = random() % NUM_VIEW_MODES; } else if (!strcasecmp(view_mode,"walk")) { view = VIEW_WALK; } else if (!strcasecmp(view_mode,"turn")) { view = VIEW_TURN; } else if (!strcasecmp(view_mode,"walk-turn")) { view = VIEW_WALKTURN; } else { view = random() % NUM_VIEW_MODES; } /* Set the 3d projection mode. */ if (!strcasecmp(proj_3d,"random")) { /* Orthographic projection only makes sense in turn mode. */ if (view == VIEW_TURN) projection_3d = random() % NUM_DISP_3D_MODES; else projection_3d = DISP_3D_PERSPECTIVE; } else if (!strcasecmp(proj_3d,"perspective")) { projection_3d = DISP_3D_PERSPECTIVE; } else if (!strcasecmp(proj_3d,"orthographic")) { projection_3d = DISP_3D_ORTHOGRAPHIC; } else { /* Orthographic projection only makes sense in turn mode. */ if (view == VIEW_TURN) projection_3d = random() % NUM_DISP_3D_MODES; else projection_3d = DISP_3D_PERSPECTIVE; } /* Set the 4d projection mode. */ if (!strcasecmp(proj_4d,"random")) { projection_4d = random() % NUM_DISP_4D_MODES; } else if (!strcasecmp(proj_4d,"perspective")) { projection_4d = DISP_4D_PERSPECTIVE; } else if (!strcasecmp(proj_4d,"orthographic")) { projection_4d = DISP_4D_ORTHOGRAPHIC; } else { projection_4d = random() % NUM_DISP_4D_MODES; } /* Modify the speeds to a useful range in walk-and-turn mode. */ if (view == VIEW_WALKTURN) { speed_wx *= 0.2; speed_wy *= 0.2; speed_wz *= 0.2; speed_xy *= 0.2; speed_xz *= 0.2; speed_yz *= 0.2; } /* make multiple screens rotate at slightly different rates. */ kb->speed_scale = 0.9 + frand(0.3); if ((kb->glx_context = init_GL(mi)) != NULL) { reshape_klein(mi,MI_WIDTH(mi),MI_HEIGHT(mi)); glDrawBuffer(GL_BACK); init(mi); } else { MI_CLEARWINDOW(mi); } } /* *----------------------------------------------------------------------------- * Called by the mainline code periodically to update the display. *----------------------------------------------------------------------------- */ ENTRYPOINT void draw_klein(ModeInfo *mi) { Display *display = MI_DISPLAY(mi); Window window = MI_WINDOW(mi); kleinstruct *kb; if (klein == NULL) return; kb = &klein[MI_SCREEN(mi)]; MI_IS_DRAWN(mi) = True; if (!kb->glx_context) return; glXMakeCurrent(display,window,*(kb->glx_context)); glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT); glLoadIdentity(); display_klein(mi); if (MI_IS_FPS(mi)) do_fps (mi); glFlush(); glXSwapBuffers(display,window); } /* *----------------------------------------------------------------------------- * The display is being taken away from us. Free up malloc'ed * memory and X resources that we've alloc'ed. Only called * once, we must zap everything for every screen. *----------------------------------------------------------------------------- */ ENTRYPOINT void release_klein(ModeInfo *mi) { if (klein != NULL) { int screen; for (screen = 0; screen < MI_NUM_SCREENS(mi); screen++) { kleinstruct *kb = &klein[screen]; if (kb->glx_context) kb->glx_context = (GLXContext *)NULL; } (void) free((void *)klein); klein = (kleinstruct *)NULL; } FreeAllGL(mi); } #ifndef STANDALONE ENTRYPOINT void change_klein(ModeInfo *mi) { kleinstruct *kb = &klein[MI_SCREEN(mi)]; if (!kb->glx_context) return; glXMakeCurrent(MI_DISPLAY(mi),MI_WINDOW(mi),*(kb->glx_context)); init(mi); } #endif /* !STANDALONE */ XSCREENSAVER_MODULE ("Klein", klein) #endif /* USE_GL */ xscreensaver-5.36/hacks/glx/hypertorus.c000664 000767 000024 00000070765 12710313213 020423 0ustar00jwzstaff000000 000000 /* hypertorus --- Shows a hypertorus that rotates in 4d */ #if 0 static const char sccsid[] = "@(#)hypertorus.c 1.2 05/09/28 xlockmore"; #endif /* Copyright (c) 2003-2009 Carsten Steger . */ /* * Permission to use, copy, modify, and distribute this software and its * documentation for any purpose and without fee is hereby granted, * provided that the above copyright notice appear in all copies and that * both that copyright notice and this permission notice appear in * supporting documentation. * * This file is provided AS IS with no warranties of any kind. The author * shall have no liability with respect to the infringement of copyrights, * trade secrets or any patents by this file or any part thereof. In no * event will the author be liable for any lost revenue or profits or * other special, indirect and consequential damages. * * REVISION HISTORY: * C. Steger - 03/05/18: Initial version * C. Steger - 05/09/28: Added the spirals appearance mode * and trackball support * C. Steger - 07/01/23: Improved 4d trackball support * C. Steger - 09/08/22: Removed check-config.pl warnings */ /* * This program shows the Clifford torus as it rotates in 4d. The Clifford * torus is a torus lies on the "surface" of the hypersphere in 4d. The * program projects the 4d torus to 3d using either a perspective or an * orthographic projection. Of the two alternatives, the perspecitve * projection looks much more appealing. In orthographic projections the * torus degenerates into a doubly covered cylinder for some angles. The * projected 3d torus can then be projected to the screen either perspectively * or orthographically. There are three display modes for the torus: mesh * (wireframe), solid, or transparent. Furthermore, the appearance of the * torus can be as a solid object or as a set of see-through bands or * see-through spirals. Finally, the colors with with the torus is drawn can * be set to either two-sided or to colorwheel. In the first case, the torus * is drawn with red on the outside and green on the inside. This mode * enables you to see that the torus turns inside-out as it rotates in 4d. * The second mode draws the torus in a fully saturated color wheel. This * gives a very nice effect when combined with the see-through bands or * see-through spirals mode. The rotation speed for each of the six planes * around which the torus rotates can be chosen. This program is very much * inspired by Thomas Banchoff's book "Beyond the Third Dimension: Geometry, * Computer Graphics, and Higher Dimensions", Scientific American Library, * 1990. */ #ifndef M_PI #define M_PI 3.14159265358979323846 #endif #define DISP_WIREFRAME 0 #define DISP_SURFACE 1 #define DISP_TRANSPARENT 2 #define APPEARANCE_SOLID 0 #define APPEARANCE_BANDS 1 #define APPEARANCE_SPIRALS 2 #define COLORS_TWOSIDED 0 #define COLORS_COLORWHEEL 1 #define DISP_3D_PERSPECTIVE 0 #define DISP_3D_ORTHOGRAPHIC 1 #define DISP_4D_PERSPECTIVE 0 #define DISP_4D_ORTHOGRAPHIC 1 #define DEF_DISPLAY_MODE "surface" #define DEF_APPEARANCE "bands" #define DEF_COLORS "colorwheel" #define DEF_PROJECTION_3D "perspective" #define DEF_PROJECTION_4D "perspective" #define DEF_SPEEDWX "1.1" #define DEF_SPEEDWY "1.3" #define DEF_SPEEDWZ "1.5" #define DEF_SPEEDXY "1.7" #define DEF_SPEEDXZ "1.9" #define DEF_SPEEDYZ "2.1" #ifdef STANDALONE # define DEFAULTS "*delay: 25000 \n" \ "*showFPS: False \n" \ "*suppressRotationAnimation: True\n" \ # define refresh_hypertorus 0 # include "xlockmore.h" /* from the xscreensaver distribution */ #else /* !STANDALONE */ # include "xlock.h" /* from the xlockmore distribution */ #endif /* !STANDALONE */ #ifdef USE_GL #include "gltrackball.h" #ifdef USE_MODULES ModStruct hypertorus_description = {"hypertorus", "init_hypertorus", "draw_hypertorus", "release_hypertorus", "draw_hypertorus", "change_hypertorus", NULL, &hypertorus_opts, 25000, 1, 1, 1, 1.0, 4, "", "Shows a hypertorus rotating in 4d", 0, NULL}; #endif static char *mode; static int display_mode; static char *appear; static int appearance; static int num_spirals; static char *color_mode; static int colors; static char *proj_3d; static int projection_3d; static char *proj_4d; static int projection_4d; static float speed_wx; static float speed_wy; static float speed_wz; static float speed_xy; static float speed_xz; static float speed_yz; static const float offset4d[4] = { 0.0, 0.0, 0.0, 2.0 }; static const float offset3d[4] = { 0.0, 0.0, -2.0, 0.0 }; static XrmOptionDescRec opts[] = { {"-mode", ".displayMode", XrmoptionSepArg, 0 }, {"-wireframe", ".displayMode", XrmoptionNoArg, "wireframe" }, {"-surface", ".displayMode", XrmoptionNoArg, "surface" }, {"-transparent", ".displayMode", XrmoptionNoArg, "transparent" }, {"-appearance", ".appearance", XrmoptionSepArg, 0 }, {"-solid", ".appearance", XrmoptionNoArg, "solid" }, {"-bands", ".appearance", XrmoptionNoArg, "bands" }, {"-spirals-1", ".appearance", XrmoptionNoArg, "spirals-1" }, {"-spirals-2", ".appearance", XrmoptionNoArg, "spirals-2" }, {"-spirals-4", ".appearance", XrmoptionNoArg, "spirals-4" }, {"-spirals-8", ".appearance", XrmoptionNoArg, "spirals-8" }, {"-spirals-16", ".appearance", XrmoptionNoArg, "spirals-16" }, {"-twosided", ".colors", XrmoptionNoArg, "twosided" }, {"-colorwheel", ".colors", XrmoptionNoArg, "colorwheel" }, {"-perspective-3d", ".projection3d", XrmoptionNoArg, "perspective" }, {"-orthographic-3d", ".projection3d", XrmoptionNoArg, "orthographic" }, {"-perspective-4d", ".projection4d", XrmoptionNoArg, "perspective" }, {"-orthographic-4d", ".projection4d", XrmoptionNoArg, "orthographic" }, {"-speed-wx", ".speedwx", XrmoptionSepArg, 0 }, {"-speed-wy", ".speedwy", XrmoptionSepArg, 0 }, {"-speed-wz", ".speedwz", XrmoptionSepArg, 0 }, {"-speed-xy", ".speedxy", XrmoptionSepArg, 0 }, {"-speed-xz", ".speedxz", XrmoptionSepArg, 0 }, {"-speed-yz", ".speedyz", XrmoptionSepArg, 0 } }; static argtype vars[] = { { &mode, "displayMode", "DisplayMode", DEF_DISPLAY_MODE, t_String }, { &appear, "appearance", "Appearance", DEF_APPEARANCE, t_String }, { &color_mode, "colors", "Colors", DEF_COLORS, t_String }, { &proj_3d, "projection3d", "Projection3d", DEF_PROJECTION_3D, t_String }, { &proj_4d, "projection4d", "Projection4d", DEF_PROJECTION_4D, t_String }, { &speed_wx, "speedwx", "Speedwx", DEF_SPEEDWX, t_Float}, { &speed_wy, "speedwy", "Speedwy", DEF_SPEEDWY, t_Float}, { &speed_wz, "speedwz", "Speedwz", DEF_SPEEDWZ, t_Float}, { &speed_xy, "speedxy", "Speedxy", DEF_SPEEDXY, t_Float}, { &speed_xz, "speedxz", "Speedxz", DEF_SPEEDXZ, t_Float}, { &speed_yz, "speedyz", "Speedyz", DEF_SPEEDYZ, t_Float} }; static OptionStruct desc[] = { { "-wireframe", "display the torus as a wireframe mesh" }, { "-surface", "display the torus as a solid surface" }, { "-transparent", "display the torus as a transparent surface" }, { "-solid", "display the torus as a solid object" }, { "-bands", "display the torus as see-through bands" }, { "-spirals-{1,2,4,8,16}", "display the torus as see-through spirals" }, { "-twosided", "display the torus with two colors" }, { "-colorwheel", "display the torus with a smooth color wheel" }, { "-perspective-3d", "project the torus perspectively from 3d to 2d" }, { "-orthographic-3d", "project the torus orthographically from 3d to 2d" }, { "-perspective-4d", "project the torus perspectively from 4d to 3d" }, { "-orthographic-4d", "project the torus orthographically from 4d to 3d" }, { "-speed-wx ", "rotation speed around the wx plane" }, { "-speed-wy ", "rotation speed around the wy plane" }, { "-speed-wz ", "rotation speed around the wz plane" }, { "-speed-xy ", "rotation speed around the xy plane" }, { "-speed-xz ", "rotation speed around the xz plane" }, { "-speed-yz ", "rotation speed around the yz plane" } }; ENTRYPOINT ModeSpecOpt hypertorus_opts = {sizeof opts / sizeof opts[0], opts, sizeof vars / sizeof vars[0], vars, desc}; typedef struct { GLint WindH, WindW; GLXContext *glx_context; /* 4D rotation angles */ float alpha, beta, delta, zeta, eta, theta; /* Aspect ratio of the current window */ float aspect; /* Trackball states */ trackball_state *trackballs[2]; int current_trackball; Bool button_pressed; float speed_scale; } hypertorusstruct; static hypertorusstruct *hyper = (hypertorusstruct *) NULL; /* Add a rotation around the wx-plane to the matrix m. */ static void rotatewx(float m[4][4], float phi) { float c, s, u, v; int i; phi *= M_PI/180.0; c = cos(phi); s = sin(phi); for (i=0; i<4; i++) { u = m[i][1]; v = m[i][2]; m[i][1] = c*u+s*v; m[i][2] = -s*u+c*v; } } /* Add a rotation around the wy-plane to the matrix m. */ static void rotatewy(float m[4][4], float phi) { float c, s, u, v; int i; phi *= M_PI/180.0; c = cos(phi); s = sin(phi); for (i=0; i<4; i++) { u = m[i][0]; v = m[i][2]; m[i][0] = c*u-s*v; m[i][2] = s*u+c*v; } } /* Add a rotation around the wz-plane to the matrix m. */ static void rotatewz(float m[4][4], float phi) { float c, s, u, v; int i; phi *= M_PI/180.0; c = cos(phi); s = sin(phi); for (i=0; i<4; i++) { u = m[i][0]; v = m[i][1]; m[i][0] = c*u+s*v; m[i][1] = -s*u+c*v; } } /* Add a rotation around the xy-plane to the matrix m. */ static void rotatexy(float m[4][4], float phi) { float c, s, u, v; int i; phi *= M_PI/180.0; c = cos(phi); s = sin(phi); for (i=0; i<4; i++) { u = m[i][2]; v = m[i][3]; m[i][2] = c*u+s*v; m[i][3] = -s*u+c*v; } } /* Add a rotation around the xz-plane to the matrix m. */ static void rotatexz(float m[4][4], float phi) { float c, s, u, v; int i; phi *= M_PI/180.0; c = cos(phi); s = sin(phi); for (i=0; i<4; i++) { u = m[i][1]; v = m[i][3]; m[i][1] = c*u-s*v; m[i][3] = s*u+c*v; } } /* Add a rotation around the yz-plane to the matrix m. */ static void rotateyz(float m[4][4], float phi) { float c, s, u, v; int i; phi *= M_PI/180.0; c = cos(phi); s = sin(phi); for (i=0; i<4; i++) { u = m[i][0]; v = m[i][3]; m[i][0] = c*u-s*v; m[i][3] = s*u+c*v; } } /* Compute the rotation matrix m from the rotation angles. */ static void rotateall(float al, float be, float de, float ze, float et, float th, float m[4][4]) { int i, j; for (i=0; i<4; i++) for (j=0; j<4; j++) m[i][j] = (i==j); rotatewx(m,al); rotatewy(m,be); rotatewz(m,de); rotatexz(m,et); rotatexy(m,ze); rotateyz(m,th); } /* Multiply two rotation matrices: o=m*n. */ static void mult_rotmat(float m[4][4], float n[4][4], float o[4][4]) { int i, j, k; for (i=0; i<4; i++) { for (j=0; j<4; j++) { o[i][j] = 0.0; for (k=0; k<4; k++) o[i][j] += m[i][k]*n[k][j]; } } } /* Compute a 4D rotation matrix from two unit quaternions. */ static void quats_to_rotmat(float p[4], float q[4], float m[4][4]) { double al, be, de, ze, et, th; double r00, r01, r02, r12, r22; r00 = 1.0-2.0*(p[1]*p[1]+p[2]*p[2]); r01 = 2.0*(p[0]*p[1]+p[2]*p[3]); r02 = 2.0*(p[2]*p[0]-p[1]*p[3]); r12 = 2.0*(p[1]*p[2]+p[0]*p[3]); r22 = 1.0-2.0*(p[1]*p[1]+p[0]*p[0]); al = atan2(-r12,r22)*180.0/M_PI; be = atan2(r02,sqrt(r00*r00+r01*r01))*180.0/M_PI; de = atan2(-r01,r00)*180.0/M_PI; r00 = 1.0-2.0*(q[1]*q[1]+q[2]*q[2]); r01 = 2.0*(q[0]*q[1]+q[2]*q[3]); r02 = 2.0*(q[2]*q[0]-q[1]*q[3]); r12 = 2.0*(q[1]*q[2]+q[0]*q[3]); r22 = 1.0-2.0*(q[1]*q[1]+q[0]*q[0]); et = atan2(-r12,r22)*180.0/M_PI; th = atan2(r02,sqrt(r00*r00+r01*r01))*180.0/M_PI; ze = atan2(-r01,r00)*180.0/M_PI; rotateall(al,be,de,ze,et,-th,m); } /* Compute a fully saturated and bright color based on an angle. */ static void color(double angle) { int s; double t; float color[4]; if (colors != COLORS_COLORWHEEL) return; if (angle >= 0.0) angle = fmod(angle,2*M_PI); else angle = fmod(angle,-2*M_PI); s = floor(angle/(M_PI/3)); t = angle/(M_PI/3)-s; if (s >= 6) s = 0; switch (s) { case 0: color[0] = 1.0; color[1] = t; color[2] = 0.0; break; case 1: color[0] = 1.0-t; color[1] = 1.0; color[2] = 0.0; break; case 2: color[0] = 0.0; color[1] = 1.0; color[2] = t; break; case 3: color[0] = 0.0; color[1] = 1.0-t; color[2] = 1.0; break; case 4: color[0] = t; color[1] = 0.0; color[2] = 1.0; break; case 5: color[0] = 1.0; color[1] = 0.0; color[2] = 1.0-t; break; } if (display_mode == DISP_TRANSPARENT) color[3] = 0.7; else color[3] = 1.0; glColor3fv(color); glMaterialfv(GL_FRONT_AND_BACK,GL_AMBIENT_AND_DIFFUSE,color); } /* Draw a hypertorus projected into 3D. Note that the spirals appearance will only work correctly if numu and numv are set to 64 or any higher power of 2. Similarly, the banded appearance will only work correctly if numu and numv are divisible by 4. */ static int hypertorus(ModeInfo *mi, double umin, double umax, double vmin, double vmax, int numu, int numv) { int polys = 0; static const GLfloat mat_diff_red[] = { 1.0, 0.0, 0.0, 1.0 }; static const GLfloat mat_diff_green[] = { 0.0, 1.0, 0.0, 1.0 }; static const GLfloat mat_diff_trans_red[] = { 1.0, 0.0, 0.0, 0.7 }; static const GLfloat mat_diff_trans_green[] = { 0.0, 1.0, 0.0, 0.7 }; float p[3], pu[3], pv[3], n[3], mat[4][4]; int i, j, k, l, m, b, skew; double u, v, ur, vr; double cu, su, cv, sv; double xx[4], xxu[4], xxv[4], x[4], xu[4], xv[4]; double r, s, t; float q1[4], q2[4], r1[4][4], r2[4][4]; hypertorusstruct *hp = &hyper[MI_SCREEN(mi)]; rotateall(hp->alpha,hp->beta,hp->delta,hp->zeta,hp->eta,hp->theta,r1); gltrackball_get_quaternion(hp->trackballs[0],q1); gltrackball_get_quaternion(hp->trackballs[1],q2); quats_to_rotmat(q1,q2,r2); mult_rotmat(r2,r1,mat); if (colors != COLORS_COLORWHEEL) { glColor3fv(mat_diff_red); if (display_mode == DISP_TRANSPARENT) { glMaterialfv(GL_FRONT,GL_AMBIENT_AND_DIFFUSE,mat_diff_trans_red); glMaterialfv(GL_BACK,GL_AMBIENT_AND_DIFFUSE,mat_diff_trans_green); } else { glMaterialfv(GL_FRONT,GL_AMBIENT_AND_DIFFUSE,mat_diff_red); glMaterialfv(GL_BACK,GL_AMBIENT_AND_DIFFUSE,mat_diff_green); } } #if 0 /* #### not working */ # ifdef HAVE_MOBILE /* Keep it the same relative size when rotated. */ { GLfloat h = MI_HEIGHT(mi) / (GLfloat) MI_WIDTH(mi); int o = (int) current_device_rotation(); if (o != 0 && o != 180 && o != -180) glScalef (1/h, 1/h, 1/h); } # endif #endif skew = num_spirals; ur = umax-umin; vr = vmax-vmin; for (i=0; i= 2)) continue; if (display_mode == DISP_WIREFRAME) glBegin(GL_QUAD_STRIP); else glBegin(GL_TRIANGLE_STRIP); for (j=0; j<=numv; j++) { for (k=0; k<=1; k++) { l = (i+k); m = j; u = ur*l/numu+umin; v = vr*m/numv+vmin; if (appearance == APPEARANCE_SPIRALS) { u += 4.0*skew/numv*v; b = ((i/4)&(skew-1))*(numu/(4*skew)); color(ur*4*b/numu+umin); } else { color(u); } cu = cos(u); su = sin(u); cv = cos(v); sv = sin(v); xx[0] = cu; xx[1] = su; xx[2] = cv; xx[3] = sv; xxu[0] = -su; xxu[1] = cu; xxu[2] = 0.0; xxu[3] = 0.0; xxv[0] = 0.0; xxv[1] = 0.0; xxv[2] = -sv; xxv[3] = cv; for (l=0; l<4; l++) { r = 0.0; s = 0.0; t = 0.0; for (m=0; m<4; m++) { r += mat[l][m]*xx[m]; s += mat[l][m]*xxu[m]; t += mat[l][m]*xxv[m]; } x[l] = r; xu[l] = s; xv[l] = t; } if (projection_4d == DISP_4D_ORTHOGRAPHIC) { for (l=0; l<3; l++) { p[l] = (x[l]+offset4d[l])/1.5+offset3d[l]; pu[l] = xu[l]; pv[l] = xv[l]; } } else { s = x[3]+offset4d[3]; t = s*s; for (l=0; l<3; l++) { r = x[l]+offset4d[l]; p[l] = r/s+offset3d[l]; pu[l] = (xu[l]*s-r*xu[3])/t; pv[l] = (xv[l]*s-r*xv[3])/t; } } n[0] = pu[1]*pv[2]-pu[2]*pv[1]; n[1] = pu[2]*pv[0]-pu[0]*pv[2]; n[2] = pu[0]*pv[1]-pu[1]*pv[0]; t = sqrt(n[0]*n[0]+n[1]*n[1]+n[2]*n[2]); n[0] /= t; n[1] /= t; n[2] /= t; glNormal3fv(n); glVertex3fv(p); polys++; } } glEnd(); } polys /= 2; return polys; } static void init(ModeInfo *mi) { static const GLfloat light_ambient[] = { 0.0, 0.0, 0.0, 1.0 }; static const GLfloat light_diffuse[] = { 1.0, 1.0, 1.0, 1.0 }; static const GLfloat light_specular[] = { 1.0, 1.0, 1.0, 1.0 }; static const GLfloat light_position[] = { 1.0, 1.0, 1.0, 0.0 }; static const GLfloat mat_specular[] = { 1.0, 1.0, 1.0, 1.0 }; hypertorusstruct *hp = &hyper[MI_SCREEN(mi)]; hp->alpha = 0.0; hp->beta = 0.0; hp->delta = 0.0; hp->zeta = 0.0; hp->eta = 0.0; hp->theta = 0.0; glMatrixMode(GL_PROJECTION); glLoadIdentity(); if (projection_3d == DISP_3D_PERSPECTIVE) gluPerspective(60.0,1.0,0.1,100.0); else glOrtho(-1.0,1.0,-1.0,1.0,0.1,100.0);; glMatrixMode(GL_MODELVIEW); glLoadIdentity(); # ifdef HAVE_JWZGLES /* #### glPolygonMode other than GL_FILL unimplemented */ if (display_mode == DISP_WIREFRAME) display_mode = DISP_SURFACE; # endif if (display_mode == DISP_SURFACE) { glEnable(GL_DEPTH_TEST); glDepthFunc(GL_LESS); glShadeModel(GL_SMOOTH); glPolygonMode(GL_FRONT_AND_BACK,GL_FILL); glLightModeli(GL_LIGHT_MODEL_TWO_SIDE,GL_TRUE); glEnable(GL_LIGHTING); glEnable(GL_LIGHT0); glLightfv(GL_LIGHT0,GL_AMBIENT,light_ambient); glLightfv(GL_LIGHT0,GL_DIFFUSE,light_diffuse); glLightfv(GL_LIGHT0,GL_SPECULAR,light_specular); glLightfv(GL_LIGHT0,GL_POSITION,light_position); glMaterialfv(GL_FRONT_AND_BACK,GL_SPECULAR,mat_specular); glMaterialf(GL_FRONT_AND_BACK,GL_SHININESS,50.0); glDepthMask(GL_TRUE); glDisable(GL_BLEND); } else if (display_mode == DISP_TRANSPARENT) { glDisable(GL_DEPTH_TEST); glShadeModel(GL_SMOOTH); glPolygonMode(GL_FRONT_AND_BACK,GL_FILL); glLightModeli(GL_LIGHT_MODEL_TWO_SIDE,GL_TRUE); glEnable(GL_LIGHTING); glEnable(GL_LIGHT0); glLightfv(GL_LIGHT0,GL_AMBIENT,light_ambient); glLightfv(GL_LIGHT0,GL_DIFFUSE,light_diffuse); glLightfv(GL_LIGHT0,GL_SPECULAR,light_specular); glLightfv(GL_LIGHT0,GL_POSITION,light_position); glMaterialfv(GL_FRONT_AND_BACK,GL_SPECULAR,mat_specular); glMaterialf(GL_FRONT_AND_BACK,GL_SHININESS,50.0); glDepthMask(GL_FALSE); glEnable(GL_BLEND); glBlendFunc(GL_SRC_ALPHA,GL_ONE); } else /* display_mode == DISP_WIREFRAME */ { glDisable(GL_DEPTH_TEST); glShadeModel(GL_FLAT); glPolygonMode(GL_FRONT_AND_BACK,GL_LINE); glDisable(GL_LIGHTING); glDisable(GL_LIGHT0); glDisable(GL_BLEND); } } /* Redisplay the hypertorus. */ static void display_hypertorus(ModeInfo *mi) { hypertorusstruct *hp = &hyper[MI_SCREEN(mi)]; if (!hp->button_pressed) { hp->alpha += speed_wx * hp->speed_scale; if (hp->alpha >= 360.0) hp->alpha -= 360.0; hp->beta += speed_wy * hp->speed_scale; if (hp->beta >= 360.0) hp->beta -= 360.0; hp->delta += speed_wz * hp->speed_scale; if (hp->delta >= 360.0) hp->delta -= 360.0; hp->zeta += speed_xy * hp->speed_scale; if (hp->zeta >= 360.0) hp->zeta -= 360.0; hp->eta += speed_xz * hp->speed_scale; if (hp->eta >= 360.0) hp->eta -= 360.0; hp->theta += speed_yz * hp->speed_scale; if (hp->theta >= 360.0) hp->theta -= 360.0; } glMatrixMode(GL_PROJECTION); glLoadIdentity(); if (projection_3d == DISP_3D_ORTHOGRAPHIC) { if (hp->aspect >= 1.0) glOrtho(-hp->aspect,hp->aspect,-1.0,1.0,0.1,100.0); else glOrtho(-1.0,1.0,-1.0/hp->aspect,1.0/hp->aspect,0.1,100.0); } else { gluPerspective(60.0,hp->aspect,0.1,100.0); } glMatrixMode(GL_MODELVIEW); glLoadIdentity(); mi->polygon_count = hypertorus(mi,0.0,2.0*M_PI,0.0,2.0*M_PI,64,64); } ENTRYPOINT void reshape_hypertorus(ModeInfo *mi, int width, int height) { hypertorusstruct *hp = &hyper[MI_SCREEN(mi)]; hp->WindW = (GLint)width; hp->WindH = (GLint)height; glViewport(0,0,width,height); hp->aspect = (GLfloat)width/(GLfloat)height; } ENTRYPOINT Bool hypertorus_handle_event(ModeInfo *mi, XEvent *event) { hypertorusstruct *hp = &hyper[MI_SCREEN(mi)]; KeySym sym = 0; char c = 0; if (event->xany.type == KeyPress || event->xany.type == KeyRelease) XLookupString (&event->xkey, &c, 1, &sym, 0); if (event->xany.type == ButtonPress && event->xbutton.button == Button1) { hp->button_pressed = True; gltrackball_start(hp->trackballs[hp->current_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) { hp->button_pressed = False; return True; } else if (event->xany.type == KeyPress) { if (sym == XK_Shift_L || sym == XK_Shift_R) { hp->current_trackball = 1; if (hp->button_pressed) gltrackball_start(hp->trackballs[hp->current_trackball], event->xbutton.x, event->xbutton.y, MI_WIDTH(mi), MI_HEIGHT(mi)); return True; } } else if (event->xany.type == KeyRelease) { if (sym == XK_Shift_L || sym == XK_Shift_R) { hp->current_trackball = 0; if (hp->button_pressed) gltrackball_start(hp->trackballs[hp->current_trackball], event->xbutton.x, event->xbutton.y, MI_WIDTH(mi), MI_HEIGHT(mi)); return True; } } else if (event->xany.type == MotionNotify && hp->button_pressed) { gltrackball_track(hp->trackballs[hp->current_trackball], event->xmotion.x, event->xmotion.y, MI_WIDTH(mi), MI_HEIGHT(mi)); return True; } return False; } /* *----------------------------------------------------------------------------- *----------------------------------------------------------------------------- * Xlock hooks. *----------------------------------------------------------------------------- *----------------------------------------------------------------------------- */ /* *----------------------------------------------------------------------------- * Initialize hypertorus. Called each time the window changes. *----------------------------------------------------------------------------- */ ENTRYPOINT void init_hypertorus(ModeInfo *mi) { hypertorusstruct *hp; if (hyper == NULL) { hyper = (hypertorusstruct *)calloc(MI_NUM_SCREENS(mi), sizeof(hypertorusstruct)); if (hyper == NULL) return; } hp = &hyper[MI_SCREEN(mi)]; hp->trackballs[0] = gltrackball_init(True); hp->trackballs[1] = gltrackball_init(True); hp->current_trackball = 0; hp->button_pressed = False; /* Set the display mode. */ if (!strcasecmp(mode,"wireframe") || !strcasecmp(mode,"0")) { display_mode = DISP_WIREFRAME; } else if (!strcasecmp(mode,"surface") || !strcasecmp(mode,"1")) { display_mode = DISP_SURFACE; } else if (!strcasecmp(mode,"transparent") || !strcasecmp(mode,"2")) { display_mode = DISP_TRANSPARENT; } else { display_mode = DISP_SURFACE; } /* Set the appearance. */ if (!strcasecmp(appear,"solid") || !strcasecmp(appear,"0")) { appearance = APPEARANCE_SOLID; } else if (!strcasecmp(appear,"bands") || !strcasecmp(appear,"1")) { appearance = APPEARANCE_BANDS; num_spirals = 0; } else if (!strcasecmp(appear,"spirals-1") || !strcasecmp(appear,"3")) { appearance = APPEARANCE_SPIRALS; num_spirals = 1; } else if (!strcasecmp(appear,"spirals-2") || !strcasecmp(appear,"4")) { appearance = APPEARANCE_SPIRALS; num_spirals = 2; } else if (!strcasecmp(appear,"spirals-4") || !strcasecmp(appear,"5")) { appearance = APPEARANCE_SPIRALS; num_spirals = 4; } else if (!strcasecmp(appear,"spirals-8") || !strcasecmp(appear,"6")) { appearance = APPEARANCE_SPIRALS; num_spirals = 8; } else if (!strcasecmp(appear,"spirals-16") || !strcasecmp(appear,"7")) { appearance = APPEARANCE_SPIRALS; num_spirals = 16; } else { appearance = APPEARANCE_BANDS; num_spirals = 0; } /* Set the color mode. */ if (!strcasecmp(color_mode,"twosided")) { colors = COLORS_TWOSIDED; } else if (!strcasecmp(color_mode,"colorwheel")) { colors = COLORS_COLORWHEEL; } else { colors = COLORS_COLORWHEEL; } /* Set the 3d projection mode. */ if (!strcasecmp(proj_3d,"perspective") || !strcasecmp(proj_3d,"0")) { projection_3d = DISP_3D_PERSPECTIVE; } else if (!strcasecmp(proj_3d,"orthographic") || !strcasecmp(proj_3d,"1")) { projection_3d = DISP_3D_ORTHOGRAPHIC; } else { projection_3d = DISP_3D_PERSPECTIVE; } /* Set the 4d projection mode. */ if (!strcasecmp(proj_4d,"perspective") || !strcasecmp(proj_4d,"0")) { projection_4d = DISP_4D_PERSPECTIVE; } else if (!strcasecmp(proj_4d,"orthographic") || !strcasecmp(proj_4d,"1")) { projection_4d = DISP_4D_ORTHOGRAPHIC; } else { projection_4d = DISP_4D_PERSPECTIVE; } /* make multiple screens rotate at slightly different rates. */ hp->speed_scale = 0.9 + frand(0.3); if ((hp->glx_context = init_GL(mi)) != NULL) { reshape_hypertorus(mi,MI_WIDTH(mi),MI_HEIGHT(mi)); glDrawBuffer(GL_BACK); init(mi); } else { MI_CLEARWINDOW(mi); } } /* *----------------------------------------------------------------------------- * Called by the mainline code periodically to update the display. *----------------------------------------------------------------------------- */ ENTRYPOINT void draw_hypertorus(ModeInfo *mi) { Display *display = MI_DISPLAY(mi); Window window = MI_WINDOW(mi); hypertorusstruct *hp; if (hyper == NULL) return; hp = &hyper[MI_SCREEN(mi)]; MI_IS_DRAWN(mi) = True; if (!hp->glx_context) return; glXMakeCurrent(display,window,*(hp->glx_context)); glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT); glLoadIdentity(); display_hypertorus(mi); if (MI_IS_FPS(mi)) do_fps (mi); glFlush(); glXSwapBuffers(display,window); } /* *----------------------------------------------------------------------------- * The display is being taken away from us. Free up malloc'ed * memory and X resources that we've alloc'ed. Only called * once, we must zap everything for every screen. *----------------------------------------------------------------------------- */ ENTRYPOINT void release_hypertorus(ModeInfo *mi) { if (hyper != NULL) { int screen; for (screen = 0; screen < MI_NUM_SCREENS(mi); screen++) { hypertorusstruct *hp = &hyper[screen]; if (hp->glx_context) hp->glx_context = (GLXContext *)NULL; } (void) free((void *)hyper); hyper = (hypertorusstruct *)NULL; } FreeAllGL(mi); } #ifndef STANDALONE ENTRYPOINT void change_hypertorus(ModeInfo *mi) { hypertorusstruct *hp = &hyper[MI_SCREEN(mi)]; if (!hp->glx_context) return; glXMakeCurrent(MI_DISPLAY(mi),MI_WINDOW(mi),*(hp->glx_context)); init(mi); } #endif /* !STANDALONE */ XSCREENSAVER_MODULE ("Hypertorus", hypertorus) #endif /* USE_GL */ xscreensaver-5.36/hacks/glx/glmatrix.c000664 000767 000024 00000072706 12701612217 020031 0ustar00jwzstaff000000 000000 /* glmatrix, Copyright (c) 2003, 2004 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. * * GLMatrix -- simulate the text scrolls from the movie "The Matrix". * * This program does a 3D rendering of the dropping characters that * appeared in the title sequences of the movies. See also `xmatrix' * for a simulation of what the computer monitors actually *in* the * movie did. */ #define DEFAULTS "*delay: 30000 \n" \ "*showFPS: False \n" \ "*wireframe: False \n" \ # define refresh_matrix 0 # define release_matrix 0 #undef countof #define countof(x) (sizeof((x))/sizeof((*x))) #undef BELLRAND #define BELLRAND(n) ((frand((n)) + frand((n)) + frand((n))) / 3) #include "xlockmore.h" #include "xpm-ximage.h" #ifdef __GNUC__ __extension__ /* don't warn about "string length is greater than the length ISO C89 compilers are required to support" when including the following XPM file... */ #endif #include "../images/matrix3.xpm" #ifdef USE_GL /* whole file */ #define DEF_SPEED "1.0" #define DEF_DENSITY "20" #define DEF_CLOCK "False" #define DEF_FOG "True" #define DEF_WAVES "True" #define DEF_ROTATE "True" #define DEF_TEXTURE "True" #define DEF_MODE "Matrix" #define DEF_TIMEFMT " %l%M%p " #define CHAR_COLS 16 #define CHAR_ROWS 13 static const int matrix_encoding[] = { 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, # if 0 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207 # else 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175 # endif }; static const int decimal_encoding[] = { 16, 17, 18, 19, 20, 21, 22, 23, 24, 25 }; static const int hex_encoding[] = { 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 33, 34, 35, 36, 37, 38 }; static const int binary_encoding[] = { 16, 17 }; static const int dna_encoding[] = { 33, 35, 39, 52 }; static const unsigned char char_map[256] = { 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, /* 0 */ 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, /* 16 */ 0, 1, 2, 96, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, /* 32 */ 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, /* 48 */ 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, /* 64 */ 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, /* 80 */ 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, /* 96 */ 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, /* 112 */ 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, /* 128 */ 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, /* 144 */ 96, 97, 98, 99,100,101,102,103,104,105,106,107,108,109,110,111, /* 160 */ 112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127, /* 176 */ 128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143, /* 192 */ 144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159, /* 208 */ #if 0 160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175, /* 224 */ 176,177,178,195,180,181,182,183,184,185,186,187,188,189,190,191 /* 240 */ #else /* see spank_image() */ 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, /* 224 */ 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, /* 240 */ #endif }; #define CURSOR_GLYPH 97 /* #define DEBUG */ #define GRID_SIZE 70 /* width and height of the arena */ #define GRID_DEPTH 35 /* depth of the arena */ #define WAVE_SIZE 22 /* periodicity of color (brightness) waves */ #define SPLASH_RATIO 0.7 /* ratio of GRID_DEPTH where chars hit the screen */ static const struct { GLfloat x, y; } nice_views[] = { { 0, 0 }, { 0, -20 }, /* this is a list of viewer rotations that look nice. */ { 0, 20 }, /* every now and then we switch to a new one. */ { 25, 0 }, /* (but we only use the first one at start-up.) */ {-25, 0 }, { 25, 20 }, {-25, 20 }, { 25, -20 }, {-25, -20 }, { 10, 0 }, {-10, 0 }, { 0, 0 }, /* prefer these */ { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, }; typedef struct { GLfloat x, y, z; /* position of strip */ GLfloat dx, dy, dz; /* velocity of strip */ Bool erasing_p; /* Whether this strip is on its way out. */ int spinner_glyph; /* the bottommost glyph -- the feeder */ GLfloat spinner_y; /* where on the strip the bottom glyph is */ GLfloat spinner_speed; /* how fast the bottom glyph drops */ int glyphs[GRID_SIZE]; /* the other glyphs on the strip, which will be revealed by the dropping spinner. 0 means no glyph; negative means "spinner". If non-zero, real value is abs(G)-1. */ Bool highlight[GRID_SIZE]; /* some glyphs may be highlighted */ int spin_speed; /* Rotate all spinners every this-many frames */ int spin_tick; /* frame counter */ int wave_position; /* Waves of brightness wash down the strip. */ int wave_speed; /* every this-many frames. */ int wave_tick; /* frame counter. */ } strip; typedef struct { GLXContext *glx_context; Bool button_down_p; GLuint texture; int nstrips; strip *strips; const int *glyph_map; int nglyphs; GLfloat tex_char_width, tex_char_height; /* auto-tracking direction of view */ int last_view, target_view; GLfloat view_x, view_y; int view_steps, view_tick; Bool auto_tracking_p; int track_tick; int real_char_rows; GLfloat brightness_ramp[WAVE_SIZE]; } matrix_configuration; static matrix_configuration *mps = NULL; static GLfloat speed; static GLfloat density; static Bool do_clock; static char *timefmt; static Bool do_fog; static Bool do_waves; static Bool do_rotate; static Bool do_texture; static char *mode_str; static XrmOptionDescRec opts[] = { { "-speed", ".speed", XrmoptionSepArg, 0 }, { "-density", ".density", XrmoptionSepArg, 0 }, { "-mode", ".mode", XrmoptionSepArg, 0 }, { "-binary", ".mode", XrmoptionNoArg, "binary" }, { "-hexadecimal", ".mode", XrmoptionNoArg, "hexadecimal" }, { "-decimal", ".mode", XrmoptionNoArg, "decimal" }, { "-dna", ".mode", XrmoptionNoArg, "dna" }, { "-clock", ".clock", XrmoptionNoArg, "True" }, { "+clock", ".clock", XrmoptionNoArg, "False" }, { "-timefmt", ".timefmt", XrmoptionSepArg, 0 }, { "-fog", ".fog", XrmoptionNoArg, "True" }, { "+fog", ".fog", XrmoptionNoArg, "False" }, { "-waves", ".waves", XrmoptionNoArg, "True" }, { "+waves", ".waves", XrmoptionNoArg, "False" }, { "-rotate", ".rotate", XrmoptionNoArg, "True" }, { "+rotate", ".rotate", XrmoptionNoArg, "False" }, {"-texture", ".texture", XrmoptionNoArg, "True" }, {"+texture", ".texture", XrmoptionNoArg, "False" }, }; static argtype vars[] = { {&mode_str, "mode", "Mode", DEF_MODE, t_String}, {&speed, "speed", "Speed", DEF_SPEED, t_Float}, {&density, "density", "Density", DEF_DENSITY, t_Float}, {&do_clock, "clock", "Clock", DEF_CLOCK, t_Bool}, {&timefmt, "timefmt", "Timefmt", DEF_TIMEFMT, t_String}, {&do_fog, "fog", "Fog", DEF_FOG, t_Bool}, {&do_waves, "waves", "Waves", DEF_WAVES, t_Bool}, {&do_rotate, "rotate", "Rotate", DEF_ROTATE, t_Bool}, {&do_texture, "texture", "Texture", DEF_TEXTURE, t_Bool}, }; ENTRYPOINT ModeSpecOpt matrix_opts = {countof(opts), opts, countof(vars), vars, NULL}; /* Re-randomize the state of one strip. */ static void reset_strip (ModeInfo *mi, strip *s) { matrix_configuration *mp = &mps[MI_SCREEN(mi)]; int i; Bool time_displayed_p = False; /* never display time twice in one strip */ memset (s, 0, sizeof(*s)); s->x = (GLfloat) (frand(GRID_SIZE) - (GRID_SIZE/2)); s->y = (GLfloat) (GRID_SIZE/2 + BELLRAND(0.5)); /* shift top slightly */ s->z = (GLfloat) (GRID_DEPTH * 0.2) - frand (GRID_DEPTH * 0.7); s->spinner_y = 0; s->dx = 0; /* s->dx = ((BELLRAND(0.01) - 0.005) * speed); */ s->dy = 0; s->dz = (BELLRAND(0.02) * speed); s->spinner_speed = (BELLRAND(0.3) * speed); s->spin_speed = (int) BELLRAND(2.0 / speed) + 1; s->spin_tick = 0; s->wave_position = 0; s->wave_speed = (int) BELLRAND(3.0 / speed) + 1; s->wave_tick = 0; for (i = 0; i < GRID_SIZE; i++) if (do_clock && !time_displayed_p && (i < GRID_SIZE-5) && /* display approx. once per 5 strips */ !(random() % (GRID_SIZE-5)*5)) { int j; char text[80]; time_t now = time ((time_t *) 0); struct tm *tm = localtime (&now); strftime (text, sizeof(text)-1, timefmt, tm); /* render time into the strip */ for (j = 0; j < strlen(text) && i < GRID_SIZE; j++, i++) { s->glyphs[i] = char_map [((unsigned char *) text)[j]] + 1; s->highlight[i] = True; } time_displayed_p = True; } else { int draw_p = (random() % 7); int spin_p = (draw_p && !(random() % 20)); int g = (draw_p ? mp->glyph_map[(random() % mp->nglyphs)] + 1 : 0); if (spin_p) g = -g; s->glyphs[i] = g; s->highlight[i] = False; } s->spinner_glyph = - (mp->glyph_map[(random() % mp->nglyphs)] + 1); } /* Animate the strip one step. Reset if it has reached the bottom. */ static void tick_strip (ModeInfo *mi, strip *s) { matrix_configuration *mp = &mps[MI_SCREEN(mi)]; int i; if (mp->button_down_p) return; s->x += s->dx; s->y += s->dy; s->z += s->dz; if (s->z > GRID_DEPTH * SPLASH_RATIO) /* splashed into screen */ { reset_strip (mi, s); return; } s->spinner_y += s->spinner_speed; if (s->spinner_y >= GRID_SIZE) { if (s->erasing_p) { reset_strip (mi, s); return; } else { s->erasing_p = True; s->spinner_y = 0; s->spinner_speed /= 2; /* erase it slower than we drew it */ } } /* Spin the spinners. */ s->spin_tick++; if (s->spin_tick > s->spin_speed) { s->spin_tick = 0; s->spinner_glyph = - (mp->glyph_map[(random() % mp->nglyphs)] + 1); for (i = 0; i < GRID_SIZE; i++) if (s->glyphs[i] < 0) { s->glyphs[i] = -(mp->glyph_map[(random() % mp->nglyphs)] + 1); if (! (random() % 800)) /* sometimes they stop spinning */ s->glyphs[i] = -s->glyphs[i]; } } /* Move the color (brightness) wave. */ s->wave_tick++; if (s->wave_tick > s->wave_speed) { s->wave_tick = 0; s->wave_position++; if (s->wave_position >= WAVE_SIZE) s->wave_position = 0; } } /* Draw a single character at the given position and brightness. */ static void draw_glyph (ModeInfo *mi, int glyph, Bool highlight, GLfloat x, GLfloat y, GLfloat z, GLfloat brightness) { matrix_configuration *mp = &mps[MI_SCREEN(mi)]; int wire = MI_IS_WIREFRAME(mi); GLfloat w = mp->tex_char_width; GLfloat h = mp->tex_char_height; GLfloat cx = 0, cy = 0; GLfloat S = 1; Bool spinner_p = (glyph < 0); if (glyph == 0) abort(); if (glyph < 0) glyph = -glyph; if (spinner_p) brightness *= 1.5; if (!do_texture) { S = 0.8; x += 0.1; y += 0.1; } else { int ccx = ((glyph - 1) % CHAR_COLS); int ccy = ((glyph - 1) / CHAR_COLS); cx = ccx * w; cy = (mp->real_char_rows - ccy - 1) * h; if (do_fog) { GLfloat depth; depth = (z / GRID_DEPTH) + 0.5; /* z ratio from back/front */ depth = 0.2 + (depth * 0.8); /* scale to range [0.2 - 1.0] */ brightness *= depth; /* so no row goes all black. */ } } { GLfloat r, g, b, a; if (highlight) brightness *= 2; if (!do_texture && !spinner_p) r = b = 0, g = 1; else r = g = b = 1; a = brightness; /* If the glyph is very close to the screen (meaning it is very large, and is about to splash into the screen and vanish) then start fading it out, proportional to how close to the glass it is. */ if (z > GRID_DEPTH/2) { GLfloat ratio = ((z - GRID_DEPTH/2) / ((GRID_DEPTH * SPLASH_RATIO) - GRID_DEPTH/2)); int i = ratio * WAVE_SIZE; if (i < 0) i = 0; else if (i >= WAVE_SIZE) i = WAVE_SIZE-1; a *= mp->brightness_ramp[i]; } glColor4f (r,g,b,a); } glBegin (wire ? GL_LINE_LOOP : GL_QUADS); glNormal3f (0, 0, 1); glTexCoord2f (cx, cy); glVertex3f (x, y, z); glTexCoord2f (cx+w, cy); glVertex3f (x+S, y, z); glTexCoord2f (cx+w, cy+h); glVertex3f (x+S, y+S, z); glTexCoord2f (cx, cy+h); glVertex3f (x, y+S, z); glEnd (); if (wire && spinner_p) { glBegin (GL_LINES); glVertex3f (x, y, z); glVertex3f (x+S, y+S, z); glVertex3f (x, y+S, z); glVertex3f (x+S, y, z); glEnd(); } mi->polygon_count++; } /* Draw all the visible glyphs in the strip. */ static void draw_strip (ModeInfo *mi, strip *s) { matrix_configuration *mp = &mps[MI_SCREEN(mi)]; int i; for (i = 0; i < GRID_SIZE; i++) { int g = s->glyphs[i]; Bool below_p = (s->spinner_y >= i); if (s->erasing_p) below_p = !below_p; if (g && below_p) /* don't draw cells below the spinner */ { GLfloat brightness; if (!do_waves) brightness = 1.0; else { int j = WAVE_SIZE - ((i + (GRID_SIZE - s->wave_position)) % WAVE_SIZE); brightness = mp->brightness_ramp[j]; } draw_glyph (mi, g, s->highlight[i], s->x, s->y - i, s->z, brightness); } } if (!s->erasing_p) draw_glyph (mi, s->spinner_glyph, False, s->x, s->y - s->spinner_y, s->z, 1.0); } /* qsort comparator for sorting strips by z position */ static int cmp_strips (const void *aa, const void *bb) { const strip *a = *(strip **) aa; const strip *b = *(strip **) bb; return ((int) (a->z * 10000) - (int) (b->z * 10000)); } /* Auto-tracking */ static void auto_track_init (ModeInfo *mi) { matrix_configuration *mp = &mps[MI_SCREEN(mi)]; mp->last_view = 0; mp->target_view = 0; mp->view_x = nice_views[mp->last_view].x; mp->view_y = nice_views[mp->last_view].y; mp->view_steps = 100; mp->view_tick = 0; mp->auto_tracking_p = False; } static void auto_track (ModeInfo *mi) { matrix_configuration *mp = &mps[MI_SCREEN(mi)]; if (! do_rotate) return; if (mp->button_down_p) return; /* if we're not moving, maybe start moving. Otherwise, do nothing. */ if (! mp->auto_tracking_p) { if (++mp->track_tick < 20/speed) return; mp->track_tick = 0; if (! (random() % 20)) mp->auto_tracking_p = True; else return; } { GLfloat ox = nice_views[mp->last_view].x; GLfloat oy = nice_views[mp->last_view].y; GLfloat tx = nice_views[mp->target_view].x; GLfloat ty = nice_views[mp->target_view].y; /* move from A to B with sinusoidal deltas, so that it doesn't jerk to a stop. */ GLfloat th = sin ((M_PI / 2) * (double) mp->view_tick / mp->view_steps); mp->view_x = (ox + ((tx - ox) * th)); mp->view_y = (oy + ((ty - oy) * th)); mp->view_tick++; if (mp->view_tick >= mp->view_steps) { mp->view_tick = 0; mp->view_steps = (350.0 / speed); mp->last_view = mp->target_view; mp->target_view = (random() % (countof(nice_views) - 1)) + 1; mp->auto_tracking_p = False; } } } /* Window management, etc */ ENTRYPOINT void reshape_matrix (ModeInfo *mi, int width, int height) { GLfloat h = (GLfloat) height / (GLfloat) width; glViewport (0, 0, (GLint) width, (GLint) height); glMatrixMode(GL_PROJECTION); glLoadIdentity(); gluPerspective (80.0, 1/h, 1.0, 100); glMatrixMode(GL_MODELVIEW); glLoadIdentity(); gluLookAt( 0.0, 0.0, 25.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0); glClear(GL_COLOR_BUFFER_BIT); } ENTRYPOINT Bool matrix_handle_event (ModeInfo *mi, XEvent *event) { matrix_configuration *mp = &mps[MI_SCREEN(mi)]; if (event->xany.type == ButtonPress && event->xbutton.button == Button1) { mp->button_down_p = True; return True; } else if (event->xany.type == ButtonRelease && event->xbutton.button == Button1) { mp->button_down_p = False; return True; } return False; } #if 0 static Bool bigendian (void) { union { int i; char c[sizeof(int)]; } u; u.i = 1; return !u.c[0]; } #endif /* The image with the characters in it is 512x598, meaning that it needs to be copied into a 512x1024 texture. But some machines can't handle textures that large... And it turns out that we aren't using most of the characters in that image anyway, since this program doesn't do anything that makes use of the full range of Latin1 characters. So... this function tosses out the last 32 of the Latin1 characters, resulting in a 512x506 image, which we can then stuff in a 512x512 texture. Voila. If this hack ever grows into something that displays full Latin1 text, well then, Something Else Will Need To Be Done. Since currently GLMatrix does not run textclient / xscreensaver-text, it's not an issue. (XMatrix does that.) */ static void spank_image (matrix_configuration *mp, XImage *xi) { int ch = xi->height / CHAR_ROWS; int cut = 2; unsigned char *bits = (unsigned char *) xi->data; unsigned char *from, *to, *s, *end; int L = xi->bytes_per_line * ch; /* int i;*/ /* Copy row 12 into 10 (which really means, copy 2 into 0, since texture data is upside down.). */ to = bits + (L * cut); from = bits; end = from + L; s = from; while (s < end) *to++ = *s++; /* Then, pull all the bits down by 2 rows. */ to = bits; from = bits + (L * cut); end = bits + (L * CHAR_ROWS); s = from; while (s < end) *to++ = *s++; /* And clear out the rest, for good measure. */ from = bits + (L * (CHAR_ROWS - cut)); end = bits + (L * CHAR_ROWS); s = from; while (s < end) *s++ = 0; xi->height -= (cut * ch); mp->real_char_rows -= cut; # if 0 /* Finally, pull the map indexes back to match the new bits. */ for (i = 0; i < countof(matrix_encoding); i++) if (matrix_encoding[i] > (CHAR_COLS * (CHAR_ROWS - cut))) matrix_encoding[i] -= (cut * CHAR_COLS); # endif } static void load_textures (ModeInfo *mi, Bool flip_p) { matrix_configuration *mp = &mps[MI_SCREEN(mi)]; XImage *xi; int x, y; int cw, ch; int orig_w, orig_h; /* The Matrix XPM is 512x598 -- but GL texture sizes must be powers of 2. So we waste some padding rows to round up. */ xi = xpm_to_ximage (mi->dpy, mi->xgwa.visual, mi->xgwa.colormap, matrix3_xpm); orig_w = xi->width; orig_h = xi->height; mp->real_char_rows = CHAR_ROWS; spank_image (mp, xi); if (xi->height != 512 && xi->height != 1024) { xi->height = (xi->height < 512 ? 512 : 1024); xi->data = realloc (xi->data, xi->height * xi->bytes_per_line); if (!xi->data) { fprintf(stderr, "%s: out of memory\n", progname); exit(1); } } if (xi->width != 512) abort(); if (xi->height != 512 && xi->height != 1024) abort(); /* char size in pixels */ cw = orig_w / CHAR_COLS; ch = orig_h / CHAR_ROWS; /* char size in ratio of final (padded) texture size */ mp->tex_char_width = (GLfloat) cw / xi->width; mp->tex_char_height = (GLfloat) ch / xi->height; /* Flip each character's bits horizontally -- we could also just do this by reversing the texture coordinates on the quads, but on some systems that slows things down a lot. */ if (flip_p) { int xx, col; unsigned long buf[100]; for (y = 0; y < xi->height; y++) for (col = 0, xx = 0; col < CHAR_COLS; col++, xx += cw) { for (x = 0; x < cw; x++) buf[x] = XGetPixel (xi, xx+x, y); for (x = 0; x < cw; x++) XPutPixel (xi, xx+x, y, buf[cw-x-1]); } } /* The pixmap is a color image with no transparency. Set the texture's alpha to be the green channel, and set the green channel to be 100%. */ { int rpos, gpos, bpos, apos; /* bitfield positions */ #if 0 /* #### Cherub says that the little-endian case must be taken on MacOSX, or else the colors/alpha are the wrong way around. How can that be the case? */ if (bigendian()) rpos = 24, gpos = 16, bpos = 8, apos = 0; else #endif rpos = 0, gpos = 8, bpos = 16, apos = 24; for (y = 0; y < xi->height; y++) for (x = 0; x < xi->width; x++) { unsigned long p = XGetPixel (xi, x, y); unsigned char r = (p >> rpos) & 0xFF; unsigned char g = (p >> gpos) & 0xFF; unsigned char b = (p >> bpos) & 0xFF; unsigned char a = g; g = 0xFF; p = (r << rpos) | (g << gpos) | (b << bpos) | (a << apos); XPutPixel (xi, x, y, p); } } /* Now load the texture into GL. */ clear_gl_error(); glGenTextures (1, &mp->texture); glPixelStorei (GL_UNPACK_ALIGNMENT, 4); /* messes up -fps */ /* glPixelStorei (GL_UNPACK_ROW_LENGTH, xi->width);*/ glBindTexture (GL_TEXTURE_2D, mp->texture); check_gl_error ("texture init"); glTexImage2D (GL_TEXTURE_2D, 0, GL_RGBA, xi->width, xi->height, 0, GL_RGBA, GL_UNSIGNED_INT_8_8_8_8_REV, xi->data); { char buf[255]; sprintf (buf, "creating %dx%d texture:", xi->width, xi->height); check_gl_error (buf); } glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); /* I'd expect CLAMP to be the thing to do here, but oddly, we get a faint solid green border around the texture if it is *not* REPEAT! */ glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT); glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT); glTexEnvi (GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE); glPixelStorei (GL_UNPACK_ALIGNMENT, 1); check_gl_error ("texture param"); XDestroyImage (xi); } ENTRYPOINT void init_matrix (ModeInfo *mi) { matrix_configuration *mp; int wire = MI_IS_WIREFRAME(mi); Bool flip_p = 0; int i; if (wire) do_texture = False; if (!mps) { mps = (matrix_configuration *) calloc (MI_NUM_SCREENS(mi), sizeof (matrix_configuration)); if (!mps) { fprintf(stderr, "%s: out of memory\n", progname); exit(1); } } mp = &mps[MI_SCREEN(mi)]; mp->glx_context = init_GL(mi); if (!mode_str || !*mode_str || !strcasecmp(mode_str, "matrix")) { flip_p = 1; mp->glyph_map = matrix_encoding; mp->nglyphs = countof(matrix_encoding); } else if (!strcasecmp (mode_str, "dna")) { flip_p = 0; mp->glyph_map = dna_encoding; mp->nglyphs = countof(dna_encoding); } else if (!strcasecmp (mode_str, "bin") || !strcasecmp (mode_str, "binary")) { flip_p = 0; mp->glyph_map = binary_encoding; mp->nglyphs = countof(binary_encoding); } else if (!strcasecmp (mode_str, "hex") || !strcasecmp (mode_str, "hexadecimal")) { flip_p = 0; mp->glyph_map = hex_encoding; mp->nglyphs = countof(hex_encoding); } else if (!strcasecmp (mode_str, "dec") || !strcasecmp (mode_str, "decimal")) { flip_p = 0; mp->glyph_map = decimal_encoding; mp->nglyphs = countof(decimal_encoding); } else { fprintf (stderr, "%s: `mode' must be matrix, dna, binary, or hex: not `%s'\n", progname, mode_str); exit (1); } reshape_matrix (mi, MI_WIDTH(mi), MI_HEIGHT(mi)); glShadeModel(GL_SMOOTH); glDisable(GL_DEPTH_TEST); glDisable(GL_CULL_FACE); glEnable(GL_NORMALIZE); if (do_texture) load_textures (mi, flip_p); /* to scale coverage-percent to strips, this number looks about right... */ mp->nstrips = (int) (density * 2.2); if (mp->nstrips < 1) mp->nstrips = 1; else if (mp->nstrips > 2000) mp->nstrips = 2000; mp->strips = calloc (mp->nstrips, sizeof(strip)); for (i = 0; i < mp->nstrips; i++) { strip *s = &mp->strips[i]; reset_strip (mi, s); /* If we start all strips from zero at once, then the first few seconds of the animation are much denser than normal. So instead, set all the initial strips to erase-mode with random starting positions. As these die off at random speeds and are re-created, we'll get a more consistent density. */ s->erasing_p = True; s->spinner_y = frand(GRID_SIZE); memset (s->glyphs, 0, sizeof(s->glyphs)); /* no visible glyphs */ } /* Compute the brightness ramp. */ for (i = 0; i < WAVE_SIZE; i++) { GLfloat j = ((WAVE_SIZE - i) / (GLfloat) (WAVE_SIZE - 1)); j *= (M_PI / 2); /* j ranges from 0.0 - PI/2 */ j = sin (j); /* j ranges from 0.0 - 1.0 */ j = 0.2 + (j * 0.8); /* j ranges from 0.2 - 1.0 */ mp->brightness_ramp[i] = j; /* printf("%2d %8.2f\n", i, j); */ } auto_track_init (mi); } #ifdef DEBUG static void draw_grid (ModeInfo *mi) { if (!MI_IS_WIREFRAME(mi)) { glDisable(GL_TEXTURE_2D); glDisable(GL_BLEND); } glPushMatrix(); glColor3f(1, 1, 1); glBegin(GL_LINES); glVertex3f(-GRID_SIZE, 0, 0); glVertex3f(GRID_SIZE, 0, 0); glVertex3f(0, -GRID_SIZE, 0); glVertex3f(0, GRID_SIZE, 0); glEnd(); glBegin(GL_LINE_LOOP); glVertex3f(-GRID_SIZE/2, -GRID_SIZE/2, 0); glVertex3f(-GRID_SIZE/2, GRID_SIZE/2, 0); glVertex3f( GRID_SIZE/2, GRID_SIZE/2, 0); glVertex3f( GRID_SIZE/2, -GRID_SIZE/2, 0); glEnd(); glBegin(GL_LINE_LOOP); glVertex3f(-GRID_SIZE/2, GRID_SIZE/2, -GRID_DEPTH/2); glVertex3f(-GRID_SIZE/2, GRID_SIZE/2, GRID_DEPTH/2); glVertex3f( GRID_SIZE/2, GRID_SIZE/2, GRID_DEPTH/2); glVertex3f( GRID_SIZE/2, GRID_SIZE/2, -GRID_DEPTH/2); glEnd(); glBegin(GL_LINE_LOOP); glVertex3f(-GRID_SIZE/2, -GRID_SIZE/2, -GRID_DEPTH/2); glVertex3f(-GRID_SIZE/2, -GRID_SIZE/2, GRID_DEPTH/2); glVertex3f( GRID_SIZE/2, -GRID_SIZE/2, GRID_DEPTH/2); glVertex3f( GRID_SIZE/2, -GRID_SIZE/2, -GRID_DEPTH/2); glEnd(); glBegin(GL_LINES); glVertex3f(-GRID_SIZE/2, -GRID_SIZE/2, -GRID_DEPTH/2); glVertex3f(-GRID_SIZE/2, GRID_SIZE/2, -GRID_DEPTH/2); glVertex3f(-GRID_SIZE/2, -GRID_SIZE/2, GRID_DEPTH/2); glVertex3f(-GRID_SIZE/2, GRID_SIZE/2, GRID_DEPTH/2); glVertex3f( GRID_SIZE/2, -GRID_SIZE/2, -GRID_DEPTH/2); glVertex3f( GRID_SIZE/2, GRID_SIZE/2, -GRID_DEPTH/2); glVertex3f( GRID_SIZE/2, -GRID_SIZE/2, GRID_DEPTH/2); glVertex3f( GRID_SIZE/2, GRID_SIZE/2, GRID_DEPTH/2); glEnd(); glPopMatrix(); if (!MI_IS_WIREFRAME(mi)) { glEnable(GL_TEXTURE_2D); glEnable(GL_BLEND); } } #endif /* DEBUG */ ENTRYPOINT void draw_matrix (ModeInfo *mi) { matrix_configuration *mp = &mps[MI_SCREEN(mi)]; Display *dpy = MI_DISPLAY(mi); Window window = MI_WINDOW(mi); int i; if (!mp->glx_context) return; glXMakeCurrent(MI_DISPLAY(mi), MI_WINDOW(mi), *(mp->glx_context)); glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glPushMatrix (); glRotatef(current_device_rotation(), 0, 0, 1); if (do_texture) { glEnable(GL_TEXTURE_2D); glEnable(GL_BLEND); /* Jeff Epler points out: By using GL_ONE instead of GL_SRC_ONE_MINUS_ALPHA, glyphs are added to each other, so that a bright glyph with a darker one in front is a little brighter than the bright glyph alone. */ glBlendFunc (GL_SRC_ALPHA, GL_ONE); } if (do_rotate) { glRotatef (mp->view_x, 1, 0, 0); glRotatef (mp->view_y, 0, 1, 0); } #ifdef DEBUG # if 0 glScalef(0.5, 0.5, 0.5); # endif # if 0 glRotatef(-30, 0, 1, 0); # endif draw_grid (mi); #endif mi->polygon_count = 0; /* Render (and tick) each strip, starting at the back (draw the ones farthest from the camera first, to make the alpha transparency work out right.) */ { strip **sorted = malloc (mp->nstrips * sizeof(*sorted)); for (i = 0; i < mp->nstrips; i++) sorted[i] = &mp->strips[i]; qsort (sorted, i, sizeof(*sorted), cmp_strips); for (i = 0; i < mp->nstrips; i++) { strip *s = sorted[i]; tick_strip (mi, s); draw_strip (mi, s); } free (sorted); } auto_track (mi); #if 0 glBegin(GL_QUADS); glColor3f(1,1,1); glTexCoord2f (0,0); glVertex3f(-15,-15,0); glTexCoord2f (0,1); glVertex3f(-15,15,0); glTexCoord2f (1,1); glVertex3f(15,15,0); glTexCoord2f (1,0); glVertex3f(15,-15,0); glEnd(); #endif glPopMatrix (); if (mi->fps_p) do_fps (mi); glFinish(); glXSwapBuffers(dpy, window); } XSCREENSAVER_MODULE_2 ("GLMatrix", glmatrix, matrix) #endif /* USE_GL */ xscreensaver-5.36/hacks/glx/cubestorm.c000644 000767 000024 00000024361 12710313175 020176 0ustar00jwzstaff000000 000000 /* cubestorm, Copyright (c) 2003-2014 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. */ #define DEFAULTS "*delay: 30000 \n" \ "*count: " DEF_COUNT "\n" \ "*showFPS: False \n" \ "*fpsSolid: True \n" \ "*wireframe: False \n" \ "*suppressRotationAnimation: True\n" \ # define refresh_cube 0 # define release_cube 0 #undef countof #define countof(x) (sizeof((x))/sizeof((*x))) #include "xlockmore.h" #include "colors.h" #include "rotator.h" #include "gltrackball.h" #include #ifdef USE_GL /* whole file */ #define DEF_SPIN "True" #define DEF_WANDER "True" #define DEF_SPEED "1.0" #define DEF_THICKNESS "0.06" #define DEF_COUNT "4" #define DEF_DBUF "False" typedef struct { rotator *rot; int ccolor; } subcube; typedef struct { GLXContext *glx_context; trackball_state *trackball; Bool button_down_p; Bool clear_p; GLuint cube_list; int ncolors; XColor *colors; subcube *subcubes; } cube_configuration; static cube_configuration *bps = NULL; static Bool do_spin; static Bool do_wander; static GLfloat speed; static GLfloat thickness; static Bool dbuf_p; static XrmOptionDescRec opts[] = { { "-spin", ".spin", XrmoptionNoArg, "True" }, { "+spin", ".spin", XrmoptionNoArg, "False" }, { "-wander", ".wander", XrmoptionNoArg, "True" }, { "+wander", ".wander", XrmoptionNoArg, "False" }, { "-speed", ".speed", XrmoptionSepArg, 0 }, { "-db", ".doubleBuffer", XrmoptionNoArg, "True"}, { "+db", ".doubleBuffer", XrmoptionNoArg, "False"}, { "-thickness", ".thickness", XrmoptionSepArg, 0 }, }; static argtype vars[] = { {&do_spin, "spin", "Spin", DEF_SPIN, t_Bool}, {&do_wander, "wander", "Wander", DEF_WANDER, t_Bool}, {&speed, "speed", "Speed", DEF_SPEED, t_Float}, {&thickness, "thickness", "Thickness", DEF_THICKNESS, t_Float}, {&dbuf_p, "doubleBuffer", "DoubleBuffer", DEF_DBUF, t_Bool}, }; ENTRYPOINT ModeSpecOpt cube_opts = {countof(opts), opts, countof(vars), vars, NULL}; static void draw_face (ModeInfo *mi) { int wire = MI_IS_WIREFRAME(mi); int i; GLfloat t = thickness / 2; GLfloat a = -0.5; GLfloat b = 0.5; if (t <= 0) t = 0.001; else if (t > 0.5) t = 0.5; glPushMatrix(); glFrontFace(GL_CW); for (i = 0; i < 4; i++) { glNormal3f (0, 0, -1); glBegin (wire ? GL_LINE_LOOP : GL_QUADS); glVertex3f (a, a, a); glVertex3f (b, a, a); glVertex3f (b-t, a+t, a); glVertex3f (a+t, a+t, a); glEnd(); glNormal3f (0, 1, 0); glBegin (wire ? GL_LINE_LOOP : GL_QUADS); glVertex3f (b-t, a+t, a); glVertex3f (b-t, a+t, a+t); glVertex3f (a+t, a+t, a+t); glVertex3f (a+t, a+t, a); glEnd(); glRotatef(90, 0, 0, 1); } glPopMatrix(); } static void draw_faces (ModeInfo *mi) { glPushMatrix(); draw_face (mi); glRotatef (90, 0, 1, 0); draw_face (mi); glRotatef (90, 0, 1, 0); draw_face (mi); glRotatef (90, 0, 1, 0); draw_face (mi); glRotatef (90, 1, 0, 0); draw_face (mi); glRotatef (180, 1, 0, 0); draw_face (mi); glPopMatrix(); } static void new_cube_colors (ModeInfo *mi) { cube_configuration *bp = &bps[MI_SCREEN(mi)]; int i; bp->ncolors = 128; if (bp->colors) free (bp->colors); bp->colors = (XColor *) calloc(bp->ncolors, sizeof(XColor)); make_smooth_colormap (0, 0, 0, bp->colors, &bp->ncolors, False, 0, False); for (i = 0; i < MI_COUNT(mi); i++) bp->subcubes[i].ccolor = random() % bp->ncolors; } /* Window management, etc */ ENTRYPOINT void reshape_cube (ModeInfo *mi, int width, int height) { GLfloat h = (GLfloat) height / (GLfloat) width; glViewport (0, 0, (GLint) width, (GLint) height); glMatrixMode(GL_PROJECTION); glLoadIdentity(); gluPerspective (30.0, 1/h, 1.0, 100.0); glMatrixMode(GL_MODELVIEW); glLoadIdentity(); gluLookAt( 0.0, 0.0, 45.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0); # ifdef HAVE_MOBILE /* Keep it the same relative size when rotated. */ { int o = (int) current_device_rotation(); if (o != 0 && o != 180 && o != -180) glScalef (1/h, 1/h, 1/h); } # endif glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); } ENTRYPOINT Bool cube_handle_event (ModeInfo *mi, XEvent *event) { cube_configuration *bp = &bps[MI_SCREEN(mi)]; if (gltrackball_event_handler (event, bp->trackball, MI_WIDTH (mi), MI_HEIGHT (mi), &bp->button_down_p)) return True; else if (event->xany.type == KeyPress) { KeySym keysym; char c = 0; XLookupString (&event->xkey, &c, 1, &keysym, 0); if (c == ' ') { glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); return True; } else if (screenhack_event_helper (MI_DISPLAY(mi), MI_WINDOW(mi), event)) goto DEF; } else if (screenhack_event_helper (MI_DISPLAY(mi), MI_WINDOW(mi), event)) { DEF: new_cube_colors (mi); return True; } return False; } ENTRYPOINT void init_cube (ModeInfo *mi) { cube_configuration *bp; int wire = MI_IS_WIREFRAME(mi); int i; if (!bps) { bps = (cube_configuration *) calloc (MI_NUM_SCREENS(mi), sizeof (cube_configuration)); if (!bps) { fprintf(stderr, "%s: out of memory\n", progname); exit(1); } } # ifdef HAVE_JWZGLES dbuf_p = True; # endif bp = &bps[MI_SCREEN(mi)]; bp->glx_context = init_GL(mi); if (MI_COUNT(mi) <= 0) MI_COUNT(mi) = 1; bp->trackball = gltrackball_init (True); bp->subcubes = (subcube *) calloc (MI_COUNT(mi), sizeof(subcube)); for (i = 0; i < MI_COUNT(mi); i++) { double wander_speed, spin_speed, spin_accel; if (i == 0) { wander_speed = 0.05 * speed; spin_speed = 10.0 * speed; spin_accel = 4.0 * speed; } else { wander_speed = 0; spin_speed = 4.0 * speed; spin_accel = 2.0 * speed; } bp->subcubes[i].rot = make_rotator (do_spin ? spin_speed : 0, do_spin ? spin_speed : 0, do_spin ? spin_speed : 0, spin_accel, do_wander ? wander_speed : 0, True); } bp->colors = 0; new_cube_colors (mi); reshape_cube (mi, MI_WIDTH(mi), MI_HEIGHT(mi)); if (!wire) { GLfloat pos[4] = {1.0, 1.0, 1.0, 0.0}; GLfloat amb[4] = {0.0, 0.0, 0.0, 1.0}; GLfloat dif[4] = {1.0, 1.0, 1.0, 1.0}; GLfloat spc[4] = {0.0, 1.0, 1.0, 1.0}; glEnable(GL_LIGHTING); glEnable(GL_LIGHT0); glEnable(GL_DEPTH_TEST); glEnable(GL_CULL_FACE); glLightfv(GL_LIGHT0, GL_POSITION, pos); glLightfv(GL_LIGHT0, GL_AMBIENT, amb); glLightfv(GL_LIGHT0, GL_DIFFUSE, dif); glLightfv(GL_LIGHT0, GL_SPECULAR, spc); } bp->cube_list = glGenLists (1); glNewList (bp->cube_list, GL_COMPILE); draw_faces (mi); glEndList (); glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); } ENTRYPOINT void draw_cube (ModeInfo *mi) { cube_configuration *bp = &bps[MI_SCREEN(mi)]; Display *dpy = MI_DISPLAY(mi); Window window = MI_WINDOW(mi); int wire = MI_IS_WIREFRAME(mi); int i; double x, y, z; if (!bp->glx_context) return; glDrawBuffer(dbuf_p ? GL_BACK : GL_FRONT); glXMakeCurrent(MI_DISPLAY(mi), MI_WINDOW(mi), *(bp->glx_context)); glShadeModel(GL_SMOOTH); glEnable(GL_DEPTH_TEST); glEnable(GL_NORMALIZE); glEnable(GL_CULL_FACE); if (bp->clear_p) /* we're in "no vapor trails" mode */ { glClear(GL_DEPTH_BUFFER_BIT|GL_COLOR_BUFFER_BIT); if (! (random() % (int) (25 / speed))) bp->clear_p = False; } else { if (! (random() % (int) (200 / speed))) { bp->clear_p = True; new_cube_colors (mi); } } glPushMatrix (); glScalef(1.1, 1.1, 1.1); mi->polygon_count = 0; get_position (bp->subcubes[0].rot, &x, &y, &z, !bp->button_down_p); glTranslatef((x - 0.5) * 15, (y - 0.5) * 15, (z - 0.5) * 30); gltrackball_rotate (bp->trackball); glScalef (4.0, 4.0, 4.0); for (i = 0; i < MI_COUNT(mi); i++) { GLfloat bcolor[4] = {0.0, 0.0, 0.0, 1.0}; GLfloat bspec[4] = {1.0, 1.0, 1.0, 1.0}; GLfloat bshiny = 128.0; glPushMatrix(); if (i != 0) /* N+1 cubes rotate relative to cube 0 */ { get_rotation (bp->subcubes[0].rot, &x, &y, &z, False); glRotatef (x * 360, 1.0, 0.0, 0.0); glRotatef (y * 360, 0.0, 1.0, 0.0); glRotatef (z * 360, 0.0, 0.0, 1.0); } get_rotation (bp->subcubes[i].rot, &x, &y, &z, !bp->button_down_p); glRotatef (x * 360, 1.0, 0.0, 0.0); glRotatef (y * 360, 0.0, 1.0, 0.0); glRotatef (z * 360, 0.0, 0.0, 1.0); bcolor[0] = bp->colors[bp->subcubes[i].ccolor].red / 65536.0; bcolor[1] = bp->colors[bp->subcubes[i].ccolor].green / 65536.0; bcolor[2] = bp->colors[bp->subcubes[i].ccolor].blue / 65536.0; bp->subcubes[i].ccolor++; if (bp->subcubes[i].ccolor >= bp->ncolors) bp->subcubes[i].ccolor = 0; if (wire) glColor3f (bcolor[0], bcolor[1], bcolor[2]); else { glMaterialfv (GL_FRONT, GL_SPECULAR, bspec); glMateriali (GL_FRONT, GL_SHININESS, bshiny); glMaterialfv (GL_FRONT, GL_AMBIENT_AND_DIFFUSE, bcolor); } glCallList (bp->cube_list); mi->polygon_count += (4 * 2 * 6); glPopMatrix(); } glPopMatrix (); if (mi->fps_p) do_fps (mi); glFinish(); if (dbuf_p) glXSwapBuffers(dpy, window); } XSCREENSAVER_MODULE_2 ("CubeStorm", cubestorm, cube) #endif /* USE_GL */ xscreensaver-5.36/hacks/glx/glknots.c000664 000767 000024 00000025722 12710313207 017654 0ustar00jwzstaff000000 000000 /* glknots, Copyright (c) 2003-2014 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. * * Generates some 3D knots (closed loops). * Inspired by Paul Bourke at * http://astronomy.swin.edu.au/~pbourke/curves/knot/ */ #define DEFAULTS "*delay: 30000 \n" \ "*showFPS: False \n" \ "*wireframe: False \n" \ "*suppressRotationAnimation: True\n" \ # define refresh_knot 0 # define release_knot 0 #undef countof #define countof(x) (sizeof((x))/sizeof((*x))) #include "xlockmore.h" #include "colors.h" #include "tube.h" #include "rotator.h" #include "gltrackball.h" #include #ifdef USE_GL /* whole file */ #define DEF_SPIN "XYZ" #define DEF_WANDER "True" #define DEF_SPEED "1.0" #define DEF_THICKNESS "0.3" #define DEF_SEGMENTS "800" #define DEF_DURATION "8" typedef struct { GLXContext *glx_context; rotator *rot; trackball_state *trackball; Bool button_down_p; GLuint knot_list; int ncolors; XColor *colors; int ccolor; int mode; /* 0 = normal, 1 = out, 2 = in */ int mode_tick; Bool clear_p; time_t last_time; int draw_tick; } knot_configuration; static knot_configuration *bps = NULL; static char *do_spin; static GLfloat speed; static Bool do_wander; static GLfloat thickness; static unsigned int segments; static int duration; static XrmOptionDescRec opts[] = { { "-spin", ".spin", XrmoptionSepArg, 0 }, { "+spin", ".spin", XrmoptionNoArg, "" }, { "-wander", ".wander", XrmoptionNoArg, "True" }, { "+wander", ".wander", XrmoptionNoArg, "False" }, { "-speed", ".speed", XrmoptionSepArg, 0 }, { "-thickness", ".thickness", XrmoptionSepArg, 0 }, { "-segments", ".segments", XrmoptionSepArg, 0 }, { "-duration", ".duration", XrmoptionSepArg, 0 }, }; static argtype vars[] = { {&do_spin, "spin", "Spin", DEF_SPIN, t_String}, {&do_wander, "wander", "Wander", DEF_WANDER, t_Bool}, {&speed, "speed", "Speed", DEF_SPEED, t_Float}, {&thickness, "thickness", "Thickness", DEF_THICKNESS, t_Float}, {&segments, "segments", "Segments", DEF_SEGMENTS, t_Int}, {&duration, "duration", "Duration", DEF_DURATION, t_Int}, }; ENTRYPOINT ModeSpecOpt knot_opts = {countof(opts), opts, countof(vars), vars, NULL}; static void make_knot (ModeInfo *mi) { int wire = MI_IS_WIREFRAME(mi); GLfloat diam = (4 * thickness); int faces = (wire ? 3 : 6); unsigned int i; double x, y, z, ox=0, oy=0, oz=0; double mu; double p[9]; Bool blobby_p = (0 == (random() % 5)); Bool type = (random() % 2); for (i = 0; i < countof(p); i++) { p[i] = 1 + (random() % 4); if (! (random() % 3)) p[i] += (random() % 5); } if (type == 1) { p[0] += 4; p[1] *= ((p[0] + p[0]) / 10); blobby_p = False; } mi->polygon_count = 0; for (i = 0; i <= segments; i++) { if (type == 0) { mu = i * (M_PI * 2) / segments; x = 10 * (cos(mu) + cos(p[0]*mu)) + cos(p[1]*mu) + cos(p[2]*mu); y = 6 * sin(mu) + 10 * sin(p[3]*mu); z = 16 * sin(p[4]*mu) * sin(p[5]*mu/2) + p[6]*sin(p[7]*mu) - 2 * sin(p[8]*mu); } else if (type == 1) { mu = i * (M_PI * 2) * p[0] / (double) segments; x = 10 * cos(mu) * (1 + cos(p[1] * mu/ p[0]) / 2.0); y = 25 * sin(p[1] * mu / p[0]) / 2.0; z = 10 * sin(mu) * (1 + cos(p[1] * mu/ p[0]) / 2.0); } else abort(); if (i != 0) { GLfloat dist = sqrt ((x-ox)*(x-ox) + (y-oy)*(y-oy) + (z-oz)*(z-oz)); GLfloat di; if (!blobby_p) di = diam; else { di = dist * (segments / 500.0); di = (di * di * 3); } mi->polygon_count += tube (ox, oy, oz, x, y, z, di, dist/3, faces, True, wire, wire); } ox = x; oy = y; oz = z; } } /* Window management, etc */ ENTRYPOINT void reshape_knot (ModeInfo *mi, int width, int height) { GLfloat h = (GLfloat) height / (GLfloat) width; glViewport (0, 0, (GLint) width, (GLint) height); glMatrixMode(GL_PROJECTION); glLoadIdentity(); gluPerspective (30.0, 1/h, 1.0, 100.0); glMatrixMode(GL_MODELVIEW); glLoadIdentity(); gluLookAt( 0.0, 0.0, 30.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0); # ifdef HAVE_MOBILE /* Keep it the same relative size when rotated. */ { int o = (int) current_device_rotation(); if (o != 0 && o != 180 && o != -180) glScalef (1/h, 1/h, 1/h); } # endif glClear(GL_COLOR_BUFFER_BIT); } static void new_knot (ModeInfo *mi) { knot_configuration *bp = &bps[MI_SCREEN(mi)]; int i; bp->clear_p = !!(random() % 15); bp->ncolors = 128; bp->colors = (XColor *) calloc(bp->ncolors, sizeof(XColor)); make_smooth_colormap (0, 0, 0, bp->colors, &bp->ncolors, False, 0, False); for (i = 0; i < bp->ncolors; i++) { /* make colors twice as bright */ bp->colors[i].red = (bp->colors[i].red >> 2) + 0x7FFF; bp->colors[i].green = (bp->colors[i].green >> 2) + 0x7FFF; bp->colors[i].blue = (bp->colors[i].blue >> 2) + 0x7FFF; } glNewList (bp->knot_list, GL_COMPILE); make_knot (mi); glEndList (); } ENTRYPOINT Bool knot_handle_event (ModeInfo *mi, XEvent *event) { knot_configuration *bp = &bps[MI_SCREEN(mi)]; if (gltrackball_event_handler (event, bp->trackball, MI_WIDTH (mi), MI_HEIGHT (mi), &bp->button_down_p)) return True; else if (screenhack_event_helper (MI_DISPLAY(mi), MI_WINDOW(mi), event)) { bp->last_time = 1; return True; } return False; } ENTRYPOINT void init_knot (ModeInfo *mi) { knot_configuration *bp; int wire = MI_IS_WIREFRAME(mi); if (!bps) { bps = (knot_configuration *) calloc (MI_NUM_SCREENS(mi), sizeof (knot_configuration)); if (!bps) { fprintf(stderr, "%s: out of memory\n", progname); exit(1); } } bp = &bps[MI_SCREEN(mi)]; bp->glx_context = init_GL(mi); if (thickness <= 0) thickness = 0.001; else if (thickness > 1) thickness = 1; if (segments < 10) segments = 10; reshape_knot (mi, MI_WIDTH(mi), MI_HEIGHT(mi)); if (!wire) { GLfloat pos[4] = {1.0, 1.0, 1.0, 0.0}; GLfloat amb[4] = {0.0, 0.0, 0.0, 1.0}; GLfloat dif[4] = {1.0, 1.0, 1.0, 1.0}; GLfloat spc[4] = {0.0, 1.0, 1.0, 1.0}; glEnable(GL_LIGHTING); glEnable(GL_LIGHT0); glEnable(GL_DEPTH_TEST); glEnable(GL_CULL_FACE); glLightfv(GL_LIGHT0, GL_POSITION, pos); glLightfv(GL_LIGHT0, GL_AMBIENT, amb); glLightfv(GL_LIGHT0, GL_DIFFUSE, dif); glLightfv(GL_LIGHT0, GL_SPECULAR, spc); } { Bool spinx=False, spiny=False, spinz=False; double spin_speed = 2.0; double wander_speed = 0.05; double spin_accel = 0.2; char *s = do_spin; while (*s) { if (*s == 'x' || *s == 'X') spinx = True; else if (*s == 'y' || *s == 'Y') spiny = True; else if (*s == 'z' || *s == 'Z') spinz = True; else if (*s == '0') ; else { fprintf (stderr, "%s: spin must contain only the characters X, Y, or Z (not \"%s\")\n", progname, do_spin); exit (1); } s++; } bp->rot = make_rotator (spinx ? spin_speed : 0, spiny ? spin_speed : 0, spinz ? spin_speed : 0, spin_accel, do_wander ? wander_speed : 0, (spinx && spiny && spinz)); bp->trackball = gltrackball_init (True); } bp->knot_list = glGenLists (1); new_knot(mi); glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); } ENTRYPOINT void draw_knot (ModeInfo *mi) { knot_configuration *bp = &bps[MI_SCREEN(mi)]; Display *dpy = MI_DISPLAY(mi); Window window = MI_WINDOW(mi); GLfloat bcolor[4] = {0.0, 0.0, 0.0, 1.0}; GLfloat bspec[4] = {1.0, 1.0, 1.0, 1.0}; GLfloat bshiny = 128.0; if (!bp->glx_context) return; glXMakeCurrent(MI_DISPLAY(mi), MI_WINDOW(mi), *(bp->glx_context)); if (bp->mode == 0) { if (bp->draw_tick++ > 10) { time_t now = time((time_t *) 0); if (bp->last_time == 0) bp->last_time = now; bp->draw_tick = 0; if (!bp->button_down_p && now - bp->last_time >= duration) { bp->mode = 1; /* go out */ bp->mode_tick = 10 / speed; bp->last_time = now; } } } else if (bp->mode == 1) /* out */ { if (--bp->mode_tick <= 0) { new_knot (mi); bp->mode_tick = 10 / speed; bp->mode = 2; /* go in */ } } else if (bp->mode == 2) /* in */ { if (--bp->mode_tick <= 0) bp->mode = 0; /* normal */ } else abort(); glShadeModel(GL_SMOOTH); glEnable(GL_DEPTH_TEST); glEnable(GL_NORMALIZE); glEnable(GL_CULL_FACE); if (bp->clear_p) glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glPushMatrix (); { double x, y, z; get_position (bp->rot, &x, &y, &z, !bp->button_down_p); glTranslatef((x - 0.5) * 8, (y - 0.5) * 8, (z - 0.5) * 15); gltrackball_rotate (bp->trackball); get_rotation (bp->rot, &x, &y, &z, !bp->button_down_p); glRotatef (x * 360, 1.0, 0.0, 0.0); glRotatef (y * 360, 0.0, 1.0, 0.0); glRotatef (z * 360, 0.0, 0.0, 1.0); } bcolor[0] = bp->colors[bp->ccolor].red / 65536.0; bcolor[1] = bp->colors[bp->ccolor].green / 65536.0; bcolor[2] = bp->colors[bp->ccolor].blue / 65536.0; bp->ccolor++; if (bp->ccolor >= bp->ncolors) bp->ccolor = 0; glMaterialfv (GL_FRONT, GL_SPECULAR, bspec); glMateriali (GL_FRONT, GL_SHININESS, bshiny); glMaterialfv (GL_FRONT, GL_AMBIENT_AND_DIFFUSE, bcolor); glScalef(0.25, 0.25, 0.25); if (bp->mode != 0) { GLfloat s = (bp->mode == 1 ? bp->mode_tick / (10 / speed) : ((10 / speed) - bp->mode_tick + 1) / (10 / speed)); glScalef (s, s, s); } glCallList (bp->knot_list); glPopMatrix (); if (mi->fps_p) do_fps (mi); glFinish(); glXSwapBuffers(dpy, window); } XSCREENSAVER_MODULE_2 ("GLKnots", glknots, knot) #endif /* USE_GL */ xscreensaver-5.36/hacks/glx/blocktube.c000644 000767 000024 00000032145 12710313335 020142 0ustar00jwzstaff000000 000000 /* blocktube, Copyright (c) 2003 Lars Damerow * * Based on Jamie Zawinski's original dangerball code. * * 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. */ #define DEBUG 1 #define DEFAULTS "*delay: 40000 \n" \ "*wireframe: False \n" \ "*showFPS: False \n" \ "*suppressRotationAnimation: True\n" \ # define refresh_blocktube 0 # define blocktube_handle_event 0 #undef countof #define countof(x) (sizeof((x))/sizeof((*x))) #include "xlockmore.h" #include "colors.h" #include #include #ifdef USE_GL /* whole file */ #define DEF_HOLDTIME "1000" #define DEF_CHANGETIME "200" #define MAX_ENTITIES 1000 #define DEF_TEXTURE "True" #define DEF_FOG "True" #if defined(USE_XPM) || defined(USE_XPMINC) || defined(STANDALONE) /* USE_XPM & USE_XPMINC in xlock mode ; HAVE_XPM in xscreensaver mode */ #include "xpm-ximage.h" #define I_HAVE_XPM #include "../images/blocktube.xpm" #endif /* HAVE_XPM */ typedef struct { int id, r, g, b; GLfloat tVal; int age; int lifetime; GLfloat position[3]; GLfloat angle; GLfloat angularVelocity; } entity; typedef struct { GLXContext *glx_context; GLuint block_dlist; int nextID; entity entities[MAX_ENTITIES]; float targetR, targetG, targetB, currentR, currentG, currentB, deltaR, deltaG, deltaB; int counter; int changing; GLfloat zoom; GLfloat tilt; GLuint envTexture; XImage *texti; GLfloat tunnelLength; GLfloat tunnelWidth; int polys; } blocktube_configuration; static blocktube_configuration *lps = NULL; static GLint holdtime; static GLint changetime; static int do_texture; static int do_fog; static XrmOptionDescRec opts[] = { { "-holdtime", ".holdtime", XrmoptionSepArg, 0 }, { "-changetime", ".changetime", XrmoptionSepArg, 0 }, {"-texture", ".texture", XrmoptionNoArg, "True" }, {"+texture", ".texture", XrmoptionNoArg, "False" }, {"-fog", ".fog", XrmoptionNoArg, "True" }, {"+fog", ".fog", XrmoptionNoArg, "False" }, }; static argtype vars[] = { {&holdtime, "holdtime", "Hold Time", DEF_HOLDTIME, t_Int}, {&changetime, "changetime", "Change Time", DEF_CHANGETIME, \ t_Int}, {&do_texture, "texture", "Texture", DEF_TEXTURE, t_Bool}, {&do_fog, "fog", "Fog", DEF_FOG, t_Bool}, }; static OptionStruct desc[] = { {"-holdtime", "how long to stay on the same color"}, {"-changetime", "how long it takes to fade to a new color"}, }; ENTRYPOINT ModeSpecOpt blocktube_opts = {countof(opts), opts, countof(vars), vars, desc}; #ifdef USE_MODULES ModStruct blocktube_description = {"blocktube", "init_blocktube", "draw_blocktube", "release_blocktube", "draw_blocktube", "init_blocktube", (char *)NULL, &blocktube_opts, 40000, 30, 1, 1, 64, 1.0, "", "A shifting tunnel of reflective blocks", 0, NULL}; #endif /* USE_MODULES */ #if defined( I_HAVE_XPM ) static Bool LoadGLTextures(ModeInfo *mi) { blocktube_configuration *lp = &lps[MI_SCREEN(mi)]; Bool status; status = True; glGenTextures(1, &lp->envTexture); glBindTexture(GL_TEXTURE_2D, lp->envTexture); lp->texti = xpm_to_ximage(MI_DISPLAY(mi), MI_VISUAL(mi), MI_COLORMAP(mi), blocktube_xpm); if (!lp->texti) { status = False; } else { glPixelStorei(GL_UNPACK_ALIGNMENT,1); glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, lp->texti->width, lp->texti->height, 0, GL_RGBA, GL_UNSIGNED_INT_8_8_8_8_REV, lp->texti->data); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); # ifndef HAVE_JWZGLES /* #### Sphere maps unimplemented */ glTexGeni(GL_S, GL_TEXTURE_GEN_MODE, GL_SPHERE_MAP); glTexGeni(GL_T, GL_TEXTURE_GEN_MODE, GL_SPHERE_MAP); # endif } return status; } #endif static void newTargetColor(blocktube_configuration *lp) { int luminance = 0; while (luminance <= 150) { lp->targetR = random() % 256; lp->targetG = random() % 256; lp->targetB = random() % 256; lp->deltaR = (lp->targetR - lp->currentR) / changetime; lp->deltaG = (lp->targetG - lp->currentG) / changetime; lp->deltaB = (lp->targetB - lp->currentB) / changetime; luminance = 0.3 * lp->targetR + 0.59 * lp->targetG + 0.11 * lp->targetB; } } static void randomize_entity (blocktube_configuration *lp, entity *ent) { ent->id = lp->nextID++; ent->tVal = 1 - ((float)random() / RAND_MAX / 1.5); ent->age = 0; ent->lifetime = 100; ent->angle = random() % 360; ent->angularVelocity = 0.5-((float)(random()) / RAND_MAX); ent->position[0] = (float)(random()) / RAND_MAX + lp->tunnelWidth; ent->position[1] = (float)(random()) / RAND_MAX * 2; ent->position[2] = -(float)(random()) / RAND_MAX * lp->tunnelLength; } static void entityTick(blocktube_configuration *lp, entity *ent) { ent->angle += ent->angularVelocity; ent->position[2] += 0.1; if (ent->position[2] > lp->zoom) { ent->position[2] = -lp->tunnelLength + ((float)(random()) / RAND_MAX) * 20; } ent->age += 0.1; } static void tick(blocktube_configuration *lp) { lp->counter--; if (!lp->counter) { if (!lp->changing) { newTargetColor(lp); lp->counter = changetime; } else { lp->counter = holdtime; } lp->changing = (!lp->changing); } else { if (lp->changing) { lp->currentR += lp->deltaR; lp->currentG += lp->deltaG; lp->currentB += lp->deltaB; } } } static int cube_vertices(float x, float y, float z, int wire); ENTRYPOINT void reshape_blocktube (ModeInfo *mi, int width, int height); ENTRYPOINT void init_blocktube (ModeInfo *mi) { int loop; GLfloat fogColor[4] = {0,0,0,1}; blocktube_configuration *lp; int wire = MI_IS_WIREFRAME(mi); if (!lps) { lps = (blocktube_configuration *) calloc (MI_NUM_SCREENS(mi), sizeof (blocktube_configuration)); if (!lps) { fprintf(stderr, "%s: out of memory\n", progname); exit(1); } } lp = &lps[MI_SCREEN(mi)]; lp->glx_context = init_GL(mi); lp->zoom = 30; lp->tilt = 4.5; lp->tunnelLength = 200; lp->tunnelWidth = 5; if (wire) { do_fog = False; do_texture = False; glLineWidth(2); } lp->block_dlist = glGenLists (1); glNewList (lp->block_dlist, GL_COMPILE); lp->polys = cube_vertices(0.15, 1.2, 5.25, wire); glEndList (); #if defined( I_HAVE_XPM ) if (do_texture) { if (!LoadGLTextures(mi)) { fprintf(stderr, "%s: can't load textures!\n", progname); exit(1); } glEnable(GL_TEXTURE_2D); } #endif /* kick on the fog machine */ if (do_fog) { glEnable(GL_FOG); glFogi(GL_FOG_MODE, GL_LINEAR); glHint(GL_FOG_HINT, GL_NICEST); glFogf(GL_FOG_START, 0); glFogf(GL_FOG_END, lp->tunnelLength/1.8); glFogfv(GL_FOG_COLOR, fogColor); glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST); } glShadeModel(GL_SMOOTH); glEnable(GL_DEPTH_TEST); glEnable(GL_CULL_FACE); glClearDepth(1.0f); if (!do_texture && !wire) { /* If there is no texture, the boxes don't show up without a light. Though I don't understand why all the blocks come out gray. */ GLfloat pos[4] = {0.0, 1.0, 1.0, 0.0}; GLfloat amb[4] = {0.2, 0.2, 0.2, 1.0}; GLfloat dif[4] = {1.0, 1.0, 1.0, 1.0}; GLfloat spc[4] = {1.0, 1.0, 1.0, 1.0}; glLightfv(GL_LIGHT0, GL_POSITION, pos); glLightfv(GL_LIGHT0, GL_AMBIENT, amb); glLightfv(GL_LIGHT0, GL_DIFFUSE, dif); glLightfv(GL_LIGHT0, GL_SPECULAR, spc); glEnable(GL_LIGHTING); glEnable(GL_LIGHT0); } lp->counter = holdtime; lp->currentR = random() % 256; lp->currentG = random() % 256; lp->currentB = random() % 256; newTargetColor(lp); for (loop = 0; loop < MAX_ENTITIES; loop++) { randomize_entity(lp, &lp->entities[loop]); } reshape_blocktube(mi, MI_WIDTH(mi), MI_HEIGHT(mi)); glFlush(); } ENTRYPOINT void release_blocktube (ModeInfo *mi) { if (lps) { int screen; for (screen = 0; screen < MI_NUM_SCREENS(mi); screen++) { blocktube_configuration *lp = &lps[screen]; # if defined ( I_HAVE_XPM ) if (lp->envTexture) glDeleteTextures(1, &lp->envTexture); if (lp->texti) XDestroyImage(lp->texti); # endif } free (lps); lps = 0; } FreeAllGL(mi); } ENTRYPOINT void reshape_blocktube (ModeInfo *mi, int width, int height) { GLfloat h = (GLfloat) height / (GLfloat) width; glViewport(0, 0, (GLint) width, (GLint) height); glMatrixMode(GL_PROJECTION); glLoadIdentity(); gluPerspective(45.0, 1/h, 1.0, 100.0); glMatrixMode(GL_MODELVIEW); # ifdef HAVE_MOBILE /* Keep it the same relative size when rotated. */ { int o = (int) current_device_rotation(); if (o != 0 && o != 180 && o != -180) glScalef (1/h, 1/h, 1/h); } # endif } static int cube_vertices(float x, float y, float z, int wire) { int polygon_count = 0; float x2, y2, z2, nv = 0.7; x2 = x/2; y2 = y/2; z2 = z/2; glFrontFace(GL_CW); glNormal3f(0, 0, nv); glBegin (wire ? GL_LINE_LOOP : GL_QUADS); glTexCoord2f(0.0, 0.0); glVertex3f(-x2, y2, z2); glTexCoord2f(1.0, 0.0); glVertex3f( x2, y2, z2); glTexCoord2f(1.0, 1.0); glVertex3f( x2, -y2, z2); glTexCoord2f(0.0, 1.0); glVertex3f(-x2, -y2, z2); polygon_count++; glEnd(); glNormal3f(0, 0, -nv); glBegin (wire ? GL_LINE_LOOP : GL_QUADS); glTexCoord2f(1.0, 0.0); glVertex3f(-x2, -y2, -z2); glTexCoord2f(1.0, 1.0); glVertex3f( x2, -y2, -z2); glTexCoord2f(0.0, 1.0); glVertex3f( x2, y2, -z2); glTexCoord2f(0.0, 0.0); glVertex3f(-x2, y2, -z2); polygon_count++; glEnd(); glNormal3f(0, nv, 0); glBegin (wire ? GL_LINE_LOOP : GL_QUADS); glTexCoord2f(0.0, 1.0); glVertex3f(-x2, y2, -z2); glTexCoord2f(0.0, 0.0); glVertex3f( x2, y2, -z2); glTexCoord2f(1.0, 0.0); glVertex3f( x2, y2, z2); glTexCoord2f(1.0, 1.0); glVertex3f(-x2, y2, z2); polygon_count++; glEnd(); glNormal3f(0, -nv, 0); glBegin (wire ? GL_LINE_LOOP : GL_QUADS); glTexCoord2f(1.0, 1.0); glVertex3f(-x2, -y2, -z2); glTexCoord2f(0.0, 1.0); glVertex3f(-x2, -y2, z2); glTexCoord2f(0.0, 0.0); glVertex3f( x2, -y2, z2); glTexCoord2f(1.0, 0.0); glVertex3f( x2, -y2, -z2); polygon_count++; glEnd(); if (wire) return polygon_count; glNormal3f(nv, 0, 0); glBegin (wire ? GL_LINE_LOOP : GL_QUADS); glTexCoord2f(1.0, 0.0); glVertex3f( x2, -y2, -z2); glTexCoord2f(1.0, 1.0); glVertex3f( x2, -y2, z2); glTexCoord2f(0.0, 1.0); glVertex3f( x2, y2, z2); glTexCoord2f(0.0, 0.0); glVertex3f( x2, y2, -z2); polygon_count++; glEnd(); glNormal3f(-nv, 0, 0); glBegin (wire ? GL_LINE_LOOP : GL_QUADS); glTexCoord2f(0.0, 0.0); glVertex3f(-x2, -y2, -z2); glTexCoord2f(1.0, 0.0); glVertex3f(-x2, y2, -z2); glTexCoord2f(1.0, 1.0); glVertex3f(-x2, y2, z2); glTexCoord2f(0.0, 1.0); glVertex3f(-x2, -y2, z2); polygon_count++; glEnd(); return polygon_count; } static void draw_block(ModeInfo *mi, entity *ent) { blocktube_configuration *lp = &lps[MI_SCREEN(mi)]; glCallList (lp->block_dlist); mi->polygon_count += lp->polys; } ENTRYPOINT void draw_blocktube (ModeInfo *mi) { blocktube_configuration *lp = &lps[MI_SCREEN(mi)]; Display *dpy = MI_DISPLAY(mi); Window window = MI_WINDOW(mi); entity *cEnt = NULL; int loop = 0; if (!lp->glx_context) return; mi->polygon_count = 0; glXMakeCurrent(MI_DISPLAY(mi), MI_WINDOW(mi), *(lp->glx_context)); glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); if (do_texture) { glEnable(GL_TEXTURE_GEN_S); glEnable(GL_TEXTURE_GEN_T); glBindTexture(GL_TEXTURE_2D, lp->envTexture); } for (loop = 0; loop < MAX_ENTITIES; loop++) { cEnt = &lp->entities[loop]; glLoadIdentity(); glTranslatef(0.0f, 0.0f, lp->zoom); glRotatef(lp->tilt, 1.0f, 0.0f, 0.0f); glRotatef(cEnt->angle, 0.0f, 0.0f, 1.0f); glTranslatef(cEnt->position[0], cEnt->position[1], cEnt->position[2]); glColor4ub((int)(lp->currentR * cEnt->tVal), (int)(lp->currentG * cEnt->tVal), (int)(lp->currentB * cEnt->tVal), 255); draw_block(mi, cEnt); entityTick(lp, cEnt); } tick(lp); if (mi->fps_p) do_fps (mi); glFinish(); glXSwapBuffers(dpy, window); } XSCREENSAVER_MODULE ("BlockTube", blocktube) #endif /* USE_GL */ xscreensaver-5.36/hacks/glx/flipflop.c000644 000767 000024 00000071710 12710313201 017774 0ustar00jwzstaff000000 000000 /* flipflop, Copyright (c) 2003 Kevin Ogden * (c) 2006 Sergio Gutiérrez "Sergut" * (c) 2008 Andrew Galante * * 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. * * * 2003 Kevin Odgen First version * 2006 Sergio Gutiérrez "Sergut" Made several parameters dynamic and selectable * from the command line: size of the board, * rotation speed and number of free squares; also * added the "sticks" mode. * 2008 Andrew Galante Added -textured option: textures the board with * an image which gets scrambled as the tiles move * */ #define DEF_MODE "tiles" /* Default mode (options: "tiles", "sticks") */ #define DEF_SIZEX "9" /* Default width of the board */ #define DEF_SIZEY "9" /* Default length of the board */ #define DEF_BOARD_SIZE "0" /* "0" means "no value selected by user". It is changed */ #define DEF_NUMSQUARES "0" /* in function init_flipflop() to its correct value (that */ #define DEF_FREESQUARES "0" /* is a function of the size of the board and the mode)*/ #define DEF_SPIN "0.1" /* Default angular velocity: PI/10 rads/s */ #define DEF_TEXTURED "False" /* Default: do not grab an image for texturing */ #define DEF_STICK_THICK 54 /* Thickness for the sticks mode (over 100) */ #define DEF_STICK_RATIO 80 /* Ratio of sticks/total squares (over 100) */ #define DEF_TILE_THICK 4 /* Thickness for the tiles mode (over 100) */ #define DEF_TILE_RATIO 95 /* Ratio of tiles/total squares (over 100) */ #ifdef STANDALONE #define DEFAULTS "*delay: 20000 \n" \ "*showFPS: False \n" \ "*wireframe: False \n" # define refresh_flipflop 0 # include "xlockmore.h" #else # include "xlock.h" #endif /* STANDALONE */ #ifdef USE_GL #include "gltrackball.h" #undef countof #define countof(x) (sizeof((x))/sizeof((*x))) static XrmOptionDescRec opts[] = { {"-sticks", ".mode", XrmoptionNoArg, "sticks"}, {"-tiles", ".mode", XrmoptionNoArg, "tiles" }, {"-mode", ".mode", XrmoptionSepArg, 0 }, {"-size", ".size", XrmoptionSepArg, 0 }, {"-size-x", ".sizex", XrmoptionSepArg, 0 }, {"-size-y", ".sizey", XrmoptionSepArg, 0 }, {"-count", ".numsquares", XrmoptionSepArg, 0 }, {"-free", ".freesquares", XrmoptionSepArg, 0 }, {"-spin", ".spin", XrmoptionSepArg, 0 }, {"-texture", ".textured", XrmoptionNoArg, "True" }, {"+texture", ".textured", XrmoptionNoArg, "False" }, }; static int wire, clearbits; static int board_x_size, board_y_size, board_avg_size; static int numsquares, freesquares; static float half_thick; static float spin; static char* flipflopmode_str="tiles"; static int textured; static argtype vars[] = { { &flipflopmode_str, "mode", "Mode", DEF_MODE, t_String}, { &board_avg_size, "size", "Integer", DEF_BOARD_SIZE, t_Int}, { &board_x_size, "sizex", "Integer", DEF_SIZEX, t_Int}, { &board_y_size, "sizey", "Integer", DEF_SIZEY, t_Int}, { &numsquares, "numsquares", "Integer", DEF_NUMSQUARES, t_Int}, { &freesquares, "freesquares", "Integer", DEF_NUMSQUARES, t_Int}, { &spin, "spin", "Float", DEF_SPIN, t_Float}, { &textured, "textured", "Bool", DEF_TEXTURED, t_Bool}, }; ENTRYPOINT ModeSpecOpt flipflop_opts = {countof(opts), opts, countof(vars), vars, NULL}; #ifdef USE_MODULES ModStruct flipflop_description = {"flipflop", "init_flipflop", "draw_flipflop", "release_flipflop", "draw_flipflop", "init_flipflop", NULL, &flipflop_opts, 1000, 1, 2, 1, 4, 1.0, "", "Flipflop", 0, NULL}; #endif /* USE_MODULES */ typedef struct { /* array specifying which squares are where (to avoid collisions) */ /* -1 means empty otherwise integer represents square index 0 - n-1 */ /* occupied[x*board_y_size+y] is the tile [x][y] (i.e. that starts at column x and row y)*/ int *occupied; /* size: size_x * size_y */ /* an array of xpositions of the squares */ int *xpos; /* size: numsquares */ /* array of y positions of the squares */ int *ypos; /* size: numsquares */ /* integer representing the direction of movement of a square */ int *direction; /* 0 not, 1 x+, 2 y+, 3 x-, 4 y-*/ /* size: numsquares */ /* angle of moving square (during a flip) */ float *angle; /* size: numsquares */ /* array of colors for a square (RGB) */ /* eg. color[ 3*3 + 0 ] is the red component of square 3 */ /* eg. color[ 4*3 + 1 ] is the green component of square 4 */ /* eg. color[ 5*3 + 2 ] is the blue component of square 5 */ /* ^-- n is the number of square */ float *color; /* size: numsquares * 3 */ /* array of texcoords for each square */ /* tex[ n*4 + 0 ] is x texture coordinate of square n's left side */ /* tex[ n*4 + 1 ] is y texture coordinate of square n's top side */ /* tex[ n*4 + 2 ] is x texture coordinate of square n's right side */ /* tex[ n*4 + 3 ] is y texture coordinate of square n's bottom side */ float *tex; /* size: numsquares * 4 */ } randsheet; typedef struct { GLXContext *glx_context; Window window; trackball_state *trackball; Bool button_down_p; randsheet *sheet; float theta; /* angle of rotation of the board */ float flipspeed; /* amount of flip; 1 is a entire flip */ float reldist; /* relative distace of camera from center */ float energy; /* likelyhood that a square will attempt to move */ /* texture rectangle */ float tex_x; float tex_y; float tex_width; float tex_height; /* id of texture in use */ GLuint texid; Bool mipmap; Bool got_texture; GLfloat anisotropic; } Flipflopcreen; static Flipflopcreen *qs = NULL; #include "grab-ximage.h" static void randsheet_create( randsheet *rs ); static void randsheet_initialize( randsheet *rs ); static void randsheet_free( randsheet *rs ); static int randsheet_new_move( randsheet* rs ); static void randsheet_move( randsheet *rs, float rot ); static int randsheet_draw( randsheet *rs ); static void setup_lights(void); static int drawBoard(Flipflopcreen *); static int display(ModeInfo *mi); static int draw_sheet(float *tex); /* configure lighting */ static void setup_lights(void) { /* GLfloat position0[] = { board_avg_size*0.5, board_avg_size*0.1, board_avg_size*0.5, 1.0 }; */ /* GLfloat position0[] = { -board_avg_size*0.5, 0.2*board_avg_size, -board_avg_size*0.5, 1.0 }; */ GLfloat position0[4]; position0[0] = 0; position0[1] = board_avg_size*0.3; position0[2] = 0; position0[3] = 1; if (wire) return; glEnable(GL_LIGHTING); glLightfv(GL_LIGHT0, GL_POSITION, position0); glEnable(GL_LIGHT0); } static void get_texture(ModeInfo *); ENTRYPOINT Bool flipflop_handle_event (ModeInfo *mi, XEvent *event) { Flipflopcreen *c = &qs[MI_SCREEN(mi)]; if (gltrackball_event_handler (event, c->trackball, MI_WIDTH (mi), MI_HEIGHT (mi), &c->button_down_p)) return True; else if (screenhack_event_helper (MI_DISPLAY(mi), MI_WINDOW(mi), event)) { if (!textured || c->got_texture) { textured = 1; c->got_texture = False; get_texture (mi); return True; } } return False; } /* draw board */ static int drawBoard(Flipflopcreen *c) { int i; for( i=0; i < (c->energy) ; i++ ) { randsheet_new_move( c->sheet ); } randsheet_move( c->sheet, c->flipspeed * 3.14159 ); return randsheet_draw( c->sheet ); } static int display(ModeInfo *mi) { Flipflopcreen *c = &qs[MI_SCREEN(mi)]; GLfloat amb[] = { 0.8, 0.8, 0.8, 1.0 }; int polys = 0; glClear(clearbits); glMatrixMode(GL_MODELVIEW); glLoadIdentity(); glLightf(GL_LIGHT0, GL_CONSTANT_ATTENUATION, 1.2); glLightf(GL_LIGHT0, GL_LINEAR_ATTENUATION, 0.15/board_avg_size ); glLightf(GL_LIGHT0, GL_QUADRATIC_ATTENUATION, 0.15/board_avg_size ); glLightfv(GL_LIGHT0, GL_AMBIENT, amb); glRotatef(current_device_rotation(), 0, 0, 1); /** setup perspectif */ glTranslatef(0.0, 0.0, -c->reldist*board_avg_size); glRotatef(22.5, 1.0, 0.0, 0.0); gltrackball_rotate (c->trackball); 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 */ /* set texture */ if(textured) glBindTexture(GL_TEXTURE_2D, c->texid); # ifdef HAVE_MOBILE /* Keep it the same relative size when rotated. */ { GLfloat h = MI_HEIGHT(mi) / (GLfloat) MI_WIDTH(mi); int o = (int) current_device_rotation(); if (o != 0 && o != 180 && o != -180) glScalef (1/h, 1/h, 1/h); } # endif polys = drawBoard(c); if (!c->button_down_p) { c->theta += .01 * spin; } return polys; } ENTRYPOINT void reshape_flipflop(ModeInfo *mi, int width, int height) { GLfloat h = (GLfloat) height / (GLfloat) width; glViewport(0,0, width, height); glMatrixMode(GL_PROJECTION); glLoadIdentity(); gluPerspective(45, 1/h, 1.0, 300.0); glMatrixMode(GL_MODELVIEW); } static void image_loaded_cb (const char *filename, XRectangle *geometry, int image_width, int image_height, int texture_width, int texture_height, void *closure) { Flipflopcreen *c = (Flipflopcreen *)closure; int i, j; int index = 0; randsheet *rs = c->sheet; c->tex_x = (float)geometry->x / (float)texture_width; c->tex_y = (float)geometry->y / (float)texture_height; c->tex_width = (float)geometry->width / (float)texture_width; c->tex_height = (float)geometry->height / (float)texture_height; glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, (c->mipmap ? GL_LINEAR_MIPMAP_LINEAR : GL_LINEAR)); if(c->anisotropic >= 1) glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAX_ANISOTROPY_EXT, c->anisotropic); glEnable(GL_TEXTURE_2D); glEnable(GL_BLEND); glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); for(i = 0; i < board_x_size && index < numsquares; i++) for(j = 0; j < board_y_size && index < numsquares; j++) { /* arrange squares to form loaded image */ rs->tex[ index*4 + 0 ] = c->tex_x + c->tex_width / board_x_size * (i + 0); rs->tex[ index*4 + 1 ] = c->tex_y + c->tex_height / board_y_size * (j + 1); rs->tex[ index*4 + 2 ] = c->tex_x + c->tex_width / board_x_size * (i + 1); rs->tex[ index*4 + 3 ] = c->tex_y + c->tex_height / board_y_size * (j + 0); rs->color[ index*3 + 0 ] = 1; rs->color[ index*3 + 1 ] = 1; rs->color[ index*3 + 2 ] = 1; index++; } c->got_texture = True; } static void get_texture(ModeInfo *modeinfo) { Flipflopcreen *c = &qs[MI_SCREEN(modeinfo)]; c->got_texture = False; c->mipmap = True; load_texture_async (modeinfo->xgwa.screen, modeinfo->window, *c->glx_context, 0, 0, c->mipmap, c->texid, image_loaded_cb, c); } ENTRYPOINT void init_flipflop(ModeInfo *mi) { int screen; Flipflopcreen *c; if (MI_IS_WIREFRAME(mi)) textured = 0; /* Set all constants to their correct values */ if (board_avg_size != 0) { /* general size specified by user */ board_x_size = board_avg_size; board_y_size = board_avg_size; } else { board_avg_size = (board_x_size + board_y_size) / 2; } if ((numsquares == 0) && (freesquares != 0)) { numsquares = board_x_size * board_y_size - freesquares; } if (strcmp(flipflopmode_str, "tiles")) { textured = 0; /* textures look dumb in stick mode */ half_thick = 1.0 * DEF_STICK_THICK / 100.0; if (numsquares == 0) { /* No value defined by user */ numsquares = board_x_size * board_y_size * DEF_STICK_RATIO / 100; } } else { half_thick = 1.0 * DEF_TILE_THICK / 100.0; if (numsquares == 0) { /* No value defined by user */ numsquares = board_x_size * board_y_size * DEF_TILE_RATIO/ 100;; } } if (board_avg_size < 2) { fprintf (stderr,"%s: the board must be at least 2x2.\n", progname); exit(1); } if ((board_x_size < 1) || (board_y_size < 1) || (numsquares < 1)) { fprintf (stderr,"%s: the number of elements ('-count') and the dimensions of the board ('-size-x', '-size-y') must be positive integers.\n", progname); exit(1); } if (board_x_size * board_y_size <= numsquares) { fprintf (stderr,"%s: the number of elements ('-count') that you specified is too big \n for the dimensions of the board ('-size-x', '-size-y'). Nothing will move.\n", progname); } screen = MI_SCREEN(mi); wire = MI_IS_WIREFRAME(mi); if(!qs && !(qs = (Flipflopcreen *) calloc(MI_NUM_SCREENS(mi), sizeof(Flipflopcreen)))) return; c = &qs[screen]; c->window = MI_WINDOW(mi); c->trackball = gltrackball_init (False); c->flipspeed = 0.03; c->reldist = 1; c->energy = 40; if((c->glx_context = init_GL(mi))) reshape_flipflop(mi, MI_WIDTH(mi), MI_HEIGHT(mi)); else MI_CLEARWINDOW(mi); /* At this point, all the constants have already been set, */ /* so we can create the board */ c->sheet = (randsheet*) malloc(sizeof(randsheet)); randsheet_create( c->sheet ); clearbits = GL_COLOR_BUFFER_BIT; glColorMaterial(GL_FRONT, GL_AMBIENT_AND_DIFFUSE); glEnable(GL_COLOR_MATERIAL); setup_lights(); glEnable(GL_DEPTH_TEST); clearbits |= GL_DEPTH_BUFFER_BIT; glEnable(GL_CULL_FACE); glCullFace(GL_BACK); randsheet_initialize( c->sheet ); if( textured ){ /* check for anisotropic filtering */ if(strstr((char *)glGetString(GL_EXTENSIONS), "GL_EXT_texture_filter_anisotropic")) glGetFloatv(GL_MAX_TEXTURE_MAX_ANISOTROPY_EXT, &c->anisotropic); else c->anisotropic = 0; /* allocate a new texture and get it */ glGenTextures(1, &c->texid); get_texture(mi); } } ENTRYPOINT void draw_flipflop(ModeInfo *mi) { Flipflopcreen *c = &qs[MI_SCREEN(mi)]; Window w = MI_WINDOW(mi); Display *disp = MI_DISPLAY(mi); if(!c->glx_context || (textured && !c->got_texture)) return; glXMakeCurrent(disp, w, *(c->glx_context)); mi->polygon_count = display(mi); if(mi->fps_p){ do_fps(mi); } glFinish(); glXSwapBuffers(disp, w); } ENTRYPOINT void release_flipflop(ModeInfo *mi) { if(qs) { int screen; for (screen = 0; screen < MI_NUM_SCREENS(mi); screen++) { Flipflopcreen *c = &qs[MI_SCREEN(mi)]; if (c->glx_context) c->glx_context = 0; if (c->sheet) { randsheet_free(c->sheet); free (c->sheet); c->sheet = 0; } } free(qs); qs = 0; } FreeAllGL(mi); } /*** ADDED RANDSHEET FUNCTIONS ***/ static int draw_sheet(float *tex) { int polys = 0; glBegin( wire ? GL_LINE_LOOP : GL_QUADS ); glNormal3f( 0, -1, 0 ); glTexCoord2f(tex[0], tex[3]); glVertex3f( half_thick, -half_thick, half_thick ); glTexCoord2f(tex[2], tex[3]); glVertex3f( 1-half_thick, -half_thick, half_thick ); glTexCoord2f(tex[2], tex[1]); glVertex3f( 1-half_thick, -half_thick, 1-half_thick); glTexCoord2f(tex[0], tex[1]); glVertex3f( half_thick, -half_thick, 1-half_thick ); polys++; if (wire) { glEnd(); glBegin (GL_LINE_LOOP); } /* back */ glNormal3f( 0, 1, 0 ); glTexCoord2f(tex[0], tex[1]); glVertex3f( half_thick, half_thick, 1-half_thick ); glTexCoord2f(tex[2], tex[1]); glVertex3f( 1-half_thick, half_thick, 1-half_thick); glTexCoord2f(tex[2], tex[3]); glVertex3f( 1-half_thick, half_thick, half_thick ); glTexCoord2f(tex[0], tex[3]); glVertex3f( half_thick, half_thick, half_thick ); polys++; if (wire) { glEnd(); return polys; } /* 4 edges!!! weee.... */ glNormal3f( 0, 0, -1 ); glTexCoord2f(tex[0], tex[3]); glVertex3f( half_thick, half_thick, half_thick ); glTexCoord2f(tex[2], tex[3]); glVertex3f( 1-half_thick, half_thick, half_thick ); glTexCoord2f(tex[2], tex[3]); glVertex3f( 1-half_thick, -half_thick, half_thick ); glTexCoord2f(tex[0], tex[3]); glVertex3f( half_thick, -half_thick, half_thick ); polys++; glNormal3f( 0, 0, 1 ); glTexCoord2f(tex[0], tex[1]); glVertex3f( half_thick, half_thick, 1-half_thick ); glTexCoord2f(tex[0], tex[1]); glVertex3f( half_thick, -half_thick, 1-half_thick ); glTexCoord2f(tex[2], tex[1]); glVertex3f( 1-half_thick, -half_thick, 1-half_thick ); glTexCoord2f(tex[2], tex[1]); glVertex3f( 1-half_thick, half_thick, 1-half_thick ); polys++; glNormal3f( 1, 0, 0 ); glTexCoord2f(tex[2], tex[1]); glVertex3f( 1-half_thick, half_thick, 1-half_thick ); glTexCoord2f(tex[2], tex[1]); glVertex3f( 1-half_thick, -half_thick, 1-half_thick ); glTexCoord2f(tex[2], tex[3]); glVertex3f( 1-half_thick, -half_thick, half_thick ); glTexCoord2f(tex[2], tex[3]); glVertex3f( 1-half_thick, half_thick, half_thick ); polys++; glNormal3f( -1, 0, 0 ); glTexCoord2f(tex[0], tex[1]); glVertex3f( half_thick, half_thick, 1-half_thick ); glTexCoord2f(tex[0], tex[3]); glVertex3f( half_thick, half_thick, half_thick ); glTexCoord2f(tex[0], tex[3]); glVertex3f( half_thick, -half_thick, half_thick ); glTexCoord2f(tex[0], tex[1]); glVertex3f( half_thick, -half_thick, 1-half_thick ); polys++; glEnd(); return polys; } /* Reserve memory for the randsheet */ static void randsheet_create( randsheet *rs ) { rs -> occupied = (int*) malloc(board_x_size*board_y_size * sizeof(int)); rs -> xpos = (int*) malloc(numsquares * sizeof(int)); rs -> ypos = (int*) malloc(numsquares * sizeof(int)); rs -> direction = (int*) malloc(numsquares * sizeof(int)); rs -> angle = (float*) malloc(numsquares * sizeof(float)); rs -> color = (float*) malloc(numsquares*3 * sizeof(float)); rs -> tex = (float*) malloc(numsquares*4 * sizeof(float)); } /* Free reserved memory for the randsheet */ static void randsheet_free( randsheet *rs ) { free(rs->occupied); free(rs->xpos); free(rs->ypos); free(rs->direction); free(rs->angle); free(rs->color); free(rs->tex); } static void randsheet_initialize( randsheet *rs ) { int i, j, index; index = 0; /* put the moving sheets on the board */ for( i = 0; i < board_x_size; i++ ) { for( j = 0; j < board_y_size; j++ ) { /* initially fill up a corner with the moving squares */ if( index < numsquares ) { rs->occupied[ i * board_y_size + j ] = index; rs->xpos[ index ] = i; rs->ypos[ index ] = j; /* have the square colors start out as a pattern */ rs->color[ index*3 + 0 ] = ((i+j)%3 == 0)||((i+j+1)%3 == 0); rs->color[ index*3 + 1 ] = ((i+j+1)%3 == 0); rs->color[ index*3 + 2 ] = ((i+j+2)%3 == 0); index++; } /* leave everything else empty*/ else { rs->occupied[ i * board_y_size + j ] = -1; } } } /* initially everything is at rest */ for( i=0; idirection[ i ] = 0; rs->angle[ i ] = 0; } } /* Pick and random square and direction and try to move it. */ /* May not actually move anything, just attempt a random move. */ /* Returns true if move was sucessful. */ /* This could probably be implemented faster in a dequeue */ /* to avoid trying to move a square which is already moving */ /* but speed is most likely bottlenecked by rendering anyway... */ static int randsheet_new_move( randsheet* rs ) { int i, j; int num, dir; /* pick a random square */ num = random( ) % numsquares; i = rs->xpos[ num ]; j = rs->ypos[ num ]; /* pick a random direction */ dir = ( random( )% 4 ) + 1; if( rs->direction[ num ] == 0 ) { switch( dir ) { case 1: /* move up in x */ if( ( i + 1 ) < board_x_size ) { if( rs->occupied[ (i + 1) * board_y_size + j ] == -1 ) { rs->direction[ num ] = dir; rs->occupied[ (i + 1) * board_y_size + j ] = num; rs->occupied[ i * board_y_size + j ] = -1; return 1; } } return 0; break; case 2: /* move up in y */ if( ( j + 1 ) < board_y_size ) { if( rs->occupied[ i * board_y_size + (j + 1) ] == -1 ) { rs->direction[ num ] = dir; rs->occupied[ i * board_y_size + (j + 1) ] = num; rs->occupied[ i * board_y_size + j ] = -1; return 1; } } return 0; break; case 3: /* move down in x */ if( ( i - 1 ) >= 0 ) { if( rs->occupied[ (i - 1) * board_y_size + j ] == -1 ) { rs->direction[ num ] = dir; rs->occupied[ (i - 1) * board_y_size + j ] = num; rs->occupied[ i * board_y_size + j ] = -1; return 1; } } return 0; break; case 4: /* move down in y */ if( ( j - 1 ) >= 0 ) { if( rs->occupied[ i * board_y_size + (j - 1) ] == -1 ) { rs->direction[ num ] = dir; rs->occupied[ i * board_y_size + (j - 1) ] = num; rs->occupied[ i * board_y_size + j ] = -1; return 1; } } return 0; break; default: break; } } return 0; } /* move a single frame. */ /* Pass in the angle in rads the square rotates in a frame. */ static void randsheet_move( randsheet *rs, float rot ) { int index; float tmp; for( index = 0 ; index < numsquares; index++ ) { switch( rs->direction[ index ] ) { case 0: /* not moving */ break; case 1: /* move up in x */ if( textured && rs->angle[ index ] == 0 ) { tmp = rs->tex[ index * 4 + 0 ]; rs->tex[ index * 4 + 0 ] = rs->tex[ index * 4 + 2 ]; rs->tex[ index * 4 + 2 ] = tmp; } rs->angle[ index ] += rot; /* check to see if we have finished moving */ if( rs->angle[ index ] >= M_PI ) { rs->xpos[ index ] += 1; rs->direction[ index ] = 0; rs->angle[ index ] = 0; } break; case 2: /* move up in y */ if( textured && rs->angle[ index ] == 0 ) { tmp = rs->tex[ index * 4 + 1 ]; rs->tex[ index * 4 + 1 ] = rs->tex[ index * 4 + 3 ]; rs->tex[ index * 4 + 3 ] = tmp; } rs->angle[ index ] += rot; /* check to see if we have finished moving */ if( rs->angle[ index ] >= M_PI ) { rs->ypos[ index ] += 1; rs->direction[ index ] = 0; rs->angle[ index ] = 0; } break; case 3: /* down in x */ rs->angle[ index ] += rot; /* check to see if we have finished moving */ if( rs->angle[ index ] >= M_PI ) { rs->xpos[ index ] -= 1; rs->direction[ index ] = 0; rs->angle[ index ] = 0; if( textured ) { tmp = rs->tex[ index * 4 + 0 ]; rs->tex[ index * 4 + 0 ] = rs->tex[ index * 4 + 2 ]; rs->tex[ index * 4 + 2 ] = tmp; } } break; case 4: /* down in y */ rs->angle[ index ] += rot; /* check to see if we have finished moving */ if( rs->angle[ index ] >= M_PI ) { rs->ypos[ index ] -= 1; rs->direction[ index ] = 0; rs->angle[ index ] = 0; if( textured ) { tmp = rs->tex[ index * 4 + 1 ]; rs->tex[ index * 4 + 1 ] = rs->tex[ index * 4 + 3 ]; rs->tex[ index * 4 + 3 ] = tmp; } } break; default: break; } } } /* draw all the moving squares */ static int randsheet_draw( randsheet *rs ) { int i, j, polys = 0; int index; /* for all moving squares ... */ for( index = 0; index < numsquares; index++ ) { /* set color */ glColor3f( rs->color[ index*3 + 0 ], rs->color[ index*3 + 1 ], rs->color[ index*3 + 2 ] ); /* find x and y position */ i = rs->xpos[ index ]; j = rs->ypos[ index ]; glPushMatrix(); switch( rs->direction[ index ] ) { case 0: /* not moving */ /* front */ glTranslatef( i, 0, j ); break; case 1: glTranslatef( i+1, 0, j ); glRotatef( 180 - rs->angle[ index ]*180/M_PI, 0, 0, 1 ); break; case 2: glTranslatef( i, 0, j+1 ); glRotatef( 180 - rs->angle[ index ]*180/M_PI, -1, 0, 0 ); break; case 3: glTranslatef( i, 0, j ); glRotatef( rs->angle[ index ]*180/M_PI, 0, 0, 1 ); break; case 4: glTranslatef( i, 0, j ); glRotatef( rs->angle[ index ]*180/M_PI, -1, 0, 0 ); break; default: break; } polys += draw_sheet( rs->tex + index*4 ); glPopMatrix(); } return polys; } /**** END RANDSHEET_BAK FUNCTIONS ***/ XSCREENSAVER_MODULE ("FlipFlop", flipflop) #endif /* USE_GL */ xscreensaver-5.36/hacks/glx/antspotlight.c000664 000767 000024 00000051176 12707240772 020731 0ustar00jwzstaff000000 000000 /* * Permission to use, copy, modify, and distribute this software and its * documentation for any purpose and without fee is hereby granted, * provided that the above copyright notice appear in all copies and that * both that copyright notice and this permission notice appear in * supporting documentation. * * This file is provided AS IS with no warranties of any kind. The author * shall have no liability with respect to the infringement of copyrights, * trade secrets or any patents by this file or any part thereof. In no * event will the author be liable for any lost revenue or profits or * other special, indirect and consequential damages. * * Copyright 2003 Blair Tennessy */ #ifdef STANDALONE #define DEFAULTS "*delay: 20000 \n" \ "*showFPS: False \n" \ "*useSHM: True \n" # define refresh_antspotlight 0 #include "xlockmore.h" #else #include "xlock.h" #endif #ifdef HAVE_JWXYZ # include "jwxyz.h" #else # include # include # include #endif #ifdef HAVE_JWZGLES # include "jwzgles.h" #endif /* HAVE_JWZGLES */ #include "sphere.h" #include "tube.h" #include "rotator.h" #include "gltrackball.h" ENTRYPOINT ModeSpecOpt antspotlight_opts = { 0, NULL, 0, NULL, NULL }; #ifdef USE_MODULES ModStruct antspotlight_description = { "antspotlight", "init_antspotlight", "draw_antspotlight", "release_antspotlight", "draw_antspotlight", "change_antspotlight", (char *) NULL, &antspotlight_opts, 1000, 1, 1, 1, 4, 1.0, "", "draws an ant scoping the screen", 0, NULL }; #endif #define Scale4Window 0.3 #define Scale4Iconic 0.4 #define sqr(A) ((A)*(A)) #ifndef Pi #define Pi M_PI #endif #include "ants.h" #include "grab-ximage.h" typedef struct { GLXContext *glx_context; rotator *rot; trackball_state *trackball; Bool button_down_p; GLfloat max_tx, max_ty; int mono, wire, ticks; GLuint screentexture; Ant *ant; double boardsize; GLfloat spot_direction[3]; int mag; Bool mipmap_p; Bool waiting_for_image_p; } antspotlightstruct; static antspotlightstruct *antspotlight = (antspotlightstruct *) NULL; #define NUM_SCENES 2 /* draw method for ant */ static Bool draw_ant(ModeInfo *mi, antspotlightstruct *mp, const GLfloat *Material, int mono, int shadow, float ant_step, Bool (*sphere)(float), Bool (*cone)(float)) { float cos1 = cos(ant_step); float cos2 = cos(ant_step + 2 * Pi / 3); float cos3 = cos(ant_step + 4 * Pi / 3); float sin1 = sin(ant_step); float sin2 = sin(ant_step + 2 * Pi / 3); float sin3 = sin(ant_step + 4 * Pi / 3); /* Apparently this is a performance killer on many systems... glEnable(GL_POLYGON_SMOOTH); */ glEnable(GL_BLEND); glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, mp->mono ? MaterialGray5 : Material); glEnable(GL_CULL_FACE); glPushMatrix(); glScalef(1, 1.3, 1); if(!((*sphere)(0.18))) return False; glScalef(1, 1 / 1.3, 1); glTranslatef(0.00, 0.30, 0.00); if(!((*sphere)(0.2))) return False; glTranslatef(-0.05, 0.17, 0.05); glRotatef(-90, 1, 0, 0); glRotatef(-25, 0, 1, 0); if(!((*cone)(0.05))) return False; glTranslatef(0.00, 0.10, 0.00); if(!((*cone)(0.05))) return False; glRotatef(25, 0, 1, 0); glRotatef(90, 1, 0, 0); glScalef(1, 1.3, 1); glTranslatef(0.15, -0.65, 0.05); if(!((*sphere)(0.25))) return False; glScalef(1, 1 / 1.3, 1); glPopMatrix(); glDisable(GL_CULL_FACE); glDisable(GL_LIGHTING); /* ANTENNAS */ glEnable(GL_LINE_SMOOTH); glEnable(GL_BLEND); glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); glBegin(GL_LINES); glColor3fv(mp->mono ? MaterialGray5 : Material); glVertex3f(0.00, 0.30, 0.00); glColor3fv(MaterialGray); glVertex3f(0.40, 0.70, 0.40); mi->polygon_count++; glColor3fv(mp->mono ? MaterialGray5 : Material); glVertex3f(0.00, 0.30, 0.00); glColor3fv(MaterialGray); glVertex3f(0.40, 0.70, -0.40); mi->polygon_count++; glEnd(); if(!shadow) { glBegin(GL_POINTS); glColor3fv(mp->mono ? MaterialGray6 : MaterialGray5); glVertex3f(0.40, 0.70, 0.40); mi->polygon_count++; glVertex3f(0.40, 0.70, -0.40); mi->polygon_count++; glEnd(); } /* LEFT-FRONT ARM */ glBegin(GL_LINE_STRIP); glColor3fv(mp->mono ? MaterialGray5 : Material); glVertex3f(0.00, 0.05, 0.18); glVertex3f(0.35 + 0.05 * cos1, 0.15, 0.25); mi->polygon_count++; glColor3fv(MaterialGray); glVertex3f(-0.20 + 0.05 * cos1, 0.25 + 0.1 * sin1, 0.45); mi->polygon_count++; glEnd(); /* LEFT-CENTER ARM */ glBegin(GL_LINE_STRIP); glColor3fv(mp->mono ? MaterialGray5 : Material); glVertex3f(0.00, 0.00, 0.18); glVertex3f(0.35 + 0.05 * cos2, 0.00, 0.25); mi->polygon_count++; glColor3fv(MaterialGray); glVertex3f(-0.20 + 0.05 * cos2, 0.00 + 0.1 * sin2, 0.45); mi->polygon_count++; glEnd(); /* LEFT-BACK ARM */ glBegin(GL_LINE_STRIP); glColor3fv(mp->mono ? MaterialGray5 : Material); glVertex3f(0.00, -0.05, 0.18); glVertex3f(0.35 + 0.05 * cos3, -0.15, 0.25); mi->polygon_count++; glColor3fv(MaterialGray); glVertex3f(-0.20 + 0.05 * cos3, -0.25 + 0.1 * sin3, 0.45); mi->polygon_count++; glEnd(); /* RIGHT-FRONT ARM */ glBegin(GL_LINE_STRIP); glColor3fv(mp->mono ? MaterialGray5 : Material); glVertex3f(0.00, 0.05, -0.18); glVertex3f(0.35 - 0.05 * sin1, 0.15, -0.25); mi->polygon_count++; glColor3fv(MaterialGray); glVertex3f(-0.20 - 0.05 * sin1, 0.25 + 0.1 * cos1, -0.45); mi->polygon_count++; glEnd(); /* RIGHT-CENTER ARM */ glBegin(GL_LINE_STRIP); glColor3fv(mp->mono ? MaterialGray5 : Material); glVertex3f(0.00, 0.00, -0.18); glVertex3f(0.35 - 0.05 * sin2, 0.00, -0.25); mi->polygon_count++; glColor3fv(MaterialGray); glVertex3f(-0.20 - 0.05 * sin2, 0.00 + 0.1 * cos2, -0.45); mi->polygon_count++; glEnd(); /* RIGHT-BACK ARM */ glBegin(GL_LINE_STRIP); glColor3fv(mp->mono ? MaterialGray5 : Material); glVertex3f(0.00, -0.05, -0.18); glVertex3f(0.35 - 0.05 * sin3, -0.15, -0.25); mi->polygon_count++; glColor3fv(MaterialGray); glVertex3f(-0.20 - 0.05 * sin3, -0.25 + 0.1 * cos3, -0.45); mi->polygon_count++; glEnd(); if(!shadow) { glBegin(GL_POINTS); glColor3fv(MaterialGray5); glVertex3f(-0.20 + 0.05 * cos1, 0.25 + 0.1 * sin1, 0.45); glVertex3f(-0.20 + 0.05 * cos2, 0.00 + 0.1 * sin2, 0.45); glVertex3f(-0.20 + 0.05 * cos3, -0.25 + 0.1 * sin3, 0.45); glVertex3f(-0.20 - 0.05 * sin1, 0.25 + 0.1 * cos1, -0.45); glVertex3f(-0.20 - 0.05 * sin2, 0.00 + 0.1 * cos2, -0.45); glVertex3f(-0.20 - 0.05 * sin3, -0.25 + 0.1 * cos3, -0.45); mi->polygon_count += 6; glEnd(); } glEnable(GL_LIGHTING); return True; } /* filled sphere */ static Bool mySphere(float radius) { #if 0 GLUquadricObj *quadObj; if((quadObj = gluNewQuadric()) == 0) return False; gluQuadricDrawStyle(quadObj, (GLenum) GLU_FILL); gluSphere(quadObj, radius, 16, 16); gluDeleteQuadric(quadObj); #else glPushMatrix(); glScalef (radius, radius, radius); glRotatef (90, 1, 0, 0); unit_sphere (16, 16, False); glPopMatrix(); #endif return True; } /* silhouette sphere */ static Bool mySphere2(float radius) { #if 0 GLUquadricObj *quadObj; if((quadObj = gluNewQuadric()) == 0) return False; gluQuadricDrawStyle(quadObj, (GLenum) GLU_LINE); gluSphere(quadObj, radius, 16, 8); gluDeleteQuadric(quadObj); #else /* #### no GLU_LINE */ glPushMatrix(); glScalef (radius, radius, radius); glRotatef (90, 1, 0, 0); unit_sphere (16, 16, True); glPopMatrix(); #endif return True; } /* no cone */ static Bool myCone2(float radius) { return True; } static void draw_board(ModeInfo *mi, antspotlightstruct *mp) { int i, j; double cutoff = Pi/3.0; double center[3]; double centertex[2]; glEnable(GL_TEXTURE_2D); glBindTexture(GL_TEXTURE_2D, mp->screentexture); glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, MaterialGray6); /* draw mesh */ /* center is roughly spotlight position */ center[0] = mp->ant->position[0];/* + cos(ant->direction); */ center[1] = 0.0; center[2] = mp->ant->position[2];/* - 0.7*sin(ant->direction);*/ centertex[0] = (mp->boardsize/2.0+center[0]) * mp->max_tx / mp->boardsize; centertex[1] = mp->max_ty - ((mp->boardsize/2.0+center[2]) * mp->max_ty / mp->boardsize); /* glPolygonMode(GL_FRONT, GL_LINE); */ /* glDisable(GL_TEXTURE_2D); */ /* the vertices determined here should correspond to the illuminated board. ideally the code adapts vertex distribution to the intensity and shape of the light. i should be finding the intersection of the cone of light and the board-plane. */ for(i = -12; i < 12; ++i) { double theta1, theta2; glBegin(GL_TRIANGLE_STRIP); glNormal3f(0.0, 1.0, 0.0); glTexCoord2f(centertex[0], centertex[1]); glVertex3f(center[0], 0.01, center[2]); /* watch those constants */ theta1 = mp->ant->direction + i*(cutoff/8); theta2 = mp->ant->direction + (i+1)*(cutoff/8); for(j = 1; j <= 64; ++j) { double point[3], tex[2]; /* double fj = pow(1.05, j) - 1.0;*/ double fj = j / 6.0; point[0] = center[0] + fj*cos(theta1); point[1] = 0.0; point[2] = center[2] - fj*sin(theta1); tex[0] = (mp->boardsize/2.0+point[0]) * mp->max_tx / mp->boardsize; tex[1] = (mp->boardsize/2.0+point[2]) * mp->max_ty / mp->boardsize; glTexCoord2f(tex[0], tex[1]); glVertex3f(point[0], point[1], point[2]); point[0] = center[0] + fj*cos(theta2); point[1] = 0.0; point[2] = center[2] - fj*sin(theta2); tex[0] = (mp->boardsize/2.0+point[0]) * mp->max_tx / mp->boardsize; tex[1] = (mp->boardsize/2.0+point[2]) * mp->max_ty / mp->boardsize; glTexCoord2f(tex[0], tex[1]); glVertex3f(point[0], point[1], point[2]); mi->polygon_count++; } glEnd(); } glDisable(GL_TEXTURE_2D); } /* return euclidean distance between two points */ static double distance(double x[3], double y[3]) { double dx = x[0] - y[0]; double dz = x[2] - y[2]; return sqrt(dx*dx + dz*dz); } /* determine a new goal */ static void find_goal(antspotlightstruct *mp) { do { mp->ant->goal[0] = random()%((int)(mp->boardsize+0.5)-2) - mp->boardsize/2.0 + 1.0; mp->ant->goal[1] = 0.0; mp->ant->goal[2] = random()%((int)(mp->boardsize+0.5)-2) - mp->boardsize/2.0 + 1.0; } while(distance(mp->ant->position, mp->ant->goal) < 2.0); } /* construct our ant */ static void build_ant(antspotlightstruct *mp) { mp->ant = (Ant *) malloc(sizeof (Ant)); mp->ant->position[0] = 0.0; mp->ant->position[1] = 0.0; mp->ant->position[2] = 0.0; mp->ant->direction = 0.0; mp->ant->velocity = 0.02; mp->ant->material = MaterialGray5; mp->ant->step = 0; find_goal(mp); } #define EPSILON 0.01 static double sign(double d) { return d < 0.0 ? -1.0 : 1.0; } static double min(double a, double b) { return a < b ? a : b; } /* static double max(double a, double b) { return a > b ? a : b; } */ /* find a new goal and reset steps */ static void reset_ant(antspotlightstruct *mp) { find_goal(mp); } /* draw ant composed of skeleton and glass */ static void show_ant(ModeInfo *mi, antspotlightstruct *mp) { glPushMatrix(); /* move into position */ glTranslatef(mp->ant->position[0], 0.33, mp->ant->position[2]); glRotatef(180.0 + mp->ant->direction*180.0/Pi, 0.0, 1.0, 0.0); glRotatef(90.0, 0.0, 0.0, 1.0); /* draw skeleton */ draw_ant(mi, mp, mp->ant->material, mp->mono, 0, mp->ant->step, mySphere2, myCone2); /* draw glass */ if(!mp->wire && !mp->mono) { glEnable(GL_BLEND); glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, MaterialGrayB); glColor4fv(MaterialGrayB); draw_ant(mi, mp, MaterialGrayB, mp->mono, 0, mp->ant->step, mySphere, myCone2); glDisable(GL_BLEND); } glPopMatrix(); } static void draw_antspotlight_strip(ModeInfo *mi) { antspotlightstruct *mp = &antspotlight[MI_SCREEN(mi)]; /* compute spotlight position and direction */ GLfloat light1_position[4]; light1_position[0] = mp->ant->position[0] + 0.7*cos(mp->ant->direction); light1_position[1] = 0.5; light1_position[2] = mp->ant->position[2] - 0.7*sin(mp->ant->direction); light1_position[3] = 1.0; mp->spot_direction[0] = cos(mp->ant->direction); mp->spot_direction[1] = -0.5; mp->spot_direction[2] = -sin(mp->ant->direction); glLightfv(GL_LIGHT2, GL_POSITION, light1_position); glLightfv(GL_LIGHT2, GL_SPOT_DIRECTION, mp->spot_direction); glEnable(GL_LIGHT2); glDisable(GL_LIGHT0); glDisable(GL_LIGHT1); /* draw board */ if(mp->wire) ; else draw_board(mi, mp); glDisable(GL_LIGHT2); glEnable(GL_LIGHT0); glEnable(GL_LIGHT1); /* now modify ant */ show_ant(mi, mp); /* near goal, bend path towards next step */ if(distance(mp->ant->position, mp->ant->goal) < 0.2) { reset_ant(mp); } if(random()%100 == 0) { reset_ant(mp); } /* move toward goal, correct ant direction if required */ else { /* difference */ double dx = mp->ant->goal[0] - mp->ant->position[0]; double dz = -(mp->ant->goal[2] - mp->ant->position[2]); double theta, ideal, dt; if(fabs(dx) > EPSILON) { theta = atan(dz/dx); if(dx < 0.0) theta += Pi; } else theta = dz > 0.0 ? (1.0/2.0)*Pi : (3.0/2.0)*Pi; if(theta < 0.0) theta += 2*Pi; ideal = theta - mp->ant->direction; if(ideal > Pi) ideal -= 2*Pi; /* compute correction */ dt = sign(ideal) * min(fabs(ideal), Pi/100.0); mp->ant->direction += dt; while(mp->ant->direction < 0.0) mp->ant->direction += 2*Pi; while(mp->ant->direction > 2*Pi) mp->ant->direction -= 2*Pi; } mp->ant->position[0] += mp->ant->velocity * cos(mp->ant->direction); mp->ant->position[2] += mp->ant->velocity * sin(-mp->ant->direction); mp->ant->step += 10*mp->ant->velocity; while(mp->ant->step > 2*Pi) mp->ant->step -= 2*Pi; } ENTRYPOINT void reshape_antspotlight(ModeInfo * mi, int width, int height) { double h = (GLfloat) height / (GLfloat) width; int size = 2; glViewport(0, 0, width, height); glMatrixMode(GL_PROJECTION); glLoadIdentity(); gluPerspective(45, 1/h, 1.0, 25.0); glMatrixMode(GL_MODELVIEW); glLineWidth(size); glPointSize(size); } /* lighting variables */ static const GLfloat front_shininess[] = {60.0}; static const GLfloat front_specular[] = {0.8, 0.8, 0.8, 1.0}; static const GLfloat ambient[] = {0.4, 0.4, 0.4, 1.0}; /*static const GLfloat ambient2[] = {0.0, 0.0, 0.0, 0.0};*/ static const GLfloat diffuse[] = {1.0, 1.0, 1.0, 1.0}; static const GLfloat position0[] = {1.0, 5.0, 1.0, 0.0}; static const GLfloat position1[] = {-1.0, -5.0, 1.0, 0.0}; /*static const GLfloat lmodel_ambient[] = {0.8, 0.8, 0.8, 1.0};*/ static const GLfloat lmodel_twoside[] = {GL_TRUE}; static const GLfloat spotlight_ambient[] = { 0.0, 0.0, 0.0, 1.0 }; static const GLfloat spotlight_diffuse[] = { 1.0, 1.0, 1.0, 1.0 }; static void pinit(void) { glClearDepth(1.0); /* setup twoside lighting */ glLightfv(GL_LIGHT0, GL_AMBIENT, ambient); glLightfv(GL_LIGHT0, GL_DIFFUSE, diffuse); glLightfv(GL_LIGHT0, GL_POSITION, position0); glLightfv(GL_LIGHT1, GL_AMBIENT, ambient); glLightfv(GL_LIGHT1, GL_DIFFUSE, diffuse); glLightfv(GL_LIGHT1, GL_POSITION, position1); glLightModelfv(GL_LIGHT_MODEL_AMBIENT, spotlight_ambient); glLightModelfv(GL_LIGHT_MODEL_TWO_SIDE, lmodel_twoside); glEnable(GL_LIGHTING); glEnable(GL_LIGHT0); glEnable(GL_LIGHT1); /* setup spotlight */ glLightfv(GL_LIGHT2, GL_AMBIENT, spotlight_ambient); glLightfv(GL_LIGHT2, GL_DIFFUSE, spotlight_diffuse); glLightf(GL_LIGHT2, GL_CONSTANT_ATTENUATION, 0.1); glLightf(GL_LIGHT2, GL_LINEAR_ATTENUATION, 0.05); glLightf(GL_LIGHT2, GL_QUADRATIC_ATTENUATION, 0.0); glLightf(GL_LIGHT2, GL_SPOT_CUTOFF, 60.0); glLightf(GL_LIGHT2, GL_SPOT_EXPONENT, 3.0); glEnable(GL_NORMALIZE); glFrontFace(GL_CCW); glCullFace(GL_BACK); /* setup material properties */ glMaterialfv(GL_FRONT_AND_BACK, GL_SHININESS, front_shininess); glMaterialfv(GL_FRONT_AND_BACK, GL_SPECULAR, front_specular); glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); glShadeModel(GL_SMOOTH); /* glShadeModel(GL_FLAT); */ glEnable(GL_DEPTH_TEST); } /* cleanup routine */ ENTRYPOINT void release_antspotlight(ModeInfo * mi) { if(antspotlight) { free((void *) antspotlight); antspotlight = (antspotlightstruct *) NULL; } FreeAllGL(mi); } #define MAX_MAGNIFICATION 10 #define max(a, b) a < b ? b : a #define min(a, b) a < b ? a : b /* event handling */ ENTRYPOINT Bool antspotlight_handle_event(ModeInfo *mi, XEvent *event) { antspotlightstruct *mp = &antspotlight[MI_SCREEN(mi)]; if (gltrackball_event_handler (event, mp->trackball, MI_WIDTH (mi), MI_HEIGHT (mi), &mp->button_down_p)) return True; if (event->xany.type == ButtonPress) { switch(event->xbutton.button) { case Button1: mp->button_down_p = True; gltrackball_start(mp->trackball, event->xbutton.x, event->xbutton.y, MI_WIDTH (mi), MI_HEIGHT (mi)); return True; case Button4: mp->mag = max(mp->mag-1, 1); return True; case Button5: mp->mag = min(mp->mag+1, MAX_MAGNIFICATION); return True; } } return False; } static void image_loaded_cb (const char *filename, XRectangle *geometry, int image_width, int image_height, int texture_width, int texture_height, void *closure) { antspotlightstruct *mp = (antspotlightstruct *) closure; mp->max_tx = (GLfloat) image_width / texture_width; mp->max_ty = (GLfloat) image_height / texture_height; glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, (mp->mipmap_p ? GL_LINEAR_MIPMAP_LINEAR : GL_LINEAR)); mp->waiting_for_image_p = False; } /* get screenshot */ static void get_snapshot(ModeInfo *modeinfo) { antspotlightstruct *mp = &antspotlight[MI_SCREEN(modeinfo)]; if (MI_IS_WIREFRAME(modeinfo)) return; mp->waiting_for_image_p = True; mp->mipmap_p = True; load_texture_async (modeinfo->xgwa.screen, modeinfo->window, *mp->glx_context, 0, 0, mp->mipmap_p, mp->screentexture, image_loaded_cb, mp); } ENTRYPOINT void init_antspotlight(ModeInfo *mi) { double rot_speed = 0.3; antspotlightstruct *mp; if(!antspotlight) { if((antspotlight = (antspotlightstruct *) calloc(MI_NUM_SCREENS(mi), sizeof (antspotlightstruct))) == NULL) return; } mp = &antspotlight[MI_SCREEN(mi)]; mp->rot = make_rotator (rot_speed, rot_speed, rot_speed, 1, 0, True); mp->trackball = gltrackball_init (False); if((mp->glx_context = init_GL(mi)) != NULL) { reshape_antspotlight(mi, MI_WIDTH(mi), MI_HEIGHT(mi)); glDrawBuffer(GL_BACK); pinit(); } else MI_CLEARWINDOW(mi); glGenTextures(1, &mp->screentexture); glBindTexture(GL_TEXTURE_2D, mp->screentexture); get_snapshot(mi); build_ant(mp); mp->mono = MI_IS_MONO(mi); mp->wire = MI_IS_WIREFRAME(mi); mp->boardsize = 8.0; mp->mag = 1; } ENTRYPOINT void draw_antspotlight(ModeInfo * mi) { antspotlightstruct *mp; Display *display = MI_DISPLAY(mi); Window window = MI_WINDOW(mi); if(!antspotlight) return; mp = &antspotlight[MI_SCREEN(mi)]; MI_IS_DRAWN(mi) = True; if(!mp->glx_context) return; mi->polygon_count = 0; /* Just keep running before the texture has come in. */ /* if (mp->waiting_for_image_p) return; */ glXMakeCurrent(display, window, *(mp->glx_context)); glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glPushMatrix(); glRotatef(current_device_rotation(), 0, 0, 1); /* position camera */ /* follow focused ant */ glTranslatef(0.0, 0.0, -6.0 - mp->mag); glRotatef(35.0, 1.0, 0.0, 0.0); gltrackball_rotate(mp->trackball); glTranslatef(-mp->ant->position[0], mp->ant->position[1], -mp->ant->position[2]); /* stable position */ /* glTranslatef(0.0, 0.0, -10.0 - mag); */ /* gltrackball_rotate(mp->trackball); */ /* glRotatef(40.0, 1.0, 0.0, 0.0); */ /* glRotatef(20.0, 0.0, 1.0, 0.0); */ draw_antspotlight_strip(mi); ++mp->ticks; glPopMatrix(); if (MI_IS_FPS(mi)) do_fps (mi); glFlush(); glXSwapBuffers(display, window); } #ifndef STANDALONE ENTRYPOINT void change_antspotlight(ModeInfo * mi) { antspotlightstruct *mp = &antspotlight[MI_SCREEN(mi)]; if (!mp->glx_context) return; glXMakeCurrent(MI_DISPLAY(mi), MI_WINDOW(mi), *(mp->glx_context)); pinit(); } #endif /* !STANDALONE */ XSCREENSAVER_MODULE ("AntSpotlight", antspotlight) xscreensaver-5.36/hacks/glx/polytopes.c000644 000767 000024 00000467216 12705616700 020247 0ustar00jwzstaff000000 000000 /* polytopes --- Shows one of the six regular polytopes rotating in 4d */ #if 0 static const char sccsid[] = "@(#)polytopes.c 1.2 05/09/28 xlockmore"; #endif /* Copyright (c) 2003-2009 Carsten Steger . */ /* * Permission to use, copy, modify, and distribute this software and its * documentation for any purpose and without fee is hereby granted, * provided that the above copyright notice appear in all copies and that * both that copyright notice and this permission notice appear in * supporting documentation. * * This file is provided AS IS with no warranties of any kind. The author * shall have no liability with respect to the infringement of copyrights, * trade secrets or any patents by this file or any part thereof. In no * event will the author be liable for any lost revenue or profits or * other special, indirect and consequential damages. * * REVISION HISTORY: * C. Steger - 03/08/10: Initial version * C. Steger - 05/09/28: Added trackball support * C. Steger - 07/01/23: Improved 4d trackball support * C. Steger - 09/08/23: Removed check-config.pl warnings */ /* * This program shows one of the six regular 4D polytopes rotating in 4D. * Written by Carsten Steger, inspired by H.S.M Coxeter's book "Regular * Polytopes", 3rd Edition, Dover Publications, Inc., 1973, and Thomas * Banchoff's book "Beyond the Third Dimension: Geometry, Computer * Graphics, and Higher Dimensions", Scientific American Library, 1990. */ #ifndef M_PI #define M_PI 3.14159265358979323846 #endif #define SQRT15OVER4 1.93649167310370844259 /* sqrt(15/4) */ #define SQRT10OVER3 1.82574185835055371152 /* sqrt(10/3) */ #define SQRT5OVER2 1.58113883008418966600 /* sqrt(5/2) */ #define SQRT5OVER6 0.91287092917527685576 /* sqrt(5/6) */ #define SQRT5OVER12 0.64549722436790281420 /* sqrt(5/12) */ #define SQRT2 1.41421356237309504880 /* sqrt(2) */ #define GOLDEN 1.61803398874989484820 /* (sqrt(5)+1)/2 */ #define GOLDENINV 0.61803398874989484820 /* (sqrt(5)-1)/2 */ #define SQRT2INV 0.70710678118654752440 /* sqrt(1/2) */ #define GOLDEN2 1.14412280563536859520 /* ((sqrt(5)+1)/2)/sqrt(2) */ #define GOLDENINV2 0.43701602444882107080 /* ((sqrt(5)-1)/2)/sqrt(2) */ #define GOLDEN22 1.85122958682191611960 /* (((sqrt(5)+1)/2)^2)/sqrt(2) */ #define GOLDENINV22 0.27009075673772645360 /* (((sqrt(5)-1)/2)^2)/sqrt(2) */ #define DISP_WIREFRAME 0 #define DISP_SURFACE 1 #define DISP_TRANSPARENT 2 #define POLYTOPE_RANDOM -1 #define POLYTOPE_5_CELL 0 #define POLYTOPE_8_CELL 1 #define POLYTOPE_16_CELL 2 #define POLYTOPE_24_CELL 3 #define POLYTOPE_120_CELL 4 #define POLYTOPE_600_CELL 5 #define POLYTOPE_LAST_CELL POLYTOPE_600_CELL #define COLORS_SINGLE 0 #define COLORS_DEPTH 1 #define DISP_3D_PERSPECTIVE 0 #define DISP_3D_ORTHOGRAPHIC 1 #define DISP_4D_PERSPECTIVE 0 #define DISP_4D_PERSPECTIVE_STR "0" #define DISP_4D_ORTHOGRAPHIC 1 #define DISP_4D_ORTHOGRAPHIC_STR "1" #define DEF_DISPLAY_MODE "transparent" #define DEF_POLYTOPE "random" #define DEF_COLORS "depth" #define DEF_PROJECTION_3D "perspective" #define DEF_PROJECTION_4D "perspective" #define DEF_SPEEDWX "1.1" #define DEF_SPEEDWY "1.3" #define DEF_SPEEDWZ "1.5" #define DEF_SPEEDXY "1.7" #define DEF_SPEEDXZ "1.9" #define DEF_SPEEDYZ "2.1" #ifdef STANDALONE # define DEFAULTS "*delay: 25000 \n" \ "*showFPS: False \n" \ "*suppressRotationAnimation: True\n" \ # define refresh_polytopes 0 # include "xlockmore.h" /* from the xscreensaver distribution */ #else /* !STANDALONE */ # include "xlock.h" /* from the xlockmore distribution */ #endif /* !STANDALONE */ #ifdef USE_GL #ifndef HAVE_JWXYZ # include #endif #include "gltrackball.h" #ifdef USE_MODULES ModStruct polytopes_description = {"polytopes", "init_polytopes", "draw_polytopes", "release_polytopes", "draw_polytopes", "change_polytopes", NULL, &polytopes_opts, 25000, 1, 1, 1, 1.0, 4, "", "Shows one of the six regular 4d polytopes rotating in 4d", 0, NULL}; #endif static char *mode; static int display_mode; static char *poly_str; static int polytope; static char *color_str; static int color_mode; static char *proj_3d; static int projection_3d; static char *proj_4d; static int projection_4d; static float speed_wx; static float speed_wy; static float speed_wz; static float speed_xy; static float speed_xz; static float speed_yz; static const float offset4d[4] = { 0.0, 0.0, 0.0, 3.0 }; static const float offset3d[4] = { 0.0, 0.0, -2.0, 0.0 }; static XrmOptionDescRec opts[] = { {"-mode", ".displayMode", XrmoptionSepArg, 0 }, {"-wireframe", ".displayMode", XrmoptionNoArg, "wireframe" }, {"-surface", ".displayMode", XrmoptionNoArg, "surface" }, {"-transparent", ".displayMode", XrmoptionNoArg, "transparent" }, {"-polytope", ".polytope", XrmoptionSepArg, 0 }, {"-random", ".polytope", XrmoptionNoArg, "random" }, {"-5-cell", ".polytope", XrmoptionNoArg, "5-cell" }, {"-8-cell", ".polytope", XrmoptionNoArg, "8-cell" }, {"-16-cell", ".polytope", XrmoptionNoArg, "16-cell" }, {"-24-cell", ".polytope", XrmoptionNoArg, "24-cell" }, {"-120-cell", ".polytope", XrmoptionNoArg, "120-cell" }, {"-600-cell", ".polytope", XrmoptionNoArg, "600-cell" }, {"-single-color", ".colors", XrmoptionNoArg, "single" }, {"-depth-colors", ".colors", XrmoptionNoArg, "depth" }, {"-perspective-3d", ".projection3d", XrmoptionNoArg, "perspective" }, {"-orthographic-3d", ".projection3d", XrmoptionNoArg, "orthographic" }, {"-perspective-4d", ".projection4d", XrmoptionNoArg, "perspective" }, {"-orthographic-4d", ".projection4d", XrmoptionNoArg, "orthographic" }, {"-speed-wx", ".speedwx", XrmoptionSepArg, 0 }, {"-speed-wy", ".speedwy", XrmoptionSepArg, 0 }, {"-speed-wz", ".speedwz", XrmoptionSepArg, 0 }, {"-speed-xy", ".speedxy", XrmoptionSepArg, 0 }, {"-speed-xz", ".speedxz", XrmoptionSepArg, 0 }, {"-speed-yz", ".speedyz", XrmoptionSepArg, 0 } }; static argtype vars[] = { { &mode, "displayMode", "DisplayMode", DEF_DISPLAY_MODE, t_String }, { &poly_str, "polytope", "Polytope", DEF_POLYTOPE, t_String }, { &color_str, "colors", "Colors", DEF_COLORS, t_String }, { &proj_3d, "projection3d", "Projection3d",DEF_PROJECTION_3D, t_String }, { &proj_4d, "projection4d", "Projection4d",DEF_PROJECTION_4D, t_String }, { &speed_wx, "speedwx", "Speedwx", DEF_SPEEDWX, t_Float}, { &speed_wy, "speedwy", "Speedwy", DEF_SPEEDWY, t_Float}, { &speed_wz, "speedwz", "Speedwz", DEF_SPEEDWZ, t_Float}, { &speed_xy, "speedxy", "Speedxy", DEF_SPEEDXY, t_Float}, { &speed_xz, "speedxz", "Speedxz", DEF_SPEEDXZ, t_Float}, { &speed_yz, "speedyz", "Speedyz", DEF_SPEEDYZ, t_Float} }; static OptionStruct desc[] = { { "-wireframe", "display the polytope as a wireframe mesh" }, { "-surface", "display the polytope as a solid surface" }, { "-transparent", "display the polytope as a transparent surface" }, { "-solid", "display the polytope as a solid object" }, { "-bands", "display the polytope as see-through bands" }, { "-twosided", "display the polytope with two colors" }, { "-colorwheel", "display the polytope with a smooth color wheel" }, { "-perspective-3d", "project the polytope perspectively from 3d to 2d" }, { "-orthographic-3d", "project the polytope orthographically from 3d to 2d"}, { "-perspective-4d", "project the polytope perspectively from 4d to 3d" }, { "-orthographic-4d", "project the polytope orthographically from 4d to 3d"}, { "-speed-wx ", "rotation speed around the wx plane" }, { "-speed-wy ", "rotation speed around the wy plane" }, { "-speed-wz ", "rotation speed around the wz plane" }, { "-speed-xy ", "rotation speed around the xy plane" }, { "-speed-xz ", "rotation speed around the xz plane" }, { "-speed-yz ", "rotation speed around the yz plane" } }; ENTRYPOINT ModeSpecOpt polytopes_opts = {sizeof opts / sizeof opts[0], opts, sizeof vars / sizeof vars[0], vars, desc}; /* 5-cell {3,3,3} */ #define NUM_VERT_5 5 #define NUM_EDGE_5 10 #define NUM_FACE_5 10 #define VERT_PER_FACE_5 3 #define MIN_EDGE_DEPTH_5 (-0.5) #define MAX_EDGE_DEPTH_5 0.75 #define MIN_FACE_DEPTH_5 (-0.5) #define MAX_FACE_DEPTH_5 (1.0/3.0) /* 8-cell {4,3,3} */ #define NUM_VERT_8 16 #define NUM_EDGE_8 32 #define NUM_FACE_8 24 #define VERT_PER_FACE_8 4 #define MIN_EDGE_DEPTH_8 (-1.0) #define MAX_EDGE_DEPTH_8 1.0 #define MIN_FACE_DEPTH_8 (-1.0) #define MAX_FACE_DEPTH_8 1.0 /* 16-cell {3,3,4} */ #define NUM_VERT_16 8 #define NUM_EDGE_16 24 #define NUM_FACE_16 32 #define VERT_PER_FACE_16 3 #define MIN_EDGE_DEPTH_16 (-1.0) #define MAX_EDGE_DEPTH_16 1.0 #define MIN_FACE_DEPTH_16 (-2.0/3.0) #define MAX_FACE_DEPTH_16 (2.0/3.0) /* 24-cell {3,4,3} */ #define NUM_VERT_24 24 #define NUM_EDGE_24 96 #define NUM_FACE_24 96 #define VERT_PER_FACE_24 3 #define MIN_EDGE_DEPTH_24 (-SQRT2) #define MAX_EDGE_DEPTH_24 SQRT2 #define MIN_FACE_DEPTH_24 (-SQRT2) #define MAX_FACE_DEPTH_24 SQRT2 /* 120-cell {5,3,3} */ #define NUM_VERT_120 600 #define NUM_EDGE_120 1200 #define NUM_FACE_120 720 #define VERT_PER_FACE_120 5 #define MIN_EDGE_DEPTH_120 (-GOLDEN22) #define MAX_EDGE_DEPTH_120 GOLDEN22 #define MIN_FACE_DEPTH_120 (-GOLDEN22) #define MAX_FACE_DEPTH_120 GOLDEN22 /* 600-cell {3,3,5} */ #define NUM_VERT_600 120 #define NUM_EDGE_600 720 #define NUM_FACE_600 1200 #define VERT_PER_FACE_600 3 #define MIN_EDGE_DEPTH_600 (-GOLDEN/2.0-1) #define MAX_EDGE_DEPTH_600 (GOLDEN/2.0+1) #define MIN_FACE_DEPTH_600 ((-2*GOLDEN-2)/3.0) #define MAX_FACE_DEPTH_600 ((2*GOLDEN+2)/3.0) typedef struct { GLint WindH, WindW; GLXContext *glx_context; /* 4D rotation angles */ float alpha, beta, delta, zeta, eta, theta; /* Aspect ratio of the current window */ float aspect; /* Counter */ int tick, poly; /* Trackball states */ trackball_state *trackballs[2]; int current_trackball; Bool button_pressed; float edge_color_5[NUM_EDGE_5][4]; float face_color_5[NUM_FACE_5][4]; float face_color_trans_5[NUM_FACE_5][4]; float edge_color_8[NUM_EDGE_8][4]; float face_color_8[NUM_FACE_8][4]; float face_color_trans_8[NUM_FACE_8][4]; float edge_color_16[NUM_EDGE_16][4]; float face_color_16[NUM_FACE_16][4]; float face_color_trans_16[NUM_FACE_16][4]; float edge_color_24[NUM_EDGE_24][4]; float face_color_24[NUM_FACE_24][4]; float face_color_trans_24[NUM_FACE_24][4]; float edge_color_120[NUM_EDGE_120][4]; float face_color_120[NUM_FACE_120][4]; float face_color_trans_120[NUM_FACE_120][4]; float edge_color_600[NUM_EDGE_600][4]; float face_color_600[NUM_FACE_600][4]; float face_color_trans_600[NUM_FACE_600][4]; float speed_scale; } polytopesstruct; static polytopesstruct *poly = (polytopesstruct *) NULL; /* Vertex, edge, and face data for the six regular polytopes. All the polytopes are constructed with coordinates chosen such that their 4d circumsphere has a radius of 2. */ static const float vert_5[NUM_VERT_5][4] = { { -SQRT5OVER2, -SQRT5OVER6, -SQRT5OVER12, -0.5 }, { SQRT5OVER2, -SQRT5OVER6, -SQRT5OVER12, -0.5 }, { 0.0, SQRT10OVER3, -SQRT5OVER12, -0.5 }, { 0.0, 0.0, SQRT15OVER4, -0.5 }, { 0.0, 0.0, 0.0, 2.0 } }; static const int edge_5[NUM_EDGE_5][2] = { { 0, 1 }, { 0, 2 }, { 0, 3 }, { 0, 4 }, { 1, 2 }, { 1, 3 }, { 1, 4 }, { 2, 3 }, { 2, 4 }, { 3, 4 } }; static const int face_5[NUM_FACE_5][VERT_PER_FACE_5] = { { 0, 1, 2 }, { 0, 1, 3 }, { 0, 1, 4 }, { 0, 2, 3 }, { 0, 2, 4 }, { 0, 3, 4 }, { 1, 2, 3 }, { 1, 2, 4 }, { 1, 3, 4 }, { 2, 3, 4 } }; static const float vert_8[NUM_VERT_8][4] = { { -1.0, -1.0, -1.0, -1.0 }, { 1.0, -1.0, -1.0, -1.0 }, { -1.0, 1.0, -1.0, -1.0 }, { 1.0, 1.0, -1.0, -1.0 }, { -1.0, -1.0, 1.0, -1.0 }, { 1.0, -1.0, 1.0, -1.0 }, { -1.0, 1.0, 1.0, -1.0 }, { 1.0, 1.0, 1.0, -1.0 }, { -1.0, -1.0, -1.0, 1.0 }, { 1.0, -1.0, -1.0, 1.0 }, { -1.0, 1.0, -1.0, 1.0 }, { 1.0, 1.0, -1.0, 1.0 }, { -1.0, -1.0, 1.0, 1.0 }, { 1.0, -1.0, 1.0, 1.0 }, { -1.0, 1.0, 1.0, 1.0 }, { 1.0, 1.0, 1.0, 1.0 } }; static const int edge_8[NUM_EDGE_8][2] = { { 0, 1 }, { 0, 2 }, { 0, 4 }, { 0, 8 }, { 1, 3 }, { 1, 5 }, { 1, 9 }, { 2, 3 }, { 2, 6 }, { 2, 10 }, { 3, 7 }, { 3, 11 }, { 4, 5 }, { 4, 6 }, { 4, 12 }, { 5, 7 }, { 5, 13 }, { 6, 7 }, { 6, 14 }, { 7, 15 }, { 8, 9 }, { 8, 10 }, { 8, 12 }, { 9, 11 }, { 9, 13 }, { 10, 11 }, { 10, 14 }, { 11, 15 }, { 12, 13 }, { 12, 14 }, { 13, 15 }, { 14, 15 } }; static const int face_8[NUM_FACE_8][VERT_PER_FACE_8] = { { 0, 1, 3, 2 }, { 0, 1, 5, 4 }, { 0, 1, 9, 8 }, { 0, 2, 6, 4 }, { 0, 2, 10, 8 }, { 0, 4, 12, 8 }, { 1, 3, 7, 5 }, { 1, 3, 11, 9 }, { 1, 5, 13, 9 }, { 2, 3, 7, 6 }, { 2, 3, 11, 10 }, { 2, 6, 14, 10 }, { 3, 7, 15, 11 }, { 4, 5, 7, 6 }, { 4, 5, 13, 12 }, { 4, 6, 14, 12 }, { 5, 7, 15, 13 }, { 6, 7, 15, 14 }, { 8, 9, 11, 10 }, { 8, 9, 13, 12 }, { 8, 10, 14, 12 }, { 9, 11, 15, 13 }, { 10, 11, 15, 14 }, { 12, 13, 15, 14 } }; static const float vert_16[NUM_VERT_16][4] = { { 0.0, 0.0, 0.0, -2.0 }, { 0.0, 0.0, -2.0, 0.0 }, { 0.0, -2.0, 0.0, 0.0 }, { -2.0, 0.0, 0.0, 0.0 }, { 2.0, 0.0, 0.0, 0.0 }, { 0.0, 2.0, 0.0, 0.0 }, { 0.0, 0.0, 2.0, 0.0 }, { 0.0, 0.0, 0.0, 2.0 } }; static const int edge_16[NUM_EDGE_16][2] = { { 0, 1 }, { 0, 2 }, { 0, 3 }, { 0, 4 }, { 0, 5 }, { 0, 6 }, { 1, 2 }, { 1, 3 }, { 1, 4 }, { 1, 5 }, { 1, 7 }, { 2, 3 }, { 2, 4 }, { 2, 6 }, { 2, 7 }, { 3, 5 }, { 3, 6 }, { 3, 7 }, { 4, 5 }, { 4, 6 }, { 4, 7 }, { 5, 6 }, { 5, 7 }, { 6, 7 } }; static const int face_16[NUM_FACE_16][VERT_PER_FACE_16] = { { 0, 1, 2 }, { 0, 1, 3 }, { 0, 1, 4 }, { 0, 1, 5 }, { 0, 2, 3 }, { 0, 2, 4 }, { 0, 2, 6 }, { 0, 3, 5 }, { 0, 3, 6 }, { 0, 4, 5 }, { 0, 4, 6 }, { 0, 5, 6 }, { 1, 2, 3 }, { 1, 2, 4 }, { 1, 2, 7 }, { 1, 3, 5 }, { 1, 3, 7 }, { 1, 4, 5 }, { 1, 4, 7 }, { 1, 5, 7 }, { 2, 3, 6 }, { 2, 3, 7 }, { 2, 4, 6 }, { 2, 4, 7 }, { 2, 6, 7 }, { 3, 5, 6 }, { 3, 5, 7 }, { 3, 6, 7 }, { 4, 5, 6 }, { 4, 5, 7 }, { 4, 6, 7 }, { 5, 6, 7 } }; static const float vert_24[NUM_VERT_24][4] = { { 0.0, 0.0, -SQRT2, -SQRT2 }, { 0.0, -SQRT2, 0.0, -SQRT2 }, { -SQRT2, 0.0, 0.0, -SQRT2 }, { SQRT2, 0.0, 0.0, -SQRT2 }, { 0.0, SQRT2, 0.0, -SQRT2 }, { 0.0, 0.0, SQRT2, -SQRT2 }, { 0.0, -SQRT2, -SQRT2, 0.0 }, { -SQRT2, 0.0, -SQRT2, 0.0 }, { SQRT2, 0.0, -SQRT2, 0.0 }, { 0.0, SQRT2, -SQRT2, 0.0 }, { -SQRT2, -SQRT2, 0.0, 0.0 }, { SQRT2, -SQRT2, 0.0, 0.0 }, { -SQRT2, SQRT2, 0.0, 0.0 }, { SQRT2, SQRT2, 0.0, 0.0 }, { 0.0, -SQRT2, SQRT2, 0.0 }, { -SQRT2, 0.0, SQRT2, 0.0 }, { SQRT2, 0.0, SQRT2, 0.0 }, { 0.0, SQRT2, SQRT2, 0.0 }, { 0.0, 0.0, -SQRT2, SQRT2 }, { 0.0, -SQRT2, 0.0, SQRT2 }, { -SQRT2, 0.0, 0.0, SQRT2 }, { SQRT2, 0.0, 0.0, SQRT2 }, { 0.0, SQRT2, 0.0, SQRT2 }, { 0.0, 0.0, SQRT2, SQRT2 } }; static const int edge_24[NUM_EDGE_24][2] = { { 0, 1 }, { 0, 2 }, { 0, 3 }, { 0, 4 }, { 0, 6 }, { 0, 7 }, { 0, 8 }, { 0, 9 }, { 1, 2 }, { 1, 3 }, { 1, 5 }, { 1, 6 }, { 1, 10 }, { 1, 11 }, { 1, 14 }, { 2, 4 }, { 2, 5 }, { 2, 7 }, { 2, 10 }, { 2, 12 }, { 2, 15 }, { 3, 4 }, { 3, 5 }, { 3, 8 }, { 3, 11 }, { 3, 13 }, { 3, 16 }, { 4, 5 }, { 4, 9 }, { 4, 12 }, { 4, 13 }, { 4, 17 }, { 5, 14 }, { 5, 15 }, { 5, 16 }, { 5, 17 }, { 6, 7 }, { 6, 8 }, { 6, 10 }, { 6, 11 }, { 6, 18 }, { 6, 19 }, { 7, 9 }, { 7, 10 }, { 7, 12 }, { 7, 18 }, { 7, 20 }, { 8, 9 }, { 8, 11 }, { 8, 13 }, { 8, 18 }, { 8, 21 }, { 9, 12 }, { 9, 13 }, { 9, 18 }, { 9, 22 }, { 10, 14 }, { 10, 15 }, { 10, 19 }, { 10, 20 }, { 11, 14 }, { 11, 16 }, { 11, 19 }, { 11, 21 }, { 12, 15 }, { 12, 17 }, { 12, 20 }, { 12, 22 }, { 13, 16 }, { 13, 17 }, { 13, 21 }, { 13, 22 }, { 14, 15 }, { 14, 16 }, { 14, 19 }, { 14, 23 }, { 15, 17 }, { 15, 20 }, { 15, 23 }, { 16, 17 }, { 16, 21 }, { 16, 23 }, { 17, 22 }, { 17, 23 }, { 18, 19 }, { 18, 20 }, { 18, 21 }, { 18, 22 }, { 19, 20 }, { 19, 21 }, { 19, 23 }, { 20, 22 }, { 20, 23 }, { 21, 22 }, { 21, 23 }, { 22, 23 } }; static const int face_24[NUM_FACE_24][VERT_PER_FACE_24] = { { 0, 1, 2 }, { 0, 1, 3 }, { 0, 1, 6 }, { 0, 2, 4 }, { 0, 2, 7 }, { 0, 3, 4 }, { 0, 3, 8 }, { 0, 4, 9 }, { 0, 6, 7 }, { 0, 6, 8 }, { 0, 7, 9 }, { 0, 8, 9 }, { 1, 2, 5 }, { 1, 2, 10 }, { 1, 3, 5 }, { 1, 3, 11 }, { 1, 5, 14 }, { 1, 6, 10 }, { 1, 6, 11 }, { 1, 10, 14 }, { 1, 11, 14 }, { 2, 4, 5 }, { 2, 4, 12 }, { 2, 5, 15 }, { 2, 7, 10 }, { 2, 7, 12 }, { 2, 10, 15 }, { 2, 12, 15 }, { 3, 4, 5 }, { 3, 4, 13 }, { 3, 5, 16 }, { 3, 8, 11 }, { 3, 8, 13 }, { 3, 11, 16 }, { 3, 13, 16 }, { 4, 5, 17 }, { 4, 9, 12 }, { 4, 9, 13 }, { 4, 12, 17 }, { 4, 13, 17 }, { 5, 14, 15 }, { 5, 14, 16 }, { 5, 15, 17 }, { 5, 16, 17 }, { 6, 7, 10 }, { 6, 7, 18 }, { 6, 8, 11 }, { 6, 8, 18 }, { 6, 10, 19 }, { 6, 11, 19 }, { 6, 18, 19 }, { 7, 9, 12 }, { 7, 9, 18 }, { 7, 10, 20 }, { 7, 12, 20 }, { 7, 18, 20 }, { 8, 9, 13 }, { 8, 9, 18 }, { 8, 11, 21 }, { 8, 13, 21 }, { 8, 18, 21 }, { 9, 12, 22 }, { 9, 13, 22 }, { 9, 18, 22 }, { 10, 14, 15 }, { 10, 14, 19 }, { 10, 15, 20 }, { 10, 19, 20 }, { 11, 14, 16 }, { 11, 14, 19 }, { 11, 16, 21 }, { 11, 19, 21 }, { 12, 15, 17 }, { 12, 15, 20 }, { 12, 17, 22 }, { 12, 20, 22 }, { 13, 16, 17 }, { 13, 16, 21 }, { 13, 17, 22 }, { 13, 21, 22 }, { 14, 15, 23 }, { 14, 16, 23 }, { 14, 19, 23 }, { 15, 17, 23 }, { 15, 20, 23 }, { 16, 17, 23 }, { 16, 21, 23 }, { 17, 22, 23 }, { 18, 19, 20 }, { 18, 19, 21 }, { 18, 20, 22 }, { 18, 21, 22 }, { 19, 20, 23 }, { 19, 21, 23 }, { 20, 22, 23 }, { 21, 22, 23 } }; static const float vert_120[NUM_VERT_120][4] = { { -GOLDENINV22, 0.0, -SQRT2INV, -GOLDEN22 }, { GOLDENINV22, 0.0, -SQRT2INV, -GOLDEN22 }, { -GOLDENINV2, -GOLDENINV2, -GOLDENINV2, -GOLDEN22 }, { GOLDENINV2, -GOLDENINV2, -GOLDENINV2, -GOLDEN22 }, { -GOLDENINV2, GOLDENINV2, -GOLDENINV2, -GOLDEN22 }, { GOLDENINV2, GOLDENINV2, -GOLDENINV2, -GOLDEN22 }, { 0.0, -SQRT2INV, -GOLDENINV22, -GOLDEN22 }, { 0.0, SQRT2INV, -GOLDENINV22, -GOLDEN22 }, { -SQRT2INV, -GOLDENINV22, 0.0, -GOLDEN22 }, { SQRT2INV, -GOLDENINV22, 0.0, -GOLDEN22 }, { -SQRT2INV, GOLDENINV22, 0.0, -GOLDEN22 }, { SQRT2INV, GOLDENINV22, 0.0, -GOLDEN22 }, { 0.0, -SQRT2INV, GOLDENINV22, -GOLDEN22 }, { 0.0, SQRT2INV, GOLDENINV22, -GOLDEN22 }, { -GOLDENINV2, -GOLDENINV2, GOLDENINV2, -GOLDEN22 }, { GOLDENINV2, -GOLDENINV2, GOLDENINV2, -GOLDEN22 }, { -GOLDENINV2, GOLDENINV2, GOLDENINV2, -GOLDEN22 }, { GOLDENINV2, GOLDENINV2, GOLDENINV2, -GOLDEN22 }, { -GOLDENINV22, 0.0, SQRT2INV, -GOLDEN22 }, { GOLDENINV22, 0.0, SQRT2INV, -GOLDEN22 }, { -GOLDENINV2, 0.0, -GOLDEN2, -SQRT5OVER2 }, { GOLDENINV2, 0.0, -GOLDEN2, -SQRT5OVER2 }, { -SQRT2INV, -SQRT2INV, -SQRT2INV, -SQRT5OVER2 }, { SQRT2INV, -SQRT2INV, -SQRT2INV, -SQRT5OVER2 }, { -SQRT2INV, SQRT2INV, -SQRT2INV, -SQRT5OVER2 }, { SQRT2INV, SQRT2INV, -SQRT2INV, -SQRT5OVER2 }, { 0.0, -GOLDEN2, -GOLDENINV2, -SQRT5OVER2 }, { 0.0, GOLDEN2, -GOLDENINV2, -SQRT5OVER2 }, { -GOLDEN2, -GOLDENINV2, 0.0, -SQRT5OVER2 }, { GOLDEN2, -GOLDENINV2, 0.0, -SQRT5OVER2 }, { -GOLDEN2, GOLDENINV2, 0.0, -SQRT5OVER2 }, { GOLDEN2, GOLDENINV2, 0.0, -SQRT5OVER2 }, { 0.0, -GOLDEN2, GOLDENINV2, -SQRT5OVER2 }, { 0.0, GOLDEN2, GOLDENINV2, -SQRT5OVER2 }, { -SQRT2INV, -SQRT2INV, SQRT2INV, -SQRT5OVER2 }, { SQRT2INV, -SQRT2INV, SQRT2INV, -SQRT5OVER2 }, { -SQRT2INV, SQRT2INV, SQRT2INV, -SQRT5OVER2 }, { SQRT2INV, SQRT2INV, SQRT2INV, -SQRT5OVER2 }, { -GOLDENINV2, 0.0, GOLDEN2, -SQRT5OVER2 }, { GOLDENINV2, 0.0, GOLDEN2, -SQRT5OVER2 }, { 0.0, 0.0, -SQRT2, -SQRT2 }, { -SQRT2INV, -GOLDENINV2, -GOLDEN2, -SQRT2 }, { SQRT2INV, -GOLDENINV2, -GOLDEN2, -SQRT2 }, { -SQRT2INV, GOLDENINV2, -GOLDEN2, -SQRT2 }, { SQRT2INV, GOLDENINV2, -GOLDEN2, -SQRT2 }, { -GOLDENINV2, -GOLDEN2, -SQRT2INV, -SQRT2 }, { GOLDENINV2, -GOLDEN2, -SQRT2INV, -SQRT2 }, { -GOLDENINV2, GOLDEN2, -SQRT2INV, -SQRT2 }, { GOLDENINV2, GOLDEN2, -SQRT2INV, -SQRT2 }, { -GOLDEN2, -SQRT2INV, -GOLDENINV2, -SQRT2 }, { GOLDEN2, -SQRT2INV, -GOLDENINV2, -SQRT2 }, { -GOLDEN2, SQRT2INV, -GOLDENINV2, -SQRT2 }, { GOLDEN2, SQRT2INV, -GOLDENINV2, -SQRT2 }, { 0.0, -SQRT2, 0.0, -SQRT2 }, { -SQRT2, 0.0, 0.0, -SQRT2 }, { SQRT2, 0.0, 0.0, -SQRT2 }, { 0.0, SQRT2, 0.0, -SQRT2 }, { -GOLDEN2, -SQRT2INV, GOLDENINV2, -SQRT2 }, { GOLDEN2, -SQRT2INV, GOLDENINV2, -SQRT2 }, { -GOLDEN2, SQRT2INV, GOLDENINV2, -SQRT2 }, { GOLDEN2, SQRT2INV, GOLDENINV2, -SQRT2 }, { -GOLDENINV2, -GOLDEN2, SQRT2INV, -SQRT2 }, { GOLDENINV2, -GOLDEN2, SQRT2INV, -SQRT2 }, { -GOLDENINV2, GOLDEN2, SQRT2INV, -SQRT2 }, { GOLDENINV2, GOLDEN2, SQRT2INV, -SQRT2 }, { -SQRT2INV, -GOLDENINV2, GOLDEN2, -SQRT2 }, { SQRT2INV, -GOLDENINV2, GOLDEN2, -SQRT2 }, { -SQRT2INV, GOLDENINV2, GOLDEN2, -SQRT2 }, { SQRT2INV, GOLDENINV2, GOLDEN2, -SQRT2 }, { 0.0, 0.0, SQRT2, -SQRT2 }, { 0.0, -GOLDENINV2, -SQRT5OVER2, -GOLDEN2 }, { 0.0, GOLDENINV2, -SQRT5OVER2, -GOLDEN2 }, { -GOLDENINV2, -SQRT2INV, -SQRT2, -GOLDEN2 }, { GOLDENINV2, -SQRT2INV, -SQRT2, -GOLDEN2 }, { -GOLDENINV2, SQRT2INV, -SQRT2, -GOLDEN2 }, { GOLDENINV2, SQRT2INV, -SQRT2, -GOLDEN2 }, { -GOLDENINV22, -GOLDEN2, -GOLDEN2, -GOLDEN2 }, { GOLDENINV22, -GOLDEN2, -GOLDEN2, -GOLDEN2 }, { -GOLDEN2, -GOLDENINV22, -GOLDEN2, -GOLDEN2 }, { GOLDEN2, -GOLDENINV22, -GOLDEN2, -GOLDEN2 }, { -GOLDEN2, GOLDENINV22, -GOLDEN2, -GOLDEN2 }, { GOLDEN2, GOLDENINV22, -GOLDEN2, -GOLDEN2 }, { -GOLDENINV22, GOLDEN2, -GOLDEN2, -GOLDEN2 }, { GOLDENINV22, GOLDEN2, -GOLDEN2, -GOLDEN2 }, { -SQRT2, -GOLDENINV2, -SQRT2INV, -GOLDEN2 }, { SQRT2, -GOLDENINV2, -SQRT2INV, -GOLDEN2 }, { -SQRT2, GOLDENINV2, -SQRT2INV, -GOLDEN2 }, { SQRT2, GOLDENINV2, -SQRT2INV, -GOLDEN2 }, { -SQRT2INV, -SQRT2, -GOLDENINV2, -GOLDEN2 }, { SQRT2INV, -SQRT2, -GOLDENINV2, -GOLDEN2 }, { -SQRT5OVER2, 0.0, -GOLDENINV2, -GOLDEN2 }, { SQRT5OVER2, 0.0, -GOLDENINV2, -GOLDEN2 }, { -SQRT2INV, SQRT2, -GOLDENINV2, -GOLDEN2 }, { SQRT2INV, SQRT2, -GOLDENINV2, -GOLDEN2 }, { -GOLDEN2, -GOLDEN2, -GOLDENINV22, -GOLDEN2 }, { GOLDEN2, -GOLDEN2, -GOLDENINV22, -GOLDEN2 }, { -GOLDEN2, GOLDEN2, -GOLDENINV22, -GOLDEN2 }, { GOLDEN2, GOLDEN2, -GOLDENINV22, -GOLDEN2 }, { -GOLDENINV2, -SQRT5OVER2, 0.0, -GOLDEN2 }, { GOLDENINV2, -SQRT5OVER2, 0.0, -GOLDEN2 }, { -GOLDENINV2, SQRT5OVER2, 0.0, -GOLDEN2 }, { GOLDENINV2, SQRT5OVER2, 0.0, -GOLDEN2 }, { -GOLDEN2, -GOLDEN2, GOLDENINV22, -GOLDEN2 }, { GOLDEN2, -GOLDEN2, GOLDENINV22, -GOLDEN2 }, { -GOLDEN2, GOLDEN2, GOLDENINV22, -GOLDEN2 }, { GOLDEN2, GOLDEN2, GOLDENINV22, -GOLDEN2 }, { -SQRT2INV, -SQRT2, GOLDENINV2, -GOLDEN2 }, { SQRT2INV, -SQRT2, GOLDENINV2, -GOLDEN2 }, { -SQRT5OVER2, 0.0, GOLDENINV2, -GOLDEN2 }, { SQRT5OVER2, 0.0, GOLDENINV2, -GOLDEN2 }, { -SQRT2INV, SQRT2, GOLDENINV2, -GOLDEN2 }, { SQRT2INV, SQRT2, GOLDENINV2, -GOLDEN2 }, { -SQRT2, -GOLDENINV2, SQRT2INV, -GOLDEN2 }, { SQRT2, -GOLDENINV2, SQRT2INV, -GOLDEN2 }, { -SQRT2, GOLDENINV2, SQRT2INV, -GOLDEN2 }, { SQRT2, GOLDENINV2, SQRT2INV, -GOLDEN2 }, { -GOLDENINV22, -GOLDEN2, GOLDEN2, -GOLDEN2 }, { GOLDENINV22, -GOLDEN2, GOLDEN2, -GOLDEN2 }, { -GOLDEN2, -GOLDENINV22, GOLDEN2, -GOLDEN2 }, { GOLDEN2, -GOLDENINV22, GOLDEN2, -GOLDEN2 }, { -GOLDEN2, GOLDENINV22, GOLDEN2, -GOLDEN2 }, { GOLDEN2, GOLDENINV22, GOLDEN2, -GOLDEN2 }, { -GOLDENINV22, GOLDEN2, GOLDEN2, -GOLDEN2 }, { GOLDENINV22, GOLDEN2, GOLDEN2, -GOLDEN2 }, { -GOLDENINV2, -SQRT2INV, SQRT2, -GOLDEN2 }, { GOLDENINV2, -SQRT2INV, SQRT2, -GOLDEN2 }, { -GOLDENINV2, SQRT2INV, SQRT2, -GOLDEN2 }, { GOLDENINV2, SQRT2INV, SQRT2, -GOLDEN2 }, { 0.0, -GOLDENINV2, SQRT5OVER2, -GOLDEN2 }, { 0.0, GOLDENINV2, SQRT5OVER2, -GOLDEN2 }, { 0.0, -GOLDENINV22, -GOLDEN22, -SQRT2INV }, { 0.0, GOLDENINV22, -GOLDEN22, -SQRT2INV }, { -SQRT2INV, -SQRT2INV, -SQRT5OVER2, -SQRT2INV }, { SQRT2INV, -SQRT2INV, -SQRT5OVER2, -SQRT2INV }, { -SQRT2INV, SQRT2INV, -SQRT5OVER2, -SQRT2INV }, { SQRT2INV, SQRT2INV, -SQRT5OVER2, -SQRT2INV }, { -GOLDEN2, -GOLDENINV2, -SQRT2, -SQRT2INV }, { GOLDEN2, -GOLDENINV2, -SQRT2, -SQRT2INV }, { -GOLDEN2, GOLDENINV2, -SQRT2, -SQRT2INV }, { GOLDEN2, GOLDENINV2, -SQRT2, -SQRT2INV }, { -GOLDENINV2, -SQRT2, -GOLDEN2, -SQRT2INV }, { GOLDENINV2, -SQRT2, -GOLDEN2, -SQRT2INV }, { -GOLDENINV2, SQRT2, -GOLDEN2, -SQRT2INV }, { GOLDENINV2, SQRT2, -GOLDEN2, -SQRT2INV }, { -SQRT2INV, -SQRT5OVER2, -SQRT2INV, -SQRT2INV }, { SQRT2INV, -SQRT5OVER2, -SQRT2INV, -SQRT2INV }, { -SQRT5OVER2, -SQRT2INV, -SQRT2INV, -SQRT2INV }, { SQRT5OVER2, -SQRT2INV, -SQRT2INV, -SQRT2INV }, { -SQRT5OVER2, SQRT2INV, -SQRT2INV, -SQRT2INV }, { SQRT5OVER2, SQRT2INV, -SQRT2INV, -SQRT2INV }, { -SQRT2INV, SQRT5OVER2, -SQRT2INV, -SQRT2INV }, { SQRT2INV, SQRT5OVER2, -SQRT2INV, -SQRT2INV }, { -SQRT2, -GOLDEN2, -GOLDENINV2, -SQRT2INV }, { SQRT2, -GOLDEN2, -GOLDENINV2, -SQRT2INV }, { -SQRT2, GOLDEN2, -GOLDENINV2, -SQRT2INV }, { SQRT2, GOLDEN2, -GOLDENINV2, -SQRT2INV }, { -GOLDEN22, 0.0, -GOLDENINV22, -SQRT2INV }, { GOLDEN22, 0.0, -GOLDENINV22, -SQRT2INV }, { -GOLDENINV22, -GOLDEN22, 0.0, -SQRT2INV }, { GOLDENINV22, -GOLDEN22, 0.0, -SQRT2INV }, { -GOLDENINV22, GOLDEN22, 0.0, -SQRT2INV }, { GOLDENINV22, GOLDEN22, 0.0, -SQRT2INV }, { -GOLDEN22, 0.0, GOLDENINV22, -SQRT2INV }, { GOLDEN22, 0.0, GOLDENINV22, -SQRT2INV }, { -SQRT2, -GOLDEN2, GOLDENINV2, -SQRT2INV }, { SQRT2, -GOLDEN2, GOLDENINV2, -SQRT2INV }, { -SQRT2, GOLDEN2, GOLDENINV2, -SQRT2INV }, { SQRT2, GOLDEN2, GOLDENINV2, -SQRT2INV }, { -SQRT2INV, -SQRT5OVER2, SQRT2INV, -SQRT2INV }, { SQRT2INV, -SQRT5OVER2, SQRT2INV, -SQRT2INV }, { -SQRT5OVER2, -SQRT2INV, SQRT2INV, -SQRT2INV }, { SQRT5OVER2, -SQRT2INV, SQRT2INV, -SQRT2INV }, { -SQRT5OVER2, SQRT2INV, SQRT2INV, -SQRT2INV }, { SQRT5OVER2, SQRT2INV, SQRT2INV, -SQRT2INV }, { -SQRT2INV, SQRT5OVER2, SQRT2INV, -SQRT2INV }, { SQRT2INV, SQRT5OVER2, SQRT2INV, -SQRT2INV }, { -GOLDENINV2, -SQRT2, GOLDEN2, -SQRT2INV }, { GOLDENINV2, -SQRT2, GOLDEN2, -SQRT2INV }, { -GOLDENINV2, SQRT2, GOLDEN2, -SQRT2INV }, { GOLDENINV2, SQRT2, GOLDEN2, -SQRT2INV }, { -GOLDEN2, -GOLDENINV2, SQRT2, -SQRT2INV }, { GOLDEN2, -GOLDENINV2, SQRT2, -SQRT2INV }, { -GOLDEN2, GOLDENINV2, SQRT2, -SQRT2INV }, { GOLDEN2, GOLDENINV2, SQRT2, -SQRT2INV }, { -SQRT2INV, -SQRT2INV, SQRT5OVER2, -SQRT2INV }, { SQRT2INV, -SQRT2INV, SQRT5OVER2, -SQRT2INV }, { -SQRT2INV, SQRT2INV, SQRT5OVER2, -SQRT2INV }, { SQRT2INV, SQRT2INV, SQRT5OVER2, -SQRT2INV }, { 0.0, -GOLDENINV22, GOLDEN22, -SQRT2INV }, { 0.0, GOLDENINV22, GOLDEN22, -SQRT2INV }, { -GOLDENINV2, -GOLDENINV2, -GOLDEN22, -GOLDENINV2 }, { GOLDENINV2, -GOLDENINV2, -GOLDEN22, -GOLDENINV2 }, { -GOLDENINV2, GOLDENINV2, -GOLDEN22, -GOLDENINV2 }, { GOLDENINV2, GOLDENINV2, -GOLDEN22, -GOLDENINV2 }, { -GOLDEN2, 0.0, -SQRT5OVER2, -GOLDENINV2 }, { GOLDEN2, 0.0, -SQRT5OVER2, -GOLDENINV2 }, { -SQRT2INV, -GOLDEN2, -SQRT2, -GOLDENINV2 }, { SQRT2INV, -GOLDEN2, -SQRT2, -GOLDENINV2 }, { -SQRT2INV, GOLDEN2, -SQRT2, -GOLDENINV2 }, { SQRT2INV, GOLDEN2, -SQRT2, -GOLDENINV2 }, { 0.0, -SQRT5OVER2, -GOLDEN2, -GOLDENINV2 }, { -SQRT2, -SQRT2INV, -GOLDEN2, -GOLDENINV2 }, { SQRT2, -SQRT2INV, -GOLDEN2, -GOLDENINV2 }, { -SQRT2, SQRT2INV, -GOLDEN2, -GOLDENINV2 }, { SQRT2, SQRT2INV, -GOLDEN2, -GOLDENINV2 }, { 0.0, SQRT5OVER2, -GOLDEN2, -GOLDENINV2 }, { -GOLDEN2, -SQRT2, -SQRT2INV, -GOLDENINV2 }, { GOLDEN2, -SQRT2, -SQRT2INV, -GOLDENINV2 }, { -GOLDEN2, SQRT2, -SQRT2INV, -GOLDENINV2 }, { GOLDEN2, SQRT2, -SQRT2INV, -GOLDENINV2 }, { -GOLDENINV2, -GOLDEN22, -GOLDENINV2, -GOLDENINV2 }, { GOLDENINV2, -GOLDEN22, -GOLDENINV2, -GOLDENINV2 }, { -GOLDEN22, -GOLDENINV2, -GOLDENINV2, -GOLDENINV2 }, { GOLDEN22, -GOLDENINV2, -GOLDENINV2, -GOLDENINV2 }, { -GOLDEN22, GOLDENINV2, -GOLDENINV2, -GOLDENINV2 }, { GOLDEN22, GOLDENINV2, -GOLDENINV2, -GOLDENINV2 }, { -GOLDENINV2, GOLDEN22, -GOLDENINV2, -GOLDENINV2 }, { GOLDENINV2, GOLDEN22, -GOLDENINV2, -GOLDENINV2 }, { -SQRT5OVER2, -GOLDEN2, 0.0, -GOLDENINV2 }, { SQRT5OVER2, -GOLDEN2, 0.0, -GOLDENINV2 }, { -SQRT5OVER2, GOLDEN2, 0.0, -GOLDENINV2 }, { SQRT5OVER2, GOLDEN2, 0.0, -GOLDENINV2 }, { -GOLDENINV2, -GOLDEN22, GOLDENINV2, -GOLDENINV2 }, { GOLDENINV2, -GOLDEN22, GOLDENINV2, -GOLDENINV2 }, { -GOLDEN22, -GOLDENINV2, GOLDENINV2, -GOLDENINV2 }, { GOLDEN22, -GOLDENINV2, GOLDENINV2, -GOLDENINV2 }, { -GOLDEN22, GOLDENINV2, GOLDENINV2, -GOLDENINV2 }, { GOLDEN22, GOLDENINV2, GOLDENINV2, -GOLDENINV2 }, { -GOLDENINV2, GOLDEN22, GOLDENINV2, -GOLDENINV2 }, { GOLDENINV2, GOLDEN22, GOLDENINV2, -GOLDENINV2 }, { -GOLDEN2, -SQRT2, SQRT2INV, -GOLDENINV2 }, { GOLDEN2, -SQRT2, SQRT2INV, -GOLDENINV2 }, { -GOLDEN2, SQRT2, SQRT2INV, -GOLDENINV2 }, { GOLDEN2, SQRT2, SQRT2INV, -GOLDENINV2 }, { 0.0, -SQRT5OVER2, GOLDEN2, -GOLDENINV2 }, { -SQRT2, -SQRT2INV, GOLDEN2, -GOLDENINV2 }, { SQRT2, -SQRT2INV, GOLDEN2, -GOLDENINV2 }, { -SQRT2, SQRT2INV, GOLDEN2, -GOLDENINV2 }, { SQRT2, SQRT2INV, GOLDEN2, -GOLDENINV2 }, { 0.0, SQRT5OVER2, GOLDEN2, -GOLDENINV2 }, { -SQRT2INV, -GOLDEN2, SQRT2, -GOLDENINV2 }, { SQRT2INV, -GOLDEN2, SQRT2, -GOLDENINV2 }, { -SQRT2INV, GOLDEN2, SQRT2, -GOLDENINV2 }, { SQRT2INV, GOLDEN2, SQRT2, -GOLDENINV2 }, { -GOLDEN2, 0.0, SQRT5OVER2, -GOLDENINV2 }, { GOLDEN2, 0.0, SQRT5OVER2, -GOLDENINV2 }, { -GOLDENINV2, -GOLDENINV2, GOLDEN22, -GOLDENINV2 }, { GOLDENINV2, -GOLDENINV2, GOLDEN22, -GOLDENINV2 }, { -GOLDENINV2, GOLDENINV2, GOLDEN22, -GOLDENINV2 }, { GOLDENINV2, GOLDENINV2, GOLDEN22, -GOLDENINV2 }, { -SQRT2INV, 0.0, -GOLDEN22, -GOLDENINV22 }, { SQRT2INV, 0.0, -GOLDEN22, -GOLDENINV22 }, { -GOLDEN2, -GOLDEN2, -GOLDEN2, -GOLDENINV22 }, { GOLDEN2, -GOLDEN2, -GOLDEN2, -GOLDENINV22 }, { -GOLDEN2, GOLDEN2, -GOLDEN2, -GOLDENINV22 }, { GOLDEN2, GOLDEN2, -GOLDEN2, -GOLDENINV22 }, { 0.0, -GOLDEN22, -SQRT2INV, -GOLDENINV22 }, { 0.0, GOLDEN22, -SQRT2INV, -GOLDENINV22 }, { -GOLDEN22, -SQRT2INV, 0.0, -GOLDENINV22 }, { GOLDEN22, -SQRT2INV, 0.0, -GOLDENINV22 }, { -GOLDEN22, SQRT2INV, 0.0, -GOLDENINV22 }, { GOLDEN22, SQRT2INV, 0.0, -GOLDENINV22 }, { 0.0, -GOLDEN22, SQRT2INV, -GOLDENINV22 }, { 0.0, GOLDEN22, SQRT2INV, -GOLDENINV22 }, { -GOLDEN2, -GOLDEN2, GOLDEN2, -GOLDENINV22 }, { GOLDEN2, -GOLDEN2, GOLDEN2, -GOLDENINV22 }, { -GOLDEN2, GOLDEN2, GOLDEN2, -GOLDENINV22 }, { GOLDEN2, GOLDEN2, GOLDEN2, -GOLDENINV22 }, { -SQRT2INV, 0.0, GOLDEN22, -GOLDENINV22 }, { SQRT2INV, 0.0, GOLDEN22, -GOLDENINV22 }, { -GOLDENINV22, -SQRT2INV, -GOLDEN22, 0.0 }, { GOLDENINV22, -SQRT2INV, -GOLDEN22, 0.0 }, { -GOLDENINV22, SQRT2INV, -GOLDEN22, 0.0 }, { GOLDENINV22, SQRT2INV, -GOLDEN22, 0.0 }, { -GOLDENINV2, -GOLDEN2, -SQRT5OVER2, 0.0 }, { GOLDENINV2, -GOLDEN2, -SQRT5OVER2, 0.0 }, { -GOLDENINV2, GOLDEN2, -SQRT5OVER2, 0.0 }, { GOLDENINV2, GOLDEN2, -SQRT5OVER2, 0.0 }, { 0.0, -SQRT2, -SQRT2, 0.0 }, { -SQRT2, 0.0, -SQRT2, 0.0 }, { SQRT2, 0.0, -SQRT2, 0.0 }, { 0.0, SQRT2, -SQRT2, 0.0 }, { -SQRT5OVER2, -GOLDENINV2, -GOLDEN2, 0.0 }, { SQRT5OVER2, -GOLDENINV2, -GOLDEN2, 0.0 }, { -SQRT5OVER2, GOLDENINV2, -GOLDEN2, 0.0 }, { SQRT5OVER2, GOLDENINV2, -GOLDEN2, 0.0 }, { -GOLDEN22, -GOLDENINV22, -SQRT2INV, 0.0 }, { GOLDEN22, -GOLDENINV22, -SQRT2INV, 0.0 }, { -GOLDEN22, GOLDENINV22, -SQRT2INV, 0.0 }, { GOLDEN22, GOLDENINV22, -SQRT2INV, 0.0 }, { -GOLDEN2, -SQRT5OVER2, -GOLDENINV2, 0.0 }, { GOLDEN2, -SQRT5OVER2, -GOLDENINV2, 0.0 }, { -GOLDEN2, SQRT5OVER2, -GOLDENINV2, 0.0 }, { GOLDEN2, SQRT5OVER2, -GOLDENINV2, 0.0 }, { -SQRT2INV, -GOLDEN22, -GOLDENINV22, 0.0 }, { SQRT2INV, -GOLDEN22, -GOLDENINV22, 0.0 }, { -SQRT2INV, GOLDEN22, -GOLDENINV22, 0.0 }, { SQRT2INV, GOLDEN22, -GOLDENINV22, 0.0 }, { -SQRT2, -SQRT2, 0.0, 0.0 }, { SQRT2, -SQRT2, 0.0, 0.0 }, { -SQRT2, SQRT2, 0.0, 0.0 }, { SQRT2, SQRT2, 0.0, 0.0 }, { -SQRT2INV, -GOLDEN22, GOLDENINV22, 0.0 }, { SQRT2INV, -GOLDEN22, GOLDENINV22, 0.0 }, { -SQRT2INV, GOLDEN22, GOLDENINV22, 0.0 }, { SQRT2INV, GOLDEN22, GOLDENINV22, 0.0 }, { -GOLDEN2, -SQRT5OVER2, GOLDENINV2, 0.0 }, { GOLDEN2, -SQRT5OVER2, GOLDENINV2, 0.0 }, { -GOLDEN2, SQRT5OVER2, GOLDENINV2, 0.0 }, { GOLDEN2, SQRT5OVER2, GOLDENINV2, 0.0 }, { -GOLDEN22, -GOLDENINV22, SQRT2INV, 0.0 }, { GOLDEN22, -GOLDENINV22, SQRT2INV, 0.0 }, { -GOLDEN22, GOLDENINV22, SQRT2INV, 0.0 }, { GOLDEN22, GOLDENINV22, SQRT2INV, 0.0 }, { -SQRT5OVER2, -GOLDENINV2, GOLDEN2, 0.0 }, { SQRT5OVER2, -GOLDENINV2, GOLDEN2, 0.0 }, { -SQRT5OVER2, GOLDENINV2, GOLDEN2, 0.0 }, { SQRT5OVER2, GOLDENINV2, GOLDEN2, 0.0 }, { 0.0, -SQRT2, SQRT2, 0.0 }, { -SQRT2, 0.0, SQRT2, 0.0 }, { SQRT2, 0.0, SQRT2, 0.0 }, { 0.0, SQRT2, SQRT2, 0.0 }, { -GOLDENINV2, -GOLDEN2, SQRT5OVER2, 0.0 }, { GOLDENINV2, -GOLDEN2, SQRT5OVER2, 0.0 }, { -GOLDENINV2, GOLDEN2, SQRT5OVER2, 0.0 }, { GOLDENINV2, GOLDEN2, SQRT5OVER2, 0.0 }, { -GOLDENINV22, -SQRT2INV, GOLDEN22, 0.0 }, { GOLDENINV22, -SQRT2INV, GOLDEN22, 0.0 }, { -GOLDENINV22, SQRT2INV, GOLDEN22, 0.0 }, { GOLDENINV22, SQRT2INV, GOLDEN22, 0.0 }, { -SQRT2INV, 0.0, -GOLDEN22, GOLDENINV22 }, { SQRT2INV, 0.0, -GOLDEN22, GOLDENINV22 }, { -GOLDEN2, -GOLDEN2, -GOLDEN2, GOLDENINV22 }, { GOLDEN2, -GOLDEN2, -GOLDEN2, GOLDENINV22 }, { -GOLDEN2, GOLDEN2, -GOLDEN2, GOLDENINV22 }, { GOLDEN2, GOLDEN2, -GOLDEN2, GOLDENINV22 }, { 0.0, -GOLDEN22, -SQRT2INV, GOLDENINV22 }, { 0.0, GOLDEN22, -SQRT2INV, GOLDENINV22 }, { -GOLDEN22, -SQRT2INV, 0.0, GOLDENINV22 }, { GOLDEN22, -SQRT2INV, 0.0, GOLDENINV22 }, { -GOLDEN22, SQRT2INV, 0.0, GOLDENINV22 }, { GOLDEN22, SQRT2INV, 0.0, GOLDENINV22 }, { 0.0, -GOLDEN22, SQRT2INV, GOLDENINV22 }, { 0.0, GOLDEN22, SQRT2INV, GOLDENINV22 }, { -GOLDEN2, -GOLDEN2, GOLDEN2, GOLDENINV22 }, { GOLDEN2, -GOLDEN2, GOLDEN2, GOLDENINV22 }, { -GOLDEN2, GOLDEN2, GOLDEN2, GOLDENINV22 }, { GOLDEN2, GOLDEN2, GOLDEN2, GOLDENINV22 }, { -SQRT2INV, 0.0, GOLDEN22, GOLDENINV22 }, { SQRT2INV, 0.0, GOLDEN22, GOLDENINV22 }, { -GOLDENINV2, -GOLDENINV2, -GOLDEN22, GOLDENINV2 }, { GOLDENINV2, -GOLDENINV2, -GOLDEN22, GOLDENINV2 }, { -GOLDENINV2, GOLDENINV2, -GOLDEN22, GOLDENINV2 }, { GOLDENINV2, GOLDENINV2, -GOLDEN22, GOLDENINV2 }, { -GOLDEN2, 0.0, -SQRT5OVER2, GOLDENINV2 }, { GOLDEN2, 0.0, -SQRT5OVER2, GOLDENINV2 }, { -SQRT2INV, -GOLDEN2, -SQRT2, GOLDENINV2 }, { SQRT2INV, -GOLDEN2, -SQRT2, GOLDENINV2 }, { -SQRT2INV, GOLDEN2, -SQRT2, GOLDENINV2 }, { SQRT2INV, GOLDEN2, -SQRT2, GOLDENINV2 }, { 0.0, -SQRT5OVER2, -GOLDEN2, GOLDENINV2 }, { -SQRT2, -SQRT2INV, -GOLDEN2, GOLDENINV2 }, { SQRT2, -SQRT2INV, -GOLDEN2, GOLDENINV2 }, { -SQRT2, SQRT2INV, -GOLDEN2, GOLDENINV2 }, { SQRT2, SQRT2INV, -GOLDEN2, GOLDENINV2 }, { 0.0, SQRT5OVER2, -GOLDEN2, GOLDENINV2 }, { -GOLDEN2, -SQRT2, -SQRT2INV, GOLDENINV2 }, { GOLDEN2, -SQRT2, -SQRT2INV, GOLDENINV2 }, { -GOLDEN2, SQRT2, -SQRT2INV, GOLDENINV2 }, { GOLDEN2, SQRT2, -SQRT2INV, GOLDENINV2 }, { -GOLDENINV2, -GOLDEN22, -GOLDENINV2, GOLDENINV2 }, { GOLDENINV2, -GOLDEN22, -GOLDENINV2, GOLDENINV2 }, { -GOLDEN22, -GOLDENINV2, -GOLDENINV2, GOLDENINV2 }, { GOLDEN22, -GOLDENINV2, -GOLDENINV2, GOLDENINV2 }, { -GOLDEN22, GOLDENINV2, -GOLDENINV2, GOLDENINV2 }, { GOLDEN22, GOLDENINV2, -GOLDENINV2, GOLDENINV2 }, { -GOLDENINV2, GOLDEN22, -GOLDENINV2, GOLDENINV2 }, { GOLDENINV2, GOLDEN22, -GOLDENINV2, GOLDENINV2 }, { -SQRT5OVER2, -GOLDEN2, 0.0, GOLDENINV2 }, { SQRT5OVER2, -GOLDEN2, 0.0, GOLDENINV2 }, { -SQRT5OVER2, GOLDEN2, 0.0, GOLDENINV2 }, { SQRT5OVER2, GOLDEN2, 0.0, GOLDENINV2 }, { -GOLDENINV2, -GOLDEN22, GOLDENINV2, GOLDENINV2 }, { GOLDENINV2, -GOLDEN22, GOLDENINV2, GOLDENINV2 }, { -GOLDEN22, -GOLDENINV2, GOLDENINV2, GOLDENINV2 }, { GOLDEN22, -GOLDENINV2, GOLDENINV2, GOLDENINV2 }, { -GOLDEN22, GOLDENINV2, GOLDENINV2, GOLDENINV2 }, { GOLDEN22, GOLDENINV2, GOLDENINV2, GOLDENINV2 }, { -GOLDENINV2, GOLDEN22, GOLDENINV2, GOLDENINV2 }, { GOLDENINV2, GOLDEN22, GOLDENINV2, GOLDENINV2 }, { -GOLDEN2, -SQRT2, SQRT2INV, GOLDENINV2 }, { GOLDEN2, -SQRT2, SQRT2INV, GOLDENINV2 }, { -GOLDEN2, SQRT2, SQRT2INV, GOLDENINV2 }, { GOLDEN2, SQRT2, SQRT2INV, GOLDENINV2 }, { 0.0, -SQRT5OVER2, GOLDEN2, GOLDENINV2 }, { -SQRT2, -SQRT2INV, GOLDEN2, GOLDENINV2 }, { SQRT2, -SQRT2INV, GOLDEN2, GOLDENINV2 }, { -SQRT2, SQRT2INV, GOLDEN2, GOLDENINV2 }, { SQRT2, SQRT2INV, GOLDEN2, GOLDENINV2 }, { 0.0, SQRT5OVER2, GOLDEN2, GOLDENINV2 }, { -SQRT2INV, -GOLDEN2, SQRT2, GOLDENINV2 }, { SQRT2INV, -GOLDEN2, SQRT2, GOLDENINV2 }, { -SQRT2INV, GOLDEN2, SQRT2, GOLDENINV2 }, { SQRT2INV, GOLDEN2, SQRT2, GOLDENINV2 }, { -GOLDEN2, 0.0, SQRT5OVER2, GOLDENINV2 }, { GOLDEN2, 0.0, SQRT5OVER2, GOLDENINV2 }, { -GOLDENINV2, -GOLDENINV2, GOLDEN22, GOLDENINV2 }, { GOLDENINV2, -GOLDENINV2, GOLDEN22, GOLDENINV2 }, { -GOLDENINV2, GOLDENINV2, GOLDEN22, GOLDENINV2 }, { GOLDENINV2, GOLDENINV2, GOLDEN22, GOLDENINV2 }, { 0.0, -GOLDENINV22, -GOLDEN22, SQRT2INV }, { 0.0, GOLDENINV22, -GOLDEN22, SQRT2INV }, { -SQRT2INV, -SQRT2INV, -SQRT5OVER2, SQRT2INV }, { SQRT2INV, -SQRT2INV, -SQRT5OVER2, SQRT2INV }, { -SQRT2INV, SQRT2INV, -SQRT5OVER2, SQRT2INV }, { SQRT2INV, SQRT2INV, -SQRT5OVER2, SQRT2INV }, { -GOLDEN2, -GOLDENINV2, -SQRT2, SQRT2INV }, { GOLDEN2, -GOLDENINV2, -SQRT2, SQRT2INV }, { -GOLDEN2, GOLDENINV2, -SQRT2, SQRT2INV }, { GOLDEN2, GOLDENINV2, -SQRT2, SQRT2INV }, { -GOLDENINV2, -SQRT2, -GOLDEN2, SQRT2INV }, { GOLDENINV2, -SQRT2, -GOLDEN2, SQRT2INV }, { -GOLDENINV2, SQRT2, -GOLDEN2, SQRT2INV }, { GOLDENINV2, SQRT2, -GOLDEN2, SQRT2INV }, { -SQRT2INV, -SQRT5OVER2, -SQRT2INV, SQRT2INV }, { SQRT2INV, -SQRT5OVER2, -SQRT2INV, SQRT2INV }, { -SQRT5OVER2, -SQRT2INV, -SQRT2INV, SQRT2INV }, { SQRT5OVER2, -SQRT2INV, -SQRT2INV, SQRT2INV }, { -SQRT5OVER2, SQRT2INV, -SQRT2INV, SQRT2INV }, { SQRT5OVER2, SQRT2INV, -SQRT2INV, SQRT2INV }, { -SQRT2INV, SQRT5OVER2, -SQRT2INV, SQRT2INV }, { SQRT2INV, SQRT5OVER2, -SQRT2INV, SQRT2INV }, { -SQRT2, -GOLDEN2, -GOLDENINV2, SQRT2INV }, { SQRT2, -GOLDEN2, -GOLDENINV2, SQRT2INV }, { -SQRT2, GOLDEN2, -GOLDENINV2, SQRT2INV }, { SQRT2, GOLDEN2, -GOLDENINV2, SQRT2INV }, { -GOLDEN22, 0.0, -GOLDENINV22, SQRT2INV }, { GOLDEN22, 0.0, -GOLDENINV22, SQRT2INV }, { -GOLDENINV22, -GOLDEN22, 0.0, SQRT2INV }, { GOLDENINV22, -GOLDEN22, 0.0, SQRT2INV }, { -GOLDENINV22, GOLDEN22, 0.0, SQRT2INV }, { GOLDENINV22, GOLDEN22, 0.0, SQRT2INV }, { -GOLDEN22, 0.0, GOLDENINV22, SQRT2INV }, { GOLDEN22, 0.0, GOLDENINV22, SQRT2INV }, { -SQRT2, -GOLDEN2, GOLDENINV2, SQRT2INV }, { SQRT2, -GOLDEN2, GOLDENINV2, SQRT2INV }, { -SQRT2, GOLDEN2, GOLDENINV2, SQRT2INV }, { SQRT2, GOLDEN2, GOLDENINV2, SQRT2INV }, { -SQRT2INV, -SQRT5OVER2, SQRT2INV, SQRT2INV }, { SQRT2INV, -SQRT5OVER2, SQRT2INV, SQRT2INV }, { -SQRT5OVER2, -SQRT2INV, SQRT2INV, SQRT2INV }, { SQRT5OVER2, -SQRT2INV, SQRT2INV, SQRT2INV }, { -SQRT5OVER2, SQRT2INV, SQRT2INV, SQRT2INV }, { SQRT5OVER2, SQRT2INV, SQRT2INV, SQRT2INV }, { -SQRT2INV, SQRT5OVER2, SQRT2INV, SQRT2INV }, { SQRT2INV, SQRT5OVER2, SQRT2INV, SQRT2INV }, { -GOLDENINV2, -SQRT2, GOLDEN2, SQRT2INV }, { GOLDENINV2, -SQRT2, GOLDEN2, SQRT2INV }, { -GOLDENINV2, SQRT2, GOLDEN2, SQRT2INV }, { GOLDENINV2, SQRT2, GOLDEN2, SQRT2INV }, { -GOLDEN2, -GOLDENINV2, SQRT2, SQRT2INV }, { GOLDEN2, -GOLDENINV2, SQRT2, SQRT2INV }, { -GOLDEN2, GOLDENINV2, SQRT2, SQRT2INV }, { GOLDEN2, GOLDENINV2, SQRT2, SQRT2INV }, { -SQRT2INV, -SQRT2INV, SQRT5OVER2, SQRT2INV }, { SQRT2INV, -SQRT2INV, SQRT5OVER2, SQRT2INV }, { -SQRT2INV, SQRT2INV, SQRT5OVER2, SQRT2INV }, { SQRT2INV, SQRT2INV, SQRT5OVER2, SQRT2INV }, { 0.0, -GOLDENINV22, GOLDEN22, SQRT2INV }, { 0.0, GOLDENINV22, GOLDEN22, SQRT2INV }, { 0.0, -GOLDENINV2, -SQRT5OVER2, GOLDEN2 }, { 0.0, GOLDENINV2, -SQRT5OVER2, GOLDEN2 }, { -GOLDENINV2, -SQRT2INV, -SQRT2, GOLDEN2 }, { GOLDENINV2, -SQRT2INV, -SQRT2, GOLDEN2 }, { -GOLDENINV2, SQRT2INV, -SQRT2, GOLDEN2 }, { GOLDENINV2, SQRT2INV, -SQRT2, GOLDEN2 }, { -GOLDENINV22, -GOLDEN2, -GOLDEN2, GOLDEN2 }, { GOLDENINV22, -GOLDEN2, -GOLDEN2, GOLDEN2 }, { -GOLDEN2, -GOLDENINV22, -GOLDEN2, GOLDEN2 }, { GOLDEN2, -GOLDENINV22, -GOLDEN2, GOLDEN2 }, { -GOLDEN2, GOLDENINV22, -GOLDEN2, GOLDEN2 }, { GOLDEN2, GOLDENINV22, -GOLDEN2, GOLDEN2 }, { -GOLDENINV22, GOLDEN2, -GOLDEN2, GOLDEN2 }, { GOLDENINV22, GOLDEN2, -GOLDEN2, GOLDEN2 }, { -SQRT2, -GOLDENINV2, -SQRT2INV, GOLDEN2 }, { SQRT2, -GOLDENINV2, -SQRT2INV, GOLDEN2 }, { -SQRT2, GOLDENINV2, -SQRT2INV, GOLDEN2 }, { SQRT2, GOLDENINV2, -SQRT2INV, GOLDEN2 }, { -SQRT2INV, -SQRT2, -GOLDENINV2, GOLDEN2 }, { SQRT2INV, -SQRT2, -GOLDENINV2, GOLDEN2 }, { -SQRT5OVER2, 0.0, -GOLDENINV2, GOLDEN2 }, { SQRT5OVER2, 0.0, -GOLDENINV2, GOLDEN2 }, { -SQRT2INV, SQRT2, -GOLDENINV2, GOLDEN2 }, { SQRT2INV, SQRT2, -GOLDENINV2, GOLDEN2 }, { -GOLDEN2, -GOLDEN2, -GOLDENINV22, GOLDEN2 }, { GOLDEN2, -GOLDEN2, -GOLDENINV22, GOLDEN2 }, { -GOLDEN2, GOLDEN2, -GOLDENINV22, GOLDEN2 }, { GOLDEN2, GOLDEN2, -GOLDENINV22, GOLDEN2 }, { -GOLDENINV2, -SQRT5OVER2, 0.0, GOLDEN2 }, { GOLDENINV2, -SQRT5OVER2, 0.0, GOLDEN2 }, { -GOLDENINV2, SQRT5OVER2, 0.0, GOLDEN2 }, { GOLDENINV2, SQRT5OVER2, 0.0, GOLDEN2 }, { -GOLDEN2, -GOLDEN2, GOLDENINV22, GOLDEN2 }, { GOLDEN2, -GOLDEN2, GOLDENINV22, GOLDEN2 }, { -GOLDEN2, GOLDEN2, GOLDENINV22, GOLDEN2 }, { GOLDEN2, GOLDEN2, GOLDENINV22, GOLDEN2 }, { -SQRT2INV, -SQRT2, GOLDENINV2, GOLDEN2 }, { SQRT2INV, -SQRT2, GOLDENINV2, GOLDEN2 }, { -SQRT5OVER2, 0.0, GOLDENINV2, GOLDEN2 }, { SQRT5OVER2, 0.0, GOLDENINV2, GOLDEN2 }, { -SQRT2INV, SQRT2, GOLDENINV2, GOLDEN2 }, { SQRT2INV, SQRT2, GOLDENINV2, GOLDEN2 }, { -SQRT2, -GOLDENINV2, SQRT2INV, GOLDEN2 }, { SQRT2, -GOLDENINV2, SQRT2INV, GOLDEN2 }, { -SQRT2, GOLDENINV2, SQRT2INV, GOLDEN2 }, { SQRT2, GOLDENINV2, SQRT2INV, GOLDEN2 }, { -GOLDENINV22, -GOLDEN2, GOLDEN2, GOLDEN2 }, { GOLDENINV22, -GOLDEN2, GOLDEN2, GOLDEN2 }, { -GOLDEN2, -GOLDENINV22, GOLDEN2, GOLDEN2 }, { GOLDEN2, -GOLDENINV22, GOLDEN2, GOLDEN2 }, { -GOLDEN2, GOLDENINV22, GOLDEN2, GOLDEN2 }, { GOLDEN2, GOLDENINV22, GOLDEN2, GOLDEN2 }, { -GOLDENINV22, GOLDEN2, GOLDEN2, GOLDEN2 }, { GOLDENINV22, GOLDEN2, GOLDEN2, GOLDEN2 }, { -GOLDENINV2, -SQRT2INV, SQRT2, GOLDEN2 }, { GOLDENINV2, -SQRT2INV, SQRT2, GOLDEN2 }, { -GOLDENINV2, SQRT2INV, SQRT2, GOLDEN2 }, { GOLDENINV2, SQRT2INV, SQRT2, GOLDEN2 }, { 0.0, -GOLDENINV2, SQRT5OVER2, GOLDEN2 }, { 0.0, GOLDENINV2, SQRT5OVER2, GOLDEN2 }, { 0.0, 0.0, -SQRT2, SQRT2 }, { -SQRT2INV, -GOLDENINV2, -GOLDEN2, SQRT2 }, { SQRT2INV, -GOLDENINV2, -GOLDEN2, SQRT2 }, { -SQRT2INV, GOLDENINV2, -GOLDEN2, SQRT2 }, { SQRT2INV, GOLDENINV2, -GOLDEN2, SQRT2 }, { -GOLDENINV2, -GOLDEN2, -SQRT2INV, SQRT2 }, { GOLDENINV2, -GOLDEN2, -SQRT2INV, SQRT2 }, { -GOLDENINV2, GOLDEN2, -SQRT2INV, SQRT2 }, { GOLDENINV2, GOLDEN2, -SQRT2INV, SQRT2 }, { -GOLDEN2, -SQRT2INV, -GOLDENINV2, SQRT2 }, { GOLDEN2, -SQRT2INV, -GOLDENINV2, SQRT2 }, { -GOLDEN2, SQRT2INV, -GOLDENINV2, SQRT2 }, { GOLDEN2, SQRT2INV, -GOLDENINV2, SQRT2 }, { 0.0, -SQRT2, 0.0, SQRT2 }, { -SQRT2, 0.0, 0.0, SQRT2 }, { SQRT2, 0.0, 0.0, SQRT2 }, { 0.0, SQRT2, 0.0, SQRT2 }, { -GOLDEN2, -SQRT2INV, GOLDENINV2, SQRT2 }, { GOLDEN2, -SQRT2INV, GOLDENINV2, SQRT2 }, { -GOLDEN2, SQRT2INV, GOLDENINV2, SQRT2 }, { GOLDEN2, SQRT2INV, GOLDENINV2, SQRT2 }, { -GOLDENINV2, -GOLDEN2, SQRT2INV, SQRT2 }, { GOLDENINV2, -GOLDEN2, SQRT2INV, SQRT2 }, { -GOLDENINV2, GOLDEN2, SQRT2INV, SQRT2 }, { GOLDENINV2, GOLDEN2, SQRT2INV, SQRT2 }, { -SQRT2INV, -GOLDENINV2, GOLDEN2, SQRT2 }, { SQRT2INV, -GOLDENINV2, GOLDEN2, SQRT2 }, { -SQRT2INV, GOLDENINV2, GOLDEN2, SQRT2 }, { SQRT2INV, GOLDENINV2, GOLDEN2, SQRT2 }, { 0.0, 0.0, SQRT2, SQRT2 }, { -GOLDENINV2, 0.0, -GOLDEN2, SQRT5OVER2 }, { GOLDENINV2, 0.0, -GOLDEN2, SQRT5OVER2 }, { -SQRT2INV, -SQRT2INV, -SQRT2INV, SQRT5OVER2 }, { SQRT2INV, -SQRT2INV, -SQRT2INV, SQRT5OVER2 }, { -SQRT2INV, SQRT2INV, -SQRT2INV, SQRT5OVER2 }, { SQRT2INV, SQRT2INV, -SQRT2INV, SQRT5OVER2 }, { 0.0, -GOLDEN2, -GOLDENINV2, SQRT5OVER2 }, { 0.0, GOLDEN2, -GOLDENINV2, SQRT5OVER2 }, { -GOLDEN2, -GOLDENINV2, 0.0, SQRT5OVER2 }, { GOLDEN2, -GOLDENINV2, 0.0, SQRT5OVER2 }, { -GOLDEN2, GOLDENINV2, 0.0, SQRT5OVER2 }, { GOLDEN2, GOLDENINV2, 0.0, SQRT5OVER2 }, { 0.0, -GOLDEN2, GOLDENINV2, SQRT5OVER2 }, { 0.0, GOLDEN2, GOLDENINV2, SQRT5OVER2 }, { -SQRT2INV, -SQRT2INV, SQRT2INV, SQRT5OVER2 }, { SQRT2INV, -SQRT2INV, SQRT2INV, SQRT5OVER2 }, { -SQRT2INV, SQRT2INV, SQRT2INV, SQRT5OVER2 }, { SQRT2INV, SQRT2INV, SQRT2INV, SQRT5OVER2 }, { -GOLDENINV2, 0.0, GOLDEN2, SQRT5OVER2 }, { GOLDENINV2, 0.0, GOLDEN2, SQRT5OVER2 }, { -GOLDENINV22, 0.0, -SQRT2INV, GOLDEN22 }, { GOLDENINV22, 0.0, -SQRT2INV, GOLDEN22 }, { -GOLDENINV2, -GOLDENINV2, -GOLDENINV2, GOLDEN22 }, { GOLDENINV2, -GOLDENINV2, -GOLDENINV2, GOLDEN22 }, { -GOLDENINV2, GOLDENINV2, -GOLDENINV2, GOLDEN22 }, { GOLDENINV2, GOLDENINV2, -GOLDENINV2, GOLDEN22 }, { 0.0, -SQRT2INV, -GOLDENINV22, GOLDEN22 }, { 0.0, SQRT2INV, -GOLDENINV22, GOLDEN22 }, { -SQRT2INV, -GOLDENINV22, 0.0, GOLDEN22 }, { SQRT2INV, -GOLDENINV22, 0.0, GOLDEN22 }, { -SQRT2INV, GOLDENINV22, 0.0, GOLDEN22 }, { SQRT2INV, GOLDENINV22, 0.0, GOLDEN22 }, { 0.0, -SQRT2INV, GOLDENINV22, GOLDEN22 }, { 0.0, SQRT2INV, GOLDENINV22, GOLDEN22 }, { -GOLDENINV2, -GOLDENINV2, GOLDENINV2, GOLDEN22 }, { GOLDENINV2, -GOLDENINV2, GOLDENINV2, GOLDEN22 }, { -GOLDENINV2, GOLDENINV2, GOLDENINV2, GOLDEN22 }, { GOLDENINV2, GOLDENINV2, GOLDENINV2, GOLDEN22 }, { -GOLDENINV22, 0.0, SQRT2INV, GOLDEN22 }, { GOLDENINV22, 0.0, SQRT2INV, GOLDEN22 } }; static const int edge_120[NUM_EDGE_120][2] = { { 0, 1 }, { 0, 2 }, { 0, 4 }, { 0, 20 }, { 1, 3 }, { 1, 5 }, { 1, 21 }, { 2, 6 }, { 2, 8 }, { 2, 22 }, { 3, 6 }, { 3, 9 }, { 3, 23 }, { 4, 7 }, { 4, 10 }, { 4, 24 }, { 5, 7 }, { 5, 11 }, { 5, 25 }, { 6, 12 }, { 6, 26 }, { 7, 13 }, { 7, 27 }, { 8, 10 }, { 8, 14 }, { 8, 28 }, { 9, 11 }, { 9, 15 }, { 9, 29 }, { 10, 16 }, { 10, 30 }, { 11, 17 }, { 11, 31 }, { 12, 14 }, { 12, 15 }, { 12, 32 }, { 13, 16 }, { 13, 17 }, { 13, 33 }, { 14, 18 }, { 14, 34 }, { 15, 19 }, { 15, 35 }, { 16, 18 }, { 16, 36 }, { 17, 19 }, { 17, 37 }, { 18, 19 }, { 18, 38 }, { 19, 39 }, { 20, 40 }, { 20, 41 }, { 20, 43 }, { 21, 40 }, { 21, 42 }, { 21, 44 }, { 22, 41 }, { 22, 45 }, { 22, 49 }, { 23, 42 }, { 23, 46 }, { 23, 50 }, { 24, 43 }, { 24, 47 }, { 24, 51 }, { 25, 44 }, { 25, 48 }, { 25, 52 }, { 26, 45 }, { 26, 46 }, { 26, 53 }, { 27, 47 }, { 27, 48 }, { 27, 56 }, { 28, 49 }, { 28, 54 }, { 28, 57 }, { 29, 50 }, { 29, 55 }, { 29, 58 }, { 30, 51 }, { 30, 54 }, { 30, 59 }, { 31, 52 }, { 31, 55 }, { 31, 60 }, { 32, 53 }, { 32, 61 }, { 32, 62 }, { 33, 56 }, { 33, 63 }, { 33, 64 }, { 34, 57 }, { 34, 61 }, { 34, 65 }, { 35, 58 }, { 35, 62 }, { 35, 66 }, { 36, 59 }, { 36, 63 }, { 36, 67 }, { 37, 60 }, { 37, 64 }, { 37, 68 }, { 38, 65 }, { 38, 67 }, { 38, 69 }, { 39, 66 }, { 39, 68 }, { 39, 69 }, { 40, 70 }, { 40, 71 }, { 41, 72 }, { 41, 78 }, { 42, 73 }, { 42, 79 }, { 43, 74 }, { 43, 80 }, { 44, 75 }, { 44, 81 }, { 45, 76 }, { 45, 88 }, { 46, 77 }, { 46, 89 }, { 47, 82 }, { 47, 92 }, { 48, 83 }, { 48, 93 }, { 49, 84 }, { 49, 94 }, { 50, 85 }, { 50, 95 }, { 51, 86 }, { 51, 96 }, { 52, 87 }, { 52, 97 }, { 53, 98 }, { 53, 99 }, { 54, 90 }, { 54, 108 }, { 55, 91 }, { 55, 109 }, { 56, 100 }, { 56, 101 }, { 57, 102 }, { 57, 112 }, { 58, 103 }, { 58, 113 }, { 59, 104 }, { 59, 114 }, { 60, 105 }, { 60, 115 }, { 61, 106 }, { 61, 116 }, { 62, 107 }, { 62, 117 }, { 63, 110 }, { 63, 122 }, { 64, 111 }, { 64, 123 }, { 65, 118 }, { 65, 124 }, { 66, 119 }, { 66, 125 }, { 67, 120 }, { 67, 126 }, { 68, 121 }, { 68, 127 }, { 69, 128 }, { 69, 129 }, { 70, 72 }, { 70, 73 }, { 70, 130 }, { 71, 74 }, { 71, 75 }, { 71, 131 }, { 72, 76 }, { 72, 132 }, { 73, 77 }, { 73, 133 }, { 74, 82 }, { 74, 134 }, { 75, 83 }, { 75, 135 }, { 76, 77 }, { 76, 140 }, { 77, 141 }, { 78, 80 }, { 78, 84 }, { 78, 136 }, { 79, 81 }, { 79, 85 }, { 79, 137 }, { 80, 86 }, { 80, 138 }, { 81, 87 }, { 81, 139 }, { 82, 83 }, { 82, 142 }, { 83, 143 }, { 84, 90 }, { 84, 146 }, { 85, 91 }, { 85, 147 }, { 86, 90 }, { 86, 148 }, { 87, 91 }, { 87, 149 }, { 88, 94 }, { 88, 98 }, { 88, 144 }, { 89, 95 }, { 89, 99 }, { 89, 145 }, { 90, 156 }, { 91, 157 }, { 92, 96 }, { 92, 100 }, { 92, 150 }, { 93, 97 }, { 93, 101 }, { 93, 151 }, { 94, 102 }, { 94, 152 }, { 95, 103 }, { 95, 153 }, { 96, 104 }, { 96, 154 }, { 97, 105 }, { 97, 155 }, { 98, 106 }, { 98, 158 }, { 99, 107 }, { 99, 159 }, { 100, 110 }, { 100, 160 }, { 101, 111 }, { 101, 161 }, { 102, 106 }, { 102, 164 }, { 103, 107 }, { 103, 165 }, { 104, 110 }, { 104, 166 }, { 105, 111 }, { 105, 167 }, { 106, 168 }, { 107, 169 }, { 108, 112 }, { 108, 114 }, { 108, 162 }, { 109, 113 }, { 109, 115 }, { 109, 163 }, { 110, 174 }, { 111, 175 }, { 112, 118 }, { 112, 170 }, { 113, 119 }, { 113, 171 }, { 114, 120 }, { 114, 172 }, { 115, 121 }, { 115, 173 }, { 116, 117 }, { 116, 124 }, { 116, 176 }, { 117, 125 }, { 117, 177 }, { 118, 120 }, { 118, 180 }, { 119, 121 }, { 119, 181 }, { 120, 182 }, { 121, 183 }, { 122, 123 }, { 122, 126 }, { 122, 178 }, { 123, 127 }, { 123, 179 }, { 124, 128 }, { 124, 184 }, { 125, 128 }, { 125, 185 }, { 126, 129 }, { 126, 186 }, { 127, 129 }, { 127, 187 }, { 128, 188 }, { 129, 189 }, { 130, 131 }, { 130, 190 }, { 130, 191 }, { 131, 192 }, { 131, 193 }, { 132, 136 }, { 132, 190 }, { 132, 196 }, { 133, 137 }, { 133, 191 }, { 133, 197 }, { 134, 138 }, { 134, 192 }, { 134, 198 }, { 135, 139 }, { 135, 193 }, { 135, 199 }, { 136, 194 }, { 136, 201 }, { 137, 195 }, { 137, 202 }, { 138, 194 }, { 138, 203 }, { 139, 195 }, { 139, 204 }, { 140, 144 }, { 140, 196 }, { 140, 200 }, { 141, 145 }, { 141, 197 }, { 141, 200 }, { 142, 150 }, { 142, 198 }, { 142, 205 }, { 143, 151 }, { 143, 199 }, { 143, 205 }, { 144, 206 }, { 144, 210 }, { 145, 207 }, { 145, 211 }, { 146, 152 }, { 146, 201 }, { 146, 212 }, { 147, 153 }, { 147, 202 }, { 147, 213 }, { 148, 154 }, { 148, 203 }, { 148, 214 }, { 149, 155 }, { 149, 204 }, { 149, 215 }, { 150, 208 }, { 150, 216 }, { 151, 209 }, { 151, 217 }, { 152, 206 }, { 152, 218 }, { 153, 207 }, { 153, 219 }, { 154, 208 }, { 154, 220 }, { 155, 209 }, { 155, 221 }, { 156, 162 }, { 156, 212 }, { 156, 214 }, { 157, 163 }, { 157, 213 }, { 157, 215 }, { 158, 159 }, { 158, 210 }, { 158, 222 }, { 159, 211 }, { 159, 223 }, { 160, 161 }, { 160, 216 }, { 160, 228 }, { 161, 217 }, { 161, 229 }, { 162, 224 }, { 162, 226 }, { 163, 225 }, { 163, 227 }, { 164, 170 }, { 164, 218 }, { 164, 230 }, { 165, 171 }, { 165, 219 }, { 165, 231 }, { 166, 172 }, { 166, 220 }, { 166, 232 }, { 167, 173 }, { 167, 221 }, { 167, 233 }, { 168, 176 }, { 168, 222 }, { 168, 230 }, { 169, 177 }, { 169, 223 }, { 169, 231 }, { 170, 224 }, { 170, 235 }, { 171, 225 }, { 171, 236 }, { 172, 226 }, { 172, 237 }, { 173, 227 }, { 173, 238 }, { 174, 178 }, { 174, 228 }, { 174, 232 }, { 175, 179 }, { 175, 229 }, { 175, 233 }, { 176, 234 }, { 176, 240 }, { 177, 234 }, { 177, 241 }, { 178, 239 }, { 178, 242 }, { 179, 239 }, { 179, 243 }, { 180, 184 }, { 180, 235 }, { 180, 244 }, { 181, 185 }, { 181, 236 }, { 181, 245 }, { 182, 186 }, { 182, 237 }, { 182, 244 }, { 183, 187 }, { 183, 238 }, { 183, 245 }, { 184, 240 }, { 184, 246 }, { 185, 241 }, { 185, 247 }, { 186, 242 }, { 186, 248 }, { 187, 243 }, { 187, 249 }, { 188, 189 }, { 188, 246 }, { 188, 247 }, { 189, 248 }, { 189, 249 }, { 190, 250 }, { 190, 270 }, { 191, 251 }, { 191, 271 }, { 192, 250 }, { 192, 272 }, { 193, 251 }, { 193, 273 }, { 194, 250 }, { 194, 279 }, { 195, 251 }, { 195, 280 }, { 196, 252 }, { 196, 274 }, { 197, 253 }, { 197, 275 }, { 198, 254 }, { 198, 276 }, { 199, 255 }, { 199, 277 }, { 200, 256 }, { 200, 278 }, { 201, 252 }, { 201, 282 }, { 202, 253 }, { 202, 283 }, { 203, 254 }, { 203, 284 }, { 204, 255 }, { 204, 285 }, { 205, 257 }, { 205, 281 }, { 206, 252 }, { 206, 290 }, { 207, 253 }, { 207, 291 }, { 208, 254 }, { 208, 292 }, { 209, 255 }, { 209, 293 }, { 210, 256 }, { 210, 294 }, { 211, 256 }, { 211, 295 }, { 212, 258 }, { 212, 286 }, { 213, 259 }, { 213, 287 }, { 214, 260 }, { 214, 288 }, { 215, 261 }, { 215, 289 }, { 216, 257 }, { 216, 296 }, { 217, 257 }, { 217, 297 }, { 218, 258 }, { 218, 298 }, { 219, 259 }, { 219, 299 }, { 220, 260 }, { 220, 300 }, { 221, 261 }, { 221, 301 }, { 222, 262 }, { 222, 302 }, { 223, 262 }, { 223, 303 }, { 224, 258 }, { 224, 310 }, { 225, 259 }, { 225, 311 }, { 226, 260 }, { 226, 312 }, { 227, 261 }, { 227, 313 }, { 228, 263 }, { 228, 304 }, { 229, 263 }, { 229, 305 }, { 230, 264 }, { 230, 306 }, { 231, 265 }, { 231, 307 }, { 232, 266 }, { 232, 308 }, { 233, 267 }, { 233, 309 }, { 234, 262 }, { 234, 318 }, { 235, 264 }, { 235, 314 }, { 236, 265 }, { 236, 315 }, { 237, 266 }, { 237, 316 }, { 238, 267 }, { 238, 317 }, { 239, 263 }, { 239, 321 }, { 240, 264 }, { 240, 322 }, { 241, 265 }, { 241, 323 }, { 242, 266 }, { 242, 324 }, { 243, 267 }, { 243, 325 }, { 244, 268 }, { 244, 319 }, { 245, 269 }, { 245, 320 }, { 246, 268 }, { 246, 326 }, { 247, 269 }, { 247, 327 }, { 248, 268 }, { 248, 328 }, { 249, 269 }, { 249, 329 }, { 250, 330 }, { 251, 331 }, { 252, 332 }, { 253, 333 }, { 254, 334 }, { 255, 335 }, { 256, 336 }, { 257, 337 }, { 258, 338 }, { 259, 339 }, { 260, 340 }, { 261, 341 }, { 262, 342 }, { 263, 343 }, { 264, 344 }, { 265, 345 }, { 266, 346 }, { 267, 347 }, { 268, 348 }, { 269, 349 }, { 270, 271 }, { 270, 274 }, { 270, 350 }, { 271, 275 }, { 271, 351 }, { 272, 273 }, { 272, 276 }, { 272, 352 }, { 273, 277 }, { 273, 353 }, { 274, 278 }, { 274, 356 }, { 275, 278 }, { 275, 357 }, { 276, 281 }, { 276, 358 }, { 277, 281 }, { 277, 359 }, { 278, 360 }, { 279, 282 }, { 279, 284 }, { 279, 354 }, { 280, 283 }, { 280, 285 }, { 280, 355 }, { 281, 365 }, { 282, 286 }, { 282, 361 }, { 283, 287 }, { 283, 362 }, { 284, 288 }, { 284, 363 }, { 285, 289 }, { 285, 364 }, { 286, 288 }, { 286, 372 }, { 287, 289 }, { 287, 373 }, { 288, 374 }, { 289, 375 }, { 290, 294 }, { 290, 298 }, { 290, 366 }, { 291, 295 }, { 291, 299 }, { 291, 367 }, { 292, 296 }, { 292, 300 }, { 292, 368 }, { 293, 297 }, { 293, 301 }, { 293, 369 }, { 294, 302 }, { 294, 370 }, { 295, 303 }, { 295, 371 }, { 296, 304 }, { 296, 376 }, { 297, 305 }, { 297, 377 }, { 298, 306 }, { 298, 378 }, { 299, 307 }, { 299, 379 }, { 300, 308 }, { 300, 380 }, { 301, 309 }, { 301, 381 }, { 302, 306 }, { 302, 382 }, { 303, 307 }, { 303, 383 }, { 304, 308 }, { 304, 388 }, { 305, 309 }, { 305, 389 }, { 306, 390 }, { 307, 391 }, { 308, 392 }, { 309, 393 }, { 310, 312 }, { 310, 314 }, { 310, 384 }, { 311, 313 }, { 311, 315 }, { 311, 385 }, { 312, 316 }, { 312, 386 }, { 313, 317 }, { 313, 387 }, { 314, 319 }, { 314, 395 }, { 315, 320 }, { 315, 396 }, { 316, 319 }, { 316, 397 }, { 317, 320 }, { 317, 398 }, { 318, 322 }, { 318, 323 }, { 318, 394 }, { 319, 404 }, { 320, 405 }, { 321, 324 }, { 321, 325 }, { 321, 399 }, { 322, 326 }, { 322, 400 }, { 323, 327 }, { 323, 401 }, { 324, 328 }, { 324, 402 }, { 325, 329 }, { 325, 403 }, { 326, 327 }, { 326, 406 }, { 327, 407 }, { 328, 329 }, { 328, 408 }, { 329, 409 }, { 330, 350 }, { 330, 352 }, { 330, 354 }, { 331, 351 }, { 331, 353 }, { 331, 355 }, { 332, 356 }, { 332, 361 }, { 332, 366 }, { 333, 357 }, { 333, 362 }, { 333, 367 }, { 334, 358 }, { 334, 363 }, { 334, 368 }, { 335, 359 }, { 335, 364 }, { 335, 369 }, { 336, 360 }, { 336, 370 }, { 336, 371 }, { 337, 365 }, { 337, 376 }, { 337, 377 }, { 338, 372 }, { 338, 378 }, { 338, 384 }, { 339, 373 }, { 339, 379 }, { 339, 385 }, { 340, 374 }, { 340, 380 }, { 340, 386 }, { 341, 375 }, { 341, 381 }, { 341, 387 }, { 342, 382 }, { 342, 383 }, { 342, 394 }, { 343, 388 }, { 343, 389 }, { 343, 399 }, { 344, 390 }, { 344, 395 }, { 344, 400 }, { 345, 391 }, { 345, 396 }, { 345, 401 }, { 346, 392 }, { 346, 397 }, { 346, 402 }, { 347, 393 }, { 347, 398 }, { 347, 403 }, { 348, 404 }, { 348, 406 }, { 348, 408 }, { 349, 405 }, { 349, 407 }, { 349, 409 }, { 350, 410 }, { 350, 412 }, { 351, 410 }, { 351, 413 }, { 352, 411 }, { 352, 414 }, { 353, 411 }, { 353, 415 }, { 354, 416 }, { 354, 418 }, { 355, 417 }, { 355, 419 }, { 356, 412 }, { 356, 420 }, { 357, 413 }, { 357, 421 }, { 358, 414 }, { 358, 422 }, { 359, 415 }, { 359, 423 }, { 360, 420 }, { 360, 421 }, { 361, 416 }, { 361, 426 }, { 362, 417 }, { 362, 427 }, { 363, 418 }, { 363, 428 }, { 364, 419 }, { 364, 429 }, { 365, 422 }, { 365, 423 }, { 366, 424 }, { 366, 432 }, { 367, 425 }, { 367, 433 }, { 368, 430 }, { 368, 434 }, { 369, 431 }, { 369, 435 }, { 370, 424 }, { 370, 438 }, { 371, 425 }, { 371, 439 }, { 372, 426 }, { 372, 436 }, { 373, 427 }, { 373, 437 }, { 374, 428 }, { 374, 436 }, { 375, 429 }, { 375, 437 }, { 376, 430 }, { 376, 440 }, { 377, 431 }, { 377, 441 }, { 378, 432 }, { 378, 444 }, { 379, 433 }, { 379, 445 }, { 380, 434 }, { 380, 446 }, { 381, 435 }, { 381, 447 }, { 382, 438 }, { 382, 448 }, { 383, 439 }, { 383, 449 }, { 384, 442 }, { 384, 450 }, { 385, 443 }, { 385, 451 }, { 386, 442 }, { 386, 452 }, { 387, 443 }, { 387, 453 }, { 388, 440 }, { 388, 454 }, { 389, 441 }, { 389, 455 }, { 390, 444 }, { 390, 448 }, { 391, 445 }, { 391, 449 }, { 392, 446 }, { 392, 454 }, { 393, 447 }, { 393, 455 }, { 394, 456 }, { 394, 457 }, { 395, 450 }, { 395, 460 }, { 396, 451 }, { 396, 461 }, { 397, 452 }, { 397, 462 }, { 398, 453 }, { 398, 463 }, { 399, 458 }, { 399, 459 }, { 400, 456 }, { 400, 464 }, { 401, 457 }, { 401, 465 }, { 402, 458 }, { 402, 466 }, { 403, 459 }, { 403, 467 }, { 404, 460 }, { 404, 462 }, { 405, 461 }, { 405, 463 }, { 406, 464 }, { 406, 468 }, { 407, 465 }, { 407, 468 }, { 408, 466 }, { 408, 469 }, { 409, 467 }, { 409, 469 }, { 410, 411 }, { 410, 470 }, { 411, 471 }, { 412, 416 }, { 412, 472 }, { 413, 417 }, { 413, 473 }, { 414, 418 }, { 414, 474 }, { 415, 419 }, { 415, 475 }, { 416, 478 }, { 417, 479 }, { 418, 480 }, { 419, 481 }, { 420, 424 }, { 420, 476 }, { 421, 425 }, { 421, 477 }, { 422, 430 }, { 422, 482 }, { 423, 431 }, { 423, 483 }, { 424, 488 }, { 425, 489 }, { 426, 432 }, { 426, 484 }, { 427, 433 }, { 427, 485 }, { 428, 434 }, { 428, 486 }, { 429, 435 }, { 429, 487 }, { 430, 492 }, { 431, 493 }, { 432, 494 }, { 433, 495 }, { 434, 496 }, { 435, 497 }, { 436, 442 }, { 436, 490 }, { 437, 443 }, { 437, 491 }, { 438, 439 }, { 438, 498 }, { 439, 499 }, { 440, 441 }, { 440, 500 }, { 441, 501 }, { 442, 508 }, { 443, 509 }, { 444, 450 }, { 444, 502 }, { 445, 451 }, { 445, 503 }, { 446, 452 }, { 446, 504 }, { 447, 453 }, { 447, 505 }, { 448, 456 }, { 448, 506 }, { 449, 457 }, { 449, 507 }, { 450, 512 }, { 451, 513 }, { 452, 514 }, { 453, 515 }, { 454, 458 }, { 454, 510 }, { 455, 459 }, { 455, 511 }, { 456, 516 }, { 457, 517 }, { 458, 522 }, { 459, 523 }, { 460, 464 }, { 460, 518 }, { 461, 465 }, { 461, 519 }, { 462, 466 }, { 462, 520 }, { 463, 467 }, { 463, 521 }, { 464, 524 }, { 465, 525 }, { 466, 526 }, { 467, 527 }, { 468, 469 }, { 468, 528 }, { 469, 529 }, { 470, 472 }, { 470, 473 }, { 470, 530 }, { 471, 474 }, { 471, 475 }, { 471, 530 }, { 472, 476 }, { 472, 531 }, { 473, 477 }, { 473, 532 }, { 474, 482 }, { 474, 533 }, { 475, 483 }, { 475, 534 }, { 476, 477 }, { 476, 535 }, { 477, 536 }, { 478, 480 }, { 478, 484 }, { 478, 531 }, { 479, 481 }, { 479, 485 }, { 479, 532 }, { 480, 486 }, { 480, 533 }, { 481, 487 }, { 481, 534 }, { 482, 483 }, { 482, 537 }, { 483, 538 }, { 484, 490 }, { 484, 539 }, { 485, 491 }, { 485, 540 }, { 486, 490 }, { 486, 541 }, { 487, 491 }, { 487, 542 }, { 488, 494 }, { 488, 498 }, { 488, 535 }, { 489, 495 }, { 489, 499 }, { 489, 536 }, { 490, 544 }, { 491, 545 }, { 492, 496 }, { 492, 500 }, { 492, 537 }, { 493, 497 }, { 493, 501 }, { 493, 538 }, { 494, 502 }, { 494, 539 }, { 495, 503 }, { 495, 540 }, { 496, 504 }, { 496, 541 }, { 497, 505 }, { 497, 542 }, { 498, 506 }, { 498, 543 }, { 499, 507 }, { 499, 543 }, { 500, 510 }, { 500, 546 }, { 501, 511 }, { 501, 546 }, { 502, 506 }, { 502, 547 }, { 503, 507 }, { 503, 548 }, { 504, 510 }, { 504, 549 }, { 505, 511 }, { 505, 550 }, { 506, 551 }, { 507, 552 }, { 508, 512 }, { 508, 514 }, { 508, 544 }, { 509, 513 }, { 509, 515 }, { 509, 545 }, { 510, 553 }, { 511, 554 }, { 512, 518 }, { 512, 547 }, { 513, 519 }, { 513, 548 }, { 514, 520 }, { 514, 549 }, { 515, 521 }, { 515, 550 }, { 516, 517 }, { 516, 524 }, { 516, 551 }, { 517, 525 }, { 517, 552 }, { 518, 520 }, { 518, 555 }, { 519, 521 }, { 519, 556 }, { 520, 557 }, { 521, 558 }, { 522, 523 }, { 522, 526 }, { 522, 553 }, { 523, 527 }, { 523, 554 }, { 524, 528 }, { 524, 555 }, { 525, 528 }, { 525, 556 }, { 526, 529 }, { 526, 557 }, { 527, 529 }, { 527, 558 }, { 528, 559 }, { 529, 559 }, { 530, 560 }, { 530, 561 }, { 531, 560 }, { 531, 562 }, { 532, 561 }, { 532, 563 }, { 533, 560 }, { 533, 564 }, { 534, 561 }, { 534, 565 }, { 535, 562 }, { 535, 566 }, { 536, 563 }, { 536, 566 }, { 537, 564 }, { 537, 567 }, { 538, 565 }, { 538, 567 }, { 539, 562 }, { 539, 568 }, { 540, 563 }, { 540, 569 }, { 541, 564 }, { 541, 570 }, { 542, 565 }, { 542, 571 }, { 543, 566 }, { 543, 572 }, { 544, 568 }, { 544, 570 }, { 545, 569 }, { 545, 571 }, { 546, 567 }, { 546, 573 }, { 547, 568 }, { 547, 574 }, { 548, 569 }, { 548, 575 }, { 549, 570 }, { 549, 576 }, { 550, 571 }, { 550, 577 }, { 551, 572 }, { 551, 574 }, { 552, 572 }, { 552, 575 }, { 553, 573 }, { 553, 576 }, { 554, 573 }, { 554, 577 }, { 555, 574 }, { 555, 578 }, { 556, 575 }, { 556, 579 }, { 557, 576 }, { 557, 578 }, { 558, 577 }, { 558, 579 }, { 559, 578 }, { 559, 579 }, { 560, 580 }, { 561, 581 }, { 562, 582 }, { 563, 583 }, { 564, 584 }, { 565, 585 }, { 566, 586 }, { 567, 587 }, { 568, 588 }, { 569, 589 }, { 570, 590 }, { 571, 591 }, { 572, 592 }, { 573, 593 }, { 574, 594 }, { 575, 595 }, { 576, 596 }, { 577, 597 }, { 578, 598 }, { 579, 599 }, { 580, 581 }, { 580, 582 }, { 580, 584 }, { 581, 583 }, { 581, 585 }, { 582, 586 }, { 582, 588 }, { 583, 586 }, { 583, 589 }, { 584, 587 }, { 584, 590 }, { 585, 587 }, { 585, 591 }, { 586, 592 }, { 587, 593 }, { 588, 590 }, { 588, 594 }, { 589, 591 }, { 589, 595 }, { 590, 596 }, { 591, 597 }, { 592, 594 }, { 592, 595 }, { 593, 596 }, { 593, 597 }, { 594, 598 }, { 595, 599 }, { 596, 598 }, { 597, 599 }, { 598, 599 } }; static const int face_120[NUM_FACE_120][VERT_PER_FACE_120] = { { 0, 1, 3, 6, 2 }, { 0, 1, 5, 7, 4 }, { 0, 1, 21, 40, 20 }, { 0, 2, 8, 10, 4 }, { 0, 2, 22, 41, 20 }, { 0, 4, 24, 43, 20 }, { 1, 3, 9, 11, 5 }, { 1, 3, 23, 42, 21 }, { 1, 5, 25, 44, 21 }, { 2, 6, 12, 14, 8 }, { 2, 6, 26, 45, 22 }, { 2, 8, 28, 49, 22 }, { 3, 6, 12, 15, 9 }, { 3, 6, 26, 46, 23 }, { 3, 9, 29, 50, 23 }, { 4, 7, 13, 16, 10 }, { 4, 7, 27, 47, 24 }, { 4, 10, 30, 51, 24 }, { 5, 7, 13, 17, 11 }, { 5, 7, 27, 48, 25 }, { 5, 11, 31, 52, 25 }, { 6, 12, 32, 53, 26 }, { 7, 13, 33, 56, 27 }, { 8, 10, 16, 18, 14 }, { 8, 10, 30, 54, 28 }, { 8, 14, 34, 57, 28 }, { 9, 11, 17, 19, 15 }, { 9, 11, 31, 55, 29 }, { 9, 15, 35, 58, 29 }, { 10, 16, 36, 59, 30 }, { 11, 17, 37, 60, 31 }, { 12, 14, 18, 19, 15 }, { 12, 14, 34, 61, 32 }, { 12, 15, 35, 62, 32 }, { 13, 16, 18, 19, 17 }, { 13, 16, 36, 63, 33 }, { 13, 17, 37, 64, 33 }, { 14, 18, 38, 65, 34 }, { 15, 19, 39, 66, 35 }, { 16, 18, 38, 67, 36 }, { 17, 19, 39, 68, 37 }, { 18, 19, 39, 69, 38 }, { 20, 40, 70, 72, 41 }, { 20, 40, 71, 74, 43 }, { 20, 41, 78, 80, 43 }, { 21, 40, 70, 73, 42 }, { 21, 40, 71, 75, 44 }, { 21, 42, 79, 81, 44 }, { 22, 41, 72, 76, 45 }, { 22, 41, 78, 84, 49 }, { 22, 45, 88, 94, 49 }, { 23, 42, 73, 77, 46 }, { 23, 42, 79, 85, 50 }, { 23, 46, 89, 95, 50 }, { 24, 43, 74, 82, 47 }, { 24, 43, 80, 86, 51 }, { 24, 47, 92, 96, 51 }, { 25, 44, 75, 83, 48 }, { 25, 44, 81, 87, 52 }, { 25, 48, 93, 97, 52 }, { 26, 45, 76, 77, 46 }, { 26, 45, 88, 98, 53 }, { 26, 46, 89, 99, 53 }, { 27, 47, 82, 83, 48 }, { 27, 47, 92, 100, 56 }, { 27, 48, 93, 101, 56 }, { 28, 49, 84, 90, 54 }, { 28, 49, 94, 102, 57 }, { 28, 54, 108, 112, 57 }, { 29, 50, 85, 91, 55 }, { 29, 50, 95, 103, 58 }, { 29, 55, 109, 113, 58 }, { 30, 51, 86, 90, 54 }, { 30, 51, 96, 104, 59 }, { 30, 54, 108, 114, 59 }, { 31, 52, 87, 91, 55 }, { 31, 52, 97, 105, 60 }, { 31, 55, 109, 115, 60 }, { 32, 53, 98, 106, 61 }, { 32, 53, 99, 107, 62 }, { 32, 61, 116, 117, 62 }, { 33, 56, 100, 110, 63 }, { 33, 56, 101, 111, 64 }, { 33, 63, 122, 123, 64 }, { 34, 57, 102, 106, 61 }, { 34, 57, 112, 118, 65 }, { 34, 61, 116, 124, 65 }, { 35, 58, 103, 107, 62 }, { 35, 58, 113, 119, 66 }, { 35, 62, 117, 125, 66 }, { 36, 59, 104, 110, 63 }, { 36, 59, 114, 120, 67 }, { 36, 63, 122, 126, 67 }, { 37, 60, 105, 111, 64 }, { 37, 60, 115, 121, 68 }, { 37, 64, 123, 127, 68 }, { 38, 65, 118, 120, 67 }, { 38, 65, 124, 128, 69 }, { 38, 67, 126, 129, 69 }, { 39, 66, 119, 121, 68 }, { 39, 66, 125, 128, 69 }, { 39, 68, 127, 129, 69 }, { 40, 70, 130, 131, 71 }, { 41, 72, 132, 136, 78 }, { 42, 73, 133, 137, 79 }, { 43, 74, 134, 138, 80 }, { 44, 75, 135, 139, 81 }, { 45, 76, 140, 144, 88 }, { 46, 77, 141, 145, 89 }, { 47, 82, 142, 150, 92 }, { 48, 83, 143, 151, 93 }, { 49, 84, 146, 152, 94 }, { 50, 85, 147, 153, 95 }, { 51, 86, 148, 154, 96 }, { 52, 87, 149, 155, 97 }, { 53, 98, 158, 159, 99 }, { 54, 90, 156, 162, 108 }, { 55, 91, 157, 163, 109 }, { 56, 100, 160, 161, 101 }, { 57, 102, 164, 170, 112 }, { 58, 103, 165, 171, 113 }, { 59, 104, 166, 172, 114 }, { 60, 105, 167, 173, 115 }, { 61, 106, 168, 176, 116 }, { 62, 107, 169, 177, 117 }, { 63, 110, 174, 178, 122 }, { 64, 111, 175, 179, 123 }, { 65, 118, 180, 184, 124 }, { 66, 119, 181, 185, 125 }, { 67, 120, 182, 186, 126 }, { 68, 121, 183, 187, 127 }, { 69, 128, 188, 189, 129 }, { 70, 72, 76, 77, 73 }, { 70, 72, 132, 190, 130 }, { 70, 73, 133, 191, 130 }, { 71, 74, 82, 83, 75 }, { 71, 74, 134, 192, 131 }, { 71, 75, 135, 193, 131 }, { 72, 76, 140, 196, 132 }, { 73, 77, 141, 197, 133 }, { 74, 82, 142, 198, 134 }, { 75, 83, 143, 199, 135 }, { 76, 77, 141, 200, 140 }, { 78, 80, 86, 90, 84 }, { 78, 80, 138, 194, 136 }, { 78, 84, 146, 201, 136 }, { 79, 81, 87, 91, 85 }, { 79, 81, 139, 195, 137 }, { 79, 85, 147, 202, 137 }, { 80, 86, 148, 203, 138 }, { 81, 87, 149, 204, 139 }, { 82, 83, 143, 205, 142 }, { 84, 90, 156, 212, 146 }, { 85, 91, 157, 213, 147 }, { 86, 90, 156, 214, 148 }, { 87, 91, 157, 215, 149 }, { 88, 94, 102, 106, 98 }, { 88, 94, 152, 206, 144 }, { 88, 98, 158, 210, 144 }, { 89, 95, 103, 107, 99 }, { 89, 95, 153, 207, 145 }, { 89, 99, 159, 211, 145 }, { 92, 96, 104, 110, 100 }, { 92, 96, 154, 208, 150 }, { 92, 100, 160, 216, 150 }, { 93, 97, 105, 111, 101 }, { 93, 97, 155, 209, 151 }, { 93, 101, 161, 217, 151 }, { 94, 102, 164, 218, 152 }, { 95, 103, 165, 219, 153 }, { 96, 104, 166, 220, 154 }, { 97, 105, 167, 221, 155 }, { 98, 106, 168, 222, 158 }, { 99, 107, 169, 223, 159 }, { 100, 110, 174, 228, 160 }, { 101, 111, 175, 229, 161 }, { 102, 106, 168, 230, 164 }, { 103, 107, 169, 231, 165 }, { 104, 110, 174, 232, 166 }, { 105, 111, 175, 233, 167 }, { 108, 112, 118, 120, 114 }, { 108, 112, 170, 224, 162 }, { 108, 114, 172, 226, 162 }, { 109, 113, 119, 121, 115 }, { 109, 113, 171, 225, 163 }, { 109, 115, 173, 227, 163 }, { 112, 118, 180, 235, 170 }, { 113, 119, 181, 236, 171 }, { 114, 120, 182, 237, 172 }, { 115, 121, 183, 238, 173 }, { 116, 117, 125, 128, 124 }, { 116, 117, 177, 234, 176 }, { 116, 124, 184, 240, 176 }, { 117, 125, 185, 241, 177 }, { 118, 120, 182, 244, 180 }, { 119, 121, 183, 245, 181 }, { 122, 123, 127, 129, 126 }, { 122, 123, 179, 239, 178 }, { 122, 126, 186, 242, 178 }, { 123, 127, 187, 243, 179 }, { 124, 128, 188, 246, 184 }, { 125, 128, 188, 247, 185 }, { 126, 129, 189, 248, 186 }, { 127, 129, 189, 249, 187 }, { 130, 131, 192, 250, 190 }, { 130, 131, 193, 251, 191 }, { 130, 190, 270, 271, 191 }, { 131, 192, 272, 273, 193 }, { 132, 136, 194, 250, 190 }, { 132, 136, 201, 252, 196 }, { 132, 190, 270, 274, 196 }, { 133, 137, 195, 251, 191 }, { 133, 137, 202, 253, 197 }, { 133, 191, 271, 275, 197 }, { 134, 138, 194, 250, 192 }, { 134, 138, 203, 254, 198 }, { 134, 192, 272, 276, 198 }, { 135, 139, 195, 251, 193 }, { 135, 139, 204, 255, 199 }, { 135, 193, 273, 277, 199 }, { 136, 194, 279, 282, 201 }, { 137, 195, 280, 283, 202 }, { 138, 194, 279, 284, 203 }, { 139, 195, 280, 285, 204 }, { 140, 144, 206, 252, 196 }, { 140, 144, 210, 256, 200 }, { 140, 196, 274, 278, 200 }, { 141, 145, 207, 253, 197 }, { 141, 145, 211, 256, 200 }, { 141, 197, 275, 278, 200 }, { 142, 150, 208, 254, 198 }, { 142, 150, 216, 257, 205 }, { 142, 198, 276, 281, 205 }, { 143, 151, 209, 255, 199 }, { 143, 151, 217, 257, 205 }, { 143, 199, 277, 281, 205 }, { 144, 206, 290, 294, 210 }, { 145, 207, 291, 295, 211 }, { 146, 152, 206, 252, 201 }, { 146, 152, 218, 258, 212 }, { 146, 201, 282, 286, 212 }, { 147, 153, 207, 253, 202 }, { 147, 153, 219, 259, 213 }, { 147, 202, 283, 287, 213 }, { 148, 154, 208, 254, 203 }, { 148, 154, 220, 260, 214 }, { 148, 203, 284, 288, 214 }, { 149, 155, 209, 255, 204 }, { 149, 155, 221, 261, 215 }, { 149, 204, 285, 289, 215 }, { 150, 208, 292, 296, 216 }, { 151, 209, 293, 297, 217 }, { 152, 206, 290, 298, 218 }, { 153, 207, 291, 299, 219 }, { 154, 208, 292, 300, 220 }, { 155, 209, 293, 301, 221 }, { 156, 162, 224, 258, 212 }, { 156, 162, 226, 260, 214 }, { 156, 212, 286, 288, 214 }, { 157, 163, 225, 259, 213 }, { 157, 163, 227, 261, 215 }, { 157, 213, 287, 289, 215 }, { 158, 159, 211, 256, 210 }, { 158, 159, 223, 262, 222 }, { 158, 210, 294, 302, 222 }, { 159, 211, 295, 303, 223 }, { 160, 161, 217, 257, 216 }, { 160, 161, 229, 263, 228 }, { 160, 216, 296, 304, 228 }, { 161, 217, 297, 305, 229 }, { 162, 224, 310, 312, 226 }, { 163, 225, 311, 313, 227 }, { 164, 170, 224, 258, 218 }, { 164, 170, 235, 264, 230 }, { 164, 218, 298, 306, 230 }, { 165, 171, 225, 259, 219 }, { 165, 171, 236, 265, 231 }, { 165, 219, 299, 307, 231 }, { 166, 172, 226, 260, 220 }, { 166, 172, 237, 266, 232 }, { 166, 220, 300, 308, 232 }, { 167, 173, 227, 261, 221 }, { 167, 173, 238, 267, 233 }, { 167, 221, 301, 309, 233 }, { 168, 176, 234, 262, 222 }, { 168, 176, 240, 264, 230 }, { 168, 222, 302, 306, 230 }, { 169, 177, 234, 262, 223 }, { 169, 177, 241, 265, 231 }, { 169, 223, 303, 307, 231 }, { 170, 224, 310, 314, 235 }, { 171, 225, 311, 315, 236 }, { 172, 226, 312, 316, 237 }, { 173, 227, 313, 317, 238 }, { 174, 178, 239, 263, 228 }, { 174, 178, 242, 266, 232 }, { 174, 228, 304, 308, 232 }, { 175, 179, 239, 263, 229 }, { 175, 179, 243, 267, 233 }, { 175, 229, 305, 309, 233 }, { 176, 234, 318, 322, 240 }, { 177, 234, 318, 323, 241 }, { 178, 239, 321, 324, 242 }, { 179, 239, 321, 325, 243 }, { 180, 184, 240, 264, 235 }, { 180, 184, 246, 268, 244 }, { 180, 235, 314, 319, 244 }, { 181, 185, 241, 265, 236 }, { 181, 185, 247, 269, 245 }, { 181, 236, 315, 320, 245 }, { 182, 186, 242, 266, 237 }, { 182, 186, 248, 268, 244 }, { 182, 237, 316, 319, 244 }, { 183, 187, 243, 267, 238 }, { 183, 187, 249, 269, 245 }, { 183, 238, 317, 320, 245 }, { 184, 240, 322, 326, 246 }, { 185, 241, 323, 327, 247 }, { 186, 242, 324, 328, 248 }, { 187, 243, 325, 329, 249 }, { 188, 189, 248, 268, 246 }, { 188, 189, 249, 269, 247 }, { 188, 246, 326, 327, 247 }, { 189, 248, 328, 329, 249 }, { 190, 250, 330, 350, 270 }, { 191, 251, 331, 351, 271 }, { 192, 250, 330, 352, 272 }, { 193, 251, 331, 353, 273 }, { 194, 250, 330, 354, 279 }, { 195, 251, 331, 355, 280 }, { 196, 252, 332, 356, 274 }, { 197, 253, 333, 357, 275 }, { 198, 254, 334, 358, 276 }, { 199, 255, 335, 359, 277 }, { 200, 256, 336, 360, 278 }, { 201, 252, 332, 361, 282 }, { 202, 253, 333, 362, 283 }, { 203, 254, 334, 363, 284 }, { 204, 255, 335, 364, 285 }, { 205, 257, 337, 365, 281 }, { 206, 252, 332, 366, 290 }, { 207, 253, 333, 367, 291 }, { 208, 254, 334, 368, 292 }, { 209, 255, 335, 369, 293 }, { 210, 256, 336, 370, 294 }, { 211, 256, 336, 371, 295 }, { 212, 258, 338, 372, 286 }, { 213, 259, 339, 373, 287 }, { 214, 260, 340, 374, 288 }, { 215, 261, 341, 375, 289 }, { 216, 257, 337, 376, 296 }, { 217, 257, 337, 377, 297 }, { 218, 258, 338, 378, 298 }, { 219, 259, 339, 379, 299 }, { 220, 260, 340, 380, 300 }, { 221, 261, 341, 381, 301 }, { 222, 262, 342, 382, 302 }, { 223, 262, 342, 383, 303 }, { 224, 258, 338, 384, 310 }, { 225, 259, 339, 385, 311 }, { 226, 260, 340, 386, 312 }, { 227, 261, 341, 387, 313 }, { 228, 263, 343, 388, 304 }, { 229, 263, 343, 389, 305 }, { 230, 264, 344, 390, 306 }, { 231, 265, 345, 391, 307 }, { 232, 266, 346, 392, 308 }, { 233, 267, 347, 393, 309 }, { 234, 262, 342, 394, 318 }, { 235, 264, 344, 395, 314 }, { 236, 265, 345, 396, 315 }, { 237, 266, 346, 397, 316 }, { 238, 267, 347, 398, 317 }, { 239, 263, 343, 399, 321 }, { 240, 264, 344, 400, 322 }, { 241, 265, 345, 401, 323 }, { 242, 266, 346, 402, 324 }, { 243, 267, 347, 403, 325 }, { 244, 268, 348, 404, 319 }, { 245, 269, 349, 405, 320 }, { 246, 268, 348, 406, 326 }, { 247, 269, 349, 407, 327 }, { 248, 268, 348, 408, 328 }, { 249, 269, 349, 409, 329 }, { 270, 271, 275, 278, 274 }, { 270, 271, 351, 410, 350 }, { 270, 274, 356, 412, 350 }, { 271, 275, 357, 413, 351 }, { 272, 273, 277, 281, 276 }, { 272, 273, 353, 411, 352 }, { 272, 276, 358, 414, 352 }, { 273, 277, 359, 415, 353 }, { 274, 278, 360, 420, 356 }, { 275, 278, 360, 421, 357 }, { 276, 281, 365, 422, 358 }, { 277, 281, 365, 423, 359 }, { 279, 282, 286, 288, 284 }, { 279, 282, 361, 416, 354 }, { 279, 284, 363, 418, 354 }, { 280, 283, 287, 289, 285 }, { 280, 283, 362, 417, 355 }, { 280, 285, 364, 419, 355 }, { 282, 286, 372, 426, 361 }, { 283, 287, 373, 427, 362 }, { 284, 288, 374, 428, 363 }, { 285, 289, 375, 429, 364 }, { 286, 288, 374, 436, 372 }, { 287, 289, 375, 437, 373 }, { 290, 294, 302, 306, 298 }, { 290, 294, 370, 424, 366 }, { 290, 298, 378, 432, 366 }, { 291, 295, 303, 307, 299 }, { 291, 295, 371, 425, 367 }, { 291, 299, 379, 433, 367 }, { 292, 296, 304, 308, 300 }, { 292, 296, 376, 430, 368 }, { 292, 300, 380, 434, 368 }, { 293, 297, 305, 309, 301 }, { 293, 297, 377, 431, 369 }, { 293, 301, 381, 435, 369 }, { 294, 302, 382, 438, 370 }, { 295, 303, 383, 439, 371 }, { 296, 304, 388, 440, 376 }, { 297, 305, 389, 441, 377 }, { 298, 306, 390, 444, 378 }, { 299, 307, 391, 445, 379 }, { 300, 308, 392, 446, 380 }, { 301, 309, 393, 447, 381 }, { 302, 306, 390, 448, 382 }, { 303, 307, 391, 449, 383 }, { 304, 308, 392, 454, 388 }, { 305, 309, 393, 455, 389 }, { 310, 312, 316, 319, 314 }, { 310, 312, 386, 442, 384 }, { 310, 314, 395, 450, 384 }, { 311, 313, 317, 320, 315 }, { 311, 313, 387, 443, 385 }, { 311, 315, 396, 451, 385 }, { 312, 316, 397, 452, 386 }, { 313, 317, 398, 453, 387 }, { 314, 319, 404, 460, 395 }, { 315, 320, 405, 461, 396 }, { 316, 319, 404, 462, 397 }, { 317, 320, 405, 463, 398 }, { 318, 322, 326, 327, 323 }, { 318, 322, 400, 456, 394 }, { 318, 323, 401, 457, 394 }, { 321, 324, 328, 329, 325 }, { 321, 324, 402, 458, 399 }, { 321, 325, 403, 459, 399 }, { 322, 326, 406, 464, 400 }, { 323, 327, 407, 465, 401 }, { 324, 328, 408, 466, 402 }, { 325, 329, 409, 467, 403 }, { 326, 327, 407, 468, 406 }, { 328, 329, 409, 469, 408 }, { 330, 350, 410, 411, 352 }, { 330, 350, 412, 416, 354 }, { 330, 352, 414, 418, 354 }, { 331, 351, 410, 411, 353 }, { 331, 351, 413, 417, 355 }, { 331, 353, 415, 419, 355 }, { 332, 356, 412, 416, 361 }, { 332, 356, 420, 424, 366 }, { 332, 361, 426, 432, 366 }, { 333, 357, 413, 417, 362 }, { 333, 357, 421, 425, 367 }, { 333, 362, 427, 433, 367 }, { 334, 358, 414, 418, 363 }, { 334, 358, 422, 430, 368 }, { 334, 363, 428, 434, 368 }, { 335, 359, 415, 419, 364 }, { 335, 359, 423, 431, 369 }, { 335, 364, 429, 435, 369 }, { 336, 360, 420, 424, 370 }, { 336, 360, 421, 425, 371 }, { 336, 370, 438, 439, 371 }, { 337, 365, 422, 430, 376 }, { 337, 365, 423, 431, 377 }, { 337, 376, 440, 441, 377 }, { 338, 372, 426, 432, 378 }, { 338, 372, 436, 442, 384 }, { 338, 378, 444, 450, 384 }, { 339, 373, 427, 433, 379 }, { 339, 373, 437, 443, 385 }, { 339, 379, 445, 451, 385 }, { 340, 374, 428, 434, 380 }, { 340, 374, 436, 442, 386 }, { 340, 380, 446, 452, 386 }, { 341, 375, 429, 435, 381 }, { 341, 375, 437, 443, 387 }, { 341, 381, 447, 453, 387 }, { 342, 382, 438, 439, 383 }, { 342, 382, 448, 456, 394 }, { 342, 383, 449, 457, 394 }, { 343, 388, 440, 441, 389 }, { 343, 388, 454, 458, 399 }, { 343, 389, 455, 459, 399 }, { 344, 390, 444, 450, 395 }, { 344, 390, 448, 456, 400 }, { 344, 395, 460, 464, 400 }, { 345, 391, 445, 451, 396 }, { 345, 391, 449, 457, 401 }, { 345, 396, 461, 465, 401 }, { 346, 392, 446, 452, 397 }, { 346, 392, 454, 458, 402 }, { 346, 397, 462, 466, 402 }, { 347, 393, 447, 453, 398 }, { 347, 393, 455, 459, 403 }, { 347, 398, 463, 467, 403 }, { 348, 404, 460, 464, 406 }, { 348, 404, 462, 466, 408 }, { 348, 406, 468, 469, 408 }, { 349, 405, 461, 465, 407 }, { 349, 405, 463, 467, 409 }, { 349, 407, 468, 469, 409 }, { 350, 410, 470, 472, 412 }, { 351, 410, 470, 473, 413 }, { 352, 411, 471, 474, 414 }, { 353, 411, 471, 475, 415 }, { 354, 416, 478, 480, 418 }, { 355, 417, 479, 481, 419 }, { 356, 412, 472, 476, 420 }, { 357, 413, 473, 477, 421 }, { 358, 414, 474, 482, 422 }, { 359, 415, 475, 483, 423 }, { 360, 420, 476, 477, 421 }, { 361, 416, 478, 484, 426 }, { 362, 417, 479, 485, 427 }, { 363, 418, 480, 486, 428 }, { 364, 419, 481, 487, 429 }, { 365, 422, 482, 483, 423 }, { 366, 424, 488, 494, 432 }, { 367, 425, 489, 495, 433 }, { 368, 430, 492, 496, 434 }, { 369, 431, 493, 497, 435 }, { 370, 424, 488, 498, 438 }, { 371, 425, 489, 499, 439 }, { 372, 426, 484, 490, 436 }, { 373, 427, 485, 491, 437 }, { 374, 428, 486, 490, 436 }, { 375, 429, 487, 491, 437 }, { 376, 430, 492, 500, 440 }, { 377, 431, 493, 501, 441 }, { 378, 432, 494, 502, 444 }, { 379, 433, 495, 503, 445 }, { 380, 434, 496, 504, 446 }, { 381, 435, 497, 505, 447 }, { 382, 438, 498, 506, 448 }, { 383, 439, 499, 507, 449 }, { 384, 442, 508, 512, 450 }, { 385, 443, 509, 513, 451 }, { 386, 442, 508, 514, 452 }, { 387, 443, 509, 515, 453 }, { 388, 440, 500, 510, 454 }, { 389, 441, 501, 511, 455 }, { 390, 444, 502, 506, 448 }, { 391, 445, 503, 507, 449 }, { 392, 446, 504, 510, 454 }, { 393, 447, 505, 511, 455 }, { 394, 456, 516, 517, 457 }, { 395, 450, 512, 518, 460 }, { 396, 451, 513, 519, 461 }, { 397, 452, 514, 520, 462 }, { 398, 453, 515, 521, 463 }, { 399, 458, 522, 523, 459 }, { 400, 456, 516, 524, 464 }, { 401, 457, 517, 525, 465 }, { 402, 458, 522, 526, 466 }, { 403, 459, 523, 527, 467 }, { 404, 460, 518, 520, 462 }, { 405, 461, 519, 521, 463 }, { 406, 464, 524, 528, 468 }, { 407, 465, 525, 528, 468 }, { 408, 466, 526, 529, 469 }, { 409, 467, 527, 529, 469 }, { 410, 411, 471, 530, 470 }, { 412, 416, 478, 531, 472 }, { 413, 417, 479, 532, 473 }, { 414, 418, 480, 533, 474 }, { 415, 419, 481, 534, 475 }, { 420, 424, 488, 535, 476 }, { 421, 425, 489, 536, 477 }, { 422, 430, 492, 537, 482 }, { 423, 431, 493, 538, 483 }, { 426, 432, 494, 539, 484 }, { 427, 433, 495, 540, 485 }, { 428, 434, 496, 541, 486 }, { 429, 435, 497, 542, 487 }, { 436, 442, 508, 544, 490 }, { 437, 443, 509, 545, 491 }, { 438, 439, 499, 543, 498 }, { 440, 441, 501, 546, 500 }, { 444, 450, 512, 547, 502 }, { 445, 451, 513, 548, 503 }, { 446, 452, 514, 549, 504 }, { 447, 453, 515, 550, 505 }, { 448, 456, 516, 551, 506 }, { 449, 457, 517, 552, 507 }, { 454, 458, 522, 553, 510 }, { 455, 459, 523, 554, 511 }, { 460, 464, 524, 555, 518 }, { 461, 465, 525, 556, 519 }, { 462, 466, 526, 557, 520 }, { 463, 467, 527, 558, 521 }, { 468, 469, 529, 559, 528 }, { 470, 472, 476, 477, 473 }, { 470, 472, 531, 560, 530 }, { 470, 473, 532, 561, 530 }, { 471, 474, 482, 483, 475 }, { 471, 474, 533, 560, 530 }, { 471, 475, 534, 561, 530 }, { 472, 476, 535, 562, 531 }, { 473, 477, 536, 563, 532 }, { 474, 482, 537, 564, 533 }, { 475, 483, 538, 565, 534 }, { 476, 477, 536, 566, 535 }, { 478, 480, 486, 490, 484 }, { 478, 480, 533, 560, 531 }, { 478, 484, 539, 562, 531 }, { 479, 481, 487, 491, 485 }, { 479, 481, 534, 561, 532 }, { 479, 485, 540, 563, 532 }, { 480, 486, 541, 564, 533 }, { 481, 487, 542, 565, 534 }, { 482, 483, 538, 567, 537 }, { 484, 490, 544, 568, 539 }, { 485, 491, 545, 569, 540 }, { 486, 490, 544, 570, 541 }, { 487, 491, 545, 571, 542 }, { 488, 494, 502, 506, 498 }, { 488, 494, 539, 562, 535 }, { 488, 498, 543, 566, 535 }, { 489, 495, 503, 507, 499 }, { 489, 495, 540, 563, 536 }, { 489, 499, 543, 566, 536 }, { 492, 496, 504, 510, 500 }, { 492, 496, 541, 564, 537 }, { 492, 500, 546, 567, 537 }, { 493, 497, 505, 511, 501 }, { 493, 497, 542, 565, 538 }, { 493, 501, 546, 567, 538 }, { 494, 502, 547, 568, 539 }, { 495, 503, 548, 569, 540 }, { 496, 504, 549, 570, 541 }, { 497, 505, 550, 571, 542 }, { 498, 506, 551, 572, 543 }, { 499, 507, 552, 572, 543 }, { 500, 510, 553, 573, 546 }, { 501, 511, 554, 573, 546 }, { 502, 506, 551, 574, 547 }, { 503, 507, 552, 575, 548 }, { 504, 510, 553, 576, 549 }, { 505, 511, 554, 577, 550 }, { 508, 512, 518, 520, 514 }, { 508, 512, 547, 568, 544 }, { 508, 514, 549, 570, 544 }, { 509, 513, 519, 521, 515 }, { 509, 513, 548, 569, 545 }, { 509, 515, 550, 571, 545 }, { 512, 518, 555, 574, 547 }, { 513, 519, 556, 575, 548 }, { 514, 520, 557, 576, 549 }, { 515, 521, 558, 577, 550 }, { 516, 517, 525, 528, 524 }, { 516, 517, 552, 572, 551 }, { 516, 524, 555, 574, 551 }, { 517, 525, 556, 575, 552 }, { 518, 520, 557, 578, 555 }, { 519, 521, 558, 579, 556 }, { 522, 523, 527, 529, 526 }, { 522, 523, 554, 573, 553 }, { 522, 526, 557, 576, 553 }, { 523, 527, 558, 577, 554 }, { 524, 528, 559, 578, 555 }, { 525, 528, 559, 579, 556 }, { 526, 529, 559, 578, 557 }, { 527, 529, 559, 579, 558 }, { 530, 560, 580, 581, 561 }, { 531, 560, 580, 582, 562 }, { 532, 561, 581, 583, 563 }, { 533, 560, 580, 584, 564 }, { 534, 561, 581, 585, 565 }, { 535, 562, 582, 586, 566 }, { 536, 563, 583, 586, 566 }, { 537, 564, 584, 587, 567 }, { 538, 565, 585, 587, 567 }, { 539, 562, 582, 588, 568 }, { 540, 563, 583, 589, 569 }, { 541, 564, 584, 590, 570 }, { 542, 565, 585, 591, 571 }, { 543, 566, 586, 592, 572 }, { 544, 568, 588, 590, 570 }, { 545, 569, 589, 591, 571 }, { 546, 567, 587, 593, 573 }, { 547, 568, 588, 594, 574 }, { 548, 569, 589, 595, 575 }, { 549, 570, 590, 596, 576 }, { 550, 571, 591, 597, 577 }, { 551, 572, 592, 594, 574 }, { 552, 572, 592, 595, 575 }, { 553, 573, 593, 596, 576 }, { 554, 573, 593, 597, 577 }, { 555, 574, 594, 598, 578 }, { 556, 575, 595, 599, 579 }, { 557, 576, 596, 598, 578 }, { 558, 577, 597, 599, 579 }, { 559, 578, 598, 599, 579 }, { 580, 581, 583, 586, 582 }, { 580, 581, 585, 587, 584 }, { 580, 582, 588, 590, 584 }, { 581, 583, 589, 591, 585 }, { 582, 586, 592, 594, 588 }, { 583, 586, 592, 595, 589 }, { 584, 587, 593, 596, 590 }, { 585, 587, 593, 597, 591 }, { 588, 590, 596, 598, 594 }, { 589, 591, 597, 599, 595 }, { 592, 594, 598, 599, 595 }, { 593, 596, 598, 599, 597 } }; static const float vert_600[NUM_VERT_600][4] = { { 0.0, 0.0, 0.0, -2.0 }, { 0.0, -GOLDENINV, -1.0, -GOLDEN }, { 0.0, GOLDENINV, -1.0, -GOLDEN }, { -1.0, 0.0, -GOLDENINV, -GOLDEN }, { 1.0, 0.0, -GOLDENINV, -GOLDEN }, { -GOLDENINV, -1.0, 0.0, -GOLDEN }, { GOLDENINV, -1.0, 0.0, -GOLDEN }, { -GOLDENINV, 1.0, 0.0, -GOLDEN }, { GOLDENINV, 1.0, 0.0, -GOLDEN }, { -1.0, 0.0, GOLDENINV, -GOLDEN }, { 1.0, 0.0, GOLDENINV, -GOLDEN }, { 0.0, -GOLDENINV, 1.0, -GOLDEN }, { 0.0, GOLDENINV, 1.0, -GOLDEN }, { -GOLDENINV, 0.0, -GOLDEN, -1.0 }, { GOLDENINV, 0.0, -GOLDEN, -1.0 }, { -1.0, -1.0, -1.0, -1.0 }, { 1.0, -1.0, -1.0, -1.0 }, { -1.0, 1.0, -1.0, -1.0 }, { 1.0, 1.0, -1.0, -1.0 }, { 0.0, -GOLDEN, -GOLDENINV, -1.0 }, { 0.0, GOLDEN, -GOLDENINV, -1.0 }, { -GOLDEN, -GOLDENINV, 0.0, -1.0 }, { GOLDEN, -GOLDENINV, 0.0, -1.0 }, { -GOLDEN, GOLDENINV, 0.0, -1.0 }, { GOLDEN, GOLDENINV, 0.0, -1.0 }, { 0.0, -GOLDEN, GOLDENINV, -1.0 }, { 0.0, GOLDEN, GOLDENINV, -1.0 }, { -1.0, -1.0, 1.0, -1.0 }, { 1.0, -1.0, 1.0, -1.0 }, { -1.0, 1.0, 1.0, -1.0 }, { 1.0, 1.0, 1.0, -1.0 }, { -GOLDENINV, 0.0, GOLDEN, -1.0 }, { GOLDENINV, 0.0, GOLDEN, -1.0 }, { 0.0, -1.0, -GOLDEN, -GOLDENINV }, { 0.0, 1.0, -GOLDEN, -GOLDENINV }, { -GOLDEN, 0.0, -1.0, -GOLDENINV }, { GOLDEN, 0.0, -1.0, -GOLDENINV }, { -1.0, -GOLDEN, 0.0, -GOLDENINV }, { 1.0, -GOLDEN, 0.0, -GOLDENINV }, { -1.0, GOLDEN, 0.0, -GOLDENINV }, { 1.0, GOLDEN, 0.0, -GOLDENINV }, { -GOLDEN, 0.0, 1.0, -GOLDENINV }, { GOLDEN, 0.0, 1.0, -GOLDENINV }, { 0.0, -1.0, GOLDEN, -GOLDENINV }, { 0.0, 1.0, GOLDEN, -GOLDENINV }, { 0.0, 0.0, -2.0, 0.0 }, { -1.0, -GOLDENINV, -GOLDEN, 0.0 }, { 1.0, -GOLDENINV, -GOLDEN, 0.0 }, { -1.0, GOLDENINV, -GOLDEN, 0.0 }, { 1.0, GOLDENINV, -GOLDEN, 0.0 }, { -GOLDENINV, -GOLDEN, -1.0, 0.0 }, { GOLDENINV, -GOLDEN, -1.0, 0.0 }, { -GOLDENINV, GOLDEN, -1.0, 0.0 }, { GOLDENINV, GOLDEN, -1.0, 0.0 }, { -GOLDEN, -1.0, -GOLDENINV, 0.0 }, { GOLDEN, -1.0, -GOLDENINV, 0.0 }, { -GOLDEN, 1.0, -GOLDENINV, 0.0 }, { GOLDEN, 1.0, -GOLDENINV, 0.0 }, { 0.0, -2.0, 0.0, 0.0 }, { -2.0, 0.0, 0.0, 0.0 }, { 2.0, 0.0, 0.0, 0.0 }, { 0.0, 2.0, 0.0, 0.0 }, { -GOLDEN, -1.0, GOLDENINV, 0.0 }, { GOLDEN, -1.0, GOLDENINV, 0.0 }, { -GOLDEN, 1.0, GOLDENINV, 0.0 }, { GOLDEN, 1.0, GOLDENINV, 0.0 }, { -GOLDENINV, -GOLDEN, 1.0, 0.0 }, { GOLDENINV, -GOLDEN, 1.0, 0.0 }, { -GOLDENINV, GOLDEN, 1.0, 0.0 }, { GOLDENINV, GOLDEN, 1.0, 0.0 }, { -1.0, -GOLDENINV, GOLDEN, 0.0 }, { 1.0, -GOLDENINV, GOLDEN, 0.0 }, { -1.0, GOLDENINV, GOLDEN, 0.0 }, { 1.0, GOLDENINV, GOLDEN, 0.0 }, { 0.0, 0.0, 2.0, 0.0 }, { 0.0, -1.0, -GOLDEN, GOLDENINV }, { 0.0, 1.0, -GOLDEN, GOLDENINV }, { -GOLDEN, 0.0, -1.0, GOLDENINV }, { GOLDEN, 0.0, -1.0, GOLDENINV }, { -1.0, -GOLDEN, 0.0, GOLDENINV }, { 1.0, -GOLDEN, 0.0, GOLDENINV }, { -1.0, GOLDEN, 0.0, GOLDENINV }, { 1.0, GOLDEN, 0.0, GOLDENINV }, { -GOLDEN, 0.0, 1.0, GOLDENINV }, { GOLDEN, 0.0, 1.0, GOLDENINV }, { 0.0, -1.0, GOLDEN, GOLDENINV }, { 0.0, 1.0, GOLDEN, GOLDENINV }, { -GOLDENINV, 0.0, -GOLDEN, 1.0 }, { GOLDENINV, 0.0, -GOLDEN, 1.0 }, { -1.0, -1.0, -1.0, 1.0 }, { 1.0, -1.0, -1.0, 1.0 }, { -1.0, 1.0, -1.0, 1.0 }, { 1.0, 1.0, -1.0, 1.0 }, { 0.0, -GOLDEN, -GOLDENINV, 1.0 }, { 0.0, GOLDEN, -GOLDENINV, 1.0 }, { -GOLDEN, -GOLDENINV, 0.0, 1.0 }, { GOLDEN, -GOLDENINV, 0.0, 1.0 }, { -GOLDEN, GOLDENINV, 0.0, 1.0 }, { GOLDEN, GOLDENINV, 0.0, 1.0 }, { 0.0, -GOLDEN, GOLDENINV, 1.0 }, { 0.0, GOLDEN, GOLDENINV, 1.0 }, { -1.0, -1.0, 1.0, 1.0 }, { 1.0, -1.0, 1.0, 1.0 }, { -1.0, 1.0, 1.0, 1.0 }, { 1.0, 1.0, 1.0, 1.0 }, { -GOLDENINV, 0.0, GOLDEN, 1.0 }, { GOLDENINV, 0.0, GOLDEN, 1.0 }, { 0.0, -GOLDENINV, -1.0, GOLDEN }, { 0.0, GOLDENINV, -1.0, GOLDEN }, { -1.0, 0.0, -GOLDENINV, GOLDEN }, { 1.0, 0.0, -GOLDENINV, GOLDEN }, { -GOLDENINV, -1.0, 0.0, GOLDEN }, { GOLDENINV, -1.0, 0.0, GOLDEN }, { -GOLDENINV, 1.0, 0.0, GOLDEN }, { GOLDENINV, 1.0, 0.0, GOLDEN }, { -1.0, 0.0, GOLDENINV, GOLDEN }, { 1.0, 0.0, GOLDENINV, GOLDEN }, { 0.0, -GOLDENINV, 1.0, GOLDEN }, { 0.0, GOLDENINV, 1.0, GOLDEN }, { 0.0, 0.0, 0.0, 2.0 } }; static const int edge_600[NUM_EDGE_600][2] = { { 0, 1 }, { 0, 2 }, { 0, 3 }, { 0, 4 }, { 0, 5 }, { 0, 6 }, { 0, 7 }, { 0, 8 }, { 0, 9 }, { 0, 10 }, { 0, 11 }, { 0, 12 }, { 1, 2 }, { 1, 3 }, { 1, 4 }, { 1, 5 }, { 1, 6 }, { 1, 13 }, { 1, 14 }, { 1, 15 }, { 1, 16 }, { 1, 19 }, { 1, 33 }, { 2, 3 }, { 2, 4 }, { 2, 7 }, { 2, 8 }, { 2, 13 }, { 2, 14 }, { 2, 17 }, { 2, 18 }, { 2, 20 }, { 2, 34 }, { 3, 5 }, { 3, 7 }, { 3, 9 }, { 3, 13 }, { 3, 15 }, { 3, 17 }, { 3, 21 }, { 3, 23 }, { 3, 35 }, { 4, 6 }, { 4, 8 }, { 4, 10 }, { 4, 14 }, { 4, 16 }, { 4, 18 }, { 4, 22 }, { 4, 24 }, { 4, 36 }, { 5, 6 }, { 5, 9 }, { 5, 11 }, { 5, 15 }, { 5, 19 }, { 5, 21 }, { 5, 25 }, { 5, 27 }, { 5, 37 }, { 6, 10 }, { 6, 11 }, { 6, 16 }, { 6, 19 }, { 6, 22 }, { 6, 25 }, { 6, 28 }, { 6, 38 }, { 7, 8 }, { 7, 9 }, { 7, 12 }, { 7, 17 }, { 7, 20 }, { 7, 23 }, { 7, 26 }, { 7, 29 }, { 7, 39 }, { 8, 10 }, { 8, 12 }, { 8, 18 }, { 8, 20 }, { 8, 24 }, { 8, 26 }, { 8, 30 }, { 8, 40 }, { 9, 11 }, { 9, 12 }, { 9, 21 }, { 9, 23 }, { 9, 27 }, { 9, 29 }, { 9, 31 }, { 9, 41 }, { 10, 11 }, { 10, 12 }, { 10, 22 }, { 10, 24 }, { 10, 28 }, { 10, 30 }, { 10, 32 }, { 10, 42 }, { 11, 12 }, { 11, 25 }, { 11, 27 }, { 11, 28 }, { 11, 31 }, { 11, 32 }, { 11, 43 }, { 12, 26 }, { 12, 29 }, { 12, 30 }, { 12, 31 }, { 12, 32 }, { 12, 44 }, { 13, 14 }, { 13, 15 }, { 13, 17 }, { 13, 33 }, { 13, 34 }, { 13, 35 }, { 13, 45 }, { 13, 46 }, { 13, 48 }, { 14, 16 }, { 14, 18 }, { 14, 33 }, { 14, 34 }, { 14, 36 }, { 14, 45 }, { 14, 47 }, { 14, 49 }, { 15, 19 }, { 15, 21 }, { 15, 33 }, { 15, 35 }, { 15, 37 }, { 15, 46 }, { 15, 50 }, { 15, 54 }, { 16, 19 }, { 16, 22 }, { 16, 33 }, { 16, 36 }, { 16, 38 }, { 16, 47 }, { 16, 51 }, { 16, 55 }, { 17, 20 }, { 17, 23 }, { 17, 34 }, { 17, 35 }, { 17, 39 }, { 17, 48 }, { 17, 52 }, { 17, 56 }, { 18, 20 }, { 18, 24 }, { 18, 34 }, { 18, 36 }, { 18, 40 }, { 18, 49 }, { 18, 53 }, { 18, 57 }, { 19, 25 }, { 19, 33 }, { 19, 37 }, { 19, 38 }, { 19, 50 }, { 19, 51 }, { 19, 58 }, { 20, 26 }, { 20, 34 }, { 20, 39 }, { 20, 40 }, { 20, 52 }, { 20, 53 }, { 20, 61 }, { 21, 23 }, { 21, 27 }, { 21, 35 }, { 21, 37 }, { 21, 41 }, { 21, 54 }, { 21, 59 }, { 21, 62 }, { 22, 24 }, { 22, 28 }, { 22, 36 }, { 22, 38 }, { 22, 42 }, { 22, 55 }, { 22, 60 }, { 22, 63 }, { 23, 29 }, { 23, 35 }, { 23, 39 }, { 23, 41 }, { 23, 56 }, { 23, 59 }, { 23, 64 }, { 24, 30 }, { 24, 36 }, { 24, 40 }, { 24, 42 }, { 24, 57 }, { 24, 60 }, { 24, 65 }, { 25, 27 }, { 25, 28 }, { 25, 37 }, { 25, 38 }, { 25, 43 }, { 25, 58 }, { 25, 66 }, { 25, 67 }, { 26, 29 }, { 26, 30 }, { 26, 39 }, { 26, 40 }, { 26, 44 }, { 26, 61 }, { 26, 68 }, { 26, 69 }, { 27, 31 }, { 27, 37 }, { 27, 41 }, { 27, 43 }, { 27, 62 }, { 27, 66 }, { 27, 70 }, { 28, 32 }, { 28, 38 }, { 28, 42 }, { 28, 43 }, { 28, 63 }, { 28, 67 }, { 28, 71 }, { 29, 31 }, { 29, 39 }, { 29, 41 }, { 29, 44 }, { 29, 64 }, { 29, 68 }, { 29, 72 }, { 30, 32 }, { 30, 40 }, { 30, 42 }, { 30, 44 }, { 30, 65 }, { 30, 69 }, { 30, 73 }, { 31, 32 }, { 31, 41 }, { 31, 43 }, { 31, 44 }, { 31, 70 }, { 31, 72 }, { 31, 74 }, { 32, 42 }, { 32, 43 }, { 32, 44 }, { 32, 71 }, { 32, 73 }, { 32, 74 }, { 33, 45 }, { 33, 46 }, { 33, 47 }, { 33, 50 }, { 33, 51 }, { 33, 75 }, { 34, 45 }, { 34, 48 }, { 34, 49 }, { 34, 52 }, { 34, 53 }, { 34, 76 }, { 35, 46 }, { 35, 48 }, { 35, 54 }, { 35, 56 }, { 35, 59 }, { 35, 77 }, { 36, 47 }, { 36, 49 }, { 36, 55 }, { 36, 57 }, { 36, 60 }, { 36, 78 }, { 37, 50 }, { 37, 54 }, { 37, 58 }, { 37, 62 }, { 37, 66 }, { 37, 79 }, { 38, 51 }, { 38, 55 }, { 38, 58 }, { 38, 63 }, { 38, 67 }, { 38, 80 }, { 39, 52 }, { 39, 56 }, { 39, 61 }, { 39, 64 }, { 39, 68 }, { 39, 81 }, { 40, 53 }, { 40, 57 }, { 40, 61 }, { 40, 65 }, { 40, 69 }, { 40, 82 }, { 41, 59 }, { 41, 62 }, { 41, 64 }, { 41, 70 }, { 41, 72 }, { 41, 83 }, { 42, 60 }, { 42, 63 }, { 42, 65 }, { 42, 71 }, { 42, 73 }, { 42, 84 }, { 43, 66 }, { 43, 67 }, { 43, 70 }, { 43, 71 }, { 43, 74 }, { 43, 85 }, { 44, 68 }, { 44, 69 }, { 44, 72 }, { 44, 73 }, { 44, 74 }, { 44, 86 }, { 45, 46 }, { 45, 47 }, { 45, 48 }, { 45, 49 }, { 45, 75 }, { 45, 76 }, { 45, 87 }, { 45, 88 }, { 46, 48 }, { 46, 50 }, { 46, 54 }, { 46, 75 }, { 46, 77 }, { 46, 87 }, { 46, 89 }, { 47, 49 }, { 47, 51 }, { 47, 55 }, { 47, 75 }, { 47, 78 }, { 47, 88 }, { 47, 90 }, { 48, 52 }, { 48, 56 }, { 48, 76 }, { 48, 77 }, { 48, 87 }, { 48, 91 }, { 49, 53 }, { 49, 57 }, { 49, 76 }, { 49, 78 }, { 49, 88 }, { 49, 92 }, { 50, 51 }, { 50, 54 }, { 50, 58 }, { 50, 75 }, { 50, 79 }, { 50, 89 }, { 50, 93 }, { 51, 55 }, { 51, 58 }, { 51, 75 }, { 51, 80 }, { 51, 90 }, { 51, 93 }, { 52, 53 }, { 52, 56 }, { 52, 61 }, { 52, 76 }, { 52, 81 }, { 52, 91 }, { 52, 94 }, { 53, 57 }, { 53, 61 }, { 53, 76 }, { 53, 82 }, { 53, 92 }, { 53, 94 }, { 54, 59 }, { 54, 62 }, { 54, 77 }, { 54, 79 }, { 54, 89 }, { 54, 95 }, { 55, 60 }, { 55, 63 }, { 55, 78 }, { 55, 80 }, { 55, 90 }, { 55, 96 }, { 56, 59 }, { 56, 64 }, { 56, 77 }, { 56, 81 }, { 56, 91 }, { 56, 97 }, { 57, 60 }, { 57, 65 }, { 57, 78 }, { 57, 82 }, { 57, 92 }, { 57, 98 }, { 58, 66 }, { 58, 67 }, { 58, 79 }, { 58, 80 }, { 58, 93 }, { 58, 99 }, { 59, 62 }, { 59, 64 }, { 59, 77 }, { 59, 83 }, { 59, 95 }, { 59, 97 }, { 60, 63 }, { 60, 65 }, { 60, 78 }, { 60, 84 }, { 60, 96 }, { 60, 98 }, { 61, 68 }, { 61, 69 }, { 61, 81 }, { 61, 82 }, { 61, 94 }, { 61, 100 }, { 62, 66 }, { 62, 70 }, { 62, 79 }, { 62, 83 }, { 62, 95 }, { 62, 101 }, { 63, 67 }, { 63, 71 }, { 63, 80 }, { 63, 84 }, { 63, 96 }, { 63, 102 }, { 64, 68 }, { 64, 72 }, { 64, 81 }, { 64, 83 }, { 64, 97 }, { 64, 103 }, { 65, 69 }, { 65, 73 }, { 65, 82 }, { 65, 84 }, { 65, 98 }, { 65, 104 }, { 66, 67 }, { 66, 70 }, { 66, 79 }, { 66, 85 }, { 66, 99 }, { 66, 101 }, { 67, 71 }, { 67, 80 }, { 67, 85 }, { 67, 99 }, { 67, 102 }, { 68, 69 }, { 68, 72 }, { 68, 81 }, { 68, 86 }, { 68, 100 }, { 68, 103 }, { 69, 73 }, { 69, 82 }, { 69, 86 }, { 69, 100 }, { 69, 104 }, { 70, 72 }, { 70, 74 }, { 70, 83 }, { 70, 85 }, { 70, 101 }, { 70, 105 }, { 71, 73 }, { 71, 74 }, { 71, 84 }, { 71, 85 }, { 71, 102 }, { 71, 106 }, { 72, 74 }, { 72, 83 }, { 72, 86 }, { 72, 103 }, { 72, 105 }, { 73, 74 }, { 73, 84 }, { 73, 86 }, { 73, 104 }, { 73, 106 }, { 74, 85 }, { 74, 86 }, { 74, 105 }, { 74, 106 }, { 75, 87 }, { 75, 88 }, { 75, 89 }, { 75, 90 }, { 75, 93 }, { 75, 107 }, { 76, 87 }, { 76, 88 }, { 76, 91 }, { 76, 92 }, { 76, 94 }, { 76, 108 }, { 77, 87 }, { 77, 89 }, { 77, 91 }, { 77, 95 }, { 77, 97 }, { 77, 109 }, { 78, 88 }, { 78, 90 }, { 78, 92 }, { 78, 96 }, { 78, 98 }, { 78, 110 }, { 79, 89 }, { 79, 93 }, { 79, 95 }, { 79, 99 }, { 79, 101 }, { 79, 111 }, { 80, 90 }, { 80, 93 }, { 80, 96 }, { 80, 99 }, { 80, 102 }, { 80, 112 }, { 81, 91 }, { 81, 94 }, { 81, 97 }, { 81, 100 }, { 81, 103 }, { 81, 113 }, { 82, 92 }, { 82, 94 }, { 82, 98 }, { 82, 100 }, { 82, 104 }, { 82, 114 }, { 83, 95 }, { 83, 97 }, { 83, 101 }, { 83, 103 }, { 83, 105 }, { 83, 115 }, { 84, 96 }, { 84, 98 }, { 84, 102 }, { 84, 104 }, { 84, 106 }, { 84, 116 }, { 85, 99 }, { 85, 101 }, { 85, 102 }, { 85, 105 }, { 85, 106 }, { 85, 117 }, { 86, 100 }, { 86, 103 }, { 86, 104 }, { 86, 105 }, { 86, 106 }, { 86, 118 }, { 87, 88 }, { 87, 89 }, { 87, 91 }, { 87, 107 }, { 87, 108 }, { 87, 109 }, { 88, 90 }, { 88, 92 }, { 88, 107 }, { 88, 108 }, { 88, 110 }, { 89, 93 }, { 89, 95 }, { 89, 107 }, { 89, 109 }, { 89, 111 }, { 90, 93 }, { 90, 96 }, { 90, 107 }, { 90, 110 }, { 90, 112 }, { 91, 94 }, { 91, 97 }, { 91, 108 }, { 91, 109 }, { 91, 113 }, { 92, 94 }, { 92, 98 }, { 92, 108 }, { 92, 110 }, { 92, 114 }, { 93, 99 }, { 93, 107 }, { 93, 111 }, { 93, 112 }, { 94, 100 }, { 94, 108 }, { 94, 113 }, { 94, 114 }, { 95, 97 }, { 95, 101 }, { 95, 109 }, { 95, 111 }, { 95, 115 }, { 96, 98 }, { 96, 102 }, { 96, 110 }, { 96, 112 }, { 96, 116 }, { 97, 103 }, { 97, 109 }, { 97, 113 }, { 97, 115 }, { 98, 104 }, { 98, 110 }, { 98, 114 }, { 98, 116 }, { 99, 101 }, { 99, 102 }, { 99, 111 }, { 99, 112 }, { 99, 117 }, { 100, 103 }, { 100, 104 }, { 100, 113 }, { 100, 114 }, { 100, 118 }, { 101, 105 }, { 101, 111 }, { 101, 115 }, { 101, 117 }, { 102, 106 }, { 102, 112 }, { 102, 116 }, { 102, 117 }, { 103, 105 }, { 103, 113 }, { 103, 115 }, { 103, 118 }, { 104, 106 }, { 104, 114 }, { 104, 116 }, { 104, 118 }, { 105, 106 }, { 105, 115 }, { 105, 117 }, { 105, 118 }, { 106, 116 }, { 106, 117 }, { 106, 118 }, { 107, 108 }, { 107, 109 }, { 107, 110 }, { 107, 111 }, { 107, 112 }, { 107, 119 }, { 108, 109 }, { 108, 110 }, { 108, 113 }, { 108, 114 }, { 108, 119 }, { 109, 111 }, { 109, 113 }, { 109, 115 }, { 109, 119 }, { 110, 112 }, { 110, 114 }, { 110, 116 }, { 110, 119 }, { 111, 112 }, { 111, 115 }, { 111, 117 }, { 111, 119 }, { 112, 116 }, { 112, 117 }, { 112, 119 }, { 113, 114 }, { 113, 115 }, { 113, 118 }, { 113, 119 }, { 114, 116 }, { 114, 118 }, { 114, 119 }, { 115, 117 }, { 115, 118 }, { 115, 119 }, { 116, 117 }, { 116, 118 }, { 116, 119 }, { 117, 118 }, { 117, 119 }, { 118, 119 } }; static const int face_600[NUM_FACE_600][VERT_PER_FACE_600] = { { 0, 1, 2 }, { 0, 1, 3 }, { 0, 1, 4 }, { 0, 1, 5 }, { 0, 1, 6 }, { 0, 2, 3 }, { 0, 2, 4 }, { 0, 2, 7 }, { 0, 2, 8 }, { 0, 3, 5 }, { 0, 3, 7 }, { 0, 3, 9 }, { 0, 4, 6 }, { 0, 4, 8 }, { 0, 4, 10 }, { 0, 5, 6 }, { 0, 5, 9 }, { 0, 5, 11 }, { 0, 6, 10 }, { 0, 6, 11 }, { 0, 7, 8 }, { 0, 7, 9 }, { 0, 7, 12 }, { 0, 8, 10 }, { 0, 8, 12 }, { 0, 9, 11 }, { 0, 9, 12 }, { 0, 10, 11 }, { 0, 10, 12 }, { 0, 11, 12 }, { 1, 2, 3 }, { 1, 2, 4 }, { 1, 2, 13 }, { 1, 2, 14 }, { 1, 3, 5 }, { 1, 3, 13 }, { 1, 3, 15 }, { 1, 4, 6 }, { 1, 4, 14 }, { 1, 4, 16 }, { 1, 5, 6 }, { 1, 5, 15 }, { 1, 5, 19 }, { 1, 6, 16 }, { 1, 6, 19 }, { 1, 13, 14 }, { 1, 13, 15 }, { 1, 13, 33 }, { 1, 14, 16 }, { 1, 14, 33 }, { 1, 15, 19 }, { 1, 15, 33 }, { 1, 16, 19 }, { 1, 16, 33 }, { 1, 19, 33 }, { 2, 3, 7 }, { 2, 3, 13 }, { 2, 3, 17 }, { 2, 4, 8 }, { 2, 4, 14 }, { 2, 4, 18 }, { 2, 7, 8 }, { 2, 7, 17 }, { 2, 7, 20 }, { 2, 8, 18 }, { 2, 8, 20 }, { 2, 13, 14 }, { 2, 13, 17 }, { 2, 13, 34 }, { 2, 14, 18 }, { 2, 14, 34 }, { 2, 17, 20 }, { 2, 17, 34 }, { 2, 18, 20 }, { 2, 18, 34 }, { 2, 20, 34 }, { 3, 5, 9 }, { 3, 5, 15 }, { 3, 5, 21 }, { 3, 7, 9 }, { 3, 7, 17 }, { 3, 7, 23 }, { 3, 9, 21 }, { 3, 9, 23 }, { 3, 13, 15 }, { 3, 13, 17 }, { 3, 13, 35 }, { 3, 15, 21 }, { 3, 15, 35 }, { 3, 17, 23 }, { 3, 17, 35 }, { 3, 21, 23 }, { 3, 21, 35 }, { 3, 23, 35 }, { 4, 6, 10 }, { 4, 6, 16 }, { 4, 6, 22 }, { 4, 8, 10 }, { 4, 8, 18 }, { 4, 8, 24 }, { 4, 10, 22 }, { 4, 10, 24 }, { 4, 14, 16 }, { 4, 14, 18 }, { 4, 14, 36 }, { 4, 16, 22 }, { 4, 16, 36 }, { 4, 18, 24 }, { 4, 18, 36 }, { 4, 22, 24 }, { 4, 22, 36 }, { 4, 24, 36 }, { 5, 6, 11 }, { 5, 6, 19 }, { 5, 6, 25 }, { 5, 9, 11 }, { 5, 9, 21 }, { 5, 9, 27 }, { 5, 11, 25 }, { 5, 11, 27 }, { 5, 15, 19 }, { 5, 15, 21 }, { 5, 15, 37 }, { 5, 19, 25 }, { 5, 19, 37 }, { 5, 21, 27 }, { 5, 21, 37 }, { 5, 25, 27 }, { 5, 25, 37 }, { 5, 27, 37 }, { 6, 10, 11 }, { 6, 10, 22 }, { 6, 10, 28 }, { 6, 11, 25 }, { 6, 11, 28 }, { 6, 16, 19 }, { 6, 16, 22 }, { 6, 16, 38 }, { 6, 19, 25 }, { 6, 19, 38 }, { 6, 22, 28 }, { 6, 22, 38 }, { 6, 25, 28 }, { 6, 25, 38 }, { 6, 28, 38 }, { 7, 8, 12 }, { 7, 8, 20 }, { 7, 8, 26 }, { 7, 9, 12 }, { 7, 9, 23 }, { 7, 9, 29 }, { 7, 12, 26 }, { 7, 12, 29 }, { 7, 17, 20 }, { 7, 17, 23 }, { 7, 17, 39 }, { 7, 20, 26 }, { 7, 20, 39 }, { 7, 23, 29 }, { 7, 23, 39 }, { 7, 26, 29 }, { 7, 26, 39 }, { 7, 29, 39 }, { 8, 10, 12 }, { 8, 10, 24 }, { 8, 10, 30 }, { 8, 12, 26 }, { 8, 12, 30 }, { 8, 18, 20 }, { 8, 18, 24 }, { 8, 18, 40 }, { 8, 20, 26 }, { 8, 20, 40 }, { 8, 24, 30 }, { 8, 24, 40 }, { 8, 26, 30 }, { 8, 26, 40 }, { 8, 30, 40 }, { 9, 11, 12 }, { 9, 11, 27 }, { 9, 11, 31 }, { 9, 12, 29 }, { 9, 12, 31 }, { 9, 21, 23 }, { 9, 21, 27 }, { 9, 21, 41 }, { 9, 23, 29 }, { 9, 23, 41 }, { 9, 27, 31 }, { 9, 27, 41 }, { 9, 29, 31 }, { 9, 29, 41 }, { 9, 31, 41 }, { 10, 11, 12 }, { 10, 11, 28 }, { 10, 11, 32 }, { 10, 12, 30 }, { 10, 12, 32 }, { 10, 22, 24 }, { 10, 22, 28 }, { 10, 22, 42 }, { 10, 24, 30 }, { 10, 24, 42 }, { 10, 28, 32 }, { 10, 28, 42 }, { 10, 30, 32 }, { 10, 30, 42 }, { 10, 32, 42 }, { 11, 12, 31 }, { 11, 12, 32 }, { 11, 25, 27 }, { 11, 25, 28 }, { 11, 25, 43 }, { 11, 27, 31 }, { 11, 27, 43 }, { 11, 28, 32 }, { 11, 28, 43 }, { 11, 31, 32 }, { 11, 31, 43 }, { 11, 32, 43 }, { 12, 26, 29 }, { 12, 26, 30 }, { 12, 26, 44 }, { 12, 29, 31 }, { 12, 29, 44 }, { 12, 30, 32 }, { 12, 30, 44 }, { 12, 31, 32 }, { 12, 31, 44 }, { 12, 32, 44 }, { 13, 14, 33 }, { 13, 14, 34 }, { 13, 14, 45 }, { 13, 15, 33 }, { 13, 15, 35 }, { 13, 15, 46 }, { 13, 17, 34 }, { 13, 17, 35 }, { 13, 17, 48 }, { 13, 33, 45 }, { 13, 33, 46 }, { 13, 34, 45 }, { 13, 34, 48 }, { 13, 35, 46 }, { 13, 35, 48 }, { 13, 45, 46 }, { 13, 45, 48 }, { 13, 46, 48 }, { 14, 16, 33 }, { 14, 16, 36 }, { 14, 16, 47 }, { 14, 18, 34 }, { 14, 18, 36 }, { 14, 18, 49 }, { 14, 33, 45 }, { 14, 33, 47 }, { 14, 34, 45 }, { 14, 34, 49 }, { 14, 36, 47 }, { 14, 36, 49 }, { 14, 45, 47 }, { 14, 45, 49 }, { 14, 47, 49 }, { 15, 19, 33 }, { 15, 19, 37 }, { 15, 19, 50 }, { 15, 21, 35 }, { 15, 21, 37 }, { 15, 21, 54 }, { 15, 33, 46 }, { 15, 33, 50 }, { 15, 35, 46 }, { 15, 35, 54 }, { 15, 37, 50 }, { 15, 37, 54 }, { 15, 46, 50 }, { 15, 46, 54 }, { 15, 50, 54 }, { 16, 19, 33 }, { 16, 19, 38 }, { 16, 19, 51 }, { 16, 22, 36 }, { 16, 22, 38 }, { 16, 22, 55 }, { 16, 33, 47 }, { 16, 33, 51 }, { 16, 36, 47 }, { 16, 36, 55 }, { 16, 38, 51 }, { 16, 38, 55 }, { 16, 47, 51 }, { 16, 47, 55 }, { 16, 51, 55 }, { 17, 20, 34 }, { 17, 20, 39 }, { 17, 20, 52 }, { 17, 23, 35 }, { 17, 23, 39 }, { 17, 23, 56 }, { 17, 34, 48 }, { 17, 34, 52 }, { 17, 35, 48 }, { 17, 35, 56 }, { 17, 39, 52 }, { 17, 39, 56 }, { 17, 48, 52 }, { 17, 48, 56 }, { 17, 52, 56 }, { 18, 20, 34 }, { 18, 20, 40 }, { 18, 20, 53 }, { 18, 24, 36 }, { 18, 24, 40 }, { 18, 24, 57 }, { 18, 34, 49 }, { 18, 34, 53 }, { 18, 36, 49 }, { 18, 36, 57 }, { 18, 40, 53 }, { 18, 40, 57 }, { 18, 49, 53 }, { 18, 49, 57 }, { 18, 53, 57 }, { 19, 25, 37 }, { 19, 25, 38 }, { 19, 25, 58 }, { 19, 33, 50 }, { 19, 33, 51 }, { 19, 37, 50 }, { 19, 37, 58 }, { 19, 38, 51 }, { 19, 38, 58 }, { 19, 50, 51 }, { 19, 50, 58 }, { 19, 51, 58 }, { 20, 26, 39 }, { 20, 26, 40 }, { 20, 26, 61 }, { 20, 34, 52 }, { 20, 34, 53 }, { 20, 39, 52 }, { 20, 39, 61 }, { 20, 40, 53 }, { 20, 40, 61 }, { 20, 52, 53 }, { 20, 52, 61 }, { 20, 53, 61 }, { 21, 23, 35 }, { 21, 23, 41 }, { 21, 23, 59 }, { 21, 27, 37 }, { 21, 27, 41 }, { 21, 27, 62 }, { 21, 35, 54 }, { 21, 35, 59 }, { 21, 37, 54 }, { 21, 37, 62 }, { 21, 41, 59 }, { 21, 41, 62 }, { 21, 54, 59 }, { 21, 54, 62 }, { 21, 59, 62 }, { 22, 24, 36 }, { 22, 24, 42 }, { 22, 24, 60 }, { 22, 28, 38 }, { 22, 28, 42 }, { 22, 28, 63 }, { 22, 36, 55 }, { 22, 36, 60 }, { 22, 38, 55 }, { 22, 38, 63 }, { 22, 42, 60 }, { 22, 42, 63 }, { 22, 55, 60 }, { 22, 55, 63 }, { 22, 60, 63 }, { 23, 29, 39 }, { 23, 29, 41 }, { 23, 29, 64 }, { 23, 35, 56 }, { 23, 35, 59 }, { 23, 39, 56 }, { 23, 39, 64 }, { 23, 41, 59 }, { 23, 41, 64 }, { 23, 56, 59 }, { 23, 56, 64 }, { 23, 59, 64 }, { 24, 30, 40 }, { 24, 30, 42 }, { 24, 30, 65 }, { 24, 36, 57 }, { 24, 36, 60 }, { 24, 40, 57 }, { 24, 40, 65 }, { 24, 42, 60 }, { 24, 42, 65 }, { 24, 57, 60 }, { 24, 57, 65 }, { 24, 60, 65 }, { 25, 27, 37 }, { 25, 27, 43 }, { 25, 27, 66 }, { 25, 28, 38 }, { 25, 28, 43 }, { 25, 28, 67 }, { 25, 37, 58 }, { 25, 37, 66 }, { 25, 38, 58 }, { 25, 38, 67 }, { 25, 43, 66 }, { 25, 43, 67 }, { 25, 58, 66 }, { 25, 58, 67 }, { 25, 66, 67 }, { 26, 29, 39 }, { 26, 29, 44 }, { 26, 29, 68 }, { 26, 30, 40 }, { 26, 30, 44 }, { 26, 30, 69 }, { 26, 39, 61 }, { 26, 39, 68 }, { 26, 40, 61 }, { 26, 40, 69 }, { 26, 44, 68 }, { 26, 44, 69 }, { 26, 61, 68 }, { 26, 61, 69 }, { 26, 68, 69 }, { 27, 31, 41 }, { 27, 31, 43 }, { 27, 31, 70 }, { 27, 37, 62 }, { 27, 37, 66 }, { 27, 41, 62 }, { 27, 41, 70 }, { 27, 43, 66 }, { 27, 43, 70 }, { 27, 62, 66 }, { 27, 62, 70 }, { 27, 66, 70 }, { 28, 32, 42 }, { 28, 32, 43 }, { 28, 32, 71 }, { 28, 38, 63 }, { 28, 38, 67 }, { 28, 42, 63 }, { 28, 42, 71 }, { 28, 43, 67 }, { 28, 43, 71 }, { 28, 63, 67 }, { 28, 63, 71 }, { 28, 67, 71 }, { 29, 31, 41 }, { 29, 31, 44 }, { 29, 31, 72 }, { 29, 39, 64 }, { 29, 39, 68 }, { 29, 41, 64 }, { 29, 41, 72 }, { 29, 44, 68 }, { 29, 44, 72 }, { 29, 64, 68 }, { 29, 64, 72 }, { 29, 68, 72 }, { 30, 32, 42 }, { 30, 32, 44 }, { 30, 32, 73 }, { 30, 40, 65 }, { 30, 40, 69 }, { 30, 42, 65 }, { 30, 42, 73 }, { 30, 44, 69 }, { 30, 44, 73 }, { 30, 65, 69 }, { 30, 65, 73 }, { 30, 69, 73 }, { 31, 32, 43 }, { 31, 32, 44 }, { 31, 32, 74 }, { 31, 41, 70 }, { 31, 41, 72 }, { 31, 43, 70 }, { 31, 43, 74 }, { 31, 44, 72 }, { 31, 44, 74 }, { 31, 70, 72 }, { 31, 70, 74 }, { 31, 72, 74 }, { 32, 42, 71 }, { 32, 42, 73 }, { 32, 43, 71 }, { 32, 43, 74 }, { 32, 44, 73 }, { 32, 44, 74 }, { 32, 71, 73 }, { 32, 71, 74 }, { 32, 73, 74 }, { 33, 45, 46 }, { 33, 45, 47 }, { 33, 45, 75 }, { 33, 46, 50 }, { 33, 46, 75 }, { 33, 47, 51 }, { 33, 47, 75 }, { 33, 50, 51 }, { 33, 50, 75 }, { 33, 51, 75 }, { 34, 45, 48 }, { 34, 45, 49 }, { 34, 45, 76 }, { 34, 48, 52 }, { 34, 48, 76 }, { 34, 49, 53 }, { 34, 49, 76 }, { 34, 52, 53 }, { 34, 52, 76 }, { 34, 53, 76 }, { 35, 46, 48 }, { 35, 46, 54 }, { 35, 46, 77 }, { 35, 48, 56 }, { 35, 48, 77 }, { 35, 54, 59 }, { 35, 54, 77 }, { 35, 56, 59 }, { 35, 56, 77 }, { 35, 59, 77 }, { 36, 47, 49 }, { 36, 47, 55 }, { 36, 47, 78 }, { 36, 49, 57 }, { 36, 49, 78 }, { 36, 55, 60 }, { 36, 55, 78 }, { 36, 57, 60 }, { 36, 57, 78 }, { 36, 60, 78 }, { 37, 50, 54 }, { 37, 50, 58 }, { 37, 50, 79 }, { 37, 54, 62 }, { 37, 54, 79 }, { 37, 58, 66 }, { 37, 58, 79 }, { 37, 62, 66 }, { 37, 62, 79 }, { 37, 66, 79 }, { 38, 51, 55 }, { 38, 51, 58 }, { 38, 51, 80 }, { 38, 55, 63 }, { 38, 55, 80 }, { 38, 58, 67 }, { 38, 58, 80 }, { 38, 63, 67 }, { 38, 63, 80 }, { 38, 67, 80 }, { 39, 52, 56 }, { 39, 52, 61 }, { 39, 52, 81 }, { 39, 56, 64 }, { 39, 56, 81 }, { 39, 61, 68 }, { 39, 61, 81 }, { 39, 64, 68 }, { 39, 64, 81 }, { 39, 68, 81 }, { 40, 53, 57 }, { 40, 53, 61 }, { 40, 53, 82 }, { 40, 57, 65 }, { 40, 57, 82 }, { 40, 61, 69 }, { 40, 61, 82 }, { 40, 65, 69 }, { 40, 65, 82 }, { 40, 69, 82 }, { 41, 59, 62 }, { 41, 59, 64 }, { 41, 59, 83 }, { 41, 62, 70 }, { 41, 62, 83 }, { 41, 64, 72 }, { 41, 64, 83 }, { 41, 70, 72 }, { 41, 70, 83 }, { 41, 72, 83 }, { 42, 60, 63 }, { 42, 60, 65 }, { 42, 60, 84 }, { 42, 63, 71 }, { 42, 63, 84 }, { 42, 65, 73 }, { 42, 65, 84 }, { 42, 71, 73 }, { 42, 71, 84 }, { 42, 73, 84 }, { 43, 66, 67 }, { 43, 66, 70 }, { 43, 66, 85 }, { 43, 67, 71 }, { 43, 67, 85 }, { 43, 70, 74 }, { 43, 70, 85 }, { 43, 71, 74 }, { 43, 71, 85 }, { 43, 74, 85 }, { 44, 68, 69 }, { 44, 68, 72 }, { 44, 68, 86 }, { 44, 69, 73 }, { 44, 69, 86 }, { 44, 72, 74 }, { 44, 72, 86 }, { 44, 73, 74 }, { 44, 73, 86 }, { 44, 74, 86 }, { 45, 46, 48 }, { 45, 46, 75 }, { 45, 46, 87 }, { 45, 47, 49 }, { 45, 47, 75 }, { 45, 47, 88 }, { 45, 48, 76 }, { 45, 48, 87 }, { 45, 49, 76 }, { 45, 49, 88 }, { 45, 75, 87 }, { 45, 75, 88 }, { 45, 76, 87 }, { 45, 76, 88 }, { 45, 87, 88 }, { 46, 48, 77 }, { 46, 48, 87 }, { 46, 50, 54 }, { 46, 50, 75 }, { 46, 50, 89 }, { 46, 54, 77 }, { 46, 54, 89 }, { 46, 75, 87 }, { 46, 75, 89 }, { 46, 77, 87 }, { 46, 77, 89 }, { 46, 87, 89 }, { 47, 49, 78 }, { 47, 49, 88 }, { 47, 51, 55 }, { 47, 51, 75 }, { 47, 51, 90 }, { 47, 55, 78 }, { 47, 55, 90 }, { 47, 75, 88 }, { 47, 75, 90 }, { 47, 78, 88 }, { 47, 78, 90 }, { 47, 88, 90 }, { 48, 52, 56 }, { 48, 52, 76 }, { 48, 52, 91 }, { 48, 56, 77 }, { 48, 56, 91 }, { 48, 76, 87 }, { 48, 76, 91 }, { 48, 77, 87 }, { 48, 77, 91 }, { 48, 87, 91 }, { 49, 53, 57 }, { 49, 53, 76 }, { 49, 53, 92 }, { 49, 57, 78 }, { 49, 57, 92 }, { 49, 76, 88 }, { 49, 76, 92 }, { 49, 78, 88 }, { 49, 78, 92 }, { 49, 88, 92 }, { 50, 51, 58 }, { 50, 51, 75 }, { 50, 51, 93 }, { 50, 54, 79 }, { 50, 54, 89 }, { 50, 58, 79 }, { 50, 58, 93 }, { 50, 75, 89 }, { 50, 75, 93 }, { 50, 79, 89 }, { 50, 79, 93 }, { 50, 89, 93 }, { 51, 55, 80 }, { 51, 55, 90 }, { 51, 58, 80 }, { 51, 58, 93 }, { 51, 75, 90 }, { 51, 75, 93 }, { 51, 80, 90 }, { 51, 80, 93 }, { 51, 90, 93 }, { 52, 53, 61 }, { 52, 53, 76 }, { 52, 53, 94 }, { 52, 56, 81 }, { 52, 56, 91 }, { 52, 61, 81 }, { 52, 61, 94 }, { 52, 76, 91 }, { 52, 76, 94 }, { 52, 81, 91 }, { 52, 81, 94 }, { 52, 91, 94 }, { 53, 57, 82 }, { 53, 57, 92 }, { 53, 61, 82 }, { 53, 61, 94 }, { 53, 76, 92 }, { 53, 76, 94 }, { 53, 82, 92 }, { 53, 82, 94 }, { 53, 92, 94 }, { 54, 59, 62 }, { 54, 59, 77 }, { 54, 59, 95 }, { 54, 62, 79 }, { 54, 62, 95 }, { 54, 77, 89 }, { 54, 77, 95 }, { 54, 79, 89 }, { 54, 79, 95 }, { 54, 89, 95 }, { 55, 60, 63 }, { 55, 60, 78 }, { 55, 60, 96 }, { 55, 63, 80 }, { 55, 63, 96 }, { 55, 78, 90 }, { 55, 78, 96 }, { 55, 80, 90 }, { 55, 80, 96 }, { 55, 90, 96 }, { 56, 59, 64 }, { 56, 59, 77 }, { 56, 59, 97 }, { 56, 64, 81 }, { 56, 64, 97 }, { 56, 77, 91 }, { 56, 77, 97 }, { 56, 81, 91 }, { 56, 81, 97 }, { 56, 91, 97 }, { 57, 60, 65 }, { 57, 60, 78 }, { 57, 60, 98 }, { 57, 65, 82 }, { 57, 65, 98 }, { 57, 78, 92 }, { 57, 78, 98 }, { 57, 82, 92 }, { 57, 82, 98 }, { 57, 92, 98 }, { 58, 66, 67 }, { 58, 66, 79 }, { 58, 66, 99 }, { 58, 67, 80 }, { 58, 67, 99 }, { 58, 79, 93 }, { 58, 79, 99 }, { 58, 80, 93 }, { 58, 80, 99 }, { 58, 93, 99 }, { 59, 62, 83 }, { 59, 62, 95 }, { 59, 64, 83 }, { 59, 64, 97 }, { 59, 77, 95 }, { 59, 77, 97 }, { 59, 83, 95 }, { 59, 83, 97 }, { 59, 95, 97 }, { 60, 63, 84 }, { 60, 63, 96 }, { 60, 65, 84 }, { 60, 65, 98 }, { 60, 78, 96 }, { 60, 78, 98 }, { 60, 84, 96 }, { 60, 84, 98 }, { 60, 96, 98 }, { 61, 68, 69 }, { 61, 68, 81 }, { 61, 68, 100 }, { 61, 69, 82 }, { 61, 69, 100 }, { 61, 81, 94 }, { 61, 81, 100 }, { 61, 82, 94 }, { 61, 82, 100 }, { 61, 94, 100 }, { 62, 66, 70 }, { 62, 66, 79 }, { 62, 66, 101 }, { 62, 70, 83 }, { 62, 70, 101 }, { 62, 79, 95 }, { 62, 79, 101 }, { 62, 83, 95 }, { 62, 83, 101 }, { 62, 95, 101 }, { 63, 67, 71 }, { 63, 67, 80 }, { 63, 67, 102 }, { 63, 71, 84 }, { 63, 71, 102 }, { 63, 80, 96 }, { 63, 80, 102 }, { 63, 84, 96 }, { 63, 84, 102 }, { 63, 96, 102 }, { 64, 68, 72 }, { 64, 68, 81 }, { 64, 68, 103 }, { 64, 72, 83 }, { 64, 72, 103 }, { 64, 81, 97 }, { 64, 81, 103 }, { 64, 83, 97 }, { 64, 83, 103 }, { 64, 97, 103 }, { 65, 69, 73 }, { 65, 69, 82 }, { 65, 69, 104 }, { 65, 73, 84 }, { 65, 73, 104 }, { 65, 82, 98 }, { 65, 82, 104 }, { 65, 84, 98 }, { 65, 84, 104 }, { 65, 98, 104 }, { 66, 67, 85 }, { 66, 67, 99 }, { 66, 70, 85 }, { 66, 70, 101 }, { 66, 79, 99 }, { 66, 79, 101 }, { 66, 85, 99 }, { 66, 85, 101 }, { 66, 99, 101 }, { 67, 71, 85 }, { 67, 71, 102 }, { 67, 80, 99 }, { 67, 80, 102 }, { 67, 85, 99 }, { 67, 85, 102 }, { 67, 99, 102 }, { 68, 69, 86 }, { 68, 69, 100 }, { 68, 72, 86 }, { 68, 72, 103 }, { 68, 81, 100 }, { 68, 81, 103 }, { 68, 86, 100 }, { 68, 86, 103 }, { 68, 100, 103 }, { 69, 73, 86 }, { 69, 73, 104 }, { 69, 82, 100 }, { 69, 82, 104 }, { 69, 86, 100 }, { 69, 86, 104 }, { 69, 100, 104 }, { 70, 72, 74 }, { 70, 72, 83 }, { 70, 72, 105 }, { 70, 74, 85 }, { 70, 74, 105 }, { 70, 83, 101 }, { 70, 83, 105 }, { 70, 85, 101 }, { 70, 85, 105 }, { 70, 101, 105 }, { 71, 73, 74 }, { 71, 73, 84 }, { 71, 73, 106 }, { 71, 74, 85 }, { 71, 74, 106 }, { 71, 84, 102 }, { 71, 84, 106 }, { 71, 85, 102 }, { 71, 85, 106 }, { 71, 102, 106 }, { 72, 74, 86 }, { 72, 74, 105 }, { 72, 83, 103 }, { 72, 83, 105 }, { 72, 86, 103 }, { 72, 86, 105 }, { 72, 103, 105 }, { 73, 74, 86 }, { 73, 74, 106 }, { 73, 84, 104 }, { 73, 84, 106 }, { 73, 86, 104 }, { 73, 86, 106 }, { 73, 104, 106 }, { 74, 85, 105 }, { 74, 85, 106 }, { 74, 86, 105 }, { 74, 86, 106 }, { 74, 105, 106 }, { 75, 87, 88 }, { 75, 87, 89 }, { 75, 87, 107 }, { 75, 88, 90 }, { 75, 88, 107 }, { 75, 89, 93 }, { 75, 89, 107 }, { 75, 90, 93 }, { 75, 90, 107 }, { 75, 93, 107 }, { 76, 87, 88 }, { 76, 87, 91 }, { 76, 87, 108 }, { 76, 88, 92 }, { 76, 88, 108 }, { 76, 91, 94 }, { 76, 91, 108 }, { 76, 92, 94 }, { 76, 92, 108 }, { 76, 94, 108 }, { 77, 87, 89 }, { 77, 87, 91 }, { 77, 87, 109 }, { 77, 89, 95 }, { 77, 89, 109 }, { 77, 91, 97 }, { 77, 91, 109 }, { 77, 95, 97 }, { 77, 95, 109 }, { 77, 97, 109 }, { 78, 88, 90 }, { 78, 88, 92 }, { 78, 88, 110 }, { 78, 90, 96 }, { 78, 90, 110 }, { 78, 92, 98 }, { 78, 92, 110 }, { 78, 96, 98 }, { 78, 96, 110 }, { 78, 98, 110 }, { 79, 89, 93 }, { 79, 89, 95 }, { 79, 89, 111 }, { 79, 93, 99 }, { 79, 93, 111 }, { 79, 95, 101 }, { 79, 95, 111 }, { 79, 99, 101 }, { 79, 99, 111 }, { 79, 101, 111 }, { 80, 90, 93 }, { 80, 90, 96 }, { 80, 90, 112 }, { 80, 93, 99 }, { 80, 93, 112 }, { 80, 96, 102 }, { 80, 96, 112 }, { 80, 99, 102 }, { 80, 99, 112 }, { 80, 102, 112 }, { 81, 91, 94 }, { 81, 91, 97 }, { 81, 91, 113 }, { 81, 94, 100 }, { 81, 94, 113 }, { 81, 97, 103 }, { 81, 97, 113 }, { 81, 100, 103 }, { 81, 100, 113 }, { 81, 103, 113 }, { 82, 92, 94 }, { 82, 92, 98 }, { 82, 92, 114 }, { 82, 94, 100 }, { 82, 94, 114 }, { 82, 98, 104 }, { 82, 98, 114 }, { 82, 100, 104 }, { 82, 100, 114 }, { 82, 104, 114 }, { 83, 95, 97 }, { 83, 95, 101 }, { 83, 95, 115 }, { 83, 97, 103 }, { 83, 97, 115 }, { 83, 101, 105 }, { 83, 101, 115 }, { 83, 103, 105 }, { 83, 103, 115 }, { 83, 105, 115 }, { 84, 96, 98 }, { 84, 96, 102 }, { 84, 96, 116 }, { 84, 98, 104 }, { 84, 98, 116 }, { 84, 102, 106 }, { 84, 102, 116 }, { 84, 104, 106 }, { 84, 104, 116 }, { 84, 106, 116 }, { 85, 99, 101 }, { 85, 99, 102 }, { 85, 99, 117 }, { 85, 101, 105 }, { 85, 101, 117 }, { 85, 102, 106 }, { 85, 102, 117 }, { 85, 105, 106 }, { 85, 105, 117 }, { 85, 106, 117 }, { 86, 100, 103 }, { 86, 100, 104 }, { 86, 100, 118 }, { 86, 103, 105 }, { 86, 103, 118 }, { 86, 104, 106 }, { 86, 104, 118 }, { 86, 105, 106 }, { 86, 105, 118 }, { 86, 106, 118 }, { 87, 88, 107 }, { 87, 88, 108 }, { 87, 89, 107 }, { 87, 89, 109 }, { 87, 91, 108 }, { 87, 91, 109 }, { 87, 107, 108 }, { 87, 107, 109 }, { 87, 108, 109 }, { 88, 90, 107 }, { 88, 90, 110 }, { 88, 92, 108 }, { 88, 92, 110 }, { 88, 107, 108 }, { 88, 107, 110 }, { 88, 108, 110 }, { 89, 93, 107 }, { 89, 93, 111 }, { 89, 95, 109 }, { 89, 95, 111 }, { 89, 107, 109 }, { 89, 107, 111 }, { 89, 109, 111 }, { 90, 93, 107 }, { 90, 93, 112 }, { 90, 96, 110 }, { 90, 96, 112 }, { 90, 107, 110 }, { 90, 107, 112 }, { 90, 110, 112 }, { 91, 94, 108 }, { 91, 94, 113 }, { 91, 97, 109 }, { 91, 97, 113 }, { 91, 108, 109 }, { 91, 108, 113 }, { 91, 109, 113 }, { 92, 94, 108 }, { 92, 94, 114 }, { 92, 98, 110 }, { 92, 98, 114 }, { 92, 108, 110 }, { 92, 108, 114 }, { 92, 110, 114 }, { 93, 99, 111 }, { 93, 99, 112 }, { 93, 107, 111 }, { 93, 107, 112 }, { 93, 111, 112 }, { 94, 100, 113 }, { 94, 100, 114 }, { 94, 108, 113 }, { 94, 108, 114 }, { 94, 113, 114 }, { 95, 97, 109 }, { 95, 97, 115 }, { 95, 101, 111 }, { 95, 101, 115 }, { 95, 109, 111 }, { 95, 109, 115 }, { 95, 111, 115 }, { 96, 98, 110 }, { 96, 98, 116 }, { 96, 102, 112 }, { 96, 102, 116 }, { 96, 110, 112 }, { 96, 110, 116 }, { 96, 112, 116 }, { 97, 103, 113 }, { 97, 103, 115 }, { 97, 109, 113 }, { 97, 109, 115 }, { 97, 113, 115 }, { 98, 104, 114 }, { 98, 104, 116 }, { 98, 110, 114 }, { 98, 110, 116 }, { 98, 114, 116 }, { 99, 101, 111 }, { 99, 101, 117 }, { 99, 102, 112 }, { 99, 102, 117 }, { 99, 111, 112 }, { 99, 111, 117 }, { 99, 112, 117 }, { 100, 103, 113 }, { 100, 103, 118 }, { 100, 104, 114 }, { 100, 104, 118 }, { 100, 113, 114 }, { 100, 113, 118 }, { 100, 114, 118 }, { 101, 105, 115 }, { 101, 105, 117 }, { 101, 111, 115 }, { 101, 111, 117 }, { 101, 115, 117 }, { 102, 106, 116 }, { 102, 106, 117 }, { 102, 112, 116 }, { 102, 112, 117 }, { 102, 116, 117 }, { 103, 105, 115 }, { 103, 105, 118 }, { 103, 113, 115 }, { 103, 113, 118 }, { 103, 115, 118 }, { 104, 106, 116 }, { 104, 106, 118 }, { 104, 114, 116 }, { 104, 114, 118 }, { 104, 116, 118 }, { 105, 106, 117 }, { 105, 106, 118 }, { 105, 115, 117 }, { 105, 115, 118 }, { 105, 117, 118 }, { 106, 116, 117 }, { 106, 116, 118 }, { 106, 117, 118 }, { 107, 108, 109 }, { 107, 108, 110 }, { 107, 108, 119 }, { 107, 109, 111 }, { 107, 109, 119 }, { 107, 110, 112 }, { 107, 110, 119 }, { 107, 111, 112 }, { 107, 111, 119 }, { 107, 112, 119 }, { 108, 109, 113 }, { 108, 109, 119 }, { 108, 110, 114 }, { 108, 110, 119 }, { 108, 113, 114 }, { 108, 113, 119 }, { 108, 114, 119 }, { 109, 111, 115 }, { 109, 111, 119 }, { 109, 113, 115 }, { 109, 113, 119 }, { 109, 115, 119 }, { 110, 112, 116 }, { 110, 112, 119 }, { 110, 114, 116 }, { 110, 114, 119 }, { 110, 116, 119 }, { 111, 112, 117 }, { 111, 112, 119 }, { 111, 115, 117 }, { 111, 115, 119 }, { 111, 117, 119 }, { 112, 116, 117 }, { 112, 116, 119 }, { 112, 117, 119 }, { 113, 114, 118 }, { 113, 114, 119 }, { 113, 115, 118 }, { 113, 115, 119 }, { 113, 118, 119 }, { 114, 116, 118 }, { 114, 116, 119 }, { 114, 118, 119 }, { 115, 117, 118 }, { 115, 117, 119 }, { 115, 118, 119 }, { 116, 117, 118 }, { 116, 117, 119 }, { 116, 118, 119 }, { 117, 118, 119 } }; /* Add a rotation around the wx-plane to the matrix m. */ static void rotatewx(float m[4][4], float phi) { float c, s, u, v; int i; phi *= M_PI/180.0; c = cos(phi); s = sin(phi); for (i=0; i<4; i++) { u = m[i][1]; v = m[i][2]; m[i][1] = c*u+s*v; m[i][2] = -s*u+c*v; } } /* Add a rotation around the wy-plane to the matrix m. */ static void rotatewy(float m[4][4], float phi) { float c, s, u, v; int i; phi *= M_PI/180.0; c = cos(phi); s = sin(phi); for (i=0; i<4; i++) { u = m[i][0]; v = m[i][2]; m[i][0] = c*u-s*v; m[i][2] = s*u+c*v; } } /* Add a rotation around the wz-plane to the matrix m. */ static void rotatewz(float m[4][4], float phi) { float c, s, u, v; int i; phi *= M_PI/180.0; c = cos(phi); s = sin(phi); for (i=0; i<4; i++) { u = m[i][0]; v = m[i][1]; m[i][0] = c*u+s*v; m[i][1] = -s*u+c*v; } } /* Add a rotation around the xy-plane to the matrix m. */ static void rotatexy(float m[4][4], float phi) { float c, s, u, v; int i; phi *= M_PI/180.0; c = cos(phi); s = sin(phi); for (i=0; i<4; i++) { u = m[i][2]; v = m[i][3]; m[i][2] = c*u+s*v; m[i][3] = -s*u+c*v; } } /* Add a rotation around the xz-plane to the matrix m. */ static void rotatexz(float m[4][4], float phi) { float c, s, u, v; int i; phi *= M_PI/180.0; c = cos(phi); s = sin(phi); for (i=0; i<4; i++) { u = m[i][1]; v = m[i][3]; m[i][1] = c*u-s*v; m[i][3] = s*u+c*v; } } /* Add a rotation around the yz-plane to the matrix m. */ static void rotateyz(float m[4][4], float phi) { float c, s, u, v; int i; phi *= M_PI/180.0; c = cos(phi); s = sin(phi); for (i=0; i<4; i++) { u = m[i][0]; v = m[i][3]; m[i][0] = c*u-s*v; m[i][3] = s*u+c*v; } } /* Compute the rotation matrix m from the rotation angles. */ static void rotateall(float al, float be, float de, float ze, float et, float th, float m[4][4]) { int i, j; for (i=0; i<4; i++) for (j=0; j<4; j++) m[i][j] = (i==j); rotatewx(m,al); rotatewy(m,be); rotatewz(m,de); rotatexz(m,et); rotatexy(m,ze); rotateyz(m,th); } /* Multiply two rotation matrices: o=m*n. */ static void mult_rotmat(float m[4][4], float n[4][4], float o[4][4]) { int i, j, k; for (i=0; i<4; i++) { for (j=0; j<4; j++) { o[i][j] = 0.0; for (k=0; k<4; k++) o[i][j] += m[i][k]*n[k][j]; } } } /* Compute a 4D rotation matrix from two unit quaternions. */ static void quats_to_rotmat(float p[4], float q[4], float m[4][4]) { double al, be, de, ze, et, th; double r00, r01, r02, r12, r22; r00 = 1.0-2.0*(p[1]*p[1]+p[2]*p[2]); r01 = 2.0*(p[0]*p[1]+p[2]*p[3]); r02 = 2.0*(p[2]*p[0]-p[1]*p[3]); r12 = 2.0*(p[1]*p[2]+p[0]*p[3]); r22 = 1.0-2.0*(p[1]*p[1]+p[0]*p[0]); al = atan2(-r12,r22)*180.0/M_PI; be = atan2(r02,sqrt(r00*r00+r01*r01))*180.0/M_PI; de = atan2(-r01,r00)*180.0/M_PI; r00 = 1.0-2.0*(q[1]*q[1]+q[2]*q[2]); r01 = 2.0*(q[0]*q[1]+q[2]*q[3]); r02 = 2.0*(q[2]*q[0]-q[1]*q[3]); r12 = 2.0*(q[1]*q[2]+q[0]*q[3]); r22 = 1.0-2.0*(q[1]*q[1]+q[0]*q[0]); et = atan2(-r12,r22)*180.0/M_PI; th = atan2(r02,sqrt(r00*r00+r01*r01))*180.0/M_PI; ze = atan2(-r01,r00)*180.0/M_PI; rotateall(al,be,de,ze,et,-th,m); } /* Compute the normal vector of a plane based on three points in the plane. */ static void normal(const float *p, const float *q, const float *r, float *n) { float u[3], v[3], t; u[0] = q[0]-p[0]; u[1] = q[1]-p[1]; u[2] = q[2]-p[2]; v[0] = r[0]-p[0]; v[1] = r[1]-p[1]; v[2] = r[2]-p[2]; n[0] = u[1]*v[2]-u[2]*v[1]; n[1] = u[2]*v[0]-u[0]*v[2]; n[2] = u[0]*v[1]-u[1]*v[0]; t = sqrt(n[0]*n[0]+n[1]*n[1]+n[2]*n[2]); n[0] /= t; n[1] /= t; n[2] /= t; } /* Project an array of vertices from 4d to 3d. */ static void project(ModeInfo *mi, const float vert[][4], float v[][4], int num) { float s, q1[4], q2[4], r1[4][4], r2[4][4], m[4][4]; int i, j, k; polytopesstruct *pp = &poly[MI_SCREEN(mi)]; rotateall(pp->alpha,pp->beta,pp->delta,pp->zeta,pp->eta,pp->theta,r1); gltrackball_get_quaternion(pp->trackballs[0],q1); gltrackball_get_quaternion(pp->trackballs[1],q2); quats_to_rotmat(q1,q2,r2); mult_rotmat(r2,r1,m); /* Project the vertices from 4d to 3d. */ for (i=0; ipolygon_count = 0; if (display_mode == DISP_WIREFRAME) { if (color_mode == COLORS_SINGLE) glColor4fv(red); glBegin(GL_LINES); for (i=0; ipolygon_count = num_edge; } else { if (color_mode == COLORS_SINGLE) { red_trans[3] = face_color_trans[0][3]/2.0; if (display_mode == DISP_TRANSPARENT) glMaterialfv(GL_FRONT_AND_BACK,GL_AMBIENT_AND_DIFFUSE,red_trans); else glMaterialfv(GL_FRONT_AND_BACK,GL_AMBIENT_AND_DIFFUSE,red); } for (i=0; ipolygon_count = num_face; } } /* Draw a 5-cell {3,3,3} projected into 3d. */ static void cell_5(ModeInfo *mi) { polytopesstruct *hp = &poly[MI_SCREEN(mi)]; float v[NUM_VERT_5][4]; project(mi,vert_5,v,NUM_VERT_5); draw(mi,v,edge_5,NUM_EDGE_5,(int *)face_5,NUM_FACE_5, VERT_PER_FACE_5,hp->edge_color_5,hp->face_color_5, hp->face_color_trans_5); } /* Draw a 8-cell {4,3,3} projected into 3d. */ static void cell_8(ModeInfo *mi) { polytopesstruct *hp = &poly[MI_SCREEN(mi)]; float v[NUM_VERT_8][4]; project(mi,vert_8,v,NUM_VERT_8); draw(mi,v,edge_8,NUM_EDGE_8,(int *)face_8,NUM_FACE_8, VERT_PER_FACE_8,hp->edge_color_8,hp->face_color_8, hp->face_color_trans_8); } /* Draw a 16-cell {3,3,4} projected into 3d. */ static void cell_16(ModeInfo *mi) { polytopesstruct *hp = &poly[MI_SCREEN(mi)]; float v[NUM_VERT_16][4]; project(mi,vert_16,v,NUM_VERT_16); draw(mi,v,edge_16,NUM_EDGE_16,(int *)face_16,NUM_FACE_16, VERT_PER_FACE_16,hp->edge_color_16,hp->face_color_16, hp->face_color_trans_16); } /* Draw a 24-cell {3,4,3} projected into 3d. */ static void cell_24(ModeInfo *mi) { polytopesstruct *hp = &poly[MI_SCREEN(mi)]; float v[NUM_VERT_24][4]; project(mi,vert_24,v,NUM_VERT_24); draw(mi,v,edge_24,NUM_EDGE_24,(int *)face_24,NUM_FACE_24, VERT_PER_FACE_24,hp->edge_color_24,hp->face_color_24, hp->face_color_trans_24); } /* Draw a 120-cell {5,3,3} projected into 3d. */ static void cell_120(ModeInfo *mi) { polytopesstruct *hp = &poly[MI_SCREEN(mi)]; float v[NUM_VERT_120][4]; project(mi,vert_120,v,NUM_VERT_120); draw(mi,v,edge_120,NUM_EDGE_120,(int *)face_120,NUM_FACE_120, VERT_PER_FACE_120,hp->edge_color_120,hp->face_color_120, hp->face_color_trans_120); } /* Draw a 600-cell {3,3,5} projected into 3d. */ static void cell_600(ModeInfo *mi) { polytopesstruct *hp = &poly[MI_SCREEN(mi)]; float v[NUM_VERT_600][4]; project(mi,vert_600,v,NUM_VERT_600); draw(mi,v,edge_600,NUM_EDGE_600,(int *)face_600,NUM_FACE_600, VERT_PER_FACE_600,hp->edge_color_600,hp->face_color_600, hp->face_color_trans_600); } /* Compute a color based on the w-depth of a point. */ static void color(float depth, float alpha, float min, float max, float color[4]) { double d, t; int s; d = (depth-min)/(max-min); s = floor(d*4.0); t = d*4.0-s; if (s < 0) s += 6; if (s >= 6) s -= 6; switch (s) { case 0: color[0] = 1.0; color[1] = t; color[2] = 0.0; break; case 1: color[0] = 1.0-t; color[1] = 1.0; color[2] = 0.0; break; case 2: color[0] = 0.0; color[1] = 1.0; color[2] = t; break; case 3: color[0] = 0.0; color[1] = 1.0-t; color[2] = 1.0; break; case 4: color[0] = t; color[1] = 0.0; color[2] = 1.0; break; case 5: color[0] = 1.0; color[1] = 0.0; color[2] = 1.0-t; break; } color[3] = alpha; } /* Set the colors of a single polytope's edges and faces. */ static void colors(const float vert[][4], const int edge[][2], int num_edge, const int face[], int num_face, int vert_per_face, float edge_color[][4], float face_color[][4], float face_color_trans[][4], float alpha, float min_edge_depth, float max_edge_depth, float min_face_depth, float max_face_depth) { int i, j; float depth; for (i=0; iedge_color_5,hp->face_color_5, hp->face_color_trans_5,0.5,MIN_EDGE_DEPTH_5, MAX_EDGE_DEPTH_5,MIN_FACE_DEPTH_5,MAX_FACE_DEPTH_5); /* 8-cell. */ colors(vert_8,edge_8,NUM_EDGE_8,(int *)face_8,NUM_FACE_8, VERT_PER_FACE_8,hp->edge_color_8,hp->face_color_8, hp->face_color_trans_8,0.4,MIN_EDGE_DEPTH_8, MAX_EDGE_DEPTH_8,MIN_FACE_DEPTH_8,MAX_FACE_DEPTH_8); /* 16-cell. */ colors(vert_16,edge_16,NUM_EDGE_16,(int *)face_16,NUM_FACE_16, VERT_PER_FACE_16,hp->edge_color_16,hp->face_color_16, hp->face_color_trans_16,0.25,MIN_EDGE_DEPTH_16, MAX_EDGE_DEPTH_16,MIN_FACE_DEPTH_16,MAX_FACE_DEPTH_16); /* 24-cell. */ colors(vert_24,edge_24,NUM_EDGE_24,(int *)face_24,NUM_FACE_24, VERT_PER_FACE_24,hp->edge_color_24,hp->face_color_24, hp->face_color_trans_24,0.25,MIN_EDGE_DEPTH_24, MAX_EDGE_DEPTH_24,MIN_FACE_DEPTH_24,MAX_FACE_DEPTH_24); /* 120-cell. */ colors(vert_120,edge_120,NUM_EDGE_120,(int *)face_120,NUM_FACE_120, VERT_PER_FACE_120,hp->edge_color_120,hp->face_color_120, hp->face_color_trans_120,0.15,MIN_EDGE_DEPTH_120, MAX_EDGE_DEPTH_120,MIN_FACE_DEPTH_120,MAX_FACE_DEPTH_120); /* 600-cell. */ colors(vert_600,edge_600,NUM_EDGE_600,(int *)face_600,NUM_FACE_600, VERT_PER_FACE_600,hp->edge_color_600,hp->face_color_600, hp->face_color_trans_600,0.06,MIN_EDGE_DEPTH_600, MAX_EDGE_DEPTH_600,MIN_FACE_DEPTH_600,MAX_FACE_DEPTH_600); } static void init(ModeInfo *mi) { polytopesstruct *pp = &poly[MI_SCREEN(mi)]; set_colors(mi); pp->alpha = 0.0; pp->beta = 0.0; pp->delta = 0.0; pp->zeta = 0.0; pp->eta = 0.0; pp->theta = 0.0; pp->tick = 0; pp->poly = 0; } /* Redisplay the polytopes. */ static void display_polytopes(ModeInfo *mi) { polytopesstruct *pp = &poly[MI_SCREEN(mi)]; if (!pp->button_pressed) { pp->alpha += speed_wx * pp->speed_scale; if (pp->alpha >= 360.0) pp->alpha -= 360.0; pp->beta += speed_wy * pp->speed_scale; if (pp->beta >= 360.0) pp->beta -= 360.0; pp->delta += speed_wz * pp->speed_scale; if (pp->delta >= 360.0) pp->delta -= 360.0; pp->zeta += speed_xy * pp->speed_scale; if (pp->zeta >= 360.0) pp->zeta -= 360.0; pp->eta += speed_xz * pp->speed_scale; if (pp->eta >= 360.0) pp->eta -= 360.0; pp->theta += speed_yz * pp->speed_scale; if (pp->theta >= 360.0) pp->theta -= 360.0; } glMatrixMode(GL_PROJECTION); glLoadIdentity(); if (projection_3d == DISP_3D_ORTHOGRAPHIC) { if (pp->aspect >= 1.0) glOrtho(-pp->aspect,pp->aspect,-1.0,1.0,0.1,100.0); else glOrtho(-1.0,1.0,-1.0/pp->aspect,1.0/pp->aspect,0.1,100.0); } else { gluPerspective(60.0,pp->aspect,0.1,100.0); } glMatrixMode(GL_MODELVIEW); glLoadIdentity(); if (pp->tick == 0) { if (polytope == POLYTOPE_RANDOM) pp->poly = random() % (POLYTOPE_LAST_CELL+1); else pp->poly = polytope; } if (++pp->tick > 1000) pp->tick = 0; if (pp->poly == POLYTOPE_5_CELL) cell_5(mi); else if (pp->poly == POLYTOPE_8_CELL) cell_8(mi); else if (pp->poly == POLYTOPE_16_CELL) cell_16(mi); else if (pp->poly == POLYTOPE_24_CELL) cell_24(mi); else if (pp->poly == POLYTOPE_120_CELL) cell_120(mi); else if (pp->poly == POLYTOPE_600_CELL) cell_600(mi); else abort(); } ENTRYPOINT void reshape_polytopes(ModeInfo *mi, int width, int height) { polytopesstruct *pp = &poly[MI_SCREEN(mi)]; pp->WindW = (GLint)width; pp->WindH = (GLint)height; glViewport(0,0,width,height); pp->aspect = (GLfloat)width/(GLfloat)height; } ENTRYPOINT Bool polytopes_handle_event(ModeInfo *mi, XEvent *event) { polytopesstruct *pp = &poly[MI_SCREEN(mi)]; KeySym sym = 0; char c = 0; if (event->xany.type == KeyPress || event->xany.type == KeyRelease) XLookupString (&event->xkey, &c, 1, &sym, 0); if (event->xany.type == ButtonPress && event->xbutton.button == Button1) { pp->button_pressed = True; gltrackball_start(pp->trackballs[pp->current_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_pressed = False; return True; } else if (event->xany.type == KeyPress) { if (sym == XK_Shift_L || sym == XK_Shift_R) { pp->current_trackball = 1; if (pp->button_pressed) gltrackball_start(pp->trackballs[pp->current_trackball], event->xbutton.x, event->xbutton.y, MI_WIDTH(mi), MI_HEIGHT(mi)); return True; } } else if (event->xany.type == KeyRelease) { if (sym == XK_Shift_L || sym == XK_Shift_R) { pp->current_trackball = 0; if (pp->button_pressed) gltrackball_start(pp->trackballs[pp->current_trackball], event->xbutton.x, event->xbutton.y, MI_WIDTH(mi), MI_HEIGHT(mi)); return True; } } else if (event->xany.type == MotionNotify && pp->button_pressed) { gltrackball_track(pp->trackballs[pp->current_trackball], event->xmotion.x, event->xmotion.y, MI_WIDTH(mi), MI_HEIGHT(mi)); return True; } return False; } /* *----------------------------------------------------------------------------- *----------------------------------------------------------------------------- * Xlock hooks. *----------------------------------------------------------------------------- *----------------------------------------------------------------------------- */ /* *----------------------------------------------------------------------------- * Initialize polytopes. Called each time the window changes. *----------------------------------------------------------------------------- */ ENTRYPOINT void init_polytopes(ModeInfo *mi) { polytopesstruct *pp; if (poly == NULL) { poly = (polytopesstruct *)calloc(MI_NUM_SCREENS(mi), sizeof(polytopesstruct)); if (poly == NULL) return; } pp = &poly[MI_SCREEN(mi)]; pp->trackballs[0] = gltrackball_init(True); pp->trackballs[1] = gltrackball_init(True); pp->current_trackball = 0; pp->button_pressed = False; /* Set the display mode. */ if (!strcasecmp(mode,"wireframe") || !strcasecmp(mode,"0")) { display_mode = DISP_WIREFRAME; } else if (!strcasecmp(mode,"surface") || !strcasecmp(mode,"1")) { display_mode = DISP_SURFACE; } else if (!strcasecmp(mode,"transparent") || !strcasecmp(mode,"2")) { display_mode = DISP_TRANSPARENT; } else { display_mode = DISP_TRANSPARENT; } /* Set the Klein bottle. */ if (!strcasecmp(poly_str,"random") || !strcasecmp(poly_str,"-1")) { polytope = POLYTOPE_RANDOM; } else if (!strcasecmp(poly_str,"5-cell") || !strcasecmp(poly_str,"0")) { polytope = POLYTOPE_5_CELL; } else if (!strcasecmp(poly_str,"8-cell") || !strcasecmp(poly_str,"1")) { polytope = POLYTOPE_8_CELL; } else if (!strcasecmp(poly_str,"16-cell") || !strcasecmp(poly_str,"2")) { polytope = POLYTOPE_16_CELL; } else if (!strcasecmp(poly_str,"24-cell") || !strcasecmp(poly_str,"3")) { polytope = POLYTOPE_24_CELL; } else if (!strcasecmp(poly_str,"120-cell") || !strcasecmp(poly_str,"4")) { polytope = POLYTOPE_120_CELL; } else if (!strcasecmp(poly_str,"600-cell") || !strcasecmp(poly_str,"5")) { polytope = POLYTOPE_600_CELL; } else { polytope = POLYTOPE_RANDOM; } /* Set the color mode. */ if (!strcasecmp(color_str,"single") || !strcasecmp(color_str,"0")) { color_mode = COLORS_SINGLE; } else if (!strcasecmp(color_str,"depth") || !strcasecmp(color_str,"1")) { color_mode = COLORS_DEPTH; } else { color_mode = COLORS_DEPTH; } /* Set the 3d projection mode. */ if (!strcasecmp(proj_3d,"perspective") || !strcasecmp(proj_3d,"0")) { projection_3d = DISP_3D_PERSPECTIVE; } else if (!strcasecmp(proj_3d,"orthographic") || !strcasecmp(proj_3d,"1")) { projection_3d = DISP_3D_ORTHOGRAPHIC; } else { projection_3d = DISP_3D_PERSPECTIVE; } /* Set the 4d projection mode. */ if (!strcasecmp(proj_4d,"perspective") || !strcasecmp(proj_4d,"0")) { projection_4d = DISP_4D_PERSPECTIVE; } else if (!strcasecmp(proj_4d,"orthographic") || !strcasecmp(proj_4d,"1")) { projection_4d = DISP_4D_ORTHOGRAPHIC; } else { projection_4d = DISP_4D_PERSPECTIVE; } /* make multiple screens rotate at slightly different rates. */ pp->speed_scale = 0.9 + frand(0.3); if ((pp->glx_context = init_GL(mi)) != NULL) { reshape_polytopes(mi,MI_WIDTH(mi),MI_HEIGHT(mi)); glDrawBuffer(GL_BACK); init(mi); } else { MI_CLEARWINDOW(mi); } } /* *----------------------------------------------------------------------------- * Called by the mainline code periodically to update the display. *----------------------------------------------------------------------------- */ ENTRYPOINT void draw_polytopes(ModeInfo *mi) { static const GLfloat light_ambient[] = { 0.0, 0.0, 0.0, 1.0 }; static const GLfloat light_diffuse[] = { 1.0, 1.0, 1.0, 1.0 }; static const GLfloat light_specular[] = { 0.0, 0.0, 0.0, 1.0 }; static const GLfloat light_position[] = { 0.0, 0.0, 1.0, 0.0 }; static const GLfloat mat_specular[] = { 1.0, 1.0, 1.0, 1.0 }; Display *display = MI_DISPLAY(mi); Window window = MI_WINDOW(mi); polytopesstruct *hp; if (poly == NULL) return; hp = &poly[MI_SCREEN(mi)]; MI_IS_DRAWN(mi) = True; if (!hp->glx_context) return; glXMakeCurrent(display,window,*(hp->glx_context)); glMatrixMode(GL_PROJECTION); glLoadIdentity(); if (projection_3d == DISP_3D_PERSPECTIVE) gluPerspective(60.0,1.0,0.1,100.0); else glOrtho(-1.0,1.0,-1.0,1.0,0.1,100.0);; glMatrixMode(GL_MODELVIEW); glLoadIdentity(); if (display_mode == DISP_WIREFRAME) { glDisable(GL_DEPTH_TEST); glDisable(GL_LIGHTING); glDisable(GL_LIGHT0); glDisable(GL_BLEND); } else if (display_mode == DISP_SURFACE) { glEnable(GL_DEPTH_TEST); glDepthFunc(GL_LESS); glLightModeli(GL_LIGHT_MODEL_TWO_SIDE,GL_TRUE); glEnable(GL_LIGHTING); glEnable(GL_LIGHT0); glLightfv(GL_LIGHT0,GL_AMBIENT,light_ambient); glLightfv(GL_LIGHT0,GL_DIFFUSE,light_diffuse); glLightfv(GL_LIGHT0,GL_SPECULAR,light_specular); glLightfv(GL_LIGHT0,GL_POSITION,light_position); glMaterialfv(GL_FRONT_AND_BACK,GL_SPECULAR,mat_specular); glMaterialf(GL_FRONT_AND_BACK,GL_SHININESS,0.0); glDepthMask(GL_TRUE); glDisable(GL_BLEND); } else if (display_mode == DISP_TRANSPARENT) { glDisable(GL_DEPTH_TEST); glLightModeli(GL_LIGHT_MODEL_TWO_SIDE,GL_TRUE); glEnable(GL_LIGHTING); glEnable(GL_LIGHT0); glLightfv(GL_LIGHT0,GL_AMBIENT,light_ambient); glLightfv(GL_LIGHT0,GL_DIFFUSE,light_diffuse); glLightfv(GL_LIGHT0,GL_SPECULAR,light_specular); glLightfv(GL_LIGHT0,GL_POSITION,light_position); glMaterialfv(GL_FRONT_AND_BACK,GL_SPECULAR,mat_specular); glMaterialf(GL_FRONT_AND_BACK,GL_SHININESS,0.0); glDepthMask(GL_FALSE); glEnable(GL_BLEND); glBlendFunc(GL_SRC_ALPHA,GL_ONE); } else { glDisable(GL_DEPTH_TEST); glDisable(GL_LIGHTING); glDisable(GL_LIGHT0); glDisable(GL_BLEND); } glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT); glLoadIdentity(); display_polytopes(mi); if (MI_IS_FPS(mi)) do_fps (mi); glFlush(); glXSwapBuffers(display,window); } /* *----------------------------------------------------------------------------- * The display is being taken away from us. Free up malloc'ed * memory and X resources that we've alloc'ed. Only called * once, we must zap everything for every screen. *----------------------------------------------------------------------------- */ ENTRYPOINT void release_polytopes(ModeInfo *mi) { if (poly != NULL) { int screen; for (screen = 0; screen < MI_NUM_SCREENS(mi); screen++) { polytopesstruct *hp = &poly[screen]; if (hp->glx_context) hp->glx_context = (GLXContext *)NULL; } (void) free((void *)poly); poly = (polytopesstruct *)NULL; } FreeAllGL(mi); } #ifndef STANDALONE ENTRYPOINT void change_polytopes(ModeInfo *mi) { polytopesstruct *hp = &poly[MI_SCREEN(mi)]; if (!hp->glx_context) return; glXMakeCurrent(MI_DISPLAY(mi),MI_WINDOW(mi),*(hp->glx_context)); init(mi); } #endif /* !STANDALONE */ XSCREENSAVER_MODULE ("Polytopes", polytopes) #endif /* USE_GL */ xscreensaver-5.36/hacks/glx/gleidescope.c000644 000767 000024 00000125006 12721365373 020465 0ustar00jwzstaff000000 000000 /* -*- Mode: C; tab-width: 4 -*- */ /* vim: set ai ts=4 sw=4: */ #if 0 /*static const char sccsid[] = "@(#)gleidescope.c 1.0 03/06/27 xlockmore";*/ #endif /* enable -grab switch for animations */ #undef GRAB #undef DISPLAY_TEXTURE /*- * Permission to use, copy, modify, and distribute this software and its * documentation for any purpose and without fee is hereby granted, * provided that the above copyright notice appear in all copies and that * both that copyright notice and this permission notice appear in * supporting documentation. * * This file is provided AS IS with no warranties of any kind. The author * shall have no liability with respect to the infringement of copyrights, * trade secrets or any patents by this file or any part thereof. In no * event will the author be liable for any lost revenue or profits or * other special, indirect and consequential damages. * * Revision History: * * 20030627 1.0 acd First Release. * Texture loading code from 'glplanet' * by Jamie Zawinski * 20030810 1.1 acd Added size flag. * Now grabs screen / video / picture * (uses code from 'glslideshow' by * Mike Oliphant, Ben Buxton, Jamie Zawinski). * Added -duration. * Added mouse code. * Added fade code (also from glslideshow). * 20031013 1.2 acd Migrated to compile without warnings under * xscreensaver 4.13. * 20031023 1.3 acd Better code to limit twisting speeds. * Tweaked initial rotation values. * Move, Rotate, Zoom now chosen at random if * no preference is given. * Made grid slightly bigger so you can't see * the edge when zooming and moving. * 20061226 1.4 acd Now uses GL Display Lists. * 20070318 1.5 acd Generates textures. * Fixed texture size problem (and introduced another). * 20070412 1.6 acd Textures now have independant sizes. * 20070413 1.7 acd Added Lissajous movement pattern. * 20070414 1.8 acd Added corners movement pattern. * 20080319 1.9 acd Changes to arguments for saner gleidescope.xml. * * TODO * generate textures myself - render random shapes to 256x256 texture. (done) * lower res for checks and random - use 256 and 4x4 or 8x8 pixels. (disabled for now) * gnome-saver doesn't let you specify source directory so add that to this. * image loading routine is too slow - rotation grinds to a halt - stop using it. (better in version 5) * image loading also looks bad for non-square images - edges are black. (fixed) * possible to see edge of the world on widescreen terminals - use larger grid and hidden hex removal? * fading textures may have different max_tx - use two sets. (done) * choice of movement patterns. (3 implemented, chooseable at compile time) * look into rangle and tangle. */ /* **---------------------------------------------------------------------------- ** Defines **---------------------------------------------------------------------------- */ #ifdef STANDALONE # define DEFAULTS \ "*delay: 20000 \n" \ "*showFPS: False \n" \ "*size: 0 \n" \ "*useSHM: True \n" \ "*suppressRotationAnimation: True\n" \ # define refresh_gleidescope 0 # include "xlockmore.h" /* from the xscreensaver distribution */ #else /* !STANDALONE */ # include "xlock.h" /* from the xlockmore distribution */ #endif /* !STANDALONE */ #ifdef USE_GL #include "colors.h" #include "xpm-ximage.h" #include "grab-ximage.h" #ifdef GRAB void grab_frame(Display *display, Window window); #endif /* acd TODO should all these be in gleidestruct? */ /* they can't be, because of the idiotic way the xlockmore "argtype vars" interface works. -jwz */ #ifdef GRAB static Bool grab; /* grab images */ #endif static Bool move; /* moving camera */ static Bool nomove; /* no moving camera */ static Bool rotate; /* rotate in place */ static Bool norotate; /* no rotate in place */ static Bool zoom; /* zooming camera */ static Bool nozoom; /* no zooming camera */ static char *image; /* name of texture to load */ static int duration; /* length of time to display grabbed image */ #define MAX_CAM_SPEED 1.0 #define MAX_ANGLE_VEL 1.0 #define INITIAL_ANGLE_VEL 0.2 #define INITIAL_ANGLE_ACC 0.001 #define TWISTING_PROBABILITY 1000 /* 1 in ... of change of acceleration */ #define RADIANS (M_PI / 180) #define ANGLE_120 (M_PI * 2 / 3) #define ANGLE_240 (M_PI * 4 / 3) #define DEF_GRAB "False" #define DEF_MOVE "False" #define DEF_NOMOVE "False" #define DEF_ROTATE "False" #define DEF_NOROTATE "False" #define DEF_ZOOM "False" #define DEF_NOZOOM "False" #define DEF_IMAGE "DEFAULT" #define DEF_DURATION "30" static XrmOptionDescRec opts[] = { #ifdef GRAB {"-grab", ".gleidescope.grab", XrmoptionNoArg, "true"}, #endif {"-move", ".gleidescope.move", XrmoptionNoArg, "true"}, {"-no-move", ".gleidescope.nomove", XrmoptionNoArg, "true"}, {"-rotate", ".gleidescope.rotate", XrmoptionNoArg, "true"}, {"-no-rotate", ".gleidescope.norotate", XrmoptionNoArg, "true"}, {"-zoom", ".gleidescope.zoom", XrmoptionNoArg, "true"}, {"-no-zoom", ".gleidescope.nozoom", XrmoptionNoArg, "true"}, {"-image", ".gleidescope.image", XrmoptionSepArg, "DEFAULT"}, {"-duration", ".gleidescope.duration", XrmoptionSepArg, "30"}, }; static argtype vars[] = { #ifdef GRAB {&grab, "grab", "Grab", DEF_GRAB, t_Bool}, #endif {&move, "move", "Move", DEF_MOVE, t_Bool}, {&nomove, "nomove", "noMove", DEF_NOMOVE, t_Bool}, {&rotate, "rotate", "Rotate", DEF_ROTATE, t_Bool}, {&norotate, "norotate", "noRotate", DEF_NOROTATE, t_Bool}, {&zoom, "zoom", "Zoom", DEF_ZOOM, t_Bool}, {&nozoom, "nozoom", "noZoom", DEF_NOZOOM, t_Bool}, {&image, "image", "Image", DEF_IMAGE, t_String}, {&duration, "duration", "Duration", DEF_DURATION, t_Int}, }; static OptionStruct desc[] = { #ifdef GRAB {"-grab", "grab images to create animation"}, #endif {"-move", "camera will move"}, {"-no-move", "camera won't move"}, {"-rotate", "camera will rotate"}, {"-no-rotate", "camera won't rotate"}, {"-zoom", "camera will zoom"}, {"-no-zoom", "camera won't zoom"}, {"-image", "xpm / xbm image file to use for texture"}, {"-duration", "length of time texture will be used"}, }; ENTRYPOINT ModeSpecOpt gleidescope_opts = { sizeof opts / sizeof opts[0], opts, sizeof vars / sizeof vars[0], vars, desc }; #ifdef USE_MODULES ModStruct gleidescope_description = { "gleidescope", "init_gleidescope", "draw_gleidescope", "release_gleidescope", "draw_gleidescope", "init_gleidescope", NULL, &gleidescope_opts, 1000, 1, 2, 1, 4, 1.0, "", "GL Kaleidescope", 0, NULL}; #endif /* **----------------------------------------------------------------------------- ** Typedefs **----------------------------------------------------------------------------- */ typedef struct hex_s { GLfloat x, y, z; /* position */ } hex_t; typedef struct { GLfloat x; GLfloat y; GLfloat z; } vectorf; typedef struct { GLfloat x; GLfloat y; } vector2f; typedef struct { GLuint id; /* opengl texture id */ GLfloat width, height; /* texture width and height */ GLfloat min_tx, min_ty; /* minimum texture sizes */ GLfloat max_tx, max_ty; /* maximum texture sizes */ time_t start_time; Bool button_down_p; Bool mipmap_p; Bool waiting_for_image_p; /* r_phase is for triangle rotation speed */ GLfloat x_period, y_period, r_period; GLfloat x_phase, y_phase, r_phase; } texture; #define MAX_FADE 500 /* number of fade cycles */ typedef struct { float cam_x_speed, cam_z_speed, cam_y_speed; int cam_x_phase, cam_z_phase, cam_y_phase; float tic; GLXContext *glx_context; Window window; texture textures[2]; /* texture handles */ GLuint visible; /* index for current texture */ GLint fade; time_t start_time; Bool button_down_p; int size; int list; float tangle; /* texture angle (degrees) */ float tangle_vel; /* texture velocity */ float tangle_acc; /* texture acceleration */ float rangle; /* rotate angle */ float rangle_vel; /* rotate velocity */ float rangle_acc; /* rotate acceleration */ /* mouse */ int xstart; int ystart; double xmouse; double ymouse; Bool mipmap_p; Bool waiting_for_image_p; } gleidestruct; #define frandrange(x, y) (x + frand(y - x)) #define XOFFSET (0.8660254f) /* sin 60' */ #define YOFFSET (1.5000000f) /* cos 60' + 1 */ #if 0 #define SIZE 3 /* generates a grid with edges of given size */ /* acd TODO - replace hex[] with this and allow size and distance as parameters */ int generate_grid(int size) int i, x, y; gp->size--; i = gp->size; for (y = -size ; y <= size ; y++) { for (x = -i ; x <= i ; x += 2) { printf("{XOFFSET * %d, YOFFSET * %d, 0},\n", x, y); } printf("\n"); if (y < 0) { i++; } else { i--; } } return 0; } #endif /* acd - this is terrible - 120+ hexes */ static const hex_t hex[] = { /* edges of size 7 */ /* number of hexagons required to cover screen depends on camera distance */ /* at a distance of 10 this is just about enough. */ {XOFFSET * -6, YOFFSET * -6, 0}, {XOFFSET * -4, YOFFSET * -6, 0}, {XOFFSET * -2, YOFFSET * -6, 0}, {XOFFSET * 0, YOFFSET * -6, 0}, {XOFFSET * 2, YOFFSET * -6, 0}, {XOFFSET * 4, YOFFSET * -6, 0}, {XOFFSET * 6, YOFFSET * -6, 0}, {XOFFSET * -7, YOFFSET * -5, 0}, {XOFFSET * -5, YOFFSET * -5, 0}, {XOFFSET * -3, YOFFSET * -5, 0}, {XOFFSET * -1, YOFFSET * -5, 0}, {XOFFSET * 1, YOFFSET * -5, 0}, {XOFFSET * 3, YOFFSET * -5, 0}, {XOFFSET * 5, YOFFSET * -5, 0}, {XOFFSET * 7, YOFFSET * -5, 0}, {XOFFSET * -8, YOFFSET * -4, 0}, {XOFFSET * -6, YOFFSET * -4, 0}, {XOFFSET * -4, YOFFSET * -4, 0}, {XOFFSET * -2, YOFFSET * -4, 0}, {XOFFSET * 0, YOFFSET * -4, 0}, {XOFFSET * 2, YOFFSET * -4, 0}, {XOFFSET * 4, YOFFSET * -4, 0}, {XOFFSET * 6, YOFFSET * -4, 0}, {XOFFSET * 8, YOFFSET * -4, 0}, {XOFFSET * -9, YOFFSET * -3, 0}, {XOFFSET * -7, YOFFSET * -3, 0}, {XOFFSET * -5, YOFFSET * -3, 0}, {XOFFSET * -3, YOFFSET * -3, 0}, {XOFFSET * -1, YOFFSET * -3, 0}, {XOFFSET * 1, YOFFSET * -3, 0}, {XOFFSET * 3, YOFFSET * -3, 0}, {XOFFSET * 5, YOFFSET * -3, 0}, {XOFFSET * 7, YOFFSET * -3, 0}, {XOFFSET * 9, YOFFSET * -3, 0}, {XOFFSET * -10, YOFFSET * -2, 0}, {XOFFSET * -8, YOFFSET * -2, 0}, {XOFFSET * -6, YOFFSET * -2, 0}, {XOFFSET * -4, YOFFSET * -2, 0}, {XOFFSET * -2, YOFFSET * -2, 0}, {XOFFSET * 0, YOFFSET * -2, 0}, {XOFFSET * 2, YOFFSET * -2, 0}, {XOFFSET * 4, YOFFSET * -2, 0}, {XOFFSET * 6, YOFFSET * -2, 0}, {XOFFSET * 8, YOFFSET * -2, 0}, {XOFFSET * 10, YOFFSET * -2, 0}, {XOFFSET * -11, YOFFSET * -1, 0}, {XOFFSET * -9, YOFFSET * -1, 0}, {XOFFSET * -7, YOFFSET * -1, 0}, {XOFFSET * -5, YOFFSET * -1, 0}, {XOFFSET * -3, YOFFSET * -1, 0}, {XOFFSET * -1, YOFFSET * -1, 0}, {XOFFSET * 1, YOFFSET * -1, 0}, {XOFFSET * 3, YOFFSET * -1, 0}, {XOFFSET * 5, YOFFSET * -1, 0}, {XOFFSET * 7, YOFFSET * -1, 0}, {XOFFSET * 9, YOFFSET * -1, 0}, {XOFFSET * 11, YOFFSET * -1, 0}, {XOFFSET * -12, YOFFSET * 0, 0}, {XOFFSET * -10, YOFFSET * 0, 0}, {XOFFSET * -8, YOFFSET * 0, 0}, {XOFFSET * -6, YOFFSET * 0, 0}, {XOFFSET * -4, YOFFSET * 0, 0}, {XOFFSET * -2, YOFFSET * 0, 0}, {XOFFSET * 0, YOFFSET * 0, 0}, {XOFFSET * 2, YOFFSET * 0, 0}, {XOFFSET * 4, YOFFSET * 0, 0}, {XOFFSET * 6, YOFFSET * 0, 0}, {XOFFSET * 8, YOFFSET * 0, 0}, {XOFFSET * 10, YOFFSET * 0, 0}, {XOFFSET * 12, YOFFSET * 0, 0}, {XOFFSET * -11, YOFFSET * 1, 0}, {XOFFSET * -9, YOFFSET * 1, 0}, {XOFFSET * -7, YOFFSET * 1, 0}, {XOFFSET * -5, YOFFSET * 1, 0}, {XOFFSET * -3, YOFFSET * 1, 0}, {XOFFSET * -1, YOFFSET * 1, 0}, {XOFFSET * 1, YOFFSET * 1, 0}, {XOFFSET * 3, YOFFSET * 1, 0}, {XOFFSET * 5, YOFFSET * 1, 0}, {XOFFSET * 7, YOFFSET * 1, 0}, {XOFFSET * 9, YOFFSET * 1, 0}, {XOFFSET * 11, YOFFSET * 1, 0}, {XOFFSET * -10, YOFFSET * 2, 0}, {XOFFSET * -8, YOFFSET * 2, 0}, {XOFFSET * -6, YOFFSET * 2, 0}, {XOFFSET * -4, YOFFSET * 2, 0}, {XOFFSET * -2, YOFFSET * 2, 0}, {XOFFSET * 0, YOFFSET * 2, 0}, {XOFFSET * 2, YOFFSET * 2, 0}, {XOFFSET * 4, YOFFSET * 2, 0}, {XOFFSET * 6, YOFFSET * 2, 0}, {XOFFSET * 8, YOFFSET * 2, 0}, {XOFFSET * 10, YOFFSET * 2, 0}, {XOFFSET * -9, YOFFSET * 3, 0}, {XOFFSET * -7, YOFFSET * 3, 0}, {XOFFSET * -5, YOFFSET * 3, 0}, {XOFFSET * -3, YOFFSET * 3, 0}, {XOFFSET * -1, YOFFSET * 3, 0}, {XOFFSET * 1, YOFFSET * 3, 0}, {XOFFSET * 3, YOFFSET * 3, 0}, {XOFFSET * 5, YOFFSET * 3, 0}, {XOFFSET * 7, YOFFSET * 3, 0}, {XOFFSET * 9, YOFFSET * 3, 0}, {XOFFSET * -8, YOFFSET * 4, 0}, {XOFFSET * -6, YOFFSET * 4, 0}, {XOFFSET * -4, YOFFSET * 4, 0}, {XOFFSET * -2, YOFFSET * 4, 0}, {XOFFSET * 0, YOFFSET * 4, 0}, {XOFFSET * 2, YOFFSET * 4, 0}, {XOFFSET * 4, YOFFSET * 4, 0}, {XOFFSET * 6, YOFFSET * 4, 0}, {XOFFSET * 8, YOFFSET * 4, 0}, {XOFFSET * -7, YOFFSET * 5, 0}, {XOFFSET * -5, YOFFSET * 5, 0}, {XOFFSET * -3, YOFFSET * 5, 0}, {XOFFSET * -1, YOFFSET * 5, 0}, {XOFFSET * 1, YOFFSET * 5, 0}, {XOFFSET * 3, YOFFSET * 5, 0}, {XOFFSET * 5, YOFFSET * 5, 0}, {XOFFSET * 7, YOFFSET * 5, 0}, {XOFFSET * -6, YOFFSET * 6, 0}, {XOFFSET * -4, YOFFSET * 6, 0}, {XOFFSET * -2, YOFFSET * 6, 0}, {XOFFSET * 0, YOFFSET * 6, 0}, {XOFFSET * 2, YOFFSET * 6, 0}, {XOFFSET * 4, YOFFSET * 6, 0}, {XOFFSET * 6, YOFFSET * 6, 0}, }; /* **---------------------------------------------------------------------------- ** Local Variables **---------------------------------------------------------------------------- */ static gleidestruct *gleidescope = NULL; #if 0 /* *load defaults in config structure */ static void setdefaultconfig(void) { #ifdef GRAB grab = False; #endif move = False; rotate = False; zoom = False; image = NULL; } #endif ENTRYPOINT Bool gleidescope_handle_event(ModeInfo *mi, XEvent *event) { gleidestruct *gp = &gleidescope[MI_SCREEN(mi)]; /* printf("event:%d\n", event->xany.type); printf("button:%d\n", event->xbutton.button); */ if (event->xany.type == ButtonPress) { if (event->xbutton.button == Button1 || event->xbutton.button == Button3) { /* store initial values of mouse */ gp->xstart = event->xbutton.x; gp->ystart = event->xbutton.y; /* button is down */ gp->button_down_p = True; return True; } #if 0 /* TODO */ else if (event->xbutton.button == Button4) { /* zoom in */ return True; } else if (event->xbutton.button == Button5) { /* zoom out */ return True; } #endif } else if (event->xany.type == ButtonRelease) { if (event->xbutton.button == Button1 || event->xbutton.button == Button3) { /* button is up */ gp->button_down_p = False; return True; } } else if (event->xany.type == MotionNotify) { if (gp->button_down_p) { /* update mouse position */ gp->xmouse += (double)(event->xmotion.x - gp->xstart) / MI_WIDTH(mi); gp->ymouse += (double)(event->xmotion.y - gp->ystart) / MI_HEIGHT(mi); gp->xstart = event->xmotion.x; gp->ystart = event->xmotion.y; return True; } } else if (screenhack_event_helper (MI_DISPLAY(mi), MI_WINDOW(mi), event)) { gp->start_time = -1; gp->fade = 0; return True; } return False; } static void image_loaded_cb (const char *filename, XRectangle *geometry, int image_width, int image_height, int texture_width, int texture_height, void *closure) { texture *tp = (texture *) closure; #if 0 gp->max_tx = (GLfloat) image_width / texture_width; gp->max_ty = (GLfloat) image_height / texture_height; #endif /* new - taken from flipscreen */ tp->width = texture_width; tp->height = texture_height; tp->min_tx = (GLfloat) geometry->x / tp->width; tp->min_ty = (GLfloat) geometry->y / tp->height; tp->max_tx = (GLfloat) (geometry->x + geometry->width) / tp->width; tp->max_ty = (GLfloat) (geometry->y + geometry->height) / tp->height; #ifdef DEBUG printf("Image w,h: (%d, %d)\n", image_width, image_height); printf("Texture w,h: (%d, %d)\n", texture_width, texture_height); printf("Geom x,y: (%d, %d)\n", geometry->x, geometry->y); printf("Geom w,h: (%d, %d)\n", geometry->width, geometry->height); printf("Max Tx,Ty: (%f, %f)\n", tp->max_tx, tp->max_ty); #endif glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, (tp->mipmap_p ? GL_LINEAR_MIPMAP_LINEAR : GL_LINEAR)); tp->waiting_for_image_p = False; tp->start_time = time ((time_t *) 0); } static void getSnapshot(ModeInfo *mi, texture *texture) { gleidestruct *gp = &gleidescope[MI_SCREEN(mi)]; #ifdef DEBUG printf("getSnapshot"); #endif if (MI_IS_WIREFRAME(mi)) return; gp->mipmap_p = True; load_texture_async (mi->xgwa.screen, mi->window, *gp->glx_context, 0, 0, gp->mipmap_p, texture->id, image_loaded_cb, texture); texture->start_time = time((time_t *)0); } #define TEXTURE_SIZE 256 static void plot(unsigned char *buffer, int x, int y, int r, int g, int b, int a) { int c; if (x < 0 || x >= TEXTURE_SIZE || y < 0 || y >= TEXTURE_SIZE) { return; } c = ((x * TEXTURE_SIZE) + y) * 4; /*printf("(%d,%d)[%d]\n", x, y, c);*/ buffer[c + 0] = r; buffer[c + 1] = g; buffer[c + 2] = b; buffer[c + 3] = a; } #if 0 static void plot2(unsigned char *buffer, int x, int y, int r, int g, int b, int a) { int c; if (x < 0 || x >= TEXTURE_SIZE || y < 0 || y >= TEXTURE_SIZE) { return; } c = ((x * TEXTURE_SIZE) + y) * 4; /*printf("(%d,%d)[%d]\n", x, y, c);*/ buffer[c + 0] = r; buffer[c + 1] = g; buffer[c + 2] = b; buffer[c + 3] = a; if (y + 1 < TEXTURE_SIZE) { buffer[c + 4] = r; buffer[c + 5] = g; buffer[c + 6] = b; buffer[c + 7] = a; } if (x + 1 < TEXTURE_SIZE) { c += (TEXTURE_SIZE * 4); buffer[c + 0] = r; buffer[c + 1] = g; buffer[c + 2] = b; buffer[c + 3] = a; if (y + 1 < TEXTURE_SIZE) { buffer[c + 4] = r; buffer[c + 5] = g; buffer[c + 6] = b; buffer[c + 7] = a; } } } #endif /* draw geometric shapes to texture */ /* modifies passed in buffer */ static void draw_shapes (unsigned char *buffer) { int a = 0xff; int x, y, w, h; int i, j; int s; float left, right; for (i = 0 ; i < TEXTURE_SIZE * TEXTURE_SIZE * 4 ; i += 4) { buffer[i + 0] = 0x00; buffer[i + 1] = 0x00; buffer[i + 2] = 0x00; buffer[i + 3] = 0xff; } for (s = 0 ; s < 25 ; s++) { int shape = random() % 3; /* 8 bits */ int r = (random() & 0xff); int g = (random() & 0xff); int b = (random() & 0xff); switch (shape) { case 0: /* rectangle */ x = (random() % TEXTURE_SIZE) - (TEXTURE_SIZE / 4); /* top left */ y = (random() % TEXTURE_SIZE) - (TEXTURE_SIZE / 4); w = 10 + random() % (TEXTURE_SIZE / 4); /* size */ h = 10 + random() % (TEXTURE_SIZE / 4); #ifdef DEBUG printf("Rectangle: (%d, %d)(%d, %d)\n", x, y, w, h); #endif if (x < 0) { x = 0; } if (y < 0) { y = 0; } for (i = x ; i < x + w && i < TEXTURE_SIZE; i++) { for (j = y ; j < y + h && j < TEXTURE_SIZE; j++) { plot(buffer, i, j, r, g, b, a); } } break; case 1: /* circle */ x = random() % TEXTURE_SIZE; /* centre */ y = random() % TEXTURE_SIZE; h = 10 + random() % (TEXTURE_SIZE / 8); /* radius */ #ifdef DEBUG printf("Circle: %d, %d, %d\n", x, y, h); #endif for (i = 0 ; i < h ; i++) { int xdist = i * i; for (j = 0 ; j < h ; j++) { int ydist = j * j; /* printf("xdist: %d\n", xdist); printf("ydist: %d\n", ydist); printf("radius: %d\n", h * h); */ if ((xdist + ydist) < (h * h)) { plot(buffer, x + i, y + j, r, b, g, a); /* check we haven't already done these */ if (j != 0) { plot(buffer, x + i, y - j, r, b, g, a); } if (i != 0) { plot(buffer, x - i, y + j, r, b, g, a); if (j != 0) { plot(buffer, x - i, y - j, r, b, g, a); } } } } } break; case 2: /* triangle */ x = random() % TEXTURE_SIZE; /* top */ y = random() % TEXTURE_SIZE; h = 10 + random() % (TEXTURE_SIZE / 4); /* height */ #ifdef DEBUG printf("Triangle: %d, %d, %d\n", x, y, h); #endif left = x; right = x; for (i = 0 ; i < h ; i++) { for (j = left ; j < right ; j++) { plot(buffer, j, y + i, r, g, b, a); } left -= .5; right += .5; } break; } } } static void setup_random_texture (ModeInfo *mi, texture *texture) { int width = 0, height = 0; char buf[1024]; unsigned char *my_data = NULL; #if 0 int i, j, c; int style; int r0, g0, b0, a0, r1, g1, b1, a1; #endif #ifdef DEBUG printf("RandomTexture\n"); #endif /* use this texture */ glBindTexture(GL_TEXTURE_2D, texture->id); clear_gl_error(); /* * code for various generated patterns - noise, stripes, checks etc. * random geometric shapes looked the best. */ #if 0 style = random() & 0x3; r0 = random() & 0xff; g0 = random() & 0xff; b0 = random() & 0xff; a0 = 0xff; r1 = random() & 0xff; g1 = random() & 0xff; b1 = random() & 0xff; a1 = 0xff; switch (style) { case 0: /* random */ printf("Random0\n"); height = width = TEXTURE_SIZE; my_data = (void *)malloc(width * height * 4); for (i = 0 ; i < width ; i += 2) { for (j = 0 ; j < height ; j += 2) { r0 = random() & 0xff; g0 = random() & 0xff; b0 = random() & 0xff; a0 = 0xff; plot2(my_data, i, j, r0, g0, b0, a0); } } break; case 1: /* shapes */ #endif #ifdef DEBUG printf("Shapes\n"); #endif height = width = TEXTURE_SIZE; my_data = (void *)malloc(width * height * 4); draw_shapes(my_data); #if 0 break; case 2: /* check */ printf("Check\n"); height = width = TEXTURE_SIZE; my_data = (void *)malloc(width * height * 4); for (i = 0 ; i < height ; i += 2) { for (j = 0 ; j < width ; j += 2) { if (((i + j) & 0x3) == 0) { plot2(my_data, i, j, r0, g0, b0, a0); } else { plot2(my_data, i, j, r1, g1, b1, a1); } } } break; case 3: /* random stripes */ printf("Stripes 2\n"); height = width = TEXTURE_SIZE; my_data = (void *)malloc(width * height * 4); for (i = 0 ; i < height ; i += 2) { r0 = random() & 0xff; g0 = random() & 0xff; b0 = random() & 0xff; a0 = 0xff; for (j = 0 ; j < width ; j += 2) { plot2(my_data, i, j, r0, g0, b0, a0); } } break; } #endif glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, width, height, 0, GL_RGBA, GL_UNSIGNED_BYTE, my_data); sprintf (buf, "random texture: (%dx%d)", width, height); check_gl_error(buf); /* setup parameters for texturing */ glPixelStorei(GL_UNPACK_ALIGNMENT, 4); glPixelStorei(GL_UNPACK_ROW_LENGTH, width); glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE); glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT); glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT); if (random() & 0x1) { glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); } else { glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); } if (my_data != NULL) { free(my_data); my_data = NULL; } /* use full texture */ /* acd - was 1.0 */ texture->min_tx = 0.0; texture->max_tx = 2.0; texture->min_ty = 0.0; texture->max_ty = 2.0; texture->start_time = time((time_t *)0); } static Bool setup_file_texture (ModeInfo *mi, char *filename, texture *texture) { Display *dpy = mi->dpy; Visual *visual = mi->xgwa.visual; char buf[1024]; Colormap cmap = mi->xgwa.colormap; XImage *image = xpm_file_to_ximage (dpy, visual, cmap, filename); if (!image) return False; #ifdef DEBUG printf("FileTexture\n"); #endif /* use this texture */ glBindTexture(GL_TEXTURE_2D, texture->id); clear_gl_error(); glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, image->width, image->height, 0, GL_RGBA, GL_UNSIGNED_BYTE, image->data); sprintf (buf, "texture: %.100s (%dx%d)", filename, image->width, image->height); check_gl_error(buf); /* setup parameters for texturing */ glPixelStorei(GL_UNPACK_ALIGNMENT, 4); glPixelStorei(GL_UNPACK_ROW_LENGTH, image->width); glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE); glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT); glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT); glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); /* use full texture */ texture->min_tx = 0.0; texture->max_tx = 1.0; texture->min_ty = 0.0; texture->max_ty = 1.0; texture->start_time = time((time_t *)0); return True; } static void setup_texture(ModeInfo * mi, texture *texture) { gleidestruct *gp = &gleidescope[MI_SCREEN(mi)]; if (!image || !*image || !strcmp(image, "DEFAULT")) { BUILTIN: /* no image specified - use system settings */ #ifdef DEBUG printf("SetupTexture: get_snapshot\n"); #endif getSnapshot(mi, texture); } else { if (strcmp(image, "GENERATE") == 0) { #ifdef DEBUG printf("SetupTexture: random_texture\n"); #endif setup_random_texture(mi, texture); } else { /* use supplied image file */ #ifdef DEBUG printf("SetupTexture: file_texture\n"); #endif if (! setup_file_texture(mi, image, texture)) goto BUILTIN; } } /* copy start time from texture */ gp->start_time = texture->start_time; check_gl_error("texture initialization"); /* acd * resultant loaded image is upside down BUT * it's a kaledescope and half of the hexagon is backwards anyway... */ /* TODO: values for lissajous movement */ texture->x_period = frandrange(-2.0, 2.0); texture->y_period = frandrange(-2.0, 2.0); texture->r_period = frandrange(-2.0, 2.0); texture->x_phase = frand(M_PI * 2); texture->y_phase = frand(M_PI * 2); texture->r_phase = frand(M_PI * 2); #ifdef DEBUG printf("XPeriod %f XPhase %f\n", texture->x_period, texture->x_phase); printf("YPeriod %f YPhase %f\n", texture->y_period, texture->y_phase); printf("RPeriod %f RPhase %f\n", texture->r_period, texture->r_phase); #endif } #define VERTEX0 glVertex3f( 0.0000f, 0.000f, 0.0f); #define VERTEX1 glVertex3f( 0.0000f, 1.000f, 0.0f); #define VERTEX2 glVertex3f( XOFFSET, 0.500f, 0.0f); #define VERTEX3 glVertex3f( XOFFSET, -0.500f, 0.0f); #define VERTEX4 glVertex3f( 0.0000f, -1.000f, 0.0f); #define VERTEX5 glVertex3f(-XOFFSET, -0.500f, 0.0f); #define VERTEX6 glVertex3f(-XOFFSET, 0.500f, 0.0f); /* ** Three different functions for calculating texture coordinates ** which modify how the texture triangle moves over the source image. ** Choose one. */ #if 0 /* the classic equilateral triangle rotating around centre */ static void calculate_texture_coords(ModeInfo *mi, texture *texture, vector2f t[3]) { gleidestruct *gp = &gleidescope[MI_SCREEN(mi)]; GLfloat centre_x = 0.5; GLfloat centre_y = 0.5; GLfloat radius_x = (texture->max_tx - texture->min_tx) / 2; GLfloat radius_y = (texture->max_ty - texture->min_ty) / 2; GLfloat tangle2; t[0].x = centre_x; t[0].y = centre_y; /* t[1] */ t[1].x = centre_x + .95 * radius_x * cos((gp->ymouse * 2 * M_PI) + (gp->tangle * RADIANS)); t[1].y = centre_y + .95 * radius_y * sin((gp->ymouse * 2 * M_PI) + (gp->tangle * RADIANS)); /* t[2] is always 60' further around than t2 */ tangle2 = (gp->ymouse * 2 * M_PI) + (gp->tangle * RADIANS) + (M_PI * 2 / 6); t[2].x = centre_x + .95 * radius_x * cos(tangle2); t[2].y = centre_y + .95 * radius_y * sin(tangle2); #if 0 printf("texcoords:[%f,%f]->[%f,%f](%f,%f)\n", t[0].x, t[0].y, t[1].x, t[1].y, texture->max_tx, texture->max_ty); #endif } #endif #if 1 /* new lissajous movement pattern */ static void calculate_texture_coords(ModeInfo *mi, texture *texture, vector2f t[3]) { /* equilateral triangle rotating around centre */ gleidestruct *gp = &gleidescope[MI_SCREEN(mi)]; GLfloat width = texture->max_tx - texture->min_tx; GLfloat height = texture->max_ty - texture->min_ty; /* centre */ GLfloat centre_x = texture->min_tx + (width * .5); GLfloat centre_y = texture->min_ty + (height * .5); /* m radius and t radius should be = .5 */ /* triangle radius is 30% available space */ GLfloat t_radius_x = width * .3; GLfloat t_radius_y = height * .3; /* movement radius is 30% available space */ GLfloat m_radius_x = width * .2; GLfloat m_radius_y = height * .2; GLfloat angle2; /* centre of triangle */ GLfloat angle = (gp->ymouse * 2 * M_PI) + (gp->tangle * RADIANS); /* to radians */ GLfloat t_centre_x = centre_x + m_radius_x * cos(texture->x_period * angle + texture->x_phase); GLfloat t_centre_y = centre_y + m_radius_y * sin(texture->y_period * angle + texture->y_phase); #if 0 printf("WH: %f, %f - tWH: %f, %f\n", width, height, texture->width, texture->height); printf("size: (%f, %f)\n", width, height); printf("centre: (%f, %f)\n", centre_x, centre_y); #endif angle2 = texture->r_period * angle + texture->r_phase; t[0].x = t_centre_x + t_radius_x * cos(angle2); t[0].y = t_centre_y + t_radius_y * sin(angle2); t[1].x = t_centre_x + t_radius_x * cos(angle2 + ANGLE_120); t[1].y = t_centre_y + t_radius_y * sin(angle2 + ANGLE_120); t[2].x = t_centre_x + t_radius_x * cos(angle2 + ANGLE_240); t[2].y = t_centre_y + t_radius_y * sin(angle2 + ANGLE_240); #if 0 printf("texcoords:[%f,%f]->[%f,%f](%f,%f)\n", t[0].x, t[0].y, t[1].x, t[1].y, texture->max_tx, texture->max_ty); #endif } #endif #if 0 /* corners into corners - meant to maximise coverage */ static void calculate_texture_coords(ModeInfo *mi, texture *texture, vector2f t[3]) { /* equilateral triangle rotating around centre */ gleidestruct *gp = &gleidescope[MI_SCREEN(mi)]; GLfloat width = texture->max_tx - texture->min_tx; GLfloat height = texture->max_ty - texture->min_ty; /* centre */ GLfloat centre_x = texture->min_tx + (width * .5); GLfloat centre_y = texture->min_ty + (height * .5); /* m radius and t radius should be = .5 */ /* triangle radius calculated using maths 8) */ #define TRADIUS (M_SQRT2 - 1.0) #define MRADIUS (1.0 - (M_SQRT2 / 2.0)) GLfloat t_radius_x = width * TRADIUS * .95; GLfloat t_radius_y = height * TRADIUS * .95; /* movement radius also calculated using maths */ GLfloat m_radius_x = width * MRADIUS * .95; GLfloat m_radius_y = height * MRADIUS * .95; GLfloat angle, angle2; GLfloat t_centre_x, t_centre_y; /* centre of triangle */ angle = gp->tangle * RADIANS; /* to radians */ t_centre_x = centre_x + m_radius_x * cos(angle); t_centre_y = centre_y + m_radius_y * sin(angle); #if 0 printf("angle: %f, %f\n", angle, gp->tangle); printf("tcentre: %f,%f\n", t_centre_x, t_centre_y); printf("tradius: %f,%f\n", t_radius_x, t_radius_y); printf("size: (%f, %f)\n", width, height); printf("centre: (%f, %f)\n", centre_x, centre_y); printf("centre: (%f, %f)\n", centre_x, centre_y); printf("TRADIUS: %f\n", TRADIUS); printf("MRADIUS: %f\n", MRADIUS); #endif /* angle2 is tied to tangle */ angle2 = (180.0 - ((30.0 / 90.0) * gp->tangle)) * RADIANS; #if 0 printf("Angle1: %f\tAngle2: %f\n", angle / RADIANS, angle2 / RADIANS); #endif t[0].x = t_centre_x + t_radius_x * cos(angle2); t[0].y = t_centre_y + t_radius_y * sin(angle2); t[1].x = t_centre_x + t_radius_x * cos(angle2 + ANGLE_120); t[1].y = t_centre_y + t_radius_y * sin(angle2 + ANGLE_120); t[2].x = t_centre_x + t_radius_x * cos(angle2 + ANGLE_240); t[2].y = t_centre_y + t_radius_y * sin(angle2 + ANGLE_240); #if 0 printf("texcoords:[%f,%f][%f,%f][%f,%f]\n", t[0].x, t[0].y, t[1].x, t[1].y, t[2].x, t[2].y); #endif } #endif static int draw_hexagons(ModeInfo *mi, int translucency, texture *texture) { int polys = 0; int i; vector2f t[3]; gleidestruct *gp = &gleidescope[MI_SCREEN(mi)]; calculate_texture_coords(mi, texture, t); glColor4f(1.0, 1.0, 1.0, (float)translucency / MAX_FADE); glEnable(GL_TEXTURE_2D); glEnable(GL_BLEND); glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); glDepthMask(GL_FALSE); glBindTexture(GL_TEXTURE_2D, texture->id); if (gp->list == -1) { gp->list = glGenLists(1); } /* compile new list */ glNewList(gp->list, GL_COMPILE); glBegin(GL_TRIANGLES); /* ** six triangles to each hexagon */ glTexCoord2f(t[0].x, t[0].y); VERTEX0; glTexCoord2f(t[1].x, t[1].y); VERTEX1; glTexCoord2f(t[2].x, t[2].y); VERTEX6; glTexCoord2f(t[0].x, t[0].y); VERTEX0; glTexCoord2f(t[2].x, t[2].y); VERTEX6; glTexCoord2f(t[1].x, t[1].y); VERTEX5; glTexCoord2f(t[0].x, t[0].y); VERTEX0; glTexCoord2f(t[1].x, t[1].y); VERTEX5; glTexCoord2f(t[2].x, t[2].y); VERTEX4; glTexCoord2f(t[0].x, t[0].y); VERTEX0; glTexCoord2f(t[2].x, t[2].y); VERTEX4; glTexCoord2f(t[1].x, t[1].y); VERTEX3; glTexCoord2f(t[0].x, t[0].y); VERTEX0; glTexCoord2f(t[1].x, t[1].y); VERTEX3; glTexCoord2f(t[2].x, t[2].y); VERTEX2; glTexCoord2f(t[0].x, t[0].y); VERTEX0; glTexCoord2f(t[2].x, t[2].y); VERTEX2; glTexCoord2f(t[1].x, t[1].y); VERTEX1; glEnd(); glEndList(); /* call the list n times */ for (i = 0 ; i < sizeof(hex) / sizeof(hex[0]) ; i++) { glPushMatrix(); glTranslatef(hex[i].x, hex[i].y, 0.0); glCallList(gp->list); polys += 6; glPopMatrix(); } #ifdef DISPLAY_TEXTURE glPushMatrix(); /* acd debug - display (bigger, centred) texture */ glScalef(2.0, 2.0, 2.0); glTranslatef(-0.5, -0.5, 0.0); glBegin(GL_QUADS); glTexCoord2f(0.0, 0.0); glVertex3f(0.0, 0.0, -0.1); glTexCoord2f(1.0, 0.0); glVertex3f(1.0, 0.0, -0.1); glTexCoord2f(1.0, 1.0); glVertex3f(1.0, 1.0, -0.1); glTexCoord2f(0.0, 1.0); glVertex3f(0.0, 1.0, -0.1); polys++; glEnd(); /* acd debug - display texture triangle */ glColor4f(1.0, 0.5, 1.0, 1.0); glBegin(GL_LINE_LOOP); glVertex3f(t[0].x, t[0].y, -0.11); glVertex3f(t[1].x, t[1].y, -0.11); glVertex3f(t[2].x, t[2].y, -0.11); polys++; glEnd(); glPopMatrix(); #endif glDisable(GL_TEXTURE_2D); glDepthMask(GL_TRUE); glDisable(GL_BLEND); return polys; } /* * main rendering loop */ static void draw(ModeInfo * mi) { GLfloat x_angle, y_angle, z_angle; gleidestruct *gp = &gleidescope[MI_SCREEN(mi)]; vectorf v1; mi->polygon_count = 0; glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glLoadIdentity(); gp->tic += 0.005f; x_angle = gp->cam_x_phase + gp->tic * gp->cam_x_speed; y_angle = gp->cam_y_phase + gp->tic * gp->cam_y_speed; z_angle = gp->cam_z_phase + gp->tic * gp->cam_z_speed; if (move) { v1.x = 1 * sin(x_angle); v1.y = 1 * sin(y_angle); } else { v1.x = 0; v1.y = 0; } /* size is changed in pinit() to be distance from plane */ gp->size = MI_SIZE(mi); if (gp->size > 10) { gp->size = 10; } if (gp->size <= 0) { gp->size = 0; } if (gp->size > 0) { /* user defined size */ v1.z = gp->size; } else if (zoom) { /* max distance given by adding the constant and the multiplier */ v1.z = 5.0 + 3.0 * sin(z_angle); } else { /* default */ v1.z = 7.0; } /* update rotation angle (but not if mouse button down) */ if (rotate && !gp->button_down_p) { float new_rangle_vel = 0.0; /* update camera rotation angle and velocity */ gp->rangle += gp->rangle_vel; new_rangle_vel = gp->rangle_vel + gp->rangle_acc; if (new_rangle_vel > -MAX_ANGLE_VEL && new_rangle_vel < MAX_ANGLE_VEL) { /* new velocity is within limits */ gp->rangle_vel = new_rangle_vel; } /* randomly change twisting speed - 3ff = 1024 */ if ((random() % TWISTING_PROBABILITY) < 1.0) { gp->rangle_acc = INITIAL_ANGLE_ACC * frand(1.0); if (gp->rangle_vel > 0.0) { gp->rangle_acc = -gp->rangle_acc; } } } #if 0 printf("Rangle: %f : %f : %f\n", gp->rangle, gp->rangle_vel, gp->rangle_acc); printf("Tangle: %f : %f : %f\n", gp->tangle, gp->tangle_vel, gp->tangle_acc); #endif #ifdef WOBBLE /* this makes the image wobble - requires -move and a larger grid */ gluLookAt(0, 0, v1.z, v1.x, v1.y, 0.0, 0.0, 1.0, 0.0); #else /* no wobble - camera always perpendicular to grid */ /* rotating camera rather than entire space - smoother */ gluLookAt( v1.x, v1.y, v1.z, v1.x, v1.y, 0.0, sin((gp->xmouse * M_PI * 2) + gp->rangle * RADIANS), cos((gp->xmouse * M_PI * 2) + gp->rangle * RADIANS), 0.0); #endif # ifdef HAVE_MOBILE /* Keep it the same relative size when rotated. */ { GLfloat h = MI_HEIGHT(mi) / (GLfloat) MI_WIDTH(mi); int o = (int) current_device_rotation(); if (o != 0 && o != 180 && o != -180) glScalef (1/h, 1/h, 1/h); } # endif if (gp->fade == 0) { /* not fading */ mi->polygon_count += draw_hexagons(mi, MAX_FADE, &gp->textures[gp->visible]); } else { /* fading - show both textures with alpha NB first is always max alpha */ mi->polygon_count += draw_hexagons(mi, MAX_FADE, &gp->textures[1 - gp->visible]); mi->polygon_count += draw_hexagons(mi, MAX_FADE - gp->fade, &gp->textures[gp->visible]); /* fade some more */ gp->fade++; /* have we faded enough? */ if (gp->fade > MAX_FADE) { /* stop fading */ gp->fade = 0; gp->visible = 1 - gp->visible; } } /* increment texture angle based on time, velocity etc */ /* but only if button is not down */ if (!gp->button_down_p) { float new_tangle_vel = 0.0; gp->tangle += gp->tangle_vel; /* work out new texture angle velocity */ new_tangle_vel = gp->tangle_vel + gp->tangle_acc; if (new_tangle_vel > -MAX_ANGLE_VEL && new_tangle_vel < MAX_ANGLE_VEL) { /* new velocity is inside limits */ gp->tangle_vel = new_tangle_vel; } /* randomly change twisting speed - 3ff = 1024 */ if ((random() % TWISTING_PROBABILITY) < 1.0) { gp->tangle_acc = INITIAL_ANGLE_ACC * frand(1.0); if (gp->tangle_vel > 0.0) { gp->tangle_acc = -gp->tangle_acc; } } } glFlush(); } /* * new window size or exposure */ ENTRYPOINT void reshape_gleidescope(ModeInfo *mi, int width, int height) { GLfloat h = (GLfloat) height / (GLfloat) width; glViewport(0, 0, (GLint) width, (GLint) height); glMatrixMode(GL_PROJECTION); glLoadIdentity(); gluPerspective(50.0, 1/h, 0.1, 2000.0); glMatrixMode (GL_MODELVIEW); glLineWidth(1); glPointSize(1); } static void pinit(ModeInfo * mi) { gleidestruct *gp = &gleidescope[MI_SCREEN(mi)]; /* set start time - star_time = 0 implies non-dynamic texture */ gp->start_time = (time_t)0; /* set the texture size to default */ /* gp->max_tx = 1.0; gp->max_ty = 1.0; */ /* no fading */ gp->fade = 0; glShadeModel(GL_SMOOTH); glPolygonMode(GL_FRONT_AND_BACK, GL_FILL); glEnable(GL_DEPTH_TEST); glEnable(GL_CULL_FACE); glDisable(GL_LIGHTING); /* space for textures */ glGenTextures(1, &gp->textures[0].id); glGenTextures(1, &gp->textures[1].id); gp->visible = 0; setup_texture(mi, &gp->textures[gp->visible]); /* ** want to choose a value for arg randomly if neither -arg nor -no-arg ** is specified. xscreensaver libraries don't seem to let you do this - ** if something isn't true then it is false (pesky two-state boolean values). ** so, i've defined both -arg and -no-arg to arguments and added the ** following logic. ** (btw if both -arg and -no-arg are defined then arg is set to False) */ if (zoom == False && nozoom == False) { /* no zoom preference - randomise */ zoom = (((random() & 0x1) == 0x1) ? True : False); } else if (nozoom == True) { /* definately no zoom */ zoom = False; } if (move == False && nomove == False) { /* no move preference - randomise */ move = (((random() & 0x1) == 0x1) ? True : False); } else if (nomove == True) { /* definately no move */ move = False; } if (rotate == False && norotate == False) { /* no rotate preference - randomise */ rotate = (((random() & 0x1) == 0x1) ? True : False); } else if (norotate == True) { /* definately no rotate */ rotate = False; } /* define cam variables */ gp->cam_x_speed = MAX_CAM_SPEED * frandrange(-.5, 0.5); gp->cam_x_phase = random() % 360; gp->cam_y_speed = MAX_CAM_SPEED * frandrange(-.5, 0.5); gp->cam_y_phase = random() % 360; gp->cam_z_speed = MAX_CAM_SPEED * frandrange(-.5, 0.5); gp->cam_z_phase = random() % 360; /* initial angular speeds */ gp->rangle_vel = INITIAL_ANGLE_VEL * frandrange(-.5, 0.5); gp->tangle_vel = INITIAL_ANGLE_VEL * frandrange(-.5, 0.5); gp->rangle_acc = INITIAL_ANGLE_ACC * frandrange(-.5, 0.5); gp->tangle_acc = INITIAL_ANGLE_ACC * frandrange(-.5, 0.5); /* jwz */ #if 0 { GLfloat speed = 15; gp->rangle_vel *= speed; gp->tangle_vel *= speed; gp->rangle_acc *= speed; gp->tangle_acc *= speed; } #endif /* distance is 11 - size */ if (gp->size != -1) { if (zoom) { fprintf(stderr, "-size given. ignoring -zoom.\n"); zoom = False; } if (gp->size < 1) { gp->size = 1; } else if (gp->size >= 10) { gp->size = 10; } gp->size = 11 - gp->size; } #ifdef DEBUG printf("phases [%d, %d, %d]\n", gp->cam_x_phase, gp->cam_y_phase, gp->cam_z_phase); #endif } ENTRYPOINT void init_gleidescope(ModeInfo * mi) { gleidestruct *gp; int screen = MI_SCREEN(mi); if (gleidescope == NULL) { gleidescope = (gleidestruct *) calloc(MI_NUM_SCREENS(mi), sizeof (gleidestruct)); if (gleidescope == NULL) { return; } } gp = &gleidescope[screen]; gp->window = MI_WINDOW(mi); gp->size = -1; gp->list = -1; if ((gp->glx_context = init_GL(mi)) != NULL) { reshape_gleidescope(mi, MI_WIDTH(mi), MI_HEIGHT(mi)); clear_gl_error(); /* WTF? sometimes "invalid op" from glViewport! */ glDrawBuffer(GL_BACK); /* do initialisation */ pinit(mi); } else { MI_CLEARWINDOW(mi); } } ENTRYPOINT void draw_gleidescope(ModeInfo * mi) { gleidestruct *gp = &gleidescope[MI_SCREEN(mi)]; Display *display = MI_DISPLAY(mi); Window window = MI_WINDOW(mi); if (!gp->glx_context) return; /* Just keep running before the texture has come in. */ /* if (gp->waiting_for_image_p) return; */ glDrawBuffer(GL_BACK); glXMakeCurrent(display, window, *(gp->glx_context)); draw(mi); if (mi->fps_p) { do_fps (mi); } glFinish(); glXSwapBuffers(display, window); #ifdef GRAB if (grab) { grab_frame(display, window); } #endif /* need to change texture? */ if ((gp->start_time != 0) && (duration != -1) && gp->fade == 0) { if (gp->start_time + duration <= time((time_t *)0)) { #ifdef DEBUG printf("Start Time: %lu - Current Time: %lu\n", (unsigned long)gp->start_time, (unsigned long)time((time_t *)0)); printf("Changing Texture\n"); #endif /* get new snapshot (into back buffer) and start fade count */ setup_texture(mi, &gp->textures[1 - gp->visible]); /* restart fading */ gp->fade = 1; } } } ENTRYPOINT void release_gleidescope(ModeInfo * mi) { if (gleidescope != NULL) { int screen; for (screen = 0; screen < MI_NUM_SCREENS(mi); screen++) { gleidestruct *gp = &gleidescope[screen]; /* acd - is this needed? */ if (gp->glx_context) { /* Display lists MUST be freed while their glXContext is current. */ glXMakeCurrent(MI_DISPLAY(mi), gp->window, *(gp->glx_context)); /* acd - was code here for freeing things that are no longer in struct */ } } (void) free((void *) gleidescope); gleidescope = NULL; } FreeAllGL(mi); } XSCREENSAVER_MODULE ("Gleidescope", gleidescope) #endif xscreensaver-5.36/hacks/glx/mirrorblob.c000664 000767 000024 00000161057 12705612106 020352 0ustar00jwzstaff000000 000000 /* mirrorblob Copyright (c) 2003 Jon Dowdall */ /* * Permission to use, copy, modify, and distribute this software and its * documentation for any purpose and without fee is hereby granted, * provided that the above copyright notice appear in all copies and that * both that copyright notice and this permission notice appear in * supporting documentation. * * This file is provided AS IS with no warranties of any kind. The author * shall have no liability with respect to the infringement of copyrights, * trade secrets or any patents by this file or any part thereof. In no * event will the author be liable for any lost revenue or profits or * other special, indirect and consequential damages. * * Revision History: * 23-Sep-2003: jon.dowdall@bigpond.com Created module "blob" * 19-Oct-2003: jon.dowdall@bigpond.com Added texturing * 21-Oct-2003: Renamed to mirrorblob * 10-Feb-2004: jon.dowdall@bigpond.com Added motion blur * 28-Jan-2006: jon.dowdall@bigpond.com Big clean up and bug fixes * 13-Apr-2009: jon.dowdall@gmail.com Fixed Mac version * * The mirrorblob screensaver draws a pulsing blob on the screen. Options * include adding a background (via screen_to_texture), texturing the blob, * making the blob semi-transparent and varying the resolution of the blob * tessellation. * * The blob was inspired by a lavalamp is in no way a simulation. The code is * just an attempt to generate some eye-candy. * * Much of xmirrorblob code framework is taken from the pulsar module by David * Konerding and the glslideshow by Mike Oliphant and Jamie Zawinski. * */ #include #ifdef STANDALONE #define DEFAULTS "*delay: " DEF_DELAY "\n" \ "*showFPS: " DEF_FPS "\n" \ "*useSHM: True \n" \ "*desktopGrabber: xscreensaver-getimage -no-desktop %s\n" \ "*grabDesktopImages: True \n" \ "*chooseRandomImages: True \n" \ "*suppressRotationAnimation: True\n" \ # define refresh_mirrorblob 0 # include "xlockmore.h" #else /* !STANDALONE */ # include "xlock.h" /* from the xlockmore distribution */ #endif /* !STANDALONE */ #ifdef USE_GL /* whole file */ #define DEF_DELAY "10000" #define DEF_FPS "False" #define DEF_WIRE "False" #define DEF_BLEND "1.0" #define DEF_FOG "False" #define DEF_ANTIALIAS "False" #define DEF_WALLS "False" #define DEF_COLOUR "False" #define DEF_ASYNC "True" #define DEF_TEXTURE "True" #define DEF_OFFSET_TEXTURE "False" #define DEF_PAINT_BACKGROUND "True" #define DEF_RESOLUTION "30" #define DEF_BUMPS "10" #define DEF_MOTION_BLUR "0.0" #define DEF_INCREMENTAL "0" #define DEF_HOLD_TIME "30.0" #define DEF_FADE_TIME "5.0" #define DEF_ZOOM "1.0" #ifdef HAVE_XMU # ifndef VMS # include #else /* VMS */ # include # endif /* VMS */ #endif #include "gltrackball.h" #include "grab-ximage.h" #undef countof #define countof(x) (sizeof((x)) / sizeof((*x))) #define PI 3.1415926535897 /* Options from command line */ static GLfloat blend; static Bool wireframe; static Bool do_fog; static Bool do_antialias; static Bool do_walls; static Bool do_texture; static Bool do_paint_background; static Bool do_colour; static Bool offset_texture; static int resolution; static int bumps; static float motion_blur; static float fade_time; static float hold_time; static float zoom; /* Internal parameters based on supplied options */ static Bool culling; static Bool load_textures; static XrmOptionDescRec opts[] = { {"-wire", ".blob.wire", XrmoptionNoArg, "true" }, {"+wire", ".blob.wire", XrmoptionNoArg, "false" }, {"-blend", ".blob.blend", XrmoptionSepArg, 0 }, {"-fog", ".blob.fog", XrmoptionNoArg, "true" }, {"+fog", ".blob.fog", XrmoptionNoArg, "false" }, {"-antialias", ".blob.antialias", XrmoptionNoArg, "true" }, {"+antialias", ".blob.antialias", XrmoptionNoArg, "false" }, {"-walls", ".blob.walls", XrmoptionNoArg, "true" }, {"+walls", ".blob.walls", XrmoptionNoArg, "false" }, {"-texture", ".blob.texture", XrmoptionNoArg, "true" }, {"+texture", ".blob.texture", XrmoptionNoArg, "false" }, {"-colour", ".blob.colour", XrmoptionNoArg, "true" }, {"+colour", ".blob.colour", XrmoptionNoArg, "false" }, {"-offset-texture", ".blob.offsetTexture", XrmoptionNoArg, "true" }, {"+offset-texture", ".blob.offsetTexture", XrmoptionNoArg, "false" }, {"-paint-background", ".blob.paintBackground", XrmoptionNoArg, "true" }, {"+paint-background", ".blob.paintBackground", XrmoptionNoArg, "false" }, {"-resolution", ".blob.resolution", XrmoptionSepArg, NULL }, {"-bumps", ".blob.bumps", XrmoptionSepArg, NULL }, {"-motion-blur", ".blob.motionBlur", XrmoptionSepArg, 0 }, {"-fade-time", ".blob.fadeTime", XrmoptionSepArg, 0 }, {"-hold-time", ".blob.holdTime", XrmoptionSepArg, 0 }, {"-zoom", ".blob.zoom", XrmoptionSepArg, 0 }, }; static argtype vars[] = { {&wireframe, "wire", "Wire", DEF_WIRE, t_Bool}, {&blend, "blend", "Blend", DEF_BLEND, t_Float}, {&do_fog, "fog", "Fog", DEF_FOG, t_Bool}, {&do_antialias, "antialias", "Antialias", DEF_ANTIALIAS, t_Bool}, {&do_walls, "walls", "Walls", DEF_WALLS, t_Bool}, {&do_texture, "texture", "Texture", DEF_TEXTURE, t_Bool}, {&do_colour, "colour", "Colour", DEF_COLOUR, t_Bool}, {&offset_texture, "offsetTexture","OffsetTexture", DEF_OFFSET_TEXTURE, t_Bool}, {&do_paint_background,"paintBackground","PaintBackground", DEF_PAINT_BACKGROUND, t_Bool}, {&resolution, "resolution", "Resolution", DEF_RESOLUTION, t_Int}, {&bumps, "bumps", "Bump", DEF_BUMPS, t_Int}, {&motion_blur, "motionBlur", "MotionBlur", DEF_MOTION_BLUR, t_Float}, {&fade_time, "fadeTime", "FadeTime", DEF_FADE_TIME, t_Float}, {&hold_time, "holdTime", "HoldTime", DEF_HOLD_TIME, t_Float}, {&zoom, "zoom", "Zoom", DEF_ZOOM, t_Float}, }; static OptionStruct desc[] = { {"-/+ wire", "whether to do use wireframe instead of filled (faster)"}, {"-/+ blend", "whether to do enable blending (slower)"}, {"-/+ fog", "whether to do enable fog (slower)"}, {"-/+ antialias", "whether to do enable antialiased lines (slower)"}, {"-/+ walls", "whether to add walls to the blob space (slower)"}, {"-/+ texture", "whether to add a texture to the blob (slower)"}, {"-/+ colour", "whether to colour the blob"}, {"-/+ offset_texture", "whether to offset texture co-ordinates"}, {"-/+ paint_background", "whether to display a background texture (slower)"}, {"-resolution", "Resolution of blob tesselation"}, {"-bumps", "Number of bumps used to disturb blob"}, {"-motion_blur", "Fade blob images (higher number = faster fade)"}, {"-fade_time", "Number of frames to transistion to next image"}, {"-hold_time", "Number of frames before next image"}, }; ENTRYPOINT ModeSpecOpt mirrorblob_opts = {countof(opts), opts, countof(vars), vars, desc}; #ifdef USE_MODULES ModStruct mirrorblob_description = {"mirrorblob", "init_mirrorblob", "draw_mirrorblob", "release_mirrorblob", "draw_mirrorblob", "init_mirrorblob", "handle_event", &mirrorblob_opts, 1000, 1, 2, 1, 4, 1.0, "", "OpenGL mirrorblob", 0, NULL}; #endif /***************************************************************************** * Types used in blob code *****************************************************************************/ typedef struct { GLfloat x, y; } Vector2D; typedef struct { GLfloat x, y, z; } Vector3D; typedef struct { GLfloat w; GLfloat x; GLfloat y; GLfloat z; } Quaternion; typedef struct { GLubyte red, green, blue, alpha; } Colour; typedef struct { Vector3D initial_position; Vector3D position; Vector3D normal; } Node_Data; typedef struct { int node1, node2, node3; Vector3D normal; double length1, length2, length3; } Face_Data; /* Structure to hold data about bumps used to distortion sphere */ typedef struct { double cx, cy, cpower, csize; double ax, ay, power, size; double mx, my, mpower, msize; double vx, vy, vpower, vsize; Vector3D pos; } Bump_Data; /* Vertices of a tetrahedron */ #define sqrt_3 0.5773502692 /*#undef sqrt_3 #define sqrt_3 1.0*/ #define PPP { sqrt_3, sqrt_3, sqrt_3 } /* +X, +Y, +Z */ #define MMP { -sqrt_3, -sqrt_3, sqrt_3 } /* -X, -Y, +Z */ #define MPM { -sqrt_3, sqrt_3, -sqrt_3 } /* -X, +Y, -Z */ #define PMM { sqrt_3, -sqrt_3, -sqrt_3 } /* +X, -Y, -Z */ /* Structure describing a tetrahedron */ static Vector3D tetrahedron[4][3] = { {PPP, MMP, MPM}, {PMM, MPM, MMP}, {PPP, MPM, PMM}, {PPP, PMM, MMP} }; /***************************************************************************** * Static blob data *****************************************************************************/ 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 #define BUMP_ARRAY_SIZE 1024 typedef enum { INITIALISING, HOLDING, LOADING, TRANSITIONING } Frame_State; /* structure for holding the mirrorblob data */ typedef struct { int screen_width, screen_height; GLXContext *glx_context; Window window; XColor fg, bg; /* Parameters controlling the position of the blob as a whole */ Vector3D blob_center; Vector3D blob_anchor; Vector3D blob_velocity; Vector3D blob_force; /* Count of the total number of nodes and faces used to tesselate the blob */ int num_nodes; int num_faces; Node_Data *nodes; Face_Data *faces; Vector3D *dots; Vector3D *normals; Colour *colours; Vector2D *tex_coords; /* Pointer to the bump function results */ double *bump_shape, *wall_shape; Bump_Data *bump_data; /* Use 2 textures to allow a gradual fade between images */ int current_texture; /* Ratio of used texture size to total texture size */ GLfloat tex_width[NUM_TEXTURES], tex_height[NUM_TEXTURES]; GLuint textures[NUM_TEXTURES]; Frame_State state; double state_start_time; int colour_cycle; Bool mipmap_p; Bool waiting_for_image_p; Bool first_image_p; trackball_state *trackball; int button_down; } mirrorblobstruct; static mirrorblobstruct *Mirrorblob = NULL; /****************************************************************************** * * Returns the current time in seconds as a double. Shamelessly borrowed from * glslideshow. * */ static double double_time (void) { struct timeval now; # ifdef GETTIMEOFDAY_TWO_ARGS struct timezone tzp; gettimeofday(&now, &tzp); # else gettimeofday(&now); # endif return (now.tv_sec + ((double) now.tv_usec * 0.000001)); } /****************************************************************************** * * Change to the projection matrix and set our viewing volume. * */ static void reset_projection(int width, int height) { glMatrixMode (GL_PROJECTION); glLoadIdentity (); gluPerspective (60.0, 1.0, 1.0, 1024.0 ); glMatrixMode (GL_MODELVIEW); glLoadIdentity (); } /****************************************************************************** * * Calculate the dot product of two vectors u and v * Dot product u.v = |u||v|cos(theta) * Where theta = angle between u and v */ static inline double dot (const Vector3D u, const Vector3D v) { return (u.x * v.x) + (u.y * v.y) + (u.z * v.z); } /****************************************************************************** * * Calculate the cross product of two vectors. * Gives a vector perpendicular to u and v with magnitude |u||v|sin(theta) * Where theta = angle between u and v */ static inline Vector3D cross (const Vector3D u, const Vector3D v) { Vector3D result; result.x = (u.y * v.z - u.z * v.y); result.y = (u.z * v.x - u.x * v.z); result.z = (u.x * v.y - u.y * v.x); return result; } /****************************************************************************** * * Add vector v to vector u */ static inline void add (Vector3D *u, const Vector3D v) { u->x = u->x + v.x; u->y = u->y + v.y; u->z = u->z + v.z; } /****************************************************************************** * * Subtract vector v from vector u */ static inline Vector3D subtract (const Vector3D u, const Vector3D v) { Vector3D result; result.x = u.x - v.x; result.y = u.y - v.y; result.z = u.z - v.z; return result; } /****************************************************************************** * * multiply vector v by scalar s */ static inline Vector3D scale (const Vector3D v, const double s) { Vector3D result; result.x = v.x * s; result.y = v.y * s; result.z = v.z * s; return result; } /****************************************************************************** * * normalise vector v */ static inline Vector3D normalise (const Vector3D v) { Vector3D result; double magnitude; magnitude = sqrt (dot(v, v)); if (magnitude > 1e-300) { result = scale (v, 1.0 / magnitude); } else { printf("zero\n"); result = zero_vector; } return result; } /****************************************************************************** * * Calculate the transform matrix for the given quaternion */ static void quaternion_transform (Quaternion q, GLfloat * transform) { GLfloat x, y, z, w; x = q.x; y = q.y; z = q.z; w = q.w; transform[0] = (w * w) + (x * x) - (y * y) - (z * z); transform[1] = (2.0 * x * y) + (2.0 * w * z); transform[2] = (2.0 * x * z) - (2.0 * w * y); transform[3] = 0.0; transform[4] = (2.0 * x * y) - (2.0 * w * z); transform[5] = (w * w) - (x * x) + (y * y) - (z * z); transform[6] = (2.0 * y * z) + (2.0 * w * x); transform[7] = 0.0; transform[8] = (2.0 * x * z) + (2.0 * w * y); transform[9] = (2.0 * y * z) - (2.0 * w * x); transform[10] = (w * w) - (x * x) - (y * y) + (z * z); transform[11] = 0.0; transform[12] = 0.0; transform[13] = 0.0; transform[14] = 0.0; transform[15] = (w * w) + (x * x) + (y * y) + (z * z); } /****************************************************************************** * * Apply a matrix transform to the given vector */ static inline Vector3D vector_transform (Vector3D u, GLfloat * t) { Vector3D result; result.x = (u.x * t[0] + u.y * t[4] + u.z * t[8] + 1.0 * t[12]); result.y = (u.x * t[1] + u.y * t[5] + u.z * t[9] + 1.0 * t[13]); result.z = (u.x * t[2] + u.y * t[6] + u.z * t[10] + 1.0 * t[14]); return result; } /****************************************************************************** * * Return a node that is on an arc between node1 and node2, where distance * is the proportion of the distance from node1 to the total arc. */ static Vector3D partial (Vector3D node1, Vector3D node2, double distance) { Vector3D result; Vector3D rotation_axis; GLfloat transformation[16]; double angle; Quaternion rotation; rotation_axis = normalise (cross (node1, node2)); angle = acos (dot (node1, node2)) * distance; rotation.x = rotation_axis.x * sin (angle / 2.0); rotation.y = rotation_axis.y * sin (angle / 2.0); rotation.z = rotation_axis.z * sin (angle / 2.0); rotation.w = cos (angle / 2.0); quaternion_transform (rotation, transformation); result = vector_transform (node1, transformation); return result; } /**************************************************************************** * * Callback indicating a texture has loaded */ static void image_loaded_cb (const char *filename, XRectangle *geometry, int image_width, int image_height, int texture_width, int texture_height, void *closure) { mirrorblobstruct *mp = (mirrorblobstruct *) closure; GLint texid = -1; int texture_index = -1; int i; glGetIntegerv (GL_TEXTURE_BINDING_2D, &texid); if (texid < 0) abort(); for (i = 0; i < NUM_TEXTURES; i++) { if (mp->textures[i] == texid) { texture_index = i; break; } } if (texture_index < 0) abort(); mp->tex_width [texture_index] = (GLfloat) image_width / texture_width; mp->tex_height[texture_index] = -(GLfloat) image_height / texture_height; glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, (mp->mipmap_p ? GL_LINEAR_MIPMAP_LINEAR : GL_LINEAR)); glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT); glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT); glTexEnvf (GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE); mp->waiting_for_image_p = False; mp->first_image_p = True; } /* Load a new file into a texture */ static void grab_texture(ModeInfo *mi, int texture_index) { mirrorblobstruct *mp = &Mirrorblob[MI_SCREEN(mi)]; { int w = (MI_WIDTH(mi) / 2) - 1; int h = (MI_HEIGHT(mi) / 2) - 1; if (w <= 10) w = 10; if (h <= 10) h = 10; mp->waiting_for_image_p = True; mp->mipmap_p = True; load_texture_async (mi->xgwa.screen, mi->window, *mp->glx_context, w, h, mp->mipmap_p, mp->textures[texture_index], image_loaded_cb, mp); } } /****************************************************************************** * * Generate internal parameters based on supplied options the parameters to * ensure they are consistant. */ static void set_parameters(void) { # ifdef HAVE_JWZGLES /* #### glPolygonMode other than GL_FILL unimplemented */ wireframe = 0; # endif /* In wire frame mode do not draw a texture */ if (wireframe) { do_texture = False; blend = 1.0; } /* Need to load textures if either the blob or the backgound has an image */ if (do_texture || do_paint_background) { load_textures = True; } else { load_textures = False; } /* If theres no texture don't calculate co-ordinates. */ if (!do_texture) { offset_texture = False; } culling = True; } /****************************************************************************** * * Initialise the openGL state data. */ static void initialize_gl(ModeInfo *mi, GLsizei width, GLsizei height) { mirrorblobstruct *gp = &Mirrorblob[MI_SCREEN(mi)]; /* Lighting values */ GLfloat ambientLight[] = { 0.2f, 0.2f, 0.2f, 1.0f }; GLfloat lightPos0[] = {500.0f, 100.0f, 200.0f, 1.0f }; GLfloat whiteLight0[] = { 0.0f, 0.0f, 0.0f, 1.0f }; GLfloat sourceLight0[] = { 0.6f, 0.6f, 0.6f, 1.0f }; GLfloat specularLight0[] = { 0.8f, 0.8f, 0.9f, 1.0f }; GLfloat lightPos1[] = {-50.0f, -100.0f, 2500.0f, 1.0f }; GLfloat whiteLight1[] = { 0.0f, 0.0f, 0.0f, 1.0f }; GLfloat sourceLight1[] = { 0.6f, 0.6f, 0.6f, 1.0f }; GLfloat specularLight1[] = { 0.7f, 0.7f, 0.7f, 1.0f }; GLfloat specref[] = { 1.0f, 1.0f, 1.0f, 1.0f }; GLfloat fogColor[4] = { 0.4, 0.4, 0.5, 0.1 }; /* Set the internal parameters based on the configuration settings */ set_parameters(); /* Set the viewport to the width and heigh of the window */ glViewport (0, 0, width, height ); if (do_antialias) { blend = 1.0; glEnable(GL_LINE_SMOOTH); glEnable(GL_POLYGON_SMOOTH); } /* The blend function is used for trasitioning between two images even when * blend is not selected. */ glBlendFunc (GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); if (do_fog) { glEnable(GL_FOG); glFogfv(GL_FOG_COLOR, fogColor); glFogf(GL_FOG_DENSITY, 0.50); glFogf(GL_FOG_START, 15.0); glFogf(GL_FOG_END, 30.0); } /* Set the shading model to smooth (Gouraud shading). */ glShadeModel (GL_SMOOTH); glLightModelfv (GL_LIGHT_MODEL_AMBIENT, ambientLight); glLightfv (GL_LIGHT0, GL_AMBIENT, whiteLight0); glLightfv (GL_LIGHT0, GL_DIFFUSE, sourceLight0); glLightfv (GL_LIGHT0, GL_SPECULAR, specularLight0); glLightfv (GL_LIGHT0, GL_POSITION, lightPos0); glEnable (GL_LIGHT0); glLightfv (GL_LIGHT1, GL_AMBIENT, whiteLight1); glLightfv (GL_LIGHT1, GL_DIFFUSE, sourceLight1); glLightfv (GL_LIGHT1, GL_SPECULAR, specularLight1); glLightfv (GL_LIGHT1, GL_POSITION, lightPos1); glEnable (GL_LIGHT1); glEnable (GL_LIGHTING); /* Enable color tracking */ glEnable (GL_COLOR_MATERIAL); /* Set Material properties to follow glColor values */ glColorMaterial (GL_FRONT, GL_AMBIENT_AND_DIFFUSE); /* Set all materials to have specular reflectivity */ glMaterialfv (GL_FRONT, GL_SPECULAR, specref); glMateriali (GL_FRONT, GL_SHININESS, 32); /* Let GL implementation scale normal vectors. */ glEnable (GL_NORMALIZE); /* Enable Arrays */ if (load_textures) { glLightModeli (GL_LIGHT_MODEL_COLOR_CONTROL, GL_SEPARATE_SPECULAR_COLOR); glEnable (GL_TEXTURE_2D); gp->current_texture = 0; glGenTextures(NUM_TEXTURES, gp->textures); grab_texture(mi, gp->current_texture); glMatrixMode (GL_TEXTURE); glRotated (180.0, 1.0, 0.0, 0.0); glMatrixMode (GL_MODELVIEW); } /* Clear the buffer since this is not done during a draw with motion blur */ glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); } /****************************************************************************** * * Initialise the openGL state data. */ static void set_blob_gl_state(GLfloat alpha) { if (do_antialias) { glEnable(GL_LINE_SMOOTH); glEnable(GL_POLYGON_SMOOTH); } if (wireframe) { glPolygonMode(GL_FRONT_AND_BACK, GL_LINE); } else { glPolygonMode(GL_FRONT_AND_BACK, GL_FILL); } /* The blend function is used for trasitioning between two images even when * blend is not selected. */ glBlendFunc (GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); /* Culling. */ if (culling) { glCullFace (GL_BACK); glEnable (GL_CULL_FACE); glFrontFace (GL_CCW); } else { glDisable (GL_CULL_FACE); } if (blend < 1.0) { glEnable (GL_BLEND); glBlendFunc (GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); /* Set the default blob colour to off-white. */ glColor4f (0.9, 0.9, 1.0, alpha); } else { glDisable(GL_BLEND); glColor4f (0.9, 0.9, 1.0, 1.0); } glEnable(GL_DEPTH_TEST); glEnable(GL_LIGHTING); } /****************************************************************************** * * Initialise the data required to draw the blob allocating the memory as * necessary. * * Return 0 on success. */ static int initialise_blob(mirrorblobstruct *gp, int width, int height, int bump_array_size) { /* Loop variables */ int i, u, v, node, side, face, base, base2 = 0; int nodes_on_edge = resolution; Vector3D node1, node2, result; if (nodes_on_edge < 2) return -1; gp->num_nodes = 2 * nodes_on_edge * nodes_on_edge - 4 * nodes_on_edge + 4; gp->num_faces = 4 * (nodes_on_edge - 1) * (nodes_on_edge - 1); gp->nodes = (Node_Data *) malloc (gp->num_nodes * sizeof (Node_Data)); if (!gp->nodes) { fprintf (stderr, "Couldn't allocate gp->nodes buffer\n"); return -1; } gp->faces = (Face_Data *) malloc (gp->num_faces * sizeof (Face_Data)); if (!gp->faces) { fprintf (stderr, "Couldn't allocate faces data buffer\n"); return -1; } gp->bump_data = (Bump_Data *) malloc (bumps * sizeof (Bump_Data)); if (!gp->bump_data) { fprintf(stderr, "Couldn't allocate bump data buffer\n"); return -1; } gp->bump_shape = (double *)malloc(bump_array_size * sizeof(double)); if (!gp->bump_shape) { fprintf(stderr, "Couldn't allocate bump buffer\n"); return -1; } gp->wall_shape = (double *)malloc(bump_array_size * sizeof(double)); if (!gp->wall_shape) { fprintf(stderr, "Couldn't allocate wall bump buffer\n"); return -1; } gp->dots = (Vector3D *)malloc(gp->num_nodes * sizeof(Vector3D)); if (!gp->dots) { fprintf(stderr, "Couldn't allocate nodes buffer\n"); return -1; } gp->normals = (Vector3D *)malloc(gp->num_nodes * sizeof(Vector3D)); if (!gp->normals) { fprintf(stderr, "Couldn't allocate normals buffer\n"); return -1; } gp->colours = (Colour *)malloc(gp->num_nodes * sizeof(Colour)); if (!gp->colours) { fprintf(stderr, "Couldn't allocate colours buffer\n"); return -1; } gp->tex_coords = (Vector2D *)malloc(gp->num_nodes * sizeof(Vector2D)); if (!gp->tex_coords) { fprintf(stderr, "Couldn't allocate gp->tex_coords buffer\n"); return -1; } /* Initialise bump data */ for (i = 0; i < bumps; i++) { gp->bump_data[i].ax = 2.0 * (((double)random() / (double)RAND_MAX) - 0.5); gp->bump_data[i].ay = 2.0 * (((double)random() / (double)RAND_MAX) - 0.5); gp->bump_data[i].power = (5.0 / pow(bumps, 0.75)) * (((double)random() / (double)RAND_MAX) - 0.5); gp->bump_data[i].size = 0.1 + 0.5 * (((double)random() / (double)RAND_MAX)); gp->bump_data[i].pos.x = 1.5 * sin(PI * gp->bump_data[i].ay) * cos(PI * gp->bump_data[i].ax); gp->bump_data[i].pos.y = 1.5 * cos(PI * gp->bump_data[i].ay); gp->bump_data[i].pos.z = 1.5 * sin(PI * gp->bump_data[i].ay) * sin(PI * gp->bump_data[i].ax); gp->bump_data[i].cx = 2.0 * (((double)random() / (double)RAND_MAX) - 0.5); gp->bump_data[i].cy = 2.0 * (((double)random() / (double)RAND_MAX) - 0.5); gp->bump_data[i].cpower = (5.0 / pow(bumps, 0.75)) * (((double)random() / (double)RAND_MAX) - 0.5); gp->bump_data[i].csize = 0.35; /*0.1 + 0.25 * (((double)random() / (double)RAND_MAX));*/ gp->bump_data[i].vx = 0.0; gp->bump_data[i].vy = 0.0; gp->bump_data[i].vpower = 0.0; gp->bump_data[i].vsize = 0.0; gp->bump_data[i].mx = 0.003 * ((double)random() / (double)RAND_MAX); gp->bump_data[i].my = 0.003 * ((double)random() / (double)RAND_MAX); gp->bump_data[i].mpower = 0.003 * ((double)random() / (double)RAND_MAX); gp->bump_data[i].msize = 0.003 * ((double)random() / (double)RAND_MAX); } /* Initialise lookup table of bump strength */ for (i = 0; i < bump_array_size; i++) { double xd, xd2; xd = i / (double)bump_array_size; xd2 = 48.0 * xd * xd; gp->bump_shape[i] = 0.1 / (xd2 + 0.1); xd2 = 40.0 * xd * xd * xd * xd; gp->wall_shape[i] = 0.4 / (xd2 + 0.1); } node = 0; face = 0; for (side = 0; side < 4; side++) { base = node; if (side == 2) { base2 = node; } /* * The start and end of the for loops below are modified based on the * side of the tetrahedron that is being calculated to avoid duplication * of the gp->nodes that are on the edges of the tetrahedron. */ for (u = (side > 1); u < (nodes_on_edge - (side > 0)); u++) { node1 = partial (normalise (tetrahedron[side][0]), normalise (tetrahedron[side][1]), u / (double) (nodes_on_edge - 1)); node2 = partial (normalise (tetrahedron[side][0]), normalise (tetrahedron[side][2]), u / (double) (nodes_on_edge - 1)); for (v = (side > 1); v <= (u - (side > 2)); v++) { if (u > 0) result = partial (node1, node2, v / (double) u); else result = node1; gp->nodes[node].position = normalise (result); gp->nodes[node].initial_position = gp->nodes[node].position; gp->nodes[node].normal = zero_vector; node++; } } /* * Determine which nodes make up each face. The complexity is caused * by having to determine the correct nodes for the edges of the * tetrahedron since the common nodes on the edges are only calculated * once (see above). */ for (u = 0; u < (nodes_on_edge - 1); u++) { for (v = 0; v <= u; v++) { { if (side < 2) { gp->faces[face].node1 = base + ((u * (u + 1)) / 2) + v; gp->faces[face].node2 = base + ((u + 1) * (u + 2)) / 2 + v + 1; gp->faces[face].node3 = base + ((u + 1) * (u + 2)) / 2 + v; if ((side == 1) && (u == (nodes_on_edge - 2))) { gp->faces[face].node3 = ((u + 1) * (u + 2)) / 2 + nodes_on_edge - v - 1; gp->faces[face].node2 = ((u + 1) * (u + 2)) / 2 + nodes_on_edge - v - 2; } } else if (side < 3) { gp->faces[face].node1 = base + (((u - 1) * u) / 2) + v - 1; gp->faces[face].node2 = base + ((u) * (u + 1)) / 2 + v; gp->faces[face].node3 = base + ((u) * (u + 1)) / 2 + v - 1; if (u == (nodes_on_edge - 2)) { int n = nodes_on_edge - v - 1; gp->faces[face].node2 = ((nodes_on_edge * (nodes_on_edge + 1)) / 2) + ((n - 1) * (n + 0)) / 2; gp->faces[face].node3 = ((nodes_on_edge * (nodes_on_edge + 1)) / 2) + ((n + 0) * (n + 1)) / 2; } if (v == 0) { gp->faces[face].node1 = (((u + 1) * (u + 2)) / 2) - 1; gp->faces[face].node3 = (((u + 2) * (u + 3)) / 2) - 1; } } else { gp->faces[face].node1 = base + (((u - 2) * (u - 1)) / 2) + v - 1; gp->faces[face].node2 = base + ((u - 1) * u) / 2 + v; gp->faces[face].node3 = base + ((u - 1) * u) / 2 + v - 1; if (v == 0) { gp->faces[face].node1 = base2 + ((u * (u + 1)) / 2) - 1; gp->faces[face].node3 = base2 + ((u + 1) * (u + 2)) / 2 - 1; } if (u == (nodes_on_edge - 2)) { gp->faces[face].node3 = ((nodes_on_edge * (nodes_on_edge + 1)) / 2) + ((v + 1) * (v + 2)) / 2 - 1; gp->faces[face].node2 = ((nodes_on_edge * (nodes_on_edge + 1)) / 2) + ((v + 2) * (v + 3)) / 2 - 1; } if (v == u) { gp->faces[face].node1 = (u * (u + 1)) / 2; gp->faces[face].node2 = ((u + 1) * (u + 2)) / 2; } } face++; } if (v < u) { if (side < 2) { gp->faces[face].node1 = base + ((u * (u + 1)) / 2) + v; gp->faces[face].node2 = base + ((u * (u + 1)) / 2) + v + 1; gp->faces[face].node3 = base + (((u + 1) * (u + 2)) / 2) + v + 1; if ((side == 1) && (u == (nodes_on_edge - 2))) { gp->faces[face].node3 = ((u + 1) * (u + 2)) / 2 + nodes_on_edge - v - 2; } } else if (side < 3) { gp->faces[face].node1 = base + ((u * (u - 1)) / 2) + v - 1; gp->faces[face].node2 = base + ((u * (u - 1)) / 2) + v; gp->faces[face].node3 = base + ((u * (u + 1)) / 2) + v; if (u == (nodes_on_edge - 2)) { int n = nodes_on_edge - v - 1; gp->faces[face].node3 = ((nodes_on_edge * (nodes_on_edge + 1)) / 2) + ((n + 0) * (n - 1)) / 2; } if (v == 0) { gp->faces[face].node1 = (((u + 1) * (u + 2)) / 2) - 1; } } else { gp->faces[face].node1 = base + (((u - 2) * (u - 1)) / 2) + v - 1; gp->faces[face].node2 = base + (((u - 2) * (u - 1)) / 2) + v; gp->faces[face].node3 = base + (((u - 1) * u) / 2) + v; if (v == 0) { gp->faces[face].node1 = base2 + (u * (u + 1)) / 2 - 1; } if (u == (nodes_on_edge - 2)) { gp->faces[face].node3 = ((nodes_on_edge * (nodes_on_edge + 1)) / 2) + ((v + 2) * (v + 3)) / 2 - 1; } if (v == (u - 1)) { gp->faces[face].node2 = (u * (u + 1)) / 2; } } face++; } } } } return 0; } /****************************************************************************** * * Return the magnitude of the given vector */ #if 0 static inline double length (Vector3D u) { return sqrt (u.x * u.x + u.y * u.y + u.z * u.z); } #endif /****************************************************************************** * * Calculate the blob shape. */ static void calc_blob(mirrorblobstruct *gp, int width, int height, int bump_array_size, float limit, double fade) { /* Loop variables */ int i, index, face; /* position of a node */ Vector3D node; Vector3D offset; Vector3D bump_vector; int dist; /* Update position and strength of bumps used to distort the blob */ for (i = 0; i < bumps; i++) { gp->bump_data[i].vx += gp->bump_data[i].mx*(gp->bump_data[i].cx - gp->bump_data[i].ax); gp->bump_data[i].vy += gp->bump_data[i].my*(gp->bump_data[i].cy - gp->bump_data[i].ay); gp->bump_data[i].vpower += gp->bump_data[i].mpower * (gp->bump_data[i].cpower - gp->bump_data[i].power); gp->bump_data[i].vsize += gp->bump_data[i].msize * (gp->bump_data[i].csize - gp->bump_data[i].size); gp->bump_data[i].ax += 0.1 * gp->bump_data[i].vx; gp->bump_data[i].ay += 0.1 * gp->bump_data[i].vy; gp->bump_data[i].power += 0.1 * gp->bump_data[i].vpower; gp->bump_data[i].size += 0.1 * gp->bump_data[i].vsize; gp->bump_data[i].pos.x = 1.0 * sin(PI * gp->bump_data[i].ay) * cos(PI * gp->bump_data[i].ax); gp->bump_data[i].pos.y = 1.0 * cos(PI * gp->bump_data[i].ay); gp->bump_data[i].pos.z = 1.0 * sin(PI * gp->bump_data[i].ay) * sin(PI * gp->bump_data[i].ax); } /* Update calculate new position for each vertex based on an offset from * the initial position */ gp->blob_force = zero_vector; for (index = 0; index < gp->num_nodes; ++index) { node = gp->nodes[index].initial_position; gp->nodes[index].normal = node; offset = zero_vector; for ( i = 0; i < bumps; i++) { bump_vector = subtract(gp->bump_data[i].pos, node); dist = bump_array_size * dot(bump_vector, bump_vector) * gp->bump_data[i].size; if (dist < bump_array_size) { add(&offset, scale(node, gp->bump_data[i].power * gp->bump_shape[dist])); add(&gp->blob_force, scale(node, gp->bump_data[i].power * gp->bump_shape[dist])); } } add(&node, offset); node = scale(node, zoom); add(&node, gp->blob_center); if (do_walls) { if (node.z < -limit) node.z = -limit; if (node.z > limit) node.z = limit; dist = bump_array_size * (node.z + limit) * (node.z + limit) * 0.5; if (dist < bump_array_size) { node.x += (node.x - gp->blob_center.x) * gp->wall_shape[dist]; node.y += (node.y - gp->blob_center.y) * gp->wall_shape[dist]; gp->blob_force.z += (node.z + limit); } else { dist = bump_array_size * (node.z - limit) * (node.z - limit) * 0.5; if (dist < bump_array_size) { node.x += (node.x - gp->blob_center.x) * gp->wall_shape[dist]; node.y += (node.y - gp->blob_center.y) * gp->wall_shape[dist]; gp->blob_force.z -= (node.z - limit); } if (node.y < -limit) node.y = -limit; if (node.y > limit) node.y = limit; dist = bump_array_size * (node.y + limit) * (node.y + limit) * 0.5; if (dist < bump_array_size) { node.x += (node.x - gp->blob_center.x) * gp->wall_shape[dist]; node.z += (node.z - gp->blob_center.z) * gp->wall_shape[dist]; gp->blob_force.y += (node.y + limit); } else { dist = bump_array_size * (node.y - limit) * (node.y - limit) * 0.5; if (dist < bump_array_size) { node.x += (node.x - gp->blob_center.x) * gp->wall_shape[dist]; node.z += (node.z - gp->blob_center.z) * gp->wall_shape[dist]; gp->blob_force.y -= (node.y - limit); } } if (node.x < -limit) node.x = -limit; if (node.x > limit) node.x = limit; dist = bump_array_size * (node.x + limit) * (node.x + limit) * 0.5; if (dist < bump_array_size) { node.y += (node.y - gp->blob_center.y) * gp->wall_shape[dist]; node.z += (node.z - gp->blob_center.z) * gp->wall_shape[dist]; gp->blob_force.x += (node.x + limit); } else { dist = bump_array_size * (node.x - limit) * (node.x - limit) * 0.5; if (dist < bump_array_size) { node.y += (node.y - gp->blob_center.y) * gp->wall_shape[dist]; node.z += (node.z - gp->blob_center.z) * gp->wall_shape[dist]; gp->blob_force.x -= (node.x - limit); } } if (node.y < -limit) node.y = -limit; if (node.y > limit) node.y = limit; } } gp->dots[index] = node; } /* Determine the normal for each face */ for (face = 0; face < gp->num_faces; face++) { /* Use pointers to indexed nodes to help readability */ int index1 = gp->faces[face].node1; int index2 = gp->faces[face].node2; int index3 = gp->faces[face].node3; gp->faces[face].normal = cross(subtract(gp->dots[index2], gp->dots[index1]), subtract(gp->dots[index3], gp->dots[index1])); /* Add the normal for the face onto the normal for the verticies of the face */ add(&gp->nodes[index1].normal, gp->faces[face].normal); add(&gp->nodes[index2].normal, gp->faces[face].normal); add(&gp->nodes[index3].normal, gp->faces[face].normal); } /* Use the normal to set the colour and texture */ if (do_colour || do_texture) { for (index = 0; index < gp->num_nodes; ++index) { gp->normals[index] = normalise(gp->nodes[index].normal); if (do_colour) { gp->colours[index].red = (int)(255.0 * fabs(gp->normals[index].x)); gp->colours[index].green = (int)(255.0 * fabs(gp->normals[index].y)); gp->colours[index].blue = (int)(255.0 * fabs(gp->normals[index].z)); gp->colours[index].alpha = (int)(255.0 * fade); } if (do_texture) { if (offset_texture) { const float cube_size = 100.0; Vector3D eye = {0.0, 0.0, 50.0}; Vector3D eye_r = normalise(subtract(gp->dots[index], eye)); Vector3D reference = subtract(eye_r, scale(gp->normals[index], 2.0 * dot(eye_r, gp->normals[index]))); double x = 0.0; double y = 0.0; double n, n_min = 10000.0, sign = 1.0; if (fabs(reference.z) > 1e-9) { n = (cube_size - gp->dots[index].z) / reference.z; if (n < 0.0) { n = (-cube_size - gp->dots[index].z) / reference.z; sign = 3.0; } if (n > 0.0) { x = sign * (gp->dots[index].x + n * reference.x); y = sign * (gp->dots[index].y + n * reference.y); n_min = n; } } if (fabs(reference.x) > 1e-9) { n = (cube_size - gp->dots[index].x) / reference.x; sign = 1.0; if (n < 0.0) { n = (-cube_size - gp->dots[index].x) / reference.x; sign = -1.0; } if ((n > 0.0) && (n < n_min)) { x = sign * (2.0 * cube_size - (gp->dots[index].z + n * reference.z)); y = sign * x * (gp->dots[index].y + n * reference.y) / cube_size; n_min = n; } } if (fabs(reference.y) > 1e-9) { n = (cube_size - gp->dots[index].y) / reference.y; sign = 1.0; if (n < 0.0) { n = (-cube_size - gp->dots[index].y) / reference.y; sign = -1.0; } if ((n > 0.0) && (n < n_min)) { y = sign * (2.0 * cube_size -( gp->dots[index].z + n * reference.z)); x = sign * y * (gp->dots[index].x + n * reference.x) / cube_size; } } gp->tex_coords[index].x = 0.5 + x / (cube_size * 6.0); gp->tex_coords[index].y = 0.5 - y / (cube_size * 6.0); } else { gp->tex_coords[index].x = 0.5 * (1.0 + asin(gp->normals[index].x) / (0.5 * PI)); gp->tex_coords[index].y = -0.5 * (1.0 + asin(gp->normals[index].y) / (0.5 * PI)); } /* Adjust the texture co-ordinates to from range 0..1 to * 0..width or 0..height as appropriate */ gp->tex_coords[index].x *= gp->tex_width[gp->current_texture]; gp->tex_coords[index].y *= gp->tex_height[gp->current_texture]; } } } /* Update the center of the whole blob */ add(&gp->blob_velocity, scale (subtract (gp->blob_anchor, gp->blob_center), 1.0 / 80.0)); add(&gp->blob_velocity, scale (gp->blob_force, 0.01 / gp->num_nodes)); add(&gp->blob_center, scale(gp->blob_velocity, 0.5)); gp->blob_velocity = scale(gp->blob_velocity, 0.999); } static void draw_vertex(mirrorblobstruct *gp, int index) { if (do_colour) { glColor3ub(gp->colours[index].red, gp->colours[index].green, gp->colours[index].blue); } if (load_textures) { glTexCoord2fv(&gp->tex_coords[index].x); } glNormal3fv(&gp->normals[index].x); glVertex3fv(&gp->dots[index].x); } /****************************************************************************** * * Draw the blob shape. * */ static void draw_blob (mirrorblobstruct *gp) { int face; 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); /* glColor4ub (255, 0, 0, 128); */ glBegin(GL_TRIANGLES); for (face = 0; face < gp->num_faces; face++) { draw_vertex(gp, gp->faces[face].node1); draw_vertex(gp, gp->faces[face].node2); draw_vertex(gp, gp->faces[face].node3); } glEnd(); #if 0 glBegin(GL_LINES); for (face = 0; face < gp->num_faces; face++) { if (gp->normals[gp->faces[face].node1].z > 0.0) { Vector3D end = gp->dots[gp->faces[face].node1]; glVertex3dv(&end); add(&end, scale(gp->normals[gp->faces[face].node1], 0.25)); glVertex3dv(&end); } } glEnd(); #endif glLoadIdentity(); } /****************************************************************************** * * Draw the background image simply map a texture onto a full screen quad. */ static void draw_background (ModeInfo *mi) { mirrorblobstruct *gp = &Mirrorblob[MI_SCREEN(mi)]; GLfloat rot = current_device_rotation(); glTexEnvf (GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_DECAL); glEnable (GL_TEXTURE_2D); glDisable(GL_LIGHTING); glPolygonMode(GL_FRONT_AND_BACK, GL_FILL); /* Reset the projection matrix to make it easier to get the size of the quad * correct */ glMatrixMode(GL_PROJECTION); glPushMatrix(); glLoadIdentity(); 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.0, MI_WIDTH(mi), MI_HEIGHT(mi), 0.0, -1000.0, 1000.0); glBegin (GL_QUADS); glTexCoord2f (0.0, 0.0); glVertex2i (0, 0); glTexCoord2f (0.0, gp->tex_height[gp->current_texture]); glVertex2i (0, MI_HEIGHT(mi)); glTexCoord2f (gp->tex_width[gp->current_texture], gp->tex_height[gp->current_texture]); glVertex2i (MI_WIDTH(mi), MI_HEIGHT(mi)); glTexCoord2f (gp->tex_width[gp->current_texture], 0.0); glVertex2i (MI_WIDTH(mi), 0); glEnd(); glPopMatrix (); glMatrixMode (GL_MODELVIEW); glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE); } /****************************************************************************** * * Update the scene. */ static GLvoid draw_scene(ModeInfo * mi) { mirrorblobstruct *gp = &Mirrorblob[MI_SCREEN(mi)]; double fade = 0.0; double current_time; check_gl_error ("draw_scene"); mi->polygon_count = 0; glColor4f (1.0, 1.0, 1.0, 1.0); current_time = double_time(); switch (gp->state) { case INITIALISING: glColor4f (0.0, 0.0, 0.0, 1.0); fade = 1.0; break; case TRANSITIONING: fade = 1.0 - (current_time - gp->state_start_time) / fade_time; break; case LOADING: /* FALL-THROUGH */ case HOLDING: fade = 1.0; break; } /* Set the correct texture, when transitioning this ensures that the first draw * is the original texture (which has the new texture drawn over it with decreasing * transparency) */ if (load_textures) { glBindTexture(GL_TEXTURE_2D, gp->textures[gp->current_texture]); } glDisable (GL_DEPTH_TEST); if (do_paint_background) { glEnable (GL_TEXTURE_2D); if (motion_blur > 0.0) { glClear(GL_DEPTH_BUFFER_BIT); glEnable (GL_BLEND); glColor4f (1.0, 1.0, 1.0, motion_blur); } else { glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); } draw_background (mi); mi->polygon_count++; /* When transitioning between two images paint the new image over the old * image with a varying alpha value to get a smooth fade. */ if (gp->state == TRANSITIONING) { glEnable (GL_BLEND); /* Select the texture to transition to */ glBindTexture (GL_TEXTURE_2D, gp->textures[1 - gp->current_texture]); glColor4f (1.0, 1.0, 1.0, 1.0 - fade); draw_background (mi); mi->polygon_count++; /* Select the original texture to draw the blob */ glBindTexture (GL_TEXTURE_2D, gp->textures[gp->current_texture]); } /* Clear the depth buffer bit so the backgound is behind the blob */ glClear(GL_DEPTH_BUFFER_BIT); } else if (motion_blur > 0.0) { glEnable (GL_BLEND); glColor4f (0.0, 0.0, 0.0, motion_blur); glPolygonMode(GL_FRONT_AND_BACK, GL_FILL); glTranslatef (0.0, 0.0, -4.0); glRectd (-10.0, -10.0, 10.0, 10.0); if (wireframe) { glPolygonMode(GL_FRONT_AND_BACK, GL_LINE); } glClear(GL_DEPTH_BUFFER_BIT); } else { glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); } if (!do_texture) { fade = 1.0; glDisable (GL_TEXTURE_2D); } calc_blob(gp, MI_WIDTH(mi), MI_HEIGHT(mi), BUMP_ARRAY_SIZE, 2.5, fade * blend); set_blob_gl_state(fade * blend); if (blend < 1.0) { /* Disable the colour chanels so that only the depth buffer is updated */ glColorMask(GL_FALSE, GL_FALSE, GL_FALSE, GL_FALSE); draw_blob(gp); mi->polygon_count += gp->num_faces; glColorMask(GL_TRUE, GL_TRUE, GL_TRUE, GL_TRUE); } glDepthFunc(GL_LEQUAL); draw_blob(gp); mi->polygon_count += gp->num_faces; /* While transitioning between images draw a second blob with a modified * alpha value. */ if (load_textures && (hold_time > 0)) { switch (gp->state) { case INITIALISING: if (!gp->waiting_for_image_p) { gp->state = HOLDING; } break; case HOLDING: if ((current_time - gp->state_start_time) > hold_time) { grab_texture(mi, 1 - gp->current_texture); gp->state = LOADING; } break; case LOADING: /* Once the image has loaded move to the TRANSITIONING STATE */ if (!gp->waiting_for_image_p) { gp->state = TRANSITIONING; /* Get the time again rather than using the current time so * that the time taken by the grab_texture function is not part * of the fade time */ gp->state_start_time = double_time(); } break; case TRANSITIONING: /* If the blob is textured draw over existing blob to fade between * images */ if (do_texture) { /* Select the texture to transition to */ glBindTexture (GL_TEXTURE_2D, gp->textures[1 - gp->current_texture]); glEnable (GL_BLEND); /* If colour is enabled update the alpha data in the buffer and * use that in the blending since the alpha of the incomming * verticies will not be correct */ if (do_colour) { glColorMask(GL_FALSE, GL_FALSE, GL_FALSE, GL_TRUE); glClearColor(0.0, 0.0, 0.0, (1.0 - fade) * blend); glClear(GL_COLOR_BUFFER_BIT); glColorMask(GL_TRUE, GL_TRUE, GL_TRUE, GL_TRUE); glBlendFunc(GL_DST_ALPHA, GL_ONE_MINUS_DST_ALPHA); } else { glColor4f (0.9, 0.9, 1.0, (1.0 - fade) * blend); } draw_blob (gp); mi->polygon_count += gp->num_faces; if (do_colour) { /* Restore the 'standard' blend functions. */ glBlendFunc (GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); } } if ((current_time - gp->state_start_time) > fade_time) { gp->state = HOLDING; gp->state_start_time = current_time; gp->current_texture = 1 - gp->current_texture; } break; } } } /****************************************************************************** * * XMirrorblob screen update entry */ ENTRYPOINT void draw_mirrorblob(ModeInfo * mi) { mirrorblobstruct *gp = &Mirrorblob[MI_SCREEN(mi)]; Display *display = MI_DISPLAY(mi); Window window = MI_WINDOW(mi); if (!gp->glx_context) return; /* Wait for the first image; for subsequent images, load them in the background while animating. */ if (gp->waiting_for_image_p && gp->first_image_p) return; glXMakeCurrent(display, window, *(gp->glx_context)); draw_scene(mi); if (mi->fps_p) do_fps (mi); glFinish(); glXSwapBuffers(display, window); } /****************************************************************************** * * XMirrorblob screen resize entry */ ENTRYPOINT void reshape_mirrorblob(ModeInfo *mi, int width, int height) { glViewport( 0, 0, MI_WIDTH(mi), MI_HEIGHT(mi) ); reset_projection(width, height); } /**************************************************************************** * * Handle Mouse events */ ENTRYPOINT Bool mirrorblob_handle_event (ModeInfo * mi, XEvent * event) { mirrorblobstruct *gp = &Mirrorblob[MI_SCREEN (mi)]; if (event->xany.type == ButtonPress && event->xbutton.button == Button4) { zoom *= 1.1; return True; } else if (event->xany.type == ButtonPress && event->xbutton.button == Button5) { zoom *= 0.9; return True; } else if (gltrackball_event_handler (event, gp->trackball, MI_WIDTH (mi), MI_HEIGHT (mi), &gp->button_down)) { return True; } else if (screenhack_event_helper (MI_DISPLAY(mi), MI_WINDOW(mi), event)) { gp->state_start_time = 0; gp->state = HOLDING; return True; } return False; } /****************************************************************************** * * XMirrorblob initialise entry */ ENTRYPOINT void init_mirrorblob(ModeInfo * mi) { int screen = MI_SCREEN(mi); mirrorblobstruct *gp; if (Mirrorblob == NULL) { if ((Mirrorblob = (mirrorblobstruct *) calloc(MI_NUM_SCREENS(mi), sizeof (mirrorblobstruct))) == NULL) { return; } } gp = &Mirrorblob[screen]; gp->window = MI_WINDOW(mi); if ((gp->glx_context = init_GL(mi)) != NULL) { reshape_mirrorblob(mi, MI_WIDTH(mi), MI_HEIGHT(mi)); initialize_gl(mi, MI_WIDTH(mi), MI_HEIGHT(mi)); } else { MI_CLEARWINDOW(mi); } gp->trackball = gltrackball_init(False); initialise_blob(gp, MI_WIDTH(mi), MI_HEIGHT(mi), BUMP_ARRAY_SIZE); gp->state = INITIALISING; gp->state_start_time = double_time(); gp->first_image_p = True; } /****************************************************************************** * * XMirrorblob cleanup entry */ ENTRYPOINT void release_mirrorblob(ModeInfo * mi) { if (Mirrorblob != NULL) { int i; for (i = 0; i < MI_NUM_SCREENS(mi); i++) { mirrorblobstruct *gp = &Mirrorblob[i]; if (gp->nodes) free(gp->nodes); if (gp->faces) free(gp->faces); if (gp->bump_data) free(gp->bump_data); if (gp->colours) free(gp->colours); if (gp->tex_coords) free(gp->tex_coords); if (gp->dots) free(gp->dots); if (gp->wall_shape) free(gp->wall_shape); if (gp->bump_shape) free(gp->bump_shape); } free(Mirrorblob); Mirrorblob = NULL; } FreeAllGL(mi); } XSCREENSAVER_MODULE ("MirrorBlob", mirrorblob) #endif xscreensaver-5.36/hacks/glx/blinkbox.c000664 000767 000024 00000035732 12710313324 020005 0ustar00jwzstaff000000 000000 /* blinkbox, Copyright (c) 2003 Jeremy English * * 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. */ /* motion blur added March 2005 by John Boero */ #define DEFAULTS "*delay: 30000 \n" \ "*wireframe: False \n" \ "*suppressRotationAnimation: True\n" \ # define refresh_ball 0 # define release_ball 0 # define ball_handle_event 0 #undef countof #define countof(x) (sizeof((x))/sizeof((*x))) #include "xlockmore.h" #include "sphere.h" #include #ifdef USE_GL /* whole file */ #define MAX_COUNT 20 #define ALPHA_AMT 0.05 /* this should be between 1 and 8 */ #define DEF_BOXSIZE "2" #define DEF_DISSOLVE "False" #define DEF_FADE "True" #define DEF_BLUR "True" typedef struct{ GLfloat x,y,z; } Tdpos; typedef struct{ int hit; Tdpos pos; int counter; GLfloat color[3]; GLfloat rot[4]; int des_count; int alpha_count; }Side; struct Bounding_box { Tdpos top; Tdpos bottom; }; struct Ball { GLfloat x; GLfloat y; GLfloat z; int d; }; struct bscale { GLfloat wh; /*width Height*/ GLfloat d; /*depth*/ }; static const struct Bounding_box bbox = {{14,14,20},{-14,-14,-20}}; typedef struct { GLXContext *glx_context; struct Ball ball; struct bscale bscale; Tdpos mo; /*motion*/ Tdpos moh; /*hold motion value*/ Tdpos bpos; GLuint ballList; GLuint boxList; GLfloat des_amt; /*sides*/ Side lside;/*Red*/ Side rside;/*Green*/ Side tside;/*Blue*/ Side bside;/*Orange*/ Side fside;/*Yellow*/ Side aside;/*Purple*/ Side *sp; } blinkboxstruct; static blinkboxstruct *blinkbox = (blinkboxstruct *) NULL; /* lights */ static const float LightDiffuse[]= { 1.0f, 1.0f, 1.0f, 1.0f }; static const float LightPosition[]= { 20.0f, 100.0f, 20.0f, 1.0f }; static Bool do_dissolve; static Bool do_fade; static Bool do_blur; static float bscale_wh; static XrmOptionDescRec opts[] = { { "-boxsize", ".boxsize", XrmoptionSepArg, 0 }, { "-dissolve", ".dissolve", XrmoptionNoArg, "True" }, { "+dissolve", ".dissolve", XrmoptionNoArg, "False" }, { "-fade", ".fade", XrmoptionNoArg, "True" }, { "+fade", ".fade", XrmoptionNoArg, "False" }, { "-blur", ".blur", XrmoptionNoArg, "True" }, { "+blur", ".blur", XrmoptionNoArg, "False" } }; static argtype vars[] = { {&bscale_wh, "boxsize", "Boxsize", DEF_BOXSIZE, t_Float}, {&do_dissolve, "dissolve", "Dissolve", DEF_DISSOLVE, t_Bool}, {&do_fade, "fade", "Fade", DEF_FADE, t_Bool}, {&do_blur, "blur", "Blur", DEF_BLUR, t_Bool}, }; ENTRYPOINT ModeSpecOpt ball_opts = {countof(opts), opts, countof(vars), vars, NULL}; static void swap(GLfloat *a, GLfloat *b) { GLfloat t = *a; *a = *b; *b = t; } static float get_rand(void) { GLfloat j = 1+(random() % 2); return (j); } static void swap_mov(GLfloat *a, GLfloat *b) { int j; swap(a,b); j = get_rand(); if (*a < 0) *a = j * -1; else *a = j; } static void cp_b_pos(blinkboxstruct *bp, Tdpos *s_pos) { s_pos->x = bp->ball.x; s_pos->y = bp->ball.y; s_pos->z = bp->ball.z; } static void hit_side(blinkboxstruct *bp) { if ((bp->ball.x - bp->ball.d) <= bbox.bottom.x){ bp->lside.hit = 1; bp->lside.counter = MAX_COUNT; bp->lside.des_count = 1; bp->lside.alpha_count = 0; cp_b_pos(bp, &bp->lside.pos); swap_mov(&bp->mo.x,&bp->moh.x); }else if ((bp->ball.x + bp->ball.d) >= bbox.top.x){ bp->rside.hit = 1; bp->rside.counter = MAX_COUNT; bp->rside.des_count = 1; bp->rside.alpha_count = 0; cp_b_pos(bp, &bp->rside.pos); swap_mov(&bp->mo.x,&bp->moh.x); } } static void hit_top_bottom(blinkboxstruct *bp) { if ((bp->ball.y - bp->ball.d) <= bbox.bottom.y){ bp->bside.hit = 1; bp->bside.counter = MAX_COUNT; bp->bside.des_count = 1; bp->bside.alpha_count = 0; cp_b_pos(bp, &bp->bside.pos); swap_mov(&bp->mo.y,&bp->moh.y); }else if ((bp->ball.y + bp->ball.d) >= bbox.top.y){ bp->tside.hit = 1; bp->tside.counter = MAX_COUNT; bp->tside.des_count = 1; bp->tside.alpha_count = 0; cp_b_pos(bp, &bp->tside.pos); swap_mov(&bp->mo.y,&bp->moh.y); } } static void hit_front_back(blinkboxstruct *bp) { if ((bp->ball.z - bp->ball.d) <= bbox.bottom.z){ bp->aside.hit = 1; bp->aside.counter = MAX_COUNT; bp->aside.des_count = 1; bp->aside.alpha_count = 0; cp_b_pos(bp, &bp->aside.pos); swap_mov(&bp->mo.z,&bp->moh.z); }else if((bp->ball.z + bp->ball.d) >= bbox.top.z){ bp->fside.hit = 1; bp->fside.counter = MAX_COUNT; bp->fside.des_count = 1; bp->fside.alpha_count = 0; cp_b_pos(bp, &bp->fside.pos); swap_mov(&bp->mo.z,&bp->moh.z); } } ENTRYPOINT void reshape_ball (ModeInfo *mi, int width, int height) { GLfloat h = (GLfloat) height / (GLfloat) width; glViewport (0, 0, (GLint) width, (GLint) height); glMatrixMode(GL_PROJECTION); glLoadIdentity(); gluPerspective (30.0, 1/h, 1.0, 100.0); glMatrixMode(GL_MODELVIEW); glLoadIdentity(); gluLookAt( 0.0, 0.0, 40.0, 0.0, 0.0, 0.0, 0.0, 2.0, 10.0); # ifdef HAVE_MOBILE /* Keep it the same relative size when rotated. */ { int o = (int) current_device_rotation(); if (o != 0 && o != 180 && o != -180) glScalef (1/h, 1/h, 1/h); } # endif } static void unit_cube(int wire) { glBegin((wire)?GL_LINE_LOOP:GL_QUADS); glNormal3f( 0.0f, -1.0f, 0.0f); glVertex3f(-1.0f, -1.0f, -1.0f); glVertex3f( 1.0f, -1.0f, -1.0f); glVertex3f( 1.0f, -1.0f, 1.0f); glVertex3f(-1.0f, -1.0f, 1.0f); glNormal3f( 0.0f, 0.0f, 1.0f); glVertex3f(-1.0f, -1.0f, 1.0f); glVertex3f( 1.0f, -1.0f, 1.0f); glVertex3f( 1.0f, 1.0f, 1.0f); glVertex3f(-1.0f, 1.0f, 1.0f); glNormal3f( 0.0f, 0.0f, -1.0f); glVertex3f(-1.0f, -1.0f, -1.0f); glVertex3f(-1.0f, 1.0f, -1.0f); glVertex3f( 1.0f, 1.0f, -1.0f); glVertex3f( 1.0f, -1.0f, -1.0f); glNormal3f( 1.0f, 0.0f, 0.0f); glVertex3f( 1.0f, -1.0f, -1.0f); glVertex3f( 1.0f, 1.0f, -1.0f); glVertex3f( 1.0f, 1.0f, 1.0f); glVertex3f( 1.0f, -1.0f, 1.0f); glNormal3f( -1.0f, 0.0f, 0.0f); glVertex3f(-1.0f, -1.0f, -1.0f); glVertex3f(-1.0f, -1.0f, 1.0f); glVertex3f(-1.0f, 1.0f, 1.0f); glVertex3f(-1.0f, 1.0f, -1.0f); glNormal3f( 1.0f, 1.0f, 0.0f); glVertex3f(-1.0f, 1.0f, -1.0f); glVertex3f(-1.0f, 1.0f, 1.0f); glVertex3f( 1.0f, 1.0f, 1.0f); glVertex3f( 1.0f, 1.0f, -1.0f); glEnd(); } ENTRYPOINT void init_ball (ModeInfo *mi) { int wire = MI_IS_WIREFRAME(mi); blinkboxstruct *bp; if(blinkbox == NULL) { if((blinkbox = (blinkboxstruct *) calloc(MI_NUM_SCREENS(mi), sizeof (blinkboxstruct))) == NULL) return; } bp = &blinkbox[MI_SCREEN(mi)]; if ((bp->glx_context = init_GL(mi)) != NULL) { reshape_ball(mi, MI_WIDTH(mi), MI_HEIGHT(mi)); glDrawBuffer(GL_BACK); } else MI_CLEARWINDOW(mi); bp->ball.d = 1; bp->bscale.wh = bscale_wh; bp->bscale.d = 0.25; bp->mo.x = 1; bp->mo.y = 1; bp->mo.z = 1; bp->moh.x = -1.0; bp->moh.y = -1.5; bp->moh.z = -1.5; bp->bpos.x = 1; bp->bpos.y = 1; bp->bpos.z = 1; bp->des_amt = 1; bp->lside.counter = MAX_COUNT; bp->rside.counter = MAX_COUNT; bp->tside.counter = MAX_COUNT; bp->bside.counter = MAX_COUNT; bp->fside.counter = MAX_COUNT; bp->aside.counter = MAX_COUNT; bp->lside.color[0] = 1; bp->rside.color[1] = 1; bp->tside.color[2] = 1; bp->bside.color[0] = 1; bp->bside.color[1] = 0.5; bp->fside.color[0] = 1; bp->fside.color[1] = 1; bp->aside.color[0] = 0.5; bp->aside.color[2] = 1; bp->lside.rot[0] = 90; bp->rside.rot[0] = 90; bp->tside.rot[0] = 90; bp->bside.rot[0] = 90; bp->fside.rot[0] = 90; bp->aside.rot[0] = 90; bp->lside.rot[2] = 1; bp->rside.rot[2] = 1; bp->tside.rot[1] = 1; bp->bside.rot[1] = 1; bp->fside.rot[3] = 1; bp->aside.rot[3] = 1; bp->lside.des_count = 1; bp->rside.des_count = 1; bp->tside.des_count = 1; bp->bside.des_count = 1; bp->fside.des_count = 1; bp->aside.des_count = 1; bp->lside.alpha_count = 1; bp->rside.alpha_count = 1; bp->tside.alpha_count = 1; bp->bside.alpha_count = 1; bp->fside.alpha_count = 1; bp->aside.alpha_count = 1; #define SPHERE_SLICES 12 /* how densely to render spheres */ #define SPHERE_STACKS 16 bp->sp = malloc(sizeof(*bp->sp)); if(bp->sp == NULL){ fprintf(stderr,"Could not allocate memory\n"); exit(1); } if( (bp->bscale.wh < 1) || (bp->bscale.wh > 8) ) { fprintf(stderr,"Boxsize out of range. Using default\n"); bp->bscale.wh = 2; } if (do_dissolve){ bp->des_amt = bp->bscale.wh / MAX_COUNT; } reshape_ball(mi, MI_WIDTH(mi), MI_HEIGHT(mi)); bp->ballList = glGenLists(1); glNewList(bp->ballList, GL_COMPILE); unit_sphere (SPHERE_STACKS, SPHERE_SLICES, wire); glEndList (); bp->boxList = glGenLists(1); glNewList(bp->boxList, GL_COMPILE); unit_cube(wire); glEndList(); if (wire) return; glEnable(GL_COLOR_MATERIAL); glShadeModel(GL_SMOOTH); glClearDepth(1.0f); glEnable(GL_DEPTH_TEST); glDepthFunc(GL_LEQUAL); glEnable(GL_LIGHTING); glClearDepth(1); glLightfv(GL_LIGHT1, GL_DIFFUSE, LightDiffuse); glLightfv(GL_LIGHT1, GL_POSITION,LightPosition); glEnable(GL_LIGHT1); if (do_fade || do_blur) { glEnable(GL_BLEND); glDisable(GL_DEPTH_TEST); } } static void CheckBoxPos(blinkboxstruct *bp, GLfloat bot_x, GLfloat top_x, GLfloat bot_y, GLfloat top_y) { /*Make sure it's inside of the bounding box*/ bp->bpos.x = ((bp->bpos.x - bp->bscale.wh) < bot_x) ? bot_x + bp->bscale.wh : bp->bpos.x; bp->bpos.x = ((bp->bpos.x + bp->bscale.wh) > top_x) ? top_x - bp->bscale.wh : bp->bpos.x; bp->bpos.y = ((bp->bpos.y - bp->bscale.wh) < bot_y) ? bot_y + bp->bscale.wh : bp->bpos.y; bp->bpos.y = ((bp->bpos.y + bp->bscale.wh) > top_y) ? top_y - bp->bscale.wh : bp->bpos.y; } ENTRYPOINT void draw_ball (ModeInfo *mi) { blinkboxstruct *bp = &blinkbox[MI_SCREEN(mi)]; Display *dpy = MI_DISPLAY(mi); Window window = MI_WINDOW(mi); int i = 0; if (! bp->glx_context) return; mi->polygon_count = 0; glXMakeCurrent(MI_DISPLAY(mi), MI_WINDOW(mi), *(bp->glx_context)); glClear (GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); hit_top_bottom(bp); hit_front_back(bp); hit_side(bp); glRotated(0.25,0,0,1); glRotated(0.25,0,1,0); glRotated(0.25,1,0,0); glPushMatrix(); glScalef(0.5,0.5,0.5); glColor3f(1,1,1); glPushMatrix(); if (!do_blur || MI_IS_WIREFRAME(mi)) { glTranslatef(bp->ball.x += bp->mo.x, bp->ball.y += bp->mo.y, bp->ball.z += bp->mo.z); glScalef(2,2,2); glCallList(bp->ballList); mi->polygon_count += SPHERE_SLICES*SPHERE_STACKS; } else { # define blur_detail 24.0 float ball_alpha = 1 / blur_detail; glBlendFunc(GL_SRC_ALPHA,GL_ONE); glTranslatef(bp->ball.x, bp->ball.y, bp->ball.z); for (i = 0; i < blur_detail; ++i) { glTranslatef(bp->mo.x / blur_detail, bp->mo.y / blur_detail, bp->mo.z / blur_detail); /* comment the following line for quick but boring linear blur */ ball_alpha = sin((M_PI / blur_detail) * i) / blur_detail; glColor4f(1, 1, 1, ball_alpha); glScalef(2, 2, 2); glCallList(bp->ballList); mi->polygon_count += SPHERE_SLICES*SPHERE_STACKS; glScalef(.5, .5, .5); } i = 0; bp->ball.x += bp->mo.x; bp->ball.y += bp->mo.y; bp->ball.z += bp->mo.z; } glPopMatrix(); while(i < 6){ switch(i){ case 0:{ bp->sp = &bp->lside; bp->bpos.x = bp->lside.pos.z*-1; bp->bpos.y = bp->lside.pos.y; bp->bpos.z = bbox.bottom.x - bp->bscale.d; if (bp->sp->hit) CheckBoxPos(bp, bbox.bottom.z,bbox.top.z,bbox.bottom.y,bbox.top.y); break; } case 1:{ bp->sp = &bp->rside; bp->bpos.x = bp->rside.pos.z*-1; bp->bpos.y = bp->rside.pos.y; bp->bpos.z = bbox.top.x + bp->bscale.d; if (bp->sp->hit) CheckBoxPos(bp, bbox.bottom.z,bbox.top.z,bbox.bottom.y,bbox.top.y); break; } case 2:{ bp->sp = &bp->tside; bp->bpos.x = bp->tside.pos.x; bp->bpos.y = bp->tside.pos.z; bp->bpos.z = bbox.bottom.y - bp->bscale.d; if (bp->sp->hit) CheckBoxPos(bp, bbox.bottom.x,bbox.top.x,bbox.bottom.z,bbox.top.z); break; } case 3:{ bp->sp = &bp->bside; bp->bpos.x = bp->bside.pos.x; bp->bpos.y = bp->bside.pos.z; bp->bpos.z = bbox.top.y + bp->bscale.d; if (bp->sp->hit) CheckBoxPos(bp, bbox.bottom.x,bbox.top.x,bbox.bottom.z,bbox.top.z); break; } case 4:{ bp->sp = &bp->fside; bp->bpos.x = bp->fside.pos.y; bp->bpos.y = bp->fside.pos.x*-1; bp->bpos.z = bbox.top.z + bp->bscale.d; if (bp->sp->hit) CheckBoxPos(bp, bbox.bottom.y,bbox.top.y,bbox.bottom.x,bbox.top.x); break; } case 5:{ bp->sp = &bp->aside; bp->bpos.x = bp->aside.pos.y; bp->bpos.y = bp->aside.pos.x*-1; bp->bpos.z = bbox.bottom.z + bp->bscale.d; if (bp->sp->hit) CheckBoxPos(bp, bbox.bottom.y,bbox.top.y,bbox.bottom.x,bbox.top.x); break; } } if(bp->sp->hit){ if(do_fade){ glColor4f(bp->sp->color[0],bp->sp->color[1],bp->sp->color[2],1-(ALPHA_AMT * bp->sp->alpha_count)); }else{ glColor3fv(bp->sp->color); } glBlendFunc(GL_SRC_ALPHA,GL_ONE); glPushMatrix(); glRotatef(bp->sp->rot[0],bp->sp->rot[1],bp->sp->rot[2],bp->sp->rot[3]); glTranslatef(bp->bpos.x,bp->bpos.y,bp->bpos.z); if (do_dissolve) { glScalef(bp->bscale.wh-(bp->des_amt*bp->sp->des_count),bp->bscale.wh-(bp->des_amt*bp->sp->des_count),bp->bscale.d); }else{ glScalef(bp->bscale.wh,bp->bscale.wh,bp->bscale.d); } glCallList(bp->boxList); mi->polygon_count += 6; glPopMatrix(); bp->sp->counter--; bp->sp->des_count++; bp->sp->alpha_count++; if(!bp->sp->counter) { bp->sp->hit = 0; } } i++; } glPopMatrix(); if (mi->fps_p) do_fps (mi); glFinish(); glXSwapBuffers(dpy, window); } XSCREENSAVER_MODULE_2 ("BlinkBox", blinkbox, ball) #endif /* USE_GL */ xscreensaver-5.36/hacks/glx/noof.c000644 000767 000024 00000026750 12705613721 017144 0ustar00jwzstaff000000 000000 /* noof, Copyright (c) 2004 Bill Torzewski * * 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. * * Originally a demo included with GLUT; * (Apparently this was called "diatoms" on Irix.) * ported to raw GL and xscreensaver by jwz, 12-Feb-2004. */ #define DEFAULTS "*delay: 10000 \n" \ "*showFPS: False \n" \ "*fpsSolid: True \n" \ "*doubleBuffer: False \n" \ "*suppressRotationAnimation: True\n" \ # define refresh_noof 0 # define release_noof 0 # define noof_handle_event 0 #include "xlockmore.h" #ifdef USE_GL /* whole file */ #define N_SHAPES 7 static int dbuf_p = 1; /* always */ ENTRYPOINT ModeSpecOpt noof_opts = {0, NULL, 0, NULL, NULL}; typedef struct { GLXContext *glx_context; float pos[N_SHAPES * 3]; float dir[N_SHAPES * 3]; float acc[N_SHAPES * 3]; float col[N_SHAPES * 3]; float hsv[N_SHAPES * 3]; float hpr[N_SHAPES * 3]; float ang[N_SHAPES]; float spn[N_SHAPES]; float sca[N_SHAPES]; float geep[N_SHAPES]; float peep[N_SHAPES]; float speedsq[N_SHAPES]; int blad[N_SHAPES]; float ht, wd; int tko; } noof_configuration; static noof_configuration *bps = NULL; static void initshapes(noof_configuration *bp, int i) { int k; float f; /* random init of pos, dir, color */ for (k = i * 3; k <= i * 3 + 2; k++) { f = random() / (double) RAND_MAX; bp->pos[k] = f; f = random() / (double) RAND_MAX; f = (f - 0.5) * 0.05; bp->dir[k] = f; f = random() / (double) RAND_MAX; f = (f - 0.5) * 0.0002; bp->acc[k] = f; f = random() / (double) RAND_MAX; bp->col[k] = f; } bp->speedsq[i] = bp->dir[i * 3] * bp->dir[i * 3] + bp->dir[i * 3 + 1] * bp->dir[i * 3 + 1]; f = random() / (double) RAND_MAX; bp->blad[i] = 2 + (int) (f * 17.0); f = random() / (double) RAND_MAX; bp->ang[i] = f; f = random() / (double) RAND_MAX; bp->spn[i] = (f - 0.5) * 40.0 / (10 + bp->blad[i]); f = random() / (double) RAND_MAX; bp->sca[i] = (f * 0.1 + 0.08); bp->dir[i * 3] *= bp->sca[i]; bp->dir[i * 3 + 1] *= bp->sca[i]; f = random() / (double) RAND_MAX; bp->hsv[i * 3] = f * 360.0; f = random() / (double) RAND_MAX; bp->hsv[i * 3 + 1] = f * 0.6 + 0.4; f = random() / (double) RAND_MAX; bp->hsv[i * 3 + 2] = f * 0.7 + 0.3; f = random() / (double) RAND_MAX; bp->hpr[i * 3] = f * 0.005 * 360.0; f = random() / (double) RAND_MAX; bp->hpr[i * 3 + 1] = f * 0.03; f = random() / (double) RAND_MAX; bp->hpr[i * 3 + 2] = f * 0.02; bp->geep[i] = 0; f = random() / (double) RAND_MAX; bp->peep[i] = 0.01 + f * 0.2; } static const float bladeratio[] = { /* nblades = 2..7 */ 0.0, 0.0, 3.00000, 1.73205, 1.00000, 0.72654, 0.57735, 0.48157, /* 8..13 */ 0.41421, 0.36397, 0.19076, 0.29363, 0.26795, 0.24648, /* 14..19 */ 0.22824, 0.21256, 0.19891, 0.18693, 0.17633, 0.16687, }; static int drawleaf(noof_configuration *bp, int l) { int polys = 0; int b, blades; float x, y; float wobble; blades = bp->blad[l]; y = 0.10 * sin(bp->geep[l] * M_PI / 180.0) + 0.099 * sin(bp->geep[l] * 5.12 * M_PI / 180.0); if (y < 0) y = -y; x = 0.15 * cos(bp->geep[l] * M_PI / 180.0) + 0.149 * cos(bp->geep[l] * 5.12 * M_PI / 180.0); if (x < 0.0) x = 0.0 - x; if (y < 0.001 && x > 0.000002 && ((bp->tko & 0x1) == 0)) { initshapes(bp, l); /* let it become reborn as something else */ bp->tko++; return polys; } { float w1 = sin(bp->geep[l] * 15.3 * M_PI / 180.0); wobble = 3.0 + 2.00 * sin(bp->geep[l] * 0.4 * M_PI / 180.0) + 3.94261 * w1; } /** if(blades == 2) if (y > 3.000*x) y = x*3.000; if(blades == 3) if (y > 1.732*x) y = x*1.732; if(blades == 4) if (y > x) y = x; if(blades == 5) if (y > 0.726*x) y = x*0.726; if(blades == 6) if (y > 0.577*x) y = x*0.577; if(blades == 7) if (y > 0.481*x) y = x*0.481; if(blades == 8) if (y > 0.414*x) y = x*0.414; */ if (y > x * bladeratio[blades]) y = x * bladeratio[blades]; for (b = 0; b < blades; b++) { glPushMatrix(); glTranslatef(bp->pos[l * 3], bp->pos[l * 3 + 1], bp->pos[l * 3 + 2]); glRotatef(bp->ang[l] + b * (360.0 / blades), 0.0, 0.0, 1.0); glScalef(wobble * bp->sca[l], wobble * bp->sca[l], wobble * bp->sca[l]); /** if(tko & 0x40000) glColor3f(col[l*3], col[l*3+1], col[l*3+2]); else */ glColor4ub(0, 0, 0, 0x60); /* constrain geep cooridinates here XXX */ glEnable(GL_BLEND); glBegin(GL_TRIANGLE_STRIP); glVertex2f(x * bp->sca[l], 0.0); glVertex2f(x, y); glVertex2f(x, -y); /* C */ glVertex2f(0.3, 0.0); /* D */ polys += 2; glEnd(); /** if(tko++ & 0x40000) glColor3f(0,0,0); else */ glColor3f(bp->col[l * 3], bp->col[l * 3 + 1], bp->col[l * 3 + 2]); glBegin(GL_LINE_LOOP); glVertex2f(x * bp->sca[l], 0.0); glVertex2f(x, y); glVertex2f(0.3, 0.0); /* D */ glVertex2f(x, -y); /* C */ polys += 3; glEnd(); glDisable(GL_BLEND); glPopMatrix(); } return polys; } static void motionUpdate(noof_configuration *bp, int t) { if (bp->pos[t * 3] < -bp->sca[t] * bp->wd && bp->dir[t * 3] < 0.0) { bp->dir[t * 3] = -bp->dir[t * 3]; /** acc[t*3+1] += 0.8*acc[t*3]; acc[t*3] = -0.8*acc[t*3]; */ } else if (bp->pos[t * 3] > (1 + bp->sca[t]) * bp->wd && bp->dir[t * 3] > 0.0) { bp->dir[t * 3] = -bp->dir[t * 3]; /** acc[t*3+1] += 0.8*acc[t*3]; acc[t*3] = -0.8*acc[t*3]; */ } else if (bp->pos[t * 3 + 1] < -bp->sca[t] * bp->ht && bp->dir[t * 3 + 1] < 0.0) { bp->dir[t * 3 + 1] = -bp->dir[t * 3 + 1]; /** acc[t*3] += 0.8*acc[t*3+1]; acc[t*3+1] = -0.8*acc[t*3+1]; */ } else if (bp->pos[t * 3 + 1] > (1 + bp->sca[t]) * bp->ht && bp->dir[t * 3 + 1] > 0.0) { bp->dir[t * 3 + 1] = -bp->dir[t * 3 + 1]; /** acc[t*3] += 0.8*acc[t*3+1]; acc[t*3+1] = -0.8*acc[t*3+1]; */ } bp->pos[t * 3] += bp->dir[t * 3]; bp->pos[t * 3 + 1] += bp->dir[t * 3 + 1]; /** dir[t*3] += acc[t*3]; dir[t*3+1] += acc[t*3+1]; */ bp->ang[t] += bp->spn[t]; bp->geep[t] += bp->peep[t]; if (bp->geep[t] > 360 * 5.0) bp->geep[t] -= 360 * 5.0; if (bp->ang[t] < 0.0) { bp->ang[t] += 360.0; } if (bp->ang[t] > 360.0) { bp->ang[t] -= 360.0; } } static void colorUpdate(noof_configuration *bp, int i) { if (bp->hsv[i * 3 + 1] <= 0.5 && bp->hpr[i * 3 + 1] < 0.0) bp->hpr[i * 3 + 1] = -bp->hpr[i * 3 + 1]; /* adjust s */ if (bp->hsv[i * 3 + 1] >= 1.0 && bp->hpr[i * 3 + 1] > 0.0) bp->hpr[i * 3 + 1] = -bp->hpr[i * 3 + 1]; /* adjust s */ if (bp->hsv[i * 3 + 2] <= 0.4 && bp->hpr[i * 3 + 2] < 0.0) bp->hpr[i * 3 + 2] = -bp->hpr[i * 3 + 2]; /* adjust s */ if (bp->hsv[i * 3 + 2] >= 1.0 && bp->hpr[i * 3 + 2] > 0.0) bp->hpr[i * 3 + 2] = -bp->hpr[i * 3 + 2]; /* adjust s */ bp->hsv[i * 3] += bp->hpr[i * 3]; bp->hsv[i * 3 + 1] += bp->hpr[i * 3 + 1]; bp->hsv[i * 3 + 2] += bp->hpr[i * 3 + 2]; /* --- hsv -> rgb --- */ #define H(hhh) hhh[i*3 ] #define S(hhh) hhh[i*3+1] #define V(hhh) hhh[i*3+2] #define R(hhh) hhh[i*3 ] #define G(hhh) hhh[i*3+1] #define B(hhh) hhh[i*3+2] if (V(bp->hsv) < 0.0) V(bp->hsv) = 0.0; if (V(bp->hsv) > 1.0) V(bp->hsv) = 1.0; if (S(bp->hsv) <= 0.0) { R(bp->col) = V(bp->hsv); G(bp->col) = V(bp->hsv); B(bp->col) = V(bp->hsv); } else { float f, h, p, q, t, v; int hi; while (H(bp->hsv) < 0.0) H(bp->hsv) += 360.0; while (H(bp->hsv) >= 360.0) H(bp->hsv) -= 360.0; if (S(bp->hsv) < 0.0) S(bp->hsv) = 0.0; if (S(bp->hsv) > 1.0) S(bp->hsv) = 1.0; h = H(bp->hsv) / 60.0; hi = (int) (h); f = h - hi; v = V(bp->hsv); p = V(bp->hsv) * (1 - S(bp->hsv)); q = V(bp->hsv) * (1 - S(bp->hsv) * f); t = V(bp->hsv) * (1 - S(bp->hsv) * (1 - f)); if (hi <= 0) { R(bp->col) = v; G(bp->col) = t; B(bp->col) = p; } else if (hi == 1) { R(bp->col) = q; G(bp->col) = v; B(bp->col) = p; } else if (hi == 2) { R(bp->col) = p; G(bp->col) = v; B(bp->col) = t; } else if (hi == 3) { R(bp->col) = p; G(bp->col) = q; B(bp->col) = v; } else if (hi == 4) { R(bp->col) = t; G(bp->col) = p; B(bp->col) = v; } else { R(bp->col) = v; G(bp->col) = p; B(bp->col) = q; } } } static void gravity(noof_configuration *bp, float fx) { int a, b; for (a = 0; a < N_SHAPES; a++) { for (b = 0; b < a; b++) { float t, d2; t = bp->pos[b * 3] - bp->pos[a * 3]; d2 = t * t; t = bp->pos[b * 3 + 1] - bp->pos[a * 3 + 1]; d2 += t * t; if (d2 < 0.000001) d2 = 0.00001; if (d2 < 0.1) { float v0, v1, z; v0 = bp->pos[b * 3] - bp->pos[a * 3]; v1 = bp->pos[b * 3 + 1] - bp->pos[a * 3 + 1]; z = 0.00000001 * fx / (d2); bp->dir[a * 3] += v0 * z * bp->sca[b]; bp->dir[b * 3] += -v0 * z * bp->sca[a]; bp->dir[a * 3 + 1] += v1 * z * bp->sca[b]; bp->dir[b * 3 + 1] += -v1 * z * bp->sca[a]; } } /** apply brakes if(dir[a*3]*dir[a*3] + dir[a*3+1]*dir[a*3+1] > 0.0001) { dir[a*3] *= 0.9; dir[a*3+1] *= 0.9; } */ } } ENTRYPOINT void draw_noof (ModeInfo *mi) { int i; noof_configuration *bp = &bps[MI_SCREEN(mi)]; if (!bp->glx_context) return; glXMakeCurrent(MI_DISPLAY(mi), MI_WINDOW(mi), *(bp->glx_context)); mi->polygon_count = 0; /** if((random() & 0xff) == 0x34){ glClear(GL_COLOR_BUFFER_BIT); } if((tko & 0x1f) == 0x1f){ glEnable(GL_BLEND); glColor4f(0.0, 0.0, 0.0, 0.09); glRectf(0.0, 0.0, wd, ht); glDisable(GL_BLEND); #ifdef __sgi sginap(0); #endif } */ gravity(bp, -2.0); for (i = 0; i < N_SHAPES; i++) { motionUpdate(bp, i); colorUpdate(bp, i); mi->polygon_count += drawleaf(bp, i); } if (mi->fps_p) do_fps (mi); glFinish(); if (dbuf_p) glXSwapBuffers(MI_DISPLAY(mi), MI_WINDOW(mi)); } ENTRYPOINT void reshape_noof(ModeInfo *mi, int w, int h) { noof_configuration *bp = &bps[MI_SCREEN(mi)]; glViewport(0, 0, w, h); glMatrixMode(GL_PROJECTION); glLoadIdentity(); if (w <= h) { bp->wd = 1.0; bp->ht = (GLfloat) h / (GLfloat) w; glOrtho(0.0, 1.0, 0.0, 1.0 * (GLfloat) h / (GLfloat) w, -16.0, 4.0); } else { bp->wd = (GLfloat) w / (GLfloat) h; bp->ht = 1.0; glOrtho(0.0, 1.0 * (GLfloat) w / (GLfloat) h, 0.0, 1.0, -16.0, 4.0); } glMatrixMode(GL_MODELVIEW); glLoadIdentity(); glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); } ENTRYPOINT void init_noof (ModeInfo *mi) { int i; noof_configuration *bp; if (!bps) { bps = (noof_configuration *) calloc (MI_NUM_SCREENS(mi), sizeof (noof_configuration)); if (!bps) { fprintf(stderr, "%s: out of memory\n", progname); exit(1); } } bp = &bps[MI_SCREEN(mi)]; bp->glx_context = init_GL(mi); glDrawBuffer(dbuf_p ? GL_BACK : GL_FRONT); glEnable(GL_LINE_SMOOTH); glShadeModel(GL_FLAT); glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); for (i = 0; i < N_SHAPES; i++) initshapes(bp, i); reshape_noof (mi, MI_WIDTH(mi), MI_HEIGHT(mi)); } XSCREENSAVER_MODULE ("Noof", noof) #endif /* USE_GL */ xscreensaver-5.36/hacks/glx/polyhedra.c000644 000767 000024 00000176613 12721403704 020172 0ustar00jwzstaff000000 000000 /***************************************************************************** * #ident "Id: main.c,v 3.27 2002-01-06 16:23:01+02 rl Exp " * kaleido * * Kaleidoscopic construction of uniform polyhedra * Copyright (c) 1991-2002 Dr. Zvi Har'El * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in * the documentation and/or other materials provided with the * distribution. * * 3. The end-user documentation included with the redistribution, * if any, must include the following acknowledgment: * "This product includes software developed by * Dr. Zvi Har'El (http://www.math.technion.ac.il/~rl/)." * Alternately, this acknowledgment may appear in the software itself, * if and wherever such third-party acknowledgments normally appear. * * This software is provided 'as-is', without any express or implied * warranty. In no event will the author be held liable for any * damages arising from the use of this software. * * Author: * Dr. Zvi Har'El, * Deptartment of Mathematics, * Technion, Israel Institue of Technology, * Haifa 32000, Israel. * E-Mail: rl@math.technion.ac.il * * ftp://ftp.math.technion.ac.il/kaleido/ * http://www.mathconsult.ch/showroom/unipoly/ * * Adapted for xscreensaver by Jamie Zawinski 25-Apr-2004 * ***************************************************************************** */ #ifdef HAVE_CONFIG_H # include "config.h" #endif #include #include #include #include #include #include #include "polyhedra.h" extern const char *progname; #ifndef MAXLONG #define MAXLONG 0x7FFFFFFF #endif #ifndef MAXDIGITS #define MAXDIGITS 10 /* (int)log10((double)MAXLONG) + 1 */ #endif #ifndef DBL_EPSILON #define DBL_EPSILON 2.2204460492503131e-16 #endif #define BIG_EPSILON 3e-2 #define AZ M_PI/7 /* axis azimuth */ #define EL M_PI/17 /* axis elevation */ #define Err(x) do {\ fprintf (stderr, "%s: %s\n", progname, (x)); \ exit (1); \ } while(0) #define Free(lvalue) do {\ if (lvalue) {\ free((char*) lvalue);\ lvalue=0;\ }\ } while(0) #define Matfree(lvalue,n) do {\ if (lvalue) \ matfree((char*) lvalue, n);\ lvalue=0;\ } while(0) #define Malloc(lvalue,n,type) do {\ if (!(lvalue = (type*) calloc((n), sizeof(type)))) \ abort();\ } while(0) #define Realloc(lvalue,n,type) do {\ if (!(lvalue = (type*) realloc(lvalue, (n) * sizeof(type)))) \ abort();\ } while(0) #define Calloc(lvalue,n,type) do {\ if (!(lvalue = (type*) calloc(n, sizeof(type))))\ abort();\ } while(0) #define Matalloc(lvalue,n,m,type) do {\ if (!(lvalue = (type**) matalloc(n, (m) * sizeof(type))))\ abort();\ } while(0) #define Sprintfrac(lvalue,x) do {\ if (!(lvalue=sprintfrac(x)))\ return 0;\ } while(0) #define numerator(x) (frac(x), frax.n) #define denominator(x) (frac(x), frax.d) #define compl(x) (frac(x), (double) frax.n / (frax.n-frax.d)) typedef struct { double x, y, z; } Vector; typedef struct { /* NOTE: some of the int's can be replaced by short's, char's, or even bit fields, at the expense of readability!!!*/ int index; /* index to the standard list, the array uniform[] */ int N; /* number of faces types (atmost 5)*/ int M; /* vertex valency (may be big for dihedral polyhedra) */ int V; /* vertex count */ int E; /* edge count */ int F; /* face count */ int D; /* density */ int chi; /* Euler characteristic */ int g; /* order of symmetry group */ int K; /* symmetry type: D=2, T=3, O=4, I=5 */ int hemi;/* flag hemi polyhedron */ int onesided;/* flag onesided polyhedron */ int even; /* removed face in pqr| */ int *Fi; /* face counts by type (array N)*/ int *rot; /* vertex configuration (array M of 0..N-1) */ int *snub; /* snub triangle configuration (array M of 0..1) */ int *firstrot; /* temporary for vertex generation (array V) */ int *anti; /* temporary for direction of ideal vertices (array E) */ int *ftype; /* face types (array F) */ int **e; /* edges (matrix 2 x E of 0..V-1)*/ int **dual_e; /* dual edges (matrix 2 x E of 0..F-1)*/ int **incid; /* vertex-face incidence (matrix M x V of 0..F-1)*/ int **adj; /* vertex-vertex adjacency (matrix M x V of 0..V-1)*/ double p[4]; /* p, q and r; |=0 */ double minr; /* smallest nonzero inradius */ double gon; /* basis type for dihedral polyhedra */ double *n; /* number of side of a face of each type (array N) */ double *m; /* number of faces at a vertex of each type (array N) */ double *gamma; /* fundamental angles in radians (array N) */ char *polyform; /* printable Wythoff symbol */ char *config; /* printable vertex configuration */ char *group; /* printable group name */ char *name; /* name, standard or manifuctured */ char *dual_name; /* dual name, standard or manifuctured */ char *class; char *dual_class; Vector *v; /* vertex coordinates (array V) */ Vector *f; /* face coordinates (array F)*/ } Polyhedron; typedef struct { long n,d; } Fraction; static Polyhedron *polyalloc(void); static Vector rotate(Vector vertex, Vector axis, double angle); static Vector sum3(Vector a, Vector b, Vector c); static Vector scale(double k, Vector a); static Vector sum(Vector a, Vector b); static Vector diff(Vector a, Vector b); static Vector pole (double r, Vector a, Vector b, Vector c); static Vector cross(Vector a, Vector b); static double dot(Vector a, Vector b); static int same(Vector a, Vector b, double epsilon); static char *sprintfrac(double x); static void frac(double x); static void matfree(void *mat, int rows); static void *matalloc(int rows, int row_size); static Fraction frax; static const struct { char *Wythoff, *name, *dual, *group, *class, *dual_class; short Coxeter, Wenninger; } uniform[] = { /**************************************************************************** * Dihedral Schwarz Triangles (D5 only) ***************************************************************************/ /* 0 */ {"2 5|2", "Pentagonal Prism", "Pentagonal Dipyramid", "Dihedral (D[1/5])", "", "", 0, 0}, /* 2 */ {"|2 2 5", "Pentagonal Antiprism", "Pentagonal Deltohedron", "Dihedral (D[1/5])", "", "", 0, 0}, /* (2 2 5/2) (D2/5) */ /* 4 */ {"2 5/2|2", "Pentagrammic Prism", "Pentagrammic Dipyramid", "Dihedral (D[2/5])", "", "", 0, 0}, /* 6 */ {"|2 2 5/2", "Pentagrammic Antiprism", "Pentagrammic Deltohedron", "Dihedral (D[2/5])", "", "", 0, 0}, /* (5/3 2 2) (D3/5) */ /* 8 */ {"|2 2 5/3", "Pentagrammic Crossed Antiprism", "Pentagrammic Concave Deltohedron", "Dihedral (D[3/5])", "", "", 0, 0}, /**************************************************************************** * Tetrahedral ***************************************************************************/ /* (2 3 3) (T1) */ /* 10 */ {"3|2 3", "Tetrahedron", "Tetrahedron", "Tetrahedral (T[1])", "Platonic Solid", "Platonic Solid", 15, 1}, /* 12 */ {"2 3|3", "Truncated Tetrahedron", "Triakistetrahedron", "Tetrahedral (T[1])", "Archimedean Solid", "Catalan Solid", 16, 6}, /* (3/2 3 3) (T2) */ /* 14 */ {"3/2 3|3", "Octahemioctahedron", "Octahemioctacron", "Tetrahedral (T[2])", "", "", 37, 68}, /* (3/2 2 3) (T3) */ /* 16 */ {"3/2 3|2", "Tetrahemihexahedron", "Tetrahemihexacron", "Tetrahedral (T[3])", "", "", 36, 67}, /**************************************************************************** * Octahedral ***************************************************************************/ /* (2 3 4) (O1) */ /* 18 */ {"4|2 3", "Octahedron", "Cube", "Octahedral (O[1])", "Platonic Solid", "Platonic Solid", 17, 2}, /* 20 */ {"3|2 4", "Cube", "Octahedron", "Octahedral (O[1])", "Platonic Solid", "Platonic Solid", 18, 3}, /* 22 */ {"2|3 4", "Cuboctahedron", "Rhombic Dodecahedron", "Octahedral (O[1])", "Archimedean Solid", "Catalan Solid", 19, 11}, /* 24 */ {"2 4|3", "Truncated Octahedron", "Tetrakishexahedron", "Octahedral (O[1])", "Archimedean Solid", "Catalan Solid", 20, 7}, /* 26 */ {"2 3|4", "Truncated Cube", "Triakisoctahedron", "Octahedral (O[1])", "Archimedean Solid", "Catalan Solid", 21, 8}, /* 28 */ {"3 4|2", "Rhombicuboctahedron", "Deltoidal Icositetrahedron", "Octahedral (O[1])", "Archimedean Solid", "Catalan Solid", 22, 13}, /* 30 */ {"2 3 4|", "Truncated Cuboctahedron", "Disdyakisdodecahedron", "Octahedral (O[1])", "Archimedean Solid", "Catalan Solid", 23, 15}, /* 32, 33, 66, and 67 are chiral, existing in both left and right handed (enantiomeric) forms, so it would make sense to display both versions. */ /* 32 */ {"|2 3 4", "Snub Cube", "Pentagonal Icositetrahedron", "Octahedral (O[1]), Chiral", "Archimedean Solid", "Catalan Solid", 24, 17}, /* (3/2 4 4) (O2b) */ /* 34 */ {"3/2 4|4", "Small Cubicuboctahedron", "Small Hexacronic Icositetrahedron", "Octahedral (O[2b])", "", "", 38, 69}, /* (4/3 3 4) (O4) */ /* 36 */ {"3 4|4/3", "Great Cubicuboctahedron", "Great Hexacronic Icositetrahedron", "Octahedral (O[4])", "", "", 50, 77}, /* 38 */ {"4/3 4|3", "Cubohemioctahedron", "Hexahemioctacron", "Octahedral (O[4])", "", "", 51, 78}, /* 40 */ {"4/3 3 4|", "Cubitruncated Cuboctahedron", "Tetradyakishexahedron", "Octahedral (O[4])", "", "", 52, 79}, /* (3/2 2 4) (O5) */ /* 42 */ {"3/2 4|2", "Great Rhombicuboctahedron", "Great Deltoidal Icositetrahedron", "Octahedral (O[5])", "", "", 59, 85}, /* 44 */ {"3/2 2 4|", "Small Rhombihexahedron", "Small Rhombihexacron", "Octahedral (O[5])", "", "", 60, 86}, /* (4/3 2 3) (O7) */ /* 46 */ {"2 3|4/3", "Stellated Truncated Hexahedron", "Great Triakisoctahedron", "Octahedral (O[7])", "", "", 66, 92}, /* 48 */ {"4/3 2 3|", "Great Truncated Cuboctahedron", "Great Disdyakisdodecahedron", "Octahedral (O[7])", "", "", 67, 93}, /* (4/3 3/2 2) (O11) */ /* 50 */ {"4/3 3/2 2|", "Great Rhombihexahedron", "Great Rhombihexacron", "Octahedral (O[11])", "", "", 82, 103}, /**************************************************************************** * Icosahedral ***************************************************************************/ /* (2 3 5) (I1) */ /* 52 */ {"5|2 3", "Icosahedron", "Dodecahedron", "Icosahedral (I[1])", "Platonic Solid", "Platonic Solid", 25, 4}, /* 54 */ {"3|2 5", "Dodecahedron", "Icosahedron", "Icosahedral (I[1])", "Platonic Solid", "Platonic Solid", 26, 5}, /* 56 */ {"2|3 5", "Icosidodecahedron", "Rhombic Triacontahedron", "Icosahedral (I[1])", "Archimedean Solid", "Catalan Solid", 28, 12}, /* 58 */ {"2 5|3", "Truncated Icosahedron", "Pentakisdodecahedron", "Icosahedral (I[1])", "Archimedean Solid", "Catalan Solid", 27, 9}, /* 60 */ {"2 3|5", "Truncated Dodecahedron", "Triakisicosahedron", "Icosahedral (I[1])", "Archimedean Solid", "Catalan Solid", 29, 10}, /* 62 */ {"3 5|2", "Rhombicosidodecahedron", "Deltoidal Hexecontahedron", "Icosahedral (I[1])", "Archimedean Solid", "Catalan Solid", 30, 14}, /* 64 */ {"2 3 5|", "Truncated Icosidodecahedron", "Disdyakistriacontahedron", "Icosahedral (I[1])", "Archimedean Solid", "Catalan Solid", 31, 16}, /* 32, 33, 66, and 67 are chiral, existing in both left and right handed (enantiomeric) forms, so it would make sense to display both versions. */ /* 66 */ {"|2 3 5", "Snub Dodecahedron", "Pentagonal Hexecontahedron", "Icosahedral (I[1]), Chiral", "Archimedean Solid", "Catalan Solid", 32, 18}, /* (5/2 3 3) (I2a) */ /* 68 */ {"3|5/2 3", "Small Ditrigonal Icosidodecahedron", "Small Triambic Icosahedron", "Icosahedral (I[2a])", "", "", 39, 70}, /* 70 */ {"5/2 3|3", "Small Icosicosidodecahedron", "Small Icosacronic Hexecontahedron", "Icosahedral (I[2a])", "", "", 40, 71}, /* 72 */ {"|5/2 3 3", "Small Snub Icosicosidodecahedron", "Small Hexagonal Hexecontahedron", "Icosahedral (I[2a])", "", "", 41, 110}, /* (3/2 5 5) (I2b) */ /* 74 */ {"3/2 5|5", "Small Dodecicosidodecahedron", "Small Dodecacronic Hexecontahedron", "Icosahedral (I[2b])", "", "", 42, 72}, /* (2 5/2 5) (I3) */ /* 76 */ {"5|2 5/2", "Small Stellated Dodecahedron", "Great Dodecahedron", "Icosahedral (I[3])", "Kepler-Poinsot Solid", "Kepler-Poinsot Solid", 43, 20}, /* 78 */ {"5/2|2 5", "Great Dodecahedron", "Small Stellated Dodecahedron", "Icosahedral (I[3])", "Kepler-Poinsot Solid", "Kepler-Poinsot Solid", 44, 21}, /* 80 */ {"2|5/2 5", "Great Dodecadodecahedron", "Medial Rhombic Triacontahedron", "Icosahedral (I[3])", "", "", 45, 73}, /* 82 */ {"2 5/2|5", "Truncated Great Dodecahedron", "Small Stellapentakisdodecahedron", "Icosahedral (I[3])", "", "", 47, 75}, /* 84 */ {"5/2 5|2", "Rhombidodecadodecahedron", "Medial Deltoidal Hexecontahedron", "Icosahedral (I[3])", "", "", 48, 76}, /* 86 */ {"2 5/2 5|", "Small Rhombidodecahedron", "Small Rhombidodecacron", "Icosahedral (I[3])", "", "", 46, 74}, /* 88 */ {"|2 5/2 5", "Snub Dodecadodecahedron", "Medial Pentagonal Hexecontahedron", "Icosahedral (I[3])", "", "", 49, 111}, /* (5/3 3 5) (I4) */ /* 90 */ {"3|5/3 5", "Ditrigonal Dodecadodecahedron", "Medial Triambic Icosahedron", "Icosahedral (I[4])", "", "", 53, 80}, /* 92 */ {"3 5|5/3", "Great Ditrigonal Dodecicosidodecahedron", "Great Ditrigonal Dodecacronic Hexecontahedron", "Icosahedral (I[4])", "", "", 54, 81}, /* 94 */ {"5/3 3|5", "Small Ditrigonal Dodecicosidodecahedron", "Small Ditrigonal Dodecacronic Hexecontahedron", "Icosahedral (I[4])", "", "", 55, 82}, /* 96 */ {"5/3 5|3", "Icosidodecadodecahedron", "Medial Icosacronic Hexecontahedron", "Icosahedral (I[4])", "", "", 56, 83}, /* 98 */ {"5/3 3 5|", "Icositruncated Dodecadodecahedron", "Tridyakisicosahedron", "Icosahedral (I[4])", "", "", 57, 84}, /* 100 */ {"|5/3 3 5", "Snub Icosidodecadodecahedron", "Medial Hexagonal Hexecontahedron", "Icosahedral (I[4])", "", "", 58, 112}, /* (3/2 3 5) (I6b) */ /* 102 */ {"3/2|3 5", "Great Ditrigonal Icosidodecahedron", "Great Triambic Icosahedron", "Icosahedral (I[6b])", "", "", 61, 87}, /* 104 */ {"3/2 5|3", "Great Icosicosidodecahedron", "Great Icosacronic Hexecontahedron", "Icosahedral (I[6b])", "", "", 62, 88}, /* 106 */ {"3/2 3|5", "Small Icosihemidodecahedron", "Small Icosihemidodecacron", "Icosahedral (I[6b])", "", "", 63, 89}, /* 108 */ {"3/2 3 5|", "Small Dodecicosahedron", "Small Dodecicosacron", "Icosahedral (I[6b])", "", "", 64, 90}, /* (5/4 5 5) (I6c) */ /* 110 */ {"5/4 5|5", "Small Dodecahemidodecahedron", "Small Dodecahemidodecacron", "Icosahedral (I[6c])", "", "", 65, 91}, /* (2 5/2 3) (I7) */ /* 112 */ {"3|2 5/2", "Great Stellated Dodecahedron", "Great Icosahedron", "Icosahedral (I[7])", "Kepler-Poinsot Solid", "Kepler-Poinsot Solid", 68, 22}, /* 114 */ {"5/2|2 3", "Great Icosahedron", "Great Stellated Dodecahedron", "Icosahedral (I[7])", "Kepler-Poinsot Solid", "Kepler-Poinsot Solid", 69, 41}, /* 116 */ {"2|5/2 3", "Great Icosidodecahedron", "Great Rhombic Triacontahedron", "Icosahedral (I[7])", "", "", 70, 94}, /* 118 */ {"2 5/2|3", "Great Truncated Icosahedron", "Great Stellapentakisdodecahedron", "Icosahedral (I[7])", "", "", 71, 95}, /* 120 */ {"2 5/2 3|", "Rhombicosahedron", "Rhombicosacron", "Icosahedral (I[7])", "", "", 72, 96}, /* 122 */ {"|2 5/2 3", "Great Snub Icosidodecahedron", "Great Pentagonal Hexecontahedron", "Icosahedral (I[7])", "", "", 73, 113}, /* (5/3 2 5) (I9) */ /* 124 */ {"2 5|5/3", "Small Stellated Truncated Dodecahedron", "Great Pentakisdodecahedron", "Icosahedral (I[9])", "", "", 74, 97}, /* 126 */ {"5/3 2 5|", "Truncated Dodecadodecahedron", "Medial Disdyakistriacontahedron", "Icosahedral (I[9])", "", "", 75, 98}, /* 128 */ {"|5/3 2 5", "Inverted Snub Dodecadodecahedron", "Medial Inverted Pentagonal Hexecontahedron", "Icosahedral (I[9])", "", "", 76, 114}, /* (5/3 5/2 3) (I10a) */ /* 130 */ {"5/2 3|5/3", "Great Dodecicosidodecahedron", "Great Dodecacronic Hexecontahedron", "Icosahedral (I[10a])", "", "", 77, 99}, /* 132 */ {"5/3 5/2|3", "Small Dodecahemicosahedron", "Small Dodecahemicosacron", "Icosahedral (I[10a])", "", "", 78, 100}, /* 134 */ {"5/3 5/2 3|", "Great Dodecicosahedron", "Great Dodecicosacron", "Icosahedral (I[10a])", "", "", 79, 101}, /* 136 */ {"|5/3 5/2 3", "Great Snub Dodecicosidodecahedron", "Great Hexagonal Hexecontahedron", "Icosahedral (I[10a])", "", "", 80, 115}, /* (5/4 3 5) (I10b) */ /* 138 */ {"5/4 5|3", "Great Dodecahemicosahedron", "Great Dodecahemicosacron", "Icosahedral (I[10b])", "", "", 81, 102}, /* (5/3 2 3) (I13) */ /* 140 */ {"2 3|5/3", "Great Stellated Truncated Dodecahedron", "Great Triakisicosahedron", "Icosahedral (I[13])", "", "", 83, 104}, /* 142 */ {"5/3 3|2", "Great Rhombicosidodecahedron", "Great Deltoidal Hexecontahedron", "Icosahedral (I[13])", "", "", 84, 105}, /* 144 */ {"5/3 2 3|", "Great Truncated Icosidodecahedron", "Great Disdyakistriacontahedron", "Icosahedral (I[13])", "", "", 87, 108}, /* 146 */ {"|5/3 2 3", "Great Inverted Snub Icosidodecahedron", "Great Inverted Pentagonal Hexecontahedron", "Icosahedral (I[13])", "", "", 88, 116}, /* (5/3 5/3 5/2) (I18a) */ /* 148 */ {"5/3 5/2|5/3", "Great Dodecahemidodecahedron", "Great Dodecahemidodecacron", "Icosahedral (I[18a])", "", "", 86, 107}, /* (3/2 5/3 3) (I18b) */ /* 150 */ {"3/2 3|5/3", "Great Icosihemidodecahedron", "Great Icosihemidodecacron", "Icosahedral (I[18b])", "", "", 85, 106}, /* (3/2 3/2 5/3) (I22) */ /* 152 */ {"|3/2 3/2 5/2","Small Retrosnub Icosicosidodecahedron", "Small Hexagrammic Hexecontahedron", "Icosahedral (I[22])", "", "", 91, 118}, /* (3/2 5/3 2) (I23) */ /* 154 */ {"3/2 5/3 2|", "Great Rhombidodecahedron", "Great Rhombidodecacron", "Icosahedral (I[23])", "", "", 89, 109}, /* 156 */ {"|3/2 5/3 2", "Great Retrosnub Icosidodecahedron", "Great Pentagrammic Hexecontahedron", "Icosahedral (I[23])", "", "", 90, 117}, /**************************************************************************** * Last But Not Least ***************************************************************************/ /* 158 */ {"3/2 5/3 3 5/2", "Great Dirhombicosidodecahedron", "Great Dirhombicosidodecacron", "Non-Wythoffian", "", "", 92, 119} }; static int last_uniform = sizeof (uniform) / sizeof (uniform[0]); static int unpacksym(const char *sym, Polyhedron *P); static int moebius(Polyhedron *P); static int decompose(Polyhedron *P); static int guessname(Polyhedron *P); static int newton(Polyhedron *P, int need_approx); static int exceptions(Polyhedron *P); static int count(Polyhedron *P); static int configuration(Polyhedron *P); static int vertices(Polyhedron *P); static int faces(Polyhedron *P); static int edgelist(Polyhedron *P); static Polyhedron * kaleido(const char *sym, int need_coordinates, int need_edgelist, int need_approx, int just_list) { Polyhedron *P; /* * Allocate a Polyhedron structure P. */ if (!(P = polyalloc())) return 0; /* * Unpack input symbol into P. */ if (!unpacksym(sym, P)) return 0; /* * Find Mebius triangle, its density and Euler characteristic. */ if (!moebius(P)) return 0; /* * Decompose Schwarz triangle. */ if (!decompose(P)) return 0; /* * Find the names of the polyhedron and its dual. */ if (!guessname(P)) return 0; if (just_list) return P; /* * Solve Fundamental triangles, optionally printing approximations. */ if (!newton(P,need_approx)) return 0; /* * Deal with exceptional polyhedra. */ if (!exceptions(P)) return 0; /* * Count edges and faces, update density and characteristic if needed. */ if (!count(P)) return 0; /* * Generate printable vertex configuration. */ if (!configuration(P)) return 0; /* * Compute coordinates. */ if (!need_coordinates && !need_edgelist) return P; if (!vertices(P)) return 0; if (!faces (P)) return 0; /* * Compute edgelist. */ if (!need_edgelist) return P; if (!edgelist(P)) return 0; return P; } /* * Allocate a blank Polyhedron structure and initialize some of its nonblank * fields. * * Array and matrix field are allocated when needed. */ static Polyhedron * polyalloc() { Polyhedron *P; Calloc(P, 1, Polyhedron); P->index = -1; P->even = -1; P->K = 2; return P; } /* * Free the struture allocated by polyalloc(), as well as all the array and * matrix fields. */ static void polyfree(Polyhedron *P) { Free(P->Fi); Free(P->n); Free(P->m); Free(P->gamma); Free(P->rot); Free(P->snub); Free(P->firstrot); Free(P->anti); Free(P->ftype); Free(P->polyform); Free(P->config); if (P->index < 0) { Free(P->name); Free(P->dual_name); } Free(P->v); Free(P->f); Matfree(P->e, 2); Matfree(P->dual_e, 2); Matfree(P->incid, P->M); Matfree(P->adj, P->M); free(P); } static void * matalloc(int rows, int row_size) { void **mat; int i = 0; if (!(mat = malloc(rows * sizeof (void *)))) return 0; while ((mat[i] = malloc(row_size)) && ++i < rows) ; if (i == rows) return (void *)mat; while (--i >= 0) free(mat[i]); free(mat); return 0; } static void matfree(void *mat, int rows) { while (--rows >= 0) free(((void **)mat)[rows]); free(mat); } /* * compute the mathematical modulus function. */ static int mod (int i, int j) { return (i%=j)>=0?i:j<0?i-j:i+j; } /* * Find the numerator and the denominator using the Euclidean algorithm. */ static void frac(double x) { static const Fraction zero = {0,1}, inf = {1,0}; Fraction r0, r; long f; double s = x; r = zero; frax = inf; for (;;) { if (fabs(s) > (double) MAXLONG) return; f = (long) floor (s); r0 = r; r = frax; frax.n = frax.n * f + r0.n; frax.d = frax.d * f + r0.d; if (x == (double)frax.n/(double)frax.d) return; s = 1 / (s - f); } } /* * Unpack input symbol: Wythoff symbol or an index to uniform[]. The symbol is * a # followed by a number, or a three fractions and a bar in some order. We * allow no bars only if it result from the input symbol #80. */ static int unpacksym(const char *sym, Polyhedron *P) { int i = 0, n, d, bars = 0; char c; while ((c = *sym++) && isspace(c)) ; if (!c) Err("no data"); if (c == '#') { while ((c = *sym++) && isspace(c)) ; if (!c) Err("no digit after #"); if (!isdigit(c)) Err("not a digit"); n = c - '0'; while ((c = *sym++) && isdigit(c)) n = n * 10 + c - '0'; if (!n) Err("zero index"); if (n > last_uniform) Err("index too big"); sym--; while ((c = *sym++) && isspace(c)) ; if (c) Err("data exceeded"); sym = uniform[P->index = n - 1].Wythoff; } else sym--; for (;;) { while ((c = *sym++) && isspace(c)) ; if (!c) { if (i == 4 && (bars || P->index == last_uniform - 1)) return 1; if (!bars) Err("no bars"); Err("not enough fractions"); } if (i == 4) Err("data exceeded"); if (c == '|'){ if (++bars > 1) Err("too many bars"); P->p[i++] = 0; continue; } if (!isdigit(c)) Err("not a digit"); n = c - '0'; while ((c = *sym++) && isdigit(c)) n = n * 10 + c - '0'; if (c && isspace (c)) while ((c = *sym++) && isspace(c)) ; if (c != '/') { sym--; if ((P->p[i++] = n) <= 1) Err("fraction<=1"); continue; } while ((c = *sym++) && isspace(c)) ; if (!c || !isdigit(c)) return 0; d = c - '0'; while ((c = *sym++) && isdigit(c)) d = d * 10 + c - '0'; if (!d) Err("zero denominator"); sym--; if ((P->p[i++] = (double) n / d) <= 1) Err("fraction<=1"); } } /* * Using Wythoff symbol (p|qr, pq|r, pqr| or |pqr), find the Moebius triangle * (2 3 K) (or (2 2 n)) of the Schwarz triangle (pqr), the order g of its * symmetry group, its Euler characteristic chi, and its covering density D. * g is the number of copies of (2 3 K) covering the sphere, i.e., * * g * pi * (1/2 + 1/3 + 1/K - 1) = 4 * pi * * D is the number of times g copies of (pqr) cover the sphere, i.e. * * D * 4 * pi = g * pi * (1/p + 1/q + 1/r - 1) * * chi is V - E + F, where F = g is the number of triangles, E = 3*g/2 is the * number of triangle edges, and V = Vp+ Vq+ Vr, with Vp = g/(2*np) being the * number of vertices with angle pi/p (np is the numerator of p). */ static int moebius(Polyhedron *P) { int twos = 0, j, len = 1; /* * Arrange Wythoff symbol in a presentable form. In the same time check the * restrictions on the three fractions: They all have to be greater then one, * and the numerators 4 or 5 cannot occur together. We count the ocurrences * of 2 in `two', and save the largest numerator in `P->K', since they * reflect on the symmetry group. */ P->K = 2; if (P->index == last_uniform - 1) { Malloc(P->polyform, ++len, char); strcpy(P->polyform, "|"); } else Calloc(P->polyform, len, char); for (j = 0; j < 4; j++) { if (P->p[j]) { char *s; Sprintfrac(s, P->p[j]); if (j && P->p[j-1]) { Realloc(P->polyform, len += strlen (s) + 1, char); strcat(P->polyform, " "); } else Realloc (P->polyform, len += strlen (s), char); strcat(P->polyform, s); free(s); if (P->p[j] != 2) { int k; if ((k = numerator (P->p[j])) > P->K) { if (P->K == 4) break; P->K = k; } else if (k < P->K && k == 4) break; } else twos++; } else { Realloc(P->polyform, ++len, char); strcat(P->polyform, "|"); } } /* * Find the symmetry group P->K (where 2, 3, 4, 5 represent the dihedral, * tetrahedral, octahedral and icosahedral groups, respectively), and its * order P->g. */ if (twos >= 2) {/* dihedral */ P->g = 4 * P->K; P->K = 2; } else { if (P->K > 5) Err("numerator too large"); P->g = 24 * P->K / (6 - P->K); } /* * Compute the nominal density P->D and Euler characteristic P->chi. * In few exceptional cases, these values will be modified later. */ if (P->index != last_uniform - 1) { int i; P->D = P->chi = - P->g; for (j = 0; j < 4; j++) if (P->p[j]) { P->chi += i = P->g / numerator(P->p[j]); P->D += i * denominator(P->p[j]); } P->chi /= 2; P->D /= 4; if (P->D <= 0) Err("nonpositive density"); } return 1; } /* * Decompose Schwarz triangle into N right triangles and compute the vertex * count V and the vertex valency M. V is computed from the number g of * Schwarz triangles in the cover, divided by the number of triangles which * share a vertex. It is halved for one-sided polyhedra, because the * kaleidoscopic construction really produces a double orientable covering of * such polyhedra. All q' q|r are of the "hemi" type, i.e. have equatorial {2r} * faces, and therefore are (except 3/2 3|3 and the dihedra 2 2|r) one-sided. A * well known example is 3/2 3|4, the "one-sided heptahedron". Also, all p q r| * with one even denominator have a crossed parallelogram as a vertex figure, * and thus are one-sided as well. */ static int decompose(Polyhedron *P) { int j, J, *s, *t; if (!P->p[1]) { /* p|q r */ P->N = 2; P->M = 2 * numerator(P->p[0]); P->V = P->g / P->M; Malloc(P->n, P->N, double); Malloc(P->m, P->N, double); Malloc(P->rot, P->M, int); s = P->rot; for (j = 0; j < 2; j++) { P->n[j] = P->p[j+2]; P->m[j] = P->p[0]; } for (j = P->M / 2; j--;) { *s++ = 0; *s++ = 1; } } else if (!P->p[2]) { /* p q|r */ P->N = 3; P->M = 4; P->V = P->g / 2; Malloc(P->n, P->N, double); Malloc(P->m, P->N, double); Malloc(P->rot, P->M, int); s = P->rot; P->n[0] = 2 * P->p[3]; P->m[0] = 2; for (j = 1; j < 3; j++) { P->n[j] = P->p[j-1]; P->m[j] = 1; *s++ = 0; *s++ = j; } if (fabs(P->p[0] - compl (P->p[1])) < DBL_EPSILON) {/* p = q' */ /* P->p[0]==compl(P->p[1]) should work. However, MSDOS * yeilds a 7e-17 difference! Reported by Jim Buddenhagen * */ P->hemi = 1; P->D = 0; if (P->p[0] != 2 && !(P->p[3] == 3 && (P->p[0] == 3 || P->p[1] == 3))) { P->onesided = 1; P->V /= 2; P->chi /= 2; } } } else if (!P->p[3]) { /* p q r| */ P->M = P->N = 3; P->V = P->g; Malloc(P->n, P->N, double); Malloc(P->m, P->N, double); Malloc(P->rot, P->M, int); s = P->rot; for (j = 0; j < 3; j++) { if (!(denominator(P->p[j]) % 2)) { /* what happens if there is more then one even denominator? */ if (P->p[(j+1)%3] != P->p[(j+2)%3]) { /* needs postprocessing */ P->even = j;/* memorize the removed face */ P->chi -= P->g / numerator(P->p[j]) / 2; P->onesided = 1; P->D = 0; } else {/* for p = q we get a double 2 2r|p */ /* noted by Roman Maeder for 4 4 3/2| */ /* Euler characteristic is still wrong */ P->D /= 2; } P->V /= 2; } P->n[j] = 2 * P->p[j]; P->m[j] = 1; *s++ = j; } } else { /* |p q r - snub polyhedron */ P->N = 4; P->M = 6; P->V = P->g / 2;/* Only "white" triangles carry a vertex */ Malloc(P->n, P->N, double); Malloc(P->m, P->N, double); Malloc(P->rot, P->M, int); Malloc(P->snub, P->M, int); s = P->rot; t = P->snub; P->m[0] = P->n[0] = 3; for (j = 1; j < 4; j++) { P->n[j] = P->p[j]; P->m[j] = 1; *s++ = 0; *s++ = j; *t++ = 1; *t++ = 0; } } /* * Sort the fundamental triangles (using bubble sort) according to decreasing * n[i], while pushing the trivial triangles (n[i] = 2) to the end. */ J = P->N - 1; while (J) { int last; last = J; J = 0; for (j = 0; j < last; j++) { if ((P->n[j] < P->n[j+1] || P->n[j] == 2) && P->n[j+1] != 2) { int i; double temp; temp = P->n[j]; P->n[j] = P->n[j+1]; P->n[j+1] = temp; temp = P->m[j]; P->m[j] = P->m[j+1]; P->m[j+1] = temp; for (i = 0; i < P->M; i++) { if (P->rot[i] == j) P->rot[i] = j+1; else if (P->rot[i] == j+1) P->rot[i] = j; } if (P->even != -1) { if (P->even == j) P->even = j+1; else if (P->even == j+1) P->even = j; } J = j; } } } /* * Get rid of repeated triangles. */ for (J = 0; J < P->N && P->n[J] != 2;J++) { int k, i; for (j = J+1; j < P->N && P->n[j]==P->n[J]; j++) P->m[J] += P->m[j]; k = j - J - 1; if (k) { for (i = j; i < P->N; i++) { P->n[i - k] = P->n[i]; P->m[i - k] = P->m[i]; } P->N -= k; for (i = 0; i < P->M; i++) { if (P->rot[i] >= j) P->rot[i] -= k; else if (P->rot[i] > J) P->rot[i] = J; } if (P->even >= j) P->even -= k; } } /* * Get rid of trivial triangles. */ if (!J) J = 1; /* hosohedron */ if (J < P->N) { int i; P->N = J; for (i = 0; i < P->M; i++) { if (P->rot[i] >= P->N) { for (j = i + 1; j < P->M; j++) { P->rot[j-1] = P->rot[j]; if (P->snub) P->snub[j-1] = P->snub[j]; } P->M--; } } } /* * Truncate arrays */ Realloc(P->n, P->N, double); Realloc(P->m, P->N, double); Realloc(P->rot, P->M, int); if (P->snub) Realloc(P->snub, P->M, int); return 1; } static int dihedral(Polyhedron *P, const char *name, const char *dual_name); /* * Get the polyhedron name, using standard list or guesswork. Ideally, we * should try to locate the Wythoff symbol in the standard list (unless, of * course, it is dihedral), after doing few normalizations, such as sorting * angles and splitting isoceles triangles. */ static int guessname(Polyhedron *P) { if (P->index != -1) {/* tabulated */ P->name = uniform[P->index].name; P->dual_name = uniform[P->index].dual; P->group = uniform[P->index].group; P->class = uniform[P->index].class; P->dual_class = uniform[P->index].dual_class; return 1; } else if (P->K == 2) {/* dihedral nontabulated */ if (!P->p[0]) { if (P->N == 1) { Malloc(P->name, sizeof ("Octahedron"), char); Malloc(P->dual_name, sizeof ("Cube"), char); strcpy(P->name, "Octahedron"); strcpy(P->dual_name, "Cube"); return 1; } P->gon = P->n[0] == 3 ? P->n[1] : P->n[0]; if (P->gon >= 2) return dihedral(P, "Antiprism", "Deltohedron"); else return dihedral(P, "Crossed Antiprism", "Concave Deltohedron"); } else if (!P->p[3] || (!P->p[2] && P->p[3] == 2)) { if (P->N == 1) { Malloc(P->name, sizeof("Cube"), char); Malloc(P->dual_name, sizeof("Octahedron"), char); strcpy(P->name, "Cube"); strcpy(P->dual_name, "Octahedron"); return 1; } P->gon = P->n[0] == 4 ? P->n[1] : P->n[0]; return dihedral(P, "Prism", "Dipyramid"); } else if (!P->p[1] && P->p[0] != 2) { P->gon = P->m[0]; return dihedral(P, "Hosohedron", "Dihedron"); } else { P->gon = P->n[0]; return dihedral(P, "Dihedron", "Hosohedron"); } } else {/* other nontabulated */ static const char *pre[] = {"Tetr", "Oct", "Icos"}; Malloc(P->name, 50, char); Malloc(P->dual_name, 50, char); sprintf(P->name, "%sahedral ", pre[P->K - 3]); if (P->onesided) strcat (P->name, "One-Sided "); else if (P->D == 1) strcat(P->name, "Convex "); else strcat(P->name, "Nonconvex "); strcpy(P->dual_name, P->name); strcat(P->name, "Isogonal Polyhedron"); strcat(P->dual_name, "Isohedral Polyhedron"); Realloc(P->name, strlen (P->name) + 1, char); Realloc(P->dual_name, strlen (P->dual_name) + 1, char); return 1; } } static int dihedral(Polyhedron *P, const char *name, const char *dual_name) { char *s; int i; Sprintfrac(s, P->gon < 2 ? compl (P->gon) : P->gon); i = strlen(s) + sizeof ("-gonal "); Malloc(P->name, i + strlen (name), char); Malloc(P->dual_name, i + strlen (dual_name), char); sprintf(P->name, "%s-gonal %s", s, name); sprintf(P->dual_name, "%s-gonal %s", s, dual_name); free(s); return 1; } /* * Solve the fundamental right spherical triangles. * If need_approx is set, print iterations on standard error. */ static int newton(Polyhedron *P, int need_approx) { /* * First, we find initial approximations. */ int j; double cosa; Malloc(P->gamma, P->N, double); if (P->N == 1) { P->gamma[0] = M_PI / P->m[0]; return 1; } for (j = 0; j < P->N; j++) P->gamma[j] = M_PI / 2 - M_PI / P->n[j]; errno = 0; /* may be non-zero from some reason */ /* * Next, iteratively find closer approximations for gamma[0] and compute * other gamma[j]'s from Napier's equations. */ if (need_approx) fprintf(stderr, "Solving %s\n", P->polyform); for (;;) { double delta = M_PI, sigma = 0; for (j = 0; j < P->N; j++) { if (need_approx) fprintf(stderr, "%-20.15f", P->gamma[j]); delta -= P->m[j] * P->gamma[j]; } if (need_approx) printf("(%g)\n", delta); if (fabs(delta) < 11 * DBL_EPSILON) return 1; /* On a RS/6000, fabs(delta)/DBL_EPSILON may occilate between 8 and * 10. Reported by David W. Sanderson */ for (j = 0; j < P->N; j++) sigma += P->m[j] * tan(P->gamma[j]); P->gamma[0] += delta * tan(P->gamma[0]) / sigma; if (P->gamma[0] < 0 || P->gamma[0] > M_PI) Err("gamma out of bounds"); cosa = cos(M_PI / P->n[0]) / sin(P->gamma[0]); for (j = 1; j < P->N; j++) P->gamma[j] = asin(cos(M_PI / P->n[j]) / cosa); if (errno) Err(strerror(errno)); } } /* * Postprocess pqr| where r has an even denominator (cf. Coxeter &al. Sec.9). * Remove the {2r} and add a retrograde {2p} and retrograde {2q}. */ static int exceptions(Polyhedron *P) { int j; if (P->even != -1) { P->M = P->N = 4; Realloc(P->n, P->N, double); Realloc(P->m, P->N, double); Realloc(P->gamma, P->N, double); Realloc(P->rot, P->M, int); for (j = P->even + 1; j < 3; j++) { P->n[j-1] = P->n[j]; P->gamma[j-1] = P->gamma[j]; } P->n[2] = compl(P->n[1]); P->gamma[2] = - P->gamma[1]; P->n[3] = compl(P->n[0]); P->m[3] = 1; P->gamma[3] = - P->gamma[0]; P->rot[0] = 0; P->rot[1] = 1; P->rot[2] = 3; P->rot[3] = 2; } /* * Postprocess the last polyhedron |3/2 5/3 3 5/2 by taking a |5/3 3 5/2, * replacing the three snub triangles by four equatorial squares and adding * the missing {3/2} (retrograde triangle, cf. Coxeter &al. Sec. 11). */ if (P->index == last_uniform - 1) { P->N = 5; P->M = 8; Realloc(P->n, P->N, double); Realloc(P->m, P->N, double); Realloc(P->gamma, P->N, double); Realloc(P->rot, P->M, int); Realloc(P->snub, P->M, int); P->hemi = 1; P->D = 0; for (j = 3; j; j--) { P->m[j] = 1; P->n[j] = P->n[j-1]; P->gamma[j] = P->gamma[j-1]; } P->m[0] = P->n[0] = 4; P->gamma[0] = M_PI / 2; P->m[4] = 1; P->n[4] = compl(P->n[1]); P->gamma[4] = - P->gamma[1]; for (j = 1; j < 6; j += 2) P->rot[j]++; P->rot[6] = 0; P->rot[7] = 4; P->snub[6] = 1; P->snub[7] = 0; } return 1; } /* * Compute edge and face counts, and update D and chi. Update D in the few * cases the density of the polyhedron is meaningful but different than the * density of the corresponding Schwarz triangle (cf. Coxeter &al., p. 418 and * p. 425). * In these cases, spherical faces of one type are concave (bigger than a * hemisphere), and the actual density is the number of these faces less the * computed density. Note that if j != 0, the assignment gamma[j] = asin(...) * implies gamma[j] cannot be obtuse. Also, compute chi for the only * non-Wythoffian polyhedron. */ static int count(Polyhedron *P) { int j, temp; Malloc(P->Fi, P->N, int); for (j = 0; j < P->N; j++) { P->E += temp = P->V * numerator(P->m[j]); P->F += P->Fi[j] = temp / numerator(P->n[j]); } P->E /= 2; if (P->D && P->gamma[0] > M_PI / 2) P->D = P->Fi[0] - P->D; if (P->index == last_uniform - 1) P->chi = P->V - P->E + P->F; return 1; } /* * Generate a printable vertex configuration symbol. */ static int configuration(Polyhedron *P) { int j, len = 2; for (j = 0; j < P->M; j++) { char *s; Sprintfrac(s, P->n[P->rot[j]]); len += strlen (s) + 2; if (!j) { Malloc(P->config, len, char); /* strcpy(P->config, "(");*/ strcpy(P->config, ""); } else { Realloc(P->config, len, char); strcat(P->config, ", "); } strcat(P->config, s); free(s); } /* strcat (P->config, ")");*/ if ((j = denominator (P->m[0])) != 1) { char s[MAXDIGITS + 2]; sprintf(s, "/%d", j); Realloc(P->config, len + strlen (s), char); strcat(P->config, s); } return 1; } /* * Compute polyhedron vertices and vertex adjecency lists. * The vertices adjacent to v[i] are v[adj[0][i], v[adj[1][i], ... * v[adj[M-1][i], ordered counterclockwise. The algorith is a BFS on the * vertices, in such a way that the vetices adjacent to a givem vertex are * obtained from its BFS parent by a cyclic sequence of rotations. firstrot[i] * points to the first rotaion in the sequence when applied to v[i]. Note that * for non-snub polyhedra, the rotations at a child are opposite in sense when * compared to the rotations at the parent. Thus, we fill adj[*][i] from the * end to signify clockwise rotations. The firstrot[] array is not needed for * display thus it is freed after being used for face computations below. */ static int vertices(Polyhedron *P) { int i, newV = 2; double cosa; Malloc(P->v, P->V, Vector); Matalloc(P->adj, P->M, P->V, int); Malloc(P->firstrot, P->V, int); /* temporary , put in Polyhedron structure so that may be freed on error */ cosa = cos(M_PI / P->n[0]) / sin(P->gamma[0]); P->v[0].x = 0; P->v[0].y = 0; P->v[0].z = 1; P->firstrot[0] = 0; P->adj[0][0] = 1; P->v[1].x = 2 * cosa * sqrt(1 - cosa * cosa); P->v[1].y = 0; P->v[1].z = 2 * cosa * cosa - 1; if (!P->snub) { P->firstrot[1] = 0; P->adj[0][1] = -1;/* start the other side */ P->adj[P->M-1][1] = 0; } else { P->firstrot[1] = P->snub[P->M-1] ? 0 : P->M-1 ; P->adj[0][1] = 0; } for (i = 0; i < newV; i++) { int j, k; int last, one, start, limit; if (P->adj[0][i] == -1) { one = -1; start = P->M-2; limit = -1; } else { one = 1; start = 1; limit = P->M; } k = P->firstrot[i]; for (j = start; j != limit; j += one) { Vector temp; int J; temp = rotate (P->v[P->adj[j-one][i]], P->v[i], one * 2 * P->gamma[P->rot[k]]); for (J=0; Jv[J],temp,BIG_EPSILON); J++) ;/* noop */ P->adj[j][i] = J; last = k; if (++k == P->M) k = 0; if (J == newV) { /* new vertex */ if (newV == P->V) Err ("too many vertices"); P->v[newV++] = temp; if (!P->snub) { P->firstrot[J] = k; if (one > 0) { P->adj[0][J] = -1; P->adj[P->M-1][J] = i; } else { P->adj[0][J] = i; } } else { P->firstrot[J] = !P->snub[last] ? last : !P->snub[k] ? (k+1)%P->M : k ; P->adj[0][J] = i; } } } } return 1; } /* * Compute polyhedron faces (dual vertices) and incidence matrices. * For orientable polyhedra, we can distinguish between the two faces meeting * at a given directed edge and identify the face on the left and the face on * the right, as seen from the outside. For one-sided polyhedra, the vertex * figure is a papillon (in Coxeter &al. terminology, a crossed parallelogram) * and the two faces meeting at an edge can be identified as the side face * (n[1] or n[2]) and the diagonal face (n[0] or n[3]). */ static int faces(Polyhedron *P) { int i, newF = 0; Malloc (P->f, P->F, Vector); Malloc (P->ftype, P->F, int); Matalloc (P->incid, P->M, P->V, int); P->minr = 1 / fabs (tan (M_PI / P->n[P->hemi]) * tan (P->gamma[P->hemi])); for (i = P->M; --i>=0;) { int j; for (j = P->V; --j>=0;) P->incid[i][j] = -1; } for (i = 0; i < P->V; i++) { int j; for (j = 0; j < P->M; j++) { int i0, J; int pap=0;/* papillon edge type */ if (P->incid[j][i] != -1) continue; P->incid[j][i] = newF; if (newF == P->F) Err("too many faces"); P->f[newF] = pole(P->minr, P->v[i], P->v[P->adj[j][i]], P->v[P->adj[mod(j + 1, P->M)][i]]); P->ftype[newF] = P->rot[mod(P->firstrot[i] + ((P->adj[0][i] < P->adj[P->M - 1][i]) ? j : -j - 2), P->M)]; if (P->onesided) pap = (P->firstrot[i] + j) % 2; i0 = i; J = j; for (;;) { int k; k = i0; if ((i0 = P->adj[J][k]) == i) break; for (J = 0; J < P->M && P->adj[J][i0] != k; J++) ;/* noop */ if (J == P->M) Err("too many faces"); if (P->onesided && (J + P->firstrot[i0]) % 2 == pap) { P->incid [J][i0] = newF; if (++J >= P->M) J = 0; } else { if (--J < 0) J = P->M - 1; P->incid [J][i0] = newF; } } newF++; } } Free(P->firstrot); Free(P->rot); Free(P->snub); return 1; } /* * Compute edge list and graph polyhedron and dual. * If the polyhedron is of the "hemi" type, each edge has one finite vertex and * one ideal vertex. We make sure the latter is always the out-vertex, so that * the edge becomes a ray (half-line). Each ideal vertex is represented by a * unit Vector, and the direction of the ray is either parallel or * anti-parallel this Vector. We flag this in the array P->anti[E]. */ static int edgelist(Polyhedron *P) { int i, j, *s, *t, *u; Matalloc(P->e, 2, P->E, int); Matalloc(P->dual_e, 2, P->E, int); s = P->e[0]; t = P->e[1]; for (i = 0; i < P->V; i++) for (j = 0; j < P->M; j++) if (i < P->adj[j][i]) { *s++ = i; *t++ = P->adj[j][i]; } s = P->dual_e[0]; t = P->dual_e[1]; if (!P->hemi) P->anti = 0; else Malloc(P->anti, P->E, int); u = P->anti; for (i = 0; i < P->V; i++) for (j = 0; j < P->M; j++) if (i < P->adj[j][i]) { if (!u) { *s++ = P->incid[mod(j-1,P->M)][i]; *t++ = P->incid[j][i]; } else { if (P->ftype[P->incid[j][i]]) { *s = P->incid[j][i]; *t = P->incid[mod(j-1,P->M)][i]; } else { *s = P->incid[mod(j-1,P->M)][i]; *t = P->incid[j][i]; } *u++ = dot(P->f[*s++], P->f[*t++]) > 0; } } return 1; } static char * sprintfrac(double x) { char *s; frac (x); if (!frax.d) { Malloc(s, sizeof ("infinity"), char); strcpy(s, "infinity"); } else if (frax.d == 1) { char n[MAXDIGITS + 1]; sprintf(n, "%ld", frax.n); Malloc(s, strlen (n) + 1, char); strcpy(s, n); } else { char n[MAXDIGITS + 1], d[MAXDIGITS + 1]; sprintf(n, "%ld", frax.n); sprintf(d, "%ld", frax.d); Malloc(s, strlen (n) + strlen (d) + 2, char); sprintf(s, "%s/%s", n, d); } return s; } static double dot(Vector a, Vector b) { return a.x * b.x + a.y * b.y + a.z * b.z; } static Vector scale(double k, Vector a) { a.x *= k; a.y *= k; a.z *= k; return a; } static Vector diff(Vector a, Vector b) { a.x -= b.x; a.y -= b.y; a.z -= b.z; return a; } static Vector cross(Vector a, Vector b) { Vector p; p.x = a.y * b.z - a.z * b.y; p.y = a.z * b.x - a.x * b.z; p.z = a.x * b.y - a.y * b.x; return p; } static Vector sum(Vector a, Vector b) { a.x += b.x; a.y += b.y; a.z += b.z; return a; } static Vector sum3(Vector a, Vector b, Vector c) { a.x += b.x + c.x; a.y += b.y + c.y; a.z += b.z + c.z; return a; } static Vector rotate(Vector vertex, Vector axis, double angle) { Vector p; p = scale(dot (axis, vertex), axis); return sum3(p, scale(cos(angle), diff(vertex, p)), scale(sin(angle), cross(axis, vertex))); } static Vector x, y, z; /* * rotate the standard frame */ static void rotframe(double azimuth, double elevation, double angle) { static const Vector X = {1,0,0}, Y = {0,1,0}, Z = {0,0,1}; Vector axis; axis = rotate(rotate (X, Y, elevation), Z, azimuth); x = rotate(X, axis, angle); y = rotate(Y, axis, angle); z = rotate(Z, axis, angle); } /* * rotate an array of n Vectors */ static void rotarray(Vector *new, Vector *old, int n) { while (n--) { *new++ = sum3(scale(old->x, x), scale(old->y, y), scale(old->z, z)); old++; } } static int same(Vector a, Vector b, double epsilon) { return fabs(a.x - b.x) < epsilon && fabs(a.y - b.y) < epsilon && fabs(a.z - b.z) < epsilon; } /* * Compute the polar reciprocal of the plane containing a, b and c: * * If this plane does not contain the origin, return p such that * dot(p,a) = dot(p,b) = dot(p,b) = r. * * Otherwise, return p such that * dot(p,a) = dot(p,b) = dot(p,c) = 0 * and * dot(p,p) = 1. */ static Vector pole(double r, Vector a, Vector b, Vector c) { Vector p; double k; p = cross(diff(b, a), diff(c, a)); k = dot(p, a); if (fabs(k) < 1e-6) return scale(1 / sqrt(dot(p, p)), p); else return scale(r/ k , p); } /* output */ static void rotframe(double azimuth, double elevation, double angle); static void rotarray(Vector *new, Vector *old, int n); static int mod (int i, int j); static void push_point (polyhedron *p, Vector v) { p->points[p->npoints].x = v.x; p->points[p->npoints].y = v.y; p->points[p->npoints].z = v.z; p->npoints++; } static void push_face3 (polyhedron *p, int x, int y, int z) { p->faces[p->nfaces].npoints = 3; Malloc (p->faces[p->nfaces].points, 3, int); p->faces[p->nfaces].points[0] = x; p->faces[p->nfaces].points[1] = y; p->faces[p->nfaces].points[2] = z; p->nfaces++; } static void push_face4 (polyhedron *p, int x, int y, int z, int w) { p->faces[p->nfaces].npoints = 4; Malloc (p->faces[p->nfaces].points, 4, int); p->faces[p->nfaces].points[0] = x; p->faces[p->nfaces].points[1] = y; p->faces[p->nfaces].points[2] = z; p->faces[p->nfaces].points[3] = w; p->nfaces++; } static polyhedron * construct_polyhedron (Polyhedron *P, Vector *v, int V, Vector *f, int F, const char *name, const char *dual, const char *class, const char *star, double azimuth, double elevation, double freeze) { int i, j, k=0, l, ll, ii, *hit=0, facelets; polyhedron *result; Vector *temp; Malloc (result, 1, polyhedron); memset (result, 0, sizeof(*result)); /* * Rotate polyhedron */ rotframe(azimuth, elevation, freeze); Malloc(temp, V, Vector); rotarray(temp, v, V); v = temp; Malloc(temp, F, Vector); rotarray(temp, f, F); f = temp; result->number = P->index + 1; result->name = strdup (name); result->dual = strdup (dual); result->wythoff = strdup (P->polyform); result->config = strdup (P->config); result->group = strdup (P->group); result->class = strdup (class); /* * Vertex list */ Malloc (result->points, V + F * 13, point); result->npoints = 0; result->nedges = P->E; result->logical_faces = F; result->logical_vertices = V; result->density = P->D; result->chi = P->chi; for (i = 0; i < V; i++) push_point (result, v[i]); /* * Auxiliary vertices (needed because current VRML browsers cannot handle * non-simple polygons, i.e., ploygons with self intersections): Each * non-simple face is assigned an auxiliary vertex. By connecting it to the * rest of the vertices the face is triangulated. The circum-center is used * for the regular star faces of uniform polyhedra. The in-center is used for * the pentagram (#79) and hexagram (#77) of the high-density snub duals, and * for the pentagrams (#40, #58) and hexagram (#52) of the stellated duals * with configuration (....)/2. Finally, the self-intersection of the crossed * parallelogram is used for duals with form p q r| with an even denominator. * * This method do not work for the hemi-duals, whose faces are not * star-shaped and have two self-intersections each. * * Thus, for each face we need six auxiliary vertices: The self intersections * and the terminal points of the truncations of the infinite edges. The * ideal vertices are listed, but are not used by the face-list. * * Note that the face of the last dual (#80) is octagonal, and constists of * two quadrilaterals of the infinite type. */ if (*star && P->even != -1) Malloc(hit, F, int); for (i = 0; i < F; i++) if ((!*star && (frac(P->n[P->ftype[i]]), frax.d != 1 && frax.d != frax.n - 1)) || (*star && P->K == 5 && (P->D > 30 || denominator (P->m[0]) != 1))) { /* find the center of the face */ double h; if (!*star && P->hemi && !P->ftype[i]) h = 0; else h = P->minr / dot(f[i],f[i]); push_point(result, scale (h, f[i])); } else if (*star && P->even != -1) { /* find the self-intersection of a crossed parallelogram. * hit is set if v0v1 intersects v2v3*/ Vector v0, v1, v2, v3, c0, c1, p; double d0, d1; v0 = v[P->incid[0][i]]; v1 = v[P->incid[1][i]]; v2 = v[P->incid[2][i]]; v3 = v[P->incid[3][i]]; d0 = sqrt(dot(diff(v0, v2), diff(v0, v2))); d1 = sqrt(dot (diff(v1, v3), diff(v1, v3))); c0 = scale(d1, sum(v0, v2)); c1 = scale(d0, sum(v1, v3)); p = scale(0.5 / (d0 + d1), sum(c0, c1)); push_point (result, p); p = cross(diff(p, v2), diff(p, v3)); hit[i] = (dot(p, p) < 1e-6); } else if (*star && P->hemi && P->index != last_uniform - 1) { /* find the terminal points of the truncation and the * self-intersections. * v23 v0 v21 * | \ / \ / | * | v0123 v0321 | * | / \ / \ | * v01 v2 v03 */ Vector v0, v1, v2, v3, v01, v03, v21, v23, v0123, v0321 ; Vector u; double t = 1.5;/* truncation adjustment factor */ j = !P->ftype[P->incid[0][i]]; v0 = v[P->incid[j][i]];/* real vertex */ v1 = v[P->incid[j+1][i]];/* ideal vertex (unit vector) */ v2 = v[P->incid[j+2][i]];/* real */ v3 = v[P->incid[(j+3)%4][i]];/* ideal */ /* compute intersections * this uses the following linear algebra: * v0123 = v0 + a v1 = v2 + b v3 * v0 x v3 + a (v1 x v3) = v2 x v3 * a (v1 x v3) = (v2 - v0) x v3 * a (v1 x v3) . (v1 x v3) = (v2 - v0) x v3 . (v1 x v3) */ u = cross(v1, v3); v0123 = sum(v0, scale(dot(cross(diff(v2, v0), v3), u) / dot(u,u), v1)); v0321 = sum(v0, scale(dot(cross(diff(v0, v2), v1), u) / dot(u,u), v3)); /* compute truncations */ v01 = sum(v0 , scale(t, diff(v0123, v0))); v23 = sum(v2 , scale(t, diff(v0123, v2))); v03 = sum(v0 , scale(t, diff(v0321, v0))); v21 = sum(v2 , scale(t, diff(v0321, v2))); push_point(result, v01); push_point(result, v23); push_point(result, v0123); push_point(result, v03); push_point(result, v21); push_point(result, v0321); } else if (*star && P->index == last_uniform - 1) { /* find the terminal points of the truncation and the * self-intersections. * v23 v0 v21 * | \ / \ / | * | v0123 v0721 | * | / \ / \ | * v01 v2 v07 * * v65 v4 v67 * | \ / \ / | * | v4365 v4567 | * | / \ / \ | * v43 v6 v45 */ Vector v0, v1, v2, v3, v4, v5, v6, v7, v01, v07, v21, v23; Vector v43, v45, v65, v67, v0123, v0721, v4365, v4567; double t = 1.5;/* truncation adjustment factor */ Vector u; for (j = 0; j < 8; j++) if (P->ftype[P->incid[j][i]] == 3) break; v0 = v[P->incid[j][i]];/* real {5/3} */ v1 = v[P->incid[(j+1)%8][i]];/* ideal */ v2 = v[P->incid[(j+2)%8][i]];/* real {3} */ v3 = v[P->incid[(j+3)%8][i]];/* ideal */ v4 = v[P->incid[(j+4)%8][i]];/* real {5/2} */ v5 = v[P->incid[(j+5)%8][i]];/* ideal */ v6 = v[P->incid[(j+6)%8][i]];/* real {3/2} */ v7 = v[P->incid[(j+7)%8][i]];/* ideal */ /* compute intersections */ u = cross(v1, v3); v0123 = sum(v0, scale(dot(cross(diff(v2, v0), v3), u) / dot(u,u), v1)); u = cross(v7, v1); v0721 = sum(v0, scale(dot(cross(diff(v2, v0), v1), u) / dot(u,u), v7)); u = cross(v5, v7); v4567 = sum(v4, scale(dot(cross(diff(v6, v4), v7), u) / dot(u,u), v5)); u = cross(v3, v5); v4365 = sum(v4, scale(dot(cross(diff(v6, v4), v5), u) / dot(u,u), v3)); /* compute truncations */ v01 = sum(v0 , scale(t, diff(v0123, v0))); v23 = sum(v2 , scale(t, diff(v0123, v2))); v07 = sum(v0 , scale(t, diff(v0721, v0))); v21 = sum(v2 , scale(t, diff(v0721, v2))); v45 = sum(v4 , scale(t, diff(v4567, v4))); v67 = sum(v6 , scale(t, diff(v4567, v6))); v43 = sum(v4 , scale(t, diff(v4365, v4))); v65 = sum(v6 , scale(t, diff(v4365, v6))); push_point(result, v01); push_point(result, v23); push_point(result, v0123); push_point(result, v07); push_point(result, v21); push_point(result, v0721); push_point(result, v45); push_point(result, v67); push_point(result, v4567); push_point(result, v43); push_point(result, v65); push_point(result, v4365); } /* * Face list: * Each face is printed in a separate line, by listing the indices of its * vertices. In the non-simple case, the polygon is represented by the * triangulation, each triangle consists of two polyhedron vertices and one * auxiliary vertex. */ Malloc (result->faces, F * 10, face); result->nfaces = 0; ii = V; facelets = 0; for (i = 0; i < F; i++) { if (*star) { if (P->K == 5 && (P->D > 30 || denominator (P->m[0]) != 1)) { for (j = 0; j < P->M - 1; j++) { push_face3 (result, P->incid[j][i], P->incid[j+1][i], ii); facelets++; } push_face3 (result, P->incid[j][i], P->incid[0][i], ii++); facelets++; } else if (P->even != -1) { if (hit && hit[i]) { push_face3 (result, P->incid[3][i], P->incid[0][i], ii); push_face3 (result, P->incid[1][i], P->incid[2][i], ii); } else { push_face3 (result, P->incid[0][i], P->incid[1][i], ii); push_face3 (result, P->incid[2][i], P->incid[3][i], ii); } ii++; facelets += 2; } else if (P->hemi && P->index != last_uniform - 1) { j = !P->ftype[P->incid[0][i]]; push_face3 (result, ii, ii + 1, ii + 2); push_face4 (result, P->incid[j][i], ii + 2, P->incid[j+2][i], ii + 5); push_face3 (result, ii + 3, ii + 4, ii + 5); ii += 6; facelets += 3; } else if (P->index == last_uniform - 1) { for (j = 0; j < 8; j++) if (P->ftype[P->incid[j][i]] == 3) break; push_face3 (result, ii, ii + 1, ii + 2); push_face4 (result, P->incid[j][i], ii + 2, P->incid[(j+2)%8][i], ii + 5); push_face3 (result, ii + 3, ii + 4, ii + 5); push_face3 (result, ii + 6, ii + 7, ii + 8); push_face4 (result, P->incid[(j+4)%8][i], ii + 8, P->incid[(j+6)%8][i], ii + 11); push_face3 (result, ii + 9, ii + 10, ii + 11); ii += 12; facelets += 6; } else { result->faces[result->nfaces].npoints = P->M; Malloc (result->faces[result->nfaces].points, P->M, int); for (j = 0; j < P->M; j++) result->faces[result->nfaces].points[j] = P->incid[j][i]; result->nfaces++; facelets++; } } else { int split = (frac(P->n[P->ftype[i]]), frax.d != 1 && frax.d != frax.n - 1); for (j = 0; j < V; j++) { for (k = 0; k < P->M; k++) if (P->incid[k][j] == i) break; if (k != P->M) break; } if (split) { ll = j; for (l = P->adj[k][j]; l != j; l = P->adj[k][l]) { for (k = 0; k < P->M; k++) if (P->incid[k][l] == i) break; if (P->adj[k][l] == ll) k = mod(k + 1 , P->M); push_face3 (result, ll, l, ii); facelets++; ll = l; } push_face3 (result, ll, j, ii++); facelets++; } else { int *pp; int pi = 0; Malloc (pp, 100, int); pp[pi++] = j; ll = j; for (l = P->adj[k][j]; l != j; l = P->adj[k][l]) { for (k = 0; k < P->M; k++) if (P->incid[k][l] == i) break; if (P->adj[k][l] == ll) k = mod(k + 1 , P->M); pp[pi++] = l; ll = l; } result->faces[result->nfaces].npoints = pi; result->faces[result->nfaces].points = pp; result->nfaces++; facelets++; } } } /* * Face color indices - for polyhedra with multiple face types * For non-simple faces, the index is repeated as many times as needed by the * triangulation. */ { int ff = 0; if (!*star && P->N != 1) { for (i = 0; i < F; i++) if (frac(P->n[P->ftype[i]]), frax.d == 1 || frax.d == frax.n - 1) result->faces[ff++].color = P->ftype[i]; else for (j = 0; j < frax.n; j++) result->faces[ff++].color = P->ftype[i]; } else { for (i = 0; i < facelets; i++) result->faces[ff++].color = 0; } } if (*star && P->even != -1) free(hit); free(v); free(f); return result; } /* External interface (jwz) */ void free_polyhedron (polyhedron *p) { if (!p) return; Free (p->wythoff); Free (p->name); Free (p->group); Free (p->class); if (p->faces) { int i; for (i = 0; i < p->nfaces; i++) Free (p->faces[i].points); Free (p->faces); } Free (p); } int construct_polyhedra (polyhedron ***polyhedra_ret) { double freeze = 0; double azimuth = AZ; double elevation = EL; int index = 0; int count = 0; polyhedron **result; Malloc (result, last_uniform * 2 + 3, polyhedron*); while (index < last_uniform) { char sym[4]; Polyhedron *P; sprintf(sym, "#%d", index + 1); if (!(P = kaleido(sym, 1, 0, 0, 0))) { Err (strerror(errno)); } result[count++] = construct_polyhedron (P, P->v, P->V, P->f, P->F, P->name, P->dual_name, P->class, "", azimuth, elevation, freeze); result[count++] = construct_polyhedron (P, P->f, P->F, P->v, P->V, P->dual_name, P->name, P->dual_class, "*", azimuth, elevation, freeze); polyfree(P); index++; } *polyhedra_ret = result; count++; /* leave room for teapot */ return count; } xscreensaver-5.36/hacks/glx/polyhedra-gl.c000644 000767 000024 00000044404 12717745213 020573 0ustar00jwzstaff000000 000000 /* polyhedra, Copyright (c) 2004-2014 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. * * Renders 160 different 3D solids, and displays some information about each. * A new solid is chosen every few seconds. * * This file contains the OpenGL side; computation of the polyhedra themselves * is in "polyhedra.c". */ #define DEFAULTS "*delay: 30000 \n" \ "*showFPS: False \n" \ "*wireframe: False \n" \ "*titleFont: -*-helvetica-medium-r-normal-*-*-140-*-*-*-*-*-*\n" \ "*titleFont2: -*-helvetica-medium-r-normal-*-*-100-*-*-*-*-*-*\n" \ "*titleFont3: -*-helvetica-medium-r-normal-*-*-80-*-*-*-*-*-*\n" \ "*suppressRotationAnimation: True\n" \ # define refresh_polyhedra 0 # define release_polyhedra 0 #undef countof #define countof(x) (sizeof((x))/sizeof((*x))) #include "xlockmore.h" #ifdef HAVE_JWXYZ # include "jwxyz.h" #else # include # include # include #endif #ifdef HAVE_JWZGLES # include "jwzgles.h" #endif /* HAVE_JWZGLES */ #define DEF_SPIN "True" #define DEF_WANDER "True" #define DEF_SPEED "1.0" #define DEF_TITLES "True" #define DEF_DURATION "12" #define DEF_WHICH "random" #include "texfont.h" #include "normals.h" #include "polyhedra.h" #include "colors.h" #include "rotator.h" #include "gltrackball.h" #include "teapot.h" #ifndef HAVE_JWXYZ # define XK_MISCELLANY # include #endif #ifndef HAVE_JWZGLES # define HAVE_TESS #endif #ifdef USE_GL /* whole file */ typedef struct { GLXContext *glx_context; rotator *rot; trackball_state *trackball; Bool button_down_p; int npolyhedra; polyhedron **polyhedra; int which; int change_to; GLuint object_list; int mode; /* 0 = normal, 1 = out, 2 = in */ int mode_tick; int ncolors; XColor *colors; texture_font_data *font1_data, *font2_data, *font3_data; time_t last_change_time; int change_tick; } polyhedra_configuration; static polyhedra_configuration *bps = NULL; static Bool do_spin; static GLfloat speed; static Bool do_wander; static Bool do_titles; static int duration; static int do_which; static char *do_which_str; static XrmOptionDescRec opts[] = { { "-spin", ".spin", XrmoptionNoArg, "True" }, { "+spin", ".spin", XrmoptionNoArg, "False" }, { "-speed", ".speed", XrmoptionSepArg, 0 }, { "-wander", ".wander", XrmoptionNoArg, "True" }, { "+wander", ".wander", XrmoptionNoArg, "False" }, { "-titles", ".titles", XrmoptionNoArg, "True" }, { "+titles", ".titles", XrmoptionNoArg, "False" }, { "-duration",".duration",XrmoptionSepArg, 0 }, { "-which", ".which", XrmoptionSepArg, 0 }, }; static argtype vars[] = { {&do_spin, "spin", "Spin", DEF_SPIN, t_Bool}, {&do_wander, "wander", "Wander", DEF_WANDER, t_Bool}, {&do_titles, "titles", "Titles", DEF_TITLES, t_Bool}, {&speed, "speed", "Speed", DEF_SPEED, t_Float}, {&duration,"duration","Duration",DEF_DURATION,t_Int}, {&do_which_str,"which", "Which", DEF_WHICH, t_String}, }; ENTRYPOINT ModeSpecOpt polyhedra_opts = {countof(opts), opts, countof(vars), vars, NULL}; /* Calculate the normals at each vertex of a face, and use the sum to decide which normal to assign to the entire face. This also solves problems caused by nonconvex faces, in most (but not all) cases. */ static void kludge_normal (int n, const int *indices, const point *points) { XYZ normal = { 0, 0, 0 }; XYZ p = { 0, 0, 0 }; int i; for (i = 0; i < n; ++i) { int i1 = indices[i]; int i2 = indices[(i + 1) % n]; int i3 = indices[(i + 2) % n]; XYZ p1, p2, p3; p1.x = points[i1].x; p1.y = points[i1].y; p1.z = points[i1].z; p2.x = points[i2].x; p2.y = points[i2].y; p2.z = points[i2].z; p3.x = points[i3].x; p3.y = points[i3].y; p3.z = points[i3].z; p = calc_normal (p1, p2, p3); normal.x += p.x; normal.y += p.y; normal.z += p.z; } /*normalize(&normal);*/ if (normal.x == 0 && normal.y == 0 && normal.z == 0) { glNormal3f (p.x, p.y, p.z); } else { glNormal3f (normal.x, normal.y, normal.z); } } static void load_fonts (ModeInfo *mi) { polyhedra_configuration *bp = &bps[MI_SCREEN(mi)]; bp->font1_data = load_texture_font (mi->dpy, "titleFont"); bp->font2_data = load_texture_font (mi->dpy, "titleFont2"); bp->font3_data = load_texture_font (mi->dpy, "titleFont3"); } static void startup_blurb (ModeInfo *mi) { polyhedra_configuration *bp = &bps[MI_SCREEN(mi)]; const char *s = "Computing polyhedra..."; texture_font_data *f = bp->font1_data; glColor3f (0.8, 0.8, 0); print_texture_label (mi->dpy, f, mi->xgwa.width, mi->xgwa.height, 0, s); glFinish(); glXSwapBuffers(MI_DISPLAY(mi), MI_WINDOW(mi)); } /* Window management, etc */ ENTRYPOINT void reshape_polyhedra (ModeInfo *mi, int width, int height) { GLfloat h = (GLfloat) height / (GLfloat) width; glViewport (0, 0, (GLint) width, (GLint) height); glMatrixMode(GL_PROJECTION); glLoadIdentity(); gluPerspective (30.0, 1/h, 1.0, 100.0); glMatrixMode(GL_MODELVIEW); glLoadIdentity(); gluLookAt( 0.0, 0.0, 30.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0); glClear(GL_COLOR_BUFFER_BIT); } ENTRYPOINT Bool polyhedra_handle_event (ModeInfo *mi, XEvent *event) { polyhedra_configuration *bp = &bps[MI_SCREEN(mi)]; if (gltrackball_event_handler (event, bp->trackball, MI_WIDTH (mi), MI_HEIGHT (mi), &bp->button_down_p)) return True; else if (event->xany.type == KeyPress) { KeySym keysym; char c = 0; XLookupString (&event->xkey, &c, 1, &keysym, 0); bp->change_to = -1; if (c == ' ' || c == '\t' || c == '\r' || c == '\n') bp->change_to = random() % bp->npolyhedra; else if (c == '>' || c == '.' || c == '+' || c == '=' || keysym == XK_Right || keysym == XK_Up || keysym == XK_Next) bp->change_to = (bp->which + 1) % bp->npolyhedra; else if (c == '<' || c == ',' || c == '-' || c == '_' || c == '\010' || c == '\177' || keysym == XK_Left || keysym == XK_Down || keysym == XK_Prior) bp->change_to = (bp->which + bp->npolyhedra - 1) % bp->npolyhedra; else if (screenhack_event_helper (MI_DISPLAY(mi), MI_WINDOW(mi), event)) goto DEF; if (bp->change_to != -1) return True; } else if (screenhack_event_helper (MI_DISPLAY(mi), MI_WINDOW(mi), event)) { DEF: bp->change_to = random() % bp->npolyhedra; return True; } return False; } static void draw_label (ModeInfo *mi) { polyhedra_configuration *bp = &bps[MI_SCREEN(mi)]; polyhedron *p = bp->which >= 0 ? bp->polyhedra[bp->which] : 0; char label[1024]; char name2[255]; GLfloat color[4] = { 0.8, 0.8, 0.8, 1 }; texture_font_data *f; if (!p || !do_titles) return; strcpy (name2, p->name); if (*p->class) sprintf (name2 + strlen(name2), " (%s)", p->class); sprintf (label, "Polyhedron %d: \t%s\n\n" "Wythoff Symbol:\t%s\n" "Vertex Configuration:\t%s\n" "Symmetry Group:\t%s\n" /* "Dual of: \t%s\n" */ "\n" "Faces:\t %d\n" "Edges:\t %d\n" "Vertices:\t %d\n" "Density:\t %d\n" "Euler:\t%s%d\n", bp->which, name2, p->wythoff, p->config, p->group, /* p->dual, */ p->logical_faces, p->nedges, p->logical_vertices, p->density, (p->chi < 0 ? "" : " "), p->chi); if (MI_WIDTH(mi) >= 500 && MI_HEIGHT(mi) >= 375) f = bp->font1_data; else if (MI_WIDTH(mi) >= 350 && MI_HEIGHT(mi) >= 260) f = bp->font2_data; /* small font */ else f = bp->font3_data; /* tiny font */ glColor4fv (color); glMaterialfv (GL_FRONT_AND_BACK, GL_AMBIENT_AND_DIFFUSE, color); print_texture_label (mi->dpy, f, mi->xgwa.width, mi->xgwa.height, 1, label); } #ifdef HAVE_TESS static void tess_error (GLenum errorCode) { fprintf (stderr, "%s: tesselation error: %s\n", progname, gluErrorString(errorCode)); abort(); } #endif /* HAVE_TESS */ static void new_polyhedron (ModeInfo *mi) { polyhedra_configuration *bp = &bps[MI_SCREEN(mi)]; polyhedron *p; int wire = MI_IS_WIREFRAME(mi); int i; /* 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; bp->ncolors = 128; bp->colors = (XColor *) calloc(bp->ncolors, sizeof(XColor)); make_random_colormap (0, 0, 0, bp->colors, &bp->ncolors, True, False, 0, False); if (do_which >= bp->npolyhedra) do_which = -1; bp->which = (bp->change_to != -1 ? bp->change_to : do_which >= 0 ? do_which : (random() % bp->npolyhedra)); bp->change_to = -1; p = bp->polyhedra[bp->which]; if (wire) glPolygonMode(GL_FRONT_AND_BACK, GL_LINE); 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 * 3 / 2; p->npoints = p->nfaces * 3; p->logical_faces = p->nfaces; p->logical_vertices = p->npoints; } else { glFrontFace (GL_CCW); for (i = 0; i < p->nfaces; i++) { int j; face *f = &p->faces[i]; if (f->color > 64 || f->color < 0) abort(); if (wire) glColor3f (0, 1, 0); else { GLfloat bcolor[4]; 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[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++) { point *pp = &p->points[f->points[j]]; gluTessVertex (tobj, &pp->x, &pp->x); } 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 } static void construct_teapot (ModeInfo *mi) { polyhedra_configuration *bp = &bps[MI_SCREEN(mi)]; int n = bp->npolyhedra-1; polyhedron *p = (polyhedron *) calloc (1, sizeof(*p)); p->number = n; p->wythoff = strdup("X00398|1984"); p->name = strdup("Teapot"); p->dual = strdup(""); p->config = strdup("Melitta"); p->group = strdup("Teapotahedral (Newell[1975])"); p->class = strdup("Utah Teapotahedron"); bp->polyhedra[n] = p; } ENTRYPOINT void init_polyhedra (ModeInfo *mi) { polyhedra_configuration *bp; int wire = MI_IS_WIREFRAME(mi); # ifdef HAVE_JWZGLES /* #### glPolygonMode other than GL_FILL unimplemented */ MI_IS_WIREFRAME(mi) = 0; wire = 0; # endif if (!bps) { bps = (polyhedra_configuration *) calloc (MI_NUM_SCREENS(mi), sizeof (polyhedra_configuration)); if (!bps) { fprintf(stderr, "%s: out of memory\n", progname); exit(1); } } bp = &bps[MI_SCREEN(mi)]; bp->glx_context = init_GL(mi); bp->which = -1; load_fonts (mi); startup_blurb (mi); if (!wire) { GLfloat pos[4] = {1.0, 1.0, 1.0, 0.0}; GLfloat amb[4] = {0.0, 0.0, 0.0, 1.0}; GLfloat dif[4] = {1.0, 1.0, 1.0, 1.0}; GLfloat spc[4] = {0.0, 1.0, 1.0, 1.0}; glEnable(GL_LIGHTING); glEnable(GL_LIGHT0); glEnable(GL_DEPTH_TEST); /* glEnable(GL_CULL_FACE); */ /* We need two-sided lighting for polyhedra where both sides of a face are simultaneously visible (e.g., the "X-hemi-Y-hedrons".) */ glLightModeli(GL_LIGHT_MODEL_TWO_SIDE, GL_TRUE); glLightfv(GL_LIGHT0, GL_POSITION, pos); glLightfv(GL_LIGHT0, GL_AMBIENT, amb); glLightfv(GL_LIGHT0, GL_DIFFUSE, dif); glLightfv(GL_LIGHT0, GL_SPECULAR, spc); } { double spin_speed = 2.0; double wander_speed = 0.05; double spin_accel = 0.2; bp->rot = make_rotator (do_spin ? spin_speed : 0, do_spin ? spin_speed : 0, do_spin ? spin_speed : 0, spin_accel, do_wander ? wander_speed : 0, True); bp->trackball = gltrackball_init (True); } bp->npolyhedra = construct_polyhedra (&bp->polyhedra); construct_teapot (mi); bp->object_list = glGenLists (1); bp->change_to = -1; { int x; char c; do_which = -1; if (!strcasecmp (do_which_str, "random")) ; else if (1 == sscanf (do_which_str, " %d %c", &x, &c)) { if (x >= 0 && x < bp->npolyhedra) do_which = x; else fprintf (stderr, "%s: polyhedron %d does not exist: there are only %d.\n", progname, x, bp->npolyhedra-1); } else if (*do_which_str) { char *s; for (s = do_which_str; *s; s++) if (*s == '-' || *s == '_') *s = ' '; for (x = 0; x < bp->npolyhedra; x++) if (!strcasecmp (do_which_str, bp->polyhedra[x]->name) || !strcasecmp (do_which_str, bp->polyhedra[x]->class) || !strcasecmp (do_which_str, bp->polyhedra[x]->wythoff) || !strcasecmp (do_which_str, bp->polyhedra[x]->config)) { do_which = x; break; } if (do_which < 0) { fprintf (stderr, "%s: no such polyhedron: \"%s\"\n", progname, do_which_str); exit (1); } } } new_polyhedron (mi); reshape_polyhedra (mi, MI_WIDTH(mi), MI_HEIGHT(mi)); clear_gl_error(); /* WTF? sometimes "invalid op" from glViewport! */ } ENTRYPOINT void draw_polyhedra (ModeInfo *mi) { polyhedra_configuration *bp = &bps[MI_SCREEN(mi)]; Display *dpy = MI_DISPLAY(mi); Window window = MI_WINDOW(mi); static const GLfloat bspec[4] = {1.0, 1.0, 1.0, 1.0}; GLfloat bshiny = 128.0; if (!bp->glx_context) return; glXMakeCurrent(MI_DISPLAY(mi), MI_WINDOW(mi), *(bp->glx_context)); if (bp->mode == 0 && do_which >= 0 && bp->change_to < 0) ; else if (bp->mode == 0) { if (bp->change_to >= 0) bp->change_tick = 999, bp->last_change_time = 1; if (bp->change_tick++ > 10) { time_t now = time((time_t *) 0); if (bp->last_change_time == 0) bp->last_change_time = now; bp->change_tick = 0; if (!bp->button_down_p && now - bp->last_change_time >= duration) { bp->mode = 1; /* go out */ bp->mode_tick = 20 / speed; bp->last_change_time = now; } } } else if (bp->mode == 1) /* out */ { if (--bp->mode_tick <= 0) { new_polyhedron (mi); bp->mode_tick = 20 / speed; bp->mode = 2; /* go in */ } } else if (bp->mode == 2) /* in */ { if (--bp->mode_tick <= 0) bp->mode = 0; /* normal */ } else abort(); glShadeModel(GL_FLAT); glEnable(GL_NORMALIZE); glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glPushMatrix (); # ifdef HAVE_MOBILE /* Keep it the same relative size when rotated. */ { GLfloat h = MI_HEIGHT(mi) / (GLfloat) MI_WIDTH(mi); int o = (int) current_device_rotation(); if (o != 0 && o != 180 && o != -180) glScalef (1/h, 1/h, 1/h); } # endif glScalef(1.1, 1.1, 1.1); { double x, y, z; get_position (bp->rot, &x, &y, &z, !bp->button_down_p); glTranslatef((x - 0.5) * 8, (y - 0.5) * 8, (z - 0.5) * 15); gltrackball_rotate (bp->trackball); get_rotation (bp->rot, &x, &y, &z, !bp->button_down_p); glRotatef (x * 360, 1.0, 0.0, 0.0); glRotatef (y * 360, 0.0, 1.0, 0.0); glRotatef (z * 360, 0.0, 0.0, 1.0); } glScalef (2.0, 2.0, 2.0); glMaterialfv (GL_FRONT_AND_BACK, GL_SPECULAR, bspec); glMateriali (GL_FRONT_AND_BACK, GL_SHININESS, bshiny); if (bp->mode != 0) { GLfloat s = (bp->mode == 1 ? bp->mode_tick / (20 / speed) : ((20 / speed) - bp->mode_tick + 1) / (20 / speed)); glScalef (s, s, s); } glScalef (2, 2, 2); glCallList (bp->object_list); if (bp->mode == 0 && !bp->button_down_p) draw_label (mi); /* print_texture_font can't go inside a display list */ glPopMatrix (); if (mi->fps_p) do_fps (mi); glFinish(); glXSwapBuffers(dpy, window); } XSCREENSAVER_MODULE ("Polyhedra", polyhedra) #endif /* USE_GL */ xscreensaver-5.36/hacks/glx/antinspect.c000644 000767 000024 00000044172 12710313133 020337 0ustar00jwzstaff000000 000000 /* * Permission to use, copy, modify, and distribute this software and its * documentation for any purpose and without fee is hereby granted, * provided that the above copyright notice appear in all copies and that * both that copyright notice and this permission notice appear in * supporting documentation. * * This file is provided AS IS with no warranties of any kind. The author * shall have no liability with respect to the infringement of copyrights, * trade secrets or any patents by this file or any part thereof. In no * event will the author be liable for any lost revenue or profits or * other special, indirect and consequential damages. * * Copyright 2004 Blair Tennessy * tennessy@cs.ubc.ca */ #ifdef STANDALONE #define DEFAULTS "*delay: 20000 \n" \ "*showFPS: False \n" # define refresh_antinspect 0 #include "xlockmore.h" #else #include "xlock.h" #endif #ifdef HAVE_JWXYZ # include "jwxyz.h" #else # include # include # include #endif #ifdef HAVE_JWZGLES # include "jwzgles.h" #endif /* HAVE_JWZGLES */ #include "sphere.h" #include "gltrackball.h" #define DEF_SHADOWS "True" static int shadows; static XrmOptionDescRec opts[] = { {"-shadows", ".antinspect.shadows", XrmoptionNoArg, "on"}, {"+shadows", ".antinspect.shadows", XrmoptionNoArg, "off"} }; static argtype vars[] = { {&shadows, "shadows", "Shadows", DEF_SHADOWS, t_Bool} }; static OptionStruct desc[] = { {"-/+shadows", "turn on/off ant shadows"} }; ENTRYPOINT ModeSpecOpt antinspect_opts = {sizeof opts / sizeof opts[0], opts, sizeof vars / sizeof vars[0], vars, desc}; #ifdef USE_MODULES ModStruct antinspect_description = {"antinspect", "init_antinspect", "draw_antinspect", "release_antinspect", "draw_antinspect", "change_antinspect", (char *) NULL, &antinspect_opts, 1000, 1, 1, 1, 4, 1.0, "", "draws some ants", 0, NULL}; #endif #define Scale4Window 0.3 #define Scale4Iconic 0.4 #define sqr(A) ((A)*(A)) #ifndef Pi #define Pi M_PI #endif #define ObjAntinspectStrip 0 #define ObjAntBody 1 #define MaxObj 2 /*************************************************************************/ typedef struct { GLint WindH, WindW; GLfloat step; GLfloat ant_position; GLXContext *glx_context; trackball_state *trackball; Bool button_down_p; int linewidth; float ant_step; } antinspectstruct; static const float front_shininess[] = {60.0}; static const float front_specular[] = {0.7, 0.7, 0.7, 1.0}; static const float ambient[] = {0.0, 0.0, 0.0, 1.0}; static const float diffuse[] = {1.0, 1.0, 1.0, 1.0}; static float position0[] = {0.0, 3.0, 0.0, 1.0}; static const float position1[] = {-1.0, -3.0, 1.0, 0.0}; static const float lmodel_ambient[] = {0.5, 0.5, 0.5, 1.0}; static const float lmodel_twoside[] = {GL_TRUE}; static const float MaterialRed[] = {0.6, 0.0, 0.0, 1.0}; static const float MaterialOrange[] = {1.0, 0.69, 0.00, 1.0}; static const float MaterialGray[] = {0.2, 0.2, 0.2, 1.0}; static const float MaterialBlack[] = {0.1, 0.1, 0.1, 0.4}; static const float MaterialShadow[] = {0.3, 0.3, 0.3, 0.3}; static const float MaterialGray5[] = {0.5, 0.5, 0.5, 0.3}; static const float MaterialGray6[] = {0.6, 0.6, 0.6, 1.0}; static antinspectstruct *antinspect = (antinspectstruct *) NULL; #define NUM_SCENES 2 enum {X, Y, Z, W}; enum {A, B, C, D}; /* create a matrix that will project the desired shadow */ static void shadowmatrix(GLfloat shadowMat[4][4], const GLfloat groundplane[4], const GLfloat lightpos[4]) { GLfloat dot; /* find dot product between light position vector and ground plane normal */ dot = groundplane[X] * lightpos[X] + groundplane[Y] * lightpos[Y] + groundplane[Z] * lightpos[Z] + groundplane[W] * lightpos[W]; shadowMat[0][0] = dot - lightpos[X] * groundplane[X]; shadowMat[1][0] = 0.f - lightpos[X] * groundplane[Y]; shadowMat[2][0] = 0.f - lightpos[X] * groundplane[Z]; shadowMat[3][0] = 0.f - lightpos[X] * groundplane[W]; shadowMat[X][1] = 0.f - lightpos[Y] * groundplane[X]; shadowMat[1][1] = dot - lightpos[Y] * groundplane[Y]; shadowMat[2][1] = 0.f - lightpos[Y] * groundplane[Z]; shadowMat[3][1] = 0.f - lightpos[Y] * groundplane[W]; shadowMat[X][2] = 0.f - lightpos[Z] * groundplane[X]; shadowMat[1][2] = 0.f - lightpos[Z] * groundplane[Y]; shadowMat[2][2] = dot - lightpos[Z] * groundplane[Z]; shadowMat[3][2] = 0.f - lightpos[Z] * groundplane[W]; shadowMat[X][3] = 0.f - lightpos[W] * groundplane[X]; shadowMat[1][3] = 0.f - lightpos[W] * groundplane[Y]; shadowMat[2][3] = 0.f - lightpos[W] * groundplane[Z]; shadowMat[3][3] = dot - lightpos[W] * groundplane[W]; } static const GLfloat ground[4] = {0.0, 1.0, 0.0, -0.00001}; /* simple filled sphere */ static Bool mySphere(float radius) { #if 0 GLUquadricObj *quadObj; if((quadObj = gluNewQuadric()) == 0) return False; gluQuadricDrawStyle(quadObj, (GLenum) GLU_FILL); gluSphere(quadObj, radius, 16, 16); gluDeleteQuadric(quadObj); #else glPushMatrix(); glScalef (radius, radius, radius); glRotatef (90, 1, 0, 0); unit_sphere (16, 16, False); glPopMatrix(); #endif return True; } /* caged sphere */ static Bool mySphere2(float radius) { #if 0 GLUquadricObj *quadObj; if((quadObj = gluNewQuadric()) == 0) return False; gluQuadricDrawStyle(quadObj, (GLenum) GLU_LINE);/*GLU_SILHOUETTE);*/ gluSphere(quadObj, radius, 16, 8); gluDeleteQuadric(quadObj); #else glPushMatrix(); glScalef (radius, radius, radius); glRotatef (90, 1, 0, 0); unit_sphere (16, 8, True); glPopMatrix(); #endif return True; } /* null cone */ static Bool myCone2(float radius) { return True; } /* draw an ant */ static Bool draw_antinspect_ant(ModeInfo *mi, antinspectstruct * mp, const float *Material, int mono, Bool (*sphere)(float), Bool (*cone)(float)) { float cos1 = cos(mp->ant_step); float cos2 = cos(mp->ant_step + 2 * Pi / 3); float cos3 = cos(mp->ant_step + 4 * Pi / 3); float sin1 = sin(mp->ant_step); float sin2 = sin(mp->ant_step + 2 * Pi / 3); float sin3 = sin(mp->ant_step + 4 * Pi / 3); if (mono) glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, MaterialGray5); else glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, Material); glEnable(GL_CULL_FACE); glPushMatrix(); glScalef(1, 1.3, 1); if (!((*sphere)(0.18))) return False; glScalef(1, 1 / 1.3, 1); glTranslatef(0.00, 0.30, 0.00); if (!((*sphere)(0.2))) return False; glTranslatef(-0.05, 0.17, 0.05); glRotatef(-90, 1, 0, 0); glRotatef(-25, 0, 1, 0); if (!((*cone)(0.05))) return False; glTranslatef(0.00, 0.10, 0.00); if (!((*cone)(0.05))) return False; glRotatef(25, 0, 1, 0); glRotatef(90, 1, 0, 0); glScalef(1, 1.3, 1); glTranslatef(0.15, -0.65, 0.05); if (!((*sphere)(0.25))) return False; glScalef(1, 1 / 1.3, 1); glPopMatrix(); glDisable(GL_CULL_FACE); glDisable(GL_LIGHTING); /* ANTENNAS */ glBegin(GL_LINES); if (mono) glColor3fv(MaterialGray5); else glColor3fv(Material); glVertex3f(0.00, 0.30, 0.00); glColor3fv(MaterialGray); glVertex3f(0.40, 0.70, 0.40); mi->polygon_count++; if (mono) glColor3fv(MaterialGray5); else glColor3fv(Material); glVertex3f(0.00, 0.30, 0.00); glColor3fv(MaterialGray); glVertex3f(0.40, 0.70, -0.40); mi->polygon_count++; glEnd(); glBegin(GL_POINTS); if (mono) glColor3fv(MaterialGray6); else glColor3fv(Material); glVertex3f(0.40, 0.70, 0.40); mi->polygon_count++; glVertex3f(0.40, 0.70, -0.40); mi->polygon_count++; glEnd(); /* LEFT-FRONT ARM */ glBegin(GL_LINE_STRIP); if (mono) glColor3fv(MaterialGray5); else glColor3fv(Material); glVertex3f(0.00, 0.05, 0.18); glVertex3f(0.35 + 0.05 * cos1, 0.15, 0.25); mi->polygon_count++; glColor3fv(MaterialGray); glVertex3f(-0.20 + 0.05 * cos1, 0.25 + 0.1 * sin1, 0.45); mi->polygon_count++; glEnd(); /* LEFT-CENTER ARM */ glBegin(GL_LINE_STRIP); if (mono) glColor3fv(MaterialGray5); else glColor3fv(Material); glVertex3f(0.00, 0.00, 0.18); glVertex3f(0.35 + 0.05 * cos2, 0.00, 0.25); mi->polygon_count++; glColor3fv(MaterialGray); glVertex3f(-0.20 + 0.05 * cos2, 0.00 + 0.1 * sin2, 0.45); mi->polygon_count++; glEnd(); mi->polygon_count++; /* LEFT-BACK ARM */ glBegin(GL_LINE_STRIP); if (mono) glColor3fv(MaterialGray5); else glColor3fv(Material); glVertex3f(0.00, -0.05, 0.18); glVertex3f(0.35 + 0.05 * cos3, -0.15, 0.25); mi->polygon_count++; glColor3fv(MaterialGray); glVertex3f(-0.20 + 0.05 * cos3, -0.25 + 0.1 * sin3, 0.45); mi->polygon_count++; glEnd(); /* RIGHT-FRONT ARM */ glBegin(GL_LINE_STRIP); if (mono) glColor3fv(MaterialGray5); else glColor3fv(Material); glVertex3f(0.00, 0.05, -0.18); glVertex3f(0.35 - 0.05 * sin1, 0.15, -0.25); mi->polygon_count++; glColor3fv(MaterialGray); glVertex3f(-0.20 - 0.05 * sin1, 0.25 + 0.1 * cos1, -0.45); mi->polygon_count++; glEnd(); /* RIGHT-CENTER ARM */ glBegin(GL_LINE_STRIP); if (mono) glColor3fv(MaterialGray5); else glColor3fv(Material); glVertex3f(0.00, 0.00, -0.18); glVertex3f(0.35 - 0.05 * sin2, 0.00, -0.25); mi->polygon_count++; glColor3fv(MaterialGray); glVertex3f(-0.20 - 0.05 * sin2, 0.00 + 0.1 * cos2, -0.45); mi->polygon_count++; glEnd(); /* RIGHT-BACK ARM */ glBegin(GL_LINE_STRIP); if (mono) glColor3fv(MaterialGray5); else glColor3fv(Material); glVertex3f(0.00, -0.05, -0.18); glVertex3f(0.35 - 0.05 * sin3, -0.15, -0.25); mi->polygon_count++; glColor3fv(MaterialGray); glVertex3f(-0.20 - 0.05 * sin3, -0.25 + 0.1 * cos3, -0.45); mi->polygon_count++; glEnd(); glEnable(GL_LIGHTING); return True; } /* only works with 3 right now */ #define ANTCOUNT 3 static const float MaterialBen[4] = {0.25, 0.30, 0.46, 1.0}; static const float* antmaterial[ANTCOUNT] = {MaterialRed, MaterialBen, MaterialOrange}; static double antposition[ANTCOUNT] = {0.0, 120.0, 240.0}; static const double antvelocity[ANTCOUNT] = {0.3, 0.3, 0.3}; static const double antsphere[ANTCOUNT] = {1.2, 1.2, 1.2}; /* permutations */ static const double antorder[6][ANTCOUNT] = {{0, 1, 2}, {0, 2, 1}, {2, 0, 1}, {2, 1, 0}, {1, 2, 0}, {1, 0, 2}}; /* draw the scene */ static Bool draw_antinspect_strip(ModeInfo * mi) { antinspectstruct *mp = &antinspect[MI_SCREEN(mi)]; int i, j; int mono = MI_IS_MONO(mi); int ro = (((int)antposition[1])/(360/(2*ANTCOUNT))) % (2*ANTCOUNT); glEnable(GL_TEXTURE_2D); position0[1] = 9.6; glLightfv(GL_LIGHT0, GL_POSITION, position0); glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, MaterialGray5); glRotatef(-30.0, 0.0, 1.0, 0.0); glDisable(GL_TEXTURE_2D); glDisable(GL_BLEND); /* render ground plane */ glBegin(GL_TRIANGLES); glColor4fv(MaterialShadow); glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, MaterialBlack); glNormal3f(0.0, 1.0, 0.0); /* middle tri */ glVertex3f(0.0, 0.0, -1.0); glVertex3f(-sqrt(3.0)/2.0, 0.0, 0.5); glVertex3f(sqrt(3.0)/2.0, 0.0, 0.5); mi->polygon_count++; glEnd(); /* rotate */ for(i = 0; i < 3; ++i) { glRotatef(120.0, 0.0, 1.0, 0.0); glBegin(GL_TRIANGLES); glVertex3f(0.0, 0.0, 1.0 + 3.0); glVertex3f(sqrt(3.0)/2.0, 0.0, -0.5 + 3.0); glVertex3f(-sqrt(3.0)/2.0, 0.0, -0.5 + 3.0); mi->polygon_count++; glEnd(); } /* first render shadows -- no depth required */ if(shadows) { GLfloat m[4][4]; shadowmatrix(m, ground, position0); glColor4fv(MaterialShadow); glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, MaterialShadow); glDisable(GL_BLEND); glDisable(GL_LIGHTING); /* display ant shadow */ glPushMatrix(); glTranslatef(0.0, 0.001, 0.0); glMultMatrixf(m[0]); for(i = 0; i < ANTCOUNT; ++i) { /* draw ant */ glPushMatrix(); /* center */ glRotatef(antposition[i], 0.0, 1.0, 0.0); glTranslatef(2.4, 0.0, 0.0); glTranslatef(0.0, antsphere[i], 0.0); glRotatef(90.0, 0.0, 1.0, 0.0); /* orient ant */ glRotatef(10.0, 0.0, 1.0, 0.0); glRotatef(40.0, 0.0, 0.0, 1.0); glTranslatef(0.0, -0.8, 0.0); glRotatef(180.0, 0.0, 1.0, 0.0); glRotatef(90.0, 0.0, 0.0, 1.0); /* set colour */ glColor4fv(MaterialShadow); glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, MaterialShadow); if(antposition[i] > 360.0) antposition[i] = 0.0; draw_antinspect_ant(mi, mp, MaterialShadow, mono, mySphere2, myCone2); glDisable(GL_BLEND); glDisable(GL_LIGHTING); /* draw sphere */ glRotatef(-20.0, 1.0, 0.0, 0.0); glRotatef(-mp->ant_step*2, 0.0, 0.0, 1.0); glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, MaterialShadow); mySphere2(1.2); glPopMatrix(); } glPopMatrix(); } glEnable(GL_LIGHTING); /* truants */ for(j = 0; j < ANTCOUNT; ++j) { /* determine rendering order */ i = antorder[ro][j]; glPushMatrix(); /* center */ glRotatef(antposition[i], 0.0, 1.0, 0.0); glTranslatef(2.4, 0.0, 0.0); glTranslatef(0.0, antsphere[i], 0.0); glRotatef(90.0, 0.0, 1.0, 0.0); /* draw ant */ glPushMatrix(); glRotatef(10.0, 0.0, 1.0, 0.0); glRotatef(40.0, 0.0, 0.0, 1.0); glTranslatef(0.0, -0.8, 0.0); glRotatef(180.0, 0.0, 1.0, 0.0); glRotatef(90.0, 0.0, 0.0, 1.0); if(antposition[i] > 360.0) antposition[i] = 0.0; glEnable(GL_BLEND); draw_antinspect_ant(mi, mp, antmaterial[i], mono, mySphere2, myCone2); glDisable(GL_BLEND); glPopMatrix(); /* draw sphere */ glRotatef(-20.0, 1.0, 0.0, 0.0); glRotatef(-mp->ant_step*2, 0.0, 0.0, 1.0); glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, mono ? MaterialGray5 : antmaterial[i]); mySphere2(1.2); glEnable(GL_BLEND); glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, MaterialBlack); mySphere(1.16); glDisable(GL_BLEND); glPopMatrix(); /* finally, evolve */ antposition[i] += antvelocity[i]; } /* but the step size is the same! */ mp->ant_step += 0.2; mp->ant_position += 1; return True; } ENTRYPOINT void reshape_antinspect(ModeInfo * mi, int width, int height) { double h = (GLfloat) height / (GLfloat) width; antinspectstruct *mp = &antinspect[MI_SCREEN(mi)]; mp->linewidth = (width / 512) + 1; glViewport(0, 0, mp->WindW = (GLint) width, mp->WindH = (GLint) height); glMatrixMode(GL_PROJECTION); glLoadIdentity(); gluPerspective(45, 1/h, 7.0, 20.0); glMatrixMode(GL_MODELVIEW); glLineWidth(mp->linewidth); glPointSize(mp->linewidth); } static void pinit(void) { glClearDepth(1.0); glLightfv(GL_LIGHT0, GL_AMBIENT, ambient); glLightfv(GL_LIGHT0, GL_DIFFUSE, diffuse); glLightfv(GL_LIGHT0, GL_POSITION, position0); glLightfv(GL_LIGHT1, GL_AMBIENT, ambient); glLightfv(GL_LIGHT1, GL_DIFFUSE, diffuse); 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_NORMALIZE); glFrontFace(GL_CCW); /* antinspect */ glShadeModel(GL_SMOOTH); glEnable(GL_DEPTH_TEST); glDisable(GL_TEXTURE_2D); glMaterialfv(GL_FRONT_AND_BACK, GL_SHININESS, front_shininess); glMaterialfv(GL_FRONT_AND_BACK, GL_SPECULAR, front_specular); } ENTRYPOINT void release_antinspect(ModeInfo * mi) { if(antinspect) { free((void *) antinspect); antinspect = (antinspectstruct *) NULL; } FreeAllGL(mi); } ENTRYPOINT Bool antinspect_handle_event (ModeInfo *mi, XEvent *event) { antinspectstruct *mp = &antinspect[MI_SCREEN(mi)]; if (gltrackball_event_handler (event, mp->trackball, MI_WIDTH (mi), MI_HEIGHT (mi), &mp->button_down_p)) return True; return False; } ENTRYPOINT void init_antinspect(ModeInfo * mi) { antinspectstruct *mp; if(antinspect == NULL) { if((antinspect = (antinspectstruct *) calloc(MI_NUM_SCREENS(mi), sizeof (antinspectstruct))) == NULL) return; } mp = &antinspect[MI_SCREEN(mi)]; mp->step = NRAND(90); mp->ant_position = NRAND(90); mp->trackball = gltrackball_init (False); if ((mp->glx_context = init_GL(mi)) != NULL) { reshape_antinspect(mi, MI_WIDTH(mi), MI_HEIGHT(mi)); glDrawBuffer(GL_BACK); pinit(); } else MI_CLEARWINDOW(mi); glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); } ENTRYPOINT void draw_antinspect(ModeInfo * mi) { antinspectstruct *mp; Display *display = MI_DISPLAY(mi); Window window = MI_WINDOW(mi); if(!antinspect) return; mp = &antinspect[MI_SCREEN(mi)]; MI_IS_DRAWN(mi) = True; if(!mp->glx_context) return; glXMakeCurrent(display, window, *(mp->glx_context)); glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glPushMatrix(); mi->polygon_count = 0; /* position camera --- this works well, we can peer inside the antbubble */ glTranslatef(0.0, 0.0, -10.0); # ifdef HAVE_MOBILE /* Keep it the same relative size when rotated. */ { GLfloat h = MI_HEIGHT(mi) / (GLfloat) MI_WIDTH(mi); int o = (int) current_device_rotation(); if (o != 0 && o != 180 && o != -180) glScalef (1/h, 1/h, 1/h); glRotatef(o, 0, 0, 1); } # endif gltrackball_rotate(mp->trackball); glRotatef((15.0/2.0 + 15.0*sin(mp->ant_step/100.0)), 1.0, 0.0, 0.0); glRotatef(30.0, 1.0, 0.0, 0.0); glRotatef(180.0, 0.0, 1.0, 0.0); if (!draw_antinspect_strip(mi)) { release_antinspect(mi); return; } glPopMatrix(); if (MI_IS_FPS(mi)) do_fps (mi); glFlush(); glXSwapBuffers(display, window); mp->step += 0.025; } #ifndef STANDALONE ENTRYPOINT void change_antinspect(ModeInfo * mi) { antinspectstruct *mp = &antinspect[MI_SCREEN(mi)]; if (!mp->glx_context) return; glXMakeCurrent(MI_DISPLAY(mi), MI_WINDOW(mi), *(mp->glx_context)); pinit(); } #endif /* !STANDALONE */ XSCREENSAVER_MODULE ("AntInspect", antinspect) xscreensaver-5.36/hacks/glx/providence.c000644 000767 000024 00000050311 12710313222 020314 0ustar00jwzstaff000000 000000 /* * Permission to use, copy, modify, and distribute this software and its * documentation for any purpose and without fee is hereby granted, * provided that the above copyright notice appear in all copies and that * both that copyright notice and this permission notice appear in * supporting documentation. * * This file is provided AS IS with no warranties of any kind. The author * shall have no liability with respect to the infringement of copyrights, * trade secrets or any patents by this file or any part thereof. In no * event will the author be liable for any lost revenue or profits or * other special, indirect and consequential damages. * * Copyright 2004 Blair Tennessy */ #ifdef STANDALONE #define DEFAULTS "*delay: 20000 \n" \ "*showFPS: False \n" \ "*wireframe: False \n" # define refresh_providence 0 #include "xlockmore.h" #else #include "xlock.h" #endif #include "gltrackball.h" #define DEF_SOLIDPROVIDENCE "False" #define DEF_EYE "True" static int eye; static XrmOptionDescRec opts[] = { {"-eye", ".providence.eye", XrmoptionNoArg, "on"}, {"+eye", ".providence.eye", XrmoptionNoArg, "off"} }; static argtype vars[] = { {&eye, "eye", "Eye", DEF_EYE, t_Bool} }; static OptionStruct desc[] = { {"-/+eye", "turn on/off eye of providence"} }; ENTRYPOINT ModeSpecOpt providence_opts = { sizeof opts / sizeof opts[0], opts, sizeof vars / sizeof vars[0], vars, desc }; #ifdef USE_MODULES ModStruct providence_description = { "providence", "init_providence", "draw_providence", "release_providence", "draw_providence", "change_providence", (char *) NULL, &providence_opts, 1000, 1, 1, 1, 4, 1.0, "", "draws pyramid with glory", 0, NULL }; #endif #define Scale4Window 0.3 #define Scale4Iconic 0.4 #define sqr(A) ((A)*(A)) #ifndef Pi #define Pi M_PI #endif /* brick texture */ #define checkImageWidth 64 #define checkImageHeight 64 #define EYE_PARTICLE_COUNT 2000 #define LOOKUPSIZE (3600/5) /* 3600 was way too much RAM on iOS */ #define EYELENGTH 300 #define EPSILON 0.0001 #define PARTICLE_COUNT 2000 #define FPS 50 typedef struct { GLint WindH, WindW; GLXContext *glx_context; trackball_state *trackball; Bool button_down_p; GLfloat position0[4]; GLubyte checkImage[checkImageWidth][checkImageHeight][3]; GLuint bricktexture; int mono, wire; double camera_velocity; double camera_z; int pyramidlist; double currenttime; double theta; double theta_scale; double particles[PARTICLE_COUNT][5]; int eyeparticles[EYE_PARTICLE_COUNT][2]; double lookup[LOOKUPSIZE][EYELENGTH][2]; double lookup2[LOOKUPSIZE][EYELENGTH][2]; } providencestruct; /* lighting variables */ /*static const GLfloat front_shininess[] = {60.0};*/ /*static const GLfloat front_specular[] = {0.2, 0.2, 0.2, 1.0};*/ /*static const GLfloat ambient[] = {0.8, 0.8, 0.8, 1.0};*/ static const GLfloat ambient2[] = {0.25, 0.25, 0.25, 1.0}; static const GLfloat diffuse[] = {1.0, 1.0, 1.0, 1.0}; static const GLfloat lmodel_ambient[] = {0.5, 0.5, 0.5, 1.0}; static const GLfloat lmodel_twoside[] = {GL_TRUE}; /* gray-gray */ static const GLfloat MaterialGlory[] = {0.04, 0.30, 0.22, 0.7}; static const GLfloat MaterialGloryB[] = {0.07, 0.50, 0.36, 0.6}; static const GLfloat MaterialGloryF[] = {0.07, 0.50, 0.36, 1.0}; /* static const GLfloat MaterialGloryF[] = {0.06, 0.38, 0.27, 1.0}; */ /*static const GLfloat MaterialGloryE[] = {0.06, 0.38, 0.27, 0.3};*/ static const GLfloat MaterialGloryM[] = {0.5, 0.5, 0.5, 0.5}; static const GLfloat MaterialGloryMB[] = {0.36, 0.36, 0.36, 0.4}; /*static const GLfloat MaterialGreenback[4] = {0.04, 0.30, 0.22, 1.0};*/ /*static const GLfloat MaterialBlack[4] = {0.0, 0.0, 0.0, 1.0};*/ static const GLfloat MaterialGray5[] = {0.5, 0.5, 0.5, 1.0}; /*static const GLfloat MaterialGray6[] = {0.6, 0.6, 0.6, 1.0};*/ static providencestruct *providence = (providencestruct *) NULL; #define NUM_SCENES 2 /* build brick texture */ static void make_brick(providencestruct *mp) { int i, j, c; for (i = 0; i < checkImageWidth; i++) { for (j = 0; j < checkImageHeight; j++) { c = i % 16 == 15 ? 255 : (j + 48*(i / 16))%64 == 0 ? 255 : 102 + random() % 102; mp->checkImage[i][j][0] = (GLubyte) c; mp->checkImage[i][j][1] = (GLubyte) c; mp->checkImage[i][j][2] = (GLubyte) c; } } glGenTextures(1, &mp->bricktexture); glBindTexture(GL_TEXTURE_2D, mp->bricktexture); glTexImage2D(GL_TEXTURE_2D, 0, 3, checkImageWidth, checkImageHeight, 0, GL_RGB, GL_UNSIGNED_BYTE, &mp->checkImage[0][0]); } /* build eye lookup table */ static void build_eye(providencestruct *mp) { int i, j; double x; double inc = 0.1 / EYELENGTH; double inc2 = 2.4*Pi / EYELENGTH; /* describe all values tangentially out from pupil */ for(i = 0; i < LOOKUPSIZE; ++i) { double r = i * 2*Pi / LOOKUPSIZE;/*x + inc;*/ double sr = sin(r); double cr = cos(r); x = 0.07; for(j = 0; j < EYELENGTH; ++j) { mp->lookup[i][j][0] = x*sr; mp->lookup[i][j][1] = x*cr; x += inc; } } /* lookup2: dollar sign */ for(i = 0; i < LOOKUPSIZE; ++i) { double y = -1.2*Pi; for(j = 0; j < EYELENGTH; ++j) { if(i % 2) { mp->lookup2[i][j][0] = sin(y)/6.0 + i/36000.0 - 0.05; mp->lookup2[i][j][1] = i%4 ? y/12.0 - 0.05 : 1.2*Pi-y/12.0 + 0.05; } else { mp->lookup2[i][j][0] = i/36000.0 - 0.05; mp->lookup2[i][j][1] = y/9.0 - 0.05; } y += inc2; } } } static double min(double a, double b) { return a < b ? a : b; } static double max(double a, double b) { return a > b ? a : b; } static void init_particle(providencestruct *mp, double particle[5]) { /* position along glory */ double p = (random() % 485410) / 100000.0; /* on a plane */ particle[2] = 0.0; if(p < 1.5) { particle[0] = p - 0.75; particle[1] = -0.75001; } else if(p < 1.5 + sqrt(45)/4.0) { double d = p - 1.5; particle[0] = 0.75 - d*cos(atan(2.0)); particle[1] = d*sin(atan(2.0)) - 0.75; } else { double d = 4.8541 - p; particle[0] = -0.75 + d*cos(atan(2.0)); particle[1] = d*sin(atan(2.0)) - 0.75; } particle[3] = mp->currenttime; particle[4] = 1.25 + (random()%10)/10.0; } /* init glory particles */ static void init_particles(providencestruct *mp) { int i; for(i = 0; i < PARTICLE_COUNT; ++i) { init_particle(mp, mp->particles[i]); /* set initial time */ mp->particles[i][3] = mp->currenttime - (random()%1250)/1000.0; } /* init eye particles */ for(i = 0; i < EYE_PARTICLE_COUNT; ++i) { mp->eyeparticles[i][0] = random()%LOOKUPSIZE; mp->eyeparticles[i][1] = random()%EYELENGTH; } } /* ugg, should be a priority queue if next event times known */ static void update_particles(providencestruct *mp) { int i; for(i = 0; i < PARTICLE_COUNT; ++i) { /* check for time elapse */ if(mp->currenttime > mp->particles[i][3] + mp->particles[i][4]) init_particle(mp, mp->particles[i]); } /* now update eye particles */ for(i = 0; i < EYE_PARTICLE_COUNT; ++i) { /* int x = eyeparticles[i][1] + random()%16; */ int x = mp->eyeparticles[i][1] + random()%(cos(mp->theta) < 0.0 ? 8 : 16); /* reset if dead */ if(x >= EYELENGTH || random()%(cos(mp->theta) < 0.0 ? 40 : 10) == 0) { /* if(x > EYELENGTH || (x > EYELENGTH/(2/3.0) && random()%7 == 0)) { */ mp->eyeparticles[i][0] = random()%LOOKUPSIZE; mp->eyeparticles[i][1] = random()%40; } else { mp->eyeparticles[i][1] = x; } } } /* draw the pyramid */ static void draw_seal(providencestruct *mp) { int i; double base = sqrt(2.0); double top = 1.0 / sqrt(2.0); double tmod = 7.0/6.0; glPushMatrix(); /* set options for mono, wireframe */ if(mp->wire) { glPolygonMode(GL_FRONT_AND_BACK, GL_LINE); glDisable(GL_LIGHTING); glDisable(GL_TEXTURE_2D); } else { glEnable(GL_TEXTURE_2D); glBindTexture(GL_TEXTURE_2D, mp->bricktexture); glEnable(GL_LIGHTING); glColor4fv(mp->mono ? MaterialGray5 : MaterialGloryF); glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, mp->mono ? MaterialGray5 : MaterialGloryF); } glRotatef(45.0, 0.0, 1.0, 0.0); glTranslatef(0.0, -3.25, 0.0); for(i = 0; i < 4; ++i) { glRotatef(i*90.0, 0.0, 1.0, 0.0); glBegin(GL_QUADS); glNormal3f(1 / sqrt(6.0), 2 / sqrt(6.0), 1 / sqrt(6.0)); glTexCoord2f(-base, 0.0); glVertex3f(-base, 0.0, base); glTexCoord2f(base, 0.0); glVertex3f(base, 0.0, base); glTexCoord2f(top, 13.0/4.0); glVertex3f(top, 2.0, top); glTexCoord2f(-top, 13.0/4.0); glVertex3f(-top, 2.0, top); glEnd(); } glBegin(GL_QUADS); /* top */ glNormal3f(0.0, 1.0, 0.0); glTexCoord2f(0.02, 0.0); glVertex3f(-top, 2.0, top); glTexCoord2f(2.0*top, 0.0); glVertex3f(top, 2.0, top); glTexCoord2f(2.0*top, tmod*2.1*top); glVertex3f(top, 2.0, -top); glTexCoord2f(0.02, tmod*2.1*top); glVertex3f(-top, 2.0, -top); /* base */ glNormal3f(0.0, -1.0, 0.0); glTexCoord2f(-base, 0.0); glVertex3f(-base, 0.0, -base); glTexCoord2f(top, 0.0); glVertex3f(base, 0.0, -base); glTexCoord2f(top, top*13.0/4.0); glVertex3f(base, 0.0, base); glTexCoord2f(-top, top*13.0/4.0); glVertex3f(-base, 0.0, base); glEnd(); glPopMatrix(); glDisable(GL_TEXTURE_2D); } /* draw glory */ static void draw_glory(providencestruct *mp) { int i; if(mp->wire) { glBegin(GL_TRIANGLES); glVertex3f(-0.75, -0.75, 0.0); glVertex3f(0.75, -0.75, 0.0); glVertex3f(0.0, 0.75, 0.0); glVertex3f(0.0, 0.75, 0.0); glVertex3f(0.75, -0.75, 0.0); glVertex3f(-0.75, -0.75, 0.0); glEnd(); return; } /* draw particles */ glDisable(GL_LIGHTING); glPushMatrix(); glEnable(GL_BLEND); /* glory colour lines */ glColor4fv(mp->mono ? MaterialGloryM : MaterialGlory); glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, mp->mono ? MaterialGloryM : MaterialGlory); glBegin(GL_LINES); for(i = 0; i < PARTICLE_COUNT/2; ++i) { double t = mp->currenttime - mp->particles[i][3]; double th = atan(mp->particles[i][1] / mp->particles[i][0]); if(mp->particles[i][0] < 0.0) th += Pi; glVertex3f(mp->particles[i][0], mp->particles[i][1], mp->particles[i][2]); glVertex3f(mp->particles[i][0] + 0.2*cos(th)*t, mp->particles[i][1] + 0.2*sin(th)*t, mp->particles[i][2]); } glEnd(); /* gloryb colour lines */ glColor4fv(mp->mono ? MaterialGloryMB : MaterialGloryB); glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, mp->mono ? MaterialGloryMB : MaterialGloryB); glBegin(GL_LINES); for(; i < PARTICLE_COUNT; ++i) { double t = mp->currenttime - mp->particles[i][3]; double th = atan(mp->particles[i][1] / mp->particles[i][0]); if(mp->particles[i][0] < 0.0) th += Pi; glVertex3f(mp->particles[i][0], mp->particles[i][1], mp->particles[i][2]); glVertex3f(mp->particles[i][0] + 0.2*cos(th)*t, mp->particles[i][1] + 0.2*sin(th)*t, mp->particles[i][2]); } glEnd(); glPopMatrix(); glEnable(GL_LIGHTING); } /* draw eye of providence */ static void draw_eye(providencestruct *mp) { int i; /* draw wireeye */ if(mp->wire) { glBegin(GL_TRIANGLES); glVertex3f(-0.25, -0.25, 0.0); glVertex3f(0.25, -0.25, 0.0); glVertex3f(0.0, 0.25, 0.0); glEnd(); return; } /* draw particles */ glDisable(GL_LIGHTING); glPushMatrix(); glEnable(GL_BLEND); /* eye */ glColor4fv(mp->mono ? MaterialGloryM : MaterialGlory); glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, mp->mono ? MaterialGloryM : MaterialGlory); /* draw eye particles on z = 0 plane */ glBegin(GL_POINTS); for(i = 0; i < EYE_PARTICLE_COUNT/2; ++i) { glVertex3f(mp->lookup[mp->eyeparticles[i][0]][mp->eyeparticles[i][1]][0], mp->lookup[mp->eyeparticles[i][0]][mp->eyeparticles[i][1]][1], 0.0); } glEnd(); /* eye */ glColor4fv(mp->mono ? MaterialGloryMB : MaterialGloryB); glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, mp->mono ? MaterialGloryMB : MaterialGloryB); /* draw eye particles on z = 0 plane */ glBegin(GL_POINTS); for(; i < EYE_PARTICLE_COUNT; ++i) { glVertex3f(mp->lookup[mp->eyeparticles[i][0]][mp->eyeparticles[i][1]][0], mp->lookup[mp->eyeparticles[i][0]][mp->eyeparticles[i][1]][1], 0.0); } glEnd(); /* draw scaled particles */ glPushMatrix(); glScalef(3.3, 2.2, 3.3); /* eye */ glColor4fv(mp->mono ? MaterialGloryMB : MaterialGloryB); glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, mp->mono ? MaterialGloryMB : MaterialGloryB); /* draw eye particles on z = 0 plane */ glBegin(GL_POINTS); for(i = 0; i < EYE_PARTICLE_COUNT/2; ++i) { glVertex3f(mp->lookup[mp->eyeparticles[i][0]][mp->eyeparticles[i][1]][0], mp->lookup[mp->eyeparticles[i][0]][mp->eyeparticles[i][1]][1], 0.0); } glEnd(); glColor4fv(mp->mono ? MaterialGloryM : MaterialGlory); glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, mp->mono ? MaterialGloryM : MaterialGlory); /* draw eye particles on z = 0 plane */ glBegin(GL_POINTS); for(; i < EYE_PARTICLE_COUNT; ++i) { glVertex3f(mp->lookup[mp->eyeparticles[i][0]][mp->eyeparticles[i][1]][0], mp->lookup[mp->eyeparticles[i][0]][mp->eyeparticles[i][1]][1], 0.0); } glEnd(); glPopMatrix(); glPopMatrix(); glEnable(GL_LIGHTING); } /* draw eye of providence */ static void draw_eye2(providencestruct *mp) { int i; /* draw wireeye */ if(mp->wire) { glBegin(GL_TRIANGLES); glVertex3f(0.0, 0.25, 0.0); glVertex3f(0.25, -0.25, 0.0); glVertex3f(-0.25, -0.25, 0.0); glEnd(); return; } /* draw particles */ glDisable(GL_LIGHTING); glPushMatrix(); glEnable(GL_BLEND); /* eye */ glColor4fv(mp->mono ? MaterialGloryM : MaterialGlory); glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, mp->mono ? MaterialGloryM : MaterialGlory); /* draw eye particles on z = 0 plane */ glBegin(GL_POINTS); for(i = 0; i < EYE_PARTICLE_COUNT/2; ++i) { glVertex3f(mp->lookup2[mp->eyeparticles[i][0]][mp->eyeparticles[i][1]][0], mp->lookup2[mp->eyeparticles[i][0]][mp->eyeparticles[i][1]][1], 0.0); } glEnd(); /* eye */ glColor4fv(mp->mono ? MaterialGloryMB : MaterialGloryB); glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, mp->mono ? MaterialGloryMB : MaterialGloryB); /* draw eye particles on z = 0 plane */ glBegin(GL_POINTS); for(; i < EYE_PARTICLE_COUNT; ++i) { glVertex3f(mp->lookup2[mp->eyeparticles[i][0]][mp->eyeparticles[i][1]][0], mp->lookup2[mp->eyeparticles[i][0]][mp->eyeparticles[i][1]][1], 0.0); } glEnd(); glPopMatrix(); glEnable(GL_LIGHTING); } /* draw the scene */ static void draw_providence_strip(ModeInfo *mi) { providencestruct *mp = &providence[MI_SCREEN(mi)]; glTranslatef(0.0, 1.414, 0.0); mp->position0[0] = 1.6*sin(mp->theta); mp->position0[1] = 1.2; mp->position0[2] = 1.6*cos(mp->theta); mp->position0[3] = 0.0; glLightfv(GL_LIGHT0, GL_POSITION, mp->position0); glLightfv(GL_LIGHT0, GL_AMBIENT, ambient2); glEnable(GL_LIGHTING); glEnable(GL_LIGHT0); /* draw pyramid, glory */ glDisable(GL_BLEND); glCallList(mp->pyramidlist); draw_glory(mp); if(eye) { if(cos(mp->theta) < 0.0) draw_eye2(mp); else draw_eye(mp); } return; } ENTRYPOINT void reshape_providence(ModeInfo * mi, int width, int height) { double h = (GLfloat) height / (GLfloat) width; providencestruct *mp = &providence[MI_SCREEN(mi)]; glViewport(0, 0, mp->WindW = (GLint) width, mp->WindH = (GLint) height); glMatrixMode(GL_PROJECTION); glLoadIdentity(); gluPerspective(45, 1/h, 0.001, 25.0); glMatrixMode(GL_MODELVIEW); glLineWidth(2.0); glPointSize(2.0); } static void pinit(providencestruct *mp) { glClearDepth(1.0); mp->currenttime = 0.0; init_particles(mp); make_brick(mp); build_eye(mp); /* build pyramid list */ mp->pyramidlist = glGenLists(1); glNewList(mp->pyramidlist, GL_COMPILE); draw_seal(mp); glEndList(); } /* cleanup routine */ ENTRYPOINT void release_providence(ModeInfo * mi) { if(providence) { free((void *) providence); providence = (providencestruct *) NULL; } FreeAllGL(mi); } /* event handling */ ENTRYPOINT Bool providence_handle_event(ModeInfo *mi, XEvent *event) { providencestruct *mp = &providence[MI_SCREEN(mi)]; switch(event->xany.type) { case ButtonPress: switch(event->xbutton.button) { case Button4: mp->camera_velocity += 1.0; return True; case Button5: mp->camera_velocity -= 1.0; return True; default: break; } break; default: break; } if (gltrackball_event_handler (event, mp->trackball, MI_WIDTH (mi), MI_HEIGHT (mi), &mp->button_down_p)) return True; return False; } ENTRYPOINT void init_providence(ModeInfo *mi) { providencestruct *mp; if(!providence) { if((providence = (providencestruct *) calloc(MI_NUM_SCREENS(mi), sizeof (providencestruct))) == NULL) return; } mp = &providence[MI_SCREEN(mi)]; mp->trackball = gltrackball_init (False); mp->position0[0] = 1; mp->position0[1] = 5; mp->position0[2] = 1; mp->position0[3] = 1; mp->camera_velocity = -8.0; mp->mono = MI_IS_MONO(mi); mp->wire = MI_IS_WIREFRAME(mi); # ifdef HAVE_JWZGLES /* #### glPolygonMode other than GL_FILL unimplemented */ mp->wire = 0; # endif /* make multiple screens rotate at slightly different rates. */ mp->theta_scale = 0.7 + frand(0.6); if((mp->glx_context = init_GL(mi)) != NULL) { reshape_providence(mi, MI_WIDTH(mi), MI_HEIGHT(mi)); /* glDrawBuffer(GL_BACK); */ pinit(mp); } else MI_CLEARWINDOW(mi); } ENTRYPOINT void draw_providence(ModeInfo * mi) { providencestruct *mp; Display *display = MI_DISPLAY(mi); Window window = MI_WINDOW(mi); if(!providence) return; mp = &providence[MI_SCREEN(mi)]; MI_IS_DRAWN(mi) = True; if(!mp->glx_context) return; glXMakeCurrent(display, window, *(mp->glx_context)); /* setup twoside lighting */ glLightfv(GL_LIGHT0, GL_AMBIENT, ambient2); glLightfv(GL_LIGHT0, GL_DIFFUSE, diffuse); glLightfv(GL_LIGHT0, GL_POSITION, mp->position0); glLightModelfv(GL_LIGHT_MODEL_AMBIENT, lmodel_ambient); glLightModelfv(GL_LIGHT_MODEL_TWO_SIDE, lmodel_twoside); glEnable(GL_LIGHTING); glEnable(GL_LIGHT0); glEnable(GL_NORMALIZE); glFrontFace(GL_CCW); /* glDisable(GL_CULL_FACE); */ glEnable(GL_CULL_FACE); glCullFace(GL_BACK); glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); glShadeModel(GL_SMOOTH); glEnable(GL_DEPTH_TEST); glDepthFunc(GL_LEQUAL); glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR); glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR); glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_WRAP_S,GL_REPEAT); glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_WRAP_T,GL_REPEAT); glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE); glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glPushMatrix(); glRotatef(current_device_rotation(), 0, 0, 1); /* modify camera */ if(fabs(mp->camera_velocity) > EPSILON) { mp->camera_z = max(min(mp->camera_z + 0.1*mp->camera_velocity, -4.0), -12.0); mp->camera_velocity = 0.95*mp->camera_velocity; } /* 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); gltrackball_rotate(mp->trackball); glRotatef(mp->theta * 180.0 / Pi, 0.0, -1.0, 0.0); # ifdef HAVE_MOBILE /* Keep it the same relative size when rotated. */ { GLfloat h = MI_HEIGHT(mi) / (GLfloat) MI_WIDTH(mi); int o = (int) current_device_rotation(); if (o != 0 && o != 180 && o != -180) glScalef (1/h, 1/h, 1/h); } # endif /* draw providence */ draw_providence_strip(mi); glPopMatrix(); if(MI_IS_FPS(mi)) do_fps (mi); glFlush(); glXSwapBuffers(display, window); /* update */ mp->currenttime += 1.0 / FPS; mp->theta = mp->currenttime / 2.0 * mp->theta_scale; update_particles(mp); } #ifndef STANDALONE ENTRYPOINT void change_providence(ModeInfo * mi) { providencestruct *mp = &providence[MI_SCREEN(mi)]; if (!mp->glx_context) return; glXMakeCurrent(MI_DISPLAY(mi), MI_WINDOW(mi), *(mp->glx_context)); pinit(); } #endif /* !STANDALONE */ XSCREENSAVER_MODULE ("Providence", providence) xscreensaver-5.36/hacks/glx/pinion.c000644 000767 000024 00000117536 12701612217 017475 0ustar00jwzstaff000000 000000 /* pinion, Copyright (c) 2004-2014 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. */ #define DEFAULTS "*delay: 15000 \n" \ "*showFPS: False \n" \ "*wireframe: False \n" \ "*titleFont: -*-helvetica-medium-r-normal-*-*-180-*-*-*-*-*-*\n" \ "*titleFont2: -*-helvetica-medium-r-normal-*-*-120-*-*-*-*-*-*\n" \ "*titleFont3: -*-helvetica-medium-r-normal-*-*-80-*-*-*-*-*-*\n" \ # define refresh_pinion 0 # define release_pinion 0 #undef countof #define countof(x) (sizeof((x))/sizeof((*x))) #undef BELLRAND #define BELLRAND(n) ((frand((n)) + frand((n)) + frand((n))) / 3) #include "xlockmore.h" #include "normals.h" #include "gltrackball.h" #include "texfont.h" #include "involute.h" #include #ifdef USE_GL /* whole file */ #define DEF_SPIN_SPEED "1.0" #define DEF_SCROLL_SPEED "1.0" #define DEF_GEAR_SIZE "1.0" #define DEF_MAX_RPM "900" typedef struct { GLXContext *glx_context; GLfloat vp_left, vp_right, vp_top, vp_bottom; /* default visible area */ GLfloat vp_width, vp_height; GLfloat render_left, render_right; /* area in which gears are displayed */ GLfloat layout_left, layout_right; /* layout region, on the right side */ int ngears; int gears_size; gear **gears; trackball_state *trackball; Bool button_down_p; unsigned long mouse_gear_id; texture_font_data *font1, *font2, *font3; int draw_tick; GLfloat plane_displacement; /* distance between coaxial gears */ int debug_size_failures; /* for debugging messages */ int debug_position_failures; unsigned long current_length; /* gear count in current train */ unsigned long current_blur_length; /* how long have we been blurring? */ } pinion_configuration; static pinion_configuration *pps = NULL; /* command line arguments */ static GLfloat spin_speed, scroll_speed, gear_size, max_rpm; static Bool verbose_p = False; /* print progress on stderr */ static Bool debug_p = False; /* render as flat schematic */ /* internal debugging variables */ static Bool debug_placement_p = False; /* extreme verbosity on stderr */ static Bool debug_one_gear_p = False; /* draw one big stationary gear */ static XrmOptionDescRec opts[] = { { "-spin", ".spinSpeed", XrmoptionSepArg, 0 }, { "-scroll", ".scrollSpeed", XrmoptionSepArg, 0 }, { "-size", ".gearSize", XrmoptionSepArg, 0 }, { "-max-rpm",".maxRPM", XrmoptionSepArg, 0 }, { "-debug", ".debug", XrmoptionNoArg, "True" }, { "-verbose",".verbose", XrmoptionNoArg, "True" }, }; static argtype vars[] = { {&spin_speed, "spinSpeed", "SpinSpeed", DEF_SPIN_SPEED, t_Float}, {&scroll_speed, "scrollSpeed", "ScrollSpeed", DEF_SCROLL_SPEED, t_Float}, {&gear_size, "gearSize", "GearSize", DEF_GEAR_SIZE, t_Float}, {&max_rpm, "maxRPM", "MaxRPM", DEF_MAX_RPM, t_Float}, {&debug_p, "debug", "Debug", "False", t_Bool}, {&verbose_p, "verbose", "Verbose", "False", t_Bool}, }; ENTRYPOINT ModeSpecOpt pinion_opts = {countof(opts), opts, countof(vars), vars, NULL}; /* Font stuff */ static void load_fonts (ModeInfo *mi) { pinion_configuration *pp = &pps[MI_SCREEN(mi)]; pp->font1 = load_texture_font (mi->dpy, "titleFont"); pp->font2 = load_texture_font (mi->dpy, "titleFont2"); pp->font3 = load_texture_font (mi->dpy, "titleFont3"); } static void rpm_string (double rpm, char *s); static void draw_label (ModeInfo *mi) { pinion_configuration *pp = &pps[MI_SCREEN(mi)]; char label[1024]; int i; gear *g = 0; if (pp->mouse_gear_id) for (i = 0; i < pp->ngears; i++) if (pp->gears[i]->id == pp->mouse_gear_id) { g = pp->gears[i]; break; } if (!g) *label = 0; else { sprintf (label, "%d teeth\n", (int) g->nteeth); rpm_string (g->rpm, label + strlen(label)); if (debug_p) sprintf (label + strlen (label), "\nPolys: %d\nModel: %s (%.2f)\n", g->polygons, (g->size == INVOLUTE_SMALL ? "small" : g->size == INVOLUTE_MEDIUM ? "medium" : "large"), g->tooth_h * MI_HEIGHT(mi)); } if (*label) { texture_font_data *fd; if (MI_WIDTH(mi) >= 500 && MI_HEIGHT(mi) >= 375) fd = pp->font1; else if (MI_WIDTH(mi) >= 350 && MI_HEIGHT(mi) >= 260) fd = pp->font2; else fd = pp->font3; glColor3f (0.8, 0.8, 0); print_texture_label (mi->dpy, fd, mi->xgwa.width, mi->xgwa.height, 1, label); } } /* Some utilities */ /* Find the gear in the scene that is farthest to the right or left. */ static gear * farthest_gear (ModeInfo *mi, Bool left_p) { pinion_configuration *pp = &pps[MI_SCREEN(mi)]; int i; gear *rg = 0; double x = (left_p ? 999999 : -999999); for (i = 0; i < pp->ngears; i++) { gear *g = pp->gears[i]; double gx = g->x + ((g->r + g->tooth_h) * (left_p ? -1 : 1)); if (left_p ? (x > gx) : (x < gx)) { rg = g; x = gx; } } return rg; } /* Compute the revolutions per minute of a gear. */ static void compute_rpm (ModeInfo *mi, gear *g) { double fps, rpf, rps; fps = (MI_PAUSE(mi) == 0 ? 999999 : 1000000.0 / MI_PAUSE(mi)); if (fps > 150) fps = 150; /* let's be reasonable... */ if (fps < 10) fps = 10; rpf = (g->ratio * spin_speed) / 360.0; /* rotations per frame */ rps = rpf * fps; /* rotations per second */ g->rpm = rps * 60; } /* Prints the RPM into a string, doing fancy float formatting. */ static void rpm_string (double rpm, char *s) { char buf[30]; int L; if (rpm >= 0.1) sprintf (buf, "%.2f", rpm); else if (rpm >= 0.001) sprintf (buf, "%.4f", rpm); else if (rpm >= 0.00001) sprintf (buf, "%.8f", rpm); else sprintf (buf, "%.16f",rpm); L = strlen(buf); while (buf[L-1] == '0') buf[--L] = 0; if (buf[L-1] == '.') buf[--L] = 0; strcpy (s, buf); strcat (s, " RPM"); } /* Layout and stuff. */ /* Create and return a new gear sized for placement next to or on top of the given parent gear (if any.) Returns 0 if out of memory. */ static gear * new_gear (ModeInfo *mi, gear *parent, Bool coaxial_p) { pinion_configuration *pp = &pps[MI_SCREEN(mi)]; gear *g = (gear *) calloc (1, sizeof (*g)); int loop_count = 0; static unsigned long id = 0; /* only used in debugging output */ if (!g) return 0; if (coaxial_p && !parent) abort(); g->id = ++id; g->coax_displacement = pp->plane_displacement; while (1) { loop_count++; if (loop_count > 1000) /* The only time we loop in here is when making a coaxial gear, and trying to pick a radius that is either significantly larger or smaller than its parent. That shouldn't be hard, so something must be really wrong if we can't do that in only a few tries. */ abort(); /* Pick the size of the teeth. */ if (parent && !coaxial_p) /* adjascent gears need matching teeth */ { g->tooth_w = parent->tooth_w; g->tooth_h = parent->tooth_h; g->thickness = parent->thickness; g->thickness2 = parent->thickness2; g->thickness3 = parent->thickness3; } else /* gears that begin trains get any size they want */ { double scale = (1.0 + BELLRAND(4.0)) * gear_size; g->tooth_w = 0.007 * scale; g->tooth_h = 0.005 * scale; g->thickness = g->tooth_h * (0.1 + BELLRAND(1.5)); g->thickness2 = g->thickness / 4; g->thickness3 = g->thickness; } /* Pick the number of teeth, and thus, the radius. */ { double c; AGAIN: g->nteeth = 3 + (random() % 97); /* from 3 to 100 teeth */ if (g->nteeth < 7 && (random() % 5) != 0) goto AGAIN; /* Let's make very small tooth-counts more rare */ c = g->nteeth * g->tooth_w * 2; /* circumference = teeth + gaps */ g->r = c / (M_PI * 2); /* c = 2 pi r */ } /* Are we done now? */ if (! coaxial_p) break; /* yes */ if (g->nteeth == parent->nteeth) continue; /* ugly */ if (g->r < parent->r * 0.6) break; /* g much smaller than parent */ if (parent->r < g->r * 0.6) break; /* g much larger than parent */ } /* g->tooth_slope = (parent ? -parent->tooth_slope : 4); */ if (debug_one_gear_p) g->tooth_slope = frand(20)-10; /* Colorize */ g->color[0] = 0.5 + frand(0.5); g->color[1] = 0.5 + frand(0.5); g->color[2] = 0.5 + frand(0.5); g->color[3] = 1.0; g->color2[0] = g->color[0] * 0.85; g->color2[1] = g->color[1] * 0.85; g->color2[2] = g->color[2] * 0.85; g->color2[3] = g->color[3]; /* Decide on shape of gear interior: - just a ring with teeth; - that, plus a thinner in-set "plate" in the middle; - that, plus a thin raised "lip" on the inner plate; - or, a wide lip (really, a thicker third inner plate.) */ if ((random() % 10) == 0) { /* inner_r can go all the way in; there's no inset disc. */ g->inner_r = (g->r * 0.1) + frand((g->r - g->tooth_h/2) * 0.8); g->inner_r2 = 0; g->inner_r3 = 0; } else { /* inner_r doesn't go in very far; inner_r2 is an inset disc. */ g->inner_r = (g->r * 0.5) + frand((g->r - g->tooth_h) * 0.4); g->inner_r2 = (g->r * 0.1) + frand(g->inner_r * 0.5); g->inner_r3 = 0; if (g->inner_r2 > (g->r * 0.2)) { int nn = (random() % 10); if (nn <= 2) g->inner_r3 = (g->r * 0.1) + frand(g->inner_r2 * 0.2); else if (nn <= 7 && g->inner_r2 >= 0.1) g->inner_r3 = g->inner_r2 - 0.01; } } /* Coaxial gears need to have the same innermost hole size (for the axle.) Use whichever of the two is smaller. (Modifies parent.) */ if (coaxial_p) { double hole1 = (g->inner_r3 ? g->inner_r3 : g->inner_r2 ? g->inner_r2 : g->inner_r); double hole2 = (parent->inner_r3 ? parent->inner_r3 : parent->inner_r2 ? parent->inner_r2 : parent->inner_r); double hole = (hole1 < hole2 ? hole1 : hole2); if (hole <= 0) abort(); if (g->inner_r3) g->inner_r3 = hole; else if (g->inner_r2) g->inner_r2 = hole; else g->inner_r = hole; if (parent->inner_r3) parent->inner_r3 = hole; else if (parent->inner_r2) parent->inner_r2 = hole; else parent->inner_r = hole; } /* If we have three discs, sometimes make the middle disc be spokes. */ if (g->inner_r3 && ((random() % 5) == 0)) { g->spokes = 2 + BELLRAND (5); g->spoke_thickness = 1 + frand(7.0); if (g->spokes == 2 && g->spoke_thickness < 2) g->spoke_thickness += 1; } /* Sometimes add little nubbly bits, if there is room. */ if (g->nteeth > 5) { double size = 0; involute_biggest_ring (g, 0, &size, 0); if (size > g->r * 0.2 && (random() % 5) == 0) { g->nubs = 1 + (random() % 16); if (g->nubs > 8) g->nubs = 1; } } if (g->inner_r3 > g->inner_r2) abort(); if (g->inner_r2 > g->inner_r) abort(); if (g->inner_r > g->r) abort(); /* Decide how complex the polygon model should be. */ { double pix = g->tooth_h * MI_HEIGHT(mi); /* approx. tooth size in pixels */ if (pix <= 2.5) g->size = INVOLUTE_SMALL; else if (pix <= 3.5) g->size = INVOLUTE_MEDIUM; else if (pix <= 25) g->size = INVOLUTE_LARGE; else g->size = INVOLUTE_HUGE; } g->base_p = !parent; return g; } /* Given a newly-created gear, place it next to its parent in the scene, with its teeth meshed and the proper velocity. Returns False if it didn't work. (Call this a bunch of times until either it works, or you decide it's probably not going to.) */ static Bool place_gear (ModeInfo *mi, gear *g, gear *parent, Bool coaxial_p) { pinion_configuration *pp = &pps[MI_SCREEN(mi)]; /* If this gear takes up more than 1/3rd of the screen, it's no good. */ if (((g->r + g->tooth_h) * (6 / gear_size)) >= pp->vp_width || ((g->r + g->tooth_h) * (6 / gear_size)) >= pp->vp_height) { if (verbose_p && debug_placement_p && 0) fprintf (stderr, "%s: placement: too big: %.2f @ %.2f vs %.2f x %.2f\n", progname, (g->r + g->tooth_h), gear_size, pp->vp_width, pp->vp_height); pp->debug_size_failures++; return False; } /* Compute this gear's velocity. */ if (! parent) { g->ratio = 0.8 + BELLRAND(0.4); /* 0.8-1.2 = 8-12rpm @ 60fps */ g->th = frand (90) * ((random() & 1) ? 1.0 : -1.0); } else if (coaxial_p) { g->ratio = parent->ratio; /* bound gears have the same ratio */ g->th = parent->th; g->rpm = parent->rpm; g->wobble = parent->wobble; } else { /* Gearing ratio is the ratio of the number of teeth to previous gear (which is also the ratio of the circumferences.) */ g->ratio = (double) parent->nteeth / (double) g->nteeth; /* Set our initial rotation to match that of the previous gear, multiplied by the gearing ratio. (This is finessed later, once we know the exact position of the gear relative to its parent.) */ g->th = -(parent->th * g->ratio); if (g->nteeth & 1) /* rotate 1/2 tooth-size if odd number of teeth */ { double off = (180.0 / g->nteeth); if (g->th > 0) g->th += off; else g->th -= off; } /* ratios are cumulative for all gears in the train. */ g->ratio *= parent->ratio; } /* Place the gear relative to the parent. */ if (! parent) { gear *rg = farthest_gear (mi, False); double right = (rg ? rg->x + rg->r + rg->tooth_h : 0); if (right < pp->layout_left) /* place off screen */ right = pp->layout_left; g->x = right + g->r + g->tooth_h + (0.01 / gear_size); g->y = 0; g->z = 0; if (debug_one_gear_p) g->x = 0; } else if (coaxial_p) { double off = pp->plane_displacement; g->x = parent->x; g->y = parent->y; g->z = parent->z + (g->r > parent->r /* small gear on top */ ? -off : off); if (parent->r > g->r) /* mark which is top and which is bottom */ { parent->coax_p = 1; g->coax_p = 2; parent->wobble = 0; /* looks bad when axle moves */ } else { parent->coax_p = 2; g->coax_p = 1; g->wobble = 0; } g->coax_thickness = parent->thickness; parent->coax_thickness = g->thickness; /* Don't let the train get too close to or far from the screen. If we're getting too close, give up on this gear. (But getting very far away is fine.) */ if (g->z >= off * 4 || g->z <= -off * 4) { if (verbose_p && debug_placement_p) fprintf (stderr, "%s: placement: bad depth: %.2f\n", progname, g->z); pp->debug_position_failures++; return False; } } else /* position it somewhere next to the parent. */ { double r_off = parent->r + g->r; int angle; if ((random() % 3) != 0) angle = (random() % 240) - 120; /* mostly -120 to +120 degrees */ else angle = (random() % 360) - 180; /* sometimes -180 to +180 degrees */ g->x = parent->x + (cos ((double) angle * (M_PI / 180)) * r_off); g->y = parent->y + (sin ((double) angle * (M_PI / 180)) * r_off); g->z = parent->z; /* If the angle we picked would have positioned this gear more than halfway off screen, that's no good. */ if (g->y > pp->vp_top || g->y < pp->vp_bottom) { if (verbose_p && debug_placement_p) fprintf (stderr, "%s: placement: out of bounds: %s\n", progname, (g->y > pp->vp_top ? "top" : "bottom")); pp->debug_position_failures++; return False; } /* avoid accidentally changing sign of "th" in the math below. */ g->th += (g->th > 0 ? 360 : -360); /* Adjust the rotation of the gear so that its teeth line up with its parent, based on the position of the gear and the current rotation of the parent. */ { double p_c = 2 * M_PI * parent->r; /* circumference of parent */ double g_c = 2 * M_PI * g->r; /* circumference of g */ double p_t = p_c * (angle/360.0); /* distance travelled along circumference of parent when moving "angle" degrees along parent. */ double g_rat = p_t / g_c; /* if travelling that distance along circumference of g, ratio of g's circumference travelled. */ double g_th = 360.0 * g_rat; /* that ratio in degrees */ g->th += angle + g_th; } } if (debug_one_gear_p) { compute_rpm (mi, g); return True; } /* If the position we picked for this gear would cause it to already be visible on the screen, give up. This can happen when the train is growing backwards, and we don't want to see gears flash into existence. */ if (g->x - g->r - g->tooth_h < pp->render_right) { if (verbose_p && debug_placement_p) fprintf (stderr, "%s: placement: out of bounds: left\n", progname); pp->debug_position_failures++; return False; } /* If the position we picked for this gear causes it to overlap with any earlier gear in the train, give up. */ { int i; for (i = pp->ngears-1; i >= 0; i--) { gear *og = pp->gears[i]; if (og == g) continue; if (og == parent) continue; if (g->z != og->z) continue; /* Ignore unless on same layer */ /* Collision detection without sqrt: d = sqrt(a^2 + b^2) d^2 = a^2 + b^2 d < r1 + r2 d^2 < (r1 + r2)^2 */ if (((g->x - og->x) * (g->x - og->x) + (g->y - og->y) * (g->y - og->y)) < ((g->r + g->tooth_h + og->r + og->tooth_h) * (g->r + g->tooth_h + og->r + og->tooth_h))) { if (verbose_p && debug_placement_p) fprintf (stderr, "%s: placement: collision with %lu\n", progname, og->id); pp->debug_position_failures++; return False; } } } compute_rpm (mi, g); /* Make deeper gears be darker. */ { double depth = g->z / pp->plane_displacement; double brightness = 1 + (depth / 6); double limit = 0.4; if (brightness < limit) brightness = limit; if (brightness > 1/limit) brightness = 1/limit; g->color[0] *= brightness; g->color[1] *= brightness; g->color[2] *= brightness; g->color2[0] *= brightness; g->color2[1] *= brightness; g->color2[2] *= brightness; } /* If a single frame of animation would cause the gear to rotate by more than 1/2 the size of a single tooth, then it won't look right: the gear will appear to be turning at some lower harmonic of its actual speed. */ { double ratio = g->ratio * spin_speed; double blur_limit = 180.0 / g->nteeth; if (ratio > blur_limit) g->motion_blur_p = 1; if (!coaxial_p) { /* ride until the wheels fall off... */ if (ratio > blur_limit * 0.7) g->wobble += (random() % 2); if (ratio > blur_limit * 0.9) g->wobble += (random() % 2); if (ratio > blur_limit * 1.1) g->wobble += (random() % 2); if (ratio > blur_limit * 1.3) g->wobble += (random() % 2); if (ratio > blur_limit * 1.5) g->wobble += (random() % 2); if (ratio > blur_limit * 1.7) g->wobble += (random() % 2); } } return True; } static void free_gear (gear *g) { if (g->dlist) glDeleteLists (g->dlist, 1); free (g); } /* Make a new gear, place it next to its parent in the scene, with its teeth meshed and the proper velocity. Returns the gear; or 0 if it didn't work. (Call this a bunch of times until either it works, or you decide it's probably not going to.) */ static gear * place_new_gear (ModeInfo *mi, gear *parent, Bool coaxial_p) { pinion_configuration *pp = &pps[MI_SCREEN(mi)]; int loop_count = 0; gear *g = 0; while (1) { loop_count++; if (loop_count >= 100) { if (g) free_gear (g); g = 0; break; } g = new_gear (mi, parent, coaxial_p); if (!g) return 0; /* out of memory? */ if (place_gear (mi, g, parent, coaxial_p)) break; } if (! g) return 0; /* We got a gear, and it is properly positioned. Insert it in the scene. */ if (pp->ngears + 2 >= pp->gears_size) { pp->gears_size += 100; pp->gears = (gear **) realloc (pp->gears, pp->gears_size * sizeof (*pp->gears)); if (! pp->gears) { fprintf (stderr, "%s: out of memory (%d gears)\n", progname, pp->gears_size); } } pp->gears[pp->ngears++] = g; return g; } static void delete_gear (ModeInfo *mi, gear *g); static void push_gear (ModeInfo *mi) { pinion_configuration *pp = &pps[MI_SCREEN(mi)]; gear *g; gear *parent = (pp->ngears <= 0 ? 0 : pp->gears[pp->ngears-1]); Bool tried_coaxial_p = False; Bool coaxial_p = False; Bool last_ditch_coax_p = False; int loop_count = 0; pp->debug_size_failures = 0; pp->debug_position_failures = 0; AGAIN: loop_count++; if (loop_count > 100) abort(); /* we're doomed! */ g = 0; /* If the gears are turning at LUDICROUS SPEED, unhook the train to reset things to a sane velocity. 10,000 RPM at 30 FPS = 5.5 rotations per frame. 1,000 RPM at 30 FPS = 0.5 rotations per frame. 600 RPM at 30 FPS = 3 frames per rotation. 200 RPM at 30 FPS = 9 frames per rotation. 100 RPM at 30 FPS = 18 frames per rotation. 50 RPM at 30 FPS = 36 frames per rotation. 10 RPM at 30 FPS = 3 sec per rotation. 1 RPM at 30 FPS = 30 sec per rotation. .5 RPM at 30 FPS = 1 min per rotation. .1 RPM at 30 FPS = 5 min per rotation. */ if (parent && parent->rpm > max_rpm) { if (verbose_p) { char buf[100]; rpm_string (parent->rpm, buf); fprintf (stderr, "%s: ludicrous speed! %s\n\n", progname, buf); } parent = 0; } /* If the last N gears we've placed have all been motion-blurred, then it's a safe guess that we've wandered off into the woods and aren't coming back. Bail on this train. */ if (pp->current_blur_length >= 10) { if (verbose_p) fprintf (stderr, "%s: it's a blurpocalypse!\n\n", progname); parent = 0; } /* Sometimes, try to make a coaxial gear. */ if (parent && !parent->coax_p && (random() % 40) == 0) { tried_coaxial_p = True; coaxial_p = True; g = place_new_gear (mi, parent, coaxial_p); } /* Try to make a regular gear. */ if (!g) { coaxial_p = False; g = place_new_gear (mi, parent, coaxial_p); } /* If we couldn't make a regular gear, then try to make a coxial gear (unless we already tried that.) */ if (!g && !tried_coaxial_p && parent && !parent->coax_p) { tried_coaxial_p = True; coaxial_p = True; g = place_new_gear (mi, parent, coaxial_p); if (g) last_ditch_coax_p = True; } /* If we couldn't do that either, then the train has hit a dead end: start a new train. */ if (!g) { coaxial_p = False; if (verbose_p) fprintf (stderr, "%s: dead end!\n\n", progname); parent = 0; g = place_new_gear (mi, parent, coaxial_p); } if (! g) { /* Unable to make/place any gears at all! This can happen if we've backed ourself into a corner very near the top-right or bottom-right corner of the growth zone. It's time to add a gear, but there's no room to add one! In that case, let's just wipe all the gears that are in the growth zone and try again. */ int i; if (verbose_p && debug_placement_p) fprintf (stderr, "%s: placement: resetting growth zone! " "failed: %d size, %d pos\n", progname, pp->debug_size_failures, pp->debug_position_failures); for (i = pp->ngears-1; i >= 0; i--) { gear *g = pp->gears[i]; if (g->x - g->r - g->tooth_h < pp->render_left) delete_gear (mi, g); } goto AGAIN; } if (g->coax_p) { if (!parent) abort(); if (g->x != parent->x) abort(); if (g->y != parent->y) abort(); if (g->z == parent->z) abort(); if (g->r == parent->r) abort(); if (g->th != parent->th) abort(); if (g->ratio != parent->ratio) abort(); if (g->rpm != parent->rpm) abort(); } if (verbose_p) { fprintf (stderr, "%s: %5lu ", progname, g->id); fputc ((g->motion_blur_p ? '*' : ' '), stderr); fputc (((g->coax_p && last_ditch_coax_p) ? '2' : g->coax_p ? '1' : ' '), stderr); fprintf (stderr, " %2d%%", (int) (g->r * 2 * 100 / pp->vp_height)); fprintf (stderr, " %2d teeth", (int) g->nteeth); fprintf (stderr, " %3.0f rpm;", g->rpm); { char buf1[50], buf2[50], buf3[100]; *buf1 = 0; *buf2 = 0; *buf3 = 0; if (pp->debug_size_failures) sprintf (buf1, "%3d sz", pp->debug_size_failures); if (pp->debug_position_failures) sprintf (buf2, "%2d pos", pp->debug_position_failures); if (*buf1 || *buf2) sprintf (buf3, " tries: %-7s%s", buf1, buf2); fprintf (stderr, "%-21s", buf3); } if (g->base_p) fprintf (stderr, " RESET %lu", pp->current_length); fprintf (stderr, "\n"); } if (g->base_p) pp->current_length = 1; else pp->current_length++; if (g->motion_blur_p) pp->current_blur_length++; else pp->current_blur_length = 0; } /* Remove the given gear from the scene and free it. */ static void delete_gear (ModeInfo *mi, gear *g) { pinion_configuration *pp = &pps[MI_SCREEN(mi)]; int i; for (i = 0; i < pp->ngears; i++) /* find this gear in the list */ if (pp->gears[i] == g) break; if (pp->gears[i] != g) abort(); for (; i < pp->ngears-1; i++) /* pull later entries forward */ pp->gears[i] = pp->gears[i+1]; pp->gears[i] = 0; pp->ngears--; free_gear (g); } /* Update the position of each gear in the scene. */ static void scroll_gears (ModeInfo *mi) { pinion_configuration *pp = &pps[MI_SCREEN(mi)]; int i; for (i = 0; i < pp->ngears; i++) pp->gears[i]->x -= (scroll_speed * 0.002); /* if the right edge of any gear is off screen to the left, delete it. */ for (i = pp->ngears-1; i >= 0; i--) { gear *g = pp->gears[i]; if (g->x + g->r + g->tooth_h < pp->render_left) delete_gear (mi, g); } /* if the right edge of the last-added gear is left of the right edge of the layout area, add another gear. */ i = 0; while (1) { gear *g = (pp->ngears <= 0 ? 0 : pp->gears[pp->ngears-1]); if (!g || g->x + g->r + g->tooth_h < pp->layout_right) push_gear (mi); else break; i++; if (debug_one_gear_p) break; } /* if (i > 1 && verbose_p) fprintf (stderr, "%s: pushed %d gears\n", progname, i); */ } /* Update the rotation of each gear in the scene. */ static void spin_gears (ModeInfo *mi) { pinion_configuration *pp = &pps[MI_SCREEN(mi)]; int i; for (i = 0; i < pp->ngears; i++) { gear *g = pp->gears[i]; double off = (g->ratio * spin_speed); if (g->th > 0) g->th += off; else g->th -= off; } } /* Run the animation fast (without displaying anything) until the first gear is just about to come on screen. This is to avoid a big delay with a blank screen when -scroll is low. */ static void ffwd (ModeInfo *mi) { pinion_configuration *pp = &pps[MI_SCREEN(mi)]; if (debug_one_gear_p) return; while (1) { gear *g = farthest_gear (mi, True); if (g && g->x - g->r - g->tooth_h/2 <= pp->vp_right * 0.88) break; scroll_gears (mi); } } /* Render one gear in the proper position, creating the gear's display list first if necessary. */ static void draw_gear (ModeInfo *mi, int which) { Bool wire_p = MI_IS_WIREFRAME(mi); pinion_configuration *pp = &pps[MI_SCREEN(mi)]; gear *g = pp->gears[which]; GLfloat th; Bool visible_p = (g->x + g->r + g->tooth_h >= pp->render_left && g->x - g->r - g->tooth_h <= pp->render_right); if (!visible_p && !debug_p) return; if (! g->dlist) { g->dlist = glGenLists (1); if (! g->dlist) { /* I don't know how many display lists a GL implementation is supposed to provide, but hopefully it's more than "a few hundred", or we'll be in trouble... */ check_gl_error ("glGenLists"); abort(); } glNewList (g->dlist, GL_COMPILE); g->polygons = draw_involute_gear (g, (wire_p && debug_p ? 2 : wire_p)); glEndList (); } glPushMatrix(); glTranslatef (g->x, g->y, g->z); if (g->motion_blur_p && !pp->button_down_p) { /* If we're in motion-blur mode, then draw the gear so that each frame rotates it by exactly one half tooth-width, so that it looks flickery around the edges. But, revert to the normal way when the mouse button is down lest the user see overlapping polygons. */ th = g->motion_blur_p * 180.0 / g->nteeth * (g->th > 0 ? 1 : -1); g->motion_blur_p++; } else th = g->th; glRotatef (th, 0, 0, 1); glPushName (g->id); if (! visible_p) mi->polygon_count += draw_involute_schematic (g, wire_p); else { glCallList (g->dlist); mi->polygon_count += g->polygons; } glPopName(); glPopMatrix(); } /* Render all gears. */ static void draw_gears (ModeInfo *mi) { pinion_configuration *pp = &pps[MI_SCREEN(mi)]; Bool wire_p = MI_IS_WIREFRAME(mi); int i; glColor4f (1, 1, 0.8, 1); glInitNames(); for (i = 0; i < pp->ngears; i++) draw_gear (mi, i); /* draw a line connecting gears that are, uh, geared. */ if (debug_p) { static const GLfloat color[4] = {1.0, 0.0, 0.0, 1.0}; GLfloat off = 0.1; GLfloat ox=0, oy=0, oz=0; if (!wire_p) glDisable(GL_LIGHTING); glMaterialfv (GL_FRONT, GL_AMBIENT_AND_DIFFUSE, color); glColor3f (color[0], color[1], color[2]); for (i = 0; i < pp->ngears; i++) { gear *g = pp->gears[i]; glBegin(GL_LINE_STRIP); glVertex3f (g->x, g->y, g->z - off); glVertex3f (g->x, g->y, g->z + off); if (i > 0 && !g->base_p) glVertex3f (ox, oy, oz + off); glEnd(); ox = g->x; oy = g->y; oz = g->z; } if (!wire_p) glEnable(GL_LIGHTING); } } /* Mouse hit detection */ static void find_mouse_gear (ModeInfo *mi) { pinion_configuration *pp = &pps[MI_SCREEN(mi)]; # ifndef HAVE_JWZGLES int screen_width = MI_WIDTH (mi); int screen_height = MI_HEIGHT (mi); GLfloat h = (GLfloat) screen_height / (GLfloat) screen_width; int x, y; int hits; pp->mouse_gear_id = 0; /* Poll mouse position */ { Window r, c; int rx, ry; unsigned int m; XQueryPointer (MI_DISPLAY (mi), MI_WINDOW (mi), &r, &c, &rx, &ry, &x, &y, &m); } if (x < 0 || y < 0 || x > screen_width || y > screen_height) return; /* out of window */ /* Run OpenGL hit detector */ { GLint vp[4]; GLuint selbuf[512]; glSelectBuffer (sizeof(selbuf), selbuf); /* set up "select" mode */ glRenderMode (GL_SELECT); glMatrixMode (GL_PROJECTION); glPushMatrix(); glLoadIdentity(); glGetIntegerv (GL_VIEWPORT, vp); /* save old vp */ gluPickMatrix (x, vp[3]-y, 5, 5, vp); gluPerspective (30.0, 1/h, 1.0, 100.0); /* must match reshape_pinion() */ glMatrixMode (GL_MODELVIEW); draw_gears (mi); /* render into "select" buffer */ glMatrixMode (GL_PROJECTION); /* restore old vp */ glPopMatrix (); glMatrixMode (GL_MODELVIEW); glFlush(); hits = glRenderMode (GL_RENDER); /* done selecting */ if (hits > 0) { int i; GLuint name_count = 0; GLuint *p = (GLuint *) selbuf; GLuint *pnames = 0; GLuint min_z = ~0; for (i = 0; i < hits; i++) { int names = *p++; if (*p < min_z) /* find match closest to screen */ { name_count = names; min_z = *p; pnames = p+2; } p += names+2; } if (name_count > 0) /* take first hit */ pp->mouse_gear_id = pnames[0]; } } #else /* HAVE_JWZGLES */ /* #### not yet implemented */ pp->mouse_gear_id = (pp->ngears > 1 ? pp->gears[1]->id : 0); return; #endif /* HAVE_JWZGLES */ } /* Window management, etc */ ENTRYPOINT void reshape_pinion (ModeInfo *mi, int width, int height) { GLfloat h = (GLfloat) height / (GLfloat) width; pinion_configuration *pp = &pps[MI_SCREEN(mi)]; glViewport (0, 0, (GLint) width, (GLint) height); glMatrixMode(GL_PROJECTION); glLoadIdentity(); gluPerspective (30.0, 1/h, 1.0, 100.0); glMatrixMode(GL_MODELVIEW); glLoadIdentity(); gluLookAt( 0.0, 0.0, 30.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0); glClear(GL_COLOR_BUFFER_BIT); { GLfloat render_width, layout_width; pp->vp_height = 1.0; pp->vp_width = 1/h; pp->vp_left = -pp->vp_width/2; pp->vp_right = pp->vp_width/2; pp->vp_top = pp->vp_height/2; pp->vp_bottom = -pp->vp_height/2; render_width = pp->vp_width * 2; layout_width = pp->vp_width * 0.8 * gear_size; pp->render_left = -render_width/2; pp->render_right = render_width/2; pp->layout_left = pp->render_right; pp->layout_right = pp->layout_left + layout_width; } } ENTRYPOINT Bool pinion_handle_event (ModeInfo *mi, XEvent *event) { pinion_configuration *pp = &pps[MI_SCREEN(mi)]; if (gltrackball_event_handler (event, pp->trackball, MI_WIDTH (mi), MI_HEIGHT (mi), &pp->button_down_p)) return True; else if (event->xany.type == KeyPress) { KeySym keysym; char c = 0; XLookupString (&event->xkey, &c, 1, &keysym, 0); if (c == ' ' && debug_one_gear_p && pp->ngears) { delete_gear (mi, pp->gears[0]); return True; } } return False; } ENTRYPOINT void init_pinion (ModeInfo *mi) { pinion_configuration *pp; if (!pps) { pps = (pinion_configuration *) calloc (MI_NUM_SCREENS(mi), sizeof (pinion_configuration)); if (!pps) { fprintf(stderr, "%s: out of memory\n", progname); exit(1); } } pp = &pps[MI_SCREEN(mi)]; pp->glx_context = init_GL(mi); load_fonts (mi); reshape_pinion (mi, MI_WIDTH(mi), MI_HEIGHT(mi)); clear_gl_error(); /* WTF? sometimes "invalid op" from glViewport! */ pp->ngears = 0; pp->gears_size = 0; pp->gears = 0; pp->plane_displacement = gear_size * 0.1; pp->trackball = gltrackball_init (False); ffwd (mi); } ENTRYPOINT void draw_pinion (ModeInfo *mi) { pinion_configuration *pp = &pps[MI_SCREEN(mi)]; Display *dpy = MI_DISPLAY(mi); Window window = MI_WINDOW(mi); Bool wire_p = MI_IS_WIREFRAME(mi); if (!pp->glx_context) return; glXMakeCurrent(MI_DISPLAY(mi), MI_WINDOW(mi), *(pp->glx_context)); glPushMatrix(); glRotatef(current_device_rotation(), 0, 0, 1); if (!wire_p) { GLfloat pos[4] = {-3.0, 1.0, 1.0, 0.0}; GLfloat amb[4] = { 0.0, 0.0, 0.0, 1.0}; GLfloat dif[4] = { 1.0, 1.0, 1.0, 1.0}; GLfloat spc[4] = { 1.0, 1.0, 1.0, 1.0}; glEnable(GL_LIGHTING); glEnable(GL_LIGHT0); glEnable(GL_DEPTH_TEST); glEnable(GL_CULL_FACE); glLightfv(GL_LIGHT0, GL_POSITION, pos); glLightfv(GL_LIGHT0, GL_AMBIENT, amb); glLightfv(GL_LIGHT0, GL_DIFFUSE, dif); glLightfv(GL_LIGHT0, GL_SPECULAR, spc); } if (!pp->button_down_p) { if (!debug_one_gear_p || pp->ngears == 0) scroll_gears (mi); spin_gears (mi); } glShadeModel(GL_SMOOTH); glEnable(GL_DEPTH_TEST); glEnable(GL_NORMALIZE); glEnable(GL_CULL_FACE); glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glPushMatrix (); { gltrackball_rotate (pp->trackball); mi->polygon_count = 0; glScalef (16, 16, 16); /* map vp_width/height to the screen */ if (debug_one_gear_p) /* zoom in */ glScalef (3, 3, 3); else if (debug_p) /* show the "visible" and "layout" areas */ { GLfloat ow = pp->layout_right - pp->render_left; GLfloat rw = pp->render_right - pp->render_left; GLfloat s = (pp->vp_width / ow) * 0.85; glScalef (s, s, s); glTranslatef (-(ow - rw) / 2, 0, 0); } else { GLfloat s = 1.2; glScalef (s, s, s); /* zoom in a little more */ glRotatef (-35, 1, 0, 0); /* tilt back */ glRotatef ( 8, 0, 1, 0); /* tilt left */ glTranslatef (0.02, 0.1, 0); /* pan up */ } draw_gears (mi); if (debug_p) { if (!wire_p) glDisable(GL_LIGHTING); glColor3f (0.6, 0, 0); glBegin(GL_LINE_LOOP); glVertex3f (pp->render_left, pp->vp_top, 0); glVertex3f (pp->render_right, pp->vp_top, 0); glVertex3f (pp->render_right, pp->vp_bottom, 0); glVertex3f (pp->render_left, pp->vp_bottom, 0); glEnd(); glColor3f (0.4, 0, 0); glBegin(GL_LINES); glVertex3f (pp->vp_left, pp->vp_top, 0); glVertex3f (pp->vp_left, pp->vp_bottom, 0); glVertex3f (pp->vp_right, pp->vp_top, 0); glVertex3f (pp->vp_right, pp->vp_bottom, 0); glEnd(); glColor3f (0, 0.4, 0); glBegin(GL_LINE_LOOP); glVertex3f (pp->layout_left, pp->vp_top, 0); glVertex3f (pp->layout_right, pp->vp_top, 0); glVertex3f (pp->layout_right, pp->vp_bottom, 0); glVertex3f (pp->layout_left, pp->vp_bottom, 0); glEnd(); if (!wire_p) glEnable(GL_LIGHTING); } if (pp->draw_tick++ > 10) /* only do this every N frames */ { pp->draw_tick = 0; find_mouse_gear (mi); } } glPopMatrix (); draw_label (mi); glPopMatrix (); if (mi->fps_p) do_fps (mi); glFinish(); glXSwapBuffers(dpy, window); } XSCREENSAVER_MODULE ("Pinion", pinion) #endif /* USE_GL */ xscreensaver-5.36/hacks/glx/involute.c000644 000767 000024 00000071752 12717747737 020074 0ustar00jwzstaff000000 000000 /* involute, Copyright (c) 2004-2014 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. * * Utilities for rendering OpenGL gears with involute teeth. */ #ifdef HAVE_CONFIG_H # include "config.h" #endif /* HAVE_CONFIG_H */ #include "screenhackI.h" #ifndef HAVE_JWXYZ # include # include #endif #ifdef HAVE_ANDROID # include #endif #ifdef HAVE_JWZGLES # include "jwzgles.h" #endif /* HAVE_JWZGLES */ #include "involute.h" #include "normals.h" #undef countof #define countof(x) (sizeof((x))/sizeof((*x))) /* For debugging: if true then in wireframe, do not abbreviate. */ static Bool wire_all_p = False; static Bool show_normals_p = False; /* Draws an uncapped tube of the given radius extending from top to bottom, with faces pointing either in or out. */ static int draw_ring (int segments, GLfloat r, GLfloat top, GLfloat bottom, GLfloat slope, Bool in_p, Bool wire_p) { int i; int polys = 0; GLfloat width = M_PI * 2 / segments; GLfloat s1 = 1 + ((bottom-top) * slope / 2); GLfloat s2 = 1 - ((bottom-top) * slope / 2); if (top != bottom) { glFrontFace (in_p ? GL_CCW : GL_CW); glBegin (wire_p ? GL_LINES : GL_QUAD_STRIP); for (i = 0; i < segments + (wire_p ? 0 : 1); i++) { GLfloat th = i * width; GLfloat cth = cos(th); GLfloat sth = sin(th); if (in_p) glNormal3f (-cth, -sth, 0); else glNormal3f (cth, sth, 0); glVertex3f (s1 * cth * r, s1 * sth * r, top); glVertex3f (s2 * cth * r, s2 * sth * r, bottom); } polys += segments; glEnd(); } if (wire_p) { glBegin (GL_LINE_LOOP); for (i = 0; i < segments; i++) { GLfloat th = i * width; glVertex3f (cos(th) * r, sin(th) * r, top); } glEnd(); glBegin (GL_LINE_LOOP); for (i = 0; i < segments; i++) { GLfloat th = i * width; glVertex3f (cos(th) * r, sin(th) * r, bottom); } glEnd(); } return polys; } /* Draws a donut-shaped disc between the given radii, with faces pointing either up or down. The first radius may be 0, in which case, a filled disc is drawn. */ static int draw_disc (int segments, GLfloat ra, GLfloat rb, GLfloat z, Bool up_p, Bool wire_p) { int i; int polys = 0; GLfloat width = M_PI * 2 / segments; if (ra < 0) abort(); if (rb <= 0) abort(); if (ra == 0) glFrontFace (up_p ? GL_CW : GL_CCW); else glFrontFace (up_p ? GL_CCW : GL_CW); if (ra == 0) glBegin (wire_p ? GL_LINES : GL_TRIANGLE_FAN); else glBegin (wire_p ? GL_LINES : GL_QUAD_STRIP); glNormal3f (0, 0, (up_p ? -1 : 1)); if (ra == 0 && !wire_p) glVertex3f (0, 0, z); for (i = 0; i < segments + (wire_p ? 0 : 1); i++) { GLfloat th = i * width; GLfloat cth = cos(th); GLfloat sth = sin(th); if (wire_p || ra != 0) glVertex3f (cth * ra, sth * ra, z); glVertex3f (cth * rb, sth * rb, z); } polys += segments; glEnd(); return polys; } /* Draws N thick radial lines between the given radii, with faces pointing either up or down. */ static int draw_spokes (int n, GLfloat thickness, int segments, GLfloat ra, GLfloat rb, GLfloat z1, GLfloat z2, GLfloat slope, Bool wire_p) { int i; int polys = 0; GLfloat width; int segments2 = 0; int insegs, outsegs; int tick; int state; GLfloat s1 = 1 + ((z2-z1) * slope / 2); GLfloat s2 = 1 - ((z2-z1) * slope / 2); if (ra <= 0 || rb <= 0) abort(); segments *= 3; while (segments2 < segments) /* need a multiple of N >= segments */ segments2 += n; /* (yes, this is a moronic way to find that) */ insegs = ((float) (segments2 / n) + 0.5) / thickness; outsegs = (segments2 / n) - insegs; if (insegs <= 0) insegs = 1; if (outsegs <= 0) outsegs = 1; segments2 = (insegs + outsegs) * n; width = M_PI * 2 / segments2; tick = 0; state = 0; for (i = 0; i < segments2; i++, tick++) { GLfloat th1 = i * width; GLfloat th2 = th1 + width; GLfloat cth1 = cos(th1); GLfloat sth1 = sin(th1); GLfloat cth2 = cos(th2); GLfloat sth2 = sin(th2); GLfloat orb = rb; int changed = (i == 0); if (state == 0 && tick == insegs) tick = 0, state = 1, changed = 1; else if (state == 1 && tick == outsegs) tick = 0, state = 0, changed = 1; if ((state == 1 || /* in */ (state == 0 && changed)) && (!wire_p || wire_all_p)) { /* top */ glFrontFace (GL_CCW); glBegin (wire_p ? GL_LINES : GL_QUADS); glNormal3f (0, 0, -1); glVertex3f (s1 * cth1 * ra, s1 * sth1 * ra, z1); glVertex3f (s1 * cth1 * rb, s1 * sth1 * rb, z1); glVertex3f (s1 * cth2 * rb, s1 * sth2 * rb, z1); glVertex3f (s1 * cth2 * ra, s1 * sth2 * ra, z1); polys++; glEnd(); /* bottom */ glFrontFace (GL_CW); glBegin (wire_p ? GL_LINES : GL_QUADS); glNormal3f (0, 0, 1); glVertex3f (s2 * cth1 * ra, s2 * sth1 * ra, z2); glVertex3f (s2 * cth1 * rb, s2 * sth1 * rb, z2); glVertex3f (s2 * cth2 * rb, s2 * sth2 * rb, z2); glVertex3f (s2 * cth2 * ra, s2 * sth2 * ra, z2); polys++; glEnd(); } if (state == 1 && changed) /* entering "in" state */ { /* left */ glFrontFace (GL_CW); glBegin (wire_p ? GL_LINES : GL_QUADS); do_normal (s1 * cth1 * rb, s1 * sth1 * rb, z1, s1 * cth1 * ra, s1 * sth1 * ra, z1, s2 * cth1 * rb, s2 * sth1 * rb, z2); glVertex3f (s1 * cth1 * ra, s1 * sth1 * ra, z1); glVertex3f (s1 * cth1 * rb, s1 * sth1 * rb, z1); glVertex3f (s2 * cth1 * rb, s2 * sth1 * rb, z2); glVertex3f (s2 * cth1 * ra, s2 * sth1 * ra, z2); polys++; glEnd(); } if (state == 0 && changed) /* entering "out" state */ { /* right */ glFrontFace (GL_CCW); glBegin (wire_p ? GL_LINES : GL_QUADS); do_normal (s1 * cth2 * ra, s1 * sth2 * ra, z1, s1 * cth2 * rb, s1 * sth2 * rb, z1, s2 * cth2 * rb, s2 * sth2 * rb, z2); glVertex3f (s1 * cth2 * ra, s1 * sth2 * ra, z1); glVertex3f (s1 * cth2 * rb, s1 * sth2 * rb, z1); glVertex3f (s2 * cth2 * rb, s2 * sth2 * rb, z2); glVertex3f (s2 * cth2 * ra, s2 * sth2 * ra, z2); polys++; glEnd(); } rb = orb; } return polys; } /* Draws some bumps (embedded cylinders) on the gear. */ static int draw_gear_nubs (gear *g, Bool wire_p) { int polys = 0; int i; int steps = (g->size < INVOLUTE_LARGE ? 5 : 20); double r, size, height; GLfloat *cc; int which; GLfloat width, off; if (! g->nubs) return 0; which = involute_biggest_ring (g, &r, &size, &height); size /= 5; height *= 0.7; cc = (which == 1 ? g->color : g->color2); glMaterialfv (GL_FRONT, GL_AMBIENT_AND_DIFFUSE, cc); if (g->inverted_p) r = g->r + size + g->tooth_h; width = M_PI * 2 / g->nubs; off = M_PI / (g->nteeth * 2); /* align first nub with a tooth */ for (i = 0; i < g->nubs; i++) { GLfloat th = (i * width) + off; glPushMatrix(); glRotatef (th * 180 / M_PI, 0, 0, 1); glTranslatef (r, 0, 0); if (g->inverted_p) /* nubs go on the outside rim */ { size = g->thickness / 3; height = (g->r - g->inner_r)/2; glTranslatef (height, 0, 0); glRotatef (90, 0, 1, 0); } if (wire_p && !wire_all_p) polys += draw_ring ((g->size >= INVOLUTE_LARGE ? steps/2 : steps), size, 0, 0, 0, False, wire_p); else { polys += draw_disc (steps, 0, size, -height, True, wire_p); polys += draw_disc (steps, 0, size, height, False, wire_p); polys += draw_ring (steps, size, -height, height, 0, False, wire_p); } glPopMatrix(); } return polys; } /* Draws a much simpler representation of a gear. Returns the number of polygons. */ int draw_involute_schematic (gear *g, Bool wire_p) { int polys = 0; int i; GLfloat width = M_PI * 2 / g->nteeth; if (!wire_p) glDisable(GL_LIGHTING); glColor3f (g->color[0] * 0.6, g->color[1] * 0.6, g->color[2] * 0.6); glBegin (GL_LINES); for (i = 0; i < g->nteeth; i++) { GLfloat th = (i * width) + (width/4); glVertex3f (0, 0, -g->thickness/2); glVertex3f (cos(th) * g->r, sin(th) * g->r, -g->thickness/2); } polys += g->nteeth; glEnd(); glBegin (GL_LINE_LOOP); for (i = 0; i < g->nteeth; i++) { GLfloat th = (i * width) + (width/4); glVertex3f (cos(th) * g->r, sin(th) * g->r, -g->thickness/2); } polys += g->nteeth; glEnd(); if (!wire_p) glEnable(GL_LIGHTING); return polys; } /* Renders all the interior (non-toothy) parts of a gear: the discs, axles, etc. */ static int draw_gear_interior (gear *g, Bool wire_p) { int polys = 0; int steps = g->nteeth * 2; if (steps < 10) steps = 10; if ((wire_p && !wire_all_p) || g->size < INVOLUTE_LARGE) steps /= 2; if (g->size < INVOLUTE_LARGE && steps > 16) steps = 16; /* ring 1 (facing in) is done in draw_gear_teeth */ /* ring 2 (facing in) and disc 2 */ if (g->inner_r2) { GLfloat ra = g->inner_r * 1.04; /* slightly larger than inner_r */ GLfloat rb = g->inner_r2; /* since the points don't line up */ GLfloat za = -g->thickness2/2; GLfloat zb = g->thickness2/2; GLfloat s1 = 1 + (g->thickness2 * g->tooth_slope / 2); GLfloat s2 = 1 - (g->thickness2 * g->tooth_slope / 2); glMaterialfv (GL_FRONT, GL_AMBIENT_AND_DIFFUSE, g->color2); if ((g->coax_p != 1 && !g->inner_r3) || (wire_p && wire_all_p)) polys += /* ring facing in */ draw_ring (steps, rb, za, zb, g->tooth_slope, True, wire_p); if (wire_p && wire_all_p) polys += /* ring facing in */ draw_ring (steps, ra, za, zb, g->tooth_slope, True, wire_p); if (g->spokes) polys += draw_spokes (g->spokes, g->spoke_thickness, steps, ra, rb, za, zb, g->tooth_slope, wire_p); else if (!wire_p || wire_all_p) { polys += /* top plate */ draw_disc (steps, s1*ra, s1*rb, za, True, wire_p); polys += /* bottom plate */ draw_disc (steps, s2*ra, s2*rb, zb, False, wire_p); } } /* ring 3 (facing in and out) and disc 3 */ if (g->inner_r3) { GLfloat ra = g->inner_r2; GLfloat rb = g->inner_r3; GLfloat za = -g->thickness3/2; GLfloat zb = g->thickness3/2; GLfloat s1 = 1 + (g->thickness3 * g->tooth_slope / 2); GLfloat s2 = 1 - (g->thickness3 * g->tooth_slope / 2); glMaterialfv (GL_FRONT, GL_AMBIENT_AND_DIFFUSE, g->color); polys += /* ring facing out */ draw_ring (steps, ra, za, zb, g->tooth_slope, False, wire_p); if (g->coax_p != 1 || (wire_p && wire_all_p)) polys += /* ring facing in */ draw_ring (steps, rb, za, zb, g->tooth_slope, True, wire_p); if (!wire_p || wire_all_p) { polys += /* top plate */ draw_disc (steps, s1*ra, s1*rb, za, True, wire_p); polys += /* bottom plate */ draw_disc (steps, s2*ra, s2*rb, zb, False, wire_p); } } /* axle tube */ if (g->coax_p == 1) { GLfloat cap_height = g->coax_thickness/3; GLfloat ra = (g->inner_r3 ? g->inner_r3 : g->inner_r2 ? g->inner_r2 : g->inner_r); GLfloat za = -(g->thickness/2 + cap_height); GLfloat zb = g->coax_thickness/2 + g->coax_displacement + cap_height; glMaterialfv (GL_FRONT, GL_AMBIENT_AND_DIFFUSE, g->color); if (wire_p && !wire_all_p) steps /= 2; polys += draw_ring (steps, ra, za, zb, g->tooth_slope, False, wire_p); if (!wire_p || wire_all_p) { polys += draw_disc (steps, 0, ra, za, True, wire_p); /* top plate */ polys += draw_disc (steps, 0, ra, zb, False, wire_p); /* bottom plate */ } } return polys; } /* gear_teeth_geometry computes the vertices and normals of the teeth of a gear. This is the heavy lifting: there are a ton of polygons around the perimiter of a gear, and the normals are difficult (not radial or right angles.) It would be nice if we could cache this, but the numbers are different for essentially every gear: - Every gear has a different inner_r, so the vertices of the inner ring (and thus, the triangle fans on the top and bottom faces) are different in a non-scalable way. - If the ratio between tooth_w and tooth_h changes, the normals on the outside edges of the teeth are invalid (this can happen every time we start a new train.) So instead, we rely on OpenGL display lists to do the cacheing for us -- we only compute all these normals once per gear, instead of once per gear per frame. */ typedef struct { int npoints; XYZ *points; XYZ *fnormals; /* face normals */ XYZ *pnormals; /* point normals */ } tooth_face; static void tooth_normals (tooth_face *f, GLfloat tooth_slope) { int i; /* Compute the face normals for each facet. */ for (i = 0; i < f->npoints; i++) { XYZ p1, p2, p3; int a = i; int b = (i == f->npoints-1 ? 0 : i+1); p1 = f->points[a]; p2 = f->points[b]; p3 = p1; p3.x -= (p3.x * tooth_slope); p3.y -= (p3.y * tooth_slope); p3.z++; f->fnormals[i] = calc_normal (p1, p2, p3); } /* From the face normals, compute the vertex normals (by averaging the normals of adjascent faces.) */ for (i = 0; i < f->npoints; i++) { int a = (i == 0 ? f->npoints-1 : i-1); int b = i; XYZ n1 = f->fnormals[a]; /* normal of [i-1 - i] face */ XYZ n2 = f->fnormals[b]; /* normal of [i - i+1] face */ f->pnormals[i].x = (n1.x + n2.x) / 2; f->pnormals[i].y = (n1.y + n2.y) / 2; f->pnormals[i].z = (n1.z + n2.z) / 2; } } static void gear_teeth_geometry (gear *g, tooth_face *orim, /* outer rim (the teeth) */ tooth_face *irim) /* inner rim (the hole) */ { int i; int ppt = 20; /* max points per tooth */ GLfloat width = M_PI * 2 / g->nteeth; GLfloat rh = g->tooth_h; GLfloat tw = width; /* Approximate shape of an "involute" gear tooth. (TH) th0 th2 th4 th6 th8 t10 t12 t14 th16 th18 th20 : : : : : : : : : : : : : : : : : : : : : : r0 ........:..:..:...___________...:..:..:......:......:.. : : : /: : :\ : : : : : : : : / : : : \ : : : : : : : :/ : : : \: : : : : r2 ........:.....@...:....:....:...@..:..:......:......:.. : : @: : : : :@ : : : : (R) ...........:...@.:...:....:....:...:.@..........:......:...... : :@ : : : : : @: : : : r4 ........:..@..:...:....:....:...:..@:........:......:.. : /: : : : : : :\ : : : :/ : : : : : : : \: : : / r6 ......__/..:..:...:....:....:...:..:..\______________/ : : : : : : : : : : : | : : : : : : : | : : : : : : : : : : : : : | : : : : : : : | : : r8 ......__:_____________________________:________________ */ GLfloat r[30]; GLfloat th[30]; GLfloat R = g->r; r[0] = R + (rh * 0.50); r[1] = R + (rh * 0.40); r[2] = R + (rh * 0.25); r[3] = R + (rh * 0.05); r[4] = R - (r[2]-R); r[5] = R - (r[1]-R); r[6] = R - (r[0]-R); r[7] = r[6]; /* unused */ r[8] = g->inner_r; th[0] = -tw * (g->size == INVOLUTE_SMALL ? 0.5 : g->size == INVOLUTE_MEDIUM ? 0.41 : 0.45); th[1] = -tw * 0.375; th[2] = -tw * 0.300; th[3] = -tw * 0.230; th[4] = -tw * (g->nteeth >= 5 ? 0.16 : 0.12); th[5] = -tw * 0.100; th[6] = -tw * (g->size == INVOLUTE_MEDIUM ? 0.1 : 0.04); th[7] = -tw * 0.020; th[8] = 0; th[9] = -th[7]; th[10] = -th[6]; th[11] = -th[5]; th[12] = -th[4]; th[13] = -th[3]; th[14] = -th[2]; th[15] = -th[1]; th[16] = -th[0]; th[17] = width * 0.47; th[18] = width * 0.50; th[19] = width * 0.53; th[20] = th[0] + width; /* unused */ if (g->inverted_p) /* put the teeth on the inside */ { for (i = 0; i < countof(th); i++) th[i] = -th[i]; for (i = 0; i < countof(r); i++) r[i] = R - (r[i] - R); } orim->npoints = 0; orim->points = (XYZ *) calloc(ppt * g->nteeth+1, sizeof(*orim->points)); orim->fnormals = (XYZ *) calloc(ppt * g->nteeth+1, sizeof(*orim->fnormals)); orim->pnormals = (XYZ *) calloc(ppt * g->nteeth+1, sizeof(*orim->pnormals)); irim->npoints = 0; irim->points = (XYZ *) calloc(ppt * g->nteeth+1, sizeof(*irim->points)); irim->fnormals = (XYZ *) calloc(ppt * g->nteeth+1, sizeof(*irim->fnormals)); irim->pnormals = (XYZ *) calloc(ppt * g->nteeth+1, sizeof(*irim->pnormals)); if (!orim->points || !orim->pnormals || !orim->fnormals || !irim->points || !irim->pnormals || !irim->fnormals) { fprintf (stderr, "%s: out of memory\n", progname); exit (1); } /* First, compute the coordinates of every point used for every tooth. */ for (i = 0; i < g->nteeth; i++) { GLfloat TH = (i * width) + (width/4); int oon = orim->npoints; int oin = irim->npoints; # undef PUSH # define PUSH(OPR,IPR,PTH) \ orim->points[orim->npoints].x = cos(TH+th[(PTH)]) * r[(OPR)]; \ orim->points[orim->npoints].y = sin(TH+th[(PTH)]) * r[(OPR)]; \ orim->npoints++; \ irim->points[irim->npoints].x = cos(TH+th[(PTH)]) * r[(IPR)]; \ irim->points[irim->npoints].y = sin(TH+th[(PTH)]) * r[(IPR)]; \ irim->npoints++ switch (g->size) { case INVOLUTE_SMALL: PUSH(6, 8, 0); /* tooth left 1 */ PUSH(0, 8, 8); /* tooth top middle */ break; case INVOLUTE_MEDIUM: PUSH(6, 8, 0); /* tooth left 1 */ PUSH(0, 8, 6); /* tooth top left */ PUSH(0, 8, 10); /* tooth top right */ PUSH(6, 8, 16); /* tooth right 6 */ break; case INVOLUTE_LARGE: PUSH(6, 8, 0); /* tooth left 1 */ PUSH(4, 8, 2); /* tooth left 3 */ PUSH(2, 8, 4); /* tooth left 5 */ PUSH(0, 8, 6); /* tooth top left */ PUSH(0, 8, 10); /* tooth top right */ PUSH(2, 8, 12); /* tooth right 1 */ PUSH(4, 8, 14); /* tooth right 3 */ PUSH(6, 8, 16); /* tooth right 5 */ PUSH(6, 8, 18); /* gap top */ break; case INVOLUTE_HUGE: PUSH(6, 8, 0); /* tooth left 1 */ PUSH(5, 8, 1); /* tooth left 2 */ PUSH(4, 8, 2); /* tooth left 3 */ PUSH(3, 8, 3); /* tooth left 4 */ PUSH(2, 8, 4); /* tooth left 5 */ PUSH(1, 8, 5); /* tooth left 6 */ PUSH(0, 8, 6); /* tooth top left */ PUSH(0, 8, 8); /* tooth top left */ PUSH(0, 8, 10); /* tooth top right */ PUSH(1, 8, 11); /* tooth top right */ PUSH(2, 8, 12); /* tooth right 1 */ PUSH(3, 8, 13); /* tooth right 2 */ PUSH(4, 8, 14); /* tooth right 3 */ PUSH(5, 8, 15); /* tooth right 4 */ PUSH(6, 8, 16); /* tooth right 5 */ PUSH(6, 8, 17); /* tooth right 6 */ PUSH(6, 8, 18); /* gap top */ PUSH(6, 8, 19); /* gap top */ break; default: abort(); } # undef PUSH if (i == 0 && orim->npoints > ppt) abort(); /* go update "ppt"! */ if (g->inverted_p) { int start, end, j; start = oon; end = orim->npoints; for (j = 0; j < (end-start)/2; j++) { XYZ swap = orim->points[end-j-1]; orim->points[end-j-1] = orim->points[start+j]; orim->points[start+j] = swap; } start = oin; end = irim->npoints; for (j = 0; j < (end-start)/2; j++) { XYZ swap = irim->points[end-j-1]; irim->points[end-j-1] = irim->points[start+j]; irim->points[start+j] = swap; } } } tooth_normals (orim, g->tooth_slope); tooth_normals (irim, 0); if (g->inverted_p) /* flip the normals */ { for (i = 0; i < orim->npoints; i++) { orim->fnormals[i].x = -orim->fnormals[i].x; orim->fnormals[i].y = -orim->fnormals[i].y; orim->fnormals[i].z = -orim->fnormals[i].z; orim->pnormals[i].x = -orim->pnormals[i].x; orim->pnormals[i].y = -orim->pnormals[i].y; orim->pnormals[i].z = -orim->pnormals[i].z; } for (i = 0; i < irim->npoints; i++) { irim->fnormals[i].x = -irim->fnormals[i].x; irim->fnormals[i].y = -irim->fnormals[i].y; irim->fnormals[i].z = -irim->fnormals[i].z; irim->pnormals[i].x = -irim->pnormals[i].x; irim->pnormals[i].y = -irim->pnormals[i].y; irim->pnormals[i].z = -irim->pnormals[i].z; } } } /* Which of the gear's inside rings is the biggest? */ int involute_biggest_ring (gear *g, double *posP, double *sizeP, double *heightP) { double r0 = (g->r - g->tooth_h/2); double r1 = g->inner_r; double r2 = g->inner_r2; double r3 = g->inner_r3; double w1 = (r1 ? r0 - r1 : r0); double w2 = (r2 ? r1 - r2 : 0); double w3 = (r3 ? r2 - r3 : 0); double h1 = g->thickness; double h2 = g->thickness2; double h3 = g->thickness3; if (g->spokes) w2 = 0; if (w1 > w2 && w1 > w3) { if (posP) *posP = (r0+r1)/2; if (sizeP) *sizeP = w1; if (heightP) *heightP = h1; return 0; } else if (w2 > w1 && w2 > w3) { if (posP) *posP = (r1+r2)/2; if (sizeP) *sizeP = w2; if (heightP) *heightP = h2; return 1; } else { if (posP) *posP = (r2+r3)/2; if (sizeP) *sizeP = w3; if (heightP) *heightP = h3; return 1; } } /* Renders all teeth of a gear. */ static int draw_gear_teeth (gear *g, Bool wire_p) { int polys = 0; int i; GLfloat z1 = -g->thickness/2; GLfloat z2 = g->thickness/2; GLfloat s1 = 1 + (g->thickness * g->tooth_slope / 2); GLfloat s2 = 1 - (g->thickness * g->tooth_slope / 2); tooth_face orim, irim; gear_teeth_geometry (g, &orim, &irim); glMaterialfv (GL_FRONT, GL_AMBIENT_AND_DIFFUSE, g->color); /* Draw the outer rim (the teeth) (In wire mode, this draws just the upright lines.) */ glFrontFace (g->inverted_p ? GL_CCW : GL_CW); glBegin (wire_p ? GL_LINES : GL_QUAD_STRIP); for (i = 0; i < orim.npoints; i++) { glNormal3f (orim.pnormals[i].x, orim.pnormals[i].y, orim.pnormals[i].z); glVertex3f (s1*orim.points[i].x, s1*orim.points[i].y, z1); glVertex3f (s2*orim.points[i].x, s2*orim.points[i].y, z2); /* Show the face normal vectors */ if (0&&wire_p && show_normals_p) { XYZ n = orim.fnormals[i]; int a = i; int b = (i == orim.npoints-1 ? 0 : i+1); GLfloat x = (orim.points[a].x + orim.points[b].x) / 2; GLfloat y = (orim.points[a].y + orim.points[b].y) / 2; GLfloat z = (z1 + z2) / 2; glVertex3f (x, y, z); glVertex3f (x + n.x, y + n.y, z + n.z); } /* Show the vertex normal vectors */ if (wire_p && show_normals_p) { XYZ n = orim.pnormals[i]; GLfloat x = orim.points[i].x; GLfloat y = orim.points[i].y; GLfloat z = (z1 + z2) / 2; glVertex3f (x, y, z); glVertex3f (x + n.x, y + n.y, z + n.z); } } if (!wire_p) /* close the quad loop */ { glNormal3f (orim.pnormals[0].x, orim.pnormals[0].y, orim.pnormals[0].z); glVertex3f (s1*orim.points[0].x, s1*orim.points[0].y, z1); glVertex3f (s2*orim.points[0].x, s2*orim.points[0].y, z2); } polys += orim.npoints; glEnd(); /* Draw the outer rim circles, in wire mode */ if (wire_p) { glBegin (GL_LINE_LOOP); for (i = 0; i < orim.npoints; i++) glVertex3f (s1*orim.points[i].x, s1*orim.points[i].y, z1); glEnd(); glBegin (GL_LINE_LOOP); for (i = 0; i < orim.npoints; i++) glVertex3f (s2*orim.points[i].x, s2*orim.points[i].y, z2); glEnd(); } /* Draw the inner rim (the hole) (In wire mode, this draws just the upright lines.) */ glFrontFace (g->inverted_p ? GL_CW : GL_CCW); glBegin (wire_p ? GL_LINES : GL_QUAD_STRIP); for (i = 0; i < irim.npoints; i++) { glNormal3f(-irim.pnormals[i].x, -irim.pnormals[i].y,-irim.pnormals[i].z); glVertex3f (s1*irim.points[i].x, s1*irim.points[i].y, z1); glVertex3f (s2*irim.points[i].x, s2*irim.points[i].y, z2); /* Show the face normal vectors */ if (wire_p && show_normals_p) { XYZ n = irim.fnormals[i]; int a = i; int b = (i == irim.npoints-1 ? 0 : i+1); GLfloat x = (irim.points[a].x + irim.points[b].x) / 2; GLfloat y = (irim.points[a].y + irim.points[b].y) / 2; GLfloat z = (z1 + z2) / 2; glVertex3f (x, y, z); glVertex3f (x - n.x, y - n.y, z); } /* Show the vertex normal vectors */ if (wire_p && show_normals_p) { XYZ n = irim.pnormals[i]; GLfloat x = irim.points[i].x; GLfloat y = irim.points[i].y; GLfloat z = (z1 + z2) / 2; glVertex3f (x, y, z); glVertex3f (x - n.x, y - n.y, z); } } if (!wire_p) /* close the quad loop */ { glNormal3f (-irim.pnormals[0].x,-irim.pnormals[0].y,-irim.pnormals[0].z); glVertex3f (s1*irim.points[0].x, s1*irim.points[0].y, z1); glVertex3f (s2*irim.points[0].x, s2*irim.points[0].y, z2); } polys += irim.npoints; glEnd(); /* Draw the inner rim circles, in wire mode */ if (wire_p) { glBegin (GL_LINE_LOOP); for (i = 0; i < irim.npoints; i++) glVertex3f (irim.points[i].x, irim.points[i].y, z1); glEnd(); glBegin (GL_LINE_LOOP); for (i = 0; i < irim.npoints; i++) glVertex3f (irim.points[i].x, irim.points[i].y, z2); glEnd(); } /* Draw the side (the flat bit) */ if (!wire_p || wire_all_p) { GLfloat z; if (irim.npoints != orim.npoints) abort(); for (z = z1; z <= z2; z += z2-z1) { GLfloat s = (z == z1 ? s1 : s2); glFrontFace (((z == z1) ^ g->inverted_p) ? GL_CCW : GL_CW); glNormal3f (0, 0, z); glBegin (wire_p ? GL_LINES : GL_QUAD_STRIP); for (i = 0; i < orim.npoints; i++) { glVertex3f (s*orim.points[i].x, s*orim.points[i].y, z); glVertex3f (s*irim.points[i].x, s*irim.points[i].y, z); } if (!wire_p) /* close the quad loop */ { glVertex3f (s*orim.points[0].x, s*orim.points[0].y, z); glVertex3f (s*irim.points[0].x, s*irim.points[0].y, z); } polys += orim.npoints; glEnd(); } } free (irim.points); free (irim.fnormals); free (irim.pnormals); free (orim.points); free (orim.fnormals); free (orim.pnormals); return polys; } /* Render one gear, unrotated at 0,0. Returns the number of polygons. */ int draw_involute_gear (gear *g, Bool wire_p) { int polys = 0; static const GLfloat spec[4] = {1.0, 1.0, 1.0, 1.0}; GLfloat shiny = 128.0; glMaterialfv (GL_FRONT, GL_SPECULAR, spec); glMateriali (GL_FRONT, GL_SHININESS, shiny); glMaterialfv (GL_FRONT, GL_AMBIENT_AND_DIFFUSE, g->color); glColor3f (g->color[0], g->color[1], g->color[2]); if (wire_p > 1) polys += draw_involute_schematic (g, wire_p); else { glPushMatrix(); glRotatef (g->wobble, 1, 0, 0); polys += draw_gear_teeth (g, wire_p); polys += draw_gear_interior (g, wire_p); polys += draw_gear_nubs (g, wire_p); glPopMatrix(); } return polys; } xscreensaver-5.36/hacks/glx/boing.c000644 000767 000024 00000041322 12705564672 017303 0ustar00jwzstaff000000 000000 /* boing, Copyright (c) 2005-2014 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. * * A clone of the Amiga 1000 "Boing" demo. This was the first graphics demo * for the Amiga, written by Dale Luck and RJ Mical during a break at the 1984 * Consumer Electronics Show (or so the legend goes.) The boing ball was * briefly the official logo of Amiga Inc., until they were bought by * Commodore later that year. * * With no arguments, this program looks a lot like the original Amiga demo. * With "-smooth -lighting", it looks... less old. * * The amiga version made noise when the ball hit the walls. This version * does not, obviously. */ #define DEFAULTS "*delay: 30000 \n" \ "*showFPS: False \n" \ "*wireframe: False \n" \ # define refresh_boing 0 # define release_boing 0 #undef countof #define countof(x) (sizeof((x))/sizeof((*x))) #include "xlockmore.h" #include "gltrackball.h" #include #ifdef USE_GL /* whole file */ #define DEF_SPIN "True" #define DEF_LIGHTING "False" #define DEF_SMOOTH "False" #define DEF_SCANLINES "True" #define DEF_SPEED "1.0" #define DEF_BALL_SIZE "0.5" #define DEF_ANGLE "15" #define DEF_MERIDIANS "16" #define DEF_PARALLELS "8" #define DEF_TILES "12" #define DEF_THICKNESS "0.05" #define DEF_BALL_COLOR1 "#CC1919" #define DEF_BALL_COLOR2 "#F2F2F2" #define DEF_GRID_COLOR "#991999" #define DEF_SHADOW_COLOR "#303030" #define DEF_BACKGROUND "#8C8C8C" typedef struct { GLfloat x, y, z; } XYZ; typedef struct { GLXContext *glx_context; trackball_state *trackball; Bool button_down_p; GLuint ball_list; double ball_x, ball_y, ball_z, ball_th; double ball_dx, ball_dy, ball_dz, ball_dth; double ball_ddx, ball_ddy, ball_ddz; GLfloat ball_color1[4], ball_color2[4], grid_color[4]; GLfloat bg_color[4], shadow_color[4]; GLfloat lightpos[4]; } boing_configuration; static boing_configuration *bps = NULL; static Bool spin; static Bool lighting_p; static Bool smooth_p; static Bool scanlines_p; static GLfloat speed; static int angle; static GLfloat ball_size; static unsigned int meridians; static unsigned int parallels; static unsigned int tiles; static GLfloat thickness; static char *ball_color1_str, *ball_color2_str, *grid_color_str, *shadow_str, *bg_str; static XrmOptionDescRec opts[] = { { "-spin", ".spin", XrmoptionNoArg, "True" }, { "+spin", ".spin", XrmoptionNoArg, "False" }, { "-lighting", ".lighting", XrmoptionNoArg, "True" }, { "+lighting", ".lighting", XrmoptionNoArg, "False" }, { "-smooth", ".smooth", XrmoptionNoArg, "True" }, { "+smooth", ".smooth", XrmoptionNoArg, "False" }, { "-scanlines", ".scanlines", XrmoptionNoArg, "True" }, { "+scanlines", ".scanlines", XrmoptionNoArg, "False" }, { "-speed", ".speed", XrmoptionSepArg, 0 }, { "-angle", ".angle", XrmoptionSepArg, 0 }, { "-size", ".ballSize", XrmoptionSepArg, 0 }, { "-meridians", ".meridians", XrmoptionSepArg, 0 }, { "-parallels", ".parallels", XrmoptionSepArg, 0 }, { "-tiles", ".tiles", XrmoptionSepArg, 0 }, { "-thickness", ".thickness", XrmoptionSepArg, 0 }, { "-ball-color1",".ballColor1",XrmoptionSepArg, 0 }, { "-ball-color2",".ballColor2",XrmoptionSepArg, 0 }, { "-grid-color", ".gridColor", XrmoptionSepArg, 0 }, { "-shadow-color",".shadowColor",XrmoptionSepArg, 0 }, { "-background", ".boingBackground",XrmoptionSepArg, 0 }, { "-bg", ".boingBackground",XrmoptionSepArg, 0 }, }; static argtype vars[] = { {&spin, "spin", "Spin", DEF_SPIN, t_Bool}, {&lighting_p,"lighting", "Lighting", DEF_LIGHTING, t_Bool}, {&smooth_p, "smooth", "Smooth", DEF_SMOOTH, t_Bool}, {&scanlines_p,"scanlines","Scanlines", DEF_SCANLINES, t_Bool}, {&speed, "speed", "Speed", DEF_SPEED, t_Float}, {&angle, "angle", "Angle", DEF_ANGLE, t_Int}, {&ball_size, "ballSize", "BallSize", DEF_BALL_SIZE, t_Float}, {&meridians, "meridians", "meridians", DEF_MERIDIANS, t_Int}, {¶llels, "parallels", "parallels", DEF_PARALLELS, t_Int}, {&tiles, "tiles", "Tiles", DEF_TILES, t_Int}, {&thickness, "thickness", "Thickness", DEF_THICKNESS, t_Float}, {&ball_color1_str, "ballColor1", "BallColor1", DEF_BALL_COLOR1, t_String}, {&ball_color2_str, "ballColor2", "BallColor2", DEF_BALL_COLOR2, t_String}, {&grid_color_str, "gridColor", "GridColor", DEF_GRID_COLOR, t_String}, {&shadow_str, "shadowColor","ShadowColor",DEF_SHADOW_COLOR,t_String}, /* dammit, -background is too magic... */ {&bg_str, "boingBackground", "Background", DEF_BACKGROUND, t_String}, }; ENTRYPOINT ModeSpecOpt boing_opts = {countof(opts), opts, countof(vars), vars, NULL}; static void parse_color (ModeInfo *mi, const char *name, const char *s, GLfloat *a) { XColor c; a[3] = 1.0; /* alpha */ if (! XParseColor (MI_DISPLAY(mi), MI_COLORMAP(mi), s, &c)) { fprintf (stderr, "%s: can't parse %s color %s", progname, name, s); exit (1); } a[0] = c.red / 65536.0; a[1] = c.green / 65536.0; a[2] = c.blue / 65536.0; } static void draw_grid (ModeInfo *mi) { boing_configuration *bp = &bps[MI_SCREEN(mi)]; int x, y; GLfloat t2 = (GLfloat) tiles / 2; GLfloat s = 1.0 / (tiles + thickness); GLfloat z = 0; GLfloat lw = MI_HEIGHT(mi) * 0.06 * thickness; glMaterialfv (GL_FRONT, GL_AMBIENT_AND_DIFFUSE, bp->grid_color); glColor3fv (bp->grid_color); glPushMatrix(); glScalef(s, s, s); glTranslatef (-t2, -t2, 0); glLineWidth (lw); glBegin (GL_LINES); for (y = 0; y <= tiles; y++) { glVertex3f (0, y, z); glVertex3f (tiles, y, z); /*mi->polygon_count++;*/ } for (x = 0; x <= tiles; x++) { glVertex3f (x, tiles, z); glVertex3f (x, 0, z); /*mi->polygon_count++;*/ } glEnd(); glPopMatrix(); } static void draw_box (ModeInfo *mi) { /* boing_configuration *bp = &bps[MI_SCREEN(mi)]; */ glPushMatrix(); glTranslatef (0, 0, -0.5); /* glFrontFace (GL_CCW);*/ draw_grid (mi); glPopMatrix(); glPushMatrix(); glRotatef (90, 1, 0, 0); glTranslatef (0, 0, 0.5); /* glFrontFace (GL_CW);*/ draw_grid (mi); glPopMatrix(); } static void draw_ball (ModeInfo *mi) { boing_configuration *bp = &bps[MI_SCREEN(mi)]; int wire = MI_IS_WIREFRAME(mi); int x, y; int xx = meridians; int yy = parallels; int scale = (smooth_p ? 5 : 1); if (lighting_p && !wire) glEnable (GL_LIGHTING); if (parallels < 3) scale *= 2; xx *= scale; yy *= scale; glFrontFace (GL_CW); glPushMatrix(); glTranslatef (bp->ball_x, bp->ball_y, bp->ball_z); glScalef (ball_size, ball_size, ball_size); glRotatef (-angle, 0, 0, 1); glRotatef (bp->ball_th, 0, 1, 0); for (y = 0; y < yy; y++) { GLfloat thy0 = y * (M_PI * 2) / (yy * 2) + M_PI_2; GLfloat thy1 = (y+1) * (M_PI * 2) / (yy * 2) + M_PI_2; for (x = 0; x < xx; x++) { GLfloat thx0 = x * (M_PI * 2) / xx; GLfloat thx1 = (x+1) * (M_PI * 2) / xx; XYZ p; Bool bgp = ((x/scale) & 1) ^ ((y/scale) & 1); if (wire && bgp) continue; glMaterialfv (GL_FRONT, GL_AMBIENT_AND_DIFFUSE, (bgp ? bp->ball_color2 : bp->ball_color1)); glColor3fv (bgp ? bp->ball_color2 : bp->ball_color1); glBegin (wire ? GL_LINE_LOOP : GL_QUADS); if (!smooth_p) { p.x = cos((thy0+thy1)/2) * cos((thx0+thx1)/2); p.y = sin((thy0+thy1)/2); p.z = cos((thy0+thy1)/2) * sin((thx0+thx1)/2); glNormal3f (-p.x, -p.y, -p.z); } p.x = cos(thy0) * cos(thx0) / 2; p.y = sin(thy0) / 2; p.z = cos(thy0) * sin(thx0) / 2; if (smooth_p) glNormal3f (-p.x, -p.y, -p.z); glVertex3f (p.x, p.y, p.z); p.x = cos(thy1) * cos(thx0) / 2; p.y = sin(thy1) / 2; p.z = cos(thy1) * sin(thx0) / 2; if (smooth_p) glNormal3f (-p.x, -p.y, -p.z); glVertex3f (p.x, p.y, p.z); p.x = cos(thy1) * cos(thx1) / 2; p.y = sin(thy1) / 2; p.z = cos(thy1) * sin(thx1) / 2; if (smooth_p) glNormal3f (-p.x, -p.y, -p.z); glVertex3f (p.x, p.y, p.z); p.x = cos(thy0) * cos(thx1) / 2; p.y = sin(thy0) / 2; p.z = cos(thy0) * sin(thx1) / 2; if (smooth_p) glNormal3f (-p.x, -p.y, -p.z); glVertex3f (p.x, p.y, p.z); glEnd (); mi->polygon_count++; } } glPopMatrix(); if (lighting_p && !wire) glDisable(GL_LIGHTING); } static void draw_shadow (ModeInfo *mi) { boing_configuration *bp = &bps[MI_SCREEN(mi)]; int wire = MI_IS_WIREFRAME(mi); GLfloat xoff = 0.14; GLfloat yoff = 0.07; int y; int yy = parallels; int scale = (smooth_p ? 5 : 1); if (lighting_p && !wire) glEnable (GL_BLEND); if (parallels < 3) scale *= 2; yy *= scale; glPushMatrix(); glTranslatef (bp->ball_x + xoff, bp->ball_y + yoff, -0.49); glScalef (ball_size, ball_size, ball_size); glRotatef (-angle, 0, 0, 1); glMaterialfv (GL_FRONT, GL_AMBIENT_AND_DIFFUSE, bp->shadow_color); glColor4fv (bp->shadow_color); glFrontFace (GL_CCW); glNormal3f (0, 0, 1); glBegin (wire ? GL_LINE_LOOP : GL_TRIANGLE_FAN); if (!wire) glVertex3f (0, 0, 0); for (y = 0; y < yy*2+1; y++) { GLfloat thy0 = y * (M_PI * 2) / (yy * 2) + M_PI_2; glVertex3f (cos(thy0) / 2, sin(thy0) / 2, 0); mi->polygon_count++; } glEnd (); glPopMatrix(); if (lighting_p && !wire) glDisable (GL_BLEND); } static void draw_scanlines (ModeInfo *mi) { /* boing_configuration *bp = &bps[MI_SCREEN(mi)]; */ int wire = MI_IS_WIREFRAME(mi); int w = MI_WIDTH(mi); int h = MI_HEIGHT(mi); if (h <= 300) return; if (!wire) { glEnable (GL_BLEND); glDisable (GL_DEPTH_TEST); } glMatrixMode(GL_PROJECTION); glPushMatrix(); { glLoadIdentity(); glMatrixMode(GL_MODELVIEW); glPushMatrix(); { int lh, ls; int y; glLoadIdentity(); glOrtho (0, w, 0, h, -1, 1); if (h > 500) lh = 4, ls = 4; else if (h > 300) lh = 2, ls = 1; else lh = 1, ls = 1; if (lh == 1) glDisable (GL_BLEND); glLineWidth (lh); glColor4f (0, 0, 0, 0.3); glBegin(GL_LINES); for (y = 0; y < h; y += lh + ls) { glVertex3f (0, y, 0); glVertex3f (w, y, 0); } glEnd(); } glPopMatrix(); } glMatrixMode(GL_PROJECTION); glPopMatrix(); glMatrixMode(GL_MODELVIEW); if (!wire) { glDisable (GL_BLEND); glEnable (GL_DEPTH_TEST); } } static void tick_physics (ModeInfo *mi) { boing_configuration *bp = &bps[MI_SCREEN(mi)]; GLfloat s2 = ball_size / 2; GLfloat max = 0.5 - s2; GLfloat min = -max; bp->ball_th += bp->ball_dth; while (bp->ball_th > 360) bp->ball_th -= 360; while (bp->ball_th < 0) bp->ball_th += 360; bp->ball_dx += bp->ball_ddx; bp->ball_x += bp->ball_dx; if (bp->ball_x < min) bp->ball_x = min, bp->ball_dx = -bp->ball_dx, bp->ball_dth = -bp->ball_dth, bp->ball_dx += (frand(speed/2) - speed); else if (bp->ball_x > max) bp->ball_x = max, bp->ball_dx = -bp->ball_dx, bp->ball_dth = -bp->ball_dth, bp->ball_dx += (frand(speed/2) - speed); bp->ball_dy += bp->ball_ddy; bp->ball_y += bp->ball_dy; if (bp->ball_y < min) bp->ball_y = min, bp->ball_dy = -bp->ball_dy; else if (bp->ball_y > max) bp->ball_y = max, bp->ball_dy = -bp->ball_dy; bp->ball_dz += bp->ball_ddz; bp->ball_z += bp->ball_dz; if (bp->ball_z < min) bp->ball_z = min, bp->ball_dz = -bp->ball_dz; else if (bp->ball_z > max) bp->ball_z = max, bp->ball_dz = -bp->ball_dz; } /* Window management, etc */ ENTRYPOINT void reshape_boing (ModeInfo *mi, int width, int height) { GLfloat h = (GLfloat) height / (GLfloat) width; h *= 4.0 / 3.0; /* Back in the caveman days we couldn't even afford square pixels! */ glViewport (0, 0, (GLint) width, (GLint) 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); glLoadIdentity(); gluLookAt (0.0, 0.0, 8.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0); glClear(GL_COLOR_BUFFER_BIT); } ENTRYPOINT Bool boing_handle_event (ModeInfo *mi, XEvent *event) { boing_configuration *bp = &bps[MI_SCREEN(mi)]; if (gltrackball_event_handler (event, bp->trackball, MI_WIDTH (mi), MI_HEIGHT (mi), &bp->button_down_p)) return True; return False; } ENTRYPOINT void init_boing (ModeInfo *mi) { boing_configuration *bp; int wire = MI_IS_WIREFRAME(mi); if (!bps) { bps = (boing_configuration *) calloc (MI_NUM_SCREENS(mi), sizeof (boing_configuration)); if (!bps) { fprintf(stderr, "%s: out of memory\n", progname); exit(1); } } bp = &bps[MI_SCREEN(mi)]; bp->glx_context = init_GL(mi); if (tiles < 1) tiles = 1; if (smooth_p) { if (meridians < 1) meridians = 1; if (parallels < 1) parallels = 1; } else { if (meridians < 3) meridians = 3; if (parallels < 2) parallels = 2; } if (meridians > 1 && meridians & 1) meridians++; /* odd numbers look bad */ if (thickness <= 0) thickness = 0.001; else if (thickness > 1) thickness = 1; reshape_boing (mi, MI_WIDTH(mi), MI_HEIGHT(mi)); parse_color (mi, "ballColor1", ball_color1_str, bp->ball_color1); parse_color (mi, "ballColor2", ball_color2_str, bp->ball_color2); parse_color (mi, "gridColor", grid_color_str, bp->grid_color); parse_color (mi, "shadowColor", shadow_str, bp->shadow_color); parse_color (mi, "background", bg_str, bp->bg_color); bp->shadow_color[3] = 0.9; glClearColor (bp->bg_color[0], bp->bg_color[1], bp->bg_color[2], 1); if (!wire) { glEnable(GL_DEPTH_TEST); glEnable(GL_CULL_FACE); } bp->lightpos[0] = 0.5; bp->lightpos[1] = 0.5; bp->lightpos[2] = -1; bp->lightpos[3] = 0; if (lighting_p && !wire) { GLfloat amb[4] = {0, 0, 0, 1}; GLfloat dif[4] = {1, 1, 1, 1}; GLfloat spc[4] = {1, 1, 1, 1}; glEnable(GL_LIGHT0); glLightfv(GL_LIGHT0, GL_AMBIENT, amb); glLightfv(GL_LIGHT0, GL_DIFFUSE, dif); glLightfv(GL_LIGHT0, GL_SPECULAR, spc); } glBlendFunc (GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); speed = speed / 800.0; bp->ball_dth = (spin ? -speed * 7 * 360 : 0); bp->ball_x = 0.5 - ((ball_size/2) + frand(1-ball_size)); bp->ball_y = 0.2; bp->ball_dx = speed * 6 + frand(speed); bp->ball_ddy = -speed; bp->ball_dz = speed * 6 + frand(speed); bp->trackball = gltrackball_init (False); } ENTRYPOINT void draw_boing (ModeInfo *mi) { boing_configuration *bp = &bps[MI_SCREEN(mi)]; Display *dpy = MI_DISPLAY(mi); Window window = MI_WINDOW(mi); if (!bp->glx_context) return; glXMakeCurrent(MI_DISPLAY(mi), MI_WINDOW(mi), *(bp->glx_context)); mi->polygon_count = 0; glShadeModel(GL_SMOOTH); glEnable(GL_NORMALIZE); glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); if (! bp->button_down_p) 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); glLightfv (GL_LIGHT0, GL_POSITION, bp->lightpos); glDisable (GL_CULL_FACE); glDisable (GL_DEPTH_TEST); glEnable (GL_LINE_SMOOTH); glHint (GL_LINE_SMOOTH_HINT, GL_NICEST); glBlendFunc (GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); glEnable (GL_BLEND); draw_box (mi); draw_shadow (mi); glEnable (GL_CULL_FACE); glEnable (GL_DEPTH_TEST); draw_ball (mi); if (scanlines_p) draw_scanlines (mi); glPopMatrix (); if (mi->fps_p) do_fps (mi); glFinish(); glXSwapBuffers(dpy, window); } XSCREENSAVER_MODULE ("Boing", boing) #endif /* USE_GL */ xscreensaver-5.36/hacks/glx/texfont.c000644 000767 000024 00000065452 12762445103 017674 0ustar00jwzstaff000000 000000 /* texfonts, Copyright (c) 2005-2016 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. * * Renders X11 fonts into textures for use with OpenGL. * A higher level API is in glxfonts.c. */ #ifdef HAVE_CONFIG_H # include "config.h" #endif #include #include #include #include #ifdef HAVE_COCOA # ifdef USE_IPHONE # include "jwzgles.h" # else # include # endif #elif defined(HAVE_ANDROID) # include # include "jwzgles.h" #else # include # include #endif #ifdef HAVE_JWZGLES # include "jwzgles.h" #endif /* HAVE_JWZGLES */ #ifdef HAVE_XSHM_EXTENSION # include "xshm.h" #endif /* HAVE_XSHM_EXTENSION */ #include "xft.h" #include "resources.h" #include "texfont.h" #include "fps.h" /* for current_device_rotation() */ #undef HAVE_XSHM_EXTENSION /* doesn't actually do any good here */ /* These are in xlock-gl.c */ extern void clear_gl_error (void); extern void check_gl_error (const char *type); /* screenhack.h */ extern char *progname; /* LRU cache of textures, to optimize the case where we're drawing the same strings repeatedly. */ typedef struct texfont_cache texfont_cache; struct texfont_cache { char *string; GLuint texid; XCharStruct extents; int tex_width, tex_height; texfont_cache *next; }; struct texture_font_data { Display *dpy; XftFont *xftfont; int cache_size; texfont_cache *cache; }; #undef countof #define countof(x) (sizeof((x))/sizeof((*x))) /* return the next larger power of 2. */ static int to_pow2 (int i) { static const unsigned int pow2[] = { 1, 2, 4, 8, 16, 32, 64, 128, 256, 512, 1024, 2048, 4096, 8192, 16384, 32768, 65536 }; int j; for (j = 0; j < sizeof(pow2)/sizeof(*pow2); j++) if (pow2[j] >= i) return pow2[j]; abort(); /* too big! */ } /* Given a Pixmap (of screen depth), converts it to an OpenGL luminance mipmap. RGB are averaged to grayscale, and the resulting value is treated as alpha. Pass in the size of the pixmap; the size of the texture is returned (it may be larger, since GL like powers of 2.) We use a screen-depth pixmap instead of a 1bpp bitmap so that if the fonts were drawn with antialiasing, that is preserved. */ static void bitmap_to_texture (Display *dpy, Pixmap p, Visual *visual, int depth, int *wP, int *hP) { Bool mipmap_p = True; int ow = *wP; int oh = *hP; int w2 = to_pow2 (ow); int h2 = to_pow2 (oh); int x, y, max, scale; XImage *image = 0; unsigned char *data = (unsigned char *) calloc (w2 * 2, (h2 + 1)); unsigned char *out = data; /* If either dimension is larger than the supported size, reduce. We still return the old size to keep the caller's math working, but the texture itself will have fewer pixels in it. */ glGetIntegerv (GL_MAX_TEXTURE_SIZE, &max); scale = 1; while (w2 > max || h2 > max) { w2 /= 2; h2 /= 2; scale *= 2; } /* OpenGLES doesn't support GL_INTENSITY, so instead of using a texture with 1 byte per pixel, the intensity value, we have to use 2 bytes per pixel: solid white, and an alpha value. */ # ifdef HAVE_JWZGLES # undef GL_INTENSITY # endif # ifdef GL_INTENSITY GLuint iformat = GL_INTENSITY; GLuint format = GL_LUMINANCE; # else GLuint iformat = GL_LUMINANCE_ALPHA; GLuint format = GL_LUMINANCE_ALPHA; # endif GLuint type = GL_UNSIGNED_BYTE; # ifdef HAVE_XSHM_EXTENSION Bool use_shm = get_boolean_resource (dpy, "useSHM", "Boolean"); XShmSegmentInfo shm_info; # endif /* HAVE_XSHM_EXTENSION */ # ifdef HAVE_XSHM_EXTENSION if (use_shm) { image = create_xshm_image (dpy, visual, depth, ZPixmap, 0, &shm_info, ow, oh); if (image) XShmGetImage (dpy, p, image, 0, 0, ~0L); else use_shm = False; } # endif /* HAVE_XSHM_EXTENSION */ if (!image) image = XGetImage (dpy, p, 0, 0, ow, oh, ~0L, ZPixmap); # ifdef HAVE_JWZGLES /* This would work, but it's wasteful for no benefit. */ mipmap_p = False; # endif # ifdef DUMP_BITMAPS fprintf (stderr, "\n"); # endif for (y = 0; y < h2; y++) { for (x = 0; x < w2; x++) { /* Might be better to average a scale x scale square of source pixels, but at the resolutions we're dealing with, this is probably good enough. */ int sx = x * scale; int sy = y * scale; unsigned long pixel = (sx >= ow || sy >= oh ? 0 : XGetPixel (image, sx, sy)); /* instead of averaging all three channels, let's just use red, and assume it was already grayscale. */ unsigned long r = pixel & visual->red_mask; /* This goofy trick is to make any of RGBA/ABGR/ARGB work. */ pixel = ((r >> 24) | (r >> 16) | (r >> 8) | r) & 0xFF; # ifdef DUMP_BITMAPS if (sx < ow && sy < oh) # ifdef HAVE_JWXYZ fprintf (stderr, "%c", r >= 0xFF000000 ? '#' : r >= 0x88000000 ? '%' : r ? '.' : ' '); # else fprintf (stderr, "%c", r >= 0xFF0000 ? '#' : r >= 0x880000 ? '%' : r ? '.' : ' '); # endif # endif # if 0 /* Debugging checkerboard */ if (sx < ow && sy < oh && (((sx / 4) & 1) ^ ((sy / 4) & 1))) pixel = 0x3F; # endif # ifndef GL_INTENSITY *out++ = 0xFF; /* 2 bytes per pixel (luminance, alpha) */ # endif *out++ = pixel; } # ifdef DUMP_BITMAPS fprintf (stderr, "\n"); # endif } # ifdef HAVE_XSHM_EXTENSION if (use_shm) destroy_xshm_image (dpy, image, &shm_info); else # endif /* HAVE_XSHM_EXTENSION */ XDestroyImage (image); image = 0; if (mipmap_p) gluBuild2DMipmaps (GL_TEXTURE_2D, iformat, w2, h2, format, type, data); else glTexImage2D (GL_TEXTURE_2D, 0, iformat, w2, h2, 0, format, type, data); { char msg[100]; sprintf (msg, "texture font %s (%d x %d)", mipmap_p ? "gluBuild2DMipmaps" : "glTexImage2D", w2, h2); check_gl_error (msg); } free (data); *wP = w2 * scale; *hP = h2 * scale; } /* Loads the font named by the X resource "res" and returns a texture-font object. */ texture_font_data * load_texture_font (Display *dpy, char *res) { int screen = DefaultScreen (dpy); char *font = get_string_resource (dpy, res, "Font"); const char *def1 = "-*-helvetica-medium-r-normal-*-*-180-*-*-*-*-*-*"; const char *def2 = "-*-helvetica-medium-r-normal-*-*-140-*-*-*-*-*-*"; const char *def3 = "fixed"; XftFont *f = 0; texture_font_data *data; int cache_size = get_integer_resource (dpy, "texFontCacheSize", "Integer"); /* Hacks that draw a lot of different strings on the screen simultaneously, like Star Wars, should set this to a larger value for performance. */ if (cache_size <= 0) cache_size = 30; if (!res || !*res) abort(); if (!strcmp (res, "fpsFont")) { /* Kludge. */ def1 = "-*-courier-bold-r-normal-*-*-140-*-*-*-*-*-*"; cache_size = 0; /* No need for a cache on FPS: already throttled. */ } if (!font) font = strdup(def1); f = XftFontOpenXlfd (dpy, screen, font); if (!f && !!strcmp (font, def1)) { fprintf (stderr, "%s: unable to load font \"%s\", using \"%s\"\n", progname, font, def1); free (font); font = strdup (def1); f = XftFontOpenXlfd (dpy, screen, font); } if (!f && !!strcmp (font, def2)) { fprintf (stderr, "%s: unable to load font \"%s\", using \"%s\"\n", progname, font, def2); free (font); font = strdup (def2); f = XftFontOpenXlfd (dpy, screen, font); } if (!f && !!strcmp (font, def3)) { fprintf (stderr, "%s: unable to load font \"%s\", using \"%s\"\n", progname, font, def3); free (font); font = strdup (def3); f = XftFontOpenXlfd (dpy, screen, font); } if (!f) { fprintf (stderr, "%s: unable to load fallback font \"%s\" either!\n", progname, font); abort(); } free (font); font = 0; data = (texture_font_data *) calloc (1, sizeof(*data)); data->dpy = dpy; data->xftfont = f; data->cache_size = cache_size; return data; } /* Measure the string, returning the overall metrics. Newlines and tab stops are honored. Any numbers inside [] will be rendered as a subscript. The origin is at the origin of the first character, so subsequent lines of a multi-line string look like descenders (below baseline). If an XftDraw is supplied, render the string as well, at X,Y. Positive Y is down (X11 style, not OpenGL style). */ static void iterate_texture_string (texture_font_data *data, const char *s, int draw_x, int draw_y, XftDraw *xftdraw, XftColor *xftcolor, XCharStruct *metrics_ret) { int line_height = data->xftfont->ascent + data->xftfont->descent; int subscript_offset = line_height * 0.3; const char *os = s; Bool sub_p = False, osub_p = False; int cw = 0, tabs = 0; XCharStruct overall = { 0, }; int x = 0, y = 0; int ox = x, oy = y; while (1) { if (*s == 0 || *s == '\n' || *s == '\t' || (*s == '[' && isdigit(s[1])) || (*s == ']' && sub_p)) { if (s != os) { XGlyphInfo e; XCharStruct c; int y2 = y; if (sub_p) y2 += subscript_offset; XftTextExtentsUtf8 (data->dpy, data->xftfont, (FcChar8 *) os, (int) (s - os), &e); c.lbearing = -e.x; /* XGlyphInfo to XCharStruct */ c.rbearing = e.width - e.x; c.ascent = e.y; c.descent = e.height - e.y; c.width = e.xOff; # undef MAX # undef MIN # define MAX(A,B) ((A)>(B)?(A):(B)) # define MIN(A,B) ((A)<(B)?(A):(B)) overall.ascent = MAX (overall.ascent, -y2 + c.ascent); overall.descent = MAX (overall.descent, y2 + c.descent); overall.lbearing = MIN (overall.lbearing, (x + c.lbearing)); overall.rbearing = MAX (overall.rbearing, x + c.rbearing); overall.width = MAX (overall.width, x + c.width); x += c.width; # undef MAX # undef MIN } if (*s == '\n') { x = 0; y += line_height; sub_p = False; } else if (*s == '\t') { if (! cw) { /* Measure "m" to determine tab width. */ XGlyphInfo e; XftTextExtentsUtf8 (data->dpy, data->xftfont, (FcChar8 *) "m", 1, &e); cw = e.xOff; if (cw <= 0) cw = 1; tabs = cw * 7; } x = ((x + tabs) / tabs) * tabs; } else if (*s == '[' && isdigit(s[1])) sub_p = True; else if (*s == ']' && sub_p) sub_p = False; if (xftdraw && s != os) XftDrawStringUtf8 (xftdraw, xftcolor, data->xftfont, draw_x + ox, draw_y + oy + (osub_p ? subscript_offset : 0), (FcChar8 *) os, (int) (s - os)); if (!*s) break; os = s+1; ox = x; oy = y; osub_p = sub_p; } s++; } if (metrics_ret) *metrics_ret = overall; } /* Bounding box of the multi-line string, in pixels, and overall ascent/descent of the font. */ void texture_string_metrics (texture_font_data *data, const char *s, XCharStruct *metrics_ret, int *ascent_ret, int *descent_ret) { if (metrics_ret) iterate_texture_string (data, s, 0, 0, 0, 0, metrics_ret); if (ascent_ret) *ascent_ret = data->xftfont->ascent; if (descent_ret) *descent_ret = data->xftfont->descent; } /* Returns a cache entry for this string, with a valid texid. If the returned entry has a string in it, the texture is valid. Otherwise it is an empty entry waiting to be rendered. */ static struct texfont_cache * get_cache (texture_font_data *data, const char *string) { int count = 0; texfont_cache *prev = 0, *prev2 = 0, *curr = 0, *next = 0; if (data->cache) for (prev2 = 0, prev = 0, curr = data->cache, next = curr->next; curr; prev2 = prev, prev = curr, curr = next, next = (curr ? curr->next : 0), count++) { if (!strcmp (string, curr->string)) { if (prev) prev->next = next; /* Unlink from list */ if (curr != data->cache) { curr->next = data->cache; /* Move to front */ data->cache = curr; } return curr; } } /* Made it to the end of the list without a hit. If the cache is full, empty out the last one on the list, and move it to the front. Keep the texid. */ if (count > data->cache_size) { if (!prev) abort(); free (prev->string); prev->string = 0; prev->tex_width = 0; prev->tex_height = 0; memset (&prev->extents, 0, sizeof(prev->extents)); if (prev2) prev2->next = 0; if (prev != data->cache) prev->next = data->cache; data->cache = prev; return prev; } /* Not cached, and cache not full. Add a new entry at the front, and allocate a new texture for it. */ curr = (struct texfont_cache *) calloc (1, sizeof(*prev)); glGenTextures (1, &curr->texid); curr->string = 0; curr->next = data->cache; data->cache = curr; return curr; } /* Renders the given string into the prevailing texture. Returns the metrics of the text, and size of the texture. */ void string_to_texture (texture_font_data *data, const char *string, XCharStruct *extents_ret, int *tex_width_ret, int *tex_height_ret) { Window window = RootWindow (data->dpy, 0); Pixmap p; XGCValues gcv; GC gc; XWindowAttributes xgwa; XRenderColor rcolor; XftColor xftcolor; XftDraw *xftdraw; int width, height; XCharStruct overall; /* Measure the string and create a Pixmap of the proper size. */ XGetWindowAttributes (data->dpy, window, &xgwa); iterate_texture_string (data, string, 0, 0, 0, 0, &overall); width = overall.rbearing - overall.lbearing; height = overall.ascent + overall.descent; if (width <= 0) width = 1; if (height <= 0) height = 1; p = XCreatePixmap (data->dpy, window, width, height, xgwa.depth); gcv.foreground = BlackPixelOfScreen (xgwa.screen); gc = XCreateGC (data->dpy, p, GCForeground, &gcv); XFillRectangle (data->dpy, p, gc, 0, 0, width, height); XFreeGC (data->dpy, gc); /* Render the string into the pixmap. */ rcolor.red = rcolor.green = rcolor.blue = rcolor.alpha = 0xFFFF; XftColorAllocValue (data->dpy, xgwa.visual, xgwa.colormap, &rcolor, &xftcolor); xftdraw = XftDrawCreate (data->dpy, p, xgwa.visual, xgwa.colormap); iterate_texture_string (data, string, -overall.lbearing, overall.ascent, xftdraw, &xftcolor, 0); XftDrawDestroy (xftdraw); XftColorFree (data->dpy, xgwa.visual, xgwa.colormap, &xftcolor); /* Copy the bits from the Pixmap into a texture, unless it's cached. */ bitmap_to_texture (data->dpy, p, xgwa.visual, xgwa.depth, &width, &height); XFreePixmap (data->dpy, p); if (extents_ret) *extents_ret = overall; if (tex_width_ret) *tex_width_ret = width; if (tex_height_ret) *tex_height_ret = height; } /* Set the various OpenGL parameters for properly rendering things with a texture generated by string_to_texture(). */ void enable_texture_string_parameters (void) { glEnable (GL_TEXTURE_2D); /* Texture-rendering parameters to make font pixmaps tolerable to look at. */ glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_LINEAR); /* LOD bias is part of OpenGL 1.4. GL_EXT_texture_lod_bias has been present since the original iPhone. */ # if !defined(GL_TEXTURE_LOD_BIAS) && defined(GL_TEXTURE_LOD_BIAS_EXT) # define GL_TEXTURE_LOD_BIAS GL_TEXTURE_LOD_BIAS_EXT # endif # ifdef GL_TEXTURE_LOD_BIAS glTexParameterf (GL_TEXTURE_2D, GL_TEXTURE_LOD_BIAS, 0.25); # endif clear_gl_error(); /* invalid enum on iPad 3 */ glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT); glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT); /* Don't write the transparent parts of the quad into the depth buffer. */ glAlphaFunc (GL_GREATER, 0.01); glEnable (GL_ALPHA_TEST); glEnable (GL_BLEND); glDisable (GL_LIGHTING); glDisable (GL_TEXTURE_GEN_S); glDisable (GL_TEXTURE_GEN_T); glBlendFunc (GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); } /* Draws the string in the scene at the origin. Newlines and tab stops are honored. Any numbers inside [] will be rendered as a subscript. Assumes the font has been loaded as with load_texture_font(). The origin is at the origin of the first character, so subsequent lines of a multi-line string are below that. */ void print_texture_string (texture_font_data *data, const char *string) { XCharStruct overall; int tex_width, tex_height; texfont_cache *cache; GLint old_texture; if (!*string) return; clear_gl_error (); /* Save the prevailing texture ID, and bind ours. Restored at the end. */ glGetIntegerv (GL_TEXTURE_BINDING_2D, &old_texture); cache = get_cache (data, string); glBindTexture (GL_TEXTURE_2D, cache->texid); check_gl_error ("texture font binding"); /* Measure the string and make a pixmap that will fit it, unless it's cached. */ if (cache->string) { overall = data->cache->extents; tex_width = data->cache->tex_width; tex_height = data->cache->tex_height; } else string_to_texture (data, string, &overall, &tex_width, &tex_height); { int ofront, oblend; Bool alpha_p, blend_p, light_p, gen_s_p, gen_t_p; GLfloat omatrix[16]; GLfloat qx0, qy0, qx1, qy1; GLfloat tx0, ty0, tx1, ty1; /* If face culling is not enabled, draw front and back. */ Bool draw_back_face_p = !glIsEnabled (GL_CULL_FACE); /* Save the prevailing texture environment, and set up ours. */ glGetIntegerv (GL_FRONT_FACE, &ofront); glGetIntegerv (GL_BLEND_DST, &oblend); glGetFloatv (GL_TEXTURE_MATRIX, omatrix); blend_p = glIsEnabled (GL_BLEND); alpha_p = glIsEnabled (GL_ALPHA_TEST); light_p = glIsEnabled (GL_LIGHTING); gen_s_p = glIsEnabled (GL_TEXTURE_GEN_S); gen_t_p = glIsEnabled (GL_TEXTURE_GEN_T); glPushMatrix(); glNormal3f (0, 0, 1); glFrontFace (GL_CW); glMatrixMode (GL_TEXTURE); glLoadIdentity (); glMatrixMode (GL_MODELVIEW); enable_texture_string_parameters(); /* Draw a quad with that texture on it, possibly using a cached texture. Position the XCharStruct origin at 0,0 in the scene. */ qx0 = overall.lbearing; qy0 = -overall.descent; qx1 = overall.rbearing; qy1 = overall.ascent; tx0 = 0; ty1 = 0; tx1 = (overall.rbearing - overall.lbearing) / (GLfloat) tex_width; ty0 = (overall.ascent + overall.descent) / (GLfloat) tex_height; glEnable (GL_CULL_FACE); glFrontFace (GL_CCW); glBegin (GL_QUADS); glTexCoord2f (tx0, ty0); glVertex3f (qx0, qy0, 0); glTexCoord2f (tx1, ty0); glVertex3f (qx1, qy0, 0); glTexCoord2f (tx1, ty1); glVertex3f (qx1, qy1, 0); glTexCoord2f (tx0, ty1); glVertex3f (qx0, qy1, 0); glEnd(); if (draw_back_face_p) { glFrontFace (GL_CW); glBegin (GL_QUADS); glTexCoord2f (tx0, ty0); glVertex3f (qx0, qy0, 0); glTexCoord2f (tx1, ty0); glVertex3f (qx1, qy0, 0); glTexCoord2f (tx1, ty1); glVertex3f (qx1, qy1, 0); glTexCoord2f (tx0, ty1); glVertex3f (qx0, qy1, 0); glEnd(); glDisable (GL_CULL_FACE); } glPopMatrix(); /* Reset to the caller's texture environment. */ glBindTexture (GL_TEXTURE_2D, old_texture); glFrontFace (ofront); if (!alpha_p) glDisable (GL_ALPHA_TEST); if (!blend_p) glDisable (GL_BLEND); if (light_p) glEnable (GL_LIGHTING); if (gen_s_p) glEnable (GL_TEXTURE_GEN_S); if (gen_t_p) glEnable (GL_TEXTURE_GEN_T); glBlendFunc (GL_SRC_ALPHA, oblend); glMatrixMode (GL_TEXTURE); glMultMatrixf (omatrix); glMatrixMode (GL_MODELVIEW); check_gl_error ("texture font print"); /* Store this string into the cache, unless that's where it came from. */ if (!cache->string) { cache->string = strdup (string); cache->extents = overall; cache->tex_width = tex_width; cache->tex_height = tex_height; } } } /* Draws the string on the window at the given pixel position. Newlines and tab stops are honored. Any numbers inside [] will be rendered as a subscript. Assumes the font has been loaded as with load_texture_font(). Position is 0 for center, 1 for top left, 2 for bottom left. */ void print_texture_label (Display *dpy, texture_font_data *data, int window_width, int window_height, int position, const char *string) { GLfloat color[4]; Bool tex_p = glIsEnabled (GL_TEXTURE_2D); Bool texs_p = glIsEnabled (GL_TEXTURE_GEN_S); Bool text_p = glIsEnabled (GL_TEXTURE_GEN_T); Bool depth_p = glIsEnabled (GL_DEPTH_TEST); Bool cull_p = glIsEnabled (GL_CULL_FACE); Bool fog_p = glIsEnabled (GL_FOG); GLint ovp[4]; # ifndef HAVE_JWZGLES GLint opoly[2]; glGetIntegerv (GL_POLYGON_MODE, opoly); # endif glGetIntegerv (GL_VIEWPORT, ovp); glGetFloatv (GL_CURRENT_COLOR, color); glEnable (GL_TEXTURE_2D); glBlendFunc (GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); glPolygonMode (GL_FRONT, GL_FILL); glDisable (GL_TEXTURE_GEN_S); glDisable (GL_TEXTURE_GEN_T); glDisable (GL_CULL_FACE); glDisable (GL_FOG); glDisable (GL_DEPTH_TEST); /* Each matrix mode has its own stack, so we need to push/pop them separately. */ glMatrixMode(GL_PROJECTION); glPushMatrix(); { glLoadIdentity(); glMatrixMode(GL_MODELVIEW); glPushMatrix(); { XCharStruct cs; int ascent, descent; int x, y, w, h, swap; /* int rot = (int) current_device_rotation(); */ int rot = 0; /* Since GL hacks rotate now */ glLoadIdentity(); glViewport (0, 0, window_width, window_height); glOrtho (0, window_width, 0, window_height, -1, 1); while (rot <= -180) rot += 360; while (rot > 180) rot -= 360; texture_string_metrics (data, string, &cs, &ascent, &descent); h = cs.ascent + cs.descent; w = cs.width; # ifdef USE_IPHONE { /* Size of the font is in points, so scale iOS pixels to points. */ GLfloat scale = ((window_width > window_height ? window_width : window_height) / 768.0); if (scale < 1) scale = 1; /* jwxyz-XLoadFont has already doubled the font size, to compensate for physically smaller screens. Undo that, since OpenGL hacks use full-resolution framebuffers, unlike X11 hacks. */ scale /= 2; window_width /= scale; window_height /= scale; glScalef (scale, scale, scale); } # endif /* USE_IPHONE */ if (rot > 135 || rot < -135) /* 180 */ { glTranslatef (window_width, window_height, 0); glRotatef (180, 0, 0, 1); } else if (rot > 45) /* 90 */ { glTranslatef (window_width, 0, 0); glRotatef (90, 0, 0, 1); swap = window_width; window_width = window_height; window_height = swap; } else if (rot < -45) /* 270 */ { glTranslatef(0, window_height, 0); glRotatef (-90, 0, 0, 1); swap = window_width; window_width = window_height; window_height = swap; } switch (position) { case 0: /* center */ x = (window_width - w) / 2; y = (window_height + h) / 2 - ascent; break; case 1: /* top */ x = ascent; y = window_height - ascent*2; break; case 2: /* bottom */ x = ascent; y = h; break; default: abort(); } glTranslatef (x, y, 0); /* draw the text five times, to give it a border. */ { const XPoint offsets[] = {{ -1, -1 }, { -1, 1 }, { 1, 1 }, { 1, -1 }, { 0, 0 }}; int i; glColor3f (0, 0, 0); for (i = 0; i < countof(offsets); i++) { if (offsets[i].x == 0) glColor4fv (color); glPushMatrix(); glTranslatef (offsets[i].x, offsets[i].y, 0); print_texture_string (data, string); glPopMatrix(); } } } glPopMatrix(); } glMatrixMode(GL_PROJECTION); glPopMatrix(); if (tex_p) glEnable (GL_TEXTURE_2D); else glDisable (GL_TEXTURE_2D); if (texs_p) glEnable (GL_TEXTURE_GEN_S);/*else glDisable(GL_TEXTURE_GEN_S);*/ if (text_p) glEnable (GL_TEXTURE_GEN_T);/*else glDisable(GL_TEXTURE_GEN_T);*/ if (depth_p) glEnable (GL_DEPTH_TEST); else glDisable (GL_DEPTH_TEST); if (cull_p) glEnable (GL_CULL_FACE); /*else glDisable (GL_CULL_FACE);*/ if (fog_p) glEnable (GL_FOG); /*else glDisable (GL_FOG);*/ glViewport (ovp[0], ovp[1], ovp[2], ovp[3]); # ifndef HAVE_JWZGLES glPolygonMode (GL_FRONT, opoly[0]); # endif glMatrixMode(GL_MODELVIEW); } #ifdef HAVE_JWXYZ char * texfont_unicode_character_name (texture_font_data *data, unsigned long uc) { Font fid = data->xftfont->xfont->fid; return jwxyz_unicode_character_name (data->dpy, fid, uc); } #endif /* HAVE_JWXYZ */ /* Releases the font and texture. */ void free_texture_font (texture_font_data *data) { while (data->cache) { texfont_cache *next = data->cache->next; glDeleteTextures (1, &data->cache->texid); free (data->cache); data->cache = next; } if (data->xftfont) XftFontClose (data->dpy, data->xftfont); free (data); } xscreensaver-5.36/hacks/glx/carousel.c000644 000767 000024 00000062107 12717725135 020022 0ustar00jwzstaff000000 000000 /* carousel, Copyright (c) 2005-2015 Jamie Zawinski * Loads a sequence of images and rotates them around. * * 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. * * Created: 21-Feb-2005 */ #define DEF_FONT "-*-helvetica-bold-r-normal-*-*-240-*-*-*-*-*-*" #define DEFAULTS "*count: 7 \n" \ "*delay: 10000 \n" \ "*wireframe: False \n" \ "*showFPS: False \n" \ "*fpsSolid: True \n" \ "*useSHM: True \n" \ "*font: " DEF_FONT "\n" \ "*desktopGrabber: xscreensaver-getimage -no-desktop %s\n" \ "*grabDesktopImages: False \n" \ "*chooseRandomImages: True \n" # define refresh_carousel 0 # define release_carousel 0 # include "xlockmore.h" #undef countof #define countof(x) (sizeof((x))/sizeof((*x))) #ifdef USE_GL # define DEF_SPEED "1.0" # define DEF_DURATION "20" # define DEF_TITLES "True" # define DEF_ZOOM "True" # define DEF_TILT "XY" # define DEF_MIPMAP "True" # define DEF_DEBUG "False" #include "rotator.h" #include "gltrackball.h" #include "grab-ximage.h" #include "texfont.h" # ifndef HAVE_JWXYZ # include /* for XrmDatabase in -debug mode */ # endif /* Should be in */ # ifndef GL_TEXTURE_MAX_ANISOTROPY_EXT # define GL_TEXTURE_MAX_ANISOTROPY_EXT 0x84FE # endif # ifndef GL_MAX_TEXTURE_MAX_ANISOTROPY_EXT # define GL_MAX_TEXTURE_MAX_ANISOTROPY_EXT 0x84FF # endif typedef struct { double x, y, w, h; } rect; typedef enum { EARLY, NORMAL, LOADING, OUT, IN, DEAD } fade_mode; static int fade_ticks = 60; typedef struct { char *title; /* the filename of this image */ int w, h; /* size in pixels of the image */ int tw, th; /* size in pixels of the texture */ XRectangle geom; /* where in the image the bits are */ GLuint texid; } image; typedef struct { ModeInfo *mi; image current, loading; GLfloat r, theta; /* radius and rotation on the tube */ rotator *rot; /* for zoomery */ Bool from_top_p; /* whether this image drops in or rises up */ time_t expires; /* when this image should be replaced */ fade_mode mode; /* in/out animation state */ int mode_tick; Bool loaded_p; /* whether background load is done */ } image_frame; typedef struct { GLXContext *glx_context; GLfloat anisotropic; rotator *rot; trackball_state *trackball; Bool button_down_p; time_t button_down_time; int nframes; /* how many frames are loaded */ int frames_size; image_frame **frames; /* pointers to the frames */ Bool awaiting_first_images_p; int loads_in_progress; texture_font_data *texfont; fade_mode mode; int mode_tick; int loading_sw, loading_sh; time_t last_time, now; int draw_tick; } carousel_state; static carousel_state *sss = NULL; /* Command-line arguments */ static GLfloat speed; /* animation speed scale factor */ static int duration; /* reload images after this long */ static Bool mipmap_p; /* Use mipmaps instead of single textures. */ static Bool titles_p; /* Display image titles. */ static Bool zoom_p; /* Throb the images in and out as they spin. */ static char *tilt_str; static Bool tilt_x_p; /* Tilt axis towards the viewer */ static Bool tilt_y_p; /* Tilt axis side to side */ static Bool debug_p; /* Be loud and do weird things. */ static XrmOptionDescRec opts[] = { {"-zoom", ".zoom", XrmoptionNoArg, "True" }, {"-no-zoom", ".zoom", XrmoptionNoArg, "False" }, {"-tilt", ".tilt", XrmoptionSepArg, 0 }, {"-no-tilt", ".tilt", XrmoptionNoArg, "" }, {"-titles", ".titles", XrmoptionNoArg, "True" }, {"-no-titles", ".titles", XrmoptionNoArg, "False" }, {"-mipmaps", ".mipmap", XrmoptionNoArg, "True" }, {"-no-mipmaps", ".mipmap", XrmoptionNoArg, "False" }, {"-duration", ".duration", XrmoptionSepArg, 0 }, {"-debug", ".debug", XrmoptionNoArg, "True" }, {"-font", ".font", XrmoptionSepArg, 0 }, {"-speed", ".speed", XrmoptionSepArg, 0 }, }; static argtype vars[] = { { &mipmap_p, "mipmap", "Mipmap", DEF_MIPMAP, t_Bool}, { &debug_p, "debug", "Debug", DEF_DEBUG, t_Bool}, { &titles_p, "titles", "Titles", DEF_TITLES, t_Bool}, { &zoom_p, "zoom", "Zoom", DEF_ZOOM, t_Bool}, { &tilt_str, "tilt", "Tilt", DEF_TILT, t_String}, { &speed, "speed", "Speed", DEF_SPEED, t_Float}, { &duration, "duration", "Duration", DEF_DURATION, t_Int}, }; ENTRYPOINT ModeSpecOpt carousel_opts = {countof(opts), opts, countof(vars), vars, NULL}; /* Allocates a frame structure and stores it in the list. */ static image_frame * alloc_frame (ModeInfo *mi) { carousel_state *ss = &sss[MI_SCREEN(mi)]; image_frame *frame = (image_frame *) calloc (1, sizeof (*frame)); frame->mi = mi; frame->mode = EARLY; frame->rot = make_rotator (0, 0, 0, 0, 0.04 * frand(1.0) * speed, False); glGenTextures (1, &frame->current.texid); glGenTextures (1, &frame->loading.texid); if (frame->current.texid <= 0) abort(); if (frame->loading.texid <= 0) abort(); if (ss->frames_size <= ss->nframes) { ss->frames_size = (ss->frames_size * 1.2) + ss->nframes; ss->frames = (image_frame **) realloc (ss->frames, ss->frames_size * sizeof(*ss->frames)); if (! ss->frames) { fprintf (stderr, "%s: out of memory (%d images)\n", progname, ss->frames_size); exit (1); } } ss->frames[ss->nframes++] = frame; return frame; } static void image_loaded_cb (const char *filename, XRectangle *geom, int image_width, int image_height, int texture_width, int texture_height, void *closure); /* Load a new file into the given image struct. */ static void load_image (ModeInfo *mi, image_frame *frame) { carousel_state *ss = &sss[MI_SCREEN(mi)]; int wire = MI_IS_WIREFRAME(mi); if (debug_p && !wire && frame->current.w != 0) fprintf (stderr, "%s: dropped %4d x %-4d %4d x %-4d \"%s\"\n", progname, frame->current.geom.width, frame->current.geom.height, frame->current.tw, frame->current.th, (frame->current.title ? frame->current.title : "(null)")); switch (frame->mode) { case EARLY: break; case NORMAL: frame->mode = LOADING; break; default: abort(); } ss->loads_in_progress++; if (wire) image_loaded_cb (0, 0, 0, 0, 0, 0, frame); else { int w = (MI_WIDTH(mi) / 2) - 1; int h = (MI_HEIGHT(mi) / 2) - 1; if (w <= 10) w = 10; if (h <= 10) h = 10; load_texture_async (mi->xgwa.screen, mi->window, *ss->glx_context, w, h, mipmap_p, frame->loading.texid, image_loaded_cb, frame); } } /* Callback that tells us that the texture has been loaded. */ static void image_loaded_cb (const char *filename, XRectangle *geom, int image_width, int image_height, int texture_width, int texture_height, void *closure) { image_frame *frame = (image_frame *) closure; ModeInfo *mi = frame->mi; carousel_state *ss = &sss[MI_SCREEN(mi)]; int wire = MI_IS_WIREFRAME(mi); if (wire) { frame->loading.w = MI_WIDTH (mi) * (0.5 + frand (1.0)); frame->loading.h = MI_HEIGHT (mi); frame->loading.geom.width = frame->loading.w; frame->loading.geom.height = frame->loading.h; goto DONE; } if (image_width == 0 || image_height == 0) exit (1); glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, mipmap_p ? GL_LINEAR_MIPMAP_LINEAR : GL_LINEAR); if (ss->anisotropic >= 1.0) glTexParameterf (GL_TEXTURE_2D, GL_TEXTURE_MAX_ANISOTROPY_EXT, ss->anisotropic); glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT); glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT); frame->loading.w = image_width; frame->loading.h = image_height; frame->loading.tw = texture_width; frame->loading.th = texture_height; frame->loading.geom = *geom; if (frame->loading.title) free (frame->loading.title); frame->loading.title = (filename ? strdup (filename) : 0); /* xscreensaver-getimage returns paths relative to the image directory now, so leave the sub-directory part in. Unless it's an absolute path. */ if (frame->loading.title && frame->loading.title[0] == '/') { /* strip filename to part after last /. */ char *s = strrchr (frame->loading.title, '/'); if (s) strcpy (frame->loading.title, s+1); } if (debug_p) fprintf (stderr, "%s: loaded %4d x %-4d %4d x %-4d \"%s\"\n", progname, frame->loading.geom.width, frame->loading.geom.height, frame->loading.tw, frame->loading.th, (frame->loading.title ? frame->loading.title : "(null)")); DONE: frame->loaded_p = True; if (ss->loads_in_progress <= 0) abort(); ss->loads_in_progress--; /* This image expires N seconds after it finished loading. */ frame->expires = time((time_t *) 0) + (duration * MI_COUNT(mi)); switch (frame->mode) { case EARLY: /* part of the initial batch of images */ { image swap = frame->current; frame->current = frame->loading; frame->loading = swap; } break; case LOADING: /* start dropping the old image out */ { frame->mode = OUT; frame->mode_tick = fade_ticks / speed; frame->from_top_p = random() & 1; } break; default: abort(); } } static void loading_msg (ModeInfo *mi, int n); static Bool load_initial_images (ModeInfo *mi) { carousel_state *ss = &sss[MI_SCREEN(mi)]; int i; Bool all_loaded_p = True; for (i = 0; i < ss->nframes; i++) if (! ss->frames[i]->loaded_p) all_loaded_p = False; if (all_loaded_p) { if (ss->nframes < MI_COUNT (mi)) { /* The frames currently on the list are fully loaded. Start the next one loading. (We run the image loader asynchronously, but we load them one at a time.) */ load_image (mi, alloc_frame (mi)); } else { /* The first batch of images are now all loaded! Stagger the expire times so that they don't all drop out at once. */ time_t now = time((time_t *) 0); int i; for (i = 0; i < ss->nframes; i++) { image_frame *frame = ss->frames[i]; frame->r = 1.0; frame->theta = i * 360.0 / ss->nframes; frame->expires = now + (duration * (i + 1)); frame->mode = NORMAL; } /* Instead of always going clockwise, shuffle the expire times of the frames so that they drop out in a random order. */ for (i = 0; i < ss->nframes; i++) { image_frame *frame1 = ss->frames[i]; image_frame *frame2 = ss->frames[random() % ss->nframes]; time_t swap = frame1->expires; frame1->expires = frame2->expires; frame2->expires = swap; } ss->awaiting_first_images_p = False; } } loading_msg (mi, ss->nframes-1); return !ss->awaiting_first_images_p; } ENTRYPOINT void reshape_carousel (ModeInfo *mi, int width, int height) { GLfloat h = (GLfloat) height / (GLfloat) width; glViewport (0, 0, (GLint) width, (GLint) height); glMatrixMode(GL_PROJECTION); glLoadIdentity(); gluPerspective (60.0, 1/h, 1.0, 8.0); glMatrixMode(GL_MODELVIEW); glLoadIdentity(); gluLookAt( 0.0, 0.0, 2.6, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0); glClear(GL_COLOR_BUFFER_BIT); } ENTRYPOINT Bool carousel_handle_event (ModeInfo *mi, XEvent *event) { carousel_state *ss = &sss[MI_SCREEN(mi)]; if (event->xany.type == ButtonPress && event->xbutton.button == Button1) { if (! ss->button_down_p) ss->button_down_time = time((time_t *) 0); } else if (event->xany.type == ButtonRelease && event->xbutton.button == Button1) { if (ss->button_down_p) { /* Add the time the mouse was held to the expire times of all frames, so that mouse-dragging doesn't count against image expiration. */ int secs = time((time_t *) 0) - ss->button_down_time; int i; for (i = 0; i < ss->nframes; i++) ss->frames[i]->expires += secs; } } if (gltrackball_event_handler (event, ss->trackball, MI_WIDTH (mi), MI_HEIGHT (mi), &ss->button_down_p)) return True; else if (screenhack_event_helper (MI_DISPLAY(mi), MI_WINDOW(mi), event)) { int i = random() % ss->nframes; ss->frames[i]->expires = 0; return True; } return False; } /* Kludge to add "-v" to invocation of "xscreensaver-getimage" in -debug mode */ static void hack_resources (Display *dpy) { # ifndef HAVE_JWXYZ char *res = "desktopGrabber"; char *val = get_string_resource (dpy, res, "DesktopGrabber"); char buf1[255]; char buf2[255]; XrmValue value; XrmDatabase db = XtDatabase (dpy); sprintf (buf1, "%.100s.%.100s", progname, res); sprintf (buf2, "%.200s -v", val); value.addr = buf2; value.size = strlen(buf2); XrmPutResource (&db, buf1, "String", &value); # endif /* !HAVE_JWXYZ */ } static void loading_msg (ModeInfo *mi, int n) { carousel_state *ss = &sss[MI_SCREEN(mi)]; int wire = MI_IS_WIREFRAME(mi); char text[100]; if (wire) return; if (n == 0) sprintf (text, "Loading images..."); else sprintf (text, "Loading images... (%d%%)", (int) (n * 100 / MI_COUNT(mi))); if (ss->loading_sw == 0) { /* only do this once, so that the string doesn't move. */ XCharStruct e; texture_string_metrics (ss->texfont, text, &e, 0, 0); ss->loading_sw = e.width; ss->loading_sh = e.ascent + e.descent; } glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); 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); } } */ # ifdef HAVE_MOBILE if (MI_WIDTH(mi) < MI_HEIGHT(mi)) /* portrait orientation */ { GLfloat s = (MI_WIDTH(mi) / (GLfloat) MI_HEIGHT(mi)); glScalef (s, s, s); glTranslatef(-s/2, 0, 0); } # endif 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); glColor3f (1, 1, 0); glEnable (GL_TEXTURE_2D); glDisable (GL_DEPTH_TEST); print_texture_string (ss->texfont, text); glEnable (GL_DEPTH_TEST); glPopMatrix(); glMatrixMode(GL_PROJECTION); glPopMatrix(); glMatrixMode(GL_MODELVIEW); glFinish(); glXSwapBuffers (MI_DISPLAY (mi), MI_WINDOW(mi)); } ENTRYPOINT void init_carousel (ModeInfo *mi) { int screen = MI_SCREEN(mi); carousel_state *ss; int wire = MI_IS_WIREFRAME(mi); if (sss == NULL) { if ((sss = (carousel_state *) calloc (MI_NUM_SCREENS(mi), sizeof(carousel_state))) == NULL) return; } ss = &sss[screen]; if ((ss->glx_context = init_GL(mi)) != NULL) { reshape_carousel (mi, MI_WIDTH(mi), MI_HEIGHT(mi)); clear_gl_error(); /* WTF? sometimes "invalid op" from glViewport! */ } else { MI_CLEARWINDOW(mi); } if (!tilt_str || !*tilt_str) ; else if (!strcasecmp (tilt_str, "0")) ; else if (!strcasecmp (tilt_str, "X")) tilt_x_p = 1; else if (!strcasecmp (tilt_str, "Y")) tilt_y_p = 1; else if (!strcasecmp (tilt_str, "XY")) tilt_x_p = tilt_y_p = 1; else { fprintf (stderr, "%s: tilt must be 'X', 'Y', 'XY' or '', not '%s'\n", progname, tilt_str); exit (1); } { double spin_speed = speed * 0.2; /* rotation of tube around axis */ double spin_accel = speed * 0.1; double wander_speed = speed * 0.001; /* tilting of axis */ spin_speed *= 0.9 + frand(0.2); wander_speed *= 0.9 + frand(0.2); ss->rot = make_rotator (spin_speed, spin_speed, spin_speed, spin_accel, wander_speed, True); ss->trackball = gltrackball_init (False); } if (strstr ((char *) glGetString(GL_EXTENSIONS), "GL_EXT_texture_filter_anisotropic")) glGetFloatv (GL_MAX_TEXTURE_MAX_ANISOTROPY_EXT, &ss->anisotropic); else ss->anisotropic = 0.0; glDisable (GL_LIGHTING); glEnable (GL_DEPTH_TEST); glDisable (GL_CULL_FACE); if (! wire) { glShadeModel (GL_SMOOTH); glEnable (GL_LINE_SMOOTH); /* This gives us a transparent diagonal slice through each image! */ /* glEnable (GL_POLYGON_SMOOTH); */ glHint (GL_LINE_SMOOTH_HINT, GL_NICEST); glEnable (GL_BLEND); glBlendFunc (GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); glEnable (GL_ALPHA_TEST); glEnable (GL_POLYGON_OFFSET_FILL); glPolygonOffset (1.0, 1.0); } ss->texfont = load_texture_font (MI_DISPLAY(mi), "font"); if (debug_p) hack_resources (MI_DISPLAY (mi)); ss->nframes = 0; ss->frames_size = 10; ss->frames = (image_frame **) calloc (1, ss->frames_size * sizeof(*ss->frames)); ss->mode = IN; ss->mode_tick = fade_ticks / speed; ss->awaiting_first_images_p = True; } static void draw_frame (ModeInfo *mi, image_frame *frame, time_t now, Bool body_p) { carousel_state *ss = &sss[MI_SCREEN(mi)]; int wire = MI_IS_WIREFRAME(mi); GLfloat texw = frame->current.geom.width / (GLfloat) frame->current.tw; GLfloat texh = frame->current.geom.height / (GLfloat) frame->current.th; GLfloat texx1 = frame->current.geom.x / (GLfloat) frame->current.tw; GLfloat texy1 = frame->current.geom.y / (GLfloat) frame->current.th; GLfloat texx2 = texx1 + texw; GLfloat texy2 = texy1 + texh; GLfloat aspect = ((GLfloat) frame->current.geom.height / (GLfloat) frame->current.geom.width); glBindTexture (GL_TEXTURE_2D, frame->current.texid); glPushMatrix(); /* Position this image on the wheel. */ glRotatef (frame->theta, 0, 1, 0); glTranslatef (0, 0, frame->r); /* Scale down the image so that all N frames fit on the wheel without bumping in to each other. */ { GLfloat t, s; switch (ss->nframes) { case 1: t = -1.0; s = 1.7; break; case 2: t = -0.8; s = 1.6; break; case 3: t = -0.4; s = 1.5; break; case 4: t = -0.2; s = 1.3; break; default: t = 0.0; s = 6.0 / ss->nframes; break; } glTranslatef (0, 0, t); glScalef (s, s, s); } /* Center this image on the wheel plane. */ glTranslatef (-0.5, -(aspect/2), 0); /* Move as per the "zoom in and out" setting. */ if (zoom_p) { double x, y, z; /* Only use the Z component of the rotator for in/out position. */ get_position (frame->rot, &x, &y, &z, !ss->button_down_p); glTranslatef (0, 0, z/2); } /* Compute the "drop in and out" state. */ switch (frame->mode) { case EARLY: abort(); break; case NORMAL: if (!ss->button_down_p && now >= frame->expires && ss->loads_in_progress == 0) /* only load one at a time */ load_image (mi, frame); break; case LOADING: break; case OUT: if (--frame->mode_tick <= 0) { image swap = frame->current; frame->current = frame->loading; frame->loading = swap; frame->mode = IN; frame->mode_tick = fade_ticks / speed; } break; case IN: if (--frame->mode_tick <= 0) frame->mode = NORMAL; break; default: abort(); } /* Now translate for current in/out state. */ if (frame->mode == OUT || frame->mode == IN) { GLfloat t = (frame->mode == OUT ? frame->mode_tick / (fade_ticks / speed) : (((fade_ticks / speed) - frame->mode_tick + 1) / (fade_ticks / speed))); t = 5 * (1 - t); if (frame->from_top_p) t = -t; glTranslatef (0, t, 0); } if (body_p) /* Draw the image quad. */ { if (! wire) { glColor3f (1, 1, 1); glNormal3f (0, 0, 1); glEnable (GL_TEXTURE_2D); glBegin (GL_QUADS); glNormal3f (0, 0, 1); glTexCoord2f (texx1, texy2); glVertex3f (0, 0, 0); glTexCoord2f (texx2, texy2); glVertex3f (1, 0, 0); glTexCoord2f (texx2, texy1); glVertex3f (1, aspect, 0); glTexCoord2f (texx1, texy1); glVertex3f (0, aspect, 0); glEnd(); } /* Draw a box around it. */ glLineWidth (2.0); glColor3f (0.5, 0.5, 0.5); glDisable (GL_TEXTURE_2D); glBegin (GL_LINE_LOOP); glVertex3f (0, 0, 0); glVertex3f (1, 0, 0); glVertex3f (1, aspect, 0); glVertex3f (0, aspect, 0); glEnd(); } else /* Draw a title under the image. */ { XCharStruct e; int sw, sh; GLfloat scale = 0.05; char *title = frame->current.title ? frame->current.title : "(untitled)"; texture_string_metrics (ss->texfont, title, &e, 0, 0); sw = e.width; sh = e.ascent + e.descent; glTranslatef (0, -scale, 0); scale /= sh; glScalef (scale, scale, scale); glTranslatef (((1/scale) - sw) / 2, 0, 0); glColor3f (1, 1, 1); if (!wire) { glEnable (GL_TEXTURE_2D); print_texture_string (ss->texfont, title); } else { glBegin (GL_LINE_LOOP); glVertex3f (0, 0, 0); glVertex3f (sw, 0, 0); glVertex3f (sw, sh, 0); glVertex3f (0, sh, 0); glEnd(); } } glPopMatrix(); } ENTRYPOINT void draw_carousel (ModeInfo *mi) { carousel_state *ss = &sss[MI_SCREEN(mi)]; int i; if (!ss->glx_context) return; glXMakeCurrent(MI_DISPLAY(mi), MI_WINDOW(mi), *(ss->glx_context)); if (ss->awaiting_first_images_p) if (!load_initial_images (mi)) return; /* Only check the wall clock every 10 frames */ { if (ss->now == 0 || ss->draw_tick++ > 10) { ss->now = time((time_t *) 0); if (ss->last_time == 0) ss->last_time = ss->now; ss->draw_tick = 0; } } glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glPushMatrix(); glRotatef(current_device_rotation(), 0, 0, 1); /* Run the startup "un-shrink" animation. */ switch (ss->mode) { case IN: if (--ss->mode_tick <= 0) { ss->mode = NORMAL; ss->last_time = time((time_t *) 0); } break; case NORMAL: break; default: abort(); } /* Scale as per the startup "un-shrink" animation. */ if (ss->mode != NORMAL) { GLfloat s = (ss->mode == OUT ? ss->mode_tick / (fade_ticks / speed) : (((fade_ticks / speed) - ss->mode_tick + 1) / (fade_ticks / speed))); glScalef (s, s, s); } /* Rotate and tilt as per the user, and the motion modeller. */ { double x, y, z; gltrackball_rotate (ss->trackball); /* Tilt the tube up or down by up to 30 degrees */ get_position (ss->rot, &x, &y, &z, !ss->button_down_p); if (tilt_x_p) glRotatef (15 - (x * 30), 1, 0, 0); if (tilt_y_p) glRotatef (7 - (y * 14), 0, 0, 1); /* Only use the Y component of the rotator. */ get_rotation (ss->rot, &x, &y, &z, !ss->button_down_p); glRotatef (y * 360, 0, 1, 0); } /* First draw each image, then draw the titles. GL insists that you draw back-to-front in order to make alpha blending work properly, so we need to draw all of the 100% opaque images before drawing any of the not-100%-opaque titles. */ for (i = 0; i < ss->nframes; i++) draw_frame (mi, ss->frames[i], ss->now, True); if (titles_p) for (i = 0; i < ss->nframes; i++) draw_frame (mi, ss->frames[i], ss->now, False); glPopMatrix(); if (mi->fps_p) do_fps (mi); glFinish(); glXSwapBuffers (MI_DISPLAY (mi), MI_WINDOW(mi)); } XSCREENSAVER_MODULE ("Carousel", carousel) #endif /* USE_GL */ xscreensaver-5.36/hacks/glx/fliptext.c000644 000767 000024 00000063343 12701612217 020034 0ustar00jwzstaff000000 000000 /* * fliptext, Copyright (c) 2005-2015 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. */ #ifdef HAVE_CONFIG_H # include "config.h" #endif /* HAVE_CONFIG_H */ #define DEF_FONT "-*-utopia-bold-r-normal-*-*-720-*-*-*-*-*-*" #define DEF_COLOR "#00CCFF" #define DEFAULTS "*delay: 10000 \n" \ "*showFPS: False \n" \ "*wireframe: False \n" \ "*usePty: False \n" \ "*texFontCacheSize: 60 \n" \ "*font: " DEF_FONT "\n" \ ".foreground: " DEF_COLOR "\n" \ "*program: xscreensaver-text --cols 0" /* don't wrap */ # define refresh_fliptext 0 # define fliptext_handle_event 0 #undef countof #define countof(x) (sizeof((x))/sizeof((*x))) #undef BELLRAND #define BELLRAND(n) ((frand((n)) + frand((n)) + frand((n))) / 3) #include "xlockmore.h" #include "texfont.h" #include "textclient.h" #ifdef USE_GL /* whole file */ /* Should be in */ # ifndef GL_TEXTURE_MAX_ANISOTROPY_EXT # define GL_TEXTURE_MAX_ANISOTROPY_EXT 0x84FE # endif # ifndef GL_MAX_TEXTURE_MAX_ANISOTROPY_EXT # define GL_MAX_TEXTURE_MAX_ANISOTROPY_EXT 0x84FF # endif #define DEF_LINES "8" #define DEF_FONT_SIZE "20" #define DEF_COLUMNS "80" #define DEF_ALIGNMENT "random" #define DEF_SPEED "1.0" #define TAB_WIDTH 8 #define FONT_WEIGHT 14 #define KEEP_ASPECT typedef enum { NEW, HESITATE, IN, LINGER, OUT, DEAD } line_state; typedef enum { SCROLL_BOTTOM, SCROLL_TOP, SPIN } line_anim_type; typedef struct { GLfloat x, y, z; } XYZ; typedef struct { char *text; GLfloat width, height; /* size */ XYZ from, to, current; /* start, end, and current position */ GLfloat fth, tth, cth; /* rotation around Z */ int cluster_size; /* how many lines in this cluster */ int cluster_pos; /* position of this line in the cluster */ line_state state; /* current motion model */ int step, steps; /* progress along this path */ GLfloat color[4]; } line; typedef struct { Display *dpy; GLXContext *glx_context; texture_font_data *texfont; text_data *tc; char *buf; int buf_size; int buf_tail; int char_width; /* in font units */ int line_height; /* in font units */ double font_scale; /* convert font units to display units */ int font_wrap_pixels; /* in font units (for wrapping text) */ int top_margin, bottom_margin; int left_margin, right_margin; int nlines; int lines_size; line **lines; line_anim_type anim_type; XYZ in, mid, out; XYZ rotation; GLfloat color[4]; } fliptext_configuration; static fliptext_configuration *scs = NULL; static int max_lines, min_lines; static float font_size; static int target_columns; static char *alignment_str; static int alignment, alignment_random_p; static GLfloat speed; static XrmOptionDescRec opts[] = { {"-lines", ".lines", XrmoptionSepArg, 0 }, {"-size", ".fontSize", XrmoptionSepArg, 0 }, {"-columns", ".columns", XrmoptionSepArg, 0 }, {"-speed", ".speed", XrmoptionSepArg, 0 }, /*{"-font", ".font", XrmoptionSepArg, 0 },*/ {"-alignment", ".alignment", XrmoptionSepArg, 0 }, {"-left", ".alignment", XrmoptionNoArg, "Left" }, {"-right", ".alignment", XrmoptionNoArg, "Right" }, {"-center", ".alignment", XrmoptionNoArg, "Center" }, }; static argtype vars[] = { {&max_lines, "lines", "Integer", DEF_LINES, t_Int}, {&font_size, "fontSize", "Float", DEF_FONT_SIZE, t_Float}, {&target_columns, "columns", "Integer", DEF_COLUMNS, t_Int}, {&alignment_str, "alignment", "Alignment", DEF_ALIGNMENT, t_String}, {&speed, "speed", "Speed", DEF_SPEED, t_Float}, }; ENTRYPOINT ModeSpecOpt fliptext_opts = {countof(opts), opts, countof(vars), vars, NULL}; /* Tabs are bad, mmmkay? */ static char * untabify (const char *string) { const char *ostring = string; char *result = (char *) malloc ((strlen(string) * 8) + 1); char *out = result; int col = 0; while (*string) { if (*string == '\t') { do { col++; *out++ = ' '; } while (col % TAB_WIDTH); string++; } else if (*string == '\r' || *string == '\n') { *out++ = *string++; col = 0; } else if (*string == '\010') /* backspace */ { if (string > ostring) out--, string++; } else { *out++ = *string++; col++; } } *out = 0; return result; } static void strip (char *s, Bool leading, Bool trailing) { int L = strlen(s); if (trailing) while (L > 0 && (s[L-1] == ' ' || s[L-1] == '\t')) s[L--] = 0; if (leading) { char *s2 = s; while (*s2 == ' ' || *s2 == '\t') s2++; if (s == s2) return; while (*s2) *s++ = *s2++; *s = 0; } } static int char_width (fliptext_configuration *sc, char c) { XCharStruct e; char s[2]; s[0] = c; s[1] = 0; texture_string_metrics (sc->texfont, s, &e, 0, 0); return e.width; } /* Returns a single line of text from the output buffer of the subprocess, taking into account wrapping, centering, etc. Returns 0 if no complete line is currently available. */ static char * get_one_line (fliptext_configuration *sc) { char *result = 0; int wrap_pix = sc->font_wrap_pixels; int col = 0; int col_pix = 0; char *s = sc->buf; int target = sc->buf_size - sc->buf_tail - 2; /* Fill as much as we can into sc->buf, but stop at newline. */ while (target > 0) { int c = textclient_getc (sc->tc); if (c <= 0) break; sc->buf[sc->buf_tail++] = (char) c; sc->buf[sc->buf_tail] = 0; target--; if (c == '\r' || c == '\n') break; } while (!result) { int cw; if (s >= sc->buf + sc->buf_tail) /* Reached end of buffer before end of line. Bail. */ return 0; cw = char_width (sc, *s); if (*s == '\r' || *s == '\n' || col_pix + cw >= wrap_pix) { int L = s - sc->buf; if (*s == '\r' || *s == '\n') { if (*s == '\r' && s[1] == '\n') /* swallow CRLF too */ *s++ = 0; *s++ = 0; } else { /* We wrapped -- try to back up to the previous word boundary. */ char *s2 = s; int n = 0; while (s2 > sc->buf && *s2 != ' ' && *s2 != '\t') s2--, n++; if (s2 > sc->buf) { s = s2; *s++ = 0; L = s - sc->buf; } } if (result) abort(); result = (char *) malloc (L+1); memcpy (result, sc->buf, L); result[L] = 0; { char *t = result; char *ut = untabify (t); strip (ut, (alignment == 0), 1); /* if centering, strip leading whitespace too */ result = ut; free (t); } if (sc->buf_tail > (s - sc->buf)) { int i = sc->buf_tail - (s - sc->buf); memmove (sc->buf, s, i); sc->buf_tail = i; sc->buf[sc->buf_tail] = 0; } else { sc->buf_tail = 0; } sc->buf[sc->buf_tail] = 0; s = sc->buf; col = 0; col_pix = 0; } else { col++; col_pix += cw; if (*s == '\t') { int tab_pix = TAB_WIDTH * sc->char_width; col = TAB_WIDTH * ((col / TAB_WIDTH) + 1); col_pix = tab_pix * ((col / tab_pix) + 1); } s++; } } return result; } static Bool blank_p (const char *s) { for (; *s; s++) if (*s != ' ' && *s != '\t' && *s != '\r' && *s != '\n') return False; return True; } /* Reads some text from the subprocess, and creates and returns a `line' object. Adds that object to the lines list. Returns 0 if no text available yet. If skip_blanks_p, then keep trying for new lines of text until we get one that is not empty. */ static line * make_line (fliptext_configuration *sc, Bool skip_blanks_p) { XCharStruct e; line *ln; char *s; AGAIN: s = get_one_line (sc); if (s && skip_blanks_p && blank_p (s)) { free (s); goto AGAIN; } if (!s) return 0; ln = (line *) calloc (1, sizeof(*ln)); ln->text = s; ln->state = NEW; texture_string_metrics (sc->texfont, s, &e, 0, 0); ln->width = sc->font_scale * e.width; ln->height = sc->font_scale * sc->line_height; memcpy (ln->color, sc->color, sizeof(ln->color)); sc->nlines++; if (sc->lines_size <= sc->nlines) { sc->lines_size = (sc->lines_size * 1.2) + sc->nlines; sc->lines = (line **) realloc (sc->lines, sc->lines_size * sizeof(*sc->lines)); if (! sc->lines) { fprintf (stderr, "%s: out of memory (%d lines)\n", progname, sc->lines_size); exit (1); } } sc->lines[sc->nlines-1] = ln; return ln; } /* frees the object and removes it from the list. */ static void free_line (fliptext_configuration *sc, line *line) { int i; for (i = 0; i < sc->nlines; i++) if (sc->lines[i] == line) break; if (i == sc->nlines) abort(); for (; i < sc->nlines-1; i++) sc->lines[i] = sc->lines[i+1]; sc->lines[i] = 0; sc->nlines--; free (line->text); free (line); } static void draw_line (ModeInfo *mi, line *line) { int wire = MI_IS_WIREFRAME(mi); fliptext_configuration *sc = &scs[MI_SCREEN(mi)]; if (! line->text || !*line->text || line->state == NEW || line->state == HESITATE || line->state == DEAD) return; glPushMatrix(); glTranslatef (line->current.x, line->current.y, line->current.z); glRotatef (line->cth, 0, 1, 0); if (alignment == 1) glTranslatef (-line->width, 0, 0); else if (alignment == 0) glTranslatef (-line->width/2, 0, 0); glScalef (sc->font_scale, sc->font_scale, sc->font_scale); glColor4f (line->color[0], line->color[1], line->color[2], line->color[3]); if (!wire) print_texture_string (sc->texfont, line->text); else { int w, h; char *s = line->text; char c[2]; c[1]=0; glDisable (GL_TEXTURE_2D); glColor3f (0.4, 0.4, 0.4); while (*s) { XCharStruct e; *c = *s++; texture_string_metrics (sc->texfont, c, &e, 0, 0); w = e.width; h = e.ascent + e.descent; glBegin (GL_LINE_LOOP); glVertex3f (0, 0, 0); glVertex3f (w, 0, 0); glVertex3f (w, h, 0); glVertex3f (0, h, 0); glEnd(); glTranslatef (w, 0, 0); } } #if 0 glDisable (GL_TEXTURE_2D); glColor3f (0.4, 0.4, 0.4); glBegin (GL_LINE_LOOP); glVertex3f (0, 0, 0); glVertex3f (line->width/sc->font_scale, 0, 0); glVertex3f (line->width/sc->font_scale, line->height/sc->font_scale, 0); glVertex3f (0, line->height/sc->font_scale, 0); glEnd(); if (!wire) glEnable (GL_TEXTURE_2D); #endif glPopMatrix(); mi->polygon_count += strlen (line->text); } static void tick_line (fliptext_configuration *sc, line *line) { int stagger = 30; /* frames of delay between line spin-outs */ int slide = 600; /* frames in a slide in/out */ int linger = 0; /* frames to pause with no motion */ double i, ii; if (line->state >= DEAD) abort(); if (++line->step >= line->steps) { line->state++; line->step = 0; if (linger == 0 && line->state == LINGER) line->state++; if (sc->anim_type != SPIN) stagger *= 2; switch (line->state) { case HESITATE: /* entering state HESITATE */ switch (sc->anim_type) { case SPIN: line->steps = (line->cluster_pos * stagger); break; case SCROLL_TOP: line->steps = stagger * (line->cluster_size - line->cluster_pos); break; case SCROLL_BOTTOM: line->steps = stagger * line->cluster_pos; break; default: abort(); } break; case IN: line->color[3] = 0; switch (sc->anim_type) { case SCROLL_BOTTOM: /* entering state BOTTOM IN */ line->from = sc->in; line->to = sc->mid; line->from.y = (sc->bottom_margin - (line->height * (line->cluster_pos + 1))); line->to.y += (line->height * ((line->cluster_size/2.0) - line->cluster_pos)); line->steps = slide; break; case SCROLL_TOP: /* entering state TOP IN */ line->from = sc->in; line->to = sc->mid; line->from.y = (sc->top_margin + (line->height * (line->cluster_size - line->cluster_pos))); line->to.y += (line->height * ((line->cluster_size/2.0) - line->cluster_pos)); line->steps = slide; break; case SPIN: /* entering state SPIN IN */ line->from = sc->in; line->to = sc->mid; line->to.y += (line->height * ((line->cluster_size/2.0) - line->cluster_pos)); line->from.y += (line->height * ((line->cluster_size/2.0) - line->cluster_pos)); line->fth = 270; line->tth = 0; line->steps = slide; break; default: abort(); } break; case OUT: switch (sc->anim_type) { case SCROLL_BOTTOM: /* entering state BOTTOM OUT */ line->from = line->to; line->to = sc->out; line->to.y = (sc->top_margin + (line->height * (line->cluster_size - line->cluster_pos))); line->steps = slide; break; case SCROLL_TOP: /* entering state TOP OUT */ line->from = line->to; line->to = sc->out; line->to.y = (sc->bottom_margin - (line->height * (line->cluster_pos + 1))); line->steps = slide; break; case SPIN: /* entering state SPIN OUT */ line->from = line->to; line->to = sc->out; line->to.y += (line->height * ((line->cluster_size/2.0) - line->cluster_pos)); line->fth = line->tth; line->tth = -270; line->steps = slide; break; default: abort(); } break; case LINGER: line->from = line->to; line->steps = linger; break; default: break; } line->steps /= speed; } switch (line->state) { case IN: case OUT: i = (double) line->step / line->steps; /* Move along the path exponentially, slow side towards the middle. */ if (line->state == OUT) ii = i * i; else ii = 1 - ((1-i) * (1-i)); line->current.x = line->from.x + (ii * (line->to.x - line->from.x)); line->current.y = line->from.y + (ii * (line->to.y - line->from.y)); line->current.z = line->from.z + (ii * (line->to.z - line->from.z)); line->cth = line->fth + (ii * (line->tth - line->fth)); if (line->state == OUT) ii = 1-ii; line->color[3] = sc->color[3] * ii; break; case HESITATE: case LINGER: case DEAD: break; default: abort(); } } /* Start a new cluster of lines going. Pick their anim type, and in, mid, and out positions. */ static void reset_lines (ModeInfo *mi) { fliptext_configuration *sc = &scs[MI_SCREEN(mi)]; int i; line *prev = 0; GLfloat minx, maxx, miny, maxy, minz, maxz, maxw, maxh; sc->rotation.x = 5 - BELLRAND(10); sc->rotation.y = 5 - BELLRAND(10); sc->rotation.z = 5 - BELLRAND(10); switch (random() % 8) { case 0: sc->anim_type = SCROLL_TOP; break; case 1: sc->anim_type = SCROLL_BOTTOM; break; default: sc->anim_type = SPIN; break; } minx = sc->left_margin * 0.9; maxx = sc->right_margin * 0.9; miny = sc->bottom_margin * 0.9; maxy = sc->top_margin * 0.9; minz = sc->left_margin * 5; maxz = sc->right_margin * 2; maxw = sc->font_wrap_pixels * sc->font_scale; maxh = max_lines * sc->line_height * sc->font_scale; if (maxw > maxx - minx) maxw = maxx - minx; if (maxh > maxy - miny) maxh = maxy - miny; if (alignment_random_p) alignment = (random() % 3) - 1; if (alignment == -1) maxx -= maxw; else if (alignment == 1) minx += maxw; else minx += maxw/2, maxx -= maxw/2; miny += maxh/2; maxy -= maxh/2; sc->mid.x = minx + frand (maxx - minx); if (sc->anim_type == SPIN) sc->mid.y = miny + BELLRAND (maxy - miny); else sc->mid.y = miny + frand (maxy - miny); sc->in.x = BELLRAND(sc->right_margin * 2) - sc->right_margin; sc->out.x = BELLRAND(sc->right_margin * 2) - sc->right_margin; sc->in.y = miny + frand(maxy - miny); sc->out.y = miny + frand(maxy - miny); sc->in.z = minz + frand(maxz - minz); sc->out.z = minz + frand(maxz - minz); sc->mid.z = 0; if (sc->anim_type == SPIN && sc->in.z > 0) sc->in.z /= 4; if (sc->anim_type == SPIN && sc->out.z > 0) sc->out.z /= 4; for (i = 0; i < max_lines; i++) { line *line = make_line (sc, (i == 0)); if (!line) break; /* no text available */ if (i >= min_lines && (!line->text || !*line->text)) /* blank after min */ break; } for (i = 0; i < sc->nlines; i++) { line *line = sc->lines[i]; if (!prev) { line->from.y = sc->bottom_margin; line->to.y = 0; } else { line->from.y = prev->from.y - prev->height; line->to.y = prev->to.y - prev->height; } line->cluster_pos = i; line->cluster_size = sc->nlines; prev = line; } } static void parse_color (ModeInfo *mi, const char *name, const char *s, GLfloat *a) { XColor c; if (! XParseColor (MI_DISPLAY(mi), MI_COLORMAP(mi), s, &c)) { fprintf (stderr, "%s: can't parse %s color %s", progname, name, s); exit (1); } a[0] = c.red / 65536.0; a[1] = c.green / 65536.0; a[2] = c.blue / 65536.0; a[3] = 1.0; } /* Window management, etc */ ENTRYPOINT void reshape_fliptext (ModeInfo *mi, int width, int height) { fliptext_configuration *sc = &scs[MI_SCREEN(mi)]; GLfloat h = (GLfloat) height / (GLfloat) width; glViewport (0, 0, (GLint) width, (GLint) height); glMatrixMode(GL_PROJECTION); glLoadIdentity(); gluPerspective (60.0, 1/h, 0.01, 100.0); glMatrixMode(GL_MODELVIEW); glLoadIdentity(); gluLookAt( 0.0, 0.0, 2.6, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0); glClear(GL_COLOR_BUFFER_BIT); sc->right_margin = sc->top_margin / h; sc->left_margin = -sc->right_margin; } ENTRYPOINT void init_fliptext (ModeInfo *mi) { int wire = MI_IS_WIREFRAME(mi); fliptext_configuration *sc; if (!scs) { scs = (fliptext_configuration *) calloc (MI_NUM_SCREENS(mi), sizeof (fliptext_configuration)); if (!scs) { fprintf(stderr, "%s: out of memory\n", progname); exit(1); } sc = &scs[MI_SCREEN(mi)]; sc->lines = (line **) calloc (max_lines+1, sizeof(char *)); } sc = &scs[MI_SCREEN(mi)]; sc->dpy = MI_DISPLAY(mi); if ((sc->glx_context = init_GL(mi)) != NULL) { reshape_fliptext (mi, MI_WIDTH(mi), MI_HEIGHT(mi)); clear_gl_error(); /* WTF? sometimes "invalid op" from glViewport! */ } { XCharStruct e; int cw, lh, ascent, descent; sc->texfont = load_texture_font (MI_DISPLAY(mi), "font"); check_gl_error ("loading font"); texture_string_metrics (sc->texfont, "n", &e, &ascent, &descent); cw = e.width; lh = ascent + descent; sc->char_width = cw; sc->line_height = lh; } if (!wire) { glBlendFunc (GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); glEnable (GL_BLEND); glEnable (GL_ALPHA_TEST); glEnable (GL_TEXTURE_2D); /* "Anistropic filtering helps for quadrilateral-angled textures. A sharper image is accomplished by interpolating and filtering multiple samples from one or more mipmaps to better approximate very distorted textures. This is the next level of filtering after trilinear filtering." */ if (strstr ((char *) glGetString(GL_EXTENSIONS), "GL_EXT_texture_filter_anisotropic")) { GLfloat anisotropic = 0.0; glGetFloatv (GL_MAX_TEXTURE_MAX_ANISOTROPY_EXT, &anisotropic); if (anisotropic >= 1.0) glTexParameterf (GL_TEXTURE_2D, GL_TEXTURE_MAX_ANISOTROPY_EXT, anisotropic); } } /* The default font is (by fiat) "18 points". Interpret the user's font size request relative to that. */ sc->font_scale = 3 * (font_size / 18.0); if (target_columns <= 2) target_columns = 2; /* Figure out what the wrap column should be, in font-coordinate pixels. Compute it from the given -columns value, but don't let it be wider than the screen. */ { GLfloat maxw = 110 * sc->line_height / sc->font_scale; /* magic... */ sc->font_wrap_pixels = target_columns * sc->char_width; if (sc->font_wrap_pixels > maxw || sc->font_wrap_pixels <= 0) sc->font_wrap_pixels = maxw; } sc->buf_size = target_columns * max_lines; sc->buf = (char *) calloc (1, sc->buf_size); alignment_random_p = False; if (!alignment_str || !*alignment_str || !strcasecmp(alignment_str, "left")) alignment = -1; else if (!strcasecmp(alignment_str, "center") || !strcasecmp(alignment_str, "middle")) alignment = 0; else if (!strcasecmp(alignment_str, "right")) alignment = 1; else if (!strcasecmp(alignment_str, "random")) alignment = -1, alignment_random_p = True; else { fprintf (stderr, "%s: alignment must be left/center/right/random, not \"%s\"\n", progname, alignment_str); exit (1); } sc->tc = textclient_open (sc->dpy); if (max_lines < 1) max_lines = 1; min_lines = max_lines * 0.66; if (min_lines > max_lines - 3) min_lines = max_lines - 4; if (min_lines < 1) min_lines = 1; parse_color (mi, "foreground", get_string_resource(mi->dpy, "foreground", "Foreground"), sc->color); sc->top_margin = (sc->char_width * 100); sc->bottom_margin = -sc->top_margin; reshape_fliptext (mi, MI_WIDTH(mi), MI_HEIGHT(mi)); /* compute left/right */ } ENTRYPOINT void draw_fliptext (ModeInfo *mi) { fliptext_configuration *sc = &scs[MI_SCREEN(mi)]; /* XtAppContext app = XtDisplayToApplicationContext (sc->dpy);*/ Display *dpy = MI_DISPLAY(mi); Window window = MI_WINDOW(mi); int i; if (!sc->glx_context) return; glXMakeCurrent(MI_DISPLAY(mi), MI_WINDOW(mi), *(sc->glx_context)); #if 0 if (XtAppPending (app) & (XtIMTimer|XtIMAlternateInput)) XtAppProcessEvent (app, XtIMTimer|XtIMAlternateInput); #endif glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); mi->polygon_count = 0; glPushMatrix(); glRotatef(current_device_rotation(), 0, 0, 1); { GLfloat s = 3.0 / (sc->top_margin - sc->bottom_margin); glScalef(s, s, s); } glRotatef (sc->rotation.x, 1, 0, 0); glRotatef (sc->rotation.y, 0, 1, 0); glRotatef (sc->rotation.z, 0, 0, 1); #if 0 glDisable (GL_TEXTURE_2D); glColor3f (1,1,1); glBegin (GL_LINE_LOOP); glVertex3f (sc->left_margin, sc->top_margin, 0); glVertex3f (sc->right_margin, sc->top_margin, 0); glVertex3f (sc->right_margin, sc->bottom_margin, 0); glVertex3f (sc->left_margin, sc->bottom_margin, 0); glEnd(); glBegin (GL_LINES); glVertex3f (sc->in.x, sc->top_margin, sc->in.z); glVertex3f (sc->in.x, sc->bottom_margin, sc->in.z); glVertex3f (sc->mid.x, sc->top_margin, sc->mid.z); glVertex3f (sc->mid.x, sc->bottom_margin, sc->mid.z); glVertex3f (sc->out.x, sc->top_margin, sc->out.z); glVertex3f (sc->out.x, sc->bottom_margin, sc->out.z); glEnd(); glEnable (GL_TEXTURE_2D); #endif for (i = 0; i < sc->nlines; i++) { line *line = sc->lines[i]; draw_line (mi, line); tick_line (sc, line); } for (i = sc->nlines-1; i >= 0; i--) { line *line = sc->lines[i]; if (line->state == DEAD) free_line (sc, line); } if (sc->nlines == 0) reset_lines (mi); glPopMatrix(); if (mi->fps_p) do_fps (mi); glFinish(); glXSwapBuffers(dpy, window); } ENTRYPOINT void release_fliptext (ModeInfo *mi) { if (scs) { int screen; for (screen = 0; screen < MI_NUM_SCREENS(mi); screen++) { fliptext_configuration *sc = &scs[screen]; if (sc->tc) textclient_close (sc->tc); /* #### there's more to free here */ } free (scs); scs = 0; } FreeAllGL(mi); } XSCREENSAVER_MODULE ("FlipText", fliptext) #endif /* USE_GL */ xscreensaver-5.36/hacks/glx/antmaze.c000644 000767 000024 00000123077 12707240772 017646 0ustar00jwzstaff000000 000000 /* * Permission to use, copy, modify, and distribute this software and its * documentation for any purpose and without fee is hereby granted, * provided that the above copyright notice appear in all copies and that * both that copyright notice and this permission notice appear in * supporting documentation. * * This file is provided AS IS with no warranties of any kind. The author * shall have no liability with respect to the infringement of copyrights, * trade secrets or any patents by this file or any part thereof. In no * event will the author be liable for any lost revenue or profits or * other special, indirect and consequential damages. * * Copyright 2004 Blair Tennessy * tennessy@cs.ubc.ca */ #if 0 static const char sccsid[] = "@(#)antmaze.c 5.01 2001/03/01 xlockmore"; #endif #ifdef STANDALONE # define MODE_antmaze # define DEFAULTS "*delay: 20000 \n" \ "*showFPS: False \n" \ "*fpsSolid: True \n" # define refresh_antmaze 0 # include "xlockmore.h" /* from the xscreensaver distribution */ #else /* !STANDALONE */ # include "xlock.h" /* from the xlockmore distribution */ #endif /* !STANDALONE */ #ifdef HAVE_JWXYZ # include "jwxyz.h" #else # include # include # include #endif #ifdef HAVE_JWZGLES # include "jwzgles.h" #endif /* HAVE_JWZGLES */ #ifdef MODE_antmaze #include "sphere.h" #include "tube.h" #include "rotator.h" #include "gltrackball.h" #define DEF_SOLIDANTMAZE "False" #define DEF_NOANTS "False" static int solidantmaze; static int noants; static XrmOptionDescRec opts[] = { {"-solidantmaze", ".antmaze.solidantmaze", XrmoptionNoArg, "on"}, {"+solidantmaze", ".antmaze.solidantmaze", XrmoptionNoArg, "off"}, {"-noants", ".antmaze.noants", XrmoptionNoArg, "on"}, {"+noants", ".antmaze.noants", XrmoptionNoArg, "off"} }; static argtype vars[] = { {&solidantmaze, "solidantmaze", "Solidantmaze", DEF_SOLIDANTMAZE, t_Bool}, {&noants, "noants", "Noants", DEF_NOANTS, t_Bool} }; static OptionStruct desc[] = { {"-/+solidantmaze", "select between a SOLID or a NET Antmaze Strip"}, {"-/+noants", "turn on/off walking ants"} }; ENTRYPOINT ModeSpecOpt antmaze_opts = {sizeof opts / sizeof opts[0], opts, sizeof vars / sizeof vars[0], vars, desc}; #ifdef USE_MODULES ModStruct antmaze_description = {"antmaze", "init_antmaze", "draw_antmaze", "release_antmaze", "draw_antmaze", "change_antmaze", NULL, &antmaze_opts, 1000, 1, 1, 1, 4, 1.0, "", "draws some ants", 0, NULL}; #endif #define Scale4Window 0.3 #define Scale4Iconic 0.4 #define sqr(A) ((A)*(A)) #ifndef Pi #define Pi M_PI #endif #define ObjAntmazeStrip 0 #define ObjAntBody 1 #define MaxObj 2 /*************************************************************************/ #include "ants.h" #define ANTCOUNT 5 #define PI 3.14157 #define EPSILON 0.01 #define BOARDSIZE 10 #define BOARDCOUNT 2 #define PARTS 20 #define checkImageWidth 64 #define checkImageHeight 64 typedef struct { GLint WindH, WindW; GLfloat step; GLfloat ant_position; GLXContext *glx_context; rotator *rot; trackball_state *trackball; Bool button_down_p; int focus; int currentboard; double antdirection[ANTCOUNT]; double antposition[ANTCOUNT][3]; int anton[ANTCOUNT]; double antvelocity[ANTCOUNT]; double antsize[ANTCOUNT]; int bposition[ANTCOUNT][2]; int board[BOARDCOUNT][10][10]; int part[ANTCOUNT]; double antpath[ANTCOUNT][PARTS][2]; int antpathlength[ANTCOUNT]; GLubyte checkers[checkImageWidth][checkImageHeight][3]; GLuint checktexture, brushedtexture; double elevator; double ant_step; double first_ant_step; int started; int introduced; int entroducing; double fadeout; double fadeoutspeed; int mag; } antmazestruct; static antmazestruct *antmaze = (antmazestruct *) NULL; static const GLfloat MaterialRed[] = {0.6, 0.0, 0.0, 1.0}; /*static const GLfloat MaterialMagenta[] = {0.6, 0.2, 0.5, 1.0};*/ static const GLfloat MaterialGray8[] = {0.8, 0.8, 0.8, 1.0}; static const GLfloat MaterialGray35[] = {0.30, 0.30, 0.30, 1.0}; static const GLfloat MaterialGray4[] = {0.40, 0.40, 0.40, 1.0}; static const GLfloat MaterialOrange[] = {1.0, 0.69, 0.00, 1.0}; static const GLfloat MaterialGreen[] = {0.1, 0.4, 0.2, 1.0}; /* lighting variables */ static const GLfloat front_shininess[] = {60.0}; static const GLfloat front_specular[] = {0.8, 0.8, 0.8, 1.0}; static const GLfloat ambient[] = {0.1, 0.1, 0.1, 1.0}; /*static const GLfloat ambient2[] = {0.0, 0.0, 0.0, 0.0};*/ static const GLfloat diffuse[] = {0.8, 0.8, 0.8, 1.0}; static const GLfloat position0[] = {1.0, 5.0, 1.0, 1.0}; static const GLfloat position1[] = {-1.0, -5.0, 1.0, 1.0}; /*static const GLfloat lmodel_ambient[] = {0.8, 0.8, 0.8, 1.0};*/ /*static const GLfloat lmodel_twoside[] = {GL_TRUE};*/ /*static const GLfloat spotlight_ambient[] = { 0.0, 0.0, 0.0, 1.0 };*/ /*static const GLfloat spotlight_diffuse[] = { 1.0, 1.0, 1.0, 1.0 };*/ #define NUM_SCENES 2 /* filled sphere */ static Bool mySphere(float radius) { #if 0 GLUquadricObj *quadObj; if((quadObj = gluNewQuadric()) == 0) return False; gluQuadricDrawStyle(quadObj, (GLenum) GLU_FILL); gluSphere(quadObj, radius, 16, 16); gluDeleteQuadric(quadObj); #else glPushMatrix(); glScalef (radius, radius, radius); glRotatef (90, 1, 0, 0); unit_sphere (16, 16, False); glPopMatrix(); #endif return True; } #if 0 /* silhouette sphere */ static Bool mySphere2(float radius) { GLUquadricObj *quadObj; if((quadObj = gluNewQuadric()) == 0) return False; gluQuadricDrawStyle(quadObj, (GLenum) GLU_SILHOUETTE); gluSphere(quadObj, radius, 16, 8); gluDeleteQuadric(quadObj); return True; } #endif /* textured sphere */ static Bool mySphereTex(float radius) { #if 0 GLUquadricObj *quadObj; if((quadObj = gluNewQuadric()) == 0) return False; gluQuadricDrawStyle(quadObj, (GLenum) GLU_FILL); gluQuadricTexture(quadObj, GL_TRUE); gluQuadricNormals(quadObj, GLU_SMOOTH); gluSphere(quadObj, radius, 32, 16); gluDeleteQuadric(quadObj); #else glPushMatrix(); glScalef (radius, radius, radius); glRotatef (90, 1, 0, 0); unit_sphere (32, 16, False); glPopMatrix(); #endif return True; } /* filled cone */ static Bool myCone(float radius) { #if 0 GLUquadricObj *quadObj; if ((quadObj = gluNewQuadric()) == 0) return False; gluQuadricDrawStyle(quadObj, (GLenum) GLU_FILL); gluCylinder(quadObj, radius, 0, radius * 2, 8, 1); gluDeleteQuadric(quadObj); #else cone (0, 0, 0, 0, 0, radius * 2, radius, 0, 8, True, True, False); #endif return True; } /* no cone */ static Bool myCone2(float radius) { return True; } #define MATERIALS 4 static const float *antmaterial[ANTCOUNT] = {MaterialRed, MaterialGray35, MaterialGray4, MaterialOrange, MaterialGreen}; static const float *materials[MATERIALS] = {MaterialRed, MaterialGray35, MaterialGray4, MaterialOrange}; static void makeCheckImage(antmazestruct *mp) { int i, j; for (i = 0; i < checkImageWidth; i++) { for (j = 0; j < checkImageHeight; j++) { if(((((i&0x8)==0)^((j&0x8)))==0)) { int c = 102 + random()%32; mp->checkers[i][j][0] = c; mp->checkers[i][j][1] = c; mp->checkers[i][j][2] = c; } else { int c = 153 + random()%32; mp->checkers[i][j][0] = c;/*153;*/ mp->checkers[i][j][1] = c;/*c;*//*0;*/ mp->checkers[i][j][2] = c;/*c;*//*0;*/ } } } glGenTextures(1, &mp->checktexture); glBindTexture(GL_TEXTURE_2D, mp->checktexture); glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR); glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR); glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_WRAP_S,GL_REPEAT); glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_WRAP_T,GL_REPEAT); glTexImage2D(GL_TEXTURE_2D, 0, 3, checkImageWidth, checkImageHeight, 0, GL_RGB, GL_UNSIGNED_BYTE, &mp->checkers[0][0]); glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE); } static void makeBrushedImage(antmazestruct *mp) { int i, j, c; for(i = 0; i < checkImageWidth; ++i) for(j = 0; j < checkImageHeight; ++j) { c = 102+102*fabs(sin(2.0*i / Pi)*sin(2.0*j/Pi)) + random()%51; /* c = (i+j)%8==0 || (i+j+5)%8==0 ? 153 : 102; */ mp->checkers[i][j][0] = c; mp->checkers[i][j][1] = c; mp->checkers[i][j][2] = c; } /* for (i = 0; i < checkImageWidth; i++) { */ /* for (j = 0; j < checkImageHeight; j++) { */ /* int c = 102 + pow((random()%1000)/1000.0, 4)*103; */ /* checkers[i][j][0] = c; */ /* checkers[i][j][1] = c; */ /* checkers[i][j][2] = c; */ /* } */ /* } */ /* /\* smooth *\/ */ /* for (i = 0; i < checkImageWidth; i++) { */ /* for (j = 0; j < checkImageHeight; j++) { */ /* int a = checkers[(i+checkImageWidth+1)%checkImageWidth][j][0] + */ /* 4*checkers[i][j][0] + checkers[(i+1)%checkImageWidth][j][0]; */ /* a /= 6; */ /* checkers[i][j][0] = a; */ /* checkers[i][j][1] = a; */ /* checkers[i][j][2] = a; */ /* } */ /* } */ glGenTextures(1, &mp->brushedtexture); glBindTexture(GL_TEXTURE_2D, mp->brushedtexture); glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR); glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR); glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_WRAP_S,GL_REPEAT); glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_WRAP_T,GL_REPEAT); glTexImage2D(GL_TEXTURE_2D, 0, 3, checkImageWidth, checkImageHeight, 0, GL_RGB, GL_UNSIGNED_BYTE, &mp->checkers[0][0]); glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE); } #if 0 static void draw_wall(ModeInfo *mi, double x1, double z1, double x2, double z2) { float x = fabs(x2 - x1)/2.0; glBegin(GL_QUADS); /* draw top */ glNormal3f(0.0, 1.0, 0.0); glTexCoord2f(0.0, 0.0); glVertex3f(x1, 1.0, z1+0.25); glTexCoord2f(x, 0.0); glVertex3f(x2, 1.0, z2+0.25); glTexCoord2f(x, 0.25); glVertex3f(x2, 1.0, z2-0.25); glTexCoord2f(0.0, 0.25); glVertex3f(x1, 1.0, z1-0.25); mi->polygon_count++; /* draw sides */ glNormal3f(0.0, 0.0, 1.0); glTexCoord2f(0.0, 0.0); glVertex3f(x1, 0.0, z1+0.25); glTexCoord2f(x, 0.0); glVertex3f(x2, 0.0, z2+0.25); glTexCoord2f(x, 0.5); glVertex3f(x2, 1.0, z2+0.25); glTexCoord2f(0.0, 0.5); glVertex3f(x1, 1.0, z1+0.25); mi->polygon_count++; glNormal3f(0.0, 0.0, -1.0); glTexCoord2f(0.0, 0.0); glVertex3f(x1, 0.0, z1-0.25); glTexCoord2f(x, 0.0); glVertex3f(x2, 0.0, z2-0.25); glTexCoord2f(x, 0.5); glVertex3f(x2, 1.0, z2-0.25); glTexCoord2f(0.0, 0.5); glVertex3f(x1, 1.0, z1-0.25); mi->polygon_count++; /* draw ends */ glNormal3f(1.0, 0.0, 0.0); glTexCoord2f(0.0, 0.0); glVertex3f(x2, 0.0, z2+0.25); glTexCoord2f(0.25, 0.0); glVertex3f(x2, 0.0, z2-0.25); glTexCoord2f(0.25, 0.5); glVertex3f(x2, 1.0, z2-0.25); glTexCoord2f(0.0, 0.5); glVertex3f(x2, 1.0, z2+0.25); mi->polygon_count++; glNormal3f(-1.0, 0.0, 0.0); glTexCoord2f(0.0, 0.0); glVertex3f(x1, 0.0, z1-0.25); glTexCoord2f(0.25, 0.0); glVertex3f(x1, 0.0, z1+0.25); glTexCoord2f(0.25, 0.5); glVertex3f(x1, 1.0, z1+0.25); glTexCoord2f(0.0, 0.5); glVertex3f(x1, 1.0, z1-0.25); mi->polygon_count++; glEnd(); } #endif static void draw_board(ModeInfo *mi, antmazestruct *mp) { int i, j; double h = 0.5; double stf = 0.0625; glBindTexture(GL_TEXTURE_2D, mp->checktexture); glBegin(GL_QUADS); for(i = 0; i < BOARDSIZE; ++i) for(j = 0; j < BOARDSIZE; ++j) { if(mp->board[mp->currentboard][j][i]) { /* /\* draw top *\/ */ /* glNormal3f(0.0, 1.0, 0.0); */ /* glTexCoord2f(0.0 + stf, 0.0 + stf); */ /* glVertex3f(i-0.5, h, j+0.5); */ /* glTexCoord2f(1.0 + stf, 0.0 + stf); */ /* glVertex3f(i+0.5, h, j+0.5); */ /* glTexCoord2f(1.0 + stf, 1.0 + stf); */ /* glVertex3f(i+0.5, h, j-0.5); */ /* glTexCoord2f(0.0 + stf, 1.0 + stf); */ /* glVertex3f(i-0.5, h, j-0.5); */ /* draw top */ glNormal3f(0.0, 1.0, 0.0); glTexCoord2f(0.0 + stf, 0.0 + stf); glVertex3f(i-0.5, h, j+0.5); glTexCoord2f(1.0 + stf, 0.0 + stf); glVertex3f(i+0.5, h, j+0.5); glTexCoord2f(1.0 + stf, 1.0 + stf); glVertex3f(i+0.5, h, j-0.5); glTexCoord2f(0.0 + stf, 1.0 + stf); glVertex3f(i-0.5, h, j-0.5); mi->polygon_count++; /* draw south face */ if(j == 9 || !mp->board[mp->currentboard][j+1][i]) { glNormal3f(0.0, 0.0, 1.0); glTexCoord2f(0.0 + stf, 0.0 + stf); glVertex3f(i-0.5, 0.0, j+0.5); glTexCoord2f(1.0 + stf, 0.0 + stf); glVertex3f(i+0.5, 0.0, j+0.5); glTexCoord2f(1.0 + stf, h + stf); glVertex3f(i+0.5, h, j+0.5); glTexCoord2f(0.0 + stf, h + stf); glVertex3f(i-0.5, h, j+0.5); mi->polygon_count++; } /* draw north face */ if(j == 0 || !mp->board[mp->currentboard][j-1][i]) { glNormal3f(0.0, 0.0, -1.0); glTexCoord2f(0.0 + stf, 0.0 + stf); glVertex3f(i+0.5, 0.0, j-0.5); glTexCoord2f(1.0 + stf, 0.0 + stf); glVertex3f(i-0.5, 0.0, j-0.5); glTexCoord2f(1.0 + stf, h + stf); glVertex3f(i-0.5, h, j-0.5); glTexCoord2f(0.0 + stf, h + stf); glVertex3f(i+0.5, h, j-0.5); mi->polygon_count++; } /* draw east face */ if(i == 9 || !mp->board[mp->currentboard][j][i+1]) { glNormal3f(1.0, 0.0, 0.0); glTexCoord2f(0.0 + stf, 0.0 + stf); glVertex3f(i+0.5, 0.0, j+0.5); glTexCoord2f(1.0 + stf, 0.0 + stf); glVertex3f(i+0.5, 0.0, j-0.5); glTexCoord2f(1.0 + stf, h + stf); glVertex3f(i+0.5, h, j-0.5); glTexCoord2f(0.0 + stf, h + stf); glVertex3f(i+0.5, h, j+0.5); mi->polygon_count++; } /* draw west face */ if(i == 0 || !mp->board[mp->currentboard][j][i-1]) { glNormal3f(-1.0, 0.0, 0.0); glTexCoord2f(0.0 + stf, 0.0 + stf); glVertex3f(i-0.5, 0.0, j-0.5); glTexCoord2f(1.0 + stf, 0.0 + stf); glVertex3f(i-0.5, 0.0, j+0.5); glTexCoord2f(1.0 + stf, h + stf); glVertex3f(i-0.5, h, j+0.5); glTexCoord2f(0.0 + stf, h + stf); glVertex3f(i-0.5, h, j-0.5); mi->polygon_count++; } } else { double tx = 2.0; glNormal3f(0.0, 1.0, 0.0); glTexCoord2f(0.0, 0.0); glVertex3f(i-0.5, 0.0, j+0.5); glTexCoord2f(tx, 0.0); glVertex3f(i+0.5, 0.0, j+0.5); glTexCoord2f(tx, tx); glVertex3f(i+0.5, 0.0, j-0.5); glTexCoord2f(0.0, tx); glVertex3f(i-0.5, 0.0, j-0.5); mi->polygon_count++; } } glEnd(); /* /\* draw elevator *\/ */ /* glBindTexture(GL_TEXTURE_2D, brushedtexture); */ /* glBegin(GL_QUADS); */ /* glNormal3f(0.0, 1.0, 0.0); */ /* if(pastfirst) { */ /* /\* source *\/ */ /* glTexCoord2f(0.0, 0.0); */ /* glVertex3f(0.5, 0.0, BOARDSIZE - 0.5 + 0.2); */ /* glTexCoord2f(1.0, 0.0); */ /* glVertex3f(1.5, 0.0, BOARDSIZE - 0.5 + 0.2); */ /* glTexCoord2f(1.0, 1.5); */ /* glVertex3f(1.5, 0.0, BOARDSIZE + 1.0 + 0.2); */ /* glTexCoord2f(0.0, 1.5); */ /* glVertex3f(0.5, 0.0, BOARDSIZE + 1.0 + 0.2); */ /* mi->polygon_count++; */ /* } */ /* /\* destination *\/ */ /* glTexCoord2f(0.0, 0.0); */ /* glVertex3f(BOARDSIZE - 2.5, elevator, -2.0 - 0.2); */ /* glTexCoord2f(1.0, 0.0); */ /* glVertex3f(BOARDSIZE - 1.5, elevator, -2.0 - 0.2); */ /* glTexCoord2f(1.0, 1.5); */ /* glVertex3f(BOARDSIZE - 1.5, elevator, -0.5 - 0.2); */ /* glTexCoord2f(0.0, 1.5); */ /* glVertex3f(BOARDSIZE - 2.5, elevator, -0.5 - 0.2); */ /* mi->polygon_count++; */ /* glEnd(); */ /* for(i = 0; i < BOARDSIZE; ++i) */ /* for(j = 0; j < BOARDSIZE; ++j) { */ /* if(board[j][i]) { */ /* /\* draw brushed boxtop *\/ */ /* glNormal3f(0.0, 1.0, 0.0); */ /* glTexCoord2f(0.0 + stf, 0.0 + stf); */ /* glVertex3f(i-0.5 + stf, h+0.001, j+0.5 - stf); */ /* glTexCoord2f(1.0 + stf, 0.0 + stf); */ /* glVertex3f(i+0.5 - stf, h+0.001, j+0.5 - stf); */ /* glTexCoord2f(1.0 + stf, 1.0 + stf); */ /* glVertex3f(i+0.5 - stf, h+0.001, j-0.5 + stf); */ /* glTexCoord2f(0.0 + stf, 1.0 + stf); */ /* glVertex3f(i-0.5 + stf, h+0.001, j-0.5 + stf); */ /* mi->polygon_count++; */ /* } */ /* } */ /* glEnd(); */ } static void build_board(antmazestruct *mp, int b) { int i, j; for(i = 0; i < BOARDSIZE; ++i) for(j = 0; j < BOARDSIZE; ++j) mp->board[b][i][j] = 1; /* for(i = 0; i < BOARDSIZE; ++i) { */ /* board[0][i] = 1; */ /* board[i][0] = 1; */ /* board[BOARDSIZE-1][BOARDSIZE-i] = 1; */ /* board[BOARDSIZE-i][BOARDSIZE-1] = 1; */ /* } */ /* board[0][BOARDSIZE-2] = 0; */ /* board[BOARDSIZE-1][1] = 0; */ mp->board[b][BOARDSIZE-1][1] = 0; mp->board[b][0][BOARDSIZE-2] = 0; /* build the ant paths */ if(mp->currentboard == b) { for(i = 0; i < ANTCOUNT; ++i) { int sx = BOARDSIZE-2; int sy = 1; for(j = 0; ; ++j) { mp->board[b][sx][sy] = 0; mp->antpath[i][j][0] = sy - 5.0; mp->antpath[i][j][1] = sx - 5.0; if(random()%2) { if(sx > 1) sx -= 1; else if(sy < BOARDSIZE-2) sy += 1; else break; } else { if(sy < BOARDSIZE-2) sy += 1; else if(sx > 1) sx -= 1; else break; } } ++j; mp->antpath[i][j][0] = BOARDSIZE-7.0; mp->antpath[i][j][1] = -7.0; mp->antpathlength[i] = j; } } /* for(i = 0; i < 20; ++i) { */ /* int x = 1 + random()%(BOARDSIZE-2); */ /* int y = 1 + random()%(BOARDSIZE-2); */ /* board[x][y] = 1; */ /* } */ } /* compute nearness */ static int near(double a[2], double b[2]) { return fabs(a[0] - b[0]) < 0.5 && fabs(a[1] - b[1]) < 0.5; } static double sign(double d) { return d < 0.0 ? -1.0 : 1.0; } static double min(double a, double b) { return a < b ? a : b; } /* draw method for ant */ static Bool draw_ant(ModeInfo *mi, antmazestruct *mp, const float *Material, int mono, int shadow, float ant_step, Bool (*sphere)(float), Bool (*cone)(float)) { float cos1 = cos(mp->ant_step); float cos2 = cos(mp->ant_step + 2 * Pi / 3); float cos3 = cos(mp->ant_step + 4 * Pi / 3); float sin1 = sin(mp->ant_step); float sin2 = sin(mp->ant_step + 2 * Pi / 3); float sin3 = sin(mp->ant_step + 4 * Pi / 3); glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, mono ? MaterialGray5 : Material); /* glEnable(GL_CULL_FACE); */ glPushMatrix(); glScalef(1, 1.3, 1); if(!((*sphere)(0.18))) return False; glScalef(1, 1 / 1.3, 1); glTranslatef(0.00, 0.30, 0.00); if(!((*sphere)(0.2))) return False; glTranslatef(-0.05, 0.17, 0.05); glRotatef(-90, 1, 0, 0); glRotatef(-25, 0, 1, 0); if(!((*cone)(0.05))) return False; glTranslatef(0.00, 0.10, 0.00); if(!((*cone)(0.05))) return False; glRotatef(25, 0, 1, 0); glRotatef(90, 1, 0, 0); glScalef(1, 1.3, 1); glTranslatef(0.15, -0.65, 0.05); if(!((*sphere)(0.25))) return False; glScalef(1, 1 / 1.3, 1); glPopMatrix(); /* glDisable(GL_CULL_FACE); */ glDisable(GL_LIGHTING); /* ANTENNAS */ glBegin(GL_LINES); glColor3fv(mono ? MaterialGray5 : Material); glVertex3f(0.00, 0.30, 0.00); glColor3fv(MaterialGray); glVertex3f(0.40, 0.70, 0.40); mi->polygon_count++; glColor3fv(mono ? MaterialGray5 : Material); glVertex3f(0.00, 0.30, 0.00); glColor3fv(MaterialGray); glVertex3f(0.40, 0.70, -0.40); mi->polygon_count++; glEnd(); if(!shadow) { glBegin(GL_POINTS); glColor3fv(mono ? MaterialGray6 : MaterialRed); glVertex3f(0.40, 0.70, 0.40); mi->polygon_count++; glVertex3f(0.40, 0.70, -0.40); mi->polygon_count++; glEnd(); } /* LEFT-FRONT ARM */ glBegin(GL_LINE_STRIP); glColor3fv(mono ? MaterialGray5 : Material); glVertex3f(0.00, 0.05, 0.18); glVertex3f(0.35 + 0.05 * cos1, 0.15, 0.25); mi->polygon_count++; glColor3fv(MaterialGray); glVertex3f(-0.20 + 0.05 * cos1, 0.25 + 0.1 * sin1, 0.45); mi->polygon_count++; glEnd(); /* LEFT-CENTER ARM */ glBegin(GL_LINE_STRIP); glColor3fv(mono ? MaterialGray5 : Material); glVertex3f(0.00, 0.00, 0.18); glVertex3f(0.35 + 0.05 * cos2, 0.00, 0.25); mi->polygon_count++; glColor3fv(MaterialGray); glVertex3f(-0.20 + 0.05 * cos2, 0.00 + 0.1 * sin2, 0.45); mi->polygon_count++; glEnd(); /* LEFT-BACK ARM */ glBegin(GL_LINE_STRIP); glColor3fv(mono ? MaterialGray5 : Material); glVertex3f(0.00, -0.05, 0.18); glVertex3f(0.35 + 0.05 * cos3, -0.15, 0.25); mi->polygon_count++; glColor3fv(MaterialGray); glVertex3f(-0.20 + 0.05 * cos3, -0.25 + 0.1 * sin3, 0.45); mi->polygon_count++; glEnd(); /* RIGHT-FRONT ARM */ glBegin(GL_LINE_STRIP); glColor3fv(mono ? MaterialGray5 : Material); glVertex3f(0.00, 0.05, -0.18); glVertex3f(0.35 - 0.05 * sin1, 0.15, -0.25); mi->polygon_count++; glColor3fv(MaterialGray); glVertex3f(-0.20 - 0.05 * sin1, 0.25 + 0.1 * cos1, -0.45); mi->polygon_count++; glEnd(); /* RIGHT-CENTER ARM */ glBegin(GL_LINE_STRIP); glColor3fv(mono ? MaterialGray5 : Material); glVertex3f(0.00, 0.00, -0.18); glVertex3f(0.35 - 0.05 * sin2, 0.00, -0.25); mi->polygon_count++; glColor3fv(MaterialGray); glVertex3f(-0.20 - 0.05 * sin2, 0.00 + 0.1 * cos2, -0.45); mi->polygon_count++; glEnd(); /* RIGHT-BACK ARM */ glBegin(GL_LINE_STRIP); glColor3fv(mono ? MaterialGray5 : Material); glVertex3f(0.00, -0.05, -0.18); glVertex3f(0.35 - 0.05 * sin3, -0.15, -0.25); mi->polygon_count++; glColor3fv(MaterialGray); glVertex3f(-0.20 - 0.05 * sin3, -0.25 + 0.1 * cos3, -0.45); mi->polygon_count++; glEnd(); if(!shadow) { glBegin(GL_POINTS); glColor3fv(mono ? MaterialGray8 : MaterialGray35); glVertex3f(-0.20 + 0.05 * cos1, 0.25 + 0.1 * sin1, 0.45); glVertex3f(-0.20 + 0.05 * cos2, 0.00 + 0.1 * sin2, 0.45); glVertex3f(-0.20 + 0.05 * cos3, -0.25 + 0.1 * sin3, 0.45); glVertex3f(-0.20 - 0.05 * sin1, 0.25 + 0.1 * cos1, -0.45); glVertex3f(-0.20 - 0.05 * sin2, 0.00 + 0.1 * cos2, -0.45); glVertex3f(-0.20 - 0.05 * sin3, -0.25 + 0.1 * cos3, -0.45); mi->polygon_count += 6; glEnd(); } glEnable(GL_LIGHTING); return True; } static Bool draw_antmaze_strip(ModeInfo * mi) { antmazestruct *mp = &antmaze[MI_SCREEN(mi)]; int i; int mono = MI_IS_MONO(mi); /* glMatrixMode(GL_MODELVIEW); */ /* glLoadIdentity(); */ /* glPushMatrix(); */ glEnable(GL_LIGHTING); /* glDisable(GL_BLEND); */ glEnable(GL_LIGHT0); glEnable(GL_LIGHT1); /* set light */ /* double l1 = 1.0 - (elevator < 1.0 ? elevator : 2.0 - elevator); */ /* GLfloat df[4] = {0.8*l1, 0.8*l1, 0.8*l1, 1.0}; */ /* glLightfv(GL_LIGHT0, GL_DIFFUSE, df); */ /* glLightfv(GL_LIGHT1, GL_DIFFUSE, df); */ /* draw board */ if(mp->elevator < 1.0) { glEnable(GL_TEXTURE_2D); glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, MaterialGray6); glTranslatef(-(BOARDSIZE-1)/2.0, 0.0, -(BOARDSIZE-1)/2.0); draw_board(mi, mp); glTranslatef(BOARDSIZE/2.0, 0.0, BOARDSIZE/2.0); glDisable(GL_TEXTURE_2D); } mp->introduced--; glTranslatef(0.0, -0.1, 0.0); for(i = 0; i < ANTCOUNT; ++i) { /* glLightfv(GL_LIGHT0, GL_DIFFUSE, df); */ /* glLightfv(GL_LIGHT1, GL_DIFFUSE, df); */ if(!mp->anton[i]) { continue; } /* determine location, move to goal */ glPushMatrix(); glTranslatef(0.0, 0.01, 0.0); glTranslatef(mp->antposition[i][0], mp->antposition[i][2], mp->antposition[i][1]); /* glScalef(1.0, 0.01, 1.0); */ glScalef(0.6, 0.01, 0.6); glRotatef(180.0 + mp->antdirection[i]*180.0/PI, 0.0, 1.0, 0.0); glRotatef(90.0, 0.0, 0.0, 1.0); glDisable(GL_LIGHTING); glEnable(GL_BLEND); glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); glColor4fv(MaterialGrayB); glScalef(mp->antsize[i], mp->antsize[i], mp->antsize[i]); /* slow down first ant */ if(i == 0 && mp->part[i] == mp->antpathlength[i]) draw_ant(mi, mp, MaterialGrayB, mono, 1, mp->first_ant_step, mySphere, myCone); else draw_ant(mi, mp, MaterialGrayB, mono, 1, mp->ant_step, mySphere, myCone); glPopMatrix(); glDisable(GL_BLEND); glEnable(GL_LIGHTING); glPushMatrix(); /* glTranslatef(0.0, 0.18, 0.0); */ glTranslatef(0.0, 0.12, 0.0); glTranslatef(mp->antposition[i][0], mp->antposition[i][2], mp->antposition[i][1]); glRotatef(180.0 + mp->antdirection[i]*180.0/PI, 0.0, 1.0, 0.0); glRotatef(90.0, 0.0, 0.0, 1.0); glScalef(0.6, 0.6, 0.6); glScalef(mp->antsize[i], mp->antsize[i], mp->antsize[i]); /* glEnable(GL_TEXTURE_2D); */ /* glBindTexture(GL_TEXTURE_2D, brushedtexture); */ /* glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, MaterialRed); */ /* slow down first ant */ if(i == 0 && mp->part[i] == mp->antpathlength[i] && mp->elevator > 0.0) { glLightfv(GL_LIGHT0, GL_DIFFUSE, diffuse); glLightfv(GL_LIGHT1, GL_DIFFUSE, diffuse); draw_ant(mi, mp, antmaterial[i], mono, 1, mp->first_ant_step, mySphere, myCone); } else { /* glLightfv(GL_LIGHT0, GL_DIFFUSE, df); */ /* glLightfv(GL_LIGHT1, GL_DIFFUSE, df); */ glEnable(GL_TEXTURE_2D); glBindTexture(GL_TEXTURE_2D, mp->brushedtexture); draw_ant(mi, mp, antmaterial[i], mono, 1, mp->ant_step, mySphereTex, myCone); glDisable(GL_TEXTURE_2D); } /* draw_ant(mi, antmaterial[i], mono, 0, ant_step, mySphereTex, myCone); */ /* glDisable(GL_TEXTURE_2D); */ glPopMatrix(); } /* glPopMatrix(); */ /* /\* now draw overlay *\/ */ /* glDisable(GL_LIGHTING); */ /* glDisable(GL_BLEND); */ /* /\* go to ortho mode *\/ */ /* glMatrixMode(GL_PROJECTION); */ /* glPushMatrix(); */ /* glLoadIdentity(); */ /* glOrtho(-4.0, 4.0, -3.0, 3.0, -100.0, 100.0); */ /* /\* translate to corner *\/ */ /* glTranslatef(4.0-1.2, 3.0-1.2, 0.0); */ /* glDisable(GL_LIGHTING); */ /* glEnable(GL_BLEND); */ /* /\* draw the 2d board *\/ */ /* glBegin(GL_QUADS); */ /* { */ /* int i, j; */ /* double sz = 1.0; */ /* for(i = 0; i < BOARDSIZE; ++i) */ /* for(j = 0; j < BOARDSIZE; ++j) { */ /* int par = board[i][j]; */ /* glColor4f(par ? 0.4 : 0.6, */ /* par ? 0.4 : 0.6, */ /* par ? 0.4 : 0.6, */ /* 0.5); */ /* glNormal3f(0.0, 0.0, 1.0); */ /* glVertex3f((sz*(i+1))/BOARDSIZE, (sz*(j+1))/BOARDSIZE, 0.0); */ /* glVertex3f((sz*i)/BOARDSIZE, (sz*(j+1))/BOARDSIZE, 0.0); */ /* glVertex3f((sz*i)/BOARDSIZE, (sz*j)/BOARDSIZE, 0.0); */ /* glVertex3f((sz*(i+1))/BOARDSIZE, (sz*j)/BOARDSIZE, 0.0); */ /* mi->polygon_count++; */ /* } */ /* } */ /* glEnd(); */ /* glPopMatrix(); */ /* but the step size is the same! */ mp->ant_step += 0.18; /* if(ant_step > 2*Pi) { */ /* ant_step = 0.0; */ /* } */ if(mp->ant_step > 5*Pi) mp->started = 1; mp->ant_position += 1; return True; } #undef AntmazeDivisions #undef AntmazeTransversals ENTRYPOINT void reshape_antmaze(ModeInfo * mi, int width, int height) { double h = (GLfloat) height / (GLfloat) width; int size = (width / 512) + 1; antmazestruct *mp = &antmaze[MI_SCREEN(mi)]; glViewport(0, 0, mp->WindW = (GLint) width, mp->WindH = (GLint) height); glMatrixMode(GL_PROJECTION); glLoadIdentity(); gluPerspective(45, 1/h, 1, 25.0); glMatrixMode(GL_MODELVIEW); /* glLineWidth(3.0); */ glLineWidth(size); glPointSize(size); } static void update_ants(antmazestruct *mp) { int i; GLfloat df[4]; df[0] = df[1] = df[2] = 0.8*mp->fadeout; df[3] = 1.0; /* fade out */ if(mp->fadeoutspeed < -0.00001) { if(mp->fadeout <= 0.0) { /* switch boards: rebuild old board, increment current */ mp->currentboard = (mp->currentboard+1)%BOARDCOUNT; build_board(mp, mp->currentboard); mp->fadeoutspeed = 0.02; } mp->fadeout += mp->fadeoutspeed; glLightfv(GL_LIGHT0, GL_DIFFUSE, df); glLightfv(GL_LIGHT1, GL_DIFFUSE, df); } /* fade in */ if(mp->fadeoutspeed > 0.0001) { mp->fadeout += mp->fadeoutspeed; if(mp->fadeout >= 1.0) { mp->fadeout = 1.0; mp->fadeoutspeed = 0.0; mp->entroducing = 12; } glLightfv(GL_LIGHT0, GL_DIFFUSE, df); glLightfv(GL_LIGHT1, GL_DIFFUSE, df); } for(i = 0; i < ANTCOUNT; ++i) { if(!mp->anton[i] && mp->elevator < 1.0) { /* turn on ant */ if(mp->entroducing > 0 && mp->introduced <= 0 && random()%100 == 0) { mp->anton[i] = 1; mp->part[i] = 0; mp->antsize[i] = 0.0; mp->antposition[i][0] = -4.0; mp->antposition[i][1] = 5.0; mp->antdirection[i] = PI/2.0; mp->bposition[i][0] = 0; mp->bposition[i][1] = 8; mp->introduced = 300; mp->entroducing--; } continue; } if(mp->part[i] == 0 && mp->antsize[i] < 1.0) { mp->antsize[i] += 0.02; continue; } if(mp->part[i] > mp->antpathlength[i] && mp->antsize[i] > 0.0) { mp->antsize[i] -= 0.02; if(mp->antvelocity[i] > 0.0) { mp->antvelocity[i] -= 0.02; } else { mp->antvelocity[i] = 0.0; } continue; } if(mp->part[i] > mp->antpathlength[i] && mp->antsize[i] <= 0.0) { mp->antvelocity[i] = 0.02; /* if(i != 0) { */ antmaterial[i] = materials[random()%MATERIALS]; /* } */ mp->antdirection[i] = PI/2.0; mp->bposition[i][0] = 0; mp->bposition[i][1] = 8; mp->part[i] = 0; mp->antsize[i] = 0.0; mp->anton[i] = 0; mp->antposition[i][0] = -4.0; mp->antposition[i][1] = 5.0; /* /\* reset camera *\/ */ /* if(i == focus) { */ /* started = 0; */ /* ant_step = 0.0; */ /* } */ /* check for the end */ if(mp->entroducing <= 0) { int ao = 0, z = 0; for(z = 0; z < ANTCOUNT; ++z) { if(mp->anton[z]) { ao = 1; break; } } if(ao == 0) { mp->fadeoutspeed = -0.02; } } } /* near goal, bend path towards next step */ if(near(mp->antposition[i], mp->antpath[i][mp->part[i]])) { ++mp->part[i]; /* /\* special first ant *\/ */ /* if(i == 0 && part[i] > antpathlength[i]) { */ /* if(fir) */ /* first_ant_step = ant_step; */ /* antvelocity[i] = 0.0; */ /* /\* antposition[i][2] += 0.025; *\/ */ /* elevator += 0.025; */ /* /\* set light *\/ */ /* double l1 = 1.0 - (elevator < 1.0 ? elevator : 2.0 - elevator); */ /* GLfloat df[4] = {0.8*l1, 0.8*l1, 0.8*l1, 1.0}; */ /* glLightfv(GL_LIGHT0, GL_DIFFUSE, df); */ /* glLightfv(GL_LIGHT1, GL_DIFFUSE, df); */ /* /\* draw next board *\/ */ /* if(elevator > 1.0) { */ /* if(makenew == 1) { */ /* int re; */ /* /\* switch boards: rebuild old board, increment current *\/ */ /* currentboard = (currentboard+1)%BOARDCOUNT; */ /* build_board(currentboard); */ /* for(re = 1; re < ANTCOUNT; ++re) { */ /* anton[re] = 0; */ /* antmaterial[re] = materials[random()%MATERIALS]; */ /* } */ /* makenew = 0; */ /* } */ /* /\* draw the other board *\/ */ /* glEnable(GL_TEXTURE_2D); */ /* glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, MaterialGray6); */ /* glPushMatrix(); */ /* glTranslatef(-(-(BOARDSIZE-3.5)+(BOARDSIZE-1)/2.0), 0.0, */ /* -(2.4+BOARDSIZE+(BOARDSIZE-1)/2.0)); */ /* draw_board(mi, mp); */ /* glPopMatrix(); */ /* glDisable(GL_TEXTURE_2D); */ /* } */ /* /\* reset *\/ */ /* if(elevator > 2.0) { */ /* antposition[i][0] = -4.0;/\*-= -(-(BOARDSIZE-3.5)+(BOARDSIZE-1)/2.0);*\//\*= -4.0;*\/ */ /* antposition[i][1] = 5.5;/\*-(2.4+BOARDSIZE+(BOARDSIZE-1)/2.0);*\/ */ /* /\* antposition[i][2] = 0.15; *\/ */ /* antdirection[i] = PI/2.0; */ /* bposition[i][0] = 0; */ /* bposition[i][1] = 8; */ /* part[i] = 0; */ /* antvelocity[i] = 0.02; */ /* fir = 0; */ /* antmaterial[i] = MaterialRed; */ /* makenew = 1; */ /* elevator = 0.0; */ /* introduced = 200; */ /* } */ /* else { */ /* part[i]--; */ /* } */ /* } */ } /* move toward goal, correct ant direction if required */ else { /* difference */ double dx = mp->antpath[i][mp->part[i]][0] - mp->antposition[i][0]; double dz = - mp->antpath[i][mp->part[i]][1] + mp->antposition[i][1]; double theta, ideal; if(dz > EPSILON) theta = atan(dz/dx); else theta = dx > EPSILON ? 0.0 : PI; ideal = theta - mp->antdirection[i]; if(ideal < -Pi/2.0) ideal += Pi; /* compute correction */ { double dt = sign(ideal) * min(fabs(ideal), PI/90.0); mp->antdirection[i] += dt; if(mp->antdirection[i] > 2.0*PI) mp->antdirection[i] = 0.0; } } mp->antposition[i][0] += mp->antvelocity[i] * cos(mp->antdirection[i]); mp->antposition[i][1] += mp->antvelocity[i] * sin(-mp->antdirection[i]); } } static void pinit(antmazestruct *mp) { glClearDepth(1.0); glLightfv(GL_LIGHT0, GL_AMBIENT, ambient); glLightfv(GL_LIGHT0, GL_DIFFUSE, diffuse); glLightfv(GL_LIGHT0, GL_POSITION, position0); glLightfv(GL_LIGHT1, GL_AMBIENT, ambient); glLightfv(GL_LIGHT1, GL_DIFFUSE, diffuse); glLightfv(GL_LIGHT1, GL_POSITION, position1); glLightf(GL_LIGHT0, GL_LINEAR_ATTENUATION, 0.05); glLightf(GL_LIGHT0, GL_QUADRATIC_ATTENUATION, 0.001); glLightf(GL_LIGHT0, GL_CONSTANT_ATTENUATION, 0.1); glLightf(GL_LIGHT1, GL_LINEAR_ATTENUATION, 0.05); glLightf(GL_LIGHT1, GL_QUADRATIC_ATTENUATION, 0.001); glLightf(GL_LIGHT1, GL_CONSTANT_ATTENUATION, 0.1); /* 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_NORMALIZE); glFrontFace(GL_CCW); glCullFace(GL_BACK); /* antmaze */ glMaterialfv(GL_FRONT_AND_BACK, GL_SHININESS, front_shininess); glMaterialfv(GL_FRONT_AND_BACK, GL_SPECULAR, front_specular); glShadeModel(GL_SMOOTH); glEnable(GL_DEPTH_TEST); glDisable(GL_TEXTURE_2D); /* setup textures */ makeCheckImage(mp); makeBrushedImage(mp); build_board(mp, 0); build_board(mp, 1); /* makeCheckImage(); */ /* glPixelStorei(GL_UNPACK_ALIGNMENT, 1); */ /* glTexImage2D(GL_TEXTURE_2D, 0, 3, checkImageWidth, */ /* checkImageHeight, 0, GL_RGB, GL_UNSIGNED_BYTE, checkers); */ /* glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT); */ /* glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT); */ /* glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); */ /* glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); */ /* glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE); */ glEnable(GL_TEXTURE_2D); /* glMaterialfv(GL_FRONT_AND_BACK, GL_SHININESS, front_shininess); */ /* glMaterialfv(GL_FRONT_AND_BACK, GL_SPECULAR, front_specular); */ } ENTRYPOINT void release_antmaze(ModeInfo * mi) { if(antmaze) { free((void *) antmaze); antmaze = (antmazestruct *) NULL; } FreeAllGL(mi); } #define MAX_MAGNIFICATION 10 #define max(a, b) a < b ? b : a #define min(a, b) a < b ? a : b ENTRYPOINT Bool antmaze_handle_event (ModeInfo *mi, XEvent *event) { antmazestruct *mp = &antmaze[MI_SCREEN(mi)]; if (gltrackball_event_handler (event, mp->trackball, MI_WIDTH (mi), MI_HEIGHT (mi), &mp->button_down_p)) return True; if (event->xany.type == ButtonPress) { switch(event->xbutton.button) { case Button3: mp->focus = (mp->focus + 1) % ANTCOUNT; return True; case Button4: mp->mag = max(mp->mag-1, 1); return True; case Button5: mp->mag = min(mp->mag+1, MAX_MAGNIFICATION); return True; } } return False; } ENTRYPOINT void init_antmaze(ModeInfo * mi) { double rot_speed = 0.3; int i; antmazestruct *mp; if (antmaze == NULL) { if ((antmaze = (antmazestruct *) calloc(MI_NUM_SCREENS(mi), sizeof (antmazestruct))) == NULL) return; } mp = &antmaze[MI_SCREEN(mi)]; mp->step = NRAND(90); mp->ant_position = NRAND(90); mp->antdirection[0] = PI/2.0; mp->antdirection[1] = PI/2.0; mp->antdirection[2] = 0; mp->antdirection[3] = PI/2.0; mp->antdirection[4] = PI/2.0; mp->antposition[0][0] = -4.0; mp->antposition[0][1] = 5.0; mp->antposition[0][1] = 0.15; mp->antposition[1][0] = -4.0; mp->antposition[1][1] = 3.0; mp->antposition[1][1] = 0.15; mp->antposition[2][0] = -1.0; mp->antposition[2][1] = -2.0; mp->antposition[2][1] = 0.15; mp->antposition[3][0] = -3.9; mp->antposition[3][1] = 6.0; mp->antposition[3][1] = 0.15; mp->antposition[4][0] = 2.0; mp->antposition[4][1] = -2.0; mp->antposition[4][1] = 0.15; for (i = 0; i < ANTCOUNT; i++) { mp->antvelocity[i] = 0.02; mp->antsize[i] = 1.0; mp->anton[i] = 0; } mp->bposition[0][0] = 0; mp->bposition[0][1] = 8; mp->bposition[1][0] = 9; mp->bposition[1][1] = 1; mp->bposition[2][0] = 1; mp->bposition[2][1] = 1; mp->bposition[3][0] = 4; mp->bposition[3][1] = 8; mp->bposition[4][0] = 2; mp->bposition[4][1] = 1; mp->part[0] = 0; mp->part[1] = 1; mp->part[2] = 5; mp->part[3] = 1; mp->part[4] = 3; mp->introduced = 0; mp->entroducing = 12; mp->fadeout = 1.0; mp->mag = 4.0; mp->rot = make_rotator (rot_speed, rot_speed, rot_speed, 1, 0, True); mp->trackball = gltrackball_init (False); if ((mp->glx_context = init_GL(mi)) != NULL) { reshape_antmaze(mi, MI_WIDTH(mi), MI_HEIGHT(mi)); glDrawBuffer(GL_BACK); pinit(mp); } else MI_CLEARWINDOW(mi); } static void device_rotate(ModeInfo *mi) { #if 0 GLfloat rot = current_device_rotation(); glRotatef(rot, 0, 0, 1); if ((rot > 45 && rot < 135) || (rot < -45 && rot > -135)) { GLfloat s = MI_HEIGHT(mi) / (GLfloat) MI_WIDTH(mi); glScalef (1/s, s, 1); } #endif } ENTRYPOINT void draw_antmaze(ModeInfo * mi) { double h = (GLfloat) MI_HEIGHT(mi) / (GLfloat) MI_WIDTH(mi); antmazestruct *mp; Display *display = MI_DISPLAY(mi); Window window = MI_WINDOW(mi); if(!antmaze) return; mp = &antmaze[MI_SCREEN(mi)]; MI_IS_DRAWN(mi) = True; if(!mp->glx_context) return; mi->polygon_count = 0; glXMakeCurrent(display, window, *(mp->glx_context)); glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); /* first panel */ glPushMatrix(); /* h = ((GLfloat) MI_HEIGHT(mi)/2) / (3*(GLfloat)MI_WIDTH(mi)/4); */ glViewport(MI_WIDTH(mi)/32, MI_HEIGHT(mi)/8, (9*MI_WIDTH(mi))/16, 3*MI_HEIGHT(mi)/4); glMatrixMode(GL_PROJECTION); glLoadIdentity(); /* h = (3*MI_HEIGHT(mi)/4) / (3*MI_WIDTH(mi)/4); */ gluPerspective(45, 1/h, 1, 25.0); glMatrixMode(GL_MODELVIEW); glLoadIdentity(); device_rotate(mi); glPushMatrix(); /* follow focused ant */ glTranslatef(0.0, 0.0, -mp->mag - 5.0); glRotatef(20.0+5.0*sin(mp->ant_step/40.0), 1.0, 0.0, 0.0); /* glTranslatef(0.0, */ /* started ? -mag : -8.0 + 4.0*fabs(sin(ant_step/10.0)), */ /* started ? -mag : -8.0 + 4.0*fabs(sin(ant_step/10.0))); */ gltrackball_rotate(mp->trackball); glRotatef(mp->ant_step*0.6, 0.0, 1.0, 0.0); /* glRotatef(90.0, 0.0, 0.0, 1.0); */ /* glTranslatef(-antposition[0][0]-0.5, 0.0, -antposition[focus][1]); */ /*-elevator*/ /* sync */ if(!draw_antmaze_strip(mi)) { release_antmaze(mi); return; } glPopMatrix(); glPopMatrix(); h = (GLfloat) (3*MI_HEIGHT(mi)/8) / (GLfloat) (MI_WIDTH(mi)/2); /* draw overhead */ glPushMatrix(); glViewport((17*MI_WIDTH(mi))/32, MI_HEIGHT(mi)/2, MI_WIDTH(mi)/2, 3*MI_HEIGHT(mi)/8); glMatrixMode(GL_PROJECTION); glLoadIdentity(); device_rotate(mi); gluPerspective(45, 1/h, 1, 25.0); glMatrixMode(GL_MODELVIEW); /* twist scene */ 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); gltrackball_rotate(mp->trackball); /* sync */ if(!draw_antmaze_strip(mi)) { release_antmaze(mi); return; } glPopMatrix(); /* draw ant display */ glPushMatrix(); glViewport((5*MI_WIDTH(mi))/8, MI_HEIGHT(mi)/8, (11*MI_WIDTH(mi))/32, 3*MI_HEIGHT(mi)/8); glMatrixMode(GL_PROJECTION); glLoadIdentity(); device_rotate(mi); gluPerspective(45, 1/h, 1, 25.0); glMatrixMode(GL_MODELVIEW); /* twist scene */ glTranslatef(0.0, 0.0, -1.6); glRotatef(30.0, 1.0, 0.0, 0.0); glRotatef(mp->ant_step, 0.0, 1.0, 0.0); glRotatef(90.0, 0.0, 0.0, 1.0); /* /\* draw ant shadow *\/ */ /* glPushMatrix(); */ /* glScalef(1.0, 0.01, 1.0); */ /* glRotatef(90.0, 0.0, 0.0, 1.0); */ /* glRotatef(90.0, 0.0, 1.0, 0.0); */ /* glDisable(GL_LIGHTING); */ /* glColor4fv(MaterialGray6); */ /* /\* slow down first ant *\/ */ /* draw_ant(MaterialGrayB, 0, 1, first_ant_step, mySphere, myCone); */ /* glPopMatrix(); */ /* draw ant body */ glEnable(GL_TEXTURE_2D); glLightfv(GL_LIGHT0, GL_DIFFUSE, diffuse); glLightfv(GL_LIGHT1, GL_DIFFUSE, diffuse); glBindTexture(GL_TEXTURE_2D, mp->brushedtexture); draw_ant(mi, mp, MaterialGray35, 0, 1, mp->ant_step/2.0, mySphereTex, myCone2); glDisable(GL_TEXTURE_2D); glPopMatrix(); /* /\* draw overlay *\/ */ /* glPushMatrix(); */ /* /\* go to ortho mode *\/ */ /* glViewport(MI_WIDTH(mi)/2, MI_HEIGHT(mi)/8, MI_WIDTH(mi)/2, 3*MI_HEIGHT(mi)/8); */ /* glMatrixMode(GL_PROJECTION); */ /* glLoadIdentity(); */ /* glPushMatrix (); */ /* glOrtho(-4.0, 4.0, -3.0, 3.0, -100.0, 100.0); */ /* glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, MaterialGrayB); */ /* glColor4fv(MaterialGrayB); */ /* glDisable(GL_LIGHTING); */ /* glEnable(GL_BLEND); */ /* glBegin(GL_QUADS); */ /* glNormal3f(0.0, 0.0, 1.0); */ /* glVertex3f(4.0, 3.0, 0.0); */ /* glVertex3f(2.0, 3.0, 0.0); */ /* glVertex3f(2.0, -3.0, 0.0); */ /* glVertex3f(4.0, -3.0, 0.0); */ /* mi->polygon_count++; */ /* glEnd(); */ /* glEnable(GL_LIGHTING); */ /* glDisable(GL_BLEND); */ /* glPopMatrix(); */ /* glPopMatrix(); */ if (MI_IS_FPS(mi)) { glViewport(0, 0, MI_WIDTH(mi), MI_HEIGHT(mi)); do_fps (mi); } glFlush(); glXSwapBuffers(display, window); update_ants(mp); mp->step += 0.025; } #ifndef STANDALONE ENTRYPOINT void change_antmaze(ModeInfo * mi) { antmazestruct *mp = &antmaze[MI_SCREEN(mi)]; if (!mp->glx_context) return; glXMakeCurrent(MI_DISPLAY(mi), MI_WINDOW(mi), *(mp->glx_context)); pinit(); } #endif /* !STANDALONE */ XSCREENSAVER_MODULE ("AntMaze", antmaze) #endif xscreensaver-5.36/hacks/glx/tangram.c000664 000767 000024 00000116114 12710313227 017622 0ustar00jwzstaff000000 000000 /* tangram, Copyright (c) 2005-2014 Jeremy English * * 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. * * Sun 10 July 2005 Changed the code that solves the puzzles. * Also, limited the palette and added names. * * Wed 13 July 2005 Added option to turn off rotation. * Changed color and materials */ #define DEFAULTS "*delay: 10000 \n" \ "*wireframe: False \n" \ "*titleFont: -*-helvetica-medium-r-normal-*-*-180-*-*-*-*-*-*\n" \ "*titleFont2: -*-helvetica-medium-r-normal-*-*-120-*-*-*-*-*-*\n" \ "*titleFont3: -*-helvetica-medium-r-normal-*-*-80-*-*-*-*-*-*\n" \ # define refresh_tangram 0 # define release_tangram 0 #undef countof #define countof(x) (sizeof((x))/sizeof((*x))) #include "xlockmore.h" #include #ifdef USE_GL /* whole file */ #include #include #include "tangram_shapes.h" #include "texfont.h" typedef struct { GLubyte r; GLubyte g; GLubyte b; } color; typedef struct { GLfloat x; GLfloat y; GLfloat z; } coord; typedef struct { coord crd; /* coordinates */ GLint r; /* rotation */ GLint fr; /* flip Rotate. Used to keep track during animation */ GLint dl; /* display List */ GLfloat dz; /* velocity */ GLfloat ddz; /* Acceleration */ GLfloat solved; /* shapes state */ Bool up; /* Move up the z axis? */ } tangram_shape; typedef struct { char *name; tangram_shape ts[7]; } puzzle; typedef enum { no_shape = -1, small_triangle1 = 0, small_triangle2 = 1, medium_triangle = 2, large_triangle1 = 3, large_triangle2 = 4, square = 5, rhomboid = 6 } shape_type; #define SPEED 0.03 enum { BOTTOM = 0, DEF_WAIT = 500, INIT_DZ = 2, NUM_SHAPES = 7 }; typedef struct { GLXContext *glx_context; tangram_shape tsm1, tsm2, tm, tlg1, tlg2, sq, rh; tangram_shape n_tsm1, n_tsm2, n_tm, n_tlg1, n_tlg2, n_sq, n_rh; char *puzzle_name; int csi; int ncolors; XColor *colors; int ccolor; texture_font_data *font1_data, *font2_data, *font3_data; GLfloat theta[3]; Bool going_down[3]; const char *pn; int display_counter; } tangram_configuration; static tangram_configuration *tps = NULL; #define DEF_VIEWING_TIME "5" #define DEF_ROTATE "True" #define DEF_X_CAMERA_ROTATE "0.2" #define DEF_Y_CAMERA_ROTATE "0.5" #define DEF_Z_CAMERA_ROTATE "0" #define DEF_LABELS "True" static GLuint viewing_time; static Bool do_rotate; static Bool do_labels; static GLfloat x_camera_rotate; static GLfloat y_camera_rotate; static GLfloat z_camera_rotate; static int wire; static XrmOptionDescRec opts[] = { {"-viewing_time", ".viewingTime", XrmoptionSepArg, 0}, {"-rotate", ".rotate", XrmoptionNoArg, "True"}, {"+rotate", ".rotate", XrmoptionNoArg, "False"}, {"-labels", ".labels", XrmoptionNoArg, "True"}, {"+labels", ".labels", XrmoptionNoArg, "False"}, {"-x_camera_rotate", ".xCameraRotate", XrmoptionSepArg, 0}, {"-y_camera_rotate", ".yCameraRotate", XrmoptionSepArg, 0}, {"-z_camera_rotate", ".zCameraRotate", XrmoptionSepArg, 0} }; static argtype vars[] = { {&viewing_time, "viewingTime", "ViewingTime", DEF_VIEWING_TIME, t_Int}, {&do_rotate, "rotate", "Rotate", DEF_ROTATE, t_Bool}, {&do_labels, "labels", "Labels", DEF_LABELS, t_Bool}, {&x_camera_rotate, "xCameraRotate", "XCameraRotate", DEF_X_CAMERA_ROTATE, t_Float}, {&y_camera_rotate, "yCameraRotate", "YCameraRotate", DEF_Y_CAMERA_ROTATE, t_Float}, {&z_camera_rotate, "zCameraRotate", "ZCameraRotate", DEF_Z_CAMERA_ROTATE, t_Float} }; ENTRYPOINT ModeSpecOpt tangram_opts = { countof(opts), opts, countof(vars), vars, NULL }; static const puzzle solved[] = { {"Teapot", { {{-1.664000, -1.552000, 0}, 135, 0, 0, INIT_DZ, -SPEED, 0, True}, {{-1.696000, 0.944000, 0}, 315, 0, 0, INIT_DZ, -SPEED, 0, False}, {{0.064000, -2.128000, 0}, 135, 0, 0, INIT_DZ, -SPEED, 0, True}, {{-0.960000, -1.056000, 0}, 90, 0, 0, INIT_DZ, -SPEED, 0, False}, {{1.104000, 0.960000, 0}, 270, 0, 0, INIT_DZ, -SPEED, 0, True}, {{-1.376000, -0.800000, 0}, 180, 0, 0, INIT_DZ, -SPEED, 0, False}, {{1.152000, 0.736000, 0}, 360, 0, 0, INIT_DZ, -SPEED, 0, True}, }, }, {"Candle", { {{-0.016000, 2.176001, 0}, 135, 180, 0, INIT_DZ, -SPEED, 0, False}, {{0.016000, 2.960001, 0}, 315, 0, 0, INIT_DZ, -SPEED, 0, True}, {{0.000000, 0.400000, 0}, 135, 180, 0, INIT_DZ, -SPEED, 0, False}, {{-2.015998, 2.208001, 0}, 90, 180, 0, INIT_DZ, -SPEED, 0, True}, {{2.000001, 2.208001, 0}, 270, 0, 0, INIT_DZ, -SPEED, 0, False}, {{0.496000, 0.432000, 0}, 180, 0, 0, INIT_DZ, -SPEED, 0, True}, {{-0.016000, -0.672000, 0}, 335, 0, 0, INIT_DZ, -SPEED, 0, False}, }, }, {"Square", { {{-0.048000, -0.016000, 0}, 225, 0, 0, INIT_DZ, -SPEED, 0, True}, {{0.704000, 0.736000, 0}, 135, 0, 0, INIT_DZ, -SPEED, 0, False}, {{-1.488000, 1.424001, 0}, 0, 0, 0, INIT_DZ, -SPEED, 0, True}, {{-0.016000, -0.016000, 0}, 315, 0, 0, INIT_DZ, -SPEED, 0, False}, {{0.000000, 0.000000, 0}, 45, 0, 0, INIT_DZ, -SPEED, 0, True}, {{0.688000, 0.720000, 0}, 225, 0, 0, INIT_DZ, -SPEED, 0, False}, {{-0.784000, 0.672000, 0}, 315, 0, 0, INIT_DZ, -SPEED, 0, True}, }, }, {"Crane", { {{1.248001, 1.759999, 0}, 225, 0, 0, INIT_DZ, -SPEED, 0, False}, {{1.024000, 3.071999, 0}, 270, 0, 0, INIT_DZ, -SPEED, 0, True}, {{-0.975999, -2.096001, 0}, 270, 0, 0, INIT_DZ, -SPEED, 0, False}, {{0.480000, -1.968001, 0}, 135, 0, 0, INIT_DZ, -SPEED, 0, True}, {{1.056000, -0.496000, 0}, 180, 0, 0, INIT_DZ, -SPEED, 0, False}, {{-0.239999, -1.312001, 0}, 225, 0, 0, INIT_DZ, -SPEED, 0, True}, {{-0.223999, -1.360001, 0}, 315, 0, 0, INIT_DZ, -SPEED, 0, False}, }, }, {"Crane", { {{0.320000, 1.360000, 0}, 90, 0, 0, INIT_DZ, -SPEED, 0, True}, {{0.704000, 3.072000, 0}, 270, 0, 0, INIT_DZ, -SPEED, 0, False}, {{-1.200000, -3.392000, 0}, 135, 0, 0, INIT_DZ, -SPEED, 0, True}, {{0.688000, -1.184000, 0}, 135, 0, 0, INIT_DZ, -SPEED, 0, False}, {{-0.768000, 0.192000, 0}, 315, 0, 0, INIT_DZ, -SPEED, 0, True}, {{-1.168000, -2.304000, 0}, 180, 0, 0, INIT_DZ, -SPEED, 0, False}, {{1.312000, 1.296000, 0}, 270, 0, 0, INIT_DZ, -SPEED, 0, True}, }, }, {"Duck", { {{-1.391999, 1.424000, 0}, 65, 0, 0, INIT_DZ, -SPEED, 0, False}, {{0.768000, 2.000000, 0}, 99, 180, 0, INIT_DZ, -SPEED, 0, True}, {{2.688001, -1.872000, 0}, 270, 180, 0, INIT_DZ, -SPEED, 0, False}, {{-1.343999, 0.944000, 0}, 315, 0, 0, INIT_DZ, -SPEED, 0, True}, {{0.112000, -0.464000, 0}, 135, 0, 0, INIT_DZ, -SPEED, 0, False}, {{1.984001, -1.120000, 0}, 225, 0, 0, INIT_DZ, -SPEED, 0, True}, {{1.536001, 0.912000, 0}, 180, 180, 0, INIT_DZ, -SPEED, 0, False}, }, }, {"Pelican", { {{1.088000, 0.064001, 0}, 135, 0, 0, INIT_DZ, -SPEED, 0, True}, {{0.864000, -1.279999, 0}, 90, 180, 0, INIT_DZ, -SPEED, 0, False}, {{-1.807999, 1.520000, 0}, 90, 180, 0, INIT_DZ, -SPEED, 0, True}, {{1.824001, -1.231998, 0}, 180, 0, 0, INIT_DZ, -SPEED, 0, False}, {{-0.368000, 1.472000, 0}, 135, 180, 0, INIT_DZ, -SPEED, 0, True}, {{0.832000, -2.271998, 0}, 180, 0, 0, INIT_DZ, -SPEED, 0, False}, {{1.776001, 0.816000, 0}, 225, 0, 0, INIT_DZ, -SPEED, 0, True}, }, }, {"Cat", { {{0.416000, -2.432000, 0}, 45, 0, 0, INIT_DZ, -SPEED, 0, False}, {{0.352000, -2.432000, 0}, 225, 180, 0, INIT_DZ, -SPEED, 0, True}, {{0.832000, -0.480000, 0}, 225, 180, 0, INIT_DZ, -SPEED, 0, False}, {{-1.632000, 3.056000, 0}, 0, 0, 0, INIT_DZ, -SPEED, 0, True}, {{-1.616000, 1.040000, 0}, 45, 180, 0, INIT_DZ, -SPEED, 0, False}, {{1.088000, -1.696000, 0}, 225, 0, 0, INIT_DZ, -SPEED, 0, True}, {{0.832000, -0.432000, 0}, 180, 0, 0, INIT_DZ, -SPEED, 0, False}, }, }, {"Coi", { {{1.264000, -1.232000, 0}, 45, 0, 0, INIT_DZ, -SPEED, 0, True}, {{1.216000, 0.816000, 0}, 180, 180, 0, INIT_DZ, -SPEED, 0, False}, {{-1.631999, 1.872000, 0}, 135, 180, 0, INIT_DZ, -SPEED, 0, True}, {{0.832000, 2.287999, 0}, 315, 0, 0, INIT_DZ, -SPEED, 0, False}, {{-0.608000, 0.912000, 0}, 315, 180, 0, INIT_DZ, -SPEED, 0, True}, {{2.240001, -0.176000, 0}, 180, 0, 0, INIT_DZ, -SPEED, 0, False}, {{0.256000, -1.200000, 0}, 90, 0, 0, INIT_DZ, -SPEED, 0, True}, }, }, {"Man Skipping", { {{1.727998, 2.303998, 0}, 180, 0, 0, INIT_DZ, -SPEED, 0, False}, {{-1.120000, 3.376001, 0}, 180, 180, 0, INIT_DZ, -SPEED, 0, True}, {{0.879998, -3.008001, 0}, 180, 0, 0, INIT_DZ, -SPEED, 0, False}, {{-1.072000, 2.559999, 0}, 360, 0, 0, INIT_DZ, -SPEED, 0, True}, {{-1.440000, 0.144000, 0}, 45, 180, 0, INIT_DZ, -SPEED, 0, False}, {{-0.192001, -2.592001, 0}, 135, 0, 0, INIT_DZ, -SPEED, 0, True}, {{0.015999, 0.176000, 0}, 135, 0, 0, INIT_DZ, -SPEED, 0, False}, }, }, {"Old Man", { {{-0.400000, 1.744000, 0}, 58, 180, 0, INIT_DZ, -SPEED, 0, True}, {{0.704000, 0.128000, 0}, 90, 180, 0, INIT_DZ, -SPEED, 0, False}, {{0.656000, 0.320000, 0}, 180, 180, 0, INIT_DZ, -SPEED, 0, True}, {{-0.112000, -0.384000, 0}, 225, 0, 0, INIT_DZ, -SPEED, 0, False}, {{-0.096000, -0.399999, 0}, 135, 180, 0, INIT_DZ, -SPEED, 0, True}, {{-0.736000, 0.352000, 0}, 123, 0, 0, INIT_DZ, -SPEED, 0, False}, {{-0.336000, 0.352000, 0}, 90, 0, 0, INIT_DZ, -SPEED, 0, True}, }, }, {"Spear Head", { {{0.688000, -0.144000, 0}, 45, 180, 0, INIT_DZ, -SPEED, 0, False}, {{-0.080000, 0.592000, 0}, 225, 0, 0, INIT_DZ, -SPEED, 0, True}, {{-0.048000, 0.592000, 0}, 315, 180, 0, INIT_DZ, -SPEED, 0, False}, {{-1.488000, -0.848000, 0}, 45, 0, 0, INIT_DZ, -SPEED, 0, True}, {{1.376000, -0.864000, 0}, 225, 180, 0, INIT_DZ, -SPEED, 0, False}, {{0.688000, -0.128000, 0}, 135, 0, 0, INIT_DZ, -SPEED, 0, True}, {{-1.504000, -0.832000, 0}, 135, 0, 0, INIT_DZ, -SPEED, 0, False}, }, }, {"Diamond", { {{0.624000, -1.776000, 0}, 225, 180, 0, INIT_DZ, -SPEED, 0, True}, {{-0.144000, 0.432000, 0}, 225, 0, 0, INIT_DZ, -SPEED, 0, False}, {{-0.800000, -0.272000, 0}, 45, 180, 0, INIT_DZ, -SPEED, 0, True}, {{-2.320000, -0.304000, 0}, 45, 0, 0, INIT_DZ, -SPEED, 0, False}, {{2.048000, -0.320000, 0}, 225, 180, 0, INIT_DZ, -SPEED, 0, True}, {{-0.112000, 0.480000, 0}, 135, 0, 0, INIT_DZ, -SPEED, 0, False}, {{-0.832000, -0.320000, 0}, 135, 180, 0, INIT_DZ, -SPEED, 0, True}, }, }, {"Arrow", { {{-2.048001, -1.232000, 0}, 45, 180, 0, INIT_DZ, -SPEED, 0, False}, {{0.112000, 0.943999, 0}, 315, 0, 0, INIT_DZ, -SPEED, 0, True}, {{-1.312001, -0.560000, 0}, 90, 180, 0, INIT_DZ, -SPEED, 0, False}, {{0.496000, 0.656000, 0}, 135, 0, 0, INIT_DZ, -SPEED, 0, True}, {{0.528000, 0.608000, 0}, 45, 180, 0, INIT_DZ, -SPEED, 0, False}, {{-2.048001, -2.704000, 0}, 135, 0, 0, INIT_DZ, -SPEED, 0, True}, {{-1.312001, -0.512000, 0}, 45, 180, 0, INIT_DZ, -SPEED, 0, False}, }, }, {"Lady", { {{-0.720000, 3.440000, 0}, 180, 180, 0, INIT_DZ, -SPEED, 0, True}, {{0.912000, -1.072000, 0}, 225, 0, 0, INIT_DZ, -SPEED, 0, False}, {{0.736000, 3.440000, 0}, 180, 180, 0, INIT_DZ, -SPEED, 0, True}, {{0.720000, 1.984000, 0}, 225, 0, 0, INIT_DZ, -SPEED, 0, False}, {{-0.672000, 0.544000, 0}, 45, 180, 0, INIT_DZ, -SPEED, 0, True}, {{-0.192000, -3.840000, 0}, 135, 0, 0, INIT_DZ, -SPEED, 0, False}, {{-0.528000, -2.480000, 0}, 135, 0, 0, INIT_DZ, -SPEED, 0, True}, }, }, {"Running Man", { {{1.136000, 2.720000, 0}, 90, 180, 0, INIT_DZ, -SPEED, 0, False}, {{-2.304001, 1.776000, 0}, 90, 0, 0, INIT_DZ, -SPEED, 0, True}, {{-0.256000, 0.288000, 0}, 45, 180, 0, INIT_DZ, -SPEED, 0, False}, {{-0.304000, 0.304000, 0}, 135, 0, 0, INIT_DZ, -SPEED, 0, True}, {{0.096000, -0.128000, 0}, 135, 180, 0, INIT_DZ, -SPEED, 0, False}, {{-0.656000, -2.832000, 0}, 105, 0, 0, INIT_DZ, -SPEED, 0, True}, {{0.784000, -0.096000, 0}, 135, 0, 0, INIT_DZ, -SPEED, 0, False}, }, }, {"Parallelogram", { {{-1.104000, -1.455999, 0}, 90, 0, 0, INIT_DZ, -SPEED, 0, True}, {{0.912000, -0.447999, 0}, 180, 0, 0, INIT_DZ, -SPEED, 0, False}, {{-0.048000, -1.471999, 0}, 135, 0, 0, INIT_DZ, -SPEED, 0, True}, {{-1.136000, -1.439999, 0}, 180, 0, 0, INIT_DZ, -SPEED, 0, False}, {{0.944000, 1.552000, 0}, 0, 0, 0, INIT_DZ, -SPEED, 0, True}, {{0.912000, 0.560000, 0}, 180, 0, 0, INIT_DZ, -SPEED, 0, False}, {{-0.112000, 1.568000, 0}, 180, 180, 0, INIT_DZ, -SPEED, 0, True}, }, }, {"N", { {{-1.615999, 0.064000, 0}, 0, 0, 0, INIT_DZ, -SPEED, 0, False}, {{-0.592000, 0.112000, 0}, 90, 0, 0, INIT_DZ, -SPEED, 0, True}, {{0.432000, 0.096000, 0}, 45, 0, 0, INIT_DZ, -SPEED, 0, False}, {{-1.679999, -0.880000, 0}, 180, 0, 0, INIT_DZ, -SPEED, 0, True}, {{1.488001, 1.103999, 0}, 0, 0, 0, INIT_DZ, -SPEED, 0, False}, {{-0.640000, 0.112000, 0}, 180, 0, 0, INIT_DZ, -SPEED, 0, True}, {{1.392001, -0.928000, 0}, 270, 180, 0, INIT_DZ, -SPEED, 0, False}, }, }, {"Farm House", { {{2.112000, 1.504000, 0}, 0, 0, 0, INIT_DZ, -SPEED, 0, True}, {{-1.040000, 1.472000, 0}, 180, 180, 0, INIT_DZ, -SPEED, 0, False}, {{0.032000, -1.600000, 0}, 135, 0, 0, INIT_DZ, -SPEED, 0, True}, {{1.056000, 1.504000, 0}, 270, 0, 0, INIT_DZ, -SPEED, 0, False}, {{-0.992000, -0.528000, 0}, 0, 180, 0, INIT_DZ, -SPEED, 0, True}, {{2.080000, 0.512000, 0}, 180, 0, 0, INIT_DZ, -SPEED, 0, False}, {{-1.104000, 0.480000, 0}, 270, 180, 0, INIT_DZ, -SPEED, 0, True}, }, }, {"Vulture", { {{0.912000, 1.728000, 0}, 135, 0, 0, INIT_DZ, -SPEED, 0, False}, {{-2.623998, -1.040000, 0}, 135, 0, 0, INIT_DZ, -SPEED, 0, True}, {{0.992000, 1.104000, 0}, 90, 180, 0, INIT_DZ, -SPEED, 0, False}, {{0.944000, -0.288000, 0}, 180, 0, 0, INIT_DZ, -SPEED, 0, True}, {{-0.448000, -1.760000, 0}, 315, 180, 0, INIT_DZ, -SPEED, 0, False}, {{-1.887998, -0.368000, 0}, 315, 0, 0, INIT_DZ, -SPEED, 0, True}, {{3.008002, 2.160000, 0}, 270, 0, 0, INIT_DZ, -SPEED, 0, False}, }, }, {"Swan", { {{0.720000, 0.352000, 0}, 45, 0, 0, INIT_DZ, -SPEED, 0, True}, {{0.672000, -1.568000, 0}, 0, 0, 0, INIT_DZ, -SPEED, 0, False}, {{1.376000, 1.104000, 0}, 225, 180, 0, INIT_DZ, -SPEED, 0, True}, {{-1.151999, 1.488000, 0}, 315, 0, 0, INIT_DZ, -SPEED, 0, False}, {{0.320000, 2.096000, 0}, 180, 180, 0, INIT_DZ, -SPEED, 0, True}, {{0.656000, 0.304000, 0}, 315, 0, 0, INIT_DZ, -SPEED, 0, False}, {{0.624000, -2.559999, 0}, 315, 180, 0, INIT_DZ, -SPEED, 0, True}, }, }, {"High Karate", { {{-0.144000, 2.576000, 0}, 270, 0, 0, INIT_DZ, -SPEED, 0, False}, {{1.696001, -2.432000, 0}, 90, 0, 0, INIT_DZ, -SPEED, 0, True}, {{2.176001, -0.400000, 0}, 180, 180, 0, INIT_DZ, -SPEED, 0, False}, {{-0.624000, -0.512000, 0}, 270, 0, 0, INIT_DZ, -SPEED, 0, True}, {{-0.576000, -1.152000, 0}, 0, 180, 0, INIT_DZ, -SPEED, 0, False}, {{-1.919999, -1.376000, 0}, 303, 0, 0, INIT_DZ, -SPEED, 0, True}, {{0.448000, -0.096001, 0}, 180, 0, 0, INIT_DZ, -SPEED, 0, False}, }, }, {"Lazy", { {{-2.416000, 1.120000, 0}, 315, 0, 0, INIT_DZ, -SPEED, 0, True}, {{-1.952000, -2.016000, 0}, 45, 0, 0, INIT_DZ, -SPEED, 0, False}, {{-1.552000, -0.640000, 0}, 315, 180, 0, INIT_DZ, -SPEED, 0, True}, {{-0.016000, 1.840000, 0}, 315, 0, 0, INIT_DZ, -SPEED, 0, False}, {{1.456000, -1.072000, 0}, 315, 180, 0, INIT_DZ, -SPEED, 0, True}, {{0.848000, -0.816000, 0}, 332, 0, 0, INIT_DZ, -SPEED, 0, False}, {{-1.200000, -1.792000, 0}, 135, 0, 0, INIT_DZ, -SPEED, 0, True}, }, }, {"Bat", { {{-0.304000, -0.352000, 0}, 259, 0, 0, INIT_DZ, -SPEED, 0, False}, {{0.304000, -1.344000, 0}, 105, 0, 0, INIT_DZ, -SPEED, 0, True}, {{1.312000, -1.024000, 0}, 300, 180, 0, INIT_DZ, -SPEED, 0, False}, {{1.952000, 0.240000, 0}, 195, 0, 0, INIT_DZ, -SPEED, 0, True}, {{-2.272000, 0.096000, 0}, 11, 180, 0, INIT_DZ, -SPEED, 0, False}, {{-0.112000, -1.056000, 0}, 315, 0, 0, INIT_DZ, -SPEED, 0, True}, {{-0.560000, -1.344000, 0}, 281, 180, 0, INIT_DZ, -SPEED, 0, False}, }, }, {"Sail Boat", { {{0.544000, 2.000000, 0}, 315, 0, 0, INIT_DZ, -SPEED, 0, True}, {{0.880000, 0.160000, 0}, 360, 0, 0, INIT_DZ, -SPEED, 0, False}, {{0.656000, -1.503999, 0}, 220, 180, 0, INIT_DZ, -SPEED, 0, True}, {{-0.656000, -0.336000, 0}, 50, 0, 0, INIT_DZ, -SPEED, 0, False}, {{-0.688000, -0.288000, 0}, 310, 180, 0, INIT_DZ, -SPEED, 0, True}, {{0.864000, 1.232000, 0}, 360, 0, 0, INIT_DZ, -SPEED, 0, False}, {{0.496000, 2.016001, 0}, 225, 180, 0, INIT_DZ, -SPEED, 0, True}, }, }, {"Glenda", { {{-2.016000, 2.080000, 0}, 45, 0, 0, INIT_DZ, -SPEED, 0, False}, {{0.240001, 1.824000, 0}, 360, 0, 0, INIT_DZ, -SPEED, 0, True}, {{2.239999, -0.752000, 0}, 180, 180, 0, INIT_DZ, -SPEED, 0, False}, {{-1.264000, 2.784000, 0}, 360, 0, 0, INIT_DZ, -SPEED, 0, True}, {{-1.248000, 0.736000, 0}, 45, 180, 0, INIT_DZ, -SPEED, 0, False}, {{0.240001, 0.304000, 0}, 360, 0, 0, INIT_DZ, -SPEED, 0, True}, {{0.544000, -2.976001, 0}, 149, 0, 0, INIT_DZ, -SPEED, 0, False}, }, }, {"Cat", { {{1.376000, -1.536001, 0}, 225, 0, 0, INIT_DZ, -SPEED, 0, True}, {{1.488000, -1.552001, 0}, 45, 0, 0, INIT_DZ, -SPEED, 0, False}, {{0.352000, -0.048000, 0}, 225, 0, 0, INIT_DZ, -SPEED, 0, True}, {{-2.144000, 2.415999, 0}, 0, 0, 0, INIT_DZ, -SPEED, 0, False}, {{-2.096000, 0.368000, 0}, 45, 0, 0, INIT_DZ, -SPEED, 0, True}, {{2.144000, -0.800000, 0}, 225, 0, 0, INIT_DZ, -SPEED, 0, False}, {{1.392000, -0.064000, 0}, 270, 0, 0, INIT_DZ, -SPEED, 0, True}, }, }, {"Lying Cat", { {{2.480000, -0.912000, 0}, 225, 0, 0, INIT_DZ, -SPEED, 0, False}, {{2.592000, -0.928000, 0}, 45, 0, 0, INIT_DZ, -SPEED, 0, True}, {{0.352000, 1.280000, 0}, 315, 0, 0, INIT_DZ, -SPEED, 0, False}, {{-0.688000, 0.336000, 0}, 135, 0, 0, INIT_DZ, -SPEED, 0, True}, {{1.808000, -0.112000, 0}, 135, 0, 0, INIT_DZ, -SPEED, 0, False}, {{3.248000, -0.176000, 0}, 225, 0, 0, INIT_DZ, -SPEED, 0, True}, {{-1.472000, 1.024000, 0}, 225, 0, 0, INIT_DZ, -SPEED, 0, False}, }, }, {"Witch", { {{-0.943999, -0.304000, 0}, 270, 0, 0, INIT_DZ, -SPEED, 0, True}, {{-0.144000, 0.288000, 0}, 270, 0, 0, INIT_DZ, -SPEED, 0, False}, {{1.360000, -2.304000, 0}, 180, 0, 0, INIT_DZ, -SPEED, 0, True}, {{1.328000, -0.848000, 0}, 225, 0, 0, INIT_DZ, -SPEED, 0, False}, {{1.008000, 1.584000, 0}, 270, 0, 0, INIT_DZ, -SPEED, 0, True}, {{0.512000, 2.688000, 0}, 270, 0, 0, INIT_DZ, -SPEED, 0, False}, {{-0.863999, -0.096000, 0}, 135, 180, 0, INIT_DZ, -SPEED, 0, True}, }, }, {"Laugh", { {{0.703999, -0.160000, 0}, 0, 0, 0, INIT_DZ, -SPEED, 0, False}, {{-0.064000, -0.400000, 0}, 45, 0, 0, INIT_DZ, -SPEED, 0, True}, {{0.767999, -1.408000, 0}, 270, 0, 0, INIT_DZ, -SPEED, 0, False}, {{-1.232000, -1.328000, 0}, 90, 0, 0, INIT_DZ, -SPEED, 0, True}, {{-1.040000, 2.624000, 0}, 0, 0, 0, INIT_DZ, -SPEED, 0, False}, {{-0.288000, 1.264000, 0}, 315, 0, 0, INIT_DZ, -SPEED, 0, True}, {{-1.760001, -1.408000, 0}, 90, 180, 0, INIT_DZ, -SPEED, 0, False}, }, }, {"Standing Man", { {{0.272000, 3.392000, 0}, 270, 0, 0, INIT_DZ, -SPEED, 0, True}, {{-0.144000, -1.328000, 0}, 331, 0, 0, INIT_DZ, -SPEED, 0, False}, {{1.216001, 0.272000, 0}, 180, 0, 0, INIT_DZ, -SPEED, 0, True}, {{0.736000, 0.208000, 0}, 270, 0, 0, INIT_DZ, -SPEED, 0, False}, {{0.432000, -3.440000, 0}, 151, 0, 0, INIT_DZ, -SPEED, 0, True}, {{0.720000, 2.320000, 0}, 270, 0, 0, INIT_DZ, -SPEED, 0, False}, {{-1.263998, 0.272000, 0}, 90, 0, 0, INIT_DZ, -SPEED, 0, True}, }, }, {"Walking Man", { {{-1.056000, -3.456000, 0}, 90, 0, 0, INIT_DZ, -SPEED, 0, False}, {{0.736000, 2.000000, 0}, 135, 0, 0, INIT_DZ, -SPEED, 0, True}, {{-1.488000, 1.760000, 0}, 45, 0, 0, INIT_DZ, -SPEED, 0, False}, {{-0.432000, 0.016000, 0}, 0, 180, 0, INIT_DZ, -SPEED, 0, True}, {{-0.432000, -0.064000, 0}, 0, 0, 0, INIT_DZ, -SPEED, 0, False}, {{0.560000, -2.576000, 0}, 225, 0, 0, INIT_DZ, -SPEED, 0, True}, {{0.032000, 2.656000, 0}, 0, 0, 0, INIT_DZ, -SPEED, 0, False}, }, }, {"Repose", { {{-2.800000, -2.304000, 0}, 101, 0, 0, INIT_DZ, -SPEED, 0, True}, {{1.888000, 2.032000, 0}, 135, 180, 0, INIT_DZ, -SPEED, 0, False}, {{-1.856000, 2.016000, 0}, 315, 0, 0, INIT_DZ, -SPEED, 0, True}, {{0.352000, -0.144000, 0}, 315, 180, 0, INIT_DZ, -SPEED, 0, False}, {{-2.848000, 0.976000, 0}, 0, 0, 0, INIT_DZ, -SPEED, 0, True}, {{-1.424000, -1.104000, 0}, 236, 0, 0, INIT_DZ, -SPEED, 0, False}, {{-1.792000, 2.016000, 0}, 45, 0, 0, INIT_DZ, -SPEED, 0, True}, }, }, {"Shape", { {{1.263999, 1.600001, 0}, 180, 0, 0, INIT_DZ, -SPEED, 0, False}, {{1.311999, -1.568000, 0}, 180, 180, 0, INIT_DZ, -SPEED, 0, True}, {{-0.736000, 0.576000, 0}, 45, 0, 0, INIT_DZ, -SPEED, 0, False}, {{-0.736000, -2.591999, 0}, 360, 180, 0, INIT_DZ, -SPEED, 0, True}, {{-0.768000, 2.640001, 0}, 0, 0, 0, INIT_DZ, -SPEED, 0, False}, {{-0.784000, -0.528000, 0}, 180, 0, 0, INIT_DZ, -SPEED, 0, True}, {{-0.736000, 0.496000, 0}, 0, 0, 0, INIT_DZ, -SPEED, 0, False}, }, }, {"Shape", { {{-0.816000, 1.392000, 0}, 90, 0, 0, INIT_DZ, -SPEED, 0, True}, {{-0.832000, -1.807999, 0}, 90, 180, 0, INIT_DZ, -SPEED, 0, False}, {{1.216000, -0.752000, 0}, 225, 0, 0, INIT_DZ, -SPEED, 0, True}, {{1.232000, -2.815999, 0}, 270, 180, 0, INIT_DZ, -SPEED, 0, False}, {{1.248000, 2.400000, 0}, 270, 0, 0, INIT_DZ, -SPEED, 0, True}, {{-0.864000, 1.392000, 0}, 180, 0, 0, INIT_DZ, -SPEED, 0, False}, {{0.240000, 1.328000, 0}, 0, 0, 0, INIT_DZ, -SPEED, 0, True}, }, }, {"Lightning", { {{0.176000, -2.448000, 0}, 90, 0, 0, INIT_DZ, -SPEED, 0, False}, {{-1.888000, 2.880000, 0}, 90, 180, 0, INIT_DZ, -SPEED, 0, True}, {{-1.856000, 1.824000, 0}, 45, 0, 0, INIT_DZ, -SPEED, 0, False}, {{-1.872000, -1.392000, 0}, 0, 180, 0, INIT_DZ, -SPEED, 0, True}, {{1.264000, -0.432000, 0}, 270, 0, 0, INIT_DZ, -SPEED, 0, False}, {{2.320001, -2.432000, 0}, 180, 0, 0, INIT_DZ, -SPEED, 0, True}, {{-1.872000, 1.728000, 0}, 0, 0, 0, INIT_DZ, -SPEED, 0, False}, }, }, {"E", { {{0.928000, 1.664000, 0}, 180, 0, 0, INIT_DZ, -SPEED, 0, True}, {{0.896000, -1.519998, 0}, 180, 180, 0, INIT_DZ, -SPEED, 0, False}, {{-1.136000, 0.608000, 0}, 45, 0, 0, INIT_DZ, -SPEED, 0, True}, {{-1.152000, -2.559998, 0}, 0, 180, 0, INIT_DZ, -SPEED, 0, False}, {{-1.152000, 2.672002, 0}, 0, 0, 0, INIT_DZ, -SPEED, 0, True}, {{0.960000, -0.384000, 0}, 180, 0, 0, INIT_DZ, -SPEED, 0, False}, {{-1.136000, 0.528000, 0}, 0, 0, 0, INIT_DZ, -SPEED, 0, True}, }, }, {"Dagger", { {{-0.096000, 0.448000, 0}, 225, 0, 0, INIT_DZ, -SPEED, 0, False}, {{0.640000, 2.656000, 0}, 225, 180, 0, INIT_DZ, -SPEED, 0, True}, {{-0.064000, -3.104000, 0}, 135, 0, 0, INIT_DZ, -SPEED, 0, False}, {{-0.767999, 1.184000, 0}, 45, 180, 0, INIT_DZ, -SPEED, 0, True}, {{-0.080000, 0.416000, 0}, 315, 0, 0, INIT_DZ, -SPEED, 0, False}, {{0.416000, -2.064000, 0}, 180, 0, 0, INIT_DZ, -SPEED, 0, True}, {{-0.112000, 3.328001, 0}, 315, 0, 0, INIT_DZ, -SPEED, 0, False}, }, }, {"Knight", { {{-0.368000, 0.400000, 0}, 315, 0, 0, INIT_DZ, -SPEED, 0, True}, {{1.871998, -1.808000, 0}, 225, 180, 0, INIT_DZ, -SPEED, 0, False}, {{-1.056000, -0.368000, 0}, 0, 0, 0, INIT_DZ, -SPEED, 0, True}, {{-1.056000, -1.840000, 0}, 45, 180, 0, INIT_DZ, -SPEED, 0, False}, {{-0.352000, 1.440000, 0}, 315, 180, 0, INIT_DZ, -SPEED, 0, True}, {{0.128000, 0.432000, 0}, 180, 0, 0, INIT_DZ, -SPEED, 0, False}, {{1.119999, -1.120000, 0}, 315, 0, 0, INIT_DZ, -SPEED, 0, True}, }, }, {"Candy", { {{-1.039999, 1.136000, 0}, 360, 0, 0, INIT_DZ, -SPEED, 0, False}, {{1.024000, 0.096000, 0}, 180, 180, 0, INIT_DZ, -SPEED, 0, True}, {{-0.016000, 0.048000, 0}, 315, 0, 0, INIT_DZ, -SPEED, 0, False}, {{-0.016000, -1.008000, 0}, 135, 180, 0, INIT_DZ, -SPEED, 0, True}, {{-0.016000, 1.216000, 0}, 315, 180, 0, INIT_DZ, -SPEED, 0, False}, {{1.024000, 0.144000, 0}, 180, 0, 0, INIT_DZ, -SPEED, 0, True}, {{-0.032000, 1.088000, 0}, 180, 180, 0, INIT_DZ, -SPEED, 0, False}, }, }, {"King", { {{-0.688000, 1.904000, 0}, 135, 0, 0, INIT_DZ, -SPEED, 0, True}, {{0.800000, 1.904000, 0}, 135, 0, 0, INIT_DZ, -SPEED, 0, False}, {{0.512000, -1.392000, 0}, 315, 0, 0, INIT_DZ, -SPEED, 0, True}, {{1.488000, 1.120000, 0}, 225, 0, 0, INIT_DZ, -SPEED, 0, False}, {{-1.392000, 1.120000, 0}, 45, 0, 0, INIT_DZ, -SPEED, 0, True}, {{0.496000, -1.312000, 0}, 180, 0, 0, INIT_DZ, -SPEED, 0, False}, {{0.480000, -1.376000, 0}, 270, 0, 0, INIT_DZ, -SPEED, 0, True}, }, }, {"Top", { {{-1.055999, -0.800000, 0}, 90, 0, 0, INIT_DZ, -SPEED, 0, False}, {{-1.103999, 0.208000, 0}, 270, 0, 0, INIT_DZ, -SPEED, 0, True}, {{0.000000, -0.784000, 0}, 135, 0, 0, INIT_DZ, -SPEED, 0, False}, {{0.016000, 0.272000, 0}, 90, 0, 0, INIT_DZ, -SPEED, 0, True}, {{-0.032000, 0.288000, 0}, 180, 0, 0, INIT_DZ, -SPEED, 0, False}, {{0.480000, -1.855999, 0}, 180, 0, 0, INIT_DZ, -SPEED, 0, True}, {{2.096001, 0.224000, 0}, 270, 0, 0, INIT_DZ, -SPEED, 0, False}, }, }, {"Dog", { {{-2.896000, -0.128000, 0}, 45, 0, 0, INIT_DZ, -SPEED, 0, True}, {{-0.800000, 0.992000, 0}, 135, 0, 0, INIT_DZ, -SPEED, 0, False}, {{-1.152000, -0.416000, 0}, 225, 0, 0, INIT_DZ, -SPEED, 0, True}, {{-0.016000, 0.656000, 0}, 315, 0, 0, INIT_DZ, -SPEED, 0, False}, {{1.456000, -0.736000, 0}, 135, 0, 0, INIT_DZ, -SPEED, 0, True}, {{2.864000, 0.736000, 0}, 180, 0, 0, INIT_DZ, -SPEED, 0, False}, {{-0.048000, 1.664000, 0}, 180, 180, 0, INIT_DZ, -SPEED, 0, True}, }, }, {"Moose Head", { {{2.944000, -0.288000, 0}, 270, 0, 0, INIT_DZ, -SPEED, 0, False}, {{1.936000, -0.224000, 0}, 90, 0, 0, INIT_DZ, -SPEED, 0, True}, {{-0.112000, 1.808000, 0}, 315, 0, 0, INIT_DZ, -SPEED, 0, False}, {{-2.128000, 0.768000, 0}, 90, 180, 0, INIT_DZ, -SPEED, 0, True}, {{1.888000, 0.768000, 0}, 180, 180, 0, INIT_DZ, -SPEED, 0, False}, {{-0.112000, -0.688000, 0}, 135, 0, 0, INIT_DZ, -SPEED, 0, True}, {{-3.184000, -1.216000, 0}, 360, 180, 0, INIT_DZ, -SPEED, 0, False}, }, }, {"Negative Square", { {{-1.520000, -0.624000, 0}, 270, 0, 0, INIT_DZ, -SPEED, 0, True}, {{-1.520000, 0.480000, 0}, 180, 0, 0, INIT_DZ, -SPEED, 0, False}, {{2.352000, 0.480000, 0}, 225, 0, 0, INIT_DZ, -SPEED, 0, True}, {{-0.080000, -3.040000, 0}, 315, 180, 0, INIT_DZ, -SPEED, 0, False}, {{-0.096000, 2.944000, 0}, 135, 180, 0, INIT_DZ, -SPEED, 0, True}, {{-2.528000, -0.576000, 0}, 90, 0, 0, INIT_DZ, -SPEED, 0, False}, {{1.360000, -1.600000, 0}, 360, 180, INIT_DZ, -SPEED, 0, True}, }} }; static void get_solved_puzzle(ModeInfo * mi, tangram_shape * tsm1, tangram_shape * tsm2, tangram_shape * tm, tangram_shape * tlg1, tangram_shape * tlg2, tangram_shape * sq, tangram_shape * rh) { tangram_configuration *tp = &tps[MI_SCREEN(mi)]; int sz = sizeof(solved) / sizeof(solved[0]); int r; /* we don't want to see the same puzzle twice */ do { r = random() % sz; } while (r == tp->csi); tp->csi = r; *tsm1 = solved[r].ts[small_triangle1]; *tsm2 = solved[r].ts[small_triangle2]; *tm = solved[r].ts[medium_triangle]; *tlg1 = solved[r].ts[large_triangle1]; *tlg2 = solved[r].ts[large_triangle2]; *sq = solved[r].ts[square]; *rh = solved[r].ts[rhomboid]; tp->puzzle_name = solved[r].name; } static int approach_number(int goal, int current, int step) { int i = 0; if (goal > current) { while (i < step) { current++; if (goal <= current) break; i++; } } else if (goal < current) { while (i < step) { current--; if (goal >= current) break; i++; } } return current; } /* gt - floating point greater than comparison */ static Bool gt(GLfloat x1, GLfloat x2, GLfloat per) { if ((x1 > x2) && (fabs(x1 - x2) > per)) return True; else return False; } /* lt - floating point less than comparison */ static Bool lt(GLfloat x1, GLfloat x2, GLfloat per) { if ((x1 < x2) && (fabs(x1 - x2) > per)) return True; else return False; } static GLfloat approach_float(GLfloat goal, GLfloat current, Bool * changed, GLfloat per) { *changed = False; if (gt(goal, current, per)) { current += per; *changed = True; } else if (lt(goal, current, per)) { current -= per; *changed = True; } return current; } #if 0 static void print_shape(char *s, tangram_shape sh) { fprintf(stderr, "%s\n", s); fprintf(stderr, "(%f, %f, %f)\n", sh.crd.x, sh.crd.y, sh.crd.z); fprintf(stderr, "%d\n", sh.r); fprintf(stderr, "%d\n", sh.fr); fprintf(stderr, "\n"); } #endif static void reset_shape(tangram_shape * ts) { GLfloat r = random() % 10; GLfloat f = r / 10; ts->crd.z = BOTTOM; ts->dz = INIT_DZ + f; ts->ddz = -SPEED; } static void bounce(tangram_shape * ts) { ts->crd.z *= -1; /* ignore this */ ts->dz += ts->ddz; ts->crd.z += ts->dz * SPEED; if (ts->crd.z < BOTTOM) { reset_shape(ts); } ts->crd.z *= -1; /* ignore this */ } static void draw_tangram_shape(tangram_shape ts) { glPushMatrix(); if (!do_rotate) { ts.up = True; } glTranslatef(ts.crd.x, ts.crd.y, ts.up ? ts.crd.z : -ts.crd.z); glRotated(90, 1, 0, 0); glRotated(ts.fr, 1, 0, 0); glRotated(ts.r, 0, 1, 0); glCallList(ts.dl); glPopMatrix(); } static void load_fonts(ModeInfo * mi) { tangram_configuration *tp = &tps[MI_SCREEN(mi)]; tp->font1_data = load_texture_font (mi->dpy, "titleFont"); tp->font2_data = load_texture_font (mi->dpy, "titleFont2"); tp->font3_data = load_texture_font (mi->dpy, "titleFont3"); } static void draw_shapes(ModeInfo * mi) { tangram_configuration *tp = &tps[MI_SCREEN(mi)]; # ifdef HAVE_MOBILE /* Keep it the same relative size when rotated. */ { GLfloat h = MI_HEIGHT(mi) / (GLfloat) MI_WIDTH(mi); int o = (int) current_device_rotation(); if (o != 0 && o != 180 && o != -180) glScalef (h, 1/h, 1); } # endif draw_tangram_shape(tp->tsm1); draw_tangram_shape(tp->tsm2); draw_tangram_shape(tp->tm); draw_tangram_shape(tp->tlg1); draw_tangram_shape(tp->tlg2); draw_tangram_shape(tp->sq); draw_tangram_shape(tp->rh); if (do_labels) { texture_font_data *f; if (MI_WIDTH(mi) >= 500 && MI_HEIGHT(mi) >= 375) f = tp->font1_data; else if (MI_WIDTH(mi) >= 350 && MI_HEIGHT(mi) >= 260) f = tp->font2_data; else f = tp->font3_data; glColor3f(0.8, 0.8, 0); print_texture_label (mi->dpy, f, mi->xgwa.width, mi->xgwa.height, 1, tp->pn); } } ENTRYPOINT void reshape_tangram(ModeInfo * mi, int w, int h) { glViewport(0, 0, w, h); } static void set_camera(tangram_configuration *tp) { glPushMatrix(); glMatrixMode(GL_PROJECTION); glLoadIdentity(); gluPerspective(60, -1, 0.1, 50); gluLookAt(0, 5, -5, 0, 0, 0, 0, -1, 0); if (do_rotate) { glRotatef(tp->theta[0], 1, 0, 0); glRotatef(tp->theta[1], 0, 1, 0); glRotatef(tp->theta[2], 0, 0, 1); } glMatrixMode(GL_MODELVIEW); glPopMatrix(); if (tp->going_down[0] && tp->theta[0] < 0) { tp->going_down[0] = False; } else if ((!tp->going_down[0]) && tp->theta[0] > 90) { tp->going_down[0] = True; } if (tp->theta[1] > 360.0) tp->theta[1] -= 360.0; if (tp->theta[2] > 360.0) tp->theta[2] -= 360.0; if (tp->going_down[0]) tp->theta[0] -= x_camera_rotate; else tp->theta[0] += x_camera_rotate; tp->theta[1] += y_camera_rotate; tp->theta[2] += z_camera_rotate; } static void init_shapes(ModeInfo * mi) { int wire = MI_IS_WIREFRAME(mi); tangram_configuration *tp = &tps[MI_SCREEN(mi)]; get_solved_puzzle(mi, &tp->tsm1, &tp->tsm2, &tp->tm, &tp->tlg1, &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 = 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) { int wire = MI_IS_WIREFRAME(mi); GLfloat y = do_rotate ? -10 : 3; GLfloat x = do_rotate ? 5 : 10; GLfloat pos[4] = { 0, 0, -5, 1.00 }; GLfloat pos2[4] = { 0, 0, 5, 1.00 }; GLfloat dif2[4] = { 1, 1, 1, 1 }; pos[0] = -x; pos[1] = y; pos2[1] = x; pos2[1] = y; if (!wire) { glEnable(GL_LIGHTING); glLightfv(GL_LIGHT0, GL_POSITION, pos); glEnable(GL_LIGHT0); if (do_rotate) { glLightfv(GL_LIGHT1, GL_POSITION, pos2); glLightfv(GL_LIGHT1, GL_DIFFUSE, dif2); glEnable(GL_LIGHT1); } glEnable(GL_DEPTH_TEST); } } ENTRYPOINT void init_tangram(ModeInfo * mi) { tangram_configuration *tp; if (!tps) { tps = (tangram_configuration *) calloc(MI_NUM_SCREENS(mi), sizeof(tangram_configuration)); if (!tps) { fprintf(stderr, "%s: out of memory\n", progname); exit(1); } } tp = &tps[MI_SCREEN(mi)]; if ((tp->glx_context = init_GL(mi)) != NULL) { gl_init(mi); } reshape_tangram (mi, MI_WIDTH(mi), MI_HEIGHT(mi)); wire = MI_IS_WIREFRAME(mi); load_fonts(mi); init_shapes(mi); tp->theta[0] = tp->theta[1] = tp->theta[2] = 1; } static Bool all_solved(tangram_shape * ls[]) { int i; Bool b = True; for (i = 0; i < NUM_SHAPES; i++) { b = (b && ls[i]->solved); } return b; } static void solve(tangram_shape * new_s, tangram_shape * old_s) { Bool moved_x, moved_y, moved_r, moved_fr, z_ok; old_s->fr = approach_number(new_s->fr, old_s->fr, 2); moved_fr = (old_s->fr != new_s->fr); old_s->r = approach_number(new_s->r, old_s->r, 2); moved_r = (old_s->r != new_s->r); old_s->crd.x = approach_float(new_s->crd.x, old_s->crd.x, &moved_x, 0.1); if (!moved_x) old_s->crd.x = new_s->crd.x; old_s->crd.y = approach_float(new_s->crd.y, old_s->crd.y, &moved_y, 0.1); if (!moved_y) old_s->crd.y = new_s->crd.y; z_ok = (-old_s->crd.z <= BOTTOM); old_s->solved = (moved_x == False && moved_y == False && moved_r == False && moved_fr == False && z_ok == True); } static void set_not_solved(tangram_shape * ls[]) { int i; for (i = 0; i < NUM_SHAPES; i++) ls[i]->solved = False; } ENTRYPOINT void draw_tangram(ModeInfo * mi) { Display *dpy = MI_DISPLAY(mi); Window window = MI_WINDOW(mi); tangram_configuration *tp = &tps[MI_SCREEN(mi)]; tangram_shape *ls[NUM_SHAPES]; tangram_shape *nls[NUM_SHAPES]; int i; int MAX_DISPLAY; GLfloat color[4] = { 0.0, 0.0, 0.0, 1.0 }; GLfloat white[4] = { 1.0, 1.0, 1.0, 1.0 }; MAX_DISPLAY = viewing_time * 100; if (! tp->glx_context) return; glXMakeCurrent(MI_DISPLAY(mi), MI_WINDOW(mi), *(tp->glx_context)); ls[small_triangle1] = &tp->tsm1; ls[small_triangle2] = &tp->tsm2; ls[medium_triangle] = &tp->tm; ls[large_triangle1] = &tp->tlg1; ls[large_triangle2] = &tp->tlg2; ls[square] = &tp->sq; ls[rhomboid] = &tp->rh; nls[small_triangle1] = &tp->n_tsm1; nls[small_triangle2] = &tp->n_tsm2; nls[medium_triangle] = &tp->n_tm; nls[large_triangle1] = &tp->n_tlg1; nls[large_triangle2] = &tp->n_tlg2; nls[square] = &tp->n_sq; nls[rhomboid] = &tp->n_rh; set_camera(tp); if (tp->display_counter <= 0) { for (i = 0; i < NUM_SHAPES; i++) { if (ls[i]->solved) { if (all_solved(ls)) { tp->display_counter = MAX_DISPLAY; tp->pn = tp->puzzle_name; get_solved_puzzle(mi, nls[small_triangle1], nls[small_triangle2], nls[medium_triangle], nls[large_triangle1], nls[large_triangle2], nls[square], nls[rhomboid]); tp->ncolors = 128; tp->colors = (XColor *) calloc(tp->ncolors, sizeof(XColor)); make_random_colormap(0, 0, 0, tp->colors, &tp->ncolors, True, False, 0, False); color[0] = tp->colors[0].red / 65536.0; color[1] = tp->colors[1].green / 65536.0; color[2] = tp->colors[2].blue / 65536.0; glMaterialfv(GL_FRONT_AND_BACK, GL_AMBIENT_AND_DIFFUSE, color); set_not_solved(ls); break; } } else { tp->pn = ""; bounce(ls[i]); solve(nls[i], ls[i]); } } } else { tp->display_counter--; } glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glPushMatrix(); glLoadIdentity(); glMaterialfv(GL_FRONT_AND_BACK, GL_SPECULAR, white); glMateriali(GL_FRONT_AND_BACK, GL_SHININESS, 128); draw_shapes(mi); if (mi->fps_p) do_fps (mi); glFlush(); glPopMatrix(); glXSwapBuffers(dpy, window); } ENTRYPOINT Bool tangram_handle_event (ModeInfo *mi, XEvent *event) { tangram_configuration *tp = &tps[MI_SCREEN(mi)]; if (screenhack_event_helper (MI_DISPLAY(mi), MI_WINDOW(mi), event)) { tp->display_counter = 0; return True; } return False; } XSCREENSAVER_MODULE ("Tangram", tangram) #endif /* USE_GL */ xscreensaver-5.36/hacks/glx/tangram_shapes.c000644 000767 000024 00000013071 12701612217 021162 0ustar00jwzstaff000000 000000 /* tangram, Copyright (c) 2005 Jeremy English * * 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. */ #ifdef HAVE_CONFIG_H # include "config.h" #endif /* HAVE_CONFIG_H */ #ifndef HAVE_JWXYZ # include #endif #ifdef HAVE_ANDROID #include #endif #ifdef HAVE_JWZGLES # include "jwzgles.h" #endif /* HAVE_JWZGLES */ #include "tangram_shapes.h" #define small_scale ( 1 ) #define large_scale ( 2 ) #define medium_scale ( 1.414213562 ) #define alpha (0.05) static void tri_45_90(int wire) { GLfloat vertices[][3] = { {0, alpha, 0}, {0, alpha, 1}, {1, alpha, 0}, {0, -alpha, 0}, {0, -alpha, 1}, {1, -alpha, 0} }; glBegin((wire) ? GL_LINE_LOOP : GL_TRIANGLES); glNormal3f(0, 1, 0); glVertex3fv(vertices[0]); glNormal3f(0, 1, 0); glVertex3fv(vertices[2]); glNormal3f(0, 1, 0); glVertex3fv(vertices[1]); glNormal3f(0, -1, 0); glVertex3fv(vertices[3]); glNormal3f(0, -1, 0); glVertex3fv(vertices[4]); glNormal3f(0, -1, 0); glVertex3fv(vertices[5]); glEnd(); glBegin((wire) ? GL_LINE_LOOP : GL_QUADS); glNormal3f(1, 0, 1); glVertex3fv(vertices[2]); glNormal3f(1, 0, 1); glVertex3fv(vertices[5]); glNormal3f(1, 0, 1); glVertex3fv(vertices[4]); glNormal3f(1, 0, 1); glVertex3fv(vertices[1]); glNormal3f(-1, 0, 0); glVertex3fv(vertices[0]); glNormal3f(-1, 0, 0); glVertex3fv(vertices[1]); glNormal3f(-1, 0, 0); glVertex3fv(vertices[4]); glNormal3f(-1, 0, 0); glVertex3fv(vertices[3]); glNormal3f(0, 0, -1); glVertex3fv(vertices[0]); glNormal3f(0, 0, -1); glVertex3fv(vertices[3]); glNormal3f(0, 0, -1); glVertex3fv(vertices[5]); glNormal3f(0, 0, -1); glVertex3fv(vertices[2]); glEnd(); } static void unit_cube(int wire) { glBegin((wire) ? GL_LINE_LOOP : GL_QUADS); glNormal3f(0.0f, 1.0f, 0.0f); glVertex3f(0.0f, alpha, 0.0f); glVertex3f(0.0f, alpha, 1.0f); glVertex3f(1.0f, alpha, 1.0f); glVertex3f(1.0f, alpha, 0.0f); glNormal3f(0.0f, 0.0f, 1.0f); glVertex3f(0.0f, -alpha, 1.0f); glVertex3f(1.0f, -alpha, 1.0f); glVertex3f(1.0f, alpha, 1.0f); glVertex3f(0.0f, alpha, 1.0f); glNormal3f(0.0f, 0.0f, -1.0f); glVertex3f(0.0f, -alpha, 0.0f); glVertex3f(0.0f, alpha, 0.0f); glVertex3f(1.0f, alpha, 0.0f); glVertex3f(1.0f, -alpha, 0.0f); glNormal3f(1.0f, 0.0f, 0.0f); glVertex3f(1.0f, -alpha, 0.0f); glVertex3f(1.0f, alpha, 0.0f); glVertex3f(1.0f, alpha, 1.0f); glVertex3f(1.0f, -alpha, 1.0f); glNormal3f(-1.0f, 0.0f, 0.0f); glVertex3f(0.0f, -alpha, 0.0f); glVertex3f(0.0f, -alpha, 1.0f); glVertex3f(0.0f, alpha, 1.0f); glVertex3f(0.0f, alpha, 0.0f); glNormal3f(0.0f, -1.0f, 0.0f); glVertex3f(0.0f, -alpha, 0.0f); glVertex3f(1.0f, -alpha, 0.0f); glVertex3f(1.0f, -alpha, 1.0f); glVertex3f(0.0f, -alpha, 1.0f); glEnd(); } static void unit_rhomboid(int wire) { glBegin((wire) ? GL_LINE_LOOP : GL_QUADS); glNormal3f(0.0f, 1.0f, 0.0f); glVertex3f(0, alpha, 0); glVertex3f(1, alpha, 1); glVertex3f(1, alpha, 2); glVertex3f(0, alpha, 1); glNormal3f(0.0f, -1.0f, 0.0f); glVertex3f(0, -alpha, 0); glVertex3f(0, -alpha, 1); glVertex3f(1, -alpha, 2); glVertex3f(1, -alpha, 1); glNormal3f(-1.0f, 0.0f, 0.0f); glVertex3f(0, alpha, 0); glVertex3f(0, alpha, 1); glVertex3f(0, -alpha, 1); glVertex3f(0, -alpha, 0); glNormal3f(0.0f, 0.0f, 1.0f); glVertex3f(0, alpha, 1); glVertex3f(1, alpha, 2); glVertex3f(1, -alpha, 2); glVertex3f(0, -alpha, 1); glNormal3f(1.0f, 0.0f, 0.0f); glVertex3f(1, alpha, 1); glVertex3f(1, -alpha, 1); glVertex3f(1, -alpha, 2); glVertex3f(1, alpha, 2); glNormal3f(0.0f, 0.0f, 1.0f); glVertex3f(0, alpha, 0); glVertex3f(0, -alpha, 0); glVertex3f(1, -alpha, 1); glVertex3f(1, alpha, 1); glEnd(); } /* All of the pieces have the same thickness so all of the Y values are the same */ GLuint tangram_get_sm_tri_dl(int wire) { GLuint triangle = glGenLists(1); glNewList(triangle, GL_COMPILE); glScalef(small_scale, small_scale, small_scale); tri_45_90(wire); glEndList(); return triangle; } GLuint tangram_get_lg_tri_dl(int wire) { GLuint triangle = glGenLists(1); glNewList(triangle, GL_COMPILE); glScalef(large_scale, small_scale, large_scale); tri_45_90(wire); glEndList(); return triangle; } GLuint tangram_get_md_tri_dl(int wire) { GLuint triangle = glGenLists(1); glNewList(triangle, GL_COMPILE); glScalef(medium_scale, small_scale, medium_scale); tri_45_90(wire); glEndList(); return triangle; } GLuint tangram_get_square_dl(int wire) { GLuint square = glGenLists(1); glNewList(square, GL_COMPILE); glScalef(small_scale, small_scale, small_scale); unit_cube(wire); glEndList(); return square; } GLuint tangram_get_rhomboid_dl(int wire) { GLuint rhomboid = glGenLists(1); glNewList(rhomboid, GL_COMPILE); glScalef(small_scale, small_scale, small_scale); unit_rhomboid(wire); glEndList(); return rhomboid; } xscreensaver-5.36/hacks/glx/crackberg.c000664 000767 000024 00000133530 12707725506 020132 0ustar00jwzstaff000000 000000 /*************************** ** crackberg; Matus Telgarsky [ catachresis@cmu.edu ] 2005 ** */ #ifndef HAVE_JWXYZ # define XK_MISCELLANY # include #endif #define DEFAULTS "*delay: 20000 \n" \ "*showFPS: False \n" \ "*wireframe: False \n" \ # define refresh_crackberg 0 #undef countof #define countof(x) (sizeof((x))/sizeof((*x))) #include "xlockmore.h" #ifdef USE_GL /* whole file */ #define DEF_NSUBDIVS "4" #define DEF_BORING "False" #define DEF_CRACK "True" #define DEF_WATER "True" #define DEF_FLAT "True" #define DEF_COLOR "random" #define DEF_LIT "True" #define DEF_VISIBILITY "0.6" #define DEF_LETTERBOX "False" /*************************** ** macros ** */ #define M_RAD7_4 0.661437827766148 #define M_SQRT3_2 0.866025403784439 #define M_PI_180 0.0174532925199433 #define M_180_PI 57.2957795130823 #define MSPEED_SCALE 1.1 #define AVE3(a,b,c) ( ((a) + (b) + (c)) / 3.0 ) #define MAX_ZDELTA 0.35 #define DISPLACE(h,d) (h+(random()/(double)RAND_MAX-0.5)*2*MAX_ZDELTA/(1<heights[(cberg->epoints * (y) - ((y)-1)*(y)/2 + (x))]) #define sNCOORD(x,y,p) (cberg->norms[3 * (cberg->epoints * (y) - ((y)-1)*(y)/2 + (x)) + (p)]) #define SET_sNCOORD(x,y, down, a,b,c,d,e,f) \ sNCOORD(x,y,0) = AVE3(a-d, 0.5 * (b-e), -0.5 * (c-f)); \ sNCOORD(x,y,1) = ((down) ? -1 : +1) * AVE3(0.0, M_SQRT3_2 * (b-e), M_SQRT3_2 * (c-f)); \ sNCOORD(x,y,2) = (2*dx) #define fNCOORD(x,y,w,p) \ (cberg->norms[3 * (2*(y)*cberg->epoints-((y)+1)*((y)+1) + 1 + 2 * ((x)-1) + (w)) + (p)]) #define SET_fNCOORDa(x,y, down, dz00,dz01) \ fNCOORD(x,y,0,0) = (down) * (dy) * (dz01); \ fNCOORD(x,y,0,1) = (down) * ((dz01) * (dx) / 2 - (dx) * (dz00)); \ fNCOORD(x,y,0,2) = (down) * (dx) * (dy) #define SET_fNCOORDb(x,y, down, dz10,dz11) \ fNCOORD(x,y,1,0) = (down) * (dy) * (dz10); \ fNCOORD(x,y,1,1) = (down) * ((dz11) * (dx) - (dx) * (dz10) / 2); \ fNCOORD(x,y,1,2) = (down) * (dx) * (dy) /*************************** ** types ** */ typedef struct _cberg_state cberg_state; typedef struct _Trile Trile; typedef struct { void (*init)(Trile *); void (*free)(Trile *); void (*draw)(Trile *); void (*init_iter)(Trile *, cberg_state *); void (*dying_iter)(Trile *, cberg_state *); } Morph; typedef struct { char *id; void (*land)(cberg_state *, double); void (*water)(cberg_state *, double); double bg[4]; } Color; enum { TRILE_NEW, TRILE_INIT, TRILE_STABLE, TRILE_DYING, TRILE_DELETE }; struct _Trile { int x,y; /*center coords; points up if (x+y)%2 == 0, else down*/ short state; short visible; double *l,*r,*v; /*only edges need saving*/ GLuint call_list; void *morph_data; const Morph *morph; struct _Trile *left, *right, *parent; /* for bst, NOT spatial */ struct _Trile *next_free; /* for memory allocation */ }; enum { MOTION_AUTO = 0, MOTION_MANUAL = 1, MOTION_LROT= 2, MOTION_RROT = 4, MOTION_FORW = 8, MOTION_BACK = 16, MOTION_DEC = 32, MOTION_INC = 64, MOTION_LEFT = 128, MOTION_RIGHT = 256 }; struct _cberg_state { GLXContext *glx_context; Trile *trile_head; double x,y,z, yaw,roll,pitch, dx,dy,dz, dyaw,droll,dpitch, elapsed; double prev_frame; int motion_state; double mspeed; double fovy, aspect, zNear, zFar; const Color *color; int count; unsigned int epoints, /*number of points to one edge*/ tpoints, /*number points total*/ ntris, /*number triangles per trile*/ tnorms; /*number of normals*/ double *heights, *norms; Trile *free_head; /* for trile_[alloc|free] */ double draw_elapsed; double dx0; 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; }; /*************************** ** globals ** */ static unsigned int nsubdivs; static Bool crack, boring, do_water, flat, lit, letterbox; static float visibility; static char *color; static cberg_state *cbergs = NULL; static XrmOptionDescRec opts[] = { {"-nsubdivs", ".nsubdivs", XrmoptionSepArg, 0}, {"-boring", ".boring", XrmoptionNoArg, "True"}, {"-crack", ".crack", XrmoptionNoArg, "True"}, {"-no-crack", ".crack", XrmoptionNoArg, "False"}, {"-water", ".water", XrmoptionNoArg, "True"}, {"-no-water", ".water", XrmoptionNoArg, "False"}, {"-flat", ".flat", XrmoptionNoArg, "True"}, {"-no-flat", ".flat", XrmoptionNoArg, "False"}, {"-color", ".color", XrmoptionSepArg, 0}, {"-lit", ".lit", XrmoptionNoArg, "True"}, {"-no-lit", ".lit", XrmoptionNoArg, "False"}, {"-visibility", ".visibility", XrmoptionSepArg, 0}, {"-letterbox", ".letterbox", XrmoptionNoArg, "True"} }; static argtype vars[] = { {&nsubdivs, "nsubdivs", "nsubdivs", DEF_NSUBDIVS, t_Int}, {&boring, "boring", "boring", DEF_BORING, t_Bool}, {&crack, "crack", "crack", DEF_CRACK, t_Bool}, {&do_water, "water", "water", DEF_WATER, t_Bool}, {&flat, "flat", "flat", DEF_FLAT, t_Bool}, {&color, "color", "color", DEF_COLOR, t_String}, {&lit, "lit", "lit", DEF_LIT, t_Bool}, {&visibility, "visibility", "visibility", DEF_VISIBILITY, t_Float}, {&letterbox, "letterbox", "letterbox", DEF_LETTERBOX, t_Bool} }; ENTRYPOINT ModeSpecOpt crackberg_opts = {countof(opts), opts, countof(vars), vars, NULL}; /*************************** ** Trile functions. ** first come all are regular trile functions ** */ /* forward decls for trile_new */ static Trile *triles_find(Trile *tr, int x, int y); static Trile *trile_alloc(cberg_state *cberg); static const Morph *select_morph(void); static const Color *select_color(cberg_state *); static void trile_calc_sides(cberg_state *cberg, Trile *new, int x, int y, Trile *root) { unsigned int i,j,k; int dv = ( (x + y) % 2 ? +1 : -1); /* we are pointing down or up*/ Trile *l, *r, *v; /* v_ertical */ if (root) { l = triles_find(root, x-1, y); r = triles_find(root, x+1, y); v = triles_find(root, x,y+dv); } else l = r = v = NULL; if (v) { for (i = 0; i != cberg->epoints; ++i) new->v[i] = v->v[i]; } else { if (l) new->v[0] = l->l[0]; else if (!root) new->v[0] = DISPLACE(0,0); else { Trile *tr; /* all of these tests needed.. */ if ( (tr = triles_find(root, x-1, y + dv)) ) new->v[0] = tr->l[0]; else if ( (tr = triles_find(root, x-2, y)) ) new->v[0] = tr->r[0]; else if ( (tr = triles_find(root, x-2, y + dv)) ) new->v[0] = tr->r[0]; else new->v[0] = DISPLACE(0,0); } if (r) new->v[cberg->epoints-1] = r->l[0]; else if (!root) new->v[cberg->epoints-1] = DISPLACE(0,0); else { Trile *tr; if ( (tr = triles_find(root, x+1, y + dv)) ) new->v[cberg->epoints-1] = tr->l[0]; else if ( (tr = triles_find(root, x+2, y)) ) new->v[cberg->epoints-1] = tr->v[0]; else if ( (tr = triles_find(root, x+2, y + dv)) ) new->v[cberg->epoints-1] = tr->v[0]; else new->v[cberg->epoints-1] = DISPLACE(0,0); } for (i = ((1 << nsubdivs) >> 1), k =1; i; i >>= 1, ++k) for (j = i; j < cberg->epoints; j += i * 2) new->v[j] = DISPLACE(MEAN(new->v[j-i], new->v[j+i]), k); } if (l) { for (i = 0; i != cberg->epoints; ++i) new->l[i] = l->r[i]; } else { if (r) new->l[0] = r->v[0]; else if (!root) new->l[0] = DISPLACE(0,0); else { Trile *tr; if ( (tr = triles_find(root, x-1, y-dv)) ) new->l[0] = tr->r[0]; else if ( (tr = triles_find(root, x+1, y-dv)) ) new->l[0] = tr->v[0]; else if ( (tr = triles_find(root, x, y-dv)) ) new->l[0] = tr->l[0]; else new->l[0] = DISPLACE(0,0); } new->l[cberg->epoints - 1] = new->v[0]; for (i = ((1 << nsubdivs) >> 1), k =1; i; i >>= 1, ++k) for (j = i; j < cberg->epoints; j += i * 2) new->l[j] = DISPLACE(MEAN(new->l[j-i], new->l[j+i]), k); } if (r) { for (i = 0; i != cberg->epoints; ++i) new->r[i] = r->l[i]; } else { new->r[0] = new->v[cberg->epoints - 1]; new->r[cberg->epoints - 1] = new->l[0]; for (i = ((1 << nsubdivs) >> 1), k =1; i; i >>= 1, ++k) for (j = i; j < cberg->epoints; j += i * 2) new->r[j] = DISPLACE(MEAN(new->r[j-i], new->r[j+i]), k); } } static void trile_calc_heights(cberg_state *cberg, Trile *new) { unsigned int i, j, k, h; for (i = 0; i < cberg->epoints - 1; ++i) { /* copy in sides */ TCOORD(i,0) = new->v[i]; TCOORD(cberg->epoints - 1 - i, i) = new->r[i]; TCOORD(0, cberg->epoints - 1 - i) = new->l[i]; } for (i = ((1 << nsubdivs) >> 2), k =1; i; i >>= 1, ++k) for (j = 1; j < (1 << k); ++j) for (h = 1; h <= (1<x + new->y) % 2) ? -1 : +1); double dz00,dz01,dz10,dz11, a,b,c,d; double dy = down * M_SQRT3_2 / (1 << nsubdivs); double dx = cberg->dx0; for (y = 0; y < cberg->epoints - 1; ++y) { a = TCOORD(0,y); b = TCOORD(0,y+1); for (x = 1; x < cberg->epoints - 1 - y; ++x) { c = TCOORD(x,y); d = TCOORD(x,y+1); dz00 = b-c; dz01 = a-c; dz10 = b-d; dz11 = c-d; SET_fNCOORDa(x,y, down, dz00,dz01); SET_fNCOORDb(x,y, down, dz10,dz11); a = c; b = d; } c = TCOORD(x,y); dz00 = b-c; dz01 = a-c; SET_fNCOORDa(x,y, down, dz00, dz01); } } static void trile_calc_smooth_norms(cberg_state *cberg, Trile *new) { unsigned int i,j, down = (new->x + new->y) % 2; double prev, cur, next; double dx = cberg->dx0; /** corners -- assume level (bah) **/ cur = TCOORD(0,0); SET_sNCOORD(0,0, down, cur,cur,TCOORD(0,1),TCOORD(1,0),cur,cur); cur = TCOORD(cberg->epoints-1,0); SET_sNCOORD(cberg->epoints-1,0, down, TCOORD(cberg->epoints-2,0),TCOORD(cberg->epoints-2,1),cur,cur,cur,cur); cur = TCOORD(0,cberg->epoints-1); SET_sNCOORD(0,cberg->epoints-1, down, cur,cur,cur,cur,TCOORD(1,cberg->epoints-2),TCOORD(0,cberg->epoints-2)); /** sides **/ /* vert */ prev = TCOORD(0,0); cur = TCOORD(1,0); for (i = 1; i < cberg->epoints - 1; ++i) { next = TCOORD(i+1,0); SET_sNCOORD(i,0, down, prev,TCOORD(i-1,1),TCOORD(i,1), next,cur,cur); prev = cur; cur = next; } /* right */ prev = TCOORD(cberg->epoints-1,0); cur = TCOORD(cberg->epoints-2,0); for (i = 1; i < cberg->epoints - 1; ++i) { next = TCOORD(cberg->epoints-i-2,i+1); SET_sNCOORD(cberg->epoints-i-1,i, down, TCOORD(cberg->epoints-i-2,i),next,cur, cur,prev,TCOORD(cberg->epoints-i-1,i-1)); prev = cur; cur = next; } /* left */ prev = TCOORD(0,0); cur = TCOORD(0,1); for (i = 1; i < cberg->epoints - 1; ++i) { next = TCOORD(0,i+1); SET_sNCOORD(0,i, down, cur,cur,next,TCOORD(1,i),TCOORD(1,i-1),prev); prev = cur; cur = next; } /** fill in **/ for (i = 1; i < cberg->epoints - 2; ++i) { prev = TCOORD(0,i); cur = TCOORD(1,i); for (j = 1; j < cberg->epoints - i - 1; ++j) { next = TCOORD(j+1,i); SET_sNCOORD(j,i, down, prev,TCOORD(j-1,i+1),TCOORD(j,i+1), next,TCOORD(j+1,i-1),TCOORD(j,i-1)); prev = cur; cur = next; } } } static inline void trile_light(cberg_state *cberg, unsigned int x, unsigned int y, unsigned int which) { if (flat) { if (x) { glNormal3d(fNCOORD(x,y,which,0), fNCOORD(x,y,which,1), fNCOORD(x,y,which,2)); } else { /* I get mesa errors and bizarre glitches without this!! */ glNormal3d(fNCOORD(1,y,0,0), fNCOORD(1,y,0,1), fNCOORD(1,y,0,2)); } } else { glNormal3d(sNCOORD(x,y+which,0), sNCOORD(x,y+which,1), sNCOORD(x,y+which,2)); } } static inline void trile_draw_vertex(cberg_state *cberg, unsigned int ix, unsigned int iy, unsigned int which, double x,double y, double zcur, double z1, double z2) { glColor3d(0.0, 0.0, 0.0); /* don't ask. my card breaks otherwise. */ if (do_water && zcur <= 0.0) { cberg->color->water(cberg, zcur); /* XXX use average-of-3 for color when flat?*/ if (lit) glNormal3d(0.0,0.0,1.0); glVertex3d(x, y, 0.0); } else { cberg->color->land(cberg, zcur); if (lit) trile_light(cberg,ix,iy,which); glVertex3d(x, y, zcur); } } static void trile_render(cberg_state *cberg, Trile *new) { double cornerx = 0.5 * new->x - 0.5, cornery; double dy = M_SQRT3_2 / (1 << nsubdivs); double z0,z1,z2; int x,y; new->call_list = glGenLists(1); glNewList(new->call_list, GL_COMPILE); if ((new->x + new->y) % 2) { /*point down*/ cornery = (new->y + 0.5)*M_SQRT3_2; glFrontFace(GL_CW); dy = -dy; } else cornery = (new->y - 0.5) * M_SQRT3_2; for (y = 0; y < cberg->epoints - 1; ++y) { double dx = cberg->dx0; glBegin(GL_TRIANGLE_STRIP); /* first three points all part of the same triangle.. */ z0 = TCOORD(0,y); z1 = TCOORD(0,y+1); z2 = TCOORD(1,y); trile_draw_vertex(cberg, 0,y,0, cornerx,cornery, z0, z1, z2); trile_draw_vertex(cberg, 0,y,1, cornerx+0.5*dx,cornery+dy, z1, z0, z2); for (x = 1; x < cberg->epoints - 1 - y; ++x) { trile_draw_vertex(cberg, x,y,0, cornerx+x*dx,cornery, z2, z1, z0); z0 = TCOORD(x, y+1); trile_draw_vertex(cberg, x,y,1, cornerx+(x+0.5)*dx,cornery+dy, z0, z2, z1); z1 = z0; z0 = z2; z2 = TCOORD(x+1,y); } trile_draw_vertex(cberg, x,y,0, cornerx + x*dx, cornery, z2, z1, z0); glEnd(); cornerx += dx/2; cornery += dy; } if ((new->x + new->y) % 2) /*point down*/ glFrontFace(GL_CCW); glEndList(); } static Trile *trile_new(cberg_state *cberg, int x,int y,Trile *parent,Trile *root) { Trile *new; new = trile_alloc(cberg); new->x = x; new->y = y; new->state = TRILE_NEW; new->parent = parent; new->left = new->right = NULL; new->visible = 1; new->morph = select_morph(); new->morph->init(new); trile_calc_sides(cberg, new, x, y, root); trile_calc_heights(cberg, new); if (lit) { if (flat) trile_calc_flat_norms(cberg, new); else trile_calc_smooth_norms(cberg, new); } trile_render(cberg, new); return new; } static Trile *trile_alloc(cberg_state *cberg) { Trile *new; if (cberg->free_head) { new = cberg->free_head; cberg->free_head = cberg->free_head->next_free; } else { ++cberg->count; if (!(new = malloc(sizeof(Trile))) || !(new->l = (double *) malloc(sizeof(double) * cberg->epoints * 3))) { perror(progname); exit(1); } new->r = new->l + cberg->epoints; new->v = new->r + cberg->epoints; #ifdef DEBUG printf("needed to alloc; [%d]\n", cberg->count); #endif } return new; } static void trile_free(cberg_state *cberg, Trile *tr) { glDeleteLists(tr->call_list, 1); tr->morph->free(tr); tr->next_free = cberg->free_head; cberg->free_head = tr; } static void trile_draw_vanilla(Trile *tr) { glCallList(tr->call_list); } static void trile_draw(Trile *tr, void *ignore) { if (tr->state == TRILE_STABLE) trile_draw_vanilla(tr); else tr->morph->draw(tr); } /*************************** ** Trile morph functions. ** select function at bottom (forward decls sucls) ** */ /*** first the basic growing morph */ static void grow_init(Trile *tr) { tr->morph_data = (void *) malloc(sizeof(double)); *((double *)tr->morph_data) = 0.02; /* not 0; avoid normals crapping */ } static void grow_free(Trile *tr) { free(tr->morph_data); } static void grow_draw(Trile *tr) { glPushMatrix(); glScaled(1.0,1.0, *((double *)tr->morph_data)); trile_draw_vanilla(tr); glPopMatrix(); } static void grow_init_iter(Trile *tr, cberg_state *cberg) { *((double *)(tr->morph_data)) = *((double *)tr->morph_data) + cberg->elapsed; if (*((double *)tr->morph_data) >= 1.0) tr->state = TRILE_STABLE; } static void grow_dying_iter(Trile *tr, cberg_state *cberg) { *((double *)tr->morph_data) = *((double *)tr->morph_data) - cberg->elapsed; if (*((double *)tr->morph_data) <= 0.02) /* XXX avoid fast del/cons? */ tr->state = TRILE_DELETE; } /**** falling morph ****/ static void fall_init(Trile *tr) { tr->morph_data = (void *) malloc(sizeof(double)); *((double *)tr->morph_data) = 0.0; } static void fall_free(Trile *tr) { free(tr->morph_data); } static void fall_draw(Trile *tr) { glPushMatrix(); glTranslated(0.0,0.0,(0.5 - *((double *)tr->morph_data)) * 8); trile_draw_vanilla(tr); glPopMatrix(); } static void fall_init_iter(Trile *tr, cberg_state *cberg) { *((double *)(tr->morph_data)) = *((double *)tr->morph_data) + cberg->elapsed; if (*((double *)tr->morph_data) >= 0.5) tr->state = TRILE_STABLE; } static void fall_dying_iter(Trile *tr, cberg_state *cberg) { *((double *)tr->morph_data) = *((double *)tr->morph_data) - cberg->elapsed; if (*((double *)tr->morph_data) <= 0.0) /* XXX avoid fast del/cons? */ tr->state = TRILE_DELETE; } /**** yeast morph ****/ static void yeast_init(Trile *tr) { tr->morph_data = (void *) malloc(sizeof(double)); *((double *)tr->morph_data) = 0.02; } static void yeast_free(Trile *tr) { free(tr->morph_data); } static void yeast_draw(Trile *tr) { double x = tr->x * 0.5, y = tr->y * M_SQRT3_2, z = *((double *)tr->morph_data); glPushMatrix(); glTranslated(x, y, 0); glRotated(z*360, 0,0,1); glScaled(z,z,z); glTranslated(-x, -y, 0); trile_draw_vanilla(tr); glPopMatrix(); } static void yeast_init_iter(Trile *tr, cberg_state *cberg) { *((double *)(tr->morph_data)) = *((double *)tr->morph_data) + cberg->elapsed; if (*((double *)tr->morph_data) >= 1.0) tr->state = TRILE_STABLE; } static void yeast_dying_iter(Trile *tr, cberg_state *cberg) { *((double *)tr->morph_data) = *((double *)tr->morph_data) - cberg->elapsed; if (*((double *)tr->morph_data) <= 0.02) /* XXX avoid fast del/cons? */ tr->state = TRILE_DELETE; } /**** identity morph ****/ static void identity_init(Trile *tr) { tr->state = TRILE_STABLE; } static void identity_free(Trile *tr) {} static void identity_draw(Trile *tr) { trile_draw_vanilla(tr); } static void identity_init_iter(Trile *tr, cberg_state *cberg) {} static void identity_dying_iter(Trile *tr, cberg_state *cberg) { tr->state = TRILE_DELETE; } /** now to handle selection **/ static const Morph morphs[] = { {grow_init, grow_free, grow_draw, grow_init_iter, grow_dying_iter}, {fall_init, fall_free, fall_draw, fall_init_iter, fall_dying_iter}, {yeast_init, yeast_free, yeast_draw, yeast_init_iter, yeast_dying_iter}, {identity_init, /*always put identity last to skip it..*/ identity_free, identity_draw, identity_init_iter, identity_dying_iter} }; static const Morph *select_morph() { int nmorphs = countof(morphs); if (crack) return &morphs[random() % (nmorphs-1)]; else if (boring) return &morphs[nmorphs-1]; else return morphs; } /*************************** ** Trile superstructure functions. ** */ static void triles_set_visible(cberg_state *cberg, Trile **root, int x, int y) { Trile *parent = NULL, *iter = *root; int goleft=0; while (iter != NULL) { parent = iter; goleft = (iter->x > x || (iter->x == x && iter->y > y)); if (goleft) iter = iter->left; else if (iter->x == x && iter->y == y) { iter->visible = 1; return; } else iter = iter->right; } if (parent == NULL) *root = trile_new(cberg, x,y, NULL, NULL); else if (goleft) parent->left = trile_new(cberg, x,y, parent, *root); else parent->right = trile_new(cberg, x,y, parent, *root); } static unsigned int triles_foreach(Trile *root, void (*f)(Trile *, void *), void *data) { if (root == NULL) return 0; f(root, data); return 1 + triles_foreach(root->left, f, data) + triles_foreach(root->right, f, data); } static void triles_update_state(Trile **root, cberg_state *cberg) { int process_current = 1; if (*root == NULL) return; while (process_current) { if ( (*root)->visible ) { if ( (*root)->state == TRILE_INIT ) (*root)->morph->init_iter(*root, cberg); else if ( (*root)->state == TRILE_DYING ) { (*root)->state = TRILE_INIT; (*root)->morph->init_iter(*root, cberg); } else if ( (*root)->state == TRILE_NEW ) (*root)->state = TRILE_INIT; (*root)->visible = 0; } else { if ( (*root)->state == TRILE_STABLE ) (*root)->state = TRILE_DYING; else if ( (*root)->state == TRILE_INIT ) { (*root)->state = TRILE_DYING; (*root)->morph->dying_iter(*root, cberg); } else if ( (*root)->state == TRILE_DYING ) (*root)->morph->dying_iter(*root, cberg); } if ( (*root)->state == TRILE_DELETE ) { Trile *splice_me; process_current = 1; if ((*root)->left == NULL) { splice_me = (*root)->right; if (splice_me) splice_me->parent = (*root)->parent; else process_current = 0; } else if ((*root)->right == NULL) { splice_me = (*root)->left; splice_me->parent = (*root)->parent; } else { Trile *tmp; for (splice_me = (*root)->right; splice_me->left != NULL; ) splice_me = splice_me->left; tmp = splice_me->right; if (tmp) tmp->parent = splice_me->parent; if (splice_me == splice_me->parent->left) splice_me->parent->left = tmp; else splice_me->parent->right = tmp; splice_me->parent = (*root)->parent; splice_me->left = (*root)->left; (*root)->left->parent = splice_me; splice_me->right = (*root)->right; if ((*root)->right) (*root)->right->parent = splice_me; } trile_free(cberg, *root); *root = splice_me; } else process_current = 0; } if (*root) { triles_update_state(&((*root)->left), cberg); triles_update_state(&((*root)->right), cberg); } } static Trile *triles_find(Trile *tr, int x, int y) { while (tr && !(tr->x == x && tr->y == y)) if (x < tr->x || (x == tr->x && y < tr->y)) tr = tr->left; else tr = tr->right; return tr; } /*************************** ** Trile superstructure visibility functions. ** strategy fine, implementation lazy&retarded =/ ** */ #ifdef DEBUG static double x_shit, y_shit; #endif static void calc_points(cberg_state *cberg, double *x1,double *y1, double *x2,double *y2, double *x3,double *y3, double *x4,double *y4) { double zNear, x_nearcenter, y_nearcenter, nhalfwidth, x_center, y_center; /* could cache these.. bahhhhhhhhhhhhhh */ double halfheight = tan(cberg->fovy / 2 * M_PI_180) * cberg->zNear; double fovx_2 = atan(halfheight * cberg->aspect / cberg->zNear) * M_180_PI; double zFar = cberg->zFar + M_RAD7_4; double fhalfwidth = zFar * tan(fovx_2 * M_PI_180) + M_RAD7_4 / cos(fovx_2 * M_PI_180); double x_farcenter = cberg->x + zFar * cos(cberg->yaw * M_PI_180); double y_farcenter = cberg->y + zFar * sin(cberg->yaw * M_PI_180); *x1 = x_farcenter + fhalfwidth * cos((cberg->yaw - 90) * M_PI_180); *y1 = y_farcenter + fhalfwidth * sin((cberg->yaw - 90) * M_PI_180); *x2 = x_farcenter - fhalfwidth * cos((cberg->yaw - 90) * M_PI_180); *y2 = y_farcenter - fhalfwidth * sin((cberg->yaw - 90) * M_PI_180); #ifdef DEBUG printf("pos (%.3f,%.3f) @ %.3f || fovx: %f || fovy: %f\n", cberg->x, cberg->y, cberg->yaw, fovx_2 * 2, cberg->fovy); printf("\tfarcenter: (%.3f,%.3f) || fhalfwidth: %.3f \n" "\tp1: (%.3f,%.3f) || p2: (%.3f,%.3f)\n", x_farcenter, y_farcenter, fhalfwidth, *x1, *y1, *x2, *y2); #endif if (cberg->z - halfheight <= 0) /* near view plane hits xy */ zNear = cberg->zNear - M_RAD7_4; else /* use bottom of frustum */ zNear = cberg->z / tan(cberg->fovy / 2 * M_PI_180) - M_RAD7_4; nhalfwidth = zNear * tan(fovx_2 * M_PI_180) + M_RAD7_4 / cos(fovx_2 * M_PI_180); x_nearcenter = cberg->x + zNear * cos(cberg->yaw * M_PI_180); y_nearcenter = cberg->y + zNear * sin(cberg->yaw * M_PI_180); *x3 = x_nearcenter - nhalfwidth * cos((cberg->yaw - 90) * M_PI_180); *y3 = y_nearcenter - nhalfwidth * sin((cberg->yaw - 90) * M_PI_180); *x4 = x_nearcenter + nhalfwidth * cos((cberg->yaw - 90) * M_PI_180); *y4 = y_nearcenter + nhalfwidth * sin((cberg->yaw - 90) * M_PI_180); #ifdef DEBUG printf("\tnearcenter: (%.3f,%.3f) || nhalfwidth: %.3f\n" "\tp3: (%.3f,%.3f) || p4: (%.3f,%.3f)\n", x_nearcenter, y_nearcenter, nhalfwidth, *x3, *y3, *x4, *y4); #endif /* center can be average or the intersection of diagonals.. */ #if 0 { double c = nhalfwidth * (zFar -zNear) / (fhalfwidth + nhalfwidth); x_center = x_nearcenter + c * cos(cberg->yaw * M_PI_180); y_center = y_nearcenter + c * sin(cberg->yaw * M_PI_180); } #else x_center = (x_nearcenter + x_farcenter) / 2; y_center = (y_nearcenter + y_farcenter) / 2; #endif #ifdef DEBUG x_shit = x_center; y_shit = y_center; #endif #define VSCALE(p) *x##p = visibility * *x##p + (1-visibility) * x_center; \ *y##p = visibility * *y##p + (1-visibility) * y_center VSCALE(1); VSCALE(2); VSCALE(3); VSCALE(4); #undef VSCALE } /* this is pretty stupid.. */ static inline void minmax4(double a, double b, double c, double d, double *min, double *max) { *min = *max = a; if (b > *max) *max = b; else if (b < *min) *min = b; if (c > *max) *max = c; else if (c < *min) *min = c; if (d > *max) *max = d; else if (d < *min) *min = d; } typedef struct { double min, max, start, dx; } LS; #define check_line(a, b) \ if (fabs(y##a-y##b) > 0.001) { \ ls[count].dx = (x##b-x##a)/(y##b-y##a); \ if (y##b > y##a) { \ ls[count].start = x##a; \ ls[count].min = y##a; \ ls[count].max = y##b; \ } else { \ ls[count].start = x##b; \ ls[count].min = y##b; \ ls[count].max = y##a; \ } \ ++count; \ } static unsigned int build_ls(cberg_state *cberg, double x1, double y1, double x2, double y2, double x3, double y3, double x4, double y4, LS *ls, double *trough, double *peak) { unsigned int count = 0; check_line(1, 2); check_line(2, 3); check_line(3, 4); check_line(4, 1); minmax4(y1, y2, y3, y4, trough, peak); return count; } #undef check_line /*needs bullshit to avoid double counts on corners.*/ static void find_bounds(double y, double *left, double *right, LS *ls, unsigned int nls) { double x; unsigned int i, set = 0; for (i = 0; i != nls; ++i) if (ls[i].min <= y && ls[i].max >= y) { x = (y - ls[i].min) * ls[i].dx + ls[i].start; if (!set) { *left = x; ++set; } else if (fabs(x - *left) > 0.001) { if (*left < x) *right = x; else { *right = *left; *left = x; } return; } } /* just in case we somehow blew up */ *left = 3.0; *right = -3.0; } static void mark_visible(cberg_state *cberg) { double trough, peak, yval, left=0, right=0; double x1,y1, x2,y2, x3,y3, x4,y4; int start, stop, x, y; LS ls[4]; unsigned int nls; calc_points(cberg, &x1,&y1, &x2,&y2, &x3,&y3, &x4,&y4); nls = build_ls(cberg, x1,y1, x2,y2, x3,y3, x4,y4, ls, &trough, &peak); start = (int) ceil(trough / M_SQRT3_2); stop = (int) floor(peak / M_SQRT3_2); for (y = start; y <= stop; ++y) { yval = y * M_SQRT3_2; find_bounds(yval, &left, &right, ls, nls); for (x = (int) ceil(left*2-1); x <= (int) floor(right*2); ++x) triles_set_visible(cberg, &(cberg->trile_head), x, y); } } /*************************** ** color schemes ** */ static void plain_land(cberg_state *cberg, double z) { glColor3f(pow((z/0.35),4), z/0.35, pow((z/0.35),4)); } static void plain_water(cberg_state *cberg, double z) { glColor3f(0.0, (z+0.35)*1.6, 0.8); } static void ice_land(cberg_state *cberg, double z) { glColor3f((0.35 - z)/0.35, (0.35 - z)/0.35, 1.0); } static void ice_water(cberg_state *cberg, double z) { glColor3f(0.0, (z+0.35)*1.6, 0.8); } static void magma_land(cberg_state *cberg, double z) { glColor3f(z/0.35, z/0.2,0); } static void magma_lava(cberg_state *cberg, double z) { glColor3f((z+0.35)*1.6, (z+0.35), 0.0); } static void vomit_solid(cberg_state *cberg, double z) { double norm = fabs(z) / 0.35; glColor3f( (1-norm) * cberg->vs0r + norm * cberg->vs1r, (1-norm) * cberg->vs0g + norm * cberg->vs1g, (1-norm) * cberg->vs0b + norm * cberg->vs1b ); } static void vomit_fluid(cberg_state *cberg, double z) { double norm = z / -0.35; glColor3f( (1-norm) * cberg->vf0r + norm * cberg->vf1r, (1-norm) * cberg->vf0g + norm * cberg->vf1g, (1-norm) * cberg->vf0b + norm * cberg->vf1b ); } static const Color colors[] = { {"plain", plain_land, plain_water, {0.0, 0.0, 0.0, 1.0}}, {"ice", ice_land, ice_water, {0.0, 0.0, 0.0, 1.0}}, {"magma", magma_land, magma_lava, {0.3, 0.3, 0.0, 1.0}}, {"vomit", vomit_solid, vomit_fluid, {0.3, 0.3, 0.0, 1.0}}, /* no error! */ }; static const Color *select_color(cberg_state *cberg) { unsigned int ncolors = countof(colors); int idx = -1; if ( ! strcmp(color, "random") ) idx = random() % ncolors; else { unsigned int i; for (i = 0; i != ncolors; ++i) if ( ! strcmp(colors[i].id, color) ) { idx = i; break; } if (idx == -1) { printf("invalid color scheme selected; valid choices are:\n"); for (i = 0; i != ncolors; ++i) printf("\t%s\n", colors[i].id); printf("\t%s\n", "random"); idx = 0; } } if ( ! strcmp(colors[idx].id, "vomit") ) { /* need to create it (ghetto) */ cberg->vs0r = random()/(double)RAND_MAX; cberg->vs0g = random()/(double)RAND_MAX; cberg->vs0b = random()/(double)RAND_MAX; cberg->vs1r = random()/(double)RAND_MAX; cberg->vs1g = random()/(double)RAND_MAX; cberg->vs1b = random()/(double)RAND_MAX; cberg->vf0r = random()/(double)RAND_MAX; cberg->vf0g = random()/(double)RAND_MAX; cberg->vf0b = random()/(double)RAND_MAX; cberg->vf1r = random()/(double)RAND_MAX; cberg->vf1g = random()/(double)RAND_MAX; cberg->vf1b = random()/(double)RAND_MAX; glClearColor(random()/(double)RAND_MAX, random()/(double)RAND_MAX, random()/(double)RAND_MAX, 1.0); } else { glClearColor(colors[idx].bg[0], colors[idx].bg[1], colors[idx].bg[2], colors[idx].bg[3]); } return colors + idx; } /*************************** ** misc helper functions ** */ /* simple one for now.. */ static inline double drunken_rando(double cur_val, double max, double width) { double r = random() / (double) RAND_MAX * 2; if (cur_val > 0) if (r >= 1) return cur_val + (r-1) * width * (1-cur_val/max); else return cur_val - r * width; else if (r >= 1) return cur_val - (r-1) * width * (1+cur_val/max); else return cur_val + r * width; } /*************************** ** core crackberg routines ** */ ENTRYPOINT void reshape_crackberg (ModeInfo *mi, int w, int h); ENTRYPOINT void init_crackberg (ModeInfo *mi) { cberg_state *cberg; if (!cbergs) { nsubdivs %= 16; /* just in case.. */ if ( !(cbergs = calloc(MI_NUM_SCREENS(mi), sizeof(cberg_state)))) { perror(progname); exit(1); } if (visibility > 1.0 || visibility < 0.2) { printf("visibility must be in range [0.2 .. 1.0]\n"); visibility = 1.0; } } cberg = &cbergs[MI_SCREEN(mi)]; cberg->epoints = 1 + (1 << nsubdivs); cberg->tpoints = cberg->epoints * (cberg->epoints + 1) / 2; cberg->ntris = (1 << (nsubdivs << 1)); cberg->tnorms = ( (flat) ? cberg->ntris : cberg->tpoints); cberg->dx0 = 1.0 / (1 << nsubdivs); cberg->heights = malloc(cberg->tpoints * sizeof(double)); cberg->norms = malloc(3 * cberg->tnorms * sizeof(double)); cberg->glx_context = init_GL(mi); cberg->motion_state = MOTION_AUTO; cberg->mspeed = 1.0; cberg->z = 0.5; cberg->fovy = 60.0; cberg->zNear = 0.5; cberg->zFar = 5.0; cberg->draw_elapsed = 1.0; glEnable(GL_DEPTH_TEST); glEnable(GL_BLEND); glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); glShadeModel((flat) ? GL_FLAT : GL_SMOOTH); # ifndef HAVE_JWZGLES /* #### glPolygonMode other than GL_FILL unimplemented */ glPolygonMode(GL_FRONT_AND_BACK, (MI_IS_WIREFRAME(mi)) ? GL_LINE : GL_FILL); # endif if (lit) { glEnable(GL_LIGHTING); glEnable(GL_LIGHT0); glEnable(GL_COLOR_MATERIAL); glLightModeli(GL_LIGHT_MODEL_TWO_SIDE, GL_TRUE); glColorMaterial(GL_FRONT_AND_BACK, GL_AMBIENT_AND_DIFFUSE); glEnable(GL_NORMALIZE); glEnable(GL_RESCALE_NORMAL); } cberg->color = select_color(cberg); reshape_crackberg(mi, MI_WIDTH(mi), MI_HEIGHT(mi)); } ENTRYPOINT void reshape_crackberg (ModeInfo *mi, int w, int h) { int h2; cberg_state *cberg = &cbergs[MI_SCREEN(mi)]; if (letterbox && (h2 = w * 9 / 16) < h) { glViewport(0, (h-h2)/2, w, h2); cberg->aspect = w/(double)h2; } else { glViewport (0, 0, w, h); cberg->aspect = w/(double)h; } glMatrixMode(GL_PROJECTION); glLoadIdentity(); gluPerspective(cberg->fovy, cberg->aspect, cberg->zNear, cberg->zFar); glMatrixMode(GL_MODELVIEW); } ENTRYPOINT Bool crackberg_handle_event (ModeInfo *mi, XEvent *ev) { cberg_state *cberg = &cbergs[MI_SCREEN(mi)]; KeySym keysym = 0; char c = 0; if (ev->xany.type == KeyPress || ev->xany.type == KeyRelease) XLookupString (&ev->xkey, &c, 1, &keysym, 0); if (ev->xany.type == KeyPress) { switch (keysym) { case XK_Left: cberg->motion_state |= MOTION_LROT; break; case XK_Prior: cberg->motion_state |= MOTION_LROT; break; case XK_Right: cberg->motion_state |= MOTION_RROT; break; case XK_Next: cberg->motion_state |= MOTION_RROT; break; case XK_Down: cberg->motion_state |= MOTION_BACK; break; case XK_Up: cberg->motion_state |= MOTION_FORW; break; case '1': cberg->motion_state |= MOTION_DEC; break; case '2': cberg->motion_state |= MOTION_INC; break; case 'a': cberg->motion_state |= MOTION_LEFT; break; case 'd': cberg->motion_state |= MOTION_RIGHT; break; case 's': cberg->motion_state |= MOTION_BACK; break; case 'w': cberg->motion_state |= MOTION_FORW; break; default: return False; } cberg->motion_state |= MOTION_MANUAL; } else if (ev->xany.type == KeyRelease) { #if 0 XEvent peek_ev; if (XPending(mi->dpy)) { XPeekEvent(mi->dpy, &peek_ev); if (peek_ev.type == KeyPress && peek_ev.xkey.keycode == ev->xkey.keycode && peek_ev.xkey.time - ev->xkey.time < 2) { XNextEvent(mi->dpy, &peek_ev); /* drop bullshit repeat events */ return False; } } #endif switch (keysym) { case XK_Left: cberg->motion_state &= ~MOTION_LROT; break; case XK_Prior: cberg->motion_state &= ~MOTION_LROT; break; case XK_Right: cberg->motion_state &= ~MOTION_RROT; break; case XK_Next: cberg->motion_state &= ~MOTION_RROT; break; case XK_Down: cberg->motion_state &= ~MOTION_BACK; break; case XK_Up: cberg->motion_state &= ~MOTION_FORW; break; case '1': cberg->motion_state &= ~MOTION_DEC; break; case '2': cberg->motion_state &= ~MOTION_INC; break; case 'a': cberg->motion_state &= ~MOTION_LEFT; break; case 'd': cberg->motion_state &= ~MOTION_RIGHT; break; case 's': cberg->motion_state &= ~MOTION_BACK; break; case 'w': cberg->motion_state &= ~MOTION_FORW; break; case ' ': if (cberg->motion_state == MOTION_MANUAL) cberg->motion_state = MOTION_AUTO; 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; { int rot = current_device_rotation(); int swap; while (rot <= -180) rot += 360; while (rot > 180) rot -= 360; if (rot > 135 || rot < -135) /* 180 */ dx = -dx, dy = -dy; else if (rot > 45) /* 90 */ swap = dx, dx = -dy, dy = swap; else if (rot < -45) /* 270 */ swap = dx, dx = dy, dy = -swap; } 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; } ENTRYPOINT void draw_crackberg (ModeInfo *mi) { cberg_state *cberg = &cbergs[MI_SCREEN(mi)]; struct timeval cur_frame_t; double cur_frame; static const float lpos[] = {2.0,0.0,-0.3,0.0}; if (!cberg->glx_context) /*XXX does this get externally tweaked? it kinda*/ return; /*XXX can't.. check it in crackberg_init*/ glXMakeCurrent(MI_DISPLAY(mi), MI_WINDOW(mi), *(cberg->glx_context)); gettimeofday(&cur_frame_t, NULL); cur_frame = cur_frame_t.tv_sec + cur_frame_t.tv_usec / 1.0E6; if ( cberg->prev_frame ) { /*not first run */ cberg->elapsed = cur_frame - cberg->prev_frame; 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 */ /* cberg->pitch */ /* cberg->roll */ cberg->yaw += cberg->dyaw * cberg->elapsed; cberg->draw_elapsed += cberg->elapsed; if (cberg->draw_elapsed >= 0.8) { cberg->draw_elapsed = 0.0; cberg->dx = drunken_rando(cberg->dx, 2.5, 0.8); cberg->dy = drunken_rando(cberg->dy, 2.5, 0.8); /* cberg->dz */ /* cberg->dpitch */ /* cberg->droll */ cberg->dyaw = drunken_rando(cberg->dyaw, 40.0, 8.0); } } else { double scale = cberg->elapsed * cberg->mspeed; if (cberg->motion_state & MOTION_BACK) { cberg->x -= cos(cberg->yaw * M_PI_180) * scale; cberg->y -= sin(cberg->yaw * M_PI_180) * scale; } if (cberg->motion_state & MOTION_FORW) { cberg->x += cos(cberg->yaw * M_PI_180) * scale; cberg->y += sin(cberg->yaw * M_PI_180) * scale; } if (cberg->motion_state & MOTION_LEFT) { cberg->x -= sin(cberg->yaw * M_PI_180) * scale; cberg->y += cos(cberg->yaw * M_PI_180) * scale; } if (cberg->motion_state & MOTION_RIGHT) { cberg->x += sin(cberg->yaw * M_PI_180) * scale; cberg->y -= cos(cberg->yaw * M_PI_180) * scale; } if (cberg->motion_state & MOTION_LROT) cberg->yaw += 45 * scale; if (cberg->motion_state & MOTION_RROT) cberg->yaw -= 45 * scale; if (cberg->motion_state & MOTION_DEC) cberg->mspeed /= pow(MSPEED_SCALE, cberg->draw_elapsed); if (cberg->motion_state & MOTION_INC) cberg->mspeed *= pow(MSPEED_SCALE, cberg->draw_elapsed); } } cberg->prev_frame = cur_frame; mark_visible(cberg); triles_update_state(&(cberg->trile_head), cberg); glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glLoadIdentity(); glRotatef(current_device_rotation(), 0, 0, 1); gluLookAt(0,0,0, 1,0,0, 0,0,1); glLightfv(GL_LIGHT0, GL_POSITION, lpos); /*glRotated(cberg->roll, 1,0,0); / * XXX blah broken and unused for now..* / glRotated(cberg->pitch, 0,1,0); */ glRotated(-cberg->yaw, 0,0,1); /* camera sees ->yaw over */ glTranslated(-cberg->x, -cberg->y, -cberg->z); mi->polygon_count = cberg->ntris * triles_foreach(cberg->trile_head, trile_draw,(void *) cberg); if (mi->fps_p) do_fps(mi); #ifdef DEBUG glBegin(GL_LINES); glColor3f(1.0,0.0,0.0); glVertex3d(x_shit, y_shit, 0.0); glVertex3d(x_shit, y_shit, 1.0); glEnd(); #endif glFinish(); glXSwapBuffers(MI_DISPLAY(mi), MI_WINDOW(mi)); } /* uh */ ENTRYPOINT void release_crackberg (ModeInfo *mi) { if (cbergs) { int screen; for (screen = 0; screen < MI_NUM_SCREENS(mi); screen++) { cberg_state *cberg = &cbergs[screen]; if (cberg->norms) free(cberg->norms); free(cberg->heights); } free (cbergs); cbergs = 0; } } XSCREENSAVER_MODULE ("Crackberg", crackberg) #endif /* USE_GL */ xscreensaver-5.36/hacks/glx/glhanoi.c000664 000767 000024 00000161415 12710313207 017614 0ustar00jwzstaff000000 000000 /* -*- Mode: C; tab-width: 4 -*- */ /* glhanoi, Copyright (c) 2005, 2009 Dave Atkinson * except noise function code Copyright (c) 2002 Ken Perlin * Modified by Lars Huttar (c) 2010, to generalize to 4 or more poles * * 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. */ #include #include "rotator.h" #define DEF_LIGHT "True" #define DEF_FOG "False" #define DEF_TEXTURE "True" #define DEF_POLES "0" /* choose random value */ #define DEF_SPEED "1" #define DEF_TRAILS "2" #define DEFAULTS "*delay: 15000\n" \ "*count: 0\n" \ "*showFPS: False\n" \ "*wireframe: False\n" # define refresh_glhanoi 0 /* polygon resolution of poles and disks */ #define NSLICE 32 #define NLOOPS 1 /* How long to wait at start and finish (seconds). */ #define START_DURATION 1.0 #define FINISH_DURATION 1.0 #define BASE_LENGTH 30.0 #define BOARD_SQUARES 8 /* Don't draw trail lines till they're this old (sec). Helps trails not be "attached" to the disks. */ #define TRAIL_START_DELAY 0.1 #define MAX_CAMERA_RADIUS 250.0 #define MIN_CAMERA_RADIUS 75.0 #define MARBLE_SCALE 1.01 #undef BELLRAND /* Return a double precision number in [0...n], with bell curve distribution. */ #define BELLRAND(n) ((frand((n)) + frand((n)) + frand((n))) / 3) enum { MARBLE_TEXURE, N_TEXTURES }; #define MARBLE_TEXTURE_SIZE 256 #undef countof #define countof(x) (sizeof((x))/sizeof((*x))) #include #include "xlockmore.h" #ifdef USE_GL /* whole file */ typedef struct timeval glhtime; static double getTime(void) { struct timeval t; #ifdef GETTIMEOFDAY_TWO_ARGS gettimeofday(&t, NULL); #else /* !GETTIMEOFDAY_TWO_ARGS */ gettimeofday(&t); #endif /* !GETTIMEOFDAY_TWO_ARGS */ return t.tv_sec + t.tv_usec / 1000000.0; } typedef enum { START, MOVE_DISK, MOVE_FINISHED, FINISHED, MONEY_SHOT, INVALID = -1 } State; typedef struct { int id; GLuint displayList; GLfloat position[3]; GLfloat rotation[3]; GLfloat color[4]; GLfloat base0; GLfloat base1; GLfloat height; GLfloat xmin, xmax, ymin, zmin, zmax; GLfloat u1, u2; GLfloat t1, t2; GLfloat ucostheta, usintheta; GLfloat dx, dz; GLdouble rotAngle; /* degree of "flipping" so far, during travel */ GLdouble phi; /* angle of motion in xz plane */ GLfloat speed; int polys; } Disk; typedef struct { Disk **data; int count; int size; GLfloat position[3]; } Pole; /* A SubProblem is a recursive subdivision of the problem, and means "Move nDisks disks from src pole to dst pole, using the poles indicated in 'available'." */ typedef struct { int nDisks; int src, dst; unsigned long available; /* a bitmask of poles that have no smaller disks on them */ } SubProblem; typedef struct { GLfloat position[3]; double startTime, endTime; Bool isEnd; } TrailPoint; typedef struct { GLXContext *glx_context; State state; Bool wire; Bool fog; Bool light; Bool layoutLinear; GLfloat trailDuration; double startTime; double lastTime; double duration; int numberOfDisks; int numberOfPoles; int numberOfMoves; int maxDiskIdx; int magicNumber; Disk *currentDisk; int move; /* src, tmp, dst: index of pole that is source / storage / destination for current move */ int src; int tmp; int dst; int oldsrc; int oldtmp; int olddst; GLfloat speed; /* coefficient for how fast the disks move */ SubProblem *solveStack; int solveStackSize, solveStackIdx; Pole *pole; float boardSize; float baseLength; float baseWidth; float baseHeight; float poleRadius; float poleHeight; float poleOffset; float poleDist; /* distance of poles from center, for round layout */ float diskHeight; float maxDiskRadius; float *diskPos; /* pre-computed disk positions on rods */ Disk *disk; GLint floorList; GLint baseList; GLint poleList; int floorpolys, basepolys, polepolys; int trailQSize; TrailPoint *trailQ; int trailQFront, trailQBack; GLfloat camera[3]; GLfloat centre[3]; rotator *the_rotator; Bool button_down_p; Bool texture; GLuint textureNames[N_TEXTURES]; int drag_x; int drag_y; int noise_initted; int p[512]; } glhcfg; static glhcfg *glhanoi_cfg = NULL; static Bool fog; static Bool light; static Bool texture; static GLfloat trails; static int poles; static GLfloat speed; static XrmOptionDescRec opts[] = { {"-light", ".glhanoi.light", XrmoptionNoArg, "true"}, {"+light", ".glhanoi.light", XrmoptionNoArg, "false"}, {"-fog", ".glhanoi.fog", XrmoptionNoArg, "true"}, {"+fog", ".glhanoi.fog", XrmoptionNoArg, "false"}, {"-texture", ".glhanoi.texture", XrmoptionNoArg, "true"}, {"+texture", ".glhanoi.texture", XrmoptionNoArg, "false"}, {"-trails", ".glhanoi.trails", XrmoptionSepArg, 0}, {"-poles", ".glhanoi.poles", XrmoptionSepArg, 0 }, {"-speed", ".glhanoi.speed", XrmoptionSepArg, 0 } }; static argtype vars[] = { {&light, "light", "Light", DEF_LIGHT, t_Bool}, {&fog, "fog", "Fog", DEF_FOG, t_Bool}, {&texture, "texture", "Texture", DEF_TEXTURE, t_Bool}, {&trails, "trails", "Trails", DEF_TRAILS, t_Float}, {&poles, "poles", "Poles", DEF_POLES, t_Int}, {&speed, "speed", "Speed", DEF_SPEED, t_Float} }; static OptionStruct desc[] = { {"+/-light", "whether to light the scene"}, {"+/-fog", "whether to apply fog to the scene"}, {"+/-texture", "whether to apply texture to the scene"}, {"-trails t", "how long of disk trails to show (sec.)"}, {"-poles r", "number of poles to move disks between"}, {"-speed s", "speed multiplier"} }; ENTRYPOINT ModeSpecOpt glhanoi_opts = { countof(opts), opts, countof(vars), vars, desc }; #ifdef USE_MODULES ModStruct glhanoi_description = { "glhanoi", "init_glhanoi", "draw_glhanoi", "release_glhanoi", "draw_glhanoi", "init_glhanoi", NULL, &glhanoi_opts, 1000, 1, 2, 1, 4, 1.0, "", "Towers of Hanoi", 0, NULL }; #endif static const GLfloat cBlack[] = { 0.0, 0.0, 0.0, 1.0 }; static const GLfloat cWhite[] = { 1.0, 1.0, 1.0, 1.0 }; static const GLfloat poleColor[] = { 0.545, 0.137, 0.137 }; static const GLfloat baseColor[] = { 0.34, 0.34, 0.48 }; /* static const GLfloat baseColor[] = { 0.545, 0.137, 0.137 }; */ static const GLfloat fogcolor[] = { 0.5, 0.5, 0.5 }; static GLfloat trailColor[] = { 1.0, 1.0, 1.0, 0.5 }; static const float left[] = { 1.0, 0.0, 0.0 }; static const float up[] = { 0.0, 1.0, 0.0 }; static const float front[] = { 0.0, 0.0, 1.0 }; static const float right[] = { -1.0, 0.0, 0.0 }; static const float down[] = { 0.0, -1.0, 0.0 }; static const float back[] = { 0.0, 0.0, -1.0 }; static const GLfloat pos0[4] = { 50.0, 50.0, 50.0, 0.0 }; static const GLfloat amb0[4] = { 0.0, 0.0, 0.0, 1.0 }; static const GLfloat dif0[4] = { 1.0, 1.0, 1.0, 1.0 }; static const GLfloat spc0[4] = { 0.0, 1.0, 1.0, 1.0 }; static const GLfloat pos1[4] = { -50.0, 50.0, -50.0, 0.0 }; static const GLfloat amb1[4] = { 0.0, 0.0, 0.0, 1.0 }; static const GLfloat dif1[4] = { 1.0, 1.0, 1.0, 1.0 }; static const GLfloat spc1[4] = { 1.0, 1.0, 1.0, 1.0 }; static float g = 3.0 * 9.80665; /* hmm, looks like we need more gravity, Scotty... */ static void checkAllocAndExit(Bool item, char *descr) { if (!item) { fprintf(stderr, "%s: unable to allocate memory for %s\n", progname, descr); exit(EXIT_FAILURE); } } #define DOPUSH(X, Y) (((X)->count) >= ((X)->size)) ? NULL : ((X)->data[(X)->count++] = (Y)) #define DOPOP(X) (X)->count <= 0 ? NULL : ((X)->data[--((X)->count)]) /* push disk d onto pole idx */ static Disk *push(glhcfg *glhanoi, int idx, Disk * d) { return DOPUSH(&glhanoi->pole[idx], d); } /* pop the top disk from pole idx */ static Disk *pop(glhcfg *glhanoi, int idx) { return DOPOP(&glhanoi->pole[idx]); } static inline void swap(int *x, int *y) { *x = *x ^ *y; *y = *x ^ *y; *x = *x ^ *y; } /* * magic - it's magic... * Return 1 if the number of trailing zeroes on i is even, unless i is 1 or 0. */ static int magic(int i) { int count = 0; if(i <= 1) return 0; while((i & 0x01) == 0) { i >>= 1; count++; } return count % 2 == 0; } static float distance(float *p0, float *p1) { float x, y, z; x = p1[0] - p0[0]; y = p1[1] - p0[1]; z = p1[2] - p0[2]; return (float)sqrt(x * x + y * y + z * z); } /* What is this for? = c / (a b - 0.25 (a^2 + 2 a b + b^2) ) = c / (-0.25 (a^2 - 2 a b + b^2) ) = c / (-0.25 ((a - b)(a - b))) = -4 c / (a - b)^2 static GLfloat A(GLfloat a, GLfloat b, GLfloat c) { GLfloat sum = a + b; return c / (a * b - 0.25 * sum * sum); } */ static void moveSetup(glhcfg *glhanoi, Disk * disk) { float h, ymax; float u; int src = glhanoi->src; int dst = glhanoi->dst; GLfloat theta; GLfloat sintheta, costheta; double dh; double dx, dz; /* total x and z distances from src to dst */ Pole *poleSrc, *poleDst; poleSrc = &(glhanoi->pole[src]); poleDst = &(glhanoi->pole[dst]); disk->xmin = poleSrc->position[0]; /* glhanoi->poleOffset * (src - (glhanoi->numberOfPoles - 1.0f) * 0.5); */ disk->xmax = poleDst->position[0]; /* disk->xmax = glhanoi->poleOffset * (dst - (glhanoi->numberOfPoles - 1.0f) * 0.5); */ disk->ymin = glhanoi->poleHeight; disk->zmin = poleSrc->position[2]; disk->zmax = poleDst->position[2]; dx = disk->xmax - disk->xmin; dz = disk->zmax - disk->zmin; if(glhanoi->state != FINISHED) { double xxx = ((dx < 0) ? 180.0 : -180.0); if(random() % 6 == 0) { disk->rotAngle = xxx * (2 - 2 * random() % 2) * (random() % 3 + 1); } else { disk->rotAngle = xxx; } if(random() % 4 == 0) { /* Backflip */ disk->rotAngle = -disk->rotAngle; } } else { disk->rotAngle = -180.0; } disk->base0 = glhanoi->diskPos[poleSrc->count]; disk->base1 = (glhanoi->state == FINISHED) ? disk->base0 : glhanoi->diskPos[poleDst->count]; /* horizontal distance to travel? */ /* was: absx = sqrt(disk->xmax - disk->xmin); */ dh = distance(poleSrc->position, poleDst->position); /* absx = sqrt(dh); */ ymax = glhanoi->poleHeight + dh; if(glhanoi->state == FINISHED) { ymax += dh * (double)(glhanoi->numberOfDisks - disk->id); } h = ymax - disk->ymin; /* A(a, b, c) = -4 c / (a - b)^2 */ /* theta = atan(4 h / (b - a)) */ theta = atan(4 * h / dh); if(theta < 0.0) theta += M_PI; costheta = cos(theta); sintheta = sin(theta); u = (float) sqrt(fabs (-g / /* (2.0 * A(disk->xmin, disk->xmax, h) * costheta * costheta))); */ (2.0 * -4 * h / (dh * dh) * costheta * costheta))); disk->usintheta = u * sintheta; disk->ucostheta = u * costheta; /* Not to be confused: disk->dx is the per-time-unit portion of dx */ disk->dx = disk->ucostheta * dx / dh; disk->dz = disk->ucostheta * dz / dh; disk->t1 = (-u + sqrt(u * u + 2.0 * g * fabs(disk->ymin - disk->base0))) / g; disk->u1 = u + g * disk->t1; disk->t2 = 2.0 * disk->usintheta / g; disk->u2 = disk->usintheta - g * disk->t2; /* Compute direction of travel, in the XZ plane. */ disk->phi = atan(dz / dx); disk->phi *= 180.0 / M_PI; /* convert radians to degrees */ } /* For debugging: show a value as a string of ones and zeroes static const char *byteToBinary(int x) { static char b[9]; int i, z; for (z = 128, i = 0; z > 0; z >>= 1, i++) { b[i] = ((x & z) == z) ? '1' : '0'; } b[i] = '\0'; return b; } */ static void pushMove(glhcfg *glhanoi, int n, int src, int dst, int avail) { SubProblem *sp = &(glhanoi->solveStack[glhanoi->solveStackIdx++]); if (glhanoi->solveStackIdx > glhanoi->solveStackSize) { fprintf(stderr, "solveStack overflow: pushed index %d: %d from %d to %d, using %d\n", glhanoi->solveStackIdx, n, src, dst, avail); exit(EXIT_FAILURE); } sp->nDisks = n; sp->src = src; sp->dst = dst; sp->available = avail & ~((unsigned long)(1 << src)) & ~((unsigned long)(1 << dst)); /* fprintf(stderr, "Debug: > pushed solveStack %d: %d from %d to %d, using %s\n", glhanoi->solveStackIdx - 1, n, src, dst, byteToBinary(sp->available)); */ } static Bool solveStackEmpty(glhcfg *glhanoi) { return (glhanoi->solveStackIdx < 1); } static SubProblem *popMove(glhcfg *glhanoi) { SubProblem *sp; if (solveStackEmpty(glhanoi)) return (SubProblem *)NULL; sp = &(glhanoi->solveStack[--glhanoi->solveStackIdx]); /* fprintf(stderr, "Debug: < popped solveStack %d: %d from %d to %d, using %s\n", glhanoi->solveStackIdx, sp->nDisks, sp->src, sp->dst, byteToBinary(sp->available)); */ return sp; } /* Return number of bits set in b */ static int numBits(unsigned long b) { int count = 0; while (b) { count += b & 0x1u; b >>= 1; } return count; } /* Return index (power of 2) of least significant 1 bit. */ static int bitScan(unsigned long b) { int count; for (count = 0; b; count++, b >>= 1) { if (b & 0x1u) return count; } return -1; } /* A bit pattern representing all poles */ #define ALL_POLES ((1 << glhanoi->numberOfPoles) - 1) #define REMOVE_BIT(a, b) ((a) & ~(1 << (b))) #define ADD_BIT(a, b) ((a) | (1 << (b))) static void makeMove(glhcfg *glhanoi) { if (glhanoi->numberOfPoles == 3) { int fudge = glhanoi->move + 2; int magicNumber = magic(fudge); glhanoi->currentDisk = pop(glhanoi, glhanoi->src); moveSetup(glhanoi, glhanoi->currentDisk); push(glhanoi, glhanoi->dst, glhanoi->currentDisk); fudge = fudge % 2; if(fudge == 1 || magicNumber) { swap(&glhanoi->src, &glhanoi->tmp); } if(fudge == 0 || glhanoi->magicNumber) { swap(&glhanoi->dst, &glhanoi->tmp); } glhanoi->magicNumber = magicNumber; } else { SubProblem sp; int tmp = 0; if (glhanoi->move == 0) { /* Initialize the solution stack. Original problem: move all disks from pole 0 to furthest pole, using all other poles. */ pushMove(glhanoi, glhanoi->numberOfDisks, 0, glhanoi->numberOfPoles - 1, REMOVE_BIT(REMOVE_BIT(ALL_POLES, 0), glhanoi->numberOfPoles - 1)); } while (!solveStackEmpty(glhanoi)) { int k, numAvail; sp = *popMove(glhanoi); if (sp.nDisks == 1) { /* We have a single, concrete move to do. */ /* moveSetup uses glhanoi->src, dst. */ glhanoi->src = sp.src; glhanoi->dst = sp.dst; glhanoi->tmp = tmp; /* Probably unnecessary */ glhanoi->currentDisk = pop(glhanoi, sp.src); moveSetup(glhanoi, glhanoi->currentDisk); push(glhanoi, sp.dst, glhanoi->currentDisk); return; } else { /* Divide and conquer, using Frame-Stewart algorithm, until we get to base case */ if (sp.nDisks == 1) break; numAvail = numBits(sp.available); if (numAvail < 2) k = sp.nDisks - 1; else if(numAvail >= sp.nDisks - 2) k = 1; /* heuristic for optimal k: sqrt(2n) (see http://www.cs.wm.edu/~pkstoc/boca.pdf) */ else k = (int)(sqrt(2 * sp.nDisks)); if (k >= sp.nDisks) k = sp.nDisks - 1; else if (k < 1) k = 1; tmp = bitScan(sp.available); /* fprintf(stderr, "Debug: k is %d, tmp is %d\n", k, tmp); */ if (tmp == -1) { fprintf(stderr, "Error: n > 1 (%d) and no poles available\n", sp.nDisks); } /* Push on moves in reverse order, since this is a stack. */ pushMove(glhanoi, k, tmp, sp.dst, REMOVE_BIT(ADD_BIT(sp.available, sp.src), tmp)); pushMove(glhanoi, sp.nDisks - k, sp.src, sp.dst, REMOVE_BIT(sp.available, tmp)); pushMove(glhanoi, k, sp.src, tmp, REMOVE_BIT(ADD_BIT(sp.available, sp.dst), tmp)); /* Repeat until we've found a move we can make. */ } } } } static double lerp(double alpha, double start, double end) { return start + alpha * (end - start); } static void upfunc(GLdouble t, Disk * d) { d->position[0] = d->xmin; d->position[1] = d->base0 + (d->u1 - 0.5 * g * t) * t; d->position[2] = d->zmin; d->rotation[1] = 0.0; } static void parafunc(GLdouble t, Disk * d) { /* ##was: d->position[0] = d->xmin + d->ucostheta * t; */ d->position[0] = d->xmin + d->dx * t; d->position[2] = d->zmin + d->dz * t; d->position[1] = d->ymin + (d->usintheta - 0.5 * g * t) * t; d->rotation[1] = d->rotAngle * t / d->t2; /* d->rotAngle * (d->position[0] - d->xmin) / (d->xmax - d->xmin); */ } static void downfunc(GLdouble t, Disk * d) { d->position[0] = d->xmax; d->position[1] = d->ymin + (d->u2 - 0.5 * g * t) * t; d->position[2] = d->zmax; d->rotation[1] = 0.0; } #define normalizeQ(i) ((i) >= glhanoi->trailQSize ? (i) - glhanoi->trailQSize : (i)) #define normalizeQNeg(i) ((i) < 0 ? (i) + glhanoi->trailQSize : (i)) /* Add trail point at position posn at time t onto back of trail queue. Removes old trails if necessary to make room. */ static void enQTrail(glhcfg *glhanoi, GLfloat *posn) { if (glhanoi->trailQSize && glhanoi->state != MONEY_SHOT) { TrailPoint *tp = &(glhanoi->trailQ[glhanoi->trailQBack]); double t = getTime(); tp->position[0] = posn[0]; tp->position[1] = posn[1] + glhanoi->diskHeight; /* Slight jitter to prevent clashing with other trails */ tp->position[2] = posn[2] + (glhanoi->move % 23) * 0.01; tp->startTime = t + TRAIL_START_DELAY; tp->endTime = t + TRAIL_START_DELAY + glhanoi->trailDuration; tp->isEnd = False; /* Update queue back/front indices */ glhanoi->trailQBack = normalizeQ(glhanoi->trailQBack + 1); if (glhanoi->trailQBack == glhanoi->trailQFront) glhanoi->trailQFront = normalizeQ(glhanoi->trailQFront + 1); } } /* Mark last trailpoint in queue as the end of a trail. */ /* was: #define endTrail(glh) ((glh)->trailQ[(glh)->trailQBack].isEnd = True) */ static void endTrail(glhcfg *glhanoi) { if (glhanoi->trailQSize) glhanoi->trailQ[normalizeQNeg(glhanoi->trailQBack - 1)].isEnd = True; } /* Update disk d's position and rotation based on time t. Returns true iff move is finished. */ static Bool computePosition(glhcfg *glhanoi, GLfloat t, Disk * d) { Bool finished = False; if(t < d->t1) { upfunc(t, d); } else if(t < d->t1 + d->t2) { parafunc(t - d->t1, d); enQTrail(glhanoi, d->position); } else { downfunc(t - d->t1 - d->t2, d); if(d->position[1] <= d->base1) { d->position[1] = d->base1; finished = True; endTrail(glhanoi); } } return finished; } static void updateView(glhcfg *glhanoi) { double longitude, latitude, radius; double a, b, c, A, B; get_position(glhanoi->the_rotator, NULL, NULL, &radius, !glhanoi->button_down_p); get_rotation(glhanoi->the_rotator, &longitude, &latitude, NULL, !glhanoi->button_down_p); longitude += glhanoi->camera[0]; latitude += glhanoi->camera[1]; radius += glhanoi->camera[2]; /* FUTURE: tweak this to be smooth: */ longitude = longitude - floor(longitude); latitude = latitude - floor(latitude); radius = radius - floor(radius); if(latitude > 0.5) { latitude = 1.0 - latitude; } if(radius > 0.5) { radius = 1.0 - radius; } b = glhanoi->centre[1]; c = (MIN_CAMERA_RADIUS + radius * (MAX_CAMERA_RADIUS - MIN_CAMERA_RADIUS)); A = M_PI / 4.0 * (1.0 - latitude); a = sqrt(b * b + c * c - 2.0 * b * c * cos(A)); B = asin(sin(A) * b / a); glRotatef(-B * 180 / M_PI, 1.0, 0.0, 0.0); glTranslatef(0.0f, 0.0f, -(MIN_CAMERA_RADIUS + radius * (MAX_CAMERA_RADIUS - MIN_CAMERA_RADIUS))); glRotatef(longitude * 360.0, 0.0f, 1.0f, 0.0f); glRotatef(latitude * 180.0, cos(longitude * 2.0 * M_PI), 0.0, sin(longitude * 2.0 * M_PI)); } static void changeState(glhcfg *glhanoi, State state) { glhanoi->state = state; glhanoi->startTime = getTime(); } static Bool finishedHanoi(glhcfg *glhanoi) { /* use different criteria depending on algorithm */ return (glhanoi->numberOfPoles == 3 ? glhanoi->move >= glhanoi->numberOfMoves : solveStackEmpty(glhanoi)); } static void update_glhanoi(glhcfg *glhanoi) { double t = getTime() - glhanoi->startTime; int i; Bool done; switch (glhanoi->state) { case START: if(t < glhanoi->duration) { break; } glhanoi->move = 0; if(glhanoi->numberOfDisks % 2 == 0) { swap(&glhanoi->tmp, &glhanoi->dst); } glhanoi->magicNumber = 1; makeMove(glhanoi); changeState(glhanoi, MOVE_DISK); break; case MOVE_DISK: if(computePosition(glhanoi, t * glhanoi->currentDisk->speed, glhanoi->currentDisk)) { changeState(glhanoi, MOVE_FINISHED); } break; case MOVE_FINISHED: ++glhanoi->move; if(!finishedHanoi(glhanoi)) { makeMove(glhanoi); changeState(glhanoi, MOVE_DISK); } else { glhanoi->duration = FINISH_DURATION; changeState(glhanoi, FINISHED); } break; case FINISHED: if (t < glhanoi->duration) break; glhanoi->src = glhanoi->olddst; glhanoi->dst = glhanoi->oldsrc; for(i = 0; i < glhanoi->numberOfDisks; ++i) { Disk *disk = pop(glhanoi, glhanoi->src); assert(disk != NULL); moveSetup(glhanoi, disk); } for(i = glhanoi->maxDiskIdx; i >= 0; --i) { push(glhanoi, glhanoi->dst, &glhanoi->disk[i]); } changeState(glhanoi, MONEY_SHOT); break; case MONEY_SHOT: done = True; for(i = glhanoi->maxDiskIdx; i >= 0; --i) { double delay = 0.25 * i; int finished; if(t - delay < 0) { done = False; continue; } finished = computePosition(glhanoi, t - delay, &glhanoi->disk[i]); glhanoi->disk[i].rotation[1] = 0.0; if(!finished) { done = False; } } if(done) { glhanoi->src = glhanoi->oldsrc; glhanoi->tmp = glhanoi->oldtmp; glhanoi->dst = glhanoi->olddst; changeState(glhanoi, START); } break; case INVALID: default: fprintf(stderr, "Invalid state\n"); break; } } static void HSVtoRGBf(GLfloat h, GLfloat s, GLfloat v, GLfloat * r, GLfloat * g, GLfloat * b) { if(s == 0.0) { *r = v; *g = v; *b = v; } else { GLfloat i, f, p, q, t; if(h >= 360.0) { h = 0.0; } h /= 60.0; /* h now in [0,6). */ i = floor((double)h); /* i now largest integer <= h */ f = h - i; /* f is no fractional part of h */ p = v * (1.0 - s); q = v * (1.0 - (s * f)); t = v * (1.0 - (s * (1.0 - f))); switch ((int)i) { case 0: *r = v; *g = t; *b = p; break; case 1: *r = q; *g = v; *b = p; break; case 2: *r = p; *g = v; *b = t; break; case 3: *r = p; *g = q; *b = v; break; case 4: *r = t; *g = p; *b = v; break; case 5: *r = v; *g = p; *b = q; break; } } } static void HSVtoRGBv(GLfloat * hsv, GLfloat * rgb) { HSVtoRGBf(hsv[0], hsv[1], hsv[2], &rgb[0], &rgb[1], &rgb[2]); } static void setMaterial(const GLfloat color[3], const GLfloat hlite[3], int shininess) { glColor3fv(color); glMaterialfv(GL_FRONT, GL_SPECULAR, hlite); glMaterialfv(GL_FRONT, GL_AMBIENT_AND_DIFFUSE, color); glMateriali(GL_FRONT, GL_SHININESS, shininess); /* [0,128] */ } /* * drawTube: I know all this stuff is available in gluQuadrics * but I'd originally intended to texture the poles with a 3D wood * texture, but I was having difficulty getting wood... what? Why * are all you Amercians laughing..? Anyway, I don't know if enough * people's hardware supports 3D textures, so I didn't bother (xorg * ATI server doesn't :-( ) */ static int drawTube(GLdouble bottomRadius, GLdouble topRadius, GLdouble bottomThickness, GLdouble topThickness, GLdouble height, GLuint nSlice, GLuint nLoop) { int polys = 0; GLfloat y; GLfloat *cosCache = malloc(sizeof(GLfloat) * nSlice); GLfloat *sinCache = malloc(sizeof(GLfloat) * nSlice); GLint slice; GLuint loop; GLint lastSlice = nSlice - 1; GLfloat radius; GLfloat innerRadius; if(bottomThickness > bottomRadius) { bottomThickness = bottomRadius; } if(topThickness > topRadius) { topThickness = topRadius; } if(bottomThickness < 0.0) { bottomThickness = 0.0; } if(topThickness < 0.0) { topThickness = 0.0; } /* if(topRadius >= bottomRadius) { maxRadius = topRadius; } else { maxRadius = bottomRadius; } */ /* bottom */ y = 0.0; radius = bottomRadius; innerRadius = bottomRadius - bottomThickness; /* innerTexCoordSize = texCoordSize * innerRadius / maxRadius; */ /* outerTexCoordSize = texCoordSize * radius / maxRadius; */ /* yTexCoord = minTexCoord; */ glBegin(GL_QUAD_STRIP); glNormal3f(0.0, -1.0, 0.0); /* glTexCoord3f(midTexCoord, yTexCoord, midTexCoord + innerTexCoordSize); */ glVertex3f(0.0, y, innerRadius); /* glTexCoord3f(midTexCoord, yTexCoord, midTexCoord + outerTexCoordSize); */ glVertex3f(0.0, y, radius); for(slice = lastSlice; slice >= 0; --slice) { GLfloat theta = 2.0 * M_PI * (double)slice / nSlice; cosCache[slice] = cos(theta); sinCache[slice] = sin(theta); /* glTexCoord3f(midTexCoord + sinCache[slice] * innerTexCoordSize, */ /* yTexCoord, */ /* midTexCoord + cosCache[slice] * innerTexCoordSize); */ glVertex3f(innerRadius * sinCache[slice], y, innerRadius * cosCache[slice]); /* glTexCoord3f(midTexCoord + sinCache[slice] * outerTexCoordSize, */ /* yTexCoord, */ /* midTexCoord + cosCache[slice] * outerTexCoordSize); */ glVertex3f(radius * sinCache[slice], y, radius * cosCache[slice]); polys++; } glEnd(); /* middle */ for(loop = 0; loop < nLoop; ++loop) { GLfloat lowerRadius = bottomRadius + (topRadius - bottomRadius) * (float)loop / (nLoop); GLfloat upperRadius = bottomRadius + (topRadius - bottomRadius) * (float)(loop + 1) / (nLoop); GLfloat lowerY = height * (float)loop / (nLoop); GLfloat upperY = height * (float)(loop + 1) / (nLoop); GLfloat factor = (topRadius - topThickness) - (bottomRadius - bottomThickness); /* outside */ glBegin(GL_QUAD_STRIP); for(slice = 0; slice < nSlice; ++slice) { glNormal3f(sinCache[slice], 0.0, cosCache[slice]); glVertex3f(upperRadius * sinCache[slice], upperY, upperRadius * cosCache[slice]); glVertex3f(lowerRadius * sinCache[slice], lowerY, lowerRadius * cosCache[slice]); polys++; } glNormal3f(0.0, 0.0, 1.0); glVertex3f(0.0, upperY, upperRadius); glVertex3f(0.0, lowerY, lowerRadius); polys++; glEnd(); /* inside */ lowerRadius = bottomRadius - bottomThickness + factor * (float)loop / (nLoop); upperRadius = bottomRadius - bottomThickness + factor * (float)(loop + 1) / (nLoop); glBegin(GL_QUAD_STRIP); glNormal3f(0.0, 0.0, -1.0); glVertex3f(0.0, upperY, upperRadius); glVertex3f(0.0, lowerY, lowerRadius); for(slice = lastSlice; slice >= 0; --slice) { glNormal3f(-sinCache[slice], 0.0, -cosCache[slice]); glVertex3f(upperRadius * sinCache[slice], upperY, upperRadius * cosCache[slice]); glVertex3f(lowerRadius * sinCache[slice], lowerY, lowerRadius * cosCache[slice]); polys++; } glEnd(); } /* top */ y = height; radius = topRadius; innerRadius = topRadius - topThickness; glBegin(GL_QUAD_STRIP); glNormal3f(0.0, 1.0, 0.0); for(slice = 0; slice < nSlice; ++slice) { glVertex3f(innerRadius * sinCache[slice], y, innerRadius * cosCache[slice]); glVertex3f(radius * sinCache[slice], y, radius * cosCache[slice]); polys++; } glVertex3f(0.0, y, innerRadius); glVertex3f(0.0, y, radius); glEnd(); return polys; } static int drawPole(GLfloat radius, GLfloat length) { return drawTube(radius, radius, radius, radius, length, NSLICE, NLOOPS); } static int drawDisk3D(GLdouble inner_radius, GLdouble outer_radius, GLdouble height) { return drawTube(outer_radius, outer_radius, outer_radius - inner_radius, outer_radius - inner_radius, height, NSLICE, NLOOPS); } /* used for drawing base */ static int drawCuboid(GLfloat length, GLfloat width, GLfloat height) { GLfloat xmin = -length / 2.0f; GLfloat xmax = length / 2.0f; GLfloat zmin = -width / 2.0f; GLfloat zmax = width / 2.0f; GLfloat ymin = 0.0f; GLfloat ymax = height; int polys = 0; glBegin(GL_QUADS); /* front */ glNormal3fv(front); glVertex3f(xmin, ymin, zmax); /* 0 */ glVertex3f(xmax, ymin, zmax); /* 1 */ glVertex3f(xmax, ymax, zmax); /* 2 */ glVertex3f(xmin, ymax, zmax); /* 3 */ polys++; /* right */ glNormal3fv(right); glVertex3f(xmax, ymin, zmax); /* 1 */ glVertex3f(xmax, ymin, zmin); /* 5 */ glVertex3f(xmax, ymax, zmin); /* 6 */ glVertex3f(xmax, ymax, zmax); /* 2 */ polys++; /* back */ glNormal3fv(back); glVertex3f(xmax, ymin, zmin); /* 5 */ glVertex3f(xmin, ymin, zmin); /* 4 */ glVertex3f(xmin, ymax, zmin); /* 7 */ glVertex3f(xmax, ymax, zmin); /* 6 */ polys++; /* left */ glNormal3fv(left); glVertex3f(xmin, ymin, zmin); /* 4 */ glVertex3f(xmin, ymin, zmax); /* 0 */ glVertex3f(xmin, ymax, zmax); /* 3 */ glVertex3f(xmin, ymax, zmin); /* 7 */ polys++; /* top */ glNormal3fv(up); glVertex3f(xmin, ymax, zmax); /* 3 */ glVertex3f(xmax, ymax, zmax); /* 2 */ glVertex3f(xmax, ymax, zmin); /* 6 */ glVertex3f(xmin, ymax, zmin); /* 7 */ polys++; /* bottom */ glNormal3fv(down); glVertex3f(xmin, ymin, zmin); /* 4 */ glVertex3f(xmax, ymin, zmin); /* 5 */ glVertex3f(xmax, ymin, zmax); /* 1 */ glVertex3f(xmin, ymin, zmax); /* 0 */ polys++; glEnd(); return polys; } /* Set normal vector in xz plane, based on rotation around center. */ static void setNormalV(glhcfg *glhanoi, GLfloat theta, int y1, int y2, int r1) { if (y1 == y2) /* up/down */ glNormal3f(0.0, y1 ? 1.0 : -1.0, 0.0); else if (!r1) /* inward */ glNormal3f(-cos(theta), 0.0, -sin(theta)); else /* outward */ glNormal3f(cos(theta), 0.0, sin(theta)); } /* y1, r1, y2, r2 are indices into y, r, beg, end */ static int drawBaseStrip(glhcfg *glhanoi, int y1, int r1, int y2, int r2, GLfloat y[2], GLfloat r[2], GLfloat beg[2][2], GLfloat end[2][2]) { int i; GLfloat theta, costh, sinth, x[2], z[2]; GLfloat theta1 = (M_PI * 2) / (glhanoi->numberOfPoles + 1); glBegin(GL_QUAD_STRIP); /* beginning edge */ glVertex3f(beg[r1][0], y[y1], beg[r1][1]); glVertex3f(beg[r2][0], y[y2], beg[r2][1]); setNormalV(glhanoi, theta1, y1, y2, r1); for (i = 1; i < glhanoi->numberOfPoles; i++) { theta = theta1 * (i + 0.5); costh = cos(theta); sinth = sin(theta); x[0] = costh * r[0]; x[1] = costh * r[1]; z[0] = sinth * r[0]; z[1] = sinth * r[1]; glVertex3f(x[r1], y[y1], z[r1]); glVertex3f(x[r2], y[y2], z[r2]); setNormalV(glhanoi, theta1 * (i + 1), y1, y2, r1); } /* end edge */ glVertex3f(end[r1][0], y[y1], end[r1][1]); glVertex3f(end[r2][0], y[y2], end[r2][1]); setNormalV(glhanoi, glhanoi->numberOfPoles, y1, y2, r1); glEnd(); return glhanoi->numberOfPoles; } /* Draw base such that poles are distributed around a regular polygon. */ static int drawRoundBase(glhcfg *glhanoi) { int polys = 0; GLfloat theta, sinth, costh; /* r[0] = (minimum) inner radius of base at vertices r[1] = (minimum) outer radius of base at vertices y[0] = bottom of base y[1] = top of base */ GLfloat r[2], y[2]; /* positions of end points: beginning, end. beg[0] is inner corner of beginning of base, beg[1] is outer corner. beg[i][0] is x, [i][1] is z. */ GLfloat beg[2][2], end[2][2], begNorm, endNorm; /* ratio of radius at base vertices to ratio at poles */ GLfloat longer = 1.0 / cos(M_PI / (glhanoi->numberOfPoles + 1)); r[0] = (glhanoi->poleDist - glhanoi->maxDiskRadius) * longer; r[1] = (glhanoi->poleDist + glhanoi->maxDiskRadius) * longer; y[0] = 0; y[1] = glhanoi->baseHeight; /* compute beg, end. Make the ends square. */ theta = M_PI * 2 / (glhanoi->numberOfPoles + 1); costh = cos(theta); sinth = sin(theta); beg[0][0] = (glhanoi->poleDist - glhanoi->maxDiskRadius) * costh + glhanoi->maxDiskRadius * sinth; beg[1][0] = (glhanoi->poleDist + glhanoi->maxDiskRadius) * costh + glhanoi->maxDiskRadius * sinth; beg[0][1] = (glhanoi->poleDist - glhanoi->maxDiskRadius) * sinth - glhanoi->maxDiskRadius * costh; beg[1][1] = (glhanoi->poleDist + glhanoi->maxDiskRadius) * sinth - glhanoi->maxDiskRadius * costh; begNorm = theta - M_PI * 0.5; theta = M_PI * 2 * glhanoi->numberOfPoles / (glhanoi->numberOfPoles + 1); costh = cos(theta); sinth = sin(theta); end[0][0] = (glhanoi->poleDist - glhanoi->maxDiskRadius) * costh - glhanoi->maxDiskRadius * sinth; end[1][0] = (glhanoi->poleDist + glhanoi->maxDiskRadius) * costh - glhanoi->maxDiskRadius * sinth; end[0][1] = (glhanoi->poleDist - glhanoi->maxDiskRadius) * sinth + glhanoi->maxDiskRadius * costh; end[1][1] = (glhanoi->poleDist + glhanoi->maxDiskRadius) * sinth + glhanoi->maxDiskRadius * costh; endNorm = theta + M_PI * 0.5; /* bottom: never seen polys = drawBaseStrip(glhanoi, 0, 0, 0, 1, y, r, beg, end); */ /* outside edge */ polys += drawBaseStrip(glhanoi, 0, 1, 1, 1, y, r, beg, end); /* top */ polys += drawBaseStrip(glhanoi, 1, 1, 1, 0, y, r, beg, end); /* inside edge */ polys += drawBaseStrip(glhanoi, 1, 0, 0, 0, y, r, beg, end); /* Draw ends */ glBegin(GL_QUADS); glVertex3f(beg[0][0], y[1], beg[0][1]); glVertex3f(beg[1][0], y[1], beg[1][1]); glVertex3f(beg[1][0], y[0], beg[1][1]); glVertex3f(beg[0][0], y[0], beg[0][1]); glNormal3f(cos(begNorm), 0, sin(begNorm)); glVertex3f(end[0][0], y[0], end[0][1]); glVertex3f(end[1][0], y[0], end[1][1]); glVertex3f(end[1][0], y[1], end[1][1]); glVertex3f(end[0][0], y[1], end[0][1]); glNormal3f(cos(endNorm), 0, sin(endNorm)); polys += 2; glEnd(); return polys; } static int drawDisks(glhcfg *glhanoi) { int i; int polys = 0; glPushMatrix(); glTranslatef(0.0f, glhanoi->baseHeight, 0.0f); for(i = glhanoi->maxDiskIdx; i >= 0; i--) { Disk *disk = &glhanoi->disk[i]; GLfloat *pos = disk->position; GLfloat *rot = disk->rotation; glPushMatrix(); glTranslatef(pos[0], pos[1], pos[2]); if(rot[1] != 0.0) { glTranslatef(0.0, glhanoi->diskHeight / 2.0, 0.0); /* rotate around different axis depending on phi */ if (disk->phi != 0.0) glRotatef(-disk->phi, 0.0, 1.0, 0.0); glRotatef(rot[1], 0.0, 0.0, 1.0); if (disk->phi != 0.0) glRotatef(disk->phi, 0.0, 1.0, 0.0); glTranslatef(0.0, -glhanoi->diskHeight / 2.0, 0.0); } glCallList(disk->displayList); polys += disk->polys; glPopMatrix(); } glPopMatrix(); return polys; } static GLfloat getDiskRadius(glhcfg *glhanoi, int i) { GLfloat retVal = glhanoi->maxDiskRadius * ((GLfloat) i + 3.0) / (glhanoi->numberOfDisks + 3.0); return retVal; } static void initData(glhcfg *glhanoi) { int i; GLfloat sinPiOverNP; glhanoi->baseLength = BASE_LENGTH; if (glhanoi->layoutLinear) { glhanoi->maxDiskRadius = glhanoi->baseLength / (2 * 0.95 * glhanoi->numberOfPoles); } else { sinPiOverNP = sin(M_PI / (glhanoi->numberOfPoles + 1)); glhanoi->maxDiskRadius = (sinPiOverNP * glhanoi->baseLength * 0.5 * 0.95) / (1 + sinPiOverNP); } glhanoi->poleDist = glhanoi->baseLength * 0.5 - glhanoi->maxDiskRadius; glhanoi->poleRadius = glhanoi->maxDiskRadius / (glhanoi->numberOfDisks + 3.0); /* fprintf(stderr, "Debug: baseL = %f, maxDiskR = %f, poleR = %f\n", glhanoi->baseLength, glhanoi->maxDiskRadius, glhanoi->poleRadius); */ glhanoi->baseWidth = 2.0 * glhanoi->maxDiskRadius; glhanoi->poleOffset = 2.0 * getDiskRadius(glhanoi, glhanoi->maxDiskIdx); glhanoi->diskHeight = 2.0 * glhanoi->poleRadius; glhanoi->baseHeight = 2.0 * glhanoi->poleRadius; glhanoi->poleHeight = glhanoi->numberOfDisks * glhanoi->diskHeight + glhanoi->poleRadius; /* numberOfMoves only applies if numberOfPoles = 3 */ glhanoi->numberOfMoves = (1 << glhanoi->numberOfDisks) - 1; /* use golden ratio */ glhanoi->boardSize = glhanoi->baseLength * 0.5 * (1.0 + sqrt(5.0)); glhanoi->pole = (Pole *)calloc(glhanoi->numberOfPoles, sizeof(Pole)); checkAllocAndExit(!!glhanoi->pole, "poles"); for(i = 0; i < glhanoi->numberOfPoles; i++) { checkAllocAndExit( !!(glhanoi->pole[i].data = calloc(glhanoi->numberOfDisks, sizeof(Disk *))), "disk stack"); glhanoi->pole[i].size = glhanoi->numberOfDisks; } checkAllocAndExit( !!(glhanoi->diskPos = calloc(glhanoi->numberOfDisks, sizeof(double))), "diskPos"); if (glhanoi->trailQSize) { glhanoi->trailQ = (TrailPoint *)calloc(glhanoi->trailQSize, sizeof(TrailPoint)); checkAllocAndExit(!!glhanoi->trailQ, "trail queue"); } else glhanoi->trailQ = (TrailPoint *)NULL; glhanoi->trailQFront = glhanoi->trailQBack = 0; glhanoi->the_rotator = make_rotator(0.1, 0.025, 0, 1, 0.005, False); /* or glhanoi->the_rotator = make_rotator(0.025, 0.025, 0.025, 0.5, 0.005, False); */ glhanoi->button_down_p = False; glhanoi->src = glhanoi->oldsrc = 0; glhanoi->tmp = glhanoi->oldtmp = 1; glhanoi->dst = glhanoi->olddst = glhanoi->numberOfPoles - 1; if (glhanoi->numberOfPoles > 3) { glhanoi->solveStackSize = glhanoi->numberOfDisks + 2; glhanoi->solveStack = (SubProblem *)calloc(glhanoi->solveStackSize, sizeof(SubProblem)); checkAllocAndExit(!!glhanoi->solveStack, "solving stack"); glhanoi->solveStackIdx = 0; } } static void initView(glhcfg *glhanoi) { glhanoi->camera[0] = 0.0; glhanoi->camera[1] = 0.0; glhanoi->camera[2] = 0.0; glhanoi->centre[0] = 0.0; glhanoi->centre[1] = glhanoi->poleHeight * 3.0; glhanoi->centre[2] = 0.0; } /* * noise_improved.c - based on ImprovedNoise.java * JAVA REFERENCE IMPLEMENTATION OF IMPROVED NOISE - COPYRIGHT 2002 KEN PERLIN. */ static double fade(double t) { return t * t * t * (t * (t * 6 - 15) + 10); } static double grad(int hash, double x, double y, double z) { int h = hash & 15; /* CONVERT LO 4 BITS OF HASH CODE */ double u = h < 8 ? x : y, /* INTO 12 GRADIENT DIRECTIONS. */ v = h < 4 ? y : h == 12 || h == 14 ? x : z; return ((h & 1) == 0 ? u : -u) + ((h & 2) == 0 ? v : -v); } static const int permutation[] = { 151, 160, 137, 91, 90, 15, 131, 13, 201, 95, 96, 53, 194, 233, 7, 225, 140, 36, 103, 30, 69, 142, 8, 99, 37, 240, 21, 10, 23, 190, 6, 148, 247, 120, 234, 75, 0, 26, 197, 62, 94, 252, 219, 203, 117, 35, 11, 32, 57, 177, 33, 88, 237, 149, 56, 87, 174, 20, 125, 136, 171, 168, 68, 175, 74, 165, 71, 134, 139, 48, 27, 166, 77, 146, 158, 231, 83, 111, 229, 122, 60, 211, 133, 230, 220, 105, 92, 41, 55, 46, 245, 40, 244, 102, 143, 54, 65, 25, 63, 161, 1, 216, 80, 73, 209, 76, 132, 187, 208, 89, 18, 169, 200, 196, 135, 130, 116, 188, 159, 86, 164, 100, 109, 198, 173, 186, 3, 64, 52, 217, 226, 250, 124, 123, 5, 202, 38, 147, 118, 126, 255, 82, 85, 212, 207, 206, 59, 227, 47, 16, 58, 17, 182, 189, 28, 42, 223, 183, 170, 213, 119, 248, 152, 2, 44, 154, 163, 70, 221, 153, 101, 155, 167, 43, 172, 9, 129, 22, 39, 253, 19, 98, 108, 110, 79, 113, 224, 232, 178, 185, 112, 104, 218, 246, 97, 228, 251, 34, 242, 193, 238, 210, 144, 12, 191, 179, 162, 241, 81, 51, 145, 235, 249, 14, 239, 107, 49, 192, 214, 31, 181, 199, 106, 157, 184, 84, 204, 176, 115, 121, 50, 45, 127, 4, 150, 254, 138, 236, 205, 93, 222, 114, 67, 29, 24, 72, 243, 141, 128, 195, 78, 66, 215, 61, 156, 180 }; static void initNoise(glhcfg *glhanoi) { int i; for(i = 0; i < 256; i++) glhanoi->p[256 + i] = glhanoi->p[i] = permutation[i]; } static double improved_noise(glhcfg *glhanoi, double x, double y, double z) { double u, v, w; int A, AA, AB, B, BA, BB; int X = (int)floor(x) & 255, /* FIND UNIT CUBE THAT */ Y = (int)floor(y) & 255, /* CONTAINS POINT. */ Z = (int)floor(z) & 255; if(!glhanoi->noise_initted) { initNoise(glhanoi); glhanoi->noise_initted = 1; } x -= floor(x); /* FIND RELATIVE X,Y,Z */ y -= floor(y); /* OF POINT IN CUBE. */ z -= floor(z); u = fade(x), /* COMPUTE FADE CURVES */ v = fade(y), /* FOR EACH OF X,Y,Z. */ w = fade(z); A = glhanoi->p[X] + Y; AA = glhanoi->p[A] + Z; AB = glhanoi->p[A + 1] + Z, /* HASH COORDINATES OF */ B = glhanoi->p[X + 1] + Y; BA = glhanoi->p[B] + Z; BB = glhanoi->p[B + 1] + Z; /* THE 8 CUBE CORNERS, */ return lerp(w, lerp(v, lerp(u, grad(glhanoi->p[AA], x, y, z),/* AND ADD */ grad(glhanoi->p[BA], x - 1, y, z)),/* BLENDED */ lerp(u, grad(glhanoi->p[AB], x, y - 1, z),/* RESULTS */ grad(glhanoi->p[BB], x - 1, y - 1, z))),/* FROM 8 CORNERS */ lerp(v, lerp(u, grad(glhanoi->p[AA + 1], x, y, z - 1), grad(glhanoi->p[BA + 1], x - 1, y, z - 1)), /* OF CUBE */ lerp(u, grad(glhanoi->p[AB + 1], x, y - 1, z - 1), grad(glhanoi->p[BB + 1], x - 1, y - 1, z - 1)))); } /* * end noise_improved.c - based on ImprovedNoise.java */ struct tex_col_t { GLuint *colours; /* GLfloat *points; */ unsigned int ncols; }; typedef struct tex_col_t tex_col_t; static GLubyte *makeTexture(glhcfg *glhanoi, int x_size, int y_size, int z_size, GLuint(*texFunc) (glhcfg *, double, double, double, tex_col_t *), tex_col_t * colours) { int i, j, k; GLubyte *textureData; GLuint *texturePtr; double x, y, z; double xi, yi, zi; if((textureData = calloc(x_size * y_size * z_size, sizeof(GLuint))) == NULL) { return NULL; } xi = 1.0 / x_size; yi = 1.0 / y_size; zi = 1.0 / z_size; z = 0.0; texturePtr = (void *)textureData; for(k = 0; k < z_size; k++, z += zi) { y = 0.0; for(j = 0; j < y_size; j++, y += yi) { x = 0.0; for(i = 0; i < x_size; i++, x += xi) { *texturePtr = texFunc(glhanoi, x, y, z, colours); ++texturePtr; } } } return textureData; } static void freeTexCols(tex_col_t*p) { free(p->colours); free(p); } static tex_col_t *makeMarbleColours(void) { tex_col_t *marbleColours; int ncols = 2; marbleColours = malloc(sizeof(tex_col_t)); if(marbleColours == NULL) return NULL; marbleColours->colours = calloc(sizeof(GLuint), ncols); if(marbleColours->colours == NULL) return NULL; marbleColours->ncols = ncols; marbleColours->colours[0] = 0x3f3f3f3f; marbleColours->colours[1] = 0xffffffff; return marbleColours; } static double turb(glhcfg *glhanoi, double x, double y, double z, int octaves) { int oct, freq = 1; double r = 0.0; for(oct = 0; oct < octaves; ++oct) { r += fabs(improved_noise(glhanoi, freq * x, freq * y, freq * z)) / freq; freq <<= 1; } return r / 2.0; } static void perturb(glhcfg *glhanoi, double *x, double *y, double *z, double scale) { double t = scale * turb(glhanoi, *x, *y, *z, 4); *x += t; *y += t; *z += t; } static double f_m(double x, double y, double z) { return sin(3.0 * M_PI * x); } static GLuint C_m(double x, const tex_col_t * tex_cols) { int r = tex_cols->colours[0] & 0xff; int g = tex_cols->colours[0] >> 8 & 0xff; int b = tex_cols->colours[0] >> 16 & 0xff; double factor; int r1, g1, b1; x = x - floor(x); factor = (1.0 + sin(2.0 * M_PI * x)) / 2.0; r1 = (tex_cols->colours[1] & 0xff); g1 = (tex_cols->colours[1] >> 8 & 0xff); b1 = (tex_cols->colours[1] >> 16 & 0xff); r += (int)(factor * (r1 - r)); g += (int)(factor * (g1 - g)); b += (int)(factor * (b1 - b)); return 0xff000000 | (b << 16) | (g << 8) | r; } static GLuint makeMarbleTexture(glhcfg *glhanoi, double x, double y, double z, tex_col_t * colours) { perturb(glhanoi, &x, &y, &z, MARBLE_SCALE); return C_m(f_m(x, y, z), colours); } static void setTexture(glhcfg *glhanoi, int n) { glBindTexture(GL_TEXTURE_2D, glhanoi->textureNames[n]); } /* returns 1 on failure, 0 on success */ static int makeTextures(glhcfg *glhanoi) { GLubyte *marbleTexture; tex_col_t *marbleColours; glGenTextures(N_TEXTURES, glhanoi->textureNames); if((marbleColours = makeMarbleColours()) == NULL) { return 1; } if((marbleTexture = makeTexture(glhanoi, MARBLE_TEXTURE_SIZE, MARBLE_TEXTURE_SIZE, 1, makeMarbleTexture, marbleColours)) == NULL) { return 1; } glBindTexture(GL_TEXTURE_2D, glhanoi->textureNames[0]); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT); glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, MARBLE_TEXTURE_SIZE, MARBLE_TEXTURE_SIZE, 0, GL_RGBA, GL_UNSIGNED_BYTE, marbleTexture); free(marbleTexture); freeTexCols(marbleColours); return 0; } static void initFloor(glhcfg *glhanoi) { int i, j; float tileSize = glhanoi->boardSize / BOARD_SQUARES; float x0, x1, z0, z1; float tx0, tx1, tz0, tz1; const float *col = cWhite; float texIncr = 1.0 / BOARD_SQUARES; glhanoi->floorpolys = 0; checkAllocAndExit(!!(glhanoi->floorList = glGenLists(1)), "floor display list"); glNewList(glhanoi->floorList, GL_COMPILE); x0 = -glhanoi->boardSize / 2.0; tx0 = 0.0f; setMaterial(col, cWhite, 128); setTexture(glhanoi, 0); glNormal3fv(up); for(i = 0; i < BOARD_SQUARES; i++, x0 += tileSize, tx0 += texIncr) { x1 = x0 + tileSize; tx1 = tx0 + texIncr; z0 = -glhanoi->boardSize / 2.0; tz0 = 0.0f; for(j = 0; j < BOARD_SQUARES; j++, z0 += tileSize, tz0 += texIncr) { int colIndex = (i + j) & 0x1; z1 = z0 + tileSize; tz1 = tz0 + texIncr; if(colIndex) col = cWhite; else col = cBlack; setMaterial(col, cWhite, 100); glBegin(GL_QUADS); glTexCoord2d(tx0, tz0); glVertex3f(x0, 0.0, z0); glTexCoord2d(tx0, tz1); glVertex3f(x0, 0.0, z1); glTexCoord2d(tx1, tz1); glVertex3f(x1, 0.0, z1); glTexCoord2d(tx1, tz0); glVertex3f(x1, 0.0, z0); glhanoi->floorpolys++; glEnd(); } } glEndList(); } static void initBase(glhcfg *glhanoi) { checkAllocAndExit(!!(glhanoi->baseList = glGenLists(1)), "tower bases display list"); glNewList(glhanoi->baseList, GL_COMPILE); setMaterial(baseColor, cWhite, 50); if (glhanoi->layoutLinear) { glhanoi->basepolys = drawCuboid(glhanoi->baseLength, glhanoi->baseWidth, glhanoi->baseHeight); } else { glhanoi->basepolys = drawRoundBase(glhanoi); } glEndList(); } static void initTowers(glhcfg *glhanoi) { int i; checkAllocAndExit(!!(glhanoi->poleList = glGenLists(1)), "poles display list\n"); glNewList(glhanoi->poleList, GL_COMPILE); /* glTranslatef(-glhanoi->poleOffset * (glhanoi->numberOfPoles - 1.0f) * 0.5f, glhanoi->baseHeight, 0.0f); */ setMaterial(poleColor, cWhite, 50); for (i = 0; i < glhanoi->numberOfPoles; i++) { GLfloat *p = glhanoi->pole[i].position; GLfloat rad = (M_PI * 2.0 * (i + 1)) / (glhanoi->numberOfPoles + 1); p[1] = glhanoi->baseHeight; if (glhanoi->layoutLinear) { /* Linear: */ p[0] = -glhanoi->poleOffset * ((glhanoi->numberOfPoles - 1) * 0.5f - i); p[2] = 0.0f; } else { /* Circular layout: */ p[0] = cos(rad) * glhanoi->poleDist; p[2] = sin(rad) * glhanoi->poleDist; } glPushMatrix(); glTranslatef(p[0], p[1], p[2]); glhanoi->polepolys = drawPole(glhanoi->poleRadius, glhanoi->poleHeight); glPopMatrix(); } glEndList(); } /* Parameterized hue based on input 0.0 - 1.0. */ static double cfunc(double x) { #define COMP < if(x < 2.0 / 7.0) { return (1.0 / 12.0) / (1.0 / 7.0) * x; } if(x < 3.0 / 7.0) { /* (7x - 1) / 6 */ return (1.0 + 1.0 / 6.0) * x - 1.0 / 6.0; } if(x < 4.0 / 7.0) { return (2.0 + 1.0 / 3.0) * x - 2.0 / 3.0; } if(x < 5.0 / 7.0) { return (1.0 / 12.0) / (1.0 / 7.0) * x + 1.0 / 3.0; } return (1.0 / 12.0) / (1.0 / 7.0) * x + 1.0 / 3.0; } static void initDisks(glhcfg *glhanoi) { int i; glhanoi->disk = (Disk *) calloc(glhanoi->numberOfDisks, sizeof(Disk)); checkAllocAndExit(!!glhanoi->disk, "disks"); for(i = glhanoi->maxDiskIdx; i >= 0; i--) { GLfloat height = (GLfloat) (glhanoi->maxDiskIdx - i); double f = cfunc((GLfloat) i / (GLfloat) glhanoi->numberOfDisks); GLfloat diskColor = f * 360.0; GLfloat color[3]; Disk *disk = &glhanoi->disk[i]; disk->id = i; disk->position[0] = glhanoi->pole[0].position[0]; /* -glhanoi->poleOffset * (glhanoi->numberOfPoles - 1.0f) * 0.5; */ disk->position[1] = glhanoi->diskHeight * height; disk->position[2] = glhanoi->pole[0].position[2]; disk->rotation[0] = 0.0; disk->rotation[1] = 0.0; disk->rotation[2] = 0.0; disk->polys = 0; /* make smaller disks move faster */ disk->speed = lerp(((double)glhanoi->numberOfDisks - i) / glhanoi->numberOfDisks, 1.0, glhanoi->speed); /* fprintf(stderr, "disk id: %d, alpha: %0.2f, speed: %0.2f\n", disk->id, ((double)(glhanoi->maxDiskIdx - i)) / glhanoi->numberOfDisks, disk->speed); */ color[0] = diskColor; color[1] = 1.0f; color[2] = 1.0f; HSVtoRGBv(color, color); checkAllocAndExit(!!(disk->displayList = glGenLists(1)), "disk display list"); glNewList(disk->displayList, GL_COMPILE); setMaterial(color, cWhite, 100.0); disk->polys += drawDisk3D(glhanoi->poleRadius, getDiskRadius(glhanoi, i), glhanoi->diskHeight); /*fprintf(stderr, "Debug: disk %d has radius %f\n", i, getDiskRadius(glhanoi, i)); */ glEndList(); } for(i = glhanoi->maxDiskIdx; i >= 0; --i) { GLfloat height = (GLfloat) (glhanoi->maxDiskIdx - i); int h = glhanoi->maxDiskIdx - i; glhanoi->diskPos[h] = glhanoi->diskHeight * height; push(glhanoi, glhanoi->src, &glhanoi->disk[i]); } } static void initLights(Bool state) { if(state) { glLightfv(GL_LIGHT0, GL_POSITION, pos0); glLightfv(GL_LIGHT0, GL_AMBIENT, amb0); glLightfv(GL_LIGHT0, GL_DIFFUSE, dif0); glLightfv(GL_LIGHT0, GL_SPECULAR, spc0); glLightfv(GL_LIGHT1, GL_POSITION, pos1); glLightfv(GL_LIGHT1, GL_AMBIENT, amb1); glLightfv(GL_LIGHT1, GL_DIFFUSE, dif1); glLightfv(GL_LIGHT1, GL_SPECULAR, spc1); glEnable(GL_LIGHTING); glEnable(GL_LIGHT0); glEnable(GL_LIGHT1); } else { glDisable(GL_LIGHTING); } } static int drawFloor(glhcfg *glhanoi) { glCallList(glhanoi->floorList); return glhanoi->floorpolys; } static int drawTowers(glhcfg *glhanoi) { glCallList(glhanoi->baseList); glCallList(glhanoi->poleList); return glhanoi->basepolys + glhanoi->polepolys; } static int drawTrails1(glhcfg *glhanoi, double t, double thickness, double alpha) { int i, prev = -1, lines = 0; Bool fresh = False; GLfloat trailDurInv = 1.0f / glhanoi->trailDuration; glLineWidth(thickness); glBegin(GL_LINES); for (i = glhanoi->trailQFront; i != glhanoi->trailQBack; i = normalizeQ(i + 1)) { TrailPoint *tqi = &(glhanoi->trailQ[i]); if (!fresh && t > tqi->endTime) { glhanoi->trailQFront = normalizeQ(i + 1); } else { if (tqi->startTime > t) break; /* Found trails that haven't timed out. */ if (!fresh) fresh = True; if (prev > -1) { /* Fade to invisible with age */ trailColor[3] = alpha * (tqi->endTime - t) * trailDurInv; /* Can't use setMaterial(trailColor, cBlack, 0) because our color needs an alpha value. */ glColor4fv(trailColor); glMaterialfv(GL_FRONT, GL_AMBIENT_AND_DIFFUSE, trailColor); /* FUTURE: to really do this right, trails should be drawn in back-to-front order, so that blending is done correctly. Currently it looks poor when a faded trail is in front of, or coincident with, a bright trail but is drawn first. I think for now it's good enough to recommend shorter trails so they never/rarely overlap. A jitter per trail arc would also mitigate this problem, to a lesser degree. */ glVertex3fv(glhanoi->trailQ[prev].position); glVertex3fv(glhanoi->trailQ[i].position); lines++; } if (glhanoi->trailQ[i].isEnd) prev = -1; else prev = i; } } glEnd(); return lines; } static int drawTrails(glhcfg *glhanoi) { int lines = 0; double t = getTime(); glEnable (GL_BLEND); glBlendFunc (GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); glMaterialfv(GL_FRONT, GL_SPECULAR, cBlack); glMateriali(GL_FRONT, GL_SHININESS, 0); /* Draw them twice, with different widths and opacities, to make them smoother. */ lines = drawTrails1(glhanoi, t, 1.0, 0.75); lines += drawTrails1(glhanoi, t, 2.5, 0.5); glDisable (GL_BLEND); /* fprintf(stderr, "Drew trails: %d lines\n", lines); */ return lines; } /* Window management, etc */ ENTRYPOINT void reshape_glhanoi(ModeInfo * mi, int width, int height) { glViewport(0, 0, (GLint) width, (GLint) height); glMatrixMode(GL_PROJECTION); glLoadIdentity(); gluPerspective(30.0, (GLdouble) width / (GLdouble) height, 1.0, 2 * MAX_CAMERA_RADIUS); glMatrixMode(GL_MODELVIEW); glLoadIdentity(); glClear(GL_COLOR_BUFFER_BIT); } ENTRYPOINT void init_glhanoi(ModeInfo * mi) { glhcfg *glhanoi; if(!glhanoi_cfg) { glhanoi_cfg = (glhcfg *) calloc(MI_NUM_SCREENS(mi), sizeof(glhcfg)); checkAllocAndExit(!!glhanoi_cfg, "configuration"); } glhanoi = &glhanoi_cfg[MI_SCREEN(mi)]; glhanoi->glx_context = init_GL(mi); glhanoi->numberOfDisks = MI_BATCHCOUNT(mi); if (glhanoi->numberOfDisks <= 1) glhanoi->numberOfDisks = 3 + (int) BELLRAND(9); /* magicnumber is a bitfield, so we can't have more than 31 discs on a system with 4-byte ints. */ if (glhanoi->numberOfDisks >= 8 * sizeof(int)) glhanoi->numberOfDisks = (8 * sizeof(int)) - 1; glhanoi->maxDiskIdx = glhanoi->numberOfDisks - 1; glhanoi->numberOfPoles = get_integer_resource(MI_DISPLAY(mi), "poles", "Integer"); /* Set a number of poles from 3 to numberOfDisks + 1, biased toward lower values, with probability decreasing linearly. */ if (glhanoi->numberOfPoles <= 2) glhanoi->numberOfPoles = 3 + (int)((1 - sqrt(frand(1.0))) * (glhanoi->numberOfDisks - 1)); glhanoi->wire = MI_IS_WIREFRAME(mi); # ifdef HAVE_JWZGLES /* #### glPolygonMode other than GL_FILL unimplemented */ glhanoi->wire = 0; # endif glhanoi->light = light; glhanoi->fog = fog; glhanoi->texture = texture; glhanoi->speed = speed; glhanoi->trailDuration = trails; /* set trailQSize based on 60 fps (a maximum, more or less) */ /* FUTURE: Should clamp framerate to 60 fps? See flurry.c's draw_flurry(). The only bad effect if we don't is that trail-ends could show "unnatural" pauses at high fps. */ glhanoi->trailQSize = (int)(trails * 60.0); reshape_glhanoi(mi, MI_WIDTH(mi), MI_HEIGHT(mi)); if(glhanoi->wire) { glhanoi->light = False; glhanoi->fog = False; glhanoi->texture = False; } initLights(!glhanoi->wire && glhanoi->light); checkAllocAndExit(!makeTextures(glhanoi), "textures\n"); /* Choose linear or circular layout. Could make this a user option. */ glhanoi->layoutLinear = (glhanoi->numberOfPoles == 3); initData(glhanoi); initView(glhanoi); initFloor(glhanoi); initBase(glhanoi); initTowers(glhanoi); initDisks(glhanoi); glEnable(GL_DEPTH_TEST); glEnable(GL_NORMALIZE); glEnable(GL_CULL_FACE); glShadeModel(GL_SMOOTH); if(glhanoi->fog) { glClearColor(fogcolor[0], fogcolor[1], fogcolor[2], 1.0); glFogi(GL_FOG_MODE, GL_LINEAR); glFogfv(GL_FOG_COLOR, fogcolor); glFogf(GL_FOG_DENSITY, 0.35f); glHint(GL_FOG_HINT, GL_NICEST); glFogf(GL_FOG_START, MIN_CAMERA_RADIUS); glFogf(GL_FOG_END, MAX_CAMERA_RADIUS / 1.9); glEnable(GL_FOG); } glhanoi->duration = START_DURATION; changeState(glhanoi, START); } ENTRYPOINT void draw_glhanoi(ModeInfo * mi) { glhcfg *glhanoi = &glhanoi_cfg[MI_SCREEN(mi)]; Display *dpy = MI_DISPLAY(mi); Window window = MI_WINDOW(mi); if(!glhanoi->glx_context) return; glXMakeCurrent(MI_DISPLAY(mi), MI_WINDOW(mi), *(glhanoi->glx_context)); glPolygonMode(GL_FRONT, glhanoi->wire ? GL_LINE : GL_FILL); glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); mi->polygon_count = 0; glLoadIdentity(); glRotatef(current_device_rotation(), 0, 0, 1); update_glhanoi(glhanoi); updateView(glhanoi); # ifdef HAVE_MOBILE /* Keep it the same relative size when rotated. */ { GLfloat h = MI_HEIGHT(mi) / (GLfloat) MI_WIDTH(mi); int o = (int) current_device_rotation(); if (o != 0 && o != 180 && o != -180) glScalef (1/h, 1/h, 1/h); } # endif if(!glhanoi->wire && glhanoi->texture) { glEnable(GL_TEXTURE_2D); } mi->polygon_count += drawFloor(glhanoi); glDisable(GL_TEXTURE_2D); mi->polygon_count += drawTowers(glhanoi); mi->polygon_count += drawDisks(glhanoi); if (glhanoi->trailQSize) { /* No polygons, just lines. So ignore the return count. */ (void)drawTrails(glhanoi); } if(mi->fps_p) { do_fps(mi); } glFinish(); glXSwapBuffers(dpy, window); } ENTRYPOINT Bool glhanoi_handle_event(ModeInfo * mi, XEvent * event) { glhcfg *glhanoi = &glhanoi_cfg[MI_SCREEN(mi)]; /* #### this is all wrong on iOS -- should be using gltrackball. */ if(event->xany.type == ButtonPress && event->xbutton.button == Button1) { glhanoi->button_down_p = True; glhanoi->drag_x = event->xbutton.x; glhanoi->drag_y = event->xbutton.y; return True; } else if(event->xany.type == ButtonRelease && event->xbutton.button == Button1) { glhanoi->button_down_p = False; return True; } else if(event->xany.type == ButtonPress && (event->xbutton.button == Button4 || event->xbutton.button == Button5)) { switch (event->xbutton.button) { case Button4: glhanoi->camera[2] += 0.01; break; case Button5: glhanoi->camera[2] -= 0.01; break; default: fprintf(stderr, "glhanoi: unknown button in mousewheel handler\n"); } return True; } else if(event->xany.type == MotionNotify && glhanoi_cfg->button_down_p) { int x_diff, y_diff; x_diff = event->xbutton.x - glhanoi->drag_x; y_diff = event->xbutton.y - glhanoi->drag_y; glhanoi->camera[0] = (float)x_diff / (float)MI_WIDTH(mi); glhanoi->camera[1] = (float)y_diff / (float)MI_HEIGHT(mi); return True; } #if 0 /* #### doesn't work */ else if (screenhack_event_helper (MI_DISPLAY(mi), MI_WINDOW(mi), event)) { changeState(glhanoi, START); return True; } #endif return False; } ENTRYPOINT void release_glhanoi(ModeInfo * mi) { if(glhanoi_cfg != NULL) { int screen; for(screen = 0; screen < MI_NUM_SCREENS(mi); screen++) { int i; int j; glhcfg *glh = &glhanoi_cfg[screen]; glDeleteLists(glh->floorList, 1); glDeleteLists(glh->baseList, 1); glDeleteLists(glh->poleList, 1); glDeleteLists(glh->textureNames[0], 2); for(j = 0; j < glh->numberOfDisks; ++j) { glDeleteLists(glh->disk[j].displayList, 1); } free(glh->disk); for(i = 0; i < glh->numberOfPoles; i++) { if(glh->pole[i].data != NULL) { free(glh->pole[i].data); } } } } free(glhanoi_cfg); glhanoi_cfg = NULL; } XSCREENSAVER_MODULE ("GLHanoi", glhanoi) #endif /* USE_GL */ xscreensaver-5.36/hacks/glx/cube21.c000664 000767 000024 00000072166 12710313173 017262 0ustar00jwzstaff000000 000000 /*- * Permission to use, copy, modify, and distribute this software and its * documentation for any purpose and without fee is hereby granted, * provided that the above copyright notice appear in all copies and that * both that copyright notice and this permission notice appear in * supporting documentation. * * This file is provided AS IS with no warranties of any kind. The author * shall have no liability with respect to the infringement of copyrights, * trade secrets or any patents by this file or any part thereof. In no * event will the author be liable for any lost revenue or profits or * other special, indirect and consequential damages. * * Cube 21 - a Rubik-like puzzle. It changes its shape and has more than * 200 configurations. It is known better as Square-1, but it is called * Cube 21 in the Czech republic, where it was invented in 1992. * * This file is derived from cage.c, * "cage --- the Impossible Cage, an Escher like scene", * by Marcelo F. Vienna, * parts from gltext.c by Jamie Zawinski * * Vaclav (Vasek) Potocek * vasek.potocek@post.cz */ /* TODO: * some simple "solve mode" * use rotator */ /*- * Texture mapping is only available on RGBA contexts, Mono and color index * visuals DO NOT support texture mapping in OpenGL. * * BUT Mesa do implements RGBA contexts in pseudo color visuals, so texture * mapping should work on PseudoColor, DirectColor, TrueColor using Mesa. Mono * is not officially supported for both OpenGL and Mesa, but seems to not crash * Mesa. * * In real OpenGL, PseudoColor DO NOT support texture map (as far as I know). */ #define DEFAULTS "*delay: 20000 \n" \ "*showFPS: False \n" \ "*wireframe: False \n" # define refresh_cube21 0 #include "xlockmore.h" #include "gltrackball.h" #ifdef USE_GL #define DEF_SPIN "True" #define DEF_WANDER "True" #define DEF_TEXTURE "True" #define DEF_RANDOMIZE "True" #define DEF_SPINSPEED "1.0" #define DEF_ROTSPEED "3.0" #define DEF_WANDERSPEED "0.02" #define DEF_WAIT "40.0" #define DEF_CUBESIZE "0.7" #define DEF_COLORMODE "six" #ifdef Pi #undef Pi #endif #define Pi M_PI #define SHUFFLE 100 #define COS15 0.9659258263 #define SIN15 0.2588190451 #define COS30 0.8660254038 #define SIN30 0.5000000000 #define TEX_WIDTH 128 #define TEX_HEIGHT 128 #define TEX_GRAY 0.7, 0.7 #define BORDER 3 #define BORDER2 9 #undef countof #define countof(x) (sizeof((x))/sizeof((*x))) #define rnd01() (random()%2) #define rndcolor() (frand(0.5)+0.3) /*************************************************************************/ static Bool spin, wander, rndstart, tex; static float spinspeed, tspeed, wspeed, twait, size; static char *colmode_s; static int colmode; static argtype vars[] = { { &spin, "spin", "Spin", DEF_SPIN, t_Bool}, { &wander, "wander", "Wander", DEF_WANDER, t_Bool}, { &rndstart, "randomize", "Randomize", DEF_RANDOMIZE, t_Bool}, { &tex, "texture", "Texture", DEF_TEXTURE, t_Bool}, { &spinspeed, "spinspeed", "SpinSpeed", DEF_SPINSPEED, t_Float}, { &tspeed, "rotspeed", "RotSpeed", DEF_ROTSPEED, t_Float}, { &wspeed, "wanderspeed", "WanderSpeed", DEF_WANDERSPEED, t_Float}, { &twait, "wait", "Wait", DEF_WAIT, t_Float}, { &size, "cubesize", "CubeSize", DEF_CUBESIZE, t_Float}, { &colmode_s, "colormode", "ColorMode", DEF_COLORMODE, t_String} }; static XrmOptionDescRec opts[] = { { "-spin", ".spin", XrmoptionNoArg, "True" }, { "+spin", ".spin", XrmoptionNoArg, "False" }, { "-wander", ".wander", XrmoptionNoArg, "True" }, { "+wander", ".wander", XrmoptionNoArg, "False" }, { "-randomize", ".randomize", XrmoptionNoArg, "True" }, { "+randomize", ".randomize", XrmoptionNoArg, "False" }, { "-texture", ".texture", XrmoptionNoArg, "True" }, { "+texture", ".texture", XrmoptionNoArg, "False" }, { "-spinspeed", ".spinspeed", XrmoptionSepArg, 0 }, { "-wanderspeed", ".wanderspeed", XrmoptionSepArg, 0 }, { "-rotspeed", ".rotspeed", XrmoptionSepArg, 0 }, { "-wait", ".wait", XrmoptionSepArg, 0 }, { "-cubesize", ".cubesize", XrmoptionSepArg, 0 }, { "-colormode", ".colormode", XrmoptionSepArg, 0 } }; ENTRYPOINT ModeSpecOpt cube21_opts = {countof(opts), opts, countof(vars), vars, NULL}; #ifdef USE_MODULES ModStruct cube21_description = { "cube21", "init_cube21", "draw_cube21", "release_cube21", "draw_cube21", "change_cube21", NULL, &cube21_opts, 25000, 1, 1, 1, 1.0, 4, "", "Shows randomly shuffling Cube 21", 0, NULL }; #endif typedef enum { CUBE21_STATE_BASIC, CUBE21_PAUSE1 = CUBE21_STATE_BASIC, CUBE21_ROT_BASE, CUBE21_ROT_TOP = CUBE21_ROT_BASE, CUBE21_ROT_BOTTOM, CUBE21_PAUSE2, CUBE21_HALF_BASE, CUBE21_HALF1 = CUBE21_HALF_BASE, CUBE21_HALF2 } cube21_state; typedef enum { CUBE21_COLOR_WHITE, CUBE21_COLOR_RANDOM, CUBE21_COLOR_SILVER, CUBE21_COLOR_TWORND, CUBE21_COLOR_CLASSIC, CUBE21_COLOR_SIXRND } cube21_cmode; typedef int pieces_t[2][13]; typedef int cind_t[5][12]; typedef GLfloat col_t[6][3]; typedef struct { GLXContext *glx_context; GLfloat ratio; cube21_state state; /* type of "rotation" - shuffling */ GLfloat xrot, yrot; /* "spin" - object rotation around axis */ GLfloat posarg; /* position argument (for sine function) */ GLfloat t, tmax; /* rotation clock */ int hf[2], fr[2]; /* half flipped / face rotated flags */ int rface, ramount; /* selected face and amount of rotation in multiplies of 30deg */ int pieces[2][13]; /* locations of "narrow" and "wide" pieces */ int cind[5][12]; /* color indices */ GLfloat colors[6][3]; /* color map */ Bool wire, cmat; unsigned char texture[TEX_HEIGHT][TEX_WIDTH]; GLfloat texp, texq, posc[6]; GLfloat color_inner[4]; Bool button_down_p; trackball_state *trackball; } cube21_conf; static cube21_conf *cube21 = NULL; static const GLfloat shininess = 20.0; static const GLfloat ambient[] = {0.0, 0.0, 0.0, 1.0}; static const GLfloat diffuse[] = {1.0, 1.0, 1.0, 1.0}; static const GLfloat position0[] = {1.0, 1.0, 1.0, 0.0}; static const GLfloat position1[] = {-1.0, -1.0, 1.0, 0.0}; static const GLfloat lmodel_ambient[] = {0.1, 0.1, 0.1, 1.0}; static const GLfloat material_ambient[] = {0.7, 0.7, 0.7, 1.0}; static const GLfloat material_diffuse[] = {0.7, 0.7, 0.7, 1.0}; static const GLfloat material_specular[] = {0.2, 0.2, 0.2, 1.0}; static const GLfloat zpos = -18.0; /*************************************************************************/ static void find_matches(pieces_t pieces, int matches[12], int s) { int i, j = 1; for(i = 1; i<6; i++) { if(pieces[s][i] && pieces[s][i+6]) { matches[j++] = i; } } matches[0] = j; for(i = 1; ipieces, matches, s); j = matches[0]-1; j = random()%j; j = matches[j+1]; rot_face(cp->pieces, cp->cind, s, j); s = rnd01(); rot_halves(cp->pieces, cp->cind, cp->hf, s); } } static void finish(cube21_conf *cp) { int j, s; int matches[12]; switch(cp->state) { case CUBE21_PAUSE1: s = rnd01(); find_matches(cp->pieces, matches, s); j = matches[0]-1; j = random()%j; j = matches[j+1]; if(j==6 && rnd01()) j = -6; cp->state = CUBE21_ROT_BASE+s; cp->tmax = 30.0*abs(j); cp->fr[0] = cp->fr[1] = 0; cp->rface = s; cp->ramount = j; break; case CUBE21_ROT_TOP: case CUBE21_ROT_BOTTOM: rot_face(cp->pieces, cp->cind, s = cp->rface, cp->ramount); cp->fr[s] = 1; s ^= 1; if(!cp->fr[s] && rnd01()) { find_matches(cp->pieces, matches, s); j = matches[0]-1; j = random()%j; j = matches[j+1]; if(j==6 && rnd01()) j = -6; cp->state = CUBE21_ROT_BASE+s; cp->tmax = 30.0*abs(j); cp->rface = s; cp->ramount = j; break; } else { cp->state = CUBE21_PAUSE2; cp->tmax = twait; break; } case CUBE21_PAUSE2: s = rnd01(); cp->ramount = -rnd01(); /* 0 or -1, only sign is significant in this case */ cp->state = CUBE21_HALF_BASE+s; cp->tmax = 180.0; cp->rface = s; break; case CUBE21_HALF1: case CUBE21_HALF2: rot_halves(cp->pieces, cp->cind, cp->hf, cp->rface); cp->state = CUBE21_PAUSE1; cp->tmax = twait; break; } cp->t = 0; } static void draw_narrow_piece(ModeInfo *mi, cube21_conf *cp, GLfloat s, int c1, int c2, col_t colors) { GLfloat s1 = cp->posc[0]*s; glBegin(GL_TRIANGLES); glNormal3f(0.0, 0.0, s); if(cp->cmat) glColor3fv(colors[c1]); glTexCoord2f(0.5, 0.5); glVertex3f(0.0, 0.0, s); glTexCoord2f(cp->texq, 0.0); glVertex3f(cp->posc[1], 0.0, s); glTexCoord2f(cp->texp, 0.0); glVertex3f(cp->posc[2], cp->posc[3], s); mi->polygon_count++; glNormal3f(0.0, 0.0, -s); if(cp->cmat) glColor3fv(cp->color_inner); glTexCoord2f(TEX_GRAY); glVertex3f(0.0, 0.0, s1); glVertex3f(cp->posc[1], 0.0, s1); glVertex3f(cp->posc[2], cp->posc[3], s1); mi->polygon_count++; glEnd(); glBegin(GL_QUADS); glNormal3f(0.0, -1.0, 0.0); if(cp->cmat) glColor3fv(cp->color_inner); glTexCoord2f(TEX_GRAY); glVertex3f(0.0, 0.0, s); glVertex3f(cp->posc[1], 0.0, s); glVertex3f(cp->posc[1], 0.0, s1); glVertex3f(0.0, 0.0, s1); mi->polygon_count++; glNormal3f(COS15, SIN15, 0.0); if(cp->cmat) glColor3fv(colors[c2]); glTexCoord2f(cp->texq, cp->texq); glVertex3f(cp->posc[1], 0.0, s); glTexCoord2f(cp->texq, cp->texp); glVertex3f(cp->posc[2], cp->posc[3], s); glTexCoord2f(1.0, cp->texp); glVertex3f(cp->posc[2], cp->posc[3], s1); glTexCoord2f(1.0, cp->texq); glVertex3f(cp->posc[1], 0.0, s1); mi->polygon_count++; glNormal3f(-SIN30, COS30, 0.0); if(cp->cmat) glColor3fv(cp->color_inner); glTexCoord2f(TEX_GRAY); glVertex3f(0.0, 0.0, s); glVertex3f(cp->posc[2], cp->posc[3], s); glVertex3f(cp->posc[2], cp->posc[3], s1); glVertex3f(0.0, 0.0, s1); mi->polygon_count++; glEnd(); glRotatef(30.0, 0.0, 0.0, 1.0); } static void draw_wide_piece(ModeInfo *mi, cube21_conf *cp, GLfloat s, int c1, int c2, int c3, col_t colors) { GLfloat s1 = cp->posc[0]*s; glBegin(GL_TRIANGLES); glNormal3f(0.0, 0.0, s); if(cp->cmat) glColor3fv(colors[c1]); glTexCoord2f(0.5, 0.5); glVertex3f(0.0, 0.0, s); glTexCoord2f(cp->texp, 0.0); glVertex3f(cp->posc[1], 0.0, s); glTexCoord2f(0.0, 0.0); glVertex3f(cp->posc[4], cp->posc[5], s); glTexCoord2f(0.0, 0.0); glVertex3f(cp->posc[4], cp->posc[5], s); glTexCoord2f(0.0, cp->texp); glVertex3f(cp->posc[3], cp->posc[2], s); glTexCoord2f(0.5, 0.5); glVertex3f(0.0, 0.0, s); glNormal3f(0.0, 0.0, -s); if(cp->cmat) glColor3fv(cp->color_inner); glTexCoord2f(TEX_GRAY); glVertex3f(0.0, 0.0, s1); glVertex3f(cp->posc[1], 0.0, s1); glVertex3f(cp->posc[4], cp->posc[5], s1); glVertex3f(cp->posc[4], cp->posc[5], s1); glVertex3f(cp->posc[3], cp->posc[2], s1); glVertex3f(0.0, 0.0, s1); glEnd(); glBegin(GL_QUADS); glNormal3f(0.0, -1.0, 0); if(cp->cmat) glColor3fv(cp->color_inner); glTexCoord2f(TEX_GRAY); glVertex3f(0.0, 0.0, s); glVertex3f(cp->posc[1], 0.0, s); glVertex3f(cp->posc[1], 0.0, s1); glVertex3f(0.0, 0.0, s1); glNormal3f(COS15, -SIN15, 0.0); if(cp->cmat) glColor3fv(colors[c2]); glTexCoord2f(cp->texq, cp->texp); glVertex3f(cp->posc[1], 0.0, s); glTexCoord2f(cp->texq, 0.0); glVertex3f(cp->posc[4], cp->posc[5], s); glTexCoord2f(1.0, 0.0); glVertex3f(cp->posc[4], cp->posc[5], s1); glTexCoord2f(1.0, cp->texp); glVertex3f(cp->posc[1], 0.0, s1); glNormal3f(SIN15, COS15, 0.0); if(cp->cmat) glColor3fv(colors[c3]); glTexCoord2f(cp->texq, cp->texp); glVertex3f(cp->posc[4], cp->posc[5], s); glTexCoord2f(cp->texq, 0.0); glVertex3f(cp->posc[3], cp->posc[2], s); glTexCoord2f(1.0, 0.0); glVertex3f(cp->posc[3], cp->posc[2], s1); glTexCoord2f(1.0, cp->texp); glVertex3f(cp->posc[4], cp->posc[5], s1); glNormal3f(-COS30, SIN30, 0.0); if(cp->cmat) glColor3fv(cp->color_inner); glTexCoord2f(TEX_GRAY); glVertex3f(0.0, 0.0, s); glVertex3f(cp->posc[3], cp->posc[2], s); glVertex3f(cp->posc[3], cp->posc[2], s1); glVertex3f(0.0, 0.0, s1); glEnd(); glRotatef(60.0, 0.0, 0.0, 1.0); } static void draw_middle_piece(cube21_conf *cp, int s, cind_t cind, col_t colors) { s *= 6; glBegin(GL_QUADS); if(cp->cmat) glColor3fv(cp->color_inner); glNormal3f(0.0, 0.0, 1.0); glTexCoord2f(TEX_GRAY); glVertex3f(cp->posc[1], 0.0, cp->posc[0]); glVertex3f(cp->posc[4], cp->posc[5], cp->posc[0]); glVertex3f(-cp->posc[5], cp->posc[4], cp->posc[0]); glVertex3f(-cp->posc[1], 0.0, cp->posc[0]); glNormal3f(0.0, 0.0, -1.0); glTexCoord2f(TEX_GRAY); glVertex3f(cp->posc[1], 0.0, -cp->posc[0]); glVertex3f(cp->posc[4], cp->posc[5], -cp->posc[0]); glVertex3f(-cp->posc[5], cp->posc[4], -cp->posc[0]); glVertex3f(-cp->posc[1], 0.0, -cp->posc[0]); glNormal3f(0.0, -1.0, 0.0); glTexCoord2f(TEX_GRAY); glVertex3f(-cp->posc[1], 0.0, cp->posc[0]); glVertex3f(cp->posc[1], 0.0, cp->posc[0]); glVertex3f(cp->posc[1], 0.0, -cp->posc[0]); glVertex3f(-cp->posc[1], 0.0, -cp->posc[0]); glNormal3f(COS15, -SIN15, 0.0); if(cp->cmat) glColor3fv(colors[cind[4][s]]); glTexCoord2f(cp->texq, cp->texp); glVertex3f(cp->posc[1], 0.0, cp->posc[0]); glTexCoord2f(1.0, cp->texp); glVertex3f(cp->posc[4], cp->posc[5], cp->posc[0]); glTexCoord2f(1.0, cp->texq); glVertex3f(cp->posc[4], cp->posc[5], -cp->posc[0]); glTexCoord2f(cp->texq, cp->texq); glVertex3f(cp->posc[1], 0.0, -cp->posc[0]); glNormal3f(SIN15, COS15, 0.0); if(cp->cmat) glColor3fv(colors[cind[4][s+1]]); glTexCoord2f(0.0, 0.5); glVertex3f(cp->posc[4], cp->posc[5], cp->posc[0]); glTexCoord2f(cp->texq, 0.5); glVertex3f(-cp->posc[5], cp->posc[4], cp->posc[0]); glTexCoord2f(cp->texq, 0.75); glVertex3f(-cp->posc[5], cp->posc[4], -cp->posc[0]); glTexCoord2f(0.0, 0.75); glVertex3f(cp->posc[4], cp->posc[5], -cp->posc[0]); glNormal3f(-COS15, SIN15, 0.0); if(cp->cmat) glColor3fv(colors[cind[4][s+4]]); glTexCoord2f(0.0, 0.75); glVertex3f(-cp->posc[5], cp->posc[4], cp->posc[0]); glTexCoord2f(1.0, 0.75); glVertex3f(-cp->posc[1], 0.0, cp->posc[0]); glTexCoord2f(1.0, 1.0); glVertex3f(-cp->posc[1], 0.0, -cp->posc[0]); glTexCoord2f(0.0, 1.0); glVertex3f(-cp->posc[5], cp->posc[4], -cp->posc[0]); glEnd(); } static void draw_middle(cube21_conf *cp) { if(cp->hf[0]) glRotatef(180.0, 0.0, 1.0, 0.0); draw_middle_piece(cp, 0, cp->cind, cp->colors); if(cp->hf[0]) glRotatef(180.0, 0.0, 1.0, 0.0); glRotatef(180.0, 0.0, 0.0, 1.0); if(cp->hf[1]) glRotatef(180.0, 0.0, 1.0, 0.0); draw_middle_piece(cp, 1, cp->cind, cp->colors); if(cp->hf[1]) glRotatef(180.0, 0.0, 1.0, 0.0); } static void draw_half_face(ModeInfo *mi, cube21_conf *cp, int s, int o) { int i, s1 = 1-s*2, s2 = s*2; for(i = o; ipieces[s][i+1]) draw_narrow_piece(mi, cp, s1, cp->cind[s2][i], cp->cind[s2+1][i], cp->colors); else { draw_wide_piece(mi, cp, s1, cp->cind[s2][i], cp->cind[s2+1][i], cp->cind[s2+1][i+1], cp->colors); i++; } } } static void draw_top_face(ModeInfo *mi, cube21_conf *cp) { draw_half_face(mi, cp, 0, 0); draw_half_face(mi, cp, 0, 6); } static void draw_bottom_face(ModeInfo *mi, cube21_conf *cp) { draw_half_face(mi, cp, 1, 0); draw_half_face(mi, cp, 1, 6); } static Bool draw_main(ModeInfo *mi, cube21_conf *cp) { GLfloat theta = cp->ramount<0?cp->t:-cp->t; glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glLoadIdentity(); if(wander) glTranslatef(3.0*cp->ratio*sin(13.0*cp->posarg), 3.0*sin(17.0*cp->posarg), zpos); else glTranslatef(0, 0, zpos); glScalef(size, size, size); # ifdef HAVE_MOBILE /* Keep it the same relative size when rotated. */ { GLfloat h = MI_HEIGHT(mi) / (GLfloat) MI_WIDTH(mi); int o = (int) current_device_rotation(); if (o != 0 && o != 180 && o != -180) glScalef (1/h, 1/h, 1/h); } # endif glRotatef(cp->xrot, 1.0, 0.0, 0.0); glRotatef(cp->yrot, 0.0, 1.0, 0.0); gltrackball_rotate (cp->trackball); if(cp->wire) glColor3f(0.7, 0.7, 0.7); switch(cp->state) { case CUBE21_PAUSE1: case CUBE21_PAUSE2: draw_top_face(mi, cp); draw_bottom_face(mi, cp); draw_middle(cp); break; case CUBE21_ROT_TOP: glRotatef(theta, 0.0, 0.0, 1.0); draw_top_face(mi, cp); glRotatef(-theta, 0.0, 0.0, 1.0); draw_bottom_face(mi, cp); draw_middle(cp); break; case CUBE21_ROT_BOTTOM: draw_top_face(mi, cp); glRotatef(theta, 0.0, 0.0, 1.0); draw_bottom_face(mi, cp); glRotatef(-theta, 0.0, 0.0, 1.0); draw_middle(cp); break; case CUBE21_HALF1: glRotatef(theta, 0.0, 1.0, 0.0); case CUBE21_HALF2: draw_half_face(mi, cp, 0, 0); glRotatef(-180.0, 0.0, 0.0, 1.0); draw_half_face(mi, cp, 1, 0); glRotatef(-180.0, 0.0, 0.0, 1.0); if(cp->hf[0]) glRotatef(180.0, 0.0, 1.0, 0.0); draw_middle_piece(cp, 0, cp->cind, cp->colors); if(cp->hf[0]) glRotatef(180.0, 0.0, 1.0, 0.0); if(cp->state==CUBE21_HALF1) glRotatef(-theta, 0.0, 1.0, 0.0); else glRotatef(theta, 0.0, 1.0, 0.0); glRotatef(180.0, 0.0, 0.0, 1.0); draw_half_face(mi, cp, 0, 6); glRotatef(-180.0, 0.0, 0.0, 1.0); draw_half_face(mi, cp, 1, 6); glRotatef(-180.0, 0.0, 0.0, 1.0); if(cp->hf[1]) glRotatef(180.0, 0.0, 1.0, 0.0); draw_middle_piece(cp, 1, cp->cind, cp->colors); break; } if(spin) { if((cp->xrot += spinspeed)>360.0) cp->xrot -= 360.0; if((cp->yrot += spinspeed)>360.0) cp->yrot -= 360.0; } if(wander) if((cp->posarg += wspeed/1000.0)>360.0) cp->posarg -= 360.0; if((cp->t += tspeed)>cp->tmax) finish(cp); return True; } static void parse_colmode(void) { if(!colmode_s) { colmode = CUBE21_COLOR_WHITE; return; } if(strstr(colmode_s, "se") || strstr(colmode_s, "sil")) colmode = CUBE21_COLOR_SILVER; else if(strstr(colmode_s, "ce") || strstr(colmode_s, "cla")) colmode = CUBE21_COLOR_CLASSIC; else if(strstr(colmode_s, "2") || strstr(colmode_s, "two")) colmode = CUBE21_COLOR_TWORND; else if(strstr(colmode_s, "6") || strstr(colmode_s, "six")) colmode = CUBE21_COLOR_SIXRND; else if(strstr(colmode_s, "1") || strstr(colmode_s, "ran") || strstr(colmode_s, "rnd")) colmode = CUBE21_COLOR_RANDOM; else colmode = CUBE21_COLOR_WHITE; } static void init_posc(cube21_conf *cp) { cp->texp = (1.0-tan(Pi/12.0))/2.0; cp->texq = 1.0-cp->texp; /* Some significant non-trivial coordinates * of the object. We need them exactly at GLfloat precision * for the edges to line up perfectly. */ cp->posc[0] = tan(Pi/12); /* 0.268 */ cp->posc[1] = 1.0/cos(Pi/12); /* 1.035 */ cp->posc[2] = cos(Pi/6)/cos(Pi/12); /* 0.897 */ cp->posc[3] = sin(Pi/6)/cos(Pi/12); /* 0.518 */ cp->posc[4] = sqrt(2)*cos(Pi/6); /* 1.225 */ cp->posc[5] = sqrt(2)*sin(Pi/6); /* 0.707 = 1/sqrt(2) */ } static void draw_horz_line(cube21_conf *cp, int x1, int x2, int y) { int x, y0 = y, w; if(y=TEX_HEIGHT) break; w = y*y*255/BORDER2; for(x=x1; x<=x2; x++) if(cp->texture[y0+y][x]>w) cp->texture[y0+y][x] = w; } } static void draw_vert_line(cube21_conf *cp, int x, int y1, int y2) { int x0 = x, y, w; if(x=TEX_WIDTH) break; w = x*x*255/BORDER2; for(y=y1; y<=y2; y++) if(cp->texture[y][x0+x]>w) cp->texture[y][x0+x] = w; } } static void draw_slanted_horz(cube21_conf *cp, int x1, int y1, int x2, int y2) { int x, y, dx = x2-x1, dy = y2-y1, y0, w; for(x=x1; x<=x2; x++) { y0 = y1+(y2-y1)*(x-x1)/(x2-x1); for(y=-1-BORDER; y<2+BORDER; y++) { w = dx*(y0+y-y1)-dy*(x-x1); w = w*w/(dx*dx+dy*dy); w = w*255/BORDER2; if(cp->texture[y0+y][x]>w) cp->texture[y0+y][x] = w; } } } static void draw_slanted_vert(cube21_conf *cp, int x1, int y1, int x2, int y2) { int x, y, dx = x2-x1, dy = y2-y1, x0, w; for(y=y1; y<=y2; y++) { x0 = x1+(x2-x1)*(y-y1)/(y2-y1); for(x=-1-BORDER; x<2+BORDER; x++) { w = dy*(x0+x-x1)-dx*(y-y1); w = w*w/(dy*dy+dx*dx); w = w*255/BORDER2; if(cp->texture[y][x0+x]>w) cp->texture[y][x0+x] = w; } } } static void make_texture(cube21_conf *cp) { int x, y, x0, y0; float grayp[2] = {TEX_GRAY}; for(y=0; ytexture[y][x] = 255; draw_horz_line(cp, 0, TEX_WIDTH-1, 0); draw_horz_line(cp, cp->texq*TEX_WIDTH, TEX_WIDTH-1, cp->texp*TEX_HEIGHT); draw_horz_line(cp, cp->texq*TEX_WIDTH, TEX_WIDTH-1, cp->texq*TEX_HEIGHT); draw_horz_line(cp, 0, cp->texq*TEX_WIDTH, TEX_HEIGHT/2); draw_horz_line(cp, 0, TEX_WIDTH-1, TEX_HEIGHT*3/4); draw_horz_line(cp, 0, TEX_WIDTH-1, TEX_HEIGHT-1); draw_vert_line(cp, 0, 0, TEX_HEIGHT-1); draw_vert_line(cp, cp->texq*TEX_WIDTH, 0, TEX_HEIGHT*3/4); draw_vert_line(cp, TEX_WIDTH-1, 0, TEX_HEIGHT-1); draw_slanted_horz(cp, 0, cp->texp*TEX_HEIGHT, TEX_WIDTH/2, TEX_HEIGHT/2); draw_slanted_vert(cp, cp->texp*TEX_WIDTH, 0, TEX_WIDTH/2, TEX_HEIGHT/2); draw_slanted_vert(cp, cp->texq*TEX_WIDTH, 0, TEX_WIDTH/2, TEX_HEIGHT/2); x0 = grayp[0]*TEX_WIDTH; y0 = grayp[1]*TEX_HEIGHT; for(y=-1; y<=1; y++) for(x=-1; x<=1; x++) cp->texture[y0+y][x0+x] = 100; } /* It doesn't look good */ /*#define MIPMAP*/ static void init_gl(ModeInfo *mi) { cube21_conf *cp = &cube21[MI_SCREEN(mi)]; #ifdef MIPMAP int status; #endif parse_colmode(); cp->wire = MI_IS_WIREFRAME(mi); cp->cmat = !cp->wire && (colmode != CUBE21_COLOR_WHITE); if(MI_IS_MONO(mi)) { tex = False; cp->cmat = False; } # ifdef HAVE_JWZGLES /* #### glPolygonMode other than GL_FILL unimplemented */ cp->wire = 0; # endif if(cp->wire) { glPolygonMode(GL_FRONT_AND_BACK, GL_LINE); return; } if(!tex) cp->color_inner[0] = cp->color_inner[1] = cp->color_inner[2] = 0.4; else cp->color_inner[0] = cp->color_inner[1] = cp->color_inner[2] = 1.0; glClearDepth(1.0); glDrawBuffer(GL_BACK); glPixelStorei(GL_UNPACK_ALIGNMENT, 1); glShadeModel(GL_FLAT); glDepthFunc(GL_LESS); glLightfv(GL_LIGHT0, GL_AMBIENT, ambient); glLightfv(GL_LIGHT0, GL_DIFFUSE, diffuse); glLightfv(GL_LIGHT0, GL_POSITION, position0); glLightfv(GL_LIGHT1, GL_AMBIENT, ambient); glLightfv(GL_LIGHT1, GL_DIFFUSE, diffuse); glLightfv(GL_LIGHT1, GL_POSITION, position1); glLightModelfv(GL_LIGHT_MODEL_AMBIENT, lmodel_ambient); glLightModeli(GL_LIGHT_MODEL_TWO_SIDE, GL_FALSE); glEnable(GL_DEPTH_TEST); glEnable(GL_LIGHT0); glEnable(GL_LIGHT1); glEnable(GL_LIGHTING); glEnable(GL_NORMALIZE); glEnable(GL_COLOR_MATERIAL); glMaterialfv(GL_FRONT_AND_BACK, GL_AMBIENT, material_ambient); glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, material_diffuse); glMaterialfv(GL_FRONT_AND_BACK, GL_SPECULAR, material_specular); glMaterialf(GL_FRONT_AND_BACK, GL_SHININESS, shininess); if(!tex) return; glEnable(GL_TEXTURE_2D); #ifdef MIPMAP clear_gl_error(); status = gluBuild2DMipmaps(GL_TEXTURE_2D, 1, TEX_WIDTH, TEX_HEIGHT, GL_LUMINANCE, GL_UNSIGNED_BYTE, texture); if (status) { const char *s = gluErrorString(status); fprintf (stderr, "%s: error mipmapping texture: %s\n", progname, (s?s:"(unknown)")); exit (1); } check_gl_error("mipmapping"); #else glTexImage2D(GL_TEXTURE_2D, 0, 1, TEX_WIDTH, TEX_HEIGHT, 0, GL_LUMINANCE, GL_UNSIGNED_BYTE, cp->texture); #endif glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE); glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP); glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP); glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); #ifdef MIPMAP glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_LINEAR); #else glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); #endif } static void init_cp(cube21_conf *cp) { int i, j; GLfloat ce_colors[6][3] = { {1.0, 1.0, 1.0}, {1.0, 0.5, 0.0}, {0.0, 0.9, 0.0}, {0.8, 0.0, 0.0}, {0.1, 0.1, 1.0}, {0.9, 0.9, 0.0} }; cp->state = CUBE21_STATE_BASIC; cp->xrot = -65.0; cp->yrot = 185.0; cp->posarg = (wspeed?random()%360:0.0); cp->t = 0.0; cp->tmax = twait; cp->hf[0] = cp->hf[1] = 0; cp->fr[0] = cp->fr[1] = 0; for(i=0;i<13;i++) cp->pieces[0][i] = cp->pieces[1][i] = (i%3==1?0:1); switch(colmode) { case CUBE21_COLOR_RANDOM: case CUBE21_COLOR_TWORND: case CUBE21_COLOR_SIXRND: for(i=0; i<6; i++) for(j=0; j<3; j++) cp->colors[i][j] = rndcolor(); break; case CUBE21_COLOR_SILVER: cp->colors[0][0] = 1.0; cp->colors[0][1] = 1.0; cp->colors[0][2] = 1.0; cp->colors[1][0] = rndcolor(); cp->colors[1][1] = rndcolor(); cp->colors[1][2] = rndcolor(); break; case CUBE21_COLOR_CLASSIC: for(i=0; i<6; i++) for(j=0; j<3; j++) cp->colors[i][j] = 0.2+0.7*ce_colors[i][j]; break; } switch(colmode) { case CUBE21_COLOR_SILVER: case CUBE21_COLOR_TWORND: for(i=0; i<5; i++) for(j=0; j<12; j++) if(i==0) cp->cind[i][j] = 0; else if(i==2) cp->cind[i][j] = 1; else cp->cind[i][j] = ((j+5)%12)>=6?1:0; break; case CUBE21_COLOR_CLASSIC: case CUBE21_COLOR_SIXRND: for(i=0; i<5; i++) for(j=0; j<12; j++) if(i==0) cp->cind[i][j] = 4; else if(i==2) cp->cind[i][j] = 5; else cp->cind[i][j] = ((j+5)%12)/3; break; case CUBE21_COLOR_RANDOM: for(i=0; i<5; i++) for(j=0; j<12; j++) cp->cind[i][j] = 0; break; } if(rndstart) randomize(cp); } /*************************************************************************/ ENTRYPOINT void reshape_cube21(ModeInfo *mi, int width, int height) { cube21_conf *cp = &cube21[MI_SCREEN(mi)]; if(!height) height = 1; cp->ratio = (GLfloat)width/(GLfloat)height; glViewport(0, 0, (GLint) width, (GLint) height); glMatrixMode(GL_PROJECTION); glLoadIdentity(); gluPerspective(30.0, cp->ratio, 1.0, 100.0); glMatrixMode(GL_MODELVIEW); glClear(GL_COLOR_BUFFER_BIT); } ENTRYPOINT Bool cube21_handle_event (ModeInfo *mi, XEvent *event) { cube21_conf *cp = &cube21[MI_SCREEN(mi)]; if (gltrackball_event_handler (event, cp->trackball, MI_WIDTH (mi), MI_HEIGHT (mi), &cp->button_down_p)) return True; return False; } ENTRYPOINT void release_cube21(ModeInfo *mi) { if (cube21 != NULL) { int screen; for (screen = 0; screen < MI_NUM_SCREENS(mi); screen++) { cube21_conf *cp = &cube21[screen]; if (cp->glx_context) { cp->glx_context = NULL; } } free((void *)cube21); cube21 = NULL; } FreeAllGL(mi); } ENTRYPOINT void init_cube21(ModeInfo *mi) { cube21_conf *cp; if(!cube21) { cube21 = (cube21_conf *)calloc(MI_NUM_SCREENS(mi), sizeof(cube21_conf)); if(!cube21) return; } cp = &cube21[MI_SCREEN(mi)]; cp->trackball = gltrackball_init (False); if(!cp->texp) { init_posc(cp); make_texture(cp); } #ifdef HAVE_MOBILE size *= 2; #endif if ((cp->glx_context = init_GL(mi)) != NULL) { init_gl(mi); init_cp(cp); reshape_cube21(mi, MI_WIDTH(mi), MI_HEIGHT(mi)); } else { MI_CLEARWINDOW(mi); } } ENTRYPOINT void draw_cube21(ModeInfo * mi) { Display *display = MI_DISPLAY(mi); Window window = MI_WINDOW(mi); cube21_conf *cp; if (!cube21) return; cp = &cube21[MI_SCREEN(mi)]; MI_IS_DRAWN(mi) = True; if (!cp->glx_context) return; mi->polygon_count = 0; glXMakeCurrent(display, window, *(cp->glx_context)); if (!draw_main(mi, cp)) { release_cube21(mi); return; } if (MI_IS_FPS(mi)) do_fps (mi); glFlush(); glXSwapBuffers(display, window); } #ifndef STANDALONE ENTRYPOINT void change_cube21(ModeInfo * mi) { cube21_conf *cp = &cube21[MI_SCREEN(mi)]; if (!cp->glx_context) return; glXMakeCurrent(MI_DISPLAY(mi), MI_WINDOW(mi), *(cp->glx_context)); init_gl(mi); } #endif /* !STANDALONE */ XSCREENSAVER_MODULE ("Cube21", cube21) #endif xscreensaver-5.36/hacks/glx/timetunnel.c000664 000767 000024 00000105762 12721401330 020357 0ustar00jwzstaff000000 000000 /* timetunnel. Based on dangerball.c, hack by Sean Brennan */ /* dangerball, Copyright (c) 2001-2014 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. */ #define GL_GLEXT_PROTOTYPES 1 #include /* for log2 */ #define DEFAULTS "*delay: 30000 \n" \ "*count: 30 \n" \ "*showFPS: False \n" \ "*timeStart: 0.0 \n" \ "*timeEnd: 27.79 \n" \ "*wireframe: False \n" \ # define refresh_tunnel 0 # define release_tunnel 0 #undef countof #define countof(x) (sizeof((x))/sizeof((*x))) #include "xlockmore.h" #include "colors.h" #include "rotator.h" #include "gltrackball.h" #define DEF_START "0.00" #define DEF_DILATE "1.00" #define DEF_END "27.79" #define DEF_LOCKLOGO "False" #define DEF_DRAWLOGO "True" #define DEF_REVERSE "False" #define DEF_FOG "True" #define DEF_TEXTURE "True" #define MAX_TEXTURE 10 #define CYL_LEN 14.0 #define DIAMOND_LEN 10.0 static float start, end, dilate; static Bool do_texture, drawlogo, wire, reverse, do_fog; static const char *do_tx1, *do_tx2, *do_tx3, *do_tun1, *do_tun2, *do_tun3; static XrmOptionDescRec opts[] = { {"-texture" , ".texture", XrmoptionNoArg, "true" }, {"+texture" , ".texture", XrmoptionNoArg, "false" }, {"-start" , ".start", XrmoptionSepArg, 0 }, {"-end" , ".end", XrmoptionSepArg, 0 }, {"-dilate" , ".dilate", XrmoptionSepArg, 0 }, {"+logo" , ".drawlogo", XrmoptionNoArg, "false" }, {"-reverse" , ".reverse", XrmoptionNoArg, "true" }, {"+fog" , ".fog", XrmoptionNoArg, "false" }, {"-marquee" , ".marquee", XrmoptionSepArg, 0}, /* {"+marquee" , ".marquee", XrmoptionNoArg, "(none)"}, */ {"-tardis" , ".tardis", XrmoptionSepArg, 0}, /* {"+tardis" , ".tardis", XrmoptionNoArg, "(none)"}, */ {"-head" , ".head", XrmoptionSepArg, 0}, /* {"+head" , ".head", XrmoptionNoArg, "(none)"}, */ {"-tun1" , ".tun1", XrmoptionSepArg, 0}, /* {"+tun1" , ".tun1", XrmoptionNoArg, "(none)"}, */ {"-tun2" , ".tun2", XrmoptionSepArg, 0}, /* {"+tun2" , ".tun2", XrmoptionNoArg, "(none)"}, */ {"-tun3" , ".tun3", XrmoptionSepArg, 0}, /* {"+tun3" , ".tun3", XrmoptionNoArg, "(none)"}, */ }; static argtype vars[] = { {&do_texture, "texture", "Texture", DEF_TEXTURE, t_Bool}, {&start, "start", "Start", DEF_START, t_Float}, {&end, "end", "End", DEF_END , t_Float}, {&dilate, "dilate", "Dilate", DEF_DILATE , t_Float}, {&drawlogo, "drawlogo", "DrawLogo", DEF_DRAWLOGO , t_Bool}, {&reverse, "reverse", "Reverse", DEF_REVERSE , t_Bool}, {&do_fog, "fog", "Fog", DEF_FOG , t_Bool}, {&do_tx1, "marquee", "Marquee", "(none)", t_String}, {&do_tx2, "tardis", "Tardis", "(none)", t_String}, {&do_tx3, "head", "Head", "(none)", t_String}, {&do_tun1, "tun1", "Tunnel 1", "(none)", t_String}, {&do_tun2, "tun2", "Tunnel 2", "(none)", t_String}, {&do_tun3, "tun3", "Tunnel 3", "(none)", t_String}, }; ENTRYPOINT ModeSpecOpt tunnel_opts = {countof(opts), opts, countof(vars), vars, NULL}; #include "xpm-ximage.h" #include "images/logo-180.xpm" #include "images/tunnelstar.xpm" #include "images/timetunnel0.xpm" #include "images/timetunnel1.xpm" #include "images/timetunnel2.xpm" #ifdef USE_GL /* whole file */ /* ANIMATION CONTROLS */ /* an effect is a collection of floating point variables that vary with time. A knot is a timestamp with an array of floats. State is the current values of the floats. State is set by linearly interpolating between knots */ typedef struct { float *knots, *state; int numknots, knotwidth; float direction; } effect_t; typedef struct { GLXContext *glx_context; rotator *rot; trackball_state *trackball; Bool button_down_p; int time_oldusec, time_oldsec; int num_texshifts; /* animates tunnels. Not an effect. */ GLfloat pos, *texshift; GLuint texture_binds[MAX_TEXTURE], cyllist, diamondlist; float effect_time, effect_maxsecs; /* global time controls */ float start_time, end_time; int num_effects; effect_t *effects; /* array of all effects */ } tunnel_configuration; static tunnel_configuration *tconf = NULL; /* allocate memory and populate effect with knot data */ static void init_effect(effect_t *e, int numk, int kwidth, float dir, float *data ) { int i, j; e->numknots = numk; e->knotwidth = kwidth; e->direction = dir; e->knots = calloc(numk * kwidth, sizeof(float)); e->state = calloc(numk, sizeof(float)); for ( i = 0 ; i < e->numknots ; i++) for ( j = 0 ; j < e->knotwidth; j++) e->knots[i * kwidth + j] = data[i * kwidth + j]; } /* static knot data. each effect is listed and knot data is hard coded. Knots are linerally interpolated to yield float values, depending on knot width. knot format is [time, data, data, data...]. Data can be alpha, zvalue, etc. */ static void init_effects(effect_t *e, int effectnum) { /* effect 1: wall tunnel. percent closed */ float e1d[6][2] = {{0.0, 0.055}, {2.77, 0.055}, {3.07,1.0}, {8.08, 1.0}, {8.08, 0.0}, {10.0, 0.0}}; /* effect 2: tardis. distance and alpha */ float e2d[8][3] = { {0.0, 0.0 , 0.0}, {3.44, 0.0 , 0.0}, {3.36, 5.4 , 0.0}, {4.24, 3.66, 1.0}, {6.51, 2.4, 0.94}, {8.08, 0.75 , 0.0}, {8.08, 0.0 , 0.0}, {10.0, 0.0, 0.0}}; /* effect 3: cylinder. alpha */ float e3d[5][2] = {{0.0, 0.0}, {6.41, 0.00}, {8.08, 1.0}, {14.81, 1.0}, {15.65, 0.0}}; /* effect 4: fog. color, density, start, end */ float e4d[9][5] = {{0.0 , 1.0, 0.45, 3.0, 15.0}, {6.40, 1.0, 0.45, 3.0, 14.0}, {8.08, 1.0, 0.95, 1.0, 14.0}, {15.17, 1.0, 0.95, 1.0, 6.0}, {15.51, 1.0, 0.95, 3.0, 8.0}, {23.35, 1.0, 0.95, 3.0, 8.0}, {24.02, 0.0, 0.95, 2.3, 5.0}, {26.02, 0.0, 0.95, 2.3, 5.0}, {27.72, 0.0, 1.00, 0.3, 0.9} }; /* effect 5: logo. dist, alpha */ float e5d[7][3] = {{0.0, 0.0, 0.0}, {16.52, 0.00, 0.0}, {16.52, 0.80, 0.01}, {17.18, 1.15, 1.0}, {22.36, 5.3, 1.0}, {22.69, 5.7, 0.0}, {22.69, 0.0, 0.0} }; /* effect 6: diamond tunnel. alpha */ float e6d[3][2] = {{0.0, 0.00}, {15.17, 0.00}, {15.51,1.0}}; /* effect 7: tardis cap draw . positive draws cap*/ float e7d[3][2] = {{0.0, -1.00}, {4.24, -1.00}, {4.24, 1.00}}; /* effect 8: star/asterisk: alpha */ float e8d[5][2] = {{0.0, .00}, {10.77, .00}, {11.48, 1.00}, {15.35, 1.00}, {16.12, 0.00}}; /* effect 9: whohead 1 alpha */ float e9d[5][2] = {{0.0, .00}, {13.35, .00}, {14.48, 1.00}, {15.17, 1.00}, {15.97, 0.00}}; /* {14.87, 1.00}, {15.17, 0.00}}; */ /* effect 10: whohead-brite alpha */ float e10d[5][2] = {{0.0, .00}, {11.34, .00}, {12.34, .20}, {13.35, 0.60}, {14.48, 0.00}}; /* {13.95, 0.00}}; */ /* effect 11: whohead-psy alpha */ float e11d[5][2] = {{0.0, .00}, {14.87, .00}, {15.17, 1.00}, {15.91, 0.00}, {16.12, 0.00}}; /* effect 12: whohead-silhouette pos-z, alpha */ float e12d[6][3] = {{0.0, 1.0, .00}, {15.07, 1.0, 0.00}, {15.07, 1.0, 1.00}, {16.01, 1.0, 1.00}, {16.78, 0.5, 1.00}, {16.78, 0.1, 0.00} }; /* effect 1: wall tunnel */ if (effectnum == 1) init_effect(e, 6, 2, -0.2, (float *) e1d); /* effect 2: tardisl */ if (effectnum == 2) init_effect(e, 8, 3, 1.0, (float *) e2d); /* effect 3: cylinder tunnel */ if (effectnum == 3) init_effect(e, 5, 2, 0.889 , (float *) e3d); /* effect 4: fog color */ if (effectnum == 4) init_effect(e, 9, 5, 1.0, (float *) e4d); /* effect 5: logo distance, alpha*/ if (effectnum == 5) init_effect(e, 7, 3, 1.0, (float *) e5d); /* effect 6: diamond tunnel, alpha*/ if (effectnum == 6) init_effect(e, 3, 2, 0.24 , (float *) e6d); /* effect 7: cap wall tunnel*/ if (effectnum == 7) init_effect(e, 3, 2, 1.0, (float *) e7d); /* effect 8: asterisk */ if (effectnum == 8) init_effect(e, 5, 2, 1.0, (float *) e8d); /* effect 9, 10, 11, 12: whoheads */ if (effectnum == 9 ) init_effect(e, 5, 2, 1.0, (float *) e9d); if (effectnum == 10 ) init_effect(e, 5, 2, 1.0, (float *) e10d); if (effectnum == 11 ) init_effect(e, 5, 2, 1.0, (float *) e11d); if (effectnum == 12 ) init_effect(e, 6, 3, 1.0, (float *) e12d); } /* set fog parameters, controlled by effect */ static void update_fog(float color, float density, float start, float end) { GLfloat col[4]; col[0] = col[1] = col[2] = color; col[3] = 1.0; glFogi(GL_FOG_MODE, GL_LINEAR); glFogfv(GL_FOG_COLOR, col); glFogf(GL_FOG_DENSITY, density); glFogf(GL_FOG_START, start); glFogf(GL_FOG_END, end); } /* set effect's floating point data values by linearally interpolating between two knots whose times bound the current time: eff_time */ static void update_knots(effect_t *e, float eff_time) { int i, j; float timedelta, lowknot, highknot, *curknot, *nextknot; for ( i = 0 ; i < e->numknots ; i++) if (e->knots[i * e->knotwidth] <= eff_time) { if ( i < e->numknots - 1) nextknot = e->knots + (i + 1) * e->knotwidth; else /*repeat last knot to carry knot data forward*/ nextknot = e->knots + (i) * e->knotwidth; curknot = e->knots + i * e->knotwidth; if (*nextknot - *curknot <= 0.0) timedelta = 1.0; else timedelta = (eff_time-*curknot)/(*nextknot-*curknot); if (timedelta > 1.0) timedelta = 1.0; for (j = 1 ; j < e->knotwidth ; j++) { highknot = (float) *(nextknot + j); lowknot = (float) *(curknot + j); e->state[j - 1 ] = lowknot+(highknot-lowknot)*timedelta; } } } /* Window management, etc */ ENTRYPOINT void reshape_tunnel (ModeInfo *mi, int width, int height) { GLfloat h = (GLfloat) height / (GLfloat) width; glViewport (0, 0, (GLint) width, (GLint) height); glMatrixMode(GL_PROJECTION); glLoadIdentity(); gluPerspective (90.0, 1/h, 0.2, 50.0); glMatrixMode(GL_MODELVIEW); glLoadIdentity(); gluLookAt( 0.0, 0.0, 0.3, 0.0, 0.0, 1.0, 0.0, 1.0, 0.0); glClear(GL_COLOR_BUFFER_BIT); } ENTRYPOINT Bool tunnel_handle_event (ModeInfo *mi, XEvent *event) { tunnel_configuration *tc = &tconf[MI_SCREEN(mi)]; if (gltrackball_event_handler (event, tc->trackball, MI_WIDTH (mi), MI_HEIGHT (mi), &tc->button_down_p)) return True; return False; } static void setTexParams(void) { glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT); glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_REPLACE); } static void update_animation(tunnel_configuration *tc) { /* time based, of course*/ /* shift texture based on elapsed time since previous call*/ struct timeval tv; struct timezone tz; int elapsed_usecs, elapsed_secs, i; float computed_timeshift; /* get new animation time */ gettimeofday(&tv, &tz); elapsed_secs = tv.tv_sec - tc->time_oldsec; elapsed_usecs = tv.tv_usec - tc->time_oldusec; /* store current time */ tc->time_oldsec = tv.tv_sec ; tc->time_oldusec = tv.tv_usec; /* elaped time. computed timeshift is tenths of a second */ computed_timeshift = (float) (elapsed_secs * 1000000. + elapsed_usecs)/ 100000.0; /* calibrate effect time to lie between start and end times */ /* loop if time exceeds end time */ if (reverse) tc->effect_time -= computed_timeshift / 10.0 * dilate; else tc->effect_time += computed_timeshift / 10.0 * dilate; if ( tc->effect_time >= tc->end_time) tc->effect_time = tc->start_time; if ( tc->effect_time < tc->start_time) tc->effect_time = tc->end_time;; /* move texture shifters in effect's direction, e.g. tardis tunnel moves backward, effect 1's direction */ if (reverse) { tc->texshift[0] -= tc->effects[1].direction * computed_timeshift/ 10.0; tc->texshift[1] -= tc->effects[3].direction * computed_timeshift/ 10.0; tc->texshift[2] -= tc->effects[6].direction * computed_timeshift/ 10.0; } else { tc->texshift[0] += tc->effects[1].direction * computed_timeshift/ 10.0; tc->texshift[1] += tc->effects[3].direction * computed_timeshift/ 10.0; tc->texshift[2] += tc->effects[6].direction * computed_timeshift/ 10.0; } /* loop texture shifters if necessary */ for ( i = 0 ; i < tc->num_texshifts; i++) { if (tc->texshift[i] > 1.0) tc->texshift[i] -= (int) tc->texshift[i]; if (tc->texshift[i]< -1.0) tc->texshift[i] -= (int) tc->texshift[i]; } /* update effect data with current time. Uses linear interpolation */ for ( i = 1 ; i <= tc->num_effects ; i++) update_knots(&tc->effects[i], tc->effect_time); } /*update_animation*/ /* draw a textured(tex) quad at a certain depth (z), and certain alpha (alpha), with aspect ratio (aspect), and blending mode (blend_mode) of either adding or subtracting. if alpha is zero or less, nothing happens */ static void draw_sign(ModeInfo *mi, tunnel_configuration *tc, float z, float alpha, float aspect, GLuint tex, int blend_mode) { #ifndef HAVE_JWZGLES if (alpha > 0.0) { mi->polygon_count ++; /* glEnable(GL_BLEND); */ glBlendColor(0.0, 0.0, 0.0, alpha); /*glBlendColor(0.0, 0.0, 0.0, 0.0); */ if (blend_mode == 1) { glBlendFunc(GL_CONSTANT_ALPHA, GL_ONE); glBlendEquation(GL_FUNC_REVERSE_SUBTRACT); } else if (blend_mode == 2) { glBlendFunc(GL_CONSTANT_ALPHA, GL_ONE); glBlendEquation(GL_FUNC_ADD); } else { glBlendFunc(GL_CONSTANT_ALPHA, GL_ONE_MINUS_CONSTANT_ALPHA); glBlendEquation(GL_FUNC_ADD); } /* blend mode switch */ #ifdef HAVE_GLBINDTEXTURE if (do_texture) glBindTexture(GL_TEXTURE_2D, tc->texture_binds[tex]); #endif glBegin(GL_QUADS); glTexCoord2f(1.0, 0.0); glVertex3f(-1.0 , -1.0 * aspect , z); glTexCoord2f(1.0, 1.0); glVertex3f(-1.0 , 1.0 * aspect , z); glTexCoord2f(0.0, 1.0); glVertex3f(1.0 , 1.0 * aspect , z); glTexCoord2f(0.0, 0.0); glVertex3f(1.0 , -1.0 * aspect , z); glEnd(); if (blend_mode != 0) { glBlendFunc(GL_CONSTANT_ALPHA, GL_ONE_MINUS_CONSTANT_ALPHA); glBlendEquation(GL_FUNC_ADD); } /* glDisable(GL_BLEND); */ } #endif /* !HAVE_JWZGLES */ } /* draw sign */ /* draw a time tunnel. used for both cylinder and diamond tunnels. uses texture shifter (indexed by shiftnum) to simulate motion. tunnel does not move, and is acutally a display list. if alpha = 0, skip */ static void draw_cyl(ModeInfo *mi, tunnel_configuration *tc, float alpha, int texnum, int listnum, int shiftnum) { #ifndef HAVE_JWZGLES if (alpha > 0.0) { if (listnum == tc->diamondlist) mi->polygon_count += 4; if (listnum == tc->cyllist) mi->polygon_count += 30; glMatrixMode(GL_TEXTURE); glLoadIdentity(); glTranslatef(tc->texshift[shiftnum], 0.0, 0.0); glMatrixMode(GL_MODELVIEW); /* glEnable(GL_BLEND); */ glBlendColor(0.0, 0.0, 0.0, alpha); glBlendFunc(GL_CONSTANT_ALPHA, GL_ONE_MINUS_CONSTANT_ALPHA); #ifdef HAVE_GLBINDTEXTURE if (do_texture) glBindTexture(GL_TEXTURE_2D, tc->texture_binds[texnum]); #endif glCallList(listnum); glMatrixMode(GL_TEXTURE); glLoadIdentity(); glMatrixMode(GL_MODELVIEW); /* glDisable(GL_BLEND); */ } #endif /* HAVE_JWZGLES */ } /* make tardis type tunnel. Starts as walls and then grows to outline of tardis. percent is how complete tardis outline is. cap is to draw cap for nice fog effects */ static void make_wall_tunnel(ModeInfo *mi, tunnel_configuration *tc, float percent, float cap) { /* tardis is about 2x1, so wrap tex around, starting at the base*/ /* tex coords are: _tl__tr_ | | l| |r | | -bl__br_ that's br=bottom right, etc. ttr is top-top-right */ float half_floor= 0.08333333333333333, full_wall = 0.33333333333333333; float br1, r0 , r1 , tr0, tr1, tl0, tl1, l0 , l1 , depth=0.3, zdepth=15.0; /* zdepth is how far back tunnel goes */ /* depth is tex coord scale. low number = fast texture shifting */ float textop, texbot; float height; br1 = half_floor; r0 = br1 ; r1 = r0 + full_wall; tr0 = r1; tr1 = r1 + half_floor; tl0 = tr1; tl1 = tl0 + half_floor; l0 = tr1; l1 = l0 + full_wall; glMatrixMode(GL_TEXTURE); glLoadIdentity(); glRotatef(90.0, 0.0, 0.0, 1.0); glTranslatef(tc->texshift[0], 0.0, 0.0); glMatrixMode(GL_MODELVIEW); #ifdef HAVE_GLBINDTEXTURE if (do_texture) glBindTexture(GL_TEXTURE_2D, tc->texture_binds[0]); #endif glColor3f(1.0, 1.0, 0.0); if (cap > 0.0 && percent > 0.0 && drawlogo && do_fog) { mi->polygon_count += 6; glBegin(GL_TRIANGLE_FAN); glVertex3f(0.0, 0.0, zdepth); glVertex3f(-1.0, -2.0, zdepth); glVertex3f(1.0, -2.0, zdepth); glVertex3f(1.0, 2.0, zdepth); glVertex3f(0.2, 2.0, zdepth); glVertex3f(0.2, 2.2, zdepth); glVertex3f(-0.2, 2.2, zdepth); glVertex3f(-0.2, 2.0, zdepth); glVertex3f(-1.0, 2.0, zdepth); glVertex3f(-1.0, -2.0, zdepth); glEnd(); } if (percent > ( full_wall * 2.0)) { glBegin(GL_QUADS); height = (percent - full_wall * 2.0) /( 1.0 - full_wall * 2.0); if (height > 1.0) height = 1.0; if ( height > 0.8) { mi->polygon_count += 2; if ( height > 0.90) { mi->polygon_count += 2; /* TTTR */ texbot = tr0; textop = tr0 + half_floor * height; glTexCoord2f(0.0, texbot); glVertex3f(0.2, 2.2, 0.0); glTexCoord2f(0.0, textop); glVertex3f(2.0 - height * 2.0, 2.2, 0.0); glTexCoord2f(depth, textop); glVertex3f(2.0 - height * 2.0, 2.2, zdepth); glTexCoord2f(depth, texbot); glVertex3f(0.2, 2.2, zdepth); /* TTTL */ texbot = tl1 - half_floor * height; textop = tl1; glTexCoord2f(0.0, texbot); glVertex3f(-2.0 + height * 2.0, 2.2, 0.0); glTexCoord2f(0.0, textop); glVertex3f(-0.2, 2.2, 0.0); glTexCoord2f(depth, textop); glVertex3f(-0.2, 2.2, zdepth); glTexCoord2f(depth, texbot); glVertex3f(-2.0 + height * 2.0, 2.2, zdepth); } if (height > 0.90) height = 0.90; /* TTR */ texbot = tr0; textop = tr0 + half_floor * height; glTexCoord2f(0.0, texbot); glVertex3f(0.2, 2.0, 0.0); glTexCoord2f(0.0, textop); glVertex3f(0.2, 0.4 + height * 2.0, 0.0); glTexCoord2f(depth, textop); glVertex3f(0.2, 0.4 + height * 2.0, zdepth); glTexCoord2f(depth, texbot); glVertex3f(0.2, 2.0, zdepth); /* TTL */ texbot = tl1 - half_floor * height; textop = tl1; glTexCoord2f(0.0, texbot); /*glVertex3f(-.2, 2.0 + (0.9 - height) * 2.0, 0.0); */ glVertex3f(-.2, 0.4 + height * 2.0, 0.0); glTexCoord2f(0.0, textop); glVertex3f(-.2, 2.0, 0.0); glTexCoord2f(depth, textop); glVertex3f(-.2, 2.0, zdepth); glTexCoord2f(depth, texbot); glVertex3f(-.2, 0.4 + height * 2.0, zdepth); } height = (percent - full_wall * 2.0) /( 1.0 - full_wall * 2.0); if (height > 0.8) height = 0.8; mi->polygon_count += 2; /* TR */ texbot = tr0; textop = tr0 + half_floor * height; glTexCoord2f(0.0, texbot); glVertex3f(1.0, 2.0, 0.0); glTexCoord2f(0.0, textop); glVertex3f(1.0 - height, 2.0, 0.0); glTexCoord2f(depth, textop); glVertex3f(1.0 - height, 2.0, zdepth); glTexCoord2f(depth, texbot); glVertex3f(1.0, 2.0, zdepth); /* TL */ texbot = tl1 - half_floor * height; textop = tl1; glTexCoord2f(0.0, texbot); glVertex3f(-1.0 + height, 2.0, 0.0); glTexCoord2f(0.0, textop); glVertex3f(-1.0, 2.0, 0.0); glTexCoord2f(depth, textop); glVertex3f(-1.0, 2.0, zdepth); glTexCoord2f(depth, texbot); glVertex3f(-1.0 + height, 2.0, zdepth); height = (percent - full_wall * 2.0) /( 1.0 - full_wall * 2.0); if (height > 1.0) height = 1.0; mi->polygon_count += 2; /* BR */ texbot = tr0; textop = tr0 + half_floor * height; glTexCoord2f(0.0, texbot); glVertex3f(1.0, -2.0, 0.0); glTexCoord2f(0.0, textop); glVertex3f(1.0 - height, -2.0, 0.0); glTexCoord2f(depth, textop); glVertex3f(1.0 - height, -2.0, zdepth); glTexCoord2f(depth, texbot); glVertex3f(1.0, -2.0, zdepth); /* BL */ texbot = tl1 - half_floor * height; textop = tl1; glTexCoord2f(0.0, texbot); glVertex3f(-1.0 + height, -2.0, 0.0); glTexCoord2f(0.0, textop); glVertex3f(-1.0, -2.0, 0.0); glTexCoord2f(depth, textop); glVertex3f(-1.0, -2.0, zdepth); glTexCoord2f(depth, texbot); glVertex3f(-1.0 + height, -2.0, zdepth); glEnd(); } if (percent > 0.0) { mi->polygon_count += 2; glBegin(GL_QUADS); height = percent / ( full_wall * 2.0); if (height > 1.0) height = 1.0; textop = (l0 + l1) / 2.0 - full_wall * 0.5 * height; texbot = (l0 + l1) / 2.0 + full_wall * 0.5 * height; glTexCoord2f(0.0, textop); glVertex3f(-1.0, height * 2, 0.0); glTexCoord2f(0.0, texbot); glVertex3f(-1.0, -height * 2, 0.0); glTexCoord2f(depth, texbot); glVertex3f(-1.0, -height * 2, zdepth); glTexCoord2f(depth, textop); glVertex3f(-1.0, height * 2, zdepth); textop = (r0 + r1) / 2.0 - full_wall * 0.5 * height; texbot = (r0 + r1) / 2.0 + full_wall * 0.5 * height; glTexCoord2f(0.0, texbot); glVertex3f(1.0, height * 2, 0.0); glTexCoord2f(0.0, textop); glVertex3f(1.0, -height * 2, 0.0); glTexCoord2f(depth, textop); glVertex3f(1.0, -height * 2, zdepth); glTexCoord2f(depth, texbot); glVertex3f(1.0, height * 2, zdepth); glEnd(); } glMatrixMode(GL_TEXTURE); glLoadIdentity(); glMatrixMode(GL_MODELVIEW); } /* make_wall_tunnel */ /* wraps an int to between min and max. Kind of like the remainder when devided by (max - min). Used to create torus mapping on square array */ static int wrapVal(int val, int min, int max) { int ret; ret = val; if (val >= max) ret = min + (val - max ) % (max - min); if (val < min) ret = max - (min - val) % (max - min); return(ret); } /*=================== Load Texture =========================================*/ /* ripped from atunnel.c, Copyright (c) E. Lassauge, 2003-2004. */ /* modified like so by Sean Brennan: take texture object for glbind removed xlock stuff Added filters: blur color / alpha channel [3x3 box filter, done [blur] times anegative : create b/w image from zero alpha. zero alpha gets bw_color, nonzero alpha gets 1.0 - bwcolor, then alpha flipped to 1-alpha. Inputs: xpm structure, or filename of xmp image. if filename == NULL, use structure. Outputs: texture bound to texutre Id texbind. */ static float mylog2(float x) { return ( log(x) / log(2));} static void LoadTexture(ModeInfo * mi, char **fn, const char *filename, GLuint texbind, int blur, float bw_color, Bool anegative, Bool onealpha) { /* looping and temporary array index variables */ int ix, iy, bx, by, indx, indy, boxsize, cchan, tmpidx, dtaidx; float boxdiv, tmpfa, blursum ; unsigned char *tmpbuf, tmpa; Bool rescale; XImage *teximage; /* Texture data */ rescale = False; boxsize = 2; boxdiv = 1.0 / ( boxsize * 2.0 + 1.0) / ( boxsize * 2.0 + 1.0); if (filename) teximage = xpm_file_to_ximage(MI_DISPLAY(mi), MI_VISUAL(mi), MI_COLORMAP(mi), filename); else teximage = xpm_to_ximage(MI_DISPLAY(mi), MI_VISUAL(mi), MI_COLORMAP(mi), fn); if (teximage == NULL) { fprintf(stderr, "%s: error reading the texture.\n", progname); glDeleteTextures(1, &texbind); do_texture = False; exit(0); } /* check if image is 2^kumquat, where kumquat is an integer between 1 and 10. Recale to nearest power of 2. */ tmpfa = mylog2((float) teximage->width); bx = 2 << (int) (tmpfa -1); if (bx != teximage->width) { rescale = True; if ((tmpfa - (int) tmpfa) > 0.5849) bx = bx * 2; } tmpfa = mylog2((float) teximage->height); by = 2 << (int) (tmpfa - 1); if (by != teximage->height) { rescale = True; if ((tmpfa - (int) tmpfa) > 0.5849) by = by * 2; } if (rescale) { #ifndef HAVE_JWZGLES tmpbuf = calloc(bx * by * 4, sizeof(unsigned char)); if (gluScaleImage(GL_RGBA, teximage->width, teximage->height, GL_UNSIGNED_BYTE, teximage->data, bx, by, GL_UNSIGNED_BYTE, tmpbuf)) check_gl_error("scale image"); free(teximage->data); teximage->data = (char *) tmpbuf; teximage->width = bx; teximage->height= by; #endif /* !HAVE_JWZGLES */ } /* end rescale code */ if (anegative ) { for (ix = 0 ; ix < teximage->height * teximage->width; ix++) { if (!teximage->data[ ix * 4 + 3]) { teximage->data[ ix * 4 + 3] = (unsigned char) 0xff; tmpa = (unsigned char) (bw_color * 0xff); } else { if (onealpha) teximage->data[ ix * 4 + 3] = (unsigned char) 0xff; else teximage->data[ ix * 4 + 3] = (unsigned char) 0xff - teximage->data[ ix * 4 + 3]; tmpa = (unsigned char) ((1.0 - bw_color) * 0xff); } /* make texture uniform b/w color */ teximage->data[ ix * 4 + 0] = (unsigned char) ( tmpa); teximage->data[ ix * 4 + 1] = (unsigned char) ( tmpa); teximage->data[ ix * 4 + 2] = (unsigned char) ( tmpa); /* negate alpha */ } } if (blur > 0) { if (! anegative ) /* anegative alread b/w's the whole image */ for (ix = 0 ; ix < teximage->height * teximage->width; ix++) if (!teximage->data[ ix * 4 + 3]) { teximage->data[ ix * 4 + 0] = (unsigned char) ( 255.0 * bw_color); teximage->data[ ix * 4 + 1] = (unsigned char) ( 255.0 * bw_color); teximage->data[ ix * 4 + 2] = (unsigned char) ( 255.0 * bw_color); } ; tmpbuf = calloc(teximage->height * teximage->width * 4, sizeof(unsigned char) ) ; while (blur--) { /* zero out tmp alpha buffer */ for (iy = 0 ; iy height * teximage->width * 4 ; iy++) tmpbuf[iy] = 0; for (cchan = 0; cchan < 4 ; cchan++) { for (iy = 0 ; iy < teximage->height ; iy++) { for (ix = 0 ; ix < teximage->width ; ix++) { dtaidx = (teximage->width * iy + ix) * 4; tmpa = teximage->data[dtaidx + cchan]; tmpfa = (float) tmpa * boxdiv; /* box filter */ for (by = -boxsize ; by <= boxsize; by++) { for (bx = -boxsize ; bx <= boxsize; bx++) { indx = wrapVal(ix + bx, 0, teximage->width); indy = wrapVal(iy + by, 0, teximage->height); tmpidx = (teximage->width * indy + indx) * 4; blursum = tmpfa; tmpbuf[tmpidx + cchan] += (unsigned char) blursum; } /* for bx */ } /* for by */ } /* for ix */ } /* for iy */ } /* for cchan */ /* copy back buffer */ for (ix = 0 ; ix < teximage->height * teximage->width * 4; ix++) teximage->data[ix] = tmpbuf[ix]; } /*while blur */ free(tmpbuf); /*tidy*/ } /* if blur */ clear_gl_error(); #ifdef HAVE_GLBINDTEXTURE glBindTexture(GL_TEXTURE_2D, texbind); clear_gl_error(); /* WTF? sometimes "invalid op" from glBindTexture! */ #endif glPixelStorei(GL_UNPACK_ALIGNMENT, 4); glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, teximage->width, teximage->height, 0, GL_RGBA, GL_UNSIGNED_BYTE, teximage->data); check_gl_error("texture"); setTexParams(); XDestroyImage(teximage); } /* creates cylinder for time tunnel. sides, zmin, zmax, rad(ius) obvious. stretch scales texture coords; makes tunnel go slower the larger it is. not drawn, but put into display list. */ static void makecyl(int sides, float zmin, float zmax, float rad, float stretch) { int i; float theta; /* cap */ if (do_fog) { glBegin(GL_TRIANGLE_FAN); glTexCoord2f(1.0, 0.0); glVertex3f(0.0 , 0.0 , zmax); for (i = 0 ; i <= sides; i++) { theta = 2.0 * M_PI * ((float) i / (float) sides); glVertex3f(cos(theta) * rad, sin(theta) * rad, zmax); } glVertex3f(cos(0.0) * rad, sin(0.0) * rad, zmax); glEnd(); } glBegin(GL_QUAD_STRIP); for (i = 0 ; i <= sides; i++) { if ( i != sides) { theta = 2.0 * M_PI * ((float) i / (float) sides); glTexCoord2f(0.0, 1.0 * (float) i / (float) sides); glVertex3f(cos(theta) * rad, sin(theta) * rad, zmin); glTexCoord2f(stretch, 1.0 * (float) i / (float) sides); glVertex3f(cos(theta) * rad, sin(theta) * rad, zmax); } else { theta = 0.0; glTexCoord2f(0.0, 1.0); glVertex3f(cos(theta) * rad, sin(theta) * rad, zmin); glTexCoord2f(stretch, 1.0); glVertex3f(cos(theta) * rad, sin(theta) * rad, zmax); } } glEnd(); } ENTRYPOINT void init_tunnel (ModeInfo *mi) { int i; tunnel_configuration *tc; wire = MI_IS_WIREFRAME(mi); # ifdef HAVE_JWZGLES /* #### glPolygonMode other than GL_FILL unimplemented */ wire = 0; # endif if (!tconf) { tconf = (tunnel_configuration *) calloc (MI_NUM_SCREENS(mi), sizeof (tunnel_configuration)); if (!tconf) { fprintf(stderr, "%s: out of memory\n", progname); exit(1); } } tc = &tconf[MI_SCREEN(mi)]; tc->glx_context = init_GL(mi); tc->cyllist = glGenLists(1); tc->diamondlist = glGenLists(1); tc->num_effects = 12; tc->num_texshifts = 3; tc->effect_time = 0.0; tc->effect_maxsecs = 30.00; /* check bounds on cmd line opts */ if (start > tc->effect_maxsecs) start = tc->effect_maxsecs; if (end > tc->effect_maxsecs) end = tc->effect_maxsecs; if (start < tc->effect_time) start = tc->effect_time; if (end < tc->effect_time) end = tc->effect_time; /* set loop times, in seconds */ tc->start_time = start; tc->end_time = end; /* reset animation knots, effect 0 not defined. */ tc->effects = malloc(sizeof(effect_t) * ( tc->num_effects + 1)); for ( i = 1; i <= tc->num_effects ; i++) init_effects(&tc->effects[i], i); if (wire) { glPolygonMode(GL_FRONT_AND_BACK, GL_LINE); do_texture = False; } if (do_texture) { /* the following textures are loaded, and possible overridden: tunnel 1, tunnel 2, tunnel 3, marquee, tardis, head */ glGenTextures(MAX_TEXTURE, tc->texture_binds); /*LoadTexture(*mi, **fn, *filename, texbind, bluralpha, bw_color, anegative, onealpha)*/ if (strcasecmp (do_tun1, "(none)")) /* tunnel 1 */ LoadTexture(mi, NULL, do_tun1, tc->texture_binds[0], 0,0.0, False, False); else LoadTexture(mi, timetunnel0_xpm, NULL, tc->texture_binds[0], 0, 0.0, False, False); if (strcasecmp (do_tun2, "(none)")) /* tunnel 2 */ LoadTexture(mi, NULL, do_tun2, tc->texture_binds[2], 0,0.0, False, False); else LoadTexture(mi, timetunnel1_xpm, NULL, tc->texture_binds[2], 0, 0.0, False, False); if (strcasecmp (do_tun3, "(none)")) /* tunnel 3 */ LoadTexture(mi, NULL, do_tun3, tc->texture_binds[5], 0,0.0, False, False); else LoadTexture(mi, timetunnel2_xpm, NULL, tc->texture_binds[5], 0, 0.0, False, False); LoadTexture(mi, tunnelstar_xpm, NULL, tc->texture_binds[4], 0, 0.0, False, False); if (strcasecmp (do_tx1, "(none)")) /* marquee */ LoadTexture(mi, NULL, do_tx1, tc->texture_binds[3], 0,0.0, False, False); #ifndef HAVE_JWZGLES /* logo_180_xpm is 180px which is not a power of 2! */ else LoadTexture(mi, (char **) logo_180_xpm, NULL, tc->texture_binds[3], 0,0.0, False, False); #endif if (strcasecmp (do_tx2, "(none)")) /* tardis */ LoadTexture(mi, NULL, do_tx2, tc->texture_binds[1], 0, 0.0 ,False, False); #ifndef HAVE_JWZGLES /* logo_180_xpm is 180px which is not a power of 2! */ else LoadTexture(mi, (char **) logo_180_xpm, NULL, tc->texture_binds[1], 0,0.0, False, False); #endif if (strcasecmp (do_tx3, "(none)")) { /* head */ LoadTexture(mi, NULL, do_tx3, tc->texture_binds[6], 0, 0.0 ,False, False); /* negative */ LoadTexture(mi, NULL, do_tx3, tc->texture_binds[9], 2,1.0, True, True); #ifndef HAVE_JWZGLES /* logo_180_xpm is 180px which is not a power of 2! */ } else { LoadTexture(mi, (char **) logo_180_xpm, NULL, tc->texture_binds[6], 0,0.0, False, False); /* negative */ LoadTexture(mi, (char **) logo_180_xpm, NULL, tc->texture_binds[9], 2,1.0, True, True); #endif } glEnable(GL_TEXTURE_2D); check_gl_error("tex"); } reshape_tunnel (mi, MI_WIDTH(mi), MI_HEIGHT(mi)); glDisable(GL_DEPTH_TEST); /* who needs it? ;-) */ if (do_fog) glEnable(GL_FOG); if (!wire) { glEnable(GL_ALPHA_TEST); glAlphaFunc(GL_GREATER, 0.5); } tc->trackball = gltrackball_init (True); tc->texshift = calloc(tc->num_texshifts, sizeof(GLfloat)); for ( i = 0 ; i < tc->num_texshifts; i++) tc->texshift[i] = 0.0; glNewList(tc->cyllist, GL_COMPILE); makecyl(30, -0.1, CYL_LEN, 1., 10. / 40.0 * CYL_LEN); /*makecyl(30, -0.5, DIAMOND_LEN, 1., 4. / 40 * DIAMOND_LEN); */ glEndList(); glNewList(tc->diamondlist, GL_COMPILE); makecyl(4, -0.5, DIAMOND_LEN, 1., 4. / 40 * DIAMOND_LEN); glEndList(); } ENTRYPOINT void draw_tunnel (ModeInfo *mi) { tunnel_configuration *tc = &tconf[MI_SCREEN(mi)]; Display *dpy = MI_DISPLAY(mi); Window window = MI_WINDOW(mi); if (!tc->glx_context) return; glXMakeCurrent(MI_DISPLAY(mi), MI_WINDOW(mi), *(tc->glx_context)); glShadeModel(GL_SMOOTH); glEnable(GL_NORMALIZE); /* glEnable(GL_CULL_FACE); */ glClear(GL_COLOR_BUFFER_BIT ); update_animation(tc); glPushMatrix (); glRotatef(180., 0., 1., 0.); gltrackball_rotate (tc->trackball); glRotatef(180., 0., 1., 0.); mi->polygon_count = 0; update_fog(tc->effects[4].state[0], /*color*/ tc->effects[4].state[1], /*density*/ tc->effects[4].state[2], /*start*/ tc->effects[4].state[3]); /*end*/ /* --- begin composite image assembly --- */ /* head mask and draw diamond tunnel */ glEnable(GL_BLEND); draw_cyl(mi, tc, tc->effects[6].state[0], 5, tc->diamondlist, 2); if (drawlogo) draw_sign(mi, tc,tc->effects[12].state[0], tc->effects[12].state[1], 1.0 / 1.33, 9, 1); glDisable(GL_BLEND); /* then tardis tunnel */ make_wall_tunnel(mi, tc, tc->effects[1].state[0], tc->effects[7].state[0]); /* then cylinder tunnel */ glEnable(GL_BLEND); draw_cyl(mi, tc, tc->effects[3].state[0], 2, tc->cyllist, 1); /*void draw_sign(mi, tc,z,alpha,aspect,tex,blendmode)*/ /* tardis */ if (drawlogo) draw_sign(mi, tc, tc->effects[2].state[0], tc->effects[2].state[1], 2.0, 1, 0); /* marquee */ if (drawlogo) draw_sign(mi, tc, tc->effects[5].state[0], tc->effects[5].state[1], 1.0, 3, 0); /*who head brite*/ if (drawlogo) draw_sign(mi, tc,1.0, tc->effects[10].state[0], 1.0 / 1.33, 6, 2); /*who head psychadelic REMOVED*/ /* draw_sign(mi, tc,1.0, tc->effects[11].state[0], 1.0 / 1.33, 8, 0); */ /* star */ /* draw_sign(mi, tc, tc->effects[8].state[0]tc->effects[8].state[0], 1.0 , 1.0, 4, 1); */ draw_sign(mi, tc, tc->effects[8].state[0], tc->effects[8].state[0], 1.0, 4, 1); /* normal head */ if (drawlogo) draw_sign(mi, tc,1.0, tc->effects[9].state[0], 1.0 / 1.33, 6, 0); /* --- end composite image assembly --- */ glPopMatrix (); if (mi->fps_p) do_fps (mi); glFinish(); check_gl_error("drawing done, calling swap buffers"); glXSwapBuffers(dpy, window); } XSCREENSAVER_MODULE_2 ("TimeTunnel", timetunnel, tunnel) #endif /* USE_GL */ xscreensaver-5.36/hacks/glx/juggler3d.c000664 000767 000024 00000243005 12701612217 020060 0ustar00jwzstaff000000 000000 /* juggle, Copyright (c) 1996-2009 Tim Auckland * and Jamie Zawinski * * Permission to use, copy, modify, and distribute this software and its * documentation for any purpose and without fee is hereby granted, * provided that the above copyright notice appear in all copies and that * both that copyright notice and this permission notice appear in * supporting documentation. * * This file is provided AS IS with no warranties of any kind. The author * shall have no liability with respect to the infringement of copyrights, * trade secrets or any patents by this file or any part thereof. In no * event will the author be liable for any lost revenue or profits or * other special, indirect and consequential damages. * * NOTE: this program was originally called "juggle" and was 2D Xlib. * There was another program called "juggler3d" that was OpenGL. * In 2009, jwz converted "juggle" to OpenGL and renamed * "juggle" to "juggler3d". The old "juggler3d" hack is gone. * * Revision History * 09-Aug-2009: jwz: converted from Xlib to OpenGL. * 13-Dec-2004: [TDA] Use -cycles and -count in a rational manner. * Add -rings, -bballs. Add -describe. Finally made * live pattern updates possible. Add refill_juggle(), * change_juggle() and reshape_juggle(). Make * init_juggle() non-destructive. Reorder erase/draw * operations. Update xscreensaver xml and manpage. * 15-Nov-2004: [TDA] Fix all memory leaks. * 12-Nov-2004: [TDA] Add -torches and another new trail * implementation, so that different objects can have * different length trails. * 11-Nov-2004: [TDA] Clap when all the balls are in the air. * 10-Nov-2004: [TDA] Display pattern name converted to hight * notation. * 31-Oct-2004: [TDA] Add -clubs and new trail implementation. * 02-Sep-2003: Non-real time to see what is happening without a * strobe effect for slow machines. * 01-Nov-2000: Allocation checks * 1996: Written */ /*- * TODO * Implement the anonymously promised -uni option. */ /* * Notes on Adam Chalcraft Juggling Notation (used by permission) * a-> Adam's notation s-> Site swap (Cambridge) notation * * To define a map from a-notation to s-notation ("site-swap"), both * of which look like doubly infinite sequences of natural numbers. In * s-notation, there is a restriction on what is allowed, namely for * the sequence s_n, the associated function f(n)=n+s_n must be a * bijection. In a-notation, there is no restriction. * * To go from a-notation to s-notation, you start by mapping each a_n * to a permutation of N, the natural numbers. * * 0 -> the identity * 1 -> (10) [i.e. f(1)=0, f(0)=1] * 2 -> (210) [i.e. f(2)=1, f(1)=0, f(0)=2] * 3 -> (3210) [i.e. f(3)=2, f(2)=1, f(1)=0, f(0)=3] * etc. * * Then for each n, you look at how long 0 takes to get back to 0 * again and you call this t_n. If a_n=0, for example, then since the * identity leaves 0 alone, it gets back to 0 in 1 step, so t_n=1. If * a_n=1, then f(0)=1. Now any further a_n=0 leave 1 alone, but the * next a_n>0 sends 1 back to 0. Hence t_n is 2 + the number of 0's * following the 1. Finally, set s_n = t_n - 1. * * To give some examples, it helps to have a notation for cyclic * sequences. By (123), for example, I mean ...123123123123... . Now * under the a-notation -> s-notation mapping we have some familiar * examples: * * (0)->(0), (1)->(1), (2)->(2) etc. * (21)->(31), (31)->(51), (41)->(71) etc. * (10)->(20), (20)->(40), (30)->(60) etc. * (331)->(441), (312)->(612), (303)->(504), (321)->(531) * (43)->(53), (434)->(534), (433)->(633) * (552)->(672) * * In general, the number of balls is the *average* of the s-notation, * and the *maximum* of the a-notation. Another theorem is that the * minimum values in the a-notation and the s-notation and equal, and * preserved in the same positions. * * The usefulness of a-notation is the fact that there are no * restrictions on what is allowed. This makes random juggle * generation much easier. It also makes enumeration very * easy. Another handy feature is computing changes. Suppose you can * do (5) and want a neat change up to (771) in s-notation [Mike Day * actually needed this example!]. Write them both in a-notation, * which gives (5) and (551). Now concatenate them (in general, there * may be more than one way to do this, but not in this example), to * get * * ...55555555551551551551551... * * Now convert back to s-notation, to get * * ...55555566771771771771771... * * So the answer is to do two 6 throws and then go straight into * (771). Coming back down of course, * * ...5515515515515515555555555... * * converts to * * ...7717717717716615555555555... * * so the answer is to do a single 661 and then drop straight down to * (5). * * [The number of balls in the generated pattern occasionally changes. * In order to decrease the number of balls I had to introduce a new * symbol into the Adam notation, [*] which means 'lose the current * ball'.] */ /* This code uses so many linked lists it's worth having a built-in * leak-checker */ #undef MEMTEST # define DEFAULTS "*delay: 10000 \n" \ "*count: 200 \n" \ "*cycles: 1000 \n" \ "*ncolors: 32 \n" \ "*titleFont: -*-helvetica-bold-r-normal-*-*-180-*-*-*-*-*-*\n" \ "*showFPS: False \n" \ "*wireframe: False \n" \ # define refresh_juggle 0 #undef countof #define countof(x) (sizeof((x))/sizeof((*x))) #include "xlockmore.h" #include "sphere.h" #include "tube.h" #include "rotator.h" #include "gltrackball.h" #include "texfont.h" #include #ifdef USE_GL /* whole file */ #define DEF_PATTERN "random" /* All patterns */ #define DEF_TAIL "1" /* No trace */ #ifdef UNI /* Maybe a ROLA BOLA would be at a better angle for viewing */ #define DEF_UNI "False" /* No unicycle */ /* Not implemented yet */ #endif #define DEF_REAL "True" #define DEF_DESCRIBE "True" #define DEF_BALLS "True" /* Use Balls */ #define DEF_CLUBS "True" /* Use Clubs */ #define DEF_TORCHES "True" /* Use Torches */ #define DEF_KNIVES "True" /* Use Knives */ #define DEF_RINGS "True" /* Use Rings */ #define DEF_BBALLS "True" /* Use Bowling Balls */ static char *pattern; static int tail; #ifdef UNI static Bool uni; #endif static Bool real; static Bool describe; static Bool balls; static Bool clubs; static Bool torches; static Bool knives; static Bool rings; static Bool bballs; static char *only; static XrmOptionDescRec opts[] = { {"-pattern", ".juggle.pattern", XrmoptionSepArg, NULL }, {"-tail", ".juggle.tail", XrmoptionSepArg, NULL }, #ifdef UNI {"-uni", ".juggle.uni", XrmoptionNoArg, "on" }, {"+uni", ".juggle.uni", XrmoptionNoArg, "off" }, #endif {"-real", ".juggle.real", XrmoptionNoArg, "on" }, {"+real", ".juggle.real", XrmoptionNoArg, "off" }, {"-describe", ".juggle.describe", XrmoptionNoArg, "on" }, {"+describe", ".juggle.describe", XrmoptionNoArg, "off" }, {"-balls", ".juggle.balls", XrmoptionNoArg, "on" }, {"+balls", ".juggle.balls", XrmoptionNoArg, "off" }, {"-clubs", ".juggle.clubs", XrmoptionNoArg, "on" }, {"+clubs", ".juggle.clubs", XrmoptionNoArg, "off" }, {"-torches", ".juggle.torches", XrmoptionNoArg, "on" }, {"+torches", ".juggle.torches", XrmoptionNoArg, "off" }, {"-knives", ".juggle.knives", XrmoptionNoArg, "on" }, {"+knives", ".juggle.knives", XrmoptionNoArg, "off" }, {"-rings", ".juggle.rings", XrmoptionNoArg, "on" }, {"+rings", ".juggle.rings", XrmoptionNoArg, "off" }, {"-bballs", ".juggle.bballs", XrmoptionNoArg, "on" }, {"+bballs", ".juggle.bballs", XrmoptionNoArg, "off" }, {"-only", ".juggle.only", XrmoptionSepArg, NULL }, }; static argtype vars[] = { { &pattern, "pattern", "Pattern", DEF_PATTERN, t_String }, { &tail, "tail", "Tail", DEF_TAIL, t_Int }, #ifdef UNI { &uni, "uni", "Uni", DEF_UNI, t_Bool }, #endif { &real, "real", "Real", DEF_REAL, t_Bool }, { &describe, "describe", "Describe", DEF_DESCRIBE, t_Bool }, { &balls, "balls", "Clubs", DEF_BALLS, t_Bool }, { &clubs, "clubs", "Clubs", DEF_CLUBS, t_Bool }, { &torches, "torches", "Torches", DEF_TORCHES, t_Bool }, { &knives, "knives", "Knives", DEF_KNIVES, t_Bool }, { &rings, "rings", "Rings", DEF_RINGS, t_Bool }, { &bballs, "bballs", "BBalls", DEF_BBALLS, t_Bool }, { &only, "only", "BBalls", " ", t_String }, }; static OptionStruct desc[] = { { "-pattern string", "Cambridge Juggling Pattern" }, { "-tail num", "Trace Juggling Patterns" }, #ifdef UNI { "-/+uni", "Unicycle" }, #endif { "-/+real", "Real-time" }, { "-/+describe", "turn on/off pattern descriptions." }, { "-/+balls", "turn on/off Balls." }, { "-/+clubs", "turn on/off Clubs." }, { "-/+torches", "turn on/off Flaming Torches." }, { "-/+knives", "turn on/off Knives." }, { "-/+rings", "turn on/off Rings." }, { "-/+bballs", "turn on/off Bowling Balls." }, { "-only", "Turn off all objects but the named one." }, }; ENTRYPOINT ModeSpecOpt juggle_opts = {countof(opts), opts, countof(vars), vars, desc}; /* Note: All "lengths" are scaled by sp->scale = MI_HEIGHT/480. All "thicknesses" are scaled by sqrt(sp->scale) so that they are proportionally thicker for smaller windows. Objects spinning out of the plane (such as clubs) fake perspective by compressing their horizontal coordinates by PERSPEC */ /* Figure */ #define ARMLENGTH 50 #define ARMWIDTH ((int) (8.0 * sqrt(sp->scale))) #define POSE 10 #define BALLRADIUS ARMWIDTH /* build all the models assuming a 480px high scene */ #define SCENE_HEIGHT 480 #define SCENE_WIDTH ((int)(SCENE_HEIGHT*(MI_WIDTH(mi)/(float)MI_HEIGHT(mi)))) /*#define PERSPEC 0.4*/ /* macros */ #define GRAVITY(h, t) 4*(double)(h)/((t)*(t)) /* Timing based on count. Units are milliseconds. Juggles per second is: 2000 / THROW_CATCH_INTERVAL + CATCH_THROW_INTERVAL */ #define THROW_CATCH_INTERVAL (sp->count) #define THROW_NULL_INTERVAL (sp->count * 0.5) #define CATCH_THROW_INTERVAL (sp->count * 0.2) /******************************************************************** * Trace Definitions * * * * These record rendering data so that a drawn object can be erased * * later. Each object has its own Trace list. * * * ********************************************************************/ typedef struct {double x, y; } DXPoint; typedef struct trace *TracePtr; typedef struct trace { TracePtr next, prev; double x, y; double angle; int divisions; DXPoint dlast; #ifdef MEMTEST char pad[1024]; #endif } Trace; /******************************************************************* * Object Definitions * * * * These describe the various types of Object that can be juggled * * * *******************************************************************/ typedef int (DrawProc)(ModeInfo*, unsigned long, Trace *); static DrawProc show_ball, show_europeanclub, show_torch, show_knife; static DrawProc show_ring, show_bball; typedef enum {BALL, CLUB, TORCH, KNIFE, RING, BBALLS, NUM_OBJECT_TYPES} ObjType; #define OBJMIXPROB 20 /* inverse of the chances of using an odd object in the pattern */ static const GLfloat body_color_1[4] = { 0.9, 0.7, 0.5, 1 }; static const GLfloat body_color_2[4] = { 0.6, 0.4, 0.2, 1 }; static const struct { DrawProc *draw; /* Object Rendering function */ int handle; /* Length of object's handle */ int mintrail; /* Minimum trail length */ double cor; /* Coefficient of Restitution. perfect bounce = 1 */ double weight; /* Heavier objects don't get thrown as high */ } ObjectDefs[] = { { /* Ball */ show_ball, 0, 1, 0.9, 1.0, }, { /* Club */ show_europeanclub, 15, 1, 0.55, /* Clubs don't bounce too well */ 1.0, }, { /* Torch */ show_torch, 15, 20, /* Torches need flames */ 0, /* Torches don't bounce -- fire risk! */ 1.0, }, { /* Knife */ show_knife, 15, 1, 0, /* Knives don't bounce */ 1.0, }, { /* Ring */ show_ring, 15, 1, 0.8, 1.0, }, { /* Bowling Ball */ show_bball, 0, 1, 0.2, 5.0, }, }; /************************** * Trajectory definitions * **************************/ typedef enum {HEIGHT, ADAM} Notation; typedef enum {Empty, Full, Ball} Throwable; typedef enum {LEFT, RIGHT} Hand; typedef enum {THROW, CATCH} Action; typedef enum {HAND, ELBOW, SHOULDER} Joint; typedef enum {ATCH, THRATCH, ACTION, LINKEDACTION, PTHRATCH, BPREDICTOR, PREDICTOR} TrajectoryStatus; typedef struct {double a, b, c, d; } Spline; typedef DXPoint Arm[3]; /* Object is an arbitrary object being juggled. Each Trajectory * references an Object ("count" tracks this), and each Object is also * linked into a global Objects list. Objects may include a Trace * list for tracking erasures. */ typedef struct object *ObjectPtr; typedef struct object { ObjectPtr next, prev; ObjType type; int color; int count; /* reference count */ Bool active; /* Object is in use */ Trace *trace; int tracelen; int tail; #ifdef MEMTEST char pad[1024]; #endif } Object; /* Trajectory is a segment of juggling action. A list of Trajectories * defines the juggling performance. The Trajectory list goes through * multiple processing steps to convert it from basic juggling * notation into rendering data. */ typedef struct trajectory *TrajectoryPtr; typedef struct trajectory { TrajectoryPtr prev, next; /* for building list */ TrajectoryStatus status; /* Throw */ char posn; int height; int adam; char *pattern; char *name; /* Action */ Hand hand; Action action; /* LinkedAction */ int color; Object *object; int divisions; double angle, spin; TrajectoryPtr balllink; TrajectoryPtr handlink; /* PThratch */ double cx; /* Moving juggler */ double x, y; /* current position */ double dx, dy; /* initial velocity */ /* Predictor */ Throwable type; unsigned long start, finish; Spline xp, yp; #ifdef MEMTEST char pad[1024]; #endif } Trajectory; /******************* * Pattern Library * *******************/ typedef struct { const char * pattern; const char * name; } patternstruct; /* List of popular patterns, in any order */ /* Patterns should be given in Adam notation so the generator can concatenate them safely. Null descriptions are ok. Height notation will be displayed automatically. */ /* Can't const this because it is qsorted. This *should* be reentrant, I think... */ static /*const*/ patternstruct portfolio[] = { {"[+2 1]", /* +3 1 */ "Typical 2 ball juggler"}, {"[2 0]", /* 4 0 */ "2 in 1 hand"}, {"[2 0 1]", /* 5 0 1 */}, {"[+2 0 +2 0 0]" /* +5 0 +5 0 0 */}, {"[+2 0 1 2 2]", /* +4 0 1 2 3 */}, {"[2 0 1 1]", /* 6 0 1 1 */}, {"[3]", /* 3 */ "3 cascade"}, {"[+3]", /* +3 */ "reverse 3 cascade"}, {"[=3]", /* =3 */ "cascade 3 under arm"}, {"[&3]", /* &3 */ "cascade 3 catching under arm"}, {"[_3]", /* _3 */ "bouncing 3 cascade"}, {"[+3 x3 =3]", /* +3 x3 =3 */ "Mill's mess"}, {"[3 2 1]", /* 5 3 1" */}, {"[3 3 1]", /* 4 4 1" */}, {"[3 1 2]", /* 6 1 2 */ "See-saw"}, {"[=3 3 1 2]", /* =4 5 1 2 */}, {"[=3 2 2 3 1 2]", /* =6 2 2 5 1 2 */ "=4 5 1 2 stretched"}, {"[+3 3 1 3]", /* +4 4 1 3 */ "anemic shower box"}, {"[3 3 1]", /* 4 4 1 */}, {"[+3 2 3]", /* +4 2 3 */}, {"[+3 1]", /* +5 1 */ "3 shower"}, {"[_3 1]", /* _5 1 */ "bouncing 3 shower"}, {"[3 0 3 0 3]", /* 5 0 5 0 5 */ "shake 3 out of 5"}, {"[3 3 3 0 0]", /* 5 5 5 0 0 */ "flash 3 out of 5"}, {"[3 3 0]", /* 4 5 0 */ "complete waste of a 5 ball juggler"}, {"[3 3 3 0 0 0 0]", /* 7 7 7 0 0 0 0 */ "3 flash"}, {"[+3 0 +3 0 +3 0 0]", /* +7 0 +7 0 +7 0 0 */}, {"[3 2 2 0 3 2 0 2 3 0 2 2 0]", /* 7 3 3 0 7 3 0 3 7 0 3 3 0 */}, {"[3 0 2 0]", /* 8 0 4 0 */}, {"[_3 2 1]", /* _5 3 1 */}, {"[_3 0 1]", /* _8 0 1 */}, {"[1 _3 1 _3 0 1 _3 0]", /* 1 _7 1 _7 0 1 _7 0 */}, {"[_3 2 1 _3 1 2 1]", /* _6 3 1 _6 1 3 1 */}, {"[4]", /* 4 */ "4 cascade"}, {"[+4 3]", /* +5 3 */ "4 ball half shower"}, {"[4 4 2]", /* 5 5 2 */}, {"[+4 4 4 +4]", /* +4 4 4 +4 */ "4 columns"}, {"[+4 3 +4]", /* +5 3 +4 */}, {"[4 3 4 4]", /* 5 3 4 4 */}, {"[4 3 3 4]", /* 6 3 3 4 */}, {"[4 3 2 4", /* 6 4 2 4 */}, {"[+4 1]", /* +7 1 */ "4 shower"}, {"[4 4 4 4 0]", /* 5 5 5 5 0 */ "learning 5"}, {"[+4 x4 =4]", /* +4 x4 =4 */ "Mill's mess for 4"}, {"[+4 2 1 3]", /* +9 3 1 3 */}, {"[4 4 1 4 1 4]", /* 6 6 1 5 1 5, by Allen Knutson */}, {"[_4 _4 _4 1 _4 1]", /* _5 _6 _6 1 _5 1 */}, {"[_4 3 3]", /* _6 3 3 */}, {"[_4 3 1]", /* _7 4 1 */}, {"[_4 2 1]", /* _8 3 1 */}, {"[_4 3 3 3 0]", /* _8 4 4 4 0 */}, {"[_4 1 3 1]", /* _9 1 5 1 */}, {"[_4 1 3 1 2]", /* _10 1 6 1 2 */}, {"[5]", /* 5 */ "5 cascade"}, {"[_5 _5 _5 _5 _5 5 5 5 5 5]", /* _5 _5 _5 _5 _5 5 5 5 5 5 */}, {"[+5 x5 =5]", /* +5 x5 =5 */ "Mill's mess for 5"}, {"[5 4 4]", /* 7 4 4 */}, {"[_5 4 4]", /* _7 4 4 */}, {"[1 2 3 4 5 5 5 5 5]", /* 1 2 3 4 5 6 7 8 9 */ "5 ramp"}, {"[5 4 5 3 1]", /* 8 5 7 4 1, by Allen Knutson */}, {"[_5 4 1 +4]", /* _9 5 1 5 */}, {"[_5 4 +4 +4]", /* _8 4 +4 +4 */}, {"[_5 4 4 4 1]", /* _9 5 5 5 1 */}, {"[_5 4 4 5 1]",}, {"[_5 4 4 +4 4 0]", /*_10 5 5 +5 5 0 */}, {"[6]", /* 6 */ "6 cascade"}, {"[+6 5]", /* +7 5 */}, {"[6 4]", /* 8 4 */}, {"[+6 3]", /* +9 3 */}, {"[6 5 4 4]", /* 9 7 4 4 */}, {"[+6 5 5 5]", /* +9 5 5 5 */}, {"[6 0 6]", /* 9 0 9 */}, {"[_6 0 _6]", /* _9 0 _9 */}, {"[_7]", /* _7 */ "bouncing 7 cascade"}, {"[7]", /* 7 */ "7 cascade"}, {"[7 6 6 6 6]", /* 11 6 6 6 6 */ "Gatto's High Throw"}, }; typedef struct { int start; int number; } PatternIndex; struct patternindex { int minballs; int maxballs; PatternIndex index[countof(portfolio)]; }; /* Jugglestruct: per-screen global data. The master Object * and Trajectory lists are anchored here. */ typedef struct { GLXContext *glx_context; rotator *rot; trackball_state *trackball; Bool button_down_p; double scale; double cx; double Gr; Trajectory *head; Arm arm[2][2]; char *pattern; int count; int num_balls; time_t begintime; /* should make 'time' usable for at least 48 days on a 32-bit machine */ unsigned long time; /* millisecond timer*/ ObjType objtypes; Object *objects; struct patternindex patternindex; texture_font_data *font_data; } jugglestruct; static jugglestruct *juggles = (jugglestruct *) NULL; /******************* * list management * *******************/ #define DUP_OBJECT(n, t) { \ (n)->object = (t)->object; \ if((n)->object != NULL) (n)->object->count++; \ } /* t must point to an existing element. t must not be an expression ending ->next or ->prev */ #define REMOVE(t) { \ (t)->next->prev = (t)->prev; \ (t)->prev->next = (t)->next; \ free(t); \ } /* t receives element to be created and added to the list. ot must point to an existing element or be identical to t to start a new list. Applicable to Trajectories, Objects and Traces. */ #define ADD_ELEMENT(type, t, ot) \ if (((t) = (type*)calloc(1,sizeof(type))) != NULL) { \ (t)->next = (ot)->next; \ (t)->prev = (ot); \ (ot)->next = (t); \ (t)->next->prev = (t); \ } static void object_destroy(Object* o) { if(o->trace != NULL) { while(o->trace->next != o->trace) { Trace *s = o->trace->next; REMOVE(s); /* Don't eliminate 's' */ } free(o->trace); } REMOVE(o); } static void trajectory_destroy(Trajectory *t) { if(t->name != NULL) free(t->name); if(t->pattern != NULL) free(t->pattern); /* Reduce object link count and call destructor if necessary */ if(t->object != NULL && --t->object->count < 1 && t->object->tracelen == 0) { object_destroy(t->object); } REMOVE(t); /* Unlink and free */ } static void free_juggle(jugglestruct *sp) { if (sp->head != NULL) { while (sp->head->next != sp->head) { trajectory_destroy(sp->head->next); } free(sp->head); sp->head = (Trajectory *) NULL; } if(sp->objects != NULL) { while (sp->objects->next != sp->objects) { object_destroy(sp->objects->next); } free(sp->objects); sp->objects = (Object*)NULL; } if(sp->pattern != NULL) { free(sp->pattern); sp->pattern = NULL; } } static Bool add_throw(jugglestruct *sp, char type, int h, Notation n, const char* name) { Trajectory *t; ADD_ELEMENT(Trajectory, t, sp->head->prev); if(t == NULL){ /* Out of Memory */ free_juggle(sp); return False; } t->object = NULL; if(name != NULL) t->name = strdup(name); t->posn = type; if (n == ADAM) { t->adam = h; t->height = 0; t->status = ATCH; } else { t->height = h; t->status = THRATCH; } return True; } /* add a Thratch to the performance */ static Bool program(ModeInfo *mi, const char *patn, const char *name, int cycles) { jugglestruct *sp = &juggles[MI_SCREEN(mi)]; const char *p; int w, h, i, seen; Notation notation; char type; if (MI_IS_VERBOSE(mi)) { (void) fprintf(stderr, "juggle[%d]: Programmed: %s x %d\n", MI_SCREEN(mi), (name == NULL) ? patn : name, cycles); } for(w=i=0; i < cycles; i++, w++) { /* repeat until at least "cycles" throws have been programmed */ /* title is the pattern name to be supplied to the first throw of a sequence. If no name if given, use an empty title so that the sequences are still delimited. */ const char *title = (name != NULL)? name : ""; type=' '; h = 0; seen = 0; notation = HEIGHT; for(p=patn; *p; p++) { if (*p >= '0' && *p <='9') { seen = 1; h = 10*h + (*p - '0'); } else { Notation nn = notation; switch (*p) { case '[': /* begin Adam notation */ notation = ADAM; break; case '-': /* Inside throw */ type = ' '; break; case '+': /* Outside throw */ case '=': /* Cross throw */ case '&': /* Cross catch */ case 'x': /* Cross throw and catch */ case '_': /* Bounce */ case 'k': /* Kickup */ type = *p; break; case '*': /* Lose ball */ seen = 1; h = -1; /* fall through */ case ']': /* end Adam notation */ nn = HEIGHT; /* fall through */ case ' ': if (seen) { i++; if (!add_throw(sp, type, h, notation, title)) return False; title = NULL; type=' '; h = 0; seen = 0; } notation = nn; break; default: if(w == 0) { /* Only warn on first pass */ (void) fprintf(stderr, "juggle[%d]: Unexpected pattern instruction: '%c'\n", MI_SCREEN(mi), *p); } break; } } } if (seen) { /* end of sequence */ if (!add_throw(sp, type, h, notation, title)) return False; title = NULL; } } return True; } /* ~~~~\~~~~~\~~~ \\~\\~\~\\\~~~ \\~\\\\~\\\~\~ \\\\\\\\\\\~\\ [ 3 3 1 3 4 2 3 1 3 3 4 0 2 1 ] 4 4 1 3 12 2 4 1 4 4 13 0 3 1 */ #define BOUNCEOVER 10 #define KICKMIN 7 #define THROWMAX 20 /* Convert Adam notation into heights */ static void adam(jugglestruct *sp) { Trajectory *t, *p; for(t = sp->head->next; t != sp->head; t = t->next) { if (t->status == ATCH) { int a = t->adam; t->height = 0; for(p = t->next; a > 0; p = p->next) { if(p == sp->head) { t->height = -9; /* Indicate end of processing for name() */ return; } if (p->status != ATCH || p->adam < 0 || p->adam>= a) { a--; } t->height++; } if(t->height > BOUNCEOVER && t->posn == ' '){ t->posn = '_'; /* high defaults can be bounced */ } else if(t->height < 3 && t->posn == '_') { t->posn = ' '; /* Can't bounce short throws. */ } if(t->height < KICKMIN && t->posn == 'k'){ t->posn = ' '; /* Can't kick short throws */ } if(t->height > THROWMAX){ t->posn = 'k'; /* Use kicks for ridiculously high throws */ } t->status = THRATCH; } } } /* Discover converted heights and update the sequence title */ static void name(jugglestruct *sp) { Trajectory *t, *p; char buffer[BUFSIZ]; char *b; for(t = sp->head->next; t != sp->head; t = t->next) { if (t->status == THRATCH && t->name != NULL) { b = buffer; for(p = t; p == t || p->name == NULL; p = p->next) { if(p == sp->head || p->height < 0) { /* end of reliable data */ return; } if(p->posn == ' ') { b += sprintf(b, " %d", p->height); } else { b += sprintf(b, " %c%d", p->posn, p->height); } if(b - buffer > 500) break; /* otherwise this could eventually overflow. It'll be too big to display anyway. */ } if(*t->name != 0) { (void) sprintf(b, ", %s", t->name); } free(t->name); /* Don't need name any more, it's been converted to pattern */ t->name = NULL; if(t->pattern != NULL) free(t->pattern); t->pattern = strdup(buffer); } } } /* Split Thratch notation into explicit throws and catches. Usually Catch follows Throw in same hand, but take care of special cases. */ /* ..n1.. -> .. LTn RT1 LC RC .. */ /* ..nm.. -> .. LTn LC RTm RC .. */ static Bool part(jugglestruct *sp) { Trajectory *t, *nt, *p; Hand hand = (LRAND() & 1) ? RIGHT : LEFT; for (t = sp->head->next; t != sp->head; t = t->next) { if (t->status > THRATCH) { hand = t->hand; } else if (t->status == THRATCH) { char posn = '='; /* plausibility check */ if (t->height <= 2 && t->posn == '_') { t->posn = ' '; /* no short bounces */ } if (t->height <= 1 && (t->posn == '=' || t->posn == '&')) { t->posn = ' '; /* 1's need close catches */ } switch (t->posn) { /* throw catch */ case ' ': posn = '-'; t->posn = '+'; break; case '+': posn = '+'; t->posn = '-'; break; case '=': posn = '='; t->posn = '+'; break; case '&': posn = '+'; t->posn = '='; break; case 'x': posn = '='; t->posn = '='; break; case '_': posn = '_'; t->posn = '-'; break; case 'k': posn = 'k'; t->posn = 'k'; break; default: (void) fprintf(stderr, "juggle: unexpected posn %c\n", t->posn); break; } hand = (Hand) ((hand + 1) % 2); t->status = ACTION; t->hand = hand; p = t->prev; if (t->height == 1 && p != sp->head) { p = p->prev; /* '1's are thrown earlier than usual */ } t->action = CATCH; ADD_ELEMENT(Trajectory, nt, p); if(nt == NULL){ free_juggle(sp); return False; } nt->object = NULL; nt->status = ACTION; nt->action = THROW; nt->height = t->height; nt->hand = hand; nt->posn = posn; } } return True; } static ObjType choose_object(void) { ObjType o; for (;;) { o = (ObjType)NRAND((ObjType)NUM_OBJECT_TYPES); if(balls && o == BALL) break; if(clubs && o == CLUB) break; if(torches && o == TORCH) break; if(knives && o == KNIFE) break; if(rings && o == RING) break; if(bballs && o == BBALLS) break; } return o; } /* Connnect up throws and catches to figure out which ball goes where. Do the same with the juggler's hands. */ static void lob(ModeInfo *mi) { jugglestruct *sp = &juggles[MI_SCREEN(mi)]; Trajectory *t, *p; int h; for (t = sp->head->next; t != sp->head; t = t->next) { if (t->status == ACTION) { if (t->action == THROW) { if (t->type == Empty) { /* Create new Object */ ADD_ELEMENT(Object, t->object, sp->objects); t->object->count = 1; t->object->tracelen = 0; t->object->active = False; /* Initialise object's circular trace list */ ADD_ELEMENT(Trace, t->object->trace, t->object->trace); if (MI_NPIXELS(mi) > 2) { t->object->color = 1 + NRAND(MI_NPIXELS(mi) - 2); } else { #ifdef STANDALONE t->object->color = 1; #else t->object->color = 0; #endif } /* Small chance of picking a random object instead of the current theme. */ if(NRAND(OBJMIXPROB) == 0) { t->object->type = choose_object(); } else { t->object->type = sp->objtypes; } /* Check to see if we need trails for this object */ if(tail < ObjectDefs[t->object->type].mintrail) { t->object->tail = ObjectDefs[t->object->type].mintrail; } else { t->object->tail = tail; } } /* Balls can change divisions at each throw */ /* no, that looks stupid. -jwz */ if (t->divisions < 1) t->divisions = 2 * (NRAND(2) + 1); /* search forward for next catch in this hand */ for (p = t->next; t->handlink == NULL; p = p->next) { if(p->status < ACTION || p == sp->head) return; if (p->action == CATCH) { if (t->handlink == NULL && p->hand == t->hand) { t->handlink = p; } } } if (t->height > 0) { h = t->height - 1; /* search forward for next ball catch */ for (p = t->next; t->balllink == NULL; p = p->next) { if(p->status < ACTION || p == sp->head) { t->handlink = NULL; return; } if (p->action == CATCH) { if (t->balllink == NULL && --h < 1) { /* caught */ t->balllink = p; /* complete trajectory */ # if 0 if (p->type == Full) { (void) fprintf(stderr, "juggle[%d]: Dropped %d\n", MI_SCREEN(mi), t->object->color); } #endif p->type = Full; DUP_OBJECT(p, t); /* accept catch */ p->angle = t->angle; p->divisions = t->divisions; } } } } t->type = Empty; /* thrown */ } else if (t->action == CATCH) { /* search forward for next throw from this hand */ for (p = t->next; t->handlink == NULL; p = p->next) { if(p->status < ACTION || p == sp->head) return; if (p->action == THROW && p->hand == t->hand) { p->type = t->type; /* pass ball */ DUP_OBJECT(p, t); /* pass object */ p->divisions = t->divisions; t->handlink = p; } } } t->status = LINKEDACTION; } } } /* Clap when both hands are empty */ static void clap(jugglestruct *sp) { Trajectory *t, *p; for (t = sp->head->next; t != sp->head; t = t->next) { if (t->status == LINKEDACTION && t->action == CATCH && t->type == Empty && t->handlink != NULL && t->handlink->height == 0) { /* Completely idle hand */ for (p = t->next; p != sp->head; p = p->next) { if (p->status == LINKEDACTION && p->action == CATCH && p->hand != t->hand) { /* Next catch other hand */ if(p->type == Empty && p->handlink != NULL && p->handlink->height == 0) { /* Also completely idle */ t->handlink->posn = '^'; /* Move first hand's empty throw */ p->posn = '^'; /* to meet second hand's empty catch */ } break; /* Only need first catch */ } } } } } #define CUBIC(s, t) ((((s).a * (t) + (s).b) * (t) + (s).c) * (t) + (s).d) /* Compute single spline from x0 with velocity dx0 at time t0 to x1 with velocity dx1 at time t1 */ static Spline makeSpline(double x0, double dx0, int t0, double x1, double dx1, int t1) { Spline s; double a, b, c, d; double x10; double t10; x10 = x1 - x0; t10 = t1 - t0; a = ((dx0 + dx1)*t10 - 2*x10) / (t10*t10*t10); b = (3*x10 - (2*dx0 + dx1)*t10) / (t10*t10); c = dx0; d = x0; s.a = a; s.b = -3*a*t0 + b; s.c = (3*a*t0 - 2*b)*t0 + c; s.d = ((-a*t0 + b)*t0 - c)*t0 +d; return s; } /* Compute a pair of splines. s1 goes from x0 vith velocity dx0 at time t0 to x1 at time t1. s2 goes from x1 at time t1 to x2 with velocity dx2 at time t2. The arrival and departure velocities at x1, t1 must be the same. */ static double makeSplinePair(Spline *s1, Spline *s2, double x0, double dx0, int t0, double x1, int t1, double x2, double dx2, int t2) { double x10, x21, t21, t10, t20, dx1; x10 = x1 - x0; x21 = x2 - x1; t21 = t2 - t1; t10 = t1 - t0; t20 = t2 - t0; dx1 = (3*x10*t21*t21 + 3*x21*t10*t10 + 3*dx0*t10*t21*t21 - dx2*t10*t10*t21 - 4*dx0*t10*t21*t21) / (2*t10*t21*t20); *s1 = makeSpline(x0, dx0, t0, x1, dx1, t1); *s2 = makeSpline(x1, dx1, t1, x2, dx2, t2); return dx1; } /* Compute a Ballistic path in a pair of degenerate splines. sx goes from x at time t at constant velocity dx. sy goes from y at time t with velocity dy and constant acceleration g. */ static void makeParabola(Trajectory *n, double x, double dx, double y, double dy, double g) { double t = (double)n->start; n->xp.a = 0; n->xp.b = 0; n->xp.c = dx; n->xp.d = -dx*t + x; n->yp.a = 0; n->yp.b = g/2; n->yp.c = -g*t + dy; n->yp.d = g/2*t*t - dy*t + y; } #define SX 25 /* Shoulder Width */ /* Convert hand position symbols into actual time/space coordinates */ static void positions(jugglestruct *sp) { Trajectory *t; unsigned long now = sp->time; /* Make sure we're not lost in the past */ for (t = sp->head->next; t != sp->head; t = t->next) { if (t->status >= PTHRATCH) { now = t->start; } else if (t->status == ACTION || t->status == LINKEDACTION) { /* Allow ACTIONs to be annotated, but we won't mark them ready for the next stage */ double xo = 0, yo; double sx = SX; double pose = SX/2; /* time */ if (t->action == CATCH) { /* Throw-to-catch */ if (t->type == Empty) { now += (int) THROW_NULL_INTERVAL; /* failed catch is short */ } else { /* successful catch */ now += (int)(THROW_CATCH_INTERVAL); } } else { /* Catch-to-throw */ if(t->object != NULL) { now += (int) (CATCH_THROW_INTERVAL * ObjectDefs[t->object->type].weight); } else { now += (int) (CATCH_THROW_INTERVAL); } } if(t->start == 0) t->start = now; else /* Concatenated performances may need clock resync */ now = t->start; t->cx = 0; /* space */ yo = 90; /* Add room for the handle */ if(t->action == CATCH && t->object != NULL) yo -= ObjectDefs[t->object->type].handle; switch (t->posn) { case '-': xo = sx - pose; break; case '_': case 'k': case '+': xo = sx + pose; break; case '~': case '=': xo = - sx - pose; yo += pose; break; case '^': xo = 0; yo += pose*2; break; /* clap */ default: (void) fprintf(stderr, "juggle: unexpected posn %c\n", t->posn); break; } #ifdef _2DSpinsDontWorkIn3D t->angle = (((t->hand == LEFT) ^ (t->posn == '+' || t->posn == '_' || t->posn == 'k' ))? -1 : 1) * M_PI/2; #else t->angle = -M_PI/2; #endif t->x = t->cx + ((t->hand == LEFT) ? xo : -xo); t->y = yo; /* Only mark complete if it was already linked */ if(t->status == LINKEDACTION) { t->status = PTHRATCH; } } } } /* Private physics functions */ /* Compute the spin-rate for a trajectory. Different types of throw (eg, regular thows, bounces, kicks, etc) have different spin requirements. type = type of object h = trajectory of throwing hand (throws), or next throwing hand (catches) old = earlier spin to consider dt = time span of this trajectory height = height of ball throw or 0 if based on old spin turns = full club turns required during this operation togo = partial club turns required to match hands */ static double spinrate(ObjType type, Trajectory *h, double old, double dt, int height, int turns, double togo) { #ifdef _2DSpinsDontWorkIn3D const int dir = (h->hand == LEFT) ^ (h->posn == '+')? -1 : 1; #else const int dir = 1; #endif if(ObjectDefs[type].handle != 0) { /* Clubs */ return (dir * turns * 2 * M_PI + togo) / dt; } else if(height == 0) { /* Balls already spinning */ return old/2; } else { /* Balls */ return dir * NRAND(height*10)/20/ObjectDefs[type].weight * 2 * M_PI / dt; } } /* compute the angle at the end of a spinning trajectory */ static double end_spin(Trajectory *t) { return t->angle + t->spin * (t->finish - t->start); } /* Sets the initial angle of the catch following hand movement t to the final angle of the throw n. Also sets the angle of the subsequent throw to the same angle plus half a turn. */ static void match_spins_on_catch(Trajectory *t, Trajectory *n) { if(ObjectDefs[t->balllink->object->type].handle == 0) { t->balllink->angle = end_spin(n); if(t->balllink->handlink != NULL) { #ifdef _2DSpinsDontWorkIn3D t->balllink->handlink->angle = t->balllink->angle + M_PI; #else t->balllink->handlink->angle = t->balllink->angle; #endif } } } static double find_bounce(jugglestruct *sp, double yo, double yf, double yc, double tc, double cor) { double tb, i, dy = 0; const double e = 1; /* permissible error in yc */ /* tb = time to bounce yt = height at catch time after one bounce one or three roots according to timing find one by interval bisection */ tb = tc; for(i = tc / 2; i > 0.0001; i/=2){ double dt, yt; if(tb == 0){ (void) fprintf(stderr, "juggle: bounce div by zero!\n"); break; } dy = (yf - yo)/tb + sp->Gr/2*tb; dt = tc - tb; yt = -cor*dy*dt + sp->Gr/2*dt*dt + yf; if(yt < yc + e){ tb-=i; }else if(yt > yc - e){ tb+=i; }else{ break; } } if(dy*THROW_CATCH_INTERVAL < -200) { /* bounce too hard */ tb = -1; } return tb; } static Trajectory* new_predictor(const Trajectory *t, int start, int finish, double angle) { Trajectory *n; ADD_ELEMENT(Trajectory, n, t->prev); if(n == NULL){ return NULL; } DUP_OBJECT(n, t); n->divisions = t->divisions; n->type = Ball; n->status = PREDICTOR; n->start = start; n->finish = finish; n->angle = angle; return n; } /* Turn abstract timings into physically appropriate object trajectories. */ static Bool projectile(jugglestruct *sp) { Trajectory *t; const int yf = 0; /* Floor height */ for (t = sp->head->next; t != sp->head; t = t->next) { if (t->status != PTHRATCH || t->action != THROW) { continue; } else if (t->balllink == NULL) { /* Zero Throw */ t->status = BPREDICTOR; } else if (t->balllink->handlink == NULL) { /* Incomplete */ return True; } else if(t->balllink == t->handlink) { /* '2' height - hold on to ball. Don't need to consider flourishes, 'hands' will do that automatically anyway */ t->type = Full; /* Zero spin to avoid wrist injuries */ t->spin = 0; match_spins_on_catch(t, t); t->dx = t->dy = 0; t->status = BPREDICTOR; continue; } else { if (t->posn == '_') { /* Bounce once */ const int tb = t->start + find_bounce(sp, t->y, (double) yf, t->balllink->y, (double) (t->balllink->start - t->start), ObjectDefs[t->object->type].cor); if(tb < t->start) { /* bounce too hard */ t->posn = '+'; /* Use regular throw */ } else { Trajectory *n; /* First (throw) trajectory. */ double dt; /* Time span of a trajectory */ double dy; /* Distance span of a follow-on trajectory. First trajectory uses t->dy */ /* dx is constant across both trajectories */ t->dx = (t->balllink->x - t->x) / (t->balllink->start - t->start); { /* ball follows parabola down */ n = new_predictor(t, t->start, tb, t->angle); if(n == NULL) return False; dt = n->finish - n->start; /* Ball rate 4, no flight or matching club turns */ n->spin = spinrate(t->object->type, t, 0.0, dt, 4, 0, 0.0); t->dy = (yf - t->y)/dt - sp->Gr/2*dt; makeParabola(n, t->x, t->dx, t->y, t->dy, sp->Gr); } { /* ball follows parabola up */ Trajectory *m = new_predictor(t, n->finish, t->balllink->start, end_spin(n)); if(m == NULL) return False; dt = m->finish - m->start; /* Use previous ball rate, no flight club turns */ m->spin = spinrate(t->object->type, t, n->spin, dt, 0, 0, t->balllink->angle - m->angle); match_spins_on_catch(t, m); dy = (t->balllink->y - yf)/dt - sp->Gr/2 * dt; makeParabola(m, t->balllink->x - t->dx * dt, t->dx, (double) yf, dy, sp->Gr); } t->status = BPREDICTOR; continue; } } else if (t->posn == 'k') { /* Drop & Kick */ Trajectory *n; /* First (drop) trajectory. */ Trajectory *o; /* Second (rest) trajectory */ Trajectory *m; /* Third (kick) trajectory */ const int td = t->start + 2*THROW_CATCH_INTERVAL; /* Drop time */ const int tk = t->balllink->start - 5*THROW_CATCH_INTERVAL; /* Kick */ double dt, dy; { /* Fall to ground */ n = new_predictor(t, t->start, td, t->angle); if(n == NULL) return False; dt = n->finish - n->start; /* Ball spin rate 4, no flight club turns */ n->spin = spinrate(t->object->type, t, 0.0, dt, 4, 0, t->balllink->angle - n->angle); t->dx = (t->balllink->x - t->x) / dt; t->dy = (yf - t->y)/dt - sp->Gr/2*dt; makeParabola(n, t->x, t->dx, t->y, t->dy, sp->Gr); } { /* Rest on ground */ o = new_predictor(t, n->finish, tk, end_spin(n)); if(o == NULL) return False; o->spin = 0; makeParabola(o, t->balllink->x, 0.0, (double) yf, 0.0, 0.0); } /* Kick up */ { m = new_predictor(t, o->finish, t->balllink->start, end_spin(o)); if(m == NULL) return False; dt = m->finish - m->start; /* Match receiving hand, ball rate 4, one flight club turn */ m->spin = spinrate(t->object->type, t->balllink->handlink, 0.0, dt, 4, 1, t->balllink->angle - m->angle); match_spins_on_catch(t, m); dy = (t->balllink->y - yf)/dt - sp->Gr/2 * dt; makeParabola(m, t->balllink->x, 0.0, (double) yf, dy, sp->Gr); } t->status = BPREDICTOR; continue; } /* Regular flight, no bounce */ { /* ball follows parabola */ double dt; Trajectory *n = new_predictor(t, t->start, t->balllink->start, t->angle); if(n == NULL) return False; dt = t->balllink->start - t->start; /* Regular spin */ n->spin = spinrate(t->object->type, t, 0.0, dt, t->height, t->height/2, t->balllink->angle - n->angle); match_spins_on_catch(t, n); t->dx = (t->balllink->x - t->x) / dt; t->dy = (t->balllink->y - t->y) / dt - sp->Gr/2 * dt; makeParabola(n, t->x, t->dx, t->y, t->dy, sp->Gr); } t->status = BPREDICTOR; } } return True; } /* Turn abstract hand motions into cubic splines. */ static void hands(jugglestruct *sp) { Trajectory *t, *u, *v; for (t = sp->head->next; t != sp->head; t = t->next) { /* no throw => no velocity */ if (t->status != BPREDICTOR) { continue; } u = t->handlink; if (u == NULL) { /* no next catch */ continue; } v = u->handlink; if (v == NULL) { /* no next throw */ continue; } /* double spline takes hand from throw, thru catch, to next throw */ t->finish = u->start; t->status = PREDICTOR; u->finish = v->start; u->status = PREDICTOR; /* FIXME: These adjustments leave a small glitch when alternating balls and clubs. Just hope no-one notices. :-) */ /* make sure empty hand spin matches the thrown object in case it had a handle */ t->spin = ((t->hand == LEFT)? -1 : 1 ) * fabs((u->angle - t->angle)/(u->start - t->start)); u->spin = ((v->hand == LEFT) ^ (v->posn == '+')? -1 : 1 ) * fabs((v->angle - u->angle)/(v->start - u->start)); (void) makeSplinePair(&t->xp, &u->xp, t->x, t->dx, t->start, u->x, u->start, v->x, v->dx, v->start); (void) makeSplinePair(&t->yp, &u->yp, t->y, t->dy, t->start, u->y, u->start, v->y, v->dy, v->start); t->status = PREDICTOR; } } /* Given target x, y find_elbow puts hand at target if possible, * otherwise makes hand point to the target */ static void find_elbow(int armlength, DXPoint *h, DXPoint *e, DXPoint *p, DXPoint *s, int z) { double r, h2, t; double x = p->x - s->x; double y = p->y - s->y; h2 = x*x + y*y + z*z; if (h2 > 4 * armlength * armlength) { t = armlength/sqrt(h2); e->x = t*x + s->x; e->y = t*y + s->y; h->x = 2 * t * x + s->x; h->y = 2 * t * y + s->y; } else { r = sqrt((double)(x*x + z*z)); t = sqrt(4 * armlength * armlength / h2 - 1); e->x = x*(1 + y*t/r)/2 + s->x; e->y = (y - r*t)/2 + s->y; h->x = x + s->x; h->y = y + s->y; } } /* NOTE: returned x, y adjusted for arm reach */ static void reach_arm(ModeInfo * mi, Hand side, DXPoint *p) { jugglestruct *sp = &juggles[MI_SCREEN(mi)]; DXPoint h, e; find_elbow(40, &h, &e, p, &sp->arm[1][side][SHOULDER], 25); *p = sp->arm[1][side][HAND] = h; sp->arm[1][side][ELBOW] = e; } #if DEBUG /* dumps a human-readable rendition of the current state of the juggle pipeline to stderr for debugging */ static void dump(jugglestruct *sp) { Trajectory *t; for (t = sp->head->next; t != sp->head; t = t->next) { switch (t->status) { case ATCH: (void) fprintf(stderr, "%p a %c%d\n", (void*)t, t->posn, t->adam); break; case THRATCH: (void) fprintf(stderr, "%p T %c%d %s\n", (void*)t, t->posn, t->height, t->pattern == NULL?"":t->pattern); break; case ACTION: if (t->action == CATCH) (void) fprintf(stderr, "%p A %c%cC\n", (void*)t, t->posn, t->hand ? 'R' : 'L'); else (void) fprintf(stderr, "%p A %c%c%c%d\n", (void*)t, t->posn, t->hand ? 'R' : 'L', (t->action == THROW)?'T':'N', t->height); break; case LINKEDACTION: (void) fprintf(stderr, "%p L %c%c%c%d %d %p %p\n", (void*)t, t->posn, t->hand?'R':'L', (t->action == THROW)?'T':(t->action == CATCH?'C':'N'), t->height, t->object == NULL?0:t->object->color, (void*)t->handlink, (void*)t->balllink); break; case PTHRATCH: (void) fprintf(stderr, "%p O %c%c%c%d %d %2d %6lu %6lu\n", (void*)t, t->posn, t->hand?'R':'L', (t->action == THROW)?'T':(t->action == CATCH?'C':'N'), t->height, t->type, t->object == NULL?0:t->object->color, t->start, t->finish); break; case BPREDICTOR: (void) fprintf(stderr, "%p B %c %2d %6lu %6lu %g\n", (void*)t, t->type == Ball?'b':t->type == Empty?'e':'f', t->object == NULL?0:t->object->color, t->start, t->finish, t->yp.c); break; case PREDICTOR: (void) fprintf(stderr, "%p P %c %2d %6lu %6lu %g\n", (void*)t, t->type == Ball?'b':t->type == Empty?'e':'f', t->object == NULL?0:t->object->color, t->start, t->finish, t->yp.c); break; default: (void) fprintf(stderr, "%p: status %d not implemented\n", (void*)t, t->status); break; } } (void) fprintf(stderr, "---\n"); } #endif static int get_num_balls(const char *j) { int balls = 0; const char *p; int h = 0; if (!j) abort(); for (p = j; *p; p++) { if (*p >= '0' && *p <='9') { /* digit */ h = 10*h + (*p - '0'); } else { if (h > balls) { balls = h; } h = 0; } } return balls; } static int compare_num_balls(const void *p1, const void *p2) { int i, j; i = get_num_balls(((patternstruct*)p1)->pattern); j = get_num_balls(((patternstruct*)p2)->pattern); if (i > j) { return (1); } else if (i < j) { return (-1); } else { return (0); } } /************************************************************************** * Rendering Functions * * * **************************************************************************/ static int show_arms(ModeInfo * mi) { int polys = 0; jugglestruct *sp = &juggles[MI_SCREEN(mi)]; unsigned int i, j; Hand side; XPoint a[countof(sp->arm[0][0])]; int slices = 12; int thickness = 7; int soffx = 10; int soffy = 11; glFrontFace(GL_CCW); j = 1; for(side = LEFT; side <= RIGHT; side = (Hand)((int)side + 1)) { /* Translate into device coords */ for(i = 0; i < countof(a); i++) { a[i].x = (short)(SCENE_WIDTH/2 + sp->arm[j][side][i].x*sp->scale); a[i].y = (short)(SCENE_HEIGHT - sp->arm[j][side][i].y*sp->scale); if(j == 1) sp->arm[0][side][i] = sp->arm[1][side][i]; } glMaterialfv (GL_FRONT, GL_AMBIENT_AND_DIFFUSE, body_color_1); /* Upper arm */ polys += tube (a[2].x - (side == LEFT ? soffx : -soffx), a[2].y + soffy, 0, a[1].x, a[1].y, ARMLENGTH/2, thickness, 0, slices, True, True, MI_IS_WIREFRAME(mi)); /* Lower arm */ polys += tube (a[1].x, a[1].y, ARMLENGTH/2, a[0].x, a[0].y, ARMLENGTH, thickness * 0.8, 0, slices, True, True, MI_IS_WIREFRAME(mi)); glMaterialfv (GL_FRONT, GL_AMBIENT_AND_DIFFUSE, body_color_2); /* Shoulder */ glPushMatrix(); glTranslatef (a[2].x - (side == LEFT ? soffx : -soffx), a[2].y + soffy, 0); glScalef(9, 9, 9); polys += unit_sphere(slices, slices, MI_IS_WIREFRAME(mi)); glPopMatrix(); /* Elbow */ glPushMatrix(); glTranslatef (a[1].x, a[1].y, ARMLENGTH/2); glScalef(4, 4, 4); polys += unit_sphere(slices, slices, MI_IS_WIREFRAME(mi)); glPopMatrix(); /* Hand */ glPushMatrix(); glTranslatef (a[0].x, a[0].y, ARMLENGTH); glScalef(8, 8, 8); polys += unit_sphere(slices, slices, MI_IS_WIREFRAME(mi)); glPopMatrix(); } return polys; } static int show_figure(ModeInfo * mi, Bool init) { int polys = 0; jugglestruct *sp = &juggles[MI_SCREEN(mi)]; /*XPoint p[7];*/ int i; /* +-----+ 9 | 6 | 10 +--+--+ 2 +---+---+ 3 \ 5 / \ / \ / 1 + / \ / \ 0 +-----+ 4 | | | | | | 7 + + 8 */ /* #### most of this is unused now */ static const XPoint figure[] = { { 15, 70}, /* 0 Left Hip */ { 0, 90}, /* 1 Waist */ { SX, 130}, /* 2 Left Shoulder */ {-SX, 130}, /* 3 Right Shoulder */ {-15, 70}, /* 4 Right Hip */ { 0, 130}, /* 5 Neck */ { 0, 140}, /* 6 Chin */ { SX, 0}, /* 7 Left Foot */ {-SX, 0}, /* 8 Right Foot */ {-17, 174}, /* 9 Head1 */ { 17, 140}, /* 10 Head2 */ }; XPoint a[countof(figure)]; GLfloat gcolor[4] = { 1, 1, 1, 1 }; /* Translate into device coords */ for(i = 0; i < countof(figure); i++) { a[i].x = (short)(SCENE_WIDTH/2 + (sp->cx + figure[i].x)*sp->scale); a[i].y = (short)(SCENE_HEIGHT - figure[i].y*sp->scale); } glMaterialfv (GL_FRONT, GL_AMBIENT_AND_DIFFUSE, gcolor); glFrontFace(GL_CCW); { GLfloat scale = ((GLfloat) a[10].x - a[9].x) / 2; int slices = 12; glPushMatrix(); { glTranslatef(a[6].x, a[6].y - scale, 0); glScalef(scale, scale, scale); /* Head */ glMaterialfv (GL_FRONT, GL_AMBIENT_AND_DIFFUSE, body_color_1); glPushMatrix(); scale = 0.75; glScalef(scale, scale, scale); glTranslatef(0, 0.3, 0); glPushMatrix(); glTranslatef(0, 0, 0.35); polys += tube (0, 0, 0, 0, 1.1, 0, 0.64, 0, slices, True, True, MI_IS_WIREFRAME(mi)); glPopMatrix(); glScalef(0.9, 0.9, 1); polys += unit_sphere(2*slices, 2*slices, MI_IS_WIREFRAME(mi)); glPopMatrix(); /* Neck */ glMaterialfv (GL_FRONT, GL_AMBIENT_AND_DIFFUSE, body_color_2); glTranslatef(0, 1.1, 0); glPushMatrix(); scale = 0.35; glScalef(scale, scale, scale); polys += unit_sphere(slices, slices, MI_IS_WIREFRAME(mi)); glPopMatrix(); /* Torso */ glMaterialfv (GL_FRONT, GL_AMBIENT_AND_DIFFUSE, body_color_1); glTranslatef(0, 1.1, 0); glPushMatrix(); glScalef(0.9, 1.0, 0.9); polys += unit_sphere(slices, slices, MI_IS_WIREFRAME(mi)); glPopMatrix(); /* Belly */ glMaterialfv (GL_FRONT, GL_AMBIENT_AND_DIFFUSE, body_color_2); glTranslatef(0, 1.0, 0); glPushMatrix(); scale = 0.6; glScalef(scale, scale, scale); polys += unit_sphere(slices, slices, MI_IS_WIREFRAME(mi)); glPopMatrix(); /* Hips */ glMaterialfv (GL_FRONT, GL_AMBIENT_AND_DIFFUSE, body_color_1); glTranslatef(0, 0.8, 0); glPushMatrix(); scale = 0.85; glScalef(scale, scale, scale); polys += unit_sphere(slices, slices, MI_IS_WIREFRAME(mi)); glPopMatrix(); /* Legs */ glTranslatef(0, 0.7, 0); for (i = -1; i <= 1; i += 2) { glPushMatrix(); glRotatef (i*10, 0, 0, 1); glTranslatef(-i*0.65, 0, 0); /* Hip socket */ glMaterialfv (GL_FRONT, GL_AMBIENT_AND_DIFFUSE, body_color_2); scale = 0.45; glScalef(scale, scale, scale); polys += unit_sphere(slices, slices, MI_IS_WIREFRAME(mi)); /* Thigh */ glMaterialfv (GL_FRONT, GL_AMBIENT_AND_DIFFUSE, body_color_1); glPushMatrix(); glTranslatef(0, 0.6, 0); polys += tube (0, 0, 0, 0, 3.5, 0, 1, 0, slices, True, True, MI_IS_WIREFRAME(mi)); glPopMatrix(); /* Knee */ glMaterialfv (GL_FRONT, GL_AMBIENT_AND_DIFFUSE, body_color_2); glPushMatrix(); glTranslatef(0, 4.4, 0); scale = 0.7; glScalef(scale, scale, scale); polys += unit_sphere(slices, slices, MI_IS_WIREFRAME(mi)); glPopMatrix(); /* Calf */ glMaterialfv (GL_FRONT, GL_AMBIENT_AND_DIFFUSE, body_color_1); glPushMatrix(); glTranslatef(0, 4.7, 0); polys += tube (0, 0, 0, 0, 4.7, 0, 0.8, 0, slices, True, True, MI_IS_WIREFRAME(mi)); glPopMatrix(); /* Ankle */ glMaterialfv (GL_FRONT, GL_AMBIENT_AND_DIFFUSE, body_color_2); glPushMatrix(); glTranslatef(0, 9.7, 0); scale = 0.5; glScalef(scale, scale, scale); polys += unit_sphere(slices, slices, MI_IS_WIREFRAME(mi)); glPopMatrix(); /* Foot */ glMaterialfv (GL_FRONT, GL_AMBIENT_AND_DIFFUSE, body_color_1); glPushMatrix(); glRotatef (-i*10, 0, 0, 1); glTranslatef(-i*1.75, 9.7, 0.9); glScalef (0.4, 1, 1); polys += tube (0, 0, 0, 0, 0.6, 0, 1.9, 0, slices*4, True, True, MI_IS_WIREFRAME(mi)); glPopMatrix(); glPopMatrix(); } } glPopMatrix(); } sp->arm[1][LEFT][SHOULDER].x = sp->cx + figure[2].x; sp->arm[1][RIGHT][SHOULDER].x = sp->cx + figure[3].x; if(init) { /* Initialise arms */ unsigned int i; for(i = 0; i < 2; i++){ sp->arm[i][LEFT][SHOULDER].y = figure[2].y; sp->arm[i][LEFT][ELBOW].x = figure[2].x; sp->arm[i][LEFT][ELBOW].y = figure[1].y; sp->arm[i][LEFT][HAND].x = figure[0].x; sp->arm[i][LEFT][HAND].y = figure[1].y; sp->arm[i][RIGHT][SHOULDER].y = figure[3].y; sp->arm[i][RIGHT][ELBOW].x = figure[3].x; sp->arm[i][RIGHT][ELBOW].y = figure[1].y; sp->arm[i][RIGHT][HAND].x = figure[4].x; sp->arm[i][RIGHT][HAND].y = figure[1].y; } } return polys; } typedef struct { GLfloat x, y, z; } XYZ; /* lifted from sphere.c */ static int striped_unit_sphere (int stacks, int slices, int stripes, GLfloat *color1, GLfloat *color2, int wire_p) { int polys = 0; int i,j; double theta1, theta2, theta3; XYZ e, p; XYZ la = { 0, 0, 0 }, lb = { 0, 0, 0 }; XYZ c = {0, 0, 0}; /* center */ double r = 1.0; /* radius */ int stacks2 = stacks * 2; if (r < 0) r = -r; if (slices < 0) slices = -slices; if (slices < 4 || stacks < 2 || r <= 0) { glBegin (GL_POINTS); glVertex3f (c.x, c.y, c.z); glEnd(); return 1; } glFrontFace(GL_CW); for (j = 0; j < stacks; j++) { theta1 = j * (M_PI+M_PI) / stacks2 - M_PI_2; theta2 = (j + 1) * (M_PI+M_PI) / stacks2 - M_PI_2; glMaterialfv (GL_FRONT, GL_AMBIENT_AND_DIFFUSE, ((j == 0 || j == stacks-1 || j % (stacks / (stripes+1))) ? color1 : color2)); glBegin (wire_p ? GL_LINE_LOOP : GL_TRIANGLE_STRIP); for (i = 0; i <= slices; i++) { theta3 = i * (M_PI+M_PI) / slices; if (wire_p && i != 0) { glVertex3f (lb.x, lb.y, lb.z); glVertex3f (la.x, la.y, la.z); } e.x = cos (theta2) * cos(theta3); e.y = sin (theta2); e.z = cos (theta2) * sin(theta3); p.x = c.x + r * e.x; p.y = c.y + r * e.y; p.z = c.z + r * e.z; glNormal3f (e.x, e.y, e.z); glTexCoord2f (i / (double)slices, 2*(j+1) / (double)stacks2); glVertex3f (p.x, p.y, p.z); if (wire_p) la = p; e.x = cos(theta1) * cos(theta3); e.y = sin(theta1); e.z = cos(theta1) * sin(theta3); p.x = c.x + r * e.x; p.y = c.y + r * e.y; p.z = c.z + r * e.z; glNormal3f (e.x, e.y, e.z); glTexCoord2f (i / (double)slices, 2*j / (double)stacks2); glVertex3f (p.x, p.y, p.z); if (wire_p) lb = p; polys++; } glEnd(); } return polys; } static int show_ball(ModeInfo *mi, unsigned long color, Trace *s) { int polys = 0; jugglestruct *sp = &juggles[MI_SCREEN(mi)]; /*int offset = (int)(s->angle*64*180/M_PI);*/ short x = (short)(SCENE_WIDTH/2 + s->x * sp->scale); short y = (short)(SCENE_HEIGHT - s->y * sp->scale); GLfloat gcolor1[4] = { 0, 0, 0, 1 }; GLfloat gcolor2[4] = { 0, 0, 0, 1 }; int slices = 24; /* Avoid wrapping */ if(s->y*sp->scale > SCENE_HEIGHT * 2) return 0; gcolor1[0] = mi->colors[color].red / 65536.0; gcolor1[1] = mi->colors[color].green / 65536.0; gcolor1[2] = mi->colors[color].blue / 65536.0; gcolor2[0] = gcolor1[0] / 3; gcolor2[1] = gcolor1[1] / 3; gcolor2[2] = gcolor1[2] / 3; glFrontFace(GL_CCW); { GLfloat scale = BALLRADIUS; glPushMatrix(); glTranslatef(x, y, 0); glScalef(scale, scale, scale); glRotatef (s->angle / M_PI*180, 1, 1, 0); polys += striped_unit_sphere (slices, slices, s->divisions, gcolor1, gcolor2, MI_IS_WIREFRAME(mi)); glPopMatrix(); } return polys; } static int show_europeanclub(ModeInfo *mi, unsigned long color, Trace *s) { int polys = 0; jugglestruct *sp = &juggles[MI_SCREEN(mi)]; /*int offset = (int)(s->angle*64*180/M_PI);*/ short x = (short)(SCENE_WIDTH/2 + s->x * sp->scale); short y = (short)(SCENE_HEIGHT - s->y * sp->scale); double radius = 12 * sp->scale; GLfloat gcolor1[4] = { 0, 0, 0, 1 }; GLfloat gcolor2[4] = { 1, 1, 1, 1 }; int slices = 16; int divs = 4; /* 6 6 +-+ / \ 4 +-----+ 7 ////////\ 3 +---------+ 8 2 +---------+ 9 |///////| 1 +-------+ 10 | | | | | | | | | | | | +-+ 0 11 */ /* Avoid wrapping */ if(s->y*sp->scale > SCENE_HEIGHT * 2) return 0; gcolor1[0] = mi->colors[color].red / 65536.0; gcolor1[1] = mi->colors[color].green / 65536.0; gcolor1[2] = mi->colors[color].blue / 65536.0; glFrontFace(GL_CCW); { GLfloat scale = radius; glPushMatrix(); glTranslatef(x, y, 0); glScalef(scale, scale, scale); glTranslatef (0, 0, 2); /* put end of handle in hand */ glRotatef (s->angle / M_PI*180, 1, 0, 0); glPushMatrix(); glScalef (0.5, 1, 0.5); polys += striped_unit_sphere (slices, slices, divs, gcolor2, gcolor1, MI_IS_WIREFRAME(mi)); glPopMatrix(); glMaterialfv (GL_FRONT, GL_AMBIENT_AND_DIFFUSE, gcolor2); polys += tube (0, 0, 0, 0, 2, 0, 0.2, 0, slices, True, True, MI_IS_WIREFRAME(mi)); glTranslatef (0, 2, 0); glScalef (0.25, 0.25, 0.25); polys += unit_sphere(slices, slices, MI_IS_WIREFRAME(mi)); glPopMatrix(); } return polys; } static int show_torch(ModeInfo *mi, unsigned long color, Trace *s) { int polys = 0; #if 0 jugglestruct *sp = &juggles[MI_SCREEN(mi)]; XPoint head, tail, last; DXPoint dhead, dlast; const double sa = sin(s->angle); const double ca = cos(s->angle); const double TailLen = -24; const double HeadLen = 16; const short Width = (short)(5 * sqrt(sp->scale)); /* +///+ head last | | | | | + tail */ dhead.x = s->x + HeadLen * PERSPEC * sa; dhead.y = s->y - HeadLen * ca; if(color == MI_BLACK_PIXEL(mi)) { /* Use 'last' when erasing */ dlast = s->dlast; } else { /* Store 'last' so we can use it later when s->prev has gone */ if(s->prev != s->next) { dlast.x = s->prev->x + HeadLen * PERSPEC * sin(s->prev->angle); dlast.y = s->prev->y - HeadLen * cos(s->prev->angle); } else { dlast = dhead; } s->dlast = dlast; } /* Avoid wrapping (after last is stored) */ if(s->y*sp->scale > SCENE_HEIGHT * 2) return 0; head.x = (short)(SCENE_WIDTH/2 + dhead.x*sp->scale); head.y = (short)(SCENE_HEIGHT - dhead.y*sp->scale); last.x = (short)(SCENE_WIDTH/2 + dlast.x*sp->scale); last.y = (short)(SCENE_HEIGHT - dlast.y*sp->scale); tail.x = (short)(SCENE_WIDTH/2 + (s->x + TailLen * PERSPEC * sa)*sp->scale ); tail.y = (short)(SCENE_HEIGHT - (s->y - TailLen * ca)*sp->scale ); if(color != MI_BLACK_PIXEL(mi)) { XSetForeground(MI_DISPLAY(mi), MI_GC(mi), MI_BLACK_PIXEL(mi)); XSetLineAttributes(MI_DISPLAY(mi), MI_GC(mi), Width, LineSolid, CapRound, JoinRound); draw_line(mi, head.x, head.y, tail.x, tail.y); } XSetForeground(MI_DISPLAY(mi), MI_GC(mi), color); XSetLineAttributes(MI_DISPLAY(mi), MI_GC(mi), Width * 2, LineSolid, CapRound, JoinRound); draw_line(mi, head.x, head.y, last.x, last.y); #endif /* 0 */ return polys; } static int show_knife(ModeInfo *mi, unsigned long color, Trace *s) { int polys = 0; jugglestruct *sp = &juggles[MI_SCREEN(mi)]; /*int offset = (int)(s->angle*64*180/M_PI);*/ short x = (short)(SCENE_WIDTH/2 + s->x * sp->scale); short y = (short)(SCENE_HEIGHT - s->y * sp->scale); GLfloat gcolor1[4] = { 0, 0, 0, 1 }; GLfloat gcolor2[4] = { 1, 1, 1, 1 }; int slices = 8; /* Avoid wrapping */ if(s->y*sp->scale > SCENE_HEIGHT * 2) return 0; gcolor1[0] = mi->colors[color].red / 65536.0; gcolor1[1] = mi->colors[color].green / 65536.0; gcolor1[2] = mi->colors[color].blue / 65536.0; glFrontFace(GL_CCW); glPushMatrix(); glTranslatef(x, y, 0); glScalef (2, 2, 2); glTranslatef (0, 0, 2); /* put end of handle in hand */ glRotatef (s->angle / M_PI*180, 1, 0, 0); glScalef (0.3, 1, 1); /* flatten blade */ glTranslatef(0, 6, 0); glRotatef (180, 1, 0, 0); glMaterialfv (GL_FRONT, GL_AMBIENT_AND_DIFFUSE, gcolor1); polys += tube (0, 0, 0, 0, 10, 0, 1, 0, slices, True, True, MI_IS_WIREFRAME(mi)); glTranslatef (0, 12, 0); glScalef (0.7, 10, 0.7); glMaterialfv (GL_FRONT, GL_AMBIENT_AND_DIFFUSE, gcolor2); polys += unit_sphere (slices, slices, MI_IS_WIREFRAME(mi)); glPopMatrix(); return polys; } static int show_ring(ModeInfo *mi, unsigned long color, Trace *s) { int polys = 0; jugglestruct *sp = &juggles[MI_SCREEN(mi)]; /*int offset = (int)(s->angle*64*180/M_PI);*/ short x = (short)(SCENE_WIDTH/2 + s->x * sp->scale); short y = (short)(SCENE_HEIGHT - s->y * sp->scale); double radius = 12 * sp->scale; GLfloat gcolor1[4] = { 0, 0, 0, 1 }; GLfloat gcolor2[4] = { 0, 0, 0, 1 }; int slices = 24; int i, j; int wire_p = MI_IS_WIREFRAME(mi); GLfloat width = M_PI * 2 / slices; GLfloat ra = 1.0; GLfloat rb = 0.7; GLfloat thickness = 0.15; /* Avoid wrapping */ if(s->y*sp->scale > SCENE_HEIGHT * 2) return 0; gcolor1[0] = mi->colors[color].red / 65536.0; gcolor1[1] = mi->colors[color].green / 65536.0; gcolor1[2] = mi->colors[color].blue / 65536.0; gcolor2[0] = gcolor1[0] / 3; gcolor2[1] = gcolor1[1] / 3; gcolor2[2] = gcolor1[2] / 3; glFrontFace(GL_CCW); glPushMatrix(); glTranslatef(0, 0, 12); /* back of ring in hand */ glTranslatef(x, y, 0); glScalef(radius, radius, radius); glRotatef (90, 0, 1, 0); glRotatef (s->angle / M_PI*180, 0, 0, 1); glMaterialfv (GL_FRONT, GL_AMBIENT_AND_DIFFUSE, gcolor1); /* discs */ for (j = -1; j <= 1; j += 2) { GLfloat z = j * thickness/2; glFrontFace (j < 0 ? GL_CCW : GL_CW); glNormal3f (0, 0, j*1); glBegin (wire_p ? GL_LINES : GL_QUAD_STRIP); for (i = 0; i < slices + (wire_p ? 0 : 1); i++) { GLfloat th, cth, sth; glMaterialfv (GL_FRONT, GL_AMBIENT_AND_DIFFUSE, (i % (slices/3) ? gcolor1 : gcolor2)); th = i * width; cth = cos(th); sth = sin(th); glVertex3f (cth * ra, sth * ra, z); glVertex3f (cth * rb, sth * rb, z); polys++; } glEnd(); } /* outer ring */ glFrontFace (GL_CCW); glBegin (wire_p ? GL_LINES : GL_QUAD_STRIP); for (i = 0; i < slices + (wire_p ? 0 : 1); i++) { GLfloat th = i * width; GLfloat cth = cos(th); GLfloat sth = sin(th); glNormal3f (cth, sth, 0); glVertex3f (cth * ra, sth * ra, thickness/2); glVertex3f (cth * ra, sth * ra, -thickness/2); polys++; } glEnd(); /* inner ring */ glFrontFace (GL_CW); glBegin (wire_p ? GL_LINES : GL_QUAD_STRIP); for (i = 0; i < slices + (wire_p ? 0 : 1); i++) { GLfloat th = i * width; GLfloat cth = cos(th); GLfloat sth = sin(th); glNormal3f (-cth, -sth, 0); glVertex3f (cth * rb, sth * ra, thickness/2); glVertex3f (cth * rb, sth * ra, -thickness/2); polys++; } glEnd(); glFrontFace (GL_CCW); glPopMatrix(); return polys; } static int show_bball(ModeInfo *mi, unsigned long color, Trace *s) { int polys = 0; jugglestruct *sp = &juggles[MI_SCREEN(mi)]; /*int offset = (int)(s->angle*64*180/M_PI);*/ short x = (short)(SCENE_WIDTH/2 + s->x * sp->scale); short y = (short)(SCENE_HEIGHT - s->y * sp->scale); double radius = 12 * sp->scale; GLfloat gcolor1[4] = { 0, 0, 0, 1 }; GLfloat gcolor2[4] = { 0, 0, 0, 1 }; int slices = 16; int i, j; /* Avoid wrapping */ if(s->y*sp->scale > SCENE_HEIGHT * 2) return 0; gcolor1[0] = mi->colors[color].red / 65536.0; gcolor1[1] = mi->colors[color].green / 65536.0; gcolor1[2] = mi->colors[color].blue / 65536.0; glFrontFace(GL_CCW); { GLfloat scale = radius; glPushMatrix(); glTranslatef(0, -6, 5); /* position on top of hand */ glTranslatef(x, y, 0); glScalef(scale, scale, scale); glRotatef (s->angle / M_PI*180, 1, 0, 1); glMaterialfv (GL_FRONT, GL_AMBIENT_AND_DIFFUSE, gcolor1); polys += unit_sphere (slices, slices, MI_IS_WIREFRAME(mi)); glRotatef (90, 0, 0, 1); glTranslatef (0, 0, 0.81); glScalef(0.15, 0.15, 0.15); glMaterialfv (GL_FRONT, GL_AMBIENT_AND_DIFFUSE, gcolor2); for (i = 0; i < 3; i++) { glPushMatrix(); glTranslatef (0, 0, 1); glRotatef (360 * i / 3, 0, 0, 1); glTranslatef (2, 0, 0); glRotatef (18, 0, 1, 0); glBegin (MI_IS_WIREFRAME(mi) ? GL_LINE_LOOP : GL_TRIANGLE_FAN); glVertex3f (0, 0, 0); for (j = slices; j >= 0; j--) { GLfloat th = j * M_PI*2 / slices; glVertex3f (cos(th), sin(th), 0); polys++; } glEnd(); glPopMatrix(); } glPopMatrix(); } return polys; } /************************************************************************** * Public Functions * * * **************************************************************************/ ENTRYPOINT void release_juggle (ModeInfo * mi) { if (juggles != NULL) { int screen; for (screen = 0; screen < MI_NUM_SCREENS(mi); screen++) free_juggle(&juggles[screen]); free(juggles); juggles = (jugglestruct *) NULL; } } /* FIXME: refill_juggle currently just appends new throws to the * programme. This is fine if the programme is empty, but if there * are still some trajectories left then it really should take these * into account */ static void refill_juggle(ModeInfo * mi) { jugglestruct *sp = NULL; int i; if (juggles == NULL) return; sp = &juggles[MI_SCREEN(mi)]; /* generate pattern */ if (pattern == NULL) { #define MAXPAT 10 #define MAXREPEAT 300 #define CHANGE_BIAS 8 /* larger makes num_ball changes less likely */ #define POSITION_BIAS 20 /* larger makes hand movements less likely */ int count = 0; while (count < MI_CYCLES(mi)) { char buf[MAXPAT * 3 + 3], *b = buf; int maxseen = 0; int l = NRAND(MAXPAT) + 1; int t = NRAND(MIN(MAXREPEAT, (MI_CYCLES(mi) - count))) + 1; { /* vary number of balls */ int new_balls = sp->num_balls; int change; if (new_balls == 2) /* Do not juggle 2 that often */ change = NRAND(2 + CHANGE_BIAS / 4); else change = NRAND(2 + CHANGE_BIAS); switch (change) { case 0: new_balls++; break; case 1: new_balls--; break; default: break; /* NO-OP */ } if (new_balls < sp->patternindex.minballs) { new_balls += 2; } if (new_balls > sp->patternindex.maxballs) { new_balls -= 2; } if (new_balls < sp->num_balls) { if (!program(mi, "[*]", NULL, 1)) /* lose ball */ return; } sp->num_balls = new_balls; } count += t; if (NRAND(2) && sp->patternindex.index[sp->num_balls].number) { /* Pick from PortFolio */ int p = sp->patternindex.index[sp->num_balls].start + NRAND(sp->patternindex.index[sp->num_balls].number); if (!program(mi, portfolio[p].pattern, portfolio[p].name, t)) return; } else { /* Invent a new pattern */ *b++='['; for(i = 0; i < l; i++){ int n, m; do { /* Triangular Distribution => high values more likely */ m = NRAND(sp->num_balls + 1); n = NRAND(sp->num_balls + 1); } while(m >= n); if (n == sp->num_balls) { maxseen = 1; } switch(NRAND(5 + POSITION_BIAS)){ case 0: /* Outside throw */ *b++ = '+'; break; case 1: /* Cross throw */ *b++ = '='; break; case 2: /* Cross catch */ *b++ = '&'; break; case 3: /* Cross throw and catch */ *b++ = 'x'; break; case 4: /* Bounce */ *b++ = '_'; break; default: break; /* Inside throw (default) */ } *b++ = n + '0'; *b++ = ' '; } *b++ = ']'; *b = '\0'; if (maxseen) { if (!program(mi, buf, NULL, t)) return; } } } } else { /* pattern supplied in height or 'a' notation */ if (!program(mi, pattern, NULL, MI_CYCLES(mi))) return; } adam(sp); name(sp); if (!part(sp)) return; lob(mi); clap(sp); positions(sp); if (!projectile(sp)) { free_juggle(sp); return; } hands(sp); #ifdef DEBUG if(MI_IS_DEBUG(mi)) dump(sp); #endif } static void change_juggle(ModeInfo * mi) { jugglestruct *sp = NULL; Trajectory *t; if (juggles == NULL) return; sp = &juggles[MI_SCREEN(mi)]; /* Strip pending trajectories */ for (t = sp->head->next; t != sp->head; t = t->next) { if(t->start > sp->time || t->finish < sp->time) { Trajectory *n = t; t=t->prev; trajectory_destroy(n); } } /* Pick the current object theme */ sp->objtypes = choose_object(); refill_juggle(mi); mi->polygon_count += show_figure(mi, True); } ENTRYPOINT void reshape_juggle (ModeInfo *mi, int width, int height) { GLfloat h = (GLfloat) height / (GLfloat) width; glViewport (0, 0, (GLint) width, (GLint) height); glMatrixMode(GL_PROJECTION); glLoadIdentity(); gluPerspective (30.0, 1/h, 1.0, 100.0); glMatrixMode(GL_MODELVIEW); glLoadIdentity(); gluLookAt( 0.0, 0.0, 30.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0); glClear(GL_COLOR_BUFFER_BIT); } ENTRYPOINT void init_juggle (ModeInfo * mi) { jugglestruct *sp = 0; int wire = MI_IS_WIREFRAME(mi); if (!juggles) { juggles = (jugglestruct *) calloc (MI_NUM_SCREENS(mi), sizeof (jugglestruct)); if (!juggles) { fprintf(stderr, "%s: out of memory\n", progname); exit(1); } } sp = &juggles[MI_SCREEN(mi)]; if (!sp->glx_context) /* re-initting breaks print_texture_label */ sp->glx_context = init_GL(mi); sp->font_data = load_texture_font (mi->dpy, "titleFont"); reshape_juggle (mi, MI_WIDTH(mi), MI_HEIGHT(mi)); clear_gl_error(); /* WTF? sometimes "invalid op" from glViewport! */ if (!wire) { GLfloat pos[4] = {1.0, 1.0, 1.0, 0.0}; GLfloat amb[4] = {0.0, 0.0, 0.0, 1.0}; GLfloat dif[4] = {1.0, 1.0, 1.0, 1.0}; GLfloat spc[4] = {0.0, 1.0, 1.0, 1.0}; glEnable(GL_LIGHTING); glEnable(GL_LIGHT0); glEnable(GL_DEPTH_TEST); glEnable(GL_CULL_FACE); glLightfv(GL_LIGHT0, GL_POSITION, pos); glLightfv(GL_LIGHT0, GL_AMBIENT, amb); glLightfv(GL_LIGHT0, GL_DIFFUSE, dif); glLightfv(GL_LIGHT0, GL_SPECULAR, spc); } make_random_colormap (0, 0, 0, mi->colors, &MI_NPIXELS(mi), True, False, 0, False); { double spin_speed = 0.05; double wander_speed = 0.001; double spin_accel = 0.05; sp->rot = make_rotator (0, spin_speed, 0, spin_accel, wander_speed, False); sp->trackball = gltrackball_init (False); } if (only && *only && strcmp(only, " ")) { balls = clubs = torches = knives = rings = bballs = False; if (!strcasecmp (only, "balls")) balls = True; else if (!strcasecmp (only, "clubs")) clubs = True; else if (!strcasecmp (only, "torches")) torches = True; else if (!strcasecmp (only, "knives")) knives = True; else if (!strcasecmp (only, "rings")) rings = True; else if (!strcasecmp (only, "bballs")) bballs = True; else { (void) fprintf (stderr, "Juggle: -only must be one of: balls, clubs, torches, knives,\n" "\t rings, or bballs (not \"%s\")\n", only); #ifdef STANDALONE /* xlock mustn't exit merely because of a bad argument */ exit (1); #endif } } /* #### hard to make this look good in OpenGL... */ torches = False; if (sp->head == 0) { /* first time initializing this juggler */ sp->count = ABS(MI_COUNT(mi)); if (sp->count == 0) sp->count = 200; /* record start time */ sp->begintime = time(NULL); if(sp->patternindex.maxballs > 0) { sp->num_balls = sp->patternindex.minballs + NRAND(sp->patternindex.maxballs - sp->patternindex.minballs); } mi->polygon_count += show_figure(mi, True); /* Draw figure. Also discovers information about the juggler's proportions */ /* "7" should be about three times the height of the juggler's shoulders */ sp->Gr = -GRAVITY(3 * sp->arm[0][RIGHT][SHOULDER].y, 7 * THROW_CATCH_INTERVAL); if(!balls && !clubs && !torches && !knives && !rings && !bballs) balls = True; /* Have to juggle something! */ /* create circular trajectory list */ ADD_ELEMENT(Trajectory, sp->head, sp->head); if(sp->head == NULL){ free_juggle(sp); return; } /* create circular object list */ ADD_ELEMENT(Object, sp->objects, sp->objects); if(sp->objects == NULL){ free_juggle(sp); return; } sp->pattern = strdup(""); /* Initialise saved pattern with free-able memory */ } sp = &juggles[MI_SCREEN(mi)]; if (pattern && (!*pattern || !strcasecmp (pattern, ".") || !strcasecmp (pattern, "random"))) pattern = NULL; if (pattern == NULL && sp->patternindex.maxballs == 0) { /* pattern list needs indexing */ int nelements = countof(portfolio); int numpat = 0; int i; /* sort according to number of balls */ qsort((void*)portfolio, nelements, sizeof(portfolio[1]), compare_num_balls); /* last pattern has most balls */ sp->patternindex.maxballs = get_num_balls(portfolio[nelements - 1].pattern); /* run through sorted list, indexing start of each group and number in group */ sp->patternindex.maxballs = 1; for (i = 0; i < nelements; i++) { int b = get_num_balls(portfolio[i].pattern); if (b > sp->patternindex.maxballs) { sp->patternindex.index[sp->patternindex.maxballs].number = numpat; if(numpat == 0) sp->patternindex.minballs = b; sp->patternindex.maxballs = b; numpat = 1; sp->patternindex.index[sp->patternindex.maxballs].start = i; } else { numpat++; } } sp->patternindex.index[sp->patternindex.maxballs].number = numpat; } /* Set up programme */ change_juggle(mi); /* Only put things here that won't interrupt the programme during a window resize */ /* Use MIN so that users can resize in interesting ways, eg narrow windows for tall patterns, etc */ sp->scale = MIN(SCENE_HEIGHT/480.0, SCENE_WIDTH/160.0); } ENTRYPOINT Bool juggle_handle_event (ModeInfo *mi, XEvent *event) { jugglestruct *sp = &juggles[MI_SCREEN(mi)]; if (gltrackball_event_handler (event, sp->trackball, MI_WIDTH (mi), MI_HEIGHT (mi), &sp->button_down_p)) return True; else if (screenhack_event_helper (MI_DISPLAY(mi), MI_WINDOW(mi), event)) { change_juggle (mi); return True; } return False; } ENTRYPOINT void draw_juggle (ModeInfo *mi) { jugglestruct *sp = &juggles[MI_SCREEN(mi)]; Display *dpy = MI_DISPLAY(mi); Window window = MI_WINDOW(mi); Trajectory *traj = NULL; Object *o = NULL; unsigned long future = 0; char *pattern = NULL; if (!sp->glx_context) return; glXMakeCurrent(MI_DISPLAY(mi), MI_WINDOW(mi), *(sp->glx_context)); glShadeModel(GL_SMOOTH); glEnable(GL_DEPTH_TEST); glEnable(GL_NORMALIZE); glEnable(GL_CULL_FACE); glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glPushMatrix (); glRotatef(current_device_rotation(), 0, 0, 1); glTranslatef(0,-3,0); { double x, y, z; get_position (sp->rot, &x, &y, &z, !sp->button_down_p); glTranslatef((x - 0.5) * 8, (y - 0.5) * 3, (z - 0.5) * 15); gltrackball_rotate (sp->trackball); get_rotation (sp->rot, &x, &y, &z, !sp->button_down_p); if (y < 0.8) y = 0.8 - (y - 0.8); /* always face forward */ if (y > 1.2) y = 1.2 - (y - 1.2); glRotatef (x * 360, 1.0, 0.0, 0.0); glRotatef (y * 360, 0.0, 1.0, 0.0); glRotatef (z * 360, 0.0, 0.0, 1.0); } { GLfloat scale = 20.0 / SCENE_HEIGHT; glScalef(scale, scale, scale); } glRotatef (180, 0, 0, 1); glTranslatef(-SCENE_WIDTH/2, -SCENE_HEIGHT/2, 0); glTranslatef(0, -150, 0); mi->polygon_count = 0; /* Update timer */ if (real) { struct timeval tv; (void)gettimeofday(&tv, NULL); sp->time = (int) ((tv.tv_sec - sp->begintime)*1000 + tv.tv_usec/1000); } else { sp->time += MI_DELAY(mi) / 1000; } /* First pass: Move arms and strip out expired elements */ for (traj = sp->head->next; traj != sp->head; traj = traj->next) { if (traj->status != PREDICTOR) { /* Skip any elements that need further processing */ /* We could remove them, but there shoudn't be many and they would be needed if we ever got the pattern refiller working */ continue; } if (traj->start > future) { /* Lookahead to the end of the show */ future = traj->start; } if (sp->time < traj->start) { /* early */ continue; } else if (sp->time < traj->finish) { /* working */ /* Look for pattern name */ if(traj->pattern != NULL) { pattern=traj->pattern; } if (traj->type == Empty || traj->type == Full) { /* Only interested in hands on this pass */ /* double angle = traj->angle + traj->spin * (sp->time - traj->start);*/ double xd = 0, yd = 0; DXPoint p; /* Find the catching offset */ if(traj->object != NULL) { #if 0 /* #### not sure what this is doing, but I'm guessing that the use of PERSPEC means this isn't needed in the OpenGL version? -jwz */ if(ObjectDefs[traj->object->type].handle > 0) { /* Handles Need to be oriented */ xd = ObjectDefs[traj->object->type].handle * PERSPEC * sin(angle); yd = ObjectDefs[traj->object->type].handle * cos(angle); } else #endif { /* Balls are always caught at the bottom */ xd = 0; yd = -4; } } p.x = (CUBIC(traj->xp, sp->time) - xd); p.y = (CUBIC(traj->yp, sp->time) + yd); reach_arm(mi, traj->hand, &p); /* Store updated hand position */ traj->x = p.x + xd; traj->y = p.y - yd; } if (traj->type == Ball || traj->type == Full) { /* Only interested in objects on this pass */ double x, y; Trace *s; if(traj->type == Full) { /* Adjusted these in the first pass */ x = traj->x; y = traj->y; } else { x = CUBIC(traj->xp, sp->time); y = CUBIC(traj->yp, sp->time); } ADD_ELEMENT(Trace, s, traj->object->trace->prev); s->x = x; s->y = y; s->angle = traj->angle + traj->spin * (sp->time - traj->start); s->divisions = traj->divisions; traj->object->tracelen++; traj->object->active = True; } } else { /* expired */ Trajectory *n = traj; traj=traj->prev; trajectory_destroy(n); } } mi->polygon_count += show_figure(mi, False); mi->polygon_count += show_arms(mi); /* Draw Objects */ glTranslatef(0, 0, ARMLENGTH); for (o = sp->objects->next; o != sp->objects; o = o->next) { if(o->active) { mi->polygon_count += ObjectDefs[o->type].draw(mi, o->color, o->trace->prev); o->active = False; } } /* Save pattern name so we can erase it when it changes */ if(pattern != NULL && strcmp(sp->pattern, pattern) != 0 ) { free(sp->pattern); sp->pattern = strdup(pattern); if (MI_IS_VERBOSE(mi)) { (void) fprintf(stderr, "Juggle[%d]: Running: %s\n", MI_SCREEN(mi), sp->pattern); } } glColor3f (1, 1, 0); print_texture_label (mi->dpy, sp->font_data, mi->xgwa.width, mi->xgwa.height, 1, sp->pattern); #ifdef MEMTEST if((int)(sp->time/10) % 1000 == 0) (void) fprintf(stderr, "sbrk: %d\n", (int)sbrk(0)); #endif if (future < sp->time + 100 * THROW_CATCH_INTERVAL) { refill_juggle(mi); } else if (sp->time > 1<<30) { /* Hard Reset before the clock wraps */ release_juggle(mi); init_juggle(mi); } glPopMatrix (); if (mi->fps_p) do_fps (mi); glFinish(); glXSwapBuffers(dpy, window); } XSCREENSAVER_MODULE_2 ("Juggler3D", juggler3d, juggle) #endif /* USE_GL */ xscreensaver-5.36/hacks/glx/topblock.c000644 000767 000024 00000064100 12717747726 020027 0ustar00jwzstaff000000 000000 /* topblock, Copyright (c) 2006-2012 rednuht * * 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. * * * topBlock - a simple openGL 3D hack of falling blocks based on jwz's dangerball hack The proporations of the blocks and their features is not even close to the commercial building block products offered by a variety companies. information on this hack might be found at http://www.jumpstation.co.uk/xscreensaver/topblock/ History 25/02/2006 v1.0 release 29/04/2006 v1.11 updated to better fit with xscreensaver v5 colors defaults to 7 (no black) 19/06/2006 v1.2 fixed dropSpeed = 7 bug, added gltrackball support and some code neatening, thanks to Valdis Kletnieks and JWZ for their input. */ #include # define refresh_topBlock 0 #define DEFAULTS "*delay: 10000 \n" \ "*count: 30 \n" \ "*showFPS: False \n" \ "*wireframe: False \n" \ #undef countof #define countof(x) (sizeof((x))/sizeof((*x))) #include "xlockmore.h" #include "topblock.h" #include "sphere.h" #include "tube.h" #include "gltrackball.h" #include #ifdef USE_GL /* whole file */ #ifndef HAVE_JWXYZ # include #endif typedef struct { GLXContext *glx_context; trackball_state *trackball; Bool button_down_p; int numFallingBlocks; GLfloat highest,highestFalling; GLfloat eyeLine,eyeX,eyeY,eyeZ; int carpetWidth, carpetLength; int followMode; GLfloat followRadius,followAngle; int plusheight; GLuint carpet; GLuint block; int carpet_polys, block_polys; NODE *blockNodeRoot; NODE *blockNodeFollow; GLfloat rotation; } topBlockSTATE; /* parameter vars */ 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 }, { "-spawn", ".spawn", XrmoptionSepArg, 0 }, { "-camX", ".camX", XrmoptionSepArg, 0 }, { "-camY", ".camY", XrmoptionSepArg, 0 }, { "-camZ", ".camZ", XrmoptionSepArg, 0 }, { "+rotate", ".rotate", XrmoptionNoArg, "False" }, { "-rotate", ".rotate", XrmoptionNoArg, "True" }, { "+carpet", ".carpet", XrmoptionNoArg, "False" }, { "+nipples", ".nipples", XrmoptionNoArg, "False" }, { "-blob", ".blob", XrmoptionNoArg, "True" }, { "-rotateSpeed", ".rotateSpeed", XrmoptionSepArg, 0 }, { "-follow", ".follow", XrmoptionNoArg, "True" }, { "-maxFalling", ".maxFalling", XrmoptionSepArg, 0 }, { "-resolution", ".resolution", XrmoptionSepArg, 0 }, { "-maxColors", ".maxColors", XrmoptionSepArg, 0 }, { "-dropSpeed", ".dropSpeed", XrmoptionSepArg, 0 }, { "-override", ".override", XrmoptionNoArg, "True" }, }; #define DEF_OVERRIDE "False" #define DEF_ROTATE "True" #define DEF_FOLLOW "False" #define DEF_CARPET "True" #define DEF_BLOB "False" #define DEF_NIPPLES "True" #define DEF_ROTATE_SPEED "10" #define DEF_MAX_FALLING "500" #define DEF_MAX_COLORS "7" #define DEF_SIZE "2" #define DEF_SPAWN "50" #define DEF_RESOLUTION "4" #define DEF_CAM_X "1" #define DEF_CAM_Y "20" #define DEF_CAM_Z "25" #define DEF_DROP_SPEED "4" static argtype vars[] = { {&override, "override", "Override", DEF_OVERRIDE, t_Bool}, {&rotate, "rotate", "Rotate", DEF_ROTATE, t_Bool}, {&drawCarpet, "carpet", "Carpet", DEF_CARPET, t_Bool}, {&drawNipples, "nipples", "Nipples", DEF_NIPPLES, t_Bool}, {&drawBlob, "blob", "Blob", DEF_BLOB, t_Bool}, {&rotateSpeed, "rotateSpeed", "RotateSpeed", DEF_ROTATE_SPEED, t_Float}, {&follow, "follow", "Follow", DEF_FOLLOW, t_Bool}, {&camX, "camX", "camX", DEF_CAM_X, t_Float}, {&camY, "camY", "camY", DEF_CAM_Y, t_Float}, {&camZ, "camZ", "camZ", DEF_CAM_Z, t_Float}, {&size, "size", "size", DEF_SIZE, t_Int}, {&spawn, "spawn", "spawn", DEF_SPAWN, t_Int}, {&maxFalling, "maxFalling", "maxFalling", DEF_MAX_FALLING, t_Int}, {&resolution, "resolution", "resolution", DEF_RESOLUTION, t_Int}, {&maxColors, "maxColors", "maxColors", DEF_MAX_COLORS, t_Int}, {&dropSpeed, "dropSpeed", "DropSpeed", DEF_DROP_SPEED, t_Float}, }; static topBlockSTATE *tbs = NULL; static ModeSpecOpt topBlock_opts = {countof(opts), opts, countof(vars), vars, NULL}; /* Window management, etc */ ENTRYPOINT void reshape_topBlock (ModeInfo *mi, int width, int height) { GLfloat h = (GLfloat) height / (GLfloat) width; glViewport (0, 0, (GLint) width, (GLint) height); glMatrixMode(GL_PROJECTION); glLoadIdentity(); gluPerspective (60.0, 1/h, 1.0, 1000.0); glMatrixMode(GL_MODELVIEW); glLoadIdentity(); glClear(GL_COLOR_BUFFER_BIT); } /* clean up on exit, not required ... */ ENTRYPOINT void release_topBlock(ModeInfo *mi) { topBlockSTATE *tb = &tbs[MI_SCREEN(mi)]; NODE *llCurrent, *llOld; llCurrent = tb->blockNodeRoot; while (llCurrent != NULL) { llOld = llCurrent; llCurrent = llCurrent->next; free(llOld); } } /* setup */ ENTRYPOINT void init_topBlock (ModeInfo *mi) { topBlockSTATE *tb; int wire = MI_IS_WIREFRAME(mi); if (!tbs) { tbs = (topBlockSTATE *) calloc (MI_NUM_SCREENS(mi), sizeof (topBlockSTATE)); if (!tbs) abort(); } tb = &tbs[MI_SCREEN(mi)]; tb->glx_context = init_GL(mi); reshape_topBlock (mi, MI_WIDTH(mi), MI_HEIGHT(mi)); /* if (wire) { drawNipples=False; }*/ tb->numFallingBlocks=0; if (size>10) { size = 10; } if (size<1) { size = 2; } tb->carpetWidth = 8 * size; tb->carpetLength = tb->carpetWidth; maxFalling*=size; if (spawn<4) { spawn=4; } if (spawn>1000) { spawn=1000; } if (rotateSpeed<1) {rotateSpeed=1; } if (rotateSpeed>1000) {rotateSpeed=1000;} rotateSpeed /= 100; if (resolution<4) {resolution=4;} if (resolution>20) {resolution=20;} resolution*=2; if (maxColors<1) {maxColors=1;} if (maxColors>8) {maxColors=8;} if (dropSpeed<1) {dropSpeed=1;} if (dropSpeed>9) {dropSpeed=9;} /* 10+ produces blocks that can pass through each other */ dropSpeed = 80/dropSpeed; dropSpeed = (blockHeight/dropSpeed); reshape_topBlock (mi, MI_WIDTH(mi), MI_HEIGHT(mi)); glClearDepth(1.0f); if (!wire) { GLfloat pos[4] = {10.0, 10.0, 1.0, 0.0}; GLfloat amb[4] = {0.1, 0.1, 0.1, 1.0}; GLfloat dif[4] = {1.0, 1.0, 1.0, 1.0}; GLfloat spc[4] = {0.0, 1.0, 1.0, 1.0}; glEnable(GL_LIGHTING); glEnable(GL_LIGHT0); glLightfv(GL_LIGHT0, GL_POSITION, pos); glLightfv(GL_LIGHT0, GL_AMBIENT, amb); glLightfv(GL_LIGHT0, GL_DIFFUSE, dif); glLightfv(GL_LIGHT0, GL_SPECULAR, spc); } glDepthFunc(GL_LEQUAL); glEnable(GL_DEPTH_TEST); glDisable(GL_CULL_FACE); /* all objects exhibit a reverse side */ glCullFace(GL_BACK); if (drawBlob) { buildBlobBlock(mi); } else { buildBlock(mi); /* build the display list holding the simple block */ } buildCarpet(mi); /* build the base */ tb->highest=0; tb->highestFalling=0; tb->eyeLine=tb->highest; tb->eyeX=0; tb->eyeY=0; tb->eyeZ=0; tb->followMode=0; if (follow) { tb->plusheight=100; camZ=camZ-60; } else { tb->rotation=random() % 360; tb->eyeY=10; tb->plusheight=30; } tb->followRadius=0; /* override camera settings */ if (override) { tb->plusheight=100; drawCarpet=False; camX=0; camY=1; camZ=0; tb->eyeX=-1; tb->eyeY=20; tb->eyeZ=0; } tb->trackball = gltrackball_init (False); } /* provides the per frame entertainment */ ENTRYPOINT void draw_topBlock (ModeInfo *mi) { Display *dpy = MI_DISPLAY(mi); Window window = MI_WINDOW(mi); NODE *llCurrent; NODE *llNode; topBlockSTATE *tb = &tbs[MI_SCREEN(mi)]; GLfloat spcN1x,spcN1y,spcN2x,spcN2y; GLfloat spcC1x,spcC1y,spcC2x,spcC2y; int wire = MI_IS_WIREFRAME(mi); GLfloat color[4]; if (!tb->glx_context) return; glXMakeCurrent(MI_DISPLAY(mi), MI_WINDOW(mi), *(tb->glx_context)); mi->polygon_count = 0; generateNewBlock(mi); if (rotate && (!tb->button_down_p)) { tb->rotation += rotateSpeed; } if (tb->rotation>=360) { tb->rotation=tb->rotation-360; } glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); /* clear current */ glLoadIdentity(); /* resets directions, do it every time ! */ glRotatef(current_device_rotation(), 0, 0, 1); if (!follow) { if (tb->highest>tb->eyeLine) { tb->eyeLine+=((tb->highest-tb->eyeLine)/100); } /* creates a smooth camera transition */ gluLookAt(camX, camY+tb->eyeLine, camZ, tb->eyeX, tb->eyeY+tb->eyeLine, tb->eyeZ, 0.0, 1.0, 0.0); /* setup viewer, xyz cam, xyz looking at and where is up normaly 0,1,0 */ glRotatef(90, 1.0, 0.0, 0.0); /* x axis */ } else { glRotatef(90, 0.0, 0.0, 1.0); /* z axis */ followBlock(mi); } /* Rotate the scene around a point that's a little higher up. */ glTranslatef (0, 0, -5); gltrackball_rotate (tb->trackball); glTranslatef (0, 0, 5); /* rotate the world */ glRotatef(tb->rotation, 0.0, 0.0, 1.0); # ifdef HAVE_MOBILE /* Keep it the same relative size when rotated. */ { GLfloat h = MI_HEIGHT(mi) / (GLfloat) MI_WIDTH(mi); int o = (int) current_device_rotation(); if (o != 0 && o != 180 && o != -180) glScalef (1/h, 1/h, 1/h); } # endif llCurrent = tb->blockNodeRoot; if (drawCarpet) { /* center carpet */ glTranslatef(0.0-(tb->carpetWidth/2),0.0-(tb->carpetLength/2),0.0); glCallList(tb->carpet); mi->polygon_count += tb->carpet_polys; glTranslatef(0.0+(tb->carpetWidth/2),0.0+(tb->carpetLength/2),0.0); glTranslatef(0.0,0.0,-0.55); } tb->highestFalling=0; while (llCurrent != NULL) { /* for each block */ glPushMatrix(); /* save state */ /* set color */ switch (llCurrent->color) { case 0: color[0] = 1.0f; color[1] = 0.0f; color[2] = 0.0f; color[3] = 1.0f; break; case 1: color[0] = 0.0f; color[1] = 1.0f; color[2] = 0.0f; color[3] = 1.0f; break; case 2: color[0] = 0.0f; color[1] = 0.0f; color[2] = 1.0f; color[3] = 1.0f; break; case 3: color[0] = 0.95f; color[1] = 0.95f; color[2] = 0.95f; color[3] = 1.0f; break; case 4: color[0] = 1.0f; color[1] = 0.5f; color[2] = 0.0f; color[3] = 1.0f; break; case 5: color[0] = 1.0f; color[1] = 1.0f; color[2] = 0.0f; color[3] = 1.0f; break; case 6: color[0] = 0.5f; color[1] = 0.5f; color[2] = 0.5f; color[3] = 1.0f; break; case 7: color[0] = 0.05f; color[1] = 0.05f; color[2] = 0.05f; color[3] = 1.0f; break; } if (wire) { glColor3fv(color); } else { glMaterialfv(GL_FRONT_AND_BACK, GL_AMBIENT_AND_DIFFUSE, color); } if (llCurrent->falling==1) { spcC2x = 0; spcC2y = 0; spcN2x = 0; spcN2y = 0; if (llCurrent->height>tb->highestFalling) {tb->highestFalling=llCurrent->height;} /* all blocks fall at the same rate to avoid mid air collisions */ llCurrent->height-=dropSpeed; if (llCurrent->height<=0) { llCurrent->falling=0; if (tb->highest==0) { tb->highest+=blockHeight; } } if ( (llCurrent->height<=tb->highest+1) && (llCurrent->falling==1) ) { /* check for collision */ llNode = tb->blockNodeRoot; spcC1x = llCurrent->x; spcC1y = llCurrent->y; switch(llCurrent->rotation) { case getOrientation(0): spcC2x = spcC1x; spcC2y = spcC1y-2; break; case getOrientation(1): spcC2x = spcC1x+2; spcC2y = spcC1y; break; case getOrientation(2): spcC2x = spcC1x; spcC2y = spcC1y+2; break; case getOrientation(3): spcC2x = spcC1x-2; spcC2y = spcC1y; break; } while (llNode != NULL) { if ( (llNode->falling==0) && (llCurrent->falling==1) ) { spcN1x = llNode->x; spcN1y = llNode->y; switch(llNode->rotation) { case getOrientation(0): spcN2x = spcN1x; spcN2y = spcN1y-2; break; case getOrientation(1): spcN2x = spcN1x+2; spcN2y = spcN1y; break; case getOrientation(2): spcN2x = spcN1x; spcN2y = spcN1y+2; break; case getOrientation(3): spcN2x = spcN1x-2; spcN2y = spcN1y; break; } if ( ( (spcC1x==spcN1x) && (spcC1y==spcN1y) ) || ( (spcC1x==spcN2x) && (spcC1y==spcN2y) ) || ( (spcC2x==spcN2x) && (spcC2y==spcN2y) ) || ( (spcC2x==spcN1x) && (spcC2y==spcN1y) ) ){ if ( fabs(llCurrent->height-(llNode->height+blockHeight)) <= TOLERANCE) { llCurrent->falling=0; llCurrent->height=llNode->height+blockHeight; /* if this is missing then small errors build up until the model fails */ if ( fabs(llCurrent->height-tb->highest) <= TOLERANCE+blockHeight ) { tb->highest+=blockHeight; } } } } llNode=llNode->next; } } } /* set location in space */ glTranslatef(llCurrent->x,llCurrent->y,-llCurrent->height); /* rotate */ glRotatef(llCurrent->rotation, 0.0f, 0.0f, 1.0f); if ((tb->followMode==0) && (llCurrent->next==NULL)) { tb->blockNodeFollow = llCurrent; tb->followMode=1; } llCurrent = llCurrent->next; /* draw */ glCallList(tb->block); mi->polygon_count += tb->block_polys; glPopMatrix(); /* restore state */ } if (mi->fps_p) do_fps (mi); glFinish(); if (tb->highest>(5*maxFalling)) { drawCarpet=False; } glXSwapBuffers(dpy, window); } /* camera is in follow mode, work out where we should be looking */ static void followBlock(ModeInfo *mi) { GLfloat xLen,yLen,cx,cy,rangle,xTarget,yTarget; topBlockSTATE *tb = &tbs[MI_SCREEN(mi)]; cx=0;cy=0; if ((tb->blockNodeFollow!=NULL) && (tb->followMode==1)){ if (tb->highest>tb->eyeLine) { tb->eyeLine+= ((tb->highest-tb->eyeLine)/100); } /*tb->blockNodeFollow->color=1; only noticable if you set the colors to 1 */ if (tb->blockNodeFollow->height > tb->eyeZ) { tb->eyeZ+= ((tb->blockNodeFollow->height - tb->eyeZ)/100); } if (tb->blockNodeFollow->height < tb->eyeZ) { tb->eyeZ-= ((tb->eyeZ - tb->blockNodeFollow->height)/100); } /* when the scene is rotated we need to know where the block is in the 2 dimensional coordinates of the carpet area (see http://www.jumpstation.co.uk/rotation/) */ if (tb->followRadius==0) { xLen = tb->blockNodeFollow->x-cx; yLen = tb->blockNodeFollow->y-cy; tb->followRadius=sqrt( (xLen*xLen) + (yLen*yLen) ); tb->followAngle = (180/M_PI) * asin(xLen/tb->followRadius); tb->followAngle = quadrantCorrection(tb->followAngle,(int)cx,(int)cy,(int)tb->blockNodeFollow->x,(int)tb->blockNodeFollow->y); } rangle = (tb->followAngle+tb->rotation) * M_PI /180; xTarget = cos(rangle) * tb->followRadius + cx; yTarget = sin(rangle) * tb->followRadius + cy; if (tb->followAngle>360) { tb->followAngle=tb->followAngle-360; } if (xTarget < tb->eyeX) { tb->eyeX-= ((tb->eyeX - xTarget)/100); } if (xTarget > tb->eyeX) { tb->eyeX+= ((xTarget - tb->eyeX)/100); } if (yTarget < tb->eyeY) { tb->eyeY-= ((tb->eyeY - yTarget)/100); } if (yTarget > tb->eyeY) { tb->eyeY+= ((yTarget - tb->eyeY)/100); } if (!tb->blockNodeFollow->falling) { tb->followMode=0; /*tb->blockNodeFollow->color=2; only noticable if you set the colors to 1 */ tb->followRadius=0; } } gluLookAt(camX, camY, camZ-tb->eyeLine, tb->eyeX, tb->eyeY, -tb->eyeZ,-1.0,0.0,0.0); } /* each quater of the circle has to be adjusted for */ static double quadrantCorrection(double angle,int cx,int cy,int x,int y) { if ((x>=cx) && (y>=cy)) { angle += (90-(angle-90) * 2); } else if ((x>=cx) && (y<=cy)) { angle += 90; } else if ((x<=cx) && (y<=cy)) { angle += 90; } else if ((x<=cx) && (y>=cy)) { angle += (90-(angle-90) * 2); } return(angle-180); } /* if random chance then create a new falling block */ static void generateNewBlock(ModeInfo *mi) { NODE *llCurrent, *llTail; GLfloat startOffx, startOffy; int endOffx, endOffy; topBlockSTATE *tb = &tbs[MI_SCREEN(mi)]; if ( ((random() % spawn) == 1) && (tb->highestFallingplusheight-blockHeight)+tb->highest)) ) { startOffx=0; endOffx=0; startOffy=0; endOffy=0; tb->numFallingBlocks++; llTail = tb->blockNodeRoot; if (llTail == NULL) { llCurrent = ((NODE*) malloc(sizeof(NODE))); if (!llCurrent) abort(); llTail = llCurrent; tb->blockNodeRoot = llCurrent; } else { if (tb->numFallingBlocks>=maxFalling) { /* recycle */ llCurrent=llTail->next; tb->blockNodeRoot=llCurrent->next; } else { llCurrent = ((NODE*) malloc(sizeof(NODE))); if (!llCurrent) abort(); } while (llTail->next != NULL) { llTail = llTail->next; } /* find last item in list */ } llCurrent->falling=1; llCurrent->rotation=getOrientation(random() % 4); if (llCurrent->rotation==getOrientation(0)) { startOffx=1.0; endOffx=0; startOffy=3.0; endOffy=-1; } else if (llCurrent->rotation==getOrientation(1)) { startOffx=1.0; endOffx=-1; startOffy=1.0; endOffy=0; } else if (llCurrent->rotation==getOrientation(2)) { startOffx=1.0; endOffx=0; startOffy=3.0; endOffy=-1; } else if (llCurrent->rotation==getOrientation(3)) { startOffx=5.0; endOffx=-1; startOffy=1.0; endOffy=0; } llCurrent->x=(startOffx-(tb->carpetLength/2)) + getLocation(random() % ((tb->carpetLength/2)+endOffx) ); llCurrent->y=(startOffy-(tb->carpetLength/2)) + getLocation(random() % ((tb->carpetLength/2)+endOffy) ); llCurrent->color=(random() % maxColors); llCurrent->height=getHeight(tb->plusheight+tb->highest); if (tb->numFallingBlocks>=maxFalling) { tb->numFallingBlocks--; tb->numFallingBlocks--; } llTail->next = llCurrent; llTail = llCurrent; llTail->next = NULL; } } /* called at init this creates the 'carpet' display list item */ static void buildCarpet(ModeInfo *mi) { int i,c,x,y; GLfloat color[4]; int wire = MI_IS_WIREFRAME(mi); topBlockSTATE *tb = &tbs[MI_SCREEN(mi)]; color[0] = 0.0f; color[1] = 1.0f; color[2] = 0.0f; color[3] = 1.0f; tb->carpet=glGenLists(1); /* only one */ glNewList(tb->carpet,GL_COMPILE); tb->carpet_polys=0; glPushMatrix(); /* save state */ x=tb->carpetWidth; y=tb->carpetLength; if (wire) { glColor3fv(color); } else { glMaterialfv(GL_FRONT_AND_BACK, GL_AMBIENT_AND_DIFFUSE, color); } /* draw carpet plane */ glBegin( wire ? GL_LINE_LOOP : GL_QUADS ); /* draw top */ glNormal3f( 0, 0, -1 ); glVertex3f(0.0,0.0,0.0); glVertex3f(x,0.0,0.0); glVertex3f(x,y,0.0); glVertex3f(0.0,y,0.0); tb->carpet_polys++; if (!wire) { /* add edge pieces */ /* side 1 */ glNormal3f( 0, -1, 0 ); glVertex3f(0.0,0.0,0.0); glVertex3f(x,0.0,0.0); glVertex3f(x,0,singleThick); glVertex3f(0.0,0,singleThick); tb->carpet_polys++; /* side 2 */ glNormal3f( -1, 0, 0 ); glVertex3f(0.0,0.0,0.0); glVertex3f(0,y,0.0); glVertex3f(0,y,singleThick); glVertex3f(0.0,0,singleThick); tb->carpet_polys++; /* side 3 */ glNormal3f( 1, 0, 0 ); glVertex3f(x,0.0,0.0); glVertex3f(x,y,0.0); glVertex3f(x,y,singleThick); glVertex3f(x,0,singleThick); tb->carpet_polys++; /* side 4 */ glNormal3f( 0, 1, 0 ); glVertex3f(0,y,0.0); glVertex3f(x,y,0.0); glVertex3f(x,y,singleThick); glVertex3f(0,y,singleThick); tb->carpet_polys++; } glEnd(); /* nipples */ if (drawNipples) { glTranslatef(0.5f,0.5f,-.25); /* move to the cylinder center */ for (c=0;ccarpet_polys += tube(0, 0, -0.1, 0, 0, 0.26, cylSize, 0, resolution, True, True, wire); glRotatef(180, 0.0f, 1.0f, 0.0f); /* they are upside down */ glRotatef(180, 0.0f, 1.0f, 0.0f); /* recover */ glTranslatef(0.0f,1.0f,0.0f); /* move to the next cylinder center (backward) */ } glPopMatrix(); /* save state */ glTranslatef(1.0f,0.0f,0.0f); /* reset */ } } glPopMatrix(); /* restore state */ glEndList(); } /* using the verticies arrays builds the plane, now with normals */ static void polygonPlane(int wire, int a, int b, int c , int d, int i) { GLfloat topBlockNormals[5][3] = { {0,0,-1}, {0,1,0}, {1,0,0}, {0,0,1}, {0,-1,0} }; GLfloat topBlockVertices[8][3] = { {-0.49,-2.97,-0.99}, {0.99,-2.97,-0.99}, {0.99,0.99,-0.99} , {-0.49,0.99,-0.99}, {-0.49,-2.97,0.99} , {0.99,-2.97,0.99}, {0.99,0.99,0.99} , {-0.49,0.99,0.99} }; glBegin( wire ? GL_LINE_LOOP : GL_POLYGON); glNormal3fv(topBlockNormals[i] ); glVertex3fv(topBlockVertices[a]); glVertex3fv(topBlockVertices[b]); glVertex3fv(topBlockVertices[c]); glVertex3fv(topBlockVertices[d]); glEnd(); } /* called at init this creates the 'block' display list item */ /* the spheres came about originaly as quick way to test the directional lighting/normals */ static void buildBlock(ModeInfo *mi) { int i,c; int wire = MI_IS_WIREFRAME(mi); topBlockSTATE *tb = &tbs[MI_SCREEN(mi)]; tb->block=glGenLists(1); /* only one */ glNewList(tb->block,GL_COMPILE); tb->block_polys=0; glPushMatrix(); /* save state */ glRotatef(90, 0.0f, 1.0f, 0.0f); /* base */ polygonPlane(wire, 0,3,2,1,0); tb->block_polys++; polygonPlane(wire, 2,3,7,6,1); tb->block_polys++; polygonPlane(wire, 1,2,6,5,2); tb->block_polys++; polygonPlane(wire, 4,5,6,7,3); tb->block_polys++; polygonPlane(wire, 0,1,5,4,4); tb->block_polys++; if (drawNipples) { /* nipples */ /* draw 8 cylinders each with a disk cap */ glRotatef(90, 0.0f, 1.0f, 0.0f); /* 'aim' the pointer ready for the cylinder */ glTranslatef(0.5f,0.5f,0.99f); /* move to the cylinder center */ for (c=0;c<2;c++) { for (i=0;i<4;i++) { tb->block_polys += tube(0, 0, 0, 0, 0, 0.25, cylSize, 0, resolution, True, True, wire); glTranslatef(0.0f,0.0f,0.25f); /* move to the cylinder cap */ glTranslatef(0.0f,0.0f,-0.25f); /* move back from the cylinder cap */ if (c==0) { glTranslatef(0.0f,-1.0f,0.0f); /* move to the next cylinder center (forward) */ } else { glTranslatef(0.0f,1.0f,0.0f); /* move to the next cylinder center (backward) */ } } glTranslatef(-1.0f,1.0f,0.0f); /* move to the cylinder center */ } /* udders */ /* 3 cylinders on the underside */ glTranslatef(1.5f,-2.5f,-1.5f); /* move to the center, under the top of the brick */ if (! wire) for (c=0;c<3;c++) { tb->block_polys += tube(0, 0, 0.1, 0, 0, 1.4, uddSize, 0, resolution, True, True, wire); glTranslatef(0.0f,-1.0f,0.0f); /* move to the center */ } } glPopMatrix(); /* restore state */ glEndList(); } /* rip off of the builBlock() function creating the GL compilied pointer "block" but only creates two spheres. spheres are created with unit_sphere from spheres.h to allow wire frame */ static void buildBlobBlock(ModeInfo *mi) { int wire = MI_IS_WIREFRAME(mi); topBlockSTATE *tb = &tbs[MI_SCREEN(mi)]; tb->block=glGenLists(1); /* only one */ glNewList(tb->block,GL_COMPILE); glPushMatrix(); glScalef(1.4,1.4,1.4); unit_sphere (resolution/2,resolution, wire); glPopMatrix(); glTranslatef(0.0f,-2.0f,0.0f); glScalef(1.4,1.4,1.4); unit_sphere (resolution/2,resolution, wire); glEndList(); } /* handle input events or not if daemon running the show */ ENTRYPOINT Bool topBlock_handle_event (ModeInfo *mi, XEvent *event) { topBlockSTATE *tb = &tbs[MI_SCREEN(mi)]; if (gltrackball_event_handler (event, tb->trackball, MI_WIDTH (mi), MI_HEIGHT (mi), &tb->button_down_p)) return True; else if (event->xany.type == KeyPress) { KeySym keysym; char c = 0; XLookupString (&event->xkey, &c, 1, &keysym, 0); if (c == 'a') { tb->eyeX++; return True; } else if (c == 'z') { tb->eyeX--; return True; } else if (c == 's') { tb->eyeY--; return True; } else if (c == 'x') { tb->eyeY++; return True; } else if (c == 'd') { tb->eyeZ++; return True; } else if (c == 'c') { tb->eyeZ--; return True; } else if (c == 'f') { camX++; return True; } else if (c == 'v') { camX--; return True; } else if (c == 'g') { camY++; return True; } else if (c == 'b') { camY--; return True; } else if (c == 'h') { camZ++; return True; } else if (c == 'n') { camZ--; return True; } else if (c == 'r') { tb->rotation++; return True; } } return False; } /* this is tha main change for v5 compatability and acompanying ENTRYPOINTS */ XSCREENSAVER_MODULE_2 ("TopBlock", topblock, topBlock) #endif /* USE_GL */ xscreensaver-5.36/hacks/glx/glschool.c000644 000767 000024 00000015722 12701612217 020005 0ustar00jwzstaff000000 000000 /* glschool.c, Copyright (c) 2005-2006 David C. Lambert * * 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. */ #include "xlockmore.h" #include "glschool.h" #define sws_opts xlockmore_opts #define DEFAULTS "*delay: 20000 \n" \ "*showFPS: False \n" \ "*wireframe: False \n" \ #define refresh_glschool (0) #define release_glschool (0) #define glschool_handle_event (0) #undef countof #define countof(x) (sizeof((x))/sizeof((*x))) #define DEF_NFISH "100" #define DEF_FOG "False" #define DEF_DRAWBBOX "True" #define DEF_DRAWGOAL "False" #define DEF_GOALCHGF "50" #define DEF_MAXVEL "7.0" #define DEF_MINVEL "1.0" #define DEF_ACCLIMIT "8.0" #define DEF_DISTEXP "2.2" #define DEF_AVOIDFACT "1.5" #define DEF_MATCHFACT "0.15" #define DEF_CENTERFACT "0.1" #define DEF_TARGETFACT "80" #define DEF_MINRADIUS "30.0" #define DEF_MOMENTUM "0.9" #define DEF_DISTCOMP "10.0" static int NFish; static Bool DoFog; static Bool DoDrawBBox; static Bool DoDrawGoal; static int GoalChgFreq; static float MinVel; static float MaxVel; static float DistExp; static float AccLimit; static float AvoidFact; static float MatchFact; static float TargetFact; static float CenterFact; static float MinRadius; static float Momentum; static float DistComp; static XrmOptionDescRec opts[] = { { "-nfish", ".nfish", XrmoptionSepArg, 0 }, { "-fog", ".fog", XrmoptionNoArg, "True" }, { "+fog", ".fog", XrmoptionNoArg, "False" }, { "-drawgoal", ".drawgoal", XrmoptionNoArg, "True" }, { "+drawgoal", ".drawgoal", XrmoptionNoArg, "False" }, { "-drawbbox", ".drawbbox", XrmoptionNoArg, "True" }, { "+drawbbox", ".drawbbox", XrmoptionNoArg, "False" }, { "-goalchgf", ".goalchgf", XrmoptionSepArg, 0 }, { "-maxvel", ".maxvel", XrmoptionSepArg, 0 }, { "-minvel", ".minvel", XrmoptionSepArg, 0 }, { "-acclimit", ".acclimit", XrmoptionSepArg, 0 }, { "-distexp", ".distexp", XrmoptionSepArg, 0 }, { "-avoidfact", ".avoidfact", XrmoptionSepArg, 0 }, { "-matchfact", ".matchfact", XrmoptionSepArg, 0 }, { "-centerfact",".centerfact", XrmoptionSepArg, 0 }, { "-targetfact",".targetfact", XrmoptionSepArg, 0 }, { "-minradius", ".minradius", XrmoptionSepArg, 0 }, { "-distcomp", ".distcomp", XrmoptionSepArg, 0 }, { "-momentum", ".momentum", XrmoptionSepArg, 0 }, }; static argtype vars[] = { {&NFish, "nfish", "NFish", DEF_NFISH, t_Int}, {&DoFog, "fog", "DoFog", DEF_FOG, t_Bool}, {&DoDrawBBox, "drawbbox", "DoDrawBBox", DEF_DRAWBBOX, t_Bool}, {&DoDrawGoal, "drawgoal", "DoDrawGoal", DEF_DRAWGOAL, t_Bool}, {&GoalChgFreq, "goalchgf", "GoalChgFreq", DEF_GOALCHGF, t_Int}, {&MaxVel, "maxvel", "MaxVel", DEF_MAXVEL, t_Float}, {&MinVel, "minvel", "MinVel", DEF_MINVEL, t_Float}, {&AccLimit, "acclimit", "AccLimit", DEF_ACCLIMIT, t_Float}, {&DistExp, "distexp", "DistExp", DEF_DISTEXP, t_Float}, {&AvoidFact, "avoidfact", "AvoidFact", DEF_AVOIDFACT, t_Float}, {&MatchFact, "matchfact", "MatchFact", DEF_MATCHFACT, t_Float}, {&CenterFact, "centerfact", "CenterFact", DEF_CENTERFACT, t_Float}, {&TargetFact, "targetfact", "TargetFact", DEF_TARGETFACT, t_Float}, {&MinRadius, "minradius", "MinRadius", DEF_MINRADIUS, t_Float}, {&Momentum, "momentum", "Momentum", DEF_MOMENTUM, t_Float}, {&DistComp, "distcomp", "DistComp", DEF_DISTCOMP, t_Float}, }; ENTRYPOINT ModeSpecOpt glschool_opts = {countof(opts), opts, countof(vars), vars, NULL}; typedef struct { int nColors; int rotCounter; int goalCounter; Bool drawGoal; Bool drawBBox; GLuint bboxList; GLuint goalList; GLuint fishList; int fish_polys, box_polys; XColor *colors; School *school; GLXContext *context; } glschool_configuration; static glschool_configuration *scs = NULL; ENTRYPOINT void reshape_glschool(ModeInfo *mi, int width, int height) { Bool wire = MI_IS_WIREFRAME(mi); double aspect = (double)width/(double)height; glschool_configuration *sc = &scs[MI_SCREEN(mi)]; glXMakeCurrent(MI_DISPLAY(mi), MI_WINDOW(mi), *(sc->context)); if (sc->school != (School *)0) { glschool_setBBox(sc->school, -aspect*160, aspect*160, -130, 130, -450, -50.0); glDeleteLists(sc->bboxList, 1); glschool_createBBoxList(&SCHOOL_BBOX(sc->school), &sc->bboxList, wire); } glschool_reshape(width, height); } ENTRYPOINT void init_glschool(ModeInfo *mi) { int width = MI_WIDTH(mi); int height = MI_HEIGHT(mi); Bool wire = MI_IS_WIREFRAME(mi); glschool_configuration *sc; if (!scs) { scs = (glschool_configuration *)calloc(MI_NUM_SCREENS(mi), sizeof(glschool_configuration)); if (!scs) { perror("init_glschool: "); exit(1); } } sc = &scs[MI_SCREEN(mi)]; sc->drawGoal = DoDrawGoal; sc->drawBBox = DoDrawBBox; sc->nColors = 360; sc->context = init_GL(mi); sc->colors = (XColor *)calloc(sc->nColors, sizeof(XColor)); make_color_ramp(0, 0, 0, 0.0, 1.0, 1.0, 359.0, 1.0, 1.0, sc->colors, &sc->nColors, False, 0, False); sc->school = glschool_initSchool(NFish, AccLimit, MaxVel, MinVel, DistExp, Momentum, MinRadius, AvoidFact, MatchFact, CenterFact, TargetFact, DistComp); if (sc->school == (School *)0) { fprintf(stderr, "couldn't initialize TheSchool, exiting\n"); exit(1); } reshape_glschool(mi, width, height); 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 draw_glschool(ModeInfo *mi) { Window window = MI_WINDOW(mi); Display *dpy = MI_DISPLAY(mi); glschool_configuration *sc = &scs[MI_SCREEN(mi)]; if (!sc->context) { fprintf(stderr, "no context\n"); return; } glXMakeCurrent(MI_DISPLAY(mi), MI_WINDOW(mi), *(sc->context)); mi->polygon_count = 0; if ((sc->goalCounter % GoalChgFreq) == 0) glschool_newGoal(sc->school); sc->goalCounter++; sc->rotCounter++; sc->rotCounter = (sc->rotCounter%360); 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); glFinish(); glXSwapBuffers(dpy, window); } XSCREENSAVER_MODULE("GLSchool", glschool) xscreensaver-5.36/hacks/glx/glschool_gl.c000644 000767 000024 00000014775 12701612217 020476 0ustar00jwzstaff000000 000000 /* glschool_gl.c, Copyright (c) 2005-2012 David C. Lambert * * 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. */ #include "sphere.h" #include "glschool_gl.h" #include "sphere.h" #include "tube.h" void glschool_drawGoal(double *goal, GLuint goalList) { glColor3f(1.0, 0.0, 0.0); glPushMatrix(); { glTranslatef(goal[0], goal[1], goal[2]); glColor3f(1.0, 0.0, 0.0); glCallList(goalList); } glPopMatrix(); } int glschool_drawBoundingBox(BBox *bbox, Bool wire) { int polys = 0; double xMin = BBOX_XMIN(bbox); double yMin = BBOX_YMIN(bbox); double zMin = BBOX_ZMIN(bbox); double xMax = BBOX_XMAX(bbox); double yMax = BBOX_YMAX(bbox); double zMax = BBOX_ZMAX(bbox); glFrontFace(GL_CCW); if (wire) glLineWidth(5.0); /* back */ glBegin(wire ? GL_LINE_LOOP : GL_QUADS); glColor3f(0.0, 0.0, .15); glVertex3f(xMin, yMin, zMin); glVertex3f(xMax, yMin, zMin); glVertex3f(xMax, yMax, zMin); glVertex3f(xMin, yMax, zMin); polys++; glEnd(); /* left */ glBegin(wire ? GL_LINE_LOOP : GL_QUADS); glColor3f(0.0, 0.0, .2); glVertex3f(xMin, yMin, zMax); glVertex3f(xMin, yMin, zMin); glVertex3f(xMin, yMax, zMin); glVertex3f(xMin, yMax, zMax); polys++; glEnd(); /* right */ glBegin(wire ? GL_LINE_LOOP : GL_QUADS); glColor3f(0.0, 0.0, .2); glVertex3f(xMax, yMin, zMin); glVertex3f(xMax, yMin, zMax); glVertex3f(xMax, yMax, zMax); glVertex3f(xMax, yMax, zMin); polys++; glEnd(); /* top */ glBegin(wire ? GL_LINE_LOOP : GL_QUADS); glColor3f(0.0, 0.0, .1); glVertex3f(xMax, yMax, zMax); glVertex3f(xMin, yMax, zMax); glVertex3f(xMin, yMax, zMin); glVertex3f(xMax, yMax, zMin); polys++; glEnd(); /* bottom */ glBegin(wire ? GL_LINE_LOOP : GL_QUADS); glColor3f(0.0, 0.0, .3); glVertex3f(xMin, yMin, zMax); glVertex3f(xMax, yMin, zMax); glVertex3f(xMax, yMin, zMin); glVertex3f(xMin, yMin, zMin); polys++; glEnd(); if (wire) glLineWidth(1.0); return polys; } int glschool_createBBoxList(BBox *bbox, GLuint *bboxList, int wire) { int polys = 0; *bboxList = glGenLists(1); glNewList(*bboxList, GL_COMPILE); polys = glschool_drawBoundingBox(bbox, wire); glEndList(); return polys; } void glschool_createDrawLists(BBox *bbox, GLuint *bboxList, GLuint *goalList, GLuint *fishList, int *fish_polys, int *box_polys, int wire) { int faces = 16; *box_polys = 0; *fish_polys = 0; *box_polys += glschool_createBBoxList(bbox, bboxList, wire); *box_polys = 0; *fish_polys = 0; *goalList = glGenLists(1); glNewList(*goalList, GL_COMPILE); glScalef (5, 5, 5); *box_polys += unit_sphere (10, 10, wire); glEndList(); *fishList = glGenLists(1); glNewList(*fishList, GL_COMPILE); *fish_polys += cone (0, 0, 0, 0, 0, 10, 2, 0, faces, True, (faces <= 3), /* cap */ wire); glTranslatef (0, 0, -0.3); glScalef (2, 2, 2); glRotatef (90, 1, 0, 0); if (faces > 3) *fish_polys += unit_sphere (faces, faces, wire); glEndList(); } 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}; GLfloat spc[4] = {1.0, 1.0, 1.0, 1.0}; GLfloat pos[4] = {0.0, 50.0, -50.0, 1.0}; glMatrixMode(GL_MODELVIEW); glLoadIdentity(); glLightfv(GL_LIGHT0, GL_POSITION, pos); glLightfv(GL_LIGHT0, GL_AMBIENT, amb); glLightfv(GL_LIGHT0, GL_DIFFUSE, dif); glLightfv(GL_LIGHT0, GL_SPECULAR, spc); glEnable(GL_LIGHT0); glEnable(GL_LIGHTING); } void glschool_initFog(void) { GLfloat fog[4] = {0.0, 0.0, 0.15, 1.0}; glEnable(GL_FOG); glFogi(GL_FOG_MODE, GL_EXP2); glFogfv(GL_FOG_COLOR, fog); glFogf(GL_FOG_DENSITY, .0025); glFogf(GL_FOG_START, -100); } void glschool_initGLEnv(Bool doFog) { GLfloat spc[4] = {1.0, 1.0, 1.0, 1.0}; glClearDepth(1.0); glDepthFunc(GL_LESS); glEnable(GL_COLOR_MATERIAL); glMateriali(GL_FRONT, GL_SHININESS, 128); glMaterialfv(GL_FRONT, GL_SPECULAR, spc); glMaterialfv(GL_FRONT, GL_AMBIENT_AND_DIFFUSE, spc); glEnable(GL_NORMALIZE); glEnable(GL_DEPTH_TEST); glShadeModel(GL_SMOOTH); glEnable(GL_CULL_FACE); glschool_initLights(); if (doFog) glschool_initFog(); } void glschool_reshape(int width, int height) { GLfloat h = (GLfloat) width / (GLfloat) height; glViewport (0, 0, (GLint) width, (GLint) height); glMatrixMode(GL_PROJECTION); glLoadIdentity(); gluPerspective(60.0, h, 0.1, 451.0); glMatrixMode(GL_MODELVIEW); glLoadIdentity(); } void glschool_getColorVect(XColor *colors, int index, double *colorVect) { colorVect[0] = colors[index].red / 65535.0; colorVect[1] = colors[index].green / 65535.0; colorVect[2] = colors[index].blue / 65535.0; } void 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) { double xVect[3]; double colorVect[3]; int i = 0; double rotTheta = 0.0; double colTheta = 0.0; Fish *f = (Fish *)0; int nFish = SCHOOL_NFISH(s); Fish *theFishes = SCHOOL_FISHES(s); glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glMatrixMode(GL_MODELVIEW); glLoadIdentity(); if (drawBBox_p) { glDisable(GL_LIGHTING); glCallList(bboxList); glEnable(GL_LIGHTING); *polys += box_polys; } if (drawGoal_p) glschool_drawGoal(SCHOOL_GOAL(s), goalList); for(i = 0, f = theFishes; i < nFish; i++, f++) { 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; glschool_getColorVect(colors, (int)(colTheta+240)%360, colorVect); glColor3f(colorVect[0], colorVect[1], colorVect[2]); glPushMatrix(); { glTranslatef(FISH_X(f), FISH_Y(f), FISH_Z(f)); glRotatef(180.0+rotTheta, xVect[0], xVect[1], xVect[2]); glCallList(fishList); *polys += fish_polys; } glPopMatrix(); } glFinish(); } xscreensaver-5.36/hacks/glx/glschool_alg.c000644 000767 000024 00000020473 12701612217 020627 0ustar00jwzstaff000000 000000 /* school_alg.c, Copyright (c) 2005-2006 David C. Lambert * * 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. */ #include #include #include #ifdef HAVE_CONFIG_H # include "config.h" #endif #include "yarandom.h" #include "glschool_alg.h" /* for xscreensaver */ #undef drand48 #define drand48() frand(1.0) #define RAD2DEG (180.0/3.1415926535) static inline double norm(double *dv) { return sqrt(dv[0]*dv[0] + dv[1]*dv[1] + dv[2]*dv[2]); } static inline void addVector(double *v, double *d) { v[0] += d[0]; v[1] += d[1]; v[2] += d[2]; } static inline void clearVector(double *v) { v[0] = v[1] = v[2] = 0.0; } static inline void scaleVector(double *v, double s) { v[0] *= s; v[1] *= s; v[2] *= s; } static inline void addScaledVector(double *v, double *d, double s) { v[0] += d[0]*s; v[1] += d[1]*s; v[2] += d[2]*s; } static inline void getDifferenceVector(double *v0, double *v1, double *diff) { diff[0] = v0[0] - v1[0]; diff[1] = v0[1] - v1[1]; diff[2] = v0[2] - v1[2]; } void glschool_initFish(Fish *f, double *mins, double *ranges) { int i; for(i = 0; i < 3; i++) { FISH_IPOS(f, i) = mins[i] + drand48()*ranges[i]; FISH_IACC(f, i) = 0.0; FISH_IVEL(f, i) = drand48(); FISH_IMAGIC(f, i) = 0.70 + 0.60*drand48(); FISH_IOLDVEL(f, i) = 0.0; } } void glschool_initFishes(School *s) { int i; Fish *f = (Fish *)0; int nFish = SCHOOL_NFISH(s); BBox *bbox = &SCHOOL_BBOX(s); double *mins = BBOX_MINS(bbox); double *ranges = SCHOOL_BBRANGES(s); Fish *theFishes = SCHOOL_FISHES(s); for(i = 0, f = theFishes; i < nFish; i++, f++) glschool_initFish(f, mins, ranges); } static void applyFishMovements(Fish *f, BBox *bbox, double minVel, double maxVel, double momentum) { int i; int oob = 0; double vMag = 0.0; for(i = 0; i < 3; i++) { double pos = FISH_IPOS(f, i); oob = (pos > BBOX_IMAX(bbox, i) || pos < BBOX_IMIN(bbox, i)); if (oob == 0) FISH_IVEL(f, i) += FISH_IACC(f, i) * FISH_IMAGIC(f, i); vMag += (FISH_IVEL(f, i) * FISH_IVEL(f, i)); } vMag = sqrt(vMag); if (vMag > maxVel) scaleVector(FISH_VEL(f), maxVel/vMag); else if (vMag < minVel) scaleVector(FISH_VEL(f), minVel/vMag); for(i = 0; i < 3; i++) { FISH_IVEL(f, i) = momentum * FISH_IOLDVEL(f, i) + (1.0-momentum) * FISH_IVEL(f, i); FISH_IPOS(f, i) += FISH_IVEL(f, i); FISH_IOLDVEL(f, i) = FISH_IVEL(f, i); if (FISH_IPOS(f, i) < BBOX_IMIN(bbox, i)) FISH_IPOS(f, i) = BBOX_IMAX(bbox, i); else if (FISH_IPOS(f, i) > BBOX_IMAX(bbox, i)) FISH_IPOS(f, i) = BBOX_IMIN(bbox, i); } } void glschool_applyMovements(School *s) { int i = 0; Fish *f = (Fish *)0; int nFish = SCHOOL_NFISH(s); double minVel = SCHOOL_MINVEL(s); double maxVel = SCHOOL_MAXVEL(s); double momentum = SCHOOL_MOMENTUM(s); BBox *bbox = &SCHOOL_BBOX(s); Fish *theFishes = SCHOOL_FISHES(s); for(i = 0, f = theFishes; i < nFish; i++, f++) applyFishMovements(f, bbox, minVel, maxVel, momentum); } School * 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) { School *s = (School *)0; if ((s = (School *)malloc(sizeof(School))) == (School *)0) { perror("initSchool School allocation failed: "); return s; } if ((SCHOOL_FISHES(s) = (Fish *)malloc(sizeof(Fish)*nFish)) == (Fish *)0) { perror("initSchool Fish array allocation failed: "); free(s); return (School *)0; } SCHOOL_NFISH(s) = nFish; SCHOOL_ACCLIMIT(s) = accLimit; SCHOOL_MAXVEL(s) = maxV; SCHOOL_MINVEL(s) = minV; SCHOOL_DISTEXP(s) = distExp; SCHOOL_MOMENTUM(s) = momentum; SCHOOL_MINRADIUS(s) = minRadius; SCHOOL_MINRADIUSEXP(s) = pow(minRadius, distExp); SCHOOL_MATCHFACT(s) = matchFact; SCHOOL_AVOIDFACT(s) = avoidFact; SCHOOL_CENTERFACT(s) = centerFact; SCHOOL_TARGETFACT(s) = targetFact; SCHOOL_DISTCOMP(s) = distComp; return s; } void glschool_freeSchool(School *s) { free(SCHOOL_FISHES(s)); free(s); } void glschool_setBBox(School *s, double xMin, double xMax, double yMin, double yMax, double zMin, double zMax) { int i; BBox *bbox = &SCHOOL_BBOX(s); BBOX_XMIN(bbox) = xMin; BBOX_XMAX(bbox) = xMax; BBOX_YMIN(bbox) = yMin; BBOX_YMAX(bbox) = yMax; BBOX_ZMIN(bbox) = zMin; BBOX_ZMAX(bbox) = zMax; for(i = 0; i < 3; i++) { SCHOOL_IMID(s, i) = BBOX_IMID(bbox, i); SCHOOL_IRANGE(s, i) = BBOX_IRANGE(bbox, i); } } void 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); SCHOOL_IGOAL(s,2) = 0.85*(drand48()-0.5)*SCHOOL_IRANGE(s,2) + SCHOOL_IMID(s,2); } double glschool_computeNormalAndThetaToPlusZ(double *v, double *xV) { double x1 = 0.0; double y1 = 0.0; double z1 = 1.0; double x2 = v[0]; double y2 = v[1]; double z2 = v[2]; double theta = 0.0; double xVNorm = 0.0; double sinTheta = 0.0; double v2Norm = norm(v); if (v2Norm == 0.0) { xV[1] = 1.0; xV[0] = xV[2] = 0.0; return theta; } xV[0] = (y1*z2 - z1*y2); xV[1] = -(x1*z2 - z1*x2); xV[2] = (x1*y2 - y1*x2); xVNorm = norm(xV); sinTheta = xVNorm/v2Norm; return (asin(sinTheta) * RAD2DEG); } int glschool_computeGroupVectors(School *s, Fish *ref, double *avoidance, double *centroid, double *avgVel) { int i; double dist; double adjDist; double diffVect[3]; int neighborCount = 0; Fish *test = (Fish *)0; int nFish = SCHOOL_NFISH(s); double distExp = SCHOOL_DISTEXP(s); double distComp = SCHOOL_DISTCOMP(s); double minRadiusExp = SCHOOL_MINRADIUSEXP(s); Fish *fishes = SCHOOL_FISHES(s); for(i = 0, test = fishes; i < nFish; i++, test++) { if (test == ref) continue; getDifferenceVector(FISH_POS(ref), FISH_POS(test), diffVect); dist = norm(diffVect) - distComp; if (dist < 0.0) dist = 0.1; adjDist = pow(dist, distExp); if (adjDist > minRadiusExp) continue; neighborCount++; addVector(avgVel, FISH_VEL(test)); addVector(centroid, FISH_POS(test)); addScaledVector(avoidance, diffVect, 1.0/adjDist); } if (neighborCount > 0) { scaleVector(avgVel, 1.0/neighborCount); scaleVector(centroid, 1.0/neighborCount); } return neighborCount; } void glschool_computeAccelerations(School *s) { int i; int j; int neighborCount; double dist; double adjDist; double accMag; double avgVel[3]; double diffVect[3]; double centroid[3]; double avoidance[3]; Fish *ref = (Fish *)0; int nFish = SCHOOL_NFISH(s); double *goal = SCHOOL_GOAL(s); double distExp = SCHOOL_DISTEXP(s); double distComp = SCHOOL_DISTCOMP(s); double avoidFact = SCHOOL_AVOIDFACT(s); double matchFact = SCHOOL_MATCHFACT(s); double centerFact = SCHOOL_CENTERFACT(s); double targetFact = SCHOOL_TARGETFACT(s); double accLimit = SCHOOL_ACCLIMIT(s); double minRadius = SCHOOL_MINRADIUS(s); Fish *fishes = SCHOOL_FISHES(s); for(i = 0, ref = fishes; i < nFish; i++, ref++) { clearVector(avgVel); clearVector(centroid); clearVector(avoidance); clearVector(FISH_ACC(ref)); neighborCount = glschool_computeGroupVectors(s, ref, avoidance, centroid, avgVel); /* avoidanceAccel[] = avoidance[] * AvoidFact */ scaleVector(avoidance, avoidFact); addVector(FISH_ACC(ref), avoidance); accMag = norm(FISH_ACC(ref)); if (neighborCount > 0 && accMag < accLimit) { for(j = 0; j < 3; j++) { FISH_IAVGVEL(ref, j) = avgVel[j]; FISH_IACC(ref, j) += ((avgVel[j] - FISH_IVEL(ref, j)) * matchFact); } accMag = norm(FISH_ACC(ref)); if (accMag < accLimit) { for(j = 0; j < 3; j++) FISH_IACC(ref, j) += ((centroid[j] - FISH_IPOS(ref, j)) * centerFact); } } accMag = norm(FISH_ACC(ref)); if (accMag < accLimit) { getDifferenceVector(goal, FISH_POS(ref), diffVect); dist = norm(diffVect) - distComp; if (dist < 0.0) dist = 0.1; /*adjDist = pow(dist, distExp);*/ if (dist > minRadius) { adjDist = pow(dist, distExp); for(j = 0; j < 3; j++) FISH_IACC(ref, j) += (diffVect[j]*targetFact/adjDist); } } } } xscreensaver-5.36/hacks/glx/glcells.c000644 000767 000024 00000117362 12710311644 017623 0ustar00jwzstaff000000 000000 /* -*- Mode: C; tab-width: 2 -*- */ /* glcells --- Cells growing on your screen */ /*- * Cells growing on your screen * * Copyright (c) 2007 by Matthias Toussaint * * Permission to use, copy, modify, and distribute this software and its * documentation for any purpose and without fee is hereby granted, * provided that the above copyright notice appear in all copies and that * both that copyright notice and this permission notice appear in * supporting documentation. * * This file is provided AS IS with no warranties of any kind. The author * shall have no liability with respect to the infringement of copyrights, * trade secrets or any patents by this file or any part thereof. In no * event will the author be liable for any lost revenue or profits or * other special, indirect and consequential damages. * * 2007: Written by Matthias Toussaint * 0.1 Initial version * 0.2 Bugfixes (threading) and code cleanup by Jamie Zawinski * Window scaling bug + performance bug in tick() */ #include /* gettimeofday */ #include "xlockmore.h" #include /********************************** DEFINES **********************************/ #define INDEX_OFFSET 100000 #define NUM_CELL_SHAPES 10 #define refresh_glcells 0 #define glcells_handle_event 0 #define DEF_DELAY "20000" #define DEF_MAXCELLS "800" #define DEF_RADIUS "40" #define DEF_SEEDS "1" #define DEF_QUALITY "3" #define DEF_KEEPOLD "False" #define DEF_MINFOOD "5" #define DEF_MAXFOOD "20" #define DEF_DIVIDEAGE "20" #define DEF_MINDIST "1.4" #define DEF_PAUSE "50" #define DEFAULTS "*delay: 30000 \n" \ "*showFPS: False \n" \ "*wireframe: False \n" \ "*suppressRotationAnimation: True\n" \ #undef countof #define countof(x) (sizeof((x))/sizeof((*x))) #ifndef HAVE_JWZGLES /* glDrawElements unimplemented... */ # define USE_VERTEX_ARRAY #endif #define TEX_SIZE 64 /********************************** TYPEDEFS **********************************/ typedef struct /* a 3-D vector */ { double x, y, z; /* 3-D coordinates (we don't need w here) */ } Vector; typedef struct /* a triangle (indexes of vertexes in some list) */ { int i[3]; /* the three indexes for the triangle corners */ } Triangle; typedef struct { float *vertex; float *normal; unsigned *index; int num_index; } VertexArray; typedef struct /* an 3-D object without normal vectors */ { Vector *vertex; /* the vertexes */ Triangle *triangle; /* triangle list */ int num_vertex; /* number of vertexes */ int num_triangle; /* number of triangles */ } Object; typedef struct /* an 3-D object with smooth normal vectors */ { Vector *vertex; /* the vertexes */ Vector *normal; /* the vertex normal vectors */ Triangle *triangle; /* triangle list */ int num_vertex; /* number of vertexes */ int num_triangle; /* number of triangles */ } ObjectSmooth; typedef struct /* Cell */ { double x, y; /* position */ double vx, vy; /* movement vector */ int age; /* cells age */ double min_dist; /* minimum distance to other cells */ int energy; /* health */ double rotation; /* random rot, so they don't look all the same */ double radius; /* current size of cell */ double growth; /* current growth rate. might be <1.0 while dividing, >1.0 when finished dividing and food is available and 1.0 when grown up */ } Cell; typedef struct /* hacks state */ { GLXContext *glx_context; int width, height; /* current size of viewport */ double screen_scale; /* we scale content with window size */ int num_cells; /* current number of cell in list */ Cell *cell; /* array of cells */ int cell_polys; GLfloat color[4]; /* current cell color */ double radius; /* cell radius */ int move_dist; /* min distance from neighbours for forking */ int max_cells; /* maximum number of cells */ int num_seeds; /* number of initial seeds */ int keep_old_cells; /* draw dead cells? */ int divide_age; /* min age for division */ /* display lists for the cell stages */ int cell_list[NUM_CELL_SHAPES]; int nucleus_list; int minfood; /* minimum amount of food per area unit */ int maxfood; /* maximum amount of food per area unit */ int pause; /* pause at end (all cells dead) */ int pause_counter; int wire; /* draw wireframe? */ Object *sphere; /* the raw undisturbed sphere */ double *disturbance; /* disturbance values for the vertexes */ int *food; /* our petri dish (e.g. screen) */ GLubyte *texture; /* texture data for nucleus */ GLuint texture_name; /* texture name for binding */ } State; /********************************** STATIC STUFF **********************************/ static State *sstate = NULL; static XrmOptionDescRec opts[] = { { "-maxcells", ".maxcells", XrmoptionSepArg, 0 }, { "-radius", ".radius", XrmoptionSepArg, 0 }, { "-seeds", ".seeds", XrmoptionSepArg, 0 }, { "-quality", ".quality", XrmoptionSepArg, 0 }, { "-minfood", ".minfood", XrmoptionSepArg, 0 }, { "-maxfood", ".maxfood", XrmoptionSepArg, 0 }, { "-divideage", ".divideage", XrmoptionSepArg, 0 }, { "-mindist", ".mindist", XrmoptionSepArg, 0 }, { "-pause", ".pause", XrmoptionSepArg, 0 }, { "-keepold", ".keepold", XrmoptionNoArg, "True" } }; static int s_maxcells; static int s_radius; static int s_seeds; static int s_quality; static int s_minfood; static int s_maxfood; static int s_divideage; static int s_pause; static float s_min_dist; static Bool s_keepold; static argtype vars[] = { {&s_maxcells, "maxcells", "Max Cells", DEF_MAXCELLS, t_Int}, {&s_radius, "radius", "Radius", DEF_RADIUS, t_Int}, {&s_seeds, "seeds", "Seeds", DEF_SEEDS, t_Int}, {&s_quality, "quality", "Quality", DEF_QUALITY, t_Int}, {&s_minfood, "minfood", "Min Food", DEF_MINFOOD, t_Int}, {&s_maxfood, "maxfood", "Max Food", DEF_MAXFOOD, t_Int}, {&s_pause, "pause", "Pause at end", DEF_PAUSE, t_Int}, {&s_divideage, "divideage", "Age for duplication (Ticks)", DEF_DIVIDEAGE, t_Int}, {&s_min_dist, "mindist", "Minimum preferred distance to other cells", DEF_MINDIST, t_Float}, {&s_keepold, "keepold", "Keep old cells", DEF_KEEPOLD, t_Bool} }; /********************************** PROTOTYPES **********************************/ /* render scene */ static int render( State *st ); /* create initial cells and fill petri dish with food */ static void create_cells( State * ); /* do one animation step */ static void tick( State *st ); /* draw a single cell */ static void draw_cell( State *st, int shape ); /* draw cells nucleus */ static void draw_nucleus( State *st ); /* return randum number in the interval min-max */ static int random_interval( int min, int max ); /* retunr random number in the interval 0-max */ static int random_max( int max ); /* create display list for given disturbance weighting factor */ static int create_list( State *st, double fac ); /* return length of vector */ static double vector_length( Vector * ); /* normalize vector */ static void vector_normalize( Vector * ); /* a += b */ static void vector_add( Vector *a, Vector *b ); /* a -= b */ static void vector_sub( Vector *a, Vector *b ); /* a *= fac */ static void vector_mul( Vector *a, double fac ); /* a.x = a.y = a.z = 0 */ static void vector_clear( Vector *a ); /* return crossproduct a*b in out */ static void vector_crossprod( Vector *a, Vector *b, Vector *out ); /* return 1 if vectors are equal (epsilon compare) otherwise 0 */ static int vector_compare( Vector *a, Vector *b ); /* compute normal vector of given triangle and return in out */ static void triangle_normal( Vector *a, Vector *b, Vector *c, Vector *out ); /* take an Object and create an ObjectSmooth out of it */ static ObjectSmooth *create_ObjectSmooth( Object * ); /* Subdivide the Object once (assuming it's supposed to be a shpere */ static Object *subdivide( Object *obj ); /* free an Object */ static void free_Object( Object * ); /* free an ObjectSmooth */ static void free_ObjectSmooth( ObjectSmooth * ); /* scale an Object. return pointer to the object */ /*static Object *scale_Object( Object *obj, double scale );*/ /* create a perfect sphere refining with divisions */ static Object *create_sphere( State *st, int divisions ); /* make a copy of the given Object */ static Object *clone_Object( Object * ); /* return 1 if cell is capable to divide */ static int can_divide( State *st, Cell *cell ); #ifdef USE_VERTEX_ARRAY static VertexArray *array_from_ObjectSmooth( ObjectSmooth * ); #endif static void create_nucleus_texture( State *st ); ENTRYPOINT ModeSpecOpt glcells_opts = { countof(opts), opts, countof(vars), vars, NULL }; /********************************** INLINE FUNCTIONS **********************************/ /* create random numbers */ static inline int random_interval( int min, int max ) { int n = max - min; if (n == 0) n = 1; return min+(random()%n); } static inline int random_max( int max ) { return random()%max; } /* Vector stuff */ /* a += b */ static inline void vector_add( Vector *a, Vector *b ) { a->x += b->x; a->y += b->y; a->z += b->z; } /* a -= b */ static inline void vector_sub( Vector *a, Vector *b ) { a->x -= b->x; a->y -= b->y; a->z -= b->z; } /* a *= v */ static inline void vector_mul( Vector *a, double v ) { a->x *= v; a->y *= v; a->z *= v; } /* set to 0 */ static inline void vector_clear( Vector *vec ) { vec->x = vec->y = vec->z = 0; } /* return vector length */ static inline double vector_length( Vector *vec ) { return sqrt( vec->x*vec->x + vec->y*vec->y + vec->z*vec->z ); } /* normalize vector */ static inline void vector_normalize( Vector *vec ) { double len = vector_length( vec ); if (len != 0.0) { vector_mul( vec, 1.0 / len ); } } /* crossproduct */ static inline void vector_crossprod( Vector *a, Vector *b, Vector *out ) { out->x = a->y*b->z - a->z*b->y; out->y = a->z*b->x - a->x*b->z; out->z = a->x*b->y - a->y*b->x; } /* epsilon compare of two vectors */ static inline int vector_compare( Vector *a, Vector *b ) { const double epsilon = 0.0000001; Vector delta = *a; vector_sub( &delta, b ); if (fabs(delta.x) < epsilon && fabs(delta.y) < epsilon && fabs(delta.z) < epsilon) { return 1; } return 0; } /* check if given cell is capable of dividing needs space, must be old enough, grown up and healthy */ static inline int can_divide( State *st, Cell *cell ) { if (cell->min_dist > st->move_dist && cell->age >= st->divide_age && cell->radius > 0.99 * st->radius && cell->energy > 0) { return 1; } return 0; } /********************************** FUNCTIONS **********************************/ /* compute normal vector of given triangle spanned by the points a, b, c */ static void triangle_normal( Vector *a, Vector *b, Vector *c, Vector *out ) { Vector v1 = *a; Vector v2 = *a; vector_sub( &v1, b ); vector_sub( &v2, c ); vector_crossprod( &v1, &v2, out ); } /* free */ static void free_Object( Object *obj ) { free( obj->vertex ); free( obj->triangle ); free( obj ); } static void free_ObjectSmooth( ObjectSmooth *obj ) { free( obj->vertex ); free( obj->triangle ); free( obj->normal ); free( obj ); } /* scale the given Object */ #if 0 static Object *scale_Object( Object *obj, double scale ) { int v; for (v=0; vnum_vertex; ++v) { vector_mul( &obj->vertex[v], scale ); } return obj; } #endif /* create a copy of the given Object */ static Object *clone_Object( Object *obj ) { /* alloc */ Object *ret = (Object *) malloc( sizeof( Object ) ); ret->vertex = (Vector *) malloc( obj->num_vertex*sizeof(Vector) ); ret->triangle = (Triangle *) malloc( obj->num_triangle*sizeof(Triangle) ); ret->num_vertex = obj->num_vertex; ret->num_triangle = obj->num_triangle; /* copy */ memcpy( ret->vertex, obj->vertex, obj->num_vertex*sizeof(Vector) ); memcpy( ret->triangle, obj->triangle, obj->num_triangle*sizeof(Triangle) ); return ret; } #ifdef USE_VERTEX_ARRAY static VertexArray *array_from_ObjectSmooth( ObjectSmooth *obj ) { int i, j; VertexArray *array = (VertexArray *) malloc( sizeof( VertexArray ) ); array->vertex = (float *) malloc( 3*sizeof(float)*obj->num_vertex ); array->normal = (float *) malloc( 3*sizeof(float)*obj->num_vertex ); array->index = (unsigned *) malloc( 3*sizeof(unsigned)*obj->num_triangle ); array->num_index = obj->num_triangle*3; for (i=0, j=0; inum_vertex; ++i) { array->vertex[j] = obj->vertex[i].x; array->normal[j++] = obj->normal[i].x; array->vertex[j] = obj->vertex[i].y; array->normal[j++] = obj->normal[i].y; array->vertex[j] = obj->vertex[i].z; array->normal[j++] = obj->normal[i].z; } for (i=0, j=0; inum_triangle; ++i) { array->index[j++] = obj->triangle[i].i[0]; array->index[j++] = obj->triangle[i].i[1]; array->index[j++] = obj->triangle[i].i[2]; } return array; } #endif /* USE_VERTEX_ARRAY */ /* create a smoothed version of the given Object by computing average normal vectors for the vertexes */ static ObjectSmooth *create_ObjectSmooth( Object *obj ) { int t, v, i; Vector *t_normal = (Vector *) malloc( obj->num_triangle*sizeof(Vector) ); ObjectSmooth *ret = (ObjectSmooth *) malloc( sizeof( ObjectSmooth ) ); /* fill in vertexes and triangles */ ret->num_vertex = obj->num_vertex; ret->num_triangle = obj->num_triangle; ret->vertex = (Vector *) malloc( obj->num_vertex * sizeof( Vector ) ); ret->normal = (Vector *) malloc( obj->num_vertex * sizeof( Vector ) ); ret->triangle = (Triangle *) malloc( obj->num_triangle * sizeof( Triangle ) ); for (v=0; vnum_vertex; ++v) { ret->vertex[v] = obj->vertex[v]; } for (t=0; tnum_triangle; ++t) { ret->triangle[t] = obj->triangle[t]; } /* create normals (triangles) */ for (t=0; tnum_triangle; ++t) { triangle_normal( &ret->vertex[ret->triangle[t].i[0]], &ret->vertex[ret->triangle[t].i[1]], &ret->vertex[ret->triangle[t].i[2]], &t_normal[t] ); } /* create normals (vertex) by averaging triangle normals at vertex */ for (v=0; vnum_vertex; ++v) { vector_clear( &ret->normal[v] ); for (t=0; tnum_triangle; ++t) { for (i=0; i<3; ++i) { if (ret->triangle[t].i[i] == v) { vector_add( &ret->normal[v], &t_normal[t] ); } } } /* as we have only a half sphere we force the normals at the bortder to be perpendicular to z. the simple algorithm above makes an error here. */ if (fabs(ret->vertex[v].z) < 0.0001) { ret->normal[v].z = 0.0; } vector_normalize( &ret->normal[v] ); } free( t_normal ); return ret; } /* subdivide the triangles of the object once The order of this algorithm is probably something like O(n^42) :) but I can't think of something smarter at the moment */ static Object *subdivide( Object *obj ) { /* create for worst case (which I dont't know) */ int start, t, i, v; int index_list[1000]; int index_cnt, index_found; Object *tmp = (Object *)malloc( sizeof(Object) ); Object *ret = (Object *)malloc( sizeof(Object) ); Object *c_ret; tmp->vertex = (Vector *)malloc( 100*obj->num_vertex*sizeof( Vector ) ); tmp->triangle = (Triangle *)malloc( 4*obj->num_triangle*sizeof( Triangle ) ); tmp->num_vertex = 0; tmp->num_triangle = 0; ret->vertex = (Vector *)malloc( 100*obj->num_vertex*sizeof( Vector ) ); ret->triangle = (Triangle *)malloc( 4*obj->num_triangle*sizeof( Triangle ) ); ret->num_vertex = 0; ret->num_triangle = 0; #ifdef PRINT_STAT fprintf( stderr, "in v=%d t=%d\n", obj->num_vertex, obj->num_triangle ); #endif /* for each triangle create 3 new vertexes and the 4 corresponding triangles */ for (t=0; tnum_triangle; ++t) { /* copy the three original vertexes */ for (i=0; i<3; ++i) { tmp->vertex[tmp->num_vertex++] = obj->vertex[obj->triangle[t].i[i]]; } /* create 3 new */ tmp->vertex[tmp->num_vertex] = obj->vertex[obj->triangle[t].i[0]]; vector_add( &tmp->vertex[tmp->num_vertex], &obj->vertex[obj->triangle[t].i[1]] ); vector_mul( &tmp->vertex[tmp->num_vertex++], 0.5 ); tmp->vertex[tmp->num_vertex] = obj->vertex[obj->triangle[t].i[1]]; vector_add( &tmp->vertex[tmp->num_vertex], &obj->vertex[obj->triangle[t].i[2]] ); vector_mul( &tmp->vertex[tmp->num_vertex++], 0.5 ); tmp->vertex[tmp->num_vertex] = obj->vertex[obj->triangle[t].i[2]]; vector_add( &tmp->vertex[tmp->num_vertex], &obj->vertex[obj->triangle[t].i[0]] ); vector_mul( &tmp->vertex[tmp->num_vertex++], 0.5 ); /* create triangles */ start = tmp->num_vertex-6; tmp->triangle[tmp->num_triangle].i[0] = start; tmp->triangle[tmp->num_triangle].i[1] = start+3; tmp->triangle[tmp->num_triangle++].i[2] = start+5; tmp->triangle[tmp->num_triangle].i[0] = start+3; tmp->triangle[tmp->num_triangle].i[1] = start+1; tmp->triangle[tmp->num_triangle++].i[2] = start+4; tmp->triangle[tmp->num_triangle].i[0] = start+5; tmp->triangle[tmp->num_triangle].i[1] = start+4; tmp->triangle[tmp->num_triangle++].i[2] = start+2; tmp->triangle[tmp->num_triangle].i[0] = start+3; tmp->triangle[tmp->num_triangle].i[1] = start+4; tmp->triangle[tmp->num_triangle++].i[2] = start+5; } /* compress object eliminating double vertexes (welcome to the not so smart section) */ /* copy original triangle list */ for (t=0; tnum_triangle; ++t) { ret->triangle[t] = tmp->triangle[t]; } ret->num_triangle = tmp->num_triangle; /* copy unique vertexes and correct triangle list */ for (v=0; vnum_vertex; ++v) { /* create list of vertexes that are the same */ index_cnt = 0; for (i=0; inum_vertex; ++i) { /* check if i and v are the same first in the list is the smallest index */ if (vector_compare( &tmp->vertex[v], &tmp->vertex[i] )) { index_list[index_cnt++] = i; } } /* check if vertex unknown so far */ index_found = 0; for (i=0; inum_vertex; ++i) { if (vector_compare( &ret->vertex[i], &tmp->vertex[index_list[0]] )) { index_found = 1; break; } } if (!index_found) { ret->vertex[ret->num_vertex] = tmp->vertex[index_list[0]]; /* correct triangles (we add an offset to the index, so we can tell them apart) */ for (t=0; tnum_triangle; ++t) { for (i=0; itriangle[t].i[0] == index_list[i]) { ret->triangle[t].i[0] = ret->num_vertex+INDEX_OFFSET; } if (ret->triangle[t].i[1] == index_list[i]) { ret->triangle[t].i[1] = ret->num_vertex+INDEX_OFFSET; } if (ret->triangle[t].i[2] == index_list[i]) { ret->triangle[t].i[2] = ret->num_vertex+INDEX_OFFSET; } } } ret->num_vertex++; } } free_Object( tmp ); /* correct index offset */ for (t=0; tnum_triangle; ++t) { ret->triangle[t].i[0] -= INDEX_OFFSET; ret->triangle[t].i[1] -= INDEX_OFFSET; ret->triangle[t].i[2] -= INDEX_OFFSET; } /* normalize vertexes */ for (v=0; vnum_vertex; ++v) { vector_normalize( &ret->vertex[v] ); } #ifdef PRINT_STAT fprintf( stderr, "out v=%d t=%d\n", ret->num_vertex, ret->num_triangle ); #endif /* shrink the arrays by cloning */ c_ret = clone_Object( ret ); free_Object( ret ); return c_ret; } static int render( State *st ) { #ifdef PRINT_STAT struct timeval tv1, tv2; int usec; #endif GLfloat LightAmbient[]= { 0.1f, 0.1f, 0.1f, 1.0f }; GLfloat LightPosition[]= { -20.0f, -10.0f, -100.0f, 0.0f }; int b; int num_paint = 0; if (0 == st->food) return 0; #ifdef PRINT_STAT gettimeofday( &tv1, NULL ); #endif /* life goes on... */ tick( st ); #ifdef PRINT_STAT gettimeofday( &tv2, NULL ); usec = (tv2.tv_sec-tv1.tv_sec)*1000000+(tv2.tv_usec-tv1.tv_usec); fprintf( stderr, "tick %d\n", usec ); gettimeofday( &tv1, NULL ); #endif glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT ); glDepthFunc(GL_LESS); glEnable(GL_DEPTH_TEST); glLightfv( GL_LIGHT0, GL_AMBIENT, LightAmbient ); glLightfv( GL_LIGHT0, GL_DIFFUSE, st->color ); glLightfv( GL_LIGHT0, GL_POSITION, LightPosition ); /* prepare lighting vs. wireframe */ if (!st->wire) { glEnable( GL_LIGHT0 ); glEnable( GL_LIGHTING ); glEnable( GL_NORMALIZE ); glPolygonMode( GL_FRONT, GL_FILL ); } else { # ifndef HAVE_JWZGLES /* #### glPolygonMode other than GL_FILL unimplemented */ glPolygonMode( GL_FRONT, GL_LINE ); # endif } # if 0 if (st->wire) { glDisable(GL_DEPTH_TEST); glColor3f (1, 1, 1); glBegin(GL_LINE_LOOP); glVertex3f(0, 0, 0); glVertex3f(st->width, 0, 0); glVertex3f(st->width, st->height, 0); glVertex3f(0, st->height, 0); glVertex3f(0, 0, 0); glVertex3f(st->width/4, 0, 0); glVertex3f(st->width/4, st->height/4, 0); glVertex3f(0, st->height/4, 0); glEnd(); } # endif /* draw the dead cells if choosen */ if (st->keep_old_cells) { for (b=0; bnum_cells; ++b) { if (st->cell[b].energy <= 0) { num_paint++; glPushMatrix(); glTranslatef( st->cell[b].x, st->cell[b].y, 0.0 ); glRotatef( st->cell[b].rotation, 0.0, 0.0, 1.0 ); glScalef( st->cell[b].radius, st->cell[b].radius, st->cell[b].radius ); draw_cell( st, 9 ); glPopMatrix(); } } } /* draw the living cells */ for (b=0; bnum_cells; ++b) { if (st->cell[b].energy >0) { double fac = (double)st->cell[b].energy / 50.0; int shape; if (fac < 0.0) fac = 0.0; if (fac > 1.0) fac = 1.0; shape = (int)(9.0*fac); num_paint++; /*glColor3f( fac, fac, fac );*/ # if 0 if (st->wire) { glBegin(GL_LINES); glVertex3f(0, 0, 0); glVertex3f(st->cell[b].x, st->cell[b].y, 0); glEnd(); } # endif glPushMatrix(); glTranslatef( st->cell[b].x, st->cell[b].y, 0.0 ); glRotatef( st->cell[b].rotation, 0.0, 0.0, 1.0 ); glScalef( st->cell[b].radius, st->cell[b].radius, st->cell[b].radius ); draw_cell( st, 9-shape ); glPopMatrix(); } } /* draw cell nuclei */ if (!st->wire) { glDisable( GL_LIGHT0 ); glDisable( GL_LIGHTING ); glEnable( GL_BLEND ); glDisable( GL_DEPTH_TEST ); glBlendFunc( GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA ); glEnable( GL_TEXTURE_2D ); glTexEnvf( GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE ); glBindTexture( GL_TEXTURE_2D, st->texture_name ); for (b=0; bnum_cells; ++b) { if (st->cell[b].energy>0 || st->keep_old_cells) { glPushMatrix(); glTranslatef( st->cell[b].x, st->cell[b].y, 0.0 ); glScalef( st->cell[b].radius, st->cell[b].radius, st->cell[b].radius ); draw_nucleus( st ); glPopMatrix(); } } glDisable( GL_TEXTURE_2D ); glDisable( GL_BLEND ); } #ifdef PRINT_STAT gettimeofday( &tv2, NULL ); usec = (tv2.tv_sec-tv1.tv_sec)*1000000+(tv2.tv_usec-tv1.tv_usec); fprintf( stderr, "OpenGL %d\n", usec ); #endif return num_paint * st->cell_polys; } /* this creates the initial subdivided half-dodecaedron */ static Object *create_sphere( State *st, int divisions ) { int num_vertex = 9; int num_triangle = 10; int i, v, t; double a, aStep = (double)M_PI / 3.0; double e; int vi[30] = { 0, 7, 1, 1, 7, 2, 2, 8, 3, 3, 8, 4, 4, 6, 5, 5, 6, 0, 0, 6, 7, 2, 7, 8, 4, 8, 6, 6, 8, 7 }; Object *obj = (Object *)malloc( sizeof( Object ) ); obj->vertex = (Vector *)malloc( num_vertex*sizeof( Vector ) ); obj->triangle = (Triangle *)malloc( num_triangle*sizeof( Triangle ) ); obj->num_vertex = num_vertex; obj->num_triangle = num_triangle; /* create vertexes for dodecaedron */ a = 0.0; for (v=0; v<6; ++v) { obj->vertex[v].x = sin( a ); obj->vertex[v].y = -cos( a ); obj->vertex[v].z = 0.0; a += aStep; } a = -60.0/180.0*(double)M_PI; e = 58.2825/180.0 * (double)M_PI; for (;v<9; ++v) { obj->vertex[v].x = sin( a )*cos( e ); obj->vertex[v].y = -cos( a )*cos( e ); obj->vertex[v].z = -sin( e ); a += 2.0*aStep; } /* create triangles */ for (t=0; tnum_triangle; ++t) { obj->triangle[t].i[0] = vi[3*t]; obj->triangle[t].i[1] = vi[3*t+1]; obj->triangle[t].i[2] = vi[3*t+2]; } /* subdivide as specified */ for (i=0; icell_polys = obj->num_triangle; return obj; } static int create_list( State *st, double fac ) { int v; Object *obj = clone_Object( st->sphere ); ObjectSmooth *smooth; #ifdef USE_VERTEX_ARRAY VertexArray *vertex_array; #else int t, i; #endif int list = glGenLists(1); /* apply wrinckle factor */ for (v=0; vnum_vertex; ++v) { vector_mul( &obj->vertex[v], 1.0+fac*st->disturbance[v] ); } /* compute normals */ smooth = create_ObjectSmooth( obj ); free_Object( obj ); /* Create display list */ glNewList( list, GL_COMPILE ); #ifdef USE_VERTEX_ARRAY vertex_array = array_from_ObjectSmooth( smooth ); glEnableClientState( GL_VERTEX_ARRAY ); glEnableClientState( GL_NORMAL_ARRAY ); glVertexPointer( 3, GL_FLOAT, 0, vertex_array->vertex ); glNormalPointer( GL_FLOAT, 0, vertex_array->normal ); glDrawElements( GL_TRIANGLES, vertex_array->num_index, GL_UNSIGNED_INT, vertex_array->index ); free( vertex_array ); #else glBegin( GL_TRIANGLES ); for (t=0; tnum_triangle; ++t) { for (i=0; i<3; ++i) { glNormal3f( smooth->normal[smooth->triangle[t].i[i]].x, smooth->normal[smooth->triangle[t].i[i]].y, smooth->normal[smooth->triangle[t].i[i]].z ); glVertex3f( smooth->vertex[smooth->triangle[t].i[i]].x, smooth->vertex[smooth->triangle[t].i[i]].y, smooth->vertex[smooth->triangle[t].i[i]].z ); } } glEnd(); #endif glEndList(); free_ObjectSmooth( smooth ); return list; } static void draw_cell( State *st, int shape ) { # ifdef HAVE_JWZGLES /* #### glPolygonMode other than GL_FILL unimplemented */ if (st->wire) { glDisable(GL_DEPTH_TEST); glColor3f (1, 1, 1); glPushMatrix(); glScalef (0.33, 0.33, 1); glBegin (GL_LINE_LOOP); glVertex3f (-1, -1, 0); glVertex3f (-1, 1, 0); glVertex3f ( 1, 1, 0); glVertex3f ( 1, -1, 0); glEnd(); if (shape == 9) { glBegin (GL_LINES); glVertex3f (-1, -1, 0); glVertex3f (1, 1, 0); glVertex3f (-1, 1, 0); glVertex3f (1, -1, 0); glEnd(); } glPopMatrix(); return; } # endif if (-1 == st->cell_list[shape]) { st->cell_list[shape] = create_list( st, (double)shape/10.0 ); } glCallList( st->cell_list[shape] ); } static void create_nucleus_texture( State *st ) { int x, y; int w2 = TEX_SIZE/2; float s = w2*w2/4.0; st->texture = (GLubyte *) malloc( 4*TEX_SIZE*TEX_SIZE ); for (y=0; ytexture[4*(x+y*TEX_SIZE)] = (GLubyte)0; st->texture[4*(x+y*TEX_SIZE)+1] = (GLubyte)0; st->texture[4*(x+y*TEX_SIZE)+2] = (GLubyte)0; st->texture[4*(x+y*TEX_SIZE)+3] = (GLubyte)v; } } glPixelStorei( GL_UNPACK_ALIGNMENT, 1 ); glGenTextures( 1, &st->texture_name ); glBindTexture( GL_TEXTURE_2D, st->texture_name ); glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT ); glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT ); glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR ); glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR ); glTexImage2D( GL_TEXTURE_2D, 0, GL_RGBA, TEX_SIZE, TEX_SIZE, 0, GL_RGBA, GL_UNSIGNED_BYTE, st->texture ); } static void draw_nucleus( State *st ) { if (-1 == st->nucleus_list) { float z = -1.2f; float r=1.0/2.0f; st->nucleus_list = glGenLists( 1 ); glNewList( st->nucleus_list, GL_COMPILE ); glBegin( GL_QUADS ); glTexCoord2f( 0.0f, 0.0f ); glVertex3f( -r, -r, z ); glTexCoord2f( 0.0f, 1.0f ); glVertex3f( -r, r, z ); glTexCoord2f( 1.0f, 1.0f ); glVertex3f( r, r, z ); glTexCoord2f( 1.0f, 0.0f ); glVertex3f( r, -r, z ); glEnd(); glEndList(); } glCallList( st->nucleus_list ); } static void create_cells( State *st ) { int border = (int)(200.0 * st->screen_scale); int i, foodcnt; int w = st->width-2*border; int h = st->height-2*border; st->color[0] = 0.5 + random_max( 1000 ) * 0.0005; st->color[1] = 0.5 + random_max( 1000 ) * 0.0005; st->color[2] = 0.5 + random_max( 1000 ) * 0.0005; st->color[3] = 1.0f; /* allocate if startup */ if (!st->cell) { st->cell = (Cell *) malloc( st->max_cells * sizeof(Cell)); } /* fill the screen with random food for our little critters */ foodcnt = (st->width*st->height)/16; for (i=0; ifood[i] = random_interval( st->minfood, st->maxfood ); } /* create the requested seed-cells */ st->num_cells = st->num_seeds; for (i=0; inum_cells; ++i) { st->cell[i].x = border + random_max( w ); st->cell[i].y = border + random_max( h ); st->cell[i].vx = 0.0; st->cell[i].vy = 0.0; st->cell[i].age = random_max( 0x0f ); st->cell[i].min_dist = 500.0; st->cell[i].energy = random_interval( 5, 5+0x3f ); st->cell[i].rotation = ((double)random()/(double)RAND_MAX)*360.0; st->cell[i].radius = st->radius; st->cell[i].growth = 1.0; } } /* all this is rather expensive :( */ static void tick( State *st ) { int new_num_cells, num_cells=0; int b, j; int x, y, w4=st->width/4, h4=st->height/4, offset; double min_dist; int min_index; int num_living = 0; const double check_dist = 0.75*st->move_dist; const double grow_dist = 0.75*st->radius; const double adult_radius = st->radius; /* find number of cells capable of division and count living cells */ for (b=0; bnum_cells; ++b) { if (st->cell[b].energy > 0) num_living++; if (can_divide( st, &st->cell[b] )) num_cells++; } new_num_cells = st->num_cells + num_cells; /* end of simulation ? */ if (0 == num_living || new_num_cells >= st->max_cells) { if (st->pause_counter > 0) st->pause_counter--; if (st->pause_counter > 0) return; create_cells( st ); st->pause_counter = st->pause; } else if (num_cells) { /* any fertile candidates ? */ for (b=0, j=st->num_cells; bnum_cells; ++b) { if (can_divide( st, &st->cell[b] )) { st->cell[b].vx = random_interval( -50, 50 ) * 0.01; st->cell[b].vy = random_interval( -50, 50 ) * 0.01; st->cell[b].age = random_max( 0x0f ); /* half energy for both plus some bonus for forking */ st->cell[b].energy = st->cell[b].energy/2 + random_max( 0x0f ); /* forking makes me shrink */ st->cell[b].growth = 0.995; /* this one initially goes into the oposite direction */ st->cell[j].vx = -st->cell[b].vx; st->cell[j].vy = -st->cell[b].vy; /* same center */ st->cell[j].x = st->cell[b].x; st->cell[j].y = st->cell[b].y; st->cell[j].age = random_max( 0x0f ); st->cell[j].energy = (st->cell[b].energy); st->cell[j].rotation = ((double)random()/(double)RAND_MAX)*360.0; st->cell[j].growth = st->cell[b].growth; st->cell[j].radius = st->cell[b].radius; ++j; } else { st->cell[b].vx = 0.0; st->cell[b].vy = 0.0; } } st->num_cells = new_num_cells; } /* for each find a direction to escape */ if (st->num_cells > 1) { for (b=0; bnum_cells; ++b) { if (st->cell[b].energy > 0) { double vx; double vy; double len; /* grow or shrink */ st->cell[b].radius *= st->cell[b].growth; /* find closest neighbour */ min_dist = 100000.0; min_index = 0; for (j=0; jnum_cells; ++j) { if (j!=b) { const double dx = st->cell[b].x - st->cell[j].x; const double dy = st->cell[b].y - st->cell[j].y; if (fabs(dx) < check_dist || fabs(dy) < check_dist) { const double dist = dx*dx+dy*dy; /*const double dist = sqrt( dx*dx+dy*dy );*/ if (distcell[b].x - st->cell[min_index].x; vy = st->cell[b].y - st->cell[min_index].y; len = sqrt( vx*vx + vy*vy ); if (len > 0.0001) { st->cell[b].vx = vx/len; st->cell[b].vy = vy/len; } st->cell[b].min_dist = len; /* if not adult (radius too small) */ if (st->cell[b].radius < adult_radius) { /* if too small 60% stop shrinking */ if (st->cell[b].radius < adult_radius * 0.6) { st->cell[b].growth = 1.0; } /* at safe distance we start growing again */ if (len > grow_dist) { if (st->cell[b].energy > 30) { st->cell[b].growth = 1.005; } } } else { /* else keep size */ st->cell[b].growth = 1.0; } } } } else { st->cell[0].min_dist = 2*st->move_dist; } /* now move em, snack and burn energy */ for (b=0; bnum_cells; ++b) { /* if still alive */ if (st->cell[b].energy > 0) { /* agility depends on amount of energy */ double fac = (double)st->cell[b].energy / 50.0; if (fac < 0.0) fac = 0.0; if (fac > 1.0) fac = 1.0; st->cell[b].x += fac*(2.0 - (4.0*(double)random() / (double)RAND_MAX) + st->cell[b].vx); st->cell[b].y += fac*(2.0 - (4.0*(double)random() / (double)RAND_MAX) + st->cell[b].vy); /* get older and burn energy */ if (st->cell[b].energy > 0) { st->cell[b].age++; st->cell[b].energy--; } /* have a snack */ x = ((int)st->cell[b].x)/4; if (x<0) x=0; if (x>=w4) x = w4-1; y = ((int)st->cell[b].y)/4; if (y<0) y=0; if (y>=h4) y = h4-1; offset = x+y*w4; /* don't eat if already satisfied */ if (st->cell[b].energy < 100 && st->food[offset] > 0) { st->food[offset]--; st->cell[b].energy++; /* if you are hungry, eat more */ if (st->cell[b].energy < 50 && st->food[offset] > 0) { st->food[offset]--; st->cell[b].energy++; } } } } } ENTRYPOINT void reshape_glcells( ModeInfo *mi, int width, int height ) { State *st = &sstate[MI_SCREEN(mi)]; # ifdef HAVE_MOBILE int rot = current_device_rotation(); # endif st->height = height; st->width = width; # ifdef HAVE_MOBILE st->screen_scale = (double)(width < height ? width : height) / 1600.0; # else st->screen_scale = (double)width / 1600.0; # endif st->radius = s_radius; if (st->radius < 5) st->radius = 5; if (st->radius > 200) st->radius = 200; st->radius *= st->screen_scale; st->move_dist = s_min_dist; if (st->move_dist < 1.0) st->move_dist = 1.0; if (st->move_dist > 3.0) st->move_dist = 3.0; st->move_dist *= st->radius; glViewport (0, 0, (GLint) width, (GLint) height); glMatrixMode(GL_PROJECTION); glLoadIdentity(); glOrtho( 0, width, height, 0, 200, 0 ); # ifdef HAVE_MOBILE glRotatef (rot, 0, 0, 1); # endif glMatrixMode(GL_MODELVIEW); glLoadIdentity(); if (st->food) free( st->food ); st->food = (int *)malloc( ((width*height)/16)*sizeof(int) ); /* create_cells( st );*/ # ifdef HAVE_MOBILE glTranslatef (st->width/2, st->height/2, 0); if (rot == 90 || rot == -90 || rot == 270 || rot == -270) st->width = height, st->height = width; glRotatef (rot, 0, 0, 1); if (st->wire) glScalef(0.8, 0.8, 1); glTranslatef (-st->width/2, -st->height/2, 0); # endif } ENTRYPOINT void init_glcells( ModeInfo *mi ) { int i, divisions; State *st=0; if (!sstate) { sstate = (State *) calloc( MI_NUM_SCREENS(mi), sizeof(State) ); if (!sstate) { fprintf( stderr, "%s: out of memory\n", progname ); exit(1); } } st = &sstate[MI_SCREEN(mi)]; st->glx_context = init_GL(mi); st->cell = 0; st->num_cells = 0; st->wire = MI_IS_WIREFRAME(mi); /* get settings */ st->max_cells = s_maxcells;; if (st->max_cells < 50) st->max_cells = 50; if (st->max_cells > 10000) st->max_cells = 10000; st->pause = s_pause; if (st->pause < 0) st->pause = 0; if (st->pause > 400) st->pause = 400; st->pause_counter = st->pause; st->radius = s_radius; if (st->radius < 5) st->radius = 5; if (st->radius > 200) st->radius = 200; divisions = s_quality; if (divisions < 0) divisions = 0; if (divisions > 5) divisions = 5; st->num_seeds = s_seeds; if (st->num_seeds < 1) st->num_seeds = 1; if (st->num_seeds > 16) st->num_seeds = 16; st->minfood = s_minfood; if (st->minfood < 0) st->minfood = 0; if (st->minfood > 1000) st->minfood = 1000; st->maxfood = s_maxfood; if (st->maxfood < 0) st->maxfood = 0; if (st->maxfood > 1000) st->maxfood = 1000; if (st->maxfood < st->minfood) st->maxfood = st->minfood+1; st->keep_old_cells = s_keepold; st->divide_age = s_divideage; if (st->divide_age < 1) st->divide_age = 1; if (st->divide_age > 1000) st->divide_age = 1000; st->move_dist = s_min_dist; if (st->move_dist < 1.0) st->move_dist = 1.0; if (st->move_dist > 3.0) st->move_dist = 3.0; st->move_dist *= st->radius; for (i=0; icell_list[i] = -1; st->nucleus_list = -1; st->food = 0; st->sphere = create_sphere( st, divisions ); st->disturbance = (double *) malloc( st->sphere->num_vertex*sizeof(double) ); for (i=0; isphere->num_vertex; ++i) { st->disturbance[i] = 0.05-((double)random()/(double)RAND_MAX*0.1); } create_nucleus_texture( st ); reshape_glcells (mi, MI_WIDTH(mi), MI_HEIGHT(mi)); } ENTRYPOINT void draw_glcells( ModeInfo *mi ) { State *st = &sstate[MI_SCREEN(mi)]; Display *dpy = MI_DISPLAY(mi); Window window = MI_WINDOW(mi); if (!st->glx_context) return; glXMakeCurrent( MI_DISPLAY(mi), MI_WINDOW(mi), *(st->glx_context) ); mi->polygon_count = render( st ); if (mi->fps_p) do_fps (mi); glFinish(); glXSwapBuffers( dpy, window ); } ENTRYPOINT void release_glcells( ModeInfo *mi ) { int i; State *st = &sstate[MI_SCREEN(mi)]; /* nuke everything before exit */ if (st->sphere) free_Object( st->sphere ); if (st->food) free( st->food ); for (i=0; icell_list[i] != -1) { glDeleteLists( st->cell_list[i], 1 ); } } if (st->cell) free( st->cell ); free( st->disturbance ); glDeleteTextures( 1, &st->texture_name ); free( st->texture ); } XSCREENSAVER_MODULE( "GLCells", glcells ) xscreensaver-5.36/hacks/glx/voronoi.c000664 000767 000024 00000030176 12710312341 017663 0ustar00jwzstaff000000 000000 /* voronoi, Copyright (c) 2007, 2008 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. */ #define DEFAULTS "*delay: 20000 \n" \ "*showFPS: False \n" \ "*suppressRotationAnimation: True\n" \ # define refresh_voronoi 0 # define release_voronoi 0 #undef countof #define countof(x) (sizeof((x))/sizeof((*x))) #define BELLRAND(n) ((frand((n)) + frand((n)) + frand((n))) / 3) #include "xlockmore.h" #include #ifdef USE_GL /* whole file */ #define DEF_POINTS "25" #define DEF_POINT_SIZE "9" #define DEF_POINT_SPEED "1.0" #define DEF_POINT_DELAY "0.05" #define DEF_ZOOM_SPEED "1.0" #define DEF_ZOOM_DELAY "15" typedef struct node { GLfloat x, y; GLfloat dx, dy; GLfloat ddx, ddy; struct node *next; GLfloat color[4], color2[4]; int rot; } node; typedef struct { GLXContext *glx_context; node *nodes; int nnodes; node *dragging; int ncolors; XColor *colors; enum { MODE_WAITING, MODE_ADDING, MODE_ZOOMING } mode; int adding; double last_time; GLfloat zooming; /* 1.0 starting zoom, 0.0 no longer zooming. */ GLfloat zoom_toward[2]; } voronoi_configuration; static voronoi_configuration *vps = NULL; /* command line arguments */ static int npoints; static GLfloat point_size, point_speed, point_delay; static GLfloat zoom_speed, zoom_delay; static XrmOptionDescRec opts[] = { { "-points", ".points", XrmoptionSepArg, 0 }, { "-point-size", ".pointSize", XrmoptionSepArg, 0 }, { "-point-speed", ".pointSpeed", XrmoptionSepArg, 0 }, { "-point-delay", ".pointDelay", XrmoptionSepArg, 0 }, { "-zoom-speed", ".zoomSpeed", XrmoptionSepArg, 0 }, { "-zoom-delay", ".zoomDelay", XrmoptionSepArg, 0 }, }; static argtype vars[] = { {&npoints, "points", "Points", DEF_POINTS, t_Int}, {&point_size, "pointSize", "PointSize", DEF_POINT_SIZE, t_Float}, {&point_speed, "pointSpeed", "PointSpeed", DEF_POINT_SPEED, t_Float}, {&point_delay, "pointDelay", "PointDelay", DEF_POINT_DELAY, t_Float}, {&zoom_speed, "zoomSpeed", "ZoomSpeed", DEF_ZOOM_SPEED, t_Float}, {&zoom_delay, "zoomDelay", "ZoomDelay", DEF_ZOOM_DELAY, t_Float}, }; ENTRYPOINT ModeSpecOpt voronoi_opts = {countof(opts), opts, countof(vars), vars, NULL}; /* Returns the current time in seconds as a double. */ static double double_time (void) { struct timeval now; # ifdef GETTIMEOFDAY_TWO_ARGS struct timezone tzp; gettimeofday(&now, &tzp); # else gettimeofday(&now); # endif return (now.tv_sec + ((double) now.tv_usec * 0.000001)); } static node * add_node (voronoi_configuration *vp, GLfloat x, GLfloat y) { node *nn = (node *) calloc (1, sizeof (*nn)); int i; nn->x = x; nn->y = y; i = random() % vp->ncolors; nn->color[0] = vp->colors[i].red / 65536.0; nn->color[1] = vp->colors[i].green / 65536.0; nn->color[2] = vp->colors[i].blue / 65536.0; nn->color[3] = 1.0; nn->color2[0] = nn->color[0] * 0.7; nn->color2[1] = nn->color[1] * 0.7; nn->color2[2] = nn->color[2] * 0.7; nn->color2[3] = 1.0; nn->ddx = frand (0.000001 * point_speed) * (random() & 1 ? 1 : -1); nn->ddy = frand (0.000001 * point_speed) * (random() & 1 ? 1 : -1); nn->rot = (random() % 360) * (random() & 1 ? 1 : -1); nn->next = vp->nodes; vp->nodes = nn; vp->nnodes++; return nn; } static int cone (void) { int i; int faces = 64; GLfloat step = M_PI * 2 / faces; GLfloat th = 0; GLfloat x = 1; GLfloat y = 0; glBegin(GL_TRIANGLE_FAN); glVertex3f (0, 0, 1); for (i = 0; i < faces; i++) { glVertex3f (x, y, 0); th += step; x = cos (th); y = sin (th); } glVertex3f (1, 0, 0); glEnd(); return faces; } static void move_points (voronoi_configuration *vp) { node *nn; for (nn = vp->nodes; nn; nn = nn->next) { if (nn == vp->dragging) continue; nn->x += nn->dx; nn->y += nn->dy; if (vp->mode == MODE_WAITING) { nn->dx += nn->ddx; nn->dy += nn->ddy; } } } static void prune_points (voronoi_configuration *vp) { node *nn; node *prev = 0; int lim = 5; for (nn = vp->nodes; nn; prev = nn, nn = (nn ? nn->next : 0)) if (nn->x < -lim || nn->x > lim || nn->y < -lim || nn->y > lim) { if (prev) prev->next = nn->next; else vp->nodes = nn->next; free (nn); vp->nnodes--; nn = prev; } } static void zoom_points (voronoi_configuration *vp) { node *nn; GLfloat tick = sin (vp->zooming * M_PI); GLfloat scale = 1 + (tick * 0.02 * zoom_speed); vp->zooming -= (0.01 * zoom_speed); if (vp->zooming < 0) vp->zooming = 0; if (vp->zooming <= 0) return; if (scale < 1) scale = 1; for (nn = vp->nodes; nn; nn = nn->next) { GLfloat x = nn->x - vp->zoom_toward[0]; GLfloat y = nn->y - vp->zoom_toward[1]; x *= scale; y *= scale; nn->x = x + vp->zoom_toward[0]; nn->y = y + vp->zoom_toward[1]; } } static void draw_cells (ModeInfo *mi) { voronoi_configuration *vp = &vps[MI_SCREEN(mi)]; node *nn; int lim = 5; for (nn = vp->nodes; nn; nn = nn->next) { if (nn->x < -lim || nn->x > lim || nn->y < -lim || nn->y > lim) continue; glPushMatrix(); glTranslatef (nn->x, nn->y, 0); glScalef (lim*2, lim*2, 1); glColor4fv (nn->color); mi->polygon_count += cone (); glPopMatrix(); } glClear (GL_DEPTH_BUFFER_BIT); if (point_size <= 0) ; else if (point_size < 3) { glPointSize (point_size); for (nn = vp->nodes; nn; nn = nn->next) { glBegin (GL_POINTS); glColor4fv (nn->color2); glVertex2f (nn->x, nn->y); glEnd(); mi->polygon_count++; } } else { for (nn = vp->nodes; nn; nn = nn->next) { int w = MI_WIDTH (mi); int h = MI_HEIGHT (mi); int s = point_size; int i; glColor4fv (nn->color2); glPushMatrix(); glTranslatef (nn->x, nn->y, 0); glScalef (1.0 / w * s, 1.0 / h * s, 1); glLineWidth (point_size / 10); nn->rot += (nn->rot < 0 ? -1 : 1); glRotatef (nn->rot, 0, 0, 1); glRotatef (180, 0, 0, 1); for (i = 0; i < 5; i++) { glBegin (GL_TRIANGLES); glVertex2f (0, 1); glVertex2f (-0.2, 0); glVertex2f ( 0.2, 0); glEnd (); glRotatef (360.0/5, 0, 0, 1); mi->polygon_count++; } glPopMatrix(); } } #if 0 glPushMatrix(); glColor3f(1,1,1); glBegin(GL_LINE_LOOP); glVertex3f(0,0,0); glVertex3f(1,0,0); glVertex3f(1,1,0); glVertex3f(0,1,0); glEnd(); glScalef(0.25, 0.25, 1); glBegin(GL_LINE_LOOP); glVertex3f(0,0,0); glVertex3f(1,0,0); glVertex3f(1,1,0); glVertex3f(0,1,0); glEnd(); glPopMatrix(); #endif } /* Window management, etc */ ENTRYPOINT void reshape_voronoi (ModeInfo *mi, int width, int height) { /* voronoi_configuration *vp = &vps[MI_SCREEN(mi)];*/ glViewport (0, 0, (GLint) width, (GLint) height); glMatrixMode(GL_PROJECTION); glLoadIdentity(); glOrtho (0, 1, 1, 0, -1, 1); # ifdef HAVE_MOBILE /* So much WTF */ { int rot = current_device_rotation(); glTranslatef (0.5, 0.5, 0); // glScalef(0.19, 0.19, 0.19); if (rot == 180 || rot == -180) { glTranslatef (1, 1, 0); } else if (rot == 90 || rot == -270) { glRotatef (180, 0, 0, 1); glTranslatef (0, 1, 0); } else if (rot == -90 || rot == 270) { glRotatef (180, 0, 0, 1); glTranslatef (1, 0, 0); } glTranslatef(-0.5, -0.5, 0); } # endif glMatrixMode(GL_MODELVIEW); glLoadIdentity(); glClear(GL_COLOR_BUFFER_BIT); } static node * find_node (ModeInfo *mi, GLfloat x, GLfloat y) { voronoi_configuration *vp = &vps[MI_SCREEN(mi)]; int ps = (point_size < 5 ? 5 : point_size); GLfloat hysteresis = (1.0 / MI_WIDTH (mi)) * ps; node *nn; for (nn = vp->nodes; nn; nn = nn->next) if (nn->x > x - hysteresis && nn->x < x + hysteresis && nn->y > y - hysteresis && nn->y < y + hysteresis) return nn; return 0; } ENTRYPOINT Bool voronoi_handle_event (ModeInfo *mi, XEvent *event) { voronoi_configuration *vp = &vps[MI_SCREEN(mi)]; if (event->xany.type == ButtonPress) { GLfloat x = (GLfloat) event->xbutton.x / MI_WIDTH (mi); GLfloat y = (GLfloat) event->xbutton.y / MI_HEIGHT (mi); node *nn = find_node (mi, x, y); if (!nn) nn = add_node (vp, x, y); vp->dragging = nn; return True; } else if (event->xany.type == ButtonRelease && vp->dragging) { vp->dragging = 0; return True; } else if (event->xany.type == MotionNotify && vp->dragging) { vp->dragging->x = (GLfloat) event->xmotion.x / MI_WIDTH (mi); vp->dragging->y = (GLfloat) event->xmotion.y / MI_HEIGHT (mi); return True; } return False; } static void state_change (ModeInfo *mi) { voronoi_configuration *vp = &vps[MI_SCREEN(mi)]; double now = double_time(); if (vp->dragging) { vp->last_time = now; vp->adding = 0; vp->zooming = 0; return; } switch (vp->mode) { case MODE_WAITING: if (vp->last_time + zoom_delay <= now) { node *tn = vp->nodes; vp->zoom_toward[0] = (tn ? tn->x : 0.5); vp->zoom_toward[1] = (tn ? tn->y : 0.5); vp->mode = MODE_ZOOMING; vp->zooming = 1; vp->last_time = now; } break; case MODE_ADDING: if (vp->last_time + point_delay <= now) { add_node (vp, BELLRAND(0.5) + 0.25, BELLRAND(0.5) + 0.25); vp->last_time = now; vp->adding--; if (vp->adding <= 0) { vp->adding = 0; vp->mode = MODE_WAITING; vp->last_time = now; } } break; case MODE_ZOOMING: { zoom_points (vp); if (vp->zooming <= 0) { vp->mode = MODE_ADDING; vp->adding = npoints; vp->last_time = now; } } break; default: abort(); } } ENTRYPOINT void init_voronoi (ModeInfo *mi) { voronoi_configuration *vp; if (!vps) { vps = (voronoi_configuration *) calloc (MI_NUM_SCREENS(mi), sizeof (voronoi_configuration)); if (!vps) { fprintf(stderr, "%s: out of memory\n", progname); exit(1); } } vp = &vps[MI_SCREEN(mi)]; vp->glx_context = init_GL(mi); if (point_size < 0) point_size = 10; vp->ncolors = 128; vp->colors = (XColor *) calloc (vp->ncolors, sizeof(XColor)); make_smooth_colormap (0, 0, 0, vp->colors, &vp->ncolors, False, False, False); reshape_voronoi (mi, MI_WIDTH(mi), MI_HEIGHT(mi)); vp->mode = MODE_ADDING; vp->adding = npoints * 2; vp->last_time = 0; } ENTRYPOINT void draw_voronoi (ModeInfo *mi) { voronoi_configuration *vp = &vps[MI_SCREEN(mi)]; Display *dpy = MI_DISPLAY(mi); Window window = MI_WINDOW(mi); if (!vp->glx_context) return; glXMakeCurrent(MI_DISPLAY(mi), MI_WINDOW(mi), *(vp->glx_context)); glShadeModel(GL_FLAT); glEnable(GL_POINT_SMOOTH); /* glEnable(GL_LINE_SMOOTH);*/ /* glEnable(GL_POLYGON_SMOOTH);*/ glEnable (GL_DEPTH_TEST); glDepthFunc (GL_LEQUAL); glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); mi->polygon_count = 0; draw_cells (mi); move_points (vp); prune_points (vp); state_change (mi); if (mi->fps_p) do_fps (mi); glFinish(); glXSwapBuffers(dpy, window); } XSCREENSAVER_MODULE ("Voronoi", voronoi) #endif /* USE_GL */ xscreensaver-5.36/hacks/glx/moebiusgears.c000644 000767 000024 00000025717 12710313217 020663 0ustar00jwzstaff000000 000000 /* moebiusgears, Copyright (c) 2007-2014 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. */ #define DEFAULTS "*delay: 30000 \n" \ "*count: 17 \n" \ "*showFPS: False \n" \ "*wireframe: False \n" \ "*suppressRotationAnimation: True\n" \ # define refresh_mgears 0 # define release_mgears 0 #undef countof #define countof(x) (sizeof((x))/sizeof((*x))) #include "xlockmore.h" #include "involute.h" #include "normals.h" #include "rotator.h" #include "gltrackball.h" #include #ifdef USE_GL /* whole file */ #define DEF_SPIN "True" #define DEF_WANDER "True" #define DEF_ROLL "True" #define DEF_SPEED "1.0" #define DEF_TEETH "15" typedef struct { gear g; GLfloat pos_th; /* position on ring of gear system */ GLfloat pos_thz; /* rotation out of plane of gear system */ } mogear; typedef struct { GLXContext *glx_context; rotator *rot; trackball_state *trackball; Bool button_down_p; int ngears; mogear *gears; GLfloat ring_r; /* radius of gear system */ GLfloat roll_th; } mgears_configuration; static mgears_configuration *bps = NULL; static Bool do_spin; static GLfloat speed; static Bool do_wander; static Bool do_roll; static int teeth_arg; static XrmOptionDescRec opts[] = { { "-spin", ".spin", XrmoptionNoArg, "True" }, { "+spin", ".spin", XrmoptionNoArg, "False" }, { "-speed", ".speed", XrmoptionSepArg, 0 }, { "-wander", ".wander", XrmoptionNoArg, "True" }, { "+wander", ".wander", XrmoptionNoArg, "False" }, { "-roll", ".roll", XrmoptionNoArg, "True" }, { "+roll", ".roll", XrmoptionNoArg, "False" }, { "-teeth", ".teeth", XrmoptionSepArg, 0 }, }; static argtype vars[] = { {&do_spin, "spin", "Spin", DEF_SPIN, t_Bool}, {&do_wander, "wander", "Wander", DEF_WANDER, t_Bool}, {&do_roll, "roll", "Roll", DEF_ROLL, t_Bool}, {&speed, "speed", "Speed", DEF_SPEED, t_Float}, {&teeth_arg, "teeth", "Teeth", DEF_TEETH, t_Int}, }; ENTRYPOINT ModeSpecOpt mgears_opts = {countof(opts), opts, countof(vars), vars, NULL}; /* Window management, etc */ ENTRYPOINT void reshape_mgears (ModeInfo *mi, int width, int height) { GLfloat h = (GLfloat) height / (GLfloat) width; glViewport (0, 0, (GLint) width, (GLint) height); glMatrixMode(GL_PROJECTION); glLoadIdentity(); gluPerspective (30.0, 1/h, 1.0, 100.0); glMatrixMode(GL_MODELVIEW); glLoadIdentity(); gluLookAt( 0.0, 0.0, 30.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0); # ifdef HAVE_MOBILE /* Keep it the same relative size when rotated. */ { int o = (int) current_device_rotation(); if (o != 0 && o != 180 && o != -180) glScalef (1/h, 1/h, 1/h); } # endif glClear(GL_COLOR_BUFFER_BIT); } static void reset_mgears (ModeInfo *mi) { mgears_configuration *bp = &bps[MI_SCREEN(mi)]; int wire = MI_IS_WIREFRAME(mi); int total_gears = MI_COUNT(mi); double gears_per_turn; double gear_r, tw, th, thick, slope; int i, nubs, size; if (! (total_gears & 1)) total_gears++; /* must be odd or gears intersect */ /* Number of teeth must be odd if number of gears is odd, or teeth don't mesh when the loop closes. And since number of gears must be odd... */ if (! (teeth_arg & 1)) teeth_arg++; if (teeth_arg < 7) teeth_arg = 7; if (total_gears < 13) /* gear mesh angle is too steep with less */ total_gears = 13; thick = 0.2; nubs = (random() & 3) ? 0 : (random() % teeth_arg) / 2; slope = 0; /* Sloping gears are incompatible with "-roll" ... */ /* slope= -M_PI * 2 / total_gears; */ gears_per_turn = total_gears / 2.0; bp->ring_r = 3; gear_r = M_PI * bp->ring_r / gears_per_turn; tw = 0; th = gear_r * 2.5 / teeth_arg; /* If the gears are small, use a lower density mesh. */ size = (gear_r > 0.60 ? INVOLUTE_HUGE : gear_r > 0.32 ? INVOLUTE_LARGE : gear_r > 0.13 ? INVOLUTE_MEDIUM : INVOLUTE_SMALL); /* If there are lots of teeth, use a lower density mesh. */ if (teeth_arg > 77) size = INVOLUTE_SMALL; if (teeth_arg > 45 && size >= INVOLUTE_HUGE) size = INVOLUTE_MEDIUM; if (bp->gears) { for (i = 0; i < bp->ngears; i++) glDeleteLists (bp->gears[i].g.dlist, 1); free (bp->gears); bp->gears = 0; } bp->ngears = total_gears; bp->gears = (mogear *) calloc (bp->ngears, sizeof(*bp->gears)); for (i = 0; i < bp->ngears; i++) { mogear *mg = &bp->gears[i]; gear *g = &mg->g; g->r = gear_r; g->size = size; g->nteeth = teeth_arg; g->tooth_w = tw; g->tooth_h = th; g->tooth_slope = slope; g->thickness = g->r * thick; g->thickness2 = g->thickness * 0.1; g->thickness3 = g->thickness; g->inner_r = g->r * 0.80; g->inner_r2 = g->r * 0.60; g->inner_r3 = g->r * 0.55; g->nubs = nubs; mg->pos_th = (M_PI * 2 / gears_per_turn) * i; mg->pos_thz = (M_PI / 2 / gears_per_turn) * i; g->th = ((i & 1) ? (M_PI * 2 / g->nteeth) : 0); /* Colorize */ g->color[0] = 0.7 + frand(0.3); g->color[1] = 0.7 + frand(0.3); g->color[2] = 0.7 + frand(0.3); g->color[3] = 1.0; g->color2[0] = g->color[0] * 0.85; g->color2[1] = g->color[1] * 0.85; g->color2[2] = g->color[2] * 0.85; g->color2[3] = g->color[3]; /* Now render the gear into its display list. */ g->dlist = glGenLists (1); if (! g->dlist) { check_gl_error ("glGenLists"); abort(); } glNewList (g->dlist, GL_COMPILE); g->polygons += draw_involute_gear (g, wire); glEndList (); } } ENTRYPOINT void init_mgears (ModeInfo *mi) { mgears_configuration *bp; int wire = MI_IS_WIREFRAME(mi); if (!bps) { bps = (mgears_configuration *) calloc (MI_NUM_SCREENS(mi), sizeof (mgears_configuration)); if (!bps) { fprintf(stderr, "%s: out of memory\n", progname); exit(1); } } bp = &bps[MI_SCREEN(mi)]; bp->glx_context = init_GL(mi); reshape_mgears (mi, MI_WIDTH(mi), MI_HEIGHT(mi)); if (!wire) { GLfloat pos[4] = {1.0, 1.0, 1.0, 0.0}; GLfloat amb[4] = {0.0, 0.0, 0.0, 1.0}; GLfloat dif[4] = {1.0, 1.0, 1.0, 1.0}; GLfloat spc[4] = {0.0, 1.0, 1.0, 1.0}; glEnable(GL_LIGHTING); glEnable(GL_LIGHT0); glEnable(GL_DEPTH_TEST); glEnable(GL_CULL_FACE); glLightfv(GL_LIGHT0, GL_POSITION, pos); glLightfv(GL_LIGHT0, GL_AMBIENT, amb); glLightfv(GL_LIGHT0, GL_DIFFUSE, dif); glLightfv(GL_LIGHT0, GL_SPECULAR, spc); } { double spin_speed = 0.5; double wander_speed = 0.01; double spin_accel = 2.0; bp->rot = make_rotator (do_spin ? spin_speed : 0, do_spin ? spin_speed : 0, do_spin ? spin_speed : 0, spin_accel, do_wander ? wander_speed : 0, False /* don't randomize */ ); bp->trackball = gltrackball_init (True); } reset_mgears (mi); } ENTRYPOINT Bool mgears_handle_event (ModeInfo *mi, XEvent *event) { mgears_configuration *bp = &bps[MI_SCREEN(mi)]; if (gltrackball_event_handler (event, bp->trackball, MI_WIDTH (mi), MI_HEIGHT (mi), &bp->button_down_p)) return True; else if (event->xany.type == KeyPress) { KeySym keysym; char c = 0; XLookupString (&event->xkey, &c, 1, &keysym, 0); if (c == '+' || c == '=' || keysym == XK_Up || keysym == XK_Right || keysym == XK_Next) { MI_COUNT(mi) += 2; reset_mgears (mi); return True; } else if (c == '-' || c == '_' || keysym == XK_Down || keysym == XK_Left || keysym == XK_Prior) { if (MI_COUNT(mi) <= 13) return False; MI_COUNT(mi) -= 2; reset_mgears (mi); return True; } else if (screenhack_event_helper (MI_DISPLAY(mi), MI_WINDOW(mi), event)) goto DEF; } else if (screenhack_event_helper (MI_DISPLAY(mi), MI_WINDOW(mi), event)) { DEF: MI_COUNT(mi) = 13 + (2 * (random() % 10)); reset_mgears (mi); return True; } return False; } ENTRYPOINT void draw_mgears (ModeInfo *mi) { mgears_configuration *bp = &bps[MI_SCREEN(mi)]; Display *dpy = MI_DISPLAY(mi); Window window = MI_WINDOW(mi); int i; if (!bp->glx_context) return; glXMakeCurrent(MI_DISPLAY(mi), MI_WINDOW(mi), *(bp->glx_context)); glShadeModel(GL_SMOOTH); glEnable(GL_DEPTH_TEST); glEnable(GL_NORMALIZE); glEnable(GL_CULL_FACE); glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glPushMatrix (); glScalef(1.1, 1.1, 1.1); { double x, y, z; get_position (bp->rot, &x, &y, &z, !bp->button_down_p); glTranslatef ((x - 0.5) * 4, (y - 0.5) * 4, (z - 0.5) * 7); gltrackball_rotate (bp->trackball); get_rotation (bp->rot, &x, &y, &z, !bp->button_down_p); /* add a little rotation for -no-spin mode */ x -= 0.14; y -= 0.06; glRotatef (x * 360, 1.0, 0.0, 0.0); glRotatef (y * 360, 0.0, 1.0, 0.0); glRotatef (z * 360, 0.0, 0.0, 1.0); } mi->polygon_count = 0; glScalef (1.5, 1.5, 1.5); /*#define DEBUG*/ #ifdef DEBUG glScalef (.5, .5, .5); glTranslatef (0, -bp->gears[0].g.r * bp->ngears, 0); #endif for (i = 0; i < bp->ngears; i++) { mogear *mg = &bp->gears[i]; gear *g = &mg->g; glPushMatrix(); #ifndef DEBUG glRotatef (mg->pos_th * 180 / M_PI, 0, 0, 1); /* rotation on ring */ glTranslatef (bp->ring_r, 0, 0); /* position on ring */ glRotatef (mg->pos_thz * 180 / M_PI, 0, 1, 0); /* twist a bit */ if (do_roll) { glRotatef (bp->roll_th * 180 / M_PI, 0, 1, 0); bp->roll_th += speed * 0.0005; } #else glTranslatef (0, i * 2 * g->r, 0); #endif glRotatef (g->th * 180 / M_PI, 0, 0, 1); glCallList (g->dlist); mi->polygon_count += g->polygons; glPopMatrix (); } glPopMatrix (); #ifndef DEBUG /* spin gears */ for (i = 0; i < bp->ngears; i++) { mogear *mg = &bp->gears[i]; mg->g.th += speed * (M_PI / 100) * (i & 1 ? 1 : -1); } #endif if (mi->fps_p) do_fps (mi); glFinish(); glXSwapBuffers(dpy, window); } XSCREENSAVER_MODULE_2 ("MoebiusGears", moebiusgears, mgears) #endif /* USE_GL */ xscreensaver-5.36/hacks/glx/lockward.c000644 000767 000024 00000061060 12701612217 017775 0ustar00jwzstaff000000 000000 /* * lockward.c: First attempt at an Xscreensaver. * * Leo L. Schwab 2007.08.17 **** * Copyright (c) 2007 Leo L. Schwab * * Permission is hereby granted, free of charge, to any person obtaining a * copy of this software and associated documentation files (the * "Software"), to deal in the Software without restriction, including * without limitation the rights to use, copy, modify, merge, publish, * distribute, sublicense, and/or sell copies of the Software, and to permit * persons to whom the Software is furnished to do so, subject to the * following conditions: * * The above copyright notice and this permission notice shall be included * in all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN * NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE * USE OR OTHER DEALINGS IN THE SOFTWARE. */ #include #include #include "xlockmore.h" #include "colors.h" /*************************************************************************** * #defines */ #ifdef USE_GL /* whole file */ #define DEFAULTS "*delay: 20000 \n"\ "*showFPS: False \n" #define refresh_lockward 0 #define NUMOF(x) (sizeof ((x)) / sizeof ((*x))) #define NBLADES 12 #define NSPINNERS 4 #define NRADII 8 #define COLORIDX_SHF 4 #define SUBDIV 6 #undef countof #define countof(x) (sizeof((x))/sizeof((*x))) /*************************************************************************** * Structure definitions. */ struct lockward_context; /* Forward declaration. */ #define int8_t char #define int16_t short #define int32_t int #define uint8_t unsigned char #define uint16_t unsigned short #define uint32_t unsigned int typedef struct bladestate { uint8_t outer, inner; /* Radii */ } bladestate; typedef struct spinnerstate { GLfloat rot; /* Terminal rotation after count expires */ GLfloat rotinc; /* Per-frame increment to rot. */ XColor *colors; bladestate *bladeidx; int ncolors; /* n.4 fixed-point */ int ccolor; /* n.4 fixed-point */ int colorinc; /* n.4 fixed-point */ int rotcount; uint8_t nblades; } spinnerstate; typedef struct blinkstate { int (*drawfunc) (struct lockward_context *ctx, struct blinkstate *bs); uint32_t *noise; /* For draw_blink_segment_scatter() */ GLfloat color[4]; uint32_t val; int16_t dwell; /* <0: sharp >0: decay */ int16_t dwellcnt; uint8_t type; int8_t counter; int8_t direction; int8_t radius; } blinkstate; enum blinktype { BTYPE_RADIAL_SINGLE = 0, BTYPE_RADIAL_RANDOM, BTYPE_RADIAL_SEQ, BTYPE_RADIAL_DOUBLESEQ, BTYPE_SEGMENT_SINGLE, BTYPE_SEGMENT_RANDOM, BTYPE_CONCENTRIC_SINGLE, BTYPE_CONCENTRIC_RANDOM, BTYPE_CONCENTRIC_SEQ, BTYPE_SEGMENT_SCATTER, MAX_BTYPE }; typedef struct { GLfloat x,y,z; } XYZ; typedef struct lockward_context { GLXContext *glx_context; spinnerstate spinners[NSPINNERS]; blinkstate blink; /* This used to put vertexes into lists without putting begin/end into the same list! I didn't even know that worked. Well, it doesn't work with jwzgles, so I changed it to not do that. */ /* GLuint blades_outer, blades_inner; */ XYZ points_outer[NRADII][SUBDIV+1]; XYZ points_inner[NRADII][SUBDIV+1]; GLuint rings; Bool blendmode; int nextblink; int fps; } lockward_context; /*************************************************************************** * Prototypes. */ static void free_lockward (lockward_context *ctx); /*************************************************************************** * Global variables. */ static lockward_context *g_ctx = NULL; static Bool g_blink_p = True; static int g_blades = NBLADES; static int g_rotateidle_min, g_rotateidle_max; static int g_blinkidle_min, g_blinkidle_max; static int g_blinkdwell_min, g_blinkdwell_max; #define DEF_BLINK "True" #define DEF_ROTATEIDLEMIN "1000" #define DEF_ROTATEIDLEMAX "6000" #define DEF_BLINKIDLEMIN "1000" #define DEF_BLINKIDLEMAX "9000" #define DEF_BLINKDWELLMIN "100" #define DEF_BLINKDWELLMAX "600" static XrmOptionDescRec opts[] = { { "-blink", ".blink", XrmoptionNoArg, "on" }, { "+blink", ".blink", XrmoptionNoArg, "off" }, { "-rotateidle-min", ".rotateidlemin", XrmoptionSepArg, 0 }, { "-rotateidle-max", ".rotateidlemax", XrmoptionSepArg, 0 }, { "-blinkidle-min", ".blinkidlemin", XrmoptionSepArg, 0 }, { "-blinkidle-max", ".blinkidlemax", XrmoptionSepArg, 0 }, { "-blinkdwell-min", ".blinkdwellmin", XrmoptionSepArg, 0 }, { "-blinkdwell-max", ".blinkdwellmax", XrmoptionSepArg, 0 }, }; static argtype vars[] = { { &g_blink_p, "blink", "Blink", DEF_BLINK, t_Bool }, { &g_rotateidle_min, "rotateidlemin", "Rotateidlemin", DEF_ROTATEIDLEMIN, t_Int }, { &g_rotateidle_max, "rotateidlemax", "Rotateidlemax", DEF_ROTATEIDLEMAX, t_Int }, { &g_blinkidle_min, "blinkidlemin", "Blinkidlemin", DEF_BLINKIDLEMIN, t_Int }, { &g_blinkidle_max, "blinkidlemax", "Blinkidlemax", DEF_BLINKIDLEMAX, t_Int }, { &g_blinkdwell_min, "blinkdwellmin", "Blinkdwellmin", DEF_BLINKDWELLMIN, t_Int }, { &g_blinkdwell_max, "blinkdwellmax", "Blinkdwellmax", DEF_BLINKDWELLMAX, t_Int }, }; static OptionStruct desc[] = { { "-/+blink", "Turn on/off blinking effects." }, { "-rotateidle-min", "Minimum idle time for rotators, in milliseconds." }, { "-rotateidle-max", "Maximum idle time for rotators, in milliseconds." }, { "-blinkidle-min", "Minimum idle time between blink effects, in milliseconds." }, { "-blinkidle-max", "Maximum idle time between blink effects, in milliseconds." }, { "-blinkdwell-min", "Minimum dwell time for blink effects, in milliseconds." }, { "-blinkdwell-max", "Maximum dwell time for blink effects, in milliseconds." }, }; ENTRYPOINT ModeSpecOpt lockward_opts = { NUMOF(opts), opts, NUMOF(vars), vars, desc }; /*************************************************************************** * Window management. */ ENTRYPOINT void reshape_lockward (ModeInfo *mi, int width, int height) { GLfloat h = (GLfloat) height / (GLfloat) width; glViewport (0, 0, (GLint) width, (GLint) height); glMatrixMode (GL_PROJECTION); glLoadIdentity (); if (height > width) glOrtho (-8.0, 8.0, -8.0 * h, 8.0 * h, -1, 1); else glOrtho (-8.0 / h, 8.0 / h, -8.0, 8.0, -1, 1); glMatrixMode (GL_MODELVIEW); } ENTRYPOINT Bool lockward_handle_event (ModeInfo *mi, XEvent *event) { lockward_context *ctx = &g_ctx[MI_SCREEN (mi)]; if (event->xany.type == KeyPress) { KeySym keysym; char c = 0; XLookupString (&event->xkey, &c, 1, &keysym, 0); if (c == ' ' || c == '\t') { ctx->blendmode ^= 1; return True; } } return False; } /*************************************************************************** * "Blade" routines. */ static void random_blade_rot (lockward_context *ctx, struct spinnerstate *ss) { /* * The circle is divided up in to g_blades divisions. The idea here * is to rotate to an exact division point. * * The target rotation is computed via random numbers. * * The time it takes to get there is a maximum of six seconds per * division, and a minimum of one second (no matter how far away it * is), and is selected by random numbers. * * The time value is converted into frames, and a per-frame rotation * is computed. * * During rendering, we approach the target rotation by subtracting * from it the per-frame rotation times the number of outstanding * ticks. Doing it this way means we'll hit the target rotation * exactly, without low-order errors creeping in to the values (at * least not nearly as quickly). */ GLfloat d; int dist; dist = random() % g_blades + 1; ss->rotcount = random() % (6 * dist * ctx->fps - ctx->fps) + ctx->fps; if (random() & 4) dist = -dist; d = dist * 360.0 / (GLfloat) g_blades; ss->rot += d; ss->rotinc = d / (GLfloat) ss->rotcount; } /* * A "blade" is pie-wedge shaped flat thing that is rotated around where the * apex is/would be. Initially envisioned as 1/12th of a circle, but that * could be configurable. The inner and outer edges are rounded off using * six subdivisions so that, when multiple blades are assembled, it looks * more like a circle and less like a polygon. * * The blade is assembled as a tri-fan. It is oriented centered at 3 * o'clock. The blade is composed of two display lists -- arcs, essentially * -- the outer and the inner one. The outer one *must* be called before * the inner one, or the blade clockwise-ness will be wrong, and become * invisible. Arcs of various radii are compiled. */ static void gen_blade_arcs (lockward_context *ctx) { GLfloat here, there, step; int i, n; here = 0; there = M_PI * 2.0 / g_blades; step = there / SUBDIV; here -= SUBDIV * step / 2.0; /* * Build outer blade arcs. * Start at left side of outer radius. Strike all its vertices. */ for (n = 0; n < NRADII; ++n) { /* glNewList (ctx->blades_outer + n, GL_COMPILE); */ XYZ *a = ctx->points_outer[n]; int j = 0; for (i = SUBDIV; i >= 0; --i) { /* glVertex3f (cos (here + step * i) * (n + 1.0), sin (here + step * i) * (n + 1.0), 0); */ a[j].x = cos (here + step * i) * (n + 1.0); a[j].y = sin (here + step * i) * (n + 1.0); a[j].z = 0; j++; } if (j != SUBDIV+1) abort(); /* glEndList (); */ } /* * Build inner blade arcs. * Move to inner radius, strike all vertices in opposite order. */ for (n = 0; n < NRADII; ++n) { /* glNewList (ctx->blades_inner + n, GL_COMPILE); */ XYZ *a = ctx->points_inner[n]; int j = 0; for (i = 0; i <= SUBDIV; ++i) { /* glVertex3f (cos (here + step * i) * (n + 1.0), sin (here + step * i) * (n + 1.0), 0); */ a[j].x = cos (here + step * i) * (n + 1.0); a[j].y = sin (here + step * i) * (n + 1.0); a[j].z = 0; j++; } if (j != SUBDIV+1) abort(); /* glEndList (); */ } } static void gen_rings (lockward_context *ctx) { GLfloat step; int i, n; step = M_PI * 2.0 / (g_blades * SUBDIV); for (n = 0; n < NRADII - 1; ++n) { glNewList (ctx->rings + n, GL_COMPILE); glBegin (GL_TRIANGLE_STRIP); for (i = g_blades * SUBDIV; i >= 0; --i) { glVertex3f (cos (step * i) * (n + 1.0), sin (step * i) * (n + 1.0), 0); glVertex3f (cos (step * i) * (n + 2.0), sin (step * i) * (n + 2.0), 0); } glEnd(); glEndList (); } } /*************************************************************************** * "Blink" routines. */ static int calc_interval_frames (lockward_context *ctx, int min, int max) { /* * Compute random interval between min and max milliseconds. * Returned value is in frames. */ register int i; i = min; if (max > min) i += random() % (max - min); return i * ctx->fps / 1000; } static void set_alpha_by_dwell (struct blinkstate *bs) { if (bs->dwell > 0) bs->color[3] = (GLfloat) bs->dwellcnt / (GLfloat) bs->dwell; else bs->color[3] = bs->dwellcnt > (-bs->dwell >> 2) ? 1.0 : 0.0; } static void draw_blink_blade (lockward_context *ctx, int inner, int outer, Bool begin_p) { int i; if (begin_p) glBegin (GL_TRIANGLE_FAN); /* glCallList (ctx->blades_outer + outer); */ for (i = 0; i < countof(*ctx->points_outer); i++) glVertex3f(ctx->points_outer[outer][i].x, ctx->points_outer[outer][i].y, ctx->points_outer[outer][i].z); /* glCallList (ctx->blades_inner + inner); */ for (i = 0; i < countof(*ctx->points_inner); i++) glVertex3f(ctx->points_inner[inner][i].x, ctx->points_inner[inner][i].y, ctx->points_inner[inner][i].z); if (begin_p) glEnd(); } static int draw_blink_radial_random (lockward_context *ctx, struct blinkstate *bs) { int i; /* * There is no sense of direction in a random sweep, so re-use the * 'direction' field to hold the current blade we're messing with. */ if (bs->dwellcnt < 0) { if (bs->counter <= 0) { bs->drawfunc = NULL; return 0; } /* * Find available blade. Potentially very slow, depending on * how unlucky we are. */ do { i = random() % g_blades; } while (bs->val & (1 << i)); bs->val |= (1 << i); /* Mark as used. */ bs->direction = i; if ((bs->dwellcnt = bs->dwell) < 0) bs->dwellcnt = -bs->dwellcnt; if ( bs->type == BTYPE_SEGMENT_SINGLE || bs->type == BTYPE_SEGMENT_RANDOM) bs->radius = random() % (NRADII - 1); --bs->counter; } set_alpha_by_dwell (bs); glBlendFunc (GL_DST_COLOR, GL_SRC_ALPHA); glColor4fv (bs->color); glRotatef (bs->direction * 360.0 / (GLfloat) g_blades, 0, 0, 1); if (bs->radius >= 0) draw_blink_blade (ctx, bs->radius, bs->radius + 1, True); else draw_blink_blade (ctx, 0, NRADII - 1, True); --bs->dwellcnt; return SUBDIV + SUBDIV; } static int draw_blink_radial_sequential (lockward_context *ctx, struct blinkstate *bs) { if (bs->dwellcnt < 0) { if (bs->counter <= 0) { bs->drawfunc = NULL; return 0; } if ((bs->dwellcnt = bs->dwell) < 0) bs->dwellcnt = -bs->dwellcnt; --bs->counter; } set_alpha_by_dwell (bs); glBlendFunc (GL_DST_COLOR, GL_SRC_ALPHA); glColor4fv (bs->color); glRotatef ((bs->counter * bs->direction + (int) bs->val) * 360.0 / (GLfloat) g_blades, 0, 0, 1); draw_blink_blade (ctx, 0, NRADII - 1, True); --bs->dwellcnt; return SUBDIV + SUBDIV; } static int draw_blink_radial_doubleseq (lockward_context *ctx, struct blinkstate *bs) { int polys; if (bs->dwellcnt < 0) { if (bs->counter <= 0) { bs->drawfunc = NULL; return 0; } if ((bs->dwellcnt = bs->dwell) < 0) bs->dwellcnt = -bs->dwellcnt; --bs->counter; } set_alpha_by_dwell (bs); glBlendFunc (GL_DST_COLOR, GL_SRC_ALPHA); glColor4fv (bs->color); glPushMatrix (); glRotatef (((int) bs->val + bs->counter) * 360.0 / (GLfloat) g_blades, 0, 0, 1); draw_blink_blade (ctx, 0, NRADII - 1, True); glPopMatrix (); polys = SUBDIV + SUBDIV; if (bs->counter && bs->counter < g_blades / 2) { glRotatef (((int) bs->val - bs->counter) * 360.0 / (GLfloat) g_blades, 0, 0, 1); draw_blink_blade (ctx, 0, NRADII - 1, True); polys += SUBDIV + SUBDIV; } --bs->dwellcnt; return polys; } static int draw_blink_concentric_random (lockward_context *ctx, struct blinkstate *bs) { int i; if (bs->dwellcnt < 0) { if (bs->counter <= 0) { bs->drawfunc = NULL; return 0; } do { i = random() % (NRADII - 1); } while (bs->val & (1 << i)); bs->val |= (1 << i); bs->direction = i; if ((bs->dwellcnt = bs->dwell) < 0) bs->dwellcnt = -bs->dwellcnt; --bs->counter; } set_alpha_by_dwell (bs); glBlendFunc (GL_DST_COLOR, GL_SRC_ALPHA); glColor4fv (bs->color); glCallList (ctx->rings + bs->direction); --bs->dwellcnt; return g_blades * SUBDIV * 2; } static int draw_blink_concentric_sequential (lockward_context *ctx, struct blinkstate *bs) { if (bs->dwellcnt < 0) { if (bs->counter <= 0) { bs->drawfunc = NULL; return 0; } if ((bs->dwellcnt = bs->dwell) < 0) bs->dwellcnt = -bs->dwellcnt; --bs->counter; } set_alpha_by_dwell (bs); glBlendFunc (GL_DST_COLOR, GL_SRC_ALPHA); glColor4fv (bs->color); if (bs->direction > 0) glCallList (ctx->rings + (NRADII - 2) - bs->counter); else glCallList (ctx->rings + bs->counter); --bs->dwellcnt; return g_blades * SUBDIV * 2; } static int draw_blink_segment_scatter (lockward_context *ctx, struct blinkstate *bs) { int i, polys = 0; if (bs->dwellcnt < 0) { if (bs->counter <= 0) { bs->drawfunc = NULL; return 0; } /* * Init random noise array. On average, 1/4 of the bits will * be set, which should look nice. (1/2 looks too busy.) */ for (i = g_blades; --i >= 0; ) bs->noise[i] = random() & random() & ((1 << (NRADII - 1)) - 1); if ((bs->dwellcnt = bs->dwell) < 0) bs->dwellcnt = -bs->dwellcnt; --bs->counter; } set_alpha_by_dwell (bs); glBlendFunc (GL_DST_COLOR, GL_SRC_ALPHA); glColor4fv (bs->color); for (i = g_blades; --i >= 0; ) { register uint32_t bits; int inner, outer; /* * Find consecutive runs of 1 bits. Keep going until we run * out of them. */ for (bits = bs->noise[i]; bits; ) { inner = ffs (bits) - 1; bits = ~bits & ~((1 << inner) - 1); outer = ffs (bits) - 1; bits = ~bits & ~((1 << outer) - 1); glPushMatrix (); glRotatef (i * 360.0 / (GLfloat) g_blades, 0, 0, 1); draw_blink_blade (ctx, inner, outer, True); glPopMatrix (); polys += SUBDIV + SUBDIV; } } --bs->dwellcnt; return polys; } static void random_blink (lockward_context *ctx, struct blinkstate *bs) { bs->color[0] = bs->color[1] = bs->color[2] = bs->color[3] = 1.0; bs->dwellcnt = -1; bs->radius = -1; bs->dwell = calc_interval_frames (ctx, g_blinkdwell_min, g_blinkdwell_max); if (random() & 2) bs->dwell = -bs->dwell; bs->type = random() % MAX_BTYPE; switch (bs->type) { case BTYPE_RADIAL_SINGLE: case BTYPE_SEGMENT_SINGLE: bs->drawfunc = draw_blink_radial_random; bs->val = 0; bs->counter = 1; break; case BTYPE_RADIAL_RANDOM: case BTYPE_SEGMENT_RANDOM: bs->drawfunc = draw_blink_radial_random; bs->val = 0; bs->counter = g_blades; break; case BTYPE_RADIAL_SEQ: bs->drawfunc = draw_blink_radial_sequential; bs->val = random() % g_blades; /* Initial offset */ bs->direction = random() & 8 ? 1 : -1; bs->counter = g_blades; break; case BTYPE_RADIAL_DOUBLESEQ: bs->drawfunc = draw_blink_radial_doubleseq; bs->val = random() % g_blades; /* Initial offset */ bs->counter = g_blades / 2 + 1; break; case BTYPE_CONCENTRIC_SINGLE: bs->drawfunc = draw_blink_concentric_random; bs->val = 0; bs->counter = 1; break; case BTYPE_CONCENTRIC_RANDOM: bs->drawfunc = draw_blink_concentric_random; bs->val = 0; bs->counter = NRADII - 1; break; case BTYPE_CONCENTRIC_SEQ: bs->drawfunc = draw_blink_concentric_sequential; bs->direction = random() & 8 ? 1 : -1; bs->counter = NRADII - 1; break; case BTYPE_SEGMENT_SCATTER: bs->drawfunc = draw_blink_segment_scatter; bs->counter = random() % (g_blades / 2) + (g_blades / 2) + 1; break; } } /*************************************************************************** * Main rendering routine. */ ENTRYPOINT void draw_lockward (ModeInfo *mi) { lockward_context *ctx = &g_ctx[MI_SCREEN (mi)]; spinnerstate *ss; Display *dpy = MI_DISPLAY(mi); Window window = MI_WINDOW(mi); int i, n; GLfloat scolor[4] = {0.0, 0.0, 0.0, 0.5}; if (!ctx->glx_context) return; glXMakeCurrent (MI_DISPLAY (mi), MI_WINDOW (mi), *(ctx->glx_context)); glClear (GL_COLOR_BUFFER_BIT); if (ctx->blendmode) glBlendFunc (GL_ONE, GL_ONE); else glBlendFunc (GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); glPushMatrix (); glLoadIdentity (); mi->polygon_count = 0; for (n = NSPINNERS; --n >= 0; ) { ss = &ctx->spinners[n]; /* Set color. */ i = ss->ccolor >> COLORIDX_SHF; scolor[0] = ss->colors[i].red / 65535.0; scolor[1] = ss->colors[i].green / 65535.0; scolor[2] = ss->colors[i].blue / 65535.0; glColor4fv (scolor); glPushMatrix (); glRotatef (ss->rot - ss->rotcount * ss->rotinc, 0, 0, 1); for (i = ss->nblades; --i >= 0; ) { glPushMatrix (); glRotatef (360.0 * i / ss->nblades, 0, 0, 1); glBegin (GL_TRIANGLE_FAN); /* glCallList (ctx->blades_outer + ss->bladeidx[i].outer); */ /* glCallList (ctx->blades_inner + ss->bladeidx[i].inner); */ draw_blink_blade (ctx, ss->bladeidx[i].inner, ss->bladeidx[i].outer, False); glEnd (); glPopMatrix (); mi->polygon_count += SUBDIV + SUBDIV; } glPopMatrix (); /* Advance rotation. */ if (ss->rotcount) { if (ss->rotcount > 0) --ss->rotcount; } else { if (ss->rotinc == 0.0) random_blade_rot (ctx, ss); else { /* Compute # of ticks to sit idle. */ ss->rotinc = 0.0; ss->rotcount = calc_interval_frames (ctx, g_rotateidle_min, g_rotateidle_max); } } /* Advance colors. */ if ((ss->ccolor += ss->colorinc) >= ss->ncolors) ss->ccolor -= ss->ncolors; else if (ss->ccolor < 0) ss->ccolor += ss->ncolors; } if (g_blink_p) { if (ctx->blink.drawfunc) { mi->polygon_count += ctx->blink.drawfunc (ctx, &ctx->blink); } else { if (ctx->nextblink > 0) --ctx->nextblink; else { /* Compute # of frames for blink idle time. */ ctx->nextblink = calc_interval_frames (ctx, g_blinkidle_min, g_blinkidle_max); random_blink (ctx, &ctx->blink); } } } glPopMatrix (); if (MI_IS_FPS (mi)) do_fps (mi); glFinish(); glXSwapBuffers (dpy, window); } /*************************************************************************** * Initialization/teardown. */ ENTRYPOINT void init_lockward (ModeInfo *mi) { lockward_context *ctx; int i, n; if (!g_ctx) { g_ctx = (lockward_context *) calloc (MI_NUM_SCREENS (mi), sizeof (lockward_context)); if (!g_ctx) { fprintf (stderr, "%s: can't allocate context.\n", progname); exit (1); } } ctx = &g_ctx[MI_SCREEN (mi)]; ctx->glx_context = init_GL (mi); reshape_lockward (mi, MI_WIDTH (mi), MI_HEIGHT (mi)); glEnable (GL_CULL_FACE); glEnable (GL_BLEND); glDisable (GL_DEPTH_TEST); glShadeModel (GL_FLAT); glFrontFace (GL_CW); /* ctx->blades_outer = glGenLists (NRADII); */ /* ctx->blades_inner = glGenLists (NRADII); */ ctx->rings = glGenLists (NRADII - 1); ctx->blendmode = 0; ctx->fps = 1000000 / MI_DELAY (mi); ctx->nextblink = calc_interval_frames (ctx, g_blinkidle_min, g_blinkidle_max); ctx->blink.drawfunc = NULL; ctx->blink.noise = malloc (sizeof (uint32_t) * g_blades); if (!ctx->blink.noise) { fprintf (stderr, "Can't allocate noise array.\n"); exit (1); } gen_blade_arcs (ctx); gen_rings (ctx); for (i = NSPINNERS; --i >= 0; ) { spinnerstate *ss = &ctx->spinners[i]; ss->rot = 0.0; ss->rotcount = -1; /* Establish rotation */ random_blade_rot (ctx, ss); /* * Establish color cycling path and rate. Rate avoids zero. */ ss->ncolors = 128; ss->colorinc = (random() & ((2 << COLORIDX_SHF) - 1)) - (1 << COLORIDX_SHF); if (ss->colorinc >= 0) ++ss->colorinc; ss->colors = (XColor *) calloc (ss->ncolors, sizeof (XColor)); if (!ss->colors) { fprintf (stderr, "Can't allocate XColors for spinner %d.\n", i); exit (1); } make_smooth_colormap (0, 0, 0, ss->colors, &ss->ncolors, False, 0, False); ss->ncolors <<= COLORIDX_SHF; /* * Create blades. */ ss->nblades = g_blades; ss->bladeidx = malloc (sizeof (bladestate) * g_blades); if (!ss->bladeidx) { fprintf (stderr, "Can't allocate blades.\n"); exit (1); } for (n = g_blades; --n >= 0; ) { /* * Establish blade radii. Can't be equal. Ensure * outer > inner. */ do { ss->bladeidx[n].outer = random() & 7; ss->bladeidx[n].inner = random() & 7; } while (ss->bladeidx[n].outer == ss->bladeidx[n].inner); if (ss->bladeidx[n].outer < ss->bladeidx[n].inner) { uint8_t tmp; tmp = ss->bladeidx[n].outer; ss->bladeidx[n].outer = ss->bladeidx[n].inner; ss->bladeidx[n].inner = tmp; } } } } static void free_lockward (lockward_context *ctx) { int i; if (ctx->blink.noise) free (ctx->blink.noise); if (glIsList (ctx->rings)) glDeleteLists (ctx->rings, NRADII - 1); /* if (glIsList (ctx->blades_outer)) glDeleteLists (ctx->blades_outer, NRADII); if (glIsList (ctx->blades_inner)) glDeleteLists (ctx->blades_inner, NRADII); */ for (i = NSPINNERS; --i >= 0; ) { spinnerstate *ss = &ctx->spinners[i]; if (ss->colors) free (ss->colors); if (ss->bladeidx) free (ss->bladeidx); } } ENTRYPOINT void release_lockward (ModeInfo *mi) { int i; if (!g_ctx) return; for (i = MI_NUM_SCREENS (mi); --i >= 0; ) { if (g_ctx[i].glx_context) glXMakeCurrent (MI_DISPLAY (mi), MI_WINDOW (mi), *(g_ctx[i].glx_context)); free_lockward (&g_ctx[i]); } FreeAllGL (mi); free (g_ctx); g_ctx = NULL; } XSCREENSAVER_MODULE ("Lockward", lockward) #endif /* USE_GL */ /* vim:se ts=8 sts=8 sw=8: */ xscreensaver-5.36/hacks/glx/cubicgrid.c000644 000767 000024 00000016231 12710313175 020123 0ustar00jwzstaff000000 000000 /*- * Permission to use, copy, modify, and distribute this software and its * documentation for any purpose and without fee is hereby granted, * provided that the above copyright notice appear in all copies and that * both that copyright notice and this permission notice appear in * supporting documentation. * * This file is provided AS IS with no warranties of any kind. The author * shall have no liability with respect to the infringement of copyrights, * trade secrets or any patents by this file or any part thereof. In no * event will the author be liable for any lost revenue or profits or * other special, indirect and consequential damages. * * Cubic Grid - a 3D lattice. The observer is located in the centre of * a spinning finite lattice. As it rotates, various view-throughs appear and * evolve. A simple idea with interesting results. * * Vasek Potocek (Dec-28-2007) * vasek.potocek@post.cz */ #define DEFAULTS "*delay: 20000 \n" \ "*showFPS: False \n" \ "*wireframe: False \n" \ "*suppressRotationAnimation: True\n" \ # define refresh_cubicgrid 0 #include "xlockmore.h" #ifdef USE_GL #define DEF_SPEED "1.0" #define DEF_DIV "30" #define DEF_ZOOM "20" #define DEF_BIGDOTS "True" #undef countof #define countof(x) (sizeof((x))/sizeof((*x))) #include "rotator.h" #include "gltrackball.h" /*************************************************************************/ static int ticks; static float size; static float speed; static Bool bigdots; static argtype vars[] = { { &speed, "speed", "Speed", DEF_SPEED, t_Float }, { &size, "zoom", "Zoom", DEF_ZOOM, t_Float }, { &ticks, "ticks", "Ticks", DEF_DIV, t_Int }, { &bigdots, "bigdots", "BigDots", DEF_BIGDOTS, t_Bool }, }; static XrmOptionDescRec opts[] = { { "-speed", ".speed", XrmoptionSepArg, 0 }, { "-zoom", ".zoom", XrmoptionSepArg, 0 }, { "-ticks", ".ticks", XrmoptionSepArg, 0 }, { "-bigdots", ".bigdots", XrmoptionNoArg, "True" }, { "+bigdots", ".bigdots", XrmoptionNoArg, "False" }, }; ENTRYPOINT ModeSpecOpt cubicgrid_opts = {countof(opts), opts, countof(vars), vars, NULL}; #ifdef USE_MODULES ModStruct cubicgrid_description = { "cubicgrid", "init_cubicgrid", "draw_cubicgrid", "release_cubicgrid", "draw_cubicgrid", "change_cubicgrid", NULL, &cubicgrid_opts, 25000, 1, 1, 1, 1.0, 4, "", "Shows a rotating 3D lattice from inside", 0, NULL }; #endif typedef struct { GLXContext *glx_context; GLfloat ratio; GLint list; rotator *rot; trackball_state *trackball; Bool button_down_p; int npoints; } cubicgrid_conf; static cubicgrid_conf *cubicgrid = NULL; static const GLfloat zpos = -18.0; /*************************************************************************/ ENTRYPOINT Bool cubicgrid_handle_event (ModeInfo *mi, XEvent *event) { cubicgrid_conf *cp = &cubicgrid[MI_SCREEN(mi)]; if (gltrackball_event_handler (event, cp->trackball, MI_WIDTH (mi), MI_HEIGHT (mi), &cp->button_down_p)) return True; return False; } static Bool draw_main(ModeInfo *mi) { cubicgrid_conf *cp = &cubicgrid[MI_SCREEN(mi)]; double x, y, z; glClear(GL_COLOR_BUFFER_BIT); glLoadIdentity(); glRotatef (180, 1, 0, 0); /* Make trackball track the right way */ glRotatef (180, 0, 1, 0); glTranslatef(0, 0, zpos); glScalef(size/ticks, size/ticks, size/ticks); # ifdef HAVE_MOBILE /* Keep it the same relative size when rotated. */ { GLfloat h = MI_HEIGHT(mi) / (GLfloat) MI_WIDTH(mi); int o = (int) current_device_rotation(); if (o != 0 && o != 180 && o != -180) glScalef (1/h, 1/h, 1); } # endif gltrackball_rotate (cp->trackball); 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); glRotatef (-z * 360, 0.0, 0.0, 1.0); glTranslatef(-ticks/2.0, -ticks/2.0, -ticks/2.0); glCallList(cp->list); return True; } static void init_gl(ModeInfo *mi) { cubicgrid_conf *cp = &cubicgrid[MI_SCREEN(mi)]; int x, y, z; float tf = ticks; glDrawBuffer(GL_BACK); if(bigdots) { glPointSize(2.0); } glPixelStorei(GL_UNPACK_ALIGNMENT, 1); glShadeModel(GL_FLAT); cp->list = glGenLists(1); glNewList(cp->list, GL_COMPILE); if(MI_IS_MONO(mi)) { glColor3f(1.0, 1.0, 1.0); glBegin(GL_POINTS); for(x = 0; x < ticks; x++) { for(y = 0; y < ticks; y++) { for(z = 0; z < ticks; z++) { glVertex3f(x, y, z); cp->npoints++; } } } glEnd(); } else { glBegin(GL_POINTS); for(x = 0; x < ticks; x++) { for(y = 0; y < ticks; y++) { for(z = 0; z < ticks; z++) { glColor3f(x/tf, y/tf, z/tf); glVertex3f(x, y, z); cp->npoints++; } } } glEnd(); } glEndList(); } /*************************************************************************/ ENTRYPOINT void reshape_cubicgrid(ModeInfo *mi, int width, int height) { cubicgrid_conf *cp = &cubicgrid[MI_SCREEN(mi)]; if(!height) height = 1; cp->ratio = (GLfloat)width/(GLfloat)height; glViewport(0, 0, (GLint) width, (GLint) height); glMatrixMode(GL_PROJECTION); glLoadIdentity(); gluPerspective(30.0, cp->ratio, 1.0, 100.0); glMatrixMode(GL_MODELVIEW); glClear(GL_COLOR_BUFFER_BIT); } ENTRYPOINT void release_cubicgrid(ModeInfo *mi) { if (cubicgrid != NULL) { int screen; for (screen = 0; screen < MI_NUM_SCREENS(mi); screen++) { cubicgrid_conf *cp = &cubicgrid[screen]; if (cp->glx_context) { cp->glx_context = NULL; } } free((void *)cubicgrid); cubicgrid = NULL; } FreeAllGL(mi); } ENTRYPOINT void init_cubicgrid(ModeInfo *mi) { cubicgrid_conf *cp; if(!cubicgrid) { cubicgrid = (cubicgrid_conf *)calloc(MI_NUM_SCREENS(mi), sizeof(cubicgrid_conf)); if(!cubicgrid) return; } cp = &cubicgrid[MI_SCREEN(mi)]; if ((cp->glx_context = init_GL(mi)) != NULL) { init_gl(mi); reshape_cubicgrid(mi, MI_WIDTH(mi), MI_HEIGHT(mi)); } else { MI_CLEARWINDOW(mi); } { double spin_speed = 0.045 * speed; double spin_accel = 0.005 * speed; cp->rot = make_rotator (spin_speed, spin_speed, spin_speed, spin_accel, 0, True); cp->trackball = gltrackball_init (True); } } ENTRYPOINT void draw_cubicgrid(ModeInfo * mi) { Display *display = MI_DISPLAY(mi); Window window = MI_WINDOW(mi); cubicgrid_conf *cp; if (!cubicgrid) return; cp = &cubicgrid[MI_SCREEN(mi)]; MI_IS_DRAWN(mi) = True; if (!cp->glx_context) return; glXMakeCurrent(display, window, *(cp->glx_context)); if (!draw_main(mi)) { release_cubicgrid(mi); return; } mi->polygon_count = cp->npoints; if (MI_IS_FPS(mi)) do_fps (mi); glFlush(); glXSwapBuffers(display, window); } #ifndef STANDALONE ENTRYPOINT void change_cubicgrid(ModeInfo * mi) { cubicgrid_conf *cp = &cubicgrid[MI_SCREEN(mi)]; if (!cp->glx_context) return; glXMakeCurrent(MI_DISPLAY(mi), MI_WINDOW(mi), *(cp->glx_context)); init_gl(mi); } #endif /* !STANDALONE */ XSCREENSAVER_MODULE ("CubicGrid", cubicgrid) #endif xscreensaver-5.36/hacks/glx/hypnowheel.c000644 000767 000024 00000017704 12710313213 020351 0ustar00jwzstaff000000 000000 /* hypnowheel, Copyright (c) 2008 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. * * Draws overlapping spirals, where the tightness of the spirals changes. * Nice settings: * * -layers 7 -wander * -count 3 -layers 50 * -twistiness 0.2 -layers 20 * -count 3 -layers 2 -speed 20 -twist 10 -wander */ #define DEFAULTS "*delay: 20000 \n" \ "*count: 13 \n" \ "*showFPS: False \n" \ "*fpsSolid: True \n" \ "*wireframe: False \n" \ "*suppressRotationAnimation: True\n" \ # define refresh_hypnowheel 0 # define release_hypnowheel 0 #undef countof #define countof(x) (sizeof((x))/sizeof((*x))) #include "xlockmore.h" #include "colors.h" #include "rotator.h" #include #ifdef USE_GL /* whole file */ #define DEF_WANDER "False" #define DEF_SYMMETRIC "False" #define DEF_SPEED "1.0" #define DEF_TWISTINESS "4.0" #define DEF_LAYERS "4" typedef struct { int color; GLfloat twist; GLfloat alpha; rotator *rot; } disc; typedef struct { GLXContext *glx_context; rotator *rot; disc *discs; int ncolors; XColor *colors; } hypnowheel_configuration; static hypnowheel_configuration *bps = NULL; static GLfloat speed; static GLfloat twistiness; static GLint nlayers; static Bool do_wander; static Bool do_symmetric; static XrmOptionDescRec opts[] = { { "-speed", ".speed", XrmoptionSepArg, 0 }, { "-twistiness", ".twistiness", XrmoptionSepArg, 0 }, { "-layers", ".layers", XrmoptionSepArg, 0 }, { "-wander", ".wander", XrmoptionNoArg, "True" }, { "+wander", ".wander", XrmoptionNoArg, "False" }, { "-symmetric", ".symmetric", XrmoptionNoArg, "True" }, { "+symmetric", ".symmetric", XrmoptionNoArg, "False" }, }; static argtype vars[] = { {&do_wander, "wander", "Wander", DEF_WANDER, t_Bool}, {&do_symmetric, "symmetric", "Symmetric", DEF_SYMMETRIC, t_Bool}, {&speed, "speed", "Speed", DEF_SPEED, t_Float}, {&twistiness, "twistiness", "Twistiness", DEF_TWISTINESS, t_Float}, {&nlayers, "layers", "Layers", DEF_LAYERS, t_Int}, }; ENTRYPOINT ModeSpecOpt hypnowheel_opts = { countof(opts), opts, countof(vars), vars, NULL}; static void draw_spiral (ModeInfo *mi, disc *d) { int wire = MI_IS_WIREFRAME(mi); hypnowheel_configuration *bp = &bps[MI_SCREEN(mi)]; GLfloat rr = 0.5; int n = MI_COUNT(mi); int steps = n * (wire ? 3 : (n < 5 ? 60 : n < 10 ? 20 : 10)); GLfloat dth = M_PI*2 / n; GLfloat dr = rr / steps; GLfloat th; GLfloat twist = d->twist; GLfloat dtwist = M_PI * 2 * twist / steps; double cscale = 65536.0; if (nlayers > 3 && !wire) cscale *= (nlayers-2); /* don't wash out to white */ glColor4f (bp->colors[d->color].red / cscale, bp->colors[d->color].green / cscale, bp->colors[d->color].blue / cscale, d->alpha); for (th = 0; th < M_PI*2; th += dth) { GLfloat th1 = th; GLfloat r; glBegin (wire ? GL_LINE_STRIP : GL_QUAD_STRIP); for (r = 0; r <= rr; r += dr) { GLfloat th2 = th1 + dth/2 + dtwist; th1 += dtwist; glVertex3f (r * cos(th1), r * sin(th1), 0); if (! wire) glVertex3f (r * cos(th2), r * sin(th2), 0); mi->polygon_count++; } glEnd(); } } /* Window management, etc */ ENTRYPOINT void reshape_hypnowheel (ModeInfo *mi, int width, int height) { GLfloat h = (GLfloat) height / (GLfloat) width; glViewport (0, 0, (GLint) width, (GLint) height); glMatrixMode(GL_PROJECTION); glLoadIdentity(); gluPerspective (30.0, 1/h, 1.0, 100.0); glMatrixMode(GL_MODELVIEW); glLoadIdentity(); gluLookAt( 0.0, 0.0, 30.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0); # ifdef HAVE_MOBILE /* Keep it the same relative size when rotated. */ { int o = (int) current_device_rotation(); if (o != 0 && o != 180 && o != -180) glScalef (1/h, 1/h, 1/h); } # endif glClear(GL_COLOR_BUFFER_BIT); } ENTRYPOINT void init_hypnowheel (ModeInfo *mi) { hypnowheel_configuration *bp; int wire = MI_IS_WIREFRAME(mi); int i; if (!bps) { bps = (hypnowheel_configuration *) calloc (MI_NUM_SCREENS(mi), sizeof (hypnowheel_configuration)); if (!bps) { fprintf(stderr, "%s: out of memory\n", progname); exit(1); } } bp = &bps[MI_SCREEN(mi)]; bp->glx_context = init_GL(mi); reshape_hypnowheel (mi, MI_WIDTH(mi), MI_HEIGHT(mi)); if (! bp->rot) bp->rot = make_rotator (0, 0, 0, 0, speed * 0.0025, False); bp->ncolors = 1024; if (!bp->colors) bp->colors = (XColor *) calloc(bp->ncolors, sizeof(XColor)); make_smooth_colormap (0, 0, 0, bp->colors, &bp->ncolors, False, 0, False); if (MI_COUNT(mi) < 2) MI_COUNT(mi) = 2; if (nlayers < 1) nlayers = 1; if (!bp->discs) bp->discs = (disc *) calloc (nlayers, sizeof (disc)); for (i = 0; i < nlayers; i++) { double spin_speed = speed * 0.2; double wander_speed = speed * 0.0012; double spin_accel = 0.2; bp->discs[i].twist = 0; bp->discs[i].alpha = 1; bp->discs[i].color = i * bp->ncolors / nlayers; spin_speed += frand (spin_speed / 5); wander_speed += frand (wander_speed * 3); if (!bp->discs[i].rot) bp->discs[i].rot = make_rotator (spin_speed, spin_speed, spin_speed, spin_accel, (do_wander ? wander_speed : 0), True); } glDisable (GL_LIGHTING); glDisable (GL_DEPTH_TEST); glDepthMask (GL_FALSE); glDisable (GL_CULL_FACE); if (! wire) { glEnable (GL_BLEND); glBlendFunc (GL_ONE, GL_ONE); } } ENTRYPOINT void draw_hypnowheel (ModeInfo *mi) { hypnowheel_configuration *bp = &bps[MI_SCREEN(mi)]; Display *dpy = MI_DISPLAY(mi); Window window = MI_WINDOW(mi); int i; if (!bp->glx_context) return; glXMakeCurrent(MI_DISPLAY(mi), MI_WINDOW(mi), *(bp->glx_context)); glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glPushMatrix (); { double x, y, z; get_position (bp->rot, &x, &y, &z, True); glTranslatef((x - 0.5) * 8, (y - 0.5) * 8, 0); get_rotation (bp->rot, &x, &y, &z, True); glRotatef (x * 360, 1.0, 0.0, 0.0); glRotatef (y * 360, 0.0, 1.0, 0.0); glRotatef (z * 360, 0.0, 0.0, 1.0); } mi->polygon_count = 0; glScalef (45, 45, 45); for (i = 0; i < nlayers; i++) { disc *d = &bp->discs[i]; double x, y, z; rotator *rot = (do_symmetric ? bp->discs[(i & ~0x1)].rot : d->rot); Bool tick = (!do_symmetric || i == 0); glPushMatrix(); d->color++; if (d->color >= bp->ncolors) d->color = 0; get_position (rot, &x, &y, &z, tick); x -= 0.5; y -= 0.5; x *= 0.1; y *= 0.1; glTranslatef (x, y, 0); d->twist = (z * twistiness * ((i & 1) ? 1 : -1)); get_rotation (rot, &x, &y, &z, tick); glRotatef (360 * z, 0, 0, 1); /* rotation of this disc */ draw_spiral (mi, &bp->discs[i]); glPopMatrix(); } glPopMatrix (); if (mi->fps_p) do_fps (mi); glFinish(); glXSwapBuffers(dpy, window); } ENTRYPOINT Bool hypnowheel_handle_event (ModeInfo *mi, XEvent *event) { if (screenhack_event_helper (MI_DISPLAY(mi), MI_WINDOW(mi), event)) { init_hypnowheel (mi); return True; } return False; } XSCREENSAVER_MODULE ("Hypnowheel", hypnowheel) #endif /* USE_GL */ xscreensaver-5.36/hacks/glx/skytentacles.c000644 000767 000024 00000101606 12701612217 020701 0ustar00jwzstaff000000 000000 /* Sky Tentacles, Copyright (c) 2008-2014 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. */ #define DEFAULTS "*delay: 30000 \n" \ "*count: 9 \n" \ "*showFPS: False \n" \ "*wireframe: False \n" \ # define refresh_tentacles 0 # define release_tentacles 0 #undef countof #define countof(x) (sizeof((x))/sizeof((*x))) #include "xlockmore.h" #include "colors.h" #include "normals.h" #include "rotator.h" #include "gltrackball.h" #include #include "xpm-ximage.h" #include "../images/scales.xpm" static char *grey_texture[] = { "16 1 3 1", "X c #808080", "x c #C0C0C0", ". c #FFFFFF", "XXXxxxxx........" }; #ifdef USE_GL /* whole file */ # ifndef HAVE_JWZGLES # define HAVE_POLYGONMODE # endif #define DEF_SPEED "1.0" #define DEF_SMOOTH "True" #define DEF_TEXTURE "True" #define DEF_CEL "False" #define DEF_INTERSECT "False" #define DEF_SLICES "16" #define DEF_SEGMENTS "24" #define DEF_WIGGLINESS "0.35" #define DEF_FLEXIBILITY "0.35" #define DEF_THICKNESS "1.0" #define DEF_LENGTH "9.0" #define DEF_COLOR "#305A30" #define DEF_STRIPE "#451A30" #define DEF_SUCKER "#453E30" #define DEF_DEBUG "False" #define BELLRAND(n) ((frand((n)) + frand((n)) + frand((n))) / 3) typedef struct { GLfloat length; /* length of the segment coming out of this segment */ GLfloat th; /* vector tilt (on yz plane) from previous segment */ GLfloat phi; /* vector rotation (on xy plane) from previous segment */ GLfloat thickness; /* radius of tentacle at the bottom of this segment */ rotator *rot; /* motion modeller */ } segment; typedef struct { ModeInfo *mi; GLfloat x, y, z; /* position of the base */ int nsegments; segment *segments; GLfloat tentacle_color[4], stripe_color[4], sucker_color[4]; } tentacle; typedef struct { GLXContext *glx_context; trackball_state *trackball; Bool button_down_p; int ntentacles; int tentacles_size; tentacle **tentacles; GLfloat tentacle_color[4], stripe_color[4], sucker_color[4]; int torus_polys; int torus_step; XYZ *torus_points; XYZ *torus_normals; GLfloat line_thickness; GLfloat outline_color[4]; XImage *texture; GLuint texid; Bool left_p; } tentacles_configuration; static tentacles_configuration *tcs = NULL; static int debug_p; static GLfloat arg_speed; static int smooth_p; static int texture_p; static int cel_p; static int intersect_p; static int arg_slices; static int arg_segments; static GLfloat arg_thickness; static GLfloat arg_length; static GLfloat arg_wiggliness; static GLfloat arg_flexibility; static char *arg_color, *arg_stripe, *arg_sucker; /* we can only have one light when doing cel shading */ static GLfloat light_pos[4] = {1.0, 1.0, 1.0, 0.0}; static XrmOptionDescRec opts[] = { { "-speed", ".speed", XrmoptionSepArg, 0 }, { "-no-smooth", ".smooth", XrmoptionNoArg, "False" }, { "-texture", ".texture", XrmoptionNoArg, "True" }, { "-no-texture", ".texture", XrmoptionNoArg, "False" }, { "-cel", ".cel", XrmoptionNoArg, "True" }, { "-no-cel", ".cel", XrmoptionNoArg, "False" }, { "-intersect", ".intersect", XrmoptionNoArg, "True" }, { "-no-intersect", ".intersect", XrmoptionNoArg, "False" }, { "-slices", ".slices", XrmoptionSepArg, 0 }, { "-segments", ".segments", XrmoptionSepArg, 0 }, { "-thickness", ".thickness", XrmoptionSepArg, 0 }, { "-length", ".length", XrmoptionSepArg, 0 }, { "-wiggliness", ".wiggliness", XrmoptionSepArg, 0 }, { "-flexibility", ".flexibility", XrmoptionSepArg, 0 }, { "-color", ".tentacleColor", XrmoptionSepArg, 0 }, { "-stripe-color", ".stripeColor", XrmoptionSepArg, 0 }, { "-sucker-color", ".suckerColor", XrmoptionSepArg, 0 }, { "-debug", ".debug", XrmoptionNoArg, "True" }, }; static argtype vars[] = { {&arg_speed, "speed", "Speed", DEF_SPEED, t_Float}, {&smooth_p, "smooth", "Smooth", DEF_SMOOTH, t_Bool}, {&texture_p, "texture", "Texture", DEF_TEXTURE, t_Bool}, {&cel_p, "cel", "Cel", DEF_CEL, t_Bool}, {&intersect_p, "intersect", "Intersect", DEF_INTERSECT, t_Bool}, {&arg_slices, "slices", "Slices", DEF_SLICES, t_Int}, {&arg_segments, "segments", "Segments", DEF_SEGMENTS, t_Int}, {&arg_thickness, "thickness", "Thickness", DEF_THICKNESS, t_Float}, {&arg_length, "length", "Length", DEF_LENGTH, t_Float}, {&arg_wiggliness, "wiggliness", "Wiggliness", DEF_WIGGLINESS, t_Float}, {&arg_flexibility, "flexibility", "Flexibility", DEF_FLEXIBILITY, t_Float}, {&arg_color, "tentacleColor", "Color", DEF_COLOR, t_String}, {&arg_stripe, "stripeColor", "Color", DEF_STRIPE, t_String}, {&arg_sucker, "suckerColor", "Color", DEF_SUCKER, t_String}, {&debug_p, "debug", "Debug", DEF_DEBUG, t_Bool}, }; ENTRYPOINT ModeSpecOpt tentacles_opts = {countof(opts), opts, countof(vars), vars, NULL}; /* Window management, etc */ ENTRYPOINT void reshape_tentacles (ModeInfo *mi, int width, int height) { tentacles_configuration *tc = &tcs[MI_SCREEN(mi)]; GLfloat h = (GLfloat) height / (GLfloat) width; glViewport (0, 0, (GLint) width, (GLint) height); glMatrixMode(GL_PROJECTION); glLoadIdentity(); gluPerspective (30.0, 1/h, 1.0, 100.0); glMatrixMode(GL_MODELVIEW); glLoadIdentity(); gluLookAt( 0.0, 0.0, 30.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0); glClear(GL_COLOR_BUFFER_BIT); tc->line_thickness = (MI_IS_WIREFRAME (mi) ? 1 : MAX (3, width / 200)); } static void normalize (GLfloat *x, GLfloat *y, GLfloat *z) { GLfloat d = sqrt((*x)*(*x) + (*y)*(*y) + (*z)*(*z)); *x /= d; *y /= d; *z /= d; } static GLfloat dot (GLfloat x0, GLfloat y0, GLfloat z0, GLfloat x1, GLfloat y1, GLfloat z1) { return x0*x1 + y0*y1 + z0*z1; } static void compute_unit_torus (ModeInfo *mi, double ratio, int slices1, int slices2) { tentacles_configuration *tc = &tcs[MI_SCREEN(mi)]; Bool wire = MI_IS_WIREFRAME (mi); int i, j, k, fp; if (wire) slices1 /= 2; if (wire) slices2 /= 4; if (slices1 < 3) slices1 = 3; if (slices2 < 3) slices2 = 3; tc->torus_polys = slices1 * (slices2+1) * 2; tc->torus_points = (XYZ *) calloc (tc->torus_polys + 1, sizeof (*tc->torus_points)); tc->torus_normals = (XYZ *) calloc (tc->torus_polys + 1, sizeof (*tc->torus_normals)); tc->torus_step = 2 * (slices2+1); fp = 0; for (i = 0; i < slices1; i++) for (j = 0; j <= slices2; j++) for (k = 0; k <= 1; k++) { double s = (i + k) % slices1 + 0.5; double t = j % slices2; XYZ p; p.x = cos(t*M_PI*2/slices2) * cos(s*M_PI*2/slices1); p.y = sin(t*M_PI*2/slices2) * cos(s*M_PI*2/slices1); p.z = sin(s*M_PI*2/slices1); tc->torus_normals[fp] = p; p.x = (1 + ratio * cos(s*M_PI*2/slices1)) * cos(t*M_PI*2/slices2) / 2; p.y = (1 + ratio * cos(s*M_PI*2/slices1)) * sin(t*M_PI*2/slices2) / 2; p.z = ratio * sin(s*M_PI*2/slices1) / 2; tc->torus_points[fp] = p; fp++; } if (fp != tc->torus_polys) abort(); tc->torus_polys = fp; } /* Initializes a new tentacle and stores it in the list. */ static tentacle * make_tentacle (ModeInfo *mi, int which, int total) { tentacles_configuration *tc = &tcs[MI_SCREEN(mi)]; tentacle *t = (tentacle *) calloc (1, sizeof (*t)); double brightness; int i; t->mi = mi; /* position tentacles on a grid */ { int cols = (int) (sqrt(total) + 0.5); int rows = (total+cols-1) / cols; int xx = which % cols; int yy = which / cols; double spc = arg_thickness * 0.8; if (!intersect_p) cols = 1, xx = 0; t->x = (cols * spc / 2) - (spc * (xx + 0.5)); t->y = (rows * spc / 2) - (spc * (yy + 0.5)); t->z = 0; } /* Brighten or darken the colors of this tentacle from the default. */ brightness = 0.6 + frand(3.0); memcpy (t->tentacle_color, tc->tentacle_color, 4 * sizeof(*t->tentacle_color)); memcpy (t->stripe_color, tc->stripe_color, 4 * sizeof(*t->stripe_color)); memcpy (t->sucker_color, tc->sucker_color, 4 * sizeof(*t->sucker_color)); # define FROB(X) \ t->X[0] *= brightness; if (t->X[0] > 1) t->X[0] = 1; \ t->X[1] *= brightness; if (t->X[1] > 1) t->X[1] = 1; \ t->X[2] *= brightness; if (t->X[2] > 1) t->X[2] = 1 FROB (tentacle_color); FROB (stripe_color); FROB (sucker_color); # undef FROB t->nsegments = (arg_segments) + BELLRAND(arg_segments); t->segments = (segment *) calloc (t->nsegments+1, sizeof(*t->segments)); for (i = 0; i < t->nsegments; i++) { double spin_speed = 0; double spin_accel = 0; double wander_speed = arg_speed * (0.02 + BELLRAND(0.1)); t->segments[i].rot = make_rotator (spin_speed, spin_speed, spin_speed, spin_accel, wander_speed, True); } t->segments[0].thickness = (((arg_thickness * 0.5) + BELLRAND(arg_thickness * 0.6)) / 1.0); if (tc->tentacles_size <= tc->ntentacles) { tc->tentacles_size = (tc->tentacles_size * 1.2) + tc->ntentacles + 2; tc->tentacles = (tentacle **) realloc (tc->tentacles, tc->tentacles_size * sizeof(*tc->tentacles)); if (! tc->tentacles) { fprintf (stderr, "%s: out of memory (%d tentacles)\n", progname, tc->tentacles_size); exit (1); } } tc->tentacles[tc->ntentacles++] = t; return t; } static void draw_sucker (tentacle *t, Bool front_p) { tentacles_configuration *tc = &tcs[MI_SCREEN(t->mi)]; Bool wire = MI_IS_WIREFRAME (t->mi); int i, j; int strips = tc->torus_polys / tc->torus_step; int points = 0; glFrontFace (front_p ? GL_CW : GL_CCW); for (i = 0; i < strips; i++) { int ii = i * tc->torus_step; /* Leave off the polygons on the underside. This reduces polygon count by about 10% with the default settings. */ if (strips > 4 && i >= strips/2 && i < strips-1) continue; glBegin (wire ? GL_LINE_STRIP : GL_QUAD_STRIP); for (j = 0; j < tc->torus_step; j++) { XYZ sp = tc->torus_points[ii+j]; XYZ sn = tc->torus_normals[ii+j]; glNormal3f(sn.x, sn.y, sn.z); glVertex3f(sp.x, sp.y, sp.z); points++; } glEnd(); } t->mi->polygon_count += points/2; } static void draw_tentacle_1 (tentacle *t, Bool front_p, Bool outline_p) { tentacles_configuration *tc = &tcs[MI_SCREEN(t->mi)]; int i; Bool wire = MI_IS_WIREFRAME (t->mi); XYZ ctr = { 0,0,0 }; /* current position of base of segment */ double cth = 0; /* overall orientation of current segment */ double cphi = 0; double cth_cos = 1, cth_sin = 0; double cphi_cos = 1, cphi_sin = 0; GLfloat light[3]; /* vector to the light */ GLfloat t0 = 0.0; /* texture coordinate */ XYZ *ring, *oring; /* points around the edge (this, and previous) */ XYZ *norm, *onorm; /* their normals */ XYZ *ucirc; /* unit circle, to save some trig */ /* Which portion of the radius the indented/colored stripe takes up */ int indented_points = arg_slices * 0.2; /* We do rotation this way to minimize the number of calls to sin/cos. We have to hack the transformations manually instead of using glRotate/glTranslate because those calls are not allowed *inside* of a glBegin/glEnd block... */ # define ROT(P) do { \ XYZ _p = P; \ _p.y = ((P.y * cth_sin - P.x * cth_cos)); \ _p.x = ((P.y * cth_cos + P.x * cth_sin) * cphi_sin - (P.z * cphi_cos)); \ _p.z = ((P.y * cth_cos + P.x * cth_sin) * cphi_cos + (P.z * cphi_sin)); \ P = _p; \ } while(0) ring = (XYZ *) malloc (arg_slices * sizeof(*ring)); norm = (XYZ *) malloc (arg_slices * sizeof(*norm)); oring = (XYZ *) malloc (arg_slices * sizeof(*oring)); onorm = (XYZ *) malloc (arg_slices * sizeof(*onorm)); ucirc = (XYZ *) malloc (arg_slices * sizeof(*ucirc)); light[0] = light_pos[0]; light[1] = light_pos[1]; light[2] = light_pos[2]; normalize (&light[0], &light[1], &light[2]); for (i = 0; i < arg_slices; i++) { double a = M_PI * 2 * i / arg_slices; ucirc[i].x = cos(a); ucirc[i].y = sin(a); ucirc[i].z = 0; } # ifdef HAVE_POLYGONMODE if (cel_p) glPolygonMode (GL_FRONT_AND_BACK, (front_p ? GL_FILL : GL_LINE)); # endif glPushMatrix(); glTranslatef (t->x, t->y, t->z); if (debug_p) { glPushAttrib (GL_ENABLE_BIT); glDisable (GL_LIGHTING); glDisable (GL_TEXTURE_1D); glDisable (GL_TEXTURE_2D); glColor3f (1, 1, 1); glLineWidth (1); glBegin(GL_LINE_LOOP); for (i = 0; i < arg_slices; i++) glVertex3f (arg_thickness / 2 * cos (M_PI * 2 * i / arg_slices), arg_thickness / 2 * sin (M_PI * 2 * i / arg_slices), 0); glEnd(); glPopAttrib(); } if (!front_p || outline_p) glColor4fv (tc->outline_color); else if (wire) glColor4fv (t->tentacle_color); else { static const GLfloat bspec[4] = {1.0, 1.0, 1.0, 1.0}; static const GLfloat bshiny = 128.0; glMaterialfv (GL_FRONT, GL_SPECULAR, bspec); glMateriali (GL_FRONT, GL_SHININESS, bshiny); } for (i = 0; i < t->nsegments; i++) { int j; GLfloat t1 = t0 + i / (t->nsegments * M_PI * 2); for (j = 0; j < arg_slices; j++) { /* Construct a vertical disc at the origin, to use as the base of this segment. */ double r = t->segments[i].thickness / 2; if (j <= indented_points/2 || j >= arg_slices-indented_points/2) r *= 0.75; /* indent the stripe */ if (outline_p) r *= 1.1; ring[j].x = r * ucirc[j].x; ring[j].y = 0; ring[j].z = r * ucirc[j].y; /* Then rotate the points by the angle of the current segment. */ ROT(ring[j]); /* Then move the ring to the base of this segment. */ ring[j].x += ctr.x; ring[j].y += ctr.y; ring[j].z += ctr.z; } /* Compute the normals of the faces on this segment. We do this first so that the normals of the vertexes can be the average of the normals of the faces. #### Uh, except I didn't actually implement that... but it would be a good idea. */ if (i > 0) for (j = 0; j <= arg_slices; j++) { int j0 = j % arg_slices; int j1 = (j+1) % arg_slices; norm[j0] = calc_normal (oring[j0], ring[j0], ring[j1]); } /* Draw! */ if (i > 0) { int j; glLineWidth (tc->line_thickness); glFrontFace (front_p ? GL_CCW : GL_CW); glBegin (wire ? GL_LINES : smooth_p ? GL_QUAD_STRIP : GL_QUADS); for (j = 0; j <= arg_slices; j++) { int j0 = j % arg_slices; int j1 = (j+1) % arg_slices; GLfloat ts = j / (double) arg_slices; if (!front_p || outline_p) glColor4fv (tc->outline_color); else if (j <= indented_points/2 || j >= arg_slices-indented_points/2) { glColor4fv (t->stripe_color); glMaterialfv (GL_FRONT, GL_AMBIENT_AND_DIFFUSE, t->stripe_color); } else { glColor4fv (t->tentacle_color); glMaterialfv (GL_FRONT, GL_AMBIENT_AND_DIFFUSE, t->tentacle_color); } /* For cel shading, the 1d texture coordinate (s) is the dot product of the lighting vector and the vertex normal. */ if (cel_p) { t0 = dot (light[0], light[1], light[2], onorm[j0].x, onorm[j0].y, onorm[j0].z); t1 = dot (light[0], light[1], light[2], norm[j0].x, norm[j0].y, norm[j0].z); if (t0 < 0) t0 = 0; if (t1 < 0) t1 = 0; } glTexCoord2f (t0, ts); glNormal3f (onorm[j0].x, onorm[j0].y, onorm[j0].z); glVertex3f (oring[j0].x, oring[j0].y, oring[j0].z); glTexCoord2f (t1, ts); glNormal3f ( norm[j0].x, norm[j0].y, norm[j0].z); glVertex3f ( ring[j0].x, ring[j0].y, ring[j0].z); if (!smooth_p) { ts = j1 / (double) arg_slices; glTexCoord2f (t1, ts); glVertex3f ( ring[j1].x, ring[j1].y, ring[j1].z); glTexCoord2f (t0, ts); glVertex3f (oring[j1].x, oring[j1].y, oring[j1].z); } t->mi->polygon_count++; } glEnd (); if (wire) { glBegin (GL_LINE_LOOP); for (j = 0; j < arg_slices; j++) glVertex3f (ring[j].x, ring[j].y, ring[j].z); glEnd(); } /* Now draw the suckers! */ { double seg_length = arg_length / t->nsegments; double sucker_size = arg_thickness / 5; double sucker_spacing = sucker_size * 1.3; int nsuckers = seg_length / sucker_spacing; double oth = cth - t->segments[i-1].th; double ophi = cphi - t->segments[i-1].phi; int k; if (!wire) glLineWidth (MAX (2, tc->line_thickness / 2.0)); glDisable (GL_TEXTURE_2D); /* Sometimes we have N suckers on one segment; sometimes we have one sucker every N segments. */ if (nsuckers == 0) { int segs_per_sucker = (int) ((sucker_spacing / seg_length) + 0.5); nsuckers = (i % segs_per_sucker) ? 0 : 1; } if (outline_p) { glColor4fv (tc->outline_color); glMaterialfv (GL_FRONT, GL_AMBIENT_AND_DIFFUSE, tc->outline_color); } else if (front_p) { glColor4fv (t->sucker_color); glMaterialfv (GL_FRONT, GL_AMBIENT_AND_DIFFUSE, t->sucker_color); } for (k = 0; k < nsuckers; k++) { double scale; XYZ p0 = ring[0]; XYZ p1 = oring[0]; XYZ p; p.x = p0.x + (p1.x - p0.x) * (k + 0.5) / nsuckers; p.y = p0.y + (p1.y - p0.y) * (k + 0.5) / nsuckers; p.z = p0.z + (p1.z - p0.z) * (k + 0.5) / nsuckers; glPushMatrix(); glTranslatef (p.x, p.y, p.z); glRotatef (ophi * 180 / M_PI, 0, 1, 0); glRotatef (-oth * 180 / M_PI, 1, 0, 0); glRotatef (90, 1, 0, 0); { /* Not quite right: this is the slope of the outer edge if the next segment was not tilted at all... If there is any tilt, then the angle of this wall and the opposite wall are very different. */ double slope = ((t->segments[i-1].thickness - t->segments[i].thickness) / t->segments[i].length); glRotatef (-45 * slope, 1, 0, 0); } scale = t->segments[i].thickness / arg_thickness; scale *= 0.7 * sucker_size; glScalef (scale, scale, scale * 4); glTranslatef (0, 0, -0.1); /* embed */ if (outline_p) { scale = 1.1; glScalef (scale, scale, scale); } glTranslatef (1, 0, 0); /* left */ draw_sucker (t, front_p); glTranslatef (-2, 0, 0); /* right */ draw_sucker (t, front_p); glPopMatrix(); } if (texture_p) glEnable (GL_TEXTURE_2D); } } /* Now draw the end caps. */ glLineWidth (tc->line_thickness); if (!outline_p && (i == 0 || i == t->nsegments-1)) { int j; GLfloat ctrz = ctr.z + ((i == 0 ? -1 : 1) * t->segments[i].thickness / 4); if (front_p) { glColor4fv (t->tentacle_color); glMaterialfv (GL_FRONT, GL_AMBIENT_AND_DIFFUSE, t->tentacle_color); } glFrontFace ((front_p ? i == 0 : i != 0) ? GL_CCW : GL_CW); glBegin (wire ? GL_LINES : GL_TRIANGLE_FAN); glNormal3f (0, 0, (i == 0 ? -1 : 1)); glTexCoord2f (t0 - 0.25, 0.5); glVertex3f (ctr.x, ctr.y, ctrz); for (j = 0; j <= arg_slices; j++) { int jj = j % arg_slices; GLfloat ts = j / (double) arg_slices; glTexCoord2f (t0, ts); glNormal3f (norm[jj].x, norm[jj].y, norm[jj].z); glVertex3f (ring[jj].x, ring[jj].y, ring[jj].z); if (wire) glVertex3f (ctr.x, ctr.y, ctrz); t->mi->polygon_count++; } glEnd(); } /* Now move to the end of this segment in preparation for the next. */ if (i != t->nsegments-1) { XYZ p; p.x = 0; p.y = t->segments[i].length; p.z = 0; ROT (p); ctr.x += p.x; ctr.y += p.y; ctr.z += p.z; /* Accumulate the current angle and rotation, to keep track of the rotation of the upcoming segment. */ cth += t->segments[i].th; cphi += t->segments[i].phi; cth_sin = sin (cth); cth_cos = cos (cth); cphi_sin = sin (cphi); cphi_cos = cos (cphi); memcpy (oring, ring, arg_slices * sizeof(*ring)); memcpy (onorm, norm, arg_slices * sizeof(*norm)); } t0 = t1; } glPopMatrix(); free (ring); free (norm); free (oring); free (onorm); free (ucirc); } static void draw_tentacle (tentacle *t, Bool front_p) { # ifndef HAVE_POLYGONMODE Bool wire = MI_IS_WIREFRAME (t->mi); if (!wire && cel_p && front_p) { draw_tentacle_1 (t, front_p, True); glClear (GL_DEPTH_BUFFER_BIT); } # endif /* HAVE_POLYGONMODE */ draw_tentacle_1 (t, front_p, False); } static void move_tentacle (tentacle *t) { /* tentacles_configuration *tc = &tcs[MI_SCREEN(t->mi)]; */ GLfloat len = 0; double pos = 0; int i, j; int skip = t->nsegments * (1 - (arg_wiggliness + 0.5)); int tick = 0; int last = 0; for (i = 0; i < t->nsegments; i++) { if (++tick >= skip || i == t->nsegments-1) { /* randomize the motion of this segment... */ double x, y, z; double phi_range = M_PI * 0.8 * arg_flexibility; double th_range = M_PI * 0.9 * arg_flexibility; get_position (t->segments[i].rot, &x, &y, &z, True); t->segments[i].phi = phi_range * (0.5 - y); t->segments[i].th = th_range * (0.5 - z); t->segments[i].length = ((0.8 + ((0.5 - x) * 0.4)) * (arg_length / t->nsegments)); /* ...and make the previous N segments be interpolated between this one and the previous randomized one. */ for (j = last+1; j <= i; j++) { t->segments[j].phi = (t->segments[i].phi / (i - last)); t->segments[j].th = (t->segments[i].th / (i - last)); t->segments[j].length = (t->segments[i].length); } tick = 0; last = i; } len += t->segments[i].length; } /* thickness of segment is relative to current position on tentacle (not just the index of the segment). */ for (i = 0; i < t->nsegments; i++) { if (i > 0) { double tt = (t->segments[0].thickness * (len - pos) / len); if (tt < 0.001) tt = 0.001; t->segments[i].thickness = tt; } pos += t->segments[i].length; } } ENTRYPOINT Bool tentacles_handle_event (ModeInfo *mi, XEvent *event) { tentacles_configuration *tc = &tcs[MI_SCREEN(mi)]; if (gltrackball_event_handler (event, tc->trackball, MI_WIDTH (mi), MI_HEIGHT (mi), &tc->button_down_p)) return True; else if (event->xany.type == KeyPress) { KeySym keysym; char c = 0; XLookupString (&event->xkey, &c, 1, &keysym, 0); if (c == ' ') { gltrackball_reset (tc->trackball); return True; } } return False; } static void parse_color (ModeInfo *mi, const char *name, const char *s, GLfloat *a) { XColor c; a[3] = 1.0; /* alpha */ if (! XParseColor (MI_DISPLAY(mi), MI_COLORMAP(mi), s, &c)) { fprintf (stderr, "%s: can't parse %s color %s", progname, name, s); exit (1); } a[0] = c.red / 65536.0; a[1] = c.green / 65536.0; a[2] = c.blue / 65536.0; } ENTRYPOINT void init_tentacles (ModeInfo *mi) { tentacles_configuration *tc; int wire = MI_IS_WIREFRAME(mi); int i; if (!tcs) { tcs = (tentacles_configuration *) calloc (MI_NUM_SCREENS(mi), sizeof (tentacles_configuration)); if (!tcs) { fprintf(stderr, "%s: out of memory\n", progname); exit(1); } } tc = &tcs[MI_SCREEN(mi)]; tc->glx_context = init_GL(mi); reshape_tentacles (mi, MI_WIDTH(mi), MI_HEIGHT(mi)); if (!wire) { GLfloat amb[4] = {0.0, 0.0, 0.0, 1.0}; GLfloat dif[4] = {1.0, 1.0, 1.0, 1.0}; GLfloat spc[4] = {0.0, 1.0, 1.0, 1.0}; glLightfv(GL_LIGHT0, GL_POSITION, light_pos); glLightfv(GL_LIGHT0, GL_AMBIENT, amb); glLightfv(GL_LIGHT0, GL_DIFFUSE, dif); glLightfv(GL_LIGHT0, GL_SPECULAR, spc); } if (!wire && !cel_p) { glEnable (GL_LIGHTING); glEnable (GL_LIGHT0); } tc->trackball = gltrackball_init (False); tc->left_p = !(random() % 5); if (arg_segments < 2) arg_segments = 2; if (arg_slices < 3) arg_slices = 3; if (arg_thickness < 0.1) arg_thickness = 0.1; if (arg_wiggliness < 0) arg_wiggliness = 0; if (arg_wiggliness > 1) arg_wiggliness = 1; if (arg_flexibility < 0) arg_flexibility = 0; if (arg_flexibility > 1) arg_flexibility = 1; parse_color (mi, "tentacleColor", arg_color, tc->tentacle_color); parse_color (mi, "stripeColor", arg_stripe, tc->stripe_color); parse_color (mi, "suckerColor", arg_sucker, tc->sucker_color); /* Black outlines for light colors, white outlines for dark colors. */ if (tc->tentacle_color[0] + tc->tentacle_color[1] + tc->tentacle_color[2] < 0.4) tc->outline_color[0] = 1; tc->outline_color[1] = tc->outline_color[0]; tc->outline_color[2] = tc->outline_color[0]; tc->outline_color[3] = 1; for (i = 0; i < MI_COUNT(mi); i++) move_tentacle (make_tentacle (mi, i, MI_COUNT(mi))); if (wire) texture_p = cel_p = False; if (cel_p) texture_p = False; if (texture_p || cel_p) { glGenTextures(1, &tc->texid); # ifdef HAVE_GLBINDTEXTURE glBindTexture ((cel_p ? GL_TEXTURE_1D : GL_TEXTURE_2D), tc->texid); # endif tc->texture = xpm_to_ximage (MI_DISPLAY(mi), MI_VISUAL(mi), MI_COLORMAP(mi), (cel_p ? grey_texture : scales)); if (!tc->texture) texture_p = cel_p = False; } if (texture_p) { glPixelStorei (GL_UNPACK_ALIGNMENT, 1); clear_gl_error(); glTexImage2D (GL_TEXTURE_2D, 0, GL_RGBA, tc->texture->width, tc->texture->height, 0, GL_RGBA, /* GL_UNSIGNED_BYTE, */ GL_UNSIGNED_INT_8_8_8_8_REV, tc->texture->data); check_gl_error("texture"); glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT); glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE); glEnable(GL_TEXTURE_2D); } else if (cel_p) { clear_gl_error(); glTexImage1D (GL_TEXTURE_1D, 0, GL_RGBA, tc->texture->width, 0, GL_RGBA, /* GL_UNSIGNED_BYTE, */ GL_UNSIGNED_INT_8_8_8_8_REV, tc->texture->data); check_gl_error("texture"); glTexParameterf(GL_TEXTURE_1D, GL_TEXTURE_WRAP_S, GL_REPEAT); glTexParameterf(GL_TEXTURE_1D, GL_TEXTURE_WRAP_T, GL_REPEAT); glTexParameteri(GL_TEXTURE_1D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); glTexParameteri(GL_TEXTURE_1D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE); glEnable(GL_TEXTURE_1D); glHint (GL_LINE_SMOOTH_HINT, GL_NICEST); glEnable (GL_LINE_SMOOTH); glBlendFunc (GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); glEnable (GL_BLEND); /* Dark gray instead of black, so the outlines show up */ glClearColor (0.13, 0.13, 0.13, 1.0); } compute_unit_torus (mi, 0.5, MAX(5, arg_slices/6), MAX(9, arg_slices/3)); } ENTRYPOINT void draw_tentacles (ModeInfo *mi) { tentacles_configuration *tc = &tcs[MI_SCREEN(mi)]; Display *dpy = MI_DISPLAY(mi); Window window = MI_WINDOW(mi); int i; if (!tc->glx_context) return; glXMakeCurrent(MI_DISPLAY(mi), MI_WINDOW(mi), *(tc->glx_context)); glShadeModel(GL_SMOOTH); glEnable(GL_DEPTH_TEST); glEnable(GL_NORMALIZE); glEnable(GL_CULL_FACE); glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glPushMatrix (); glRotatef(current_device_rotation(), 0, 0, 1); # if 1 glScalef (3, 3, 3); # else glPushAttrib (GL_ENABLE_BIT); glPushMatrix(); { GLfloat s = 8.7/1600; glScalef(s,s,s); } glTranslatef(-800,-514,0); glDisable(GL_LIGHTING); glDisable(GL_TEXTURE_1D); glDisable(GL_TEXTURE_2D); glColor3f (1, 1, 1); glBegin(GL_LINE_LOOP); glVertex3f(0,0,0); glVertex3f(0,1028,0); glVertex3f(1600,1028,0); glVertex3f(1600,0,0); glEnd(); glPopMatrix(); glPopAttrib(); # endif gltrackball_rotate (tc->trackball); mi->polygon_count = 0; if (debug_p) { glPushAttrib (GL_ENABLE_BIT); glDisable (GL_LIGHTING); glDisable (GL_TEXTURE_1D); glDisable (GL_TEXTURE_2D); glColor3f (1, 1, 1); glLineWidth (1); glBegin(GL_LINES); glVertex3f(-0.5, 0, 0); glVertex3f(0.5, 0, 0); glVertex3f(0, -0.5, 0); glVertex3f(0, 0.5, 0); glEnd(); glPopAttrib(); } else { GLfloat rx = 45; GLfloat ry = -45; GLfloat rz = 70; if (tc->left_p) ry = -ry, rz = -rz; glRotatef (ry, 0, 1, 0); glRotatef (rx, 1, 0, 0); glRotatef (rz, 0, 0, 1); if (intersect_p) glTranslatef (0, -2.0, -4.5); else glTranslatef (0, -2.5, -5.0); } if (!tc->button_down_p) for (i = 0; i < tc->ntentacles; i++) move_tentacle (tc->tentacles[i]); #if 1 for (i = 0; i < tc->ntentacles; i++) { if (! intersect_p) glClear(GL_DEPTH_BUFFER_BIT); draw_tentacle (tc->tentacles[i], True); if (cel_p) draw_tentacle (tc->tentacles[i], False); } #else glScalef (3, 3, 3); glScalef (1, 1, 4); glColor3f(1,1,1); glPolygonMode (GL_FRONT_AND_BACK, GL_FILL); draw_sucker (tc->tentacles[0], True); if (cel_p) { glPolygonMode (GL_FRONT_AND_BACK, GL_LINE); glLineWidth (tc->line_thickness); glColor4fv (tc->outline_color); draw_sucker (tc->tentacles[0], False); } #endif glPopMatrix (); if (mi->fps_p) do_fps (mi); glFinish(); glXSwapBuffers(dpy, window); } XSCREENSAVER_MODULE_2 ("SkyTentacles", skytentacles, tentacles) #endif /* USE_GL */ xscreensaver-5.36/hacks/glx/teapot.c000664 000767 000024 00000022121 12710074272 017463 0ustar00jwzstaff000000 000000 /* Copyright (c) Mark J. Kilgard, 1994. */ /** (c) Copyright 1993, Silicon Graphics, Inc. ALL RIGHTS RESERVED Permission to use, copy, modify, and distribute this software for any purpose and without fee is hereby granted, provided that the above copyright notice appear in all copies and that both the copyright notice and this permission notice appear in supporting documentation, and that the name of Silicon Graphics, Inc. not be used in advertising or publicity pertaining to distribution of the software without specific, written prior permission. THE MATERIAL EMBODIED ON THIS SOFTWARE IS PROVIDED TO YOU "AS-IS" AND WITHOUT WARRANTY OF ANY KIND, EXPRESS, IMPLIED OR OTHERWISE, INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL SILICON GRAPHICS, INC. BE LIABLE TO YOU OR ANYONE ELSE FOR ANY DIRECT, SPECIAL, INCIDENTAL, INDIRECT OR CONSEQUENTIAL DAMAGES OF ANY KIND, OR ANY DAMAGES WHATSOEVER, INCLUDING WITHOUT LIMITATION, LOSS OF PROFIT, LOSS OF USE, SAVINGS OR REVENUE, OR THE CLAIMS OF THIRD PARTIES, WHETHER OR NOT SILICON GRAPHICS, INC. HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH LOSS, HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, ARISING OUT OF OR IN CONNECTION WITH THE POSSESSION, USE OR PERFORMANCE OF THIS SOFTWARE. US Government Users Restricted Rights Use, duplication, or disclosure by the Government is subject to restrictions set forth in FAR 52.227.19(c)(2) or subparagraph (c)(1)(ii) of the Rights in Technical Data and Computer Software clause at DFARS 252.227-7013 and/or in similar or successor clauses in the FAR or the DOD or NASA FAR Supplement. Unpublished-- rights reserved under the copyright laws of the United States. Contractor/manufacturer is Silicon Graphics, Inc., 2011 N. Shoreline Blvd., Mountain View, CA 94039-7311. OpenGL(TM) is a trademark of Silicon Graphics, Inc. */ #ifdef HAVE_CONFIG_H # include "config.h" #endif #include "teapot.h" #ifndef HAVE_JWXYZ # include #endif #ifdef HAVE_ANDROID # include #endif #ifdef HAVE_JWZGLES # include "jwzgles.h" #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. */ static long patchdata[][16] = { /* rim */ {102, 103, 104, 105, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15}, /* body */ {12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27}, {24, 25, 26, 27, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40}, /* lid */ {96, 96, 96, 96, 97, 98, 99, 100, 101, 101, 101, 101, 0, 1, 2, 3,}, {0, 1, 2, 3, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117}, /* bottom */ {118, 118, 118, 118, 124, 122, 119, 121, 123, 126, 125, 120, 40, 39, 38, 37}, /* handle */ {41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56}, {53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 28, 65, 66, 67}, /* spout */ {68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83}, {80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95} }; /* *INDENT-OFF* */ static float cpdata[][3] = { {0.2, 0, 2.7}, {0.2, -0.112, 2.7}, {0.112, -0.2, 2.7}, {0, -0.2, 2.7}, {1.3375, 0, 2.53125}, {1.3375, -0.749, 2.53125}, {0.749, -1.3375, 2.53125}, {0, -1.3375, 2.53125}, {1.4375, 0, 2.53125}, {1.4375, -0.805, 2.53125}, {0.805, -1.4375, 2.53125}, {0, -1.4375, 2.53125}, {1.5, 0, 2.4}, {1.5, -0.84, 2.4}, {0.84, -1.5, 2.4}, {0, -1.5, 2.4}, {1.75, 0, 1.875}, {1.75, -0.98, 1.875}, {0.98, -1.75, 1.875}, {0, -1.75, 1.875}, {2, 0, 1.35}, {2, -1.12, 1.35}, {1.12, -2, 1.35}, {0, -2, 1.35}, {2, 0, 0.9}, {2, -1.12, 0.9}, {1.12, -2, 0.9}, {0, -2, 0.9}, {-2, 0, 0.9}, {2, 0, 0.45}, {2, -1.12, 0.45}, {1.12, -2, 0.45}, {0, -2, 0.45}, {1.5, 0, 0.225}, {1.5, -0.84, 0.225}, {0.84, -1.5, 0.225}, {0, -1.5, 0.225}, {1.5, 0, 0.15}, {1.5, -0.84, 0.15}, {0.84, -1.5, 0.15}, {0, -1.5, 0.15}, {-1.6, 0, 2.025}, {-1.6, -0.3, 2.025}, {-1.5, -0.3, 2.25}, {-1.5, 0, 2.25}, {-2.3, 0, 2.025}, {-2.3, -0.3, 2.025}, {-2.5, -0.3, 2.25}, {-2.5, 0, 2.25}, {-2.7, 0, 2.025}, {-2.7, -0.3, 2.025}, {-3, -0.3, 2.25}, {-3, 0, 2.25}, {-2.7, 0, 1.8}, {-2.7, -0.3, 1.8}, {-3, -0.3, 1.8}, {-3, 0, 1.8}, {-2.7, 0, 1.575}, {-2.7, -0.3, 1.575}, {-3, -0.3, 1.35}, {-3, 0, 1.35}, {-2.5, 0, 1.125}, {-2.5, -0.3, 1.125}, {-2.65, -0.3, 0.9375}, {-2.65, 0, 0.9375}, {-2, -0.3, 0.9}, {-1.9, -0.3, 0.6}, {-1.9, 0, 0.6}, {1.7, 0, 1.425}, {1.7, -0.66, 1.425}, {1.7, -0.66, 0.6}, {1.7, 0, 0.6}, {2.6, 0, 1.425}, {2.6, -0.66, 1.425}, {3.1, -0.66, 0.825}, {3.1, 0, 0.825}, {2.3, 0, 2.1}, {2.3, -0.25, 2.1}, {2.4, -0.25, 2.025}, {2.4, 0, 2.025}, {2.7, 0, 2.4}, {2.7, -0.25, 2.4}, {3.3, -0.25, 2.4}, {3.3, 0, 2.4}, {2.8, 0, 2.475}, {2.8, -0.25, 2.475}, {3.525, -0.25, 2.49375}, {3.525, 0, 2.49375}, {2.9, 0, 2.475}, {2.9, -0.15, 2.475}, {3.45, -0.15, 2.5125}, {3.45, 0, 2.5125}, {2.8, 0, 2.4}, {2.8, -0.15, 2.4}, {3.2, -0.15, 2.4}, {3.2, 0, 2.4}, {0, 0, 3.15}, {0.8, 0, 3.15}, {0.8, -0.45, 3.15}, {0.45, -0.8, 3.15}, {0, -0.8, 3.15}, {0, 0, 2.85}, {1.4, 0, 2.4}, {1.4, -0.784, 2.4}, {0.784, -1.4, 2.4}, {0, -1.4, 2.4}, {0.4, 0, 2.55}, {0.4, -0.224, 2.55}, {0.224, -0.4, 2.55}, {0, -0.4, 2.55}, {1.3, 0, 2.55}, {1.3, -0.728, 2.55}, {0.728, -1.3, 2.55}, {0, -1.3, 2.55}, {1.3, 0, 2.4}, {1.3, -0.728, 2.4}, {0.728, -1.3, 2.4}, {0, -1.3, 2.4}, {0, 0, 0}, {1.425, -0.798, 0}, {1.5, 0, 0.075}, {1.425, 0, 0}, {0.798, -1.425, 0}, {0, -1.5, 0.075}, {0, -1.425, 0}, {1.5, -0.84, 0.075}, {0.84, -1.5, 0.075} }; static float tex[2][2][2] = { { {0, 0}, {1, 0}}, { {0, 1}, {1, 1}} }; int unit_teapot (int grid, int wire_p) { GLenum type = wire_p ? GL_LINE : GL_FILL; float p[4][4][3], q[4][4][3], r[4][4][3], s[4][4][3]; long i, j, k, l; int polys = 0; glPushAttrib(GL_ENABLE_BIT | GL_EVAL_BIT); glEnable(GL_AUTO_NORMAL); glEnable(GL_NORMALIZE); glEnable(GL_MAP2_VERTEX_3); glEnable(GL_MAP2_TEXTURE_COORD_2); glFrontFace (GL_CW); glPushMatrix(); glRotatef(270.0, 1.0, 0.0, 0.0); glScalef(0.5, 0.5, 0.5); glTranslatef(0.0, 0.0, -1.5); for (i = 0; i < 10; i++) { for (j = 0; j < 4; j++) { for (k = 0; k < 4; k++) { for (l = 0; l < 3; l++) { p[j][k][l] = cpdata[patchdata[i][j * 4 + k]][l]; q[j][k][l] = cpdata[patchdata[i][j * 4 + (3 - k)]][l]; if (l == 1) q[j][k][l] *= -1.0; if (i < 6) { r[j][k][l] = cpdata[patchdata[i][j * 4 + (3 - k)]][l]; if (l == 0) r[j][k][l] *= -1.0; s[j][k][l] = cpdata[patchdata[i][j * 4 + k]][l]; if (l == 0) s[j][k][l] *= -1.0; if (l == 1) s[j][k][l] *= -1.0; } } } } glMap2f(GL_MAP2_TEXTURE_COORD_2, 0, 1, 2, 2, 0, 1, 4, 2, &tex[0][0][0]); glMap2f(GL_MAP2_VERTEX_3, 0, 1, 3, 4, 0, 1, 12, 4, &p[0][0][0]); glMapGrid2f(grid, 0.0, 1.0, grid, 0.0, 1.0); glEvalMesh2(type, 0, grid, 0, 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*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*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*2; } } glPopMatrix(); glPopAttrib(); return polys; } #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 */ xscreensaver-5.36/hacks/glx/sonar.c000664 000767 000024 00000102522 12701612217 017312 0ustar00jwzstaff000000 000000 /* sonar, Copyright (c) 1998-2015 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 * 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. */ /* Created in Apr 1998 by Stephen Martin * for the RedHat Screensaver Contest * Heavily hacked by jwz ever since. * Rewritten in OpenGL by jwz, Aug 2008. * * This is an implementation of a general purpose reporting tool in the * format of a Sonar display. It is designed such that a sensor is read * on every movement of a sweep arm and the results of that sensor are * displayed on the screen. The location of the display points (targets) on the * screen are determined by the current localtion of the sweep and a distance * value associated with the target. * * Currently the only two sensors that are implemented are the simulator * (the default) and the ping sensor. The simulator randomly creates a set * of bogies that move around on the scope while the ping sensor can be * used to display hosts on your network. * * The ping code is only compiled in if you define HAVE_ICMP or HAVE_ICMPHDR, * because, unfortunately, different systems have different ways of creating * these sorts of packets. * * In order to use the ping sensor on most systems, this program must be * installed as setuid root, so that it can create an ICMP RAW socket. Root * privileges are disavowed shortly after startup (just after connecting to * the X server and reading the resource database) so this is *believed* to * be a safe thing to do, but it is usually recommended that you have as few * setuid programs around as possible, on general principles. * * It is not necessary to make it setuid on MacOS systems, because on those * systems, unprivileged programs can ping by using ICMP DGRAM sockets * instead of ICMP RAW. * * 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 "-*-courier-bold-r-normal-*-*-480-*-*-*-*-iso8859-1" #define DEF_SPEED "1.0" #define DEF_SWEEP_SIZE "0.3" #define DEF_FONT_SIZE "12" #define DEF_TEAM_A_NAME "F18" #define DEF_TEAM_B_NAME "MIG" #define DEF_TEAM_A_COUNT "4" #define DEF_TEAM_B_COUNT "4" #define DEF_PING "default" #define DEF_PING_TIMEOUT "3000" #define DEF_RESOLVE "True" #define DEF_TIMES "True" #define DEF_WOBBLE "True" #define DEF_DEBUG "False" #include "thread_util.h" #define DEFAULTS "*delay: 30000 \n" \ "*font: " DEF_FONT "\n" \ "*showFPS: False \n" \ "*wireframe: False \n" \ "*texFontCacheSize: 300 \n" \ THREAD_DEFAULTS_XLOCK # define refresh_sonar 0 #undef countof #define countof(x) (sizeof((x))/sizeof((*x))) #ifdef HAVE_UNISTD_H # include /* for setuid() */ #endif #include "xlockmore.h" #include "sonar.h" #include "gltrackball.h" #include "rotator.h" #include "texfont.h" #include #ifdef USE_GL /* whole file */ /* #define TEST_ASYNC_NETDB 1 */ # if TEST_ASYNC_NETDB # include "async_netdb.h" # include # include # include # endif /* TEST_ASYNC_NETDB */ typedef struct { double x,y,z; } XYZ; typedef struct { GLXContext *glx_context; trackball_state *trackball; rotator *rot; Bool button_down_p; double start_time; GLfloat sweep_offset; GLuint screen_list, grid_list, sweep_list, table_list; int screen_polys, grid_polys, sweep_polys, table_polys; GLfloat sweep_th; GLfloat line_thickness; 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 */ # if TEST_ASYNC_NETDB async_name_from_addr_t query0; async_addr_from_name_t query1; # endif } sonar_configuration; static sonar_configuration *sps = NULL; static GLfloat speed; static GLfloat sweep_size; static GLfloat font_size; static Bool resolve_p; static Bool times_p; static Bool wobble_p; static Bool debug_p; static char *team_a_name; static char *team_b_name; static int team_a_count; static int team_b_count; static int ping_timeout; static char *ping_arg; static XrmOptionDescRec opts[] = { { "-speed", ".speed", XrmoptionSepArg, 0 }, { "-sweep-size", ".sweepSize", XrmoptionSepArg, 0 }, { "-font-size", ".fontSize", XrmoptionSepArg, 0 }, { "-team-a-name", ".teamAName", XrmoptionSepArg, 0 }, { "-team-b-name", ".teamBName", XrmoptionSepArg, 0 }, { "-team-a-count", ".teamACount", XrmoptionSepArg, 0 }, { "-team-b-count", ".teamBCount", XrmoptionSepArg, 0 }, { "-ping", ".ping", XrmoptionSepArg, 0 }, { "-ping-timeout", ".pingTimeout", XrmoptionSepArg, 0 }, { "-dns", ".resolve", XrmoptionNoArg, "True" }, { "+dns", ".resolve", XrmoptionNoArg, "False" }, { "-times", ".times", XrmoptionNoArg, "True" }, { "+times", ".times", XrmoptionNoArg, "False" }, { "-wobble", ".wobble", XrmoptionNoArg, "True" }, { "+wobble", ".wobble", XrmoptionNoArg, "False" }, THREAD_OPTIONS { "-debug", ".debug", XrmoptionNoArg, "True" }, }; static argtype vars[] = { {&speed, "speed", "Speed", DEF_SPEED, t_Float}, {&sweep_size, "sweepSize", "SweepSize", DEF_SWEEP_SIZE, t_Float}, {&font_size, "fontSize", "FontSize", DEF_FONT_SIZE, t_Float}, {&team_a_name, "teamAName", "TeamName", DEF_TEAM_A_NAME, t_String}, {&team_b_name, "teamBName", "TeamName", DEF_TEAM_B_NAME, t_String}, {&team_a_count, "teamACount", "TeamCount", DEF_TEAM_A_COUNT, t_Int}, {&team_b_count, "teamBCount", "TeamCount", DEF_TEAM_A_COUNT, t_Int}, {&ping_arg, "ping", "Ping", DEF_PING, t_String}, {&ping_timeout, "pingTimeout", "PingTimeout", DEF_PING_TIMEOUT, t_Int}, {&resolve_p, "resolve", "Resolve", DEF_RESOLVE, t_Bool}, {×_p, "times", "Times", DEF_TIMES, t_Bool}, {&wobble_p, "wobble", "Wobble", DEF_WOBBLE, t_Bool}, {&debug_p, "debug", "Debug", DEF_DEBUG, t_Bool}, }; ENTRYPOINT ModeSpecOpt sonar_opts = {countof(opts), opts, countof(vars), vars, NULL}; static int draw_screen (ModeInfo *mi, Bool mesh_p, Bool sweep_p) { sonar_configuration *sp = &sps[MI_SCREEN(mi)]; int wire = MI_IS_WIREFRAME(mi); int polys = 0; int i; int th_steps, r_steps, r_skip, th_skip, th_skip2, outer_r; GLfloat curvature = M_PI * 0.4; GLfloat r0, r1, z0, z1, zoff; XYZ *ring; static const GLfloat glass[4] = {0.0, 0.4, 0.0, 0.5}; static const GLfloat lines[4] = {0.0, 0.7, 0.0, 0.5}; static const GLfloat sweepc[4] = {0.2, 1.0, 0.2, 0.5}; static const GLfloat spec[4] = {1.0, 1.0, 1.0, 1.0}; static const GLfloat shiny = 20.0; if (wire && !(mesh_p || sweep_p)) return 0; glDisable (GL_TEXTURE_2D); glFrontFace (GL_CCW); th_steps = 36 * 4; /* must be a multiple of th_skip2 divisor */ r_steps = 40; r_skip = 1; th_skip = 1; th_skip2 = 1; outer_r = 0; glMaterialfv (GL_FRONT, GL_SPECULAR, spec); glMateriali (GL_FRONT, GL_SHININESS, shiny); glMaterialfv (GL_FRONT, GL_AMBIENT_AND_DIFFUSE, mesh_p ? lines : glass); if (wire) glColor3fv (lines); if (mesh_p) { th_skip = th_steps / 12; th_skip2 = th_steps / 36; r_skip = r_steps / 3; outer_r = r_steps * 0.93; if (! wire) glLineWidth (sp->line_thickness); } ring = (XYZ *) calloc (th_steps, sizeof(*ring)); for (i = 0; i < th_steps; i++) { double a = M_PI * 2 * i / th_steps; ring[i].x = cos(a); ring[i].y = sin(a); } /* place the bottom of the disc on the xy plane. */ zoff = cos (curvature/2 * (M_PI/2)) / 2; for (i = r_steps; i > 0; i--) { int j0, j1; r0 = i / (GLfloat) r_steps; r1 = (i+1) / (GLfloat) r_steps; if (r1 > 1) r1 = 1; /* avoid asin lossage */ z0 = cos (curvature/2 * asin (r0)) / 2 - zoff; z1 = cos (curvature/2 * asin (r1)) / 2 - zoff; glBegin(wire || mesh_p ? GL_LINES : GL_QUAD_STRIP); for (j0 = 0; j0 <= th_steps; j0++) { if (mesh_p && (i < outer_r ? (j0 % th_skip != 0) : (j0 % th_skip2 != 0))) continue; if (sweep_p) { GLfloat color[4]; GLfloat r = 1 - (j0 / (GLfloat) (th_steps * sweep_size)); #if 0 color[0] = glass[0] + (sweepc[0] - glass[0]) * r; color[1] = glass[1] + (sweepc[1] - glass[1]) * r; color[2] = glass[2] + (sweepc[2] - glass[2]) * r; color[3] = glass[3]; #else color[0] = sweepc[0]; color[1] = sweepc[1]; color[2] = sweepc[2]; color[3] = r; #endif glMaterialfv (GL_FRONT, GL_AMBIENT_AND_DIFFUSE, color); } j1 = j0 % th_steps; glNormal3f (r0 * ring[j1].x, r0 * ring[j1].y, z0); glVertex3f (r0 * ring[j1].x, r0 * ring[j1].y, z0); glNormal3f (r1 * ring[j1].x, r1 * ring[j1].y, z1); glVertex3f (r1 * ring[j1].x, r1 * ring[j1].y, z1); polys++; if (sweep_p && j0 >= th_steps * sweep_size) break; if (sweep_p && wire) break; } glEnd(); if (mesh_p && (i == outer_r || i == r_steps || (i % r_skip == 0 && i < r_steps - r_skip))) { glBegin(GL_LINE_LOOP); for (j0 = 0; j0 < th_steps; j0++) { glNormal3f (r0 * ring[j0].x, r0 * ring[j0].y, z0); glVertex3f (r0 * ring[j0].x, r0 * ring[j0].y, z0); polys++; } glEnd(); } } /* one more polygon for the middle */ if (!wire && !sweep_p) { glBegin(wire || mesh_p ? GL_LINE_LOOP : GL_POLYGON); glNormal3f (0, 0, 1); for (i = 0; i < th_steps; i++) { glNormal3f (r0 * ring[i].x, r0 * ring[i].y, z0); glVertex3f (r0 * ring[i].x, r0 * ring[i].y, z0); } polys++; glEnd(); } free (ring); return polys; } static int draw_text (ModeInfo *mi, const char *string, GLfloat r, GLfloat th, GLfloat ttl, GLfloat size) { sonar_configuration *sp = &sps[MI_SCREEN(mi)]; int wire = MI_IS_WIREFRAME(mi); int polys = 0; GLfloat font_scale = 0.001 * (size > 0 ? size : font_size) / 14.0; int lines = 0, max_w = 0, lh = 0; char *string2 = strdup (string); char *token = string2; char *line; if (size <= 0) /* if size not specified, draw in yellow with alpha */ { GLfloat color[4]; color[0] = 1; color[1] = 1; color[2] = 0; color[3] = (ttl / (M_PI * 2)) * 1.2; if (color[3] > 1) color[3] = 1; glMaterialfv (GL_FRONT, GL_AMBIENT_AND_DIFFUSE, color); if (wire) glColor3f (color[0]*color[3], color[1]*color[3], color[2]*color[3]); } while ((line = strtok (token, "\r\n"))) { XCharStruct e; int w, ascent, descent; texture_string_metrics (sp->texfont, line, &e, &ascent, &descent); w = e.width; lh = ascent + descent; if (w > max_w) max_w = w; lines++; token = 0; } glPushMatrix(); glTranslatef (r * cos (th), r * sin(th), 0); glScalef (font_scale, font_scale, font_scale); if (size <= 0) /* Draw the dot */ { GLfloat s = font_size * 1.7; glDisable (GL_TEXTURE_2D); glFrontFace (GL_CW); glBegin (wire ? GL_LINE_LOOP : GL_QUADS); glVertex3f (0, s, 0); glVertex3f (s, s, 0); glVertex3f (s, 0, 0); glVertex3f (0, 0, 0); glEnd(); glTranslatef (-max_w/2, -lh, 0); } else glTranslatef (-max_w/2, -lh/2, 0); /* draw each line, centered */ if (! wire) glEnable (GL_TEXTURE_2D); free (string2); string2 = strdup (string); token = string2; while ((line = strtok (token, "\r\n"))) { XCharStruct e; int w; texture_string_metrics (sp->texfont, line, &e, 0, 0); w = e.width; glPushMatrix(); glTranslatef ((max_w-w)/2, 0, polys * 4); /* 'polys' stops Z-fighting. */ if (wire) { glBegin (GL_LINE_LOOP); glVertex3f (0, 0, 0); glVertex3f (w, 0, 0); glVertex3f (w, lh, 0); glVertex3f (0, lh, 0); glEnd(); } else { glFrontFace (GL_CW); print_texture_string (sp->texfont, line); } glPopMatrix(); glTranslatef (0, -lh, 0); polys++; token = 0; } glPopMatrix(); free (string2); if (! wire) glEnable (GL_DEPTH_TEST); return polys; } /* There's a disc with a hole in it around the screen, to act as a mask preventing slightly off-screen bogies from showing up. This clips 'em. */ static int draw_table (ModeInfo *mi) { /*sonar_configuration *sp = &sps[MI_SCREEN(mi)];*/ int wire = MI_IS_WIREFRAME(mi); int polys = 0; int i; int th_steps = 36 * 4; /* same as in draw_screen */ static const GLfloat color[4] = {0.0, 0.0, 0.0, 1.0}; static const GLfloat spec[4] = {0.0, 0.0, 0.0, 1.0}; static const GLfloat shiny = 0.0; if (wire) return 0; glDisable (GL_TEXTURE_2D); glMaterialfv (GL_FRONT, GL_SPECULAR, spec); glMateriali (GL_FRONT, GL_SHININESS, shiny); glMaterialfv (GL_FRONT, GL_AMBIENT_AND_DIFFUSE, color); glFrontFace (GL_CCW); glBegin(wire ? GL_LINES : GL_QUAD_STRIP); glNormal3f (0, 0, 1); for (i = 0; i <= th_steps; i++) { double a = M_PI * 2 * i / th_steps; double x = cos(a); double y = sin(a); glVertex3f (x, y, 0); glVertex3f (x*10, y*10, 0); polys++; } glEnd(); return polys; } static int draw_angles (ModeInfo *mi) { int i; int polys = 0; static const GLfloat text[4] = {0.15, 0.15, 0.15, 1.0}; static const GLfloat spec[4] = {0.0, 0.0, 0.0, 1.0}; glMaterialfv (GL_FRONT, GL_SPECULAR, spec); glMaterialfv (GL_FRONT, GL_AMBIENT_AND_DIFFUSE, text); glTranslatef (0, 0, 0.01); for (i = 0; i < 360; i += 10) { char buf[10]; GLfloat a = M_PI/2 - (i / 180.0 * M_PI); sprintf (buf, "%d", i); polys += draw_text (mi, buf, 1.07, a, 0, 10.0); } return polys; } static int draw_bogies (ModeInfo *mi) { sonar_configuration *sp = &sps[MI_SCREEN(mi)]; int polys = 0; sonar_bogie *b; for (b = sp->displayed; b; b = b->next) { char *s = (char *) malloc (strlen (b->name) + (b->desc ? strlen(b->desc) : 0) + 3); strcpy (s, b->name); if (b->desc) { strcat (s, "\n"); strcat (s, b->desc); } polys += draw_text (mi, s, b->r, b->th, b->ttl, -1); free (s); /* Move *very slightly* forward so that the text is not all in the same plane: this prevents flickering with overlapping text as the textures fight for priority. */ glTranslatef(0, 0, 0.00002); } return polys; } /* called from sonar-sim.c and sonar-icmp.c */ sonar_bogie * 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); b2->desc = b->desc ? strdup (b->desc) : 0; b2->r = b->r; b2->th = b->th; b2->ttl = b->ttl; /* does not copy b->closure */ /* Take this opportunity to normalize 'th' to the range [0-2pi). */ while (b2->th < 0) b2->th += M_PI*2; while (b2->th >= M_PI*2) b2->th -= M_PI*2; return b2; } /* called from sonar-icmp.c */ void sonar_free_bogie (sonar_sensor_data *ssd, sonar_bogie *b) { if (b->closure) ssd->free_bogie_cb (ssd, b->closure); free (b->name); if (b->desc) free (b->desc); free (b); } /* removes it from the list and frees it */ static void delete_bogie (sonar_sensor_data *ssd, sonar_bogie *b, sonar_bogie **from_list) { sonar_bogie *ob, *prev; for (prev = 0, ob = *from_list; ob; prev = ob, ob = ob->next) if (ob == b) { if (prev) prev->next = b->next; else (*from_list) = b->next; sonar_free_bogie (ssd, b); break; } } /* copies the bogie and adds it to the list. if there's another bogie there with the same name, frees that one. */ static void copy_and_insert_bogie (sonar_sensor_data *ssd, sonar_bogie *b, sonar_bogie **to_list) { sonar_bogie *ob, *next; if (!b) abort(); for (ob = *to_list, next = ob ? ob->next : 0; ob; ob = next, next = ob ? ob->next : 0) { if (ob == b) abort(); /* this will end badly */ if (!strcmp (ob->name, b->name)) /* match! */ { delete_bogie (ssd, ob, to_list); break; } } b = sonar_copy_bogie (ssd, b); b->next = *to_list; *to_list = b; } static void update_sensor_data (sonar_configuration *sp) { sonar_bogie *new_list = sp->ssd->scan_cb (sp->ssd); sonar_bogie *b2; /* If a bogie exists in 'new_list' but not 'pending', add it. If a bogie exists in both, update it in 'pending'. */ for (b2 = new_list; b2; b2 = b2->next) { if (debug_p > 2) fprintf (stderr, "%s: updated: %s (%5.2f %5.2f %5.2f)\n", progname, b2->name, b2->r, b2->th, b2->ttl); copy_and_insert_bogie (sp->ssd, b2, &sp->pending); } if (debug_p > 2) fprintf (stderr, "\n"); } /* Returns whether the given angle lies between two other angles. When those angles cross 0, it assumes the wedge is the smaller one. That is: 5 lies between 10 and 350 degrees (a 20 degree wedge). */ static Bool point_in_wedge (GLfloat th, GLfloat low, GLfloat high) { if (low < high) return (th > low && th <= high); else return (th <= high || th > low); } /* Returns the current time in seconds as a double. */ static double double_time (void) { struct timeval now; # ifdef GETTIMEOFDAY_TWO_ARGS struct timezone tzp; gettimeofday(&now, &tzp); # else gettimeofday(&now); # endif return (now.tv_sec + ((double) now.tv_usec * 0.000001)); } static void sweep (sonar_configuration *sp) { sonar_bogie *b; /* Move the sweep forward (clockwise). */ GLfloat prev_sweep, this_sweep, tick; GLfloat cycle_secs = 30 / speed; /* default to one cycle every N seconds */ this_sweep = ((cycle_secs - fmod (double_time() - sp->start_time + sp->sweep_offset, cycle_secs)) / cycle_secs * M_PI * 2); prev_sweep = sp->sweep_th; tick = prev_sweep - this_sweep; while (tick < 0) tick += M_PI*2; sp->sweep_th = this_sweep; if (this_sweep < 0 || this_sweep >= M_PI*2) abort(); if (prev_sweep < 0) /* skip first time */ return; if (tick < 0 || tick >= M_PI*2) abort(); /* Go through the 'pending' sensor data, find those bogies who are just now being swept, and move them from 'pending' to 'displayed'. (Leave bogies that have not yet been swept alone: we'll get to them when the sweep moves forward.) */ b = sp->pending; while (b) { sonar_bogie *next = b->next; if (point_in_wedge (b->th, this_sweep, prev_sweep)) { if (debug_p > 1) { time_t t = time((time_t *) 0); fprintf (stderr, "%s: sweep hit: %02d:%02d: %s: (%5.2f %5.2f %5.2f;" " th=[%.2f < %.2f <= %.2f])\n", progname, (int) (t / 60) % 60, (int) t % 60, b->name, b->r, b->th, b->ttl, this_sweep, b->th, prev_sweep); } b->ttl = M_PI * 2.1; copy_and_insert_bogie (sp->ssd, b, &sp->displayed); delete_bogie (sp->ssd, b, &sp->pending); } b = next; } /* Update TTL on all currently-displayed bogies; delete the dead. Request sensor updates on the ones just now being swept. Any updates go into 'pending' and might not show up until the next time the sweep comes around. This is to prevent already-drawn bogies from jumping to a new position without having faded out first. */ b = sp->displayed; while (b) { sonar_bogie *next = b->next; b->ttl -= tick; if (b->ttl <= 0) { if (debug_p > 1) fprintf (stderr, "%s: TTL expired: %s (%5.2f %5.2f %5.2f)\n", progname, b->name, b->r, b->th, b->ttl); delete_bogie (sp->ssd, b, &sp->displayed); } b = next; } update_sensor_data (sp); } static void draw_startup_blurb (ModeInfo *mi) { sonar_configuration *sp = &sps[MI_SCREEN(mi)]; if (sp->error) { const char *msg = sp->error; static const GLfloat color[4] = {0, 1, 0, 1}; glMaterialfv (GL_FRONT, GL_AMBIENT_AND_DIFFUSE, color); glTranslatef (0, 0, 0.3); draw_text (mi, msg, 0, 0, 0, 30.0); /* only leave error message up for N seconds */ if (sp->start_time + 6 < double_time()) { free (sp->error); sp->error = 0; } } } /* Window management, etc */ ENTRYPOINT void reshape_sonar (ModeInfo *mi, int width, int height) { sonar_configuration *sp = &sps[MI_SCREEN(mi)]; GLfloat h = (GLfloat) height / (GLfloat) width; glViewport (0, 0, (GLint) width, (GLint) height); glMatrixMode(GL_PROJECTION); glLoadIdentity(); gluPerspective (30.0, 1/h, 1.0, 100.0); glMatrixMode(GL_MODELVIEW); glLoadIdentity(); gluLookAt( 0.0, 0.0, 30.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0); glClear(GL_COLOR_BUFFER_BIT); sp->line_thickness = (MI_IS_WIREFRAME (mi) ? 1 : MAX (1, height / 300.0)); } ENTRYPOINT Bool sonar_handle_event (ModeInfo *mi, XEvent *event) { sonar_configuration *sp = &sps[MI_SCREEN(mi)]; if (gltrackball_event_handler (event, sp->trackball, MI_WIDTH (mi), MI_HEIGHT (mi), &sp->button_down_p)) return True; return False; } ENTRYPOINT void init_sonar (ModeInfo *mi) { sonar_configuration *sp; if (!sps) { sps = (sonar_configuration *) calloc (MI_NUM_SCREENS(mi), sizeof (sonar_configuration)); if (!sps) { fprintf(stderr, "%s: out of memory\n", progname); exit(1); } } sp = &sps[MI_SCREEN(mi)]; sp->glx_context = init_GL(mi); reshape_sonar (mi, MI_WIDTH(mi), MI_HEIGHT(mi)); clear_gl_error(); /* WTF? sometimes "invalid op" from glViewport! */ sp->trackball = gltrackball_init (False); sp->rot = make_rotator (0, 0, 0, 0, speed * 0.003, True); sp->texfont = load_texture_font (MI_DISPLAY(mi), "font"); check_gl_error ("loading font"); sp->table_list = glGenLists (1); glNewList (sp->table_list, GL_COMPILE); sp->table_polys = draw_table (mi); glEndList (); sp->screen_list = glGenLists (1); glNewList (sp->screen_list, GL_COMPILE); sp->screen_polys = draw_screen (mi, False, False); glEndList (); sp->grid_list = glGenLists (1); glNewList (sp->grid_list, GL_COMPILE); sp->grid_polys = draw_screen (mi, True, False); glEndList (); sp->sweep_list = glGenLists (1); glNewList (sp->sweep_list, GL_COMPILE); sp->sweep_polys = draw_screen (mi, False, True); glEndList (); sp->start_time = double_time (); sp->sweep_offset = random() % 60; sp->sweep_th = -1; sp->state = MSG; } # ifdef TEST_ASYNC_NETDB # include static void _print_sockaddr (void *addr, socklen_t addrlen, FILE *stream) { sa_family_t family = ((struct sockaddr *)addr)->sa_family; char buf[256]; switch (family) { case AF_INET: fputs (inet_ntoa(((struct sockaddr_in *)addr)->sin_addr), stream); break; case AF_INET6: inet_ntop(family, &((struct sockaddr_in6 *)addr)->sin6_addr, buf, sizeof (buf)); fputs (buf, stream); break; default: abort(); break; } } static void _print_error (int gai_error, int errno_error, FILE *stream) { fputs (gai_error == EAI_SYSTEM ? strerror(errno_error) : gai_strerror(gai_error), stream); } # if ASYNC_NETDB_USE_GAI static void _print_thread (pthread_t thread, FILE *stream) { # ifdef __linux__ fprintf (stream, "%#lx", thread); # elif defined __APPLE__ && defined __MACH__ fprintf (stream, "%p", thread); # else putc ('?', stream); # endif } # endif /* ASYNC_NETDB_USE_GAI */ # endif /* TEST_ASYNC_NETDB */ static void init_sensor (ModeInfo *mi) { sonar_configuration *sp = &sps[MI_SCREEN(mi)]; if (sp->ssd) abort(); if (!ping_arg || !*ping_arg || !strcmp(ping_arg, "default") || !!strcmp (ping_arg, "simulation")) /* sonar_init_ping() always disavows privs, even on failure. */ sp->ssd = sonar_init_ping (MI_DISPLAY (mi), &sp->error, &sp->desc, ping_arg, ping_timeout, resolve_p, times_p, debug_p); else setuid(getuid()); /* Disavow privs if not pinging. */ sp->start_time = double_time (); /* for error message timing */ if (!sp->ssd) 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(); # if TEST_ASYNC_NETDB /* For extremely mysterious reasons, setuid apparently causes pthread_join(3) to deadlock. A rough guess at the sequence of events: 1. Worker thread is created. 2. Worker thread exits. 3. setuid(getuid()) is called. 4. pthread_join is called slightly later. This may have something to do with glibc's use of SIGSETXID. */ putc ('\n', stderr); # if !ASYNC_NETDB_USE_GAI fputs ("Warning: getaddrinfo() was not available at compile time.\n", stderr); # endif { static const unsigned long addresses[] = { INADDR_LOOPBACK, 0x00010203, 0x08080808 }; struct sockaddr_in addr; addr.sin_family = AF_INET; addr.sin_port = 0; addr.sin_addr.s_addr = htonl (addresses[random () % 3]); sp->query0 = async_name_from_addr_start (MI_DISPLAY (mi), (void *)&addr, sizeof(addr)); assert (sp->query0); if (sp->query0) { fputs ("Looking up hostname from address: ", stderr); _print_sockaddr (&addr, sizeof(addr), stderr); # if ASYNC_NETDB_USE_GAI fputs (" @ ", stderr); _print_thread (sp->query0->io.thread, stderr); # endif putc ('\n', stderr); } if (!(random () & 3)) { fputs ("Aborted hostname lookup (early)\n", stderr); async_name_from_addr_cancel (sp->query0); sp->query0 = NULL; } } { static const char *const hosts[] = { "example.com", "invalid", "ip6-localhost" }; const char *host = hosts[random () % 3]; sp->query1 = async_addr_from_name_start (MI_DISPLAY(mi), host); assert (sp->query1); fprintf (stderr, "Looking up address from hostname: %s", host); # if ASYNC_NETDB_USE_GAI fputs (" @ ", stderr); _print_thread (sp->query1->io.thread, stderr); # endif putc ('\n', stderr); if (!(random () & 3)) { fputs ("Aborted address lookup (early)\n", stderr); async_addr_from_name_cancel (sp->query1); sp->query1 = NULL; } } fflush (stderr); # endif } ENTRYPOINT void draw_sonar (ModeInfo *mi) { sonar_configuration *sp = &sps[MI_SCREEN(mi)]; Display *dpy = MI_DISPLAY(mi); Window window = MI_WINDOW(mi); int wire = MI_IS_WIREFRAME(mi); if (!sp->glx_context) return; glXMakeCurrent(MI_DISPLAY(mi), MI_WINDOW(mi), *(sp->glx_context)); glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); if (!wire) { GLfloat pos[4] = {0.05, 0.07, 1.00, 0.0}; GLfloat amb[4] = {0.2, 0.2, 0.2, 1.0}; GLfloat dif[4] = {1.0, 1.0, 1.0, 1.0}; GLfloat spc[4] = {0.0, 1.0, 1.0, 1.0}; glEnable(GL_TEXTURE_2D); glEnable(GL_LIGHTING); glEnable(GL_LIGHT0); glEnable(GL_CULL_FACE); glEnable(GL_DEPTH_TEST); glEnable(GL_NORMALIZE); glEnable(GL_LINE_SMOOTH); glEnable(GL_BLEND); glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); glHint(GL_LINE_SMOOTH_HINT, GL_NICEST); glShadeModel(GL_SMOOTH); glLightfv(GL_LIGHT0, GL_POSITION, pos); glLightfv(GL_LIGHT0, GL_AMBIENT, amb); glLightfv(GL_LIGHT0, GL_DIFFUSE, dif); glLightfv(GL_LIGHT0, GL_SPECULAR, spc); } glPushMatrix (); glRotatef(current_device_rotation(), 0, 0, 1); { GLfloat s = 7; if (MI_WIDTH(mi) < MI_HEIGHT(mi)) s *= (MI_WIDTH(mi) / (float) MI_HEIGHT(mi)); glScalef (s,s,s); } gltrackball_rotate (sp->trackball); if (wobble_p) { double x, y, z; double max = 40; get_position (sp->rot, &x, &y, &z, !sp->button_down_p); glRotatef (max/2 - x*max, 1, 0, 0); glRotatef (max/2 - z*max, 0, 1, 0); } mi->polygon_count = 0; glPushMatrix(); /* table */ glCallList (sp->table_list); mi->polygon_count += sp->table_polys; glPopMatrix(); glPushMatrix(); /* text */ glTranslatef (0, 0, -0.01); mi->polygon_count += draw_bogies (mi); glPopMatrix(); glCallList (sp->screen_list); /* glass */ mi->polygon_count += sp->screen_polys; glTranslatef (0, 0, 0.004); /* sweep */ glPushMatrix(); glRotatef ((sp->sweep_th * 180 / M_PI), 0, 0, 1); if (sp->sweep_th >= 0) glCallList (sp->sweep_list); mi->polygon_count += sp->sweep_polys; glPopMatrix(); glTranslatef (0, 0, 0.004); /* grid */ glCallList (sp->grid_list); mi->polygon_count += sp->screen_polys; glPushMatrix(); mi->polygon_count += draw_angles (mi); /* angles */ glPopMatrix(); 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 (); if (mi->fps_p) do_fps (mi); glFinish(); glXSwapBuffers(dpy, window); # if TEST_ASYNC_NETDB if(sp->query0 && async_name_from_addr_is_done (sp->query0)) { if (!(random () & 3)) { fputs ("Aborted hostname lookup (late)\n", stderr); async_name_from_addr_cancel (sp->query0); } else { char *hostname = NULL; int errno_error; int gai_error = async_name_from_addr_finish (sp->query0, &hostname, &errno_error); if(gai_error) { fputs ("Couldn't get hostname: ", stderr); _print_error (gai_error, errno_error, stderr); putc ('\n', stderr); } else { fprintf (stderr, "Got a hostname: %s\n", hostname); free (hostname); } } sp->query0 = NULL; } if(sp->query1 && async_addr_from_name_is_done (sp->query1)) { if (!(random () & 3)) { fputs ("Aborted address lookup (late)\n", stderr); async_addr_from_name_cancel (sp->query1); } else { async_netdb_sockaddr_storage_t addr; socklen_t addrlen; int errno_error; int gai_error = async_addr_from_name_finish (sp->query1, &addr, &addrlen, &errno_error); if (gai_error) { fputs ("Couldn't get address: ", stderr); _print_error (gai_error, errno_error, stderr); putc ('\n', stderr); } else { fputs ("Got an address: ", stderr); _print_sockaddr (&addr, addrlen, stderr); putc ('\n', stderr); } } sp->query1 = NULL; } fflush (stderr); # endif /* TEST_ASYNC_NETDB */ } ENTRYPOINT void release_sonar (ModeInfo *mi) { #if 0 sonar_configuration *sp = &sps[MI_SCREEN(mi)]; sonar_bogie *b = sp->displayed; while (b) { sonar_bogie *next = b->next; free_bogie (sp->ssd, b); b = next; } sp->displayed = 0; b = sp->pending; while (b) { sonar_bogie *next = b->next; free_bogie (sp->ssd, b); b = next; } sp->pending = 0; sp->ssd->free_data_cb (sp->ssd, sp->ssd->closure); free (sp->ssd); sp->ssd = 0; #endif } XSCREENSAVER_MODULE ("Sonar", sonar) #endif /* USE_GL */ xscreensaver-5.36/hacks/glx/sonar-sim.c000644 000767 000024 00000005715 12701612217 020104 0ustar00jwzstaff000000 000000 /* 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 * 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 implements the "simulation" sensor for sonar. */ #include "screenhackI.h" #include "sonar.h" typedef struct { const char *team_a_name; const char *team_b_name; int team_a_count; int team_b_count; sonar_bogie *targets; Bool debug_p; } sim_data; static void sim_free_data (sonar_sensor_data *ssd, void *closure) { sim_data *sd = (sim_data *) closure; free (sd); } static void sim_free_bogie_data (sonar_sensor_data *ssd, void *closure) { free (closure); } /* Return an updated (moved) copy of the bogies. */ static sonar_bogie * sim_scan (sonar_sensor_data *ssd) { sim_data *sd = (sim_data *) ssd->closure; sonar_bogie *b, *b2, *list = 0; double scale = 0.01; for (b = sd->targets; b; b = b->next) { b->r += scale * (0.5 - frand(1.0)); b->th += scale * (0.5 - frand(1.0)); while (b->r < 0.2) b->r += scale * 0.1; while (b->r > 0.9) b->r -= scale * 0.1; b2 = sonar_copy_bogie (ssd, b); b2->next = list; list = b2; } return list; } static void make_bogies (sonar_sensor_data *ssd) { sim_data *sd = (sim_data *) ssd->closure; int i, j; for (j = 0; j <= 1; j++) for (i = 0; i < (j ? sd->team_a_count : sd->team_b_count); i++) { sonar_bogie *b = (sonar_bogie *) calloc (1, sizeof(*b)); const char *name = (j ? sd->team_a_name : sd->team_b_name); b->name = (char *) malloc (strlen(name) + 10); sprintf (b->name, "%s%03d", name, i+1); b->r = 0.3 + frand(0.5); b->th = frand (M_PI*2); b->next = sd->targets; sd->targets = b; if (sd->debug_p) fprintf (stderr, "%s: %s: %5.2f %5.2f\n", progname, b->name, b->r, b->th); } } 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) { sonar_sensor_data *ssd = (sonar_sensor_data *) calloc (1, sizeof(*ssd)); sim_data *sd = (sim_data *) calloc (1, sizeof(*sd)); sd->team_a_name = team_a_name; sd->team_b_name = team_b_name; sd->team_a_count = team_a_count; sd->team_b_count = team_b_count; sd->debug_p = debug_p; ssd->closure = sd; ssd->scan_cb = sim_scan; ssd->free_data_cb = sim_free_data; ssd->free_bogie_cb = sim_free_bogie_data; make_bogies (ssd); return ssd; } xscreensaver-5.36/hacks/glx/sonar-icmp.c000664 000767 000024 00000135326 12721402330 020243 0ustar00jwzstaff000000 000000 /* sonar, Copyright (c) 1998-2016 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 * 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 implements the "ping" sensor for sonar. */ #include "screenhackI.h" #include "sonar.h" #include "version.h" #include "async_netdb.h" #undef usleep /* conflicts with unistd.h on OSX */ #ifdef USE_IPHONE /* Note: to get this to compile for iPhone, you need to fix Xcode! The icmp headers exist for the simulator build environment, but not for the real-device build environment. This appears to just be an Apple bug, not intentional. xc=/Applications/Xcode.app/Contents for path in /Developer/Platforms/iPhone*?/Developer/SDKs/?* \ $xc/Developer/Platforms/iPhone*?/Developer/SDKs/?* ; do for file in \ /usr/include/netinet/ip.h \ /usr/include/netinet/in_systm.h \ /usr/include/netinet/ip_icmp.h \ /usr/include/netinet/ip_var.h \ /usr/include/netinet/udp.h do ln -s "$file" "$path$file" done done */ #endif #ifndef HAVE_MOBILE # define READ_FILES #endif #if defined(HAVE_ICMP) || defined(HAVE_ICMPHDR) # include # include # include # include # include # include # include # include # ifndef HAVE_ANDROID # include # endif # include # include # include # include # include # include # include # include # include # ifdef HAVE_GETIFADDRS # include # endif #endif /* HAVE_ICMP || HAVE_ICMPHDR */ #if defined(HAVE_ICMP) # define HAVE_PING # define ICMP icmp # define ICMP_TYPE(p) (p)->icmp_type # define ICMP_CODE(p) (p)->icmp_code # define ICMP_CHECKSUM(p) (p)->icmp_cksum # define ICMP_ID(p) (p)->icmp_id # define ICMP_SEQ(p) (p)->icmp_seq #elif defined(HAVE_ICMPHDR) # define HAVE_PING # define ICMP icmphdr # define ICMP_TYPE(p) (p)->type # define ICMP_CODE(p) (p)->code # define ICMP_CHECKSUM(p) (p)->checksum # define ICMP_ID(p) (p)->un.echo.id # define ICMP_SEQ(p) (p)->un.echo.sequence #else # undef HAVE_PING #endif #ifndef HAVE_MOBILE # define LOAD_FILES #endif #ifndef HAVE_PING sonar_sensor_data * 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) { if (! (!subnet || !*subnet || !strcmp(subnet, "default"))) fprintf (stderr, "%s: not compiled with support for pinging hosts.\n", progname); return 0; } #else /* HAVE_PING -- whole file */ #if defined(__DECC) || defined(_IP_VHL) /* This is how you do it on DEC C, and possibly some BSD systems. */ # define IP_HDRLEN(ip) ((ip)->ip_vhl & 0x0F) #else /* This is how you do it on everything else. */ # define IP_HDRLEN(ip) ((ip)->ip_hl) #endif /* yes, there is only one, even when multiple savers are running in the same address space - since we can only open this socket before dropping privs. */ static int global_icmpsock = 0; /* Set by a signal handler. */ static int timer_expired; static u_short checksum(u_short *, int); static long delta(struct timeval *, struct timeval *); typedef struct { Display *dpy; /* Only used to get *useThreads. */ char *version; /* short version number of xscreensaver */ int icmpsock; /* socket for sending pings */ int pid; /* our process ID */ int seq; /* packet sequence number */ int timeout; /* packet timeout */ int target_count; sonar_bogie *targets; /* the hosts we will ping; those that pong end up on ssd->pending. */ sonar_bogie *last_pinged; /* pointer into 'targets' list */ double last_ping_time; Bool resolve_p; Bool times_p; Bool debug_p; } ping_data; typedef struct { async_name_from_addr_t lookup_name; async_addr_from_name_t lookup_addr; async_netdb_sockaddr_storage_t address; /* ip address */ socklen_t addrlen; char *fallback; } ping_bogie; /* Packs an IP address quad into bigendian network order. */ static unsigned long pack_addr (unsigned int a, unsigned int b, unsigned int c, unsigned int d) { unsigned long i = (((a & 255) << 24) | ((b & 255) << 16) | ((c & 255) << 8) | ((d & 255) )); return htonl (i); } /* Unpacks an IP address quad from bigendian network order. */ static void unpack_addr (unsigned long addr, unsigned int *a, unsigned int *b, unsigned int *c, unsigned int *d) { addr = ntohl (addr); *a = (addr >> 24) & 255; *b = (addr >> 16) & 255; *c = (addr >> 8) & 255; *d = (addr ) & 255; } /* Resolves the bogie's name (either a hostname or ip address string) to a hostent. Returns 1 if successful, 0 if something went wrong. */ static int resolve_bogie_hostname (ping_data *pd, sonar_bogie *sb, Bool resolve_p) { ping_bogie *pb = (ping_bogie *) sb->closure; unsigned int ip[4]; char c; if (4 == sscanf (sb->name, " %u.%u.%u.%u %c", &ip[0], &ip[1], &ip[2], &ip[3], &c)) { /* It's an IP address. */ struct sockaddr_in *iaddr = (struct sockaddr_in *) &(pb->address); if (ip[3] == 0) { if (pd->debug_p > 1) fprintf (stderr, "%s: ignoring bogus IP %s\n", progname, sb->name); return 0; } iaddr->sin_family = AF_INET; iaddr->sin_addr.s_addr = pack_addr (ip[0], ip[1], ip[2], ip[3]); pb->addrlen = sizeof(struct sockaddr_in); if (resolve_p) { pb->lookup_name = async_name_from_addr_start (pd->dpy, (const struct sockaddr *)&pb->address, pb->addrlen); if (!pb->lookup_name) { fprintf (stderr, "%s: unable to start host resolution.\n", progname); } } } else { /* It's a host name. */ /* don't waste time being confused by non-hostname tokens in .ssh/known_hosts */ if (!strcmp (sb->name, "ssh-rsa") || !strcmp (sb->name, "ssh-dsa") || !strcmp (sb->name, "ssh-dss") || strlen (sb->name) >= 80) return 0; /* .ssh/known_hosts sometimes contains weirdness like "[host]:port". Ignore it. */ if (strchr (sb->name, '[')) { if (pd->debug_p) fprintf (stderr, "%s: ignoring bogus address \"%s\"\n", progname, sb->name); return 0; } /* If the name contains a colon, it's probably IPv6. */ if (strchr (sb->name, ':')) { if (pd->debug_p) fprintf (stderr, "%s: ignoring ipv6 address \"%s\"\n", progname, sb->name); return 0; } pb->lookup_addr = async_addr_from_name_start(pd->dpy, sb->name); if (!pb->lookup_addr) { if (pd->debug_p) /* Either address space exhaustion or RAM exhaustion. */ fprintf (stderr, "%s: unable to start host resolution.\n", progname); return 0; } } return 1; } static void print_address (FILE *out, int width, const void *sockaddr, socklen_t addrlen) { #ifdef HAVE_GETADDRINFO char buf[NI_MAXHOST]; #else char buf[50]; #endif const struct sockaddr *addr = (const struct sockaddr *)sockaddr; const char *ips = buf; if (!addr->sa_family) ips = ""; else { #ifdef HAVE_GETADDRINFO int gai_error = getnameinfo (sockaddr, addrlen, buf, sizeof(buf), NULL, 0, NI_NUMERICHOST); if (gai_error == EAI_SYSTEM) ips = strerror(errno); else if (gai_error) ips = gai_strerror(gai_error); #else switch (addr->sa_family) { case AF_INET: { u_long ip = ((struct sockaddr_in *)sockaddr)->sin_addr.s_addr; unsigned int a, b, c, d; unpack_addr (ip, &a, &b, &c, &d); /* ip is in network order */ sprintf (buf, "%u.%u.%u.%u", a, b, c, d); } break; default: ips = ""; break; } #endif } fprintf (out, "%-*s", width, ips); } static void print_host (FILE *out, const sonar_bogie *sb) { const ping_bogie *pb = (const ping_bogie *) sb->closure; const char *name = sb->name; if (!name || !*name) name = ""; print_address (out, 16, &pb->address, pb->addrlen); fprintf (out, " %s\n", name); } static Bool is_address_ok(Bool debug_p, const sonar_bogie *b) { const ping_bogie *pb = (const ping_bogie *) b->closure; const struct sockaddr *addr = (const struct sockaddr *)&pb->address; switch (addr->sa_family) { case AF_INET: { struct sockaddr_in *iaddr = (struct sockaddr_in *) addr; /* Don't ever use loopback (127.0.0.x) hosts */ unsigned long ip = iaddr->sin_addr.s_addr; if ((ntohl (ip) & 0xFFFFFF00L) == 0x7f000000L) /* 127.0.0.x */ { if (debug_p) fprintf (stderr, "%s: ignoring loopback host %s\n", progname, b->name); return False; } /* Don't ever use broadcast (255.x.x.x) hosts */ if ((ntohl (ip) & 0xFF000000L) == 0xFF000000L) /* 255.x.x.x */ { if (debug_p) fprintf (stderr, "%s: ignoring broadcast host %s\n", progname, b->name); return False; } } break; } return True; } /* Create a sonar_bogie from a host name or ip address string. Returns NULL if the name could not be resolved. */ static sonar_bogie * bogie_for_host (sonar_sensor_data *ssd, const char *name, const char *fallback) { ping_data *pd = (ping_data *) ssd->closure; sonar_bogie *b = (sonar_bogie *) calloc (1, sizeof(*b)); ping_bogie *pb = (ping_bogie *) calloc (1, sizeof(*pb)); Bool resolve_p = pd->resolve_p; b->name = strdup (name); b->closure = pb; if (! resolve_bogie_hostname (pd, b, resolve_p)) goto FAIL; if (! pb->lookup_addr && ! is_address_ok (pd->debug_p, b)) goto FAIL; if (pd->debug_p > 1) { fprintf (stderr, "%s: added ", progname); print_host (stderr, b); } if (fallback) pb->fallback = strdup (fallback); return b; FAIL: if (b) sonar_free_bogie (ssd, b); if (fallback) return bogie_for_host (ssd, fallback, NULL); 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. */ static sonar_bogie * read_hosts_file (sonar_sensor_data *ssd, const char *filename) { ping_data *pd = (ping_data *) ssd->closure; FILE *fp; char buf[LINE_MAX]; char *p; sonar_bogie *list = 0; char *addr, *name; sonar_bogie *new; /* Kludge: on OSX, variables have not been expanded in the command line arguments, so as a special case, allow the string to begin with literal "$HOME/" or "~/". This is so that the "Known Hosts" menu item in sonar.xml works. */ if (!strncmp(filename, "~/", 2) || !strncmp(filename, "$HOME/", 6)) { char *s = strchr (filename, '/'); strcpy (buf, getenv("HOME")); strcat (buf, s); filename = buf; } fp = fopen(filename, "r"); if (!fp) { char buf[1024]; sprintf(buf, "%s: %s", progname, filename); #ifdef HAVE_JWXYZ if (pd->debug_p) /* on OSX don't syslog this */ #endif perror (buf); return 0; } if (pd->debug_p) fprintf (stderr, "%s: reading \"%s\"\n", progname, filename); while ((p = fgets(buf, LINE_MAX, fp))) { while ((*p == ' ') || (*p == '\t')) /* skip whitespace */ p++; if (*p == '#') /* skip comments */ continue; /* Get the name and address */ if ((addr = strtok(buf, " ,;\t\n"))) name = strtok(0, " ,;\t\n"); else continue; /* Check to see if the addr looks like an addr. If not, assume the addr is a name and there is no addr. This way, we can handle files whose lines have "xx.xx.xx.xx hostname" as their first two tokens, and also files that have a hostname as their first token (like .ssh/known_hosts and .rhosts.) */ { int i; char c; if (4 != sscanf(addr, "%d.%d.%d.%d%c", &i, &i, &i, &i, &c)) { name = addr; addr = 0; } } /* If the name is all digits, it's not a name. */ if (name) { const char *s; for (s = name; *s; s++) if (*s < '0' || *s > '9') break; if (! *s) { if (pd->debug_p > 1) fprintf (stderr, "%s: skipping bogus name \"%s\" (%s)\n", progname, name, addr); name = 0; } } /* Create a new target using first the name then the address */ if (!name) { name = addr; addr = NULL; } new = bogie_for_host (ssd, name, addr); if (new) { new->next = list; list = new; } } fclose(fp); return list; } #endif /* READ_FILES */ static sonar_bogie ** found_duplicate_host (const ping_data *pd, sonar_bogie **list, sonar_bogie *bogie) { if (pd->debug_p) { fprintf (stderr, "%s: deleted duplicate: ", progname); print_host (stderr, bogie); } return list; } static sonar_bogie ** find_duplicate_host (const ping_data *pd, sonar_bogie **list, sonar_bogie *bogie) { const ping_bogie *pb = (const ping_bogie *) bogie->closure; const struct sockaddr *addr1 = (const struct sockaddr *) &(pb->address); while(*list) { const ping_bogie *pb2 = (const ping_bogie *) (*list)->closure; if (!pb2->lookup_addr) { const struct sockaddr *addr2 = (const struct sockaddr *) &(pb2->address); if (addr1->sa_family == addr2->sa_family) { switch (addr1->sa_family) { case AF_INET: { unsigned long ip1 = ((const struct sockaddr_in *)addr1)->sin_addr.s_addr; const struct sockaddr_in *i2 = (const struct sockaddr_in *)addr2; unsigned long ip2 = i2->sin_addr.s_addr; if (ip1 == ip2) return found_duplicate_host (pd, list, bogie); } break; #ifdef AF_INET6 case AF_INET6: { if (! memcmp( &((const struct sockaddr_in6 *)addr1)->sin6_addr, &((const struct sockaddr_in6 *)addr2)->sin6_addr, 16)) return found_duplicate_host (pd, list, bogie); } break; #endif default: { /* Fallback behavior: Just memcmp the two addresses. For this to work, unused space in the sockaddr must be set to zero. Which may actually be the case: - async_addr_from_name_finish won't put garbage into sockaddr_in.sin_zero or elsewhere unless getaddrinfo does. - ping_bogie is allocated with calloc(). */ if (pb->addrlen == pb2->addrlen && ! memcmp(addr1, addr2, pb->addrlen)) return found_duplicate_host (pd, list, bogie); } break; } } } list = &(*list)->next; } return NULL; } static sonar_bogie * delete_duplicate_hosts (sonar_sensor_data *ssd, sonar_bogie *list) { ping_data *pd = (ping_data *) ssd->closure; sonar_bogie *head = list; sonar_bogie *sb = head; while (sb) { ping_bogie *pb = (ping_bogie *) sb->closure; if (!pb->lookup_addr) { sonar_bogie **sb2 = find_duplicate_host (pd, &sb->next, sb); if (sb2) *sb2 = (*sb2)->next; /* #### sb leaked */ else sb = sb->next; } else sb = sb->next; } return head; } 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, 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 */ char address[BUFSIZ]; char *p; int i; sonar_bogie *new; sonar_bogie *list = 0; char buf[1024]; if (subnet_width < 24) { sprintf (buf, "Pinging %lu hosts is a bad\n" "idea. Please use a subnet\n" "mask of 24 bits or more.", (unsigned long) (1L << (32 - subnet_width)) - 1); *error_ret = strdup(buf); return 0; } else if (subnet_width > 30) { sprintf (buf, "An %d-bit subnet\n" "doesn't make sense.\n" "Try \"subnet/24\"\n" "or \"subnet/29\".\n", subnet_width); *error_ret = strdup(buf); return 0; } if (pd->debug_p) fprintf (stderr, "%s: adding %d-bit subnet\n", progname, subnet_width); if (! n_base) { # ifdef HAVE_GETIFADDRS /* 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, ( # ifdef AF_UNIX ifa->ifa_addr->sa_family == AF_UNIX ? "local" : # endif # ifdef AF_LINK ifa->ifa_addr->sa_family == AF_LINK ? "link" : # endif # ifdef AF_INET6 ifa->ifa_addr->sa_family == AF_INET6 ? "ipv6" : # endif "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) { sprintf (buf, "Can't ping subnet:\n" "local network is\n" "%.100s/%d,\n" "a p2p bridge\n" "on if %.100s.", 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) { sprintf(buf, "Unable to resolve\n" "local host \"%.100s\"", 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" "\"%.100s\"\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 */ } /* Construct targets for all addresses in this subnet */ h_mask = width_mask (subnet_width); h_base = ntohl (n_base); if (desc_ret && !*desc_ret) { char buf[255]; unsigned int a, b, c, d; unsigned long bb = n_base & htonl(h_mask); unpack_addr (bb, &a, &b, &c, &d); if (subnet_width > 24) sprintf (buf, "%u.%u.%u.%u/%d", a, b, c, d, subnet_width); else sprintf (buf, "%u.%u.%u/%d", a, b, c, 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)) /* skip out-of-subnet host */ continue; else if (subnet_width == 31) /* 1-bit bridge: 2 hosts */ ; else if ((ip & ~h_mask) == 0) /* skip network address */ continue; else if ((ip & ~h_mask) == ~h_mask) /* skip broadcast address */ continue; unpack_addr (htonl (ip), &a, &b, &c, &d); sprintf (address, "%u.%u.%u.%u", a, b, c, d); if (pd->debug_p > 1) { unsigned int aa, ab, ac, ad; unsigned int ma, mb, mc, md; unpack_addr (htonl (h_base & h_mask), &aa, &ab, &ac, &ad); unpack_addr (htonl (h_mask), &ma, &mb, &mc, &md); fprintf (stderr, "%s: subnet: %s (%u.%u.%u.%u & %u.%u.%u.%u / %d)\n", progname, address, aa, ab, ac, ad, ma, mb, mc, md, subnet_width); } p = address + strlen(address) + 1; sprintf(p, "%d", i); new = bogie_for_host (ssd, address, NULL); if (new) { new->next = list; list = new; } } return list; } /* Send a ping packet. */ static void send_ping (ping_data *pd, const sonar_bogie *b) { ping_bogie *pb = (ping_bogie *) b->closure; u_char *packet; struct ICMP *icmph; const char *token = "org.jwz.xscreensaver.sonar"; char *host_id; int pcktsiz = (sizeof(struct ICMP) + sizeof(struct timeval) + sizeof(socklen_t) + pb->addrlen + strlen(token) + 1 + strlen(pd->version) + 1); /* Create the ICMP packet */ if (! (packet = (u_char *) calloc(1, pcktsiz))) return; /* Out of memory */ icmph = (struct ICMP *) packet; ICMP_TYPE(icmph) = ICMP_ECHO; ICMP_CODE(icmph) = 0; ICMP_CHECKSUM(icmph) = 0; ICMP_ID(icmph) = pd->pid; ICMP_SEQ(icmph) = pd->seq++; # ifdef GETTIMEOFDAY_TWO_ARGS gettimeofday((struct timeval *) &packet[sizeof(struct ICMP)], (struct timezone *) 0); # else gettimeofday((struct timeval *) &packet[sizeof(struct ICMP)]); # endif /* We store the sockaddr of the host we're pinging in the packet, and parse that out of the return packet later (see get_ping() for why). After that, we also include the name and version of this program, just to give a clue to anyone sniffing and wondering what's up. */ host_id = (char *) &packet[sizeof(struct ICMP) + sizeof(struct timeval)]; *(socklen_t *)host_id = pb->addrlen; host_id += sizeof(socklen_t); memcpy(host_id, &pb->address, pb->addrlen); host_id += pb->addrlen; sprintf (host_id, "%.20s %.20s", token, pd->version); ICMP_CHECKSUM(icmph) = checksum((u_short *)packet, pcktsiz); /* Send it */ if (sendto(pd->icmpsock, packet, pcktsiz, 0, (struct sockaddr *)&pb->address, sizeof(pb->address)) != pcktsiz) { #if 0 char buf[BUFSIZ]; sprintf(buf, "%s: pinging %.100s", progname, b->name); perror(buf); #endif } } /* signal handler */ static void sigcatcher (int sig) { timer_expired = 1; } /* Compute the checksum on a ping packet. */ static u_short checksum (u_short *packet, int size) { register int nleft = size; register u_short *w = packet; register int sum = 0; u_short answer = 0; /* Using a 32 bit accumulator (sum), we add sequential 16 bit words to it, and at the end, fold back all the carry bits from the top 16 bits into the lower 16 bits. */ while (nleft > 1) { sum += *w++; nleft -= 2; } /* mop up an odd byte, if necessary */ if (nleft == 1) { *(u_char *)(&answer) = *(u_char *)w ; *(1 + (u_char *)(&answer)) = 0; sum += answer; } /* add back carry outs from top 16 bits to low 16 bits */ sum = (sum >> 16) + (sum & 0xffff); /* add hi 16 to low 16 */ sum += (sum >> 16); /* add carry */ answer = ~sum; /* truncate to 16 bits */ return(answer); } /* Copies the sonar_bogie and the underlying ping_bogie. */ static sonar_bogie * copy_ping_bogie (sonar_sensor_data *ssd, const sonar_bogie *b) { sonar_bogie *b2 = sonar_copy_bogie (ssd, b); if (b->closure) { ping_bogie *pb = (ping_bogie *) b->closure; ping_bogie *pb2 = (ping_bogie *) calloc (1, sizeof(*pb)); pb2->address = pb->address; b2->closure = pb2; } return b2; } /* Look for all outstanding ping replies. */ static sonar_bogie * get_ping (sonar_sensor_data *ssd) { ping_data *pd = (ping_data *) ssd->closure; struct sockaddr from; socklen_t fromlen; int result; u_char packet[1024]; struct timeval now; struct timeval *then; struct ip *ip; int iphdrlen; struct ICMP *icmph; sonar_bogie *bl = 0; sonar_bogie *new = 0; struct sigaction sa; struct itimerval it; fd_set rfds; struct timeval tv; /* Set up a signal to interrupt our wait for a packet */ sigemptyset(&sa.sa_mask); sa.sa_flags = 0; sa.sa_handler = sigcatcher; if (sigaction(SIGALRM, &sa, 0) == -1) { char msg[1024]; sprintf(msg, "%s: unable to trap SIGALRM", progname); perror(msg); exit(1); } /* Set up a timer to interupt us if we don't get a packet */ it.it_interval.tv_sec = 0; it.it_interval.tv_usec = 0; it.it_value.tv_sec = 0; it.it_value.tv_usec = pd->timeout; timer_expired = 0; setitimer(ITIMER_REAL, &it, 0); /* Wait for a result packet */ fromlen = sizeof(from); while (! timer_expired) { tv.tv_usec = pd->timeout; tv.tv_sec = 0; #if 0 /* This breaks on BSD, which uses bzero() in the definition of FD_ZERO */ FD_ZERO(&rfds); #else memset (&rfds, 0, sizeof(rfds)); #endif FD_SET(pd->icmpsock, &rfds); /* only wait a little while, in case we raced with the timer expiration. From Valentijn Sessink */ if (select(pd->icmpsock + 1, &rfds, 0, 0, &tv) >0) { result = recvfrom (pd->icmpsock, packet, sizeof(packet), 0, &from, &fromlen); /* Check the packet */ # ifdef GETTIMEOFDAY_TWO_ARGS gettimeofday(&now, (struct timezone *) 0); # else gettimeofday(&now); # endif ip = (struct ip *) packet; iphdrlen = IP_HDRLEN(ip) << 2; icmph = (struct ICMP *) &packet[iphdrlen]; then = (struct timeval *) &packet[iphdrlen + sizeof(struct ICMP)]; /* Ignore anything but ICMP Replies */ if (ICMP_TYPE(icmph) != ICMP_ECHOREPLY) continue; /* Ignore packets not set from us */ if (ICMP_ID(icmph) != pd->pid) continue; /* Find the bogie in 'targets' that corresponds to this packet and copy it, so that this bogie stays in the same spot (th) on the screen, and so that we don't have to resolve it again. We could find the bogie by comparing ip->ip_src.s_addr to pb->address, but it is possible that, in certain weird router or NAT situations, that the reply will come back from a different address than the one we sent it to. So instead, we parse the sockaddr out of the reply packet payload. */ { const socklen_t *host_id = (socklen_t *) &packet[ iphdrlen + sizeof(struct ICMP) + sizeof(struct timeval)]; sonar_bogie *b; /* Ensure that a maliciously-crafted return packet can't make us overflow in memcmp. */ if (result > 0 && (const u_char *)(host_id + 1) <= packet + result) { const u_char *host_end = (const u_char *)(host_id + 1) + *host_id; if ((const u_char *)(host_id + 1) <= host_end && host_end <= packet + result) { for (b = pd->targets; b; b = b->next) { ping_bogie *pb = (ping_bogie *)b->closure; if (*host_id == pb->addrlen && !memcmp(&pb->address, host_id + 1, pb->addrlen) ) { /* Check to see if the name lookup is done. */ if (pb->lookup_name && async_name_from_addr_is_done (pb->lookup_name)) { char *host = NULL; async_name_from_addr_finish (pb->lookup_name, &host, NULL); if (pd->debug_p > 1) fprintf (stderr, "%s: %s => %s\n", progname, b->name, host ? host : ""); if (host) { free(b->name); b->name = host; } pb->lookup_name = NULL; } new = copy_ping_bogie (ssd, b); break; } } } } } if (! new) /* not in targets? */ { unsigned int a, b, c, d; unpack_addr (ip->ip_src.s_addr, &a, &b, &c, &d); fprintf (stderr, "%s: UNEXPECTED PING REPLY! " "%4d bytes, icmp_seq=%-4d from %d.%d.%d.%d\n", progname, result, ICMP_SEQ(icmph), a, b, c, d); continue; } new->next = bl; bl = new; { double msec = delta(then, &now) / 1000.0; if (pd->times_p) { if (new->desc) free (new->desc); new->desc = (char *) malloc (30); if (msec > 99) sprintf (new->desc, "%.0f ms", msec); else if (msec > 9) sprintf (new->desc, "%.1f ms", msec); else if (msec > 1) sprintf (new->desc, "%.2f ms", msec); else sprintf (new->desc, "%.3f ms", msec); } if (pd->debug_p && pd->times_p) /* ping-like stdout log */ { char *s = strdup(new->name); char *s2 = s; if (strlen(s) > 28) { s2 = s + strlen(s) - 28; strncpy (s2, "...", 3); } fprintf (stdout, "%3d bytes from %28s: icmp_seq=%-4d time=%s\n", result, s2, ICMP_SEQ(icmph), new->desc); fflush (stdout); free(s); } /* The radius must be between 0.0 and 1.0. We want to display ping times on a logarithmic scale, with the three rings being 2.5, 70 and 2,000 milliseconds. */ if (msec <= 0) msec = 0.001; new->r = log (msec * 10) / log (20000); /* Don't put anyone *too* close to the center of the screen. */ if (new->r < 0) new->r = 0; if (new->r < 0.1) new->r += 0.1; } } } return bl; } /* difference between the two times in microseconds. */ static long delta (struct timeval *then, struct timeval *now) { return (((now->tv_sec - then->tv_sec) * 1000000) + (now->tv_usec - then->tv_usec)); } static void ping_free_data (sonar_sensor_data *ssd, void *closure) { ping_data *pd = (ping_data *) closure; sonar_bogie *b = pd->targets; while (b) { sonar_bogie *b2 = b->next; sonar_free_bogie (ssd, b); b = b2; } free (pd); } static void ping_free_bogie_data (sonar_sensor_data *sd, void *closure) { ping_bogie *pb = (ping_bogie *) closure; if (pb->lookup_name) async_name_from_addr_cancel (pb->lookup_name); if (pb->lookup_addr) async_addr_from_name_cancel (pb->lookup_addr); free (pb->fallback); free (closure); } /* Returns the current time in seconds as a double. */ static double double_time (void) { struct timeval now; # ifdef GETTIMEOFDAY_TWO_ARGS struct timezone tzp; gettimeofday(&now, &tzp); # else gettimeofday(&now); # endif return (now.tv_sec + ((double) now.tv_usec * 0.000001)); } static void free_bogie_after_lookup(sonar_sensor_data *ssd, sonar_bogie **sbp, sonar_bogie **sb) { ping_bogie *pb = (ping_bogie *)(*sb)->closure; *sbp = (*sb)->next; pb->lookup_addr = NULL; /* Prevent double-free in sonar_free_bogie. */ sonar_free_bogie (ssd, *sb); *sb = NULL; } /* Pings the next bogie, if it's time. Returns all outstanding ping replies. */ static sonar_bogie * ping_scan (sonar_sensor_data *ssd) { ping_data *pd = (ping_data *) ssd->closure; double now = double_time(); double ping_cycle = 10; /* re-ping a given host every 10 seconds */ double ping_interval = ping_cycle / pd->target_count; if (now > pd->last_ping_time + ping_interval) /* time to ping someone */ { struct sonar_bogie **sbp; if (pd->last_pinged) { sbp = &pd->last_pinged->next; if (!*sbp) sbp = &pd->targets; } else sbp = &pd->targets; if (!*sbp) /* Aaaaand we're out of bogies. */ pd->last_pinged = NULL; else { sonar_bogie *sb = *sbp; ping_bogie *pb = (ping_bogie *)sb->closure; if (pb->lookup_addr && async_addr_from_name_is_done (pb->lookup_addr)) { if (async_addr_from_name_finish (pb->lookup_addr, &pb->address, &pb->addrlen, NULL)) { char *fallback = pb->fallback; pb->fallback = NULL; if (pd->debug_p) fprintf (stderr, "%s: could not resolve host: %s\n", progname, sb->name); free_bogie_after_lookup (ssd, sbp, &sb); /* Insert the fallback bogie right where the old one was. */ if (fallback) { sonar_bogie *new_bogie = bogie_for_host (ssd, fallback, NULL); new_bogie->next = *sbp; if (! ((ping_bogie *)new_bogie->closure)->lookup_addr && ! find_duplicate_host(pd, &pd->targets, new_bogie)) *sbp = new_bogie; else sonar_free_bogie (ssd, new_bogie); free (fallback); } } else { if (pd->debug_p > 1) { fprintf (stderr, "%s: %s => ", progname, sb->name); print_address (stderr, 0, &pb->address, pb->addrlen); putc('\n', stderr); } if (! is_address_ok (pd->debug_p, sb)) free_bogie_after_lookup (ssd, sbp, &sb); else if (find_duplicate_host (pd, &pd->targets, sb)) /* Tricky: find_duplicate_host skips the current bogie when scanning the targets list because pb->lookup_addr hasn't been NULL'd yet. Not that it matters much, but behavior here is to keep the existing address. */ free_bogie_after_lookup (ssd, sbp, &sb); } if (sb) pb->lookup_addr = NULL; } if (sb && !pb->lookup_addr) { if (!pb->addrlen) abort(); send_ping (pd, sb); pd->last_pinged = sb; } } pd->last_ping_time = now; } return get_ping (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, 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"; 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 = 0; # ifdef READ_FILES struct stat st; # endif unsigned int n0=0, n1=0, n2=0, n3=0, m=0; char d; for (next = token; *next && *next != ',' && *next != ' ' && *next != '\t' && *next != '\n'; next++) ; *next = 0; if (pd->debug_p) fprintf (stderr, "%s: parsing %s\n", progname, token); if (!ping_works_p) { *error_ret = strdup ("Sonar must be setuid to ping!\n" "Running simulation instead."); return 0; } if ((4 == sscanf (token, "%u.%u.%u/%u %c", &n0,&n1,&n2, &m,&d)) || (5 == sscanf (token, "%u.%u.%u.%u/%u %c", &n0,&n1,&n2,&n3,&m,&d))) { /* subnet: A.B.C.D/M subnet: A.B.C/M */ unsigned long ip = pack_addr (n0, n1, n2, n3); 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)) { /* IP: A.B.C.D */ new = bogie_for_host (ssd, token, NULL); } else if (!strcmp (token, "subnet")) { 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, desc_ret, 0, m); } else if (*token == '.' || *token == '/' || *token == '$' || *token == '~') { # 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 */ new = bogie_for_host (ssd, token, NULL); } if (new) { sonar_bogie *nn = new; while (nn->next) nn = nn->next; nn->next = hostlist; hostlist = new; } token = next + 1; while (token < end && (*token == ',' || *token == ' ' || *token == '\t' || *token == '\n')) token++; } 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 * 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) { /* Important! Do not return from this function without disavowing privileges with setuid(getuid()). */ 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; Bool socket_initted_p = False; Bool socket_raw_p = False; pd->dpy = dpy; pd->resolve_p = resolve_p; pd->times_p = times_p; pd->debug_p = debug_p; ssd->closure = pd; ssd->scan_cb = ping_scan; ssd->free_data_cb = ping_free_data; ssd->free_bogie_cb = ping_free_bogie_data; /* Get short version number. */ s = strchr (screensaver_id, ' '); pd->version = strdup (s+1); s = strchr (pd->version, ' '); *s = 0; /* Create the ICMP socket. Do this before dropping privs. Raw sockets can only be opened by root (or setuid root), so we only try to do this when the effective uid is 0. We used to just always try, and notice the failure. But apparently that causes "SELinux" to log spurious warnings when running with the "strict" policy. So to avoid that, we just don't try unless we know it will work. On MacOS X, we can avoid the whole problem by using a non-privileged datagram instead of a raw socket. */ if (global_icmpsock) { pd->icmpsock = global_icmpsock; socket_initted_p = True; if (debug_p) fprintf (stderr, "%s: re-using icmp socket\n", progname); } else if ((pd->icmpsock = socket(AF_INET, SOCK_DGRAM, IPPROTO_ICMP)) >= 0) { socket_initted_p = True; } else if (geteuid() == 0 && (pd->icmpsock = socket(AF_INET, SOCK_RAW, IPPROTO_ICMP)) >= 0) { socket_initted_p = True; socket_raw_p = True; } if (socket_initted_p) { global_icmpsock = pd->icmpsock; socket_initted_p = True; if (debug_p) fprintf (stderr, "%s: opened %s icmp socket\n", progname, (socket_raw_p ? "raw" : "dgram")); } else if (debug_p) fprintf (stderr, "%s: unable to open icmp socket\n", progname); /* Disavow privs */ setuid(getuid()); pd->pid = getpid() & 0xFFFF; pd->seq = 0; pd->timeout = timeout; /* Generate a list of targets */ pd->targets = parse_mode (ssd, error_ret, desc_ret, subnet, socket_initted_p); pd->targets = delete_duplicate_hosts (ssd, pd->targets); if (debug_p) { fprintf (stderr, "%s: Target list:\n", progname); for (b = pd->targets; b; b = b->next) { fprintf (stderr, "%s: ", progname); print_host (stderr, b); } } /* Make sure there is something to ping */ pd->target_count = 0; for (b = pd->targets; b; b = b->next) pd->target_count++; if (pd->target_count == 0) { if (! *error_ret) *error_ret = strdup ("No hosts to ping!\n" "Simulating instead."); if (pd) ping_free_data (ssd, pd); if (ssd) free (ssd); return 0; } /* 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. And don't spread them out too far apart, because that looks too symmetrical when there are a small number of hosts. */ { double th = frand(M_PI); double sep = 360.0 / pd->target_count; if (sep < 23) sep = 23; if (sep > 43) sep = 43; sep /= 180/M_PI; for (b = pd->targets; b; b = b->next) { b->th = th; th += sep; } } return ssd; } #endif /* HAVE_PING -- whole file */ xscreensaver-5.36/hacks/glx/jigsaw.c000644 000767 000024 00000115160 12710313214 017447 0ustar00jwzstaff000000 000000 /* xscreensaver, Copyright (c) 1997-2015 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. * * Written as an Xlib program some time in 1997. * Rewritten as an OpenGL program 24-Aug-2008. */ /* Currently, we do this: - start pieces off screen and move them in. - when they land, they fill the puzzle grid with a shuffled puzzle (pieces are rotated, too). - swap random pairs of pieces until the puzzle is solved. - scatter the pieces off screen (resulting in black). - load new image and repeat. Another idea would be to show the puzzle being solved the way a person would do it: - start off with black screen. - assume knowledge of size of grid (position of corners). - find a corner piece, and place it. - while puzzle unsolved: - pick a random piece; - if it is the correct piece for any open edge, place it; - if it fits physically in any rotation at any open edge, place it, then toss it back (show the fake-out). - if it doesn't fit at all, don't animate it at all. This would take a long time to solve, I think... An even harder idea would involve building up completed "clumps" and sliding them around (a coral growth / accretion approach) */ #define DEF_SPEED "1.0" #define DEF_COMPLEXITY "1.0" #define DEF_RESOLUTION "100" #define DEF_THICKNESS "0.06" #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" \ "*chooseRandomImages: True \n" \ "*suppressRotationAnimation: True\n" \ # define refresh_jigsaw 0 # define release_jigsaw 0 #undef countof #define countof(x) (sizeof((x))/sizeof((*x))) #ifdef HAVE_JWXYZ # include "jwxyz.h" #else # include # include # include #endif #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) #ifdef USE_GL /* whole file */ #define TOP 0 #define RIGHT 1 #define BOTTOM 2 #define LEFT 3 #define IN -1 #define FLAT 0 #define OUT 1 typedef struct jigsaw_configuration jigsaw_configuration; typedef struct { double x,y,z,r; /* position and Z rotation (in degrees) */ } XYZR; typedef struct { jigsaw_configuration *jc; int edge[4]; GLuint dlist; int polys; XYZR home; /* correct position in puzzle */ XYZR current; /* where it is right now */ XYZR from, to; /* in transit from A to B */ double tick; /* 0-1.0, how far from A to B */ double arc_height; /* height of apex of curved path from A to B */ double tilt, max_tilt; } puzzle_piece; struct jigsaw_configuration { GLXContext *glx_context; 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_MSG, PUZZLE_LOADING, PUZZLE_UNSCATTER, PUZZLE_SOLVE, PUZZLE_SCATTER } state; double pausing; double tick_speed; GLuint texid; GLfloat tex_x, tex_y, tex_width, tex_height, aspect; GLuint line_thickness; }; static jigsaw_configuration *sps = NULL; static GLfloat speed; static GLfloat complexity_arg; static int resolution_arg; static GLfloat thickness_arg; static Bool wobble_p; static Bool debug_p; static XrmOptionDescRec opts[] = { { "-speed", ".speed", XrmoptionSepArg, 0 }, { "-complexity", ".complexity", XrmoptionSepArg, 0 }, { "-resolution", ".resolution", XrmoptionSepArg, 0 }, { "-thickness", ".thickness", XrmoptionSepArg, 0 }, { "-wobble", ".wobble", XrmoptionNoArg, "True" }, { "+wobble", ".wobble", XrmoptionNoArg, "False" }, { "-debug", ".debug", XrmoptionNoArg, "True" }, }; static argtype vars[] = { {&speed, "speed", "Speed", DEF_SPEED, t_Float}, {&complexity_arg, "complexity", "Complexity", DEF_COMPLEXITY, t_Float}, {&resolution_arg, "resolution", "Resolution", DEF_RESOLUTION, t_Int}, {&thickness_arg, "thickness", "Thickness", DEF_THICKNESS, t_Float}, {&wobble_p, "wobble", "Wobble", DEF_WOBBLE, t_Bool}, {&debug_p, "debug", "Debug", DEF_DEBUG, t_Bool}, }; ENTRYPOINT ModeSpecOpt jigsaw_opts = {countof(opts), opts, countof(vars), vars, NULL}; /* Returns a spline describing one edge of a puzzle piece of the given length. */ static spline * make_puzzle_curve (int pixels) { double x0 = 0.0000, y0 = 0.0000; double x1 = 0.3333, y1 = 0.1000; double x2 = 0.4333, y2 = 0.0333; double x3 = 0.4666, y3 = -0.0666; double x4 = 0.3333, y4 = -0.1666; double x5 = 0.3666, y5 = -0.2900; double x6 = 0.5000, y6 = -0.3333; spline *s = make_spline(20); s->n_controls = 0; # define PT(x,y) \ s->control_x[s->n_controls] = pixels * (x); \ s->control_y[s->n_controls] = pixels * (y); \ s->n_controls++ PT ( x0, y0); PT ( x1, y1); PT ( x2, y2); PT ( x3, y3); PT ( x4, y4); PT ( x5, y5); PT ( x6, y6); PT (1-x5, y5); PT (1-x4, y4); PT (1-x3, y3); PT (1-x2, y2); PT (1-x1, y1); PT (1-x0, y0); # undef PT compute_spline (s); return s; } #ifdef HAVE_TESS static void tess_error_cb (GLenum errorCode) { fprintf (stderr, "%s: tesselation error: %s\n", progname, gluErrorString(errorCode)); exit (0); } static void tess_combine_cb (GLdouble coords[3], GLdouble *d[4], GLfloat w[4], GLdouble **dataOut) { GLdouble *new = (GLdouble *) malloc (3 * sizeof(*new)); new[0] = coords[0]; new[1] = coords[1]; new[2] = coords[2]; *dataOut = new; } static void tess_vertex_cb (void *vertex_data, void *closure) { puzzle_piece *p = (puzzle_piece *) closure; GLdouble *v = (GLdouble *) vertex_data; GLdouble x = v[0]; GLdouble y = v[1]; GLdouble z = v[2]; if (p) { GLfloat pw = p->jc->puzzle_width; GLfloat ph = p->jc->puzzle_height; GLfloat xx = x / (GLfloat) resolution_arg; /* 0-1 from piece origin */ GLfloat yy = y / (GLfloat) resolution_arg; GLdouble tx = (p->home.x + xx) / pw; /* 0-1 from puzzle origin */ GLdouble 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); glTexCoord2d (tx, ty); } 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 indicate the direction the tabs point: 1 for out, -1 for in, 0 for flat. */ static int draw_piece (jigsaw_configuration *jc, puzzle_piece *p, int resolution, GLfloat thickness, int top_type, int right_type, int bottom_type, int left_type, Bool wire) { spline *s = make_puzzle_curve (resolution); GLdouble *pts = (GLdouble *) malloc (s->n_points * 4 * 3 * sizeof(*pts)); int polys = 0; int i, o; GLdouble z = resolution * thickness; o = 0; if (top_type == 0) { pts[o++] = 0; pts[o++] = 0; pts[o++] = z; pts[o++] = resolution; pts[o++] = 0; pts[o++] = z; } else { for (i = 0; i < s->n_points; i++) { pts[o++] = s->points[i].x; pts[o++] = s->points[i].y * top_type; pts[o++] = z; } } if (right_type == 0) { pts[o++] = resolution; pts[o++] = resolution; pts[o++] = z; } else { for (i = 1; i < s->n_points; i++) { pts[o++] = resolution + s->points[i].y * (-right_type); pts[o++] = s->points[i].x; pts[o++] = z; } } if (bottom_type == 0) { pts[o++] = 0; pts[o++] = resolution; pts[o++] = z; } else { for (i = 1; i < s->n_points; i++) { pts[o++] = s->points[s->n_points-i-1].x; pts[o++] = resolution + s->points[s->n_points-i-1].y * (-bottom_type); pts[o++] = z; } } if (left_type == 0) { pts[o++] = 0; pts[o++] = 0; pts[o++] = z; } else { for (i = 1; i < s->n_points; i++) { pts[o++] = s->points[s->n_points-i-1].y * left_type; pts[o++] = s->points[s->n_points-i-1].x; pts[o++] = z; } } { GLfloat ss = 1.0 / resolution; glScalef (ss, ss, ss); } # ifndef HAVE_JWZGLES /* #### glPolygonMode other than GL_FILL unimplemented */ glPolygonMode (GL_FRONT_AND_BACK, wire ? GL_LINE : GL_FILL); # endif if (wire) { glDisable (GL_TEXTURE_2D); glDisable (GL_BLEND); glDisable (GL_LIGHTING); } else { # 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); gluTessCallback(tess, GLU_TESS_END, (_GLUfuncptr)glEnd); gluTessCallback(tess, GLU_TESS_COMBINE, (_GLUfuncptr)tess_combine_cb); gluTessCallback(tess, GLU_TESS_ERROR, (_GLUfuncptr)tess_error_cb); /* front face */ glEnable (GL_TEXTURE_2D); glEnable (GL_BLEND); glEnable (GL_LIGHTING); glBindTexture(GL_TEXTURE_2D, jc->texid); glFrontFace (GL_CCW); glNormal3f (0, 0, 1); gluTessBeginPolygon (tess, p); gluTessBeginContour (tess); for (i = 0; i < o; i += 3) { GLdouble *p = pts + i; gluTessVertex (tess, p, p); polys++; /* not quite right but close */ } gluTessEndContour(tess); gluTessEndPolygon(tess); /* back face */ glDisable (GL_TEXTURE_2D); glFrontFace (GL_CW); glNormal3f (0, 0, -1); gluTessBeginPolygon (tess, 0); gluTessBeginContour (tess); for (i = 0; i < o; i += 3) { GLdouble *p = pts + i; p[2] = -p[2]; gluTessVertex (tess, p, p); polys++; /* not quite right but close */ } 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) { int j = (i+o-3) % o; int k = (i+3) % o; GLdouble *p = pts + i; GLdouble *pj = pts + j; GLdouble *pk = pts + k; 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]); polys++; } glEnd(); 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); glBegin (GL_LINE_LOOP); for (i = 0; i < o; i += 3) glVertex3f (pts[i], pts[i+1], pts[i+2]); glEnd(); polys += o/3; glBegin (GL_LINE_LOOP); for (i = 0; i < o; i += 3) glVertex3f (pts[i], pts[i+1], -pts[i+2]); glEnd(); polys += o/3; free_spline (s); free (pts); return polys; } static void free_puzzle_grid (jigsaw_configuration *jc) { int i; for (i = 0; i < jc->puzzle_width * jc->puzzle_height; i++) glDeleteLists (jc->puzzle[i].dlist, 1); free (jc->puzzle); jc->puzzle = 0; jc->puzzle_width = 0; jc->puzzle_height = 0; } static void make_puzzle_grid (ModeInfo *mi) { jigsaw_configuration *jc = &sps[MI_SCREEN(mi)]; int wire = MI_IS_WIREFRAME(mi); int x, y; GLfloat size = (8 + (random() % 8)) * complexity_arg; if (jc->puzzle) free_puzzle_grid (jc); if (wire) jc->aspect = MI_WIDTH(mi) / (float) MI_HEIGHT(mi); if (jc->aspect >= 1.0) { jc->puzzle_width = size; jc->puzzle_height = (size + 0.5) / jc->aspect; } else { jc->puzzle_width = (size + 0.5) * jc->aspect; jc->puzzle_height = size; } if (jc->puzzle_width < 1) jc->puzzle_width = 1; if (jc->puzzle_height < 1) jc->puzzle_height = 1; if (debug_p) fprintf (stderr, "%s: grid %4d x %-4d (%.2f)\n", progname, jc->puzzle_width, jc->puzzle_height, ((float) jc->puzzle_width / jc->puzzle_height)); jc->puzzle = (puzzle_piece *) calloc (jc->puzzle_width * (jc->puzzle_height+1), sizeof(*jc->puzzle)); /* Randomize the right and bottom edge of each piece. Match the left edge of the piece to the right to our right edge. Match the top edge of the piece to the bottom to our bottom edge. */ for (y = 0; y < jc->puzzle_height; y++) for (x = 0; x < jc->puzzle_width; x++) { puzzle_piece *p = &jc->puzzle [y * jc->puzzle_width + x]; puzzle_piece *r = &jc->puzzle [y * jc->puzzle_width + x+1]; puzzle_piece *b = &jc->puzzle [(y+1) * jc->puzzle_width + x]; p->edge[RIGHT] = (random() & 1) ? IN : OUT; p->edge[BOTTOM] = (random() & 1) ? IN : OUT; r->edge[LEFT] = p->edge[RIGHT] == IN ? OUT : IN; b->edge[TOP] = p->edge[BOTTOM] == IN ? OUT : IN; } /* tell each piece where it belongs. */ for (y = 0; y < jc->puzzle_height; y++) for (x = 0; x < jc->puzzle_width; x++) { puzzle_piece *p = &jc->puzzle [y * jc->puzzle_width + x]; p->jc = jc; p->home.x = x; p->home.y = y; p->current = p->home; /* make sure the outer border is flat */ if (p->home.x == 0) p->edge[LEFT] = FLAT; if (p->home.y == 0) p->edge[TOP] = FLAT; if (p->home.x == jc->puzzle_width-1) p->edge[RIGHT] = FLAT; if (p->home.y == jc->puzzle_height-1) p->edge[BOTTOM] = FLAT; /* generate the polygons */ p->dlist = glGenLists (1); check_gl_error ("generating lists"); if (p->dlist <= 0) abort(); glNewList (p->dlist, GL_COMPILE); p->polys += draw_piece (jc, p, resolution_arg, thickness_arg, p->edge[TOP], p->edge[RIGHT], p->edge[BOTTOM], p->edge[LEFT], wire); glEndList(); } } static void shuffle_grid (ModeInfo *mi); static void image_loaded_cb (const char *filename, XRectangle *geometry, int image_width, int image_height, int texture_width, int texture_height, void *closure) { ModeInfo *mi = (ModeInfo *) closure; jigsaw_configuration *jc = &sps[MI_SCREEN(mi)]; jc->tex_x = geometry->x / (float) texture_width; jc->tex_y = geometry->y / (float) texture_height; jc->tex_width = geometry->width / (float) texture_width; jc->tex_height = geometry->height / (float) texture_height; jc->aspect = geometry->width / (float) geometry->height; if (debug_p) { fprintf (stderr, "%s: image %s\n", progname, (filename ? filename : "(null)")); fprintf (stderr, "%s: image %4d x %-4d + %4d + %-4d (%.2f)\n", progname, geometry->width, geometry->height, geometry->x, geometry->y, (float) geometry->width / geometry->height); fprintf (stderr, "%s: tex %4d x %-4d\n", progname, texture_width, texture_height); fprintf (stderr, "%s: tex %4.2f x %4.2f + %4.2f + %4.2f (%.2f)\n", progname, jc->tex_width, jc->tex_height, jc->tex_x, jc->tex_y, (jc->tex_width / jc->tex_height) * (texture_width / texture_height)); } glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP); glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP); make_puzzle_grid (mi); } static void load_image (ModeInfo *mi) { jigsaw_configuration *jc = &sps[MI_SCREEN(mi)]; load_texture_async (mi->xgwa.screen, mi->window, *jc->glx_context, 0, 0, False, jc->texid, image_loaded_cb, mi); } /* Whether the two pieces are the same shape, when the second piece is rotated by the given degrees. */ static Bool same_shape (puzzle_piece *p0, puzzle_piece *p1, int rotated_by) { switch (rotated_by) { case 0: return (p0->edge[0] == p1->edge[0] && p0->edge[1] == p1->edge[1] && p0->edge[2] == p1->edge[2] && p0->edge[3] == p1->edge[3]); case 90: return (p0->edge[0] == p1->edge[1] && p0->edge[1] == p1->edge[2] && p0->edge[2] == p1->edge[3] && p0->edge[3] == p1->edge[0]); case 180: return (p0->edge[0] == p1->edge[2] && p0->edge[1] == p1->edge[3] && p0->edge[2] == p1->edge[0] && p0->edge[3] == p1->edge[1]); case 270: return (p0->edge[0] == p1->edge[3] && p0->edge[1] == p1->edge[0] && p0->edge[2] == p1->edge[1] && p0->edge[3] == p1->edge[2]); default: abort(); } } /* Returns the proper rotation for the piece at the given position. */ static int proper_rotation (jigsaw_configuration *jc, puzzle_piece *p, double x, double y) { puzzle_piece *p1; int cx = x; int cy = y; if (cx != x) abort(); /* must be in integral position! */ if (cy != y) abort(); p1 = &jc->puzzle [cy * jc->puzzle_width + cx]; if (same_shape (p, p1, 0)) return 0; if (same_shape (p, p1, 90)) return 90; if (same_shape (p, p1, 180)) return 180; if (same_shape (p, p1, 270)) return 270; abort(); /* these two pieces don't match in any rotation! */ } /* Returns the piece currently at the given position. */ static puzzle_piece * piece_at (jigsaw_configuration *jc, double x, double y) { int npieces = jc->puzzle_width * jc->puzzle_height; int i; int cx = x; int cy = y; if (cx != x) abort(); /* must be in integral position! */ if (cy != y) abort(); for (i = 0; i < npieces; i++) { puzzle_piece *p = &jc->puzzle [i]; if (p->current.x == cx && p->current.y == cy) return p; } abort(); /* no piece at that position? */ } static void shuffle_grid (ModeInfo *mi) { jigsaw_configuration *jc = &sps[MI_SCREEN(mi)]; int max_tries = jc->puzzle_width * jc->puzzle_height; int npieces = jc->puzzle_width * jc->puzzle_height; int i; for (i = 0; i < npieces; i++) { puzzle_piece *p0 = &jc->puzzle [i]; puzzle_piece *p1 = 0; int k; for (k = 0; k < max_tries; k++) { p1 = &jc->puzzle [random() % npieces]; if (same_shape (p0, p1, 0)) break; if (same_shape (p0, p1, 90)) break; if (same_shape (p0, p1, 180)) break; if (same_shape (p0, p1, 270)) break; p1 = 0; /* mismatch */ } if (p1 && p0 != p1) { XYZR s; s = p0->current; p0->current = p1->current; p1->current = s; p0->current.r = proper_rotation (jc, p0, p0->current.x, p0->current.y); p1->current.r = proper_rotation (jc, p1, p1->current.x, p1->current.y); } } } /* We tend to accumulate floating point errors, e.g., z being 0.000001 after a move. This makes sure float values that should be integral are. */ static void smooth_grid (ModeInfo *mi) { jigsaw_configuration *jc = &sps[MI_SCREEN(mi)]; int npieces = jc->puzzle_width * jc->puzzle_height; int i; for (i = 0; i < npieces; i++) { puzzle_piece *p = &jc->puzzle [i]; # define SMOOTH(P) \ P.x = (int) (P.x + 0.5); \ P.y = (int) (P.y + 0.5); \ P.z = (int) (P.z + 0.5); \ P.r = (int) (P.r + 0.5) SMOOTH(p->home); SMOOTH(p->current); SMOOTH(p->from); SMOOTH(p->to); if (p->tick <= 0.0001) p->tick = 0.0; if (p->tick >= 0.9999) p->tick = 1.0; } } static void begin_scatter (ModeInfo *mi, Bool unscatter_p) { jigsaw_configuration *jc = &sps[MI_SCREEN(mi)]; int npieces = jc->puzzle_width * jc->puzzle_height; int i; XYZR ctr = { 0, }; ctr.x = jc->puzzle_width / 2; ctr.y = jc->puzzle_height / 2; for (i = 0; i < npieces; i++) { puzzle_piece *p = &jc->puzzle [i]; XYZ a; double d, r, th; p->tick = -frand(1.0); p->from = p->current; a.x = p->from.x - ctr.x; /* position relative to center */ a.y = p->from.y - ctr.y; r = sqrt (a.x*a.x + a.y*a.y); th = atan2 (a.x, a.y); d = MAX (jc->puzzle_width, jc->puzzle_height) * 2; r = r*r + d; p->to.x = ctr.x + (r * sin (th)); p->to.y = ctr.y + (r * cos (th)); p->to.z = p->from.z; p->to.r = ((int) p->from.r + (random() % 180)) % 360; p->arc_height = frand(10.0); if (unscatter_p) { XYZR s = p->to; p->to = p->from; p->from = s; p->current = p->from; } } } static Bool solved_p (ModeInfo *mi) { jigsaw_configuration *jc = &sps[MI_SCREEN(mi)]; int npieces = jc->puzzle_width * jc->puzzle_height; int i; for (i = 0; i < npieces; i++) { puzzle_piece *p = &jc->puzzle [i]; if (p->current.x != p->home.x || p->current.y != p->home.y || p->current.z != p->home.z) return False; } return True; } static void move_one_piece (ModeInfo *mi) { jigsaw_configuration *jc = &sps[MI_SCREEN(mi)]; int npieces = jc->puzzle_width * jc->puzzle_height; int i; for (i = 0; i < npieces * 100; i++) /* shouldn't take that long */ { int i = random() % npieces; puzzle_piece *p0 = &jc->puzzle [i]; puzzle_piece *p1; if (p0->current.x == p0->home.x && p0->current.y == p0->home.y && p0->current.z == p0->home.z) continue; /* piece already solved - try again */ /* swap with the piece occupying p0's home cell. */ p1 = piece_at (jc, p0->home.x, p0->home.y); if (p0 == p1) abort(); /* should have caught this above */ p0->tick = 0; p0->from = p0->current; p0->to = p1->current; p0->to.r = proper_rotation (jc, p0, p0->to.x, p0->to.y); p1->tick = 0; p1->from = p1->current; p1->to = p0->current; p1->to.r = proper_rotation (jc, p1, p1->to.x, p1->to.y); /* 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); \ if (! (random() % 5)) V *= 2; \ if (! (random() % 5)) V *= 2; \ if (! (random() % 5)) V *= 2 RTILT (p0->max_tilt); RTILT (p1->max_tilt); # undef RTILT if (debug_p) fprintf (stderr, "%s: swapping %2d,%-2d with %2d,%d\n", progname, (int) p0->from.x, (int) p0->from.y, (int) p1->from.x, (int) p1->from.y); return; } abort(); /* infinite loop! */ } static Bool anim_tick (ModeInfo *mi) { jigsaw_configuration *jc = &sps[MI_SCREEN(mi)]; int npieces = jc->puzzle_width * jc->puzzle_height; int i; Bool finished_p = True; if (jc->pausing > 0) { jc->pausing -= jc->tick_speed * speed; if (debug_p && jc->pausing <= 0) fprintf (stderr, "%s: (done pausing)\n", progname); return False; } for (i = 0; i < npieces; i++) { puzzle_piece *p = &jc->puzzle [i]; double tt; if (p->tick >= 1.0) continue; /* this piece is done */ finished_p = False; /* not done */ p->tick += jc->tick_speed * speed; if (p->tick > 1.0) p->tick = 1.0; if (p->tick < 0.0) continue; /* not yet started */ tt = 1 - sin (M_PI/2 - p->tick * M_PI/2); p->current.x = p->from.x + ((p->to.x - p->from.x) * tt); p->current.y = p->from.y + ((p->to.y - p->from.y) * tt); p->current.z = p->from.z + ((p->to.z - p->from.z) * tt); p->current.r = p->from.r + ((p->to.r - p->from.r) * tt); p->current.z += p->arc_height * sin (p->tick * M_PI); p->tilt = p->max_tilt * sin (p->tick * M_PI); } return finished_p; } static void loading_msg (ModeInfo *mi) { jigsaw_configuration *jc = &sps[MI_SCREEN(mi)]; int wire = MI_IS_WIREFRAME(mi); const char *text = "Loading..."; XCharStruct e; int w, h; texture_string_metrics (jc->texfont, text, &e, 0, 0); w = e.width; h = e.ascent + e.descent; 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) { jigsaw_configuration *jc = &sps[MI_SCREEN(mi)]; double slow = 0.01; double fast = 0.04; 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; shuffle_grid (mi); smooth_grid (mi); begin_scatter (mi, True); jc->pausing = 0; jc->state = PUZZLE_UNSCATTER; if (debug_p) fprintf (stderr, "%s: unscattering\n", progname); break; case PUZZLE_UNSCATTER: jc->tick_speed = slow; if (anim_tick (mi)) { smooth_grid (mi); jc->pausing = 1.0; jc->state = PUZZLE_SOLVE; if (debug_p) fprintf (stderr, "%s: solving\n", progname); } break; case PUZZLE_SOLVE: jc->tick_speed = fast; if (anim_tick (mi)) { smooth_grid (mi); if (solved_p (mi)) { if (debug_p) fprintf (stderr, "%s: solved!\n", progname); begin_scatter (mi, False); jc->state = PUZZLE_SCATTER; jc->pausing = 3.0; if (debug_p) fprintf (stderr, "%s: scattering\n", progname); } else { move_one_piece (mi); jc->pausing = 0.3; } } break; case PUZZLE_SCATTER: jc->tick_speed = slow; if (anim_tick (mi)) { free_puzzle_grid (jc); load_image (mi); jc->state = PUZZLE_LOADING; jc->pausing = 1.0; if (debug_p) fprintf (stderr, "%s: loading\n", progname); } break; default: abort(); } } /* Window management, etc */ ENTRYPOINT void reshape_jigsaw (ModeInfo *mi, int width, int height) { jigsaw_configuration *jc = &sps[MI_SCREEN(mi)]; GLfloat h = (GLfloat) height / (GLfloat) width; glViewport (0, 0, (GLint) width, (GLint) height); glMatrixMode(GL_PROJECTION); glLoadIdentity(); gluPerspective (30.0, 1/h, 1.0, 100.0); glMatrixMode(GL_MODELVIEW); glLoadIdentity(); gluLookAt( 0.0, 0.0, 30.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0); # ifdef HAVE_MOBILE /* Keep it the same relative size when rotated. */ { int o = (int) current_device_rotation(); if (o != 0 && o != 180 && o != -180) glScalef (1/h, 1/h, 1/h); } # endif glClear(GL_COLOR_BUFFER_BIT); jc->line_thickness = (MI_IS_WIREFRAME (mi) ? 1 : MAX (1, height / 300.0)); } ENTRYPOINT Bool jigsaw_handle_event (ModeInfo *mi, XEvent *event) { jigsaw_configuration *jc = &sps[MI_SCREEN(mi)]; if (gltrackball_event_handler (event, jc->trackball, MI_WIDTH (mi), MI_HEIGHT (mi), &jc->button_down_p)) return True; else if (screenhack_event_helper (MI_DISPLAY(mi), MI_WINDOW(mi), event)) { begin_scatter (mi, False); jc->state = PUZZLE_SCATTER; return True; } return False; } ENTRYPOINT void init_jigsaw (ModeInfo *mi) { jigsaw_configuration *jc; int wire = MI_IS_WIREFRAME(mi); if (!sps) { sps = (jigsaw_configuration *) calloc (MI_NUM_SCREENS(mi), sizeof (jigsaw_configuration)); if (!sps) { fprintf(stderr, "%s: out of memory\n", progname); exit(1); } } jc = &sps[MI_SCREEN(mi)]; jc->glx_context = init_GL(mi); reshape_jigsaw (mi, MI_WIDTH(mi), MI_HEIGHT(mi)); if (!wire) { GLfloat pos[4] = {0.05, 0.07, 1.00, 0.0}; GLfloat amb[4] = {0.2, 0.2, 0.2, 1.0}; GLfloat dif[4] = {1.0, 1.0, 1.0, 1.0}; GLfloat spc[4] = {0.0, 1.0, 1.0, 1.0}; glLightfv(GL_LIGHT0, GL_POSITION, pos); glLightfv(GL_LIGHT0, GL_AMBIENT, amb); glLightfv(GL_LIGHT0, GL_DIFFUSE, dif); glLightfv(GL_LIGHT0, GL_SPECULAR, spc); } jc->trackball = gltrackball_init (False); 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_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 load_image (mi); } ENTRYPOINT void draw_jigsaw (ModeInfo *mi) { jigsaw_configuration *jc = &sps[MI_SCREEN(mi)]; Display *dpy = MI_DISPLAY(mi); Window window = MI_WINDOW(mi); int wire = MI_IS_WIREFRAME(mi); if (!jc->glx_context) return; glXMakeCurrent(MI_DISPLAY(mi), MI_WINDOW(mi), *(jc->glx_context)); glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); mi->polygon_count = 0; glPushMatrix (); /* glRotatef(current_device_rotation(), 0, 0, 1); */ gltrackball_rotate (jc->trackball); animate (mi); if (wobble_p && jc->puzzle) { double x, y, z; double max = 60; get_position (jc->rot, &x, &y, &z, !jc->button_down_p); x = 1; /* always lean back */ glRotatef (max/2 - x*max, 1, 0, 0); glRotatef (max/2 - z*max, 0, 1, 0); } 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); if (! wire) { glEnable (GL_TEXTURE_2D); glEnable (GL_BLEND); glEnable (GL_LIGHTING); glEnable (GL_LIGHT0); glBlendFunc (GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); } for (y = 0; y < jc->puzzle_height; y++) for (x = 0; x < jc->puzzle_width; x++) { puzzle_piece *p = &jc->puzzle [y * jc->puzzle_width + x]; glPushMatrix(); glTranslatef (p->current.x, p->current.y, p->current.z); glTranslatef (0.5, 0.5, 0); glRotatef (p->current.r, 0, 0, 1); glRotatef (p->tilt, 0, 1, 0); glTranslatef (-0.5, -0.5, 0); glCallList(p->dlist); mi->polygon_count += p->polys; glPopMatrix(); } } glPopMatrix (); if (mi->fps_p) do_fps (mi); glFinish(); glXSwapBuffers(dpy, window); } XSCREENSAVER_MODULE ("Jigsaw", jigsaw) #endif /* USE_GL */ xscreensaver-5.36/hacks/glx/photopile.c000644 000767 000024 00000054311 12736544250 020204 0ustar00jwzstaff000000 000000 /* photopile, Copyright (c) 2008-2015 Jens Kilian * Based on carousel, Copyright (c) 2005-2008 Jamie Zawinski * Loads a sequence of images and shuffles them into a pile. * * 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. */ #if defined(HAVE_COCOA) || defined(HAVE_ANDROID) # define DEF_FONT "OCR A Std 48, Lucida Console 48, Monaco 48" #else # define DEF_FONT "-*-helvetica-bold-r-normal-*-*-480-*-*-*-*-*-*" #endif #define DEFAULTS "*count: 7 \n" \ "*delay: 10000 \n" \ "*wireframe: False \n" \ "*showFPS: False \n" \ "*fpsSolid: True \n" \ "*useSHM: True \n" \ "*font: " DEF_FONT "\n" \ "*desktopGrabber: xscreensaver-getimage -no-desktop %s\n" \ "*grabDesktopImages: False \n" \ "*chooseRandomImages: True \n" \ "*suppressRotationAnimation: True\n" \ # define refresh_photopile 0 # define release_photopile 0 # define photopile_handle_event 0 #undef countof #define countof(x) (sizeof((x))/sizeof((*x))) #ifndef HAVE_JWXYZ # include /* for XrmDatabase in -debug mode */ #endif #include #include "xlockmore.h" #include "grab-ximage.h" #include "texfont.h" #include "dropshadow.h" #ifdef USE_GL # define DEF_SCALE "0.4" # define DEF_MAX_TILT "50" # define DEF_SPEED "1.0" # define DEF_DURATION "5" # define DEF_MIPMAP "True" # define DEF_TITLES "True" # define DEF_POLAROID "True" # define DEF_CLIP "True" # define DEF_SHADOWS "True" # define DEF_DEBUG "False" #define BELLRAND(n) ((frand((n)) + frand((n)) + frand((n))) / 3) typedef struct { GLfloat x, y; /* position on screen */ GLfloat angle; /* rotation angle */ } position; typedef struct { Bool loaded_p; /* true if image can be drawn */ char *title; /* the filename of this image */ int w, h; /* size in pixels of the image */ int tw, th; /* size in pixels of the texture */ XRectangle geom; /* where in the image the bits are */ position pos[4]; /* control points for calculating position */ GLuint texid; /* GL texture ID */ } image; typedef enum { EARLY, SHUFFLE, NORMAL, LOADING } fade_mode; static int fade_ticks = 60; typedef struct { ModeInfo *mi; GLXContext *glx_context; image *frames; /* pointer to array of images */ int nframe; /* image being (resp. next to be) loaded */ GLuint shadow; texture_font_data *texfont; int loading_sw, loading_sh; time_t last_time, now; int draw_tick; fade_mode mode; int mode_tick; } photopile_state; static photopile_state *sss = NULL; /* Command-line arguments */ static GLfloat scale; /* Scale factor for loading images. */ static GLfloat max_tilt; /* Maximum angle from vertical. */ static GLfloat speed; /* Animation speed scale factor. */ static int duration; /* Reload images after this long. */ static Bool mipmap_p; /* Use mipmaps instead of single textures. */ static Bool titles_p; /* Display image titles. */ static Bool polaroid_p; /* Use instant-film look for images. */ static Bool clip_p; /* Clip images instead of scaling for -polaroid. */ static Bool shadows_p; /* Draw drop shadows. */ static Bool debug_p; /* Be loud and do weird things. */ static XrmOptionDescRec opts[] = { {"-scale", ".scale", XrmoptionSepArg, 0 }, {"-maxTilt", ".maxTilt", XrmoptionSepArg, 0 }, {"-speed", ".speed", XrmoptionSepArg, 0 }, {"-duration", ".duration", XrmoptionSepArg, 0 }, {"-mipmaps", ".mipmap", XrmoptionNoArg, "True" }, {"-no-mipmaps", ".mipmap", XrmoptionNoArg, "False" }, {"-titles", ".titles", XrmoptionNoArg, "True" }, {"-no-titles", ".titles", XrmoptionNoArg, "False" }, {"-polaroid", ".polaroid", XrmoptionNoArg, "True" }, {"-no-polaroid", ".polaroid", XrmoptionNoArg, "False" }, {"-clip", ".clip", XrmoptionNoArg, "True" }, {"-no-clip", ".clip", XrmoptionNoArg, "False" }, {"-shadows", ".shadows", XrmoptionNoArg, "True" }, {"-no-shadows", ".shadows", XrmoptionNoArg, "False" }, {"-debug", ".debug", XrmoptionNoArg, "True" }, {"-font", ".font", XrmoptionSepArg, 0 }, }; static argtype vars[] = { { &scale, "scale", "Scale", DEF_SCALE, t_Float}, { &max_tilt, "maxTilt", "MaxTilt", DEF_MAX_TILT, t_Float}, { &speed, "speed", "Speed", DEF_SPEED, t_Float}, { &duration, "duration", "Duration", DEF_DURATION, t_Int}, { &mipmap_p, "mipmap", "Mipmap", DEF_MIPMAP, t_Bool}, { &titles_p, "titles", "Titles", DEF_TITLES, t_Bool}, { &polaroid_p, "polaroid", "Polaroid", DEF_POLAROID, t_Bool}, { &clip_p, "clip", "Clip", DEF_CLIP, t_Bool}, { &shadows_p, "shadows", "Shadows", DEF_SHADOWS, t_Bool}, { &debug_p, "debug", "Debug", DEF_DEBUG, t_Bool}, }; ENTRYPOINT ModeSpecOpt photopile_opts = {countof(opts), opts, countof(vars), vars, NULL}; /* Functions to interpolate between image positions. */ static position add_pos(position p, position q) { p.x += q.x; p.y += q.y; p.angle += q.angle; return p; } static position scale_pos(GLfloat t, position p) { p.x *= t; p.y *= t; p.angle *= t; return p; } static position linear_combination(GLfloat t, position p, position q) { return add_pos(scale_pos(1.0 - t, p), scale_pos(t, q)); } static position interpolate(GLfloat t, position p[4]) { /* de Casteljau's algorithm, 4 control points */ position p10 = linear_combination(t, p[0], p[1]); position p11 = linear_combination(t, p[1], p[2]); position p12 = linear_combination(t, p[2], p[3]); position p20 = linear_combination(t, p10, p11); position p21 = linear_combination(t, p11, p12); return linear_combination(t, p20, p21); } static position offset_pos(position p, GLfloat th, GLfloat r) { p.x += cos(th) * r; p.y += sin(th) * r; p.angle = (frand(2.0) - 1.0) * max_tilt; return p; } /* Calculate new positions for all images. */ static void set_new_positions(photopile_state *ss) { ModeInfo *mi = ss->mi; int i; for (i = 0; i < MI_COUNT(mi)+1; ++i) { image *frame = ss->frames + i; GLfloat w = frame->w; GLfloat h = frame->h; GLfloat d = sqrt(w*w + h*h); GLfloat leave = frand(M_PI * 2.0); GLfloat enter = frand(M_PI * 2.0); /* start position */ frame->pos[0] = frame->pos[3]; /* end position */ frame->pos[3].x = BELLRAND(MI_WIDTH(mi)); frame->pos[3].y = BELLRAND(MI_HEIGHT(mi)); frame->pos[3].angle = (frand(2.0) - 1.0) * max_tilt; /* Try to keep the images mostly inside the screen bounds */ frame->pos[3].x = MAX(0.5*w, MIN(MI_WIDTH(mi)-0.5*w, frame->pos[3].x)); frame->pos[3].y = MAX(0.5*h, MIN(MI_HEIGHT(mi)-0.5*h, frame->pos[3].y)); /* intermediate points */ frame->pos[1] = offset_pos(frame->pos[0], leave, d * (0.5 + frand(1.0))); frame->pos[2] = offset_pos(frame->pos[3], enter, d * (0.5 + frand(1.0))); } } /* Callback that tells us that the texture has been loaded. */ static void image_loaded_cb (const char *filename, XRectangle *geom, int image_width, int image_height, int texture_width, int texture_height, void *closure) { photopile_state *ss = (photopile_state *) closure; ModeInfo *mi = ss->mi; int wire = MI_IS_WIREFRAME(mi); image *frame = ss->frames + ss->nframe; if (wire) { if (random() % 2) { frame->w = (int)(MI_WIDTH(mi) * scale) - 1; frame->h = (int)(MI_HEIGHT(mi) * scale) - 1; } else { frame->w = (int)(MI_HEIGHT(mi) * scale) - 1; frame->h = (int)(MI_WIDTH(mi) * scale) - 1; } if (frame->w <= 10) frame->w = 10; if (frame->h <= 10) frame->h = 10; frame->geom.width = frame->w; frame->geom.height = frame->h; goto DONE; } if (image_width == 0 || image_height == 0) exit (1); glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, mipmap_p ? GL_LINEAR_MIPMAP_LINEAR : GL_LINEAR); glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT); glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT); frame->w = image_width; frame->h = image_height; frame->tw = texture_width; frame->th = texture_height; frame->geom = *geom; if (frame->title) free (frame->title); frame->title = (filename ? strdup (filename) : 0); /* xscreensaver-getimage returns paths relative to the image directory now, so leave the sub-directory part in. Unless it's an absolute path. */ if (frame->title && frame->title[0] == '/') { /* strip filename to part after last /. */ char *s = strrchr (frame->title, '/'); if (s) strcpy (frame->title, s+1); } if (debug_p) fprintf (stderr, "%s: loaded %4d x %-4d %4d x %-4d \"%s\"\n", progname, frame->geom.width, frame->geom.height, frame->tw, frame->th, (frame->title ? frame->title : "(null)")); DONE: frame->loaded_p = True; } /* Load a new file. */ static void load_image (ModeInfo *mi) { photopile_state *ss = &sss[MI_SCREEN(mi)]; int wire = MI_IS_WIREFRAME(mi); image *frame = ss->frames + ss->nframe; if (debug_p && !wire && frame->w != 0) fprintf (stderr, "%s: dropped %4d x %-4d %4d x %-4d \"%s\"\n", progname, frame->geom.width, frame->geom.height, frame->tw, frame->th, (frame->title ? frame->title : "(null)")); frame->loaded_p = False; if (wire) image_loaded_cb (0, 0, 0, 0, 0, 0, ss); else { int w = MI_WIDTH(mi); int h = MI_HEIGHT(mi); int size = (int)((w > h ? w : h) * scale); if (size <= 10) size = 10; load_texture_async (mi->xgwa.screen, mi->window, *ss->glx_context, size, size, mipmap_p, frame->texid, image_loaded_cb, ss); } } static void loading_msg (ModeInfo *mi) { photopile_state *ss = &sss[MI_SCREEN(mi)]; int wire = MI_IS_WIREFRAME(mi); const char text[] = "Loading..."; if (wire) return; if (ss->loading_sw == 0) /* only do this once */ { XCharStruct e; texture_string_metrics (ss->texfont, text, &e, 0, 0); ss->loading_sw = e.width; ss->loading_sh = e.ascent + e.descent; } glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glMatrixMode(GL_PROJECTION); glPushMatrix(); glLoadIdentity(); glMatrixMode(GL_MODELVIEW); glPushMatrix(); glLoadIdentity(); 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); glColor3f (1, 1, 0); glEnable (GL_TEXTURE_2D); glDisable (GL_DEPTH_TEST); print_texture_string (ss->texfont, text); glEnable (GL_DEPTH_TEST); glPopMatrix(); glMatrixMode(GL_PROJECTION); glPopMatrix(); glMatrixMode(GL_MODELVIEW); glFinish(); glXSwapBuffers (MI_DISPLAY (mi), MI_WINDOW(mi)); } static Bool loading_initial_image (ModeInfo *mi) { photopile_state *ss = &sss[MI_SCREEN(mi)]; if (ss->frames[ss->nframe].loaded_p) { /* The initial image has been fully loaded, start fading it in. */ int i; for (i = 0; i < ss->nframe; ++i) { ss->frames[i].pos[3].x = MI_WIDTH(mi) * 0.5; ss->frames[i].pos[3].y = MI_HEIGHT(mi) * 0.5; ss->frames[i].pos[3].angle = 0.0; } set_new_positions(ss); ss->mode = SHUFFLE; ss->mode_tick = fade_ticks / speed; } else { loading_msg(mi); } return (ss->mode == EARLY); } ENTRYPOINT void reshape_photopile (ModeInfo *mi, int width, int height) { glViewport (0, 0, (GLint) width, (GLint) height); glMatrixMode(GL_PROJECTION); glLoadIdentity(); glMatrixMode(GL_MODELVIEW); glLoadIdentity(); glOrtho(0, MI_WIDTH(mi), 0, MI_HEIGHT(mi), -1, 1); # ifdef HAVE_MOBILE /* Keep it the same relative size when rotated. */ { GLfloat h = MI_HEIGHT(mi) / (GLfloat) MI_WIDTH(mi); int o = (int) current_device_rotation(); if (o != 0 && o != 180 && o != -180) glScalef (1/h, h, 1); } # endif glClear(GL_COLOR_BUFFER_BIT); } /* Kludge to add "-v" to invocation of "xscreensaver-getimage" in -debug mode */ static void hack_resources (Display *dpy) { # ifndef HAVE_JWXYZ char *res = "desktopGrabber"; char *val = get_string_resource (dpy, res, "DesktopGrabber"); char buf1[255]; char buf2[255]; XrmValue value; XrmDatabase db = XtDatabase (dpy); sprintf (buf1, "%.100s.%.100s", progname, res); sprintf (buf2, "%.200s -v", val); value.addr = buf2; value.size = strlen(buf2); XrmPutResource (&db, buf1, "String", &value); # endif /* !HAVE_JWXYZ */ } ENTRYPOINT void init_photopile (ModeInfo *mi) { int screen = MI_SCREEN(mi); photopile_state *ss; int wire = MI_IS_WIREFRAME(mi); if (sss == NULL) { if ((sss = (photopile_state *) calloc (MI_NUM_SCREENS(mi), sizeof(photopile_state))) == NULL) return; } ss = &sss[screen]; ss->mi = mi; if ((ss->glx_context = init_GL(mi)) != NULL) { reshape_photopile (mi, MI_WIDTH(mi), MI_HEIGHT(mi)); clear_gl_error(); /* WTF? sometimes "invalid op" from glViewport! */ } else { MI_CLEARWINDOW(mi); } ss->shadow = init_drop_shadow(); ss->texfont = load_texture_font (MI_DISPLAY(mi), "font"); if (debug_p) hack_resources (MI_DISPLAY (mi)); ss->frames = (image *)calloc (MI_COUNT(mi) + 1, sizeof(image)); ss->nframe = 0; if (!wire) { int i; for (i = 0; i < MI_COUNT(mi) + 1; ++i) { glGenTextures (1, &(ss->frames[i].texid)); if (ss->frames[i].texid <= 0) abort(); } } ss->mode = EARLY; load_image(mi); /* start loading the first image */ } static void draw_image (ModeInfo *mi, int i, GLfloat t, GLfloat s, GLfloat z) { int wire = MI_IS_WIREFRAME(mi); photopile_state *ss = &sss[MI_SCREEN(mi)]; image *frame = ss->frames + i; position pos = interpolate(t, frame->pos); GLfloat w = frame->geom.width * 0.5; GLfloat h = frame->geom.height * 0.5; GLfloat z1 = z - 0.25 / (MI_COUNT(mi) + 1); GLfloat z2 = z - 0.5 / (MI_COUNT(mi) + 1); GLfloat w1 = w; GLfloat h1 = h; GLfloat h2 = h; if (polaroid_p) { GLfloat minSize = MIN(w, h); GLfloat maxSize = MAX(w, h); /* Clip or scale image to fit in the frame. */ if (clip_p) { w = h = minSize; } else { GLfloat scale = minSize / maxSize; w *= scale; h *= scale; } w1 = minSize * 1.16; /* enlarge frame border */ h1 = minSize * 1.5; h2 = w1; s /= 1.5; /* compensate for border size */ } glPushMatrix(); /* Position and scale this image. */ glTranslatef (pos.x, pos.y, 0); glRotatef (pos.angle, 0, 0, 1); glScalef (s, s, 1); /* Draw the drop shadow. */ if (shadows_p && !wire) { glColor3f (0, 0, 0); draw_drop_shadow(ss->shadow, -w1, -h1, z2, 2.0 * w1, h1 + h2, 20.0); glDisable (GL_BLEND); } glDisable (GL_LIGHTING); glEnable (GL_DEPTH_TEST); glDisable (GL_CULL_FACE); /* Draw the retro instant-film frame. */ if (polaroid_p) { if (! wire) { glShadeModel (GL_SMOOTH); glEnable (GL_LINE_SMOOTH); glHint (GL_LINE_SMOOTH_HINT, GL_NICEST); glColor3f (1, 1, 1); glBegin (GL_QUADS); glVertex3f (-w1, -h1, z2); glVertex3f ( w1, -h1, z2); glVertex3f ( w1, h2, z2); glVertex3f (-w1, h2, z2); glEnd(); } glLineWidth (1.0); glColor3f (0.5, 0.5, 0.5); glBegin (GL_LINE_LOOP); glVertex3f (-w1, -h1, z); glVertex3f ( w1, -h1, z); glVertex3f ( w1, h2, z); glVertex3f (-w1, h2, z); glEnd(); } /* Draw the image quad. */ if (! wire) { GLfloat texw = w / frame->tw; GLfloat texh = h / frame->th; GLfloat texx = (frame->geom.x + 0.5 * frame->geom.width) / frame->tw; GLfloat texy = (frame->geom.y + 0.5 * frame->geom.height) / frame->th; glBindTexture (GL_TEXTURE_2D, frame->texid); glEnable (GL_TEXTURE_2D); glColor3f (1, 1, 1); glBegin (GL_QUADS); glTexCoord2f (texx - texw, texy + texh); glVertex3f (-w, -h, z1); glTexCoord2f (texx + texw, texy + texh); glVertex3f ( w, -h, z1); glTexCoord2f (texx + texw, texy - texh); glVertex3f ( w, h, z1); glTexCoord2f (texx - texw, texy - texh); glVertex3f (-w, h, z1); glEnd(); glDisable (GL_TEXTURE_2D); } /* Draw a box around it. */ if (! wire) { glShadeModel (GL_SMOOTH); glEnable (GL_LINE_SMOOTH); glHint (GL_LINE_SMOOTH_HINT, GL_NICEST); } glLineWidth (1.0); glColor3f (0.5, 0.5, 0.5); glBegin (GL_LINE_LOOP); glVertex3f (-w, -h, z); glVertex3f ( w, -h, z); glVertex3f ( w, h, z); glVertex3f (-w, h, z); glEnd(); /* Draw a title under the image. */ if (titles_p) { int sw = 0, sh = 0; int ascent, descent; GLfloat tw = w * 2; GLfloat th = h1 - h; GLfloat scale = 1; const char *title = frame->title ? frame->title : "(untitled)"; XCharStruct e; texture_string_metrics (ss->texfont, title, &e, &ascent, &descent); sw = e.width; sh = ascent; /* + descent; */ /* Scale the text to match the pixel size of the photo */ scale *= w / 150.0; # if defined(HAVE_COCOA) scale /= 2; # endif # if defined(HAVE_MOBILE) scale /= 2; # endif /* Clip characters off the left end of the string until it fits. */ if (clip_p || polaroid_p) while (sw * scale > tw && strlen (title) > 10) { title++; texture_string_metrics (ss->texfont, title, &e, &ascent, &descent); sw = e.width; } if (th <= 0) /* Non-polaroid */ th = -sh * 1.2; glTranslatef (-w, -h1, 0); glTranslatef ((tw - sw*scale) / 2, (th - sh*scale) / 2, 0); glScalef (scale, scale, 1); if (wire || !polaroid_p) { glColor3f (1, 1, 1); } else { glColor3f (0.5, 0.5, 0.5); } if (!wire) { glEnable (GL_TEXTURE_2D); glEnable (GL_BLEND); glDisable (GL_DEPTH_TEST); print_texture_string (ss->texfont, title); glEnable (GL_DEPTH_TEST); } else { glBegin (GL_LINE_LOOP); glVertex3f (0, 0, 0); glVertex3f (sw, 0, 0); glVertex3f (sw, sh, 0); glVertex3f (0, sh, 0); glEnd(); } } glPopMatrix(); } ENTRYPOINT void draw_photopile (ModeInfo *mi) { photopile_state *ss = &sss[MI_SCREEN(mi)]; int i; if (!ss->glx_context) return; glXMakeCurrent(MI_DISPLAY(mi), MI_WINDOW(mi), *(ss->glx_context)); if (ss->mode == EARLY) if (loading_initial_image (mi)) return; /* Only check the wall clock every 10 frames */ if (ss->now == 0 || ss->draw_tick++ > 10) { ss->now = time((time_t *) 0); if (ss->last_time == 0) ss->last_time = ss->now; ss->draw_tick = 0; } glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); { GLfloat t; glPushMatrix(); glTranslatef (MI_WIDTH(mi)/2, MI_HEIGHT(mi)/2, 0); glRotatef(current_device_rotation(), 0, 0, 1); glTranslatef (-MI_WIDTH(mi)/2, -MI_HEIGHT(mi)/2, 0); /* Handle state transitions. */ switch (ss->mode) { case SHUFFLE: if (--ss->mode_tick <= 0) { ss->nframe = (ss->nframe+1) % (MI_COUNT(mi)+1); ss->mode = NORMAL; ss->last_time = time((time_t *) 0); } break; case NORMAL: if (ss->now - ss->last_time > duration) { ss->mode = LOADING; load_image(mi); } break; case LOADING: if (ss->frames[ss->nframe].loaded_p) { set_new_positions(ss); ss->mode = SHUFFLE; ss->mode_tick = fade_ticks / speed; } break; default: abort(); } t = 1.0 - ss->mode_tick / (fade_ticks / speed); t = 0.5 * (1.0 - cos(M_PI * t)); /* Draw the images. */ for (i = 0; i < MI_COUNT(mi) + (ss->mode == SHUFFLE); ++i) { int j = (ss->nframe + i + 1) % (MI_COUNT(mi) + 1); if (ss->frames[j].loaded_p) { GLfloat s = 1.0; GLfloat z = (GLfloat)i / (MI_COUNT(mi) + 1); switch (ss->mode) { case SHUFFLE: if (i == MI_COUNT(mi)) { s *= t; } else if (i == 0) { s *= 1.0 - t; } break; case NORMAL: case LOADING: t = 1.0; break; default: abort(); } draw_image(mi, j, t, s, z); } } glPopMatrix(); } if (mi->fps_p) do_fps (mi); glFinish(); glXSwapBuffers (MI_DISPLAY (mi), MI_WINDOW(mi)); } XSCREENSAVER_MODULE ("Photopile", photopile) #endif /* USE_GL */ xscreensaver-5.36/hacks/glx/dropshadow.c000644 000767 000024 00000017141 12701612217 020342 0ustar00jwzstaff000000 000000 /* dropshadow.c, Copyright (c) 2009 Jens Kilian * * 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. */ #ifdef HAVE_CONFIG_H # include "config.h" #endif /* HAVE_CONFIG_H */ #include #include "dropshadow.h" /* (Alpha) texture data for drop shadow. */ static int drop_shadow_width = 32; static int drop_shadow_height = 32; static unsigned char drop_shadow_data[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 3, 3, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 3, 3, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 3, 4, 6, 7, 9, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 9, 7, 6, 4, 3, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 3, 5, 9, 13, 16, 19, 19, 21, 21, 22, 22, 22, 22, 21, 21, 19, 19, 16, 13, 9, 5, 3, 1, 1, 0, 0, 0, 0, 0, 1, 1, 3, 5, 10, 16, 22, 28, 32, 35, 37, 37, 38, 38, 38, 38, 37, 37, 35, 32, 28, 22, 16, 10, 5, 3, 1, 1, 0, 0, 0, 0, 1, 1, 4, 9, 16, 25, 34, 43, 50, 55, 58, 59, 60, 60, 60, 60, 59, 58, 55, 50, 43, 34, 25, 16, 9, 4, 1, 1, 0, 0, 0, 0, 1, 3, 6, 13, 22, 34, 48, 61, 70, 77, 80, 82, 83, 84, 84, 83, 82, 80, 77, 70, 61, 48, 34, 22, 13, 6, 3, 1, 0, 0, 0, 0, 1, 3, 7, 16, 28, 43, 61, 76, 88, 97, 102, 103, 104, 104, 104, 104, 103, 102, 97, 88, 76, 61, 43, 28, 16, 7, 3, 1, 0, 0, 0, 1, 1, 4, 9, 19, 32, 51, 70, 88, 103, 112, 117, 120, 121, 121, 121, 121, 120, 117, 112, 103, 88, 70, 51, 32, 19, 9, 4, 1, 1, 0, 0, 1, 1, 4, 10, 20, 35, 55, 77, 97, 112, 122, 128, 130, 132, 133, 133, 132, 130, 128, 122, 112, 97, 77, 55, 35, 20, 10, 4, 1, 1, 0, 0, 1, 1, 4, 10, 21, 37, 58, 80, 101, 117, 128, 134, 137, 138, 139, 139, 138, 137, 134, 128, 117, 101, 80, 58, 37, 21, 10, 4, 1, 0, 0, 0, 0, 1, 4, 10, 21, 38, 59, 82, 103, 119, 130, 137, 139, 141, 142, 142, 141, 139, 137, 130, 119, 103, 82, 59, 38, 21, 10, 4, 1, 0, 0, 0, 0, 1, 4, 10, 22, 38, 59, 83, 104, 121, 132, 139, 141, 142, 142, 142, 142, 141, 139, 132, 121, 104, 83, 59, 38, 22, 10, 4, 1, 0, 0, 0, 0, 1, 4, 10, 22, 38, 60, 84, 104, 121, 133, 139, 142, 142, 142, 142, 142, 142, 139, 133, 121, 104, 84, 60, 38, 22, 10, 4, 1, 0, 0, 0, 0, 1, 4, 10, 22, 38, 60, 84, 104, 121, 133, 139, 142, 142, 142, 142, 142, 142, 139, 133, 121, 104, 84, 60, 38, 22, 10, 4, 1, 0, 0, 0, 0, 1, 4, 10, 22, 38, 59, 83, 104, 121, 132, 139, 141, 142, 142, 142, 142, 141, 139, 132, 121, 104, 83, 59, 38, 22, 10, 4, 1, 0, 0, 0, 0, 1, 4, 10, 21, 38, 59, 82, 103, 119, 130, 137, 139, 141, 142, 142, 141, 139, 137, 130, 119, 103, 82, 59, 38, 21, 10, 4, 1, 0, 0, 0, 1, 1, 4, 10, 21, 37, 58, 80, 101, 118, 128, 134, 137, 139, 139, 139, 139, 137, 134, 128, 117, 102, 80, 58, 37, 21, 10, 4, 1, 0, 0, 0, 1, 1, 4, 10, 20, 35, 55, 77, 97, 112, 122, 128, 130, 132, 133, 133, 132, 130, 128, 122, 112, 97, 77, 55, 35, 20, 10, 4, 1, 1, 0, 0, 1, 1, 4, 9, 19, 32, 51, 70, 88, 103, 112, 117, 120, 121, 121, 121, 121, 120, 117, 112, 103, 88, 70, 51, 32, 19, 9, 4, 1, 1, 0, 0, 0, 1, 3, 7, 16, 28, 43, 61, 76, 88, 97, 102, 103, 104, 104, 104, 104, 103, 102, 97, 88, 76, 61, 43, 28, 16, 7, 3, 1, 0, 0, 0, 0, 1, 3, 6, 13, 22, 34, 48, 61, 70, 77, 80, 82, 83, 84, 84, 83, 82, 80, 77, 70, 61, 48, 34, 22, 13, 6, 3, 1, 0, 0, 0, 0, 1, 1, 4, 9, 16, 25, 34, 43, 50, 55, 58, 59, 60, 60, 60, 60, 59, 58, 55, 50, 43, 34, 25, 16, 9, 4, 1, 1, 0, 0, 0, 0, 1, 1, 3, 5, 10, 16, 22, 28, 32, 35, 37, 37, 38, 38, 38, 38, 37, 37, 35, 32, 28, 22, 16, 10, 5, 3, 1, 1, 0, 0, 0, 0, 0, 1, 1, 3, 5, 9, 13, 16, 19, 19, 21, 21, 22, 22, 22, 22, 21, 21, 19, 19, 16, 13, 9, 5, 3, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 3, 4, 6, 7, 9, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 9, 7, 6, 4, 3, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 3, 3, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 3, 3, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }; GLuint init_drop_shadow(void) { GLuint t; glGenTextures (1, &t); if (t <= 0) abort(); glBindTexture (GL_TEXTURE_2D, t); #if 0 glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_LINEAR); gluBuild2DMipmaps (GL_TEXTURE_2D, GL_ALPHA, drop_shadow_width, drop_shadow_height, GL_ALPHA, GL_UNSIGNED_BYTE, drop_shadow_data); #else glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); glTexImage2D (GL_TEXTURE_2D, 0, GL_ALPHA, drop_shadow_width, drop_shadow_height, 0, GL_ALPHA, GL_UNSIGNED_BYTE, drop_shadow_data); #endif return t; } void draw_drop_shadow (GLuint t, GLfloat x, GLfloat y, GLfloat z, GLfloat w, GLfloat h, GLfloat r) { /* Inner and outer boundaries of shadow. */ const GLfloat li = x, lo = li - r; const GLfloat ri = x + w, ro = ri + r; const GLfloat bi = y, bo = bi - r; const GLfloat ti = y + h, to = ti + r; glEnable (GL_BLEND); glBlendFunc (GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); glEnable (GL_TEXTURE_2D); glBindTexture (GL_TEXTURE_2D, t); glBegin (GL_QUADS); /* There's likely a better way to do this... */ glTexCoord2f (0.0, 0.0); glVertex3f (lo, bo, z); glTexCoord2f (0.5, 0.0); glVertex3f (li, bo, z); glTexCoord2f (0.5, 0.5); glVertex3f (li, bi, z); glTexCoord2f (0.0, 0.5); glVertex3f (lo, bi, z); glTexCoord2f (0.5, 0.0); glVertex3f (li, bo, z); glTexCoord2f (0.5, 0.0); glVertex3f (ri, bo, z); glTexCoord2f (0.5, 0.5); glVertex3f (ri, bi, z); glTexCoord2f (0.5, 0.5); glVertex3f (li, bi, z); glTexCoord2f (0.5, 0.0); glVertex3f (ri, bo, z); glTexCoord2f (1.0, 0.0); glVertex3f (ro, bo, z); glTexCoord2f (1.0, 0.5); glVertex3f (ro, bi, z); glTexCoord2f (0.5, 0.5); glVertex3f (ri, bi, z); glTexCoord2f (0.5, 0.5); glVertex3f (ri, bi, z); glTexCoord2f (1.0, 0.5); glVertex3f (ro, bi, z); glTexCoord2f (1.0, 0.5); glVertex3f (ro, ti, z); glTexCoord2f (0.5, 0.5); glVertex3f (ri, ti, z); glTexCoord2f (0.5, 0.5); glVertex3f (ri, ti, z); glTexCoord2f (1.0, 0.5); glVertex3f (ro, ti, z); glTexCoord2f (1.0, 1.0); glVertex3f (ro, to, z); glTexCoord2f (0.5, 1.0); glVertex3f (ri, to, z); glTexCoord2f (0.5, 0.5); glVertex3f (li, ti, z); glTexCoord2f (0.5, 0.5); glVertex3f (ri, ti, z); glTexCoord2f (0.5, 1.0); glVertex3f (ri, to, z); glTexCoord2f (0.5, 1.0); glVertex3f (li, to, z); glTexCoord2f (0.0, 0.5); glVertex3f (lo, ti, z); glTexCoord2f (0.5, 0.5); glVertex3f (li, ti, z); glTexCoord2f (0.5, 1.0); glVertex3f (li, to, z); glTexCoord2f (0.0, 1.0); glVertex3f (lo, to, z); glTexCoord2f (0.0, 0.5); glVertex3f (lo, bi, z); glTexCoord2f (0.5, 0.5); glVertex3f (li, bi, z); glTexCoord2f (0.5, 0.5); glVertex3f (li, ti, z); glTexCoord2f (0.0, 0.5); glVertex3f (lo, ti, z); glEnd(); } xscreensaver-5.36/hacks/glx/rubikblocks.c000644 000767 000024 00000043225 12710313223 020477 0ustar00jwzstaff000000 000000 /* rubikblocks, Copyright (c) 2009 Vasek Potocek * * 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. */ /* RubikBlocks - a Rubik's Mirror Blocks puzzle introduced in 2008. * No mirrors in this version, though, hence the altered name. */ /* TODO: * add reflection to the faces */ #define DEFAULTS "*delay: 20000 \n" \ "*showFPS: False \n" \ "*wireframe: False \n" \ "*suppressRotationAnimation: True\n" \ # define refresh_rubikblocks 0 #include "xlockmore.h" #include "rotator.h" #include "gltrackball.h" #ifdef USE_GL #define DEF_SPIN "True" #define DEF_WANDER "True" #define DEF_TEXTURE "True" #define DEF_RANDOMIZE "False" #define DEF_SPINSPEED "0.1" #define DEF_ROTSPEED "3.0" #define DEF_WANDERSPEED "0.005" #define DEF_WAIT "40.0" #define DEF_CUBESIZE "1.0" #define SHUFFLE 100 #define TEX_WIDTH 64 #define TEX_HEIGHT 64 #define BORDER 5 #define BORDER2 (BORDER*BORDER) #undef countof #define countof(x) (sizeof((x))/sizeof((*x))) #define rnd01() ((int)(random()%2)) /*************************************************************************/ static Bool spin, wander, rndstart, tex; static float spinspeed, tspeed, wspeed, twait, size; static argtype vars[] = { { &spin, "spin", "Spin", DEF_SPIN, t_Bool}, { &wander, "wander", "Wander", DEF_WANDER, t_Bool}, { &rndstart, "randomize", "Randomize", DEF_RANDOMIZE, t_Bool}, { &tex, "texture", "Texture", DEF_TEXTURE, t_Bool}, { &spinspeed, "spinspeed", "SpinSpeed", DEF_SPINSPEED, t_Float}, { &tspeed, "rotspeed", "RotSpeed", DEF_ROTSPEED, t_Float}, { &wspeed, "wanderspeed", "WanderSpeed", DEF_WANDERSPEED, t_Float}, { &twait, "wait", "Wait", DEF_WAIT, t_Float}, { &size, "cubesize", "CubeSize", DEF_CUBESIZE, t_Float}, }; static XrmOptionDescRec opts[] = { { "-spin", ".spin", XrmoptionNoArg, "True" }, { "+spin", ".spin", XrmoptionNoArg, "False" }, { "-wander", ".wander", XrmoptionNoArg, "True" }, { "+wander", ".wander", XrmoptionNoArg, "False" }, { "-randomize", ".randomize", XrmoptionNoArg, "True" }, { "+randomize", ".randomize", XrmoptionNoArg, "False" }, { "-texture", ".texture", XrmoptionNoArg, "True" }, { "+texture", ".texture", XrmoptionNoArg, "False" }, { "-spinspeed", ".spinspeed", XrmoptionSepArg, 0 }, { "-wanderspeed", ".wanderspeed", XrmoptionSepArg, 0 }, { "-rotspeed", ".rotspeed", XrmoptionSepArg, 0 }, { "-wait", ".wait", XrmoptionSepArg, 0 }, { "-cubesize", ".cubesize", XrmoptionSepArg, 0 }, }; ENTRYPOINT ModeSpecOpt rubikblocks_opts = {countof(opts), opts, countof(vars), vars, NULL}; #ifdef USE_MODULES ModStruct rubikblocks_description = { "rubikblocks", "init_rubikblocks", "draw_rubikblocks", "release_rubikblocks", "draw_rubikblocks", "change_rubikblocks", NULL, &rubikblocks_opts, 25000, 1, 1, 1, 1.0, 4, "", "Shows randomly shuffling Rubik's Mirror Blocks puzzle", 0, NULL }; #endif typedef struct { float pos[3]; /* _original_ position */ float qr[4]; /* quaternion of rotation */ Bool act; /* flag if it is undergoing the current rotation */ } piece_t; typedef struct { GLXContext *glx_context; rotator *rot; trackball_state *trackball; GLfloat ratio; Bool button_down; Bool pause; /* pause between two rotations */ float qfram[4]; /* quaternion describing the rotation in one anim. frame */ GLfloat t, tmax; /* rotation clock */ piece_t pieces[27]; /* type and tilt of all the pieces */ unsigned char texture[TEX_HEIGHT][TEX_WIDTH]; GLuint list_base; Bool wire; } rubikblocks_conf; static rubikblocks_conf *rubikblocks = NULL; static const GLfloat shininess = 20.0; static const GLfloat ambient[] = {0.0, 0.0, 0.0, 1.0}; static const GLfloat diffuse[] = {1.0, 1.0, 1.0, 1.0}; static const GLfloat position0[] = {1.0, 1.0, 1.0, 0.0}; static const GLfloat position1[] = {-1.0, -1.0, 1.0, 0.0}; static const GLfloat lmodel_ambient[] = {0.1, 0.1, 0.1, 1.0}; static const GLfloat material_ambient[] = {0.7, 0.7, 0.7, 1.0}; static const GLfloat material_diffuse[] = {0.7, 0.7, 0.7, 1.0}; static const GLfloat material_specular[] = {0.2, 0.2, 0.2, 1.0}; /*************************************************************************/ /* Multiplies two quaternions, src*dest, and stores the result in dest. */ static void mult_quat(float src[4], float dest[4]) { float r, i, j, k; r = src[0]*dest[0] - src[1]*dest[1] - src[2]*dest[2] - src[3]*dest[3]; i = src[0]*dest[1] + src[1]*dest[0] + src[2]*dest[3] - src[3]*dest[2]; j = src[0]*dest[2] + src[2]*dest[0] + src[3]*dest[1] - src[1]*dest[3]; k = src[0]*dest[3] + src[3]*dest[0] + src[1]*dest[2] - src[2]*dest[1]; dest[0] = r; dest[1] = i; dest[2] = j; dest[3] = k; } /* Sets the 'act' flag for pieces which will undergo the rotation. */ static void flag_pieces(piece_t pieces[27], int axis, int side) { int i, j; float q[4]; for(i = 0; i < 27; i++) { q[0] = 0; q[1] = pieces[i].pos[0]; q[2] = pieces[i].pos[1]; q[3] = pieces[i].pos[2]; mult_quat(pieces[i].qr, q); for(j = 1; j < 4; j++) q[j] = -q[j]; mult_quat(pieces[i].qr, q); for(j = 1; j < 4; j++) q[j] = -q[j]; if(fabs(q[axis] - side) < 0.1) pieces[i].act = True; else pieces[i].act = False; } } /* "Rounds" the value to the nearest from the set {0, +-1/2, +-1/sqrt(2), +-1}. * It is guaranteed to be pretty close to one when this function is called. */ static float settle_value(float v) { if(v > 0.9) return 1; else if(v < -0.9) return -1; else if(v > 0.6) return M_SQRT1_2; else if(v < -0.6) return -M_SQRT1_2; else if(v > 0.4) return 0.5; else if(v < -0.4) return -0.5; else return 0; } static void randomize(rubikblocks_conf *cp) { int axis, side; int i, j; for(i = 0; i < SHUFFLE; i++) { axis = (random()%3)+1; side = rnd01()*2-1; flag_pieces(cp->pieces, axis, side); for(j = 1; j < 4; j++) cp->qfram[j] = 0; cp->qfram[0] = M_SQRT1_2; cp->qfram[axis] = M_SQRT1_2; for(j = 0; j < 27; j++) { if(cp->pieces[j].act) mult_quat(cp->qfram, cp->pieces[j].qr); } } } static void finish(rubikblocks_conf *cp) { static int axis = 1; int side, angle; int i, j; if(cp->pause) { switch(axis) { case 1: axis = rnd01()+2; break; case 2: axis = 2*rnd01()+1; break; default: axis = rnd01()+1; } side = rnd01()*2-1; angle = rnd01()+1; flag_pieces(cp->pieces, axis, side); cp->pause = False; cp->tmax = 90.0*angle; for(i = 1; i < 4; i++) cp->qfram[i] = 0; cp->qfram[0] = cos(tspeed*M_PI/360); cp->qfram[axis] = sin((rnd01()*2-1)*tspeed*M_PI/360); } else { for(i = 0; i < 27; i++) { for(j = 0; j < 4; j++) { cp->pieces[i].qr[j] = settle_value(cp->pieces[i].qr[j]); } } cp->pause = True; cp->tmax = twait; } cp->t = 0; } static Bool draw_main(ModeInfo *mi, rubikblocks_conf *cp) { int i; double x, y, z; glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glLoadIdentity(); get_position(cp->rot, &x, &y, &z, !cp->button_down); glTranslatef((x-0.5)*6, (y-0.5)*6, -20); gltrackball_rotate(cp->trackball); get_rotation(cp->rot, &x, &y, &z, !cp->button_down); glRotatef(x*360, 1, 0, 0); glRotatef(y*360, 0, 1, 0); glRotatef(z*360, 0, 0, 1); glScalef(size, size, size); # ifdef HAVE_MOBILE /* Keep it the same relative size when rotated. */ { GLfloat h = MI_HEIGHT(mi) / (GLfloat) MI_WIDTH(mi); int o = (int) current_device_rotation(); if (o != 0 && o != 180 && o != -180) glScalef (1/h, 1/h, 1/h); } # endif if(cp->wire) glColor3f(0.7, 0.7, 0.7); if(!cp->pause) for(i = 0; i < 27; i++) if(cp->pieces[i].act) mult_quat(cp->qfram, cp->pieces[i].qr); for(i = 0; i < 27; i++) { glPushMatrix(); if(fabs(cp->pieces[i].qr[0]) < 1) glRotatef(360/M_PI*acos(cp->pieces[i].qr[0]), cp->pieces[i].qr[1], cp->pieces[i].qr[2], cp->pieces[i].qr[3]); glCallList(cp->list_base + i); glPopMatrix(); } if((cp->t += tspeed) > cp->tmax) finish(cp); return True; } static void draw_horz_line(rubikblocks_conf *cp, int x1, int x2, int y) { int x, y0 = y, w; if(y < BORDER) y = -y; else y = -BORDER; for(; y < BORDER; y++) { if(y0+y >= TEX_HEIGHT) break; w = y*y*255/BORDER2; for(x = x1; x <= x2; x++) if(cp->texture[y0+y][x]>w) cp->texture[y0+y][x] = w; } } static void draw_vert_line(rubikblocks_conf *cp, int x, int y1, int y2) { int x0 = x, y, w; if(x= TEX_WIDTH) break; w = x*x*255/BORDER2; for(y = y1; y <= y2; y++) if(cp->texture[y][x0+x]>w) cp->texture[y][x0+x] = w; } } static void make_texture(rubikblocks_conf *cp) { int x, y; for(y = 0; y < TEX_HEIGHT; y++) for(x = 0; x < TEX_WIDTH; x++) cp->texture[y][x] = 255; draw_horz_line(cp, 0, TEX_WIDTH-1, 0); draw_horz_line(cp, 0, TEX_WIDTH-1, TEX_HEIGHT-1); draw_vert_line(cp, 0, 0, TEX_HEIGHT-1); draw_vert_line(cp, TEX_WIDTH-1, 0, TEX_HEIGHT-1); } /* These simple transforms make the actual shape of the pieces. The parameters * A, B and C affect the excentricity of the pieces in each direction. */ static float fx(float x) { const float A = 0.5; if(x > 1.4) return 1.5 - A; else if(x < -1.4) return -1.5 - A; else return x; } static float fy(float y) { const float B = 0.25; if(y > 1.4) return 1.5 - B; else if(y < -1.4) return -1.5 - B; else return y; } static float fz(float z) { const float C = 0.0; if(z > 1.4) return 1.5 - C; else if(z < -1.4) return -1.5 - C; else return z; } static void init_lists(rubikblocks_conf *cp) { GLuint base; int i; float x, y, z; base = cp->list_base = glGenLists(27); for(i = 0; i < 27; i++) { x = cp->pieces[i].pos[0]; y = cp->pieces[i].pos[1]; z = cp->pieces[i].pos[2]; glNewList(base+i, GL_COMPILE); glBegin(GL_QUAD_STRIP); glNormal3f(1, 0, 0); glTexCoord2f(0, 0); glVertex3f(fx(x+0.5), fy(y-0.5), fz(z-0.5)); glTexCoord2f(0, 1); glVertex3f(fx(x+0.5), fy(y+0.5), fz(z-0.5)); glTexCoord2f(1, 0); glVertex3f(fx(x+0.5), fy(y-0.5), fz(z+0.5)); glTexCoord2f(1, 1); glVertex3f(fx(x+0.5), fy(y+0.5), fz(z+0.5)); glNormal3f(0, 0, 1); glTexCoord2f(0, 0); glVertex3f(fx(x-0.5), fy(y-0.5), fz(z+0.5)); glTexCoord2f(0, 1); glVertex3f(fx(x-0.5), fy(y+0.5), fz(z+0.5)); glNormal3f(-1, 0, 0); glTexCoord2f(1, 0); glVertex3f(fx(x-0.5), fy(y-0.5), fz(z-0.5)); glTexCoord2f(1, 1); glVertex3f(fx(x-0.5), fy(y+0.5), fz(z-0.5)); glNormal3f(0, 0, -1); glTexCoord2f(0, 0); glVertex3f(fx(x+0.5), fy(y-0.5), fz(z-0.5)); glTexCoord2f(0, 1); glVertex3f(fx(x+0.5), fy(y+0.5), fz(z-0.5)); glEnd(); glBegin(GL_QUADS); glNormal3f(0, 1, 0); glTexCoord2f(0, 0); glVertex3f(fx(x+0.5), fy(y+0.5), fz(z+0.5)); glTexCoord2f(0, 1); glVertex3f(fx(x+0.5), fy(y+0.5), fz(z-0.5)); glTexCoord2f(1, 1); glVertex3f(fx(x-0.5), fy(y+0.5), fz(z-0.5)); glTexCoord2f(1, 0); glVertex3f(fx(x-0.5), fy(y+0.5), fz(z+0.5)); glNormal3f(0, -1, 0); glTexCoord2f(0, 0); glVertex3f(fx(x+0.5), fy(y-0.5), fz(z-0.5)); glTexCoord2f(0, 1); glVertex3f(fx(x+0.5), fy(y-0.5), fz(z+0.5)); glTexCoord2f(1, 1); glVertex3f(fx(x-0.5), fy(y-0.5), fz(z+0.5)); glTexCoord2f(1, 0); glVertex3f(fx(x-0.5), fy(y-0.5), fz(z-0.5)); glEnd(); glEndList(); } } /* It looks terrible... FIXME: any other ideas, maybe some anisotropic filtering? */ /*#define MIPMAP*/ static void init_gl(ModeInfo *mi) { rubikblocks_conf *cp = &rubikblocks[MI_SCREEN(mi)]; #ifdef MIPMAP int status; #endif cp->wire = MI_IS_WIREFRAME(mi); # ifdef HAVE_JWZGLES /* #### glPolygonMode other than GL_FILL unimplemented */ cp->wire = 0; # endif if(MI_IS_MONO(mi)) tex = False; if(cp->wire) { glPolygonMode(GL_FRONT_AND_BACK, GL_LINE); return; } glClearDepth(1.0); glDrawBuffer(GL_BACK); glPixelStorei(GL_UNPACK_ALIGNMENT, 1); glShadeModel(GL_FLAT); glDepthFunc(GL_LESS); glLightfv(GL_LIGHT0, GL_AMBIENT, ambient); glLightfv(GL_LIGHT0, GL_DIFFUSE, diffuse); glLightfv(GL_LIGHT0, GL_POSITION, position0); glLightfv(GL_LIGHT1, GL_AMBIENT, ambient); glLightfv(GL_LIGHT1, GL_DIFFUSE, diffuse); glLightfv(GL_LIGHT1, GL_POSITION, position1); glLightModelfv(GL_LIGHT_MODEL_AMBIENT, lmodel_ambient); glLightModeli(GL_LIGHT_MODEL_TWO_SIDE, GL_FALSE); glEnable(GL_DEPTH_TEST); glEnable(GL_LIGHT0); glEnable(GL_LIGHT1); glEnable(GL_LIGHTING); glEnable(GL_NORMALIZE); glEnable(GL_COLOR_MATERIAL); glMaterialfv(GL_FRONT_AND_BACK, GL_AMBIENT, material_ambient); glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, material_diffuse); glMaterialfv(GL_FRONT_AND_BACK, GL_SPECULAR, material_specular); glMaterialf(GL_FRONT_AND_BACK, GL_SHININESS, shininess); if (!tex) return; glEnable(GL_TEXTURE_2D); #ifdef MIPMAP clear_gl_error(); status = gluBuild2DMipmaps(GL_TEXTURE_2D, 1, TEX_WIDTH, TEX_HEIGHT, GL_LUMINANCE, GL_UNSIGNED_BYTE, cp->texture); if (status) { const char *s = (char *)gluErrorString(status); fprintf (stderr, "%s: error mipmapping texture: %s\n", progname, (s?s:"(unknown)")); exit (1); } check_gl_error("mipmapping"); #else glTexImage2D(GL_TEXTURE_2D, 0, 1, TEX_WIDTH, TEX_HEIGHT, 0, GL_LUMINANCE, GL_UNSIGNED_BYTE, cp->texture); #endif glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE); glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP); glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP); glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); #ifdef MIPMAP glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_LINEAR); #else glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); #endif } static void init_cp(rubikblocks_conf *cp) { int i, j, k, m; cp->pause = True; cp->t = 0.0; cp->tmax = twait; for(i = -1, m = 0; i <= 1; i++) for(j = -1; j <= 1; j++) for(k = -1; k <= 1; k++) { cp->pieces[m].pos[0] = k; cp->pieces[m].pos[1] = j; cp->pieces[m].pos[2] = i; cp->pieces[m].qr[0] = 1; cp->pieces[m].qr[1] = 0; cp->pieces[m].qr[2] = 0; cp->pieces[m].qr[3] = 0; m++; } cp->rot = make_rotator(spin?spinspeed:0, spin?spinspeed:0, spin?spinspeed:0, 0.1, wander?wspeed:0, True); cp->trackball = gltrackball_init(True); if(rndstart) randomize(cp); } /*************************************************************************/ ENTRYPOINT void reshape_rubikblocks(ModeInfo *mi, int width, int height) { rubikblocks_conf *cp = &rubikblocks[MI_SCREEN(mi)]; if(!height) height = 1; cp->ratio = (GLfloat)width/(GLfloat)height; glViewport(0, 0, (GLint) width, (GLint) height); glMatrixMode(GL_PROJECTION); glLoadIdentity(); gluPerspective(30.0, cp->ratio, 1.0, 100.0); glMatrixMode(GL_MODELVIEW); glClear(GL_COLOR_BUFFER_BIT); } ENTRYPOINT void release_rubikblocks(ModeInfo *mi) { if (rubikblocks != NULL) { int screen; for (screen = 0; screen < MI_NUM_SCREENS(mi); screen++) { rubikblocks_conf *cp = &rubikblocks[screen]; if (cp->glx_context) { cp->glx_context = NULL; } } free((void *)rubikblocks); rubikblocks = NULL; } FreeAllGL(mi); } ENTRYPOINT void init_rubikblocks(ModeInfo *mi) { rubikblocks_conf *cp; if(!rubikblocks) { rubikblocks = (rubikblocks_conf *)calloc(MI_NUM_SCREENS(mi), sizeof(rubikblocks_conf)); if(!rubikblocks) return; } cp = &rubikblocks[MI_SCREEN(mi)]; if(tex) make_texture(cp); if ((cp->glx_context = init_GL(mi)) != NULL) { init_gl(mi); init_cp(cp); init_lists(cp); reshape_rubikblocks(mi, MI_WIDTH(mi), MI_HEIGHT(mi)); } else { MI_CLEARWINDOW(mi); } } ENTRYPOINT void draw_rubikblocks(ModeInfo * mi) { Display *display = MI_DISPLAY(mi); Window window = MI_WINDOW(mi); rubikblocks_conf *cp; if (!rubikblocks) return; cp = &rubikblocks[MI_SCREEN(mi)]; MI_IS_DRAWN(mi) = True; if (!cp->glx_context) return; mi->polygon_count = 0; glXMakeCurrent(display, window, *(cp->glx_context)); if (!draw_main(mi, cp)) { release_rubikblocks(mi); return; } if (MI_IS_FPS(mi)) do_fps (mi); glFlush(); glXSwapBuffers(display, window); } #ifndef STANDALONE ENTRYPOINT void change_rubikblocks(ModeInfo * mi) { rubikblocks_conf *cp = &rubikblocks[MI_SCREEN(mi)]; if (!cp->glx_context) return; glXMakeCurrent(MI_DISPLAY(mi), MI_WINDOW(mi), *(cp->glx_context)); init_gl(mi); } #endif /* !STANDALONE */ ENTRYPOINT Bool rubikblocks_handle_event (ModeInfo *mi, XEvent *event) { rubikblocks_conf *cp = &rubikblocks[MI_SCREEN(mi)]; if (gltrackball_event_handler (event, cp->trackball, MI_WIDTH (mi), MI_HEIGHT (mi), &cp->button_down)) return True; return False; } XSCREENSAVER_MODULE ("RubikBlocks", rubikblocks) #endif xscreensaver-5.36/hacks/glx/surfaces.c000644 000767 000024 00000042356 12710313227 020010 0ustar00jwzstaff000000 000000 /* Surface --- Parametric 3d surfaces visualization */ /* * Revision History: * 2000: written by Andrey Mirtchovski * * 01-Mar-2003 mirtchov Modified as a xscreensaver hack. * 01-jan-2009 steger Renamed from klein.c to surfaces.c. * Removed the Klein bottle. * Added many new surfaces. * Added many command line options. * */ /* surfaces to draw */ #define SURFACE_RANDOM -1 #define SURFACE_DINI 0 #define SURFACE_ENNEPER 1 #define SURFACE_KUEN 2 #define SURFACE_MOEBIUS 3 #define SURFACE_SEASHELL 4 #define SURFACE_SWALLOWTAIL 5 #define SURFACE_BOHEMIAN 6 #define SURFACE_WHITNEY 7 #define SURFACE_PLUECKER 8 #define SURFACE_HENNEBERG 9 #define SURFACE_CATALAN 10 #define SURFACE_CORKSCREW 11 #define NUM_SURFACES 12 /* primitives to draw with * note that we skip the polygons and * triangle fans -- too slow * * also removed triangle_strip and quads -- * just doesn't look good enough */ #define RENDER_RANDOM -1 #define RENDER_POINTS 0 #define RENDER_LINES 1 #define RENDER_LINE_LOOP 2 #define NUM_RENDER 3 #ifdef STANDALONE # define DEFAULTS "*delay: 20000 \n" \ "*showFPS: False \n" \ "*suppressRotationAnimation: True\n" \ # define refresh_surface 0 # include "xlockmore.h" /* from the xscreensaver distribution */ #else /* !STANDALONE */ # include "xlock.h" /* from the xlockmore distribution */ #endif /* !STANDALONE */ #ifdef USE_GL #define DEF_SURFACE "random" #define DEF_MODE "random" #define DEF_SPIN "True" #define DEF_WANDER "False" #define DEF_SPEED "300" #include "rotator.h" #include "gltrackball.h" #undef countof #define countof(x) (sizeof((x))/sizeof((*x))) static char *surface_type; static char *render_mode; static int render; static int speed; static Bool do_spin; static Bool do_wander; static XrmOptionDescRec opts[] = { { "-surface", ".surface", XrmoptionSepArg, 0 }, { "-random-surface", ".surface", XrmoptionNoArg, "random" }, { "-dini", ".surface", XrmoptionNoArg, "dini" }, { "-enneper", ".surface", XrmoptionNoArg, "enneper" }, { "-kuen", ".surface", XrmoptionNoArg, "kuen" }, { "-moebius", ".surface", XrmoptionNoArg, "moebius" }, { "-seashell", ".surface", XrmoptionNoArg, "seashell" }, { "-swallowtail", ".surface", XrmoptionNoArg, "swallowtail" }, { "-bohemian", ".surface", XrmoptionNoArg, "bohemian" }, { "-whitney", ".surface", XrmoptionNoArg, "whitney" }, { "-pluecker", ".surface", XrmoptionNoArg, "pluecker" }, { "-henneberg", ".surface", XrmoptionNoArg, "henneberg" }, { "-catalan", ".surface", XrmoptionNoArg, "catalan" }, { "-corkscrew", ".surface", XrmoptionNoArg, "corkscrew" }, { "-mode", ".mode", XrmoptionSepArg, 0 }, { "-random-mode", ".mode", XrmoptionNoArg, "random" }, { "-points", ".mode", XrmoptionNoArg, "points" }, { "-lines", ".mode", XrmoptionNoArg, "lines" }, { "-line-loops", ".mode", XrmoptionNoArg, "line-loops" }, { "-speed", ".speed", XrmoptionSepArg, 0 }, { "-spin", ".spin", XrmoptionNoArg, "True" }, { "+spin", ".spin", XrmoptionNoArg, "False" }, { "-wander", ".wander", XrmoptionNoArg, "True" }, { "+wander", ".wander", XrmoptionNoArg, "False" }, }; static argtype vars[] = { {&surface_type, "surface", "Surface", DEF_SURFACE, t_String }, {&render_mode, "mode", "Mode", DEF_MODE, t_String }, {&do_spin, "spin", "Spin", DEF_SPIN, t_Bool }, {&do_wander, "wander", "Wander", DEF_WANDER, t_Bool }, {&speed, "speed", "Speed", DEF_SPEED, t_Int }, }; ENTRYPOINT ModeSpecOpt surface_opts = {countof(opts), opts, countof(vars), vars, NULL}; typedef struct { GLfloat x; GLfloat y; GLfloat z; } GL_VECTOR; typedef struct { GLXContext *glx_context; Window window; rotator *rot; trackball_state *trackball; Bool button_down_p; int render; Bool random_render; int surface; Bool random_surface; int frame; float du, dv; float a, b, c; float draw_step; } surfacestruct; static surfacestruct *surface = NULL; static void draw(ModeInfo *mi) { surfacestruct *sp = &surface[MI_SCREEN(mi)]; double u, v; float coord[3]; int render; mi->polygon_count = 0; glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glEnable(GL_DEPTH_TEST); glEnable(GL_NORMALIZE); glEnable(GL_CULL_FACE); glPushMatrix(); { double x, y, z; get_position(sp->rot, &x, &y, &z, !sp->button_down_p); glTranslatef((x-0.5)*10, (y-0.5)*10, (z-0.5)*20); gltrackball_rotate(sp->trackball); get_rotation(sp->rot, &x, &y, &z, !sp->button_down_p); glRotatef(x*360, 1.0, 0.0, 0.0); glRotatef(y*360, 0.0, 1.0, 0.0); glRotatef(z*360, 0.0, 0.0, 1.0); } glScalef(4.0, 4.0, 4.0); switch(sp->surface) { case SURFACE_DINI: for (v=0.11; v<=2.0; v+=sp->dv) { glBegin(sp->render); for (u=0; u<=6.0*M_PI; u+=sp->du) { coord[0] = sp->a*cos(u)*sin(v); coord[1] = sp->a*sin(u)*sin(v); coord[2] = sp->a*(cos(v)+log(tan(0.5*v)))+0.2*sp->b*u; glColor3f(coord[0]+0.7, coord[1]+0.7, coord[2]+0.7); glVertex3fv(coord); mi->polygon_count++; } glEnd(); } break; case SURFACE_ENNEPER: for (u=-M_PI; u<=M_PI; u+=sp->du) { glBegin(sp->render); for (v=-M_PI; vdv) { coord[0] = sp->a*(u-(1.0/3.0*u*u*u)+u*v*v); coord[1] = sp->b*(v-(1.0/3.0*v*v*v)+u*u*v); coord[2] = u*u-v*v; glColor3f(coord[0]+0.7, coord[1]+0.7, coord[2]+0.7); glVertex3fv(coord); mi->polygon_count++; } glEnd(); } break; case SURFACE_KUEN: for (u=-4.48; u<=4.48; u+=sp->du) { glBegin(sp->render); for (v=M_PI/51; vdv) { coord[0] = 2*(cos(u)+u*sin(u))*sin(v)/(1+u*u*sin(v)*sin(v)); coord[1] = 2*(sin(u)-u*cos(u))*sin(v)/(1+u*u*sin(v)*sin(v)); coord[2] = log(tan(0.5*v))+2*cos(v)/(1+u*u*sin(v)*sin(v)); glColor3f(coord[0]+0.7, coord[1]+0.7, coord[2]+0.7); glVertex3fv(coord); mi->polygon_count++; } glEnd(); } break; case SURFACE_MOEBIUS: for (u=-M_PI; udu) { glBegin(sp->render); for (v=-0.735; v<0.74; v+=sp->dv) { coord[0] = cos(u)+v*cos(u/2)*cos(u); coord[1] = sin(u)+v*cos(u/2)*sin(u); coord[2] = v*sin(u/2); glColor3f(coord[0]+0.7, coord[1]+0.7, coord[2]+0.7); glVertex3fv(coord); mi->polygon_count++; } glEnd(); } break; case SURFACE_SEASHELL: for (u=0; u<2*M_PI; u+=sp->du) { glBegin(sp->render); for (v=0; v<2*M_PI; v+=sp->dv) { coord[0] = sp->a*(1-v/(2*M_PI))*cos(2*v)*(1+cos(u))+sp->c*cos(2*v); coord[1] = sp->a*(1-v/(2*M_PI))*sin(2*v)*(1+cos(u))+sp->c*sin(2*v); coord[2] = 2*sp->b*v/(2*M_PI)+sp->a*(1-v/(2*M_PI))*sin(u); glColor3f(coord[0]+0.7, coord[1]+0.7, coord[2]+0.7); glVertex3fv(coord); mi->polygon_count++; } glEnd(); } break; case SURFACE_SWALLOWTAIL: for (u=-2.5; u<2.0; u+=sp->du) { glBegin(sp->render); for (v=-1.085; v<1.09; v+=sp->dv) { coord[0] = u*v*v+3*v*v*v*v; coord[1] = -2*u*v-4*v*v*v; coord[2] = u; glColor3f(coord[0]+0.7, coord[1]+0.7, coord[2]+0.7); glVertex3fv(coord); mi->polygon_count++; } glEnd(); } break; case SURFACE_BOHEMIAN: for (u=-M_PI; udu) { glBegin(sp->render); for (v=-M_PI; vdv) { coord[0] = sp->a*cos(u); coord[1] = sp->b*cos(v)+sp->a*sin(u); coord[2] = sin(v); glColor3f(coord[0]+0.7, coord[1]+0.7, coord[2]+0.7); glVertex3fv(coord); mi->polygon_count++; } glEnd(); } break; case SURFACE_WHITNEY: for (v=-1.995; v<2.0; v+=sp->dv) { glBegin(sp->render); for (u=-1.995; u<2.0; u+=sp->du) { coord[0] = u*v; coord[1] = u; coord[2] = v*v-2; glColor3f(coord[0]+0.7, coord[1]+0.7, coord[2]+0.7); glVertex3fv(coord); mi->polygon_count++; } glEnd(); } break; case SURFACE_PLUECKER: for (u=0; u<2.5; u+=sp->dv) { glBegin(sp->render); for (v=-M_PI; vdu) { coord[0] = u*cos(v); coord[1] = u*sin(v); coord[2] = 2*cos(v)*sin(v); glColor3f(coord[0]+0.7, coord[1]+0.7, coord[2]+0.7); glVertex3fv(coord); mi->polygon_count++; } glEnd(); } break; case SURFACE_HENNEBERG: for (u=0.9; u<2.55; u+=sp->dv) { glBegin(sp->render); for (v=-M_PI; vdu) { coord[0] = sinh(1.0/3.0*u)*cos(v)-1.0/3.0*sinh(u)*cos(3.0*v); coord[1] = sinh(1.0/3.0*u)*sin(v)+1.0/3.0*sinh(u)*sin(3.0*v); coord[2] = cosh(2.0/3.0*u)*cos(2.0*v); glColor3f(coord[0]+0.7, coord[1]+0.7, coord[2]+0.7); glVertex3fv(coord); mi->polygon_count++; } glEnd(); } break; case SURFACE_CATALAN: for (v=-2; v<2; v+=sp->du) { glBegin(sp->render); for (u=-2*M_PI; u<2*M_PI+0.05; u+=sp->dv) { coord[0] = 0.33*(u-sin(u)*cosh(v)); coord[1] = 0.33*(1.0-cos(u)*cosh(v)); coord[2] = 0.33*4.0*sin(0.5*u)*sinh(0.5*v); glColor3f(coord[0]+0.7, coord[1]+0.7, coord[2]+0.7); glVertex3fv(coord); mi->polygon_count++; } glEnd(); } break; case SURFACE_CORKSCREW: for (v=-M_PI; vdu) { glBegin(sp->render); for (u=-M_PI; udv) { coord[0] = 0.5*(sp->a+2.0)*cos(u)*cos(v); coord[1] = 0.5*(sp->a+2.0)*sin(u)*cos(v); coord[2] = 0.5*(sp->a+2.0)*sin(v)+u; glColor3f(coord[0]+0.7, coord[1]+0.7, coord[2]+0.7); glVertex3fv(coord); mi->polygon_count++; } glEnd(); } break; } glPopMatrix(); if (sp->render == GL_LINES) mi->polygon_count /= 2; sp->a = sin(sp->draw_step+=0.01); sp->b = cos(sp->draw_step+=0.01); sp->c = sin(sp->draw_step+0.25*M_PI); if (sp->random_surface || sp->random_render) { sp->frame++; if (sp->frame >= speed) { sp->frame = 0; if (sp->random_surface) sp->surface = random() % NUM_SURFACES; if (sp->random_render) { render = random() % NUM_RENDER; switch (render) { case RENDER_POINTS: sp->render = GL_POINTS; break; case RENDER_LINES: sp->render = GL_LINES; break; case RENDER_LINE_LOOP: if (sp->surface == SURFACE_BOHEMIAN || sp->surface == SURFACE_PLUECKER || sp->surface == SURFACE_HENNEBERG) sp->render = GL_LINE_LOOP; else sp->render = GL_LINE_STRIP; break; default: sp->render = GL_LINE_LOOP; break; } } } } } /* new window size or exposure */ ENTRYPOINT void reshape_surface(ModeInfo *mi, int width, int height) { GLfloat h = (GLfloat) height / (GLfloat) width; glViewport(0, 0, (GLint) width, (GLint) height); glMatrixMode(GL_PROJECTION); glLoadIdentity(); gluPerspective (30.0, 1/h, 1.0, 100.0); glMatrixMode(GL_MODELVIEW); glLoadIdentity(); gluLookAt(0.0, 0.0, 30.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0); # ifdef HAVE_MOBILE /* Keep it the same relative size when rotated. */ { int o = (int) current_device_rotation(); if (o != 0 && o != 180 && o != -180) glScalef (1/h, 1/h, 1/h); } # endif glClear(GL_COLOR_BUFFER_BIT); } ENTRYPOINT Bool surface_handle_event(ModeInfo *mi, XEvent *event) { surfacestruct *sp = &surface[MI_SCREEN(mi)]; if (gltrackball_event_handler (event, sp->trackball, MI_WIDTH (mi), MI_HEIGHT (mi), &sp->button_down_p)) return True; return False; } ENTRYPOINT void init_surface(ModeInfo *mi) { int screen = MI_SCREEN(mi); surfacestruct *sp; if (surface == NULL) { if ((surface = (surfacestruct *) calloc(MI_NUM_SCREENS(mi), sizeof(surfacestruct))) == NULL) return; } sp = &surface[screen]; sp->window = MI_WINDOW(mi); { double spin_speed = 1.0; double wander_speed = 0.03; sp->rot = make_rotator(do_spin ? spin_speed : 0, do_spin ? spin_speed : 0, do_spin ? spin_speed : 0, 1.0, do_wander ? wander_speed : 0, True); sp->trackball = gltrackball_init (True); } if (!strcasecmp(surface_type,"random")) { sp->random_surface = True; sp->surface = random() % NUM_SURFACES; } else if (!strcasecmp(surface_type,"dini")) { sp->random_surface = False; sp->surface = SURFACE_DINI; } else if (!strcasecmp(surface_type,"enneper")) { sp->random_surface = False; sp->surface = SURFACE_ENNEPER; } else if (!strcasecmp(surface_type,"kuen")) { sp->random_surface = False; sp->surface = SURFACE_KUEN; } else if (!strcasecmp(surface_type,"moebius")) { sp->random_surface = False; sp->surface = SURFACE_MOEBIUS; } else if (!strcasecmp(surface_type,"seashell")) { sp->random_surface = False; sp->surface = SURFACE_SEASHELL; } else if (!strcasecmp(surface_type,"swallowtail")) { sp->random_surface = False; sp->surface = SURFACE_SWALLOWTAIL; } else if (!strcasecmp(surface_type,"bohemian")) { sp->random_surface = False; sp->surface = SURFACE_BOHEMIAN; } else if (!strcasecmp(surface_type,"whitney")) { sp->random_surface = False; sp->surface = SURFACE_WHITNEY; } else if (!strcasecmp(surface_type,"pluecker")) { sp->random_surface = False; sp->surface = SURFACE_PLUECKER; } else if (!strcasecmp(surface_type,"henneberg")) { sp->random_surface = False; sp->surface = SURFACE_HENNEBERG; } else if (!strcasecmp(surface_type,"catalan")) { sp->random_surface = False; sp->surface = SURFACE_CATALAN; } else if (!strcasecmp(surface_type,"corkscrew")) { sp->random_surface = False; sp->surface = SURFACE_CORKSCREW; } else { sp->random_surface = True; sp->surface = random() % NUM_SURFACES; } if (!strcasecmp(render_mode,"random")) { sp->random_render = True; render = random() % NUM_RENDER; } else if (!strcasecmp(render_mode,"points")) { sp->random_render = False; render = RENDER_POINTS; } else if (!strcasecmp(render_mode,"lines")) { sp->random_render = False; render = RENDER_LINES; } else if (!strcasecmp(render_mode,"line-loops")) { sp->random_render = False; render = RENDER_LINE_LOOP; } else { sp->random_render = True; render = random() % NUM_RENDER; } switch (render) { case RENDER_POINTS: sp->render = GL_POINTS; break; case RENDER_LINES: sp->render = GL_LINES; break; case RENDER_LINE_LOOP: if (sp->surface == SURFACE_BOHEMIAN || sp->surface == SURFACE_PLUECKER || sp->surface == SURFACE_HENNEBERG) sp->render = GL_LINE_LOOP; else sp->render = GL_LINE_STRIP; break; default: sp->render = GL_LINE_LOOP; break; } sp->frame = 0; sp->du = 0.07; sp->dv = 0.07; sp->a = sp->b = 1; sp->c = 0.1; if ((sp->glx_context = init_GL(mi)) != NULL) { reshape_surface(mi, MI_WIDTH(mi), MI_HEIGHT(mi)); } else { MI_CLEARWINDOW(mi); } } ENTRYPOINT void draw_surface(ModeInfo * mi) { surfacestruct *sp = &surface[MI_SCREEN(mi)]; Display *display = MI_DISPLAY(mi); Window window = MI_WINDOW(mi); if (!sp->glx_context) return; glDrawBuffer(GL_BACK); glXMakeCurrent(display, window, *(sp->glx_context)); draw(mi); if (mi->fps_p) do_fps(mi); glFinish(); glXSwapBuffers(display, window); } ENTRYPOINT void release_surface(ModeInfo * mi) { if (surface != NULL) { int screen; for (screen = 0; screen < MI_NUM_SCREENS(mi); screen++) { surfacestruct *sp = &surface[screen]; if (sp->glx_context) { /* Display lists MUST be freed while their glXContext is current. */ glXMakeCurrent(MI_DISPLAY(mi), sp->window, *(sp->glx_context)); } } (void) free((void *)surface); surface = NULL; } FreeAllGL(mi); } XSCREENSAVER_MODULE_2("Surfaces", surfaces, surface) #endif xscreensaver-5.36/hacks/glx/hilbert.c000664 000767 000024 00000070550 12710313212 017617 0ustar00jwzstaff000000 000000 /* hilbert, Copyright (c) 2011-2014 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. * * 2D and 3D Hilbert space-filling curves. * * Inspired by "Visualizing Hilbert Curves" by Nelson Max, 1998: * https://e-reports-ext.llnl.gov/pdf/234149.pdf */ #define DEFAULTS "*delay: 30000 \n" \ "*count: 30 \n" \ "*showFPS: False \n" \ "*wireframe: False \n" \ "*geometry: 800x800\n" \ "*suppressRotationAnimation: True\n" \ # define refresh_hilbert 0 # define release_hilbert 0 #undef countof #define countof(x) (sizeof((x))/sizeof((*x))) #include "xlockmore.h" #include "colors.h" #include "sphere.h" #include "tube.h" #include "rotator.h" #include "gltrackball.h" #include #ifdef USE_GL /* whole file */ #define DEF_SPIN "True" #define DEF_WANDER "False" #define DEF_SPEED "1.0" #define DEF_MODE "random" #define DEF_ENDS "random" #define DEF_MAX_DEPTH "5" #define DEF_THICKNESS "0.25" #define PAUSE_TICKS 180 typedef struct { double x,y,z; } XYZ; typedef struct { unsigned short x,y,z; } XYZb; typedef struct { int size; XYZb *values; /* assume max depth of 20 (2^16 on each side) */ } hilbert_cache; static int dlist_faces[] = { 20, 10, 8, 4, 3 }; typedef struct { GLXContext *glx_context; rotator *rot, *rot2; trackball_state *trackball; Bool button_down_p; Bool twodee_p; Bool closed_p; int ncolors; XColor *colors; int depth; int depth_tick; GLfloat path_start, path_end; int path_tick; int pause; GLfloat diam; hilbert_cache **caches; /* filled lazily */ GLuint dlists [40][2]; /* we don't actually alloc all of these */ int dlist_polys [40][2]; } hilbert_configuration; static hilbert_configuration *bps = NULL; static Bool do_spin; static GLfloat speed; static Bool do_wander; static char *mode_str; static char *ends_str; static int max_depth; static GLfloat thickness; static XrmOptionDescRec opts[] = { { "-spin", ".spin", XrmoptionNoArg, "True" }, { "+spin", ".spin", XrmoptionNoArg, "False" }, { "-speed", ".speed", XrmoptionSepArg, 0 }, { "-wander", ".wander", XrmoptionNoArg, "True" }, { "+wander", ".wander", XrmoptionNoArg, "False" }, { "-mode", ".mode", XrmoptionSepArg, 0 }, { "-2d", ".mode", XrmoptionNoArg, "2D" }, { "-3d", ".mode", XrmoptionNoArg, "3D" }, { "-ends", ".ends", XrmoptionSepArg, 0 }, { "-closed", ".ends", XrmoptionNoArg, "closed" }, { "-open", ".ends", XrmoptionNoArg, "open" }, { "-max-depth", ".maxDepth", XrmoptionSepArg, 0 }, { "-thickness", ".thickness",XrmoptionSepArg, 0 }, }; static argtype vars[] = { {&do_spin, "spin", "Spin", DEF_SPIN, t_Bool}, {&do_wander, "wander", "Wander", DEF_WANDER, t_Bool}, {&speed, "speed", "Speed", DEF_SPEED, t_Float}, {&mode_str, "mode", "Mode", DEF_MODE, t_String}, {&ends_str, "ends", "Ends", DEF_ENDS, t_String}, {&max_depth, "maxDepth", "MaxDepth", DEF_MAX_DEPTH, t_Int}, {&thickness, "thickness","Thickness",DEF_THICKNESS, t_Float}, }; ENTRYPOINT ModeSpecOpt hilbert_opts = {countof(opts), opts, countof(vars), vars, NULL}; /* 2D Hilbert, and closed-loop variant. */ /* These arrays specify which bits of the T index contribute to the X, Y and Z values. Higher order bits are defined recursively. */ static const int xbit2d[4] = { 0, 0, 1, 1 }; static const int ybit2d[4] = { 0, 1, 1, 0 }; static const int xbit3d[8] = { 0,0,0,0,1,1,1,1 }; static const int ybit3d[8] = { 0,1,1,0,0,1,1,0 }; static const int zbit3d[8] = { 0,0,1,1,1,1,0,0 }; /* These matrixes encapsulate the necessary reflection and translation of each 4 sub-squares or 8 sub-cubes. The r2d and r3d arrays are the normal Hilbert descent, and the s2d and s3d arrays are the modified curve used for only level 0 of a closed-form path. */ static int r2d[4][2][2] = { /* _ _ | |..| | :_ _: _| |_ */ {{ 0, 1}, { 1, 0}}, {{ 1, 0}, { 0, 1}}, {{ 1, 0}, { 0, 1}}, {{ 0,-1}, {-1, 0}}, }; static int s2d[4][2][2] = { /* __ __ | |..| | Used for outermost iteration only, in "closed" mode : .. : |__| |__| */ {{-1, 0}, { 0,-1}}, {{ 1, 0}, { 0, 1}}, {{ 1, 0}, { 0, 1}}, {{-1, 0}, { 0,-1}}, }; static int r3d[8][3][3] = { /* /| /| / | / | /__|____/ | | | / / / / */ {{ 0, 1, 0}, { 1, 0, 0}, { 0, 0, 1}}, {{ 0, 0, 1}, { 0, 1, 0}, { 1, 0, 0}}, {{ 1, 0, 0}, { 0, 1, 0}, { 0, 0, 1}}, {{ 0, 0,-1}, {-1, 0, 0}, { 0, 1, 0}}, {{ 0, 0, 1}, { 1, 0, 0}, { 0, 1, 0}}, {{ 1, 0, 0}, { 0, 1, 0}, { 0, 0, 1}}, {{ 0, 0,-1}, { 0, 1, 0}, {-1, 0, 0}}, {{ 0,-1, 0}, {-1, 0, 0}, { 0, 0, 1}}, }; static int s3d[8][3][3] = { /* /| /| Used for outermost iteration only, in "closed" mode / | / | /__|____/ | | | / / /_______/ */ {{-1, 0, 0}, { 0, 0,-1}, { 0, 1, 0}}, {{ 0, 0, 1}, { 0, 1, 0}, { 1, 0, 0}}, {{ 1, 0, 0}, { 0, 1, 0}, { 0, 0, 1}}, {{ 0, 0,-1}, {-1, 0, 0}, { 0, 1, 0}}, {{ 0, 0, 1}, { 1, 0, 0}, { 0, 1, 0}}, {{ 1, 0, 0}, { 0, 1, 0}, { 0, 0, 1}}, {{ 0, 0,-1}, { 0, 1, 0}, {-1, 0, 0}}, {{-1, 0, 0}, { 0, 0,-1}, { 0, 1, 0}}, }; /* Matrix utilities */ static void matrix_times_vector2d (int m[2][2], int v[2], int dest[2]) { dest[0] = m[0][0]*v[0] + m[0][1]*v[1]; dest[1] = m[1][0]*v[0] + m[1][1]*v[1]; } static void matrix_times_vector3d (int m[3][3], int v[3], int dest[3]) { dest[0] = m[0][0]*v[0] + m[0][1]*v[1] + m[0][2]*v[2]; dest[1] = m[1][0]*v[0] + m[1][1]*v[1] + m[1][2]*v[2]; dest[2] = m[2][0]*v[0] + m[2][1]*v[1] + m[2][2]*v[2]; } static void matrix_multiply2d (int m1[2][2], int m2[2][2], int dest[2][2]) { dest[0][0] = m1[0][0] * m2[0][0] + m1[0][1] * m2[1][0]; dest[0][1] = m1[0][0] * m2[0][1] + m1[0][1] * m2[1][1]; dest[1][0] = m1[1][0] * m2[0][0] + m1[1][1] * m2[1][0]; dest[1][1] = m1[1][0] * m2[0][1] + m1[1][1] * m2[1][1]; } static void matrix_multiply3d (int m1[3][3], int m2[3][3], int dest[3][3]) { int i, j, k; for (i = 0; i < 3; i++) for (j = 0; j < 3; j++) { dest[i][j] = 0; for (k = 0; k < 3; k++) dest[i][j] += m1[i][k] * m2[k][j]; } } static void identity_matrix2d (int m[2][2]) { m[0][0] = m[1][1] = 1; m[0][1] = m[1][0] = 0; } static void identity_matrix3d (int m[3][3]) { m[0][0] = m[1][1] = m[2][2] = 1; m[0][1] = m[0][2] = m[1][0] = m[1][2] = m[2][0] = m[2][1] = 0; } static void matrix_copy2d (int src[2][2], int dest[2][2]) { int i, j; for (i = 0; i < 2; i++) for (j = 0; j < 2; j++) dest[i][j] = src[i][j]; } static void matrix_copy3d (int src[3][3], int dest[3][3]) { int i, j; for (i = 0; i < 3; i++) for (j = 0; j < 3; j++) dest[i][j] = src[i][j]; } /* 2D and 3D Hilbert: Given an index T along the curve, return the XY or XYZ coordinates. N is depth of the curve. */ static void t_to_xy (int n, int t, int *x, int *y, Bool closed_p) { int k, rt[2][2], rq[2][2], va[2], vb[2]; identity_matrix2d(rt); *x = *y = 0; for (k = n-1; k >= 0; k--) { int j = 3 & (t >> (2*k)); va[0] = 2 * xbit2d[j] - 1; va[1] = 2 * ybit2d[j] - 1; matrix_times_vector2d (rt, va, vb); *x += ((vb[0] + 1) / 2) << k; *y += ((vb[1] + 1) / 2) << k; if (k > 0) { matrix_copy2d (rt, rq); if (k == n-1 && closed_p) matrix_multiply2d (rq, s2d[j], rt); else matrix_multiply2d (rq, r2d[j], rt); } } } static void t_to_xyz (int n, int t, int *x, int *y, int *z, Bool closed_p) { int k, rt[3][3], rq[3][3], va[3], vb[3]; identity_matrix3d(rt); *x = *y = *z = 0; for (k = n-1; k >= 0; k--) { int j = 7 & (t >> (3*k)); va[0] = 2 * xbit3d[j] - 1; va[1] = 2 * ybit3d[j] - 1; va[2] = 2 * zbit3d[j] - 1; matrix_times_vector3d (rt, va, vb); *x += ((vb[0] + 1) / 2) << k; *y += ((vb[1] + 1) / 2) << k; *z += ((vb[2] + 1) / 2) << k; if (k > 0) { matrix_copy3d (rt, rq); if (k == n-1 && closed_p) matrix_multiply3d (rq, s3d[j], rt); else matrix_multiply3d (rq, r3d[j], rt); } } } /* Rendering the curve */ /* Draw a sphere at the intersection of two tubes, to round off the connection between them. Use one of our cache display lists of unit spheres in various sizes. */ static int draw_joint (ModeInfo *mi, XYZ p, GLfloat diam, int faces, int wire) { hilbert_configuration *bp = &bps[MI_SCREEN(mi)]; int i; diam *= 0.99; /* try to clean up the edges a bit */ if (faces <= 4) return 0; /* too small to see */ glPushMatrix(); glTranslatef (p.x, p.y, p.z); glScalef (diam, diam, diam); /* i = unit_sphere (faces, faces, wire);*/ /* if (!bp->dlists[faces][0]) abort(); */ /* if (!bp->dlist_polys[faces][0]) abort(); */ glCallList (bp->dlists[faces][0]); i = bp->dlist_polys[faces][0]; glPopMatrix(); return i; } /* Draw a tube, and associated end caps. Use one of our cache display lists of unit tubes in various sizes. Pick the resolution of the tube based on how large it's being drawn. It's ok to get chunkier if the thing is only a few pixels wide on the screen. */ static Bool draw_segment (ModeInfo *mi, XYZ p0, XYZ p1, /* from, to */ int t, int end_t, /* value and range */ GLfloat path_start, GLfloat path_end, /* clipping */ Bool head_cap_p, int *last_colorP) { hilbert_configuration *bp = &bps[MI_SCREEN(mi)]; double t0 = (double) (t-1) / end_t; /* ratio of p[01] along curve */ double t1 = (double) t / end_t; int wire = MI_IS_WIREFRAME(mi); int owire = wire; GLfloat dd = bp->diam; int faces; if (path_start >= t1) /* whole segment is before clipping region */ return False; if (path_end < t0) /* whole segment is after clipping region */ return False; if (bp->twodee_p) dd *= 2; /* more polys in 2D mode */ faces = (dd > 0.040 ? dlist_faces[0] : dd > 0.020 ? dlist_faces[1] : dd > 0.010 ? dlist_faces[2] : dd > 0.005 ? dlist_faces[3] : dd > 0.002 ? dlist_faces[4] : 1); /* In 2d mode, we can drop into wireframe mode and it still looks ok... */ if (faces == 1) { if (bp->twodee_p) wire = True; else faces = 3; } if (wire && !owire) { glDisable (GL_DEPTH_TEST); glDisable (GL_CULL_FACE); glDisable (GL_LIGHTING); } if (t0 < path_start) { XYZ p; GLfloat seg_range = t1 - t0; GLfloat clip_range = path_start - t0; GLfloat ratio = clip_range / seg_range; p.x = p0.x + ((p1.x - p0.x) * ratio); p.y = p0.y + ((p1.y - p0.y) * ratio); p.z = p0.z + ((p1.z - p0.z) * ratio); p0 = p; } if (t1 > path_end) { XYZ p; GLfloat seg_range = t1 - t0; GLfloat clip_range = path_end - t0; GLfloat ratio = clip_range / seg_range; p.x = p0.x + ((p1.x - p0.x) * ratio); p.y = p0.y + ((p1.y - p0.y) * ratio); p.z = p0.z + ((p1.z - p0.z) * ratio); p1 = p; } if (p0.x == p1.x && p0.y == p1.y && p0.z == p1.z) return False; { int segs = bp->ncolors * (t1 - t0); int i; XYZ p0b, p1b; if (segs < 1) segs = 1; for (i = 0; i < segs; i++) { int j = i + 1; GLfloat color[4] = {0.0, 0.0, 0.0, 1.0}; GLfloat t0b; int c; p0b.x = p0.x + i * ((p1.x - p0.x) / segs); p0b.y = p0.y + i * ((p1.y - p0.y) / segs); p0b.z = p0.z + i * ((p1.z - p0.z) / segs); p1b.x = p0.x + j * ((p1.x - p0.x) / segs); p1b.y = p0.y + j * ((p1.y - p0.y) / segs); p1b.z = p0.z + j * ((p1.z - p0.z) / segs); /* #### this isn't quite right */ t0b = t0 + i * (t1 - t0) / segs; c = bp->ncolors * t0b; if (c >= bp->ncolors) c = bp->ncolors-1; /* Above depth 6, was spending 5% of the time in glMateralfv, so only set the color if it's different. */ if (c != *last_colorP) { color[0] = bp->colors[c].red / 65536.0; color[1] = bp->colors[c].green / 65536.0; color[2] = bp->colors[c].blue / 65536.0; if (wire) glColor3fv (color); else glMaterialfv (GL_FRONT, GL_AMBIENT_AND_DIFFUSE, color); *last_colorP = c; } if (wire) { glBegin (GL_LINES); glVertex3f (p0b.x, p0b.y, p0b.z); glVertex3f (p1b.x, p1b.y, p1b.z); glEnd (); mi->polygon_count++; } else { /* mi->polygon_count += tube (p0b.x, p0b.y, p0b.z, p1b.x, p1b.y, p1b.z, bp->diam, 0, faces, True, 0, wire); */ /* Render a rotated and scaled prefab unit tube. There's probably a slightly more concise way to do this, but since they're all at right angles at least we don't have to use atan(). */ GLfloat s; glPushMatrix(); glTranslatef (p0b.x, p0b.y, p0b.z); if (p1b.x > p0b.x) { s = p1b.x - p0b.x; } else if (p1b.x < p0b.x) { glRotatef (180, 0, 0, 1); s = p0b.x - p1b.x; } else if (p1b.y > p0b.y) { glRotatef (90, 0, 0, 1); s = p1b.y - p0b.y; } else if (p1b.y < p0b.y) { glRotatef (-90, 0, 0, 1); s = p0b.y - p1b.y; } else if (p1b.z > p0b.z) { glRotatef (-90, 0, 1, 0); s = p1b.z - p0b.z; } else /* (p1b.z < p0b.z) */ { glRotatef (90, 0, 1, 0); s = p0b.z - p1b.z; } glScalef (s, bp->diam, bp->diam); glCallList (bp->dlists[faces][1]); mi->polygon_count += bp->dlist_polys[faces][1]; glPopMatrix(); /* If this is the bleeding edge, cap it too. */ if (head_cap_p) { mi->polygon_count += draw_joint (mi, p0b, bp->diam, faces, wire); head_cap_p = False; } } } /* If the path is closed, close it. This segment doesn't animate like the others, but, oh well. */ if (! wire) mi->polygon_count += draw_joint (mi, p1b, bp->diam, faces, wire); } return True; } static void mem(void) { fprintf (stderr, "%s: out of memory\n", progname); exit (1); } /* Render the whole thing, but omit segments that lie outside of the path_start and path_end ratios. */ static void hilbert (ModeInfo *mi, int size, GLfloat path_start, GLfloat path_end) { hilbert_configuration *bp = &bps[MI_SCREEN(mi)]; int wire = MI_IS_WIREFRAME(mi); GLfloat w = pow(2, size); int end_t = (bp->twodee_p ? w * w : w * w * w); XYZ prev = { 0, }; XYZ first = { 0, }; Bool first_p = False; Bool any_p = False; int t; Bool fill_cache_p = False; hilbert_cache *cc; int last_color = -1; /* Do this here since at higher resolutions, we turn wireframe on and off. */ if (! wire) { glEnable (GL_NORMALIZE); glEnable (GL_DEPTH_TEST); glEnable (GL_CULL_FACE); glEnable (GL_LIGHTING); glEnable (GL_POLYGON_OFFSET_FILL); } if (!bp->caches) { bp->caches = (hilbert_cache **) calloc (max_depth + 2, sizeof (*bp->caches)); if (!bp->caches) mem(); fill_cache_p = True; } cc = bp->caches[size]; if (! cc) { cc = (hilbert_cache *) calloc (1, sizeof (*cc)); cc->values = (XYZb *) calloc (end_t + 1, sizeof (*cc->values)); if (!cc->values) mem(); cc->size = end_t; bp->caches[size] = cc; fill_cache_p = True; } for (t = 0; t < end_t; t++) { int x, y, z; XYZ c; XYZb *cb; if (!fill_cache_p) { cb = &cc->values[t]; x = cb->x; y = cb->y; z = cb->z; } else { if (!bp->twodee_p) t_to_xyz (size, t, &x, &y, &z, bp->closed_p); else { t_to_xy (size, t, &x, &y, bp->closed_p); z = w/2; } cb = &cc->values[t]; cb->x = x; cb->y = y; cb->z = z; } c.x = (GLfloat) x / w - 0.5; c.y = (GLfloat) y / w - 0.5; c.z = (GLfloat) z / w - 0.5; /* #### We could save some polygons by not drawing the spheres between colinear segments. */ if (t > 0) { if (draw_segment (mi, prev, c, t, end_t, path_start, path_end, !any_p, &last_color)) any_p = True; } prev = c; if (! first_p) { first = c; first_p = True; } } if (bp->closed_p && path_end >= 1.0) { draw_segment (mi, prev, first, t, end_t, path_start, path_end, !any_p, &last_color); } } /* Window management, etc */ ENTRYPOINT void reshape_hilbert (ModeInfo *mi, int width, int height) { GLfloat h = (GLfloat) height / (GLfloat) width; glViewport (0, 0, (GLint) width, (GLint) height); glMatrixMode(GL_PROJECTION); glLoadIdentity(); gluPerspective (30.0, 1/h, 1.0, 100.0); glMatrixMode(GL_MODELVIEW); glLoadIdentity(); gluLookAt( 0.0, 0.0, 30.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0); # ifdef HAVE_MOBILE /* Keep it the same relative size when rotated. */ { int o = (int) current_device_rotation(); if (o != 0 && o != 180 && o != -180) glScalef (1/h, 1/h, 1/h); } # endif glClear(GL_COLOR_BUFFER_BIT); } ENTRYPOINT Bool hilbert_handle_event (ModeInfo *mi, XEvent *event) { hilbert_configuration *bp = &bps[MI_SCREEN(mi)]; if (gltrackball_event_handler (event, bp->trackball, MI_WIDTH (mi), MI_HEIGHT (mi), &bp->button_down_p)) return True; else if (event->xany.type == KeyPress) { KeySym keysym; char c = 0; XLookupString (&event->xkey, &c, 1, &keysym, 0); if (c == '+' || c == '=' || keysym == XK_Up || keysym == XK_Right || keysym == XK_Next) { bp->depth++; if (bp->depth > max_depth) bp->depth = max_depth; return True; } else if (c == '-' || c == '_' || keysym == XK_Down || keysym == XK_Left || keysym == XK_Prior) { bp->depth--; if (bp->depth < 1) bp->depth = 1; return True; } else if (screenhack_event_helper (MI_DISPLAY(mi), MI_WINDOW(mi), event)) { bp->depth += bp->depth_tick; if (bp->depth > max_depth-1) { bp->depth = max_depth; bp->depth_tick = -1; } else if (bp->depth <= 1) { bp->depth = 1; bp->depth_tick = 1; } return True; } } return False; } ENTRYPOINT void init_hilbert (ModeInfo *mi) { hilbert_configuration *bp; int wire = MI_IS_WIREFRAME(mi); int i; if (!bps) { bps = (hilbert_configuration *) calloc (MI_NUM_SCREENS(mi), sizeof (hilbert_configuration)); if (!bps) { fprintf(stderr, "%s: out of memory\n", progname); exit(1); } } bp = &bps[MI_SCREEN(mi)]; bp->depth = 2; bp->depth_tick = 1; bp->path_start = 0.0; bp->path_end = 0.0; bp->path_tick = 1; if (thickness < 0.01) thickness = 0.01; if (thickness > 1.0) thickness = 1.0; if (speed <= 0) speed = 0.0001; if (max_depth < 2) max_depth = 2; if (max_depth > 20) max_depth = 20; /* hard limit due to hilbert_cache */ if (bp->depth > max_depth-1) bp->depth = max_depth-1; bp->glx_context = init_GL(mi); reshape_hilbert (mi, MI_WIDTH(mi), MI_HEIGHT(mi)); if (!wire) { GLfloat pos[4] = {1.0, 1.0, 1.0, 0.0}; GLfloat amb[4] = {0.0, 0.0, 0.0, 1.0}; GLfloat dif[4] = {1.0, 1.0, 1.0, 1.0}; GLfloat spc[4] = {0.0, 1.0, 1.0, 1.0}; glEnable (GL_LIGHTING); glEnable (GL_LIGHT0); glLightfv(GL_LIGHT0, GL_POSITION, pos); glLightfv(GL_LIGHT0, GL_AMBIENT, amb); glLightfv(GL_LIGHT0, GL_DIFFUSE, dif); glLightfv(GL_LIGHT0, GL_SPECULAR, spc); } { double spin_speed = 0.04; double tilt_speed = spin_speed / 10; double wander_speed = 0.008; double spin_accel = 0.01; bp->rot = make_rotator (do_spin ? spin_speed : 0, do_spin ? spin_speed : 0, do_spin ? spin_speed : 0, spin_accel, do_wander ? wander_speed : 0, do_spin); bp->rot2 = make_rotator (0, 0, 0, 0, tilt_speed, True); bp->trackball = gltrackball_init (True); } if (mode_str && !strcasecmp(mode_str, "2d")) bp->twodee_p = True; else if (mode_str && (!strcasecmp(mode_str, "3d"))) bp->twodee_p = False; else { if (! (mode_str && !strcasecmp(mode_str, "random"))) fprintf (stderr, "%s: 'mode' must be '2d', '3d', or 'random'\n", progname); bp->twodee_p = ((random() % 3) == 0); } if (ends_str && (!strcasecmp(ends_str, "closed"))) bp->closed_p = True; else if (ends_str && (!strcasecmp(ends_str, "open"))) bp->closed_p = False; else { if (! (ends_str && !strcasecmp(ends_str, "random"))) fprintf (stderr, "%s: 'ends' must be 'open', 'closed', or 'random'\n", progname); bp->closed_p = ((random() % 3) != 0); } /* More colors results in more polygons (more tube segments) so keeping this small is worthwhile. */ bp->ncolors = (bp->twodee_p ? 1024 : 128); if (bp->closed_p) { /* Since the path is closed, colors must also be a closed loop */ bp->colors = (XColor *) calloc(bp->ncolors, sizeof(XColor)); make_smooth_colormap (0, 0, 0, bp->colors, &bp->ncolors, False, 0, False); } else { /* Since the path is open, first and last colors should differ. */ bp->ncolors *= 2; bp->colors = (XColor *) calloc(bp->ncolors, sizeof(XColor)); make_uniform_colormap (0, 0, 0, bp->colors, &bp->ncolors, False, 0, False); bp->ncolors /= 2; } /* Generate display lists for several different resolutions of a unit tube and a unit sphere. */ for (i = 0; i < countof(dlist_faces); i++) { int faces = dlist_faces[i]; bp->dlists[faces][0] = glGenLists (1); glNewList (bp->dlists[faces][0], GL_COMPILE); bp->dlist_polys[faces][0] = unit_sphere (faces, faces, wire); glEndList (); bp->dlists[faces][1] = glGenLists (1); glNewList (bp->dlists[faces][1], GL_COMPILE); bp->dlist_polys[faces][1] = tube (0, 0, 0, 1, 0, 0, 1, 0, faces, True, 0, wire); glEndList (); } } ENTRYPOINT void draw_hilbert (ModeInfo *mi) { hilbert_configuration *bp = &bps[MI_SCREEN(mi)]; Display *dpy = MI_DISPLAY(mi); Window window = MI_WINDOW(mi); int wire = MI_IS_WIREFRAME(mi); static const GLfloat bspec[4] = {1.0, 1.0, 1.0, 1.0}; static const GLfloat bshiny = 128.0; GLfloat bcolor[4] = {1.0, 1.0, 1.0, 1.0}; if (!bp->glx_context) return; glXMakeCurrent(MI_DISPLAY(mi), MI_WINDOW(mi), *(bp->glx_context)); glShadeModel(GL_SMOOTH); if (! wire) { glEnable (GL_NORMALIZE); glEnable (GL_DEPTH_TEST); glEnable (GL_CULL_FACE); glEnable (GL_LIGHTING); glEnable (GL_LIGHT0); glEnable (GL_POLYGON_OFFSET_FILL); } glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glPushMatrix (); glScalef(1.1, 1.1, 1.1); { double x, y, z, z2; get_position (bp->rot, &x, &y, &z, !bp->button_down_p); glTranslatef((x - 0.5) * 8, (y - 0.5) * 8, (z - 0.5) * 15); gltrackball_rotate (bp->trackball); get_rotation (bp->rot, &x, &y, &z, !bp->button_down_p); if (bp->twodee_p && do_spin) /* face front */ { double max = 70; get_position (bp->rot2, &x, &y, &z2, !bp->button_down_p); glRotatef (max/2 - x*max, 1, 0, 0); glRotatef (max/2 - y*max, 0, 1, 0); glRotatef (z * 360, 0, 0, 1); /* but upside down is ok */ } else { glRotatef (x * 360, 1, 0, 0); glRotatef (y * 360, 0, 1, 0); glRotatef (z * 360, 0, 0, 1); } } mi->polygon_count = 0; glMaterialfv (GL_FRONT, GL_SPECULAR, bspec); glMateriali (GL_FRONT, GL_SHININESS, bshiny); glMaterialfv (GL_FRONT, GL_AMBIENT_AND_DIFFUSE, bcolor); glScalef (8,8,8); glTranslatef (0.1, 0.1, 0); if (!do_spin && !bp->twodee_p) { /* tilt the cube a little, and make the start and end visible */ glTranslatef (-0.1, 0, 0); glRotatef (140, 0, 1, 0); glRotatef (30, 1, 0, 0); } if (wire) glLineWidth (bp->depth > 4 ? 1.0 : bp->depth > 3 ? 2.0 : 3.0); if (bp->path_tick > 0) /* advancing the end point, [0 - N) */ { /* drawing 1 partial path, 1st time only. */ if (!bp->button_down_p) bp->path_end += 0.01 * speed; if (bp->path_end >= 1.0) { bp->path_start = 0.0; bp->path_end = 1.0; bp->path_tick = -1; bp->pause = PAUSE_TICKS; } bp->diam = thickness / pow (2, bp->depth); hilbert (mi, bp->depth, bp->path_start, bp->path_end); mi->recursion_depth = bp->depth + bp->path_start; } else /* advancing the start point, (N - 1] */ { /* drawing 2 paths at different rez. */ if (bp->pause) { bp->pause--; } else { if (!bp->button_down_p) bp->path_start += 0.01 * speed; if (bp->path_start > 1.0) { bp->path_start = 0.0; bp->depth += bp->depth_tick; bp->pause = PAUSE_TICKS; if (bp->depth > max_depth-1) { bp->depth = max_depth; bp->depth_tick = -1; } else if (bp->depth <= 1) { bp->depth = 1; bp->depth_tick = 1; } } } { GLfloat d1 = thickness / pow (2, bp->depth); GLfloat d2 = thickness / pow (2, bp->depth + bp->depth_tick); bp->diam = (d1 * (1 - bp->path_start) + d2 * bp->path_start); } /* First time around, start is 0, and end animates forward. Then, to display the next higher resolution, we render depth=N while increasing start and leaving end=1.0; and simultaneously animationg depth=N+1 with start=0 and end increasing by the same amount. The two paths aren't actually connected together at the resolution-change interface, and sometimes they overlap, but things go fast enough that it's hard to spot those glitches, so it looks ok. */ glPolygonOffset (0, 0); hilbert (mi, bp->depth, bp->path_start, bp->path_end); glPolygonOffset (1.0, 1.0); hilbert (mi, bp->depth + bp->depth_tick, 0.0, bp->path_start); mi->recursion_depth = bp->depth + (bp->depth_tick * bp->path_start); } glPopMatrix (); if (mi->fps_p) do_fps (mi); glFinish(); glXSwapBuffers(dpy, window); } XSCREENSAVER_MODULE ("Hilbert", hilbert) #endif /* USE_GL */ xscreensaver-5.36/hacks/glx/companion.c000644 000767 000024 00000033370 12710313172 020153 0ustar00jwzstaff000000 000000 /* companioncube, Copyright (c) 2011-2014 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. */ /* The symptoms most commonly produced by Enrichment Center testing are superstition, perceiving inanimate objects as alive, and hallucinations. The Enrichment Center reminds you that the weighted companion cube will never threaten to stab you and, in fact, cannot speak. In the event that the Weighted Companion Cube does speak, the Enrichment Center urges you to disregard its advice. */ #define DEFAULTS "*delay: 30000 \n" \ "*showFPS: False \n" \ "*count: 3 \n" \ "*wireframe: False \n" \ /* #define DEBUG */ # define refresh_cube 0 # define release_cube 0 #define DEF_SPEED "1.0" #define DEF_SPIN "False" #define DEF_WANDER "False" #undef countof #define countof(x) (sizeof((x))/sizeof((*x))) #undef BELLRAND #define BELLRAND(n) ((frand((n)) + frand((n)) + frand((n))) / 3) #undef RANDSIGN #define RANDSIGN() ((random() & 1) ? 1 : -1) #include "xlockmore.h" #include "rotator.h" #include "gltrackball.h" #include "xpm-ximage.h" #include #ifdef USE_GL /* whole file */ #include "gllist.h" extern const struct gllist *companion_quad, *companion_disc, *companion_heart; static const struct gllist * const *all_objs[] = { &companion_quad, &companion_disc, &companion_heart }; #define BASE_QUAD 0 #define BASE_DISC 1 #define BASE_HEART 2 #define FULL_CUBE 3 #define SPEED_SCALE 0.2 typedef struct { GLfloat x, y, z; GLfloat ix, iy, iz; GLfloat dx, dy, dz; GLfloat ddx, ddy, ddz; GLfloat zr; rotator *rot; Bool spinner_p; } floater; typedef struct { GLXContext *glx_context; trackball_state *trackball; Bool button_down_p; GLuint *dlists; int cube_polys; int nfloaters; floater *floaters; } cube_configuration; static cube_configuration *bps = NULL; static GLfloat speed; static Bool do_spin; static Bool do_wander; static XrmOptionDescRec opts[] = { { "-speed", ".speed", XrmoptionSepArg, 0 }, { "-spin", ".spin", XrmoptionNoArg, "True" }, { "+spin", ".spin", XrmoptionNoArg, "False" }, { "-wander", ".wander", XrmoptionNoArg, "True" }, { "+wander", ".wander", XrmoptionNoArg, "False" }, }; static argtype vars[] = { {&speed, "speed", "Speed", DEF_SPEED, t_Float}, {&do_spin, "spin", "Spin", DEF_SPIN, t_Bool}, {&do_wander, "wander", "Wander", DEF_WANDER, t_Bool}, }; ENTRYPOINT ModeSpecOpt cube_opts = {countof(opts), opts, countof(vars), vars, NULL}; #define BOTTOM 28.0 static void reset_floater (ModeInfo *mi, floater *f) { cube_configuration *bp = &bps[MI_SCREEN(mi)]; f->y = -BOTTOM; f->x = f->ix; f->z = f->iz; /* Yes, I know I'm varying the force of gravity instead of varying the launch velocity. That's intentional: empirical studies indicate that it's way, way funnier that way. */ f->dy = 5.0; f->dx = 0; f->dz = 0; /* -0.18 max -0.3 top -0.4 middle -0.6 bottom */ f->ddy = speed * SPEED_SCALE * (-0.6 + BELLRAND(0.45)); f->ddx = 0; f->ddz = 0; if (do_spin || do_wander) f->spinner_p = 0; else f->spinner_p = !(random() % (3 * bp->nfloaters)); if (! (random() % (30 * bp->nfloaters))) { f->dx = BELLRAND(1.8) * RANDSIGN(); f->dz = BELLRAND(1.8) * RANDSIGN(); } f->zr = frand(180); if (do_spin || do_wander) { f->y = 0; if (bp->nfloaters > 2) f->y += frand(3.0) * RANDSIGN(); } } static void tick_floater (ModeInfo *mi, floater *f) { cube_configuration *bp = &bps[MI_SCREEN(mi)]; if (bp->button_down_p) return; if (do_spin || do_wander) return; f->dx += f->ddx; f->dy += f->ddy; f->dz += f->ddz; f->x += f->dx * speed * SPEED_SCALE; f->y += f->dy * speed * SPEED_SCALE; f->z += f->dz * speed * SPEED_SCALE; if (f->y < -BOTTOM || f->x < -BOTTOM*8 || f->x > BOTTOM*8 || f->z < -BOTTOM*8 || f->z > BOTTOM*8) reset_floater (mi, f); } static int build_corner (ModeInfo *mi) { cube_configuration *bp = &bps[MI_SCREEN(mi)]; GLfloat s; const struct gllist *gll = *all_objs[BASE_QUAD]; glPushMatrix(); glTranslatef (-0.5, -0.5, -0.5); s = 0.659; glScalef (s, s, s); glRotatef (180, 0, 1, 0); glRotatef (180, 0, 0, 1); glTranslatef (-0.12, -1.64, 0.12); glCallList (bp->dlists[BASE_QUAD]); glPopMatrix(); return gll->points / 3; } static int build_face (ModeInfo *mi) { int polys = 0; cube_configuration *bp = &bps[MI_SCREEN(mi)]; int wire = MI_IS_WIREFRAME(mi); GLfloat s; const struct gllist *gll; GLfloat base_color[4] = {0.53, 0.60, 0.66, 1.00}; GLfloat heart_color[4] = {0.92, 0.67, 1.00, 1.00}; GLfloat disc_color[4] = {0.75, 0.92, 1.00, 1.00}; GLfloat corner_color[4] = {0.75, 0.92, 1.00, 1.00}; if (!wire) { GLfloat w = 0.010; glMaterialfv (GL_FRONT_AND_BACK, GL_AMBIENT_AND_DIFFUSE, base_color); glPushMatrix(); glNormal3f (0, 0, -1); glTranslatef (-0.5, -0.5, -0.5); glBegin(GL_QUADS); glVertex3f (0, 0, 0); glVertex3f (0, 0.5-w, 0); glVertex3f (0.5-w, 0.5-w, 0); glVertex3f (0.5-w, 0, 0); glVertex3f (0.5+w, 0, 0); glVertex3f (0.5+w, 0.5-w, 0); glVertex3f (1, 0.5-w, 0); glVertex3f (1, 0, 0); glVertex3f (0, 0.5+w, 0); glVertex3f (0, 1, 0); glVertex3f (0.5-w, 1, 0); glVertex3f (0.5-w, 0.5+w, 0); glVertex3f (0.5+w, 0.5+w, 0); glVertex3f (0.5+w, 1, 0); glVertex3f (1, 1, 0); glVertex3f (1, 0.5+w, 0); glEnd(); glMaterialfv (GL_FRONT_AND_BACK, GL_AMBIENT_AND_DIFFUSE, heart_color); glNormal3f (0, -1, 0); glBegin(GL_QUADS); glVertex3f (0, 0.5+w, 0); glVertex3f (1, 0.5+w, 0); glVertex3f (1, 0.5+w, w); glVertex3f (0, 0.5+w, w); glEnd(); glNormal3f (0, 1, 0); glBegin(GL_QUADS); glVertex3f (0, 0.5-w, w); glVertex3f (1, 0.5-w, w); glVertex3f (1, 0.5-w, 0); glVertex3f (0, 0.5-w, 0); glEnd(); glNormal3f (-1, 0, 0); glBegin(GL_QUADS); glVertex3f (0.5+w, 0, w); glVertex3f (0.5+w, 1, w); glVertex3f (0.5+w, 1, 0); glVertex3f (0.5+w, 0, 0); glEnd(); glNormal3f (1, 0, 0); glBegin(GL_QUADS); glVertex3f (0.5-w, 0, 0); glVertex3f (0.5-w, 1, 0); glVertex3f (0.5-w, 1, w); glVertex3f (0.5-w, 0, w); glEnd(); glMaterialfv (GL_FRONT_AND_BACK, GL_AMBIENT_AND_DIFFUSE, heart_color); glNormal3f (0, 0, -1); glTranslatef (0, 0, w); glBegin(GL_QUADS); glVertex3f (0, 0, 0); glVertex3f (0, 1, 0); glVertex3f (1, 1, 0); glVertex3f (1, 0, 0); glEnd(); glPopMatrix(); } glMaterialfv (GL_FRONT_AND_BACK, GL_AMBIENT_AND_DIFFUSE, corner_color); glPushMatrix(); polys += build_corner (mi); glRotatef (90, 0, 0, 1); polys += build_corner (mi); glRotatef (90, 0, 0, 1); polys += build_corner (mi); glRotatef (90, 0, 0, 1); polys += build_corner (mi); glRotatef (90, 0, 0, 1); glTranslatef (0.585, -0.585, -0.5655); s = 10.5; glScalef (s, s, s); glRotatef (180, 0, 1, 0); if (! wire) { gll = *all_objs[BASE_HEART]; glMaterialfv (GL_FRONT_AND_BACK, GL_AMBIENT_AND_DIFFUSE, heart_color); glCallList (bp->dlists[BASE_HEART]); polys += gll->points / 3; } gll = *all_objs[BASE_DISC]; glMaterialfv (GL_FRONT_AND_BACK, GL_AMBIENT_AND_DIFFUSE, disc_color); glCallList (bp->dlists[BASE_DISC]); polys += gll->points / 3; glPopMatrix(); return polys; } static int build_cube (ModeInfo *mi) { int polys = 0; glPushMatrix(); polys += build_face (mi); glRotatef (90, 0, 1, 0); polys += build_face (mi); glRotatef (90, 0, 1, 0); polys += build_face (mi); glRotatef (90, 0, 1, 0); polys += build_face (mi); glRotatef (90, 1, 0, 0); polys += build_face (mi); glRotatef (180,1, 0, 0); polys += build_face (mi); glPopMatrix(); return polys; } /* Window management, etc */ ENTRYPOINT void reshape_cube (ModeInfo *mi, int width, int height) { GLfloat h = (GLfloat) height / (GLfloat) width; glViewport (0, 0, (GLint) width, (GLint) height); glMatrixMode(GL_PROJECTION); glLoadIdentity(); gluPerspective (30.0, 1/h, 1.0, 100); glMatrixMode(GL_MODELVIEW); glLoadIdentity(); gluLookAt( 0.0, 0.0, 30.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0); # ifdef HAVE_MOBILE /* Keep it the same relative size when rotated. */ { int o = (int) current_device_rotation(); if (o != 0 && o != 180 && o != -180) glScalef (1/h, 1/h, 1/h); } # endif glClear(GL_COLOR_BUFFER_BIT); } ENTRYPOINT Bool cube_handle_event (ModeInfo *mi, XEvent *event) { cube_configuration *bp = &bps[MI_SCREEN(mi)]; if (gltrackball_event_handler (event, bp->trackball, MI_WIDTH (mi), MI_HEIGHT (mi), &bp->button_down_p)) return True; return False; } ENTRYPOINT void init_cube (ModeInfo *mi) { cube_configuration *bp; int wire = MI_IS_WIREFRAME(mi); int i; if (!bps) { bps = (cube_configuration *) calloc (MI_NUM_SCREENS(mi), sizeof (cube_configuration)); if (!bps) { fprintf(stderr, "%s: out of memory\n", progname); exit(1); } } bp = &bps[MI_SCREEN(mi)]; bp->glx_context = init_GL(mi); reshape_cube (mi, MI_WIDTH(mi), MI_HEIGHT(mi)); glShadeModel(GL_SMOOTH); glEnable(GL_DEPTH_TEST); glEnable(GL_NORMALIZE); glEnable(GL_CULL_FACE); if (!wire) { GLfloat pos[4] = {0.7, 0.2, 0.4, 0.0}; /* GLfloat amb[4] = {0.0, 0.0, 0.0, 1.0};*/ GLfloat amb[4] = {0.2, 0.2, 0.2, 1.0}; GLfloat dif[4] = {1.0, 1.0, 1.0, 1.0}; GLfloat spc[4] = {1.0, 1.0, 1.0, 1.0}; glEnable(GL_LIGHTING); glEnable(GL_LIGHT0); glEnable(GL_DEPTH_TEST); glEnable(GL_CULL_FACE); glLightfv(GL_LIGHT0, GL_POSITION, pos); glLightfv(GL_LIGHT0, GL_AMBIENT, amb); glLightfv(GL_LIGHT0, GL_DIFFUSE, dif); glLightfv(GL_LIGHT0, GL_SPECULAR, spc); } bp->trackball = gltrackball_init (False); bp->dlists = (GLuint *) calloc (countof(all_objs)+2, sizeof(GLuint)); for (i = 0; i < countof(all_objs)+1; i++) bp->dlists[i] = glGenLists (1); for (i = 0; i < countof(all_objs); i++) { const struct gllist *gll = *all_objs[i]; glNewList (bp->dlists[i], GL_COMPILE); renderList (gll, wire); glEndList (); } glNewList (bp->dlists[i], GL_COMPILE); bp->cube_polys = build_cube (mi); glEndList (); bp->nfloaters = MI_COUNT (mi); bp->floaters = (floater *) calloc (bp->nfloaters, sizeof (floater)); for (i = 0; i < bp->nfloaters; i++) { floater *f = &bp->floaters[i]; double spin_speed = do_spin ? 0.7 : 10; double wander_speed = do_wander ? 0.02 : 0.05 * speed * SPEED_SCALE; double spin_accel = 0.5; f->rot = make_rotator (spin_speed, spin_speed, spin_speed, spin_accel, wander_speed, True); if (bp->nfloaters == 2) { f->x = (i ? 2 : -2); } else if (i != 0) { double th = (i - 1) * M_PI*2 / (bp->nfloaters-1); double r = 3; f->x = r * cos(th); f->z = r * sin(th); } f->ix = f->x; f->iy = f->y; f->iz = f->z; reset_floater (mi, f); } } static void draw_floater (ModeInfo *mi, floater *f) { cube_configuration *bp = &bps[MI_SCREEN(mi)]; GLfloat n; double x, y, z; get_position (f->rot, &x, &y, &z, !bp->button_down_p); glPushMatrix(); glTranslatef (f->x, f->y, f->z); if (do_wander) glTranslatef (x, y, z); if (do_spin) get_rotation (f->rot, &x, &y, &z, !bp->button_down_p); if (do_spin || f->spinner_p) { glRotatef (x * 360, 1, 0, 0); glRotatef (y * 360, 0, 1, 0); glRotatef (z * 360, 0, 0, 1); } else { glRotatef (f->zr * 360, 0, 1, 0); } n = 1.5; if (bp->nfloaters > 99) n *= 0.05; else if (bp->nfloaters > 25) n *= 0.18; else if (bp->nfloaters > 9) n *= 0.3; else if (bp->nfloaters > 1) n *= 0.7; n *= 2; if ((do_spin || do_wander) && bp->nfloaters > 1) n *= 0.7; glScalef(n, n, n); glCallList (bp->dlists[FULL_CUBE]); mi->polygon_count += bp->cube_polys; /* build_cube (mi);*/ glPopMatrix(); } ENTRYPOINT void draw_cube (ModeInfo *mi) { cube_configuration *bp = &bps[MI_SCREEN(mi)]; Display *dpy = MI_DISPLAY(mi); Window window = MI_WINDOW(mi); int i; if (!bp->glx_context) return; glXMakeCurrent(MI_DISPLAY(mi), MI_WINDOW(mi), *(bp->glx_context)); glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glPushMatrix (); glRotatef(current_device_rotation(), 0, 0, 1); gltrackball_rotate (bp->trackball); glScalef (2, 2, 2); mi->polygon_count = 0; # if 0 { floater F; F.x = F.y = F.z = 0; F.dx = F.dy = F.dz = 0; F.ddx = F.ddy = F.ddz = 0; F.rot = make_rotator (0, 0, 0, 1, 0, False); glRotatef (45, 0, 1, 0); draw_floater (mi, &F); } # else for (i = 0; i < bp->nfloaters; i++) { floater *f = &bp->floaters[i]; draw_floater (mi, f); tick_floater (mi, f); } # endif glPopMatrix (); if (mi->fps_p) do_fps (mi); glFinish(); glXSwapBuffers(dpy, window); } XSCREENSAVER_MODULE_2 ("CompanionCube", companioncube, cube) #endif /* USE_GL */ xscreensaver-5.36/hacks/glx/companion_quad.c000664 000767 000024 00000042302 12701612217 021164 0ustar00jwzstaff000000 000000 #include "gllist.h" static const float data[]={ 0.11097,0.464834,-0.878416,0.79903,1.636364,-0.247442, 0.138522,0.464654,-0.87459,0.773415,1.636364,-0.251499, 0.138522,0.464654,-0.87459,0.775033,1.681818,-0.227094, 0.11097,0.464834,-0.878416,0.79903,1.636364,-0.247442, 0.138522,0.464654,-0.87459,0.775033,1.681818,-0.227094, 0.11097,0.464834,-0.878416,0.796039,1.681818,-0.223767, -0.917485,0.21303,-0.335916,0.757576,1.636364,-0.208242, -0.917485,0.21303,-0.335916,0.757576,1.681818,-0.179415, -0.917485,0.21303,-0.335916,0.775033,1.681818,-0.227094, -0.917485,0.21303,-0.335916,0.757576,1.636364,-0.208242, -0.917485,0.21303,-0.335916,0.775033,1.681818,-0.227094, -0.917485,0.21303,-0.335916,0.773415,1.636364,-0.251499, -1,0,0,0.757576,1.636364,-0.208242, -1,0,0,0.757576,1.636364,-0.121212, -1,0,0,0.757576,1.549333,-0.121212, -1,0,0,0.757576,1.636364,-0.208242, -1,0,0,0.757576,1.549333,-0.121212, -1,0,0,0.757576,1.578161,-0.075758, -1,0,0,0.757576,1.636364,-0.208242, -1,0,0,0.757576,1.578161,-0.075758, -1,0,0,0.757576,1.636364,-0.075758, -1,0,0,0.757576,1.636364,-0.208242, -1,0,0,0.757576,1.636364,-0.075758, -1,0,0,0.757576,1.681818,-0.121212, -1,0,0,0.757576,1.636364,-0.208242, -1,0,0,0.757576,1.681818,-0.121212, -1,0,0,0.757576,1.681818,-0.179415, -0.917485,-0.335916,0.21303,0.757576,1.578161,-0.075758, -0.917485,-0.335916,0.21303,0.757576,1.549333,-0.121212, -0.917485,-0.335916,0.21303,0.773415,1.506076,-0.121212, -0.917485,-0.335916,0.21303,0.757576,1.578161,-0.075758, -0.917485,-0.335916,0.21303,0.773415,1.506076,-0.121212, -0.917485,-0.335916,0.21303,0.775033,1.530482,-0.075758, 0.138522,-0.87459,0.464654,0.773415,1.506076,-0.121212, 0.11097,-0.878416,0.464834,0.79903,1.510133,-0.121212, 0.11097,-0.878416,0.464834,0.796039,1.533809,-0.075758, 0.138522,-0.87459,0.464654,0.773415,1.506076,-0.121212, 0.11097,-0.878416,0.464834,0.796039,1.533809,-0.075758, 0.138522,-0.87459,0.464654,0.775033,1.530482,-0.075758, 0.11097,-0.878416,0.464834,0.796039,1.533809,-0.075758, 0.11097,-0.878416,0.464834,0.79903,1.510133,-0.121212, 0.055595,-0.883651,0.464834,0.83883,1.513897,-0.121212, 0.11097,-0.878416,0.464834,0.796039,1.533809,-0.075758, 0.055595,-0.883651,0.464834,0.83883,1.513897,-0.121212, 0.055595,-0.883651,0.464834,0.837333,1.537712,-0.075758, 0.055595,-0.883651,0.464834,0.837333,1.537712,-0.075758, 0.055595,-0.883651,0.464834,0.83883,1.513897,-0.121212, 0,-0.885398,0.464834,0.878788,1.515152,-0.121212, 0.055595,-0.883651,0.464834,0.837333,1.537712,-0.075758, 0,-0.885398,0.464834,0.878788,1.515152,-0.121212, 0,-0.885398,0.464834,0.878788,1.539015,-0.075758, -0.055595,-0.883651,0.464834,0.918745,1.513897,-0.121212, -0.055595,-0.883651,0.464834,0.920242,1.537712,-0.075758, 0,-0.885398,0.464834,0.878788,1.539015,-0.075758, -0.055595,-0.883651,0.464834,0.918745,1.513897,-0.121212, 0,-0.885398,0.464834,0.878788,1.539015,-0.075758, 0,-0.885398,0.464834,0.878788,1.515152,-0.121212, -0.11097,-0.878416,0.464834,0.958545,1.510133,-0.121212, -0.11097,-0.878416,0.464834,0.961536,1.533809,-0.075758, -0.055595,-0.883651,0.464834,0.920242,1.537712,-0.075758, -0.11097,-0.878416,0.464834,0.958545,1.510133,-0.121212, -0.055595,-0.883651,0.464834,0.920242,1.537712,-0.075758, -0.055595,-0.883651,0.464834,0.918745,1.513897,-0.121212, -0.11097,-0.878416,0.464834,0.958545,1.510133,-0.121212, -0.138522,-0.87459,0.464654,0.984161,1.506076,-0.121212, -0.138522,-0.87459,0.464654,0.982542,1.530482,-0.075758, -0.11097,-0.878416,0.464834,0.958545,1.510133,-0.121212, -0.138522,-0.87459,0.464654,0.982542,1.530482,-0.075758, -0.11097,-0.878416,0.464834,0.961536,1.533809,-0.075758, 0.917485,-0.335916,0.21303,1,1.549333,-0.121212, 0.917485,-0.335916,0.21303,1,1.578161,-0.075758, 0.917485,-0.335916,0.21303,0.982542,1.530482,-0.075758, 0.917485,-0.335916,0.21303,1,1.549333,-0.121212, 0.917485,-0.335916,0.21303,0.982542,1.530482,-0.075758, 0.917485,-0.335916,0.21303,0.984161,1.506076,-0.121212, 1,0,0,1,1.636364,-0.121212, 1,0,0,1,1.636364,-0.208242, 1,0,0,1,1.681818,-0.179415, 1,0,0,1,1.636364,-0.121212, 1,0,0,1,1.681818,-0.179415, 1,0,0,1,1.681818,-0.121212, 1,0,0,1,1.636364,-0.121212, 1,0,0,1,1.681818,-0.121212, 1,0,0,1,1.636364,-0.075758, 1,0,0,1,1.636364,-0.121212, 1,0,0,1,1.636364,-0.075758, 1,0,0,1,1.578161,-0.075758, 1,0,0,1,1.636364,-0.121212, 1,0,0,1,1.578161,-0.075758, 1,0,0,1,1.549333,-0.121212, 0.917485,0.21303,-0.335916,1,1.681818,-0.179415, 0.917485,0.21303,-0.335916,1,1.636364,-0.208242, 0.917485,0.21303,-0.335916,0.984161,1.636364,-0.251499, 0.917485,0.21303,-0.335916,1,1.681818,-0.179415, 0.917485,0.21303,-0.335916,0.984161,1.636364,-0.251499, 0.917485,0.21303,-0.335916,0.982542,1.681818,-0.227094, -0.138522,0.464654,-0.87459,0.984161,1.636364,-0.251499, -0.11097,0.464834,-0.878416,0.958545,1.636364,-0.247442, -0.11097,0.464834,-0.878416,0.961536,1.681818,-0.223767, -0.138522,0.464654,-0.87459,0.984161,1.636364,-0.251499, -0.11097,0.464834,-0.878416,0.961536,1.681818,-0.223767, -0.138522,0.464654,-0.87459,0.982542,1.681818,-0.227094, -0.11097,0.464834,-0.878416,0.961536,1.681818,-0.223767, -0.11097,0.464834,-0.878416,0.958545,1.636364,-0.247442, -0.055595,0.464834,-0.883651,0.918745,1.636364,-0.24368, -0.11097,0.464834,-0.878416,0.961536,1.681818,-0.223767, -0.055595,0.464834,-0.883651,0.918745,1.636364,-0.24368, -0.055595,0.464834,-0.883651,0.920242,1.681818,-0.219863, -0.055595,0.464834,-0.883651,0.920242,1.681818,-0.219863, -0.055595,0.464834,-0.883651,0.918745,1.636364,-0.24368, 0,0.464834,-0.885398,0.878788,1.636364,-0.242424, -0.055595,0.464834,-0.883651,0.920242,1.681818,-0.219863, 0,0.464834,-0.885398,0.878788,1.636364,-0.242424, 0,0.464834,-0.885398,0.878788,1.681818,-0.218561, 0.055595,0.464834,-0.883651,0.83883,1.636364,-0.24368, 0.055595,0.464834,-0.883651,0.837333,1.681818,-0.219863, 0,0.464834,-0.885398,0.878788,1.681818,-0.218561, 0.055595,0.464834,-0.883651,0.83883,1.636364,-0.24368, 0,0.464834,-0.885398,0.878788,1.681818,-0.218561, 0,0.464834,-0.885398,0.878788,1.636364,-0.242424, 0.11097,0.464834,-0.878416,0.79903,1.636364,-0.247442, 0.11097,0.464834,-0.878416,0.796039,1.681818,-0.223767, 0.055595,0.464834,-0.883651,0.837333,1.681818,-0.219863, 0.11097,0.464834,-0.878416,0.79903,1.636364,-0.247442, 0.055595,0.464834,-0.883651,0.837333,1.681818,-0.219863, 0.055595,0.464834,-0.883651,0.83883,1.636364,-0.24368, 0,1,0,0.920242,1.681818,-0.219863, 0,1,0,0.878788,1.681818,-0.218561, 0,1,0,0.837333,1.681818,-0.219863, 0,1,0,0.920242,1.681818,-0.219863, 0,1,0,0.837333,1.681818,-0.219863, 0,1,0,0.796039,1.681818,-0.223767, 0,1,0,0.920242,1.681818,-0.219863, 0,1,0,0.796039,1.681818,-0.223767, 0,1,0,0.775033,1.681818,-0.227094, 0,1,0,0.920242,1.681818,-0.219863, 0,1,0,0.775033,1.681818,-0.227094, 0,1,0,0.757576,1.681818,-0.179415, 0,1,0,0.920242,1.681818,-0.219863, 0,1,0,0.757576,1.681818,-0.179415, 0,1,0,0.757576,1.681818,-0.121212, 0,1,0,0.920242,1.681818,-0.219863, 0,1,0,0.757576,1.681818,-0.121212, 0,1,0,1,1.681818,-0.121212, 0,1,0,0.920242,1.681818,-0.219863, 0,1,0,1,1.681818,-0.121212, 0,1,0,1,1.681818,-0.179415, 0,1,0,0.920242,1.681818,-0.219863, 0,1,0,1,1.681818,-0.179415, 0,1,0,0.982542,1.681818,-0.227094, 0,1,0,0.920242,1.681818,-0.219863, 0,1,0,0.982542,1.681818,-0.227094, 0,1,0,0.961536,1.681818,-0.223767, 0,0.707107,0.707107,0.757576,1.681818,-0.121212, 0,0.707107,0.707107,0.757576,1.636364,-0.075758, 0,0.707107,0.707107,1,1.636364,-0.075758, 0,0.707107,0.707107,0.757576,1.681818,-0.121212, 0,0.707107,0.707107,1,1.636364,-0.075758, 0,0.707107,0.707107,1,1.681818,-0.121212, 0,0,1,1,1.578161,-0.075758, 0,0,1,1,1.636364,-0.075758, 0,0,1,0.757576,1.636364,-0.075758, 0,0,1,1,1.578161,-0.075758, 0,0,1,0.757576,1.636364,-0.075758, 0,0,1,0.757576,1.578161,-0.075758, 0,0,1,1,1.578161,-0.075758, 0,0,1,0.757576,1.578161,-0.075758, 0,0,1,0.775033,1.530482,-0.075758, 0,0,1,1,1.578161,-0.075758, 0,0,1,0.775033,1.530482,-0.075758, 0,0,1,0.796039,1.533809,-0.075758, 0,0,1,1,1.578161,-0.075758, 0,0,1,0.796039,1.533809,-0.075758, 0,0,1,0.837333,1.537712,-0.075758, 0,0,1,1,1.578161,-0.075758, 0,0,1,0.837333,1.537712,-0.075758, 0,0,1,0.878788,1.539015,-0.075758, 0,0,1,1,1.578161,-0.075758, 0,0,1,0.878788,1.539015,-0.075758, 0,0,1,0.920242,1.537712,-0.075758, 0,0,1,1,1.578161,-0.075758, 0,0,1,0.920242,1.537712,-0.075758, 0,0,1,0.961536,1.533809,-0.075758, 0,0,1,1,1.578161,-0.075758, 0,0,1,0.961536,1.533809,-0.075758, 0,0,1,0.982542,1.530482,-0.075758, 0,0,1,0.121212,1.636364,0, 0,0,1,0.121212,1.125055,0, 0,0,1,0.223833,1.125055,0, 0,0,1,0.121212,1.636364,0, 0,0,1,0.223833,1.125055,0, 0,0,1,0.227944,1.136476,0, 0,0,1,0.121212,1.636364,0, 0,0,1,0.227944,1.136476,0, 0,0,1,0.245409,1.176833,0, 0,0,1,0.121212,1.636364,0, 0,0,1,0.245409,1.176833,0, 0,0,1,0.265373,1.216015,0, 0,0,1,0.121212,1.636364,0, 0,0,1,0.265373,1.216015,0, 0,0,1,0.287758,1.253867,0, 0,0,1,0.121212,1.636364,0, 0,0,1,0.287758,1.253867,0, 0,0,1,0.312476,1.290236,0, 0,0,1,0.121212,1.636364,0, 0,0,1,0.312476,1.290236,0, 0,0,1,0.339427,1.324985,0, 0,0,1,0.121212,1.636364,0, 0,0,1,0.339427,1.324985,0, 0,0,1,0.368509,1.35797,0, 0,0,1,0.121212,1.636364,0, 0,0,1,0.368509,1.35797,0, 0,0,1,0.399606,1.389067,0, 0,0,1,0.121212,1.636364,0, 0,0,1,0.399606,1.389067,0, 0,0,1,0.432591,1.418148,0, 0,0,1,0.121212,1.636364,0, 0,0,1,0.432591,1.418148,0, 0,0,1,0.467339,1.4451,0, 0,0,1,0.121212,1.636364,0, 0,0,1,0.467339,1.4451,0, 0,0,1,0.503709,1.469818,0, 0,0,1,0.121212,1.636364,0, 0,0,1,0.503709,1.469818,0, 0,0,1,0.541561,1.492203,0, 0,0,1,0.121212,1.636364,0, 0,0,1,0.541561,1.492203,0, 0,0,1,0.580742,1.512167,0, 0,0,1,0.121212,1.636364,0, 0,0,1,0.580742,1.512167,0, 0,0,1,0.6211,1.52963,0, 0,0,1,0.121212,1.636364,0, 0,0,1,0.6211,1.52963,0, 0,0,1,0.632521,1.533742,0, 0,0,1,0.121212,1.636364,0, 0,0,1,0.632521,1.533742,0, 0,0,1,0.632521,1.636364,0, 0,0,1,0.121212,1.636364,0, 0,0,1,0.632521,1.636364,0, 0,0,1,0.121212,1.636364,0, 0,0,1,0.121212,1.636364,0, 0,0,1,0.121212,1.636364,0, 0,0,1,0.121212,1.125055,0, 0.645427,-0.606097,0.464834,0.4149,1.314409,-0.121212, 0.645427,-0.606097,0.464834,0.368509,1.35797,0, 0.682211,-0.564374,0.464834,0.339427,1.324985,0, 0.645427,-0.606097,0.464834,0.4149,1.314409,-0.121212, 0.682211,-0.564374,0.464834,0.339427,1.324985,0, 0.682211,-0.564374,0.464834,0.388461,1.284421,-0.121212, 0.645427,-0.606097,0.464834,0.368509,1.35797,0, 0.645427,-0.606097,0.464834,0.4149,1.314409,-0.121212, 0.606097,-0.645427,0.464834,0.443167,1.342676,-0.121212, 0.645427,-0.606097,0.464834,0.368509,1.35797,0, 0.606097,-0.645427,0.464834,0.443167,1.342676,-0.121212, 0.606097,-0.645427,0.464834,0.399606,1.389067,0, 0.606097,-0.645427,0.464834,0.399606,1.389067,0, 0.606097,-0.645427,0.464834,0.443167,1.342676,-0.121212, 0.564374,-0.682211,0.464834,0.473155,1.369115,-0.121212, 0.606097,-0.645427,0.464834,0.399606,1.389067,0, 0.564374,-0.682211,0.464834,0.473155,1.369115,-0.121212, 0.564374,-0.682211,0.464834,0.432591,1.418148,0, 0.564374,-0.682211,0.464834,0.432591,1.418148,0, 0.564374,-0.682211,0.464834,0.473155,1.369115,-0.121212, 0.520424,-0.716302,0.464834,0.504742,1.393618,-0.121212, 0.564374,-0.682211,0.464834,0.432591,1.418148,0, 0.520424,-0.716302,0.464834,0.504742,1.393618,-0.121212, 0.520424,-0.716302,0.464834,0.467339,1.4451,0, 0.520424,-0.716302,0.464834,0.467339,1.4451,0, 0.520424,-0.716302,0.464834,0.504742,1.393618,-0.121212, 0.47442,-0.747566,0.464834,0.537806,1.416088,-0.121212, 0.520424,-0.716302,0.464834,0.467339,1.4451,0, 0.47442,-0.747566,0.464834,0.537806,1.416088,-0.121212, 0.47442,-0.747566,0.464834,0.503709,1.469818,0, 0.47442,-0.747566,0.464834,0.503709,1.469818,0, 0.47442,-0.747566,0.464834,0.537806,1.416088,-0.121212, 0.426544,-0.77588,0.464834,0.572218,1.436436,-0.121212, 0.47442,-0.747566,0.464834,0.503709,1.469818,0, 0.426544,-0.77588,0.464834,0.572218,1.436436,-0.121212, 0.426544,-0.77588,0.464834,0.541561,1.492203,0, 0.426544,-0.77588,0.464834,0.541561,1.492203,0, 0.426544,-0.77588,0.464834,0.572218,1.436436,-0.121212, 0.376984,-0.801132,0.464834,0.607836,1.454588,-0.121212, 0.426544,-0.77588,0.464834,0.541561,1.492203,0, 0.376984,-0.801132,0.464834,0.607836,1.454588,-0.121212, 0.376984,-0.801132,0.464834,0.580742,1.512167,0, 0.376984,-0.801132,0.464834,0.580742,1.512167,0, 0.376984,-0.801132,0.464834,0.607836,1.454588,-0.121212, 0.325937,-0.823222,0.464834,0.644527,1.470464,-0.121212, 0.376984,-0.801132,0.464834,0.580742,1.512167,0, 0.325937,-0.823222,0.464834,0.644527,1.470464,-0.121212, 0.325937,-0.823222,0.464834,0.6211,1.52963,0, 0.29995,-0.833143,0.464654,0.632521,1.533742,0, 0.325937,-0.823222,0.464834,0.6211,1.52963,0, 0.325937,-0.823222,0.464834,0.644527,1.470464,-0.121212, 0.29995,-0.833143,0.464654,0.632521,1.533742,0, 0.325937,-0.823222,0.464834,0.644527,1.470464,-0.121212, 0.273603,-0.842063,0.464834,0.682139,1.484006,-0.121212, 0.29995,-0.833143,0.464654,0.632521,1.533742,0, 0.273603,-0.842063,0.464834,0.682139,1.484006,-0.121212, 0.273603,-0.842063,0.464834,0.67563,1.504045,-0.081077, 0.273603,-0.842063,0.464834,0.67563,1.504045,-0.081077, 0.273603,-0.842063,0.464834,0.682139,1.484006,-0.121212, 0.247044,-0.850333,0.464654,0.69697,1.488315,-0.121212, 0.882948,0,0.469472,0.632521,1.636364,0, 0.882948,0,0.469472,0.632521,1.533742,0, 0.882948,0,0.469472,0.67563,1.504045,-0.081077, 0.882948,0,0.469472,0.632521,1.636364,0, 0.882948,0,0.469472,0.67563,1.504045,-0.081077, 0.882948,0,0.469472,0.69697,1.488315,-0.121212, 0.882948,0,0.469472,0.632521,1.636364,0, 0.882948,0,0.469472,0.69697,1.488315,-0.121212, 0.882948,0,0.469472,0.69697,1.636364,-0.121212, 0.799251,0.424969,0.424969,0.69697,1.636364,-0.121212, 0.799251,0.424969,0.424969,0.632521,1.757576,-0.121212, 0.799251,0.424969,0.424969,0.632521,1.636364,0, 0,0.707107,0.707107,0.632521,1.757576,-0.121212, 0,0.707107,0.707107,0.121212,1.757576,-0.121212, 0,0.707107,0.707107,0.121212,1.636364,0, 0,0.707107,0.707107,0.632521,1.757576,-0.121212, 0,0.707107,0.707107,0.121212,1.636364,0, 0,0.707107,0.707107,0.632521,1.636364,0, -0.57735,0.57735,0.57735,0.121212,1.757576,-0.121212, -0.57735,0.57735,0.57735,0,1.636364,-0.121212, -0.57735,0.57735,0.57735,0.121212,1.636364,0, -0.707107,0,0.707107,0,1.636364,-0.121212, -0.707107,0,0.707107,0,1.125055,-0.121212, -0.707107,0,0.707107,0.121212,1.125055,0, -0.707107,0,0.707107,0,1.636364,-0.121212, -0.707107,0,0.707107,0.121212,1.125055,0, -0.707107,0,0.707107,0.121212,1.636364,0, -0.424969,-0.799251,0.424969,0,1.125055,-0.121212, -0.424969,-0.799251,0.424969,0.121212,1.060606,-0.121212, -0.424969,-0.799251,0.424969,0.121212,1.125055,0, 0,-0.882948,0.469472,0.223833,1.125055,0, 0,-0.882948,0.469472,0.121212,1.125055,0, 0,-0.882948,0.469472,0.121212,1.060606,-0.121212, 0,-0.882948,0.469472,0.223833,1.125055,0, 0,-0.882948,0.469472,0.121212,1.060606,-0.121212, 0,-0.882948,0.469472,0.269262,1.060606,-0.121212, 0,-0.882948,0.469472,0.223833,1.125055,0, 0,-0.882948,0.469472,0.269262,1.060606,-0.121212, 0,-0.882948,0.469472,0.25353,1.081945,-0.081077, 0.842063,-0.273603,0.464834,0.27357,1.075436,-0.121212, 0.842063,-0.273603,0.464834,0.25353,1.081945,-0.081077, 0.850333,-0.247044,0.464654,0.269262,1.060606,-0.121212, 0.823222,-0.325937,0.464834,0.227944,1.136476,0, 0.833143,-0.29995,0.464654,0.223833,1.125055,0, 0.842063,-0.273603,0.464834,0.25353,1.081945,-0.081077, 0.823222,-0.325937,0.464834,0.227944,1.136476,0, 0.842063,-0.273603,0.464834,0.25353,1.081945,-0.081077, 0.842063,-0.273603,0.464834,0.27357,1.075436,-0.121212, 0.823222,-0.325937,0.464834,0.227944,1.136476,0, 0.842063,-0.273603,0.464834,0.27357,1.075436,-0.121212, 0.823222,-0.325937,0.464834,0.287112,1.113048,-0.121212, 0.801132,-0.376984,0.464834,0.302989,1.149739,-0.121212, 0.801132,-0.376984,0.464834,0.245409,1.176833,0, 0.823222,-0.325937,0.464834,0.227944,1.136476,0, 0.801132,-0.376984,0.464834,0.302989,1.149739,-0.121212, 0.823222,-0.325937,0.464834,0.227944,1.136476,0, 0.823222,-0.325937,0.464834,0.287112,1.113048,-0.121212, 0.77588,-0.426544,0.464834,0.321139,1.185358,-0.121212, 0.77588,-0.426544,0.464834,0.265373,1.216015,0, 0.801132,-0.376984,0.464834,0.245409,1.176833,0, 0.77588,-0.426544,0.464834,0.321139,1.185358,-0.121212, 0.801132,-0.376984,0.464834,0.245409,1.176833,0, 0.801132,-0.376984,0.464834,0.302989,1.149739,-0.121212, 0.747566,-0.47442,0.464834,0.341488,1.21977,-0.121212, 0.747566,-0.47442,0.464834,0.287758,1.253867,0, 0.77588,-0.426544,0.464834,0.265373,1.216015,0, 0.747566,-0.47442,0.464834,0.341488,1.21977,-0.121212, 0.77588,-0.426544,0.464834,0.265373,1.216015,0, 0.77588,-0.426544,0.464834,0.321139,1.185358,-0.121212, 0.716302,-0.520424,0.464834,0.363958,1.252833,-0.121212, 0.716302,-0.520424,0.464834,0.312476,1.290236,0, 0.747566,-0.47442,0.464834,0.287758,1.253867,0, 0.716302,-0.520424,0.464834,0.363958,1.252833,-0.121212, 0.747566,-0.47442,0.464834,0.287758,1.253867,0, 0.747566,-0.47442,0.464834,0.341488,1.21977,-0.121212, 0.682211,-0.564374,0.464834,0.388461,1.284421,-0.121212, 0.682211,-0.564374,0.464834,0.339427,1.324985,0, 0.716302,-0.520424,0.464834,0.312476,1.290236,0, 0.682211,-0.564374,0.464834,0.388461,1.284421,-0.121212, 0.716302,-0.520424,0.464834,0.312476,1.290236,0, 0.716302,-0.520424,0.464834,0.363958,1.252833,-0.121212 }; static const struct gllist frame={GL_N3F_V3F,GL_TRIANGLES,384,data,NULL}; const struct gllist *companion_quad=&frame; xscreensaver-5.36/hacks/glx/companion_disc.c000664 000767 000024 00002034342 12701612217 021163 0ustar00jwzstaff000000 000000 #include "gllist.h" static const float data[]={ -0.904813,-0.425773,0.005552,0.040192,0.048501,-0.006167, -0.902569,-0.424717,0.070606,0.040194,0.048502,-0.006013, -0.927456,-0.367206,0.070606,0.039761,0.049501,-0.006013, -0.904813,-0.425773,0.005552,0.040192,0.048501,-0.006167, -0.927456,-0.367206,0.070606,0.039761,0.049501,-0.006013, -0.929762,-0.368119,0.005552,0.03976,0.049501,-0.006167, -0.876293,-0.481746,0.005552,0.040687,0.04753,-0.006167, -0.87412,-0.480551,0.070606,0.040688,0.047531,-0.006013, -0.902569,-0.424717,0.070606,0.040194,0.048502,-0.006013, -0.876293,-0.481746,0.005552,0.040687,0.04753,-0.006167, -0.902569,-0.424717,0.070606,0.040194,0.048502,-0.006013, -0.904813,-0.425773,0.005552,0.040192,0.048501,-0.006167, -0.844315,-0.535819,0.005552,0.041241,0.046592,-0.006167, -0.842221,-0.53449,0.070606,0.041243,0.046593,-0.006013, -0.87412,-0.480551,0.070606,0.040688,0.047531,-0.006013, -0.844315,-0.535819,0.005552,0.041241,0.046592,-0.006167, -0.87412,-0.480551,0.070606,0.040688,0.047531,-0.006013, -0.876293,-0.481746,0.005552,0.040687,0.04753,-0.006167, -0.809005,-0.587776,0.005552,0.041854,0.045691,-0.006167, -0.806998,-0.586318,0.070606,0.041855,0.045692,-0.006013, -0.842221,-0.53449,0.070606,0.041243,0.046593,-0.006013, -0.809005,-0.587776,0.005552,0.041854,0.045691,-0.006167, -0.842221,-0.53449,0.070606,0.041243,0.046593,-0.006013, -0.844315,-0.535819,0.005552,0.041241,0.046592,-0.006167, -0.770501,-0.637414,0.005552,0.042522,0.04483,-0.006167, -0.76859,-0.635833,0.070606,0.042523,0.044831,-0.006013, -0.806998,-0.586318,0.070606,0.041855,0.045692,-0.006013, -0.770501,-0.637414,0.005552,0.042522,0.04483,-0.006167, -0.806998,-0.586318,0.070606,0.041855,0.045692,-0.006013, -0.809005,-0.587776,0.005552,0.041854,0.045691,-0.006167, -0.728957,-0.684537,0.005552,0.043242,0.044013,-0.006167, -0.727149,-0.682839,0.070606,0.043243,0.044014,-0.006013, -0.76859,-0.635833,0.070606,0.042523,0.044831,-0.006013, -0.728957,-0.684537,0.005552,0.043242,0.044013,-0.006167, -0.76859,-0.635833,0.070606,0.042523,0.044831,-0.006013, -0.770501,-0.637414,0.005552,0.042522,0.04483,-0.006167, -0.684537,-0.728957,0.005552,0.044013,0.043242,-0.006167, -0.682839,-0.727149,0.070606,0.044014,0.043243,-0.006013, -0.727149,-0.682839,0.070606,0.043243,0.044014,-0.006013, -0.684537,-0.728957,0.005552,0.044013,0.043242,-0.006167, -0.727149,-0.682839,0.070606,0.043243,0.044014,-0.006013, -0.728957,-0.684537,0.005552,0.043242,0.044013,-0.006167, -0.637414,-0.770501,0.005552,0.04483,0.042522,-0.006167, -0.635833,-0.76859,0.070606,0.044831,0.042523,-0.006013, -0.682839,-0.727149,0.070606,0.044014,0.043243,-0.006013, -0.637414,-0.770501,0.005552,0.04483,0.042522,-0.006167, -0.682839,-0.727149,0.070606,0.044014,0.043243,-0.006013, -0.684537,-0.728957,0.005552,0.044013,0.043242,-0.006167, -0.587776,-0.809005,0.005552,0.045691,0.041854,-0.006167, -0.586318,-0.806998,0.070606,0.045692,0.041855,-0.006013, -0.635833,-0.76859,0.070606,0.044831,0.042523,-0.006013, -0.587776,-0.809005,0.005552,0.045691,0.041854,-0.006167, -0.635833,-0.76859,0.070606,0.044831,0.042523,-0.006013, -0.637414,-0.770501,0.005552,0.04483,0.042522,-0.006167, -0.535819,-0.844315,0.005552,0.046592,0.041241,-0.006167, -0.53449,-0.842221,0.070606,0.046593,0.041243,-0.006013, -0.586318,-0.806998,0.070606,0.045692,0.041855,-0.006013, -0.535819,-0.844315,0.005552,0.046592,0.041241,-0.006167, -0.586318,-0.806998,0.070606,0.045692,0.041855,-0.006013, -0.587776,-0.809005,0.005552,0.045691,0.041854,-0.006167, -0.481746,-0.876293,0.005552,0.04753,0.040687,-0.006167, -0.480551,-0.87412,0.070606,0.047531,0.040688,-0.006013, -0.53449,-0.842221,0.070606,0.046593,0.041243,-0.006013, -0.481746,-0.876293,0.005552,0.04753,0.040687,-0.006167, -0.53449,-0.842221,0.070606,0.046593,0.041243,-0.006013, -0.535819,-0.844315,0.005552,0.046592,0.041241,-0.006167, -0.425773,-0.904813,0.005552,0.048501,0.040192,-0.006167, -0.424717,-0.902569,0.070606,0.048502,0.040194,-0.006013, -0.480551,-0.87412,0.070606,0.047531,0.040688,-0.006013, -0.425773,-0.904813,0.005552,0.048501,0.040192,-0.006167, -0.480551,-0.87412,0.070606,0.047531,0.040688,-0.006013, -0.481746,-0.876293,0.005552,0.04753,0.040687,-0.006167, -0.368119,-0.929762,0.005552,0.049501,0.03976,-0.006167, -0.367206,-0.927456,0.070606,0.049501,0.039761,-0.006013, -0.424717,-0.902569,0.070606,0.048502,0.040194,-0.006013, -0.368119,-0.929762,0.005552,0.049501,0.03976,-0.006167, -0.424717,-0.902569,0.070606,0.048502,0.040194,-0.006013, -0.425773,-0.904813,0.005552,0.048501,0.040192,-0.006167, -0.309012,-0.951042,0.005552,0.050526,0.03939,-0.006167, -0.308246,-0.948683,0.070606,0.050526,0.039392,-0.006013, -0.367206,-0.927456,0.070606,0.049501,0.039761,-0.006013, -0.309012,-0.951042,0.005552,0.050526,0.03939,-0.006167, -0.367206,-0.927456,0.070606,0.049501,0.039761,-0.006013, -0.368119,-0.929762,0.005552,0.049501,0.03976,-0.006167, -0.248686,-0.968568,0.005552,0.051572,0.039087,-0.006167, -0.248069,-0.966166,0.070606,0.051572,0.039088,-0.006013, -0.308246,-0.948683,0.070606,0.050526,0.039392,-0.006013, -0.248686,-0.968568,0.005552,0.051572,0.039087,-0.006167, -0.308246,-0.948683,0.070606,0.050526,0.039392,-0.006013, -0.309012,-0.951042,0.005552,0.050526,0.03939,-0.006167, -0.187378,-0.982272,0.005552,0.052635,0.038849,-0.006167, -0.186914,-0.979836,0.070606,0.052636,0.03885,-0.006013, -0.248069,-0.966166,0.070606,0.051572,0.039088,-0.006013, -0.187378,-0.982272,0.005552,0.052635,0.038849,-0.006167, -0.248069,-0.966166,0.070606,0.051572,0.039088,-0.006013, -0.248686,-0.968568,0.005552,0.051572,0.039087,-0.006167, -0.125331,-0.992099,0.005552,0.053712,0.038678,-0.006167, -0.12502,-0.989639,0.070606,0.053712,0.03868,-0.006013, -0.186914,-0.979836,0.070606,0.052636,0.03885,-0.006013, -0.125331,-0.992099,0.005552,0.053712,0.038678,-0.006167, -0.186914,-0.979836,0.070606,0.052636,0.03885,-0.006013, -0.187378,-0.982272,0.005552,0.052635,0.038849,-0.006167, -0.07324,-0.997287,0.007402,0.054796,0.038576,-0.006167, -0.062634,-0.995536,0.070606,0.054796,0.038577,-0.006013, -0.12502,-0.989639,0.070606,0.053712,0.03868,-0.006013, -0.07324,-0.997287,0.007402,0.054796,0.038576,-0.006167, -0.12502,-0.989639,0.070606,0.053712,0.03868,-0.006013, -0.125331,-0.992099,0.005552,0.053712,0.038678,-0.006167, 0,-0.999938,0.011104,0.055885,0.038542,-0.006167, 0,-0.997504,0.070606,0.055885,0.038543,-0.006013, -0.062634,-0.995536,0.070606,0.054796,0.038577,-0.006013, 0,-0.999938,0.011104,0.055885,0.038542,-0.006167, -0.062634,-0.995536,0.070606,0.054796,0.038577,-0.006013, -0.07324,-0.997287,0.007402,0.054796,0.038576,-0.006167, 0.07324,-0.997287,0.007402,0.056974,0.038576,-0.006167, 0.062634,-0.995536,0.070606,0.056974,0.038577,-0.006013, 0,-0.997504,0.070606,0.055885,0.038543,-0.006013, 0.07324,-0.997287,0.007402,0.056974,0.038576,-0.006167, 0,-0.997504,0.070606,0.055885,0.038543,-0.006013, 0,-0.999938,0.011104,0.055885,0.038542,-0.006167, 0.125331,-0.992099,0.005552,0.058059,0.038678,-0.006167, 0.12502,-0.989639,0.070606,0.058059,0.03868,-0.006013, 0.062634,-0.995536,0.070606,0.056974,0.038577,-0.006013, 0.125331,-0.992099,0.005552,0.058059,0.038678,-0.006167, 0.062634,-0.995536,0.070606,0.056974,0.038577,-0.006013, 0.07324,-0.997287,0.007402,0.056974,0.038576,-0.006167, 0.187378,-0.982272,0.005552,0.059135,0.038849,-0.006167, 0.186914,-0.979836,0.070606,0.059135,0.03885,-0.006013, 0.12502,-0.989639,0.070606,0.058059,0.03868,-0.006013, 0.187378,-0.982272,0.005552,0.059135,0.038849,-0.006167, 0.12502,-0.989639,0.070606,0.058059,0.03868,-0.006013, 0.125331,-0.992099,0.005552,0.058059,0.038678,-0.006167, 0.248686,-0.968568,0.005552,0.060198,0.039087,-0.006167, 0.248069,-0.966166,0.070606,0.060198,0.039088,-0.006013, 0.186914,-0.979836,0.070606,0.059135,0.03885,-0.006013, 0.248686,-0.968568,0.005552,0.060198,0.039087,-0.006167, 0.186914,-0.979836,0.070606,0.059135,0.03885,-0.006013, 0.187378,-0.982272,0.005552,0.059135,0.038849,-0.006167, 0.309012,-0.951042,0.005552,0.061245,0.03939,-0.006167, 0.308246,-0.948683,0.070606,0.061244,0.039392,-0.006013, 0.248069,-0.966166,0.070606,0.060198,0.039088,-0.006013, 0.309012,-0.951042,0.005552,0.061245,0.03939,-0.006167, 0.248069,-0.966166,0.070606,0.060198,0.039088,-0.006013, 0.248686,-0.968568,0.005552,0.060198,0.039087,-0.006167, 0.368119,-0.929762,0.005552,0.06227,0.03976,-0.006167, 0.367206,-0.927456,0.070606,0.062269,0.039761,-0.006013, 0.308246,-0.948683,0.070606,0.061244,0.039392,-0.006013, 0.368119,-0.929762,0.005552,0.06227,0.03976,-0.006167, 0.308246,-0.948683,0.070606,0.061244,0.039392,-0.006013, 0.309012,-0.951042,0.005552,0.061245,0.03939,-0.006167, 0.425773,-0.904813,0.005552,0.06327,0.040192,-0.006167, 0.424717,-0.902569,0.070606,0.063269,0.040194,-0.006013, 0.367206,-0.927456,0.070606,0.062269,0.039761,-0.006013, 0.425773,-0.904813,0.005552,0.06327,0.040192,-0.006167, 0.367206,-0.927456,0.070606,0.062269,0.039761,-0.006013, 0.368119,-0.929762,0.005552,0.06227,0.03976,-0.006167, 0.481746,-0.876293,0.005552,0.064241,0.040687,-0.006167, 0.480551,-0.87412,0.070606,0.06424,0.040688,-0.006013, 0.424717,-0.902569,0.070606,0.063269,0.040194,-0.006013, 0.481746,-0.876293,0.005552,0.064241,0.040687,-0.006167, 0.424717,-0.902569,0.070606,0.063269,0.040194,-0.006013, 0.425773,-0.904813,0.005552,0.06327,0.040192,-0.006167, 0.535819,-0.844315,0.005552,0.065178,0.041241,-0.006167, 0.53449,-0.842221,0.070606,0.065178,0.041243,-0.006013, 0.480551,-0.87412,0.070606,0.06424,0.040688,-0.006013, 0.535819,-0.844315,0.005552,0.065178,0.041241,-0.006167, 0.480551,-0.87412,0.070606,0.06424,0.040688,-0.006013, 0.481746,-0.876293,0.005552,0.064241,0.040687,-0.006167, 0.587776,-0.809005,0.005552,0.06608,0.041854,-0.006167, 0.586318,-0.806998,0.070606,0.066079,0.041855,-0.006013, 0.53449,-0.842221,0.070606,0.065178,0.041243,-0.006013, 0.587776,-0.809005,0.005552,0.06608,0.041854,-0.006167, 0.53449,-0.842221,0.070606,0.065178,0.041243,-0.006013, 0.535819,-0.844315,0.005552,0.065178,0.041241,-0.006167, 0.637414,-0.770501,0.005552,0.066941,0.042522,-0.006167, 0.635833,-0.76859,0.070606,0.06694,0.042523,-0.006013, 0.586318,-0.806998,0.070606,0.066079,0.041855,-0.006013, 0.637414,-0.770501,0.005552,0.066941,0.042522,-0.006167, 0.586318,-0.806998,0.070606,0.066079,0.041855,-0.006013, 0.587776,-0.809005,0.005552,0.06608,0.041854,-0.006167, 0.684537,-0.728957,0.005552,0.067758,0.043242,-0.006167, 0.682839,-0.727149,0.070606,0.067757,0.043243,-0.006013, 0.635833,-0.76859,0.070606,0.06694,0.042523,-0.006013, 0.684537,-0.728957,0.005552,0.067758,0.043242,-0.006167, 0.635833,-0.76859,0.070606,0.06694,0.042523,-0.006013, 0.637414,-0.770501,0.005552,0.066941,0.042522,-0.006167, 0.728957,-0.684537,0.005552,0.068528,0.044013,-0.006167, 0.727149,-0.682839,0.070606,0.068527,0.044014,-0.006013, 0.682839,-0.727149,0.070606,0.067757,0.043243,-0.006013, 0.728957,-0.684537,0.005552,0.068528,0.044013,-0.006167, 0.682839,-0.727149,0.070606,0.067757,0.043243,-0.006013, 0.684537,-0.728957,0.005552,0.067758,0.043242,-0.006167, 0.770501,-0.637414,0.005552,0.069249,0.04483,-0.006167, 0.76859,-0.635833,0.070606,0.069247,0.044831,-0.006013, 0.727149,-0.682839,0.070606,0.068527,0.044014,-0.006013, 0.770501,-0.637414,0.005552,0.069249,0.04483,-0.006167, 0.727149,-0.682839,0.070606,0.068527,0.044014,-0.006013, 0.728957,-0.684537,0.005552,0.068528,0.044013,-0.006167, 0.809005,-0.587776,0.005552,0.069917,0.045691,-0.006167, 0.806998,-0.586318,0.070606,0.069915,0.045692,-0.006013, 0.76859,-0.635833,0.070606,0.069247,0.044831,-0.006013, 0.809005,-0.587776,0.005552,0.069917,0.045691,-0.006167, 0.76859,-0.635833,0.070606,0.069247,0.044831,-0.006013, 0.770501,-0.637414,0.005552,0.069249,0.04483,-0.006167, 0.844315,-0.535819,0.005552,0.070529,0.046592,-0.006167, 0.842221,-0.53449,0.070606,0.070528,0.046593,-0.006013, 0.806998,-0.586318,0.070606,0.069915,0.045692,-0.006013, 0.844315,-0.535819,0.005552,0.070529,0.046592,-0.006167, 0.806998,-0.586318,0.070606,0.069915,0.045692,-0.006013, 0.809005,-0.587776,0.005552,0.069917,0.045691,-0.006167, 0.876293,-0.481746,0.005552,0.071084,0.04753,-0.006167, 0.87412,-0.480551,0.070606,0.071082,0.047531,-0.006013, 0.842221,-0.53449,0.070606,0.070528,0.046593,-0.006013, 0.876293,-0.481746,0.005552,0.071084,0.04753,-0.006167, 0.842221,-0.53449,0.070606,0.070528,0.046593,-0.006013, 0.844315,-0.535819,0.005552,0.070529,0.046592,-0.006167, 0.904813,-0.425773,0.005552,0.071578,0.048501,-0.006167, 0.902569,-0.424717,0.070606,0.071577,0.048502,-0.006013, 0.87412,-0.480551,0.070606,0.071082,0.047531,-0.006013, 0.904813,-0.425773,0.005552,0.071578,0.048501,-0.006167, 0.87412,-0.480551,0.070606,0.071082,0.047531,-0.006013, 0.876293,-0.481746,0.005552,0.071084,0.04753,-0.006167, 0.929762,-0.368119,0.005552,0.072011,0.049501,-0.006167, 0.927456,-0.367206,0.070606,0.07201,0.049501,-0.006013, 0.902569,-0.424717,0.070606,0.071577,0.048502,-0.006013, 0.929762,-0.368119,0.005552,0.072011,0.049501,-0.006167, 0.902569,-0.424717,0.070606,0.071577,0.048502,-0.006013, 0.904813,-0.425773,0.005552,0.071578,0.048501,-0.006167, 0.951042,-0.309012,0.005552,0.07238,0.050526,-0.006167, 0.948683,-0.308246,0.070606,0.072379,0.050526,-0.006013, 0.927456,-0.367206,0.070606,0.07201,0.049501,-0.006013, 0.951042,-0.309012,0.005552,0.07238,0.050526,-0.006167, 0.927456,-0.367206,0.070606,0.07201,0.049501,-0.006013, 0.929762,-0.368119,0.005552,0.072011,0.049501,-0.006167, 0.968568,-0.248686,0.005552,0.072684,0.051572,-0.006167, 0.966166,-0.248069,0.070606,0.072682,0.051572,-0.006013, 0.948683,-0.308246,0.070606,0.072379,0.050526,-0.006013, 0.968568,-0.248686,0.005552,0.072684,0.051572,-0.006167, 0.948683,-0.308246,0.070606,0.072379,0.050526,-0.006013, 0.951042,-0.309012,0.005552,0.07238,0.050526,-0.006167, 0.982272,-0.187378,0.005552,0.072922,0.052635,-0.006167, 0.979836,-0.186914,0.070606,0.07292,0.052636,-0.006013, 0.966166,-0.248069,0.070606,0.072682,0.051572,-0.006013, 0.982272,-0.187378,0.005552,0.072922,0.052635,-0.006167, 0.966166,-0.248069,0.070606,0.072682,0.051572,-0.006013, 0.968568,-0.248686,0.005552,0.072684,0.051572,-0.006167, 0.992099,-0.125331,0.005552,0.073092,0.053712,-0.006167, 0.989639,-0.12502,0.070606,0.073091,0.053712,-0.006013, 0.979836,-0.186914,0.070606,0.07292,0.052636,-0.006013, 0.992099,-0.125331,0.005552,0.073092,0.053712,-0.006167, 0.979836,-0.186914,0.070606,0.07292,0.052636,-0.006013, 0.982272,-0.187378,0.005552,0.072922,0.052635,-0.006167, 0.997287,-0.07324,0.007402,0.073195,0.054796,-0.006167, 0.995536,-0.062634,0.070606,0.073193,0.054796,-0.006013, 0.989639,-0.12502,0.070606,0.073091,0.053712,-0.006013, 0.997287,-0.07324,0.007402,0.073195,0.054796,-0.006167, 0.989639,-0.12502,0.070606,0.073091,0.053712,-0.006013, 0.992099,-0.125331,0.005552,0.073092,0.053712,-0.006167, 0.999938,0,0.011104,0.073229,0.055885,-0.006167, 0.997504,0,0.070606,0.073227,0.055885,-0.006013, 0.995536,-0.062634,0.070606,0.073193,0.054796,-0.006013, 0.999938,0,0.011104,0.073229,0.055885,-0.006167, 0.995536,-0.062634,0.070606,0.073193,0.054796,-0.006013, 0.997287,-0.07324,0.007402,0.073195,0.054796,-0.006167, 0.997287,0.07324,0.007402,0.073195,0.056974,-0.006167, 0.995536,0.062634,0.070606,0.073193,0.056974,-0.006013, 0.997504,0,0.070606,0.073227,0.055885,-0.006013, 0.997287,0.07324,0.007402,0.073195,0.056974,-0.006167, 0.997504,0,0.070606,0.073227,0.055885,-0.006013, 0.999938,0,0.011104,0.073229,0.055885,-0.006167, 0.992099,0.125331,0.005552,0.073092,0.058059,-0.006167, 0.989639,0.12502,0.070606,0.073091,0.058059,-0.006013, 0.995536,0.062634,0.070606,0.073193,0.056974,-0.006013, 0.992099,0.125331,0.005552,0.073092,0.058059,-0.006167, 0.995536,0.062634,0.070606,0.073193,0.056974,-0.006013, 0.997287,0.07324,0.007402,0.073195,0.056974,-0.006167, 0.982272,0.187378,0.005552,0.072922,0.059135,-0.006167, 0.979836,0.186914,0.070606,0.07292,0.059135,-0.006013, 0.989639,0.12502,0.070606,0.073091,0.058059,-0.006013, 0.982272,0.187378,0.005552,0.072922,0.059135,-0.006167, 0.989639,0.12502,0.070606,0.073091,0.058059,-0.006013, 0.992099,0.125331,0.005552,0.073092,0.058059,-0.006167, 0.968568,0.248686,0.005552,0.072684,0.060198,-0.006167, 0.966166,0.248069,0.070606,0.072682,0.060198,-0.006013, 0.979836,0.186914,0.070606,0.07292,0.059135,-0.006013, 0.968568,0.248686,0.005552,0.072684,0.060198,-0.006167, 0.979836,0.186914,0.070606,0.07292,0.059135,-0.006013, 0.982272,0.187378,0.005552,0.072922,0.059135,-0.006167, 0.951042,0.309012,0.005552,0.07238,0.061245,-0.006167, 0.948683,0.308246,0.070606,0.072379,0.061244,-0.006013, 0.966166,0.248069,0.070606,0.072682,0.060198,-0.006013, 0.951042,0.309012,0.005552,0.07238,0.061245,-0.006167, 0.966166,0.248069,0.070606,0.072682,0.060198,-0.006013, 0.968568,0.248686,0.005552,0.072684,0.060198,-0.006167, 0.929762,0.368119,0.005552,0.072011,0.06227,-0.006167, 0.927456,0.367206,0.070606,0.07201,0.062269,-0.006013, 0.948683,0.308246,0.070606,0.072379,0.061244,-0.006013, 0.929762,0.368119,0.005552,0.072011,0.06227,-0.006167, 0.948683,0.308246,0.070606,0.072379,0.061244,-0.006013, 0.951042,0.309012,0.005552,0.07238,0.061245,-0.006167, 0.904813,0.425773,0.005552,0.071578,0.06327,-0.006167, 0.902569,0.424717,0.070606,0.071577,0.063269,-0.006013, 0.927456,0.367206,0.070606,0.07201,0.062269,-0.006013, 0.904813,0.425773,0.005552,0.071578,0.06327,-0.006167, 0.927456,0.367206,0.070606,0.07201,0.062269,-0.006013, 0.929762,0.368119,0.005552,0.072011,0.06227,-0.006167, 0.876293,0.481746,0.005552,0.071084,0.064241,-0.006167, 0.87412,0.480551,0.070606,0.071082,0.06424,-0.006013, 0.902569,0.424717,0.070606,0.071577,0.063269,-0.006013, 0.876293,0.481746,0.005552,0.071084,0.064241,-0.006167, 0.902569,0.424717,0.070606,0.071577,0.063269,-0.006013, 0.904813,0.425773,0.005552,0.071578,0.06327,-0.006167, 0.844315,0.535819,0.005552,0.070529,0.065178,-0.006167, 0.842221,0.53449,0.070606,0.070528,0.065178,-0.006013, 0.87412,0.480551,0.070606,0.071082,0.06424,-0.006013, 0.844315,0.535819,0.005552,0.070529,0.065178,-0.006167, 0.87412,0.480551,0.070606,0.071082,0.06424,-0.006013, 0.876293,0.481746,0.005552,0.071084,0.064241,-0.006167, 0.809005,0.587776,0.005552,0.069917,0.06608,-0.006167, 0.806998,0.586318,0.070606,0.069915,0.066079,-0.006013, 0.842221,0.53449,0.070606,0.070528,0.065178,-0.006013, 0.809005,0.587776,0.005552,0.069917,0.06608,-0.006167, 0.842221,0.53449,0.070606,0.070528,0.065178,-0.006013, 0.844315,0.535819,0.005552,0.070529,0.065178,-0.006167, 0.770501,0.637414,0.005552,0.069249,0.066941,-0.006167, 0.76859,0.635833,0.070606,0.069247,0.06694,-0.006013, 0.806998,0.586318,0.070606,0.069915,0.066079,-0.006013, 0.770501,0.637414,0.005552,0.069249,0.066941,-0.006167, 0.806998,0.586318,0.070606,0.069915,0.066079,-0.006013, 0.809005,0.587776,0.005552,0.069917,0.06608,-0.006167, 0.728957,0.684537,0.005552,0.068528,0.067758,-0.006167, 0.727149,0.682839,0.070606,0.068527,0.067757,-0.006013, 0.76859,0.635833,0.070606,0.069247,0.06694,-0.006013, 0.728957,0.684537,0.005552,0.068528,0.067758,-0.006167, 0.76859,0.635833,0.070606,0.069247,0.06694,-0.006013, 0.770501,0.637414,0.005552,0.069249,0.066941,-0.006167, 0.684537,0.728957,0.005552,0.067758,0.068528,-0.006167, 0.682839,0.727149,0.070606,0.067757,0.068527,-0.006013, 0.727149,0.682839,0.070606,0.068527,0.067757,-0.006013, 0.684537,0.728957,0.005552,0.067758,0.068528,-0.006167, 0.727149,0.682839,0.070606,0.068527,0.067757,-0.006013, 0.728957,0.684537,0.005552,0.068528,0.067758,-0.006167, 0.637414,0.770501,0.005552,0.066941,0.069249,-0.006167, 0.635833,0.76859,0.070606,0.06694,0.069247,-0.006013, 0.682839,0.727149,0.070606,0.067757,0.068527,-0.006013, 0.637414,0.770501,0.005552,0.066941,0.069249,-0.006167, 0.682839,0.727149,0.070606,0.067757,0.068527,-0.006013, 0.684537,0.728957,0.005552,0.067758,0.068528,-0.006167, 0.587776,0.809005,0.005552,0.06608,0.069917,-0.006167, 0.586318,0.806998,0.070606,0.066079,0.069915,-0.006013, 0.635833,0.76859,0.070606,0.06694,0.069247,-0.006013, 0.587776,0.809005,0.005552,0.06608,0.069917,-0.006167, 0.635833,0.76859,0.070606,0.06694,0.069247,-0.006013, 0.637414,0.770501,0.005552,0.066941,0.069249,-0.006167, 0.535819,0.844315,0.005552,0.065178,0.070529,-0.006167, 0.53449,0.842221,0.070606,0.065178,0.070528,-0.006013, 0.586318,0.806998,0.070606,0.066079,0.069915,-0.006013, 0.535819,0.844315,0.005552,0.065178,0.070529,-0.006167, 0.586318,0.806998,0.070606,0.066079,0.069915,-0.006013, 0.587776,0.809005,0.005552,0.06608,0.069917,-0.006167, 0.481746,0.876293,0.005552,0.064241,0.071084,-0.006167, 0.480551,0.87412,0.070606,0.06424,0.071082,-0.006013, 0.53449,0.842221,0.070606,0.065178,0.070528,-0.006013, 0.481746,0.876293,0.005552,0.064241,0.071084,-0.006167, 0.53449,0.842221,0.070606,0.065178,0.070528,-0.006013, 0.535819,0.844315,0.005552,0.065178,0.070529,-0.006167, 0.425773,0.904813,0.005552,0.06327,0.071578,-0.006167, 0.424717,0.902569,0.070606,0.063269,0.071577,-0.006013, 0.480551,0.87412,0.070606,0.06424,0.071082,-0.006013, 0.425773,0.904813,0.005552,0.06327,0.071578,-0.006167, 0.480551,0.87412,0.070606,0.06424,0.071082,-0.006013, 0.481746,0.876293,0.005552,0.064241,0.071084,-0.006167, 0.368119,0.929762,0.005552,0.06227,0.072011,-0.006167, 0.367206,0.927456,0.070606,0.062269,0.07201,-0.006013, 0.424717,0.902569,0.070606,0.063269,0.071577,-0.006013, 0.368119,0.929762,0.005552,0.06227,0.072011,-0.006167, 0.424717,0.902569,0.070606,0.063269,0.071577,-0.006013, 0.425773,0.904813,0.005552,0.06327,0.071578,-0.006167, 0.309012,0.951042,0.005552,0.061245,0.07238,-0.006167, 0.308246,0.948683,0.070606,0.061244,0.072379,-0.006013, 0.367206,0.927456,0.070606,0.062269,0.07201,-0.006013, 0.309012,0.951042,0.005552,0.061245,0.07238,-0.006167, 0.367206,0.927456,0.070606,0.062269,0.07201,-0.006013, 0.368119,0.929762,0.005552,0.06227,0.072011,-0.006167, 0.248686,0.968568,0.005552,0.060198,0.072684,-0.006167, 0.248069,0.966166,0.070606,0.060198,0.072682,-0.006013, 0.308246,0.948683,0.070606,0.061244,0.072379,-0.006013, 0.248686,0.968568,0.005552,0.060198,0.072684,-0.006167, 0.308246,0.948683,0.070606,0.061244,0.072379,-0.006013, 0.309012,0.951042,0.005552,0.061245,0.07238,-0.006167, 0.187378,0.982272,0.005552,0.059135,0.072922,-0.006167, 0.186914,0.979836,0.070606,0.059135,0.07292,-0.006013, 0.248069,0.966166,0.070606,0.060198,0.072682,-0.006013, 0.187378,0.982272,0.005552,0.059135,0.072922,-0.006167, 0.248069,0.966166,0.070606,0.060198,0.072682,-0.006013, 0.248686,0.968568,0.005552,0.060198,0.072684,-0.006167, 0.125331,0.992099,0.005552,0.058059,0.073092,-0.006167, 0.12502,0.989639,0.070606,0.058059,0.073091,-0.006013, 0.186914,0.979836,0.070606,0.059135,0.07292,-0.006013, 0.125331,0.992099,0.005552,0.058059,0.073092,-0.006167, 0.186914,0.979836,0.070606,0.059135,0.07292,-0.006013, 0.187378,0.982272,0.005552,0.059135,0.072922,-0.006167, 0.07324,0.997287,0.007402,0.056974,0.073195,-0.006167, 0.062634,0.995536,0.070606,0.056974,0.073193,-0.006013, 0.12502,0.989639,0.070606,0.058059,0.073091,-0.006013, 0.07324,0.997287,0.007402,0.056974,0.073195,-0.006167, 0.12502,0.989639,0.070606,0.058059,0.073091,-0.006013, 0.125331,0.992099,0.005552,0.058059,0.073092,-0.006167, 0,0.999938,0.011104,0.055885,0.073229,-0.006167, 0,0.997504,0.070606,0.055885,0.073227,-0.006013, 0.062634,0.995536,0.070606,0.056974,0.073193,-0.006013, 0,0.999938,0.011104,0.055885,0.073229,-0.006167, 0.062634,0.995536,0.070606,0.056974,0.073193,-0.006013, 0.07324,0.997287,0.007402,0.056974,0.073195,-0.006167, -0.07324,0.997287,0.007402,0.054796,0.073195,-0.006167, -0.062634,0.995536,0.070606,0.054796,0.073193,-0.006013, 0,0.997504,0.070606,0.055885,0.073227,-0.006013, -0.07324,0.997287,0.007402,0.054796,0.073195,-0.006167, 0,0.997504,0.070606,0.055885,0.073227,-0.006013, 0,0.999938,0.011104,0.055885,0.073229,-0.006167, -0.125331,0.992099,0.005552,0.053712,0.073092,-0.006167, -0.12502,0.989639,0.070606,0.053712,0.073091,-0.006013, -0.062634,0.995536,0.070606,0.054796,0.073193,-0.006013, -0.125331,0.992099,0.005552,0.053712,0.073092,-0.006167, -0.062634,0.995536,0.070606,0.054796,0.073193,-0.006013, -0.07324,0.997287,0.007402,0.054796,0.073195,-0.006167, -0.187378,0.982272,0.005552,0.052635,0.072922,-0.006167, -0.186914,0.979836,0.070606,0.052636,0.07292,-0.006013, -0.12502,0.989639,0.070606,0.053712,0.073091,-0.006013, -0.187378,0.982272,0.005552,0.052635,0.072922,-0.006167, -0.12502,0.989639,0.070606,0.053712,0.073091,-0.006013, -0.125331,0.992099,0.005552,0.053712,0.073092,-0.006167, -0.248686,0.968568,0.005552,0.051572,0.072684,-0.006167, -0.248069,0.966166,0.070606,0.051572,0.072682,-0.006013, -0.186914,0.979836,0.070606,0.052636,0.07292,-0.006013, -0.248686,0.968568,0.005552,0.051572,0.072684,-0.006167, -0.186914,0.979836,0.070606,0.052636,0.07292,-0.006013, -0.187378,0.982272,0.005552,0.052635,0.072922,-0.006167, -0.309012,0.951042,0.005552,0.050526,0.07238,-0.006167, -0.308246,0.948683,0.070606,0.050526,0.072379,-0.006013, -0.248069,0.966166,0.070606,0.051572,0.072682,-0.006013, -0.309012,0.951042,0.005552,0.050526,0.07238,-0.006167, -0.248069,0.966166,0.070606,0.051572,0.072682,-0.006013, -0.248686,0.968568,0.005552,0.051572,0.072684,-0.006167, -0.368119,0.929762,0.005552,0.049501,0.072011,-0.006167, -0.367206,0.927456,0.070606,0.049501,0.07201,-0.006013, -0.308246,0.948683,0.070606,0.050526,0.072379,-0.006013, -0.368119,0.929762,0.005552,0.049501,0.072011,-0.006167, -0.308246,0.948683,0.070606,0.050526,0.072379,-0.006013, -0.309012,0.951042,0.005552,0.050526,0.07238,-0.006167, -0.425773,0.904813,0.005552,0.048501,0.071578,-0.006167, -0.424717,0.902569,0.070606,0.048502,0.071577,-0.006013, -0.367206,0.927456,0.070606,0.049501,0.07201,-0.006013, -0.425773,0.904813,0.005552,0.048501,0.071578,-0.006167, -0.367206,0.927456,0.070606,0.049501,0.07201,-0.006013, -0.368119,0.929762,0.005552,0.049501,0.072011,-0.006167, -0.481746,0.876293,0.005552,0.04753,0.071084,-0.006167, -0.480551,0.87412,0.070606,0.047531,0.071082,-0.006013, -0.424717,0.902569,0.070606,0.048502,0.071577,-0.006013, -0.481746,0.876293,0.005552,0.04753,0.071084,-0.006167, -0.424717,0.902569,0.070606,0.048502,0.071577,-0.006013, -0.425773,0.904813,0.005552,0.048501,0.071578,-0.006167, -0.535819,0.844315,0.005552,0.046592,0.070529,-0.006167, -0.53449,0.842221,0.070606,0.046593,0.070528,-0.006013, -0.480551,0.87412,0.070606,0.047531,0.071082,-0.006013, -0.535819,0.844315,0.005552,0.046592,0.070529,-0.006167, -0.480551,0.87412,0.070606,0.047531,0.071082,-0.006013, -0.481746,0.876293,0.005552,0.04753,0.071084,-0.006167, -0.587776,0.809005,0.005552,0.045691,0.069917,-0.006167, -0.586318,0.806998,0.070606,0.045692,0.069915,-0.006013, -0.53449,0.842221,0.070606,0.046593,0.070528,-0.006013, -0.587776,0.809005,0.005552,0.045691,0.069917,-0.006167, -0.53449,0.842221,0.070606,0.046593,0.070528,-0.006013, -0.535819,0.844315,0.005552,0.046592,0.070529,-0.006167, -0.637414,0.770501,0.005552,0.04483,0.069249,-0.006167, -0.635833,0.76859,0.070606,0.044831,0.069247,-0.006013, -0.586318,0.806998,0.070606,0.045692,0.069915,-0.006013, -0.637414,0.770501,0.005552,0.04483,0.069249,-0.006167, -0.586318,0.806998,0.070606,0.045692,0.069915,-0.006013, -0.587776,0.809005,0.005552,0.045691,0.069917,-0.006167, -0.684537,0.728957,0.005552,0.044013,0.068528,-0.006167, -0.682839,0.727149,0.070606,0.044014,0.068527,-0.006013, -0.635833,0.76859,0.070606,0.044831,0.069247,-0.006013, -0.684537,0.728957,0.005552,0.044013,0.068528,-0.006167, -0.635833,0.76859,0.070606,0.044831,0.069247,-0.006013, -0.637414,0.770501,0.005552,0.04483,0.069249,-0.006167, -0.728957,0.684537,0.005552,0.043242,0.067758,-0.006167, -0.727149,0.682839,0.070606,0.043243,0.067757,-0.006013, -0.682839,0.727149,0.070606,0.044014,0.068527,-0.006013, -0.728957,0.684537,0.005552,0.043242,0.067758,-0.006167, -0.682839,0.727149,0.070606,0.044014,0.068527,-0.006013, -0.684537,0.728957,0.005552,0.044013,0.068528,-0.006167, -0.770501,0.637414,0.005552,0.042522,0.066941,-0.006167, -0.76859,0.635833,0.070606,0.042523,0.06694,-0.006013, -0.727149,0.682839,0.070606,0.043243,0.067757,-0.006013, -0.770501,0.637414,0.005552,0.042522,0.066941,-0.006167, -0.727149,0.682839,0.070606,0.043243,0.067757,-0.006013, -0.728957,0.684537,0.005552,0.043242,0.067758,-0.006167, -0.809005,0.587776,0.005552,0.041854,0.06608,-0.006167, -0.806998,0.586318,0.070606,0.041855,0.066079,-0.006013, -0.76859,0.635833,0.070606,0.042523,0.06694,-0.006013, -0.809005,0.587776,0.005552,0.041854,0.06608,-0.006167, -0.76859,0.635833,0.070606,0.042523,0.06694,-0.006013, -0.770501,0.637414,0.005552,0.042522,0.066941,-0.006167, -0.844315,0.535819,0.005552,0.041241,0.065178,-0.006167, -0.842221,0.53449,0.070606,0.041243,0.065178,-0.006013, -0.806998,0.586318,0.070606,0.041855,0.066079,-0.006013, -0.844315,0.535819,0.005552,0.041241,0.065178,-0.006167, -0.806998,0.586318,0.070606,0.041855,0.066079,-0.006013, -0.809005,0.587776,0.005552,0.041854,0.06608,-0.006167, -0.876293,0.481746,0.005552,0.040687,0.064241,-0.006167, -0.87412,0.480551,0.070606,0.040688,0.06424,-0.006013, -0.842221,0.53449,0.070606,0.041243,0.065178,-0.006013, -0.876293,0.481746,0.005552,0.040687,0.064241,-0.006167, -0.842221,0.53449,0.070606,0.041243,0.065178,-0.006013, -0.844315,0.535819,0.005552,0.041241,0.065178,-0.006167, -0.904813,0.425773,0.005552,0.040192,0.06327,-0.006167, -0.902569,0.424717,0.070606,0.040194,0.063269,-0.006013, -0.87412,0.480551,0.070606,0.040688,0.06424,-0.006013, -0.904813,0.425773,0.005552,0.040192,0.06327,-0.006167, -0.87412,0.480551,0.070606,0.040688,0.06424,-0.006013, -0.876293,0.481746,0.005552,0.040687,0.064241,-0.006167, -0.929762,0.368119,0.005552,0.03976,0.06227,-0.006167, -0.927456,0.367206,0.070606,0.039761,0.062269,-0.006013, -0.902569,0.424717,0.070606,0.040194,0.063269,-0.006013, -0.929762,0.368119,0.005552,0.03976,0.06227,-0.006167, -0.902569,0.424717,0.070606,0.040194,0.063269,-0.006013, -0.904813,0.425773,0.005552,0.040192,0.06327,-0.006167, -0.951042,0.309012,0.005552,0.03939,0.061245,-0.006167, -0.948683,0.308246,0.070606,0.039392,0.061244,-0.006013, -0.927456,0.367206,0.070606,0.039761,0.062269,-0.006013, -0.951042,0.309012,0.005552,0.03939,0.061245,-0.006167, -0.927456,0.367206,0.070606,0.039761,0.062269,-0.006013, -0.929762,0.368119,0.005552,0.03976,0.06227,-0.006167, -0.968568,0.248686,0.005552,0.039087,0.060198,-0.006167, -0.966166,0.248069,0.070606,0.039088,0.060198,-0.006013, -0.948683,0.308246,0.070606,0.039392,0.061244,-0.006013, -0.968568,0.248686,0.005552,0.039087,0.060198,-0.006167, -0.948683,0.308246,0.070606,0.039392,0.061244,-0.006013, -0.951042,0.309012,0.005552,0.03939,0.061245,-0.006167, -0.982272,0.187378,0.005552,0.038849,0.059135,-0.006167, -0.979836,0.186914,0.070606,0.03885,0.059135,-0.006013, -0.966166,0.248069,0.070606,0.039088,0.060198,-0.006013, -0.982272,0.187378,0.005552,0.038849,0.059135,-0.006167, -0.966166,0.248069,0.070606,0.039088,0.060198,-0.006013, -0.968568,0.248686,0.005552,0.039087,0.060198,-0.006167, -0.992099,0.125331,0.005552,0.038678,0.058059,-0.006167, -0.989639,0.12502,0.070606,0.03868,0.058059,-0.006013, -0.979836,0.186914,0.070606,0.03885,0.059135,-0.006013, -0.992099,0.125331,0.005552,0.038678,0.058059,-0.006167, -0.979836,0.186914,0.070606,0.03885,0.059135,-0.006013, -0.982272,0.187378,0.005552,0.038849,0.059135,-0.006167, -0.997287,0.07324,0.007402,0.038576,0.056974,-0.006167, -0.995536,0.062634,0.070606,0.038577,0.056974,-0.006013, -0.989639,0.12502,0.070606,0.03868,0.058059,-0.006013, -0.997287,0.07324,0.007402,0.038576,0.056974,-0.006167, -0.989639,0.12502,0.070606,0.03868,0.058059,-0.006013, -0.992099,0.125331,0.005552,0.038678,0.058059,-0.006167, -0.999938,0,0.011104,0.038542,0.055885,-0.006167, -0.997504,0,0.070606,0.038543,0.055885,-0.006013, -0.995536,0.062634,0.070606,0.038577,0.056974,-0.006013, -0.999938,0,0.011104,0.038542,0.055885,-0.006167, -0.995536,0.062634,0.070606,0.038577,0.056974,-0.006013, -0.997287,0.07324,0.007402,0.038576,0.056974,-0.006167, -0.997287,-0.07324,0.007402,0.038576,0.054796,-0.006167, -0.995536,-0.062634,0.070606,0.038577,0.054796,-0.006013, -0.997504,0,0.070606,0.038543,0.055885,-0.006013, -0.997287,-0.07324,0.007402,0.038576,0.054796,-0.006167, -0.997504,0,0.070606,0.038543,0.055885,-0.006013, -0.999938,0,0.011104,0.038542,0.055885,-0.006167, -0.992099,-0.125331,0.005552,0.038678,0.053712,-0.006167, -0.989639,-0.12502,0.070606,0.03868,0.053712,-0.006013, -0.995536,-0.062634,0.070606,0.038577,0.054796,-0.006013, -0.992099,-0.125331,0.005552,0.038678,0.053712,-0.006167, -0.995536,-0.062634,0.070606,0.038577,0.054796,-0.006013, -0.997287,-0.07324,0.007402,0.038576,0.054796,-0.006167, -0.982272,-0.187378,0.005552,0.038849,0.052635,-0.006167, -0.979836,-0.186914,0.070606,0.03885,0.052636,-0.006013, -0.989639,-0.12502,0.070606,0.03868,0.053712,-0.006013, -0.982272,-0.187378,0.005552,0.038849,0.052635,-0.006167, -0.989639,-0.12502,0.070606,0.03868,0.053712,-0.006013, -0.992099,-0.125331,0.005552,0.038678,0.053712,-0.006167, -0.968568,-0.248686,0.005552,0.039087,0.051572,-0.006167, -0.966166,-0.248069,0.070606,0.039088,0.051572,-0.006013, -0.979836,-0.186914,0.070606,0.03885,0.052636,-0.006013, -0.968568,-0.248686,0.005552,0.039087,0.051572,-0.006167, -0.979836,-0.186914,0.070606,0.03885,0.052636,-0.006013, -0.982272,-0.187378,0.005552,0.038849,0.052635,-0.006167, -0.951042,-0.309012,0.005552,0.03939,0.050526,-0.006167, -0.948683,-0.308246,0.070606,0.039392,0.050526,-0.006013, -0.966166,-0.248069,0.070606,0.039088,0.051572,-0.006013, -0.951042,-0.309012,0.005552,0.03939,0.050526,-0.006167, -0.966166,-0.248069,0.070606,0.039088,0.051572,-0.006013, -0.968568,-0.248686,0.005552,0.039087,0.051572,-0.006167, -0.929762,-0.368119,0.005552,0.03976,0.049501,-0.006167, -0.927456,-0.367206,0.070606,0.039761,0.049501,-0.006013, -0.948683,-0.308246,0.070606,0.039392,0.050526,-0.006013, -0.929762,-0.368119,0.005552,0.03976,0.049501,-0.006167, -0.948683,-0.308246,0.070606,0.039392,0.050526,-0.006013, -0.951042,-0.309012,0.005552,0.03939,0.050526,-0.006167, -0.927456,-0.367206,0.070606,0.039761,0.049501,-0.006013, -0.913082,-0.361515,0.18865,0.03978,0.049509,-0.005861, -0.93398,-0.303468,0.18865,0.039411,0.050532,-0.005861, -0.927456,-0.367206,0.070606,0.039761,0.049501,-0.006013, -0.93398,-0.303468,0.18865,0.039411,0.050532,-0.005861, -0.948683,-0.308246,0.070606,0.039392,0.050526,-0.006013, -0.902569,-0.424717,0.070606,0.040194,0.048502,-0.006013, -0.88858,-0.418134,0.18865,0.040212,0.04851,-0.005861, -0.913082,-0.361515,0.18865,0.03978,0.049509,-0.005861, -0.902569,-0.424717,0.070606,0.040194,0.048502,-0.006013, -0.913082,-0.361515,0.18865,0.03978,0.049509,-0.005861, -0.927456,-0.367206,0.070606,0.039761,0.049501,-0.006013, -0.87412,-0.480551,0.070606,0.040688,0.047531,-0.006013, -0.860572,-0.473103,0.18865,0.040706,0.04754,-0.005861, -0.88858,-0.418134,0.18865,0.040212,0.04851,-0.005861, -0.87412,-0.480551,0.070606,0.040688,0.047531,-0.006013, -0.88858,-0.418134,0.18865,0.040212,0.04851,-0.005861, -0.902569,-0.424717,0.070606,0.040194,0.048502,-0.006013, -0.842221,-0.53449,0.070606,0.041243,0.046593,-0.006013, -0.829167,-0.526206,0.18865,0.04126,0.046604,-0.005861, -0.860572,-0.473103,0.18865,0.040706,0.04754,-0.005861, -0.842221,-0.53449,0.070606,0.041243,0.046593,-0.006013, -0.860572,-0.473103,0.18865,0.040706,0.04754,-0.005861, -0.87412,-0.480551,0.070606,0.040688,0.047531,-0.006013, -0.806998,-0.586318,0.070606,0.041855,0.045692,-0.006013, -0.794491,-0.577231,0.18865,0.041871,0.045704,-0.005861, -0.829167,-0.526206,0.18865,0.04126,0.046604,-0.005861, -0.806998,-0.586318,0.070606,0.041855,0.045692,-0.006013, -0.829167,-0.526206,0.18865,0.04126,0.046604,-0.005861, -0.842221,-0.53449,0.070606,0.041243,0.046593,-0.006013, -0.76859,-0.635833,0.070606,0.042523,0.044831,-0.006013, -0.756678,-0.625979,0.18865,0.042538,0.044844,-0.005861, -0.794491,-0.577231,0.18865,0.041871,0.045704,-0.005861, -0.76859,-0.635833,0.070606,0.042523,0.044831,-0.006013, -0.794491,-0.577231,0.18865,0.041871,0.045704,-0.005861, -0.806998,-0.586318,0.070606,0.041855,0.045692,-0.006013, -0.727149,-0.682839,0.070606,0.043243,0.044014,-0.006013, -0.715879,-0.672256,0.18865,0.043258,0.044028,-0.005861, -0.756678,-0.625979,0.18865,0.042538,0.044844,-0.005861, -0.727149,-0.682839,0.070606,0.043243,0.044014,-0.006013, -0.756678,-0.625979,0.18865,0.042538,0.044844,-0.005861, -0.76859,-0.635833,0.070606,0.042523,0.044831,-0.006013, -0.682839,-0.727149,0.070606,0.044014,0.043243,-0.006013, -0.672256,-0.715879,0.18865,0.044028,0.043258,-0.005861, -0.715879,-0.672256,0.18865,0.043258,0.044028,-0.005861, -0.682839,-0.727149,0.070606,0.044014,0.043243,-0.006013, -0.715879,-0.672256,0.18865,0.043258,0.044028,-0.005861, -0.727149,-0.682839,0.070606,0.043243,0.044014,-0.006013, -0.635833,-0.76859,0.070606,0.044831,0.042523,-0.006013, -0.625979,-0.756678,0.18865,0.044844,0.042538,-0.005861, -0.672256,-0.715879,0.18865,0.044028,0.043258,-0.005861, -0.635833,-0.76859,0.070606,0.044831,0.042523,-0.006013, -0.672256,-0.715879,0.18865,0.044028,0.043258,-0.005861, -0.682839,-0.727149,0.070606,0.044014,0.043243,-0.006013, -0.586318,-0.806998,0.070606,0.045692,0.041855,-0.006013, -0.577231,-0.794491,0.18865,0.045704,0.041871,-0.005861, -0.625979,-0.756678,0.18865,0.044844,0.042538,-0.005861, -0.586318,-0.806998,0.070606,0.045692,0.041855,-0.006013, -0.625979,-0.756678,0.18865,0.044844,0.042538,-0.005861, -0.635833,-0.76859,0.070606,0.044831,0.042523,-0.006013, -0.53449,-0.842221,0.070606,0.046593,0.041243,-0.006013, -0.526206,-0.829167,0.18865,0.046604,0.04126,-0.005861, -0.577231,-0.794491,0.18865,0.045704,0.041871,-0.005861, -0.53449,-0.842221,0.070606,0.046593,0.041243,-0.006013, -0.577231,-0.794491,0.18865,0.045704,0.041871,-0.005861, -0.586318,-0.806998,0.070606,0.045692,0.041855,-0.006013, -0.480551,-0.87412,0.070606,0.047531,0.040688,-0.006013, -0.473103,-0.860572,0.18865,0.04754,0.040706,-0.005861, -0.526206,-0.829167,0.18865,0.046604,0.04126,-0.005861, -0.480551,-0.87412,0.070606,0.047531,0.040688,-0.006013, -0.526206,-0.829167,0.18865,0.046604,0.04126,-0.005861, -0.53449,-0.842221,0.070606,0.046593,0.041243,-0.006013, -0.424717,-0.902569,0.070606,0.048502,0.040194,-0.006013, -0.418134,-0.88858,0.18865,0.04851,0.040212,-0.005861, -0.473103,-0.860572,0.18865,0.04754,0.040706,-0.005861, -0.424717,-0.902569,0.070606,0.048502,0.040194,-0.006013, -0.473103,-0.860572,0.18865,0.04754,0.040706,-0.005861, -0.480551,-0.87412,0.070606,0.047531,0.040688,-0.006013, -0.367206,-0.927456,0.070606,0.049501,0.039761,-0.006013, -0.361515,-0.913082,0.18865,0.049509,0.03978,-0.005861, -0.418134,-0.88858,0.18865,0.04851,0.040212,-0.005861, -0.367206,-0.927456,0.070606,0.049501,0.039761,-0.006013, -0.418134,-0.88858,0.18865,0.04851,0.040212,-0.005861, -0.424717,-0.902569,0.070606,0.048502,0.040194,-0.006013, -0.308246,-0.948683,0.070606,0.050526,0.039392,-0.006013, -0.303468,-0.93398,0.18865,0.050532,0.039411,-0.005861, -0.361515,-0.913082,0.18865,0.049509,0.03978,-0.005861, -0.308246,-0.948683,0.070606,0.050526,0.039392,-0.006013, -0.361515,-0.913082,0.18865,0.049509,0.03978,-0.005861, -0.367206,-0.927456,0.070606,0.049501,0.039761,-0.006013, -0.248069,-0.966166,0.070606,0.051572,0.039088,-0.006013, -0.244224,-0.951192,0.18865,0.051578,0.039107,-0.005861, -0.303468,-0.93398,0.18865,0.050532,0.039411,-0.005861, -0.248069,-0.966166,0.070606,0.051572,0.039088,-0.006013, -0.303468,-0.93398,0.18865,0.050532,0.039411,-0.005861, -0.308246,-0.948683,0.070606,0.050526,0.039392,-0.006013, -0.186914,-0.979836,0.070606,0.052636,0.03885,-0.006013, -0.184017,-0.96465,0.18865,0.05264,0.03887,-0.005861, -0.244224,-0.951192,0.18865,0.051578,0.039107,-0.005861, -0.186914,-0.979836,0.070606,0.052636,0.03885,-0.006013, -0.244224,-0.951192,0.18865,0.051578,0.039107,-0.005861, -0.248069,-0.966166,0.070606,0.051572,0.039088,-0.006013, -0.12502,-0.989639,0.070606,0.053712,0.03868,-0.006013, -0.123083,-0.974301,0.18865,0.053714,0.0387,-0.005861, -0.184017,-0.96465,0.18865,0.05264,0.03887,-0.005861, -0.12502,-0.989639,0.070606,0.053712,0.03868,-0.006013, -0.184017,-0.96465,0.18865,0.05264,0.03887,-0.005861, -0.186914,-0.979836,0.070606,0.052636,0.03885,-0.006013, -0.062634,-0.995536,0.070606,0.054796,0.038577,-0.006013, -0.061663,-0.980106,0.18865,0.054798,0.038597,-0.005861, -0.123083,-0.974301,0.18865,0.053714,0.0387,-0.005861, -0.062634,-0.995536,0.070606,0.054796,0.038577,-0.006013, -0.123083,-0.974301,0.18865,0.053714,0.0387,-0.005861, -0.12502,-0.989639,0.070606,0.053712,0.03868,-0.006013, 0,-0.997504,0.070606,0.055885,0.038543,-0.006013, 0,-0.982044,0.18865,0.055885,0.038563,-0.005861, -0.061663,-0.980106,0.18865,0.054798,0.038597,-0.005861, 0,-0.997504,0.070606,0.055885,0.038543,-0.006013, -0.061663,-0.980106,0.18865,0.054798,0.038597,-0.005861, -0.062634,-0.995536,0.070606,0.054796,0.038577,-0.006013, 0.062634,-0.995536,0.070606,0.056974,0.038577,-0.006013, 0.061663,-0.980106,0.18865,0.056973,0.038597,-0.005861, 0,-0.982044,0.18865,0.055885,0.038563,-0.005861, 0.062634,-0.995536,0.070606,0.056974,0.038577,-0.006013, 0,-0.982044,0.18865,0.055885,0.038563,-0.005861, 0,-0.997504,0.070606,0.055885,0.038543,-0.006013, 0.12502,-0.989639,0.070606,0.058059,0.03868,-0.006013, 0.123083,-0.974301,0.18865,0.058056,0.0387,-0.005861, 0.061663,-0.980106,0.18865,0.056973,0.038597,-0.005861, 0.12502,-0.989639,0.070606,0.058059,0.03868,-0.006013, 0.061663,-0.980106,0.18865,0.056973,0.038597,-0.005861, 0.062634,-0.995536,0.070606,0.056974,0.038577,-0.006013, 0.186914,-0.979836,0.070606,0.059135,0.03885,-0.006013, 0.184017,-0.96465,0.18865,0.059131,0.03887,-0.005861, 0.123083,-0.974301,0.18865,0.058056,0.0387,-0.005861, 0.186914,-0.979836,0.070606,0.059135,0.03885,-0.006013, 0.123083,-0.974301,0.18865,0.058056,0.0387,-0.005861, 0.12502,-0.989639,0.070606,0.058059,0.03868,-0.006013, 0.248069,-0.966166,0.070606,0.060198,0.039088,-0.006013, 0.244224,-0.951192,0.18865,0.060193,0.039107,-0.005861, 0.184017,-0.96465,0.18865,0.059131,0.03887,-0.005861, 0.248069,-0.966166,0.070606,0.060198,0.039088,-0.006013, 0.184017,-0.96465,0.18865,0.059131,0.03887,-0.005861, 0.186914,-0.979836,0.070606,0.059135,0.03885,-0.006013, 0.308246,-0.948683,0.070606,0.061244,0.039392,-0.006013, 0.303468,-0.93398,0.18865,0.061238,0.039411,-0.005861, 0.244224,-0.951192,0.18865,0.060193,0.039107,-0.005861, 0.308246,-0.948683,0.070606,0.061244,0.039392,-0.006013, 0.244224,-0.951192,0.18865,0.060193,0.039107,-0.005861, 0.248069,-0.966166,0.070606,0.060198,0.039088,-0.006013, 0.367206,-0.927456,0.070606,0.062269,0.039761,-0.006013, 0.361515,-0.913082,0.18865,0.062262,0.03978,-0.005861, 0.303468,-0.93398,0.18865,0.061238,0.039411,-0.005861, 0.367206,-0.927456,0.070606,0.062269,0.039761,-0.006013, 0.303468,-0.93398,0.18865,0.061238,0.039411,-0.005861, 0.308246,-0.948683,0.070606,0.061244,0.039392,-0.006013, 0.424717,-0.902569,0.070606,0.063269,0.040194,-0.006013, 0.418134,-0.88858,0.18865,0.063261,0.040212,-0.005861, 0.361515,-0.913082,0.18865,0.062262,0.03978,-0.005861, 0.424717,-0.902569,0.070606,0.063269,0.040194,-0.006013, 0.361515,-0.913082,0.18865,0.062262,0.03978,-0.005861, 0.367206,-0.927456,0.070606,0.062269,0.039761,-0.006013, 0.480551,-0.87412,0.070606,0.06424,0.040688,-0.006013, 0.473103,-0.860572,0.18865,0.06423,0.040706,-0.005861, 0.418134,-0.88858,0.18865,0.063261,0.040212,-0.005861, 0.480551,-0.87412,0.070606,0.06424,0.040688,-0.006013, 0.418134,-0.88858,0.18865,0.063261,0.040212,-0.005861, 0.424717,-0.902569,0.070606,0.063269,0.040194,-0.006013, 0.53449,-0.842221,0.070606,0.065178,0.041243,-0.006013, 0.526206,-0.829167,0.18865,0.065167,0.04126,-0.005861, 0.473103,-0.860572,0.18865,0.06423,0.040706,-0.005861, 0.53449,-0.842221,0.070606,0.065178,0.041243,-0.006013, 0.473103,-0.860572,0.18865,0.06423,0.040706,-0.005861, 0.480551,-0.87412,0.070606,0.06424,0.040688,-0.006013, 0.586318,-0.806998,0.070606,0.066079,0.041855,-0.006013, 0.577231,-0.794491,0.18865,0.066067,0.041871,-0.005861, 0.526206,-0.829167,0.18865,0.065167,0.04126,-0.005861, 0.586318,-0.806998,0.070606,0.066079,0.041855,-0.006013, 0.526206,-0.829167,0.18865,0.065167,0.04126,-0.005861, 0.53449,-0.842221,0.070606,0.065178,0.041243,-0.006013, 0.635833,-0.76859,0.070606,0.06694,0.042523,-0.006013, 0.625979,-0.756678,0.18865,0.066927,0.042538,-0.005861, 0.577231,-0.794491,0.18865,0.066067,0.041871,-0.005861, 0.635833,-0.76859,0.070606,0.06694,0.042523,-0.006013, 0.577231,-0.794491,0.18865,0.066067,0.041871,-0.005861, 0.586318,-0.806998,0.070606,0.066079,0.041855,-0.006013, 0.682839,-0.727149,0.070606,0.067757,0.043243,-0.006013, 0.672256,-0.715879,0.18865,0.067743,0.043258,-0.005861, 0.625979,-0.756678,0.18865,0.066927,0.042538,-0.005861, 0.682839,-0.727149,0.070606,0.067757,0.043243,-0.006013, 0.625979,-0.756678,0.18865,0.066927,0.042538,-0.005861, 0.635833,-0.76859,0.070606,0.06694,0.042523,-0.006013, 0.727149,-0.682839,0.070606,0.068527,0.044014,-0.006013, 0.715879,-0.672256,0.18865,0.068512,0.044028,-0.005861, 0.672256,-0.715879,0.18865,0.067743,0.043258,-0.005861, 0.727149,-0.682839,0.070606,0.068527,0.044014,-0.006013, 0.672256,-0.715879,0.18865,0.067743,0.043258,-0.005861, 0.682839,-0.727149,0.070606,0.067757,0.043243,-0.006013, 0.76859,-0.635833,0.070606,0.069247,0.044831,-0.006013, 0.756678,-0.625979,0.18865,0.069232,0.044844,-0.005861, 0.715879,-0.672256,0.18865,0.068512,0.044028,-0.005861, 0.76859,-0.635833,0.070606,0.069247,0.044831,-0.006013, 0.715879,-0.672256,0.18865,0.068512,0.044028,-0.005861, 0.727149,-0.682839,0.070606,0.068527,0.044014,-0.006013, 0.806998,-0.586318,0.070606,0.069915,0.045692,-0.006013, 0.794491,-0.577231,0.18865,0.069899,0.045704,-0.005861, 0.756678,-0.625979,0.18865,0.069232,0.044844,-0.005861, 0.806998,-0.586318,0.070606,0.069915,0.045692,-0.006013, 0.756678,-0.625979,0.18865,0.069232,0.044844,-0.005861, 0.76859,-0.635833,0.070606,0.069247,0.044831,-0.006013, 0.842221,-0.53449,0.070606,0.070528,0.046593,-0.006013, 0.829167,-0.526206,0.18865,0.070511,0.046604,-0.005861, 0.794491,-0.577231,0.18865,0.069899,0.045704,-0.005861, 0.842221,-0.53449,0.070606,0.070528,0.046593,-0.006013, 0.794491,-0.577231,0.18865,0.069899,0.045704,-0.005861, 0.806998,-0.586318,0.070606,0.069915,0.045692,-0.006013, 0.87412,-0.480551,0.070606,0.071082,0.047531,-0.006013, 0.860572,-0.473103,0.18865,0.071065,0.04754,-0.005861, 0.829167,-0.526206,0.18865,0.070511,0.046604,-0.005861, 0.87412,-0.480551,0.070606,0.071082,0.047531,-0.006013, 0.829167,-0.526206,0.18865,0.070511,0.046604,-0.005861, 0.842221,-0.53449,0.070606,0.070528,0.046593,-0.006013, 0.902569,-0.424717,0.070606,0.071577,0.048502,-0.006013, 0.88858,-0.418134,0.18865,0.071559,0.04851,-0.005861, 0.860572,-0.473103,0.18865,0.071065,0.04754,-0.005861, 0.902569,-0.424717,0.070606,0.071577,0.048502,-0.006013, 0.860572,-0.473103,0.18865,0.071065,0.04754,-0.005861, 0.87412,-0.480551,0.070606,0.071082,0.047531,-0.006013, 0.927456,-0.367206,0.070606,0.07201,0.049501,-0.006013, 0.913082,-0.361515,0.18865,0.071991,0.049509,-0.005861, 0.88858,-0.418134,0.18865,0.071559,0.04851,-0.005861, 0.927456,-0.367206,0.070606,0.07201,0.049501,-0.006013, 0.88858,-0.418134,0.18865,0.071559,0.04851,-0.005861, 0.902569,-0.424717,0.070606,0.071577,0.048502,-0.006013, 0.948683,-0.308246,0.070606,0.072379,0.050526,-0.006013, 0.93398,-0.303468,0.18865,0.07236,0.050532,-0.005861, 0.913082,-0.361515,0.18865,0.071991,0.049509,-0.005861, 0.948683,-0.308246,0.070606,0.072379,0.050526,-0.006013, 0.913082,-0.361515,0.18865,0.071991,0.049509,-0.005861, 0.927456,-0.367206,0.070606,0.07201,0.049501,-0.006013, 0.966166,-0.248069,0.070606,0.072682,0.051572,-0.006013, 0.951192,-0.244224,0.18865,0.072663,0.051578,-0.005861, 0.93398,-0.303468,0.18865,0.07236,0.050532,-0.005861, 0.966166,-0.248069,0.070606,0.072682,0.051572,-0.006013, 0.93398,-0.303468,0.18865,0.07236,0.050532,-0.005861, 0.948683,-0.308246,0.070606,0.072379,0.050526,-0.006013, 0.979836,-0.186914,0.070606,0.07292,0.052636,-0.006013, 0.96465,-0.184017,0.18865,0.072901,0.05264,-0.005861, 0.951192,-0.244224,0.18865,0.072663,0.051578,-0.005861, 0.979836,-0.186914,0.070606,0.07292,0.052636,-0.006013, 0.951192,-0.244224,0.18865,0.072663,0.051578,-0.005861, 0.966166,-0.248069,0.070606,0.072682,0.051572,-0.006013, 0.989639,-0.12502,0.070606,0.073091,0.053712,-0.006013, 0.974301,-0.123083,0.18865,0.073071,0.053714,-0.005861, 0.96465,-0.184017,0.18865,0.072901,0.05264,-0.005861, 0.989639,-0.12502,0.070606,0.073091,0.053712,-0.006013, 0.96465,-0.184017,0.18865,0.072901,0.05264,-0.005861, 0.979836,-0.186914,0.070606,0.07292,0.052636,-0.006013, 0.995536,-0.062634,0.070606,0.073193,0.054796,-0.006013, 0.980106,-0.061663,0.18865,0.073173,0.054798,-0.005861, 0.974301,-0.123083,0.18865,0.073071,0.053714,-0.005861, 0.995536,-0.062634,0.070606,0.073193,0.054796,-0.006013, 0.974301,-0.123083,0.18865,0.073071,0.053714,-0.005861, 0.989639,-0.12502,0.070606,0.073091,0.053712,-0.006013, 0.997504,0,0.070606,0.073227,0.055885,-0.006013, 0.982044,0,0.18865,0.073207,0.055885,-0.005861, 0.980106,-0.061663,0.18865,0.073173,0.054798,-0.005861, 0.997504,0,0.070606,0.073227,0.055885,-0.006013, 0.980106,-0.061663,0.18865,0.073173,0.054798,-0.005861, 0.995536,-0.062634,0.070606,0.073193,0.054796,-0.006013, 0.995536,0.062634,0.070606,0.073193,0.056974,-0.006013, 0.980106,0.061663,0.18865,0.073173,0.056973,-0.005861, 0.982044,0,0.18865,0.073207,0.055885,-0.005861, 0.995536,0.062634,0.070606,0.073193,0.056974,-0.006013, 0.982044,0,0.18865,0.073207,0.055885,-0.005861, 0.997504,0,0.070606,0.073227,0.055885,-0.006013, 0.989639,0.12502,0.070606,0.073091,0.058059,-0.006013, 0.974301,0.123083,0.18865,0.073071,0.058056,-0.005861, 0.980106,0.061663,0.18865,0.073173,0.056973,-0.005861, 0.989639,0.12502,0.070606,0.073091,0.058059,-0.006013, 0.980106,0.061663,0.18865,0.073173,0.056973,-0.005861, 0.995536,0.062634,0.070606,0.073193,0.056974,-0.006013, 0.979836,0.186914,0.070606,0.07292,0.059135,-0.006013, 0.96465,0.184017,0.18865,0.072901,0.059131,-0.005861, 0.974301,0.123083,0.18865,0.073071,0.058056,-0.005861, 0.979836,0.186914,0.070606,0.07292,0.059135,-0.006013, 0.974301,0.123083,0.18865,0.073071,0.058056,-0.005861, 0.989639,0.12502,0.070606,0.073091,0.058059,-0.006013, 0.966166,0.248069,0.070606,0.072682,0.060198,-0.006013, 0.951192,0.244224,0.18865,0.072663,0.060193,-0.005861, 0.96465,0.184017,0.18865,0.072901,0.059131,-0.005861, 0.966166,0.248069,0.070606,0.072682,0.060198,-0.006013, 0.96465,0.184017,0.18865,0.072901,0.059131,-0.005861, 0.979836,0.186914,0.070606,0.07292,0.059135,-0.006013, 0.948683,0.308246,0.070606,0.072379,0.061244,-0.006013, 0.93398,0.303468,0.18865,0.07236,0.061238,-0.005861, 0.951192,0.244224,0.18865,0.072663,0.060193,-0.005861, 0.948683,0.308246,0.070606,0.072379,0.061244,-0.006013, 0.951192,0.244224,0.18865,0.072663,0.060193,-0.005861, 0.966166,0.248069,0.070606,0.072682,0.060198,-0.006013, 0.927456,0.367206,0.070606,0.07201,0.062269,-0.006013, 0.913082,0.361515,0.18865,0.071991,0.062262,-0.005861, 0.93398,0.303468,0.18865,0.07236,0.061238,-0.005861, 0.927456,0.367206,0.070606,0.07201,0.062269,-0.006013, 0.93398,0.303468,0.18865,0.07236,0.061238,-0.005861, 0.948683,0.308246,0.070606,0.072379,0.061244,-0.006013, 0.902569,0.424717,0.070606,0.071577,0.063269,-0.006013, 0.88858,0.418134,0.18865,0.071559,0.063261,-0.005861, 0.913082,0.361515,0.18865,0.071991,0.062262,-0.005861, 0.902569,0.424717,0.070606,0.071577,0.063269,-0.006013, 0.913082,0.361515,0.18865,0.071991,0.062262,-0.005861, 0.927456,0.367206,0.070606,0.07201,0.062269,-0.006013, 0.87412,0.480551,0.070606,0.071082,0.06424,-0.006013, 0.860572,0.473103,0.18865,0.071065,0.06423,-0.005861, 0.88858,0.418134,0.18865,0.071559,0.063261,-0.005861, 0.87412,0.480551,0.070606,0.071082,0.06424,-0.006013, 0.88858,0.418134,0.18865,0.071559,0.063261,-0.005861, 0.902569,0.424717,0.070606,0.071577,0.063269,-0.006013, 0.842221,0.53449,0.070606,0.070528,0.065178,-0.006013, 0.829167,0.526206,0.18865,0.070511,0.065167,-0.005861, 0.860572,0.473103,0.18865,0.071065,0.06423,-0.005861, 0.842221,0.53449,0.070606,0.070528,0.065178,-0.006013, 0.860572,0.473103,0.18865,0.071065,0.06423,-0.005861, 0.87412,0.480551,0.070606,0.071082,0.06424,-0.006013, 0.806998,0.586318,0.070606,0.069915,0.066079,-0.006013, 0.794491,0.577231,0.18865,0.069899,0.066067,-0.005861, 0.829167,0.526206,0.18865,0.070511,0.065167,-0.005861, 0.806998,0.586318,0.070606,0.069915,0.066079,-0.006013, 0.829167,0.526206,0.18865,0.070511,0.065167,-0.005861, 0.842221,0.53449,0.070606,0.070528,0.065178,-0.006013, 0.76859,0.635833,0.070606,0.069247,0.06694,-0.006013, 0.756678,0.625979,0.18865,0.069232,0.066927,-0.005861, 0.794491,0.577231,0.18865,0.069899,0.066067,-0.005861, 0.76859,0.635833,0.070606,0.069247,0.06694,-0.006013, 0.794491,0.577231,0.18865,0.069899,0.066067,-0.005861, 0.806998,0.586318,0.070606,0.069915,0.066079,-0.006013, 0.727149,0.682839,0.070606,0.068527,0.067757,-0.006013, 0.715879,0.672256,0.18865,0.068512,0.067743,-0.005861, 0.756678,0.625979,0.18865,0.069232,0.066927,-0.005861, 0.727149,0.682839,0.070606,0.068527,0.067757,-0.006013, 0.756678,0.625979,0.18865,0.069232,0.066927,-0.005861, 0.76859,0.635833,0.070606,0.069247,0.06694,-0.006013, 0.682839,0.727149,0.070606,0.067757,0.068527,-0.006013, 0.672256,0.715879,0.18865,0.067743,0.068512,-0.005861, 0.715879,0.672256,0.18865,0.068512,0.067743,-0.005861, 0.682839,0.727149,0.070606,0.067757,0.068527,-0.006013, 0.715879,0.672256,0.18865,0.068512,0.067743,-0.005861, 0.727149,0.682839,0.070606,0.068527,0.067757,-0.006013, 0.635833,0.76859,0.070606,0.06694,0.069247,-0.006013, 0.625979,0.756678,0.18865,0.066927,0.069232,-0.005861, 0.672256,0.715879,0.18865,0.067743,0.068512,-0.005861, 0.635833,0.76859,0.070606,0.06694,0.069247,-0.006013, 0.672256,0.715879,0.18865,0.067743,0.068512,-0.005861, 0.682839,0.727149,0.070606,0.067757,0.068527,-0.006013, 0.586318,0.806998,0.070606,0.066079,0.069915,-0.006013, 0.577231,0.794491,0.18865,0.066067,0.069899,-0.005861, 0.625979,0.756678,0.18865,0.066927,0.069232,-0.005861, 0.586318,0.806998,0.070606,0.066079,0.069915,-0.006013, 0.625979,0.756678,0.18865,0.066927,0.069232,-0.005861, 0.635833,0.76859,0.070606,0.06694,0.069247,-0.006013, 0.53449,0.842221,0.070606,0.065178,0.070528,-0.006013, 0.526206,0.829167,0.18865,0.065167,0.070511,-0.005861, 0.577231,0.794491,0.18865,0.066067,0.069899,-0.005861, 0.53449,0.842221,0.070606,0.065178,0.070528,-0.006013, 0.577231,0.794491,0.18865,0.066067,0.069899,-0.005861, 0.586318,0.806998,0.070606,0.066079,0.069915,-0.006013, 0.480551,0.87412,0.070606,0.06424,0.071082,-0.006013, 0.473103,0.860572,0.18865,0.06423,0.071065,-0.005861, 0.526206,0.829167,0.18865,0.065167,0.070511,-0.005861, 0.480551,0.87412,0.070606,0.06424,0.071082,-0.006013, 0.526206,0.829167,0.18865,0.065167,0.070511,-0.005861, 0.53449,0.842221,0.070606,0.065178,0.070528,-0.006013, 0.424717,0.902569,0.070606,0.063269,0.071577,-0.006013, 0.418134,0.88858,0.18865,0.063261,0.071559,-0.005861, 0.473103,0.860572,0.18865,0.06423,0.071065,-0.005861, 0.424717,0.902569,0.070606,0.063269,0.071577,-0.006013, 0.473103,0.860572,0.18865,0.06423,0.071065,-0.005861, 0.480551,0.87412,0.070606,0.06424,0.071082,-0.006013, 0.367206,0.927456,0.070606,0.062269,0.07201,-0.006013, 0.361515,0.913082,0.18865,0.062262,0.071991,-0.005861, 0.418134,0.88858,0.18865,0.063261,0.071559,-0.005861, 0.367206,0.927456,0.070606,0.062269,0.07201,-0.006013, 0.418134,0.88858,0.18865,0.063261,0.071559,-0.005861, 0.424717,0.902569,0.070606,0.063269,0.071577,-0.006013, 0.308246,0.948683,0.070606,0.061244,0.072379,-0.006013, 0.303468,0.93398,0.18865,0.061238,0.07236,-0.005861, 0.361515,0.913082,0.18865,0.062262,0.071991,-0.005861, 0.308246,0.948683,0.070606,0.061244,0.072379,-0.006013, 0.361515,0.913082,0.18865,0.062262,0.071991,-0.005861, 0.367206,0.927456,0.070606,0.062269,0.07201,-0.006013, 0.248069,0.966166,0.070606,0.060198,0.072682,-0.006013, 0.244224,0.951192,0.18865,0.060193,0.072663,-0.005861, 0.303468,0.93398,0.18865,0.061238,0.07236,-0.005861, 0.248069,0.966166,0.070606,0.060198,0.072682,-0.006013, 0.303468,0.93398,0.18865,0.061238,0.07236,-0.005861, 0.308246,0.948683,0.070606,0.061244,0.072379,-0.006013, 0.186914,0.979836,0.070606,0.059135,0.07292,-0.006013, 0.184017,0.96465,0.18865,0.059131,0.072901,-0.005861, 0.244224,0.951192,0.18865,0.060193,0.072663,-0.005861, 0.186914,0.979836,0.070606,0.059135,0.07292,-0.006013, 0.244224,0.951192,0.18865,0.060193,0.072663,-0.005861, 0.248069,0.966166,0.070606,0.060198,0.072682,-0.006013, 0.12502,0.989639,0.070606,0.058059,0.073091,-0.006013, 0.123083,0.974301,0.18865,0.058056,0.073071,-0.005861, 0.184017,0.96465,0.18865,0.059131,0.072901,-0.005861, 0.12502,0.989639,0.070606,0.058059,0.073091,-0.006013, 0.184017,0.96465,0.18865,0.059131,0.072901,-0.005861, 0.186914,0.979836,0.070606,0.059135,0.07292,-0.006013, 0.062634,0.995536,0.070606,0.056974,0.073193,-0.006013, 0.061663,0.980106,0.18865,0.056973,0.073173,-0.005861, 0.123083,0.974301,0.18865,0.058056,0.073071,-0.005861, 0.062634,0.995536,0.070606,0.056974,0.073193,-0.006013, 0.123083,0.974301,0.18865,0.058056,0.073071,-0.005861, 0.12502,0.989639,0.070606,0.058059,0.073091,-0.006013, 0,0.997504,0.070606,0.055885,0.073227,-0.006013, 0,0.982044,0.18865,0.055885,0.073207,-0.005861, 0.061663,0.980106,0.18865,0.056973,0.073173,-0.005861, 0,0.997504,0.070606,0.055885,0.073227,-0.006013, 0.061663,0.980106,0.18865,0.056973,0.073173,-0.005861, 0.062634,0.995536,0.070606,0.056974,0.073193,-0.006013, -0.062634,0.995536,0.070606,0.054796,0.073193,-0.006013, -0.061663,0.980106,0.18865,0.054798,0.073173,-0.005861, 0,0.982044,0.18865,0.055885,0.073207,-0.005861, -0.062634,0.995536,0.070606,0.054796,0.073193,-0.006013, 0,0.982044,0.18865,0.055885,0.073207,-0.005861, 0,0.997504,0.070606,0.055885,0.073227,-0.006013, -0.12502,0.989639,0.070606,0.053712,0.073091,-0.006013, -0.123083,0.974301,0.18865,0.053714,0.073071,-0.005861, -0.061663,0.980106,0.18865,0.054798,0.073173,-0.005861, -0.12502,0.989639,0.070606,0.053712,0.073091,-0.006013, -0.061663,0.980106,0.18865,0.054798,0.073173,-0.005861, -0.062634,0.995536,0.070606,0.054796,0.073193,-0.006013, -0.186914,0.979836,0.070606,0.052636,0.07292,-0.006013, -0.184017,0.96465,0.18865,0.05264,0.072901,-0.005861, -0.123083,0.974301,0.18865,0.053714,0.073071,-0.005861, -0.186914,0.979836,0.070606,0.052636,0.07292,-0.006013, -0.123083,0.974301,0.18865,0.053714,0.073071,-0.005861, -0.12502,0.989639,0.070606,0.053712,0.073091,-0.006013, -0.248069,0.966166,0.070606,0.051572,0.072682,-0.006013, -0.244224,0.951192,0.18865,0.051578,0.072663,-0.005861, -0.184017,0.96465,0.18865,0.05264,0.072901,-0.005861, -0.248069,0.966166,0.070606,0.051572,0.072682,-0.006013, -0.184017,0.96465,0.18865,0.05264,0.072901,-0.005861, -0.186914,0.979836,0.070606,0.052636,0.07292,-0.006013, -0.308246,0.948683,0.070606,0.050526,0.072379,-0.006013, -0.303468,0.93398,0.18865,0.050532,0.07236,-0.005861, -0.244224,0.951192,0.18865,0.051578,0.072663,-0.005861, -0.308246,0.948683,0.070606,0.050526,0.072379,-0.006013, -0.244224,0.951192,0.18865,0.051578,0.072663,-0.005861, -0.248069,0.966166,0.070606,0.051572,0.072682,-0.006013, -0.367206,0.927456,0.070606,0.049501,0.07201,-0.006013, -0.361515,0.913082,0.18865,0.049509,0.071991,-0.005861, -0.303468,0.93398,0.18865,0.050532,0.07236,-0.005861, -0.367206,0.927456,0.070606,0.049501,0.07201,-0.006013, -0.303468,0.93398,0.18865,0.050532,0.07236,-0.005861, -0.308246,0.948683,0.070606,0.050526,0.072379,-0.006013, -0.424717,0.902569,0.070606,0.048502,0.071577,-0.006013, -0.418134,0.88858,0.18865,0.04851,0.071559,-0.005861, -0.361515,0.913082,0.18865,0.049509,0.071991,-0.005861, -0.424717,0.902569,0.070606,0.048502,0.071577,-0.006013, -0.361515,0.913082,0.18865,0.049509,0.071991,-0.005861, -0.367206,0.927456,0.070606,0.049501,0.07201,-0.006013, -0.480551,0.87412,0.070606,0.047531,0.071082,-0.006013, -0.473103,0.860572,0.18865,0.04754,0.071065,-0.005861, -0.418134,0.88858,0.18865,0.04851,0.071559,-0.005861, -0.480551,0.87412,0.070606,0.047531,0.071082,-0.006013, -0.418134,0.88858,0.18865,0.04851,0.071559,-0.005861, -0.424717,0.902569,0.070606,0.048502,0.071577,-0.006013, -0.53449,0.842221,0.070606,0.046593,0.070528,-0.006013, -0.526206,0.829167,0.18865,0.046604,0.070511,-0.005861, -0.473103,0.860572,0.18865,0.04754,0.071065,-0.005861, -0.53449,0.842221,0.070606,0.046593,0.070528,-0.006013, -0.473103,0.860572,0.18865,0.04754,0.071065,-0.005861, -0.480551,0.87412,0.070606,0.047531,0.071082,-0.006013, -0.586318,0.806998,0.070606,0.045692,0.069915,-0.006013, -0.577231,0.794491,0.18865,0.045704,0.069899,-0.005861, -0.526206,0.829167,0.18865,0.046604,0.070511,-0.005861, -0.586318,0.806998,0.070606,0.045692,0.069915,-0.006013, -0.526206,0.829167,0.18865,0.046604,0.070511,-0.005861, -0.53449,0.842221,0.070606,0.046593,0.070528,-0.006013, -0.635833,0.76859,0.070606,0.044831,0.069247,-0.006013, -0.625979,0.756678,0.18865,0.044844,0.069232,-0.005861, -0.577231,0.794491,0.18865,0.045704,0.069899,-0.005861, -0.635833,0.76859,0.070606,0.044831,0.069247,-0.006013, -0.577231,0.794491,0.18865,0.045704,0.069899,-0.005861, -0.586318,0.806998,0.070606,0.045692,0.069915,-0.006013, -0.682839,0.727149,0.070606,0.044014,0.068527,-0.006013, -0.672256,0.715879,0.18865,0.044028,0.068512,-0.005861, -0.625979,0.756678,0.18865,0.044844,0.069232,-0.005861, -0.682839,0.727149,0.070606,0.044014,0.068527,-0.006013, -0.625979,0.756678,0.18865,0.044844,0.069232,-0.005861, -0.635833,0.76859,0.070606,0.044831,0.069247,-0.006013, -0.727149,0.682839,0.070606,0.043243,0.067757,-0.006013, -0.715879,0.672256,0.18865,0.043258,0.067743,-0.005861, -0.672256,0.715879,0.18865,0.044028,0.068512,-0.005861, -0.727149,0.682839,0.070606,0.043243,0.067757,-0.006013, -0.672256,0.715879,0.18865,0.044028,0.068512,-0.005861, -0.682839,0.727149,0.070606,0.044014,0.068527,-0.006013, -0.76859,0.635833,0.070606,0.042523,0.06694,-0.006013, -0.756678,0.625979,0.18865,0.042538,0.066927,-0.005861, -0.715879,0.672256,0.18865,0.043258,0.067743,-0.005861, -0.76859,0.635833,0.070606,0.042523,0.06694,-0.006013, -0.715879,0.672256,0.18865,0.043258,0.067743,-0.005861, -0.727149,0.682839,0.070606,0.043243,0.067757,-0.006013, -0.806998,0.586318,0.070606,0.041855,0.066079,-0.006013, -0.794491,0.577231,0.18865,0.041871,0.066067,-0.005861, -0.756678,0.625979,0.18865,0.042538,0.066927,-0.005861, -0.806998,0.586318,0.070606,0.041855,0.066079,-0.006013, -0.756678,0.625979,0.18865,0.042538,0.066927,-0.005861, -0.76859,0.635833,0.070606,0.042523,0.06694,-0.006013, -0.842221,0.53449,0.070606,0.041243,0.065178,-0.006013, -0.829167,0.526206,0.18865,0.04126,0.065167,-0.005861, -0.794491,0.577231,0.18865,0.041871,0.066067,-0.005861, -0.842221,0.53449,0.070606,0.041243,0.065178,-0.006013, -0.794491,0.577231,0.18865,0.041871,0.066067,-0.005861, -0.806998,0.586318,0.070606,0.041855,0.066079,-0.006013, -0.87412,0.480551,0.070606,0.040688,0.06424,-0.006013, -0.860572,0.473103,0.18865,0.040706,0.06423,-0.005861, -0.829167,0.526206,0.18865,0.04126,0.065167,-0.005861, -0.87412,0.480551,0.070606,0.040688,0.06424,-0.006013, -0.829167,0.526206,0.18865,0.04126,0.065167,-0.005861, -0.842221,0.53449,0.070606,0.041243,0.065178,-0.006013, -0.902569,0.424717,0.070606,0.040194,0.063269,-0.006013, -0.88858,0.418134,0.18865,0.040212,0.063261,-0.005861, -0.860572,0.473103,0.18865,0.040706,0.06423,-0.005861, -0.902569,0.424717,0.070606,0.040194,0.063269,-0.006013, -0.860572,0.473103,0.18865,0.040706,0.06423,-0.005861, -0.87412,0.480551,0.070606,0.040688,0.06424,-0.006013, -0.927456,0.367206,0.070606,0.039761,0.062269,-0.006013, -0.913082,0.361515,0.18865,0.03978,0.062262,-0.005861, -0.88858,0.418134,0.18865,0.040212,0.063261,-0.005861, -0.927456,0.367206,0.070606,0.039761,0.062269,-0.006013, -0.88858,0.418134,0.18865,0.040212,0.063261,-0.005861, -0.902569,0.424717,0.070606,0.040194,0.063269,-0.006013, -0.948683,0.308246,0.070606,0.039392,0.061244,-0.006013, -0.93398,0.303468,0.18865,0.039411,0.061238,-0.005861, -0.913082,0.361515,0.18865,0.03978,0.062262,-0.005861, -0.948683,0.308246,0.070606,0.039392,0.061244,-0.006013, -0.913082,0.361515,0.18865,0.03978,0.062262,-0.005861, -0.927456,0.367206,0.070606,0.039761,0.062269,-0.006013, -0.966166,0.248069,0.070606,0.039088,0.060198,-0.006013, -0.951192,0.244224,0.18865,0.039107,0.060193,-0.005861, -0.93398,0.303468,0.18865,0.039411,0.061238,-0.005861, -0.966166,0.248069,0.070606,0.039088,0.060198,-0.006013, -0.93398,0.303468,0.18865,0.039411,0.061238,-0.005861, -0.948683,0.308246,0.070606,0.039392,0.061244,-0.006013, -0.979836,0.186914,0.070606,0.03885,0.059135,-0.006013, -0.96465,0.184017,0.18865,0.03887,0.059131,-0.005861, -0.951192,0.244224,0.18865,0.039107,0.060193,-0.005861, -0.979836,0.186914,0.070606,0.03885,0.059135,-0.006013, -0.951192,0.244224,0.18865,0.039107,0.060193,-0.005861, -0.966166,0.248069,0.070606,0.039088,0.060198,-0.006013, -0.989639,0.12502,0.070606,0.03868,0.058059,-0.006013, -0.974301,0.123083,0.18865,0.0387,0.058056,-0.005861, -0.96465,0.184017,0.18865,0.03887,0.059131,-0.005861, -0.989639,0.12502,0.070606,0.03868,0.058059,-0.006013, -0.96465,0.184017,0.18865,0.03887,0.059131,-0.005861, -0.979836,0.186914,0.070606,0.03885,0.059135,-0.006013, -0.995536,0.062634,0.070606,0.038577,0.056974,-0.006013, -0.980106,0.061663,0.18865,0.038597,0.056973,-0.005861, -0.974301,0.123083,0.18865,0.0387,0.058056,-0.005861, -0.995536,0.062634,0.070606,0.038577,0.056974,-0.006013, -0.974301,0.123083,0.18865,0.0387,0.058056,-0.005861, -0.989639,0.12502,0.070606,0.03868,0.058059,-0.006013, -0.997504,0,0.070606,0.038543,0.055885,-0.006013, -0.982044,0,0.18865,0.038563,0.055885,-0.005861, -0.980106,0.061663,0.18865,0.038597,0.056973,-0.005861, -0.997504,0,0.070606,0.038543,0.055885,-0.006013, -0.980106,0.061663,0.18865,0.038597,0.056973,-0.005861, -0.995536,0.062634,0.070606,0.038577,0.056974,-0.006013, -0.995536,-0.062634,0.070606,0.038577,0.054796,-0.006013, -0.980106,-0.061663,0.18865,0.038597,0.054798,-0.005861, -0.982044,0,0.18865,0.038563,0.055885,-0.005861, -0.995536,-0.062634,0.070606,0.038577,0.054796,-0.006013, -0.982044,0,0.18865,0.038563,0.055885,-0.005861, -0.997504,0,0.070606,0.038543,0.055885,-0.006013, -0.989639,-0.12502,0.070606,0.03868,0.053712,-0.006013, -0.974301,-0.123083,0.18865,0.0387,0.053714,-0.005861, -0.980106,-0.061663,0.18865,0.038597,0.054798,-0.005861, -0.989639,-0.12502,0.070606,0.03868,0.053712,-0.006013, -0.980106,-0.061663,0.18865,0.038597,0.054798,-0.005861, -0.995536,-0.062634,0.070606,0.038577,0.054796,-0.006013, -0.979836,-0.186914,0.070606,0.03885,0.052636,-0.006013, -0.96465,-0.184017,0.18865,0.03887,0.05264,-0.005861, -0.974301,-0.123083,0.18865,0.0387,0.053714,-0.005861, -0.979836,-0.186914,0.070606,0.03885,0.052636,-0.006013, -0.974301,-0.123083,0.18865,0.0387,0.053714,-0.005861, -0.989639,-0.12502,0.070606,0.03868,0.053712,-0.006013, -0.966166,-0.248069,0.070606,0.039088,0.051572,-0.006013, -0.951192,-0.244224,0.18865,0.039107,0.051578,-0.005861, -0.96465,-0.184017,0.18865,0.03887,0.05264,-0.005861, -0.966166,-0.248069,0.070606,0.039088,0.051572,-0.006013, -0.96465,-0.184017,0.18865,0.03887,0.05264,-0.005861, -0.979836,-0.186914,0.070606,0.03885,0.052636,-0.006013, -0.948683,-0.308246,0.070606,0.039392,0.050526,-0.006013, -0.93398,-0.303468,0.18865,0.039411,0.050532,-0.005861, -0.951192,-0.244224,0.18865,0.039107,0.051578,-0.005861, -0.948683,-0.308246,0.070606,0.039392,0.050526,-0.006013, -0.951192,-0.244224,0.18865,0.039107,0.051578,-0.005861, -0.966166,-0.248069,0.070606,0.039088,0.051572,-0.006013, -0.93398,-0.303468,0.18865,0.039411,0.050532,-0.005861, -0.906039,-0.29439,0.304021,0.039447,0.050544,-0.005713, -0.922736,-0.236918,0.304021,0.039144,0.051587,-0.005713, -0.93398,-0.303468,0.18865,0.039411,0.050532,-0.005861, -0.922736,-0.236918,0.304021,0.039144,0.051587,-0.005713, -0.951192,-0.244224,0.18865,0.039107,0.051578,-0.005861, -0.913082,-0.361515,0.18865,0.03978,0.049509,-0.005861, -0.885766,-0.3507,0.304021,0.039815,0.049522,-0.005713, -0.906039,-0.29439,0.304021,0.039447,0.050544,-0.005713, -0.913082,-0.361515,0.18865,0.03978,0.049509,-0.005861, -0.906039,-0.29439,0.304021,0.039447,0.050544,-0.005713, -0.93398,-0.303468,0.18865,0.039411,0.050532,-0.005861, -0.88858,-0.418134,0.18865,0.040212,0.04851,-0.005861, -0.861997,-0.405625,0.304021,0.040246,0.048526,-0.005713, -0.885766,-0.3507,0.304021,0.039815,0.049522,-0.005713, -0.88858,-0.418134,0.18865,0.040212,0.04851,-0.005861, -0.885766,-0.3507,0.304021,0.039815,0.049522,-0.005713, -0.913082,-0.361515,0.18865,0.03978,0.049509,-0.005861, -0.860572,-0.473103,0.18865,0.040706,0.04754,-0.005861, -0.834827,-0.45895,0.304021,0.040739,0.047559,-0.005713, -0.861997,-0.405625,0.304021,0.040246,0.048526,-0.005713, -0.860572,-0.473103,0.18865,0.040706,0.04754,-0.005861, -0.861997,-0.405625,0.304021,0.040246,0.048526,-0.005713, -0.88858,-0.418134,0.18865,0.040212,0.04851,-0.005861, -0.829167,-0.526206,0.18865,0.04126,0.046604,-0.005861, -0.804362,-0.510464,0.304021,0.041292,0.046624,-0.005713, -0.834827,-0.45895,0.304021,0.040739,0.047559,-0.005713, -0.829167,-0.526206,0.18865,0.04126,0.046604,-0.005861, -0.834827,-0.45895,0.304021,0.040739,0.047559,-0.005713, -0.860572,-0.473103,0.18865,0.040706,0.04754,-0.005861, -0.794491,-0.577231,0.18865,0.041871,0.045704,-0.005861, -0.770723,-0.559963,0.304021,0.041902,0.045726,-0.005713, -0.804362,-0.510464,0.304021,0.041292,0.046624,-0.005713, -0.794491,-0.577231,0.18865,0.041871,0.045704,-0.005861, -0.804362,-0.510464,0.304021,0.041292,0.046624,-0.005713, -0.829167,-0.526206,0.18865,0.04126,0.046604,-0.005861, -0.756678,-0.625979,0.18865,0.042538,0.044844,-0.005861, -0.734041,-0.607252,0.304021,0.042568,0.044868,-0.005713, -0.770723,-0.559963,0.304021,0.041902,0.045726,-0.005713, -0.756678,-0.625979,0.18865,0.042538,0.044844,-0.005861, -0.770723,-0.559963,0.304021,0.041902,0.045726,-0.005713, -0.794491,-0.577231,0.18865,0.041871,0.045704,-0.005861, -0.715879,-0.672256,0.18865,0.043258,0.044028,-0.005861, -0.694463,-0.652144,0.304021,0.043286,0.044053,-0.005713, -0.734041,-0.607252,0.304021,0.042568,0.044868,-0.005713, -0.715879,-0.672256,0.18865,0.043258,0.044028,-0.005861, -0.734041,-0.607252,0.304021,0.042568,0.044868,-0.005713, -0.756678,-0.625979,0.18865,0.042538,0.044844,-0.005861, -0.672256,-0.715879,0.18865,0.044028,0.043258,-0.005861, -0.652144,-0.694463,0.304021,0.044053,0.043286,-0.005713, -0.694463,-0.652144,0.304021,0.043286,0.044053,-0.005713, -0.672256,-0.715879,0.18865,0.044028,0.043258,-0.005861, -0.694463,-0.652144,0.304021,0.043286,0.044053,-0.005713, -0.715879,-0.672256,0.18865,0.043258,0.044028,-0.005861, -0.625979,-0.756678,0.18865,0.044844,0.042538,-0.005861, -0.607252,-0.734041,0.304021,0.044868,0.042568,-0.005713, -0.652144,-0.694463,0.304021,0.044053,0.043286,-0.005713, -0.625979,-0.756678,0.18865,0.044844,0.042538,-0.005861, -0.652144,-0.694463,0.304021,0.044053,0.043286,-0.005713, -0.672256,-0.715879,0.18865,0.044028,0.043258,-0.005861, -0.577231,-0.794491,0.18865,0.045704,0.041871,-0.005861, -0.559963,-0.770723,0.304021,0.045726,0.041902,-0.005713, -0.607252,-0.734041,0.304021,0.044868,0.042568,-0.005713, -0.577231,-0.794491,0.18865,0.045704,0.041871,-0.005861, -0.607252,-0.734041,0.304021,0.044868,0.042568,-0.005713, -0.625979,-0.756678,0.18865,0.044844,0.042538,-0.005861, -0.526206,-0.829167,0.18865,0.046604,0.04126,-0.005861, -0.510464,-0.804362,0.304021,0.046624,0.041292,-0.005713, -0.559963,-0.770723,0.304021,0.045726,0.041902,-0.005713, -0.526206,-0.829167,0.18865,0.046604,0.04126,-0.005861, -0.559963,-0.770723,0.304021,0.045726,0.041902,-0.005713, -0.577231,-0.794491,0.18865,0.045704,0.041871,-0.005861, -0.473103,-0.860572,0.18865,0.04754,0.040706,-0.005861, -0.45895,-0.834827,0.304021,0.047559,0.040739,-0.005713, -0.510464,-0.804362,0.304021,0.046624,0.041292,-0.005713, -0.473103,-0.860572,0.18865,0.04754,0.040706,-0.005861, -0.510464,-0.804362,0.304021,0.046624,0.041292,-0.005713, -0.526206,-0.829167,0.18865,0.046604,0.04126,-0.005861, -0.418134,-0.88858,0.18865,0.04851,0.040212,-0.005861, -0.405625,-0.861997,0.304021,0.048526,0.040246,-0.005713, -0.45895,-0.834827,0.304021,0.047559,0.040739,-0.005713, -0.418134,-0.88858,0.18865,0.04851,0.040212,-0.005861, -0.45895,-0.834827,0.304021,0.047559,0.040739,-0.005713, -0.473103,-0.860572,0.18865,0.04754,0.040706,-0.005861, -0.361515,-0.913082,0.18865,0.049509,0.03978,-0.005861, -0.3507,-0.885766,0.304021,0.049522,0.039815,-0.005713, -0.405625,-0.861997,0.304021,0.048526,0.040246,-0.005713, -0.361515,-0.913082,0.18865,0.049509,0.03978,-0.005861, -0.405625,-0.861997,0.304021,0.048526,0.040246,-0.005713, -0.418134,-0.88858,0.18865,0.04851,0.040212,-0.005861, -0.303468,-0.93398,0.18865,0.050532,0.039411,-0.005861, -0.29439,-0.906039,0.304021,0.050544,0.039447,-0.005713, -0.3507,-0.885766,0.304021,0.049522,0.039815,-0.005713, -0.303468,-0.93398,0.18865,0.050532,0.039411,-0.005861, -0.3507,-0.885766,0.304021,0.049522,0.039815,-0.005713, -0.361515,-0.913082,0.18865,0.049509,0.03978,-0.005861, -0.244224,-0.951192,0.18865,0.051578,0.039107,-0.005861, -0.236918,-0.922736,0.304021,0.051587,0.039144,-0.005713, -0.29439,-0.906039,0.304021,0.050544,0.039447,-0.005713, -0.244224,-0.951192,0.18865,0.051578,0.039107,-0.005861, -0.29439,-0.906039,0.304021,0.050544,0.039447,-0.005713, -0.303468,-0.93398,0.18865,0.050532,0.039411,-0.005861, -0.184017,-0.96465,0.18865,0.05264,0.03887,-0.005861, -0.178512,-0.935791,0.304021,0.052646,0.038907,-0.005713, -0.236918,-0.922736,0.304021,0.051587,0.039144,-0.005713, -0.184017,-0.96465,0.18865,0.05264,0.03887,-0.005861, -0.236918,-0.922736,0.304021,0.051587,0.039144,-0.005713, -0.244224,-0.951192,0.18865,0.051578,0.039107,-0.005861, -0.123083,-0.974301,0.18865,0.053714,0.0387,-0.005861, -0.119401,-0.945153,0.304021,0.053719,0.038737,-0.005713, -0.178512,-0.935791,0.304021,0.052646,0.038907,-0.005713, -0.123083,-0.974301,0.18865,0.053714,0.0387,-0.005861, -0.178512,-0.935791,0.304021,0.052646,0.038907,-0.005713, -0.184017,-0.96465,0.18865,0.05264,0.03887,-0.005861, -0.061663,-0.980106,0.18865,0.054798,0.038597,-0.005861, -0.059818,-0.950786,0.304021,0.0548,0.038635,-0.005713, -0.119401,-0.945153,0.304021,0.053719,0.038737,-0.005713, -0.061663,-0.980106,0.18865,0.054798,0.038597,-0.005861, -0.119401,-0.945153,0.304021,0.053719,0.038737,-0.005713, -0.123083,-0.974301,0.18865,0.053714,0.0387,-0.005861, 0,-0.982044,0.18865,0.055885,0.038563,-0.005861, 0,-0.952665,0.304021,0.055885,0.038601,-0.005713, -0.059818,-0.950786,0.304021,0.0548,0.038635,-0.005713, 0,-0.982044,0.18865,0.055885,0.038563,-0.005861, -0.059818,-0.950786,0.304021,0.0548,0.038635,-0.005713, -0.061663,-0.980106,0.18865,0.054798,0.038597,-0.005861, 0.061663,-0.980106,0.18865,0.056973,0.038597,-0.005861, 0.059818,-0.950786,0.304021,0.056971,0.038635,-0.005713, 0,-0.952665,0.304021,0.055885,0.038601,-0.005713, 0.061663,-0.980106,0.18865,0.056973,0.038597,-0.005861, 0,-0.952665,0.304021,0.055885,0.038601,-0.005713, 0,-0.982044,0.18865,0.055885,0.038563,-0.005861, 0.123083,-0.974301,0.18865,0.058056,0.0387,-0.005861, 0.119401,-0.945153,0.304021,0.058052,0.038737,-0.005713, 0.059818,-0.950786,0.304021,0.056971,0.038635,-0.005713, 0.123083,-0.974301,0.18865,0.058056,0.0387,-0.005861, 0.059818,-0.950786,0.304021,0.056971,0.038635,-0.005713, 0.061663,-0.980106,0.18865,0.056973,0.038597,-0.005861, 0.184017,-0.96465,0.18865,0.059131,0.03887,-0.005861, 0.178512,-0.935791,0.304021,0.059124,0.038907,-0.005713, 0.119401,-0.945153,0.304021,0.058052,0.038737,-0.005713, 0.184017,-0.96465,0.18865,0.059131,0.03887,-0.005861, 0.119401,-0.945153,0.304021,0.058052,0.038737,-0.005713, 0.123083,-0.974301,0.18865,0.058056,0.0387,-0.005861, 0.244224,-0.951192,0.18865,0.060193,0.039107,-0.005861, 0.236918,-0.922736,0.304021,0.060184,0.039144,-0.005713, 0.178512,-0.935791,0.304021,0.059124,0.038907,-0.005713, 0.244224,-0.951192,0.18865,0.060193,0.039107,-0.005861, 0.178512,-0.935791,0.304021,0.059124,0.038907,-0.005713, 0.184017,-0.96465,0.18865,0.059131,0.03887,-0.005861, 0.303468,-0.93398,0.18865,0.061238,0.039411,-0.005861, 0.29439,-0.906039,0.304021,0.061226,0.039447,-0.005713, 0.236918,-0.922736,0.304021,0.060184,0.039144,-0.005713, 0.303468,-0.93398,0.18865,0.061238,0.039411,-0.005861, 0.236918,-0.922736,0.304021,0.060184,0.039144,-0.005713, 0.244224,-0.951192,0.18865,0.060193,0.039107,-0.005861, 0.361515,-0.913082,0.18865,0.062262,0.03978,-0.005861, 0.3507,-0.885766,0.304021,0.062248,0.039815,-0.005713, 0.29439,-0.906039,0.304021,0.061226,0.039447,-0.005713, 0.361515,-0.913082,0.18865,0.062262,0.03978,-0.005861, 0.29439,-0.906039,0.304021,0.061226,0.039447,-0.005713, 0.303468,-0.93398,0.18865,0.061238,0.039411,-0.005861, 0.418134,-0.88858,0.18865,0.063261,0.040212,-0.005861, 0.405625,-0.861997,0.304021,0.063245,0.040246,-0.005713, 0.3507,-0.885766,0.304021,0.062248,0.039815,-0.005713, 0.418134,-0.88858,0.18865,0.063261,0.040212,-0.005861, 0.3507,-0.885766,0.304021,0.062248,0.039815,-0.005713, 0.361515,-0.913082,0.18865,0.062262,0.03978,-0.005861, 0.473103,-0.860572,0.18865,0.06423,0.040706,-0.005861, 0.45895,-0.834827,0.304021,0.064212,0.040739,-0.005713, 0.405625,-0.861997,0.304021,0.063245,0.040246,-0.005713, 0.473103,-0.860572,0.18865,0.06423,0.040706,-0.005861, 0.405625,-0.861997,0.304021,0.063245,0.040246,-0.005713, 0.418134,-0.88858,0.18865,0.063261,0.040212,-0.005861, 0.526206,-0.829167,0.18865,0.065167,0.04126,-0.005861, 0.510464,-0.804362,0.304021,0.065147,0.041292,-0.005713, 0.45895,-0.834827,0.304021,0.064212,0.040739,-0.005713, 0.526206,-0.829167,0.18865,0.065167,0.04126,-0.005861, 0.45895,-0.834827,0.304021,0.064212,0.040739,-0.005713, 0.473103,-0.860572,0.18865,0.06423,0.040706,-0.005861, 0.577231,-0.794491,0.18865,0.066067,0.041871,-0.005861, 0.559963,-0.770723,0.304021,0.066045,0.041902,-0.005713, 0.510464,-0.804362,0.304021,0.065147,0.041292,-0.005713, 0.577231,-0.794491,0.18865,0.066067,0.041871,-0.005861, 0.510464,-0.804362,0.304021,0.065147,0.041292,-0.005713, 0.526206,-0.829167,0.18865,0.065167,0.04126,-0.005861, 0.625979,-0.756678,0.18865,0.066927,0.042538,-0.005861, 0.607252,-0.734041,0.304021,0.066903,0.042568,-0.005713, 0.559963,-0.770723,0.304021,0.066045,0.041902,-0.005713, 0.625979,-0.756678,0.18865,0.066927,0.042538,-0.005861, 0.559963,-0.770723,0.304021,0.066045,0.041902,-0.005713, 0.577231,-0.794491,0.18865,0.066067,0.041871,-0.005861, 0.672256,-0.715879,0.18865,0.067743,0.043258,-0.005861, 0.652144,-0.694463,0.304021,0.067717,0.043286,-0.005713, 0.607252,-0.734041,0.304021,0.066903,0.042568,-0.005713, 0.672256,-0.715879,0.18865,0.067743,0.043258,-0.005861, 0.607252,-0.734041,0.304021,0.066903,0.042568,-0.005713, 0.625979,-0.756678,0.18865,0.066927,0.042538,-0.005861, 0.715879,-0.672256,0.18865,0.068512,0.044028,-0.005861, 0.694463,-0.652144,0.304021,0.068485,0.044053,-0.005713, 0.652144,-0.694463,0.304021,0.067717,0.043286,-0.005713, 0.715879,-0.672256,0.18865,0.068512,0.044028,-0.005861, 0.652144,-0.694463,0.304021,0.067717,0.043286,-0.005713, 0.672256,-0.715879,0.18865,0.067743,0.043258,-0.005861, 0.756678,-0.625979,0.18865,0.069232,0.044844,-0.005861, 0.734041,-0.607252,0.304021,0.069203,0.044868,-0.005713, 0.694463,-0.652144,0.304021,0.068485,0.044053,-0.005713, 0.756678,-0.625979,0.18865,0.069232,0.044844,-0.005861, 0.694463,-0.652144,0.304021,0.068485,0.044053,-0.005713, 0.715879,-0.672256,0.18865,0.068512,0.044028,-0.005861, 0.794491,-0.577231,0.18865,0.069899,0.045704,-0.005861, 0.770723,-0.559963,0.304021,0.069869,0.045726,-0.005713, 0.734041,-0.607252,0.304021,0.069203,0.044868,-0.005713, 0.794491,-0.577231,0.18865,0.069899,0.045704,-0.005861, 0.734041,-0.607252,0.304021,0.069203,0.044868,-0.005713, 0.756678,-0.625979,0.18865,0.069232,0.044844,-0.005861, 0.829167,-0.526206,0.18865,0.070511,0.046604,-0.005861, 0.804362,-0.510464,0.304021,0.070479,0.046624,-0.005713, 0.770723,-0.559963,0.304021,0.069869,0.045726,-0.005713, 0.829167,-0.526206,0.18865,0.070511,0.046604,-0.005861, 0.770723,-0.559963,0.304021,0.069869,0.045726,-0.005713, 0.794491,-0.577231,0.18865,0.069899,0.045704,-0.005861, 0.860572,-0.473103,0.18865,0.071065,0.04754,-0.005861, 0.834827,-0.45895,0.304021,0.071032,0.047559,-0.005713, 0.804362,-0.510464,0.304021,0.070479,0.046624,-0.005713, 0.860572,-0.473103,0.18865,0.071065,0.04754,-0.005861, 0.804362,-0.510464,0.304021,0.070479,0.046624,-0.005713, 0.829167,-0.526206,0.18865,0.070511,0.046604,-0.005861, 0.88858,-0.418134,0.18865,0.071559,0.04851,-0.005861, 0.861997,-0.405625,0.304021,0.071525,0.048526,-0.005713, 0.834827,-0.45895,0.304021,0.071032,0.047559,-0.005713, 0.88858,-0.418134,0.18865,0.071559,0.04851,-0.005861, 0.834827,-0.45895,0.304021,0.071032,0.047559,-0.005713, 0.860572,-0.473103,0.18865,0.071065,0.04754,-0.005861, 0.913082,-0.361515,0.18865,0.071991,0.049509,-0.005861, 0.885766,-0.3507,0.304021,0.071956,0.049522,-0.005713, 0.861997,-0.405625,0.304021,0.071525,0.048526,-0.005713, 0.913082,-0.361515,0.18865,0.071991,0.049509,-0.005861, 0.861997,-0.405625,0.304021,0.071525,0.048526,-0.005713, 0.88858,-0.418134,0.18865,0.071559,0.04851,-0.005861, 0.93398,-0.303468,0.18865,0.07236,0.050532,-0.005861, 0.906039,-0.29439,0.304021,0.072324,0.050544,-0.005713, 0.885766,-0.3507,0.304021,0.071956,0.049522,-0.005713, 0.93398,-0.303468,0.18865,0.07236,0.050532,-0.005861, 0.885766,-0.3507,0.304021,0.071956,0.049522,-0.005713, 0.913082,-0.361515,0.18865,0.071991,0.049509,-0.005861, 0.951192,-0.244224,0.18865,0.072663,0.051578,-0.005861, 0.922736,-0.236918,0.304021,0.072627,0.051587,-0.005713, 0.906039,-0.29439,0.304021,0.072324,0.050544,-0.005713, 0.951192,-0.244224,0.18865,0.072663,0.051578,-0.005861, 0.906039,-0.29439,0.304021,0.072324,0.050544,-0.005713, 0.93398,-0.303468,0.18865,0.07236,0.050532,-0.005861, 0.96465,-0.184017,0.18865,0.072901,0.05264,-0.005861, 0.935791,-0.178512,0.304021,0.072863,0.052646,-0.005713, 0.922736,-0.236918,0.304021,0.072627,0.051587,-0.005713, 0.96465,-0.184017,0.18865,0.072901,0.05264,-0.005861, 0.922736,-0.236918,0.304021,0.072627,0.051587,-0.005713, 0.951192,-0.244224,0.18865,0.072663,0.051578,-0.005861, 0.974301,-0.123083,0.18865,0.073071,0.053714,-0.005861, 0.945153,-0.119401,0.304021,0.073033,0.053719,-0.005713, 0.935791,-0.178512,0.304021,0.072863,0.052646,-0.005713, 0.974301,-0.123083,0.18865,0.073071,0.053714,-0.005861, 0.935791,-0.178512,0.304021,0.072863,0.052646,-0.005713, 0.96465,-0.184017,0.18865,0.072901,0.05264,-0.005861, 0.980106,-0.061663,0.18865,0.073173,0.054798,-0.005861, 0.950786,-0.059818,0.304021,0.073135,0.0548,-0.005713, 0.945153,-0.119401,0.304021,0.073033,0.053719,-0.005713, 0.980106,-0.061663,0.18865,0.073173,0.054798,-0.005861, 0.945153,-0.119401,0.304021,0.073033,0.053719,-0.005713, 0.974301,-0.123083,0.18865,0.073071,0.053714,-0.005861, 0.982044,0,0.18865,0.073207,0.055885,-0.005861, 0.952665,0,0.304021,0.073169,0.055885,-0.005713, 0.950786,-0.059818,0.304021,0.073135,0.0548,-0.005713, 0.982044,0,0.18865,0.073207,0.055885,-0.005861, 0.950786,-0.059818,0.304021,0.073135,0.0548,-0.005713, 0.980106,-0.061663,0.18865,0.073173,0.054798,-0.005861, 0.980106,0.061663,0.18865,0.073173,0.056973,-0.005861, 0.950786,0.059818,0.304021,0.073135,0.056971,-0.005713, 0.952665,0,0.304021,0.073169,0.055885,-0.005713, 0.980106,0.061663,0.18865,0.073173,0.056973,-0.005861, 0.952665,0,0.304021,0.073169,0.055885,-0.005713, 0.982044,0,0.18865,0.073207,0.055885,-0.005861, 0.974301,0.123083,0.18865,0.073071,0.058056,-0.005861, 0.945153,0.119401,0.304021,0.073033,0.058052,-0.005713, 0.950786,0.059818,0.304021,0.073135,0.056971,-0.005713, 0.974301,0.123083,0.18865,0.073071,0.058056,-0.005861, 0.950786,0.059818,0.304021,0.073135,0.056971,-0.005713, 0.980106,0.061663,0.18865,0.073173,0.056973,-0.005861, 0.96465,0.184017,0.18865,0.072901,0.059131,-0.005861, 0.935791,0.178512,0.304021,0.072863,0.059124,-0.005713, 0.945153,0.119401,0.304021,0.073033,0.058052,-0.005713, 0.96465,0.184017,0.18865,0.072901,0.059131,-0.005861, 0.945153,0.119401,0.304021,0.073033,0.058052,-0.005713, 0.974301,0.123083,0.18865,0.073071,0.058056,-0.005861, 0.951192,0.244224,0.18865,0.072663,0.060193,-0.005861, 0.922736,0.236918,0.304021,0.072627,0.060184,-0.005713, 0.935791,0.178512,0.304021,0.072863,0.059124,-0.005713, 0.951192,0.244224,0.18865,0.072663,0.060193,-0.005861, 0.935791,0.178512,0.304021,0.072863,0.059124,-0.005713, 0.96465,0.184017,0.18865,0.072901,0.059131,-0.005861, 0.93398,0.303468,0.18865,0.07236,0.061238,-0.005861, 0.906039,0.29439,0.304021,0.072324,0.061226,-0.005713, 0.922736,0.236918,0.304021,0.072627,0.060184,-0.005713, 0.93398,0.303468,0.18865,0.07236,0.061238,-0.005861, 0.922736,0.236918,0.304021,0.072627,0.060184,-0.005713, 0.951192,0.244224,0.18865,0.072663,0.060193,-0.005861, 0.913082,0.361515,0.18865,0.071991,0.062262,-0.005861, 0.885766,0.3507,0.304021,0.071956,0.062248,-0.005713, 0.906039,0.29439,0.304021,0.072324,0.061226,-0.005713, 0.913082,0.361515,0.18865,0.071991,0.062262,-0.005861, 0.906039,0.29439,0.304021,0.072324,0.061226,-0.005713, 0.93398,0.303468,0.18865,0.07236,0.061238,-0.005861, 0.88858,0.418134,0.18865,0.071559,0.063261,-0.005861, 0.861997,0.405625,0.304021,0.071525,0.063245,-0.005713, 0.885766,0.3507,0.304021,0.071956,0.062248,-0.005713, 0.88858,0.418134,0.18865,0.071559,0.063261,-0.005861, 0.885766,0.3507,0.304021,0.071956,0.062248,-0.005713, 0.913082,0.361515,0.18865,0.071991,0.062262,-0.005861, 0.860572,0.473103,0.18865,0.071065,0.06423,-0.005861, 0.834827,0.45895,0.304021,0.071032,0.064212,-0.005713, 0.861997,0.405625,0.304021,0.071525,0.063245,-0.005713, 0.860572,0.473103,0.18865,0.071065,0.06423,-0.005861, 0.861997,0.405625,0.304021,0.071525,0.063245,-0.005713, 0.88858,0.418134,0.18865,0.071559,0.063261,-0.005861, 0.829167,0.526206,0.18865,0.070511,0.065167,-0.005861, 0.804362,0.510464,0.304021,0.070479,0.065147,-0.005713, 0.834827,0.45895,0.304021,0.071032,0.064212,-0.005713, 0.829167,0.526206,0.18865,0.070511,0.065167,-0.005861, 0.834827,0.45895,0.304021,0.071032,0.064212,-0.005713, 0.860572,0.473103,0.18865,0.071065,0.06423,-0.005861, 0.794491,0.577231,0.18865,0.069899,0.066067,-0.005861, 0.770723,0.559963,0.304021,0.069869,0.066045,-0.005713, 0.804362,0.510464,0.304021,0.070479,0.065147,-0.005713, 0.794491,0.577231,0.18865,0.069899,0.066067,-0.005861, 0.804362,0.510464,0.304021,0.070479,0.065147,-0.005713, 0.829167,0.526206,0.18865,0.070511,0.065167,-0.005861, 0.756678,0.625979,0.18865,0.069232,0.066927,-0.005861, 0.734041,0.607252,0.304021,0.069203,0.066903,-0.005713, 0.770723,0.559963,0.304021,0.069869,0.066045,-0.005713, 0.756678,0.625979,0.18865,0.069232,0.066927,-0.005861, 0.770723,0.559963,0.304021,0.069869,0.066045,-0.005713, 0.794491,0.577231,0.18865,0.069899,0.066067,-0.005861, 0.715879,0.672256,0.18865,0.068512,0.067743,-0.005861, 0.694463,0.652144,0.304021,0.068485,0.067717,-0.005713, 0.734041,0.607252,0.304021,0.069203,0.066903,-0.005713, 0.715879,0.672256,0.18865,0.068512,0.067743,-0.005861, 0.734041,0.607252,0.304021,0.069203,0.066903,-0.005713, 0.756678,0.625979,0.18865,0.069232,0.066927,-0.005861, 0.672256,0.715879,0.18865,0.067743,0.068512,-0.005861, 0.652144,0.694463,0.304021,0.067717,0.068485,-0.005713, 0.694463,0.652144,0.304021,0.068485,0.067717,-0.005713, 0.672256,0.715879,0.18865,0.067743,0.068512,-0.005861, 0.694463,0.652144,0.304021,0.068485,0.067717,-0.005713, 0.715879,0.672256,0.18865,0.068512,0.067743,-0.005861, 0.625979,0.756678,0.18865,0.066927,0.069232,-0.005861, 0.607252,0.734041,0.304021,0.066903,0.069203,-0.005713, 0.652144,0.694463,0.304021,0.067717,0.068485,-0.005713, 0.625979,0.756678,0.18865,0.066927,0.069232,-0.005861, 0.652144,0.694463,0.304021,0.067717,0.068485,-0.005713, 0.672256,0.715879,0.18865,0.067743,0.068512,-0.005861, 0.577231,0.794491,0.18865,0.066067,0.069899,-0.005861, 0.559963,0.770723,0.304021,0.066045,0.069869,-0.005713, 0.607252,0.734041,0.304021,0.066903,0.069203,-0.005713, 0.577231,0.794491,0.18865,0.066067,0.069899,-0.005861, 0.607252,0.734041,0.304021,0.066903,0.069203,-0.005713, 0.625979,0.756678,0.18865,0.066927,0.069232,-0.005861, 0.526206,0.829167,0.18865,0.065167,0.070511,-0.005861, 0.510464,0.804362,0.304021,0.065147,0.070479,-0.005713, 0.559963,0.770723,0.304021,0.066045,0.069869,-0.005713, 0.526206,0.829167,0.18865,0.065167,0.070511,-0.005861, 0.559963,0.770723,0.304021,0.066045,0.069869,-0.005713, 0.577231,0.794491,0.18865,0.066067,0.069899,-0.005861, 0.473103,0.860572,0.18865,0.06423,0.071065,-0.005861, 0.45895,0.834827,0.304021,0.064212,0.071032,-0.005713, 0.510464,0.804362,0.304021,0.065147,0.070479,-0.005713, 0.473103,0.860572,0.18865,0.06423,0.071065,-0.005861, 0.510464,0.804362,0.304021,0.065147,0.070479,-0.005713, 0.526206,0.829167,0.18865,0.065167,0.070511,-0.005861, 0.418134,0.88858,0.18865,0.063261,0.071559,-0.005861, 0.405625,0.861997,0.304021,0.063245,0.071525,-0.005713, 0.45895,0.834827,0.304021,0.064212,0.071032,-0.005713, 0.418134,0.88858,0.18865,0.063261,0.071559,-0.005861, 0.45895,0.834827,0.304021,0.064212,0.071032,-0.005713, 0.473103,0.860572,0.18865,0.06423,0.071065,-0.005861, 0.361515,0.913082,0.18865,0.062262,0.071991,-0.005861, 0.3507,0.885766,0.304021,0.062248,0.071956,-0.005713, 0.405625,0.861997,0.304021,0.063245,0.071525,-0.005713, 0.361515,0.913082,0.18865,0.062262,0.071991,-0.005861, 0.405625,0.861997,0.304021,0.063245,0.071525,-0.005713, 0.418134,0.88858,0.18865,0.063261,0.071559,-0.005861, 0.303468,0.93398,0.18865,0.061238,0.07236,-0.005861, 0.29439,0.906039,0.304021,0.061226,0.072324,-0.005713, 0.3507,0.885766,0.304021,0.062248,0.071956,-0.005713, 0.303468,0.93398,0.18865,0.061238,0.07236,-0.005861, 0.3507,0.885766,0.304021,0.062248,0.071956,-0.005713, 0.361515,0.913082,0.18865,0.062262,0.071991,-0.005861, 0.244224,0.951192,0.18865,0.060193,0.072663,-0.005861, 0.236918,0.922736,0.304021,0.060184,0.072627,-0.005713, 0.29439,0.906039,0.304021,0.061226,0.072324,-0.005713, 0.244224,0.951192,0.18865,0.060193,0.072663,-0.005861, 0.29439,0.906039,0.304021,0.061226,0.072324,-0.005713, 0.303468,0.93398,0.18865,0.061238,0.07236,-0.005861, 0.184017,0.96465,0.18865,0.059131,0.072901,-0.005861, 0.178512,0.935791,0.304021,0.059124,0.072863,-0.005713, 0.236918,0.922736,0.304021,0.060184,0.072627,-0.005713, 0.184017,0.96465,0.18865,0.059131,0.072901,-0.005861, 0.236918,0.922736,0.304021,0.060184,0.072627,-0.005713, 0.244224,0.951192,0.18865,0.060193,0.072663,-0.005861, 0.123083,0.974301,0.18865,0.058056,0.073071,-0.005861, 0.119401,0.945153,0.304021,0.058052,0.073033,-0.005713, 0.178512,0.935791,0.304021,0.059124,0.072863,-0.005713, 0.123083,0.974301,0.18865,0.058056,0.073071,-0.005861, 0.178512,0.935791,0.304021,0.059124,0.072863,-0.005713, 0.184017,0.96465,0.18865,0.059131,0.072901,-0.005861, 0.061663,0.980106,0.18865,0.056973,0.073173,-0.005861, 0.059818,0.950786,0.304021,0.056971,0.073135,-0.005713, 0.119401,0.945153,0.304021,0.058052,0.073033,-0.005713, 0.061663,0.980106,0.18865,0.056973,0.073173,-0.005861, 0.119401,0.945153,0.304021,0.058052,0.073033,-0.005713, 0.123083,0.974301,0.18865,0.058056,0.073071,-0.005861, 0,0.982044,0.18865,0.055885,0.073207,-0.005861, 0,0.952665,0.304021,0.055885,0.073169,-0.005713, 0.059818,0.950786,0.304021,0.056971,0.073135,-0.005713, 0,0.982044,0.18865,0.055885,0.073207,-0.005861, 0.059818,0.950786,0.304021,0.056971,0.073135,-0.005713, 0.061663,0.980106,0.18865,0.056973,0.073173,-0.005861, -0.061663,0.980106,0.18865,0.054798,0.073173,-0.005861, -0.059818,0.950786,0.304021,0.0548,0.073135,-0.005713, 0,0.952665,0.304021,0.055885,0.073169,-0.005713, -0.061663,0.980106,0.18865,0.054798,0.073173,-0.005861, 0,0.952665,0.304021,0.055885,0.073169,-0.005713, 0,0.982044,0.18865,0.055885,0.073207,-0.005861, -0.123083,0.974301,0.18865,0.053714,0.073071,-0.005861, -0.119401,0.945153,0.304021,0.053719,0.073033,-0.005713, -0.059818,0.950786,0.304021,0.0548,0.073135,-0.005713, -0.123083,0.974301,0.18865,0.053714,0.073071,-0.005861, -0.059818,0.950786,0.304021,0.0548,0.073135,-0.005713, -0.061663,0.980106,0.18865,0.054798,0.073173,-0.005861, -0.184017,0.96465,0.18865,0.05264,0.072901,-0.005861, -0.178512,0.935791,0.304021,0.052646,0.072863,-0.005713, -0.119401,0.945153,0.304021,0.053719,0.073033,-0.005713, -0.184017,0.96465,0.18865,0.05264,0.072901,-0.005861, -0.119401,0.945153,0.304021,0.053719,0.073033,-0.005713, -0.123083,0.974301,0.18865,0.053714,0.073071,-0.005861, -0.244224,0.951192,0.18865,0.051578,0.072663,-0.005861, -0.236918,0.922736,0.304021,0.051587,0.072627,-0.005713, -0.178512,0.935791,0.304021,0.052646,0.072863,-0.005713, -0.244224,0.951192,0.18865,0.051578,0.072663,-0.005861, -0.178512,0.935791,0.304021,0.052646,0.072863,-0.005713, -0.184017,0.96465,0.18865,0.05264,0.072901,-0.005861, -0.303468,0.93398,0.18865,0.050532,0.07236,-0.005861, -0.29439,0.906039,0.304021,0.050544,0.072324,-0.005713, -0.236918,0.922736,0.304021,0.051587,0.072627,-0.005713, -0.303468,0.93398,0.18865,0.050532,0.07236,-0.005861, -0.236918,0.922736,0.304021,0.051587,0.072627,-0.005713, -0.244224,0.951192,0.18865,0.051578,0.072663,-0.005861, -0.361515,0.913082,0.18865,0.049509,0.071991,-0.005861, -0.3507,0.885766,0.304021,0.049522,0.071956,-0.005713, -0.29439,0.906039,0.304021,0.050544,0.072324,-0.005713, -0.361515,0.913082,0.18865,0.049509,0.071991,-0.005861, -0.29439,0.906039,0.304021,0.050544,0.072324,-0.005713, -0.303468,0.93398,0.18865,0.050532,0.07236,-0.005861, -0.418134,0.88858,0.18865,0.04851,0.071559,-0.005861, -0.405625,0.861997,0.304021,0.048526,0.071525,-0.005713, -0.3507,0.885766,0.304021,0.049522,0.071956,-0.005713, -0.418134,0.88858,0.18865,0.04851,0.071559,-0.005861, -0.3507,0.885766,0.304021,0.049522,0.071956,-0.005713, -0.361515,0.913082,0.18865,0.049509,0.071991,-0.005861, -0.473103,0.860572,0.18865,0.04754,0.071065,-0.005861, -0.45895,0.834827,0.304021,0.047559,0.071032,-0.005713, -0.405625,0.861997,0.304021,0.048526,0.071525,-0.005713, -0.473103,0.860572,0.18865,0.04754,0.071065,-0.005861, -0.405625,0.861997,0.304021,0.048526,0.071525,-0.005713, -0.418134,0.88858,0.18865,0.04851,0.071559,-0.005861, -0.526206,0.829167,0.18865,0.046604,0.070511,-0.005861, -0.510464,0.804362,0.304021,0.046624,0.070479,-0.005713, -0.45895,0.834827,0.304021,0.047559,0.071032,-0.005713, -0.526206,0.829167,0.18865,0.046604,0.070511,-0.005861, -0.45895,0.834827,0.304021,0.047559,0.071032,-0.005713, -0.473103,0.860572,0.18865,0.04754,0.071065,-0.005861, -0.577231,0.794491,0.18865,0.045704,0.069899,-0.005861, -0.559963,0.770723,0.304021,0.045726,0.069869,-0.005713, -0.510464,0.804362,0.304021,0.046624,0.070479,-0.005713, -0.577231,0.794491,0.18865,0.045704,0.069899,-0.005861, -0.510464,0.804362,0.304021,0.046624,0.070479,-0.005713, -0.526206,0.829167,0.18865,0.046604,0.070511,-0.005861, -0.625979,0.756678,0.18865,0.044844,0.069232,-0.005861, -0.607252,0.734041,0.304021,0.044868,0.069203,-0.005713, -0.559963,0.770723,0.304021,0.045726,0.069869,-0.005713, -0.625979,0.756678,0.18865,0.044844,0.069232,-0.005861, -0.559963,0.770723,0.304021,0.045726,0.069869,-0.005713, -0.577231,0.794491,0.18865,0.045704,0.069899,-0.005861, -0.672256,0.715879,0.18865,0.044028,0.068512,-0.005861, -0.652144,0.694463,0.304021,0.044053,0.068485,-0.005713, -0.607252,0.734041,0.304021,0.044868,0.069203,-0.005713, -0.672256,0.715879,0.18865,0.044028,0.068512,-0.005861, -0.607252,0.734041,0.304021,0.044868,0.069203,-0.005713, -0.625979,0.756678,0.18865,0.044844,0.069232,-0.005861, -0.715879,0.672256,0.18865,0.043258,0.067743,-0.005861, -0.694463,0.652144,0.304021,0.043286,0.067717,-0.005713, -0.652144,0.694463,0.304021,0.044053,0.068485,-0.005713, -0.715879,0.672256,0.18865,0.043258,0.067743,-0.005861, -0.652144,0.694463,0.304021,0.044053,0.068485,-0.005713, -0.672256,0.715879,0.18865,0.044028,0.068512,-0.005861, -0.756678,0.625979,0.18865,0.042538,0.066927,-0.005861, -0.734041,0.607252,0.304021,0.042568,0.066903,-0.005713, -0.694463,0.652144,0.304021,0.043286,0.067717,-0.005713, -0.756678,0.625979,0.18865,0.042538,0.066927,-0.005861, -0.694463,0.652144,0.304021,0.043286,0.067717,-0.005713, -0.715879,0.672256,0.18865,0.043258,0.067743,-0.005861, -0.794491,0.577231,0.18865,0.041871,0.066067,-0.005861, -0.770723,0.559963,0.304021,0.041902,0.066045,-0.005713, -0.734041,0.607252,0.304021,0.042568,0.066903,-0.005713, -0.794491,0.577231,0.18865,0.041871,0.066067,-0.005861, -0.734041,0.607252,0.304021,0.042568,0.066903,-0.005713, -0.756678,0.625979,0.18865,0.042538,0.066927,-0.005861, -0.829167,0.526206,0.18865,0.04126,0.065167,-0.005861, -0.804362,0.510464,0.304021,0.041292,0.065147,-0.005713, -0.770723,0.559963,0.304021,0.041902,0.066045,-0.005713, -0.829167,0.526206,0.18865,0.04126,0.065167,-0.005861, -0.770723,0.559963,0.304021,0.041902,0.066045,-0.005713, -0.794491,0.577231,0.18865,0.041871,0.066067,-0.005861, -0.860572,0.473103,0.18865,0.040706,0.06423,-0.005861, -0.834827,0.45895,0.304021,0.040739,0.064212,-0.005713, -0.804362,0.510464,0.304021,0.041292,0.065147,-0.005713, -0.860572,0.473103,0.18865,0.040706,0.06423,-0.005861, -0.804362,0.510464,0.304021,0.041292,0.065147,-0.005713, -0.829167,0.526206,0.18865,0.04126,0.065167,-0.005861, -0.88858,0.418134,0.18865,0.040212,0.063261,-0.005861, -0.861997,0.405625,0.304021,0.040246,0.063245,-0.005713, -0.834827,0.45895,0.304021,0.040739,0.064212,-0.005713, -0.88858,0.418134,0.18865,0.040212,0.063261,-0.005861, -0.834827,0.45895,0.304021,0.040739,0.064212,-0.005713, -0.860572,0.473103,0.18865,0.040706,0.06423,-0.005861, -0.913082,0.361515,0.18865,0.03978,0.062262,-0.005861, -0.885766,0.3507,0.304021,0.039815,0.062248,-0.005713, -0.861997,0.405625,0.304021,0.040246,0.063245,-0.005713, -0.913082,0.361515,0.18865,0.03978,0.062262,-0.005861, -0.861997,0.405625,0.304021,0.040246,0.063245,-0.005713, -0.88858,0.418134,0.18865,0.040212,0.063261,-0.005861, -0.93398,0.303468,0.18865,0.039411,0.061238,-0.005861, -0.906039,0.29439,0.304021,0.039447,0.061226,-0.005713, -0.885766,0.3507,0.304021,0.039815,0.062248,-0.005713, -0.93398,0.303468,0.18865,0.039411,0.061238,-0.005861, -0.885766,0.3507,0.304021,0.039815,0.062248,-0.005713, -0.913082,0.361515,0.18865,0.03978,0.062262,-0.005861, -0.951192,0.244224,0.18865,0.039107,0.060193,-0.005861, -0.922736,0.236918,0.304021,0.039144,0.060184,-0.005713, -0.906039,0.29439,0.304021,0.039447,0.061226,-0.005713, -0.951192,0.244224,0.18865,0.039107,0.060193,-0.005861, -0.906039,0.29439,0.304021,0.039447,0.061226,-0.005713, -0.93398,0.303468,0.18865,0.039411,0.061238,-0.005861, -0.96465,0.184017,0.18865,0.03887,0.059131,-0.005861, -0.935791,0.178512,0.304021,0.038907,0.059124,-0.005713, -0.922736,0.236918,0.304021,0.039144,0.060184,-0.005713, -0.96465,0.184017,0.18865,0.03887,0.059131,-0.005861, -0.922736,0.236918,0.304021,0.039144,0.060184,-0.005713, -0.951192,0.244224,0.18865,0.039107,0.060193,-0.005861, -0.974301,0.123083,0.18865,0.0387,0.058056,-0.005861, -0.945153,0.119401,0.304021,0.038737,0.058052,-0.005713, -0.935791,0.178512,0.304021,0.038907,0.059124,-0.005713, -0.974301,0.123083,0.18865,0.0387,0.058056,-0.005861, -0.935791,0.178512,0.304021,0.038907,0.059124,-0.005713, -0.96465,0.184017,0.18865,0.03887,0.059131,-0.005861, -0.980106,0.061663,0.18865,0.038597,0.056973,-0.005861, -0.950786,0.059818,0.304021,0.038635,0.056971,-0.005713, -0.945153,0.119401,0.304021,0.038737,0.058052,-0.005713, -0.980106,0.061663,0.18865,0.038597,0.056973,-0.005861, -0.945153,0.119401,0.304021,0.038737,0.058052,-0.005713, -0.974301,0.123083,0.18865,0.0387,0.058056,-0.005861, -0.982044,0,0.18865,0.038563,0.055885,-0.005861, -0.952665,0,0.304021,0.038601,0.055885,-0.005713, -0.950786,0.059818,0.304021,0.038635,0.056971,-0.005713, -0.982044,0,0.18865,0.038563,0.055885,-0.005861, -0.950786,0.059818,0.304021,0.038635,0.056971,-0.005713, -0.980106,0.061663,0.18865,0.038597,0.056973,-0.005861, -0.980106,-0.061663,0.18865,0.038597,0.054798,-0.005861, -0.950786,-0.059818,0.304021,0.038635,0.0548,-0.005713, -0.952665,0,0.304021,0.038601,0.055885,-0.005713, -0.980106,-0.061663,0.18865,0.038597,0.054798,-0.005861, -0.952665,0,0.304021,0.038601,0.055885,-0.005713, -0.982044,0,0.18865,0.038563,0.055885,-0.005861, -0.974301,-0.123083,0.18865,0.0387,0.053714,-0.005861, -0.945153,-0.119401,0.304021,0.038737,0.053719,-0.005713, -0.950786,-0.059818,0.304021,0.038635,0.0548,-0.005713, -0.974301,-0.123083,0.18865,0.0387,0.053714,-0.005861, -0.950786,-0.059818,0.304021,0.038635,0.0548,-0.005713, -0.980106,-0.061663,0.18865,0.038597,0.054798,-0.005861, -0.96465,-0.184017,0.18865,0.03887,0.05264,-0.005861, -0.935791,-0.178512,0.304021,0.038907,0.052646,-0.005713, -0.945153,-0.119401,0.304021,0.038737,0.053719,-0.005713, -0.96465,-0.184017,0.18865,0.03887,0.05264,-0.005861, -0.945153,-0.119401,0.304021,0.038737,0.053719,-0.005713, -0.974301,-0.123083,0.18865,0.0387,0.053714,-0.005861, -0.951192,-0.244224,0.18865,0.039107,0.051578,-0.005861, -0.922736,-0.236918,0.304021,0.039144,0.051587,-0.005713, -0.935791,-0.178512,0.304021,0.038907,0.052646,-0.005713, -0.951192,-0.244224,0.18865,0.039107,0.051578,-0.005861, -0.935791,-0.178512,0.304021,0.038907,0.052646,-0.005713, -0.96465,-0.184017,0.18865,0.03887,0.05264,-0.005861, -0.922736,-0.236918,0.304021,0.039144,0.051587,-0.005713, -0.881202,-0.226254,0.415082,0.039198,0.051601,-0.00557, -0.893669,-0.170477,0.415082,0.038961,0.052657,-0.00557, -0.922736,-0.236918,0.304021,0.039144,0.051587,-0.005713, -0.893669,-0.170477,0.415082,0.038961,0.052657,-0.00557, -0.935791,-0.178512,0.304021,0.038907,0.052646,-0.005713, -0.906039,-0.29439,0.304021,0.039447,0.050544,-0.005713, -0.865256,-0.281139,0.415082,0.0395,0.050561,-0.00557, -0.881202,-0.226254,0.415082,0.039198,0.051601,-0.00557, -0.906039,-0.29439,0.304021,0.039447,0.050544,-0.005713, -0.881202,-0.226254,0.415082,0.039198,0.051601,-0.00557, -0.922736,-0.236918,0.304021,0.039144,0.051587,-0.005713, -0.885766,-0.3507,0.304021,0.039815,0.049522,-0.005713, -0.845896,-0.334914,0.415082,0.039866,0.049543,-0.00557, -0.865256,-0.281139,0.415082,0.0395,0.050561,-0.00557, -0.885766,-0.3507,0.304021,0.039815,0.049522,-0.005713, -0.865256,-0.281139,0.415082,0.0395,0.050561,-0.00557, -0.906039,-0.29439,0.304021,0.039447,0.050544,-0.005713, -0.861997,-0.405625,0.304021,0.040246,0.048526,-0.005713, -0.823197,-0.387367,0.415082,0.040296,0.048549,-0.00557, -0.845896,-0.334914,0.415082,0.039866,0.049543,-0.00557, -0.861997,-0.405625,0.304021,0.040246,0.048526,-0.005713, -0.845896,-0.334914,0.415082,0.039866,0.049543,-0.00557, -0.885766,-0.3507,0.304021,0.039815,0.049522,-0.005713, -0.834827,-0.45895,0.304021,0.040739,0.047559,-0.005713, -0.79725,-0.438292,0.415082,0.040787,0.047585,-0.00557, -0.823197,-0.387367,0.415082,0.040296,0.048549,-0.00557, -0.834827,-0.45895,0.304021,0.040739,0.047559,-0.005713, -0.823197,-0.387367,0.415082,0.040296,0.048549,-0.00557, -0.861997,-0.405625,0.304021,0.040246,0.048526,-0.005713, -0.804362,-0.510464,0.304021,0.041292,0.046624,-0.005713, -0.768156,-0.487487,0.415082,0.041338,0.046653,-0.00557, -0.79725,-0.438292,0.415082,0.040787,0.047585,-0.00557, -0.804362,-0.510464,0.304021,0.041292,0.046624,-0.005713, -0.79725,-0.438292,0.415082,0.040787,0.047585,-0.00557, -0.834827,-0.45895,0.304021,0.040739,0.047559,-0.005713, -0.770723,-0.559963,0.304021,0.041902,0.045726,-0.005713, -0.736031,-0.534758,0.415082,0.041947,0.045758,-0.00557, -0.768156,-0.487487,0.415082,0.041338,0.046653,-0.00557, -0.770723,-0.559963,0.304021,0.041902,0.045726,-0.005713, -0.768156,-0.487487,0.415082,0.041338,0.046653,-0.00557, -0.804362,-0.510464,0.304021,0.041292,0.046624,-0.005713, -0.734041,-0.607252,0.304021,0.042568,0.044868,-0.005713, -0.701001,-0.579918,0.415082,0.04261,0.044903,-0.00557, -0.736031,-0.534758,0.415082,0.041947,0.045758,-0.00557, -0.734041,-0.607252,0.304021,0.042568,0.044868,-0.005713, -0.736031,-0.534758,0.415082,0.041947,0.045758,-0.00557, -0.770723,-0.559963,0.304021,0.041902,0.045726,-0.005713, -0.694463,-0.652144,0.304021,0.043286,0.044053,-0.005713, -0.663204,-0.62279,0.415082,0.043326,0.044091,-0.00557, -0.701001,-0.579918,0.415082,0.04261,0.044903,-0.00557, -0.694463,-0.652144,0.304021,0.043286,0.044053,-0.005713, -0.701001,-0.579918,0.415082,0.04261,0.044903,-0.00557, -0.734041,-0.607252,0.304021,0.042568,0.044868,-0.005713, -0.652144,-0.694463,0.304021,0.044053,0.043286,-0.005713, -0.62279,-0.663204,0.415082,0.044091,0.043326,-0.00557, -0.663204,-0.62279,0.415082,0.043326,0.044091,-0.00557, -0.652144,-0.694463,0.304021,0.044053,0.043286,-0.005713, -0.663204,-0.62279,0.415082,0.043326,0.044091,-0.00557, -0.694463,-0.652144,0.304021,0.043286,0.044053,-0.005713, -0.607252,-0.734041,0.304021,0.044868,0.042568,-0.005713, -0.579918,-0.701001,0.415082,0.044903,0.04261,-0.00557, -0.62279,-0.663204,0.415082,0.044091,0.043326,-0.00557, -0.607252,-0.734041,0.304021,0.044868,0.042568,-0.005713, -0.62279,-0.663204,0.415082,0.044091,0.043326,-0.00557, -0.652144,-0.694463,0.304021,0.044053,0.043286,-0.005713, -0.559963,-0.770723,0.304021,0.045726,0.041902,-0.005713, -0.534758,-0.736031,0.415082,0.045758,0.041947,-0.00557, -0.579918,-0.701001,0.415082,0.044903,0.04261,-0.00557, -0.559963,-0.770723,0.304021,0.045726,0.041902,-0.005713, -0.579918,-0.701001,0.415082,0.044903,0.04261,-0.00557, -0.607252,-0.734041,0.304021,0.044868,0.042568,-0.005713, -0.510464,-0.804362,0.304021,0.046624,0.041292,-0.005713, -0.487487,-0.768156,0.415082,0.046653,0.041338,-0.00557, -0.534758,-0.736031,0.415082,0.045758,0.041947,-0.00557, -0.510464,-0.804362,0.304021,0.046624,0.041292,-0.005713, -0.534758,-0.736031,0.415082,0.045758,0.041947,-0.00557, -0.559963,-0.770723,0.304021,0.045726,0.041902,-0.005713, -0.45895,-0.834827,0.304021,0.047559,0.040739,-0.005713, -0.438292,-0.79725,0.415082,0.047585,0.040787,-0.00557, -0.487487,-0.768156,0.415082,0.046653,0.041338,-0.00557, -0.45895,-0.834827,0.304021,0.047559,0.040739,-0.005713, -0.487487,-0.768156,0.415082,0.046653,0.041338,-0.00557, -0.510464,-0.804362,0.304021,0.046624,0.041292,-0.005713, -0.405625,-0.861997,0.304021,0.048526,0.040246,-0.005713, -0.387367,-0.823197,0.415082,0.048549,0.040296,-0.00557, -0.438292,-0.79725,0.415082,0.047585,0.040787,-0.00557, -0.405625,-0.861997,0.304021,0.048526,0.040246,-0.005713, -0.438292,-0.79725,0.415082,0.047585,0.040787,-0.00557, -0.45895,-0.834827,0.304021,0.047559,0.040739,-0.005713, -0.3507,-0.885766,0.304021,0.049522,0.039815,-0.005713, -0.334914,-0.845896,0.415082,0.049543,0.039866,-0.00557, -0.387367,-0.823197,0.415082,0.048549,0.040296,-0.00557, -0.3507,-0.885766,0.304021,0.049522,0.039815,-0.005713, -0.387367,-0.823197,0.415082,0.048549,0.040296,-0.00557, -0.405625,-0.861997,0.304021,0.048526,0.040246,-0.005713, -0.29439,-0.906039,0.304021,0.050544,0.039447,-0.005713, -0.281139,-0.865256,0.415082,0.050561,0.0395,-0.00557, -0.334914,-0.845896,0.415082,0.049543,0.039866,-0.00557, -0.29439,-0.906039,0.304021,0.050544,0.039447,-0.005713, -0.334914,-0.845896,0.415082,0.049543,0.039866,-0.00557, -0.3507,-0.885766,0.304021,0.049522,0.039815,-0.005713, -0.236918,-0.922736,0.304021,0.051587,0.039144,-0.005713, -0.226254,-0.881202,0.415082,0.051601,0.039198,-0.00557, -0.281139,-0.865256,0.415082,0.050561,0.0395,-0.00557, -0.236918,-0.922736,0.304021,0.051587,0.039144,-0.005713, -0.281139,-0.865256,0.415082,0.050561,0.0395,-0.00557, -0.29439,-0.906039,0.304021,0.050544,0.039447,-0.005713, -0.178512,-0.935791,0.304021,0.052646,0.038907,-0.005713, -0.170477,-0.893669,0.415082,0.052657,0.038961,-0.00557, -0.226254,-0.881202,0.415082,0.051601,0.039198,-0.00557, -0.178512,-0.935791,0.304021,0.052646,0.038907,-0.005713, -0.226254,-0.881202,0.415082,0.051601,0.039198,-0.00557, -0.236918,-0.922736,0.304021,0.051587,0.039144,-0.005713, -0.119401,-0.945153,0.304021,0.053719,0.038737,-0.005713, -0.114026,-0.90261,0.415082,0.053726,0.038792,-0.00557, -0.170477,-0.893669,0.415082,0.052657,0.038961,-0.00557, -0.119401,-0.945153,0.304021,0.053719,0.038737,-0.005713, -0.170477,-0.893669,0.415082,0.052657,0.038961,-0.00557, -0.178512,-0.935791,0.304021,0.052646,0.038907,-0.005713, -0.059818,-0.950786,0.304021,0.0548,0.038635,-0.005713, -0.057126,-0.907989,0.415082,0.054803,0.03869,-0.00557, -0.114026,-0.90261,0.415082,0.053726,0.038792,-0.00557, -0.059818,-0.950786,0.304021,0.0548,0.038635,-0.005713, -0.114026,-0.90261,0.415082,0.053726,0.038792,-0.00557, -0.119401,-0.945153,0.304021,0.053719,0.038737,-0.005713, 0,-0.952665,0.304021,0.055885,0.038601,-0.005713, 0,-0.909784,0.415082,0.055885,0.038656,-0.00557, -0.057126,-0.907989,0.415082,0.054803,0.03869,-0.00557, 0,-0.952665,0.304021,0.055885,0.038601,-0.005713, -0.057126,-0.907989,0.415082,0.054803,0.03869,-0.00557, -0.059818,-0.950786,0.304021,0.0548,0.038635,-0.005713, 0.059818,-0.950786,0.304021,0.056971,0.038635,-0.005713, 0.057126,-0.907989,0.415082,0.056967,0.03869,-0.00557, 0,-0.909784,0.415082,0.055885,0.038656,-0.00557, 0.059818,-0.950786,0.304021,0.056971,0.038635,-0.005713, 0,-0.909784,0.415082,0.055885,0.038656,-0.00557, 0,-0.952665,0.304021,0.055885,0.038601,-0.005713, 0.119401,-0.945153,0.304021,0.058052,0.038737,-0.005713, 0.114026,-0.90261,0.415082,0.058045,0.038792,-0.00557, 0.057126,-0.907989,0.415082,0.056967,0.03869,-0.00557, 0.119401,-0.945153,0.304021,0.058052,0.038737,-0.005713, 0.057126,-0.907989,0.415082,0.056967,0.03869,-0.00557, 0.059818,-0.950786,0.304021,0.056971,0.038635,-0.005713, 0.178512,-0.935791,0.304021,0.059124,0.038907,-0.005713, 0.170477,-0.893669,0.415082,0.059114,0.038961,-0.00557, 0.114026,-0.90261,0.415082,0.058045,0.038792,-0.00557, 0.178512,-0.935791,0.304021,0.059124,0.038907,-0.005713, 0.114026,-0.90261,0.415082,0.058045,0.038792,-0.00557, 0.119401,-0.945153,0.304021,0.058052,0.038737,-0.005713, 0.236918,-0.922736,0.304021,0.060184,0.039144,-0.005713, 0.226254,-0.881202,0.415082,0.06017,0.039198,-0.00557, 0.170477,-0.893669,0.415082,0.059114,0.038961,-0.00557, 0.236918,-0.922736,0.304021,0.060184,0.039144,-0.005713, 0.170477,-0.893669,0.415082,0.059114,0.038961,-0.00557, 0.178512,-0.935791,0.304021,0.059124,0.038907,-0.005713, 0.29439,-0.906039,0.304021,0.061226,0.039447,-0.005713, 0.281139,-0.865256,0.415082,0.061209,0.0395,-0.00557, 0.226254,-0.881202,0.415082,0.06017,0.039198,-0.00557, 0.29439,-0.906039,0.304021,0.061226,0.039447,-0.005713, 0.226254,-0.881202,0.415082,0.06017,0.039198,-0.00557, 0.236918,-0.922736,0.304021,0.060184,0.039144,-0.005713, 0.3507,-0.885766,0.304021,0.062248,0.039815,-0.005713, 0.334914,-0.845896,0.415082,0.062228,0.039866,-0.00557, 0.281139,-0.865256,0.415082,0.061209,0.0395,-0.00557, 0.3507,-0.885766,0.304021,0.062248,0.039815,-0.005713, 0.281139,-0.865256,0.415082,0.061209,0.0395,-0.00557, 0.29439,-0.906039,0.304021,0.061226,0.039447,-0.005713, 0.405625,-0.861997,0.304021,0.063245,0.040246,-0.005713, 0.387367,-0.823197,0.415082,0.063221,0.040296,-0.00557, 0.334914,-0.845896,0.415082,0.062228,0.039866,-0.00557, 0.405625,-0.861997,0.304021,0.063245,0.040246,-0.005713, 0.334914,-0.845896,0.415082,0.062228,0.039866,-0.00557, 0.3507,-0.885766,0.304021,0.062248,0.039815,-0.005713, 0.45895,-0.834827,0.304021,0.064212,0.040739,-0.005713, 0.438292,-0.79725,0.415082,0.064185,0.040787,-0.00557, 0.387367,-0.823197,0.415082,0.063221,0.040296,-0.00557, 0.45895,-0.834827,0.304021,0.064212,0.040739,-0.005713, 0.387367,-0.823197,0.415082,0.063221,0.040296,-0.00557, 0.405625,-0.861997,0.304021,0.063245,0.040246,-0.005713, 0.510464,-0.804362,0.304021,0.065147,0.041292,-0.005713, 0.487487,-0.768156,0.415082,0.065117,0.041338,-0.00557, 0.438292,-0.79725,0.415082,0.064185,0.040787,-0.00557, 0.510464,-0.804362,0.304021,0.065147,0.041292,-0.005713, 0.438292,-0.79725,0.415082,0.064185,0.040787,-0.00557, 0.45895,-0.834827,0.304021,0.064212,0.040739,-0.005713, 0.559963,-0.770723,0.304021,0.066045,0.041902,-0.005713, 0.534758,-0.736031,0.415082,0.066012,0.041947,-0.00557, 0.487487,-0.768156,0.415082,0.065117,0.041338,-0.00557, 0.559963,-0.770723,0.304021,0.066045,0.041902,-0.005713, 0.487487,-0.768156,0.415082,0.065117,0.041338,-0.00557, 0.510464,-0.804362,0.304021,0.065147,0.041292,-0.005713, 0.607252,-0.734041,0.304021,0.066903,0.042568,-0.005713, 0.579918,-0.701001,0.415082,0.066868,0.04261,-0.00557, 0.534758,-0.736031,0.415082,0.066012,0.041947,-0.00557, 0.607252,-0.734041,0.304021,0.066903,0.042568,-0.005713, 0.534758,-0.736031,0.415082,0.066012,0.041947,-0.00557, 0.559963,-0.770723,0.304021,0.066045,0.041902,-0.005713, 0.652144,-0.694463,0.304021,0.067717,0.043286,-0.005713, 0.62279,-0.663204,0.415082,0.067679,0.043326,-0.00557, 0.579918,-0.701001,0.415082,0.066868,0.04261,-0.00557, 0.652144,-0.694463,0.304021,0.067717,0.043286,-0.005713, 0.579918,-0.701001,0.415082,0.066868,0.04261,-0.00557, 0.607252,-0.734041,0.304021,0.066903,0.042568,-0.005713, 0.694463,-0.652144,0.304021,0.068485,0.044053,-0.005713, 0.663204,-0.62279,0.415082,0.068445,0.044091,-0.00557, 0.62279,-0.663204,0.415082,0.067679,0.043326,-0.00557, 0.694463,-0.652144,0.304021,0.068485,0.044053,-0.005713, 0.62279,-0.663204,0.415082,0.067679,0.043326,-0.00557, 0.652144,-0.694463,0.304021,0.067717,0.043286,-0.005713, 0.734041,-0.607252,0.304021,0.069203,0.044868,-0.005713, 0.701001,-0.579918,0.415082,0.069161,0.044903,-0.00557, 0.663204,-0.62279,0.415082,0.068445,0.044091,-0.00557, 0.734041,-0.607252,0.304021,0.069203,0.044868,-0.005713, 0.663204,-0.62279,0.415082,0.068445,0.044091,-0.00557, 0.694463,-0.652144,0.304021,0.068485,0.044053,-0.005713, 0.770723,-0.559963,0.304021,0.069869,0.045726,-0.005713, 0.736031,-0.534758,0.415082,0.069824,0.045758,-0.00557, 0.701001,-0.579918,0.415082,0.069161,0.044903,-0.00557, 0.770723,-0.559963,0.304021,0.069869,0.045726,-0.005713, 0.701001,-0.579918,0.415082,0.069161,0.044903,-0.00557, 0.734041,-0.607252,0.304021,0.069203,0.044868,-0.005713, 0.804362,-0.510464,0.304021,0.070479,0.046624,-0.005713, 0.768156,-0.487487,0.415082,0.070432,0.046653,-0.00557, 0.736031,-0.534758,0.415082,0.069824,0.045758,-0.00557, 0.804362,-0.510464,0.304021,0.070479,0.046624,-0.005713, 0.736031,-0.534758,0.415082,0.069824,0.045758,-0.00557, 0.770723,-0.559963,0.304021,0.069869,0.045726,-0.005713, 0.834827,-0.45895,0.304021,0.071032,0.047559,-0.005713, 0.79725,-0.438292,0.415082,0.070983,0.047585,-0.00557, 0.768156,-0.487487,0.415082,0.070432,0.046653,-0.00557, 0.834827,-0.45895,0.304021,0.071032,0.047559,-0.005713, 0.768156,-0.487487,0.415082,0.070432,0.046653,-0.00557, 0.804362,-0.510464,0.304021,0.070479,0.046624,-0.005713, 0.861997,-0.405625,0.304021,0.071525,0.048526,-0.005713, 0.823197,-0.387367,0.415082,0.071475,0.048549,-0.00557, 0.79725,-0.438292,0.415082,0.070983,0.047585,-0.00557, 0.861997,-0.405625,0.304021,0.071525,0.048526,-0.005713, 0.79725,-0.438292,0.415082,0.070983,0.047585,-0.00557, 0.834827,-0.45895,0.304021,0.071032,0.047559,-0.005713, 0.885766,-0.3507,0.304021,0.071956,0.049522,-0.005713, 0.845896,-0.334914,0.415082,0.071905,0.049543,-0.00557, 0.823197,-0.387367,0.415082,0.071475,0.048549,-0.00557, 0.885766,-0.3507,0.304021,0.071956,0.049522,-0.005713, 0.823197,-0.387367,0.415082,0.071475,0.048549,-0.00557, 0.861997,-0.405625,0.304021,0.071525,0.048526,-0.005713, 0.906039,-0.29439,0.304021,0.072324,0.050544,-0.005713, 0.865256,-0.281139,0.415082,0.072271,0.050561,-0.00557, 0.845896,-0.334914,0.415082,0.071905,0.049543,-0.00557, 0.906039,-0.29439,0.304021,0.072324,0.050544,-0.005713, 0.845896,-0.334914,0.415082,0.071905,0.049543,-0.00557, 0.885766,-0.3507,0.304021,0.071956,0.049522,-0.005713, 0.922736,-0.236918,0.304021,0.072627,0.051587,-0.005713, 0.881202,-0.226254,0.415082,0.072573,0.051601,-0.00557, 0.865256,-0.281139,0.415082,0.072271,0.050561,-0.00557, 0.922736,-0.236918,0.304021,0.072627,0.051587,-0.005713, 0.865256,-0.281139,0.415082,0.072271,0.050561,-0.00557, 0.906039,-0.29439,0.304021,0.072324,0.050544,-0.005713, 0.935791,-0.178512,0.304021,0.072863,0.052646,-0.005713, 0.893669,-0.170477,0.415082,0.072809,0.052657,-0.00557, 0.881202,-0.226254,0.415082,0.072573,0.051601,-0.00557, 0.935791,-0.178512,0.304021,0.072863,0.052646,-0.005713, 0.881202,-0.226254,0.415082,0.072573,0.051601,-0.00557, 0.922736,-0.236918,0.304021,0.072627,0.051587,-0.005713, 0.945153,-0.119401,0.304021,0.073033,0.053719,-0.005713, 0.90261,-0.114026,0.415082,0.072978,0.053726,-0.00557, 0.893669,-0.170477,0.415082,0.072809,0.052657,-0.00557, 0.945153,-0.119401,0.304021,0.073033,0.053719,-0.005713, 0.893669,-0.170477,0.415082,0.072809,0.052657,-0.00557, 0.935791,-0.178512,0.304021,0.072863,0.052646,-0.005713, 0.950786,-0.059818,0.304021,0.073135,0.0548,-0.005713, 0.907989,-0.057126,0.415082,0.07308,0.054803,-0.00557, 0.90261,-0.114026,0.415082,0.072978,0.053726,-0.00557, 0.950786,-0.059818,0.304021,0.073135,0.0548,-0.005713, 0.90261,-0.114026,0.415082,0.072978,0.053726,-0.00557, 0.945153,-0.119401,0.304021,0.073033,0.053719,-0.005713, 0.952665,0,0.304021,0.073169,0.055885,-0.005713, 0.909784,0,0.415082,0.073114,0.055885,-0.00557, 0.907989,-0.057126,0.415082,0.07308,0.054803,-0.00557, 0.952665,0,0.304021,0.073169,0.055885,-0.005713, 0.907989,-0.057126,0.415082,0.07308,0.054803,-0.00557, 0.950786,-0.059818,0.304021,0.073135,0.0548,-0.005713, 0.950786,0.059818,0.304021,0.073135,0.056971,-0.005713, 0.907989,0.057126,0.415082,0.07308,0.056967,-0.00557, 0.909784,0,0.415082,0.073114,0.055885,-0.00557, 0.950786,0.059818,0.304021,0.073135,0.056971,-0.005713, 0.909784,0,0.415082,0.073114,0.055885,-0.00557, 0.952665,0,0.304021,0.073169,0.055885,-0.005713, 0.945153,0.119401,0.304021,0.073033,0.058052,-0.005713, 0.90261,0.114026,0.415082,0.072978,0.058045,-0.00557, 0.907989,0.057126,0.415082,0.07308,0.056967,-0.00557, 0.945153,0.119401,0.304021,0.073033,0.058052,-0.005713, 0.907989,0.057126,0.415082,0.07308,0.056967,-0.00557, 0.950786,0.059818,0.304021,0.073135,0.056971,-0.005713, 0.935791,0.178512,0.304021,0.072863,0.059124,-0.005713, 0.893669,0.170477,0.415082,0.072809,0.059114,-0.00557, 0.90261,0.114026,0.415082,0.072978,0.058045,-0.00557, 0.935791,0.178512,0.304021,0.072863,0.059124,-0.005713, 0.90261,0.114026,0.415082,0.072978,0.058045,-0.00557, 0.945153,0.119401,0.304021,0.073033,0.058052,-0.005713, 0.922736,0.236918,0.304021,0.072627,0.060184,-0.005713, 0.881202,0.226254,0.415082,0.072573,0.06017,-0.00557, 0.893669,0.170477,0.415082,0.072809,0.059114,-0.00557, 0.922736,0.236918,0.304021,0.072627,0.060184,-0.005713, 0.893669,0.170477,0.415082,0.072809,0.059114,-0.00557, 0.935791,0.178512,0.304021,0.072863,0.059124,-0.005713, 0.906039,0.29439,0.304021,0.072324,0.061226,-0.005713, 0.865256,0.281139,0.415082,0.072271,0.061209,-0.00557, 0.881202,0.226254,0.415082,0.072573,0.06017,-0.00557, 0.906039,0.29439,0.304021,0.072324,0.061226,-0.005713, 0.881202,0.226254,0.415082,0.072573,0.06017,-0.00557, 0.922736,0.236918,0.304021,0.072627,0.060184,-0.005713, 0.885766,0.3507,0.304021,0.071956,0.062248,-0.005713, 0.845896,0.334914,0.415082,0.071905,0.062228,-0.00557, 0.865256,0.281139,0.415082,0.072271,0.061209,-0.00557, 0.885766,0.3507,0.304021,0.071956,0.062248,-0.005713, 0.865256,0.281139,0.415082,0.072271,0.061209,-0.00557, 0.906039,0.29439,0.304021,0.072324,0.061226,-0.005713, 0.861997,0.405625,0.304021,0.071525,0.063245,-0.005713, 0.823197,0.387367,0.415082,0.071475,0.063221,-0.00557, 0.845896,0.334914,0.415082,0.071905,0.062228,-0.00557, 0.861997,0.405625,0.304021,0.071525,0.063245,-0.005713, 0.845896,0.334914,0.415082,0.071905,0.062228,-0.00557, 0.885766,0.3507,0.304021,0.071956,0.062248,-0.005713, 0.834827,0.45895,0.304021,0.071032,0.064212,-0.005713, 0.79725,0.438292,0.415082,0.070983,0.064185,-0.00557, 0.823197,0.387367,0.415082,0.071475,0.063221,-0.00557, 0.834827,0.45895,0.304021,0.071032,0.064212,-0.005713, 0.823197,0.387367,0.415082,0.071475,0.063221,-0.00557, 0.861997,0.405625,0.304021,0.071525,0.063245,-0.005713, 0.804362,0.510464,0.304021,0.070479,0.065147,-0.005713, 0.768156,0.487487,0.415082,0.070432,0.065117,-0.00557, 0.79725,0.438292,0.415082,0.070983,0.064185,-0.00557, 0.804362,0.510464,0.304021,0.070479,0.065147,-0.005713, 0.79725,0.438292,0.415082,0.070983,0.064185,-0.00557, 0.834827,0.45895,0.304021,0.071032,0.064212,-0.005713, 0.770723,0.559963,0.304021,0.069869,0.066045,-0.005713, 0.736031,0.534758,0.415082,0.069824,0.066012,-0.00557, 0.768156,0.487487,0.415082,0.070432,0.065117,-0.00557, 0.770723,0.559963,0.304021,0.069869,0.066045,-0.005713, 0.768156,0.487487,0.415082,0.070432,0.065117,-0.00557, 0.804362,0.510464,0.304021,0.070479,0.065147,-0.005713, 0.734041,0.607252,0.304021,0.069203,0.066903,-0.005713, 0.701001,0.579918,0.415082,0.069161,0.066868,-0.00557, 0.736031,0.534758,0.415082,0.069824,0.066012,-0.00557, 0.734041,0.607252,0.304021,0.069203,0.066903,-0.005713, 0.736031,0.534758,0.415082,0.069824,0.066012,-0.00557, 0.770723,0.559963,0.304021,0.069869,0.066045,-0.005713, 0.694463,0.652144,0.304021,0.068485,0.067717,-0.005713, 0.663204,0.62279,0.415082,0.068445,0.067679,-0.00557, 0.701001,0.579918,0.415082,0.069161,0.066868,-0.00557, 0.694463,0.652144,0.304021,0.068485,0.067717,-0.005713, 0.701001,0.579918,0.415082,0.069161,0.066868,-0.00557, 0.734041,0.607252,0.304021,0.069203,0.066903,-0.005713, 0.652144,0.694463,0.304021,0.067717,0.068485,-0.005713, 0.62279,0.663204,0.415082,0.067679,0.068445,-0.00557, 0.663204,0.62279,0.415082,0.068445,0.067679,-0.00557, 0.652144,0.694463,0.304021,0.067717,0.068485,-0.005713, 0.663204,0.62279,0.415082,0.068445,0.067679,-0.00557, 0.694463,0.652144,0.304021,0.068485,0.067717,-0.005713, 0.607252,0.734041,0.304021,0.066903,0.069203,-0.005713, 0.579918,0.701001,0.415082,0.066868,0.069161,-0.00557, 0.62279,0.663204,0.415082,0.067679,0.068445,-0.00557, 0.607252,0.734041,0.304021,0.066903,0.069203,-0.005713, 0.62279,0.663204,0.415082,0.067679,0.068445,-0.00557, 0.652144,0.694463,0.304021,0.067717,0.068485,-0.005713, 0.559963,0.770723,0.304021,0.066045,0.069869,-0.005713, 0.534758,0.736031,0.415082,0.066012,0.069824,-0.00557, 0.579918,0.701001,0.415082,0.066868,0.069161,-0.00557, 0.559963,0.770723,0.304021,0.066045,0.069869,-0.005713, 0.579918,0.701001,0.415082,0.066868,0.069161,-0.00557, 0.607252,0.734041,0.304021,0.066903,0.069203,-0.005713, 0.510464,0.804362,0.304021,0.065147,0.070479,-0.005713, 0.487487,0.768156,0.415082,0.065117,0.070432,-0.00557, 0.534758,0.736031,0.415082,0.066012,0.069824,-0.00557, 0.510464,0.804362,0.304021,0.065147,0.070479,-0.005713, 0.534758,0.736031,0.415082,0.066012,0.069824,-0.00557, 0.559963,0.770723,0.304021,0.066045,0.069869,-0.005713, 0.45895,0.834827,0.304021,0.064212,0.071032,-0.005713, 0.438292,0.79725,0.415082,0.064185,0.070983,-0.00557, 0.487487,0.768156,0.415082,0.065117,0.070432,-0.00557, 0.45895,0.834827,0.304021,0.064212,0.071032,-0.005713, 0.487487,0.768156,0.415082,0.065117,0.070432,-0.00557, 0.510464,0.804362,0.304021,0.065147,0.070479,-0.005713, 0.405625,0.861997,0.304021,0.063245,0.071525,-0.005713, 0.387367,0.823197,0.415082,0.063221,0.071475,-0.00557, 0.438292,0.79725,0.415082,0.064185,0.070983,-0.00557, 0.405625,0.861997,0.304021,0.063245,0.071525,-0.005713, 0.438292,0.79725,0.415082,0.064185,0.070983,-0.00557, 0.45895,0.834827,0.304021,0.064212,0.071032,-0.005713, 0.3507,0.885766,0.304021,0.062248,0.071956,-0.005713, 0.334914,0.845896,0.415082,0.062228,0.071905,-0.00557, 0.387367,0.823197,0.415082,0.063221,0.071475,-0.00557, 0.3507,0.885766,0.304021,0.062248,0.071956,-0.005713, 0.387367,0.823197,0.415082,0.063221,0.071475,-0.00557, 0.405625,0.861997,0.304021,0.063245,0.071525,-0.005713, 0.29439,0.906039,0.304021,0.061226,0.072324,-0.005713, 0.281139,0.865256,0.415082,0.061209,0.072271,-0.00557, 0.334914,0.845896,0.415082,0.062228,0.071905,-0.00557, 0.29439,0.906039,0.304021,0.061226,0.072324,-0.005713, 0.334914,0.845896,0.415082,0.062228,0.071905,-0.00557, 0.3507,0.885766,0.304021,0.062248,0.071956,-0.005713, 0.236918,0.922736,0.304021,0.060184,0.072627,-0.005713, 0.226254,0.881202,0.415082,0.06017,0.072573,-0.00557, 0.281139,0.865256,0.415082,0.061209,0.072271,-0.00557, 0.236918,0.922736,0.304021,0.060184,0.072627,-0.005713, 0.281139,0.865256,0.415082,0.061209,0.072271,-0.00557, 0.29439,0.906039,0.304021,0.061226,0.072324,-0.005713, 0.178512,0.935791,0.304021,0.059124,0.072863,-0.005713, 0.170477,0.893669,0.415082,0.059114,0.072809,-0.00557, 0.226254,0.881202,0.415082,0.06017,0.072573,-0.00557, 0.178512,0.935791,0.304021,0.059124,0.072863,-0.005713, 0.226254,0.881202,0.415082,0.06017,0.072573,-0.00557, 0.236918,0.922736,0.304021,0.060184,0.072627,-0.005713, 0.119401,0.945153,0.304021,0.058052,0.073033,-0.005713, 0.114026,0.90261,0.415082,0.058045,0.072978,-0.00557, 0.170477,0.893669,0.415082,0.059114,0.072809,-0.00557, 0.119401,0.945153,0.304021,0.058052,0.073033,-0.005713, 0.170477,0.893669,0.415082,0.059114,0.072809,-0.00557, 0.178512,0.935791,0.304021,0.059124,0.072863,-0.005713, 0.059818,0.950786,0.304021,0.056971,0.073135,-0.005713, 0.057126,0.907989,0.415082,0.056967,0.07308,-0.00557, 0.114026,0.90261,0.415082,0.058045,0.072978,-0.00557, 0.059818,0.950786,0.304021,0.056971,0.073135,-0.005713, 0.114026,0.90261,0.415082,0.058045,0.072978,-0.00557, 0.119401,0.945153,0.304021,0.058052,0.073033,-0.005713, 0,0.952665,0.304021,0.055885,0.073169,-0.005713, 0,0.909784,0.415082,0.055885,0.073114,-0.00557, 0.057126,0.907989,0.415082,0.056967,0.07308,-0.00557, 0,0.952665,0.304021,0.055885,0.073169,-0.005713, 0.057126,0.907989,0.415082,0.056967,0.07308,-0.00557, 0.059818,0.950786,0.304021,0.056971,0.073135,-0.005713, -0.059818,0.950786,0.304021,0.0548,0.073135,-0.005713, -0.057126,0.907989,0.415082,0.054803,0.07308,-0.00557, 0,0.909784,0.415082,0.055885,0.073114,-0.00557, -0.059818,0.950786,0.304021,0.0548,0.073135,-0.005713, 0,0.909784,0.415082,0.055885,0.073114,-0.00557, 0,0.952665,0.304021,0.055885,0.073169,-0.005713, -0.119401,0.945153,0.304021,0.053719,0.073033,-0.005713, -0.114026,0.90261,0.415082,0.053726,0.072978,-0.00557, -0.057126,0.907989,0.415082,0.054803,0.07308,-0.00557, -0.119401,0.945153,0.304021,0.053719,0.073033,-0.005713, -0.057126,0.907989,0.415082,0.054803,0.07308,-0.00557, -0.059818,0.950786,0.304021,0.0548,0.073135,-0.005713, -0.178512,0.935791,0.304021,0.052646,0.072863,-0.005713, -0.170477,0.893669,0.415082,0.052657,0.072809,-0.00557, -0.114026,0.90261,0.415082,0.053726,0.072978,-0.00557, -0.178512,0.935791,0.304021,0.052646,0.072863,-0.005713, -0.114026,0.90261,0.415082,0.053726,0.072978,-0.00557, -0.119401,0.945153,0.304021,0.053719,0.073033,-0.005713, -0.236918,0.922736,0.304021,0.051587,0.072627,-0.005713, -0.226254,0.881202,0.415082,0.051601,0.072573,-0.00557, -0.170477,0.893669,0.415082,0.052657,0.072809,-0.00557, -0.236918,0.922736,0.304021,0.051587,0.072627,-0.005713, -0.170477,0.893669,0.415082,0.052657,0.072809,-0.00557, -0.178512,0.935791,0.304021,0.052646,0.072863,-0.005713, -0.29439,0.906039,0.304021,0.050544,0.072324,-0.005713, -0.281139,0.865256,0.415082,0.050561,0.072271,-0.00557, -0.226254,0.881202,0.415082,0.051601,0.072573,-0.00557, -0.29439,0.906039,0.304021,0.050544,0.072324,-0.005713, -0.226254,0.881202,0.415082,0.051601,0.072573,-0.00557, -0.236918,0.922736,0.304021,0.051587,0.072627,-0.005713, -0.3507,0.885766,0.304021,0.049522,0.071956,-0.005713, -0.334914,0.845896,0.415082,0.049543,0.071905,-0.00557, -0.281139,0.865256,0.415082,0.050561,0.072271,-0.00557, -0.3507,0.885766,0.304021,0.049522,0.071956,-0.005713, -0.281139,0.865256,0.415082,0.050561,0.072271,-0.00557, -0.29439,0.906039,0.304021,0.050544,0.072324,-0.005713, -0.405625,0.861997,0.304021,0.048526,0.071525,-0.005713, -0.387367,0.823197,0.415082,0.048549,0.071475,-0.00557, -0.334914,0.845896,0.415082,0.049543,0.071905,-0.00557, -0.405625,0.861997,0.304021,0.048526,0.071525,-0.005713, -0.334914,0.845896,0.415082,0.049543,0.071905,-0.00557, -0.3507,0.885766,0.304021,0.049522,0.071956,-0.005713, -0.45895,0.834827,0.304021,0.047559,0.071032,-0.005713, -0.438292,0.79725,0.415082,0.047585,0.070983,-0.00557, -0.387367,0.823197,0.415082,0.048549,0.071475,-0.00557, -0.45895,0.834827,0.304021,0.047559,0.071032,-0.005713, -0.387367,0.823197,0.415082,0.048549,0.071475,-0.00557, -0.405625,0.861997,0.304021,0.048526,0.071525,-0.005713, -0.510464,0.804362,0.304021,0.046624,0.070479,-0.005713, -0.487487,0.768156,0.415082,0.046653,0.070432,-0.00557, -0.438292,0.79725,0.415082,0.047585,0.070983,-0.00557, -0.510464,0.804362,0.304021,0.046624,0.070479,-0.005713, -0.438292,0.79725,0.415082,0.047585,0.070983,-0.00557, -0.45895,0.834827,0.304021,0.047559,0.071032,-0.005713, -0.559963,0.770723,0.304021,0.045726,0.069869,-0.005713, -0.534758,0.736031,0.415082,0.045758,0.069824,-0.00557, -0.487487,0.768156,0.415082,0.046653,0.070432,-0.00557, -0.559963,0.770723,0.304021,0.045726,0.069869,-0.005713, -0.487487,0.768156,0.415082,0.046653,0.070432,-0.00557, -0.510464,0.804362,0.304021,0.046624,0.070479,-0.005713, -0.607252,0.734041,0.304021,0.044868,0.069203,-0.005713, -0.579918,0.701001,0.415082,0.044903,0.069161,-0.00557, -0.534758,0.736031,0.415082,0.045758,0.069824,-0.00557, -0.607252,0.734041,0.304021,0.044868,0.069203,-0.005713, -0.534758,0.736031,0.415082,0.045758,0.069824,-0.00557, -0.559963,0.770723,0.304021,0.045726,0.069869,-0.005713, -0.652144,0.694463,0.304021,0.044053,0.068485,-0.005713, -0.62279,0.663204,0.415082,0.044091,0.068445,-0.00557, -0.579918,0.701001,0.415082,0.044903,0.069161,-0.00557, -0.652144,0.694463,0.304021,0.044053,0.068485,-0.005713, -0.579918,0.701001,0.415082,0.044903,0.069161,-0.00557, -0.607252,0.734041,0.304021,0.044868,0.069203,-0.005713, -0.694463,0.652144,0.304021,0.043286,0.067717,-0.005713, -0.663204,0.62279,0.415082,0.043326,0.067679,-0.00557, -0.62279,0.663204,0.415082,0.044091,0.068445,-0.00557, -0.694463,0.652144,0.304021,0.043286,0.067717,-0.005713, -0.62279,0.663204,0.415082,0.044091,0.068445,-0.00557, -0.652144,0.694463,0.304021,0.044053,0.068485,-0.005713, -0.734041,0.607252,0.304021,0.042568,0.066903,-0.005713, -0.701001,0.579918,0.415082,0.04261,0.066868,-0.00557, -0.663204,0.62279,0.415082,0.043326,0.067679,-0.00557, -0.734041,0.607252,0.304021,0.042568,0.066903,-0.005713, -0.663204,0.62279,0.415082,0.043326,0.067679,-0.00557, -0.694463,0.652144,0.304021,0.043286,0.067717,-0.005713, -0.770723,0.559963,0.304021,0.041902,0.066045,-0.005713, -0.736031,0.534758,0.415082,0.041947,0.066012,-0.00557, -0.701001,0.579918,0.415082,0.04261,0.066868,-0.00557, -0.770723,0.559963,0.304021,0.041902,0.066045,-0.005713, -0.701001,0.579918,0.415082,0.04261,0.066868,-0.00557, -0.734041,0.607252,0.304021,0.042568,0.066903,-0.005713, -0.804362,0.510464,0.304021,0.041292,0.065147,-0.005713, -0.768156,0.487487,0.415082,0.041338,0.065117,-0.00557, -0.736031,0.534758,0.415082,0.041947,0.066012,-0.00557, -0.804362,0.510464,0.304021,0.041292,0.065147,-0.005713, -0.736031,0.534758,0.415082,0.041947,0.066012,-0.00557, -0.770723,0.559963,0.304021,0.041902,0.066045,-0.005713, -0.834827,0.45895,0.304021,0.040739,0.064212,-0.005713, -0.79725,0.438292,0.415082,0.040787,0.064185,-0.00557, -0.768156,0.487487,0.415082,0.041338,0.065117,-0.00557, -0.834827,0.45895,0.304021,0.040739,0.064212,-0.005713, -0.768156,0.487487,0.415082,0.041338,0.065117,-0.00557, -0.804362,0.510464,0.304021,0.041292,0.065147,-0.005713, -0.861997,0.405625,0.304021,0.040246,0.063245,-0.005713, -0.823197,0.387367,0.415082,0.040296,0.063221,-0.00557, -0.79725,0.438292,0.415082,0.040787,0.064185,-0.00557, -0.861997,0.405625,0.304021,0.040246,0.063245,-0.005713, -0.79725,0.438292,0.415082,0.040787,0.064185,-0.00557, -0.834827,0.45895,0.304021,0.040739,0.064212,-0.005713, -0.885766,0.3507,0.304021,0.039815,0.062248,-0.005713, -0.845896,0.334914,0.415082,0.039866,0.062228,-0.00557, -0.823197,0.387367,0.415082,0.040296,0.063221,-0.00557, -0.885766,0.3507,0.304021,0.039815,0.062248,-0.005713, -0.823197,0.387367,0.415082,0.040296,0.063221,-0.00557, -0.861997,0.405625,0.304021,0.040246,0.063245,-0.005713, -0.906039,0.29439,0.304021,0.039447,0.061226,-0.005713, -0.865256,0.281139,0.415082,0.0395,0.061209,-0.00557, -0.845896,0.334914,0.415082,0.039866,0.062228,-0.00557, -0.906039,0.29439,0.304021,0.039447,0.061226,-0.005713, -0.845896,0.334914,0.415082,0.039866,0.062228,-0.00557, -0.885766,0.3507,0.304021,0.039815,0.062248,-0.005713, -0.922736,0.236918,0.304021,0.039144,0.060184,-0.005713, -0.881202,0.226254,0.415082,0.039198,0.06017,-0.00557, -0.865256,0.281139,0.415082,0.0395,0.061209,-0.00557, -0.922736,0.236918,0.304021,0.039144,0.060184,-0.005713, -0.865256,0.281139,0.415082,0.0395,0.061209,-0.00557, -0.906039,0.29439,0.304021,0.039447,0.061226,-0.005713, -0.935791,0.178512,0.304021,0.038907,0.059124,-0.005713, -0.893669,0.170477,0.415082,0.038961,0.059114,-0.00557, -0.881202,0.226254,0.415082,0.039198,0.06017,-0.00557, -0.935791,0.178512,0.304021,0.038907,0.059124,-0.005713, -0.881202,0.226254,0.415082,0.039198,0.06017,-0.00557, -0.922736,0.236918,0.304021,0.039144,0.060184,-0.005713, -0.945153,0.119401,0.304021,0.038737,0.058052,-0.005713, -0.90261,0.114026,0.415082,0.038792,0.058045,-0.00557, -0.893669,0.170477,0.415082,0.038961,0.059114,-0.00557, -0.945153,0.119401,0.304021,0.038737,0.058052,-0.005713, -0.893669,0.170477,0.415082,0.038961,0.059114,-0.00557, -0.935791,0.178512,0.304021,0.038907,0.059124,-0.005713, -0.950786,0.059818,0.304021,0.038635,0.056971,-0.005713, -0.907989,0.057126,0.415082,0.03869,0.056967,-0.00557, -0.90261,0.114026,0.415082,0.038792,0.058045,-0.00557, -0.950786,0.059818,0.304021,0.038635,0.056971,-0.005713, -0.90261,0.114026,0.415082,0.038792,0.058045,-0.00557, -0.945153,0.119401,0.304021,0.038737,0.058052,-0.005713, -0.952665,0,0.304021,0.038601,0.055885,-0.005713, -0.909784,0,0.415082,0.038656,0.055885,-0.00557, -0.907989,0.057126,0.415082,0.03869,0.056967,-0.00557, -0.952665,0,0.304021,0.038601,0.055885,-0.005713, -0.907989,0.057126,0.415082,0.03869,0.056967,-0.00557, -0.950786,0.059818,0.304021,0.038635,0.056971,-0.005713, -0.950786,-0.059818,0.304021,0.038635,0.0548,-0.005713, -0.907989,-0.057126,0.415082,0.03869,0.054803,-0.00557, -0.909784,0,0.415082,0.038656,0.055885,-0.00557, -0.950786,-0.059818,0.304021,0.038635,0.0548,-0.005713, -0.909784,0,0.415082,0.038656,0.055885,-0.00557, -0.952665,0,0.304021,0.038601,0.055885,-0.005713, -0.945153,-0.119401,0.304021,0.038737,0.053719,-0.005713, -0.90261,-0.114026,0.415082,0.038792,0.053726,-0.00557, -0.907989,-0.057126,0.415082,0.03869,0.054803,-0.00557, -0.945153,-0.119401,0.304021,0.038737,0.053719,-0.005713, -0.907989,-0.057126,0.415082,0.03869,0.054803,-0.00557, -0.950786,-0.059818,0.304021,0.038635,0.0548,-0.005713, -0.935791,-0.178512,0.304021,0.038907,0.052646,-0.005713, -0.893669,-0.170477,0.415082,0.038961,0.052657,-0.00557, -0.90261,-0.114026,0.415082,0.038792,0.053726,-0.00557, -0.935791,-0.178512,0.304021,0.038907,0.052646,-0.005713, -0.90261,-0.114026,0.415082,0.038792,0.053726,-0.00557, -0.945153,-0.119401,0.304021,0.038737,0.053719,-0.005713, -0.893669,-0.170477,0.415082,0.038961,0.052657,-0.00557, -0.838881,-0.160025,0.52026,0.039032,0.05267,-0.005434, -0.847274,-0.107036,0.52026,0.038863,0.053735,-0.005434, -0.893669,-0.170477,0.415082,0.038961,0.052657,-0.00557, -0.847274,-0.107036,0.52026,0.038863,0.053735,-0.005434, -0.90261,-0.114026,0.415082,0.038792,0.053726,-0.00557, -0.881202,-0.226254,0.415082,0.039198,0.051601,-0.00557, -0.827178,-0.212383,0.52026,0.039267,0.051619,-0.005434, -0.838881,-0.160025,0.52026,0.039032,0.05267,-0.005434, -0.881202,-0.226254,0.415082,0.039198,0.051601,-0.00557, -0.838881,-0.160025,0.52026,0.039032,0.05267,-0.005434, -0.893669,-0.170477,0.415082,0.038961,0.052657,-0.00557, -0.865256,-0.281139,0.415082,0.0395,0.050561,-0.00557, -0.81221,-0.263903,0.52026,0.039568,0.050584,-0.005434, -0.827178,-0.212383,0.52026,0.039267,0.051619,-0.005434, -0.865256,-0.281139,0.415082,0.0395,0.050561,-0.00557, -0.827178,-0.212383,0.52026,0.039267,0.051619,-0.005434, -0.881202,-0.226254,0.415082,0.039198,0.051601,-0.00557, -0.845896,-0.334914,0.415082,0.039866,0.049543,-0.00557, -0.794037,-0.314381,0.52026,0.039933,0.049569,-0.005434, -0.81221,-0.263903,0.52026,0.039568,0.050584,-0.005434, -0.845896,-0.334914,0.415082,0.039866,0.049543,-0.00557, -0.81221,-0.263903,0.52026,0.039568,0.050584,-0.005434, -0.865256,-0.281139,0.415082,0.0395,0.050561,-0.00557, -0.823197,-0.387367,0.415082,0.040296,0.048549,-0.00557, -0.77273,-0.363619,0.52026,0.040361,0.04858,-0.005434, -0.794037,-0.314381,0.52026,0.039933,0.049569,-0.005434, -0.823197,-0.387367,0.415082,0.040296,0.048549,-0.00557, -0.794037,-0.314381,0.52026,0.039933,0.049569,-0.005434, -0.845896,-0.334914,0.415082,0.039866,0.049543,-0.00557, -0.79725,-0.438292,0.415082,0.040787,0.047585,-0.00557, -0.748373,-0.411421,0.52026,0.04085,0.04762,-0.005434, -0.77273,-0.363619,0.52026,0.040361,0.04858,-0.005434, -0.79725,-0.438292,0.415082,0.040787,0.047585,-0.00557, -0.77273,-0.363619,0.52026,0.040361,0.04858,-0.005434, -0.823197,-0.387367,0.415082,0.040296,0.048549,-0.00557, -0.768156,-0.487487,0.415082,0.041338,0.046653,-0.00557, -0.721063,-0.4576,0.52026,0.041399,0.046692,-0.005434, -0.748373,-0.411421,0.52026,0.04085,0.04762,-0.005434, -0.768156,-0.487487,0.415082,0.041338,0.046653,-0.00557, -0.748373,-0.411421,0.52026,0.04085,0.04762,-0.005434, -0.79725,-0.438292,0.415082,0.040787,0.047585,-0.00557, -0.736031,-0.534758,0.415082,0.041947,0.045758,-0.00557, -0.690907,-0.501973,0.52026,0.042005,0.045801,-0.005434, -0.721063,-0.4576,0.52026,0.041399,0.046692,-0.005434, -0.736031,-0.534758,0.415082,0.041947,0.045758,-0.00557, -0.721063,-0.4576,0.52026,0.041399,0.046692,-0.005434, -0.768156,-0.487487,0.415082,0.041338,0.046653,-0.00557, -0.701001,-0.579918,0.415082,0.04261,0.044903,-0.00557, -0.658024,-0.544365,0.52026,0.042666,0.044949,-0.005434, -0.690907,-0.501973,0.52026,0.042005,0.045801,-0.005434, -0.701001,-0.579918,0.415082,0.04261,0.044903,-0.00557, -0.690907,-0.501973,0.52026,0.042005,0.045801,-0.005434, -0.736031,-0.534758,0.415082,0.041947,0.045758,-0.00557, -0.663204,-0.62279,0.415082,0.043326,0.044091,-0.00557, -0.622545,-0.584609,0.52026,0.043378,0.04414,-0.005434, -0.658024,-0.544365,0.52026,0.042666,0.044949,-0.005434, -0.663204,-0.62279,0.415082,0.043326,0.044091,-0.00557, -0.658024,-0.544365,0.52026,0.042666,0.044949,-0.005434, -0.701001,-0.579918,0.415082,0.04261,0.044903,-0.00557, -0.62279,-0.663204,0.415082,0.044091,0.043326,-0.00557, -0.584609,-0.622545,0.52026,0.04414,0.043378,-0.005434, -0.622545,-0.584609,0.52026,0.043378,0.04414,-0.005434, -0.62279,-0.663204,0.415082,0.044091,0.043326,-0.00557, -0.622545,-0.584609,0.52026,0.043378,0.04414,-0.005434, -0.663204,-0.62279,0.415082,0.043326,0.044091,-0.00557, -0.579918,-0.701001,0.415082,0.044903,0.04261,-0.00557, -0.544365,-0.658024,0.52026,0.044949,0.042666,-0.005434, -0.584609,-0.622545,0.52026,0.04414,0.043378,-0.005434, -0.579918,-0.701001,0.415082,0.044903,0.04261,-0.00557, -0.584609,-0.622545,0.52026,0.04414,0.043378,-0.005434, -0.62279,-0.663204,0.415082,0.044091,0.043326,-0.00557, -0.534758,-0.736031,0.415082,0.045758,0.041947,-0.00557, -0.501973,-0.690907,0.52026,0.045801,0.042005,-0.005434, -0.544365,-0.658024,0.52026,0.044949,0.042666,-0.005434, -0.534758,-0.736031,0.415082,0.045758,0.041947,-0.00557, -0.544365,-0.658024,0.52026,0.044949,0.042666,-0.005434, -0.579918,-0.701001,0.415082,0.044903,0.04261,-0.00557, -0.487487,-0.768156,0.415082,0.046653,0.041338,-0.00557, -0.4576,-0.721063,0.52026,0.046692,0.041399,-0.005434, -0.501973,-0.690907,0.52026,0.045801,0.042005,-0.005434, -0.487487,-0.768156,0.415082,0.046653,0.041338,-0.00557, -0.501973,-0.690907,0.52026,0.045801,0.042005,-0.005434, -0.534758,-0.736031,0.415082,0.045758,0.041947,-0.00557, -0.438292,-0.79725,0.415082,0.047585,0.040787,-0.00557, -0.411421,-0.748373,0.52026,0.04762,0.04085,-0.005434, -0.4576,-0.721063,0.52026,0.046692,0.041399,-0.005434, -0.438292,-0.79725,0.415082,0.047585,0.040787,-0.00557, -0.4576,-0.721063,0.52026,0.046692,0.041399,-0.005434, -0.487487,-0.768156,0.415082,0.046653,0.041338,-0.00557, -0.387367,-0.823197,0.415082,0.048549,0.040296,-0.00557, -0.363619,-0.77273,0.52026,0.04858,0.040361,-0.005434, -0.411421,-0.748373,0.52026,0.04762,0.04085,-0.005434, -0.387367,-0.823197,0.415082,0.048549,0.040296,-0.00557, -0.411421,-0.748373,0.52026,0.04762,0.04085,-0.005434, -0.438292,-0.79725,0.415082,0.047585,0.040787,-0.00557, -0.334914,-0.845896,0.415082,0.049543,0.039866,-0.00557, -0.314381,-0.794037,0.52026,0.049569,0.039933,-0.005434, -0.363619,-0.77273,0.52026,0.04858,0.040361,-0.005434, -0.334914,-0.845896,0.415082,0.049543,0.039866,-0.00557, -0.363619,-0.77273,0.52026,0.04858,0.040361,-0.005434, -0.387367,-0.823197,0.415082,0.048549,0.040296,-0.00557, -0.281139,-0.865256,0.415082,0.050561,0.0395,-0.00557, -0.263903,-0.81221,0.52026,0.050584,0.039568,-0.005434, -0.314381,-0.794037,0.52026,0.049569,0.039933,-0.005434, -0.281139,-0.865256,0.415082,0.050561,0.0395,-0.00557, -0.314381,-0.794037,0.52026,0.049569,0.039933,-0.005434, -0.334914,-0.845896,0.415082,0.049543,0.039866,-0.00557, -0.226254,-0.881202,0.415082,0.051601,0.039198,-0.00557, -0.212383,-0.827178,0.52026,0.051619,0.039267,-0.005434, -0.263903,-0.81221,0.52026,0.050584,0.039568,-0.005434, -0.226254,-0.881202,0.415082,0.051601,0.039198,-0.00557, -0.263903,-0.81221,0.52026,0.050584,0.039568,-0.005434, -0.281139,-0.865256,0.415082,0.050561,0.0395,-0.00557, -0.170477,-0.893669,0.415082,0.052657,0.038961,-0.00557, -0.160025,-0.838881,0.52026,0.05267,0.039032,-0.005434, -0.212383,-0.827178,0.52026,0.051619,0.039267,-0.005434, -0.170477,-0.893669,0.415082,0.052657,0.038961,-0.00557, -0.212383,-0.827178,0.52026,0.051619,0.039267,-0.005434, -0.226254,-0.881202,0.415082,0.051601,0.039198,-0.00557, -0.114026,-0.90261,0.415082,0.053726,0.038792,-0.00557, -0.107036,-0.847274,0.52026,0.053735,0.038863,-0.005434, -0.160025,-0.838881,0.52026,0.05267,0.039032,-0.005434, -0.114026,-0.90261,0.415082,0.053726,0.038792,-0.00557, -0.160025,-0.838881,0.52026,0.05267,0.039032,-0.005434, -0.170477,-0.893669,0.415082,0.052657,0.038961,-0.00557, -0.057126,-0.907989,0.415082,0.054803,0.03869,-0.00557, -0.053624,-0.852323,0.52026,0.054808,0.038762,-0.005434, -0.107036,-0.847274,0.52026,0.053735,0.038863,-0.005434, -0.057126,-0.907989,0.415082,0.054803,0.03869,-0.00557, -0.107036,-0.847274,0.52026,0.053735,0.038863,-0.005434, -0.114026,-0.90261,0.415082,0.053726,0.038792,-0.00557, 0,-0.909784,0.415082,0.055885,0.038656,-0.00557, 0,-0.854008,0.52026,0.055885,0.038728,-0.005434, -0.053624,-0.852323,0.52026,0.054808,0.038762,-0.005434, 0,-0.909784,0.415082,0.055885,0.038656,-0.00557, -0.053624,-0.852323,0.52026,0.054808,0.038762,-0.005434, -0.057126,-0.907989,0.415082,0.054803,0.03869,-0.00557, 0.057126,-0.907989,0.415082,0.056967,0.03869,-0.00557, 0.053624,-0.852323,0.52026,0.056963,0.038762,-0.005434, 0,-0.854008,0.52026,0.055885,0.038728,-0.005434, 0.057126,-0.907989,0.415082,0.056967,0.03869,-0.00557, 0,-0.854008,0.52026,0.055885,0.038728,-0.005434, 0,-0.909784,0.415082,0.055885,0.038656,-0.00557, 0.114026,-0.90261,0.415082,0.058045,0.038792,-0.00557, 0.107036,-0.847274,0.52026,0.058036,0.038863,-0.005434, 0.053624,-0.852323,0.52026,0.056963,0.038762,-0.005434, 0.114026,-0.90261,0.415082,0.058045,0.038792,-0.00557, 0.053624,-0.852323,0.52026,0.056963,0.038762,-0.005434, 0.057126,-0.907989,0.415082,0.056967,0.03869,-0.00557, 0.170477,-0.893669,0.415082,0.059114,0.038961,-0.00557, 0.160025,-0.838881,0.52026,0.0591,0.039032,-0.005434, 0.107036,-0.847274,0.52026,0.058036,0.038863,-0.005434, 0.170477,-0.893669,0.415082,0.059114,0.038961,-0.00557, 0.107036,-0.847274,0.52026,0.058036,0.038863,-0.005434, 0.114026,-0.90261,0.415082,0.058045,0.038792,-0.00557, 0.226254,-0.881202,0.415082,0.06017,0.039198,-0.00557, 0.212383,-0.827178,0.52026,0.060152,0.039267,-0.005434, 0.160025,-0.838881,0.52026,0.0591,0.039032,-0.005434, 0.226254,-0.881202,0.415082,0.06017,0.039198,-0.00557, 0.160025,-0.838881,0.52026,0.0591,0.039032,-0.005434, 0.170477,-0.893669,0.415082,0.059114,0.038961,-0.00557, 0.281139,-0.865256,0.415082,0.061209,0.0395,-0.00557, 0.263903,-0.81221,0.52026,0.061187,0.039568,-0.005434, 0.212383,-0.827178,0.52026,0.060152,0.039267,-0.005434, 0.281139,-0.865256,0.415082,0.061209,0.0395,-0.00557, 0.212383,-0.827178,0.52026,0.060152,0.039267,-0.005434, 0.226254,-0.881202,0.415082,0.06017,0.039198,-0.00557, 0.334914,-0.845896,0.415082,0.062228,0.039866,-0.00557, 0.314381,-0.794037,0.52026,0.062201,0.039933,-0.005434, 0.263903,-0.81221,0.52026,0.061187,0.039568,-0.005434, 0.334914,-0.845896,0.415082,0.062228,0.039866,-0.00557, 0.263903,-0.81221,0.52026,0.061187,0.039568,-0.005434, 0.281139,-0.865256,0.415082,0.061209,0.0395,-0.00557, 0.387367,-0.823197,0.415082,0.063221,0.040296,-0.00557, 0.363619,-0.77273,0.52026,0.06319,0.040361,-0.005434, 0.314381,-0.794037,0.52026,0.062201,0.039933,-0.005434, 0.387367,-0.823197,0.415082,0.063221,0.040296,-0.00557, 0.314381,-0.794037,0.52026,0.062201,0.039933,-0.005434, 0.334914,-0.845896,0.415082,0.062228,0.039866,-0.00557, 0.438292,-0.79725,0.415082,0.064185,0.040787,-0.00557, 0.411421,-0.748373,0.52026,0.064151,0.04085,-0.005434, 0.363619,-0.77273,0.52026,0.06319,0.040361,-0.005434, 0.438292,-0.79725,0.415082,0.064185,0.040787,-0.00557, 0.363619,-0.77273,0.52026,0.06319,0.040361,-0.005434, 0.387367,-0.823197,0.415082,0.063221,0.040296,-0.00557, 0.487487,-0.768156,0.415082,0.065117,0.041338,-0.00557, 0.4576,-0.721063,0.52026,0.065079,0.041399,-0.005434, 0.411421,-0.748373,0.52026,0.064151,0.04085,-0.005434, 0.487487,-0.768156,0.415082,0.065117,0.041338,-0.00557, 0.411421,-0.748373,0.52026,0.064151,0.04085,-0.005434, 0.438292,-0.79725,0.415082,0.064185,0.040787,-0.00557, 0.534758,-0.736031,0.415082,0.066012,0.041947,-0.00557, 0.501973,-0.690907,0.52026,0.06597,0.042005,-0.005434, 0.4576,-0.721063,0.52026,0.065079,0.041399,-0.005434, 0.534758,-0.736031,0.415082,0.066012,0.041947,-0.00557, 0.4576,-0.721063,0.52026,0.065079,0.041399,-0.005434, 0.487487,-0.768156,0.415082,0.065117,0.041338,-0.00557, 0.579918,-0.701001,0.415082,0.066868,0.04261,-0.00557, 0.544365,-0.658024,0.52026,0.066822,0.042666,-0.005434, 0.501973,-0.690907,0.52026,0.06597,0.042005,-0.005434, 0.579918,-0.701001,0.415082,0.066868,0.04261,-0.00557, 0.501973,-0.690907,0.52026,0.06597,0.042005,-0.005434, 0.534758,-0.736031,0.415082,0.066012,0.041947,-0.00557, 0.62279,-0.663204,0.415082,0.067679,0.043326,-0.00557, 0.584609,-0.622545,0.52026,0.06763,0.043378,-0.005434, 0.544365,-0.658024,0.52026,0.066822,0.042666,-0.005434, 0.62279,-0.663204,0.415082,0.067679,0.043326,-0.00557, 0.544365,-0.658024,0.52026,0.066822,0.042666,-0.005434, 0.579918,-0.701001,0.415082,0.066868,0.04261,-0.00557, 0.663204,-0.62279,0.415082,0.068445,0.044091,-0.00557, 0.622545,-0.584609,0.52026,0.068392,0.04414,-0.005434, 0.584609,-0.622545,0.52026,0.06763,0.043378,-0.005434, 0.663204,-0.62279,0.415082,0.068445,0.044091,-0.00557, 0.584609,-0.622545,0.52026,0.06763,0.043378,-0.005434, 0.62279,-0.663204,0.415082,0.067679,0.043326,-0.00557, 0.701001,-0.579918,0.415082,0.069161,0.044903,-0.00557, 0.658024,-0.544365,0.52026,0.069105,0.044949,-0.005434, 0.622545,-0.584609,0.52026,0.068392,0.04414,-0.005434, 0.701001,-0.579918,0.415082,0.069161,0.044903,-0.00557, 0.622545,-0.584609,0.52026,0.068392,0.04414,-0.005434, 0.663204,-0.62279,0.415082,0.068445,0.044091,-0.00557, 0.736031,-0.534758,0.415082,0.069824,0.045758,-0.00557, 0.690907,-0.501973,0.52026,0.069766,0.045801,-0.005434, 0.658024,-0.544365,0.52026,0.069105,0.044949,-0.005434, 0.736031,-0.534758,0.415082,0.069824,0.045758,-0.00557, 0.658024,-0.544365,0.52026,0.069105,0.044949,-0.005434, 0.701001,-0.579918,0.415082,0.069161,0.044903,-0.00557, 0.768156,-0.487487,0.415082,0.070432,0.046653,-0.00557, 0.721063,-0.4576,0.52026,0.070372,0.046692,-0.005434, 0.690907,-0.501973,0.52026,0.069766,0.045801,-0.005434, 0.768156,-0.487487,0.415082,0.070432,0.046653,-0.00557, 0.690907,-0.501973,0.52026,0.069766,0.045801,-0.005434, 0.736031,-0.534758,0.415082,0.069824,0.045758,-0.00557, 0.79725,-0.438292,0.415082,0.070983,0.047585,-0.00557, 0.748373,-0.411421,0.52026,0.07092,0.04762,-0.005434, 0.721063,-0.4576,0.52026,0.070372,0.046692,-0.005434, 0.79725,-0.438292,0.415082,0.070983,0.047585,-0.00557, 0.721063,-0.4576,0.52026,0.070372,0.046692,-0.005434, 0.768156,-0.487487,0.415082,0.070432,0.046653,-0.00557, 0.823197,-0.387367,0.415082,0.071475,0.048549,-0.00557, 0.77273,-0.363619,0.52026,0.07141,0.04858,-0.005434, 0.748373,-0.411421,0.52026,0.07092,0.04762,-0.005434, 0.823197,-0.387367,0.415082,0.071475,0.048549,-0.00557, 0.748373,-0.411421,0.52026,0.07092,0.04762,-0.005434, 0.79725,-0.438292,0.415082,0.070983,0.047585,-0.00557, 0.845896,-0.334914,0.415082,0.071905,0.049543,-0.00557, 0.794037,-0.314381,0.52026,0.071838,0.049569,-0.005434, 0.77273,-0.363619,0.52026,0.07141,0.04858,-0.005434, 0.845896,-0.334914,0.415082,0.071905,0.049543,-0.00557, 0.77273,-0.363619,0.52026,0.07141,0.04858,-0.005434, 0.823197,-0.387367,0.415082,0.071475,0.048549,-0.00557, 0.865256,-0.281139,0.415082,0.072271,0.050561,-0.00557, 0.81221,-0.263903,0.52026,0.072203,0.050584,-0.005434, 0.794037,-0.314381,0.52026,0.071838,0.049569,-0.005434, 0.865256,-0.281139,0.415082,0.072271,0.050561,-0.00557, 0.794037,-0.314381,0.52026,0.071838,0.049569,-0.005434, 0.845896,-0.334914,0.415082,0.071905,0.049543,-0.00557, 0.881202,-0.226254,0.415082,0.072573,0.051601,-0.00557, 0.827178,-0.212383,0.52026,0.072503,0.051619,-0.005434, 0.81221,-0.263903,0.52026,0.072203,0.050584,-0.005434, 0.881202,-0.226254,0.415082,0.072573,0.051601,-0.00557, 0.81221,-0.263903,0.52026,0.072203,0.050584,-0.005434, 0.865256,-0.281139,0.415082,0.072271,0.050561,-0.00557, 0.893669,-0.170477,0.415082,0.072809,0.052657,-0.00557, 0.838881,-0.160025,0.52026,0.072739,0.05267,-0.005434, 0.827178,-0.212383,0.52026,0.072503,0.051619,-0.005434, 0.893669,-0.170477,0.415082,0.072809,0.052657,-0.00557, 0.827178,-0.212383,0.52026,0.072503,0.051619,-0.005434, 0.881202,-0.226254,0.415082,0.072573,0.051601,-0.00557, 0.90261,-0.114026,0.415082,0.072978,0.053726,-0.00557, 0.847274,-0.107036,0.52026,0.072907,0.053735,-0.005434, 0.838881,-0.160025,0.52026,0.072739,0.05267,-0.005434, 0.90261,-0.114026,0.415082,0.072978,0.053726,-0.00557, 0.838881,-0.160025,0.52026,0.072739,0.05267,-0.005434, 0.893669,-0.170477,0.415082,0.072809,0.052657,-0.00557, 0.907989,-0.057126,0.415082,0.07308,0.054803,-0.00557, 0.852323,-0.053624,0.52026,0.073009,0.054808,-0.005434, 0.847274,-0.107036,0.52026,0.072907,0.053735,-0.005434, 0.907989,-0.057126,0.415082,0.07308,0.054803,-0.00557, 0.847274,-0.107036,0.52026,0.072907,0.053735,-0.005434, 0.90261,-0.114026,0.415082,0.072978,0.053726,-0.00557, 0.909784,0,0.415082,0.073114,0.055885,-0.00557, 0.854008,0,0.52026,0.073042,0.055885,-0.005434, 0.852323,-0.053624,0.52026,0.073009,0.054808,-0.005434, 0.909784,0,0.415082,0.073114,0.055885,-0.00557, 0.852323,-0.053624,0.52026,0.073009,0.054808,-0.005434, 0.907989,-0.057126,0.415082,0.07308,0.054803,-0.00557, 0.907989,0.057126,0.415082,0.07308,0.056967,-0.00557, 0.852323,0.053624,0.52026,0.073009,0.056963,-0.005434, 0.854008,0,0.52026,0.073042,0.055885,-0.005434, 0.907989,0.057126,0.415082,0.07308,0.056967,-0.00557, 0.854008,0,0.52026,0.073042,0.055885,-0.005434, 0.909784,0,0.415082,0.073114,0.055885,-0.00557, 0.90261,0.114026,0.415082,0.072978,0.058045,-0.00557, 0.847274,0.107036,0.52026,0.072907,0.058036,-0.005434, 0.852323,0.053624,0.52026,0.073009,0.056963,-0.005434, 0.90261,0.114026,0.415082,0.072978,0.058045,-0.00557, 0.852323,0.053624,0.52026,0.073009,0.056963,-0.005434, 0.907989,0.057126,0.415082,0.07308,0.056967,-0.00557, 0.893669,0.170477,0.415082,0.072809,0.059114,-0.00557, 0.838881,0.160025,0.52026,0.072739,0.0591,-0.005434, 0.847274,0.107036,0.52026,0.072907,0.058036,-0.005434, 0.893669,0.170477,0.415082,0.072809,0.059114,-0.00557, 0.847274,0.107036,0.52026,0.072907,0.058036,-0.005434, 0.90261,0.114026,0.415082,0.072978,0.058045,-0.00557, 0.881202,0.226254,0.415082,0.072573,0.06017,-0.00557, 0.827178,0.212383,0.52026,0.072503,0.060152,-0.005434, 0.838881,0.160025,0.52026,0.072739,0.0591,-0.005434, 0.881202,0.226254,0.415082,0.072573,0.06017,-0.00557, 0.838881,0.160025,0.52026,0.072739,0.0591,-0.005434, 0.893669,0.170477,0.415082,0.072809,0.059114,-0.00557, 0.865256,0.281139,0.415082,0.072271,0.061209,-0.00557, 0.81221,0.263903,0.52026,0.072203,0.061187,-0.005434, 0.827178,0.212383,0.52026,0.072503,0.060152,-0.005434, 0.865256,0.281139,0.415082,0.072271,0.061209,-0.00557, 0.827178,0.212383,0.52026,0.072503,0.060152,-0.005434, 0.881202,0.226254,0.415082,0.072573,0.06017,-0.00557, 0.845896,0.334914,0.415082,0.071905,0.062228,-0.00557, 0.794037,0.314381,0.52026,0.071838,0.062201,-0.005434, 0.81221,0.263903,0.52026,0.072203,0.061187,-0.005434, 0.845896,0.334914,0.415082,0.071905,0.062228,-0.00557, 0.81221,0.263903,0.52026,0.072203,0.061187,-0.005434, 0.865256,0.281139,0.415082,0.072271,0.061209,-0.00557, 0.823197,0.387367,0.415082,0.071475,0.063221,-0.00557, 0.77273,0.363619,0.52026,0.07141,0.06319,-0.005434, 0.794037,0.314381,0.52026,0.071838,0.062201,-0.005434, 0.823197,0.387367,0.415082,0.071475,0.063221,-0.00557, 0.794037,0.314381,0.52026,0.071838,0.062201,-0.005434, 0.845896,0.334914,0.415082,0.071905,0.062228,-0.00557, 0.79725,0.438292,0.415082,0.070983,0.064185,-0.00557, 0.748373,0.411421,0.52026,0.07092,0.064151,-0.005434, 0.77273,0.363619,0.52026,0.07141,0.06319,-0.005434, 0.79725,0.438292,0.415082,0.070983,0.064185,-0.00557, 0.77273,0.363619,0.52026,0.07141,0.06319,-0.005434, 0.823197,0.387367,0.415082,0.071475,0.063221,-0.00557, 0.768156,0.487487,0.415082,0.070432,0.065117,-0.00557, 0.721063,0.4576,0.52026,0.070372,0.065079,-0.005434, 0.748373,0.411421,0.52026,0.07092,0.064151,-0.005434, 0.768156,0.487487,0.415082,0.070432,0.065117,-0.00557, 0.748373,0.411421,0.52026,0.07092,0.064151,-0.005434, 0.79725,0.438292,0.415082,0.070983,0.064185,-0.00557, 0.736031,0.534758,0.415082,0.069824,0.066012,-0.00557, 0.690907,0.501973,0.52026,0.069766,0.06597,-0.005434, 0.721063,0.4576,0.52026,0.070372,0.065079,-0.005434, 0.736031,0.534758,0.415082,0.069824,0.066012,-0.00557, 0.721063,0.4576,0.52026,0.070372,0.065079,-0.005434, 0.768156,0.487487,0.415082,0.070432,0.065117,-0.00557, 0.701001,0.579918,0.415082,0.069161,0.066868,-0.00557, 0.658024,0.544365,0.52026,0.069105,0.066822,-0.005434, 0.690907,0.501973,0.52026,0.069766,0.06597,-0.005434, 0.701001,0.579918,0.415082,0.069161,0.066868,-0.00557, 0.690907,0.501973,0.52026,0.069766,0.06597,-0.005434, 0.736031,0.534758,0.415082,0.069824,0.066012,-0.00557, 0.663204,0.62279,0.415082,0.068445,0.067679,-0.00557, 0.622545,0.584609,0.52026,0.068392,0.06763,-0.005434, 0.658024,0.544365,0.52026,0.069105,0.066822,-0.005434, 0.663204,0.62279,0.415082,0.068445,0.067679,-0.00557, 0.658024,0.544365,0.52026,0.069105,0.066822,-0.005434, 0.701001,0.579918,0.415082,0.069161,0.066868,-0.00557, 0.62279,0.663204,0.415082,0.067679,0.068445,-0.00557, 0.584609,0.622545,0.52026,0.06763,0.068392,-0.005434, 0.622545,0.584609,0.52026,0.068392,0.06763,-0.005434, 0.62279,0.663204,0.415082,0.067679,0.068445,-0.00557, 0.622545,0.584609,0.52026,0.068392,0.06763,-0.005434, 0.663204,0.62279,0.415082,0.068445,0.067679,-0.00557, 0.579918,0.701001,0.415082,0.066868,0.069161,-0.00557, 0.544365,0.658024,0.52026,0.066822,0.069105,-0.005434, 0.584609,0.622545,0.52026,0.06763,0.068392,-0.005434, 0.579918,0.701001,0.415082,0.066868,0.069161,-0.00557, 0.584609,0.622545,0.52026,0.06763,0.068392,-0.005434, 0.62279,0.663204,0.415082,0.067679,0.068445,-0.00557, 0.534758,0.736031,0.415082,0.066012,0.069824,-0.00557, 0.501973,0.690907,0.52026,0.06597,0.069766,-0.005434, 0.544365,0.658024,0.52026,0.066822,0.069105,-0.005434, 0.534758,0.736031,0.415082,0.066012,0.069824,-0.00557, 0.544365,0.658024,0.52026,0.066822,0.069105,-0.005434, 0.579918,0.701001,0.415082,0.066868,0.069161,-0.00557, 0.487487,0.768156,0.415082,0.065117,0.070432,-0.00557, 0.4576,0.721063,0.52026,0.065079,0.070372,-0.005434, 0.501973,0.690907,0.52026,0.06597,0.069766,-0.005434, 0.487487,0.768156,0.415082,0.065117,0.070432,-0.00557, 0.501973,0.690907,0.52026,0.06597,0.069766,-0.005434, 0.534758,0.736031,0.415082,0.066012,0.069824,-0.00557, 0.438292,0.79725,0.415082,0.064185,0.070983,-0.00557, 0.411421,0.748373,0.52026,0.064151,0.07092,-0.005434, 0.4576,0.721063,0.52026,0.065079,0.070372,-0.005434, 0.438292,0.79725,0.415082,0.064185,0.070983,-0.00557, 0.4576,0.721063,0.52026,0.065079,0.070372,-0.005434, 0.487487,0.768156,0.415082,0.065117,0.070432,-0.00557, 0.387367,0.823197,0.415082,0.063221,0.071475,-0.00557, 0.363619,0.77273,0.52026,0.06319,0.07141,-0.005434, 0.411421,0.748373,0.52026,0.064151,0.07092,-0.005434, 0.387367,0.823197,0.415082,0.063221,0.071475,-0.00557, 0.411421,0.748373,0.52026,0.064151,0.07092,-0.005434, 0.438292,0.79725,0.415082,0.064185,0.070983,-0.00557, 0.334914,0.845896,0.415082,0.062228,0.071905,-0.00557, 0.314381,0.794037,0.52026,0.062201,0.071838,-0.005434, 0.363619,0.77273,0.52026,0.06319,0.07141,-0.005434, 0.334914,0.845896,0.415082,0.062228,0.071905,-0.00557, 0.363619,0.77273,0.52026,0.06319,0.07141,-0.005434, 0.387367,0.823197,0.415082,0.063221,0.071475,-0.00557, 0.281139,0.865256,0.415082,0.061209,0.072271,-0.00557, 0.263903,0.81221,0.52026,0.061187,0.072203,-0.005434, 0.314381,0.794037,0.52026,0.062201,0.071838,-0.005434, 0.281139,0.865256,0.415082,0.061209,0.072271,-0.00557, 0.314381,0.794037,0.52026,0.062201,0.071838,-0.005434, 0.334914,0.845896,0.415082,0.062228,0.071905,-0.00557, 0.226254,0.881202,0.415082,0.06017,0.072573,-0.00557, 0.212383,0.827178,0.52026,0.060152,0.072503,-0.005434, 0.263903,0.81221,0.52026,0.061187,0.072203,-0.005434, 0.226254,0.881202,0.415082,0.06017,0.072573,-0.00557, 0.263903,0.81221,0.52026,0.061187,0.072203,-0.005434, 0.281139,0.865256,0.415082,0.061209,0.072271,-0.00557, 0.170477,0.893669,0.415082,0.059114,0.072809,-0.00557, 0.160025,0.838881,0.52026,0.0591,0.072739,-0.005434, 0.212383,0.827178,0.52026,0.060152,0.072503,-0.005434, 0.170477,0.893669,0.415082,0.059114,0.072809,-0.00557, 0.212383,0.827178,0.52026,0.060152,0.072503,-0.005434, 0.226254,0.881202,0.415082,0.06017,0.072573,-0.00557, 0.114026,0.90261,0.415082,0.058045,0.072978,-0.00557, 0.107036,0.847274,0.52026,0.058036,0.072907,-0.005434, 0.160025,0.838881,0.52026,0.0591,0.072739,-0.005434, 0.114026,0.90261,0.415082,0.058045,0.072978,-0.00557, 0.160025,0.838881,0.52026,0.0591,0.072739,-0.005434, 0.170477,0.893669,0.415082,0.059114,0.072809,-0.00557, 0.057126,0.907989,0.415082,0.056967,0.07308,-0.00557, 0.053624,0.852323,0.52026,0.056963,0.073009,-0.005434, 0.107036,0.847274,0.52026,0.058036,0.072907,-0.005434, 0.057126,0.907989,0.415082,0.056967,0.07308,-0.00557, 0.107036,0.847274,0.52026,0.058036,0.072907,-0.005434, 0.114026,0.90261,0.415082,0.058045,0.072978,-0.00557, 0,0.909784,0.415082,0.055885,0.073114,-0.00557, 0,0.854008,0.52026,0.055885,0.073042,-0.005434, 0.053624,0.852323,0.52026,0.056963,0.073009,-0.005434, 0,0.909784,0.415082,0.055885,0.073114,-0.00557, 0.053624,0.852323,0.52026,0.056963,0.073009,-0.005434, 0.057126,0.907989,0.415082,0.056967,0.07308,-0.00557, -0.057126,0.907989,0.415082,0.054803,0.07308,-0.00557, -0.053624,0.852323,0.52026,0.054808,0.073009,-0.005434, 0,0.854008,0.52026,0.055885,0.073042,-0.005434, -0.057126,0.907989,0.415082,0.054803,0.07308,-0.00557, 0,0.854008,0.52026,0.055885,0.073042,-0.005434, 0,0.909784,0.415082,0.055885,0.073114,-0.00557, -0.114026,0.90261,0.415082,0.053726,0.072978,-0.00557, -0.107036,0.847274,0.52026,0.053735,0.072907,-0.005434, -0.053624,0.852323,0.52026,0.054808,0.073009,-0.005434, -0.114026,0.90261,0.415082,0.053726,0.072978,-0.00557, -0.053624,0.852323,0.52026,0.054808,0.073009,-0.005434, -0.057126,0.907989,0.415082,0.054803,0.07308,-0.00557, -0.170477,0.893669,0.415082,0.052657,0.072809,-0.00557, -0.160025,0.838881,0.52026,0.05267,0.072739,-0.005434, -0.107036,0.847274,0.52026,0.053735,0.072907,-0.005434, -0.170477,0.893669,0.415082,0.052657,0.072809,-0.00557, -0.107036,0.847274,0.52026,0.053735,0.072907,-0.005434, -0.114026,0.90261,0.415082,0.053726,0.072978,-0.00557, -0.226254,0.881202,0.415082,0.051601,0.072573,-0.00557, -0.212383,0.827178,0.52026,0.051619,0.072503,-0.005434, -0.160025,0.838881,0.52026,0.05267,0.072739,-0.005434, -0.226254,0.881202,0.415082,0.051601,0.072573,-0.00557, -0.160025,0.838881,0.52026,0.05267,0.072739,-0.005434, -0.170477,0.893669,0.415082,0.052657,0.072809,-0.00557, -0.281139,0.865256,0.415082,0.050561,0.072271,-0.00557, -0.263903,0.81221,0.52026,0.050584,0.072203,-0.005434, -0.212383,0.827178,0.52026,0.051619,0.072503,-0.005434, -0.281139,0.865256,0.415082,0.050561,0.072271,-0.00557, -0.212383,0.827178,0.52026,0.051619,0.072503,-0.005434, -0.226254,0.881202,0.415082,0.051601,0.072573,-0.00557, -0.334914,0.845896,0.415082,0.049543,0.071905,-0.00557, -0.314381,0.794037,0.52026,0.049569,0.071838,-0.005434, -0.263903,0.81221,0.52026,0.050584,0.072203,-0.005434, -0.334914,0.845896,0.415082,0.049543,0.071905,-0.00557, -0.263903,0.81221,0.52026,0.050584,0.072203,-0.005434, -0.281139,0.865256,0.415082,0.050561,0.072271,-0.00557, -0.387367,0.823197,0.415082,0.048549,0.071475,-0.00557, -0.363619,0.77273,0.52026,0.04858,0.07141,-0.005434, -0.314381,0.794037,0.52026,0.049569,0.071838,-0.005434, -0.387367,0.823197,0.415082,0.048549,0.071475,-0.00557, -0.314381,0.794037,0.52026,0.049569,0.071838,-0.005434, -0.334914,0.845896,0.415082,0.049543,0.071905,-0.00557, -0.438292,0.79725,0.415082,0.047585,0.070983,-0.00557, -0.411421,0.748373,0.52026,0.04762,0.07092,-0.005434, -0.363619,0.77273,0.52026,0.04858,0.07141,-0.005434, -0.438292,0.79725,0.415082,0.047585,0.070983,-0.00557, -0.363619,0.77273,0.52026,0.04858,0.07141,-0.005434, -0.387367,0.823197,0.415082,0.048549,0.071475,-0.00557, -0.487487,0.768156,0.415082,0.046653,0.070432,-0.00557, -0.4576,0.721063,0.52026,0.046692,0.070372,-0.005434, -0.411421,0.748373,0.52026,0.04762,0.07092,-0.005434, -0.487487,0.768156,0.415082,0.046653,0.070432,-0.00557, -0.411421,0.748373,0.52026,0.04762,0.07092,-0.005434, -0.438292,0.79725,0.415082,0.047585,0.070983,-0.00557, -0.534758,0.736031,0.415082,0.045758,0.069824,-0.00557, -0.501973,0.690907,0.52026,0.045801,0.069766,-0.005434, -0.4576,0.721063,0.52026,0.046692,0.070372,-0.005434, -0.534758,0.736031,0.415082,0.045758,0.069824,-0.00557, -0.4576,0.721063,0.52026,0.046692,0.070372,-0.005434, -0.487487,0.768156,0.415082,0.046653,0.070432,-0.00557, -0.579918,0.701001,0.415082,0.044903,0.069161,-0.00557, -0.544365,0.658024,0.52026,0.044949,0.069105,-0.005434, -0.501973,0.690907,0.52026,0.045801,0.069766,-0.005434, -0.579918,0.701001,0.415082,0.044903,0.069161,-0.00557, -0.501973,0.690907,0.52026,0.045801,0.069766,-0.005434, -0.534758,0.736031,0.415082,0.045758,0.069824,-0.00557, -0.62279,0.663204,0.415082,0.044091,0.068445,-0.00557, -0.584609,0.622545,0.52026,0.04414,0.068392,-0.005434, -0.544365,0.658024,0.52026,0.044949,0.069105,-0.005434, -0.62279,0.663204,0.415082,0.044091,0.068445,-0.00557, -0.544365,0.658024,0.52026,0.044949,0.069105,-0.005434, -0.579918,0.701001,0.415082,0.044903,0.069161,-0.00557, -0.663204,0.62279,0.415082,0.043326,0.067679,-0.00557, -0.622545,0.584609,0.52026,0.043378,0.06763,-0.005434, -0.584609,0.622545,0.52026,0.04414,0.068392,-0.005434, -0.663204,0.62279,0.415082,0.043326,0.067679,-0.00557, -0.584609,0.622545,0.52026,0.04414,0.068392,-0.005434, -0.62279,0.663204,0.415082,0.044091,0.068445,-0.00557, -0.701001,0.579918,0.415082,0.04261,0.066868,-0.00557, -0.658024,0.544365,0.52026,0.042666,0.066822,-0.005434, -0.622545,0.584609,0.52026,0.043378,0.06763,-0.005434, -0.701001,0.579918,0.415082,0.04261,0.066868,-0.00557, -0.622545,0.584609,0.52026,0.043378,0.06763,-0.005434, -0.663204,0.62279,0.415082,0.043326,0.067679,-0.00557, -0.736031,0.534758,0.415082,0.041947,0.066012,-0.00557, -0.690907,0.501973,0.52026,0.042005,0.06597,-0.005434, -0.658024,0.544365,0.52026,0.042666,0.066822,-0.005434, -0.736031,0.534758,0.415082,0.041947,0.066012,-0.00557, -0.658024,0.544365,0.52026,0.042666,0.066822,-0.005434, -0.701001,0.579918,0.415082,0.04261,0.066868,-0.00557, -0.768156,0.487487,0.415082,0.041338,0.065117,-0.00557, -0.721063,0.4576,0.52026,0.041399,0.065079,-0.005434, -0.690907,0.501973,0.52026,0.042005,0.06597,-0.005434, -0.768156,0.487487,0.415082,0.041338,0.065117,-0.00557, -0.690907,0.501973,0.52026,0.042005,0.06597,-0.005434, -0.736031,0.534758,0.415082,0.041947,0.066012,-0.00557, -0.79725,0.438292,0.415082,0.040787,0.064185,-0.00557, -0.748373,0.411421,0.52026,0.04085,0.064151,-0.005434, -0.721063,0.4576,0.52026,0.041399,0.065079,-0.005434, -0.79725,0.438292,0.415082,0.040787,0.064185,-0.00557, -0.721063,0.4576,0.52026,0.041399,0.065079,-0.005434, -0.768156,0.487487,0.415082,0.041338,0.065117,-0.00557, -0.823197,0.387367,0.415082,0.040296,0.063221,-0.00557, -0.77273,0.363619,0.52026,0.040361,0.06319,-0.005434, -0.748373,0.411421,0.52026,0.04085,0.064151,-0.005434, -0.823197,0.387367,0.415082,0.040296,0.063221,-0.00557, -0.748373,0.411421,0.52026,0.04085,0.064151,-0.005434, -0.79725,0.438292,0.415082,0.040787,0.064185,-0.00557, -0.845896,0.334914,0.415082,0.039866,0.062228,-0.00557, -0.794037,0.314381,0.52026,0.039933,0.062201,-0.005434, -0.77273,0.363619,0.52026,0.040361,0.06319,-0.005434, -0.845896,0.334914,0.415082,0.039866,0.062228,-0.00557, -0.77273,0.363619,0.52026,0.040361,0.06319,-0.005434, -0.823197,0.387367,0.415082,0.040296,0.063221,-0.00557, -0.865256,0.281139,0.415082,0.0395,0.061209,-0.00557, -0.81221,0.263903,0.52026,0.039568,0.061187,-0.005434, -0.794037,0.314381,0.52026,0.039933,0.062201,-0.005434, -0.865256,0.281139,0.415082,0.0395,0.061209,-0.00557, -0.794037,0.314381,0.52026,0.039933,0.062201,-0.005434, -0.845896,0.334914,0.415082,0.039866,0.062228,-0.00557, -0.881202,0.226254,0.415082,0.039198,0.06017,-0.00557, -0.827178,0.212383,0.52026,0.039267,0.060152,-0.005434, -0.81221,0.263903,0.52026,0.039568,0.061187,-0.005434, -0.881202,0.226254,0.415082,0.039198,0.06017,-0.00557, -0.81221,0.263903,0.52026,0.039568,0.061187,-0.005434, -0.865256,0.281139,0.415082,0.0395,0.061209,-0.00557, -0.893669,0.170477,0.415082,0.038961,0.059114,-0.00557, -0.838881,0.160025,0.52026,0.039032,0.0591,-0.005434, -0.827178,0.212383,0.52026,0.039267,0.060152,-0.005434, -0.893669,0.170477,0.415082,0.038961,0.059114,-0.00557, -0.827178,0.212383,0.52026,0.039267,0.060152,-0.005434, -0.881202,0.226254,0.415082,0.039198,0.06017,-0.00557, -0.90261,0.114026,0.415082,0.038792,0.058045,-0.00557, -0.847274,0.107036,0.52026,0.038863,0.058036,-0.005434, -0.838881,0.160025,0.52026,0.039032,0.0591,-0.005434, -0.90261,0.114026,0.415082,0.038792,0.058045,-0.00557, -0.838881,0.160025,0.52026,0.039032,0.0591,-0.005434, -0.893669,0.170477,0.415082,0.038961,0.059114,-0.00557, -0.907989,0.057126,0.415082,0.03869,0.056967,-0.00557, -0.852323,0.053624,0.52026,0.038762,0.056963,-0.005434, -0.847274,0.107036,0.52026,0.038863,0.058036,-0.005434, -0.907989,0.057126,0.415082,0.03869,0.056967,-0.00557, -0.847274,0.107036,0.52026,0.038863,0.058036,-0.005434, -0.90261,0.114026,0.415082,0.038792,0.058045,-0.00557, -0.909784,0,0.415082,0.038656,0.055885,-0.00557, -0.854008,0,0.52026,0.038728,0.055885,-0.005434, -0.852323,0.053624,0.52026,0.038762,0.056963,-0.005434, -0.909784,0,0.415082,0.038656,0.055885,-0.00557, -0.852323,0.053624,0.52026,0.038762,0.056963,-0.005434, -0.907989,0.057126,0.415082,0.03869,0.056967,-0.00557, -0.907989,-0.057126,0.415082,0.03869,0.054803,-0.00557, -0.852323,-0.053624,0.52026,0.038762,0.054808,-0.005434, -0.854008,0,0.52026,0.038728,0.055885,-0.005434, -0.907989,-0.057126,0.415082,0.03869,0.054803,-0.00557, -0.854008,0,0.52026,0.038728,0.055885,-0.005434, -0.909784,0,0.415082,0.038656,0.055885,-0.00557, -0.90261,-0.114026,0.415082,0.038792,0.053726,-0.00557, -0.847274,-0.107036,0.52026,0.038863,0.053735,-0.005434, -0.852323,-0.053624,0.52026,0.038762,0.054808,-0.005434, -0.90261,-0.114026,0.415082,0.038792,0.053726,-0.00557, -0.852323,-0.053624,0.52026,0.038762,0.054808,-0.005434, -0.907989,-0.057126,0.415082,0.03869,0.054803,-0.00557, -0.847274,-0.107036,0.52026,0.038863,0.053735,-0.005434, -0.779929,-0.098528,0.618064,0.03895,0.053746,-0.005308, -0.784577,-0.049361,0.618064,0.038849,0.054813,-0.005308, -0.847274,-0.107036,0.52026,0.038863,0.053735,-0.005434, -0.784577,-0.049361,0.618064,0.038849,0.054813,-0.005308, -0.852323,-0.053624,0.52026,0.038762,0.054808,-0.005434, -0.838881,-0.160025,0.52026,0.039032,0.05267,-0.005434, -0.772203,-0.147306,0.618064,0.039118,0.052687,-0.005308, -0.779929,-0.098528,0.618064,0.03895,0.053746,-0.005308, -0.838881,-0.160025,0.52026,0.039032,0.05267,-0.005434, -0.779929,-0.098528,0.618064,0.03895,0.053746,-0.005308, -0.847274,-0.107036,0.52026,0.038863,0.053735,-0.005434, -0.827178,-0.212383,0.52026,0.039267,0.051619,-0.005434, -0.76143,-0.195502,0.618064,0.039352,0.05164,-0.005308, -0.772203,-0.147306,0.618064,0.039118,0.052687,-0.005308, -0.827178,-0.212383,0.52026,0.039267,0.051619,-0.005434, -0.772203,-0.147306,0.618064,0.039118,0.052687,-0.005308, -0.838881,-0.160025,0.52026,0.039032,0.05267,-0.005434, -0.81221,-0.263903,0.52026,0.039568,0.050584,-0.005434, -0.747652,-0.242927,0.618064,0.039651,0.05061,-0.005308, -0.76143,-0.195502,0.618064,0.039352,0.05164,-0.005308, -0.81221,-0.263903,0.52026,0.039568,0.050584,-0.005434, -0.76143,-0.195502,0.618064,0.039352,0.05164,-0.005308, -0.827178,-0.212383,0.52026,0.039267,0.051619,-0.005434, -0.794037,-0.314381,0.52026,0.039933,0.049569,-0.005434, -0.730923,-0.289393,0.618064,0.040014,0.049601,-0.005308, -0.747652,-0.242927,0.618064,0.039651,0.05061,-0.005308, -0.794037,-0.314381,0.52026,0.039933,0.049569,-0.005434, -0.747652,-0.242927,0.618064,0.039651,0.05061,-0.005308, -0.81221,-0.263903,0.52026,0.039568,0.050584,-0.005434, -0.77273,-0.363619,0.52026,0.040361,0.04858,-0.005434, -0.71131,-0.334717,0.618064,0.04044,0.048617,-0.005308, -0.730923,-0.289393,0.618064,0.040014,0.049601,-0.005308, -0.77273,-0.363619,0.52026,0.040361,0.04858,-0.005434, -0.730923,-0.289393,0.618064,0.040014,0.049601,-0.005308, -0.794037,-0.314381,0.52026,0.039933,0.049569,-0.005434, -0.748373,-0.411421,0.52026,0.04085,0.04762,-0.005434, -0.688889,-0.37872,0.618064,0.040927,0.047662,-0.005308, -0.71131,-0.334717,0.618064,0.04044,0.048617,-0.005308, -0.748373,-0.411421,0.52026,0.04085,0.04762,-0.005434, -0.71131,-0.334717,0.618064,0.04044,0.048617,-0.005308, -0.77273,-0.363619,0.52026,0.040361,0.04858,-0.005434, -0.721063,-0.4576,0.52026,0.041399,0.046692,-0.005434, -0.66375,-0.421228,0.618064,0.041473,0.046739,-0.005308, -0.688889,-0.37872,0.618064,0.040927,0.047662,-0.005308, -0.721063,-0.4576,0.52026,0.041399,0.046692,-0.005434, -0.688889,-0.37872,0.618064,0.040927,0.047662,-0.005308, -0.748373,-0.411421,0.52026,0.04085,0.04762,-0.005434, -0.690907,-0.501973,0.52026,0.042005,0.045801,-0.005434, -0.635991,-0.462074,0.618064,0.042076,0.045852,-0.005308, -0.66375,-0.421228,0.618064,0.041473,0.046739,-0.005308, -0.690907,-0.501973,0.52026,0.042005,0.045801,-0.005434, -0.66375,-0.421228,0.618064,0.041473,0.046739,-0.005308, -0.721063,-0.4576,0.52026,0.041399,0.046692,-0.005434, -0.658024,-0.544365,0.52026,0.042666,0.044949,-0.005434, -0.605722,-0.501097,0.618064,0.042733,0.045005,-0.005308, -0.635991,-0.462074,0.618064,0.042076,0.045852,-0.005308, -0.658024,-0.544365,0.52026,0.042666,0.044949,-0.005434, -0.635991,-0.462074,0.618064,0.042076,0.045852,-0.005308, -0.690907,-0.501973,0.52026,0.042005,0.045801,-0.005434, -0.622545,-0.584609,0.52026,0.043378,0.04414,-0.005434, -0.573062,-0.538141,0.618064,0.043442,0.0442,-0.005308, -0.605722,-0.501097,0.618064,0.042733,0.045005,-0.005308, -0.622545,-0.584609,0.52026,0.043378,0.04414,-0.005434, -0.605722,-0.501097,0.618064,0.042733,0.045005,-0.005308, -0.658024,-0.544365,0.52026,0.042666,0.044949,-0.005434, -0.584609,-0.622545,0.52026,0.04414,0.043378,-0.005434, -0.538141,-0.573062,0.618064,0.0442,0.043442,-0.005308, -0.573062,-0.538141,0.618064,0.043442,0.0442,-0.005308, -0.584609,-0.622545,0.52026,0.04414,0.043378,-0.005434, -0.573062,-0.538141,0.618064,0.043442,0.0442,-0.005308, -0.622545,-0.584609,0.52026,0.043378,0.04414,-0.005434, -0.544365,-0.658024,0.52026,0.044949,0.042666,-0.005434, -0.501097,-0.605722,0.618064,0.045005,0.042733,-0.005308, -0.538141,-0.573062,0.618064,0.0442,0.043442,-0.005308, -0.544365,-0.658024,0.52026,0.044949,0.042666,-0.005434, -0.538141,-0.573062,0.618064,0.0442,0.043442,-0.005308, -0.584609,-0.622545,0.52026,0.04414,0.043378,-0.005434, -0.501973,-0.690907,0.52026,0.045801,0.042005,-0.005434, -0.462074,-0.635991,0.618064,0.045852,0.042076,-0.005308, -0.501097,-0.605722,0.618064,0.045005,0.042733,-0.005308, -0.501973,-0.690907,0.52026,0.045801,0.042005,-0.005434, -0.501097,-0.605722,0.618064,0.045005,0.042733,-0.005308, -0.544365,-0.658024,0.52026,0.044949,0.042666,-0.005434, -0.4576,-0.721063,0.52026,0.046692,0.041399,-0.005434, -0.421228,-0.66375,0.618064,0.046739,0.041473,-0.005308, -0.462074,-0.635991,0.618064,0.045852,0.042076,-0.005308, -0.4576,-0.721063,0.52026,0.046692,0.041399,-0.005434, -0.462074,-0.635991,0.618064,0.045852,0.042076,-0.005308, -0.501973,-0.690907,0.52026,0.045801,0.042005,-0.005434, -0.411421,-0.748373,0.52026,0.04762,0.04085,-0.005434, -0.37872,-0.688889,0.618064,0.047662,0.040927,-0.005308, -0.421228,-0.66375,0.618064,0.046739,0.041473,-0.005308, -0.411421,-0.748373,0.52026,0.04762,0.04085,-0.005434, -0.421228,-0.66375,0.618064,0.046739,0.041473,-0.005308, -0.4576,-0.721063,0.52026,0.046692,0.041399,-0.005434, -0.363619,-0.77273,0.52026,0.04858,0.040361,-0.005434, -0.334717,-0.71131,0.618064,0.048617,0.04044,-0.005308, -0.37872,-0.688889,0.618064,0.047662,0.040927,-0.005308, -0.363619,-0.77273,0.52026,0.04858,0.040361,-0.005434, -0.37872,-0.688889,0.618064,0.047662,0.040927,-0.005308, -0.411421,-0.748373,0.52026,0.04762,0.04085,-0.005434, -0.314381,-0.794037,0.52026,0.049569,0.039933,-0.005434, -0.289393,-0.730923,0.618064,0.049601,0.040014,-0.005308, -0.334717,-0.71131,0.618064,0.048617,0.04044,-0.005308, -0.314381,-0.794037,0.52026,0.049569,0.039933,-0.005434, -0.334717,-0.71131,0.618064,0.048617,0.04044,-0.005308, -0.363619,-0.77273,0.52026,0.04858,0.040361,-0.005434, -0.263903,-0.81221,0.52026,0.050584,0.039568,-0.005434, -0.242927,-0.747652,0.618064,0.05061,0.039651,-0.005308, -0.289393,-0.730923,0.618064,0.049601,0.040014,-0.005308, -0.263903,-0.81221,0.52026,0.050584,0.039568,-0.005434, -0.289393,-0.730923,0.618064,0.049601,0.040014,-0.005308, -0.314381,-0.794037,0.52026,0.049569,0.039933,-0.005434, -0.212383,-0.827178,0.52026,0.051619,0.039267,-0.005434, -0.195502,-0.76143,0.618064,0.05164,0.039352,-0.005308, -0.242927,-0.747652,0.618064,0.05061,0.039651,-0.005308, -0.212383,-0.827178,0.52026,0.051619,0.039267,-0.005434, -0.242927,-0.747652,0.618064,0.05061,0.039651,-0.005308, -0.263903,-0.81221,0.52026,0.050584,0.039568,-0.005434, -0.160025,-0.838881,0.52026,0.05267,0.039032,-0.005434, -0.147306,-0.772203,0.618064,0.052687,0.039118,-0.005308, -0.195502,-0.76143,0.618064,0.05164,0.039352,-0.005308, -0.160025,-0.838881,0.52026,0.05267,0.039032,-0.005434, -0.195502,-0.76143,0.618064,0.05164,0.039352,-0.005308, -0.212383,-0.827178,0.52026,0.051619,0.039267,-0.005434, -0.107036,-0.847274,0.52026,0.053735,0.038863,-0.005434, -0.098528,-0.779929,0.618064,0.053746,0.03895,-0.005308, -0.147306,-0.772203,0.618064,0.052687,0.039118,-0.005308, -0.107036,-0.847274,0.52026,0.053735,0.038863,-0.005434, -0.147306,-0.772203,0.618064,0.052687,0.039118,-0.005308, -0.160025,-0.838881,0.52026,0.05267,0.039032,-0.005434, -0.053624,-0.852323,0.52026,0.054808,0.038762,-0.005434, -0.049361,-0.784577,0.618064,0.054813,0.038849,-0.005308, -0.098528,-0.779929,0.618064,0.053746,0.03895,-0.005308, -0.053624,-0.852323,0.52026,0.054808,0.038762,-0.005434, -0.098528,-0.779929,0.618064,0.053746,0.03895,-0.005308, -0.107036,-0.847274,0.52026,0.053735,0.038863,-0.005434, 0,-0.854008,0.52026,0.055885,0.038728,-0.005434, 0,-0.786128,0.618064,0.055885,0.038816,-0.005308, -0.049361,-0.784577,0.618064,0.054813,0.038849,-0.005308, 0,-0.854008,0.52026,0.055885,0.038728,-0.005434, -0.049361,-0.784577,0.618064,0.054813,0.038849,-0.005308, -0.053624,-0.852323,0.52026,0.054808,0.038762,-0.005434, 0.053624,-0.852323,0.52026,0.056963,0.038762,-0.005434, 0.049361,-0.784577,0.618064,0.056957,0.038849,-0.005308, 0,-0.786128,0.618064,0.055885,0.038816,-0.005308, 0.053624,-0.852323,0.52026,0.056963,0.038762,-0.005434, 0,-0.786128,0.618064,0.055885,0.038816,-0.005308, 0,-0.854008,0.52026,0.055885,0.038728,-0.005434, 0.107036,-0.847274,0.52026,0.058036,0.038863,-0.005434, 0.098528,-0.779929,0.618064,0.058025,0.03895,-0.005308, 0.049361,-0.784577,0.618064,0.056957,0.038849,-0.005308, 0.107036,-0.847274,0.52026,0.058036,0.038863,-0.005434, 0.049361,-0.784577,0.618064,0.056957,0.038849,-0.005308, 0.053624,-0.852323,0.52026,0.056963,0.038762,-0.005434, 0.160025,-0.838881,0.52026,0.0591,0.039032,-0.005434, 0.147306,-0.772203,0.618064,0.059084,0.039118,-0.005308, 0.098528,-0.779929,0.618064,0.058025,0.03895,-0.005308, 0.160025,-0.838881,0.52026,0.0591,0.039032,-0.005434, 0.098528,-0.779929,0.618064,0.058025,0.03895,-0.005308, 0.107036,-0.847274,0.52026,0.058036,0.038863,-0.005434, 0.212383,-0.827178,0.52026,0.060152,0.039267,-0.005434, 0.195502,-0.76143,0.618064,0.06013,0.039352,-0.005308, 0.147306,-0.772203,0.618064,0.059084,0.039118,-0.005308, 0.212383,-0.827178,0.52026,0.060152,0.039267,-0.005434, 0.147306,-0.772203,0.618064,0.059084,0.039118,-0.005308, 0.160025,-0.838881,0.52026,0.0591,0.039032,-0.005434, 0.263903,-0.81221,0.52026,0.061187,0.039568,-0.005434, 0.242927,-0.747652,0.618064,0.06116,0.039651,-0.005308, 0.195502,-0.76143,0.618064,0.06013,0.039352,-0.005308, 0.263903,-0.81221,0.52026,0.061187,0.039568,-0.005434, 0.195502,-0.76143,0.618064,0.06013,0.039352,-0.005308, 0.212383,-0.827178,0.52026,0.060152,0.039267,-0.005434, 0.314381,-0.794037,0.52026,0.062201,0.039933,-0.005434, 0.289393,-0.730923,0.618064,0.062169,0.040014,-0.005308, 0.242927,-0.747652,0.618064,0.06116,0.039651,-0.005308, 0.314381,-0.794037,0.52026,0.062201,0.039933,-0.005434, 0.242927,-0.747652,0.618064,0.06116,0.039651,-0.005308, 0.263903,-0.81221,0.52026,0.061187,0.039568,-0.005434, 0.363619,-0.77273,0.52026,0.06319,0.040361,-0.005434, 0.334717,-0.71131,0.618064,0.063153,0.04044,-0.005308, 0.289393,-0.730923,0.618064,0.062169,0.040014,-0.005308, 0.363619,-0.77273,0.52026,0.06319,0.040361,-0.005434, 0.289393,-0.730923,0.618064,0.062169,0.040014,-0.005308, 0.314381,-0.794037,0.52026,0.062201,0.039933,-0.005434, 0.411421,-0.748373,0.52026,0.064151,0.04085,-0.005434, 0.37872,-0.688889,0.618064,0.064109,0.040927,-0.005308, 0.334717,-0.71131,0.618064,0.063153,0.04044,-0.005308, 0.411421,-0.748373,0.52026,0.064151,0.04085,-0.005434, 0.334717,-0.71131,0.618064,0.063153,0.04044,-0.005308, 0.363619,-0.77273,0.52026,0.06319,0.040361,-0.005434, 0.4576,-0.721063,0.52026,0.065079,0.041399,-0.005434, 0.421228,-0.66375,0.618064,0.065032,0.041473,-0.005308, 0.37872,-0.688889,0.618064,0.064109,0.040927,-0.005308, 0.4576,-0.721063,0.52026,0.065079,0.041399,-0.005434, 0.37872,-0.688889,0.618064,0.064109,0.040927,-0.005308, 0.411421,-0.748373,0.52026,0.064151,0.04085,-0.005434, 0.501973,-0.690907,0.52026,0.06597,0.042005,-0.005434, 0.462074,-0.635991,0.618064,0.065919,0.042076,-0.005308, 0.421228,-0.66375,0.618064,0.065032,0.041473,-0.005308, 0.501973,-0.690907,0.52026,0.06597,0.042005,-0.005434, 0.421228,-0.66375,0.618064,0.065032,0.041473,-0.005308, 0.4576,-0.721063,0.52026,0.065079,0.041399,-0.005434, 0.544365,-0.658024,0.52026,0.066822,0.042666,-0.005434, 0.501097,-0.605722,0.618064,0.066766,0.042733,-0.005308, 0.462074,-0.635991,0.618064,0.065919,0.042076,-0.005308, 0.544365,-0.658024,0.52026,0.066822,0.042666,-0.005434, 0.462074,-0.635991,0.618064,0.065919,0.042076,-0.005308, 0.501973,-0.690907,0.52026,0.06597,0.042005,-0.005434, 0.584609,-0.622545,0.52026,0.06763,0.043378,-0.005434, 0.538141,-0.573062,0.618064,0.06757,0.043442,-0.005308, 0.501097,-0.605722,0.618064,0.066766,0.042733,-0.005308, 0.584609,-0.622545,0.52026,0.06763,0.043378,-0.005434, 0.501097,-0.605722,0.618064,0.066766,0.042733,-0.005308, 0.544365,-0.658024,0.52026,0.066822,0.042666,-0.005434, 0.622545,-0.584609,0.52026,0.068392,0.04414,-0.005434, 0.573062,-0.538141,0.618064,0.068329,0.0442,-0.005308, 0.538141,-0.573062,0.618064,0.06757,0.043442,-0.005308, 0.622545,-0.584609,0.52026,0.068392,0.04414,-0.005434, 0.538141,-0.573062,0.618064,0.06757,0.043442,-0.005308, 0.584609,-0.622545,0.52026,0.06763,0.043378,-0.005434, 0.658024,-0.544365,0.52026,0.069105,0.044949,-0.005434, 0.605722,-0.501097,0.618064,0.069038,0.045005,-0.005308, 0.573062,-0.538141,0.618064,0.068329,0.0442,-0.005308, 0.658024,-0.544365,0.52026,0.069105,0.044949,-0.005434, 0.573062,-0.538141,0.618064,0.068329,0.0442,-0.005308, 0.622545,-0.584609,0.52026,0.068392,0.04414,-0.005434, 0.690907,-0.501973,0.52026,0.069766,0.045801,-0.005434, 0.635991,-0.462074,0.618064,0.069695,0.045852,-0.005308, 0.605722,-0.501097,0.618064,0.069038,0.045005,-0.005308, 0.690907,-0.501973,0.52026,0.069766,0.045801,-0.005434, 0.605722,-0.501097,0.618064,0.069038,0.045005,-0.005308, 0.658024,-0.544365,0.52026,0.069105,0.044949,-0.005434, 0.721063,-0.4576,0.52026,0.070372,0.046692,-0.005434, 0.66375,-0.421228,0.618064,0.070298,0.046739,-0.005308, 0.635991,-0.462074,0.618064,0.069695,0.045852,-0.005308, 0.721063,-0.4576,0.52026,0.070372,0.046692,-0.005434, 0.635991,-0.462074,0.618064,0.069695,0.045852,-0.005308, 0.690907,-0.501973,0.52026,0.069766,0.045801,-0.005434, 0.748373,-0.411421,0.52026,0.07092,0.04762,-0.005434, 0.688889,-0.37872,0.618064,0.070844,0.047662,-0.005308, 0.66375,-0.421228,0.618064,0.070298,0.046739,-0.005308, 0.748373,-0.411421,0.52026,0.07092,0.04762,-0.005434, 0.66375,-0.421228,0.618064,0.070298,0.046739,-0.005308, 0.721063,-0.4576,0.52026,0.070372,0.046692,-0.005434, 0.77273,-0.363619,0.52026,0.07141,0.04858,-0.005434, 0.71131,-0.334717,0.618064,0.07133,0.048617,-0.005308, 0.688889,-0.37872,0.618064,0.070844,0.047662,-0.005308, 0.77273,-0.363619,0.52026,0.07141,0.04858,-0.005434, 0.688889,-0.37872,0.618064,0.070844,0.047662,-0.005308, 0.748373,-0.411421,0.52026,0.07092,0.04762,-0.005434, 0.794037,-0.314381,0.52026,0.071838,0.049569,-0.005434, 0.730923,-0.289393,0.618064,0.071756,0.049601,-0.005308, 0.71131,-0.334717,0.618064,0.07133,0.048617,-0.005308, 0.794037,-0.314381,0.52026,0.071838,0.049569,-0.005434, 0.71131,-0.334717,0.618064,0.07133,0.048617,-0.005308, 0.77273,-0.363619,0.52026,0.07141,0.04858,-0.005434, 0.81221,-0.263903,0.52026,0.072203,0.050584,-0.005434, 0.747652,-0.242927,0.618064,0.07212,0.05061,-0.005308, 0.730923,-0.289393,0.618064,0.071756,0.049601,-0.005308, 0.81221,-0.263903,0.52026,0.072203,0.050584,-0.005434, 0.730923,-0.289393,0.618064,0.071756,0.049601,-0.005308, 0.794037,-0.314381,0.52026,0.071838,0.049569,-0.005434, 0.827178,-0.212383,0.52026,0.072503,0.051619,-0.005434, 0.76143,-0.195502,0.618064,0.072419,0.05164,-0.005308, 0.747652,-0.242927,0.618064,0.07212,0.05061,-0.005308, 0.827178,-0.212383,0.52026,0.072503,0.051619,-0.005434, 0.747652,-0.242927,0.618064,0.07212,0.05061,-0.005308, 0.81221,-0.263903,0.52026,0.072203,0.050584,-0.005434, 0.838881,-0.160025,0.52026,0.072739,0.05267,-0.005434, 0.772203,-0.147306,0.618064,0.072653,0.052687,-0.005308, 0.76143,-0.195502,0.618064,0.072419,0.05164,-0.005308, 0.838881,-0.160025,0.52026,0.072739,0.05267,-0.005434, 0.76143,-0.195502,0.618064,0.072419,0.05164,-0.005308, 0.827178,-0.212383,0.52026,0.072503,0.051619,-0.005434, 0.847274,-0.107036,0.52026,0.072907,0.053735,-0.005434, 0.779929,-0.098528,0.618064,0.07282,0.053746,-0.005308, 0.772203,-0.147306,0.618064,0.072653,0.052687,-0.005308, 0.847274,-0.107036,0.52026,0.072907,0.053735,-0.005434, 0.772203,-0.147306,0.618064,0.072653,0.052687,-0.005308, 0.838881,-0.160025,0.52026,0.072739,0.05267,-0.005434, 0.852323,-0.053624,0.52026,0.073009,0.054808,-0.005434, 0.784577,-0.049361,0.618064,0.072921,0.054813,-0.005308, 0.779929,-0.098528,0.618064,0.07282,0.053746,-0.005308, 0.852323,-0.053624,0.52026,0.073009,0.054808,-0.005434, 0.779929,-0.098528,0.618064,0.07282,0.053746,-0.005308, 0.847274,-0.107036,0.52026,0.072907,0.053735,-0.005434, 0.854008,0,0.52026,0.073042,0.055885,-0.005434, 0.786128,0,0.618064,0.072955,0.055885,-0.005308, 0.784577,-0.049361,0.618064,0.072921,0.054813,-0.005308, 0.854008,0,0.52026,0.073042,0.055885,-0.005434, 0.784577,-0.049361,0.618064,0.072921,0.054813,-0.005308, 0.852323,-0.053624,0.52026,0.073009,0.054808,-0.005434, 0.852323,0.053624,0.52026,0.073009,0.056963,-0.005434, 0.784577,0.049361,0.618064,0.072921,0.056957,-0.005308, 0.786128,0,0.618064,0.072955,0.055885,-0.005308, 0.852323,0.053624,0.52026,0.073009,0.056963,-0.005434, 0.786128,0,0.618064,0.072955,0.055885,-0.005308, 0.854008,0,0.52026,0.073042,0.055885,-0.005434, 0.847274,0.107036,0.52026,0.072907,0.058036,-0.005434, 0.779929,0.098528,0.618064,0.07282,0.058025,-0.005308, 0.784577,0.049361,0.618064,0.072921,0.056957,-0.005308, 0.847274,0.107036,0.52026,0.072907,0.058036,-0.005434, 0.784577,0.049361,0.618064,0.072921,0.056957,-0.005308, 0.852323,0.053624,0.52026,0.073009,0.056963,-0.005434, 0.838881,0.160025,0.52026,0.072739,0.0591,-0.005434, 0.772203,0.147306,0.618064,0.072653,0.059084,-0.005308, 0.779929,0.098528,0.618064,0.07282,0.058025,-0.005308, 0.838881,0.160025,0.52026,0.072739,0.0591,-0.005434, 0.779929,0.098528,0.618064,0.07282,0.058025,-0.005308, 0.847274,0.107036,0.52026,0.072907,0.058036,-0.005434, 0.827178,0.212383,0.52026,0.072503,0.060152,-0.005434, 0.76143,0.195502,0.618064,0.072419,0.06013,-0.005308, 0.772203,0.147306,0.618064,0.072653,0.059084,-0.005308, 0.827178,0.212383,0.52026,0.072503,0.060152,-0.005434, 0.772203,0.147306,0.618064,0.072653,0.059084,-0.005308, 0.838881,0.160025,0.52026,0.072739,0.0591,-0.005434, 0.81221,0.263903,0.52026,0.072203,0.061187,-0.005434, 0.747652,0.242927,0.618064,0.07212,0.06116,-0.005308, 0.76143,0.195502,0.618064,0.072419,0.06013,-0.005308, 0.81221,0.263903,0.52026,0.072203,0.061187,-0.005434, 0.76143,0.195502,0.618064,0.072419,0.06013,-0.005308, 0.827178,0.212383,0.52026,0.072503,0.060152,-0.005434, 0.794037,0.314381,0.52026,0.071838,0.062201,-0.005434, 0.730923,0.289393,0.618064,0.071756,0.062169,-0.005308, 0.747652,0.242927,0.618064,0.07212,0.06116,-0.005308, 0.794037,0.314381,0.52026,0.071838,0.062201,-0.005434, 0.747652,0.242927,0.618064,0.07212,0.06116,-0.005308, 0.81221,0.263903,0.52026,0.072203,0.061187,-0.005434, 0.77273,0.363619,0.52026,0.07141,0.06319,-0.005434, 0.71131,0.334717,0.618064,0.07133,0.063153,-0.005308, 0.730923,0.289393,0.618064,0.071756,0.062169,-0.005308, 0.77273,0.363619,0.52026,0.07141,0.06319,-0.005434, 0.730923,0.289393,0.618064,0.071756,0.062169,-0.005308, 0.794037,0.314381,0.52026,0.071838,0.062201,-0.005434, 0.748373,0.411421,0.52026,0.07092,0.064151,-0.005434, 0.688889,0.37872,0.618064,0.070844,0.064109,-0.005308, 0.71131,0.334717,0.618064,0.07133,0.063153,-0.005308, 0.748373,0.411421,0.52026,0.07092,0.064151,-0.005434, 0.71131,0.334717,0.618064,0.07133,0.063153,-0.005308, 0.77273,0.363619,0.52026,0.07141,0.06319,-0.005434, 0.721063,0.4576,0.52026,0.070372,0.065079,-0.005434, 0.66375,0.421228,0.618064,0.070298,0.065032,-0.005308, 0.688889,0.37872,0.618064,0.070844,0.064109,-0.005308, 0.721063,0.4576,0.52026,0.070372,0.065079,-0.005434, 0.688889,0.37872,0.618064,0.070844,0.064109,-0.005308, 0.748373,0.411421,0.52026,0.07092,0.064151,-0.005434, 0.690907,0.501973,0.52026,0.069766,0.06597,-0.005434, 0.635991,0.462074,0.618064,0.069695,0.065919,-0.005308, 0.66375,0.421228,0.618064,0.070298,0.065032,-0.005308, 0.690907,0.501973,0.52026,0.069766,0.06597,-0.005434, 0.66375,0.421228,0.618064,0.070298,0.065032,-0.005308, 0.721063,0.4576,0.52026,0.070372,0.065079,-0.005434, 0.658024,0.544365,0.52026,0.069105,0.066822,-0.005434, 0.605722,0.501097,0.618064,0.069038,0.066766,-0.005308, 0.635991,0.462074,0.618064,0.069695,0.065919,-0.005308, 0.658024,0.544365,0.52026,0.069105,0.066822,-0.005434, 0.635991,0.462074,0.618064,0.069695,0.065919,-0.005308, 0.690907,0.501973,0.52026,0.069766,0.06597,-0.005434, 0.622545,0.584609,0.52026,0.068392,0.06763,-0.005434, 0.573062,0.538141,0.618064,0.068329,0.06757,-0.005308, 0.605722,0.501097,0.618064,0.069038,0.066766,-0.005308, 0.622545,0.584609,0.52026,0.068392,0.06763,-0.005434, 0.605722,0.501097,0.618064,0.069038,0.066766,-0.005308, 0.658024,0.544365,0.52026,0.069105,0.066822,-0.005434, 0.584609,0.622545,0.52026,0.06763,0.068392,-0.005434, 0.538141,0.573062,0.618064,0.06757,0.068329,-0.005308, 0.573062,0.538141,0.618064,0.068329,0.06757,-0.005308, 0.584609,0.622545,0.52026,0.06763,0.068392,-0.005434, 0.573062,0.538141,0.618064,0.068329,0.06757,-0.005308, 0.622545,0.584609,0.52026,0.068392,0.06763,-0.005434, 0.544365,0.658024,0.52026,0.066822,0.069105,-0.005434, 0.501097,0.605722,0.618064,0.066766,0.069038,-0.005308, 0.538141,0.573062,0.618064,0.06757,0.068329,-0.005308, 0.544365,0.658024,0.52026,0.066822,0.069105,-0.005434, 0.538141,0.573062,0.618064,0.06757,0.068329,-0.005308, 0.584609,0.622545,0.52026,0.06763,0.068392,-0.005434, 0.501973,0.690907,0.52026,0.06597,0.069766,-0.005434, 0.462074,0.635991,0.618064,0.065919,0.069695,-0.005308, 0.501097,0.605722,0.618064,0.066766,0.069038,-0.005308, 0.501973,0.690907,0.52026,0.06597,0.069766,-0.005434, 0.501097,0.605722,0.618064,0.066766,0.069038,-0.005308, 0.544365,0.658024,0.52026,0.066822,0.069105,-0.005434, 0.4576,0.721063,0.52026,0.065079,0.070372,-0.005434, 0.421228,0.66375,0.618064,0.065032,0.070298,-0.005308, 0.462074,0.635991,0.618064,0.065919,0.069695,-0.005308, 0.4576,0.721063,0.52026,0.065079,0.070372,-0.005434, 0.462074,0.635991,0.618064,0.065919,0.069695,-0.005308, 0.501973,0.690907,0.52026,0.06597,0.069766,-0.005434, 0.411421,0.748373,0.52026,0.064151,0.07092,-0.005434, 0.37872,0.688889,0.618064,0.064109,0.070844,-0.005308, 0.421228,0.66375,0.618064,0.065032,0.070298,-0.005308, 0.411421,0.748373,0.52026,0.064151,0.07092,-0.005434, 0.421228,0.66375,0.618064,0.065032,0.070298,-0.005308, 0.4576,0.721063,0.52026,0.065079,0.070372,-0.005434, 0.363619,0.77273,0.52026,0.06319,0.07141,-0.005434, 0.334717,0.71131,0.618064,0.063153,0.07133,-0.005308, 0.37872,0.688889,0.618064,0.064109,0.070844,-0.005308, 0.363619,0.77273,0.52026,0.06319,0.07141,-0.005434, 0.37872,0.688889,0.618064,0.064109,0.070844,-0.005308, 0.411421,0.748373,0.52026,0.064151,0.07092,-0.005434, 0.314381,0.794037,0.52026,0.062201,0.071838,-0.005434, 0.289393,0.730923,0.618064,0.062169,0.071756,-0.005308, 0.334717,0.71131,0.618064,0.063153,0.07133,-0.005308, 0.314381,0.794037,0.52026,0.062201,0.071838,-0.005434, 0.334717,0.71131,0.618064,0.063153,0.07133,-0.005308, 0.363619,0.77273,0.52026,0.06319,0.07141,-0.005434, 0.263903,0.81221,0.52026,0.061187,0.072203,-0.005434, 0.242927,0.747652,0.618064,0.06116,0.07212,-0.005308, 0.289393,0.730923,0.618064,0.062169,0.071756,-0.005308, 0.263903,0.81221,0.52026,0.061187,0.072203,-0.005434, 0.289393,0.730923,0.618064,0.062169,0.071756,-0.005308, 0.314381,0.794037,0.52026,0.062201,0.071838,-0.005434, 0.212383,0.827178,0.52026,0.060152,0.072503,-0.005434, 0.195502,0.76143,0.618064,0.06013,0.072419,-0.005308, 0.242927,0.747652,0.618064,0.06116,0.07212,-0.005308, 0.212383,0.827178,0.52026,0.060152,0.072503,-0.005434, 0.242927,0.747652,0.618064,0.06116,0.07212,-0.005308, 0.263903,0.81221,0.52026,0.061187,0.072203,-0.005434, 0.160025,0.838881,0.52026,0.0591,0.072739,-0.005434, 0.147306,0.772203,0.618064,0.059084,0.072653,-0.005308, 0.195502,0.76143,0.618064,0.06013,0.072419,-0.005308, 0.160025,0.838881,0.52026,0.0591,0.072739,-0.005434, 0.195502,0.76143,0.618064,0.06013,0.072419,-0.005308, 0.212383,0.827178,0.52026,0.060152,0.072503,-0.005434, 0.107036,0.847274,0.52026,0.058036,0.072907,-0.005434, 0.098528,0.779929,0.618064,0.058025,0.07282,-0.005308, 0.147306,0.772203,0.618064,0.059084,0.072653,-0.005308, 0.107036,0.847274,0.52026,0.058036,0.072907,-0.005434, 0.147306,0.772203,0.618064,0.059084,0.072653,-0.005308, 0.160025,0.838881,0.52026,0.0591,0.072739,-0.005434, 0.053624,0.852323,0.52026,0.056963,0.073009,-0.005434, 0.049361,0.784577,0.618064,0.056957,0.072921,-0.005308, 0.098528,0.779929,0.618064,0.058025,0.07282,-0.005308, 0.053624,0.852323,0.52026,0.056963,0.073009,-0.005434, 0.098528,0.779929,0.618064,0.058025,0.07282,-0.005308, 0.107036,0.847274,0.52026,0.058036,0.072907,-0.005434, 0,0.854008,0.52026,0.055885,0.073042,-0.005434, 0,0.786128,0.618064,0.055885,0.072955,-0.005308, 0.049361,0.784577,0.618064,0.056957,0.072921,-0.005308, 0,0.854008,0.52026,0.055885,0.073042,-0.005434, 0.049361,0.784577,0.618064,0.056957,0.072921,-0.005308, 0.053624,0.852323,0.52026,0.056963,0.073009,-0.005434, -0.053624,0.852323,0.52026,0.054808,0.073009,-0.005434, -0.049361,0.784577,0.618064,0.054813,0.072921,-0.005308, 0,0.786128,0.618064,0.055885,0.072955,-0.005308, -0.053624,0.852323,0.52026,0.054808,0.073009,-0.005434, 0,0.786128,0.618064,0.055885,0.072955,-0.005308, 0,0.854008,0.52026,0.055885,0.073042,-0.005434, -0.107036,0.847274,0.52026,0.053735,0.072907,-0.005434, -0.098528,0.779929,0.618064,0.053746,0.07282,-0.005308, -0.049361,0.784577,0.618064,0.054813,0.072921,-0.005308, -0.107036,0.847274,0.52026,0.053735,0.072907,-0.005434, -0.049361,0.784577,0.618064,0.054813,0.072921,-0.005308, -0.053624,0.852323,0.52026,0.054808,0.073009,-0.005434, -0.160025,0.838881,0.52026,0.05267,0.072739,-0.005434, -0.147306,0.772203,0.618064,0.052687,0.072653,-0.005308, -0.098528,0.779929,0.618064,0.053746,0.07282,-0.005308, -0.160025,0.838881,0.52026,0.05267,0.072739,-0.005434, -0.098528,0.779929,0.618064,0.053746,0.07282,-0.005308, -0.107036,0.847274,0.52026,0.053735,0.072907,-0.005434, -0.212383,0.827178,0.52026,0.051619,0.072503,-0.005434, -0.195502,0.76143,0.618064,0.05164,0.072419,-0.005308, -0.147306,0.772203,0.618064,0.052687,0.072653,-0.005308, -0.212383,0.827178,0.52026,0.051619,0.072503,-0.005434, -0.147306,0.772203,0.618064,0.052687,0.072653,-0.005308, -0.160025,0.838881,0.52026,0.05267,0.072739,-0.005434, -0.263903,0.81221,0.52026,0.050584,0.072203,-0.005434, -0.242927,0.747652,0.618064,0.05061,0.07212,-0.005308, -0.195502,0.76143,0.618064,0.05164,0.072419,-0.005308, -0.263903,0.81221,0.52026,0.050584,0.072203,-0.005434, -0.195502,0.76143,0.618064,0.05164,0.072419,-0.005308, -0.212383,0.827178,0.52026,0.051619,0.072503,-0.005434, -0.314381,0.794037,0.52026,0.049569,0.071838,-0.005434, -0.289393,0.730923,0.618064,0.049601,0.071756,-0.005308, -0.242927,0.747652,0.618064,0.05061,0.07212,-0.005308, -0.314381,0.794037,0.52026,0.049569,0.071838,-0.005434, -0.242927,0.747652,0.618064,0.05061,0.07212,-0.005308, -0.263903,0.81221,0.52026,0.050584,0.072203,-0.005434, -0.363619,0.77273,0.52026,0.04858,0.07141,-0.005434, -0.334717,0.71131,0.618064,0.048617,0.07133,-0.005308, -0.289393,0.730923,0.618064,0.049601,0.071756,-0.005308, -0.363619,0.77273,0.52026,0.04858,0.07141,-0.005434, -0.289393,0.730923,0.618064,0.049601,0.071756,-0.005308, -0.314381,0.794037,0.52026,0.049569,0.071838,-0.005434, -0.411421,0.748373,0.52026,0.04762,0.07092,-0.005434, -0.37872,0.688889,0.618064,0.047662,0.070844,-0.005308, -0.334717,0.71131,0.618064,0.048617,0.07133,-0.005308, -0.411421,0.748373,0.52026,0.04762,0.07092,-0.005434, -0.334717,0.71131,0.618064,0.048617,0.07133,-0.005308, -0.363619,0.77273,0.52026,0.04858,0.07141,-0.005434, -0.4576,0.721063,0.52026,0.046692,0.070372,-0.005434, -0.421228,0.66375,0.618064,0.046739,0.070298,-0.005308, -0.37872,0.688889,0.618064,0.047662,0.070844,-0.005308, -0.4576,0.721063,0.52026,0.046692,0.070372,-0.005434, -0.37872,0.688889,0.618064,0.047662,0.070844,-0.005308, -0.411421,0.748373,0.52026,0.04762,0.07092,-0.005434, -0.501973,0.690907,0.52026,0.045801,0.069766,-0.005434, -0.462074,0.635991,0.618064,0.045852,0.069695,-0.005308, -0.421228,0.66375,0.618064,0.046739,0.070298,-0.005308, -0.501973,0.690907,0.52026,0.045801,0.069766,-0.005434, -0.421228,0.66375,0.618064,0.046739,0.070298,-0.005308, -0.4576,0.721063,0.52026,0.046692,0.070372,-0.005434, -0.544365,0.658024,0.52026,0.044949,0.069105,-0.005434, -0.501097,0.605722,0.618064,0.045005,0.069038,-0.005308, -0.462074,0.635991,0.618064,0.045852,0.069695,-0.005308, -0.544365,0.658024,0.52026,0.044949,0.069105,-0.005434, -0.462074,0.635991,0.618064,0.045852,0.069695,-0.005308, -0.501973,0.690907,0.52026,0.045801,0.069766,-0.005434, -0.584609,0.622545,0.52026,0.04414,0.068392,-0.005434, -0.538141,0.573062,0.618064,0.0442,0.068329,-0.005308, -0.501097,0.605722,0.618064,0.045005,0.069038,-0.005308, -0.584609,0.622545,0.52026,0.04414,0.068392,-0.005434, -0.501097,0.605722,0.618064,0.045005,0.069038,-0.005308, -0.544365,0.658024,0.52026,0.044949,0.069105,-0.005434, -0.622545,0.584609,0.52026,0.043378,0.06763,-0.005434, -0.573062,0.538141,0.618064,0.043442,0.06757,-0.005308, -0.538141,0.573062,0.618064,0.0442,0.068329,-0.005308, -0.622545,0.584609,0.52026,0.043378,0.06763,-0.005434, -0.538141,0.573062,0.618064,0.0442,0.068329,-0.005308, -0.584609,0.622545,0.52026,0.04414,0.068392,-0.005434, -0.658024,0.544365,0.52026,0.042666,0.066822,-0.005434, -0.605722,0.501097,0.618064,0.042733,0.066766,-0.005308, -0.573062,0.538141,0.618064,0.043442,0.06757,-0.005308, -0.658024,0.544365,0.52026,0.042666,0.066822,-0.005434, -0.573062,0.538141,0.618064,0.043442,0.06757,-0.005308, -0.622545,0.584609,0.52026,0.043378,0.06763,-0.005434, -0.690907,0.501973,0.52026,0.042005,0.06597,-0.005434, -0.635991,0.462074,0.618064,0.042076,0.065919,-0.005308, -0.605722,0.501097,0.618064,0.042733,0.066766,-0.005308, -0.690907,0.501973,0.52026,0.042005,0.06597,-0.005434, -0.605722,0.501097,0.618064,0.042733,0.066766,-0.005308, -0.658024,0.544365,0.52026,0.042666,0.066822,-0.005434, -0.721063,0.4576,0.52026,0.041399,0.065079,-0.005434, -0.66375,0.421228,0.618064,0.041473,0.065032,-0.005308, -0.635991,0.462074,0.618064,0.042076,0.065919,-0.005308, -0.721063,0.4576,0.52026,0.041399,0.065079,-0.005434, -0.635991,0.462074,0.618064,0.042076,0.065919,-0.005308, -0.690907,0.501973,0.52026,0.042005,0.06597,-0.005434, -0.748373,0.411421,0.52026,0.04085,0.064151,-0.005434, -0.688889,0.37872,0.618064,0.040927,0.064109,-0.005308, -0.66375,0.421228,0.618064,0.041473,0.065032,-0.005308, -0.748373,0.411421,0.52026,0.04085,0.064151,-0.005434, -0.66375,0.421228,0.618064,0.041473,0.065032,-0.005308, -0.721063,0.4576,0.52026,0.041399,0.065079,-0.005434, -0.77273,0.363619,0.52026,0.040361,0.06319,-0.005434, -0.71131,0.334717,0.618064,0.04044,0.063153,-0.005308, -0.688889,0.37872,0.618064,0.040927,0.064109,-0.005308, -0.77273,0.363619,0.52026,0.040361,0.06319,-0.005434, -0.688889,0.37872,0.618064,0.040927,0.064109,-0.005308, -0.748373,0.411421,0.52026,0.04085,0.064151,-0.005434, -0.794037,0.314381,0.52026,0.039933,0.062201,-0.005434, -0.730923,0.289393,0.618064,0.040014,0.062169,-0.005308, -0.71131,0.334717,0.618064,0.04044,0.063153,-0.005308, -0.794037,0.314381,0.52026,0.039933,0.062201,-0.005434, -0.71131,0.334717,0.618064,0.04044,0.063153,-0.005308, -0.77273,0.363619,0.52026,0.040361,0.06319,-0.005434, -0.81221,0.263903,0.52026,0.039568,0.061187,-0.005434, -0.747652,0.242927,0.618064,0.039651,0.06116,-0.005308, -0.730923,0.289393,0.618064,0.040014,0.062169,-0.005308, -0.81221,0.263903,0.52026,0.039568,0.061187,-0.005434, -0.730923,0.289393,0.618064,0.040014,0.062169,-0.005308, -0.794037,0.314381,0.52026,0.039933,0.062201,-0.005434, -0.827178,0.212383,0.52026,0.039267,0.060152,-0.005434, -0.76143,0.195502,0.618064,0.039352,0.06013,-0.005308, -0.747652,0.242927,0.618064,0.039651,0.06116,-0.005308, -0.827178,0.212383,0.52026,0.039267,0.060152,-0.005434, -0.747652,0.242927,0.618064,0.039651,0.06116,-0.005308, -0.81221,0.263903,0.52026,0.039568,0.061187,-0.005434, -0.838881,0.160025,0.52026,0.039032,0.0591,-0.005434, -0.772203,0.147306,0.618064,0.039118,0.059084,-0.005308, -0.76143,0.195502,0.618064,0.039352,0.06013,-0.005308, -0.838881,0.160025,0.52026,0.039032,0.0591,-0.005434, -0.76143,0.195502,0.618064,0.039352,0.06013,-0.005308, -0.827178,0.212383,0.52026,0.039267,0.060152,-0.005434, -0.847274,0.107036,0.52026,0.038863,0.058036,-0.005434, -0.779929,0.098528,0.618064,0.03895,0.058025,-0.005308, -0.772203,0.147306,0.618064,0.039118,0.059084,-0.005308, -0.847274,0.107036,0.52026,0.038863,0.058036,-0.005434, -0.772203,0.147306,0.618064,0.039118,0.059084,-0.005308, -0.838881,0.160025,0.52026,0.039032,0.0591,-0.005434, -0.852323,0.053624,0.52026,0.038762,0.056963,-0.005434, -0.784577,0.049361,0.618064,0.038849,0.056957,-0.005308, -0.779929,0.098528,0.618064,0.03895,0.058025,-0.005308, -0.852323,0.053624,0.52026,0.038762,0.056963,-0.005434, -0.779929,0.098528,0.618064,0.03895,0.058025,-0.005308, -0.847274,0.107036,0.52026,0.038863,0.058036,-0.005434, -0.854008,0,0.52026,0.038728,0.055885,-0.005434, -0.786128,0,0.618064,0.038816,0.055885,-0.005308, -0.784577,0.049361,0.618064,0.038849,0.056957,-0.005308, -0.854008,0,0.52026,0.038728,0.055885,-0.005434, -0.784577,0.049361,0.618064,0.038849,0.056957,-0.005308, -0.852323,0.053624,0.52026,0.038762,0.056963,-0.005434, -0.852323,-0.053624,0.52026,0.038762,0.054808,-0.005434, -0.784577,-0.049361,0.618064,0.038849,0.054813,-0.005308, -0.786128,0,0.618064,0.038816,0.055885,-0.005308, -0.852323,-0.053624,0.52026,0.038762,0.054808,-0.005434, -0.786128,0,0.618064,0.038816,0.055885,-0.005308, -0.854008,0,0.52026,0.038728,0.055885,-0.005434, -0.784577,-0.049361,0.618064,0.038849,0.054813,-0.005308, -0.70571,-0.0444,0.707108,0.038951,0.05482,-0.005193, -0.707106,0,0.707108,0.038917,0.055885,-0.005193, -0.784577,-0.049361,0.618064,0.038849,0.054813,-0.005308, -0.707106,0,0.707108,0.038917,0.055885,-0.005193, -0.786128,0,0.618064,0.038816,0.055885,-0.005308, -0.779929,-0.098528,0.618064,0.03895,0.053746,-0.005308, -0.70153,-0.088624,0.707108,0.039051,0.053759,-0.005193, -0.70571,-0.0444,0.707108,0.038951,0.05482,-0.005193, -0.779929,-0.098528,0.618064,0.03895,0.053746,-0.005308, -0.70571,-0.0444,0.707108,0.038951,0.05482,-0.005193, -0.784577,-0.049361,0.618064,0.038849,0.054813,-0.005308, -0.772203,-0.147306,0.618064,0.039118,0.052687,-0.005308, -0.694581,-0.132498,0.707108,0.039218,0.052706,-0.005193, -0.70153,-0.088624,0.707108,0.039051,0.053759,-0.005193, -0.772203,-0.147306,0.618064,0.039118,0.052687,-0.005308, -0.70153,-0.088624,0.707108,0.039051,0.053759,-0.005193, -0.779929,-0.098528,0.618064,0.03895,0.053746,-0.005308, -0.76143,-0.195502,0.618064,0.039352,0.05164,-0.005308, -0.684891,-0.17585,0.707108,0.03945,0.051666,-0.005193, -0.694581,-0.132498,0.707108,0.039218,0.052706,-0.005193, -0.76143,-0.195502,0.618064,0.039352,0.05164,-0.005308, -0.694581,-0.132498,0.707108,0.039218,0.052706,-0.005193, -0.772203,-0.147306,0.618064,0.039118,0.052687,-0.005308, -0.747652,-0.242927,0.618064,0.039651,0.05061,-0.005308, -0.672497,-0.218508,0.707108,0.039748,0.050642,-0.005193, -0.684891,-0.17585,0.707108,0.03945,0.051666,-0.005193, -0.747652,-0.242927,0.618064,0.039651,0.05061,-0.005308, -0.684891,-0.17585,0.707108,0.03945,0.051666,-0.005193, -0.76143,-0.195502,0.618064,0.039352,0.05164,-0.005308, -0.730923,-0.289393,0.618064,0.040014,0.049601,-0.005308, -0.65745,-0.260303,0.707108,0.040109,0.049639,-0.005193, -0.672497,-0.218508,0.707108,0.039748,0.050642,-0.005193, -0.730923,-0.289393,0.618064,0.040014,0.049601,-0.005308, -0.672497,-0.218508,0.707108,0.039748,0.050642,-0.005193, -0.747652,-0.242927,0.618064,0.039651,0.05061,-0.005308, -0.71131,-0.334717,0.618064,0.04044,0.048617,-0.005308, -0.639808,-0.301071,0.707108,0.040532,0.048661,-0.005193, -0.65745,-0.260303,0.707108,0.040109,0.049639,-0.005193, -0.71131,-0.334717,0.618064,0.04044,0.048617,-0.005308, -0.65745,-0.260303,0.707108,0.040109,0.049639,-0.005193, -0.730923,-0.289393,0.618064,0.040014,0.049601,-0.005308, -0.688889,-0.37872,0.618064,0.040927,0.047662,-0.005308, -0.619641,-0.340651,0.707108,0.041016,0.047711,-0.005193, -0.639808,-0.301071,0.707108,0.040532,0.048661,-0.005193, -0.688889,-0.37872,0.618064,0.040927,0.047662,-0.005308, -0.639808,-0.301071,0.707108,0.040532,0.048661,-0.005193, -0.71131,-0.334717,0.618064,0.04044,0.048617,-0.005308, -0.66375,-0.421228,0.618064,0.041473,0.046739,-0.005308, -0.597029,-0.378886,0.707108,0.041559,0.046793,-0.005193, -0.619641,-0.340651,0.707108,0.041016,0.047711,-0.005193, -0.66375,-0.421228,0.618064,0.041473,0.046739,-0.005308, -0.619641,-0.340651,0.707108,0.041016,0.047711,-0.005193, -0.688889,-0.37872,0.618064,0.040927,0.047662,-0.005308, -0.635991,-0.462074,0.618064,0.042076,0.045852,-0.005308, -0.57206,-0.415626,0.707108,0.042158,0.045912,-0.005193, -0.597029,-0.378886,0.707108,0.041559,0.046793,-0.005193, -0.635991,-0.462074,0.618064,0.042076,0.045852,-0.005308, -0.597029,-0.378886,0.707108,0.041559,0.046793,-0.005193, -0.66375,-0.421228,0.618064,0.041473,0.046739,-0.005308, -0.605722,-0.501097,0.618064,0.042733,0.045005,-0.005308, -0.544834,-0.450726,0.707108,0.042811,0.04507,-0.005193, -0.57206,-0.415626,0.707108,0.042158,0.045912,-0.005193, -0.605722,-0.501097,0.618064,0.042733,0.045005,-0.005308, -0.57206,-0.415626,0.707108,0.042158,0.045912,-0.005193, -0.635991,-0.462074,0.618064,0.042076,0.045852,-0.005308, -0.573062,-0.538141,0.618064,0.043442,0.0442,-0.005308, -0.515458,-0.484047,0.707108,0.043516,0.04427,-0.005193, -0.544834,-0.450726,0.707108,0.042811,0.04507,-0.005193, -0.573062,-0.538141,0.618064,0.043442,0.0442,-0.005308, -0.544834,-0.450726,0.707108,0.042811,0.04507,-0.005193, -0.605722,-0.501097,0.618064,0.042733,0.045005,-0.005308, -0.538141,-0.573062,0.618064,0.0442,0.043442,-0.005308, -0.484047,-0.515458,0.707108,0.04427,0.043516,-0.005193, -0.515458,-0.484047,0.707108,0.043516,0.04427,-0.005193, -0.538141,-0.573062,0.618064,0.0442,0.043442,-0.005308, -0.515458,-0.484047,0.707108,0.043516,0.04427,-0.005193, -0.573062,-0.538141,0.618064,0.043442,0.0442,-0.005308, -0.501097,-0.605722,0.618064,0.045005,0.042733,-0.005308, -0.450726,-0.544834,0.707108,0.04507,0.042811,-0.005193, -0.484047,-0.515458,0.707108,0.04427,0.043516,-0.005193, -0.501097,-0.605722,0.618064,0.045005,0.042733,-0.005308, -0.484047,-0.515458,0.707108,0.04427,0.043516,-0.005193, -0.538141,-0.573062,0.618064,0.0442,0.043442,-0.005308, -0.462074,-0.635991,0.618064,0.045852,0.042076,-0.005308, -0.415626,-0.57206,0.707108,0.045912,0.042158,-0.005193, -0.450726,-0.544834,0.707108,0.04507,0.042811,-0.005193, -0.462074,-0.635991,0.618064,0.045852,0.042076,-0.005308, -0.450726,-0.544834,0.707108,0.04507,0.042811,-0.005193, -0.501097,-0.605722,0.618064,0.045005,0.042733,-0.005308, -0.421228,-0.66375,0.618064,0.046739,0.041473,-0.005308, -0.378886,-0.597029,0.707108,0.046793,0.041559,-0.005193, -0.415626,-0.57206,0.707108,0.045912,0.042158,-0.005193, -0.421228,-0.66375,0.618064,0.046739,0.041473,-0.005308, -0.415626,-0.57206,0.707108,0.045912,0.042158,-0.005193, -0.462074,-0.635991,0.618064,0.045852,0.042076,-0.005308, -0.37872,-0.688889,0.618064,0.047662,0.040927,-0.005308, -0.340651,-0.619641,0.707108,0.047711,0.041016,-0.005193, -0.378886,-0.597029,0.707108,0.046793,0.041559,-0.005193, -0.37872,-0.688889,0.618064,0.047662,0.040927,-0.005308, -0.378886,-0.597029,0.707108,0.046793,0.041559,-0.005193, -0.421228,-0.66375,0.618064,0.046739,0.041473,-0.005308, -0.334717,-0.71131,0.618064,0.048617,0.04044,-0.005308, -0.301071,-0.639808,0.707108,0.048661,0.040532,-0.005193, -0.340651,-0.619641,0.707108,0.047711,0.041016,-0.005193, -0.334717,-0.71131,0.618064,0.048617,0.04044,-0.005308, -0.340651,-0.619641,0.707108,0.047711,0.041016,-0.005193, -0.37872,-0.688889,0.618064,0.047662,0.040927,-0.005308, -0.289393,-0.730923,0.618064,0.049601,0.040014,-0.005308, -0.260303,-0.65745,0.707108,0.049639,0.040109,-0.005193, -0.301071,-0.639808,0.707108,0.048661,0.040532,-0.005193, -0.289393,-0.730923,0.618064,0.049601,0.040014,-0.005308, -0.301071,-0.639808,0.707108,0.048661,0.040532,-0.005193, -0.334717,-0.71131,0.618064,0.048617,0.04044,-0.005308, -0.242927,-0.747652,0.618064,0.05061,0.039651,-0.005308, -0.218508,-0.672497,0.707108,0.050642,0.039748,-0.005193, -0.260303,-0.65745,0.707108,0.049639,0.040109,-0.005193, -0.242927,-0.747652,0.618064,0.05061,0.039651,-0.005308, -0.260303,-0.65745,0.707108,0.049639,0.040109,-0.005193, -0.289393,-0.730923,0.618064,0.049601,0.040014,-0.005308, -0.195502,-0.76143,0.618064,0.05164,0.039352,-0.005308, -0.17585,-0.684891,0.707108,0.051666,0.03945,-0.005193, -0.218508,-0.672497,0.707108,0.050642,0.039748,-0.005193, -0.195502,-0.76143,0.618064,0.05164,0.039352,-0.005308, -0.218508,-0.672497,0.707108,0.050642,0.039748,-0.005193, -0.242927,-0.747652,0.618064,0.05061,0.039651,-0.005308, -0.147306,-0.772203,0.618064,0.052687,0.039118,-0.005308, -0.132498,-0.694581,0.707108,0.052706,0.039218,-0.005193, -0.17585,-0.684891,0.707108,0.051666,0.03945,-0.005193, -0.147306,-0.772203,0.618064,0.052687,0.039118,-0.005308, -0.17585,-0.684891,0.707108,0.051666,0.03945,-0.005193, -0.195502,-0.76143,0.618064,0.05164,0.039352,-0.005308, -0.098528,-0.779929,0.618064,0.053746,0.03895,-0.005308, -0.088624,-0.70153,0.707108,0.053759,0.039051,-0.005193, -0.132498,-0.694581,0.707108,0.052706,0.039218,-0.005193, -0.098528,-0.779929,0.618064,0.053746,0.03895,-0.005308, -0.132498,-0.694581,0.707108,0.052706,0.039218,-0.005193, -0.147306,-0.772203,0.618064,0.052687,0.039118,-0.005308, -0.049361,-0.784577,0.618064,0.054813,0.038849,-0.005308, -0.0444,-0.70571,0.707108,0.05482,0.038951,-0.005193, -0.088624,-0.70153,0.707108,0.053759,0.039051,-0.005193, -0.049361,-0.784577,0.618064,0.054813,0.038849,-0.005308, -0.088624,-0.70153,0.707108,0.053759,0.039051,-0.005193, -0.098528,-0.779929,0.618064,0.053746,0.03895,-0.005308, 0,-0.786128,0.618064,0.055885,0.038816,-0.005308, 0,-0.707106,0.707108,0.055885,0.038917,-0.005193, -0.0444,-0.70571,0.707108,0.05482,0.038951,-0.005193, 0,-0.786128,0.618064,0.055885,0.038816,-0.005308, -0.0444,-0.70571,0.707108,0.05482,0.038951,-0.005193, -0.049361,-0.784577,0.618064,0.054813,0.038849,-0.005308, 0.049361,-0.784577,0.618064,0.056957,0.038849,-0.005308, 0.0444,-0.70571,0.707108,0.056951,0.038951,-0.005193, 0,-0.707106,0.707108,0.055885,0.038917,-0.005193, 0.049361,-0.784577,0.618064,0.056957,0.038849,-0.005308, 0,-0.707106,0.707108,0.055885,0.038917,-0.005193, 0,-0.786128,0.618064,0.055885,0.038816,-0.005308, 0.098528,-0.779929,0.618064,0.058025,0.03895,-0.005308, 0.088624,-0.70153,0.707108,0.058012,0.039051,-0.005193, 0.0444,-0.70571,0.707108,0.056951,0.038951,-0.005193, 0.098528,-0.779929,0.618064,0.058025,0.03895,-0.005308, 0.0444,-0.70571,0.707108,0.056951,0.038951,-0.005193, 0.049361,-0.784577,0.618064,0.056957,0.038849,-0.005308, 0.147306,-0.772203,0.618064,0.059084,0.039118,-0.005308, 0.132498,-0.694581,0.707108,0.059065,0.039218,-0.005193, 0.088624,-0.70153,0.707108,0.058012,0.039051,-0.005193, 0.147306,-0.772203,0.618064,0.059084,0.039118,-0.005308, 0.088624,-0.70153,0.707108,0.058012,0.039051,-0.005193, 0.098528,-0.779929,0.618064,0.058025,0.03895,-0.005308, 0.195502,-0.76143,0.618064,0.06013,0.039352,-0.005308, 0.17585,-0.684891,0.707108,0.060105,0.03945,-0.005193, 0.132498,-0.694581,0.707108,0.059065,0.039218,-0.005193, 0.195502,-0.76143,0.618064,0.06013,0.039352,-0.005308, 0.132498,-0.694581,0.707108,0.059065,0.039218,-0.005193, 0.147306,-0.772203,0.618064,0.059084,0.039118,-0.005308, 0.242927,-0.747652,0.618064,0.06116,0.039651,-0.005308, 0.218508,-0.672497,0.707108,0.061129,0.039748,-0.005193, 0.17585,-0.684891,0.707108,0.060105,0.03945,-0.005193, 0.242927,-0.747652,0.618064,0.06116,0.039651,-0.005308, 0.17585,-0.684891,0.707108,0.060105,0.03945,-0.005193, 0.195502,-0.76143,0.618064,0.06013,0.039352,-0.005308, 0.289393,-0.730923,0.618064,0.062169,0.040014,-0.005308, 0.260303,-0.65745,0.707108,0.062132,0.040109,-0.005193, 0.218508,-0.672497,0.707108,0.061129,0.039748,-0.005193, 0.289393,-0.730923,0.618064,0.062169,0.040014,-0.005308, 0.218508,-0.672497,0.707108,0.061129,0.039748,-0.005193, 0.242927,-0.747652,0.618064,0.06116,0.039651,-0.005308, 0.334717,-0.71131,0.618064,0.063153,0.04044,-0.005308, 0.301071,-0.639808,0.707108,0.06311,0.040532,-0.005193, 0.260303,-0.65745,0.707108,0.062132,0.040109,-0.005193, 0.334717,-0.71131,0.618064,0.063153,0.04044,-0.005308, 0.260303,-0.65745,0.707108,0.062132,0.040109,-0.005193, 0.289393,-0.730923,0.618064,0.062169,0.040014,-0.005308, 0.37872,-0.688889,0.618064,0.064109,0.040927,-0.005308, 0.340651,-0.619641,0.707108,0.06406,0.041016,-0.005193, 0.301071,-0.639808,0.707108,0.06311,0.040532,-0.005193, 0.37872,-0.688889,0.618064,0.064109,0.040927,-0.005308, 0.301071,-0.639808,0.707108,0.06311,0.040532,-0.005193, 0.334717,-0.71131,0.618064,0.063153,0.04044,-0.005308, 0.421228,-0.66375,0.618064,0.065032,0.041473,-0.005308, 0.378886,-0.597029,0.707108,0.064977,0.041559,-0.005193, 0.340651,-0.619641,0.707108,0.06406,0.041016,-0.005193, 0.421228,-0.66375,0.618064,0.065032,0.041473,-0.005308, 0.340651,-0.619641,0.707108,0.06406,0.041016,-0.005193, 0.37872,-0.688889,0.618064,0.064109,0.040927,-0.005308, 0.462074,-0.635991,0.618064,0.065919,0.042076,-0.005308, 0.415626,-0.57206,0.707108,0.065859,0.042158,-0.005193, 0.378886,-0.597029,0.707108,0.064977,0.041559,-0.005193, 0.462074,-0.635991,0.618064,0.065919,0.042076,-0.005308, 0.378886,-0.597029,0.707108,0.064977,0.041559,-0.005193, 0.421228,-0.66375,0.618064,0.065032,0.041473,-0.005308, 0.501097,-0.605722,0.618064,0.066766,0.042733,-0.005308, 0.450726,-0.544834,0.707108,0.066701,0.042811,-0.005193, 0.415626,-0.57206,0.707108,0.065859,0.042158,-0.005193, 0.501097,-0.605722,0.618064,0.066766,0.042733,-0.005308, 0.415626,-0.57206,0.707108,0.065859,0.042158,-0.005193, 0.462074,-0.635991,0.618064,0.065919,0.042076,-0.005308, 0.538141,-0.573062,0.618064,0.06757,0.043442,-0.005308, 0.484047,-0.515458,0.707108,0.067501,0.043516,-0.005193, 0.450726,-0.544834,0.707108,0.066701,0.042811,-0.005193, 0.538141,-0.573062,0.618064,0.06757,0.043442,-0.005308, 0.450726,-0.544834,0.707108,0.066701,0.042811,-0.005193, 0.501097,-0.605722,0.618064,0.066766,0.042733,-0.005308, 0.573062,-0.538141,0.618064,0.068329,0.0442,-0.005308, 0.515458,-0.484047,0.707108,0.068254,0.04427,-0.005193, 0.484047,-0.515458,0.707108,0.067501,0.043516,-0.005193, 0.573062,-0.538141,0.618064,0.068329,0.0442,-0.005308, 0.484047,-0.515458,0.707108,0.067501,0.043516,-0.005193, 0.538141,-0.573062,0.618064,0.06757,0.043442,-0.005308, 0.605722,-0.501097,0.618064,0.069038,0.045005,-0.005308, 0.544834,-0.450726,0.707108,0.068959,0.04507,-0.005193, 0.515458,-0.484047,0.707108,0.068254,0.04427,-0.005193, 0.605722,-0.501097,0.618064,0.069038,0.045005,-0.005308, 0.515458,-0.484047,0.707108,0.068254,0.04427,-0.005193, 0.573062,-0.538141,0.618064,0.068329,0.0442,-0.005308, 0.635991,-0.462074,0.618064,0.069695,0.045852,-0.005308, 0.57206,-0.415626,0.707108,0.069613,0.045912,-0.005193, 0.544834,-0.450726,0.707108,0.068959,0.04507,-0.005193, 0.635991,-0.462074,0.618064,0.069695,0.045852,-0.005308, 0.544834,-0.450726,0.707108,0.068959,0.04507,-0.005193, 0.605722,-0.501097,0.618064,0.069038,0.045005,-0.005308, 0.66375,-0.421228,0.618064,0.070298,0.046739,-0.005308, 0.597029,-0.378886,0.707108,0.070212,0.046793,-0.005193, 0.57206,-0.415626,0.707108,0.069613,0.045912,-0.005193, 0.66375,-0.421228,0.618064,0.070298,0.046739,-0.005308, 0.57206,-0.415626,0.707108,0.069613,0.045912,-0.005193, 0.635991,-0.462074,0.618064,0.069695,0.045852,-0.005308, 0.688889,-0.37872,0.618064,0.070844,0.047662,-0.005308, 0.619641,-0.340651,0.707108,0.070754,0.047711,-0.005193, 0.597029,-0.378886,0.707108,0.070212,0.046793,-0.005193, 0.688889,-0.37872,0.618064,0.070844,0.047662,-0.005308, 0.597029,-0.378886,0.707108,0.070212,0.046793,-0.005193, 0.66375,-0.421228,0.618064,0.070298,0.046739,-0.005308, 0.71131,-0.334717,0.618064,0.07133,0.048617,-0.005308, 0.639808,-0.301071,0.707108,0.071238,0.048661,-0.005193, 0.619641,-0.340651,0.707108,0.070754,0.047711,-0.005193, 0.71131,-0.334717,0.618064,0.07133,0.048617,-0.005308, 0.619641,-0.340651,0.707108,0.070754,0.047711,-0.005193, 0.688889,-0.37872,0.618064,0.070844,0.047662,-0.005308, 0.730923,-0.289393,0.618064,0.071756,0.049601,-0.005308, 0.65745,-0.260303,0.707108,0.071662,0.049639,-0.005193, 0.639808,-0.301071,0.707108,0.071238,0.048661,-0.005193, 0.730923,-0.289393,0.618064,0.071756,0.049601,-0.005308, 0.639808,-0.301071,0.707108,0.071238,0.048661,-0.005193, 0.71131,-0.334717,0.618064,0.07133,0.048617,-0.005308, 0.747652,-0.242927,0.618064,0.07212,0.05061,-0.005308, 0.672497,-0.218508,0.707108,0.072023,0.050642,-0.005193, 0.65745,-0.260303,0.707108,0.071662,0.049639,-0.005193, 0.747652,-0.242927,0.618064,0.07212,0.05061,-0.005308, 0.65745,-0.260303,0.707108,0.071662,0.049639,-0.005193, 0.730923,-0.289393,0.618064,0.071756,0.049601,-0.005308, 0.76143,-0.195502,0.618064,0.072419,0.05164,-0.005308, 0.684891,-0.17585,0.707108,0.07232,0.051666,-0.005193, 0.672497,-0.218508,0.707108,0.072023,0.050642,-0.005193, 0.76143,-0.195502,0.618064,0.072419,0.05164,-0.005308, 0.672497,-0.218508,0.707108,0.072023,0.050642,-0.005193, 0.747652,-0.242927,0.618064,0.07212,0.05061,-0.005308, 0.772203,-0.147306,0.618064,0.072653,0.052687,-0.005308, 0.694581,-0.132498,0.707108,0.072553,0.052706,-0.005193, 0.684891,-0.17585,0.707108,0.07232,0.051666,-0.005193, 0.772203,-0.147306,0.618064,0.072653,0.052687,-0.005308, 0.684891,-0.17585,0.707108,0.07232,0.051666,-0.005193, 0.76143,-0.195502,0.618064,0.072419,0.05164,-0.005308, 0.779929,-0.098528,0.618064,0.07282,0.053746,-0.005308, 0.70153,-0.088624,0.707108,0.072719,0.053759,-0.005193, 0.694581,-0.132498,0.707108,0.072553,0.052706,-0.005193, 0.779929,-0.098528,0.618064,0.07282,0.053746,-0.005308, 0.694581,-0.132498,0.707108,0.072553,0.052706,-0.005193, 0.772203,-0.147306,0.618064,0.072653,0.052687,-0.005308, 0.784577,-0.049361,0.618064,0.072921,0.054813,-0.005308, 0.70571,-0.0444,0.707108,0.07282,0.05482,-0.005193, 0.70153,-0.088624,0.707108,0.072719,0.053759,-0.005193, 0.784577,-0.049361,0.618064,0.072921,0.054813,-0.005308, 0.70153,-0.088624,0.707108,0.072719,0.053759,-0.005193, 0.779929,-0.098528,0.618064,0.07282,0.053746,-0.005308, 0.786128,0,0.618064,0.072955,0.055885,-0.005308, 0.707106,0,0.707108,0.072853,0.055885,-0.005193, 0.70571,-0.0444,0.707108,0.07282,0.05482,-0.005193, 0.786128,0,0.618064,0.072955,0.055885,-0.005308, 0.70571,-0.0444,0.707108,0.07282,0.05482,-0.005193, 0.784577,-0.049361,0.618064,0.072921,0.054813,-0.005308, 0.784577,0.049361,0.618064,0.072921,0.056957,-0.005308, 0.70571,0.0444,0.707108,0.07282,0.056951,-0.005193, 0.707106,0,0.707108,0.072853,0.055885,-0.005193, 0.784577,0.049361,0.618064,0.072921,0.056957,-0.005308, 0.707106,0,0.707108,0.072853,0.055885,-0.005193, 0.786128,0,0.618064,0.072955,0.055885,-0.005308, 0.779929,0.098528,0.618064,0.07282,0.058025,-0.005308, 0.70153,0.088624,0.707108,0.072719,0.058012,-0.005193, 0.70571,0.0444,0.707108,0.07282,0.056951,-0.005193, 0.779929,0.098528,0.618064,0.07282,0.058025,-0.005308, 0.70571,0.0444,0.707108,0.07282,0.056951,-0.005193, 0.784577,0.049361,0.618064,0.072921,0.056957,-0.005308, 0.772203,0.147306,0.618064,0.072653,0.059084,-0.005308, 0.694581,0.132498,0.707108,0.072553,0.059065,-0.005193, 0.70153,0.088624,0.707108,0.072719,0.058012,-0.005193, 0.772203,0.147306,0.618064,0.072653,0.059084,-0.005308, 0.70153,0.088624,0.707108,0.072719,0.058012,-0.005193, 0.779929,0.098528,0.618064,0.07282,0.058025,-0.005308, 0.76143,0.195502,0.618064,0.072419,0.06013,-0.005308, 0.684891,0.17585,0.707108,0.07232,0.060105,-0.005193, 0.694581,0.132498,0.707108,0.072553,0.059065,-0.005193, 0.76143,0.195502,0.618064,0.072419,0.06013,-0.005308, 0.694581,0.132498,0.707108,0.072553,0.059065,-0.005193, 0.772203,0.147306,0.618064,0.072653,0.059084,-0.005308, 0.747652,0.242927,0.618064,0.07212,0.06116,-0.005308, 0.672497,0.218508,0.707108,0.072023,0.061129,-0.005193, 0.684891,0.17585,0.707108,0.07232,0.060105,-0.005193, 0.747652,0.242927,0.618064,0.07212,0.06116,-0.005308, 0.684891,0.17585,0.707108,0.07232,0.060105,-0.005193, 0.76143,0.195502,0.618064,0.072419,0.06013,-0.005308, 0.730923,0.289393,0.618064,0.071756,0.062169,-0.005308, 0.65745,0.260303,0.707108,0.071662,0.062132,-0.005193, 0.672497,0.218508,0.707108,0.072023,0.061129,-0.005193, 0.730923,0.289393,0.618064,0.071756,0.062169,-0.005308, 0.672497,0.218508,0.707108,0.072023,0.061129,-0.005193, 0.747652,0.242927,0.618064,0.07212,0.06116,-0.005308, 0.71131,0.334717,0.618064,0.07133,0.063153,-0.005308, 0.639808,0.301071,0.707108,0.071238,0.06311,-0.005193, 0.65745,0.260303,0.707108,0.071662,0.062132,-0.005193, 0.71131,0.334717,0.618064,0.07133,0.063153,-0.005308, 0.65745,0.260303,0.707108,0.071662,0.062132,-0.005193, 0.730923,0.289393,0.618064,0.071756,0.062169,-0.005308, 0.688889,0.37872,0.618064,0.070844,0.064109,-0.005308, 0.619641,0.340651,0.707108,0.070754,0.06406,-0.005193, 0.639808,0.301071,0.707108,0.071238,0.06311,-0.005193, 0.688889,0.37872,0.618064,0.070844,0.064109,-0.005308, 0.639808,0.301071,0.707108,0.071238,0.06311,-0.005193, 0.71131,0.334717,0.618064,0.07133,0.063153,-0.005308, 0.66375,0.421228,0.618064,0.070298,0.065032,-0.005308, 0.597029,0.378886,0.707108,0.070212,0.064977,-0.005193, 0.619641,0.340651,0.707108,0.070754,0.06406,-0.005193, 0.66375,0.421228,0.618064,0.070298,0.065032,-0.005308, 0.619641,0.340651,0.707108,0.070754,0.06406,-0.005193, 0.688889,0.37872,0.618064,0.070844,0.064109,-0.005308, 0.635991,0.462074,0.618064,0.069695,0.065919,-0.005308, 0.57206,0.415626,0.707108,0.069613,0.065859,-0.005193, 0.597029,0.378886,0.707108,0.070212,0.064977,-0.005193, 0.635991,0.462074,0.618064,0.069695,0.065919,-0.005308, 0.597029,0.378886,0.707108,0.070212,0.064977,-0.005193, 0.66375,0.421228,0.618064,0.070298,0.065032,-0.005308, 0.605722,0.501097,0.618064,0.069038,0.066766,-0.005308, 0.544834,0.450726,0.707108,0.068959,0.066701,-0.005193, 0.57206,0.415626,0.707108,0.069613,0.065859,-0.005193, 0.605722,0.501097,0.618064,0.069038,0.066766,-0.005308, 0.57206,0.415626,0.707108,0.069613,0.065859,-0.005193, 0.635991,0.462074,0.618064,0.069695,0.065919,-0.005308, 0.573062,0.538141,0.618064,0.068329,0.06757,-0.005308, 0.515458,0.484047,0.707108,0.068254,0.067501,-0.005193, 0.544834,0.450726,0.707108,0.068959,0.066701,-0.005193, 0.573062,0.538141,0.618064,0.068329,0.06757,-0.005308, 0.544834,0.450726,0.707108,0.068959,0.066701,-0.005193, 0.605722,0.501097,0.618064,0.069038,0.066766,-0.005308, 0.538141,0.573062,0.618064,0.06757,0.068329,-0.005308, 0.484047,0.515458,0.707108,0.067501,0.068254,-0.005193, 0.515458,0.484047,0.707108,0.068254,0.067501,-0.005193, 0.538141,0.573062,0.618064,0.06757,0.068329,-0.005308, 0.515458,0.484047,0.707108,0.068254,0.067501,-0.005193, 0.573062,0.538141,0.618064,0.068329,0.06757,-0.005308, 0.501097,0.605722,0.618064,0.066766,0.069038,-0.005308, 0.450726,0.544834,0.707108,0.066701,0.068959,-0.005193, 0.484047,0.515458,0.707108,0.067501,0.068254,-0.005193, 0.501097,0.605722,0.618064,0.066766,0.069038,-0.005308, 0.484047,0.515458,0.707108,0.067501,0.068254,-0.005193, 0.538141,0.573062,0.618064,0.06757,0.068329,-0.005308, 0.462074,0.635991,0.618064,0.065919,0.069695,-0.005308, 0.415626,0.57206,0.707108,0.065859,0.069613,-0.005193, 0.450726,0.544834,0.707108,0.066701,0.068959,-0.005193, 0.462074,0.635991,0.618064,0.065919,0.069695,-0.005308, 0.450726,0.544834,0.707108,0.066701,0.068959,-0.005193, 0.501097,0.605722,0.618064,0.066766,0.069038,-0.005308, 0.421228,0.66375,0.618064,0.065032,0.070298,-0.005308, 0.378886,0.597029,0.707108,0.064977,0.070212,-0.005193, 0.415626,0.57206,0.707108,0.065859,0.069613,-0.005193, 0.421228,0.66375,0.618064,0.065032,0.070298,-0.005308, 0.415626,0.57206,0.707108,0.065859,0.069613,-0.005193, 0.462074,0.635991,0.618064,0.065919,0.069695,-0.005308, 0.37872,0.688889,0.618064,0.064109,0.070844,-0.005308, 0.340651,0.619641,0.707108,0.06406,0.070754,-0.005193, 0.378886,0.597029,0.707108,0.064977,0.070212,-0.005193, 0.37872,0.688889,0.618064,0.064109,0.070844,-0.005308, 0.378886,0.597029,0.707108,0.064977,0.070212,-0.005193, 0.421228,0.66375,0.618064,0.065032,0.070298,-0.005308, 0.334717,0.71131,0.618064,0.063153,0.07133,-0.005308, 0.301071,0.639808,0.707108,0.06311,0.071238,-0.005193, 0.340651,0.619641,0.707108,0.06406,0.070754,-0.005193, 0.334717,0.71131,0.618064,0.063153,0.07133,-0.005308, 0.340651,0.619641,0.707108,0.06406,0.070754,-0.005193, 0.37872,0.688889,0.618064,0.064109,0.070844,-0.005308, 0.289393,0.730923,0.618064,0.062169,0.071756,-0.005308, 0.260303,0.65745,0.707108,0.062132,0.071662,-0.005193, 0.301071,0.639808,0.707108,0.06311,0.071238,-0.005193, 0.289393,0.730923,0.618064,0.062169,0.071756,-0.005308, 0.301071,0.639808,0.707108,0.06311,0.071238,-0.005193, 0.334717,0.71131,0.618064,0.063153,0.07133,-0.005308, 0.242927,0.747652,0.618064,0.06116,0.07212,-0.005308, 0.218508,0.672497,0.707108,0.061129,0.072023,-0.005193, 0.260303,0.65745,0.707108,0.062132,0.071662,-0.005193, 0.242927,0.747652,0.618064,0.06116,0.07212,-0.005308, 0.260303,0.65745,0.707108,0.062132,0.071662,-0.005193, 0.289393,0.730923,0.618064,0.062169,0.071756,-0.005308, 0.195502,0.76143,0.618064,0.06013,0.072419,-0.005308, 0.17585,0.684891,0.707108,0.060105,0.07232,-0.005193, 0.218508,0.672497,0.707108,0.061129,0.072023,-0.005193, 0.195502,0.76143,0.618064,0.06013,0.072419,-0.005308, 0.218508,0.672497,0.707108,0.061129,0.072023,-0.005193, 0.242927,0.747652,0.618064,0.06116,0.07212,-0.005308, 0.147306,0.772203,0.618064,0.059084,0.072653,-0.005308, 0.132498,0.694581,0.707108,0.059065,0.072553,-0.005193, 0.17585,0.684891,0.707108,0.060105,0.07232,-0.005193, 0.147306,0.772203,0.618064,0.059084,0.072653,-0.005308, 0.17585,0.684891,0.707108,0.060105,0.07232,-0.005193, 0.195502,0.76143,0.618064,0.06013,0.072419,-0.005308, 0.098528,0.779929,0.618064,0.058025,0.07282,-0.005308, 0.088624,0.70153,0.707108,0.058012,0.072719,-0.005193, 0.132498,0.694581,0.707108,0.059065,0.072553,-0.005193, 0.098528,0.779929,0.618064,0.058025,0.07282,-0.005308, 0.132498,0.694581,0.707108,0.059065,0.072553,-0.005193, 0.147306,0.772203,0.618064,0.059084,0.072653,-0.005308, 0.049361,0.784577,0.618064,0.056957,0.072921,-0.005308, 0.0444,0.70571,0.707108,0.056951,0.07282,-0.005193, 0.088624,0.70153,0.707108,0.058012,0.072719,-0.005193, 0.049361,0.784577,0.618064,0.056957,0.072921,-0.005308, 0.088624,0.70153,0.707108,0.058012,0.072719,-0.005193, 0.098528,0.779929,0.618064,0.058025,0.07282,-0.005308, 0,0.786128,0.618064,0.055885,0.072955,-0.005308, 0,0.707106,0.707108,0.055885,0.072853,-0.005193, 0.0444,0.70571,0.707108,0.056951,0.07282,-0.005193, 0,0.786128,0.618064,0.055885,0.072955,-0.005308, 0.0444,0.70571,0.707108,0.056951,0.07282,-0.005193, 0.049361,0.784577,0.618064,0.056957,0.072921,-0.005308, -0.049361,0.784577,0.618064,0.054813,0.072921,-0.005308, -0.0444,0.70571,0.707108,0.05482,0.07282,-0.005193, 0,0.707106,0.707108,0.055885,0.072853,-0.005193, -0.049361,0.784577,0.618064,0.054813,0.072921,-0.005308, 0,0.707106,0.707108,0.055885,0.072853,-0.005193, 0,0.786128,0.618064,0.055885,0.072955,-0.005308, -0.098528,0.779929,0.618064,0.053746,0.07282,-0.005308, -0.088624,0.70153,0.707108,0.053759,0.072719,-0.005193, -0.0444,0.70571,0.707108,0.05482,0.07282,-0.005193, -0.098528,0.779929,0.618064,0.053746,0.07282,-0.005308, -0.0444,0.70571,0.707108,0.05482,0.07282,-0.005193, -0.049361,0.784577,0.618064,0.054813,0.072921,-0.005308, -0.147306,0.772203,0.618064,0.052687,0.072653,-0.005308, -0.132498,0.694581,0.707108,0.052706,0.072553,-0.005193, -0.088624,0.70153,0.707108,0.053759,0.072719,-0.005193, -0.147306,0.772203,0.618064,0.052687,0.072653,-0.005308, -0.088624,0.70153,0.707108,0.053759,0.072719,-0.005193, -0.098528,0.779929,0.618064,0.053746,0.07282,-0.005308, -0.195502,0.76143,0.618064,0.05164,0.072419,-0.005308, -0.17585,0.684891,0.707108,0.051666,0.07232,-0.005193, -0.132498,0.694581,0.707108,0.052706,0.072553,-0.005193, -0.195502,0.76143,0.618064,0.05164,0.072419,-0.005308, -0.132498,0.694581,0.707108,0.052706,0.072553,-0.005193, -0.147306,0.772203,0.618064,0.052687,0.072653,-0.005308, -0.242927,0.747652,0.618064,0.05061,0.07212,-0.005308, -0.218508,0.672497,0.707108,0.050642,0.072023,-0.005193, -0.17585,0.684891,0.707108,0.051666,0.07232,-0.005193, -0.242927,0.747652,0.618064,0.05061,0.07212,-0.005308, -0.17585,0.684891,0.707108,0.051666,0.07232,-0.005193, -0.195502,0.76143,0.618064,0.05164,0.072419,-0.005308, -0.289393,0.730923,0.618064,0.049601,0.071756,-0.005308, -0.260303,0.65745,0.707108,0.049639,0.071662,-0.005193, -0.218508,0.672497,0.707108,0.050642,0.072023,-0.005193, -0.289393,0.730923,0.618064,0.049601,0.071756,-0.005308, -0.218508,0.672497,0.707108,0.050642,0.072023,-0.005193, -0.242927,0.747652,0.618064,0.05061,0.07212,-0.005308, -0.334717,0.71131,0.618064,0.048617,0.07133,-0.005308, -0.301071,0.639808,0.707108,0.048661,0.071238,-0.005193, -0.260303,0.65745,0.707108,0.049639,0.071662,-0.005193, -0.334717,0.71131,0.618064,0.048617,0.07133,-0.005308, -0.260303,0.65745,0.707108,0.049639,0.071662,-0.005193, -0.289393,0.730923,0.618064,0.049601,0.071756,-0.005308, -0.37872,0.688889,0.618064,0.047662,0.070844,-0.005308, -0.340651,0.619641,0.707108,0.047711,0.070754,-0.005193, -0.301071,0.639808,0.707108,0.048661,0.071238,-0.005193, -0.37872,0.688889,0.618064,0.047662,0.070844,-0.005308, -0.301071,0.639808,0.707108,0.048661,0.071238,-0.005193, -0.334717,0.71131,0.618064,0.048617,0.07133,-0.005308, -0.421228,0.66375,0.618064,0.046739,0.070298,-0.005308, -0.378886,0.597029,0.707108,0.046793,0.070212,-0.005193, -0.340651,0.619641,0.707108,0.047711,0.070754,-0.005193, -0.421228,0.66375,0.618064,0.046739,0.070298,-0.005308, -0.340651,0.619641,0.707108,0.047711,0.070754,-0.005193, -0.37872,0.688889,0.618064,0.047662,0.070844,-0.005308, -0.462074,0.635991,0.618064,0.045852,0.069695,-0.005308, -0.415626,0.57206,0.707108,0.045912,0.069613,-0.005193, -0.378886,0.597029,0.707108,0.046793,0.070212,-0.005193, -0.462074,0.635991,0.618064,0.045852,0.069695,-0.005308, -0.378886,0.597029,0.707108,0.046793,0.070212,-0.005193, -0.421228,0.66375,0.618064,0.046739,0.070298,-0.005308, -0.501097,0.605722,0.618064,0.045005,0.069038,-0.005308, -0.450726,0.544834,0.707108,0.04507,0.068959,-0.005193, -0.415626,0.57206,0.707108,0.045912,0.069613,-0.005193, -0.501097,0.605722,0.618064,0.045005,0.069038,-0.005308, -0.415626,0.57206,0.707108,0.045912,0.069613,-0.005193, -0.462074,0.635991,0.618064,0.045852,0.069695,-0.005308, -0.538141,0.573062,0.618064,0.0442,0.068329,-0.005308, -0.484047,0.515458,0.707108,0.04427,0.068254,-0.005193, -0.450726,0.544834,0.707108,0.04507,0.068959,-0.005193, -0.538141,0.573062,0.618064,0.0442,0.068329,-0.005308, -0.450726,0.544834,0.707108,0.04507,0.068959,-0.005193, -0.501097,0.605722,0.618064,0.045005,0.069038,-0.005308, -0.573062,0.538141,0.618064,0.043442,0.06757,-0.005308, -0.515458,0.484047,0.707108,0.043516,0.067501,-0.005193, -0.484047,0.515458,0.707108,0.04427,0.068254,-0.005193, -0.573062,0.538141,0.618064,0.043442,0.06757,-0.005308, -0.484047,0.515458,0.707108,0.04427,0.068254,-0.005193, -0.538141,0.573062,0.618064,0.0442,0.068329,-0.005308, -0.605722,0.501097,0.618064,0.042733,0.066766,-0.005308, -0.544834,0.450726,0.707108,0.042811,0.066701,-0.005193, -0.515458,0.484047,0.707108,0.043516,0.067501,-0.005193, -0.605722,0.501097,0.618064,0.042733,0.066766,-0.005308, -0.515458,0.484047,0.707108,0.043516,0.067501,-0.005193, -0.573062,0.538141,0.618064,0.043442,0.06757,-0.005308, -0.635991,0.462074,0.618064,0.042076,0.065919,-0.005308, -0.57206,0.415626,0.707108,0.042158,0.065859,-0.005193, -0.544834,0.450726,0.707108,0.042811,0.066701,-0.005193, -0.635991,0.462074,0.618064,0.042076,0.065919,-0.005308, -0.544834,0.450726,0.707108,0.042811,0.066701,-0.005193, -0.605722,0.501097,0.618064,0.042733,0.066766,-0.005308, -0.66375,0.421228,0.618064,0.041473,0.065032,-0.005308, -0.597029,0.378886,0.707108,0.041559,0.064977,-0.005193, -0.57206,0.415626,0.707108,0.042158,0.065859,-0.005193, -0.66375,0.421228,0.618064,0.041473,0.065032,-0.005308, -0.57206,0.415626,0.707108,0.042158,0.065859,-0.005193, -0.635991,0.462074,0.618064,0.042076,0.065919,-0.005308, -0.688889,0.37872,0.618064,0.040927,0.064109,-0.005308, -0.619641,0.340651,0.707108,0.041016,0.06406,-0.005193, -0.597029,0.378886,0.707108,0.041559,0.064977,-0.005193, -0.688889,0.37872,0.618064,0.040927,0.064109,-0.005308, -0.597029,0.378886,0.707108,0.041559,0.064977,-0.005193, -0.66375,0.421228,0.618064,0.041473,0.065032,-0.005308, -0.71131,0.334717,0.618064,0.04044,0.063153,-0.005308, -0.639808,0.301071,0.707108,0.040532,0.06311,-0.005193, -0.619641,0.340651,0.707108,0.041016,0.06406,-0.005193, -0.71131,0.334717,0.618064,0.04044,0.063153,-0.005308, -0.619641,0.340651,0.707108,0.041016,0.06406,-0.005193, -0.688889,0.37872,0.618064,0.040927,0.064109,-0.005308, -0.730923,0.289393,0.618064,0.040014,0.062169,-0.005308, -0.65745,0.260303,0.707108,0.040109,0.062132,-0.005193, -0.639808,0.301071,0.707108,0.040532,0.06311,-0.005193, -0.730923,0.289393,0.618064,0.040014,0.062169,-0.005308, -0.639808,0.301071,0.707108,0.040532,0.06311,-0.005193, -0.71131,0.334717,0.618064,0.04044,0.063153,-0.005308, -0.747652,0.242927,0.618064,0.039651,0.06116,-0.005308, -0.672497,0.218508,0.707108,0.039748,0.061129,-0.005193, -0.65745,0.260303,0.707108,0.040109,0.062132,-0.005193, -0.747652,0.242927,0.618064,0.039651,0.06116,-0.005308, -0.65745,0.260303,0.707108,0.040109,0.062132,-0.005193, -0.730923,0.289393,0.618064,0.040014,0.062169,-0.005308, -0.76143,0.195502,0.618064,0.039352,0.06013,-0.005308, -0.684891,0.17585,0.707108,0.03945,0.060105,-0.005193, -0.672497,0.218508,0.707108,0.039748,0.061129,-0.005193, -0.76143,0.195502,0.618064,0.039352,0.06013,-0.005308, -0.672497,0.218508,0.707108,0.039748,0.061129,-0.005193, -0.747652,0.242927,0.618064,0.039651,0.06116,-0.005308, -0.772203,0.147306,0.618064,0.039118,0.059084,-0.005308, -0.694581,0.132498,0.707108,0.039218,0.059065,-0.005193, -0.684891,0.17585,0.707108,0.03945,0.060105,-0.005193, -0.772203,0.147306,0.618064,0.039118,0.059084,-0.005308, -0.684891,0.17585,0.707108,0.03945,0.060105,-0.005193, -0.76143,0.195502,0.618064,0.039352,0.06013,-0.005308, -0.779929,0.098528,0.618064,0.03895,0.058025,-0.005308, -0.70153,0.088624,0.707108,0.039051,0.058012,-0.005193, -0.694581,0.132498,0.707108,0.039218,0.059065,-0.005193, -0.779929,0.098528,0.618064,0.03895,0.058025,-0.005308, -0.694581,0.132498,0.707108,0.039218,0.059065,-0.005193, -0.772203,0.147306,0.618064,0.039118,0.059084,-0.005308, -0.784577,0.049361,0.618064,0.038849,0.056957,-0.005308, -0.70571,0.0444,0.707108,0.038951,0.056951,-0.005193, -0.70153,0.088624,0.707108,0.039051,0.058012,-0.005193, -0.784577,0.049361,0.618064,0.038849,0.056957,-0.005308, -0.70153,0.088624,0.707108,0.039051,0.058012,-0.005193, -0.779929,0.098528,0.618064,0.03895,0.058025,-0.005308, -0.786128,0,0.618064,0.038816,0.055885,-0.005308, -0.707106,0,0.707108,0.038917,0.055885,-0.005193, -0.70571,0.0444,0.707108,0.038951,0.056951,-0.005193, -0.786128,0,0.618064,0.038816,0.055885,-0.005308, -0.70571,0.0444,0.707108,0.038951,0.056951,-0.005193, -0.784577,0.049361,0.618064,0.038849,0.056957,-0.005308, -0.707106,0,0.707108,0.038917,0.055885,-0.005193, -0.618061,0,0.78613,0.039032,0.055885,-0.005092, -0.616842,0.038808,0.78613,0.039065,0.056943,-0.005092, -0.707106,0,0.707108,0.038917,0.055885,-0.005193, -0.616842,0.038808,0.78613,0.039065,0.056943,-0.005092, -0.70571,0.0444,0.707108,0.038951,0.056951,-0.005193, -0.70571,-0.0444,0.707108,0.038951,0.05482,-0.005193, -0.616842,-0.038808,0.78613,0.039065,0.054827,-0.005092, -0.618061,0,0.78613,0.039032,0.055885,-0.005092, -0.70571,-0.0444,0.707108,0.038951,0.05482,-0.005193, -0.618061,0,0.78613,0.039032,0.055885,-0.005092, -0.707106,0,0.707108,0.038917,0.055885,-0.005193, -0.70153,-0.088624,0.707108,0.039051,0.053759,-0.005193, -0.613188,-0.077464,0.78613,0.039165,0.053773,-0.005092, -0.616842,-0.038808,0.78613,0.039065,0.054827,-0.005092, -0.70153,-0.088624,0.707108,0.039051,0.053759,-0.005193, -0.616842,-0.038808,0.78613,0.039065,0.054827,-0.005092, -0.70571,-0.0444,0.707108,0.038951,0.05482,-0.005193, -0.694581,-0.132498,0.707108,0.039218,0.052706,-0.005193, -0.607114,-0.115813,0.78613,0.039331,0.052727,-0.005092, -0.613188,-0.077464,0.78613,0.039165,0.053773,-0.005092, -0.694581,-0.132498,0.707108,0.039218,0.052706,-0.005193, -0.613188,-0.077464,0.78613,0.039165,0.053773,-0.005092, -0.70153,-0.088624,0.707108,0.039051,0.053759,-0.005193, -0.684891,-0.17585,0.707108,0.03945,0.051666,-0.005193, -0.598644,-0.153706,0.78613,0.039562,0.051694,-0.005092, -0.607114,-0.115813,0.78613,0.039331,0.052727,-0.005092, -0.684891,-0.17585,0.707108,0.03945,0.051666,-0.005193, -0.607114,-0.115813,0.78613,0.039331,0.052727,-0.005092, -0.694581,-0.132498,0.707108,0.039218,0.052706,-0.005193, -0.672497,-0.218508,0.707108,0.039748,0.050642,-0.005193, -0.587811,-0.190991,0.78613,0.039857,0.050677,-0.005092, -0.598644,-0.153706,0.78613,0.039562,0.051694,-0.005092, -0.672497,-0.218508,0.707108,0.039748,0.050642,-0.005193, -0.598644,-0.153706,0.78613,0.039562,0.051694,-0.005092, -0.684891,-0.17585,0.707108,0.03945,0.051666,-0.005193, -0.65745,-0.260303,0.707108,0.040109,0.049639,-0.005193, -0.574659,-0.227524,0.78613,0.040215,0.049681,-0.005092, -0.587811,-0.190991,0.78613,0.039857,0.050677,-0.005092, -0.65745,-0.260303,0.707108,0.040109,0.049639,-0.005193, -0.587811,-0.190991,0.78613,0.039857,0.050677,-0.005092, -0.672497,-0.218508,0.707108,0.039748,0.050642,-0.005193, -0.639808,-0.301071,0.707108,0.040532,0.048661,-0.005193, -0.559239,-0.263158,0.78613,0.040636,0.048709,-0.005092, -0.574659,-0.227524,0.78613,0.040215,0.049681,-0.005092, -0.639808,-0.301071,0.707108,0.040532,0.048661,-0.005193, -0.574659,-0.227524,0.78613,0.040215,0.049681,-0.005092, -0.65745,-0.260303,0.707108,0.040109,0.049639,-0.005193, -0.619641,-0.340651,0.707108,0.041016,0.047711,-0.005193, -0.541611,-0.297753,0.78613,0.041117,0.047766,-0.005092, -0.559239,-0.263158,0.78613,0.040636,0.048709,-0.005092, -0.619641,-0.340651,0.707108,0.041016,0.047711,-0.005193, -0.559239,-0.263158,0.78613,0.040636,0.048709,-0.005092, -0.639808,-0.301071,0.707108,0.040532,0.048661,-0.005193, -0.597029,-0.378886,0.707108,0.041559,0.046793,-0.005193, -0.521846,-0.331174,0.78613,0.041656,0.046855,-0.005092, -0.541611,-0.297753,0.78613,0.041117,0.047766,-0.005092, -0.597029,-0.378886,0.707108,0.041559,0.046793,-0.005193, -0.541611,-0.297753,0.78613,0.041117,0.047766,-0.005092, -0.619641,-0.340651,0.707108,0.041016,0.047711,-0.005193, -0.57206,-0.415626,0.707108,0.042158,0.045912,-0.005193, -0.500022,-0.363287,0.78613,0.042251,0.045979,-0.005092, -0.521846,-0.331174,0.78613,0.041656,0.046855,-0.005092, -0.57206,-0.415626,0.707108,0.042158,0.045912,-0.005193, -0.521846,-0.331174,0.78613,0.041656,0.046855,-0.005092, -0.597029,-0.378886,0.707108,0.041559,0.046793,-0.005193, -0.544834,-0.450726,0.707108,0.042811,0.04507,-0.005193, -0.476224,-0.393967,0.78613,0.0429,0.045143,-0.005092, -0.500022,-0.363287,0.78613,0.042251,0.045979,-0.005092, -0.544834,-0.450726,0.707108,0.042811,0.04507,-0.005193, -0.500022,-0.363287,0.78613,0.042251,0.045979,-0.005092, -0.57206,-0.415626,0.707108,0.042158,0.045912,-0.005193, -0.515458,-0.484047,0.707108,0.043516,0.04427,-0.005193, -0.450547,-0.423092,0.78613,0.0436,0.044348,-0.005092, -0.476224,-0.393967,0.78613,0.0429,0.045143,-0.005092, -0.515458,-0.484047,0.707108,0.043516,0.04427,-0.005193, -0.476224,-0.393967,0.78613,0.0429,0.045143,-0.005092, -0.544834,-0.450726,0.707108,0.042811,0.04507,-0.005193, -0.484047,-0.515458,0.707108,0.04427,0.043516,-0.005193, -0.423092,-0.450547,0.78613,0.044348,0.0436,-0.005092, -0.450547,-0.423092,0.78613,0.0436,0.044348,-0.005092, -0.484047,-0.515458,0.707108,0.04427,0.043516,-0.005193, -0.450547,-0.423092,0.78613,0.0436,0.044348,-0.005092, -0.515458,-0.484047,0.707108,0.043516,0.04427,-0.005193, -0.450726,-0.544834,0.707108,0.04507,0.042811,-0.005193, -0.393967,-0.476224,0.78613,0.045143,0.0429,-0.005092, -0.423092,-0.450547,0.78613,0.044348,0.0436,-0.005092, -0.450726,-0.544834,0.707108,0.04507,0.042811,-0.005193, -0.423092,-0.450547,0.78613,0.044348,0.0436,-0.005092, -0.484047,-0.515458,0.707108,0.04427,0.043516,-0.005193, -0.415626,-0.57206,0.707108,0.045912,0.042158,-0.005193, -0.363287,-0.500022,0.78613,0.045979,0.042251,-0.005092, -0.393967,-0.476224,0.78613,0.045143,0.0429,-0.005092, -0.415626,-0.57206,0.707108,0.045912,0.042158,-0.005193, -0.393967,-0.476224,0.78613,0.045143,0.0429,-0.005092, -0.450726,-0.544834,0.707108,0.04507,0.042811,-0.005193, -0.378886,-0.597029,0.707108,0.046793,0.041559,-0.005193, -0.331174,-0.521846,0.78613,0.046855,0.041656,-0.005092, -0.363287,-0.500022,0.78613,0.045979,0.042251,-0.005092, -0.378886,-0.597029,0.707108,0.046793,0.041559,-0.005193, -0.363287,-0.500022,0.78613,0.045979,0.042251,-0.005092, -0.415626,-0.57206,0.707108,0.045912,0.042158,-0.005193, -0.340651,-0.619641,0.707108,0.047711,0.041016,-0.005193, -0.297753,-0.541611,0.78613,0.047766,0.041117,-0.005092, -0.331174,-0.521846,0.78613,0.046855,0.041656,-0.005092, -0.340651,-0.619641,0.707108,0.047711,0.041016,-0.005193, -0.331174,-0.521846,0.78613,0.046855,0.041656,-0.005092, -0.378886,-0.597029,0.707108,0.046793,0.041559,-0.005193, -0.301071,-0.639808,0.707108,0.048661,0.040532,-0.005193, -0.263158,-0.559239,0.78613,0.048709,0.040636,-0.005092, -0.297753,-0.541611,0.78613,0.047766,0.041117,-0.005092, -0.301071,-0.639808,0.707108,0.048661,0.040532,-0.005193, -0.297753,-0.541611,0.78613,0.047766,0.041117,-0.005092, -0.340651,-0.619641,0.707108,0.047711,0.041016,-0.005193, -0.260303,-0.65745,0.707108,0.049639,0.040109,-0.005193, -0.227524,-0.574659,0.78613,0.049681,0.040215,-0.005092, -0.263158,-0.559239,0.78613,0.048709,0.040636,-0.005092, -0.260303,-0.65745,0.707108,0.049639,0.040109,-0.005193, -0.263158,-0.559239,0.78613,0.048709,0.040636,-0.005092, -0.301071,-0.639808,0.707108,0.048661,0.040532,-0.005193, -0.218508,-0.672497,0.707108,0.050642,0.039748,-0.005193, -0.190991,-0.587811,0.78613,0.050677,0.039857,-0.005092, -0.227524,-0.574659,0.78613,0.049681,0.040215,-0.005092, -0.218508,-0.672497,0.707108,0.050642,0.039748,-0.005193, -0.227524,-0.574659,0.78613,0.049681,0.040215,-0.005092, -0.260303,-0.65745,0.707108,0.049639,0.040109,-0.005193, -0.17585,-0.684891,0.707108,0.051666,0.03945,-0.005193, -0.153706,-0.598644,0.78613,0.051694,0.039562,-0.005092, -0.190991,-0.587811,0.78613,0.050677,0.039857,-0.005092, -0.17585,-0.684891,0.707108,0.051666,0.03945,-0.005193, -0.190991,-0.587811,0.78613,0.050677,0.039857,-0.005092, -0.218508,-0.672497,0.707108,0.050642,0.039748,-0.005193, -0.132498,-0.694581,0.707108,0.052706,0.039218,-0.005193, -0.115813,-0.607114,0.78613,0.052727,0.039331,-0.005092, -0.153706,-0.598644,0.78613,0.051694,0.039562,-0.005092, -0.132498,-0.694581,0.707108,0.052706,0.039218,-0.005193, -0.153706,-0.598644,0.78613,0.051694,0.039562,-0.005092, -0.17585,-0.684891,0.707108,0.051666,0.03945,-0.005193, -0.088624,-0.70153,0.707108,0.053759,0.039051,-0.005193, -0.077464,-0.613188,0.78613,0.053773,0.039165,-0.005092, -0.115813,-0.607114,0.78613,0.052727,0.039331,-0.005092, -0.088624,-0.70153,0.707108,0.053759,0.039051,-0.005193, -0.115813,-0.607114,0.78613,0.052727,0.039331,-0.005092, -0.132498,-0.694581,0.707108,0.052706,0.039218,-0.005193, -0.0444,-0.70571,0.707108,0.05482,0.038951,-0.005193, -0.038808,-0.616842,0.78613,0.054827,0.039065,-0.005092, -0.077464,-0.613188,0.78613,0.053773,0.039165,-0.005092, -0.0444,-0.70571,0.707108,0.05482,0.038951,-0.005193, -0.077464,-0.613188,0.78613,0.053773,0.039165,-0.005092, -0.088624,-0.70153,0.707108,0.053759,0.039051,-0.005193, 0,-0.707106,0.707108,0.055885,0.038917,-0.005193, 0,-0.618061,0.78613,0.055885,0.039032,-0.005092, -0.038808,-0.616842,0.78613,0.054827,0.039065,-0.005092, 0,-0.707106,0.707108,0.055885,0.038917,-0.005193, -0.038808,-0.616842,0.78613,0.054827,0.039065,-0.005092, -0.0444,-0.70571,0.707108,0.05482,0.038951,-0.005193, 0.0444,-0.70571,0.707108,0.056951,0.038951,-0.005193, 0.038808,-0.616842,0.78613,0.056943,0.039065,-0.005092, 0,-0.618061,0.78613,0.055885,0.039032,-0.005092, 0.0444,-0.70571,0.707108,0.056951,0.038951,-0.005193, 0,-0.618061,0.78613,0.055885,0.039032,-0.005092, 0,-0.707106,0.707108,0.055885,0.038917,-0.005193, 0.088624,-0.70153,0.707108,0.058012,0.039051,-0.005193, 0.077464,-0.613188,0.78613,0.057998,0.039165,-0.005092, 0.038808,-0.616842,0.78613,0.056943,0.039065,-0.005092, 0.088624,-0.70153,0.707108,0.058012,0.039051,-0.005193, 0.038808,-0.616842,0.78613,0.056943,0.039065,-0.005092, 0.0444,-0.70571,0.707108,0.056951,0.038951,-0.005193, 0.132498,-0.694581,0.707108,0.059065,0.039218,-0.005193, 0.115813,-0.607114,0.78613,0.059043,0.039331,-0.005092, 0.077464,-0.613188,0.78613,0.057998,0.039165,-0.005092, 0.132498,-0.694581,0.707108,0.059065,0.039218,-0.005193, 0.077464,-0.613188,0.78613,0.057998,0.039165,-0.005092, 0.088624,-0.70153,0.707108,0.058012,0.039051,-0.005193, 0.17585,-0.684891,0.707108,0.060105,0.03945,-0.005193, 0.153706,-0.598644,0.78613,0.060077,0.039562,-0.005092, 0.115813,-0.607114,0.78613,0.059043,0.039331,-0.005092, 0.17585,-0.684891,0.707108,0.060105,0.03945,-0.005193, 0.115813,-0.607114,0.78613,0.059043,0.039331,-0.005092, 0.132498,-0.694581,0.707108,0.059065,0.039218,-0.005193, 0.218508,-0.672497,0.707108,0.061129,0.039748,-0.005193, 0.190991,-0.587811,0.78613,0.061093,0.039857,-0.005092, 0.153706,-0.598644,0.78613,0.060077,0.039562,-0.005092, 0.218508,-0.672497,0.707108,0.061129,0.039748,-0.005193, 0.153706,-0.598644,0.78613,0.060077,0.039562,-0.005092, 0.17585,-0.684891,0.707108,0.060105,0.03945,-0.005193, 0.260303,-0.65745,0.707108,0.062132,0.040109,-0.005193, 0.227524,-0.574659,0.78613,0.062089,0.040215,-0.005092, 0.190991,-0.587811,0.78613,0.061093,0.039857,-0.005092, 0.260303,-0.65745,0.707108,0.062132,0.040109,-0.005193, 0.190991,-0.587811,0.78613,0.061093,0.039857,-0.005092, 0.218508,-0.672497,0.707108,0.061129,0.039748,-0.005193, 0.301071,-0.639808,0.707108,0.06311,0.040532,-0.005193, 0.263158,-0.559239,0.78613,0.063061,0.040636,-0.005092, 0.227524,-0.574659,0.78613,0.062089,0.040215,-0.005092, 0.301071,-0.639808,0.707108,0.06311,0.040532,-0.005193, 0.227524,-0.574659,0.78613,0.062089,0.040215,-0.005092, 0.260303,-0.65745,0.707108,0.062132,0.040109,-0.005193, 0.340651,-0.619641,0.707108,0.06406,0.041016,-0.005193, 0.297753,-0.541611,0.78613,0.064004,0.041117,-0.005092, 0.263158,-0.559239,0.78613,0.063061,0.040636,-0.005092, 0.340651,-0.619641,0.707108,0.06406,0.041016,-0.005193, 0.263158,-0.559239,0.78613,0.063061,0.040636,-0.005092, 0.301071,-0.639808,0.707108,0.06311,0.040532,-0.005193, 0.378886,-0.597029,0.707108,0.064977,0.041559,-0.005193, 0.331174,-0.521846,0.78613,0.064916,0.041656,-0.005092, 0.297753,-0.541611,0.78613,0.064004,0.041117,-0.005092, 0.378886,-0.597029,0.707108,0.064977,0.041559,-0.005193, 0.297753,-0.541611,0.78613,0.064004,0.041117,-0.005092, 0.340651,-0.619641,0.707108,0.06406,0.041016,-0.005193, 0.415626,-0.57206,0.707108,0.065859,0.042158,-0.005193, 0.363287,-0.500022,0.78613,0.065791,0.042251,-0.005092, 0.331174,-0.521846,0.78613,0.064916,0.041656,-0.005092, 0.415626,-0.57206,0.707108,0.065859,0.042158,-0.005193, 0.331174,-0.521846,0.78613,0.064916,0.041656,-0.005092, 0.378886,-0.597029,0.707108,0.064977,0.041559,-0.005193, 0.450726,-0.544834,0.707108,0.066701,0.042811,-0.005193, 0.393967,-0.476224,0.78613,0.066628,0.0429,-0.005092, 0.363287,-0.500022,0.78613,0.065791,0.042251,-0.005092, 0.450726,-0.544834,0.707108,0.066701,0.042811,-0.005193, 0.363287,-0.500022,0.78613,0.065791,0.042251,-0.005092, 0.415626,-0.57206,0.707108,0.065859,0.042158,-0.005193, 0.484047,-0.515458,0.707108,0.067501,0.043516,-0.005193, 0.423092,-0.450547,0.78613,0.067422,0.0436,-0.005092, 0.393967,-0.476224,0.78613,0.066628,0.0429,-0.005092, 0.484047,-0.515458,0.707108,0.067501,0.043516,-0.005193, 0.393967,-0.476224,0.78613,0.066628,0.0429,-0.005092, 0.450726,-0.544834,0.707108,0.066701,0.042811,-0.005193, 0.515458,-0.484047,0.707108,0.068254,0.04427,-0.005193, 0.450547,-0.423092,0.78613,0.068171,0.044348,-0.005092, 0.423092,-0.450547,0.78613,0.067422,0.0436,-0.005092, 0.515458,-0.484047,0.707108,0.068254,0.04427,-0.005193, 0.423092,-0.450547,0.78613,0.067422,0.0436,-0.005092, 0.484047,-0.515458,0.707108,0.067501,0.043516,-0.005193, 0.544834,-0.450726,0.707108,0.068959,0.04507,-0.005193, 0.476224,-0.393967,0.78613,0.068871,0.045143,-0.005092, 0.450547,-0.423092,0.78613,0.068171,0.044348,-0.005092, 0.544834,-0.450726,0.707108,0.068959,0.04507,-0.005193, 0.450547,-0.423092,0.78613,0.068171,0.044348,-0.005092, 0.515458,-0.484047,0.707108,0.068254,0.04427,-0.005193, 0.57206,-0.415626,0.707108,0.069613,0.045912,-0.005193, 0.500022,-0.363287,0.78613,0.06952,0.045979,-0.005092, 0.476224,-0.393967,0.78613,0.068871,0.045143,-0.005092, 0.57206,-0.415626,0.707108,0.069613,0.045912,-0.005193, 0.476224,-0.393967,0.78613,0.068871,0.045143,-0.005092, 0.544834,-0.450726,0.707108,0.068959,0.04507,-0.005193, 0.597029,-0.378886,0.707108,0.070212,0.046793,-0.005193, 0.521846,-0.331174,0.78613,0.070115,0.046855,-0.005092, 0.500022,-0.363287,0.78613,0.06952,0.045979,-0.005092, 0.597029,-0.378886,0.707108,0.070212,0.046793,-0.005193, 0.500022,-0.363287,0.78613,0.06952,0.045979,-0.005092, 0.57206,-0.415626,0.707108,0.069613,0.045912,-0.005193, 0.619641,-0.340651,0.707108,0.070754,0.047711,-0.005193, 0.541611,-0.297753,0.78613,0.070654,0.047766,-0.005092, 0.521846,-0.331174,0.78613,0.070115,0.046855,-0.005092, 0.619641,-0.340651,0.707108,0.070754,0.047711,-0.005193, 0.521846,-0.331174,0.78613,0.070115,0.046855,-0.005092, 0.597029,-0.378886,0.707108,0.070212,0.046793,-0.005193, 0.639808,-0.301071,0.707108,0.071238,0.048661,-0.005193, 0.559239,-0.263158,0.78613,0.071135,0.048709,-0.005092, 0.541611,-0.297753,0.78613,0.070654,0.047766,-0.005092, 0.639808,-0.301071,0.707108,0.071238,0.048661,-0.005193, 0.541611,-0.297753,0.78613,0.070654,0.047766,-0.005092, 0.619641,-0.340651,0.707108,0.070754,0.047711,-0.005193, 0.65745,-0.260303,0.707108,0.071662,0.049639,-0.005193, 0.574659,-0.227524,0.78613,0.071555,0.049681,-0.005092, 0.559239,-0.263158,0.78613,0.071135,0.048709,-0.005092, 0.65745,-0.260303,0.707108,0.071662,0.049639,-0.005193, 0.559239,-0.263158,0.78613,0.071135,0.048709,-0.005092, 0.639808,-0.301071,0.707108,0.071238,0.048661,-0.005193, 0.672497,-0.218508,0.707108,0.072023,0.050642,-0.005193, 0.587811,-0.190991,0.78613,0.071914,0.050677,-0.005092, 0.574659,-0.227524,0.78613,0.071555,0.049681,-0.005092, 0.672497,-0.218508,0.707108,0.072023,0.050642,-0.005193, 0.574659,-0.227524,0.78613,0.071555,0.049681,-0.005092, 0.65745,-0.260303,0.707108,0.071662,0.049639,-0.005193, 0.684891,-0.17585,0.707108,0.07232,0.051666,-0.005193, 0.598644,-0.153706,0.78613,0.072209,0.051694,-0.005092, 0.587811,-0.190991,0.78613,0.071914,0.050677,-0.005092, 0.684891,-0.17585,0.707108,0.07232,0.051666,-0.005193, 0.587811,-0.190991,0.78613,0.071914,0.050677,-0.005092, 0.672497,-0.218508,0.707108,0.072023,0.050642,-0.005193, 0.694581,-0.132498,0.707108,0.072553,0.052706,-0.005193, 0.607114,-0.115813,0.78613,0.07244,0.052727,-0.005092, 0.598644,-0.153706,0.78613,0.072209,0.051694,-0.005092, 0.694581,-0.132498,0.707108,0.072553,0.052706,-0.005193, 0.598644,-0.153706,0.78613,0.072209,0.051694,-0.005092, 0.684891,-0.17585,0.707108,0.07232,0.051666,-0.005193, 0.70153,-0.088624,0.707108,0.072719,0.053759,-0.005193, 0.613188,-0.077464,0.78613,0.072606,0.053773,-0.005092, 0.607114,-0.115813,0.78613,0.07244,0.052727,-0.005092, 0.70153,-0.088624,0.707108,0.072719,0.053759,-0.005193, 0.607114,-0.115813,0.78613,0.07244,0.052727,-0.005092, 0.694581,-0.132498,0.707108,0.072553,0.052706,-0.005193, 0.70571,-0.0444,0.707108,0.07282,0.05482,-0.005193, 0.616842,-0.038808,0.78613,0.072705,0.054827,-0.005092, 0.613188,-0.077464,0.78613,0.072606,0.053773,-0.005092, 0.70571,-0.0444,0.707108,0.07282,0.05482,-0.005193, 0.613188,-0.077464,0.78613,0.072606,0.053773,-0.005092, 0.70153,-0.088624,0.707108,0.072719,0.053759,-0.005193, 0.707106,0,0.707108,0.072853,0.055885,-0.005193, 0.618061,0,0.78613,0.072739,0.055885,-0.005092, 0.616842,-0.038808,0.78613,0.072705,0.054827,-0.005092, 0.707106,0,0.707108,0.072853,0.055885,-0.005193, 0.616842,-0.038808,0.78613,0.072705,0.054827,-0.005092, 0.70571,-0.0444,0.707108,0.07282,0.05482,-0.005193, 0.70571,0.0444,0.707108,0.07282,0.056951,-0.005193, 0.616842,0.038808,0.78613,0.072705,0.056943,-0.005092, 0.618061,0,0.78613,0.072739,0.055885,-0.005092, 0.70571,0.0444,0.707108,0.07282,0.056951,-0.005193, 0.618061,0,0.78613,0.072739,0.055885,-0.005092, 0.707106,0,0.707108,0.072853,0.055885,-0.005193, 0.70153,0.088624,0.707108,0.072719,0.058012,-0.005193, 0.613188,0.077464,0.78613,0.072606,0.057998,-0.005092, 0.616842,0.038808,0.78613,0.072705,0.056943,-0.005092, 0.70153,0.088624,0.707108,0.072719,0.058012,-0.005193, 0.616842,0.038808,0.78613,0.072705,0.056943,-0.005092, 0.70571,0.0444,0.707108,0.07282,0.056951,-0.005193, 0.694581,0.132498,0.707108,0.072553,0.059065,-0.005193, 0.607114,0.115813,0.78613,0.07244,0.059043,-0.005092, 0.613188,0.077464,0.78613,0.072606,0.057998,-0.005092, 0.694581,0.132498,0.707108,0.072553,0.059065,-0.005193, 0.613188,0.077464,0.78613,0.072606,0.057998,-0.005092, 0.70153,0.088624,0.707108,0.072719,0.058012,-0.005193, 0.684891,0.17585,0.707108,0.07232,0.060105,-0.005193, 0.598644,0.153706,0.78613,0.072209,0.060077,-0.005092, 0.607114,0.115813,0.78613,0.07244,0.059043,-0.005092, 0.684891,0.17585,0.707108,0.07232,0.060105,-0.005193, 0.607114,0.115813,0.78613,0.07244,0.059043,-0.005092, 0.694581,0.132498,0.707108,0.072553,0.059065,-0.005193, 0.672497,0.218508,0.707108,0.072023,0.061129,-0.005193, 0.587811,0.190991,0.78613,0.071914,0.061093,-0.005092, 0.598644,0.153706,0.78613,0.072209,0.060077,-0.005092, 0.672497,0.218508,0.707108,0.072023,0.061129,-0.005193, 0.598644,0.153706,0.78613,0.072209,0.060077,-0.005092, 0.684891,0.17585,0.707108,0.07232,0.060105,-0.005193, 0.65745,0.260303,0.707108,0.071662,0.062132,-0.005193, 0.574659,0.227524,0.78613,0.071555,0.062089,-0.005092, 0.587811,0.190991,0.78613,0.071914,0.061093,-0.005092, 0.65745,0.260303,0.707108,0.071662,0.062132,-0.005193, 0.587811,0.190991,0.78613,0.071914,0.061093,-0.005092, 0.672497,0.218508,0.707108,0.072023,0.061129,-0.005193, 0.639808,0.301071,0.707108,0.071238,0.06311,-0.005193, 0.559239,0.263158,0.78613,0.071135,0.063061,-0.005092, 0.574659,0.227524,0.78613,0.071555,0.062089,-0.005092, 0.639808,0.301071,0.707108,0.071238,0.06311,-0.005193, 0.574659,0.227524,0.78613,0.071555,0.062089,-0.005092, 0.65745,0.260303,0.707108,0.071662,0.062132,-0.005193, 0.619641,0.340651,0.707108,0.070754,0.06406,-0.005193, 0.541611,0.297753,0.78613,0.070654,0.064004,-0.005092, 0.559239,0.263158,0.78613,0.071135,0.063061,-0.005092, 0.619641,0.340651,0.707108,0.070754,0.06406,-0.005193, 0.559239,0.263158,0.78613,0.071135,0.063061,-0.005092, 0.639808,0.301071,0.707108,0.071238,0.06311,-0.005193, 0.597029,0.378886,0.707108,0.070212,0.064977,-0.005193, 0.521846,0.331174,0.78613,0.070115,0.064916,-0.005092, 0.541611,0.297753,0.78613,0.070654,0.064004,-0.005092, 0.597029,0.378886,0.707108,0.070212,0.064977,-0.005193, 0.541611,0.297753,0.78613,0.070654,0.064004,-0.005092, 0.619641,0.340651,0.707108,0.070754,0.06406,-0.005193, 0.57206,0.415626,0.707108,0.069613,0.065859,-0.005193, 0.500022,0.363287,0.78613,0.06952,0.065791,-0.005092, 0.521846,0.331174,0.78613,0.070115,0.064916,-0.005092, 0.57206,0.415626,0.707108,0.069613,0.065859,-0.005193, 0.521846,0.331174,0.78613,0.070115,0.064916,-0.005092, 0.597029,0.378886,0.707108,0.070212,0.064977,-0.005193, 0.544834,0.450726,0.707108,0.068959,0.066701,-0.005193, 0.476224,0.393967,0.78613,0.068871,0.066628,-0.005092, 0.500022,0.363287,0.78613,0.06952,0.065791,-0.005092, 0.544834,0.450726,0.707108,0.068959,0.066701,-0.005193, 0.500022,0.363287,0.78613,0.06952,0.065791,-0.005092, 0.57206,0.415626,0.707108,0.069613,0.065859,-0.005193, 0.515458,0.484047,0.707108,0.068254,0.067501,-0.005193, 0.450547,0.423092,0.78613,0.068171,0.067422,-0.005092, 0.476224,0.393967,0.78613,0.068871,0.066628,-0.005092, 0.515458,0.484047,0.707108,0.068254,0.067501,-0.005193, 0.476224,0.393967,0.78613,0.068871,0.066628,-0.005092, 0.544834,0.450726,0.707108,0.068959,0.066701,-0.005193, 0.484047,0.515458,0.707108,0.067501,0.068254,-0.005193, 0.423092,0.450547,0.78613,0.067422,0.068171,-0.005092, 0.450547,0.423092,0.78613,0.068171,0.067422,-0.005092, 0.484047,0.515458,0.707108,0.067501,0.068254,-0.005193, 0.450547,0.423092,0.78613,0.068171,0.067422,-0.005092, 0.515458,0.484047,0.707108,0.068254,0.067501,-0.005193, 0.450726,0.544834,0.707108,0.066701,0.068959,-0.005193, 0.393967,0.476224,0.78613,0.066628,0.068871,-0.005092, 0.423092,0.450547,0.78613,0.067422,0.068171,-0.005092, 0.450726,0.544834,0.707108,0.066701,0.068959,-0.005193, 0.423092,0.450547,0.78613,0.067422,0.068171,-0.005092, 0.484047,0.515458,0.707108,0.067501,0.068254,-0.005193, 0.415626,0.57206,0.707108,0.065859,0.069613,-0.005193, 0.363287,0.500022,0.78613,0.065791,0.06952,-0.005092, 0.393967,0.476224,0.78613,0.066628,0.068871,-0.005092, 0.415626,0.57206,0.707108,0.065859,0.069613,-0.005193, 0.393967,0.476224,0.78613,0.066628,0.068871,-0.005092, 0.450726,0.544834,0.707108,0.066701,0.068959,-0.005193, 0.378886,0.597029,0.707108,0.064977,0.070212,-0.005193, 0.331174,0.521846,0.78613,0.064916,0.070115,-0.005092, 0.363287,0.500022,0.78613,0.065791,0.06952,-0.005092, 0.378886,0.597029,0.707108,0.064977,0.070212,-0.005193, 0.363287,0.500022,0.78613,0.065791,0.06952,-0.005092, 0.415626,0.57206,0.707108,0.065859,0.069613,-0.005193, 0.340651,0.619641,0.707108,0.06406,0.070754,-0.005193, 0.297753,0.541611,0.78613,0.064004,0.070654,-0.005092, 0.331174,0.521846,0.78613,0.064916,0.070115,-0.005092, 0.340651,0.619641,0.707108,0.06406,0.070754,-0.005193, 0.331174,0.521846,0.78613,0.064916,0.070115,-0.005092, 0.378886,0.597029,0.707108,0.064977,0.070212,-0.005193, 0.301071,0.639808,0.707108,0.06311,0.071238,-0.005193, 0.263158,0.559239,0.78613,0.063061,0.071135,-0.005092, 0.297753,0.541611,0.78613,0.064004,0.070654,-0.005092, 0.301071,0.639808,0.707108,0.06311,0.071238,-0.005193, 0.297753,0.541611,0.78613,0.064004,0.070654,-0.005092, 0.340651,0.619641,0.707108,0.06406,0.070754,-0.005193, 0.260303,0.65745,0.707108,0.062132,0.071662,-0.005193, 0.227524,0.574659,0.78613,0.062089,0.071555,-0.005092, 0.263158,0.559239,0.78613,0.063061,0.071135,-0.005092, 0.260303,0.65745,0.707108,0.062132,0.071662,-0.005193, 0.263158,0.559239,0.78613,0.063061,0.071135,-0.005092, 0.301071,0.639808,0.707108,0.06311,0.071238,-0.005193, 0.218508,0.672497,0.707108,0.061129,0.072023,-0.005193, 0.190991,0.587811,0.78613,0.061093,0.071914,-0.005092, 0.227524,0.574659,0.78613,0.062089,0.071555,-0.005092, 0.218508,0.672497,0.707108,0.061129,0.072023,-0.005193, 0.227524,0.574659,0.78613,0.062089,0.071555,-0.005092, 0.260303,0.65745,0.707108,0.062132,0.071662,-0.005193, 0.17585,0.684891,0.707108,0.060105,0.07232,-0.005193, 0.153706,0.598644,0.78613,0.060077,0.072209,-0.005092, 0.190991,0.587811,0.78613,0.061093,0.071914,-0.005092, 0.17585,0.684891,0.707108,0.060105,0.07232,-0.005193, 0.190991,0.587811,0.78613,0.061093,0.071914,-0.005092, 0.218508,0.672497,0.707108,0.061129,0.072023,-0.005193, 0.132498,0.694581,0.707108,0.059065,0.072553,-0.005193, 0.115813,0.607114,0.78613,0.059043,0.07244,-0.005092, 0.153706,0.598644,0.78613,0.060077,0.072209,-0.005092, 0.132498,0.694581,0.707108,0.059065,0.072553,-0.005193, 0.153706,0.598644,0.78613,0.060077,0.072209,-0.005092, 0.17585,0.684891,0.707108,0.060105,0.07232,-0.005193, 0.088624,0.70153,0.707108,0.058012,0.072719,-0.005193, 0.077464,0.613188,0.78613,0.057998,0.072606,-0.005092, 0.115813,0.607114,0.78613,0.059043,0.07244,-0.005092, 0.088624,0.70153,0.707108,0.058012,0.072719,-0.005193, 0.115813,0.607114,0.78613,0.059043,0.07244,-0.005092, 0.132498,0.694581,0.707108,0.059065,0.072553,-0.005193, 0.0444,0.70571,0.707108,0.056951,0.07282,-0.005193, 0.038808,0.616842,0.78613,0.056943,0.072705,-0.005092, 0.077464,0.613188,0.78613,0.057998,0.072606,-0.005092, 0.0444,0.70571,0.707108,0.056951,0.07282,-0.005193, 0.077464,0.613188,0.78613,0.057998,0.072606,-0.005092, 0.088624,0.70153,0.707108,0.058012,0.072719,-0.005193, 0,0.707106,0.707108,0.055885,0.072853,-0.005193, 0,0.618061,0.78613,0.055885,0.072739,-0.005092, 0.038808,0.616842,0.78613,0.056943,0.072705,-0.005092, 0,0.707106,0.707108,0.055885,0.072853,-0.005193, 0.038808,0.616842,0.78613,0.056943,0.072705,-0.005092, 0.0444,0.70571,0.707108,0.056951,0.07282,-0.005193, -0.0444,0.70571,0.707108,0.05482,0.07282,-0.005193, -0.038808,0.616842,0.78613,0.054827,0.072705,-0.005092, 0,0.618061,0.78613,0.055885,0.072739,-0.005092, -0.0444,0.70571,0.707108,0.05482,0.07282,-0.005193, 0,0.618061,0.78613,0.055885,0.072739,-0.005092, 0,0.707106,0.707108,0.055885,0.072853,-0.005193, -0.088624,0.70153,0.707108,0.053759,0.072719,-0.005193, -0.077464,0.613188,0.78613,0.053773,0.072606,-0.005092, -0.038808,0.616842,0.78613,0.054827,0.072705,-0.005092, -0.088624,0.70153,0.707108,0.053759,0.072719,-0.005193, -0.038808,0.616842,0.78613,0.054827,0.072705,-0.005092, -0.0444,0.70571,0.707108,0.05482,0.07282,-0.005193, -0.132498,0.694581,0.707108,0.052706,0.072553,-0.005193, -0.115813,0.607114,0.78613,0.052727,0.07244,-0.005092, -0.077464,0.613188,0.78613,0.053773,0.072606,-0.005092, -0.132498,0.694581,0.707108,0.052706,0.072553,-0.005193, -0.077464,0.613188,0.78613,0.053773,0.072606,-0.005092, -0.088624,0.70153,0.707108,0.053759,0.072719,-0.005193, -0.17585,0.684891,0.707108,0.051666,0.07232,-0.005193, -0.153706,0.598644,0.78613,0.051694,0.072209,-0.005092, -0.115813,0.607114,0.78613,0.052727,0.07244,-0.005092, -0.17585,0.684891,0.707108,0.051666,0.07232,-0.005193, -0.115813,0.607114,0.78613,0.052727,0.07244,-0.005092, -0.132498,0.694581,0.707108,0.052706,0.072553,-0.005193, -0.218508,0.672497,0.707108,0.050642,0.072023,-0.005193, -0.190991,0.587811,0.78613,0.050677,0.071914,-0.005092, -0.153706,0.598644,0.78613,0.051694,0.072209,-0.005092, -0.218508,0.672497,0.707108,0.050642,0.072023,-0.005193, -0.153706,0.598644,0.78613,0.051694,0.072209,-0.005092, -0.17585,0.684891,0.707108,0.051666,0.07232,-0.005193, -0.260303,0.65745,0.707108,0.049639,0.071662,-0.005193, -0.227524,0.574659,0.78613,0.049681,0.071555,-0.005092, -0.190991,0.587811,0.78613,0.050677,0.071914,-0.005092, -0.260303,0.65745,0.707108,0.049639,0.071662,-0.005193, -0.190991,0.587811,0.78613,0.050677,0.071914,-0.005092, -0.218508,0.672497,0.707108,0.050642,0.072023,-0.005193, -0.301071,0.639808,0.707108,0.048661,0.071238,-0.005193, -0.263158,0.559239,0.78613,0.048709,0.071135,-0.005092, -0.227524,0.574659,0.78613,0.049681,0.071555,-0.005092, -0.301071,0.639808,0.707108,0.048661,0.071238,-0.005193, -0.227524,0.574659,0.78613,0.049681,0.071555,-0.005092, -0.260303,0.65745,0.707108,0.049639,0.071662,-0.005193, -0.340651,0.619641,0.707108,0.047711,0.070754,-0.005193, -0.297753,0.541611,0.78613,0.047766,0.070654,-0.005092, -0.263158,0.559239,0.78613,0.048709,0.071135,-0.005092, -0.340651,0.619641,0.707108,0.047711,0.070754,-0.005193, -0.263158,0.559239,0.78613,0.048709,0.071135,-0.005092, -0.301071,0.639808,0.707108,0.048661,0.071238,-0.005193, -0.378886,0.597029,0.707108,0.046793,0.070212,-0.005193, -0.331174,0.521846,0.78613,0.046855,0.070115,-0.005092, -0.297753,0.541611,0.78613,0.047766,0.070654,-0.005092, -0.378886,0.597029,0.707108,0.046793,0.070212,-0.005193, -0.297753,0.541611,0.78613,0.047766,0.070654,-0.005092, -0.340651,0.619641,0.707108,0.047711,0.070754,-0.005193, -0.415626,0.57206,0.707108,0.045912,0.069613,-0.005193, -0.363287,0.500022,0.78613,0.045979,0.06952,-0.005092, -0.331174,0.521846,0.78613,0.046855,0.070115,-0.005092, -0.415626,0.57206,0.707108,0.045912,0.069613,-0.005193, -0.331174,0.521846,0.78613,0.046855,0.070115,-0.005092, -0.378886,0.597029,0.707108,0.046793,0.070212,-0.005193, -0.450726,0.544834,0.707108,0.04507,0.068959,-0.005193, -0.393967,0.476224,0.78613,0.045143,0.068871,-0.005092, -0.363287,0.500022,0.78613,0.045979,0.06952,-0.005092, -0.450726,0.544834,0.707108,0.04507,0.068959,-0.005193, -0.363287,0.500022,0.78613,0.045979,0.06952,-0.005092, -0.415626,0.57206,0.707108,0.045912,0.069613,-0.005193, -0.484047,0.515458,0.707108,0.04427,0.068254,-0.005193, -0.423092,0.450547,0.78613,0.044348,0.068171,-0.005092, -0.393967,0.476224,0.78613,0.045143,0.068871,-0.005092, -0.484047,0.515458,0.707108,0.04427,0.068254,-0.005193, -0.393967,0.476224,0.78613,0.045143,0.068871,-0.005092, -0.450726,0.544834,0.707108,0.04507,0.068959,-0.005193, -0.515458,0.484047,0.707108,0.043516,0.067501,-0.005193, -0.450547,0.423092,0.78613,0.0436,0.067422,-0.005092, -0.423092,0.450547,0.78613,0.044348,0.068171,-0.005092, -0.515458,0.484047,0.707108,0.043516,0.067501,-0.005193, -0.423092,0.450547,0.78613,0.044348,0.068171,-0.005092, -0.484047,0.515458,0.707108,0.04427,0.068254,-0.005193, -0.544834,0.450726,0.707108,0.042811,0.066701,-0.005193, -0.476224,0.393967,0.78613,0.0429,0.066628,-0.005092, -0.450547,0.423092,0.78613,0.0436,0.067422,-0.005092, -0.544834,0.450726,0.707108,0.042811,0.066701,-0.005193, -0.450547,0.423092,0.78613,0.0436,0.067422,-0.005092, -0.515458,0.484047,0.707108,0.043516,0.067501,-0.005193, -0.57206,0.415626,0.707108,0.042158,0.065859,-0.005193, -0.500022,0.363287,0.78613,0.042251,0.065791,-0.005092, -0.476224,0.393967,0.78613,0.0429,0.066628,-0.005092, -0.57206,0.415626,0.707108,0.042158,0.065859,-0.005193, -0.476224,0.393967,0.78613,0.0429,0.066628,-0.005092, -0.544834,0.450726,0.707108,0.042811,0.066701,-0.005193, -0.597029,0.378886,0.707108,0.041559,0.064977,-0.005193, -0.521846,0.331174,0.78613,0.041656,0.064916,-0.005092, -0.500022,0.363287,0.78613,0.042251,0.065791,-0.005092, -0.597029,0.378886,0.707108,0.041559,0.064977,-0.005193, -0.500022,0.363287,0.78613,0.042251,0.065791,-0.005092, -0.57206,0.415626,0.707108,0.042158,0.065859,-0.005193, -0.619641,0.340651,0.707108,0.041016,0.06406,-0.005193, -0.541611,0.297753,0.78613,0.041117,0.064004,-0.005092, -0.521846,0.331174,0.78613,0.041656,0.064916,-0.005092, -0.619641,0.340651,0.707108,0.041016,0.06406,-0.005193, -0.521846,0.331174,0.78613,0.041656,0.064916,-0.005092, -0.597029,0.378886,0.707108,0.041559,0.064977,-0.005193, -0.639808,0.301071,0.707108,0.040532,0.06311,-0.005193, -0.559239,0.263158,0.78613,0.040636,0.063061,-0.005092, -0.541611,0.297753,0.78613,0.041117,0.064004,-0.005092, -0.639808,0.301071,0.707108,0.040532,0.06311,-0.005193, -0.541611,0.297753,0.78613,0.041117,0.064004,-0.005092, -0.619641,0.340651,0.707108,0.041016,0.06406,-0.005193, -0.65745,0.260303,0.707108,0.040109,0.062132,-0.005193, -0.574659,0.227524,0.78613,0.040215,0.062089,-0.005092, -0.559239,0.263158,0.78613,0.040636,0.063061,-0.005092, -0.65745,0.260303,0.707108,0.040109,0.062132,-0.005193, -0.559239,0.263158,0.78613,0.040636,0.063061,-0.005092, -0.639808,0.301071,0.707108,0.040532,0.06311,-0.005193, -0.672497,0.218508,0.707108,0.039748,0.061129,-0.005193, -0.587811,0.190991,0.78613,0.039857,0.061093,-0.005092, -0.574659,0.227524,0.78613,0.040215,0.062089,-0.005092, -0.672497,0.218508,0.707108,0.039748,0.061129,-0.005193, -0.574659,0.227524,0.78613,0.040215,0.062089,-0.005092, -0.65745,0.260303,0.707108,0.040109,0.062132,-0.005193, -0.684891,0.17585,0.707108,0.03945,0.060105,-0.005193, -0.598644,0.153706,0.78613,0.039562,0.060077,-0.005092, -0.587811,0.190991,0.78613,0.039857,0.061093,-0.005092, -0.684891,0.17585,0.707108,0.03945,0.060105,-0.005193, -0.587811,0.190991,0.78613,0.039857,0.061093,-0.005092, -0.672497,0.218508,0.707108,0.039748,0.061129,-0.005193, -0.694581,0.132498,0.707108,0.039218,0.059065,-0.005193, -0.607114,0.115813,0.78613,0.039331,0.059043,-0.005092, -0.598644,0.153706,0.78613,0.039562,0.060077,-0.005092, -0.694581,0.132498,0.707108,0.039218,0.059065,-0.005193, -0.598644,0.153706,0.78613,0.039562,0.060077,-0.005092, -0.684891,0.17585,0.707108,0.03945,0.060105,-0.005193, -0.70153,0.088624,0.707108,0.039051,0.058012,-0.005193, -0.613188,0.077464,0.78613,0.039165,0.057998,-0.005092, -0.607114,0.115813,0.78613,0.039331,0.059043,-0.005092, -0.70153,0.088624,0.707108,0.039051,0.058012,-0.005193, -0.607114,0.115813,0.78613,0.039331,0.059043,-0.005092, -0.694581,0.132498,0.707108,0.039218,0.059065,-0.005193, -0.70571,0.0444,0.707108,0.038951,0.056951,-0.005193, -0.616842,0.038808,0.78613,0.039065,0.056943,-0.005092, -0.613188,0.077464,0.78613,0.039165,0.057998,-0.005092, -0.70571,0.0444,0.707108,0.038951,0.056951,-0.005193, -0.613188,0.077464,0.78613,0.039165,0.057998,-0.005092, -0.70153,0.088624,0.707108,0.039051,0.058012,-0.005193, -0.616842,0.038808,0.78613,0.039065,0.056943,-0.005092, -0.519231,0.032667,0.85401,0.039191,0.056936,-0.005004, -0.516155,0.065205,0.85401,0.03929,0.057982,-0.005004, -0.616842,0.038808,0.78613,0.039065,0.056943,-0.005092, -0.516155,0.065205,0.85401,0.03929,0.057982,-0.005004, -0.613188,0.077464,0.78613,0.039165,0.057998,-0.005092, -0.618061,0,0.78613,0.039032,0.055885,-0.005092, -0.520257,0,0.85401,0.039158,0.055885,-0.005004, -0.519231,0.032667,0.85401,0.039191,0.056936,-0.005004, -0.618061,0,0.78613,0.039032,0.055885,-0.005092, -0.519231,0.032667,0.85401,0.039191,0.056936,-0.005004, -0.616842,0.038808,0.78613,0.039065,0.056943,-0.005092, -0.616842,-0.038808,0.78613,0.039065,0.054827,-0.005092, -0.519231,-0.032667,0.85401,0.039191,0.054835,-0.005004, -0.520257,0,0.85401,0.039158,0.055885,-0.005004, -0.616842,-0.038808,0.78613,0.039065,0.054827,-0.005092, -0.520257,0,0.85401,0.039158,0.055885,-0.005004, -0.618061,0,0.78613,0.039032,0.055885,-0.005092, -0.613188,-0.077464,0.78613,0.039165,0.053773,-0.005092, -0.516155,-0.065205,0.85401,0.03929,0.053789,-0.005004, -0.519231,-0.032667,0.85401,0.039191,0.054835,-0.005004, -0.613188,-0.077464,0.78613,0.039165,0.053773,-0.005092, -0.519231,-0.032667,0.85401,0.039191,0.054835,-0.005004, -0.616842,-0.038808,0.78613,0.039065,0.054827,-0.005092, -0.607114,-0.115813,0.78613,0.039331,0.052727,-0.005092, -0.511042,-0.097487,0.85401,0.039454,0.052751,-0.005004, -0.516155,-0.065205,0.85401,0.03929,0.053789,-0.005004, -0.607114,-0.115813,0.78613,0.039331,0.052727,-0.005092, -0.516155,-0.065205,0.85401,0.03929,0.053789,-0.005004, -0.613188,-0.077464,0.78613,0.039165,0.053773,-0.005092, -0.598644,-0.153706,0.78613,0.039562,0.051694,-0.005092, -0.503912,-0.129383,0.85401,0.039684,0.051725,-0.005004, -0.511042,-0.097487,0.85401,0.039454,0.052751,-0.005004, -0.598644,-0.153706,0.78613,0.039562,0.051694,-0.005092, -0.511042,-0.097487,0.85401,0.039454,0.052751,-0.005004, -0.607114,-0.115813,0.78613,0.039331,0.052727,-0.005092, -0.587811,-0.190991,0.78613,0.039857,0.050677,-0.005092, -0.494794,-0.160768,0.85401,0.039977,0.050716,-0.005004, -0.503912,-0.129383,0.85401,0.039684,0.051725,-0.005004, -0.587811,-0.190991,0.78613,0.039857,0.050677,-0.005092, -0.503912,-0.129383,0.85401,0.039684,0.051725,-0.005004, -0.598644,-0.153706,0.78613,0.039562,0.051694,-0.005092, -0.574659,-0.227524,0.78613,0.040215,0.049681,-0.005092, -0.483723,-0.191519,0.85401,0.040333,0.049728,-0.005004, -0.494794,-0.160768,0.85401,0.039977,0.050716,-0.005004, -0.574659,-0.227524,0.78613,0.040215,0.049681,-0.005092, -0.494794,-0.160768,0.85401,0.039977,0.050716,-0.005004, -0.587811,-0.190991,0.78613,0.039857,0.050677,-0.005092, -0.559239,-0.263158,0.78613,0.040636,0.048709,-0.005092, -0.470743,-0.221515,0.85401,0.04075,0.048763,-0.005004, -0.483723,-0.191519,0.85401,0.040333,0.049728,-0.005004, -0.559239,-0.263158,0.78613,0.040636,0.048709,-0.005092, -0.483723,-0.191519,0.85401,0.040333,0.049728,-0.005004, -0.574659,-0.227524,0.78613,0.040215,0.049681,-0.005092, -0.541611,-0.297753,0.78613,0.041117,0.047766,-0.005092, -0.455905,-0.250636,0.85401,0.041227,0.047827,-0.005004, -0.470743,-0.221515,0.85401,0.04075,0.048763,-0.005004, -0.541611,-0.297753,0.78613,0.041117,0.047766,-0.005092, -0.470743,-0.221515,0.85401,0.04075,0.048763,-0.005004, -0.559239,-0.263158,0.78613,0.040636,0.048709,-0.005092, -0.521846,-0.331174,0.78613,0.041656,0.046855,-0.005092, -0.439268,-0.278768,0.85401,0.041762,0.046922,-0.005004, -0.455905,-0.250636,0.85401,0.041227,0.047827,-0.005004, -0.521846,-0.331174,0.78613,0.041656,0.046855,-0.005092, -0.455905,-0.250636,0.85401,0.041227,0.047827,-0.005004, -0.541611,-0.297753,0.78613,0.041117,0.047766,-0.005092, -0.500022,-0.363287,0.78613,0.042251,0.045979,-0.005092, -0.420897,-0.3058,0.85401,0.042353,0.046053,-0.005004, -0.439268,-0.278768,0.85401,0.041762,0.046922,-0.005004, -0.500022,-0.363287,0.78613,0.042251,0.045979,-0.005092, -0.439268,-0.278768,0.85401,0.041762,0.046922,-0.005004, -0.521846,-0.331174,0.78613,0.041656,0.046855,-0.005092, -0.476224,-0.393967,0.78613,0.0429,0.045143,-0.005092, -0.400865,-0.331624,0.85401,0.042997,0.045223,-0.005004, -0.420897,-0.3058,0.85401,0.042353,0.046053,-0.005004, -0.476224,-0.393967,0.78613,0.0429,0.045143,-0.005092, -0.420897,-0.3058,0.85401,0.042353,0.046053,-0.005004, -0.500022,-0.363287,0.78613,0.042251,0.045979,-0.005092, -0.450547,-0.423092,0.78613,0.0436,0.044348,-0.005092, -0.379251,-0.356141,0.85401,0.043692,0.044435,-0.005004, -0.400865,-0.331624,0.85401,0.042997,0.045223,-0.005004, -0.450547,-0.423092,0.78613,0.0436,0.044348,-0.005092, -0.400865,-0.331624,0.85401,0.042997,0.045223,-0.005004, -0.476224,-0.393967,0.78613,0.0429,0.045143,-0.005092, -0.423092,-0.450547,0.78613,0.044348,0.0436,-0.005092, -0.356141,-0.379251,0.85401,0.044435,0.043692,-0.005004, -0.379251,-0.356141,0.85401,0.043692,0.044435,-0.005004, -0.423092,-0.450547,0.78613,0.044348,0.0436,-0.005092, -0.379251,-0.356141,0.85401,0.043692,0.044435,-0.005004, -0.450547,-0.423092,0.78613,0.0436,0.044348,-0.005092, -0.393967,-0.476224,0.78613,0.045143,0.0429,-0.005092, -0.331624,-0.400865,0.85401,0.045223,0.042997,-0.005004, -0.356141,-0.379251,0.85401,0.044435,0.043692,-0.005004, -0.393967,-0.476224,0.78613,0.045143,0.0429,-0.005092, -0.356141,-0.379251,0.85401,0.044435,0.043692,-0.005004, -0.423092,-0.450547,0.78613,0.044348,0.0436,-0.005092, -0.363287,-0.500022,0.78613,0.045979,0.042251,-0.005092, -0.3058,-0.420897,0.85401,0.046053,0.042353,-0.005004, -0.331624,-0.400865,0.85401,0.045223,0.042997,-0.005004, -0.363287,-0.500022,0.78613,0.045979,0.042251,-0.005092, -0.331624,-0.400865,0.85401,0.045223,0.042997,-0.005004, -0.393967,-0.476224,0.78613,0.045143,0.0429,-0.005092, -0.331174,-0.521846,0.78613,0.046855,0.041656,-0.005092, -0.278768,-0.439268,0.85401,0.046922,0.041762,-0.005004, -0.3058,-0.420897,0.85401,0.046053,0.042353,-0.005004, -0.331174,-0.521846,0.78613,0.046855,0.041656,-0.005092, -0.3058,-0.420897,0.85401,0.046053,0.042353,-0.005004, -0.363287,-0.500022,0.78613,0.045979,0.042251,-0.005092, -0.297753,-0.541611,0.78613,0.047766,0.041117,-0.005092, -0.250636,-0.455905,0.85401,0.047827,0.041227,-0.005004, -0.278768,-0.439268,0.85401,0.046922,0.041762,-0.005004, -0.297753,-0.541611,0.78613,0.047766,0.041117,-0.005092, -0.278768,-0.439268,0.85401,0.046922,0.041762,-0.005004, -0.331174,-0.521846,0.78613,0.046855,0.041656,-0.005092, -0.263158,-0.559239,0.78613,0.048709,0.040636,-0.005092, -0.221515,-0.470743,0.85401,0.048763,0.04075,-0.005004, -0.250636,-0.455905,0.85401,0.047827,0.041227,-0.005004, -0.263158,-0.559239,0.78613,0.048709,0.040636,-0.005092, -0.250636,-0.455905,0.85401,0.047827,0.041227,-0.005004, -0.297753,-0.541611,0.78613,0.047766,0.041117,-0.005092, -0.227524,-0.574659,0.78613,0.049681,0.040215,-0.005092, -0.191519,-0.483723,0.85401,0.049728,0.040333,-0.005004, -0.221515,-0.470743,0.85401,0.048763,0.04075,-0.005004, -0.227524,-0.574659,0.78613,0.049681,0.040215,-0.005092, -0.221515,-0.470743,0.85401,0.048763,0.04075,-0.005004, -0.263158,-0.559239,0.78613,0.048709,0.040636,-0.005092, -0.190991,-0.587811,0.78613,0.050677,0.039857,-0.005092, -0.160768,-0.494794,0.85401,0.050716,0.039977,-0.005004, -0.191519,-0.483723,0.85401,0.049728,0.040333,-0.005004, -0.190991,-0.587811,0.78613,0.050677,0.039857,-0.005092, -0.191519,-0.483723,0.85401,0.049728,0.040333,-0.005004, -0.227524,-0.574659,0.78613,0.049681,0.040215,-0.005092, -0.153706,-0.598644,0.78613,0.051694,0.039562,-0.005092, -0.129383,-0.503912,0.85401,0.051725,0.039684,-0.005004, -0.160768,-0.494794,0.85401,0.050716,0.039977,-0.005004, -0.153706,-0.598644,0.78613,0.051694,0.039562,-0.005092, -0.160768,-0.494794,0.85401,0.050716,0.039977,-0.005004, -0.190991,-0.587811,0.78613,0.050677,0.039857,-0.005092, -0.115813,-0.607114,0.78613,0.052727,0.039331,-0.005092, -0.097487,-0.511042,0.85401,0.052751,0.039454,-0.005004, -0.129383,-0.503912,0.85401,0.051725,0.039684,-0.005004, -0.115813,-0.607114,0.78613,0.052727,0.039331,-0.005092, -0.129383,-0.503912,0.85401,0.051725,0.039684,-0.005004, -0.153706,-0.598644,0.78613,0.051694,0.039562,-0.005092, -0.077464,-0.613188,0.78613,0.053773,0.039165,-0.005092, -0.065205,-0.516155,0.85401,0.053789,0.03929,-0.005004, -0.097487,-0.511042,0.85401,0.052751,0.039454,-0.005004, -0.077464,-0.613188,0.78613,0.053773,0.039165,-0.005092, -0.097487,-0.511042,0.85401,0.052751,0.039454,-0.005004, -0.115813,-0.607114,0.78613,0.052727,0.039331,-0.005092, -0.038808,-0.616842,0.78613,0.054827,0.039065,-0.005092, -0.032667,-0.519231,0.85401,0.054835,0.039191,-0.005004, -0.065205,-0.516155,0.85401,0.053789,0.03929,-0.005004, -0.038808,-0.616842,0.78613,0.054827,0.039065,-0.005092, -0.065205,-0.516155,0.85401,0.053789,0.03929,-0.005004, -0.077464,-0.613188,0.78613,0.053773,0.039165,-0.005092, 0,-0.618061,0.78613,0.055885,0.039032,-0.005092, 0,-0.520257,0.85401,0.055885,0.039158,-0.005004, -0.032667,-0.519231,0.85401,0.054835,0.039191,-0.005004, 0,-0.618061,0.78613,0.055885,0.039032,-0.005092, -0.032667,-0.519231,0.85401,0.054835,0.039191,-0.005004, -0.038808,-0.616842,0.78613,0.054827,0.039065,-0.005092, 0.038808,-0.616842,0.78613,0.056943,0.039065,-0.005092, 0.032667,-0.519231,0.85401,0.056936,0.039191,-0.005004, 0,-0.520257,0.85401,0.055885,0.039158,-0.005004, 0.038808,-0.616842,0.78613,0.056943,0.039065,-0.005092, 0,-0.520257,0.85401,0.055885,0.039158,-0.005004, 0,-0.618061,0.78613,0.055885,0.039032,-0.005092, 0.077464,-0.613188,0.78613,0.057998,0.039165,-0.005092, 0.065205,-0.516155,0.85401,0.057982,0.03929,-0.005004, 0.032667,-0.519231,0.85401,0.056936,0.039191,-0.005004, 0.077464,-0.613188,0.78613,0.057998,0.039165,-0.005092, 0.032667,-0.519231,0.85401,0.056936,0.039191,-0.005004, 0.038808,-0.616842,0.78613,0.056943,0.039065,-0.005092, 0.115813,-0.607114,0.78613,0.059043,0.039331,-0.005092, 0.097487,-0.511042,0.85401,0.05902,0.039454,-0.005004, 0.065205,-0.516155,0.85401,0.057982,0.03929,-0.005004, 0.115813,-0.607114,0.78613,0.059043,0.039331,-0.005092, 0.065205,-0.516155,0.85401,0.057982,0.03929,-0.005004, 0.077464,-0.613188,0.78613,0.057998,0.039165,-0.005092, 0.153706,-0.598644,0.78613,0.060077,0.039562,-0.005092, 0.129383,-0.503912,0.85401,0.060045,0.039684,-0.005004, 0.097487,-0.511042,0.85401,0.05902,0.039454,-0.005004, 0.153706,-0.598644,0.78613,0.060077,0.039562,-0.005092, 0.097487,-0.511042,0.85401,0.05902,0.039454,-0.005004, 0.115813,-0.607114,0.78613,0.059043,0.039331,-0.005092, 0.190991,-0.587811,0.78613,0.061093,0.039857,-0.005092, 0.160768,-0.494794,0.85401,0.061054,0.039977,-0.005004, 0.129383,-0.503912,0.85401,0.060045,0.039684,-0.005004, 0.190991,-0.587811,0.78613,0.061093,0.039857,-0.005092, 0.129383,-0.503912,0.85401,0.060045,0.039684,-0.005004, 0.153706,-0.598644,0.78613,0.060077,0.039562,-0.005092, 0.227524,-0.574659,0.78613,0.062089,0.040215,-0.005092, 0.191519,-0.483723,0.85401,0.062043,0.040333,-0.005004, 0.160768,-0.494794,0.85401,0.061054,0.039977,-0.005004, 0.227524,-0.574659,0.78613,0.062089,0.040215,-0.005092, 0.160768,-0.494794,0.85401,0.061054,0.039977,-0.005004, 0.190991,-0.587811,0.78613,0.061093,0.039857,-0.005092, 0.263158,-0.559239,0.78613,0.063061,0.040636,-0.005092, 0.221515,-0.470743,0.85401,0.063007,0.04075,-0.005004, 0.191519,-0.483723,0.85401,0.062043,0.040333,-0.005004, 0.263158,-0.559239,0.78613,0.063061,0.040636,-0.005092, 0.191519,-0.483723,0.85401,0.062043,0.040333,-0.005004, 0.227524,-0.574659,0.78613,0.062089,0.040215,-0.005092, 0.297753,-0.541611,0.78613,0.064004,0.041117,-0.005092, 0.250636,-0.455905,0.85401,0.063944,0.041227,-0.005004, 0.221515,-0.470743,0.85401,0.063007,0.04075,-0.005004, 0.297753,-0.541611,0.78613,0.064004,0.041117,-0.005092, 0.221515,-0.470743,0.85401,0.063007,0.04075,-0.005004, 0.263158,-0.559239,0.78613,0.063061,0.040636,-0.005092, 0.331174,-0.521846,0.78613,0.064916,0.041656,-0.005092, 0.278768,-0.439268,0.85401,0.064848,0.041762,-0.005004, 0.250636,-0.455905,0.85401,0.063944,0.041227,-0.005004, 0.331174,-0.521846,0.78613,0.064916,0.041656,-0.005092, 0.250636,-0.455905,0.85401,0.063944,0.041227,-0.005004, 0.297753,-0.541611,0.78613,0.064004,0.041117,-0.005092, 0.363287,-0.500022,0.78613,0.065791,0.042251,-0.005092, 0.3058,-0.420897,0.85401,0.065717,0.042353,-0.005004, 0.278768,-0.439268,0.85401,0.064848,0.041762,-0.005004, 0.363287,-0.500022,0.78613,0.065791,0.042251,-0.005092, 0.278768,-0.439268,0.85401,0.064848,0.041762,-0.005004, 0.331174,-0.521846,0.78613,0.064916,0.041656,-0.005092, 0.393967,-0.476224,0.78613,0.066628,0.0429,-0.005092, 0.331624,-0.400865,0.85401,0.066548,0.042997,-0.005004, 0.3058,-0.420897,0.85401,0.065717,0.042353,-0.005004, 0.393967,-0.476224,0.78613,0.066628,0.0429,-0.005092, 0.3058,-0.420897,0.85401,0.065717,0.042353,-0.005004, 0.363287,-0.500022,0.78613,0.065791,0.042251,-0.005092, 0.423092,-0.450547,0.78613,0.067422,0.0436,-0.005092, 0.356141,-0.379251,0.85401,0.067336,0.043692,-0.005004, 0.331624,-0.400865,0.85401,0.066548,0.042997,-0.005004, 0.423092,-0.450547,0.78613,0.067422,0.0436,-0.005092, 0.331624,-0.400865,0.85401,0.066548,0.042997,-0.005004, 0.393967,-0.476224,0.78613,0.066628,0.0429,-0.005092, 0.450547,-0.423092,0.78613,0.068171,0.044348,-0.005092, 0.379251,-0.356141,0.85401,0.068079,0.044435,-0.005004, 0.356141,-0.379251,0.85401,0.067336,0.043692,-0.005004, 0.450547,-0.423092,0.78613,0.068171,0.044348,-0.005092, 0.356141,-0.379251,0.85401,0.067336,0.043692,-0.005004, 0.423092,-0.450547,0.78613,0.067422,0.0436,-0.005092, 0.476224,-0.393967,0.78613,0.068871,0.045143,-0.005092, 0.400865,-0.331624,0.85401,0.068774,0.045223,-0.005004, 0.379251,-0.356141,0.85401,0.068079,0.044435,-0.005004, 0.476224,-0.393967,0.78613,0.068871,0.045143,-0.005092, 0.379251,-0.356141,0.85401,0.068079,0.044435,-0.005004, 0.450547,-0.423092,0.78613,0.068171,0.044348,-0.005092, 0.500022,-0.363287,0.78613,0.06952,0.045979,-0.005092, 0.420897,-0.3058,0.85401,0.069418,0.046053,-0.005004, 0.400865,-0.331624,0.85401,0.068774,0.045223,-0.005004, 0.500022,-0.363287,0.78613,0.06952,0.045979,-0.005092, 0.400865,-0.331624,0.85401,0.068774,0.045223,-0.005004, 0.476224,-0.393967,0.78613,0.068871,0.045143,-0.005092, 0.521846,-0.331174,0.78613,0.070115,0.046855,-0.005092, 0.439268,-0.278768,0.85401,0.070009,0.046922,-0.005004, 0.420897,-0.3058,0.85401,0.069418,0.046053,-0.005004, 0.521846,-0.331174,0.78613,0.070115,0.046855,-0.005092, 0.420897,-0.3058,0.85401,0.069418,0.046053,-0.005004, 0.500022,-0.363287,0.78613,0.06952,0.045979,-0.005092, 0.541611,-0.297753,0.78613,0.070654,0.047766,-0.005092, 0.455905,-0.250636,0.85401,0.070543,0.047827,-0.005004, 0.439268,-0.278768,0.85401,0.070009,0.046922,-0.005004, 0.541611,-0.297753,0.78613,0.070654,0.047766,-0.005092, 0.439268,-0.278768,0.85401,0.070009,0.046922,-0.005004, 0.521846,-0.331174,0.78613,0.070115,0.046855,-0.005092, 0.559239,-0.263158,0.78613,0.071135,0.048709,-0.005092, 0.470743,-0.221515,0.85401,0.071021,0.048763,-0.005004, 0.455905,-0.250636,0.85401,0.070543,0.047827,-0.005004, 0.559239,-0.263158,0.78613,0.071135,0.048709,-0.005092, 0.455905,-0.250636,0.85401,0.070543,0.047827,-0.005004, 0.541611,-0.297753,0.78613,0.070654,0.047766,-0.005092, 0.574659,-0.227524,0.78613,0.071555,0.049681,-0.005092, 0.483723,-0.191519,0.85401,0.071438,0.049728,-0.005004, 0.470743,-0.221515,0.85401,0.071021,0.048763,-0.005004, 0.574659,-0.227524,0.78613,0.071555,0.049681,-0.005092, 0.470743,-0.221515,0.85401,0.071021,0.048763,-0.005004, 0.559239,-0.263158,0.78613,0.071135,0.048709,-0.005092, 0.587811,-0.190991,0.78613,0.071914,0.050677,-0.005092, 0.494794,-0.160768,0.85401,0.071794,0.050716,-0.005004, 0.483723,-0.191519,0.85401,0.071438,0.049728,-0.005004, 0.587811,-0.190991,0.78613,0.071914,0.050677,-0.005092, 0.483723,-0.191519,0.85401,0.071438,0.049728,-0.005004, 0.574659,-0.227524,0.78613,0.071555,0.049681,-0.005092, 0.598644,-0.153706,0.78613,0.072209,0.051694,-0.005092, 0.503912,-0.129383,0.85401,0.072087,0.051725,-0.005004, 0.494794,-0.160768,0.85401,0.071794,0.050716,-0.005004, 0.598644,-0.153706,0.78613,0.072209,0.051694,-0.005092, 0.494794,-0.160768,0.85401,0.071794,0.050716,-0.005004, 0.587811,-0.190991,0.78613,0.071914,0.050677,-0.005092, 0.607114,-0.115813,0.78613,0.07244,0.052727,-0.005092, 0.511042,-0.097487,0.85401,0.072316,0.052751,-0.005004, 0.503912,-0.129383,0.85401,0.072087,0.051725,-0.005004, 0.607114,-0.115813,0.78613,0.07244,0.052727,-0.005092, 0.503912,-0.129383,0.85401,0.072087,0.051725,-0.005004, 0.598644,-0.153706,0.78613,0.072209,0.051694,-0.005092, 0.613188,-0.077464,0.78613,0.072606,0.053773,-0.005092, 0.516155,-0.065205,0.85401,0.072481,0.053789,-0.005004, 0.511042,-0.097487,0.85401,0.072316,0.052751,-0.005004, 0.613188,-0.077464,0.78613,0.072606,0.053773,-0.005092, 0.511042,-0.097487,0.85401,0.072316,0.052751,-0.005004, 0.607114,-0.115813,0.78613,0.07244,0.052727,-0.005092, 0.616842,-0.038808,0.78613,0.072705,0.054827,-0.005092, 0.519231,-0.032667,0.85401,0.07258,0.054835,-0.005004, 0.516155,-0.065205,0.85401,0.072481,0.053789,-0.005004, 0.616842,-0.038808,0.78613,0.072705,0.054827,-0.005092, 0.516155,-0.065205,0.85401,0.072481,0.053789,-0.005004, 0.613188,-0.077464,0.78613,0.072606,0.053773,-0.005092, 0.618061,0,0.78613,0.072739,0.055885,-0.005092, 0.520257,0,0.85401,0.072613,0.055885,-0.005004, 0.519231,-0.032667,0.85401,0.07258,0.054835,-0.005004, 0.618061,0,0.78613,0.072739,0.055885,-0.005092, 0.519231,-0.032667,0.85401,0.07258,0.054835,-0.005004, 0.616842,-0.038808,0.78613,0.072705,0.054827,-0.005092, 0.616842,0.038808,0.78613,0.072705,0.056943,-0.005092, 0.519231,0.032667,0.85401,0.07258,0.056936,-0.005004, 0.520257,0,0.85401,0.072613,0.055885,-0.005004, 0.616842,0.038808,0.78613,0.072705,0.056943,-0.005092, 0.520257,0,0.85401,0.072613,0.055885,-0.005004, 0.618061,0,0.78613,0.072739,0.055885,-0.005092, 0.613188,0.077464,0.78613,0.072606,0.057998,-0.005092, 0.516155,0.065205,0.85401,0.072481,0.057982,-0.005004, 0.519231,0.032667,0.85401,0.07258,0.056936,-0.005004, 0.613188,0.077464,0.78613,0.072606,0.057998,-0.005092, 0.519231,0.032667,0.85401,0.07258,0.056936,-0.005004, 0.616842,0.038808,0.78613,0.072705,0.056943,-0.005092, 0.607114,0.115813,0.78613,0.07244,0.059043,-0.005092, 0.511042,0.097487,0.85401,0.072316,0.05902,-0.005004, 0.516155,0.065205,0.85401,0.072481,0.057982,-0.005004, 0.607114,0.115813,0.78613,0.07244,0.059043,-0.005092, 0.516155,0.065205,0.85401,0.072481,0.057982,-0.005004, 0.613188,0.077464,0.78613,0.072606,0.057998,-0.005092, 0.598644,0.153706,0.78613,0.072209,0.060077,-0.005092, 0.503912,0.129383,0.85401,0.072087,0.060045,-0.005004, 0.511042,0.097487,0.85401,0.072316,0.05902,-0.005004, 0.598644,0.153706,0.78613,0.072209,0.060077,-0.005092, 0.511042,0.097487,0.85401,0.072316,0.05902,-0.005004, 0.607114,0.115813,0.78613,0.07244,0.059043,-0.005092, 0.587811,0.190991,0.78613,0.071914,0.061093,-0.005092, 0.494794,0.160768,0.85401,0.071794,0.061054,-0.005004, 0.503912,0.129383,0.85401,0.072087,0.060045,-0.005004, 0.587811,0.190991,0.78613,0.071914,0.061093,-0.005092, 0.503912,0.129383,0.85401,0.072087,0.060045,-0.005004, 0.598644,0.153706,0.78613,0.072209,0.060077,-0.005092, 0.574659,0.227524,0.78613,0.071555,0.062089,-0.005092, 0.483723,0.191519,0.85401,0.071438,0.062043,-0.005004, 0.494794,0.160768,0.85401,0.071794,0.061054,-0.005004, 0.574659,0.227524,0.78613,0.071555,0.062089,-0.005092, 0.494794,0.160768,0.85401,0.071794,0.061054,-0.005004, 0.587811,0.190991,0.78613,0.071914,0.061093,-0.005092, 0.559239,0.263158,0.78613,0.071135,0.063061,-0.005092, 0.470743,0.221515,0.85401,0.071021,0.063007,-0.005004, 0.483723,0.191519,0.85401,0.071438,0.062043,-0.005004, 0.559239,0.263158,0.78613,0.071135,0.063061,-0.005092, 0.483723,0.191519,0.85401,0.071438,0.062043,-0.005004, 0.574659,0.227524,0.78613,0.071555,0.062089,-0.005092, 0.541611,0.297753,0.78613,0.070654,0.064004,-0.005092, 0.455905,0.250636,0.85401,0.070543,0.063944,-0.005004, 0.470743,0.221515,0.85401,0.071021,0.063007,-0.005004, 0.541611,0.297753,0.78613,0.070654,0.064004,-0.005092, 0.470743,0.221515,0.85401,0.071021,0.063007,-0.005004, 0.559239,0.263158,0.78613,0.071135,0.063061,-0.005092, 0.521846,0.331174,0.78613,0.070115,0.064916,-0.005092, 0.439268,0.278768,0.85401,0.070009,0.064848,-0.005004, 0.455905,0.250636,0.85401,0.070543,0.063944,-0.005004, 0.521846,0.331174,0.78613,0.070115,0.064916,-0.005092, 0.455905,0.250636,0.85401,0.070543,0.063944,-0.005004, 0.541611,0.297753,0.78613,0.070654,0.064004,-0.005092, 0.500022,0.363287,0.78613,0.06952,0.065791,-0.005092, 0.420897,0.3058,0.85401,0.069418,0.065717,-0.005004, 0.439268,0.278768,0.85401,0.070009,0.064848,-0.005004, 0.500022,0.363287,0.78613,0.06952,0.065791,-0.005092, 0.439268,0.278768,0.85401,0.070009,0.064848,-0.005004, 0.521846,0.331174,0.78613,0.070115,0.064916,-0.005092, 0.476224,0.393967,0.78613,0.068871,0.066628,-0.005092, 0.400865,0.331624,0.85401,0.068774,0.066548,-0.005004, 0.420897,0.3058,0.85401,0.069418,0.065717,-0.005004, 0.476224,0.393967,0.78613,0.068871,0.066628,-0.005092, 0.420897,0.3058,0.85401,0.069418,0.065717,-0.005004, 0.500022,0.363287,0.78613,0.06952,0.065791,-0.005092, 0.450547,0.423092,0.78613,0.068171,0.067422,-0.005092, 0.379251,0.356141,0.85401,0.068079,0.067336,-0.005004, 0.400865,0.331624,0.85401,0.068774,0.066548,-0.005004, 0.450547,0.423092,0.78613,0.068171,0.067422,-0.005092, 0.400865,0.331624,0.85401,0.068774,0.066548,-0.005004, 0.476224,0.393967,0.78613,0.068871,0.066628,-0.005092, 0.423092,0.450547,0.78613,0.067422,0.068171,-0.005092, 0.356141,0.379251,0.85401,0.067336,0.068079,-0.005004, 0.379251,0.356141,0.85401,0.068079,0.067336,-0.005004, 0.423092,0.450547,0.78613,0.067422,0.068171,-0.005092, 0.379251,0.356141,0.85401,0.068079,0.067336,-0.005004, 0.450547,0.423092,0.78613,0.068171,0.067422,-0.005092, 0.393967,0.476224,0.78613,0.066628,0.068871,-0.005092, 0.331624,0.400865,0.85401,0.066548,0.068774,-0.005004, 0.356141,0.379251,0.85401,0.067336,0.068079,-0.005004, 0.393967,0.476224,0.78613,0.066628,0.068871,-0.005092, 0.356141,0.379251,0.85401,0.067336,0.068079,-0.005004, 0.423092,0.450547,0.78613,0.067422,0.068171,-0.005092, 0.363287,0.500022,0.78613,0.065791,0.06952,-0.005092, 0.3058,0.420897,0.85401,0.065717,0.069418,-0.005004, 0.331624,0.400865,0.85401,0.066548,0.068774,-0.005004, 0.363287,0.500022,0.78613,0.065791,0.06952,-0.005092, 0.331624,0.400865,0.85401,0.066548,0.068774,-0.005004, 0.393967,0.476224,0.78613,0.066628,0.068871,-0.005092, 0.331174,0.521846,0.78613,0.064916,0.070115,-0.005092, 0.278768,0.439268,0.85401,0.064848,0.070009,-0.005004, 0.3058,0.420897,0.85401,0.065717,0.069418,-0.005004, 0.331174,0.521846,0.78613,0.064916,0.070115,-0.005092, 0.3058,0.420897,0.85401,0.065717,0.069418,-0.005004, 0.363287,0.500022,0.78613,0.065791,0.06952,-0.005092, 0.297753,0.541611,0.78613,0.064004,0.070654,-0.005092, 0.250636,0.455905,0.85401,0.063944,0.070543,-0.005004, 0.278768,0.439268,0.85401,0.064848,0.070009,-0.005004, 0.297753,0.541611,0.78613,0.064004,0.070654,-0.005092, 0.278768,0.439268,0.85401,0.064848,0.070009,-0.005004, 0.331174,0.521846,0.78613,0.064916,0.070115,-0.005092, 0.263158,0.559239,0.78613,0.063061,0.071135,-0.005092, 0.221515,0.470743,0.85401,0.063007,0.071021,-0.005004, 0.250636,0.455905,0.85401,0.063944,0.070543,-0.005004, 0.263158,0.559239,0.78613,0.063061,0.071135,-0.005092, 0.250636,0.455905,0.85401,0.063944,0.070543,-0.005004, 0.297753,0.541611,0.78613,0.064004,0.070654,-0.005092, 0.227524,0.574659,0.78613,0.062089,0.071555,-0.005092, 0.191519,0.483723,0.85401,0.062043,0.071438,-0.005004, 0.221515,0.470743,0.85401,0.063007,0.071021,-0.005004, 0.227524,0.574659,0.78613,0.062089,0.071555,-0.005092, 0.221515,0.470743,0.85401,0.063007,0.071021,-0.005004, 0.263158,0.559239,0.78613,0.063061,0.071135,-0.005092, 0.190991,0.587811,0.78613,0.061093,0.071914,-0.005092, 0.160768,0.494794,0.85401,0.061054,0.071794,-0.005004, 0.191519,0.483723,0.85401,0.062043,0.071438,-0.005004, 0.190991,0.587811,0.78613,0.061093,0.071914,-0.005092, 0.191519,0.483723,0.85401,0.062043,0.071438,-0.005004, 0.227524,0.574659,0.78613,0.062089,0.071555,-0.005092, 0.153706,0.598644,0.78613,0.060077,0.072209,-0.005092, 0.129383,0.503912,0.85401,0.060045,0.072087,-0.005004, 0.160768,0.494794,0.85401,0.061054,0.071794,-0.005004, 0.153706,0.598644,0.78613,0.060077,0.072209,-0.005092, 0.160768,0.494794,0.85401,0.061054,0.071794,-0.005004, 0.190991,0.587811,0.78613,0.061093,0.071914,-0.005092, 0.115813,0.607114,0.78613,0.059043,0.07244,-0.005092, 0.097487,0.511042,0.85401,0.05902,0.072316,-0.005004, 0.129383,0.503912,0.85401,0.060045,0.072087,-0.005004, 0.115813,0.607114,0.78613,0.059043,0.07244,-0.005092, 0.129383,0.503912,0.85401,0.060045,0.072087,-0.005004, 0.153706,0.598644,0.78613,0.060077,0.072209,-0.005092, 0.077464,0.613188,0.78613,0.057998,0.072606,-0.005092, 0.065205,0.516155,0.85401,0.057982,0.072481,-0.005004, 0.097487,0.511042,0.85401,0.05902,0.072316,-0.005004, 0.077464,0.613188,0.78613,0.057998,0.072606,-0.005092, 0.097487,0.511042,0.85401,0.05902,0.072316,-0.005004, 0.115813,0.607114,0.78613,0.059043,0.07244,-0.005092, 0.038808,0.616842,0.78613,0.056943,0.072705,-0.005092, 0.032667,0.519231,0.85401,0.056936,0.07258,-0.005004, 0.065205,0.516155,0.85401,0.057982,0.072481,-0.005004, 0.038808,0.616842,0.78613,0.056943,0.072705,-0.005092, 0.065205,0.516155,0.85401,0.057982,0.072481,-0.005004, 0.077464,0.613188,0.78613,0.057998,0.072606,-0.005092, 0,0.618061,0.78613,0.055885,0.072739,-0.005092, 0,0.520257,0.85401,0.055885,0.072613,-0.005004, 0.032667,0.519231,0.85401,0.056936,0.07258,-0.005004, 0,0.618061,0.78613,0.055885,0.072739,-0.005092, 0.032667,0.519231,0.85401,0.056936,0.07258,-0.005004, 0.038808,0.616842,0.78613,0.056943,0.072705,-0.005092, -0.038808,0.616842,0.78613,0.054827,0.072705,-0.005092, -0.032667,0.519231,0.85401,0.054835,0.07258,-0.005004, 0,0.520257,0.85401,0.055885,0.072613,-0.005004, -0.038808,0.616842,0.78613,0.054827,0.072705,-0.005092, 0,0.520257,0.85401,0.055885,0.072613,-0.005004, 0,0.618061,0.78613,0.055885,0.072739,-0.005092, -0.077464,0.613188,0.78613,0.053773,0.072606,-0.005092, -0.065205,0.516155,0.85401,0.053789,0.072481,-0.005004, -0.032667,0.519231,0.85401,0.054835,0.07258,-0.005004, -0.077464,0.613188,0.78613,0.053773,0.072606,-0.005092, -0.032667,0.519231,0.85401,0.054835,0.07258,-0.005004, -0.038808,0.616842,0.78613,0.054827,0.072705,-0.005092, -0.115813,0.607114,0.78613,0.052727,0.07244,-0.005092, -0.097487,0.511042,0.85401,0.052751,0.072316,-0.005004, -0.065205,0.516155,0.85401,0.053789,0.072481,-0.005004, -0.115813,0.607114,0.78613,0.052727,0.07244,-0.005092, -0.065205,0.516155,0.85401,0.053789,0.072481,-0.005004, -0.077464,0.613188,0.78613,0.053773,0.072606,-0.005092, -0.153706,0.598644,0.78613,0.051694,0.072209,-0.005092, -0.129383,0.503912,0.85401,0.051725,0.072087,-0.005004, -0.097487,0.511042,0.85401,0.052751,0.072316,-0.005004, -0.153706,0.598644,0.78613,0.051694,0.072209,-0.005092, -0.097487,0.511042,0.85401,0.052751,0.072316,-0.005004, -0.115813,0.607114,0.78613,0.052727,0.07244,-0.005092, -0.190991,0.587811,0.78613,0.050677,0.071914,-0.005092, -0.160768,0.494794,0.85401,0.050716,0.071794,-0.005004, -0.129383,0.503912,0.85401,0.051725,0.072087,-0.005004, -0.190991,0.587811,0.78613,0.050677,0.071914,-0.005092, -0.129383,0.503912,0.85401,0.051725,0.072087,-0.005004, -0.153706,0.598644,0.78613,0.051694,0.072209,-0.005092, -0.227524,0.574659,0.78613,0.049681,0.071555,-0.005092, -0.191519,0.483723,0.85401,0.049728,0.071438,-0.005004, -0.160768,0.494794,0.85401,0.050716,0.071794,-0.005004, -0.227524,0.574659,0.78613,0.049681,0.071555,-0.005092, -0.160768,0.494794,0.85401,0.050716,0.071794,-0.005004, -0.190991,0.587811,0.78613,0.050677,0.071914,-0.005092, -0.263158,0.559239,0.78613,0.048709,0.071135,-0.005092, -0.221515,0.470743,0.85401,0.048763,0.071021,-0.005004, -0.191519,0.483723,0.85401,0.049728,0.071438,-0.005004, -0.263158,0.559239,0.78613,0.048709,0.071135,-0.005092, -0.191519,0.483723,0.85401,0.049728,0.071438,-0.005004, -0.227524,0.574659,0.78613,0.049681,0.071555,-0.005092, -0.297753,0.541611,0.78613,0.047766,0.070654,-0.005092, -0.250636,0.455905,0.85401,0.047827,0.070543,-0.005004, -0.221515,0.470743,0.85401,0.048763,0.071021,-0.005004, -0.297753,0.541611,0.78613,0.047766,0.070654,-0.005092, -0.221515,0.470743,0.85401,0.048763,0.071021,-0.005004, -0.263158,0.559239,0.78613,0.048709,0.071135,-0.005092, -0.331174,0.521846,0.78613,0.046855,0.070115,-0.005092, -0.278768,0.439268,0.85401,0.046922,0.070009,-0.005004, -0.250636,0.455905,0.85401,0.047827,0.070543,-0.005004, -0.331174,0.521846,0.78613,0.046855,0.070115,-0.005092, -0.250636,0.455905,0.85401,0.047827,0.070543,-0.005004, -0.297753,0.541611,0.78613,0.047766,0.070654,-0.005092, -0.363287,0.500022,0.78613,0.045979,0.06952,-0.005092, -0.3058,0.420897,0.85401,0.046053,0.069418,-0.005004, -0.278768,0.439268,0.85401,0.046922,0.070009,-0.005004, -0.363287,0.500022,0.78613,0.045979,0.06952,-0.005092, -0.278768,0.439268,0.85401,0.046922,0.070009,-0.005004, -0.331174,0.521846,0.78613,0.046855,0.070115,-0.005092, -0.393967,0.476224,0.78613,0.045143,0.068871,-0.005092, -0.331624,0.400865,0.85401,0.045223,0.068774,-0.005004, -0.3058,0.420897,0.85401,0.046053,0.069418,-0.005004, -0.393967,0.476224,0.78613,0.045143,0.068871,-0.005092, -0.3058,0.420897,0.85401,0.046053,0.069418,-0.005004, -0.363287,0.500022,0.78613,0.045979,0.06952,-0.005092, -0.423092,0.450547,0.78613,0.044348,0.068171,-0.005092, -0.356141,0.379251,0.85401,0.044435,0.068079,-0.005004, -0.331624,0.400865,0.85401,0.045223,0.068774,-0.005004, -0.423092,0.450547,0.78613,0.044348,0.068171,-0.005092, -0.331624,0.400865,0.85401,0.045223,0.068774,-0.005004, -0.393967,0.476224,0.78613,0.045143,0.068871,-0.005092, -0.450547,0.423092,0.78613,0.0436,0.067422,-0.005092, -0.379251,0.356141,0.85401,0.043692,0.067336,-0.005004, -0.356141,0.379251,0.85401,0.044435,0.068079,-0.005004, -0.450547,0.423092,0.78613,0.0436,0.067422,-0.005092, -0.356141,0.379251,0.85401,0.044435,0.068079,-0.005004, -0.423092,0.450547,0.78613,0.044348,0.068171,-0.005092, -0.476224,0.393967,0.78613,0.0429,0.066628,-0.005092, -0.400865,0.331624,0.85401,0.042997,0.066548,-0.005004, -0.379251,0.356141,0.85401,0.043692,0.067336,-0.005004, -0.476224,0.393967,0.78613,0.0429,0.066628,-0.005092, -0.379251,0.356141,0.85401,0.043692,0.067336,-0.005004, -0.450547,0.423092,0.78613,0.0436,0.067422,-0.005092, -0.500022,0.363287,0.78613,0.042251,0.065791,-0.005092, -0.420897,0.3058,0.85401,0.042353,0.065717,-0.005004, -0.400865,0.331624,0.85401,0.042997,0.066548,-0.005004, -0.500022,0.363287,0.78613,0.042251,0.065791,-0.005092, -0.400865,0.331624,0.85401,0.042997,0.066548,-0.005004, -0.476224,0.393967,0.78613,0.0429,0.066628,-0.005092, -0.521846,0.331174,0.78613,0.041656,0.064916,-0.005092, -0.439268,0.278768,0.85401,0.041762,0.064848,-0.005004, -0.420897,0.3058,0.85401,0.042353,0.065717,-0.005004, -0.521846,0.331174,0.78613,0.041656,0.064916,-0.005092, -0.420897,0.3058,0.85401,0.042353,0.065717,-0.005004, -0.500022,0.363287,0.78613,0.042251,0.065791,-0.005092, -0.541611,0.297753,0.78613,0.041117,0.064004,-0.005092, -0.455905,0.250636,0.85401,0.041227,0.063944,-0.005004, -0.439268,0.278768,0.85401,0.041762,0.064848,-0.005004, -0.541611,0.297753,0.78613,0.041117,0.064004,-0.005092, -0.439268,0.278768,0.85401,0.041762,0.064848,-0.005004, -0.521846,0.331174,0.78613,0.041656,0.064916,-0.005092, -0.559239,0.263158,0.78613,0.040636,0.063061,-0.005092, -0.470743,0.221515,0.85401,0.04075,0.063007,-0.005004, -0.455905,0.250636,0.85401,0.041227,0.063944,-0.005004, -0.559239,0.263158,0.78613,0.040636,0.063061,-0.005092, -0.455905,0.250636,0.85401,0.041227,0.063944,-0.005004, -0.541611,0.297753,0.78613,0.041117,0.064004,-0.005092, -0.574659,0.227524,0.78613,0.040215,0.062089,-0.005092, -0.483723,0.191519,0.85401,0.040333,0.062043,-0.005004, -0.470743,0.221515,0.85401,0.04075,0.063007,-0.005004, -0.574659,0.227524,0.78613,0.040215,0.062089,-0.005092, -0.470743,0.221515,0.85401,0.04075,0.063007,-0.005004, -0.559239,0.263158,0.78613,0.040636,0.063061,-0.005092, -0.587811,0.190991,0.78613,0.039857,0.061093,-0.005092, -0.494794,0.160768,0.85401,0.039977,0.061054,-0.005004, -0.483723,0.191519,0.85401,0.040333,0.062043,-0.005004, -0.587811,0.190991,0.78613,0.039857,0.061093,-0.005092, -0.483723,0.191519,0.85401,0.040333,0.062043,-0.005004, -0.574659,0.227524,0.78613,0.040215,0.062089,-0.005092, -0.598644,0.153706,0.78613,0.039562,0.060077,-0.005092, -0.503912,0.129383,0.85401,0.039684,0.060045,-0.005004, -0.494794,0.160768,0.85401,0.039977,0.061054,-0.005004, -0.598644,0.153706,0.78613,0.039562,0.060077,-0.005092, -0.494794,0.160768,0.85401,0.039977,0.061054,-0.005004, -0.587811,0.190991,0.78613,0.039857,0.061093,-0.005092, -0.607114,0.115813,0.78613,0.039331,0.059043,-0.005092, -0.511042,0.097487,0.85401,0.039454,0.05902,-0.005004, -0.503912,0.129383,0.85401,0.039684,0.060045,-0.005004, -0.607114,0.115813,0.78613,0.039331,0.059043,-0.005092, -0.503912,0.129383,0.85401,0.039684,0.060045,-0.005004, -0.598644,0.153706,0.78613,0.039562,0.060077,-0.005092, -0.613188,0.077464,0.78613,0.039165,0.057998,-0.005092, -0.516155,0.065205,0.85401,0.03929,0.057982,-0.005004, -0.511042,0.097487,0.85401,0.039454,0.05902,-0.005004, -0.613188,0.077464,0.78613,0.039165,0.057998,-0.005092, -0.511042,0.097487,0.85401,0.039454,0.05902,-0.005004, -0.607114,0.115813,0.78613,0.039331,0.059043,-0.005092, -0.516155,0.065205,0.85401,0.03929,0.057982,-0.005004, -0.411806,0.052023,0.909785,0.039424,0.057965,-0.004932, -0.407727,0.077778,0.909785,0.039587,0.058994,-0.004932, -0.516155,0.065205,0.85401,0.03929,0.057982,-0.005004, -0.407727,0.077778,0.909785,0.039587,0.058994,-0.004932, -0.511042,0.097487,0.85401,0.039454,0.05902,-0.005004, -0.519231,0.032667,0.85401,0.039191,0.056936,-0.005004, -0.41426,0.026063,0.909785,0.039326,0.056927,-0.004932, -0.411806,0.052023,0.909785,0.039424,0.057965,-0.004932, -0.519231,0.032667,0.85401,0.039191,0.056936,-0.005004, -0.411806,0.052023,0.909785,0.039424,0.057965,-0.004932, -0.516155,0.065205,0.85401,0.03929,0.057982,-0.005004, -0.520257,0,0.85401,0.039158,0.055885,-0.005004, -0.415079,0,0.909785,0.039294,0.055885,-0.004932, -0.41426,0.026063,0.909785,0.039326,0.056927,-0.004932, -0.520257,0,0.85401,0.039158,0.055885,-0.005004, -0.41426,0.026063,0.909785,0.039326,0.056927,-0.004932, -0.519231,0.032667,0.85401,0.039191,0.056936,-0.005004, -0.519231,-0.032667,0.85401,0.039191,0.054835,-0.005004, -0.41426,-0.026063,0.909785,0.039326,0.054844,-0.004932, -0.415079,0,0.909785,0.039294,0.055885,-0.004932, -0.519231,-0.032667,0.85401,0.039191,0.054835,-0.005004, -0.415079,0,0.909785,0.039294,0.055885,-0.004932, -0.520257,0,0.85401,0.039158,0.055885,-0.005004, -0.516155,-0.065205,0.85401,0.03929,0.053789,-0.005004, -0.411806,-0.052023,0.909785,0.039424,0.053806,-0.004932, -0.41426,-0.026063,0.909785,0.039326,0.054844,-0.004932, -0.516155,-0.065205,0.85401,0.03929,0.053789,-0.005004, -0.41426,-0.026063,0.909785,0.039326,0.054844,-0.004932, -0.519231,-0.032667,0.85401,0.039191,0.054835,-0.005004, -0.511042,-0.097487,0.85401,0.039454,0.052751,-0.005004, -0.407727,-0.077778,0.909785,0.039587,0.052776,-0.004932, -0.411806,-0.052023,0.909785,0.039424,0.053806,-0.004932, -0.511042,-0.097487,0.85401,0.039454,0.052751,-0.005004, -0.411806,-0.052023,0.909785,0.039424,0.053806,-0.004932, -0.516155,-0.065205,0.85401,0.03929,0.053789,-0.005004, -0.503912,-0.129383,0.85401,0.039684,0.051725,-0.005004, -0.402039,-0.103226,0.909785,0.039815,0.051759,-0.004932, -0.407727,-0.077778,0.909785,0.039587,0.052776,-0.004932, -0.503912,-0.129383,0.85401,0.039684,0.051725,-0.005004, -0.407727,-0.077778,0.909785,0.039587,0.052776,-0.004932, -0.511042,-0.097487,0.85401,0.039454,0.052751,-0.005004, -0.494794,-0.160768,0.85401,0.039977,0.050716,-0.005004, -0.394764,-0.128267,0.909785,0.040106,0.050758,-0.004932, -0.402039,-0.103226,0.909785,0.039815,0.051759,-0.004932, -0.494794,-0.160768,0.85401,0.039977,0.050716,-0.005004, -0.402039,-0.103226,0.909785,0.039815,0.051759,-0.004932, -0.503912,-0.129383,0.85401,0.039684,0.051725,-0.005004, -0.483723,-0.191519,0.85401,0.040333,0.049728,-0.005004, -0.385931,-0.152801,0.909785,0.040459,0.049777,-0.004932, -0.394764,-0.128267,0.909785,0.040106,0.050758,-0.004932, -0.483723,-0.191519,0.85401,0.040333,0.049728,-0.005004, -0.394764,-0.128267,0.909785,0.040106,0.050758,-0.004932, -0.494794,-0.160768,0.85401,0.039977,0.050716,-0.005004, -0.470743,-0.221515,0.85401,0.04075,0.048763,-0.005004, -0.375575,-0.176732,0.909785,0.040873,0.048821,-0.004932, -0.385931,-0.152801,0.909785,0.040459,0.049777,-0.004932, -0.470743,-0.221515,0.85401,0.04075,0.048763,-0.005004, -0.385931,-0.152801,0.909785,0.040459,0.049777,-0.004932, -0.483723,-0.191519,0.85401,0.040333,0.049728,-0.005004, -0.455905,-0.250636,0.85401,0.041227,0.047827,-0.005004, -0.363737,-0.199966,0.909785,0.041346,0.047892,-0.004932, -0.375575,-0.176732,0.909785,0.040873,0.048821,-0.004932, -0.455905,-0.250636,0.85401,0.041227,0.047827,-0.005004, -0.375575,-0.176732,0.909785,0.040873,0.048821,-0.004932, -0.470743,-0.221515,0.85401,0.04075,0.048763,-0.005004, -0.439268,-0.278768,0.85401,0.041762,0.046922,-0.005004, -0.350463,-0.222411,0.909785,0.041876,0.046995,-0.004932, -0.363737,-0.199966,0.909785,0.041346,0.047892,-0.004932, -0.439268,-0.278768,0.85401,0.041762,0.046922,-0.005004, -0.363737,-0.199966,0.909785,0.041346,0.047892,-0.004932, -0.455905,-0.250636,0.85401,0.041227,0.047827,-0.005004, -0.420897,-0.3058,0.85401,0.042353,0.046053,-0.005004, -0.335806,-0.243978,0.909785,0.042462,0.046133,-0.004932, -0.350463,-0.222411,0.909785,0.041876,0.046995,-0.004932, -0.420897,-0.3058,0.85401,0.042353,0.046053,-0.005004, -0.350463,-0.222411,0.909785,0.041876,0.046995,-0.004932, -0.439268,-0.278768,0.85401,0.041762,0.046922,-0.005004, -0.400865,-0.331624,0.85401,0.042997,0.045223,-0.005004, -0.319824,-0.264582,0.909785,0.043101,0.045309,-0.004932, -0.335806,-0.243978,0.909785,0.042462,0.046133,-0.004932, -0.400865,-0.331624,0.85401,0.042997,0.045223,-0.005004, -0.335806,-0.243978,0.909785,0.042462,0.046133,-0.004932, -0.420897,-0.3058,0.85401,0.042353,0.046053,-0.005004, -0.379251,-0.356141,0.85401,0.043692,0.044435,-0.005004, -0.30258,-0.284141,0.909785,0.04379,0.044527,-0.004932, -0.319824,-0.264582,0.909785,0.043101,0.045309,-0.004932, -0.379251,-0.356141,0.85401,0.043692,0.044435,-0.005004, -0.319824,-0.264582,0.909785,0.043101,0.045309,-0.004932, -0.400865,-0.331624,0.85401,0.042997,0.045223,-0.005004, -0.356141,-0.379251,0.85401,0.044435,0.043692,-0.005004, -0.284141,-0.30258,0.909785,0.044527,0.04379,-0.004932, -0.30258,-0.284141,0.909785,0.04379,0.044527,-0.004932, -0.356141,-0.379251,0.85401,0.044435,0.043692,-0.005004, -0.30258,-0.284141,0.909785,0.04379,0.044527,-0.004932, -0.379251,-0.356141,0.85401,0.043692,0.044435,-0.005004, -0.331624,-0.400865,0.85401,0.045223,0.042997,-0.005004, -0.264582,-0.319824,0.909785,0.045309,0.043101,-0.004932, -0.284141,-0.30258,0.909785,0.044527,0.04379,-0.004932, -0.331624,-0.400865,0.85401,0.045223,0.042997,-0.005004, -0.284141,-0.30258,0.909785,0.044527,0.04379,-0.004932, -0.356141,-0.379251,0.85401,0.044435,0.043692,-0.005004, -0.3058,-0.420897,0.85401,0.046053,0.042353,-0.005004, -0.243978,-0.335806,0.909785,0.046133,0.042462,-0.004932, -0.264582,-0.319824,0.909785,0.045309,0.043101,-0.004932, -0.3058,-0.420897,0.85401,0.046053,0.042353,-0.005004, -0.264582,-0.319824,0.909785,0.045309,0.043101,-0.004932, -0.331624,-0.400865,0.85401,0.045223,0.042997,-0.005004, -0.278768,-0.439268,0.85401,0.046922,0.041762,-0.005004, -0.222411,-0.350463,0.909785,0.046995,0.041876,-0.004932, -0.243978,-0.335806,0.909785,0.046133,0.042462,-0.004932, -0.278768,-0.439268,0.85401,0.046922,0.041762,-0.005004, -0.243978,-0.335806,0.909785,0.046133,0.042462,-0.004932, -0.3058,-0.420897,0.85401,0.046053,0.042353,-0.005004, -0.250636,-0.455905,0.85401,0.047827,0.041227,-0.005004, -0.199966,-0.363737,0.909785,0.047892,0.041346,-0.004932, -0.222411,-0.350463,0.909785,0.046995,0.041876,-0.004932, -0.250636,-0.455905,0.85401,0.047827,0.041227,-0.005004, -0.222411,-0.350463,0.909785,0.046995,0.041876,-0.004932, -0.278768,-0.439268,0.85401,0.046922,0.041762,-0.005004, -0.221515,-0.470743,0.85401,0.048763,0.04075,-0.005004, -0.176732,-0.375575,0.909785,0.048821,0.040873,-0.004932, -0.199966,-0.363737,0.909785,0.047892,0.041346,-0.004932, -0.221515,-0.470743,0.85401,0.048763,0.04075,-0.005004, -0.199966,-0.363737,0.909785,0.047892,0.041346,-0.004932, -0.250636,-0.455905,0.85401,0.047827,0.041227,-0.005004, -0.191519,-0.483723,0.85401,0.049728,0.040333,-0.005004, -0.152801,-0.385931,0.909785,0.049777,0.040459,-0.004932, -0.176732,-0.375575,0.909785,0.048821,0.040873,-0.004932, -0.191519,-0.483723,0.85401,0.049728,0.040333,-0.005004, -0.176732,-0.375575,0.909785,0.048821,0.040873,-0.004932, -0.221515,-0.470743,0.85401,0.048763,0.04075,-0.005004, -0.160768,-0.494794,0.85401,0.050716,0.039977,-0.005004, -0.128267,-0.394764,0.909785,0.050758,0.040106,-0.004932, -0.152801,-0.385931,0.909785,0.049777,0.040459,-0.004932, -0.160768,-0.494794,0.85401,0.050716,0.039977,-0.005004, -0.152801,-0.385931,0.909785,0.049777,0.040459,-0.004932, -0.191519,-0.483723,0.85401,0.049728,0.040333,-0.005004, -0.129383,-0.503912,0.85401,0.051725,0.039684,-0.005004, -0.103226,-0.402039,0.909785,0.051759,0.039815,-0.004932, -0.128267,-0.394764,0.909785,0.050758,0.040106,-0.004932, -0.129383,-0.503912,0.85401,0.051725,0.039684,-0.005004, -0.128267,-0.394764,0.909785,0.050758,0.040106,-0.004932, -0.160768,-0.494794,0.85401,0.050716,0.039977,-0.005004, -0.097487,-0.511042,0.85401,0.052751,0.039454,-0.005004, -0.077778,-0.407727,0.909785,0.052776,0.039587,-0.004932, -0.103226,-0.402039,0.909785,0.051759,0.039815,-0.004932, -0.097487,-0.511042,0.85401,0.052751,0.039454,-0.005004, -0.103226,-0.402039,0.909785,0.051759,0.039815,-0.004932, -0.129383,-0.503912,0.85401,0.051725,0.039684,-0.005004, -0.065205,-0.516155,0.85401,0.053789,0.03929,-0.005004, -0.052023,-0.411806,0.909785,0.053806,0.039424,-0.004932, -0.077778,-0.407727,0.909785,0.052776,0.039587,-0.004932, -0.065205,-0.516155,0.85401,0.053789,0.03929,-0.005004, -0.077778,-0.407727,0.909785,0.052776,0.039587,-0.004932, -0.097487,-0.511042,0.85401,0.052751,0.039454,-0.005004, -0.032667,-0.519231,0.85401,0.054835,0.039191,-0.005004, -0.026063,-0.41426,0.909785,0.054844,0.039326,-0.004932, -0.052023,-0.411806,0.909785,0.053806,0.039424,-0.004932, -0.032667,-0.519231,0.85401,0.054835,0.039191,-0.005004, -0.052023,-0.411806,0.909785,0.053806,0.039424,-0.004932, -0.065205,-0.516155,0.85401,0.053789,0.03929,-0.005004, 0,-0.520257,0.85401,0.055885,0.039158,-0.005004, 0,-0.415079,0.909785,0.055885,0.039294,-0.004932, -0.026063,-0.41426,0.909785,0.054844,0.039326,-0.004932, 0,-0.520257,0.85401,0.055885,0.039158,-0.005004, -0.026063,-0.41426,0.909785,0.054844,0.039326,-0.004932, -0.032667,-0.519231,0.85401,0.054835,0.039191,-0.005004, 0.032667,-0.519231,0.85401,0.056936,0.039191,-0.005004, 0.026063,-0.41426,0.909785,0.056927,0.039326,-0.004932, 0,-0.415079,0.909785,0.055885,0.039294,-0.004932, 0.032667,-0.519231,0.85401,0.056936,0.039191,-0.005004, 0,-0.415079,0.909785,0.055885,0.039294,-0.004932, 0,-0.520257,0.85401,0.055885,0.039158,-0.005004, 0.065205,-0.516155,0.85401,0.057982,0.03929,-0.005004, 0.052023,-0.411806,0.909785,0.057965,0.039424,-0.004932, 0.026063,-0.41426,0.909785,0.056927,0.039326,-0.004932, 0.065205,-0.516155,0.85401,0.057982,0.03929,-0.005004, 0.026063,-0.41426,0.909785,0.056927,0.039326,-0.004932, 0.032667,-0.519231,0.85401,0.056936,0.039191,-0.005004, 0.097487,-0.511042,0.85401,0.05902,0.039454,-0.005004, 0.077778,-0.407727,0.909785,0.058994,0.039587,-0.004932, 0.052023,-0.411806,0.909785,0.057965,0.039424,-0.004932, 0.097487,-0.511042,0.85401,0.05902,0.039454,-0.005004, 0.052023,-0.411806,0.909785,0.057965,0.039424,-0.004932, 0.065205,-0.516155,0.85401,0.057982,0.03929,-0.005004, 0.129383,-0.503912,0.85401,0.060045,0.039684,-0.005004, 0.103226,-0.402039,0.909785,0.060012,0.039815,-0.004932, 0.077778,-0.407727,0.909785,0.058994,0.039587,-0.004932, 0.129383,-0.503912,0.85401,0.060045,0.039684,-0.005004, 0.077778,-0.407727,0.909785,0.058994,0.039587,-0.004932, 0.097487,-0.511042,0.85401,0.05902,0.039454,-0.005004, 0.160768,-0.494794,0.85401,0.061054,0.039977,-0.005004, 0.128267,-0.394764,0.909785,0.061012,0.040106,-0.004932, 0.103226,-0.402039,0.909785,0.060012,0.039815,-0.004932, 0.160768,-0.494794,0.85401,0.061054,0.039977,-0.005004, 0.103226,-0.402039,0.909785,0.060012,0.039815,-0.004932, 0.129383,-0.503912,0.85401,0.060045,0.039684,-0.005004, 0.191519,-0.483723,0.85401,0.062043,0.040333,-0.005004, 0.152801,-0.385931,0.909785,0.061993,0.040459,-0.004932, 0.128267,-0.394764,0.909785,0.061012,0.040106,-0.004932, 0.191519,-0.483723,0.85401,0.062043,0.040333,-0.005004, 0.128267,-0.394764,0.909785,0.061012,0.040106,-0.004932, 0.160768,-0.494794,0.85401,0.061054,0.039977,-0.005004, 0.221515,-0.470743,0.85401,0.063007,0.04075,-0.005004, 0.176732,-0.375575,0.909785,0.06295,0.040873,-0.004932, 0.152801,-0.385931,0.909785,0.061993,0.040459,-0.004932, 0.221515,-0.470743,0.85401,0.063007,0.04075,-0.005004, 0.152801,-0.385931,0.909785,0.061993,0.040459,-0.004932, 0.191519,-0.483723,0.85401,0.062043,0.040333,-0.005004, 0.250636,-0.455905,0.85401,0.063944,0.041227,-0.005004, 0.199966,-0.363737,0.909785,0.063878,0.041346,-0.004932, 0.176732,-0.375575,0.909785,0.06295,0.040873,-0.004932, 0.250636,-0.455905,0.85401,0.063944,0.041227,-0.005004, 0.176732,-0.375575,0.909785,0.06295,0.040873,-0.004932, 0.221515,-0.470743,0.85401,0.063007,0.04075,-0.005004, 0.278768,-0.439268,0.85401,0.064848,0.041762,-0.005004, 0.222411,-0.350463,0.909785,0.064776,0.041876,-0.004932, 0.199966,-0.363737,0.909785,0.063878,0.041346,-0.004932, 0.278768,-0.439268,0.85401,0.064848,0.041762,-0.005004, 0.199966,-0.363737,0.909785,0.063878,0.041346,-0.004932, 0.250636,-0.455905,0.85401,0.063944,0.041227,-0.005004, 0.3058,-0.420897,0.85401,0.065717,0.042353,-0.005004, 0.243978,-0.335806,0.909785,0.065638,0.042462,-0.004932, 0.222411,-0.350463,0.909785,0.064776,0.041876,-0.004932, 0.3058,-0.420897,0.85401,0.065717,0.042353,-0.005004, 0.222411,-0.350463,0.909785,0.064776,0.041876,-0.004932, 0.278768,-0.439268,0.85401,0.064848,0.041762,-0.005004, 0.331624,-0.400865,0.85401,0.066548,0.042997,-0.005004, 0.264582,-0.319824,0.909785,0.066461,0.043101,-0.004932, 0.243978,-0.335806,0.909785,0.065638,0.042462,-0.004932, 0.331624,-0.400865,0.85401,0.066548,0.042997,-0.005004, 0.243978,-0.335806,0.909785,0.065638,0.042462,-0.004932, 0.3058,-0.420897,0.85401,0.065717,0.042353,-0.005004, 0.356141,-0.379251,0.85401,0.067336,0.043692,-0.005004, 0.284141,-0.30258,0.909785,0.067243,0.04379,-0.004932, 0.264582,-0.319824,0.909785,0.066461,0.043101,-0.004932, 0.356141,-0.379251,0.85401,0.067336,0.043692,-0.005004, 0.264582,-0.319824,0.909785,0.066461,0.043101,-0.004932, 0.331624,-0.400865,0.85401,0.066548,0.042997,-0.005004, 0.379251,-0.356141,0.85401,0.068079,0.044435,-0.005004, 0.30258,-0.284141,0.909785,0.06798,0.044527,-0.004932, 0.284141,-0.30258,0.909785,0.067243,0.04379,-0.004932, 0.379251,-0.356141,0.85401,0.068079,0.044435,-0.005004, 0.284141,-0.30258,0.909785,0.067243,0.04379,-0.004932, 0.356141,-0.379251,0.85401,0.067336,0.043692,-0.005004, 0.400865,-0.331624,0.85401,0.068774,0.045223,-0.005004, 0.319824,-0.264582,0.909785,0.06867,0.045309,-0.004932, 0.30258,-0.284141,0.909785,0.06798,0.044527,-0.004932, 0.400865,-0.331624,0.85401,0.068774,0.045223,-0.005004, 0.30258,-0.284141,0.909785,0.06798,0.044527,-0.004932, 0.379251,-0.356141,0.85401,0.068079,0.044435,-0.005004, 0.420897,-0.3058,0.85401,0.069418,0.046053,-0.005004, 0.335806,-0.243978,0.909785,0.069308,0.046133,-0.004932, 0.319824,-0.264582,0.909785,0.06867,0.045309,-0.004932, 0.420897,-0.3058,0.85401,0.069418,0.046053,-0.005004, 0.319824,-0.264582,0.909785,0.06867,0.045309,-0.004932, 0.400865,-0.331624,0.85401,0.068774,0.045223,-0.005004, 0.439268,-0.278768,0.85401,0.070009,0.046922,-0.005004, 0.350463,-0.222411,0.909785,0.069894,0.046995,-0.004932, 0.335806,-0.243978,0.909785,0.069308,0.046133,-0.004932, 0.439268,-0.278768,0.85401,0.070009,0.046922,-0.005004, 0.335806,-0.243978,0.909785,0.069308,0.046133,-0.004932, 0.420897,-0.3058,0.85401,0.069418,0.046053,-0.005004, 0.455905,-0.250636,0.85401,0.070543,0.047827,-0.005004, 0.363737,-0.199966,0.909785,0.070425,0.047892,-0.004932, 0.350463,-0.222411,0.909785,0.069894,0.046995,-0.004932, 0.455905,-0.250636,0.85401,0.070543,0.047827,-0.005004, 0.350463,-0.222411,0.909785,0.069894,0.046995,-0.004932, 0.439268,-0.278768,0.85401,0.070009,0.046922,-0.005004, 0.470743,-0.221515,0.85401,0.071021,0.048763,-0.005004, 0.375575,-0.176732,0.909785,0.070898,0.048821,-0.004932, 0.363737,-0.199966,0.909785,0.070425,0.047892,-0.004932, 0.470743,-0.221515,0.85401,0.071021,0.048763,-0.005004, 0.363737,-0.199966,0.909785,0.070425,0.047892,-0.004932, 0.455905,-0.250636,0.85401,0.070543,0.047827,-0.005004, 0.483723,-0.191519,0.85401,0.071438,0.049728,-0.005004, 0.385931,-0.152801,0.909785,0.071312,0.049777,-0.004932, 0.375575,-0.176732,0.909785,0.070898,0.048821,-0.004932, 0.483723,-0.191519,0.85401,0.071438,0.049728,-0.005004, 0.375575,-0.176732,0.909785,0.070898,0.048821,-0.004932, 0.470743,-0.221515,0.85401,0.071021,0.048763,-0.005004, 0.494794,-0.160768,0.85401,0.071794,0.050716,-0.005004, 0.394764,-0.128267,0.909785,0.071665,0.050758,-0.004932, 0.385931,-0.152801,0.909785,0.071312,0.049777,-0.004932, 0.494794,-0.160768,0.85401,0.071794,0.050716,-0.005004, 0.385931,-0.152801,0.909785,0.071312,0.049777,-0.004932, 0.483723,-0.191519,0.85401,0.071438,0.049728,-0.005004, 0.503912,-0.129383,0.85401,0.072087,0.051725,-0.005004, 0.402039,-0.103226,0.909785,0.071956,0.051759,-0.004932, 0.394764,-0.128267,0.909785,0.071665,0.050758,-0.004932, 0.503912,-0.129383,0.85401,0.072087,0.051725,-0.005004, 0.394764,-0.128267,0.909785,0.071665,0.050758,-0.004932, 0.494794,-0.160768,0.85401,0.071794,0.050716,-0.005004, 0.511042,-0.097487,0.85401,0.072316,0.052751,-0.005004, 0.407727,-0.077778,0.909785,0.072183,0.052776,-0.004932, 0.402039,-0.103226,0.909785,0.071956,0.051759,-0.004932, 0.511042,-0.097487,0.85401,0.072316,0.052751,-0.005004, 0.402039,-0.103226,0.909785,0.071956,0.051759,-0.004932, 0.503912,-0.129383,0.85401,0.072087,0.051725,-0.005004, 0.516155,-0.065205,0.85401,0.072481,0.053789,-0.005004, 0.411806,-0.052023,0.909785,0.072346,0.053806,-0.004932, 0.407727,-0.077778,0.909785,0.072183,0.052776,-0.004932, 0.516155,-0.065205,0.85401,0.072481,0.053789,-0.005004, 0.407727,-0.077778,0.909785,0.072183,0.052776,-0.004932, 0.511042,-0.097487,0.85401,0.072316,0.052751,-0.005004, 0.519231,-0.032667,0.85401,0.07258,0.054835,-0.005004, 0.41426,-0.026063,0.909785,0.072444,0.054844,-0.004932, 0.411806,-0.052023,0.909785,0.072346,0.053806,-0.004932, 0.519231,-0.032667,0.85401,0.07258,0.054835,-0.005004, 0.411806,-0.052023,0.909785,0.072346,0.053806,-0.004932, 0.516155,-0.065205,0.85401,0.072481,0.053789,-0.005004, 0.520257,0,0.85401,0.072613,0.055885,-0.005004, 0.415079,0,0.909785,0.072477,0.055885,-0.004932, 0.41426,-0.026063,0.909785,0.072444,0.054844,-0.004932, 0.520257,0,0.85401,0.072613,0.055885,-0.005004, 0.41426,-0.026063,0.909785,0.072444,0.054844,-0.004932, 0.519231,-0.032667,0.85401,0.07258,0.054835,-0.005004, 0.519231,0.032667,0.85401,0.07258,0.056936,-0.005004, 0.41426,0.026063,0.909785,0.072444,0.056927,-0.004932, 0.415079,0,0.909785,0.072477,0.055885,-0.004932, 0.519231,0.032667,0.85401,0.07258,0.056936,-0.005004, 0.415079,0,0.909785,0.072477,0.055885,-0.004932, 0.520257,0,0.85401,0.072613,0.055885,-0.005004, 0.516155,0.065205,0.85401,0.072481,0.057982,-0.005004, 0.411806,0.052023,0.909785,0.072346,0.057965,-0.004932, 0.41426,0.026063,0.909785,0.072444,0.056927,-0.004932, 0.516155,0.065205,0.85401,0.072481,0.057982,-0.005004, 0.41426,0.026063,0.909785,0.072444,0.056927,-0.004932, 0.519231,0.032667,0.85401,0.07258,0.056936,-0.005004, 0.511042,0.097487,0.85401,0.072316,0.05902,-0.005004, 0.407727,0.077778,0.909785,0.072183,0.058994,-0.004932, 0.411806,0.052023,0.909785,0.072346,0.057965,-0.004932, 0.511042,0.097487,0.85401,0.072316,0.05902,-0.005004, 0.411806,0.052023,0.909785,0.072346,0.057965,-0.004932, 0.516155,0.065205,0.85401,0.072481,0.057982,-0.005004, 0.503912,0.129383,0.85401,0.072087,0.060045,-0.005004, 0.402039,0.103226,0.909785,0.071956,0.060012,-0.004932, 0.407727,0.077778,0.909785,0.072183,0.058994,-0.004932, 0.503912,0.129383,0.85401,0.072087,0.060045,-0.005004, 0.407727,0.077778,0.909785,0.072183,0.058994,-0.004932, 0.511042,0.097487,0.85401,0.072316,0.05902,-0.005004, 0.494794,0.160768,0.85401,0.071794,0.061054,-0.005004, 0.394764,0.128267,0.909785,0.071665,0.061012,-0.004932, 0.402039,0.103226,0.909785,0.071956,0.060012,-0.004932, 0.494794,0.160768,0.85401,0.071794,0.061054,-0.005004, 0.402039,0.103226,0.909785,0.071956,0.060012,-0.004932, 0.503912,0.129383,0.85401,0.072087,0.060045,-0.005004, 0.483723,0.191519,0.85401,0.071438,0.062043,-0.005004, 0.385931,0.152801,0.909785,0.071312,0.061993,-0.004932, 0.394764,0.128267,0.909785,0.071665,0.061012,-0.004932, 0.483723,0.191519,0.85401,0.071438,0.062043,-0.005004, 0.394764,0.128267,0.909785,0.071665,0.061012,-0.004932, 0.494794,0.160768,0.85401,0.071794,0.061054,-0.005004, 0.470743,0.221515,0.85401,0.071021,0.063007,-0.005004, 0.375575,0.176732,0.909785,0.070898,0.06295,-0.004932, 0.385931,0.152801,0.909785,0.071312,0.061993,-0.004932, 0.470743,0.221515,0.85401,0.071021,0.063007,-0.005004, 0.385931,0.152801,0.909785,0.071312,0.061993,-0.004932, 0.483723,0.191519,0.85401,0.071438,0.062043,-0.005004, 0.455905,0.250636,0.85401,0.070543,0.063944,-0.005004, 0.363737,0.199966,0.909785,0.070425,0.063878,-0.004932, 0.375575,0.176732,0.909785,0.070898,0.06295,-0.004932, 0.455905,0.250636,0.85401,0.070543,0.063944,-0.005004, 0.375575,0.176732,0.909785,0.070898,0.06295,-0.004932, 0.470743,0.221515,0.85401,0.071021,0.063007,-0.005004, 0.439268,0.278768,0.85401,0.070009,0.064848,-0.005004, 0.350463,0.222411,0.909785,0.069894,0.064776,-0.004932, 0.363737,0.199966,0.909785,0.070425,0.063878,-0.004932, 0.439268,0.278768,0.85401,0.070009,0.064848,-0.005004, 0.363737,0.199966,0.909785,0.070425,0.063878,-0.004932, 0.455905,0.250636,0.85401,0.070543,0.063944,-0.005004, 0.420897,0.3058,0.85401,0.069418,0.065717,-0.005004, 0.335806,0.243978,0.909785,0.069308,0.065638,-0.004932, 0.350463,0.222411,0.909785,0.069894,0.064776,-0.004932, 0.420897,0.3058,0.85401,0.069418,0.065717,-0.005004, 0.350463,0.222411,0.909785,0.069894,0.064776,-0.004932, 0.439268,0.278768,0.85401,0.070009,0.064848,-0.005004, 0.400865,0.331624,0.85401,0.068774,0.066548,-0.005004, 0.319824,0.264582,0.909785,0.06867,0.066461,-0.004932, 0.335806,0.243978,0.909785,0.069308,0.065638,-0.004932, 0.400865,0.331624,0.85401,0.068774,0.066548,-0.005004, 0.335806,0.243978,0.909785,0.069308,0.065638,-0.004932, 0.420897,0.3058,0.85401,0.069418,0.065717,-0.005004, 0.379251,0.356141,0.85401,0.068079,0.067336,-0.005004, 0.30258,0.284141,0.909785,0.06798,0.067243,-0.004932, 0.319824,0.264582,0.909785,0.06867,0.066461,-0.004932, 0.379251,0.356141,0.85401,0.068079,0.067336,-0.005004, 0.319824,0.264582,0.909785,0.06867,0.066461,-0.004932, 0.400865,0.331624,0.85401,0.068774,0.066548,-0.005004, 0.356141,0.379251,0.85401,0.067336,0.068079,-0.005004, 0.284141,0.30258,0.909785,0.067243,0.06798,-0.004932, 0.30258,0.284141,0.909785,0.06798,0.067243,-0.004932, 0.356141,0.379251,0.85401,0.067336,0.068079,-0.005004, 0.30258,0.284141,0.909785,0.06798,0.067243,-0.004932, 0.379251,0.356141,0.85401,0.068079,0.067336,-0.005004, 0.331624,0.400865,0.85401,0.066548,0.068774,-0.005004, 0.264582,0.319824,0.909785,0.066461,0.06867,-0.004932, 0.284141,0.30258,0.909785,0.067243,0.06798,-0.004932, 0.331624,0.400865,0.85401,0.066548,0.068774,-0.005004, 0.284141,0.30258,0.909785,0.067243,0.06798,-0.004932, 0.356141,0.379251,0.85401,0.067336,0.068079,-0.005004, 0.3058,0.420897,0.85401,0.065717,0.069418,-0.005004, 0.243978,0.335806,0.909785,0.065638,0.069308,-0.004932, 0.264582,0.319824,0.909785,0.066461,0.06867,-0.004932, 0.3058,0.420897,0.85401,0.065717,0.069418,-0.005004, 0.264582,0.319824,0.909785,0.066461,0.06867,-0.004932, 0.331624,0.400865,0.85401,0.066548,0.068774,-0.005004, 0.278768,0.439268,0.85401,0.064848,0.070009,-0.005004, 0.222411,0.350463,0.909785,0.064776,0.069894,-0.004932, 0.243978,0.335806,0.909785,0.065638,0.069308,-0.004932, 0.278768,0.439268,0.85401,0.064848,0.070009,-0.005004, 0.243978,0.335806,0.909785,0.065638,0.069308,-0.004932, 0.3058,0.420897,0.85401,0.065717,0.069418,-0.005004, 0.250636,0.455905,0.85401,0.063944,0.070543,-0.005004, 0.199966,0.363737,0.909785,0.063878,0.070425,-0.004932, 0.222411,0.350463,0.909785,0.064776,0.069894,-0.004932, 0.250636,0.455905,0.85401,0.063944,0.070543,-0.005004, 0.222411,0.350463,0.909785,0.064776,0.069894,-0.004932, 0.278768,0.439268,0.85401,0.064848,0.070009,-0.005004, 0.221515,0.470743,0.85401,0.063007,0.071021,-0.005004, 0.176732,0.375575,0.909785,0.06295,0.070898,-0.004932, 0.199966,0.363737,0.909785,0.063878,0.070425,-0.004932, 0.221515,0.470743,0.85401,0.063007,0.071021,-0.005004, 0.199966,0.363737,0.909785,0.063878,0.070425,-0.004932, 0.250636,0.455905,0.85401,0.063944,0.070543,-0.005004, 0.191519,0.483723,0.85401,0.062043,0.071438,-0.005004, 0.152801,0.385931,0.909785,0.061993,0.071312,-0.004932, 0.176732,0.375575,0.909785,0.06295,0.070898,-0.004932, 0.191519,0.483723,0.85401,0.062043,0.071438,-0.005004, 0.176732,0.375575,0.909785,0.06295,0.070898,-0.004932, 0.221515,0.470743,0.85401,0.063007,0.071021,-0.005004, 0.160768,0.494794,0.85401,0.061054,0.071794,-0.005004, 0.128267,0.394764,0.909785,0.061012,0.071665,-0.004932, 0.152801,0.385931,0.909785,0.061993,0.071312,-0.004932, 0.160768,0.494794,0.85401,0.061054,0.071794,-0.005004, 0.152801,0.385931,0.909785,0.061993,0.071312,-0.004932, 0.191519,0.483723,0.85401,0.062043,0.071438,-0.005004, 0.129383,0.503912,0.85401,0.060045,0.072087,-0.005004, 0.103226,0.402039,0.909785,0.060012,0.071956,-0.004932, 0.128267,0.394764,0.909785,0.061012,0.071665,-0.004932, 0.129383,0.503912,0.85401,0.060045,0.072087,-0.005004, 0.128267,0.394764,0.909785,0.061012,0.071665,-0.004932, 0.160768,0.494794,0.85401,0.061054,0.071794,-0.005004, 0.097487,0.511042,0.85401,0.05902,0.072316,-0.005004, 0.077778,0.407727,0.909785,0.058994,0.072183,-0.004932, 0.103226,0.402039,0.909785,0.060012,0.071956,-0.004932, 0.097487,0.511042,0.85401,0.05902,0.072316,-0.005004, 0.103226,0.402039,0.909785,0.060012,0.071956,-0.004932, 0.129383,0.503912,0.85401,0.060045,0.072087,-0.005004, 0.065205,0.516155,0.85401,0.057982,0.072481,-0.005004, 0.052023,0.411806,0.909785,0.057965,0.072346,-0.004932, 0.077778,0.407727,0.909785,0.058994,0.072183,-0.004932, 0.065205,0.516155,0.85401,0.057982,0.072481,-0.005004, 0.077778,0.407727,0.909785,0.058994,0.072183,-0.004932, 0.097487,0.511042,0.85401,0.05902,0.072316,-0.005004, 0.032667,0.519231,0.85401,0.056936,0.07258,-0.005004, 0.026063,0.41426,0.909785,0.056927,0.072444,-0.004932, 0.052023,0.411806,0.909785,0.057965,0.072346,-0.004932, 0.032667,0.519231,0.85401,0.056936,0.07258,-0.005004, 0.052023,0.411806,0.909785,0.057965,0.072346,-0.004932, 0.065205,0.516155,0.85401,0.057982,0.072481,-0.005004, 0,0.520257,0.85401,0.055885,0.072613,-0.005004, 0,0.415079,0.909785,0.055885,0.072477,-0.004932, 0.026063,0.41426,0.909785,0.056927,0.072444,-0.004932, 0,0.520257,0.85401,0.055885,0.072613,-0.005004, 0.026063,0.41426,0.909785,0.056927,0.072444,-0.004932, 0.032667,0.519231,0.85401,0.056936,0.07258,-0.005004, -0.032667,0.519231,0.85401,0.054835,0.07258,-0.005004, -0.026063,0.41426,0.909785,0.054844,0.072444,-0.004932, 0,0.415079,0.909785,0.055885,0.072477,-0.004932, -0.032667,0.519231,0.85401,0.054835,0.07258,-0.005004, 0,0.415079,0.909785,0.055885,0.072477,-0.004932, 0,0.520257,0.85401,0.055885,0.072613,-0.005004, -0.065205,0.516155,0.85401,0.053789,0.072481,-0.005004, -0.052023,0.411806,0.909785,0.053806,0.072346,-0.004932, -0.026063,0.41426,0.909785,0.054844,0.072444,-0.004932, -0.065205,0.516155,0.85401,0.053789,0.072481,-0.005004, -0.026063,0.41426,0.909785,0.054844,0.072444,-0.004932, -0.032667,0.519231,0.85401,0.054835,0.07258,-0.005004, -0.097487,0.511042,0.85401,0.052751,0.072316,-0.005004, -0.077778,0.407727,0.909785,0.052776,0.072183,-0.004932, -0.052023,0.411806,0.909785,0.053806,0.072346,-0.004932, -0.097487,0.511042,0.85401,0.052751,0.072316,-0.005004, -0.052023,0.411806,0.909785,0.053806,0.072346,-0.004932, -0.065205,0.516155,0.85401,0.053789,0.072481,-0.005004, -0.129383,0.503912,0.85401,0.051725,0.072087,-0.005004, -0.103226,0.402039,0.909785,0.051759,0.071956,-0.004932, -0.077778,0.407727,0.909785,0.052776,0.072183,-0.004932, -0.129383,0.503912,0.85401,0.051725,0.072087,-0.005004, -0.077778,0.407727,0.909785,0.052776,0.072183,-0.004932, -0.097487,0.511042,0.85401,0.052751,0.072316,-0.005004, -0.160768,0.494794,0.85401,0.050716,0.071794,-0.005004, -0.128267,0.394764,0.909785,0.050758,0.071665,-0.004932, -0.103226,0.402039,0.909785,0.051759,0.071956,-0.004932, -0.160768,0.494794,0.85401,0.050716,0.071794,-0.005004, -0.103226,0.402039,0.909785,0.051759,0.071956,-0.004932, -0.129383,0.503912,0.85401,0.051725,0.072087,-0.005004, -0.191519,0.483723,0.85401,0.049728,0.071438,-0.005004, -0.152801,0.385931,0.909785,0.049777,0.071312,-0.004932, -0.128267,0.394764,0.909785,0.050758,0.071665,-0.004932, -0.191519,0.483723,0.85401,0.049728,0.071438,-0.005004, -0.128267,0.394764,0.909785,0.050758,0.071665,-0.004932, -0.160768,0.494794,0.85401,0.050716,0.071794,-0.005004, -0.221515,0.470743,0.85401,0.048763,0.071021,-0.005004, -0.176732,0.375575,0.909785,0.048821,0.070898,-0.004932, -0.152801,0.385931,0.909785,0.049777,0.071312,-0.004932, -0.221515,0.470743,0.85401,0.048763,0.071021,-0.005004, -0.152801,0.385931,0.909785,0.049777,0.071312,-0.004932, -0.191519,0.483723,0.85401,0.049728,0.071438,-0.005004, -0.250636,0.455905,0.85401,0.047827,0.070543,-0.005004, -0.199966,0.363737,0.909785,0.047892,0.070425,-0.004932, -0.176732,0.375575,0.909785,0.048821,0.070898,-0.004932, -0.250636,0.455905,0.85401,0.047827,0.070543,-0.005004, -0.176732,0.375575,0.909785,0.048821,0.070898,-0.004932, -0.221515,0.470743,0.85401,0.048763,0.071021,-0.005004, -0.278768,0.439268,0.85401,0.046922,0.070009,-0.005004, -0.222411,0.350463,0.909785,0.046995,0.069894,-0.004932, -0.199966,0.363737,0.909785,0.047892,0.070425,-0.004932, -0.278768,0.439268,0.85401,0.046922,0.070009,-0.005004, -0.199966,0.363737,0.909785,0.047892,0.070425,-0.004932, -0.250636,0.455905,0.85401,0.047827,0.070543,-0.005004, -0.3058,0.420897,0.85401,0.046053,0.069418,-0.005004, -0.243978,0.335806,0.909785,0.046133,0.069308,-0.004932, -0.222411,0.350463,0.909785,0.046995,0.069894,-0.004932, -0.3058,0.420897,0.85401,0.046053,0.069418,-0.005004, -0.222411,0.350463,0.909785,0.046995,0.069894,-0.004932, -0.278768,0.439268,0.85401,0.046922,0.070009,-0.005004, -0.331624,0.400865,0.85401,0.045223,0.068774,-0.005004, -0.264582,0.319824,0.909785,0.045309,0.06867,-0.004932, -0.243978,0.335806,0.909785,0.046133,0.069308,-0.004932, -0.331624,0.400865,0.85401,0.045223,0.068774,-0.005004, -0.243978,0.335806,0.909785,0.046133,0.069308,-0.004932, -0.3058,0.420897,0.85401,0.046053,0.069418,-0.005004, -0.356141,0.379251,0.85401,0.044435,0.068079,-0.005004, -0.284141,0.30258,0.909785,0.044527,0.06798,-0.004932, -0.264582,0.319824,0.909785,0.045309,0.06867,-0.004932, -0.356141,0.379251,0.85401,0.044435,0.068079,-0.005004, -0.264582,0.319824,0.909785,0.045309,0.06867,-0.004932, -0.331624,0.400865,0.85401,0.045223,0.068774,-0.005004, -0.379251,0.356141,0.85401,0.043692,0.067336,-0.005004, -0.30258,0.284141,0.909785,0.04379,0.067243,-0.004932, -0.284141,0.30258,0.909785,0.044527,0.06798,-0.004932, -0.379251,0.356141,0.85401,0.043692,0.067336,-0.005004, -0.284141,0.30258,0.909785,0.044527,0.06798,-0.004932, -0.356141,0.379251,0.85401,0.044435,0.068079,-0.005004, -0.400865,0.331624,0.85401,0.042997,0.066548,-0.005004, -0.319824,0.264582,0.909785,0.043101,0.066461,-0.004932, -0.30258,0.284141,0.909785,0.04379,0.067243,-0.004932, -0.400865,0.331624,0.85401,0.042997,0.066548,-0.005004, -0.30258,0.284141,0.909785,0.04379,0.067243,-0.004932, -0.379251,0.356141,0.85401,0.043692,0.067336,-0.005004, -0.420897,0.3058,0.85401,0.042353,0.065717,-0.005004, -0.335806,0.243978,0.909785,0.042462,0.065638,-0.004932, -0.319824,0.264582,0.909785,0.043101,0.066461,-0.004932, -0.420897,0.3058,0.85401,0.042353,0.065717,-0.005004, -0.319824,0.264582,0.909785,0.043101,0.066461,-0.004932, -0.400865,0.331624,0.85401,0.042997,0.066548,-0.005004, -0.439268,0.278768,0.85401,0.041762,0.064848,-0.005004, -0.350463,0.222411,0.909785,0.041876,0.064776,-0.004932, -0.335806,0.243978,0.909785,0.042462,0.065638,-0.004932, -0.439268,0.278768,0.85401,0.041762,0.064848,-0.005004, -0.335806,0.243978,0.909785,0.042462,0.065638,-0.004932, -0.420897,0.3058,0.85401,0.042353,0.065717,-0.005004, -0.455905,0.250636,0.85401,0.041227,0.063944,-0.005004, -0.363737,0.199966,0.909785,0.041346,0.063878,-0.004932, -0.350463,0.222411,0.909785,0.041876,0.064776,-0.004932, -0.455905,0.250636,0.85401,0.041227,0.063944,-0.005004, -0.350463,0.222411,0.909785,0.041876,0.064776,-0.004932, -0.439268,0.278768,0.85401,0.041762,0.064848,-0.005004, -0.470743,0.221515,0.85401,0.04075,0.063007,-0.005004, -0.375575,0.176732,0.909785,0.040873,0.06295,-0.004932, -0.363737,0.199966,0.909785,0.041346,0.063878,-0.004932, -0.470743,0.221515,0.85401,0.04075,0.063007,-0.005004, -0.363737,0.199966,0.909785,0.041346,0.063878,-0.004932, -0.455905,0.250636,0.85401,0.041227,0.063944,-0.005004, -0.483723,0.191519,0.85401,0.040333,0.062043,-0.005004, -0.385931,0.152801,0.909785,0.040459,0.061993,-0.004932, -0.375575,0.176732,0.909785,0.040873,0.06295,-0.004932, -0.483723,0.191519,0.85401,0.040333,0.062043,-0.005004, -0.375575,0.176732,0.909785,0.040873,0.06295,-0.004932, -0.470743,0.221515,0.85401,0.04075,0.063007,-0.005004, -0.494794,0.160768,0.85401,0.039977,0.061054,-0.005004, -0.394764,0.128267,0.909785,0.040106,0.061012,-0.004932, -0.385931,0.152801,0.909785,0.040459,0.061993,-0.004932, -0.494794,0.160768,0.85401,0.039977,0.061054,-0.005004, -0.385931,0.152801,0.909785,0.040459,0.061993,-0.004932, -0.483723,0.191519,0.85401,0.040333,0.062043,-0.005004, -0.503912,0.129383,0.85401,0.039684,0.060045,-0.005004, -0.402039,0.103226,0.909785,0.039815,0.060012,-0.004932, -0.394764,0.128267,0.909785,0.040106,0.061012,-0.004932, -0.503912,0.129383,0.85401,0.039684,0.060045,-0.005004, -0.394764,0.128267,0.909785,0.040106,0.061012,-0.004932, -0.494794,0.160768,0.85401,0.039977,0.061054,-0.005004, -0.511042,0.097487,0.85401,0.039454,0.05902,-0.005004, -0.407727,0.077778,0.909785,0.039587,0.058994,-0.004932, -0.402039,0.103226,0.909785,0.039815,0.060012,-0.004932, -0.511042,0.097487,0.85401,0.039454,0.05902,-0.005004, -0.402039,0.103226,0.909785,0.039815,0.060012,-0.004932, -0.503912,0.129383,0.85401,0.039684,0.060045,-0.005004, -0.407727,0.077778,0.909785,0.039587,0.058994,-0.004932, -0.298634,0.056967,0.952666,0.039728,0.058967,-0.004877, -0.294467,0.075606,0.952666,0.039953,0.059976,-0.004877, -0.407727,0.077778,0.909785,0.039587,0.058994,-0.004932, -0.294467,0.075606,0.952666,0.039953,0.059976,-0.004877, -0.402039,0.103226,0.909785,0.039815,0.060012,-0.004932, -0.411806,0.052023,0.909785,0.039424,0.057965,-0.004932, -0.301621,0.038104,0.952666,0.039566,0.057947,-0.004877, -0.298634,0.056967,0.952666,0.039728,0.058967,-0.004877, -0.411806,0.052023,0.909785,0.039424,0.057965,-0.004932, -0.298634,0.056967,0.952666,0.039728,0.058967,-0.004877, -0.407727,0.077778,0.909785,0.039587,0.058994,-0.004932, -0.41426,0.026063,0.909785,0.039326,0.056927,-0.004932, -0.303419,0.019089,0.952666,0.039469,0.056918,-0.004877, -0.301621,0.038104,0.952666,0.039566,0.057947,-0.004877, -0.41426,0.026063,0.909785,0.039326,0.056927,-0.004932, -0.301621,0.038104,0.952666,0.039566,0.057947,-0.004877, -0.411806,0.052023,0.909785,0.039424,0.057965,-0.004932, -0.415079,0,0.909785,0.039294,0.055885,-0.004932, -0.304019,0,0.952666,0.039437,0.055885,-0.004877, -0.303419,0.019089,0.952666,0.039469,0.056918,-0.004877, -0.415079,0,0.909785,0.039294,0.055885,-0.004932, -0.303419,0.019089,0.952666,0.039469,0.056918,-0.004877, -0.41426,0.026063,0.909785,0.039326,0.056927,-0.004932, -0.41426,-0.026063,0.909785,0.039326,0.054844,-0.004932, -0.303419,-0.019089,0.952666,0.039469,0.054852,-0.004877, -0.304019,0,0.952666,0.039437,0.055885,-0.004877, -0.41426,-0.026063,0.909785,0.039326,0.054844,-0.004932, -0.304019,0,0.952666,0.039437,0.055885,-0.004877, -0.415079,0,0.909785,0.039294,0.055885,-0.004932, -0.411806,-0.052023,0.909785,0.039424,0.053806,-0.004932, -0.301621,-0.038104,0.952666,0.039566,0.053824,-0.004877, -0.303419,-0.019089,0.952666,0.039469,0.054852,-0.004877, -0.411806,-0.052023,0.909785,0.039424,0.053806,-0.004932, -0.303419,-0.019089,0.952666,0.039469,0.054852,-0.004877, -0.41426,-0.026063,0.909785,0.039326,0.054844,-0.004932, -0.407727,-0.077778,0.909785,0.039587,0.052776,-0.004932, -0.298634,-0.056967,0.952666,0.039728,0.052803,-0.004877, -0.301621,-0.038104,0.952666,0.039566,0.053824,-0.004877, -0.407727,-0.077778,0.909785,0.039587,0.052776,-0.004932, -0.301621,-0.038104,0.952666,0.039566,0.053824,-0.004877, -0.411806,-0.052023,0.909785,0.039424,0.053806,-0.004932, -0.402039,-0.103226,0.909785,0.039815,0.051759,-0.004932, -0.294467,-0.075606,0.952666,0.039953,0.051795,-0.004877, -0.298634,-0.056967,0.952666,0.039728,0.052803,-0.004877, -0.402039,-0.103226,0.909785,0.039815,0.051759,-0.004932, -0.298634,-0.056967,0.952666,0.039728,0.052803,-0.004877, -0.407727,-0.077778,0.909785,0.039587,0.052776,-0.004932, -0.394764,-0.128267,0.909785,0.040106,0.050758,-0.004932, -0.289139,-0.093947,0.952666,0.040242,0.050802,-0.004877, -0.294467,-0.075606,0.952666,0.039953,0.051795,-0.004877, -0.394764,-0.128267,0.909785,0.040106,0.050758,-0.004932, -0.294467,-0.075606,0.952666,0.039953,0.051795,-0.004877, -0.402039,-0.103226,0.909785,0.039815,0.051759,-0.004932, -0.385931,-0.152801,0.909785,0.040459,0.049777,-0.004932, -0.282669,-0.111917,0.952666,0.040592,0.04983,-0.004877, -0.289139,-0.093947,0.952666,0.040242,0.050802,-0.004877, -0.385931,-0.152801,0.909785,0.040459,0.049777,-0.004932, -0.289139,-0.093947,0.952666,0.040242,0.050802,-0.004877, -0.394764,-0.128267,0.909785,0.040106,0.050758,-0.004932, -0.375575,-0.176732,0.909785,0.040873,0.048821,-0.004932, -0.275084,-0.129445,0.952666,0.041002,0.048882,-0.004877, -0.282669,-0.111917,0.952666,0.040592,0.04983,-0.004877, -0.375575,-0.176732,0.909785,0.040873,0.048821,-0.004932, -0.282669,-0.111917,0.952666,0.040592,0.04983,-0.004877, -0.385931,-0.152801,0.909785,0.040459,0.049777,-0.004932, -0.363737,-0.199966,0.909785,0.041346,0.047892,-0.004932, -0.266414,-0.146462,0.952666,0.041471,0.047961,-0.004877, -0.275084,-0.129445,0.952666,0.041002,0.048882,-0.004877, -0.363737,-0.199966,0.909785,0.041346,0.047892,-0.004932, -0.275084,-0.129445,0.952666,0.041002,0.048882,-0.004877, -0.375575,-0.176732,0.909785,0.040873,0.048821,-0.004932, -0.350463,-0.222411,0.909785,0.041876,0.046995,-0.004932, -0.256692,-0.162901,0.952666,0.041997,0.047072,-0.004877, -0.266414,-0.146462,0.952666,0.041471,0.047961,-0.004877, -0.350463,-0.222411,0.909785,0.041876,0.046995,-0.004932, -0.266414,-0.146462,0.952666,0.041471,0.047961,-0.004877, -0.363737,-0.199966,0.909785,0.041346,0.047892,-0.004932, -0.335806,-0.243978,0.909785,0.042462,0.046133,-0.004932, -0.245956,-0.178698,0.952666,0.042578,0.046217,-0.004877, -0.256692,-0.162901,0.952666,0.041997,0.047072,-0.004877, -0.335806,-0.243978,0.909785,0.042462,0.046133,-0.004932, -0.256692,-0.162901,0.952666,0.041997,0.047072,-0.004877, -0.350463,-0.222411,0.909785,0.041876,0.046995,-0.004932, -0.319824,-0.264582,0.909785,0.043101,0.045309,-0.004932, -0.23425,-0.193789,0.952666,0.043211,0.0454,-0.004877, -0.245956,-0.178698,0.952666,0.042578,0.046217,-0.004877, -0.319824,-0.264582,0.909785,0.043101,0.045309,-0.004932, -0.245956,-0.178698,0.952666,0.042578,0.046217,-0.004877, -0.335806,-0.243978,0.909785,0.042462,0.046133,-0.004932, -0.30258,-0.284141,0.909785,0.04379,0.044527,-0.004932, -0.22162,-0.208115,0.952666,0.043895,0.044625,-0.004877, -0.23425,-0.193789,0.952666,0.043211,0.0454,-0.004877, -0.30258,-0.284141,0.909785,0.04379,0.044527,-0.004932, -0.23425,-0.193789,0.952666,0.043211,0.0454,-0.004877, -0.319824,-0.264582,0.909785,0.043101,0.045309,-0.004932, -0.284141,-0.30258,0.909785,0.044527,0.04379,-0.004932, -0.208115,-0.22162,0.952666,0.044625,0.043895,-0.004877, -0.22162,-0.208115,0.952666,0.043895,0.044625,-0.004877, -0.284141,-0.30258,0.909785,0.044527,0.04379,-0.004932, -0.22162,-0.208115,0.952666,0.043895,0.044625,-0.004877, -0.30258,-0.284141,0.909785,0.04379,0.044527,-0.004932, -0.264582,-0.319824,0.909785,0.045309,0.043101,-0.004932, -0.193789,-0.23425,0.952666,0.0454,0.043211,-0.004877, -0.208115,-0.22162,0.952666,0.044625,0.043895,-0.004877, -0.264582,-0.319824,0.909785,0.045309,0.043101,-0.004932, -0.208115,-0.22162,0.952666,0.044625,0.043895,-0.004877, -0.284141,-0.30258,0.909785,0.044527,0.04379,-0.004932, -0.243978,-0.335806,0.909785,0.046133,0.042462,-0.004932, -0.178698,-0.245956,0.952666,0.046217,0.042578,-0.004877, -0.193789,-0.23425,0.952666,0.0454,0.043211,-0.004877, -0.243978,-0.335806,0.909785,0.046133,0.042462,-0.004932, -0.193789,-0.23425,0.952666,0.0454,0.043211,-0.004877, -0.264582,-0.319824,0.909785,0.045309,0.043101,-0.004932, -0.222411,-0.350463,0.909785,0.046995,0.041876,-0.004932, -0.162901,-0.256692,0.952666,0.047072,0.041997,-0.004877, -0.178698,-0.245956,0.952666,0.046217,0.042578,-0.004877, -0.222411,-0.350463,0.909785,0.046995,0.041876,-0.004932, -0.178698,-0.245956,0.952666,0.046217,0.042578,-0.004877, -0.243978,-0.335806,0.909785,0.046133,0.042462,-0.004932, -0.199966,-0.363737,0.909785,0.047892,0.041346,-0.004932, -0.146462,-0.266414,0.952666,0.047961,0.041471,-0.004877, -0.162901,-0.256692,0.952666,0.047072,0.041997,-0.004877, -0.199966,-0.363737,0.909785,0.047892,0.041346,-0.004932, -0.162901,-0.256692,0.952666,0.047072,0.041997,-0.004877, -0.222411,-0.350463,0.909785,0.046995,0.041876,-0.004932, -0.176732,-0.375575,0.909785,0.048821,0.040873,-0.004932, -0.129445,-0.275084,0.952666,0.048882,0.041002,-0.004877, -0.146462,-0.266414,0.952666,0.047961,0.041471,-0.004877, -0.176732,-0.375575,0.909785,0.048821,0.040873,-0.004932, -0.146462,-0.266414,0.952666,0.047961,0.041471,-0.004877, -0.199966,-0.363737,0.909785,0.047892,0.041346,-0.004932, -0.152801,-0.385931,0.909785,0.049777,0.040459,-0.004932, -0.111917,-0.282669,0.952666,0.04983,0.040592,-0.004877, -0.129445,-0.275084,0.952666,0.048882,0.041002,-0.004877, -0.152801,-0.385931,0.909785,0.049777,0.040459,-0.004932, -0.129445,-0.275084,0.952666,0.048882,0.041002,-0.004877, -0.176732,-0.375575,0.909785,0.048821,0.040873,-0.004932, -0.128267,-0.394764,0.909785,0.050758,0.040106,-0.004932, -0.093947,-0.289139,0.952666,0.050802,0.040242,-0.004877, -0.111917,-0.282669,0.952666,0.04983,0.040592,-0.004877, -0.128267,-0.394764,0.909785,0.050758,0.040106,-0.004932, -0.111917,-0.282669,0.952666,0.04983,0.040592,-0.004877, -0.152801,-0.385931,0.909785,0.049777,0.040459,-0.004932, -0.103226,-0.402039,0.909785,0.051759,0.039815,-0.004932, -0.075606,-0.294467,0.952666,0.051795,0.039953,-0.004877, -0.093947,-0.289139,0.952666,0.050802,0.040242,-0.004877, -0.103226,-0.402039,0.909785,0.051759,0.039815,-0.004932, -0.093947,-0.289139,0.952666,0.050802,0.040242,-0.004877, -0.128267,-0.394764,0.909785,0.050758,0.040106,-0.004932, -0.077778,-0.407727,0.909785,0.052776,0.039587,-0.004932, -0.056967,-0.298634,0.952666,0.052803,0.039728,-0.004877, -0.075606,-0.294467,0.952666,0.051795,0.039953,-0.004877, -0.077778,-0.407727,0.909785,0.052776,0.039587,-0.004932, -0.075606,-0.294467,0.952666,0.051795,0.039953,-0.004877, -0.103226,-0.402039,0.909785,0.051759,0.039815,-0.004932, -0.052023,-0.411806,0.909785,0.053806,0.039424,-0.004932, -0.038104,-0.301621,0.952666,0.053824,0.039566,-0.004877, -0.056967,-0.298634,0.952666,0.052803,0.039728,-0.004877, -0.052023,-0.411806,0.909785,0.053806,0.039424,-0.004932, -0.056967,-0.298634,0.952666,0.052803,0.039728,-0.004877, -0.077778,-0.407727,0.909785,0.052776,0.039587,-0.004932, -0.026063,-0.41426,0.909785,0.054844,0.039326,-0.004932, -0.019089,-0.303419,0.952666,0.054852,0.039469,-0.004877, -0.038104,-0.301621,0.952666,0.053824,0.039566,-0.004877, -0.026063,-0.41426,0.909785,0.054844,0.039326,-0.004932, -0.038104,-0.301621,0.952666,0.053824,0.039566,-0.004877, -0.052023,-0.411806,0.909785,0.053806,0.039424,-0.004932, 0,-0.415079,0.909785,0.055885,0.039294,-0.004932, 0,-0.304019,0.952666,0.055885,0.039437,-0.004877, -0.019089,-0.303419,0.952666,0.054852,0.039469,-0.004877, 0,-0.415079,0.909785,0.055885,0.039294,-0.004932, -0.019089,-0.303419,0.952666,0.054852,0.039469,-0.004877, -0.026063,-0.41426,0.909785,0.054844,0.039326,-0.004932, 0.026063,-0.41426,0.909785,0.056927,0.039326,-0.004932, 0.019089,-0.303419,0.952666,0.056918,0.039469,-0.004877, 0,-0.304019,0.952666,0.055885,0.039437,-0.004877, 0.026063,-0.41426,0.909785,0.056927,0.039326,-0.004932, 0,-0.304019,0.952666,0.055885,0.039437,-0.004877, 0,-0.415079,0.909785,0.055885,0.039294,-0.004932, 0.052023,-0.411806,0.909785,0.057965,0.039424,-0.004932, 0.038104,-0.301621,0.952666,0.057947,0.039566,-0.004877, 0.019089,-0.303419,0.952666,0.056918,0.039469,-0.004877, 0.052023,-0.411806,0.909785,0.057965,0.039424,-0.004932, 0.019089,-0.303419,0.952666,0.056918,0.039469,-0.004877, 0.026063,-0.41426,0.909785,0.056927,0.039326,-0.004932, 0.077778,-0.407727,0.909785,0.058994,0.039587,-0.004932, 0.056967,-0.298634,0.952666,0.058967,0.039728,-0.004877, 0.038104,-0.301621,0.952666,0.057947,0.039566,-0.004877, 0.077778,-0.407727,0.909785,0.058994,0.039587,-0.004932, 0.038104,-0.301621,0.952666,0.057947,0.039566,-0.004877, 0.052023,-0.411806,0.909785,0.057965,0.039424,-0.004932, 0.103226,-0.402039,0.909785,0.060012,0.039815,-0.004932, 0.075606,-0.294467,0.952666,0.059976,0.039953,-0.004877, 0.056967,-0.298634,0.952666,0.058967,0.039728,-0.004877, 0.103226,-0.402039,0.909785,0.060012,0.039815,-0.004932, 0.056967,-0.298634,0.952666,0.058967,0.039728,-0.004877, 0.077778,-0.407727,0.909785,0.058994,0.039587,-0.004932, 0.128267,-0.394764,0.909785,0.061012,0.040106,-0.004932, 0.093947,-0.289139,0.952666,0.060968,0.040242,-0.004877, 0.075606,-0.294467,0.952666,0.059976,0.039953,-0.004877, 0.128267,-0.394764,0.909785,0.061012,0.040106,-0.004932, 0.075606,-0.294467,0.952666,0.059976,0.039953,-0.004877, 0.103226,-0.402039,0.909785,0.060012,0.039815,-0.004932, 0.152801,-0.385931,0.909785,0.061993,0.040459,-0.004932, 0.111917,-0.282669,0.952666,0.061941,0.040592,-0.004877, 0.093947,-0.289139,0.952666,0.060968,0.040242,-0.004877, 0.152801,-0.385931,0.909785,0.061993,0.040459,-0.004932, 0.093947,-0.289139,0.952666,0.060968,0.040242,-0.004877, 0.128267,-0.394764,0.909785,0.061012,0.040106,-0.004932, 0.176732,-0.375575,0.909785,0.06295,0.040873,-0.004932, 0.129445,-0.275084,0.952666,0.062889,0.041002,-0.004877, 0.111917,-0.282669,0.952666,0.061941,0.040592,-0.004877, 0.176732,-0.375575,0.909785,0.06295,0.040873,-0.004932, 0.111917,-0.282669,0.952666,0.061941,0.040592,-0.004877, 0.152801,-0.385931,0.909785,0.061993,0.040459,-0.004932, 0.199966,-0.363737,0.909785,0.063878,0.041346,-0.004932, 0.146462,-0.266414,0.952666,0.063809,0.041471,-0.004877, 0.129445,-0.275084,0.952666,0.062889,0.041002,-0.004877, 0.199966,-0.363737,0.909785,0.063878,0.041346,-0.004932, 0.129445,-0.275084,0.952666,0.062889,0.041002,-0.004877, 0.176732,-0.375575,0.909785,0.06295,0.040873,-0.004932, 0.222411,-0.350463,0.909785,0.064776,0.041876,-0.004932, 0.162901,-0.256692,0.952666,0.064699,0.041997,-0.004877, 0.146462,-0.266414,0.952666,0.063809,0.041471,-0.004877, 0.222411,-0.350463,0.909785,0.064776,0.041876,-0.004932, 0.146462,-0.266414,0.952666,0.063809,0.041471,-0.004877, 0.199966,-0.363737,0.909785,0.063878,0.041346,-0.004932, 0.243978,-0.335806,0.909785,0.065638,0.042462,-0.004932, 0.178698,-0.245956,0.952666,0.065554,0.042578,-0.004877, 0.162901,-0.256692,0.952666,0.064699,0.041997,-0.004877, 0.243978,-0.335806,0.909785,0.065638,0.042462,-0.004932, 0.162901,-0.256692,0.952666,0.064699,0.041997,-0.004877, 0.222411,-0.350463,0.909785,0.064776,0.041876,-0.004932, 0.264582,-0.319824,0.909785,0.066461,0.043101,-0.004932, 0.193789,-0.23425,0.952666,0.06637,0.043211,-0.004877, 0.178698,-0.245956,0.952666,0.065554,0.042578,-0.004877, 0.264582,-0.319824,0.909785,0.066461,0.043101,-0.004932, 0.178698,-0.245956,0.952666,0.065554,0.042578,-0.004877, 0.243978,-0.335806,0.909785,0.065638,0.042462,-0.004932, 0.284141,-0.30258,0.909785,0.067243,0.04379,-0.004932, 0.208115,-0.22162,0.952666,0.067145,0.043895,-0.004877, 0.193789,-0.23425,0.952666,0.06637,0.043211,-0.004877, 0.284141,-0.30258,0.909785,0.067243,0.04379,-0.004932, 0.193789,-0.23425,0.952666,0.06637,0.043211,-0.004877, 0.264582,-0.319824,0.909785,0.066461,0.043101,-0.004932, 0.30258,-0.284141,0.909785,0.06798,0.044527,-0.004932, 0.22162,-0.208115,0.952666,0.067876,0.044625,-0.004877, 0.208115,-0.22162,0.952666,0.067145,0.043895,-0.004877, 0.30258,-0.284141,0.909785,0.06798,0.044527,-0.004932, 0.208115,-0.22162,0.952666,0.067145,0.043895,-0.004877, 0.284141,-0.30258,0.909785,0.067243,0.04379,-0.004932, 0.319824,-0.264582,0.909785,0.06867,0.045309,-0.004932, 0.23425,-0.193789,0.952666,0.068559,0.0454,-0.004877, 0.22162,-0.208115,0.952666,0.067876,0.044625,-0.004877, 0.319824,-0.264582,0.909785,0.06867,0.045309,-0.004932, 0.22162,-0.208115,0.952666,0.067876,0.044625,-0.004877, 0.30258,-0.284141,0.909785,0.06798,0.044527,-0.004932, 0.335806,-0.243978,0.909785,0.069308,0.046133,-0.004932, 0.245956,-0.178698,0.952666,0.069193,0.046217,-0.004877, 0.23425,-0.193789,0.952666,0.068559,0.0454,-0.004877, 0.335806,-0.243978,0.909785,0.069308,0.046133,-0.004932, 0.23425,-0.193789,0.952666,0.068559,0.0454,-0.004877, 0.319824,-0.264582,0.909785,0.06867,0.045309,-0.004932, 0.350463,-0.222411,0.909785,0.069894,0.046995,-0.004932, 0.256692,-0.162901,0.952666,0.069773,0.047072,-0.004877, 0.245956,-0.178698,0.952666,0.069193,0.046217,-0.004877, 0.350463,-0.222411,0.909785,0.069894,0.046995,-0.004932, 0.245956,-0.178698,0.952666,0.069193,0.046217,-0.004877, 0.335806,-0.243978,0.909785,0.069308,0.046133,-0.004932, 0.363737,-0.199966,0.909785,0.070425,0.047892,-0.004932, 0.266414,-0.146462,0.952666,0.070299,0.047961,-0.004877, 0.256692,-0.162901,0.952666,0.069773,0.047072,-0.004877, 0.363737,-0.199966,0.909785,0.070425,0.047892,-0.004932, 0.256692,-0.162901,0.952666,0.069773,0.047072,-0.004877, 0.350463,-0.222411,0.909785,0.069894,0.046995,-0.004932, 0.375575,-0.176732,0.909785,0.070898,0.048821,-0.004932, 0.275084,-0.129445,0.952666,0.070769,0.048882,-0.004877, 0.266414,-0.146462,0.952666,0.070299,0.047961,-0.004877, 0.375575,-0.176732,0.909785,0.070898,0.048821,-0.004932, 0.266414,-0.146462,0.952666,0.070299,0.047961,-0.004877, 0.363737,-0.199966,0.909785,0.070425,0.047892,-0.004932, 0.385931,-0.152801,0.909785,0.071312,0.049777,-0.004932, 0.282669,-0.111917,0.952666,0.071179,0.04983,-0.004877, 0.275084,-0.129445,0.952666,0.070769,0.048882,-0.004877, 0.385931,-0.152801,0.909785,0.071312,0.049777,-0.004932, 0.275084,-0.129445,0.952666,0.070769,0.048882,-0.004877, 0.375575,-0.176732,0.909785,0.070898,0.048821,-0.004932, 0.394764,-0.128267,0.909785,0.071665,0.050758,-0.004932, 0.289139,-0.093947,0.952666,0.071529,0.050802,-0.004877, 0.282669,-0.111917,0.952666,0.071179,0.04983,-0.004877, 0.394764,-0.128267,0.909785,0.071665,0.050758,-0.004932, 0.282669,-0.111917,0.952666,0.071179,0.04983,-0.004877, 0.385931,-0.152801,0.909785,0.071312,0.049777,-0.004932, 0.402039,-0.103226,0.909785,0.071956,0.051759,-0.004932, 0.294467,-0.075606,0.952666,0.071817,0.051795,-0.004877, 0.289139,-0.093947,0.952666,0.071529,0.050802,-0.004877, 0.402039,-0.103226,0.909785,0.071956,0.051759,-0.004932, 0.289139,-0.093947,0.952666,0.071529,0.050802,-0.004877, 0.394764,-0.128267,0.909785,0.071665,0.050758,-0.004932, 0.407727,-0.077778,0.909785,0.072183,0.052776,-0.004932, 0.298634,-0.056967,0.952666,0.072043,0.052803,-0.004877, 0.294467,-0.075606,0.952666,0.071817,0.051795,-0.004877, 0.407727,-0.077778,0.909785,0.072183,0.052776,-0.004932, 0.294467,-0.075606,0.952666,0.071817,0.051795,-0.004877, 0.402039,-0.103226,0.909785,0.071956,0.051759,-0.004932, 0.411806,-0.052023,0.909785,0.072346,0.053806,-0.004932, 0.301621,-0.038104,0.952666,0.072204,0.053824,-0.004877, 0.298634,-0.056967,0.952666,0.072043,0.052803,-0.004877, 0.411806,-0.052023,0.909785,0.072346,0.053806,-0.004932, 0.298634,-0.056967,0.952666,0.072043,0.052803,-0.004877, 0.407727,-0.077778,0.909785,0.072183,0.052776,-0.004932, 0.41426,-0.026063,0.909785,0.072444,0.054844,-0.004932, 0.303419,-0.019089,0.952666,0.072302,0.054852,-0.004877, 0.301621,-0.038104,0.952666,0.072204,0.053824,-0.004877, 0.41426,-0.026063,0.909785,0.072444,0.054844,-0.004932, 0.301621,-0.038104,0.952666,0.072204,0.053824,-0.004877, 0.411806,-0.052023,0.909785,0.072346,0.053806,-0.004932, 0.415079,0,0.909785,0.072477,0.055885,-0.004932, 0.304019,0,0.952666,0.072334,0.055885,-0.004877, 0.303419,-0.019089,0.952666,0.072302,0.054852,-0.004877, 0.415079,0,0.909785,0.072477,0.055885,-0.004932, 0.303419,-0.019089,0.952666,0.072302,0.054852,-0.004877, 0.41426,-0.026063,0.909785,0.072444,0.054844,-0.004932, 0.41426,0.026063,0.909785,0.072444,0.056927,-0.004932, 0.303419,0.019089,0.952666,0.072302,0.056918,-0.004877, 0.304019,0,0.952666,0.072334,0.055885,-0.004877, 0.41426,0.026063,0.909785,0.072444,0.056927,-0.004932, 0.304019,0,0.952666,0.072334,0.055885,-0.004877, 0.415079,0,0.909785,0.072477,0.055885,-0.004932, 0.411806,0.052023,0.909785,0.072346,0.057965,-0.004932, 0.301621,0.038104,0.952666,0.072204,0.057947,-0.004877, 0.303419,0.019089,0.952666,0.072302,0.056918,-0.004877, 0.411806,0.052023,0.909785,0.072346,0.057965,-0.004932, 0.303419,0.019089,0.952666,0.072302,0.056918,-0.004877, 0.41426,0.026063,0.909785,0.072444,0.056927,-0.004932, 0.407727,0.077778,0.909785,0.072183,0.058994,-0.004932, 0.298634,0.056967,0.952666,0.072043,0.058967,-0.004877, 0.301621,0.038104,0.952666,0.072204,0.057947,-0.004877, 0.407727,0.077778,0.909785,0.072183,0.058994,-0.004932, 0.301621,0.038104,0.952666,0.072204,0.057947,-0.004877, 0.411806,0.052023,0.909785,0.072346,0.057965,-0.004932, 0.402039,0.103226,0.909785,0.071956,0.060012,-0.004932, 0.294467,0.075606,0.952666,0.071817,0.059976,-0.004877, 0.298634,0.056967,0.952666,0.072043,0.058967,-0.004877, 0.402039,0.103226,0.909785,0.071956,0.060012,-0.004932, 0.298634,0.056967,0.952666,0.072043,0.058967,-0.004877, 0.407727,0.077778,0.909785,0.072183,0.058994,-0.004932, 0.394764,0.128267,0.909785,0.071665,0.061012,-0.004932, 0.289139,0.093947,0.952666,0.071529,0.060968,-0.004877, 0.294467,0.075606,0.952666,0.071817,0.059976,-0.004877, 0.394764,0.128267,0.909785,0.071665,0.061012,-0.004932, 0.294467,0.075606,0.952666,0.071817,0.059976,-0.004877, 0.402039,0.103226,0.909785,0.071956,0.060012,-0.004932, 0.385931,0.152801,0.909785,0.071312,0.061993,-0.004932, 0.282669,0.111917,0.952666,0.071179,0.061941,-0.004877, 0.289139,0.093947,0.952666,0.071529,0.060968,-0.004877, 0.385931,0.152801,0.909785,0.071312,0.061993,-0.004932, 0.289139,0.093947,0.952666,0.071529,0.060968,-0.004877, 0.394764,0.128267,0.909785,0.071665,0.061012,-0.004932, 0.375575,0.176732,0.909785,0.070898,0.06295,-0.004932, 0.275084,0.129445,0.952666,0.070769,0.062889,-0.004877, 0.282669,0.111917,0.952666,0.071179,0.061941,-0.004877, 0.375575,0.176732,0.909785,0.070898,0.06295,-0.004932, 0.282669,0.111917,0.952666,0.071179,0.061941,-0.004877, 0.385931,0.152801,0.909785,0.071312,0.061993,-0.004932, 0.363737,0.199966,0.909785,0.070425,0.063878,-0.004932, 0.266414,0.146462,0.952666,0.070299,0.063809,-0.004877, 0.275084,0.129445,0.952666,0.070769,0.062889,-0.004877, 0.363737,0.199966,0.909785,0.070425,0.063878,-0.004932, 0.275084,0.129445,0.952666,0.070769,0.062889,-0.004877, 0.375575,0.176732,0.909785,0.070898,0.06295,-0.004932, 0.350463,0.222411,0.909785,0.069894,0.064776,-0.004932, 0.256692,0.162901,0.952666,0.069773,0.064699,-0.004877, 0.266414,0.146462,0.952666,0.070299,0.063809,-0.004877, 0.350463,0.222411,0.909785,0.069894,0.064776,-0.004932, 0.266414,0.146462,0.952666,0.070299,0.063809,-0.004877, 0.363737,0.199966,0.909785,0.070425,0.063878,-0.004932, 0.335806,0.243978,0.909785,0.069308,0.065638,-0.004932, 0.245956,0.178698,0.952666,0.069193,0.065554,-0.004877, 0.256692,0.162901,0.952666,0.069773,0.064699,-0.004877, 0.335806,0.243978,0.909785,0.069308,0.065638,-0.004932, 0.256692,0.162901,0.952666,0.069773,0.064699,-0.004877, 0.350463,0.222411,0.909785,0.069894,0.064776,-0.004932, 0.319824,0.264582,0.909785,0.06867,0.066461,-0.004932, 0.23425,0.193789,0.952666,0.068559,0.06637,-0.004877, 0.245956,0.178698,0.952666,0.069193,0.065554,-0.004877, 0.319824,0.264582,0.909785,0.06867,0.066461,-0.004932, 0.245956,0.178698,0.952666,0.069193,0.065554,-0.004877, 0.335806,0.243978,0.909785,0.069308,0.065638,-0.004932, 0.30258,0.284141,0.909785,0.06798,0.067243,-0.004932, 0.22162,0.208115,0.952666,0.067876,0.067145,-0.004877, 0.23425,0.193789,0.952666,0.068559,0.06637,-0.004877, 0.30258,0.284141,0.909785,0.06798,0.067243,-0.004932, 0.23425,0.193789,0.952666,0.068559,0.06637,-0.004877, 0.319824,0.264582,0.909785,0.06867,0.066461,-0.004932, 0.284141,0.30258,0.909785,0.067243,0.06798,-0.004932, 0.208115,0.22162,0.952666,0.067145,0.067876,-0.004877, 0.22162,0.208115,0.952666,0.067876,0.067145,-0.004877, 0.284141,0.30258,0.909785,0.067243,0.06798,-0.004932, 0.22162,0.208115,0.952666,0.067876,0.067145,-0.004877, 0.30258,0.284141,0.909785,0.06798,0.067243,-0.004932, 0.264582,0.319824,0.909785,0.066461,0.06867,-0.004932, 0.193789,0.23425,0.952666,0.06637,0.068559,-0.004877, 0.208115,0.22162,0.952666,0.067145,0.067876,-0.004877, 0.264582,0.319824,0.909785,0.066461,0.06867,-0.004932, 0.208115,0.22162,0.952666,0.067145,0.067876,-0.004877, 0.284141,0.30258,0.909785,0.067243,0.06798,-0.004932, 0.243978,0.335806,0.909785,0.065638,0.069308,-0.004932, 0.178698,0.245956,0.952666,0.065554,0.069193,-0.004877, 0.193789,0.23425,0.952666,0.06637,0.068559,-0.004877, 0.243978,0.335806,0.909785,0.065638,0.069308,-0.004932, 0.193789,0.23425,0.952666,0.06637,0.068559,-0.004877, 0.264582,0.319824,0.909785,0.066461,0.06867,-0.004932, 0.222411,0.350463,0.909785,0.064776,0.069894,-0.004932, 0.162901,0.256692,0.952666,0.064699,0.069773,-0.004877, 0.178698,0.245956,0.952666,0.065554,0.069193,-0.004877, 0.222411,0.350463,0.909785,0.064776,0.069894,-0.004932, 0.178698,0.245956,0.952666,0.065554,0.069193,-0.004877, 0.243978,0.335806,0.909785,0.065638,0.069308,-0.004932, 0.199966,0.363737,0.909785,0.063878,0.070425,-0.004932, 0.146462,0.266414,0.952666,0.063809,0.070299,-0.004877, 0.162901,0.256692,0.952666,0.064699,0.069773,-0.004877, 0.199966,0.363737,0.909785,0.063878,0.070425,-0.004932, 0.162901,0.256692,0.952666,0.064699,0.069773,-0.004877, 0.222411,0.350463,0.909785,0.064776,0.069894,-0.004932, 0.176732,0.375575,0.909785,0.06295,0.070898,-0.004932, 0.129445,0.275084,0.952666,0.062889,0.070769,-0.004877, 0.146462,0.266414,0.952666,0.063809,0.070299,-0.004877, 0.176732,0.375575,0.909785,0.06295,0.070898,-0.004932, 0.146462,0.266414,0.952666,0.063809,0.070299,-0.004877, 0.199966,0.363737,0.909785,0.063878,0.070425,-0.004932, 0.152801,0.385931,0.909785,0.061993,0.071312,-0.004932, 0.111917,0.282669,0.952666,0.061941,0.071179,-0.004877, 0.129445,0.275084,0.952666,0.062889,0.070769,-0.004877, 0.152801,0.385931,0.909785,0.061993,0.071312,-0.004932, 0.129445,0.275084,0.952666,0.062889,0.070769,-0.004877, 0.176732,0.375575,0.909785,0.06295,0.070898,-0.004932, 0.128267,0.394764,0.909785,0.061012,0.071665,-0.004932, 0.093947,0.289139,0.952666,0.060968,0.071529,-0.004877, 0.111917,0.282669,0.952666,0.061941,0.071179,-0.004877, 0.128267,0.394764,0.909785,0.061012,0.071665,-0.004932, 0.111917,0.282669,0.952666,0.061941,0.071179,-0.004877, 0.152801,0.385931,0.909785,0.061993,0.071312,-0.004932, 0.103226,0.402039,0.909785,0.060012,0.071956,-0.004932, 0.075606,0.294467,0.952666,0.059976,0.071817,-0.004877, 0.093947,0.289139,0.952666,0.060968,0.071529,-0.004877, 0.103226,0.402039,0.909785,0.060012,0.071956,-0.004932, 0.093947,0.289139,0.952666,0.060968,0.071529,-0.004877, 0.128267,0.394764,0.909785,0.061012,0.071665,-0.004932, 0.077778,0.407727,0.909785,0.058994,0.072183,-0.004932, 0.056967,0.298634,0.952666,0.058967,0.072043,-0.004877, 0.075606,0.294467,0.952666,0.059976,0.071817,-0.004877, 0.077778,0.407727,0.909785,0.058994,0.072183,-0.004932, 0.075606,0.294467,0.952666,0.059976,0.071817,-0.004877, 0.103226,0.402039,0.909785,0.060012,0.071956,-0.004932, 0.052023,0.411806,0.909785,0.057965,0.072346,-0.004932, 0.038104,0.301621,0.952666,0.057947,0.072204,-0.004877, 0.056967,0.298634,0.952666,0.058967,0.072043,-0.004877, 0.052023,0.411806,0.909785,0.057965,0.072346,-0.004932, 0.056967,0.298634,0.952666,0.058967,0.072043,-0.004877, 0.077778,0.407727,0.909785,0.058994,0.072183,-0.004932, 0.026063,0.41426,0.909785,0.056927,0.072444,-0.004932, 0.019089,0.303419,0.952666,0.056918,0.072302,-0.004877, 0.038104,0.301621,0.952666,0.057947,0.072204,-0.004877, 0.026063,0.41426,0.909785,0.056927,0.072444,-0.004932, 0.038104,0.301621,0.952666,0.057947,0.072204,-0.004877, 0.052023,0.411806,0.909785,0.057965,0.072346,-0.004932, 0,0.415079,0.909785,0.055885,0.072477,-0.004932, 0,0.304019,0.952666,0.055885,0.072334,-0.004877, 0.019089,0.303419,0.952666,0.056918,0.072302,-0.004877, 0,0.415079,0.909785,0.055885,0.072477,-0.004932, 0.019089,0.303419,0.952666,0.056918,0.072302,-0.004877, 0.026063,0.41426,0.909785,0.056927,0.072444,-0.004932, -0.026063,0.41426,0.909785,0.054844,0.072444,-0.004932, -0.019089,0.303419,0.952666,0.054852,0.072302,-0.004877, 0,0.304019,0.952666,0.055885,0.072334,-0.004877, -0.026063,0.41426,0.909785,0.054844,0.072444,-0.004932, 0,0.304019,0.952666,0.055885,0.072334,-0.004877, 0,0.415079,0.909785,0.055885,0.072477,-0.004932, -0.052023,0.411806,0.909785,0.053806,0.072346,-0.004932, -0.038104,0.301621,0.952666,0.053824,0.072204,-0.004877, -0.019089,0.303419,0.952666,0.054852,0.072302,-0.004877, -0.052023,0.411806,0.909785,0.053806,0.072346,-0.004932, -0.019089,0.303419,0.952666,0.054852,0.072302,-0.004877, -0.026063,0.41426,0.909785,0.054844,0.072444,-0.004932, -0.077778,0.407727,0.909785,0.052776,0.072183,-0.004932, -0.056967,0.298634,0.952666,0.052803,0.072043,-0.004877, -0.038104,0.301621,0.952666,0.053824,0.072204,-0.004877, -0.077778,0.407727,0.909785,0.052776,0.072183,-0.004932, -0.038104,0.301621,0.952666,0.053824,0.072204,-0.004877, -0.052023,0.411806,0.909785,0.053806,0.072346,-0.004932, -0.103226,0.402039,0.909785,0.051759,0.071956,-0.004932, -0.075606,0.294467,0.952666,0.051795,0.071817,-0.004877, -0.056967,0.298634,0.952666,0.052803,0.072043,-0.004877, -0.103226,0.402039,0.909785,0.051759,0.071956,-0.004932, -0.056967,0.298634,0.952666,0.052803,0.072043,-0.004877, -0.077778,0.407727,0.909785,0.052776,0.072183,-0.004932, -0.128267,0.394764,0.909785,0.050758,0.071665,-0.004932, -0.093947,0.289139,0.952666,0.050802,0.071529,-0.004877, -0.075606,0.294467,0.952666,0.051795,0.071817,-0.004877, -0.128267,0.394764,0.909785,0.050758,0.071665,-0.004932, -0.075606,0.294467,0.952666,0.051795,0.071817,-0.004877, -0.103226,0.402039,0.909785,0.051759,0.071956,-0.004932, -0.152801,0.385931,0.909785,0.049777,0.071312,-0.004932, -0.111917,0.282669,0.952666,0.04983,0.071179,-0.004877, -0.093947,0.289139,0.952666,0.050802,0.071529,-0.004877, -0.152801,0.385931,0.909785,0.049777,0.071312,-0.004932, -0.093947,0.289139,0.952666,0.050802,0.071529,-0.004877, -0.128267,0.394764,0.909785,0.050758,0.071665,-0.004932, -0.176732,0.375575,0.909785,0.048821,0.070898,-0.004932, -0.129445,0.275084,0.952666,0.048882,0.070769,-0.004877, -0.111917,0.282669,0.952666,0.04983,0.071179,-0.004877, -0.176732,0.375575,0.909785,0.048821,0.070898,-0.004932, -0.111917,0.282669,0.952666,0.04983,0.071179,-0.004877, -0.152801,0.385931,0.909785,0.049777,0.071312,-0.004932, -0.199966,0.363737,0.909785,0.047892,0.070425,-0.004932, -0.146462,0.266414,0.952666,0.047961,0.070299,-0.004877, -0.129445,0.275084,0.952666,0.048882,0.070769,-0.004877, -0.199966,0.363737,0.909785,0.047892,0.070425,-0.004932, -0.129445,0.275084,0.952666,0.048882,0.070769,-0.004877, -0.176732,0.375575,0.909785,0.048821,0.070898,-0.004932, -0.222411,0.350463,0.909785,0.046995,0.069894,-0.004932, -0.162901,0.256692,0.952666,0.047072,0.069773,-0.004877, -0.146462,0.266414,0.952666,0.047961,0.070299,-0.004877, -0.222411,0.350463,0.909785,0.046995,0.069894,-0.004932, -0.146462,0.266414,0.952666,0.047961,0.070299,-0.004877, -0.199966,0.363737,0.909785,0.047892,0.070425,-0.004932, -0.243978,0.335806,0.909785,0.046133,0.069308,-0.004932, -0.178698,0.245956,0.952666,0.046217,0.069193,-0.004877, -0.162901,0.256692,0.952666,0.047072,0.069773,-0.004877, -0.243978,0.335806,0.909785,0.046133,0.069308,-0.004932, -0.162901,0.256692,0.952666,0.047072,0.069773,-0.004877, -0.222411,0.350463,0.909785,0.046995,0.069894,-0.004932, -0.264582,0.319824,0.909785,0.045309,0.06867,-0.004932, -0.193789,0.23425,0.952666,0.0454,0.068559,-0.004877, -0.178698,0.245956,0.952666,0.046217,0.069193,-0.004877, -0.264582,0.319824,0.909785,0.045309,0.06867,-0.004932, -0.178698,0.245956,0.952666,0.046217,0.069193,-0.004877, -0.243978,0.335806,0.909785,0.046133,0.069308,-0.004932, -0.284141,0.30258,0.909785,0.044527,0.06798,-0.004932, -0.208115,0.22162,0.952666,0.044625,0.067876,-0.004877, -0.193789,0.23425,0.952666,0.0454,0.068559,-0.004877, -0.284141,0.30258,0.909785,0.044527,0.06798,-0.004932, -0.193789,0.23425,0.952666,0.0454,0.068559,-0.004877, -0.264582,0.319824,0.909785,0.045309,0.06867,-0.004932, -0.30258,0.284141,0.909785,0.04379,0.067243,-0.004932, -0.22162,0.208115,0.952666,0.043895,0.067145,-0.004877, -0.208115,0.22162,0.952666,0.044625,0.067876,-0.004877, -0.30258,0.284141,0.909785,0.04379,0.067243,-0.004932, -0.208115,0.22162,0.952666,0.044625,0.067876,-0.004877, -0.284141,0.30258,0.909785,0.044527,0.06798,-0.004932, -0.319824,0.264582,0.909785,0.043101,0.066461,-0.004932, -0.23425,0.193789,0.952666,0.043211,0.06637,-0.004877, -0.22162,0.208115,0.952666,0.043895,0.067145,-0.004877, -0.319824,0.264582,0.909785,0.043101,0.066461,-0.004932, -0.22162,0.208115,0.952666,0.043895,0.067145,-0.004877, -0.30258,0.284141,0.909785,0.04379,0.067243,-0.004932, -0.335806,0.243978,0.909785,0.042462,0.065638,-0.004932, -0.245956,0.178698,0.952666,0.042578,0.065554,-0.004877, -0.23425,0.193789,0.952666,0.043211,0.06637,-0.004877, -0.335806,0.243978,0.909785,0.042462,0.065638,-0.004932, -0.23425,0.193789,0.952666,0.043211,0.06637,-0.004877, -0.319824,0.264582,0.909785,0.043101,0.066461,-0.004932, -0.350463,0.222411,0.909785,0.041876,0.064776,-0.004932, -0.256692,0.162901,0.952666,0.041997,0.064699,-0.004877, -0.245956,0.178698,0.952666,0.042578,0.065554,-0.004877, -0.350463,0.222411,0.909785,0.041876,0.064776,-0.004932, -0.245956,0.178698,0.952666,0.042578,0.065554,-0.004877, -0.335806,0.243978,0.909785,0.042462,0.065638,-0.004932, -0.363737,0.199966,0.909785,0.041346,0.063878,-0.004932, -0.266414,0.146462,0.952666,0.041471,0.063809,-0.004877, -0.256692,0.162901,0.952666,0.041997,0.064699,-0.004877, -0.363737,0.199966,0.909785,0.041346,0.063878,-0.004932, -0.256692,0.162901,0.952666,0.041997,0.064699,-0.004877, -0.350463,0.222411,0.909785,0.041876,0.064776,-0.004932, -0.375575,0.176732,0.909785,0.040873,0.06295,-0.004932, -0.275084,0.129445,0.952666,0.041002,0.062889,-0.004877, -0.266414,0.146462,0.952666,0.041471,0.063809,-0.004877, -0.375575,0.176732,0.909785,0.040873,0.06295,-0.004932, -0.266414,0.146462,0.952666,0.041471,0.063809,-0.004877, -0.363737,0.199966,0.909785,0.041346,0.063878,-0.004932, -0.385931,0.152801,0.909785,0.040459,0.061993,-0.004932, -0.282669,0.111917,0.952666,0.040592,0.061941,-0.004877, -0.275084,0.129445,0.952666,0.041002,0.062889,-0.004877, -0.385931,0.152801,0.909785,0.040459,0.061993,-0.004932, -0.275084,0.129445,0.952666,0.041002,0.062889,-0.004877, -0.375575,0.176732,0.909785,0.040873,0.06295,-0.004932, -0.394764,0.128267,0.909785,0.040106,0.061012,-0.004932, -0.289139,0.093947,0.952666,0.040242,0.060968,-0.004877, -0.282669,0.111917,0.952666,0.040592,0.061941,-0.004877, -0.394764,0.128267,0.909785,0.040106,0.061012,-0.004932, -0.282669,0.111917,0.952666,0.040592,0.061941,-0.004877, -0.385931,0.152801,0.909785,0.040459,0.061993,-0.004932, -0.402039,0.103226,0.909785,0.039815,0.060012,-0.004932, -0.294467,0.075606,0.952666,0.039953,0.059976,-0.004877, -0.289139,0.093947,0.952666,0.040242,0.060968,-0.004877, -0.402039,0.103226,0.909785,0.039815,0.060012,-0.004932, -0.289139,0.093947,0.952666,0.040242,0.060968,-0.004877, -0.394764,0.128267,0.909785,0.040106,0.061012,-0.004932, -0.294467,0.075606,0.952666,0.039953,0.059976,-0.004877, -0.182722,0.046915,0.982045,0.040097,0.059939,-0.004839, -0.179416,0.058296,0.982045,0.040383,0.060922,-0.004839, -0.294467,0.075606,0.952666,0.039953,0.059976,-0.004877, -0.179416,0.058296,0.982045,0.040383,0.060922,-0.004839, -0.289139,0.093947,0.952666,0.040242,0.060968,-0.004877, -0.298634,0.056967,0.952666,0.039728,0.058967,-0.004877, -0.185308,0.035349,0.982045,0.039874,0.05894,-0.004839, -0.182722,0.046915,0.982045,0.040097,0.059939,-0.004839, -0.298634,0.056967,0.952666,0.039728,0.058967,-0.004877, -0.182722,0.046915,0.982045,0.040097,0.059939,-0.004839, -0.294467,0.075606,0.952666,0.039953,0.059976,-0.004877, -0.301621,0.038104,0.952666,0.039566,0.057947,-0.004877, -0.187162,0.023644,0.982045,0.039714,0.057928,-0.004839, -0.185308,0.035349,0.982045,0.039874,0.05894,-0.004839, -0.301621,0.038104,0.952666,0.039566,0.057947,-0.004877, -0.185308,0.035349,0.982045,0.039874,0.05894,-0.004839, -0.298634,0.056967,0.952666,0.039728,0.058967,-0.004877, -0.303419,0.019089,0.952666,0.039469,0.056918,-0.004877, -0.188277,0.011845,0.982045,0.039617,0.056909,-0.004839, -0.187162,0.023644,0.982045,0.039714,0.057928,-0.004839, -0.303419,0.019089,0.952666,0.039469,0.056918,-0.004877, -0.187162,0.023644,0.982045,0.039714,0.057928,-0.004839, -0.301621,0.038104,0.952666,0.039566,0.057947,-0.004877, -0.304019,0,0.952666,0.039437,0.055885,-0.004877, -0.188649,0,0.982045,0.039585,0.055885,-0.004839, -0.188277,0.011845,0.982045,0.039617,0.056909,-0.004839, -0.304019,0,0.952666,0.039437,0.055885,-0.004877, -0.188277,0.011845,0.982045,0.039617,0.056909,-0.004839, -0.303419,0.019089,0.952666,0.039469,0.056918,-0.004877, -0.303419,-0.019089,0.952666,0.039469,0.054852,-0.004877, -0.188277,-0.011845,0.982045,0.039617,0.054862,-0.004839, -0.188649,0,0.982045,0.039585,0.055885,-0.004839, -0.303419,-0.019089,0.952666,0.039469,0.054852,-0.004877, -0.188649,0,0.982045,0.039585,0.055885,-0.004839, -0.304019,0,0.952666,0.039437,0.055885,-0.004877, -0.301621,-0.038104,0.952666,0.039566,0.053824,-0.004877, -0.187162,-0.023644,0.982045,0.039714,0.053842,-0.004839, -0.188277,-0.011845,0.982045,0.039617,0.054862,-0.004839, -0.301621,-0.038104,0.952666,0.039566,0.053824,-0.004877, -0.188277,-0.011845,0.982045,0.039617,0.054862,-0.004839, -0.303419,-0.019089,0.952666,0.039469,0.054852,-0.004877, -0.298634,-0.056967,0.952666,0.039728,0.052803,-0.004877, -0.185308,-0.035349,0.982045,0.039874,0.052831,-0.004839, -0.187162,-0.023644,0.982045,0.039714,0.053842,-0.004839, -0.298634,-0.056967,0.952666,0.039728,0.052803,-0.004877, -0.187162,-0.023644,0.982045,0.039714,0.053842,-0.004839, -0.301621,-0.038104,0.952666,0.039566,0.053824,-0.004877, -0.294467,-0.075606,0.952666,0.039953,0.051795,-0.004877, -0.182722,-0.046915,0.982045,0.040097,0.051832,-0.004839, -0.185308,-0.035349,0.982045,0.039874,0.052831,-0.004839, -0.294467,-0.075606,0.952666,0.039953,0.051795,-0.004877, -0.185308,-0.035349,0.982045,0.039874,0.052831,-0.004839, -0.298634,-0.056967,0.952666,0.039728,0.052803,-0.004877, -0.289139,-0.093947,0.952666,0.040242,0.050802,-0.004877, -0.179416,-0.058296,0.982045,0.040383,0.050848,-0.004839, -0.182722,-0.046915,0.982045,0.040097,0.051832,-0.004839, -0.289139,-0.093947,0.952666,0.040242,0.050802,-0.004877, -0.182722,-0.046915,0.982045,0.040097,0.051832,-0.004839, -0.294467,-0.075606,0.952666,0.039953,0.051795,-0.004877, -0.282669,-0.111917,0.952666,0.040592,0.04983,-0.004877, -0.175402,-0.069446,0.982045,0.04073,0.049885,-0.004839, -0.179416,-0.058296,0.982045,0.040383,0.050848,-0.004839, -0.282669,-0.111917,0.952666,0.040592,0.04983,-0.004877, -0.179416,-0.058296,0.982045,0.040383,0.050848,-0.004839, -0.289139,-0.093947,0.952666,0.040242,0.050802,-0.004877, -0.275084,-0.129445,0.952666,0.041002,0.048882,-0.004877, -0.170695,-0.080323,0.982045,0.041136,0.048945,-0.004839, -0.175402,-0.069446,0.982045,0.04073,0.049885,-0.004839, -0.275084,-0.129445,0.952666,0.041002,0.048882,-0.004877, -0.175402,-0.069446,0.982045,0.04073,0.049885,-0.004839, -0.282669,-0.111917,0.952666,0.040592,0.04983,-0.004877, -0.266414,-0.146462,0.952666,0.041471,0.047961,-0.004877, -0.165314,-0.090882,0.982045,0.041601,0.048033,-0.004839, -0.170695,-0.080323,0.982045,0.041136,0.048945,-0.004839, -0.266414,-0.146462,0.952666,0.041471,0.047961,-0.004877, -0.170695,-0.080323,0.982045,0.041136,0.048945,-0.004839, -0.275084,-0.129445,0.952666,0.041002,0.048882,-0.004877, -0.256692,-0.162901,0.952666,0.041997,0.047072,-0.004877, -0.159282,-0.101083,0.982045,0.042123,0.047151,-0.004839, -0.165314,-0.090882,0.982045,0.041601,0.048033,-0.004839, -0.256692,-0.162901,0.952666,0.041997,0.047072,-0.004877, -0.165314,-0.090882,0.982045,0.041601,0.048033,-0.004839, -0.266414,-0.146462,0.952666,0.041471,0.047961,-0.004877, -0.245956,-0.178698,0.952666,0.042578,0.046217,-0.004877, -0.15262,-0.110885,0.982045,0.042698,0.046304,-0.004839, -0.159282,-0.101083,0.982045,0.042123,0.047151,-0.004839, -0.245956,-0.178698,0.952666,0.042578,0.046217,-0.004877, -0.159282,-0.101083,0.982045,0.042123,0.047151,-0.004839, -0.256692,-0.162901,0.952666,0.041997,0.047072,-0.004877, -0.23425,-0.193789,0.952666,0.043211,0.0454,-0.004877, -0.145357,-0.120249,0.982045,0.043326,0.045495,-0.004839, -0.15262,-0.110885,0.982045,0.042698,0.046304,-0.004839, -0.23425,-0.193789,0.952666,0.043211,0.0454,-0.004877, -0.15262,-0.110885,0.982045,0.042698,0.046304,-0.004839, -0.245956,-0.178698,0.952666,0.042578,0.046217,-0.004877, -0.22162,-0.208115,0.952666,0.043895,0.044625,-0.004877, -0.137519,-0.129139,0.982045,0.044003,0.044727,-0.004839, -0.145357,-0.120249,0.982045,0.043326,0.045495,-0.004839, -0.22162,-0.208115,0.952666,0.043895,0.044625,-0.004877, -0.145357,-0.120249,0.982045,0.043326,0.045495,-0.004839, -0.23425,-0.193789,0.952666,0.043211,0.0454,-0.004877, -0.208115,-0.22162,0.952666,0.044625,0.043895,-0.004877, -0.129139,-0.137519,0.982045,0.044727,0.044003,-0.004839, -0.137519,-0.129139,0.982045,0.044003,0.044727,-0.004839, -0.208115,-0.22162,0.952666,0.044625,0.043895,-0.004877, -0.137519,-0.129139,0.982045,0.044003,0.044727,-0.004839, -0.22162,-0.208115,0.952666,0.043895,0.044625,-0.004877, -0.193789,-0.23425,0.952666,0.0454,0.043211,-0.004877, -0.120249,-0.145357,0.982045,0.045495,0.043326,-0.004839, -0.129139,-0.137519,0.982045,0.044727,0.044003,-0.004839, -0.193789,-0.23425,0.952666,0.0454,0.043211,-0.004877, -0.129139,-0.137519,0.982045,0.044727,0.044003,-0.004839, -0.208115,-0.22162,0.952666,0.044625,0.043895,-0.004877, -0.178698,-0.245956,0.952666,0.046217,0.042578,-0.004877, -0.110885,-0.15262,0.982045,0.046304,0.042698,-0.004839, -0.120249,-0.145357,0.982045,0.045495,0.043326,-0.004839, -0.178698,-0.245956,0.952666,0.046217,0.042578,-0.004877, -0.120249,-0.145357,0.982045,0.045495,0.043326,-0.004839, -0.193789,-0.23425,0.952666,0.0454,0.043211,-0.004877, -0.162901,-0.256692,0.952666,0.047072,0.041997,-0.004877, -0.101083,-0.159282,0.982045,0.047151,0.042123,-0.004839, -0.110885,-0.15262,0.982045,0.046304,0.042698,-0.004839, -0.162901,-0.256692,0.952666,0.047072,0.041997,-0.004877, -0.110885,-0.15262,0.982045,0.046304,0.042698,-0.004839, -0.178698,-0.245956,0.952666,0.046217,0.042578,-0.004877, -0.146462,-0.266414,0.952666,0.047961,0.041471,-0.004877, -0.090882,-0.165314,0.982045,0.048033,0.041601,-0.004839, -0.101083,-0.159282,0.982045,0.047151,0.042123,-0.004839, -0.146462,-0.266414,0.952666,0.047961,0.041471,-0.004877, -0.101083,-0.159282,0.982045,0.047151,0.042123,-0.004839, -0.162901,-0.256692,0.952666,0.047072,0.041997,-0.004877, -0.129445,-0.275084,0.952666,0.048882,0.041002,-0.004877, -0.080323,-0.170695,0.982045,0.048945,0.041136,-0.004839, -0.090882,-0.165314,0.982045,0.048033,0.041601,-0.004839, -0.129445,-0.275084,0.952666,0.048882,0.041002,-0.004877, -0.090882,-0.165314,0.982045,0.048033,0.041601,-0.004839, -0.146462,-0.266414,0.952666,0.047961,0.041471,-0.004877, -0.111917,-0.282669,0.952666,0.04983,0.040592,-0.004877, -0.069446,-0.175402,0.982045,0.049885,0.04073,-0.004839, -0.080323,-0.170695,0.982045,0.048945,0.041136,-0.004839, -0.111917,-0.282669,0.952666,0.04983,0.040592,-0.004877, -0.080323,-0.170695,0.982045,0.048945,0.041136,-0.004839, -0.129445,-0.275084,0.952666,0.048882,0.041002,-0.004877, -0.093947,-0.289139,0.952666,0.050802,0.040242,-0.004877, -0.058296,-0.179416,0.982045,0.050848,0.040383,-0.004839, -0.069446,-0.175402,0.982045,0.049885,0.04073,-0.004839, -0.093947,-0.289139,0.952666,0.050802,0.040242,-0.004877, -0.069446,-0.175402,0.982045,0.049885,0.04073,-0.004839, -0.111917,-0.282669,0.952666,0.04983,0.040592,-0.004877, -0.075606,-0.294467,0.952666,0.051795,0.039953,-0.004877, -0.046915,-0.182722,0.982045,0.051832,0.040097,-0.004839, -0.058296,-0.179416,0.982045,0.050848,0.040383,-0.004839, -0.075606,-0.294467,0.952666,0.051795,0.039953,-0.004877, -0.058296,-0.179416,0.982045,0.050848,0.040383,-0.004839, -0.093947,-0.289139,0.952666,0.050802,0.040242,-0.004877, -0.056967,-0.298634,0.952666,0.052803,0.039728,-0.004877, -0.035349,-0.185308,0.982045,0.052831,0.039874,-0.004839, -0.046915,-0.182722,0.982045,0.051832,0.040097,-0.004839, -0.056967,-0.298634,0.952666,0.052803,0.039728,-0.004877, -0.046915,-0.182722,0.982045,0.051832,0.040097,-0.004839, -0.075606,-0.294467,0.952666,0.051795,0.039953,-0.004877, -0.038104,-0.301621,0.952666,0.053824,0.039566,-0.004877, -0.023644,-0.187162,0.982045,0.053842,0.039714,-0.004839, -0.035349,-0.185308,0.982045,0.052831,0.039874,-0.004839, -0.038104,-0.301621,0.952666,0.053824,0.039566,-0.004877, -0.035349,-0.185308,0.982045,0.052831,0.039874,-0.004839, -0.056967,-0.298634,0.952666,0.052803,0.039728,-0.004877, -0.019089,-0.303419,0.952666,0.054852,0.039469,-0.004877, -0.011845,-0.188277,0.982045,0.054862,0.039617,-0.004839, -0.023644,-0.187162,0.982045,0.053842,0.039714,-0.004839, -0.019089,-0.303419,0.952666,0.054852,0.039469,-0.004877, -0.023644,-0.187162,0.982045,0.053842,0.039714,-0.004839, -0.038104,-0.301621,0.952666,0.053824,0.039566,-0.004877, 0,-0.304019,0.952666,0.055885,0.039437,-0.004877, 0,-0.188649,0.982045,0.055885,0.039585,-0.004839, -0.011845,-0.188277,0.982045,0.054862,0.039617,-0.004839, 0,-0.304019,0.952666,0.055885,0.039437,-0.004877, -0.011845,-0.188277,0.982045,0.054862,0.039617,-0.004839, -0.019089,-0.303419,0.952666,0.054852,0.039469,-0.004877, 0.019089,-0.303419,0.952666,0.056918,0.039469,-0.004877, 0.011845,-0.188277,0.982045,0.056909,0.039617,-0.004839, 0,-0.188649,0.982045,0.055885,0.039585,-0.004839, 0.019089,-0.303419,0.952666,0.056918,0.039469,-0.004877, 0,-0.188649,0.982045,0.055885,0.039585,-0.004839, 0,-0.304019,0.952666,0.055885,0.039437,-0.004877, 0.038104,-0.301621,0.952666,0.057947,0.039566,-0.004877, 0.023644,-0.187162,0.982045,0.057928,0.039714,-0.004839, 0.011845,-0.188277,0.982045,0.056909,0.039617,-0.004839, 0.038104,-0.301621,0.952666,0.057947,0.039566,-0.004877, 0.011845,-0.188277,0.982045,0.056909,0.039617,-0.004839, 0.019089,-0.303419,0.952666,0.056918,0.039469,-0.004877, 0.056967,-0.298634,0.952666,0.058967,0.039728,-0.004877, 0.035349,-0.185308,0.982045,0.05894,0.039874,-0.004839, 0.023644,-0.187162,0.982045,0.057928,0.039714,-0.004839, 0.056967,-0.298634,0.952666,0.058967,0.039728,-0.004877, 0.023644,-0.187162,0.982045,0.057928,0.039714,-0.004839, 0.038104,-0.301621,0.952666,0.057947,0.039566,-0.004877, 0.075606,-0.294467,0.952666,0.059976,0.039953,-0.004877, 0.046915,-0.182722,0.982045,0.059939,0.040097,-0.004839, 0.035349,-0.185308,0.982045,0.05894,0.039874,-0.004839, 0.075606,-0.294467,0.952666,0.059976,0.039953,-0.004877, 0.035349,-0.185308,0.982045,0.05894,0.039874,-0.004839, 0.056967,-0.298634,0.952666,0.058967,0.039728,-0.004877, 0.093947,-0.289139,0.952666,0.060968,0.040242,-0.004877, 0.058296,-0.179416,0.982045,0.060922,0.040383,-0.004839, 0.046915,-0.182722,0.982045,0.059939,0.040097,-0.004839, 0.093947,-0.289139,0.952666,0.060968,0.040242,-0.004877, 0.046915,-0.182722,0.982045,0.059939,0.040097,-0.004839, 0.075606,-0.294467,0.952666,0.059976,0.039953,-0.004877, 0.111917,-0.282669,0.952666,0.061941,0.040592,-0.004877, 0.069446,-0.175402,0.982045,0.061886,0.04073,-0.004839, 0.058296,-0.179416,0.982045,0.060922,0.040383,-0.004839, 0.111917,-0.282669,0.952666,0.061941,0.040592,-0.004877, 0.058296,-0.179416,0.982045,0.060922,0.040383,-0.004839, 0.093947,-0.289139,0.952666,0.060968,0.040242,-0.004877, 0.129445,-0.275084,0.952666,0.062889,0.041002,-0.004877, 0.080323,-0.170695,0.982045,0.062825,0.041136,-0.004839, 0.069446,-0.175402,0.982045,0.061886,0.04073,-0.004839, 0.129445,-0.275084,0.952666,0.062889,0.041002,-0.004877, 0.069446,-0.175402,0.982045,0.061886,0.04073,-0.004839, 0.111917,-0.282669,0.952666,0.061941,0.040592,-0.004877, 0.146462,-0.266414,0.952666,0.063809,0.041471,-0.004877, 0.090882,-0.165314,0.982045,0.063738,0.041601,-0.004839, 0.080323,-0.170695,0.982045,0.062825,0.041136,-0.004839, 0.146462,-0.266414,0.952666,0.063809,0.041471,-0.004877, 0.080323,-0.170695,0.982045,0.062825,0.041136,-0.004839, 0.129445,-0.275084,0.952666,0.062889,0.041002,-0.004877, 0.162901,-0.256692,0.952666,0.064699,0.041997,-0.004877, 0.101083,-0.159282,0.982045,0.064619,0.042123,-0.004839, 0.090882,-0.165314,0.982045,0.063738,0.041601,-0.004839, 0.162901,-0.256692,0.952666,0.064699,0.041997,-0.004877, 0.090882,-0.165314,0.982045,0.063738,0.041601,-0.004839, 0.146462,-0.266414,0.952666,0.063809,0.041471,-0.004877, 0.178698,-0.245956,0.952666,0.065554,0.042578,-0.004877, 0.110885,-0.15262,0.982045,0.065466,0.042698,-0.004839, 0.101083,-0.159282,0.982045,0.064619,0.042123,-0.004839, 0.178698,-0.245956,0.952666,0.065554,0.042578,-0.004877, 0.101083,-0.159282,0.982045,0.064619,0.042123,-0.004839, 0.162901,-0.256692,0.952666,0.064699,0.041997,-0.004877, 0.193789,-0.23425,0.952666,0.06637,0.043211,-0.004877, 0.120249,-0.145357,0.982045,0.066275,0.043326,-0.004839, 0.110885,-0.15262,0.982045,0.065466,0.042698,-0.004839, 0.193789,-0.23425,0.952666,0.06637,0.043211,-0.004877, 0.110885,-0.15262,0.982045,0.065466,0.042698,-0.004839, 0.178698,-0.245956,0.952666,0.065554,0.042578,-0.004877, 0.208115,-0.22162,0.952666,0.067145,0.043895,-0.004877, 0.129139,-0.137519,0.982045,0.067043,0.044003,-0.004839, 0.120249,-0.145357,0.982045,0.066275,0.043326,-0.004839, 0.208115,-0.22162,0.952666,0.067145,0.043895,-0.004877, 0.120249,-0.145357,0.982045,0.066275,0.043326,-0.004839, 0.193789,-0.23425,0.952666,0.06637,0.043211,-0.004877, 0.22162,-0.208115,0.952666,0.067876,0.044625,-0.004877, 0.137519,-0.129139,0.982045,0.067768,0.044727,-0.004839, 0.129139,-0.137519,0.982045,0.067043,0.044003,-0.004839, 0.22162,-0.208115,0.952666,0.067876,0.044625,-0.004877, 0.129139,-0.137519,0.982045,0.067043,0.044003,-0.004839, 0.208115,-0.22162,0.952666,0.067145,0.043895,-0.004877, 0.23425,-0.193789,0.952666,0.068559,0.0454,-0.004877, 0.145357,-0.120249,0.982045,0.068445,0.045495,-0.004839, 0.137519,-0.129139,0.982045,0.067768,0.044727,-0.004839, 0.23425,-0.193789,0.952666,0.068559,0.0454,-0.004877, 0.137519,-0.129139,0.982045,0.067768,0.044727,-0.004839, 0.22162,-0.208115,0.952666,0.067876,0.044625,-0.004877, 0.245956,-0.178698,0.952666,0.069193,0.046217,-0.004877, 0.15262,-0.110885,0.982045,0.069072,0.046304,-0.004839, 0.145357,-0.120249,0.982045,0.068445,0.045495,-0.004839, 0.245956,-0.178698,0.952666,0.069193,0.046217,-0.004877, 0.145357,-0.120249,0.982045,0.068445,0.045495,-0.004839, 0.23425,-0.193789,0.952666,0.068559,0.0454,-0.004877, 0.256692,-0.162901,0.952666,0.069773,0.047072,-0.004877, 0.159282,-0.101083,0.982045,0.069648,0.047151,-0.004839, 0.15262,-0.110885,0.982045,0.069072,0.046304,-0.004839, 0.256692,-0.162901,0.952666,0.069773,0.047072,-0.004877, 0.15262,-0.110885,0.982045,0.069072,0.046304,-0.004839, 0.245956,-0.178698,0.952666,0.069193,0.046217,-0.004877, 0.266414,-0.146462,0.952666,0.070299,0.047961,-0.004877, 0.165314,-0.090882,0.982045,0.070169,0.048033,-0.004839, 0.159282,-0.101083,0.982045,0.069648,0.047151,-0.004839, 0.266414,-0.146462,0.952666,0.070299,0.047961,-0.004877, 0.159282,-0.101083,0.982045,0.069648,0.047151,-0.004839, 0.256692,-0.162901,0.952666,0.069773,0.047072,-0.004877, 0.275084,-0.129445,0.952666,0.070769,0.048882,-0.004877, 0.170695,-0.080323,0.982045,0.070634,0.048945,-0.004839, 0.165314,-0.090882,0.982045,0.070169,0.048033,-0.004839, 0.275084,-0.129445,0.952666,0.070769,0.048882,-0.004877, 0.165314,-0.090882,0.982045,0.070169,0.048033,-0.004839, 0.266414,-0.146462,0.952666,0.070299,0.047961,-0.004877, 0.282669,-0.111917,0.952666,0.071179,0.04983,-0.004877, 0.175402,-0.069446,0.982045,0.071041,0.049885,-0.004839, 0.170695,-0.080323,0.982045,0.070634,0.048945,-0.004839, 0.282669,-0.111917,0.952666,0.071179,0.04983,-0.004877, 0.170695,-0.080323,0.982045,0.070634,0.048945,-0.004839, 0.275084,-0.129445,0.952666,0.070769,0.048882,-0.004877, 0.289139,-0.093947,0.952666,0.071529,0.050802,-0.004877, 0.179416,-0.058296,0.982045,0.071388,0.050848,-0.004839, 0.175402,-0.069446,0.982045,0.071041,0.049885,-0.004839, 0.289139,-0.093947,0.952666,0.071529,0.050802,-0.004877, 0.175402,-0.069446,0.982045,0.071041,0.049885,-0.004839, 0.282669,-0.111917,0.952666,0.071179,0.04983,-0.004877, 0.294467,-0.075606,0.952666,0.071817,0.051795,-0.004877, 0.182722,-0.046915,0.982045,0.071673,0.051832,-0.004839, 0.179416,-0.058296,0.982045,0.071388,0.050848,-0.004839, 0.294467,-0.075606,0.952666,0.071817,0.051795,-0.004877, 0.179416,-0.058296,0.982045,0.071388,0.050848,-0.004839, 0.289139,-0.093947,0.952666,0.071529,0.050802,-0.004877, 0.298634,-0.056967,0.952666,0.072043,0.052803,-0.004877, 0.185308,-0.035349,0.982045,0.071897,0.052831,-0.004839, 0.182722,-0.046915,0.982045,0.071673,0.051832,-0.004839, 0.298634,-0.056967,0.952666,0.072043,0.052803,-0.004877, 0.182722,-0.046915,0.982045,0.071673,0.051832,-0.004839, 0.294467,-0.075606,0.952666,0.071817,0.051795,-0.004877, 0.301621,-0.038104,0.952666,0.072204,0.053824,-0.004877, 0.187162,-0.023644,0.982045,0.072057,0.053842,-0.004839, 0.185308,-0.035349,0.982045,0.071897,0.052831,-0.004839, 0.301621,-0.038104,0.952666,0.072204,0.053824,-0.004877, 0.185308,-0.035349,0.982045,0.071897,0.052831,-0.004839, 0.298634,-0.056967,0.952666,0.072043,0.052803,-0.004877, 0.303419,-0.019089,0.952666,0.072302,0.054852,-0.004877, 0.188277,-0.011845,0.982045,0.072153,0.054862,-0.004839, 0.187162,-0.023644,0.982045,0.072057,0.053842,-0.004839, 0.303419,-0.019089,0.952666,0.072302,0.054852,-0.004877, 0.187162,-0.023644,0.982045,0.072057,0.053842,-0.004839, 0.301621,-0.038104,0.952666,0.072204,0.053824,-0.004877, 0.304019,0,0.952666,0.072334,0.055885,-0.004877, 0.188649,0,0.982045,0.072186,0.055885,-0.004839, 0.188277,-0.011845,0.982045,0.072153,0.054862,-0.004839, 0.304019,0,0.952666,0.072334,0.055885,-0.004877, 0.188277,-0.011845,0.982045,0.072153,0.054862,-0.004839, 0.303419,-0.019089,0.952666,0.072302,0.054852,-0.004877, 0.303419,0.019089,0.952666,0.072302,0.056918,-0.004877, 0.188277,0.011845,0.982045,0.072153,0.056909,-0.004839, 0.188649,0,0.982045,0.072186,0.055885,-0.004839, 0.303419,0.019089,0.952666,0.072302,0.056918,-0.004877, 0.188649,0,0.982045,0.072186,0.055885,-0.004839, 0.304019,0,0.952666,0.072334,0.055885,-0.004877, 0.301621,0.038104,0.952666,0.072204,0.057947,-0.004877, 0.187162,0.023644,0.982045,0.072057,0.057928,-0.004839, 0.188277,0.011845,0.982045,0.072153,0.056909,-0.004839, 0.301621,0.038104,0.952666,0.072204,0.057947,-0.004877, 0.188277,0.011845,0.982045,0.072153,0.056909,-0.004839, 0.303419,0.019089,0.952666,0.072302,0.056918,-0.004877, 0.298634,0.056967,0.952666,0.072043,0.058967,-0.004877, 0.185308,0.035349,0.982045,0.071897,0.05894,-0.004839, 0.187162,0.023644,0.982045,0.072057,0.057928,-0.004839, 0.298634,0.056967,0.952666,0.072043,0.058967,-0.004877, 0.187162,0.023644,0.982045,0.072057,0.057928,-0.004839, 0.301621,0.038104,0.952666,0.072204,0.057947,-0.004877, 0.294467,0.075606,0.952666,0.071817,0.059976,-0.004877, 0.182722,0.046915,0.982045,0.071673,0.059939,-0.004839, 0.185308,0.035349,0.982045,0.071897,0.05894,-0.004839, 0.294467,0.075606,0.952666,0.071817,0.059976,-0.004877, 0.185308,0.035349,0.982045,0.071897,0.05894,-0.004839, 0.298634,0.056967,0.952666,0.072043,0.058967,-0.004877, 0.289139,0.093947,0.952666,0.071529,0.060968,-0.004877, 0.179416,0.058296,0.982045,0.071388,0.060922,-0.004839, 0.182722,0.046915,0.982045,0.071673,0.059939,-0.004839, 0.289139,0.093947,0.952666,0.071529,0.060968,-0.004877, 0.182722,0.046915,0.982045,0.071673,0.059939,-0.004839, 0.294467,0.075606,0.952666,0.071817,0.059976,-0.004877, 0.282669,0.111917,0.952666,0.071179,0.061941,-0.004877, 0.175402,0.069446,0.982045,0.071041,0.061886,-0.004839, 0.179416,0.058296,0.982045,0.071388,0.060922,-0.004839, 0.282669,0.111917,0.952666,0.071179,0.061941,-0.004877, 0.179416,0.058296,0.982045,0.071388,0.060922,-0.004839, 0.289139,0.093947,0.952666,0.071529,0.060968,-0.004877, 0.275084,0.129445,0.952666,0.070769,0.062889,-0.004877, 0.170695,0.080323,0.982045,0.070634,0.062825,-0.004839, 0.175402,0.069446,0.982045,0.071041,0.061886,-0.004839, 0.275084,0.129445,0.952666,0.070769,0.062889,-0.004877, 0.175402,0.069446,0.982045,0.071041,0.061886,-0.004839, 0.282669,0.111917,0.952666,0.071179,0.061941,-0.004877, 0.266414,0.146462,0.952666,0.070299,0.063809,-0.004877, 0.165314,0.090882,0.982045,0.070169,0.063738,-0.004839, 0.170695,0.080323,0.982045,0.070634,0.062825,-0.004839, 0.266414,0.146462,0.952666,0.070299,0.063809,-0.004877, 0.170695,0.080323,0.982045,0.070634,0.062825,-0.004839, 0.275084,0.129445,0.952666,0.070769,0.062889,-0.004877, 0.256692,0.162901,0.952666,0.069773,0.064699,-0.004877, 0.159282,0.101083,0.982045,0.069648,0.064619,-0.004839, 0.165314,0.090882,0.982045,0.070169,0.063738,-0.004839, 0.256692,0.162901,0.952666,0.069773,0.064699,-0.004877, 0.165314,0.090882,0.982045,0.070169,0.063738,-0.004839, 0.266414,0.146462,0.952666,0.070299,0.063809,-0.004877, 0.245956,0.178698,0.952666,0.069193,0.065554,-0.004877, 0.15262,0.110885,0.982045,0.069072,0.065466,-0.004839, 0.159282,0.101083,0.982045,0.069648,0.064619,-0.004839, 0.245956,0.178698,0.952666,0.069193,0.065554,-0.004877, 0.159282,0.101083,0.982045,0.069648,0.064619,-0.004839, 0.256692,0.162901,0.952666,0.069773,0.064699,-0.004877, 0.23425,0.193789,0.952666,0.068559,0.06637,-0.004877, 0.145357,0.120249,0.982045,0.068445,0.066275,-0.004839, 0.15262,0.110885,0.982045,0.069072,0.065466,-0.004839, 0.23425,0.193789,0.952666,0.068559,0.06637,-0.004877, 0.15262,0.110885,0.982045,0.069072,0.065466,-0.004839, 0.245956,0.178698,0.952666,0.069193,0.065554,-0.004877, 0.22162,0.208115,0.952666,0.067876,0.067145,-0.004877, 0.137519,0.129139,0.982045,0.067768,0.067043,-0.004839, 0.145357,0.120249,0.982045,0.068445,0.066275,-0.004839, 0.22162,0.208115,0.952666,0.067876,0.067145,-0.004877, 0.145357,0.120249,0.982045,0.068445,0.066275,-0.004839, 0.23425,0.193789,0.952666,0.068559,0.06637,-0.004877, 0.208115,0.22162,0.952666,0.067145,0.067876,-0.004877, 0.129139,0.137519,0.982045,0.067043,0.067768,-0.004839, 0.137519,0.129139,0.982045,0.067768,0.067043,-0.004839, 0.208115,0.22162,0.952666,0.067145,0.067876,-0.004877, 0.137519,0.129139,0.982045,0.067768,0.067043,-0.004839, 0.22162,0.208115,0.952666,0.067876,0.067145,-0.004877, 0.193789,0.23425,0.952666,0.06637,0.068559,-0.004877, 0.120249,0.145357,0.982045,0.066275,0.068445,-0.004839, 0.129139,0.137519,0.982045,0.067043,0.067768,-0.004839, 0.193789,0.23425,0.952666,0.06637,0.068559,-0.004877, 0.129139,0.137519,0.982045,0.067043,0.067768,-0.004839, 0.208115,0.22162,0.952666,0.067145,0.067876,-0.004877, 0.178698,0.245956,0.952666,0.065554,0.069193,-0.004877, 0.110885,0.15262,0.982045,0.065466,0.069072,-0.004839, 0.120249,0.145357,0.982045,0.066275,0.068445,-0.004839, 0.178698,0.245956,0.952666,0.065554,0.069193,-0.004877, 0.120249,0.145357,0.982045,0.066275,0.068445,-0.004839, 0.193789,0.23425,0.952666,0.06637,0.068559,-0.004877, 0.162901,0.256692,0.952666,0.064699,0.069773,-0.004877, 0.101083,0.159282,0.982045,0.064619,0.069648,-0.004839, 0.110885,0.15262,0.982045,0.065466,0.069072,-0.004839, 0.162901,0.256692,0.952666,0.064699,0.069773,-0.004877, 0.110885,0.15262,0.982045,0.065466,0.069072,-0.004839, 0.178698,0.245956,0.952666,0.065554,0.069193,-0.004877, 0.146462,0.266414,0.952666,0.063809,0.070299,-0.004877, 0.090882,0.165314,0.982045,0.063738,0.070169,-0.004839, 0.101083,0.159282,0.982045,0.064619,0.069648,-0.004839, 0.146462,0.266414,0.952666,0.063809,0.070299,-0.004877, 0.101083,0.159282,0.982045,0.064619,0.069648,-0.004839, 0.162901,0.256692,0.952666,0.064699,0.069773,-0.004877, 0.129445,0.275084,0.952666,0.062889,0.070769,-0.004877, 0.080323,0.170695,0.982045,0.062825,0.070634,-0.004839, 0.090882,0.165314,0.982045,0.063738,0.070169,-0.004839, 0.129445,0.275084,0.952666,0.062889,0.070769,-0.004877, 0.090882,0.165314,0.982045,0.063738,0.070169,-0.004839, 0.146462,0.266414,0.952666,0.063809,0.070299,-0.004877, 0.111917,0.282669,0.952666,0.061941,0.071179,-0.004877, 0.069446,0.175402,0.982045,0.061886,0.071041,-0.004839, 0.080323,0.170695,0.982045,0.062825,0.070634,-0.004839, 0.111917,0.282669,0.952666,0.061941,0.071179,-0.004877, 0.080323,0.170695,0.982045,0.062825,0.070634,-0.004839, 0.129445,0.275084,0.952666,0.062889,0.070769,-0.004877, 0.093947,0.289139,0.952666,0.060968,0.071529,-0.004877, 0.058296,0.179416,0.982045,0.060922,0.071388,-0.004839, 0.069446,0.175402,0.982045,0.061886,0.071041,-0.004839, 0.093947,0.289139,0.952666,0.060968,0.071529,-0.004877, 0.069446,0.175402,0.982045,0.061886,0.071041,-0.004839, 0.111917,0.282669,0.952666,0.061941,0.071179,-0.004877, 0.075606,0.294467,0.952666,0.059976,0.071817,-0.004877, 0.046915,0.182722,0.982045,0.059939,0.071673,-0.004839, 0.058296,0.179416,0.982045,0.060922,0.071388,-0.004839, 0.075606,0.294467,0.952666,0.059976,0.071817,-0.004877, 0.058296,0.179416,0.982045,0.060922,0.071388,-0.004839, 0.093947,0.289139,0.952666,0.060968,0.071529,-0.004877, 0.056967,0.298634,0.952666,0.058967,0.072043,-0.004877, 0.035349,0.185308,0.982045,0.05894,0.071897,-0.004839, 0.046915,0.182722,0.982045,0.059939,0.071673,-0.004839, 0.056967,0.298634,0.952666,0.058967,0.072043,-0.004877, 0.046915,0.182722,0.982045,0.059939,0.071673,-0.004839, 0.075606,0.294467,0.952666,0.059976,0.071817,-0.004877, 0.038104,0.301621,0.952666,0.057947,0.072204,-0.004877, 0.023644,0.187162,0.982045,0.057928,0.072057,-0.004839, 0.035349,0.185308,0.982045,0.05894,0.071897,-0.004839, 0.038104,0.301621,0.952666,0.057947,0.072204,-0.004877, 0.035349,0.185308,0.982045,0.05894,0.071897,-0.004839, 0.056967,0.298634,0.952666,0.058967,0.072043,-0.004877, 0.019089,0.303419,0.952666,0.056918,0.072302,-0.004877, 0.011845,0.188277,0.982045,0.056909,0.072153,-0.004839, 0.023644,0.187162,0.982045,0.057928,0.072057,-0.004839, 0.019089,0.303419,0.952666,0.056918,0.072302,-0.004877, 0.023644,0.187162,0.982045,0.057928,0.072057,-0.004839, 0.038104,0.301621,0.952666,0.057947,0.072204,-0.004877, 0,0.304019,0.952666,0.055885,0.072334,-0.004877, 0,0.188649,0.982045,0.055885,0.072186,-0.004839, 0.011845,0.188277,0.982045,0.056909,0.072153,-0.004839, 0,0.304019,0.952666,0.055885,0.072334,-0.004877, 0.011845,0.188277,0.982045,0.056909,0.072153,-0.004839, 0.019089,0.303419,0.952666,0.056918,0.072302,-0.004877, -0.019089,0.303419,0.952666,0.054852,0.072302,-0.004877, -0.011845,0.188277,0.982045,0.054862,0.072153,-0.004839, 0,0.188649,0.982045,0.055885,0.072186,-0.004839, -0.019089,0.303419,0.952666,0.054852,0.072302,-0.004877, 0,0.188649,0.982045,0.055885,0.072186,-0.004839, 0,0.304019,0.952666,0.055885,0.072334,-0.004877, -0.038104,0.301621,0.952666,0.053824,0.072204,-0.004877, -0.023644,0.187162,0.982045,0.053842,0.072057,-0.004839, -0.011845,0.188277,0.982045,0.054862,0.072153,-0.004839, -0.038104,0.301621,0.952666,0.053824,0.072204,-0.004877, -0.011845,0.188277,0.982045,0.054862,0.072153,-0.004839, -0.019089,0.303419,0.952666,0.054852,0.072302,-0.004877, -0.056967,0.298634,0.952666,0.052803,0.072043,-0.004877, -0.035349,0.185308,0.982045,0.052831,0.071897,-0.004839, -0.023644,0.187162,0.982045,0.053842,0.072057,-0.004839, -0.056967,0.298634,0.952666,0.052803,0.072043,-0.004877, -0.023644,0.187162,0.982045,0.053842,0.072057,-0.004839, -0.038104,0.301621,0.952666,0.053824,0.072204,-0.004877, -0.075606,0.294467,0.952666,0.051795,0.071817,-0.004877, -0.046915,0.182722,0.982045,0.051832,0.071673,-0.004839, -0.035349,0.185308,0.982045,0.052831,0.071897,-0.004839, -0.075606,0.294467,0.952666,0.051795,0.071817,-0.004877, -0.035349,0.185308,0.982045,0.052831,0.071897,-0.004839, -0.056967,0.298634,0.952666,0.052803,0.072043,-0.004877, -0.093947,0.289139,0.952666,0.050802,0.071529,-0.004877, -0.058296,0.179416,0.982045,0.050848,0.071388,-0.004839, -0.046915,0.182722,0.982045,0.051832,0.071673,-0.004839, -0.093947,0.289139,0.952666,0.050802,0.071529,-0.004877, -0.046915,0.182722,0.982045,0.051832,0.071673,-0.004839, -0.075606,0.294467,0.952666,0.051795,0.071817,-0.004877, -0.111917,0.282669,0.952666,0.04983,0.071179,-0.004877, -0.069446,0.175402,0.982045,0.049885,0.071041,-0.004839, -0.058296,0.179416,0.982045,0.050848,0.071388,-0.004839, -0.111917,0.282669,0.952666,0.04983,0.071179,-0.004877, -0.058296,0.179416,0.982045,0.050848,0.071388,-0.004839, -0.093947,0.289139,0.952666,0.050802,0.071529,-0.004877, -0.129445,0.275084,0.952666,0.048882,0.070769,-0.004877, -0.080323,0.170695,0.982045,0.048945,0.070634,-0.004839, -0.069446,0.175402,0.982045,0.049885,0.071041,-0.004839, -0.129445,0.275084,0.952666,0.048882,0.070769,-0.004877, -0.069446,0.175402,0.982045,0.049885,0.071041,-0.004839, -0.111917,0.282669,0.952666,0.04983,0.071179,-0.004877, -0.146462,0.266414,0.952666,0.047961,0.070299,-0.004877, -0.090882,0.165314,0.982045,0.048033,0.070169,-0.004839, -0.080323,0.170695,0.982045,0.048945,0.070634,-0.004839, -0.146462,0.266414,0.952666,0.047961,0.070299,-0.004877, -0.080323,0.170695,0.982045,0.048945,0.070634,-0.004839, -0.129445,0.275084,0.952666,0.048882,0.070769,-0.004877, -0.162901,0.256692,0.952666,0.047072,0.069773,-0.004877, -0.101083,0.159282,0.982045,0.047151,0.069648,-0.004839, -0.090882,0.165314,0.982045,0.048033,0.070169,-0.004839, -0.162901,0.256692,0.952666,0.047072,0.069773,-0.004877, -0.090882,0.165314,0.982045,0.048033,0.070169,-0.004839, -0.146462,0.266414,0.952666,0.047961,0.070299,-0.004877, -0.178698,0.245956,0.952666,0.046217,0.069193,-0.004877, -0.110885,0.15262,0.982045,0.046304,0.069072,-0.004839, -0.101083,0.159282,0.982045,0.047151,0.069648,-0.004839, -0.178698,0.245956,0.952666,0.046217,0.069193,-0.004877, -0.101083,0.159282,0.982045,0.047151,0.069648,-0.004839, -0.162901,0.256692,0.952666,0.047072,0.069773,-0.004877, -0.193789,0.23425,0.952666,0.0454,0.068559,-0.004877, -0.120249,0.145357,0.982045,0.045495,0.068445,-0.004839, -0.110885,0.15262,0.982045,0.046304,0.069072,-0.004839, -0.193789,0.23425,0.952666,0.0454,0.068559,-0.004877, -0.110885,0.15262,0.982045,0.046304,0.069072,-0.004839, -0.178698,0.245956,0.952666,0.046217,0.069193,-0.004877, -0.208115,0.22162,0.952666,0.044625,0.067876,-0.004877, -0.129139,0.137519,0.982045,0.044727,0.067768,-0.004839, -0.120249,0.145357,0.982045,0.045495,0.068445,-0.004839, -0.208115,0.22162,0.952666,0.044625,0.067876,-0.004877, -0.120249,0.145357,0.982045,0.045495,0.068445,-0.004839, -0.193789,0.23425,0.952666,0.0454,0.068559,-0.004877, -0.22162,0.208115,0.952666,0.043895,0.067145,-0.004877, -0.137519,0.129139,0.982045,0.044003,0.067043,-0.004839, -0.129139,0.137519,0.982045,0.044727,0.067768,-0.004839, -0.22162,0.208115,0.952666,0.043895,0.067145,-0.004877, -0.129139,0.137519,0.982045,0.044727,0.067768,-0.004839, -0.208115,0.22162,0.952666,0.044625,0.067876,-0.004877, -0.23425,0.193789,0.952666,0.043211,0.06637,-0.004877, -0.145357,0.120249,0.982045,0.043326,0.066275,-0.004839, -0.137519,0.129139,0.982045,0.044003,0.067043,-0.004839, -0.23425,0.193789,0.952666,0.043211,0.06637,-0.004877, -0.137519,0.129139,0.982045,0.044003,0.067043,-0.004839, -0.22162,0.208115,0.952666,0.043895,0.067145,-0.004877, -0.245956,0.178698,0.952666,0.042578,0.065554,-0.004877, -0.15262,0.110885,0.982045,0.042698,0.065466,-0.004839, -0.145357,0.120249,0.982045,0.043326,0.066275,-0.004839, -0.245956,0.178698,0.952666,0.042578,0.065554,-0.004877, -0.145357,0.120249,0.982045,0.043326,0.066275,-0.004839, -0.23425,0.193789,0.952666,0.043211,0.06637,-0.004877, -0.256692,0.162901,0.952666,0.041997,0.064699,-0.004877, -0.159282,0.101083,0.982045,0.042123,0.064619,-0.004839, -0.15262,0.110885,0.982045,0.042698,0.065466,-0.004839, -0.256692,0.162901,0.952666,0.041997,0.064699,-0.004877, -0.15262,0.110885,0.982045,0.042698,0.065466,-0.004839, -0.245956,0.178698,0.952666,0.042578,0.065554,-0.004877, -0.266414,0.146462,0.952666,0.041471,0.063809,-0.004877, -0.165314,0.090882,0.982045,0.041601,0.063738,-0.004839, -0.159282,0.101083,0.982045,0.042123,0.064619,-0.004839, -0.266414,0.146462,0.952666,0.041471,0.063809,-0.004877, -0.159282,0.101083,0.982045,0.042123,0.064619,-0.004839, -0.256692,0.162901,0.952666,0.041997,0.064699,-0.004877, -0.275084,0.129445,0.952666,0.041002,0.062889,-0.004877, -0.170695,0.080323,0.982045,0.041136,0.062825,-0.004839, -0.165314,0.090882,0.982045,0.041601,0.063738,-0.004839, -0.275084,0.129445,0.952666,0.041002,0.062889,-0.004877, -0.165314,0.090882,0.982045,0.041601,0.063738,-0.004839, -0.266414,0.146462,0.952666,0.041471,0.063809,-0.004877, -0.282669,0.111917,0.952666,0.040592,0.061941,-0.004877, -0.175402,0.069446,0.982045,0.04073,0.061886,-0.004839, -0.170695,0.080323,0.982045,0.041136,0.062825,-0.004839, -0.282669,0.111917,0.952666,0.040592,0.061941,-0.004877, -0.170695,0.080323,0.982045,0.041136,0.062825,-0.004839, -0.275084,0.129445,0.952666,0.041002,0.062889,-0.004877, -0.289139,0.093947,0.952666,0.040242,0.060968,-0.004877, -0.179416,0.058296,0.982045,0.040383,0.060922,-0.004839, -0.175402,0.069446,0.982045,0.04073,0.061886,-0.004839, -0.289139,0.093947,0.952666,0.040242,0.060968,-0.004877, -0.175402,0.069446,0.982045,0.04073,0.061886,-0.004839, -0.282669,0.111917,0.952666,0.040592,0.061941,-0.004877, -0.179416,0.058296,0.982045,0.040383,0.060922,-0.004839, -0.06715,0.021818,0.997504,0.040528,0.060875,-0.004819, -0.065648,0.025992,0.997504,0.040871,0.06183,-0.004819, -0.179416,0.058296,0.982045,0.040383,0.060922,-0.004839, -0.065648,0.025992,0.997504,0.040871,0.06183,-0.004819, -0.175402,0.069446,0.982045,0.04073,0.061886,-0.004839, -0.182722,0.046915,0.982045,0.040097,0.059939,-0.004839, -0.068388,0.017559,0.997504,0.040245,0.059901,-0.004819, -0.06715,0.021818,0.997504,0.040528,0.060875,-0.004819, -0.182722,0.046915,0.982045,0.040097,0.059939,-0.004839, -0.06715,0.021818,0.997504,0.040528,0.060875,-0.004819, -0.179416,0.058296,0.982045,0.040383,0.060922,-0.004839, -0.185308,0.035349,0.982045,0.039874,0.05894,-0.004839, -0.069355,0.01323,0.997504,0.040023,0.058911,-0.004819, -0.068388,0.017559,0.997504,0.040245,0.059901,-0.004819, -0.185308,0.035349,0.982045,0.039874,0.05894,-0.004839, -0.068388,0.017559,0.997504,0.040245,0.059901,-0.004819, -0.182722,0.046915,0.982045,0.040097,0.059939,-0.004839, -0.187162,0.023644,0.982045,0.039714,0.057928,-0.004839, -0.070049,0.008849,0.997504,0.039865,0.057909,-0.004819, -0.069355,0.01323,0.997504,0.040023,0.058911,-0.004819, -0.187162,0.023644,0.982045,0.039714,0.057928,-0.004839, -0.069355,0.01323,0.997504,0.040023,0.058911,-0.004819, -0.185308,0.035349,0.982045,0.039874,0.05894,-0.004839, -0.188277,0.011845,0.982045,0.039617,0.056909,-0.004839, -0.070467,0.004433,0.997504,0.039769,0.056899,-0.004819, -0.070049,0.008849,0.997504,0.039865,0.057909,-0.004819, -0.188277,0.011845,0.982045,0.039617,0.056909,-0.004839, -0.070049,0.008849,0.997504,0.039865,0.057909,-0.004819, -0.187162,0.023644,0.982045,0.039714,0.057928,-0.004839, -0.188649,0,0.982045,0.039585,0.055885,-0.004839, -0.070606,0,0.997504,0.039737,0.055885,-0.004819, -0.070467,0.004433,0.997504,0.039769,0.056899,-0.004819, -0.188649,0,0.982045,0.039585,0.055885,-0.004839, -0.070467,0.004433,0.997504,0.039769,0.056899,-0.004819, -0.188277,0.011845,0.982045,0.039617,0.056909,-0.004839, -0.188277,-0.011845,0.982045,0.039617,0.054862,-0.004839, -0.070467,-0.004433,0.997504,0.039769,0.054871,-0.004819, -0.070606,0,0.997504,0.039737,0.055885,-0.004819, -0.188277,-0.011845,0.982045,0.039617,0.054862,-0.004839, -0.070606,0,0.997504,0.039737,0.055885,-0.004819, -0.188649,0,0.982045,0.039585,0.055885,-0.004839, -0.187162,-0.023644,0.982045,0.039714,0.053842,-0.004839, -0.070049,-0.008849,0.997504,0.039865,0.053861,-0.004819, -0.070467,-0.004433,0.997504,0.039769,0.054871,-0.004819, -0.187162,-0.023644,0.982045,0.039714,0.053842,-0.004839, -0.070467,-0.004433,0.997504,0.039769,0.054871,-0.004819, -0.188277,-0.011845,0.982045,0.039617,0.054862,-0.004839, -0.185308,-0.035349,0.982045,0.039874,0.052831,-0.004839, -0.069355,-0.01323,0.997504,0.040023,0.052859,-0.004819, -0.070049,-0.008849,0.997504,0.039865,0.053861,-0.004819, -0.185308,-0.035349,0.982045,0.039874,0.052831,-0.004839, -0.070049,-0.008849,0.997504,0.039865,0.053861,-0.004819, -0.187162,-0.023644,0.982045,0.039714,0.053842,-0.004839, -0.182722,-0.046915,0.982045,0.040097,0.051832,-0.004839, -0.068388,-0.017559,0.997504,0.040245,0.051869,-0.004819, -0.069355,-0.01323,0.997504,0.040023,0.052859,-0.004819, -0.182722,-0.046915,0.982045,0.040097,0.051832,-0.004839, -0.069355,-0.01323,0.997504,0.040023,0.052859,-0.004819, -0.185308,-0.035349,0.982045,0.039874,0.052831,-0.004839, -0.179416,-0.058296,0.982045,0.040383,0.050848,-0.004839, -0.06715,-0.021818,0.997504,0.040528,0.050895,-0.004819, -0.068388,-0.017559,0.997504,0.040245,0.051869,-0.004819, -0.179416,-0.058296,0.982045,0.040383,0.050848,-0.004839, -0.068388,-0.017559,0.997504,0.040245,0.051869,-0.004819, -0.182722,-0.046915,0.982045,0.040097,0.051832,-0.004839, -0.175402,-0.069446,0.982045,0.04073,0.049885,-0.004839, -0.065648,-0.025992,0.997504,0.040871,0.049941,-0.004819, -0.06715,-0.021818,0.997504,0.040528,0.050895,-0.004819, -0.175402,-0.069446,0.982045,0.04073,0.049885,-0.004839, -0.06715,-0.021818,0.997504,0.040528,0.050895,-0.004819, -0.179416,-0.058296,0.982045,0.040383,0.050848,-0.004839, -0.170695,-0.080323,0.982045,0.041136,0.048945,-0.004839, -0.063886,-0.030062,0.997504,0.041274,0.04901,-0.004819, -0.065648,-0.025992,0.997504,0.040871,0.049941,-0.004819, -0.170695,-0.080323,0.982045,0.041136,0.048945,-0.004839, -0.065648,-0.025992,0.997504,0.040871,0.049941,-0.004819, -0.175402,-0.069446,0.982045,0.04073,0.049885,-0.004839, -0.165314,-0.090882,0.982045,0.041601,0.048033,-0.004839, -0.061872,-0.034015,0.997504,0.041735,0.048106,-0.004819, -0.063886,-0.030062,0.997504,0.041274,0.04901,-0.004819, -0.165314,-0.090882,0.982045,0.041601,0.048033,-0.004839, -0.063886,-0.030062,0.997504,0.041274,0.04901,-0.004819, -0.170695,-0.080323,0.982045,0.041136,0.048945,-0.004839, -0.159282,-0.101083,0.982045,0.042123,0.047151,-0.004839, -0.059614,-0.037832,0.997504,0.042251,0.047233,-0.004819, -0.061872,-0.034015,0.997504,0.041735,0.048106,-0.004819, -0.159282,-0.101083,0.982045,0.042123,0.047151,-0.004839, -0.061872,-0.034015,0.997504,0.041735,0.048106,-0.004819, -0.165314,-0.090882,0.982045,0.041601,0.048033,-0.004839, -0.15262,-0.110885,0.982045,0.042698,0.046304,-0.004839, -0.057121,-0.041501,0.997504,0.042821,0.046394,-0.004819, -0.059614,-0.037832,0.997504,0.042251,0.047233,-0.004819, -0.15262,-0.110885,0.982045,0.042698,0.046304,-0.004839, -0.059614,-0.037832,0.997504,0.042251,0.047233,-0.004819, -0.159282,-0.101083,0.982045,0.042123,0.047151,-0.004839, -0.145357,-0.120249,0.982045,0.043326,0.045495,-0.004839, -0.054403,-0.045006,0.997504,0.043443,0.045592,-0.004819, -0.057121,-0.041501,0.997504,0.042821,0.046394,-0.004819, -0.145357,-0.120249,0.982045,0.043326,0.045495,-0.004839, -0.057121,-0.041501,0.997504,0.042821,0.046394,-0.004819, -0.15262,-0.110885,0.982045,0.042698,0.046304,-0.004839, -0.137519,-0.129139,0.982045,0.044003,0.044727,-0.004839, -0.051469,-0.048333,0.997504,0.044114,0.044831,-0.004819, -0.054403,-0.045006,0.997504,0.043443,0.045592,-0.004819, -0.137519,-0.129139,0.982045,0.044003,0.044727,-0.004839, -0.054403,-0.045006,0.997504,0.043443,0.045592,-0.004819, -0.145357,-0.120249,0.982045,0.043326,0.045495,-0.004839, -0.129139,-0.137519,0.982045,0.044727,0.044003,-0.004839, -0.048333,-0.051469,0.997504,0.044831,0.044114,-0.004819, -0.051469,-0.048333,0.997504,0.044114,0.044831,-0.004819, -0.129139,-0.137519,0.982045,0.044727,0.044003,-0.004839, -0.051469,-0.048333,0.997504,0.044114,0.044831,-0.004819, -0.137519,-0.129139,0.982045,0.044003,0.044727,-0.004839, -0.120249,-0.145357,0.982045,0.045495,0.043326,-0.004839, -0.045006,-0.054403,0.997504,0.045592,0.043443,-0.004819, -0.048333,-0.051469,0.997504,0.044831,0.044114,-0.004819, -0.120249,-0.145357,0.982045,0.045495,0.043326,-0.004839, -0.048333,-0.051469,0.997504,0.044831,0.044114,-0.004819, -0.129139,-0.137519,0.982045,0.044727,0.044003,-0.004839, -0.110885,-0.15262,0.982045,0.046304,0.042698,-0.004839, -0.041501,-0.057121,0.997504,0.046394,0.042821,-0.004819, -0.045006,-0.054403,0.997504,0.045592,0.043443,-0.004819, -0.110885,-0.15262,0.982045,0.046304,0.042698,-0.004839, -0.045006,-0.054403,0.997504,0.045592,0.043443,-0.004819, -0.120249,-0.145357,0.982045,0.045495,0.043326,-0.004839, -0.101083,-0.159282,0.982045,0.047151,0.042123,-0.004839, -0.037832,-0.059614,0.997504,0.047233,0.042251,-0.004819, -0.041501,-0.057121,0.997504,0.046394,0.042821,-0.004819, -0.101083,-0.159282,0.982045,0.047151,0.042123,-0.004839, -0.041501,-0.057121,0.997504,0.046394,0.042821,-0.004819, -0.110885,-0.15262,0.982045,0.046304,0.042698,-0.004839, -0.090882,-0.165314,0.982045,0.048033,0.041601,-0.004839, -0.034015,-0.061872,0.997504,0.048106,0.041735,-0.004819, -0.037832,-0.059614,0.997504,0.047233,0.042251,-0.004819, -0.090882,-0.165314,0.982045,0.048033,0.041601,-0.004839, -0.037832,-0.059614,0.997504,0.047233,0.042251,-0.004819, -0.101083,-0.159282,0.982045,0.047151,0.042123,-0.004839, -0.080323,-0.170695,0.982045,0.048945,0.041136,-0.004839, -0.030062,-0.063886,0.997504,0.04901,0.041274,-0.004819, -0.034015,-0.061872,0.997504,0.048106,0.041735,-0.004819, -0.080323,-0.170695,0.982045,0.048945,0.041136,-0.004839, -0.034015,-0.061872,0.997504,0.048106,0.041735,-0.004819, -0.090882,-0.165314,0.982045,0.048033,0.041601,-0.004839, -0.069446,-0.175402,0.982045,0.049885,0.04073,-0.004839, -0.025992,-0.065648,0.997504,0.049941,0.040871,-0.004819, -0.030062,-0.063886,0.997504,0.04901,0.041274,-0.004819, -0.069446,-0.175402,0.982045,0.049885,0.04073,-0.004839, -0.030062,-0.063886,0.997504,0.04901,0.041274,-0.004819, -0.080323,-0.170695,0.982045,0.048945,0.041136,-0.004839, -0.058296,-0.179416,0.982045,0.050848,0.040383,-0.004839, -0.021818,-0.06715,0.997504,0.050895,0.040528,-0.004819, -0.025992,-0.065648,0.997504,0.049941,0.040871,-0.004819, -0.058296,-0.179416,0.982045,0.050848,0.040383,-0.004839, -0.025992,-0.065648,0.997504,0.049941,0.040871,-0.004819, -0.069446,-0.175402,0.982045,0.049885,0.04073,-0.004839, -0.046915,-0.182722,0.982045,0.051832,0.040097,-0.004839, -0.017559,-0.068388,0.997504,0.051869,0.040245,-0.004819, -0.021818,-0.06715,0.997504,0.050895,0.040528,-0.004819, -0.046915,-0.182722,0.982045,0.051832,0.040097,-0.004839, -0.021818,-0.06715,0.997504,0.050895,0.040528,-0.004819, -0.058296,-0.179416,0.982045,0.050848,0.040383,-0.004839, -0.035349,-0.185308,0.982045,0.052831,0.039874,-0.004839, -0.01323,-0.069355,0.997504,0.052859,0.040023,-0.004819, -0.017559,-0.068388,0.997504,0.051869,0.040245,-0.004819, -0.035349,-0.185308,0.982045,0.052831,0.039874,-0.004839, -0.017559,-0.068388,0.997504,0.051869,0.040245,-0.004819, -0.046915,-0.182722,0.982045,0.051832,0.040097,-0.004839, -0.023644,-0.187162,0.982045,0.053842,0.039714,-0.004839, -0.008849,-0.070049,0.997504,0.053861,0.039865,-0.004819, -0.01323,-0.069355,0.997504,0.052859,0.040023,-0.004819, -0.023644,-0.187162,0.982045,0.053842,0.039714,-0.004839, -0.01323,-0.069355,0.997504,0.052859,0.040023,-0.004819, -0.035349,-0.185308,0.982045,0.052831,0.039874,-0.004839, -0.011845,-0.188277,0.982045,0.054862,0.039617,-0.004839, -0.004433,-0.070467,0.997504,0.054871,0.039769,-0.004819, -0.008849,-0.070049,0.997504,0.053861,0.039865,-0.004819, -0.011845,-0.188277,0.982045,0.054862,0.039617,-0.004839, -0.008849,-0.070049,0.997504,0.053861,0.039865,-0.004819, -0.023644,-0.187162,0.982045,0.053842,0.039714,-0.004839, 0,-0.188649,0.982045,0.055885,0.039585,-0.004839, 0,-0.070606,0.997504,0.055885,0.039737,-0.004819, -0.004433,-0.070467,0.997504,0.054871,0.039769,-0.004819, 0,-0.188649,0.982045,0.055885,0.039585,-0.004839, -0.004433,-0.070467,0.997504,0.054871,0.039769,-0.004819, -0.011845,-0.188277,0.982045,0.054862,0.039617,-0.004839, 0.011845,-0.188277,0.982045,0.056909,0.039617,-0.004839, 0.004433,-0.070467,0.997504,0.056899,0.039769,-0.004819, 0,-0.070606,0.997504,0.055885,0.039737,-0.004819, 0.011845,-0.188277,0.982045,0.056909,0.039617,-0.004839, 0,-0.070606,0.997504,0.055885,0.039737,-0.004819, 0,-0.188649,0.982045,0.055885,0.039585,-0.004839, 0.023644,-0.187162,0.982045,0.057928,0.039714,-0.004839, 0.008849,-0.070049,0.997504,0.057909,0.039865,-0.004819, 0.004433,-0.070467,0.997504,0.056899,0.039769,-0.004819, 0.023644,-0.187162,0.982045,0.057928,0.039714,-0.004839, 0.004433,-0.070467,0.997504,0.056899,0.039769,-0.004819, 0.011845,-0.188277,0.982045,0.056909,0.039617,-0.004839, 0.035349,-0.185308,0.982045,0.05894,0.039874,-0.004839, 0.01323,-0.069355,0.997504,0.058911,0.040023,-0.004819, 0.008849,-0.070049,0.997504,0.057909,0.039865,-0.004819, 0.035349,-0.185308,0.982045,0.05894,0.039874,-0.004839, 0.008849,-0.070049,0.997504,0.057909,0.039865,-0.004819, 0.023644,-0.187162,0.982045,0.057928,0.039714,-0.004839, 0.046915,-0.182722,0.982045,0.059939,0.040097,-0.004839, 0.017559,-0.068388,0.997504,0.059901,0.040245,-0.004819, 0.01323,-0.069355,0.997504,0.058911,0.040023,-0.004819, 0.046915,-0.182722,0.982045,0.059939,0.040097,-0.004839, 0.01323,-0.069355,0.997504,0.058911,0.040023,-0.004819, 0.035349,-0.185308,0.982045,0.05894,0.039874,-0.004839, 0.058296,-0.179416,0.982045,0.060922,0.040383,-0.004839, 0.021818,-0.06715,0.997504,0.060875,0.040528,-0.004819, 0.017559,-0.068388,0.997504,0.059901,0.040245,-0.004819, 0.058296,-0.179416,0.982045,0.060922,0.040383,-0.004839, 0.017559,-0.068388,0.997504,0.059901,0.040245,-0.004819, 0.046915,-0.182722,0.982045,0.059939,0.040097,-0.004839, 0.069446,-0.175402,0.982045,0.061886,0.04073,-0.004839, 0.025992,-0.065648,0.997504,0.06183,0.040871,-0.004819, 0.021818,-0.06715,0.997504,0.060875,0.040528,-0.004819, 0.069446,-0.175402,0.982045,0.061886,0.04073,-0.004839, 0.021818,-0.06715,0.997504,0.060875,0.040528,-0.004819, 0.058296,-0.179416,0.982045,0.060922,0.040383,-0.004839, 0.080323,-0.170695,0.982045,0.062825,0.041136,-0.004839, 0.030062,-0.063886,0.997504,0.062761,0.041274,-0.004819, 0.025992,-0.065648,0.997504,0.06183,0.040871,-0.004819, 0.080323,-0.170695,0.982045,0.062825,0.041136,-0.004839, 0.025992,-0.065648,0.997504,0.06183,0.040871,-0.004819, 0.069446,-0.175402,0.982045,0.061886,0.04073,-0.004839, 0.090882,-0.165314,0.982045,0.063738,0.041601,-0.004839, 0.034015,-0.061872,0.997504,0.063665,0.041735,-0.004819, 0.030062,-0.063886,0.997504,0.062761,0.041274,-0.004819, 0.090882,-0.165314,0.982045,0.063738,0.041601,-0.004839, 0.030062,-0.063886,0.997504,0.062761,0.041274,-0.004819, 0.080323,-0.170695,0.982045,0.062825,0.041136,-0.004839, 0.101083,-0.159282,0.982045,0.064619,0.042123,-0.004839, 0.037832,-0.059614,0.997504,0.064538,0.042251,-0.004819, 0.034015,-0.061872,0.997504,0.063665,0.041735,-0.004819, 0.101083,-0.159282,0.982045,0.064619,0.042123,-0.004839, 0.034015,-0.061872,0.997504,0.063665,0.041735,-0.004819, 0.090882,-0.165314,0.982045,0.063738,0.041601,-0.004839, 0.110885,-0.15262,0.982045,0.065466,0.042698,-0.004839, 0.041501,-0.057121,0.997504,0.065377,0.042821,-0.004819, 0.037832,-0.059614,0.997504,0.064538,0.042251,-0.004819, 0.110885,-0.15262,0.982045,0.065466,0.042698,-0.004839, 0.037832,-0.059614,0.997504,0.064538,0.042251,-0.004819, 0.101083,-0.159282,0.982045,0.064619,0.042123,-0.004839, 0.120249,-0.145357,0.982045,0.066275,0.043326,-0.004839, 0.045006,-0.054403,0.997504,0.066178,0.043443,-0.004819, 0.041501,-0.057121,0.997504,0.065377,0.042821,-0.004819, 0.120249,-0.145357,0.982045,0.066275,0.043326,-0.004839, 0.041501,-0.057121,0.997504,0.065377,0.042821,-0.004819, 0.110885,-0.15262,0.982045,0.065466,0.042698,-0.004839, 0.129139,-0.137519,0.982045,0.067043,0.044003,-0.004839, 0.048333,-0.051469,0.997504,0.066939,0.044114,-0.004819, 0.045006,-0.054403,0.997504,0.066178,0.043443,-0.004819, 0.129139,-0.137519,0.982045,0.067043,0.044003,-0.004839, 0.045006,-0.054403,0.997504,0.066178,0.043443,-0.004819, 0.120249,-0.145357,0.982045,0.066275,0.043326,-0.004839, 0.137519,-0.129139,0.982045,0.067768,0.044727,-0.004839, 0.051469,-0.048333,0.997504,0.067657,0.044831,-0.004819, 0.048333,-0.051469,0.997504,0.066939,0.044114,-0.004819, 0.137519,-0.129139,0.982045,0.067768,0.044727,-0.004839, 0.048333,-0.051469,0.997504,0.066939,0.044114,-0.004819, 0.129139,-0.137519,0.982045,0.067043,0.044003,-0.004839, 0.145357,-0.120249,0.982045,0.068445,0.045495,-0.004839, 0.054403,-0.045006,0.997504,0.068328,0.045592,-0.004819, 0.051469,-0.048333,0.997504,0.067657,0.044831,-0.004819, 0.145357,-0.120249,0.982045,0.068445,0.045495,-0.004839, 0.051469,-0.048333,0.997504,0.067657,0.044831,-0.004819, 0.137519,-0.129139,0.982045,0.067768,0.044727,-0.004839, 0.15262,-0.110885,0.982045,0.069072,0.046304,-0.004839, 0.057121,-0.041501,0.997504,0.068949,0.046394,-0.004819, 0.054403,-0.045006,0.997504,0.068328,0.045592,-0.004819, 0.15262,-0.110885,0.982045,0.069072,0.046304,-0.004839, 0.054403,-0.045006,0.997504,0.068328,0.045592,-0.004819, 0.145357,-0.120249,0.982045,0.068445,0.045495,-0.004839, 0.159282,-0.101083,0.982045,0.069648,0.047151,-0.004839, 0.059614,-0.037832,0.997504,0.06952,0.047233,-0.004819, 0.057121,-0.041501,0.997504,0.068949,0.046394,-0.004819, 0.159282,-0.101083,0.982045,0.069648,0.047151,-0.004839, 0.057121,-0.041501,0.997504,0.068949,0.046394,-0.004819, 0.15262,-0.110885,0.982045,0.069072,0.046304,-0.004839, 0.165314,-0.090882,0.982045,0.070169,0.048033,-0.004839, 0.061872,-0.034015,0.997504,0.070036,0.048106,-0.004819, 0.059614,-0.037832,0.997504,0.06952,0.047233,-0.004819, 0.165314,-0.090882,0.982045,0.070169,0.048033,-0.004839, 0.059614,-0.037832,0.997504,0.06952,0.047233,-0.004819, 0.159282,-0.101083,0.982045,0.069648,0.047151,-0.004839, 0.170695,-0.080323,0.982045,0.070634,0.048945,-0.004839, 0.063886,-0.030062,0.997504,0.070497,0.04901,-0.004819, 0.061872,-0.034015,0.997504,0.070036,0.048106,-0.004819, 0.170695,-0.080323,0.982045,0.070634,0.048945,-0.004839, 0.061872,-0.034015,0.997504,0.070036,0.048106,-0.004819, 0.165314,-0.090882,0.982045,0.070169,0.048033,-0.004839, 0.175402,-0.069446,0.982045,0.071041,0.049885,-0.004839, 0.065648,-0.025992,0.997504,0.070899,0.049941,-0.004819, 0.063886,-0.030062,0.997504,0.070497,0.04901,-0.004819, 0.175402,-0.069446,0.982045,0.071041,0.049885,-0.004839, 0.063886,-0.030062,0.997504,0.070497,0.04901,-0.004819, 0.170695,-0.080323,0.982045,0.070634,0.048945,-0.004839, 0.179416,-0.058296,0.982045,0.071388,0.050848,-0.004839, 0.06715,-0.021818,0.997504,0.071243,0.050895,-0.004819, 0.065648,-0.025992,0.997504,0.070899,0.049941,-0.004819, 0.179416,-0.058296,0.982045,0.071388,0.050848,-0.004839, 0.065648,-0.025992,0.997504,0.070899,0.049941,-0.004819, 0.175402,-0.069446,0.982045,0.071041,0.049885,-0.004839, 0.182722,-0.046915,0.982045,0.071673,0.051832,-0.004839, 0.068388,-0.017559,0.997504,0.071526,0.051869,-0.004819, 0.06715,-0.021818,0.997504,0.071243,0.050895,-0.004819, 0.182722,-0.046915,0.982045,0.071673,0.051832,-0.004839, 0.06715,-0.021818,0.997504,0.071243,0.050895,-0.004819, 0.179416,-0.058296,0.982045,0.071388,0.050848,-0.004839, 0.185308,-0.035349,0.982045,0.071897,0.052831,-0.004839, 0.069355,-0.01323,0.997504,0.071747,0.052859,-0.004819, 0.068388,-0.017559,0.997504,0.071526,0.051869,-0.004819, 0.185308,-0.035349,0.982045,0.071897,0.052831,-0.004839, 0.068388,-0.017559,0.997504,0.071526,0.051869,-0.004819, 0.182722,-0.046915,0.982045,0.071673,0.051832,-0.004839, 0.187162,-0.023644,0.982045,0.072057,0.053842,-0.004839, 0.070049,-0.008849,0.997504,0.071906,0.053861,-0.004819, 0.069355,-0.01323,0.997504,0.071747,0.052859,-0.004819, 0.187162,-0.023644,0.982045,0.072057,0.053842,-0.004839, 0.069355,-0.01323,0.997504,0.071747,0.052859,-0.004819, 0.185308,-0.035349,0.982045,0.071897,0.052831,-0.004839, 0.188277,-0.011845,0.982045,0.072153,0.054862,-0.004839, 0.070467,-0.004433,0.997504,0.072001,0.054871,-0.004819, 0.070049,-0.008849,0.997504,0.071906,0.053861,-0.004819, 0.188277,-0.011845,0.982045,0.072153,0.054862,-0.004839, 0.070049,-0.008849,0.997504,0.071906,0.053861,-0.004819, 0.187162,-0.023644,0.982045,0.072057,0.053842,-0.004839, 0.188649,0,0.982045,0.072186,0.055885,-0.004839, 0.070606,0,0.997504,0.072033,0.055885,-0.004819, 0.070467,-0.004433,0.997504,0.072001,0.054871,-0.004819, 0.188649,0,0.982045,0.072186,0.055885,-0.004839, 0.070467,-0.004433,0.997504,0.072001,0.054871,-0.004819, 0.188277,-0.011845,0.982045,0.072153,0.054862,-0.004839, 0.188277,0.011845,0.982045,0.072153,0.056909,-0.004839, 0.070467,0.004433,0.997504,0.072001,0.056899,-0.004819, 0.070606,0,0.997504,0.072033,0.055885,-0.004819, 0.188277,0.011845,0.982045,0.072153,0.056909,-0.004839, 0.070606,0,0.997504,0.072033,0.055885,-0.004819, 0.188649,0,0.982045,0.072186,0.055885,-0.004839, 0.187162,0.023644,0.982045,0.072057,0.057928,-0.004839, 0.070049,0.008849,0.997504,0.071906,0.057909,-0.004819, 0.070467,0.004433,0.997504,0.072001,0.056899,-0.004819, 0.187162,0.023644,0.982045,0.072057,0.057928,-0.004839, 0.070467,0.004433,0.997504,0.072001,0.056899,-0.004819, 0.188277,0.011845,0.982045,0.072153,0.056909,-0.004839, 0.185308,0.035349,0.982045,0.071897,0.05894,-0.004839, 0.069355,0.01323,0.997504,0.071747,0.058911,-0.004819, 0.070049,0.008849,0.997504,0.071906,0.057909,-0.004819, 0.185308,0.035349,0.982045,0.071897,0.05894,-0.004839, 0.070049,0.008849,0.997504,0.071906,0.057909,-0.004819, 0.187162,0.023644,0.982045,0.072057,0.057928,-0.004839, 0.182722,0.046915,0.982045,0.071673,0.059939,-0.004839, 0.068388,0.017559,0.997504,0.071526,0.059901,-0.004819, 0.069355,0.01323,0.997504,0.071747,0.058911,-0.004819, 0.182722,0.046915,0.982045,0.071673,0.059939,-0.004839, 0.069355,0.01323,0.997504,0.071747,0.058911,-0.004819, 0.185308,0.035349,0.982045,0.071897,0.05894,-0.004839, 0.179416,0.058296,0.982045,0.071388,0.060922,-0.004839, 0.06715,0.021818,0.997504,0.071243,0.060875,-0.004819, 0.068388,0.017559,0.997504,0.071526,0.059901,-0.004819, 0.179416,0.058296,0.982045,0.071388,0.060922,-0.004839, 0.068388,0.017559,0.997504,0.071526,0.059901,-0.004819, 0.182722,0.046915,0.982045,0.071673,0.059939,-0.004839, 0.175402,0.069446,0.982045,0.071041,0.061886,-0.004839, 0.065648,0.025992,0.997504,0.070899,0.06183,-0.004819, 0.06715,0.021818,0.997504,0.071243,0.060875,-0.004819, 0.175402,0.069446,0.982045,0.071041,0.061886,-0.004839, 0.06715,0.021818,0.997504,0.071243,0.060875,-0.004819, 0.179416,0.058296,0.982045,0.071388,0.060922,-0.004839, 0.170695,0.080323,0.982045,0.070634,0.062825,-0.004839, 0.063886,0.030062,0.997504,0.070497,0.062761,-0.004819, 0.065648,0.025992,0.997504,0.070899,0.06183,-0.004819, 0.170695,0.080323,0.982045,0.070634,0.062825,-0.004839, 0.065648,0.025992,0.997504,0.070899,0.06183,-0.004819, 0.175402,0.069446,0.982045,0.071041,0.061886,-0.004839, 0.165314,0.090882,0.982045,0.070169,0.063738,-0.004839, 0.061872,0.034015,0.997504,0.070036,0.063665,-0.004819, 0.063886,0.030062,0.997504,0.070497,0.062761,-0.004819, 0.165314,0.090882,0.982045,0.070169,0.063738,-0.004839, 0.063886,0.030062,0.997504,0.070497,0.062761,-0.004819, 0.170695,0.080323,0.982045,0.070634,0.062825,-0.004839, 0.159282,0.101083,0.982045,0.069648,0.064619,-0.004839, 0.059614,0.037832,0.997504,0.06952,0.064538,-0.004819, 0.061872,0.034015,0.997504,0.070036,0.063665,-0.004819, 0.159282,0.101083,0.982045,0.069648,0.064619,-0.004839, 0.061872,0.034015,0.997504,0.070036,0.063665,-0.004819, 0.165314,0.090882,0.982045,0.070169,0.063738,-0.004839, 0.15262,0.110885,0.982045,0.069072,0.065466,-0.004839, 0.057121,0.041501,0.997504,0.068949,0.065377,-0.004819, 0.059614,0.037832,0.997504,0.06952,0.064538,-0.004819, 0.15262,0.110885,0.982045,0.069072,0.065466,-0.004839, 0.059614,0.037832,0.997504,0.06952,0.064538,-0.004819, 0.159282,0.101083,0.982045,0.069648,0.064619,-0.004839, 0.145357,0.120249,0.982045,0.068445,0.066275,-0.004839, 0.054403,0.045006,0.997504,0.068328,0.066178,-0.004819, 0.057121,0.041501,0.997504,0.068949,0.065377,-0.004819, 0.145357,0.120249,0.982045,0.068445,0.066275,-0.004839, 0.057121,0.041501,0.997504,0.068949,0.065377,-0.004819, 0.15262,0.110885,0.982045,0.069072,0.065466,-0.004839, 0.137519,0.129139,0.982045,0.067768,0.067043,-0.004839, 0.051469,0.048333,0.997504,0.067657,0.066939,-0.004819, 0.054403,0.045006,0.997504,0.068328,0.066178,-0.004819, 0.137519,0.129139,0.982045,0.067768,0.067043,-0.004839, 0.054403,0.045006,0.997504,0.068328,0.066178,-0.004819, 0.145357,0.120249,0.982045,0.068445,0.066275,-0.004839, 0.129139,0.137519,0.982045,0.067043,0.067768,-0.004839, 0.048333,0.051469,0.997504,0.066939,0.067657,-0.004819, 0.051469,0.048333,0.997504,0.067657,0.066939,-0.004819, 0.129139,0.137519,0.982045,0.067043,0.067768,-0.004839, 0.051469,0.048333,0.997504,0.067657,0.066939,-0.004819, 0.137519,0.129139,0.982045,0.067768,0.067043,-0.004839, 0.120249,0.145357,0.982045,0.066275,0.068445,-0.004839, 0.045006,0.054403,0.997504,0.066178,0.068328,-0.004819, 0.048333,0.051469,0.997504,0.066939,0.067657,-0.004819, 0.120249,0.145357,0.982045,0.066275,0.068445,-0.004839, 0.048333,0.051469,0.997504,0.066939,0.067657,-0.004819, 0.129139,0.137519,0.982045,0.067043,0.067768,-0.004839, 0.110885,0.15262,0.982045,0.065466,0.069072,-0.004839, 0.041501,0.057121,0.997504,0.065377,0.068949,-0.004819, 0.045006,0.054403,0.997504,0.066178,0.068328,-0.004819, 0.110885,0.15262,0.982045,0.065466,0.069072,-0.004839, 0.045006,0.054403,0.997504,0.066178,0.068328,-0.004819, 0.120249,0.145357,0.982045,0.066275,0.068445,-0.004839, 0.101083,0.159282,0.982045,0.064619,0.069648,-0.004839, 0.037832,0.059614,0.997504,0.064538,0.06952,-0.004819, 0.041501,0.057121,0.997504,0.065377,0.068949,-0.004819, 0.101083,0.159282,0.982045,0.064619,0.069648,-0.004839, 0.041501,0.057121,0.997504,0.065377,0.068949,-0.004819, 0.110885,0.15262,0.982045,0.065466,0.069072,-0.004839, 0.090882,0.165314,0.982045,0.063738,0.070169,-0.004839, 0.034015,0.061872,0.997504,0.063665,0.070036,-0.004819, 0.037832,0.059614,0.997504,0.064538,0.06952,-0.004819, 0.090882,0.165314,0.982045,0.063738,0.070169,-0.004839, 0.037832,0.059614,0.997504,0.064538,0.06952,-0.004819, 0.101083,0.159282,0.982045,0.064619,0.069648,-0.004839, 0.080323,0.170695,0.982045,0.062825,0.070634,-0.004839, 0.030062,0.063886,0.997504,0.062761,0.070497,-0.004819, 0.034015,0.061872,0.997504,0.063665,0.070036,-0.004819, 0.080323,0.170695,0.982045,0.062825,0.070634,-0.004839, 0.034015,0.061872,0.997504,0.063665,0.070036,-0.004819, 0.090882,0.165314,0.982045,0.063738,0.070169,-0.004839, 0.069446,0.175402,0.982045,0.061886,0.071041,-0.004839, 0.025992,0.065648,0.997504,0.06183,0.070899,-0.004819, 0.030062,0.063886,0.997504,0.062761,0.070497,-0.004819, 0.069446,0.175402,0.982045,0.061886,0.071041,-0.004839, 0.030062,0.063886,0.997504,0.062761,0.070497,-0.004819, 0.080323,0.170695,0.982045,0.062825,0.070634,-0.004839, 0.058296,0.179416,0.982045,0.060922,0.071388,-0.004839, 0.021818,0.06715,0.997504,0.060875,0.071243,-0.004819, 0.025992,0.065648,0.997504,0.06183,0.070899,-0.004819, 0.058296,0.179416,0.982045,0.060922,0.071388,-0.004839, 0.025992,0.065648,0.997504,0.06183,0.070899,-0.004819, 0.069446,0.175402,0.982045,0.061886,0.071041,-0.004839, 0.046915,0.182722,0.982045,0.059939,0.071673,-0.004839, 0.017559,0.068388,0.997504,0.059901,0.071526,-0.004819, 0.021818,0.06715,0.997504,0.060875,0.071243,-0.004819, 0.046915,0.182722,0.982045,0.059939,0.071673,-0.004839, 0.021818,0.06715,0.997504,0.060875,0.071243,-0.004819, 0.058296,0.179416,0.982045,0.060922,0.071388,-0.004839, 0.035349,0.185308,0.982045,0.05894,0.071897,-0.004839, 0.01323,0.069355,0.997504,0.058911,0.071747,-0.004819, 0.017559,0.068388,0.997504,0.059901,0.071526,-0.004819, 0.035349,0.185308,0.982045,0.05894,0.071897,-0.004839, 0.017559,0.068388,0.997504,0.059901,0.071526,-0.004819, 0.046915,0.182722,0.982045,0.059939,0.071673,-0.004839, 0.023644,0.187162,0.982045,0.057928,0.072057,-0.004839, 0.008849,0.070049,0.997504,0.057909,0.071906,-0.004819, 0.01323,0.069355,0.997504,0.058911,0.071747,-0.004819, 0.023644,0.187162,0.982045,0.057928,0.072057,-0.004839, 0.01323,0.069355,0.997504,0.058911,0.071747,-0.004819, 0.035349,0.185308,0.982045,0.05894,0.071897,-0.004839, 0.011845,0.188277,0.982045,0.056909,0.072153,-0.004839, 0.004433,0.070467,0.997504,0.056899,0.072001,-0.004819, 0.008849,0.070049,0.997504,0.057909,0.071906,-0.004819, 0.011845,0.188277,0.982045,0.056909,0.072153,-0.004839, 0.008849,0.070049,0.997504,0.057909,0.071906,-0.004819, 0.023644,0.187162,0.982045,0.057928,0.072057,-0.004839, 0,0.188649,0.982045,0.055885,0.072186,-0.004839, 0,0.070606,0.997504,0.055885,0.072033,-0.004819, 0.004433,0.070467,0.997504,0.056899,0.072001,-0.004819, 0,0.188649,0.982045,0.055885,0.072186,-0.004839, 0.004433,0.070467,0.997504,0.056899,0.072001,-0.004819, 0.011845,0.188277,0.982045,0.056909,0.072153,-0.004839, -0.011845,0.188277,0.982045,0.054862,0.072153,-0.004839, -0.004433,0.070467,0.997504,0.054871,0.072001,-0.004819, 0,0.070606,0.997504,0.055885,0.072033,-0.004819, -0.011845,0.188277,0.982045,0.054862,0.072153,-0.004839, 0,0.070606,0.997504,0.055885,0.072033,-0.004819, 0,0.188649,0.982045,0.055885,0.072186,-0.004839, -0.023644,0.187162,0.982045,0.053842,0.072057,-0.004839, -0.008849,0.070049,0.997504,0.053861,0.071906,-0.004819, -0.004433,0.070467,0.997504,0.054871,0.072001,-0.004819, -0.023644,0.187162,0.982045,0.053842,0.072057,-0.004839, -0.004433,0.070467,0.997504,0.054871,0.072001,-0.004819, -0.011845,0.188277,0.982045,0.054862,0.072153,-0.004839, -0.035349,0.185308,0.982045,0.052831,0.071897,-0.004839, -0.01323,0.069355,0.997504,0.052859,0.071747,-0.004819, -0.008849,0.070049,0.997504,0.053861,0.071906,-0.004819, -0.035349,0.185308,0.982045,0.052831,0.071897,-0.004839, -0.008849,0.070049,0.997504,0.053861,0.071906,-0.004819, -0.023644,0.187162,0.982045,0.053842,0.072057,-0.004839, -0.046915,0.182722,0.982045,0.051832,0.071673,-0.004839, -0.017559,0.068388,0.997504,0.051869,0.071526,-0.004819, -0.01323,0.069355,0.997504,0.052859,0.071747,-0.004819, -0.046915,0.182722,0.982045,0.051832,0.071673,-0.004839, -0.01323,0.069355,0.997504,0.052859,0.071747,-0.004819, -0.035349,0.185308,0.982045,0.052831,0.071897,-0.004839, -0.058296,0.179416,0.982045,0.050848,0.071388,-0.004839, -0.021818,0.06715,0.997504,0.050895,0.071243,-0.004819, -0.017559,0.068388,0.997504,0.051869,0.071526,-0.004819, -0.058296,0.179416,0.982045,0.050848,0.071388,-0.004839, -0.017559,0.068388,0.997504,0.051869,0.071526,-0.004819, -0.046915,0.182722,0.982045,0.051832,0.071673,-0.004839, -0.069446,0.175402,0.982045,0.049885,0.071041,-0.004839, -0.025992,0.065648,0.997504,0.049941,0.070899,-0.004819, -0.021818,0.06715,0.997504,0.050895,0.071243,-0.004819, -0.069446,0.175402,0.982045,0.049885,0.071041,-0.004839, -0.021818,0.06715,0.997504,0.050895,0.071243,-0.004819, -0.058296,0.179416,0.982045,0.050848,0.071388,-0.004839, -0.080323,0.170695,0.982045,0.048945,0.070634,-0.004839, -0.030062,0.063886,0.997504,0.04901,0.070497,-0.004819, -0.025992,0.065648,0.997504,0.049941,0.070899,-0.004819, -0.080323,0.170695,0.982045,0.048945,0.070634,-0.004839, -0.025992,0.065648,0.997504,0.049941,0.070899,-0.004819, -0.069446,0.175402,0.982045,0.049885,0.071041,-0.004839, -0.090882,0.165314,0.982045,0.048033,0.070169,-0.004839, -0.034015,0.061872,0.997504,0.048106,0.070036,-0.004819, -0.030062,0.063886,0.997504,0.04901,0.070497,-0.004819, -0.090882,0.165314,0.982045,0.048033,0.070169,-0.004839, -0.030062,0.063886,0.997504,0.04901,0.070497,-0.004819, -0.080323,0.170695,0.982045,0.048945,0.070634,-0.004839, -0.101083,0.159282,0.982045,0.047151,0.069648,-0.004839, -0.037832,0.059614,0.997504,0.047233,0.06952,-0.004819, -0.034015,0.061872,0.997504,0.048106,0.070036,-0.004819, -0.101083,0.159282,0.982045,0.047151,0.069648,-0.004839, -0.034015,0.061872,0.997504,0.048106,0.070036,-0.004819, -0.090882,0.165314,0.982045,0.048033,0.070169,-0.004839, -0.110885,0.15262,0.982045,0.046304,0.069072,-0.004839, -0.041501,0.057121,0.997504,0.046394,0.068949,-0.004819, -0.037832,0.059614,0.997504,0.047233,0.06952,-0.004819, -0.110885,0.15262,0.982045,0.046304,0.069072,-0.004839, -0.037832,0.059614,0.997504,0.047233,0.06952,-0.004819, -0.101083,0.159282,0.982045,0.047151,0.069648,-0.004839, -0.120249,0.145357,0.982045,0.045495,0.068445,-0.004839, -0.045006,0.054403,0.997504,0.045592,0.068328,-0.004819, -0.041501,0.057121,0.997504,0.046394,0.068949,-0.004819, -0.120249,0.145357,0.982045,0.045495,0.068445,-0.004839, -0.041501,0.057121,0.997504,0.046394,0.068949,-0.004819, -0.110885,0.15262,0.982045,0.046304,0.069072,-0.004839, -0.129139,0.137519,0.982045,0.044727,0.067768,-0.004839, -0.048333,0.051469,0.997504,0.044831,0.067657,-0.004819, -0.045006,0.054403,0.997504,0.045592,0.068328,-0.004819, -0.129139,0.137519,0.982045,0.044727,0.067768,-0.004839, -0.045006,0.054403,0.997504,0.045592,0.068328,-0.004819, -0.120249,0.145357,0.982045,0.045495,0.068445,-0.004839, -0.137519,0.129139,0.982045,0.044003,0.067043,-0.004839, -0.051469,0.048333,0.997504,0.044114,0.066939,-0.004819, -0.048333,0.051469,0.997504,0.044831,0.067657,-0.004819, -0.137519,0.129139,0.982045,0.044003,0.067043,-0.004839, -0.048333,0.051469,0.997504,0.044831,0.067657,-0.004819, -0.129139,0.137519,0.982045,0.044727,0.067768,-0.004839, -0.145357,0.120249,0.982045,0.043326,0.066275,-0.004839, -0.054403,0.045006,0.997504,0.043443,0.066178,-0.004819, -0.051469,0.048333,0.997504,0.044114,0.066939,-0.004819, -0.145357,0.120249,0.982045,0.043326,0.066275,-0.004839, -0.051469,0.048333,0.997504,0.044114,0.066939,-0.004819, -0.137519,0.129139,0.982045,0.044003,0.067043,-0.004839, -0.15262,0.110885,0.982045,0.042698,0.065466,-0.004839, -0.057121,0.041501,0.997504,0.042821,0.065377,-0.004819, -0.054403,0.045006,0.997504,0.043443,0.066178,-0.004819, -0.15262,0.110885,0.982045,0.042698,0.065466,-0.004839, -0.054403,0.045006,0.997504,0.043443,0.066178,-0.004819, -0.145357,0.120249,0.982045,0.043326,0.066275,-0.004839, -0.159282,0.101083,0.982045,0.042123,0.064619,-0.004839, -0.059614,0.037832,0.997504,0.042251,0.064538,-0.004819, -0.057121,0.041501,0.997504,0.042821,0.065377,-0.004819, -0.159282,0.101083,0.982045,0.042123,0.064619,-0.004839, -0.057121,0.041501,0.997504,0.042821,0.065377,-0.004819, -0.15262,0.110885,0.982045,0.042698,0.065466,-0.004839, -0.165314,0.090882,0.982045,0.041601,0.063738,-0.004839, -0.061872,0.034015,0.997504,0.041735,0.063665,-0.004819, -0.059614,0.037832,0.997504,0.042251,0.064538,-0.004819, -0.165314,0.090882,0.982045,0.041601,0.063738,-0.004839, -0.059614,0.037832,0.997504,0.042251,0.064538,-0.004819, -0.159282,0.101083,0.982045,0.042123,0.064619,-0.004839, -0.170695,0.080323,0.982045,0.041136,0.062825,-0.004839, -0.063886,0.030062,0.997504,0.041274,0.062761,-0.004819, -0.061872,0.034015,0.997504,0.041735,0.063665,-0.004819, -0.170695,0.080323,0.982045,0.041136,0.062825,-0.004839, -0.061872,0.034015,0.997504,0.041735,0.063665,-0.004819, -0.165314,0.090882,0.982045,0.041601,0.063738,-0.004839, -0.175402,0.069446,0.982045,0.04073,0.061886,-0.004839, -0.065648,0.025992,0.997504,0.040871,0.06183,-0.004819, -0.063886,0.030062,0.997504,0.041274,0.062761,-0.004819, -0.175402,0.069446,0.982045,0.04073,0.061886,-0.004839, -0.063886,0.030062,0.997504,0.041274,0.062761,-0.004819, -0.170695,0.080323,0.982045,0.041136,0.062825,-0.004839, -0.065648,0.025992,0.997504,0.040871,0.06183,-0.004819, -0.006883,0.002725,0.999973,0.041014,0.061773,-0.004818, -0.006698,0.003152,0.999973,0.041413,0.062696,-0.004818, -0.065648,0.025992,0.997504,0.040871,0.06183,-0.004819, -0.006698,0.003152,0.999973,0.041413,0.062696,-0.004818, -0.063886,0.030062,0.997504,0.041274,0.062761,-0.004819, -0.06715,0.021818,0.997504,0.040528,0.060875,-0.004819, -0.00704,0.002287,0.999973,0.040673,0.060828,-0.004818, -0.006883,0.002725,0.999973,0.041014,0.061773,-0.004818, -0.06715,0.021818,0.997504,0.040528,0.060875,-0.004819, -0.006883,0.002725,0.999973,0.041014,0.061773,-0.004818, -0.065648,0.025992,0.997504,0.040871,0.06183,-0.004819, -0.068388,0.017559,0.997504,0.040245,0.059901,-0.004819, -0.00717,0.001841,0.999973,0.040393,0.059863,-0.004818, -0.00704,0.002287,0.999973,0.040673,0.060828,-0.004818, -0.068388,0.017559,0.997504,0.040245,0.059901,-0.004819, -0.00704,0.002287,0.999973,0.040673,0.060828,-0.004818, -0.06715,0.021818,0.997504,0.040528,0.060875,-0.004819, -0.069355,0.01323,0.997504,0.040023,0.058911,-0.004819, -0.007271,0.001387,0.999973,0.040174,0.058882,-0.004818, -0.00717,0.001841,0.999973,0.040393,0.059863,-0.004818, -0.069355,0.01323,0.997504,0.040023,0.058911,-0.004819, -0.00717,0.001841,0.999973,0.040393,0.059863,-0.004818, -0.068388,0.017559,0.997504,0.040245,0.059901,-0.004819, -0.070049,0.008849,0.997504,0.039865,0.057909,-0.004819, -0.007344,0.000928,0.999973,0.040017,0.05789,-0.004818, -0.007271,0.001387,0.999973,0.040174,0.058882,-0.004818, -0.070049,0.008849,0.997504,0.039865,0.057909,-0.004819, -0.007271,0.001387,0.999973,0.040174,0.058882,-0.004818, -0.069355,0.01323,0.997504,0.040023,0.058911,-0.004819, -0.070467,0.004433,0.997504,0.039769,0.056899,-0.004819, -0.007388,0.000465,0.999973,0.039922,0.05689,-0.004818, -0.007344,0.000928,0.999973,0.040017,0.05789,-0.004818, -0.070467,0.004433,0.997504,0.039769,0.056899,-0.004819, -0.007344,0.000928,0.999973,0.040017,0.05789,-0.004818, -0.070049,0.008849,0.997504,0.039865,0.057909,-0.004819, -0.070606,0,0.997504,0.039737,0.055885,-0.004819, -0.007402,0,0.999973,0.039891,0.055885,-0.004818, -0.007388,0.000465,0.999973,0.039922,0.05689,-0.004818, -0.070606,0,0.997504,0.039737,0.055885,-0.004819, -0.007388,0.000465,0.999973,0.039922,0.05689,-0.004818, -0.070467,0.004433,0.997504,0.039769,0.056899,-0.004819, -0.070467,-0.004433,0.997504,0.039769,0.054871,-0.004819, -0.007388,-0.000465,0.999973,0.039922,0.054881,-0.004818, -0.007402,0,0.999973,0.039891,0.055885,-0.004818, -0.070467,-0.004433,0.997504,0.039769,0.054871,-0.004819, -0.007402,0,0.999973,0.039891,0.055885,-0.004818, -0.070606,0,0.997504,0.039737,0.055885,-0.004819, -0.070049,-0.008849,0.997504,0.039865,0.053861,-0.004819, -0.007344,-0.000928,0.999973,0.040017,0.053881,-0.004818, -0.007388,-0.000465,0.999973,0.039922,0.054881,-0.004818, -0.070049,-0.008849,0.997504,0.039865,0.053861,-0.004819, -0.007388,-0.000465,0.999973,0.039922,0.054881,-0.004818, -0.070467,-0.004433,0.997504,0.039769,0.054871,-0.004819, -0.069355,-0.01323,0.997504,0.040023,0.052859,-0.004819, -0.007271,-0.001387,0.999973,0.040174,0.052888,-0.004818, -0.007344,-0.000928,0.999973,0.040017,0.053881,-0.004818, -0.069355,-0.01323,0.997504,0.040023,0.052859,-0.004819, -0.007344,-0.000928,0.999973,0.040017,0.053881,-0.004818, -0.070049,-0.008849,0.997504,0.039865,0.053861,-0.004819, -0.068388,-0.017559,0.997504,0.040245,0.051869,-0.004819, -0.00717,-0.001841,0.999973,0.040393,0.051908,-0.004818, -0.007271,-0.001387,0.999973,0.040174,0.052888,-0.004818, -0.068388,-0.017559,0.997504,0.040245,0.051869,-0.004819, -0.007271,-0.001387,0.999973,0.040174,0.052888,-0.004818, -0.069355,-0.01323,0.997504,0.040023,0.052859,-0.004819, -0.06715,-0.021818,0.997504,0.040528,0.050895,-0.004819, -0.00704,-0.002287,0.999973,0.040673,0.050943,-0.004818, -0.00717,-0.001841,0.999973,0.040393,0.051908,-0.004818, -0.06715,-0.021818,0.997504,0.040528,0.050895,-0.004819, -0.00717,-0.001841,0.999973,0.040393,0.051908,-0.004818, -0.068388,-0.017559,0.997504,0.040245,0.051869,-0.004819, -0.065648,-0.025992,0.997504,0.040871,0.049941,-0.004819, -0.006883,-0.002725,0.999973,0.041014,0.049997,-0.004818, -0.00704,-0.002287,0.999973,0.040673,0.050943,-0.004818, -0.065648,-0.025992,0.997504,0.040871,0.049941,-0.004819, -0.00704,-0.002287,0.999973,0.040673,0.050943,-0.004818, -0.06715,-0.021818,0.997504,0.040528,0.050895,-0.004819, -0.063886,-0.030062,0.997504,0.041274,0.04901,-0.004819, -0.006698,-0.003152,0.999973,0.041413,0.049075,-0.004818, -0.006883,-0.002725,0.999973,0.041014,0.049997,-0.004818, -0.063886,-0.030062,0.997504,0.041274,0.04901,-0.004819, -0.006883,-0.002725,0.999973,0.041014,0.049997,-0.004818, -0.065648,-0.025992,0.997504,0.040871,0.049941,-0.004819, -0.061872,-0.034015,0.997504,0.041735,0.048106,-0.004819, -0.006487,-0.003566,0.999973,0.041869,0.04818,-0.004818, -0.006698,-0.003152,0.999973,0.041413,0.049075,-0.004818, -0.061872,-0.034015,0.997504,0.041735,0.048106,-0.004819, -0.006698,-0.003152,0.999973,0.041413,0.049075,-0.004818, -0.063886,-0.030062,0.997504,0.041274,0.04901,-0.004819, -0.059614,-0.037832,0.997504,0.042251,0.047233,-0.004819, -0.00625,-0.003966,0.999973,0.042381,0.047315,-0.004818, -0.006487,-0.003566,0.999973,0.041869,0.04818,-0.004818, -0.059614,-0.037832,0.997504,0.042251,0.047233,-0.004819, -0.006487,-0.003566,0.999973,0.041869,0.04818,-0.004818, -0.061872,-0.034015,0.997504,0.041735,0.048106,-0.004819, -0.057121,-0.041501,0.997504,0.042821,0.046394,-0.004819, -0.005989,-0.004351,0.999973,0.042945,0.046484,-0.004818, -0.00625,-0.003966,0.999973,0.042381,0.047315,-0.004818, -0.057121,-0.041501,0.997504,0.042821,0.046394,-0.004819, -0.00625,-0.003966,0.999973,0.042381,0.047315,-0.004818, -0.059614,-0.037832,0.997504,0.042251,0.047233,-0.004819, -0.054403,-0.045006,0.997504,0.043443,0.045592,-0.004819, -0.005704,-0.004718,0.999973,0.043561,0.04569,-0.004818, -0.005989,-0.004351,0.999973,0.042945,0.046484,-0.004818, -0.054403,-0.045006,0.997504,0.043443,0.045592,-0.004819, -0.005989,-0.004351,0.999973,0.042945,0.046484,-0.004818, -0.057121,-0.041501,0.997504,0.042821,0.046394,-0.004819, -0.051469,-0.048333,0.997504,0.044114,0.044831,-0.004819, -0.005396,-0.005067,0.999973,0.044226,0.044936,-0.004818, -0.005704,-0.004718,0.999973,0.043561,0.04569,-0.004818, -0.051469,-0.048333,0.997504,0.044114,0.044831,-0.004819, -0.005704,-0.004718,0.999973,0.043561,0.04569,-0.004818, -0.054403,-0.045006,0.997504,0.043443,0.045592,-0.004819, -0.048333,-0.051469,0.997504,0.044831,0.044114,-0.004819, -0.005067,-0.005396,0.999973,0.044936,0.044226,-0.004818, -0.005396,-0.005067,0.999973,0.044226,0.044936,-0.004818, -0.048333,-0.051469,0.997504,0.044831,0.044114,-0.004819, -0.005396,-0.005067,0.999973,0.044226,0.044936,-0.004818, -0.051469,-0.048333,0.997504,0.044114,0.044831,-0.004819, -0.045006,-0.054403,0.997504,0.045592,0.043443,-0.004819, -0.004718,-0.005704,0.999973,0.04569,0.043561,-0.004818, -0.005067,-0.005396,0.999973,0.044936,0.044226,-0.004818, -0.045006,-0.054403,0.997504,0.045592,0.043443,-0.004819, -0.005067,-0.005396,0.999973,0.044936,0.044226,-0.004818, -0.048333,-0.051469,0.997504,0.044831,0.044114,-0.004819, -0.041501,-0.057121,0.997504,0.046394,0.042821,-0.004819, -0.004351,-0.005989,0.999973,0.046484,0.042945,-0.004818, -0.004718,-0.005704,0.999973,0.04569,0.043561,-0.004818, -0.041501,-0.057121,0.997504,0.046394,0.042821,-0.004819, -0.004718,-0.005704,0.999973,0.04569,0.043561,-0.004818, -0.045006,-0.054403,0.997504,0.045592,0.043443,-0.004819, -0.037832,-0.059614,0.997504,0.047233,0.042251,-0.004819, -0.003966,-0.00625,0.999973,0.047315,0.042381,-0.004818, -0.004351,-0.005989,0.999973,0.046484,0.042945,-0.004818, -0.037832,-0.059614,0.997504,0.047233,0.042251,-0.004819, -0.004351,-0.005989,0.999973,0.046484,0.042945,-0.004818, -0.041501,-0.057121,0.997504,0.046394,0.042821,-0.004819, -0.034015,-0.061872,0.997504,0.048106,0.041735,-0.004819, -0.003566,-0.006487,0.999973,0.04818,0.041869,-0.004818, -0.003966,-0.00625,0.999973,0.047315,0.042381,-0.004818, -0.034015,-0.061872,0.997504,0.048106,0.041735,-0.004819, -0.003966,-0.00625,0.999973,0.047315,0.042381,-0.004818, -0.037832,-0.059614,0.997504,0.047233,0.042251,-0.004819, -0.030062,-0.063886,0.997504,0.04901,0.041274,-0.004819, -0.003152,-0.006698,0.999973,0.049075,0.041413,-0.004818, -0.003566,-0.006487,0.999973,0.04818,0.041869,-0.004818, -0.030062,-0.063886,0.997504,0.04901,0.041274,-0.004819, -0.003566,-0.006487,0.999973,0.04818,0.041869,-0.004818, -0.034015,-0.061872,0.997504,0.048106,0.041735,-0.004819, -0.025992,-0.065648,0.997504,0.049941,0.040871,-0.004819, -0.002725,-0.006883,0.999973,0.049997,0.041014,-0.004818, -0.003152,-0.006698,0.999973,0.049075,0.041413,-0.004818, -0.025992,-0.065648,0.997504,0.049941,0.040871,-0.004819, -0.003152,-0.006698,0.999973,0.049075,0.041413,-0.004818, -0.030062,-0.063886,0.997504,0.04901,0.041274,-0.004819, -0.021818,-0.06715,0.997504,0.050895,0.040528,-0.004819, -0.002287,-0.00704,0.999973,0.050943,0.040673,-0.004818, -0.002725,-0.006883,0.999973,0.049997,0.041014,-0.004818, -0.021818,-0.06715,0.997504,0.050895,0.040528,-0.004819, -0.002725,-0.006883,0.999973,0.049997,0.041014,-0.004818, -0.025992,-0.065648,0.997504,0.049941,0.040871,-0.004819, -0.017559,-0.068388,0.997504,0.051869,0.040245,-0.004819, -0.001841,-0.00717,0.999973,0.051908,0.040393,-0.004818, -0.002287,-0.00704,0.999973,0.050943,0.040673,-0.004818, -0.017559,-0.068388,0.997504,0.051869,0.040245,-0.004819, -0.002287,-0.00704,0.999973,0.050943,0.040673,-0.004818, -0.021818,-0.06715,0.997504,0.050895,0.040528,-0.004819, -0.01323,-0.069355,0.997504,0.052859,0.040023,-0.004819, -0.001387,-0.007271,0.999973,0.052888,0.040174,-0.004818, -0.001841,-0.00717,0.999973,0.051908,0.040393,-0.004818, -0.01323,-0.069355,0.997504,0.052859,0.040023,-0.004819, -0.001841,-0.00717,0.999973,0.051908,0.040393,-0.004818, -0.017559,-0.068388,0.997504,0.051869,0.040245,-0.004819, -0.008849,-0.070049,0.997504,0.053861,0.039865,-0.004819, -0.000928,-0.007344,0.999973,0.053881,0.040017,-0.004818, -0.001387,-0.007271,0.999973,0.052888,0.040174,-0.004818, -0.008849,-0.070049,0.997504,0.053861,0.039865,-0.004819, -0.001387,-0.007271,0.999973,0.052888,0.040174,-0.004818, -0.01323,-0.069355,0.997504,0.052859,0.040023,-0.004819, -0.004433,-0.070467,0.997504,0.054871,0.039769,-0.004819, -0.000465,-0.007388,0.999973,0.054881,0.039922,-0.004818, -0.000928,-0.007344,0.999973,0.053881,0.040017,-0.004818, -0.004433,-0.070467,0.997504,0.054871,0.039769,-0.004819, -0.000928,-0.007344,0.999973,0.053881,0.040017,-0.004818, -0.008849,-0.070049,0.997504,0.053861,0.039865,-0.004819, 0,-0.070606,0.997504,0.055885,0.039737,-0.004819, 0,-0.007402,0.999973,0.055885,0.039891,-0.004818, -0.000465,-0.007388,0.999973,0.054881,0.039922,-0.004818, 0,-0.070606,0.997504,0.055885,0.039737,-0.004819, -0.000465,-0.007388,0.999973,0.054881,0.039922,-0.004818, -0.004433,-0.070467,0.997504,0.054871,0.039769,-0.004819, 0.004433,-0.070467,0.997504,0.056899,0.039769,-0.004819, 0.000465,-0.007388,0.999973,0.05689,0.039922,-0.004818, 0,-0.007402,0.999973,0.055885,0.039891,-0.004818, 0.004433,-0.070467,0.997504,0.056899,0.039769,-0.004819, 0,-0.007402,0.999973,0.055885,0.039891,-0.004818, 0,-0.070606,0.997504,0.055885,0.039737,-0.004819, 0.008849,-0.070049,0.997504,0.057909,0.039865,-0.004819, 0.000928,-0.007344,0.999973,0.05789,0.040017,-0.004818, 0.000465,-0.007388,0.999973,0.05689,0.039922,-0.004818, 0.008849,-0.070049,0.997504,0.057909,0.039865,-0.004819, 0.000465,-0.007388,0.999973,0.05689,0.039922,-0.004818, 0.004433,-0.070467,0.997504,0.056899,0.039769,-0.004819, 0.01323,-0.069355,0.997504,0.058911,0.040023,-0.004819, 0.001387,-0.007271,0.999973,0.058882,0.040174,-0.004818, 0.000928,-0.007344,0.999973,0.05789,0.040017,-0.004818, 0.01323,-0.069355,0.997504,0.058911,0.040023,-0.004819, 0.000928,-0.007344,0.999973,0.05789,0.040017,-0.004818, 0.008849,-0.070049,0.997504,0.057909,0.039865,-0.004819, 0.017559,-0.068388,0.997504,0.059901,0.040245,-0.004819, 0.001841,-0.00717,0.999973,0.059863,0.040393,-0.004818, 0.001387,-0.007271,0.999973,0.058882,0.040174,-0.004818, 0.017559,-0.068388,0.997504,0.059901,0.040245,-0.004819, 0.001387,-0.007271,0.999973,0.058882,0.040174,-0.004818, 0.01323,-0.069355,0.997504,0.058911,0.040023,-0.004819, 0.021818,-0.06715,0.997504,0.060875,0.040528,-0.004819, 0.002287,-0.00704,0.999973,0.060828,0.040673,-0.004818, 0.001841,-0.00717,0.999973,0.059863,0.040393,-0.004818, 0.021818,-0.06715,0.997504,0.060875,0.040528,-0.004819, 0.001841,-0.00717,0.999973,0.059863,0.040393,-0.004818, 0.017559,-0.068388,0.997504,0.059901,0.040245,-0.004819, 0.025992,-0.065648,0.997504,0.06183,0.040871,-0.004819, 0.002725,-0.006883,0.999973,0.061773,0.041014,-0.004818, 0.002287,-0.00704,0.999973,0.060828,0.040673,-0.004818, 0.025992,-0.065648,0.997504,0.06183,0.040871,-0.004819, 0.002287,-0.00704,0.999973,0.060828,0.040673,-0.004818, 0.021818,-0.06715,0.997504,0.060875,0.040528,-0.004819, 0.030062,-0.063886,0.997504,0.062761,0.041274,-0.004819, 0.003152,-0.006698,0.999973,0.062696,0.041413,-0.004818, 0.002725,-0.006883,0.999973,0.061773,0.041014,-0.004818, 0.030062,-0.063886,0.997504,0.062761,0.041274,-0.004819, 0.002725,-0.006883,0.999973,0.061773,0.041014,-0.004818, 0.025992,-0.065648,0.997504,0.06183,0.040871,-0.004819, 0.034015,-0.061872,0.997504,0.063665,0.041735,-0.004819, 0.003566,-0.006487,0.999973,0.063591,0.041869,-0.004818, 0.003152,-0.006698,0.999973,0.062696,0.041413,-0.004818, 0.034015,-0.061872,0.997504,0.063665,0.041735,-0.004819, 0.003152,-0.006698,0.999973,0.062696,0.041413,-0.004818, 0.030062,-0.063886,0.997504,0.062761,0.041274,-0.004819, 0.037832,-0.059614,0.997504,0.064538,0.042251,-0.004819, 0.003966,-0.00625,0.999973,0.064456,0.042381,-0.004818, 0.003566,-0.006487,0.999973,0.063591,0.041869,-0.004818, 0.037832,-0.059614,0.997504,0.064538,0.042251,-0.004819, 0.003566,-0.006487,0.999973,0.063591,0.041869,-0.004818, 0.034015,-0.061872,0.997504,0.063665,0.041735,-0.004819, 0.041501,-0.057121,0.997504,0.065377,0.042821,-0.004819, 0.004351,-0.005989,0.999973,0.065287,0.042945,-0.004818, 0.003966,-0.00625,0.999973,0.064456,0.042381,-0.004818, 0.041501,-0.057121,0.997504,0.065377,0.042821,-0.004819, 0.003966,-0.00625,0.999973,0.064456,0.042381,-0.004818, 0.037832,-0.059614,0.997504,0.064538,0.042251,-0.004819, 0.045006,-0.054403,0.997504,0.066178,0.043443,-0.004819, 0.004718,-0.005704,0.999973,0.066081,0.043561,-0.004818, 0.004351,-0.005989,0.999973,0.065287,0.042945,-0.004818, 0.045006,-0.054403,0.997504,0.066178,0.043443,-0.004819, 0.004351,-0.005989,0.999973,0.065287,0.042945,-0.004818, 0.041501,-0.057121,0.997504,0.065377,0.042821,-0.004819, 0.048333,-0.051469,0.997504,0.066939,0.044114,-0.004819, 0.005067,-0.005396,0.999973,0.066834,0.044226,-0.004818, 0.004718,-0.005704,0.999973,0.066081,0.043561,-0.004818, 0.048333,-0.051469,0.997504,0.066939,0.044114,-0.004819, 0.004718,-0.005704,0.999973,0.066081,0.043561,-0.004818, 0.045006,-0.054403,0.997504,0.066178,0.043443,-0.004819, 0.051469,-0.048333,0.997504,0.067657,0.044831,-0.004819, 0.005396,-0.005067,0.999973,0.067545,0.044936,-0.004818, 0.005067,-0.005396,0.999973,0.066834,0.044226,-0.004818, 0.051469,-0.048333,0.997504,0.067657,0.044831,-0.004819, 0.005067,-0.005396,0.999973,0.066834,0.044226,-0.004818, 0.048333,-0.051469,0.997504,0.066939,0.044114,-0.004819, 0.054403,-0.045006,0.997504,0.068328,0.045592,-0.004819, 0.005704,-0.004718,0.999973,0.06821,0.04569,-0.004818, 0.005396,-0.005067,0.999973,0.067545,0.044936,-0.004818, 0.054403,-0.045006,0.997504,0.068328,0.045592,-0.004819, 0.005396,-0.005067,0.999973,0.067545,0.044936,-0.004818, 0.051469,-0.048333,0.997504,0.067657,0.044831,-0.004819, 0.057121,-0.041501,0.997504,0.068949,0.046394,-0.004819, 0.005989,-0.004351,0.999973,0.068825,0.046484,-0.004818, 0.005704,-0.004718,0.999973,0.06821,0.04569,-0.004818, 0.057121,-0.041501,0.997504,0.068949,0.046394,-0.004819, 0.005704,-0.004718,0.999973,0.06821,0.04569,-0.004818, 0.054403,-0.045006,0.997504,0.068328,0.045592,-0.004819, 0.059614,-0.037832,0.997504,0.06952,0.047233,-0.004819, 0.00625,-0.003966,0.999973,0.06939,0.047315,-0.004818, 0.005989,-0.004351,0.999973,0.068825,0.046484,-0.004818, 0.059614,-0.037832,0.997504,0.06952,0.047233,-0.004819, 0.005989,-0.004351,0.999973,0.068825,0.046484,-0.004818, 0.057121,-0.041501,0.997504,0.068949,0.046394,-0.004819, 0.061872,-0.034015,0.997504,0.070036,0.048106,-0.004819, 0.006487,-0.003566,0.999973,0.069902,0.04818,-0.004818, 0.00625,-0.003966,0.999973,0.06939,0.047315,-0.004818, 0.061872,-0.034015,0.997504,0.070036,0.048106,-0.004819, 0.00625,-0.003966,0.999973,0.06939,0.047315,-0.004818, 0.059614,-0.037832,0.997504,0.06952,0.047233,-0.004819, 0.063886,-0.030062,0.997504,0.070497,0.04901,-0.004819, 0.006698,-0.003152,0.999973,0.070358,0.049075,-0.004818, 0.006487,-0.003566,0.999973,0.069902,0.04818,-0.004818, 0.063886,-0.030062,0.997504,0.070497,0.04901,-0.004819, 0.006487,-0.003566,0.999973,0.069902,0.04818,-0.004818, 0.061872,-0.034015,0.997504,0.070036,0.048106,-0.004819, 0.065648,-0.025992,0.997504,0.070899,0.049941,-0.004819, 0.006883,-0.002725,0.999973,0.070757,0.049997,-0.004818, 0.006698,-0.003152,0.999973,0.070358,0.049075,-0.004818, 0.065648,-0.025992,0.997504,0.070899,0.049941,-0.004819, 0.006698,-0.003152,0.999973,0.070358,0.049075,-0.004818, 0.063886,-0.030062,0.997504,0.070497,0.04901,-0.004819, 0.06715,-0.021818,0.997504,0.071243,0.050895,-0.004819, 0.00704,-0.002287,0.999973,0.071097,0.050943,-0.004818, 0.006883,-0.002725,0.999973,0.070757,0.049997,-0.004818, 0.06715,-0.021818,0.997504,0.071243,0.050895,-0.004819, 0.006883,-0.002725,0.999973,0.070757,0.049997,-0.004818, 0.065648,-0.025992,0.997504,0.070899,0.049941,-0.004819, 0.068388,-0.017559,0.997504,0.071526,0.051869,-0.004819, 0.00717,-0.001841,0.999973,0.071377,0.051908,-0.004818, 0.00704,-0.002287,0.999973,0.071097,0.050943,-0.004818, 0.068388,-0.017559,0.997504,0.071526,0.051869,-0.004819, 0.00704,-0.002287,0.999973,0.071097,0.050943,-0.004818, 0.06715,-0.021818,0.997504,0.071243,0.050895,-0.004819, 0.069355,-0.01323,0.997504,0.071747,0.052859,-0.004819, 0.007271,-0.001387,0.999973,0.071597,0.052888,-0.004818, 0.00717,-0.001841,0.999973,0.071377,0.051908,-0.004818, 0.069355,-0.01323,0.997504,0.071747,0.052859,-0.004819, 0.00717,-0.001841,0.999973,0.071377,0.051908,-0.004818, 0.068388,-0.017559,0.997504,0.071526,0.051869,-0.004819, 0.070049,-0.008849,0.997504,0.071906,0.053861,-0.004819, 0.007344,-0.000928,0.999973,0.071754,0.053881,-0.004818, 0.007271,-0.001387,0.999973,0.071597,0.052888,-0.004818, 0.070049,-0.008849,0.997504,0.071906,0.053861,-0.004819, 0.007271,-0.001387,0.999973,0.071597,0.052888,-0.004818, 0.069355,-0.01323,0.997504,0.071747,0.052859,-0.004819, 0.070467,-0.004433,0.997504,0.072001,0.054871,-0.004819, 0.007388,-0.000465,0.999973,0.071848,0.054881,-0.004818, 0.007344,-0.000928,0.999973,0.071754,0.053881,-0.004818, 0.070467,-0.004433,0.997504,0.072001,0.054871,-0.004819, 0.007344,-0.000928,0.999973,0.071754,0.053881,-0.004818, 0.070049,-0.008849,0.997504,0.071906,0.053861,-0.004819, 0.070606,0,0.997504,0.072033,0.055885,-0.004819, 0.007402,0,0.999973,0.07188,0.055885,-0.004818, 0.007388,-0.000465,0.999973,0.071848,0.054881,-0.004818, 0.070606,0,0.997504,0.072033,0.055885,-0.004819, 0.007388,-0.000465,0.999973,0.071848,0.054881,-0.004818, 0.070467,-0.004433,0.997504,0.072001,0.054871,-0.004819, 0.070467,0.004433,0.997504,0.072001,0.056899,-0.004819, 0.007388,0.000465,0.999973,0.071848,0.05689,-0.004818, 0.007402,0,0.999973,0.07188,0.055885,-0.004818, 0.070467,0.004433,0.997504,0.072001,0.056899,-0.004819, 0.007402,0,0.999973,0.07188,0.055885,-0.004818, 0.070606,0,0.997504,0.072033,0.055885,-0.004819, 0.070049,0.008849,0.997504,0.071906,0.057909,-0.004819, 0.007344,0.000928,0.999973,0.071754,0.05789,-0.004818, 0.007388,0.000465,0.999973,0.071848,0.05689,-0.004818, 0.070049,0.008849,0.997504,0.071906,0.057909,-0.004819, 0.007388,0.000465,0.999973,0.071848,0.05689,-0.004818, 0.070467,0.004433,0.997504,0.072001,0.056899,-0.004819, 0.069355,0.01323,0.997504,0.071747,0.058911,-0.004819, 0.007271,0.001387,0.999973,0.071597,0.058882,-0.004818, 0.007344,0.000928,0.999973,0.071754,0.05789,-0.004818, 0.069355,0.01323,0.997504,0.071747,0.058911,-0.004819, 0.007344,0.000928,0.999973,0.071754,0.05789,-0.004818, 0.070049,0.008849,0.997504,0.071906,0.057909,-0.004819, 0.068388,0.017559,0.997504,0.071526,0.059901,-0.004819, 0.00717,0.001841,0.999973,0.071377,0.059863,-0.004818, 0.007271,0.001387,0.999973,0.071597,0.058882,-0.004818, 0.068388,0.017559,0.997504,0.071526,0.059901,-0.004819, 0.007271,0.001387,0.999973,0.071597,0.058882,-0.004818, 0.069355,0.01323,0.997504,0.071747,0.058911,-0.004819, 0.06715,0.021818,0.997504,0.071243,0.060875,-0.004819, 0.00704,0.002287,0.999973,0.071097,0.060828,-0.004818, 0.00717,0.001841,0.999973,0.071377,0.059863,-0.004818, 0.06715,0.021818,0.997504,0.071243,0.060875,-0.004819, 0.00717,0.001841,0.999973,0.071377,0.059863,-0.004818, 0.068388,0.017559,0.997504,0.071526,0.059901,-0.004819, 0.065648,0.025992,0.997504,0.070899,0.06183,-0.004819, 0.006883,0.002725,0.999973,0.070757,0.061773,-0.004818, 0.00704,0.002287,0.999973,0.071097,0.060828,-0.004818, 0.065648,0.025992,0.997504,0.070899,0.06183,-0.004819, 0.00704,0.002287,0.999973,0.071097,0.060828,-0.004818, 0.06715,0.021818,0.997504,0.071243,0.060875,-0.004819, 0.063886,0.030062,0.997504,0.070497,0.062761,-0.004819, 0.006698,0.003152,0.999973,0.070358,0.062696,-0.004818, 0.006883,0.002725,0.999973,0.070757,0.061773,-0.004818, 0.063886,0.030062,0.997504,0.070497,0.062761,-0.004819, 0.006883,0.002725,0.999973,0.070757,0.061773,-0.004818, 0.065648,0.025992,0.997504,0.070899,0.06183,-0.004819, 0.061872,0.034015,0.997504,0.070036,0.063665,-0.004819, 0.006487,0.003566,0.999973,0.069902,0.063591,-0.004818, 0.006698,0.003152,0.999973,0.070358,0.062696,-0.004818, 0.061872,0.034015,0.997504,0.070036,0.063665,-0.004819, 0.006698,0.003152,0.999973,0.070358,0.062696,-0.004818, 0.063886,0.030062,0.997504,0.070497,0.062761,-0.004819, 0.059614,0.037832,0.997504,0.06952,0.064538,-0.004819, 0.00625,0.003966,0.999973,0.06939,0.064456,-0.004818, 0.006487,0.003566,0.999973,0.069902,0.063591,-0.004818, 0.059614,0.037832,0.997504,0.06952,0.064538,-0.004819, 0.006487,0.003566,0.999973,0.069902,0.063591,-0.004818, 0.061872,0.034015,0.997504,0.070036,0.063665,-0.004819, 0.057121,0.041501,0.997504,0.068949,0.065377,-0.004819, 0.005989,0.004351,0.999973,0.068825,0.065287,-0.004818, 0.00625,0.003966,0.999973,0.06939,0.064456,-0.004818, 0.057121,0.041501,0.997504,0.068949,0.065377,-0.004819, 0.00625,0.003966,0.999973,0.06939,0.064456,-0.004818, 0.059614,0.037832,0.997504,0.06952,0.064538,-0.004819, 0.054403,0.045006,0.997504,0.068328,0.066178,-0.004819, 0.005704,0.004718,0.999973,0.06821,0.066081,-0.004818, 0.005989,0.004351,0.999973,0.068825,0.065287,-0.004818, 0.054403,0.045006,0.997504,0.068328,0.066178,-0.004819, 0.005989,0.004351,0.999973,0.068825,0.065287,-0.004818, 0.057121,0.041501,0.997504,0.068949,0.065377,-0.004819, 0.051469,0.048333,0.997504,0.067657,0.066939,-0.004819, 0.005396,0.005067,0.999973,0.067545,0.066834,-0.004818, 0.005704,0.004718,0.999973,0.06821,0.066081,-0.004818, 0.051469,0.048333,0.997504,0.067657,0.066939,-0.004819, 0.005704,0.004718,0.999973,0.06821,0.066081,-0.004818, 0.054403,0.045006,0.997504,0.068328,0.066178,-0.004819, 0.048333,0.051469,0.997504,0.066939,0.067657,-0.004819, 0.005067,0.005396,0.999973,0.066834,0.067545,-0.004818, 0.005396,0.005067,0.999973,0.067545,0.066834,-0.004818, 0.048333,0.051469,0.997504,0.066939,0.067657,-0.004819, 0.005396,0.005067,0.999973,0.067545,0.066834,-0.004818, 0.051469,0.048333,0.997504,0.067657,0.066939,-0.004819, 0.045006,0.054403,0.997504,0.066178,0.068328,-0.004819, 0.004718,0.005704,0.999973,0.066081,0.06821,-0.004818, 0.005067,0.005396,0.999973,0.066834,0.067545,-0.004818, 0.045006,0.054403,0.997504,0.066178,0.068328,-0.004819, 0.005067,0.005396,0.999973,0.066834,0.067545,-0.004818, 0.048333,0.051469,0.997504,0.066939,0.067657,-0.004819, 0.041501,0.057121,0.997504,0.065377,0.068949,-0.004819, 0.004351,0.005989,0.999973,0.065287,0.068825,-0.004818, 0.004718,0.005704,0.999973,0.066081,0.06821,-0.004818, 0.041501,0.057121,0.997504,0.065377,0.068949,-0.004819, 0.004718,0.005704,0.999973,0.066081,0.06821,-0.004818, 0.045006,0.054403,0.997504,0.066178,0.068328,-0.004819, 0.037832,0.059614,0.997504,0.064538,0.06952,-0.004819, 0.003966,0.00625,0.999973,0.064456,0.06939,-0.004818, 0.004351,0.005989,0.999973,0.065287,0.068825,-0.004818, 0.037832,0.059614,0.997504,0.064538,0.06952,-0.004819, 0.004351,0.005989,0.999973,0.065287,0.068825,-0.004818, 0.041501,0.057121,0.997504,0.065377,0.068949,-0.004819, 0.034015,0.061872,0.997504,0.063665,0.070036,-0.004819, 0.003566,0.006487,0.999973,0.063591,0.069902,-0.004818, 0.003966,0.00625,0.999973,0.064456,0.06939,-0.004818, 0.034015,0.061872,0.997504,0.063665,0.070036,-0.004819, 0.003966,0.00625,0.999973,0.064456,0.06939,-0.004818, 0.037832,0.059614,0.997504,0.064538,0.06952,-0.004819, 0.030062,0.063886,0.997504,0.062761,0.070497,-0.004819, 0.003152,0.006698,0.999973,0.062696,0.070358,-0.004818, 0.003566,0.006487,0.999973,0.063591,0.069902,-0.004818, 0.030062,0.063886,0.997504,0.062761,0.070497,-0.004819, 0.003566,0.006487,0.999973,0.063591,0.069902,-0.004818, 0.034015,0.061872,0.997504,0.063665,0.070036,-0.004819, 0.025992,0.065648,0.997504,0.06183,0.070899,-0.004819, 0.002725,0.006883,0.999973,0.061773,0.070757,-0.004818, 0.003152,0.006698,0.999973,0.062696,0.070358,-0.004818, 0.025992,0.065648,0.997504,0.06183,0.070899,-0.004819, 0.003152,0.006698,0.999973,0.062696,0.070358,-0.004818, 0.030062,0.063886,0.997504,0.062761,0.070497,-0.004819, 0.021818,0.06715,0.997504,0.060875,0.071243,-0.004819, 0.002287,0.00704,0.999973,0.060828,0.071097,-0.004818, 0.002725,0.006883,0.999973,0.061773,0.070757,-0.004818, 0.021818,0.06715,0.997504,0.060875,0.071243,-0.004819, 0.002725,0.006883,0.999973,0.061773,0.070757,-0.004818, 0.025992,0.065648,0.997504,0.06183,0.070899,-0.004819, 0.017559,0.068388,0.997504,0.059901,0.071526,-0.004819, 0.001841,0.00717,0.999973,0.059863,0.071377,-0.004818, 0.002287,0.00704,0.999973,0.060828,0.071097,-0.004818, 0.017559,0.068388,0.997504,0.059901,0.071526,-0.004819, 0.002287,0.00704,0.999973,0.060828,0.071097,-0.004818, 0.021818,0.06715,0.997504,0.060875,0.071243,-0.004819, 0.01323,0.069355,0.997504,0.058911,0.071747,-0.004819, 0.001387,0.007271,0.999973,0.058882,0.071597,-0.004818, 0.001841,0.00717,0.999973,0.059863,0.071377,-0.004818, 0.01323,0.069355,0.997504,0.058911,0.071747,-0.004819, 0.001841,0.00717,0.999973,0.059863,0.071377,-0.004818, 0.017559,0.068388,0.997504,0.059901,0.071526,-0.004819, 0.008849,0.070049,0.997504,0.057909,0.071906,-0.004819, 0.000928,0.007344,0.999973,0.05789,0.071754,-0.004818, 0.001387,0.007271,0.999973,0.058882,0.071597,-0.004818, 0.008849,0.070049,0.997504,0.057909,0.071906,-0.004819, 0.001387,0.007271,0.999973,0.058882,0.071597,-0.004818, 0.01323,0.069355,0.997504,0.058911,0.071747,-0.004819, 0.004433,0.070467,0.997504,0.056899,0.072001,-0.004819, 0.000465,0.007388,0.999973,0.05689,0.071848,-0.004818, 0.000928,0.007344,0.999973,0.05789,0.071754,-0.004818, 0.004433,0.070467,0.997504,0.056899,0.072001,-0.004819, 0.000928,0.007344,0.999973,0.05789,0.071754,-0.004818, 0.008849,0.070049,0.997504,0.057909,0.071906,-0.004819, 0,0.070606,0.997504,0.055885,0.072033,-0.004819, 0,0.007402,0.999973,0.055885,0.07188,-0.004818, 0.000465,0.007388,0.999973,0.05689,0.071848,-0.004818, 0,0.070606,0.997504,0.055885,0.072033,-0.004819, 0.000465,0.007388,0.999973,0.05689,0.071848,-0.004818, 0.004433,0.070467,0.997504,0.056899,0.072001,-0.004819, -0.004433,0.070467,0.997504,0.054871,0.072001,-0.004819, -0.000465,0.007388,0.999973,0.054881,0.071848,-0.004818, 0,0.007402,0.999973,0.055885,0.07188,-0.004818, -0.004433,0.070467,0.997504,0.054871,0.072001,-0.004819, 0,0.007402,0.999973,0.055885,0.07188,-0.004818, 0,0.070606,0.997504,0.055885,0.072033,-0.004819, -0.008849,0.070049,0.997504,0.053861,0.071906,-0.004819, -0.000928,0.007344,0.999973,0.053881,0.071754,-0.004818, -0.000465,0.007388,0.999973,0.054881,0.071848,-0.004818, -0.008849,0.070049,0.997504,0.053861,0.071906,-0.004819, -0.000465,0.007388,0.999973,0.054881,0.071848,-0.004818, -0.004433,0.070467,0.997504,0.054871,0.072001,-0.004819, -0.01323,0.069355,0.997504,0.052859,0.071747,-0.004819, -0.001387,0.007271,0.999973,0.052888,0.071597,-0.004818, -0.000928,0.007344,0.999973,0.053881,0.071754,-0.004818, -0.01323,0.069355,0.997504,0.052859,0.071747,-0.004819, -0.000928,0.007344,0.999973,0.053881,0.071754,-0.004818, -0.008849,0.070049,0.997504,0.053861,0.071906,-0.004819, -0.017559,0.068388,0.997504,0.051869,0.071526,-0.004819, -0.001841,0.00717,0.999973,0.051908,0.071377,-0.004818, -0.001387,0.007271,0.999973,0.052888,0.071597,-0.004818, -0.017559,0.068388,0.997504,0.051869,0.071526,-0.004819, -0.001387,0.007271,0.999973,0.052888,0.071597,-0.004818, -0.01323,0.069355,0.997504,0.052859,0.071747,-0.004819, -0.021818,0.06715,0.997504,0.050895,0.071243,-0.004819, -0.002287,0.00704,0.999973,0.050943,0.071097,-0.004818, -0.001841,0.00717,0.999973,0.051908,0.071377,-0.004818, -0.021818,0.06715,0.997504,0.050895,0.071243,-0.004819, -0.001841,0.00717,0.999973,0.051908,0.071377,-0.004818, -0.017559,0.068388,0.997504,0.051869,0.071526,-0.004819, -0.025992,0.065648,0.997504,0.049941,0.070899,-0.004819, -0.002725,0.006883,0.999973,0.049997,0.070757,-0.004818, -0.002287,0.00704,0.999973,0.050943,0.071097,-0.004818, -0.025992,0.065648,0.997504,0.049941,0.070899,-0.004819, -0.002287,0.00704,0.999973,0.050943,0.071097,-0.004818, -0.021818,0.06715,0.997504,0.050895,0.071243,-0.004819, -0.030062,0.063886,0.997504,0.04901,0.070497,-0.004819, -0.003152,0.006698,0.999973,0.049075,0.070358,-0.004818, -0.002725,0.006883,0.999973,0.049997,0.070757,-0.004818, -0.030062,0.063886,0.997504,0.04901,0.070497,-0.004819, -0.002725,0.006883,0.999973,0.049997,0.070757,-0.004818, -0.025992,0.065648,0.997504,0.049941,0.070899,-0.004819, -0.034015,0.061872,0.997504,0.048106,0.070036,-0.004819, -0.003566,0.006487,0.999973,0.04818,0.069902,-0.004818, -0.003152,0.006698,0.999973,0.049075,0.070358,-0.004818, -0.034015,0.061872,0.997504,0.048106,0.070036,-0.004819, -0.003152,0.006698,0.999973,0.049075,0.070358,-0.004818, -0.030062,0.063886,0.997504,0.04901,0.070497,-0.004819, -0.037832,0.059614,0.997504,0.047233,0.06952,-0.004819, -0.003966,0.00625,0.999973,0.047315,0.06939,-0.004818, -0.003566,0.006487,0.999973,0.04818,0.069902,-0.004818, -0.037832,0.059614,0.997504,0.047233,0.06952,-0.004819, -0.003566,0.006487,0.999973,0.04818,0.069902,-0.004818, -0.034015,0.061872,0.997504,0.048106,0.070036,-0.004819, -0.041501,0.057121,0.997504,0.046394,0.068949,-0.004819, -0.004351,0.005989,0.999973,0.046484,0.068825,-0.004818, -0.003966,0.00625,0.999973,0.047315,0.06939,-0.004818, -0.041501,0.057121,0.997504,0.046394,0.068949,-0.004819, -0.003966,0.00625,0.999973,0.047315,0.06939,-0.004818, -0.037832,0.059614,0.997504,0.047233,0.06952,-0.004819, -0.045006,0.054403,0.997504,0.045592,0.068328,-0.004819, -0.004718,0.005704,0.999973,0.04569,0.06821,-0.004818, -0.004351,0.005989,0.999973,0.046484,0.068825,-0.004818, -0.045006,0.054403,0.997504,0.045592,0.068328,-0.004819, -0.004351,0.005989,0.999973,0.046484,0.068825,-0.004818, -0.041501,0.057121,0.997504,0.046394,0.068949,-0.004819, -0.048333,0.051469,0.997504,0.044831,0.067657,-0.004819, -0.005067,0.005396,0.999973,0.044936,0.067545,-0.004818, -0.004718,0.005704,0.999973,0.04569,0.06821,-0.004818, -0.048333,0.051469,0.997504,0.044831,0.067657,-0.004819, -0.004718,0.005704,0.999973,0.04569,0.06821,-0.004818, -0.045006,0.054403,0.997504,0.045592,0.068328,-0.004819, -0.051469,0.048333,0.997504,0.044114,0.066939,-0.004819, -0.005396,0.005067,0.999973,0.044226,0.066834,-0.004818, -0.005067,0.005396,0.999973,0.044936,0.067545,-0.004818, -0.051469,0.048333,0.997504,0.044114,0.066939,-0.004819, -0.005067,0.005396,0.999973,0.044936,0.067545,-0.004818, -0.048333,0.051469,0.997504,0.044831,0.067657,-0.004819, -0.054403,0.045006,0.997504,0.043443,0.066178,-0.004819, -0.005704,0.004718,0.999973,0.043561,0.066081,-0.004818, -0.005396,0.005067,0.999973,0.044226,0.066834,-0.004818, -0.054403,0.045006,0.997504,0.043443,0.066178,-0.004819, -0.005396,0.005067,0.999973,0.044226,0.066834,-0.004818, -0.051469,0.048333,0.997504,0.044114,0.066939,-0.004819, -0.057121,0.041501,0.997504,0.042821,0.065377,-0.004819, -0.005989,0.004351,0.999973,0.042945,0.065287,-0.004818, -0.005704,0.004718,0.999973,0.043561,0.066081,-0.004818, -0.057121,0.041501,0.997504,0.042821,0.065377,-0.004819, -0.005704,0.004718,0.999973,0.043561,0.066081,-0.004818, -0.054403,0.045006,0.997504,0.043443,0.066178,-0.004819, -0.059614,0.037832,0.997504,0.042251,0.064538,-0.004819, -0.00625,0.003966,0.999973,0.042381,0.064456,-0.004818, -0.005989,0.004351,0.999973,0.042945,0.065287,-0.004818, -0.059614,0.037832,0.997504,0.042251,0.064538,-0.004819, -0.005989,0.004351,0.999973,0.042945,0.065287,-0.004818, -0.057121,0.041501,0.997504,0.042821,0.065377,-0.004819, -0.061872,0.034015,0.997504,0.041735,0.063665,-0.004819, -0.006487,0.003566,0.999973,0.041869,0.063591,-0.004818, -0.00625,0.003966,0.999973,0.042381,0.064456,-0.004818, -0.061872,0.034015,0.997504,0.041735,0.063665,-0.004819, -0.00625,0.003966,0.999973,0.042381,0.064456,-0.004818, -0.059614,0.037832,0.997504,0.042251,0.064538,-0.004819, -0.063886,0.030062,0.997504,0.041274,0.062761,-0.004819, -0.006698,0.003152,0.999973,0.041413,0.062696,-0.004818, -0.006487,0.003566,0.999973,0.041869,0.063591,-0.004818, -0.063886,0.030062,0.997504,0.041274,0.062761,-0.004819, -0.006487,0.003566,0.999973,0.041869,0.063591,-0.004818, -0.061872,0.034015,0.997504,0.041735,0.063665,-0.004819, -0.006698,0.003152,0.999973,0.041413,0.062696,-0.004818, 0,0,1,0.044613,0.063997,-0.004818, -0.006487,0.003566,0.999973,0.041869,0.063591,-0.004818, -0.006698,0.003152,0.999973,0.041413,0.062696,-0.004818, 0,0,1,0.043898,0.062655,-0.004818, 0,0,1,0.044613,0.063997,-0.004818, -0.006883,0.002725,0.999973,0.041014,0.061773,-0.004818, 0,0,1,0.043898,0.062655,-0.004818, -0.006698,0.003152,0.999973,0.041413,0.062696,-0.004818, -0.006883,0.002725,0.999973,0.041014,0.061773,-0.004818, 0,0,1,0.043489,0.061186,-0.004818, 0,0,1,0.043898,0.062655,-0.004818, -0.00704,0.002287,0.999973,0.040673,0.060828,-0.004818, 0,0,1,0.043489,0.061186,-0.004818, -0.006883,0.002725,0.999973,0.041014,0.061773,-0.004818, -0.00717,0.001841,0.999973,0.040393,0.059863,-0.004818, 0,0,1,0.043489,0.061186,-0.004818, -0.00704,0.002287,0.999973,0.040673,0.060828,-0.004818, -0.00717,0.001841,0.999973,0.040393,0.059863,-0.004818, 0,0,1,0.043409,0.05966,-0.004818, 0,0,1,0.043489,0.061186,-0.004818, -0.007271,0.001387,0.999973,0.040174,0.058882,-0.004818, 0,0,1,0.043409,0.05966,-0.004818, -0.00717,0.001841,0.999973,0.040393,0.059863,-0.004818, -0.007271,0.001387,0.999973,0.040174,0.058882,-0.004818, 0,0,1,0.043472,0.058741,-0.004818, 0,0,1,0.043409,0.05966,-0.004818, -0.007344,0.000928,0.999973,0.040017,0.05789,-0.004818, 0,0,1,0.043472,0.058741,-0.004818, -0.007271,0.001387,0.999973,0.040174,0.058882,-0.004818, -0.007344,0.000928,0.999973,0.040017,0.05789,-0.004818, 0,0,1,0.04361,0.057831,-0.004818, 0,0,1,0.043472,0.058741,-0.004818, -0.007344,0.000928,0.999973,0.040017,0.05789,-0.004818, 0,0,1,0.043821,0.056936,-0.004818, 0,0,1,0.04361,0.057831,-0.004818, -0.007388,0.000465,0.999973,0.039922,0.05689,-0.004818, 0,0,1,0.043821,0.056936,-0.004818, -0.007344,0.000928,0.999973,0.040017,0.05789,-0.004818, -0.007388,0.000465,0.999973,0.039922,0.05689,-0.004818, 0,0,1,0.044105,0.056061,-0.004818, 0,0,1,0.043821,0.056936,-0.004818, -0.007402,0,0.999973,0.039891,0.055885,-0.004818, 0,0,1,0.044105,0.056061,-0.004818, -0.007388,0.000465,0.999973,0.039922,0.05689,-0.004818, -0.007402,0,0.999973,0.039891,0.055885,-0.004818, 0,0,1,0.044458,0.055214,-0.004818, 0,0,1,0.044105,0.056061,-0.004818, -0.007388,-0.000465,0.999973,0.039922,0.054881,-0.004818, 0,0,1,0.044458,0.055214,-0.004818, -0.007402,0,0.999973,0.039891,0.055885,-0.004818, -0.007388,-0.000465,0.999973,0.039922,0.054881,-0.004818, 0,0,1,0.044879,0.054399,-0.004818, 0,0,1,0.044458,0.055214,-0.004818, -0.007344,-0.000928,0.999973,0.040017,0.053881,-0.004818, 0,0,1,0.044879,0.054399,-0.004818, -0.007388,-0.000465,0.999973,0.039922,0.054881,-0.004818, -0.007344,-0.000928,0.999973,0.040017,0.053881,-0.004818, 0,0,1,0.045365,0.053623,-0.004818, 0,0,1,0.044879,0.054399,-0.004818, -0.007344,-0.000928,0.999973,0.040017,0.053881,-0.004818, 0,0,1,0.045912,0.05289,-0.004818, 0,0,1,0.045365,0.053623,-0.004818, -0.007271,-0.001387,0.999973,0.040174,0.052888,-0.004818, 0,0,1,0.045912,0.05289,-0.004818, -0.007344,-0.000928,0.999973,0.040017,0.053881,-0.004818, -0.007271,-0.001387,0.999973,0.040174,0.052888,-0.004818, 0,0,1,0.046517,0.052206,-0.004818, 0,0,1,0.045912,0.05289,-0.004818, -0.00717,-0.001841,0.999973,0.040393,0.051908,-0.004818, 0,0,1,0.046517,0.052206,-0.004818, -0.007271,-0.001387,0.999973,0.040174,0.052888,-0.004818, -0.00717,-0.001841,0.999973,0.040393,0.051908,-0.004818, 0,0,1,0.047175,0.051576,-0.004818, 0,0,1,0.046517,0.052206,-0.004818, -0.00717,-0.001841,0.999973,0.040393,0.051908,-0.004818, 0,0,1,0.047882,0.051003,-0.004818, 0,0,1,0.047175,0.051576,-0.004818, -0.00704,-0.002287,0.999973,0.040673,0.050943,-0.004818, 0,0,1,0.047882,0.051003,-0.004818, -0.00717,-0.001841,0.999973,0.040393,0.051908,-0.004818, -0.00704,-0.002287,0.999973,0.040673,0.050943,-0.004818, 0,0,1,0.048634,0.050493,-0.004818, 0,0,1,0.047882,0.051003,-0.004818, -0.00704,-0.002287,0.999973,0.040673,0.050943,-0.004818, 0,0,1,0.049354,0.050026,-0.004818, 0,0,1,0.048634,0.050493,-0.004818, -0.006883,-0.002725,0.999973,0.041014,0.049997,-0.004818, 0,0,1,0.049354,0.050026,-0.004818, -0.00704,-0.002287,0.999973,0.040673,0.050943,-0.004818, -0.006883,-0.002725,0.999973,0.041014,0.049997,-0.004818, 0,0,1,0.050057,0.049532,-0.004818, 0,0,1,0.049354,0.050026,-0.004818, -0.006698,-0.003152,0.999973,0.041413,0.049075,-0.004818, 0,0,1,0.050057,0.049532,-0.004818, -0.006883,-0.002725,0.999973,0.041014,0.049997,-0.004818, -0.006698,-0.003152,0.999973,0.041413,0.049075,-0.004818, 0,0,1,0.050741,0.049011,-0.004818, 0,0,1,0.050057,0.049532,-0.004818, -0.006698,-0.003152,0.999973,0.041413,0.049075,-0.004818, 0,0,1,0.051404,0.048464,-0.004818, 0,0,1,0.050741,0.049011,-0.004818, -0.006487,-0.003566,0.999973,0.041869,0.04818,-0.004818, 0,0,1,0.051404,0.048464,-0.004818, -0.006698,-0.003152,0.999973,0.041413,0.049075,-0.004818, -0.006487,-0.003566,0.999973,0.041869,0.04818,-0.004818, 0,0,1,0.052047,0.047891,-0.004818, 0,0,1,0.051404,0.048464,-0.004818, -0.00625,-0.003966,0.999973,0.042381,0.047315,-0.004818, 0,0,1,0.052047,0.047891,-0.004818, -0.006487,-0.003566,0.999973,0.041869,0.04818,-0.004818, -0.00625,-0.003966,0.999973,0.042381,0.047315,-0.004818, 0,0,1,0.052668,0.047293,-0.004818, 0,0,1,0.052047,0.047891,-0.004818, -0.00625,-0.003966,0.999973,0.042381,0.047315,-0.004818, 0,0,1,0.053266,0.046673,-0.004818, 0,0,1,0.052668,0.047293,-0.004818, -0.005989,-0.004351,0.999973,0.042945,0.046484,-0.004818, 0,0,1,0.053266,0.046673,-0.004818, -0.00625,-0.003966,0.999973,0.042381,0.047315,-0.004818, -0.005989,-0.004351,0.999973,0.042945,0.046484,-0.004818, 0,0,1,0.05384,0.046029,-0.004818, 0,0,1,0.053266,0.046673,-0.004818, -0.005704,-0.004718,0.999973,0.043561,0.04569,-0.004818, 0,0,1,0.05384,0.046029,-0.004818, -0.005989,-0.004351,0.999973,0.042945,0.046484,-0.004818, -0.005704,-0.004718,0.999973,0.043561,0.04569,-0.004818, 0,0,1,0.05439,0.045363,-0.004818, 0,0,1,0.05384,0.046029,-0.004818, -0.005396,-0.005067,0.999973,0.044226,0.044936,-0.004818, 0,0,1,0.05439,0.045363,-0.004818, -0.005704,-0.004718,0.999973,0.043561,0.04569,-0.004818, -0.005396,-0.005067,0.999973,0.044226,0.044936,-0.004818, 0,0,1,0.054915,0.044676,-0.004818, 0,0,1,0.05439,0.045363,-0.004818, -0.005067,-0.005396,0.999973,0.044936,0.044226,-0.004818, 0,0,1,0.054915,0.044676,-0.004818, -0.005396,-0.005067,0.999973,0.044226,0.044936,-0.004818, -0.005067,-0.005396,0.999973,0.044936,0.044226,-0.004818, 0,0,1,0.055414,0.04397,-0.004818, 0,0,1,0.054915,0.044676,-0.004818, -0.004718,-0.005704,0.999973,0.04569,0.043561,-0.004818, 0,0,1,0.055414,0.04397,-0.004818, -0.005067,-0.005396,0.999973,0.044936,0.044226,-0.004818, -0.004718,-0.005704,0.999973,0.04569,0.043561,-0.004818, 0,0,1,0.055885,0.043244,-0.004818, 0,0,1,0.055414,0.04397,-0.004818, -0.004718,-0.005704,0.999973,0.04569,0.043561,-0.004818, 0.004351,-0.005989,0.999973,0.065287,0.042945,-0.004818, 0,0,1,0.055885,0.043244,-0.004818, -0.004351,-0.005989,0.999973,0.046484,0.042945,-0.004818, 0.004351,-0.005989,0.999973,0.065287,0.042945,-0.004818, -0.004718,-0.005704,0.999973,0.04569,0.043561,-0.004818, -0.004351,-0.005989,0.999973,0.046484,0.042945,-0.004818, 0.003966,-0.00625,0.999973,0.064456,0.042381,-0.004818, 0.004351,-0.005989,0.999973,0.065287,0.042945,-0.004818, -0.003966,-0.00625,0.999973,0.047315,0.042381,-0.004818, 0.003966,-0.00625,0.999973,0.064456,0.042381,-0.004818, -0.004351,-0.005989,0.999973,0.046484,0.042945,-0.004818, -0.003966,-0.00625,0.999973,0.047315,0.042381,-0.004818, 0.003566,-0.006487,0.999973,0.063591,0.041869,-0.004818, 0.003966,-0.00625,0.999973,0.064456,0.042381,-0.004818, -0.003566,-0.006487,0.999973,0.04818,0.041869,-0.004818, 0.003566,-0.006487,0.999973,0.063591,0.041869,-0.004818, -0.003966,-0.00625,0.999973,0.047315,0.042381,-0.004818, -0.003566,-0.006487,0.999973,0.04818,0.041869,-0.004818, 0.003152,-0.006698,0.999973,0.062696,0.041413,-0.004818, 0.003566,-0.006487,0.999973,0.063591,0.041869,-0.004818, -0.003152,-0.006698,0.999973,0.049075,0.041413,-0.004818, 0.003152,-0.006698,0.999973,0.062696,0.041413,-0.004818, -0.003566,-0.006487,0.999973,0.04818,0.041869,-0.004818, -0.003152,-0.006698,0.999973,0.049075,0.041413,-0.004818, 0.002725,-0.006883,0.999973,0.061773,0.041014,-0.004818, 0.003152,-0.006698,0.999973,0.062696,0.041413,-0.004818, -0.002725,-0.006883,0.999973,0.049997,0.041014,-0.004818, 0.002725,-0.006883,0.999973,0.061773,0.041014,-0.004818, -0.003152,-0.006698,0.999973,0.049075,0.041413,-0.004818, -0.002725,-0.006883,0.999973,0.049997,0.041014,-0.004818, 0.002287,-0.00704,0.999973,0.060828,0.040673,-0.004818, 0.002725,-0.006883,0.999973,0.061773,0.041014,-0.004818, -0.002287,-0.00704,0.999973,0.050943,0.040673,-0.004818, 0.002287,-0.00704,0.999973,0.060828,0.040673,-0.004818, -0.002725,-0.006883,0.999973,0.049997,0.041014,-0.004818, -0.002287,-0.00704,0.999973,0.050943,0.040673,-0.004818, 0.001841,-0.00717,0.999973,0.059863,0.040393,-0.004818, 0.002287,-0.00704,0.999973,0.060828,0.040673,-0.004818, -0.001841,-0.00717,0.999973,0.051908,0.040393,-0.004818, 0.001841,-0.00717,0.999973,0.059863,0.040393,-0.004818, -0.002287,-0.00704,0.999973,0.050943,0.040673,-0.004818, -0.001841,-0.00717,0.999973,0.051908,0.040393,-0.004818, 0.001387,-0.007271,0.999973,0.058882,0.040174,-0.004818, 0.001841,-0.00717,0.999973,0.059863,0.040393,-0.004818, -0.001387,-0.007271,0.999973,0.052888,0.040174,-0.004818, 0.001387,-0.007271,0.999973,0.058882,0.040174,-0.004818, -0.001841,-0.00717,0.999973,0.051908,0.040393,-0.004818, -0.001387,-0.007271,0.999973,0.052888,0.040174,-0.004818, 0.000928,-0.007344,0.999973,0.05789,0.040017,-0.004818, 0.001387,-0.007271,0.999973,0.058882,0.040174,-0.004818, -0.000928,-0.007344,0.999973,0.053881,0.040017,-0.004818, 0.000928,-0.007344,0.999973,0.05789,0.040017,-0.004818, -0.001387,-0.007271,0.999973,0.052888,0.040174,-0.004818, -0.000928,-0.007344,0.999973,0.053881,0.040017,-0.004818, 0.000465,-0.007388,0.999973,0.05689,0.039922,-0.004818, 0.000928,-0.007344,0.999973,0.05789,0.040017,-0.004818, -0.000465,-0.007388,0.999973,0.054881,0.039922,-0.004818, 0.000465,-0.007388,0.999973,0.05689,0.039922,-0.004818, -0.000928,-0.007344,0.999973,0.053881,0.040017,-0.004818, 0.000465,-0.007388,0.999973,0.05689,0.039922,-0.004818, -0.000465,-0.007388,0.999973,0.054881,0.039922,-0.004818, 0,-0.007402,0.999973,0.055885,0.039891,-0.004818, 0.004718,-0.005704,0.999973,0.066081,0.043561,-0.004818, 0,0,1,0.055885,0.043244,-0.004818, 0.004351,-0.005989,0.999973,0.065287,0.042945,-0.004818, 0,0,1,0.055885,0.043244,-0.004818, 0.004718,-0.005704,0.999973,0.066081,0.043561,-0.004818, 0,0,1,0.056357,0.04397,-0.004818, 0,0,1,0.056357,0.04397,-0.004818, 0.004718,-0.005704,0.999973,0.066081,0.043561,-0.004818, 0.005067,-0.005396,0.999973,0.066834,0.044226,-0.004818, 0,0,1,0.056357,0.04397,-0.004818, 0.005067,-0.005396,0.999973,0.066834,0.044226,-0.004818, 0,0,1,0.056856,0.044676,-0.004818, 0,0,1,0.056856,0.044676,-0.004818, 0.005067,-0.005396,0.999973,0.066834,0.044226,-0.004818, 0.005396,-0.005067,0.999973,0.067545,0.044936,-0.004818, 0,0,1,0.056856,0.044676,-0.004818, 0.005396,-0.005067,0.999973,0.067545,0.044936,-0.004818, 0,0,1,0.05738,0.045363,-0.004818, 0,0,1,0.05738,0.045363,-0.004818, 0.005396,-0.005067,0.999973,0.067545,0.044936,-0.004818, 0.005704,-0.004718,0.999973,0.06821,0.04569,-0.004818, 0,0,1,0.05738,0.045363,-0.004818, 0.005704,-0.004718,0.999973,0.06821,0.04569,-0.004818, 0,0,1,0.05793,0.046029,-0.004818, 0,0,1,0.05793,0.046029,-0.004818, 0.005704,-0.004718,0.999973,0.06821,0.04569,-0.004818, 0.005989,-0.004351,0.999973,0.068825,0.046484,-0.004818, 0,0,1,0.05793,0.046029,-0.004818, 0.005989,-0.004351,0.999973,0.068825,0.046484,-0.004818, 0,0,1,0.058505,0.046673,-0.004818, 0,0,1,0.058505,0.046673,-0.004818, 0.005989,-0.004351,0.999973,0.068825,0.046484,-0.004818, 0.00625,-0.003966,0.999973,0.06939,0.047315,-0.004818, 0,0,1,0.058505,0.046673,-0.004818, 0.00625,-0.003966,0.999973,0.06939,0.047315,-0.004818, 0,0,1,0.059103,0.047293,-0.004818, 0,0,1,0.059103,0.047293,-0.004818, 0.00625,-0.003966,0.999973,0.06939,0.047315,-0.004818, 0,0,1,0.059724,0.047891,-0.004818, 0,0,1,0.059724,0.047891,-0.004818, 0.00625,-0.003966,0.999973,0.06939,0.047315,-0.004818, 0.006487,-0.003566,0.999973,0.069902,0.04818,-0.004818, 0,0,1,0.059724,0.047891,-0.004818, 0.006487,-0.003566,0.999973,0.069902,0.04818,-0.004818, 0,0,1,0.060366,0.048464,-0.004818, 0,0,1,0.060366,0.048464,-0.004818, 0.006487,-0.003566,0.999973,0.069902,0.04818,-0.004818, 0.006698,-0.003152,0.999973,0.070358,0.049075,-0.004818, 0,0,1,0.060366,0.048464,-0.004818, 0.006698,-0.003152,0.999973,0.070358,0.049075,-0.004818, 0,0,1,0.06103,0.049011,-0.004818, 0,0,1,0.06103,0.049011,-0.004818, 0.006698,-0.003152,0.999973,0.070358,0.049075,-0.004818, 0,0,1,0.061714,0.049532,-0.004818, 0,0,1,0.061714,0.049532,-0.004818, 0.006698,-0.003152,0.999973,0.070358,0.049075,-0.004818, 0.006883,-0.002725,0.999973,0.070757,0.049997,-0.004818, 0,0,1,0.061714,0.049532,-0.004818, 0.006883,-0.002725,0.999973,0.070757,0.049997,-0.004818, 0,0,1,0.062416,0.050026,-0.004818, 0,0,1,0.062416,0.050026,-0.004818, 0.006883,-0.002725,0.999973,0.070757,0.049997,-0.004818, 0.00704,-0.002287,0.999973,0.071097,0.050943,-0.004818, 0,0,1,0.062416,0.050026,-0.004818, 0.00704,-0.002287,0.999973,0.071097,0.050943,-0.004818, 0,0,1,0.063137,0.050493,-0.004818, 0,0,1,0.063137,0.050493,-0.004818, 0.00704,-0.002287,0.999973,0.071097,0.050943,-0.004818, 0,0,1,0.063888,0.051003,-0.004818, 0,0,1,0.063888,0.051003,-0.004818, 0.00704,-0.002287,0.999973,0.071097,0.050943,-0.004818, 0.00717,-0.001841,0.999973,0.071377,0.051908,-0.004818, 0,0,1,0.063888,0.051003,-0.004818, 0.00717,-0.001841,0.999973,0.071377,0.051908,-0.004818, 0,0,1,0.064596,0.051576,-0.004818, 0,0,1,0.064596,0.051576,-0.004818, 0.00717,-0.001841,0.999973,0.071377,0.051908,-0.004818, 0,0,1,0.065254,0.052206,-0.004818, 0,0,1,0.065254,0.052206,-0.004818, 0.00717,-0.001841,0.999973,0.071377,0.051908,-0.004818, 0.007271,-0.001387,0.999973,0.071597,0.052888,-0.004818, 0,0,1,0.065254,0.052206,-0.004818, 0.007271,-0.001387,0.999973,0.071597,0.052888,-0.004818, 0,0,1,0.065859,0.05289,-0.004818, 0,0,1,0.065859,0.05289,-0.004818, 0.007271,-0.001387,0.999973,0.071597,0.052888,-0.004818, 0.007344,-0.000928,0.999973,0.071754,0.053881,-0.004818, 0,0,1,0.065859,0.05289,-0.004818, 0.007344,-0.000928,0.999973,0.071754,0.053881,-0.004818, 0,0,1,0.066406,0.053623,-0.004818, 0,0,1,0.066406,0.053623,-0.004818, 0.007344,-0.000928,0.999973,0.071754,0.053881,-0.004818, 0,0,1,0.066892,0.054399,-0.004818, 0,0,1,0.066892,0.054399,-0.004818, 0.007344,-0.000928,0.999973,0.071754,0.053881,-0.004818, 0.007388,-0.000465,0.999973,0.071848,0.054881,-0.004818, 0,0,1,0.066892,0.054399,-0.004818, 0.007388,-0.000465,0.999973,0.071848,0.054881,-0.004818, 0,0,1,0.067313,0.055214,-0.004818, 0,0,1,0.067313,0.055214,-0.004818, 0.007388,-0.000465,0.999973,0.071848,0.054881,-0.004818, 0.007402,0,0.999973,0.07188,0.055885,-0.004818, 0,0,1,0.067313,0.055214,-0.004818, 0.007402,0,0.999973,0.07188,0.055885,-0.004818, 0,0,1,0.067666,0.056061,-0.004818, 0,0,1,0.067666,0.056061,-0.004818, 0.007402,0,0.999973,0.07188,0.055885,-0.004818, 0.007388,0.000465,0.999973,0.071848,0.05689,-0.004818, 0,0,1,0.067666,0.056061,-0.004818, 0.007388,0.000465,0.999973,0.071848,0.05689,-0.004818, 0,0,1,0.067949,0.056936,-0.004818, 0,0,1,0.067949,0.056936,-0.004818, 0.007388,0.000465,0.999973,0.071848,0.05689,-0.004818, 0.007344,0.000928,0.999973,0.071754,0.05789,-0.004818, 0,0,1,0.067949,0.056936,-0.004818, 0.007344,0.000928,0.999973,0.071754,0.05789,-0.004818, 0,0,1,0.068161,0.057831,-0.004818, 0,0,1,0.068161,0.057831,-0.004818, 0.007344,0.000928,0.999973,0.071754,0.05789,-0.004818, 0,0,1,0.068298,0.058741,-0.004818, 0,0,1,0.068298,0.058741,-0.004818, 0.007344,0.000928,0.999973,0.071754,0.05789,-0.004818, 0.007271,0.001387,0.999973,0.071597,0.058882,-0.004818, 0,0,1,0.068298,0.058741,-0.004818, 0.007271,0.001387,0.999973,0.071597,0.058882,-0.004818, 0,0,1,0.068362,0.05966,-0.004818, 0,0,1,0.068362,0.05966,-0.004818, 0.007271,0.001387,0.999973,0.071597,0.058882,-0.004818, 0.00717,0.001841,0.999973,0.071377,0.059863,-0.004818, 0,0,1,0.068362,0.05966,-0.004818, 0.00717,0.001841,0.999973,0.071377,0.059863,-0.004818, 0,0,1,0.068281,0.061186,-0.004818, 0,0,1,0.068281,0.061186,-0.004818, 0.00717,0.001841,0.999973,0.071377,0.059863,-0.004818, 0.00704,0.002287,0.999973,0.071097,0.060828,-0.004818, 0,0,1,0.068281,0.061186,-0.004818, 0.00704,0.002287,0.999973,0.071097,0.060828,-0.004818, 0.006883,0.002725,0.999973,0.070757,0.061773,-0.004818, 0,0,1,0.068281,0.061186,-0.004818, 0.006883,0.002725,0.999973,0.070757,0.061773,-0.004818, 0,0,1,0.067873,0.062655,-0.004818, 0,0,1,0.067873,0.062655,-0.004818, 0.006883,0.002725,0.999973,0.070757,0.061773,-0.004818, 0.006698,0.003152,0.999973,0.070358,0.062696,-0.004818, 0,0,1,0.067873,0.062655,-0.004818, 0.006698,0.003152,0.999973,0.070358,0.062696,-0.004818, 0,0,1,0.067158,0.063997,-0.004818, 0,0,1,0.067158,0.063997,-0.004818, 0.006698,0.003152,0.999973,0.070358,0.062696,-0.004818, 0.006487,0.003566,0.999973,0.069902,0.063591,-0.004818, 0,0,1,0.067158,0.063997,-0.004818, 0.006487,0.003566,0.999973,0.069902,0.063591,-0.004818, 0.00625,0.003966,0.999973,0.06939,0.064456,-0.004818, 0,0,1,0.067158,0.063997,-0.004818, 0.00625,0.003966,0.999973,0.06939,0.064456,-0.004818, 0,0,1,0.06617,0.065145,-0.004818, 0,0,1,0.06617,0.065145,-0.004818, 0.00625,0.003966,0.999973,0.06939,0.064456,-0.004818, 0.005989,0.004351,0.999973,0.068825,0.065287,-0.004818, 0,0,1,0.06617,0.065145,-0.004818, 0.005989,0.004351,0.999973,0.068825,0.065287,-0.004818, 0,0,1,0.064959,0.066043,-0.004818, 0,0,1,0.064959,0.066043,-0.004818, 0.005989,0.004351,0.999973,0.068825,0.065287,-0.004818, 0.005704,0.004718,0.999973,0.06821,0.066081,-0.004818, 0,0,1,0.064959,0.066043,-0.004818, 0.005704,0.004718,0.999973,0.06821,0.066081,-0.004818, 0,0,1,0.063583,0.066646,-0.004818, 0,0,1,0.063583,0.066646,-0.004818, 0.005704,0.004718,0.999973,0.06821,0.066081,-0.004818, 0.005396,0.005067,0.999973,0.067545,0.066834,-0.004818, 0,0,1,0.063583,0.066646,-0.004818, 0.005396,0.005067,0.999973,0.067545,0.066834,-0.004818, 0,0,1,0.06211,0.066926,-0.004818, 0,0,1,0.06211,0.066926,-0.004818, 0.005396,0.005067,0.999973,0.067545,0.066834,-0.004818, 0.005067,0.005396,0.999973,0.066834,0.067545,-0.004818, 0,0,1,0.06211,0.066926,-0.004818, 0.005067,0.005396,0.999973,0.066834,0.067545,-0.004818, -0.005067,0.005396,0.999973,0.044936,0.067545,-0.004818, -0.005067,0.005396,0.999973,0.044936,0.067545,-0.004818, 0.005067,0.005396,0.999973,0.066834,0.067545,-0.004818, -0.004718,0.005704,0.999973,0.04569,0.06821,-0.004818, -0.004718,0.005704,0.999973,0.04569,0.06821,-0.004818, 0.005067,0.005396,0.999973,0.066834,0.067545,-0.004818, 0.004718,0.005704,0.999973,0.066081,0.06821,-0.004818, -0.004718,0.005704,0.999973,0.04569,0.06821,-0.004818, 0.004718,0.005704,0.999973,0.066081,0.06821,-0.004818, -0.004351,0.005989,0.999973,0.046484,0.068825,-0.004818, -0.004351,0.005989,0.999973,0.046484,0.068825,-0.004818, 0.004718,0.005704,0.999973,0.066081,0.06821,-0.004818, 0.004351,0.005989,0.999973,0.065287,0.068825,-0.004818, -0.004351,0.005989,0.999973,0.046484,0.068825,-0.004818, 0.004351,0.005989,0.999973,0.065287,0.068825,-0.004818, -0.003966,0.00625,0.999973,0.047315,0.06939,-0.004818, -0.003966,0.00625,0.999973,0.047315,0.06939,-0.004818, 0.004351,0.005989,0.999973,0.065287,0.068825,-0.004818, 0.003966,0.00625,0.999973,0.064456,0.06939,-0.004818, -0.003966,0.00625,0.999973,0.047315,0.06939,-0.004818, 0.003966,0.00625,0.999973,0.064456,0.06939,-0.004818, -0.003566,0.006487,0.999973,0.04818,0.069902,-0.004818, -0.003566,0.006487,0.999973,0.04818,0.069902,-0.004818, 0.003966,0.00625,0.999973,0.064456,0.06939,-0.004818, 0.003566,0.006487,0.999973,0.063591,0.069902,-0.004818, -0.003566,0.006487,0.999973,0.04818,0.069902,-0.004818, 0.003566,0.006487,0.999973,0.063591,0.069902,-0.004818, 0.003152,0.006698,0.999973,0.062696,0.070358,-0.004818, -0.003566,0.006487,0.999973,0.04818,0.069902,-0.004818, 0.003152,0.006698,0.999973,0.062696,0.070358,-0.004818, -0.003152,0.006698,0.999973,0.049075,0.070358,-0.004818, -0.003152,0.006698,0.999973,0.049075,0.070358,-0.004818, 0.003152,0.006698,0.999973,0.062696,0.070358,-0.004818, -0.002725,0.006883,0.999973,0.049997,0.070757,-0.004818, -0.002725,0.006883,0.999973,0.049997,0.070757,-0.004818, 0.003152,0.006698,0.999973,0.062696,0.070358,-0.004818, 0.002725,0.006883,0.999973,0.061773,0.070757,-0.004818, -0.002725,0.006883,0.999973,0.049997,0.070757,-0.004818, 0.002725,0.006883,0.999973,0.061773,0.070757,-0.004818, -0.002287,0.00704,0.999973,0.050943,0.071097,-0.004818, -0.002287,0.00704,0.999973,0.050943,0.071097,-0.004818, 0.002725,0.006883,0.999973,0.061773,0.070757,-0.004818, 0.002287,0.00704,0.999973,0.060828,0.071097,-0.004818, -0.002287,0.00704,0.999973,0.050943,0.071097,-0.004818, 0.002287,0.00704,0.999973,0.060828,0.071097,-0.004818, -0.001841,0.00717,0.999973,0.051908,0.071377,-0.004818, -0.001841,0.00717,0.999973,0.051908,0.071377,-0.004818, 0.002287,0.00704,0.999973,0.060828,0.071097,-0.004818, 0.001841,0.00717,0.999973,0.059863,0.071377,-0.004818, -0.001841,0.00717,0.999973,0.051908,0.071377,-0.004818, 0.001841,0.00717,0.999973,0.059863,0.071377,-0.004818, 0.001387,0.007271,0.999973,0.058882,0.071597,-0.004818, -0.001841,0.00717,0.999973,0.051908,0.071377,-0.004818, 0.001387,0.007271,0.999973,0.058882,0.071597,-0.004818, -0.001387,0.007271,0.999973,0.052888,0.071597,-0.004818, -0.001387,0.007271,0.999973,0.052888,0.071597,-0.004818, 0.001387,0.007271,0.999973,0.058882,0.071597,-0.004818, -0.000928,0.007344,0.999973,0.053881,0.071754,-0.004818, -0.000928,0.007344,0.999973,0.053881,0.071754,-0.004818, 0.001387,0.007271,0.999973,0.058882,0.071597,-0.004818, 0.000928,0.007344,0.999973,0.05789,0.071754,-0.004818, -0.000928,0.007344,0.999973,0.053881,0.071754,-0.004818, 0.000928,0.007344,0.999973,0.05789,0.071754,-0.004818, -0.000465,0.007388,0.999973,0.054881,0.071848,-0.004818, -0.000465,0.007388,0.999973,0.054881,0.071848,-0.004818, 0.000928,0.007344,0.999973,0.05789,0.071754,-0.004818, 0.000465,0.007388,0.999973,0.05689,0.071848,-0.004818, -0.000465,0.007388,0.999973,0.054881,0.071848,-0.004818, 0.000465,0.007388,0.999973,0.05689,0.071848,-0.004818, 0,0.007402,0.999973,0.055885,0.07188,-0.004818, -0.005067,0.005396,0.999973,0.044936,0.067545,-0.004818, 0,0,1,0.04966,0.066926,-0.004818, 0,0,1,0.06211,0.066926,-0.004818, -0.005396,0.005067,0.999973,0.044226,0.066834,-0.004818, 0,0,1,0.04966,0.066926,-0.004818, -0.005067,0.005396,0.999973,0.044936,0.067545,-0.004818, -0.005396,0.005067,0.999973,0.044226,0.066834,-0.004818, 0,0,1,0.048188,0.066646,-0.004818, 0,0,1,0.04966,0.066926,-0.004818, -0.005704,0.004718,0.999973,0.043561,0.066081,-0.004818, 0,0,1,0.048188,0.066646,-0.004818, -0.005396,0.005067,0.999973,0.044226,0.066834,-0.004818, -0.005704,0.004718,0.999973,0.043561,0.066081,-0.004818, 0,0,1,0.046812,0.066043,-0.004818, 0,0,1,0.048188,0.066646,-0.004818, -0.005989,0.004351,0.999973,0.042945,0.065287,-0.004818, 0,0,1,0.046812,0.066043,-0.004818, -0.005704,0.004718,0.999973,0.043561,0.066081,-0.004818, -0.005989,0.004351,0.999973,0.042945,0.065287,-0.004818, 0,0,1,0.0456,0.065145,-0.004818, 0,0,1,0.046812,0.066043,-0.004818, -0.00625,0.003966,0.999973,0.042381,0.064456,-0.004818, 0,0,1,0.0456,0.065145,-0.004818, -0.005989,0.004351,0.999973,0.042945,0.065287,-0.004818, -0.00625,0.003966,0.999973,0.042381,0.064456,-0.004818, 0,0,1,0.044613,0.063997,-0.004818, 0,0,1,0.0456,0.065145,-0.004818, -0.006487,0.003566,0.999973,0.041869,0.063591,-0.004818, 0,0,1,0.044613,0.063997,-0.004818, -0.00625,0.003966,0.999973,0.042381,0.064456,-0.004818, 0,0,1,0.04966,0.066926,-0.004818, 0,0,1,0.060613,0.066867,-0.004818, 0,0,1,0.06211,0.066926,-0.004818, 0,0,1,0.051157,0.066867,-0.004818, 0,0,1,0.060613,0.066867,-0.004818, 0,0,1,0.04966,0.066926,-0.004818, 0,0,1,0.051157,0.066867,-0.004818, 0,0,1,0.059165,0.066474,-0.004818, 0,0,1,0.060613,0.066867,-0.004818, 0,0,1,0.052605,0.066474,-0.004818, 0,0,1,0.059165,0.066474,-0.004818, 0,0,1,0.051157,0.066867,-0.004818, 0,0,1,0.052605,0.066474,-0.004818, 0,0,1,0.057837,0.065766,-0.004818, 0,0,1,0.059165,0.066474,-0.004818, 0,0,1,0.053934,0.065766,-0.004818, 0,0,1,0.057837,0.065766,-0.004818, 0,0,1,0.052605,0.066474,-0.004818, 0,0,1,0.053934,0.065766,-0.004818, 0,0,1,0.056739,0.064761,-0.004818, 0,0,1,0.057837,0.065766,-0.004818, 0,0,1,0.055031,0.064761,-0.004818, 0,0,1,0.056739,0.064761,-0.004818, 0,0,1,0.053934,0.065766,-0.004818, 0,0,1,0.056739,0.064761,-0.004818, 0,0,1,0.055031,0.064761,-0.004818, 0,0,1,0.055885,0.063727,-0.004818, -0.929776,-0.368125,0,0.03976,0.049501,-0.007708, -0.929762,-0.368119,0.005552,0.03976,0.049501,-0.006167, -0.951042,-0.309012,0.005552,0.03939,0.050526,-0.006167, -0.929776,-0.368125,0,0.03976,0.049501,-0.007708, -0.951042,-0.309012,0.005552,0.03939,0.050526,-0.006167, -0.951057,-0.309017,0,0.03939,0.050526,-0.007708, -0.904827,-0.425779,0,0.040192,0.048501,-0.007708, -0.904813,-0.425773,0.005552,0.040192,0.048501,-0.006167, -0.929762,-0.368119,0.005552,0.03976,0.049501,-0.006167, -0.904827,-0.425779,0,0.040192,0.048501,-0.007708, -0.929762,-0.368119,0.005552,0.03976,0.049501,-0.006167, -0.929776,-0.368125,0,0.03976,0.049501,-0.007708, -0.876307,-0.481754,0,0.040687,0.04753,-0.007708, -0.876293,-0.481746,0.005552,0.040687,0.04753,-0.006167, -0.904813,-0.425773,0.005552,0.040192,0.048501,-0.006167, -0.876307,-0.481754,0,0.040687,0.04753,-0.007708, -0.904813,-0.425773,0.005552,0.040192,0.048501,-0.006167, -0.904827,-0.425779,0,0.040192,0.048501,-0.007708, -0.844328,-0.535827,0,0.041241,0.046592,-0.007708, -0.844315,-0.535819,0.005552,0.041241,0.046592,-0.006167, -0.876293,-0.481746,0.005552,0.040687,0.04753,-0.006167, -0.844328,-0.535827,0,0.041241,0.046592,-0.007708, -0.876293,-0.481746,0.005552,0.040687,0.04753,-0.006167, -0.876307,-0.481754,0,0.040687,0.04753,-0.007708, -0.844328,-0.535827,0,0.041241,0.046592,-0.007708, -0.876307,-0.481754,0,0.040687,0.04753,-0.007708, -0.860742,-0.509041,0,0.040845,0.047263,-0.007708, -0.844328,-0.535827,0,0.041241,0.046592,-0.007708, -0.860742,-0.509041,0,0.040845,0.047263,-0.007708, -0.860742,-0.509041,0,0.040904,0.047163,-0.007708, -0.809017,-0.587785,0,0.041854,0.045691,-0.007708, -0.809005,-0.587776,0.005552,0.041854,0.045691,-0.006167, -0.844315,-0.535819,0.005552,0.041241,0.046592,-0.006167, -0.809017,-0.587785,0,0.041854,0.045691,-0.007708, -0.844315,-0.535819,0.005552,0.041241,0.046592,-0.006167, -0.844328,-0.535827,0,0.041241,0.046592,-0.007708, -0.770513,-0.637424,0,0.042522,0.04483,-0.007708, -0.770501,-0.637414,0.005552,0.042522,0.04483,-0.006167, -0.809005,-0.587776,0.005552,0.041854,0.045691,-0.006167, -0.770513,-0.637424,0,0.042522,0.04483,-0.007708, -0.809005,-0.587776,0.005552,0.041854,0.045691,-0.006167, -0.809017,-0.587785,0,0.041854,0.045691,-0.007708, -0.728969,-0.684547,0,0.043242,0.044013,-0.007708, -0.728957,-0.684537,0.005552,0.043242,0.044013,-0.006167, -0.770501,-0.637414,0.005552,0.042522,0.04483,-0.006167, -0.728969,-0.684547,0,0.043242,0.044013,-0.007708, -0.770501,-0.637414,0.005552,0.042522,0.04483,-0.006167, -0.770513,-0.637424,0,0.042522,0.04483,-0.007708, -0.684547,-0.728969,0,0.044013,0.043242,-0.007708, -0.684537,-0.728957,0.005552,0.044013,0.043242,-0.006167, -0.728957,-0.684537,0.005552,0.043242,0.044013,-0.006167, -0.684547,-0.728969,0,0.044013,0.043242,-0.007708, -0.728957,-0.684537,0.005552,0.043242,0.044013,-0.006167, -0.728969,-0.684547,0,0.043242,0.044013,-0.007708, -0.684547,-0.728969,0,0.044013,0.043242,-0.007708, -0.728969,-0.684547,0,0.043242,0.044013,-0.007708, -0.707107,-0.707107,0,0.043581,0.043673,-0.007708, -0.684547,-0.728969,0,0.044013,0.043242,-0.007708, -0.707107,-0.707107,0,0.043581,0.043673,-0.007708, -0.707107,-0.707107,0,0.043673,0.043581,-0.007708, -0.637424,-0.770513,0,0.04483,0.042522,-0.007708, -0.637414,-0.770501,0.005552,0.04483,0.042522,-0.006167, -0.684537,-0.728957,0.005552,0.044013,0.043242,-0.006167, -0.637424,-0.770513,0,0.04483,0.042522,-0.007708, -0.684537,-0.728957,0.005552,0.044013,0.043242,-0.006167, -0.684547,-0.728969,0,0.044013,0.043242,-0.007708, -0.587785,-0.809017,0,0.045691,0.041854,-0.007708, -0.587776,-0.809005,0.005552,0.045691,0.041854,-0.006167, -0.637414,-0.770501,0.005552,0.04483,0.042522,-0.006167, -0.587785,-0.809017,0,0.045691,0.041854,-0.007708, -0.637414,-0.770501,0.005552,0.04483,0.042522,-0.006167, -0.637424,-0.770513,0,0.04483,0.042522,-0.007708, -0.535827,-0.844328,0,0.046592,0.041241,-0.007708, -0.535819,-0.844315,0.005552,0.046592,0.041241,-0.006167, -0.587776,-0.809005,0.005552,0.045691,0.041854,-0.006167, -0.535827,-0.844328,0,0.046592,0.041241,-0.007708, -0.587776,-0.809005,0.005552,0.045691,0.041854,-0.006167, -0.587785,-0.809017,0,0.045691,0.041854,-0.007708, -0.481754,-0.876307,0,0.04753,0.040687,-0.007708, -0.481746,-0.876293,0.005552,0.04753,0.040687,-0.006167, -0.535819,-0.844315,0.005552,0.046592,0.041241,-0.006167, -0.481754,-0.876307,0,0.04753,0.040687,-0.007708, -0.535819,-0.844315,0.005552,0.046592,0.041241,-0.006167, -0.535827,-0.844328,0,0.046592,0.041241,-0.007708, -0.481754,-0.876307,0,0.04753,0.040687,-0.007708, -0.535827,-0.844328,0,0.046592,0.041241,-0.007708, -0.509041,-0.860742,0,0.047163,0.040904,-0.007708, -0.481754,-0.876307,0,0.04753,0.040687,-0.007708, -0.509041,-0.860742,0,0.047163,0.040904,-0.007708, -0.509041,-0.860742,0,0.047263,0.040845,-0.007708, -0.425779,-0.904827,0,0.048501,0.040192,-0.007708, -0.425773,-0.904813,0.005552,0.048501,0.040192,-0.006167, -0.481746,-0.876293,0.005552,0.04753,0.040687,-0.006167, -0.425779,-0.904827,0,0.048501,0.040192,-0.007708, -0.481746,-0.876293,0.005552,0.04753,0.040687,-0.006167, -0.481754,-0.876307,0,0.04753,0.040687,-0.007708, -0.368125,-0.929776,0,0.049501,0.03976,-0.007708, -0.368119,-0.929762,0.005552,0.049501,0.03976,-0.006167, -0.425773,-0.904813,0.005552,0.048501,0.040192,-0.006167, -0.368125,-0.929776,0,0.049501,0.03976,-0.007708, -0.425773,-0.904813,0.005552,0.048501,0.040192,-0.006167, -0.425779,-0.904827,0,0.048501,0.040192,-0.007708, -0.309017,-0.951057,0,0.050526,0.03939,-0.007708, -0.309012,-0.951042,0.005552,0.050526,0.03939,-0.006167, -0.368119,-0.929762,0.005552,0.049501,0.03976,-0.006167, -0.309017,-0.951057,0,0.050526,0.03939,-0.007708, -0.368119,-0.929762,0.005552,0.049501,0.03976,-0.006167, -0.368125,-0.929776,0,0.049501,0.03976,-0.007708, -0.24869,-0.968583,0,0.051572,0.039087,-0.007708, -0.248686,-0.968568,0.005552,0.051572,0.039087,-0.006167, -0.309012,-0.951042,0.005552,0.050526,0.03939,-0.006167, -0.24869,-0.968583,0,0.051572,0.039087,-0.007708, -0.309012,-0.951042,0.005552,0.050526,0.03939,-0.006167, -0.309017,-0.951057,0,0.050526,0.03939,-0.007708, -0.24869,-0.968583,0,0.051572,0.039087,-0.007708, -0.309017,-0.951057,0,0.050526,0.03939,-0.007708, -0.278991,-0.960294,0,0.051356,0.039149,-0.007708, -0.24869,-0.968583,0,0.051572,0.039087,-0.007708, -0.278991,-0.960294,0,0.051356,0.039149,-0.007708, -0.278991,-0.960294,0,0.051428,0.039128,-0.007708, -0.187381,-0.982287,0,0.052635,0.038849,-0.007708, -0.187378,-0.982272,0.005552,0.052635,0.038849,-0.006167, -0.248686,-0.968568,0.005552,0.051572,0.039087,-0.006167, -0.187381,-0.982287,0,0.052635,0.038849,-0.007708, -0.248686,-0.968568,0.005552,0.051572,0.039087,-0.006167, -0.24869,-0.968583,0,0.051572,0.039087,-0.007708, -0.125333,-0.992115,0,0.053712,0.038678,-0.007708, -0.125331,-0.992099,0.005552,0.053712,0.038678,-0.006167, -0.187378,-0.982272,0.005552,0.052635,0.038849,-0.006167, -0.125333,-0.992115,0,0.053712,0.038678,-0.007708, -0.187378,-0.982272,0.005552,0.052635,0.038849,-0.006167, -0.187381,-0.982287,0,0.052635,0.038849,-0.007708, -0.094108,-0.995562,0,0.054796,0.038576,-0.007708, -0.07324,-0.997287,0.007402,0.054796,0.038576,-0.006167, -0.125331,-0.992099,0.005552,0.053712,0.038678,-0.006167, -0.094108,-0.995562,0,0.054796,0.038576,-0.007708, -0.125331,-0.992099,0.005552,0.053712,0.038678,-0.006167, -0.125333,-0.992115,0,0.053712,0.038678,-0.007708, -0.951057,-0.309017,0,0.03939,0.050526,-0.007708, -0.951042,-0.309012,0.005552,0.03939,0.050526,-0.006167, -0.968568,-0.248686,0.005552,0.039087,0.051572,-0.006167, -0.951057,-0.309017,0,0.03939,0.050526,-0.007708, -0.968568,-0.248686,0.005552,0.039087,0.051572,-0.006167, -0.968583,-0.24869,0,0.039087,0.051572,-0.007708, -0.951057,-0.309017,0,0.03939,0.050526,-0.007708, -0.968583,-0.24869,0,0.039087,0.051572,-0.007708, -0.960294,-0.278991,0,0.039128,0.051428,-0.007708, -0.951057,-0.309017,0,0.03939,0.050526,-0.007708, -0.960294,-0.278991,0,0.039128,0.051428,-0.007708, -0.960294,-0.278991,0,0.039149,0.051356,-0.007708, -0.968583,-0.24869,0,0.039087,0.051572,-0.007708, -0.968568,-0.248686,0.005552,0.039087,0.051572,-0.006167, -0.982272,-0.187378,0.005552,0.038849,0.052635,-0.006167, -0.968583,-0.24869,0,0.039087,0.051572,-0.007708, -0.982272,-0.187378,0.005552,0.038849,0.052635,-0.006167, -0.982287,-0.187381,0,0.038849,0.052635,-0.007708, -0.982287,-0.187381,0,0.038849,0.052635,-0.007708, -0.982272,-0.187378,0.005552,0.038849,0.052635,-0.006167, -0.992099,-0.125331,0.005552,0.038678,0.053712,-0.006167, -0.982287,-0.187381,0,0.038849,0.052635,-0.007708, -0.992099,-0.125331,0.005552,0.038678,0.053712,-0.006167, -0.992115,-0.125333,0,0.038678,0.053712,-0.007708, -0.992115,-0.125333,0,0.038678,0.053712,-0.007708, -0.992099,-0.125331,0.005552,0.038678,0.053712,-0.006167, -0.997287,-0.07324,0.007402,0.038576,0.054796,-0.006167, -0.992115,-0.125333,0,0.038678,0.053712,-0.007708, -0.997287,-0.07324,0.007402,0.038576,0.054796,-0.006167, -0.995562,-0.094108,0,0.038576,0.054796,-0.007708, -0.995562,0.094108,0,0.038576,0.056974,-0.007708, -0.997287,0.07324,0.007402,0.038576,0.056974,-0.006167, -0.992099,0.125331,0.005552,0.038678,0.058059,-0.006167, -0.995562,0.094108,0,0.038576,0.056974,-0.007708, -0.992099,0.125331,0.005552,0.038678,0.058059,-0.006167, -0.992115,0.125333,0,0.038678,0.058059,-0.007708, -0.992115,0.125333,0,0.038678,0.058059,-0.007708, -0.992099,0.125331,0.005552,0.038678,0.058059,-0.006167, -0.982272,0.187378,0.005552,0.038849,0.059135,-0.006167, -0.992115,0.125333,0,0.038678,0.058059,-0.007708, -0.982272,0.187378,0.005552,0.038849,0.059135,-0.006167, -0.982287,0.187381,0,0.038849,0.059135,-0.007708, -0.982287,0.187381,0,0.038849,0.059135,-0.007708, -0.982272,0.187378,0.005552,0.038849,0.059135,-0.006167, -0.968568,0.248686,0.005552,0.039087,0.060198,-0.006167, -0.982287,0.187381,0,0.038849,0.059135,-0.007708, -0.968568,0.248686,0.005552,0.039087,0.060198,-0.006167, -0.968583,0.24869,0,0.039087,0.060198,-0.007708, -0.968583,0.24869,0,0.039087,0.060198,-0.007708, -0.968568,0.248686,0.005552,0.039087,0.060198,-0.006167, -0.951042,0.309012,0.005552,0.03939,0.061245,-0.006167, -0.968583,0.24869,0,0.039087,0.060198,-0.007708, -0.951042,0.309012,0.005552,0.03939,0.061245,-0.006167, -0.951057,0.309017,0,0.03939,0.061245,-0.007708, -0.968583,0.24869,0,0.039087,0.060198,-0.007708, -0.951057,0.309017,0,0.03939,0.061245,-0.007708, -0.960294,0.278991,0,0.039149,0.060414,-0.007708, -0.968583,0.24869,0,0.039087,0.060198,-0.007708, -0.960294,0.278991,0,0.039149,0.060414,-0.007708, -0.960294,0.278991,0,0.039128,0.060343,-0.007708, -0.951057,0.309017,0,0.03939,0.061245,-0.007708, -0.951042,0.309012,0.005552,0.03939,0.061245,-0.006167, -0.929762,0.368119,0.005552,0.03976,0.06227,-0.006167, -0.951057,0.309017,0,0.03939,0.061245,-0.007708, -0.929762,0.368119,0.005552,0.03976,0.06227,-0.006167, -0.929776,0.368125,0,0.03976,0.06227,-0.007708, -0.929776,0.368125,0,0.03976,0.06227,-0.007708, -0.929762,0.368119,0.005552,0.03976,0.06227,-0.006167, -0.904813,0.425773,0.005552,0.040192,0.06327,-0.006167, -0.929776,0.368125,0,0.03976,0.06227,-0.007708, -0.904813,0.425773,0.005552,0.040192,0.06327,-0.006167, -0.904827,0.425779,0,0.040192,0.06327,-0.007708, -0.904827,0.425779,0,0.040192,0.06327,-0.007708, -0.904813,0.425773,0.005552,0.040192,0.06327,-0.006167, -0.876293,0.481746,0.005552,0.040687,0.064241,-0.006167, -0.904827,0.425779,0,0.040192,0.06327,-0.007708, -0.876293,0.481746,0.005552,0.040687,0.064241,-0.006167, -0.876307,0.481754,0,0.040687,0.064241,-0.007708, -0.876307,0.481754,0,0.040687,0.064241,-0.007708, -0.876293,0.481746,0.005552,0.040687,0.064241,-0.006167, -0.844315,0.535819,0.005552,0.041241,0.065178,-0.006167, -0.876307,0.481754,0,0.040687,0.064241,-0.007708, -0.844315,0.535819,0.005552,0.041241,0.065178,-0.006167, -0.844328,0.535827,0,0.041241,0.065178,-0.007708, -0.876307,0.481754,0,0.040687,0.064241,-0.007708, -0.844328,0.535827,0,0.041241,0.065178,-0.007708, -0.860742,0.509041,0,0.040904,0.064607,-0.007708, -0.876307,0.481754,0,0.040687,0.064241,-0.007708, -0.860742,0.509041,0,0.040904,0.064607,-0.007708, -0.860742,0.509041,0,0.040845,0.064507,-0.007708, -0.844328,0.535827,0,0.041241,0.065178,-0.007708, -0.844315,0.535819,0.005552,0.041241,0.065178,-0.006167, -0.809005,0.587776,0.005552,0.041854,0.06608,-0.006167, -0.844328,0.535827,0,0.041241,0.065178,-0.007708, -0.809005,0.587776,0.005552,0.041854,0.06608,-0.006167, -0.809017,0.587785,0,0.041854,0.06608,-0.007708, -0.809017,0.587785,0,0.041854,0.06608,-0.007708, -0.809005,0.587776,0.005552,0.041854,0.06608,-0.006167, -0.770501,0.637414,0.005552,0.042522,0.066941,-0.006167, -0.809017,0.587785,0,0.041854,0.06608,-0.007708, -0.770501,0.637414,0.005552,0.042522,0.066941,-0.006167, -0.770513,0.637424,0,0.042522,0.066941,-0.007708, -0.770513,0.637424,0,0.042522,0.066941,-0.007708, -0.770501,0.637414,0.005552,0.042522,0.066941,-0.006167, -0.728957,0.684537,0.005552,0.043242,0.067758,-0.006167, -0.770513,0.637424,0,0.042522,0.066941,-0.007708, -0.728957,0.684537,0.005552,0.043242,0.067758,-0.006167, -0.728969,0.684547,0,0.043242,0.067758,-0.007708, -0.728969,0.684547,0,0.043242,0.067758,-0.007708, -0.728957,0.684537,0.005552,0.043242,0.067758,-0.006167, -0.684537,0.728957,0.005552,0.044013,0.068528,-0.006167, -0.728969,0.684547,0,0.043242,0.067758,-0.007708, -0.684537,0.728957,0.005552,0.044013,0.068528,-0.006167, -0.684547,0.728969,0,0.044013,0.068528,-0.007708, -0.728969,0.684547,0,0.043242,0.067758,-0.007708, -0.684547,0.728969,0,0.044013,0.068528,-0.007708, -0.707107,0.707107,0,0.043673,0.068189,-0.007708, -0.728969,0.684547,0,0.043242,0.067758,-0.007708, -0.707107,0.707107,0,0.043673,0.068189,-0.007708, -0.707107,0.707107,0,0.043581,0.068097,-0.007708, -0.684547,0.728969,0,0.044013,0.068528,-0.007708, -0.684537,0.728957,0.005552,0.044013,0.068528,-0.006167, -0.637414,0.770501,0.005552,0.04483,0.069249,-0.006167, -0.684547,0.728969,0,0.044013,0.068528,-0.007708, -0.637414,0.770501,0.005552,0.04483,0.069249,-0.006167, -0.637424,0.770513,0,0.04483,0.069249,-0.007708, -0.637424,0.770513,0,0.04483,0.069249,-0.007708, -0.637414,0.770501,0.005552,0.04483,0.069249,-0.006167, -0.587776,0.809005,0.005552,0.045691,0.069917,-0.006167, -0.637424,0.770513,0,0.04483,0.069249,-0.007708, -0.587776,0.809005,0.005552,0.045691,0.069917,-0.006167, -0.587785,0.809017,0,0.045691,0.069917,-0.007708, -0.587785,0.809017,0,0.045691,0.069917,-0.007708, -0.587776,0.809005,0.005552,0.045691,0.069917,-0.006167, -0.535819,0.844315,0.005552,0.046592,0.070529,-0.006167, -0.587785,0.809017,0,0.045691,0.069917,-0.007708, -0.535819,0.844315,0.005552,0.046592,0.070529,-0.006167, -0.535827,0.844328,0,0.046592,0.070529,-0.007708, -0.535827,0.844328,0,0.046592,0.070529,-0.007708, -0.535819,0.844315,0.005552,0.046592,0.070529,-0.006167, -0.481746,0.876293,0.005552,0.04753,0.071084,-0.006167, -0.535827,0.844328,0,0.046592,0.070529,-0.007708, -0.481746,0.876293,0.005552,0.04753,0.071084,-0.006167, -0.481754,0.876307,0,0.04753,0.071084,-0.007708, -0.535827,0.844328,0,0.046592,0.070529,-0.007708, -0.481754,0.876307,0,0.04753,0.071084,-0.007708, -0.509041,0.860742,0,0.047263,0.070926,-0.007708, -0.535827,0.844328,0,0.046592,0.070529,-0.007708, -0.509041,0.860742,0,0.047263,0.070926,-0.007708, -0.509041,0.860742,0,0.047163,0.070867,-0.007708, -0.481754,0.876307,0,0.04753,0.071084,-0.007708, -0.481746,0.876293,0.005552,0.04753,0.071084,-0.006167, -0.425773,0.904813,0.005552,0.048501,0.071578,-0.006167, -0.481754,0.876307,0,0.04753,0.071084,-0.007708, -0.425773,0.904813,0.005552,0.048501,0.071578,-0.006167, -0.425779,0.904827,0,0.048501,0.071578,-0.007708, -0.425779,0.904827,0,0.048501,0.071578,-0.007708, -0.425773,0.904813,0.005552,0.048501,0.071578,-0.006167, -0.368119,0.929762,0.005552,0.049501,0.072011,-0.006167, -0.425779,0.904827,0,0.048501,0.071578,-0.007708, -0.368119,0.929762,0.005552,0.049501,0.072011,-0.006167, -0.368125,0.929776,0,0.049501,0.072011,-0.007708, -0.368125,0.929776,0,0.049501,0.072011,-0.007708, -0.368119,0.929762,0.005552,0.049501,0.072011,-0.006167, -0.309012,0.951042,0.005552,0.050526,0.07238,-0.006167, -0.368125,0.929776,0,0.049501,0.072011,-0.007708, -0.309012,0.951042,0.005552,0.050526,0.07238,-0.006167, -0.309017,0.951057,0,0.050526,0.07238,-0.007708, -0.309017,0.951057,0,0.050526,0.07238,-0.007708, -0.309012,0.951042,0.005552,0.050526,0.07238,-0.006167, -0.248686,0.968568,0.005552,0.051572,0.072684,-0.006167, -0.309017,0.951057,0,0.050526,0.07238,-0.007708, -0.248686,0.968568,0.005552,0.051572,0.072684,-0.006167, -0.24869,0.968583,0,0.051572,0.072684,-0.007708, -0.309017,0.951057,0,0.050526,0.07238,-0.007708, -0.24869,0.968583,0,0.051572,0.072684,-0.007708, -0.278991,0.960294,0,0.051428,0.072642,-0.007708, -0.309017,0.951057,0,0.050526,0.07238,-0.007708, -0.278991,0.960294,0,0.051428,0.072642,-0.007708, -0.278991,0.960294,0,0.051356,0.072621,-0.007708, -0.24869,0.968583,0,0.051572,0.072684,-0.007708, -0.248686,0.968568,0.005552,0.051572,0.072684,-0.006167, -0.187378,0.982272,0.005552,0.052635,0.072922,-0.006167, -0.24869,0.968583,0,0.051572,0.072684,-0.007708, -0.187378,0.982272,0.005552,0.052635,0.072922,-0.006167, -0.187381,0.982287,0,0.052635,0.072922,-0.007708, -0.187381,0.982287,0,0.052635,0.072922,-0.007708, -0.187378,0.982272,0.005552,0.052635,0.072922,-0.006167, -0.125331,0.992099,0.005552,0.053712,0.073092,-0.006167, -0.187381,0.982287,0,0.052635,0.072922,-0.007708, -0.125331,0.992099,0.005552,0.053712,0.073092,-0.006167, -0.125333,0.992115,0,0.053712,0.073092,-0.007708, -0.125333,0.992115,0,0.053712,0.073092,-0.007708, -0.125331,0.992099,0.005552,0.053712,0.073092,-0.006167, -0.07324,0.997287,0.007402,0.054796,0.073195,-0.006167, -0.125333,0.992115,0,0.053712,0.073092,-0.007708, -0.07324,0.997287,0.007402,0.054796,0.073195,-0.006167, -0.094108,0.995562,0,0.054796,0.073195,-0.007708, 0.094108,0.995562,0,0.056974,0.073195,-0.007708, 0.07324,0.997287,0.007402,0.056974,0.073195,-0.006167, 0.125331,0.992099,0.005552,0.058059,0.073092,-0.006167, 0.094108,0.995562,0,0.056974,0.073195,-0.007708, 0.125331,0.992099,0.005552,0.058059,0.073092,-0.006167, 0.125333,0.992115,0,0.058059,0.073092,-0.007708, 0.125333,0.992115,0,0.058059,0.073092,-0.007708, 0.125331,0.992099,0.005552,0.058059,0.073092,-0.006167, 0.187378,0.982272,0.005552,0.059135,0.072922,-0.006167, 0.125333,0.992115,0,0.058059,0.073092,-0.007708, 0.187378,0.982272,0.005552,0.059135,0.072922,-0.006167, 0.187381,0.982287,0,0.059135,0.072922,-0.007708, 0.187381,0.982287,0,0.059135,0.072922,-0.007708, 0.187378,0.982272,0.005552,0.059135,0.072922,-0.006167, 0.248686,0.968568,0.005552,0.060198,0.072684,-0.006167, 0.187381,0.982287,0,0.059135,0.072922,-0.007708, 0.248686,0.968568,0.005552,0.060198,0.072684,-0.006167, 0.24869,0.968583,0,0.060198,0.072684,-0.007708, 0.24869,0.968583,0,0.060198,0.072684,-0.007708, 0.248686,0.968568,0.005552,0.060198,0.072684,-0.006167, 0.309012,0.951042,0.005552,0.061245,0.07238,-0.006167, 0.24869,0.968583,0,0.060198,0.072684,-0.007708, 0.309012,0.951042,0.005552,0.061245,0.07238,-0.006167, 0.309017,0.951057,0,0.061245,0.07238,-0.007708, 0.24869,0.968583,0,0.060198,0.072684,-0.007708, 0.309017,0.951057,0,0.061245,0.07238,-0.007708, 0.278991,0.960294,0,0.060414,0.072621,-0.007708, 0.24869,0.968583,0,0.060198,0.072684,-0.007708, 0.278991,0.960294,0,0.060414,0.072621,-0.007708, 0.278991,0.960294,0,0.060343,0.072642,-0.007708, 0.309017,0.951057,0,0.061245,0.07238,-0.007708, 0.309012,0.951042,0.005552,0.061245,0.07238,-0.006167, 0.368119,0.929762,0.005552,0.06227,0.072011,-0.006167, 0.309017,0.951057,0,0.061245,0.07238,-0.007708, 0.368119,0.929762,0.005552,0.06227,0.072011,-0.006167, 0.368125,0.929776,0,0.06227,0.072011,-0.007708, 0.368125,0.929776,0,0.06227,0.072011,-0.007708, 0.368119,0.929762,0.005552,0.06227,0.072011,-0.006167, 0.425773,0.904813,0.005552,0.06327,0.071578,-0.006167, 0.368125,0.929776,0,0.06227,0.072011,-0.007708, 0.425773,0.904813,0.005552,0.06327,0.071578,-0.006167, 0.425779,0.904827,0,0.06327,0.071578,-0.007708, 0.425779,0.904827,0,0.06327,0.071578,-0.007708, 0.425773,0.904813,0.005552,0.06327,0.071578,-0.006167, 0.481746,0.876293,0.005552,0.064241,0.071084,-0.006167, 0.425779,0.904827,0,0.06327,0.071578,-0.007708, 0.481746,0.876293,0.005552,0.064241,0.071084,-0.006167, 0.481754,0.876307,0,0.064241,0.071084,-0.007708, 0.481754,0.876307,0,0.064241,0.071084,-0.007708, 0.481746,0.876293,0.005552,0.064241,0.071084,-0.006167, 0.535819,0.844315,0.005552,0.065178,0.070529,-0.006167, 0.481754,0.876307,0,0.064241,0.071084,-0.007708, 0.535819,0.844315,0.005552,0.065178,0.070529,-0.006167, 0.535827,0.844328,0,0.065178,0.070529,-0.007708, 0.481754,0.876307,0,0.064241,0.071084,-0.007708, 0.535827,0.844328,0,0.065178,0.070529,-0.007708, 0.509041,0.860742,0,0.064607,0.070867,-0.007708, 0.481754,0.876307,0,0.064241,0.071084,-0.007708, 0.509041,0.860742,0,0.064607,0.070867,-0.007708, 0.509041,0.860742,0,0.064507,0.070926,-0.007708, 0.535827,0.844328,0,0.065178,0.070529,-0.007708, 0.535819,0.844315,0.005552,0.065178,0.070529,-0.006167, 0.587776,0.809005,0.005552,0.06608,0.069917,-0.006167, 0.535827,0.844328,0,0.065178,0.070529,-0.007708, 0.587776,0.809005,0.005552,0.06608,0.069917,-0.006167, 0.587785,0.809017,0,0.06608,0.069917,-0.007708, 0.587785,0.809017,0,0.06608,0.069917,-0.007708, 0.587776,0.809005,0.005552,0.06608,0.069917,-0.006167, 0.637414,0.770501,0.005552,0.066941,0.069249,-0.006167, 0.587785,0.809017,0,0.06608,0.069917,-0.007708, 0.637414,0.770501,0.005552,0.066941,0.069249,-0.006167, 0.637424,0.770513,0,0.066941,0.069249,-0.007708, 0.637424,0.770513,0,0.066941,0.069249,-0.007708, 0.637414,0.770501,0.005552,0.066941,0.069249,-0.006167, 0.684537,0.728957,0.005552,0.067758,0.068528,-0.006167, 0.637424,0.770513,0,0.066941,0.069249,-0.007708, 0.684537,0.728957,0.005552,0.067758,0.068528,-0.006167, 0.684547,0.728969,0,0.067758,0.068528,-0.007708, 0.684547,0.728969,0,0.067758,0.068528,-0.007708, 0.684537,0.728957,0.005552,0.067758,0.068528,-0.006167, 0.728957,0.684537,0.005552,0.068528,0.067758,-0.006167, 0.684547,0.728969,0,0.067758,0.068528,-0.007708, 0.728957,0.684537,0.005552,0.068528,0.067758,-0.006167, 0.728969,0.684547,0,0.068528,0.067758,-0.007708, 0.684547,0.728969,0,0.067758,0.068528,-0.007708, 0.728969,0.684547,0,0.068528,0.067758,-0.007708, 0.707107,0.707107,0,0.068189,0.068097,-0.007708, 0.684547,0.728969,0,0.067758,0.068528,-0.007708, 0.707107,0.707107,0,0.068189,0.068097,-0.007708, 0.707107,0.707107,0,0.068097,0.068189,-0.007708, 0.728969,0.684547,0,0.068528,0.067758,-0.007708, 0.728957,0.684537,0.005552,0.068528,0.067758,-0.006167, 0.770501,0.637414,0.005552,0.069249,0.066941,-0.006167, 0.728969,0.684547,0,0.068528,0.067758,-0.007708, 0.770501,0.637414,0.005552,0.069249,0.066941,-0.006167, 0.770513,0.637424,0,0.069249,0.066941,-0.007708, 0.770513,0.637424,0,0.069249,0.066941,-0.007708, 0.770501,0.637414,0.005552,0.069249,0.066941,-0.006167, 0.809005,0.587776,0.005552,0.069917,0.06608,-0.006167, 0.770513,0.637424,0,0.069249,0.066941,-0.007708, 0.809005,0.587776,0.005552,0.069917,0.06608,-0.006167, 0.809017,0.587785,0,0.069917,0.06608,-0.007708, 0.809017,0.587785,0,0.069917,0.06608,-0.007708, 0.809005,0.587776,0.005552,0.069917,0.06608,-0.006167, 0.844315,0.535819,0.005552,0.070529,0.065178,-0.006167, 0.809017,0.587785,0,0.069917,0.06608,-0.007708, 0.844315,0.535819,0.005552,0.070529,0.065178,-0.006167, 0.844328,0.535827,0,0.070529,0.065178,-0.007708, 0.844328,0.535827,0,0.070529,0.065178,-0.007708, 0.844315,0.535819,0.005552,0.070529,0.065178,-0.006167, 0.876293,0.481746,0.005552,0.071084,0.064241,-0.006167, 0.844328,0.535827,0,0.070529,0.065178,-0.007708, 0.876293,0.481746,0.005552,0.071084,0.064241,-0.006167, 0.876307,0.481754,0,0.071084,0.064241,-0.007708, 0.844328,0.535827,0,0.070529,0.065178,-0.007708, 0.876307,0.481754,0,0.071084,0.064241,-0.007708, 0.860742,0.509041,0,0.070926,0.064507,-0.007708, 0.844328,0.535827,0,0.070529,0.065178,-0.007708, 0.860742,0.509041,0,0.070926,0.064507,-0.007708, 0.860742,0.509041,0,0.070867,0.064607,-0.007708, 0.876307,0.481754,0,0.071084,0.064241,-0.007708, 0.876293,0.481746,0.005552,0.071084,0.064241,-0.006167, 0.904813,0.425773,0.005552,0.071578,0.06327,-0.006167, 0.876307,0.481754,0,0.071084,0.064241,-0.007708, 0.904813,0.425773,0.005552,0.071578,0.06327,-0.006167, 0.904827,0.425779,0,0.071578,0.06327,-0.007708, 0.904827,0.425779,0,0.071578,0.06327,-0.007708, 0.904813,0.425773,0.005552,0.071578,0.06327,-0.006167, 0.929762,0.368119,0.005552,0.072011,0.06227,-0.006167, 0.904827,0.425779,0,0.071578,0.06327,-0.007708, 0.929762,0.368119,0.005552,0.072011,0.06227,-0.006167, 0.929776,0.368125,0,0.072011,0.06227,-0.007708, 0.929776,0.368125,0,0.072011,0.06227,-0.007708, 0.929762,0.368119,0.005552,0.072011,0.06227,-0.006167, 0.951042,0.309012,0.005552,0.07238,0.061245,-0.006167, 0.929776,0.368125,0,0.072011,0.06227,-0.007708, 0.951042,0.309012,0.005552,0.07238,0.061245,-0.006167, 0.951057,0.309017,0,0.07238,0.061245,-0.007708, 0.951057,0.309017,0,0.07238,0.061245,-0.007708, 0.951042,0.309012,0.005552,0.07238,0.061245,-0.006167, 0.968568,0.248686,0.005552,0.072684,0.060198,-0.006167, 0.951057,0.309017,0,0.07238,0.061245,-0.007708, 0.968568,0.248686,0.005552,0.072684,0.060198,-0.006167, 0.968583,0.24869,0,0.072684,0.060198,-0.007708, 0.951057,0.309017,0,0.07238,0.061245,-0.007708, 0.968583,0.24869,0,0.072684,0.060198,-0.007708, 0.960294,0.278991,0,0.072642,0.060343,-0.007708, 0.951057,0.309017,0,0.07238,0.061245,-0.007708, 0.960294,0.278991,0,0.072642,0.060343,-0.007708, 0.960294,0.278991,0,0.072621,0.060414,-0.007708, 0.968583,0.24869,0,0.072684,0.060198,-0.007708, 0.968568,0.248686,0.005552,0.072684,0.060198,-0.006167, 0.982272,0.187378,0.005552,0.072922,0.059135,-0.006167, 0.968583,0.24869,0,0.072684,0.060198,-0.007708, 0.982272,0.187378,0.005552,0.072922,0.059135,-0.006167, 0.982287,0.187381,0,0.072922,0.059135,-0.007708, 0.982287,0.187381,0,0.072922,0.059135,-0.007708, 0.982272,0.187378,0.005552,0.072922,0.059135,-0.006167, 0.992099,0.125331,0.005552,0.073092,0.058059,-0.006167, 0.982287,0.187381,0,0.072922,0.059135,-0.007708, 0.992099,0.125331,0.005552,0.073092,0.058059,-0.006167, 0.992115,0.125333,0,0.073092,0.058059,-0.007708, 0.992115,0.125333,0,0.073092,0.058059,-0.007708, 0.992099,0.125331,0.005552,0.073092,0.058059,-0.006167, 0.997287,0.07324,0.007402,0.073195,0.056974,-0.006167, 0.992115,0.125333,0,0.073092,0.058059,-0.007708, 0.997287,0.07324,0.007402,0.073195,0.056974,-0.006167, 0.995562,0.094108,0,0.073195,0.056974,-0.007708, 0.995562,-0.094108,0,0.073195,0.054796,-0.007708, 0.997287,-0.07324,0.007402,0.073195,0.054796,-0.006167, 0.992099,-0.125331,0.005552,0.073092,0.053712,-0.006167, 0.995562,-0.094108,0,0.073195,0.054796,-0.007708, 0.992099,-0.125331,0.005552,0.073092,0.053712,-0.006167, 0.992115,-0.125333,0,0.073092,0.053712,-0.007708, 0.992115,-0.125333,0,0.073092,0.053712,-0.007708, 0.992099,-0.125331,0.005552,0.073092,0.053712,-0.006167, 0.982272,-0.187378,0.005552,0.072922,0.052635,-0.006167, 0.992115,-0.125333,0,0.073092,0.053712,-0.007708, 0.982272,-0.187378,0.005552,0.072922,0.052635,-0.006167, 0.982287,-0.187381,0,0.072922,0.052635,-0.007708, 0.982287,-0.187381,0,0.072922,0.052635,-0.007708, 0.982272,-0.187378,0.005552,0.072922,0.052635,-0.006167, 0.968568,-0.248686,0.005552,0.072684,0.051572,-0.006167, 0.982287,-0.187381,0,0.072922,0.052635,-0.007708, 0.968568,-0.248686,0.005552,0.072684,0.051572,-0.006167, 0.968583,-0.24869,0,0.072684,0.051572,-0.007708, 0.968583,-0.24869,0,0.072684,0.051572,-0.007708, 0.968568,-0.248686,0.005552,0.072684,0.051572,-0.006167, 0.951042,-0.309012,0.005552,0.07238,0.050526,-0.006167, 0.968583,-0.24869,0,0.072684,0.051572,-0.007708, 0.951042,-0.309012,0.005552,0.07238,0.050526,-0.006167, 0.951057,-0.309017,0,0.07238,0.050526,-0.007708, 0.968583,-0.24869,0,0.072684,0.051572,-0.007708, 0.951057,-0.309017,0,0.07238,0.050526,-0.007708, 0.960294,-0.278991,0,0.072621,0.051356,-0.007708, 0.968583,-0.24869,0,0.072684,0.051572,-0.007708, 0.960294,-0.278991,0,0.072621,0.051356,-0.007708, 0.960294,-0.278991,0,0.072642,0.051428,-0.007708, 0.951057,-0.309017,0,0.07238,0.050526,-0.007708, 0.951042,-0.309012,0.005552,0.07238,0.050526,-0.006167, 0.929762,-0.368119,0.005552,0.072011,0.049501,-0.006167, 0.951057,-0.309017,0,0.07238,0.050526,-0.007708, 0.929762,-0.368119,0.005552,0.072011,0.049501,-0.006167, 0.929776,-0.368125,0,0.072011,0.049501,-0.007708, 0.929776,-0.368125,0,0.072011,0.049501,-0.007708, 0.929762,-0.368119,0.005552,0.072011,0.049501,-0.006167, 0.904813,-0.425773,0.005552,0.071578,0.048501,-0.006167, 0.929776,-0.368125,0,0.072011,0.049501,-0.007708, 0.904813,-0.425773,0.005552,0.071578,0.048501,-0.006167, 0.904827,-0.425779,0,0.071578,0.048501,-0.007708, 0.904827,-0.425779,0,0.071578,0.048501,-0.007708, 0.904813,-0.425773,0.005552,0.071578,0.048501,-0.006167, 0.876293,-0.481746,0.005552,0.071084,0.04753,-0.006167, 0.904827,-0.425779,0,0.071578,0.048501,-0.007708, 0.876293,-0.481746,0.005552,0.071084,0.04753,-0.006167, 0.876307,-0.481754,0,0.071084,0.04753,-0.007708, 0.876307,-0.481754,0,0.071084,0.04753,-0.007708, 0.876293,-0.481746,0.005552,0.071084,0.04753,-0.006167, 0.844315,-0.535819,0.005552,0.070529,0.046592,-0.006167, 0.876307,-0.481754,0,0.071084,0.04753,-0.007708, 0.844315,-0.535819,0.005552,0.070529,0.046592,-0.006167, 0.844328,-0.535827,0,0.070529,0.046592,-0.007708, 0.876307,-0.481754,0,0.071084,0.04753,-0.007708, 0.844328,-0.535827,0,0.070529,0.046592,-0.007708, 0.860742,-0.509041,0,0.070867,0.047163,-0.007708, 0.876307,-0.481754,0,0.071084,0.04753,-0.007708, 0.860742,-0.509041,0,0.070867,0.047163,-0.007708, 0.860742,-0.509041,0,0.070926,0.047263,-0.007708, 0.844328,-0.535827,0,0.070529,0.046592,-0.007708, 0.844315,-0.535819,0.005552,0.070529,0.046592,-0.006167, 0.809005,-0.587776,0.005552,0.069917,0.045691,-0.006167, 0.844328,-0.535827,0,0.070529,0.046592,-0.007708, 0.809005,-0.587776,0.005552,0.069917,0.045691,-0.006167, 0.809017,-0.587785,0,0.069917,0.045691,-0.007708, 0.809017,-0.587785,0,0.069917,0.045691,-0.007708, 0.809005,-0.587776,0.005552,0.069917,0.045691,-0.006167, 0.770501,-0.637414,0.005552,0.069249,0.04483,-0.006167, 0.809017,-0.587785,0,0.069917,0.045691,-0.007708, 0.770501,-0.637414,0.005552,0.069249,0.04483,-0.006167, 0.770513,-0.637424,0,0.069249,0.04483,-0.007708, 0.770513,-0.637424,0,0.069249,0.04483,-0.007708, 0.770501,-0.637414,0.005552,0.069249,0.04483,-0.006167, 0.728957,-0.684537,0.005552,0.068528,0.044013,-0.006167, 0.770513,-0.637424,0,0.069249,0.04483,-0.007708, 0.728957,-0.684537,0.005552,0.068528,0.044013,-0.006167, 0.728969,-0.684547,0,0.068528,0.044013,-0.007708, 0.728969,-0.684547,0,0.068528,0.044013,-0.007708, 0.728957,-0.684537,0.005552,0.068528,0.044013,-0.006167, 0.684537,-0.728957,0.005552,0.067758,0.043242,-0.006167, 0.728969,-0.684547,0,0.068528,0.044013,-0.007708, 0.684537,-0.728957,0.005552,0.067758,0.043242,-0.006167, 0.684547,-0.728969,0,0.067758,0.043242,-0.007708, 0.728969,-0.684547,0,0.068528,0.044013,-0.007708, 0.684547,-0.728969,0,0.067758,0.043242,-0.007708, 0.707107,-0.707107,0,0.068097,0.043581,-0.007708, 0.728969,-0.684547,0,0.068528,0.044013,-0.007708, 0.707107,-0.707107,0,0.068097,0.043581,-0.007708, 0.707107,-0.707107,0,0.068189,0.043673,-0.007708, 0.684547,-0.728969,0,0.067758,0.043242,-0.007708, 0.684537,-0.728957,0.005552,0.067758,0.043242,-0.006167, 0.637414,-0.770501,0.005552,0.066941,0.042522,-0.006167, 0.684547,-0.728969,0,0.067758,0.043242,-0.007708, 0.637414,-0.770501,0.005552,0.066941,0.042522,-0.006167, 0.637424,-0.770513,0,0.066941,0.042522,-0.007708, 0.637424,-0.770513,0,0.066941,0.042522,-0.007708, 0.637414,-0.770501,0.005552,0.066941,0.042522,-0.006167, 0.587776,-0.809005,0.005552,0.06608,0.041854,-0.006167, 0.637424,-0.770513,0,0.066941,0.042522,-0.007708, 0.587776,-0.809005,0.005552,0.06608,0.041854,-0.006167, 0.587785,-0.809017,0,0.06608,0.041854,-0.007708, 0.587785,-0.809017,0,0.06608,0.041854,-0.007708, 0.587776,-0.809005,0.005552,0.06608,0.041854,-0.006167, 0.535819,-0.844315,0.005552,0.065178,0.041241,-0.006167, 0.587785,-0.809017,0,0.06608,0.041854,-0.007708, 0.535819,-0.844315,0.005552,0.065178,0.041241,-0.006167, 0.535827,-0.844328,0,0.065178,0.041241,-0.007708, 0.535827,-0.844328,0,0.065178,0.041241,-0.007708, 0.535819,-0.844315,0.005552,0.065178,0.041241,-0.006167, 0.481746,-0.876293,0.005552,0.064241,0.040687,-0.006167, 0.535827,-0.844328,0,0.065178,0.041241,-0.007708, 0.481746,-0.876293,0.005552,0.064241,0.040687,-0.006167, 0.481754,-0.876307,0,0.064241,0.040687,-0.007708, 0.535827,-0.844328,0,0.065178,0.041241,-0.007708, 0.481754,-0.876307,0,0.064241,0.040687,-0.007708, 0.509041,-0.860742,0,0.064507,0.040845,-0.007708, 0.535827,-0.844328,0,0.065178,0.041241,-0.007708, 0.509041,-0.860742,0,0.064507,0.040845,-0.007708, 0.509041,-0.860742,0,0.064607,0.040904,-0.007708, 0.481754,-0.876307,0,0.064241,0.040687,-0.007708, 0.481746,-0.876293,0.005552,0.064241,0.040687,-0.006167, 0.425773,-0.904813,0.005552,0.06327,0.040192,-0.006167, 0.481754,-0.876307,0,0.064241,0.040687,-0.007708, 0.425773,-0.904813,0.005552,0.06327,0.040192,-0.006167, 0.425779,-0.904827,0,0.06327,0.040192,-0.007708, 0.425779,-0.904827,0,0.06327,0.040192,-0.007708, 0.425773,-0.904813,0.005552,0.06327,0.040192,-0.006167, 0.368119,-0.929762,0.005552,0.06227,0.03976,-0.006167, 0.425779,-0.904827,0,0.06327,0.040192,-0.007708, 0.368119,-0.929762,0.005552,0.06227,0.03976,-0.006167, 0.368125,-0.929776,0,0.06227,0.03976,-0.007708, 0.368125,-0.929776,0,0.06227,0.03976,-0.007708, 0.368119,-0.929762,0.005552,0.06227,0.03976,-0.006167, 0.309012,-0.951042,0.005552,0.061245,0.03939,-0.006167, 0.368125,-0.929776,0,0.06227,0.03976,-0.007708, 0.309012,-0.951042,0.005552,0.061245,0.03939,-0.006167, 0.309017,-0.951057,0,0.061245,0.03939,-0.007708, 0.309017,-0.951057,0,0.061245,0.03939,-0.007708, 0.309012,-0.951042,0.005552,0.061245,0.03939,-0.006167, 0.248686,-0.968568,0.005552,0.060198,0.039087,-0.006167, 0.309017,-0.951057,0,0.061245,0.03939,-0.007708, 0.248686,-0.968568,0.005552,0.060198,0.039087,-0.006167, 0.24869,-0.968583,0,0.060198,0.039087,-0.007708, 0.309017,-0.951057,0,0.061245,0.03939,-0.007708, 0.24869,-0.968583,0,0.060198,0.039087,-0.007708, 0.278991,-0.960294,0,0.060343,0.039128,-0.007708, 0.309017,-0.951057,0,0.061245,0.03939,-0.007708, 0.278991,-0.960294,0,0.060343,0.039128,-0.007708, 0.278991,-0.960294,0,0.060414,0.039149,-0.007708, 0.24869,-0.968583,0,0.060198,0.039087,-0.007708, 0.248686,-0.968568,0.005552,0.060198,0.039087,-0.006167, 0.187378,-0.982272,0.005552,0.059135,0.038849,-0.006167, 0.24869,-0.968583,0,0.060198,0.039087,-0.007708, 0.187378,-0.982272,0.005552,0.059135,0.038849,-0.006167, 0.187381,-0.982287,0,0.059135,0.038849,-0.007708, 0.187381,-0.982287,0,0.059135,0.038849,-0.007708, 0.187378,-0.982272,0.005552,0.059135,0.038849,-0.006167, 0.125331,-0.992099,0.005552,0.058059,0.038678,-0.006167, 0.187381,-0.982287,0,0.059135,0.038849,-0.007708, 0.125331,-0.992099,0.005552,0.058059,0.038678,-0.006167, 0.125333,-0.992115,0,0.058059,0.038678,-0.007708, 0.125333,-0.992115,0,0.058059,0.038678,-0.007708, 0.125331,-0.992099,0.005552,0.058059,0.038678,-0.006167, 0.07324,-0.997287,0.007402,0.056974,0.038576,-0.006167, 0.125333,-0.992115,0,0.058059,0.038678,-0.007708, 0.07324,-0.997287,0.007402,0.056974,0.038576,-0.006167, 0.094108,-0.995562,0,0.056974,0.038576,-0.007708 }; static const struct gllist frame={GL_N3F_V3F,GL_TRIANGLES,9588,data,NULL}; const struct gllist *companion_disc=&frame; xscreensaver-5.36/hacks/glx/companion_heart.c000664 000767 000024 00000077523 12701612217 021352 0ustar00jwzstaff000000 000000 #include "gllist.h" static const float data[]={ -0.126112,-0.516835,0.846745,0.062716,0.065295,-0.005781, -0.233173,-0.466563,0.853199,0.063951,0.064804,-0.005781, -0.169323,-0.502195,0.848015,0.063583,0.066646,-0.004818, 0,0,1,0.055885,0.06242,-0.005781, 0,0,1,0.055116,0.063504,-0.005781, 0,0,1,0.054127,0.064391,-0.005781, 0,0,1,0.055885,0.06242,-0.005781, 0,0,1,0.054127,0.064391,-0.005781, 0,0,1,0.052967,0.065039,-0.005781, 0,0,1,0.055885,0.06242,-0.005781, 0,0,1,0.052967,0.065039,-0.005781, 0,0,1,0.051693,0.065415,-0.005781, 0,0,1,0.055885,0.06242,-0.005781, 0,0,1,0.051693,0.065415,-0.005781, 0,0,1,0.050367,0.065502,-0.005781, 0,0,1,0.055885,0.06242,-0.005781, 0,0,1,0.050367,0.065502,-0.005781, 0,0,1,0.049054,0.065295,-0.005781, 0,0,1,0.055885,0.06242,-0.005781, 0,0,1,0.049054,0.065295,-0.005781, 0,0,1,0.04782,0.064804,-0.005781, 0,0,1,0.055885,0.06242,-0.005781, 0,0,1,0.04782,0.064804,-0.005781, 0,0,1,0.046724,0.064053,-0.005781, 0,0,1,0.055885,0.06242,-0.005781, 0,0,1,0.046724,0.064053,-0.005781, 0,0,1,0.04582,0.063079,-0.005781, 0,0,1,0.055885,0.06242,-0.005781, 0,0,1,0.04582,0.063079,-0.005781, 0,0,1,0.045152,0.06193,-0.005781, 0,0,1,0.055885,0.06242,-0.005781, 0,0,1,0.045152,0.06193,-0.005781, 0,0,1,0.044754,0.060662,-0.005781, 0,0,1,0.055885,0.06242,-0.005781, 0,0,1,0.044754,0.060662,-0.005781, 0,0,1,0.044645,0.059338,-0.005781, 0,0,1,0.055885,0.06242,-0.005781, 0,0,1,0.044645,0.059338,-0.005781, 0,0,1,0.044702,0.058527,-0.005781, 0,0,1,0.055885,0.06242,-0.005781, 0,0,1,0.044702,0.058527,-0.005781, 0,0,1,0.044827,0.057723,-0.005781, 0,0,1,0.055885,0.06242,-0.005781, 0,0,1,0.044827,0.057723,-0.005781, 0,0,1,0.045017,0.056932,-0.005781, 0,0,1,0.055885,0.06242,-0.005781, 0,0,1,0.045017,0.056932,-0.005781, 0,0,1,0.045272,0.05616,-0.005781, 0,0,1,0.055885,0.06242,-0.005781, 0,0,1,0.045272,0.05616,-0.005781, 0,0,1,0.04559,0.055411,-0.005781, 0,0,1,0.055885,0.06242,-0.005781, 0,0,1,0.04559,0.055411,-0.005781, 0,0,1,0.04597,0.054691,-0.005781, 0,0,1,0.055885,0.06242,-0.005781, 0,0,1,0.04597,0.054691,-0.005781, 0,0,1,0.046407,0.054006,-0.005781, 0,0,1,0.055885,0.06242,-0.005781, 0,0,1,0.046407,0.054006,-0.005781, 0,0,1,0.0469,0.053359,-0.005781, 0,0,1,0.055885,0.06242,-0.005781, 0,0,1,0.0469,0.053359,-0.005781, 0,0,1,0.047445,0.052755,-0.005781, 0,0,1,0.055885,0.06242,-0.005781, 0,0,1,0.047445,0.052755,-0.005781, 0,0,1,0.048038,0.052198,-0.005781, 0,0,1,0.055885,0.06242,-0.005781, 0,0,1,0.048038,0.052198,-0.005781, 0,0,1,0.048675,0.051693,-0.005781, 0,0,1,0.055885,0.06242,-0.005781, 0,0,1,0.048675,0.051693,-0.005781, 0,0,1,0.049352,0.051241,-0.005781, 0,0,1,0.055885,0.06242,-0.005781, 0,0,1,0.049352,0.051241,-0.005781, 0,0,1,0.050001,0.050829,-0.005781, 0,0,1,0.055885,0.06242,-0.005781, 0,0,1,0.050001,0.050829,-0.005781, 0,0,1,0.050634,0.050393,-0.005781, 0,0,1,0.055885,0.06242,-0.005781, 0,0,1,0.050634,0.050393,-0.005781, 0,0,1,0.05125,0.049933,-0.005781, 0,0,1,0.055885,0.06242,-0.005781, 0,0,1,0.05125,0.049933,-0.005781, 0,0,1,0.051848,0.049449,-0.005781, 0,0,1,0.055885,0.06242,-0.005781, 0,0,1,0.051848,0.049449,-0.005781, 0,0,1,0.052427,0.048943,-0.005781, 0,0,1,0.055885,0.06242,-0.005781, 0,0,1,0.052427,0.048943,-0.005781, 0,0,1,0.052987,0.048416,-0.005781, 0,0,1,0.055885,0.06242,-0.005781, 0,0,1,0.052987,0.048416,-0.005781, 0,0,1,0.053525,0.047867,-0.005781, 0,0,1,0.055885,0.06242,-0.005781, 0,0,1,0.053525,0.047867,-0.005781, 0,0,1,0.054043,0.047299,-0.005781, 0,0,1,0.055885,0.06242,-0.005781, 0,0,1,0.054043,0.047299,-0.005781, 0,0,1,0.054538,0.046711,-0.005781, 0,0,1,0.055885,0.06242,-0.005781, 0,0,1,0.054538,0.046711,-0.005781, 0,0,1,0.055011,0.046104,-0.005781, 0,0,1,0.055885,0.06242,-0.005781, 0,0,1,0.055011,0.046104,-0.005781, 0,0,1,0.05546,0.04548,-0.005781, 0,0,1,0.055885,0.06242,-0.005781, 0,0,1,0.05546,0.04548,-0.005781, 0,0,1,0.055885,0.044839,-0.005781, 0,0,1,0.055885,0.06242,-0.005781, 0,0,1,0.055885,0.044839,-0.005781, 0,0,1,0.05631,0.04548,-0.005781, 0,0,1,0.055885,0.06242,-0.005781, 0,0,1,0.05631,0.04548,-0.005781, 0,0,1,0.05676,0.046104,-0.005781, 0,0,1,0.055885,0.06242,-0.005781, 0,0,1,0.05676,0.046104,-0.005781, 0,0,1,0.057232,0.046711,-0.005781, 0,0,1,0.055885,0.06242,-0.005781, 0,0,1,0.057232,0.046711,-0.005781, 0,0,1,0.057728,0.047299,-0.005781, 0,0,1,0.055885,0.06242,-0.005781, 0,0,1,0.057728,0.047299,-0.005781, 0,0,1,0.058245,0.047867,-0.005781, 0,0,1,0.055885,0.06242,-0.005781, 0,0,1,0.058245,0.047867,-0.005781, 0,0,1,0.058784,0.048416,-0.005781, 0,0,1,0.055885,0.06242,-0.005781, 0,0,1,0.058784,0.048416,-0.005781, 0,0,1,0.059343,0.048943,-0.005781, 0,0,1,0.055885,0.06242,-0.005781, 0,0,1,0.059343,0.048943,-0.005781, 0,0,1,0.059922,0.049449,-0.005781, 0,0,1,0.055885,0.06242,-0.005781, 0,0,1,0.059922,0.049449,-0.005781, 0,0,1,0.06052,0.049933,-0.005781, 0,0,1,0.055885,0.06242,-0.005781, 0,0,1,0.06052,0.049933,-0.005781, 0,0,1,0.061136,0.050393,-0.005781, 0,0,1,0.055885,0.06242,-0.005781, 0,0,1,0.061136,0.050393,-0.005781, 0,0,1,0.061769,0.050829,-0.005781, 0,0,1,0.055885,0.06242,-0.005781, 0,0,1,0.061769,0.050829,-0.005781, 0,0,1,0.062418,0.051241,-0.005781, 0,0,1,0.055885,0.06242,-0.005781, 0,0,1,0.062418,0.051241,-0.005781, 0,0,1,0.063095,0.051693,-0.005781, 0,0,1,0.055885,0.06242,-0.005781, 0,0,1,0.063095,0.051693,-0.005781, 0,0,1,0.063732,0.052198,-0.005781, 0,0,1,0.055885,0.06242,-0.005781, 0,0,1,0.063732,0.052198,-0.005781, 0,0,1,0.064326,0.052755,-0.005781, 0,0,1,0.055885,0.06242,-0.005781, 0,0,1,0.064326,0.052755,-0.005781, 0,0,1,0.06487,0.053359,-0.005781, 0,0,1,0.055885,0.06242,-0.005781, 0,0,1,0.06487,0.053359,-0.005781, 0,0,1,0.065363,0.054006,-0.005781, 0,0,1,0.055885,0.06242,-0.005781, 0,0,1,0.065363,0.054006,-0.005781, 0,0,1,0.065801,0.054691,-0.005781, 0,0,1,0.055885,0.06242,-0.005781, 0,0,1,0.065801,0.054691,-0.005781, 0,0,1,0.06618,0.055411,-0.005781, 0,0,1,0.055885,0.06242,-0.005781, 0,0,1,0.06618,0.055411,-0.005781, 0,0,1,0.066498,0.05616,-0.005781, 0,0,1,0.055885,0.06242,-0.005781, 0,0,1,0.066498,0.05616,-0.005781, 0,0,1,0.066754,0.056932,-0.005781, 0,0,1,0.055885,0.06242,-0.005781, 0,0,1,0.066754,0.056932,-0.005781, 0,0,1,0.066944,0.057723,-0.005781, 0,0,1,0.055885,0.06242,-0.005781, 0,0,1,0.066944,0.057723,-0.005781, 0,0,1,0.067068,0.058527,-0.005781, 0,0,1,0.055885,0.06242,-0.005781, 0,0,1,0.067068,0.058527,-0.005781, 0,0,1,0.067125,0.059338,-0.005781, 0,0,1,0.055885,0.06242,-0.005781, 0,0,1,0.067125,0.059338,-0.005781, 0,0,1,0.067016,0.060662,-0.005781, 0,0,1,0.055885,0.06242,-0.005781, 0,0,1,0.067016,0.060662,-0.005781, 0,0,1,0.066618,0.06193,-0.005781, 0,0,1,0.055885,0.06242,-0.005781, 0,0,1,0.066618,0.06193,-0.005781, 0,0,1,0.065951,0.063079,-0.005781, 0,0,1,0.055885,0.06242,-0.005781, 0,0,1,0.065951,0.063079,-0.005781, 0,0,1,0.065047,0.064053,-0.005781, 0,0,1,0.055885,0.06242,-0.005781, 0,0,1,0.065047,0.064053,-0.005781, 0,0,1,0.063951,0.064804,-0.005781, 0,0,1,0.055885,0.06242,-0.005781, 0,0,1,0.063951,0.064804,-0.005781, 0,0,1,0.062716,0.065295,-0.005781, 0,0,1,0.055885,0.06242,-0.005781, 0,0,1,0.062716,0.065295,-0.005781, 0,0,1,0.061404,0.065502,-0.005781, 0,0,1,0.055885,0.06242,-0.005781, 0,0,1,0.061404,0.065502,-0.005781, 0,0,1,0.060078,0.065415,-0.005781, 0,0,1,0.055885,0.06242,-0.005781, 0,0,1,0.060078,0.065415,-0.005781, 0,0,1,0.058804,0.065039,-0.005781, 0,0,1,0.055885,0.06242,-0.005781, 0,0,1,0.058804,0.065039,-0.005781, 0,0,1,0.057644,0.064391,-0.005781, 0,0,1,0.055885,0.06242,-0.005781, 0,0,1,0.057644,0.064391,-0.005781, 0,0,1,0.056655,0.063504,-0.005781, 0,0,1,0.055885,0.06242,-0.005781, 0,0,1,0.056655,0.063504,-0.005781, 0,0,1,0.055885,0.06242,-0.005781, 0,0,1,0.055885,0.06242,-0.005781, 0,0,1,0.055885,0.06242,-0.005781, 0,0,1,0.055116,0.063504,-0.005781, 0.600355,0.41774,0.681958,0.05546,0.04548,-0.005781, 0.611328,0.411243,0.676134,0.055414,0.04397,-0.004818, 0.619748,0.407106,0.670953,0.055885,0.044839,-0.005781, 0.611328,0.411243,0.676134,0.055414,0.04397,-0.004818, 0.600355,0.41774,0.681958,0.05546,0.04548,-0.005781, 0.583861,0.425853,0.691199,0.054915,0.044676,-0.004818, 0.573435,0.432324,0.695894,0.055011,0.046104,-0.005781, 0.583861,0.425853,0.691199,0.054915,0.044676,-0.004818, 0.600355,0.41774,0.681958,0.05546,0.04548,-0.005781, 0.583861,0.425853,0.691199,0.054915,0.044676,-0.004818, 0.573435,0.432324,0.695894,0.055011,0.046104,-0.005781, 0.557839,0.440321,0.703515,0.05439,0.045363,-0.004818, 0.547914,0.446817,0.707209,0.054538,0.046711,-0.005781, 0.557839,0.440321,0.703515,0.05439,0.045363,-0.004818, 0.573435,0.432324,0.695894,0.055011,0.046104,-0.005781, 0.557839,0.440321,0.703515,0.05439,0.045363,-0.004818, 0.547914,0.446817,0.707209,0.054538,0.046711,-0.005781, 0.528358,0.458036,0.714871,0.05384,0.046029,-0.004818, 0.525024,0.459644,0.716294,0.054043,0.047299,-0.005781, 0.528358,0.458036,0.714871,0.05384,0.046029,-0.004818, 0.547914,0.446817,0.707209,0.054538,0.046711,-0.005781, 0.525024,0.459644,0.716294,0.054043,0.047299,-0.005781, 0.507344,0.470385,0.722039,0.053525,0.047867,-0.005781, 0.528358,0.458036,0.714871,0.05384,0.046029,-0.004818, 0.502587,0.474851,0.722443,0.053266,0.046673,-0.004818, 0.528358,0.458036,0.714871,0.05384,0.046029,-0.004818, 0.507344,0.470385,0.722039,0.053525,0.047867,-0.005781, 0.507344,0.470385,0.722039,0.053525,0.047867,-0.005781, 0.484849,0.48521,0.727662,0.052987,0.048416,-0.005781, 0.502587,0.474851,0.722443,0.053266,0.046673,-0.004818, 0.480277,0.489774,0.727637,0.052668,0.047293,-0.004818, 0.502587,0.474851,0.722443,0.053266,0.046673,-0.004818, 0.484849,0.48521,0.727662,0.052987,0.048416,-0.005781, 0.484849,0.48521,0.727662,0.052987,0.048416,-0.005781, 0.463202,0.500363,0.731492,0.052427,0.048943,-0.005781, 0.480277,0.489774,0.727637,0.052668,0.047293,-0.004818, 0.458764,0.50505,0.731068,0.052047,0.047891,-0.004818, 0.480277,0.489774,0.727637,0.052668,0.047293,-0.004818, 0.463202,0.500363,0.731492,0.052427,0.048943,-0.005781, 0.463202,0.500363,0.731492,0.052427,0.048943,-0.005781, 0.442255,0.515933,0.733637,0.051848,0.049449,-0.005781, 0.458764,0.50505,0.731068,0.052047,0.047891,-0.004818, 0.437903,0.520767,0.732832,0.051404,0.048464,-0.004818, 0.458764,0.50505,0.731068,0.052047,0.047891,-0.004818, 0.442255,0.515933,0.733637,0.051848,0.049449,-0.005781, 0.442255,0.515933,0.733637,0.051848,0.049449,-0.005781, 0.419718,0.534563,0.733539,0.05125,0.049933,-0.005781, 0.437903,0.520767,0.732832,0.051404,0.048464,-0.004818, 0.42249,0.532759,0.73326,0.050741,0.049011,-0.004818, 0.437903,0.520767,0.732832,0.051404,0.048464,-0.004818, 0.419718,0.534563,0.733539,0.05125,0.049933,-0.005781, 0.42249,0.532759,0.73326,0.050741,0.049011,-0.004818, 0.419718,0.534563,0.733539,0.05125,0.049933,-0.005781, 0.403677,0.547538,0.732971,0.050057,0.049532,-0.004818, 0.395847,0.555175,0.731496,0.050634,0.050393,-0.005781, 0.403677,0.547538,0.732971,0.050057,0.049532,-0.004818, 0.419718,0.534563,0.733539,0.05125,0.049933,-0.005781, 0.403677,0.547538,0.732971,0.050057,0.049532,-0.004818, 0.395847,0.555175,0.731496,0.050634,0.050393,-0.005781, 0.38391,0.564835,0.730462,0.049354,0.050026,-0.004818, 0.376177,0.572732,0.728333,0.050001,0.050829,-0.005781, 0.38391,0.564835,0.730462,0.049354,0.050026,-0.004818, 0.395847,0.555175,0.731496,0.050634,0.050393,-0.005781, 0.38391,0.564835,0.730462,0.049354,0.050026,-0.004818, 0.376177,0.572732,0.728333,0.050001,0.050829,-0.005781, 0.375296,0.574093,0.727715,0.048634,0.050493,-0.004818, 0.378691,0.573667,0.726291,0.049352,0.051241,-0.005781, 0.375296,0.574093,0.727715,0.048634,0.050493,-0.004818, 0.376177,0.572732,0.728333,0.050001,0.050829,-0.005781, 0.375296,0.574093,0.727715,0.048634,0.050493,-0.004818, 0.378691,0.573667,0.726291,0.049352,0.051241,-0.005781, 0.405711,0.551851,0.728601,0.047882,0.051003,-0.004818, 0.403275,0.554082,0.72826,0.048675,0.051693,-0.005781, 0.405711,0.551851,0.728601,0.047882,0.051003,-0.004818, 0.378691,0.573667,0.726291,0.049352,0.051241,-0.005781, 0.403275,0.554082,0.72826,0.048675,0.051693,-0.005781, 0.439698,0.520339,0.732061,0.048038,0.052198,-0.005781, 0.405711,0.551851,0.728601,0.047882,0.051003,-0.004818, 0.455156,0.505988,0.732672,0.047175,0.051576,-0.004818, 0.405711,0.551851,0.728601,0.047882,0.051003,-0.004818, 0.439698,0.520339,0.732061,0.048038,0.052198,-0.005781, 0.439698,0.520339,0.732061,0.048038,0.052198,-0.005781, 0.478388,0.479119,0.735928,0.047445,0.052755,-0.005781, 0.455156,0.505988,0.732672,0.047175,0.051576,-0.004818, 0.492434,0.463571,0.736621,0.046517,0.052206,-0.004818, 0.455156,0.505988,0.732672,0.047175,0.051576,-0.004818, 0.478388,0.479119,0.735928,0.047445,0.052755,-0.005781, 0.478388,0.479119,0.735928,0.047445,0.052755,-0.005781, 0.513034,0.434953,0.740008,0.0469,0.053359,-0.005781, 0.492434,0.463571,0.736621,0.046517,0.052206,-0.004818, 0.525496,0.418365,0.740827,0.045912,0.05289,-0.004818, 0.492434,0.463571,0.736621,0.046517,0.052206,-0.004818, 0.513034,0.434953,0.740008,0.0469,0.053359,-0.005781, 0.513034,0.434953,0.740008,0.0469,0.053359,-0.005781, 0.543337,0.388194,0.744372,0.046407,0.054006,-0.005781, 0.525496,0.418365,0.740827,0.045912,0.05289,-0.004818, 0.554068,0.370754,0.745352,0.045365,0.053623,-0.004818, 0.525496,0.418365,0.740827,0.045912,0.05289,-0.004818, 0.543337,0.388194,0.744372,0.046407,0.054006,-0.005781, 0.543337,0.388194,0.744372,0.046407,0.054006,-0.005781, 0.569031,0.339242,0.749078,0.04597,0.054691,-0.005781, 0.554068,0.370754,0.745352,0.045365,0.053623,-0.004818, 0.577912,0.321162,0.750248,0.044879,0.054399,-0.004818, 0.554068,0.370754,0.745352,0.045365,0.053623,-0.004818, 0.569031,0.339242,0.749078,0.04597,0.054691,-0.005781, 0.569031,0.339242,0.749078,0.04597,0.054691,-0.005781, 0.589896,0.288542,0.754166,0.04559,0.055411,-0.005781, 0.577912,0.321162,0.750248,0.044879,0.054399,-0.004818, 0.596848,0.270049,0.755544,0.044458,0.055214,-0.004818, 0.577912,0.321162,0.750248,0.044879,0.054399,-0.004818, 0.589896,0.288542,0.754166,0.04559,0.055411,-0.005781, 0.589896,0.288542,0.754166,0.04559,0.055411,-0.005781, 0.60577,0.236571,0.759656,0.045272,0.05616,-0.005781, 0.596848,0.270049,0.755544,0.044458,0.055214,-0.004818, 0.610753,0.217903,0.761249,0.044105,0.056061,-0.004818, 0.596848,0.270049,0.755544,0.044458,0.055214,-0.004818, 0.60577,0.236571,0.759656,0.045272,0.05616,-0.005781, 0.60577,0.236571,0.759656,0.045272,0.05616,-0.005781, 0.616557,0.183837,0.765546,0.045017,0.056932,-0.005781, 0.610753,0.217903,0.761249,0.044105,0.056061,-0.004818, 0.619574,0.165232,0.767351,0.043821,0.056936,-0.004818, 0.610753,0.217903,0.761249,0.044105,0.056061,-0.004818, 0.616557,0.183837,0.765546,0.045017,0.056932,-0.005781, 0.616557,0.183837,0.765546,0.045017,0.056932,-0.005781, 0.622238,0.13086,0.771813,0.044827,0.057723,-0.005781, 0.619574,0.165232,0.767351,0.043821,0.056936,-0.004818, 0.623333,0.112547,0.773815,0.04361,0.057831,-0.004818, 0.619574,0.165232,0.767351,0.043821,0.056936,-0.004818, 0.622238,0.13086,0.771813,0.044827,0.057723,-0.005781, 0.622238,0.13086,0.771813,0.044827,0.057723,-0.005781, 0.622921,0.078006,0.778386,0.044702,0.058527,-0.005781, 0.623333,0.112547,0.773815,0.04361,0.057831,-0.004818, 0.622674,0.06887,0.779444,0.043472,0.058741,-0.004818, 0.623333,0.112547,0.773815,0.04361,0.057831,-0.004818, 0.622921,0.078006,0.778386,0.044702,0.058527,-0.005781, 0.615482,0.005518,0.788132,0.043409,0.05966,-0.004818, 0.622674,0.06887,0.779444,0.043472,0.058741,-0.004818, 0.622921,0.078006,0.778386,0.044702,0.058527,-0.005781, 0.615482,0.005518,0.788132,0.043409,0.05966,-0.004818, 0.622921,0.078006,0.778386,0.044702,0.058527,-0.005781, 0.608032,-0.012608,0.793813,0.044645,0.059338,-0.005781, 0.615482,0.005518,0.788132,0.043409,0.05966,-0.004818, 0.608032,-0.012608,0.793813,0.044645,0.059338,-0.005781, 0.587334,-0.078712,0.805508,0.043489,0.061186,-0.004818, 0.563271,-0.124273,0.816873,0.044754,0.060662,-0.005781, 0.587334,-0.078712,0.805508,0.043489,0.061186,-0.004818, 0.608032,-0.012608,0.793813,0.044645,0.059338,-0.005781, 0.587334,-0.078712,0.805508,0.043489,0.061186,-0.004818, 0.563271,-0.124273,0.816873,0.044754,0.060662,-0.005781, 0.528554,-0.194938,0.826214,0.043898,0.062655,-0.004818, 0.498136,-0.2337,0.835012,0.045152,0.06193,-0.005781, 0.528554,-0.194938,0.826214,0.043898,0.062655,-0.004818, 0.563271,-0.124273,0.816873,0.044754,0.060662,-0.005781, 0.528554,-0.194938,0.826214,0.043898,0.062655,-0.004818, 0.498136,-0.2337,0.835012,0.045152,0.06193,-0.005781, 0.454671,-0.294294,0.840634,0.044613,0.063997,-0.004818, 0.419714,-0.3263,0.846976,0.04582,0.063079,-0.005781, 0.454671,-0.294294,0.840634,0.044613,0.063997,-0.004818, 0.498136,-0.2337,0.835012,0.045152,0.06193,-0.005781, 0.454671,-0.294294,0.840634,0.044613,0.063997,-0.004818, 0.419714,-0.3263,0.846976,0.04582,0.063079,-0.005781, 0.369159,-0.377727,0.849143,0.0456,0.065145,-0.004818, 0.33096,-0.403408,0.853069,0.046724,0.064053,-0.005781, 0.369159,-0.377727,0.849143,0.0456,0.065145,-0.004818, 0.419714,-0.3263,0.846976,0.04582,0.063079,-0.005781, 0.369159,-0.377727,0.849143,0.0456,0.065145,-0.004818, 0.33096,-0.403408,0.853069,0.046724,0.064053,-0.005781, 0.273921,-0.44663,0.851756,0.046812,0.066043,-0.004818, 0.233173,-0.466563,0.853199,0.04782,0.064804,-0.005781, 0.273921,-0.44663,0.851756,0.046812,0.066043,-0.004818, 0.33096,-0.403408,0.853069,0.046724,0.064053,-0.005781, 0.273921,-0.44663,0.851756,0.046812,0.066043,-0.004818, 0.233173,-0.466563,0.853199,0.04782,0.064804,-0.005781, 0.169323,-0.502195,0.848015,0.048188,0.066646,-0.004818, 0.126112,-0.516835,0.846745,0.049054,0.065295,-0.005781, 0.169323,-0.502195,0.848015,0.048188,0.066646,-0.004818, 0.233173,-0.466563,0.853199,0.04782,0.064804,-0.005781, 0.169323,-0.502195,0.848015,0.048188,0.066646,-0.004818, 0.126112,-0.516835,0.846745,0.049054,0.065295,-0.005781, 0.054393,-0.544766,0.836822,0.04966,0.066926,-0.004818, 0.00829,-0.554159,0.832369,0.050367,0.065502,-0.005781, 0.054393,-0.544766,0.836822,0.04966,0.066926,-0.004818, 0.126112,-0.516835,0.846745,0.049054,0.065295,-0.005781, 0.054393,-0.544766,0.836822,0.04966,0.066926,-0.004818, 0.00829,-0.554159,0.832369,0.050367,0.065502,-0.005781, -0.072758,-0.573144,0.816219,0.051157,0.066867,-0.004818, -0.12248,-0.576612,0.807785,0.051693,0.065415,-0.005781, -0.072758,-0.573144,0.816219,0.051157,0.066867,-0.004818, 0.00829,-0.554159,0.832369,0.050367,0.065502,-0.005781, -0.072758,-0.573144,0.816219,0.051157,0.066867,-0.004818, -0.12248,-0.576612,0.807785,0.051693,0.065415,-0.005781, -0.241161,-0.582165,0.776482,0.052605,0.066474,-0.004818, -0.248853,-0.582215,0.774014,0.052967,0.065039,-0.005781, -0.241161,-0.582165,0.776482,0.052605,0.066474,-0.004818, -0.12248,-0.576612,0.807785,0.051693,0.065415,-0.005781, -0.248853,-0.582215,0.774014,0.052967,0.065039,-0.005781, -0.375277,-0.56983,0.731068,0.054127,0.064391,-0.005781, -0.241161,-0.582165,0.776482,0.052605,0.066474,-0.004818, -0.434459,-0.558606,0.706544,0.053934,0.065766,-0.004818, -0.241161,-0.582165,0.776482,0.052605,0.066474,-0.004818, -0.375277,-0.56983,0.731068,0.054127,0.064391,-0.005781, -0.375277,-0.56983,0.731068,0.054127,0.064391,-0.005781, -0.563066,-0.515371,0.646025,0.055116,0.063504,-0.005781, -0.434459,-0.558606,0.706544,0.053934,0.065766,-0.004818, -0.558162,-0.527957,0.640091,0.055031,0.064761,-0.004818, -0.434459,-0.558606,0.706544,0.053934,0.065766,-0.004818, -0.563066,-0.515371,0.646025,0.055116,0.063504,-0.005781, -0.558162,-0.527957,0.640091,0.055031,0.064761,-0.004818, -0.563066,-0.515371,0.646025,0.055116,0.063504,-0.005781, -0.627283,-0.480953,0.612536,0.055885,0.063727,-0.004818, -0.641198,-0.455323,0.617694,0.055885,0.06242,-0.005781, -0.627283,-0.480953,0.612536,0.055885,0.063727,-0.004818, -0.563066,-0.515371,0.646025,0.055116,0.063504,-0.005781, 0.641198,-0.455323,0.617694,0.055885,0.06242,-0.005781, 0.584317,-0.505368,0.634963,0.056655,0.063504,-0.005781, 0.627283,-0.480953,0.612536,0.055885,0.063727,-0.004818, 0.53575,-0.534369,0.653775,0.056739,0.064761,-0.004818, 0.627283,-0.480953,0.612536,0.055885,0.063727,-0.004818, 0.584317,-0.505368,0.634963,0.056655,0.063504,-0.005781, 0.584317,-0.505368,0.634963,0.056655,0.063504,-0.005781, 0.438876,-0.557947,0.704332,0.057644,0.064391,-0.005781, 0.53575,-0.534369,0.653775,0.056739,0.064761,-0.004818, 0.377865,-0.569077,0.730322,0.057837,0.065766,-0.004818, 0.53575,-0.534369,0.653775,0.056739,0.064761,-0.004818, 0.438876,-0.557947,0.704332,0.057644,0.064391,-0.005781, 0.438876,-0.557947,0.704332,0.057644,0.064391,-0.005781, 0.267975,-0.579599,0.769581,0.058804,0.065039,-0.005781, 0.377865,-0.569077,0.730322,0.057837,0.065766,-0.004818, 0.214084,-0.583805,0.78316,0.059165,0.066474,-0.004818, 0.377865,-0.569077,0.730322,0.057837,0.065766,-0.004818, 0.267975,-0.579599,0.769581,0.058804,0.065039,-0.005781, 0.267975,-0.579599,0.769581,0.058804,0.065039,-0.005781, 0.12248,-0.576612,0.807785,0.060078,0.065415,-0.005781, 0.214084,-0.583805,0.78316,0.059165,0.066474,-0.004818, 0.072758,-0.573144,0.816219,0.060613,0.066867,-0.004818, 0.214084,-0.583805,0.78316,0.059165,0.066474,-0.004818, 0.12248,-0.576612,0.807785,0.060078,0.065415,-0.005781, 0.12248,-0.576612,0.807785,0.060078,0.065415,-0.005781, -0.00829,-0.554159,0.832369,0.061404,0.065502,-0.005781, 0.072758,-0.573144,0.816219,0.060613,0.066867,-0.004818, -0.054393,-0.544766,0.836822,0.06211,0.066926,-0.004818, 0.072758,-0.573144,0.816219,0.060613,0.066867,-0.004818, -0.00829,-0.554159,0.832369,0.061404,0.065502,-0.005781, -0.00829,-0.554159,0.832369,0.061404,0.065502,-0.005781, -0.126112,-0.516835,0.846745,0.062716,0.065295,-0.005781, -0.054393,-0.544766,0.836822,0.06211,0.066926,-0.004818, -0.169323,-0.502195,0.848015,0.063583,0.066646,-0.004818, -0.054393,-0.544766,0.836822,0.06211,0.066926,-0.004818, -0.126112,-0.516835,0.846745,0.062716,0.065295,-0.005781, 0.622274,0.404734,0.670049,0.055885,0.043244,-0.004818, 0.619748,0.407106,0.670953,0.055885,0.044839,-0.005781, 0.611328,0.411243,0.676134,0.055414,0.04397,-0.004818, -0.622274,0.404734,0.670049,0.055885,0.043244,-0.004818, -0.611328,0.411243,0.676134,0.056357,0.04397,-0.004818, -0.619748,0.407106,0.670953,0.055885,0.044839,-0.005781, -0.600355,0.41774,0.681958,0.05631,0.04548,-0.005781, -0.619748,0.407106,0.670953,0.055885,0.044839,-0.005781, -0.611328,0.411243,0.676134,0.056357,0.04397,-0.004818, -0.611328,0.411243,0.676134,0.056357,0.04397,-0.004818, -0.583861,0.425853,0.691199,0.056856,0.044676,-0.004818, -0.600355,0.41774,0.681958,0.05631,0.04548,-0.005781, -0.573435,0.432324,0.695894,0.05676,0.046104,-0.005781, -0.600355,0.41774,0.681958,0.05631,0.04548,-0.005781, -0.583861,0.425853,0.691199,0.056856,0.044676,-0.004818, -0.583861,0.425853,0.691199,0.056856,0.044676,-0.004818, -0.557839,0.440321,0.703515,0.05738,0.045363,-0.004818, -0.573435,0.432324,0.695894,0.05676,0.046104,-0.005781, -0.547914,0.446817,0.707209,0.057232,0.046711,-0.005781, -0.573435,0.432324,0.695894,0.05676,0.046104,-0.005781, -0.557839,0.440321,0.703515,0.05738,0.045363,-0.004818, -0.557839,0.440321,0.703515,0.05738,0.045363,-0.004818, -0.528358,0.458036,0.714871,0.05793,0.046029,-0.004818, -0.547914,0.446817,0.707209,0.057232,0.046711,-0.005781, -0.525024,0.459644,0.716294,0.057728,0.047299,-0.005781, -0.547914,0.446817,0.707209,0.057232,0.046711,-0.005781, -0.528358,0.458036,0.714871,0.05793,0.046029,-0.004818, -0.525024,0.459644,0.716294,0.057728,0.047299,-0.005781, -0.528358,0.458036,0.714871,0.05793,0.046029,-0.004818, -0.507344,0.470385,0.722039,0.058245,0.047867,-0.005781, -0.502587,0.474851,0.722443,0.058505,0.046673,-0.004818, -0.507344,0.470385,0.722039,0.058245,0.047867,-0.005781, -0.528358,0.458036,0.714871,0.05793,0.046029,-0.004818, -0.507344,0.470385,0.722039,0.058245,0.047867,-0.005781, -0.502587,0.474851,0.722443,0.058505,0.046673,-0.004818, -0.484849,0.48521,0.727662,0.058784,0.048416,-0.005781, -0.480277,0.489774,0.727637,0.059103,0.047293,-0.004818, -0.484849,0.48521,0.727662,0.058784,0.048416,-0.005781, -0.502587,0.474851,0.722443,0.058505,0.046673,-0.004818, -0.484849,0.48521,0.727662,0.058784,0.048416,-0.005781, -0.480277,0.489774,0.727637,0.059103,0.047293,-0.004818, -0.463202,0.500363,0.731492,0.059343,0.048943,-0.005781, -0.458764,0.50505,0.731068,0.059724,0.047891,-0.004818, -0.463202,0.500363,0.731492,0.059343,0.048943,-0.005781, -0.480277,0.489774,0.727637,0.059103,0.047293,-0.004818, -0.463202,0.500363,0.731492,0.059343,0.048943,-0.005781, -0.458764,0.50505,0.731068,0.059724,0.047891,-0.004818, -0.442255,0.515933,0.733637,0.059922,0.049449,-0.005781, -0.437903,0.520767,0.732832,0.060366,0.048464,-0.004818, -0.442255,0.515933,0.733637,0.059922,0.049449,-0.005781, -0.458764,0.50505,0.731068,0.059724,0.047891,-0.004818, -0.442255,0.515933,0.733637,0.059922,0.049449,-0.005781, -0.437903,0.520767,0.732832,0.060366,0.048464,-0.004818, -0.421867,0.532005,0.734165,0.06052,0.049933,-0.005781, -0.417553,0.537009,0.732987,0.06103,0.049011,-0.004818, -0.421867,0.532005,0.734165,0.06052,0.049933,-0.005781, -0.437903,0.520767,0.732832,0.060366,0.048464,-0.004818, -0.421867,0.532005,0.734165,0.06052,0.049933,-0.005781, -0.417553,0.537009,0.732987,0.06103,0.049011,-0.004818, -0.401898,0.548661,0.73311,0.061136,0.050393,-0.005781, -0.397577,0.553859,0.731555,0.061714,0.049532,-0.004818, -0.401898,0.548661,0.73311,0.061136,0.050393,-0.005781, -0.417553,0.537009,0.732987,0.06103,0.049011,-0.004818, -0.401898,0.548661,0.73311,0.061136,0.050393,-0.005781, -0.397577,0.553859,0.731555,0.061714,0.049532,-0.004818, -0.382209,0.565977,0.730469,0.061769,0.050829,-0.005781, -0.377837,0.571394,0.728525,0.062416,0.050026,-0.004818, -0.382209,0.565977,0.730469,0.061769,0.050829,-0.005781, -0.397577,0.553859,0.731555,0.061714,0.049532,-0.004818, -0.382209,0.565977,0.730469,0.061769,0.050829,-0.005781, -0.377837,0.571394,0.728525,0.062416,0.050026,-0.004818, -0.37698,0.573856,0.727032,0.062418,0.051241,-0.005781, -0.379372,0.571846,0.727371,0.063137,0.050493,-0.004818, -0.37698,0.573856,0.727032,0.062418,0.051241,-0.005781, -0.377837,0.571394,0.728525,0.062416,0.050026,-0.004818, -0.379372,0.571846,0.727371,0.063137,0.050493,-0.004818, -0.405711,0.551851,0.728601,0.063888,0.051003,-0.004818, -0.37698,0.573856,0.727032,0.062418,0.051241,-0.005781, -0.403275,0.554082,0.72826,0.063095,0.051693,-0.005781, -0.37698,0.573856,0.727032,0.062418,0.051241,-0.005781, -0.405711,0.551851,0.728601,0.063888,0.051003,-0.004818, -0.403275,0.554082,0.72826,0.063095,0.051693,-0.005781, -0.405711,0.551851,0.728601,0.063888,0.051003,-0.004818, -0.439698,0.520339,0.732061,0.063732,0.052198,-0.005781, -0.455156,0.505988,0.732672,0.064596,0.051576,-0.004818, -0.439698,0.520339,0.732061,0.063732,0.052198,-0.005781, -0.405711,0.551851,0.728601,0.063888,0.051003,-0.004818, -0.439698,0.520339,0.732061,0.063732,0.052198,-0.005781, -0.455156,0.505988,0.732672,0.064596,0.051576,-0.004818, -0.478388,0.479119,0.735928,0.064326,0.052755,-0.005781, -0.492434,0.463571,0.736621,0.065254,0.052206,-0.004818, -0.478388,0.479119,0.735928,0.064326,0.052755,-0.005781, -0.455156,0.505988,0.732672,0.064596,0.051576,-0.004818, -0.478388,0.479119,0.735928,0.064326,0.052755,-0.005781, -0.492434,0.463571,0.736621,0.065254,0.052206,-0.004818, -0.513034,0.434953,0.740008,0.06487,0.053359,-0.005781, -0.525496,0.418365,0.740827,0.065859,0.05289,-0.004818, -0.513034,0.434953,0.740008,0.06487,0.053359,-0.005781, -0.492434,0.463571,0.736621,0.065254,0.052206,-0.004818, -0.513034,0.434953,0.740008,0.06487,0.053359,-0.005781, -0.525496,0.418365,0.740827,0.065859,0.05289,-0.004818, -0.543337,0.388194,0.744372,0.065363,0.054006,-0.005781, -0.554068,0.370754,0.745352,0.066406,0.053623,-0.004818, -0.543337,0.388194,0.744372,0.065363,0.054006,-0.005781, -0.525496,0.418365,0.740827,0.065859,0.05289,-0.004818, -0.543337,0.388194,0.744372,0.065363,0.054006,-0.005781, -0.554068,0.370754,0.745352,0.066406,0.053623,-0.004818, -0.569031,0.339242,0.749078,0.065801,0.054691,-0.005781, -0.577912,0.321162,0.750248,0.066892,0.054399,-0.004818, -0.569031,0.339242,0.749078,0.065801,0.054691,-0.005781, -0.554068,0.370754,0.745352,0.066406,0.053623,-0.004818, -0.569031,0.339242,0.749078,0.065801,0.054691,-0.005781, -0.577912,0.321162,0.750248,0.066892,0.054399,-0.004818, -0.589896,0.288542,0.754166,0.06618,0.055411,-0.005781, -0.596848,0.270049,0.755544,0.067313,0.055214,-0.004818, -0.589896,0.288542,0.754166,0.06618,0.055411,-0.005781, -0.577912,0.321162,0.750248,0.066892,0.054399,-0.004818, -0.589896,0.288542,0.754166,0.06618,0.055411,-0.005781, -0.596848,0.270049,0.755544,0.067313,0.055214,-0.004818, -0.60577,0.236571,0.759656,0.066498,0.05616,-0.005781, -0.610753,0.217903,0.761249,0.067666,0.056061,-0.004818, -0.60577,0.236571,0.759656,0.066498,0.05616,-0.005781, -0.596848,0.270049,0.755544,0.067313,0.055214,-0.004818, -0.60577,0.236571,0.759656,0.066498,0.05616,-0.005781, -0.610753,0.217903,0.761249,0.067666,0.056061,-0.004818, -0.616557,0.183837,0.765546,0.066754,0.056932,-0.005781, -0.619574,0.165232,0.767351,0.067949,0.056936,-0.004818, -0.616557,0.183837,0.765546,0.066754,0.056932,-0.005781, -0.610753,0.217903,0.761249,0.067666,0.056061,-0.004818, -0.616557,0.183837,0.765546,0.066754,0.056932,-0.005781, -0.619574,0.165232,0.767351,0.067949,0.056936,-0.004818, -0.622238,0.13086,0.771813,0.066944,0.057723,-0.005781, -0.623333,0.112547,0.773815,0.068161,0.057831,-0.004818, -0.622238,0.13086,0.771813,0.066944,0.057723,-0.005781, -0.619574,0.165232,0.767351,0.067949,0.056936,-0.004818, -0.622238,0.13086,0.771813,0.066944,0.057723,-0.005781, -0.623333,0.112547,0.773815,0.068161,0.057831,-0.004818, -0.622921,0.078006,0.778386,0.067068,0.058527,-0.005781, -0.622674,0.06887,0.779444,0.068298,0.058741,-0.004818, -0.622921,0.078006,0.778386,0.067068,0.058527,-0.005781, -0.623333,0.112547,0.773815,0.068161,0.057831,-0.004818, -0.622921,0.078006,0.778386,0.067068,0.058527,-0.005781, -0.622674,0.06887,0.779444,0.068298,0.058741,-0.004818, -0.615482,0.005518,0.788132,0.068362,0.05966,-0.004818, -0.622921,0.078006,0.778386,0.067068,0.058527,-0.005781, -0.615482,0.005518,0.788132,0.068362,0.05966,-0.004818, -0.608032,-0.012608,0.793813,0.067125,0.059338,-0.005781, -0.615482,0.005518,0.788132,0.068362,0.05966,-0.004818, -0.587334,-0.078712,0.805508,0.068281,0.061186,-0.004818, -0.608032,-0.012608,0.793813,0.067125,0.059338,-0.005781, -0.563271,-0.124273,0.816873,0.067016,0.060662,-0.005781, -0.608032,-0.012608,0.793813,0.067125,0.059338,-0.005781, -0.587334,-0.078712,0.805508,0.068281,0.061186,-0.004818, -0.587334,-0.078712,0.805508,0.068281,0.061186,-0.004818, -0.528554,-0.194938,0.826214,0.067873,0.062655,-0.004818, -0.563271,-0.124273,0.816873,0.067016,0.060662,-0.005781, -0.498136,-0.2337,0.835012,0.066618,0.06193,-0.005781, -0.563271,-0.124273,0.816873,0.067016,0.060662,-0.005781, -0.528554,-0.194938,0.826214,0.067873,0.062655,-0.004818, -0.528554,-0.194938,0.826214,0.067873,0.062655,-0.004818, -0.454671,-0.294294,0.840634,0.067158,0.063997,-0.004818, -0.498136,-0.2337,0.835012,0.066618,0.06193,-0.005781, -0.419714,-0.3263,0.846976,0.065951,0.063079,-0.005781, -0.498136,-0.2337,0.835012,0.066618,0.06193,-0.005781, -0.454671,-0.294294,0.840634,0.067158,0.063997,-0.004818, -0.454671,-0.294294,0.840634,0.067158,0.063997,-0.004818, -0.369159,-0.377727,0.849143,0.06617,0.065145,-0.004818, -0.419714,-0.3263,0.846976,0.065951,0.063079,-0.005781, -0.33096,-0.403408,0.853069,0.065047,0.064053,-0.005781, -0.419714,-0.3263,0.846976,0.065951,0.063079,-0.005781, -0.369159,-0.377727,0.849143,0.06617,0.065145,-0.004818, -0.369159,-0.377727,0.849143,0.06617,0.065145,-0.004818, -0.273921,-0.44663,0.851756,0.064959,0.066043,-0.004818, -0.33096,-0.403408,0.853069,0.065047,0.064053,-0.005781, -0.233173,-0.466563,0.853199,0.063951,0.064804,-0.005781, -0.33096,-0.403408,0.853069,0.065047,0.064053,-0.005781, -0.273921,-0.44663,0.851756,0.064959,0.066043,-0.004818, -0.273921,-0.44663,0.851756,0.064959,0.066043,-0.004818, -0.169323,-0.502195,0.848015,0.063583,0.066646,-0.004818, -0.233173,-0.466563,0.853199,0.063951,0.064804,-0.005781 }; static const struct gllist frame={GL_N3F_V3F,GL_TRIANGLES,648,data,NULL}; const struct gllist *companion_heart=&frame; xscreensaver-5.36/hacks/glx/tronbit.c000664 000767 000024 00000031340 12710313231 017642 0ustar00jwzstaff000000 000000 /* tronbit, Copyright (c) 2011-2014 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. */ #define DEFAULTS "*delay: 30000 \n" \ "*count: 30 \n" \ "*showFPS: False \n" \ "*wireframe: False \n" # define refresh_bit 0 # define release_bit 0 #undef countof #define countof(x) (sizeof((x))/sizeof((*x))) #include "xlockmore.h" #include "colors.h" #include "sphere.h" #include "rotator.h" #include "gltrackball.h" #include #ifdef USE_GL /* whole file */ #include "gllist.h" extern const struct gllist *tronbit_idle1, *tronbit_idle2, *tronbit_no, *tronbit_yes; static const struct gllist * const *all_objs[] = { &tronbit_idle1, &tronbit_idle2, &tronbit_no, &tronbit_yes }; #define DEF_SPIN "True" #define DEF_WANDER "True" #define DEF_SPEED "1.0" #define HISTORY_LENGTH 512 typedef enum { BIT_IDLE1, BIT_IDLE2, BIT_NO, BIT_YES } bit_state; #define MODELS 4 typedef struct { GLXContext *glx_context; rotator *rot; trackball_state *trackball; Bool button_down_p; double frequency; double confidence; double last_time; unsigned char history [HISTORY_LENGTH]; unsigned char histogram [HISTORY_LENGTH]; int history_fp, histogram_fp; GLuint dlists[MODELS], polys[MODELS]; char kbd; } bit_configuration; static bit_configuration *bps = NULL; static const GLfloat colors[][4] = { { 0.66, 0.85, 1.00, 1.00 }, { 0.66, 0.85, 1.00, 1.00 }, { 1.00, 0.12, 0.12, 1.00 }, { 0.98, 0.85, 0.30, 1.00 } }; static Bool do_spin; static GLfloat speed; static Bool do_wander; static XrmOptionDescRec opts[] = { { "-spin", ".spin", XrmoptionNoArg, "True" }, { "+spin", ".spin", XrmoptionNoArg, "False" }, { "-speed", ".speed", XrmoptionSepArg, 0 }, { "-wander", ".wander", XrmoptionNoArg, "True" }, { "+wander", ".wander", XrmoptionNoArg, "False" } }; static argtype vars[] = { {&do_spin, "spin", "Spin", DEF_SPIN, t_Bool}, {&do_wander, "wander", "Wander", DEF_WANDER, t_Bool}, {&speed, "speed", "Speed", DEF_SPEED, t_Float}, }; ENTRYPOINT ModeSpecOpt bit_opts = {countof(opts), opts, countof(vars), vars, NULL}; /* Returns the current time in seconds as a double. */ static double double_time (void) { struct timeval now; # ifdef GETTIMEOFDAY_TWO_ARGS struct timezone tzp; gettimeofday(&now, &tzp); # else gettimeofday(&now); # endif return (now.tv_sec + ((double) now.tv_usec * 0.000001)); } static int make_bit (ModeInfo *mi, bit_state which) { static const GLfloat spec[4] = {1.0, 1.0, 1.0, 1.0}; static const GLfloat shiny = 128.0; const GLfloat *color = colors[which]; int wire = MI_IS_WIREFRAME(mi); int polys = 0; GLfloat s; const struct gllist *gll; glMaterialfv (GL_FRONT, GL_SPECULAR, spec); glMateriali (GL_FRONT, GL_SHININESS, shiny); glMaterialfv (GL_FRONT, GL_AMBIENT_AND_DIFFUSE, color); glColor4f (color[0], color[1], color[2], color[3]); glPushMatrix(); switch (which) { case BIT_IDLE1: glRotatef (-44, 0, 1, 0); /* line up the models with each other */ glRotatef (-11, 1, 0, 0); glRotatef ( 8, 0, 0, 1); s = 1.0; break; case BIT_IDLE2: glRotatef ( 16.0, 0, 0, 1); glRotatef (-28.0, 1, 0, 0); s = 1.0; break; case BIT_NO: glRotatef ( 16.0, 0, 0, 1); glRotatef (-28.0, 1, 0, 0); s = 1.6; break; case BIT_YES: glRotatef (-44.0, 0, 1, 0); glRotatef (-32.0, 1, 0, 0); s = 1.53; break; default: abort(); break; } glScalef (s, s, s); gll = *all_objs[which]; renderList (gll, wire); polys += gll->points / 3; glPopMatrix(); return polys; } static void tick_bit (ModeInfo *mi, double now) { bit_configuration *bp = &bps[MI_SCREEN(mi)]; double freq = bp->frequency; int n = bp->history[bp->history_fp]; int histogram_speed = 3 * speed; int i; if (histogram_speed < 1) histogram_speed = 1; if (n == BIT_YES || n == BIT_NO) freq *= 2; if (bp->button_down_p) return; for (i = 0; i < histogram_speed; i++) { int nn = (n == BIT_YES ? 240 : n == BIT_NO ? 17 : 128); int on = bp->histogram[(bp->histogram_fp-1) % countof(bp->histogram)]; /* smooth out the square wave a little bit */ if (!(nn > 100 && nn < 200) != !(on > 100 && on < 200)) nn += (((random() % 48) - 32) * ((on > 100 && on < 200) ? 1 : -1)); nn += (random() % 16) - 8; bp->histogram_fp++; if (bp->histogram_fp >= countof(bp->history)) bp->histogram_fp = 0; bp->histogram [bp->histogram_fp] = nn; } if (bp->last_time + freq > now && !bp->kbd) return; bp->last_time = now; bp->history_fp++; if (bp->history_fp >= countof(bp->history)) bp->history_fp = 0; if (bp->kbd) { n = (bp->kbd == '1' ? BIT_YES : bp->kbd == '0' ? BIT_NO : (random() & 1) ? BIT_YES : BIT_NO); bp->kbd = 0; } else if (n == BIT_YES || n == BIT_NO || frand(1.0) >= bp->confidence) n = (n == BIT_IDLE1 ? BIT_IDLE2 : BIT_IDLE1); else n = (random() & 1) ? BIT_YES : BIT_NO; bp->history [bp->history_fp] = n; } static int animate_bits (ModeInfo *mi, bit_state omodel, bit_state nmodel, GLfloat ratio) { bit_configuration *bp = &bps[MI_SCREEN(mi)]; int polys = 0; GLfloat scale = sin (ratio * M_PI / 2); GLfloat osize, nsize, small; int wire = MI_IS_WIREFRAME(mi); glShadeModel(GL_SMOOTH); glEnable(GL_DEPTH_TEST); glEnable(GL_NORMALIZE); glEnable(GL_CULL_FACE); if (!wire) { glEnable(GL_LIGHTING); glEnable(GL_DEPTH_TEST); glEnable(GL_CULL_FACE); } if ((omodel == BIT_IDLE1 || omodel == BIT_IDLE2) && (nmodel == BIT_IDLE1 || nmodel == BIT_IDLE2)) small = 0.9; else small = 0.5; nsize = small + (1 - small) * scale; osize = small + (1 - small) * (1 - scale); glPushMatrix(); glScalef (osize, osize, osize); glCallList (bp->dlists [omodel]); polys += bp->polys [omodel]; glPopMatrix(); glPushMatrix(); glScalef (nsize, nsize, nsize); glCallList (bp->dlists [nmodel]); polys += bp->polys [nmodel]; glPopMatrix(); return polys; } static int draw_histogram (ModeInfo *mi, GLfloat ratio) { bit_configuration *bp = &bps[MI_SCREEN(mi)]; int samples = countof (bp->histogram); GLfloat scalex = (GLfloat) mi->xgwa.width / samples; GLfloat scaley = mi->xgwa.height / 255.0 / 4; /* about 1/4th of screen */ int polys = 0; int overlays = 5; int k; glDisable (GL_TEXTURE_2D); glDisable (GL_LIGHTING); glDisable (GL_BLEND); glDisable (GL_DEPTH_TEST); glDisable (GL_CULL_FACE); glMatrixMode(GL_PROJECTION); glPushMatrix(); { glLoadIdentity(); glMatrixMode(GL_MODELVIEW); glPushMatrix(); glLoadIdentity(); /* glRotatef(current_device_rotation(), 0, 0, 1); */ glOrtho (0, mi->xgwa.width, 0, mi->xgwa.height, -1, 1); for (k = 0; k < overlays; k++) { int i, j; GLfloat a = (GLfloat) k / overlays; glColor3f (0.3 * a, 0.7 * a, 1.0 * a); glBegin (GL_LINE_STRIP); j = bp->histogram_fp + 1; for (i = 0; i < samples; i++) { GLfloat x, y, z; if (j >= samples) j = 0; x = i; y = bp->histogram[j]; z = 0; y += (int) ((random() % 16) - 8); y += 16; /* margin at bottom of screen */ x *= scalex; y *= scaley; glVertex3f (x, y, z); ++j; polys++; } glEnd(); } glPopMatrix(); } glMatrixMode(GL_PROJECTION); glPopMatrix(); glMatrixMode(GL_MODELVIEW); return polys; } /* Window management, etc */ ENTRYPOINT void reshape_bit (ModeInfo *mi, int width, int height) { GLfloat h = (GLfloat) height / (GLfloat) width; glViewport (0, 0, (GLint) width, (GLint) height); glMatrixMode(GL_PROJECTION); glLoadIdentity(); gluPerspective (30.0, 1/h, 1.0, 100.0); glMatrixMode(GL_MODELVIEW); glLoadIdentity(); gluLookAt( 0.0, 0.0, 30.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0); glClear(GL_COLOR_BUFFER_BIT); } ENTRYPOINT Bool bit_handle_event (ModeInfo *mi, XEvent *event) { bit_configuration *bp = &bps[MI_SCREEN(mi)]; if (gltrackball_event_handler (event, bp->trackball, MI_WIDTH (mi), MI_HEIGHT (mi), &bp->button_down_p)) return True; else if (event->xany.type == KeyPress) { KeySym keysym; char c = 0; XLookupString (&event->xkey, &c, 1, &keysym, 0); if (keysym == XK_Up || keysym == XK_Left || keysym == XK_Prior) c = '1'; else if (keysym == XK_Down || keysym == XK_Right || keysym == XK_Next) c = '0'; if (c == ' ' || c == '\t' || c == '\n' || c == '1' || c == '0') { bp->kbd = c; return True; } } return False; } ENTRYPOINT void init_bit (ModeInfo *mi) { bit_configuration *bp; int i; if (!bps) { bps = (bit_configuration *) calloc (MI_NUM_SCREENS(mi), sizeof (bit_configuration)); if (!bps) { fprintf(stderr, "%s: out of memory\n", progname); exit(1); } } bp = &bps[MI_SCREEN(mi)]; bp->glx_context = init_GL(mi); reshape_bit (mi, MI_WIDTH(mi), MI_HEIGHT(mi)); { double spin_speed = 3.0; double wander_speed = 0.03 * speed; double spin_accel = 4.0; bp->rot = make_rotator (do_spin ? spin_speed : 0, do_spin ? spin_speed : 0, do_spin ? spin_speed : 0, spin_accel, do_wander ? wander_speed : 0, False); bp->trackball = gltrackball_init (False); } for (i = 0; i < countof(bp->dlists); i++) { bp->dlists[i] = glGenLists (1); glNewList (bp->dlists[i], GL_COMPILE); bp->polys [i] = make_bit (mi, i); glEndList (); } bp->frequency = 0.30 / speed; /* parity around 3x/second */ bp->confidence = 0.06; /* provide answer 1/15 or so */ for (i = 0; i < countof(bp->histogram); i++) bp->histogram[i] = 128 + (random() % 16) - 8; } ENTRYPOINT void draw_bit (ModeInfo *mi) { bit_configuration *bp = &bps[MI_SCREEN(mi)]; Display *dpy = MI_DISPLAY(mi); Window window = MI_WINDOW(mi); int wire = MI_IS_WIREFRAME(mi); if (!bp->glx_context) return; glXMakeCurrent(MI_DISPLAY(mi), MI_WINDOW(mi), *(bp->glx_context)); glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); if (!wire) { GLfloat pos[4] = {1.0, 1.0, 1.0, 0.0}; GLfloat amb[4] = {0.0, 0.0, 0.0, 1.0}; GLfloat dif[4] = {1.0, 1.0, 1.0, 1.0}; GLfloat spc[4] = {0.0, 1.0, 1.0, 1.0}; glEnable(GL_LIGHTING); glEnable(GL_LIGHT0); glLightfv(GL_LIGHT0, GL_POSITION, pos); glLightfv(GL_LIGHT0, GL_AMBIENT, amb); glLightfv(GL_LIGHT0, GL_DIFFUSE, dif); glLightfv(GL_LIGHT0, GL_SPECULAR, spc); } glPushMatrix (); glScalef(1.1, 1.1, 1.1); # ifdef HAVE_MOBILE /* Keep it the same relative size when rotated. */ { GLfloat h = MI_HEIGHT(mi) / (GLfloat) MI_WIDTH(mi); int o = (int) current_device_rotation(); if (o != 0 && o != 180 && o != -180) glScalef (1/h, 1/h, 1/h); glRotatef(o, 0, 0, 1); } # endif { double x, y, z; get_position (bp->rot, &x, &y, &z, !bp->button_down_p); glTranslatef((x - 0.5) * 11, (y - 0.5) * 5, (z - 0.5) * 3); gltrackball_rotate (bp->trackball); get_rotation (bp->rot, &x, &y, &z, !bp->button_down_p); glRotatef (x * 360, 1.0, 0.0, 0.0); glRotatef (y * 360, 0.0, 1.0, 0.0); glRotatef (z * 360, 0.0, 0.0, 1.0); } mi->polygon_count = 0; glScalef (6, 6, 6); { int nmodel = bp->history [bp->history_fp]; int omodel = bp->history [bp->history_fp > 0 ? bp->history_fp-1 : countof(bp->history)-1]; double now = double_time(); double ratio = 1 - ((bp->last_time + bp->frequency) - now) / bp->frequency; if (ratio > 1) ratio = 1; mi->polygon_count += draw_histogram (mi, ratio); mi->polygon_count += animate_bits (mi, omodel, nmodel, ratio); tick_bit (mi, now); } glPopMatrix (); if (mi->fps_p) do_fps (mi); glFinish(); glXSwapBuffers(dpy, window); } XSCREENSAVER_MODULE_2 ("TronBit", tronbit, bit) #endif /* USE_GL */ xscreensaver-5.36/hacks/glx/tronbit_idle1.c000664 000767 000024 00000031654 12701612217 020736 0ustar00jwzstaff000000 000000 /* odd parity = small triambic icosahedron */ #include "gllist.h" static const float data[]={ 0,0,1,0.263523,-0.204124,0.372678, 0,0,1,0.263523,0.10775,0.372678, 0,0,1,0.045015,0.33028,0.372678, 0,0,1,0.263523,-0.204124,0.372678, 0,0,1,0.045015,0.33028,0.372678, 0,0,1,-0.225076,0.174343,0.372678, 0,0,1,0.263523,-0.204124,0.372678, 0,0,1,-0.225076,0.174343,0.372678, 0,0,1,-0.308538,-0.126156,0.372678, 0,0,1,0.263523,-0.204124,0.372678, 0,0,1,-0.308538,-0.126156,0.372678, 0,0,1,-0.038448,-0.282093,0.372678, 0.942809,0,0.333333,0.263523,-0.204124,0.372678, 0.942809,0,0.333333,0.36418,-0.282093,0.087977, 0.942809,0,0.333333,0.45421,-0.126156,-0.166667, 0.942809,0,0.333333,0.263523,-0.204124,0.372678, 0.942809,0,0.333333,0.45421,-0.126156,-0.166667, 0.942809,0,0.333333,0.426389,0.174343,-0.087977, 0.942809,0,0.333333,0.263523,-0.204124,0.372678, 0.942809,0,0.333333,0.426389,0.174343,-0.087977, 0.942809,0,0.333333,0.336359,0.33028,0.166667, 0.942809,0,0.333333,0.263523,-0.204124,0.372678, 0.942809,0,0.333333,0.336359,0.33028,0.166667, 0.942809,0,0.333333,0.263523,0.10775,0.372678, 0.672718,0.66056,0.333333,0.263523,0.10775,0.372678, 0.672718,0.66056,0.333333,0.471405,0,0.166667, 0.672718,0.66056,0.333333,0.426389,0.174343,-0.087977, 0.672718,0.66056,0.333333,0.263523,0.10775,0.372678, 0.672718,0.66056,0.333333,0.426389,0.174343,-0.087977, 0.672718,0.66056,0.333333,0.235702,0.408248,-0.166667, 0.672718,0.66056,0.333333,0.263523,0.10775,0.372678, 0.672718,0.66056,0.333333,0.235702,0.408248,-0.166667, 0.672718,0.66056,0.333333,0.062209,0.456436,0.087977, 0.672718,0.66056,0.333333,0.263523,0.10775,0.372678, 0.672718,0.66056,0.333333,0.062209,0.456436,0.087977, 0.672718,0.66056,0.333333,0.045015,0.33028,0.372678, -0.471405,0.816497,0.333333,0.045015,0.33028,0.372678, -0.471405,0.816497,0.333333,0.062209,0.456436,0.087977, -0.471405,0.816497,0.333333,-0.117851,0.456436,-0.166667, -0.471405,0.816497,0.333333,0.045015,0.33028,0.372678, -0.471405,0.816497,0.333333,-0.117851,0.456436,-0.166667, -0.471405,0.816497,0.333333,-0.36418,0.282093,-0.087977, -0.471405,0.816497,0.333333,0.045015,0.33028,0.372678, -0.471405,0.816497,0.333333,-0.36418,0.282093,-0.087977, -0.471405,0.816497,0.333333,-0.45421,0.126156,0.166667, -0.471405,0.816497,0.333333,0.045015,0.33028,0.372678, -0.471405,0.816497,0.333333,-0.45421,0.126156,0.166667, -0.471405,0.816497,0.333333,-0.225076,0.174343,0.372678, -0.908421,0.252311,0.333333,-0.225076,0.174343,0.372678, -0.908421,0.252311,0.333333,-0.235702,0.408248,0.166667, -0.908421,0.252311,0.333333,-0.36418,0.282093,-0.087977, -0.90842,0.252312,0.333333,-0.225076,0.174343,0.372678, -0.90842,0.252312,0.333333,-0.36418,0.282093,-0.087977, -0.90842,0.252312,0.333333,-0.471405,0,-0.166667, -0.90842,0.252311,0.333334,-0.225076,0.174343,0.372678, -0.90842,0.252311,0.333334,-0.471405,0,-0.166667, -0.90842,0.252311,0.333334,-0.426389,-0.174343,0.087977, -0.908421,0.252311,0.333333,-0.225076,0.174343,0.372678, -0.908421,0.252311,0.333333,-0.426389,-0.174343,0.087977, -0.908421,0.252311,0.333333,-0.308538,-0.126156,0.372678, -0.471405,-0.816497,0.333333,-0.308538,-0.126156,0.372678, -0.471405,-0.816497,0.333333,-0.426389,-0.174343,0.087977, -0.471405,-0.816497,0.333333,-0.336359,-0.33028,-0.166667, -0.471404,-0.816497,0.333333,-0.308538,-0.126156,0.372678, -0.471404,-0.816497,0.333333,-0.336359,-0.33028,-0.166667, -0.471404,-0.816497,0.333333,-0.062209,-0.456436,-0.087977, -0.471405,-0.816497,0.333333,-0.308538,-0.126156,0.372678, -0.471405,-0.816497,0.333333,-0.062209,-0.456436,-0.087977, -0.471405,-0.816497,0.333333,0.117851,-0.456436,0.166667, -0.471405,-0.816497,0.333333,-0.308538,-0.126156,0.372678, -0.471405,-0.816497,0.333333,0.117851,-0.456436,0.166667, -0.471405,-0.816497,0.333333,-0.038448,-0.282093,0.372678, 0.235702,-0.912871,0.333333,-0.038448,-0.282093,0.372678, 0.235702,-0.912871,0.333333,-0.235702,-0.408248,0.166667, 0.235702,-0.912871,0.333333,-0.062209,-0.456436,-0.087977, 0.235702,-0.912871,0.333333,-0.038448,-0.282093,0.372678, 0.235702,-0.912871,0.333333,-0.062209,-0.456436,-0.087977, 0.235702,-0.912871,0.333333,0.235702,-0.408248,-0.166667, 0.235702,-0.912871,0.333333,-0.038448,-0.282093,0.372678, 0.235702,-0.912871,0.333333,0.235702,-0.408248,-0.166667, 0.235702,-0.912871,0.333333,0.36418,-0.282093,0.087977, 0.235702,-0.912871,0.333333,-0.038448,-0.282093,0.372678, 0.235702,-0.912871,0.333333,0.36418,-0.282093,0.087977, 0.235702,-0.912871,0.333333,0.263523,-0.204124,0.372678, 0.09003,0.66056,0.745356,0.263523,0.10775,0.372678, 0.09003,0.66056,0.745356,0.336359,0.33028,0.166667, 0.09003,0.66056,0.745356,0.062209,0.456436,0.087977, 0.09003,0.66056,0.745356,0.263523,0.10775,0.372678, 0.09003,0.66056,0.745356,0.062209,0.456436,0.087977, 0.09003,0.66056,0.745356,-0.235702,0.408248,0.166667, 0.09003,0.66056,0.745356,0.263523,0.10775,0.372678, 0.09003,0.66056,0.745356,-0.235702,0.408248,0.166667, 0.09003,0.66056,0.745356,-0.225076,0.174343,0.372678, 0.09003,0.660559,0.745356,0.263523,0.10775,0.372678, 0.09003,0.660559,0.745356,-0.225076,0.174343,0.372678, 0.09003,0.660559,0.745356,0,0,0.5, 0.471405,0.816497,-0.333333,0.336359,0.33028,0.166667, 0.471405,0.816497,-0.333333,0.426389,0.174343,-0.087977, 0.471405,0.816497,-0.333333,0.308538,0.126156,-0.372678, 0.471405,0.816497,-0.333333,0.336359,0.33028,0.166667, 0.471405,0.816497,-0.333333,0.308538,0.126156,-0.372678, 0.471405,0.816497,-0.333333,0.038448,0.282093,-0.372678, 0.471405,0.816497,-0.333333,0.336359,0.33028,0.166667, 0.471405,0.816497,-0.333333,0.038448,0.282093,-0.372678, 0.471405,0.816497,-0.333333,-0.117851,0.456436,-0.166667, 0.471404,0.816497,-0.333333,0.336359,0.33028,0.166667, 0.471404,0.816497,-0.333333,-0.117851,0.456436,-0.166667, 0.471404,0.816497,-0.333333,0.062209,0.456436,0.087977, 0.617077,0.252311,-0.745356,0.426389,0.174343,-0.087977, 0.617077,0.252311,-0.745356,0.45421,-0.126156,-0.166667, 0.617077,0.252311,-0.745356,0.225076,-0.174343,-0.372678, 0.617076,0.252311,-0.745356,0.426389,0.174343,-0.087977, 0.617076,0.252311,-0.745356,0.225076,-0.174343,-0.372678, 0.617076,0.252311,-0.745356,0,0,-0.5, 0.617077,0.252311,-0.745356,0.426389,0.174343,-0.087977, 0.617077,0.252311,-0.745356,0,0,-0.5, 0.617077,0.252311,-0.745356,0.038448,0.282093,-0.372678, 0.617077,0.252311,-0.745356,0.426389,0.174343,-0.087977, 0.617077,0.252311,-0.745356,0.038448,0.282093,-0.372678, 0.617077,0.252311,-0.745356,0.235702,0.408248,-0.166667, 0.471405,-0.816497,-0.333333,0.45421,-0.126156,-0.166667, 0.471405,-0.816497,-0.333333,0.36418,-0.282093,0.087977, 0.471405,-0.816497,-0.333333,0.117851,-0.456436,0.166667, 0.471405,-0.816497,-0.333333,0.45421,-0.126156,-0.166667, 0.471405,-0.816497,-0.333333,0.117851,-0.456436,0.166667, 0.471405,-0.816497,-0.333333,-0.062209,-0.456436,-0.087977, 0.471405,-0.816497,-0.333333,0.45421,-0.126156,-0.166667, 0.471405,-0.816497,-0.333333,-0.062209,-0.456436,-0.087977, 0.471405,-0.816497,-0.333333,-0.045015,-0.33028,-0.372678, 0.471405,-0.816497,-0.333333,0.45421,-0.126156,-0.166667, 0.471405,-0.816497,-0.333333,-0.045015,-0.33028,-0.372678, 0.471405,-0.816497,-0.333333,0.225076,-0.174343,-0.372678, -0.235702,0.912871,-0.333333,0.062209,0.456436,0.087977, -0.235702,0.912871,-0.333333,0.235702,0.408248,-0.166667, -0.235702,0.912871,-0.333333,0.038448,0.282093,-0.372678, -0.235702,0.912871,-0.333333,0.062209,0.456436,0.087977, -0.235702,0.912871,-0.333333,0.038448,0.282093,-0.372678, -0.235702,0.912871,-0.333333,-0.263523,0.204124,-0.372678, -0.235702,0.912871,-0.333333,0.062209,0.456436,0.087977, -0.235702,0.912871,-0.333333,-0.263523,0.204124,-0.372678, -0.235702,0.912871,-0.333333,-0.36418,0.282093,-0.087977, -0.235702,0.912871,-0.333333,0.062209,0.456436,0.087977, -0.235702,0.912871,-0.333333,-0.36418,0.282093,-0.087977, -0.235702,0.912871,-0.333333,-0.235702,0.408248,0.166667, 0.90842,-0.252312,-0.333334,0.426389,0.174343,-0.087977, 0.90842,-0.252312,-0.333334,0.471405,0,0.166667, 0.90842,-0.252312,-0.333334,0.36418,-0.282093,0.087977, 0.908421,-0.252311,-0.333333,0.426389,0.174343,-0.087977, 0.908421,-0.252311,-0.333333,0.36418,-0.282093,0.087977, 0.908421,-0.252311,-0.333333,0.235702,-0.408248,-0.166667, 0.908421,-0.252311,-0.333333,0.426389,0.174343,-0.087977, 0.908421,-0.252311,-0.333333,0.235702,-0.408248,-0.166667, 0.908421,-0.252311,-0.333333,0.225076,-0.174343,-0.372678, 0.908421,-0.252311,-0.333333,0.426389,0.174343,-0.087977, 0.908421,-0.252311,-0.333333,0.225076,-0.174343,-0.372678, 0.908421,-0.252311,-0.333333,0.308538,0.126156,-0.372678, 0.527046,-0.408248,0.745356,0.471405,0,0.166667, 0.527046,-0.408248,0.745356,0.263523,0.10775,0.372678, 0.527046,-0.408248,0.745356,0,0,0.5, 0.527046,-0.408248,0.745356,0.471405,0,0.166667, 0.527046,-0.408248,0.745356,0,0,0.5, 0.527046,-0.408248,0.745356,-0.038448,-0.282093,0.372678, 0.527046,-0.408248,0.745356,0.471405,0,0.166667, 0.527046,-0.408248,0.745356,-0.038448,-0.282093,0.372678, 0.527046,-0.408248,0.745356,0.117851,-0.456436,0.166667, 0.527047,-0.408249,0.745356,0.471405,0,0.166667, 0.527047,-0.408249,0.745356,0.117851,-0.456436,0.166667, 0.527047,-0.408249,0.745356,0.36418,-0.282093,0.087977, -0.617077,-0.252311,0.745356,-0.225076,0.174343,0.372678, -0.617077,-0.252311,0.745356,-0.45421,0.126156,0.166667, -0.617077,-0.252311,0.745356,-0.426389,-0.174343,0.087977, -0.617077,-0.252311,0.745356,-0.225076,0.174343,0.372678, -0.617077,-0.252311,0.745356,-0.426389,-0.174343,0.087977, -0.617077,-0.252311,0.745356,-0.235702,-0.408248,0.166667, -0.617077,-0.252311,0.745356,-0.225076,0.174343,0.372678, -0.617077,-0.252311,0.745356,-0.235702,-0.408248,0.166667, -0.617077,-0.252311,0.745356,-0.038448,-0.282093,0.372678, -0.617076,-0.252311,0.745356,-0.225076,0.174343,0.372678, -0.617076,-0.252311,0.745356,-0.038448,-0.282093,0.372678, -0.617076,-0.252311,0.745356,0,0,0.5, -0.942809,0,-0.333333,-0.45421,0.126156,0.166667, -0.942809,0,-0.333333,-0.36418,0.282093,-0.087977, -0.942809,0,-0.333333,-0.263523,0.204124,-0.372678, -0.942809,0,-0.333333,-0.45421,0.126156,0.166667, -0.942809,0,-0.333333,-0.263523,0.204124,-0.372678, -0.942809,0,-0.333333,-0.263523,-0.10775,-0.372678, -0.942809,0,-0.333333,-0.45421,0.126156,0.166667, -0.942809,0,-0.333333,-0.263523,-0.10775,-0.372678, -0.942809,0,-0.333333,-0.336359,-0.33028,-0.166667, -0.942809,0,-0.333333,-0.45421,0.126156,0.166667, -0.942809,0,-0.333333,-0.336359,-0.33028,-0.166667, -0.942809,0,-0.333333,-0.426389,-0.174343,0.087977, -0.527046,0.408248,-0.745356,-0.36418,0.282093,-0.087977, -0.527046,0.408248,-0.745356,-0.117851,0.456436,-0.166667, -0.527046,0.408248,-0.745356,0.038448,0.282093,-0.372678, -0.527046,0.408248,-0.745356,-0.36418,0.282093,-0.087977, -0.527046,0.408248,-0.745356,0.038448,0.282093,-0.372678, -0.527046,0.408248,-0.745356,0,0,-0.5, -0.527046,0.408248,-0.745356,-0.36418,0.282093,-0.087977, -0.527046,0.408248,-0.745356,0,0,-0.5, -0.527046,0.408248,-0.745356,-0.263523,-0.10775,-0.372678, -0.527046,0.408249,-0.745356,-0.36418,0.282093,-0.087977, -0.527046,0.408249,-0.745356,-0.263523,-0.10775,-0.372678, -0.527046,0.408249,-0.745356,-0.471405,0,-0.166667, -0.672718,-0.66056,-0.333333,-0.426389,-0.174343,0.087977, -0.672718,-0.66056,-0.333333,-0.471405,0,-0.166667, -0.672718,-0.66056,-0.333333,-0.263523,-0.10775,-0.372678, -0.672718,-0.66056,-0.333333,-0.426389,-0.174343,0.087977, -0.672718,-0.66056,-0.333333,-0.263523,-0.10775,-0.372678, -0.672718,-0.66056,-0.333333,-0.045015,-0.33028,-0.372678, -0.672718,-0.66056,-0.333333,-0.426389,-0.174343,0.087977, -0.672718,-0.66056,-0.333333,-0.045015,-0.33028,-0.372678, -0.672718,-0.66056,-0.333333,-0.062209,-0.456436,-0.087977, -0.672718,-0.66056,-0.333333,-0.426389,-0.174343,0.087977, -0.672718,-0.66056,-0.333333,-0.062209,-0.456436,-0.087977, -0.672718,-0.66056,-0.333333,-0.235702,-0.408248,0.166667, -0.09003,-0.66056,-0.745356,-0.062209,-0.456436,-0.087977, -0.09003,-0.66056,-0.745356,-0.336359,-0.33028,-0.166667, -0.09003,-0.66056,-0.745356,-0.263523,-0.10775,-0.372678, -0.09003,-0.66056,-0.745356,-0.062209,-0.456436,-0.087977, -0.09003,-0.66056,-0.745356,-0.263523,-0.10775,-0.372678, -0.09003,-0.66056,-0.745356,0,0,-0.5, -0.09003,-0.66056,-0.745356,-0.062209,-0.456436,-0.087977, -0.09003,-0.66056,-0.745356,0,0,-0.5, -0.09003,-0.66056,-0.745356,0.225076,-0.174343,-0.372678, -0.09003,-0.66056,-0.745356,-0.062209,-0.456436,-0.087977, -0.09003,-0.66056,-0.745356,0.225076,-0.174343,-0.372678, -0.09003,-0.66056,-0.745356,0.235702,-0.408248,-0.166667, 0,0,-1,0.308538,0.126156,-0.372678, 0,0,-1,0.225076,-0.174343,-0.372678, 0,0,-1,-0.045015,-0.33028,-0.372678, 0,0,-1,0.308538,0.126156,-0.372678, 0,0,-1,-0.045015,-0.33028,-0.372678, 0,0,-1,-0.263523,-0.10775,-0.372678, 0,0,-1,0.308538,0.126156,-0.372678, 0,0,-1,-0.263523,-0.10775,-0.372678, 0,0,-1,-0.263523,0.204124,-0.372678, 0,0,-1,0.308538,0.126156,-0.372678, 0,0,-1,-0.263523,0.204124,-0.372678, 0,0,-1,0.038448,0.282093,-0.372678 }; static const struct gllist frame={GL_N3F_V3F,GL_TRIANGLES,240,data,NULL}; const struct gllist *tronbit_idle1=&frame; xscreensaver-5.36/hacks/glx/tronbit_idle2.c000664 000767 000024 00000021372 12701612217 020733 0ustar00jwzstaff000000 000000 /* even parity = compound of icosahedron and dodecahedron */ #include "gllist.h" static const float data[]={ 0.491123,0.356822,0.794655,0.138196,0.425326,0.223607, 0.491123,0.356822,0.794655,0,0,0.5, 0.491123,0.356822,0.794655,0.447213,0,0.223607, -0.187593,0.57735,0.794655,-0.361804,0.262865,0.223607, -0.187593,0.57735,0.794655,0,0,0.5, -0.187593,0.57735,0.794655,0.138196,0.425326,0.223607, -0.607062,0,0.794655,-0.361804,-0.262865,0.223607, -0.607062,0,0.794655,0,0,0.5, -0.607062,0,0.794655,-0.361804,0.262865,0.223607, -0.187593,-0.57735,0.794655,0.138196,-0.425326,0.223607, -0.187593,-0.57735,0.794655,0,0,0.5, -0.187593,-0.57735,0.794655,-0.361804,-0.262865,0.223607, 0.491123,-0.356822,0.794655,0,0,0.5, 0.491123,-0.356822,0.794655,0.138196,-0.425326,0.223607, 0.491123,-0.356822,0.794655,0.447213,0,0.223607, 0.794655,-0.57735,0.187593,0.361804,-0.262865,-0.223607, 0.794655,-0.57735,0.187593,0.447213,0,0.223607, 0.794655,-0.57735,0.187593,0.138196,-0.425326,0.223607, 0.982247,0,-0.187592,0.447213,0,0.223607, 0.982247,0,-0.187592,0.361804,-0.262865,-0.223607, 0.982247,0,-0.187592,0.361804,0.262865,-0.223607, 0.794655,0.57735,0.187593,0.447213,0,0.223607, 0.794655,0.57735,0.187593,0.361804,0.262865,-0.223607, 0.794655,0.57735,0.187593,0.138196,0.425326,0.223607, 0.303531,0.934172,-0.187592,-0.138196,0.425326,-0.223607, 0.303531,0.934172,-0.187592,0.138196,0.425326,0.223607, 0.303531,0.934172,-0.187592,0.361804,0.262865,-0.223607, -0.303531,0.934172,0.187592,0.138196,0.425326,0.223607, -0.303531,0.934172,0.187592,-0.138196,0.425326,-0.223607, -0.303531,0.934172,0.187592,-0.361804,0.262865,0.223607, -0.794655,0.57735,-0.187593,-0.447213,0,-0.223607, -0.794655,0.57735,-0.187593,-0.361804,0.262865,0.223607, -0.794655,0.57735,-0.187593,-0.138196,0.425326,-0.223607, -0.982247,0,0.187592,-0.361804,0.262865,0.223607, -0.982247,0,0.187592,-0.447213,0,-0.223607, -0.982247,0,0.187592,-0.361804,-0.262865,0.223607, -0.794655,-0.57735,-0.187593,-0.138196,-0.425326,-0.223607, -0.794655,-0.57735,-0.187593,-0.361804,-0.262865,0.223607, -0.794655,-0.57735,-0.187593,-0.447213,0,-0.223607, -0.303531,-0.934172,0.187592,-0.361804,-0.262865,0.223607, -0.303531,-0.934172,0.187592,-0.138196,-0.425326,-0.223607, -0.303531,-0.934172,0.187592,0.138196,-0.425326,0.223607, 0.303531,-0.934172,-0.187592,0.138196,-0.425326,0.223607, 0.303531,-0.934172,-0.187592,-0.138196,-0.425326,-0.223607, 0.303531,-0.934172,-0.187592,0.361804,-0.262865,-0.223607, 0.607062,0,-0.794655,0,0,-0.5, 0.607062,0,-0.794655,0.361804,0.262865,-0.223607, 0.607062,0,-0.794655,0.361804,-0.262865,-0.223607, 0.187593,0.57735,-0.794655,0.361804,0.262865,-0.223607, 0.187593,0.57735,-0.794655,0,0,-0.5, 0.187593,0.57735,-0.794655,-0.138196,0.425326,-0.223607, 0.187593,-0.57735,-0.794655,0,0,-0.5, 0.187593,-0.57735,-0.794655,0.361804,-0.262865,-0.223607, 0.187593,-0.57735,-0.794655,-0.138196,-0.425326,-0.223607, -0.491123,0.356822,-0.794655,-0.138196,0.425326,-0.223607, -0.491123,0.356822,-0.794655,0,0,-0.5, -0.491123,0.356822,-0.794655,-0.447213,0,-0.223607, -0.491123,-0.356822,-0.794655,-0.447213,0,-0.223607, -0.491123,-0.356822,-0.794655,0,0,-0.5, -0.491123,-0.356822,-0.794655,-0.138196,-0.425326,-0.223607, 0,0,1,0.223607,0.16246,0.361804, 0,0,1,-0.08541,0.262865,0.361804, 0,0,1,-0.276393,0,0.361804, 0,0,1,0.223607,0.16246,0.361804, 0,0,1,-0.276393,0,0.361804, 0,0,1,-0.08541,-0.262865,0.361804, 0,0,1,0.223607,0.16246,0.361804, 0,0,1,-0.08541,-0.262865,0.361804, 0,0,1,0.223607,-0.16246,0.361804, 0.894427,0,0.447214,0.361804,-0.262865,0.08541, 0.894427,0,0.447214,0.447213,0,-0.08541, 0.894427,0,0.447214,0.361804,0.262865,0.08541, 0.894428,0,0.447213,0.361804,-0.262865,0.08541, 0.894428,0,0.447213,0.361804,0.262865,0.08541, 0.894428,0,0.447213,0.223607,0.16246,0.361804, 0.894428,0,0.447213,0.361804,-0.262865,0.08541, 0.894428,0,0.447213,0.223607,0.16246,0.361804, 0.894428,0,0.447213,0.223607,-0.16246,0.361804, 0.276393,0.85065,0.447214,0.361804,0.262865,0.08541, 0.276393,0.85065,0.447214,0.138196,0.425326,-0.08541, 0.276393,0.85065,0.447214,-0.138196,0.425326,0.08541, 0.276393,0.850651,0.447213,0.361804,0.262865,0.08541, 0.276393,0.850651,0.447213,-0.138196,0.425326,0.08541, 0.276393,0.850651,0.447213,-0.08541,0.262865,0.361804, 0.276393,0.850652,0.447212,0.361804,0.262865,0.08541, 0.276393,0.850652,0.447212,-0.08541,0.262865,0.361804, 0.276393,0.850652,0.447212,0.223607,0.16246,0.361804, -0.723606,0.525731,0.447215,-0.138196,0.425326,0.08541, -0.723606,0.525731,0.447215,-0.361804,0.262865,-0.08541, -0.723606,0.525731,0.447215,-0.447213,0,0.08541, -0.723607,0.525731,0.447213,-0.138196,0.425326,0.08541, -0.723607,0.525731,0.447213,-0.447213,0,0.08541, -0.723607,0.525731,0.447213,-0.276393,0,0.361804, -0.723607,0.525731,0.447214,-0.138196,0.425326,0.08541, -0.723607,0.525731,0.447214,-0.276393,0,0.361804, -0.723607,0.525731,0.447214,-0.08541,0.262865,0.361804, -0.723606,-0.525731,0.447215,-0.447213,0,0.08541, -0.723606,-0.525731,0.447215,-0.361804,-0.262865,-0.08541, -0.723606,-0.525731,0.447215,-0.138196,-0.425326,0.08541, -0.723607,-0.525731,0.447214,-0.447213,0,0.08541, -0.723607,-0.525731,0.447214,-0.138196,-0.425326,0.08541, -0.723607,-0.525731,0.447214,-0.08541,-0.262865,0.361804, -0.723607,-0.525731,0.447213,-0.447213,0,0.08541, -0.723607,-0.525731,0.447213,-0.08541,-0.262865,0.361804, -0.723607,-0.525731,0.447213,-0.276393,0,0.361804, 0.276393,-0.85065,0.447214,-0.138196,-0.425326,0.08541, 0.276393,-0.85065,0.447214,0.138196,-0.425326,-0.08541, 0.276393,-0.85065,0.447214,0.361804,-0.262865,0.08541, 0.276394,-0.850651,0.447213,-0.138196,-0.425326,0.08541, 0.276394,-0.850651,0.447213,0.361804,-0.262865,0.08541, 0.276394,-0.850651,0.447213,0.223607,-0.16246,0.361804, 0.276393,-0.850651,0.447214,-0.138196,-0.425326,0.08541, 0.276393,-0.850651,0.447214,0.223607,-0.16246,0.361804, 0.276393,-0.850651,0.447214,-0.08541,-0.262865,0.361804, 0.723607,0.525731,-0.447213,0.447213,0,-0.08541, 0.723607,0.525731,-0.447213,0.276393,0,-0.361804, 0.723607,0.525731,-0.447213,0.08541,0.262865,-0.361804, 0.723607,0.525731,-0.447214,0.447213,0,-0.08541, 0.723607,0.525731,-0.447214,0.08541,0.262865,-0.361804, 0.723607,0.525731,-0.447214,0.138196,0.425326,-0.08541, 0.723606,0.525731,-0.447215,0.447213,0,-0.08541, 0.723606,0.525731,-0.447215,0.138196,0.425326,-0.08541, 0.723606,0.525731,-0.447215,0.361804,0.262865,0.08541, 0.723606,-0.525732,-0.447214,0.361804,-0.262865,0.08541, 0.723606,-0.525732,-0.447214,0.138196,-0.425326,-0.08541, 0.723606,-0.525732,-0.447214,0.08541,-0.262865,-0.361804, 0.723607,-0.525731,-0.447214,0.361804,-0.262865,0.08541, 0.723607,-0.525731,-0.447214,0.08541,-0.262865,-0.361804, 0.723607,-0.525731,-0.447214,0.276393,0,-0.361804, 0.723607,-0.52573,-0.447214,0.361804,-0.262865,0.08541, 0.723607,-0.52573,-0.447214,0.276393,0,-0.361804, 0.723607,-0.52573,-0.447214,0.447213,0,-0.08541, -0.276393,0.850651,-0.447214,0.138196,0.425326,-0.08541, -0.276393,0.850651,-0.447214,0.08541,0.262865,-0.361804, -0.276393,0.850651,-0.447214,-0.223607,0.16246,-0.361804, -0.276394,0.850651,-0.447213,0.138196,0.425326,-0.08541, -0.276394,0.850651,-0.447213,-0.223607,0.16246,-0.361804, -0.276394,0.850651,-0.447213,-0.361804,0.262865,-0.08541, -0.276393,0.85065,-0.447214,0.138196,0.425326,-0.08541, -0.276393,0.85065,-0.447214,-0.361804,0.262865,-0.08541, -0.276393,0.85065,-0.447214,-0.138196,0.425326,0.08541, -0.894428,0,-0.447213,-0.361804,0.262865,-0.08541, -0.894428,0,-0.447213,-0.223607,0.16246,-0.361804, -0.894428,0,-0.447213,-0.223607,-0.16246,-0.361804, -0.894428,0,-0.447213,-0.361804,0.262865,-0.08541, -0.894428,0,-0.447213,-0.223607,-0.16246,-0.361804, -0.894428,0,-0.447213,-0.361804,-0.262865,-0.08541, -0.894427,0,-0.447214,-0.361804,0.262865,-0.08541, -0.894427,0,-0.447214,-0.361804,-0.262865,-0.08541, -0.894427,0,-0.447214,-0.447213,0,0.08541, -0.276393,-0.850652,-0.447212,-0.361804,-0.262865,-0.08541, -0.276393,-0.850652,-0.447212,-0.223607,-0.16246,-0.361804, -0.276393,-0.850652,-0.447212,0.08541,-0.262865,-0.361804, -0.276393,-0.850651,-0.447213,-0.361804,-0.262865,-0.08541, -0.276393,-0.850651,-0.447213,0.08541,-0.262865,-0.361804, -0.276393,-0.850651,-0.447213,0.138196,-0.425326,-0.08541, -0.276393,-0.85065,-0.447214,-0.361804,-0.262865,-0.08541, -0.276393,-0.85065,-0.447214,0.138196,-0.425326,-0.08541, -0.276393,-0.85065,-0.447214,-0.138196,-0.425326,0.08541, 0,0,-1,0.08541,-0.262865,-0.361804, 0,0,-1,-0.223607,-0.16246,-0.361804, 0,0,-1,-0.223607,0.16246,-0.361804, 0,0,-1,0.08541,-0.262865,-0.361804, 0,0,-1,-0.223607,0.16246,-0.361804, 0,0,-1,0.08541,0.262865,-0.361804, 0,0,-1,0.08541,-0.262865,-0.361804, 0,0,-1,0.08541,0.262865,-0.361804, 0,0,-1,0.276393,0,-0.361804 }; static const struct gllist frame={GL_N3F_V3F,GL_TRIANGLES,168,data,NULL}; const struct gllist *tronbit_idle2=&frame; xscreensaver-5.36/hacks/glx/tronbit_no.c000664 000767 000024 00000165674 12701612217 020366 0ustar00jwzstaff000000 000000 /* no = second stellation of icosahedron */ #include "gllist.h" static const float data[]={ -0.491121,-0.356821,-0.794656,-0.072949,0.100406,-0.118034, -0.491121,-0.356821,-0.794656,-0.11459,0.117557,-0.1, -0.491121,-0.356821,-0.794656,-0.138196,0.425325,-0.223606, -0.491129,-0.356821,-0.794652,-0.038197,0.117557,-0.147214, -0.491129,-0.356821,-0.794652,-0.072949,0.100406,-0.118034, -0.491129,-0.356821,-0.794652,-0.138196,0.425325,-0.223606, -0.491121,-0.356826,-0.794654,-0.138196,-0.100406,0.012461, -0.491121,-0.356826,-0.794654,-0.123606,-0.145308,0.023607, -0.491121,-0.356826,-0.794654,-0.361803,-0.262865,0.223606, -0.491119,-0.356829,-0.794654,-0.176394,-0.072654,0.023607, -0.491119,-0.356829,-0.794654,-0.138196,-0.100406,0.012461, -0.491119,-0.356829,-0.794654,-0.361803,-0.262865,0.223606, -0.491125,-0.356827,-0.794651,0.072949,-0.100406,-0.118034, -0.491125,-0.356827,-0.794651,0.1,-0.072654,-0.147214, -0.491125,-0.356827,-0.794651,0.361803,-0.262865,-0.223606, -0.491124,-0.356824,-0.794654,0.076393,-0.145308,-0.1, -0.491124,-0.356824,-0.794654,0.072949,-0.100406,-0.118034, -0.491124,-0.356824,-0.794654,0.361803,-0.262865,-0.223606, -0.491124,-0.356822,-0.794654,-0.150658,0.062054,-0.052786, -0.491124,-0.356822,-0.794654,-0.18541,0.044903,-0.023607, -0.491124,-0.356822,-0.794654,-0.223606,0.162459,-0.052786, -0.491128,-0.356819,-0.794653,-0.052786,-0.162459,-0.012461, -0.491128,-0.356819,-0.794653,-0.01459,-0.190211,-0.023607, -0.491128,-0.356819,-0.794653,-0.08541,-0.262865,0.052786, -0.491122,-0.356835,-0.79465,0.065247,0,-0.158359, -0.491122,-0.356835,-0.79465,0.061803,0.044903,-0.176394, -0.491122,-0.356835,-0.79465,0.17082,0,-0.223606, -0.491135,-0.356817,-0.79465,0.061803,0.044903,-0.176394, -0.491135,-0.356817,-0.79465,0.020163,0.062054,-0.158359, -0.491135,-0.356817,-0.79465,0.052786,0.162459,-0.223606, -0.491124,-0.356824,-0.794654,-0.18541,0.044903,-0.023607, -0.491124,-0.356824,-0.794654,-0.17082,0,-0.012461, -0.491124,-0.356824,-0.794654,-0.276393,0,0.052786, -0.49112,-0.35682,-0.794658,-0.01459,-0.190211,-0.023607, -0.49112,-0.35682,-0.794658,0.012461,-0.162459,-0.052786, -0.49112,-0.35682,-0.794658,0.08541,-0.262865,-0.052786, -0.491124,-0.35682,-0.794655,-0.11459,0.117557,-0.1, -0.491124,-0.35682,-0.794655,-0.111804,0.08123,-0.08541, -0.491124,-0.35682,-0.794655,-0.223606,0.162459,-0.052786, -0.491133,-0.356822,-0.794648,-0.123606,-0.145308,0.023607, -0.491133,-0.356822,-0.794648,-0.095491,-0.131433,0, -0.491133,-0.356822,-0.794648,-0.08541,-0.262865,0.052786, -0.491129,-0.356813,-0.794655,0.1,-0.072654,-0.147214, -0.491129,-0.356813,-0.794655,0.069098,-0.050203,-0.138196, -0.491129,-0.356813,-0.794655,0.17082,0,-0.223606, -0.491117,-0.35683,-0.794655,-0.026393,0.08123,-0.138196, -0.491117,-0.35683,-0.794655,-0.038197,0.117557,-0.147214, -0.491117,-0.35683,-0.794655,0.052786,0.162459,-0.223606, -0.491122,-0.356812,-0.79466,-0.154508,-0.050203,0, -0.491122,-0.356812,-0.79466,-0.176394,-0.072654,0.023607, -0.491122,-0.356812,-0.79466,-0.276393,0,0.052786, -0.491117,-0.356823,-0.794658,0.042705,-0.131433,-0.08541, -0.491117,-0.356823,-0.794658,0.076393,-0.145308,-0.1, -0.491117,-0.356823,-0.794658,0.08541,-0.262865,-0.052786, -0.607065,0.000003,0.794652,0,0.124108,0.118034, -0.607065,0.000003,0.794652,0.038197,0.117557,0.147214, -0.607065,0.000003,0.794652,0.138196,0.425325,0.223606, -0.607062,0,0.794655,-0.023607,0.162459,0.1, -0.607062,0,0.794655,0,0.124108,0.118034, -0.607062,0,0.794655,0.138196,0.425325,0.223606, -0.607062,0,0.794655,0,-0.124108,0.118034, -0.607062,0,0.794655,-0.023607,-0.162459,0.1, -0.607062,0,0.794655,0.138196,-0.425325,0.223606, -0.607065,-0.000003,0.794652,0.038197,-0.117557,0.147214, -0.607065,-0.000003,0.794652,0,-0.124108,0.118034, -0.607065,-0.000003,0.794652,0.138196,-0.425325,0.223606, -0.607062,-0.000002,0.794654,-0.17082,0,-0.012461, -0.607062,-0.000002,0.794654,-0.18541,0.044903,-0.023607, -0.607062,-0.000002,0.794654,-0.447213,0,-0.223606, -0.607062,0.000002,0.794654,-0.18541,-0.044903,-0.023607, -0.607062,0.000002,0.794654,-0.17082,0,-0.012461, -0.607062,0.000002,0.794654,-0.447213,0,-0.223606, -0.607069,0.000012,0.794649,0.052786,0.038352,0.158359, -0.607069,0.000012,0.794649,0.076393,0,0.176394, -0.607069,0.000012,0.794649,0.138196,0.100406,0.223606, -0.607066,0,0.794652,-0.08541,-0.138758,0.052786, -0.607066,0,0.794652,-0.123606,-0.145308,0.023607, -0.607066,0,0.794652,-0.08541,-0.262865,0.052786, -0.607061,0.000001,0.794655,-0.138196,0.100406,0.012461, -0.607061,0.000001,0.794655,-0.123606,0.145308,0.023607, -0.607061,0.000001,0.794655,-0.223606,0.162459,-0.052786, -0.607066,0,0.794652,-0.123606,0.145308,0.023607, -0.607066,0,0.794652,-0.08541,0.138758,0.052786, -0.607066,0,0.794652,-0.08541,0.262865,0.052786, -0.607069,-0.000012,0.794649,0.076393,0,0.176394, -0.607069,-0.000012,0.794649,0.052786,-0.038352,0.158359, -0.607069,-0.000012,0.794649,0.138196,-0.100406,0.223606, -0.607061,-0.000001,0.794655,-0.123606,-0.145308,0.023607, -0.607061,-0.000001,0.794655,-0.138196,-0.100406,0.012461, -0.607061,-0.000001,0.794655,-0.223606,-0.162459,-0.052786, -0.607061,-0.00001,0.794655,0.038197,0.117557,0.147214, -0.607061,-0.00001,0.794655,0.026393,0.08123,0.138196, -0.607061,-0.00001,0.794655,0.138196,0.100406,0.223606, -0.607061,0,0.794655,-0.023607,-0.162459,0.1, -0.607061,0,0.794655,-0.042705,-0.131433,0.08541, -0.607061,0,0.794655,-0.08541,-0.262865,0.052786, -0.60706,0.000002,0.794656,-0.18541,0.044903,-0.023607, -0.60706,0.000002,0.794656,-0.154508,0.050203,0, -0.60706,0.000002,0.794656,-0.223606,0.162459,-0.052786, -0.607061,0,0.794655,-0.042705,0.131433,0.08541, -0.607061,0,0.794655,-0.023607,0.162459,0.1, -0.607061,0,0.794655,-0.08541,0.262865,0.052786, -0.607061,0.00001,0.794655,0.026393,-0.08123,0.138196, -0.607061,0.00001,0.794655,0.038197,-0.117557,0.147214, -0.607061,0.00001,0.794655,0.138196,-0.100406,0.223606, -0.60706,-0.000002,0.794656,-0.154508,-0.050203,0, -0.60706,-0.000002,0.794656,-0.18541,-0.044903,-0.023607, -0.60706,-0.000002,0.794656,-0.223606,-0.162459,-0.052786, 0.303526,0.934174,-0.187592,0.020163,0.062054,-0.158359, 0.303526,0.934174,-0.187592,0.061803,0.044903,-0.176394, 0.303526,0.934174,-0.187592,0,0,-0.5, 0.303535,0.934171,-0.187592,-0.023607,0.072654,-0.176394, 0.303535,0.934171,-0.187592,0.020163,0.062054,-0.158359, 0.303535,0.934171,-0.187592,0,0,-0.5, 0.303532,0.934172,-0.187594,0.150658,0.062054,0.052786, 0.303532,0.934172,-0.187594,0.147214,0.072654,0.1, 0.303532,0.934172,-0.187594,0.447213,0,0.223606, 0.303531,0.934173,-0.187591,0.18541,0.044903,0.023607, 0.303531,0.934173,-0.187591,0.150658,0.062054,0.052786, 0.303531,0.934173,-0.187591,0.447213,0,0.223606, 0.303523,0.934173,-0.187603,-0.08541,0.138758,0.052786, 0.303523,0.934173,-0.187603,-0.123606,0.145308,0.023607, 0.303523,0.934173,-0.187603,-0.361803,0.262865,0.223606, 0.303538,0.934173,-0.187579,-0.076393,0.145308,0.1, 0.303538,0.934173,-0.187579,-0.08541,0.138758,0.052786, 0.303538,0.934173,-0.187579,-0.361803,0.262865,0.223606, 0.303529,0.934173,-0.187594,0.118034,0.038352,-0.118034, 0.303529,0.934173,-0.187594,0.161804,0.027751,-0.1, 0.303529,0.934173,-0.187594,0.17082,0,-0.223606, 0.30353,0.934173,-0.187591,0.072949,0.100406,0.118034, 0.30353,0.934173,-0.187591,0.038197,0.117557,0.147214, 0.30353,0.934173,-0.187591,0.138196,0.100406,0.223606, 0.303526,0.934172,-0.187599,-0.105573,0.124108,-0.052786, 0.303526,0.934172,-0.187599,-0.11459,0.117557,-0.1, 0.303526,0.934172,-0.187599,-0.223606,0.162459,-0.052786, 0.30353,0.934173,-0.187591,-0.11459,0.117557,-0.1, 0.30353,0.934173,-0.187591,-0.072949,0.100406,-0.118034, 0.30353,0.934173,-0.187591,-0.138196,0.100406,-0.223606, 0.303531,0.934173,-0.187588,0.161804,0.027751,-0.1, 0.303531,0.934173,-0.187588,0.158359,0.038352,-0.052786, 0.303531,0.934173,-0.187588,0.276393,0,-0.052786, 0.303534,0.934173,-0.187586,0.038197,0.117557,0.147214, 0.303534,0.934173,-0.187586,0,0.124108,0.118034, 0.303534,0.934173,-0.187586,-0.052786,0.162459,0.223606, 0.303535,0.934172,-0.187588,0.061803,0.044903,-0.176394, 0.303535,0.934172,-0.187588,0.069098,0.050203,-0.138196, 0.303535,0.934172,-0.187588,0.17082,0,-0.223606, 0.303531,0.934173,-0.187592,0.147214,0.072654,0.1, 0.303531,0.934173,-0.187592,0.111804,0.08123,0.08541, 0.303531,0.934173,-0.187592,0.138196,0.100406,0.223606, 0.303524,0.934177,-0.187583,-0.123606,0.145308,0.023607, 0.303524,0.934177,-0.187583,-0.095491,0.131433,0, 0.303524,0.934177,-0.187583,-0.223606,0.162459,-0.052786, 0.303529,0.934174,-0.187588,-0.026393,0.08123,-0.138196, 0.303529,0.934174,-0.187588,-0.023607,0.072654,-0.176394, 0.303529,0.934174,-0.187588,-0.138196,0.100406,-0.223606, 0.30353,0.934172,-0.187595,0.154508,0.050203,0, 0.30353,0.934172,-0.187595,0.18541,0.044903,0.023607, 0.30353,0.934172,-0.187595,0.276393,0,-0.052786, 0.303516,0.934178,-0.18759,-0.042705,0.131433,0.08541, 0.303516,0.934178,-0.18759,-0.076393,0.145308,0.1, 0.303516,0.934178,-0.18759,-0.052786,0.162459,0.223606, 0.794658,-0.577347,0.187587,0.012461,-0.162459,-0.052786, 0.794658,-0.577347,0.187587,-0.01459,-0.190211,-0.023607, 0.794658,-0.577347,0.187587,-0.138196,-0.425325,-0.223606, 0.794655,-0.577349,0.187593,0.023607,-0.162459,-0.1, 0.794655,-0.577349,0.187593,0.012461,-0.162459,-0.052786, 0.794655,-0.577349,0.187593,-0.138196,-0.425325,-0.223606, 0.794653,-0.577353,0.187592,0.052786,-0.038352,0.158359, 0.794653,-0.577353,0.187592,0.076393,0,0.176394, 0.794653,-0.577353,0.187592,0,0,0.5, 0.794657,-0.577347,0.187592,0.023607,-0.072654,0.176394, 0.794657,-0.577347,0.187592,0.052786,-0.038352,0.158359, 0.794657,-0.577347,0.187592,0,0,0.5, 0.794656,-0.577344,0.187604,0.158359,0.038352,-0.052786, 0.794656,-0.577344,0.187604,0.161804,0.027751,-0.1, 0.794656,-0.577344,0.187604,0.361803,0.262865,-0.223606, 0.794652,-0.577358,0.18758,0.176394,0.072654,-0.023607, 0.794652,-0.577358,0.18758,0.158359,0.038352,-0.052786, 0.794652,-0.577358,0.18758,0.361803,0.262865,-0.223606, 0.794654,-0.57735,0.187593,-0.012461,-0.162459,0.052786, 0.794654,-0.57735,0.187593,-0.023607,-0.162459,0.1, 0.794654,-0.57735,0.187593,-0.08541,-0.262865,0.052786, 0.794652,-0.577353,0.187596,0.118034,0.038352,0.118034, 0.794652,-0.577353,0.187596,0.147214,0.072654,0.1, 0.794652,-0.577353,0.187596,0.138196,0.100406,0.223606, 0.794654,-0.577351,0.187592,0.118034,-0.038352,-0.118034, 0.794654,-0.577351,0.187592,0.1,-0.072654,-0.147214, 0.794654,-0.577351,0.187592,0.17082,0,-0.223606, 0.794655,-0.57735,0.18759,0.1,-0.072654,-0.147214, 0.794655,-0.57735,0.18759,0.072949,-0.100406,-0.118034, 0.794655,-0.57735,0.18759,0.052786,-0.162459,-0.223606, 0.79465,-0.577356,0.187592,-0.023607,-0.162459,0.1, 0.79465,-0.577356,0.187592,0,-0.124108,0.118034, 0.79465,-0.577356,0.187592,-0.052786,-0.162459,0.223606, 0.794655,-0.577351,0.187588,0.147214,0.072654,0.1, 0.794655,-0.577351,0.187588,0.150658,0.062054,0.052786, 0.794655,-0.577351,0.187588,0.223606,0.162459,0.052786, 0.794655,-0.577346,0.187602,-0.01459,-0.190211,-0.023607, 0.794655,-0.577346,0.187602,0,-0.162459,0, 0.794655,-0.577346,0.187602,-0.08541,-0.262865,0.052786, 0.794657,-0.577348,0.18759,0.076393,0,0.176394, 0.794657,-0.577348,0.18759,0.08541,0,0.138196, 0.794657,-0.577348,0.18759,0.138196,0.100406,0.223606, 0.794646,-0.577362,0.187591,0.161804,0.027751,-0.1, 0.794646,-0.577362,0.187591,0.138196,0,-0.08541, 0.794646,-0.577362,0.187591,0.17082,0,-0.223606, 0.794649,-0.577358,0.187592,0.042705,-0.131433,-0.08541, 0.794649,-0.577358,0.187592,0.023607,-0.162459,-0.1, 0.794649,-0.577358,0.187592,0.052786,-0.162459,-0.223606, 0.794652,-0.577354,0.18759,0.026393,-0.08123,0.138196, 0.794652,-0.577354,0.18759,0.023607,-0.072654,0.176394, 0.794652,-0.577354,0.18759,-0.052786,-0.162459,0.223606, 0.794648,-0.577354,0.187607,0.154508,0.050203,0, 0.794648,-0.577354,0.187607,0.176394,0.072654,-0.023607, 0.794648,-0.577354,0.187607,0.223606,0.162459,0.052786, -0.187591,0.577356,0.794651,0.118034,0.038352,0.118034, -0.187591,0.577356,0.794651,0.123606,0,0.147214, -0.187591,0.577356,0.794651,0.447213,0,0.223606, -0.187592,0.577351,0.794654,0.147214,0.072654,0.1, -0.187592,0.577351,0.794654,0.118034,0.038352,0.118034, -0.187592,0.577351,0.794654,0.447213,0,0.223606, -0.187591,0.577349,0.794656,-0.118034,-0.038352,0.118034, -0.187591,0.577349,0.794656,-0.161804,-0.027751,0.1, -0.187591,0.577349,0.794656,-0.361803,-0.262865,0.223606, -0.187596,0.577353,0.794652,-0.1,-0.072654,0.147214, -0.187596,0.577353,0.794652,-0.118034,-0.038352,0.118034, -0.187596,0.577353,0.794652,-0.361803,-0.262865,0.223606, -0.1876,0.577347,0.794655,-0.052786,0.162459,-0.012461, -0.1876,0.577347,0.794655,-0.01459,0.190211,-0.023607, -0.1876,0.577347,0.794655,-0.138196,0.425325,-0.223606, -0.187593,0.577349,0.794655,-0.1,0.162459,-0.023607, -0.187593,0.577349,0.794655,-0.052786,0.162459,-0.012461, -0.187593,0.577349,0.794655,-0.138196,0.425325,-0.223606, -0.187583,0.57736,0.79465,0.052786,-0.038352,0.158359, -0.187583,0.57736,0.79465,0.023607,-0.072654,0.176394, -0.187583,0.57736,0.79465,0.138196,-0.100406,0.223606, -0.187592,0.577347,0.794657,-0.158359,0.038352,0.052786, -0.187592,0.577347,0.794657,-0.176394,0.072654,0.023607, -0.187592,0.577347,0.794657,-0.276393,0,0.052786, -0.187593,0.57735,0.794654,0.052786,0.162459,0.012461, -0.187593,0.57735,0.794654,0.1,0.162459,0.023607, -0.187593,0.57735,0.794654,0.08541,0.262865,-0.052786, -0.187592,0.577357,0.79465,0.1,0.162459,0.023607, -0.187592,0.577357,0.79465,0.105573,0.124108,0.052786, -0.187592,0.577357,0.79465,0.223606,0.162459,0.052786, -0.187605,0.577354,0.794649,0.023607,-0.072654,0.176394, -0.187605,0.577354,0.794649,-0.020163,-0.062054,0.158359, -0.187605,0.577354,0.794649,-0.052786,-0.162459,0.223606, -0.187591,0.577354,0.794652,-0.176394,0.072654,0.023607, -0.187591,0.577354,0.794652,-0.138196,0.100406,0.012461, -0.187591,0.577354,0.794652,-0.223606,0.162459,-0.052786, -0.187604,0.577345,0.794656,0.123606,0,0.147214, -0.187604,0.577345,0.794656,0.08541,0,0.138196, -0.187604,0.577345,0.794656,0.138196,-0.100406,0.223606, -0.187593,0.577352,0.794653,-0.161804,-0.027751,0.1, -0.187593,0.577352,0.794653,-0.138196,0,0.08541, -0.187593,0.577352,0.794653,-0.276393,0,0.052786, -0.187583,0.577345,0.79466,-0.01459,0.190211,-0.023607, -0.187583,0.577345,0.79466,0,0.162459,0, -0.187583,0.577345,0.79466,0.08541,0.262865,-0.052786, -0.187592,0.577351,0.794654,0.111804,0.08123,0.08541, -0.187592,0.577351,0.794654,0.147214,0.072654,0.1, -0.187592,0.577351,0.794654,0.223606,0.162459,0.052786, -0.187584,0.577353,0.794655,-0.069098,-0.050203,0.138196, -0.187584,0.577353,0.794655,-0.1,-0.072654,0.147214, -0.187584,0.577353,0.794655,-0.052786,-0.162459,0.223606, -0.187591,0.577359,0.794648,-0.095491,0.131433,0, -0.187591,0.577359,0.794648,-0.1,0.162459,-0.023607, -0.187591,0.577359,0.794648,-0.223606,0.162459,-0.052786, -0.491124,0.356824,-0.794654,0.072949,0.100406,-0.118034, -0.491124,0.356824,-0.794654,0.076393,0.145308,-0.1, -0.491124,0.356824,-0.794654,0.361803,0.262865,-0.223606, -0.491125,0.356827,-0.794651,0.1,0.072654,-0.147214, -0.491125,0.356827,-0.794651,0.072949,0.100406,-0.118034, -0.491125,0.356827,-0.794651,0.361803,0.262865,-0.223606, -0.491119,0.356829,-0.794654,-0.138196,0.100406,0.012461, -0.491119,0.356829,-0.794654,-0.176394,0.072654,0.023607, -0.491119,0.356829,-0.794654,-0.361803,0.262865,0.223606, -0.491121,0.356826,-0.794654,-0.123606,0.145308,0.023607, -0.491121,0.356826,-0.794654,-0.138196,0.100406,0.012461, -0.491121,0.356826,-0.794654,-0.361803,0.262865,0.223606, -0.491129,0.356821,-0.794652,-0.072949,-0.100406,-0.118034, -0.491129,0.356821,-0.794652,-0.038197,-0.117557,-0.147214, -0.491129,0.356821,-0.794652,-0.138196,-0.425325,-0.223606, -0.491121,0.356821,-0.794656,-0.11459,-0.117557,-0.1, -0.491121,0.356821,-0.794656,-0.072949,-0.100406,-0.118034, -0.491121,0.356821,-0.794656,-0.138196,-0.425325,-0.223606, -0.49112,0.35682,-0.794658,0.012461,0.162459,-0.052786, -0.49112,0.35682,-0.794658,-0.01459,0.190211,-0.023607, -0.49112,0.35682,-0.794658,0.08541,0.262865,-0.052786, -0.491124,0.356824,-0.794654,-0.17082,0,-0.012461, -0.491124,0.356824,-0.794654,-0.18541,-0.044903,-0.023607, -0.491124,0.356824,-0.794654,-0.276393,0,0.052786, -0.491135,0.356817,-0.79465,0.020163,-0.062054,-0.158359, -0.491135,0.356817,-0.79465,0.061803,-0.044903,-0.176394, -0.491135,0.356817,-0.79465,0.052786,-0.162459,-0.223606, -0.491122,0.356835,-0.79465,0.061803,-0.044903,-0.176394, -0.491122,0.356835,-0.79465,0.065247,0,-0.158359, -0.491122,0.356835,-0.79465,0.17082,0,-0.223606, -0.491128,0.356819,-0.794653,-0.01459,0.190211,-0.023607, -0.491128,0.356819,-0.794653,-0.052786,0.162459,-0.012461, -0.491128,0.356819,-0.794653,-0.08541,0.262865,0.052786, -0.491124,0.356822,-0.794654,-0.18541,-0.044903,-0.023607, -0.491124,0.356822,-0.794654,-0.150658,-0.062054,-0.052786, -0.491124,0.356822,-0.794654,-0.223606,-0.162459,-0.052786, -0.491117,0.356823,-0.794658,0.076393,0.145308,-0.1, -0.491117,0.356823,-0.794658,0.042705,0.131433,-0.08541, -0.491117,0.356823,-0.794658,0.08541,0.262865,-0.052786, -0.491122,0.356812,-0.79466,-0.176394,0.072654,0.023607, -0.491122,0.356812,-0.79466,-0.154508,0.050203,0, -0.491122,0.356812,-0.79466,-0.276393,0,0.052786, -0.491117,0.35683,-0.794655,-0.038197,-0.117557,-0.147214, -0.491117,0.35683,-0.794655,-0.026393,-0.08123,-0.138196, -0.491117,0.35683,-0.794655,0.052786,-0.162459,-0.223606, -0.491129,0.356813,-0.794655,0.069098,0.050203,-0.138196, -0.491129,0.356813,-0.794655,0.1,0.072654,-0.147214, -0.491129,0.356813,-0.794655,0.17082,0,-0.223606, -0.491133,0.356822,-0.794648,-0.095491,0.131433,0, -0.491133,0.356822,-0.794648,-0.123606,0.145308,0.023607, -0.491133,0.356822,-0.794648,-0.08541,0.262865,0.052786, -0.491124,0.35682,-0.794655,-0.111804,-0.08123,-0.08541, -0.491124,0.35682,-0.794655,-0.11459,-0.117557,-0.1, -0.491124,0.35682,-0.794655,-0.223606,-0.162459,-0.052786, 0.982247,0.000005,-0.187592,0.065247,0,-0.158359, 0.982247,0.000005,-0.187592,0.061803,-0.044903,-0.176394, 0.982247,0.000005,-0.187592,0,0,-0.5, 0.982247,-0.000005,-0.187592,0.061803,0.044903,-0.176394, 0.982247,-0.000005,-0.187592,0.065247,0,-0.158359, 0.982247,-0.000005,-0.187592,0,0,-0.5, 0.982245,-0.000005,-0.187601,0.105573,-0.124108,0.052786, 0.982245,-0.000005,-0.187601,0.11459,-0.117557,0.1, 0.982245,-0.000005,-0.187601,0.138196,-0.425325,0.223606, 0.982248,0.000002,-0.187589,0.1,-0.162459,0.023607, 0.982248,0.000002,-0.187589,0.105573,-0.124108,0.052786, 0.982248,0.000002,-0.187589,0.138196,-0.425325,0.223606, 0.982248,-0.000002,-0.187589,0.105573,0.124108,0.052786, 0.982248,-0.000002,-0.187589,0.1,0.162459,0.023607, 0.982248,-0.000002,-0.187589,0.138196,0.425325,0.223606, 0.982245,0.000005,-0.187601,0.11459,0.117557,0.1, 0.982245,0.000005,-0.187601,0.105573,0.124108,0.052786, 0.982245,0.000005,-0.187601,0.138196,0.425325,0.223606, 0.982247,-0.000001,-0.187593,0.072949,-0.100406,-0.118034, 0.982247,-0.000001,-0.187593,0.076393,-0.145308,-0.1, 0.982247,-0.000001,-0.187593,0.052786,-0.162459,-0.223606, 0.982248,0.000006,-0.187588,0.118034,-0.038352,0.118034, 0.982248,0.000006,-0.187588,0.123606,0,0.147214, 0.982248,0.000006,-0.187588,0.138196,-0.100406,0.223606, 0.982247,0,-0.187593,0.08541,0.138758,-0.052786, 0.982247,0,-0.187593,0.076393,0.145308,-0.1, 0.982247,0,-0.187593,0.08541,0.262865,-0.052786, 0.982247,0.000001,-0.187593,0.076393,0.145308,-0.1, 0.982247,0.000001,-0.187593,0.072949,0.100406,-0.118034, 0.982247,0.000001,-0.187593,0.052786,0.162459,-0.223606, 0.982247,0,-0.187593,0.076393,-0.145308,-0.1, 0.982247,0,-0.187593,0.08541,-0.138758,-0.052786, 0.982247,0,-0.187593,0.08541,-0.262865,-0.052786, 0.982248,-0.000006,-0.187588,0.123606,0,0.147214, 0.982248,-0.000006,-0.187588,0.118034,0.038352,0.118034, 0.982248,-0.000006,-0.187588,0.138196,0.100406,0.223606, 0.982248,-0.000003,-0.187589,0.061803,-0.044903,-0.176394, 0.982248,-0.000003,-0.187589,0.069098,-0.050203,-0.138196, 0.982248,-0.000003,-0.187589,0.052786,-0.162459,-0.223606, 0.982248,-0.000002,-0.187589,0.11459,-0.117557,0.1, 0.982248,-0.000002,-0.187589,0.111804,-0.08123,0.08541, 0.982248,-0.000002,-0.187589,0.138196,-0.100406,0.223606, 0.982247,0.000001,-0.187591,0.1,0.162459,0.023607, 0.982247,0.000001,-0.187591,0.095491,0.131433,0, 0.982247,0.000001,-0.187591,0.08541,0.262865,-0.052786, 0.982248,0.000003,-0.187589,0.069098,0.050203,-0.138196, 0.982248,0.000003,-0.187589,0.061803,0.044903,-0.176394, 0.982248,0.000003,-0.187589,0.052786,0.162459,-0.223606, 0.982247,-0.000001,-0.187591,0.095491,-0.131433,0, 0.982247,-0.000001,-0.187591,0.1,-0.162459,0.023607, 0.982247,-0.000001,-0.187591,0.08541,-0.262865,-0.052786, 0.982248,0.000002,-0.187589,0.111804,0.08123,0.08541, 0.982248,0.000002,-0.187589,0.11459,0.117557,0.1, 0.982248,0.000002,-0.187589,0.138196,0.100406,0.223606, -0.303531,-0.934173,0.187591,-0.150658,-0.062054,-0.052786, -0.303531,-0.934173,0.187591,-0.18541,-0.044903,-0.023607, -0.303531,-0.934173,0.187591,-0.447213,0,-0.223606, -0.303532,-0.934172,0.187594,-0.147214,-0.072654,-0.1, -0.303532,-0.934172,0.187594,-0.150658,-0.062054,-0.052786, -0.303532,-0.934172,0.187594,-0.447213,0,-0.223606, -0.303535,-0.934171,0.187592,-0.020163,-0.062054,0.158359, -0.303535,-0.934171,0.187592,0.023607,-0.072654,0.176394, -0.303535,-0.934171,0.187592,0,0,0.5, -0.303526,-0.934174,0.187592,-0.061803,-0.044903,0.176394, -0.303526,-0.934174,0.187592,-0.020163,-0.062054,0.158359, -0.303526,-0.934174,0.187592,0,0,0.5, -0.303538,-0.934173,0.187579,0.08541,-0.138758,-0.052786, -0.303538,-0.934173,0.187579,0.076393,-0.145308,-0.1, -0.303538,-0.934173,0.187579,0.361803,-0.262865,-0.223606, -0.303523,-0.934173,0.187603,0.123606,-0.145308,-0.023607, -0.303523,-0.934173,0.187603,0.08541,-0.138758,-0.052786, -0.303523,-0.934173,0.187603,0.361803,-0.262865,-0.223606, -0.303531,-0.934173,0.187588,-0.158359,-0.038352,0.052786, -0.303531,-0.934173,0.187588,-0.161804,-0.027751,0.1, -0.303531,-0.934173,0.187588,-0.276393,0,0.052786, -0.30353,-0.934173,0.187591,0.072949,-0.100406,0.118034, -0.30353,-0.934173,0.187591,0.11459,-0.117557,0.1, -0.30353,-0.934173,0.187591,0.138196,-0.100406,0.223606, -0.303534,-0.934173,0.187586,0,-0.124108,-0.118034, -0.303534,-0.934173,0.187586,-0.038197,-0.117557,-0.147214, -0.303534,-0.934173,0.187586,0.052786,-0.162459,-0.223606, -0.30353,-0.934173,0.187591,-0.038197,-0.117557,-0.147214, -0.30353,-0.934173,0.187591,-0.072949,-0.100406,-0.118034, -0.30353,-0.934173,0.187591,-0.138196,-0.100406,-0.223606, -0.303529,-0.934173,0.187594,-0.161804,-0.027751,0.1, -0.303529,-0.934173,0.187594,-0.118034,-0.038352,0.118034, -0.303529,-0.934173,0.187594,-0.17082,0,0.223606, -0.303526,-0.934172,0.187599,0.11459,-0.117557,0.1, -0.303526,-0.934172,0.187599,0.105573,-0.124108,0.052786, -0.303526,-0.934172,0.187599,0.223606,-0.162459,0.052786, -0.30353,-0.934172,0.187595,-0.18541,-0.044903,-0.023607, -0.30353,-0.934172,0.187595,-0.154508,-0.050203,0, -0.30353,-0.934172,0.187595,-0.276393,0,0.052786, -0.303529,-0.934174,0.187588,0.023607,-0.072654,0.176394, -0.303529,-0.934174,0.187588,0.026393,-0.08123,0.138196, -0.303529,-0.934174,0.187588,0.138196,-0.100406,0.223606, -0.303516,-0.934178,0.18759,0.076393,-0.145308,-0.1, -0.303516,-0.934178,0.18759,0.042705,-0.131433,-0.08541, -0.303516,-0.934178,0.18759,0.052786,-0.162459,-0.223606, -0.303531,-0.934173,0.187592,-0.111804,-0.08123,-0.08541, -0.303531,-0.934173,0.187592,-0.147214,-0.072654,-0.1, -0.303531,-0.934173,0.187592,-0.138196,-0.100406,-0.223606, -0.303535,-0.934172,0.187588,-0.069098,-0.050203,0.138196, -0.303535,-0.934172,0.187588,-0.061803,-0.044903,0.176394, -0.303535,-0.934172,0.187588,-0.17082,0,0.223606, -0.303524,-0.934177,0.187583,0.095491,-0.131433,0, -0.303524,-0.934177,0.187583,0.123606,-0.145308,-0.023607, -0.303524,-0.934177,0.187583,0.223606,-0.162459,0.052786, 0.187592,-0.577351,-0.794654,-0.118034,-0.038352,-0.118034, 0.187592,-0.577351,-0.794654,-0.147214,-0.072654,-0.1, 0.187592,-0.577351,-0.794654,-0.447213,0,-0.223606, 0.187591,-0.577356,-0.794651,-0.123606,0,-0.147214, 0.187591,-0.577356,-0.794651,-0.118034,-0.038352,-0.118034, 0.187591,-0.577356,-0.794651,-0.447213,0,-0.223606, 0.187593,-0.577349,-0.794655,0.052786,-0.162459,0.012461, 0.187593,-0.577349,-0.794655,0.1,-0.162459,0.023607, 0.187593,-0.577349,-0.794655,0.138196,-0.425325,0.223606, 0.1876,-0.577347,-0.794655,0.01459,-0.190211,0.023607, 0.1876,-0.577347,-0.794655,0.052786,-0.162459,0.012461, 0.1876,-0.577347,-0.794655,0.138196,-0.425325,0.223606, 0.187596,-0.577353,-0.794652,0.118034,0.038352,-0.118034, 0.187596,-0.577353,-0.794652,0.1,0.072654,-0.147214, 0.187596,-0.577353,-0.794652,0.361803,0.262865,-0.223606, 0.187591,-0.577349,-0.794656,0.161804,0.027751,-0.1, 0.187591,-0.577349,-0.794656,0.118034,0.038352,-0.118034, 0.187591,-0.577349,-0.794656,0.361803,0.262865,-0.223606, 0.187592,-0.577357,-0.79465,-0.105573,-0.124108,-0.052786, 0.187592,-0.577357,-0.79465,-0.1,-0.162459,-0.023607, 0.187592,-0.577357,-0.79465,-0.223606,-0.162459,-0.052786, 0.187591,-0.577354,-0.794652,0.138196,-0.100406,-0.012461, 0.187591,-0.577354,-0.794652,0.176394,-0.072654,-0.023607, 0.187591,-0.577354,-0.794652,0.223606,-0.162459,0.052786, 0.187605,-0.577354,-0.794649,0.020163,0.062054,-0.158359, 0.187605,-0.577354,-0.794649,-0.023607,0.072654,-0.176394, 0.187605,-0.577354,-0.794649,0.052786,0.162459,-0.223606, 0.187583,-0.57736,-0.79465,-0.023607,0.072654,-0.176394, 0.187583,-0.57736,-0.79465,-0.052786,0.038352,-0.158359, 0.187583,-0.57736,-0.79465,-0.138196,0.100406,-0.223606, 0.187593,-0.57735,-0.794654,-0.1,-0.162459,-0.023607, 0.187593,-0.57735,-0.794654,-0.052786,-0.162459,-0.012461, 0.187593,-0.57735,-0.794654,-0.08541,-0.262865,0.052786, 0.187592,-0.577347,-0.794657,0.176394,-0.072654,-0.023607, 0.187592,-0.577347,-0.794657,0.158359,-0.038352,-0.052786, 0.187592,-0.577347,-0.794657,0.276393,0,-0.052786, 0.187592,-0.577351,-0.794654,-0.147214,-0.072654,-0.1, 0.187592,-0.577351,-0.794654,-0.111804,-0.08123,-0.08541, 0.187592,-0.577351,-0.794654,-0.223606,-0.162459,-0.052786, 0.187591,-0.577359,-0.794648,0.1,-0.162459,0.023607, 0.187591,-0.577359,-0.794648,0.095491,-0.131433,0, 0.187591,-0.577359,-0.794648,0.223606,-0.162459,0.052786, 0.187584,-0.577353,-0.794655,0.1,0.072654,-0.147214, 0.187584,-0.577353,-0.794655,0.069098,0.050203,-0.138196, 0.187584,-0.577353,-0.794655,0.052786,0.162459,-0.223606, 0.187604,-0.577345,-0.794656,-0.08541,0,-0.138196, 0.187604,-0.577345,-0.794656,-0.123606,0,-0.147214, 0.187604,-0.577345,-0.794656,-0.138196,0.100406,-0.223606, 0.187583,-0.577345,-0.79466,0,-0.162459,0, 0.187583,-0.577345,-0.79466,0.01459,-0.190211,0.023607, 0.187583,-0.577345,-0.79466,-0.08541,-0.262865,0.052786, 0.187593,-0.577352,-0.794653,0.138196,0,-0.08541, 0.187593,-0.577352,-0.794653,0.161804,0.027751,-0.1, 0.187593,-0.577352,-0.794653,0.276393,0,-0.052786, -0.187596,-0.577353,0.794652,-0.118034,0.038352,0.118034, -0.187596,-0.577353,0.794652,-0.1,0.072654,0.147214, -0.187596,-0.577353,0.794652,-0.361803,0.262865,0.223606, -0.187591,-0.577349,0.794656,-0.161804,0.027751,0.1, -0.187591,-0.577349,0.794656,-0.118034,0.038352,0.118034, -0.187591,-0.577349,0.794656,-0.361803,0.262865,0.223606, -0.187592,-0.577351,0.794654,0.118034,-0.038352,0.118034, -0.187592,-0.577351,0.794654,0.147214,-0.072654,0.1, -0.187592,-0.577351,0.794654,0.447213,0,0.223606, -0.187591,-0.577356,0.794651,0.123606,0,0.147214, -0.187591,-0.577356,0.794651,0.118034,-0.038352,0.118034, -0.187591,-0.577356,0.794651,0.447213,0,0.223606, -0.187593,-0.577349,0.794655,-0.052786,-0.162459,-0.012461, -0.187593,-0.577349,0.794655,-0.1,-0.162459,-0.023607, -0.187593,-0.577349,0.794655,-0.138196,-0.425325,-0.223606, -0.1876,-0.577347,0.794655,-0.01459,-0.190211,-0.023607, -0.1876,-0.577347,0.794655,-0.052786,-0.162459,-0.012461, -0.1876,-0.577347,0.794655,-0.138196,-0.425325,-0.223606, -0.187605,-0.577354,0.794649,-0.020163,0.062054,0.158359, -0.187605,-0.577354,0.794649,0.023607,0.072654,0.176394, -0.187605,-0.577354,0.794649,-0.052786,0.162459,0.223606, -0.187592,-0.577357,0.79465,0.105573,-0.124108,0.052786, -0.187592,-0.577357,0.79465,0.1,-0.162459,0.023607, -0.187592,-0.577357,0.79465,0.223606,-0.162459,0.052786, -0.187591,-0.577354,0.794652,-0.138196,-0.100406,0.012461, -0.187591,-0.577354,0.794652,-0.176394,-0.072654,0.023607, -0.187591,-0.577354,0.794652,-0.223606,-0.162459,-0.052786, -0.187592,-0.577347,0.794657,-0.176394,-0.072654,0.023607, -0.187592,-0.577347,0.794657,-0.158359,-0.038352,0.052786, -0.187592,-0.577347,0.794657,-0.276393,0,0.052786, -0.187583,-0.57736,0.79465,0.023607,0.072654,0.176394, -0.187583,-0.57736,0.79465,0.052786,0.038352,0.158359, -0.187583,-0.57736,0.79465,0.138196,0.100406,0.223606, -0.187593,-0.57735,0.794654,0.1,-0.162459,0.023607, -0.187593,-0.57735,0.794654,0.052786,-0.162459,0.012461, -0.187593,-0.57735,0.794654,0.08541,-0.262865,-0.052786, -0.187584,-0.577353,0.794655,-0.1,0.072654,0.147214, -0.187584,-0.577353,0.794655,-0.069098,0.050203,0.138196, -0.187584,-0.577353,0.794655,-0.052786,0.162459,0.223606, -0.187592,-0.577351,0.794654,0.147214,-0.072654,0.1, -0.187592,-0.577351,0.794654,0.111804,-0.08123,0.08541, -0.187592,-0.577351,0.794654,0.223606,-0.162459,0.052786, -0.187591,-0.577359,0.794648,-0.1,-0.162459,-0.023607, -0.187591,-0.577359,0.794648,-0.095491,-0.131433,0, -0.187591,-0.577359,0.794648,-0.223606,-0.162459,-0.052786, -0.187593,-0.577352,0.794653,-0.138196,0,0.08541, -0.187593,-0.577352,0.794653,-0.161804,0.027751,0.1, -0.187593,-0.577352,0.794653,-0.276393,0,0.052786, -0.187604,-0.577345,0.794656,0.08541,0,0.138196, -0.187604,-0.577345,0.794656,0.123606,0,0.147214, -0.187604,-0.577345,0.794656,0.138196,0.100406,0.223606, -0.187583,-0.577345,0.79466,0,-0.162459,0, -0.187583,-0.577345,0.79466,-0.01459,-0.190211,-0.023607, -0.187583,-0.577345,0.79466,0.08541,-0.262865,-0.052786, 0.794652,0.577358,0.18758,0.158359,-0.038352,-0.052786, 0.794652,0.577358,0.18758,0.176394,-0.072654,-0.023607, 0.794652,0.577358,0.18758,0.361803,-0.262865,-0.223606, 0.794656,0.577344,0.187604,0.161804,-0.027751,-0.1, 0.794656,0.577344,0.187604,0.158359,-0.038352,-0.052786, 0.794656,0.577344,0.187604,0.361803,-0.262865,-0.223606, 0.794657,0.577347,0.187592,0.052786,0.038352,0.158359, 0.794657,0.577347,0.187592,0.023607,0.072654,0.176394, 0.794657,0.577347,0.187592,0,0,0.5, 0.794653,0.577353,0.187592,0.076393,0,0.176394, 0.794653,0.577353,0.187592,0.052786,0.038352,0.158359, 0.794653,0.577353,0.187592,0,0,0.5, 0.794655,0.577349,0.187593,0.012461,0.162459,-0.052786, 0.794655,0.577349,0.187593,0.023607,0.162459,-0.1, 0.794655,0.577349,0.187593,-0.138196,0.425325,-0.223606, 0.794658,0.577347,0.187587,-0.01459,0.190211,-0.023607, 0.794658,0.577347,0.187587,0.012461,0.162459,-0.052786, 0.794658,0.577347,0.187587,-0.138196,0.425325,-0.223606, 0.794655,0.577351,0.187588,0.150658,-0.062054,0.052786, 0.794655,0.577351,0.187588,0.147214,-0.072654,0.1, 0.794655,0.577351,0.187588,0.223606,-0.162459,0.052786, 0.79465,0.577356,0.187592,0,0.124108,0.118034, 0.79465,0.577356,0.187592,-0.023607,0.162459,0.1, 0.79465,0.577356,0.187592,-0.052786,0.162459,0.223606, 0.794655,0.57735,0.18759,0.072949,0.100406,-0.118034, 0.794655,0.57735,0.18759,0.1,0.072654,-0.147214, 0.794655,0.57735,0.18759,0.052786,0.162459,-0.223606, 0.794654,0.577351,0.187592,0.1,0.072654,-0.147214, 0.794654,0.577351,0.187592,0.118034,0.038352,-0.118034, 0.794654,0.577351,0.187592,0.17082,0,-0.223606, 0.794652,0.577353,0.187596,0.147214,-0.072654,0.1, 0.794652,0.577353,0.187596,0.118034,-0.038352,0.118034, 0.794652,0.577353,0.187596,0.138196,-0.100406,0.223606, 0.794654,0.57735,0.187593,-0.023607,0.162459,0.1, 0.794654,0.57735,0.187593,-0.012461,0.162459,0.052786, 0.794654,0.57735,0.187593,-0.08541,0.262865,0.052786, 0.794648,0.577354,0.187607,0.176394,-0.072654,-0.023607, 0.794648,0.577354,0.187607,0.154508,-0.050203,0, 0.794648,0.577354,0.187607,0.223606,-0.162459,0.052786, 0.794652,0.577354,0.18759,0.023607,0.072654,0.176394, 0.794652,0.577354,0.18759,0.026393,0.08123,0.138196, 0.794652,0.577354,0.18759,-0.052786,0.162459,0.223606, 0.794649,0.577358,0.187592,0.023607,0.162459,-0.1, 0.794649,0.577358,0.187592,0.042705,0.131433,-0.08541, 0.794649,0.577358,0.187592,0.052786,0.162459,-0.223606, 0.794646,0.577362,0.187591,0.138196,0,-0.08541, 0.794646,0.577362,0.187591,0.161804,-0.027751,-0.1, 0.794646,0.577362,0.187591,0.17082,0,-0.223606, 0.794657,0.577348,0.18759,0.08541,0,0.138196, 0.794657,0.577348,0.18759,0.076393,0,0.176394, 0.794657,0.577348,0.18759,0.138196,-0.100406,0.223606, 0.794655,0.577346,0.187602,0,0.162459,0, 0.794655,0.577346,0.187602,-0.01459,0.190211,-0.023607, 0.794655,0.577346,0.187602,-0.08541,0.262865,0.052786, -0.794657,0.577347,-0.187592,-0.052786,0.038352,-0.158359, -0.794657,0.577347,-0.187592,-0.023607,0.072654,-0.176394, -0.794657,0.577347,-0.187592,0,0,-0.5, -0.794653,0.577353,-0.187592,-0.076393,0,-0.176394, -0.794653,0.577353,-0.187592,-0.052786,0.038352,-0.158359, -0.794653,0.577353,-0.187592,0,0,-0.5, -0.794655,0.577349,-0.187593,-0.012461,0.162459,0.052786, -0.794655,0.577349,-0.187593,-0.023607,0.162459,0.1, -0.794655,0.577349,-0.187593,0.138196,0.425325,0.223606, -0.794658,0.577347,-0.187587,0.01459,0.190211,0.023607, -0.794658,0.577347,-0.187587,-0.012461,0.162459,0.052786, -0.794658,0.577347,-0.187587,0.138196,0.425325,0.223606, -0.794652,0.577358,-0.18758,-0.158359,-0.038352,0.052786, -0.794652,0.577358,-0.18758,-0.176394,-0.072654,0.023607, -0.794652,0.577358,-0.18758,-0.361803,-0.262865,0.223606, -0.794656,0.577344,-0.187604,-0.161804,-0.027751,0.1, -0.794656,0.577344,-0.187604,-0.158359,-0.038352,0.052786, -0.794656,0.577344,-0.187604,-0.361803,-0.262865,0.223606, -0.79465,0.577356,-0.187592,0,0.124108,-0.118034, -0.79465,0.577356,-0.187592,0.023607,0.162459,-0.1, -0.79465,0.577356,-0.187592,0.052786,0.162459,-0.223606, -0.794655,0.57735,-0.18759,-0.072949,0.100406,0.118034, -0.794655,0.57735,-0.18759,-0.1,0.072654,0.147214, -0.794655,0.57735,-0.18759,-0.052786,0.162459,0.223606, -0.794655,0.577351,-0.187588,-0.150658,-0.062054,-0.052786, -0.794655,0.577351,-0.187588,-0.147214,-0.072654,-0.1, -0.794655,0.577351,-0.187588,-0.223606,-0.162459,-0.052786, -0.794652,0.577353,-0.187596,-0.147214,-0.072654,-0.1, -0.794652,0.577353,-0.187596,-0.118034,-0.038352,-0.118034, -0.794652,0.577353,-0.187596,-0.138196,-0.100406,-0.223606, -0.794654,0.57735,-0.187593,0.023607,0.162459,-0.1, -0.794654,0.57735,-0.187593,0.012461,0.162459,-0.052786, -0.794654,0.57735,-0.187593,0.08541,0.262865,-0.052786, -0.794654,0.577351,-0.187592,-0.1,0.072654,0.147214, -0.794654,0.577351,-0.187592,-0.118034,0.038352,0.118034, -0.794654,0.577351,-0.187592,-0.17082,0,0.223606, -0.794652,0.577354,-0.18759,-0.023607,0.072654,-0.176394, -0.794652,0.577354,-0.18759,-0.026393,0.08123,-0.138196, -0.794652,0.577354,-0.18759,0.052786,0.162459,-0.223606, -0.794649,0.577358,-0.187592,-0.023607,0.162459,0.1, -0.794649,0.577358,-0.187592,-0.042705,0.131433,0.08541, -0.794649,0.577358,-0.187592,-0.052786,0.162459,0.223606, -0.794648,0.577354,-0.187607,-0.176394,-0.072654,0.023607, -0.794648,0.577354,-0.187607,-0.154508,-0.050203,0, -0.794648,0.577354,-0.187607,-0.223606,-0.162459,-0.052786, -0.794657,0.577348,-0.18759,-0.08541,0,-0.138196, -0.794657,0.577348,-0.18759,-0.076393,0,-0.176394, -0.794657,0.577348,-0.18759,-0.138196,-0.100406,-0.223606, -0.794655,0.577346,-0.187602,0,0.162459,0, -0.794655,0.577346,-0.187602,0.01459,0.190211,0.023607, -0.794655,0.577346,-0.187602,0.08541,0.262865,-0.052786, -0.794646,0.577362,-0.187591,-0.138196,0,0.08541, -0.794646,0.577362,-0.187591,-0.161804,-0.027751,0.1, -0.794646,0.577362,-0.187591,-0.17082,0,0.223606, 0.491129,0.356821,0.794652,0.072949,-0.100406,0.118034, 0.491129,0.356821,0.794652,0.038197,-0.117557,0.147214, 0.491129,0.356821,0.794652,0.138196,-0.425325,0.223606, 0.491121,0.356821,0.794656,0.11459,-0.117557,0.1, 0.491121,0.356821,0.794656,0.072949,-0.100406,0.118034, 0.491121,0.356821,0.794656,0.138196,-0.425325,0.223606, 0.491124,0.356824,0.794654,-0.072949,0.100406,0.118034, 0.491124,0.356824,0.794654,-0.076393,0.145308,0.1, 0.491124,0.356824,0.794654,-0.361803,0.262865,0.223606, 0.491125,0.356827,0.794651,-0.1,0.072654,0.147214, 0.491125,0.356827,0.794651,-0.072949,0.100406,0.118034, 0.491125,0.356827,0.794651,-0.361803,0.262865,0.223606, 0.491119,0.356829,0.794654,0.138196,0.100406,-0.012461, 0.491119,0.356829,0.794654,0.176394,0.072654,-0.023607, 0.491119,0.356829,0.794654,0.361803,0.262865,-0.223606, 0.491121,0.356826,0.794654,0.123606,0.145308,-0.023607, 0.491121,0.356826,0.794654,0.138196,0.100406,-0.012461, 0.491121,0.356826,0.794654,0.361803,0.262865,-0.223606, 0.491135,0.356817,0.79465,-0.020163,-0.062054,0.158359, 0.491135,0.356817,0.79465,-0.061803,-0.044903,0.176394, 0.491135,0.356817,0.79465,-0.052786,-0.162459,0.223606, 0.49112,0.35682,0.794658,-0.012461,0.162459,0.052786, 0.49112,0.35682,0.794658,0.01459,0.190211,0.023607, 0.49112,0.35682,0.794658,-0.08541,0.262865,0.052786, 0.491124,0.356824,0.794654,0.17082,0,0.012461, 0.491124,0.356824,0.794654,0.18541,-0.044903,0.023607, 0.491124,0.356824,0.794654,0.276393,0,-0.052786, 0.491124,0.356822,0.794654,0.18541,-0.044903,0.023607, 0.491124,0.356822,0.794654,0.150658,-0.062054,0.052786, 0.491124,0.356822,0.794654,0.223606,-0.162459,0.052786, 0.491122,0.356835,0.79465,-0.061803,-0.044903,0.176394, 0.491122,0.356835,0.79465,-0.065247,0,0.158359, 0.491122,0.356835,0.79465,-0.17082,0,0.223606, 0.491128,0.356819,0.794653,0.01459,0.190211,0.023607, 0.491128,0.356819,0.794653,0.052786,0.162459,0.012461, 0.491128,0.356819,0.794653,0.08541,0.262865,-0.052786, 0.491117,0.35683,0.794655,0.038197,-0.117557,0.147214, 0.491117,0.35683,0.794655,0.026393,-0.08123,0.138196, 0.491117,0.35683,0.794655,-0.052786,-0.162459,0.223606, 0.491117,0.356823,0.794658,-0.076393,0.145308,0.1, 0.491117,0.356823,0.794658,-0.042705,0.131433,0.08541, 0.491117,0.356823,0.794658,-0.08541,0.262865,0.052786, 0.491122,0.356812,0.79466,0.176394,0.072654,-0.023607, 0.491122,0.356812,0.79466,0.154508,0.050203,0, 0.491122,0.356812,0.79466,0.276393,0,-0.052786, 0.491124,0.35682,0.794655,0.111804,-0.08123,0.08541, 0.491124,0.35682,0.794655,0.11459,-0.117557,0.1, 0.491124,0.35682,0.794655,0.223606,-0.162459,0.052786, 0.491129,0.356813,0.794655,-0.069098,0.050203,0.138196, 0.491129,0.356813,0.794655,-0.1,0.072654,0.147214, 0.491129,0.356813,0.794655,-0.17082,0,0.223606, 0.491133,0.356822,0.794648,0.095491,0.131433,0, 0.491133,0.356822,0.794648,0.123606,0.145308,-0.023607, 0.491133,0.356822,0.794648,0.08541,0.262865,-0.052786, 0.187591,0.577349,-0.794656,0.118034,-0.038352,-0.118034, 0.187591,0.577349,-0.794656,0.161804,-0.027751,-0.1, 0.187591,0.577349,-0.794656,0.361803,-0.262865,-0.223606, 0.187596,0.577353,-0.794652,0.1,-0.072654,-0.147214, 0.187596,0.577353,-0.794652,0.118034,-0.038352,-0.118034, 0.187596,0.577353,-0.794652,0.361803,-0.262865,-0.223606, 0.1876,0.577347,-0.794655,0.052786,0.162459,0.012461, 0.1876,0.577347,-0.794655,0.01459,0.190211,0.023607, 0.1876,0.577347,-0.794655,0.138196,0.425325,0.223606, 0.187593,0.577349,-0.794655,0.1,0.162459,0.023607, 0.187593,0.577349,-0.794655,0.052786,0.162459,0.012461, 0.187593,0.577349,-0.794655,0.138196,0.425325,0.223606, 0.187591,0.577356,-0.794651,-0.118034,0.038352,-0.118034, 0.187591,0.577356,-0.794651,-0.123606,0,-0.147214, 0.187591,0.577356,-0.794651,-0.447213,0,-0.223606, 0.187592,0.577351,-0.794654,-0.147214,0.072654,-0.1, 0.187592,0.577351,-0.794654,-0.118034,0.038352,-0.118034, 0.187592,0.577351,-0.794654,-0.447213,0,-0.223606, 0.187592,0.577347,-0.794657,0.158359,0.038352,-0.052786, 0.187592,0.577347,-0.794657,0.176394,0.072654,-0.023607, 0.187592,0.577347,-0.794657,0.276393,0,-0.052786, 0.187593,0.57735,-0.794654,-0.052786,0.162459,-0.012461, 0.187593,0.57735,-0.794654,-0.1,0.162459,-0.023607, 0.187593,0.57735,-0.794654,-0.08541,0.262865,0.052786, 0.187583,0.57736,-0.79465,-0.052786,-0.038352,-0.158359, 0.187583,0.57736,-0.79465,-0.023607,-0.072654,-0.176394, 0.187583,0.57736,-0.79465,-0.138196,-0.100406,-0.223606, 0.187605,0.577354,-0.794649,-0.023607,-0.072654,-0.176394, 0.187605,0.577354,-0.794649,0.020163,-0.062054,-0.158359, 0.187605,0.577354,-0.794649,0.052786,-0.162459,-0.223606, 0.187591,0.577354,-0.794652,0.176394,0.072654,-0.023607, 0.187591,0.577354,-0.794652,0.138196,0.100406,-0.012461, 0.187591,0.577354,-0.794652,0.223606,0.162459,0.052786, 0.187592,0.577357,-0.79465,-0.1,0.162459,-0.023607, 0.187592,0.577357,-0.79465,-0.105573,0.124108,-0.052786, 0.187592,0.577357,-0.79465,-0.223606,0.162459,-0.052786, 0.187593,0.577352,-0.794653,0.161804,-0.027751,-0.1, 0.187593,0.577352,-0.794653,0.138196,0,-0.08541, 0.187593,0.577352,-0.794653,0.276393,0,-0.052786, 0.187583,0.577345,-0.79466,0.01459,0.190211,0.023607, 0.187583,0.577345,-0.79466,0,0.162459,0, 0.187583,0.577345,-0.79466,-0.08541,0.262865,0.052786, 0.187604,0.577345,-0.794656,-0.123606,0,-0.147214, 0.187604,0.577345,-0.794656,-0.08541,0,-0.138196, 0.187604,0.577345,-0.794656,-0.138196,-0.100406,-0.223606, 0.187584,0.577353,-0.794655,0.069098,-0.050203,-0.138196, 0.187584,0.577353,-0.794655,0.1,-0.072654,-0.147214, 0.187584,0.577353,-0.794655,0.052786,-0.162459,-0.223606, 0.187591,0.577359,-0.794648,0.095491,0.131433,0, 0.187591,0.577359,-0.794648,0.1,0.162459,0.023607, 0.187591,0.577359,-0.794648,0.223606,0.162459,0.052786, 0.187592,0.577351,-0.794654,-0.111804,0.08123,-0.08541, 0.187592,0.577351,-0.794654,-0.147214,0.072654,-0.1, 0.187592,0.577351,-0.794654,-0.223606,0.162459,-0.052786, 0.303535,-0.934171,-0.187592,0.020163,-0.062054,-0.158359, 0.303535,-0.934171,-0.187592,-0.023607,-0.072654,-0.176394, 0.303535,-0.934171,-0.187592,0,0,-0.5, 0.303526,-0.934174,-0.187592,0.061803,-0.044903,-0.176394, 0.303526,-0.934174,-0.187592,0.020163,-0.062054,-0.158359, 0.303526,-0.934174,-0.187592,0,0,-0.5, 0.303538,-0.934173,-0.187579,-0.08541,-0.138758,0.052786, 0.303538,-0.934173,-0.187579,-0.076393,-0.145308,0.1, 0.303538,-0.934173,-0.187579,-0.361803,-0.262865,0.223606, 0.303523,-0.934173,-0.187603,-0.123606,-0.145308,0.023607, 0.303523,-0.934173,-0.187603,-0.08541,-0.138758,0.052786, 0.303523,-0.934173,-0.187603,-0.361803,-0.262865,0.223606, 0.303531,-0.934173,-0.187591,0.150658,-0.062054,0.052786, 0.303531,-0.934173,-0.187591,0.18541,-0.044903,0.023607, 0.303531,-0.934173,-0.187591,0.447213,0,0.223606, 0.303532,-0.934172,-0.187594,0.147214,-0.072654,0.1, 0.303532,-0.934172,-0.187594,0.150658,-0.062054,0.052786, 0.303532,-0.934172,-0.187594,0.447213,0,0.223606, 0.30353,-0.934173,-0.187591,-0.072949,-0.100406,-0.118034, 0.30353,-0.934173,-0.187591,-0.11459,-0.117557,-0.1, 0.30353,-0.934173,-0.187591,-0.138196,-0.100406,-0.223606, 0.303534,-0.934173,-0.187586,0,-0.124108,0.118034, 0.303534,-0.934173,-0.187586,0.038197,-0.117557,0.147214, 0.303534,-0.934173,-0.187586,-0.052786,-0.162459,0.223606, 0.303531,-0.934173,-0.187588,0.158359,-0.038352,-0.052786, 0.303531,-0.934173,-0.187588,0.161804,-0.027751,-0.1, 0.303531,-0.934173,-0.187588,0.276393,0,-0.052786, 0.303529,-0.934173,-0.187594,0.161804,-0.027751,-0.1, 0.303529,-0.934173,-0.187594,0.118034,-0.038352,-0.118034, 0.303529,-0.934173,-0.187594,0.17082,0,-0.223606, 0.303526,-0.934172,-0.187599,-0.11459,-0.117557,-0.1, 0.303526,-0.934172,-0.187599,-0.105573,-0.124108,-0.052786, 0.303526,-0.934172,-0.187599,-0.223606,-0.162459,-0.052786, 0.30353,-0.934173,-0.187591,0.038197,-0.117557,0.147214, 0.30353,-0.934173,-0.187591,0.072949,-0.100406,0.118034, 0.30353,-0.934173,-0.187591,0.138196,-0.100406,0.223606, 0.303529,-0.934174,-0.187588,-0.023607,-0.072654,-0.176394, 0.303529,-0.934174,-0.187588,-0.026393,-0.08123,-0.138196, 0.303529,-0.934174,-0.187588,-0.138196,-0.100406,-0.223606, 0.303516,-0.934178,-0.18759,-0.076393,-0.145308,0.1, 0.303516,-0.934178,-0.18759,-0.042705,-0.131433,0.08541, 0.303516,-0.934178,-0.18759,-0.052786,-0.162459,0.223606, 0.30353,-0.934172,-0.187595,0.18541,-0.044903,0.023607, 0.30353,-0.934172,-0.187595,0.154508,-0.050203,0, 0.30353,-0.934172,-0.187595,0.276393,0,-0.052786, 0.303535,-0.934172,-0.187588,0.069098,-0.050203,-0.138196, 0.303535,-0.934172,-0.187588,0.061803,-0.044903,-0.176394, 0.303535,-0.934172,-0.187588,0.17082,0,-0.223606, 0.303524,-0.934177,-0.187583,-0.095491,-0.131433,0, 0.303524,-0.934177,-0.187583,-0.123606,-0.145308,0.023607, 0.303524,-0.934177,-0.187583,-0.223606,-0.162459,-0.052786, 0.303531,-0.934173,-0.187592,0.111804,-0.08123,0.08541, 0.303531,-0.934173,-0.187592,0.147214,-0.072654,0.1, 0.303531,-0.934173,-0.187592,0.138196,-0.100406,0.223606, -0.982248,-0.000002,0.187589,-0.105573,0.124108,-0.052786, -0.982248,-0.000002,0.187589,-0.1,0.162459,-0.023607, -0.982248,-0.000002,0.187589,-0.138196,0.425325,-0.223606, -0.982245,0.000005,0.187601,-0.11459,0.117557,-0.1, -0.982245,0.000005,0.187601,-0.105573,0.124108,-0.052786, -0.982245,0.000005,0.187601,-0.138196,0.425325,-0.223606, -0.982247,0.000005,0.187592,-0.065247,0,0.158359, -0.982247,0.000005,0.187592,-0.061803,-0.044903,0.176394, -0.982247,0.000005,0.187592,0,0,0.5, -0.982247,-0.000005,0.187592,-0.061803,0.044903,0.176394, -0.982247,-0.000005,0.187592,-0.065247,0,0.158359, -0.982247,-0.000005,0.187592,0,0,0.5, -0.982245,-0.000005,0.187601,-0.105573,-0.124108,-0.052786, -0.982245,-0.000005,0.187601,-0.11459,-0.117557,-0.1, -0.982245,-0.000005,0.187601,-0.138196,-0.425325,-0.223606, -0.982248,0.000002,0.187589,-0.1,-0.162459,-0.023607, -0.982248,0.000002,0.187589,-0.105573,-0.124108,-0.052786, -0.982248,0.000002,0.187589,-0.138196,-0.425325,-0.223606, -0.982247,0,0.187593,-0.08541,0.138758,0.052786, -0.982247,0,0.187593,-0.076393,0.145308,0.1, -0.982247,0,0.187593,-0.08541,0.262865,0.052786, -0.982247,-0.000001,0.187593,-0.072949,-0.100406,0.118034, -0.982247,-0.000001,0.187593,-0.076393,-0.145308,0.1, -0.982247,-0.000001,0.187593,-0.052786,-0.162459,0.223606, -0.982248,0.000006,0.187588,-0.118034,-0.038352,-0.118034, -0.982248,0.000006,0.187588,-0.123606,0,-0.147214, -0.982248,0.000006,0.187588,-0.138196,-0.100406,-0.223606, -0.982248,-0.000006,0.187588,-0.123606,0,-0.147214, -0.982248,-0.000006,0.187588,-0.118034,0.038352,-0.118034, -0.982248,-0.000006,0.187588,-0.138196,0.100406,-0.223606, -0.982247,0.000001,0.187593,-0.076393,0.145308,0.1, -0.982247,0.000001,0.187593,-0.072949,0.100406,0.118034, -0.982247,0.000001,0.187593,-0.052786,0.162459,0.223606, -0.982247,0,0.187593,-0.076393,-0.145308,0.1, -0.982247,0,0.187593,-0.08541,-0.138758,0.052786, -0.982247,0,0.187593,-0.08541,-0.262865,0.052786, -0.982247,0.000001,0.187591,-0.1,0.162459,-0.023607, -0.982247,0.000001,0.187591,-0.095491,0.131433,0, -0.982247,0.000001,0.187591,-0.08541,0.262865,0.052786, -0.982248,-0.000003,0.187589,-0.061803,-0.044903,0.176394, -0.982248,-0.000003,0.187589,-0.069098,-0.050203,0.138196, -0.982248,-0.000003,0.187589,-0.052786,-0.162459,0.223606, -0.982248,-0.000002,0.187589,-0.11459,-0.117557,-0.1, -0.982248,-0.000002,0.187589,-0.111804,-0.08123,-0.08541, -0.982248,-0.000002,0.187589,-0.138196,-0.100406,-0.223606, -0.982248,0.000002,0.187589,-0.111804,0.08123,-0.08541, -0.982248,0.000002,0.187589,-0.11459,0.117557,-0.1, -0.982248,0.000002,0.187589,-0.138196,0.100406,-0.223606, -0.982248,0.000003,0.187589,-0.069098,0.050203,0.138196, -0.982248,0.000003,0.187589,-0.061803,0.044903,0.176394, -0.982248,0.000003,0.187589,-0.052786,0.162459,0.223606, -0.982247,-0.000001,0.187591,-0.095491,-0.131433,0, -0.982247,-0.000001,0.187591,-0.1,-0.162459,-0.023607, -0.982247,-0.000001,0.187591,-0.08541,-0.262865,0.052786, 0.607062,0,-0.794655,0,-0.124108,-0.118034, 0.607062,0,-0.794655,0.023607,-0.162459,-0.1, 0.607062,0,-0.794655,-0.138196,-0.425325,-0.223606, 0.607065,-0.000003,-0.794652,-0.038197,-0.117557,-0.147214, 0.607065,-0.000003,-0.794652,0,-0.124108,-0.118034, 0.607065,-0.000003,-0.794652,-0.138196,-0.425325,-0.223606, 0.607062,-0.000002,-0.794654,0.17082,0,0.012461, 0.607062,-0.000002,-0.794654,0.18541,0.044903,0.023607, 0.607062,-0.000002,-0.794654,0.447213,0,0.223606, 0.607062,0.000002,-0.794654,0.18541,-0.044903,0.023607, 0.607062,0.000002,-0.794654,0.17082,0,0.012461, 0.607062,0.000002,-0.794654,0.447213,0,0.223606, 0.607065,0.000003,-0.794652,0,0.124108,-0.118034, 0.607065,0.000003,-0.794652,-0.038197,0.117557,-0.147214, 0.607065,0.000003,-0.794652,-0.138196,0.425325,-0.223606, 0.607062,0,-0.794655,0.023607,0.162459,-0.1, 0.607062,0,-0.794655,0,0.124108,-0.118034, 0.607062,0,-0.794655,-0.138196,0.425325,-0.223606, 0.607066,0,-0.794652,0.08541,-0.138758,-0.052786, 0.607066,0,-0.794652,0.123606,-0.145308,-0.023607, 0.607066,0,-0.794652,0.08541,-0.262865,-0.052786, 0.607061,0.000001,-0.794655,0.138196,0.100406,-0.012461, 0.607061,0.000001,-0.794655,0.123606,0.145308,-0.023607, 0.607061,0.000001,-0.794655,0.223606,0.162459,0.052786, 0.607069,0.000012,-0.794649,-0.052786,0.038352,-0.158359, 0.607069,0.000012,-0.794649,-0.076393,0,-0.176394, 0.607069,0.000012,-0.794649,-0.138196,0.100406,-0.223606, 0.607069,-0.000012,-0.794649,-0.076393,0,-0.176394, 0.607069,-0.000012,-0.794649,-0.052786,-0.038352,-0.158359, 0.607069,-0.000012,-0.794649,-0.138196,-0.100406,-0.223606, 0.607061,-0.000001,-0.794655,0.123606,-0.145308,-0.023607, 0.607061,-0.000001,-0.794655,0.138196,-0.100406,-0.012461, 0.607061,-0.000001,-0.794655,0.223606,-0.162459,0.052786, 0.607066,0,-0.794652,0.123606,0.145308,-0.023607, 0.607066,0,-0.794652,0.08541,0.138758,-0.052786, 0.607066,0,-0.794652,0.08541,0.262865,-0.052786, 0.607061,0,-0.794655,0.023607,-0.162459,-0.1, 0.607061,0,-0.794655,0.042705,-0.131433,-0.08541, 0.607061,0,-0.794655,0.08541,-0.262865,-0.052786, 0.60706,0.000002,-0.794656,0.18541,0.044903,0.023607, 0.60706,0.000002,-0.794656,0.154508,0.050203,0, 0.60706,0.000002,-0.794656,0.223606,0.162459,0.052786, 0.607061,-0.00001,-0.794655,-0.038197,0.117557,-0.147214, 0.607061,-0.00001,-0.794655,-0.026393,0.08123,-0.138196, 0.607061,-0.00001,-0.794655,-0.138196,0.100406,-0.223606, 0.607061,0.00001,-0.794655,-0.026393,-0.08123,-0.138196, 0.607061,0.00001,-0.794655,-0.038197,-0.117557,-0.147214, 0.607061,0.00001,-0.794655,-0.138196,-0.100406,-0.223606, 0.60706,-0.000002,-0.794656,0.154508,-0.050203,0, 0.60706,-0.000002,-0.794656,0.18541,-0.044903,0.023607, 0.60706,-0.000002,-0.794656,0.223606,-0.162459,0.052786, 0.607061,0,-0.794655,0.042705,0.131433,-0.08541, 0.607061,0,-0.794655,0.023607,0.162459,-0.1, 0.607061,0,-0.794655,0.08541,0.262865,-0.052786, 0.491125,-0.356827,0.794651,-0.072949,-0.100406,0.118034, 0.491125,-0.356827,0.794651,-0.1,-0.072654,0.147214, 0.491125,-0.356827,0.794651,-0.361803,-0.262865,0.223606, 0.491124,-0.356824,0.794654,-0.076393,-0.145308,0.1, 0.491124,-0.356824,0.794654,-0.072949,-0.100406,0.118034, 0.491124,-0.356824,0.794654,-0.361803,-0.262865,0.223606, 0.491121,-0.356821,0.794656,0.072949,0.100406,0.118034, 0.491121,-0.356821,0.794656,0.11459,0.117557,0.1, 0.491121,-0.356821,0.794656,0.138196,0.425325,0.223606, 0.491129,-0.356821,0.794652,0.038197,0.117557,0.147214, 0.491129,-0.356821,0.794652,0.072949,0.100406,0.118034, 0.491129,-0.356821,0.794652,0.138196,0.425325,0.223606, 0.491121,-0.356826,0.794654,0.138196,-0.100406,-0.012461, 0.491121,-0.356826,0.794654,0.123606,-0.145308,-0.023607, 0.491121,-0.356826,0.794654,0.361803,-0.262865,-0.223606, 0.491119,-0.356829,0.794654,0.176394,-0.072654,-0.023607, 0.491119,-0.356829,0.794654,0.138196,-0.100406,-0.012461, 0.491119,-0.356829,0.794654,0.361803,-0.262865,-0.223606, 0.491122,-0.356835,0.79465,-0.065247,0,0.158359, 0.491122,-0.356835,0.79465,-0.061803,0.044903,0.176394, 0.491122,-0.356835,0.79465,-0.17082,0,0.223606, 0.491124,-0.356822,0.794654,0.150658,0.062054,0.052786, 0.491124,-0.356822,0.794654,0.18541,0.044903,0.023607, 0.491124,-0.356822,0.794654,0.223606,0.162459,0.052786, 0.491128,-0.356819,0.794653,0.052786,-0.162459,0.012461, 0.491128,-0.356819,0.794653,0.01459,-0.190211,0.023607, 0.491128,-0.356819,0.794653,0.08541,-0.262865,-0.052786, 0.49112,-0.35682,0.794658,0.01459,-0.190211,0.023607, 0.49112,-0.35682,0.794658,-0.012461,-0.162459,0.052786, 0.49112,-0.35682,0.794658,-0.08541,-0.262865,0.052786, 0.491135,-0.356817,0.79465,-0.061803,0.044903,0.176394, 0.491135,-0.356817,0.79465,-0.020163,0.062054,0.158359, 0.491135,-0.356817,0.79465,-0.052786,0.162459,0.223606, 0.491124,-0.356824,0.794654,0.18541,0.044903,0.023607, 0.491124,-0.356824,0.794654,0.17082,0,0.012461, 0.491124,-0.356824,0.794654,0.276393,0,-0.052786, 0.491129,-0.356813,0.794655,-0.1,-0.072654,0.147214, 0.491129,-0.356813,0.794655,-0.069098,-0.050203,0.138196, 0.491129,-0.356813,0.794655,-0.17082,0,0.223606, 0.491124,-0.35682,0.794655,0.11459,0.117557,0.1, 0.491124,-0.35682,0.794655,0.111804,0.08123,0.08541, 0.491124,-0.35682,0.794655,0.223606,0.162459,0.052786, 0.491133,-0.356822,0.794648,0.123606,-0.145308,-0.023607, 0.491133,-0.356822,0.794648,0.095491,-0.131433,0, 0.491133,-0.356822,0.794648,0.08541,-0.262865,-0.052786, 0.491117,-0.356823,0.794658,-0.042705,-0.131433,0.08541, 0.491117,-0.356823,0.794658,-0.076393,-0.145308,0.1, 0.491117,-0.356823,0.794658,-0.08541,-0.262865,0.052786, 0.491117,-0.35683,0.794655,0.026393,0.08123,0.138196, 0.491117,-0.35683,0.794655,0.038197,0.117557,0.147214, 0.491117,-0.35683,0.794655,-0.052786,0.162459,0.223606, 0.491122,-0.356812,0.79466,0.154508,-0.050203,0, 0.491122,-0.356812,0.79466,0.176394,-0.072654,-0.023607, 0.491122,-0.356812,0.79466,0.276393,0,-0.052786, -0.794653,-0.577353,-0.187592,-0.052786,-0.038352,-0.158359, -0.794653,-0.577353,-0.187592,-0.076393,0,-0.176394, -0.794653,-0.577353,-0.187592,0,0,-0.5, -0.794657,-0.577347,-0.187592,-0.023607,-0.072654,-0.176394, -0.794657,-0.577347,-0.187592,-0.052786,-0.038352,-0.158359, -0.794657,-0.577347,-0.187592,0,0,-0.5, -0.794656,-0.577344,-0.187604,-0.158359,0.038352,0.052786, -0.794656,-0.577344,-0.187604,-0.161804,0.027751,0.1, -0.794656,-0.577344,-0.187604,-0.361803,0.262865,0.223606, -0.794652,-0.577358,-0.18758,-0.176394,0.072654,0.023607, -0.794652,-0.577358,-0.18758,-0.158359,0.038352,0.052786, -0.794652,-0.577358,-0.18758,-0.361803,0.262865,0.223606, -0.794658,-0.577347,-0.187587,-0.012461,-0.162459,0.052786, -0.794658,-0.577347,-0.187587,0.01459,-0.190211,0.023607, -0.794658,-0.577347,-0.187587,0.138196,-0.425325,0.223606, -0.794655,-0.577349,-0.187593,-0.023607,-0.162459,0.1, -0.794655,-0.577349,-0.187593,-0.012461,-0.162459,0.052786, -0.794655,-0.577349,-0.187593,0.138196,-0.425325,0.223606, -0.794652,-0.577353,-0.187596,-0.118034,0.038352,-0.118034, -0.794652,-0.577353,-0.187596,-0.147214,0.072654,-0.1, -0.794652,-0.577353,-0.187596,-0.138196,0.100406,-0.223606, -0.794654,-0.577351,-0.187592,-0.118034,-0.038352,0.118034, -0.794654,-0.577351,-0.187592,-0.1,-0.072654,0.147214, -0.794654,-0.577351,-0.187592,-0.17082,0,0.223606, -0.794654,-0.57735,-0.187593,0.012461,-0.162459,-0.052786, -0.794654,-0.57735,-0.187593,0.023607,-0.162459,-0.1, -0.794654,-0.57735,-0.187593,0.08541,-0.262865,-0.052786, -0.79465,-0.577356,-0.187592,0.023607,-0.162459,-0.1, -0.79465,-0.577356,-0.187592,0,-0.124108,-0.118034, -0.79465,-0.577356,-0.187592,0.052786,-0.162459,-0.223606, -0.794655,-0.577351,-0.187588,-0.147214,0.072654,-0.1, -0.794655,-0.577351,-0.187588,-0.150658,0.062054,-0.052786, -0.794655,-0.577351,-0.187588,-0.223606,0.162459,-0.052786, -0.794655,-0.57735,-0.18759,-0.1,-0.072654,0.147214, -0.794655,-0.57735,-0.18759,-0.072949,-0.100406,0.118034, -0.794655,-0.57735,-0.18759,-0.052786,-0.162459,0.223606, -0.794657,-0.577348,-0.18759,-0.076393,0,-0.176394, -0.794657,-0.577348,-0.18759,-0.08541,0,-0.138196, -0.794657,-0.577348,-0.18759,-0.138196,0.100406,-0.223606, -0.794646,-0.577362,-0.187591,-0.161804,0.027751,0.1, -0.794646,-0.577362,-0.187591,-0.138196,0,0.08541, -0.794646,-0.577362,-0.187591,-0.17082,0,0.223606, -0.794655,-0.577346,-0.187602,0.01459,-0.190211,0.023607, -0.794655,-0.577346,-0.187602,0,-0.162459,0, -0.794655,-0.577346,-0.187602,0.08541,-0.262865,-0.052786, -0.794652,-0.577354,-0.18759,-0.026393,-0.08123,-0.138196, -0.794652,-0.577354,-0.18759,-0.023607,-0.072654,-0.176394, -0.794652,-0.577354,-0.18759,0.052786,-0.162459,-0.223606, -0.794648,-0.577354,-0.187607,-0.154508,0.050203,0, -0.794648,-0.577354,-0.187607,-0.176394,0.072654,0.023607, -0.794648,-0.577354,-0.187607,-0.223606,0.162459,-0.052786, -0.794649,-0.577358,-0.187592,-0.042705,-0.131433,0.08541, -0.794649,-0.577358,-0.187592,-0.023607,-0.162459,0.1, -0.794649,-0.577358,-0.187592,-0.052786,-0.162459,0.223606, -0.303523,0.934173,0.187603,0.08541,0.138758,-0.052786, -0.303523,0.934173,0.187603,0.123606,0.145308,-0.023607, -0.303523,0.934173,0.187603,0.361803,0.262865,-0.223606, -0.303538,0.934173,0.187579,0.076393,0.145308,-0.1, -0.303538,0.934173,0.187579,0.08541,0.138758,-0.052786, -0.303538,0.934173,0.187579,0.361803,0.262865,-0.223606, -0.303526,0.934174,0.187592,-0.020163,0.062054,0.158359, -0.303526,0.934174,0.187592,-0.061803,0.044903,0.176394, -0.303526,0.934174,0.187592,0,0,0.5, -0.303535,0.934171,0.187592,0.023607,0.072654,0.176394, -0.303535,0.934171,0.187592,-0.020163,0.062054,0.158359, -0.303535,0.934171,0.187592,0,0,0.5, -0.303532,0.934172,0.187594,-0.150658,0.062054,-0.052786, -0.303532,0.934172,0.187594,-0.147214,0.072654,-0.1, -0.303532,0.934172,0.187594,-0.447213,0,-0.223606, -0.303531,0.934173,0.187591,-0.18541,0.044903,-0.023607, -0.303531,0.934173,0.187591,-0.150658,0.062054,-0.052786, -0.303531,0.934173,0.187591,-0.447213,0,-0.223606, -0.303526,0.934172,0.187599,0.105573,0.124108,0.052786, -0.303526,0.934172,0.187599,0.11459,0.117557,0.1, -0.303526,0.934172,0.187599,0.223606,0.162459,0.052786, -0.303529,0.934173,0.187594,-0.118034,0.038352,0.118034, -0.303529,0.934173,0.187594,-0.161804,0.027751,0.1, -0.303529,0.934173,0.187594,-0.17082,0,0.223606, -0.30353,0.934173,0.187591,-0.072949,0.100406,-0.118034, -0.30353,0.934173,0.187591,-0.038197,0.117557,-0.147214, -0.30353,0.934173,0.187591,-0.138196,0.100406,-0.223606, -0.303534,0.934173,0.187586,-0.038197,0.117557,-0.147214, -0.303534,0.934173,0.187586,0,0.124108,-0.118034, -0.303534,0.934173,0.187586,0.052786,0.162459,-0.223606, -0.30353,0.934173,0.187591,0.11459,0.117557,0.1, -0.30353,0.934173,0.187591,0.072949,0.100406,0.118034, -0.30353,0.934173,0.187591,0.138196,0.100406,0.223606, -0.303531,0.934173,0.187588,-0.161804,0.027751,0.1, -0.303531,0.934173,0.187588,-0.158359,0.038352,0.052786, -0.303531,0.934173,0.187588,-0.276393,0,0.052786, -0.303524,0.934177,0.187583,0.123606,0.145308,-0.023607, -0.303524,0.934177,0.187583,0.095491,0.131433,0, -0.303524,0.934177,0.187583,0.223606,0.162459,0.052786, -0.303535,0.934172,0.187588,-0.061803,0.044903,0.176394, -0.303535,0.934172,0.187588,-0.069098,0.050203,0.138196, -0.303535,0.934172,0.187588,-0.17082,0,0.223606, -0.303531,0.934173,0.187592,-0.147214,0.072654,-0.1, -0.303531,0.934173,0.187592,-0.111804,0.08123,-0.08541, -0.303531,0.934173,0.187592,-0.138196,0.100406,-0.223606, -0.303516,0.934178,0.18759,0.042705,0.131433,-0.08541, -0.303516,0.934178,0.18759,0.076393,0.145308,-0.1, -0.303516,0.934178,0.18759,0.052786,0.162459,-0.223606, -0.303529,0.934174,0.187588,0.026393,0.08123,0.138196, -0.303529,0.934174,0.187588,0.023607,0.072654,0.176394, -0.303529,0.934174,0.187588,0.138196,0.100406,0.223606, -0.30353,0.934172,0.187595,-0.154508,0.050203,0, -0.30353,0.934172,0.187595,-0.18541,0.044903,-0.023607, -0.30353,0.934172,0.187595,-0.276393,0,0.052786 }; static const struct gllist frame={GL_N3F_V3F,GL_TRIANGLES,1080,data,NULL}; const struct gllist *tronbit_no=&frame; xscreensaver-5.36/hacks/glx/tronbit_yes.c000664 000767 000024 00000002035 12701612217 020527 0ustar00jwzstaff000000 000000 /* yes = tetrahedron */ #include "gllist.h" static const float data[]={ 0.57735,0.57735,0.57735,0,0,0.5, 0.57735,0.57735,0.57735,0.5,0,0, 0.57735,0.57735,0.57735,0,0.5,0, -0.57735,0.57735,0.57735,0,0,0.5, -0.57735,0.57735,0.57735,0,0.5,0, -0.57735,0.57735,0.57735,-0.5,0,0, -0.57735,-0.57735,0.57735,0,0,0.5, -0.57735,-0.57735,0.57735,-0.5,0,0, -0.57735,-0.57735,0.57735,0,-0.5,0, 0.57735,-0.57735,0.57735,0,0,0.5, 0.57735,-0.57735,0.57735,0,-0.5,0, 0.57735,-0.57735,0.57735,0.5,0,0, 0.57735,-0.57735,-0.57735,0.5,0,0, 0.57735,-0.57735,-0.57735,0,-0.5,0, 0.57735,-0.57735,-0.57735,0,0,-0.5, 0.57735,0.57735,-0.57735,0.5,0,0, 0.57735,0.57735,-0.57735,0,0,-0.5, 0.57735,0.57735,-0.57735,0,0.5,0, -0.57735,0.57735,-0.57735,0,0.5,0, -0.57735,0.57735,-0.57735,0,0,-0.5, -0.57735,0.57735,-0.57735,-0.5,0,0, -0.57735,-0.57735,-0.57735,-0.5,0,0, -0.57735,-0.57735,-0.57735,0,0,-0.5, -0.57735,-0.57735,-0.57735,0,-0.5,0 }; static const struct gllist frame={GL_N3F_V3F,GL_TRIANGLES,24,data,NULL}; const struct gllist *tronbit_yes=&frame; xscreensaver-5.36/hacks/glx/kaleidocycle.c000644 000767 000024 00000034405 12710313215 020616 0ustar00jwzstaff000000 000000 /* kaleidocycle, Copyright (c) 2013-2014 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. * * A loop of rotating tetrahedra. Created by jwz, July 2013. * Inspired by, and some math borrowed from: * http://www.kaleidocycles.de/pdf/kaleidocycles_theory.pdf * http://intothecontinuum.tumblr.com/post/50873970770/an-even-number-of-at-least-8-regular-tetrahedra */ #define DEFAULTS "*delay: 30000 \n" \ "*count: 16 \n" \ "*showFPS: False \n" \ "*wireframe: False \n" \ "*suppressRotationAnimation: True\n" \ # define refresh_kaleidocycle 0 # define release_kaleidocycle 0 #undef countof #define countof(x) (sizeof((x))/sizeof((*x))) #include "xlockmore.h" #include "colors.h" #include "normals.h" #include "rotator.h" #include "gltrackball.h" #include #include #ifdef USE_GL /* whole file */ #define DEF_SPIN "Z" #define DEF_WANDER "False" #define DEF_SPEED "1.0" typedef struct { GLXContext *glx_context; rotator *rot, *rot2; trackball_state *trackball; Bool button_down_p; int min_count, max_count; Bool startup_p; int ncolors; XColor *colors; int ccolor; GLfloat count; GLfloat th, dth; enum { STATIC, IN, OUT } mode, prev_mode; } kaleidocycle_configuration; static kaleidocycle_configuration *bps = NULL; static char *do_spin; static GLfloat speed; static Bool do_wander; static XrmOptionDescRec opts[] = { { "-spin", ".spin", XrmoptionSepArg, 0 }, { "+spin", ".spin", XrmoptionNoArg, "" }, { "-wander", ".wander", XrmoptionNoArg, "True" }, { "+wander", ".wander", XrmoptionNoArg, "False" }, { "-speed", ".speed", XrmoptionSepArg, 0 }, }; static argtype vars[] = { {&do_spin, "spin", "Spin", DEF_SPIN, t_String}, {&do_wander, "wander", "Wander", DEF_WANDER, t_Bool}, {&speed, "speed", "Speed", DEF_SPEED, t_Float}, }; ENTRYPOINT ModeSpecOpt kaleidocycle_opts = {countof(opts), opts, countof(vars), vars, NULL}; /* Window management, etc */ ENTRYPOINT void reshape_kaleidocycle (ModeInfo *mi, int width, int height) { GLfloat h = (GLfloat) height / (GLfloat) width; glViewport (0, 0, (GLint) width, (GLint) height); glMatrixMode(GL_PROJECTION); glLoadIdentity(); gluPerspective (30.0, 1/h, 1.0, 100.0); glMatrixMode(GL_MODELVIEW); glLoadIdentity(); gluLookAt( 0.0, 0.0, 30.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0); # ifdef HAVE_MOBILE /* Keep it the same relative size when rotated. */ { int o = (int) current_device_rotation(); if (o != 0 && o != 180 && o != -180) glScalef (1/h, 1/h, 1/h); } # endif glClear(GL_COLOR_BUFFER_BIT); } ENTRYPOINT Bool kaleidocycle_handle_event (ModeInfo *mi, XEvent *event) { kaleidocycle_configuration *bp = &bps[MI_SCREEN(mi)]; if (gltrackball_event_handler (event, bp->trackball, MI_WIDTH (mi), MI_HEIGHT (mi), &bp->button_down_p)) return True; else if (event->xany.type == KeyPress) { KeySym keysym; char c = 0; XLookupString (&event->xkey, &c, 1, &keysym, 0); if (c == '+' || c == '.' || c == '>' || c == '=' || c == '+' || keysym == XK_Right || keysym == XK_Up || keysym == XK_Next) { bp->mode = IN; return True; } else if ((c == '-' || c == ',' || c == '<' || c == '-' || c == '_' || keysym == XK_Left || keysym == XK_Down || keysym == XK_Prior) && bp->count > bp->min_count) { bp->mode = OUT; return True; } else if (screenhack_event_helper (MI_DISPLAY(mi), MI_WINDOW(mi), event)) goto DEF; } else if (screenhack_event_helper (MI_DISPLAY(mi), MI_WINDOW(mi), event)) { DEF: if (bp->count <= bp->min_count) bp->mode = IN; else bp->mode = (random() & 1) ? IN : OUT; return True; } return False; } ENTRYPOINT void init_kaleidocycle (ModeInfo *mi) { kaleidocycle_configuration *bp; int wire = MI_IS_WIREFRAME(mi); int i; if (!bps) { bps = (kaleidocycle_configuration *) calloc (MI_NUM_SCREENS(mi), sizeof (kaleidocycle_configuration)); if (!bps) { fprintf(stderr, "%s: out of memory\n", progname); exit(1); } } bp = &bps[MI_SCREEN(mi)]; bp->glx_context = init_GL(mi); reshape_kaleidocycle (mi, MI_WIDTH(mi), MI_HEIGHT(mi)); glLineWidth (4); if (!wire) { GLfloat pos[4] = {1.0, 1.0, 1.0, 0.0}; GLfloat amb[4] = {0.0, 0.0, 0.0, 1.0}; GLfloat dif[4] = {1.0, 1.0, 1.0, 1.0}; GLfloat spc[4] = {0.0, 1.0, 1.0, 1.0}; glEnable(GL_LIGHTING); glEnable(GL_LIGHT0); glEnable(GL_DEPTH_TEST); glEnable(GL_CULL_FACE); glLightfv(GL_LIGHT0, GL_POSITION, pos); glLightfv(GL_LIGHT0, GL_AMBIENT, amb); glLightfv(GL_LIGHT0, GL_DIFFUSE, dif); glLightfv(GL_LIGHT0, GL_SPECULAR, spc); glEnable (GL_BLEND); glBlendFunc (GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); } { Bool spinx = False, spiny = False, spinz = False; double spin_speed = 0.25; double wander_speed = 0.005; double spin_accel = 0.2; double twist_speed = 0.25; double twist_accel = 1.0; char *s = do_spin; while (*s) { if (*s == 'x' || *s == 'X') spinx = True; else if (*s == 'y' || *s == 'Y') spiny = True; else if (*s == 'z' || *s == 'Z') spinz = True; else if (*s == '0') ; else { fprintf (stderr, "%s: spin must contain only the characters X, Y, or Z (not \"%s\")\n", progname, do_spin); exit (1); } s++; } bp->rot = make_rotator (spinx ? spin_speed : 0, spiny ? spin_speed : 0, spinz ? spin_speed : 0, spin_accel, do_wander ? wander_speed : 0, False); bp->rot2 = make_rotator (twist_speed, 0, 0, twist_accel, 0, True); bp->trackball = gltrackball_init (True); } if (MI_COUNT(mi) < 8) MI_COUNT(mi) = 8; if (MI_COUNT(mi) & 1) MI_COUNT(mi)++; bp->min_count = 8; bp->max_count = 12 + MI_COUNT(mi) * 1.3; if (bp->max_count & 1) bp->max_count++; bp->startup_p = True; bp->count = 0; bp->mode = IN; bp->prev_mode = IN; /* bp->count = MI_COUNT(mi); bp->mode = STATIC; */ bp->ncolors = 512; if (! bp->colors) bp->colors = (XColor *) calloc(bp->ncolors, sizeof(XColor)); make_uniform_colormap (0, 0, 0, bp->colors, &bp->ncolors, False, 0, False); for (i = 0; i < bp->ncolors; i++) { /* make colors twice as bright */ bp->colors[i].red = (bp->colors[i].red >> 2) + 0x7FFF; bp->colors[i].green = (bp->colors[i].green >> 2) + 0x7FFF; bp->colors[i].blue = (bp->colors[i].blue >> 2) + 0x7FFF; } glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); } /* t = toroidal rotation, a = radial position colors = 4 colors, 4 channels each. */ static void draw_tetra (ModeInfo *mi, double t, double a, Bool reflect_p, GLfloat *colors) { int wire = MI_IS_WIREFRAME(mi); XYZ v1, v2, v3, P, Q; XYZ verts[4]; int i; double scale; double sint = sin(t); double cost = cos(t); double tana = tan(a); double sint2 = sint * sint; double tana2 = tana * tana; v1.x = cost; v1.y = 0; v1.z = sint; scale = 1 / sqrt (1 + sint2 * tana2); v2.x = scale * -sint; v2.y = scale * -sint * tana; v2.z = scale * cost; v3.x = scale * -sint2 * tana; v3.y = scale; v3.z = scale * cost * sint * tana; P.x = v3.y / tana - v3.x; P.y = 0; P.z = -v3.z / 2; Q.x = v3.y / tana; Q.y = v3.y; Q.z = v3.z / 2; verts[0] = P; verts[1] = P; verts[2] = Q; verts[3] = Q; scale = sqrt(2) / 2; verts[0].x = P.x - scale * v1.x; verts[0].y = P.y - scale * v1.y; verts[0].z = P.z - scale * v1.z; verts[1].x = P.x + scale * v1.x; verts[1].y = P.y + scale * v1.y; verts[1].z = P.z + scale * v1.z; verts[2].x = Q.x - scale * v2.x; verts[2].y = Q.y - scale * v2.y; verts[2].z = Q.z - scale * v2.z; verts[3].x = Q.x + scale * v2.x; verts[3].y = Q.y + scale * v2.y; verts[3].z = Q.z + scale * v2.z; for (i = 0; i < 4; i++) { Bool reflect2_p = ((i + (reflect_p != 0)) & 1); XYZ a = verts[(i+1) % 4]; XYZ b = verts[(i+2) % 4]; XYZ c = verts[(i+3) % 4]; XYZ n = ((i & 1) ? calc_normal (b, a, c) : calc_normal (a, b, c)); if (wire) glColor4fv (colors + (i * 4)); else glMaterialfv (GL_FRONT, GL_AMBIENT_AND_DIFFUSE, colors + (i * 4)); glFrontFace (reflect2_p ? GL_CW : GL_CCW); glBegin (wire ? GL_LINE_LOOP : GL_TRIANGLES); glNormal3f (n.x, n.y, n.z); glVertex3f (a.x, a.y, a.z); glVertex3f (b.x, b.y, b.z); glVertex3f (c.x, c.y, c.z); glEnd(); } } /* Reflect through the plane normal to the given vector. */ static void reflect (double x, double y, double z) { GLfloat m[4][4]; m[0][0] = 1 - (2 * x * x); m[1][0] = -2 * x * y; m[2][0] = -2 * x * z; m[3][0] = 0; m[0][1] = -2 * x * y; m[1][1] = 1 - (2 * y * y); m[2][1] = -2 * y * z; m[3][1] = 0; m[0][2] = -2 * x * z; m[1][2] = -2 * y * z; m[2][2] = 1 - (2 * z * z); m[3][2] = 0; m[0][3] = 0; m[1][3] = 0; m[2][3] = 0; m[3][3] = 1; glMultMatrixf (&m[0][0]); } ENTRYPOINT void draw_kaleidocycle (ModeInfo *mi) { kaleidocycle_configuration *bp = &bps[MI_SCREEN(mi)]; Display *dpy = MI_DISPLAY(mi); Window window = MI_WINDOW(mi); GLfloat colors[4*4]; GLfloat count; double t, a; int i; GLfloat bspec[4] = {1.0, 1.0, 1.0, 1.0}; GLfloat bshiny = 128.0; if (!bp->glx_context) return; glXMakeCurrent(MI_DISPLAY(mi), MI_WINDOW(mi), *(bp->glx_context)); glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); mi->polygon_count = 0; glShadeModel(GL_SMOOTH); glEnable(GL_DEPTH_TEST); glEnable(GL_NORMALIZE); glEnable(GL_CULL_FACE); glPushMatrix (); { double x, y, z; get_position (bp->rot, &x, &y, &z, !bp->button_down_p); glTranslatef((x - 0.5) * 5, (y - 0.5) * 5, (z - 0.5) * 10); gltrackball_rotate (bp->trackball); get_rotation (bp->rot, &x, &y, &z, !bp->button_down_p); glRotatef (x * 360, 1, 0, 0); glRotatef (y * 360, 0, 1, 0); glRotatef (z * 360, 0, 0, 1); get_rotation (bp->rot2, &x, &y, &z, !bp->button_down_p); bp->th = x * 360 * 10 * speed; /* Make sure the twist is always in motion. Without this, the rotator sometimes stops, and for too long, and it's boring looking. */ bp->th += speed * bp->dth++; while (bp->dth > 360) bp->dth -= 360; while (bp->th > 360) bp->th -= 360; } glMaterialfv (GL_FRONT, GL_SPECULAR, bspec); glMateriali (GL_FRONT, GL_SHININESS, bshiny); /* Evenly spread the colors of the faces, and cycle them together. */ for (i = 0; i < 4; i++) { int o = bp->ncolors / 4; int c = (bp->ccolor + (o*i)) % bp->ncolors; colors[i*4+0] = bp->colors[c].red / 65536.0; colors[i*4+1] = bp->colors[c].green / 65536.0; colors[i*4+2] = bp->colors[c].blue / 65536.0; colors[i*4+3] = 1; } bp->ccolor++; if (bp->ccolor >= bp->ncolors) bp->ccolor = 0; count = (int) floor (bp->count); while (count < 8) count++; if (((int) floor (count)) & 1) count++; a = 2 * M_PI / (bp->count < 8 ? 8 : bp->count); t = bp->th / (180 / M_PI); glScalef (3, 3, 3); glScalef (a, a, a); glRotatef (90, 0, 0, 1); /* glRotatef (45, 0, 1, 0); */ for (i = 0; i <= (int) floor (bp->count); i++) { Bool flip_p = (i & 1); glPushMatrix(); glRotatef ((i/2) * 4 * 180 / bp->count, 0, 0, 1); if (flip_p) reflect (-sin(a), cos(a), 0); if (bp->mode != STATIC && i >= (int) floor (bp->count)) { /* Fractional bp->count means the last piece is in transition */ GLfloat scale = bp->count - (int) floor (bp->count); GLfloat tick = 0.07 * speed; GLfloat ocount = bp->count; GLfloat alpha; /* Fill in faster if we're starting up */ if (bp->count < MI_COUNT(mi)) tick *= 2; glScalef (scale, scale, scale); switch (bp->mode) { case IN: break; case OUT: tick = -tick; break; case STATIC: tick = 0; break; } bp->count += tick; if (bp->mode == IN ? floor (ocount) != floor (bp->count) : ceil (ocount) != ceil (bp->count)) { if (bp->mode == IN) bp->count = floor (ocount) + 1; else bp->count = ceil (ocount) - 1; if (((int) floor (bp->count)) & 1 || (bp->mode == IN && (bp->count < MI_COUNT(mi) && bp->startup_p))) { /* keep going if it's odd, or less than 8. */ bp->count = round(bp->count); } else { bp->mode = STATIC; bp->startup_p = False; } } alpha = (scale * scale * scale * scale); if (alpha < 0.4) alpha = 0.4; colors[3] = colors[7] = colors[11] = colors[15] = alpha; } draw_tetra (mi, t, a, flip_p, colors); mi->polygon_count += 4; glPopMatrix(); } if (bp->mode == STATIC && !(random() % 200)) { if (bp->count <= bp->min_count) bp->mode = IN; else if (bp->count >= bp->max_count) bp->mode = OUT; else bp->mode = bp->prev_mode; bp->prev_mode = bp->mode; } mi->recursion_depth = ceil (bp->count); glPopMatrix (); if (mi->fps_p) do_fps (mi); glFinish(); glXSwapBuffers(dpy, window); } XSCREENSAVER_MODULE ("Kaleidocycle", kaleidocycle) #endif /* USE_GL */ xscreensaver-5.36/hacks/glx/quasicrystal.c000644 000767 000024 00000031451 12705617413 020723 0ustar00jwzstaff000000 000000 /* quasicrystal, Copyright (c) 2013 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. * * Overlapping sine waves create interesting plane-tiling interference * patterns. Created by jwz, Jul 2013. Inspired by * http://mainisusuallyafunction.blogspot.com/2011/10/quasicrystals-as-sums-of-waves-in-plane.html */ #define DEFAULTS "*delay: 30000 \n" \ "*spin: True \n" \ "*wander: True \n" \ "*symmetric: True \n" \ "*count: 17 \n" \ "*contrast: 30 \n" \ "*showFPS: False \n" \ "*wireframe: False \n" \ "*suppressRotationAnimation: True\n" \ # define refresh_quasicrystal 0 # define release_quasicrystal 0 #undef countof #define countof(x) (sizeof((x))/sizeof((*x))) #include "xlockmore.h" #include "colors.h" #include "rotator.h" #include #ifdef USE_GL /* whole file */ #define DEF_SPEED "1.0" typedef struct { rotator *rot, *rot2; GLuint texid; } plane; typedef struct { GLXContext *glx_context; Bool button_down_p; Bool symmetric_p; GLfloat contrast; int count; int ncolors, ccolor; XColor *colors; plane *planes; int mousex, mousey; } quasicrystal_configuration; static quasicrystal_configuration *bps = NULL; static GLfloat speed; static XrmOptionDescRec opts[] = { { "-spin", ".spin", XrmoptionNoArg, "True" }, { "+spin", ".spin", XrmoptionNoArg, "False" }, { "-wander", ".wander", XrmoptionNoArg, "True" }, { "+wander", ".wander", XrmoptionNoArg, "False" }, { "-symmetry", ".symmetric", XrmoptionNoArg, "True" }, { "-no-symmetry", ".symmetric", XrmoptionNoArg, "False" }, { "-speed", ".speed", XrmoptionSepArg, 0 }, { "-contrast", ".contrast", XrmoptionSepArg, 0 }, }; static argtype vars[] = { {&speed, "speed", "Speed", DEF_SPEED, t_Float}, }; ENTRYPOINT ModeSpecOpt quasicrystal_opts = {countof(opts), opts, countof(vars), vars, NULL}; /* Window management, etc */ ENTRYPOINT void reshape_quasicrystal (ModeInfo *mi, int width, int height) { GLfloat h = (GLfloat) height / (GLfloat) width; glViewport (0, 0, (GLint) width, (GLint) height); glMatrixMode(GL_PROJECTION); glLoadIdentity(); glOrtho (0, 1, 1, 0, -1, 1); glMatrixMode(GL_MODELVIEW); glLoadIdentity(); glTranslatef (0.5, 0.5, 0); glScalef (h, 1, 1); if (width > height) glScalef (1/h, 1/h, 1); glTranslatef (-0.5, -0.5, 0); glClear(GL_COLOR_BUFFER_BIT); } ENTRYPOINT Bool quasicrystal_handle_event (ModeInfo *mi, XEvent *event) { quasicrystal_configuration *bp = &bps[MI_SCREEN(mi)]; if (event->xany.type == ButtonPress && event->xbutton.button == Button1) { bp->button_down_p = True; bp->mousex = event->xbutton.x; bp->mousey = event->xbutton.y; return True; } else if (event->xany.type == ButtonRelease && event->xbutton.button == Button1) { bp->button_down_p = False; return True; } else if (event->xany.type == ButtonPress && /* wheel up or right */ (event->xbutton.button == Button4 || event->xbutton.button == Button7)) { UP: if (bp->contrast <= 0) return False; bp->contrast--; return True; } else if (event->xany.type == ButtonPress && /* wheel down or left */ (event->xbutton.button == Button5 || event->xbutton.button == Button6)) { DOWN: if (bp->contrast >= 100) return False; bp->contrast++; return True; } else if (event->xany.type == MotionNotify && bp->button_down_p) { /* Dragging up and down tweaks contrast */ int dx = event->xmotion.x - bp->mousex; int dy = event->xmotion.y - bp->mousey; if (abs(dy) > abs(dx)) { bp->contrast += dy / 40.0; if (bp->contrast < 0) bp->contrast = 0; if (bp->contrast > 100) bp->contrast = 100; } bp->mousex = event->xmotion.x; bp->mousey = event->xmotion.y; return True; } else { if (event->xany.type == KeyPress) { KeySym keysym; char c = 0; XLookupString (&event->xkey, &c, 1, &keysym, 0); if (c == '<' || c == ',' || c == '-' || c == '_' || keysym == XK_Left || keysym == XK_Up || keysym == XK_Prior) goto UP; else if (c == '>' || c == '.' || c == '=' || c == '+' || keysym == XK_Right || keysym == XK_Down || keysym == XK_Next) goto DOWN; } return screenhack_event_helper (MI_DISPLAY(mi), MI_WINDOW(mi), event); } return False; } ENTRYPOINT void init_quasicrystal (ModeInfo *mi) { quasicrystal_configuration *bp; int wire = MI_IS_WIREFRAME(mi); unsigned char *tex_data = 0; int tex_width; int i; if (!bps) { bps = (quasicrystal_configuration *) calloc (MI_NUM_SCREENS(mi), sizeof (quasicrystal_configuration)); if (!bps) { fprintf(stderr, "%s: out of memory\n", progname); exit(1); } } bp = &bps[MI_SCREEN(mi)]; bp->glx_context = init_GL(mi); reshape_quasicrystal (mi, MI_WIDTH(mi), MI_HEIGHT(mi)); glDisable (GL_DEPTH_TEST); glEnable (GL_CULL_FACE); bp->count = MI_COUNT(mi); if (bp->count < 1) bp->count = 1; if (! wire) { unsigned char *o; tex_width = 4096; glGetIntegerv (GL_MAX_TEXTURE_SIZE, &tex_width); if (tex_width > 4096) tex_width = 4096; tex_data = (unsigned char *) calloc (4, tex_width); o = tex_data; for (i = 0; i < tex_width; i++) { unsigned char y = 255 * (1 + sin (i * M_PI * 2 / tex_width)) / 2; *o++ = y; *o++ = y; *o++ = y; *o++ = 255; } } bp->symmetric_p = get_boolean_resource (MI_DISPLAY (mi), "symmetry", "Symmetry"); bp->contrast = get_float_resource (MI_DISPLAY (mi), "contrast", "Contrast"); if (bp->contrast < 0 || bp->contrast > 100) { fprintf (stderr, "%s: contrast must be between 0 and 100%%.\n", progname); bp->contrast = 0; } { Bool spinp = get_boolean_resource (MI_DISPLAY (mi), "spin", "Spin"); Bool wanderp = get_boolean_resource (MI_DISPLAY (mi), "wander", "Wander"); double spin_speed = 0.01; double wander_speed = 0.0001; double spin_accel = 10.0; double scale_speed = 0.005; bp->planes = (plane *) calloc (sizeof (*bp->planes), bp->count); bp->ncolors = 256; /* ncolors affects color-cycling speed */ bp->colors = (XColor *) calloc (bp->ncolors, sizeof(XColor)); make_smooth_colormap (0, 0, 0, bp->colors, &bp->ncolors, False, 0, False); bp->ccolor = 0; for (i = 0; i < bp->count; i++) { plane *p = &bp->planes[i]; p->rot = make_rotator (0, 0, spinp ? spin_speed : 0, spin_accel, wanderp ? wander_speed : 0, True); p->rot2 = make_rotator (0, 0, 0, 0, scale_speed, True); if (! wire) { clear_gl_error(); glGenTextures (1, &p->texid); glBindTexture (GL_TEXTURE_1D, p->texid); glPixelStorei (GL_UNPACK_ALIGNMENT, 1); glTexImage1D (GL_TEXTURE_1D, 0, GL_RGBA, tex_width, 0, GL_RGBA, /* GL_UNSIGNED_BYTE, */ GL_UNSIGNED_INT_8_8_8_8_REV, tex_data); check_gl_error("texture"); glTexParameterf(GL_TEXTURE_1D, GL_TEXTURE_WRAP_S, GL_REPEAT); glTexParameterf(GL_TEXTURE_1D, GL_TEXTURE_WRAP_T, GL_REPEAT); glTexParameteri(GL_TEXTURE_1D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); glTexParameteri(GL_TEXTURE_1D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE); } } } if (tex_data) free (tex_data); glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); } ENTRYPOINT void draw_quasicrystal (ModeInfo *mi) { quasicrystal_configuration *bp = &bps[MI_SCREEN(mi)]; Display *dpy = MI_DISPLAY(mi); Window window = MI_WINDOW(mi); int wire = MI_IS_WIREFRAME(mi); double r=0, ps=0; int i; if (!bp->glx_context) return; glXMakeCurrent(MI_DISPLAY(mi), MI_WINDOW(mi), *(bp->glx_context)); glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); mi->polygon_count = 0; glShadeModel(GL_FLAT); glDisable(GL_DEPTH_TEST); glDisable(GL_CULL_FACE); glDisable (GL_LIGHTING); if (!wire) { glEnable (GL_TEXTURE_1D); # ifdef HAVE_JWZGLES glEnable (GL_TEXTURE_2D); /* jwzgles needs this, bleh. */ # endif } glEnable (GL_BLEND); glBlendFunc (GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); glPushMatrix (); glTranslatef (0.5, 0.5, 0); glScalef (3, 3, 3); if (wire) glScalef (0.2, 0.2, 0.2); for (i = 0; i < bp->count; i++) { plane *p = &bp->planes[i]; double x, y, z; double scale = (wire ? 10 : 700.0 / bp->count); double pscale; glPushMatrix(); get_position (p->rot, &x, &y, &z, !bp->button_down_p); glTranslatef((x - 0.5) * 0.3333, (y - 0.5) * 0.3333, 0); /* With -symmetry, keep the planes' scales in sync. Otherwise, they scale independently. */ if (bp->symmetric_p && i > 0) pscale = ps; else { get_position (p->rot2, &x, &y, &z, !bp->button_down_p); pscale = 1 + (4 * z); ps = pscale; } scale *= pscale; /* With -symmetry, evenly distribute the planes' rotation. Otherwise, they rotate independently. */ if (bp->symmetric_p && i > 0) z = r + (i * M_PI * 2 / bp->count); else { get_rotation (p->rot, &x, &y, &z, !bp->button_down_p); r = z; } glRotatef (z * 360, 0, 0, 1); glTranslatef (-0.5, -0.5, 0); glColor4f (1, 1, 1, (wire ? 0.5 : 1.0 / bp->count)); if (!wire) glBindTexture (GL_TEXTURE_1D, p->texid); glBegin (wire ? GL_LINE_LOOP : GL_QUADS); glNormal3f (0, 0, 1); glTexCoord2f (-scale/2, scale/2); glVertex3f (0, 1, 0); glTexCoord2f ( scale/2, scale/2); glVertex3f (1, 1, 0); glTexCoord2f ( scale/2, -scale/2); glVertex3f (1, 0, 0); glTexCoord2f (-scale/2, -scale/2); glVertex3f (0, 0, 0); glEnd(); if (wire) { float j; glDisable (GL_TEXTURE_1D); glColor4f (1, 1, 1, 1.0 / bp->count); for (j = 0; j < 1; j += (1 / scale)) { glBegin (GL_LINES); glVertex3f (j, 0, 0); glVertex3f (j, 1, 0); mi->polygon_count++; glEnd(); } } glPopMatrix(); mi->polygon_count++; } /* Colorize the grayscale image. */ { GLfloat c[4]; c[0] = bp->colors[bp->ccolor].red / 65536.0; c[1] = bp->colors[bp->ccolor].green / 65536.0; c[2] = bp->colors[bp->ccolor].blue / 65536.0; c[3] = 1; /* Brighten the colors. */ c[0] = (0.6666 + c[0]/3); c[1] = (0.6666 + c[1]/3); c[2] = (0.6666 + c[2]/3); glBlendFunc (GL_DST_COLOR, GL_SRC_COLOR); glDisable (GL_TEXTURE_1D); glColor4fv (c); glTranslatef (-0.5, -0.5, 0); glBegin (GL_QUADS); glVertex3f (0, 1, 0); glVertex3f (1, 1, 0); glVertex3f (1, 0, 0); glVertex3f (0, 0, 0); glEnd(); mi->polygon_count++; } /* Clip the colors to simulate contrast. */ if (bp->contrast > 0) { /* If c > 0, map 0 - 100 to 0.5 - 1.0, and use (s & ~d) */ GLfloat c = 1 - (bp->contrast / 2 / 100.0); glDisable (GL_TEXTURE_1D); glDisable (GL_BLEND); glEnable (GL_COLOR_LOGIC_OP); glLogicOp (GL_AND_REVERSE); glColor4f (c, c, c, 1); glBegin (GL_QUADS); glVertex3f (0, 1, 0); glVertex3f (1, 1, 0); glVertex3f (1, 0, 0); glVertex3f (0, 0, 0); glEnd(); mi->polygon_count++; glDisable (GL_COLOR_LOGIC_OP); } /* Rotate colors. */ bp->ccolor++; if (bp->ccolor >= bp->ncolors) bp->ccolor = 0; glPopMatrix (); if (mi->fps_p) do_fps (mi); glFinish(); glXSwapBuffers(dpy, window); } XSCREENSAVER_MODULE ("QuasiCrystal", quasicrystal) #endif /* USE_GL */ xscreensaver-5.36/hacks/glx/unknownpleasures.c000644 000767 000024 00000030017 12710312330 021601 0ustar00jwzstaff000000 000000 /* unknownpleasures, Copyright (c) 2013-2014 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. * * Translated from Mathematica code by Archery: * http://intothecontinuum.tumblr.com/post/27443100682/in-july-1967-astronomers-at-the-cavendish * * Interestingly, the original image is copyright-free: * http://adamcap.com/2011/05/19/history-of-joy-division-unknown-pleasures-album-art/ * https://en.wikipedia.org/wiki/Unknown_Pleasures * * TODO: * * - Performance is not great. Spending half our time in compute_line() * and half our time in glEnd(). It's a vast number of cos/pow calls, * and a vast number of polygons. I'm not sure how much could be cached. * * - There's too low periodicity vertically on the screen. * * - There's too low periodicity in time. * * - Could take advantage of time periodicity for caching: just save every * poly for an N second loop. That would be a huge amount of RAM though. * * - At low resolutions, GL_POLYGON_OFFSET_FILL seems to work poorly * and the lines get blocky. */ #define DEFAULTS "*delay: 30000 \n" \ "*count: 80 \n" \ "*resolution: 100 \n" \ "*ortho: True \n" \ "*showFPS: False \n" \ "*wireframe: False \n" \ "*geometry: =800x800" "\n" \ # define refresh_unk 0 # define release_unk 0 #undef countof #define countof(x) (sizeof((x))/sizeof((*x))) #include "xlockmore.h" #include "colors.h" #include "gltrackball.h" #include #ifdef USE_GL /* whole file */ #define DEF_SPEED "1.0" typedef struct { GLXContext *glx_context; trackball_state *trackball; Bool button_down_p; Bool orthop; GLfloat resolution; int count; GLfloat t; } unk_configuration; static unk_configuration *bps = NULL; static GLfloat speed; static XrmOptionDescRec opts[] = { { "-speed", ".speed", XrmoptionSepArg, 0 }, { "-resolution", ".resolution", XrmoptionSepArg, 0 }, { "-ortho", ".ortho", XrmoptionNoArg, "True" }, { "-no-ortho", ".ortho", XrmoptionNoArg, "False" }, }; static argtype vars[] = { {&speed, "speed", "Speed", DEF_SPEED, t_Float}, }; ENTRYPOINT ModeSpecOpt unk_opts = {countof(opts), opts, countof(vars), vars, NULL}; /* Window management, etc */ ENTRYPOINT void reshape_unk (ModeInfo *mi, int width, int height) { unk_configuration *bp = &bps[MI_SCREEN(mi)]; GLfloat h = (GLfloat) height / (GLfloat) width; glViewport (0, 0, (GLint) width, (GLint) height); if (bp->orthop) { glMatrixMode(GL_PROJECTION); glLoadIdentity(); gluPerspective (1.0, 1/h, 690, 710); glMatrixMode(GL_MODELVIEW); glLoadIdentity(); gluLookAt( 0, 0, 700, 0, 0, 0, 0, 1, 0); if (width < height) glScalef (1/h, 1/h, 1); glTranslatef (0, -0.5, 0); } else { glMatrixMode(GL_PROJECTION); glLoadIdentity(); gluPerspective (30.0, 1/h, 20.0, 40.0); glMatrixMode(GL_MODELVIEW); glLoadIdentity(); gluLookAt( 0.0, 0.0, 30.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0); if (width < height) glScalef (1/h, 1/h, 1); } glClear(GL_COLOR_BUFFER_BIT); } ENTRYPOINT Bool unk_handle_event (ModeInfo *mi, XEvent *event) { unk_configuration *bp = &bps[MI_SCREEN(mi)]; if (event->xany.type == ButtonPress && (event->xbutton.button == Button4 || event->xbutton.button == Button5 || event->xbutton.button == Button6 || event->xbutton.button == Button7)) { int b = event->xbutton.button; int speed = 1; if (b == Button6 || b == Button7) speed *= 3; if (bp->orthop) switch (b) { /* swap axes */ case Button4: b = Button6; break; case Button5: b = Button7; break; case Button6: b = Button4; break; case Button7: b = Button5; break; } gltrackball_mousewheel (bp->trackball, b, speed, !!event->xbutton.state); return True; } else if (gltrackball_event_handler (event, bp->trackball, MI_WIDTH (mi), MI_HEIGHT (mi), &bp->button_down_p)) return True; else if (screenhack_event_helper (MI_DISPLAY(mi), MI_WINDOW(mi), event)) { bp->orthop = !bp->orthop; reshape_unk (mi, MI_WIDTH(mi), MI_HEIGHT(mi)); return True; } return False; } ENTRYPOINT void init_unk (ModeInfo *mi) { unk_configuration *bp; if (!bps) { bps = (unk_configuration *) calloc (MI_NUM_SCREENS(mi), sizeof (unk_configuration)); if (!bps) { fprintf(stderr, "%s: out of memory\n", progname); exit(1); } } bp = &bps[MI_SCREEN(mi)]; bp->glx_context = init_GL(mi); bp->orthop = get_boolean_resource (MI_DISPLAY (mi), "ortho", "Ortho"); bp->resolution = get_float_resource (MI_DISPLAY (mi), "resolution", "Resolution"); if (bp->resolution < 1) bp->resolution = 1; if (bp->resolution > 300) bp->resolution = 300; reshape_unk (mi, MI_WIDTH(mi), MI_HEIGHT(mi)); bp->count = MI_COUNT(mi); if (bp->count < 1) bp->count = 1; bp->trackball = gltrackball_init (False); if (MI_COUNT(mi) < 1) MI_COUNT(mi) = 1; glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); } static double R (double f) { /* A simple, fast, deterministic PRNG. ya_rand_init() is too slow for this, and the stream of numbers here doesn't have to be high quality. */ #if 1 int seed0 = 1613287; # else /* Kluge to let me pick a good seed factor by trial and error... */ static int seed0 = 0; static int count = 0; if (count++ > 150000000) seed0 = 0, count=0; if (! seed0) { seed0 = (random() & 0xFFFFF); fprintf(stderr, "seed0 = %8x %d\n", seed0, seed0); } # endif long seed = seed0 * f; seed = 48271 * (seed % 44488) - 3399 * (seed / 44488); f = (double) seed / 0x7FFFFFFF; return f; } static void compute_line (ModeInfo *mi, int xmin, int xmax, GLfloat xinc, GLfloat res_scale, int y, GLfloat *points) { unk_configuration *bp = &bps[MI_SCREEN(mi)]; GLfloat fx; int lastx = -999999; /* Compute the points on the line */ for (fx = xmin; fx < xmax; fx += xinc) { int x = fx; int n; GLfloat hsum = 0, vsum = 0; if (x == lastx) continue; lastx = x; for (n = 1; n <= 30; n++) { /* This sum affects crinkliness of the lines */ hsum += (10 * sin (2 * M_PI * R (4 * y) + bp->t + R (2 * n * y) * 2 * M_PI) * exp (-pow ((.3 * (x / res_scale) + 30 - 1 * 100 * R (2 * n * y)), 2) / 20.0)); } for (n = 1; n <= 4; n++) { /* This sum affects amplitude of the peaks */ vsum += (3 * (1 + R (3 * n * y)) * fabs (sin (bp->t + R (n * y) * 2 * M_PI)) * exp (-pow (((x / res_scale) - 1 * 100 * R (n * y)), 2) / 20.0)); } /* Scale of this affects amplitude of the flat parts */ points[x - xmin] = (0.2 * sin (2 * M_PI * R (6 * y) + hsum) + vsum); } } ENTRYPOINT void draw_unk (ModeInfo *mi) { unk_configuration *bp = &bps[MI_SCREEN(mi)]; Display *dpy = MI_DISPLAY(mi); Window window = MI_WINDOW(mi); int wire = MI_IS_WIREFRAME(mi); GLfloat aspect = 1.5; GLfloat res_scale = 4; int xmin = -50 * res_scale; int xmax = 150 * res_scale; GLfloat xinc = 100.0 / (bp->resolution / res_scale); int ymin = 1; int ytop = MI_COUNT(mi); int yinc = 1; int y; GLfloat *points; if (xinc < 0.25) xinc = 0.25; if (!bp->glx_context) return; glXMakeCurrent(MI_DISPLAY(mi), MI_WINDOW(mi), *(bp->glx_context)); glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); mi->polygon_count = 0; glShadeModel (GL_FLAT); glEnable (GL_DEPTH_TEST); glDisable (GL_CULL_FACE); glPushMatrix (); glRotatef(current_device_rotation(), 0, 0, 1); gltrackball_rotate (bp->trackball); glScalef (10, 10, 10); glRotatef (-45, 1, 0, 0); glTranslatef (-0.5, -0.5, 0); if (bp->orthop) glTranslatef (0, 0.05, 0); else glTranslatef (0, 0.15, 0); points = (GLfloat *) malloc (sizeof(*points) * (xmax - xmin)); if (!bp->button_down_p) { double s = 6.3 / 19 / 3; # if 1 bp->t -= s * speed; if (bp->t <= 0) bp->t = s * 18 * 3; # else bp->t += s; # endif } glLineWidth (2); /* Lower the resolution to get a decent frame rate on iPhone 4s */ if (mi->xgwa.width <= 640 || mi->xgwa.height <= 640) { ytop *= 0.6; xinc *= 3; } # ifdef HAVE_MOBILE /* Lower it even further for iPhone 3 */ if (mi->xgwa.width <= 480 || mi->xgwa.height <= 480) { ytop *= 0.8; xinc *= 1.2; } /* Performance just sucks on iPad 3, even with a very high xinc. WTF? */ /* if (mi->xgwa.width >= 2048 || mi->xgwa.height >= 2048) xinc *= 2; */ # endif /* USE_MOBILE */ /* Make the image fill the screen a little more fully */ if (mi->xgwa.width <= 640 || mi->xgwa.height <= 640) { glScalef (1.2, 1.2, 1.2); glTranslatef (-0.08, 0, 0); } if (mi->xgwa.width <= 480 || mi->xgwa.height <= 480) glLineWidth (1); if (wire) xinc *= 1.3; /* Draw back mask */ { GLfloat s = 0.99; glDisable (GL_POLYGON_OFFSET_FILL); glColor3f (0, 0, 0); glPushMatrix(); glTranslatef (0, (1-aspect)/2, -0.005); glScalef (1, aspect, 1); glTranslatef (0.5, 0.5, 0); glScalef (s, s, 1); glBegin (GL_QUADS); glVertex3f (-0.5, -0.5, 0); glVertex3f ( 0.5, -0.5, 0); glVertex3f ( 0.5, 0.5, 0); glVertex3f (-0.5, 0.5, 0); glEnd(); glPopMatrix(); } if (! wire) { glEnable (GL_LINE_SMOOTH); glHint (GL_LINE_SMOOTH_HINT, GL_NICEST); glBlendFunc (GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); glEnable (GL_BLEND); /* So the masking quads don't interfere with the lines */ glEnable (GL_POLYGON_OFFSET_FILL); glPolygonOffset (1.0, 1.0); } for (y = ymin; y <= ytop; y += yinc) { /* Compute all the verts on the line */ compute_line (mi, xmin, xmax, xinc, res_scale, y, points); /* Draw the line segments; then draw the black shielding quads. */ { GLfloat yy = y / (GLfloat) ytop; int linesp; yy = (yy * aspect) - ((aspect - 1) / 2); for (linesp = 0; linesp <= 1; linesp++) { GLfloat fx; int lastx = -999999; GLfloat c = (linesp || wire ? 1 : 0); glColor3f (c, c, c); glBegin (linesp ? GL_LINE_STRIP : wire ? GL_LINES : GL_QUAD_STRIP); lastx = -999999; for (fx = xmin; fx < xmax; fx += xinc) { int x = fx; GLfloat xx = (x - xmin) / (GLfloat) (xmax - xmin); GLfloat zz = points [x - xmin]; if (x == lastx) continue; lastx = x; zz /= 80; glVertex3f (xx, yy, zz); if (! linesp) glVertex3f (xx, yy, 0); mi->polygon_count++; } glEnd (); } } } free (points); glPopMatrix (); if (mi->fps_p) do_fps (mi); glFinish(); glXSwapBuffers(dpy, window); } XSCREENSAVER_MODULE_2 ("UnknownPleasures", unknownpleasures, unk) #endif /* USE_GL */ xscreensaver-5.36/hacks/glx/geodesic.c000644 000767 000024 00000051533 12710313203 017746 0ustar00jwzstaff000000 000000 /* geodesic, Copyright (c) 2013-2014 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. */ #define DEFAULTS "*delay: 30000 \n" \ "*count: 4 \n" \ "*showFPS: False \n" \ "*suppressRotationAnimation: True\n" \ # define refresh_geodesic 0 # define release_geodesic 0 #undef countof #define countof(x) (sizeof((x))/sizeof((*x))) #include "xlockmore.h" #include "colors.h" #include "normals.h" #include "rotator.h" #include "gltrackball.h" #include #ifdef USE_GL /* whole file */ #include "gllist.h" #define DEF_SPIN "True" #define DEF_WANDER "True" #define DEF_SPEED "1.0" #define DEF_MODE "mesh" typedef struct { double a, o; } LL; /* latitude + longitude */ typedef struct { GLXContext *glx_context; rotator *rot; trackball_state *trackball; Bool button_down_p; int ncolors; XColor *colors; int ccolor, ccolor2; GLfloat color1[4], color2[4]; GLfloat depth; GLfloat delta; GLfloat thickness; GLfloat thickdelta; GLfloat morph_ratio; Bool random_p; enum { WIRE, MESH, SOLID, STELLATED, STELLATED2 } mode; } geodesic_configuration; static geodesic_configuration *bps = NULL; static Bool do_spin; static GLfloat speed; static Bool do_wander; static char *mode_str; static XrmOptionDescRec opts[] = { { "-spin", ".spin", XrmoptionNoArg, "True" }, { "+spin", ".spin", XrmoptionNoArg, "False" }, { "-speed", ".speed", XrmoptionSepArg, 0 }, { "-wander", ".wander", XrmoptionNoArg, "True" }, { "+wander", ".wander", XrmoptionNoArg, "False" }, { "-mode", ".mode", XrmoptionSepArg, 0 }, { "-wireframe", ".mode", XrmoptionNoArg, "wire" }, }; static argtype vars[] = { {&do_spin, "spin", "Spin", DEF_SPIN, t_Bool}, {&do_wander, "wander", "Wander", DEF_WANDER, t_Bool}, {&speed, "speed", "Speed", DEF_SPEED, t_Float}, {&mode_str, "mode", "Mode", DEF_MODE, t_String}, }; ENTRYPOINT ModeSpecOpt geodesic_opts = { countof(opts), opts, countof(vars), vars, NULL}; /* Renders a triangle specified by 3 cartesian endpoints. */ static void triangle0 (ModeInfo *mi, XYZ p1, XYZ p2, XYZ p3) { geodesic_configuration *bp = &bps[MI_SCREEN(mi)]; int wire = MI_IS_WIREFRAME(mi); GLfloat r = bp->thickness; if (bp->mode == SOLID || bp->mode == STELLATED || bp->mode == STELLATED2) r = 1; if (r <= 0.001) r = 0.001; glMaterialfv (GL_FRONT, GL_AMBIENT_AND_DIFFUSE, bp->color1); if (wire) r = 1; if (r <= 0) ; else if (r >= 1) /* solid triangular face */ { glFrontFace (GL_CCW); glBegin (wire ? GL_LINE_LOOP : GL_TRIANGLES); 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(); mi->polygon_count++; } else /* mesh: triangular face with a triangular hole */ { XYZ p1b, p2b, p3b, c; GLfloat d = 0.98; c.x = (p1.x + p2.x + p3.x) / 3; c.y = (p1.y + p2.y + p3.y) / 3; c.z = (p1.z + p2.z + p3.z) / 3; p1b.x = p1.x + (r * (c.x - p1.x)); p1b.y = p1.y + (r * (c.y - p1.y)); p1b.z = p1.z + (r * (c.z - p1.z)); p2b.x = p2.x + (r * (c.x - p2.x)); p2b.y = p2.y + (r * (c.y - p2.y)); p2b.z = p2.z + (r * (c.z - p2.z)); p3b.x = p3.x + (r * (c.x - p3.x)); p3b.y = p3.y + (r * (c.y - p3.y)); p3b.z = p3.z + (r * (c.z - p3.z)); /* Outside faces */ do_normal (p1.x, p1.y, p1.z, p2.x, p2.y, p2.z, p3.x, p3.y, p3.z); glBegin (wire ? GL_LINE_LOOP : GL_QUADS); glVertex3f (p1.x, p1.y, p1.z); glVertex3f (p1b.x, p1b.y, p1b.z); glVertex3f (p3b.x, p3b.y, p3b.z); glVertex3f (p3.x, p3.y, p3.z); mi->polygon_count++; glVertex3f (p1.x, p1.y, p1.z); glVertex3f (p2.x, p2.y, p2.z); glVertex3f (p2b.x, p2b.y, p2b.z); glVertex3f (p1b.x, p1b.y, p1b.z); mi->polygon_count++; glVertex3f (p2.x, p2.y, p2.z); glVertex3f (p3.x, p3.y, p3.z); glVertex3f (p3b.x, p3b.y, p3b.z); glVertex3f (p2b.x, p2b.y, p2b.z); mi->polygon_count++; glEnd(); /* Inside faces */ glMaterialfv (GL_FRONT, GL_AMBIENT_AND_DIFFUSE, bp->color2); do_normal (p3.x, p3.y, p3.z, p3b.x, p3b.y, p3b.z, p1b.x, p1b.y, p1b.z); glBegin (wire ? GL_LINE_LOOP : GL_QUADS); glVertex3f (d * p3.x, d * p3.y, d * p3.z); glVertex3f (d * p3b.x, d * p3b.y, d * p3b.z); glVertex3f (d * p1b.x, d * p1b.y, d * p1b.z); glVertex3f (d * p1.x, d * p1.y, d * p1.z); mi->polygon_count++; glVertex3f (d * p1b.x, d * p1b.y, d * p1b.z); glVertex3f (d * p2b.x, d * p2b.y, d * p2b.z); glVertex3f (d * p2.x, d * p2.y, d * p2.z); glVertex3f (d * p1.x, d * p1.y, d * p1.z); mi->polygon_count++; glVertex3f (d * p2b.x, d * p2b.y, d * p2b.z); glVertex3f (d * p3b.x, d * p3b.y, d * p3b.z); glVertex3f (d * p3.x, d * p3.y, d * p3.z); glVertex3f (d * p2.x, d * p2.y, d * p2.z); mi->polygon_count++; glEnd(); /* Connecting edges */ glMaterialfv (GL_FRONT, GL_AMBIENT_AND_DIFFUSE, bp->color1); glBegin (wire ? GL_LINE_LOOP : GL_QUADS); do_normal (p1b.x, p1b.y, p1b.z, p2b.x, p2b.y, p2b.z, p2b.x * d, p2b.y * d, p2b.z * d); glVertex3f (p1b.x, p1b.y, p1b.z); glVertex3f (p2b.x, p2b.y, p2b.z); glVertex3f (p2b.x * d, p2b.y * d, p2b.z * d); glVertex3f (p1b.x * d, p1b.y * d, p1b.z * d); mi->polygon_count++; do_normal (p2b.x, p2b.y, p2b.z, p3b.x, p3b.y, p3b.z, p3b.x * d, p3b.y * d, p3b.z * d); glVertex3f (p2b.x, p2b.y, p2b.z); glVertex3f (p3b.x, p3b.y, p3b.z); glVertex3f (p3b.x * d, p3b.y * d, p3b.z * d); glVertex3f (p2b.x * d, p2b.y * d, p2b.z * d); mi->polygon_count++; do_normal (p3b.x, p3b.y, p3b.z, p1b.x, p1b.y, p1b.z, p1b.x * d, p1b.y * d, p1b.z * d); glVertex3f (p3b.x, p3b.y, p3b.z); glVertex3f (p1b.x, p1b.y, p1b.z); glVertex3f (p1b.x * d, p1b.y * d, p1b.z * d); glVertex3f (p3b.x * d, p3b.y * d, p3b.z * d); mi->polygon_count++; glEnd(); } } /* Renders a triangle specified by 3 polar endpoints. */ static void triangle1 (ModeInfo *mi, LL v1, LL v2, LL v3) { XYZ p1, p2, p3; p1.x = cos (v1.a) * cos (v1.o); p1.y = cos (v1.a) * sin (v1.o); p1.z = sin (v1.a); p2.x = cos (v2.a) * cos (v2.o); p2.y = cos (v2.a) * sin (v2.o); p2.z = sin (v2.a); p3.x = cos (v3.a) * cos (v3.o); p3.y = cos (v3.a) * sin (v3.o); p3.z = sin (v3.a); triangle0 (mi, p1, p2, p3); } /* Computes the midpoint of a line between two polar coords. */ static void midpoint2 (LL v1, LL v2, LL *vm_ret, XYZ *p1_ret, XYZ *p2_ret, XYZ *pm_ret) { XYZ p1, p2, pm; LL vm; GLfloat hyp; p1.x = cos (v1.a) * cos (v1.o); p1.y = cos (v1.a) * sin (v1.o); p1.z = sin (v1.a); p2.x = cos (v2.a) * cos (v2.o); p2.y = cos (v2.a) * sin (v2.o); p2.z = sin (v2.a); pm.x = (p1.x + p2.x) / 2; pm.y = (p1.y + p2.y) / 2; pm.z = (p1.z + p2.z) / 2; vm.o = atan2 (pm.y, pm.x); hyp = sqrt (pm.x * pm.x + pm.y * pm.y); vm.a = atan2 (pm.z, hyp); *p1_ret = p1; *p2_ret = p2; *pm_ret = pm; *vm_ret = vm; } /* Computes the midpoint of a triangle specified in polar coords. */ static void midpoint3 (LL v1, LL v2, LL v3, LL *vm_ret, XYZ *p1_ret, XYZ *p2_ret, XYZ *p3_ret, XYZ *pm_ret) { XYZ p1, p2, p3, pm; LL vm; GLfloat hyp; p1.x = cos (v1.a) * cos (v1.o); p1.y = cos (v1.a) * sin (v1.o); p1.z = sin (v1.a); p2.x = cos (v2.a) * cos (v2.o); p2.y = cos (v2.a) * sin (v2.o); p2.z = sin (v2.a); p3.x = cos (v3.a) * cos (v3.o); p3.y = cos (v3.a) * sin (v3.o); p3.z = sin (v3.a); pm.x = (p1.x + p2.x + p3.x) / 3; pm.y = (p1.y + p2.y + p3.y) / 3; pm.z = (p1.z + p2.z + p3.z) / 3; vm.o = atan2 (pm.y, pm.x); hyp = sqrt (pm.x * pm.x + pm.y * pm.y); vm.a = atan2 (pm.z, hyp); *p1_ret = p1; *p2_ret = p2; *p3_ret = p3; *pm_ret = pm; *vm_ret = vm; } /* Renders a triangular geodesic facet to the given depth. */ static void triangle (ModeInfo *mi, LL v1, LL v2, LL v3, int depth) { geodesic_configuration *bp = &bps[MI_SCREEN(mi)]; if (depth <= 0) triangle1 (mi, v1, v2, v3); else { LL v12, v23, v13; XYZ p1, p2, p3, p12, p23, p13; GLfloat r = bp->morph_ratio; midpoint2 (v1, v2, &v12, &p1, &p2, &p12); midpoint2 (v2, v3, &v23, &p2, &p3, &p23); midpoint2 (v1, v3, &v13, &p1, &p3, &p13); depth--; if (depth == 0 && r != 0 && (bp->mode == STELLATED || bp->mode == STELLATED2)) { /* morph between flat and stellated faces */ XYZ pc, pc2; LL vc; midpoint3 (v1, v2, v3, &vc, &p1, &p2, &p3, &pc); pc2.x = cos (vc.a) * cos (vc.o); pc2.y = cos (vc.a) * sin (vc.o); pc2.z = sin (vc.a); pc.x = pc.x + r * (pc2.x - pc.x); pc.y = pc.y + r * (pc2.y - pc.y); pc.z = pc.z + r * (pc2.z - pc.z); triangle0 (mi, p1, p2, pc); triangle0 (mi, p2, p3, pc); triangle0 (mi, p3, p1, pc); } else if (depth == 0 && r < 1) { /* morph between flat and sphere-oid faces */ XYZ p12b, p23b, p13b; p12b.x = cos (v12.a) * cos (v12.o); p12b.y = cos (v12.a) * sin (v12.o); p12b.z = sin (v12.a); p23b.x = cos (v23.a) * cos (v23.o); p23b.y = cos (v23.a) * sin (v23.o); p23b.z = sin (v23.a); p13b.x = cos (v13.a) * cos (v13.o); p13b.y = cos (v13.a) * sin (v13.o); p13b.z = sin (v13.a); p12.x = p12.x + r * (p12b.x - p12.x); p12.y = p12.y + r * (p12b.y - p12.y); p12.z = p12.z + r * (p12b.z - p12.z); p23.x = p23.x + r * (p23b.x - p23.x); p23.y = p23.y + r * (p23b.y - p23.y); p23.z = p23.z + r * (p23b.z - p23.z); p13.x = p13.x + r * (p13b.x - p13.x); p13.y = p13.y + r * (p13b.y - p13.y); p13.z = p13.z + r * (p13b.z - p13.z); triangle0 (mi, p1, p12, p13); triangle0 (mi, p12, p2, p23); triangle0 (mi, p13, p23, p3); triangle0 (mi, p12, p23, p13); } else { triangle (mi, v1, v12, v13, depth); triangle (mi, v12, v2, v23, depth); triangle (mi, v13, v23, v3, depth); triangle (mi, v12, v23, v13, depth); } } } /* Renders a geodesic sphere to the given depth (frequency). */ static void make_geodesic (ModeInfo *mi, int depth) { GLfloat th0 = atan (0.5); /* lat division: 26.57 deg */ GLfloat s = M_PI / 5; /* lon division: 72 deg */ int i; for (i = 0; i < 10; i++) { GLfloat th1 = s * i; GLfloat th2 = s * (i+1); GLfloat th3 = s * (i+2); LL v1, v2, v3, vc; v1.a = th0; v1.o = th1; v2.a = th0; v2.o = th3; v3.a = -th0; v3.o = th2; vc.a = M_PI/2; vc.o = th2; if (i & 1) /* north */ { triangle (mi, v1, v2, vc, depth); triangle (mi, v2, v1, v3, depth); } else /* south */ { v1.a = -v1.a; v2.a = -v2.a; v3.a = -v3.a; vc.a = -vc.a; triangle (mi, v2, v1, vc, depth); triangle (mi, v1, v2, v3, depth); } } } /* Window management, etc */ ENTRYPOINT void reshape_geodesic (ModeInfo *mi, int width, int height) { GLfloat h = (GLfloat) height / (GLfloat) width; glViewport (0, 0, (GLint) width, (GLint) height); glMatrixMode(GL_PROJECTION); glLoadIdentity(); gluPerspective (30.0, 1/h, 1.0, 100.0); glMatrixMode(GL_MODELVIEW); glLoadIdentity(); gluLookAt( 0.0, 0.0, 30.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0); # ifdef HAVE_MOBILE /* Keep it the same relative size when rotated. */ { int o = (int) current_device_rotation(); if (o != 0 && o != 180 && o != -180) glScalef (1/h, 1/h, 1/h); } # endif glClear(GL_COLOR_BUFFER_BIT); } ENTRYPOINT void init_geodesic (ModeInfo *mi) { geodesic_configuration *bp; int wire = MI_IS_WIREFRAME(mi); if (!bps) { bps = (geodesic_configuration *) calloc (MI_NUM_SCREENS(mi), sizeof (geodesic_configuration)); if (!bps) { fprintf(stderr, "%s: out of memory\n", progname); exit(1); } } bp = &bps[MI_SCREEN(mi)]; bp->glx_context = init_GL(mi); reshape_geodesic (mi, MI_WIDTH(mi), MI_HEIGHT(mi)); /* This comes first because it sets wire. */ if (!mode_str || !*mode_str) mode_str = DEF_MODE; if (!strcasecmp(mode_str, "random")) { bp->random_p = 1; bp->mode = MESH + (random() % (STELLATED2 - MESH + 1)); } else if (!strcasecmp(mode_str, "mesh")) { bp->mode = MESH; } else if (!strcasecmp(mode_str, "solid")) { bp->mode = SOLID; } else if (!strcasecmp(mode_str, "stellated")) { bp->mode = STELLATED; } else if (!strcasecmp(mode_str, "stellated2")) { bp->mode = STELLATED2; } else if (!strcasecmp(mode_str, "wire")) { bp->mode = WIRE; MI_IS_WIREFRAME(mi) = wire = 1; } else { fprintf (stderr, "%s: unknown mode: %s\n", progname, mode_str); exit (1); } { static GLfloat cspec[4] = {1.0, 1.0, 1.0, 1.0}; static const GLfloat shiny = 128.0; static GLfloat pos[4] = {1.0, 1.0, 1.0, 0.0}; static GLfloat amb[4] = {0.0, 0.0, 0.0, 1.0}; static GLfloat dif[4] = {1.0, 1.0, 1.0, 1.0}; static GLfloat spc[4] = {0.0, 1.0, 1.0, 1.0}; glLightfv(GL_LIGHT0, GL_POSITION, pos); glLightfv(GL_LIGHT0, GL_AMBIENT, amb); glLightfv(GL_LIGHT0, GL_DIFFUSE, dif); glLightfv(GL_LIGHT0, GL_SPECULAR, spc); glMaterialfv (GL_FRONT, GL_SPECULAR, cspec); glMateriali (GL_FRONT, GL_SHININESS, shiny); glLineWidth (3); } if (! wire) { glEnable (GL_DEPTH_TEST); glEnable (GL_BLEND); glBlendFunc (GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); } /* Actually this looks pretty good in -wire with lighting! */ glEnable (GL_LIGHTING); glEnable (GL_LIGHT0); if (! bp->rot) { double spin_speed = 0.25 * speed; double wander_speed = 0.01 * speed; double spin_accel = 0.2; bp->rot = make_rotator (do_spin ? spin_speed : 0, do_spin ? spin_speed : 0, do_spin ? spin_speed : 0, spin_accel, do_wander ? wander_speed : 0, True); bp->trackball = gltrackball_init (True); } if (MI_COUNT(mi) < 1) MI_COUNT(mi) = 1; bp->ncolors = 1024; if (! bp->colors) bp->colors = (XColor *) calloc(bp->ncolors, sizeof(XColor)); make_smooth_colormap (0, 0, 0, bp->colors, &bp->ncolors, False, 0, False); bp->ccolor = 0; bp->depth = 1; /* start 1 up from the icosahedron */ bp->delta = 0.003; #if 0 bp->thickness = 1; bp->thickdelta = 0.0007; #else bp->thickness = 0.1; bp->thickdelta = 0; #endif } ENTRYPOINT Bool geodesic_handle_event (ModeInfo *mi, XEvent *event) { geodesic_configuration *bp = &bps[MI_SCREEN(mi)]; if (gltrackball_event_handler (event, bp->trackball, MI_WIDTH (mi), MI_HEIGHT (mi), &bp->button_down_p)) return True; else if (screenhack_event_helper (MI_DISPLAY(mi), MI_WINDOW(mi), event)) { mode_str = "random"; init_geodesic (mi); return True; } return False; } ENTRYPOINT void draw_geodesic (ModeInfo *mi) { int wire = MI_IS_WIREFRAME(mi); geodesic_configuration *bp = &bps[MI_SCREEN(mi)]; Display *dpy = MI_DISPLAY(mi); Window window = MI_WINDOW(mi); if (!bp->glx_context) return; glXMakeCurrent(MI_DISPLAY(mi), MI_WINDOW(mi), *(bp->glx_context)); if (! wire) glShadeModel(GL_SMOOTH); glEnable(GL_DEPTH_TEST); glEnable(GL_NORMALIZE); glEnable(GL_CULL_FACE); glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glPushMatrix (); { double x, y, z; get_position (bp->rot, &x, &y, &z, !bp->button_down_p); glTranslatef((x - 0.5) * 8, (y - 0.5) * 8, (z - 0.5) * 15); gltrackball_rotate (bp->trackball); get_rotation (bp->rot, &x, &y, &z, !bp->button_down_p); glRotatef (x * 360, 1.0, 0.0, 0.0); glRotatef (y * 360, 0.0, 1.0, 0.0); glRotatef (z * 360, 0.0, 0.0, 1.0); } bp->color1[0] = bp->colors[bp->ccolor].red / 65536.0; bp->color1[1] = bp->colors[bp->ccolor].green / 65536.0; bp->color1[2] = bp->colors[bp->ccolor].blue / 65536.0; bp->color1[3] = 1; bp->color2[0] = bp->colors[bp->ccolor2].red / 65536.0; bp->color2[1] = bp->colors[bp->ccolor2].green / 65536.0; bp->color2[2] = bp->colors[bp->ccolor2].blue / 65536.0; bp->color2[3] = 1; bp->ccolor = (bp->ccolor + 1) % bp->ncolors; bp->ccolor2 = (bp->ccolor + bp->ncolors / 2) % bp->ncolors; mi->polygon_count = 0; glScalef (10, 10, 10); { GLfloat r = bp->depth - floor(bp->depth); GLfloat alpha, morph1, morph2; int d1, d2; /* Two ranges: first for fading in the new segments. Second for morphing the segments into position. */ GLfloat range = 0.15; GLfloat min1 = (0.5 - range) / 2; GLfloat max1 = 0.5 - min1; GLfloat min2 = 0.5 + min1; GLfloat max2 = 0.5 + max1; if (r < min1) /* old alone */ { d1 = d2 = floor (bp->depth); morph1 = morph2 = 1; alpha = 1; } else if (r < max1 && /* fade to new flat */ (bp->mode == MESH || bp->mode == STELLATED || bp->mode == STELLATED2)) { d1 = floor (bp->depth); d2 = ceil (bp->depth); morph1 = 1; morph2 = 0; alpha = (r - min1) / (max1 - min1); if (bp->mode == STELLATED || bp->mode == STELLATED2) { morph1 = 1 - alpha; /* de-stellate while fading out */ morph1 = 2 * (morph1 - 0.5); /* do it faster */ if (morph1 < 0) morph1 = 0; } } else if (r < min2) /* new flat */ { d1 = d2 = ceil (bp->depth); morph1 = morph2 = 0; alpha = 1; } else if (r < max2) /* morph */ { d1 = d2 = ceil (bp->depth); morph1 = morph2 = (r - min2) / (max2 - min2); alpha = 1; } else /* new alone */ { d1 = d2 = ceil (bp->depth); morph1 = morph2 = 1; alpha = 1; } mi->recursion_depth = d2 + r; if (bp->mode == STELLATED2) { morph1 = -morph1; morph2 = -morph2; } if (d1 != d2) { if (alpha > 0.5) /* always draw the more transparent one first */ { int s1; GLfloat s2; s1 = d1; d1 = d2; d2 = s1; s2 = morph1; morph1 = morph2; morph2 = s2; alpha = 1 - alpha; } bp->color1[3] = 1 - alpha; bp->color2[3] = 1 - alpha; if (! wire) glDisable (GL_POLYGON_OFFSET_FILL); bp->morph_ratio = morph1; make_geodesic (mi, d1); /* Make the less-transparent object take precedence */ if (!wire) { glEnable (GL_POLYGON_OFFSET_FILL); glPolygonOffset (1.0, 1.0); } } bp->color1[3] = alpha; bp->color2[3] = alpha; bp->morph_ratio = morph2; make_geodesic (mi, d2); } glPopMatrix (); if (mi->fps_p) do_fps (mi); glFinish(); glXSwapBuffers(dpy, window); if (! bp->button_down_p) { bp->depth += speed * bp->delta; bp->thickness += speed * bp->thickdelta; if (bp->depth > MI_COUNT(mi)-1) { bp->depth = MI_COUNT(mi)-1; bp->delta = -fabs (bp->delta); } else if (bp->depth < 0) { bp->depth = 0; bp->delta = fabs (bp->delta); /* Randomize the mode again when we hit the bottom state. #### I wish this did a fade instead of a jump-cut. */ if (bp->random_p) bp->mode = MESH + (random() % (STELLATED2 - MESH + 1)); } if (bp->thickness > 1) { bp->thickness = 1; bp->thickdelta = -fabs (bp->thickdelta); } else if (bp->thickness < 0) { bp->thickness = 0; bp->thickdelta = fabs (bp->thickdelta); } } } XSCREENSAVER_MODULE ("Geodesic", geodesic) #endif /* USE_GL */ xscreensaver-5.36/hacks/glx/geodesicgears.c000644 000767 000024 00000133052 12710313204 020766 0ustar00jwzstaff000000 000000 /* geodesicgears, Copyright (c) 2014-2015 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. * * Inspired by http://bugman123.com/Gears/ * and by http://kennethsnelson.net/PortraitOfAnAtom.pdf */ #define DEFAULTS "*delay: 30000 \n" \ "*count: 4 \n" \ "*wireframe: False \n" \ "*showFPS: False \n" \ "*texFontCacheSize: 100 \n" \ "*suppressRotationAnimation: True\n" \ "*font: -*-helvetica-medium-r-normal-*-*-160-*-*-*-*-*-*\n" \ # define refresh_geodesic 0 #undef countof #define countof(x) (sizeof((x))/sizeof((*x))) #include "xlockmore.h" #include "involute.h" #include "colors.h" #include "normals.h" #include "rotator.h" #include "gltrackball.h" #include #include "texfont.h" #ifdef USE_GL /* whole file */ #include "gllist.h" #define DEF_SPIN "True" #define DEF_WANDER "True" #define DEF_SPEED "1.0" #define DEF_LABELS "False" #define DEF_NUMBERS "False" #define DEF_TIMEOUT "20" typedef struct { double a, o; } LL; /* latitude + longitude */ /* 10:6 is a mismesh. */ static const struct { enum { PRISM, OCTO, DECA, G14, G18, G32, G92, G182 } type; const GLfloat args[5]; } gear_templates[] = { { PRISM }, { OCTO }, { DECA }, { G14 }, { G18 }, { G32, { 15, 6, 0.4535 }}, /* teeth1, teeth2, radius1 */ { G32, { 15, 12, 0.3560 }}, { G32, { 20, 6, 0.4850 }}, { G32, { 20, 12, 0.3995 }}, /* double of 10:6 */ { G32, { 20, 18, 0.3375 }}, { G32, { 25, 6, 0.5065 }}, { G32, { 25, 12, 0.4300 }}, { G32, { 25, 18, 0.3725 }}, { G32, { 25, 24, 0.3270 }}, { G32, { 30, 12, 0.4535 }}, /* double of 15:6 */ { G32, { 30, 18, 0.3995 }}, { G32, { 30, 24, 0.3560 }}, /* double of 15:12 */ { G32, { 30, 30, 0.3205 }}, { G32, { 35, 12, 0.4710 }}, { G32, { 35, 18, 0.4208 }}, { G32, { 35, 24, 0.3800 }}, { G32, { 35, 30, 0.3450 }}, { G32, { 35, 36, 0.3160 }}, { G32, { 40, 12, 0.4850 }}, /* double of 20:6 */ { G32, { 40, 24, 0.3995 }}, /* double of 10:6, 20:12 */ /*{ G32, { 40, 36, 0.3375 }},*/ /* double of 20:18 */ { G32, { 50, 12, 0.5065 }}, /* double of 25:6 */ { G32, { 50, 24, 0.4300 }}, /* double of 25:12 */ /* These all have phase errors and don't always mesh properly. Maybe we should just omit them? */ { G92, { 35, 36, 16, 0.2660, 0.366 }}, /* teeth1, 2, 3, r1, pitch3 */ { G92, { 25, 36, 11, 0.2270, 0.315 }}, /*{ G92, { 15, 15, 8, 0.2650, 0.356 }},*/ /*{ G92, { 20, 21, 8, 0.2760, 0.355 }},*/ { G92, { 25, 27, 16, 0.2320, 0.359 }}, { G92, { 20, 36, 11, 0.1875, 0.283 }}, { G92, { 30, 30, 16, 0.2585, 0.374 }}, /* double of 15:15:8 */ { G92, { 20, 33, 11, 0.1970, 0.293 }}, /*{ G92, { 10, 12, 8, 0.2030, 0.345 }},*/ { G92, { 30, 33, 16, 0.2455, 0.354 }}, /*{ G92, { 25, 24, 8, 0.3050, 0.375 }},*/ { G92, { 20, 24, 16, 0.2030, 0.346 }}, }; typedef struct sphere_gear sphere_gear; struct sphere_gear { int id; /* name, for debugging */ XYZ axis; /* the vector on which this gear's axis lies */ int direction; /* rotation, +1 or -1 */ GLfloat offset; /* rotational degrees from parent gear */ sphere_gear *parent; /* gear driving this one, or 0 for root */ sphere_gear **children; /* gears driven by this one (no loops) */ sphere_gear **neighbors; /* gears touching this one (circular!) */ int nchildren, children_size; int nneighbors, neighbors_size; const gear *g; /* shape of this gear (shared) */ }; typedef struct { GLXContext *glx_context; rotator *rot; trackball_state *trackball; Bool button_down_p; int ncolors; XColor *colors; GLfloat color1[4], color2[4]; texture_font_data *font; int nshapes, shapes_size; /* how many 'gear' objects there are */ int ngears, gears_size; /* how many 'sphere_gear' objects there are */ gear *shapes; sphere_gear *gears; int which; int mode; /* 0 = normal, 1 = out, 2 = in */ int mode_tick; int next; /* 0 = random, -1 = back, 1 = forward */ time_t draw_time; int draw_tick; char *desc; GLfloat th; /* rotation of the root sphere_gear in degrees. */ } geodesic_configuration; static geodesic_configuration *bps = NULL; static int timeout; static Bool do_spin; static GLfloat speed; static Bool do_wander; static Bool do_labels; static Bool do_numbers; static XrmOptionDescRec opts[] = { { "-spin", ".spin", XrmoptionNoArg, "True" }, { "+spin", ".spin", XrmoptionNoArg, "False" }, { "-speed", ".speed", XrmoptionSepArg, 0 }, { "-wander", ".wander", XrmoptionNoArg, "True" }, { "+wander", ".wander", XrmoptionNoArg, "False" }, { "-labels", ".labels", XrmoptionNoArg, "True" }, { "+labels", ".labels", XrmoptionNoArg, "False" }, { "-numbers", ".numbers",XrmoptionNoArg, "True" }, { "+numbers", ".numbers",XrmoptionNoArg, "False" }, { "-timeout", ".timeout",XrmoptionSepArg, 0 }, }; static argtype vars[] = { {&do_spin, "spin", "Spin", DEF_SPIN, t_Bool}, {&do_wander, "wander", "Wander", DEF_WANDER, t_Bool}, {&speed, "speed", "Speed", DEF_SPEED, t_Float}, {&do_labels, "labels", "Labels", DEF_LABELS, t_Bool}, {&do_numbers,"numbers","Numbers",DEF_NUMBERS,t_Bool}, {&timeout, "timeout","Seconds",DEF_TIMEOUT,t_Int}, }; ENTRYPOINT ModeSpecOpt geodesic_opts = { countof(opts), opts, countof(vars), vars, NULL}; #undef BELLRAND #define BELLRAND(n) ((frand((n)) + frand((n)) + frand((n))) / 3) static XYZ cross_product (XYZ a, XYZ b) { XYZ c; c.x = (a.y * b.z) - (a.z * b.y); c.y = (a.z * b.x) - (a.x * b.z); c.z = (a.x * b.y) - (a.y * b.x); return c; } static GLfloat dot_product (XYZ a, XYZ b) { return (a.x * b.x) + (a.y * b.y) + (a.z * b.z); } static XYZ normalize (XYZ v) { GLfloat d = sqrt ((v.x * v.x) + (v.y * v.y) + (v.z * v.z)); if (d == 0) v.x = v.y = v.z = 0; else { v.x /= d; v.y /= d; v.z /= d; } return v; } static XYZ polar_to_cartesian (LL v) { XYZ p; p.x = cos (v.a) * cos (v.o); p.y = cos (v.a) * sin (v.o); p.z = sin (v.a); return p; } static gear * add_gear_shape (ModeInfo *mi, GLfloat radius, int teeth) { geodesic_configuration *bp = &bps[MI_SCREEN(mi)]; int wire = MI_IS_WIREFRAME(mi); gear *g; int i; if (bp->nshapes >= bp->shapes_size - 1) { bp->shapes_size = bp->shapes_size * 1.2 + 4; bp->shapes = (gear *) realloc (bp->shapes, bp->shapes_size * sizeof(*bp->shapes)); } g = &bp->shapes[bp->nshapes++]; memset (g, 0, sizeof(*g)); g->r = radius; g->nteeth = teeth; g->ratio = 1; g->tooth_h = g->r / (teeth * 0.4); if (g->tooth_h > 0.06) /* stubbier teeth when small tooth count. */ g->tooth_h *= 0.6; g->thickness = 0.05 + BELLRAND(0.15); g->thickness2 = g->thickness / 4; g->thickness3 = g->thickness; g->size = wire ? INVOLUTE_SMALL : INVOLUTE_LARGE; /* Move the disc's origin inward to make the edge of the disc be tangent to the unit sphere. */ g->z = 1 - sqrt (1 - (g->r * g->r)); /* #### This isn't quite right */ g->tooth_slope = 1 + ((g->z * 2) / g->r); /* Decide on shape of gear interior: - just a ring with teeth; - that, plus a thinner in-set "plate" in the middle; - that, plus a thin raised "lip" on the inner plate; - or, a wide lip (really, a thicker third inner plate.) */ if (wire) ; else if ((random() % 10) == 0) { /* inner_r can go all the way in; there's no inset disc. */ g->inner_r = (g->r * 0.3) + frand((g->r - g->tooth_h/2) * 0.6); g->inner_r2 = 0; g->inner_r3 = 0; } else { /* inner_r doesn't go in very far; inner_r2 is an inset disc. */ g->inner_r = (g->r * 0.5) + frand((g->r - g->tooth_h) * 0.4); g->inner_r2 = (g->r * 0.1) + frand(g->inner_r * 0.5); g->inner_r3 = 0; if (g->inner_r2 > (g->r * 0.2)) { int nn = (random() % 10); if (nn <= 2) g->inner_r3 = (g->r * 0.1) + frand(g->inner_r2 * 0.2); else if (nn <= 7 && g->inner_r2 >= 0.1) g->inner_r3 = g->inner_r2 - 0.01; } } /* If we have three discs, sometimes make the middle disc be spokes. */ if (g->inner_r3 && ((random() % 5) == 0)) { g->spokes = 2 + BELLRAND (5); g->spoke_thickness = 1 + frand(7.0); if (g->spokes == 2 && g->spoke_thickness < 2) g->spoke_thickness += 1; } /* Sometimes add little nubbly bits, if there is room. */ if (!wire && g->nteeth > 5) { double size = 0; involute_biggest_ring (g, 0, &size, 0); if (size > g->r * 0.2 && (random() % 5) == 0) { g->nubs = 1 + (random() % 16); if (g->nubs > 8) g->nubs = 1; } } /* Decide how complex the polygon model should be. */ { double pix = g->tooth_h * MI_HEIGHT(mi); /* approx. tooth size in pixels */ if (pix <= 4) g->size = INVOLUTE_SMALL; else if (pix <= 8) g->size = INVOLUTE_MEDIUM; else if (pix <= 30) g->size = INVOLUTE_LARGE; else g->size = INVOLUTE_HUGE; } if (g->inner_r3 > g->inner_r2) abort(); if (g->inner_r2 > g->inner_r) abort(); if (g->inner_r > g->r) abort(); i = random() % bp->ncolors; g->color[0] = bp->colors[i].red / 65536.0; g->color[1] = bp->colors[i].green / 65536.0; g->color[2] = bp->colors[i].blue / 65536.0; g->color[3] = 1; i = (i + bp->ncolors / 2) % bp->ncolors; g->color2[0] = bp->colors[i].red / 65536.0; g->color2[1] = bp->colors[i].green / 65536.0; g->color2[2] = bp->colors[i].blue / 65536.0; g->color2[3] = 1; g->dlist = glGenLists (1); glNewList (g->dlist, GL_COMPILE); #if 1 { gear G, *g2 = &G; *g2 = *g; /* Move the gear inward so that its outer edge is on the disc, instead of its midpoint. */ g2->z += g2->thickness/2; /* 'radius' is at the surface but 'g->r' is at the center, so we need to reverse the slope computation that involute.c does. */ g2->r /= (1 + (g2->thickness * g2->tooth_slope / 2)); glPushMatrix(); glTranslatef(g2->x, g2->y, -g2->z); /* Line up the center of the point of tooth 0 with "up". */ glRotatef (90, 0, 0, 1); glRotatef (180, 0, 1, 0); glRotatef (-360.0 / g2->nteeth / 4, 0, 0, 1); g->polygons = draw_involute_gear (g2, wire); glPopMatrix(); } # else /* draw discs */ { glPushMatrix(); glTranslatef(g->x, g->y, -g->z); glLineWidth (2); glFrontFace (GL_CCW); glNormal3f(0, 0, 1); glColor3f(0, 0, 0); glDisable (GL_LIGHTING); glBegin(GL_LINES); glVertex3f (0, 0, 0); glVertex3f (0, radius, 0); glEnd(); glColor3f(0.5, 0.5, 0.5); glBegin(wire ? GL_LINE_LOOP : GL_TRIANGLE_FAN); { GLfloat th; GLfloat step = M_PI * 2 / 128; /* radius *= 1.005; */ glVertex3f (0, 0, 0); for (th = 0; th < M_PI * 2 + step; th += step) { GLfloat x = cos(th) * radius; GLfloat y = sin(th) * radius; glVertex3f (x, y, 0); } } glEnd(); if (!wire) glEnable(GL_LIGHTING); glPopMatrix(); } # endif /* 0 */ glEndList (); return g; } static void add_sphere_gear (ModeInfo *mi, gear *g, XYZ axis) { geodesic_configuration *bp = &bps[MI_SCREEN(mi)]; sphere_gear *gg; int i; axis = normalize (axis); /* If there's already a gear on this axis, don't duplicate it. */ for (i = 0; i < bp->ngears; i++) { XYZ o = bp->gears[i].axis; if (o.x == axis.x && o.y == axis.y && o.z == axis.z) return; } if (bp->ngears >= bp->gears_size - 1) { bp->gears_size = bp->gears_size * 1.2 + 10; bp->gears = (sphere_gear *) realloc (bp->gears, bp->gears_size * sizeof(*bp->gears)); } gg = &bp->gears[bp->ngears]; memset (gg, 0, sizeof(*gg)); gg->id = bp->ngears; gg->axis = axis; gg->direction = 0; gg->g = g; bp->ngears++; } static void free_sphere_gears (ModeInfo *mi) { geodesic_configuration *bp = &bps[MI_SCREEN(mi)]; int i; for (i = 0; i < bp->nshapes; i++) { if (bp->shapes[i].dlist) glDeleteLists (bp->shapes[i].dlist, 1); } free (bp->shapes); bp->nshapes = 0; bp->shapes_size = 0; bp->shapes = 0; for (i = 0; i < bp->ngears; i++) { sphere_gear *g = &bp->gears[i]; if (g->children) free (g->children); if (g->neighbors) free (g->neighbors); } free (bp->gears); bp->ngears = 0; bp->gears_size = 0; bp->gears = 0; } /* Is the gear a member of the list? */ static Bool gear_list_member (sphere_gear *g, sphere_gear **list, int count) { int i; for (i = 0; i < count; i++) if (list[i] == g) return True; return False; } /* Add the gear to the list, resizing it as needed. */ static void gear_list_push (sphere_gear *g, sphere_gear ***listP, int *countP, int *sizeP) { if (*countP >= (*sizeP) - 1) { *sizeP = (*sizeP) * 1.2 + 4; *listP = (sphere_gear **) realloc (*listP, (*sizeP) * sizeof(**listP)); } (*listP)[*countP] = g; (*countP)++; } /* Mark child and parent as being mutual neighbors. */ static void link_neighbors (sphere_gear *parent, sphere_gear *child) { if (child == parent) abort(); /* Add child to parent's list of neighbors */ if (! gear_list_member (child, parent->neighbors, parent->nneighbors)) { gear_list_push (child, &parent->neighbors, &parent->nneighbors, &parent->neighbors_size); /* fprintf(stderr, "neighbor %2d -> %2d (%d)\n", parent->id, child->id, parent->nneighbors); */ } /* Add parent to child's list of neighbors */ if (! gear_list_member (parent, child->neighbors, child->nneighbors)) { gear_list_push (parent, &child->neighbors, &child->nneighbors, &child->neighbors_size); /* fprintf(stderr, "neighbor %2d <- %2d\n", parent->id, child->id); */ } } /* Mark child as having parent, and vice versa. */ static void link_child (sphere_gear *parent, sphere_gear *child) { if (child == parent) abort(); if (child->parent) return; gear_list_push (child, &parent->children, &parent->nchildren, &parent->children_size); child->parent = parent; /* fprintf(stderr, "child %2d -> %2d (%d)\n", parent->id, child->id, parent->nchildren); */ } static void link_children (sphere_gear *); static void link_children (sphere_gear *parent) { int i; # if 1 /* depth first */ for (i = 0; i < parent->nneighbors; i++) { sphere_gear *child = parent->neighbors[i]; if (! child->parent) { link_child (parent, child); link_children (child); } } # else /* breadth first */ for (i = 0; i < parent->nneighbors; i++) { sphere_gear *child = parent->neighbors[i]; if (! child->parent) link_child (parent, child); } for (i = 0; i < parent->nchildren; i++) { sphere_gear *child = parent->children[i]; link_children (child); } # endif } /* Whether the two gears touch. */ static Bool gears_touch_p (ModeInfo *mi, sphere_gear *a, sphere_gear *b) { /* We need to know if the two discs on the surface overlap. Find the angle between the axis of each disc, and a point on its edge: the axis between the hypotenuse and adjacent of a right triangle between the disc's radius and the origin. R _____ |_| / | / 1 | / |t/ t = asin(R) |/ Find the angle between the axes of the two discs. | | / angle = acos (v1 dot v2) 1 | / axis = v1 cross v2 | / 1 | / |/ If the sum of the first two angles is less than the third angle, they touch. */ XYZ p1 = a->axis; XYZ p2 = b->axis; double t1 = asin (a->g->r); double t2 = asin (b->g->r); double th = acos (dot_product (p1, p2)); return (t1 + t2 >= th); } /* Set the rotation direction for the gear and its kids. */ static void orient_gears (ModeInfo *mi, sphere_gear *g) { int i; if (g->parent) g->direction = -g->parent->direction; for (i = 0; i < g->nchildren; i++) orient_gears (mi, g->children[i]); } /* Returns the global model coordinates of the given tooth of a gear. */ static XYZ tooth_coords (const sphere_gear *s, int tooth) { const gear *g = s->g; GLfloat off = s->offset * (M_PI / 180) * g->ratio * s->direction; GLfloat th = (tooth * M_PI * 2 / g->nteeth) - off; XYZ axis; GLfloat angle; XYZ from = { 0, 1, 0 }; XYZ to = s->axis; XYZ p0, p1, p2; GLfloat x, y, z, C, S, m[4][4]; axis = cross_product (from, to); angle = acos (dot_product (from, to)); p0 = normalize (axis); x = p0.x; y = p0.y; z = p0.z; C = cos(angle); S = sin(angle); /* this is what glRotatef does */ m[0][0] = x*x * (1 - C) + C; m[1][0] = x*y * (1 - C) - z*S; m[2][0] = x*z * (1 - C) + y*S; m[3][0] = 0; m[0][1] = y*x * (1 - C) + z*S; m[1][1] = y*y * (1 - C) + C; m[2][1] = y*z * (1 - C) - x*S; m[3][1] = 0; m[0][2] = x*z * (1 - C) - y*S; m[1][2] = y*z * (1 - C) + x*S; m[2][2] = z*z * (1 - C) + C; m[3][2] = 0; m[0][3] = 0; m[1][3] = 0; m[2][3] = 0; m[3][3] = 1; /* The point to transform */ p1.x = g->r * sin (th); p1.z = g->r * cos (th); p1.y = 1 - g->z; p1 = normalize (p1); /* transformation result */ p2.x = p1.x * m[0][0] + p1.y * m[1][0] + p1.z * m[2][0] + m[3][0]; p2.y = p1.x * m[0][1] + p1.y * m[1][1] + p1.z * m[2][1] + m[3][1]; p2.z = p1.x * m[0][2] + p1.y * m[1][2] + p1.z * m[2][2] + m[3][2]; return p2; } /* Returns the number of the tooth of the first gear that is closest to any tooth of its parent. Also the position of the parent tooth. */ static int parent_tooth (const sphere_gear *s, XYZ *parent) { const sphere_gear *s2 = s->parent; int i, j; GLfloat min_dist = 99999; int min_tooth = 0; XYZ min_parent = { 0, 0, 0 }; if (s2) for (i = 0; i < s->g->nteeth; i++) { XYZ p1 = tooth_coords (s, i); for (j = 0; j < s2->g->nteeth; j++) { XYZ p2 = tooth_coords (s2, j); XYZ d; GLfloat dist; d.x = p1.x - p2.x; d.y = p1.y - p2.y; d.z = p1.z - p2.z; dist = sqrt (d.x*d.x + d.y*d.y + d.z*d.z); if (dist < min_dist) { min_dist = dist; min_parent = p2; min_tooth = i; } } } *parent = min_parent; return min_tooth; } /* Make all of the gear's children's teeth mesh properly. */ static void align_gear_teeth (sphere_gear *s); static void align_gear_teeth (sphere_gear *s) { int i; XYZ pc; if (s->parent) { /* Iterate this gear's offset until we find a value for it that minimizes the distance between this gear's parent-pointing tooth, and the corresponding tooth on the parent. */ int pt = parent_tooth (s, &pc); GLfloat range = 360 / s->g->nteeth; GLfloat steps = 64; GLfloat min_dist = 999999; GLfloat min_off = 0; GLfloat off; for (off = -range/2; off < range/2; off += range/steps) { XYZ tc, d; GLfloat dist; s->offset = off; tc = tooth_coords (s, pt); d.x = pc.x - tc.x; d.y = pc.y - tc.y; d.z = pc.z - tc.z; dist = sqrt (d.x*d.x + d.y*d.y + d.z*d.z); if (dist < min_dist) { min_dist = dist; min_off = off; } } s->offset = min_off; } /* Now do the children. We have to do it in parent/child order because the offset we just computed for the parent affects everyone downstream. */ for (i = 0; i < s->nchildren; i++) align_gear_teeth (s->children[i]); } static void describe_gears (ModeInfo *mi) { geodesic_configuration *bp = &bps[MI_SCREEN(mi)]; int gears_per_teeth[1000]; int i; int lines = 0; memset (gears_per_teeth, 0, sizeof(gears_per_teeth)); for (i = 0; i < bp->ngears; i++) gears_per_teeth[bp->gears[i].g->nteeth]++; if (bp->desc) free (bp->desc); bp->desc = (char *) malloc (80 * bp->ngears); *bp->desc = 0; for (i = 0; i < countof(gears_per_teeth); i++) if (gears_per_teeth[i]) { sprintf (bp->desc + strlen(bp->desc), "%s%d gears with %d teeth", (lines > 0 ? ",\n" : ""), gears_per_teeth[i], i); lines++; } if (lines > 1) sprintf (bp->desc + strlen(bp->desc), ",\n%d gears total", bp->ngears); strcat (bp->desc, "."); } /* Takes the gears and makes an arbitrary DAG of them in order to compute direction and gear ratios. */ static void sort_gears (ModeInfo *mi) { geodesic_configuration *bp = &bps[MI_SCREEN(mi)]; sphere_gear *root = 0; int i, j; /* For each gear, compare it against every other gear. If they touch, mark them as being each others' neighbors. */ for (i = 0; i < bp->ngears; i++) { sphere_gear *a = &bp->gears[i]; for (j = 0; j < bp->ngears; j++) { sphere_gear *b = &bp->gears[j]; if (a == b) continue; if (gears_touch_p (mi, a, b)) link_neighbors (a, b); } } bp->gears[0].parent = &bp->gears[0]; /* don't give this one a parent */ link_children (&bp->gears[0]); bp->gears[0].parent = 0; # if 0 for (i = 0; i < bp->ngears; i++) { fprintf (stderr, "%2d: p = %2d; k(%d, %d) = ", i, bp->gears[i].parent ? bp->gears[i].parent->id : -1, bp->gears[i].nneighbors, bp->gears[i].nchildren); for (j = 0; j < bp->gears[i].nneighbors; j++) fprintf (stderr, "%2d ", (int) bp->gears[i].neighbors[j]->id); fprintf (stderr, "\t\t"); if (j < 5) fprintf (stderr, "\t"); for (j = 0; j < bp->gears[i].nchildren; j++) fprintf (stderr, "%2d ", (int) bp->gears[i].children[j]->id); fprintf (stderr,"\n"); } fprintf (stderr,"\n"); # endif /* 0 */ /* If there is more than one gear with no parent, we fucked up. */ root = 0; for (i = 0; i < bp->ngears; i++) { sphere_gear *g = &bp->gears[i]; if (!g->parent) root = g; } if (! root) abort(); root->direction = 1; orient_gears (mi, root); /* If there are any gears with no direction, they aren't reachable. */ for (i = 0; i < bp->ngears; i++) { sphere_gear *g = &bp->gears[i]; if (g->direction == 0) fprintf(stderr,"INTERNAL ERROR: unreachable: %d\n", g->id); } align_gear_teeth (root); describe_gears (mi); } /* Create 5 identical gears arranged on the faces of a uniform triangular prism. */ static void make_prism (ModeInfo *mi) { geodesic_configuration *bp = &bps[MI_SCREEN(mi)]; gear *g; XYZ a; int i; int teeth = 4 * (4 + (int) (BELLRAND(20))); if (teeth % 4) abort(); /* must be a multiple of 4 */ g = add_gear_shape (mi, 0.7075, teeth); a.x = 0; a.y = 0; a.z = 1; add_sphere_gear (mi, g, a); a.z = -1; add_sphere_gear (mi, g, a); a.z = 0; for (i = 0; i < 3; i++) { GLfloat th = i * M_PI * 2 / 3; a.x = cos (th); a.y = sin (th); add_sphere_gear (mi, g, a); } if (bp->ngears != 5) abort(); } /* Create 8 identical gears arranged on the faces of an octohedron (or alternately, arranged on the diagonals of a cube.) */ static void make_octo (ModeInfo *mi) { geodesic_configuration *bp = &bps[MI_SCREEN(mi)]; static const XYZ verts[] = {{ -1, -1, -1 }, { -1, -1, 1 }, { -1, 1, 1 }, { -1, 1, -1 }, { 1, -1, 1 }, { 1, -1, -1 }, { 1, 1, -1 }, { 1, 1, 1 }}; gear *g; int i; int teeth = 4 * (4 + (int) (BELLRAND(20))); if (teeth % 4) abort(); /* must be a multiple of 4 */ g = add_gear_shape (mi, 0.578, teeth); for (i = 0; i < countof(verts); i++) add_sphere_gear (mi, g, verts[i]); if (bp->ngears != 8) abort(); } /* Create 10 identical gears arranged on the faces of ... something. I'm not sure what polyhedron is the basis of this. */ static void make_deca (ModeInfo *mi) { geodesic_configuration *bp = &bps[MI_SCREEN(mi)]; gear *g; XYZ a; int i, j; int teeth = 4 * (4 + (int) (BELLRAND(15))); if (teeth % 4) abort(); /* must be a multiple of 4 */ g = add_gear_shape (mi, 0.5415, teeth); a.x = 0; a.y = 0; a.z = 1; add_sphere_gear (mi, g, a); a.z = -1; add_sphere_gear (mi, g, a); for (j = -1; j <= 1; j += 2) { GLfloat off = (j < 0 ? 0 : M_PI / 4); LL v; v.a = j * M_PI * 0.136; /* #### Empirical. What is this? */ for (i = 0; i < 4; i++) { v.o = i * M_PI / 2 + off; a = polar_to_cartesian (v); add_sphere_gear (mi, g, a); } } if (bp->ngears != 10) abort(); } /* Create 14 identical gears arranged on the faces of ... something. I'm not sure what polyhedron is the basis of this. */ static void make_14 (ModeInfo *mi) { geodesic_configuration *bp = &bps[MI_SCREEN(mi)]; gear *g; XYZ a; int i; GLfloat r = 0.4610; int teeth = 6 * (2 + (int) (BELLRAND(4))); if (teeth % 6) abort(); /* must be a multiple of 6. I think? */ /* mismeshes: 24 30 34 36 42 48 54 60 */ /* North, south */ g = add_gear_shape (mi, r, teeth); a.x = 0; a.y = 0; a.z = 1; add_sphere_gear (mi, g, a); a.z = -1; add_sphere_gear (mi, g, a); /* Equator */ a.z = 0; for (i = 0; i < 4; i++) { GLfloat th = i * M_PI * 2 / 4 + (M_PI / 4); a.x = cos(th); a.y = sin(th); add_sphere_gear (mi, g, a); } /* The other 8 */ g = add_gear_shape (mi, r, teeth); for (i = 0; i < 4; i++) { LL v; v.a = M_PI * 0.197; /* #### Empirical. Also, wrong. What is this? */ v.o = i * M_PI * 2 / 4; a = polar_to_cartesian (v); add_sphere_gear (mi, g, a); v.a = -v.a; a = polar_to_cartesian (v); add_sphere_gear (mi, g, a); } if (bp->ngears != 14) abort(); } /* Create 18 identical gears arranged on the faces of ... something. I'm not sure what polyhedron is the basis of this. */ static void make_18 (ModeInfo *mi) { geodesic_configuration *bp = &bps[MI_SCREEN(mi)]; gear *g, *g2; XYZ a; int i; GLfloat r = 0.3830; int sizes[] = { 8, 12, 16, 20 }; /* 10, 14, 18, 26 and 34 don't work */ int teeth = sizes[random() % countof(sizes)] * (1 + (random() % 4)); /* North, south */ g = add_gear_shape (mi, r, teeth); a.x = 0; a.y = 0; a.z = 1; add_sphere_gear (mi, g, a); a.z = -1; add_sphere_gear (mi, g, a); /* Equator */ g2 = add_gear_shape (mi, r, teeth); a.z = 0; for (i = 0; i < 8; i++) { GLfloat th = i * M_PI * 2 / 8 + (M_PI / 4); a.x = cos(th); a.y = sin(th); add_sphere_gear (mi, (i & 1 ? g : g2), a); } /* The other 16 */ g = add_gear_shape (mi, r, teeth); for (i = 0; i < 4; i++) { LL v; v.a = M_PI * 0.25; v.o = i * M_PI * 2 / 4; a = polar_to_cartesian (v); add_sphere_gear (mi, g, a); v.a = -v.a; a = polar_to_cartesian (v); add_sphere_gear (mi, g, a); } if (bp->ngears != 18) abort(); } /* Create 32 gears arranged along a truncated icosahedron: One gear on each of the 20 faces, and one on each of the 12 vertices. */ static void make_32 (ModeInfo *mi, const GLfloat *args) { /* http://bugman123.com/Gears/32GearSpheres/ */ geodesic_configuration *bp = &bps[MI_SCREEN(mi)]; GLfloat th0 = atan (0.5); /* lat division: 26.57 deg */ GLfloat s = M_PI / 5; /* lon division: 72 deg */ int i; int teeth1 = args[0]; int teeth2 = args[1]; GLfloat r1 = args[2]; GLfloat ratio = teeth2 / (GLfloat) teeth1; GLfloat r2 = r1 * ratio; gear *gear1, *gear2; if (teeth1 % 5) abort(); if (teeth2 % 6) abort(); gear1 = add_gear_shape (mi, r1, teeth1); gear2 = add_gear_shape (mi, r2, teeth2); gear2->ratio = 1 / ratio; { XYZ a = { 0, 0, 1 }; XYZ b = { 0, 0, -1 }; add_sphere_gear (mi, gear1, a); add_sphere_gear (mi, gear1, b); } for (i = 0; i < 10; i++) { GLfloat th1 = s * i; GLfloat th2 = s * (i+1); GLfloat th3 = s * (i+2); LL v1, v2, v3, vc; XYZ p1, p2, p3, pc, pc2; v1.a = th0; v1.o = th1; v2.a = th0; v2.o = th3; v3.a = -th0; v3.o = th2; vc.a = M_PI/2; vc.o = th2; if (! (i & 1)) /* southern hemisphere */ { v1.a = -v1.a; v2.a = -v2.a; v3.a = -v3.a; vc.a = -vc.a; } p1 = polar_to_cartesian (v1); p2 = polar_to_cartesian (v2); p3 = polar_to_cartesian (v3); pc = polar_to_cartesian (vc); /* Two faces: 123 and 12c. */ add_sphere_gear (mi, gear1, p1); /* left shared point of 2 triangles */ pc2.x = (p1.x + p2.x + p3.x) / 3; /* center of bottom triangle */ pc2.y = (p1.y + p2.y + p3.y) / 3; pc2.z = (p1.z + p2.z + p3.z) / 3; add_sphere_gear (mi, gear2, pc2); pc2.x = (p1.x + p2.x + pc.x) / 3; /* center of top triangle */ pc2.y = (p1.y + p2.y + pc.y) / 3; pc2.z = (p1.z + p2.z + pc.z) / 3; add_sphere_gear (mi, gear2, pc2); } if (bp->ngears != 32) abort(); } /* Create 92 gears arranged along a geodesic sphere: 20 + 12 + 60. (frequency 3v, class-I geodesic tessellation of an icosahedron) */ static void make_92 (ModeInfo *mi, const GLfloat *args) { /* http://bugman123.com/Gears/92GearSpheres/ */ geodesic_configuration *bp = &bps[MI_SCREEN(mi)]; GLfloat th0 = atan (0.5); /* lat division: 26.57 deg */ GLfloat s = M_PI / 5; /* lon division: 72 deg */ int i; int tscale = 2; /* These don't mesh properly, so let's increase the number of teeth so that it's not so obvious. */ int teeth1 = args[0] * tscale; int teeth2 = args[1] * tscale; int teeth3 = args[2] * tscale; GLfloat r1 = args[3]; GLfloat ratio2 = teeth2 / (GLfloat) teeth1; GLfloat ratio3 = teeth3 / (GLfloat) teeth2; GLfloat r2 = r1 * ratio2; GLfloat r3 = r2 * ratio3; GLfloat r4 = args[4]; /* #### Empirical. Not sure what its basis is. */ GLfloat r5 = 1 - r4; gear *gear1, *gear2, *gear3; gear1 = add_gear_shape (mi, r1, teeth1); gear2 = add_gear_shape (mi, r2, teeth2); gear3 = add_gear_shape (mi, r3, teeth3); gear2->ratio = 1 / ratio2; gear3->ratio = 1 / ratio3; { XYZ a = { 0, 0, 1 }; XYZ b = { 0, 0, -1 }; add_sphere_gear (mi, gear1, a); add_sphere_gear (mi, gear1, b); } for (i = 0; i < 10; i++) { GLfloat th1 = s * i; GLfloat th2 = s * (i+1); GLfloat th3 = s * (i+2); LL v1, v2, v3, vc; XYZ p1, p2, p3, pc, pc2; v1.a = th0; v1.o = th1; v2.a = th0; v2.o = th3; v3.a = -th0; v3.o = th2; vc.a = M_PI/2; vc.o = th2; if (! (i & 1)) /* southern hemisphere */ { v1.a = -v1.a; v2.a = -v2.a; v3.a = -v3.a; vc.a = -vc.a; } p1 = polar_to_cartesian (v1); p2 = polar_to_cartesian (v2); p3 = polar_to_cartesian (v3); pc = polar_to_cartesian (vc); /* Two faces: 123 and 12c. */ add_sphere_gear (mi, gear1, p1); /* left shared point of 2 triangles */ pc2.x = (p1.x + p2.x + p3.x) / 3; /* center of bottom triangle */ pc2.y = (p1.y + p2.y + p3.y) / 3; pc2.z = (p1.z + p2.z + p3.z) / 3; add_sphere_gear (mi, gear2, pc2); pc2.x = (p1.x + p2.x + pc.x) / 3; /* center of top triangle */ pc2.y = (p1.y + p2.y + pc.y) / 3; pc2.z = (p1.z + p2.z + pc.z) / 3; add_sphere_gear (mi, gear2, pc2); /* left edge of bottom triangle, 1/3 in */ pc2.x = p1.x + (p3.x - p1.x) * r4; pc2.y = p1.y + (p3.y - p1.y) * r4; pc2.z = p1.z + (p3.z - p1.z) * r4; add_sphere_gear (mi, gear3, pc2); /* left edge of bottom triangle, 2/3 in */ pc2.x = p1.x + (p3.x - p1.x) * r5; pc2.y = p1.y + (p3.y - p1.y) * r5; pc2.z = p1.z + (p3.z - p1.z) * r5; add_sphere_gear (mi, gear3, pc2); /* left edge of top triangle, 1/3 in */ pc2.x = p1.x + (pc.x - p1.x) * r4; pc2.y = p1.y + (pc.y - p1.y) * r4; pc2.z = p1.z + (pc.z - p1.z) * r4; add_sphere_gear (mi, gear3, pc2); /* left edge of top triangle, 2/3 in */ pc2.x = p1.x + (pc.x - p1.x) * r5; pc2.y = p1.y + (pc.y - p1.y) * r5; pc2.z = p1.z + (pc.z - p1.z) * r5; add_sphere_gear (mi, gear3, pc2); /* center of shared edge, 1/3 in */ pc2.x = p1.x + (p2.x - p1.x) * r4; pc2.y = p1.y + (p2.y - p1.y) * r4; pc2.z = p1.z + (p2.z - p1.z) * r4; add_sphere_gear (mi, gear3, pc2); /* center of shared edge, 2/3 in */ pc2.x = p1.x + (p2.x - p1.x) * r5; pc2.y = p1.y + (p2.y - p1.y) * r5; pc2.z = p1.z + (p2.z - p1.z) * r5; add_sphere_gear (mi, gear3, pc2); } if (bp->ngears != 92) abort(); } static void make_182 (ModeInfo *mi, const GLfloat *args) { /* #### TODO: http://bugman123.com/Gears/182GearSpheres/ */ abort(); } /* Window management, etc */ ENTRYPOINT void reshape_geodesic (ModeInfo *mi, int width, int height) { GLfloat h = (GLfloat) height / (GLfloat) width; glViewport (0, 0, (GLint) width, (GLint) height); glMatrixMode(GL_PROJECTION); glLoadIdentity(); gluPerspective (30.0, 1/h, 1.0, 100.0); glMatrixMode(GL_MODELVIEW); glLoadIdentity(); gluLookAt( 0.0, 0.0, 30.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0); # ifdef HAVE_MOBILE /* Keep it the same relative size when rotated. */ { int o = (int) current_device_rotation(); if (o != 0 && o != 180 && o != -180) glScalef (1/h, 1/h, 1/h); } # endif glClear(GL_COLOR_BUFFER_BIT); } static void pick_shape (ModeInfo *mi, time_t last) { geodesic_configuration *bp = &bps[MI_SCREEN(mi)]; int count = countof (gear_templates); if (bp->colors) free (bp->colors); bp->ncolors = 1024; bp->colors = (XColor *) calloc(bp->ncolors, sizeof(XColor)); make_smooth_colormap (0, 0, 0, bp->colors, &bp->ncolors, False, 0, False); free_sphere_gears (mi); if (last == 0) { bp->which = random() % count; } else if (bp->next < 0) { bp->which--; if (bp->which < 0) bp->which = count-1; bp->next = 0; } else if (bp->next > 0) { bp->which++; if (bp->which >= count) bp->which = 0; bp->next = 0; } else { int n = bp->which; while (n == bp->which) n = random() % count; bp->which = n; } switch (gear_templates[bp->which].type) { case PRISM: make_prism (mi); break; case OCTO: make_octo (mi); break; case DECA: make_deca (mi); break; case G14: make_14 (mi); break; case G18: make_18 (mi); break; case G32: make_32 (mi, gear_templates[bp->which].args); break; case G92: make_92 (mi, gear_templates[bp->which].args); break; case G182: make_182(mi, gear_templates[bp->which].args); break; default: abort(); break; } sort_gears (mi); } ENTRYPOINT void init_geodesic (ModeInfo *mi) { geodesic_configuration *bp; int wire = MI_IS_WIREFRAME(mi); if (!bps) { bps = (geodesic_configuration *) calloc (MI_NUM_SCREENS(mi), sizeof (geodesic_configuration)); if (!bps) { fprintf(stderr, "%s: out of memory\n", progname); exit(1); } } bp = &bps[MI_SCREEN(mi)]; bp->glx_context = init_GL(mi); reshape_geodesic (mi, MI_WIDTH(mi), MI_HEIGHT(mi)); { static GLfloat cspec[4] = {1.0, 1.0, 1.0, 1.0}; static const GLfloat shiny = 128.0; static GLfloat pos[4] = {1.0, 1.0, 1.0, 0.0}; static GLfloat amb[4] = {0.0, 0.0, 0.0, 1.0}; static GLfloat dif[4] = {1.0, 1.0, 1.0, 1.0}; static GLfloat spc[4] = {0.0, 1.0, 1.0, 1.0}; glLightfv(GL_LIGHT0, GL_POSITION, pos); glLightfv(GL_LIGHT0, GL_AMBIENT, amb); glLightfv(GL_LIGHT0, GL_DIFFUSE, dif); glLightfv(GL_LIGHT0, GL_SPECULAR, spc); glMaterialfv (GL_FRONT, GL_SPECULAR, cspec); glMateriali (GL_FRONT, GL_SHININESS, shiny); } if (! wire) { glEnable (GL_DEPTH_TEST); glEnable (GL_BLEND); glBlendFunc (GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); glEnable (GL_LIGHTING); glEnable (GL_LIGHT0); } if (! bp->rot) { double spin_speed = 0.25 * speed; double wander_speed = 0.01 * speed; double spin_accel = 0.2; bp->rot = make_rotator (do_spin ? spin_speed : 0, do_spin ? spin_speed : 0, do_spin ? spin_speed : 0, spin_accel, do_wander ? wander_speed : 0, True); bp->trackball = gltrackball_init (True); } bp->font = load_texture_font (MI_DISPLAY(mi), "font"); pick_shape (mi, 0); } ENTRYPOINT Bool geodesic_handle_event (ModeInfo *mi, XEvent *event) { geodesic_configuration *bp = &bps[MI_SCREEN(mi)]; if (gltrackball_event_handler (event, bp->trackball, MI_WIDTH (mi), MI_HEIGHT (mi), &bp->button_down_p)) return True; else { if (event->xany.type == KeyPress) { KeySym keysym; char c = 0; XLookupString (&event->xkey, &c, 1, &keysym, 0); if (c == '<' || c == ',' || c == '-' || c == '_' || keysym == XK_Left || keysym == XK_Up || keysym == XK_Prior) { bp->next = -1; goto SWITCH; } else if (c == '>' || c == '.' || c == '=' || c == '+' || keysym == XK_Right || keysym == XK_Down || keysym == XK_Next) { bp->next = 1; goto SWITCH; } } if (screenhack_event_helper (MI_DISPLAY(mi), MI_WINDOW(mi), event)) { SWITCH: bp->mode = 1; bp->mode_tick = 4; return True; } } return False; } ENTRYPOINT void draw_geodesic (ModeInfo *mi) { time_t now = time ((time_t *) 0); int wire = MI_IS_WIREFRAME(mi); geodesic_configuration *bp = &bps[MI_SCREEN(mi)]; Display *dpy = MI_DISPLAY(mi); Window window = MI_WINDOW(mi); if (!bp->glx_context) return; glXMakeCurrent(MI_DISPLAY(mi), MI_WINDOW(mi), *(bp->glx_context)); if (bp->draw_time == 0) { pick_shape (mi, bp->draw_time); bp->draw_time = now; } else if (bp->mode == 0) { if (bp->draw_tick++ > 10) { if (bp->draw_time == 0) bp->draw_time = now; bp->draw_tick = 0; if (!bp->button_down_p && bp->draw_time + timeout <= now) { /* randomize every -timeout seconds */ bp->mode = 1; /* go out */ bp->mode_tick = 10 / speed; bp->draw_time = now; } } } else if (bp->mode == 1) /* out */ { if (--bp->mode_tick <= 0) { bp->mode_tick = 10 / speed; bp->mode = 2; /* go in */ pick_shape (mi, bp->draw_time); bp->draw_time = now; } } else if (bp->mode == 2) /* in */ { if (--bp->mode_tick <= 0) bp->mode = 0; /* normal */ } else abort(); if (! wire) glShadeModel(GL_SMOOTH); glEnable(GL_DEPTH_TEST); glEnable(GL_NORMALIZE); glEnable(GL_CULL_FACE); glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glPushMatrix (); { double x, y, z; get_position (bp->rot, &x, &y, &z, !bp->button_down_p); glTranslatef((x - 0.5) * 8, (y - 0.5) * 8, (z - 0.5) * 17); gltrackball_rotate (bp->trackball); get_rotation (bp->rot, &x, &y, &z, !bp->button_down_p); glRotatef (x * 360, 1.0, 0.0, 0.0); glRotatef (y * 360, 0.0, 1.0, 0.0); glRotatef (z * 360, 0.0, 0.0, 1.0); } mi->polygon_count = 0; glScalef (6, 6, 6); if (bp->ngears < 14) glScalef (0.8, 0.8, 0.8); /* make these a little easier to see */ if (bp->mode != 0) { GLfloat s = (bp->mode == 1 ? bp->mode_tick / (10 / speed) : ((10 / speed) - bp->mode_tick + 1) / (10 / speed)); glScalef (s, s, s); } { int i; for (i = 0; i < bp->ngears; i++) { const sphere_gear *s = &bp->gears[i]; const gear *g = s->g; XYZ axis; XYZ from = { 0, 1, 0 }; XYZ to = s->axis; GLfloat angle; GLfloat off = s->offset; /* If an even number of teeth, offset by 1/2 tooth width. */ if (s->direction > 0 && !(g->nteeth & 1)) off += 360 / g->nteeth / 2; axis = cross_product (from, to); angle = acos (dot_product (from, to)); glPushMatrix(); glTranslatef (to.x, to.y, to.z); glRotatef (angle / M_PI * 180, axis.x, axis.y, axis.z); glRotatef (-90, 1, 0, 0); glRotatef(180, 0, 0, 1); glRotatef ((bp->th - off) * g->ratio * s->direction, 0, 0, 1); glCallList (g->dlist); mi->polygon_count += g->polygons; glPopMatrix(); #if 0 { /* Draw tooth vectors */ GLfloat r = 1 - g->z; XYZ pc; int pt = parent_tooth (s, &pc); int t; glDisable(GL_LIGHTING); glLineWidth (8); for (t = 0; t < g->nteeth; t++) { XYZ p = tooth_coords (s, t); XYZ p2; p2.x = (r * s->axis.x + p.x) / 2; p2.y = (r * s->axis.y + p.y) / 2; p2.z = (r * s->axis.z + p.z) / 2; if (t == pt) glColor3f(1,0,1); else glColor3f(0,1,1); glBegin(GL_LINES); glVertex3f (p.x, p.y, p.z); glVertex3f (p2.x, p2.y, p2.z); glEnd(); } if (!wire) glEnable(GL_LIGHTING); glLineWidth (1); } #endif #if 0 { /* Draw the parent/child DAG */ GLfloat s1 = 1.1; GLfloat s2 = s->parent ? s1 : 1.5; GLfloat s3 = 1.0; XYZ p1 = s->axis; XYZ p2 = s->parent ? s->parent->axis : p1; glDisable(GL_LIGHTING); glColor3f(0,0,1); glBegin(GL_LINES); glVertex3f (s1 * p1.x, s1 * p1.y, s1 * p1.z); glVertex3f (s2 * p2.x, s2 * p2.y, s2 * p2.z); glVertex3f (s1 * p1.x, s1 * p1.y, s1 * p1.z); glVertex3f (s3 * p1.x, s3 * p1.y, s3 * p1.z); glEnd(); if (!wire) glEnable(GL_LIGHTING); } #endif } /* We need to draw the fonts in a second pass in order to make transparency (as a result of anti-aliasing) work properly. */ if (do_numbers && bp->mode == 0) for (i = 0; i < bp->ngears; i++) { const sphere_gear *s = &bp->gears[i]; const gear *g = s->g; XYZ axis; XYZ from = { 0, 1, 0 }; XYZ to = s->axis; GLfloat angle; GLfloat off = s->offset; int w, h, j; char buf[100]; XCharStruct e; /* If an even number of teeth, offset by 1/2 tooth width. */ if (s->direction > 0 /* && !(g->nteeth & 1) */) off += 360 / g->nteeth / 2; axis = cross_product (from, to); angle = acos (dot_product (from, to)); glPushMatrix(); glTranslatef(to.x, to.y, to.z); glRotatef (angle / M_PI * 180, axis.x, axis.y, axis.z); glRotatef (-90, 1, 0, 0); glRotatef(180, 0, 0, 1); glRotatef ((bp->th - off) * g->ratio * s->direction, 0, 0, 1); glDisable (GL_LIGHTING); glColor3f(1, 1, 0); glPushMatrix(); glScalef(0.005, 0.005, 0.005); sprintf (buf, "%d", i); texture_string_metrics (bp->font, buf, &e, 0, 0); w = e.width; h = e.ascent + e.descent; glTranslatef (-w/2, -h/2, 0); print_texture_string (bp->font, buf); glPopMatrix(); # if 1 for (j = 0; j < g->nteeth; j++) /* Number the teeth */ { GLfloat ss = 0.08 * g->r / g->nteeth; GLfloat r = g->r * 0.88; GLfloat th = M_PI - (j * M_PI * 2 / g->nteeth + M_PI/2); glPushMatrix(); glTranslatef (r * cos(th), r * sin(th), -g->z + 0.01); glScalef(ss, ss, ss); sprintf (buf, "%d", j + 1); texture_string_metrics (bp->font, buf, &e, 0, 0); w = e.width; h = e.ascent + e.descent; glTranslatef (-w/2, -h/2, 0); print_texture_string (bp->font, buf); glPopMatrix(); } # endif glPopMatrix(); if (!wire) glEnable(GL_LIGHTING); } bp->th += 0.7 * speed; /* Don't mod this to 360 - causes glitches. */ } if (do_labels && bp->mode == 0) { glColor3f (1, 1, 0); print_texture_label (mi->dpy, bp->font, mi->xgwa.width, mi->xgwa.height, 1, bp->desc); } glPopMatrix (); if (mi->fps_p) do_fps (mi); glFinish(); glXSwapBuffers(dpy, window); } ENTRYPOINT void release_geodesic (ModeInfo *mi) { geodesic_configuration *bp = &bps[MI_SCREEN(mi)]; free_texture_font (bp->font); free (bp->colors); free_sphere_gears (mi); if (bp->desc) free (bp->desc); } XSCREENSAVER_MODULE_2 ("GeodesicGears", geodesicgears, geodesic) #endif /* USE_GL */ xscreensaver-5.36/hacks/glx/projectiveplane.c000644 000767 000024 00000135315 12701612217 021366 0ustar00jwzstaff000000 000000 /* projectiveplane --- Shows a 4d embedding of the real projective plane that rotates in 4d or on which you can walk */ #if 0 static const char sccsid[] = "@(#)projectiveplane.c 1.1 14/01/01 xlockmore"; #endif /* Copyright (c) 2005-2014 Carsten Steger . */ /* * Permission to use, copy, modify, and distribute this software and its * documentation for any purpose and without fee is hereby granted, * provided that the above copyright notice appear in all copies and that * both that copyright notice and this permission notice appear in * supporting documentation. * * This file is provided AS IS with no warranties of any kind. The author * shall have no liability with respect to the infringement of copyrights, * trade secrets or any patents by this file or any part thereof. In no * event will the author be liable for any lost revenue or profits or * other special, indirect and consequential damages. * * REVISION HISTORY: * C. Steger - 14/01/03: Initial version * C. Steger - 14/10/03: Moved the curlicue texture to curlicue.h */ /* * This program shows a 4d embedding of the real projective plane. * You can walk on the projective plane, see it turn in 4d, or walk on * it while it turns in 4d. The fact that the surface is an embedding * of the real projective plane in 4d can be seen in the depth colors * mode: set all rotation speeds to 0 and the projection mode to 4d * orthographic projection. In its default orientation, the embedding * of the real projective plane will then project to the Roman * surface, which has three lines of self-intersection. However, at * the three lines of self-intersection the parts of the surface that * intersect have different colors, i.e., different 4d depths. * * The real projective plane is a non-orientable surface. To make * this apparent, the two-sided color mode can be used. * Alternatively, orientation markers (curling arrows) can be drawn as * a texture map on the surface of the projective plane. While * walking on the projective plane, you will notice that the * orientation of the curling arrows changes (which it must because * the projective plane is non-orientable). * * The real projective plane is a model for the projective geometry in * 2d space. One point can be singled out as the origin. A line can * be singled out as the line at infinity, i.e., a line that lies at * an infinite distance to the origin. The line at infinity is * topologically a circle. Points on the line at infinity are also * used to model directions in projective geometry. The origin can be * visualized in different manners. When using distance colors, the * origin is the point that is displayed as fully saturated red, which * is easier to see as the center of the reddish area on the * projective plane. Alternatively, when using distance bands, the * origin is the center of the only band that projects to a disc. * When using direction bands, the origin is the point where all * direction bands collapse to a point. Finally, when orientation * markers are being displayed, the origin the the point where all * orientation markers are compressed to a point. The line at * infinity can also be visualized in different ways. When using * distance colors, the line at infinity is the line that is displayed * as fully saturated magenta. When two-sided colors are used, the * line at infinity lies at the points where the red and green "sides" * of the projective plane meet (of course, the real projective plane * only has one side, so this is a design choice of the * visualization). Alternatively, when orientation markers are being * displayed, the line at infinity is the place where the orientation * markers change their orientation. * * Note that when the projective plane is displayed with bands, the * orientation markers are placed in the middle of the bands. For * distance bands, the bands are chosen in such a way that the band at * the origin is only half as wide as the remaining bands, which * results in a disc being displayed at the origin that has the same * diameter as the remaining bands. This choice, however, also * implies that the band at infinity is half as wide as the other * bands. Since the projective plane is attached to itself (in a * complicated fashion) at the line at infinity, effectively the band * at infinity is again as wide as the remaining bands. However, * since the orientation markers are displayed in the middle of the * bands, this means that only one half of the orientation markers * will be displayed twice at the line at infinity if distance bands * are used. If direction bands are used or if the projective plane * is displayed as a solid surface, the orientation markers are * displayed fully at the respective sides of the line at infinity. * * The program projects the 4d projective plane to 3d using either a * perspective or an orthographic projection. Which of the two * alternatives looks more appealing is up to you. However, two * famous surfaces are obtained if orthographic 4d projection is used: * The Roman surface and the cross cap. If the projective plane is * rotated in 4d, the result of the projection for certain rotations * is a Roman surface and for certain rotations it is a cross cap. * The easiest way to see this is to set all rotation speeds to 0 and * the rotation speed around the yz plane to a value different from 0. * However, for any 4d rotation speeds, the projections will generally * cycle between the Roman surface and the cross cap. The difference * is where the origin and the line at infinity will lie with respect * to the self-intersections in the projections to 3d. * * The projected projective plane can then be projected to the screen * either perspectively or orthographically. When using the walking * modes, perspective projection to the screen will be used. * * There are three display modes for the projective plane: mesh * (wireframe), solid, or transparent. Furthermore, the appearance of * the projective plane can be as a solid object or as a set of * see-through bands. The bands can be distance bands, i.e., bands * that lie at increasing distances from the origin, or direction * bands, i.e., bands that lie at increasing angles with respect to * the origin. * * When the projective plane is displayed with direction bands, you * will be able to see that each direction band (modulo the "pinching" * at the origin) is a Moebius strip, which also shows that the * projective plane is non-orientable. * * Finally, the colors with with the projective plane is drawn can be * set to two-sided, distance, direction, or depth. In two-sided * mode, the projective plane is drawn with red on one "side" and * green on the "other side". As described above, the projective * plane only has one side, so the color jumps from red to green along * the line at infinity. This mode enables you to see that the * projective plane is non-orientable. In distance mode, the * projective plane is displayed with fully saturated colors that * depend on the distance of the points on the projective plane to the * origin. The origin is displayed in red, the line at infinity is * displayed in magenta. If the projective plane is displayed as * distance bands, each band will be displayed with a different color. * In direction mode, the projective plane is displayed with fully * saturated colors that depend on the angle of the points on the * projective plane with respect to the origin. Angles in opposite * directions to the origin (e.g., 15 and 205 degrees) are displayed * in the same color since they are projectively equivalent. If the * projective plane is displayed as direction bands, each band will be * displayed with a different color. Finally, in depth mode the * projective plane with colors chosen depending on the 4d "depth" * (i.e., the w coordinate) of the points on the projective plane at * its default orientation in 4d. As discussed above, this mode * enables you to see that the projective plane does not intersect * itself in 4d. * * The rotation speed for each of the six planes around which the * projective plane rotates can be chosen. For the walk-and-turn * more, only the rotation speeds around the true 4d planes are used * (the xy, xz, and yz planes). * * Furthermore, in the walking modes the walking direction in the 2d * base square of the projective plane and the walking speed can be * chosen. The walking direction is measured as an angle in degrees * in the 2d square that forms the coordinate system of the surface of * the projective plane. A value of 0 or 180 means that the walk is * along a circle at a randomly chosen distance from the origin * (parallel to a distance band). A value of 90 or 270 means that the * walk is directly from the origin to the line at infinity and back * (analogous to a direction band). Any other value results in a * curved path from the origin to the line at infinity and back. * * This program is somewhat inspired by Thomas Banchoff's book "Beyond * the Third Dimension: Geometry, Computer Graphics, and Higher * Dimensions", Scientific American Library, 1990. */ #include "curlicue.h" #ifndef M_PI #define M_PI 3.14159265358979323846 #endif #define DISP_WIREFRAME 0 #define DISP_SURFACE 1 #define DISP_TRANSPARENT 2 #define NUM_DISPLAY_MODES 3 #define APPEARANCE_SOLID 0 #define APPEARANCE_DISTANCE_BANDS 1 #define APPEARANCE_DIRECTION_BANDS 2 #define NUM_APPEARANCES 3 #define COLORS_TWOSIDED 0 #define COLORS_DISTANCE 1 #define COLORS_DIRECTION 2 #define COLORS_DEPTH 3 #define NUM_COLORS 4 #define VIEW_WALK 0 #define VIEW_TURN 1 #define VIEW_WALKTURN 2 #define NUM_VIEW_MODES 3 #define DISP_3D_PERSPECTIVE 0 #define DISP_3D_ORTHOGRAPHIC 1 #define NUM_DISP_3D_MODES 2 #define DISP_4D_PERSPECTIVE 0 #define DISP_4D_ORTHOGRAPHIC 1 #define NUM_DISP_4D_MODES 2 #define DEF_DISPLAY_MODE "random" #define DEF_APPEARANCE "random" #define DEF_COLORS "random" #define DEF_VIEW_MODE "random" #define DEF_MARKS "False" #define DEF_PROJECTION_3D "random" #define DEF_PROJECTION_4D "random" #define DEF_SPEEDWX "1.1" #define DEF_SPEEDWY "1.3" #define DEF_SPEEDWZ "1.5" #define DEF_SPEEDXY "1.7" #define DEF_SPEEDXZ "1.9" #define DEF_SPEEDYZ "2.1" #define DEF_WALK_DIRECTION "83.0" #define DEF_WALK_SPEED "20.0" #ifdef STANDALONE # define DEFAULTS "*delay: 10000 \n" \ "*showFPS: False \n" \ # define refresh_projectiveplane 0 # include "xlockmore.h" /* from the xscreensaver distribution */ #else /* !STANDALONE */ # include "xlock.h" /* from the xlockmore distribution */ #endif /* !STANDALONE */ #ifdef USE_GL #ifndef HAVE_JWXYZ # include #endif #include "gltrackball.h" #include #ifdef USE_MODULES ModStruct projectiveplane_description = {"projectiveplane", "init_projectiveplane", "draw_projectiveplane", "release_projectiveplane", "draw_projectiveplane", "change_projectiveplane", NULL, &projectiveplane_opts, 25000, 1, 1, 1, 1.0, 4, "", "Rotate a 4d embedding of the real projective plane in 4d or walk on it", 0, NULL}; #endif static char *mode; static int display_mode; static char *appear; static int appearance; static char *color_mode; static int colors; static char *view_mode; static int view; static Bool marks; static char *proj_3d; static int projection_3d; static char *proj_4d; static int projection_4d; static float speed_wx; static float speed_wy; static float speed_wz; static float speed_xy; static float speed_xz; static float speed_yz; static float walk_direction; static float walk_speed; static XrmOptionDescRec opts[] = { {"-mode", ".displayMode", XrmoptionSepArg, 0 }, {"-wireframe", ".displayMode", XrmoptionNoArg, "wireframe" }, {"-surface", ".displayMode", XrmoptionNoArg, "surface" }, {"-transparent", ".displayMode", XrmoptionNoArg, "transparent" }, {"-appearance", ".appearance", XrmoptionSepArg, 0 }, {"-solid", ".appearance", XrmoptionNoArg, "solid" }, {"-distance-bands", ".appearance", XrmoptionNoArg, "distance-bands" }, {"-direction-bands", ".appearance", XrmoptionNoArg, "direction-bands" }, {"-colors", ".colors", XrmoptionSepArg, 0 }, {"-twosided-colors", ".colors", XrmoptionNoArg, "two-sided" }, {"-distance-colors", ".colors", XrmoptionNoArg, "distance" }, {"-direction-colors", ".colors", XrmoptionNoArg, "direction" }, {"-depth-colors", ".colors", XrmoptionNoArg, "depth" }, {"-view-mode", ".viewMode", XrmoptionSepArg, 0 }, {"-walk", ".viewMode", XrmoptionNoArg, "walk" }, {"-turn", ".viewMode", XrmoptionNoArg, "turn" }, {"-walk-turn", ".viewMode", XrmoptionNoArg, "walk-turn" }, {"-orientation-marks", ".marks", XrmoptionNoArg, "on"}, {"+orientation-marks", ".marks", XrmoptionNoArg, "off"}, {"-projection-3d", ".projection3d", XrmoptionSepArg, 0 }, {"-perspective-3d", ".projection3d", XrmoptionNoArg, "perspective" }, {"-orthographic-3d", ".projection3d", XrmoptionNoArg, "orthographic" }, {"-projection-4d", ".projection4d", XrmoptionSepArg, 0 }, {"-perspective-4d", ".projection4d", XrmoptionNoArg, "perspective" }, {"-orthographic-4d", ".projection4d", XrmoptionNoArg, "orthographic" }, {"-speed-wx", ".speedwx", XrmoptionSepArg, 0 }, {"-speed-wy", ".speedwy", XrmoptionSepArg, 0 }, {"-speed-wz", ".speedwz", XrmoptionSepArg, 0 }, {"-speed-xy", ".speedxy", XrmoptionSepArg, 0 }, {"-speed-xz", ".speedxz", XrmoptionSepArg, 0 }, {"-speed-yz", ".speedyz", XrmoptionSepArg, 0 }, {"-walk-direction", ".walkDirection", XrmoptionSepArg, 0 }, {"-walk-speed", ".walkSpeed", XrmoptionSepArg, 0 } }; static argtype vars[] = { { &mode, "displayMode", "DisplayMode", DEF_DISPLAY_MODE, t_String }, { &appear, "appearance", "Appearance", DEF_APPEARANCE, t_String }, { &color_mode, "colors", "Colors", DEF_COLORS, t_String }, { &view_mode, "viewMode", "ViewMode", DEF_VIEW_MODE, t_String }, { &marks, "marks", "Marks", DEF_MARKS, t_Bool }, { &proj_3d, "projection3d", "Projection3d", DEF_PROJECTION_3D, t_String }, { &proj_4d, "projection4d", "Projection4d", DEF_PROJECTION_4D, t_String }, { &speed_wx, "speedwx", "Speedwx", DEF_SPEEDWX, t_Float}, { &speed_wy, "speedwy", "Speedwy", DEF_SPEEDWY, t_Float}, { &speed_wz, "speedwz", "Speedwz", DEF_SPEEDWZ, t_Float}, { &speed_xy, "speedxy", "Speedxy", DEF_SPEEDXY, t_Float}, { &speed_xz, "speedxz", "Speedxz", DEF_SPEEDXZ, t_Float}, { &speed_yz, "speedyz", "Speedyz", DEF_SPEEDYZ, t_Float}, { &walk_direction, "walkDirection", "WalkDirection", DEF_WALK_DIRECTION, t_Float}, { &walk_speed, "walkSpeed", "WalkSpeed", DEF_WALK_SPEED, t_Float} }; ENTRYPOINT ModeSpecOpt projectiveplane_opts = {sizeof opts / sizeof opts[0], opts, sizeof vars / sizeof vars[0], vars, NULL}; /* Offset by which we walk above the projective plane */ #define DELTAY 0.01 /* Number of subdivisions of the projective plane */ #define NUMU 128 #define NUMV 128 /* Number of subdivisions per band */ #define NUMB 8 typedef struct { GLint WindH, WindW; GLXContext *glx_context; /* 4D rotation angles */ float alpha, beta, delta, zeta, eta, theta; /* Movement parameters */ float umove, vmove, dumove, dvmove; int side, dir; /* The viewing offset in 4d */ float offset4d[4]; /* The viewing offset in 3d */ float offset3d[4]; /* The 4d coordinates of the projective plane and their derivatives */ float x[(NUMU+1)*(NUMV+1)][4]; float xu[(NUMU+1)*(NUMV+1)][4]; float xv[(NUMU+1)*(NUMV+1)][4]; float pp[(NUMU+1)*(NUMV+1)][3]; float pn[(NUMU+1)*(NUMV+1)][3]; /* The precomputed colors of the projective plane */ float col[(NUMU+1)*(NUMV+1)][4]; /* The precomputed texture coordinates of the projective plane */ float tex[(NUMU+1)*(NUMV+1)][2]; /* The "curlicue" texture */ GLuint tex_name; /* Aspect ratio of the current window */ float aspect; /* Trackball states */ trackball_state *trackballs[2]; int current_trackball; Bool button_pressed; /* A random factor to modify the rotation speeds */ float speed_scale; } projectiveplanestruct; static projectiveplanestruct *projectiveplane = (projectiveplanestruct *) NULL; /* Add a rotation around the wx-plane to the matrix m. */ static void rotatewx(float m[4][4], float phi) { float c, s, u, v; int i; phi *= M_PI/180.0; c = cos(phi); s = sin(phi); for (i=0; i<4; i++) { u = m[i][1]; v = m[i][2]; m[i][1] = c*u+s*v; m[i][2] = -s*u+c*v; } } /* Add a rotation around the wy-plane to the matrix m. */ static void rotatewy(float m[4][4], float phi) { float c, s, u, v; int i; phi *= M_PI/180.0; c = cos(phi); s = sin(phi); for (i=0; i<4; i++) { u = m[i][0]; v = m[i][2]; m[i][0] = c*u-s*v; m[i][2] = s*u+c*v; } } /* Add a rotation around the wz-plane to the matrix m. */ static void rotatewz(float m[4][4], float phi) { float c, s, u, v; int i; phi *= M_PI/180.0; c = cos(phi); s = sin(phi); for (i=0; i<4; i++) { u = m[i][0]; v = m[i][1]; m[i][0] = c*u+s*v; m[i][1] = -s*u+c*v; } } /* Add a rotation around the xy-plane to the matrix m. */ static void rotatexy(float m[4][4], float phi) { float c, s, u, v; int i; phi *= M_PI/180.0; c = cos(phi); s = sin(phi); for (i=0; i<4; i++) { u = m[i][2]; v = m[i][3]; m[i][2] = c*u+s*v; m[i][3] = -s*u+c*v; } } /* Add a rotation around the xz-plane to the matrix m. */ static void rotatexz(float m[4][4], float phi) { float c, s, u, v; int i; phi *= M_PI/180.0; c = cos(phi); s = sin(phi); for (i=0; i<4; i++) { u = m[i][1]; v = m[i][3]; m[i][1] = c*u-s*v; m[i][3] = s*u+c*v; } } /* Add a rotation around the yz-plane to the matrix m. */ static void rotateyz(float m[4][4], float phi) { float c, s, u, v; int i; phi *= M_PI/180.0; c = cos(phi); s = sin(phi); for (i=0; i<4; i++) { u = m[i][0]; v = m[i][3]; m[i][0] = c*u-s*v; m[i][3] = s*u+c*v; } } /* Compute the rotation matrix m from the rotation angles. */ static void rotateall(float al, float be, float de, float ze, float et, float th, float m[4][4]) { int i, j; for (i=0; i<4; i++) for (j=0; j<4; j++) m[i][j] = (i==j); rotatewx(m,al); rotatewy(m,be); rotatewz(m,de); rotatexy(m,ze); rotatexz(m,et); rotateyz(m,th); } /* Compute the rotation matrix m from the 4d rotation angles. */ static void rotateall4d(float ze, float et, float th, float m[4][4]) { int i, j; for (i=0; i<4; i++) for (j=0; j<4; j++) m[i][j] = (i==j); rotatexy(m,ze); rotatexz(m,et); rotateyz(m,th); } /* Multiply two rotation matrices: o=m*n. */ static void mult_rotmat(float m[4][4], float n[4][4], float o[4][4]) { int i, j, k; for (i=0; i<4; i++) { for (j=0; j<4; j++) { o[i][j] = 0.0; for (k=0; k<4; k++) o[i][j] += m[i][k]*n[k][j]; } } } /* Compute a 4D rotation matrix from two unit quaternions. */ static void quats_to_rotmat(float p[4], float q[4], float m[4][4]) { double al, be, de, ze, et, th; double r00, r01, r02, r12, r22; r00 = 1.0-2.0*(p[1]*p[1]+p[2]*p[2]); r01 = 2.0*(p[0]*p[1]+p[2]*p[3]); r02 = 2.0*(p[2]*p[0]-p[1]*p[3]); r12 = 2.0*(p[1]*p[2]+p[0]*p[3]); r22 = 1.0-2.0*(p[1]*p[1]+p[0]*p[0]); al = atan2(-r12,r22)*180.0/M_PI; be = atan2(r02,sqrt(r00*r00+r01*r01))*180.0/M_PI; de = atan2(-r01,r00)*180.0/M_PI; r00 = 1.0-2.0*(q[1]*q[1]+q[2]*q[2]); r01 = 2.0*(q[0]*q[1]+q[2]*q[3]); r02 = 2.0*(q[2]*q[0]-q[1]*q[3]); r12 = 2.0*(q[1]*q[2]+q[0]*q[3]); r22 = 1.0-2.0*(q[1]*q[1]+q[0]*q[0]); et = atan2(-r12,r22)*180.0/M_PI; th = atan2(r02,sqrt(r00*r00+r01*r01))*180.0/M_PI; ze = atan2(-r01,r00)*180.0/M_PI; rotateall(al,be,de,ze,et,-th,m); } /* Compute a fully saturated and bright color based on an angle. */ static void color(double angle, float col[4]) { int s; double t; if (colors == COLORS_TWOSIDED) return; if (angle >= 0.0) angle = fmod(angle,2.0*M_PI); else angle = fmod(angle,-2.0*M_PI); s = floor(angle/(M_PI/3)); t = angle/(M_PI/3)-s; if (s >= 6) s = 0; switch (s) { case 0: col[0] = 1.0; col[1] = t; col[2] = 0.0; break; case 1: col[0] = 1.0-t; col[1] = 1.0; col[2] = 0.0; break; case 2: col[0] = 0.0; col[1] = 1.0; col[2] = t; break; case 3: col[0] = 0.0; col[1] = 1.0-t; col[2] = 1.0; break; case 4: col[0] = t; col[1] = 0.0; col[2] = 1.0; break; case 5: col[0] = 1.0; col[1] = 0.0; col[2] = 1.0-t; break; } if (display_mode == DISP_TRANSPARENT) col[3] = 0.7; else col[3] = 1.0; } /* Set up the projective plane coordinates, colors, and texture. */ static void setup_projective_plane(ModeInfo *mi, double umin, double umax, double vmin, double vmax) { int i, j, k; double u, v, ur, vr; double cu, su, cv2, sv2, cv4, sv4, c2u, s2u; projectiveplanestruct *pp = &projectiveplane[MI_SCREEN(mi)]; ur = umax-umin; vr = vmax-vmin; for (i=0; i<=NUMV; i++) { for (j=0; j<=NUMU; j++) { k = i*(NUMU+1)+j; if (appearance != APPEARANCE_DIRECTION_BANDS) u = -ur*j/NUMU+umin; else u = ur*j/NUMU+umin; v = vr*i/NUMV+vmin; cu = cos(u); su = sin(u); c2u = cos(2.0*u); s2u = sin(2.0*u); sv2 = sin(0.5*v); cv4 = cos(0.25*v); sv4 = sin(0.25*v); if (colors == COLORS_DEPTH) color(((su*su*sv4*sv4-cv4*cv4)+1.0)*M_PI*2.0/3.0,pp->col[k]); else if (colors == COLORS_DIRECTION) color(2.0*M_PI+fmod(2.0*u,2.0*M_PI),pp->col[k]); else /* colors == COLORS_DISTANCE */ color(v*(5.0/6.0),pp->col[k]); pp->tex[k][0] = -32*u/(2.0*M_PI); if (appearance != APPEARANCE_DISTANCE_BANDS) pp->tex[k][1] = 32*v/(2.0*M_PI); else pp->tex[k][1] = 32*v/(2.0*M_PI)-0.5; pp->x[k][0] = 0.5*s2u*sv4*sv4; pp->x[k][1] = 0.5*su*sv2; pp->x[k][2] = 0.5*cu*sv2; pp->x[k][3] = 0.5*(su*su*sv4*sv4-cv4*cv4); /* Avoid degenerate tangential plane basis vectors. */ if (v < FLT_EPSILON) v = FLT_EPSILON; cv2 = cos(0.5*v); sv2 = sin(0.5*v); sv4 = sin(0.25*v); pp->xu[k][0] = c2u*sv4*sv4; pp->xu[k][1] = 0.5*cu*sv2; pp->xu[k][2] = -0.5*su*sv2; pp->xu[k][3] = 0.5*s2u*sv4*sv4; pp->xv[k][0] = 0.125*s2u*sv2; pp->xv[k][1] = 0.25*su*cv2; pp->xv[k][2] = 0.25*cu*cv2; pp->xv[k][3] = 0.125*(su*su+1.0)*sv2; } } } /* Draw a 4d embedding of the projective plane projected into 3D. */ static int projective_plane(ModeInfo *mi, double umin, double umax, double vmin, double vmax) { int polys = 0; static const GLfloat mat_diff_red[] = { 1.0, 0.0, 0.0, 1.0 }; static const GLfloat mat_diff_green[] = { 0.0, 1.0, 0.0, 1.0 }; static const GLfloat mat_diff_trans_red[] = { 1.0, 0.0, 0.0, 0.7 }; static const GLfloat mat_diff_trans_green[] = { 0.0, 1.0, 0.0, 0.7 }; float p[3], pu[3], pv[3], pm[3], n[3], b[3], mat[4][4]; int i, j, k, l, m, o; double u, v; double xx[4], xxu[4], xxv[4], y[4], yu[4], yv[4]; double q, r, s, t; double cu, su, cv2, sv2, cv4, sv4, c2u, s2u; float q1[4], q2[4], r1[4][4], r2[4][4]; projectiveplanestruct *pp = &projectiveplane[MI_SCREEN(mi)]; if (view == VIEW_WALK || view == VIEW_WALKTURN) { /* Compute the rotation that rotates the projective plane in 4D without the trackball rotations. */ rotateall4d(pp->zeta,pp->eta,pp->theta,mat); u = pp->umove; v = pp->vmove; cu = cos(u); su = sin(u); c2u = cos(2.0*u); s2u = sin(2.0*u); sv2 = sin(0.5*v); cv4 = cos(0.25*v); sv4 = sin(0.25*v); xx[0] = 0.5*s2u*sv4*sv4; xx[1] = 0.5*su*sv2; xx[2] = 0.5*cu*sv2; xx[3] = 0.5*(su*su*sv4*sv4-cv4*cv4); /* Avoid degenerate tangential plane basis vectors. */ if (v < FLT_EPSILON) v = FLT_EPSILON; cv2 = cos(0.5*v); sv2 = sin(0.5*v); sv4 = sin(0.25*v); xxu[0] = c2u*sv4*sv4; xxu[1] = 0.5*cu*sv2; xxu[2] = -0.5*su*sv2; xxu[3] = 0.5*s2u*sv4*sv4; xxv[0] = 0.125*s2u*sv2; xxv[1] = 0.25*su*cv2; xxv[2] = 0.25*cu*cv2; xxv[3] = 0.125*(su*su+1.0)*sv2; for (l=0; l<4; l++) { y[l] = (mat[l][0]*xx[0]+mat[l][1]*xx[1]+ mat[l][2]*xx[2]+mat[l][3]*xx[3]); yu[l] = (mat[l][0]*xxu[0]+mat[l][1]*xxu[1]+ mat[l][2]*xxu[2]+mat[l][3]*xxu[3]); yv[l] = (mat[l][0]*xxv[0]+mat[l][1]*xxv[1]+ mat[l][2]*xxv[2]+mat[l][3]*xxv[3]); } if (projection_4d == DISP_4D_ORTHOGRAPHIC) { for (l=0; l<3; l++) { p[l] = y[l]+pp->offset4d[l]; pu[l] = yu[l]; pv[l] = yv[l]; } } else { s = y[3]+pp->offset4d[3]; q = 1.0/s; t = q*q; for (l=0; l<3; l++) { r = y[l]+pp->offset4d[l]; p[l] = r*q; pu[l] = (yu[l]*s-r*yu[3])*t; pv[l] = (yv[l]*s-r*yv[3])*t; } } n[0] = pu[1]*pv[2]-pu[2]*pv[1]; n[1] = pu[2]*pv[0]-pu[0]*pv[2]; n[2] = pu[0]*pv[1]-pu[1]*pv[0]; t = 1.0/(pp->side*4.0*sqrt(n[0]*n[0]+n[1]*n[1]+n[2]*n[2])); n[0] *= t; n[1] *= t; n[2] *= t; pm[0] = pu[0]*pp->dumove+pv[0]*pp->dvmove; pm[1] = pu[1]*pp->dumove+pv[1]*pp->dvmove; pm[2] = pu[2]*pp->dumove+pv[2]*pp->dvmove; t = 1.0/(4.0*sqrt(pm[0]*pm[0]+pm[1]*pm[1]+pm[2]*pm[2])); pm[0] *= t; pm[1] *= t; pm[2] *= t; b[0] = n[1]*pm[2]-n[2]*pm[1]; b[1] = n[2]*pm[0]-n[0]*pm[2]; b[2] = n[0]*pm[1]-n[1]*pm[0]; t = 1.0/(4.0*sqrt(b[0]*b[0]+b[1]*b[1]+b[2]*b[2])); b[0] *= t; b[1] *= t; b[2] *= t; /* Compute alpha, beta, delta from the three basis vectors. | -b[0] -b[1] -b[2] | m = | n[0] n[1] n[2] | | -pm[0] -pm[1] -pm[2] | */ pp->alpha = atan2(-n[2],-pm[2])*180/M_PI; pp->beta = atan2(-b[2],sqrt(b[0]*b[0]+b[1]*b[1]))*180/M_PI; pp->delta = atan2(b[1],-b[0])*180/M_PI; /* Compute the rotation that rotates the projective plane in 4D. */ rotateall(pp->alpha,pp->beta,pp->delta,pp->zeta,pp->eta,pp->theta,mat); u = pp->umove; v = pp->vmove; cu = cos(u); su = sin(u); s2u = sin(2.0*u); sv2 = sin(0.5*v); cv4 = cos(0.25*v); sv4 = sin(0.25*v); xx[0] = 0.5*s2u*sv4*sv4; xx[1] = 0.5*su*sv2; xx[2] = 0.5*cu*sv2; xx[3] = 0.5*(su*su*sv4*sv4-cv4*cv4); for (l=0; l<4; l++) { r = 0.0; for (m=0; m<4; m++) r += mat[l][m]*xx[m]; y[l] = r; } if (projection_4d == DISP_4D_ORTHOGRAPHIC) { for (l=0; l<3; l++) p[l] = y[l]+pp->offset4d[l]; } else { s = y[3]+pp->offset4d[3]; for (l=0; l<3; l++) p[l] = (y[l]+pp->offset4d[l])/s; } pp->offset3d[0] = -p[0]; pp->offset3d[1] = -p[1]-DELTAY; pp->offset3d[2] = -p[2]; } else { /* Compute the rotation that rotates the projective plane in 4D, including the trackball rotations. */ rotateall(pp->alpha,pp->beta,pp->delta,pp->zeta,pp->eta,pp->theta,r1); gltrackball_get_quaternion(pp->trackballs[0],q1); gltrackball_get_quaternion(pp->trackballs[1],q2); quats_to_rotmat(q1,q2,r2); mult_rotmat(r2,r1,mat); } /* Project the points from 4D to 3D. */ for (i=0; i<=NUMV; i++) { for (j=0; j<=NUMU; j++) { o = i*(NUMU+1)+j; for (l=0; l<4; l++) { y[l] = (mat[l][0]*pp->x[o][0]+mat[l][1]*pp->x[o][1]+ mat[l][2]*pp->x[o][2]+mat[l][3]*pp->x[o][3]); yu[l] = (mat[l][0]*pp->xu[o][0]+mat[l][1]*pp->xu[o][1]+ mat[l][2]*pp->xu[o][2]+mat[l][3]*pp->xu[o][3]); yv[l] = (mat[l][0]*pp->xv[o][0]+mat[l][1]*pp->xv[o][1]+ mat[l][2]*pp->xv[o][2]+mat[l][3]*pp->xv[o][3]); } if (projection_4d == DISP_4D_ORTHOGRAPHIC) { for (l=0; l<3; l++) { pp->pp[o][l] = (y[l]+pp->offset4d[l])+pp->offset3d[l]; pu[l] = yu[l]; pv[l] = yv[l]; } } else { s = y[3]+pp->offset4d[3]; q = 1.0/s; t = q*q; for (l=0; l<3; l++) { r = y[l]+pp->offset4d[l]; pp->pp[o][l] = r*q+pp->offset3d[l]; pu[l] = (yu[l]*s-r*yu[3])*t; pv[l] = (yv[l]*s-r*yv[3])*t; } } pp->pn[o][0] = pu[1]*pv[2]-pu[2]*pv[1]; pp->pn[o][1] = pu[2]*pv[0]-pu[0]*pv[2]; pp->pn[o][2] = pu[0]*pv[1]-pu[1]*pv[0]; t = 1.0/sqrt(pp->pn[o][0]*pp->pn[o][0]+pp->pn[o][1]*pp->pn[o][1]+ pp->pn[o][2]*pp->pn[o][2]); pp->pn[o][0] *= t; pp->pn[o][1] *= t; pp->pn[o][2] *= t; } } if (colors == COLORS_TWOSIDED) { glColor3fv(mat_diff_red); if (display_mode == DISP_TRANSPARENT) { glMaterialfv(GL_FRONT,GL_AMBIENT_AND_DIFFUSE,mat_diff_trans_red); glMaterialfv(GL_BACK,GL_AMBIENT_AND_DIFFUSE,mat_diff_trans_green); } else { glMaterialfv(GL_FRONT,GL_AMBIENT_AND_DIFFUSE,mat_diff_red); glMaterialfv(GL_BACK,GL_AMBIENT_AND_DIFFUSE,mat_diff_green); } } glBindTexture(GL_TEXTURE_2D,pp->tex_name); if (appearance != APPEARANCE_DIRECTION_BANDS) { for (i=0; i= NUMB/4) && ((i & (NUMB-1)) < 3*NUMB/4)) continue; if (display_mode == DISP_WIREFRAME) glBegin(GL_QUAD_STRIP); else glBegin(GL_TRIANGLE_STRIP); for (j=0; j<=NUMU; j++) { for (k=0; k<=1; k++) { l = (i+k); m = j; o = l*(NUMU+1)+m; glNormal3fv(pp->pn[o]); glTexCoord2fv(pp->tex[o]); if (colors != COLORS_TWOSIDED) { glColor3fv(pp->col[o]); glMaterialfv(GL_FRONT_AND_BACK,GL_AMBIENT_AND_DIFFUSE,pp->col[o]); } glVertex3fv(pp->pp[o]); polys++; } } glEnd(); } } else /* appearance == APPEARANCE_DIRECTION_BANDS */ { for (j=0; j= NUMB/2) continue; if (display_mode == DISP_WIREFRAME) glBegin(GL_QUAD_STRIP); else glBegin(GL_TRIANGLE_STRIP); for (i=0; i<=NUMV; i++) { for (k=0; k<=1; k++) { l = i; m = (j+k); o = l*(NUMU+1)+m; glNormal3fv(pp->pn[o]); glTexCoord2fv(pp->tex[o]); if (colors != COLORS_TWOSIDED) { glColor3fv(pp->col[o]); glMaterialfv(GL_FRONT_AND_BACK,GL_AMBIENT_AND_DIFFUSE,pp->col[o]); } glVertex3fv(pp->pp[o]); polys++; } } glEnd(); } } polys /= 2; return polys; } /* Generate a texture image that shows the orientation reversal. */ static void gen_texture(ModeInfo *mi) { projectiveplanestruct *pp = &projectiveplane[MI_SCREEN(mi)]; glGenTextures(1,&pp->tex_name); glBindTexture(GL_TEXTURE_2D,pp->tex_name); glPixelStorei(GL_UNPACK_ALIGNMENT,1); glTexParameterf(GL_TEXTURE_2D,GL_TEXTURE_WRAP_S,GL_REPEAT); glTexParameterf(GL_TEXTURE_2D,GL_TEXTURE_WRAP_T,GL_REPEAT); glTexParameterf(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR); glTexParameterf(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR); glTexEnvf(GL_TEXTURE_ENV,GL_TEXTURE_ENV_MODE,GL_MODULATE); glTexImage2D(GL_TEXTURE_2D,0,GL_RGB,TEX_DIMENSION,TEX_DIMENSION,0, GL_LUMINANCE,GL_UNSIGNED_BYTE,texture); } static void init(ModeInfo *mi) { static const GLfloat light_ambient[] = { 0.0, 0.0, 0.0, 1.0 }; static const GLfloat light_diffuse[] = { 1.0, 1.0, 1.0, 1.0 }; static const GLfloat light_specular[] = { 1.0, 1.0, 1.0, 1.0 }; static const GLfloat light_position[] = { 1.0, 1.0, 1.0, 0.0 }; static const GLfloat mat_specular[] = { 1.0, 1.0, 1.0, 1.0 }; projectiveplanestruct *pp = &projectiveplane[MI_SCREEN(mi)]; if (walk_speed == 0.0) walk_speed = 20.0; if (view == VIEW_TURN) { pp->alpha = frand(360.0); pp->beta = frand(360.0); pp->delta = frand(360.0); pp->zeta = 0.0; pp->eta = 0.0; pp->theta = 0.0; } else { pp->alpha = 0.0; pp->beta = 0.0; pp->delta = 0.0; pp->zeta = 120.0; pp->eta = 180.0; pp->theta = 90.0; } pp->umove = frand(2.0*M_PI); pp->vmove = frand(2.0*M_PI); pp->dumove = 0.0; pp->dvmove = 0.0; pp->side = 1; if (sin(walk_direction*M_PI/180.0) >= 0.0) pp->dir = 1; else pp->dir = -1; pp->offset4d[0] = 0.0; pp->offset4d[1] = 0.0; pp->offset4d[2] = 0.0; pp->offset4d[3] = 1.2; pp->offset3d[0] = 0.0; pp->offset3d[1] = 0.0; pp->offset3d[2] = -1.2; pp->offset3d[3] = 0.0; gen_texture(mi); setup_projective_plane(mi,0.0,2.0*M_PI,0.0,2.0*M_PI); if (marks) glEnable(GL_TEXTURE_2D); else glDisable(GL_TEXTURE_2D); glMatrixMode(GL_PROJECTION); glLoadIdentity(); if (projection_3d == DISP_3D_PERSPECTIVE || view == VIEW_WALK || view == VIEW_WALKTURN) { if (view == VIEW_WALK || view == VIEW_WALKTURN) gluPerspective(60.0,1.0,0.01,10.0); else gluPerspective(60.0,1.0,0.1,10.0); } else { glOrtho(-0.6,0.6,-0.6,0.6,0.1,10.0); } glMatrixMode(GL_MODELVIEW); glLoadIdentity(); # ifdef HAVE_JWZGLES /* #### glPolygonMode other than GL_FILL unimplemented */ if (display_mode == DISP_WIREFRAME) display_mode = DISP_SURFACE; # endif if (display_mode == DISP_SURFACE) { glEnable(GL_DEPTH_TEST); glDepthFunc(GL_LESS); glShadeModel(GL_SMOOTH); glPolygonMode(GL_FRONT_AND_BACK,GL_FILL); glLightModeli(GL_LIGHT_MODEL_TWO_SIDE,GL_TRUE); glEnable(GL_LIGHTING); glEnable(GL_LIGHT0); glLightfv(GL_LIGHT0,GL_AMBIENT,light_ambient); glLightfv(GL_LIGHT0,GL_DIFFUSE,light_diffuse); glLightfv(GL_LIGHT0,GL_SPECULAR,light_specular); glLightfv(GL_LIGHT0,GL_POSITION,light_position); glMaterialfv(GL_FRONT_AND_BACK,GL_SPECULAR,mat_specular); glMaterialf(GL_FRONT_AND_BACK,GL_SHININESS,50.0); glDepthMask(GL_TRUE); glDisable(GL_BLEND); } else if (display_mode == DISP_TRANSPARENT) { glDisable(GL_DEPTH_TEST); glShadeModel(GL_SMOOTH); glPolygonMode(GL_FRONT_AND_BACK,GL_FILL); glLightModeli(GL_LIGHT_MODEL_TWO_SIDE,GL_TRUE); glEnable(GL_LIGHTING); glEnable(GL_LIGHT0); glLightfv(GL_LIGHT0,GL_AMBIENT,light_ambient); glLightfv(GL_LIGHT0,GL_DIFFUSE,light_diffuse); glLightfv(GL_LIGHT0,GL_SPECULAR,light_specular); glLightfv(GL_LIGHT0,GL_POSITION,light_position); glMaterialfv(GL_FRONT_AND_BACK,GL_SPECULAR,mat_specular); glMaterialf(GL_FRONT_AND_BACK,GL_SHININESS,50.0); glDepthMask(GL_FALSE); glEnable(GL_BLEND); glBlendFunc(GL_SRC_ALPHA,GL_ONE); } else /* display_mode == DISP_WIREFRAME */ { glDisable(GL_DEPTH_TEST); glShadeModel(GL_FLAT); glPolygonMode(GL_FRONT_AND_BACK,GL_LINE); glDisable(GL_LIGHTING); glDisable(GL_LIGHT0); glDisable(GL_BLEND); } } /* Redisplay the Klein bottle. */ static void display_projectiveplane(ModeInfo *mi) { projectiveplanestruct *pp = &projectiveplane[MI_SCREEN(mi)]; if (!pp->button_pressed) { if (view == VIEW_TURN) { pp->alpha += speed_wx * pp->speed_scale; if (pp->alpha >= 360.0) pp->alpha -= 360.0; pp->beta += speed_wy * pp->speed_scale; if (pp->beta >= 360.0) pp->beta -= 360.0; pp->delta += speed_wz * pp->speed_scale; if (pp->delta >= 360.0) pp->delta -= 360.0; pp->zeta += speed_xy * pp->speed_scale; if (pp->zeta >= 360.0) pp->zeta -= 360.0; pp->eta += speed_xz * pp->speed_scale; if (pp->eta >= 360.0) pp->eta -= 360.0; pp->theta += speed_yz * pp->speed_scale; if (pp->theta >= 360.0) pp->theta -= 360.0; } if (view == VIEW_WALKTURN) { pp->zeta += speed_xy * pp->speed_scale; if (pp->zeta >= 360.0) pp->zeta -= 360.0; pp->eta += speed_xz * pp->speed_scale; if (pp->eta >= 360.0) pp->eta -= 360.0; pp->theta += speed_yz * pp->speed_scale; if (pp->theta >= 360.0) pp->theta -= 360.0; } if (view == VIEW_WALK || view == VIEW_WALKTURN) { pp->dvmove = (pp->dir*sin(walk_direction*M_PI/180.0)* walk_speed*M_PI/4096.0); pp->vmove += pp->dvmove; if (pp->vmove > 2.0*M_PI) { pp->vmove = 4.0*M_PI-pp->vmove; pp->umove = pp->umove-M_PI; if (pp->umove < 0.0) pp->umove += 2.0*M_PI; pp->side = -pp->side; pp->dir = -pp->dir; pp->dvmove = -pp->dvmove; } if (pp->vmove < 0.0) { pp->vmove = -pp->vmove; pp->umove = pp->umove-M_PI; if (pp->umove < 0.0) pp->umove += 2.0*M_PI; pp->dir = -pp->dir; pp->dvmove = -pp->dvmove; } pp->dumove = cos(walk_direction*M_PI/180.0)*walk_speed*M_PI/4096.0; pp->umove += pp->dumove; if (pp->umove >= 2.0*M_PI) pp->umove -= 2.0*M_PI; if (pp->umove < 0.0) pp->umove += 2.0*M_PI; } } glMatrixMode(GL_PROJECTION); glLoadIdentity(); if (projection_3d == DISP_3D_PERSPECTIVE || view == VIEW_WALK || view == VIEW_WALKTURN) { if (view == VIEW_WALK || view == VIEW_WALKTURN) gluPerspective(60.0,pp->aspect,0.01,10.0); else gluPerspective(60.0,pp->aspect,0.1,10.0); } else { if (pp->aspect >= 1.0) glOrtho(-0.6*pp->aspect,0.6*pp->aspect,-0.6,0.6,0.1,10.0); else glOrtho(-0.6,0.6,-0.6/pp->aspect,0.6/pp->aspect,0.1,10.0); } glMatrixMode(GL_MODELVIEW); glLoadIdentity(); mi->polygon_count = projective_plane(mi,0.0,2.0*M_PI,0.0,2.0*M_PI); } ENTRYPOINT void reshape_projectiveplane(ModeInfo *mi, int width, int height) { projectiveplanestruct *pp = &projectiveplane[MI_SCREEN(mi)]; pp->WindW = (GLint)width; pp->WindH = (GLint)height; glViewport(0,0,width,height); pp->aspect = (GLfloat)width/(GLfloat)height; } ENTRYPOINT Bool projectiveplane_handle_event(ModeInfo *mi, XEvent *event) { projectiveplanestruct *pp = &projectiveplane[MI_SCREEN(mi)]; KeySym sym = 0; char c = 0; if (event->xany.type == KeyPress || event->xany.type == KeyRelease) XLookupString (&event->xkey, &c, 1, &sym, 0); if (event->xany.type == ButtonPress && event->xbutton.button == Button1) { pp->button_pressed = True; gltrackball_start(pp->trackballs[pp->current_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_pressed = False; return True; } else if (event->xany.type == KeyPress) { if (sym == XK_Shift_L || sym == XK_Shift_R) { pp->current_trackball = 1; if (pp->button_pressed) gltrackball_start(pp->trackballs[pp->current_trackball], event->xbutton.x, event->xbutton.y, MI_WIDTH(mi), MI_HEIGHT(mi)); return True; } } else if (event->xany.type == KeyRelease) { if (sym == XK_Shift_L || sym == XK_Shift_R) { pp->current_trackball = 0; if (pp->button_pressed) gltrackball_start(pp->trackballs[pp->current_trackball], event->xbutton.x, event->xbutton.y, MI_WIDTH(mi), MI_HEIGHT(mi)); return True; } } else if (event->xany.type == MotionNotify && pp->button_pressed) { gltrackball_track(pp->trackballs[pp->current_trackball], event->xmotion.x, event->xmotion.y, MI_WIDTH(mi), MI_HEIGHT(mi)); return True; } return False; } /* *----------------------------------------------------------------------------- *----------------------------------------------------------------------------- * Xlock hooks. *----------------------------------------------------------------------------- *----------------------------------------------------------------------------- */ /* *----------------------------------------------------------------------------- * Initialize projectiveplane. Called each time the window changes. *----------------------------------------------------------------------------- */ ENTRYPOINT void init_projectiveplane(ModeInfo *mi) { projectiveplanestruct *pp; if (projectiveplane == NULL) { projectiveplane = (projectiveplanestruct *)calloc(MI_NUM_SCREENS(mi), sizeof(projectiveplanestruct)); if (projectiveplane == NULL) return; } pp = &projectiveplane[MI_SCREEN(mi)]; pp->trackballs[0] = gltrackball_init(True); pp->trackballs[1] = gltrackball_init(True); pp->current_trackball = 0; pp->button_pressed = False; /* Set the display mode. */ if (!strcasecmp(mode,"random")) { display_mode = random() % NUM_DISPLAY_MODES; } else if (!strcasecmp(mode,"wireframe")) { display_mode = DISP_WIREFRAME; } else if (!strcasecmp(mode,"surface")) { display_mode = DISP_SURFACE; } else if (!strcasecmp(mode,"transparent")) { display_mode = DISP_TRANSPARENT; } else { display_mode = random() % NUM_DISPLAY_MODES; } /* Orientation marks don't make sense in wireframe mode. */ if (display_mode == DISP_WIREFRAME) marks = False; /* Set the appearance. */ if (!strcasecmp(appear,"random")) { appearance = random() % NUM_APPEARANCES; } else if (!strcasecmp(appear,"solid")) { appearance = APPEARANCE_SOLID; } else if (!strcasecmp(appear,"distance-bands")) { appearance = APPEARANCE_DISTANCE_BANDS; } else if (!strcasecmp(appear,"direction-bands")) { appearance = APPEARANCE_DIRECTION_BANDS; } else { appearance = random() % NUM_APPEARANCES; } /* Set the color mode. */ if (!strcasecmp(color_mode,"random")) { colors = random() % NUM_COLORS; } else if (!strcasecmp(color_mode,"two-sided")) { colors = COLORS_TWOSIDED; } else if (!strcasecmp(color_mode,"distance")) { colors = COLORS_DISTANCE; } else if (!strcasecmp(color_mode,"direction")) { colors = COLORS_DIRECTION; } else if (!strcasecmp(color_mode,"depth")) { colors = COLORS_DEPTH; } else { colors = random() % NUM_COLORS; } /* Set the view mode. */ if (!strcasecmp(view_mode,"random")) { view = random() % NUM_VIEW_MODES; } else if (!strcasecmp(view_mode,"walk")) { view = VIEW_WALK; } else if (!strcasecmp(view_mode,"turn")) { view = VIEW_TURN; } else if (!strcasecmp(view_mode,"walk-turn")) { view = VIEW_WALKTURN; } else { view = random() % NUM_VIEW_MODES; } /* Set the 3d projection mode. */ if (!strcasecmp(proj_3d,"random")) { /* Orthographic projection only makes sense in turn mode. */ if (view == VIEW_TURN) projection_3d = random() % NUM_DISP_3D_MODES; else projection_3d = DISP_3D_PERSPECTIVE; } else if (!strcasecmp(proj_3d,"perspective")) { projection_3d = DISP_3D_PERSPECTIVE; } else if (!strcasecmp(proj_3d,"orthographic")) { projection_3d = DISP_3D_ORTHOGRAPHIC; } else { /* Orthographic projection only makes sense in turn mode. */ if (view == VIEW_TURN) projection_3d = random() % NUM_DISP_3D_MODES; else projection_3d = DISP_3D_PERSPECTIVE; } /* Set the 4d projection mode. */ if (!strcasecmp(proj_4d,"random")) { projection_4d = random() % NUM_DISP_4D_MODES; } else if (!strcasecmp(proj_4d,"perspective")) { projection_4d = DISP_4D_PERSPECTIVE; } else if (!strcasecmp(proj_4d,"orthographic")) { projection_4d = DISP_4D_ORTHOGRAPHIC; } else { projection_4d = random() % NUM_DISP_4D_MODES; } /* Modify the speeds to a useful range in walk-and-turn mode. */ if (view == VIEW_WALKTURN) { speed_wx *= 0.2; speed_wy *= 0.2; speed_wz *= 0.2; speed_xy *= 0.2; speed_xz *= 0.2; speed_yz *= 0.2; } /* make multiple screens rotate at slightly different rates. */ pp->speed_scale = 0.9 + frand(0.3); if ((pp->glx_context = init_GL(mi)) != NULL) { reshape_projectiveplane(mi,MI_WIDTH(mi),MI_HEIGHT(mi)); glDrawBuffer(GL_BACK); init(mi); } else { MI_CLEARWINDOW(mi); } } /* *----------------------------------------------------------------------------- * Called by the mainline code periodically to update the display. *----------------------------------------------------------------------------- */ ENTRYPOINT void draw_projectiveplane(ModeInfo *mi) { Display *display = MI_DISPLAY(mi); Window window = MI_WINDOW(mi); projectiveplanestruct *pp; if (projectiveplane == NULL) return; pp = &projectiveplane[MI_SCREEN(mi)]; MI_IS_DRAWN(mi) = True; if (!pp->glx_context) return; glXMakeCurrent(display,window,*(pp->glx_context)); glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT); glLoadIdentity(); display_projectiveplane(mi); if (MI_IS_FPS(mi)) do_fps (mi); glFlush(); glXSwapBuffers(display,window); } /* *----------------------------------------------------------------------------- * The display is being taken away from us. Free up malloc'ed * memory and X resources that we've alloc'ed. Only called * once, we must zap everything for every screen. *----------------------------------------------------------------------------- */ ENTRYPOINT void release_projectiveplane(ModeInfo *mi) { if (projectiveplane != NULL) { int screen; for (screen = 0; screen < MI_NUM_SCREENS(mi); screen++) { projectiveplanestruct *pp = &projectiveplane[screen]; if (pp->glx_context) pp->glx_context = (GLXContext *)NULL; } (void) free((void *)projectiveplane); projectiveplane = (projectiveplanestruct *)NULL; } FreeAllGL(mi); } #ifndef STANDALONE ENTRYPOINT void change_projectiveplane(ModeInfo *mi) { projectiveplanestruct *pp = &projectiveplane[MI_SCREEN(mi)]; if (!pp->glx_context) return; glXMakeCurrent(MI_DISPLAY(mi),MI_WINDOW(mi),*(pp->glx_context)); init(mi); } #endif /* !STANDALONE */ XSCREENSAVER_MODULE ("ProjectivePlane", projectiveplane) #endif /* USE_GL */ xscreensaver-5.36/hacks/glx/winduprobot.c000664 000767 000024 00000175572 12740544646 020600 0ustar00jwzstaff000000 000000 /* winduprobot, Copyright (c) 2014, 2015 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. * * Draws a robot wind-up toy. * * I've had this little robot since I was about six years old! When the time * came for us to throw the Cocktail Robotics Grand Challenge at DNA Lounge, I * photographed this robot (holding a tiny martini glass) to make a flyer for * the event. You can see that photo here: * https://www.dnalounge.com/flyers/2014/09/14.html * * Then I decided to try and make award statues for the contest by modeling * this robot and 3D-printing it (a robot on a post, with the DNA Lounge * grommet around it.) So I learned Maya and built a model. * * Well, that 3D printing idea didn't work out, but since I had the model * already, I exported it and turned it into a screen saver. * * The DXF files that Maya exports aren't simple enough for my dxf2gl.pl * script to process, so the exporting process went: * * - Save from Maya to OBJ; * - Import OBJ into SketchUp using * http://www.scriptspot.com/sketchup/scripts/obj-importer * - Clean up the model a little bit more; * - Export to DXF with "Millimeters", "Triangles", using * http://www.guitar-list.com/download-software/convert-sketchup-skp-files-dxf-or-stl * * We did eventually end up with robotic award statues, but we constructed * them out of mass-produced wind-up robots, rather than 3D printing them: * https://www.dnalounge.com/gallery/2014/09-14/045.html * https://www.youtube.com/watch?v=EZF4ZAAy49g */ #define LABEL_FONT "-*-helvetica-bold-r-normal-*-*-240-*-*-*-*-*-*" #define DEFAULTS "*delay: 20000 \n" \ "*count: 25 \n" \ "*showFPS: False \n" \ "*wireframe: False \n" \ "*labelFont: " LABEL_FONT "\n" \ "*legColor: #AA2222" "\n" \ "*armColor: #AA2222" "\n" \ "*handColor: #AA2222" "\n" \ "*crankColor: #444444" "\n" \ "*bodyColor: #7777AA" "\n" \ "*domeColor: #7777AA" "\n" \ "*insideColor: #DDDDDD" "\n" \ "*gearboxColor: #444488" "\n" \ "*gearColor: #008877" "\n" \ "*wheelColor: #007788" "\n" \ "*wireColor: #006600" "\n" \ "*groundColor: #0000FF" "\n" \ "*textColor: #FFFFFF""\n" \ "*textBackground: #444444""\n" \ "*textBorderColor: #FFFF88""\n" \ "*textLines: 10 \n" \ "*program: xscreensaver-text\n" \ "*usePty: False\n" #undef DEBUG #define WORDBUBBLES # define refresh_robot 0 #undef countof #define countof(x) (sizeof((x))/sizeof((*x))) #define DEF_SPEED "1.0" #define DEF_ROBOT_SIZE "1.0" #define DEF_TEXTURE "True" #define DEF_FADE "True" #define DEF_OPACITY "1.0" #define DEF_TALK "0.2" #include "xlockmore.h" #include "gltrackball.h" #include "xpm-ximage.h" #include "involute.h" #include "sphere.h" #ifdef WORDBUBBLES # include "textclient.h" # include "texfont.h" #endif #include #ifndef HAVE_JWZGLES /* No SPHERE_MAP on iPhone */ # define HAVE_TEXTURE #endif #ifdef HAVE_TEXTURE # include "../images/chromesphere.xpm" #endif #ifdef USE_GL /* whole file */ #include "gllist.h" extern const struct gllist *robot_arm_half, *robot_body_half_outside, *robot_body_half_inside, *robot_crank_full, *robot_gearbox_half, *robot_hand_half, *robot_leg_half, *robot_rotator_half, *robot_wireframe; static struct gllist *robot_dome = 0, *robot_gear = 0, *ground = 0; static const struct gllist * const *all_objs[] = { &robot_arm_half, &robot_body_half_outside, &robot_body_half_inside, &robot_crank_full, &robot_gearbox_half, &robot_hand_half, &robot_leg_half, &robot_rotator_half, &robot_wireframe, (const struct gllist * const *) &robot_dome, (const struct gllist * const *) &robot_gear, (const struct gllist * const *) &ground }; #define ROBOT_ARM 0 #define ROBOT_BODY_1 1 #define ROBOT_BODY_2 2 #define ROBOT_CRANK 3 #define ROBOT_GEARBOX 4 #define ROBOT_HAND 5 #define ROBOT_LEG 6 #define ROBOT_ROTATOR 7 #define ROBOT_WIREFRAME 8 #define ROBOT_DOME 9 #define ROBOT_GEAR 10 #define GROUND 11 typedef struct { GLfloat x, y, z; /* position */ GLfloat facing; /* direction of front of robot, degrees */ GLfloat pitch; /* front/back tilt angle, degrees */ GLfloat roll; /* left/right tilt angle, degrees */ GLfloat speed; /* some robots are faster */ GLfloat crank_rot; /* gear state, degrees */ GLfloat hand_rot[2]; /* rotation of the hands, degrees */ GLfloat hand_pos[2]; /* openness of the hands, ratio */ GLfloat balance; /* how off-true does it walk? degrees */ GLfloat body_transparency; /* ratio */ int fading_p; /* -1, 0, 1 */ } walker; typedef struct { GLXContext *glx_context; trackball_state *user_trackball; Bool button_down_p; GLuint *dlists; GLfloat component_colors[countof(all_objs)][4]; int nwalkers; walker *walkers; GLfloat looking_x, looking_y, looking_z; /* Where camera is aimed */ GLfloat olooking_x, olooking_y, olooking_z; /* Where camera was aimed */ Bool camera_tracking_p; /* Whether camera in motion */ GLfloat tracking_ratio; # ifdef HAVE_TEXTURE GLuint chrome_texture; # endif # ifdef WORDBUBBLES texture_font_data *font_data; int bubble_tick; text_data *tc; char words[10240]; int lines, max_lines; GLfloat text_color[4], text_bg[4], text_bd[4]; # endif /* WORDBUBBLES */ # ifdef DEBUG GLfloat debug_x, debug_y, debug_z; # endif } robot_configuration; static robot_configuration *bps = NULL; static GLfloat speed, size, opacity; static int do_texture, do_fade; #ifdef WORDBUBBLES static GLfloat talk_chance; #endif #ifdef DEBUG static int debug_p; #endif static XrmOptionDescRec opts[] = { { "-speed", ".speed", XrmoptionSepArg, 0 }, { "-size", ".robotSize", XrmoptionSepArg, 0 }, { "-opacity", ".opacity", XrmoptionSepArg, 0 }, { "-talk", ".talk", XrmoptionSepArg, 0 }, {"-texture", ".texture", XrmoptionNoArg, "True" }, {"+texture", ".texture", XrmoptionNoArg, "False" }, {"-fade", ".fade", XrmoptionNoArg, "True" }, {"+fade", ".fade", XrmoptionNoArg, "False" }, #ifdef DEBUG {"-debug", ".debug", XrmoptionNoArg, "True" }, {"+debug", ".debug", XrmoptionNoArg, "False" }, #endif }; static argtype vars[] = { {&speed, "speed", "Speed", DEF_SPEED, t_Float}, {&size, "robotSize", "RobotSize", DEF_ROBOT_SIZE, t_Float}, {&opacity, "opacity", "Opacity", DEF_OPACITY, t_Float}, {&do_texture, "texture", "Texture", DEF_TEXTURE, t_Bool}, {&do_fade, "fade", "Fade", DEF_FADE, t_Bool}, #ifdef WORDBUBBLES {&talk_chance, "talk", "Talk", DEF_TALK, t_Float}, #endif #ifdef DEBUG {&debug_p, "debug", "Debug", "False", t_Bool}, #endif }; ENTRYPOINT ModeSpecOpt robot_opts = { countof(opts), opts, countof(vars), vars, NULL}; /* Window management, etc */ ENTRYPOINT void reshape_robot (ModeInfo *mi, int width, int height) { GLfloat h = (GLfloat) height / (GLfloat) width; glViewport (0, 0, (GLint) width, (GLint) height); glMatrixMode(GL_PROJECTION); glLoadIdentity(); gluPerspective (40.0, 1/h, 1.0, 250); glMatrixMode(GL_MODELVIEW); glLoadIdentity(); gluLookAt( 0, 20, 30, 0, 0, 0, 0, 1, 0); glClear(GL_COLOR_BUFFER_BIT); # ifdef WORDBUBBLES { robot_configuration *bp = &bps[MI_SCREEN(mi)]; int w = (width < 800 ? 25 : 40); int h = 1000; if (bp->tc) textclient_reshape (bp->tc, w, h, w, h, /* Passing bp->max_lines isn't actually necessary */ 0); } # endif } ENTRYPOINT Bool robot_handle_event (ModeInfo *mi, XEvent *event) { robot_configuration *bp = &bps[MI_SCREEN(mi)]; if (gltrackball_event_handler (event, bp->user_trackball, MI_WIDTH (mi), MI_HEIGHT (mi), &bp->button_down_p)) return True; #ifdef DEBUG else if (event->xany.type == KeyPress && debug_p) { KeySym keysym; char c = 0; double n[3] = { 1.0, 0.1, 0.1 }; int s = (event->xkey.state & ShiftMask ? 10 : 1); XLookupString (&event->xkey, &c, 1, &keysym, 0); if (keysym == XK_Right) bp->debug_x += n[0] * s; else if (keysym == XK_Left) bp->debug_x -= n[0] * s; else if (keysym == XK_Up) bp->debug_y += n[1] * s; else if (keysym == XK_Down) bp->debug_y -= n[1] * s; else if (c == '=' || c == '+') bp->debug_z += n[2] * s; else if (c == '-' || c == '_') bp->debug_z -= n[2] * s; else if (c == ' ') bp->debug_x = bp->debug_y = bp->debug_z = 0; else if (c == '\n' || c == '\r') fprintf (stderr, "%.4f %.4f %.4f\n", bp->debug_x, bp->debug_y, bp->debug_z); else return False; return True; } #endif /* DEBUG */ return False; } #ifdef HAVE_TEXTURE static void load_textures (ModeInfo *mi) { robot_configuration *bp = &bps[MI_SCREEN(mi)]; XImage *xi; xi = xpm_to_ximage (mi->dpy, mi->xgwa.visual, mi->xgwa.colormap, chromesphere_xpm); clear_gl_error(); glGenTextures (1, &bp->chrome_texture); glBindTexture (GL_TEXTURE_2D, bp->chrome_texture); glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); glPixelStorei (GL_UNPACK_ALIGNMENT, 1); glTexImage2D (GL_TEXTURE_2D, 0, GL_RGBA, xi->width, xi->height, 0, GL_RGBA, # ifndef USE_IPHONE GL_UNSIGNED_INT_8_8_8_8_REV, # else GL_UNSIGNED_BYTE, # endif xi->data); check_gl_error("texture"); glEnable(GL_TEXTURE_GEN_S); glEnable(GL_TEXTURE_GEN_T); glEnable(GL_TEXTURE_2D); } #endif /* HAVE_TEXTURE */ static int unit_gear (ModeInfo *, GLfloat color[4]); static int draw_ground (ModeInfo *, GLfloat color[4]); static void init_walker (ModeInfo *, walker *); static void parse_color (ModeInfo *mi, char *key, GLfloat color[4]) { XColor xcolor; char *string = get_string_resource (mi->dpy, key, "RobotColor"); if (!XParseColor (mi->dpy, mi->xgwa.colormap, string, &xcolor)) { fprintf (stderr, "%s: unparsable color in %s: %s\n", progname, key, string); exit (1); } color[0] = xcolor.red / 65536.0; color[1] = xcolor.green / 65536.0; color[2] = xcolor.blue / 65536.0; color[3] = 1; } ENTRYPOINT void init_robot (ModeInfo *mi) { robot_configuration *bp; int wire = MI_IS_WIREFRAME(mi); int i; if (!bps) { bps = (robot_configuration *) calloc (MI_NUM_SCREENS(mi), sizeof (robot_configuration)); if (!bps) { fprintf(stderr, "%s: out of memory\n", progname); exit(1); } } bp = &bps[MI_SCREEN(mi)]; bp->glx_context = init_GL(mi); reshape_robot (mi, MI_WIDTH(mi), MI_HEIGHT(mi)); glShadeModel(GL_SMOOTH); glEnable(GL_DEPTH_TEST); glEnable(GL_NORMALIZE); glEnable(GL_CULL_FACE); if (!wire) { GLfloat pos[4] = {0.4, 0.2, 0.4, 0.0}; /* GLfloat amb[4] = {0.0, 0.0, 0.0, 1.0};*/ GLfloat amb[4] = {0.2, 0.2, 0.2, 1.0}; GLfloat dif[4] = {1.0, 1.0, 1.0, 1.0}; GLfloat spc[4] = {1.0, 1.0, 1.0, 1.0}; glEnable(GL_LIGHTING); glEnable(GL_LIGHT0); glEnable(GL_DEPTH_TEST); glEnable(GL_CULL_FACE); glLightfv(GL_LIGHT0, GL_POSITION, pos); glLightfv(GL_LIGHT0, GL_AMBIENT, amb); glLightfv(GL_LIGHT0, GL_DIFFUSE, dif); glLightfv(GL_LIGHT0, GL_SPECULAR, spc); glBlendFunc (GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); } # ifdef HAVE_TEXTURE if (!wire && do_texture) load_textures (mi); # endif bp->user_trackball = gltrackball_init (False); bp->dlists = (GLuint *) calloc (countof(all_objs)+1, sizeof(GLuint)); for (i = 0; i < countof(all_objs); i++) bp->dlists[i] = glGenLists (1); for (i = 0; i < countof(all_objs); i++) { const struct gllist *gll = *all_objs[i]; char *key = 0; GLfloat spec1[4] = {1.00, 1.00, 1.00, 1.0}; GLfloat spec2[4] = {0.40, 0.40, 0.70, 1.0}; GLfloat *spec = 0; GLfloat shiny = 20; glNewList (bp->dlists[i], GL_COMPILE); glMatrixMode(GL_MODELVIEW); glPushMatrix(); glMatrixMode(GL_TEXTURE); glPushMatrix(); glMatrixMode(GL_MODELVIEW); glRotatef (-90, 1, 0, 0); glRotatef (180, 0, 0, 1); glScalef (6, 6, 6); glBindTexture (GL_TEXTURE_2D, 0); switch (i) { case ROBOT_BODY_1: key = "bodyColor"; spec = spec1; shiny = 128; # ifdef HAVE_TEXTURE if (do_texture) { glBindTexture (GL_TEXTURE_2D, bp->chrome_texture); glTexGeni(GL_S, GL_TEXTURE_GEN_MODE, GL_SPHERE_MAP); glTexGeni(GL_T, GL_TEXTURE_GEN_MODE, GL_SPHERE_MAP); } # endif break; case ROBOT_DOME: key = "domeColor"; spec = spec1; shiny = 128; # ifdef HAVE_TEXTURE if (do_texture) { glBindTexture (GL_TEXTURE_2D, bp->chrome_texture); glTexGeni(GL_S, GL_TEXTURE_GEN_MODE, GL_SPHERE_MAP); glTexGeni(GL_T, GL_TEXTURE_GEN_MODE, GL_SPHERE_MAP); } # endif break; case ROBOT_BODY_2: key = "insideColor"; spec = spec2; shiny = 128; break; case ROBOT_ARM: key = "armColor"; spec = spec2; shiny = 20; break; case ROBOT_HAND: key = "handColor"; spec = spec2; shiny = 20; break; case ROBOT_LEG: key = "legColor"; spec = spec2; shiny = 20; break; case ROBOT_CRANK: key = "crankColor"; spec = spec2; shiny = 20; break; case ROBOT_ROTATOR: key = "wheelColor"; spec = spec2; shiny = 20; break; case ROBOT_GEAR: key = "gearColor"; spec = spec2; shiny = 20; break; case ROBOT_GEARBOX: key = "gearboxColor"; spec = spec2; shiny = 20; break; case ROBOT_WIREFRAME: key = "wireColor"; spec = spec2; shiny = 20; break; case GROUND: key = "groundColor"; spec = spec2; shiny = 20; break; default: abort(); } parse_color (mi, key, bp->component_colors[i]); glMaterialfv (GL_FRONT_AND_BACK, GL_SPECULAR, spec); glMaterialf (GL_FRONT_AND_BACK, GL_SHININESS, shiny); switch (i) { case ROBOT_DOME: if (! robot_dome) robot_dome = (struct gllist *) calloc (1, sizeof(*robot_dome)); robot_dome->points = unit_dome (32, 32, MI_IS_WIREFRAME(mi)); break; case ROBOT_GEAR: if (! robot_gear) robot_gear = (struct gllist *) calloc (1, sizeof(*robot_gear)); robot_gear->points = unit_gear (mi, bp->component_colors[i]); break; case GROUND: if (! ground) ground = (struct gllist *) calloc (1, sizeof(*ground)); ground->points = draw_ground (mi, bp->component_colors[i]); break; case ROBOT_WIREFRAME: glLineWidth (0.3); renderList (gll, True); break; default: renderList (gll, wire); /* glColor3f (1, 1, 1); renderListNormals (gll, 100, True); */ /* glColor3f (1, 1, 0); renderListNormals (gll, 100, False); */ break; } glMatrixMode(GL_TEXTURE); glPopMatrix(); glMatrixMode(GL_MODELVIEW); glPopMatrix(); glEndList (); } # ifdef DEBUG if (debug_p) MI_COUNT(mi) = 1; # endif bp->nwalkers = MI_COUNT(mi); bp->walkers = (walker *) calloc (bp->nwalkers, sizeof (walker)); for (i = 0; i < bp->nwalkers; i++) init_walker (mi, &bp->walkers[i]); /* Since #0 is the one we track, make sure it doesn't walk too straight. */ bp->walkers[0].balance *= 1.5; # ifdef WORDBUBBLES bp->font_data = load_texture_font (mi->dpy, "labelFont"); bp->max_lines = get_integer_resource (mi->dpy, "textLines", "TextLines"); bp->tc = textclient_open (MI_DISPLAY (mi)); parse_color (mi, "textColor", bp->text_color); parse_color (mi, "textBackground", bp->text_bg); parse_color (mi, "textBorderColor", bp->text_bd); reshape_robot (mi, MI_WIDTH(mi), MI_HEIGHT(mi)); # endif /* WORDBUBBLES */ /* Let's tilt the floor a little. */ # ifdef DEBUG if (!debug_p) # endif { gltrackball_start (bp->user_trackball, 0, 500, 1000, 1000); gltrackball_track (bp->user_trackball, 0, 500 + (random() % 200) - 100, 1000, 1000); } } static int draw_component (ModeInfo *mi, int i) { robot_configuration *bp = &bps[MI_SCREEN(mi)]; glMaterialfv (GL_FRONT_AND_BACK, GL_AMBIENT_AND_DIFFUSE, bp->component_colors[i]); glCallList (bp->dlists[i]); return (*all_objs[i])->points / 3; } static int draw_transparent_component (ModeInfo *mi, int i, GLfloat alpha) { robot_configuration *bp = &bps[MI_SCREEN(mi)]; int wire = MI_IS_WIREFRAME(mi); int count = 0; if (alpha < 0) return 0; if (alpha > 1) alpha = 1; bp->component_colors[i][3] = alpha; if (wire || alpha >= 1) return draw_component (mi, i); /* Draw into the depth buffer but not the frame buffer */ glColorMask (GL_FALSE, GL_FALSE, GL_FALSE, GL_FALSE); count += draw_component (mi, i); /* Now draw into the frame buffer only where there's already depth */ glColorMask (GL_TRUE, GL_TRUE, GL_TRUE, GL_TRUE); glDepthFunc (GL_EQUAL); glEnable (GL_BLEND); glBlendFunc (GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); count += draw_component (mi, i); glDepthFunc (GL_LESS); glDisable (GL_BLEND); return count; } static int draw_arm_half (ModeInfo *mi, walker *f) { int count = 0; glPushMatrix(); count += draw_transparent_component (mi, ROBOT_ARM, f->body_transparency); glPopMatrix(); return count; } static int draw_hand_half (ModeInfo *mi, walker *f) { int count = 0; glPushMatrix(); count += draw_transparent_component (mi, ROBOT_HAND, f->body_transparency); glPopMatrix(); return count; } /* rotation of arm: 0-360. openness of fingers: 0.0 - 1.0. */ static int draw_arm (ModeInfo *mi, walker *f, GLfloat left_p, GLfloat rot, GLfloat open) { int count = 0; GLfloat arm_x = 4766; /* distance from origin to arm axis */ GLfloat arm_y = 12212; open *= 5.5; /* scale of finger range */ # ifdef DEBUG if (debug_p) rot = 0; # endif glPushMatrix(); if (! left_p) glTranslatef (0, 0, arm_x * 2); glTranslatef (0, arm_y, -arm_x); /* move to origin */ glRotatef (rot, 1, 0, 0); glTranslatef (0, -arm_y, arm_x); /* move back */ glFrontFace(GL_CCW); count += draw_arm_half (mi, f); glScalef (1, -1, 1); glTranslatef (0, -arm_y * 2, 0); glFrontFace(GL_CW); count += draw_arm_half (mi, f); glPushMatrix(); glTranslatef (0, 0, -arm_x * 2); glScalef (1, 1, -1); glFrontFace(GL_CCW); count += draw_arm_half (mi, f); glScalef (1, -1, 1); glTranslatef (0, -arm_y * 2, 0); glFrontFace(GL_CW); count += draw_arm_half (mi, f); glPopMatrix(); glTranslatef (0, 0, open); glFrontFace(GL_CW); count += draw_hand_half (mi, f); glTranslatef (0, 0, -open); glScalef (1, 1, -1); glTranslatef (0, 0, arm_x * 2); glFrontFace(GL_CCW); glTranslatef (0, 0, open); count += draw_hand_half (mi, f); glPopMatrix(); return count; } static int draw_body_half (ModeInfo *mi, walker *f, Bool inside_p) { int count = 0; int which = (inside_p ? ROBOT_BODY_2 : ROBOT_BODY_1); glPushMatrix(); count += draw_transparent_component (mi, which, f->body_transparency); glPopMatrix(); return count; } static int draw_body (ModeInfo *mi, walker *f, Bool inside_p) { int count = 0; glPushMatrix(); glFrontFace(GL_CCW); count += draw_body_half (mi, f, inside_p); glScalef (1, 1, -1); glFrontFace(GL_CW); count += draw_body_half (mi, f, inside_p); glPopMatrix(); return count; } static int draw_gearbox_half (ModeInfo *mi) { int count = 0; glPushMatrix(); count += draw_component (mi, ROBOT_GEARBOX); glPopMatrix(); return count; } static int draw_gearbox (ModeInfo *mi) { int count = 0; glPushMatrix(); glFrontFace(GL_CCW); count += draw_gearbox_half (mi); glScalef (1, 1, -1); glFrontFace(GL_CW); count += draw_gearbox_half (mi); glPopMatrix(); return count; } static int unit_gear (ModeInfo *mi, GLfloat color[4]) { int wire = MI_IS_WIREFRAME(mi); gear G = { 0, }; gear *g = &G; g->r = 0.5; g->nteeth = 16; g->tooth_h = 0.12; g->thickness = 0.32; g->thickness2 = g->thickness * 0.5; g->thickness3 = g->thickness; g->inner_r = g->r * 0.7; g->inner_r2 = g->r * 0.4; g->inner_r3 = g->r * 0.1; g->size = INVOLUTE_LARGE; g->color[0] = g->color2[0] = color[0]; g->color[1] = g->color2[1] = color[1]; g->color[2] = g->color2[2] = color[2]; g->color[3] = g->color2[3] = color[3]; return draw_involute_gear (g, wire); } static int draw_gear (ModeInfo *mi) { int count = 0; GLfloat n = 350; glScalef (n, n, n); count += draw_component (mi, ROBOT_GEAR); return count; } static int draw_crank (ModeInfo *mi, walker *f, GLfloat rot) { int count = 0; GLfloat origin = 12210.0; rot = -rot; glPushMatrix(); glTranslatef (0, origin, 0); /* position at origin */ glRotatef (rot, 0, 0, 1); glPushMatrix(); glRotatef (90, 1, 0, 0); count += draw_gear (mi); glPopMatrix(); glTranslatef (0, -origin, 0); /* move back */ glFrontFace(GL_CCW); count += draw_component (mi, ROBOT_CRANK); glPopMatrix(); return count; } static int draw_rotator_half (ModeInfo *mi) { int count = 0; glPushMatrix(); count += draw_component (mi, ROBOT_ROTATOR); glPopMatrix(); return count; } static int draw_rotator (ModeInfo *mi, walker *f, GLfloat rot) { int count = 0; GLfloat origin = 10093.0; glPushMatrix(); glTranslatef (0, origin, 0); /* position at origin */ glRotatef (rot, 0, 0, 1); glPushMatrix(); glRotatef (90, 1, 0, 0); count += draw_gear (mi); glPopMatrix(); # ifdef DEBUG if (debug_p) { glDisable(GL_LIGHTING); glBegin(GL_LINES); glVertex3f(0, 0, -3000); glVertex3f(0, 0, 3000); glEnd(); if (!MI_IS_WIREFRAME(mi)) glEnable(GL_LIGHTING); } # endif glTranslatef (0, -origin, 0); /* move back */ glFrontFace(GL_CCW); count += draw_rotator_half (mi); glScalef (1, 1, -1); glFrontFace(GL_CW); glRotatef (180, 0, 0, 1); glTranslatef (0, -origin * 2, 0); /* move back */ count += draw_rotator_half (mi); glPopMatrix(); return count; } static int draw_leg_half (ModeInfo *mi) { int count = 0; glPushMatrix(); count += draw_component (mi, ROBOT_LEG); glPopMatrix(); return count; } static int draw_wireframe (ModeInfo *mi, walker *f) { int wire = MI_IS_WIREFRAME(mi); int count = 0; GLfloat alpha = 0.6 - f->body_transparency; if (alpha < 0) return 0; alpha *= 0.3; if (!wire) glDisable (GL_LIGHTING); glPushMatrix(); count += draw_transparent_component (mi, ROBOT_WIREFRAME, alpha); glPopMatrix(); if (!wire) glEnable (GL_LIGHTING); return count; } static int draw_leg (ModeInfo *mi, GLfloat rot, Bool left_p) { int count = 0; GLfloat x, y; GLfloat leg_distance = 9401; /* distance from ground to leg axis */ GLfloat rot_distance = 10110; /* distance from ground to rotator axis */ GLfloat pin_distance = 14541; /* distance from ground to stop pin */ GLfloat orbit_r = rot_distance - leg_distance; /* radius of rotation */ /* Actually it's the bottom of the pin minus its diameter, or something. */ pin_distance -= 590; glPushMatrix(); if (left_p) glRotatef (180, 0, 1, 0); if (!left_p) rot = -(rot + 180); rot -= 90; x = orbit_r * cos (-rot * M_PI / 180); y = orbit_r * sin (-rot * M_PI / 180); { /* Rotate the leg by angle B of the right A triangle ABC, where: /: / : A = position of stop pin / : D = position of rotator wheel's axis , - ~ ~ ~ - , C = D + y , ' / : ' , B = D + xy (leg's axis) , / : , , / : , So: , / : , H = dist(A,B) , / D , O = dist(A,C) , / : , sin(th) = O/H , / : , th = asin(O/H) B ~ ~ ~ ~ ~ C . , , ' ' - , _ _ _ , ' */ GLfloat Ay = pin_distance - leg_distance; GLfloat Cx = 0, Cy = y; GLfloat Bx = x; GLfloat dBC = Cx - Bx; GLfloat dAC = Cy - Ay; GLfloat dAB = sqrt (dBC*dBC + dAC*dAC); GLfloat th = asin (dAC / dAB); rot = th / (M_PI / 180.0); rot += 90; if (dBC > 0) rot = 360-rot; } glTranslatef (0, orbit_r, 0); /* position on rotator axis */ glTranslatef (x, y, 0); glTranslatef (0, leg_distance, 0); /* position on leg axis */ glRotatef(rot, 0, 0, 1); glTranslatef (0, -leg_distance, 0); /* move back */ glFrontFace(GL_CCW); count += draw_leg_half (mi); glScalef (-1, 1, 1); glFrontFace(GL_CW); count += draw_leg_half (mi); glPopMatrix(); return count; } static int draw_dome (ModeInfo *mi, walker *f) { robot_configuration *bp = &bps[MI_SCREEN(mi)]; int wire = MI_IS_WIREFRAME(mi); int which = ROBOT_DOME; int count = 0; GLfloat n = 8.3; GLfloat trans = f->body_transparency; GLfloat max = 0.7; GLfloat dome_y = 15290; if (trans < 0) trans = 0; if (trans > max) trans = max; if (!wire) glEnable (GL_BLEND); glPushMatrix(); glTranslatef (0, dome_y, 0); glScalef (100, 100, 100); glRotatef (90, 1, 0, 0); glTranslatef (0.35, 0, 0); glScalef (n, n, n); glFrontFace(GL_CCW); bp->component_colors[which][3] = trans; count += draw_component (mi, which); glPopMatrix(); if (!wire) glDisable (GL_BLEND); return count; } /* Is this robot overlapping any other? */ static Bool collision_p (ModeInfo *mi, walker *w, GLfloat extra_space) { robot_configuration *bp = &bps[MI_SCREEN(mi)]; int i; if (MI_COUNT(mi) <= 1) return False; for (i = 0; i < MI_COUNT(mi); i++) { walker *w2 = &bp->walkers[i]; GLfloat min = 0.75 + extra_space; GLfloat d, dx, dy; if (w == w2) continue; dx = w->x - w2->x; dy = w->y - w2->y; d = (dx*dx + dy*dy); if (d <= min*min) return True; } return False; } /* I couldn't figure out a straightforward trig solution to the forward/backward tilting that happens as weight passes from one foot to another, so I just built a tool to eyeball it manually. { vertical_translation, rotation, forward_translation } */ static const struct { GLfloat up, rot, fwd; } wobble_profile[360] = { { 0.0000, 0.00, 0.0000 }, /* 0 */ { 0.0000, -0.01, 0.0025 }, { 0.0000, -0.25, 0.0040 }, { 0.0000, -0.41, 0.0060 }, { 0.0000, -0.62, 0.0080 }, { 0.0000, -0.80, 0.0095 }, { 0.0000, -0.90, 0.0120 }, { 0.0000, -1.10, 0.0135 }, { 0.0000, -1.25, 0.0150 }, { 0.0000, -1.40, 0.0175 }, { 0.0000, -1.50, 0.0195 }, /* 10 */ { 0.0000, -1.70, 0.0215 }, { 0.0000, -1.80, 0.0230 }, { 0.0000, -2.00, 0.0250 }, { 0.0000, -2.10, 0.0270 }, { -0.0005, -2.30, 0.0290 }, { -0.0005, -2.50, 0.0305 }, { -0.0005, -2.60, 0.0330 }, { -0.0005, -2.70, 0.0330 }, { -0.0005, -2.90, 0.0350 }, { -0.0005, -3.00, 0.0365 }, /* 20 */ { -0.0010, -3.20, 0.0380 }, { -0.0005, -3.30, 0.0400 }, { -0.0010, -3.50, 0.0420 }, { -0.0010, -3.70, 0.0440 }, { -0.0010, -3.80, 0.0460 }, { -0.0010, -3.90, 0.0470 }, { -0.0015, -4.10, 0.0500 }, { -0.0015, -4.20, 0.0515 }, { -0.0015, -4.40, 0.0535 }, { -0.0015, -4.50, 0.0550 }, /* 30 */ { -0.0015, -4.60, 0.0565 }, { -0.0020, -4.80, 0.0585 }, { -0.0020, -5.00, 0.0600 }, { -0.0020, -5.10, 0.0620 }, { -0.0025, -5.20, 0.0635 }, { -0.0025, -5.40, 0.0655 }, { -0.0025, -5.50, 0.0675 }, { -0.0025, -5.60, 0.0690 }, { -0.0030, -5.80, 0.0710 }, { -0.0030, -5.90, 0.0720 }, /* 40 */ { -0.0030, -6.00, 0.0740 }, { -0.0035, -6.10, 0.0760 }, { -0.0035, -6.30, 0.0790 }, { -0.0040, -6.40, 0.0805 }, { -0.0040, -6.50, 0.0820 }, { -0.0040, -6.60, 0.0835 }, { -0.0045, -6.80, 0.0855 }, { -0.0045, -6.90, 0.0870 }, { -0.0050, -7.00, 0.0885 }, { -0.0050, -7.20, 0.0900 }, /* 50 */ { -0.0050, -7.20, 0.0915 }, { -0.0055, -7.40, 0.0930 }, { -0.0055, -7.50, 0.0945 }, { -0.0060, -7.60, 0.0960 }, { -0.0060, -7.70, 0.0970 }, { -0.0065, -7.80, 0.0985 }, { -0.0060, -7.70, 0.0995 }, { -0.0060, -7.60, 0.1010 }, { -0.0060, -7.50, 0.1020 }, { -0.0055, -7.30, 0.1030 }, /* 60 */ { -0.0050, -7.10, 0.1040 }, { -0.0050, -6.90, 0.1050 }, { -0.0045, -6.80, 0.1065 }, { -0.0045, -6.50, 0.1075 }, { -0.0040, -6.40, 0.1085 }, { -0.0040, -6.20, 0.1095 }, { -0.0040, -6.00, 0.1105 }, { -0.0035, -5.80, 0.1115 }, { -0.0030, -5.50, 0.1125 }, { -0.0030, -5.40, 0.1135 }, /* 70 */ { -0.0030, -5.10, 0.1145 }, { -0.0030, -4.90, 0.1150 }, { -0.0025, -4.70, 0.1160 }, { -0.0025, -4.40, 0.1165 }, { -0.0025, -4.20, 0.1175 }, { -0.0020, -3.90, 0.1180 }, { -0.0020, -3.70, 0.1185 }, { -0.0020, -3.40, 0.1190 }, { -0.0020, -3.10, 0.1195 }, { -0.0020, -2.90, 0.1200 }, /* 80 */ { -0.0015, -2.60, 0.1200 }, { -0.0015, -2.30, 0.1205 }, { -0.0015, -2.00, 0.1210 }, { -0.0015, -1.80, 0.1215 }, { -0.0015, -1.50, 0.1215 }, { -0.0015, -1.20, 0.1215 }, { -0.0015, -0.90, 0.1215 }, { -0.0015, -0.60, 0.1215 }, { -0.0015, -0.30, 0.1215 }, { -0.0010, 0.00, 0.1215 }, /* 90 */ { -0.0010, 0.30, 0.1215 }, { -0.0010, 0.60, 0.1215 }, { -0.0010, 0.90, 0.1215 }, { -0.0010, 1.20, 0.1215 }, { -0.0015, 1.40, 0.1215 }, { -0.0015, 1.70, 0.1215 }, { -0.0015, 2.00, 0.1215 }, { -0.0015, 2.30, 0.1215 }, { -0.0015, 2.60, 0.1215 }, { -0.0015, 2.80, 0.1220 }, /* 100 */ { -0.0020, 3.10, 0.1225 }, { -0.0020, 3.30, 0.1230 }, { -0.0020, 3.60, 0.1235 }, { -0.0020, 3.90, 0.1240 }, { -0.0025, 4.10, 0.1245 }, { -0.0025, 4.40, 0.1250 }, { -0.0025, 4.60, 0.1260 }, { -0.0025, 4.90, 0.1265 }, { -0.0030, 5.10, 0.1275 }, { -0.0030, 5.30, 0.1285 }, /* 110 */ { -0.0035, 5.60, 0.1290 }, { -0.0035, 5.80, 0.1300 }, { -0.0035, 6.00, 0.1310 }, { -0.0040, 6.20, 0.1325 }, { -0.0040, 6.40, 0.1335 }, { -0.0045, 6.60, 0.1345 }, { -0.0045, 6.70, 0.1355 }, { -0.0050, 6.90, 0.1365 }, { -0.0050, 7.10, 0.1375 }, { -0.0055, 7.30, 0.1390 }, /* 120 */ { -0.0055, 7.40, 0.1400 }, { -0.0060, 7.50, 0.1415 }, { -0.0065, 8.00, 0.1425 }, { -0.0065, 7.80, 0.1440 }, { -0.0060, 7.80, 0.1455 }, { -0.0060, 7.60, 0.1470 }, { -0.0055, 7.50, 0.1485 }, { -0.0055, 7.40, 0.1500 }, { -0.0050, 7.30, 0.1515 }, { -0.0050, 7.20, 0.1530 }, /* 130 */ { -0.0050, 7.00, 0.1545 }, { -0.0045, 6.90, 0.1560 }, { -0.0045, 6.80, 0.1575 }, { -0.0040, 6.70, 0.1590 }, { -0.0040, 6.50, 0.1605 }, { -0.0040, 6.40, 0.1625 }, { -0.0035, 6.30, 0.1640 }, { -0.0035, 6.10, 0.1655 }, { -0.0030, 6.10, 0.1670 }, { -0.0030, 5.90, 0.1690 }, /* 140 */ { -0.0030, 5.70, 0.1705 }, { -0.0025, 5.70, 0.1720 }, { -0.0025, 5.50, 0.1740 }, { -0.0025, 5.40, 0.1755 }, { -0.0025, 5.20, 0.1775 }, { -0.0020, 5.10, 0.1790 }, { -0.0020, 5.00, 0.1810 }, { -0.0020, 4.80, 0.1825 }, { -0.0015, 4.70, 0.1840 }, { -0.0015, 4.60, 0.1860 }, /* 150 */ { -0.0015, 4.40, 0.1880 }, { -0.0015, 4.20, 0.1900 }, { -0.0015, 4.10, 0.1915 }, { -0.0010, 4.00, 0.1935 }, { -0.0010, 3.80, 0.1955 }, { -0.0010, 3.70, 0.1970 }, { -0.0010, 3.50, 0.1990 }, { -0.0005, 3.40, 0.2010 }, { -0.0010, 3.20, 0.2025 }, { -0.0005, 3.10, 0.2045 }, /* 160 */ { -0.0005, 2.90, 0.2065 }, { -0.0005, 2.80, 0.2085 }, { -0.0005, 2.60, 0.2105 }, { -0.0005, 2.50, 0.2120 }, { -0.0005, 2.30, 0.2140 }, { -0.0005, 2.20, 0.2160 }, { -0.0005, 2.00, 0.2180 }, { 0.0000, 1.90, 0.2200 }, { 0.0000, 1.70, 0.2220 }, { 0.0000, 1.60, 0.2235 }, /* 170 */ { 0.0000, 1.40, 0.2255 }, { 0.0000, 1.30, 0.2275 }, { 0.0000, 1.10, 0.2295 }, { 0.0000, 0.90, 0.2315 }, { 0.0000, 0.80, 0.2335 }, { 0.0000, 0.60, 0.2355 }, { 0.0000, 0.50, 0.2375 }, { 0.0000, 0.30, 0.2395 }, { 0.0000, 0.10, 0.2415 }, { 0.0000, 0.00, 0.2430 }, /* 180 */ { 0.0000, -0.10, 0.2450 }, { 0.0000, -0.30, 0.2470 }, { 0.0000, -0.40, 0.2490 }, { 0.0000, -0.60, 0.2510 }, { 0.0000, -0.80, 0.2530 }, { 0.0000, -0.90, 0.2550 }, { 0.0000, -1.10, 0.2570 }, { 0.0000, -1.20, 0.2590 }, { 0.0000, -1.40, 0.2610 }, { 0.0000, -1.50, 0.2625 }, /* 190 */ { 0.0000, -1.70, 0.2645 }, { 0.0000, -1.80, 0.2665 }, { -0.0005, -2.00, 0.2685 }, { -0.0005, -2.10, 0.2705 }, { -0.0005, -2.30, 0.2725 }, { -0.0005, -2.40, 0.2740 }, { -0.0005, -2.60, 0.2760 }, { -0.0005, -2.80, 0.2780 }, { -0.0005, -2.90, 0.2800 }, { -0.0005, -3.00, 0.2820 }, /* 200 */ { -0.0010, -3.20, 0.2835 }, { -0.0005, -3.30, 0.2855 }, { -0.0010, -3.50, 0.2875 }, { -0.0010, -3.70, 0.2895 }, { -0.0010, -3.80, 0.2910 }, { -0.0010, -3.90, 0.2930 }, { -0.0010, -4.00, 0.2950 }, { -0.0015, -4.20, 0.2965 }, { -0.0015, -4.40, 0.2985 }, { -0.0015, -4.50, 0.3000 }, /* 210 */ { -0.0015, -4.60, 0.3020 }, { -0.0020, -4.80, 0.3040 }, { -0.0020, -5.00, 0.3055 }, { -0.0020, -5.00, 0.3075 }, { -0.0025, -5.20, 0.3090 }, { -0.0025, -5.30, 0.3110 }, { -0.0025, -5.50, 0.3125 }, { -0.0025, -5.60, 0.3140 }, { -0.0030, -5.70, 0.3160 }, { -0.0030, -5.90, 0.3175 }, /* 220 */ { -0.0030, -6.00, 0.3190 }, { -0.0035, -6.10, 0.3210 }, { -0.0035, -6.30, 0.3225 }, { -0.0040, -6.40, 0.3240 }, { -0.0040, -6.50, 0.3255 }, { -0.0040, -6.60, 0.3270 }, { -0.0045, -6.80, 0.3290 }, { -0.0045, -6.90, 0.3305 }, { -0.0050, -7.00, 0.3320 }, { -0.0050, -7.20, 0.3335 }, /* 230 */ { -0.0050, -7.20, 0.3350 }, { -0.0055, -7.40, 0.3365 }, { -0.0055, -7.50, 0.3380 }, { -0.0060, -7.60, 0.3390 }, { -0.0060, -7.70, 0.3405 }, { -0.0065, -7.80, 0.3420 }, { -0.0060, -7.60, 0.3425 }, { -0.0060, -7.50, 0.3440 }, { -0.0055, -7.40, 0.3455 }, { -0.0055, -7.20, 0.3470 }, /* 240 */ { -0.0050, -7.10, 0.3480 }, { -0.0050, -6.90, 0.3490 }, { -0.0045, -6.80, 0.3500 }, { -0.0045, -6.50, 0.3510 }, { -0.0040, -6.40, 0.3520 }, { -0.0040, -6.10, 0.3535 }, { -0.0035, -6.00, 0.3545 }, { -0.0035, -5.80, 0.3550 }, { -0.0030, -5.50, 0.3560 }, { -0.0030, -5.30, 0.3570 }, /* 250 */ { -0.0030, -5.10, 0.3580 }, { -0.0030, -4.90, 0.3585 }, { -0.0025, -4.70, 0.3595 }, { -0.0025, -4.40, 0.3600 }, { -0.0020, -4.10, 0.3610 }, { -0.0020, -3.90, 0.3615 }, { -0.0020, -3.70, 0.3620 }, { -0.0020, -3.30, 0.3625 }, { -0.0020, -3.10, 0.3630 }, { -0.0015, -2.80, 0.3635 }, /* 260 */ { -0.0015, -2.60, 0.3640 }, { -0.0015, -2.40, 0.3645 }, { -0.0015, -2.00, 0.3645 }, { -0.0015, -1.80, 0.3650 }, { -0.0015, -1.40, 0.3650 }, { -0.0015, -1.20, 0.3655 }, { -0.0010, -0.90, 0.3655 }, { -0.0010, -0.60, 0.3655 }, { -0.0010, -0.30, 0.3655 }, { -0.0010, 0.00, 0.3655 }, /* 270 */ { -0.0010, 0.30, 0.3655 }, { -0.0010, 0.60, 0.3655 }, { -0.0010, 0.90, 0.3655 }, { -0.0015, 1.10, 0.3655 }, { -0.0015, 1.40, 0.3655 }, { -0.0015, 1.70, 0.3655 }, { -0.0015, 1.90, 0.3660 }, { -0.0015, 2.20, 0.3660 }, { -0.0015, 2.50, 0.3665 }, { -0.0015, 2.80, 0.3670 }, /* 280 */ { -0.0015, 3.10, 0.3675 }, { -0.0020, 3.40, 0.3680 }, { -0.0020, 3.70, 0.3685 }, { -0.0020, 3.90, 0.3690 }, { -0.0025, 4.10, 0.3695 }, { -0.0025, 4.40, 0.3700 }, { -0.0025, 4.60, 0.3710 }, { -0.0025, 4.80, 0.3715 }, { -0.0025, 5.00, 0.3730 }, { -0.0030, 5.40, 0.3735 }, /* 290 */ { -0.0035, 5.60, 0.3745 }, { -0.0035, 5.80, 0.3755 }, { -0.0035, 6.00, 0.3765 }, { -0.0040, 6.20, 0.3775 }, { -0.0045, 6.50, 0.3785 }, { -0.0045, 6.60, 0.3795 }, { -0.0045, 6.80, 0.3805 }, { -0.0050, 7.00, 0.3815 }, { -0.0050, 7.10, 0.3825 }, { -0.0055, 7.20, 0.3840 }, /* 300 */ { -0.0055, 7.40, 0.3850 }, { -0.0060, 7.50, 0.3865 }, { -0.0060, 7.70, 0.3875 }, { -0.0065, 7.80, 0.3890 }, { -0.0060, 7.80, 0.3900 }, { -0.0060, 7.60, 0.3915 }, { -0.0055, 7.60, 0.3930 }, { -0.0055, 7.40, 0.3945 }, { -0.0050, 7.30, 0.3960 }, { -0.0050, 7.20, 0.3975 }, /* 310 */ { -0.0050, 7.00, 0.3990 }, { -0.0045, 6.90, 0.4005 }, { -0.0045, 6.80, 0.4020 }, { -0.0040, 6.70, 0.4035 }, { -0.0040, 6.60, 0.4050 }, { -0.0040, 6.40, 0.4065 }, { -0.0035, 6.30, 0.4085 }, { -0.0035, 6.20, 0.4100 }, { -0.0030, 6.10, 0.4115 }, { -0.0030, 5.90, 0.4130 }, /* 320 */ { -0.0030, 5.80, 0.4150 }, { -0.0025, 5.70, 0.4165 }, { -0.0025, 5.50, 0.4180 }, { -0.0025, 5.40, 0.4200 }, { -0.0025, 5.20, 0.4215 }, { -0.0020, 5.10, 0.4235 }, { -0.0020, 5.00, 0.4250 }, { -0.0020, 4.80, 0.4270 }, { -0.0015, 4.70, 0.4285 }, { -0.0015, 4.60, 0.4305 }, /* 330 */ { -0.0015, 4.40, 0.4325 }, { -0.0015, 4.20, 0.4340 }, { -0.0015, 4.10, 0.4360 }, { -0.0010, 4.00, 0.4375 }, { -0.0010, 3.80, 0.4395 }, { -0.0010, 3.70, 0.4415 }, { -0.0010, 3.50, 0.4435 }, { -0.0005, 3.40, 0.4450 }, { -0.0010, 3.20, 0.4470 }, { -0.0005, 3.10, 0.4490 }, /* 340 */ { -0.0005, 2.90, 0.4510 }, { -0.0005, 2.80, 0.4525 }, { -0.0005, 2.60, 0.4545 }, { -0.0005, 2.40, 0.4565 }, { -0.0005, 2.30, 0.4585 }, { -0.0005, 2.20, 0.4605 }, { -0.0005, 2.00, 0.4620 }, { 0.0000, 1.90, 0.4640 }, { 0.0000, 1.70, 0.4660 }, { 0.0000, 1.60, 0.4680 }, /* 350 */ { 0.0000, 1.40, 0.4700 }, { 0.0000, 1.20, 0.4720 }, { 0.0000, 1.10, 0.4740 }, { 0.0000, 0.90, 0.4760 }, { 0.0000, 0.80, 0.4780 }, { 0.0000, 0.60, 0.4795 }, { 0.0000, 0.50, 0.4815 }, { 0.0000, 0.30, 0.4835 }, { 0.0000, 0.20, 0.4855 }, /* 359 */ }; /* Turn the crank by 1 degree, which moves the legs and displaces the robot. */ static void tick_walker (ModeInfo *mi, walker *f) { robot_configuration *bp = &bps[MI_SCREEN(mi)]; int deg; GLfloat th, fwd; if (bp->button_down_p) return; f->crank_rot++; deg = ((int) (f->crank_rot + 0.5)) % 360; # ifdef DEBUG if (debug_p) { f->crank_rot = bp->debug_x; f->pitch = wobble_profile[deg].rot; f->z = wobble_profile[deg].up; } else # endif /* DEBUG */ if (deg == 0) { fwd = wobble_profile[deg].fwd; f->pitch = wobble_profile[deg].rot; f->z = wobble_profile[deg].up; } else { fwd = (wobble_profile[deg].fwd - wobble_profile[deg-1].fwd); f->pitch += (wobble_profile[deg].rot - wobble_profile[deg-1].rot); f->z += (wobble_profile[deg].up - wobble_profile[deg-1].up); } /* Lean slightly toward the foot that is raised off the ground. */ f->roll = -2.5 * sin ((deg - 90) * M_PI / 180); if (!(random() % 10)) { GLfloat b = f->balance / 10.0; int s = (f->balance > 0 ? 1 : -1); if (s < 0) b = -b; f->facing += s * frand (b); } # ifdef DEBUG if (debug_p) fwd = 0; # endif { GLfloat ox = f->x; GLfloat oy = f->y; th = f->facing * M_PI / 180.0; f->x += fwd * cos (th); f->y += fwd * sin (th); /* If moving this robot would collide with another, undo the move, recoil, and randomly turn. */ if (collision_p (mi, f, 0)) { fwd *= -1.5; f->x = ox + fwd * cos (th); f->y = oy + fwd * sin (th); f->facing += frand(10) - 5; if (! random() % 30) f->facing += frand(90) - 45; } } if (!do_fade || opacity > 0.5) /* Don't bother fading if it's already transparent. */ { GLfloat tick = 0.002; GLfloat linger = 3; /* If we're not fading, maybe start fading out. */ if (f->fading_p == 0 && ! (random() % 40000)) f->fading_p = -1; # ifdef DEBUG if (debug_p) f->fading_p = 0; # endif if (f->fading_p < 0) { f->body_transparency -= tick; if (f->body_transparency <= -linger) { f->body_transparency = -linger; f->fading_p = 1; } } else if (f->fading_p > 0) { f->body_transparency += tick; if (f->body_transparency >= opacity) { f->body_transparency = opacity; f->fading_p = 0; } } } } static void init_walker (ModeInfo *mi, walker *f) { int i, start_tick = random() % 360; f->crank_rot = 0; f->pitch = wobble_profile[0].rot; f->z = wobble_profile[0].up; f->body_transparency = opacity; f->hand_rot[0] = frand(180); f->hand_pos[0] = 0.6 + frand(0.4); f->hand_rot[1] = 180 - f->hand_rot[0]; f->hand_pos[1] = f->hand_pos[0]; if (! (random() % 30)) f->hand_rot[1] += frand(10); if (! (random() % 30)) f->hand_pos[1] = 0.6 + frand(0.4); f->facing = frand(360); f->balance = frand(10) - 5; if (MI_COUNT(mi) == 1) f->speed = 1.0; else f->speed = 0.6 + frand(0.8); # ifdef DEBUG if (debug_p) { start_tick = 0; f->facing = 0; f->balance = 0; } # endif for (i = 0; i < start_tick; i++) tick_walker (mi, f); /* Place them randomly, but non-overlapping. */ for (i = 0; i < 1000; i++) { GLfloat range = 10; if (MI_COUNT(mi) > 10) range += MI_COUNT(mi) / 10.0; f->x = frand(range) - range/2; f->y = frand(range) - range/2; if (! collision_p (mi, f, 1.5)) break; } # ifdef DEBUG if (debug_p) f->x = f->y = 0; # endif } /* Draw a robot standing in the right place, 1 unit tall. */ static int draw_walker (ModeInfo *mi, walker *f, const char *tag) { robot_configuration *bp = &bps[MI_SCREEN(mi)]; int wire = MI_IS_WIREFRAME(mi); int count = 0; glPushMatrix(); glTranslatef (f->y, f->z, f->x); { GLfloat n = 0.01; glScalef (n, n, n); } glRotatef (90, 0, 1, 0); glRotatef (f->facing, 0, 1, 0); glRotatef (f->pitch, 0, 0, 1); glRotatef (f->roll, 1, 0, 0); { GLfloat n = 0.00484; /* make it 1 unit tall */ glScalef (n, n, n); } count += draw_gearbox (mi); count += draw_crank (mi, f, f->crank_rot); count += draw_rotator (mi, f, f->crank_rot); count += draw_leg (mi, f->crank_rot, False); count += draw_leg (mi, f->crank_rot, True); count += draw_wireframe (mi, f); /* Draw these last, and outer shell first, to make transparency work. The order in which things hit the depth buffer matters. */ if (f->body_transparency >= 0.001) { count += draw_arm (mi, f, True, f->hand_rot[0], f->hand_pos[0]); count += draw_arm (mi, f, False, f->hand_rot[1], f->hand_pos[1]); count += draw_body (mi, f, False); count += draw_body (mi, f, True); count += draw_dome (mi, f); } if (tag) /* For debugging depth sorting: label each robot */ { GLfloat m[4][4]; if (! wire) glDisable (GL_DEPTH_TEST); glColor3f (1, 1, 1); glPushMatrix(); /* Billboard rotation */ glGetFloatv (GL_MODELVIEW_MATRIX, &m[0][0]); m[0][0] = 1; m[1][0] = 0; m[2][0] = 0; m[0][1] = 0; m[1][1] = 1; m[2][1] = 0; m[0][2] = 0; m[1][2] = 0; m[2][2] = 1; glLoadIdentity(); glMultMatrixf (&m[0][0]); glScalef (0.04, 0.04, 0.04); print_texture_string (bp->font_data, tag); glPopMatrix(); if (! wire) glEnable (GL_DEPTH_TEST); } glPopMatrix(); return count; } static int draw_ground (ModeInfo *mi, GLfloat color[4]) { int wire = MI_IS_WIREFRAME(mi); GLfloat i; GLfloat cell_size = 0.9; int cells = 1000 * size; int points = 0; # ifdef DEBUG if (debug_p) return 0; # endif glPushMatrix(); glRotatef (frand(90), 0, 0, 1); if (!wire) { GLfloat fog_color[4] = { 0, 0, 0, 1 }; glLineWidth (2); glEnable (GL_LINE_SMOOTH); glHint (GL_LINE_SMOOTH_HINT, GL_NICEST); glBlendFunc (GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); glEnable (GL_BLEND); glFogi (GL_FOG_MODE, GL_EXP2); glFogfv (GL_FOG_COLOR, fog_color); glFogf (GL_FOG_DENSITY, 0.017); glFogf (GL_FOG_START, -cells/2 * cell_size); # ifndef USE_IPHONE /* #### Not working on iOS for some reason */ glEnable (GL_FOG); # endif } glColor4fv (color); glMaterialfv (GL_FRONT_AND_BACK, GL_AMBIENT_AND_DIFFUSE, color); glBegin (GL_LINES); for (i = -cells/2; i < cells/2; i++) { GLfloat a = i * cell_size; GLfloat b = cells/2 * cell_size; glVertex3f (a, -b, 0); glVertex3f (a, b, 0); points++; glVertex3f (-b, a, 0); glVertex3f (b, a, 0); points++; } glEnd(); if (!wire) { glDisable (GL_LINE_SMOOTH); glDisable (GL_BLEND); glDisable (GL_FOG); } glPopMatrix(); return points; } /* If the target robot (robot #0) has moved too far from the point at which the camera is aimed, then initiate an animation to move the observer to the new spot. Because of the jerky forward motion of the robots, just always focusing on the center of the robot looks terrible, so instead we let them walk a little out of the center of the frame, and then catch up. */ static void look_at_center (ModeInfo *mi) { robot_configuration *bp = &bps[MI_SCREEN(mi)]; GLfloat target_x = bp->walkers[0].x; GLfloat target_y = bp->walkers[0].y; GLfloat target_z = 0.8; /* Look a little bit above his head */ GLfloat max_dist = 2.5 / size; # ifdef DEBUG if (debug_p) return; # endif if (max_dist < 1) max_dist = 1; if (max_dist > 10) max_dist = 10; if (bp->camera_tracking_p) { GLfloat r = (1 - cos (bp->tracking_ratio * M_PI)) / 2; bp->looking_x = bp->olooking_x + r * (target_x - bp->olooking_x); bp->looking_y = bp->olooking_y + r * (target_y - bp->olooking_y); bp->looking_z = bp->olooking_z + r * (target_z - bp->olooking_z); bp->tracking_ratio += 0.02; if (bp->tracking_ratio >= 1) { bp->camera_tracking_p = False; bp->olooking_x = bp->looking_x; bp->olooking_y = bp->looking_y; bp->olooking_z = bp->looking_z; } } if (! bp->camera_tracking_p) { GLfloat dist = sqrt ((target_x - bp->looking_x) * (target_x - bp->looking_x) + (target_y - bp->looking_y) * (target_y - bp->looking_y) + (target_z - bp->looking_z) * (target_z - bp->looking_z)); if (dist > max_dist) { bp->camera_tracking_p = True; bp->tracking_ratio = 0; bp->olooking_x = bp->looking_x; bp->olooking_y = bp->looking_y; bp->olooking_z = bp->looking_z; } } glTranslatef (-bp->looking_y, -bp->looking_z, -bp->looking_x); # if 0 /* DEBUG */ { GLfloat th; glPushMatrix(); glColor3f(1, 0, 0); glTranslatef (target_y, target_z, target_x); glBegin(GL_LINES); glVertex3f(0, -target_z, 0); glVertex3f(0, 1, 0); glVertex3f(-0.1, 0, -0.1); glVertex3f( 0.1, 0, 0.1); glVertex3f(-0.1, 0, 0.1); glVertex3f( 0.1, 0, -0.1); glEnd(); glPopMatrix(); glPushMatrix(); glColor3f(0, 1, 0); glTranslatef (bp->looking_y, bp->looking_z, bp->looking_x); glRotatef (30, 0, 1, 0); glBegin(GL_LINES); glVertex3f(0, -bp->looking_z, 0); glVertex3f(0, 1, 0); glVertex3f(-0.1, 0, -0.1); glVertex3f( 0.1, 0, 0.1); glVertex3f(-0.1, 0, 0.1); glVertex3f( 0.1, 0, -0.1); glEnd(); glPopMatrix(); glPushMatrix(); glColor3f(0, 0, 1); glTranslatef (bp->olooking_y, bp->olooking_z, bp->olooking_x); glRotatef (60, 0, 1, 0); glBegin(GL_LINES); glVertex3f(0, -bp->olooking_z, 0); glVertex3f(0, 1, 0); glVertex3f(-0.1, 0, -0.1); glVertex3f( 0.1, 0, 0.1); glVertex3f(-0.1, 0, 0.1); glVertex3f( 0.1, 0, -0.1); glEnd(); glTranslatef (0, -bp->olooking_z, 0); glBegin (GL_LINE_LOOP); for (th = 0; th < M_PI * 2; th += 0.1) glVertex3f (bp->olooking_y + max_dist * cos(th), 0, bp->olooking_x + max_dist * sin(th)); glEnd(); glPopMatrix(); } # endif /* DEBUG */ } #ifdef WORDBUBBLES /* Draw a cartoony word bubble. W and H are the inside size, for text. Origin is at bottom left. The bubble frame and arrow are outside that. */ static void draw_bubble_box (ModeInfo *mi, GLfloat width, GLfloat height, GLfloat corner_radius, GLfloat arrow_h, GLfloat arrow_x, GLfloat fg[4], GLfloat bg[4]) { # define CORNER_POINTS 16 GLfloat outline_points[ (CORNER_POINTS + 2) * 4 + 8 ][3]; int i = 0; GLfloat th; GLfloat tick = M_PI / 2 / CORNER_POINTS; GLfloat arrow_w = arrow_h / 2; GLfloat arrow_x2 = MAX(0, MIN(width - arrow_w, arrow_x)); GLfloat w2 = MAX(arrow_w, width - corner_radius * 1.10); GLfloat h2 = MAX(0, height - corner_radius * 1.28); GLfloat x2 = (width - w2) / 2; GLfloat y2 = (height - h2) / 2; /* A B C D */ GLfloat xa = x2 -corner_radius; /* E _------------_ */ GLfloat xb = x2; /* D /__| |__\ */ GLfloat xc = xb + w2; /* | | | | */ GLfloat xd = xc + corner_radius; /* C |__| EF |__| */ GLfloat xe = xb + arrow_x2; /* B \_|_________|_/ */ GLfloat xf = xe + arrow_w; /* A \| */ GLfloat ya = y2 - (corner_radius + arrow_h); GLfloat yb = y2 - corner_radius; GLfloat yc = y2; GLfloat yd = yc + h2; GLfloat ye = yd + corner_radius; GLfloat z = 0; /* Let the lines take precedence over the fills. */ glEnable (GL_POLYGON_OFFSET_FILL); glPolygonOffset (1.0, 1.0); glColor4fv (bg); glFrontFace(GL_CW); /* top left corner */ glBegin (GL_TRIANGLE_FAN); glVertex3f (xb, yd, 0); for (th = 0; th < M_PI/2 + tick; th += tick) { GLfloat x = xb - corner_radius * cos(th); GLfloat y = yd + corner_radius * sin(th); glVertex3f (x, y, z); outline_points[i][0] = x; outline_points[i][1] = y; outline_points[i][2] = z; i++; } glEnd(); /* top edge */ outline_points[i][0] = xc; outline_points[i][1] = ye; outline_points[i][2] = z; i++; /* top right corner */ glBegin (GL_TRIANGLE_FAN); glVertex3f (xc, yd, 0); for (th = M_PI/2; th > -tick; th -= tick) { GLfloat x = xc + corner_radius * cos(th); GLfloat y = yd + corner_radius * sin(th); glVertex3f (x, y, z); outline_points[i][0] = x; outline_points[i][1] = y; outline_points[i][2] = z; i++; } glEnd(); /* right edge */ outline_points[i][0] = xd; outline_points[i][1] = yc; outline_points[i][2] = z; i++; /* bottom right corner */ glBegin (GL_TRIANGLE_FAN); glVertex3f (xc, yc, 0); for (th = 0; th < M_PI/2 + tick; th += tick) { GLfloat x = xc + corner_radius * cos(th); GLfloat y = yc - corner_radius * sin(th); glVertex3f (x, y, z); outline_points[i][0] = x; outline_points[i][1] = y; outline_points[i][2] = z; i++; } glEnd(); /* bottom right edge */ outline_points[i][0] = xf; outline_points[i][1] = yb; outline_points[i][2] = z; i++; /* arrow triangle */ glFrontFace(GL_CW); glBegin (GL_TRIANGLES); /* bottom arrow point */ outline_points[i][0] = xf; outline_points[i][1] = yb; outline_points[i][2] = z; glVertex3f (outline_points[i][0], outline_points[i][1], outline_points[i][2]); i++; /* bottom right edge */ outline_points[i][0] = xf; outline_points[i][1] = ya; outline_points[i][2] = z; glVertex3f (outline_points[i][0], outline_points[i][1], outline_points[i][2]); i++; outline_points[i][0] = xe; outline_points[i][1] = yb; outline_points[i][2] = z; glVertex3f (outline_points[i][0], outline_points[i][1], outline_points[i][2]); i++; glEnd(); /* bottom left corner */ glBegin (GL_TRIANGLE_FAN); glVertex3f (xb, yc, 0); for (th = M_PI/2; th > -tick; th -= tick) { GLfloat x = xb - corner_radius * cos(th); GLfloat y = yc - corner_radius * sin(th); glVertex3f (x, y, z); outline_points[i][0] = x; outline_points[i][1] = y; outline_points[i][2] = z; i++; } glEnd(); glFrontFace(GL_CCW); /* left edge */ outline_points[i][0] = xa; outline_points[i][1] = yd; outline_points[i][2] = z; i++; glFrontFace(GL_CW); glBegin (GL_QUADS); /* left box */ glVertex3f (xa, yd, z); glVertex3f (xb, yd, z); glVertex3f (xb, yc, z); glVertex3f (xa, yc, z); /* center box */ glVertex3f (xb, ye, z); glVertex3f (xc, ye, z); glVertex3f (xc, yb, z); glVertex3f (xb, yb, z); /* right box */ glVertex3f (xc, yd, z); glVertex3f (xd, yd, z); glVertex3f (xd, yc, z); glVertex3f (xc, yc, z); glEnd(); glLineWidth (2.8); glColor4fv (fg); glBegin (GL_LINE_LOOP); while (i > 0) glVertex3fv (outline_points[--i]); glEnd(); glDisable (GL_POLYGON_OFFSET_FILL); } static void draw_label (ModeInfo *mi, walker *f, GLfloat y_off, GLfloat scale, const char *label) { robot_configuration *bp = &bps[MI_SCREEN(mi)]; int wire = MI_IS_WIREFRAME(mi); GLfloat m[4][4]; if (scale == 0) return; if (!wire) glDisable (GL_LIGHTING); /* don't light fonts */ glPushMatrix(); /* First, we translate the origin to the center of the robot. Then we retrieve the prevailing modelview matrix, which includes any rotation, wandering, and user-trackball-rolling of the scene. We set the top 3x3 cells of that matrix to be the identity matrix. This removes all rotation from the matrix, while leaving the translation alone. This has the effect of leaving the prevailing coordinate system perpendicular to the camera view: were we to draw a square face, it would be in the plane of the screen. Now we translate by `size' toward the viewer -- so that the origin is *just in front* of the ball. Then we draw the label text, allowing the depth buffer to do its work: that way, labels on atoms will be occluded properly when other atoms move in front of them. This technique (of neutralizing rotation relative to the observer, after both rotations and translations have been applied) is known as "billboarding". */ if (f) glTranslatef(f->y, 0, f->x); /* get matrix */ glTranslatef (0, y_off, 0); glGetFloatv (GL_MODELVIEW_MATRIX, &m[0][0]); /* load rot. identity */ m[0][0] = 1; m[1][0] = 0; m[2][0] = 0; m[0][1] = 0; m[1][1] = 1; m[2][1] = 0; m[0][2] = 0; m[1][2] = 0; m[2][2] = 1; glLoadIdentity(); /* reset modelview */ glMultMatrixf (&m[0][0]); /* replace with ours */ glTranslatef (0, 0, 0.1); /* move toward camera */ glRotatef (current_device_rotation(), 0, 0, 1); /* right side up */ { XCharStruct e; int cw, ch, w, h, ascent, descent; GLfloat s; GLfloat max = 24; /* max point size to avoid pixellated text */ /* Let the font be much larger on iPhone */ if (mi->xgwa.height <= 640 || mi->xgwa.width <= 640) max *= 3; texture_string_metrics (bp->font_data, "X", &e, &ascent, &descent); cw = e.width; ch = ascent + descent; s = 1.0 / ch; if (ch > max) s *= max/ch; s *= scale; texture_string_metrics (bp->font_data, label, &e, 0, 0); w = e.width; h = e.ascent + e.descent; glScalef (s, s, 1); glTranslatef (-w/2, h*2/3 + (cw * 7), 0); glPushMatrix(); glTranslatef (0, -h + (ch * 1.2), -0.1); draw_bubble_box (mi, w, h, ch * 2, /* corner radius */ ch * 2.5, /* arrow height */ w / 2 - cw * 8, /* arrow x */ bp->text_bd, bp->text_bg); glPopMatrix(); glColor4fv (bp->text_color); glTranslatef (0, ch/2, 0); print_texture_string (bp->font_data, label); } glPopMatrix(); /* More efficient to always call glEnable() with correct values than to call glPushAttrib()/glPopAttrib(), since reading attributes from GL does a round-trip and stalls the pipeline. */ if (!wire) glEnable (GL_LIGHTING); } static void fill_words (ModeInfo *mi) { robot_configuration *bp = &bps[MI_SCREEN(mi)]; char *p = bp->words + strlen(bp->words); char *c; int lines = 0; int max = bp->max_lines; /* Fewer lines on iPhone */ if ((mi->xgwa.height <= 640 || mi->xgwa.width <= 640) && max > 4) max = 4; for (c = bp->words; c < p; c++) if (*c == '\n') lines++; while (p < bp->words + sizeof(bp->words) - 1 && lines < max) { int c = textclient_getc (bp->tc); if (c == '\n') lines++; if (c > 0) *p++ = (char) c; else break; } *p = 0; bp->lines = lines; } static void bubble (ModeInfo *mi) { robot_configuration *bp = &bps[MI_SCREEN(mi)]; int duration = 200; GLfloat fade = 0.015; int chance = (talk_chance <= 0.0 ? 0 : talk_chance >= 0.99 ? 1 : (1-talk_chance) * 1000); GLfloat scale; char *s0 = strdup (bp->words); char *s = s0; int L; while (*s == '\n') s++; L = strlen(s); while (L > 0 && (s[L-1] == '\n' || s[L-1] == ' ' || s[L-1] == '\t')) s[--L] = 0; if (! *s) goto DONE; # ifdef DEBUG if (debug_p) goto DONE; # endif if (chance <= 0) goto DONE; if (bp->bubble_tick > 0) { bp->bubble_tick--; if (! bp->bubble_tick) *bp->words = 0; } if (! bp->bubble_tick) { if (!(random() % chance)) bp->bubble_tick = duration; else goto DONE; } scale = (bp->bubble_tick < duration * fade ? bp->bubble_tick / (duration * fade) : (bp->bubble_tick > duration * (1 - fade) ? 1 - ((bp->bubble_tick - duration * (1 - fade)) / (duration * fade)) : 1)); draw_label (mi, &bp->walkers[0], 1.5, scale, s); DONE: free (s0); } #endif /* WORDBUBBLES */ typedef struct { int i; GLdouble d; } depth_sorter; static int cmp_depth_sorter (const void *aa, const void *bb) { const depth_sorter *a = (depth_sorter *) aa; const depth_sorter *b = (depth_sorter *) bb; return (a->d == b->d ? 0 : a->d < b->d ? -1 : 1); } ENTRYPOINT void draw_robot (ModeInfo *mi) { robot_configuration *bp = &bps[MI_SCREEN(mi)]; Display *dpy = MI_DISPLAY(mi); Window window = MI_WINDOW(mi); GLfloat robot_size; depth_sorter *sorted; int i; if (!bp->glx_context) return; glXMakeCurrent(MI_DISPLAY(mi), MI_WINDOW(mi), *(bp->glx_context)); glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glPushMatrix (); # ifdef HAVE_MOBILE { int rot = current_device_rotation(); if (rot == 180 || rot == -180) /* so much WTF */ glRotatef (-68, 1, 0, 0); else if (rot == 90 || rot == -270) glRotatef (68, 0, 1, 0); else if (rot == -90 || rot == 270) glRotatef (-68, 0, 1, 0); glRotatef (rot, 0, 0, 1); /* right side up */ } # endif gltrackball_rotate (bp->user_trackball); robot_size = size * 7; glScalef (robot_size, robot_size, robot_size); look_at_center (mi); glPushMatrix(); glScalef (1/robot_size, 1/robot_size, 1/robot_size); glCallList (bp->dlists[GROUND]); glPopMatrix(); # ifdef WORDBUBBLES fill_words (mi); bubble (mi); # endif #ifdef DEBUG if (debug_p) { glTranslatef (0, -1.2, 0); glScalef (3, 3, 3); glRotatef (-43.5, 0, 0, 1); glRotatef (-90, 0, 1, 0); /* glTranslatef (bp->debug_z, bp->debug_y, 0); */ glPushMatrix(); if (!MI_IS_WIREFRAME(mi)) glDisable(GL_LIGHTING); if (!MI_IS_WIREFRAME(mi) && do_texture) glDisable(GL_TEXTURE_2D); glBegin(GL_LINES); glVertex3f(-10, 0, 0); glVertex3f(10, 0, 0); glVertex3f(0, -10, 0); glVertex3f(0, 10, 0); glVertex3f(0, 0, -10); glVertex3f(0, 0, 10); glEnd(); glTranslatef (-0.5, 0, -0.5); glColor3f (1, 0, 0); glBegin (GL_LINE_LOOP); glVertex3f (0, 0, 0); glVertex3f (0, 0, 1); glVertex3f (0, 1, 1); glVertex3f (0, 1, 0); glEnd(); glBegin (GL_LINE_LOOP); glVertex3f (1, 0, 0); glVertex3f (1, 0, 1); glVertex3f (1, 1, 1); glVertex3f (1, 1, 0); glEnd(); # if 1 glColor3f (0.5, 0.5, 0.5); glFrontFace (GL_CCW); glBegin (GL_QUADS); /* glVertex3f (0, 1, 0); glVertex3f (0, 1, 1); */ /* glVertex3f (1, 1, 1); glVertex3f (1, 1, 0); */ glVertex3f (0, 0, 0); glVertex3f (0, 0, 1); glVertex3f (1, 0, 1); glVertex3f (1, 0, 0); glEnd(); glFrontFace (GL_CW); glBegin (GL_QUADS); glVertex3f (0, 1, 0); glVertex3f (0, 1, 1); glVertex3f (1, 1, 1); glVertex3f (1, 1, 0); glVertex3f (0, 0, 0); glVertex3f (0, 0, 1); glVertex3f (1, 0, 1); glVertex3f (1, 0, 0); glEnd(); # endif glColor3f (1, 0, 0); glBegin (GL_LINES); glVertex3f (0, 0, 0); glVertex3f (1, 0, 0); glVertex3f (0, 0, 1); glVertex3f (1, 0, 1); glVertex3f (0, 1, 0); glVertex3f (1, 1, 0); glVertex3f (0, 1, 1); glVertex3f (1, 1, 1); glVertex3f (0, 0, 0); glVertex3f (1, 0, 1); glVertex3f (0, 0, 1); glVertex3f (1, 0, 0); glVertex3f (0, 1, 0); glVertex3f (1, 1, 1); glVertex3f (0, 1, 1); glVertex3f (1, 1, 0); glEnd(); if (!MI_IS_WIREFRAME(mi)) glEnable(GL_LIGHTING); if (!MI_IS_WIREFRAME(mi) && do_texture) glEnable(GL_TEXTURE_2D); glPopMatrix(); } # endif /* DEBUG */ /* For transparency to work right, we have to draw the robots from back to front, from the perspective of the observer. So project the origin of the robot to screen coordinates, and sort that by Z. */ sorted = (depth_sorter *) calloc (bp->nwalkers, sizeof (*sorted)); { GLdouble m[16], p[16]; GLint v[4]; glGetDoublev (GL_MODELVIEW_MATRIX, m); glGetDoublev (GL_PROJECTION_MATRIX, p); glGetIntegerv (GL_VIEWPORT, v); for (i = 0; i < bp->nwalkers; i++) { GLdouble x, y, z; walker *f = &bp->walkers[i]; gluProject (f->y, f->z, f->x, m, p, v, &x, &y, &z); sorted[i].i = i; sorted[i].d = -z; } qsort (sorted, i, sizeof(*sorted), cmp_depth_sorter); } mi->polygon_count = 0; for (i = 0; i < bp->nwalkers; i++) { int ii = sorted[i].i; walker *f = &bp->walkers[ii]; int ticks = 22 * speed * f->speed; int max = 180; char tag[1024]; *tag = 0; if (ticks < 1) ticks = 1; if (ticks > max) ticks = max; # ifdef DEBUG if (debug_p) sprintf (tag, "%.4f, %.4f, %.4f", bp->debug_x, bp->debug_y, bp->debug_z); else { # if 1 /* sprintf (tag + strlen(tag), " %d\n", ii); */ sprintf (tag + strlen(tag), " %d\n", bp->nwalkers - i - 1); /* sprintf (tag + strlen(tag), "%.03f\n", sorted[i].d); */ # endif } # endif /* DEBUG */ mi->polygon_count += draw_walker (mi, f, tag); for (ii = 0; ii < ticks; ii++) tick_walker (mi, f); } free (sorted); glPopMatrix (); if (mi->fps_p) do_fps (mi); glFinish(); glXSwapBuffers(dpy, window); } ENTRYPOINT void release_robot (ModeInfo *mi) { # ifdef WORDBUBBLES robot_configuration *bp = &bps[MI_SCREEN(mi)]; textclient_close (bp->tc); # endif } XSCREENSAVER_MODULE_2 ("WindupRobot", winduprobot, robot) #endif /* USE_GL */ xscreensaver-5.36/hacks/glx/robot.c000664 000767 000024 00004013044 12701612217 017321 0ustar00jwzstaff000000 000000 /* Generated from "robot.dxf" on Aug-22-2014. Smoothed vertex normals. Components: arm_half, body_half_inside, body_half_outside, crank_full, gearbox_half, hand_half, leg_half, rotator_half. */ #include "gllist.h" static const float robot_arm_half_data[] = { 0.906212,-0.041413,0.420791,1080.0746,-794.16656,2070.082615, 0.825188,-0.112749,0.553491,1071.440608,-804.05311,2084.867737, 0.920546,-0.079115,0.382538,1080.0746,-800.976533,2069.412397, 0.825188,-0.112749,0.553491,1071.440608,-804.05311,2084.867737, 0.906212,-0.041413,0.420791,1080.0746,-794.16656,2070.082615, 0.804658,-0.058153,0.590884,1071.440608,-794.16656,2085.840744, 0.804658,-0.058153,0.590884,1071.440608,-794.16656,2085.840744, 0.712409,-0.124297,0.690669,1059.821204,-806.749751,2098.414453, 0.825188,-0.112749,0.553491,1071.440608,-804.05311,2084.867737, 0.712409,-0.124297,0.690669,1059.821204,-806.749751,2098.414453, 0.804658,-0.058153,0.590884,1071.440608,-794.16656,2085.840744, 0.67288,-0.072454,0.736195,1059.821204,-794.16656,2099.652855, 0.573227,-0.159742,0.803675,1045.662989,-808.962833,2109.531981, 0.67288,-0.072454,0.736195,1059.821204,-794.16656,2099.652855, 0.516952,-0.083841,0.851898,1045.662989,-794.16656,2110.988188, 0.67288,-0.072454,0.736195,1059.821204,-794.16656,2099.652855, 0.573227,-0.159742,0.803675,1045.662989,-808.962833,2109.531981, 0.712409,-0.124297,0.690669,1059.821204,-806.749751,2098.414453, 0.404534,-0.178287,0.896976,1029.509968,-810.607297,2117.793029, 0.516952,-0.083841,0.851898,1045.662989,-794.16656,2110.988188, 0.343284,-0.091992,0.934716,1029.509968,-794.16656,2119.41108, 0.516952,-0.083841,0.851898,1045.662989,-794.16656,2110.988188, 0.404534,-0.178287,0.896976,1029.509968,-810.607297,2117.793029, 0.573227,-0.159742,0.803675,1045.662989,-808.962833,2109.531981, 0.221931,-0.19009,0.956354,1011.982852,-811.619949,2122.880135, 0.343284,-0.091992,0.934716,1029.509968,-794.16656,2119.41108, 0.158161,-0.096711,0.982666,1011.982852,-794.16656,2124.597848, 0.343284,-0.091992,0.934716,1029.509968,-794.16656,2119.41108, 0.221931,-0.19009,0.956354,1011.982852,-811.619949,2122.880135, 0.404534,-0.178287,0.896976,1029.509968,-810.607297,2117.793029, 0.095481,-0.194061,0.976332,993.755282,-811.961287,2124.594866, 0.158161,-0.096711,0.982666,1011.982852,-794.16656,2124.597848, 0.095023,-0.097501,0.990689,993.755282,-794.16656,2126.346173, 0.158161,-0.096711,0.982666,1011.982852,-794.16656,2124.597848, 0.095481,-0.194061,0.976332,993.755282,-811.961287,2124.594866, 0.221931,-0.19009,0.956354,1011.982852,-811.619949,2122.880135, 0,-0.162686,0.986678,947.039602,-835.292444,2241.800118, 0,-0.097944,0.995192,993.755282,-794.16656,2245.847611, 0,-0.097944,0.995192,947.039602,-794.16656,2245.847611, 0,-0.097944,0.995192,993.755282,-794.16656,2245.847611, 0,-0.162686,0.986678,947.039602,-835.292444,2241.800118, 0,-0.227008,0.973893,993.755282,-835.292444,2241.800118, -0.698037,-0.116492,0.706522,947.039602,-835.292444,2241.800118, -0.696496,-0.070281,0.71411,900.323922,-794.16656,2200.284205, -0.698044,-0.162549,0.697361,900.323922,-826.396761,2197.1122, -0.696496,-0.070281,0.71411,900.323922,-794.16656,2200.284205, -0.698037,-0.116492,0.706522,947.039602,-835.292444,2241.800118, -0.696496,-0.070281,0.71411,947.039602,-794.16656,2245.847611, 0.696496,-0.070281,0.71411,900.323922,-794.16656,2200.284205, 0.698037,-0.116492,0.706522,853.608242,-835.292444,2241.800118, 0.698044,-0.162549,0.697361,900.323922,-826.396761,2197.1122, 0.698037,-0.116492,0.706522,853.608242,-835.292444,2241.800118, 0.696496,-0.070281,0.71411,900.323922,-794.16656,2200.284205, 0.696496,-0.070281,0.71411,853.608242,-794.16656,2245.847611, -0.698037,-0.116492,0.706522,853.608242,-835.292444,2241.800118, -0.696496,-0.070281,0.71411,806.892562,-794.16656,2200.284205, -0.698044,-0.162549,0.697361,806.892562,-826.396761,2197.1122, -0.696496,-0.070281,0.71411,806.892562,-794.16656,2200.284205, -0.698037,-0.116492,0.706522,853.608242,-835.292444,2241.800118, -0.696496,-0.070281,0.71411,853.608242,-794.16656,2245.847611, 0.696496,-0.070281,0.71411,806.892562,-794.16656,2200.284205, 0.698037,-0.116492,0.706522,760.176882,-835.292444,2241.800118, 0.698044,-0.162549,0.697361,806.892562,-826.396761,2197.1122, 0.698037,-0.116492,0.706522,760.176882,-835.292444,2241.800118, 0.696496,-0.070281,0.71411,806.892562,-794.16656,2200.284205, 0.696496,-0.070281,0.71411,760.176882,-794.16656,2245.847611, -0.698037,-0.116492,0.706522,760.176882,-835.292444,2241.800118, -0.696496,-0.070281,0.71411,713.461202,-794.16656,2200.284205, -0.698044,-0.162549,0.697361,713.461202,-826.396761,2197.1122, -0.696496,-0.070281,0.71411,713.461202,-794.16656,2200.284205, -0.698037,-0.116492,0.706522,760.176882,-835.292444,2241.800118, -0.696496,-0.070281,0.71411,760.176882,-794.16656,2245.847611, 0.696496,-0.070281,0.71411,713.461202,-794.16656,2200.284205, 0.698037,-0.116492,0.706522,666.745522,-835.292444,2241.800118, 0.698044,-0.162549,0.697361,713.461202,-826.396761,2197.1122, 0.698037,-0.116492,0.706522,666.745522,-835.292444,2241.800118, 0.696496,-0.070281,0.71411,713.461202,-794.16656,2200.284205, 0.696496,-0.070281,0.71411,666.745522,-794.16656,2245.847611, 0,-0.162686,0.986678,635.537065,-835.292444,2241.800118, 0,-0.097944,0.995192,666.745522,-794.16656,2245.847611, 0,-0.097944,0.995192,635.537065,-794.16656,2245.847611, 0,-0.097944,0.995192,666.745522,-794.16656,2245.847611, 0,-0.162686,0.986678,635.537065,-835.292444,2241.800118, 0,-0.227008,0.973893,666.745522,-835.292444,2241.800118, 0,-0.162686,0.986678,200.646178,-826.396761,2197.1122, 0,-0.097944,0.995192,635.537065,-794.16656,2200.284205, 0,-0.097944,0.995192,200.646178,-794.16656,2200.284205, 0,-0.097944,0.995192,635.537065,-794.16656,2200.284205, 0,-0.162686,0.986678,200.646178,-826.396761,2197.1122, 0,-0.227008,0.973893,635.537065,-826.396761,2197.1122, 0,-0.162686,0.986678,97.301517,-810.693775,2118.227454, 0,-0.097944,0.995192,200.646178,-794.16656,2119.854015, 0,-0.097944,0.995192,97.301517,-794.16656,2119.854015, 0,-0.097944,0.995192,200.646178,-794.16656,2119.854015, 0,-0.162686,0.986678,97.301517,-810.693775,2118.227454, 0,-0.227008,0.973893,200.646178,-810.693775,2118.227454, 0,-0.162686,0.986678,45.307526,-820.853629,2169.265997, 0,-0.097944,0.995192,97.301517,-794.16656,2171.892463, 0,-0.097944,0.995192,45.307526,-794.16656,2171.892463, 0,-0.097944,0.995192,97.301517,-794.16656,2171.892463, 0,-0.162686,0.986678,45.307526,-820.853629,2169.265997, 0,-0.227008,0.973893,97.301517,-820.853629,2169.265997, 0.972352,-0.022872,0.232398,1085.391405,-794.16656,2052.984082, 0.920546,-0.079115,0.382538,1080.0746,-800.976533,2069.412397, 0.975625,-0.048525,0.214014,1085.391405,-797.638259,2052.642407, 0.920546,-0.079115,0.382538,1080.0746,-800.976533,2069.412397, 0.972352,-0.022872,0.232398,1085.391405,-794.16656,2052.984082, 0.906212,-0.041413,0.420791,1080.0746,-794.16656,2070.082615, 0.920546,-0.079115,0.382538,1080.0746,-800.976533,2069.412397, 0.82521,-0.218488,0.520857,1071.440608,-813.559725,2081.986111, 0.920558,-0.152171,0.359746,1080.0746,-807.524802,2067.427498, 0.82521,-0.218488,0.520857,1071.440608,-813.559725,2081.986111, 0.920546,-0.079115,0.382538,1080.0746,-800.976533,2069.412397, 0.825188,-0.112749,0.553491,1071.440608,-804.05311,2084.867737, 0.825188,-0.112749,0.553491,1071.440608,-804.05311,2084.867737, 0.698346,-0.251899,0.66997,1059.821204,-818.849378,2094.746838, 0.82521,-0.218488,0.520857,1071.440608,-813.559725,2081.986111, 0.698346,-0.251899,0.66997,1059.821204,-818.849378,2094.746838, 0.825188,-0.112749,0.553491,1071.440608,-804.05311,2084.867737, 0.712409,-0.124297,0.690669,1059.821204,-806.749751,2098.414453, 0.573227,-0.159742,0.803675,1045.662989,-808.962833,2109.531981, 0.698346,-0.251899,0.66997,1059.821204,-818.849378,2094.746838, 0.712409,-0.124297,0.690669,1059.821204,-806.749751,2098.414453, 0.698346,-0.251899,0.66997,1059.821204,-818.849378,2094.746838, 0.573227,-0.159742,0.803675,1045.662989,-808.962833,2109.531981, 0.546331,-0.318715,0.77456,1045.662989,-823.190494,2105.21932, 0.404534,-0.178287,0.896976,1029.509968,-810.607297,2117.793029, 0.546331,-0.318715,0.77456,1045.662989,-823.190494,2105.21932, 0.573227,-0.159742,0.803675,1045.662989,-808.962833,2109.531981, 0.546331,-0.318715,0.77456,1045.662989,-823.190494,2105.21932, 0.404534,-0.178287,0.896976,1029.509968,-810.607297,2117.793029, 0.374869,-0.353462,0.857052,1029.509968,-826.416226,2113.001057, 0.221931,-0.19009,0.956354,1011.982852,-811.619949,2122.880135, 0.374869,-0.353462,0.857052,1029.509968,-826.416226,2113.001057, 0.404534,-0.178287,0.896976,1029.509968,-810.607297,2117.793029, 0.374869,-0.353462,0.857052,1029.509968,-826.416226,2113.001057, 0.221931,-0.19009,0.956354,1011.982852,-811.619949,2122.880135, 0.190537,-0.374884,0.90728,1011.982852,-828.402613,2117.793006, 0.095481,-0.194061,0.976332,993.755282,-811.961287,2124.594866, 0.190537,-0.374884,0.90728,1011.982852,-828.402613,2117.793006, 0.221931,-0.19009,0.956354,1011.982852,-811.619949,2122.880135, 0.190537,-0.374884,0.90728,1011.982852,-828.402613,2117.793006, 0.095481,-0.194061,0.976332,993.755282,-811.961287,2124.594866, 0.095439,-0.410655,0.906782,993.755282,-829.072173,2119.408248, 0,-0.351934,0.936025,947.039602,-874.837884,2229.81318, 0,-0.227008,0.973893,993.755282,-835.292444,2241.800118, 0,-0.162686,0.986678,947.039602,-835.292444,2241.800118, 0,-0.227008,0.973893,993.755282,-835.292444,2241.800118, 0,-0.351934,0.936025,947.039602,-874.837884,2229.81318, 0,-0.412538,0.91094,993.755282,-874.837884,2229.81318, -0.698064,-0.251996,0.670228,947.039602,-874.837884,2229.81318, -0.698044,-0.162549,0.697361,900.323922,-826.396761,2197.1122, -0.698076,-0.295386,0.652255,900.323922,-857.388373,2187.718082, -0.698044,-0.162549,0.697361,900.323922,-826.396761,2197.1122, -0.698064,-0.251996,0.670228,947.039602,-874.837884,2229.81318, -0.698037,-0.116492,0.706522,947.039602,-835.292444,2241.800118, 0.698044,-0.162549,0.697361,900.323922,-826.396761,2197.1122, 0.698064,-0.251996,0.670228,853.608242,-874.837884,2229.81318, 0.698076,-0.295386,0.652255,900.323922,-857.388373,2187.718082, 0.698064,-0.251996,0.670228,853.608242,-874.837884,2229.81318, 0.698044,-0.162549,0.697361,900.323922,-826.396761,2197.1122, 0.698037,-0.116492,0.706522,853.608242,-835.292444,2241.800118, -0.698064,-0.251996,0.670228,853.608242,-874.837884,2229.81318, -0.698044,-0.162549,0.697361,806.892562,-826.396761,2197.1122, -0.698076,-0.295386,0.652255,806.892562,-857.388373,2187.718082, -0.698044,-0.162549,0.697361,806.892562,-826.396761,2197.1122, -0.698064,-0.251996,0.670228,853.608242,-874.837884,2229.81318, -0.698037,-0.116492,0.706522,853.608242,-835.292444,2241.800118, 0.698044,-0.162549,0.697361,806.892562,-826.396761,2197.1122, 0.698064,-0.251996,0.670228,760.176882,-874.837884,2229.81318, 0.698076,-0.295386,0.652255,806.892562,-857.388373,2187.718082, 0.698064,-0.251996,0.670228,760.176882,-874.837884,2229.81318, 0.698044,-0.162549,0.697361,806.892562,-826.396761,2197.1122, 0.698037,-0.116492,0.706522,760.176882,-835.292444,2241.800118, -0.698064,-0.251996,0.670228,760.176882,-874.837884,2229.81318, -0.698044,-0.162549,0.697361,713.461202,-826.396761,2197.1122, -0.698076,-0.295386,0.652255,713.461202,-857.388373,2187.718082, -0.698044,-0.162549,0.697361,713.461202,-826.396761,2197.1122, -0.698064,-0.251996,0.670228,760.176882,-874.837884,2229.81318, -0.698037,-0.116492,0.706522,760.176882,-835.292444,2241.800118, 0.698044,-0.162549,0.697361,713.461202,-826.396761,2197.1122, 0.698064,-0.251996,0.670228,666.745522,-874.837884,2229.81318, 0.698076,-0.295386,0.652255,713.461202,-857.388373,2187.718082, 0.698064,-0.251996,0.670228,666.745522,-874.837884,2229.81318, 0.698044,-0.162549,0.697361,713.461202,-826.396761,2197.1122, 0.698037,-0.116492,0.706522,666.745522,-835.292444,2241.800118, 0,-0.351934,0.936025,635.537065,-874.837884,2229.81318, 0,-0.227008,0.973893,666.745522,-835.292444,2241.800118, 0,-0.162686,0.986678,635.537065,-835.292444,2241.800118, 0,-0.227008,0.973893,666.745522,-835.292444,2241.800118, 0,-0.351934,0.936025,635.537065,-874.837884,2229.81318, 0,-0.412538,0.91094,666.745522,-874.837884,2229.81318, 0,-0.351934,0.936025,200.646178,-857.388373,2187.718082, 0,-0.227008,0.973893,635.537065,-826.396761,2197.1122, 0,-0.162686,0.986678,200.646178,-826.396761,2197.1122, 0,-0.227008,0.973893,635.537065,-826.396761,2197.1122, 0,-0.351934,0.936025,200.646178,-857.388373,2187.718082, 0,-0.412538,0.91094,635.537065,-857.388373,2187.718082, 0,-0.351934,0.936025,97.301517,-826.585858,2113.410276, 0,-0.227008,0.973893,200.646178,-810.693775,2118.227454, 0,-0.162686,0.986678,97.301517,-810.693775,2118.227454, 0,-0.227008,0.973893,200.646178,-810.693775,2118.227454, 0,-0.351934,0.936025,97.301517,-826.585858,2113.410276, 0,-0.412538,0.91094,200.646178,-826.585858,2113.410276, 0,-0.351934,0.936025,45.307526,-846.515129,2161.487533, 0,-0.227008,0.973893,97.301517,-820.853629,2169.265997, 0,-0.162686,0.986678,45.307526,-820.853629,2169.265997, 0,-0.227008,0.973893,97.301517,-820.853629,2169.265997, 0,-0.351934,0.936025,45.307526,-846.515129,2161.487533, 0,-0.412538,0.91094,97.301517,-846.515129,2161.487533, 0.975625,-0.048525,0.214014,1085.391405,-797.638259,2052.642407, 0.920558,-0.152171,0.359746,1080.0746,-807.524802,2067.427498, 0.975629,-0.089314,0.200429,1085.391405,-800.976542,2051.630513, 0.920558,-0.152171,0.359746,1080.0746,-807.524802,2067.427498, 0.975625,-0.048525,0.214014,1085.391405,-797.638259,2052.642407, 0.920546,-0.079115,0.382538,1080.0746,-800.976533,2069.412397, 0.920558,-0.152171,0.359746,1080.0746,-807.524802,2067.427498, 0.825241,-0.315841,0.468211,1071.440608,-822.321072,2077.306602, 0.920575,-0.219382,0.323131,1080.0746,-813.559722,2064.204197, 0.825241,-0.315841,0.468211,1071.440608,-822.321072,2077.306602, 0.920558,-0.152171,0.359746,1080.0746,-807.524802,2067.427498, 0.82521,-0.218488,0.520857,1071.440608,-813.559725,2081.986111, 0.82521,-0.218488,0.520857,1071.440608,-813.559725,2081.986111, 0.688423,-0.395152,0.608218,1059.821204,-830.000457,2088.790953, 0.825241,-0.315841,0.468211,1071.440608,-822.321072,2077.306602, 0.688423,-0.395152,0.608218,1059.821204,-830.000457,2088.790953, 0.82521,-0.218488,0.520857,1071.440608,-813.559725,2081.986111, 0.698346,-0.251899,0.66997,1059.821204,-818.849378,2094.746838, 0.546331,-0.318715,0.77456,1045.662989,-823.190494,2105.21932, 0.688423,-0.395152,0.608218,1059.821204,-830.000457,2088.790953, 0.698346,-0.251899,0.66997,1059.821204,-818.849378,2094.746838, 0.688423,-0.395152,0.608218,1059.821204,-830.000457,2088.790953, 0.546331,-0.318715,0.77456,1045.662989,-823.190494,2105.21932, 0.529849,-0.456252,0.714909,1045.662989,-836.302781,2098.215938, 0.374869,-0.353462,0.857052,1029.509968,-826.416226,2113.001057, 0.529849,-0.456252,0.714909,1045.662989,-836.302781,2098.215938, 0.546331,-0.318715,0.77456,1045.662989,-823.190494,2105.21932, 0.529849,-0.456252,0.714909,1045.662989,-836.302781,2098.215938, 0.374869,-0.353462,0.857052,1029.509968,-826.416226,2113.001057, 0.374908,-0.513801,0.771655,1029.509968,-840.985818,2105.219317, 0.190537,-0.374884,0.90728,1011.982852,-828.402613,2117.793006, 0.374908,-0.513801,0.771655,1029.509968,-840.985818,2105.219317, 0.374869,-0.353462,0.857052,1029.509968,-826.416226,2113.001057, 0.374908,-0.513801,0.771655,1029.509968,-840.985818,2105.219317, 0.190537,-0.374884,0.90728,1011.982852,-828.402613,2117.793006, 0.190559,-0.544614,0.816751,1011.982852,-843.869605,2109.531957, 0.095439,-0.410655,0.906782,993.755282,-829.072173,2119.408248, 0.190559,-0.544614,0.816751,1011.982852,-843.869605,2109.531957, 0.190537,-0.374884,0.90728,1011.982852,-828.402613,2117.793006, 0.190559,-0.544614,0.816751,1011.982852,-843.869605,2109.531957, 0.095439,-0.410655,0.906782,993.755282,-829.072173,2119.408248, 0.095452,-0.57961,0.809284,993.755282,-844.841655,2110.985636, 0,-0.527706,0.849427,947.039602,-911.28317,2210.34745, 0,-0.412538,0.91094,993.755282,-874.837884,2229.81318, 0,-0.351934,0.936025,947.039602,-874.837884,2229.81318, 0,-0.412538,0.91094,993.755282,-874.837884,2229.81318, 0,-0.527706,0.849427,947.039602,-911.28317,2210.34745, 0,-0.582269,0.812996,993.755282,-911.28317,2210.34745, -0.698105,-0.377833,0.608187,947.039602,-911.28317,2210.34745, -0.698076,-0.295386,0.652255,900.323922,-857.388373,2187.718082, -0.698122,-0.416891,0.58209,900.323922,-885.950406,2172.462863, -0.698076,-0.295386,0.652255,900.323922,-857.388373,2187.718082, -0.698105,-0.377833,0.608187,947.039602,-911.28317,2210.34745, -0.698064,-0.251996,0.670228,947.039602,-874.837884,2229.81318, 0.698076,-0.295386,0.652255,900.323922,-857.388373,2187.718082, 0.698105,-0.377833,0.608187,853.608242,-911.28317,2210.34745, 0.698122,-0.416891,0.58209,900.323922,-885.950406,2172.462863, 0.698105,-0.377833,0.608187,853.608242,-911.28317,2210.34745, 0.698076,-0.295386,0.652255,900.323922,-857.388373,2187.718082, 0.698064,-0.251996,0.670228,853.608242,-874.837884,2229.81318, -0.698105,-0.377833,0.608187,853.608242,-911.28317,2210.34745, -0.698076,-0.295386,0.652255,806.892562,-857.388373,2187.718082, -0.698122,-0.416891,0.58209,806.892562,-885.950406,2172.462863, -0.698076,-0.295386,0.652255,806.892562,-857.388373,2187.718082, -0.698105,-0.377833,0.608187,853.608242,-911.28317,2210.34745, -0.698064,-0.251996,0.670228,853.608242,-874.837884,2229.81318, 0.698076,-0.295386,0.652255,806.892562,-857.388373,2187.718082, 0.698105,-0.377833,0.608187,760.176882,-911.28317,2210.34745, 0.698122,-0.416891,0.58209,806.892562,-885.950406,2172.462863, 0.698105,-0.377833,0.608187,760.176882,-911.28317,2210.34745, 0.698076,-0.295386,0.652255,806.892562,-857.388373,2187.718082, 0.698064,-0.251996,0.670228,760.176882,-874.837884,2229.81318, -0.698105,-0.377833,0.608187,760.176882,-911.28317,2210.34745, -0.698076,-0.295386,0.652255,713.461202,-857.388373,2187.718082, -0.698122,-0.416891,0.58209,713.461202,-885.950406,2172.462863, -0.698076,-0.295386,0.652255,713.461202,-857.388373,2187.718082, -0.698105,-0.377833,0.608187,760.176882,-911.28317,2210.34745, -0.698064,-0.251996,0.670228,760.176882,-874.837884,2229.81318, 0.698076,-0.295386,0.652255,713.461202,-857.388373,2187.718082, 0.698105,-0.377833,0.608187,666.745522,-911.28317,2210.34745, 0.698122,-0.416891,0.58209,713.461202,-885.950406,2172.462863, 0.698105,-0.377833,0.608187,666.745522,-911.28317,2210.34745, 0.698076,-0.295386,0.652255,713.461202,-857.388373,2187.718082, 0.698064,-0.251996,0.670228,666.745522,-874.837884,2229.81318, 0,-0.527706,0.849427,635.537065,-911.28317,2210.34745, 0,-0.412538,0.91094,666.745522,-874.837884,2229.81318, 0,-0.351934,0.936025,635.537065,-874.837884,2229.81318, 0,-0.412538,0.91094,666.745522,-874.837884,2229.81318, 0,-0.527706,0.849427,635.537065,-911.28317,2210.34745, 0,-0.582269,0.812996,666.745522,-911.28317,2210.34745, 0,-0.527706,0.849427,200.646178,-885.950406,2172.462863, 0,-0.412538,0.91094,635.537065,-857.388373,2187.718082, 0,-0.351934,0.936025,200.646178,-857.388373,2187.718082, 0,-0.412538,0.91094,635.537065,-857.388373,2187.718082, 0,-0.527706,0.849427,200.646178,-885.950406,2172.462863, 0,-0.582269,0.812996,635.537065,-885.950406,2172.462863, 0,-0.527706,0.849427,97.301517,-841.232085,2105.587604, 0,-0.412538,0.91094,200.646178,-826.585858,2113.410276, 0,-0.351934,0.936025,97.301517,-826.585858,2113.410276, 0,-0.412538,0.91094,200.646178,-826.585858,2113.410276, 0,-0.527706,0.849427,97.301517,-841.232085,2105.587604, 0,-0.582269,0.812996,200.646178,-841.232085,2105.587604, 0,-0.527706,0.849427,45.307526,-870.164903,2148.855992, 0,-0.412538,0.91094,97.301517,-846.515129,2161.487533, 0,-0.351934,0.936025,45.307526,-846.515129,2161.487533, 0,-0.412538,0.91094,97.301517,-846.515129,2161.487533, 0,-0.527706,0.849427,45.307526,-870.164903,2148.855992, 0,-0.582269,0.812996,97.301517,-870.164903,2148.855992, 0.975629,-0.089314,0.200429,1085.391405,-800.976542,2051.630513, 0.920575,-0.219382,0.323131,1080.0746,-813.559722,2064.204197, 0.975635,-0.126671,0.179142,1085.391405,-804.053121,2049.987287, 0.920575,-0.219382,0.323131,1080.0746,-813.559722,2064.204197, 0.975629,-0.089314,0.200429,1085.391405,-800.976542,2051.630513, 0.920558,-0.152171,0.359746,1080.0746,-807.524802,2067.427498, 0.920575,-0.219382,0.323131,1080.0746,-813.559722,2064.204197, 0.825279,-0.401066,0.397569,1071.440608,-830.000457,2071.009044, 0.920595,-0.278166,0.274097,1080.0746,-818.849373,2059.866364, 0.825279,-0.401066,0.397569,1071.440608,-830.000457,2071.009044, 0.920575,-0.219382,0.323131,1080.0746,-813.559722,2064.204197, 0.825241,-0.315841,0.468211,1071.440608,-822.321072,2077.306602, 0.825241,-0.315841,0.468211,1071.440608,-822.321072,2077.306602, 0.698637,-0.507317,0.504516,1059.821204,-839.77446,2080.775682, 0.825279,-0.401066,0.397569,1071.440608,-830.000457,2071.009044, 0.698637,-0.507317,0.504516,1059.821204,-839.77446,2080.775682, 0.825241,-0.315841,0.468211,1071.440608,-822.321072,2077.306602, 0.688423,-0.395152,0.608218,1059.821204,-830.000457,2088.790953, 0.688423,-0.395152,0.608218,1059.821204,-830.000457,2088.790953, 0.546216,-0.572323,0.611633,1045.662989,-847.795796,2088.790972, 0.698637,-0.507317,0.504516,1059.821204,-839.77446,2080.775682, 0.546216,-0.572323,0.611633,1045.662989,-847.795796,2088.790972, 0.688423,-0.395152,0.608218,1059.821204,-830.000457,2088.790953, 0.529849,-0.456252,0.714909,1045.662989,-836.302781,2098.215938, 0.374908,-0.513801,0.771655,1029.509968,-840.985818,2105.219317, 0.546216,-0.572323,0.611633,1045.662989,-847.795796,2088.790972, 0.529849,-0.456252,0.714909,1045.662989,-836.302781,2098.215938, 0.546216,-0.572323,0.611633,1045.662989,-847.795796,2088.790972, 0.374908,-0.513801,0.771655,1029.509968,-840.985818,2105.219317, 0.374954,-0.654439,0.656596,1029.509968,-853.756172,2094.746857, 0.190559,-0.544614,0.816751,1011.982852,-843.869605,2109.531957, 0.374954,-0.654439,0.656596,1029.509968,-853.756172,2094.746857, 0.374908,-0.513801,0.771655,1029.509968,-840.985818,2105.219317, 0.374954,-0.654439,0.656596,1029.509968,-853.756172,2094.746857, 0.190559,-0.544614,0.816751,1011.982852,-843.869605,2109.531957, 0.190585,-0.693466,0.694825,1011.982852,-857.426537,2098.414455, 0.095452,-0.57961,0.809284,993.755282,-844.841655,2110.985636, 0.190585,-0.693466,0.694825,1011.982852,-857.426537,2098.414455, 0.190559,-0.544614,0.816751,1011.982852,-843.869605,2109.531957, 0.190585,-0.693466,0.694825,1011.982852,-857.426537,2098.414455, 0.095452,-0.57961,0.809284,993.755282,-844.841655,2110.985636, 0.095465,-0.726343,0.680671,993.755282,-858.663722,2099.650708, 0,-0.706845,0.707368,947.039602,-943.22773,2184.150985, 0,-0.582269,0.812996,993.755282,-911.28317,2210.34745, 0,-0.527706,0.849427,947.039602,-911.28317,2210.34745, 0,-0.582269,0.812996,993.755282,-911.28317,2210.34745, 0,-0.706845,0.707368,947.039602,-943.22773,2184.150985, 0,-0.706845,0.707368,993.755282,-943.22773,2184.150985, -0.698156,-0.489171,0.522771,947.039602,-943.22773,2184.150985, -0.698122,-0.416891,0.58209,900.323922,-885.950406,2172.462863, -0.698174,-0.522394,0.489549,900.323922,-910.985237,2151.932791, -0.698122,-0.416891,0.58209,900.323922,-885.950406,2172.462863, -0.698156,-0.489171,0.522771,947.039602,-943.22773,2184.150985, -0.698105,-0.377833,0.608187,947.039602,-911.28317,2210.34745, 0.698122,-0.416891,0.58209,900.323922,-885.950406,2172.462863, 0.698156,-0.489171,0.522771,853.608242,-943.22773,2184.150985, 0.698174,-0.522394,0.489549,900.323922,-910.985237,2151.932791, 0.698156,-0.489171,0.522771,853.608242,-943.22773,2184.150985, 0.698122,-0.416891,0.58209,900.323922,-885.950406,2172.462863, 0.698105,-0.377833,0.608187,853.608242,-911.28317,2210.34745, -0.698156,-0.489171,0.522771,853.608242,-943.22773,2184.150985, -0.698122,-0.416891,0.58209,806.892562,-885.950406,2172.462863, -0.698174,-0.522394,0.489549,806.892562,-910.985237,2151.932791, -0.698122,-0.416891,0.58209,806.892562,-885.950406,2172.462863, -0.698156,-0.489171,0.522771,853.608242,-943.22773,2184.150985, -0.698105,-0.377833,0.608187,853.608242,-911.28317,2210.34745, 0.698122,-0.416891,0.58209,806.892562,-885.950406,2172.462863, 0.698156,-0.489171,0.522771,760.176882,-943.22773,2184.150985, 0.698174,-0.522394,0.489549,806.892562,-910.985237,2151.932791, 0.698156,-0.489171,0.522771,760.176882,-943.22773,2184.150985, 0.698122,-0.416891,0.58209,806.892562,-885.950406,2172.462863, 0.698105,-0.377833,0.608187,760.176882,-911.28317,2210.34745, -0.698156,-0.489171,0.522771,760.176882,-943.22773,2184.150985, -0.698122,-0.416891,0.58209,713.461202,-885.950406,2172.462863, -0.698174,-0.522394,0.489549,713.461202,-910.985237,2151.932791, -0.698122,-0.416891,0.58209,713.461202,-885.950406,2172.462863, -0.698156,-0.489171,0.522771,760.176882,-943.22773,2184.150985, -0.698105,-0.377833,0.608187,760.176882,-911.28317,2210.34745, 0.698122,-0.416891,0.58209,713.461202,-885.950406,2172.462863, 0.698156,-0.489171,0.522771,666.745522,-943.22773,2184.150985, 0.698174,-0.522394,0.489549,713.461202,-910.985237,2151.932791, 0.698156,-0.489171,0.522771,666.745522,-943.22773,2184.150985, 0.698122,-0.416891,0.58209,713.461202,-885.950406,2172.462863, 0.698105,-0.377833,0.608187,666.745522,-911.28317,2210.34745, 0,-0.706845,0.707368,635.537065,-943.22773,2184.150985, 0,-0.582269,0.812996,666.745522,-911.28317,2210.34745, 0,-0.527706,0.849427,635.537065,-911.28317,2210.34745, 0,-0.582269,0.812996,666.745522,-911.28317,2210.34745, 0,-0.706845,0.707368,635.537065,-943.22773,2184.150985, 0,-0.706845,0.707368,666.745522,-943.22773,2184.150985, 0,-0.706845,0.707368,200.646178,-910.985237,2151.932791, 0,-0.582269,0.812996,635.537065,-885.950406,2172.462863, 0,-0.527706,0.849427,200.646178,-885.950406,2172.462863, 0,-0.582269,0.812996,635.537065,-885.950406,2172.462863, 0,-0.706845,0.707368,200.646178,-910.985237,2151.932791, 0,-0.706845,0.707368,635.537065,-910.985237,2151.932791, 0,-0.706845,0.707368,97.301517,-854.069611,2095.060059, 0,-0.582269,0.812996,200.646178,-841.232085,2105.587604, 0,-0.527706,0.849427,97.301517,-841.232085,2105.587604, 0,-0.582269,0.812996,200.646178,-841.232085,2105.587604, 0,-0.706845,0.707368,97.301517,-854.069611,2095.060059, 0,-0.706845,0.707368,200.646178,-854.069611,2095.060059, 0,-0.706845,0.707368,45.307526,-890.894103,2131.856798, 0,-0.582269,0.812996,97.301517,-870.164903,2148.855992, 0,-0.527706,0.849427,45.307526,-870.164903,2148.855992, 0,-0.582269,0.812996,97.301517,-870.164903,2148.855992, 0,-0.706845,0.707368,45.307526,-890.894103,2131.856798, 0,-0.706845,0.707368,97.301517,-890.894103,2131.856798, 0.975635,-0.126671,0.179142,1085.391405,-804.053121,2049.987287, 0.920595,-0.278166,0.274097,1080.0746,-818.849373,2059.866364, 0.975641,-0.159161,0.15097,1085.391405,-806.749765,2047.775876, 0.920595,-0.278166,0.274097,1080.0746,-818.849373,2059.866364, 0.975635,-0.126671,0.179142,1085.391405,-804.053121,2049.987287, 0.920575,-0.219382,0.323131,1080.0746,-813.559722,2064.204197, 0.920595,-0.278166,0.274097,1080.0746,-818.849373,2059.866364, 0.825316,-0.470886,0.311641,1071.440608,-836.302765,2063.335447, 0.920615,-0.326262,0.214527,1080.0746,-823.190478,2054.5807, 0.825316,-0.470886,0.311641,1071.440608,-836.302765,2063.335447, 0.920595,-0.278166,0.274097,1080.0746,-818.849373,2059.866364, 0.825279,-0.401066,0.397569,1071.440608,-830.000457,2071.009044, 0.825279,-0.401066,0.397569,1071.440608,-830.000457,2071.009044, 0.712575,-0.576041,0.400516,1059.821204,-847.795777,2071.009045, 0.825316,-0.470886,0.311641,1071.440608,-836.302765,2063.335447, 0.712575,-0.576041,0.400516,1059.821204,-847.795777,2071.009045, 0.825279,-0.401066,0.397569,1071.440608,-830.000457,2071.009044, 0.698637,-0.507317,0.504516,1059.821204,-839.77446,2080.775682, 0.698637,-0.507317,0.504516,1059.821204,-839.77446,2080.775682, 0.558056,-0.682755,0.471614,1045.662989,-857.22787,2077.306618, 0.712575,-0.576041,0.400516,1059.821204,-847.795777,2071.009045, 0.558056,-0.682755,0.471614,1045.662989,-857.22787,2077.306618, 0.698637,-0.507317,0.504516,1059.821204,-839.77446,2080.775682, 0.546216,-0.572323,0.611633,1045.662989,-847.795796,2088.790972, 0.558056,-0.682755,0.471614,1045.662989,-857.22787,2077.306618, 0.374954,-0.654439,0.656596,1029.509968,-853.756172,2094.746857, 0.374999,-0.769959,0.516274,1029.509968,-864.236531,2081.986126, 0.374954,-0.654439,0.656596,1029.509968,-853.756172,2094.746857, 0.558056,-0.682755,0.471614,1045.662989,-857.22787,2077.306618, 0.546216,-0.572323,0.611633,1045.662989,-847.795796,2088.790972, 0.374999,-0.769959,0.516274,1029.509968,-864.236531,2081.986126, 0.190585,-0.693466,0.694825,1011.982852,-857.426537,2098.414455, 0.190611,-0.815706,0.54616,1011.982852,-868.552424,2084.86774, 0.190585,-0.693466,0.694825,1011.982852,-857.426537,2098.414455, 0.374999,-0.769959,0.516274,1029.509968,-864.236531,2081.986126, 0.374954,-0.654439,0.656596,1029.509968,-853.756172,2094.746857, 0.190611,-0.815706,0.54616,1011.982852,-868.552424,2084.86774, 0.095465,-0.726343,0.680671,993.755282,-858.663722,2099.650708, 0.095479,-0.845197,0.525857,993.755282,-870.007199,2085.839058, 0.095465,-0.726343,0.680671,993.755282,-858.663722,2099.650708, 0.190611,-0.815706,0.54616,1011.982852,-868.552424,2084.86774, 0.190585,-0.693466,0.694825,1011.982852,-857.426537,2098.414455, 0,-0.812587,0.582839,993.755282,-969.443953,2152.230499, 0,-0.706845,0.707368,947.039602,-943.22773,2184.150985, 0,-0.849076,0.52827,947.039602,-969.443953,2152.230499, 0,-0.706845,0.707368,947.039602,-943.22773,2184.150985, 0,-0.812587,0.582839,993.755282,-969.443953,2152.230499, 0,-0.706845,0.707368,993.755282,-943.22773,2184.150985, -0.698208,-0.581726,0.417253,947.039602,-969.443953,2152.230499, -0.698174,-0.522394,0.489549,900.323922,-910.985237,2151.932791, -0.698225,-0.607835,0.378179,900.323922,-931.530793,2126.916827, -0.698174,-0.522394,0.489549,900.323922,-910.985237,2151.932791, -0.698208,-0.581726,0.417253,947.039602,-969.443953,2152.230499, -0.698156,-0.489171,0.522771,947.039602,-943.22773,2184.150985, 0.698174,-0.522394,0.489549,900.323922,-910.985237,2151.932791, 0.698208,-0.581726,0.417253,853.608242,-969.443953,2152.230499, 0.698225,-0.607835,0.378179,900.323922,-931.530793,2126.916827, 0.698208,-0.581726,0.417253,853.608242,-969.443953,2152.230499, 0.698174,-0.522394,0.489549,900.323922,-910.985237,2151.932791, 0.698156,-0.489171,0.522771,853.608242,-943.22773,2184.150985, -0.698208,-0.581726,0.417253,853.608242,-969.443953,2152.230499, -0.698174,-0.522394,0.489549,806.892562,-910.985237,2151.932791, -0.698225,-0.607835,0.378179,806.892562,-931.530793,2126.916827, -0.698174,-0.522394,0.489549,806.892562,-910.985237,2151.932791, -0.698208,-0.581726,0.417253,853.608242,-969.443953,2152.230499, -0.698156,-0.489171,0.522771,853.608242,-943.22773,2184.150985, 0.698174,-0.522394,0.489549,806.892562,-910.985237,2151.932791, 0.698208,-0.581726,0.417253,760.176882,-969.443953,2152.230499, 0.698225,-0.607835,0.378179,806.892562,-931.530793,2126.916827, 0.698208,-0.581726,0.417253,760.176882,-969.443953,2152.230499, 0.698174,-0.522394,0.489549,806.892562,-910.985237,2151.932791, 0.698156,-0.489171,0.522771,760.176882,-943.22773,2184.150985, -0.698208,-0.581726,0.417253,760.176882,-969.443953,2152.230499, -0.698174,-0.522394,0.489549,713.461202,-910.985237,2151.932791, -0.698225,-0.607835,0.378179,713.461202,-931.530793,2126.916827, -0.698174,-0.522394,0.489549,713.461202,-910.985237,2151.932791, -0.698208,-0.581726,0.417253,760.176882,-969.443953,2152.230499, -0.698156,-0.489171,0.522771,760.176882,-943.22773,2184.150985, 0.698174,-0.522394,0.489549,713.461202,-910.985237,2151.932791, 0.698208,-0.581726,0.417253,666.745522,-969.443953,2152.230499, 0.698225,-0.607835,0.378179,713.461202,-931.530793,2126.916827, 0.698208,-0.581726,0.417253,666.745522,-969.443953,2152.230499, 0.698174,-0.522394,0.489549,713.461202,-910.985237,2151.932791, 0.698156,-0.489171,0.522771,666.745522,-943.22773,2184.150985, 0,-0.812587,0.582839,666.745522,-969.443953,2152.230499, 0,-0.706845,0.707368,635.537065,-943.22773,2184.150985, 0,-0.849076,0.52827,635.537065,-969.443953,2152.230499, 0,-0.706845,0.707368,635.537065,-943.22773,2184.150985, 0,-0.812587,0.582839,666.745522,-969.443953,2152.230499, 0,-0.706845,0.707368,666.745522,-943.22773,2184.150985, 0,-0.812587,0.582839,635.537065,-931.530793,2126.916827, 0,-0.706845,0.707368,200.646178,-910.985237,2151.932791, 0,-0.849076,0.52827,200.646178,-931.530793,2126.916827, 0,-0.706845,0.707368,200.646178,-910.985237,2151.932791, 0,-0.812587,0.582839,635.537065,-931.530793,2126.916827, 0,-0.706845,0.707368,635.537065,-910.985237,2151.932791, 0,-0.812587,0.582839,200.646178,-864.605096,2082.232208, 0,-0.706845,0.707368,97.301517,-854.069611,2095.060059, 0,-0.849076,0.52827,97.301517,-864.605096,2082.232208, 0,-0.706845,0.707368,97.301517,-854.069611,2095.060059, 0,-0.812587,0.582839,200.646178,-864.605096,2082.232208, 0,-0.706845,0.707368,200.646178,-854.069611,2095.060059, 0,-0.812587,0.582839,97.301517,-907.906118,2111.143221, 0,-0.706845,0.707368,45.307526,-890.894103,2131.856798, 0,-0.849076,0.52827,45.307526,-907.906118,2111.143221, 0,-0.706845,0.707368,45.307526,-890.894103,2131.856798, 0,-0.812587,0.582839,97.301517,-907.906118,2111.143221, 0,-0.706845,0.707368,97.301517,-890.894103,2131.856798, 0.975641,-0.159161,0.15097,1085.391405,-806.749765,2047.775876, 0.920615,-0.326262,0.214527,1080.0746,-823.190478,2054.5807, 0.975648,-0.185535,0.116996,1085.391405,-808.962844,2045.081264, 0.920615,-0.326262,0.214527,1080.0746,-823.190478,2054.5807, 0.975641,-0.159161,0.15097,1085.391405,-806.749765,2047.775876, 0.920595,-0.278166,0.274097,1080.0746,-818.849373,2059.866364, 0.920615,-0.326262,0.214527,1080.0746,-823.190478,2054.5807, 0.825347,-0.522611,0.213727,1071.440608,-840.985802,2054.580703, 0.920631,-0.361821,0.14671,1080.0746,-826.416209,2048.550328, 0.825347,-0.522611,0.213727,1071.440608,-840.985802,2054.580703, 0.920615,-0.326262,0.214527,1080.0746,-823.190478,2054.5807, 0.825316,-0.470886,0.311641,1071.440608,-836.302765,2063.335447, 0.825316,-0.470886,0.311641,1071.440608,-836.302765,2063.335447, 0.698533,-0.651683,0.295568,1059.821204,-853.756153,2059.866369, 0.825347,-0.522611,0.213727,1071.440608,-840.985802,2054.580703, 0.698533,-0.651683,0.295568,1059.821204,-853.756153,2059.866369, 0.825316,-0.470886,0.311641,1071.440608,-836.302765,2063.335447, 0.712575,-0.576041,0.400516,1059.821204,-847.795777,2071.009045, 0.698533,-0.651683,0.295568,1059.821204,-853.756153,2059.866369, 0.558056,-0.682755,0.471614,1045.662989,-857.22787,2077.306618, 0.546532,-0.77294,0.322284,1045.662989,-864.236534,2064.204213, 0.558056,-0.682755,0.471614,1045.662989,-857.22787,2077.306618, 0.698533,-0.651683,0.295568,1059.821204,-853.756153,2059.866369, 0.712575,-0.576041,0.400516,1059.821204,-847.795777,2071.009045, 0.546532,-0.77294,0.322284,1045.662989,-864.236534,2064.204213, 0.374999,-0.769959,0.516274,1029.509968,-864.236531,2081.986126, 0.375038,-0.855898,0.356068,1029.509968,-872.024141,2067.427515, 0.374999,-0.769959,0.516274,1029.509968,-864.236531,2081.986126, 0.546532,-0.77294,0.322284,1045.662989,-864.236534,2064.204213, 0.558056,-0.682755,0.471614,1045.662989,-857.22787,2077.306618, 0.375038,-0.855898,0.356068,1029.509968,-872.024141,2067.427515, 0.190611,-0.815706,0.54616,1011.982852,-868.552424,2084.86774, 0.190633,-0.906609,0.376455,1011.982852,-876.819704,2069.412405, 0.190611,-0.815706,0.54616,1011.982852,-868.552424,2084.86774, 0.375038,-0.855898,0.356068,1029.509968,-872.024141,2067.427515, 0.374999,-0.769959,0.516274,1029.509968,-864.236531,2081.986126, 0.190633,-0.906609,0.376455,1011.982852,-876.819704,2069.412405, 0.095479,-0.845197,0.525857,993.755282,-870.007199,2085.839058, 0.09549,-0.931577,0.35078,993.755282,-878.436163,2070.08146, 0.095479,-0.845197,0.525857,993.755282,-870.007199,2085.839058, 0.190633,-0.906609,0.376455,1011.982852,-876.819704,2069.412405, 0.190611,-0.815706,0.54616,1011.982852,-868.552424,2084.86774, 0,-0.91071,0.413047,993.755282,-988.924364,2115.81268, 0,-0.849076,0.52827,947.039602,-969.443953,2152.230499, 0,-0.935853,0.352391,947.039602,-988.924364,2115.81268, 0,-0.849076,0.52827,947.039602,-969.443953,2152.230499, 0,-0.91071,0.413047,993.755282,-988.924364,2115.81268, 0,-0.812587,0.582839,993.755282,-969.443953,2152.230499, -0.698254,-0.651931,0.295681,947.039602,-988.924364,2115.81268, -0.698225,-0.607835,0.378179,900.323922,-931.530793,2126.916827, -0.698266,-0.669919,0.252256,900.323922,-946.797518,2098.376319, -0.698225,-0.607835,0.378179,900.323922,-931.530793,2126.916827, -0.698254,-0.651931,0.295681,947.039602,-988.924364,2115.81268, -0.698208,-0.581726,0.417253,947.039602,-969.443953,2152.230499, 0.698225,-0.607835,0.378179,900.323922,-931.530793,2126.916827, 0.698254,-0.651931,0.295681,853.608242,-988.924364,2115.81268, 0.698266,-0.669919,0.252256,900.323922,-946.797518,2098.376319, 0.698254,-0.651931,0.295681,853.608242,-988.924364,2115.81268, 0.698225,-0.607835,0.378179,900.323922,-931.530793,2126.916827, 0.698208,-0.581726,0.417253,853.608242,-969.443953,2152.230499, -0.698254,-0.651931,0.295681,853.608242,-988.924364,2115.81268, -0.698225,-0.607835,0.378179,806.892562,-931.530793,2126.916827, -0.698266,-0.669919,0.252256,806.892562,-946.797518,2098.376319, -0.698225,-0.607835,0.378179,806.892562,-931.530793,2126.916827, -0.698254,-0.651931,0.295681,853.608242,-988.924364,2115.81268, -0.698208,-0.581726,0.417253,853.608242,-969.443953,2152.230499, 0.698225,-0.607835,0.378179,806.892562,-931.530793,2126.916827, 0.698254,-0.651931,0.295681,760.176882,-988.924364,2115.81268, 0.698266,-0.669919,0.252256,806.892562,-946.797518,2098.376319, 0.698254,-0.651931,0.295681,760.176882,-988.924364,2115.81268, 0.698225,-0.607835,0.378179,806.892562,-931.530793,2126.916827, 0.698208,-0.581726,0.417253,760.176882,-969.443953,2152.230499, -0.698254,-0.651931,0.295681,760.176882,-988.924364,2115.81268, -0.698225,-0.607835,0.378179,713.461202,-931.530793,2126.916827, -0.698266,-0.669919,0.252256,713.461202,-946.797518,2098.376319, -0.698225,-0.607835,0.378179,713.461202,-931.530793,2126.916827, -0.698254,-0.651931,0.295681,760.176882,-988.924364,2115.81268, -0.698208,-0.581726,0.417253,760.176882,-969.443953,2152.230499, 0.698225,-0.607835,0.378179,713.461202,-931.530793,2126.916827, 0.698254,-0.651931,0.295681,666.745522,-988.924364,2115.81268, 0.698266,-0.669919,0.252256,713.461202,-946.797518,2098.376319, 0.698254,-0.651931,0.295681,666.745522,-988.924364,2115.81268, 0.698225,-0.607835,0.378179,713.461202,-931.530793,2126.916827, 0.698208,-0.581726,0.417253,666.745522,-969.443953,2152.230499, 0,-0.91071,0.413047,666.745522,-988.924364,2115.81268, 0,-0.849076,0.52827,635.537065,-969.443953,2152.230499, 0,-0.935853,0.352391,635.537065,-988.924364,2115.81268, 0,-0.849076,0.52827,635.537065,-969.443953,2152.230499, 0,-0.91071,0.413047,666.745522,-988.924364,2115.81268, 0,-0.812587,0.582839,666.745522,-969.443953,2152.230499, 0,-0.91071,0.413047,635.537065,-946.797518,2098.376319, 0,-0.849076,0.52827,200.646178,-931.530793,2126.916827, 0,-0.935853,0.352391,200.646178,-946.797518,2098.376319, 0,-0.849076,0.52827,200.646178,-931.530793,2126.916827, 0,-0.91071,0.413047,635.537065,-946.797518,2098.376319, 0,-0.812587,0.582839,635.537065,-931.530793,2126.916827, 0,-0.91071,0.413047,200.646178,-872.433668,2067.597018, 0,-0.849076,0.52827,97.301517,-864.605096,2082.232208, 0,-0.935853,0.352391,97.301517,-872.433668,2067.597018, 0,-0.849076,0.52827,97.301517,-864.605096,2082.232208, 0,-0.91071,0.413047,200.646178,-872.433668,2067.597018, 0,-0.812587,0.582839,200.646178,-864.605096,2082.232208, 0,-0.91071,0.413047,97.301517,-920.547185,2087.51127, 0,-0.849076,0.52827,45.307526,-907.906118,2111.143221, 0,-0.935853,0.352391,45.307526,-920.547185,2087.51127, 0,-0.849076,0.52827,45.307526,-907.906118,2111.143221, 0,-0.91071,0.413047,97.301517,-920.547185,2087.51127, 0,-0.812587,0.582839,97.301517,-907.906118,2111.143221, 0.975648,-0.185535,0.116996,1085.391405,-808.962844,2045.081264, 0.920631,-0.361821,0.14671,1080.0746,-826.416209,2048.550328, 0.975653,-0.204779,0.078525,1085.391405,-810.60731,2042.007003, 0.920631,-0.361821,0.14671,1080.0746,-826.416209,2048.550328, 0.975648,-0.185535,0.116996,1085.391405,-808.962844,2045.081264, 0.920615,-0.326262,0.214527,1080.0746,-823.190478,2054.5807, 0.920631,-0.361821,0.14671,1080.0746,-826.416209,2048.550328, 0.825368,-0.554249,0.10759,1071.440608,-843.869602,2045.081252, 0.920642,-0.383474,0.073251,1080.0746,-828.402605,2042.006994, 0.825368,-0.554249,0.10759,1071.440608,-843.869602,2045.081252, 0.920631,-0.361821,0.14671,1080.0746,-826.416209,2048.550328, 0.825347,-0.522611,0.213727,1071.440608,-840.985802,2054.580703, 0.825347,-0.522611,0.213727,1071.440608,-840.985802,2054.580703, 0.698565,-0.696813,0.162664,1059.821204,-857.426535,2047.775861, 0.825368,-0.554249,0.10759,1071.440608,-843.869602,2045.081252, 0.698565,-0.696813,0.162664,1059.821204,-857.426535,2047.775861, 0.825347,-0.522611,0.213727,1071.440608,-840.985802,2054.580703, 0.698533,-0.651683,0.295568,1059.821204,-853.756153,2059.866369, 0.698565,-0.696813,0.162664,1059.821204,-857.426535,2047.775861, 0.546532,-0.77294,0.322284,1045.662989,-864.236534,2064.204213, 0.546562,-0.820963,0.165195,1045.662989,-868.552448,2049.987275, 0.546532,-0.77294,0.322284,1045.662989,-864.236534,2064.204213, 0.698565,-0.696813,0.162664,1059.821204,-857.426535,2047.775861, 0.698533,-0.651683,0.295568,1059.821204,-853.756153,2059.866369, 0.546562,-0.820963,0.165195,1045.662989,-868.552448,2049.987275, 0.375038,-0.855898,0.356068,1029.509968,-872.024141,2067.427515, 0.375063,-0.90893,0.182138,1029.509968,-876.819727,2051.6305, 0.375038,-0.855898,0.356068,1029.509968,-872.024141,2067.427515, 0.546562,-0.820963,0.165195,1045.662989,-868.552448,2049.987275, 0.546532,-0.77294,0.322284,1045.662989,-864.236534,2064.204213, 0.375063,-0.90893,0.182138,1029.509968,-876.819727,2051.6305, 0.190633,-0.906609,0.376455,1011.982852,-876.819704,2069.412405, 0.190647,-0.962652,0.192235,1011.982852,-881.910669,2052.642388, 0.190633,-0.906609,0.376455,1011.982852,-876.819704,2069.412405, 0.375063,-0.90893,0.182138,1029.509968,-876.819727,2051.6305, 0.375038,-0.855898,0.356068,1029.509968,-872.024141,2067.427515, 0.190647,-0.962652,0.192235,1011.982852,-881.910669,2052.642388, 0.09549,-0.931577,0.35078,993.755282,-878.436163,2070.08146, 0.095497,-0.98213,0.162176,993.755282,-883.626694,2052.983469, 0.09549,-0.931577,0.35078,993.755282,-878.436163,2070.08146, 0.190647,-0.962652,0.192235,1011.982852,-881.910669,2052.642388, 0.190633,-0.906609,0.376455,1011.982852,-876.819704,2069.412405, 0,-0.973818,0.227328,993.755282,-1000.920342,2076.297043, 0,-0.935853,0.352391,947.039602,-988.924364,2115.81268, 0,-0.986639,0.16292,947.039602,-1000.920342,2076.297043, 0,-0.935853,0.352391,947.039602,-988.924364,2115.81268, 0,-0.973818,0.227328,993.755282,-1000.920342,2076.297043, 0,-0.91071,0.413047,993.755282,-988.924364,2115.81268, -0.698482,-0.701857,0.139712,947.039602,-1000.920342,2076.297043, -0.698266,-0.669919,0.252256,900.323922,-946.797518,2098.376319, -0.698482,-0.701857,0.139712,900.323922,-956.19872,2067.408064, -0.698266,-0.669919,0.252256,900.323922,-946.797518,2098.376319, -0.698482,-0.701857,0.139712,947.039602,-1000.920342,2076.297043, -0.698254,-0.651931,0.295681,947.039602,-988.924364,2115.81268, 0.698266,-0.669919,0.252256,900.323922,-946.797518,2098.376319, 0.698286,-0.697077,0.162726,853.608242,-1000.920342,2076.297043, 0.698293,-0.706248,0.116621,900.323922,-956.19872,2067.408064, 0.698286,-0.697077,0.162726,853.608242,-1000.920342,2076.297043, 0.698266,-0.669919,0.252256,900.323922,-946.797518,2098.376319, 0.698254,-0.651931,0.295681,853.608242,-988.924364,2115.81268, -0.698482,-0.701857,0.139712,853.608242,-1000.920342,2076.297043, -0.698266,-0.669919,0.252256,806.892562,-946.797518,2098.376319, -0.698482,-0.701857,0.139712,806.892562,-956.19872,2067.408064, -0.698266,-0.669919,0.252256,806.892562,-946.797518,2098.376319, -0.698482,-0.701857,0.139712,853.608242,-1000.920342,2076.297043, -0.698254,-0.651931,0.295681,853.608242,-988.924364,2115.81268, 0.698266,-0.669919,0.252256,806.892562,-946.797518,2098.376319, 0.698286,-0.697077,0.162726,760.176882,-1000.920342,2076.297043, 0.698293,-0.706248,0.116621,806.892562,-956.19872,2067.408064, 0.698286,-0.697077,0.162726,760.176882,-1000.920342,2076.297043, 0.698266,-0.669919,0.252256,806.892562,-946.797518,2098.376319, 0.698254,-0.651931,0.295681,760.176882,-988.924364,2115.81268, -0.698482,-0.701857,0.139712,760.176882,-1000.920342,2076.297043, -0.698266,-0.669919,0.252256,713.461202,-946.797518,2098.376319, -0.698482,-0.701857,0.139712,713.461202,-956.19872,2067.408064, -0.698266,-0.669919,0.252256,713.461202,-946.797518,2098.376319, -0.698482,-0.701857,0.139712,760.176882,-1000.920342,2076.297043, -0.698254,-0.651931,0.295681,760.176882,-988.924364,2115.81268, 0.698266,-0.669919,0.252256,713.461202,-946.797518,2098.376319, 0.698286,-0.697077,0.162726,666.745522,-1000.920342,2076.297043, 0.698293,-0.706248,0.116621,713.461202,-956.19872,2067.408064, 0.698286,-0.697077,0.162726,666.745522,-1000.920342,2076.297043, 0.698266,-0.669919,0.252256,713.461202,-946.797518,2098.376319, 0.698254,-0.651931,0.295681,666.745522,-988.924364,2115.81268, 0,-0.973818,0.227328,666.745522,-1000.920342,2076.297043, 0,-0.935853,0.352391,635.537065,-988.924364,2115.81268, 0,-0.986639,0.16292,635.537065,-1000.920342,2076.297043, 0,-0.935853,0.352391,635.537065,-988.924364,2115.81268, 0,-0.973818,0.227328,666.745522,-1000.920342,2076.297043, 0,-0.91071,0.413047,666.745522,-988.924364,2115.81268, 0,-0.973818,0.227328,635.537065,-956.19872,2067.408064, 0,-0.935853,0.352391,200.646178,-946.797518,2098.376319, 0,-0.986639,0.16292,200.646178,-956.19872,2067.408064, 0,-0.935853,0.352391,200.646178,-946.797518,2098.376319, 0,-0.973818,0.227328,635.537065,-956.19872,2067.408064, 0,-0.91071,0.413047,635.537065,-946.797518,2098.376319, 0,-0.973818,0.227328,200.646178,-877.254479,2051.716912, 0,-0.935853,0.352391,97.301517,-872.433668,2067.597018, 0,-0.986639,0.16292,97.301517,-877.254479,2051.716912, 0,-0.935853,0.352391,97.301517,-872.433668,2067.597018, 0,-0.973818,0.227328,200.646178,-877.254479,2051.716912, 0,-0.91071,0.413047,200.646178,-872.433668,2067.597018, 0,-0.973818,0.227328,97.301517,-928.331516,2061.86911, 0,-0.935853,0.352391,45.307526,-920.547185,2087.51127, 0,-0.986639,0.16292,45.307526,-928.331516,2061.86911, 0,-0.935853,0.352391,45.307526,-920.547185,2087.51127, 0,-0.973818,0.227328,97.301517,-928.331516,2061.86911, 0,-0.91071,0.413047,97.301517,-920.547185,2087.51127, 0.975653,-0.204779,0.078525,1085.391405,-810.60731,2042.007003, 0.920642,-0.383474,0.073251,1080.0746,-828.402605,2042.006994, 0.975657,-0.216153,0.037036,1085.391405,-811.619967,2038.671235, 0.920642,-0.383474,0.073251,1080.0746,-828.402605,2042.006994, 0.975653,-0.204779,0.078525,1085.391405,-810.60731,2042.007003, 0.920631,-0.361821,0.14671,1080.0746,-826.416209,2048.550328, 0.920642,-0.383474,0.073251,1080.0746,-828.402605,2042.006994, 0.842436,-0.536198,0.052851,1071.440608,-844.843343,2035.202153, 0.932578,-0.359229,0.035408,1080.0746,-829.073329,2035.202153, 0.842436,-0.536198,0.052851,1071.440608,-844.843343,2035.202153, 0.920642,-0.383474,0.073251,1080.0746,-828.402605,2042.006994, 0.825368,-0.554249,0.10759,1071.440608,-843.869602,2045.081252, 0.825368,-0.554249,0.10759,1071.440608,-843.869602,2045.081252, 0.69704,-0.713574,0.070334,1059.821204,-858.665871,2035.202153, 0.842436,-0.536198,0.052851,1071.440608,-844.843343,2035.202153, 0.69704,-0.713574,0.070334,1059.821204,-858.665871,2035.202153, 0.825368,-0.554249,0.10759,1071.440608,-843.869602,2045.081252, 0.698565,-0.696813,0.162664,1059.821204,-857.426535,2047.775861, 0.69704,-0.713574,0.070334,1059.821204,-858.665871,2035.202153, 0.546562,-0.820963,0.165195,1045.662989,-868.552448,2049.987275, 0.517228,-0.851721,0.08395,1045.662989,-870.009753,2035.202153, 0.546562,-0.820963,0.165195,1045.662989,-868.552448,2049.987275, 0.69704,-0.713574,0.070334,1059.821204,-858.665871,2035.202153, 0.698565,-0.696813,0.162664,1059.821204,-857.426535,2047.775861, 0.517228,-0.851721,0.08395,1045.662989,-870.009753,2035.202153, 0.375063,-0.90893,0.182138,1029.509968,-876.819727,2051.6305, 0.343504,-0.934622,0.092122,1029.509968,-878.438998,2035.202153, 0.375063,-0.90893,0.182138,1029.509968,-876.819727,2051.6305, 0.517228,-0.851721,0.08395,1045.662989,-870.009753,2035.202153, 0.546562,-0.820963,0.165195,1045.662989,-868.552448,2049.987275, 0.343504,-0.934622,0.092122,1029.509968,-878.438998,2035.202153, 0.190647,-0.962652,0.192235,1011.982852,-881.910669,2052.642388, 0.158272,-0.982634,0.096854,1011.982852,-883.629678,2035.202153, 0.190647,-0.962652,0.192235,1011.982852,-881.910669,2052.642388, 0.343504,-0.934622,0.092122,1029.509968,-878.438998,2035.202153, 0.375063,-0.90893,0.182138,1029.509968,-876.819727,2051.6305, 0.158272,-0.982634,0.096854,1011.982852,-883.629678,2035.202153, 0.095497,-0.98213,0.162176,993.755282,-883.626694,2052.983469, 0.095093,-0.990668,0.097646,993.755282,-885.379322,2035.202153, 0.095497,-0.98213,0.162176,993.755282,-883.626694,2052.983469, 0.158272,-0.982634,0.096854,1011.982852,-883.629678,2035.202153, 0.190647,-0.962652,0.192235,1011.982852,-881.910669,2052.642388, 0,-0.995178,0.09809,993.755282,-1004.970888,2035.202153, 0,-0.986639,0.16292,947.039602,-1000.920342,2076.297043, 0,-0.995178,0.09809,947.039602,-1004.970888,2035.202153, 0,-0.986639,0.16292,947.039602,-1000.920342,2076.297043, 0,-0.995178,0.09809,993.755282,-1004.970888,2035.202153, 0,-0.973818,0.227328,993.755282,-1000.920342,2076.297043, -0.698482,-0.701857,0.139712,947.039602,-1000.920342,2076.297043, -0.696761,-0.713844,0.070361,900.323922,-959.373118,2035.202153, -0.696761,-0.713844,0.070361,947.039602,-1004.970888,2035.202153, -0.696761,-0.713844,0.070361,900.323922,-959.373118,2035.202153, -0.698482,-0.701857,0.139712,947.039602,-1000.920342,2076.297043, -0.698482,-0.701857,0.139712,900.323922,-956.19872,2067.408064, 0.698293,-0.706248,0.116621,900.323922,-956.19872,2067.408064, 0.696761,-0.713844,0.070361,853.608242,-1004.970888,2035.202153, 0.696761,-0.713844,0.070361,900.323922,-959.373118,2035.202153, 0.696761,-0.713844,0.070361,853.608242,-1004.970888,2035.202153, 0.698293,-0.706248,0.116621,900.323922,-956.19872,2067.408064, 0.698286,-0.697077,0.162726,853.608242,-1000.920342,2076.297043, -0.698482,-0.701857,0.139712,853.608242,-1000.920342,2076.297043, -0.696761,-0.713844,0.070361,806.892562,-959.373118,2035.202153, -0.696761,-0.713844,0.070361,853.608242,-1004.970888,2035.202153, -0.696761,-0.713844,0.070361,806.892562,-959.373118,2035.202153, -0.698482,-0.701857,0.139712,853.608242,-1000.920342,2076.297043, -0.698482,-0.701857,0.139712,806.892562,-956.19872,2067.408064, 0.698293,-0.706248,0.116621,806.892562,-956.19872,2067.408064, 0.696761,-0.713844,0.070361,760.176882,-1004.970888,2035.202153, 0.696761,-0.713844,0.070361,806.892562,-959.373118,2035.202153, 0.696761,-0.713844,0.070361,760.176882,-1004.970888,2035.202153, 0.698293,-0.706248,0.116621,806.892562,-956.19872,2067.408064, 0.698286,-0.697077,0.162726,760.176882,-1000.920342,2076.297043, -0.698482,-0.701857,0.139712,760.176882,-1000.920342,2076.297043, -0.696761,-0.713844,0.070361,713.461202,-959.373118,2035.202153, -0.696761,-0.713844,0.070361,760.176882,-1004.970888,2035.202153, -0.696761,-0.713844,0.070361,713.461202,-959.373118,2035.202153, -0.698482,-0.701857,0.139712,760.176882,-1000.920342,2076.297043, -0.698482,-0.701857,0.139712,713.461202,-956.19872,2067.408064, 0.698293,-0.706248,0.116621,713.461202,-956.19872,2067.408064, 0.696761,-0.713844,0.070361,666.745522,-1004.970888,2035.202153, 0.696761,-0.713844,0.070361,713.461202,-959.373118,2035.202153, 0.696761,-0.713844,0.070361,666.745522,-1004.970888,2035.202153, 0.698293,-0.706248,0.116621,713.461202,-956.19872,2067.408064, 0.698286,-0.697077,0.162726,666.745522,-1000.920342,2076.297043, 0,-0.995178,0.09809,666.745522,-1004.970888,2035.202153, 0,-0.986639,0.16292,635.537065,-1000.920342,2076.297043, 0,-0.995178,0.09809,635.537065,-1004.970888,2035.202153, 0,-0.986639,0.16292,635.537065,-1000.920342,2076.297043, 0,-0.995178,0.09809,666.745522,-1004.970888,2035.202153, 0,-0.973818,0.227328,666.745522,-1000.920342,2076.297043, 0,-0.995178,0.09809,635.537065,-959.373118,2035.202153, 0,-0.986639,0.16292,200.646178,-956.19872,2067.408064, 0,-0.995178,0.09809,200.646178,-959.373118,2035.202153, 0,-0.986639,0.16292,200.646178,-956.19872,2067.408064, 0,-0.995178,0.09809,635.537065,-959.373118,2035.202153, 0,-0.973818,0.227328,635.537065,-956.19872,2067.408064, 0,-0.995178,0.09809,200.646178,-878.882267,2035.202153, 0,-0.986639,0.16292,97.301517,-877.254479,2051.716912, 0,-0.995178,0.09809,97.301517,-878.882267,2035.202153, 0,-0.986639,0.16292,97.301517,-877.254479,2051.716912, 0,-0.995178,0.09809,200.646178,-878.882267,2035.202153, 0,-0.973818,0.227328,200.646178,-877.254479,2051.716912, 0,-0.995178,0.09809,97.301517,-930.959963,2035.202153, 0,-0.986639,0.16292,45.307526,-928.331516,2061.86911, 0,-0.995178,0.09809,45.307526,-930.959963,2035.202153, 0,-0.986639,0.16292,45.307526,-928.331516,2061.86911, 0,-0.995178,0.09809,97.301517,-930.959963,2035.202153, 0,-0.973818,0.227328,97.301517,-928.331516,2061.86911, 0.975657,-0.216153,0.037036,1085.391405,-811.619967,2038.671235, 0.932578,-0.359229,0.035408,1080.0746,-829.073329,2035.202153, 0.979702,-0.199495,0.019663,1085.391405,-811.9619,2035.202153, 0.932578,-0.359229,0.035408,1080.0746,-829.073329,2035.202153, 0.975657,-0.216153,0.037036,1085.391405,-811.619967,2038.671235, 0.920642,-0.383474,0.073251,1080.0746,-828.402605,2042.006994, -1,0,0,635.537065,-835.292444,2241.800118, -1,0,0,635.537065,-794.16656,2200.284205, -1,0,0,635.537065,-826.396761,2197.1122, -1,0,0,635.537065,-794.16656,2200.284205, -1,0,0,635.537065,-835.292444,2241.800118, -1,0,0,635.537065,-794.16656,2245.847611, 0.972352,-0.022872,0.232398,1085.391405,-794.16656,2052.984082, 0.975625,-0.048525,0.214014,1085.391405,-797.638259,2052.642407, 0.995845,-0.06437,0.064418,1087.186642,-794.16656,2035.202153, 0.975625,-0.048525,0.214014,1085.391405,-797.638259,2052.642407, 0.975629,-0.089314,0.200429,1085.391405,-800.976542,2051.630513, 0.995845,-0.06437,0.064418,1087.186642,-794.16656,2035.202153, 0.975629,-0.089314,0.200429,1085.391405,-800.976542,2051.630513, 0.975635,-0.126671,0.179142,1085.391405,-804.053121,2049.987287, 0.995845,-0.06437,0.064418,1087.186642,-794.16656,2035.202153, 0.975635,-0.126671,0.179142,1085.391405,-804.053121,2049.987287, 0.975641,-0.159161,0.15097,1085.391405,-806.749765,2047.775876, 0.995845,-0.06437,0.064418,1087.186642,-794.16656,2035.202153, 0.975641,-0.159161,0.15097,1085.391405,-806.749765,2047.775876, 0.975648,-0.185535,0.116996,1085.391405,-808.962844,2045.081264, 0.995845,-0.06437,0.064418,1087.186642,-794.16656,2035.202153, 0.975648,-0.185535,0.116996,1085.391405,-808.962844,2045.081264, 0.975653,-0.204779,0.078525,1085.391405,-810.60731,2042.007003, 0.995845,-0.06437,0.064418,1087.186642,-794.16656,2035.202153, 0.975653,-0.204779,0.078525,1085.391405,-810.60731,2042.007003, 0.975657,-0.216153,0.037036,1085.391405,-811.619967,2038.671235, 0.995845,-0.06437,0.064418,1087.186642,-794.16656,2035.202153, 0.975657,-0.216153,0.037036,1085.391405,-811.619967,2038.671235, 0.979702,-0.199495,0.019663,1085.391405,-811.9619,2035.202153, 0.995845,-0.06437,0.064418,1087.186642,-794.16656,2035.202153, 1,0,0,993.755282,-883.626694,2052.983469, 1,0,0,993.755282,-1004.970888,2035.202153, 1,0,0,993.755282,-885.379322,2035.202153, 1,0,0,993.755282,-1004.970888,2035.202153, 1,0,0,993.755282,-883.626694,2052.983469, 1,0,0,993.755282,-1000.920342,2076.297043, 1,0,0,97.301517,-872.433668,2067.597018, 1,0,0,97.301517,-928.331516,2061.86911, 1,0,0,97.301517,-877.254479,2051.716912, 1,0,0,97.301517,-928.331516,2061.86911, 1,0,0,97.301517,-872.433668,2067.597018, 1,0,0,97.301517,-920.547185,2087.51127, -1,0,0,45.307526,-920.547185,2087.51127, -1,0,0,45.307526,-794.16656,2035.202153, -1,0,0,45.307526,-928.331516,2061.86911, -1,0,0,200.646178,-826.396761,2197.1122, -1,0,0,200.646178,-794.16656,2119.854015, -1,0,0,200.646178,-810.693775,2118.227454, -1,0,0,200.646178,-794.16656,2119.854015, -1,0,0,200.646178,-826.396761,2197.1122, -1,0,0,200.646178,-794.16656,2200.284205, -1,0,0,45.307526,-928.331516,2061.86911, -1,0,0,45.307526,-794.16656,2035.202153, -1,0,0,45.307526,-930.959963,2035.202153, -1,0,0,45.307526,-794.16656,2171.892463, -1,0,0,45.307526,-794.16656,2035.202153, -1,0,0,45.307526,-820.853629,2169.265997, -1,0,0,45.307526,-907.906118,2111.143221, -1,0,0,45.307526,-794.16656,2035.202153, -1,0,0,45.307526,-920.547185,2087.51127, -1,0,0,45.307526,-890.894103,2131.856798, -1,0,0,45.307526,-794.16656,2035.202153, -1,0,0,45.307526,-907.906118,2111.143221, -1,0,0,45.307526,-870.164903,2148.855992, -1,0,0,45.307526,-794.16656,2035.202153, -1,0,0,45.307526,-890.894103,2131.856798, -1,0,0,45.307526,-846.515129,2161.487533, -1,0,0,45.307526,-794.16656,2035.202153, -1,0,0,45.307526,-870.164903,2148.855992, -1,0,0,45.307526,-820.853629,2169.265997, -1,0,0,45.307526,-794.16656,2035.202153, -1,0,0,45.307526,-846.515129,2161.487533, -1,0,0,200.646178,-956.19872,2067.408064, -1,0,0,200.646178,-878.882267,2035.202153, -1,0,0,200.646178,-959.373118,2035.202153, -1,0,0,200.646178,-878.882267,2035.202153, -1,0,0,200.646178,-956.19872,2067.408064, -1,0,0,200.646178,-877.254479,2051.716912, -1,0,0,200.646178,-956.19872,2067.408064, -1,0,0,200.646178,-872.433668,2067.597018, -1,0,0,200.646178,-877.254479,2051.716912, -1,0,0,200.646178,-872.433668,2067.597018, -1,0,0,200.646178,-956.19872,2067.408064, -1,0,0,200.646178,-946.797518,2098.376319, -1,0,0,200.646178,-946.797518,2098.376319, -1,0,0,200.646178,-864.605096,2082.232208, -1,0,0,200.646178,-872.433668,2067.597018, -1,0,0,200.646178,-864.605096,2082.232208, -1,0,0,200.646178,-946.797518,2098.376319, -1,0,0,200.646178,-931.530793,2126.916827, -1,0,0,200.646178,-931.530793,2126.916827, -1,0,0,200.646178,-854.069611,2095.060059, -1,0,0,200.646178,-864.605096,2082.232208, -1,0,0,200.646178,-854.069611,2095.060059, -1,0,0,200.646178,-931.530793,2126.916827, -1,0,0,200.646178,-910.985237,2151.932791, -1,0,0,200.646178,-910.985237,2151.932791, -1,0,0,200.646178,-841.232085,2105.587604, -1,0,0,200.646178,-854.069611,2095.060059, -1,0,0,200.646178,-841.232085,2105.587604, -1,0,0,200.646178,-910.985237,2151.932791, -1,0,0,200.646178,-885.950406,2172.462863, -1,0,0,200.646178,-885.950406,2172.462863, -1,0,0,200.646178,-826.585858,2113.410276, -1,0,0,200.646178,-841.232085,2105.587604, -1,0,0,200.646178,-826.585858,2113.410276, -1,0,0,200.646178,-885.950406,2172.462863, -1,0,0,200.646178,-857.388373,2187.718082, -1,0,0,200.646178,-857.388373,2187.718082, -1,0,0,200.646178,-810.693775,2118.227454, -1,0,0,200.646178,-826.585858,2113.410276, -1,0,0,200.646178,-810.693775,2118.227454, -1,0,0,200.646178,-857.388373,2187.718082, -1,0,0,200.646178,-826.396761,2197.1122, -1,0,0,635.537065,-1000.920342,2076.297043, -1,0,0,635.537065,-959.373118,2035.202153, -1,0,0,635.537065,-1004.970888,2035.202153, -1,0,0,635.537065,-959.373118,2035.202153, -1,0,0,635.537065,-1000.920342,2076.297043, -1,0,0,635.537065,-956.19872,2067.408064, -1,0,0,635.537065,-1000.920342,2076.297043, -1,0,0,635.537065,-946.797518,2098.376319, -1,0,0,635.537065,-956.19872,2067.408064, -1,0,0,635.537065,-946.797518,2098.376319, -1,0,0,635.537065,-1000.920342,2076.297043, -1,0,0,635.537065,-988.924364,2115.81268, -1,0,0,635.537065,-988.924364,2115.81268, -1,0,0,635.537065,-931.530793,2126.916827, -1,0,0,635.537065,-946.797518,2098.376319, -1,0,0,635.537065,-931.530793,2126.916827, -1,0,0,635.537065,-988.924364,2115.81268, -1,0,0,635.537065,-969.443953,2152.230499, -1,0,0,635.537065,-969.443953,2152.230499, -1,0,0,635.537065,-910.985237,2151.932791, -1,0,0,635.537065,-931.530793,2126.916827, -1,0,0,635.537065,-910.985237,2151.932791, -1,0,0,635.537065,-969.443953,2152.230499, -1,0,0,635.537065,-943.22773,2184.150985, -1,0,0,635.537065,-943.22773,2184.150985, -1,0,0,635.537065,-885.950406,2172.462863, -1,0,0,635.537065,-910.985237,2151.932791, -1,0,0,635.537065,-885.950406,2172.462863, -1,0,0,635.537065,-943.22773,2184.150985, -1,0,0,635.537065,-911.28317,2210.34745, -1,0,0,635.537065,-911.28317,2210.34745, -1,0,0,635.537065,-857.388373,2187.718082, -1,0,0,635.537065,-885.950406,2172.462863, -1,0,0,635.537065,-857.388373,2187.718082, -1,0,0,635.537065,-911.28317,2210.34745, -1,0,0,635.537065,-874.837884,2229.81318, -1,0,0,635.537065,-874.837884,2229.81318, -1,0,0,635.537065,-826.396761,2197.1122, -1,0,0,635.537065,-857.388373,2187.718082, -1,0,0,635.537065,-826.396761,2197.1122, -1,0,0,635.537065,-874.837884,2229.81318, -1,0,0,635.537065,-835.292444,2241.800118, 1,0,0,993.755282,-794.16656,2126.346173, 1,0,0,993.755282,-835.292444,2241.800118, 1,0,0,993.755282,-811.961287,2124.594866, 1,0,0,993.755282,-835.292444,2241.800118, 1,0,0,993.755282,-794.16656,2126.346173, 1,0,0,993.755282,-794.16656,2245.847611, 1,0,0,993.755282,-878.436163,2070.08146, 1,0,0,993.755282,-1000.920342,2076.297043, 1,0,0,993.755282,-883.626694,2052.983469, 1,0,0,993.755282,-1000.920342,2076.297043, 1,0,0,993.755282,-878.436163,2070.08146, 1,0,0,993.755282,-988.924364,2115.81268, 1,0,0,993.755282,-870.007199,2085.839058, 1,0,0,993.755282,-988.924364,2115.81268, 1,0,0,993.755282,-878.436163,2070.08146, 1,0,0,993.755282,-988.924364,2115.81268, 1,0,0,993.755282,-870.007199,2085.839058, 1,0,0,993.755282,-969.443953,2152.230499, 1,0,0,993.755282,-858.663722,2099.650708, 1,0,0,993.755282,-969.443953,2152.230499, 1,0,0,993.755282,-870.007199,2085.839058, 1,0,0,993.755282,-969.443953,2152.230499, 1,0,0,993.755282,-858.663722,2099.650708, 1,0,0,993.755282,-943.22773,2184.150985, 1,0,0,993.755282,-844.841655,2110.985636, 1,0,0,993.755282,-943.22773,2184.150985, 1,0,0,993.755282,-858.663722,2099.650708, 1,0,0,993.755282,-943.22773,2184.150985, 1,0,0,993.755282,-844.841655,2110.985636, 1,0,0,993.755282,-911.28317,2210.34745, 1,0,0,993.755282,-829.072173,2119.408248, 1,0,0,993.755282,-911.28317,2210.34745, 1,0,0,993.755282,-844.841655,2110.985636, 1,0,0,993.755282,-911.28317,2210.34745, 1,0,0,993.755282,-829.072173,2119.408248, 1,0,0,993.755282,-874.837884,2229.81318, 1,0,0,993.755282,-811.961287,2124.594866, 1,0,0,993.755282,-874.837884,2229.81318, 1,0,0,993.755282,-829.072173,2119.408248, 1,0,0,993.755282,-874.837884,2229.81318, 1,0,0,993.755282,-811.961287,2124.594866, 1,0,0,993.755282,-835.292444,2241.800118, 1,0,0,97.301517,-877.254479,2051.716912, 1,0,0,97.301517,-930.959963,2035.202153, 1,0,0,97.301517,-878.882267,2035.202153, 1,0,0,97.301517,-930.959963,2035.202153, 1,0,0,97.301517,-877.254479,2051.716912, 1,0,0,97.301517,-928.331516,2061.86911, 1,0,0,97.301517,-854.069611,2095.060059, 1,0,0,97.301517,-907.906118,2111.143221, 1,0,0,97.301517,-864.605096,2082.232208, 1,0,0,97.301517,-907.906118,2111.143221, 1,0,0,97.301517,-854.069611,2095.060059, 1,0,0,97.301517,-890.894103,2131.856798, 1,0,0,97.301517,-864.605096,2082.232208, 1,0,0,97.301517,-920.547185,2087.51127, 1,0,0,97.301517,-872.433668,2067.597018, 1,0,0,97.301517,-920.547185,2087.51127, 1,0,0,97.301517,-864.605096,2082.232208, 1,0,0,97.301517,-907.906118,2111.143221, 1,0,0,97.301517,-826.585858,2113.410276, 1,0,0,97.301517,-870.164903,2148.855992, 1,0,0,97.301517,-841.232085,2105.587604, 1,0,0,97.301517,-870.164903,2148.855992, 1,0,0,97.301517,-826.585858,2113.410276, 1,0,0,97.301517,-846.515129,2161.487533, 1,0,0,97.301517,-841.232085,2105.587604, 1,0,0,97.301517,-890.894103,2131.856798, 1,0,0,97.301517,-854.069611,2095.060059, 1,0,0,97.301517,-890.894103,2131.856798, 1,0,0,97.301517,-841.232085,2105.587604, 1,0,0,97.301517,-870.164903,2148.855992, 1,0,0,97.301517,-794.16656,2119.854015, 1,0,0,97.301517,-820.853629,2169.265997, 1,0,0,97.301517,-810.693775,2118.227454, 1,0,0,97.301517,-820.853629,2169.265997, 1,0,0,97.301517,-794.16656,2119.854015, 1,0,0,97.301517,-794.16656,2171.892463, 1,0,0,97.301517,-810.693775,2118.227454, 1,0,0,97.301517,-846.515129,2161.487533, 1,0,0,97.301517,-826.585858,2113.410276, 1,0,0,97.301517,-846.515129,2161.487533, 1,0,0,97.301517,-810.693775,2118.227454, 1,0,0,97.301517,-820.853629,2169.265997 }; static const struct gllist robot_arm_half_frame = { GL_N3F_V3F, GL_TRIANGLES, 1104, robot_arm_half_data, 0 }; const struct gllist *robot_arm_half = &robot_arm_half_frame; static const float robot_body_half_inside_data[] = { 0.870883,0.172314,0.460294,-899.612557,-178.944064,1773.56823, 0.925281,0.091132,0.36817,-944.844672,0,1835.635445, 0.91848,0.181999,0.3511,-926.689746,-184.330051,1835.635445, 0.925281,0.091132,0.36817,-944.844672,0,1835.635445, 0.870883,0.172314,0.460294,-899.612557,-178.944064,1773.56823, 0.875139,0.086194,0.476133,-917.237009,0,1773.56823, 0.962266,0.094775,-0.255071,-964.850983,0,2169.851549, 0.91848,0.181999,-0.3511,-926.689746,-184.330051,2234.768955, 0.952958,0.189085,-0.236891,-946.311642,-188.233089,2169.851549, 0.91848,0.181999,-0.3511,-926.689746,-184.330051,2234.768955, 0.962266,0.094775,-0.255071,-964.850983,0,2169.851549, 0.925281,0.091132,-0.36817,-944.844672,0,2234.768955, 0.973826,0.193469,0.119297,-958.198007,-190.597434,1967.393306, 0.995185,0.098017,-0,-981.029284,-0,2035.2022, 0.973856,0.227168,-0,-962.179081,-191.389319,2035.2022, 0.995185,0.098017,-0,-981.029284,-0,2035.2022, 0.973826,0.193469,0.119297,-958.198007,-190.597434,1967.393306, 0.985604,0.097074,0.138423,-976.970216,-0,1967.393306, 0.740863,0.278762,0.611076,-776.888194,-321.797626,1661.47676, 0.810848,0.160167,0.562913,-865.466789,-172.152048,1715.237645, 0.764021,0.315278,0.562913,-815.251889,-337.688389,1715.237645, 0.810848,0.160167,0.562913,-865.466789,-172.152048,1715.237645, 0.740863,0.278762,0.611076,-776.888194,-321.797626,1661.47676, 0.781011,0.12887,0.611076,-824.740108,-164.051007,1661.47676, 0.662575,0.661607,0.3511,-668.106075,-668.106075,1835.635445, 0.808059,0.539373,0.236891,-802.244273,-536.042486,1900.552851, 0.687306,0.686654,0.236891,-682.252673,-682.252673,1900.552851, 0.808059,0.539373,0.236891,-802.244273,-536.042486,1900.552851, 0.662575,0.661607,0.3511,-668.106075,-668.106075,1835.635445, 0.778916,0.519633,0.3511,-785.609633,-524.927574,1835.635445, 0.876472,0.172332,0.449554,-721.176029,-143.450831,680.911024, 0.966069,0.095149,0.240119,-756.121025,0,741.194313, 0.961634,0.1904,0.197505,-741.592372,-147.511894,741.194313, 0.966069,0.095149,0.240119,-756.121025,0,741.194313, 0.876472,0.172332,0.449554,-721.176029,-143.450831,680.911024, 0.869022,0.085591,0.487313,-735.304703,0,680.911024, 0.91848,0.181999,-0.3511,-926.689746,-184.330051,2234.768955, 0.820532,0.338904,-0.460294,-847.416499,-351.011407,2296.83617, 0.865325,0.357689,-0.3511,-872.922654,-361.576402,2234.768955, 0.820532,0.338904,-0.460294,-847.416499,-351.011407,2296.83617, 0.91848,0.181999,-0.3511,-926.689746,-184.330051,2234.768955, 0.870883,0.172314,-0.460294,-899.612557,-178.944064,2296.83617, 0.160167,0.810848,-0.562913,-172.152048,-865.466789,2355.166755, -0.000898,0.887766,-0.460294,0,-917.237009,2296.83617, 0.172314,0.870883,-0.460294,-178.944064,-899.612557,2296.83617, -0.000898,0.887766,-0.460294,0,-917.237009,2296.83617, 0.160167,0.810848,-0.562913,-172.152048,-865.466789,2355.166755, -0.001099,0.826515,-0.562913,0,-882.422286,2355.166755, 0.632456,0.632456,-0.447214,-429.428666,-429.428666,1287.75132, 0.521108,0.727062,-0.447021,-389.30762,-582.640028,1100.8886, 0.632456,0.632456,-0.447214,-495.494614,-495.494614,1100.8886, 0.521108,0.727062,-0.447021,-389.30762,-582.640028,1100.8886, 0.632456,0.632456,-0.447214,-429.428666,-429.428666,1287.75132, 0.472298,0.759676,-0.447021,-337.399938,-504.954691,1287.75132, 0.189085,0.952958,-0.236891,-188.233089,-946.311642,2169.851549, 0.014067,0.991704,-0.12777,0,-976.970216,2103.011094, 0.138896,0.986639,-0.085149,-190.597434,-958.198007,2103.011094, 0.014067,0.991704,-0.12777,0,-976.970216,2103.011094, 0.189085,0.952958,-0.236891,-188.233089,-946.311642,2169.851549, 0,0.966617,-0.256224,0,-964.850983,2169.851549, 0.181999,0.91848,-0.3511,-184.330051,-926.689746,2234.768955, 0,0.966617,-0.256224,0,-964.850983,2169.851549, 0.189085,0.952958,-0.236891,-188.233089,-946.311642,2169.851549, 0,0.966617,-0.256224,0,-964.850983,2169.851549, 0.181999,0.91848,-0.3511,-184.330051,-926.689746,2234.768955, -0.014053,0.939213,-0.343046,0,-944.844672,2234.768955, 0.172314,0.870883,-0.460294,-178.944064,-899.612557,2296.83617, -0.014053,0.939213,-0.343046,0,-944.844672,2234.768955, 0.181999,0.91848,-0.3511,-184.330051,-926.689746,2234.768955, -0.014053,0.939213,-0.343046,0,-944.844672,2234.768955, 0.172314,0.870883,-0.460294,-178.944064,-899.612557,2296.83617, -0.000898,0.887766,-0.460294,0,-917.237009,2296.83617, 0.174075,0.870533,0.460294,-178.944064,-899.612557,1773.56823, 0.001099,0.826515,0.562913,0,-882.422286,1715.237645, 0.162323,0.81042,0.562913,-172.152048,-865.466789,1715.237645, 0.001099,0.826515,0.562913,0,-882.422286,1715.237645, 0.174075,0.870533,0.460294,-178.944064,-899.612557,1773.56823, 0.000898,0.887766,0.460294,0,-917.237009,1773.56823, 0.687306,0.686654,0.236891,-682.252673,-682.252673,1900.552851, 0.52077,0.778156,0.3511,-524.927574,-785.609633,1835.635445, 0.662575,0.661607,0.3511,-668.106075,-668.106075,1835.635445, 0.52077,0.778156,0.3511,-524.927574,-785.609633,1835.635445, 0.687306,0.686654,0.236891,-682.252673,-682.252673,1900.552851, 0.54014,0.807547,0.236891,-536.042486,-802.244273,1900.552851, 0.692994,0.720844,0.011969,-693.692459,-693.692459,2035.2022, 0.551796,0.825403,0.119297,-542.77557,-812.321046,1967.393306, 0.702221,0.701893,0.119297,-690.822265,-690.822265,1967.393306, 0.551796,0.825403,0.119297,-542.77557,-812.321046,1967.393306, 0.692994,0.720844,0.011969,-693.692459,-693.692459,2035.2022, 0.55557,0.83147,0,-545.030668,-815.696038,2035.2022, 0.814754,0.369253,-0.447021,-690.554573,-286.03707,1287.75132, 0.759676,0.472298,-0.447021,-543.79736,-363.353779,1474.61404, 0.727062,0.521108,-0.447021,-621.482696,-415.261462,1287.75132, 0.759676,0.472298,-0.447021,-543.79736,-363.353779,1474.61404, 0.814754,0.369253,-0.447021,-690.554573,-286.03707,1287.75132, 0.837219,0.315017,-0.447021,-604.235252,-250.282436,1474.61404, 0,0,-1,-747.450884,0,2408.92764, 0,0,-1,-824.740108,-164.051007,2408.92764, 0,0,-1,-840.897722,0,2408.92764, 0,0,-1,-824.740108,-164.051007,2408.92764, 0,0,-1,-747.450884,0,2408.92764, 0,0,-1,-776.888194,-321.797626,2408.92764, 0,0,-1,-776.888194,-321.797626,2408.92764, 0,0,-1,-747.450884,0,2408.92764, 0,0,-1,-733.088824,-145.820434,2408.92764, 0,0,-1,-776.888194,-321.797626,2408.92764, 0,0,-1,-733.088824,-145.820434,2408.92764, 0,0,-1,-699.180902,-467.177743,2408.92764, 0,0,-1,-699.180902,-467.177743,2408.92764, 0,0,-1,-733.088824,-145.820434,2408.92764, 0,0,-1,-690.554573,-286.03707,2408.92764, 0,0,-1,-699.180902,-467.177743,2408.92764, 0,0,-1,-690.554573,-286.03707,2408.92764, 0,0,-1,-594.604481,-594.604481,2408.92764, 0,0,-1,-594.604481,-594.604481,2408.92764, 0,0,-1,-690.554573,-286.03707,2408.92764, 0,0,-1,-621.482696,-415.261462,2408.92764, 0,0,-1,-594.604481,-594.604481,2408.92764, 0,0,-1,-621.482696,-415.261462,2408.92764, 0,0,-1,-528.527588,-528.527588,2408.92764, 0,0,-1,-594.604481,-594.604481,2408.92764, 0,0,-1,-528.527588,-528.527588,2408.92764, 0,0,-1,-467.177743,-699.180902,2408.92764, 0,0,-1,-467.177743,-699.180902,2408.92764, 0,0,-1,-528.527588,-528.527588,2408.92764, 0,0,-1,-415.261462,-621.482696,2408.92764, 0,0,-1,-467.177743,-699.180902,2408.92764, 0,0,-1,-415.261462,-621.482696,2408.92764, 0,0,-1,-321.797626,-776.888194,2408.92764, 0,0,-1,-321.797626,-776.888194,2408.92764, 0,0,-1,-415.261462,-621.482696,2408.92764, 0,0,-1,-286.03707,-690.554573,2408.92764, 0,0,-1,-321.797626,-776.888194,2408.92764, 0,0,-1,-286.03707,-690.554573,2408.92764, 0,0,-1,-164.051007,-824.740108,2408.92764, 0,0,-1,-164.051007,-824.740108,2408.92764, 0,0,-1,-286.03707,-690.554573,2408.92764, 0,0,-1,-145.820434,-733.088824,2408.92764, 0,0,-1,-164.051007,-824.740108,2408.92764, 0,0,-1,-145.820434,-733.088824,2408.92764, 0,0,-1,0,-840.897722,2408.92764, 0,0,-1,0,-840.897722,2408.92764, 0,0,-1,-145.820434,-733.088824,2408.92764, 0,0,-1,0,-747.450884,2408.92764, 0,0,-1,0,-840.897722,2408.92764, 0,0,-1,0,-747.450884,2408.92764, 0,0,-1,145.820434,-733.088824,2408.92764, 0,0,-1,0,-840.897722,2408.92764, 0,0,-1,145.820434,-733.088824,2408.92764, 0,0,-1,164.051007,-824.740108,2408.92764, 0,0,-1,164.051007,-824.740108,2408.92764, 0,0,-1,145.820434,-733.088824,2408.92764, 0,0,-1,286.03707,-690.554573,2408.92764, 0,0,-1,164.051007,-824.740108,2408.92764, 0,0,-1,286.03707,-690.554573,2408.92764, 0,0,-1,321.797626,-776.888194,2408.92764, 0,0,-1,321.797626,-776.888194,2408.92764, 0,0,-1,286.03707,-690.554573,2408.92764, 0,0,-1,415.261462,-621.482696,2408.92764, 0,0,-1,321.797626,-776.888194,2408.92764, 0,0,-1,415.261462,-621.482696,2408.92764, 0,0,-1,467.177743,-699.180902,2408.92764, 0,0,-1,467.177743,-699.180902,2408.92764, 0,0,-1,415.261462,-621.482696,2408.92764, 0,0,-1,528.527588,-528.527588,2408.92764, 0,0,-1,467.177743,-699.180902,2408.92764, 0,0,-1,528.527588,-528.527588,2408.92764, 0,0,-1,594.604481,-594.604481,2408.92764, 0,0,-1,594.604481,-594.604481,2408.92764, 0,0,-1,528.527588,-528.527588,2408.92764, 0,0,-1,621.482696,-415.261462,2408.92764, 0,0,-1,594.604481,-594.604481,2408.92764, 0,0,-1,621.482696,-415.261462,2408.92764, 0,0,-1,699.180902,-467.177743,2408.92764, 0,0,-1,699.180902,-467.177743,2408.92764, 0,0,-1,621.482696,-415.261462,2408.92764, 0,0,-1,690.554573,-286.03707,2408.92764, 0,0,-1,699.180902,-467.177743,2408.92764, 0,0,-1,690.554573,-286.03707,2408.92764, 0,0,-1,733.088824,-145.820434,2408.92764, 0,0,-1,699.180902,-467.177743,2408.92764, 0,0,-1,733.088824,-145.820434,2408.92764, 0,0,-1,776.888194,-321.797626,2408.92764, 0,0,-1,776.888194,-321.797626,2408.92764, 0,0,-1,733.088824,-145.820434,2408.92764, 0,0,-1,747.450884,-0,2408.92764, 0,0,-1,776.888194,-321.797626,2408.92764, 0,0,-1,747.450884,-0,2408.92764, 0,0,-1,840.897722,-0,2408.92764, 0,0,-1,776.888194,-321.797626,2408.92764, 0,0,-1,840.897722,-0,2408.92764, 0,0,-1,824.740108,-164.051007,2408.92764, 0,0,1,-824.740108,-164.051007,1661.47676, 0,0,1,-700.735204,0,1661.47676, 0,0,1,-840.897722,0,1661.47676, 0,0,1,-700.735204,0,1661.47676, 0,0,1,-824.740108,-164.051007,1661.47676, 0,0,1,-776.888194,-321.797626,1661.47676, 0,0,1,-700.735204,0,1661.47676, 0,0,1,-776.888194,-321.797626,1661.47676, 0,0,1,-699.180902,-467.177743,1661.47676, 0,0,1,-700.735204,0,1661.47676, 0,0,1,-699.180902,-467.177743,1661.47676, 0,0,1,-687.270773,-136.706657,1661.47676, 0,0,1,-687.270773,-136.706657,1661.47676, 0,0,1,-699.180902,-467.177743,1661.47676, 0,0,1,-594.604481,-594.604481,1661.47676, 0,0,1,-687.270773,-136.706657,1661.47676, 0,0,1,-594.604481,-594.604481,1661.47676, 0,0,1,-647.394912,-268.159753,1661.47676, 0,0,1,-647.394912,-268.159753,1661.47676, 0,0,1,-594.604481,-594.604481,1661.47676, 0,0,1,-582.640028,-389.30762,1661.47676, 0,0,1,-582.640028,-389.30762,1661.47676, 0,0,1,-594.604481,-594.604481,1661.47676, 0,0,1,-467.177743,-699.180902,1661.47676, 0,0,1,-582.640028,-389.30762,1661.47676, 0,0,1,-467.177743,-699.180902,1661.47676, 0,0,1,-495.494614,-495.494614,1661.47676, 0,0,1,-495.494614,-495.494614,1661.47676, 0,0,1,-467.177743,-699.180902,1661.47676, 0,0,1,-389.30762,-582.640028,1661.47676, 0,0,1,-389.30762,-582.640028,1661.47676, 0,0,1,-467.177743,-699.180902,1661.47676, 0,0,1,-321.797626,-776.888194,1661.47676, 0,0,1,-389.30762,-582.640028,1661.47676, 0,0,1,-321.797626,-776.888194,1661.47676, 0,0,1,-268.159753,-647.394912,1661.47676, 0,0,1,-268.159753,-647.394912,1661.47676, 0,0,1,-321.797626,-776.888194,1661.47676, 0,0,1,-164.051007,-824.740108,1661.47676, 0,0,1,-268.159753,-647.394912,1661.47676, 0,0,1,-164.051007,-824.740108,1661.47676, 0,0,1,-136.706657,-687.270773,1661.47676, 0,0,1,-136.706657,-687.270773,1661.47676, 0,0,1,-164.051007,-824.740108,1661.47676, 0,0,1,0,-840.897722,1661.47676, 0,0,1,-136.706657,-687.270773,1661.47676, 0,0,1,0,-840.897722,1661.47676, 0,0,1,0,-700.735204,1661.47676, 0,0,1,0,-700.735204,1661.47676, 0,0,1,0,-840.897722,1661.47676, 0,0,1,164.051007,-824.740108,1661.47676, 0,0,1,0,-700.735204,1661.47676, 0,0,1,164.051007,-824.740108,1661.47676, 0,0,1,136.706657,-687.270773,1661.47676, 0,0,1,136.706657,-687.270773,1661.47676, 0,0,1,164.051007,-824.740108,1661.47676, 0,0,1,268.159753,-647.394912,1661.47676, 0,0,1,268.159753,-647.394912,1661.47676, 0,0,1,164.051007,-824.740108,1661.47676, 0,0,1,321.797626,-776.888194,1661.47676, 0,0,1,268.159753,-647.394912,1661.47676, 0,0,1,321.797626,-776.888194,1661.47676, 0,0,1,389.30762,-582.640028,1661.47676, 0,0,1,389.30762,-582.640028,1661.47676, 0,0,1,321.797626,-776.888194,1661.47676, 0,0,1,467.177743,-699.180902,1661.47676, 0,0,1,389.30762,-582.640028,1661.47676, 0,0,1,467.177743,-699.180902,1661.47676, 0,0,1,495.494614,-495.494614,1661.47676, 0,0,1,495.494614,-495.494614,1661.47676, 0,0,1,467.177743,-699.180902,1661.47676, 0,0,1,594.604481,-594.604481,1661.47676, 0,0,1,495.494614,-495.494614,1661.47676, 0,0,1,594.604481,-594.604481,1661.47676, 0,0,1,582.640028,-389.30762,1661.47676, 0,0,1,582.640028,-389.30762,1661.47676, 0,0,1,594.604481,-594.604481,1661.47676, 0,0,1,647.394912,-268.159753,1661.47676, 0,0,1,647.394912,-268.159753,1661.47676, 0,0,1,594.604481,-594.604481,1661.47676, 0,0,1,699.180902,-467.177743,1661.47676, 0,0,1,647.394912,-268.159753,1661.47676, 0,0,1,699.180902,-467.177743,1661.47676, 0,0,1,687.270773,-136.706657,1661.47676, 0,0,1,687.270773,-136.706657,1661.47676, 0,0,1,699.180902,-467.177743,1661.47676, 0,0,1,700.735204,-0,1661.47676, 0,0,1,700.735204,-0,1661.47676, 0,0,1,699.180902,-467.177743,1661.47676, 0,0,1,776.888194,-321.797626,1661.47676, 0,0,1,700.735204,-0,1661.47676, 0,0,1,776.888194,-321.797626,1661.47676, 0,0,1,840.897722,-0,1661.47676, 0,0,1,840.897722,-0,1661.47676, 0,0,1,776.888194,-321.797626,1661.47676, 0,0,1,824.740108,-164.051007,1661.47676, 0,0,1,-778.906876,-154.934211,1474.61404, 0,0,1,-654.019524,0,1474.61404, 0,0,1,-794.166564,0,1474.61404, 0,0,1,-654.019524,0,1474.61404, 0,0,1,-778.906876,-154.934211,1474.61404, 0,0,1,-733.714234,-303.914386,1474.61404, 0,0,1,-654.019524,0,1474.61404, 0,0,1,-733.714234,-303.914386,1474.61404, 0,0,1,-660.325365,-441.215303,1474.61404, 0,0,1,-654.019524,0,1474.61404, 0,0,1,-660.325365,-441.215303,1474.61404, 0,0,1,-641.452722,-127.592879,1474.61404, 0,0,1,-641.452722,-127.592879,1474.61404, 0,0,1,-660.325365,-441.215303,1474.61404, 0,0,1,-561.560563,-561.560563,1474.61404, 0,0,1,-641.452722,-127.592879,1474.61404, 0,0,1,-561.560563,-561.560563,1474.61404, 0,0,1,-604.235252,-250.282436,1474.61404, 0,0,1,-604.235252,-250.282436,1474.61404, 0,0,1,-561.560563,-561.560563,1474.61404, 0,0,1,-543.79736,-363.353779,1474.61404, 0,0,1,-543.79736,-363.353779,1474.61404, 0,0,1,-561.560563,-561.560563,1474.61404, 0,0,1,-441.215303,-660.325365,1474.61404, 0,0,1,-543.79736,-363.353779,1474.61404, 0,0,1,-441.215303,-660.325365,1474.61404, 0,0,1,-462.46164,-462.46164,1474.61404, 0,0,1,-462.46164,-462.46164,1474.61404, 0,0,1,-441.215303,-660.325365,1474.61404, 0,0,1,-363.353779,-543.79736,1474.61404, 0,0,1,-363.353779,-543.79736,1474.61404, 0,0,1,-441.215303,-660.325365,1474.61404, 0,0,1,-303.914386,-733.714234,1474.61404, 0,0,1,-363.353779,-543.79736,1474.61404, 0,0,1,-303.914386,-733.714234,1474.61404, 0,0,1,-250.282436,-604.235252,1474.61404, 0,0,1,-250.282436,-604.235252,1474.61404, 0,0,1,-303.914386,-733.714234,1474.61404, 0,0,1,-154.934211,-778.906876,1474.61404, 0,0,1,-250.282436,-604.235252,1474.61404, 0,0,1,-154.934211,-778.906876,1474.61404, 0,0,1,-127.592879,-641.452722,1474.61404, 0,0,1,-127.592879,-641.452722,1474.61404, 0,0,1,-154.934211,-778.906876,1474.61404, 0,0,1,0,-794.166564,1474.61404, 0,0,1,-127.592879,-641.452722,1474.61404, 0,0,1,0,-794.166564,1474.61404, 0,0,1,0,-654.019524,1474.61404, 0,0,1,0,-654.019524,1474.61404, 0,0,1,0,-794.166564,1474.61404, 0,0,1,154.934211,-778.906876,1474.61404, 0,0,1,0,-654.019524,1474.61404, 0,0,1,154.934211,-778.906876,1474.61404, 0,0,1,127.592879,-641.452722,1474.61404, 0,0,1,127.592879,-641.452722,1474.61404, 0,0,1,154.934211,-778.906876,1474.61404, 0,0,1,250.282436,-604.235252,1474.61404, 0,0,1,250.282436,-604.235252,1474.61404, 0,0,1,154.934211,-778.906876,1474.61404, 0,0,1,303.914386,-733.714234,1474.61404, 0,0,1,250.282436,-604.235252,1474.61404, 0,0,1,303.914386,-733.714234,1474.61404, 0,0,1,363.353779,-543.79736,1474.61404, 0,0,1,363.353779,-543.79736,1474.61404, 0,0,1,303.914386,-733.714234,1474.61404, 0,0,1,441.215303,-660.325365,1474.61404, 0,0,1,363.353779,-543.79736,1474.61404, 0,0,1,441.215303,-660.325365,1474.61404, 0,0,1,462.46164,-462.46164,1474.61404, 0,0,1,462.46164,-462.46164,1474.61404, 0,0,1,441.215303,-660.325365,1474.61404, 0,0,1,561.560563,-561.560563,1474.61404, 0,0,1,462.46164,-462.46164,1474.61404, 0,0,1,561.560563,-561.560563,1474.61404, 0,0,1,543.79736,-363.353779,1474.61404, 0,0,1,543.79736,-363.353779,1474.61404, 0,0,1,561.560563,-561.560563,1474.61404, 0,0,1,604.235252,-250.282436,1474.61404, 0,0,1,604.235252,-250.282436,1474.61404, 0,0,1,561.560563,-561.560563,1474.61404, 0,0,1,660.325365,-441.215303,1474.61404, 0,0,1,604.235252,-250.282436,1474.61404, 0,0,1,660.325365,-441.215303,1474.61404, 0,0,1,641.452722,-127.592879,1474.61404, 0,0,1,641.452722,-127.592879,1474.61404, 0,0,1,660.325365,-441.215303,1474.61404, 0,0,1,654.019524,-0,1474.61404, 0,0,1,654.019524,-0,1474.61404, 0,0,1,660.325365,-441.215303,1474.61404, 0,0,1,794.166564,-0,1474.61404, 0,0,1,794.166564,-0,1474.61404, 0,0,1,660.325365,-441.215303,1474.61404, 0,0,1,733.714234,-303.914386,1474.61404, 0,0,1,794.166564,-0,1474.61404, 0,0,1,733.714234,-303.914386,1474.61404, 0,0,1,778.906876,-154.934211,1474.61404, 0,0,1,-687.270773,-136.706657,1100.8886, 0,0,1,-467.156804,0,1100.8886, 0,0,1,-700.735204,0,1100.8886, 0,0,1,-467.156804,0,1100.8886, 0,0,1,-687.270773,-136.706657,1100.8886, 0,0,1,-647.394912,-268.159753,1100.8886, 0,0,1,-467.156804,0,1100.8886, 0,0,1,-647.394912,-268.159753,1100.8886, 0,0,1,-582.640028,-389.30762,1100.8886, 0,0,1,-467.156804,0,1100.8886, 0,0,1,-582.640028,-389.30762,1100.8886, 0,0,1,-495.494614,-495.494614,1100.8886, 0,0,1,-467.156804,0,1100.8886, 0,0,1,-495.494614,-495.494614,1100.8886, 0,0,1,-458.180517,-91.137771,1100.8886, 0,0,1,-458.180517,-91.137771,1100.8886, 0,0,1,-495.494614,-495.494614,1100.8886, 0,0,1,-389.30762,-582.640028,1100.8886, 0,0,1,-458.180517,-91.137771,1100.8886, 0,0,1,-389.30762,-582.640028,1100.8886, 0,0,1,-431.596609,-178.773169,1100.8886, 0,0,1,-431.596609,-178.773169,1100.8886, 0,0,1,-389.30762,-582.640028,1100.8886, 0,0,1,-388.426686,-259.538414,1100.8886, 0,0,1,-388.426686,-259.538414,1100.8886, 0,0,1,-389.30762,-582.640028,1100.8886, 0,0,1,-268.159753,-647.394912,1100.8886, 0,0,1,-388.426686,-259.538414,1100.8886, 0,0,1,-268.159753,-647.394912,1100.8886, 0,0,1,-330.329744,-330.329744,1100.8886, 0,0,1,-330.329744,-330.329744,1100.8886, 0,0,1,-268.159753,-647.394912,1100.8886, 0,0,1,-259.538414,-388.426686,1100.8886, 0,0,1,-259.538414,-388.426686,1100.8886, 0,0,1,-268.159753,-647.394912,1100.8886, 0,0,1,-136.706657,-687.270773,1100.8886, 0,0,1,-259.538414,-388.426686,1100.8886, 0,0,1,-136.706657,-687.270773,1100.8886, 0,0,1,-178.773169,-431.596609,1100.8886, 0,0,1,-178.773169,-431.596609,1100.8886, 0,0,1,-136.706657,-687.270773,1100.8886, 0,0,1,-91.137771,-458.180517,1100.8886, 0,0,1,-91.137771,-458.180517,1100.8886, 0,0,1,-136.706657,-687.270773,1100.8886, 0,0,1,0,-700.735204,1100.8886, 0,0,1,-91.137771,-458.180517,1100.8886, 0,0,1,0,-700.735204,1100.8886, 0,0,1,0,-467.156804,1100.8886, 0,0,1,0,-467.156804,1100.8886, 0,0,1,0,-700.735204,1100.8886, 0,0,1,136.706657,-687.270773,1100.8886, 0,0,1,0,-467.156804,1100.8886, 0,0,1,136.706657,-687.270773,1100.8886, 0,0,1,91.137771,-458.180517,1100.8886, 0,0,1,91.137771,-458.180517,1100.8886, 0,0,1,136.706657,-687.270773,1100.8886, 0,0,1,178.773169,-431.596609,1100.8886, 0,0,1,178.773169,-431.596609,1100.8886, 0,0,1,136.706657,-687.270773,1100.8886, 0,0,1,268.159753,-647.394912,1100.8886, 0,0,1,178.773169,-431.596609,1100.8886, 0,0,1,268.159753,-647.394912,1100.8886, 0,0,1,259.538414,-388.426686,1100.8886, 0,0,1,259.538414,-388.426686,1100.8886, 0,0,1,268.159753,-647.394912,1100.8886, 0,0,1,330.329744,-330.329744,1100.8886, 0,0,1,330.329744,-330.329744,1100.8886, 0,0,1,268.159753,-647.394912,1100.8886, 0,0,1,389.30762,-582.640028,1100.8886, 0,0,1,330.329744,-330.329744,1100.8886, 0,0,1,389.30762,-582.640028,1100.8886, 0,0,1,388.426686,-259.538414,1100.8886, 0,0,1,388.426686,-259.538414,1100.8886, 0,0,1,389.30762,-582.640028,1100.8886, 0,0,1,431.596609,-178.773169,1100.8886, 0,0,1,431.596609,-178.773169,1100.8886, 0,0,1,389.30762,-582.640028,1100.8886, 0,0,1,495.494614,-495.494614,1100.8886, 0,0,1,431.596609,-178.773169,1100.8886, 0,0,1,495.494614,-495.494614,1100.8886, 0,0,1,458.180517,-91.137771,1100.8886, 0,0,1,458.180517,-91.137771,1100.8886, 0,0,1,495.494614,-495.494614,1100.8886, 0,0,1,467.156804,0,1100.8886, 0,0,1,467.156804,0,1100.8886, 0,0,1,495.494614,-495.494614,1100.8886, 0,0,1,700.735204,-0,1100.8886, 0,0,1,700.735204,-0,1100.8886, 0,0,1,495.494614,-495.494614,1100.8886, 0,0,1,582.640028,-389.30762,1100.8886, 0,0,1,700.735204,-0,1100.8886, 0,0,1,582.640028,-389.30762,1100.8886, 0,0,1,647.394912,-268.159753,1100.8886, 0,0,1,700.735204,-0,1100.8886, 0,0,1,647.394912,-268.159753,1100.8886, 0,0,1,687.270773,-136.706657,1100.8886, 0,0,1,-733.088824,-145.820434,1287.75132, 0,0,1,-607.303844,0,1287.75132, 0,0,1,-747.450884,0,1287.75132, 0,0,1,-607.303844,0,1287.75132, 0,0,1,-733.088824,-145.820434,1287.75132, 0,0,1,-690.554573,-286.03707,1287.75132, 0,0,1,-607.303844,0,1287.75132, 0,0,1,-690.554573,-286.03707,1287.75132, 0,0,1,-621.482696,-415.261462,1287.75132, 0,0,1,-607.303844,0,1287.75132, 0,0,1,-621.482696,-415.261462,1287.75132, 0,0,1,-595.634671,-118.479102,1287.75132, 0,0,1,-595.634671,-118.479102,1287.75132, 0,0,1,-621.482696,-415.261462,1287.75132, 0,0,1,-528.527588,-528.527588,1287.75132, 0,0,1,-595.634671,-118.479102,1287.75132, 0,0,1,-528.527588,-528.527588,1287.75132, 0,0,1,-561.075591,-232.405119,1287.75132, 0,0,1,-561.075591,-232.405119,1287.75132, 0,0,1,-528.527588,-528.527588,1287.75132, 0,0,1,-504.954691,-337.399938,1287.75132, 0,0,1,-504.954691,-337.399938,1287.75132, 0,0,1,-528.527588,-528.527588,1287.75132, 0,0,1,-415.261462,-621.482696,1287.75132, 0,0,1,-504.954691,-337.399938,1287.75132, 0,0,1,-415.261462,-621.482696,1287.75132, 0,0,1,-429.428666,-429.428666,1287.75132, 0,0,1,-429.428666,-429.428666,1287.75132, 0,0,1,-415.261462,-621.482696,1287.75132, 0,0,1,-337.399938,-504.954691,1287.75132, 0,0,1,-337.399938,-504.954691,1287.75132, 0,0,1,-415.261462,-621.482696,1287.75132, 0,0,1,-286.03707,-690.554573,1287.75132, 0,0,1,-337.399938,-504.954691,1287.75132, 0,0,1,-286.03707,-690.554573,1287.75132, 0,0,1,-232.405119,-561.075591,1287.75132, 0,0,1,-232.405119,-561.075591,1287.75132, 0,0,1,-286.03707,-690.554573,1287.75132, 0,0,1,-145.820434,-733.088824,1287.75132, 0,0,1,-232.405119,-561.075591,1287.75132, 0,0,1,-145.820434,-733.088824,1287.75132, 0,0,1,-118.479102,-595.634671,1287.75132, 0,0,1,-118.479102,-595.634671,1287.75132, 0,0,1,-145.820434,-733.088824,1287.75132, 0,0,1,0,-747.450884,1287.75132, 0,0,1,-118.479102,-595.634671,1287.75132, 0,0,1,0,-747.450884,1287.75132, 0,0,1,0,-607.303844,1287.75132, 0,0,1,0,-607.303844,1287.75132, 0,0,1,0,-747.450884,1287.75132, 0,0,1,145.820434,-733.088824,1287.75132, 0,0,1,0,-607.303844,1287.75132, 0,0,1,145.820434,-733.088824,1287.75132, 0,0,1,118.479102,-595.634671,1287.75132, 0,0,1,118.479102,-595.634671,1287.75132, 0,0,1,145.820434,-733.088824,1287.75132, 0,0,1,232.405119,-561.075591,1287.75132, 0,0,1,232.405119,-561.075591,1287.75132, 0,0,1,145.820434,-733.088824,1287.75132, 0,0,1,286.03707,-690.554573,1287.75132, 0,0,1,232.405119,-561.075591,1287.75132, 0,0,1,286.03707,-690.554573,1287.75132, 0,0,1,337.399938,-504.954691,1287.75132, 0,0,1,337.399938,-504.954691,1287.75132, 0,0,1,286.03707,-690.554573,1287.75132, 0,0,1,415.261462,-621.482696,1287.75132, 0,0,1,337.399938,-504.954691,1287.75132, 0,0,1,415.261462,-621.482696,1287.75132, 0,0,1,429.428666,-429.428666,1287.75132, 0,0,1,429.428666,-429.428666,1287.75132, 0,0,1,415.261462,-621.482696,1287.75132, 0,0,1,528.527588,-528.527588,1287.75132, 0,0,1,429.428666,-429.428666,1287.75132, 0,0,1,528.527588,-528.527588,1287.75132, 0,0,1,504.954691,-337.399938,1287.75132, 0,0,1,504.954691,-337.399938,1287.75132, 0,0,1,528.527588,-528.527588,1287.75132, 0,0,1,561.075591,-232.405119,1287.75132, 0,0,1,561.075591,-232.405119,1287.75132, 0,0,1,528.527588,-528.527588,1287.75132, 0,0,1,621.482696,-415.261462,1287.75132, 0,0,1,561.075591,-232.405119,1287.75132, 0,0,1,621.482696,-415.261462,1287.75132, 0,0,1,595.634671,-118.479102,1287.75132, 0,0,1,595.634671,-118.479102,1287.75132, 0,0,1,621.482696,-415.261462,1287.75132, 0,0,1,607.303844,-0,1287.75132, 0,0,1,607.303844,-0,1287.75132, 0,0,1,621.482696,-415.261462,1287.75132, 0,0,1,747.450884,-0,1287.75132, 0,0,1,747.450884,-0,1287.75132, 0,0,1,621.482696,-415.261462,1287.75132, 0,0,1,690.554573,-286.03707,1287.75132, 0,0,1,747.450884,-0,1287.75132, 0,0,1,690.554573,-286.03707,1287.75132, 0,0,1,733.088824,-145.820434,1287.75132, 0.024376,0.742479,0.669425,0,-699.298837,628.271002, 0.105345,0.638437,0.762431,-126.938055,-638.160695,587.016307, 0.168758,0.723457,0.669425,-136.426435,-685.862006,628.271002, 0.105345,0.638437,0.762431,-126.938055,-638.160695,587.016307, 0.024376,0.742479,0.669425,0,-699.298837,628.271002, -0.021232,0.646722,0.762431,0,-650.663002,587.016307, 0.380165,0.917193,0.119297,-373.870315,-902.602786,1967.393306, 0.18999,0.952778,0.236891,-188.233089,-946.311642,1900.552851, 0.372217,0.897406,0.236891,-369.232486,-891.406075,1900.552851, 0.18999,0.952778,0.236891,-188.233089,-946.311642,1900.552851, 0.380165,0.917193,0.119297,-373.870315,-902.602786,1967.393306, 0.193925,0.973736,0.119297,-190.597434,-958.198007,1967.393306, 0.632456,0.632456,-0.447214,-462.46164,-462.46164,1474.61404, 0.521108,0.727062,-0.447021,-415.261462,-621.482696,1287.75132, 0.632456,0.632456,-0.447214,-528.527588,-528.527588,1287.75132, 0.521108,0.727062,-0.447021,-415.261462,-621.482696,1287.75132, 0.632456,0.632456,-0.447214,-462.46164,-462.46164,1474.61404, 0.472298,0.759676,-0.447021,-363.353779,-543.79736,1474.61404, 0.917371,0.379736,-0.119297,-902.602786,-373.870315,2103.011094, 0.808059,0.539373,-0.236891,-802.244273,-536.042486,2169.851549, 0.825661,0.55141,-0.119297,-812.321046,-542.77557,2103.011094, 0.808059,0.539373,-0.236891,-802.244273,-536.042486,2169.851549, 0.917371,0.379736,-0.119297,-902.602786,-373.870315,2103.011094, 0.897759,0.371365,-0.236891,-891.406075,-369.232486,2169.851549, 0.812792,0.582554,0,-815.696038,-545.030668,2035.2022, 0.7036,0.7036,-0.099466,-690.822265,-690.822265,2103.011094, 0.692994,0.720844,0.011969,-693.692459,-693.692459,2035.2022, 0.7036,0.7036,-0.099466,-690.822265,-690.822265,2103.011094, 0.812792,0.582554,0,-815.696038,-545.030668,2035.2022, 0.825661,0.55141,-0.119297,-812.321046,-542.77557,2103.011094, 0.825661,0.55141,-0.119297,-812.321046,-542.77557,2103.011094, 0.690185,0.690185,-0.217461,-682.252673,-682.252673,2169.851549, 0.7036,0.7036,-0.099466,-690.822265,-690.822265,2103.011094, 0.690185,0.690185,-0.217461,-682.252673,-682.252673,2169.851549, 0.825661,0.55141,-0.119297,-812.321046,-542.77557,2103.011094, 0.808059,0.539373,-0.236891,-802.244273,-536.042486,2169.851549, 0.808059,0.539373,-0.236891,-802.244273,-536.042486,2169.851549, 0.666912,0.666912,-0.332349,-668.106075,-668.106075,2234.768955, 0.690185,0.690185,-0.217461,-682.252673,-682.252673,2169.851549, 0.666912,0.666912,-0.332349,-668.106075,-668.106075,2234.768955, 0.808059,0.539373,-0.236891,-802.244273,-536.042486,2169.851549, 0.778916,0.519633,-0.3511,-785.609633,-524.927574,2234.768955, 0.778916,0.519633,-0.3511,-785.609633,-524.927574,2234.768955, 0.634114,0.634114,-0.442491,-648.584509,-648.584509,2296.83617, 0.666912,0.666912,-0.332349,-668.106075,-668.106075,2234.768955, 0.634114,0.634114,-0.442491,-648.584509,-648.584509,2296.83617, 0.778916,0.519633,-0.3511,-785.609633,-524.927574,2234.768955, 0.738649,0.49247,-0.460294,-762.654701,-509.589579,2296.83617, -0.69529,0.261614,0.669425,646.067883,-267.610079,628.271002, -0.630153,0.146993,0.762431,638.160695,-126.938055,587.016307, -0.589368,0.267106,0.762431,601.13423,-248.997951,587.016307, -0.630153,0.146993,0.762431,638.160695,-126.938055,587.016307, -0.69529,0.261614,0.669425,646.067883,-267.610079,628.271002, -0.732968,0.120943,0.669425,685.862006,-136.426435,628.271002, -0.869022,0.085591,0.487313,735.304703,-0,680.911024, -0.732968,0.120943,0.669425,685.862006,-136.426435,628.271002, -0.876472,0.172332,0.449554,721.176029,-143.450831,680.911024, -0.732968,0.120943,0.669425,685.862006,-136.426435,628.271002, -0.869022,0.085591,0.487313,735.304703,-0,680.911024, -0.740721,0.072955,0.66784,699.298837,-0,628.271002, -0.966069,0.095149,0.240119,756.121025,-0,741.194313, -0.876472,0.172332,0.449554,721.176029,-143.450831,680.911024, -0.961634,0.1904,0.197505,741.592372,-147.511894,741.194313, -0.876472,0.172332,0.449554,721.176029,-143.450831,680.911024, -0.966069,0.095149,0.240119,756.121025,-0,741.194313, -0.869022,0.085591,0.487313,735.304703,-0,680.911024, 0.687833,0.458274,0.562913,-733.707316,-490.247555,1715.237645, 0.820532,0.338904,0.460294,-847.416499,-351.011407,1773.56823, 0.738649,0.49247,0.460294,-762.654701,-509.589579,1773.56823, 0.820532,0.338904,0.460294,-847.416499,-351.011407,1773.56823, 0.687833,0.458274,0.562913,-733.707316,-490.247555,1715.237645, 0.764021,0.315278,0.562913,-815.251889,-337.688389,1715.237645, -0.992863,0.097788,-0.068268,760.268019,-0,804.835469, -0.961634,0.1904,0.197505,741.592372,-147.511894,741.194313, -0.971564,0.226633,-0.06856,745.659682,-148.320933,804.835469, -0.961634,0.1904,0.197505,741.592372,-147.511894,741.194313, -0.992863,0.097788,-0.068268,760.268019,-0,804.835469, -0.966069,0.095149,0.240119,756.121025,-0,741.194313, -0.966549,0.159485,-0.200867,733.088824,-145.820434,867.310387, -0.992863,0.097788,-0.068268,760.268019,-0,804.835469, -0.971564,0.226633,-0.06856,745.659682,-148.320933,804.835469, -0.992863,0.097788,-0.068268,760.268019,-0,804.835469, -0.966549,0.159485,-0.200867,733.088824,-145.820434,867.310387, -0.975069,0.096036,-0.200042,747.450884,-0,867.310387, -0.638915,0.062928,-0.766699,467.156804,0,1100.8886, -0.631844,0.104257,-0.768052,733.088824,-145.820434,867.310387, -0.623645,0.145475,-0.768052,458.180517,-91.137771,1100.8886, -0.631844,0.104257,-0.768052,733.088824,-145.820434,867.310387, -0.638915,0.062928,-0.766699,467.156804,0,1100.8886, -0.638915,0.062928,-0.766699,747.450884,-0,867.310387, 0.814754,0.369253,-0.447021,-733.714234,-303.914386,1474.61404, 0.759676,0.472298,-0.447021,-582.640028,-389.30762,1661.47676, 0.727062,0.521108,-0.447021,-660.325365,-441.215303,1474.61404, 0.759676,0.472298,-0.447021,-582.640028,-389.30762,1661.47676, 0.814754,0.369253,-0.447021,-733.714234,-303.914386,1474.61404, 0.837219,0.315017,-0.447021,-647.394912,-268.159753,1661.47676, 0.764021,0.315278,-0.562913,-815.251889,-337.688389,2355.166755, 0.672244,0.417941,-0.611076,-699.180902,-467.177743,2408.92764, 0.687833,0.458274,-0.562913,-733.707316,-490.247555,2355.166755, 0.672244,0.417941,-0.611076,-699.180902,-467.177743,2408.92764, 0.764021,0.315278,-0.562913,-815.251889,-337.688389,2355.166755, 0.740863,0.278762,-0.611076,-776.888194,-321.797626,2408.92764, 0.820532,0.338904,-0.460294,-847.416499,-351.011407,2296.83617, 0.687833,0.458274,-0.562913,-733.707316,-490.247555,2355.166755, 0.738649,0.49247,-0.460294,-762.654701,-509.589579,2296.83617, 0.687833,0.458274,-0.562913,-733.707316,-490.247555,2355.166755, 0.820532,0.338904,-0.460294,-847.416499,-351.011407,2296.83617, 0.764021,0.315278,-0.562913,-815.251889,-337.688389,2355.166755, 0.781011,0.12887,0.611076,-824.740108,-164.051007,1661.47676, 0.812508,0.080025,0.577431,-882.422286,0,1715.237645, 0.810848,0.160167,0.562913,-865.466789,-172.152048,1715.237645, 0.812508,0.080025,0.577431,-882.422286,0,1715.237645, 0.781011,0.12887,0.611076,-824.740108,-164.051007,1661.47676, 0.789019,0.077712,0.609434,-840.897722,0,1661.47676, 0.623645,0.145475,-0.768052,-458.180517,-91.137771,1100.8886, 0.599364,0.22552,-0.768052,-690.554573,-286.03707,867.310387, 0.631844,0.104257,-0.768052,-733.088824,-145.820434,867.310387, 0.599364,0.22552,-0.768052,-690.554573,-286.03707,867.310387, 0.623645,0.145475,-0.768052,-458.180517,-91.137771,1100.8886, 0.583281,0.264347,-0.768052,-431.596609,-178.773169,1100.8886, 0.810848,0.160167,-0.562913,-865.466789,-172.152048,2355.166755, 0.740863,0.278762,-0.611076,-776.888194,-321.797626,2408.92764, 0.764021,0.315278,-0.562913,-815.251889,-337.688389,2355.166755, 0.740863,0.278762,-0.611076,-776.888194,-321.797626,2408.92764, 0.810848,0.160167,-0.562913,-865.466789,-172.152048,2355.166755, 0.781011,0.12887,-0.611076,-824.740108,-164.051007,2408.92764, 0.871137,0.203207,-0.447021,-733.088824,-145.820434,1287.75132, 0.837219,0.315017,-0.447021,-604.235252,-250.282436,1474.61404, 0.814754,0.369253,-0.447021,-690.554573,-286.03707,1287.75132, 0.837219,0.315017,-0.447021,-604.235252,-250.282436,1474.61404, 0.871137,0.203207,-0.447021,-733.088824,-145.820434,1287.75132, 0.882589,0.145631,-0.447021,-641.452722,-127.592879,1474.61404, 0.973856,0.227168,-0,-962.179081,-191.389319,2035.2022, 0.917371,0.379736,-0.119297,-902.602786,-373.870315,2103.011094, 0.910825,0.412792,0,-906.352876,-375.423654,2035.2022, 0.917371,0.379736,-0.119297,-902.602786,-373.870315,2103.011094, 0.973856,0.227168,-0,-962.179081,-191.389319,2035.2022, 0.973826,0.193469,-0.119297,-958.198007,-190.597434,2103.011094, 0.973856,0.227168,-0,-733.088824,-145.820434,2408.92764, 0.935939,0.352162,-0,-690.554573,-286.03707,2549.07468, 0.910825,0.412792,0,-690.554573,-286.03707,2408.92764, 0.935939,0.352162,-0,-690.554573,-286.03707,2549.07468, 0.973856,0.227168,-0,-733.088824,-145.820434,2408.92764, 0.986659,0.162803,-0,-733.088824,-145.820434,2549.07468, 0.961634,0.1904,0.197505,-741.592372,-147.511894,741.194313, 0.992863,0.097788,-0.068268,-760.268019,0,804.835469, 0.971564,0.226633,-0.06856,-745.659682,-148.320933,804.835469, 0.992863,0.097788,-0.068268,-760.268019,0,804.835469, 0.961634,0.1904,0.197505,-741.592372,-147.511894,741.194313, 0.966069,0.095149,0.240119,-756.121025,0,741.194313, -0.001099,0.826515,-0.562913,0,-882.422286,2355.166755, -0.197225,0.872604,-0.446838,178.944064,-899.612557,2296.83617, -0.000898,0.887766,-0.460294,0,-917.237009,2296.83617, -0.197225,0.872604,-0.446838,178.944064,-899.612557,2296.83617, -0.001099,0.826515,-0.562913,0,-882.422286,2355.166755, -0.162323,0.81042,-0.562913,172.152048,-865.466789,2355.166755, -0.025974,0.791146,-0.611076,0,-840.897722,2408.92764, -0.162323,0.81042,-0.562913,172.152048,-865.466789,2355.166755, -0.001099,0.826515,-0.562913,0,-882.422286,2355.166755, -0.162323,0.81042,-0.562913,172.152048,-865.466789,2355.166755, -0.025974,0.791146,-0.611076,0,-840.897722,2408.92764, -0.179819,0.770877,-0.611076,164.051007,-824.740108,2408.92764, 0.764021,0.315278,0.562913,-815.251889,-337.688389,1715.237645, 0.870883,0.172314,0.460294,-899.612557,-178.944064,1773.56823, 0.820532,0.338904,0.460294,-847.416499,-351.011407,1773.56823, 0.870883,0.172314,0.460294,-899.612557,-178.944064,1773.56823, 0.764021,0.315278,0.562913,-815.251889,-337.688389,1715.237645, 0.810848,0.160167,0.562913,-865.466789,-172.152048,1715.237645, 0.687833,0.458274,-0.562913,-733.707316,-490.247555,2355.166755, 0.559613,0.559613,-0.611282,-594.604481,-594.604481,2408.92764, 0.59226,0.59226,-0.546311,-623.966782,-623.966782,2355.166755, 0.559613,0.559613,-0.611282,-594.604481,-594.604481,2408.92764, 0.687833,0.458274,-0.562913,-733.707316,-490.247555,2355.166755, 0.672244,0.417941,-0.611076,-699.180902,-467.177743,2408.92764, 0.693789,0.692567,0.197505,-534.658304,-534.658304,741.194313, 0.497902,0.741616,0.449554,-408.513405,-611.383516,680.911024, 0.633017,0.630231,0.449554,-519.938942,-519.938942,680.911024, 0.497902,0.741616,0.449554,-408.513405,-611.383516,680.911024, 0.693789,0.692567,0.197505,-534.658304,-534.658304,741.194313, 0.545345,0.814611,0.197505,-420.078334,-628.691656,741.194313, 0.692336,0.720367,-0.041734,-537.590672,-537.590672,804.835469, 0.545345,0.814611,0.197505,-420.078334,-628.691656,741.194313, 0.693789,0.692567,0.197505,-534.658304,-534.658304,741.194313, 0.545345,0.814611,0.197505,-420.078334,-628.691656,741.194313, 0.692336,0.720367,-0.041734,-537.590672,-537.590672,804.835469, 0.554012,0.829678,-0.068597,-422.38228,-632.139755,804.835469, 0.69268,0.69268,-0.200971,-528.527588,-528.527588,867.310387, 0.554012,0.829678,-0.068597,-422.38228,-632.139755,804.835469, 0.692336,0.720367,-0.041734,-537.590672,-537.590672,804.835469, 0.554012,0.829678,-0.068597,-422.38228,-632.139755,804.835469, 0.69268,0.69268,-0.200971,-528.527588,-528.527588,867.310387, 0.517227,0.831943,-0.200867,-415.261462,-621.482696,867.310387, 0.43772,0.467437,-0.768052,-330.329744,-330.329744,1100.8886, 0.37306,0.520502,-0.768052,-415.261462,-621.482696,867.310387, 0.467437,0.43772,-0.768052,-528.527588,-528.527588,867.310387, 0.37306,0.520502,-0.768052,-415.261462,-621.482696,867.310387, 0.43772,0.467437,-0.768052,-330.329744,-330.329744,1100.8886, 0.338117,0.54385,-0.768052,-259.538414,-388.426686,1100.8886, 0.908682,0.411821,-0.06856,-702.396062,-290.941975,804.835469, 0.831943,0.517227,-0.200867,-621.482696,-415.261462,867.310387, 0.81088,0.581183,-0.06856,-632.139755,-422.38228,804.835469, 0.831943,0.517227,-0.200867,-621.482696,-415.261462,867.310387, 0.908682,0.411821,-0.06856,-702.396062,-290.941975,804.835469, 0.916863,0.344985,-0.200867,-690.554573,-286.03707,867.310387, 0.738649,0.49247,-0.460294,-762.654701,-509.589579,2296.83617, 0.59226,0.59226,-0.546311,-623.966782,-623.966782,2355.166755, 0.634114,0.634114,-0.442491,-648.584509,-648.584509,2296.83617, 0.59226,0.59226,-0.546311,-623.966782,-623.966782,2355.166755, 0.738649,0.49247,-0.460294,-762.654701,-509.589579,2296.83617, 0.687833,0.458274,-0.562913,-733.707316,-490.247555,2355.166755, -0.01288,0.939228,0.343052,0,-944.844672,1835.635445, -0.172314,0.870883,0.460294,178.944064,-899.612557,1773.56823, 0.000898,0.887766,0.460294,0,-917.237009,1773.56823, -0.172314,0.870883,0.460294,178.944064,-899.612557,1773.56823, -0.01288,0.939228,0.343052,0,-944.844672,1835.635445, -0.204727,0.913717,0.351011,184.330051,-926.689746,1835.635445, 0.472298,0.759676,-0.447021,-363.353779,-543.79736,1474.61404, 0.369253,0.814754,-0.447021,-286.03707,-690.554573,1287.75132, 0.521108,0.727062,-0.447021,-415.261462,-621.482696,1287.75132, 0.369253,0.814754,-0.447021,-286.03707,-690.554573,1287.75132, 0.472298,0.759676,-0.447021,-363.353779,-543.79736,1474.61404, 0.315017,0.837219,-0.447021,-250.282436,-604.235252,1474.61404, 0.727062,0.521108,-0.447021,-582.640028,-389.30762,1100.8886, 0.632456,0.632456,-0.447214,-429.428666,-429.428666,1287.75132, 0.632456,0.632456,-0.447214,-495.494614,-495.494614,1100.8886, 0.632456,0.632456,-0.447214,-429.428666,-429.428666,1287.75132, 0.727062,0.521108,-0.447021,-582.640028,-389.30762,1100.8886, 0.759676,0.472298,-0.447021,-504.954691,-337.399938,1287.75132, -0.032813,0.999462,-0,0,-747.450884,2549.07468, -0.162803,0.986659,-0,145.820434,-733.088824,2408.92764, 0.032813,0.999462,-0,0,-747.450884,2408.92764, -0.162803,0.986659,-0,145.820434,-733.088824,2408.92764, -0.032813,0.999462,-0,0,-747.450884,2549.07468, -0.227168,0.973856,-0,145.820434,-733.088824,2549.07468, 0.672244,0.417941,0.611076,-699.180902,-467.177743,1661.47676, 0.764021,0.315278,0.562913,-815.251889,-337.688389,1715.237645, 0.687833,0.458274,0.562913,-733.707316,-490.247555,1715.237645, 0.764021,0.315278,0.562913,-815.251889,-337.688389,1715.237645, 0.672244,0.417941,0.611076,-699.180902,-467.177743,1661.47676, 0.740863,0.278762,0.611076,-776.888194,-321.797626,1661.47676, 0.917371,0.379736,0.119297,-902.602786,-373.870315,1967.393306, 0.973856,0.227168,-0,-962.179081,-191.389319,2035.2022, 0.910825,0.412792,0,-906.352876,-375.423654,2035.2022, 0.973856,0.227168,-0,-962.179081,-191.389319,2035.2022, 0.917371,0.379736,0.119297,-902.602786,-373.870315,1967.393306, 0.973826,0.193469,0.119297,-958.198007,-190.597434,1967.393306, 0.814754,0.369253,-0.447021,-647.394912,-268.159753,1100.8886, 0.759676,0.472298,-0.447021,-504.954691,-337.399938,1287.75132, 0.727062,0.521108,-0.447021,-582.640028,-389.30762,1100.8886, 0.759676,0.472298,-0.447021,-504.954691,-337.399938,1287.75132, 0.814754,0.369253,-0.447021,-647.394912,-268.159753,1100.8886, 0.837219,0.315017,-0.447021,-561.075591,-232.405119,1287.75132, 0.995185,0.098017,-0,-747.450884,0,2408.92764, 0.986659,0.162803,-0,-733.088824,-145.820434,2549.07468, 0.973856,0.227168,-0,-733.088824,-145.820434,2408.92764, 0.986659,0.162803,-0,-733.088824,-145.820434,2549.07468, 0.995185,0.098017,-0,-747.450884,0,2408.92764, 0.995185,0.098017,0,-747.450884,0,2549.07468, 0.630892,0.392232,0.669425,-581.445733,-388.509618,628.271002, 0.589368,0.267106,0.762431,-601.13423,-248.997951,587.016307, 0.69529,0.261614,0.669425,-646.067883,-267.610079,628.271002, 0.589368,0.267106,0.762431,-601.13423,-248.997951,587.016307, 0.630892,0.392232,0.669425,-581.445733,-388.509618,628.271002, 0.525933,0.376953,0.762431,-541.006514,-361.488996,587.016307, 0.542249,0.507776,0.669425,-494.47895,-494.47895,628.271002, 0.743805,0.494626,0.449554,-611.383516,-408.513405,680.911024, 0.633017,0.630231,0.449554,-519.938942,-519.938942,680.911024, 0.743805,0.494626,0.449554,-611.383516,-408.513405,680.911024, 0.542249,0.507776,0.669425,-494.47895,-494.47895,628.271002, 0.630892,0.392232,0.669425,-581.445733,-388.509618,628.271002, 0.693789,0.692567,0.197505,-534.658304,-534.658304,741.194313, 0.81088,0.581183,-0.06856,-632.139755,-422.38228,804.835469, 0.692336,0.720367,-0.041734,-537.590672,-537.590672,804.835469, 0.81088,0.581183,-0.06856,-632.139755,-422.38228,804.835469, 0.693789,0.692567,0.197505,-534.658304,-534.658304,741.194313, 0.815571,0.543908,0.197505,-628.691656,-420.078334,741.194313, 0.81088,0.581183,-0.06856,-632.139755,-422.38228,804.835469, 0.69268,0.69268,-0.200971,-528.527588,-528.527588,867.310387, 0.692336,0.720367,-0.041734,-537.590672,-537.590672,804.835469, 0.69268,0.69268,-0.200971,-528.527588,-528.527588,867.310387, 0.81088,0.581183,-0.06856,-632.139755,-422.38228,804.835469, 0.831943,0.517227,-0.200867,-621.482696,-415.261462,867.310387, 0.520502,0.37306,-0.768052,-388.426686,-259.538414,1100.8886, 0.467437,0.43772,-0.768052,-528.527588,-528.527588,867.310387, 0.54385,0.338117,-0.768052,-621.482696,-415.261462,867.310387, 0.467437,0.43772,-0.768052,-528.527588,-528.527588,867.310387, 0.520502,0.37306,-0.768052,-388.426686,-259.538414,1100.8886, 0.43772,0.467437,-0.768052,-330.329744,-330.329744,1100.8886, 0.12887,0.781011,-0.611076,-164.051007,-824.740108,2408.92764, -0.001099,0.826515,-0.562913,0,-882.422286,2355.166755, 0.160167,0.810848,-0.562913,-172.152048,-865.466789,2355.166755, -0.001099,0.826515,-0.562913,0,-882.422286,2355.166755, 0.12887,0.781011,-0.611076,-164.051007,-824.740108,2408.92764, -0.025974,0.791146,-0.611076,0,-840.897722,2408.92764, 0.702221,0.701893,0.119297,-690.822265,-690.822265,1967.393306, 0.54014,0.807547,0.236891,-536.042486,-802.244273,1900.552851, 0.687306,0.686654,0.236891,-682.252673,-682.252673,1900.552851, 0.54014,0.807547,0.236891,-536.042486,-802.244273,1900.552851, 0.702221,0.701893,0.119297,-690.822265,-690.822265,1967.393306, 0.551796,0.825403,0.119297,-542.77557,-812.321046,1967.393306, -0.882589,0.145631,-0.447021,595.634671,-118.479102,1287.75132, -0.890977,0.087754,-0.445488,700.735204,-0,1100.8886, -0.871137,0.203207,-0.447021,687.270773,-136.706657,1100.8886, -0.890977,0.087754,-0.445488,700.735204,-0,1100.8886, -0.882589,0.145631,-0.447021,595.634671,-118.479102,1287.75132, -0.890977,0.087754,-0.445488,607.303844,-0,1287.75132, 0.00197,0.893251,0.449554,0,-735.304703,680.911024, -0.130866,0.717913,0.683722,136.426435,-685.862006,628.271002, 0.024376,0.742479,0.669425,0,-699.298837,628.271002, -0.130866,0.717913,0.683722,136.426435,-685.862006,628.271002, 0.00197,0.893251,0.449554,0,-735.304703,680.911024, -0.172332,0.876472,0.449554,143.450831,-721.176029,680.911024, 0.778916,0.519633,0.3511,-785.609633,-524.927574,1835.635445, 0.897759,0.371365,0.236891,-891.406075,-369.232486,1900.552851, 0.808059,0.539373,0.236891,-802.244273,-536.042486,1900.552851, 0.897759,0.371365,0.236891,-891.406075,-369.232486,1900.552851, 0.778916,0.519633,0.3511,-785.609633,-524.927574,1835.635445, 0.865325,0.357689,0.3511,-872.922654,-361.576402,1835.635445, 0.875139,0.086194,-0.476133,-917.237009,0,2296.83617, 0.810848,0.160167,-0.562913,-865.466789,-172.152048,2355.166755, 0.870883,0.172314,-0.460294,-899.612557,-178.944064,2296.83617, 0.810848,0.160167,-0.562913,-865.466789,-172.152048,2355.166755, 0.875139,0.086194,-0.476133,-917.237009,0,2296.83617, 0.812508,0.080025,-0.577431,-882.422286,0,2355.166755, 0.315278,0.764021,-0.562913,-337.688389,-815.251889,2355.166755, 0.172314,0.870883,-0.460294,-178.944064,-899.612557,2296.83617, 0.338904,0.820532,-0.460294,-351.011407,-847.416499,2296.83617, 0.172314,0.870883,-0.460294,-178.944064,-899.612557,2296.83617, 0.315278,0.764021,-0.562913,-337.688389,-815.251889,2355.166755, 0.160167,0.810848,-0.562913,-172.152048,-865.466789,2355.166755, 0.278762,0.740863,-0.611076,-321.797626,-776.888194,2408.92764, 0.160167,0.810848,-0.562913,-172.152048,-865.466789,2355.166755, 0.315278,0.764021,-0.562913,-337.688389,-815.251889,2355.166755, 0.160167,0.810848,-0.562913,-172.152048,-865.466789,2355.166755, 0.278762,0.740863,-0.611076,-321.797626,-776.888194,2408.92764, 0.12887,0.781011,-0.611076,-164.051007,-824.740108,2408.92764, 0.890977,0.087754,-0.445488,-747.450884,0,1287.75132, 0.882589,0.145631,-0.447021,-641.452722,-127.592879,1474.61404, 0.871137,0.203207,-0.447021,-733.088824,-145.820434,1287.75132, 0.882589,0.145631,-0.447021,-641.452722,-127.592879,1474.61404, 0.890977,0.087754,-0.445488,-747.450884,0,1287.75132, 0.890977,0.087754,-0.445488,-654.019524,0,1474.61404, 0.585212,0.583657,0.562913,-623.966782,-623.966782,1715.237645, 0.461133,0.643383,0.611076,-467.177743,-699.180902,1661.47676, 0.577791,0.541058,0.611076,-594.604481,-594.604481,1661.47676, 0.461133,0.643383,0.611076,-467.177743,-699.180902,1661.47676, 0.585212,0.583657,0.562913,-623.966782,-623.966782,1715.237645, 0.460101,0.686612,0.562913,-490.247555,-733.707316,1715.237645, 0.371365,0.897759,-0.236891,-369.232486,-891.406075,2169.851549, 0.138896,0.986639,-0.085149,-190.597434,-958.198007,2103.011094, 0.379736,0.917371,-0.119297,-373.870315,-902.602786,2103.011094, 0.138896,0.986639,-0.085149,-190.597434,-958.198007,2103.011094, 0.371365,0.897759,-0.236891,-369.232486,-891.406075,2169.851549, 0.189085,0.952958,-0.236891,-188.233089,-946.311642,2169.851549, 0.910825,0.412792,0,-690.554573,-286.03707,2408.92764, 0.849252,0.527988,0,-621.482696,-415.261462,2549.07468, 0.812792,0.582554,0,-621.482696,-415.261462,2408.92764, 0.849252,0.527988,0,-621.482696,-415.261462,2549.07468, 0.910825,0.412792,0,-690.554573,-286.03707,2408.92764, 0.935939,0.352162,-0,-690.554573,-286.03707,2549.07468, 0.432767,0.603806,0.669425,-388.509618,-581.445733,628.271002, 0.442288,0.472315,0.762431,-460.088221,-460.088221,587.016307, 0.542249,0.507776,0.669425,-494.47895,-494.47895,628.271002, 0.442288,0.472315,0.762431,-460.088221,-460.088221,587.016307, 0.432767,0.603806,0.669425,-388.509618,-581.445733,628.271002, 0.341645,0.549525,0.762431,-361.488996,-541.006514,587.016307, 0.551796,0.825403,0.119297,-542.77557,-812.321046,1967.393306, 0.372217,0.897406,0.236891,-369.232486,-891.406075,1900.552851, 0.54014,0.807547,0.236891,-536.042486,-802.244273,1900.552851, 0.372217,0.897406,0.236891,-369.232486,-891.406075,1900.552851, 0.551796,0.825403,0.119297,-542.77557,-812.321046,1967.393306, 0.380165,0.917193,0.119297,-373.870315,-902.602786,1967.393306, 0.871137,0.203207,-0.447021,-778.906876,-154.934211,1474.61404, 0.837219,0.315017,-0.447021,-647.394912,-268.159753,1661.47676, 0.814754,0.369253,-0.447021,-733.714234,-303.914386,1474.61404, 0.837219,0.315017,-0.447021,-647.394912,-268.159753,1661.47676, 0.871137,0.203207,-0.447021,-778.906876,-154.934211,1474.61404, 0.882589,0.145631,-0.447021,-687.270773,-136.706657,1661.47676, 0.372217,0.897406,0.236891,-369.232486,-891.406075,1900.552851, 0.183341,0.918213,0.3511,-184.330051,-926.689746,1835.635445, 0.358953,0.864801,0.3511,-361.576402,-872.922654,1835.635445, 0.183341,0.918213,0.3511,-184.330051,-926.689746,1835.635445, 0.372217,0.897406,0.236891,-369.232486,-891.406075,1900.552851, 0.18999,0.952778,0.236891,-188.233089,-946.311642,1900.552851, 0.906011,0.374347,0.197505,-698.56474,-289.354989,741.194313, 0.971564,0.226633,-0.06856,-745.659682,-148.320933,804.835469, 0.908682,0.411821,-0.06856,-702.396062,-290.941975,804.835469, 0.971564,0.226633,-0.06856,-745.659682,-148.320933,804.835469, 0.906011,0.374347,0.197505,-698.56474,-289.354989,741.194313, 0.961634,0.1904,0.197505,-741.592372,-147.511894,741.194313, 0.145631,0.882589,-0.447021,-127.592879,-641.452722,1474.61404, 0.029352,0.894042,-0.447021,0,-747.450884,1287.75132, 0.203207,0.871137,-0.447021,-145.820434,-733.088824,1287.75132, 0.029352,0.894042,-0.447021,0,-747.450884,1287.75132, 0.145631,0.882589,-0.447021,-127.592879,-641.452722,1474.61404, -0.029352,0.894042,-0.447021,0,-654.019524,1474.61404, 0.995185,0.098017,-0,-981.029284,-0,2035.2022, 0.973826,0.193469,-0.119297,-958.198007,-190.597434,2103.011094, 0.973856,0.227168,-0,-962.179081,-191.389319,2035.2022, 0.973826,0.193469,-0.119297,-958.198007,-190.597434,2103.011094, 0.995185,0.098017,-0,-981.029284,-0,2035.2022, 0.985604,0.097074,-0.138423,-976.970216,0,2103.011094, 0.810848,0.160167,0.562913,-865.466789,-172.152048,1715.237645, 0.875139,0.086194,0.476133,-917.237009,0,1773.56823, 0.870883,0.172314,0.460294,-899.612557,-178.944064,1773.56823, 0.875139,0.086194,0.476133,-917.237009,0,1773.56823, 0.810848,0.160167,0.562913,-865.466789,-172.152048,1715.237645, 0.812508,0.080025,0.577431,-882.422286,0,1715.237645, 0.925281,0.091132,-0.36817,-944.844672,0,2234.768955, 0.870883,0.172314,-0.460294,-899.612557,-178.944064,2296.83617, 0.91848,0.181999,-0.3511,-926.689746,-184.330051,2234.768955, 0.870883,0.172314,-0.460294,-899.612557,-178.944064,2296.83617, 0.925281,0.091132,-0.36817,-944.844672,0,2234.768955, 0.875139,0.086194,-0.476133,-917.237009,0,2296.83617, 0.738649,0.49247,0.460294,-762.654701,-509.589579,1773.56823, 0.865325,0.357689,0.3511,-872.922654,-361.576402,1835.635445, 0.778916,0.519633,0.3511,-785.609633,-524.927574,1835.635445, 0.865325,0.357689,0.3511,-872.922654,-361.576402,1835.635445, 0.738649,0.49247,0.460294,-762.654701,-509.589579,1773.56823, 0.820532,0.338904,0.460294,-847.416499,-351.011407,1773.56823, 0.82601,0.340012,0.449554,-679.332965,-281.388928,680.911024, 0.961634,0.1904,0.197505,-741.592372,-147.511894,741.194313, 0.906011,0.374347,0.197505,-698.56474,-289.354989,741.194313, 0.961634,0.1904,0.197505,-741.592372,-147.511894,741.194313, 0.82601,0.340012,0.449554,-679.332965,-281.388928,680.911024, 0.876472,0.172332,0.449554,-721.176029,-143.450831,680.911024, 0.472298,0.759676,-0.447021,-389.30762,-582.640028,1661.47676, 0.369253,0.814754,-0.447021,-303.914386,-733.714234,1474.61404, 0.521108,0.727062,-0.447021,-441.215303,-660.325365,1474.61404, 0.369253,0.814754,-0.447021,-303.914386,-733.714234,1474.61404, 0.472298,0.759676,-0.447021,-389.30762,-582.640028,1661.47676, 0.315017,0.837219,-0.447021,-268.159753,-647.394912,1661.47676, 0.577791,0.541058,0.611076,-594.604481,-594.604481,1661.47676, 0.687833,0.458274,0.562913,-733.707316,-490.247555,1715.237645, 0.585212,0.583657,0.562913,-623.966782,-623.966782,1715.237645, 0.687833,0.458274,0.562913,-733.707316,-490.247555,1715.237645, 0.577791,0.541058,0.611076,-594.604481,-594.604481,1661.47676, 0.672244,0.417941,0.611076,-699.180902,-467.177743,1661.47676, 0.585212,0.583657,0.562913,-623.966782,-623.966782,1715.237645, 0.738649,0.49247,0.460294,-762.654701,-509.589579,1773.56823, 0.62838,0.627111,0.460294,-648.584509,-648.584509,1773.56823, 0.738649,0.49247,0.460294,-762.654701,-509.589579,1773.56823, 0.585212,0.583657,0.562913,-623.966782,-623.966782,1715.237645, 0.687833,0.458274,0.562913,-733.707316,-490.247555,1715.237645, 0.633017,0.630231,0.449554,-519.938942,-519.938942,680.911024, 0.815571,0.543908,0.197505,-628.691656,-420.078334,741.194313, 0.693789,0.692567,0.197505,-534.658304,-534.658304,741.194313, 0.815571,0.543908,0.197505,-628.691656,-420.078334,741.194313, 0.633017,0.630231,0.449554,-519.938942,-519.938942,680.911024, 0.743805,0.494626,0.449554,-611.383516,-408.513405,680.911024, 0.732968,0.120943,0.669425,-685.862006,-136.426435,628.271002, 0.645559,0.063582,0.761059,-650.663002,0,587.016307, 0.740721,0.072955,0.66784,-699.298837,0,628.271002, 0.645559,0.063582,0.761059,-650.663002,0,587.016307, 0.732968,0.120943,0.669425,-685.862006,-136.426435,628.271002, 0.630153,0.146993,0.762431,-638.160695,-126.938055,587.016307, 0.7036,0.7036,-0.099466,-690.822265,-690.822265,2103.011094, 0.55557,0.83147,0,-545.030668,-815.696038,2035.2022, 0.692994,0.720844,0.011969,-693.692459,-693.692459,2035.2022, 0.55557,0.83147,0,-545.030668,-815.696038,2035.2022, 0.7036,0.7036,-0.099466,-690.822265,-690.822265,2103.011094, 0.55141,0.825661,-0.119297,-542.77557,-812.321046,2103.011094, 0.690185,0.690185,-0.217461,-682.252673,-682.252673,2169.851549, 0.55141,0.825661,-0.119297,-542.77557,-812.321046,2103.011094, 0.7036,0.7036,-0.099466,-690.822265,-690.822265,2103.011094, 0.55141,0.825661,-0.119297,-542.77557,-812.321046,2103.011094, 0.690185,0.690185,-0.217461,-682.252673,-682.252673,2169.851549, 0.539373,0.808059,-0.236891,-536.042486,-802.244273,2169.851549, -0.032144,0.979091,-0.200867,0,-747.450884,867.310387, -0.194925,0.978416,-0.068597,148.320933,-745.659682,804.835469, -0.0003,0.997644,-0.068597,0,-760.268019,804.835469, -0.194925,0.978416,-0.068597,148.320933,-745.659682,804.835469, -0.032144,0.979091,-0.200867,0,-747.450884,867.310387, -0.222538,0.954007,-0.200867,145.820434,-733.088824,867.310387, -0.104257,0.631844,-0.768052,91.137771,-458.180517,1100.8886, 0,0.640184,-0.768222,0,-747.450884,867.310387, 0,0.640184,-0.768222,0,-467.156804,1100.8886, 0,0.640184,-0.768222,0,-747.450884,867.310387, -0.104257,0.631844,-0.768052,91.137771,-458.180517,1100.8886, -0.145475,0.623645,-0.768052,145.820434,-733.088824,867.310387, 0.820532,0.338904,0.460294,-847.416499,-351.011407,1773.56823, 0.91848,0.181999,0.3511,-926.689746,-184.330051,1835.635445, 0.865325,0.357689,0.3511,-872.922654,-361.576402,1835.635445, 0.91848,0.181999,0.3511,-926.689746,-184.330051,1835.635445, 0.820532,0.338904,0.460294,-847.416499,-351.011407,1773.56823, 0.870883,0.172314,0.460294,-899.612557,-178.944064,1773.56823, 0.193925,0.973736,0.119297,-190.597434,-958.198007,1967.393306, 0.000461,0.971536,0.236891,0,-964.850983,1900.552851, 0.18999,0.952778,0.236891,-188.233089,-946.311642,1900.552851, 0.000461,0.971536,0.236891,0,-964.850983,1900.552851, 0.193925,0.973736,0.119297,-190.597434,-958.198007,1967.393306, 0.024785,0.994227,0.104395,0,-976.970216,1967.393306, 0.000864,0.980301,0.197505,0,-756.121025,741.194313, -0.172332,0.876472,0.449554,143.450831,-721.176029,680.911024, 0.00197,0.893251,0.449554,0,-735.304703,680.911024, -0.172332,0.876472,0.449554,143.450831,-721.176029,680.911024, 0.000864,0.980301,0.197505,0,-756.121025,741.194313, -0.1904,0.961634,0.197505,147.511894,-741.592372,741.194313, -0.0003,0.997644,-0.068597,0,-760.268019,804.835469, -0.1904,0.961634,0.197505,147.511894,-741.592372,741.194313, 0.000864,0.980301,0.197505,0,-756.121025,741.194313, -0.1904,0.961634,0.197505,147.511894,-741.592372,741.194313, -0.0003,0.997644,-0.068597,0,-760.268019,804.835469, -0.194925,0.978416,-0.068597,148.320933,-745.659682,804.835469, 0.992863,0.097788,-0.068268,-760.268019,0,804.835469, 0.966549,0.159485,-0.200867,-733.088824,-145.820434,867.310387, 0.971564,0.226633,-0.06856,-745.659682,-148.320933,804.835469, 0.966549,0.159485,-0.200867,-733.088824,-145.820434,867.310387, 0.992863,0.097788,-0.068268,-760.268019,0,804.835469, 0.975069,0.096036,-0.200042,-747.450884,0,867.310387, 0.865325,0.357689,0.3511,-872.922654,-361.576402,1835.635445, 0.952958,0.189085,0.236891,-946.311642,-188.233089,1900.552851, 0.897759,0.371365,0.236891,-891.406075,-369.232486,1900.552851, 0.952958,0.189085,0.236891,-946.311642,-188.233089,1900.552851, 0.865325,0.357689,0.3511,-872.922654,-361.576402,1835.635445, 0.91848,0.181999,0.3511,-926.689746,-184.330051,1835.635445, -0.882589,0.145631,-0.447021,641.452722,-127.592879,1474.61404, -0.890977,0.087754,-0.445488,747.450884,-0,1287.75132, -0.871137,0.203207,-0.447021,733.088824,-145.820434,1287.75132, -0.890977,0.087754,-0.445488,747.450884,-0,1287.75132, -0.882589,0.145631,-0.447021,641.452722,-127.592879,1474.61404, -0.890977,0.087754,-0.445488,654.019524,-0,1474.61404, 0.971564,0.226633,-0.06856,-745.659682,-148.320933,804.835469, 0.916863,0.344985,-0.200867,-690.554573,-286.03707,867.310387, 0.908682,0.411821,-0.06856,-702.396062,-290.941975,804.835469, 0.916863,0.344985,-0.200867,-690.554573,-286.03707,867.310387, 0.971564,0.226633,-0.06856,-745.659682,-148.320933,804.835469, 0.966549,0.159485,-0.200867,-733.088824,-145.820434,867.310387, 0.379736,0.917371,-0.119297,-373.870315,-902.602786,2103.011094, 0.139589,0.989621,0.034132,-191.389319,-962.179081,2035.2022, 0.382683,0.92388,0,-375.423654,-906.352876,2035.2022, 0.139589,0.989621,0.034132,-191.389319,-962.179081,2035.2022, 0.379736,0.917371,-0.119297,-373.870315,-902.602786,2103.011094, 0.138896,0.986639,-0.085149,-190.597434,-958.198007,2103.011094, 0.338117,0.54385,-0.768052,-259.538414,-388.426686,1100.8886, 0.264347,0.583281,-0.768052,-286.03707,-690.554573,867.310387, 0.37306,0.520502,-0.768052,-415.261462,-621.482696,867.310387, 0.264347,0.583281,-0.768052,-286.03707,-690.554573,867.310387, 0.338117,0.54385,-0.768052,-259.538414,-388.426686,1100.8886, 0.22552,0.599364,-0.768052,-178.773169,-431.596609,1100.8886, 0.815571,0.543908,0.197505,-628.691656,-420.078334,741.194313, 0.908682,0.411821,-0.06856,-702.396062,-290.941975,804.835469, 0.81088,0.581183,-0.06856,-632.139755,-422.38228,804.835469, 0.908682,0.411821,-0.06856,-702.396062,-290.941975,804.835469, 0.815571,0.543908,0.197505,-628.691656,-420.078334,741.194313, 0.906011,0.374347,0.197505,-698.56474,-289.354989,741.194313, 0.890977,0.087754,-0.445488,-794.166564,0,1474.61404, 0.882589,0.145631,-0.447021,-687.270773,-136.706657,1661.47676, 0.871137,0.203207,-0.447021,-778.906876,-154.934211,1474.61404, 0.882589,0.145631,-0.447021,-687.270773,-136.706657,1661.47676, 0.890977,0.087754,-0.445488,-794.166564,0,1474.61404, 0.890977,0.087754,-0.445488,-700.735204,0,1661.47676, 0.472298,0.759676,-0.447021,-337.399938,-504.954691,1287.75132, 0.369253,0.814754,-0.447021,-268.159753,-647.394912,1100.8886, 0.521108,0.727062,-0.447021,-389.30762,-582.640028,1100.8886, 0.369253,0.814754,-0.447021,-268.159753,-647.394912,1100.8886, 0.472298,0.759676,-0.447021,-337.399938,-504.954691,1287.75132, 0.315017,0.837219,-0.447021,-232.405119,-561.075591,1287.75132, 0.985604,0.097074,-0.138423,-976.970216,0,2103.011094, 0.952958,0.189085,-0.236891,-946.311642,-188.233089,2169.851549, 0.973826,0.193469,-0.119297,-958.198007,-190.597434,2103.011094, 0.952958,0.189085,-0.236891,-946.311642,-188.233089,2169.851549, 0.985604,0.097074,-0.138423,-976.970216,0,2103.011094, 0.962266,0.094775,-0.255071,-964.850983,0,2169.851549, -0.82601,0.340012,0.449554,679.332965,-281.388928,680.911024, -0.630892,0.392232,0.669425,581.445733,-388.509618,628.271002, -0.743805,0.494626,0.449554,611.383516,-408.513405,680.911024, -0.630892,0.392232,0.669425,581.445733,-388.509618,628.271002, -0.82601,0.340012,0.449554,679.332965,-281.388928,680.911024, -0.69529,0.261614,0.669425,646.067883,-267.610079,628.271002, 0.162803,0.986659,-0,-145.820434,-733.088824,2549.07468, 0.032813,0.999462,-0,0,-747.450884,2408.92764, 0.227168,0.973856,-0,-145.820434,-733.088824,2408.92764, 0.032813,0.999462,-0,0,-747.450884,2408.92764, 0.162803,0.986659,-0,-145.820434,-733.088824,2549.07468, -0.032813,0.999462,-0,0,-747.450884,2549.07468, 0.727062,0.521108,-0.447021,-621.482696,-415.261462,1287.75132, 0.632456,0.632456,-0.447214,-462.46164,-462.46164,1474.61404, 0.632456,0.632456,-0.447214,-528.527588,-528.527588,1287.75132, 0.632456,0.632456,-0.447214,-462.46164,-462.46164,1474.61404, 0.727062,0.521108,-0.447021,-621.482696,-415.261462,1287.75132, 0.759676,0.472298,-0.447021,-543.79736,-363.353779,1474.61404, 0.666912,0.666912,-0.332349,-668.106075,-668.106075,2234.768955, 0.539373,0.808059,-0.236891,-536.042486,-802.244273,2169.851549, 0.690185,0.690185,-0.217461,-682.252673,-682.252673,2169.851549, 0.539373,0.808059,-0.236891,-536.042486,-802.244273,2169.851549, 0.666912,0.666912,-0.332349,-668.106075,-668.106075,2234.768955, 0.519633,0.778916,-0.3511,-524.927574,-785.609633,2234.768955, 0.69529,0.261614,0.669425,-646.067883,-267.610079,628.271002, 0.630153,0.146993,0.762431,-638.160695,-126.938055,587.016307, 0.732968,0.120943,0.669425,-685.862006,-136.426435,628.271002, 0.630153,0.146993,0.762431,-638.160695,-126.938055,587.016307, 0.69529,0.261614,0.669425,-646.067883,-267.610079,628.271002, 0.589368,0.267106,0.762431,-601.13423,-248.997951,587.016307, 0.638915,0.062928,-0.766699,-467.156804,0,1100.8886, 0.631844,0.104257,-0.768052,-733.088824,-145.820434,867.310387, 0.638915,0.062928,-0.766699,-747.450884,0,867.310387, 0.631844,0.104257,-0.768052,-733.088824,-145.820434,867.310387, 0.638915,0.062928,-0.766699,-467.156804,0,1100.8886, 0.623645,0.145475,-0.768052,-458.180517,-91.137771,1100.8886, 0.897759,0.371365,0.236891,-891.406075,-369.232486,1900.552851, 0.973826,0.193469,0.119297,-958.198007,-190.597434,1967.393306, 0.917371,0.379736,0.119297,-902.602786,-373.870315,1967.393306, 0.973826,0.193469,0.119297,-958.198007,-190.597434,1967.393306, 0.897759,0.371365,0.236891,-891.406075,-369.232486,1900.552851, 0.952958,0.189085,0.236891,-946.311642,-188.233089,1900.552851, 0.62838,0.627111,0.460294,-648.584509,-648.584509,1773.56823, 0.460101,0.686612,0.562913,-490.247555,-733.707316,1715.237645, 0.585212,0.583657,0.562913,-623.966782,-623.966782,1715.237645, 0.460101,0.686612,0.562913,-490.247555,-733.707316,1715.237645, 0.62838,0.627111,0.460294,-648.584509,-648.584509,1773.56823, 0.493963,0.737652,0.460294,-509.589579,-762.654701,1773.56823, 0.662575,0.661607,0.3511,-668.106075,-668.106075,1835.635445, 0.493963,0.737652,0.460294,-509.589579,-762.654701,1773.56823, 0.62838,0.627111,0.460294,-648.584509,-648.584509,1773.56823, 0.493963,0.737652,0.460294,-509.589579,-762.654701,1773.56823, 0.662575,0.661607,0.3511,-668.106075,-668.106075,1835.635445, 0.52077,0.778156,0.3511,-524.927574,-785.609633,1835.635445, 0.517227,0.831943,-0.200867,-415.261462,-621.482696,867.310387, 0.381505,0.921818,-0.068597,-290.941975,-702.396062,804.835469, 0.554012,0.829678,-0.068597,-422.38228,-632.139755,804.835469, 0.381505,0.921818,-0.068597,-290.941975,-702.396062,804.835469, 0.517227,0.831943,-0.200867,-415.261462,-621.482696,867.310387, 0.344985,0.916863,-0.200867,-286.03707,-690.554573,867.310387, 0.62838,0.627111,0.460294,-648.584509,-648.584509,1773.56823, 0.778916,0.519633,0.3511,-785.609633,-524.927574,1835.635445, 0.662575,0.661607,0.3511,-668.106075,-668.106075,1835.635445, 0.778916,0.519633,0.3511,-785.609633,-524.927574,1835.635445, 0.62838,0.627111,0.460294,-648.584509,-648.584509,1773.56823, 0.738649,0.49247,0.460294,-762.654701,-509.589579,1773.56823, 0.727062,0.521108,-0.447021,-660.325365,-441.215303,1474.61404, 0.632456,0.632456,-0.447214,-495.494614,-495.494614,1661.47676, 0.632456,0.632456,-0.447214,-561.560563,-561.560563,1474.61404, 0.632456,0.632456,-0.447214,-495.494614,-495.494614,1661.47676, 0.727062,0.521108,-0.447021,-660.325365,-441.215303,1474.61404, 0.759676,0.472298,-0.447021,-582.640028,-389.30762,1661.47676, 0.687306,0.686654,0.236891,-682.252673,-682.252673,1900.552851, 0.825661,0.55141,0.119297,-812.321046,-542.77557,1967.393306, 0.702221,0.701893,0.119297,-690.822265,-690.822265,1967.393306, 0.825661,0.55141,0.119297,-812.321046,-542.77557,1967.393306, 0.687306,0.686654,0.236891,-682.252673,-682.252673,1900.552851, 0.808059,0.539373,0.236891,-802.244273,-536.042486,1900.552851, 0.702221,0.701893,0.119297,-690.822265,-690.822265,1967.393306, 0.812792,0.582554,0,-815.696038,-545.030668,2035.2022, 0.692994,0.720844,0.011969,-693.692459,-693.692459,2035.2022, 0.812792,0.582554,0,-815.696038,-545.030668,2035.2022, 0.702221,0.701893,0.119297,-690.822265,-690.822265,1967.393306, 0.825661,0.55141,0.119297,-812.321046,-542.77557,1967.393306, 0.634114,0.634114,-0.442491,-648.584509,-648.584509,2296.83617, 0.519633,0.778916,-0.3511,-524.927574,-785.609633,2234.768955, 0.666912,0.666912,-0.332349,-668.106075,-668.106075,2234.768955, 0.519633,0.778916,-0.3511,-524.927574,-785.609633,2234.768955, 0.634114,0.634114,-0.442491,-648.584509,-648.584509,2296.83617, 0.49247,0.738649,-0.460294,-509.589579,-762.654701,2296.83617, 0.59226,0.59226,-0.546311,-623.966782,-623.966782,2355.166755, 0.49247,0.738649,-0.460294,-509.589579,-762.654701,2296.83617, 0.634114,0.634114,-0.442491,-648.584509,-648.584509,2296.83617, 0.49247,0.738649,-0.460294,-509.589579,-762.654701,2296.83617, 0.59226,0.59226,-0.546311,-623.966782,-623.966782,2355.166755, 0.458274,0.687833,-0.562913,-490.247555,-733.707316,2355.166755, 0.632456,0.632456,-0.447214,-495.494614,-495.494614,1661.47676, 0.521108,0.727062,-0.447021,-441.215303,-660.325365,1474.61404, 0.632456,0.632456,-0.447214,-561.560563,-561.560563,1474.61404, 0.521108,0.727062,-0.447021,-441.215303,-660.325365,1474.61404, 0.632456,0.632456,-0.447214,-495.494614,-495.494614,1661.47676, 0.472298,0.759676,-0.447021,-389.30762,-582.640028,1661.47676, 0.583281,0.264347,-0.768052,-431.596609,-178.773169,1100.8886, 0.54385,0.338117,-0.768052,-621.482696,-415.261462,867.310387, 0.599364,0.22552,-0.768052,-690.554573,-286.03707,867.310387, 0.54385,0.338117,-0.768052,-621.482696,-415.261462,867.310387, 0.583281,0.264347,-0.768052,-431.596609,-178.773169,1100.8886, 0.520502,0.37306,-0.768052,-388.426686,-259.538414,1100.8886, 0.497902,0.741616,0.449554,-408.513405,-611.383516,680.911024, 0.306655,0.676633,0.669425,-267.610079,-646.067883,628.271002, 0.432767,0.603806,0.669425,-388.509618,-581.445733,628.271002, 0.306655,0.676633,0.669425,-267.610079,-646.067883,628.271002, 0.497902,0.741616,0.449554,-408.513405,-611.383516,680.911024, 0.343652,0.824502,0.449554,-281.388928,-679.332965,680.911024, 0.545345,0.814611,0.197505,-420.078334,-628.691656,741.194313, 0.343652,0.824502,0.449554,-281.388928,-679.332965,680.911024, 0.497902,0.741616,0.449554,-408.513405,-611.383516,680.911024, 0.343652,0.824502,0.449554,-281.388928,-679.332965,680.911024, 0.545345,0.814611,0.197505,-420.078334,-628.691656,741.194313, 0.375943,0.90535,0.197505,-289.354989,-698.56474,741.194313, 0.554012,0.829678,-0.068597,-422.38228,-632.139755,804.835469, 0.375943,0.90535,0.197505,-289.354989,-698.56474,741.194313, 0.545345,0.814611,0.197505,-420.078334,-628.691656,741.194313, 0.375943,0.90535,0.197505,-289.354989,-698.56474,741.194313, 0.554012,0.829678,-0.068597,-422.38228,-632.139755,804.835469, 0.381505,0.921818,-0.068597,-290.941975,-702.396062,804.835469, 0.000898,0.887766,0.460294,0,-917.237009,1773.56823, -0.160167,0.810848,0.562913,172.152048,-865.466789,1715.237645, 0.001099,0.826515,0.562913,0,-882.422286,1715.237645, -0.160167,0.810848,0.562913,172.152048,-865.466789,1715.237645, 0.000898,0.887766,0.460294,0,-917.237009,1773.56823, -0.172314,0.870883,0.460294,178.944064,-899.612557,1773.56823, 0.559613,0.559613,-0.611282,-594.604481,-594.604481,2408.92764, 0.458274,0.687833,-0.562913,-490.247555,-733.707316,2355.166755, 0.59226,0.59226,-0.546311,-623.966782,-623.966782,2355.166755, 0.458274,0.687833,-0.562913,-490.247555,-733.707316,2355.166755, 0.559613,0.559613,-0.611282,-594.604481,-594.604481,2408.92764, 0.417941,0.672244,-0.611076,-467.177743,-699.180902,2408.92764, 0.707107,0.707107,-0,-528.527588,-528.527588,2549.07468, 0.582554,0.812792,-0,-415.261462,-621.482696,2408.92764, 0.707107,0.707107,0,-528.527588,-528.527588,2408.92764, 0.582554,0.812792,-0,-415.261462,-621.482696,2408.92764, 0.707107,0.707107,-0,-528.527588,-528.527588,2549.07468, 0.527988,0.849252,-0,-415.261462,-621.482696,2549.07468, 0.812792,0.582554,0,-621.482696,-415.261462,2408.92764, 0.707107,0.707107,-0,-528.527588,-528.527588,2549.07468, 0.707107,0.707107,0,-528.527588,-528.527588,2408.92764, 0.707107,0.707107,-0,-528.527588,-528.527588,2549.07468, 0.812792,0.582554,0,-621.482696,-415.261462,2408.92764, 0.849252,0.527988,0,-621.482696,-415.261462,2549.07468, -0.882589,0.145631,-0.447021,687.270773,-136.706657,1661.47676, -0.890977,0.087754,-0.445488,794.166564,-0,1474.61404, -0.871137,0.203207,-0.447021,778.906876,-154.934211,1474.61404, -0.890977,0.087754,-0.445488,794.166564,-0,1474.61404, -0.882589,0.145631,-0.447021,687.270773,-136.706657,1661.47676, -0.890977,0.087754,-0.445488,700.735204,-0,1661.47676, -0.812508,0.080025,0.577431,882.422286,-0,1715.237645, -0.781011,0.12887,0.611076,824.740108,-164.051007,1661.47676, -0.810848,0.160167,0.562913,865.466789,-172.152048,1715.237645, -0.781011,0.12887,0.611076,824.740108,-164.051007,1661.47676, -0.812508,0.080025,0.577431,882.422286,-0,1715.237645, -0.789019,0.077712,0.609434,840.897722,-0,1661.47676, 0.519633,0.778916,-0.3511,-524.927574,-785.609633,2234.768955, 0.371365,0.897759,-0.236891,-369.232486,-891.406075,2169.851549, 0.539373,0.808059,-0.236891,-536.042486,-802.244273,2169.851549, 0.371365,0.897759,-0.236891,-369.232486,-891.406075,2169.851549, 0.519633,0.778916,-0.3511,-524.927574,-785.609633,2234.768955, 0.357689,0.865325,-0.3511,-361.576402,-872.922654,2234.768955, 0.49247,0.738649,-0.460294,-509.589579,-762.654701,2296.83617, 0.357689,0.865325,-0.3511,-361.576402,-872.922654,2234.768955, 0.519633,0.778916,-0.3511,-524.927574,-785.609633,2234.768955, 0.357689,0.865325,-0.3511,-361.576402,-872.922654,2234.768955, 0.49247,0.738649,-0.460294,-509.589579,-762.654701,2296.83617, 0.338904,0.820532,-0.460294,-351.011407,-847.416499,2296.83617, 0.460101,0.686612,0.562913,-490.247555,-733.707316,1715.237645, 0.326755,0.720984,0.611076,-321.797626,-776.888194,1661.47676, 0.461133,0.643383,0.611076,-467.177743,-699.180902,1661.47676, 0.326755,0.720984,0.611076,-321.797626,-776.888194,1661.47676, 0.460101,0.686612,0.562913,-490.247555,-733.707316,1715.237645, 0.317309,0.76318,0.562913,-337.688389,-815.251889,1715.237645, 0.542249,0.507776,0.669425,-494.47895,-494.47895,628.271002, 0.525933,0.376953,0.762431,-541.006514,-361.488996,587.016307, 0.630892,0.392232,0.669425,-581.445733,-388.509618,628.271002, 0.525933,0.376953,0.762431,-541.006514,-361.488996,587.016307, 0.542249,0.507776,0.669425,-494.47895,-494.47895,628.271002, 0.442288,0.472315,0.762431,-460.088221,-460.088221,587.016307, 0.493963,0.737652,0.460294,-509.589579,-762.654701,1773.56823, 0.317309,0.76318,0.562913,-337.688389,-815.251889,1715.237645, 0.460101,0.686612,0.562913,-490.247555,-733.707316,1715.237645, 0.317309,0.76318,0.562913,-337.688389,-815.251889,1715.237645, 0.493963,0.737652,0.460294,-509.589579,-762.654701,1773.56823, 0.340563,0.819845,0.460294,-351.011407,-847.416499,1773.56823, 0.52077,0.778156,0.3511,-524.927574,-785.609633,1835.635445, 0.340563,0.819845,0.460294,-351.011407,-847.416499,1773.56823, 0.493963,0.737652,0.460294,-509.589579,-762.654701,1773.56823, 0.340563,0.819845,0.460294,-351.011407,-847.416499,1773.56823, 0.52077,0.778156,0.3511,-524.927574,-785.609633,1835.635445, 0.358953,0.864801,0.3511,-361.576402,-872.922654,1835.635445, 0.54014,0.807547,0.236891,-536.042486,-802.244273,1900.552851, 0.358953,0.864801,0.3511,-361.576402,-872.922654,1835.635445, 0.52077,0.778156,0.3511,-524.927574,-785.609633,1835.635445, 0.358953,0.864801,0.3511,-361.576402,-872.922654,1835.635445, 0.54014,0.807547,0.236891,-536.042486,-802.244273,1900.552851, 0.372217,0.897406,0.236891,-369.232486,-891.406075,1900.552851, -0.029352,0.894042,-0.447021,0,-700.735204,1661.47676, -0.145631,0.882589,-0.447021,154.934211,-778.906876,1474.61404, 0.029352,0.894042,-0.447021,0,-794.166564,1474.61404, -0.145631,0.882589,-0.447021,154.934211,-778.906876,1474.61404, -0.029352,0.894042,-0.447021,0,-700.735204,1661.47676, -0.203207,0.871137,-0.447021,136.706657,-687.270773,1661.47676, 0.55141,0.825661,-0.119297,-542.77557,-812.321046,2103.011094, 0.382683,0.92388,0,-375.423654,-906.352876,2035.2022, 0.55557,0.83147,0,-545.030668,-815.696038,2035.2022, 0.382683,0.92388,0,-375.423654,-906.352876,2035.2022, 0.55141,0.825661,-0.119297,-542.77557,-812.321046,2103.011094, 0.379736,0.917371,-0.119297,-373.870315,-902.602786,2103.011094, 0.539373,0.808059,-0.236891,-536.042486,-802.244273,2169.851549, 0.379736,0.917371,-0.119297,-373.870315,-902.602786,2103.011094, 0.55141,0.825661,-0.119297,-542.77557,-812.321046,2103.011094, 0.379736,0.917371,-0.119297,-373.870315,-902.602786,2103.011094, 0.539373,0.808059,-0.236891,-536.042486,-802.244273,2169.851549, 0.371365,0.897759,-0.236891,-369.232486,-891.406075,2169.851549, 0.897759,0.371365,-0.236891,-891.406075,-369.232486,2169.851549, 0.778916,0.519633,-0.3511,-785.609633,-524.927574,2234.768955, 0.808059,0.539373,-0.236891,-802.244273,-536.042486,2169.851549, 0.778916,0.519633,-0.3511,-785.609633,-524.927574,2234.768955, 0.897759,0.371365,-0.236891,-891.406075,-369.232486,2169.851549, 0.865325,0.357689,-0.3511,-872.922654,-361.576402,2234.768955, 0.865325,0.357689,-0.3511,-872.922654,-361.576402,2234.768955, 0.738649,0.49247,-0.460294,-762.654701,-509.589579,2296.83617, 0.778916,0.519633,-0.3511,-785.609633,-524.927574,2234.768955, 0.738649,0.49247,-0.460294,-762.654701,-509.589579,2296.83617, 0.865325,0.357689,-0.3511,-872.922654,-361.576402,2234.768955, 0.820532,0.338904,-0.460294,-847.416499,-351.011407,2296.83617, 0.743805,0.494626,0.449554,-611.383516,-408.513405,680.911024, 0.906011,0.374347,0.197505,-698.56474,-289.354989,741.194313, 0.815571,0.543908,0.197505,-628.691656,-420.078334,741.194313, 0.906011,0.374347,0.197505,-698.56474,-289.354989,741.194313, 0.743805,0.494626,0.449554,-611.383516,-408.513405,680.911024, 0.82601,0.340012,0.449554,-679.332965,-281.388928,680.911024, 0.55557,0.83147,0,-545.030668,-815.696038,2035.2022, 0.380165,0.917193,0.119297,-373.870315,-902.602786,1967.393306, 0.551796,0.825403,0.119297,-542.77557,-812.321046,1967.393306, 0.380165,0.917193,0.119297,-373.870315,-902.602786,1967.393306, 0.55557,0.83147,0,-545.030668,-815.696038,2035.2022, 0.382683,0.92388,0,-375.423654,-906.352876,2035.2022, 0.458274,0.687833,-0.562913,-490.247555,-733.707316,2355.166755, 0.338904,0.820532,-0.460294,-351.011407,-847.416499,2296.83617, 0.49247,0.738649,-0.460294,-509.589579,-762.654701,2296.83617, 0.338904,0.820532,-0.460294,-351.011407,-847.416499,2296.83617, 0.458274,0.687833,-0.562913,-490.247555,-733.707316,2355.166755, 0.315278,0.764021,-0.562913,-337.688389,-815.251889,2355.166755, 0.417941,0.672244,-0.611076,-467.177743,-699.180902,2408.92764, 0.315278,0.764021,-0.562913,-337.688389,-815.251889,2355.166755, 0.458274,0.687833,-0.562913,-490.247555,-733.707316,2355.166755, 0.315278,0.764021,-0.562913,-337.688389,-815.251889,2355.166755, 0.417941,0.672244,-0.611076,-467.177743,-699.180902,2408.92764, 0.278762,0.740863,-0.611076,-321.797626,-776.888194,2408.92764, 0.306655,0.676633,0.669425,-267.610079,-646.067883,628.271002, 0.341645,0.549525,0.762431,-361.488996,-541.006514,587.016307, 0.432767,0.603806,0.669425,-388.509618,-581.445733,628.271002, 0.341645,0.549525,0.762431,-361.488996,-541.006514,587.016307, 0.306655,0.676633,0.669425,-267.610079,-646.067883,628.271002, 0.227874,0.605618,0.762431,-248.997951,-601.13423,587.016307, 0.527988,0.849252,-0,-415.261462,-621.482696,2549.07468, 0.412792,0.910825,-0,-286.03707,-690.554573,2408.92764, 0.582554,0.812792,-0,-415.261462,-621.482696,2408.92764, 0.412792,0.910825,-0,-286.03707,-690.554573,2408.92764, 0.527988,0.849252,-0,-415.261462,-621.482696,2549.07468, 0.352162,0.935939,-0,-286.03707,-690.554573,2549.07468, 0.343652,0.824502,0.449554,-281.388928,-679.332965,680.911024, 0.168758,0.723457,0.669425,-136.426435,-685.862006,628.271002, 0.306655,0.676633,0.669425,-267.610079,-646.067883,628.271002, 0.168758,0.723457,0.669425,-136.426435,-685.862006,628.271002, 0.343652,0.824502,0.449554,-281.388928,-679.332965,680.911024, 0.176197,0.875703,0.449554,-143.450831,-721.176029,680.911024, 0.381505,0.921818,-0.068597,-290.941975,-702.396062,804.835469, 0.192095,0.961297,0.197505,-147.511894,-741.592372,741.194313, 0.375943,0.90535,0.197505,-289.354989,-698.56474,741.194313, 0.192095,0.961297,0.197505,-147.511894,-741.592372,741.194313, 0.381505,0.921818,-0.068597,-290.941975,-702.396062,804.835469, 0.194336,0.978533,-0.068597,-148.320933,-745.659682,804.835469, 0.001099,0.826515,0.562913,0,-882.422286,1715.237645, -0.12887,0.781011,0.611076,164.051007,-824.740108,1661.47676, 0.025974,0.791146,0.611076,0,-840.897722,1661.47676, -0.12887,0.781011,0.611076,164.051007,-824.740108,1661.47676, 0.001099,0.826515,0.562913,0,-882.422286,1715.237645, -0.160167,0.810848,0.562913,172.152048,-865.466789,1715.237645, 0.375943,0.90535,0.197505,-289.354989,-698.56474,741.194313, 0.176197,0.875703,0.449554,-143.450831,-721.176029,680.911024, 0.343652,0.824502,0.449554,-281.388928,-679.332965,680.911024, 0.176197,0.875703,0.449554,-143.450831,-721.176029,680.911024, 0.375943,0.90535,0.197505,-289.354989,-698.56474,741.194313, 0.192095,0.961297,0.197505,-147.511894,-741.592372,741.194313, 0.162323,0.81042,0.562913,-172.152048,-865.466789,1715.237645, 0.025974,0.791146,0.611076,0,-840.897722,1661.47676, 0.179819,0.770877,0.611076,-164.051007,-824.740108,1661.47676, 0.025974,0.791146,0.611076,0,-840.897722,1661.47676, 0.162323,0.81042,0.562913,-172.152048,-865.466789,1715.237645, 0.001099,0.826515,0.562913,0,-882.422286,1715.237645, 0.344985,0.916863,-0.200867,-286.03707,-690.554573,867.310387, 0.194336,0.978533,-0.068597,-148.320933,-745.659682,804.835469, 0.381505,0.921818,-0.068597,-290.941975,-702.396062,804.835469, 0.194336,0.978533,-0.068597,-148.320933,-745.659682,804.835469, 0.344985,0.916863,-0.200867,-286.03707,-690.554573,867.310387, 0.159485,0.966549,-0.200867,-145.820434,-733.088824,867.310387, 0.22552,0.599364,-0.768052,-178.773169,-431.596609,1100.8886, 0.145475,0.623645,-0.768052,-145.820434,-733.088824,867.310387, 0.264347,0.583281,-0.768052,-286.03707,-690.554573,867.310387, 0.145475,0.623645,-0.768052,-145.820434,-733.088824,867.310387, 0.22552,0.599364,-0.768052,-178.773169,-431.596609,1100.8886, 0.104257,0.631844,-0.768052,-91.137771,-458.180517,1100.8886, 0.315017,0.837219,-0.447021,-232.405119,-561.075591,1287.75132, 0.203207,0.871137,-0.447021,-136.706657,-687.270773,1100.8886, 0.369253,0.814754,-0.447021,-268.159753,-647.394912,1100.8886, 0.203207,0.871137,-0.447021,-136.706657,-687.270773,1100.8886, 0.315017,0.837219,-0.447021,-232.405119,-561.075591,1287.75132, 0.145631,0.882589,-0.447021,-118.479102,-595.634671,1287.75132, 0.315017,0.837219,-0.447021,-250.282436,-604.235252,1474.61404, 0.203207,0.871137,-0.447021,-145.820434,-733.088824,1287.75132, 0.369253,0.814754,-0.447021,-286.03707,-690.554573,1287.75132, 0.203207,0.871137,-0.447021,-145.820434,-733.088824,1287.75132, 0.315017,0.837219,-0.447021,-250.282436,-604.235252,1474.61404, 0.145631,0.882589,-0.447021,-127.592879,-641.452722,1474.61404, 0.315017,0.837219,-0.447021,-268.159753,-647.394912,1661.47676, 0.203207,0.871137,-0.447021,-154.934211,-778.906876,1474.61404, 0.369253,0.814754,-0.447021,-303.914386,-733.714234,1474.61404, 0.203207,0.871137,-0.447021,-154.934211,-778.906876,1474.61404, 0.315017,0.837219,-0.447021,-268.159753,-647.394912,1661.47676, 0.145631,0.882589,-0.447021,-136.706657,-687.270773,1661.47676, 0.317309,0.76318,0.562913,-337.688389,-815.251889,1715.237645, 0.179819,0.770877,0.611076,-164.051007,-824.740108,1661.47676, 0.326755,0.720984,0.611076,-321.797626,-776.888194,1661.47676, 0.179819,0.770877,0.611076,-164.051007,-824.740108,1661.47676, 0.317309,0.76318,0.562913,-337.688389,-815.251889,1715.237645, 0.162323,0.81042,0.562913,-172.152048,-865.466789,1715.237645, 0.340563,0.819845,0.460294,-351.011407,-847.416499,1773.56823, 0.162323,0.81042,0.562913,-172.152048,-865.466789,1715.237645, 0.317309,0.76318,0.562913,-337.688389,-815.251889,1715.237645, 0.162323,0.81042,0.562913,-172.152048,-865.466789,1715.237645, 0.340563,0.819845,0.460294,-351.011407,-847.416499,1773.56823, 0.174075,0.870533,0.460294,-178.944064,-899.612557,1773.56823, 0.358953,0.864801,0.3511,-361.576402,-872.922654,1835.635445, 0.174075,0.870533,0.460294,-178.944064,-899.612557,1773.56823, 0.340563,0.819845,0.460294,-351.011407,-847.416499,1773.56823, 0.174075,0.870533,0.460294,-178.944064,-899.612557,1773.56823, 0.358953,0.864801,0.3511,-361.576402,-872.922654,1835.635445, 0.183341,0.918213,0.3511,-184.330051,-926.689746,1835.635445, 0.382683,0.92388,0,-375.423654,-906.352876,2035.2022, 0.193925,0.973736,0.119297,-190.597434,-958.198007,1967.393306, 0.380165,0.917193,0.119297,-373.870315,-902.602786,1967.393306, 0.193925,0.973736,0.119297,-190.597434,-958.198007,1967.393306, 0.382683,0.92388,0,-375.423654,-906.352876,2035.2022, 0.139589,0.989621,0.034132,-191.389319,-962.179081,2035.2022, 0.338904,0.820532,-0.460294,-351.011407,-847.416499,2296.83617, 0.181999,0.91848,-0.3511,-184.330051,-926.689746,2234.768955, 0.357689,0.865325,-0.3511,-361.576402,-872.922654,2234.768955, 0.181999,0.91848,-0.3511,-184.330051,-926.689746,2234.768955, 0.338904,0.820532,-0.460294,-351.011407,-847.416499,2296.83617, 0.172314,0.870883,-0.460294,-178.944064,-899.612557,2296.83617, 0.357689,0.865325,-0.3511,-361.576402,-872.922654,2234.768955, 0.189085,0.952958,-0.236891,-188.233089,-946.311642,2169.851549, 0.371365,0.897759,-0.236891,-369.232486,-891.406075,2169.851549, 0.189085,0.952958,-0.236891,-188.233089,-946.311642,2169.851549, 0.357689,0.865325,-0.3511,-361.576402,-872.922654,2234.768955, 0.181999,0.91848,-0.3511,-184.330051,-926.689746,2234.768955, 0.352162,0.935939,-0,-286.03707,-690.554573,2549.07468, 0.227168,0.973856,-0,-145.820434,-733.088824,2408.92764, 0.412792,0.910825,-0,-286.03707,-690.554573,2408.92764, 0.227168,0.973856,-0,-145.820434,-733.088824,2408.92764, 0.352162,0.935939,-0,-286.03707,-690.554573,2549.07468, 0.162803,0.986659,-0,-145.820434,-733.088824,2549.07468, 0.168758,0.723457,0.669425,-136.426435,-685.862006,628.271002, 0.227874,0.605618,0.762431,-248.997951,-601.13423,587.016307, 0.306655,0.676633,0.669425,-267.610079,-646.067883,628.271002, 0.227874,0.605618,0.762431,-248.997951,-601.13423,587.016307, 0.168758,0.723457,0.669425,-136.426435,-685.862006,628.271002, 0.105345,0.638437,0.762431,-126.938055,-638.160695,587.016307, 0.176197,0.875703,0.449554,-143.450831,-721.176029,680.911024, 0.024376,0.742479,0.669425,0,-699.298837,628.271002, 0.168758,0.723457,0.669425,-136.426435,-685.862006,628.271002, 0.024376,0.742479,0.669425,0,-699.298837,628.271002, 0.176197,0.875703,0.449554,-143.450831,-721.176029,680.911024, 0.00197,0.893251,0.449554,0,-735.304703,680.911024, 0.192095,0.961297,0.197505,-147.511894,-741.592372,741.194313, 0.00197,0.893251,0.449554,0,-735.304703,680.911024, 0.176197,0.875703,0.449554,-143.450831,-721.176029,680.911024, 0.00197,0.893251,0.449554,0,-735.304703,680.911024, 0.192095,0.961297,0.197505,-147.511894,-741.592372,741.194313, 0.000864,0.980301,0.197505,0,-756.121025,741.194313, 0.194336,0.978533,-0.068597,-148.320933,-745.659682,804.835469, 0.000864,0.980301,0.197505,0,-756.121025,741.194313, 0.192095,0.961297,0.197505,-147.511894,-741.592372,741.194313, 0.000864,0.980301,0.197505,0,-756.121025,741.194313, 0.194336,0.978533,-0.068597,-148.320933,-745.659682,804.835469, -0.0003,0.997644,-0.068597,0,-760.268019,804.835469, 0.159485,0.966549,-0.200867,-145.820434,-733.088824,867.310387, -0.0003,0.997644,-0.068597,0,-760.268019,804.835469, 0.194336,0.978533,-0.068597,-148.320933,-745.659682,804.835469, -0.0003,0.997644,-0.068597,0,-760.268019,804.835469, 0.159485,0.966549,-0.200867,-145.820434,-733.088824,867.310387, -0.032144,0.979091,-0.200867,0,-747.450884,867.310387, 0.104257,0.631844,-0.768052,-91.137771,-458.180517,1100.8886, 0,0.640184,-0.768222,0,-747.450884,867.310387, 0.145475,0.623645,-0.768052,-145.820434,-733.088824,867.310387, 0,0.640184,-0.768222,0,-747.450884,867.310387, 0.104257,0.631844,-0.768052,-91.137771,-458.180517,1100.8886, 0,0.640184,-0.768222,0,-467.156804,1100.8886, 0.145631,0.882589,-0.447021,-118.479102,-595.634671,1287.75132, 0.029352,0.894042,-0.447021,0,-700.735204,1100.8886, 0.203207,0.871137,-0.447021,-136.706657,-687.270773,1100.8886, 0.029352,0.894042,-0.447021,0,-700.735204,1100.8886, 0.145631,0.882589,-0.447021,-118.479102,-595.634671,1287.75132, -0.029352,0.894042,-0.447021,0,-607.303844,1287.75132, 0.732968,0.120943,0.669425,-685.862006,-136.426435,628.271002, 0.869022,0.085591,0.487313,-735.304703,0,680.911024, 0.876472,0.172332,0.449554,-721.176029,-143.450831,680.911024, 0.869022,0.085591,0.487313,-735.304703,0,680.911024, 0.732968,0.120943,0.669425,-685.862006,-136.426435,628.271002, 0.740721,0.072955,0.66784,-699.298837,0,628.271002, -0.875139,0.086194,0.476133,917.237009,-0,1773.56823, -0.810848,0.160167,0.562913,865.466789,-172.152048,1715.237645, -0.870883,0.172314,0.460294,899.612557,-178.944064,1773.56823, -0.810848,0.160167,0.562913,865.466789,-172.152048,1715.237645, -0.875139,0.086194,0.476133,917.237009,-0,1773.56823, -0.812508,0.080025,0.577431,882.422286,-0,1715.237645, -0.029352,0.894042,-0.447021,0,-654.019524,1474.61404, -0.145631,0.882589,-0.447021,145.820434,-733.088824,1287.75132, 0.029352,0.894042,-0.447021,0,-747.450884,1287.75132, -0.145631,0.882589,-0.447021,145.820434,-733.088824,1287.75132, -0.029352,0.894042,-0.447021,0,-654.019524,1474.61404, -0.203207,0.871137,-0.447021,127.592879,-641.452722,1474.61404, 0.145631,0.882589,-0.447021,-136.706657,-687.270773,1661.47676, 0.029352,0.894042,-0.447021,0,-794.166564,1474.61404, 0.203207,0.871137,-0.447021,-154.934211,-778.906876,1474.61404, 0.029352,0.894042,-0.447021,0,-794.166564,1474.61404, 0.145631,0.882589,-0.447021,-136.706657,-687.270773,1661.47676, -0.029352,0.894042,-0.447021,0,-700.735204,1661.47676, -0.925281,0.091132,0.36817,944.844672,-0,1835.635445, -0.870883,0.172314,0.460294,899.612557,-178.944064,1773.56823, -0.91848,0.181999,0.3511,926.689746,-184.330051,1835.635445, -0.870883,0.172314,0.460294,899.612557,-178.944064,1773.56823, -0.925281,0.091132,0.36817,944.844672,-0,1835.635445, -0.875139,0.086194,0.476133,917.237009,-0,1773.56823, -0.000898,0.887766,-0.460294,0,-917.237009,2296.83617, -0.183341,0.918213,-0.3511,184.330051,-926.689746,2234.768955, -0.014053,0.939213,-0.343046,0,-944.844672,2234.768955, -0.183341,0.918213,-0.3511,184.330051,-926.689746,2234.768955, -0.000898,0.887766,-0.460294,0,-917.237009,2296.83617, -0.197225,0.872604,-0.446838,178.944064,-899.612557,2296.83617, 0.183341,0.918213,0.3511,-184.330051,-926.689746,1835.635445, 0.000898,0.887766,0.460294,0,-917.237009,1773.56823, 0.174075,0.870533,0.460294,-178.944064,-899.612557,1773.56823, 0.000898,0.887766,0.460294,0,-917.237009,1773.56823, 0.183341,0.918213,0.3511,-184.330051,-926.689746,1835.635445, -0.01288,0.939228,0.343052,0,-944.844672,1835.635445, 0.18999,0.952778,0.236891,-188.233089,-946.311642,1900.552851, -0.01288,0.939228,0.343052,0,-944.844672,1835.635445, 0.183341,0.918213,0.3511,-184.330051,-926.689746,1835.635445, -0.01288,0.939228,0.343052,0,-944.844672,1835.635445, 0.18999,0.952778,0.236891,-188.233089,-946.311642,1900.552851, 0.000461,0.971536,0.236891,0,-964.850983,1900.552851, -0.172332,0.876472,0.449554,143.450831,-721.176029,680.911024, -0.2815,0.687288,0.669621,267.610079,-646.067883,628.271002, -0.130866,0.717913,0.683722,136.426435,-685.862006,628.271002, -0.2815,0.687288,0.669621,267.610079,-646.067883,628.271002, -0.172332,0.876472,0.449554,143.450831,-721.176029,680.911024, -0.340012,0.82601,0.449554,281.388928,-679.332965,680.911024, -0.1904,0.961634,0.197505,147.511894,-741.592372,741.194313, -0.340012,0.82601,0.449554,281.388928,-679.332965,680.911024, -0.172332,0.876472,0.449554,143.450831,-721.176029,680.911024, -0.340012,0.82601,0.449554,281.388928,-679.332965,680.911024, -0.1904,0.961634,0.197505,147.511894,-741.592372,741.194313, -0.374347,0.906011,0.197505,289.354989,-698.56474,741.194313, -0.194925,0.978416,-0.068597,148.320933,-745.659682,804.835469, -0.374347,0.906011,0.197505,289.354989,-698.56474,741.194313, -0.1904,0.961634,0.197505,147.511894,-741.592372,741.194313, -0.374347,0.906011,0.197505,289.354989,-698.56474,741.194313, -0.194925,0.978416,-0.068597,148.320933,-745.659682,804.835469, -0.382059,0.921588,-0.068597,290.941975,-702.396062,804.835469, -0.222538,0.954007,-0.200867,145.820434,-733.088824,867.310387, -0.382059,0.921588,-0.068597,290.941975,-702.396062,804.835469, -0.194925,0.978416,-0.068597,148.320933,-745.659682,804.835469, -0.382059,0.921588,-0.068597,290.941975,-702.396062,804.835469, -0.222538,0.954007,-0.200867,145.820434,-733.088824,867.310387, -0.404379,0.892261,-0.200867,286.03707,-690.554573,867.310387, -0.22552,0.599364,-0.768052,178.773169,-431.596609,1100.8886, -0.145475,0.623645,-0.768052,145.820434,-733.088824,867.310387, -0.104257,0.631844,-0.768052,91.137771,-458.180517,1100.8886, -0.145475,0.623645,-0.768052,145.820434,-733.088824,867.310387, -0.22552,0.599364,-0.768052,178.773169,-431.596609,1100.8886, -0.264347,0.583281,-0.768052,286.03707,-690.554573,867.310387, -0.203207,0.871137,-0.447021,118.479102,-595.634671,1287.75132, -0.315017,0.837219,-0.447021,268.159753,-647.394912,1100.8886, -0.145631,0.882589,-0.447021,136.706657,-687.270773,1100.8886, -0.315017,0.837219,-0.447021,268.159753,-647.394912,1100.8886, -0.203207,0.871137,-0.447021,118.479102,-595.634671,1287.75132, -0.369253,0.814754,-0.447021,232.405119,-561.075591,1287.75132, -0.203207,0.871137,-0.447021,127.592879,-641.452722,1474.61404, -0.315017,0.837219,-0.447021,286.03707,-690.554573,1287.75132, -0.145631,0.882589,-0.447021,145.820434,-733.088824,1287.75132, -0.315017,0.837219,-0.447021,286.03707,-690.554573,1287.75132, -0.203207,0.871137,-0.447021,127.592879,-641.452722,1474.61404, -0.369253,0.814754,-0.447021,250.282436,-604.235252,1474.61404, -0.203207,0.871137,-0.447021,136.706657,-687.270773,1661.47676, -0.315017,0.837219,-0.447021,303.914386,-733.714234,1474.61404, -0.145631,0.882589,-0.447021,154.934211,-778.906876,1474.61404, -0.315017,0.837219,-0.447021,303.914386,-733.714234,1474.61404, -0.203207,0.871137,-0.447021,136.706657,-687.270773,1661.47676, -0.369253,0.814754,-0.447021,268.159753,-647.394912,1661.47676, -0.160167,0.810848,0.562913,172.152048,-865.466789,1715.237645, -0.278762,0.740863,0.611076,321.797626,-776.888194,1661.47676, -0.12887,0.781011,0.611076,164.051007,-824.740108,1661.47676, -0.278762,0.740863,0.611076,321.797626,-776.888194,1661.47676, -0.160167,0.810848,0.562913,172.152048,-865.466789,1715.237645, -0.315278,0.764021,0.562913,337.688389,-815.251889,1715.237645, -0.962266,0.094775,0.255071,964.850983,-0,1900.552851, -0.91848,0.181999,0.3511,926.689746,-184.330051,1835.635445, -0.952958,0.189085,0.236891,946.311642,-188.233089,1900.552851, -0.91848,0.181999,0.3511,926.689746,-184.330051,1835.635445, -0.962266,0.094775,0.255071,964.850983,-0,1900.552851, -0.925281,0.091132,0.36817,944.844672,-0,1835.635445, 0.812508,0.080025,-0.577431,-882.422286,0,2355.166755, 0.781011,0.12887,-0.611076,-824.740108,-164.051007,2408.92764, 0.810848,0.160167,-0.562913,-865.466789,-172.152048,2355.166755, 0.781011,0.12887,-0.611076,-824.740108,-164.051007,2408.92764, 0.812508,0.080025,-0.577431,-882.422286,0,2355.166755, 0.789019,0.077712,-0.609434,-840.897722,0,2408.92764, -0.172314,0.870883,0.460294,178.944064,-899.612557,1773.56823, -0.315278,0.764021,0.562913,337.688389,-815.251889,1715.237645, -0.160167,0.810848,0.562913,172.152048,-865.466789,1715.237645, -0.315278,0.764021,0.562913,337.688389,-815.251889,1715.237645, -0.172314,0.870883,0.460294,178.944064,-899.612557,1773.56823, -0.32859,0.82894,0.452643,351.011407,-847.416499,1773.56823, 0.871137,0.203207,-0.447021,-687.270773,-136.706657,1100.8886, 0.837219,0.315017,-0.447021,-561.075591,-232.405119,1287.75132, 0.814754,0.369253,-0.447021,-647.394912,-268.159753,1100.8886, 0.837219,0.315017,-0.447021,-561.075591,-232.405119,1287.75132, 0.871137,0.203207,-0.447021,-687.270773,-136.706657,1100.8886, 0.882589,0.145631,-0.447021,-595.634671,-118.479102,1287.75132, -0.985604,0.097074,0.138423,976.970216,-0,1967.393306, -0.952958,0.189085,0.236891,946.311642,-188.233089,1900.552851, -0.973826,0.193469,0.119297,958.198007,-190.597434,1967.393306, -0.952958,0.189085,0.236891,946.311642,-188.233089,1900.552851, -0.985604,0.097074,0.138423,976.970216,-0,1967.393306, -0.962266,0.094775,0.255071,964.850983,-0,1900.552851, -0.162323,0.81042,-0.562913,172.152048,-865.466789,2355.166755, -0.353801,0.818498,-0.452643,351.011407,-847.416499,2296.83617, -0.197225,0.872604,-0.446838,178.944064,-899.612557,2296.83617, -0.353801,0.818498,-0.452643,351.011407,-847.416499,2296.83617, -0.162323,0.81042,-0.562913,172.152048,-865.466789,2355.166755, -0.317309,0.76318,-0.562913,337.688389,-815.251889,2355.166755, -0.995185,0.098017,-0,981.029284,-0,2035.2022, -0.973826,0.193469,0.119297,958.198007,-190.597434,1967.393306, -0.973856,0.227168,-0,962.179081,-191.389319,2035.2022, -0.973826,0.193469,0.119297,958.198007,-190.597434,1967.393306, -0.995185,0.098017,-0,981.029284,-0,2035.2022, -0.985604,0.097074,0.138423,976.970216,-0,1967.393306, -0.179819,0.770877,-0.611076,164.051007,-824.740108,2408.92764, -0.317309,0.76318,-0.562913,337.688389,-815.251889,2355.166755, -0.162323,0.81042,-0.562913,172.152048,-865.466789,2355.166755, -0.317309,0.76318,-0.562913,337.688389,-815.251889,2355.166755, -0.179819,0.770877,-0.611076,164.051007,-824.740108,2408.92764, -0.326755,0.720984,-0.611076,321.797626,-776.888194,2408.92764, -0.227168,0.973856,-0,145.820434,-733.088824,2549.07468, -0.352162,0.935939,-0,286.03707,-690.554573,2408.92764, -0.162803,0.986659,-0,145.820434,-733.088824,2408.92764, -0.352162,0.935939,-0,286.03707,-690.554573,2408.92764, -0.227168,0.973856,-0,145.820434,-733.088824,2549.07468, -0.412792,0.910825,-0,286.03707,-690.554573,2549.07468, -0.130866,0.717913,0.683722,136.426435,-685.862006,628.271002, -0.227874,0.605618,0.762431,248.997951,-601.13423,587.016307, -0.126198,0.634438,0.762603,126.938055,-638.160695,587.016307, -0.227874,0.605618,0.762431,248.997951,-601.13423,587.016307, -0.130866,0.717913,0.683722,136.426435,-685.862006,628.271002, -0.2815,0.687288,0.669621,267.610079,-646.067883,628.271002, -0.340012,0.82601,0.449554,281.388928,-679.332965,680.911024, -0.410175,0.619164,0.669621,388.509618,-581.445733,628.271002, -0.2815,0.687288,0.669621,267.610079,-646.067883,628.271002, -0.410175,0.619164,0.669621,388.509618,-581.445733,628.271002, -0.340012,0.82601,0.449554,281.388928,-679.332965,680.911024, -0.494626,0.743805,0.449554,408.513405,-611.383516,680.911024, -0.374347,0.906011,0.197505,289.354989,-698.56474,741.194313, -0.494626,0.743805,0.449554,408.513405,-611.383516,680.911024, -0.340012,0.82601,0.449554,281.388928,-679.332965,680.911024, -0.494626,0.743805,0.449554,408.513405,-611.383516,680.911024, -0.374347,0.906011,0.197505,289.354989,-698.56474,741.194313, -0.543908,0.815571,0.197505,420.078334,-628.691656,741.194313, -0.382059,0.921588,-0.068597,290.941975,-702.396062,804.835469, -0.543908,0.815571,0.197505,420.078334,-628.691656,741.194313, -0.374347,0.906011,0.197505,289.354989,-698.56474,741.194313, -0.543908,0.815571,0.197505,420.078334,-628.691656,741.194313, -0.382059,0.921588,-0.068597,290.941975,-702.396062,804.835469, -0.554511,0.829344,-0.068597,422.38228,-632.139755,804.835469, -0.404379,0.892261,-0.200867,286.03707,-690.554573,867.310387, -0.554511,0.829344,-0.068597,422.38228,-632.139755,804.835469, -0.382059,0.921588,-0.068597,290.941975,-702.396062,804.835469, -0.554511,0.829344,-0.068597,422.38228,-632.139755,804.835469, -0.404379,0.892261,-0.200867,286.03707,-690.554573,867.310387, -0.570681,0.796226,-0.200867,415.261462,-621.482696,867.310387, -0.973826,0.193469,-0.119297,958.198007,-190.597434,2103.011094, -0.995185,0.098017,-0,981.029284,-0,2035.2022, -0.973856,0.227168,-0,962.179081,-191.389319,2035.2022, -0.995185,0.098017,-0,981.029284,-0,2035.2022, -0.973826,0.193469,-0.119297,958.198007,-190.597434,2103.011094, -0.985604,0.097074,-0.138423,976.970216,-0,2103.011094, -0.952958,0.189085,-0.236891,946.311642,-188.233089,2169.851549, -0.985604,0.097074,-0.138423,976.970216,-0,2103.011094, -0.973826,0.193469,-0.119297,958.198007,-190.597434,2103.011094, -0.985604,0.097074,-0.138423,976.970216,-0,2103.011094, -0.952958,0.189085,-0.236891,946.311642,-188.233089,2169.851549, -0.962266,0.094775,-0.255071,964.850983,-0,2169.851549, -0.338117,0.54385,-0.768052,259.538414,-388.426686,1100.8886, -0.264347,0.583281,-0.768052,286.03707,-690.554573,867.310387, -0.22552,0.599364,-0.768052,178.773169,-431.596609,1100.8886, -0.264347,0.583281,-0.768052,286.03707,-690.554573,867.310387, -0.338117,0.54385,-0.768052,259.538414,-388.426686,1100.8886, -0.37306,0.520502,-0.768052,415.261462,-621.482696,867.310387, -0.369253,0.814754,-0.447021,232.405119,-561.075591,1287.75132, -0.472298,0.759676,-0.447021,389.30762,-582.640028,1100.8886, -0.315017,0.837219,-0.447021,268.159753,-647.394912,1100.8886, -0.472298,0.759676,-0.447021,389.30762,-582.640028,1100.8886, -0.369253,0.814754,-0.447021,232.405119,-561.075591,1287.75132, -0.521108,0.727062,-0.447021,337.399938,-504.954691,1287.75132, 0.870883,0.172314,-0.460294,-899.612557,-178.944064,2296.83617, 0.764021,0.315278,-0.562913,-815.251889,-337.688389,2355.166755, 0.820532,0.338904,-0.460294,-847.416499,-351.011407,2296.83617, 0.764021,0.315278,-0.562913,-815.251889,-337.688389,2355.166755, 0.870883,0.172314,-0.460294,-899.612557,-178.944064,2296.83617, 0.810848,0.160167,-0.562913,-865.466789,-172.152048,2355.166755, 0.973826,0.193469,-0.119297,-958.198007,-190.597434,2103.011094, 0.897759,0.371365,-0.236891,-891.406075,-369.232486,2169.851549, 0.917371,0.379736,-0.119297,-902.602786,-373.870315,2103.011094, 0.897759,0.371365,-0.236891,-891.406075,-369.232486,2169.851549, 0.973826,0.193469,-0.119297,-958.198007,-190.597434,2103.011094, 0.952958,0.189085,-0.236891,-946.311642,-188.233089,2169.851549, -0.369253,0.814754,-0.447021,250.282436,-604.235252,1474.61404, -0.472298,0.759676,-0.447021,415.261462,-621.482696,1287.75132, -0.315017,0.837219,-0.447021,286.03707,-690.554573,1287.75132, -0.472298,0.759676,-0.447021,415.261462,-621.482696,1287.75132, -0.369253,0.814754,-0.447021,250.282436,-604.235252,1474.61404, -0.521108,0.727062,-0.447021,363.353779,-543.79736,1474.61404, -0.369253,0.814754,-0.447021,268.159753,-647.394912,1661.47676, -0.472298,0.759676,-0.447021,441.215303,-660.325365,1474.61404, -0.315017,0.837219,-0.447021,303.914386,-733.714234,1474.61404, -0.472298,0.759676,-0.447021,441.215303,-660.325365,1474.61404, -0.369253,0.814754,-0.447021,268.159753,-647.394912,1661.47676, -0.521108,0.727062,-0.447021,389.30762,-582.640028,1661.47676, -0.315278,0.764021,0.562913,337.688389,-815.251889,1715.237645, -0.417941,0.672244,0.611076,467.177743,-699.180902,1661.47676, -0.278762,0.740863,0.611076,321.797626,-776.888194,1661.47676, -0.417941,0.672244,0.611076,467.177743,-699.180902,1661.47676, -0.315278,0.764021,0.562913,337.688389,-815.251889,1715.237645, -0.458274,0.687833,0.562913,490.247555,-733.707316,1715.237645, -0.32859,0.82894,0.452643,351.011407,-847.416499,1773.56823, -0.458274,0.687833,0.562913,490.247555,-733.707316,1715.237645, -0.315278,0.764021,0.562913,337.688389,-815.251889,1715.237645, -0.458274,0.687833,0.562913,490.247555,-733.707316,1715.237645, -0.32859,0.82894,0.452643,351.011407,-847.416499,1773.56823, -0.477566,0.756484,0.446838,509.589579,-762.654701,1773.56823, 0.808059,0.539373,0.236891,-802.244273,-536.042486,1900.552851, 0.917371,0.379736,0.119297,-902.602786,-373.870315,1967.393306, 0.825661,0.55141,0.119297,-812.321046,-542.77557,1967.393306, 0.917371,0.379736,0.119297,-902.602786,-373.870315,1967.393306, 0.808059,0.539373,0.236891,-802.244273,-536.042486,1900.552851, 0.897759,0.371365,0.236891,-891.406075,-369.232486,1900.552851, 0.825661,0.55141,0.119297,-812.321046,-542.77557,1967.393306, 0.910825,0.412792,0,-906.352876,-375.423654,2035.2022, 0.812792,0.582554,0,-815.696038,-545.030668,2035.2022, 0.910825,0.412792,0,-906.352876,-375.423654,2035.2022, 0.825661,0.55141,0.119297,-812.321046,-542.77557,1967.393306, 0.917371,0.379736,0.119297,-902.602786,-373.870315,1967.393306, 0.910825,0.412792,0,-906.352876,-375.423654,2035.2022, 0.825661,0.55141,-0.119297,-812.321046,-542.77557,2103.011094, 0.812792,0.582554,0,-815.696038,-545.030668,2035.2022, 0.825661,0.55141,-0.119297,-812.321046,-542.77557,2103.011094, 0.910825,0.412792,0,-906.352876,-375.423654,2035.2022, 0.917371,0.379736,-0.119297,-902.602786,-373.870315,2103.011094, 0.630892,0.392232,0.669425,-581.445733,-388.509618,628.271002, 0.82601,0.340012,0.449554,-679.332965,-281.388928,680.911024, 0.743805,0.494626,0.449554,-611.383516,-408.513405,680.911024, 0.82601,0.340012,0.449554,-679.332965,-281.388928,680.911024, 0.630892,0.392232,0.669425,-581.445733,-388.509618,628.271002, 0.69529,0.261614,0.669425,-646.067883,-267.610079,628.271002, -0.317309,0.76318,-0.562913,337.688389,-815.251889,2355.166755, -0.468784,0.754023,-0.460099,509.589579,-762.654701,2296.83617, -0.353801,0.818498,-0.452643,351.011407,-847.416499,2296.83617, -0.468784,0.754023,-0.460099,509.589579,-762.654701,2296.83617, -0.317309,0.76318,-0.562913,337.688389,-815.251889,2355.166755, -0.460101,0.686612,-0.562913,490.247555,-733.707316,2355.166755, -0.326755,0.720984,-0.611076,321.797626,-776.888194,2408.92764, -0.460101,0.686612,-0.562913,490.247555,-733.707316,2355.166755, -0.317309,0.76318,-0.562913,337.688389,-815.251889,2355.166755, -0.460101,0.686612,-0.562913,490.247555,-733.707316,2355.166755, -0.326755,0.720984,-0.611076,321.797626,-776.888194,2408.92764, -0.461133,0.643383,-0.611076,467.177743,-699.180902,2408.92764, -0.412792,0.910825,-0,286.03707,-690.554573,2549.07468, -0.527988,0.849252,-0,415.261462,-621.482696,2408.92764, -0.352162,0.935939,-0,286.03707,-690.554573,2408.92764, -0.527988,0.849252,-0,415.261462,-621.482696,2408.92764, -0.412792,0.910825,-0,286.03707,-690.554573,2549.07468, -0.582554,0.812792,-0,415.261462,-621.482696,2549.07468, -0.2815,0.687288,0.669621,267.610079,-646.067883,628.271002, -0.341645,0.549525,0.762431,361.488996,-541.006514,587.016307, -0.227874,0.605618,0.762431,248.997951,-601.13423,587.016307, -0.341645,0.549525,0.762431,361.488996,-541.006514,587.016307, -0.2815,0.687288,0.669621,267.610079,-646.067883,628.271002, -0.410175,0.619164,0.669621,388.509618,-581.445733,628.271002, -0.494626,0.743805,0.449554,408.513405,-611.383516,680.911024, -0.540644,0.52765,0.655203,494.47895,-494.47895,628.271002, -0.410175,0.619164,0.669621,388.509618,-581.445733,628.271002, -0.540644,0.52765,0.655203,494.47895,-494.47895,628.271002, -0.494626,0.743805,0.449554,408.513405,-611.383516,680.911024, -0.645232,0.645232,0.409086,519.938942,-519.938942,680.911024, -0.543908,0.815571,0.197505,420.078334,-628.691656,741.194313, -0.645232,0.645232,0.409086,519.938942,-519.938942,680.911024, -0.494626,0.743805,0.449554,408.513405,-611.383516,680.911024, -0.645232,0.645232,0.409086,519.938942,-519.938942,680.911024, -0.543908,0.815571,0.197505,420.078334,-628.691656,741.194313, -0.698738,0.698738,0.153394,534.658304,-534.658304,741.194313, -0.554511,0.829344,-0.068597,422.38228,-632.139755,804.835469, -0.698738,0.698738,0.153394,534.658304,-534.658304,741.194313, -0.543908,0.815571,0.197505,420.078334,-628.691656,741.194313, -0.698738,0.698738,0.153394,534.658304,-534.658304,741.194313, -0.554511,0.829344,-0.068597,422.38228,-632.139755,804.835469, -0.689987,0.717509,-0.095383,537.590672,-537.590672,804.835469, -0.570681,0.796226,-0.200867,415.261462,-621.482696,867.310387, -0.689987,0.717509,-0.095383,537.590672,-537.590672,804.835469, -0.554511,0.829344,-0.068597,422.38228,-632.139755,804.835469, -0.689987,0.717509,-0.095383,537.590672,-537.590672,804.835469, -0.570681,0.796226,-0.200867,415.261462,-621.482696,867.310387, -0.715051,0.669593,-0.200867,528.527588,-528.527588,867.310387, -0.43772,0.467437,-0.768052,330.329744,-330.329744,1100.8886, -0.37306,0.520502,-0.768052,415.261462,-621.482696,867.310387, -0.338117,0.54385,-0.768052,259.538414,-388.426686,1100.8886, -0.37306,0.520502,-0.768052,415.261462,-621.482696,867.310387, -0.43772,0.467437,-0.768052,330.329744,-330.329744,1100.8886, -0.467437,0.43772,-0.768052,528.527588,-528.527588,867.310387, -0.521108,0.727062,-0.447021,337.399938,-504.954691,1287.75132, -0.611428,0.652938,-0.447021,495.494614,-495.494614,1100.8886, -0.472298,0.759676,-0.447021,389.30762,-582.640028,1100.8886, -0.611428,0.652938,-0.447021,495.494614,-495.494614,1100.8886, -0.521108,0.727062,-0.447021,337.399938,-504.954691,1287.75132, -0.652938,0.611428,-0.447021,429.428666,-429.428666,1287.75132, -0.521108,0.727062,-0.447021,363.353779,-543.79736,1474.61404, -0.611428,0.652938,-0.447021,528.527588,-528.527588,1287.75132, -0.472298,0.759676,-0.447021,415.261462,-621.482696,1287.75132, -0.611428,0.652938,-0.447021,528.527588,-528.527588,1287.75132, -0.521108,0.727062,-0.447021,363.353779,-543.79736,1474.61404, -0.652938,0.611428,-0.447021,462.46164,-462.46164,1474.61404, -0.029352,0.894042,-0.447021,0,-607.303844,1287.75132, -0.145631,0.882589,-0.447021,136.706657,-687.270773,1100.8886, 0.029352,0.894042,-0.447021,0,-700.735204,1100.8886, -0.145631,0.882589,-0.447021,136.706657,-687.270773,1100.8886, -0.029352,0.894042,-0.447021,0,-607.303844,1287.75132, -0.203207,0.871137,-0.447021,118.479102,-595.634671,1287.75132, -0.521108,0.727062,-0.447021,389.30762,-582.640028,1661.47676, -0.611428,0.652938,-0.447021,561.560563,-561.560563,1474.61404, -0.472298,0.759676,-0.447021,441.215303,-660.325365,1474.61404, -0.611428,0.652938,-0.447021,561.560563,-561.560563,1474.61404, -0.521108,0.727062,-0.447021,389.30762,-582.640028,1661.47676, -0.652938,0.611428,-0.447021,495.494614,-495.494614,1661.47676, -0.91848,0.181999,-0.3511,926.689746,-184.330051,2234.768955, -0.962266,0.094775,-0.255071,964.850983,-0,2169.851549, -0.952958,0.189085,-0.236891,946.311642,-188.233089,2169.851549, -0.962266,0.094775,-0.255071,964.850983,-0,2169.851549, -0.91848,0.181999,-0.3511,926.689746,-184.330051,2234.768955, -0.925281,0.091132,-0.36817,944.844672,-0,2234.768955, -0.458274,0.687833,0.562913,490.247555,-733.707316,1715.237645, -0.559613,0.559613,0.611282,594.604481,-594.604481,1661.47676, -0.417941,0.672244,0.611076,467.177743,-699.180902,1661.47676, -0.559613,0.559613,0.611282,594.604481,-594.604481,1661.47676, -0.458274,0.687833,0.562913,490.247555,-733.707316,1715.237645, -0.59226,0.59226,0.546311,623.966782,-623.966782,1715.237645, -0.477566,0.756484,0.446838,509.589579,-762.654701,1773.56823, -0.59226,0.59226,0.546311,623.966782,-623.966782,1715.237645, -0.458274,0.687833,0.562913,490.247555,-733.707316,1715.237645, -0.59226,0.59226,0.546311,623.966782,-623.966782,1715.237645, -0.477566,0.756484,0.446838,509.589579,-762.654701,1773.56823, -0.621118,0.652965,0.433416,648.584509,-648.584509,1773.56823, -0.460101,0.686612,-0.562913,490.247555,-733.707316,2355.166755, -0.61303,0.654649,-0.442299,648.584509,-648.584509,2296.83617, -0.468784,0.754023,-0.460099,509.589579,-762.654701,2296.83617, -0.61303,0.654649,-0.442299,648.584509,-648.584509,2296.83617, -0.460101,0.686612,-0.562913,490.247555,-733.707316,2355.166755, -0.585212,0.583657,-0.562913,623.966782,-623.966782,2355.166755, -0.870883,0.172314,-0.460294,899.612557,-178.944064,2296.83617, -0.925281,0.091132,-0.36817,944.844672,-0,2234.768955, -0.91848,0.181999,-0.3511,926.689746,-184.330051,2234.768955, -0.925281,0.091132,-0.36817,944.844672,-0,2234.768955, -0.870883,0.172314,-0.460294,899.612557,-178.944064,2296.83617, -0.875139,0.086194,-0.476133,917.237009,-0,2296.83617, -0.810848,0.160167,-0.562913,865.466789,-172.152048,2355.166755, -0.875139,0.086194,-0.476133,917.237009,-0,2296.83617, -0.870883,0.172314,-0.460294,899.612557,-178.944064,2296.83617, -0.875139,0.086194,-0.476133,917.237009,-0,2296.83617, -0.810848,0.160167,-0.562913,865.466789,-172.152048,2355.166755, -0.812508,0.080025,-0.577431,882.422286,-0,2355.166755, -0.781011,0.12887,-0.611076,824.740108,-164.051007,2408.92764, -0.812508,0.080025,-0.577431,882.422286,-0,2355.166755, -0.810848,0.160167,-0.562913,865.466789,-172.152048,2355.166755, -0.812508,0.080025,-0.577431,882.422286,-0,2355.166755, -0.781011,0.12887,-0.611076,824.740108,-164.051007,2408.92764, -0.789019,0.077712,-0.609434,840.897722,-0,2408.92764, -0.995185,0.098017,-0,747.450884,-0,2549.07468, -0.980785,0.19509,-0,733.088824,-145.820434,2408.92764, -0.980785,0.19509,-0,733.088824,-145.820434,2549.07468, -0.980785,0.19509,-0,733.088824,-145.820434,2408.92764, -0.995185,0.098017,-0,747.450884,-0,2549.07468, -0.995185,0.098017,0,747.450884,-0,2408.92764, -0.461133,0.643383,-0.611076,467.177743,-699.180902,2408.92764, -0.585212,0.583657,-0.562913,623.966782,-623.966782,2355.166755, -0.460101,0.686612,-0.562913,490.247555,-733.707316,2355.166755, -0.585212,0.583657,-0.562913,623.966782,-623.966782,2355.166755, -0.461133,0.643383,-0.611076,467.177743,-699.180902,2408.92764, -0.577791,0.541058,-0.611076,594.604481,-594.604481,2408.92764, -0.582554,0.812792,-0,415.261462,-621.482696,2549.07468, -0.683524,0.729928,-0,528.527588,-528.527588,2408.92764, -0.527988,0.849252,-0,415.261462,-621.482696,2408.92764, -0.683524,0.729928,-0,528.527588,-528.527588,2408.92764, -0.582554,0.812792,-0,415.261462,-621.482696,2549.07468, -0.729928,0.683524,-0,528.527588,-528.527588,2549.07468, -0.410175,0.619164,0.669621,388.509618,-581.445733,628.271002, -0.442288,0.472315,0.762431,460.088221,-460.088221,587.016307, -0.341645,0.549525,0.762431,361.488996,-541.006514,587.016307, -0.442288,0.472315,0.762431,460.088221,-460.088221,587.016307, -0.410175,0.619164,0.669621,388.509618,-581.445733,628.271002, -0.540644,0.52765,0.655203,494.47895,-494.47895,628.271002, -0.743805,0.494626,0.449554,611.383516,-408.513405,680.911024, -0.540644,0.52765,0.655203,494.47895,-494.47895,628.271002, -0.645232,0.645232,0.409086,519.938942,-519.938942,680.911024, -0.540644,0.52765,0.655203,494.47895,-494.47895,628.271002, -0.743805,0.494626,0.449554,611.383516,-408.513405,680.911024, -0.630892,0.392232,0.669425,581.445733,-388.509618,628.271002, -0.815571,0.543908,0.197505,628.691656,-420.078334,741.194313, -0.645232,0.645232,0.409086,519.938942,-519.938942,680.911024, -0.698738,0.698738,0.153394,534.658304,-534.658304,741.194313, -0.645232,0.645232,0.409086,519.938942,-519.938942,680.911024, -0.815571,0.543908,0.197505,628.691656,-420.078334,741.194313, -0.743805,0.494626,0.449554,611.383516,-408.513405,680.911024, -0.81088,0.581183,-0.06856,632.139755,-422.38228,804.835469, -0.698738,0.698738,0.153394,534.658304,-534.658304,741.194313, -0.689987,0.717509,-0.095383,537.590672,-537.590672,804.835469, -0.698738,0.698738,0.153394,534.658304,-534.658304,741.194313, -0.81088,0.581183,-0.06856,632.139755,-422.38228,804.835469, -0.815571,0.543908,0.197505,628.691656,-420.078334,741.194313, -0.715051,0.669593,-0.200867,528.527588,-528.527588,867.310387, -0.81088,0.581183,-0.06856,632.139755,-422.38228,804.835469, -0.689987,0.717509,-0.095383,537.590672,-537.590672,804.835469, -0.81088,0.581183,-0.06856,632.139755,-422.38228,804.835469, -0.715051,0.669593,-0.200867,528.527588,-528.527588,867.310387, -0.831943,0.517227,-0.200867,621.482696,-415.261462,867.310387, -0.520502,0.37306,-0.768052,388.426686,-259.538414,1100.8886, -0.467437,0.43772,-0.768052,528.527588,-528.527588,867.310387, -0.43772,0.467437,-0.768052,330.329744,-330.329744,1100.8886, -0.467437,0.43772,-0.768052,528.527588,-528.527588,867.310387, -0.520502,0.37306,-0.768052,388.426686,-259.538414,1100.8886, -0.54385,0.338117,-0.768052,621.482696,-415.261462,867.310387, 0.952958,0.189085,-0.236891,-946.311642,-188.233089,2169.851549, 0.865325,0.357689,-0.3511,-872.922654,-361.576402,2234.768955, 0.897759,0.371365,-0.236891,-891.406075,-369.232486,2169.851549, 0.865325,0.357689,-0.3511,-872.922654,-361.576402,2234.768955, 0.952958,0.189085,-0.236891,-946.311642,-188.233089,2169.851549, 0.91848,0.181999,-0.3511,-926.689746,-184.330051,2234.768955, -0.652938,0.611428,-0.447021,429.428666,-429.428666,1287.75132, -0.727062,0.521108,-0.447021,582.640028,-389.30762,1100.8886, -0.611428,0.652938,-0.447021,495.494614,-495.494614,1100.8886, -0.727062,0.521108,-0.447021,582.640028,-389.30762,1100.8886, -0.652938,0.611428,-0.447021,429.428666,-429.428666,1287.75132, -0.759676,0.472298,-0.447021,504.954691,-337.399938,1287.75132, -0.652938,0.611428,-0.447021,462.46164,-462.46164,1474.61404, -0.727062,0.521108,-0.447021,621.482696,-415.261462,1287.75132, -0.611428,0.652938,-0.447021,528.527588,-528.527588,1287.75132, -0.727062,0.521108,-0.447021,621.482696,-415.261462,1287.75132, -0.652938,0.611428,-0.447021,462.46164,-462.46164,1474.61404, -0.759676,0.472298,-0.447021,543.79736,-363.353779,1474.61404, -0.652938,0.611428,-0.447021,495.494614,-495.494614,1661.47676, -0.727062,0.521108,-0.447021,660.325365,-441.215303,1474.61404, -0.611428,0.652938,-0.447021,561.560563,-561.560563,1474.61404, -0.727062,0.521108,-0.447021,660.325365,-441.215303,1474.61404, -0.652938,0.611428,-0.447021,495.494614,-495.494614,1661.47676, -0.759676,0.472298,-0.447021,582.640028,-389.30762,1661.47676, -0.732968,0.120943,0.669425,685.862006,-136.426435,628.271002, -0.645559,0.063582,0.761059,650.663002,-0,587.016307, -0.630153,0.146993,0.762431,638.160695,-126.938055,587.016307, -0.645559,0.063582,0.761059,650.663002,-0,587.016307, -0.732968,0.120943,0.669425,685.862006,-136.426435,628.271002, -0.740721,0.072955,0.66784,699.298837,-0,628.271002, -0.687833,0.458274,0.562913,733.707316,-490.247555,1715.237645, -0.559613,0.559613,0.611282,594.604481,-594.604481,1661.47676, -0.59226,0.59226,0.546311,623.966782,-623.966782,1715.237645, -0.559613,0.559613,0.611282,594.604481,-594.604481,1661.47676, -0.687833,0.458274,0.562913,733.707316,-490.247555,1715.237645, -0.672244,0.417941,0.611076,699.180902,-467.177743,1661.47676, -0.738649,0.49247,0.460294,762.654701,-509.589579,1773.56823, -0.59226,0.59226,0.546311,623.966782,-623.966782,1715.237645, -0.621118,0.652965,0.433416,648.584509,-648.584509,1773.56823, -0.59226,0.59226,0.546311,623.966782,-623.966782,1715.237645, -0.738649,0.49247,0.460294,762.654701,-509.589579,1773.56823, -0.687833,0.458274,0.562913,733.707316,-490.247555,1715.237645, -0.766636,0.549472,0.33219,785.609633,-524.927574,1835.635445, -0.621118,0.652965,0.433416,648.584509,-648.584509,1773.56823, -0.662575,0.661607,0.3511,668.106075,-668.106075,1835.635445, -0.621118,0.652965,0.433416,648.584509,-648.584509,1773.56823, -0.766636,0.549472,0.33219,785.609633,-524.927574,1835.635445, -0.738649,0.49247,0.460294,762.654701,-509.589579,1773.56823, -0.130866,0.717913,0.683722,136.426435,-685.862006,628.271002, -0.021232,0.646722,0.762431,0,-650.663002,587.016307, 0.024376,0.742479,0.669425,0,-699.298837,628.271002, -0.021232,0.646722,0.762431,0,-650.663002,587.016307, -0.130866,0.717913,0.683722,136.426435,-685.862006,628.271002, -0.126198,0.634438,0.762603,126.938055,-638.160695,587.016307, -0.61303,0.654649,-0.442299,648.584509,-648.584509,2296.83617, -0.766636,0.549472,-0.33219,785.609633,-524.927574,2234.768955, -0.662575,0.661607,-0.3511,668.106075,-668.106075,2234.768955, -0.766636,0.549472,-0.33219,785.609633,-524.927574,2234.768955, -0.61303,0.654649,-0.442299,648.584509,-648.584509,2296.83617, -0.738649,0.49247,-0.460294,762.654701,-509.589579,2296.83617, -0.585212,0.583657,-0.562913,623.966782,-623.966782,2355.166755, -0.738649,0.49247,-0.460294,762.654701,-509.589579,2296.83617, -0.61303,0.654649,-0.442299,648.584509,-648.584509,2296.83617, -0.738649,0.49247,-0.460294,762.654701,-509.589579,2296.83617, -0.585212,0.583657,-0.562913,623.966782,-623.966782,2355.166755, -0.687833,0.458274,-0.562913,733.707316,-490.247555,2355.166755, -0.577791,0.541058,-0.611076,594.604481,-594.604481,2408.92764, -0.687833,0.458274,-0.562913,733.707316,-490.247555,2355.166755, -0.585212,0.583657,-0.562913,623.966782,-623.966782,2355.166755, -0.687833,0.458274,-0.562913,733.707316,-490.247555,2355.166755, -0.577791,0.541058,-0.611076,594.604481,-594.604481,2408.92764, -0.672244,0.417941,-0.611076,699.180902,-467.177743,2408.92764, -0.729928,0.683524,-0,528.527588,-528.527588,2549.07468, -0.812792,0.582554,-0,621.482696,-415.261462,2408.92764, -0.683524,0.729928,-0,528.527588,-528.527588,2408.92764, -0.812792,0.582554,-0,621.482696,-415.261462,2408.92764, -0.729928,0.683524,-0,528.527588,-528.527588,2549.07468, -0.849252,0.527988,-0,621.482696,-415.261462,2549.07468, -0.540644,0.52765,0.655203,494.47895,-494.47895,628.271002, -0.525933,0.376953,0.762431,541.006514,-361.488996,587.016307, -0.442288,0.472315,0.762431,460.088221,-460.088221,587.016307, -0.525933,0.376953,0.762431,541.006514,-361.488996,587.016307, -0.540644,0.52765,0.655203,494.47895,-494.47895,628.271002, -0.630892,0.392232,0.669425,581.445733,-388.509618,628.271002, -0.906011,0.374347,0.197505,698.56474,-289.354989,741.194313, -0.743805,0.494626,0.449554,611.383516,-408.513405,680.911024, -0.815571,0.543908,0.197505,628.691656,-420.078334,741.194313, -0.743805,0.494626,0.449554,611.383516,-408.513405,680.911024, -0.906011,0.374347,0.197505,698.56474,-289.354989,741.194313, -0.82601,0.340012,0.449554,679.332965,-281.388928,680.911024, -0.908682,0.411821,-0.06856,702.396062,-290.941975,804.835469, -0.815571,0.543908,0.197505,628.691656,-420.078334,741.194313, -0.81088,0.581183,-0.06856,632.139755,-422.38228,804.835469, -0.815571,0.543908,0.197505,628.691656,-420.078334,741.194313, -0.908682,0.411821,-0.06856,702.396062,-290.941975,804.835469, -0.906011,0.374347,0.197505,698.56474,-289.354989,741.194313, -0.831943,0.517227,-0.200867,621.482696,-415.261462,867.310387, -0.908682,0.411821,-0.06856,702.396062,-290.941975,804.835469, -0.81088,0.581183,-0.06856,632.139755,-422.38228,804.835469, -0.908682,0.411821,-0.06856,702.396062,-290.941975,804.835469, -0.831943,0.517227,-0.200867,621.482696,-415.261462,867.310387, -0.916863,0.344985,-0.200867,690.554573,-286.03707,867.310387, -0.759676,0.472298,-0.447021,543.79736,-363.353779,1474.61404, -0.814754,0.369253,-0.447021,690.554573,-286.03707,1287.75132, -0.727062,0.521108,-0.447021,621.482696,-415.261462,1287.75132, -0.814754,0.369253,-0.447021,690.554573,-286.03707,1287.75132, -0.759676,0.472298,-0.447021,543.79736,-363.353779,1474.61404, -0.837219,0.315017,-0.447021,604.235252,-250.282436,1474.61404, -0.583281,0.264347,-0.768052,431.596609,-178.773169,1100.8886, -0.54385,0.338117,-0.768052,621.482696,-415.261462,867.310387, -0.520502,0.37306,-0.768052,388.426686,-259.538414,1100.8886, -0.54385,0.338117,-0.768052,621.482696,-415.261462,867.310387, -0.583281,0.264347,-0.768052,431.596609,-178.773169,1100.8886, -0.599364,0.22552,-0.768052,690.554573,-286.03707,867.310387, -0.759676,0.472298,-0.447021,504.954691,-337.399938,1287.75132, -0.814754,0.369253,-0.447021,647.394912,-268.159753,1100.8886, -0.727062,0.521108,-0.447021,582.640028,-389.30762,1100.8886, -0.814754,0.369253,-0.447021,647.394912,-268.159753,1100.8886, -0.759676,0.472298,-0.447021,504.954691,-337.399938,1287.75132, -0.837219,0.315017,-0.447021,561.075591,-232.405119,1287.75132, 0.952958,0.189085,0.236891,-946.311642,-188.233089,1900.552851, 0.985604,0.097074,0.138423,-976.970216,-0,1967.393306, 0.973826,0.193469,0.119297,-958.198007,-190.597434,1967.393306, 0.985604,0.097074,0.138423,-976.970216,-0,1967.393306, 0.952958,0.189085,0.236891,-946.311642,-188.233089,1900.552851, 0.962266,0.094775,0.255071,-964.850983,-0,1900.552851, -0.759676,0.472298,-0.447021,582.640028,-389.30762,1661.47676, -0.814754,0.369253,-0.447021,733.714234,-303.914386,1474.61404, -0.727062,0.521108,-0.447021,660.325365,-441.215303,1474.61404, -0.814754,0.369253,-0.447021,733.714234,-303.914386,1474.61404, -0.759676,0.472298,-0.447021,582.640028,-389.30762,1661.47676, -0.837219,0.315017,-0.447021,647.394912,-268.159753,1661.47676, -0.764021,0.315278,0.562913,815.251889,-337.688389,1715.237645, -0.672244,0.417941,0.611076,699.180902,-467.177743,1661.47676, -0.687833,0.458274,0.562913,733.707316,-490.247555,1715.237645, -0.672244,0.417941,0.611076,699.180902,-467.177743,1661.47676, -0.764021,0.315278,0.562913,815.251889,-337.688389,1715.237645, -0.740863,0.278762,0.611076,776.888194,-321.797626,1661.47676, -0.820532,0.338904,0.460294,847.416499,-351.011407,1773.56823, -0.687833,0.458274,0.562913,733.707316,-490.247555,1715.237645, -0.738649,0.49247,0.460294,762.654701,-509.589579,1773.56823, -0.687833,0.458274,0.562913,733.707316,-490.247555,1715.237645, -0.820532,0.338904,0.460294,847.416499,-351.011407,1773.56823, -0.764021,0.315278,0.562913,815.251889,-337.688389,1715.237645, -0.865325,0.357689,0.3511,872.922654,-361.576402,1835.635445, -0.738649,0.49247,0.460294,762.654701,-509.589579,1773.56823, -0.766636,0.549472,0.33219,785.609633,-524.927574,1835.635445, -0.738649,0.49247,0.460294,762.654701,-509.589579,1773.56823, -0.865325,0.357689,0.3511,872.922654,-361.576402,1835.635445, -0.820532,0.338904,0.460294,847.416499,-351.011407,1773.56823, -0.897759,0.371365,0.236891,891.406075,-369.232486,1900.552851, -0.766636,0.549472,0.33219,785.609633,-524.927574,1835.635445, -0.799622,0.563457,0.207656,802.244273,-536.042486,1900.552851, -0.766636,0.549472,0.33219,785.609633,-524.927574,1835.635445, -0.897759,0.371365,0.236891,891.406075,-369.232486,1900.552851, -0.865325,0.357689,0.3511,872.922654,-361.576402,1835.635445, -0.910825,0.412792,0,906.352876,-375.423654,2035.2022, -0.819909,0.56476,0.093785,812.321046,-542.77557,1967.393306, -0.831469,0.55557,-0,815.696038,-545.030668,2035.2022, -0.819909,0.56476,0.093785,812.321046,-542.77557,1967.393306, -0.910825,0.412792,0,906.352876,-375.423654,2035.2022, -0.917371,0.379736,0.119297,902.602786,-373.870315,1967.393306, -0.917371,0.379736,0.119297,902.602786,-373.870315,1967.393306, -0.799622,0.563457,0.207656,802.244273,-536.042486,1900.552851, -0.819909,0.56476,0.093785,812.321046,-542.77557,1967.393306, -0.799622,0.563457,0.207656,802.244273,-536.042486,1900.552851, -0.917371,0.379736,0.119297,902.602786,-373.870315,1967.393306, -0.897759,0.371365,0.236891,891.406075,-369.232486,1900.552851, -0.819909,0.56476,-0.093785,812.321046,-542.77557,2103.011094, -0.910825,0.412792,0,906.352876,-375.423654,2035.2022, -0.831469,0.55557,-0,815.696038,-545.030668,2035.2022, -0.910825,0.412792,0,906.352876,-375.423654,2035.2022, -0.819909,0.56476,-0.093785,812.321046,-542.77557,2103.011094, -0.917371,0.379736,-0.119297,902.602786,-373.870315,2103.011094, 0.91848,0.181999,0.3511,-926.689746,-184.330051,1835.635445, 0.962266,0.094775,0.255071,-964.850983,-0,1900.552851, 0.952958,0.189085,0.236891,-946.311642,-188.233089,1900.552851, 0.962266,0.094775,0.255071,-964.850983,-0,1900.552851, 0.91848,0.181999,0.3511,-926.689746,-184.330051,1835.635445, 0.925281,0.091132,0.36817,-944.844672,0,1835.635445, -0.799622,0.563457,-0.207656,802.244273,-536.042486,2169.851549, -0.917371,0.379736,-0.119297,902.602786,-373.870315,2103.011094, -0.819909,0.56476,-0.093785,812.321046,-542.77557,2103.011094, -0.917371,0.379736,-0.119297,902.602786,-373.870315,2103.011094, -0.799622,0.563457,-0.207656,802.244273,-536.042486,2169.851549, -0.897759,0.371365,-0.236891,891.406075,-369.232486,2169.851549, -0.766636,0.549472,-0.33219,785.609633,-524.927574,2234.768955, -0.897759,0.371365,-0.236891,891.406075,-369.232486,2169.851549, -0.799622,0.563457,-0.207656,802.244273,-536.042486,2169.851549, -0.897759,0.371365,-0.236891,891.406075,-369.232486,2169.851549, -0.766636,0.549472,-0.33219,785.609633,-524.927574,2234.768955, -0.865325,0.357689,-0.3511,872.922654,-361.576402,2234.768955, 0.633017,0.630231,0.449554,-519.938942,-519.938942,680.911024, 0.432767,0.603806,0.669425,-388.509618,-581.445733,628.271002, 0.542249,0.507776,0.669425,-494.47895,-494.47895,628.271002, 0.432767,0.603806,0.669425,-388.509618,-581.445733,628.271002, 0.633017,0.630231,0.449554,-519.938942,-519.938942,680.911024, 0.497902,0.741616,0.449554,-408.513405,-611.383516,680.911024, -0.738649,0.49247,-0.460294,762.654701,-509.589579,2296.83617, -0.865325,0.357689,-0.3511,872.922654,-361.576402,2234.768955, -0.766636,0.549472,-0.33219,785.609633,-524.927574,2234.768955, -0.865325,0.357689,-0.3511,872.922654,-361.576402,2234.768955, -0.738649,0.49247,-0.460294,762.654701,-509.589579,2296.83617, -0.820532,0.338904,-0.460294,847.416499,-351.011407,2296.83617, -0.687833,0.458274,-0.562913,733.707316,-490.247555,2355.166755, -0.820532,0.338904,-0.460294,847.416499,-351.011407,2296.83617, -0.738649,0.49247,-0.460294,762.654701,-509.589579,2296.83617, -0.820532,0.338904,-0.460294,847.416499,-351.011407,2296.83617, -0.687833,0.458274,-0.562913,733.707316,-490.247555,2355.166755, -0.764021,0.315278,-0.562913,815.251889,-337.688389,2355.166755, -0.672244,0.417941,-0.611076,699.180902,-467.177743,2408.92764, -0.764021,0.315278,-0.562913,815.251889,-337.688389,2355.166755, -0.687833,0.458274,-0.562913,733.707316,-490.247555,2355.166755, -0.764021,0.315278,-0.562913,815.251889,-337.688389,2355.166755, -0.672244,0.417941,-0.611076,699.180902,-467.177743,2408.92764, -0.740863,0.278762,-0.611076,776.888194,-321.797626,2408.92764, -0.849252,0.527988,-0,621.482696,-415.261462,2549.07468, -0.910825,0.412792,-0,690.554573,-286.03707,2408.92764, -0.812792,0.582554,-0,621.482696,-415.261462,2408.92764, -0.910825,0.412792,-0,690.554573,-286.03707,2408.92764, -0.849252,0.527988,-0,621.482696,-415.261462,2549.07468, -0.935939,0.352162,-0,690.554573,-286.03707,2549.07468, -0.630892,0.392232,0.669425,581.445733,-388.509618,628.271002, -0.589368,0.267106,0.762431,601.13423,-248.997951,587.016307, -0.525933,0.376953,0.762431,541.006514,-361.488996,587.016307, -0.589368,0.267106,0.762431,601.13423,-248.997951,587.016307, -0.630892,0.392232,0.669425,581.445733,-388.509618,628.271002, -0.69529,0.261614,0.669425,646.067883,-267.610079,628.271002, -0.876472,0.172332,0.449554,721.176029,-143.450831,680.911024, -0.69529,0.261614,0.669425,646.067883,-267.610079,628.271002, -0.82601,0.340012,0.449554,679.332965,-281.388928,680.911024, -0.69529,0.261614,0.669425,646.067883,-267.610079,628.271002, -0.876472,0.172332,0.449554,721.176029,-143.450831,680.911024, -0.732968,0.120943,0.669425,685.862006,-136.426435,628.271002, -0.961634,0.1904,0.197505,741.592372,-147.511894,741.194313, -0.82601,0.340012,0.449554,679.332965,-281.388928,680.911024, -0.906011,0.374347,0.197505,698.56474,-289.354989,741.194313, -0.82601,0.340012,0.449554,679.332965,-281.388928,680.911024, -0.961634,0.1904,0.197505,741.592372,-147.511894,741.194313, -0.876472,0.172332,0.449554,721.176029,-143.450831,680.911024, -0.971564,0.226633,-0.06856,745.659682,-148.320933,804.835469, -0.906011,0.374347,0.197505,698.56474,-289.354989,741.194313, -0.908682,0.411821,-0.06856,702.396062,-290.941975,804.835469, -0.906011,0.374347,0.197505,698.56474,-289.354989,741.194313, -0.971564,0.226633,-0.06856,745.659682,-148.320933,804.835469, -0.961634,0.1904,0.197505,741.592372,-147.511894,741.194313, -0.916863,0.344985,-0.200867,690.554573,-286.03707,867.310387, -0.971564,0.226633,-0.06856,745.659682,-148.320933,804.835469, -0.908682,0.411821,-0.06856,702.396062,-290.941975,804.835469, -0.971564,0.226633,-0.06856,745.659682,-148.320933,804.835469, -0.916863,0.344985,-0.200867,690.554573,-286.03707,867.310387, -0.966549,0.159485,-0.200867,733.088824,-145.820434,867.310387, -0.623645,0.145475,-0.768052,458.180517,-91.137771,1100.8886, -0.599364,0.22552,-0.768052,690.554573,-286.03707,867.310387, -0.583281,0.264347,-0.768052,431.596609,-178.773169,1100.8886, -0.599364,0.22552,-0.768052,690.554573,-286.03707,867.310387, -0.623645,0.145475,-0.768052,458.180517,-91.137771,1100.8886, -0.631844,0.104257,-0.768052,733.088824,-145.820434,867.310387, -0.837219,0.315017,-0.447021,561.075591,-232.405119,1287.75132, -0.871137,0.203207,-0.447021,687.270773,-136.706657,1100.8886, -0.814754,0.369253,-0.447021,647.394912,-268.159753,1100.8886, -0.871137,0.203207,-0.447021,687.270773,-136.706657,1100.8886, -0.837219,0.315017,-0.447021,561.075591,-232.405119,1287.75132, -0.882589,0.145631,-0.447021,595.634671,-118.479102,1287.75132, -0.837219,0.315017,-0.447021,604.235252,-250.282436,1474.61404, -0.871137,0.203207,-0.447021,733.088824,-145.820434,1287.75132, -0.814754,0.369253,-0.447021,690.554573,-286.03707,1287.75132, -0.871137,0.203207,-0.447021,733.088824,-145.820434,1287.75132, -0.837219,0.315017,-0.447021,604.235252,-250.282436,1474.61404, -0.882589,0.145631,-0.447021,641.452722,-127.592879,1474.61404, -0.837219,0.315017,-0.447021,647.394912,-268.159753,1661.47676, -0.871137,0.203207,-0.447021,778.906876,-154.934211,1474.61404, -0.814754,0.369253,-0.447021,733.714234,-303.914386,1474.61404, -0.871137,0.203207,-0.447021,778.906876,-154.934211,1474.61404, -0.837219,0.315017,-0.447021,647.394912,-268.159753,1661.47676, -0.882589,0.145631,-0.447021,687.270773,-136.706657,1661.47676, -0.810848,0.160167,0.562913,865.466789,-172.152048,1715.237645, -0.740863,0.278762,0.611076,776.888194,-321.797626,1661.47676, -0.764021,0.315278,0.562913,815.251889,-337.688389,1715.237645, -0.740863,0.278762,0.611076,776.888194,-321.797626,1661.47676, -0.810848,0.160167,0.562913,865.466789,-172.152048,1715.237645, -0.781011,0.12887,0.611076,824.740108,-164.051007,1661.47676, -0.870883,0.172314,0.460294,899.612557,-178.944064,1773.56823, -0.764021,0.315278,0.562913,815.251889,-337.688389,1715.237645, -0.820532,0.338904,0.460294,847.416499,-351.011407,1773.56823, -0.764021,0.315278,0.562913,815.251889,-337.688389,1715.237645, -0.870883,0.172314,0.460294,899.612557,-178.944064,1773.56823, -0.810848,0.160167,0.562913,865.466789,-172.152048,1715.237645, -0.91848,0.181999,0.3511,926.689746,-184.330051,1835.635445, -0.820532,0.338904,0.460294,847.416499,-351.011407,1773.56823, -0.865325,0.357689,0.3511,872.922654,-361.576402,1835.635445, -0.820532,0.338904,0.460294,847.416499,-351.011407,1773.56823, -0.91848,0.181999,0.3511,926.689746,-184.330051,1835.635445, -0.870883,0.172314,0.460294,899.612557,-178.944064,1773.56823, -0.952958,0.189085,0.236891,946.311642,-188.233089,1900.552851, -0.865325,0.357689,0.3511,872.922654,-361.576402,1835.635445, -0.897759,0.371365,0.236891,891.406075,-369.232486,1900.552851, -0.865325,0.357689,0.3511,872.922654,-361.576402,1835.635445, -0.952958,0.189085,0.236891,946.311642,-188.233089,1900.552851, -0.91848,0.181999,0.3511,926.689746,-184.330051,1835.635445, -0.973826,0.193469,0.119297,958.198007,-190.597434,1967.393306, -0.897759,0.371365,0.236891,891.406075,-369.232486,1900.552851, -0.917371,0.379736,0.119297,902.602786,-373.870315,1967.393306, -0.897759,0.371365,0.236891,891.406075,-369.232486,1900.552851, -0.973826,0.193469,0.119297,958.198007,-190.597434,1967.393306, -0.952958,0.189085,0.236891,946.311642,-188.233089,1900.552851, -0.973856,0.227168,-0,962.179081,-191.389319,2035.2022, -0.917371,0.379736,0.119297,902.602786,-373.870315,1967.393306, -0.910825,0.412792,0,906.352876,-375.423654,2035.2022, -0.917371,0.379736,0.119297,902.602786,-373.870315,1967.393306, -0.973856,0.227168,-0,962.179081,-191.389319,2035.2022, -0.973826,0.193469,0.119297,958.198007,-190.597434,1967.393306, -0.917371,0.379736,-0.119297,902.602786,-373.870315,2103.011094, -0.973856,0.227168,-0,962.179081,-191.389319,2035.2022, -0.910825,0.412792,0,906.352876,-375.423654,2035.2022, -0.973856,0.227168,-0,962.179081,-191.389319,2035.2022, -0.917371,0.379736,-0.119297,902.602786,-373.870315,2103.011094, -0.973826,0.193469,-0.119297,958.198007,-190.597434,2103.011094, -0.897759,0.371365,-0.236891,891.406075,-369.232486,2169.851549, -0.973826,0.193469,-0.119297,958.198007,-190.597434,2103.011094, -0.917371,0.379736,-0.119297,902.602786,-373.870315,2103.011094, -0.973826,0.193469,-0.119297,958.198007,-190.597434,2103.011094, -0.897759,0.371365,-0.236891,891.406075,-369.232486,2169.851549, -0.952958,0.189085,-0.236891,946.311642,-188.233089,2169.851549, -0.865325,0.357689,-0.3511,872.922654,-361.576402,2234.768955, -0.952958,0.189085,-0.236891,946.311642,-188.233089,2169.851549, -0.897759,0.371365,-0.236891,891.406075,-369.232486,2169.851549, -0.952958,0.189085,-0.236891,946.311642,-188.233089,2169.851549, -0.865325,0.357689,-0.3511,872.922654,-361.576402,2234.768955, -0.91848,0.181999,-0.3511,926.689746,-184.330051,2234.768955, -0.740863,0.278762,-0.611076,776.888194,-321.797626,2408.92764, -0.810848,0.160167,-0.562913,865.466789,-172.152048,2355.166755, -0.764021,0.315278,-0.562913,815.251889,-337.688389,2355.166755, -0.810848,0.160167,-0.562913,865.466789,-172.152048,2355.166755, -0.740863,0.278762,-0.611076,776.888194,-321.797626,2408.92764, -0.781011,0.12887,-0.611076,824.740108,-164.051007,2408.92764, -0.820532,0.338904,-0.460294,847.416499,-351.011407,2296.83617, -0.91848,0.181999,-0.3511,926.689746,-184.330051,2234.768955, -0.865325,0.357689,-0.3511,872.922654,-361.576402,2234.768955, -0.91848,0.181999,-0.3511,926.689746,-184.330051,2234.768955, -0.820532,0.338904,-0.460294,847.416499,-351.011407,2296.83617, -0.870883,0.172314,-0.460294,899.612557,-178.944064,2296.83617, -0.764021,0.315278,-0.562913,815.251889,-337.688389,2355.166755, -0.870883,0.172314,-0.460294,899.612557,-178.944064,2296.83617, -0.820532,0.338904,-0.460294,847.416499,-351.011407,2296.83617, -0.870883,0.172314,-0.460294,899.612557,-178.944064,2296.83617, -0.764021,0.315278,-0.562913,815.251889,-337.688389,2355.166755, -0.810848,0.160167,-0.562913,865.466789,-172.152048,2355.166755, -0.935939,0.352162,-0,690.554573,-286.03707,2549.07468, -0.980785,0.19509,-0,733.088824,-145.820434,2408.92764, -0.910825,0.412792,-0,690.554573,-286.03707,2408.92764, -0.980785,0.19509,-0,733.088824,-145.820434,2408.92764, -0.935939,0.352162,-0,690.554573,-286.03707,2549.07468, -0.980785,0.19509,-0,733.088824,-145.820434,2549.07468, 0.890977,0.087754,-0.445488,-700.735204,0,1100.8886, 0.882589,0.145631,-0.447021,-595.634671,-118.479102,1287.75132, 0.871137,0.203207,-0.447021,-687.270773,-136.706657,1100.8886, 0.882589,0.145631,-0.447021,-595.634671,-118.479102,1287.75132, 0.890977,0.087754,-0.445488,-700.735204,0,1100.8886, 0.890977,0.087754,-0.445488,-607.303844,0,1287.75132, 0.69529,0.261614,0.669425,-646.067883,-267.610079,628.271002, 0.876472,0.172332,0.449554,-721.176029,-143.450831,680.911024, 0.82601,0.340012,0.449554,-679.332965,-281.388928,680.911024, 0.876472,0.172332,0.449554,-721.176029,-143.450831,680.911024, 0.69529,0.261614,0.669425,-646.067883,-267.610079,628.271002, 0.732968,0.120943,0.669425,-685.862006,-136.426435,628.271002, -0.377198,0.832286,0.406229,357.792969,-863.788639,1813.40854, -0.477566,0.756484,0.446838,509.589579,-762.654701,1773.56823, -0.32859,0.82894,0.452643,351.011407,-847.416499,1773.56823, -0.477566,0.756484,0.446838,509.589579,-762.654701,1773.56823, -0.377198,0.832286,0.406229,357.792969,-863.788639,1813.40854, -0.431053,0.806443,0.404776,395.941832,-839.735343,1806.112064, -0.477566,0.756484,0.446838,509.589579,-762.654701,1773.56823, -0.431053,0.806443,0.404776,395.941832,-839.735343,1806.112064, -0.431053,0.806443,0.404776,476.980677,-794.166464,1801.623942, -0.532321,0.742706,0.406229,517.019027,-773.773655,1803.632468, -0.477566,0.756484,0.446838,509.589579,-762.654701,1773.56823, -0.431053,0.806443,0.404776,476.980677,-794.166464,1801.623942, -0.532321,0.742706,0.406229,517.019027,-773.773655,1803.632468, -0.621118,0.652965,0.433416,648.584509,-648.584509,1773.56823, -0.477566,0.756484,0.446838,509.589579,-762.654701,1773.56823, -0.621118,0.652965,0.433416,648.584509,-648.584509,1773.56823, -0.532321,0.742706,0.406229,517.019027,-773.773655,1803.632468, -0.580099,0.706853,0.404776,549.426369,-748.597589,1806.112103, -0.621118,0.652965,0.433416,648.584509,-648.584509,1773.56823, -0.580099,0.706853,0.404776,549.426369,-748.597589,1806.112103, -0.580099,0.706853,0.404776,612.093113,-704.779902,1819.404068, -0.621118,0.652965,0.433416,648.584509,-648.584509,1773.56823, -0.580099,0.706853,0.404776,612.093113,-704.779902,1819.404068, -0.662575,0.661607,0.3511,668.106075,-668.106075,1835.635445, -0.662575,0.661607,0.3511,668.106075,-668.106075,1835.635445, -0.580099,0.706853,0.404776,612.093113,-704.779902,1819.404068, -0.594359,0.724228,0.349616,660.420878,-674.413152,1835.635445, -0.204727,0.913717,0.351011,184.330051,-926.689746,1835.635445, -0.32859,0.82894,0.452643,351.011407,-847.416499,1773.56823, -0.172314,0.870883,0.460294,178.944064,-899.612557,1773.56823, -0.32859,0.82894,0.452643,351.011407,-847.416499,1773.56823, -0.204727,0.913717,0.351011,184.330051,-926.689746,1835.635445, -0.265441,0.875041,0.404776,301.781055,-883.553039,1819.403991, -0.32859,0.82894,0.452643,351.011407,-847.416499,1773.56823, -0.265441,0.875041,0.404776,301.781055,-883.553039,1819.403991, -0.377198,0.832286,0.406229,357.792969,-863.788639,1813.40854, -0.265441,0.875041,0.404776,301.781055,-883.553039,1819.403991, -0.204727,0.913717,0.351011,184.330051,-926.689746,1835.635445, -0.271966,0.896551,0.349616,226.426278,-913.919995,1835.635445, -0.204727,0.913717,0.351011,184.330051,-926.689746,1835.635445, -0.277526,0.914879,0.293216,199.065204,-923.935663,1840.988923, -0.271966,0.896551,0.349616,226.426278,-913.919995,1835.635445, -0.277526,0.914879,0.293216,199.065204,-923.935663,1840.988923, -0.204727,0.913717,0.351011,184.330051,-926.689746,1835.635445, -0.186438,0.937285,0.294512,184.93882,-929.750234,1845.760812, -0.01288,0.939228,0.343052,0,-944.844672,1835.635445, -0.093709,0.951442,0.293216,104.493637,-940.355693,1854.464465, -0.204727,0.913717,0.351011,184.330051,-926.689746,1835.635445, -0.093709,0.951442,0.293216,104.493637,-940.355693,1854.464465, -0.01288,0.939228,0.343052,0,-944.844672,1835.635445, 0.000461,0.971536,0.236891,0,-964.850983,1900.552851, -0.204727,0.913717,0.351011,184.330051,-926.689746,1835.635445, -0.093709,0.951442,0.293216,104.493637,-940.355693,1854.464465, -0.186438,0.937285,0.294512,184.93882,-929.750234,1845.760812, -0.093709,0.951442,0.293216,104.493637,-940.355693,1854.464465, 0.000461,0.971536,0.236891,0,-964.850983,1900.552851, -0.095693,0.97159,0.216463,104.493633,-954.559259,1900.552851, -0.760725,0.624311,0.177575,750.933323,-599.953185,1905.43317, -0.799622,0.563457,0.207656,802.244273,-536.042486,1900.552851, -0.747441,0.613409,0.255071,746.507157,-603.958357,1900.552851, -0.799622,0.563457,0.207656,802.244273,-536.042486,1900.552851, -0.760725,0.624311,0.177575,750.933323,-599.953185,1905.43317, -0.760725,0.624311,0.177575,778.074089,-578.368237,1945.815784, -0.799622,0.563457,0.207656,802.244273,-536.042486,1900.552851, -0.760725,0.624311,0.177575,778.074089,-578.368237,1945.815784, -0.765569,0.628286,0.138423,788.482625,-571.822771,1967.393306, -0.799622,0.563457,0.207656,802.244273,-536.042486,1900.552851, -0.765569,0.628286,0.138423,788.482625,-571.822771,1967.393306, -0.819909,0.56476,0.093785,812.321046,-542.77557,1967.393306, -0.739034,0.606509,0.293216,673.273867,-664.397292,1840.989037, -0.662575,0.661607,0.3511,668.106075,-668.106075,1835.635445, -0.675745,0.675745,0.294512,668.764074,-668.764074,1838.654942, -0.662575,0.661607,0.3511,668.106075,-668.106075,1835.635445, -0.739034,0.606509,0.293216,673.273867,-664.397292,1840.989037, -0.766636,0.549472,0.33219,785.609633,-524.927574,1835.635445, -0.766636,0.549472,0.33219,785.609633,-524.927574,1835.635445, -0.739034,0.606509,0.293216,673.273867,-664.397292,1840.989037, -0.739034,0.606509,0.293216,713.8475,-629.001642,1870.037509, -0.766636,0.549472,0.33219,785.609633,-524.927574,1835.635445, -0.739034,0.606509,0.293216,713.8475,-629.001642,1870.037509, -0.747441,0.613409,0.255071,746.507157,-603.958357,1900.552851, -0.766636,0.549472,0.33219,785.609633,-524.927574,1835.635445, -0.747441,0.613409,0.255071,746.507157,-603.958357,1900.552851, -0.799622,0.563457,0.207656,802.244273,-536.042486,1900.552851, -0.675745,0.675745,0.294512,668.764074,-668.764074,1838.654942, -0.662575,0.661607,0.3511,668.106075,-668.106075,1835.635445, -0.594359,0.724228,0.349616,660.420878,-674.413152,1835.635445, -0.819909,0.56476,-0.093785,812.321046,-542.77557,2103.011094, -0.771642,0.633271,-0.059467,795.73322,-565.076313,2080.771204, -0.765569,0.628286,-0.138423,788.48267,-571.822716,2103.011094, -0.771642,0.633271,-0.059467,795.73322,-565.076313,2080.771204, -0.819909,0.56476,-0.093785,812.321046,-542.77557,2103.011094, -0.77301,0.634393,-0,802.928322,-560.588162,2035.202339, -0.77301,0.634393,-0,802.928322,-560.588162,2035.202339, -0.819909,0.56476,-0.093785,812.321046,-542.77557,2103.011094, -0.831469,0.55557,-0,815.696038,-545.030668,2035.2022, -0.771643,0.63327,0.059467,795.733256,-565.076295,1989.63347, -0.819909,0.56476,0.093785,812.321046,-542.77557,1967.393306, -0.765569,0.628286,0.138423,788.482625,-571.822771,1967.393306, -0.819909,0.56476,0.093785,812.321046,-542.77557,1967.393306, -0.771643,0.63327,0.059467,795.733256,-565.076295,1989.63347, -0.77301,0.634393,-0,802.928322,-560.588162,2035.202339, -0.819909,0.56476,0.093785,812.321046,-542.77557,1967.393306, -0.77301,0.634393,-0,802.928322,-560.588162,2035.202339, -0.831469,0.55557,-0,815.696038,-545.030668,2035.2022, 0.014067,0.991704,-0.12777,0,-976.970216,2103.011094, -0.095693,0.97159,-0.216463,104.493598,-954.559262,2169.851549, -0.097775,0.992726,-0.070245,104.493608,-966.678494,2103.011094, -0.095693,0.97159,-0.216463,104.493598,-954.559262,2169.851549, 0.014067,0.991704,-0.12777,0,-976.970216,2103.011094, 0,0.966617,-0.256224,0,-964.850983,2169.851549, 0,0.966617,-0.256224,0,-964.850983,2169.851549, -0.093709,0.951442,-0.293216,104.49359,-940.355699,2215.939931, -0.095693,0.97159,-0.216463,104.493598,-954.559262,2169.851549, -0.093709,0.951442,-0.293216,104.49359,-940.355699,2215.939931, 0,0.966617,-0.256224,0,-964.850983,2169.851549, -0.014053,0.939213,-0.343046,0,-944.844672,2234.768955, -0.093709,0.951442,-0.293216,104.49359,-940.355699,2215.939931, -0.014053,0.939213,-0.343046,0,-944.844672,2234.768955, -0.15559,0.942942,-0.294368,184.938818,-929.750222,2224.643627, -0.15559,0.942942,-0.294368,184.938818,-929.750222,2224.643627, -0.014053,0.939213,-0.343046,0,-944.844672,2234.768955, -0.183341,0.918213,-0.3511,184.330051,-926.689746,2234.768955, -0.183341,0.918213,-0.3511,184.330051,-926.689746,2234.768955, -0.277526,0.914879,-0.293216,199.064977,-923.935741,2229.415451, -0.15559,0.942942,-0.294368,184.938818,-929.750222,2224.643627, -0.277526,0.914879,-0.293216,199.064977,-923.935741,2229.415451, -0.183341,0.918213,-0.3511,184.330051,-926.689746,2234.768955, -0.269895,0.889723,-0.36817,226.426113,-913.920046,2234.768955, -0.197225,0.872604,-0.446838,178.944064,-899.612557,2296.83617, -0.269895,0.889723,-0.36817,226.426113,-913.920046,2234.768955, -0.183341,0.918213,-0.3511,184.330051,-926.689746,2234.768955, -0.269895,0.889723,-0.36817,226.426113,-913.920046,2234.768955, -0.197225,0.872604,-0.446838,178.944064,-899.612557,2296.83617, -0.265441,0.875041,-0.404776,301.780746,-883.553125,2251.000425, -0.265441,0.875041,-0.404776,301.780746,-883.553125,2251.000425, -0.197225,0.872604,-0.446838,178.944064,-899.612557,2296.83617, -0.321796,0.855234,-0.406229,357.792956,-863.788608,2256.995935, -0.321796,0.855234,-0.406229,357.792956,-863.788608,2256.995935, -0.197225,0.872604,-0.446838,178.944064,-899.612557,2296.83617, -0.353801,0.818498,-0.452643,351.011407,-847.416499,2296.83617, -0.353801,0.818498,-0.452643,351.011407,-847.416499,2296.83617, -0.431053,0.806443,-0.404776,395.941605,-839.735435,2264.292394, -0.321796,0.855234,-0.406229,357.792956,-863.788608,2256.995935, -0.431053,0.806443,-0.404776,395.941605,-839.735435,2264.292394, -0.353801,0.818498,-0.452643,351.011407,-847.416499,2296.83617, -0.431053,0.806443,-0.404776,476.98041,-794.166558,2268.780556, -0.431053,0.806443,-0.404776,476.98041,-794.166558,2268.780556, -0.468784,0.754023,-0.460099,509.589579,-762.654701,2296.83617, -0.532321,0.742706,-0.406229,517.019001,-773.773617,2266.772036, -0.468784,0.754023,-0.460099,509.589579,-762.654701,2296.83617, -0.431053,0.806443,-0.404776,476.98041,-794.166558,2268.780556, -0.353801,0.818498,-0.452643,351.011407,-847.416499,2296.83617, -0.580099,0.706853,-0.404776,612.09289,-704.779988,2251.000501, -0.662575,0.661607,-0.3511,668.106075,-668.106075,2234.768955, -0.594359,0.724228,-0.349616,660.421224,-674.412869,2234.768955, -0.662575,0.661607,-0.3511,668.106075,-668.106075,2234.768955, -0.580099,0.706853,-0.404776,612.09289,-704.779988,2251.000501, -0.61303,0.654649,-0.442299,648.584509,-648.584509,2296.83617, -0.61303,0.654649,-0.442299,648.584509,-648.584509,2296.83617, -0.580099,0.706853,-0.404776,612.09289,-704.779988,2251.000501, -0.580099,0.706853,-0.404776,549.426162,-748.59768,2264.292433, -0.61303,0.654649,-0.442299,648.584509,-648.584509,2296.83617, -0.580099,0.706853,-0.404776,549.426162,-748.59768,2264.292433, -0.532321,0.742706,-0.406229,517.019001,-773.773617,2266.772036, -0.61303,0.654649,-0.442299,648.584509,-648.584509,2296.83617, -0.532321,0.742706,-0.406229,517.019001,-773.773617,2266.772036, -0.468784,0.754023,-0.460099,509.589579,-762.654701,2296.83617, -0.662575,0.661607,-0.3511,668.106075,-668.106075,2234.768955, -0.739034,0.606509,-0.293216,673.273723,-664.39737,2229.415565, -0.675745,0.675745,-0.294512,668.764043,-668.764043,2231.749598, -0.739034,0.606509,-0.293216,673.273723,-664.39737,2229.415565, -0.662575,0.661607,-0.3511,668.106075,-668.106075,2234.768955, -0.766636,0.549472,-0.33219,785.609633,-524.927574,2234.768955, -0.739034,0.606509,-0.293216,673.273723,-664.39737,2229.415565, -0.766636,0.549472,-0.33219,785.609633,-524.927574,2234.768955, -0.739034,0.606509,-0.293216,713.847356,-629.001708,2200.367118, -0.739034,0.606509,-0.293216,713.847356,-629.001708,2200.367118, -0.766636,0.549472,-0.33219,785.609633,-524.927574,2234.768955, -0.747441,0.613409,-0.255071,746.507278,-603.95821,2169.851549, -0.747441,0.613409,-0.255071,746.507278,-603.95821,2169.851549, -0.766636,0.549472,-0.33219,785.609633,-524.927574,2234.768955, -0.799622,0.563457,-0.207656,802.244273,-536.042486,2169.851549, -0.662575,0.661607,-0.3511,668.106075,-668.106075,2234.768955, -0.675745,0.675745,-0.294512,668.764043,-668.764043,2231.749598, -0.594359,0.724228,-0.349616,660.421224,-674.412869,2234.768955, -0.799622,0.563457,-0.207656,802.244273,-536.042486,2169.851549, -0.760725,0.624311,-0.177575,750.933223,-599.953237,2164.971478, -0.747441,0.613409,-0.255071,746.507278,-603.95821,2169.851549, -0.760725,0.624311,-0.177575,750.933223,-599.953237,2164.971478, -0.799622,0.563457,-0.207656,802.244273,-536.042486,2169.851549, -0.760725,0.624311,-0.177575,778.073998,-578.368273,2124.58888, -0.760725,0.624311,-0.177575,778.073998,-578.368273,2124.58888, -0.799622,0.563457,-0.207656,802.244273,-536.042486,2169.851549, -0.765569,0.628286,-0.138423,788.48267,-571.822716,2103.011094, -0.765569,0.628286,-0.138423,788.48267,-571.822716,2103.011094, -0.799622,0.563457,-0.207656,802.244273,-536.042486,2169.851549, -0.819909,0.56476,-0.093785,812.321046,-542.77557,2103.011094, 0.024785,0.994227,0.104395,0,-976.970216,1967.393306, -0.095693,0.97159,0.216463,104.493633,-954.559259,1900.552851, 0.000461,0.971536,0.236891,0,-964.850983,1900.552851, -0.095693,0.97159,0.216463,104.493633,-954.559259,1900.552851, 0.024785,0.994227,0.104395,0,-976.970216,1967.393306, -0.097677,0.991736,0.083183,104.493626,-966.678492,1967.393306, -0,0.803137,-0.595794,104.493586,-599.95327,1905.433085, 0,0.707107,-0.707107,713.8475,-629.001642,1870.037509, 0,0.707107,-0.707107,104.493594,-629.001722,1870.037429, 0,0.707107,-0.707107,713.8475,-629.001642,1870.037509, -0,0.803137,-0.595794,104.493586,-599.95327,1905.433085, -0,0.773011,-0.634393,746.507157,-603.958357,1900.552851, -0,0.773011,-0.634393,746.507157,-603.958357,1900.552851, -0,0.803137,-0.595794,104.493586,-599.95327,1905.433085, -0,0.849252,-0.527988,750.933323,-599.953185,1905.43317, -0,0.910825,-0.412792,104.493578,-578.368325,1945.815695, -0,0.849252,-0.527988,750.933323,-599.953185,1905.43317, -0,0.803137,-0.595794,104.493586,-599.95327,1905.433085, -0,0.849252,-0.527988,750.933323,-599.953185,1905.43317, -0,0.910825,-0.412792,104.493578,-578.368325,1945.815695, -0,0.935939,-0.352162,778.074089,-578.368237,1945.815784, -0,0.582554,0.812792,104.493552,-664.397445,2229.41549, -0,0.683524,0.729928,713.847356,-629.001708,2200.367118, -0,0.741031,0.671471,104.493551,-629.001789,2200.367038, -0,0.683524,0.729928,713.847356,-629.001708,2200.367118, -0,0.582554,0.812792,104.493552,-664.397445,2229.41549, -0,0.505553,0.862796,673.273723,-664.39737,2229.415565, -0,-0.527988,0.849252,104.493586,-923.935753,2229.415438, -0,-0.400805,0.916164,301.780746,-883.553125,2251.000425, -0,-0.352162,0.935939,104.493578,-883.553151,2251.000399, -0,-0.400805,0.916164,301.780746,-883.553125,2251.000425, -0,-0.527988,0.849252,104.493586,-923.935753,2229.415438, -0,-0.55557,0.83147,199.064977,-923.935741,2229.415451, -0,-0.400805,0.916164,301.780746,-883.553125,2251.000425, -0,-0.55557,0.83147,199.064977,-923.935741,2229.415451, -0,-0.471397,0.881921,226.426113,-913.920046,2234.768955, 0,0,-1,476.980677,-794.166464,1801.623942, 0,-0.162803,-0.986659,104.493631,-839.735381,1806.112026, 0,0.032813,-0.999462,104.493625,-794.166513,1801.623893, 0,-0.162803,-0.986659,104.493631,-839.735381,1806.112026, 0,0,-1,476.980677,-794.166464,1801.623942, 0,-0.243095,-0.970002,395.941832,-839.735343,1806.112064, 0,-0.243095,-0.970002,395.941832,-839.735343,1806.112064, 0,-0.352162,-0.935939,104.493635,-883.553065,1819.403965, 0,-0.162803,-0.986659,104.493631,-839.735381,1806.112026, 0,-0.352162,-0.935939,104.493635,-883.553065,1819.403965, 0,-0.243095,-0.970002,395.941832,-839.735343,1806.112064, 0,-0.400804,-0.916164,301.781055,-883.553039,1819.403991, 0,-0.400804,-0.916164,301.781055,-883.553039,1819.403991, 0,-0.243095,-0.970002,395.941832,-839.735343,1806.112064, 0,-0.290284,-0.95694,357.792969,-863.788639,1813.40854, 0,-0.400804,-0.916164,301.781055,-883.553039,1819.403991, 0,-0.527988,-0.849252,104.493637,-923.935675,1840.98891, 0,-0.352162,-0.935939,104.493635,-883.553065,1819.403965, 0,-0.527988,-0.849252,104.493637,-923.935675,1840.98891, 0,-0.400804,-0.916164,301.781055,-883.553039,1819.403991, 0,-0.55557,-0.83147,199.065204,-923.935663,1840.988923, 0,-0.55557,-0.83147,199.065204,-923.935663,1840.988923, 0,-0.400804,-0.916164,301.781055,-883.553039,1819.403991, 0,-0.471397,-0.881921,226.426278,-913.919995,1835.635445, 0,0.707107,-0.707107,713.8475,-629.001642,1870.037509, 0,0.582554,-0.812792,104.493603,-664.397367,1840.988962, 0,0.707107,-0.707107,104.493594,-629.001722,1870.037429, 0,0.582554,-0.812792,104.493603,-664.397367,1840.988962, 0,0.707107,-0.707107,713.8475,-629.001642,1870.037509, 0,0.505553,-0.862796,673.273867,-664.397292,1840.989037, 0,0.505553,-0.862796,673.273867,-664.397292,1840.989037, 0,0.412793,-0.910825,104.493611,-704.779969,1819.404001, 0,0.582554,-0.812792,104.493603,-664.397367,1840.988962, 0,0.412793,-0.910825,104.493611,-704.779969,1819.404001, 0,0.505553,-0.862796,673.273867,-664.397292,1840.989037, 0,0.382684,-0.923879,612.093113,-704.779902,1819.404068, 0,0.382684,-0.923879,612.093113,-704.779902,1819.404068, 0,0.505553,-0.862796,673.273867,-664.397292,1840.989037, 0,0.471397,-0.881921,660.420878,-674.413152,1835.635445, 0,0.471397,-0.881921,660.420878,-674.413152,1835.635445, 0,0.505553,-0.862796,673.273867,-664.397292,1840.989037, 0,0.471397,-0.881921,668.764074,-668.764074,1838.654942, 0,0.382684,-0.923879,612.093113,-704.779902,1819.404068, 0,0.227168,-0.973856,104.493619,-748.597647,1806.112044, 0,0.412793,-0.910825,104.493611,-704.779969,1819.404001, 0,0.227168,-0.973856,104.493619,-748.597647,1806.112044, 0,0.382684,-0.923879,612.093113,-704.779902,1819.404068, 0,0.146613,-0.989194,549.426369,-748.597589,1806.112103, -0,0.227167,0.973856,104.493558,-748.597739,2264.292374, -0,0.382683,0.92388,612.09289,-704.779988,2251.000501, -0,0.412792,0.910825,104.493554,-704.780055,2251.000435, -0,0.382683,0.92388,612.09289,-704.779988,2251.000501, -0,0.227167,0.973856,104.493558,-748.597739,2264.292374, -0,0.146613,0.989194,549.426162,-748.59768,2264.292433, -0,0.741031,0.671471,104.493551,-629.001789,2200.367038, -0,0.812792,0.582554,750.933223,-599.953237,2164.971478, -0,0.849252,0.527988,104.493552,-599.953322,2164.971393, -0,0.812792,0.582554,750.933223,-599.953237,2164.971478, -0,0.741031,0.671471,104.493551,-629.001789,2200.367038, -0,0.77301,0.634393,746.507278,-603.95821,2169.851549, -0,0.77301,0.634393,746.507278,-603.95821,2169.851549, -0,0.741031,0.671471,104.493551,-629.001789,2200.367038, -0,0.683524,0.729928,713.847356,-629.001708,2200.367118, -0,0.849252,0.527988,104.493552,-599.953322,2164.971393, -0,0.910825,0.412793,778.073998,-578.368273,2124.58888, -0,0.941584,0.336778,104.493554,-578.368361,2124.588791, -0,0.910825,0.412793,778.073998,-578.368273,2124.58888, -0,0.849252,0.527988,104.493552,-599.953322,2164.971393, -0,0.812792,0.582554,750.933223,-599.953237,2164.971478, -0,0.941584,0.336778,104.493554,-578.368361,2124.588791, -0,0.973856,0.227168,795.73322,-565.076313,2080.771204, -0,0.986659,0.162803,104.493558,-565.076404,2080.771113, -0,0.973856,0.227168,795.73322,-565.076313,2080.771204, -0,0.941584,0.336778,104.493554,-578.368361,2124.588791, -0,0.95694,0.290285,788.48267,-571.822716,2103.011094, -0,0.95694,0.290285,788.48267,-571.822716,2103.011094, -0,0.941584,0.336778,104.493554,-578.368361,2124.588791, -0,0.910825,0.412793,778.073998,-578.368273,2124.58888, -0,0.986659,0.162803,104.493558,-565.076404,2080.771113, -0,0.999462,0.032813,802.928322,-560.588162,2035.202339, -0,0.999462,-0.032813,104.493564,-560.588253,2035.202247, -0,0.999462,0.032813,802.928322,-560.588162,2035.202339, -0,0.986659,0.162803,104.493558,-565.076404,2080.771113, -0,0.973856,0.227168,795.73322,-565.076313,2080.771204, -0,0.999462,-0.032813,104.493564,-560.588253,2035.202247, -0,0.986659,-0.162803,795.733256,-565.076295,1989.63347, -0,0.970002,-0.243095,104.49357,-565.076386,1989.633379, -0,0.986659,-0.162803,795.733256,-565.076295,1989.63347, -0,0.999462,-0.032813,104.493564,-560.588253,2035.202247, -0,0.999462,0.032813,802.928322,-560.588162,2035.202339, -0,0.970002,-0.243095,104.49357,-565.076386,1989.633379, -0,0.935939,-0.352162,778.074089,-578.368237,1945.815784, -0,0.910825,-0.412792,104.493578,-578.368325,1945.815695, -0,0.935939,-0.352162,778.074089,-578.368237,1945.815784, -0,0.970002,-0.243095,104.49357,-565.076386,1989.633379, -0,0.95694,-0.290284,788.482625,-571.822771,1967.393306, -0,0.95694,-0.290284,788.482625,-571.822771,1967.393306, -0,0.970002,-0.243095,104.49357,-565.076386,1989.633379, -0,0.986659,-0.162803,795.733256,-565.076295,1989.63347, -0,-0.162803,0.986659,104.49357,-839.735473,2264.292356, -0,-0,1,476.98041,-794.166558,2268.780556, -0,0.032813,0.999462,104.493564,-794.166607,2268.780507, -0,-0,1,476.98041,-794.166558,2268.780556, -0,-0.162803,0.986659,104.49357,-839.735473,2264.292356, -0,-0.243095,0.970002,395.941605,-839.735435,2264.292394, -0,0.032813,0.999462,104.493564,-794.166607,2268.780507, -0,0.146613,0.989194,549.426162,-748.59768,2264.292433, -0,0.227167,0.973856,104.493558,-748.597739,2264.292374, -0,0.146613,0.989194,549.426162,-748.59768,2264.292433, -0,0.032813,0.999462,104.493564,-794.166607,2268.780507, -0,-0,1,476.98041,-794.166558,2268.780556, -0,0.146613,0.989194,549.426162,-748.59768,2264.292433, -0,-0,1,476.98041,-794.166558,2268.780556, -0,0.098017,0.995185,517.019001,-773.773617,2266.772036, -0,-0.634393,0.77301,104.49359,-940.355699,2215.939931, -0,-0.55557,0.83147,199.064977,-923.935741,2229.415451, -0,-0.527988,0.849252,104.493586,-923.935753,2229.415438, -0,-0.55557,0.83147,199.064977,-923.935741,2229.415451, -0,-0.634393,0.77301,104.49359,-940.355699,2215.939931, -0,-0.634393,0.77301,184.938818,-929.750222,2224.643627, -1,-0,-0,104.493608,-966.678494,2103.011094, -1,-0,-0,104.493626,-966.678492,1967.393306, -1,-0,-0,104.493618,-970.737561,2035.2022, -1,-0,-0,104.493626,-966.678492,1967.393306, -1,-0,-0,104.493608,-966.678494,2103.011094, -1,-0,-0,104.493598,-954.559262,2169.851549, -1,-0,-0,104.493626,-966.678492,1967.393306, -1,-0,-0,104.493598,-954.559262,2169.851549, -1,-0,-0,104.493633,-954.559259,1900.552851, -1,-0,-0,104.493633,-954.559259,1900.552851, -1,-0,-0,104.493598,-954.559262,2169.851549, -1,-0,-0,104.49359,-940.355699,2215.939931, -1,-0,-0,104.493633,-954.559259,1900.552851, -1,-0,-0,104.49359,-940.355699,2215.939931, -1,-0,-0,104.493637,-940.355693,1854.464465, -1,-0,-0,104.493637,-940.355693,1854.464465, -1,-0,-0,104.49359,-940.355699,2215.939931, -1,-0,-0,104.493586,-923.935753,2229.415438, -1,-0,-0,104.493637,-940.355693,1854.464465, -1,-0,-0,104.493586,-923.935753,2229.415438, -1,-0,-0,104.493637,-923.935675,1840.98891, -1,-0,-0,104.493637,-923.935675,1840.98891, -1,-0,-0,104.493586,-923.935753,2229.415438, -1,-0,-0,104.493578,-883.553151,2251.000399, -1,-0,-0,104.493637,-923.935675,1840.98891, -1,-0,-0,104.493578,-883.553151,2251.000399, -1,-0,-0,104.493635,-883.553065,1819.403965, -1,-0,-0,104.493635,-883.553065,1819.403965, -1,-0,-0,104.493578,-883.553151,2251.000399, -1,-0,-0,104.493606,-882.926352,2035.2022, -1,-0,-0,104.493606,-882.926352,2035.2022, -1,-0,-0,104.493578,-883.553151,2251.000399, -1,-0,-0,104.493604,-881.220857,2052.518376, -1,-0,-0,104.493604,-881.220857,2052.518376, -1,-0,-0,104.493578,-883.553151,2251.000399, -1,-0,-0,104.49357,-839.735473,2264.292356, -1,-0,-0,104.493604,-881.220857,2052.518376, -1,-0,-0,104.49357,-839.735473,2264.292356, -1,-0,-0,104.493601,-876.169915,2069.169102, -1,-0,-0,104.493601,-876.169915,2069.169102, -1,-0,-0,104.49357,-839.735473,2264.292356, -1,-0,-0,104.493598,-867.96763,2084.514498, -1,-0,-0,104.493598,-867.96763,2084.514498, -1,-0,-0,104.49357,-839.735473,2264.292356, -1,-0,-0,104.493594,-856.929211,2097.964851, -1,-0,-0,104.493594,-856.929211,2097.964851, -1,-0,-0,104.49357,-839.735473,2264.292356, -1,-0,-0,104.493591,-843.478858,2109.00327, -1,-0,-0,104.493591,-843.478858,2109.00327, -1,-0,-0,104.49357,-839.735473,2264.292356, -1,-0,-0,104.493588,-828.133462,2117.205555, -1,-0,-0,104.493588,-828.133462,2117.205555, -1,-0,-0,104.49357,-839.735473,2264.292356, -1,-0,-0,104.493564,-794.166607,2268.780507, -1,-0,-0,104.493588,-828.133462,2117.205555, -1,-0,-0,104.493564,-794.166607,2268.780507, -1,-0,-0,104.493585,-811.482736,2122.256498, -1,-0,-0,104.493585,-811.482736,2122.256498, -1,-0,-0,104.493564,-794.166607,2268.780507, -1,-0,-0,104.493583,-794.16656,2123.961992, -1,-0,-0,104.493583,-794.16656,2123.961992, -1,-0,-0,104.493564,-794.166607,2268.780507, -1,-0,-0,104.493558,-748.597739,2264.292374, -1,-0,-0,104.493583,-794.16656,2123.961992, -1,-0,-0,104.493558,-748.597739,2264.292374, -1,-0,-0,104.493581,-776.850384,2122.256498, -1,-0,-0,104.493581,-776.850384,2122.256498, -1,-0,-0,104.493558,-748.597739,2264.292374, -1,-0,-0,104.493579,-760.199658,2117.205555, -1,-0,-0,104.493579,-760.199658,2117.205555, -1,-0,-0,104.493558,-748.597739,2264.292374, -1,-0,-0,104.493578,-744.854262,2109.00327, -1,-0,-0,104.493578,-744.854262,2109.00327, -1,-0,-0,104.493558,-748.597739,2264.292374, -1,-0,-0,104.493554,-704.780055,2251.000435, -1,-0,-0,104.493578,-744.854262,2109.00327, -1,-0,-0,104.493554,-704.780055,2251.000435, -1,-0,-0,104.493578,-731.403909,2097.964851, -1,-0,-0,104.493578,-731.403909,2097.964851, -1,-0,-0,104.493554,-704.780055,2251.000435, -1,-0,-0,104.493578,-720.36549,2084.514498, -1,-0,-0,104.493578,-720.36549,2084.514498, -1,-0,-0,104.493554,-704.780055,2251.000435, -1,-0,-0,104.493579,-712.163205,2069.169102, -1,-0,-0,104.493579,-712.163205,2069.169102, -1,-0,-0,104.493554,-704.780055,2251.000435, -1,-0,-0,104.493581,-707.112263,2052.518376, -1,-0,-0,104.493581,-707.112263,2052.518376, -1,-0,-0,104.493554,-704.780055,2251.000435, -1,-0,-0,104.493583,-705.406768,2035.2022, -1,-0,-0,104.493635,-883.553065,1819.403965, -1,-0,-0,104.493608,-881.220857,2017.886024, -1,-0,-0,104.493631,-839.735381,1806.112026, -1,-0,-0,104.493608,-881.220857,2017.886024, -1,-0,-0,104.493635,-883.553065,1819.403965, -1,-0,-0,104.493606,-882.926352,2035.2022, -1,-0,-0,104.493631,-839.735381,1806.112026, -1,-0,-0,104.493608,-881.220857,2017.886024, -1,-0,-0,104.49361,-876.169915,2001.235298, -1,-0,-0,104.493631,-839.735381,1806.112026, -1,-0,-0,104.49361,-876.169915,2001.235298, -1,-0,-0,104.493611,-867.96763,1985.889902, -1,-0,-0,104.493631,-839.735381,1806.112026, -1,-0,-0,104.493611,-867.96763,1985.889902, -1,-0,-0,104.493611,-856.929211,1972.439549, -1,-0,-0,104.493631,-839.735381,1806.112026, -1,-0,-0,104.493611,-856.929211,1972.439549, -1,-0,-0,104.493611,-843.478858,1961.40113, -1,-0,-0,104.493631,-839.735381,1806.112026, -1,-0,-0,104.493611,-843.478858,1961.40113, -1,-0,-0,104.49361,-828.133462,1953.198845, -1,-0,-0,104.493631,-839.735381,1806.112026, -1,-0,-0,104.49361,-828.133462,1953.198845, -1,-0,-0,104.493625,-794.166513,1801.623893, -1,-0,-0,104.493625,-794.166513,1801.623893, -1,-0,-0,104.49361,-828.133462,1953.198845, -1,-0,-0,104.493608,-811.482736,1948.147903, -1,-0,-0,104.493625,-794.166513,1801.623893, -1,-0,-0,104.493608,-811.482736,1948.147903, -1,-0,-0,104.493606,-794.16656,1946.442408, -1,-0,-0,104.493625,-794.166513,1801.623893, -1,-0,-0,104.493606,-794.16656,1946.442408, -1,-0,-0,104.493604,-776.850384,1948.147903, -1,-0,-0,104.493625,-794.166513,1801.623893, -1,-0,-0,104.493604,-776.850384,1948.147903, -1,-0,-0,104.493619,-748.597647,1806.112044, -1,-0,-0,104.493619,-748.597647,1806.112044, -1,-0,-0,104.493604,-776.850384,1948.147903, -1,-0,-0,104.493601,-760.199658,1953.198845, -1,-0,-0,104.493619,-748.597647,1806.112044, -1,-0,-0,104.493601,-760.199658,1953.198845, -1,-0,-0,104.493598,-744.854262,1961.40113, -1,-0,-0,104.493619,-748.597647,1806.112044, -1,-0,-0,104.493598,-744.854262,1961.40113, -1,-0,-0,104.493611,-704.779969,1819.404001, -1,-0,-0,104.493611,-704.779969,1819.404001, -1,-0,-0,104.493598,-744.854262,1961.40113, -1,-0,-0,104.493594,-731.403909,1972.439549, -1,-0,-0,104.493611,-704.779969,1819.404001, -1,-0,-0,104.493594,-731.403909,1972.439549, -1,-0,-0,104.493591,-720.36549,1985.889902, -1,-0,-0,104.493611,-704.779969,1819.404001, -1,-0,-0,104.493591,-720.36549,1985.889902, -1,-0,-0,104.493588,-712.163205,2001.235298, -1,-0,-0,104.493611,-704.779969,1819.404001, -1,-0,-0,104.493588,-712.163205,2001.235298, -1,-0,-0,104.493585,-707.112263,2017.886024, -1,-0,-0,104.493611,-704.779969,1819.404001, -1,-0,-0,104.493585,-707.112263,2017.886024, -1,-0,-0,104.493583,-705.406768,2035.2022, -1,-0,-0,104.493611,-704.779969,1819.404001, -1,-0,-0,104.493583,-705.406768,2035.2022, -1,-0,-0,104.493554,-704.780055,2251.000435, -1,-0,-0,104.493611,-704.779969,1819.404001, -1,-0,-0,104.493554,-704.780055,2251.000435, -1,-0,-0,104.493552,-664.397445,2229.41549, -1,-0,-0,104.493611,-704.779969,1819.404001, -1,-0,-0,104.493552,-664.397445,2229.41549, -1,-0,-0,104.493603,-664.397367,1840.988962, -1,-0,-0,104.493603,-664.397367,1840.988962, -1,-0,-0,104.493552,-664.397445,2229.41549, -1,-0,-0,104.493551,-629.001789,2200.367038, -1,-0,-0,104.493603,-664.397367,1840.988962, -1,-0,-0,104.493551,-629.001789,2200.367038, -1,-0,-0,104.493594,-629.001722,1870.037429, -1,-0,-0,104.493594,-629.001722,1870.037429, -1,-0,-0,104.493551,-629.001789,2200.367038, -1,-0,-0,104.493552,-599.953322,2164.971393, -1,-0,-0,104.493594,-629.001722,1870.037429, -1,-0,-0,104.493552,-599.953322,2164.971393, -1,-0,-0,104.493586,-599.95327,1905.433085, -1,-0,-0,104.493586,-599.95327,1905.433085, -1,-0,-0,104.493552,-599.953322,2164.971393, -1,-0,-0,104.493554,-578.368361,2124.588791, -1,-0,-0,104.493586,-599.95327,1905.433085, -1,-0,-0,104.493554,-578.368361,2124.588791, -1,-0,-0,104.493578,-578.368325,1945.815695, -1,-0,-0,104.493578,-578.368325,1945.815695, -1,-0,-0,104.493554,-578.368361,2124.588791, -1,-0,-0,104.493558,-565.076404,2080.771113, -1,-0,-0,104.493578,-578.368325,1945.815695, -1,-0,-0,104.493558,-565.076404,2080.771113, -1,-0,-0,104.49357,-565.076386,1989.633379, -1,-0,-0,104.49357,-565.076386,1989.633379, -1,-0,-0,104.493558,-565.076404,2080.771113, -1,-0,-0,104.493564,-560.588253,2035.202247, 0,-0.55557,-0.83147,199.065204,-923.935663,1840.988923, 0,-0.634393,-0.773011,104.493637,-940.355693,1854.464465, 0,-0.527988,-0.849252,104.493637,-923.935675,1840.98891, 0,-0.634393,-0.773011,104.493637,-940.355693,1854.464465, 0,-0.55557,-0.83147,199.065204,-923.935663,1840.988923, 0,-0.634393,-0.773011,184.93882,-929.750234,1845.760812, -0,-0.352162,0.935939,104.493578,-883.553151,2251.000399, -0,-0.243095,0.970002,395.941605,-839.735435,2264.292394, -0,-0.162803,0.986659,104.49357,-839.735473,2264.292356, -0,-0.243095,0.970002,395.941605,-839.735435,2264.292394, -0,-0.352162,0.935939,104.493578,-883.553151,2251.000399, -0,-0.400805,0.916164,301.780746,-883.553125,2251.000425, -0,-0.243095,0.970002,395.941605,-839.735435,2264.292394, -0,-0.400805,0.916164,301.780746,-883.553125,2251.000425, -0,-0.290285,0.95694,357.792956,-863.788608,2256.995935, -0,0.412792,0.910825,104.493554,-704.780055,2251.000435, -0,0.505553,0.862796,673.273723,-664.39737,2229.415565, -0,0.582554,0.812792,104.493552,-664.397445,2229.41549, -0,0.505553,0.862796,673.273723,-664.39737,2229.415565, -0,0.412792,0.910825,104.493554,-704.780055,2251.000435, -0,0.382683,0.92388,612.09289,-704.779988,2251.000501, -0,0.505553,0.862796,673.273723,-664.39737,2229.415565, -0,0.382683,0.92388,612.09289,-704.779988,2251.000501, -0,0.471397,0.881921,660.421224,-674.412869,2234.768955, -0,0.505553,0.862796,673.273723,-664.39737,2229.415565, -0,0.471397,0.881921,660.421224,-674.412869,2234.768955, -0,0.471397,0.881921,668.764043,-668.764043,2231.749598, 0,0.146613,-0.989194,549.426369,-748.597589,1806.112103, 0,0.032813,-0.999462,104.493625,-794.166513,1801.623893, 0,0.227168,-0.973856,104.493619,-748.597647,1806.112044, 0,0.032813,-0.999462,104.493625,-794.166513,1801.623893, 0,0.146613,-0.989194,549.426369,-748.597589,1806.112103, 0,0,-1,476.980677,-794.166464,1801.623942, 0,0,-1,476.980677,-794.166464,1801.623942, 0,0.146613,-0.989194,549.426369,-748.597589,1806.112103, 0,0.098017,-0.995185,517.019027,-773.773655,1803.632468, 0.139589,0.989621,0.034132,-191.389319,-962.179081,2035.2022, 0.024785,0.994227,0.104395,0,-976.970216,1967.393306, 0.193925,0.973736,0.119297,-190.597434,-958.198007,1967.393306, 0.024785,0.994227,0.104395,0,-976.970216,1967.393306, 0.139589,0.989621,0.034132,-191.389319,-962.179081,2035.2022, 0.097844,0.993424,0.059467,-10.248119,-977.344466,1990.507106, 0.024785,0.994227,0.104395,0,-976.970216,1967.393306, 0.097844,0.993424,0.059467,-10.248119,-977.344466,1990.507106, 0.097844,0.993424,0.059467,-1.468161,-978.157452,1989.642356, 0.097844,0.993424,0.059467,-10.248119,-977.344466,1990.507106, 0.139589,0.989621,0.034132,-191.389319,-962.179081,2035.2022, 0.097844,0.993424,0.059467,-18.690668,-976.666251,1993.068126, 0.097844,0.993424,0.059467,-18.690668,-976.666251,1993.068126, 0.139589,0.989621,0.034132,-191.389319,-962.179081,2035.2022, 0.097844,0.993424,0.059467,-26.471367,-976.14887,1997.226995, 0.097844,0.993424,0.059467,-26.471367,-976.14887,1997.226995, 0.139589,0.989621,0.034132,-191.389319,-962.179081,2035.2022, 0.097844,0.993424,0.059467,-33.291206,-975.812207,2002.823893, 0.097844,0.993424,0.059467,-33.291206,-975.812207,2002.823893, 0.139589,0.989621,0.034132,-191.389319,-962.179081,2035.2022, 0.097844,0.993424,0.059467,-38.888103,-975.6692,2009.643732, 0.097844,0.993424,0.059467,-38.888103,-975.6692,2009.643732, 0.139589,0.989621,0.034132,-191.389319,-962.179081,2035.2022, 0.097844,0.993424,0.059467,-43.046973,-975.725342,2017.42443, 0.097844,0.993424,0.059467,-43.046973,-975.725342,2017.42443, 0.139589,0.989621,0.034132,-191.389319,-962.179081,2035.2022, 0.097844,0.993424,0.059467,-45.607992,-975.978478,2025.866979, 0.097844,0.993424,0.059467,-45.607992,-975.978478,2025.866979, 0.139589,0.989621,0.034132,-191.389319,-962.179081,2035.2022, 0.097844,0.993424,0.059467,-46.472742,-976.41888,2034.646937, 0.097844,0.993424,0.059467,-46.472742,-976.41888,2034.646937, 0.139589,0.989621,0.034132,-191.389319,-962.179081,2035.2022, 0.097998,0.994989,-0.019853,-46.418054,-976.457504,2035.2022, -0.032754,0.997678,0.059721,0,-978.310709,1989.786957, 0.024785,0.994227,0.104395,0,-976.970216,1967.393306, 0.097844,0.993424,0.059467,-1.468161,-978.157452,1989.642356, -0.097998,0.994989,-0.019853,43.481732,-976.746707,2035.2022, -0.097775,0.992726,-0.070245,104.493608,-966.678494,2103.011094, -0.097912,0.994118,0.046284,104.493618,-970.737561,2035.2022, -0.097775,0.992726,-0.070245,104.493608,-966.678494,2103.011094, -0.097998,0.994989,-0.019853,43.481732,-976.746707,2035.2022, -0.097844,0.993424,-0.059467,42.671671,-976.334157,2043.426896, -0.097775,0.992726,-0.070245,104.493608,-966.678494,2103.011094, -0.097844,0.993424,-0.059467,42.671671,-976.334157,2043.426896, -0.097844,0.993424,-0.059467,40.110651,-976.081021,2051.869445, -0.097775,0.992726,-0.070245,104.493608,-966.678494,2103.011094, -0.097844,0.993424,-0.059467,40.110651,-976.081021,2051.869445, -0.097844,0.993424,-0.059467,35.951781,-976.024878,2059.650143, -0.097775,0.992726,-0.070245,104.493608,-966.678494,2103.011094, -0.097844,0.993424,-0.059467,35.951781,-976.024878,2059.650143, -0.097844,0.993424,-0.059467,30.354884,-976.167886,2066.469982, -0.097775,0.992726,-0.070245,104.493608,-966.678494,2103.011094, -0.097844,0.993424,-0.059467,30.354884,-976.167886,2066.469982, -0.097844,0.993424,-0.059467,23.535045,-976.504549,2072.06688, -0.097775,0.992726,-0.070245,104.493608,-966.678494,2103.011094, -0.097844,0.993424,-0.059467,23.535045,-976.504549,2072.06688, -0.097844,0.993424,-0.059467,15.754347,-977.02193,2076.225749, -0.097775,0.992726,-0.070245,104.493608,-966.678494,2103.011094, -0.097844,0.993424,-0.059467,15.754347,-977.02193,2076.225749, -0.097844,0.993424,-0.059467,7.311798,-977.700144,2078.786769, -0.097775,0.992726,-0.070245,104.493608,-966.678494,2103.011094, -0.097844,0.993424,-0.059467,7.311798,-977.700144,2078.786769, -0.032754,0.997678,-0.059721,0,-978.377185,2079.506918, -0.097775,0.992726,-0.070245,104.493608,-966.678494,2103.011094, -0.032754,0.997678,-0.059721,0,-978.377185,2079.506918, 0.014067,0.991704,-0.12777,0,-976.970216,2103.011094, 0.138896,0.986639,-0.085149,-190.597434,-958.198007,2103.011094, 0.097998,0.994989,-0.019853,-46.418054,-976.457504,2035.2022, 0.139589,0.989621,0.034132,-191.389319,-962.179081,2035.2022, 0.097998,0.994989,-0.019853,-46.418054,-976.457504,2035.2022, 0.138896,0.986639,-0.085149,-190.597434,-958.198007,2103.011094, 0.097844,0.993424,-0.059467,-45.607992,-976.044955,2043.426896, 0.097844,0.993424,-0.059467,-45.607992,-976.044955,2043.426896, 0.138896,0.986639,-0.085149,-190.597434,-958.198007,2103.011094, 0.097844,0.993424,-0.059467,-43.046973,-975.791819,2051.869445, 0.097844,0.993424,-0.059467,-43.046973,-975.791819,2051.869445, 0.138896,0.986639,-0.085149,-190.597434,-958.198007,2103.011094, 0.097844,0.993424,-0.059467,-38.888103,-975.735676,2059.650143, 0.097844,0.993424,-0.059467,-38.888103,-975.735676,2059.650143, 0.138896,0.986639,-0.085149,-190.597434,-958.198007,2103.011094, 0.097844,0.993424,-0.059467,-33.291206,-975.878684,2066.469982, 0.097844,0.993424,-0.059467,-33.291206,-975.878684,2066.469982, 0.138896,0.986639,-0.085149,-190.597434,-958.198007,2103.011094, 0.097844,0.993424,-0.059467,-26.471367,-976.215347,2072.06688, 0.097844,0.993424,-0.059467,-26.471367,-976.215347,2072.06688, 0.138896,0.986639,-0.085149,-190.597434,-958.198007,2103.011094, 0.097844,0.993424,-0.059467,-18.690668,-976.732727,2076.225749, 0.097844,0.993424,-0.059467,-18.690668,-976.732727,2076.225749, 0.138896,0.986639,-0.085149,-190.597434,-958.198007,2103.011094, 0.097844,0.993424,-0.059467,-10.248119,-977.410942,2078.786769, 0.097844,0.993424,-0.059467,-10.248119,-977.410942,2078.786769, 0.138896,0.986639,-0.085149,-190.597434,-958.198007,2103.011094, 0.097844,0.993424,-0.059467,-1.468161,-978.223928,2079.651519, 0.097844,0.993424,-0.059467,-1.468161,-978.223928,2079.651519, 0.014067,0.991704,-0.12777,0,-976.970216,2103.011094, -0.032754,0.997678,-0.059721,0,-978.377185,2079.506918, 0.014067,0.991704,-0.12777,0,-976.970216,2103.011094, 0.097844,0.993424,-0.059467,-1.468161,-978.223928,2079.651519, 0.138896,0.986639,-0.085149,-190.597434,-958.198007,2103.011094, -0.032754,0.997678,0.059721,0,-978.310709,1989.786957, -0.097677,0.991736,0.083183,104.493626,-966.678492,1967.393306, 0.024785,0.994227,0.104395,0,-976.970216,1967.393306, -0.097677,0.991736,0.083183,104.493626,-966.678492,1967.393306, -0.032754,0.997678,0.059721,0,-978.310709,1989.786957, -0.097844,0.993424,0.059467,7.311798,-977.633668,1990.507106, -0.097677,0.991736,0.083183,104.493626,-966.678492,1967.393306, -0.097844,0.993424,0.059467,7.311798,-977.633668,1990.507106, -0.097844,0.993424,0.059467,15.754347,-976.955453,1993.068126, -0.097677,0.991736,0.083183,104.493626,-966.678492,1967.393306, -0.097844,0.993424,0.059467,15.754347,-976.955453,1993.068126, -0.097912,0.994118,0.046284,104.493618,-970.737561,2035.2022, -0.097912,0.994118,0.046284,104.493618,-970.737561,2035.2022, -0.097844,0.993424,0.059467,15.754347,-976.955453,1993.068126, -0.097844,0.993424,0.059467,23.535045,-976.438073,1997.226995, -0.097912,0.994118,0.046284,104.493618,-970.737561,2035.2022, -0.097844,0.993424,0.059467,23.535045,-976.438073,1997.226995, -0.097844,0.993424,0.059467,30.354884,-976.10141,2002.823893, -0.097912,0.994118,0.046284,104.493618,-970.737561,2035.2022, -0.097844,0.993424,0.059467,30.354884,-976.10141,2002.823893, -0.097844,0.993424,0.059467,35.951781,-975.958402,2009.643732, -0.097912,0.994118,0.046284,104.493618,-970.737561,2035.2022, -0.097844,0.993424,0.059467,35.951781,-975.958402,2009.643732, -0.097844,0.993424,0.059467,40.110651,-976.014545,2017.42443, -0.097912,0.994118,0.046284,104.493618,-970.737561,2035.2022, -0.097844,0.993424,0.059467,40.110651,-976.014545,2017.42443, -0.097844,0.993424,0.059467,42.671671,-976.267681,2025.866979, -0.097912,0.994118,0.046284,104.493618,-970.737561,2035.2022, -0.097844,0.993424,0.059467,42.671671,-976.267681,2025.866979, -0.097844,0.993424,0.059467,43.536421,-976.708082,2034.646937, -0.097912,0.994118,0.046284,104.493618,-970.737561,2035.2022, -0.097844,0.993424,0.059467,43.536421,-976.708082,2034.646937, -0.097998,0.994989,-0.019853,43.481732,-976.746707,2035.2022 }; static const struct gllist robot_body_half_inside_frame = { GL_N3F_V3F, GL_TRIANGLES, 3072, robot_body_half_inside_data, 0 }; const struct gllist *robot_body_half_inside = &robot_body_half_inside_frame; static const float robot_body_half_outside_data[] = { -0.000001,0.92388,0.382683,104.49361,-876.169915,2001.235298, -0.000001,0.973856,0.227168,180.675225,-881.220765,2017.886009, -0.000001,0.92388,0.382683,180.675225,-876.169825,2001.235293, -0.000001,0.973856,0.227168,180.675225,-881.220765,2017.886009, -0.000001,0.92388,0.382683,104.49361,-876.169915,2001.235298, -0.000001,0.986659,0.162803,104.493608,-881.220857,2017.886024, 0,-0.707107,0.707107,180.675225,-731.403895,1972.439559, 0,-0.812792,0.582554,104.493591,-720.36549,1985.889902, 0,-0.707107,0.707107,104.493594,-731.403909,1972.439549, 0,-0.812792,0.582554,104.493591,-720.36549,1985.889902, 0,-0.707107,0.707107,180.675225,-731.403895,1972.439559, 0,-0.849252,0.527988,180.675225,-720.365482,1985.889904, -0.000001,0.527988,0.849252,104.493611,-843.478858,1961.40113, -0.000001,0.412792,0.910825,180.675225,-828.133397,1953.198865, -0.000001,0.352162,0.935939,104.49361,-828.133462,1953.198845, -0.000001,0.412792,0.910825,180.675225,-828.133397,1953.198865, -0.000001,0.527988,0.849252,104.493611,-843.478858,1961.40113, -0.000001,0.582554,0.812792,180.675225,-843.478786,1961.401146, -0.873668,-0.191744,0.447144,-778.906876,-154.934211,1614.76108, -0.890977,-0.087754,0.445488,-878.796251,-89.364884,1427.89836, -0.877241,-0.174494,0.447214,-870.542978,-173.161765,1427.89836, -0.890977,-0.087754,0.445488,-878.796251,-89.364884,1427.89836, -0.873668,-0.191744,0.447144,-778.906876,-154.934211,1614.76108, -0.890977,-0.087754,0.445488,-794.166564,0,1614.76108, -0.890977,-0.087754,0.445488,-878.796251,-89.364884,1427.89836, -0.890977,-0.087754,0.445488,-794.166564,0,1614.76108, -0.890977,-0.087754,0.445488,-887.597924,0,1427.89836, 0.843385,-0.187656,0.503476,978.352295,-194.606371,2361.464898, 0.777333,-0.292484,0.556961,863.20747,-357.552241,2455.64332, 0.79057,-0.348586,0.503476,921.587711,-381.734129,2361.464898, 0.777333,-0.292484,0.556961,863.20747,-357.552241,2455.64332, 0.843385,-0.187656,0.503476,978.352295,-194.606371,2361.464898, 0.795831,-0.241413,0.555314,887.227327,-278.369385,2455.64332, 0.795831,-0.241413,0.555314,887.227327,-278.369385,2455.64332, 0.843385,-0.187656,0.503476,978.352295,-194.606371,2361.464898, 0.795831,-0.241413,0.555314,914.651021,-187.965581,2455.64332, 0.795831,-0.241413,0.555314,914.651021,-187.965581,2455.64332, 0.843385,-0.187656,0.503476,978.352295,-194.606371,2361.464898, 0.819458,-0.135214,0.556961,916.376162,-182.278552,2455.64332, 0.472298,-0.759676,0.447021,415.261462,-621.482696,1427.89836, 0.369253,-0.814754,0.447021,321.791703,-776.873894,1241.03564, 0.521108,-0.727062,0.447021,467.169144,-699.168033,1241.03564, 0.369253,-0.814754,0.447021,321.791703,-776.873894,1241.03564, 0.472298,-0.759676,0.447021,415.261462,-621.482696,1427.89836, 0.315017,-0.837219,0.447021,286.03707,-690.554573,1427.89836, -0.551707,-0.826255,-0.113678,-470.848959,-704.675266,796.15315, -0.684138,-0.684138,-0.252806,-590.997993,-590.997993,738.078199, -0.532672,-0.798598,-0.280182,-464.344144,-694.940121,738.078199, -0.684138,-0.684138,-0.252806,-590.997993,-590.997993,738.078199, -0.551707,-0.826255,-0.113678,-470.848959,-704.675266,796.15315, -0.704523,-0.704523,-0.085417,-599.277053,-599.277053,796.15315, 0.162803,-0.986659,0,164.047988,-824.724927,2549.07468, 0.032813,-0.999462,0,0,-840.882244,2455.64332, 0.227168,-0.973856,0,164.047988,-824.724927,2455.64332, 0.032813,-0.999462,0,0,-840.882244,2455.64332, 0.162803,-0.986659,0,164.047988,-824.724927,2549.07468, -0.032813,-0.999462,0,0,-840.882244,2549.07468, 0,0,-1,0,-840.882244,2549.07468, 0,0,-1,164.047988,-824.724927,2549.07468, 0,0,-1,126.90366,-828.383324,2549.07468, 0,0,1,0,-840.882244,2549.07468, 0,0,1,126.90366,-828.383324,2549.07468, 0,0,1,42.432775,-836.70298,2549.07468, 0.683524,-0.729928,0,594.593537,-594.593537,2549.07468, 0.582554,-0.812792,0,467.169144,-699.168033,2455.64332, 0.729928,-0.683524,0,594.593537,-594.593537,2455.64332, 0.582554,-0.812792,0,467.169144,-699.168033,2455.64332, 0.683524,-0.729928,0,594.593537,-594.593537,2549.07468, 0.527988,-0.849252,0,467.169144,-699.168033,2549.07468, 0,0,1,467.169144,-699.168033,2549.07468, 0,0,1,594.593537,-594.593537,2549.07468, 0,0,1,578.083233,-608.143192,2549.07468, 0,0,-1,467.169144,-699.168033,2549.07468, 0,0,-1,578.083233,-608.143192,2549.07468, 0,0,-1,512.438727,-662.016247,2549.07468, -0.882512,-0.08692,-0.462187,-814.429823,0,682.822311, -0.796215,-0.15672,-0.584364,-768.954752,-152.95461,631.979457, -0.881651,-0.17413,-0.438601,-798.780783,-158.887376,682.822311, -0.796215,-0.15672,-0.584364,-768.954752,-152.95461,631.979457, -0.882512,-0.08692,-0.462187,-814.429823,0,682.822311, -0.792149,-0.07802,-0.60532,-784.019466,0,631.979457, 0.366496,-0.808673,0.460139,381.734129,-921.587711,2361.464898, 0.208122,-0.927269,0.31122,203.671281,-1023.924672,2258.006804, 0.393751,-0.867338,0.304443,399.515588,-964.515951,2258.006804, 0.208122,-0.927269,0.31122,203.671281,-1023.924672,2258.006804, 0.366496,-0.808673,0.460139,381.734129,-921.587711,2361.464898, 0.169277,-0.85787,0.485186,194.606371,-978.352295,2361.464898, 0.292484,-0.777333,0.556961,357.552241,-863.20747,2455.64332, 0.169277,-0.85787,0.485186,194.606371,-978.352295,2361.464898, 0.366496,-0.808673,0.460139,381.734129,-921.587711,2361.464898, 0.169277,-0.85787,0.485186,194.606371,-978.352295,2361.464898, 0.292484,-0.777333,0.556961,357.552241,-863.20747,2455.64332, 0.135214,-0.819458,0.556961,182.278552,-916.376162,2455.64332, 0,0,-1,182.278552,-916.376162,2455.64332, 0,0,-1,357.552241,-863.20747,2455.64332, 0,0,-1,323.520353,-873.53093,2455.64332, 0,0,-1,182.278552,-916.376162,2455.64332, 0,0,-1,323.520353,-873.53093,2455.64332, 0,0,-1,233.2619,-900.910533,2455.64332, 0.881651,-0.17413,-0.438601,798.780783,-158.887376,682.822311, 0.947451,-0.093316,-0.305988,835.797377,0,738.078199, 0.941653,-0.186514,-0.280182,819.737765,-163.055979,738.078199, 0.947451,-0.093316,-0.305988,835.797377,0,738.078199, 0.881651,-0.17413,-0.438601,798.780783,-158.887376,682.822311, 0.882512,-0.08692,-0.462187,814.429823,0,682.822311, -0.057894,0.301631,-0.951665,-723.842933,-790.8427,2109.126834, -0.223394,0.469138,-0.854403,-768.60281,-861.729009,2086.282702, 0.032027,0.211366,-0.976882,-783.644995,-846.504457,2095.122795, -0.223394,0.469138,-0.854403,-768.60281,-861.729009,2086.282702, -0.057894,0.301631,-0.951665,-723.842933,-790.8427,2109.126834, -0.298975,0.546381,-0.782357,-703.270205,-808.916878,2098.19893, -0.925561,-0.183175,0.331336,-1023.924672,-203.671281,2258.006804, -0.976104,-0.096138,0.19488,-1072.403033,0,2148.211628, -0.966926,-0.191862,0.168059,-1051.797109,-209.215453,2148.211628, -0.976104,-0.096138,0.19488,-1072.403033,0,2148.211628, -0.925561,-0.183175,0.331336,-1023.924672,-203.671281,2258.006804, -0.929871,-0.091584,0.356303,-1043.984543,0,2258.006804, 0.176337,-0.98433,0,279.79211,-1038.255787,2035.202177, 0.167148,-0.984089,-0.060252,210.691412,-1059.217255,2011.592523, 0.146586,-0.98666,-0.07081,287.457755,-1035.930439,2011.592523, 0.167148,-0.984089,-0.060252,210.691412,-1059.217255,2011.592523, 0.176337,-0.98433,0,279.79211,-1038.255787,2035.202177, 0.168583,-0.985419,0.023006,210.691412,-1059.217255,2058.811877, 0.168583,-0.985419,0.023006,210.691412,-1059.217255,2058.811877, 0.176337,-0.98433,0,279.79211,-1038.255787,2035.202177, 0.117205,-0.990162,0.07644,287.45777,-1035.930435,2058.811877, 0,-0.582554,0.812792,806.222013,-670.885845,1850.699619, 0,-0.707107,0.707107,180.675225,-637.259985,1878.295649, 0,-0.527988,0.849252,180.675225,-670.885845,1850.699619, 0,-0.707107,0.707107,180.675225,-637.259985,1878.295649, 0,-0.582554,0.812792,806.222013,-670.885845,1850.699619, 0,-0.707107,0.707107,843.013698,-637.259985,1878.295649, 0,-0.527988,-0.849252,806.222028,-670.885845,2219.704735, 0,-0.412792,-0.910825,180.675225,-709.249312,2240.210435, 0,-0.582554,-0.812792,180.675225,-670.885845,2219.704735, 0,-0.412792,-0.910825,180.675225,-709.249312,2240.210435, 0,-0.527988,-0.849252,806.222028,-670.885845,2219.704735, 0,-0.336778,-0.941584,767.904956,-709.249312,2240.210435, 0,-0.336778,-0.941584,767.904956,-709.249312,2240.210435, 0,-0.227168,-0.973856,180.675225,-750.8761,2252.837783, 0,-0.412792,-0.910825,180.675225,-709.249312,2240.210435, 0,-0.227168,-0.973856,180.675225,-750.8761,2252.837783, 0,-0.336778,-0.941584,767.904956,-709.249312,2240.210435, 0,-0.19509,-0.980785,724.871896,-750.8761,2252.837783, 0,-0.19509,-0.980785,724.871896,-750.8761,2252.837783, 0,-0.336778,-0.941584,767.904956,-709.249312,2240.210435, 0,-0.290285,-0.95694,739.77113,-739.77113,2249.469127, -0.360223,-0.872041,-0.331336,-399.515588,-964.515951,1812.397596, -0.479152,-0.718908,-0.503571,-554.192058,-829.407027,1708.939502, -0.329694,-0.798573,-0.503571,-381.734129,-921.587711,1708.939502, -0.479152,-0.718908,-0.503571,-554.192058,-829.407027,1708.939502, -0.360223,-0.872041,-0.331336,-399.515588,-964.515951,1812.397596, -0.523429,-0.785009,-0.331336,-580.006736,-868.041423,1812.397596, 0.376942,-0.89216,0.24893,-644.282481,-861.55593,2059.381644, 0.314449,-0.823891,0.471514,-740.177565,-890.06034,2085.821102, 0.392379,-0.910791,0.128444,-731.284145,-899.775643,2054.145111, 0.314449,-0.823891,0.471514,-740.177565,-890.06034,2085.821102, 0.376942,-0.89216,0.24893,-644.282481,-861.55593,2059.381644, 0.267392,-0.774255,0.573613,-655.637458,-847.372595,2104.031681, 0.702746,-0.7023,-0.113678,599.277053,-599.277053,796.15315, 0.811513,-0.581637,0.056077,706.098253,-471.799769,855.371869, 0.69246,-0.720397,0.039075,600.487204,-600.487204,855.371869, 0.811513,-0.581637,0.056077,706.098253,-471.799769,855.371869, 0.702746,-0.7023,-0.113678,599.277053,-599.277053,796.15315, 0.826255,-0.551707,-0.113678,704.675266,-470.848959,796.15315, 0.472298,-0.759676,0.447021,389.30762,-582.640028,1241.03564, 0.369253,-0.814754,0.447021,303.914386,-733.714234,1054.17292, 0.521108,-0.727062,0.447021,441.215303,-660.325365,1054.17292, 0.369253,-0.814754,0.447021,303.914386,-733.714234,1054.17292, 0.472298,-0.759676,0.447021,389.30762,-582.640028,1241.03564, 0.315017,-0.837219,0.447021,268.159753,-647.394912,1241.03564, 0.819458,-0.135214,-0.556961,916.376162,-182.278552,1614.76108, 0.850126,-0.08373,-0.51988,997.51935,0,1708.939502, 0.843385,-0.187656,-0.503476,978.352295,-194.606371,1708.939502, 0.850126,-0.08373,-0.51988,997.51935,0,1708.939502, 0.819458,-0.135214,-0.556961,916.376162,-182.278552,1614.76108, 0.827636,-0.081515,-0.555314,925.063958,-94.069878,1614.76108, 0.850126,-0.08373,-0.51988,997.51935,0,1708.939502, 0.827636,-0.081515,-0.555314,925.063958,-94.069878,1614.76108, 0.827636,-0.081515,-0.555314,934.329033,0,1614.76108, -0.722676,-0.676733,0.140615,-594.593537,-594.593537,914.026067, -0.811513,-0.581637,0.056077,-706.098253,-471.799769,855.371869, -0.691243,-0.718915,0.073102,-600.487204,-600.487204,855.371869, -0.811513,-0.581637,0.056077,-706.098253,-471.799769,855.371869, -0.722676,-0.676733,0.140615,-594.593537,-594.593537,914.026067, -0.840814,-0.522742,0.140615,-699.168033,-467.169144,914.026067, 0.79057,-0.348586,-0.503476,921.587711,-381.734129,1708.939502, 0.925561,-0.183175,-0.331336,1023.924672,-203.671281,1812.397596, 0.872041,-0.360223,-0.331336,964.515951,-399.515588,1812.397596, 0.925561,-0.183175,-0.331336,1023.924672,-203.671281,1812.397596, 0.79057,-0.348586,-0.503476,921.587711,-381.734129,1708.939502, 0.843385,-0.187656,-0.503476,978.352295,-194.606371,1708.939502, 0.706214,-0.448152,-0.548107,-781.183382,-739.911027,2076.744949, 0.548529,-0.297921,-0.781255,-815.31953,-815.188756,2086.221945, 0.706214,-0.448152,-0.548107,-827.129718,-803.865138,2069.836076, 0.548529,-0.297921,-0.781255,-815.31953,-815.188756,2086.221945, 0.706214,-0.448152,-0.548107,-781.183382,-739.911027,2076.744949, 0.471095,-0.222728,-0.8535,-766.822004,-754.694855,2097.204109, 0.212519,0.031556,-0.976647,-746.579505,-772.239793,2108.608099, 0.032027,0.211366,-0.976882,-783.644995,-846.504457,2095.122795, 0.324878,-0.080164,-0.942352,-800.049726,-830.161694,2095.10146, 0.032027,0.211366,-0.976882,-783.644995,-846.504457,2095.122795, 0.212519,0.031556,-0.976647,-746.579505,-772.239793,2108.608099, -0.057894,0.301631,-0.951665,-723.842933,-790.8427,2109.126834, -0.298975,0.546381,-0.782357,-703.270205,-808.916878,2098.19893, -0.464702,0.719023,-0.516777,-757.213206,-873.517548,2069.927006, -0.223394,0.469138,-0.854403,-768.60281,-861.729009,2086.282702, -0.464702,0.719023,-0.516777,-757.213206,-873.517548,2069.927006, -0.298975,0.546381,-0.782357,-703.270205,-808.916878,2098.19893, -0.450105,0.703799,-0.549611,-688.216174,-823.53445,2077.427173, 0.471095,-0.222728,-0.8535,-766.822004,-754.694855,2097.204109, 0.324878,-0.080164,-0.942352,-800.049726,-830.161694,2095.10146, 0.548529,-0.297921,-0.781255,-815.31953,-815.188756,2086.221945, 0.324878,-0.080164,-0.942352,-800.049726,-830.161694,2095.10146, 0.471095,-0.222728,-0.8535,-766.822004,-754.694855,2097.204109, 0.387184,-0.145107,-0.910512,-761.149822,-761.149822,2100.644855, 0.324878,-0.080164,-0.942352,-800.049726,-830.161694,2095.10146, 0.387184,-0.145107,-0.910512,-761.149822,-761.149822,2100.644855, 0.212519,0.031556,-0.976647,-746.579505,-772.239793,2108.608099, 0.349001,-0.053498,0.935594,-801.544846,-831.814429,1978.709589, 0.49294,-0.19858,0.847098,-766.912924,-754.581509,1973.179733, 0.568521,-0.275822,0.775053,-816.587031,-816.589878,1987.549682, 0.49294,-0.19858,0.847098,-766.912924,-754.581509,1973.179733, 0.349001,-0.053498,0.935594,-801.544846,-831.814429,1978.709589, 0.410493,-0.119341,0.904021,-761.145932,-761.145932,1969.694508, 0.410493,-0.119341,0.904021,-761.145932,-761.145932,1969.694508, 0.349001,-0.053498,0.935594,-801.544846,-831.814429,1978.709589, 0.237519,0.059192,0.969578,-746.546206,-772.245717,1961.599842, -0.183175,-0.925561,-0.331336,-203.671281,-1023.924672,1812.397596, -0.329694,-0.798573,-0.503571,-381.734129,-921.587711,1708.939502, -0.167565,-0.847548,-0.503571,-194.606371,-978.352295,1708.939502, -0.329694,-0.798573,-0.503571,-381.734129,-921.587711,1708.939502, -0.183175,-0.925561,-0.331336,-203.671281,-1023.924672,1812.397596, -0.360223,-0.872041,-0.331336,-399.515588,-964.515951,1812.397596, 0.727062,-0.521108,0.447021,699.168033,-467.169144,1241.03564, 0.632456,-0.632456,0.447214,528.527588,-528.527588,1427.89836, 0.632456,-0.632456,0.447214,594.593537,-594.593537,1241.03564, 0.632456,-0.632456,0.447214,528.527588,-528.527588,1427.89836, 0.727062,-0.521108,0.447021,699.168033,-467.169144,1241.03564, 0.759676,-0.472298,0.447021,621.482696,-415.261462,1427.89836, 0.727062,-0.521108,0.447021,738.010701,-493.122985,1427.89836, 0.632456,-0.632456,0.447214,561.560563,-561.560563,1614.76108, 0.632456,-0.632456,0.447214,627.626511,-627.626511,1427.89836, 0.632456,-0.632456,0.447214,561.560563,-561.560563,1614.76108, 0.727062,-0.521108,0.447021,738.010701,-493.122985,1427.89836, 0.759676,-0.472298,0.447021,660.325365,-441.215303,1614.76108, 0.606233,-0.567693,-0.556961,660.670395,-660.670395,1614.76108, 0.707373,-0.49612,-0.503476,829.407027,-554.192058,1708.939502, 0.606593,-0.621557,-0.495693,705.352697,-705.352697,1708.939502, 0.707373,-0.49612,-0.503476,829.407027,-554.192058,1708.939502, 0.606233,-0.567693,-0.556961,660.670395,-660.670395,1614.76108, 0.642867,-0.527587,-0.555314,705.689443,-605.814526,1614.76108, 0.707373,-0.49612,-0.503476,829.407027,-554.192058,1708.939502, 0.642867,-0.527587,-0.555314,705.689443,-605.814526,1614.76108, 0.642867,-0.527587,-0.555314,765.568628,-532.851527,1614.76108, 0.707373,-0.49612,-0.503476,829.407027,-554.192058,1708.939502, 0.642867,-0.527587,-0.555314,765.568628,-532.851527,1614.76108, 0.705336,-0.438515,-0.556961,776.866198,-519.085398,1614.76108, 0.606593,-0.621557,-0.495693,705.352697,-705.352697,1708.939502, 0.769936,-0.566074,-0.294549,868.041423,-580.006736,1812.397596, 0.647345,-0.690701,-0.322298,738.20855,-738.20855,1812.397596, 0.769936,-0.566074,-0.294549,868.041423,-580.006736,1812.397596, 0.606593,-0.621557,-0.495693,705.352697,-705.352697,1708.939502, 0.707373,-0.49612,-0.503476,829.407027,-554.192058,1708.939502, 0.916164,-0.400805,0,776.873894,-321.791703,2455.64332, 0.95694,-0.290285,-0,798.491403,-250.528327,2549.07468, 0.92388,-0.382683,0,776.873894,-321.791703,2549.07468, 0.95694,-0.290285,-0,798.491403,-250.528327,2549.07468, 0.916164,-0.400805,0,776.873894,-321.791703,2455.64332, 0.976753,-0.214369,-0,824.724927,-164.047988,2455.64332, 0.95694,-0.290285,-0,798.491403,-250.528327,2549.07468, 0.976753,-0.214369,-0,824.724927,-164.047988,2455.64332, 0.95694,-0.290285,-0,823.172321,-169.166243,2549.07468, 0.95694,-0.290285,-0,823.172321,-169.166243,2549.07468, 0.976753,-0.214369,-0,824.724927,-164.047988,2455.64332, 0.980785,-0.19509,0,824.724927,-164.047988,2549.07468, 0,-0.19509,-0.980785,724.871896,-750.8761,2252.837783, 0,-0.032813,-0.999462,180.675225,-794.166513,2257.101517, 0,-0.227168,-0.973856,180.675225,-750.8761,2252.837783, 0,-0.032813,-0.999462,180.675225,-794.166513,2257.101517, 0,-0.19509,-0.980785,724.871896,-750.8761,2252.837783, -0,0.032813,-0.999462,670.391152,-794.166513,2257.101517, 0,-0.881921,-0.471397,892.684338,-596.472605,2133.803565, 0,-0.92388,-0.382683,180.675225,-589.158255,2120.119378, 0,-0.92388,-0.382683,897.900698,-589.158255,2120.119378, 0,-0.92388,-0.382683,180.675225,-589.158255,2120.119378, 0,-0.881921,-0.471397,892.684338,-596.472605,2133.803565, 0,-0.84225,-0.539087,180.675225,-609.663955,2158.482845, 0,-0.84225,-0.539087,180.675225,-609.663955,2158.482845, 0,-0.881921,-0.471397,892.684338,-596.472605,2133.803565, 0,-0.881921,-0.471397,884.794335,-604.173876,2148.211628, 0,-0.84225,-0.539087,180.675225,-609.663955,2158.482845, 0,-0.881921,-0.471397,884.794335,-604.173876,2148.211628, 0,-0.83147,-0.55557,876.866129,-609.663955,2158.482845, 0,0.352162,0.935939,653.750225,-879.083714,1830.193918, 0,0.227168,0.973856,180.675225,-837.456927,1817.56657, 0,0.412792,0.910825,180.675225,-879.083714,1830.193918, 0,0.227168,0.973856,180.675225,-837.456927,1817.56657, 0,0.352162,0.935939,653.750225,-879.083714,1830.193918, 0,0.162803,0.986659,653.750225,-837.456927,1817.56657, 0.636324,-0.634602,-0.438601,575.888851,-575.888851,682.822311, 0.798598,-0.532672,-0.280182,694.940121,-464.344144,738.078199, 0.679334,-0.678235,-0.280182,590.997993,-590.997993,738.078199, 0.798598,-0.532672,-0.280182,694.940121,-464.344144,738.078199, 0.636324,-0.634602,-0.438601,575.888851,-575.888851,682.822311, 0.747902,-0.498268,-0.438601,677.173649,-452.472967,682.822311, 0.192603,-0.882117,-0.429853,406.150723,-980.534583,1879.384872, 0.184965,-0.925205,-0.331336,203.671281,-1023.924672,1812.397596, 0.388566,-0.856387,-0.340026,399.515588,-964.515951,1812.397596, 0.184965,-0.925205,-0.331336,203.671281,-1023.924672,1812.397596, 0.192603,-0.882117,-0.429853,406.150723,-980.534583,1879.384872, 0.215316,-0.958117,-0.188816,209.215453,-1051.797109,1922.192772, 0.215316,-0.958117,-0.188816,209.215453,-1051.797109,1922.192772, 0.192603,-0.882117,-0.429853,406.150723,-980.534583,1879.384872, 0.115001,-0.89802,-0.424659,369.41032,-997.119327,1899.593442, 0.215316,-0.958117,-0.188816,209.215453,-1051.797109,1922.192772, 0.115001,-0.89802,-0.424659,369.41032,-997.119327,1899.593442, 0.146136,-0.933668,-0.326969,349.642862,-1009.198921,1922.192772, -0.79057,-0.348586,0.503476,-921.587711,-381.734129,2361.464898, -0.925561,-0.183175,0.331336,-1023.924672,-203.671281,2258.006804, -0.872041,-0.360223,0.331336,-964.515951,-399.515588,2258.006804, -0.925561,-0.183175,0.331336,-1023.924672,-203.671281,2258.006804, -0.79057,-0.348586,0.503476,-921.587711,-381.734129,2361.464898, -0.843385,-0.187656,0.503476,-978.352295,-194.606371,2361.464898, 0.979923,-0.19486,0.0422,1059.217255,-210.691412,2058.811877, 0.901839,-0.40872,0.140121,990.771213,-410.390874,2148.211628, 0.923514,-0.382532,0.028131,997.760837,-413.286071,2058.811877, 0.901839,-0.40872,0.140121,990.771213,-410.390874,2148.211628, 0.979923,-0.19486,0.0422,1059.217255,-210.691412,2058.811877, 0.966926,-0.191862,0.168059,1051.797109,-209.215453,2148.211628, -0.785009,-0.523429,0.331336,-868.041423,-580.006736,2258.006804, -0.910916,-0.376813,0.168059,-990.771213,-410.390874,2148.211628, -0.804774,-0.576808,0.140116,-891.670534,-595.795203,2148.211628, -0.910916,-0.376813,0.168059,-990.771213,-410.390874,2148.211628, -0.785009,-0.523429,0.331336,-868.041423,-580.006736,2258.006804, -0.872041,-0.360223,0.331336,-964.515951,-399.515588,2258.006804, -0.707373,-0.49612,0.503476,-829.407027,-554.192058,2361.464898, -0.872041,-0.360223,0.331336,-964.515951,-399.515588,2258.006804, -0.785009,-0.523429,0.331336,-868.041423,-580.006736,2258.006804, -0.872041,-0.360223,0.331336,-964.515951,-399.515588,2258.006804, -0.707373,-0.49612,0.503476,-829.407027,-554.192058,2361.464898, -0.79057,-0.348586,0.503476,-921.587711,-381.734129,2361.464898, -0.705336,-0.438515,0.556961,-776.866198,-519.085398,2455.64332, -0.79057,-0.348586,0.503476,-921.587711,-381.734129,2361.464898, -0.707373,-0.49612,0.503476,-829.407027,-554.192058,2361.464898, -0.79057,-0.348586,0.503476,-921.587711,-381.734129,2361.464898, -0.705336,-0.438515,0.556961,-776.866198,-519.085398,2455.64332, -0.733442,-0.392033,0.555314,-813.095616,-451.304926,2455.64332, -0.79057,-0.348586,0.503476,-921.587711,-381.734129,2361.464898, -0.733442,-0.392033,0.555314,-813.095616,-451.304926,2455.64332, -0.733442,-0.392033,0.555314,-857.607798,-368.02849,2455.64332, -0.79057,-0.348586,0.503476,-921.587711,-381.734129,2361.464898, -0.733442,-0.392033,0.555314,-857.607798,-368.02849,2455.64332, -0.777333,-0.292484,0.556961,-863.20747,-357.552241,2455.64332, -0.436098,0.719283,0.540788,-758.060123,-874.453748,2003.996308, -0.505482,0.778826,0.371374,-683.32915,-829.573232,2011.592523, -0.436098,0.719283,0.540788,-687.957453,-823.760435,1993.102587, -0.505482,0.778826,0.371374,-683.32915,-829.573232,2011.592523, -0.436098,0.719283,0.540788,-758.060123,-874.453748,2003.996308, -0.544468,0.817693,0.186902,-751.507545,-880.404128,2025.39393, -0.505482,0.778826,0.371374,-683.32915,-829.573232,2011.592523, -0.544468,0.817693,0.186902,-751.507545,-880.404128,2025.39393, -0.544468,0.817693,0.186902,-680.414811,-831.964968,2020.575089, 0.057027,0.239002,0.969343,-785.140115,-848.157193,1978.730924, 0.237519,0.059192,0.969578,-746.546206,-772.245717,1961.599842, 0.349001,-0.053498,0.935594,-801.544846,-831.814429,1978.709589, 0.237519,0.059192,0.969578,-746.546206,-772.245717,1961.599842, 0.057027,0.239002,0.969343,-785.140115,-848.157193,1978.730924, -0.033544,0.328548,0.943892,-723.636295,-790.983771,1961.015863, -0.464702,0.719023,-0.516777,-757.213206,-873.517548,2069.927006, -0.549387,0.812256,-0.195995,-680.521947,-831.877044,2050.149043, -0.549387,0.812256,-0.195995,-751.210147,-880.075378,2048.545713, -0.549387,0.812256,-0.195995,-680.521947,-831.877044,2050.149043, -0.464702,0.719023,-0.516777,-757.213206,-873.517548,2069.927006, -0.515137,0.768153,-0.38023,-683.397325,-829.517282,2058.811877, -0.515137,0.768153,-0.38023,-683.397325,-829.517282,2058.811877, -0.464702,0.719023,-0.516777,-757.213206,-873.517548,2069.927006, -0.450105,0.703799,-0.549611,-688.216174,-823.53445,2077.427173, 0.568521,-0.275822,0.775053,-816.587031,-816.589878,1987.549682, 0.720221,-0.432668,0.542292,-781.308062,-739.778792,1993.802906, 0.720221,-0.432668,0.542292,-827.976635,-804.801338,2003.905378, 0.720221,-0.432668,0.542292,-781.308062,-739.778792,1993.802906, 0.568521,-0.275822,0.775053,-816.587031,-816.589878,1987.549682, 0.49294,-0.19858,0.847098,-766.912924,-754.581509,1973.179733, -0.532672,-0.798598,-0.280182,-464.344144,-694.940121,738.078199, -0.644016,-0.644016,-0.412901,-575.888851,-575.888851,682.822311, -0.498268,-0.747902,-0.438601,-452.472967,-677.173649,682.822311, -0.644016,-0.644016,-0.412901,-575.888851,-575.888851,682.822311, -0.532672,-0.798598,-0.280182,-464.344144,-694.940121,738.078199, -0.684138,-0.684138,-0.252806,-590.997993,-590.997993,738.078199, 0.468978,-0.782653,-0.409285,577.578281,-864.406983,1802.66502, 0.331547,-0.797805,-0.503571,381.734129,-921.587711,1708.939502, 0.501364,-0.716458,-0.4851,554.192058,-829.407027,1708.939502, 0.331547,-0.797805,-0.503571,381.734129,-921.587711,1708.939502, 0.468978,-0.782653,-0.409285,577.578281,-864.406983,1802.66502, 0.388566,-0.856387,-0.340026,399.515588,-964.515951,1812.397596, 0.388566,-0.856387,-0.340026,399.515588,-964.515951,1812.397596, 0.468978,-0.782653,-0.409285,577.578281,-864.406983,1802.66502, 0.430365,-0.805157,-0.408054,540.896876,-887.575434,1809.693092, 0.388566,-0.856387,-0.340026,399.515588,-964.515951,1812.397596, 0.430365,-0.805157,-0.408054,540.896876,-887.575434,1809.693092, 0.445004,-0.832543,-0.329915,533.995007,-892.635204,1812.397596, -0.770284,-0.632155,-0.083921,-781.354664,-731.718944,1933.517963, -0.804773,-0.576807,-0.140121,-891.670534,-595.795203,1922.192772, -0.75819,-0.62223,-0.19488,-761.987077,-753.814953,1922.192772, -0.804773,-0.576807,-0.140121,-891.670534,-595.795203,1922.192772, -0.770284,-0.632155,-0.083921,-781.354664,-731.718944,1933.517963, -0.770284,-0.632155,-0.083921,-804.883918,-707.527533,1967.257586, -0.804773,-0.576807,-0.140121,-891.670534,-595.795203,1922.192772, -0.770284,-0.632155,-0.083921,-804.883918,-707.527533,1967.257586, -0.772328,-0.633835,-0.041994,-818.480102,-696.846173,2011.592491, -0.804773,-0.576807,-0.140121,-891.670534,-595.795203,1922.192772, -0.772328,-0.633835,-0.041994,-818.480102,-696.846173,2011.592491, -0.841785,-0.538757,-0.033753,-897.96103,-599.998378,2011.592523, -0.966926,-0.191862,0.168059,-1051.797109,-209.215453,2148.211628, -0.994307,-0.097931,0.041998,-1079.968548,0,2058.811877, -0.972989,-0.226965,0.042178,-1059.217255,-210.691412,2058.811877, -0.994307,-0.097931,0.041998,-1079.968548,0,2058.811877, -0.966926,-0.191862,0.168059,-1051.797109,-209.215453,2148.211628, -0.976104,-0.096138,0.19488,-1072.403033,0,2148.211628, 0,0,1,-832.543812,-84.66152,2549.07468, 0,0,1,-747.450884,0,2549.07468, 0,0,1,-840.882244,0,2549.07468, 0,0,1,-747.450884,0,2549.07468, 0,0,1,-832.543812,-84.66152,2549.07468, 0,0,1,-824.724927,-164.047988,2549.07468, 0,0,1,-747.450884,0,2549.07468, 0,0,1,-824.724927,-164.047988,2549.07468, 0,0,1,-823.172319,-169.16625,2549.07468, 0,0,1,-747.450884,0,2549.07468, 0,0,1,-823.172319,-169.16625,2549.07468, 0,0,1,-798.491399,-250.528339,2549.07468, 0,0,1,-747.450884,0,2549.07468, 0,0,1,-798.491399,-250.528339,2549.07468, 0,0,1,-776.873894,-321.791703,2549.07468, 0,0,1,-747.450884,0,2549.07468, 0,0,1,-776.873894,-321.791703,2549.07468, 0,0,1,-771.834238,-331.220236,2549.07468, 0,0,1,-747.450884,0,2549.07468, 0,0,1,-771.834238,-331.220236,2549.07468, 0,0,1,-731.773964,-406.167737,2549.07468, 0,0,1,-747.450884,0,2549.07468, 0,0,1,-731.773964,-406.167737,2549.07468, 0,0,1,-733.088824,-145.820434,2549.07468, 0,0,1,-733.088824,-145.820434,2549.07468, 0,0,1,-731.773964,-406.167737,2549.07468, 0,0,1,-690.554573,-286.03707,2549.07468, 0,0,1,-690.554573,-286.03707,2549.07468, 0,0,1,-731.773964,-406.167737,2549.07468, 0,0,1,-699.168033,-467.169144,2549.07468, 0,0,1,-690.554573,-286.03707,2549.07468, 0,0,1,-699.168033,-467.169144,2549.07468, 0,0,1,-689.000369,-479.558478,2549.07468, 0,0,1,-690.554573,-286.03707,2549.07468, 0,0,1,-689.000369,-479.558478,2549.07468, 0,0,1,-621.482696,-415.261462,2549.07468, 0,0,1,-621.482696,-415.261462,2549.07468, 0,0,1,-689.000369,-479.558478,2549.07468, 0,0,1,-635.110018,-545.224061,2549.07468, 0,0,1,-621.482696,-415.261462,2549.07468, 0,0,1,-635.110018,-545.224061,2549.07468, 0,0,1,-594.593537,-594.593537,2549.07468, 0,0,1,-621.482696,-415.261462,2549.07468, 0,0,1,-594.593537,-594.593537,2549.07468, 0,0,1,-528.527588,-528.527588,2549.07468, 0,0,1,-528.527588,-528.527588,2549.07468, 0,0,1,-594.593537,-594.593537,2549.07468, 0,0,1,-578.083211,-608.143211,2549.07468, 0,0,1,-528.527588,-528.527588,2549.07468, 0,0,1,-578.083211,-608.143211,2549.07468, 0,0,1,-512.438676,-662.016288,2549.07468, 0,0,1,-528.527588,-528.527588,2549.07468, 0,0,1,-512.438676,-662.016288,2549.07468, 0,0,1,-415.261462,-621.482696,2549.07468, 0,0,1,-415.261462,-621.482696,2549.07468, 0,0,1,-512.438676,-662.016288,2549.07468, 0,0,1,-467.169144,-699.168033,2549.07468, 0,0,1,-415.261462,-621.482696,2549.07468, 0,0,1,-467.169144,-699.168033,2549.07468, 0,0,1,-443.63534,-711.747113,2549.07468, 0,0,1,-415.261462,-621.482696,2549.07468, 0,0,1,-443.63534,-711.747113,2549.07468, 0,0,1,-368.760189,-751.768716,2549.07468, 0,0,1,-415.261462,-621.482696,2549.07468, 0,0,1,-368.760189,-751.768716,2549.07468, 0,0,1,-286.03707,-690.554573,2549.07468, 0,0,1,-286.03707,-690.554573,2549.07468, 0,0,1,-368.760189,-751.768716,2549.07468, 0,0,1,-321.791703,-776.873894,2549.07468, 0,0,1,-286.03707,-690.554573,2549.07468, 0,0,1,-321.791703,-776.873894,2549.07468, 0,0,1,-291.163467,-786.164868,2549.07468, 0,0,1,-286.03707,-690.554573,2549.07468, 0,0,1,-291.163467,-786.164868,2549.07468, 0,0,1,-209.932195,-810.806105,2549.07468, 0,0,1,-286.03707,-690.554573,2549.07468, 0,0,1,-209.932195,-810.806105,2549.07468, 0,0,1,-145.820434,-733.088824,2549.07468, 0,0,1,-145.820434,-733.088824,2549.07468, 0,0,1,-209.932195,-810.806105,2549.07468, 0,0,1,-164.047988,-824.724927,2549.07468, 0,0,1,-145.820434,-733.088824,2549.07468, 0,0,1,-164.047988,-824.724927,2549.07468, 0,0,1,-126.903621,-828.383328,2549.07468, 0,0,1,-145.820434,-733.088824,2549.07468, 0,0,1,-126.903621,-828.383328,2549.07468, 0,0,1,0,-747.450884,2549.07468, 0,0,1,0,-747.450884,2549.07468, 0,0,1,-126.903621,-828.383328,2549.07468, 0,0,1,-42.432781,-836.702979,2549.07468, 0,0,1,0,-747.450884,2549.07468, 0,0,1,-42.432781,-836.702979,2549.07468, 0,0,1,0,-840.882244,2549.07468, 0,0,1,0,-747.450884,2549.07468, 0,0,1,0,-840.882244,2549.07468, 0,0,1,42.432775,-836.70298,2549.07468, 0,0,1,0,-747.450884,2549.07468, 0,0,1,42.432775,-836.70298,2549.07468, 0,0,1,145.820434,-733.088824,2549.07468, 0,0,1,145.820434,-733.088824,2549.07468, 0,0,1,42.432775,-836.70298,2549.07468, 0,0,1,126.90366,-828.383324,2549.07468, 0,0,1,145.820434,-733.088824,2549.07468, 0,0,1,126.90366,-828.383324,2549.07468, 0,0,1,164.047988,-824.724927,2549.07468, 0,0,1,145.820434,-733.088824,2549.07468, 0,0,1,164.047988,-824.724927,2549.07468, 0,0,1,286.03707,-690.554573,2549.07468, 0,0,1,286.03707,-690.554573,2549.07468, 0,0,1,164.047988,-824.724927,2549.07468, 0,0,1,209.932273,-810.806081,2549.07468, 0,0,1,286.03707,-690.554573,2549.07468, 0,0,1,209.932273,-810.806081,2549.07468, 0,0,1,291.163503,-786.164857,2549.07468, 0,0,1,286.03707,-690.554573,2549.07468, 0,0,1,291.163503,-786.164857,2549.07468, 0,0,1,415.261462,-621.482696,2549.07468, 0,0,1,415.261462,-621.482696,2549.07468, 0,0,1,291.163503,-786.164857,2549.07468, 0,0,1,321.791703,-776.873894,2549.07468, 0,0,1,415.261462,-621.482696,2549.07468, 0,0,1,321.791703,-776.873894,2549.07468, 0,0,1,368.760184,-751.768718,2549.07468, 0,0,1,415.261462,-621.482696,2549.07468, 0,0,1,368.760184,-751.768718,2549.07468, 0,0,1,443.635404,-711.747079,2549.07468, 0,0,1,415.261462,-621.482696,2549.07468, 0,0,1,443.635404,-711.747079,2549.07468, 0,0,1,528.527588,-528.527588,2549.07468, 0,0,1,528.527588,-528.527588,2549.07468, 0,0,1,443.635404,-711.747079,2549.07468, 0,0,1,467.169144,-699.168033,2549.07468, 0,0,1,528.527588,-528.527588,2549.07468, 0,0,1,467.169144,-699.168033,2549.07468, 0,0,1,512.438727,-662.016247,2549.07468, 0,0,1,528.527588,-528.527588,2549.07468, 0,0,1,512.438727,-662.016247,2549.07468, 0,0,1,578.083233,-608.143192,2549.07468, 0,0,1,528.527588,-528.527588,2549.07468, 0,0,1,578.083233,-608.143192,2549.07468, 0,0,1,621.482696,-415.261462,2549.07468, 0,0,1,621.482696,-415.261462,2549.07468, 0,0,1,578.083233,-608.143192,2549.07468, 0,0,1,594.593537,-594.593537,2549.07468, 0,0,1,621.482696,-415.261462,2549.07468, 0,0,1,594.593537,-594.593537,2549.07468, 0,0,1,635.110016,-545.224064,2549.07468, 0,0,1,621.482696,-415.261462,2549.07468, 0,0,1,635.110016,-545.224064,2549.07468, 0,0,1,690.554573,-286.03707,2549.07468, 0,0,1,690.554573,-286.03707,2549.07468, 0,0,1,635.110016,-545.224064,2549.07468, 0,0,1,689.000383,-479.558461,2549.07468, 0,0,1,690.554573,-286.03707,2549.07468, 0,0,1,689.000383,-479.558461,2549.07468, 0,0,1,699.168033,-467.169144,2549.07468, 0,0,1,690.554573,-286.03707,2549.07468, 0,0,1,699.168033,-467.169144,2549.07468, 0,0,1,733.088824,-145.820434,2549.07468, 0,0,1,733.088824,-145.820434,2549.07468, 0,0,1,699.168033,-467.169144,2549.07468, 0,0,1,731.773963,-406.167739,2549.07468, 0,0,1,733.088824,-145.820434,2549.07468, 0,0,1,731.773963,-406.167739,2549.07468, 0,0,1,771.834246,-331.220222,2549.07468, 0,0,1,733.088824,-145.820434,2549.07468, 0,0,1,771.834246,-331.220222,2549.07468, 0,0,1,747.450884,0,2549.07468, 0,0,1,747.450884,0,2549.07468, 0,0,1,771.834246,-331.220222,2549.07468, 0,0,1,840.882244,0,2549.07468, 0,0,1,840.882244,0,2549.07468, 0,0,1,771.834246,-331.220222,2549.07468, 0,0,1,776.873894,-321.791703,2549.07468, 0,0,1,840.882244,0,2549.07468, 0,0,1,776.873894,-321.791703,2549.07468, 0,0,1,798.491403,-250.528327,2549.07468, 0,0,1,840.882244,0,2549.07468, 0,0,1,798.491403,-250.528327,2549.07468, 0,0,1,823.172321,-169.166243,2549.07468, 0,0,1,840.882244,0,2549.07468, 0,0,1,823.172321,-169.166243,2549.07468, 0,0,1,824.724927,-164.047988,2549.07468, 0,0,1,840.882244,0,2549.07468, 0,0,1,824.724927,-164.047988,2549.07468, 0,0,1,832.543812,-84.661515,2549.07468, 0.832671,-0.532692,-0.151323,891.670534,-595.795203,1922.192772, 0.828508,-0.553591,-0.084324,892.684335,-596.472603,1936.600792, 0.75819,-0.62223,-0.19488,884.794356,-604.173851,1922.192772, 0.832671,-0.532692,-0.151323,891.670534,-595.795203,1922.192772, 0.87881,-0.469734,-0.083921,897.900693,-589.158255,1950.284976, 0.828508,-0.553591,-0.084324,892.684335,-596.472603,1936.600792, 0.87881,-0.469734,-0.083921,897.900693,-589.158255,1950.284976, 0.832671,-0.532692,-0.151323,891.670534,-595.795203,1922.192772, 0.901839,-0.40872,-0.140121,990.771213,-410.390874,1922.192772, 0.87881,-0.469734,-0.083921,897.900693,-589.158255,1950.284976, 0.901839,-0.40872,-0.140121,990.771213,-410.390874,1922.192772, 0.87881,-0.469734,-0.083921,908.62526,-576.530907,1991.911763, 0.87881,-0.469734,-0.083921,908.62526,-576.530907,1991.911763, 0.901839,-0.40872,-0.140121,990.771213,-410.390874,1922.192772, 0.880538,-0.470657,-0.055991,911.540742,-574.592523,2011.592523, 0.880538,-0.470657,-0.055991,911.540742,-574.592523,2011.592523, 0.901839,-0.40872,-0.140121,990.771213,-410.390874,1922.192772, 0.91563,-0.400602,-0.033753,997.760837,-413.286071,2011.592523, 0.702746,-0.7023,-0.113678,599.277053,-599.277053,796.15315, 0.533964,-0.797735,-0.280182,464.344144,-694.940121,738.078199, 0.679334,-0.678235,-0.280182,590.997993,-590.997993,738.078199, 0.533964,-0.797735,-0.280182,464.344144,-694.940121,738.078199, 0.702746,-0.7023,-0.113678,599.277053,-599.277053,796.15315, 0.552231,-0.825905,-0.113678,470.848959,-704.675266,796.15315, 0,-0.849252,0.527988,180.675225,-720.365482,1985.889904, 0,-0.92388,0.382683,104.493588,-712.163205,2001.235298, 0,-0.812792,0.582554,104.493591,-720.36549,1985.889902, 0,-0.92388,0.382683,104.493588,-712.163205,2001.235298, 0,-0.849252,0.527988,180.675225,-720.365482,1985.889904, 0,-0.92388,0.382683,180.675225,-712.163201,2001.235293, -0.747902,-0.498268,-0.438601,-677.173649,-452.472967,682.822311, -0.586347,-0.571185,-0.574408,-554.385481,-554.385481,631.979457, -0.644016,-0.644016,-0.412901,-575.888851,-575.888851,682.822311, -0.586347,-0.571185,-0.574408,-554.385481,-554.385481,631.979457, -0.747902,-0.498268,-0.438601,-677.173649,-452.472967,682.822311, -0.692236,-0.442144,-0.570366,-651.888362,-435.577878,631.979457, -0.798598,-0.532672,-0.280182,-694.940121,-464.344144,738.078199, -0.644016,-0.644016,-0.412901,-575.888851,-575.888851,682.822311, -0.684138,-0.684138,-0.252806,-590.997993,-590.997993,738.078199, -0.644016,-0.644016,-0.412901,-575.888851,-575.888851,682.822311, -0.798598,-0.532672,-0.280182,-694.940121,-464.344144,738.078199, -0.747902,-0.498268,-0.438601,-677.173649,-452.472967,682.822311, 0.903939,-0,-0.427662,-43.046973,-1075.728791,2051.869445, 0.849252,-0,-0.527988,-38.888103,-1076.067465,2059.650143, 0.881921,-0,-0.471397,-39.336165,-1076.094273,2058.811877, 0.849252,-0,-0.527988,-38.888103,-1076.067465,2059.650143, 0.903939,-0,-0.427662,-43.046973,-1075.728791,2051.869445, 0.83147,-0,-0.55557,-38.888103,-975.735676,2059.650143, 0.83147,-0,-0.55557,-38.888103,-975.735676,2059.650143, 0.903939,-0,-0.427662,-43.046973,-1075.728791,2051.869445, 0.935939,0,-0.352162,-43.046973,-975.791819,2051.869445, -0.804774,-0.576808,0.140116,-891.670534,-595.795203,2148.211628, -0.770284,-0.632156,0.083915,-780.975409,-732.347203,2135.633781, -0.75819,-0.62223,0.194878,-759.379832,-756.991889,2148.211628, -0.770284,-0.632156,0.083915,-780.975409,-732.347203,2135.633781, -0.804774,-0.576808,0.140116,-891.670534,-595.795203,2148.211628, -0.770287,-0.632154,0.083906,-804.422958,-708.167768,2102.551876, -0.770287,-0.632154,0.083906,-804.422958,-708.167768,2102.551876, -0.804774,-0.576808,0.140116,-891.670534,-595.795203,2148.211628, -0.771796,-0.633401,0.055987,-818.273878,-697.096462,2058.801607, -0.771796,-0.633401,0.055987,-818.273878,-697.096462,2058.801607, -0.804774,-0.576808,0.140116,-891.670534,-595.795203,2148.211628, -0.819881,-0.571538,0.033755,-897.96103,-599.998378,2058.811877, -0.567399,-0.80612,-0.168011,-595.795203,-891.670534,1922.192772, -0.669886,-0.684903,-0.286639,-738.20855,-738.20855,1812.397596, -0.523429,-0.785009,-0.331336,-580.006736,-868.041423,1812.397596, -0.669886,-0.684903,-0.286639,-738.20855,-738.20855,1812.397596, -0.567399,-0.80612,-0.168011,-595.795203,-891.670534,1922.192772, -0.61434,-0.748575,-0.249443,-712.20051,-793.069744,1912.981477, -0.61434,-0.748575,-0.249443,-712.20051,-793.069744,1912.981477, -0.567399,-0.80612,-0.168011,-595.795203,-891.670534,1922.192772, -0.625455,-0.762119,-0.167272,-697.040319,-808.580815,1922.192772, -0.669886,-0.684903,-0.286639,-738.20855,-738.20855,1812.397596, -0.61434,-0.748575,-0.249443,-750.03201,-762.726244,1915.0942, -0.684548,-0.684548,-0.250574,-757.858868,-757.858868,1919.763614, -0.61434,-0.748575,-0.249443,-750.03201,-762.726244,1915.0942, -0.669886,-0.684903,-0.286639,-738.20855,-738.20855,1812.397596, -0.61434,-0.748575,-0.249443,-712.20051,-793.069744,1912.981477, -0.567399,-0.80612,-0.168011,-595.795203,-891.670534,1922.192772, -0.632155,-0.770284,-0.083921,-679.407718,-824.046894,1931.329012, -0.625455,-0.762119,-0.167272,-697.040319,-808.580815,1922.192772, -0.632155,-0.770284,-0.083921,-679.407718,-824.046894,1931.329012, -0.567399,-0.80612,-0.168011,-595.795203,-891.670534,1922.192772, -0.575005,-0.816448,-0.052732,-599.998378,-897.96103,2011.592523, -0.632155,-0.770284,-0.083921,-679.407718,-824.046894,1931.329012, -0.575005,-0.816448,-0.052732,-599.998378,-897.96103,2011.592523, -0.632155,-0.770284,-0.083921,-654.791104,-848.015122,1965.894902, -0.632155,-0.770284,-0.083921,-654.791104,-848.015122,1965.894902, -0.575005,-0.816448,-0.052732,-599.998378,-897.96103,2011.592523, -0.632155,-0.770284,-0.083921,-643.970452,-861.831591,2011.202527, -0.632155,-0.770284,-0.083921,-643.970452,-861.831591,2011.202527, -0.575005,-0.816448,-0.052732,-599.998378,-897.96103,2011.592523, -0.634145,-0.772707,-0.027996,-644.00684,-861.844218,2011.592523, 0.700074,-0.700074,0.140689,594.593537,-594.593537,914.026067, 0.554566,-0.830246,0.056107,471.799769,-706.098253,855.371869, 0.69246,-0.720397,0.039075,600.487204,-600.487204,855.371869, 0.554566,-0.830246,0.056107,471.799769,-706.098253,855.371869, 0.700074,-0.700074,0.140689,594.593537,-594.593537,914.026067, 0.522742,-0.840814,0.140615,467.169144,-699.168033,914.026067, 0.349653,-0.487843,0.799845,467.169144,-699.168033,914.026067, 0.410255,-0.438107,0.799845,462.46164,-462.46164,1054.17292, 0.316902,-0.509726,0.799845,363.353779,-543.79736,1054.17292, 0.410255,-0.438107,0.799845,462.46164,-462.46164,1054.17292, 0.349653,-0.487843,0.799845,467.169144,-699.168033,914.026067, 0.438107,-0.410255,0.799845,594.593537,-594.593537,914.026067, 0.632456,-0.632456,0.447214,495.494614,-495.494614,1241.03564, 0.521108,-0.727062,0.447021,441.215303,-660.325365,1054.17292, 0.632456,-0.632456,0.447214,561.560563,-561.560563,1054.17292, 0.521108,-0.727062,0.447021,441.215303,-660.325365,1054.17292, 0.632456,-0.632456,0.447214,495.494614,-495.494614,1241.03564, 0.472298,-0.759676,0.447021,389.30762,-582.640028,1241.03564, 0.632456,-0.632456,0.447214,528.527588,-528.527588,1427.89836, 0.521108,-0.727062,0.447021,467.169144,-699.168033,1241.03564, 0.632456,-0.632456,0.447214,594.593537,-594.593537,1241.03564, 0.521108,-0.727062,0.447021,467.169144,-699.168033,1241.03564, 0.632456,-0.632456,0.447214,528.527588,-528.527588,1427.89836, 0.472298,-0.759676,0.447021,415.261462,-621.482696,1427.89836, -0.819458,-0.135214,0.556961,-916.376162,-182.278552,2455.64332, -0.850126,-0.08373,0.51988,-997.51935,0,2361.464898, -0.843385,-0.187656,0.503476,-978.352295,-194.606371,2361.464898, -0.850126,-0.08373,0.51988,-997.51935,0,2361.464898, -0.819458,-0.135214,0.556961,-916.376162,-182.278552,2455.64332, -0.827636,-0.081515,0.555314,-925.063958,-94.069883,2455.64332, -0.850126,-0.08373,0.51988,-997.51935,0,2361.464898, -0.827636,-0.081515,0.555314,-925.063958,-94.069883,2455.64332, -0.827636,-0.081515,0.555314,-934.329033,0,2455.64332, -0.644814,-0.619901,0.447144,-561.560563,-561.560563,1614.76108, -0.692067,-0.567965,0.445488,-670.393897,-575.514299,1427.89836, -0.632456,-0.632456,0.447214,-627.626511,-627.626511,1427.89836, -0.692067,-0.567965,0.445488,-670.393897,-575.514299,1427.89836, -0.644814,-0.619901,0.447144,-561.560563,-561.560563,1614.76108, -0.692067,-0.567965,0.445488,-727.278191,-506.200587,1427.89836, -0.692067,-0.567965,0.445488,-727.278191,-506.200587,1427.89836, -0.644814,-0.619901,0.447144,-561.560563,-561.560563,1614.76108, -0.743689,-0.496917,0.447214,-660.325365,-441.215303,1614.76108, -0.692067,-0.567965,0.445488,-727.278191,-506.200587,1427.89836, -0.743689,-0.496917,0.447214,-660.325365,-441.215303,1614.76108, -0.743689,-0.496917,0.447214,-738.010701,-493.122985,1427.89836, 0.850126,-0.08373,0.51988,997.51935,0,2361.464898, 0.819458,-0.135214,0.556961,916.376162,-182.278552,2455.64332, 0.843385,-0.187656,0.503476,978.352295,-194.606371,2361.464898, 0.819458,-0.135214,0.556961,916.376162,-182.278552,2455.64332, 0.850126,-0.08373,0.51988,997.51935,0,2361.464898, 0.827636,-0.081515,0.555314,925.063958,-94.069877,2455.64332, 0.827636,-0.081515,0.555314,925.063958,-94.069877,2455.64332, 0.850126,-0.08373,0.51988,997.51935,0,2361.464898, 0.827636,-0.081515,0.555314,934.329033,0,2455.64332, 0.091725,-0.593783,0.79938,-757.051053,-872.595836,2110.051763, -0.079281,-0.419958,0.904074,-713.051374,-793.031289,2155.442781, -0.164361,-0.334551,0.927934,-779.335772,-850.040945,2123.148196, -0.079281,-0.419958,0.904074,-713.051374,-793.031289,2155.442781, 0.091725,-0.593783,0.79938,-757.051053,-872.595836,2110.051763, 0.005714,-0.4979,0.867215,-700.811797,-805.485643,2148.211628, 0.005714,-0.4979,0.867215,-700.811797,-805.485643,2148.211628, 0.091725,-0.593783,0.79938,-757.051053,-872.595836,2110.051763, 0.113282,-0.616155,0.779436,-680.351355,-823.413171,2137.783955, -0.453201,-0.045611,0.890241,-803.639077,-825.829444,2123.116588, -0.617596,0.111962,0.778485,-780.975409,-732.347203,2135.633781, -0.617596,0.111962,0.778485,-826.261008,-803.647314,2109.961752, -0.617596,0.111962,0.778485,-780.975409,-732.347203,2135.633781, -0.453201,-0.045611,0.890241,-803.639077,-825.829444,2123.116588, -0.49905,0.004957,0.866559,-759.379832,-756.991889,2148.211628, -0.49905,0.004957,0.866559,-759.379832,-756.991889,2148.211628, -0.453201,-0.045611,0.890241,-803.639077,-825.829444,2123.116588, -0.49905,0.004957,0.866559,-758.175253,-758.175253,2148.912113, -0.49905,0.004957,0.866559,-758.175253,-758.175253,2148.912113, -0.453201,-0.045611,0.890241,-803.639077,-825.829444,2123.116588, -0.335138,-0.164419,0.927712,-750.226481,-763.163738,2153.518338, -0.554824,-0.830073,0.056107,-471.799769,-706.098253,855.371869, -0.704523,-0.704523,-0.085417,-599.277053,-599.277053,796.15315, -0.551707,-0.826255,-0.113678,-470.848959,-704.675266,796.15315, -0.704523,-0.704523,-0.085417,-599.277053,-599.277053,796.15315, -0.554824,-0.830073,0.056107,-471.799769,-706.098253,855.371869, -0.691243,-0.718915,0.073102,-600.487204,-600.487204,855.371869, 0.169277,-0.85787,0.485186,194.606371,-978.352295,2361.464898, -0.000913,-0.943512,0.331336,0,-1043.984543,2258.006804, 0.208122,-0.927269,0.31122,203.671281,-1023.924672,2258.006804, -0.000913,-0.943512,0.331336,0,-1043.984543,2258.006804, 0.169277,-0.85787,0.485186,194.606371,-978.352295,2361.464898, -0.001338,-0.87441,0.485186,0,-997.51935,2361.464898, -0.617596,0.111962,0.778485,-780.975409,-732.347203,2135.633781, -0.776009,0.265205,0.572256,-843.757583,-786.871584,2085.686391, -0.617596,0.111962,0.778485,-826.261008,-803.647314,2109.961752, -0.776009,0.265205,0.572256,-843.757583,-786.871584,2085.686391, -0.617596,0.111962,0.778485,-780.975409,-732.347203,2135.633781, -0.825684,0.31192,0.470055,-804.422958,-708.167768,2102.551876, -0.772331,-0.633831,-0.041995,-786.927339,-735.293322,2011.59251, -0.704588,-0.704588,-0.084324,-761.145932,-761.145932,1969.694508, -0.688905,-0.723623,-0.042187,-763.653083,-763.653083,2011.592523, -0.704588,-0.704588,-0.084324,-761.145932,-761.145932,1969.694508, -0.772331,-0.633831,-0.041995,-786.927339,-735.293322,2011.59251, -0.770284,-0.632155,-0.083921,-766.912924,-754.581509,1973.179733, -0.770284,-0.632155,-0.083921,-766.912924,-754.581509,1973.179733, -0.772331,-0.633831,-0.041995,-786.927339,-735.293322,2011.59251, -0.770284,-0.632155,-0.083921,-781.308062,-739.778792,1993.802906, -0.511487,-0.733787,0.447144,-441.215303,-660.325365,1614.76108, -0.567965,-0.692067,0.445488,-540.907488,-698.794973,1427.89836, -0.496917,-0.743689,0.447214,-493.122985,-738.010701,1427.89836, -0.567965,-0.692067,0.445488,-540.907488,-698.794973,1427.89836, -0.511487,-0.733787,0.447144,-441.215303,-660.325365,1614.76108, -0.567965,-0.692067,0.445488,-610.198918,-641.928967,1427.89836, -0.567965,-0.692067,0.445488,-610.198918,-641.928967,1427.89836, -0.644814,-0.619901,0.447144,-561.560563,-561.560563,1614.76108, -0.632456,-0.632456,0.447214,-627.626511,-627.626511,1427.89836, -0.644814,-0.619901,0.447144,-561.560563,-561.560563,1614.76108, -0.567965,-0.692067,0.445488,-610.198918,-641.928967,1427.89836, -0.511487,-0.733787,0.447144,-441.215303,-660.325365,1614.76108, -0.376813,-0.910916,-0.168059,-410.390874,-990.771213,1922.192772, -0.523429,-0.785009,-0.331336,-580.006736,-868.041423,1812.397596, -0.360223,-0.872041,-0.331336,-399.515588,-964.515951,1812.397596, -0.523429,-0.785009,-0.331336,-580.006736,-868.041423,1812.397596, -0.376813,-0.910916,-0.168059,-410.390874,-990.771213,1922.192772, -0.567399,-0.80612,-0.168011,-595.795203,-891.670534,1922.192772, -0.382289,-0.923079,-0.0422,-413.286071,-997.760837,2011.592523, -0.567399,-0.80612,-0.168011,-595.795203,-891.670534,1922.192772, -0.376813,-0.910916,-0.168059,-410.390874,-990.771213,1922.192772, -0.567399,-0.80612,-0.168011,-595.795203,-891.670534,1922.192772, -0.382289,-0.923079,-0.0422,-413.286071,-997.760837,2011.592523, -0.575005,-0.816448,-0.052732,-599.998378,-897.96103,2011.592523, -0.150758,-0.986668,-0.06131,-210.691412,-1059.217255,2011.592523, -0.376813,-0.910916,-0.168059,-410.390874,-990.771213,1922.192772, -0.168431,-0.974672,-0.147124,-209.215453,-1051.797109,1922.192772, -0.376813,-0.910916,-0.168059,-410.390874,-990.771213,1922.192772, -0.150758,-0.986668,-0.06131,-210.691412,-1059.217255,2011.592523, -0.382289,-0.923079,-0.0422,-413.286071,-997.760837,2011.592523, -0.171901,-0.857347,0.485186,-194.606371,-978.352295,2361.464898, -0.36191,-0.871342,0.331336,-399.515588,-964.515951,2258.006804, -0.184965,-0.925205,0.331336,-203.671281,-1023.924672,2258.006804, -0.36191,-0.871342,0.331336,-399.515588,-964.515951,2258.006804, -0.171901,-0.857347,0.485186,-194.606371,-978.352295,2361.464898, -0.335858,-0.807337,0.485186,-381.734129,-921.587711,2361.464898, -0.881921,-0.471397,-0,-731.773964,-406.167737,2549.07468, -0.820367,-0.571838,-0,-699.168033,-467.169144,2455.64332, -0.83147,-0.55557,-0,-699.168033,-467.169144,2549.07468, -0.820367,-0.571838,-0,-699.168033,-467.169144,2455.64332, -0.881921,-0.471397,-0,-731.773964,-406.167737,2549.07468, -0.916164,-0.400805,-0,-776.873894,-321.791703,2455.64332, -0.916164,-0.400805,-0,-776.873894,-321.791703,2455.64332, -0.881921,-0.471397,-0,-731.773964,-406.167737,2549.07468, -0.881921,-0.471397,-0,-771.834238,-331.220236,2549.07468, -0.916164,-0.400805,-0,-776.873894,-321.791703,2455.64332, -0.881921,-0.471397,-0,-771.834238,-331.220236,2549.07468, -0.92388,-0.382683,-0,-776.873894,-321.791703,2549.07468, -0.972323,-0.22681,0.056077,-832.899679,-165.674047,855.371869, -0.918011,-0.379912,-0.113678,-782.993204,-324.326404,796.15315, -0.909392,-0.412143,0.056077,-784.574342,-324.981333,855.371869, -0.918011,-0.379912,-0.113678,-782.993204,-324.326404,796.15315, -0.972323,-0.22681,0.056077,-832.899679,-165.674047,855.371869, -0.974489,-0.193517,-0.113678,-831.221151,-165.340167,796.15315, 0.147851,-0.963743,-0.222127,320.792433,-1019.675597,1941.793256, 0.215316,-0.958117,-0.188816,209.215453,-1051.797109,1922.192772, 0.146136,-0.933668,-0.326969,349.642862,-1009.198921,1922.192772, 0.215316,-0.958117,-0.188816,209.215453,-1051.797109,1922.192772, 0.147851,-0.963743,-0.222127,320.792433,-1019.675597,1941.793256, 0.167148,-0.984089,-0.060252,210.691412,-1059.217255,2011.592523, 0.167148,-0.984089,-0.060252,210.691412,-1059.217255,2011.592523, 0.147851,-0.963743,-0.222127,320.792433,-1019.675597,1941.793256, 0.117291,-0.984202,-0.132626,288.287532,-1033.56568,1987.582722, 0.167148,-0.984089,-0.060252,210.691412,-1059.217255,2011.592523, 0.117291,-0.984202,-0.132626,288.287532,-1033.56568,1987.582722, 0.146586,-0.98666,-0.07081,287.457755,-1035.930439,2011.592523, 0.62118,-0.639379,0.453133,705.352697,-705.352697,2361.464898, 0.598874,-0.72973,0.329915,653.750225,-807.521706,2258.006804, 0.665498,-0.684813,0.29689,738.20855,-738.20855,2258.006804, 0.598874,-0.72973,0.329915,653.750225,-807.521706,2258.006804, 0.62118,-0.639379,0.453133,705.352697,-705.352697,2361.464898, 0.579174,-0.705726,0.408054,653.750225,-795.278128,2279.181966, 0.579174,-0.705726,0.408054,600.307509,-841.785968,2274.601344, 0.51982,-0.710547,0.474247,554.192058,-829.407027,2361.464898, 0.481686,-0.774776,0.409514,577.578294,-864.407003,2267.739328, 0.51982,-0.710547,0.474247,554.192058,-829.407027,2361.464898, 0.579174,-0.705726,0.408054,600.307509,-841.785968,2274.601344, 0.579174,-0.705726,0.408054,653.750225,-795.278128,2279.181966, 0.51982,-0.710547,0.474247,554.192058,-829.407027,2361.464898, 0.579174,-0.705726,0.408054,653.750225,-795.278128,2279.181966, 0.62118,-0.639379,0.453133,705.352697,-705.352697,2361.464898, 0.720221,-0.432668,0.542292,-781.308062,-739.778792,1993.802906, 0.803422,-0.523835,0.283037,-833.979694,-798.243508,2025.286671, 0.720221,-0.432668,0.542292,-827.976635,-804.801338,2003.905378, 0.803422,-0.523835,0.283037,-833.979694,-798.243508,2025.286671, 0.720221,-0.432668,0.542292,-781.308062,-739.778792,1993.802906, 0.780247,-0.502047,0.373046,-786.927339,-735.293322,2011.59251, 0.803422,-0.523835,0.283037,-833.979694,-798.243508,2025.286671, 0.780247,-0.502047,0.373046,-786.927339,-735.293322,2011.59251, 0.82593,-0.549829,0.124608,-789.394717,-732.286733,2020.799449, -0.032813,-0,-0.999462,-1.468161,-978.223928,2079.651519, -0.098017,-0,-0.995185,0,-1078.217216,2079.506918, 0.032813,-0,-0.999462,-1.468161,-1078.060378,2079.651519, -0.098017,-0,-0.995185,0,-1078.217216,2079.506918, -0.032813,-0,-0.999462,-1.468161,-978.223928,2079.651519, -0.098017,-0,-0.995185,0,-978.377185,2079.506918, -0.098017,-0,-0.995185,0,-1078.217216,2079.506918, -0.098017,-0,-0.995185,0,-978.377185,2079.506918, -0.162803,-0,-0.986659,7.311798,-977.700144,2078.786769, -0.098017,-0,-0.995185,0,-1078.217216,2079.506918, -0.162803,-0,-0.986659,7.311798,-977.700144,2078.786769, -0.227168,0,-0.973856,7.311798,-1077.55801,2078.786769, 0.647345,-0.690701,-0.322298,738.20855,-738.20855,1812.397596, 0.748575,-0.61434,-0.249443,767.904941,-709.249312,1830.193918, 0.684548,-0.684548,-0.250574,739.771122,-739.771122,1820.935228, 0.748575,-0.61434,-0.249443,767.904941,-709.249312,1830.193918, 0.647345,-0.690701,-0.322298,738.20855,-738.20855,1812.397596, 0.769936,-0.566074,-0.294549,868.041423,-580.006736,1812.397596, 0.748575,-0.61434,-0.249443,767.904941,-709.249312,1830.193918, 0.769936,-0.566074,-0.294549,868.041423,-580.006736,1812.397596, 0.748575,-0.61434,-0.249443,806.222013,-670.885845,1850.699619, 0.748575,-0.61434,-0.249443,806.222013,-670.885845,1850.699619, 0.769936,-0.566074,-0.294549,868.041423,-580.006736,1812.397596, 0.748575,-0.61434,-0.249443,843.013698,-637.259985,1878.295649, 0.748575,-0.61434,-0.249443,843.013698,-637.259985,1878.295649, 0.769936,-0.566074,-0.294549,868.041423,-580.006736,1812.397596, 0.748575,-0.61434,-0.249443,876.866113,-609.663955,1911.921509, 0.748575,-0.61434,-0.249443,876.866113,-609.663955,1911.921509, 0.769936,-0.566074,-0.294549,868.041423,-580.006736,1812.397596, 0.75819,-0.62223,-0.19488,884.794356,-604.173851,1922.192772, 0.75819,-0.62223,-0.19488,884.794356,-604.173851,1922.192772, 0.769936,-0.566074,-0.294549,868.041423,-580.006736,1812.397596, 0.832671,-0.532692,-0.151323,891.670534,-595.795203,1922.192772, -0.592199,-0.097715,0.799845,-824.724927,-164.047988,914.026067, -0.598955,-0.058992,0.798607,-654.019524,0,1054.17292, -0.598955,-0.058992,0.798607,-840.882244,0,914.026067, -0.598955,-0.058992,0.798607,-654.019524,0,1054.17292, -0.592199,-0.097715,0.799845,-824.724927,-164.047988,914.026067, -0.584514,-0.136347,0.799845,-641.452722,-127.592879,1054.17292, -0.976104,-0.096138,-0.19488,-1072.403033,0,1922.192772, -0.925561,-0.183175,-0.331336,-1023.924672,-203.671281,1812.397596, -0.966926,-0.191862,-0.168059,-1051.797109,-209.215453,1922.192772, -0.925561,-0.183175,-0.331336,-1023.924672,-203.671281,1812.397596, -0.976104,-0.096138,-0.19488,-1072.403033,0,1922.192772, -0.929871,-0.091584,-0.356303,-1043.984543,0,1812.397596, -0.976856,-0.161185,0.140615,-824.724927,-164.047988,914.026067, -0.993632,-0.097864,0.055838,-849.217148,0,855.371869, -0.972323,-0.22681,0.056077,-832.899679,-165.674047,855.371869, -0.993632,-0.097864,0.055838,-849.217148,0,855.371869, -0.976856,-0.161185,0.140615,-824.724927,-164.047988,914.026067, -0.98538,-0.097051,0.140025,-840.882244,0,914.026067, 0.208122,-0.927269,0.31122,203.671281,-1023.924672,2258.006804, -0.000463,-0.985777,0.168059,0,-1072.403033,2148.211628, 0.165848,-0.978799,0.120197,209.215453,-1051.797109,2148.211628, -0.000463,-0.985777,0.168059,0,-1072.403033,2148.211628, 0.208122,-0.927269,0.31122,203.671281,-1023.924672,2258.006804, -0.000913,-0.943512,0.331336,0,-1043.984543,2258.006804, 0.352162,-0.935939,0,321.791703,-776.873894,2549.07468, 0.227168,-0.973856,0,164.047988,-824.724927,2455.64332, 0.412792,-0.910825,0,321.791703,-776.873894,2455.64332, 0.227168,-0.973856,0,164.047988,-824.724927,2455.64332, 0.352162,-0.935939,0,321.791703,-776.873894,2549.07468, 0.162803,-0.986659,0,164.047988,-824.724927,2549.07468, 0,0,1,164.047988,-824.724927,2549.07468, 0,0,1,321.791703,-776.873894,2549.07468, 0,0,1,291.163503,-786.164857,2549.07468, 0,0,1,164.047988,-824.724927,2549.07468, 0,0,1,291.163503,-786.164857,2549.07468, 0,0,1,209.932273,-810.806081,2549.07468, 0,0.162803,0.986659,653.750225,-837.456927,1817.56657, 0,0.049186,0.99879,180.675225,-794.166513,1813.302837, 0,0.227168,0.973856,180.675225,-837.456927,1817.56657, 0,0.049186,0.99879,180.675225,-794.166513,1813.302837, 0,0.162803,0.986659,653.750225,-837.456927,1817.56657, 0,0.098017,0.995185,653.750225,-808.286776,1814.693561, 0,-0.032813,0.999462,670.391133,-794.166513,1813.302837, 0,0.049186,0.99879,180.675225,-794.166513,1813.302837, 0,0.098017,0.995185,653.750225,-808.286776,1814.693561, 0,-0.812792,0.582554,876.866113,-609.663955,1911.921509, 0,-0.707107,0.707107,180.675225,-637.259985,1878.295649, 0,-0.707107,0.707107,843.013698,-637.259985,1878.295649, 0,-0.707107,0.707107,180.675225,-637.259985,1878.295649, 0,-0.812792,0.582554,876.866113,-609.663955,1911.921509, -0,-0.849252,0.527988,180.675225,-609.663955,1911.921509, -0.438107,-0.410255,0.799845,-594.593537,-594.593537,914.026067, -0.487843,-0.349653,0.799845,-543.79736,-363.353779,1054.17292, -0.509726,-0.316902,0.799845,-699.168033,-467.169144,914.026067, -0.487843,-0.349653,0.799845,-543.79736,-363.353779,1054.17292, -0.438107,-0.410255,0.799845,-594.593537,-594.593537,914.026067, -0.410255,-0.438107,0.799845,-462.46164,-462.46164,1054.17292, 0.19509,-0,-0.980785,-10.248119,-977.410942,2078.786769, 0.382683,-0,-0.92388,-18.690668,-1076.654017,2076.225749, 0.382683,0,-0.92388,-18.690668,-976.732727,2076.225749, 0.382683,-0,-0.92388,-18.690668,-1076.654017,2076.225749, 0.19509,-0,-0.980785,-10.248119,-977.410942,2078.786769, 0.19509,-0,-0.980785,-10.248119,-1077.268807,2078.786769, 0,-0.973856,-0.227168,908.625264,-576.530907,2078.49259, 0,-0.92388,-0.382683,180.675225,-589.158255,2120.119378, 0,-0.989194,-0.146613,180.675225,-576.530907,2078.49259, 0,-0.92388,-0.382683,180.675225,-589.158255,2120.119378, 0,-0.973856,-0.227168,908.625264,-576.530907,2078.49259, 0,-0.92388,-0.382683,897.900698,-589.158255,2120.119378, 0.679334,-0.678235,-0.280182,590.997993,-590.997993,738.078199, 0.826255,-0.551707,-0.113678,704.675266,-470.848959,796.15315, 0.702746,-0.7023,-0.113678,599.277053,-599.277053,796.15315, 0.826255,-0.551707,-0.113678,704.675266,-470.848959,796.15315, 0.679334,-0.678235,-0.280182,590.997993,-590.997993,738.078199, 0.798598,-0.532672,-0.280182,694.940121,-464.344144,738.078199, -0.882589,-0.145631,0.447021,-733.088824,-145.820434,1427.89836, -0.890977,-0.087754,0.445488,-840.882244,0,1241.03564, -0.871137,-0.203207,0.447021,-824.724927,-164.047988,1241.03564, -0.890977,-0.087754,0.445488,-840.882244,0,1241.03564, -0.882589,-0.145631,0.447021,-733.088824,-145.820434,1427.89836, -0.890977,-0.087754,0.445488,-747.450884,0,1427.89836, 0,-0.973856,0.227168,908.62526,-576.530907,1991.911763, 0,-0.916164,0.400805,180.675225,-589.158255,1950.284976, 0,-0.92388,0.382683,897.900693,-589.158255,1950.284976, 0,-0.916164,0.400805,180.675225,-589.158255,1950.284976, 0,-0.973856,0.227168,908.62526,-576.530907,1991.911763, -0,-0.986659,0.162803,180.675225,-576.530907,1991.911763, -0.349653,-0.487843,0.799845,-467.169144,-699.168033,914.026067, -0.410255,-0.438107,0.799845,-462.46164,-462.46164,1054.17292, -0.438107,-0.410255,0.799845,-594.593537,-594.593537,914.026067, -0.410255,-0.438107,0.799845,-462.46164,-462.46164,1054.17292, -0.349653,-0.487843,0.799845,-467.169144,-699.168033,914.026067, -0.316902,-0.509726,0.799845,-363.353779,-543.79736,1054.17292, 0,-0.999462,0.032813,180.675225,-705.406768,2035.202177, 0,-0.986659,0.162803,104.493585,-707.112263,2017.886024, 0,-0.973856,0.227168,180.675225,-707.112262,2017.886009, 0,-0.986659,0.162803,104.493585,-707.112263,2017.886024, 0,-0.999462,0.032813,180.675225,-705.406768,2035.202177, -0,-0.999462,-0.032813,104.493583,-705.406768,2035.2022, -0.637426,0.090042,-0.765232,-781.354664,-731.718944,1933.517963, -0.475897,-0.070701,-0.876654,-805.854069,-828.277941,1950.684188, -0.637426,0.090042,-0.765232,-828.138788,-805.72305,1963.780621, -0.475897,-0.070701,-0.876654,-805.854069,-828.277941,1950.684188, -0.637426,0.090042,-0.765232,-781.354664,-731.718944,1933.517963, -0.521142,-0.019464,-0.853248,-761.987077,-753.814953,1922.192772, -0.475897,-0.070701,-0.876654,-805.854069,-828.277941,1950.684188, -0.521142,-0.019464,-0.853248,-761.987077,-753.814953,1922.192772, -0.521142,-0.019464,-0.853248,-757.858868,-757.858868,1919.763614, -0.475897,-0.070701,-0.876654,-805.854069,-828.277941,1950.684188, -0.521142,-0.019464,-0.853248,-757.858868,-757.858868,1919.763614, -0.358793,-0.190568,-0.913757,-750.03201,-762.726244,1915.0942, 0.749001,-0.123588,-0.65094,731.120069,-145.428824,587.016307, 0.792149,-0.07802,-0.60532,784.019466,0,631.979457, 0.787008,-0.166056,-0.594175,768.954752,-152.95461,631.979457, 0.792149,-0.07802,-0.60532,784.019466,0,631.979457, 0.749001,-0.123588,-0.65094,731.120069,-145.428824,587.016307, 0.756844,-0.074543,-0.649331,745.443558,0,587.016307, 1,0,0,180.675225,-1011.80212,1991.911763, 1,0,0,180.675225,-1011.80212,2078.49259, 1,0,0,180.675225,-1016.065853,2035.202177, 1,0,0,180.675225,-1011.80212,2078.49259, 1,0,0,180.675225,-1011.80212,1991.911763, 1,0,0,180.675225,-999.174772,1950.284976, 1,0,0,180.675225,-1011.80212,2078.49259, 1,0,0,180.675225,-999.174772,1950.284976, 1,0,0,180.675225,-999.174772,2120.119378, 1,0,0,180.675225,-999.174772,2120.119378, 1,0,0,180.675225,-999.174772,1950.284976, 1,0,0,180.675225,-978.669071,1911.921509, 1,0,0,180.675225,-999.174772,2120.119378, 1,0,0,180.675225,-978.669071,1911.921509, 1,0,0,180.675225,-978.669071,2158.482845, 1,0,0,180.675225,-978.669071,2158.482845, 1,0,0,180.675225,-978.669071,1911.921509, 1,0,0,180.675225,-951.073041,1878.295649, 1,0,0,180.675225,-978.669071,2158.482845, 1,0,0,180.675225,-951.073041,1878.295649, 1,0,0,180.675225,-951.073041,2192.108705, 1,0,0,180.675225,-951.073041,2192.108705, 1,0,0,180.675225,-951.073041,1878.295649, 1,0,0,180.675225,-917.447181,1850.699619, 1,0,0,180.675225,-951.073041,2192.108705, 1,0,0,180.675225,-917.447181,1850.699619, 1,0,0,180.675225,-917.447181,2219.704735, 1,0,0,180.675225,-917.447181,2219.704735, 1,0,0,180.675225,-917.447181,1850.699619, 1,0,0,180.675225,-879.083714,1830.193918, 1,0,0,180.675225,-917.447181,2219.704735, 1,0,0,180.675225,-879.083714,1830.193918, 1,0,0,180.675225,-882.926259,2035.202177, 1,0,0,180.675225,-882.926259,2035.202177, 1,0,0,180.675225,-879.083714,1830.193918, 1,0,0,180.675225,-881.220765,2017.886009, 1,0,0,180.675225,-881.220765,2017.886009, 1,0,0,180.675225,-879.083714,1830.193918, 1,0,0,180.675225,-876.169825,2001.235293, 1,0,0,180.675225,-876.169825,2001.235293, 1,0,0,180.675225,-879.083714,1830.193918, 1,0,0,180.675225,-837.456927,1817.56657, 1,0,0,180.675225,-876.169825,2001.235293, 1,0,0,180.675225,-837.456927,1817.56657, 1,0,0,180.675225,-867.967544,1985.889904, 1,0,0,180.675225,-867.967544,1985.889904, 1,0,0,180.675225,-837.456927,1817.56657, 1,0,0,180.675225,-856.929131,1972.439559, 1,0,0,180.675225,-856.929131,1972.439559, 1,0,0,180.675225,-837.456927,1817.56657, 1,0,0,180.675225,-843.478786,1961.401146, 1,0,0,180.675225,-843.478786,1961.401146, 1,0,0,180.675225,-837.456927,1817.56657, 1,0,0,180.675225,-828.133397,1953.198865, 1,0,0,180.675225,-828.133397,1953.198865, 1,0,0,180.675225,-837.456927,1817.56657, 1,0,0,180.675225,-794.166513,1813.302837, 1,0,0,180.675225,-828.133397,1953.198865, 1,0,0,180.675225,-794.166513,1813.302837, 1,0,0,180.675225,-811.482681,1948.147925, 1,0,0,180.675225,-811.482681,1948.147925, 1,0,0,180.675225,-794.166513,1813.302837, 1,0,0,180.675225,-794.166513,1946.442431, 1,0,0,180.675225,-794.166513,1946.442431, 1,0,0,180.675225,-794.166513,1813.302837, 1,0,0,180.675225,-750.8761,1817.56657, 1,0,0,180.675225,-794.166513,1946.442431, 1,0,0,180.675225,-750.8761,1817.56657, 1,0,0,180.675225,-776.850346,1948.147925, 1,0,0,180.675225,-776.850346,1948.147925, 1,0,0,180.675225,-750.8761,1817.56657, 1,0,0,180.675225,-760.199629,1953.198865, 1,0,0,180.675225,-760.199629,1953.198865, 1,0,0,180.675225,-750.8761,1817.56657, 1,0,0,180.675225,-744.854241,1961.401146, 1,0,0,180.675225,-744.854241,1961.401146, 1,0,0,180.675225,-750.8761,1817.56657, 1,0,0,180.675225,-709.249312,1830.193918, 1,0,0,180.675225,-744.854241,1961.401146, 1,0,0,180.675225,-709.249312,1830.193918, 1,0,0,180.675225,-731.403895,1972.439559, 1,0,0,180.675225,-731.403895,1972.439559, 1,0,0,180.675225,-709.249312,1830.193918, 1,0,0,180.675225,-720.365482,1985.889904, 1,0,0,180.675225,-720.365482,1985.889904, 1,0,0,180.675225,-709.249312,1830.193918, 1,0,0,180.675225,-712.163201,2001.235293, 1,0,0,180.675225,-712.163201,2001.235293, 1,0,0,180.675225,-709.249312,1830.193918, 1,0,0,180.675225,-707.112262,2017.886009, 1,0,0,180.675225,-707.112262,2017.886009, 1,0,0,180.675225,-709.249312,1830.193918, 1,0,0,180.675225,-670.885845,1850.699619, 1,0,0,180.675225,-707.112262,2017.886009, 1,0,0,180.675225,-670.885845,1850.699619, 1,0,0,180.675225,-705.406768,2035.202177, 1,0,0,180.675225,-882.926259,2035.202177, 1,0,0,180.675225,-879.083714,2240.210435, 1,0,0,180.675225,-917.447181,2219.704735, 1,0,0,180.675225,-879.083714,2240.210435, 1,0,0,180.675225,-882.926259,2035.202177, 1,0,0,180.675225,-881.220765,2052.518344, 1,0,0,180.675225,-879.083714,2240.210435, 1,0,0,180.675225,-881.220765,2052.518344, 1,0,0,180.675225,-876.169825,2069.169061, 1,0,0,180.675225,-879.083714,2240.210435, 1,0,0,180.675225,-876.169825,2069.169061, 1,0,0,180.675225,-837.456927,2252.837783, 1,0,0,180.675225,-837.456927,2252.837783, 1,0,0,180.675225,-876.169825,2069.169061, 1,0,0,180.675225,-867.967544,2084.514449, 1,0,0,180.675225,-837.456927,2252.837783, 1,0,0,180.675225,-867.967544,2084.514449, 1,0,0,180.675225,-856.929131,2097.964794, 1,0,0,180.675225,-837.456927,2252.837783, 1,0,0,180.675225,-856.929131,2097.964794, 1,0,0,180.675225,-843.478786,2109.003208, 1,0,0,180.675225,-837.456927,2252.837783, 1,0,0,180.675225,-843.478786,2109.003208, 1,0,0,180.675225,-828.133397,2117.205489, 1,0,0,180.675225,-837.456927,2252.837783, 1,0,0,180.675225,-828.133397,2117.205489, 1,0,0,180.675225,-794.166513,2257.101517, 1,0,0,180.675225,-794.166513,2257.101517, 1,0,0,180.675225,-828.133397,2117.205489, 1,0,0,180.675225,-811.482681,2122.256428, 1,0,0,180.675225,-794.166513,2257.101517, 1,0,0,180.675225,-811.482681,2122.256428, 1,0,0,180.675225,-794.166513,2123.961922, 1,0,0,180.675225,-794.166513,2257.101517, 1,0,0,180.675225,-794.166513,2123.961922, 1,0,0,180.675225,-776.850346,2122.256428, 1,0,0,180.675225,-794.166513,2257.101517, 1,0,0,180.675225,-776.850346,2122.256428, 1,0,0,180.675225,-750.8761,2252.837783, 1,0,0,180.675225,-750.8761,2252.837783, 1,0,0,180.675225,-776.850346,2122.256428, 1,0,0,180.675225,-760.199629,2117.205489, 1,0,0,180.675225,-750.8761,2252.837783, 1,0,0,180.675225,-760.199629,2117.205489, 1,0,0,180.675225,-744.854241,2109.003208, 1,0,0,180.675225,-750.8761,2252.837783, 1,0,0,180.675225,-744.854241,2109.003208, 1,0,0,180.675225,-709.249312,2240.210435, 1,0,0,180.675225,-709.249312,2240.210435, 1,0,0,180.675225,-744.854241,2109.003208, 1,0,0,180.675225,-731.403895,2097.964794, 1,0,0,180.675225,-709.249312,2240.210435, 1,0,0,180.675225,-731.403895,2097.964794, 1,0,0,180.675225,-720.365482,2084.514449, 1,0,0,180.675225,-709.249312,2240.210435, 1,0,0,180.675225,-720.365482,2084.514449, 1,0,0,180.675225,-712.163201,2069.169061, 1,0,0,180.675225,-709.249312,2240.210435, 1,0,0,180.675225,-712.163201,2069.169061, 1,0,0,180.675225,-707.112262,2052.518344, 1,0,0,180.675225,-709.249312,2240.210435, 1,0,0,180.675225,-707.112262,2052.518344, 1,0,0,180.675225,-670.885845,2219.704735, 1,0,0,180.675225,-670.885845,2219.704735, 1,0,0,180.675225,-707.112262,2052.518344, 1,0,0,180.675225,-705.406768,2035.202177, 1,0,0,180.675225,-670.885845,2219.704735, 1,0,0,180.675225,-705.406768,2035.202177, 1,0,0,180.675225,-670.885845,1850.699619, 1,0,0,180.675225,-670.885845,2219.704735, 1,0,0,180.675225,-670.885845,1850.699619, 1,0,0,180.675225,-637.259985,1878.295649, 1,0,0,180.675225,-670.885845,2219.704735, 1,0,0,180.675225,-637.259985,1878.295649, 1,0,0,180.675225,-637.259985,2192.108705, 1,0,0,180.675225,-637.259985,2192.108705, 1,0,0,180.675225,-637.259985,1878.295649, 1,0,0,180.675225,-609.663955,1911.921509, 1,0,0,180.675225,-637.259985,2192.108705, 1,0,0,180.675225,-609.663955,1911.921509, 1,0,0,180.675225,-609.663955,2158.482845, 1,0,0,180.675225,-609.663955,2158.482845, 1,0,0,180.675225,-609.663955,1911.921509, 1,0,0,180.675225,-589.158255,1950.284976, 1,0,0,180.675225,-609.663955,2158.482845, 1,0,0,180.675225,-589.158255,1950.284976, 1,0,0,180.675225,-589.158255,2120.119378, 1,0,0,180.675225,-589.158255,2120.119378, 1,0,0,180.675225,-589.158255,1950.284976, 1,0,0,180.675225,-576.530907,1991.911763, 1,0,0,180.675225,-589.158255,2120.119378, 1,0,0,180.675225,-576.530907,1991.911763, 1,0,0,180.675225,-576.530907,2078.49259, 1,0,0,180.675225,-576.530907,2078.49259, 1,0,0,180.675225,-576.530907,1991.911763, 1,0,0,180.675225,-572.267173,2035.202177, -0.796215,-0.15672,-0.584364,-768.954752,-152.95461,631.979457, -0.710498,-0.267337,-0.65094,-688.700045,-285.268899,587.016307, -0.750341,-0.309043,-0.584364,-724.339538,-300.03126,631.979457, -0.710498,-0.267337,-0.65094,-688.700045,-285.268899,587.016307, -0.796215,-0.15672,-0.584364,-768.954752,-152.95461,631.979457, -0.749001,-0.123588,-0.65094,-731.120069,-145.428824,587.016307, -0.881651,-0.17413,-0.438601,-798.780783,-158.887376,682.822311, -0.750341,-0.309043,-0.584364,-724.339538,-300.03126,631.979457, -0.830739,-0.342785,-0.438601,-752.435044,-311.6688,682.822311, -0.750341,-0.309043,-0.584364,-724.339538,-300.03126,631.979457, -0.881651,-0.17413,-0.438601,-798.780783,-158.887376,682.822311, -0.796215,-0.15672,-0.584364,-768.954752,-152.95461,631.979457, -0.941653,-0.186514,-0.280182,-819.737765,-163.055979,738.078199, -0.830739,-0.342785,-0.438601,-752.435044,-311.6688,682.822311, -0.887172,-0.366638,-0.280182,-772.17609,-319.845809,738.078199, -0.830739,-0.342785,-0.438601,-752.435044,-311.6688,682.822311, -0.941653,-0.186514,-0.280182,-819.737765,-163.055979,738.078199, -0.881651,-0.17413,-0.438601,-798.780783,-158.887376,682.822311, 0.901839,-0.40872,-0.140121,990.771213,-410.390874,1922.192772, 0.972989,-0.226965,-0.042178,1059.217255,-210.691412,2011.592523, 0.91563,-0.400602,-0.033753,997.760837,-413.286071,2011.592523, 0.972989,-0.226965,-0.042178,1059.217255,-210.691412,2011.592523, 0.901839,-0.40872,-0.140121,990.771213,-410.390874,1922.192772, 0.966926,-0.191862,-0.168059,1051.797109,-209.215453,1922.192772, -0.184965,-0.925205,0.331336,-203.671281,-1023.924672,2258.006804, -0.377668,-0.910562,0.168059,-410.390874,-990.771213,2148.211628, -0.145329,-0.981317,0.126081,-209.215453,-1051.797109,2148.211628, -0.377668,-0.910562,0.168059,-410.390874,-990.771213,2148.211628, -0.184965,-0.925205,0.331336,-203.671281,-1023.924672,2258.006804, -0.36191,-0.871342,0.331336,-399.515588,-964.515951,2258.006804, -0.194936,-0.97921,0.056107,-165.674047,-832.899679,855.371869, -0.379912,-0.918011,-0.113678,-324.326404,-782.993204,796.15315, -0.193517,-0.974489,-0.113678,-165.340167,-831.221151,796.15315, -0.379912,-0.918011,-0.113678,-324.326404,-782.993204,796.15315, -0.194936,-0.97921,0.056107,-165.674047,-832.899679,855.371869, -0.382224,-0.922365,0.056107,-324.981333,-784.574342,855.371869, -0.972989,-0.226965,0.042178,-1059.217255,-210.691412,2058.811877, -0.923079,-0.382289,-0.0422,-997.760837,-413.286071,2011.592523, -0.910015,-0.412425,0.042178,-997.760837,-413.286071,2058.811877, -0.923079,-0.382289,-0.0422,-997.760837,-413.286071,2011.592523, -0.972989,-0.226965,0.042178,-1059.217255,-210.691412,2058.811877, -0.979923,-0.19486,-0.0422,-1059.217255,-210.691412,2011.592523, -0.979923,-0.19486,-0.0422,-1059.217255,-210.691412,2011.592523, -0.910916,-0.376813,-0.168059,-990.771213,-410.390874,1922.192772, -0.923079,-0.382289,-0.0422,-997.760837,-413.286071,2011.592523, -0.910916,-0.376813,-0.168059,-990.771213,-410.390874,1922.192772, -0.979923,-0.19486,-0.0422,-1059.217255,-210.691412,2011.592523, -0.966926,-0.191862,-0.168059,-1051.797109,-209.215453,1922.192772, 0.843385,-0.187656,-0.503476,978.352295,-194.606371,1708.939502, 0.929871,-0.091584,-0.356303,1043.984543,0,1812.397596, 0.925561,-0.183175,-0.331336,1023.924672,-203.671281,1812.397596, 0.929871,-0.091584,-0.356303,1043.984543,0,1812.397596, 0.843385,-0.187656,-0.503476,978.352295,-194.606371,1708.939502, 0.850126,-0.08373,-0.51988,997.51935,0,1708.939502, -0.168431,-0.974672,-0.147124,-209.215453,-1051.797109,1922.192772, -0.360223,-0.872041,-0.331336,-399.515588,-964.515951,1812.397596, -0.183175,-0.925561,-0.331336,-203.671281,-1023.924672,1812.397596, -0.360223,-0.872041,-0.331336,-399.515588,-964.515951,1812.397596, -0.168431,-0.974672,-0.147124,-209.215453,-1051.797109,1922.192772, -0.376813,-0.910916,-0.168059,-410.390874,-990.771213,1922.192772, 0.925561,-0.183175,0.331336,1023.924672,-203.671281,2258.006804, 0.79057,-0.348586,0.503476,921.587711,-381.734129,2361.464898, 0.872041,-0.360223,0.331336,964.515951,-399.515588,2258.006804, 0.79057,-0.348586,0.503476,921.587711,-381.734129,2361.464898, 0.925561,-0.183175,0.331336,1023.924672,-203.671281,2258.006804, 0.843385,-0.187656,0.503476,978.352295,-194.606371,2361.464898, -0.900096,0.367041,-0.234753,-853.905696,-778.543243,2019.687273, -0.837602,0.298772,-0.457337,-804.883918,-707.527533,1967.257586, -0.790546,0.249135,-0.559436,-845.012276,-788.258547,1988.011282, -0.837602,0.298772,-0.457337,-804.883918,-707.527533,1967.257586, -0.900096,0.367041,-0.234753,-853.905696,-778.543243,2019.687273, -0.915533,0.385671,-0.11427,-818.480102,-696.846173,2011.592491, -0.561756,-0.21137,0.799845,-776.873894,-321.791703,914.026067, -0.584514,-0.136347,0.799845,-641.452722,-127.592879,1054.17292, -0.592199,-0.097715,0.799845,-824.724927,-164.047988,914.026067, -0.584514,-0.136347,0.799845,-641.452722,-127.592879,1054.17292, -0.561756,-0.21137,0.799845,-776.873894,-321.791703,914.026067, -0.546683,-0.247761,0.799845,-604.235252,-250.282436,1054.17292, 0.014463,-0.987633,-0.156114,0,-1072.403033,1922.192772, -0.183175,-0.925561,-0.331336,-203.671281,-1023.924672,1812.397596, 0.000913,-0.943512,-0.331336,0,-1043.984543,1812.397596, -0.183175,-0.925561,-0.331336,-203.671281,-1023.924672,1812.397596, 0.014463,-0.987633,-0.156114,0,-1072.403033,1922.192772, -0.168431,-0.974672,-0.147124,-209.215453,-1051.797109,1922.192772, 0,-0.903939,-0.427662,653.750225,-1019.675597,1941.793256, 0.115001,-0.89802,-0.424659,369.41032,-997.119327,1899.593442, 0,-0.812792,-0.582554,653.750225,-997.119327,1899.593442, 0.115001,-0.89802,-0.424659,369.41032,-997.119327,1899.593442, 0,-0.903939,-0.427662,653.750225,-1019.675597,1941.793256, 0.146136,-0.933668,-0.326969,349.642862,-1009.198921,1922.192772, 0.146136,-0.933668,-0.326969,349.642862,-1009.198921,1922.192772, 0,-0.903939,-0.427662,653.750225,-1019.675597,1941.793256, 0.147851,-0.963743,-0.222127,320.792433,-1019.675597,1941.793256, 0.972989,-0.226965,-0.042178,1059.217255,-210.691412,2011.592523, 0.923514,-0.382532,0.028131,997.760837,-413.286071,2058.811877, 0.91563,-0.400602,-0.033753,997.760837,-413.286071,2011.592523, 0.923514,-0.382532,0.028131,997.760837,-413.286071,2058.811877, 0.972989,-0.226965,-0.042178,1059.217255,-210.691412,2011.592523, 0.979923,-0.19486,0.0422,1059.217255,-210.691412,2058.811877, -0.985217,-0.097035,-0.141176,-847.505736,0,796.15315, -0.941653,-0.186514,-0.280182,-819.737765,-163.055979,738.078199, -0.974489,-0.193517,-0.113678,-831.221151,-165.340167,796.15315, -0.941653,-0.186514,-0.280182,-819.737765,-163.055979,738.078199, -0.985217,-0.097035,-0.141176,-847.505736,0,796.15315, -0.947451,-0.093316,-0.305988,-835.797377,0,738.078199, 0.135214,-0.819458,0.556961,182.278552,-916.376162,2455.64332, -0.001338,-0.87441,0.485186,0,-997.51935,2361.464898, 0.169277,-0.85787,0.485186,194.606371,-978.352295,2361.464898, -0.001338,-0.87441,0.485186,0,-997.51935,2361.464898, 0.135214,-0.819458,0.556961,182.278552,-916.376162,2455.64332, -0.027252,-0.830091,0.556961,0,-934.329033,2455.64332, 0,0,-1,0,-934.329033,2455.64332, 0,0,-1,182.278552,-916.376162,2455.64332, 0,0,-1,141.006388,-920.441116,2455.64332, 0,0,1,0,-934.329033,2455.64332, 0,0,1,141.006388,-920.441116,2455.64332, 0,0,1,47.148335,-929.685327,2455.64332, -0.849252,-0,-0.527988,35.951781,-1076.356667,2059.650143, -0.903939,-0,-0.427662,40.110651,-1076.017993,2051.869445, -0.881921,-0,-0.471397,36.399844,-1076.383476,2058.811877, -0.903939,-0,-0.427662,40.110651,-1076.017993,2051.869445, -0.849252,-0,-0.527988,35.951781,-1076.356667,2059.650143, -0.83147,0,-0.55557,35.951781,-976.024878,2059.650143, -0.903939,-0,-0.427662,40.110651,-1076.017993,2051.869445, -0.83147,0,-0.55557,35.951781,-976.024878,2059.650143, -0.935939,0,-0.352162,40.110651,-976.081021,2051.869445, 0.19509,-0,-0.980785,-10.248119,-977.410942,2078.786769, 0.032813,-0,-0.999462,-1.468161,-1078.060378,2079.651519, 0.19509,-0,-0.980785,-10.248119,-1077.268807,2078.786769, 0.032813,-0,-0.999462,-1.468161,-1078.060378,2079.651519, 0.19509,-0,-0.980785,-10.248119,-977.410942,2078.786769, -0.032813,-0,-0.999462,-1.468161,-978.223928,2079.651519, 0,-0.881921,0.471397,884.794356,-604.173851,1922.192772, -0,-0.849252,0.527988,180.675225,-609.663955,1911.921509, 0,-0.812792,0.582554,876.866113,-609.663955,1911.921509, -0,-0.849252,0.527988,180.675225,-609.663955,1911.921509, 0,-0.881921,0.471397,884.794356,-604.173851,1922.192772, 0,-0.916164,0.400805,180.675225,-589.158255,1950.284976, 0,-0.916164,0.400805,180.675225,-589.158255,1950.284976, 0,-0.881921,0.471397,884.794356,-604.173851,1922.192772, 0,-0.881921,0.471397,892.684335,-596.472603,1936.600792, 0,-0.916164,0.400805,180.675225,-589.158255,1950.284976, 0,-0.881921,0.471397,892.684335,-596.472603,1936.600792, 0,-0.92388,0.382683,897.900693,-589.158255,1950.284976, -0.436098,0.719283,0.540788,-758.060123,-874.453748,2003.996308, -0.278983,0.56848,0.77395,-702.965588,-809.153242,1972.08037, -0.201549,0.493286,0.846195,-769.870311,-863.13013,1987.610439, -0.278983,0.56848,0.77395,-702.965588,-809.153242,1972.08037, -0.436098,0.719283,0.540788,-758.060123,-874.453748,2003.996308, -0.436098,0.719283,0.540788,-687.957453,-823.760435,1993.102587, 0.37075,-0.899004,-0.2331,-643.970452,-861.831591,2011.202527, 0.302536,-0.83706,-0.455854,-741.432258,-891.447302,1988.145993, 0.252855,-0.790324,-0.558079,-654.791104,-848.015122,1965.894902, 0.302536,-0.83706,-0.455854,-741.432258,-891.447302,1988.145993, 0.37075,-0.899004,-0.2331,-643.970452,-861.831591,2011.202527, 0.392989,-0.915858,-0.082244,-731.724734,-900.26268,2019.846175, 0,0.999462,0.032813,180.675225,-1016.065853,2035.202177, 0,0.986659,0.162803,653.750225,-1011.80212,1991.911763, 0,0.973856,0.227168,180.675225,-1011.80212,1991.911763, 0,0.986659,0.162803,653.750225,-1011.80212,1991.911763, 0,0.999462,0.032813,180.675225,-1016.065853,2035.202177, 0,0.999462,-0.032813,653.750225,-1016.065853,2035.202177, 0.679334,-0.678235,-0.280182,590.997993,-590.997993,738.078199, 0.500293,-0.746549,-0.438601,452.472967,-677.173649,682.822311, 0.636324,-0.634602,-0.438601,575.888851,-575.888851,682.822311, 0.500293,-0.746549,-0.438601,452.472967,-677.173649,682.822311, 0.679334,-0.678235,-0.280182,590.997993,-590.997993,738.078199, 0.533964,-0.797735,-0.280182,464.344144,-694.940121,738.078199, 0.966926,-0.191862,0.168059,1051.797109,-209.215453,2148.211628, 0.872041,-0.360223,0.331336,964.515951,-399.515588,2258.006804, 0.901839,-0.40872,0.140121,990.771213,-410.390874,2148.211628, 0.872041,-0.360223,0.331336,964.515951,-399.515588,2258.006804, 0.966926,-0.191862,0.168059,1051.797109,-209.215453,2148.211628, 0.925561,-0.183175,0.331336,1023.924672,-203.671281,2258.006804, 0,0,-1,-747.450884,0,1427.89836, 0,0,-1,-878.796251,-89.364884,1427.89836, 0,0,-1,-887.597924,0,1427.89836, 0,0,-1,-878.796251,-89.364884,1427.89836, 0,0,-1,-747.450884,0,1427.89836, 0,0,-1,-870.542978,-173.161765,1427.89836, 0,0,-1,-870.542978,-173.161765,1427.89836, 0,0,-1,-747.450884,0,1427.89836, 0,0,-1,-868.904109,-178.564394,1427.89836, 0,0,-1,-868.904109,-178.564394,1427.89836, 0,0,-1,-747.450884,0,1427.89836, 0,0,-1,-842.852042,-264.446548,1427.89836, 0,0,-1,-842.852042,-264.446548,1427.89836, 0,0,-1,-747.450884,0,1427.89836, 0,0,-1,-820.033555,-339.66902,1427.89836, 0,0,-1,-820.033555,-339.66902,1427.89836, 0,0,-1,-747.450884,0,1427.89836, 0,0,-1,-814.713927,-349.621343,1427.89836, 0,0,-1,-814.713927,-349.621343,1427.89836, 0,0,-1,-747.450884,0,1427.89836, 0,0,-1,-772.428086,-428.732587,1427.89836, 0,0,-1,-772.428086,-428.732587,1427.89836, 0,0,-1,-747.450884,0,1427.89836, 0,0,-1,-738.010701,-493.122985,1427.89836, 0,0,-1,-738.010701,-493.122985,1427.89836, 0,0,-1,-747.450884,0,1427.89836, 0,0,-1,-733.088824,-145.820434,1427.89836, 0,0,-1,-738.010701,-493.122985,1427.89836, 0,0,-1,-733.088824,-145.820434,1427.89836, 0,0,-1,-727.278191,-506.200587,1427.89836, 0,0,-1,-727.278191,-506.200587,1427.89836, 0,0,-1,-733.088824,-145.820434,1427.89836, 0,0,-1,-690.554573,-286.03707,1427.89836, 0,0,-1,-727.278191,-506.200587,1427.89836, 0,0,-1,-690.554573,-286.03707,1427.89836, 0,0,-1,-670.393897,-575.514299,1427.89836, 0,0,-1,-670.393897,-575.514299,1427.89836, 0,0,-1,-690.554573,-286.03707,1427.89836, 0,0,-1,-621.482696,-415.261462,1427.89836, 0,0,-1,-670.393897,-575.514299,1427.89836, 0,0,-1,-621.482696,-415.261462,1427.89836, 0,0,-1,-627.626511,-627.626511,1427.89836, 0,0,-1,-627.626511,-627.626511,1427.89836, 0,0,-1,-621.482696,-415.261462,1427.89836, 0,0,-1,-610.198918,-641.928967,1427.89836, 0,0,-1,-610.198918,-641.928967,1427.89836, 0,0,-1,-621.482696,-415.261462,1427.89836, 0,0,-1,-528.527588,-528.527588,1427.89836, 0,0,-1,-610.198918,-641.928967,1427.89836, 0,0,-1,-528.527588,-528.527588,1427.89836, 0,0,-1,-540.907488,-698.794973,1427.89836, 0,0,-1,-540.907488,-698.794973,1427.89836, 0,0,-1,-528.527588,-528.527588,1427.89836, 0,0,-1,-493.122985,-738.010701,1427.89836, 0,0,-1,-493.122985,-738.010701,1427.89836, 0,0,-1,-528.527588,-528.527588,1427.89836, 0,0,-1,-415.261462,-621.482696,1427.89836, 0,0,-1,-493.122985,-738.010701,1427.89836, 0,0,-1,-415.261462,-621.482696,1427.89836, 0,0,-1,-468.281767,-751.288609,1427.89836, 0,0,-1,-468.281767,-751.288609,1427.89836, 0,0,-1,-415.261462,-621.482696,1427.89836, 0,0,-1,-389.246833,-793.533662,1427.89836, 0,0,-1,-389.246833,-793.533662,1427.89836, 0,0,-1,-415.261462,-621.482696,1427.89836, 0,0,-1,-286.03707,-690.554573,1427.89836, 0,0,-1,-389.246833,-793.533662,1427.89836, 0,0,-1,-286.03707,-690.554573,1427.89836, 0,0,-1,-339.66902,-820.033555,1427.89836, 0,0,-1,-339.66902,-820.033555,1427.89836, 0,0,-1,-286.03707,-690.554573,1427.89836, 0,0,-1,-307.339193,-829.840701,1427.89836, 0,0,-1,-307.339193,-829.840701,1427.89836, 0,0,-1,-286.03707,-690.554573,1427.89836, 0,0,-1,-221.595076,-855.850894,1427.89836, 0,0,-1,-221.595076,-855.850894,1427.89836, 0,0,-1,-286.03707,-690.554573,1427.89836, 0,0,-1,-145.820434,-733.088824,1427.89836, 0,0,-1,-221.595076,-855.850894,1427.89836, 0,0,-1,-145.820434,-733.088824,1427.89836, 0,0,-1,-173.161765,-870.542978,1427.89836, 0,0,-1,-173.161765,-870.542978,1427.89836, 0,0,-1,-145.820434,-733.088824,1427.89836, 0,0,-1,-44.790103,-883.186483,1427.89836, 0,0,-1,-44.790103,-883.186483,1427.89836, 0,0,-1,-145.820434,-733.088824,1427.89836, 0,0,-1,0,-747.450884,1427.89836, 0,0,-1,-44.790103,-883.186483,1427.89836, 0,0,-1,0,-747.450884,1427.89836, 0,0,-1,0,-887.597924,1427.89836, 0,0,-1,0,-887.597924,1427.89836, 0,0,-1,0,-747.450884,1427.89836, 0,0,-1,145.820434,-733.088824,1427.89836, 0,0,-1,0,-887.597924,1427.89836, 0,0,-1,145.820434,-733.088824,1427.89836, 0,0,-1,44.790142,-883.18648,1427.89836, 0,0,-1,44.790142,-883.18648,1427.89836, 0,0,-1,145.820434,-733.088824,1427.89836, 0,0,-1,133.953889,-874.404617,1427.89836, 0,0,-1,133.953889,-874.404617,1427.89836, 0,0,-1,145.820434,-733.088824,1427.89836, 0,0,-1,173.161765,-870.542978,1427.89836, 0,0,-1,173.161765,-870.542978,1427.89836, 0,0,-1,145.820434,-733.088824,1427.89836, 0,0,-1,286.03707,-690.554573,1427.89836, 0,0,-1,173.161765,-870.542978,1427.89836, 0,0,-1,286.03707,-690.554573,1427.89836, 0,0,-1,221.595155,-855.85087,1427.89836, 0,0,-1,221.595155,-855.85087,1427.89836, 0,0,-1,286.03707,-690.554573,1427.89836, 0,0,-1,307.339229,-829.84069,1427.89836, 0,0,-1,307.339229,-829.84069,1427.89836, 0,0,-1,286.03707,-690.554573,1427.89836, 0,0,-1,415.261462,-621.482696,1427.89836, 0,0,-1,307.339229,-829.84069,1427.89836, 0,0,-1,415.261462,-621.482696,1427.89836, 0,0,-1,339.66902,-820.033555,1427.89836, 0,0,-1,339.66902,-820.033555,1427.89836, 0,0,-1,415.261462,-621.482696,1427.89836, 0,0,-1,389.246864,-793.533645,1427.89836, 0,0,-1,389.246864,-793.533645,1427.89836, 0,0,-1,415.261462,-621.482696,1427.89836, 0,0,-1,468.281762,-751.288612,1427.89836, 0,0,-1,468.281762,-751.288612,1427.89836, 0,0,-1,415.261462,-621.482696,1427.89836, 0,0,-1,528.527588,-528.527588,1427.89836, 0,0,-1,468.281762,-751.288612,1427.89836, 0,0,-1,528.527588,-528.527588,1427.89836, 0,0,-1,493.122985,-738.010701,1427.89836, 0,0,-1,493.122985,-738.010701,1427.89836, 0,0,-1,528.527588,-528.527588,1427.89836, 0,0,-1,540.907511,-698.794954,1427.89836, 0,0,-1,540.907511,-698.794954,1427.89836, 0,0,-1,528.527588,-528.527588,1427.89836, 0,0,-1,621.482696,-415.261462,1427.89836, 0,0,-1,540.907511,-698.794954,1427.89836, 0,0,-1,621.482696,-415.261462,1427.89836, 0,0,-1,627.626511,-627.626511,1427.89836, 0,0,-1,627.626511,-627.626511,1427.89836, 0,0,-1,621.482696,-415.261462,1427.89836, 0,0,-1,690.554573,-286.03707,1427.89836, 0,0,-1,627.626511,-627.626511,1427.89836, 0,0,-1,690.554573,-286.03707,1427.89836, 0,0,-1,738.010701,-493.122985,1427.89836, 0,0,-1,738.010701,-493.122985,1427.89836, 0,0,-1,690.554573,-286.03707,1427.89836, 0,0,-1,733.088824,-145.820434,1427.89836, 0,0,-1,738.010701,-493.122985,1427.89836, 0,0,-1,733.088824,-145.820434,1427.89836, 0,0,-1,747.450884,0,1427.89836, 0,0,-1,738.010701,-493.122985,1427.89836, 0,0,-1,747.450884,0,1427.89836, 0,0,-1,820.033555,-339.66902,1427.89836, 0,0,-1,820.033555,-339.66902,1427.89836, 0,0,-1,747.450884,0,1427.89836, 0,0,-1,887.597924,0,1427.89836, 0,0,-1,820.033555,-339.66902,1427.89836, 0,0,-1,887.597924,0,1427.89836, 0,0,-1,870.542978,-173.161765,1427.89836, 0.456892,-0.661987,-0.594157,435.577878,-651.888362,631.979457, 0.313363,-0.691434,-0.65094,285.268899,-688.700045,587.016307, 0.421653,-0.631049,-0.651142,414.146251,-619.813666,587.016307, 0.313363,-0.691434,-0.65094,285.268899,-688.700045,587.016307, 0.456892,-0.661987,-0.594157,435.577878,-651.888362,631.979457, 0.312045,-0.749097,-0.584364,300.03126,-724.339538,631.979457, -0.707373,-0.49612,-0.503476,-829.407027,-554.192058,1708.939502, -0.606233,-0.567693,-0.556961,-660.670395,-660.670395,1614.76108, -0.614068,-0.630655,-0.474547,-705.352697,-705.352697,1708.939502, -0.606233,-0.567693,-0.556961,-660.670395,-660.670395,1614.76108, -0.707373,-0.49612,-0.503476,-829.407027,-554.192058,1708.939502, -0.642867,-0.527587,-0.555314,-705.689426,-605.814546,1614.76108, -0.642867,-0.527587,-0.555314,-705.689426,-605.814546,1614.76108, -0.707373,-0.49612,-0.503476,-829.407027,-554.192058,1708.939502, -0.642867,-0.527587,-0.555314,-765.568614,-532.851545,1614.76108, -0.642867,-0.527587,-0.555314,-765.568614,-532.851545,1614.76108, -0.707373,-0.49612,-0.503476,-829.407027,-554.192058,1708.939502, -0.705336,-0.438515,-0.556961,-776.866198,-519.085398,1614.76108, 0.345035,-0.829807,-0.438601,311.6688,-752.435044,682.822311, 0.159907,-0.795581,-0.584364,152.95461,-768.954752,631.979457, 0.312045,-0.749097,-0.584364,300.03126,-724.339538,631.979457, 0.159907,-0.795581,-0.584364,152.95461,-768.954752,631.979457, 0.345035,-0.829807,-0.438601,311.6688,-752.435044,682.822311, 0.176518,-0.881175,-0.438601,158.887376,-798.780783,682.822311, 0.368074,-0.886578,-0.280182,319.845809,-772.17609,738.078199, 0.176518,-0.881175,-0.438601,158.887376,-798.780783,682.822311, 0.345035,-0.829807,-0.438601,311.6688,-752.435044,682.822311, 0.176518,-0.881175,-0.438601,158.887376,-798.780783,682.822311, 0.368074,-0.886578,-0.280182,319.845809,-772.17609,738.078199, 0.188038,-0.94135,-0.280182,163.055979,-819.737765,738.078199, 0.727062,-0.521108,0.447021,660.325365,-441.215303,1054.17292, 0.632456,-0.632456,0.447214,495.494614,-495.494614,1241.03564, 0.632456,-0.632456,0.447214,561.560563,-561.560563,1054.17292, 0.632456,-0.632456,0.447214,495.494614,-495.494614,1241.03564, 0.727062,-0.521108,0.447021,660.325365,-441.215303,1054.17292, 0.759676,-0.472298,0.447021,582.640028,-389.30762,1241.03564, 0.636324,-0.634602,-0.438601,575.888851,-575.888851,682.822311, 0.456892,-0.661987,-0.594157,435.577878,-651.888362,631.979457, 0.592439,-0.554776,-0.584157,554.385481,-554.385481,631.979457, 0.456892,-0.661987,-0.594157,435.577878,-651.888362,631.979457, 0.636324,-0.634602,-0.438601,575.888851,-575.888851,682.822311, 0.500293,-0.746549,-0.438601,452.472967,-677.173649,682.822311, -0.999806,-0,-0.019694,43.536421,-1075.680584,2034.646937, -0.986659,-0,0.162803,42.671671,-976.267681,2025.866979, -0.973856,-0,0.227168,42.671671,-1075.765755,2025.866979, -0.986659,-0,0.162803,42.671671,-976.267681,2025.866979, -0.999806,-0,-0.019694,43.536421,-1075.680584,2034.646937, -1,-0,-0,43.536421,-976.708082,2034.646937, 0,0.227168,-0.973856,653.750225,-837.456927,2252.837783, 0,0.352162,-0.935939,180.675225,-879.083714,2240.210435, -0,0.146613,-0.989194,180.675225,-837.456927,2252.837783, 0,0.352162,-0.935939,180.675225,-879.083714,2240.210435, 0,0.227168,-0.973856,653.750225,-837.456927,2252.837783, 0,0.412792,-0.910825,653.750225,-879.083714,2240.210435, -0.825684,0.31192,0.470055,-804.422958,-708.167768,2102.551876, -0.904882,0.382198,0.187384,-853.465107,-778.056207,2053.98621, -0.776009,0.265205,0.572256,-843.757583,-786.871584,2085.686391, -0.904882,0.382198,0.187384,-853.465107,-778.056207,2053.98621, -0.825684,0.31192,0.470055,-804.422958,-708.167768,2102.551876, -0.904884,0.382185,0.187402,-818.273878,-697.096462,2058.801607, 0,-0.995185,-0.098017,911.540741,-574.592525,2058.811877, 0,-0.995185,-0.098017,907.767925,-572.267173,2035.202247, 0,-1,-0,912.783669,-572.267169,2035.202245, 0,-0.995185,-0.098017,907.767925,-572.267173,2035.202247, 0,-0.989194,-0.146613,180.675225,-576.530907,2078.49259, 0,-0.999462,0.032813,180.675225,-572.267173,2035.202177, 0,-0.989194,-0.146613,180.675225,-576.530907,2078.49259, 0,-0.995185,-0.098017,907.767925,-572.267173,2035.202247, 0,-0.995185,-0.098017,911.540741,-574.592525,2058.811877, 0,-0.989194,-0.146613,180.675225,-576.530907,2078.49259, 0,-0.995185,-0.098017,911.540741,-574.592525,2058.811877, 0,-0.973856,-0.227168,908.625264,-576.530907,2078.49259, 0.518883,-0.55411,-0.65094,527.108195,-527.108195,587.016307, 0.456892,-0.661987,-0.594157,435.577878,-651.888362,631.979457, 0.421653,-0.631049,-0.651142,414.146251,-619.813666,587.016307, 0.456892,-0.661987,-0.594157,435.577878,-651.888362,631.979457, 0.518883,-0.55411,-0.65094,527.108195,-527.108195,587.016307, 0.592439,-0.554776,-0.584157,554.385481,-554.385481,631.979457, 0.144571,-0.892809,0.426605,369.410361,-997.119327,2170.810911, 0.165848,-0.978799,0.120197,209.215453,-1051.797109,2148.211628, 0.146136,-0.933668,0.326969,349.642944,-1009.198896,2148.211628, 0.165848,-0.978799,0.120197,209.215453,-1051.797109,2148.211628, 0.144571,-0.892809,0.426605,369.410361,-997.119327,2170.810911, 0.208122,-0.927269,0.31122,203.671281,-1023.924672,2258.006804, 0.208122,-0.927269,0.31122,203.671281,-1023.924672,2258.006804, 0.144571,-0.892809,0.426605,369.410361,-997.119327,2170.810911, 0.211506,-0.883105,0.418796,406.150729,-980.534599,2191.019462, 0.208122,-0.927269,0.31122,203.671281,-1023.924672,2258.006804, 0.211506,-0.883105,0.418796,406.150729,-980.534599,2191.019462, 0.393751,-0.867338,0.304443,399.515588,-964.515951,2258.006804, -0.837219,-0.315017,0.447021,-647.394912,-268.159753,1241.03564, -0.871137,-0.203207,0.447021,-778.906876,-154.934211,1054.17292, -0.814754,-0.369253,0.447021,-733.714234,-303.914386,1054.17292, -0.871137,-0.203207,0.447021,-778.906876,-154.934211,1054.17292, -0.837219,-0.315017,0.447021,-647.394912,-268.159753,1241.03564, -0.882589,-0.145631,0.447021,-687.270773,-136.706657,1241.03564, -0.974489,-0.193517,-0.113678,-831.221151,-165.340167,796.15315, -0.887172,-0.366638,-0.280182,-772.17609,-319.845809,738.078199, -0.918011,-0.379912,-0.113678,-782.993204,-324.326404,796.15315, -0.887172,-0.366638,-0.280182,-772.17609,-319.845809,738.078199, -0.974489,-0.193517,-0.113678,-831.221151,-165.340167,796.15315, -0.941653,-0.186514,-0.280182,-819.737765,-163.055979,738.078199, -0.830739,-0.342785,-0.438601,-752.435044,-311.6688,682.822311, -0.692236,-0.442144,-0.570366,-651.888362,-435.577878,631.979457, -0.747902,-0.498268,-0.438601,-677.173649,-452.472967,682.822311, -0.692236,-0.442144,-0.570366,-651.888362,-435.577878,631.979457, -0.830739,-0.342785,-0.438601,-752.435044,-311.6688,682.822311, -0.750341,-0.309043,-0.584364,-724.339538,-300.03126,631.979457, -0.887172,-0.366638,-0.280182,-772.17609,-319.845809,738.078199, -0.747902,-0.498268,-0.438601,-677.173649,-452.472967,682.822311, -0.798598,-0.532672,-0.280182,-694.940121,-464.344144,738.078199, -0.747902,-0.498268,-0.438601,-677.173649,-452.472967,682.822311, -0.887172,-0.366638,-0.280182,-772.17609,-319.845809,738.078199, -0.830739,-0.342785,-0.438601,-752.435044,-311.6688,682.822311, -0.521108,-0.727062,0.447021,-389.30762,-582.640028,1241.03564, -0.611428,-0.652938,0.447021,-561.560563,-561.560563,1054.17292, -0.472298,-0.759676,0.447021,-441.215303,-660.325365,1054.17292, -0.611428,-0.652938,0.447021,-561.560563,-561.560563,1054.17292, -0.521108,-0.727062,0.447021,-389.30762,-582.640028,1241.03564, -0.652938,-0.611428,0.447021,-495.494614,-495.494614,1241.03564, -0.521108,-0.727062,0.447021,-415.261462,-621.482696,1427.89836, -0.611428,-0.652938,0.447021,-594.593537,-594.593537,1241.03564, -0.472298,-0.759676,0.447021,-467.169144,-699.168033,1241.03564, -0.611428,-0.652938,0.447021,-594.593537,-594.593537,1241.03564, -0.521108,-0.727062,0.447021,-415.261462,-621.482696,1427.89836, -0.652938,-0.611428,0.447021,-528.527588,-528.527588,1427.89836, -0.850126,-0.08373,-0.51988,-997.51935,0,1708.939502, -0.819458,-0.135214,-0.556961,-916.376162,-182.278552,1614.76108, -0.843385,-0.187656,-0.503476,-978.352295,-194.606371,1708.939502, -0.819458,-0.135214,-0.556961,-916.376162,-182.278552,1614.76108, -0.850126,-0.08373,-0.51988,-997.51935,0,1708.939502, -0.827636,-0.081515,-0.555314,-925.063958,-94.069882,1614.76108, -0.827636,-0.081515,-0.555314,-925.063958,-94.069882,1614.76108, -0.850126,-0.08373,-0.51988,-997.51935,0,1708.939502, -0.827636,-0.081515,-0.555314,-934.329033,0,1614.76108, -0.843385,-0.187656,0.503476,-978.352295,-194.606371,2361.464898, -0.929871,-0.091584,0.356303,-1043.984543,0,2258.006804, -0.925561,-0.183175,0.331336,-1023.924672,-203.671281,2258.006804, -0.929871,-0.091584,0.356303,-1043.984543,0,2258.006804, -0.843385,-0.187656,0.503476,-978.352295,-194.606371,2361.464898, -0.850126,-0.08373,0.51988,-997.51935,0,2361.464898, 0.890977,-0.087754,0.445488,794.166564,0,1054.17292, 0.882589,-0.145631,0.447021,687.270773,-136.706657,1241.03564, 0.871137,-0.203207,0.447021,778.906876,-154.934211,1054.17292, 0.882589,-0.145631,0.447021,687.270773,-136.706657,1241.03564, 0.890977,-0.087754,0.445488,794.166564,0,1054.17292, 0.890977,-0.087754,0.445488,700.735204,0,1241.03564, -0.995185,-0.098017,-0,-832.543812,-84.66152,2549.07468, -0.976753,-0.214369,-0,-824.724927,-164.047988,2455.64332, -0.980785,-0.19509,0,-824.724927,-164.047988,2549.07468, -0.976753,-0.214369,-0,-824.724927,-164.047988,2455.64332, -0.995185,-0.098017,-0,-832.543812,-84.66152,2549.07468, -0.995185,-0.098017,-0,-840.882244,0,2455.64332, -0.995185,-0.098017,-0,-840.882244,0,2455.64332, -0.995185,-0.098017,-0,-832.543812,-84.66152,2549.07468, -0.995185,-0.098017,0,-840.882244,0,2549.07468, -0.759676,-0.472298,0.447021,-621.482696,-415.261462,1427.89836, -0.814754,-0.369253,0.447021,-776.873894,-321.791703,1241.03564, -0.727062,-0.521108,0.447021,-699.168033,-467.169144,1241.03564, -0.814754,-0.369253,0.447021,-776.873894,-321.791703,1241.03564, -0.759676,-0.472298,0.447021,-621.482696,-415.261462,1427.89836, -0.837219,-0.315017,0.447021,-690.554573,-286.03707,1427.89836, 0.533964,-0.797735,-0.280182,464.344144,-694.940121,738.078199, 0.345035,-0.829807,-0.438601,311.6688,-752.435044,682.822311, 0.500293,-0.746549,-0.438601,452.472967,-677.173649,682.822311, 0.345035,-0.829807,-0.438601,311.6688,-752.435044,682.822311, 0.533964,-0.797735,-0.280182,464.344144,-694.940121,738.078199, 0.368074,-0.886578,-0.280182,319.845809,-772.17609,738.078199, 0.552231,-0.825905,-0.113678,470.848959,-704.675266,796.15315, 0.368074,-0.886578,-0.280182,319.845809,-772.17609,738.078199, 0.533964,-0.797735,-0.280182,464.344144,-694.940121,738.078199, 0.368074,-0.886578,-0.280182,319.845809,-772.17609,738.078199, 0.552231,-0.825905,-0.113678,470.848959,-704.675266,796.15315, 0.380494,-0.91777,-0.113678,324.326404,-782.993204,796.15315, 0.872041,-0.360223,0.331336,964.515951,-399.515588,2258.006804, 0.707373,-0.49612,0.503476,829.407027,-554.192058,2361.464898, 0.769936,-0.566074,0.294549,868.041423,-580.006736,2258.006804, 0.707373,-0.49612,0.503476,829.407027,-554.192058,2361.464898, 0.872041,-0.360223,0.331336,964.515951,-399.515588,2258.006804, 0.79057,-0.348586,0.503476,921.587711,-381.734129,2361.464898, -0.382396,-0.923034,0.0422,-413.286071,-997.760837,2058.811877, -0.575005,-0.816448,-0.052732,-599.998378,-897.96103,2011.592523, -0.382289,-0.923079,-0.0422,-413.286071,-997.760837,2011.592523, -0.575005,-0.816448,-0.052732,-599.998378,-897.96103,2011.592523, -0.382396,-0.923034,0.0422,-413.286071,-997.760837,2058.811877, -0.555123,-0.830697,0.0422,-599.998378,-897.96103,2058.811877, -0.909392,-0.412143,0.056077,-784.574342,-324.981333,855.371869, -0.826255,-0.551707,-0.113678,-704.675266,-470.848959,796.15315, -0.811513,-0.581637,0.056077,-706.098253,-471.799769,855.371869, -0.826255,-0.551707,-0.113678,-704.675266,-470.848959,796.15315, -0.909392,-0.412143,0.056077,-784.574342,-324.981333,855.371869, -0.918011,-0.379912,-0.113678,-782.993204,-324.326404,796.15315, 0.582554,-0,0.812792,-26.471367,-1076.145653,1997.226995, 0.683524,-0,0.729928,-33.291206,-975.812207,2002.823893, 0.729928,0,0.683524,-33.291206,-1075.947599,2002.823893, 0.683524,-0,0.729928,-33.291206,-975.812207,2002.823893, 0.582554,-0,0.812792,-26.471367,-1076.145653,1997.226995, 0.527988,0,0.849252,-26.471367,-976.14887,1997.226995, 0.83147,-0,-0.55557,-38.888103,-975.735676,2059.650143, 0.707107,-0,-0.707107,-33.291206,-1076.041578,2066.469982, 0.849252,-0,-0.527988,-38.888103,-1076.067465,2059.650143, 0.707107,-0,-0.707107,-33.291206,-1076.041578,2066.469982, 0.83147,-0,-0.55557,-38.888103,-975.735676,2059.650143, 0.707107,0,-0.707107,-33.291206,-975.878684,2066.469982, -0.527988,0,0.849252,23.535045,-1076.434855,1997.226995, -0.382683,-0,0.92388,15.754347,-976.955453,1993.068126, -0.382683,0,0.92388,15.754347,-1076.84924,1993.068126, -0.382683,-0,0.92388,15.754347,-976.955453,1993.068126, -0.527988,0,0.849252,23.535045,-1076.434855,1997.226995, -0.582554,0,0.812792,23.535045,-976.438073,1997.226995, -0.227168,-0,0.973856,7.311798,-1077.464031,1990.507106, -0.382683,-0,0.92388,15.754347,-976.955453,1993.068126, -0.162803,-0,0.986659,7.311798,-977.633668,1990.507106, -0.382683,-0,0.92388,15.754347,-976.955453,1993.068126, -0.227168,-0,0.973856,7.311798,-1077.464031,1990.507106, -0.382683,0,0.92388,15.754347,-1076.84924,1993.068126, -0.935939,0,-0.352162,40.110651,-976.081021,2051.869445, -0.973856,-0,-0.227168,42.671671,-1075.765755,2043.426896, -0.903939,-0,-0.427662,40.110651,-1076.017993,2051.869445, -0.973856,-0,-0.227168,42.671671,-1075.765755,2043.426896, -0.935939,0,-0.352162,40.110651,-976.081021,2051.869445, -0.986659,-0,-0.162803,42.671671,-976.334157,2043.426896, -0.377668,-0.910562,0.168059,-410.390874,-990.771213,2148.211628, -0.555123,-0.830697,0.0422,-599.998378,-897.96103,2058.811877, -0.382396,-0.923034,0.0422,-413.286071,-997.760837,2058.811877, -0.555123,-0.830697,0.0422,-599.998378,-897.96103,2058.811877, -0.377668,-0.910562,0.168059,-410.390874,-990.771213,2148.211628, -0.577307,-0.804415,0.140118,-595.795203,-891.670534,2148.211628, -0.759676,-0.472298,0.447021,-582.640028,-389.30762,1241.03564, -0.814754,-0.369253,0.447021,-733.714234,-303.914386,1054.17292, -0.727062,-0.521108,0.447021,-660.325365,-441.215303,1054.17292, -0.814754,-0.369253,0.447021,-733.714234,-303.914386,1054.17292, -0.759676,-0.472298,0.447021,-582.640028,-389.30762,1241.03564, -0.837219,-0.315017,0.447021,-647.394912,-268.159753,1241.03564, -0.993624,-0.097863,-0.055991,-1079.968548,0,2011.592523, -0.966926,-0.191862,-0.168059,-1051.797109,-209.215453,1922.192772, -0.979923,-0.19486,-0.0422,-1059.217255,-210.691412,2011.592523, -0.966926,-0.191862,-0.168059,-1051.797109,-209.215453,1922.192772, -0.993624,-0.097863,-0.055991,-1079.968548,0,2011.592523, -0.976104,-0.096138,-0.19488,-1072.403033,0,1922.192772, 0.69246,-0.720397,0.039075,600.487204,-600.487204,855.371869, 0.552231,-0.825905,-0.113678,470.848959,-704.675266,796.15315, 0.702746,-0.7023,-0.113678,599.277053,-599.277053,796.15315, 0.552231,-0.825905,-0.113678,470.848959,-704.675266,796.15315, 0.69246,-0.720397,0.039075,600.487204,-600.487204,855.371869, 0.554566,-0.830246,0.056107,471.799769,-706.098253,855.371869, -0.000001,0.812792,-0.582554,104.493598,-867.96763,2084.514498, -0.000001,0.729928,-0.683524,180.675225,-856.929131,2097.964794, -0.000001,0.849252,-0.527988,180.675225,-867.967544,2084.514449, -0.000001,0.729928,-0.683524,180.675225,-856.929131,2097.964794, -0.000001,0.812792,-0.582554,104.493598,-867.96763,2084.514498, -0.000001,0.683524,-0.729928,104.493594,-856.929211,2097.964851, -0.000001,0.582554,-0.812792,180.675225,-843.478786,2109.003208, -0.000001,0.683524,-0.729928,104.493594,-856.929211,2097.964851, -0.000001,0.527988,-0.849252,104.493591,-843.478858,2109.00327, -0.000001,0.683524,-0.729928,104.493594,-856.929211,2097.964851, -0.000001,0.582554,-0.812792,180.675225,-843.478786,2109.003208, -0.000001,0.729928,-0.683524,180.675225,-856.929131,2097.964794, -0.000001,0.412792,-0.910825,180.675225,-828.133397,2117.205489, -0.000001,0.527988,-0.849252,104.493591,-843.478858,2109.00327, -0.000001,0.352162,-0.935939,104.493588,-828.133462,2117.205555, -0.000001,0.527988,-0.849252,104.493591,-843.478858,2109.00327, -0.000001,0.412792,-0.910825,180.675225,-828.133397,2117.205489, -0.000001,0.582554,-0.812792,180.675225,-843.478786,2109.003208, -0.000001,0.227168,-0.973856,180.675225,-811.482681,2122.256428, -0.000001,0.352162,-0.935939,104.493588,-828.133462,2117.205555, -0.000001,0.162803,-0.986659,104.493585,-811.482736,2122.256498, -0.000001,0.352162,-0.935939,104.493588,-828.133462,2117.205555, -0.000001,0.227168,-0.973856,180.675225,-811.482681,2122.256428, -0.000001,0.412792,-0.910825,180.675225,-828.133397,2117.205489, -0.000001,0.032813,-0.999462,180.675225,-794.166513,2123.961922, -0.000001,0.162803,-0.986659,104.493585,-811.482736,2122.256498, -0.000001,-0.032813,-0.999462,104.493583,-794.16656,2123.961992, -0.000001,0.162803,-0.986659,104.493585,-811.482736,2122.256498, -0.000001,0.032813,-0.999462,180.675225,-794.166513,2123.961922, -0.000001,0.227168,-0.973856,180.675225,-811.482681,2122.256428, -0.000001,-0.162803,-0.986659,180.675225,-776.850346,2122.256428, -0.000001,-0.032813,-0.999462,104.493583,-794.16656,2123.961992, -0.000001,-0.227168,-0.973856,104.493581,-776.850384,2122.256498, -0.000001,-0.032813,-0.999462,104.493583,-794.16656,2123.961992, -0.000001,-0.162803,-0.986659,180.675225,-776.850346,2122.256428, -0.000001,0.032813,-0.999462,180.675225,-794.166513,2123.961922, -0.000001,-0.352162,-0.935939,180.675225,-760.199629,2117.205489, -0.000001,-0.227168,-0.973856,104.493581,-776.850384,2122.256498, -0.000001,-0.412792,-0.910825,104.493579,-760.199658,2117.205555, -0.000001,-0.227168,-0.973856,104.493581,-776.850384,2122.256498, -0.000001,-0.352162,-0.935939,180.675225,-760.199629,2117.205489, -0.000001,-0.162803,-0.986659,180.675225,-776.850346,2122.256428, -0.000001,-0.527988,-0.849252,180.675225,-744.854241,2109.003208, -0.000001,-0.412792,-0.910825,104.493579,-760.199658,2117.205555, -0.000001,-0.582554,-0.812792,104.493578,-744.854262,2109.00327, -0.000001,-0.412792,-0.910825,104.493579,-760.199658,2117.205555, -0.000001,-0.527988,-0.849252,180.675225,-744.854241,2109.003208, -0.000001,-0.352162,-0.935939,180.675225,-760.199629,2117.205489, -0,-0.707107,-0.707107,180.675225,-731.403895,2097.964794, -0.000001,-0.582554,-0.812792,104.493578,-744.854262,2109.00327, -0,-0.707107,-0.707107,104.493578,-731.403909,2097.964851, -0.000001,-0.582554,-0.812792,104.493578,-744.854262,2109.00327, -0,-0.707107,-0.707107,180.675225,-731.403895,2097.964794, -0.000001,-0.527988,-0.849252,180.675225,-744.854241,2109.003208, -0,-0.707107,-0.707107,180.675225,-731.403895,2097.964794, -0,-0.812792,-0.582554,104.493578,-720.36549,2084.514498, -0,-0.849252,-0.527988,180.675225,-720.365482,2084.514449, -0,-0.812792,-0.582554,104.493578,-720.36549,2084.514498, -0,-0.707107,-0.707107,180.675225,-731.403895,2097.964794, -0,-0.707107,-0.707107,104.493578,-731.403909,2097.964851, -0,-0.849252,-0.527988,180.675225,-720.365482,2084.514449, -0,-0.910825,-0.412792,104.493579,-712.163205,2069.169102, -0,-0.935939,-0.352162,180.675225,-712.163201,2069.169061, -0,-0.910825,-0.412792,104.493579,-712.163205,2069.169102, -0,-0.849252,-0.527988,180.675225,-720.365482,2084.514449, -0,-0.812792,-0.582554,104.493578,-720.36549,2084.514498, -0,-0.935939,-0.352162,180.675225,-712.163201,2069.169061, -0,-0.973856,-0.227168,104.493581,-707.112263,2052.518376, -0,-0.986659,-0.162803,180.675225,-707.112262,2052.518344, -0,-0.973856,-0.227168,104.493581,-707.112263,2052.518376, -0,-0.935939,-0.352162,180.675225,-712.163201,2069.169061, -0,-0.910825,-0.412792,104.493579,-712.163205,2069.169102, -0,-0.986659,-0.162803,180.675225,-707.112262,2052.518344, -0,-0.999462,-0.032813,104.493583,-705.406768,2035.2022, 0,-0.999462,0.032813,180.675225,-705.406768,2035.202177, -0,-0.999462,-0.032813,104.493583,-705.406768,2035.2022, -0,-0.986659,-0.162803,180.675225,-707.112262,2052.518344, -0,-0.973856,-0.227168,104.493581,-707.112263,2052.518376, 0.438515,-0.705336,0.556961,519.085398,-776.866198,2455.64332, 0.366496,-0.808673,0.460139,381.734129,-921.587711,2361.464898, 0.51982,-0.710547,0.474247,554.192058,-829.407027,2361.464898, 0.366496,-0.808673,0.460139,381.734129,-921.587711,2361.464898, 0.438515,-0.705336,0.556961,519.085398,-776.866198,2455.64332, 0.292484,-0.777333,0.556961,357.552241,-863.20747,2455.64332, 0,0,1,357.552241,-863.20747,2455.64332, 0,0,1,519.085398,-776.866198,2455.64332, 0,0,1,492.936359,-790.843151,2455.64332, 0,0,-1,357.552241,-863.20747,2455.64332, 0,0,-1,492.936359,-790.843151,2455.64332, 0,0,-1,409.740311,-835.312366,2455.64332, -0.947451,-0.093316,-0.305988,-835.797377,0,738.078199, -0.881651,-0.17413,-0.438601,-798.780783,-158.887376,682.822311, -0.941653,-0.186514,-0.280182,-819.737765,-163.055979,738.078199, -0.881651,-0.17413,-0.438601,-798.780783,-158.887376,682.822311, -0.947451,-0.093316,-0.305988,-835.797377,0,738.078199, -0.882512,-0.08692,-0.462187,-814.429823,0,682.822311, -0.538332,-0.779667,0.319873,-580.006736,-868.041423,2258.006804, -0.62223,-0.75819,0.19488,-700.811797,-805.485643,2148.211628, -0.577307,-0.804415,0.140118,-595.795203,-891.670534,2148.211628, -0.62223,-0.75819,0.19488,-700.811797,-805.485643,2148.211628, -0.538332,-0.779667,0.319873,-580.006736,-868.041423,2258.006804, -0.61434,-0.748575,0.249443,-713.051374,-793.031289,2155.442781, -0.61434,-0.748575,0.249443,-750.226481,-763.163738,2153.518338, -0.666389,-0.680555,0.304582,-738.20855,-738.20855,2258.006804, -0.684548,-0.684548,0.250574,-758.175253,-758.175253,2148.912113, -0.666389,-0.680555,0.304582,-738.20855,-738.20855,2258.006804, -0.61434,-0.748575,0.249443,-750.226481,-763.163738,2153.518338, -0.61434,-0.748575,0.249443,-713.051374,-793.031289,2155.442781, -0.666389,-0.680555,0.304582,-738.20855,-738.20855,2258.006804, -0.61434,-0.748575,0.249443,-713.051374,-793.031289,2155.442781, -0.538332,-0.779667,0.319873,-580.006736,-868.041423,2258.006804, 0.252855,-0.790324,-0.558079,-654.791104,-848.015122,1965.894902, 0.071382,-0.616271,-0.784292,-758.928833,-874.671572,1963.870632, 0.093452,-0.638076,-0.764282,-679.407718,-824.046894,1931.329012, 0.071382,-0.616271,-0.784292,-758.928833,-874.671572,1963.870632, 0.252855,-0.790324,-0.558079,-654.791104,-848.015122,1965.894902, 0.302536,-0.83706,-0.455854,-741.432258,-891.447302,1988.145993, 0.032813,0,0.999462,-1.468161,-1077.966399,1989.642356, 0.162803,0,0.986659,-10.248119,-977.344466,1990.507106, 0.227168,0,0.973856,-10.248119,-1077.174828,1990.507106, 0.162803,0,0.986659,-10.248119,-977.344466,1990.507106, 0.032813,0,0.999462,-1.468161,-1077.966399,1989.642356, -0.032813,-0,0.999462,-1.468161,-978.157452,1989.642356, 0.554566,-0.830246,0.056107,471.799769,-706.098253,855.371869, 0.380494,-0.91777,-0.113678,324.326404,-782.993204,796.15315, 0.552231,-0.825905,-0.113678,470.848959,-704.675266,796.15315, 0.380494,-0.91777,-0.113678,324.326404,-782.993204,796.15315, 0.554566,-0.830246,0.056107,471.799769,-706.098253,855.371869, 0.381937,-0.922484,0.056107,324.981333,-784.574342,855.371869, 0.482193,-0.753361,0.447144,441.215303,-660.325365,1614.76108, 0.422036,-0.789573,0.445488,468.281762,-751.288612,1427.89836, 0.496917,-0.743689,0.447214,493.122985,-738.010701,1427.89836, 0.422036,-0.789573,0.445488,468.281762,-751.288612,1427.89836, 0.482193,-0.753361,0.447144,441.215303,-660.325365,1614.76108, 0.422036,-0.789573,0.445488,389.246864,-793.533645,1427.89836, 0.422036,-0.789573,0.445488,389.246864,-793.533645,1427.89836, 0.325954,-0.832956,0.447144,303.914386,-733.714234,1614.76108, 0.342282,-0.826343,0.447214,339.66902,-820.033555,1427.89836, 0.325954,-0.832956,0.447144,303.914386,-733.714234,1614.76108, 0.422036,-0.789573,0.445488,389.246864,-793.533645,1427.89836, 0.482193,-0.753361,0.447144,441.215303,-660.325365,1614.76108, 0.87881,-0.469734,0.083921,897.900698,-589.158255,2120.119378, 0.832671,-0.532692,0.151323,891.670534,-595.795203,2148.211628, 0.828508,-0.553591,0.084324,892.684338,-596.472605,2133.803565, 0.832671,-0.532692,0.151323,891.670534,-595.795203,2148.211628, 0.87881,-0.469734,0.083921,897.900698,-589.158255,2120.119378, 0.901839,-0.40872,0.140121,990.771213,-410.390874,2148.211628, 0.901839,-0.40872,0.140121,990.771213,-410.390874,2148.211628, 0.87881,-0.469734,0.083921,897.900698,-589.158255,2120.119378, 0.87881,-0.469734,0.083921,908.625264,-576.530907,2078.49259, 0.901839,-0.40872,0.140121,990.771213,-410.390874,2148.211628, 0.87881,-0.469734,0.083921,908.625264,-576.530907,2078.49259, 0.880538,-0.470657,0.055991,911.540741,-574.592525,2058.811877, 0.901839,-0.40872,0.140121,990.771213,-410.390874,2148.211628, 0.880538,-0.470657,0.055991,911.540741,-574.592525,2058.811877, 0.923514,-0.382532,0.028131,997.760837,-413.286071,2058.811877, -0.000001,0.352162,0.935939,104.49361,-828.133462,1953.198845, -0,0.227168,0.973856,180.675225,-811.482681,1948.147925, -0,0.162803,0.986659,104.493608,-811.482736,1948.147903, -0,0.227168,0.973856,180.675225,-811.482681,1948.147925, -0.000001,0.352162,0.935939,104.49361,-828.133462,1953.198845, -0.000001,0.412792,0.910825,180.675225,-828.133397,1953.198865, 0.501364,-0.716458,-0.4851,554.192058,-829.407027,1708.939502, 0.392033,-0.733442,-0.555314,492.936359,-790.843151,1614.76108, 0.461345,-0.690452,-0.557168,519.085398,-776.866198,1614.76108, 0.392033,-0.733442,-0.555314,492.936359,-790.843151,1614.76108, 0.501364,-0.716458,-0.4851,554.192058,-829.407027,1708.939502, 0.392033,-0.733442,-0.555314,409.740311,-835.312366,1614.76108, 0.392033,-0.733442,-0.555314,409.740311,-835.312366,1614.76108, 0.331547,-0.797805,-0.503571,381.734129,-921.587711,1708.939502, 0.31778,-0.767189,-0.557168,357.552241,-863.20747,1614.76108, 0.331547,-0.797805,-0.503571,381.734129,-921.587711,1708.939502, 0.392033,-0.733442,-0.555314,409.740311,-835.312366,1614.76108, 0.501364,-0.716458,-0.4851,554.192058,-829.407027,1708.939502, -0,-0.582554,0.812792,104.493598,-744.854262,1961.40113, 0,-0.707107,0.707107,180.675225,-731.403895,1972.439559, 0,-0.707107,0.707107,104.493594,-731.403909,1972.439549, 0,-0.707107,0.707107,180.675225,-731.403895,1972.439559, -0,-0.582554,0.812792,104.493598,-744.854262,1961.40113, -0,-0.527988,0.849252,180.675225,-744.854241,1961.401146, -0.000001,0.973856,-0.227168,104.493604,-881.220857,2052.518376, -0.000001,0.935939,-0.352162,180.675225,-876.169825,2069.169061, -0.000001,0.986659,-0.162803,180.675225,-881.220765,2052.518344, -0.000001,0.935939,-0.352162,180.675225,-876.169825,2069.169061, -0.000001,0.973856,-0.227168,104.493604,-881.220857,2052.518376, -0.000001,0.910825,-0.412792,104.493601,-876.169915,2069.169102, -0.000001,0.910825,-0.412792,104.493601,-876.169915,2069.169102, -0.000001,0.849252,-0.527988,180.675225,-867.967544,2084.514449, -0.000001,0.935939,-0.352162,180.675225,-876.169825,2069.169061, -0.000001,0.849252,-0.527988,180.675225,-867.967544,2084.514449, -0.000001,0.910825,-0.412792,104.493601,-876.169915,2069.169102, -0.000001,0.812792,-0.582554,104.493598,-867.96763,2084.514498, -0.000001,0.999462,-0.032813,104.493606,-882.926352,2035.2022, -0.000001,0.986659,-0.162803,180.675225,-881.220765,2052.518344, -0.000001,0.999462,0.032813,180.675225,-882.926259,2035.202177, -0.000001,0.986659,-0.162803,180.675225,-881.220765,2052.518344, -0.000001,0.999462,-0.032813,104.493606,-882.926352,2035.2022, -0.000001,0.973856,-0.227168,104.493604,-881.220857,2052.518376, -0,-0.227168,0.973856,104.493604,-776.850384,1948.147903, -0,-0.352162,0.935939,180.675225,-760.199629,1953.198865, -0,-0.412792,0.910825,104.493601,-760.199658,1953.198845, -0,-0.352162,0.935939,180.675225,-760.199629,1953.198865, -0,-0.227168,0.973856,104.493604,-776.850384,1948.147903, -0,-0.162803,0.986659,180.675225,-776.850346,1948.147925, -0,-0.336778,0.941584,653.750225,-887.575434,2260.711261, -0,-0.290285,0.95694,577.578294,-864.407003,2267.739328, -0,-0.412792,0.910825,540.89692,-887.575434,2260.711261, -0,-0.290285,0.95694,577.578294,-864.407003,2267.739328, -0,-0.336778,0.941584,653.750225,-887.575434,2260.711261, -0,-0.227168,0.973856,600.307509,-841.785968,2274.601344, -0,-0.227168,0.973856,600.307509,-841.785968,2274.601344, -0,-0.336778,0.941584,653.750225,-887.575434,2260.711261, 0,-0.19509,0.980785,653.750225,-841.785968,2274.601344, -0.329694,-0.798573,-0.503571,-381.734129,-921.587711,1708.939502, -0.392033,-0.733442,-0.555314,-409.740279,-835.312382,1614.76108, -0.31778,-0.767189,-0.557168,-357.552241,-863.20747,1614.76108, -0.392033,-0.733442,-0.555314,-409.740279,-835.312382,1614.76108, -0.329694,-0.798573,-0.503571,-381.734129,-921.587711,1708.939502, -0.392033,-0.733442,-0.555314,-492.936329,-790.843167,1614.76108, -0.392033,-0.733442,-0.555314,-492.936329,-790.843167,1614.76108, -0.479152,-0.718908,-0.503571,-554.192058,-829.407027,1708.939502, -0.461345,-0.690452,-0.557168,-519.085398,-776.866198,1614.76108, -0.479152,-0.718908,-0.503571,-554.192058,-829.407027,1708.939502, -0.392033,-0.733442,-0.555314,-492.936329,-790.843167,1614.76108, -0.329694,-0.798573,-0.503571,-381.734129,-921.587711,1708.939502, 0.918011,-0.379912,-0.113678,782.993204,-324.326404,796.15315, 0.972323,-0.22681,0.056077,832.899679,-165.674047,855.371869, 0.909392,-0.412143,0.056077,784.574342,-324.981333,855.371869, 0.972323,-0.22681,0.056077,832.899679,-165.674047,855.371869, 0.918011,-0.379912,-0.113678,782.993204,-324.326404,796.15315, 0.974489,-0.193517,-0.113678,831.221151,-165.340167,796.15315, 0.82593,-0.549829,0.124608,-789.394717,-732.286733,2020.799449, 0.80808,-0.541317,-0.232341,-833.682296,-797.914759,2048.438454, 0.803422,-0.523835,0.283037,-833.979694,-798.243508,2025.286671, 0.80808,-0.541317,-0.232341,-833.682296,-797.914759,2048.438454, 0.82593,-0.549829,0.124608,-789.394717,-732.286733,2020.799449, 0.814584,-0.546562,-0.194222,-789.342859,-732.349615,2049.894341, -0.000155,-0.998425,0.056107,0,-849.217148,855.371869, -0.193517,-0.974489,-0.113678,-165.340167,-831.221151,796.15315, 0.000315,-0.993518,-0.113678,0,-847.505736,796.15315, -0.193517,-0.974489,-0.113678,-165.340167,-831.221151,796.15315, -0.000155,-0.998425,0.056107,0,-849.217148,855.371869, -0.194936,-0.97921,0.056107,-165.674047,-832.899679,855.371869, 0.731226,-0.321864,-0.601425,724.339538,-300.03126,631.979457, 0.881651,-0.17413,-0.438601,798.780783,-158.887376,682.822311, 0.830739,-0.342785,-0.438601,752.435044,-311.6688,682.822311, 0.881651,-0.17413,-0.438601,798.780783,-158.887376,682.822311, 0.731226,-0.321864,-0.601425,724.339538,-300.03126,631.979457, 0.787008,-0.166056,-0.594175,768.954752,-152.95461,631.979457, 0.500293,-0.746549,-0.438601,452.472967,-677.173649,682.822311, 0.312045,-0.749097,-0.584364,300.03126,-724.339538,631.979457, 0.456892,-0.661987,-0.594157,435.577878,-651.888362,631.979457, 0.312045,-0.749097,-0.584364,300.03126,-724.339538,631.979457, 0.500293,-0.746549,-0.438601,452.472967,-677.173649,682.822311, 0.345035,-0.829807,-0.438601,311.6688,-752.435044,682.822311, -0.750341,-0.309043,-0.584364,-724.339538,-300.03126,631.979457, -0.631049,-0.421653,-0.651142,-619.813666,-414.146251,587.016307, -0.692236,-0.442144,-0.570366,-651.888362,-435.577878,631.979457, -0.631049,-0.421653,-0.651142,-619.813666,-414.146251,587.016307, -0.750341,-0.309043,-0.584364,-724.339538,-300.03126,631.979457, -0.710498,-0.267337,-0.65094,-688.700045,-285.268899,587.016307, 0.227168,0,0.973856,-10.248119,-1077.174828,1990.507106, 0.352162,0,0.935939,-18.690668,-976.666251,1993.068126, 0.412792,0,0.910825,-18.690668,-1076.560038,1993.068126, 0.352162,0,0.935939,-18.690668,-976.666251,1993.068126, 0.227168,0,0.973856,-10.248119,-1077.174828,1990.507106, 0.162803,0,0.986659,-10.248119,-977.344466,1990.507106, 0.312045,-0.749097,-0.584364,300.03126,-724.339538,631.979457, 0.172449,-0.739282,-0.65094,145.428824,-731.120069,587.016307, 0.313363,-0.691434,-0.65094,285.268899,-688.700045,587.016307, 0.172449,-0.739282,-0.65094,145.428824,-731.120069,587.016307, 0.312045,-0.749097,-0.584364,300.03126,-724.339538,631.979457, 0.159907,-0.795581,-0.584364,152.95461,-768.954752,631.979457, -0.652938,-0.611428,0.447021,-495.494614,-495.494614,1241.03564, -0.727062,-0.521108,0.447021,-660.325365,-441.215303,1054.17292, -0.611428,-0.652938,0.447021,-561.560563,-561.560563,1054.17292, -0.727062,-0.521108,0.447021,-660.325365,-441.215303,1054.17292, -0.652938,-0.611428,0.447021,-495.494614,-495.494614,1241.03564, -0.759676,-0.472298,0.447021,-582.640028,-389.30762,1241.03564, -0.652938,-0.611428,0.447021,-528.527588,-528.527588,1427.89836, -0.727062,-0.521108,0.447021,-699.168033,-467.169144,1241.03564, -0.611428,-0.652938,0.447021,-594.593537,-594.593537,1241.03564, -0.727062,-0.521108,0.447021,-699.168033,-467.169144,1241.03564, -0.652938,-0.611428,0.447021,-528.527588,-528.527588,1427.89836, -0.759676,-0.472298,0.447021,-621.482696,-415.261462,1427.89836, -0.777333,-0.292484,0.556961,-863.20747,-357.552241,2455.64332, -0.843385,-0.187656,0.503476,-978.352295,-194.606371,2361.464898, -0.79057,-0.348586,0.503476,-921.587711,-381.734129,2361.464898, -0.843385,-0.187656,0.503476,-978.352295,-194.606371,2361.464898, -0.777333,-0.292484,0.556961,-863.20747,-357.552241,2455.64332, -0.795831,-0.241413,0.555314,-887.227323,-278.369396,2455.64332, -0.843385,-0.187656,0.503476,-978.352295,-194.606371,2361.464898, -0.795831,-0.241413,0.555314,-887.227323,-278.369396,2455.64332, -0.795831,-0.241413,0.555314,-914.651019,-187.965588,2455.64332, -0.843385,-0.187656,0.503476,-978.352295,-194.606371,2361.464898, -0.795831,-0.241413,0.555314,-914.651019,-187.965588,2455.64332, -0.819458,-0.135214,0.556961,-916.376162,-182.278552,2455.64332, 0,0,-1,-650.663002,0,587.016307, 0,0,-1,-731.120069,-145.428824,587.016307, 0,0,-1,-745.443558,0,587.016307, 0,0,-1,-731.120069,-145.428824,587.016307, 0,0,-1,-650.663002,0,587.016307, 0,0,-1,-688.700045,-285.268899,587.016307, 0,0,-1,-688.700045,-285.268899,587.016307, 0,0,-1,-650.663002,0,587.016307, 0,0,-1,-619.813666,-414.146251,587.016307, 0,0,-1,-619.813666,-414.146251,587.016307, 0,0,-1,-650.663002,0,587.016307, 0,0,-1,-638.160695,-126.938055,587.016307, 0,0,-1,-619.813666,-414.146251,587.016307, 0,0,-1,-638.160695,-126.938055,587.016307, 0,0,-1,-601.13423,-248.997951,587.016307, 0,0,-1,-619.813666,-414.146251,587.016307, 0,0,-1,-601.13423,-248.997951,587.016307, 0,0,-1,-527.108195,-527.108195,587.016307, 0,0,-1,-527.108195,-527.108195,587.016307, 0,0,-1,-601.13423,-248.997951,587.016307, 0,0,-1,-541.006514,-361.488996,587.016307, 0,0,-1,-527.108195,-527.108195,587.016307, 0,0,-1,-541.006514,-361.488996,587.016307, 0,0,-1,-460.088221,-460.088221,587.016307, 0,0,-1,-527.108195,-527.108195,587.016307, 0,0,-1,-460.088221,-460.088221,587.016307, 0,0,-1,-414.146251,-619.813666,587.016307, 0,0,-1,-414.146251,-619.813666,587.016307, 0,0,-1,-460.088221,-460.088221,587.016307, 0,0,-1,-361.488996,-541.006514,587.016307, 0,0,-1,-414.146251,-619.813666,587.016307, 0,0,-1,-361.488996,-541.006514,587.016307, 0,0,-1,-285.268899,-688.700045,587.016307, 0,0,-1,-285.268899,-688.700045,587.016307, 0,0,-1,-361.488996,-541.006514,587.016307, 0,0,-1,-248.997951,-601.13423,587.016307, 0,0,-1,-285.268899,-688.700045,587.016307, 0,0,-1,-248.997951,-601.13423,587.016307, 0,0,-1,-145.428824,-731.120069,587.016307, 0,0,-1,-145.428824,-731.120069,587.016307, 0,0,-1,-248.997951,-601.13423,587.016307, 0,0,-1,-126.938055,-638.160695,587.016307, 0,0,-1,-145.428824,-731.120069,587.016307, 0,0,-1,-126.938055,-638.160695,587.016307, 0,0,-1,0,-745.443558,587.016307, 0,0,-1,0,-745.443558,587.016307, 0,0,-1,-126.938055,-638.160695,587.016307, 0,0,-1,0,-650.663002,587.016307, 0,0,-1,0,-745.443558,587.016307, 0,0,-1,0,-650.663002,587.016307, 0,0,-1,126.938055,-638.160695,587.016307, 0,0,-1,0,-745.443558,587.016307, 0,0,-1,126.938055,-638.160695,587.016307, 0,0,-1,145.428824,-731.120069,587.016307, 0,0,-1,145.428824,-731.120069,587.016307, 0,0,-1,126.938055,-638.160695,587.016307, 0,0,-1,248.997951,-601.13423,587.016307, 0,0,-1,145.428824,-731.120069,587.016307, 0,0,-1,248.997951,-601.13423,587.016307, 0,0,-1,285.268899,-688.700045,587.016307, 0,0,-1,285.268899,-688.700045,587.016307, 0,0,-1,248.997951,-601.13423,587.016307, 0,0,-1,361.488996,-541.006514,587.016307, 0,0,-1,285.268899,-688.700045,587.016307, 0,0,-1,361.488996,-541.006514,587.016307, 0,0,-1,414.146251,-619.813666,587.016307, 0,0,-1,414.146251,-619.813666,587.016307, 0,0,-1,361.488996,-541.006514,587.016307, 0,0,-1,460.088221,-460.088221,587.016307, 0,0,-1,414.146251,-619.813666,587.016307, 0,0,-1,460.088221,-460.088221,587.016307, 0,0,-1,527.108195,-527.108195,587.016307, 0,0,-1,527.108195,-527.108195,587.016307, 0,0,-1,460.088221,-460.088221,587.016307, 0,0,-1,541.006514,-361.488996,587.016307, 0,0,-1,527.108195,-527.108195,587.016307, 0,0,-1,541.006514,-361.488996,587.016307, 0,0,-1,610.800046,-425.129379,587.016307, 0,0,-1,610.800046,-425.129379,587.016307, 0,0,-1,541.006514,-361.488996,587.016307, 0,0,-1,601.13423,-248.997951,587.016307, 0,0,-1,610.800046,-425.129379,587.016307, 0,0,-1,601.13423,-248.997951,587.016307, 0,0,-1,638.160695,-126.938055,587.016307, 0,0,-1,610.800046,-425.129379,587.016307, 0,0,-1,638.160695,-126.938055,587.016307, 0,0,-1,619.813666,-414.146251,587.016307, 0,0,-1,619.813666,-414.146251,587.016307, 0,0,-1,638.160695,-126.938055,587.016307, 0,0,-1,648.718891,-360.068379,587.016307, 0,0,-1,648.718891,-360.068379,587.016307, 0,0,-1,638.160695,-126.938055,587.016307, 0,0,-1,650.663002,0,587.016307, 0,0,-1,648.718891,-360.068379,587.016307, 0,0,-1,650.663002,0,587.016307, 0,0,-1,684.232405,-293.627267,587.016307, 0,0,-1,684.232405,-293.627267,587.016307, 0,0,-1,650.663002,0,587.016307, 0,0,-1,745.443558,0,587.016307, 0,0,-1,684.232405,-293.627267,587.016307, 0,0,-1,745.443558,0,587.016307, 0,0,-1,688.700045,-285.268899,587.016307, 0,0,-1,688.700045,-285.268899,587.016307, 0,0,-1,745.443558,0,587.016307, 0,0,-1,707.864018,-222.093747,587.016307, 0,0,-1,707.864018,-222.093747,587.016307, 0,0,-1,745.443558,0,587.016307, 0,0,-1,731.120069,-145.428824,587.016307, -0.918011,-0.379912,-0.113678,-782.993204,-324.326404,796.15315, -0.798598,-0.532672,-0.280182,-694.940121,-464.344144,738.078199, -0.826255,-0.551707,-0.113678,-704.675266,-470.848959,796.15315, -0.798598,-0.532672,-0.280182,-694.940121,-464.344144,738.078199, -0.918011,-0.379912,-0.113678,-782.993204,-324.326404,796.15315, -0.887172,-0.366638,-0.280182,-772.17609,-319.845809,738.078199, 0.966926,-0.191862,-0.168059,1051.797109,-209.215453,1922.192772, 0.994307,-0.097931,-0.041998,1079.968548,0,2011.592523, 0.972989,-0.226965,-0.042178,1059.217255,-210.691412,2011.592523, 0.994307,-0.097931,-0.041998,1079.968548,0,2011.592523, 0.966926,-0.191862,-0.168059,1051.797109,-209.215453,1922.192772, 0.976104,-0.096138,-0.19488,1072.403033,0,1922.192772, -0.032696,-0.995906,-0.084279,0,-1078.123237,1989.786957, -0.168431,-0.974672,-0.147124,-209.215453,-1051.797109,1922.192772, 0.014463,-0.987633,-0.156114,0,-1072.403033,1922.192772, -0.168431,-0.974672,-0.147124,-209.215453,-1051.797109,1922.192772, -0.032696,-0.995906,-0.084279,0,-1078.123237,1989.786957, -0.097671,-0.991674,-0.083921,-1.468161,-1077.966399,1989.642356, -0.168431,-0.974672,-0.147124,-209.215453,-1051.797109,1922.192772, -0.097671,-0.991674,-0.083921,-10.248119,-1077.174828,1990.507106, -0.150758,-0.986668,-0.06131,-210.691412,-1059.217255,2011.592523, -0.097671,-0.991674,-0.083921,-10.248119,-1077.174828,1990.507106, -0.168431,-0.974672,-0.147124,-209.215453,-1051.797109,1922.192772, -0.097671,-0.991674,-0.083921,-1.468161,-1077.966399,1989.642356, -0.150758,-0.986668,-0.06131,-210.691412,-1059.217255,2011.592523, -0.097671,-0.991674,-0.083921,-10.248119,-1077.174828,1990.507106, -0.097671,-0.991674,-0.083921,-18.690668,-1076.560038,1993.068126, -0.150758,-0.986668,-0.06131,-210.691412,-1059.217255,2011.592523, -0.097671,-0.991674,-0.083921,-18.690668,-1076.560038,1993.068126, -0.097671,-0.991674,-0.083921,-26.471367,-1076.145653,1997.226995, -0.150758,-0.986668,-0.06131,-210.691412,-1059.217255,2011.592523, -0.097671,-0.991674,-0.083921,-26.471367,-1076.145653,1997.226995, -0.097671,-0.991674,-0.083921,-33.291206,-1075.947599,2002.823893, -0.150758,-0.986668,-0.06131,-210.691412,-1059.217255,2011.592523, -0.097671,-0.991674,-0.083921,-33.291206,-1075.947599,2002.823893, -0.097671,-0.991674,-0.083921,-38.888103,-1075.973486,2009.643732, -0.150758,-0.986668,-0.06131,-210.691412,-1059.217255,2011.592523, -0.097671,-0.991674,-0.083921,-38.888103,-1075.973486,2009.643732, -0.097931,-0.994307,-0.041998,-39.929753,-1076.03581,2011.592523, -0.973856,-0,0.227168,42.671671,-1075.765755,2025.866979, -0.935939,0,0.352162,40.110651,-976.014545,2017.42443, -0.903939,-0,0.427662,40.110651,-1076.017993,2017.42443, -0.935939,0,0.352162,40.110651,-976.014545,2017.42443, -0.973856,-0,0.227168,42.671671,-1075.765755,2025.866979, -0.986659,-0,0.162803,42.671671,-976.267681,2025.866979, 0.909392,-0.412143,0.056077,784.574342,-324.981333,855.371869, 0.840814,-0.522742,0.140615,699.168033,-467.169144,914.026067, 0.811513,-0.581637,0.056077,706.098253,-471.799769,855.371869, 0.840814,-0.522742,0.140615,699.168033,-467.169144,914.026067, 0.909392,-0.412143,0.056077,784.574342,-324.981333,855.371869, 0.92664,-0.348663,0.140615,776.873894,-321.791703,914.026067, 0,0,-1,-794.166564,0,1614.76108, 0,0,-1,-925.063958,-94.069882,1614.76108, 0,0,-1,-934.329033,0,1614.76108, 0,0,-1,-925.063958,-94.069882,1614.76108, 0,0,-1,-794.166564,0,1614.76108, 0,0,-1,-916.376162,-182.278552,1614.76108, 0,0,-1,-916.376162,-182.278552,1614.76108, 0,0,-1,-794.166564,0,1614.76108, 0,0,-1,-914.651019,-187.965588,1614.76108, 0,0,-1,-914.651019,-187.965588,1614.76108, 0,0,-1,-794.166564,0,1614.76108, 0,0,-1,-887.227324,-278.369395,1614.76108, 0,0,-1,-887.227324,-278.369395,1614.76108, 0,0,-1,-794.166564,0,1614.76108, 0,0,-1,-863.20747,-357.552241,1614.76108, 0,0,-1,-863.20747,-357.552241,1614.76108, 0,0,-1,-794.166564,0,1614.76108, 0,0,-1,-857.607798,-368.02849,1614.76108, 0,0,-1,-857.607798,-368.02849,1614.76108, 0,0,-1,-794.166564,0,1614.76108, 0,0,-1,-813.095616,-451.304926,1614.76108, 0,0,-1,-813.095616,-451.304926,1614.76108, 0,0,-1,-794.166564,0,1614.76108, 0,0,-1,-776.866198,-519.085398,1614.76108, 0,0,-1,-776.866198,-519.085398,1614.76108, 0,0,-1,-794.166564,0,1614.76108, 0,0,-1,-778.906876,-154.934211,1614.76108, 0,0,-1,-776.866198,-519.085398,1614.76108, 0,0,-1,-778.906876,-154.934211,1614.76108, 0,0,-1,-733.714234,-303.914386,1614.76108, 0,0,-1,-776.866198,-519.085398,1614.76108, 0,0,-1,-733.714234,-303.914386,1614.76108, 0,0,-1,-765.568614,-532.851545,1614.76108, 0,0,-1,-765.568614,-532.851545,1614.76108, 0,0,-1,-733.714234,-303.914386,1614.76108, 0,0,-1,-705.689426,-605.814546,1614.76108, 0,0,-1,-705.689426,-605.814546,1614.76108, 0,0,-1,-733.714234,-303.914386,1614.76108, 0,0,-1,-660.325365,-441.215303,1614.76108, 0,0,-1,-705.689426,-605.814546,1614.76108, 0,0,-1,-660.325365,-441.215303,1614.76108, 0,0,-1,-660.670395,-660.670395,1614.76108, 0,0,-1,-660.670395,-660.670395,1614.76108, 0,0,-1,-660.325365,-441.215303,1614.76108, 0,0,-1,-642.325255,-675.725862,1614.76108, 0,0,-1,-642.325255,-675.725862,1614.76108, 0,0,-1,-660.325365,-441.215303,1614.76108, 0,0,-1,-561.560563,-561.560563,1614.76108, 0,0,-1,-642.325255,-675.725862,1614.76108, 0,0,-1,-561.560563,-561.560563,1614.76108, 0,0,-1,-569.385752,-735.585765,1614.76108, 0,0,-1,-569.385752,-735.585765,1614.76108, 0,0,-1,-561.560563,-561.560563,1614.76108, 0,0,-1,-519.085398,-776.866198,1614.76108, 0,0,-1,-519.085398,-776.866198,1614.76108, 0,0,-1,-561.560563,-561.560563,1614.76108, 0,0,-1,-441.215303,-660.325365,1614.76108, 0,0,-1,-519.085398,-776.866198,1614.76108, 0,0,-1,-441.215303,-660.325365,1614.76108, 0,0,-1,-492.936329,-790.843167,1614.76108, 0,0,-1,-492.936329,-790.843167,1614.76108, 0,0,-1,-441.215303,-660.325365,1614.76108, 0,0,-1,-409.740279,-835.312382,1614.76108, 0,0,-1,-409.740279,-835.312382,1614.76108, 0,0,-1,-441.215303,-660.325365,1614.76108, 0,0,-1,-303.914386,-733.714234,1614.76108, 0,0,-1,-409.740279,-835.312382,1614.76108, 0,0,-1,-303.914386,-733.714234,1614.76108, 0,0,-1,-357.552241,-863.20747,1614.76108, 0,0,-1,-357.552241,-863.20747,1614.76108, 0,0,-1,-303.914386,-733.714234,1614.76108, 0,0,-1,-323.520318,-873.530941,1614.76108, 0,0,-1,-323.520318,-873.530941,1614.76108, 0,0,-1,-303.914386,-733.714234,1614.76108, 0,0,-1,-233.261862,-900.910544,1614.76108, 0,0,-1,-233.261862,-900.910544,1614.76108, 0,0,-1,-303.914386,-733.714234,1614.76108, 0,0,-1,-154.934211,-778.906876,1614.76108, 0,0,-1,-233.261862,-900.910544,1614.76108, 0,0,-1,-154.934211,-778.906876,1614.76108, 0,0,-1,-182.278552,-916.376162,1614.76108, 0,0,-1,-182.278552,-916.376162,1614.76108, 0,0,-1,-154.934211,-778.906876,1614.76108, 0,0,-1,-141.006395,-920.441115,1614.76108, 0,0,-1,-141.006395,-920.441115,1614.76108, 0,0,-1,-154.934211,-778.906876,1614.76108, 0,0,-1,0,-794.166564,1614.76108, 0,0,-1,-141.006395,-920.441115,1614.76108, 0,0,-1,0,-794.166564,1614.76108, 0,0,-1,-47.148297,-929.685331,1614.76108, 0,0,-1,-47.148297,-929.685331,1614.76108, 0,0,-1,0,-794.166564,1614.76108, 0,0,-1,0,-934.329033,1614.76108, 0,0,-1,0,-934.329033,1614.76108, 0,0,-1,0,-794.166564,1614.76108, 0,0,-1,154.934211,-778.906876,1614.76108, 0,0,-1,0,-934.329033,1614.76108, 0,0,-1,154.934211,-778.906876,1614.76108, 0,0,-1,47.148336,-929.685327,1614.76108, 0,0,-1,47.148336,-929.685327,1614.76108, 0,0,-1,154.934211,-778.906876,1614.76108, 0,0,-1,141.006389,-920.441115,1614.76108, 0,0,-1,141.006389,-920.441115,1614.76108, 0,0,-1,154.934211,-778.906876,1614.76108, 0,0,-1,182.278552,-916.376162,1614.76108, 0,0,-1,182.278552,-916.376162,1614.76108, 0,0,-1,154.934211,-778.906876,1614.76108, 0,0,-1,303.914386,-733.714234,1614.76108, 0,0,-1,182.278552,-916.376162,1614.76108, 0,0,-1,303.914386,-733.714234,1614.76108, 0,0,-1,233.261899,-900.910533,1614.76108, 0,0,-1,233.261899,-900.910533,1614.76108, 0,0,-1,303.914386,-733.714234,1614.76108, 0,0,-1,323.520353,-873.53093,1614.76108, 0,0,-1,323.520353,-873.53093,1614.76108, 0,0,-1,303.914386,-733.714234,1614.76108, 0,0,-1,441.215303,-660.325365,1614.76108, 0,0,-1,323.520353,-873.53093,1614.76108, 0,0,-1,441.215303,-660.325365,1614.76108, 0,0,-1,357.552241,-863.20747,1614.76108, 0,0,-1,357.552241,-863.20747,1614.76108, 0,0,-1,441.215303,-660.325365,1614.76108, 0,0,-1,409.740311,-835.312366,1614.76108, 0,0,-1,409.740311,-835.312366,1614.76108, 0,0,-1,441.215303,-660.325365,1614.76108, 0,0,-1,492.936359,-790.843151,1614.76108, 0,0,-1,492.936359,-790.843151,1614.76108, 0,0,-1,441.215303,-660.325365,1614.76108, 0,0,-1,561.560563,-561.560563,1614.76108, 0,0,-1,492.936359,-790.843151,1614.76108, 0,0,-1,561.560563,-561.560563,1614.76108, 0,0,-1,519.085398,-776.866198,1614.76108, 0,0,-1,519.085398,-776.866198,1614.76108, 0,0,-1,561.560563,-561.560563,1614.76108, 0,0,-1,569.385776,-735.585745,1614.76108, 0,0,-1,569.385776,-735.585745,1614.76108, 0,0,-1,561.560563,-561.560563,1614.76108, 0,0,-1,660.325365,-441.215303,1614.76108, 0,0,-1,569.385776,-735.585745,1614.76108, 0,0,-1,660.325365,-441.215303,1614.76108, 0,0,-1,642.325277,-675.725844,1614.76108, 0,0,-1,642.325277,-675.725844,1614.76108, 0,0,-1,660.325365,-441.215303,1614.76108, 0,0,-1,660.670395,-660.670395,1614.76108, 0,0,-1,660.670395,-660.670395,1614.76108, 0,0,-1,660.325365,-441.215303,1614.76108, 0,0,-1,733.714234,-303.914386,1614.76108, 0,0,-1,660.670395,-660.670395,1614.76108, 0,0,-1,733.714234,-303.914386,1614.76108, 0,0,-1,705.689443,-605.814526,1614.76108, 0,0,-1,705.689443,-605.814526,1614.76108, 0,0,-1,733.714234,-303.914386,1614.76108, 0,0,-1,765.568628,-532.851527,1614.76108, 0,0,-1,765.568628,-532.851527,1614.76108, 0,0,-1,733.714234,-303.914386,1614.76108, 0,0,-1,778.906876,-154.934211,1614.76108, 0,0,-1,765.568628,-532.851527,1614.76108, 0,0,-1,778.906876,-154.934211,1614.76108, 0,0,-1,776.866198,-519.085398,1614.76108, 0,0,-1,776.866198,-519.085398,1614.76108, 0,0,-1,778.906876,-154.934211,1614.76108, 0,0,-1,813.095625,-451.304909,1614.76108, 0,0,-1,813.095625,-451.304909,1614.76108, 0,0,-1,778.906876,-154.934211,1614.76108, 0,0,-1,794.166564,0,1614.76108, 0,0,-1,813.095625,-451.304909,1614.76108, 0,0,-1,794.166564,0,1614.76108, 0,0,-1,934.329033,0,1614.76108, 0,0,-1,813.095625,-451.304909,1614.76108, 0,0,-1,934.329033,0,1614.76108, 0,0,-1,857.607806,-368.028476,1614.76108, 0,0,-1,857.607806,-368.028476,1614.76108, 0,0,-1,934.329033,0,1614.76108, 0,0,-1,863.20747,-357.552241,1614.76108, 0,0,-1,863.20747,-357.552241,1614.76108, 0,0,-1,934.329033,0,1614.76108, 0,0,-1,887.227327,-278.369384,1614.76108, 0,0,-1,887.227327,-278.369384,1614.76108, 0,0,-1,934.329033,0,1614.76108, 0,0,-1,914.651021,-187.96558,1614.76108, 0,0,-1,914.651021,-187.96558,1614.76108, 0,0,-1,934.329033,0,1614.76108, 0,0,-1,925.063958,-94.069878,1614.76108, 0,0,-1,914.651021,-187.96558,1614.76108, 0,0,-1,925.063958,-94.069878,1614.76108, 0,0,-1,916.376162,-182.278552,1614.76108, 0.798598,-0.532672,-0.280182,694.940121,-464.344144,738.078199, 0.918011,-0.379912,-0.113678,782.993204,-324.326404,796.15315, 0.826255,-0.551707,-0.113678,704.675266,-470.848959,796.15315, 0.918011,-0.379912,-0.113678,782.993204,-324.326404,796.15315, 0.798598,-0.532672,-0.280182,694.940121,-464.344144,738.078199, 0.887172,-0.366638,-0.280182,772.17609,-319.845809,738.078199, -0.358504,-0.819473,0.447144,-303.914386,-733.714234,1614.76108, -0.422036,-0.789573,0.445488,-389.246833,-793.533662,1427.89836, -0.342282,-0.826343,0.447214,-339.66902,-820.033555,1427.89836, -0.422036,-0.789573,0.445488,-389.246833,-793.533662,1427.89836, -0.358504,-0.819473,0.447144,-303.914386,-733.714234,1614.76108, -0.422036,-0.789573,0.445488,-468.281767,-751.288609,1427.89836, -0.422036,-0.789573,0.445488,-468.281767,-751.288609,1427.89836, -0.511487,-0.733787,0.447144,-441.215303,-660.325365,1614.76108, -0.496917,-0.743689,0.447214,-493.122985,-738.010701,1427.89836, -0.511487,-0.733787,0.447144,-441.215303,-660.325365,1614.76108, -0.422036,-0.789573,0.445488,-468.281767,-751.288609,1427.89836, -0.358504,-0.819473,0.447144,-303.914386,-733.714234,1614.76108, -0.707107,0,-0.707107,30.354884,-1076.33078,2066.469982, -0.83147,0,-0.55557,35.951781,-976.024878,2059.650143, -0.849252,-0,-0.527988,35.951781,-1076.356667,2059.650143, -0.83147,0,-0.55557,35.951781,-976.024878,2059.650143, -0.707107,0,-0.707107,30.354884,-1076.33078,2066.469982, -0.707107,0,-0.707107,30.354884,-976.167886,2066.469982, -0.55557,0,-0.83147,23.535045,-976.504549,2072.06688, -0.707107,0,-0.707107,30.354884,-1076.33078,2066.469982, -0.55557,0,-0.83147,23.535045,-1076.528834,2072.06688, -0.707107,0,-0.707107,30.354884,-1076.33078,2066.469982, -0.55557,0,-0.83147,23.535045,-976.504549,2072.06688, -0.707107,0,-0.707107,30.354884,-976.167886,2066.469982, -0.705651,-0.708302,0.019122,-758.928833,-874.671572,1963.870632, -0.705651,-0.708302,0.019122,-785.140115,-848.157193,1978.730924, -0.705651,-0.708302,0.019122,-801.544846,-831.814429,1978.709589, -0.705651,-0.708302,0.019122,-785.140115,-848.157193,1978.730924, -0.705651,-0.708302,0.019122,-758.928833,-874.671572,1963.870632, -0.705651,-0.708302,0.019122,-741.432258,-891.447302,1988.145993, -0.705651,-0.708302,0.019122,-785.140115,-848.157193,1978.730924, -0.705651,-0.708302,0.019122,-741.432258,-891.447302,1988.145993, -0.705651,-0.708302,0.019122,-769.870311,-863.13013,1987.610439, -0.705651,-0.708302,0.019122,-769.870311,-863.13013,1987.610439, -0.705651,-0.708302,0.019122,-741.432258,-891.447302,1988.145993, -0.705651,-0.708302,0.019122,-758.060123,-874.453748,2003.996308, -0.705651,-0.708302,0.019122,-758.060123,-874.453748,2003.996308, -0.705651,-0.708302,0.019122,-741.432258,-891.447302,1988.145993, -0.705651,-0.708302,0.019122,-731.724734,-900.26268,2019.846175, -0.705651,-0.708302,0.019122,-758.060123,-874.453748,2003.996308, -0.705651,-0.708302,0.019122,-731.724734,-900.26268,2019.846175, -0.705651,-0.708302,0.019122,-751.507545,-880.404128,2025.39393, -0.705651,-0.708302,0.019122,-751.507545,-880.404128,2025.39393, -0.705651,-0.708302,0.019122,-731.724734,-900.26268,2019.846175, -0.705651,-0.708302,0.019122,-731.284145,-899.775643,2054.145111, -0.705651,-0.708302,0.019122,-751.507545,-880.404128,2025.39393, -0.705651,-0.708302,0.019122,-731.284145,-899.775643,2054.145111, -0.705651,-0.708302,0.019122,-751.210147,-880.075378,2048.545713, -0.705651,-0.708302,0.019122,-751.210147,-880.075378,2048.545713, -0.705651,-0.708302,0.019122,-731.284145,-899.775643,2054.145111, -0.705651,-0.708302,0.019122,-757.213206,-873.517548,2069.927006, -0.705651,-0.708302,0.019122,-757.213206,-873.517548,2069.927006, -0.705651,-0.708302,0.019122,-731.284145,-899.775643,2054.145111, -0.705651,-0.708302,0.019122,-740.177565,-890.06034,2085.821102, -0.705651,-0.708302,0.019122,-757.213206,-873.517548,2069.927006, -0.705651,-0.708302,0.019122,-740.177565,-890.06034,2085.821102, -0.705651,-0.708302,0.019122,-768.60281,-861.729009,2086.282702, -0.705651,-0.708302,0.019122,-768.60281,-861.729009,2086.282702, -0.705651,-0.708302,0.019122,-740.177565,-890.06034,2085.821102, -0.705651,-0.708302,0.019122,-757.051053,-872.595836,2110.051763, -0.705651,-0.708302,0.019122,-768.60281,-861.729009,2086.282702, -0.705651,-0.708302,0.019122,-757.051053,-872.595836,2110.051763, -0.705651,-0.708302,0.019122,-783.644995,-846.504457,2095.122795, -0.705651,-0.708302,0.019122,-783.644995,-846.504457,2095.122795, -0.705651,-0.708302,0.019122,-757.051053,-872.595836,2110.051763, -0.705651,-0.708302,0.019122,-826.261008,-803.647314,2109.961752, -0.705651,-0.708302,0.019122,-826.261008,-803.647314,2109.961752, -0.705651,-0.708302,0.019122,-757.051053,-872.595836,2110.051763, -0.705651,-0.708302,0.019122,-803.639077,-825.829444,2123.116588, -0.705651,-0.708302,0.019122,-803.639077,-825.829444,2123.116588, -0.705651,-0.708302,0.019122,-757.051053,-872.595836,2110.051763, -0.705651,-0.708302,0.019122,-779.335772,-850.040945,2123.148196, -0.705651,-0.708302,0.019122,-781.550765,-852.489443,1950.715796, -0.705651,-0.708302,0.019122,-828.138788,-805.72305,1963.780621, -0.705651,-0.708302,0.019122,-805.854069,-828.277941,1950.684188, -0.705651,-0.708302,0.019122,-828.138788,-805.72305,1963.780621, -0.705651,-0.708302,0.019122,-781.550765,-852.489443,1950.715796, -0.705651,-0.708302,0.019122,-758.928833,-874.671572,1963.870632, -0.705651,-0.708302,0.019122,-828.138788,-805.72305,1963.780621, -0.705651,-0.708302,0.019122,-758.928833,-874.671572,1963.870632, -0.705651,-0.708302,0.019122,-845.012276,-788.258547,1988.011282, -0.705651,-0.708302,0.019122,-845.012276,-788.258547,1988.011282, -0.705651,-0.708302,0.019122,-758.928833,-874.671572,1963.870632, -0.705651,-0.708302,0.019122,-801.544846,-831.814429,1978.709589, -0.705651,-0.708302,0.019122,-845.012276,-788.258547,1988.011282, -0.705651,-0.708302,0.019122,-801.544846,-831.814429,1978.709589, -0.705651,-0.708302,0.019122,-816.587031,-816.589878,1987.549682, -0.705651,-0.708302,0.019122,-845.012276,-788.258547,1988.011282, -0.705651,-0.708302,0.019122,-816.587031,-816.589878,1987.549682, -0.705651,-0.708302,0.019122,-827.976635,-804.801338,2003.905378, -0.705651,-0.708302,0.019122,-845.012276,-788.258547,1988.011282, -0.705651,-0.708302,0.019122,-827.976635,-804.801338,2003.905378, -0.705651,-0.708302,0.019122,-853.905696,-778.543243,2019.687273, -0.705651,-0.708302,0.019122,-853.905696,-778.543243,2019.687273, -0.705651,-0.708302,0.019122,-827.976635,-804.801338,2003.905378, -0.705651,-0.708302,0.019122,-833.979694,-798.243508,2025.286671, -0.705651,-0.708302,0.019122,-853.905696,-778.543243,2019.687273, -0.705651,-0.708302,0.019122,-833.979694,-798.243508,2025.286671, -0.705651,-0.708302,0.019122,-853.465107,-778.056207,2053.98621, -0.705651,-0.708302,0.019122,-853.465107,-778.056207,2053.98621, -0.705651,-0.708302,0.019122,-833.979694,-798.243508,2025.286671, -0.705651,-0.708302,0.019122,-833.682296,-797.914759,2048.438454, -0.705651,-0.708302,0.019122,-853.465107,-778.056207,2053.98621, -0.705651,-0.708302,0.019122,-833.682296,-797.914759,2048.438454, -0.705651,-0.708302,0.019122,-827.129718,-803.865138,2069.836076, -0.705651,-0.708302,0.019122,-853.465107,-778.056207,2053.98621, -0.705651,-0.708302,0.019122,-827.129718,-803.865138,2069.836076, -0.705651,-0.708302,0.019122,-843.757583,-786.871584,2085.686391, -0.705651,-0.708302,0.019122,-843.757583,-786.871584,2085.686391, -0.705651,-0.708302,0.019122,-827.129718,-803.865138,2069.836076, -0.705651,-0.708302,0.019122,-815.31953,-815.188756,2086.221945, -0.705651,-0.708302,0.019122,-843.757583,-786.871584,2085.686391, -0.705651,-0.708302,0.019122,-815.31953,-815.188756,2086.221945, -0.705651,-0.708302,0.019122,-826.261008,-803.647314,2109.961752, -0.705651,-0.708302,0.019122,-826.261008,-803.647314,2109.961752, -0.705651,-0.708302,0.019122,-815.31953,-815.188756,2086.221945, -0.705651,-0.708302,0.019122,-800.049726,-830.161694,2095.10146, -0.705651,-0.708302,0.019122,-826.261008,-803.647314,2109.961752, -0.705651,-0.708302,0.019122,-800.049726,-830.161694,2095.10146, -0.705651,-0.708302,0.019122,-783.644995,-846.504457,2095.122795, 0.986659,-0,0.162803,-45.607992,-975.978478,2025.866979, 0.999806,0,-0.019694,-46.472742,-1075.391382,2034.646937, 0.973856,0,0.227168,-45.607992,-1075.476552,2025.866979, 0.999806,0,-0.019694,-46.472742,-1075.391382,2034.646937, 0.986659,-0,0.162803,-45.607992,-975.978478,2025.866979, 1,0,0,-46.472742,-976.41888,2034.646937, 0,0.986659,-0.162803,180.675225,-1011.80212,2078.49259, 0,0.999462,-0.032813,653.750225,-1016.065853,2035.202177, 0,0.999462,0.032813,180.675225,-1016.065853,2035.202177, 0,0.999462,-0.032813,653.750225,-1016.065853,2035.202177, 0,0.986659,-0.162803,180.675225,-1011.80212,2078.49259, 0,0.973856,-0.227168,653.750225,-1011.80212,2078.49259, 0,-0.707107,-0.707107,653.750225,-966.763694,1862.604996, 0.14518,-0.877819,-0.456461,406.150723,-980.534583,1879.384872, 0,-0.707107,-0.707107,422.745208,-966.763694,1862.604996, 0.14518,-0.877819,-0.456461,406.150723,-980.534583,1879.384872, 0,-0.707107,-0.707107,653.750225,-966.763694,1862.604996, 0,-0.812792,-0.582554,653.750225,-997.119327,1899.593442, 0.14518,-0.877819,-0.456461,406.150723,-980.534583,1879.384872, 0,-0.812792,-0.582554,653.750225,-997.119327,1899.593442, 0.115001,-0.89802,-0.424659,369.41032,-997.119327,1899.593442, 0,-0.19509,-0.980785,653.750225,-841.785968,1795.80301, 0,-0.227168,-0.973856,600.307476,-841.785968,1795.80301, 0,-0.098017,-0.995185,653.750225,-795.278099,1791.222384, -0.352162,0,-0.935939,15.754347,-977.02193,2076.225749, -0.227168,0,-0.973856,7.311798,-1077.55801,2078.786769, -0.162803,-0,-0.986659,7.311798,-977.700144,2078.786769, -0.227168,0,-0.973856,7.311798,-1077.55801,2078.786769, -0.352162,0,-0.935939,15.754347,-977.02193,2076.225749, -0.412792,0,-0.910825,15.754347,-1076.943219,2076.225749, -0.000463,-0.985777,0.168059,0,-1072.403033,2148.211628, -0.097671,-0.991674,0.083921,-1.468161,-1078.060378,2079.651519, 0.032696,-0.995906,0.084279,0,-1078.217216,2079.506918, -0.097671,-0.991674,0.083921,-38.888103,-1076.067465,2059.650143, -0.150979,-0.98827,0.022991,-210.691412,-1059.217255,2058.811877, -0.097931,-0.994307,0.041998,-39.336165,-1076.094273,2058.811877, -0.150979,-0.98827,0.022991,-210.691412,-1059.217255,2058.811877, -0.097671,-0.991674,0.083921,-38.888103,-1076.067465,2059.650143, -0.145329,-0.981317,0.126081,-209.215453,-1051.797109,2148.211628, -0.145329,-0.981317,0.126081,-209.215453,-1051.797109,2148.211628, -0.097671,-0.991674,0.083921,-38.888103,-1076.067465,2059.650143, -0.097671,-0.991674,0.083921,-33.291206,-1076.041578,2066.469982, -0.145329,-0.981317,0.126081,-209.215453,-1051.797109,2148.211628, -0.097671,-0.991674,0.083921,-33.291206,-1076.041578,2066.469982, -0.097671,-0.991674,0.083921,-26.471367,-1076.239632,2072.06688, -0.145329,-0.981317,0.126081,-209.215453,-1051.797109,2148.211628, -0.097671,-0.991674,0.083921,-26.471367,-1076.239632,2072.06688, -0.097671,-0.991674,0.083921,-18.690668,-1076.654017,2076.225749, -0.145329,-0.981317,0.126081,-209.215453,-1051.797109,2148.211628, -0.097671,-0.991674,0.083921,-18.690668,-1076.654017,2076.225749, -0.097671,-0.991674,0.083921,-10.248119,-1077.268807,2078.786769, -0.145329,-0.981317,0.126081,-209.215453,-1051.797109,2148.211628, -0.097671,-0.991674,0.083921,-10.248119,-1077.268807,2078.786769, -0.097671,-0.991674,0.083921,-1.468161,-1078.060378,2079.651519, -0.145329,-0.981317,0.126081,-209.215453,-1051.797109,2148.211628, -0.097671,-0.991674,0.083921,-1.468161,-1078.060378,2079.651519, -0.000463,-0.985777,0.168059,0,-1072.403033,2148.211628, -0.75819,-0.62223,-0.19488,-761.987077,-753.814953,1922.192772, -0.669886,-0.684903,-0.286639,-738.20855,-738.20855,1812.397596, -0.684548,-0.684548,-0.250574,-757.858868,-757.858868,1919.763614, -0.669886,-0.684903,-0.286639,-738.20855,-738.20855,1812.397596, -0.75819,-0.62223,-0.19488,-761.987077,-753.814953,1922.192772, -0.804773,-0.576807,-0.140121,-891.670534,-595.795203,1922.192772, -0.669886,-0.684903,-0.286639,-738.20855,-738.20855,1812.397596, -0.804773,-0.576807,-0.140121,-891.670534,-595.795203,1922.192772, -0.785009,-0.523429,-0.331336,-868.041423,-580.006736,1812.397596, -0,-0.894427,0.447214,0,-794.166564,1614.76108, -0.087754,-0.890977,0.445488,-44.790103,-883.186483,1427.89836, -0,-0.894427,0.447214,0,-887.597924,1427.89836, -0.087754,-0.890977,0.445488,-44.790103,-883.186483,1427.89836, -0.191744,-0.873668,0.447144,-154.934211,-778.906876,1614.76108, -0.174494,-0.877241,0.447214,-173.161765,-870.542978,1427.89836, -0.191744,-0.873668,0.447144,-154.934211,-778.906876,1614.76108, -0.087754,-0.890977,0.445488,-44.790103,-883.186483,1427.89836, -0,-0.894427,0.447214,0,-794.166564,1614.76108, -0.029352,-0.894042,0.447021,0,-747.450884,1427.89836, -0.145631,-0.882589,0.447021,-164.047988,-824.724927,1241.03564, 0.029352,-0.894042,0.447021,0,-840.882244,1241.03564, -0.145631,-0.882589,0.447021,-164.047988,-824.724927,1241.03564, -0.029352,-0.894042,0.447021,0,-747.450884,1427.89836, -0.203207,-0.871137,0.447021,-145.820434,-733.088824,1427.89836, -0.632155,-0.770284,-0.083921,-702.965588,-809.153242,1972.08037, -0.632155,-0.770284,-0.083921,-746.546206,-772.245717,1961.599842, -0.632155,-0.770284,-0.083921,-723.636295,-790.983771,1961.015863, -0.632155,-0.770284,-0.083921,-746.546206,-772.245717,1961.599842, -0.632155,-0.770284,-0.083921,-702.965588,-809.153242,1972.08037, -0.704588,-0.704588,-0.084324,-761.145932,-761.145932,1969.694508, -0.704588,-0.704588,-0.084324,-761.145932,-761.145932,1969.694508, -0.632155,-0.770284,-0.083921,-702.965588,-809.153242,1972.08037, -0.688905,-0.723623,-0.042187,-763.653083,-763.653083,2011.592523, -0.688905,-0.723623,-0.042187,-763.653083,-763.653083,2011.592523, -0.632155,-0.770284,-0.083921,-702.965588,-809.153242,1972.08037, -0.632155,-0.770284,-0.083921,-687.957453,-823.760435,1993.102587, -0.688905,-0.723623,-0.042187,-763.653083,-763.653083,2011.592523, -0.632155,-0.770284,-0.083921,-687.957453,-823.760435,1993.102587, -0.633834,-0.772328,-0.041998,-683.32915,-829.573232,2011.592523, -0.000913,-0.943512,0.331336,0,-1043.984543,2258.006804, -0.145329,-0.981317,0.126081,-209.215453,-1051.797109,2148.211628, -0.000463,-0.985777,0.168059,0,-1072.403033,2148.211628, -0.145329,-0.981317,0.126081,-209.215453,-1051.797109,2148.211628, -0.000913,-0.943512,0.331336,0,-1043.984543,2258.006804, -0.184965,-0.925205,0.331336,-203.671281,-1023.924672,2258.006804, -0.10232,-0.445425,-0.889453,-712.20051,-793.069744,1912.981477, 0.071382,-0.616271,-0.784292,-758.928833,-874.671572,1963.870632, -0.188016,-0.3607,-0.913535,-781.550765,-852.489443,1950.715796, 0.071382,-0.616271,-0.784292,-758.928833,-874.671572,1963.870632, -0.10232,-0.445425,-0.889453,-712.20051,-793.069744,1912.981477, -0.016378,-0.522321,-0.852592,-697.040319,-808.580815,1922.192772, 0.071382,-0.616271,-0.784292,-758.928833,-874.671572,1963.870632, -0.016378,-0.522321,-0.852592,-697.040319,-808.580815,1922.192772, 0.093452,-0.638076,-0.764282,-679.407718,-824.046894,1931.329012, -0.098017,-0,0.995185,0,-1078.123237,1989.786957, -0.032813,-0,0.999462,-1.468161,-978.157452,1989.642356, 0.032813,0,0.999462,-1.468161,-1077.966399,1989.642356, -0.032813,-0,0.999462,-1.468161,-978.157452,1989.642356, -0.098017,-0,0.995185,0,-1078.123237,1989.786957, -0.098017,-0,0.995185,0,-978.310709,1989.786957, -0.098017,-0,0.995185,0,-978.310709,1989.786957, -0.098017,-0,0.995185,0,-1078.123237,1989.786957, -0.162803,-0,0.986659,7.311798,-977.633668,1990.507106, -0.162803,-0,0.986659,7.311798,-977.633668,1990.507106, -0.098017,-0,0.995185,0,-1078.123237,1989.786957, -0.227168,-0,0.973856,7.311798,-1077.464031,1990.507106, 0.587181,-0.587181,0.557168,660.670395,-660.670395,2455.64332, 0.51982,-0.710547,0.474247,554.192058,-829.407027,2361.464898, 0.62118,-0.639379,0.453133,705.352697,-705.352697,2361.464898, 0.51982,-0.710547,0.474247,554.192058,-829.407027,2361.464898, 0.587181,-0.587181,0.557168,660.670395,-660.670395,2455.64332, 0.438515,-0.705336,0.556961,519.085398,-776.866198,2455.64332, 0,0,1,519.085398,-776.866198,2455.64332, 0,0,1,660.670395,-660.670395,2455.64332, 0,0,1,642.325277,-675.725844,2455.64332, 0,0,-1,519.085398,-776.866198,2455.64332, 0,0,-1,642.325277,-675.725844,2455.64332, 0,0,-1,569.385776,-735.585746,2455.64332, 0.832671,-0.532692,0.151323,891.670534,-595.795203,2148.211628, 0.75819,-0.62223,0.19488,884.794335,-604.173876,2148.211628, 0.828508,-0.553591,0.084324,892.684338,-596.472605,2133.803565, 0.665498,-0.684813,0.29689,738.20855,-738.20855,2258.006804, 0.61434,-0.748575,0.249443,724.871896,-750.8761,2252.837783, 0.684548,-0.684548,0.250574,739.77113,-739.77113,2249.469127, 0.61434,-0.748575,0.249443,724.871896,-750.8761,2252.837783, 0.665498,-0.684813,0.29689,738.20855,-738.20855,2258.006804, 0.61434,-0.748575,0.249443,670.391152,-794.166513,2257.101517, 0.61434,-0.748575,0.249443,670.391152,-794.166513,2257.101517, 0.598874,-0.72973,0.329915,653.750225,-807.521706,2258.006804, 0.61434,-0.748575,0.249443,653.750225,-808.286792,2255.71079, 0.598874,-0.72973,0.329915,653.750225,-807.521706,2258.006804, 0.61434,-0.748575,0.249443,670.391152,-794.166513,2257.101517, 0.665498,-0.684813,0.29689,738.20855,-738.20855,2258.006804, 0.401793,-0.915697,0.007841,-644.00684,-861.844218,2011.592523, 0.392989,-0.915858,-0.082244,-731.724734,-900.26268,2019.846175, 0.37075,-0.899004,-0.2331,-643.970452,-861.831591,2011.202527, 0.392989,-0.915858,-0.082244,-731.724734,-900.26268,2019.846175, 0.401793,-0.915697,0.007841,-644.00684,-861.844218,2011.592523, 0.401793,-0.915697,0.007841,-644.327894,-861.580736,2058.811877, 0.392989,-0.915858,-0.082244,-731.724734,-900.26268,2019.846175, 0.401793,-0.915697,0.007841,-644.327894,-861.580736,2058.811877, 0.392379,-0.910791,0.128444,-731.284145,-899.775643,2054.145111, 0.392379,-0.910791,0.128444,-731.284145,-899.775643,2054.145111, 0.401793,-0.915697,0.007841,-644.327894,-861.580736,2058.811877, 0.376942,-0.89216,0.24893,-644.282481,-861.55593,2059.381644, -0.36191,-0.871342,0.331336,-399.515588,-964.515951,2258.006804, -0.577307,-0.804415,0.140118,-595.795203,-891.670534,2148.211628, -0.377668,-0.910562,0.168059,-410.390874,-990.771213,2148.211628, -0.577307,-0.804415,0.140118,-595.795203,-891.670534,2148.211628, -0.36191,-0.871342,0.331336,-399.515588,-964.515951,2258.006804, -0.538332,-0.779667,0.319873,-580.006736,-868.041423,2258.006804, 0.826255,-0.551707,-0.113678,704.675266,-470.848959,796.15315, 0.909392,-0.412143,0.056077,784.574342,-324.981333,855.371869, 0.811513,-0.581637,0.056077,706.098253,-471.799769,855.371869, 0.909392,-0.412143,0.056077,784.574342,-324.981333,855.371869, 0.826255,-0.551707,-0.113678,704.675266,-470.848959,796.15315, 0.918011,-0.379912,-0.113678,782.993204,-324.326404,796.15315, 0.887172,-0.366638,-0.280182,772.17609,-319.845809,738.078199, 0.974489,-0.193517,-0.113678,831.221151,-165.340167,796.15315, 0.918011,-0.379912,-0.113678,782.993204,-324.326404,796.15315, 0.974489,-0.193517,-0.113678,831.221151,-165.340167,796.15315, 0.887172,-0.366638,-0.280182,772.17609,-319.845809,738.078199, 0.941653,-0.186514,-0.280182,819.737765,-163.055979,738.078199, 0.167148,-0.984089,-0.060252,210.691412,-1059.217255,2011.592523, 0.098017,-0.995185,0,40.110651,-1076.017993,2017.42443, 0.097931,-0.994307,-0.041998,36.993432,-1076.325013,2011.592523, 0.098017,-0.995185,0,40.110651,-1076.017993,2017.42443, 0.167148,-0.984089,-0.060252,210.691412,-1059.217255,2011.592523, 0.168583,-0.985419,0.023006,210.691412,-1059.217255,2058.811877, 0.098017,-0.995185,0,40.110651,-1076.017993,2017.42443, 0.168583,-0.985419,0.023006,210.691412,-1059.217255,2058.811877, 0.098017,-0.995185,-0,42.671671,-1075.765755,2025.866979, 0.098017,-0.995185,-0,42.671671,-1075.765755,2025.866979, 0.168583,-0.985419,0.023006,210.691412,-1059.217255,2058.811877, 0.098017,-0.995185,-0,43.536421,-1075.680584,2034.646937, 0.098017,-0.995185,-0,43.536421,-1075.680584,2034.646937, 0.168583,-0.985419,0.023006,210.691412,-1059.217255,2058.811877, 0.098017,-0.995185,0,42.671671,-1075.765755,2043.426896, 0.098017,-0.995185,0,42.671671,-1075.765755,2043.426896, 0.168583,-0.985419,0.023006,210.691412,-1059.217255,2058.811877, 0.098017,-0.995185,-0,40.110651,-1076.017993,2051.869445, 0.098017,-0.995185,-0,40.110651,-1076.017993,2051.869445, 0.168583,-0.985419,0.023006,210.691412,-1059.217255,2058.811877, 0.097863,-0.993624,0.055991,36.399844,-1076.383476,2058.811877, 0.80808,-0.541317,-0.232341,-833.682296,-797.914759,2048.438454, 0.706214,-0.448152,-0.548107,-781.183382,-739.911027,2076.744949, 0.706214,-0.448152,-0.548107,-827.129718,-803.865138,2069.836076, 0.706214,-0.448152,-0.548107,-781.183382,-739.911027,2076.744949, 0.80808,-0.541317,-0.232341,-833.682296,-797.914759,2048.438454, 0.770593,-0.512719,-0.378558,-786.924742,-735.296195,2058.807508, 0.770593,-0.512719,-0.378558,-786.924742,-735.296195,2058.807508, 0.80808,-0.541317,-0.232341,-833.682296,-797.914759,2048.438454, 0.814584,-0.546562,-0.194222,-789.342859,-732.349615,2049.894341, 0.167148,-0.984089,-0.060252,210.691412,-1059.217255,2011.592523, 0.014463,-0.987633,-0.156114,0,-1072.403033,1922.192772, 0.215316,-0.958117,-0.188816,209.215453,-1051.797109,1922.192772, 0.014463,-0.987633,-0.156114,0,-1072.403033,1922.192772, 0.167148,-0.984089,-0.060252,210.691412,-1059.217255,2011.592523, 0.097671,-0.991674,-0.083921,7.311798,-1077.464031,1990.507106, 0.014463,-0.987633,-0.156114,0,-1072.403033,1922.192772, 0.097671,-0.991674,-0.083921,7.311798,-1077.464031,1990.507106, -0.032696,-0.995906,-0.084279,0,-1078.123237,1989.786957, 0.097671,-0.991674,-0.083921,7.311798,-1077.464031,1990.507106, 0.167148,-0.984089,-0.060252,210.691412,-1059.217255,2011.592523, 0.097671,-0.991674,-0.083921,15.754347,-1076.84924,1993.068126, 0.097671,-0.991674,-0.083921,15.754347,-1076.84924,1993.068126, 0.167148,-0.984089,-0.060252,210.691412,-1059.217255,2011.592523, 0.097671,-0.991674,-0.083921,23.535045,-1076.434855,1997.226995, 0.097671,-0.991674,-0.083921,23.535045,-1076.434855,1997.226995, 0.167148,-0.984089,-0.060252,210.691412,-1059.217255,2011.592523, 0.097671,-0.991674,-0.083921,30.354884,-1076.236801,2002.823893, 0.097671,-0.991674,-0.083921,30.354884,-1076.236801,2002.823893, 0.167148,-0.984089,-0.060252,210.691412,-1059.217255,2011.592523, 0.097671,-0.991674,-0.083921,35.951781,-1076.262688,2009.643732, 0.097671,-0.991674,-0.083921,35.951781,-1076.262688,2009.643732, 0.167148,-0.984089,-0.060252,210.691412,-1059.217255,2011.592523, 0.097931,-0.994307,-0.041998,36.993432,-1076.325013,2011.592523, -0.145329,-0.981317,0.126081,-209.215453,-1051.797109,2148.211628, -0.382396,-0.923034,0.0422,-413.286071,-997.760837,2058.811877, -0.150979,-0.98827,0.022991,-210.691412,-1059.217255,2058.811877, -0.382396,-0.923034,0.0422,-413.286071,-997.760837,2058.811877, -0.145329,-0.981317,0.126081,-209.215453,-1051.797109,2148.211628, -0.377668,-0.910562,0.168059,-410.390874,-990.771213,2148.211628, -0.369253,-0.814754,0.447021,-268.159753,-647.394912,1241.03564, -0.472298,-0.759676,0.447021,-441.215303,-660.325365,1054.17292, -0.315017,-0.837219,0.447021,-303.914386,-733.714234,1054.17292, -0.472298,-0.759676,0.447021,-441.215303,-660.325365,1054.17292, -0.369253,-0.814754,0.447021,-268.159753,-647.394912,1241.03564, -0.521108,-0.727062,0.447021,-389.30762,-582.640028,1241.03564, 0.941653,-0.186514,-0.280182,819.737765,-163.055979,738.078199, 0.985217,-0.097035,-0.141176,847.505736,0,796.15315, 0.974489,-0.193517,-0.113678,831.221151,-165.340167,796.15315, 0.985217,-0.097035,-0.141176,847.505736,0,796.15315, 0.941653,-0.186514,-0.280182,819.737765,-163.055979,738.078199, 0.947451,-0.093316,-0.305988,835.797377,0,738.078199, -0.019694,-0.599883,0.799845,0,-840.882244,914.026067, -0.097715,-0.592199,0.799845,-127.592879,-641.452722,1054.17292, -0.136347,-0.584514,0.799845,-164.047988,-824.724927,914.026067, -0.097715,-0.592199,0.799845,-127.592879,-641.452722,1054.17292, -0.019694,-0.599883,0.799845,0,-840.882244,914.026067, 0.019694,-0.599883,0.799845,0,-654.019524,1054.17292, 1,0,0,653.750225,-1033.56568,1987.582722, 1,0,0,653.750225,-1033.56568,2082.821632, 1,0,0,653.750225,-1038.255787,2035.202177, 1,0,0,653.750225,-1033.56568,2082.821632, 1,0,0,653.750225,-1033.56568,1987.582722, 1,0,0,653.750225,-1019.675597,1941.793256, 1,0,0,653.750225,-1033.56568,2082.821632, 1,0,0,653.750225,-1019.675597,1941.793256, 1,0,0,653.750225,-1019.675597,2128.611098, 1,0,0,653.750225,-1019.675597,2128.611098, 1,0,0,653.750225,-1019.675597,1941.793256, 1,0,0,653.750225,-1016.065853,2035.202177, 1,0,0,653.750225,-1016.065853,2035.202177, 1,0,0,653.750225,-1019.675597,1941.793256, 1,0,0,653.750225,-1011.80212,1991.911763, 1,0,0,653.750225,-1011.80212,1991.911763, 1,0,0,653.750225,-1019.675597,1941.793256, 1,0,0,653.750225,-997.119327,1899.593442, 1,0,0,653.750225,-1011.80212,1991.911763, 1,0,0,653.750225,-997.119327,1899.593442, 1,0,0,653.750225,-999.174772,1950.284976, 1,0,0,653.750225,-999.174772,1950.284976, 1,0,0,653.750225,-997.119327,1899.593442, 1,0,0,653.750225,-978.669071,1911.921509, 1,0,0,653.750225,-978.669071,1911.921509, 1,0,0,653.750225,-997.119327,1899.593442, 1,0,0,653.750225,-966.763694,1862.604996, 1,0,0,653.750225,-978.669071,1911.921509, 1,0,0,653.750225,-966.763694,1862.604996, 1,0,0,653.750225,-951.073041,1878.295649, 1,0,0,653.750225,-951.073041,1878.295649, 1,0,0,653.750225,-966.763694,1862.604996, 1,0,0,653.750225,-929.775248,1832.249363, 1,0,0,653.750225,-951.073041,1878.295649, 1,0,0,653.750225,-929.775248,1832.249363, 1,0,0,653.750225,-917.447181,1850.699619, 1,0,0,653.750225,-917.447181,1850.699619, 1,0,0,653.750225,-929.775248,1832.249363, 1,0,0,653.750225,-887.575434,1809.693092, 1,0,0,653.750225,-917.447181,1850.699619, 1,0,0,653.750225,-887.575434,1809.693092, 1,0,0,653.750225,-879.083714,1830.193918, 1,0,0,653.750225,-879.083714,1830.193918, 1,0,0,653.750225,-887.575434,1809.693092, 1,0,-0,653.750225,-841.785968,1795.80301, 1,0,0,653.750225,-879.083714,1830.193918, 1,0,-0,653.750225,-841.785968,1795.80301, 1,0,0,653.750225,-837.456927,1817.56657, 1,0,0,653.750225,-837.456927,1817.56657, 1,0,-0,653.750225,-841.785968,1795.80301, 1,0,-0,653.750225,-795.278099,1791.222384, 1,0,0,653.750225,-837.456927,1817.56657, 1,0,-0,653.750225,-795.278099,1791.222384, 1,0,0,653.750225,-807.521706,1812.397596, 1,0,0,653.750225,-837.456927,1817.56657, 1,0,0,653.750225,-807.521706,1812.397596, 1,0,0,653.750225,-808.286776,1814.693561, 1,0,0,653.750225,-1019.675597,2128.611098, 1,0,0,653.750225,-1011.80212,2078.49259, 1,0,0,653.750225,-997.119327,2170.810911, 1,0,0,653.750225,-1011.80212,2078.49259, 1,0,0,653.750225,-1019.675597,2128.611098, 1,0,0,653.750225,-1016.065853,2035.202177, 1,0,0,653.750225,-997.119327,2170.810911, 1,0,0,653.750225,-1011.80212,2078.49259, 1,0,0,653.750225,-999.174772,2120.119378, 1,0,0,653.750225,-997.119327,2170.810911, 1,0,0,653.750225,-999.174772,2120.119378, 1,0,0,653.750225,-978.669071,2158.482845, 1,0,0,653.750225,-997.119327,2170.810911, 1,0,0,653.750225,-978.669071,2158.482845, 1,0,0,653.750225,-966.763694,2207.799357, 1,0,0,653.750225,-966.763694,2207.799357, 1,0,0,653.750225,-978.669071,2158.482845, 1,0,0,653.750225,-951.073041,2192.108705, 1,0,0,653.750225,-966.763694,2207.799357, 1,0,0,653.750225,-951.073041,2192.108705, 1,0,0,653.750225,-929.775248,2238.154991, 1,0,0,653.750225,-929.775248,2238.154991, 1,0,0,653.750225,-951.073041,2192.108705, 1,0,0,653.750225,-917.447181,2219.704735, 1,0,0,653.750225,-929.775248,2238.154991, 1,0,0,653.750225,-917.447181,2219.704735, 1,0,0,653.750225,-887.575434,2260.711261, 1,0,0,653.750225,-887.575434,2260.711261, 1,0,0,653.750225,-917.447181,2219.704735, 1,0,0,653.750225,-879.083714,2240.210435, 1,0,0,653.750225,-887.575434,2260.711261, 1,0,0,653.750225,-879.083714,2240.210435, 1,0,0,653.750225,-841.785968,2274.601344, 1,0,0,653.750225,-841.785968,2274.601344, 1,0,0,653.750225,-879.083714,2240.210435, 1,0,0,653.750225,-837.456927,2252.837783, 1,0,0,653.750225,-841.785968,2274.601344, 1,0,0,653.750225,-837.456927,2252.837783, 1,0,0,653.750225,-795.278128,2279.181966, 1,0,0,653.750225,-795.278128,2279.181966, 1,0,0,653.750225,-837.456927,2252.837783, 1,-0,0,653.750225,-807.521706,2258.006804, 1,-0,0,653.750225,-807.521706,2258.006804, 1,0,0,653.750225,-837.456927,2252.837783, 1,0,0,653.750225,-808.286792,2255.71079, -0.15672,-0.796215,-0.584364,-152.95461,-768.954752,631.979457, -0.267337,-0.710498,-0.65094,-285.268899,-688.700045,587.016307, -0.123588,-0.749001,-0.65094,-145.428824,-731.120069,587.016307, -0.267337,-0.710498,-0.65094,-285.268899,-688.700045,587.016307, -0.15672,-0.796215,-0.584364,-152.95461,-768.954752,631.979457, -0.309043,-0.750341,-0.584364,-300.03126,-724.339538,631.979457, 0.729928,-0.683524,0,594.593537,-594.593537,2455.64332, 0.77301,-0.634393,-0,635.110016,-545.224064,2549.07468, 0.683524,-0.729928,0,594.593537,-594.593537,2549.07468, 0.77301,-0.634393,-0,635.110016,-545.224064,2549.07468, 0.729928,-0.683524,0,594.593537,-594.593537,2455.64332, 0.820367,-0.571838,-0,699.168033,-467.169144,2455.64332, 0.77301,-0.634393,-0,635.110016,-545.224064,2549.07468, 0.820367,-0.571838,-0,699.168033,-467.169144,2455.64332, 0.77301,-0.634393,-0,689.000383,-479.558461,2549.07468, 0.77301,-0.634393,-0,689.000383,-479.558461,2549.07468, 0.820367,-0.571838,-0,699.168033,-467.169144,2455.64332, 0.83147,-0.55557,-0,699.168033,-467.169144,2549.07468, -0.188671,-0.808825,0.556961,-182.278552,-916.376162,2455.64332, -0.335858,-0.807337,0.485186,-381.734129,-921.587711,2361.464898, -0.171901,-0.857347,0.485186,-194.606371,-978.352295,2361.464898, -0.335858,-0.807337,0.485186,-381.734129,-921.587711,2361.464898, -0.188671,-0.808825,0.556961,-182.278552,-916.376162,2455.64332, -0.34284,-0.756475,0.556961,-357.552241,-863.20747,2455.64332, 0,0,-1,-357.552241,-863.20747,2455.64332, 0,0,-1,-182.278552,-916.376162,2455.64332, 0,0,-1,-233.261861,-900.910544,2455.64332, 0,0,-1,-357.552241,-863.20747,2455.64332, 0,0,-1,-233.261861,-900.910544,2455.64332, 0,0,-1,-323.520318,-873.530941,2455.64332, -0.227168,-0.973856,-0,-164.047988,-824.724927,2549.07468, -0.352162,-0.935939,-0,-321.791703,-776.873894,2455.64332, -0.162803,-0.986659,0,-164.047988,-824.724927,2455.64332, -0.352162,-0.935939,-0,-321.791703,-776.873894,2455.64332, -0.227168,-0.973856,-0,-164.047988,-824.724927,2549.07468, -0.412792,-0.910825,-0,-321.791703,-776.873894,2549.07468, 0,0,-1,-321.791703,-776.873894,2549.07468, 0,0,-1,-164.047988,-824.724927,2549.07468, 0,0,-1,-209.932195,-810.806105,2549.07468, 0,0,1,-321.791703,-776.873894,2549.07468, 0,0,1,-209.932195,-810.806105,2549.07468, 0,0,1,-291.163467,-786.164868,2549.07468, -0.17413,-0.881651,-0.438601,-158.887376,-798.780783,682.822311, -0.309043,-0.750341,-0.584364,-300.03126,-724.339538,631.979457, -0.15672,-0.796215,-0.584364,-152.95461,-768.954752,631.979457, -0.309043,-0.750341,-0.584364,-300.03126,-724.339538,631.979457, -0.17413,-0.881651,-0.438601,-158.887376,-798.780783,682.822311, -0.342785,-0.830739,-0.438601,-311.6688,-752.435044,682.822311, -0.186514,-0.941653,-0.280182,-163.055979,-819.737765,738.078199, -0.342785,-0.830739,-0.438601,-311.6688,-752.435044,682.822311, -0.17413,-0.881651,-0.438601,-158.887376,-798.780783,682.822311, -0.342785,-0.830739,-0.438601,-311.6688,-752.435044,682.822311, -0.186514,-0.941653,-0.280182,-163.055979,-819.737765,738.078199, -0.366638,-0.887172,-0.280182,-319.845809,-772.17609,738.078199, -0.193517,-0.974489,-0.113678,-165.340167,-831.221151,796.15315, -0.366638,-0.887172,-0.280182,-319.845809,-772.17609,738.078199, -0.186514,-0.941653,-0.280182,-163.055979,-819.737765,738.078199, -0.366638,-0.887172,-0.280182,-319.845809,-772.17609,738.078199, -0.193517,-0.974489,-0.113678,-165.340167,-831.221151,796.15315, -0.379912,-0.918011,-0.113678,-324.326404,-782.993204,796.15315, 0.440459,-0.824041,0.356303,533.995171,-892.635117,2258.006804, 0.366496,-0.808673,0.460139,381.734129,-921.587711,2361.464898, 0.393751,-0.867338,0.304443,399.515588,-964.515951,2258.006804, 0.366496,-0.808673,0.460139,381.734129,-921.587711,2361.464898, 0.440459,-0.824041,0.356303,533.995171,-892.635117,2258.006804, 0.430365,-0.805157,0.408054,540.89692,-887.575434,2260.711261, 0.366496,-0.808673,0.460139,381.734129,-921.587711,2361.464898, 0.430365,-0.805157,0.408054,540.89692,-887.575434,2260.711261, 0.481686,-0.774776,0.409514,577.578294,-864.407003,2267.739328, 0.366496,-0.808673,0.460139,381.734129,-921.587711,2361.464898, 0.481686,-0.774776,0.409514,577.578294,-864.407003,2267.739328, 0.51982,-0.710547,0.474247,554.192058,-829.407027,2361.464898, 0.194135,-0.974366,-0.113678,165.340167,-831.221151,796.15315, 0.000777,-0.959946,-0.280182,0,-835.797377,738.078199, 0.188038,-0.94135,-0.280182,163.055979,-819.737765,738.078199, 0.000777,-0.959946,-0.280182,0,-835.797377,738.078199, 0.194135,-0.974366,-0.113678,165.340167,-831.221151,796.15315, 0.000315,-0.993518,-0.113678,0,-847.505736,796.15315, -0.910916,-0.376813,0.168059,-990.771213,-410.390874,2148.211628, -0.972989,-0.226965,0.042178,-1059.217255,-210.691412,2058.811877, -0.910015,-0.412425,0.042178,-997.760837,-413.286071,2058.811877, -0.972989,-0.226965,0.042178,-1059.217255,-210.691412,2058.811877, -0.910916,-0.376813,0.168059,-990.771213,-410.390874,2148.211628, -0.966926,-0.191862,0.168059,-1051.797109,-209.215453,2148.211628, 0,0.707107,-0.707107,180.675225,-951.073041,2192.108705, 0,0.812792,-0.582554,653.750225,-978.669071,2158.482845, 0,0.849252,-0.527988,180.675225,-978.669071,2158.482845, 0,0.812792,-0.582554,653.750225,-978.669071,2158.482845, 0,0.707107,-0.707107,180.675225,-951.073041,2192.108705, 0,0.707107,-0.707107,653.750225,-951.073041,2192.108705, 0,0.935939,-0.352162,180.675225,-999.174772,2120.119378, 0,0.973856,-0.227168,653.750225,-1011.80212,2078.49259, 0,0.986659,-0.162803,180.675225,-1011.80212,2078.49259, 0,0.973856,-0.227168,653.750225,-1011.80212,2078.49259, 0,0.935939,-0.352162,180.675225,-999.174772,2120.119378, 0,0.910825,-0.412792,653.750225,-999.174772,2120.119378, 0.587879,-0.48246,-0.649331,610.800046,-425.129379,587.016307, 0.592439,-0.554776,-0.584157,554.385481,-554.385481,631.979457, 0.518883,-0.55411,-0.65094,527.108195,-527.108195,587.016307, 0.592439,-0.554776,-0.584157,554.385481,-554.385481,631.979457, 0.587879,-0.48246,-0.649331,610.800046,-425.129379,587.016307, 0.675632,-0.449489,-0.584364,651.888362,-435.577878,631.979457, 0.675632,-0.449489,-0.584364,651.888362,-435.577878,631.979457, 0.587879,-0.48246,-0.649331,610.800046,-425.129379,587.016307, 0.644692,-0.400811,-0.65094,619.813666,-414.146251,587.016307, 0,-0.720896,0.693044,653.750225,-966.763694,2207.799357, 0.144571,-0.892809,0.426605,369.410361,-997.119327,2170.810911, 0,-0.85779,0.514001,653.750225,-997.119327,2170.810911, 0.144571,-0.892809,0.426605,369.410361,-997.119327,2170.810911, 0,-0.720896,0.693044,653.750225,-966.763694,2207.799357, 0.14518,-0.877819,0.456461,406.150729,-980.534599,2191.019462, 0.14518,-0.877819,0.456461,406.150729,-980.534599,2191.019462, 0,-0.720896,0.693044,653.750225,-966.763694,2207.799357, 0,-0.707107,0.707107,422.745234,-966.763694,2207.799357, 0.710498,-0.267337,-0.65094,688.700045,-285.268899,587.016307, 0.787008,-0.166056,-0.594175,768.954752,-152.95461,631.979457, 0.731226,-0.321864,-0.601425,724.339538,-300.03126,631.979457, 0.787008,-0.166056,-0.594175,768.954752,-152.95461,631.979457, 0.710498,-0.267337,-0.65094,688.700045,-285.268899,587.016307, 0.727759,-0.220763,-0.649331,707.864018,-222.093747,587.016307, 0.787008,-0.166056,-0.594175,768.954752,-152.95461,631.979457, 0.727759,-0.220763,-0.649331,707.864018,-222.093747,587.016307, 0.749001,-0.123588,-0.65094,731.120069,-145.428824,587.016307, 0.871137,-0.203207,0.447021,778.906876,-154.934211,1054.17292, 0.837219,-0.315017,0.447021,647.394912,-268.159753,1241.03564, 0.814754,-0.369253,0.447021,733.714234,-303.914386,1054.17292, 0.837219,-0.315017,0.447021,647.394912,-268.159753,1241.03564, 0.871137,-0.203207,0.447021,778.906876,-154.934211,1054.17292, 0.882589,-0.145631,0.447021,687.270773,-136.706657,1241.03564, -0.191744,-0.873668,0.447144,-154.934211,-778.906876,1614.76108, -0.259888,-0.856737,0.445488,-221.595076,-855.850894,1427.89836, -0.174494,-0.877241,0.447214,-173.161765,-870.542978,1427.89836, -0.259888,-0.856737,0.445488,-221.595076,-855.850894,1427.89836, -0.191744,-0.873668,0.447144,-154.934211,-778.906876,1614.76108, -0.259888,-0.856737,0.445488,-307.339193,-829.840701,1427.89836, -0.259888,-0.856737,0.445488,-307.339193,-829.840701,1427.89836, -0.358504,-0.819473,0.447144,-303.914386,-733.714234,1614.76108, -0.342282,-0.826343,0.447214,-339.66902,-820.033555,1427.89836, -0.358504,-0.819473,0.447144,-303.914386,-733.714234,1614.76108, -0.259888,-0.856737,0.445488,-307.339193,-829.840701,1427.89836, -0.191744,-0.873668,0.447144,-154.934211,-778.906876,1614.76108, -0.167565,-0.847548,-0.503571,-194.606371,-978.352295,1708.939502, -0.241413,-0.795831,-0.555314,-233.261862,-900.910544,1614.76108, -0.162003,-0.814444,-0.557168,-182.278552,-916.376162,1614.76108, -0.241413,-0.795831,-0.555314,-233.261862,-900.910544,1614.76108, -0.167565,-0.847548,-0.503571,-194.606371,-978.352295,1708.939502, -0.241413,-0.795831,-0.555314,-323.520318,-873.530941,1614.76108, -0.241413,-0.795831,-0.555314,-323.520318,-873.530941,1614.76108, -0.329694,-0.798573,-0.503571,-381.734129,-921.587711,1708.939502, -0.31778,-0.767189,-0.557168,-357.552241,-863.20747,1614.76108, -0.329694,-0.798573,-0.503571,-381.734129,-921.587711,1708.939502, -0.241413,-0.795831,-0.555314,-323.520318,-873.530941,1614.76108, -0.167565,-0.847548,-0.503571,-194.606371,-978.352295,1708.939502, -0.819881,-0.571538,0.033755,-897.96103,-599.998378,2058.811877, -0.772328,-0.633835,-0.041994,-818.480102,-696.846173,2011.592491, -0.771796,-0.633401,0.055987,-818.273878,-697.096462,2058.801607, -0.772328,-0.633835,-0.041994,-818.480102,-696.846173,2011.592491, -0.819881,-0.571538,0.033755,-897.96103,-599.998378,2058.811877, -0.841785,-0.538757,-0.033753,-897.96103,-599.998378,2011.592523, 0.117054,-0.588471,0.8,164.047988,-824.724927,914.026067, 0.019694,-0.599883,0.799845,0,-654.019524,1054.17292, -0.019694,-0.599883,0.799845,0,-840.882244,914.026067, 0.019694,-0.599883,0.799845,0,-654.019524,1054.17292, 0.117054,-0.588471,0.8,164.047988,-824.724927,914.026067, 0.117054,-0.588471,0.8,127.592879,-641.452722,1054.17292, 0,0.910825,0.412792,180.675225,-999.174772,1950.284976, 0,0.849252,0.527988,653.750225,-978.669071,1911.921509, 0,0.812792,0.582554,180.675225,-978.669071,1911.921509, 0,0.849252,0.527988,653.750225,-978.669071,1911.921509, 0,0.910825,0.412792,180.675225,-999.174772,1950.284976, 0,0.935939,0.352162,653.750225,-999.174772,1950.284976, 0.925561,-0.183175,-0.331336,1023.924672,-203.671281,1812.397596, 0.976104,-0.096138,-0.19488,1072.403033,0,1922.192772, 0.966926,-0.191862,-0.168059,1051.797109,-209.215453,1922.192772, 0.976104,-0.096138,-0.19488,1072.403033,0,1922.192772, 0.925561,-0.183175,-0.331336,1023.924672,-203.671281,1812.397596, 0.929871,-0.091584,-0.356303,1043.984543,0,1812.397596, -0,0.032813,-0.999462,670.391152,-794.166513,2257.101517, -0,0.146613,-0.989194,180.675225,-837.456927,2252.837783, 0,-0.032813,-0.999462,180.675225,-794.166513,2257.101517, -0,0.146613,-0.989194,180.675225,-837.456927,2252.837783, -0,0.032813,-0.999462,670.391152,-794.166513,2257.101517, -0,0.098017,-0.995185,653.750225,-808.286792,2255.71079, 0,0.227168,-0.973856,653.750225,-837.456927,2252.837783, -0,0.146613,-0.989194,180.675225,-837.456927,2252.837783, -0,0.098017,-0.995185,653.750225,-808.286792,2255.71079, 0.456496,-0.854043,0.249443,422.745234,-966.763694,2207.799357, 0.393751,-0.867338,0.304443,399.515588,-964.515951,2258.006804, 0.340939,-0.906111,0.250448,406.150729,-980.534599,2191.019462, 0.393751,-0.867338,0.304443,399.515588,-964.515951,2258.006804, 0.456496,-0.854043,0.249443,422.745234,-966.763694,2207.799357, 0.456496,-0.854043,0.249443,475.358507,-929.775248,2238.154991, 0.393751,-0.867338,0.304443,399.515588,-964.515951,2258.006804, 0.456496,-0.854043,0.249443,475.358507,-929.775248,2238.154991, 0.440459,-0.824041,0.356303,533.995171,-892.635117,2258.006804, -0.098017,-0.995185,-0,-43.046973,-1075.728791,2017.42443, -0.150758,-0.986668,-0.06131,-210.691412,-1059.217255,2011.592523, -0.097931,-0.994307,-0.041998,-39.929753,-1076.03581,2011.592523, -0.150758,-0.986668,-0.06131,-210.691412,-1059.217255,2011.592523, -0.098017,-0.995185,-0,-43.046973,-1075.728791,2017.42443, -0.150979,-0.98827,0.022991,-210.691412,-1059.217255,2058.811877, -0.150979,-0.98827,0.022991,-210.691412,-1059.217255,2058.811877, -0.098017,-0.995185,-0,-43.046973,-1075.728791,2017.42443, -0.098017,-0.995185,-0,-45.607992,-1075.476552,2025.866979, -0.150979,-0.98827,0.022991,-210.691412,-1059.217255,2058.811877, -0.098017,-0.995185,-0,-45.607992,-1075.476552,2025.866979, -0.098017,-0.995185,-0,-46.472742,-1075.391382,2034.646937, -0.150979,-0.98827,0.022991,-210.691412,-1059.217255,2058.811877, -0.098017,-0.995185,-0,-46.472742,-1075.391382,2034.646937, -0.098017,-0.995185,0,-45.607992,-1075.476552,2043.426896, -0.150979,-0.98827,0.022991,-210.691412,-1059.217255,2058.811877, -0.098017,-0.995185,0,-45.607992,-1075.476552,2043.426896, -0.098017,-0.995185,0,-43.046973,-1075.728791,2051.869445, -0.150979,-0.98827,0.022991,-210.691412,-1059.217255,2058.811877, -0.098017,-0.995185,0,-43.046973,-1075.728791,2051.869445, -0.097931,-0.994307,0.041998,-39.336165,-1076.094273,2058.811877, -0.925561,-0.183175,-0.331336,-1023.924672,-203.671281,1812.397596, -0.79057,-0.348586,-0.503476,-921.587711,-381.734129,1708.939502, -0.872041,-0.360223,-0.331336,-964.515951,-399.515588,1812.397596, -0.79057,-0.348586,-0.503476,-921.587711,-381.734129,1708.939502, -0.925561,-0.183175,-0.331336,-1023.924672,-203.671281,1812.397596, -0.843385,-0.187656,-0.503476,-978.352295,-194.606371,1708.939502, -0.966926,-0.191862,-0.168059,-1051.797109,-209.215453,1922.192772, -0.872041,-0.360223,-0.331336,-964.515951,-399.515588,1812.397596, -0.910916,-0.376813,-0.168059,-990.771213,-410.390874,1922.192772, -0.872041,-0.360223,-0.331336,-964.515951,-399.515588,1812.397596, -0.966926,-0.191862,-0.168059,-1051.797109,-209.215453,1922.192772, -0.925561,-0.183175,-0.331336,-1023.924672,-203.671281,1812.397596, -0.634393,-0.77301,-0,-680.414811,-831.964968,2020.575089, -0.688905,-0.723623,-0.042187,-763.653083,-763.653083,2011.592523, -0.633834,-0.772328,-0.041998,-683.32915,-829.573232,2011.592523, -0.688905,-0.723623,-0.042187,-763.653083,-763.653083,2011.592523, -0.634393,-0.77301,-0,-680.414811,-831.964968,2020.575089, -0.683228,-0.729664,0.028116,-763.653083,-763.653083,2058.811877, -0.683228,-0.729664,0.028116,-763.653083,-763.653083,2058.811877, -0.634393,-0.77301,-0,-680.414811,-831.964968,2020.575089, -0.634393,-0.77301,-0,-680.521947,-831.877044,2050.149043, -0.683228,-0.729664,0.028116,-763.653083,-763.653083,2058.811877, -0.634393,-0.77301,-0,-680.521947,-831.877044,2050.149043, -0.633398,-0.771798,0.055991,-683.397325,-829.517282,2058.811877, 0.814754,-0.369253,0.447021,733.714234,-303.914386,1054.17292, 0.759676,-0.472298,0.447021,582.640028,-389.30762,1241.03564, 0.727062,-0.521108,0.447021,660.325365,-441.215303,1054.17292, 0.759676,-0.472298,0.447021,582.640028,-389.30762,1241.03564, 0.814754,-0.369253,0.447021,733.714234,-303.914386,1054.17292, 0.837219,-0.315017,0.447021,647.394912,-268.159753,1241.03564, -0.819473,-0.358504,0.447144,-733.714234,-303.914386,1614.76108, -0.856737,-0.259888,0.445488,-842.852042,-264.446548,1427.89836, -0.826343,-0.342282,0.447214,-820.033555,-339.66902,1427.89836, -0.856737,-0.259888,0.445488,-842.852042,-264.446548,1427.89836, -0.819473,-0.358504,0.447144,-733.714234,-303.914386,1614.76108, -0.873668,-0.191744,0.447144,-778.906876,-154.934211,1614.76108, -0.856737,-0.259888,0.445488,-842.852042,-264.446548,1427.89836, -0.873668,-0.191744,0.447144,-778.906876,-154.934211,1614.76108, -0.856737,-0.259888,0.445488,-868.904109,-178.564394,1427.89836, -0.856737,-0.259888,0.445488,-868.904109,-178.564394,1427.89836, -0.873668,-0.191744,0.447144,-778.906876,-154.934211,1614.76108, -0.877241,-0.174494,0.447214,-870.542978,-173.161765,1427.89836, -0.843385,-0.187656,-0.503476,-978.352295,-194.606371,1708.939502, -0.777333,-0.292484,-0.556961,-863.20747,-357.552241,1614.76108, -0.79057,-0.348586,-0.503476,-921.587711,-381.734129,1708.939502, -0.777333,-0.292484,-0.556961,-863.20747,-357.552241,1614.76108, -0.843385,-0.187656,-0.503476,-978.352295,-194.606371,1708.939502, -0.795831,-0.241413,-0.555314,-887.227324,-278.369395,1614.76108, -0.795831,-0.241413,-0.555314,-887.227324,-278.369395,1614.76108, -0.843385,-0.187656,-0.503476,-978.352295,-194.606371,1708.939502, -0.795831,-0.241413,-0.555314,-914.651019,-187.965588,1614.76108, -0.795831,-0.241413,-0.555314,-914.651019,-187.965588,1614.76108, -0.843385,-0.187656,-0.503476,-978.352295,-194.606371,1708.939502, -0.819458,-0.135214,-0.556961,-916.376162,-182.278552,1614.76108, 0.747902,-0.498268,-0.438601,677.173649,-452.472967,682.822311, 0.887172,-0.366638,-0.280182,772.17609,-319.845809,738.078199, 0.798598,-0.532672,-0.280182,694.940121,-464.344144,738.078199, 0.887172,-0.366638,-0.280182,772.17609,-319.845809,738.078199, 0.747902,-0.498268,-0.438601,677.173649,-452.472967,682.822311, 0.830739,-0.342785,-0.438601,752.435044,-311.6688,682.822311, -0.342785,-0.830739,-0.438601,-311.6688,-752.435044,682.822311, -0.449489,-0.675632,-0.584364,-435.577878,-651.888362,631.979457, -0.309043,-0.750341,-0.584364,-300.03126,-724.339538,631.979457, -0.449489,-0.675632,-0.584364,-435.577878,-651.888362,631.979457, -0.342785,-0.830739,-0.438601,-311.6688,-752.435044,682.822311, -0.498268,-0.747902,-0.438601,-452.472967,-677.173649,682.822311, -0.366638,-0.887172,-0.280182,-319.845809,-772.17609,738.078199, -0.498268,-0.747902,-0.438601,-452.472967,-677.173649,682.822311, -0.342785,-0.830739,-0.438601,-311.6688,-752.435044,682.822311, -0.498268,-0.747902,-0.438601,-452.472967,-677.173649,682.822311, -0.366638,-0.887172,-0.280182,-319.845809,-772.17609,738.078199, -0.532672,-0.798598,-0.280182,-464.344144,-694.940121,738.078199, -0.986659,-0,-0.162803,42.671671,-976.334157,2043.426896, -0.999806,-0,-0.019694,43.536421,-1075.680584,2034.646937, -0.973856,-0,-0.227168,42.671671,-1075.765755,2043.426896, -0.999806,-0,-0.019694,43.536421,-1075.680584,2034.646937, -0.986659,-0,-0.162803,42.671671,-976.334157,2043.426896, -0.995185,-0,-0.098017,43.481732,-976.746707,2035.2022, -1,-0,-0,43.536421,-976.708082,2034.646937, -0.999806,-0,-0.019694,43.536421,-1075.680584,2034.646937, -0.995185,-0,-0.098017,43.481732,-976.746707,2035.2022, 0.729928,0,0.683524,-33.291206,-1075.947599,2002.823893, 0.83147,0,0.55557,-38.888103,-975.6692,2009.643732, 0.849252,-0,0.527988,-38.888103,-1075.973486,2009.643732, 0.83147,0,0.55557,-38.888103,-975.6692,2009.643732, 0.729928,0,0.683524,-33.291206,-1075.947599,2002.823893, 0.683524,-0,0.729928,-33.291206,-975.812207,2002.823893, -0.837219,-0.315017,0.447021,-690.554573,-286.03707,1427.89836, -0.871137,-0.203207,0.447021,-824.724927,-164.047988,1241.03564, -0.814754,-0.369253,0.447021,-776.873894,-321.791703,1241.03564, -0.871137,-0.203207,0.447021,-824.724927,-164.047988,1241.03564, -0.837219,-0.315017,0.447021,-690.554573,-286.03707,1427.89836, -0.882589,-0.145631,0.447021,-733.088824,-145.820434,1427.89836, 0.675632,-0.449489,-0.584364,651.888362,-435.577878,631.979457, 0.830739,-0.342785,-0.438601,752.435044,-311.6688,682.822311, 0.747902,-0.498268,-0.438601,677.173649,-452.472967,682.822311, 0.830739,-0.342785,-0.438601,752.435044,-311.6688,682.822311, 0.675632,-0.449489,-0.584364,651.888362,-435.577878,631.979457, 0.731226,-0.321864,-0.601425,724.339538,-300.03126,631.979457, -0.032813,-0.999462,0,0,-840.882244,2549.07468, -0.162803,-0.986659,0,-164.047988,-824.724927,2455.64332, 0.032813,-0.999462,0,0,-840.882244,2455.64332, -0.162803,-0.986659,0,-164.047988,-824.724927,2455.64332, -0.032813,-0.999462,0,0,-840.882244,2549.07468, -0.227168,-0.973856,-0,-164.047988,-824.724927,2549.07468, 0,0,-1,-164.047988,-824.724927,2549.07468, 0,0,-1,0,-840.882244,2549.07468, 0,0,-1,-42.432781,-836.702979,2549.07468, 0,0,1,-164.047988,-824.724927,2549.07468, 0,0,1,-42.432781,-836.702979,2549.07468, 0,0,1,-126.903621,-828.383328,2549.07468, -0.811513,-0.581637,0.056077,-706.098253,-471.799769,855.371869, -0.704523,-0.704523,-0.085417,-599.277053,-599.277053,796.15315, -0.691243,-0.718915,0.073102,-600.487204,-600.487204,855.371869, -0.704523,-0.704523,-0.085417,-599.277053,-599.277053,796.15315, -0.811513,-0.581637,0.056077,-706.098253,-471.799769,855.371869, -0.826255,-0.551707,-0.113678,-704.675266,-470.848959,796.15315, 0.55557,-0,-0.83147,-26.471367,-976.215347,2072.06688, 0.382683,-0,-0.92388,-18.690668,-1076.654017,2076.225749, 0.55557,-0,-0.83147,-26.471367,-1076.239632,2072.06688, 0.382683,-0,-0.92388,-18.690668,-1076.654017,2076.225749, 0.55557,-0,-0.83147,-26.471367,-976.215347,2072.06688, 0.382683,0,-0.92388,-18.690668,-976.732727,2076.225749, -0.412792,-0.910825,-0,-321.791703,-776.873894,2549.07468, -0.527988,-0.849252,-0,-467.169144,-699.168033,2455.64332, -0.352162,-0.935939,-0,-321.791703,-776.873894,2455.64332, -0.527988,-0.849252,-0,-467.169144,-699.168033,2455.64332, -0.412792,-0.910825,-0,-321.791703,-776.873894,2549.07468, -0.582554,-0.812792,-0,-467.169144,-699.168033,2549.07468, 0,0,-1,-467.169144,-699.168033,2549.07468, 0,0,-1,-321.791703,-776.873894,2549.07468, 0,0,-1,-368.760189,-751.768716,2549.07468, 0,0,1,-467.169144,-699.168033,2549.07468, 0,0,1,-368.760189,-751.768716,2549.07468, 0,0,1,-443.63534,-711.747113,2549.07468, -0.309043,-0.750341,-0.584364,-300.03126,-724.339538,631.979457, -0.400811,-0.644692,-0.65094,-414.146251,-619.813666,587.016307, -0.267337,-0.710498,-0.65094,-285.268899,-688.700045,587.016307, -0.400811,-0.644692,-0.65094,-414.146251,-619.813666,587.016307, -0.309043,-0.750341,-0.584364,-300.03126,-724.339538,631.979457, -0.449489,-0.675632,-0.584364,-435.577878,-651.888362,631.979457, 0.561756,-0.21137,0.799845,776.873894,-321.791703,914.026067, 0.584514,-0.136347,0.799845,641.452722,-127.592879,1054.17292, 0.546683,-0.247761,0.799845,604.235252,-250.282436,1054.17292, 0.584514,-0.136347,0.799845,641.452722,-127.592879,1054.17292, 0.561756,-0.21137,0.799845,776.873894,-321.791703,914.026067, 0.592199,-0.097715,0.799845,824.724927,-164.047988,914.026067, 0.55557,-0,-0.83147,-26.471367,-976.215347,2072.06688, 0.707107,-0,-0.707107,-33.291206,-1076.041578,2066.469982, 0.707107,0,-0.707107,-33.291206,-975.878684,2066.469982, 0.707107,-0,-0.707107,-33.291206,-1076.041578,2066.469982, 0.55557,-0,-0.83147,-26.471367,-976.215347,2072.06688, 0.55557,-0,-0.83147,-26.471367,-1076.239632,2072.06688, 0,-0.720896,0.693044,653.750225,-966.763694,2207.799357, 0,-0.582554,0.812792,475.358507,-929.775248,2238.154991, 0,-0.707107,0.707107,422.745234,-966.763694,2207.799357, 0,-0.582554,0.812792,475.358507,-929.775248,2238.154991, 0,-0.720896,0.693044,653.750225,-966.763694,2207.799357, -0,-0.514001,0.85779,653.750225,-929.775248,2238.154991, 0,-0.471397,-0.881921,533.995007,-892.635204,1812.397596, 0,-0.514001,-0.85779,653.750225,-929.775248,1832.249363, 0,-0.582554,-0.812792,475.358482,-929.775248,1832.249363, 0,-0.514001,-0.85779,653.750225,-929.775248,1832.249363, 0,-0.471397,-0.881921,533.995007,-892.635204,1812.397596, 0,-0.412792,-0.910825,540.896876,-887.575434,1809.693092, 0,-0.514001,-0.85779,653.750225,-929.775248,1832.249363, 0,-0.412792,-0.910825,540.896876,-887.575434,1809.693092, 0,-0.336778,-0.941584,653.750225,-887.575434,1809.693092, 0.901839,-0.40872,0.140121,990.771213,-410.390874,2148.211628, 0.769936,-0.566074,0.294549,868.041423,-580.006736,2258.006804, 0.832671,-0.532692,0.151323,891.670534,-595.795203,2148.211628, 0.769936,-0.566074,0.294549,868.041423,-580.006736,2258.006804, 0.901839,-0.40872,0.140121,990.771213,-410.390874,2148.211628, 0.872041,-0.360223,0.331336,964.515951,-399.515588,2258.006804, -0.790546,0.249135,-0.559436,-845.012276,-788.258547,1988.011282, -0.637426,0.090042,-0.765232,-781.354664,-731.718944,1933.517963, -0.637426,0.090042,-0.765232,-828.138788,-805.72305,1963.780621, -0.637426,0.090042,-0.765232,-781.354664,-731.718944,1933.517963, -0.790546,0.249135,-0.559436,-845.012276,-788.258547,1988.011282, -0.837602,0.298772,-0.457337,-804.883918,-707.527533,1967.257586, -0.150979,-0.98827,0.022991,-210.691412,-1059.217255,2058.811877, -0.382289,-0.923079,-0.0422,-413.286071,-997.760837,2011.592523, -0.150758,-0.986668,-0.06131,-210.691412,-1059.217255,2011.592523, -0.382289,-0.923079,-0.0422,-413.286071,-997.760837,2011.592523, -0.150979,-0.98827,0.022991,-210.691412,-1059.217255,2058.811877, -0.382396,-0.923034,0.0422,-413.286071,-997.760837,2058.811877, 0.644692,-0.400811,-0.65094,619.813666,-414.146251,587.016307, 0.731226,-0.321864,-0.601425,724.339538,-300.03126,631.979457, 0.675632,-0.449489,-0.584364,651.888362,-435.577878,631.979457, 0.731226,-0.321864,-0.601425,724.339538,-300.03126,631.979457, 0.644692,-0.400811,-0.65094,619.813666,-414.146251,587.016307, 0.670707,-0.3585,-0.649331,648.718891,-360.068379,587.016307, 0.731226,-0.321864,-0.601425,724.339538,-300.03126,631.979457, 0.670707,-0.3585,-0.649331,648.718891,-360.068379,587.016307, 0.670707,-0.3585,-0.649331,684.232405,-293.627267,587.016307, 0.731226,-0.321864,-0.601425,724.339538,-300.03126,631.979457, 0.670707,-0.3585,-0.649331,684.232405,-293.627267,587.016307, 0.710498,-0.267337,-0.65094,688.700045,-285.268899,587.016307, 0.000913,-0.943512,-0.331336,0,-1043.984543,1812.397596, -0.167565,-0.847548,-0.503571,-194.606371,-978.352295,1708.939502, 0.001003,-0.863953,-0.503571,0,-997.51935,1708.939502, -0.167565,-0.847548,-0.503571,-194.606371,-978.352295,1708.939502, 0.000913,-0.943512,-0.331336,0,-1043.984543,1812.397596, -0.183175,-0.925561,-0.331336,-203.671281,-1023.924672,1812.397596, -0.369253,-0.814754,0.447021,-286.03707,-690.554573,1427.89836, -0.472298,-0.759676,0.447021,-467.169144,-699.168033,1241.03564, -0.315017,-0.837219,0.447021,-321.791703,-776.873894,1241.03564, -0.472298,-0.759676,0.447021,-467.169144,-699.168033,1241.03564, -0.369253,-0.814754,0.447021,-286.03707,-690.554573,1427.89836, -0.521108,-0.727062,0.447021,-415.261462,-621.482696,1427.89836, 0,0,1,-925.063958,-94.069883,2455.64332, 0,0,1,-840.882244,0,2455.64332, 0,0,1,-934.329033,0,2455.64332, 0,0,1,-840.882244,0,2455.64332, 0,0,1,-925.063958,-94.069883,2455.64332, 0,0,1,-916.376162,-182.278552,2455.64332, 0,0,1,-840.882244,0,2455.64332, 0,0,1,-916.376162,-182.278552,2455.64332, 0,0,1,-914.651019,-187.965588,2455.64332, 0,0,1,-840.882244,0,2455.64332, 0,0,1,-914.651019,-187.965588,2455.64332, 0,0,1,-887.227323,-278.369396,2455.64332, 0,0,1,-840.882244,0,2455.64332, 0,0,1,-887.227323,-278.369396,2455.64332, 0,0,1,-863.20747,-357.552241,2455.64332, 0,0,1,-840.882244,0,2455.64332, 0,0,1,-863.20747,-357.552241,2455.64332, 0,0,1,-857.607798,-368.02849,2455.64332, 0,0,1,-840.882244,0,2455.64332, 0,0,1,-857.607798,-368.02849,2455.64332, 0,0,1,-813.095616,-451.304926,2455.64332, 0,0,1,-840.882244,0,2455.64332, 0,0,1,-813.095616,-451.304926,2455.64332, 0,0,1,-824.724927,-164.047988,2455.64332, 0,0,1,-824.724927,-164.047988,2455.64332, 0,0,1,-813.095616,-451.304926,2455.64332, 0,0,1,-776.873894,-321.791703,2455.64332, 0,0,1,-776.873894,-321.791703,2455.64332, 0,0,1,-813.095616,-451.304926,2455.64332, 0,0,1,-776.866198,-519.085398,2455.64332, 0,0,1,-776.873894,-321.791703,2455.64332, 0,0,1,-776.866198,-519.085398,2455.64332, 0,0,1,-699.168033,-467.169144,2455.64332, 0,0,1,-699.168033,-467.169144,2455.64332, 0,0,1,-776.866198,-519.085398,2455.64332, 0,0,1,-765.568614,-532.851545,2455.64332, 0,0,1,-699.168033,-467.169144,2455.64332, 0,0,1,-765.568614,-532.851545,2455.64332, 0,0,1,-705.689427,-605.814545,2455.64332, 0,0,1,-699.168033,-467.169144,2455.64332, 0,0,1,-705.689427,-605.814545,2455.64332, 0,0,1,-660.670395,-660.670395,2455.64332, 0,0,1,-699.168033,-467.169144,2455.64332, 0,0,1,-660.670395,-660.670395,2455.64332, 0,0,1,-594.593537,-594.593537,2455.64332, 0,0,1,-594.593537,-594.593537,2455.64332, 0,0,1,-660.670395,-660.670395,2455.64332, 0,0,1,-642.325255,-675.725862,2455.64332, 0,0,1,-594.593537,-594.593537,2455.64332, 0,0,1,-642.325255,-675.725862,2455.64332, 0,0,1,-569.38575,-735.585766,2455.64332, 0,0,1,-594.593537,-594.593537,2455.64332, 0,0,1,-569.38575,-735.585766,2455.64332, 0,0,1,-467.169144,-699.168033,2455.64332, 0,0,1,-467.169144,-699.168033,2455.64332, 0,0,1,-569.38575,-735.585766,2455.64332, 0,0,1,-519.085398,-776.866198,2455.64332, 0,0,1,-467.169144,-699.168033,2455.64332, 0,0,1,-519.085398,-776.866198,2455.64332, 0,0,1,-492.936329,-790.843167,2455.64332, 0,0,1,-467.169144,-699.168033,2455.64332, 0,0,1,-492.936329,-790.843167,2455.64332, 0,0,1,-409.740281,-835.312381,2455.64332, 0,0,1,-467.169144,-699.168033,2455.64332, 0,0,1,-409.740281,-835.312381,2455.64332, 0,0,1,-321.791703,-776.873894,2455.64332, 0,0,1,-321.791703,-776.873894,2455.64332, 0,0,1,-409.740281,-835.312381,2455.64332, 0,0,1,-357.552241,-863.20747,2455.64332, 0,0,1,-321.791703,-776.873894,2455.64332, 0,0,1,-357.552241,-863.20747,2455.64332, 0,0,1,-323.520318,-873.530941,2455.64332, 0,0,1,-321.791703,-776.873894,2455.64332, 0,0,1,-323.520318,-873.530941,2455.64332, 0,0,1,-233.261861,-900.910544,2455.64332, 0,0,1,-321.791703,-776.873894,2455.64332, 0,0,1,-233.261861,-900.910544,2455.64332, 0,0,1,-164.047988,-824.724927,2455.64332, 0,0,1,-164.047988,-824.724927,2455.64332, 0,0,1,-233.261861,-900.910544,2455.64332, 0,0,1,-182.278552,-916.376162,2455.64332, 0,0,1,-164.047988,-824.724927,2455.64332, 0,0,1,-182.278552,-916.376162,2455.64332, 0,0,1,-141.006393,-920.441115,2455.64332, 0,0,1,-164.047988,-824.724927,2455.64332, 0,0,1,-141.006393,-920.441115,2455.64332, 0,0,1,0,-840.882244,2455.64332, 0,0,1,0,-840.882244,2455.64332, 0,0,1,-141.006393,-920.441115,2455.64332, 0,0,1,-47.148298,-929.685331,2455.64332, 0,0,1,0,-840.882244,2455.64332, 0,0,1,-47.148298,-929.685331,2455.64332, 0,0,1,0,-934.329033,2455.64332, 0,0,1,0,-840.882244,2455.64332, 0,0,1,0,-934.329033,2455.64332, 0,0,1,164.047988,-824.724927,2455.64332, 0,0,1,164.047988,-824.724927,2455.64332, 0,0,1,0,-934.329033,2455.64332, 0,0,1,47.148335,-929.685327,2455.64332, 0,0,1,164.047988,-824.724927,2455.64332, 0,0,1,47.148335,-929.685327,2455.64332, 0,0,1,141.006388,-920.441116,2455.64332, 0,0,1,164.047988,-824.724927,2455.64332, 0,0,1,141.006388,-920.441116,2455.64332, 0,0,1,182.278552,-916.376162,2455.64332, 0,0,1,164.047988,-824.724927,2455.64332, 0,0,1,182.278552,-916.376162,2455.64332, 0,0,1,321.791703,-776.873894,2455.64332, 0,0,1,321.791703,-776.873894,2455.64332, 0,0,1,182.278552,-916.376162,2455.64332, 0,0,1,233.2619,-900.910533,2455.64332, 0,0,1,321.791703,-776.873894,2455.64332, 0,0,1,233.2619,-900.910533,2455.64332, 0,0,1,323.520353,-873.53093,2455.64332, 0,0,1,321.791703,-776.873894,2455.64332, 0,0,1,323.520353,-873.53093,2455.64332, 0,0,1,467.169144,-699.168033,2455.64332, 0,0,1,467.169144,-699.168033,2455.64332, 0,0,1,323.520353,-873.53093,2455.64332, 0,0,1,357.552241,-863.20747,2455.64332, 0,0,1,467.169144,-699.168033,2455.64332, 0,0,1,357.552241,-863.20747,2455.64332, 0,0,1,409.740311,-835.312366,2455.64332, 0,0,1,467.169144,-699.168033,2455.64332, 0,0,1,409.740311,-835.312366,2455.64332, 0,0,1,492.936359,-790.843151,2455.64332, 0,0,1,467.169144,-699.168033,2455.64332, 0,0,1,492.936359,-790.843151,2455.64332, 0,0,1,594.593537,-594.593537,2455.64332, 0,0,1,594.593537,-594.593537,2455.64332, 0,0,1,492.936359,-790.843151,2455.64332, 0,0,1,519.085398,-776.866198,2455.64332, 0,0,1,594.593537,-594.593537,2455.64332, 0,0,1,519.085398,-776.866198,2455.64332, 0,0,1,569.385776,-735.585746,2455.64332, 0,0,1,594.593537,-594.593537,2455.64332, 0,0,1,569.385776,-735.585746,2455.64332, 0,0,1,642.325277,-675.725844,2455.64332, 0,0,1,594.593537,-594.593537,2455.64332, 0,0,1,642.325277,-675.725844,2455.64332, 0,0,1,699.168033,-467.169144,2455.64332, 0,0,1,699.168033,-467.169144,2455.64332, 0,0,1,642.325277,-675.725844,2455.64332, 0,0,1,660.670395,-660.670395,2455.64332, 0,0,1,699.168033,-467.169144,2455.64332, 0,0,1,660.670395,-660.670395,2455.64332, 0,0,1,705.689443,-605.814526,2455.64332, 0,0,1,699.168033,-467.169144,2455.64332, 0,0,1,705.689443,-605.814526,2455.64332, 0,0,1,776.873894,-321.791703,2455.64332, 0,0,1,776.873894,-321.791703,2455.64332, 0,0,1,705.689443,-605.814526,2455.64332, 0,0,1,765.568628,-532.851527,2455.64332, 0,0,1,776.873894,-321.791703,2455.64332, 0,0,1,765.568628,-532.851527,2455.64332, 0,0,1,776.866198,-519.085398,2455.64332, 0,0,1,776.873894,-321.791703,2455.64332, 0,0,1,776.866198,-519.085398,2455.64332, 0,0,1,813.095624,-451.30491,2455.64332, 0,0,1,776.873894,-321.791703,2455.64332, 0,0,1,813.095624,-451.30491,2455.64332, 0,0,1,824.724927,-164.047988,2455.64332, 0,0,1,824.724927,-164.047988,2455.64332, 0,0,1,813.095624,-451.30491,2455.64332, 0,0,1,857.607805,-368.028476,2455.64332, 0,0,1,824.724927,-164.047988,2455.64332, 0,0,1,857.607805,-368.028476,2455.64332, 0,0,1,840.882244,0,2455.64332, 0,0,1,840.882244,0,2455.64332, 0,0,1,857.607805,-368.028476,2455.64332, 0,0,1,934.329033,0,2455.64332, 0,0,1,934.329033,0,2455.64332, 0,0,1,857.607805,-368.028476,2455.64332, 0,0,1,863.20747,-357.552241,2455.64332, 0,0,1,934.329033,0,2455.64332, 0,0,1,863.20747,-357.552241,2455.64332, 0,0,1,887.227327,-278.369385,2455.64332, 0,0,1,934.329033,0,2455.64332, 0,0,1,887.227327,-278.369385,2455.64332, 0,0,1,914.651021,-187.965581,2455.64332, 0,0,1,934.329033,0,2455.64332, 0,0,1,914.651021,-187.965581,2455.64332, 0,0,1,925.063958,-94.069877,2455.64332, 0,0,1,925.063958,-94.069877,2455.64332, 0,0,1,914.651021,-187.965581,2455.64332, 0,0,1,916.376162,-182.278552,2455.64332, 0.146874,-0.976542,0.157463,288.287545,-1033.56568,2082.821632, 0.168583,-0.985419,0.023006,210.691412,-1059.217255,2058.811877, 0.117205,-0.990162,0.07644,287.45777,-1035.930435,2058.811877, 0.168583,-0.985419,0.023006,210.691412,-1059.217255,2058.811877, 0.146874,-0.976542,0.157463,288.287545,-1033.56568,2082.821632, 0.165848,-0.978799,0.120197,209.215453,-1051.797109,2148.211628, 0.165848,-0.978799,0.120197,209.215453,-1051.797109,2148.211628, 0.146874,-0.976542,0.157463,288.287545,-1033.56568,2082.821632, 0.118798,-0.950331,0.287676,320.792446,-1019.675597,2128.611098, 0.165848,-0.978799,0.120197,209.215453,-1051.797109,2148.211628, 0.118798,-0.950331,0.287676,320.792446,-1019.675597,2128.611098, 0.146136,-0.933668,0.326969,349.642944,-1009.198896,2148.211628, 0.001003,-0.863953,-0.503571,0,-997.51935,1708.939502, -0.081515,-0.827636,-0.555314,-47.148297,-929.685331,1614.76108, 0,-0.8304,-0.557168,0,-934.329033,1614.76108, -0.081515,-0.827636,-0.555314,-47.148297,-929.685331,1614.76108, 0.001003,-0.863953,-0.503571,0,-997.51935,1708.939502, -0.081515,-0.827636,-0.555314,-141.006395,-920.441115,1614.76108, -0.081515,-0.827636,-0.555314,-141.006395,-920.441115,1614.76108, -0.167565,-0.847548,-0.503571,-194.606371,-978.352295,1708.939502, -0.162003,-0.814444,-0.557168,-182.278552,-916.376162,1614.76108, -0.167565,-0.847548,-0.503571,-194.606371,-978.352295,1708.939502, -0.081515,-0.827636,-0.555314,-141.006395,-920.441115,1614.76108, 0.001003,-0.863953,-0.503571,0,-997.51935,1708.939502, -0.544468,0.817693,0.186902,-751.507545,-880.404128,2025.39393, -0.549387,0.812256,-0.195995,-680.521947,-831.877044,2050.149043, -0.544468,0.817693,0.186902,-680.414811,-831.964968,2020.575089, -0.549387,0.812256,-0.195995,-680.521947,-831.877044,2050.149043, -0.544468,0.817693,0.186902,-751.507545,-880.404128,2025.39393, -0.549387,0.812256,-0.195995,-751.210147,-880.075378,2048.545713, -0.707107,0,0.707107,30.354884,-1076.236801,2002.823893, -0.582554,0,0.812792,23.535045,-976.438073,1997.226995, -0.527988,0,0.849252,23.535045,-1076.434855,1997.226995, -0.582554,0,0.812792,23.535045,-976.438073,1997.226995, -0.707107,0,0.707107,30.354884,-1076.236801,2002.823893, -0.707107,0,0.707107,30.354884,-976.10141,2002.823893, 0.161185,-0.976856,0.140615,164.047988,-824.724927,914.026067, -0.000155,-0.998425,0.056107,0,-849.217148,855.371869, 0.19463,-0.979271,0.056107,165.674047,-832.899679,855.371869, -0.000155,-0.998425,0.056107,0,-849.217148,855.371869, 0.161185,-0.976856,0.140615,164.047988,-824.724927,914.026067, -0.032487,-0.989531,0.140615,0,-840.882244,914.026067, 0.19463,-0.979271,0.056107,165.674047,-832.899679,855.371869, 0.000315,-0.993518,-0.113678,0,-847.505736,796.15315, 0.194135,-0.974366,-0.113678,165.340167,-831.221151,796.15315, 0.000315,-0.993518,-0.113678,0,-847.505736,796.15315, 0.19463,-0.979271,0.056107,165.674047,-832.899679,855.371869, -0.000155,-0.998425,0.056107,0,-849.217148,855.371869, 0.707373,-0.49612,-0.503476,829.407027,-554.192058,1708.939502, 0.872041,-0.360223,-0.331336,964.515951,-399.515588,1812.397596, 0.769936,-0.566074,-0.294549,868.041423,-580.006736,1812.397596, 0.872041,-0.360223,-0.331336,964.515951,-399.515588,1812.397596, 0.707373,-0.49612,-0.503476,829.407027,-554.192058,1708.939502, 0.79057,-0.348586,-0.503476,921.587711,-381.734129,1708.939502, 0.769936,-0.566074,-0.294549,868.041423,-580.006736,1812.397596, 0.901839,-0.40872,-0.140121,990.771213,-410.390874,1922.192772, 0.832671,-0.532692,-0.151323,891.670534,-595.795203,1922.192772, 0.901839,-0.40872,-0.140121,990.771213,-410.390874,1922.192772, 0.769936,-0.566074,-0.294549,868.041423,-580.006736,1812.397596, 0.872041,-0.360223,-0.331336,964.515951,-399.515588,1812.397596, 0.769936,-0.566074,0.294549,868.041423,-580.006736,2258.006804, 0.62118,-0.639379,0.453133,705.352697,-705.352697,2361.464898, 0.665498,-0.684813,0.29689,738.20855,-738.20855,2258.006804, 0.62118,-0.639379,0.453133,705.352697,-705.352697,2361.464898, 0.769936,-0.566074,0.294549,868.041423,-580.006736,2258.006804, 0.707373,-0.49612,0.503476,829.407027,-554.192058,2361.464898, 0.707373,-0.49612,0.503476,829.407027,-554.192058,2361.464898, 0.587181,-0.587181,0.557168,660.670395,-660.670395,2455.64332, 0.62118,-0.639379,0.453133,705.352697,-705.352697,2361.464898, 0.587181,-0.587181,0.557168,660.670395,-660.670395,2455.64332, 0.707373,-0.49612,0.503476,829.407027,-554.192058,2361.464898, 0.642867,-0.527587,0.555314,705.689443,-605.814526,2455.64332, 0.642867,-0.527587,0.555314,705.689443,-605.814526,2455.64332, 0.707373,-0.49612,0.503476,829.407027,-554.192058,2361.464898, 0.642867,-0.527587,0.555314,765.568628,-532.851527,2455.64332, 0.642867,-0.527587,0.555314,765.568628,-532.851527,2455.64332, 0.707373,-0.49612,0.503476,829.407027,-554.192058,2361.464898, 0.705336,-0.438515,0.556961,776.866198,-519.085398,2455.64332, 0.705336,-0.438515,-0.556961,776.866198,-519.085398,1614.76108, 0.79057,-0.348586,-0.503476,921.587711,-381.734129,1708.939502, 0.707373,-0.49612,-0.503476,829.407027,-554.192058,1708.939502, 0.79057,-0.348586,-0.503476,921.587711,-381.734129,1708.939502, 0.705336,-0.438515,-0.556961,776.866198,-519.085398,1614.76108, 0.733442,-0.392033,-0.555314,813.095625,-451.304909,1614.76108, 0.79057,-0.348586,-0.503476,921.587711,-381.734129,1708.939502, 0.733442,-0.392033,-0.555314,813.095625,-451.304909,1614.76108, 0.733442,-0.392033,-0.555314,857.607806,-368.028476,1614.76108, 0.79057,-0.348586,-0.503476,921.587711,-381.734129,1708.939502, 0.733442,-0.392033,-0.555314,857.607806,-368.028476,1614.76108, 0.777333,-0.292484,-0.556961,863.20747,-357.552241,1614.76108, 0.814754,-0.369253,0.447021,776.873894,-321.791703,1241.03564, 0.759676,-0.472298,0.447021,621.482696,-415.261462,1427.89836, 0.727062,-0.521108,0.447021,699.168033,-467.169144,1241.03564, 0.759676,-0.472298,0.447021,621.482696,-415.261462,1427.89836, 0.814754,-0.369253,0.447021,776.873894,-321.791703,1241.03564, 0.837219,-0.315017,0.447021,690.554573,-286.03707,1427.89836, 0.814754,-0.369253,0.447021,820.033555,-339.66902,1427.89836, 0.759676,-0.472298,0.447021,660.325365,-441.215303,1614.76108, 0.727062,-0.521108,0.447021,738.010701,-493.122985,1427.89836, 0.759676,-0.472298,0.447021,660.325365,-441.215303,1614.76108, 0.814754,-0.369253,0.447021,820.033555,-339.66902,1427.89836, 0.837219,-0.315017,0.447021,733.714234,-303.914386,1614.76108, 0.001625,-0.81149,-0.584364,0,-784.019466,631.979457, -0.123588,-0.749001,-0.65094,-145.428824,-731.120069,587.016307, 0.024909,-0.75872,-0.65094,0,-745.443558,587.016307, -0.123588,-0.749001,-0.65094,-145.428824,-731.120069,587.016307, 0.001625,-0.81149,-0.584364,0,-784.019466,631.979457, -0.15672,-0.796215,-0.584364,-152.95461,-768.954752,631.979457, -0.34284,-0.756475,0.556961,-357.552241,-863.20747,2455.64332, -0.486909,-0.726302,0.485186,-554.192058,-829.407027,2361.464898, -0.335858,-0.807337,0.485186,-381.734129,-921.587711,2361.464898, -0.486909,-0.726302,0.485186,-554.192058,-829.407027,2361.464898, -0.34284,-0.756475,0.556961,-357.552241,-863.20747,2455.64332, -0.483833,-0.675055,0.556961,-519.085398,-776.866198,2455.64332, 0,0,-1,-519.085398,-776.866198,2455.64332, 0,0,-1,-357.552241,-863.20747,2455.64332, 0,0,-1,-409.740281,-835.312381,2455.64332, 0,0,-1,-519.085398,-776.866198,2455.64332, 0,0,-1,-409.740281,-835.312381,2455.64332, 0,0,-1,-492.936329,-790.843167,2455.64332, 0.993632,-0.097864,0.055838,849.217148,0,855.371869, 0.976856,-0.161185,0.140615,824.724927,-164.047988,914.026067, 0.972323,-0.22681,0.056077,832.899679,-165.674047,855.371869, 0.976856,-0.161185,0.140615,824.724927,-164.047988,914.026067, 0.993632,-0.097864,0.055838,849.217148,0,855.371869, 0.98538,-0.097051,0.140025,840.882244,0,914.026067, 0.976104,-0.096138,0.19488,1072.403033,0,2148.211628, 0.925561,-0.183175,0.331336,1023.924672,-203.671281,2258.006804, 0.966926,-0.191862,0.168059,1051.797109,-209.215453,2148.211628, 0.925561,-0.183175,0.331336,1023.924672,-203.671281,2258.006804, 0.976104,-0.096138,0.19488,1072.403033,0,2148.211628, 0.929871,-0.091584,0.356303,1043.984543,0,2258.006804, 0,0.707107,0.707107,653.750225,-951.073041,1878.295649, 0,0.582554,0.812792,180.675225,-917.447181,1850.699619, 0,0.707107,0.707107,180.675225,-951.073041,1878.295649, 0,0.582554,0.812792,180.675225,-917.447181,1850.699619, 0,0.707107,0.707107,653.750225,-951.073041,1878.295649, 0,0.527988,0.849252,653.750225,-917.447181,1850.699619, -0.379912,-0.918011,-0.113678,-324.326404,-782.993204,796.15315, -0.532672,-0.798598,-0.280182,-464.344144,-694.940121,738.078199, -0.366638,-0.887172,-0.280182,-319.845809,-772.17609,738.078199, -0.532672,-0.798598,-0.280182,-464.344144,-694.940121,738.078199, -0.379912,-0.918011,-0.113678,-324.326404,-782.993204,796.15315, -0.551707,-0.826255,-0.113678,-470.848959,-704.675266,796.15315, -0.382224,-0.922365,0.056107,-324.981333,-784.574342,855.371869, -0.551707,-0.826255,-0.113678,-470.848959,-704.675266,796.15315, -0.379912,-0.918011,-0.113678,-324.326404,-782.993204,796.15315, -0.551707,-0.826255,-0.113678,-470.848959,-704.675266,796.15315, -0.382224,-0.922365,0.056107,-324.981333,-784.574342,855.371869, -0.554824,-0.830073,0.056107,-471.799769,-706.098253,855.371869, -0.408691,-0.901776,0.140615,-321.791703,-776.873894,914.026067, -0.554824,-0.830073,0.056107,-471.799769,-706.098253,855.371869, -0.382224,-0.922365,0.056107,-324.981333,-784.574342,855.371869, -0.554824,-0.830073,0.056107,-471.799769,-706.098253,855.371869, -0.408691,-0.901776,0.140615,-321.791703,-776.873894,914.026067, -0.576766,-0.804716,0.140615,-467.169144,-699.168033,914.026067, -0.224911,-0.96418,0.140615,-164.047988,-824.724927,914.026067, -0.382224,-0.922365,0.056107,-324.981333,-784.574342,855.371869, -0.194936,-0.97921,0.056107,-165.674047,-832.899679,855.371869, -0.382224,-0.922365,0.056107,-324.981333,-784.574342,855.371869, -0.224911,-0.96418,0.140615,-164.047988,-824.724927,914.026067, -0.408691,-0.901776,0.140615,-321.791703,-776.873894,914.026067, 0,0.973856,0.227168,180.675225,-1011.80212,1991.911763, 0,0.935939,0.352162,653.750225,-999.174772,1950.284976, 0,0.910825,0.412792,180.675225,-999.174772,1950.284976, 0,0.935939,0.352162,653.750225,-999.174772,1950.284976, 0,0.973856,0.227168,180.675225,-1011.80212,1991.911763, 0,0.986659,0.162803,653.750225,-1011.80212,1991.911763, -0.577307,-0.804415,0.140118,-595.795203,-891.670534,2148.211628, -0.633398,-0.771798,0.055991,-644.327894,-861.580736,2058.811877, -0.555123,-0.830697,0.0422,-599.998378,-897.96103,2058.811877, -0.633398,-0.771798,0.055991,-644.327894,-861.580736,2058.811877, -0.577307,-0.804415,0.140118,-595.795203,-891.670534,2148.211628, -0.632155,-0.770284,0.083921,-644.282481,-861.55593,2059.381644, -0.632155,-0.770284,0.083921,-644.282481,-861.55593,2059.381644, -0.577307,-0.804415,0.140118,-595.795203,-891.670534,2148.211628, -0.632155,-0.770284,0.083921,-655.637458,-847.372595,2104.031681, -0.632155,-0.770284,0.083921,-655.637458,-847.372595,2104.031681, -0.577307,-0.804415,0.140118,-595.795203,-891.670534,2148.211628, -0.632155,-0.770284,0.083921,-680.351355,-823.413171,2137.783955, -0.632155,-0.770284,0.083921,-680.351355,-823.413171,2137.783955, -0.577307,-0.804415,0.140118,-595.795203,-891.670534,2148.211628, -0.62223,-0.75819,0.19488,-700.811797,-805.485643,2148.211628, 0.169533,-0.847157,-0.503571,194.606371,-978.352295,1708.939502, 0.081515,-0.827636,-0.555314,141.006389,-920.441115,1614.76108, 0.162003,-0.814444,-0.557168,182.278552,-916.376162,1614.76108, 0.081515,-0.827636,-0.555314,141.006389,-920.441115,1614.76108, 0.169533,-0.847157,-0.503571,194.606371,-978.352295,1708.939502, 0.081515,-0.827636,-0.555314,47.148336,-929.685327,1614.76108, 0.081515,-0.827636,-0.555314,47.148336,-929.685327,1614.76108, 0.001003,-0.863953,-0.503571,0,-997.51935,1708.939502, 0,-0.8304,-0.557168,0,-934.329033,1614.76108, 0.001003,-0.863953,-0.503571,0,-997.51935,1708.939502, 0.081515,-0.827636,-0.555314,47.148336,-929.685327,1614.76108, 0.169533,-0.847157,-0.503571,194.606371,-978.352295,1708.939502, 0.935939,0,0.352162,-43.046973,-975.725342,2017.42443, 0.973856,0,0.227168,-45.607992,-1075.476552,2025.866979, 0.903939,-0,0.427662,-43.046973,-1075.728791,2017.42443, 0.973856,0,0.227168,-45.607992,-1075.476552,2025.866979, 0.935939,0,0.352162,-43.046973,-975.725342,2017.42443, 0.986659,-0,0.162803,-45.607992,-975.978478,2025.866979, 0.79057,-0.348586,0.503476,921.587711,-381.734129,2361.464898, 0.705336,-0.438515,0.556961,776.866198,-519.085398,2455.64332, 0.707373,-0.49612,0.503476,829.407027,-554.192058,2361.464898, 0.705336,-0.438515,0.556961,776.866198,-519.085398,2455.64332, 0.79057,-0.348586,0.503476,921.587711,-381.734129,2361.464898, 0.733442,-0.392033,0.555314,813.095624,-451.30491,2455.64332, 0.733442,-0.392033,0.555314,813.095624,-451.30491,2455.64332, 0.79057,-0.348586,0.503476,921.587711,-381.734129,2361.464898, 0.733442,-0.392033,0.555314,857.607805,-368.028476,2455.64332, 0.733442,-0.392033,0.555314,857.607805,-368.028476,2455.64332, 0.79057,-0.348586,0.503476,921.587711,-381.734129,2361.464898, 0.777333,-0.292484,0.556961,863.20747,-357.552241,2455.64332, -0.95694,-0.290285,-0,-798.491399,-250.528339,2549.07468, -0.916164,-0.400805,-0,-776.873894,-321.791703,2455.64332, -0.92388,-0.382683,-0,-776.873894,-321.791703,2549.07468, -0.916164,-0.400805,-0,-776.873894,-321.791703,2455.64332, -0.95694,-0.290285,-0,-798.491399,-250.528339,2549.07468, -0.976753,-0.214369,-0,-824.724927,-164.047988,2455.64332, -0.976753,-0.214369,-0,-824.724927,-164.047988,2455.64332, -0.95694,-0.290285,-0,-798.491399,-250.528339,2549.07468, -0.95694,-0.290285,0,-823.172319,-169.16625,2549.07468, -0.976753,-0.214369,-0,-824.724927,-164.047988,2455.64332, -0.95694,-0.290285,0,-823.172319,-169.16625,2549.07468, -0.980785,-0.19509,0,-824.724927,-164.047988,2549.07468, 0,-0.85779,0.514001,653.750225,-997.119327,2170.810911, 0.118798,-0.950331,0.287676,320.792446,-1019.675597,2128.611098, 0,-0.935939,0.352162,653.750225,-1019.675597,2128.611098, 0.118798,-0.950331,0.287676,320.792446,-1019.675597,2128.611098, 0,-0.85779,0.514001,653.750225,-997.119327,2170.810911, 0.146136,-0.933668,0.326969,349.642944,-1009.198896,2148.211628, 0.146136,-0.933668,0.326969,349.642944,-1009.198896,2148.211628, 0,-0.85779,0.514001,653.750225,-997.119327,2170.810911, 0.144571,-0.892809,0.426605,369.410361,-997.119327,2170.810911, -0.029352,-0.894042,0.447021,0,-700.735204,1241.03564, -0.145631,-0.882589,0.447021,-154.934211,-778.906876,1054.17292, 0.029352,-0.894042,0.447021,0,-794.166564,1054.17292, -0.145631,-0.882589,0.447021,-154.934211,-778.906876,1054.17292, -0.029352,-0.894042,0.447021,0,-700.735204,1241.03564, -0.203207,-0.871137,0.447021,-136.706657,-687.270773,1241.03564, -0.136347,-0.584514,0.799845,-164.047988,-824.724927,914.026067, -0.21137,-0.561756,0.799845,-250.282436,-604.235252,1054.17292, -0.247761,-0.546683,0.799845,-321.791703,-776.873894,914.026067, -0.21137,-0.561756,0.799845,-250.282436,-604.235252,1054.17292, -0.136347,-0.584514,0.799845,-164.047988,-824.724927,914.026067, -0.097715,-0.592199,0.799845,-127.592879,-641.452722,1054.17292, -0.203207,-0.871137,0.447021,-136.706657,-687.270773,1241.03564, -0.315017,-0.837219,0.447021,-303.914386,-733.714234,1054.17292, -0.145631,-0.882589,0.447021,-154.934211,-778.906876,1054.17292, -0.315017,-0.837219,0.447021,-303.914386,-733.714234,1054.17292, -0.203207,-0.871137,0.447021,-136.706657,-687.270773,1241.03564, -0.369253,-0.814754,0.447021,-268.159753,-647.394912,1241.03564, -0.203207,-0.871137,0.447021,-145.820434,-733.088824,1427.89836, -0.315017,-0.837219,0.447021,-321.791703,-776.873894,1241.03564, -0.145631,-0.882589,0.447021,-164.047988,-824.724927,1241.03564, -0.315017,-0.837219,0.447021,-321.791703,-776.873894,1241.03564, -0.203207,-0.871137,0.447021,-145.820434,-733.088824,1427.89836, -0.369253,-0.814754,0.447021,-286.03707,-690.554573,1427.89836, 0.820367,-0.571838,-0,699.168033,-467.169144,2455.64332, 0.881921,-0.471397,-0,731.773963,-406.167739,2549.07468, 0.83147,-0.55557,-0,699.168033,-467.169144,2549.07468, 0.881921,-0.471397,-0,731.773963,-406.167739,2549.07468, 0.820367,-0.571838,-0,699.168033,-467.169144,2455.64332, 0.916164,-0.400805,0,776.873894,-321.791703,2455.64332, 0.881921,-0.471397,-0,731.773963,-406.167739,2549.07468, 0.916164,-0.400805,0,776.873894,-321.791703,2455.64332, 0.881921,-0.471397,0,771.834246,-331.220222,2549.07468, 0.881921,-0.471397,0,771.834246,-331.220222,2549.07468, 0.916164,-0.400805,0,776.873894,-321.791703,2455.64332, 0.92388,-0.382683,0,776.873894,-321.791703,2549.07468, 0.000315,-0.993518,-0.113678,0,-847.505736,796.15315, -0.186514,-0.941653,-0.280182,-163.055979,-819.737765,738.078199, 0.000777,-0.959946,-0.280182,0,-835.797377,738.078199, -0.186514,-0.941653,-0.280182,-163.055979,-819.737765,738.078199, 0.000315,-0.993518,-0.113678,0,-847.505736,796.15315, -0.193517,-0.974489,-0.113678,-165.340167,-831.221151,796.15315, 1,0,0,-46.472742,-976.41888,2034.646937, 0.995185,0,-0.098017,-46.418054,-976.457504,2035.2022, 0.999806,0,-0.019694,-46.472742,-1075.391382,2034.646937, 0.999806,0,-0.019694,-46.472742,-1075.391382,2034.646937, 0.986659,0,-0.162803,-45.607992,-976.044955,2043.426896, 0.973856,0,-0.227168,-45.607992,-1075.476552,2043.426896, 0.986659,0,-0.162803,-45.607992,-976.044955,2043.426896, 0.999806,0,-0.019694,-46.472742,-1075.391382,2034.646937, 0.995185,0,-0.098017,-46.418054,-976.457504,2035.2022, 0.001218,-0.898681,-0.438601,0,-814.429823,682.822311, -0.15672,-0.796215,-0.584364,-152.95461,-768.954752,631.979457, 0.001625,-0.81149,-0.584364,0,-784.019466,631.979457, -0.15672,-0.796215,-0.584364,-152.95461,-768.954752,631.979457, 0.001218,-0.898681,-0.438601,0,-814.429823,682.822311, -0.17413,-0.881651,-0.438601,-158.887376,-798.780783,682.822311, 0.000777,-0.959946,-0.280182,0,-835.797377,738.078199, -0.17413,-0.881651,-0.438601,-158.887376,-798.780783,682.822311, 0.001218,-0.898681,-0.438601,0,-814.429823,682.822311, -0.17413,-0.881651,-0.438601,-158.887376,-798.780783,682.822311, 0.000777,-0.959946,-0.280182,0,-835.797377,738.078199, -0.186514,-0.941653,-0.280182,-163.055979,-819.737765,738.078199, -0.785009,-0.523429,-0.331336,-868.041423,-580.006736,1812.397596, -0.614068,-0.630655,-0.474547,-705.352697,-705.352697,1708.939502, -0.669886,-0.684903,-0.286639,-738.20855,-738.20855,1812.397596, -0.614068,-0.630655,-0.474547,-705.352697,-705.352697,1708.939502, -0.785009,-0.523429,-0.331336,-868.041423,-580.006736,1812.397596, -0.707373,-0.49612,-0.503476,-829.407027,-554.192058,1708.939502, 0,-0.999806,-0.019694,653.750225,-1038.255787,2035.202177, 0.117291,-0.984202,-0.132626,288.287532,-1033.56568,1987.582722, 0,-0.973856,-0.227168,653.750225,-1033.56568,1987.582722, 0.117291,-0.984202,-0.132626,288.287532,-1033.56568,1987.582722, 0,-0.999806,-0.019694,653.750225,-1038.255787,2035.202177, 0.146586,-0.98666,-0.07081,287.457755,-1035.930439,2011.592523, 0.146586,-0.98666,-0.07081,287.457755,-1035.930439,2011.592523, 0,-0.999806,-0.019694,653.750225,-1038.255787,2035.202177, 0.176337,-0.98433,0,279.79211,-1038.255787,2035.202177, 0.974489,-0.193517,-0.113678,831.221151,-165.340167,796.15315, 0.993632,-0.097864,0.055838,849.217148,0,855.371869, 0.972323,-0.22681,0.056077,832.899679,-165.674047,855.371869, 0.993632,-0.097864,0.055838,849.217148,0,855.371869, 0.974489,-0.193517,-0.113678,831.221151,-165.340167,796.15315, 0.985217,-0.097035,-0.141176,847.505736,0,796.15315, 0,-0.582554,-0.812792,475.358482,-929.775248,1832.249363, 0,-0.707107,-0.707107,653.750225,-966.763694,1862.604996, 0,-0.707107,-0.707107,422.745208,-966.763694,1862.604996, 0,-0.707107,-0.707107,653.750225,-966.763694,1862.604996, 0,-0.582554,-0.812792,475.358482,-929.775248,1832.249363, 0,-0.514001,-0.85779,653.750225,-929.775248,1832.249363, 0,-0.999806,-0.019694,653.750225,-1038.255787,2035.202177, 0.117205,-0.990162,0.07644,287.45777,-1035.930435,2058.811877, 0.176337,-0.98433,0,279.79211,-1038.255787,2035.202177, 0.117205,-0.990162,0.07644,287.45777,-1035.930435,2058.811877, 0,-0.999806,-0.019694,653.750225,-1038.255787,2035.202177, 0,-0.986659,0.162803,653.750225,-1033.56568,2082.821632, 0.117205,-0.990162,0.07644,287.45777,-1035.930435,2058.811877, 0,-0.986659,0.162803,653.750225,-1033.56568,2082.821632, 0.146874,-0.976542,0.157463,288.287545,-1033.56568,2082.821632, 0,0.582554,-0.812792,653.750225,-917.447181,2219.704735, 0,0.707107,-0.707107,180.675225,-951.073041,2192.108705, 0,0.527988,-0.849252,180.675225,-917.447181,2219.704735, 0,0.707107,-0.707107,180.675225,-951.073041,2192.108705, 0,0.582554,-0.812792,653.750225,-917.447181,2219.704735, 0,0.707107,-0.707107,653.750225,-951.073041,2192.108705, 0.315017,-0.837219,0.447021,286.03707,-690.554573,1427.89836, 0.203207,-0.871137,0.447021,164.047988,-824.724927,1241.03564, 0.369253,-0.814754,0.447021,321.791703,-776.873894,1241.03564, 0.203207,-0.871137,0.447021,164.047988,-824.724927,1241.03564, 0.315017,-0.837219,0.447021,286.03707,-690.554573,1427.89836, 0.145631,-0.882589,0.447021,145.820434,-733.088824,1427.89836, 0.890977,-0.087754,0.445488,840.882244,0,1241.03564, 0.882589,-0.145631,0.447021,733.088824,-145.820434,1427.89836, 0.871137,-0.203207,0.447021,824.724927,-164.047988,1241.03564, 0.882589,-0.145631,0.447021,733.088824,-145.820434,1427.89836, 0.890977,-0.087754,0.445488,840.882244,0,1241.03564, 0.890977,-0.087754,0.445488,747.450884,0,1427.89836, 0.830739,-0.342785,-0.438601,752.435044,-311.6688,682.822311, 0.941653,-0.186514,-0.280182,819.737765,-163.055979,738.078199, 0.887172,-0.366638,-0.280182,772.17609,-319.845809,738.078199, 0.941653,-0.186514,-0.280182,819.737765,-163.055979,738.078199, 0.830739,-0.342785,-0.438601,752.435044,-311.6688,682.822311, 0.881651,-0.17413,-0.438601,798.780783,-158.887376,682.822311, -0.993632,-0.097864,0.055838,-849.217148,0,855.371869, -0.974489,-0.193517,-0.113678,-831.221151,-165.340167,796.15315, -0.972323,-0.22681,0.056077,-832.899679,-165.674047,855.371869, -0.974489,-0.193517,-0.113678,-831.221151,-165.340167,796.15315, -0.993632,-0.097864,0.055838,-849.217148,0,855.371869, -0.985217,-0.097035,-0.141176,-847.505736,0,796.15315, 0.215316,-0.958117,-0.188816,209.215453,-1051.797109,1922.192772, 0.000913,-0.943512,-0.331336,0,-1043.984543,1812.397596, 0.184965,-0.925205,-0.331336,203.671281,-1023.924672,1812.397596, 0.000913,-0.943512,-0.331336,0,-1043.984543,1812.397596, 0.215316,-0.958117,-0.188816,209.215453,-1051.797109,1922.192772, 0.014463,-0.987633,-0.156114,0,-1072.403033,1922.192772, 0,0.527988,0.849252,653.750225,-917.447181,1850.699619, 0,0.412792,0.910825,180.675225,-879.083714,1830.193918, 0,0.582554,0.812792,180.675225,-917.447181,1850.699619, 0,0.412792,0.910825,180.675225,-879.083714,1830.193918, 0,0.527988,0.849252,653.750225,-917.447181,1850.699619, 0,0.352162,0.935939,653.750225,-879.083714,1830.193918, 0.527988,-0.849252,0,467.169144,-699.168033,2549.07468, 0.412792,-0.910825,0,321.791703,-776.873894,2455.64332, 0.582554,-0.812792,0,467.169144,-699.168033,2455.64332, 0.412792,-0.910825,0,321.791703,-776.873894,2455.64332, 0.527988,-0.849252,0,467.169144,-699.168033,2549.07468, 0.352162,-0.935939,0,321.791703,-776.873894,2549.07468, 0,0,-1,321.791703,-776.873894,2549.07468, 0,0,-1,467.169144,-699.168033,2549.07468, 0,0,-1,443.635404,-711.747079,2549.07468, 0,0,1,321.791703,-776.873894,2549.07468, 0,0,1,443.635404,-711.747079,2549.07468, 0,0,1,368.760184,-751.768718,2549.07468, 0.994307,-0.097931,-0.041998,1079.968548,0,2011.592523, 0.979923,-0.19486,0.0422,1059.217255,-210.691412,2058.811877, 0.972989,-0.226965,-0.042178,1059.217255,-210.691412,2011.592523, 0.979923,-0.19486,0.0422,1059.217255,-210.691412,2058.811877, 0.994307,-0.097931,-0.041998,1079.968548,0,2011.592523, 0.993624,-0.097863,0.055991,1079.968548,0,2058.811877, 0.606593,-0.621557,-0.495693,705.352697,-705.352697,1708.939502, 0.527587,-0.642867,-0.555314,642.325277,-675.725844,1614.76108, 0.606233,-0.567693,-0.556961,660.670395,-660.670395,1614.76108, 0.527587,-0.642867,-0.555314,642.325277,-675.725844,1614.76108, 0.606593,-0.621557,-0.495693,705.352697,-705.352697,1708.939502, 0.527587,-0.642867,-0.555314,569.385776,-735.585745,1614.76108, 0.527587,-0.642867,-0.555314,569.385776,-735.585745,1614.76108, 0.501364,-0.716458,-0.4851,554.192058,-829.407027,1708.939502, 0.461345,-0.690452,-0.557168,519.085398,-776.866198,1614.76108, 0.501364,-0.716458,-0.4851,554.192058,-829.407027,1708.939502, 0.527587,-0.642867,-0.555314,569.385776,-735.585745,1614.76108, 0.606593,-0.621557,-0.495693,705.352697,-705.352697,1708.939502, 0.647345,-0.690701,-0.322298,738.20855,-738.20855,1812.397596, 0.501364,-0.716458,-0.4851,554.192058,-829.407027,1708.939502, 0.606593,-0.621557,-0.495693,705.352697,-705.352697,1708.939502, 0.501364,-0.716458,-0.4851,554.192058,-829.407027,1708.939502, 0.647345,-0.690701,-0.322298,738.20855,-738.20855,1812.397596, 0.579174,-0.705726,-0.408054,653.750225,-795.278099,1791.222384, 0.579174,-0.705726,-0.408054,653.750225,-795.278099,1791.222384, 0.647345,-0.690701,-0.322298,738.20855,-738.20855,1812.397596, 0.604517,-0.736606,-0.303266,653.750225,-807.521706,1812.397596, 0.501364,-0.716458,-0.4851,554.192058,-829.407027,1708.939502, 0.579174,-0.705726,-0.408054,600.307476,-841.785968,1795.80301, 0.468978,-0.782653,-0.409285,577.578281,-864.406983,1802.66502, 0.579174,-0.705726,-0.408054,600.307476,-841.785968,1795.80301, 0.501364,-0.716458,-0.4851,554.192058,-829.407027,1708.939502, 0.579174,-0.705726,-0.408054,653.750225,-795.278099,1791.222384, 0.592439,-0.554776,-0.584157,554.385481,-554.385481,631.979457, 0.747902,-0.498268,-0.438601,677.173649,-452.472967,682.822311, 0.636324,-0.634602,-0.438601,575.888851,-575.888851,682.822311, 0.747902,-0.498268,-0.438601,677.173649,-452.472967,682.822311, 0.592439,-0.554776,-0.584157,554.385481,-554.385481,631.979457, 0.675632,-0.449489,-0.584364,651.888362,-435.577878,631.979457, 0.849252,-0,0.527988,-38.888103,-1075.973486,2009.643732, 0.903939,-0,0.427662,-43.046973,-1075.728791,2017.42443, 0.881921,-0,0.471397,-39.929753,-1076.03581,2011.592523, 0.903939,-0,0.427662,-43.046973,-1075.728791,2017.42443, 0.849252,-0,0.527988,-38.888103,-1075.973486,2009.643732, 0.83147,0,0.55557,-38.888103,-975.6692,2009.643732, 0.903939,-0,0.427662,-43.046973,-1075.728791,2017.42443, 0.83147,0,0.55557,-38.888103,-975.6692,2009.643732, 0.935939,0,0.352162,-43.046973,-975.725342,2017.42443, 0,-0.19509,0.980785,653.750225,-841.785968,2274.601344, 0,-0.098017,0.995185,653.750225,-795.278128,2279.181966, -0,-0.227168,0.973856,600.307509,-841.785968,2274.601344, 0,0.812792,0.582554,180.675225,-978.669071,1911.921509, 0,0.707107,0.707107,653.750225,-951.073041,1878.295649, 0,0.707107,0.707107,180.675225,-951.073041,1878.295649, 0,0.707107,0.707107,653.750225,-951.073041,1878.295649, 0,0.812792,0.582554,180.675225,-978.669071,1911.921509, 0,0.849252,0.527988,653.750225,-978.669071,1911.921509, -0.001338,-0.87441,0.485186,0,-997.51935,2361.464898, -0.184965,-0.925205,0.331336,-203.671281,-1023.924672,2258.006804, -0.000913,-0.943512,0.331336,0,-1043.984543,2258.006804, -0.184965,-0.925205,0.331336,-203.671281,-1023.924672,2258.006804, -0.001338,-0.87441,0.485186,0,-997.51935,2361.464898, -0.171901,-0.857347,0.485186,-194.606371,-978.352295,2361.464898, -0.335858,-0.807337,0.485186,-381.734129,-921.587711,2361.464898, -0.538332,-0.779667,0.319873,-580.006736,-868.041423,2258.006804, -0.36191,-0.871342,0.331336,-399.515588,-964.515951,2258.006804, -0.538332,-0.779667,0.319873,-580.006736,-868.041423,2258.006804, -0.335858,-0.807337,0.485186,-381.734129,-921.587711,2361.464898, -0.486909,-0.726302,0.485186,-554.192058,-829.407027,2361.464898, -0,-0.514001,0.85779,653.750225,-929.775248,2238.154991, -0,-0.471397,0.881921,533.995171,-892.635117,2258.006804, 0,-0.582554,0.812792,475.358507,-929.775248,2238.154991, -0,-0.471397,0.881921,533.995171,-892.635117,2258.006804, -0,-0.514001,0.85779,653.750225,-929.775248,2238.154991, -0,-0.412792,0.910825,540.89692,-887.575434,2260.711261, -0,-0.412792,0.910825,540.89692,-887.575434,2260.711261, -0,-0.514001,0.85779,653.750225,-929.775248,2238.154991, -0,-0.336778,0.941584,653.750225,-887.575434,2260.711261, 0.412792,0,0.910825,-18.690668,-1076.560038,1993.068126, 0.527988,0,0.849252,-26.471367,-976.14887,1997.226995, 0.582554,-0,0.812792,-26.471367,-1076.145653,1997.226995, 0.527988,0,0.849252,-26.471367,-976.14887,1997.226995, 0.412792,0,0.910825,-18.690668,-1076.560038,1993.068126, 0.352162,0,0.935939,-18.690668,-976.666251,1993.068126, 0.509726,-0.316902,0.799845,699.168033,-467.169144,914.026067, 0.546683,-0.247761,0.799845,604.235252,-250.282436,1054.17292, 0.487843,-0.349653,0.799845,543.79736,-363.353779,1054.17292, 0.546683,-0.247761,0.799845,604.235252,-250.282436,1054.17292, 0.509726,-0.316902,0.799845,699.168033,-467.169144,914.026067, 0.561756,-0.21137,0.799845,776.873894,-321.791703,914.026067, -0.83147,0,0.55557,35.951781,-975.958402,2009.643732, -0.707107,0,0.707107,30.354884,-1076.236801,2002.823893, -0.849252,-0,0.527988,35.951781,-1076.262688,2009.643732, -0.707107,0,0.707107,30.354884,-1076.236801,2002.823893, -0.83147,0,0.55557,35.951781,-975.958402,2009.643732, -0.707107,0,0.707107,30.354884,-976.10141,2002.823893, 0.973856,0,-0.227168,-45.607992,-1075.476552,2043.426896, 0.935939,0,-0.352162,-43.046973,-975.791819,2051.869445, 0.903939,-0,-0.427662,-43.046973,-1075.728791,2051.869445, 0.935939,0,-0.352162,-43.046973,-975.791819,2051.869445, 0.973856,0,-0.227168,-45.607992,-1075.476552,2043.426896, 0.986659,0,-0.162803,-45.607992,-976.044955,2043.426896, 0,-0.707107,-0.707107,843.013714,-637.259985,2192.108705, 0,-0.84225,-0.539087,180.675225,-609.663955,2158.482845, 0,-0.83147,-0.55557,876.866129,-609.663955,2158.482845, 0,-0.84225,-0.539087,180.675225,-609.663955,2158.482845, 0,-0.707107,-0.707107,843.013714,-637.259985,2192.108705, 0,-0.707107,-0.707107,180.675225,-637.259985,2192.108705, -0.479152,-0.718908,-0.503571,-554.192058,-829.407027,1708.939502, -0.527587,-0.642867,-0.555314,-569.385752,-735.585765,1614.76108, -0.461345,-0.690452,-0.557168,-519.085398,-776.866198,1614.76108, -0.527587,-0.642867,-0.555314,-569.385752,-735.585765,1614.76108, -0.479152,-0.718908,-0.503571,-554.192058,-829.407027,1708.939502, -0.527587,-0.642867,-0.555314,-642.325255,-675.725862,1614.76108, -0.527587,-0.642867,-0.555314,-642.325255,-675.725862,1614.76108, -0.614068,-0.630655,-0.474547,-705.352697,-705.352697,1708.939502, -0.606233,-0.567693,-0.556961,-660.670395,-660.670395,1614.76108, -0.614068,-0.630655,-0.474547,-705.352697,-705.352697,1708.939502, -0.527587,-0.642867,-0.555314,-642.325255,-675.725862,1614.76108, -0.479152,-0.718908,-0.503571,-554.192058,-829.407027,1708.939502, -0.994307,-0.097931,0.041998,-1079.968548,0,2058.811877, -0.979923,-0.19486,-0.0422,-1059.217255,-210.691412,2011.592523, -0.972989,-0.226965,0.042178,-1059.217255,-210.691412,2058.811877, -0.979923,-0.19486,-0.0422,-1059.217255,-210.691412,2011.592523, -0.994307,-0.097931,0.041998,-1079.968548,0,2058.811877, -0.993624,-0.097863,-0.055991,-1079.968548,0,2011.592523, -0.882589,-0.145631,0.447021,-687.270773,-136.706657,1241.03564, -0.890977,-0.087754,0.445488,-794.166564,0,1054.17292, -0.871137,-0.203207,0.447021,-778.906876,-154.934211,1054.17292, -0.890977,-0.087754,0.445488,-794.166564,0,1054.17292, -0.882589,-0.145631,0.447021,-687.270773,-136.706657,1241.03564, -0.890977,-0.087754,0.445488,-700.735204,0,1241.03564, 0.61434,-0.748575,-0.249443,653.750225,-808.286776,1814.693561, 0.604517,-0.736606,-0.303266,653.750225,-807.521706,1812.397596, 0.61434,-0.748575,-0.249443,670.391133,-794.166513,1813.302837, 0.647345,-0.690701,-0.322298,738.20855,-738.20855,1812.397596, 0.61434,-0.748575,-0.249443,670.391133,-794.166513,1813.302837, 0.604517,-0.736606,-0.303266,653.750225,-807.521706,1812.397596, 0.61434,-0.748575,-0.249443,670.391133,-794.166513,1813.302837, 0.647345,-0.690701,-0.322298,738.20855,-738.20855,1812.397596, 0.61434,-0.748575,-0.249443,724.871877,-750.8761,1817.56657, 0.61434,-0.748575,-0.249443,724.871877,-750.8761,1817.56657, 0.647345,-0.690701,-0.322298,738.20855,-738.20855,1812.397596, 0.684548,-0.684548,-0.250574,739.771122,-739.771122,1820.935228, 0.381937,-0.922484,0.056107,324.981333,-784.574342,855.371869, 0.194135,-0.974366,-0.113678,165.340167,-831.221151,796.15315, 0.380494,-0.91777,-0.113678,324.326404,-782.993204,796.15315, 0.194135,-0.974366,-0.113678,165.340167,-831.221151,796.15315, 0.381937,-0.922484,0.056107,324.981333,-784.574342,855.371869, 0.19463,-0.979271,0.056107,165.674047,-832.899679,855.371869, 0.787008,-0.166056,-0.594175,768.954752,-152.95461,631.979457, 0.882512,-0.08692,-0.462187,814.429823,0,682.822311, 0.881651,-0.17413,-0.438601,798.780783,-158.887376,682.822311, 0.882512,-0.08692,-0.462187,814.429823,0,682.822311, 0.787008,-0.166056,-0.594175,768.954752,-152.95461,631.979457, 0.792149,-0.07802,-0.60532,784.019466,0,631.979457, 0.331547,-0.797805,-0.503571,381.734129,-921.587711,1708.939502, 0.241413,-0.795831,-0.555314,323.520353,-873.53093,1614.76108, 0.31778,-0.767189,-0.557168,357.552241,-863.20747,1614.76108, 0.241413,-0.795831,-0.555314,323.520353,-873.53093,1614.76108, 0.331547,-0.797805,-0.503571,381.734129,-921.587711,1708.939502, 0.241413,-0.795831,-0.555314,233.261899,-900.910533,1614.76108, 0.241413,-0.795831,-0.555314,233.261899,-900.910533,1614.76108, 0.169533,-0.847157,-0.503571,194.606371,-978.352295,1708.939502, 0.162003,-0.814444,-0.557168,182.278552,-916.376162,1614.76108, 0.169533,-0.847157,-0.503571,194.606371,-978.352295,1708.939502, 0.241413,-0.795831,-0.555314,233.261899,-900.910533,1614.76108, 0.331547,-0.797805,-0.503571,381.734129,-921.587711,1708.939502, 0.388566,-0.856387,-0.340026,399.515588,-964.515951,1812.397596, 0.169533,-0.847157,-0.503571,194.606371,-978.352295,1708.939502, 0.331547,-0.797805,-0.503571,381.734129,-921.587711,1708.939502, 0.169533,-0.847157,-0.503571,194.606371,-978.352295,1708.939502, 0.388566,-0.856387,-0.340026,399.515588,-964.515951,1812.397596, 0.184965,-0.925205,-0.331336,203.671281,-1023.924672,1812.397596, 0,0,-1,-654.019524,0,1054.17292, 0,0,-1,-778.906876,-154.934211,1054.17292, 0,0,-1,-794.166564,0,1054.17292, 0,0,-1,-778.906876,-154.934211,1054.17292, 0,0,-1,-654.019524,0,1054.17292, 0,0,-1,-733.714234,-303.914386,1054.17292, 0,0,-1,-733.714234,-303.914386,1054.17292, 0,0,-1,-654.019524,0,1054.17292, 0,0,-1,-660.325365,-441.215303,1054.17292, 0,0,-1,-660.325365,-441.215303,1054.17292, 0,0,-1,-654.019524,0,1054.17292, 0,0,-1,-641.452722,-127.592879,1054.17292, 0,0,-1,-660.325365,-441.215303,1054.17292, 0,0,-1,-641.452722,-127.592879,1054.17292, 0,0,-1,-561.560563,-561.560563,1054.17292, 0,0,-1,-561.560563,-561.560563,1054.17292, 0,0,-1,-641.452722,-127.592879,1054.17292, 0,0,-1,-604.235252,-250.282436,1054.17292, 0,0,-1,-561.560563,-561.560563,1054.17292, 0,0,-1,-604.235252,-250.282436,1054.17292, 0,0,-1,-543.79736,-363.353779,1054.17292, 0,0,-1,-561.560563,-561.560563,1054.17292, 0,0,-1,-543.79736,-363.353779,1054.17292, 0,0,-1,-441.215303,-660.325365,1054.17292, 0,0,-1,-441.215303,-660.325365,1054.17292, 0,0,-1,-543.79736,-363.353779,1054.17292, 0,0,-1,-462.46164,-462.46164,1054.17292, 0,0,-1,-441.215303,-660.325365,1054.17292, 0,0,-1,-462.46164,-462.46164,1054.17292, 0,0,-1,-363.353779,-543.79736,1054.17292, 0,0,-1,-441.215303,-660.325365,1054.17292, 0,0,-1,-363.353779,-543.79736,1054.17292, 0,0,-1,-303.914386,-733.714234,1054.17292, 0,0,-1,-303.914386,-733.714234,1054.17292, 0,0,-1,-363.353779,-543.79736,1054.17292, 0,0,-1,-250.282436,-604.235252,1054.17292, 0,0,-1,-303.914386,-733.714234,1054.17292, 0,0,-1,-250.282436,-604.235252,1054.17292, 0,0,-1,-154.934211,-778.906876,1054.17292, 0,0,-1,-154.934211,-778.906876,1054.17292, 0,0,-1,-250.282436,-604.235252,1054.17292, 0,0,-1,-127.592879,-641.452722,1054.17292, 0,0,-1,-154.934211,-778.906876,1054.17292, 0,0,-1,-127.592879,-641.452722,1054.17292, 0,0,-1,0,-794.166564,1054.17292, 0,0,-1,0,-794.166564,1054.17292, 0,0,-1,-127.592879,-641.452722,1054.17292, 0,0,-1,0,-654.019524,1054.17292, 0,0,-1,0,-794.166564,1054.17292, 0,0,-1,0,-654.019524,1054.17292, 0,0,-1,127.592879,-641.452722,1054.17292, 0,0,-1,0,-794.166564,1054.17292, 0,0,-1,127.592879,-641.452722,1054.17292, 0,0,-1,154.934211,-778.906876,1054.17292, 0,0,-1,154.934211,-778.906876,1054.17292, 0,0,-1,127.592879,-641.452722,1054.17292, 0,0,-1,250.282436,-604.235252,1054.17292, 0,0,-1,154.934211,-778.906876,1054.17292, 0,0,-1,250.282436,-604.235252,1054.17292, 0,0,-1,303.914386,-733.714234,1054.17292, 0,0,-1,303.914386,-733.714234,1054.17292, 0,0,-1,250.282436,-604.235252,1054.17292, 0,0,-1,363.353779,-543.79736,1054.17292, 0,0,-1,303.914386,-733.714234,1054.17292, 0,0,-1,363.353779,-543.79736,1054.17292, 0,0,-1,441.215303,-660.325365,1054.17292, 0,0,-1,441.215303,-660.325365,1054.17292, 0,0,-1,363.353779,-543.79736,1054.17292, 0,0,-1,462.46164,-462.46164,1054.17292, 0,0,-1,441.215303,-660.325365,1054.17292, 0,0,-1,462.46164,-462.46164,1054.17292, 0,0,-1,561.560563,-561.560563,1054.17292, 0,0,-1,561.560563,-561.560563,1054.17292, 0,0,-1,462.46164,-462.46164,1054.17292, 0,0,-1,543.79736,-363.353779,1054.17292, 0,0,-1,561.560563,-561.560563,1054.17292, 0,0,-1,543.79736,-363.353779,1054.17292, 0,0,-1,604.235252,-250.282436,1054.17292, 0,0,-1,561.560563,-561.560563,1054.17292, 0,0,-1,604.235252,-250.282436,1054.17292, 0,0,-1,660.325365,-441.215303,1054.17292, 0,0,-1,660.325365,-441.215303,1054.17292, 0,0,-1,604.235252,-250.282436,1054.17292, 0,0,-1,641.452722,-127.592879,1054.17292, 0,0,-1,660.325365,-441.215303,1054.17292, 0,0,-1,641.452722,-127.592879,1054.17292, 0,0,-1,654.019524,0,1054.17292, 0,0,-1,660.325365,-441.215303,1054.17292, 0,0,-1,654.019524,0,1054.17292, 0,0,-1,794.166564,0,1054.17292, 0,0,-1,660.325365,-441.215303,1054.17292, 0,0,-1,794.166564,0,1054.17292, 0,0,-1,733.714234,-303.914386,1054.17292, 0,0,-1,733.714234,-303.914386,1054.17292, 0,0,-1,794.166564,0,1054.17292, 0,0,-1,778.906876,-154.934211,1054.17292, -0.027252,-0.830091,0.556961,0,-934.329033,2455.64332, -0.171901,-0.857347,0.485186,-194.606371,-978.352295,2361.464898, -0.001338,-0.87441,0.485186,0,-997.51935,2361.464898, -0.171901,-0.857347,0.485186,-194.606371,-978.352295,2361.464898, -0.027252,-0.830091,0.556961,0,-934.329033,2455.64332, -0.188671,-0.808825,0.556961,-182.278552,-916.376162,2455.64332, 0,0,1,-182.278552,-916.376162,2455.64332, 0,0,1,0,-934.329033,2455.64332, 0,0,1,-47.148298,-929.685331,2455.64332, 0,0,-1,-182.278552,-916.376162,2455.64332, 0,0,-1,-47.148298,-929.685331,2455.64332, 0,0,-1,-141.006393,-920.441115,2455.64332, 0,-0.707107,-0.707107,843.013714,-637.259985,2192.108705, 0,-0.582554,-0.812792,180.675225,-670.885845,2219.704735, 0,-0.707107,-0.707107,180.675225,-637.259985,2192.108705, 0,-0.582554,-0.812792,180.675225,-670.885845,2219.704735, 0,-0.707107,-0.707107,843.013714,-637.259985,2192.108705, 0,-0.527988,-0.849252,806.222028,-670.885845,2219.704735, -0.77301,-0.634393,-0,-635.110018,-545.224061,2549.07468, -0.707107,-0.707107,-0,-594.593537,-594.593537,2455.64332, -0.707107,-0.707107,-0,-594.593537,-594.593537,2549.07468, -0.707107,-0.707107,-0,-594.593537,-594.593537,2455.64332, -0.77301,-0.634393,-0,-635.110018,-545.224061,2549.07468, -0.820367,-0.571838,-0,-699.168033,-467.169144,2455.64332, -0.820367,-0.571838,-0,-699.168033,-467.169144,2455.64332, -0.77301,-0.634393,-0,-635.110018,-545.224061,2549.07468, -0.77301,-0.634393,-0,-689.000369,-479.558478,2549.07468, -0.820367,-0.571838,-0,-699.168033,-467.169144,2455.64332, -0.77301,-0.634393,-0,-689.000369,-479.558478,2549.07468, -0.83147,-0.55557,-0,-699.168033,-467.169144,2549.07468, 0.777333,-0.292484,-0.556961,863.20747,-357.552241,1614.76108, 0.843385,-0.187656,-0.503476,978.352295,-194.606371,1708.939502, 0.79057,-0.348586,-0.503476,921.587711,-381.734129,1708.939502, 0.843385,-0.187656,-0.503476,978.352295,-194.606371,1708.939502, 0.777333,-0.292484,-0.556961,863.20747,-357.552241,1614.76108, 0.795831,-0.241413,-0.555314,887.227327,-278.369384,1614.76108, 0.843385,-0.187656,-0.503476,978.352295,-194.606371,1708.939502, 0.795831,-0.241413,-0.555314,887.227327,-278.369384,1614.76108, 0.795831,-0.241413,-0.555314,914.651021,-187.96558,1614.76108, 0.843385,-0.187656,-0.503476,978.352295,-194.606371,1708.939502, 0.795831,-0.241413,-0.555314,914.651021,-187.96558,1614.76108, 0.819458,-0.135214,-0.556961,916.376162,-182.278552,1614.76108, 0.176518,-0.881175,-0.438601,158.887376,-798.780783,682.822311, 0.001625,-0.81149,-0.584364,0,-784.019466,631.979457, 0.159907,-0.795581,-0.584364,152.95461,-768.954752,631.979457, 0.001625,-0.81149,-0.584364,0,-784.019466,631.979457, 0.176518,-0.881175,-0.438601,158.887376,-798.780783,682.822311, 0.001218,-0.898681,-0.438601,0,-814.429823,682.822311, -0.523429,-0.785009,-0.331336,-580.006736,-868.041423,1812.397596, -0.614068,-0.630655,-0.474547,-705.352697,-705.352697,1708.939502, -0.479152,-0.718908,-0.503571,-554.192058,-829.407027,1708.939502, -0.614068,-0.630655,-0.474547,-705.352697,-705.352697,1708.939502, -0.523429,-0.785009,-0.331336,-580.006736,-868.041423,1812.397596, -0.669886,-0.684903,-0.286639,-738.20855,-738.20855,1812.397596, -0.910015,-0.412425,0.042178,-997.760837,-413.286071,2058.811877, -0.841785,-0.538757,-0.033753,-897.96103,-599.998378,2011.592523, -0.819881,-0.571538,0.033755,-897.96103,-599.998378,2058.811877, -0.841785,-0.538757,-0.033753,-897.96103,-599.998378,2011.592523, -0.910015,-0.412425,0.042178,-997.760837,-413.286071,2058.811877, -0.923079,-0.382289,-0.0422,-997.760837,-413.286071,2011.592523, -0.804774,-0.576808,0.140116,-891.670534,-595.795203,2148.211628, -0.910015,-0.412425,0.042178,-997.760837,-413.286071,2058.811877, -0.819881,-0.571538,0.033755,-897.96103,-599.998378,2058.811877, -0.910015,-0.412425,0.042178,-997.760837,-413.286071,2058.811877, -0.804774,-0.576808,0.140116,-891.670534,-595.795203,2148.211628, -0.910916,-0.376813,0.168059,-990.771213,-410.390874,2148.211628, -0.576766,-0.804716,0.140615,-467.169144,-699.168033,914.026067, -0.691243,-0.718915,0.073102,-600.487204,-600.487204,855.371869, -0.554824,-0.830073,0.056107,-471.799769,-706.098253,855.371869, -0.691243,-0.718915,0.073102,-600.487204,-600.487204,855.371869, -0.576766,-0.804716,0.140615,-467.169144,-699.168033,914.026067, -0.722676,-0.676733,0.140615,-594.593537,-594.593537,914.026067, 0.159907,-0.795581,-0.584364,152.95461,-768.954752,631.979457, 0.024909,-0.75872,-0.65094,0,-745.443558,587.016307, 0.172449,-0.739282,-0.65094,145.428824,-731.120069,587.016307, 0.024909,-0.75872,-0.65094,0,-745.443558,587.016307, 0.159907,-0.795581,-0.584364,152.95461,-768.954752,631.979457, 0.001625,-0.81149,-0.584364,0,-784.019466,631.979457, -0.631049,-0.421653,-0.651142,-619.813666,-414.146251,587.016307, -0.586347,-0.571185,-0.574408,-554.385481,-554.385481,631.979457, -0.692236,-0.442144,-0.570366,-651.888362,-435.577878,631.979457, -0.586347,-0.571185,-0.574408,-554.385481,-554.385481,631.979457, -0.631049,-0.421653,-0.651142,-619.813666,-414.146251,587.016307, -0.518883,-0.55411,-0.65094,-527.108195,-527.108195,587.016307, 0.456496,-0.854043,-0.249443,475.358482,-929.775248,1832.249363, 0.388566,-0.856387,-0.340026,399.515588,-964.515951,1812.397596, 0.445004,-0.832543,-0.329915,533.995007,-892.635204,1812.397596, 0.388566,-0.856387,-0.340026,399.515588,-964.515951,1812.397596, 0.456496,-0.854043,-0.249443,475.358482,-929.775248,1832.249363, 0.456496,-0.854043,-0.249443,422.745208,-966.763694,1862.604996, 0.388566,-0.856387,-0.340026,399.515588,-964.515951,1812.397596, 0.456496,-0.854043,-0.249443,422.745208,-966.763694,1862.604996, 0.326059,-0.911614,-0.25029,406.150723,-980.534583,1879.384872, -0.483833,-0.675055,0.556961,-519.085398,-776.866198,2455.64332, -0.619247,-0.617355,0.485186,-705.352697,-705.352697,2361.464898, -0.486909,-0.726302,0.485186,-554.192058,-829.407027,2361.464898, -0.619247,-0.617355,0.485186,-705.352697,-705.352697,2361.464898, -0.483833,-0.675055,0.556961,-519.085398,-776.866198,2455.64332, -0.606233,-0.567693,0.556961,-660.670395,-660.670395,2455.64332, 0,0,-1,-660.670395,-660.670395,2455.64332, 0,0,-1,-519.085398,-776.866198,2455.64332, 0,0,-1,-569.38575,-735.585766,2455.64332, 0,0,-1,-660.670395,-660.670395,2455.64332, 0,0,-1,-569.38575,-735.585766,2455.64332, 0,0,-1,-642.325255,-675.725862,2455.64332, 0.380494,-0.91777,-0.113678,324.326404,-782.993204,796.15315, 0.188038,-0.94135,-0.280182,163.055979,-819.737765,738.078199, 0.368074,-0.886578,-0.280182,319.845809,-772.17609,738.078199, 0.188038,-0.94135,-0.280182,163.055979,-819.737765,738.078199, 0.380494,-0.91777,-0.113678,324.326404,-782.993204,796.15315, 0.194135,-0.974366,-0.113678,165.340167,-831.221151,796.15315, 0.976753,-0.214369,-0,824.724927,-164.047988,2455.64332, 0.995185,-0.098017,-0,832.543812,-84.661515,2549.07468, 0.980785,-0.19509,0,824.724927,-164.047988,2549.07468, 0.995185,-0.098017,-0,832.543812,-84.661515,2549.07468, 0.976753,-0.214369,-0,824.724927,-164.047988,2455.64332, 0.995185,-0.098017,-0,840.882244,0,2455.64332, 0.995185,-0.098017,-0,832.543812,-84.661515,2549.07468, 0.995185,-0.098017,-0,840.882244,0,2455.64332, 0.995185,-0.098017,0,840.882244,0,2549.07468, -0.929871,-0.091584,-0.356303,-1043.984543,0,1812.397596, -0.843385,-0.187656,-0.503476,-978.352295,-194.606371,1708.939502, -0.925561,-0.183175,-0.331336,-1023.924672,-203.671281,1812.397596, -0.843385,-0.187656,-0.503476,-978.352295,-194.606371,1708.939502, -0.929871,-0.091584,-0.356303,-1043.984543,0,1812.397596, -0.850126,-0.08373,-0.51988,-997.51935,0,1708.939502, -0.518883,-0.55411,-0.65094,-527.108195,-527.108195,587.016307, -0.449489,-0.675632,-0.584364,-435.577878,-651.888362,631.979457, -0.586347,-0.571185,-0.574408,-554.385481,-554.385481,631.979457, -0.449489,-0.675632,-0.584364,-435.577878,-651.888362,631.979457, -0.518883,-0.55411,-0.65094,-527.108195,-527.108195,587.016307, -0.400811,-0.644692,-0.65094,-414.146251,-619.813666,587.016307, -0.498268,-0.747902,-0.438601,-452.472967,-677.173649,682.822311, -0.586347,-0.571185,-0.574408,-554.385481,-554.385481,631.979457, -0.449489,-0.675632,-0.584364,-435.577878,-651.888362,631.979457, -0.586347,-0.571185,-0.574408,-554.385481,-554.385481,631.979457, -0.498268,-0.747902,-0.438601,-452.472967,-677.173649,682.822311, -0.644016,-0.644016,-0.412901,-575.888851,-575.888851,682.822311, 0.91563,-0.400602,-0.033753,997.760837,-413.286071,2011.592523, 0.881921,-0.471397,-0,912.783669,-572.267169,2035.202245, 0.880538,-0.470657,-0.055991,911.540742,-574.592523,2011.592523, 0.881921,-0.471397,-0,912.783669,-572.267169,2035.202245, 0.923514,-0.382532,0.028131,997.760837,-413.286071,2058.811877, 0.880538,-0.470657,0.055991,911.540741,-574.592525,2058.811877, 0.923514,-0.382532,0.028131,997.760837,-413.286071,2058.811877, 0.881921,-0.471397,-0,912.783669,-572.267169,2035.202245, 0.91563,-0.400602,-0.033753,997.760837,-413.286071,2011.592523, 0.184965,-0.925205,-0.331336,203.671281,-1023.924672,1812.397596, 0.001003,-0.863953,-0.503571,0,-997.51935,1708.939502, 0.169533,-0.847157,-0.503571,194.606371,-978.352295,1708.939502, 0.001003,-0.863953,-0.503571,0,-997.51935,1708.939502, 0.184965,-0.925205,-0.331336,203.671281,-1023.924672,1812.397596, 0.000913,-0.943512,-0.331336,0,-1043.984543,1812.397596, 0.165848,-0.978799,0.120197,209.215453,-1051.797109,2148.211628, 0.097863,-0.993624,0.055991,36.399844,-1076.383476,2058.811877, 0.168583,-0.985419,0.023006,210.691412,-1059.217255,2058.811877, 0.097863,-0.993624,0.055991,36.399844,-1076.383476,2058.811877, 0.165848,-0.978799,0.120197,209.215453,-1051.797109,2148.211628, 0.097671,-0.991674,0.083921,35.951781,-1076.356667,2059.650143, 0.097671,-0.991674,0.083921,35.951781,-1076.356667,2059.650143, 0.165848,-0.978799,0.120197,209.215453,-1051.797109,2148.211628, 0.097671,-0.991674,0.083921,30.354884,-1076.33078,2066.469982, 0.097671,-0.991674,0.083921,30.354884,-1076.33078,2066.469982, 0.165848,-0.978799,0.120197,209.215453,-1051.797109,2148.211628, 0.097671,-0.991674,0.083921,23.535045,-1076.528834,2072.06688, 0.097671,-0.991674,0.083921,23.535045,-1076.528834,2072.06688, 0.165848,-0.978799,0.120197,209.215453,-1051.797109,2148.211628, 0.097671,-0.991674,0.083921,15.754347,-1076.943219,2076.225749, 0.097671,-0.991674,0.083921,15.754347,-1076.943219,2076.225749, 0.165848,-0.978799,0.120197,209.215453,-1051.797109,2148.211628, 0.097671,-0.991674,0.083921,7.311798,-1077.55801,2078.786769, 0.097671,-0.991674,0.083921,7.311798,-1077.55801,2078.786769, 0.165848,-0.978799,0.120197,209.215453,-1051.797109,2148.211628, 0.032696,-0.995906,0.084279,0,-1078.217216,2079.506918, 0.032696,-0.995906,0.084279,0,-1078.217216,2079.506918, 0.165848,-0.978799,0.120197,209.215453,-1051.797109,2148.211628, -0.000463,-0.985777,0.168059,0,-1072.403033,2148.211628, 0.592199,-0.097715,0.799845,824.724927,-164.047988,914.026067, 0.598955,-0.058992,0.798607,654.019524,0,1054.17292, 0.584514,-0.136347,0.799845,641.452722,-127.592879,1054.17292, 0.598955,-0.058992,0.798607,654.019524,0,1054.17292, 0.592199,-0.097715,0.799845,824.724927,-164.047988,914.026067, 0.598955,-0.058992,0.798607,840.882244,0,914.026067, 0,0.412792,-0.910825,653.750225,-879.083714,2240.210435, 0,0.527988,-0.849252,180.675225,-917.447181,2219.704735, 0,0.352162,-0.935939,180.675225,-879.083714,2240.210435, 0,0.527988,-0.849252,180.675225,-917.447181,2219.704735, 0,0.412792,-0.910825,653.750225,-879.083714,2240.210435, 0,0.582554,-0.812792,653.750225,-917.447181,2219.704735, 0.145631,-0.882589,0.447021,145.820434,-733.088824,1427.89836, 0.029352,-0.894042,0.447021,0,-840.882244,1241.03564, 0.203207,-0.871137,0.447021,164.047988,-824.724927,1241.03564, 0.029352,-0.894042,0.447021,0,-840.882244,1241.03564, 0.145631,-0.882589,0.447021,145.820434,-733.088824,1427.89836, -0.029352,-0.894042,0.447021,0,-747.450884,1427.89836, -0.247761,-0.546683,0.799845,-321.791703,-776.873894,914.026067, -0.316902,-0.509726,0.799845,-363.353779,-543.79736,1054.17292, -0.349653,-0.487843,0.799845,-467.169144,-699.168033,914.026067, -0.316902,-0.509726,0.799845,-363.353779,-543.79736,1054.17292, -0.247761,-0.546683,0.799845,-321.791703,-776.873894,914.026067, -0.21137,-0.561756,0.799845,-250.282436,-604.235252,1054.17292, 0,-0.290285,-0.95694,577.578281,-864.406983,1802.66502, 0,-0.336778,-0.941584,653.750225,-887.575434,1809.693092, 0,-0.412792,-0.910825,540.896876,-887.575434,1809.693092, 0,-0.336778,-0.941584,653.750225,-887.575434,1809.693092, 0,-0.290285,-0.95694,577.578281,-864.406983,1802.66502, 0,-0.227168,-0.973856,600.307476,-841.785968,1795.80301, 0,-0.336778,-0.941584,653.750225,-887.575434,1809.693092, 0,-0.227168,-0.973856,600.307476,-841.785968,1795.80301, 0,-0.19509,-0.980785,653.750225,-841.785968,1795.80301, 0,-0.973856,-0.227168,653.750225,-1033.56568,1987.582722, 0.147851,-0.963743,-0.222127,320.792433,-1019.675597,1941.793256, 0,-0.903939,-0.427662,653.750225,-1019.675597,1941.793256, 0.147851,-0.963743,-0.222127,320.792433,-1019.675597,1941.793256, 0,-0.973856,-0.227168,653.750225,-1033.56568,1987.582722, 0.117291,-0.984202,-0.132626,288.287532,-1033.56568,1987.582722, 0.145631,-0.882589,0.447021,136.706657,-687.270773,1241.03564, 0.029352,-0.894042,0.447021,0,-794.166564,1054.17292, 0.203207,-0.871137,0.447021,154.934211,-778.906876,1054.17292, 0.029352,-0.894042,0.447021,0,-794.166564,1054.17292, 0.145631,-0.882589,0.447021,136.706657,-687.270773,1241.03564, -0.029352,-0.894042,0.447021,0,-700.735204,1241.03564, -0.555123,-0.830697,0.0422,-599.998378,-897.96103,2058.811877, -0.634145,-0.772707,-0.027996,-644.00684,-861.844218,2011.592523, -0.575005,-0.816448,-0.052732,-599.998378,-897.96103,2011.592523, -0.634145,-0.772707,-0.027996,-644.00684,-861.844218,2011.592523, -0.555123,-0.830697,0.0422,-599.998378,-897.96103,2058.811877, -0.633398,-0.771798,0.055991,-644.327894,-861.580736,2058.811877, -0.032487,-0.989531,0.140615,0,-840.882244,914.026067, -0.194936,-0.97921,0.056107,-165.674047,-832.899679,855.371869, -0.000155,-0.998425,0.056107,0,-849.217148,855.371869, -0.194936,-0.97921,0.056107,-165.674047,-832.899679,855.371869, -0.032487,-0.989531,0.140615,0,-840.882244,914.026067, -0.224911,-0.96418,0.140615,-164.047988,-824.724927,914.026067, 0.993624,-0.097863,0.055991,1079.968548,0,2058.811877, 0.966926,-0.191862,0.168059,1051.797109,-209.215453,2148.211628, 0.979923,-0.19486,0.0422,1059.217255,-210.691412,2058.811877, 0.966926,-0.191862,0.168059,1051.797109,-209.215453,2148.211628, 0.993624,-0.097863,0.055991,1079.968548,0,2058.811877, 0.976104,-0.096138,0.19488,1072.403033,0,2148.211628, -0.55557,0,-0.83147,23.535045,-976.504549,2072.06688, -0.412792,0,-0.910825,15.754347,-1076.943219,2076.225749, -0.352162,0,-0.935939,15.754347,-977.02193,2076.225749, -0.412792,0,-0.910825,15.754347,-1076.943219,2076.225749, -0.55557,0,-0.83147,23.535045,-976.504549,2072.06688, -0.55557,0,-0.83147,23.535045,-1076.528834,2072.06688, -0.509726,-0.316902,0.799845,-699.168033,-467.169144,914.026067, -0.546683,-0.247761,0.799845,-604.235252,-250.282436,1054.17292, -0.561756,-0.21137,0.799845,-776.873894,-321.791703,914.026067, -0.546683,-0.247761,0.799845,-604.235252,-250.282436,1054.17292, -0.509726,-0.316902,0.799845,-699.168033,-467.169144,914.026067, -0.487843,-0.349653,0.799845,-543.79736,-363.353779,1054.17292, 0.188038,-0.94135,-0.280182,163.055979,-819.737765,738.078199, 0.001218,-0.898681,-0.438601,0,-814.429823,682.822311, 0.176518,-0.881175,-0.438601,158.887376,-798.780783,682.822311, 0.001218,-0.898681,-0.438601,0,-814.429823,682.822311, 0.188038,-0.94135,-0.280182,163.055979,-819.737765,738.078199, 0.000777,-0.959946,-0.280182,0,-835.797377,738.078199, -0.92664,-0.348663,0.140615,-776.873894,-321.791703,914.026067, -0.972323,-0.22681,0.056077,-832.899679,-165.674047,855.371869, -0.909392,-0.412143,0.056077,-784.574342,-324.981333,855.371869, -0.972323,-0.22681,0.056077,-832.899679,-165.674047,855.371869, -0.92664,-0.348663,0.140615,-776.873894,-321.791703,914.026067, -0.976856,-0.161185,0.140615,-824.724927,-164.047988,914.026067, -0.743689,-0.496917,0.447214,-660.325365,-441.215303,1614.76108, -0.789573,-0.422036,0.445488,-772.428086,-428.732587,1427.89836, -0.743689,-0.496917,0.447214,-738.010701,-493.122985,1427.89836, -0.789573,-0.422036,0.445488,-772.428086,-428.732587,1427.89836, -0.743689,-0.496917,0.447214,-660.325365,-441.215303,1614.76108, -0.819473,-0.358504,0.447144,-733.714234,-303.914386,1614.76108, -0.789573,-0.422036,0.445488,-772.428086,-428.732587,1427.89836, -0.819473,-0.358504,0.447144,-733.714234,-303.914386,1614.76108, -0.789573,-0.422036,0.445488,-814.713927,-349.621343,1427.89836, -0.789573,-0.422036,0.445488,-814.713927,-349.621343,1427.89836, -0.819473,-0.358504,0.447144,-733.714234,-303.914386,1614.76108, -0.826343,-0.342282,0.447214,-820.033555,-339.66902,1427.89836, -0.79057,-0.348586,-0.503476,-921.587711,-381.734129,1708.939502, -0.705336,-0.438515,-0.556961,-776.866198,-519.085398,1614.76108, -0.707373,-0.49612,-0.503476,-829.407027,-554.192058,1708.939502, -0.705336,-0.438515,-0.556961,-776.866198,-519.085398,1614.76108, -0.79057,-0.348586,-0.503476,-921.587711,-381.734129,1708.939502, -0.733442,-0.392033,-0.555314,-813.095616,-451.304926,1614.76108, -0.733442,-0.392033,-0.555314,-813.095616,-451.304926,1614.76108, -0.79057,-0.348586,-0.503476,-921.587711,-381.734129,1708.939502, -0.733442,-0.392033,-0.555314,-857.607798,-368.02849,1614.76108, -0.733442,-0.392033,-0.555314,-857.607798,-368.02849,1614.76108, -0.79057,-0.348586,-0.503476,-921.587711,-381.734129,1708.939502, -0.777333,-0.292484,-0.556961,-863.20747,-357.552241,1614.76108, 0.871137,-0.203207,0.447021,824.724927,-164.047988,1241.03564, 0.837219,-0.315017,0.447021,690.554573,-286.03707,1427.89836, 0.814754,-0.369253,0.447021,776.873894,-321.791703,1241.03564, 0.837219,-0.315017,0.447021,690.554573,-286.03707,1427.89836, 0.871137,-0.203207,0.447021,824.724927,-164.047988,1241.03564, 0.882589,-0.145631,0.447021,733.088824,-145.820434,1427.89836, 0,0,-1,-700.735204,0,1241.03564, 0,0,-1,-824.724927,-164.047988,1241.03564, 0,0,-1,-840.882244,0,1241.03564, 0,0,-1,-824.724927,-164.047988,1241.03564, 0,0,-1,-700.735204,0,1241.03564, 0,0,-1,-776.873894,-321.791703,1241.03564, 0,0,-1,-776.873894,-321.791703,1241.03564, 0,0,-1,-700.735204,0,1241.03564, 0,0,-1,-699.168033,-467.169144,1241.03564, 0,0,-1,-699.168033,-467.169144,1241.03564, 0,0,-1,-700.735204,0,1241.03564, 0,0,-1,-687.270773,-136.706657,1241.03564, 0,0,-1,-699.168033,-467.169144,1241.03564, 0,0,-1,-687.270773,-136.706657,1241.03564, 0,0,-1,-594.593537,-594.593537,1241.03564, 0,0,-1,-594.593537,-594.593537,1241.03564, 0,0,-1,-687.270773,-136.706657,1241.03564, 0,0,-1,-647.394912,-268.159753,1241.03564, 0,0,-1,-594.593537,-594.593537,1241.03564, 0,0,-1,-647.394912,-268.159753,1241.03564, 0,0,-1,-582.640028,-389.30762,1241.03564, 0,0,-1,-594.593537,-594.593537,1241.03564, 0,0,-1,-582.640028,-389.30762,1241.03564, 0,0,-1,-467.169144,-699.168033,1241.03564, 0,0,-1,-467.169144,-699.168033,1241.03564, 0,0,-1,-582.640028,-389.30762,1241.03564, 0,0,-1,-495.494614,-495.494614,1241.03564, 0,0,-1,-467.169144,-699.168033,1241.03564, 0,0,-1,-495.494614,-495.494614,1241.03564, 0,0,-1,-389.30762,-582.640028,1241.03564, 0,0,-1,-467.169144,-699.168033,1241.03564, 0,0,-1,-389.30762,-582.640028,1241.03564, 0,0,-1,-321.791703,-776.873894,1241.03564, 0,0,-1,-321.791703,-776.873894,1241.03564, 0,0,-1,-389.30762,-582.640028,1241.03564, 0,0,-1,-268.159753,-647.394912,1241.03564, 0,0,-1,-321.791703,-776.873894,1241.03564, 0,0,-1,-268.159753,-647.394912,1241.03564, 0,0,-1,-164.047988,-824.724927,1241.03564, 0,0,-1,-164.047988,-824.724927,1241.03564, 0,0,-1,-268.159753,-647.394912,1241.03564, 0,0,-1,-136.706657,-687.270773,1241.03564, 0,0,-1,-164.047988,-824.724927,1241.03564, 0,0,-1,-136.706657,-687.270773,1241.03564, 0,0,-1,0,-840.882244,1241.03564, 0,0,-1,0,-840.882244,1241.03564, 0,0,-1,-136.706657,-687.270773,1241.03564, 0,0,-1,0,-700.735204,1241.03564, 0,0,-1,0,-840.882244,1241.03564, 0,0,-1,0,-700.735204,1241.03564, 0,0,-1,136.706657,-687.270773,1241.03564, 0,0,-1,0,-840.882244,1241.03564, 0,0,-1,136.706657,-687.270773,1241.03564, 0,0,-1,164.047988,-824.724927,1241.03564, 0,0,-1,164.047988,-824.724927,1241.03564, 0,0,-1,136.706657,-687.270773,1241.03564, 0,0,-1,268.159753,-647.394912,1241.03564, 0,0,-1,164.047988,-824.724927,1241.03564, 0,0,-1,268.159753,-647.394912,1241.03564, 0,0,-1,321.791703,-776.873894,1241.03564, 0,0,-1,321.791703,-776.873894,1241.03564, 0,0,-1,268.159753,-647.394912,1241.03564, 0,0,-1,389.30762,-582.640028,1241.03564, 0,0,-1,321.791703,-776.873894,1241.03564, 0,0,-1,389.30762,-582.640028,1241.03564, 0,0,-1,467.169144,-699.168033,1241.03564, 0,0,-1,467.169144,-699.168033,1241.03564, 0,0,-1,389.30762,-582.640028,1241.03564, 0,0,-1,495.494614,-495.494614,1241.03564, 0,0,-1,467.169144,-699.168033,1241.03564, 0,0,-1,495.494614,-495.494614,1241.03564, 0,0,-1,594.593537,-594.593537,1241.03564, 0,0,-1,594.593537,-594.593537,1241.03564, 0,0,-1,495.494614,-495.494614,1241.03564, 0,0,-1,582.640028,-389.30762,1241.03564, 0,0,-1,594.593537,-594.593537,1241.03564, 0,0,-1,582.640028,-389.30762,1241.03564, 0,0,-1,647.394912,-268.159753,1241.03564, 0,0,-1,594.593537,-594.593537,1241.03564, 0,0,-1,647.394912,-268.159753,1241.03564, 0,0,-1,699.168033,-467.169144,1241.03564, 0,0,-1,699.168033,-467.169144,1241.03564, 0,0,-1,647.394912,-268.159753,1241.03564, 0,0,-1,687.270773,-136.706657,1241.03564, 0,0,-1,699.168033,-467.169144,1241.03564, 0,0,-1,687.270773,-136.706657,1241.03564, 0,0,-1,700.735204,0,1241.03564, 0,0,-1,699.168033,-467.169144,1241.03564, 0,0,-1,700.735204,0,1241.03564, 0,0,-1,776.873894,-321.791703,1241.03564, 0,0,-1,776.873894,-321.791703,1241.03564, 0,0,-1,700.735204,0,1241.03564, 0,0,-1,840.882244,0,1241.03564, 0,0,-1,776.873894,-321.791703,1241.03564, 0,0,-1,840.882244,0,1241.03564, 0,0,-1,824.724927,-164.047988,1241.03564, 0.15719,-0.880542,0.447144,154.934211,-778.906876,1614.76108, 0.087754,-0.890977,0.445488,133.953889,-874.404617,1427.89836, 0.174494,-0.877241,0.447214,173.161765,-870.542978,1427.89836, 0.087754,-0.890977,0.445488,133.953889,-874.404617,1427.89836, 0.15719,-0.880542,0.447144,154.934211,-778.906876,1614.76108, 0.087754,-0.890977,0.445488,44.790142,-883.18648,1427.89836, 0.087754,-0.890977,0.445488,44.790142,-883.18648,1427.89836, -0,-0.894427,0.447214,0,-794.166564,1614.76108, -0,-0.894427,0.447214,0,-887.597924,1427.89836, -0,-0.894427,0.447214,0,-794.166564,1614.76108, 0.087754,-0.890977,0.445488,44.790142,-883.18648,1427.89836, 0.15719,-0.880542,0.447144,154.934211,-778.906876,1614.76108, 0,-0.935939,0.352162,653.750225,-1019.675597,2128.611098, 0.146874,-0.976542,0.157463,288.287545,-1033.56568,2082.821632, 0,-0.986659,0.162803,653.750225,-1033.56568,2082.821632, 0.146874,-0.976542,0.157463,288.287545,-1033.56568,2082.821632, 0,-0.935939,0.352162,653.750225,-1019.675597,2128.611098, 0.118798,-0.950331,0.287676,320.792446,-1019.675597,2128.611098, -0.582554,-0.812792,-0,-467.169144,-699.168033,2549.07468, -0.707107,-0.707107,-0,-594.593537,-594.593537,2455.64332, -0.527988,-0.849252,-0,-467.169144,-699.168033,2455.64332, -0.707107,-0.707107,-0,-594.593537,-594.593537,2455.64332, -0.582554,-0.812792,-0,-467.169144,-699.168033,2549.07468, -0.707107,-0.707107,-0,-594.593537,-594.593537,2549.07468, 0,0,1,-594.593537,-594.593537,2549.07468, 0,0,1,-467.169144,-699.168033,2549.07468, 0,0,1,-512.438676,-662.016288,2549.07468, 0,0,1,-594.593537,-594.593537,2549.07468, 0,0,1,-512.438676,-662.016288,2549.07468, 0,0,1,-578.083211,-608.143211,2549.07468, -0.840814,-0.522742,0.140615,-699.168033,-467.169144,914.026067, -0.909392,-0.412143,0.056077,-784.574342,-324.981333,855.371869, -0.811513,-0.581637,0.056077,-706.098253,-471.799769,855.371869, -0.909392,-0.412143,0.056077,-784.574342,-324.981333,855.371869, -0.840814,-0.522742,0.140615,-699.168033,-467.169144,914.026067, -0.92664,-0.348663,0.140615,-776.873894,-321.791703,914.026067, -0.923079,-0.382289,-0.0422,-997.760837,-413.286071,2011.592523, -0.804773,-0.576807,-0.140121,-891.670534,-595.795203,1922.192772, -0.841785,-0.538757,-0.033753,-897.96103,-599.998378,2011.592523, -0.804773,-0.576807,-0.140121,-891.670534,-595.795203,1922.192772, -0.923079,-0.382289,-0.0422,-997.760837,-413.286071,2011.592523, -0.910916,-0.376813,-0.168059,-990.771213,-410.390874,1922.192772, -0.910916,-0.376813,-0.168059,-990.771213,-410.390874,1922.192772, -0.785009,-0.523429,-0.331336,-868.041423,-580.006736,1812.397596, -0.804773,-0.576807,-0.140121,-891.670534,-595.795203,1922.192772, -0.785009,-0.523429,-0.331336,-868.041423,-580.006736,1812.397596, -0.910916,-0.376813,-0.168059,-990.771213,-410.390874,1922.192772, -0.872041,-0.360223,-0.331336,-964.515951,-399.515588,1812.397596, -0.872041,-0.360223,-0.331336,-964.515951,-399.515588,1812.397596, -0.707373,-0.49612,-0.503476,-829.407027,-554.192058,1708.939502, -0.785009,-0.523429,-0.331336,-868.041423,-580.006736,1812.397596, -0.707373,-0.49612,-0.503476,-829.407027,-554.192058,1708.939502, -0.872041,-0.360223,-0.331336,-964.515951,-399.515588,1812.397596, -0.79057,-0.348586,-0.503476,-921.587711,-381.734129,1708.939502, -0.674254,-0.733678,0.084249,-761.149822,-761.149822,2100.644855, -0.772335,-0.633825,0.041998,-786.924742,-735.296195,2058.807508, -0.683228,-0.729664,0.028116,-763.653083,-763.653083,2058.811877, -0.772335,-0.633825,0.041998,-786.924742,-735.296195,2058.807508, -0.674254,-0.733678,0.084249,-761.149822,-761.149822,2100.644855, -0.770291,-0.632147,0.083917,-766.822004,-754.694855,2097.204109, -0.772335,-0.633825,0.041998,-786.924742,-735.296195,2058.807508, -0.770291,-0.632147,0.083917,-766.822004,-754.694855,2097.204109, -0.770291,-0.632147,0.083917,-781.183382,-739.911027,2076.744949, 0.890977,-0.087754,0.445488,887.597924,0,1427.89836, 0.882589,-0.145631,0.447021,778.906876,-154.934211,1614.76108, 0.871137,-0.203207,0.447021,870.542978,-173.161765,1427.89836, 0.882589,-0.145631,0.447021,778.906876,-154.934211,1614.76108, 0.890977,-0.087754,0.445488,887.597924,0,1427.89836, 0.890977,-0.087754,0.445488,794.166564,0,1614.76108, -0.872041,-0.360223,0.331336,-964.515951,-399.515588,2258.006804, -0.966926,-0.191862,0.168059,-1051.797109,-209.215453,2148.211628, -0.910916,-0.376813,0.168059,-990.771213,-410.390874,2148.211628, -0.966926,-0.191862,0.168059,-1051.797109,-209.215453,2148.211628, -0.872041,-0.360223,0.331336,-964.515951,-399.515588,2258.006804, -0.925561,-0.183175,0.331336,-1023.924672,-203.671281,2258.006804, 0.522742,-0.840814,0.140615,467.169144,-699.168033,914.026067, 0.381937,-0.922484,0.056107,324.981333,-784.574342,855.371869, 0.554566,-0.830246,0.056107,471.799769,-706.098253,855.371869, 0.381937,-0.922484,0.056107,324.981333,-784.574342,855.371869, 0.522742,-0.840814,0.140615,467.169144,-699.168033,914.026067, 0.348663,-0.92664,0.140615,321.791703,-776.873894,914.026067, 0.247761,-0.546683,0.799845,321.791703,-776.873894,914.026067, 0.316902,-0.509726,0.799845,363.353779,-543.79736,1054.17292, 0.21137,-0.561756,0.799845,250.282436,-604.235252,1054.17292, 0.316902,-0.509726,0.799845,363.353779,-543.79736,1054.17292, 0.247761,-0.546683,0.799845,321.791703,-776.873894,914.026067, 0.349653,-0.487843,0.799845,467.169144,-699.168033,914.026067, 0.872041,-0.360223,-0.331336,964.515951,-399.515588,1812.397596, 0.966926,-0.191862,-0.168059,1051.797109,-209.215453,1922.192772, 0.901839,-0.40872,-0.140121,990.771213,-410.390874,1922.192772, 0.966926,-0.191862,-0.168059,1051.797109,-209.215453,1922.192772, 0.872041,-0.360223,-0.331336,964.515951,-399.515588,1812.397596, 0.925561,-0.183175,-0.331336,1023.924672,-203.671281,1812.397596, 0.929871,-0.091584,0.356303,1043.984543,0,2258.006804, 0.843385,-0.187656,0.503476,978.352295,-194.606371,2361.464898, 0.925561,-0.183175,0.331336,1023.924672,-203.671281,2258.006804, 0.843385,-0.187656,0.503476,978.352295,-194.606371,2361.464898, 0.929871,-0.091584,0.356303,1043.984543,0,2258.006804, 0.850126,-0.08373,0.51988,997.51935,0,2361.464898, 0.748575,-0.61434,0.249443,767.904956,-709.249312,2240.210435, 0.665498,-0.684813,0.29689,738.20855,-738.20855,2258.006804, 0.684548,-0.684548,0.250574,739.77113,-739.77113,2249.469127, 0.665498,-0.684813,0.29689,738.20855,-738.20855,2258.006804, 0.748575,-0.61434,0.249443,767.904956,-709.249312,2240.210435, 0.769936,-0.566074,0.294549,868.041423,-580.006736,2258.006804, 0.769936,-0.566074,0.294549,868.041423,-580.006736,2258.006804, 0.748575,-0.61434,0.249443,767.904956,-709.249312,2240.210435, 0.748575,-0.61434,0.249443,806.222028,-670.885845,2219.704735, 0.769936,-0.566074,0.294549,868.041423,-580.006736,2258.006804, 0.748575,-0.61434,0.249443,806.222028,-670.885845,2219.704735, 0.748575,-0.61434,0.249443,843.013714,-637.259985,2192.108705, 0.769936,-0.566074,0.294549,868.041423,-580.006736,2258.006804, 0.748575,-0.61434,0.249443,843.013714,-637.259985,2192.108705, 0.748575,-0.61434,0.249443,876.866129,-609.663955,2158.482845, 0.769936,-0.566074,0.294549,868.041423,-580.006736,2258.006804, 0.748575,-0.61434,0.249443,876.866129,-609.663955,2158.482845, 0.75819,-0.62223,0.19488,884.794335,-604.173876,2148.211628, 0.769936,-0.566074,0.294549,868.041423,-580.006736,2258.006804, 0.75819,-0.62223,0.19488,884.794335,-604.173876,2148.211628, 0.832671,-0.532692,0.151323,891.670534,-595.795203,2148.211628, -0.619247,-0.617355,0.485186,-705.352697,-705.352697,2361.464898, -0.785009,-0.523429,0.331336,-868.041423,-580.006736,2258.006804, -0.666389,-0.680555,0.304582,-738.20855,-738.20855,2258.006804, -0.785009,-0.523429,0.331336,-868.041423,-580.006736,2258.006804, -0.619247,-0.617355,0.485186,-705.352697,-705.352697,2361.464898, -0.707373,-0.49612,0.503476,-829.407027,-554.192058,2361.464898, -0,-0.995185,0.098017,911.540742,-574.592523,2011.592523, -0,-0.986659,0.162803,180.675225,-576.530907,1991.911763, 0,-0.973856,0.227168,908.62526,-576.530907,1991.911763, -0,-0.986659,0.162803,180.675225,-576.530907,1991.911763, -0,-0.995185,0.098017,911.540742,-574.592523,2011.592523, 0,-0.999462,0.032813,180.675225,-572.267173,2035.202177, 0,-0.999462,0.032813,180.675225,-572.267173,2035.202177, -0,-0.995185,0.098017,911.540742,-574.592523,2011.592523, 0,-1,-0,912.783669,-572.267169,2035.202245, 0,-0.520969,-0.853575,180.675225,-572.267173,2035.202177, 0,-0.520969,-0.853575,912.783669,-572.267169,2035.202245, 0,-0.520969,-0.853575,907.767925,-572.267173,2035.202247, -0,-0.382683,0.92388,767.904941,-709.249312,1830.193918, 0,-0.527988,0.849252,180.675225,-670.885845,1850.699619, 0,-0.352162,0.935939,180.675225,-709.249312,1830.193918, 0,-0.527988,0.849252,180.675225,-670.885845,1850.699619, -0,-0.382683,0.92388,767.904941,-709.249312,1830.193918, 0,-0.582554,0.812792,806.222013,-670.885845,1850.699619, 0.325954,-0.832956,0.447144,303.914386,-733.714234,1614.76108, 0.259888,-0.856737,0.445488,307.339229,-829.84069,1427.89836, 0.342282,-0.826343,0.447214,339.66902,-820.033555,1427.89836, 0.259888,-0.856737,0.445488,307.339229,-829.84069,1427.89836, 0.325954,-0.832956,0.447144,303.914386,-733.714234,1614.76108, 0.259888,-0.856737,0.445488,221.595155,-855.85087,1427.89836, 0.259888,-0.856737,0.445488,221.595155,-855.85087,1427.89836, 0.15719,-0.880542,0.447144,154.934211,-778.906876,1614.76108, 0.174494,-0.877241,0.447214,173.161765,-870.542978,1427.89836, 0.15719,-0.880542,0.447144,154.934211,-778.906876,1614.76108, 0.259888,-0.856737,0.445488,221.595155,-855.85087,1427.89836, 0.325954,-0.832956,0.447144,303.914386,-733.714234,1614.76108, -0.903939,-0,0.427662,40.110651,-1076.017993,2017.42443, -0.849252,-0,0.527988,35.951781,-1076.262688,2009.643732, -0.881921,-0,0.471397,36.993432,-1076.325013,2011.592523, -0.849252,-0,0.527988,35.951781,-1076.262688,2009.643732, -0.903939,-0,0.427662,40.110651,-1076.017993,2017.42443, -0.83147,0,0.55557,35.951781,-975.958402,2009.643732, -0.83147,0,0.55557,35.951781,-975.958402,2009.643732, -0.903939,-0,0.427662,40.110651,-1076.017993,2017.42443, -0.935939,0,0.352162,40.110651,-976.014545,2017.42443, -0.904882,0.382198,0.187384,-853.465107,-778.056207,2053.98621, -0.915533,0.385671,-0.11427,-818.480102,-696.846173,2011.592491, -0.900096,0.367041,-0.234753,-853.905696,-778.543243,2019.687273, -0.915533,0.385671,-0.11427,-818.480102,-696.846173,2011.592491, -0.904882,0.382198,0.187384,-853.465107,-778.056207,2053.98621, -0.904884,0.382185,0.187402,-818.273878,-697.096462,2058.801607, 0.117054,-0.588471,0.8,164.047988,-824.724927,914.026067, 0.21137,-0.561756,0.799845,250.282436,-604.235252,1054.17292, 0.117054,-0.588471,0.8,127.592879,-641.452722,1054.17292, 0.21137,-0.561756,0.799845,250.282436,-604.235252,1054.17292, 0.117054,-0.588471,0.8,164.047988,-824.724927,914.026067, 0.247761,-0.546683,0.799845,321.791703,-776.873894,914.026067, 0.315017,-0.837219,0.447021,268.159753,-647.394912,1241.03564, 0.203207,-0.871137,0.447021,154.934211,-778.906876,1054.17292, 0.369253,-0.814754,0.447021,303.914386,-733.714234,1054.17292, 0.203207,-0.871137,0.447021,154.934211,-778.906876,1054.17292, 0.315017,-0.837219,0.447021,268.159753,-647.394912,1241.03564, 0.145631,-0.882589,0.447021,136.706657,-687.270773,1241.03564, -0.792149,-0.07802,-0.60532,-784.019466,0,631.979457, -0.749001,-0.123588,-0.65094,-731.120069,-145.428824,587.016307, -0.796215,-0.15672,-0.584364,-768.954752,-152.95461,631.979457, -0.749001,-0.123588,-0.65094,-731.120069,-145.428824,587.016307, -0.792149,-0.07802,-0.60532,-784.019466,0,631.979457, -0.756844,-0.074543,-0.649331,-745.443558,0,587.016307, -0.606233,-0.567693,0.556961,-660.670395,-660.670395,2455.64332, -0.707373,-0.49612,0.503476,-829.407027,-554.192058,2361.464898, -0.619247,-0.617355,0.485186,-705.352697,-705.352697,2361.464898, -0.707373,-0.49612,0.503476,-829.407027,-554.192058,2361.464898, -0.606233,-0.567693,0.556961,-660.670395,-660.670395,2455.64332, -0.642867,-0.527587,0.555314,-705.689427,-605.814545,2455.64332, -0.707373,-0.49612,0.503476,-829.407027,-554.192058,2361.464898, -0.642867,-0.527587,0.555314,-705.689427,-605.814545,2455.64332, -0.642867,-0.527587,0.555314,-765.568614,-532.851545,2455.64332, -0.707373,-0.49612,0.503476,-829.407027,-554.192058,2361.464898, -0.642867,-0.527587,0.555314,-765.568614,-532.851545,2455.64332, -0.705336,-0.438515,0.556961,-776.866198,-519.085398,2455.64332, 0.811513,-0.581637,0.056077,706.098253,-471.799769,855.371869, 0.700074,-0.700074,0.140689,594.593537,-594.593537,914.026067, 0.69246,-0.720397,0.039075,600.487204,-600.487204,855.371869, 0.700074,-0.700074,0.140689,594.593537,-594.593537,914.026067, 0.811513,-0.581637,0.056077,706.098253,-471.799769,855.371869, 0.840814,-0.522742,0.140615,699.168033,-467.169144,914.026067, 0.348663,-0.92664,0.140615,321.791703,-776.873894,914.026067, 0.19463,-0.979271,0.056107,165.674047,-832.899679,855.371869, 0.381937,-0.922484,0.056107,324.981333,-784.574342,855.371869, 0.19463,-0.979271,0.056107,165.674047,-832.899679,855.371869, 0.348663,-0.92664,0.140615,321.791703,-776.873894,914.026067, 0.161185,-0.976856,0.140615,164.047988,-824.724927,914.026067, 0,-0.032813,0.999462,670.391133,-794.166513,1813.302837, 0,-0.162803,0.986659,180.675225,-750.8761,1817.56657, 0,0.049186,0.99879,180.675225,-794.166513,1813.302837, 0,-0.162803,0.986659,180.675225,-750.8761,1817.56657, 0,-0.032813,0.999462,670.391133,-794.166513,1813.302837, -0,-0.243095,0.970002,724.871877,-750.8761,1817.56657, 0,0.849252,-0.527988,180.675225,-978.669071,2158.482845, 0,0.910825,-0.412792,653.750225,-999.174772,2120.119378, 0,0.935939,-0.352162,180.675225,-999.174772,2120.119378, 0,0.910825,-0.412792,653.750225,-999.174772,2120.119378, 0,0.849252,-0.527988,180.675225,-978.669071,2158.482845, 0,0.812792,-0.582554,653.750225,-978.669071,2158.482845, 0,-0.973856,0.227168,180.675225,-707.112262,2017.886009, 0,-0.92388,0.382683,104.493588,-712.163205,2001.235298, 0,-0.92388,0.382683,180.675225,-712.163201,2001.235293, 0,-0.92388,0.382683,104.493588,-712.163205,2001.235298, 0,-0.973856,0.227168,180.675225,-707.112262,2017.886009, 0,-0.986659,0.162803,104.493585,-707.112263,2017.886024, 0.632456,-0.632456,0.447214,561.560563,-561.560563,1614.76108, 0.567965,-0.692067,0.445488,540.907511,-698.794954,1427.89836, 0.632456,-0.632456,0.447214,627.626511,-627.626511,1427.89836, 0.567965,-0.692067,0.445488,540.907511,-698.794954,1427.89836, 0.482193,-0.753361,0.447144,441.215303,-660.325365,1614.76108, 0.496917,-0.743689,0.447214,493.122985,-738.010701,1427.89836, 0.482193,-0.753361,0.447144,441.215303,-660.325365,1614.76108, 0.567965,-0.692067,0.445488,540.907511,-698.794954,1427.89836, 0.632456,-0.632456,0.447214,561.560563,-561.560563,1614.76108, -0.358793,-0.190568,-0.913757,-750.03201,-762.726244,1915.0942, -0.188016,-0.3607,-0.913535,-781.550765,-852.489443,1950.715796, -0.475897,-0.070701,-0.876654,-805.854069,-828.277941,1950.684188, -0.188016,-0.3607,-0.913535,-781.550765,-852.489443,1950.715796, -0.358793,-0.190568,-0.913757,-750.03201,-762.726244,1915.0942, -0.10232,-0.445425,-0.889453,-712.20051,-793.069744,1912.981477, 0.438107,-0.410255,0.799845,594.593537,-594.593537,914.026067, 0.487843,-0.349653,0.799845,543.79736,-363.353779,1054.17292, 0.410255,-0.438107,0.799845,462.46164,-462.46164,1054.17292, 0.487843,-0.349653,0.799845,543.79736,-363.353779,1054.17292, 0.438107,-0.410255,0.799845,594.593537,-594.593537,914.026067, 0.509726,-0.316902,0.799845,699.168033,-467.169144,914.026067, -0.633398,-0.771798,0.055991,-683.397325,-829.517282,2058.811877, -0.674254,-0.733678,0.084249,-761.149822,-761.149822,2100.644855, -0.683228,-0.729664,0.028116,-763.653083,-763.653083,2058.811877, -0.674254,-0.733678,0.084249,-761.149822,-761.149822,2100.644855, -0.633398,-0.771798,0.055991,-683.397325,-829.517282,2058.811877, -0.632155,-0.770284,0.083921,-688.216174,-823.53445,2077.427173, -0.674254,-0.733678,0.084249,-761.149822,-761.149822,2100.644855, -0.632155,-0.770284,0.083921,-688.216174,-823.53445,2077.427173, -0.632155,-0.770284,0.083921,-703.270205,-808.916878,2098.19893, -0.674254,-0.733678,0.084249,-761.149822,-761.149822,2100.644855, -0.632155,-0.770284,0.083921,-703.270205,-808.916878,2098.19893, -0.632155,-0.770284,0.083921,-723.842933,-790.8427,2109.126834, -0.674254,-0.733678,0.084249,-761.149822,-761.149822,2100.644855, -0.632155,-0.770284,0.083921,-723.842933,-790.8427,2109.126834, -0.632155,-0.770284,0.083921,-746.579505,-772.239793,2108.608099, -0.826255,-0.551707,-0.113678,-704.675266,-470.848959,796.15315, -0.684138,-0.684138,-0.252806,-590.997993,-590.997993,738.078199, -0.704523,-0.704523,-0.085417,-599.277053,-599.277053,796.15315, -0.684138,-0.684138,-0.252806,-590.997993,-590.997993,738.078199, -0.826255,-0.551707,-0.113678,-704.675266,-470.848959,796.15315, -0.798598,-0.532672,-0.280182,-694.940121,-464.344144,738.078199, -0.164361,-0.334551,0.927934,-779.335772,-850.040945,2123.148196, -0.335138,-0.164419,0.927712,-750.226481,-763.163738,2153.518338, -0.453201,-0.045611,0.890241,-803.639077,-825.829444,2123.116588, -0.335138,-0.164419,0.927712,-750.226481,-763.163738,2153.518338, -0.164361,-0.334551,0.927934,-779.335772,-850.040945,2123.148196, -0.079281,-0.419958,0.904074,-713.051374,-793.031289,2155.442781, -0,-0.243095,0.970002,724.871877,-750.8761,1817.56657, 0,-0.352162,0.935939,180.675225,-709.249312,1830.193918, 0,-0.162803,0.986659,180.675225,-750.8761,1817.56657, 0,-0.352162,0.935939,180.675225,-709.249312,1830.193918, -0,-0.243095,0.970002,724.871877,-750.8761,1817.56657, -0,-0.382683,0.92388,767.904941,-709.249312,1830.193918, -0,-0.382683,0.92388,767.904941,-709.249312,1830.193918, -0,-0.243095,0.970002,724.871877,-750.8761,1817.56657, -0,-0.290285,0.95694,739.771122,-739.771122,1820.935228, -0.666389,-0.680555,0.304582,-738.20855,-738.20855,2258.006804, -0.75819,-0.62223,0.194878,-759.379832,-756.991889,2148.211628, -0.684548,-0.684548,0.250574,-758.175253,-758.175253,2148.912113, -0.75819,-0.62223,0.194878,-759.379832,-756.991889,2148.211628, -0.666389,-0.680555,0.304582,-738.20855,-738.20855,2258.006804, -0.804774,-0.576808,0.140116,-891.670534,-595.795203,2148.211628, -0.804774,-0.576808,0.140116,-891.670534,-595.795203,2148.211628, -0.666389,-0.680555,0.304582,-738.20855,-738.20855,2258.006804, -0.785009,-0.523429,0.331336,-868.041423,-580.006736,2258.006804, -0.201549,0.493286,0.846195,-769.870311,-863.13013,1987.610439, -0.033544,0.328548,0.943892,-723.636295,-790.983771,1961.015863, 0.057027,0.239002,0.969343,-785.140115,-848.157193,1978.730924, -0.033544,0.328548,0.943892,-723.636295,-790.983771,1961.015863, -0.201549,0.493286,0.846195,-769.870311,-863.13013,1987.610439, -0.278983,0.56848,0.77395,-702.965588,-809.153242,1972.08037, 0.267392,-0.774255,0.573613,-655.637458,-847.372595,2104.031681, 0.091725,-0.593783,0.79938,-757.051053,-872.595836,2110.051763, 0.314449,-0.823891,0.471514,-740.177565,-890.06034,2085.821102, 0.091725,-0.593783,0.79938,-757.051053,-872.595836,2110.051763, 0.267392,-0.774255,0.573613,-655.637458,-847.372595,2104.031681, 0.113282,-0.616155,0.779436,-680.351355,-823.413171,2137.783955, -0.772335,-0.633825,0.041998,-786.924742,-735.296195,2058.807508, -0.688905,-0.723623,-0.042187,-763.653083,-763.653083,2011.592523, -0.683228,-0.729664,0.028116,-763.653083,-763.653083,2058.811877, -0.688905,-0.723623,-0.042187,-763.653083,-763.653083,2011.592523, -0.772335,-0.633825,0.041998,-786.924742,-735.296195,2058.807508, -0.772331,-0.633831,-0.041995,-786.927339,-735.293322,2011.59251, -0.772331,-0.633831,-0.041995,-786.927339,-735.293322,2011.59251, -0.772335,-0.633825,0.041998,-786.924742,-735.296195,2058.807508, -0.773018,-0.634385,0.000005,-789.342859,-732.349615,2049.894341, -0.772331,-0.633831,-0.041995,-786.927339,-735.293322,2011.59251, -0.773018,-0.634385,0.000005,-789.342859,-732.349615,2049.894341, -0.773009,-0.634395,0.000007,-789.394717,-732.286733,2020.799449, -0.000001,0.683524,0.729928,104.493611,-856.929211,1972.439549, -0.000001,0.582554,0.812792,180.675225,-843.478786,1961.401146, -0.000001,0.527988,0.849252,104.493611,-843.478858,1961.40113, -0.000001,0.582554,0.812792,180.675225,-843.478786,1961.401146, -0.000001,0.683524,0.729928,104.493611,-856.929211,1972.439549, -0.000001,0.729928,0.683524,180.675225,-856.929131,1972.439559, -0,-0.412792,0.910825,104.493601,-760.199658,1953.198845, -0,-0.527988,0.849252,180.675225,-744.854241,1961.401146, -0,-0.582554,0.812792,104.493598,-744.854262,1961.40113, -0,-0.527988,0.849252,180.675225,-744.854241,1961.401146, -0,-0.412792,0.910825,104.493601,-760.199658,1953.198845, -0,-0.352162,0.935939,180.675225,-760.199629,1953.198865, -0.000001,0.986659,0.162803,104.493608,-881.220857,2017.886024, -0.000001,0.999462,0.032813,180.675225,-882.926259,2035.202177, -0.000001,0.973856,0.227168,180.675225,-881.220765,2017.886009, -0.000001,0.999462,0.032813,180.675225,-882.926259,2035.202177, -0.000001,0.986659,0.162803,104.493608,-881.220857,2017.886024, -0.000001,0.999462,-0.032813,104.493606,-882.926352,2035.2022, 0.972323,-0.22681,0.056077,832.899679,-165.674047,855.371869, 0.92664,-0.348663,0.140615,776.873894,-321.791703,914.026067, 0.909392,-0.412143,0.056077,784.574342,-324.981333,855.371869, 0.92664,-0.348663,0.140615,776.873894,-321.791703,914.026067, 0.972323,-0.22681,0.056077,832.899679,-165.674047,855.371869, 0.976856,-0.161185,0.140615,824.724927,-164.047988,914.026067, -0.486909,-0.726302,0.485186,-554.192058,-829.407027,2361.464898, -0.666389,-0.680555,0.304582,-738.20855,-738.20855,2258.006804, -0.538332,-0.779667,0.319873,-580.006736,-868.041423,2258.006804, -0.666389,-0.680555,0.304582,-738.20855,-738.20855,2258.006804, -0.486909,-0.726302,0.485186,-554.192058,-829.407027,2361.464898, -0.619247,-0.617355,0.485186,-705.352697,-705.352697,2361.464898, -0,0.162803,0.986659,104.493608,-811.482736,1948.147903, -0,0.032813,0.999462,180.675225,-794.166513,1946.442431, -0,-0.032813,0.999462,104.493606,-794.16656,1946.442408, -0,0.032813,0.999462,180.675225,-794.166513,1946.442431, -0,0.162803,0.986659,104.493608,-811.482736,1948.147903, -0,0.227168,0.973856,180.675225,-811.482681,1948.147925, -0.000001,0.92388,0.382683,104.49361,-876.169915,2001.235298, -0.000001,0.849252,0.527988,180.675225,-867.967544,1985.889904, -0.000001,0.812792,0.582554,104.493611,-867.96763,1985.889902, -0.000001,0.849252,0.527988,180.675225,-867.967544,1985.889904, -0.000001,0.92388,0.382683,104.49361,-876.169915,2001.235298, -0.000001,0.92388,0.382683,180.675225,-876.169825,2001.235293, 0.871137,-0.203207,0.447021,870.542978,-173.161765,1427.89836, 0.837219,-0.315017,0.447021,733.714234,-303.914386,1614.76108, 0.814754,-0.369253,0.447021,820.033555,-339.66902,1427.89836, 0.837219,-0.315017,0.447021,733.714234,-303.914386,1614.76108, 0.871137,-0.203207,0.447021,870.542978,-173.161765,1427.89836, 0.882589,-0.145631,0.447021,778.906876,-154.934211,1614.76108, -0,-0.032813,0.999462,104.493606,-794.16656,1946.442408, -0,-0.162803,0.986659,180.675225,-776.850346,1948.147925, -0,-0.227168,0.973856,104.493604,-776.850384,1948.147903, -0,-0.162803,0.986659,180.675225,-776.850346,1948.147925, -0,-0.032813,0.999462,104.493606,-794.16656,1946.442408, -0,0.032813,0.999462,180.675225,-794.166513,1946.442431, -0.000001,0.812792,0.582554,104.493611,-867.96763,1985.889902, -0.000001,0.729928,0.683524,180.675225,-856.929131,1972.439559, -0.000001,0.683524,0.729928,104.493611,-856.929211,1972.439549, -0.000001,0.729928,0.683524,180.675225,-856.929131,1972.439559, -0.000001,0.812792,0.582554,104.493611,-867.96763,1985.889902, -0.000001,0.849252,0.527988,180.675225,-867.967544,1985.889904 }; static const struct gllist robot_body_half_outside_frame = { GL_N3F_V3F, GL_TRIANGLES, 4980, robot_body_half_outside_data, 0 }; const struct gllist *robot_body_half_outside = &robot_body_half_outside_frame; static const float robot_crank_full_data[] = { 0.494392,-0.002816,-0.869234,21.079139,-1635.024615,2001.52588, 0.264054,-0.000004,-0.964508,7.982213,-1575.775514,1996.029042, 0.604615,-0.002819,-0.796513,22.36552,-1575.775401,2002.065588, 0.264054,-0.000004,-0.964508,7.982213,-1575.775514,1996.029042, 0.494392,-0.002816,-0.869234,21.079139,-1635.024615,2001.52588, 0.134401,-0.000005,-0.990927,7.982547,-1635.024718,1996.029357, -0.29795,0.65913,-0.690488,-67.67685,-1260.036772,1941.044079, -0.157155,0.595594,-0.787762,-7.617619,-1175.364474,1995.955026, -0.310189,0.662309,-0.682004,-26.493073,-1260.036639,1922.313042, 0.263844,0.659288,-0.704078,18.723832,-1260.036393,1920.768168, 0.188248,0.621463,-0.760491,7.980911,-1175.364562,1996.027815, 0.276537,0.662012,-0.696611,61.090003,-1260.03607,1936.644652, 0.000006,-1,0.000005,39.173475,-1635.024291,2043.184745, 0.000006,-1,0.000005,33.136928,-1635.024249,2057.568052, 0.000006,-1,0.000005,0.000317,-1635.024555,2035.202515, 0.701587,-0.662307,0.262918,98.556303,-1491.102301,2096.293522, 0.679262,-0.618094,0.395681,33.136594,-1575.775046,2057.567737, 0.698932,-0.659128,0.277569,114.432787,-1491.102437,2053.927351, -0.968686,-0.000003,0.24829,22.124996,-1479.423627,2131.053624, -0.968686,-0.000002,0.24829,26.490435,-1260.035141,2148.088903, -0.968685,-0.000002,0.248291,22.123694,-1271.716449,2131.052397, -0.968686,-0.000002,0.24829,26.490435,-1260.035141,2148.088903, -0.968686,-0.000003,0.24829,22.124996,-1479.423627,2131.053624, -0.968686,-0.000003,0.248288,26.491737,-1491.102432,2148.090131, -0.24829,-0.000002,-0.968686,-39.245963,-1575.775532,2042.8185, -0.248291,-0.000005,-0.968685,-112.887948,-1491.103676,2061.693954, -0.248289,-0.000005,-0.968686,-95.851569,-1479.424684,2057.327217, 0.509398,-0.000001,-0.860531,-83.423414,-1271.715068,1983.068468, 0.509398,-0.000001,-0.860531,-98.556338,-1491.104061,1974.110878, 0.509398,-0.000001,-0.860531,-98.55764,-1260.03677,1974.10965, 0.509398,-0.000001,-0.860531,-98.556338,-1491.104061,1974.110878, 0.509398,-0.000001,-0.860531,-83.423414,-1271.715068,1983.068468, 0.509399,-0.000001,-0.860531,-83.422112,-1479.425008,1983.069695, 0.509398,-0.000001,-0.860531,-33.136629,-1575.775657,2012.836663, 0.509398,-0.000001,-0.860531,-98.556338,-1491.104061,1974.110878, 0.509399,-0.000001,-0.860531,-83.422112,-1479.425008,1983.069695, 0.134401,-0.000005,-0.990927,7.982547,-1635.024718,1996.029357, -0.125147,-0.000006,-0.992138,-7.616317,-1575.775602,1995.956254, 0.264054,-0.000004,-0.964508,7.982213,-1575.775514,1996.029042, -0.125147,-0.000006,-0.992138,-7.616317,-1575.775602,1995.956254, 0.134401,-0.000005,-0.990927,7.982547,-1635.024718,1996.029357, -0.255041,-0.000007,-0.96693,-7.615983,-1635.024806,1995.956569, 0.968687,0.000002,-0.248286,-7.616317,-1575.775602,1995.956254, 0.968687,0.000003,-0.248285,-26.491771,-1491.10393,1922.314269, 0.968687,0.000003,-0.248287,-22.125162,-1479.424895,1939.350652, -0.989965,-0.000002,-0.141315,7.982213,-1575.775514,1996.029042, -0.989965,-0.000005,-0.141313,16.239785,-1479.424685,1938.180011, -0.989965,-0.000005,-0.141316,18.725134,-1491.103683,1920.769396, 0.860529,0.000003,0.509402,22.36552,-1575.775401,2002.065588, 0.860528,0.000006,0.509402,61.091305,-1491.10336,1936.64588, 0.86053,0.000006,0.5094,52.13236,-1479.42441,1951.780109, -0.600085,-0.000006,-0.799936,94.156876,-1491.10301,1967.52667, -0.600085,-0.000004,-0.799936,80.08694,-1271.715963,1978.079227, -0.600083,-0.000002,-0.799938,94.155574,-1260.035719,1967.525442, -0.600085,-0.000004,-0.799936,80.08694,-1271.715963,1978.079227, -0.600085,-0.000006,-0.799936,94.156876,-1491.10301,1967.52667, -0.600087,-0.000006,-0.799935,80.088242,-1479.424113,1978.080455, -0.600086,-0.000003,-0.799936,33.343877,-1575.77528,2013.146883, -0.600087,-0.000006,-0.799935,80.088242,-1479.424113,1978.080455, -0.600085,-0.000006,-0.799936,94.156876,-1491.10301,1967.52667, -0.011122,0.512212,-0.858787,16.238483,-1271.715391,1938.178783, -0.157155,0.595594,-0.787762,-7.617619,-1175.364474,1995.955026, 0.188248,0.621463,-0.760491,7.980911,-1175.364562,1996.027815, -0.026244,0.509307,-0.860185,-22.126464,-1271.715181,1939.349424, -0.157155,0.595594,-0.787762,-7.617619,-1175.364474,1995.955026, -0.011122,0.512212,-0.858787,16.238483,-1271.715391,1938.178783, 0.670858,0.621465,-0.404636,33.342575,-1175.364796,2013.145656, 0.599391,0.512211,-0.615118,80.08694,-1271.715963,1978.079227, 0.503006,0.570988,-0.648812,22.364218,-1175.364675,2002.064361, 0.589687,0.509305,-0.6268,52.131057,-1271.715666,1951.778881, 0.503006,0.570988,-0.648812,22.364218,-1175.364675,2002.064361, 0.599391,0.512211,-0.615118,80.08694,-1271.715963,1978.079227, 0.011083,0.509565,0.860361,22.123694,-1271.716449,2131.052397, 0.200522,0.618102,0.760093,7.61498,-1175.364977,2074.446919, -0.134987,0.595762,0.791736,-7.983549,-1175.364888,2074.374131, 0.026184,0.512918,0.858038,-16.241253,-1271.716239,2132.223038, 0.011083,0.509565,0.860361,22.123694,-1271.716449,2131.052397, -0.134987,0.595762,0.791736,-7.983549,-1175.364888,2074.374131, -0.600529,0.509567,0.616204,-52.133828,-1271.715965,2118.62294, -0.458828,0.595592,0.659353,-22.366857,-1175.364775,2068.337584, -0.655293,0.595761,0.464393,-33.345214,-1175.364654,2057.256289, -0.588208,0.51292,0.62524,-80.08971,-1271.715667,2092.322594, -0.600529,0.509567,0.616204,-52.133828,-1271.715965,2118.62294, -0.655293,0.595761,0.464393,-33.345214,-1175.364654,2057.256289, -0.860359,0.509569,0.011083,-95.852871,-1271.715393,2057.325989, -0.818468,0.567229,-0.091441,-39.174477,-1175.364462,2027.218743, -0.858036,0.512921,0.026184,-97.023513,-1271.715182,2018.961042, -0.860359,0.509569,0.011083,-95.852871,-1271.715393,2057.325989, -0.790675,0.595591,0.141793,-39.247265,-1175.364544,2042.817272, -0.818468,0.567229,-0.091441,-39.174477,-1175.364462,2027.218743, 0.964508,-0.000007,0.264054,39.184537,1078.14493,2043.195173, 0.805975,-0.000008,0.59195,33.135292,-1175.365031,2057.56651, 0.990927,-0.000006,0.134401,39.171839,-1175.364988,2043.183203, 0.805975,-0.000008,0.59195,33.135292,-1175.365031,2057.56651, 0.964508,-0.000007,0.264054,39.184537,1078.14493,2043.195173, 0.828868,-0.000008,0.559444,33.147991,1078.144888,2057.578481, -0.052104,-0.998211,0.029324,60.450424,1076.228739,1995.974225, -0.058592,-0.99822,0.011094,39.257325,1078.145013,2027.596644, -0.047585,-0.998218,0.036011,33.355273,1078.145123,2013.157627, -0.058592,-0.99822,0.011094,39.257325,1078.145013,2027.596644, -0.052104,-0.998211,0.029324,60.450424,1076.228739,1995.974225, -0.058629,-0.998221,0.010878,70.865779,1076.228541,2022.090119, 0.000006,-1,0.000005,39.246263,-1635.024374,2027.586215, 0.000006,-1,0.000005,0.000317,-1635.024555,2035.202515, 0.000006,-1,0.000005,33.344211,-1635.024484,2013.147198, 0.600091,0.000004,0.799931,-80.08971,-1271.715667,2092.322594, 0.600091,-0.000003,0.799932,-33.345214,-1175.364654,2057.256289, 0.600093,0.000002,0.79993,-94.158213,-1260.036061,2102.876503, 0.799933,0.000001,-0.600089,67.674211,-1260.035009,2129.357866, 0.799933,0,-0.600089,57.120298,-1271.716562,2115.289236, 0.799934,-0,-0.600089,22.053997,-1175.365027,2068.544867, 0.141315,-0.000004,-0.989965,97.022044,-1479.423628,2051.442006, 0.141353,-0.000057,-0.989959,97.020742,-1271.716448,2051.440779, 0.141386,0.000019,-0.989955,114.431485,-1260.035146,2053.926124, 0.141353,-0.000057,-0.989959,97.020742,-1271.716448,2051.440779, 0.141456,0.000042,-0.989944,80.510481,-1244.216424,2049.079715, 0.141386,0.000019,-0.989955,114.431485,-1260.035146,2053.926124, 0.141386,0.000019,-0.989955,114.431485,-1260.035146,2053.926124, 0.141456,0.000042,-0.989944,80.510481,-1244.216424,2049.079715, 0.141525,0.000193,-0.989935,39.171839,-1175.364988,2043.183203, 0.157159,-0.595592,0.787764,7.616282,-1575.7751,2074.448146, 0.297952,-0.659128,0.690489,67.675513,-1491.1023,2129.359093, 0.310189,-0.662307,0.682006,26.491737,-1491.102432,2148.090131, 0.041321,0.973936,0.223028,6.624005,1105.461218,2070.640199, 0.000006,1,0.000005,0.062597,1105.461443,2035.212994, -0.038908,0.962171,0.269655,-7.432857,1105.461298,2070.454406, 0.000006,1,0.000005,0.062597,1105.461443,2035.212994, -0.218012,0.962233,0.163028,-30.156931,1105.461509,2054.832348, -0.139076,0.962205,0.234133,-20.348604,1105.4614,2064.903427, 0.000006,1,0.000005,0.062597,1105.461443,2035.212994, -0.296253,0.953532,0.054877,-35.364608,1105.461607,2041.774401, -0.218012,0.962233,0.163028,-30.156931,1105.461509,2054.832348, 0.000006,1,0.000005,0.062597,1105.461443,2035.212994, -0.261885,0.962249,-0.074108,-35.178814,1105.461681,2027.717539, -0.296253,0.953532,0.054877,-35.364608,1105.461607,2041.774401, 0.000006,1,0.000005,0.062597,1105.461443,2035.212994, -0.213632,0.962233,-0.168727,-29.627835,1105.461718,2014.801793, -0.261885,0.962249,-0.074108,-35.178814,1105.461681,2027.717539, 0.000006,1,0.000005,0.062597,1105.461443,2035.212994, -0.031768,0.962171,-0.270589,-6.49881,1105.461668,1999.785789, -0.132844,0.962206,-0.237725,-19.556757,1105.461714,2004.993466, 0.047203,0.973936,-0.221856,7.558052,1105.461588,1999.971583, -0.031768,0.962171,-0.270589,-6.49881,1105.461668,1999.785789, 0.000006,1,0.000005,0.062597,1105.461443,2035.212994, 0.139273,0.962112,-0.234402,20.473799,1105.461485,2005.522562, 0.047203,0.973936,-0.221856,7.558052,1105.461588,1999.971583, 0.000006,1,0.000005,0.062597,1105.461443,2035.212994, 0.21845,0.962084,-0.163322,30.282126,1105.461377,2015.59364, 0.139273,0.962112,-0.234402,20.473799,1105.461485,2005.522562, 0.000006,1,0.000005,0.062597,1105.461443,2035.212994, 0.296962,0.953305,-0.054991,35.489803,1105.461278,2028.651587, 0.21845,0.962084,-0.163322,30.282126,1105.461377,2015.59364, 0.000006,1,0.000005,0.062597,1105.461443,2035.212994, 0.296962,0.953305,-0.054991,35.489803,1105.461278,2028.651587, 0.000006,1,0.000005,0.062597,1105.461443,2035.212994, 0.262503,0.962067,0.074285,35.304009,1105.461204,2042.708449, 0.262503,0.962067,0.074285,35.304009,1105.461204,2042.708449, 0.000006,1,0.000005,0.062597,1105.461443,2035.212994, 0.214052,0.962084,0.169045,29.75303,1105.461167,2055.624196, 0.214052,0.962084,0.169045,29.75303,1105.461167,2055.624196, 0.000006,1,0.000005,0.062597,1105.461443,2035.212994, 0.133025,0.962112,0.238003,19.681952,1105.461172,2065.432522, 0.133025,0.962112,0.238003,19.681952,1105.461172,2065.432522, 0.000006,1,0.000005,0.062597,1105.461443,2035.212994, 0.041321,0.973936,0.223028,6.624005,1105.461218,2070.640199, -0.261885,0.962249,-0.074108,-35.178814,1105.461681,2027.717539, -0.380743,0.896586,-0.226203,-59.369433,1087.682068,1994.390591, -0.438262,0.896618,-0.063262,-70.471391,1087.681993,2020.222085, -0.380743,0.896586,-0.226203,-59.369433,1087.682068,1994.390591, -0.261885,0.962249,-0.074108,-35.178814,1105.461681,2027.717539, -0.213632,0.962233,-0.168727,-29.627835,1105.461718,2014.801793, 0.381511,0.896149,0.22664,59.392298,1087.680965,2076.035397, 0.262503,0.962067,0.074285,35.304009,1105.461204,2042.708449, 0.214052,0.962084,0.169045,29.75303,1105.461167,2055.624196, 0.262503,0.962067,0.074285,35.304009,1105.461204,2042.708449, 0.381511,0.896149,0.22664,59.392298,1087.680965,2076.035397, 0.439265,0.896117,0.063408,70.494256,1087.68104,2050.203904, 0.08063,0.896706,0.435221,13.134247,1087.681066,2106.067405, 0.133025,0.962112,0.238003,19.681952,1105.461172,2065.432522, 0.041321,0.973936,0.223028,6.624005,1105.461218,2070.640199, 0.133025,0.962112,0.238003,19.681952,1105.461172,2065.432522, 0.08063,0.896706,0.435221,13.134247,1087.681066,2106.067405, 0.265666,0.896215,0.355276,39.250141,1087.680974,2095.65205, 0.439265,0.896117,0.063408,70.494256,1087.68104,2050.203904, 0.296962,0.953305,-0.054991,35.489803,1105.461278,2028.651587, 0.262503,0.962067,0.074285,35.304009,1105.461204,2042.708449, 0.296962,0.953305,-0.054991,35.489803,1105.461278,2028.651587, 0.439265,0.896117,0.063408,70.494256,1087.68104,2050.203904, 0.435624,0.896507,-0.080672,70.865843,1087.681187,2022.09018, -0.386582,0.896588,0.216066,-60.427624,1087.681648,2074.451703, -0.296253,0.953532,0.054877,-35.364608,1105.461607,2041.774401, -0.434637,0.897,0.080508,-70.842978,1087.681846,2048.335808, -0.296253,0.953532,0.054877,-35.364608,1105.461607,2041.774401, -0.386582,0.896588,0.216066,-60.427624,1087.681648,2074.451703, -0.218012,0.962233,0.163028,-30.156931,1105.461509,2054.832348, -0.213632,0.962233,-0.168727,-29.627835,1105.461718,2014.801793, -0.26527,0.896521,-0.354799,-39.227276,1087.682058,1974.773938, -0.380743,0.896586,-0.226203,-59.369433,1087.682068,1994.390591, -0.26527,0.896521,-0.354799,-39.227276,1087.682058,1974.773938, -0.213632,0.962233,-0.168727,-29.627835,1105.461718,2014.801793, -0.132844,0.962206,-0.237725,-19.556757,1105.461714,2004.993466, 0.139273,0.962112,-0.234402,20.473799,1105.461485,2005.522562, 0.092108,0.896703,-0.432943,15.002342,1087.681806,1964.730171, 0.047203,0.973936,-0.221856,7.558052,1105.461588,1999.971583, 0.092108,0.896703,-0.432943,15.002342,1087.681806,1964.730171, 0.139273,0.962112,-0.234402,20.473799,1105.461485,2005.522562, 0.27497,0.896212,-0.34813,40.833836,1087.681602,1975.832129, -0.296253,0.953532,0.054877,-35.364608,1105.461607,2041.774401, -0.438262,0.896618,-0.063262,-70.471391,1087.681993,2020.222085, -0.434637,0.897,0.080508,-70.842978,1087.681846,2048.335808, -0.438262,0.896618,-0.063262,-70.471391,1087.681993,2020.222085, -0.296253,0.953532,0.054877,-35.364608,1105.461607,2041.774401, -0.261885,0.962249,-0.074108,-35.178814,1105.461681,2027.717539, 0.296962,0.953305,-0.054991,35.489803,1105.461278,2028.651587, 0.387375,0.896148,-0.216472,60.450489,1087.681384,1995.974286, 0.21845,0.962084,-0.163322,30.282126,1105.461377,2015.59364, 0.387375,0.896148,-0.216472,60.450489,1087.681384,1995.974286, 0.296962,0.953305,-0.054991,35.489803,1105.461278,2028.651587, 0.435624,0.896507,-0.080672,70.865843,1087.681187,2022.09018, -0.12065,0.896435,0.426435,-14.979477,1087.681226,2105.695818, -0.139076,0.962205,0.234133,-20.348604,1105.4614,2064.903427, -0.274547,0.896523,0.347663,-40.810971,1087.681431,2094.593859, -0.139076,0.962205,0.234133,-20.348604,1105.4614,2064.903427, -0.12065,0.896435,0.426435,-14.979477,1087.681226,2105.695818, -0.038908,0.962171,0.269655,-7.432857,1105.461298,2070.454406, -0.274547,0.896523,0.347663,-40.810971,1087.681431,2094.593859, -0.218012,0.962233,0.163028,-30.156931,1105.461509,2054.832348, -0.386582,0.896588,0.216066,-60.427624,1087.681648,2074.451703, -0.218012,0.962233,0.163028,-30.156931,1105.461509,2054.832348, -0.274547,0.896523,0.347663,-40.810971,1087.681431,2094.593859, -0.139076,0.962205,0.234133,-20.348604,1105.4614,2064.903427, -0.132844,0.962206,-0.237725,-19.556757,1105.461714,2004.993466, -0.109341,0.896433,-0.42948,-13.111382,1087.681967,1964.358584, -0.26527,0.896521,-0.354799,-39.227276,1087.682058,1974.773938, -0.109341,0.896433,-0.42948,-13.111382,1087.681967,1964.358584, -0.132844,0.962206,-0.237725,-19.556757,1105.461714,2004.993466, -0.031768,0.962171,-0.270589,-6.49881,1105.461668,1999.785789, 0.21845,0.962084,-0.163322,30.282126,1105.461377,2015.59364, 0.27497,0.896212,-0.34813,40.833836,1087.681602,1975.832129, 0.139273,0.962112,-0.234402,20.473799,1105.461485,2005.522562, 0.27497,0.896212,-0.34813,40.833836,1087.681602,1975.832129, 0.21845,0.962084,-0.163322,30.282126,1105.461377,2015.59364, 0.387375,0.896148,-0.216472,60.450489,1087.681384,1995.974286, 0.08063,0.896706,0.435221,13.134247,1087.681066,2106.067405, -0.038908,0.962171,0.269655,-7.432857,1105.461298,2070.454406, -0.12065,0.896435,0.426435,-14.979477,1087.681226,2105.695818, -0.038908,0.962171,0.269655,-7.432857,1105.461298,2070.454406, 0.08063,0.896706,0.435221,13.134247,1087.681066,2106.067405, 0.041321,0.973936,0.223028,6.624005,1105.461218,2070.640199, -0.031768,0.962171,-0.270589,-6.49881,1105.461668,1999.785789, 0.092108,0.896703,-0.432943,15.002342,1087.681806,1964.730171, -0.109341,0.896433,-0.42948,-13.111382,1087.681967,1964.358584, 0.092108,0.896703,-0.432943,15.002342,1087.681806,1964.730171, -0.031768,0.962171,-0.270589,-6.49881,1105.461668,1999.785789, 0.047203,0.973936,-0.221856,7.558052,1105.461588,1999.971583, 0.265666,0.896215,0.355276,39.250141,1087.680974,2095.65205, 0.214052,0.962084,0.169045,29.75303,1105.461167,2055.624196, 0.133025,0.962112,0.238003,19.681952,1105.461172,2065.432522, 0.214052,0.962084,0.169045,29.75303,1105.461167,2055.624196, 0.265666,0.896215,0.355276,39.250141,1087.680974,2095.65205, 0.381511,0.896149,0.22664,59.392298,1087.680965,2076.035397, -0.828868,0.000008,-0.559444,-33.137931,-1175.36442,2012.835435, -0.828868,0.000008,-0.559444,-33.129537,314.385267,2012.843349, -0.584403,0.000008,-0.811464,-22.056636,-1175.364424,2001.857078, 0.000006,1,0.000005,-33.345214,-1175.364654,2057.256289, 0.000006,1,0.000005,-39.174477,-1175.364462,2027.218743, 0.000006,1,0.000005,-39.247265,-1175.364544,2042.817272, 0.000006,1,0.000005,-39.174477,-1175.364462,2027.218743, 0.000006,1,0.000005,-33.345214,-1175.364654,2057.256289, 0.000006,1,0.000005,-33.137931,-1175.36442,2012.835435, 0.000006,1,0.000005,-33.137931,-1175.36442,2012.835435, 0.000006,1,0.000005,-33.345214,-1175.364654,2057.256289, 0.000006,1,0.000005,-22.366857,-1175.364775,2068.337584, 0.000006,1,0.000005,-33.137931,-1175.36442,2012.835435, 0.000006,1,0.000005,-22.366857,-1175.364775,2068.337584, 0.000006,1,0.000005,-22.056636,-1175.364424,2001.857078, 0.000006,1,0.000005,-22.056636,-1175.364424,2001.857078, 0.000006,1,0.000005,-22.366857,-1175.364775,2068.337584, 0.000006,1,0.000005,-7.983549,-1175.364888,2074.374131, 0.000006,1,0.000005,-22.056636,-1175.364424,2001.857078, 0.000006,1,0.000005,-7.983549,-1175.364888,2074.374131, 0.000006,1,0.000005,-7.617619,-1175.364474,1995.955026, 0.000006,1,0.000005,-7.617619,-1175.364474,1995.955026, 0.000006,1,0.000005,-7.983549,-1175.364888,2074.374131, 0.000006,1,0.000005,7.61498,-1175.364977,2074.446919, 0.000006,1,0.000005,-7.617619,-1175.364474,1995.955026, 0.000006,1,0.000005,7.61498,-1175.364977,2074.446919, 0.000006,1,0.000005,7.980911,-1175.364562,1996.027815, 0.000006,1,0.000005,7.980911,-1175.364562,1996.027815, 0.000006,1,0.000005,7.61498,-1175.364977,2074.446919, 0.000006,1,0.000005,22.053997,-1175.365027,2068.544867, 0.000006,1,0.000005,7.980911,-1175.364562,1996.027815, 0.000006,1,0.000005,22.053997,-1175.365027,2068.544867, 0.000006,1,0.000005,22.364218,-1175.364675,2002.064361, 0.000006,1,0.000005,22.364218,-1175.364675,2002.064361, 0.000006,1,0.000005,22.053997,-1175.365027,2068.544867, 0.000006,1,0.000005,33.135292,-1175.365031,2057.56651, 0.000006,1,0.000005,22.364218,-1175.364675,2002.064361, 0.000006,1,0.000005,33.135292,-1175.365031,2057.56651, 0.000006,1,0.000005,33.342575,-1175.364796,2013.145656, 0.000006,1,0.000005,33.342575,-1175.364796,2013.145656, 0.000006,1,0.000005,33.135292,-1175.365031,2057.56651, 0.000006,1,0.000005,39.171839,-1175.364988,2043.183203, 0.000006,1,0.000005,33.342575,-1175.364796,2013.145656, 0.000006,1,0.000005,39.171839,-1175.364988,2043.183203, 0.000006,1,0.000005,39.244627,-1175.364906,2027.584673, -0.968686,-0.000002,0.24829,26.490435,-1260.035141,2148.088903, -0.968686,0.000002,0.248289,7.61498,-1175.364977,2074.446919, -0.968685,-0.000002,0.248291,22.123694,-1271.716449,2131.052397, 0.616202,0.509565,0.600532,83.420644,-1271.716562,2087.333353, 0.679257,0.618102,0.395677,33.135292,-1175.365031,2057.56651, 0.514085,0.56723,0.643402,22.053997,-1175.365027,2068.544867, 0.625238,0.512917,0.588212,57.120298,-1271.716562,2115.289236, 0.616202,0.509565,0.600532,83.420644,-1271.716562,2087.333353, 0.514085,0.56723,0.643402,22.053997,-1175.365027,2068.544867, 0.858794,0.512199,-0.011179,97.020742,-1271.716448,2051.440779, 0.860187,0.509303,-0.026244,95.850101,-1271.716238,2013.075832, 0.826538,0.557702,-0.076187,39.244627,-1175.364906,2027.584673, 0.858794,0.512199,-0.011179,97.020742,-1271.716448,2051.440779, 0.826538,0.557702,-0.076187,39.244627,-1175.364906,2027.584673, 0.85719,0.514985,0.003946,80.510481,-1244.216424,2049.079715, 0.85719,0.514985,0.003946,80.510481,-1244.216424,2049.079715, 0.826538,0.557702,-0.076187,39.244627,-1175.364906,2027.584673, 0.789459,0.595062,0.15052,39.171839,-1175.364988,2043.183203, 0.679262,-0.618094,0.395681,33.136594,-1575.775046,2057.567737, 0.789465,-0.595053,0.150522,39.173141,-1575.775088,2043.18443, 0.698932,-0.659128,0.277569,114.432787,-1491.102437,2053.927351, -0.510751,-0.000002,0.859729,-40.810971,1087.681431,2094.593859, -0.272291,-0.000004,0.962215,-14.979542,1076.228581,2105.695757, -0.142868,-0.000004,0.989742,-14.979477,1087.681226,2105.695818, -0.272291,-0.000004,0.962215,-14.979542,1076.228581,2105.695757, -0.510751,-0.000002,0.859729,-40.810971,1087.681431,2094.593859, -0.619788,-0.000001,0.784769,-40.811035,1076.228785,2094.593798, 0.246765,-0.000007,0.969075,13.134247,1087.681066,2106.067405, 0.48785,-0.000007,0.872928,39.250077,1076.228329,2095.65199, 0.59883,-0.000008,0.800876,39.250141,1087.680974,2095.65205, 0.48785,-0.000007,0.872928,39.250077,1076.228329,2095.65199, 0.246765,-0.000007,0.969075,13.134247,1087.681066,2106.067405, 0.11666,-0.000006,0.993172,13.134182,1076.228421,2106.067344, -0.246765,0.000007,-0.969075,-13.111446,1076.229321,1964.358523, -0.48785,0.000007,-0.872928,-39.227276,1087.682058,1974.773938, -0.11666,0.000006,-0.993172,-13.111382,1087.681967,1964.358584, -0.48785,0.000007,-0.872928,-39.227276,1087.682058,1974.773938, -0.246765,0.000007,-0.969075,-13.111446,1076.229321,1964.358523, -0.59883,0.000008,-0.800876,-39.22734,1076.229413,1974.773877, 0.872928,-0.000002,-0.48785,60.450489,1087.681384,1995.974286, 0.969075,-0.000004,-0.246765,70.865779,1076.228541,2022.090119, 0.800876,-0.000001,-0.59883,60.450424,1076.228739,1995.974225, 0.969075,-0.000004,-0.246765,70.865779,1076.228541,2022.090119, 0.872928,-0.000002,-0.48785,60.450489,1087.681384,1995.974286, 0.993172,-0.000005,-0.11666,70.865843,1087.681187,2022.09018, -0.584403,0.000008,-0.811464,-22.056636,-1175.364424,2001.857078, -0.828868,0.000008,-0.559444,-33.125233,1078.145499,2012.847406, -0.495296,0.000007,-0.868724,-22.043938,1078.145495,2001.869049, -0.828868,0.000008,-0.559444,-33.125233,1078.145499,2012.847406, -0.584403,0.000008,-0.811464,-22.056636,-1175.364424,2001.857078, -0.828868,0.000008,-0.559444,-33.129537,314.385267,2012.843349, 0.613055,0.000001,-0.79004,22.376916,1078.145244,2002.076332, 0.795727,-0.000001,-0.605656,33.342575,-1175.364796,2013.145656, 0.503381,0.000002,-0.864064,22.364218,-1175.364675,2002.064361, 0.795727,-0.000001,-0.605656,33.342575,-1175.364796,2013.145656, 0.613055,0.000001,-0.79004,22.376916,1078.145244,2002.076332, 0.868724,-0.000002,-0.495296,33.355273,1078.145123,2013.157627, -0.029512,-0.998207,-0.052072,22.066696,1078.144892,2068.556838, -0.011125,-0.99822,-0.058587,13.134182,1076.228421,2106.067344, -0.011411,-0.99822,-0.058537,7.627679,1078.144942,2074.45889, -0.011125,-0.99822,-0.058587,13.134182,1076.228421,2106.067344, -0.029512,-0.998207,-0.052072,22.066696,1078.144892,2068.556838, -0.035923,-0.998214,-0.047727,39.250077,1076.228329,2095.65199, 0.030169,-0.998218,-0.051488,-22.354159,1078.145144,2068.349555, 0.016094,-0.998211,-0.057584,-14.979542,1076.228581,2105.695757, 0.036903,-0.998211,-0.04704,-40.811035,1076.228785,2094.593798, 0.016094,-0.998211,-0.057584,-14.979542,1076.228581,2105.695757, 0.030169,-0.998218,-0.051488,-22.354159,1078.145144,2068.349555, 0.00817,-0.998218,-0.059117,-7.970851,1078.145031,2074.386102, -0.012151,-0.998221,0.058373,15.002278,1076.229161,1964.73011, -0.03018,-0.998218,0.051478,22.376916,1078.145244,2002.076332, -0.011868,-0.998221,0.058436,7.993609,1078.145357,1996.039785, -0.03018,-0.998218,0.051478,22.376916,1078.145244,2002.076332, -0.012151,-0.998221,0.058373,15.002278,1076.229161,1964.73011, -0.036914,-0.998211,0.047029,40.833771,1076.228956,1975.832068, -0.012151,-0.998221,0.058373,15.002278,1076.229161,1964.73011, 0.00733,-0.998208,0.05939,-7.604921,1078.145445,1995.966997, 0.014915,-0.998215,0.057829,-13.111446,1076.229321,1964.358523, 0.00733,-0.998208,0.05939,-7.604921,1078.145445,1995.966997, -0.012151,-0.998221,0.058373,15.002278,1076.229161,1964.73011, -0.011868,-0.998221,0.058436,7.993609,1078.145357,1996.039785, 0.968687,-0.000002,-0.248286,-7.617619,-1175.364474,1995.955026, 0.968687,0.000002,-0.248285,-22.126464,-1271.715181,1939.349424, 0.968687,0.000001,-0.248284,-26.493073,-1260.036639,1922.313042, -0.989965,0.000002,-0.141315,7.980911,-1175.364562,1996.027815, -0.989964,-0.000002,-0.141318,18.723832,-1260.036393,1920.768168, -0.989965,-0.000004,-0.141316,16.238483,-1271.715391,1938.178783, 0.000006,-1,0.000005,0.000317,-1635.024555,2035.202515, 0.000006,-1,0.000005,-22.055,-1635.024856,2001.85862, 0.000006,-1,0.000005,-7.615983,-1635.024806,1995.956569, 0.000006,-1,0.000005,33.136928,-1635.024249,2057.568052, 0.000006,-1,0.000005,22.055633,-1635.024253,2068.546409, 0.000006,-1,0.000005,0.000317,-1635.024555,2035.202515, 0.000006,-1,0.000005,0.000317,-1635.024555,2035.202515, 0.000006,-1,0.000005,-39.172841,-1635.024818,2027.220285, 0.000006,-1,0.000005,-33.136295,-1635.02486,2012.836977, 0.000006,-1,0.000005,7.616616,-1635.024303,2074.448461, 0.000006,-1,0.000005,-7.981913,-1635.024391,2074.375673, 0.000006,-1,0.000005,0.000317,-1635.024555,2035.202515, -0.5094,0.000001,0.86053,83.420644,-1271.716562,2087.333353, -0.5094,0.000001,0.86053,98.556303,-1491.102301,2096.293522, -0.5094,0.000001,0.86053,98.555001,-1260.035011,2096.292295, -0.5094,0.000001,0.86053,98.556303,-1491.102301,2096.293522, -0.5094,0.000001,0.86053,83.420644,-1271.716562,2087.333353, -0.509399,0.000001,0.86053,83.421946,-1479.423514,2087.334581, 0.141313,-0.000003,-0.989965,114.432787,-1491.102437,2053.927351, 0.141315,-0.000004,-0.989965,97.022044,-1479.423628,2051.442006, 0.141386,0.000019,-0.989955,114.431485,-1260.035146,2053.926124, -0.134401,-0.000005,0.990927,-7.970851,1078.145031,2074.386102, 0.190512,-0.000006,0.981685,7.61498,-1175.364977,2074.446919, 0.255041,-0.000007,0.96693,7.627679,1078.144942,2074.45889, 0.190512,-0.000006,0.981685,7.61498,-1175.364977,2074.446919, -0.134401,-0.000005,0.990927,-7.970851,1078.145031,2074.386102, -0.264054,-0.000004,0.964508,-7.983549,-1175.364888,2074.374131, -0.936408,-0.000007,-0.350914,-98.556338,-1491.104061,1974.110878, -0.936408,-0.000007,-0.350914,-114.434123,-1260.036635,2016.475821, -0.936408,-0.000007,-0.350914,-98.55764,-1260.03677,1974.10965, -0.936408,-0.000007,-0.350914,-114.434123,-1260.036635,2016.475821, -0.936408,-0.000007,-0.350914,-98.556338,-1491.104061,1974.110878, -0.936408,-0.000007,-0.350914,-114.432821,-1491.103925,2016.477049, -0.188244,-0.621459,0.760495,-7.982247,-1575.775188,2074.375358, -0.263845,-0.659285,0.70408,-18.725169,-1491.102679,2149.635004, -0.276534,-0.662009,0.696616,-61.09134,-1491.103002,2133.75852, 0.000006,-1,0.000005,22.055633,-1635.024253,2068.546409, 0.000006,-1,0.000005,7.616616,-1635.024303,2074.448461, 0.000006,-1,0.000005,0.000317,-1635.024555,2035.202515, 0.000006,-1,0.000005,21.079139,-1635.024615,2001.52588, 0.000006,-1,0.000005,0.000317,-1635.024555,2035.202515, 0.000006,-1,0.000005,7.982547,-1635.024718,1996.029357, 0.799934,0.000001,-0.600088,67.675513,-1491.1023,2129.359093, 0.799934,0,-0.600089,22.055299,-1575.77505,2068.546095, 0.799933,0.000001,-0.600089,57.1216,-1479.423514,2115.290463, -0.276536,0.662015,0.696609,-61.092642,-1260.035711,2133.757293, -0.134987,0.595762,0.791736,-7.983549,-1175.364888,2074.374131, -0.458828,0.595592,0.659353,-22.366857,-1175.364775,2068.337584, -0.276536,0.662015,0.696609,-61.092642,-1260.035711,2133.757293, -0.263852,0.659293,0.704071,-18.726471,-1260.035388,2149.633777, -0.134987,0.595762,0.791736,-7.983549,-1175.364888,2074.374131, 0.297947,0.65914,0.69048,67.674211,-1260.035009,2129.357866, 0.514085,0.56723,0.643402,22.053997,-1175.365027,2068.544867, 0.200522,0.618102,0.760093,7.61498,-1175.364977,2074.446919, -0.14131,0.000004,0.989965,-114.432821,-1491.103925,2016.477049, -0.141312,0.000003,0.989965,-97.022211,-1479.424894,2018.96227, -0.14131,0.000003,0.989965,-97.023513,-1271.715182,2018.961042, -0.141311,0.000002,0.989965,-39.173175,-1575.775614,2027.21997, -0.141312,0.000003,0.989965,-97.022211,-1479.424894,2018.96227, -0.14131,0.000004,0.989965,-114.432821,-1491.103925,2016.477049, -0.14131,0.000003,0.989965,-97.023513,-1271.715182,2018.961042, -0.141311,-0.000002,0.989965,-39.174477,-1175.364462,2027.218743, -0.141308,0.000001,0.989966,-114.434123,-1260.036635,2016.475821, -0.14131,0.000004,0.989965,-114.432821,-1491.103925,2016.477049, -0.14131,0.000003,0.989965,-97.023513,-1271.715182,2018.961042, -0.141308,0.000001,0.989966,-114.434123,-1260.036635,2016.475821, -0.552864,-0.002116,0.833269,-22.365555,-1575.775301,2068.338812, -0.868724,-0.000002,0.495296,-33.343912,-1575.775422,2057.257517, -0.789247,-0.002827,0.614069,-33.343578,-1635.024625,2057.257832, -0.789247,-0.002827,0.614069,-33.343578,-1635.024625,2057.257832, -0.546267,-0.004228,0.837601,-21.078506,-1635.024494,2068.87915, -0.552864,-0.002116,0.833269,-22.365555,-1575.775301,2068.338812, 0.494392,-0.002816,-0.869234,21.079139,-1635.024615,2001.52588, 0.623957,-0.133857,-0.769909,22.36552,-1575.775401,2002.065588, 0.829674,-0.002123,-0.558245,33.344211,-1635.024484,2013.147198, 0.829674,-0.002123,-0.558245,33.344211,-1635.024484,2013.147198, 0.604615,-0.002819,-0.796513,22.36552,-1575.775401,2002.065588, 0.834053,0.000002,-0.551684,33.343877,-1575.77528,2013.146883, 0.962215,-0.000007,0.272291,70.494256,1087.68104,2050.203904, 0.824055,-0.000008,0.566511,59.392233,1076.228319,2076.035337, 0.989742,-0.000006,0.142868,70.494191,1076.228394,2050.203843, 0.824055,-0.000008,0.566511,59.392233,1076.228319,2076.035337, 0.962215,-0.000007,0.272291,70.494256,1087.68104,2050.203904, 0.824055,-0.000008,0.566511,59.392298,1087.680965,2076.035397, 0.510751,0.000002,-0.859729,40.833771,1076.228956,1975.832068, 0.272291,0.000004,-0.962215,15.002342,1087.681806,1964.730171, 0.619788,0.000001,-0.784769,40.833836,1087.681602,1975.832129, 0.272291,0.000004,-0.962215,15.002342,1087.681806,1964.730171, 0.510751,0.000002,-0.859729,40.833771,1076.228956,1975.832068, 0.142868,0.000004,-0.989742,15.002278,1076.229161,1964.73011, -0.962215,0.000007,-0.272291,-70.471455,1076.229348,2020.222024, -0.824055,0.000008,-0.566511,-59.369433,1087.682068,1994.390591, -0.824055,0.000008,-0.566511,-59.369497,1076.229422,1994.39053, -0.824055,0.000008,-0.566511,-59.369433,1087.682068,1994.390591, -0.962215,0.000007,-0.272291,-70.471455,1076.229348,2020.222024, -0.989742,0.000006,-0.142868,-70.471391,1087.681993,2020.222085, -0.872928,0.000002,0.48785,-60.427688,1076.229003,2074.451642, -0.969075,0.000004,0.246765,-70.842978,1087.681846,2048.335808, -0.993172,0.000005,0.11666,-70.843043,1076.2292,2048.335748, -0.969075,0.000004,0.246765,-70.842978,1087.681846,2048.335808, -0.872928,0.000002,0.48785,-60.427688,1076.229003,2074.451642, -0.800876,0.000001,0.59883,-60.427624,1087.681648,2074.451703, 0.910274,0.000003,-0.414007,112.886611,-1260.035395,2008.709218, 0.910274,0.000003,-0.414007,94.156876,-1491.10301,1967.52667, 0.910274,0.000003,-0.414007,94.155574,-1260.035719,1967.525442, 0.910274,0.000003,-0.414007,94.156876,-1491.10301,1967.52667, 0.910274,0.000003,-0.414007,112.886611,-1260.035395,2008.709218, 0.910274,0.000003,-0.414007,112.887913,-1491.102686,2008.710446, -0.688119,-0.66201,0.297042,-112.887948,-1491.103676,2061.693954, -0.790675,-0.595591,0.141793,-39.245963,-1575.775532,2042.8185, -0.670858,-0.621461,0.404642,-33.343912,-1575.775422,2057.257517, -0.552864,-0.002116,0.833269,-22.365555,-1575.775301,2068.338812, -0.264054,0.000004,0.964508,-7.981913,-1635.024391,2074.375673, -0.134401,0.000005,0.990927,-7.982247,-1575.775188,2074.375358, -0.264054,0.000004,0.964508,-7.981913,-1635.024391,2074.375673, -0.552864,-0.002116,0.833269,-22.365555,-1575.775301,2068.338812, -0.546267,-0.004228,0.837601,-21.078506,-1635.024494,2068.87915, 0.551684,-0.000008,0.834053,22.053997,-1175.365027,2068.544867, 0.805975,-0.000008,0.59195,33.135292,-1175.365031,2057.56651, 0.518094,-0.000007,0.855324,22.062392,314.38466,2068.552781, 0.134993,-0.595761,-0.791736,7.982213,-1575.775514,1996.029042, 0.276542,-0.66201,-0.696611,61.091305,-1491.10336,1936.64588, 0.458836,-0.595589,-0.65935,22.36552,-1575.775401,2002.065588, -0.29795,0.65913,-0.690488,-67.67685,-1260.036772,1941.044079, -0.514083,0.56723,-0.643404,-22.056636,-1175.364424,2001.857078, -0.157155,0.595594,-0.787762,-7.617619,-1175.364474,1995.955026, 0.655297,-0.595759,-0.464388,33.343877,-1575.77528,2013.146883, 0.600534,-0.509567,-0.616198,52.13236,-1479.42441,1951.780109, 0.588214,-0.51292,-0.625234,80.088242,-1479.424113,1978.080455, 0.047573,-0.998218,-0.036022,-33.332516,1078.145264,2057.26826, 0.036903,-0.998211,-0.04704,-40.811035,1076.228785,2094.593798, 0.052093,-0.998211,-0.029335,-60.427688,1076.229003,2074.451642, 0.036903,-0.998211,-0.04704,-40.811035,1076.228785,2094.593798, 0.047573,-0.998218,-0.036022,-33.332516,1078.145264,2057.26826, 0.030169,-0.998218,-0.051488,-22.354159,1078.145144,2068.349555, -0.248291,-0.000004,-0.968685,-95.852871,-1271.715393,2057.325989, -0.248291,-0.000005,-0.968685,-112.887948,-1491.103676,2061.693954, -0.248293,-0.000002,-0.968685,-112.88925,-1260.036386,2061.692727, -0.248291,-0.000005,-0.968685,-112.887948,-1491.103676,2061.693954, -0.248291,-0.000004,-0.968685,-95.852871,-1271.715393,2057.325989, -0.248289,-0.000005,-0.968686,-95.851569,-1479.424684,2057.327217, -0.502999,-0.570987,0.648819,-22.365555,-1575.775301,2068.338812, -0.188244,-0.621459,0.760495,-7.982247,-1575.775188,2074.375358, -0.276534,-0.662009,0.696616,-61.09134,-1491.103002,2133.75852, 0.992138,-0.000005,-0.125147,39.257325,1078.145013,2027.596644, 0.990927,-0.000006,0.134401,39.171839,-1175.364988,2043.183203, 0.96693,-0.000004,-0.255041,39.244627,-1175.364906,2027.584673, 0.990927,-0.000006,0.134401,39.171839,-1175.364988,2043.183203, 0.992138,-0.000005,-0.125147,39.257325,1078.145013,2027.596644, 0.964508,-0.000007,0.264054,39.184537,1078.14493,2043.195173, 0.101709,0.000005,-0.994814,7.980911,-1175.364562,1996.027815, -0.125147,0.000006,-0.992138,-7.604921,1078.145445,1995.966997, 0.264054,0.000004,-0.964508,7.993609,1078.145357,1996.039785, -0.125147,0.000006,-0.992138,-7.604921,1078.145445,1995.966997, 0.101709,0.000005,-0.994814,7.980911,-1175.364562,1996.027815, -0.229384,0.000006,-0.973336,-7.609225,314.385213,1995.96294, -0.058592,-0.99822,0.011094,39.257325,1078.145013,2027.596644, -0.059147,-0.998214,-0.008352,70.494191,1076.228394,2050.203843, -0.057687,-0.998207,-0.015958,39.184537,1078.14493,2043.195173, -0.059147,-0.998214,-0.008352,70.494191,1076.228394,2050.203843, -0.058592,-0.99822,0.011094,39.257325,1078.145013,2027.596644, -0.058629,-0.998221,0.010878,70.865779,1076.228541,2022.090119, -0.414007,-0.000007,-0.910274,-26.491771,-1491.10393,1922.314269, -0.414007,-0.000007,-0.910274,-67.67685,-1260.036772,1941.044079, -0.414007,-0.000007,-0.910274,-26.493073,-1260.036639,1922.313042, -0.414007,-0.000007,-0.910274,-67.67685,-1260.036772,1941.044079, -0.414007,-0.000007,-0.910274,-26.491771,-1491.10393,1922.314269, -0.414007,-0.000007,-0.910274,-67.675548,-1491.104063,1941.045307, -0.047191,-0.998207,-0.036817,33.147991,1078.144888,2057.578481, -0.035923,-0.998214,-0.047727,39.250077,1076.228329,2095.65199, -0.029512,-0.998207,-0.052072,22.066696,1078.144892,2068.556838, -0.035923,-0.998214,-0.047727,39.250077,1076.228329,2095.65199, -0.047191,-0.998207,-0.036817,33.147991,1078.144888,2057.578481, -0.051451,-0.998214,-0.030349,59.392233,1076.228319,2076.035337, -0.350914,0.000003,0.936408,-61.092642,-1260.035711,2133.757293, -0.350914,0.000003,0.936408,-18.725169,-1491.102679,2149.635004, -0.350914,0.000003,0.936408,-18.726471,-1260.035388,2149.633777, -0.350914,0.000003,0.936408,-18.725169,-1491.102679,2149.635004, -0.350914,0.000003,0.936408,-61.092642,-1260.035711,2133.757293, -0.350914,0.000003,0.936408,-61.09134,-1491.103002,2133.75852, -0.799934,-0,0.600088,-22.055334,-1575.775652,2001.858305, -0.799934,-0.000001,0.600088,-57.121766,-1479.425008,1955.113813, -0.799934,-0.000001,0.600088,-67.675548,-1491.104063,1941.045307, -0.860533,-0.000006,-0.509395,-52.132526,-1479.424112,2118.624167, -0.860533,-0.000004,-0.509395,-61.092642,-1260.035711,2133.757293, -0.860534,-0.000003,-0.509393,-52.133828,-1271.715965,2118.62294, -0.860533,-0.000004,-0.509395,-61.092642,-1260.035711,2133.757293, -0.860533,-0.000006,-0.509395,-52.132526,-1479.424112,2118.624167, -0.860531,-0.000005,-0.509397,-61.09134,-1491.103002,2133.75852, 0.058581,-0.998221,-0.011105,-39.234567,1078.145374,2042.829243, 0.052093,-0.998211,-0.029335,-60.427688,1076.229003,2074.451642, 0.058617,-0.998221,-0.010888,-70.843043,1076.2292,2048.335748, 0.052093,-0.998211,-0.029335,-60.427688,1076.229003,2074.451642, 0.058581,-0.998221,-0.011105,-39.234567,1078.145374,2042.829243, 0.047573,-0.998218,-0.036022,-33.332516,1078.145264,2057.26826, -0.968686,-0.000003,0.248288,26.491737,-1491.102432,2148.090131, -0.968686,-0.000003,0.24829,22.124996,-1479.423627,2131.053624, -0.968686,-0.000002,0.248289,7.616282,-1575.7751,2074.448146, -0.134401,0.000005,0.990927,-7.982247,-1575.775188,2074.375358, 0.125147,0.000006,0.992138,7.616616,-1635.024303,2074.448461, 0.255041,0.000007,0.96693,7.616282,-1575.7751,2074.448146, 0.125147,0.000006,0.992138,7.616616,-1635.024303,2074.448461, -0.134401,0.000005,0.990927,-7.982247,-1575.775188,2074.375358, -0.264054,0.000004,0.964508,-7.981913,-1635.024391,2074.375673, -0.600085,-0.000004,-0.799936,80.08694,-1271.715963,1978.079227, -0.600086,0.000003,-0.799936,33.342575,-1175.364796,2013.145656, -0.600083,-0.000002,-0.799938,94.155574,-1260.035719,1967.525442, 0.000006,-1,0.000005,0.000317,-1635.024555,2035.202515, 0.000006,-1,0.000005,-7.981913,-1635.024391,2074.375673, 0.000006,-1,0.000005,-21.078506,-1635.024494,2068.87915, 0.000006,-1,0.000005,0.000317,-1635.024555,2035.202515, 0.000006,-1,0.000005,-39.24563,-1635.024735,2042.818814, 0.000006,-1,0.000005,-39.172841,-1635.024818,2027.220285, 0.000006,-1,0.000005,33.344211,-1635.024484,2013.147198, 0.000006,-1,0.000005,0.000317,-1635.024555,2035.202515, 0.000006,-1,0.000005,21.079139,-1635.024615,2001.52588, 0.000006,-1,0.000005,39.246263,-1635.024374,2027.586215, 0.000006,-1,0.000005,39.173475,-1635.024291,2043.184745, 0.000006,-1,0.000005,0.000317,-1635.024555,2035.202515, 0.000006,-1,0.000005,0.000317,-1635.024555,2035.202515, 0.000006,-1,0.000005,-33.343578,-1635.024625,2057.257832, 0.000006,-1,0.000005,-39.24563,-1635.024735,2042.818814, 0.989966,0.000004,0.141309,-18.726471,-1260.035388,2149.633777, 0.989966,0.000002,0.141307,-16.241253,-1271.716239,2132.223038, 0.989965,-0.000002,0.14131,-7.983549,-1175.364888,2074.374131, -0.860533,-0.000004,-0.509395,-61.092642,-1260.035711,2133.757293, -0.860532,0.000003,-0.509396,-22.366857,-1175.364775,2068.337584, -0.860534,-0.000003,-0.509393,-52.133828,-1271.715965,2118.62294, 0.014915,-0.998215,0.057829,-13.111446,1076.229321,1964.358523, 0.029501,-0.998208,0.052061,-22.043938,1078.145495,2001.869049, 0.035912,-0.998215,0.047716,-39.22734,1076.229413,1974.773877, 0.029501,-0.998208,0.052061,-22.043938,1078.145495,2001.869049, 0.014915,-0.998215,0.057829,-13.111446,1076.229321,1964.358523, 0.00733,-0.998208,0.05939,-7.604921,1078.145445,1995.966997, -0.503381,-0.000002,0.864064,-22.354159,1078.145144,2068.349555, -0.264054,-0.000004,0.964508,-7.983549,-1175.364888,2074.374131, -0.134401,-0.000005,0.990927,-7.970851,1078.145031,2074.386102, -0.264054,-0.000004,0.964508,-7.983549,-1175.364888,2074.374131, -0.503381,-0.000002,0.864064,-22.354159,1078.145144,2068.349555, -0.613055,-0.000001,0.79004,-22.366857,-1175.364775,2068.337584, 0.000006,-1,0.000005,0.000317,-1635.024555,2035.202515, 0.000006,-1,0.000005,-33.136295,-1635.02486,2012.836977, 0.000006,-1,0.000005,-22.055,-1635.024856,2001.85862, -0.248291,-0.000004,-0.968685,-95.852871,-1271.715393,2057.325989, -0.248293,-0.000002,-0.968685,-112.88925,-1260.036386,2061.692727, -0.24829,0.000002,-0.968686,-39.247265,-1175.364544,2042.817272, 0.864064,0.000008,0.503381,33.136594,-1575.775046,2057.567737, 0.964508,0.000007,0.264054,39.173475,-1635.024291,2043.184745, 0.990927,0.000006,0.134401,39.173141,-1575.775088,2043.18443, 0.964508,0.000007,0.264054,39.173475,-1635.024291,2043.184745, 0.864064,0.000008,0.503381,33.136594,-1575.775046,2057.567737, 0.79004,0.000008,0.613055,33.136928,-1635.024249,2057.568052, 0.141314,-0.000002,-0.989965,39.173141,-1575.775088,2043.18443, 0.141315,-0.000004,-0.989965,97.022044,-1479.423628,2051.442006, 0.141313,-0.000003,-0.989965,114.432787,-1491.102437,2053.927351, -0.59883,0.000008,-0.800876,-39.22734,1076.229413,1974.773877, -0.824055,0.000008,-0.566511,-59.369433,1087.682068,1994.390591, -0.48785,0.000007,-0.872928,-39.227276,1087.682058,1974.773938, -0.824055,0.000008,-0.566511,-59.369433,1087.682068,1994.390591, -0.59883,0.000008,-0.800876,-39.22734,1076.229413,1974.773877, -0.824055,0.000008,-0.566511,-59.369497,1076.229422,1994.39053, 0.035912,-0.998215,0.047716,-39.22734,1076.229413,1974.773877, 0.04718,-0.998208,0.036806,-33.125233,1078.145499,2012.847406, 0.05144,-0.998215,0.030339,-59.369497,1076.229422,1994.39053, 0.04718,-0.998208,0.036806,-33.125233,1078.145499,2012.847406, 0.035912,-0.998215,0.047716,-39.22734,1076.229413,1974.773877, 0.029501,-0.998208,0.052061,-22.043938,1078.145495,2001.869049, 0.05144,-0.998215,0.030339,-59.369497,1076.229422,1994.39053, 0.057675,-0.998208,0.015947,-39.161779,1078.145457,2027.230714, 0.059136,-0.998215,0.008341,-70.471455,1076.229348,2020.222024, 0.057675,-0.998208,0.015947,-39.161779,1078.145457,2027.230714, 0.05144,-0.998215,0.030339,-59.369497,1076.229422,1994.39053, 0.04718,-0.998208,0.036806,-33.125233,1078.145499,2012.847406, 0.989965,0.000004,0.141311,-18.725169,-1491.102679,2149.635004, 0.989965,0.000002,0.14131,-7.982247,-1575.775188,2074.375358, 0.989966,0.000005,0.141309,-16.239951,-1479.423837,2132.224265, 0.600091,0.000003,0.799932,-33.343912,-1575.775422,2057.257517, 0.600089,0.000006,0.799933,-80.088408,-1479.424409,2092.323821, 0.600091,0.000006,0.799931,-94.156911,-1491.103352,2102.87773, -0.864064,-0.000008,-0.503381,-33.136295,-1635.02486,2012.836977, -0.964508,-0.000007,-0.264054,-39.173175,-1575.775614,2027.21997, -0.79004,-0.000008,-0.613055,-33.136629,-1575.775657,2012.836663, -0.964508,-0.000007,-0.264054,-39.173175,-1575.775614,2027.21997, -0.864064,-0.000008,-0.503381,-33.136295,-1635.02486,2012.836977, -0.990927,-0.000006,-0.134401,-39.172841,-1635.024818,2027.220285, 0.00817,-0.998218,-0.059117,-7.970851,1078.145031,2074.386102, -0.011125,-0.99822,-0.058587,13.134182,1076.228421,2106.067344, 0.016094,-0.998211,-0.057584,-14.979542,1076.228581,2105.695757, -0.011125,-0.99822,-0.058587,13.134182,1076.228421,2106.067344, 0.00817,-0.998218,-0.059117,-7.970851,1078.145031,2074.386102, -0.011411,-0.99822,-0.058537,7.627679,1078.144942,2074.45889, -0.057687,-0.998207,-0.015958,39.184537,1078.14493,2043.195173, -0.051451,-0.998214,-0.030349,59.392233,1076.228319,2076.035337, -0.047191,-0.998207,-0.036817,33.147991,1078.144888,2057.578481, -0.051451,-0.998214,-0.030349,59.392233,1076.228319,2076.035337, -0.057687,-0.998207,-0.015958,39.184537,1078.14493,2043.195173, -0.059147,-0.998214,-0.008352,70.494191,1076.228394,2050.203843, 0.000006,1,0.000005,0.062597,1105.461443,2035.212994, -0.139076,0.962205,0.234133,-20.348604,1105.4614,2064.903427, -0.038908,0.962171,0.269655,-7.432857,1105.461298,2070.454406, -0.619788,-0.000001,0.784769,-40.811035,1076.228785,2094.593798, -0.800876,0.000001,0.59883,-60.427624,1087.681648,2074.451703, -0.872928,0.000002,0.48785,-60.427688,1076.229003,2074.451642, -0.800876,0.000001,0.59883,-60.427624,1087.681648,2074.451703, -0.619788,-0.000001,0.784769,-40.811035,1076.228785,2094.593798, -0.510751,-0.000002,0.859729,-40.810971,1087.681431,2094.593859, -0.860531,-0.000005,-0.509397,-61.09134,-1491.103002,2133.75852, -0.860533,-0.000006,-0.509395,-52.132526,-1479.424112,2118.624167, -0.860532,-0.000003,-0.509396,-22.365555,-1575.775301,2068.338812, -0.860359,-0.509569,0.011083,-95.851569,-1479.424684,2057.327217, -0.818467,-0.56723,-0.09144,-39.173175,-1575.775614,2027.21997, -0.790675,-0.595591,0.141793,-39.245963,-1575.775532,2042.8185, -0.698931,0.65913,-0.277566,-114.434123,-1260.036635,2016.475821, -0.679261,0.618097,-0.395679,-33.137931,-1175.36442,2012.835435, -0.701586,0.662308,-0.262917,-98.55764,-1260.03677,1974.10965, 0.968687,0.000002,-0.248285,-22.126464,-1271.715181,1939.349424, 0.968687,0.000003,-0.248285,-26.491771,-1491.10393,1922.314269, 0.968687,0.000001,-0.248284,-26.493073,-1260.036639,1922.313042, 0.968687,0.000003,-0.248285,-26.491771,-1491.10393,1922.314269, 0.968687,0.000002,-0.248285,-22.126464,-1271.715181,1939.349424, 0.968687,0.000003,-0.248287,-22.125162,-1479.424895,1939.350652, 0.860529,-0.000003,0.509402,22.364218,-1175.364675,2002.064361, 0.860528,0.000004,0.509402,52.131057,-1271.715666,1951.778881, 0.860527,0.000002,0.509404,61.090003,-1260.03607,1936.644652, -0.599385,-0.512211,0.615124,-80.088408,-1479.424409,2092.323821, -0.670858,-0.621461,0.404642,-33.343912,-1575.775422,2057.257517, -0.502999,-0.570987,0.648819,-22.365555,-1575.775301,2068.338812, 0.414007,0.000007,0.910274,26.490435,-1260.035141,2148.088903, 0.414007,0.000007,0.910274,67.675513,-1491.1023,2129.359093, 0.414007,0.000007,0.910274,67.674211,-1260.035009,2129.357866, 0.414007,0.000007,0.910274,67.675513,-1491.1023,2129.359093, 0.414007,0.000007,0.910274,26.490435,-1260.035141,2148.088903, 0.414007,0.000007,0.910274,26.491737,-1491.102432,2148.090131, 0.990927,0.000006,0.134401,39.173141,-1575.775088,2043.18443, 0.992138,0.000005,-0.125147,39.246263,-1635.024374,2027.586215, 0.96693,0.000004,-0.255041,39.245929,-1575.77517,2027.5859, 0.992138,0.000005,-0.125147,39.246263,-1635.024374,2027.586215, 0.990927,0.000006,0.134401,39.173141,-1575.775088,2043.18443, 0.964508,0.000007,0.264054,39.173475,-1635.024291,2043.184745, -0.990927,-0.000006,-0.134401,-39.172841,-1635.024818,2027.220285, -0.992138,-0.000005,0.125147,-39.245963,-1575.775532,2042.8185, -0.964508,-0.000007,-0.264054,-39.173175,-1575.775614,2027.21997, -0.992138,-0.000005,0.125147,-39.245963,-1575.775532,2042.8185, -0.990927,-0.000006,-0.134401,-39.172841,-1635.024818,2027.220285, -0.96693,-0.000004,0.255041,-39.24563,-1635.024735,2042.818814, -0.190512,0.000006,-0.981685,-7.617619,-1175.364474,1995.955026, -0.229384,0.000006,-0.973336,-7.609225,314.385213,1995.96294, 0.101709,0.000005,-0.994814,7.980911,-1175.364562,1996.027815, 0.685212,-0,-0.728344,80.088242,-1479.424113,1978.080455, 0.685212,-0,-0.728344,52.131057,-1271.715666,1951.778881, 0.685212,-0,-0.728344,80.08694,-1271.715963,1978.079227, 0.685212,-0,-0.728344,52.131057,-1271.715666,1951.778881, 0.685212,-0,-0.728344,80.088242,-1479.424113,1978.080455, 0.685212,-0,-0.728344,52.13236,-1479.42441,1951.780109, 0.157159,-0.595592,0.787764,7.616282,-1575.7751,2074.448146, 0.02625,-0.509303,0.860187,22.124996,-1479.423627,2131.053624, 0.011128,-0.512209,0.858789,-16.239951,-1479.423837,2132.224265, -0.229384,0.000006,-0.973336,-7.609225,314.385213,1995.96294, -0.495296,0.000007,-0.868724,-22.043938,1078.145495,2001.869049, -0.125147,0.000006,-0.992138,-7.604921,1078.145445,1995.966997, -0.495296,0.000007,-0.868724,-22.043938,1078.145495,2001.869049, -0.229384,0.000006,-0.973336,-7.609225,314.385213,1995.96294, -0.584403,0.000008,-0.811464,-22.056636,-1175.364424,2001.857078, -0.584403,0.000008,-0.811464,-22.056636,-1175.364424,2001.857078, -0.229384,0.000006,-0.973336,-7.609225,314.385213,1995.96294, -0.190512,0.000006,-0.981685,-7.617619,-1175.364474,1995.955026, -0.993172,0.000005,0.11666,-70.843043,1076.2292,2048.335748, -0.989742,0.000006,-0.142868,-70.471391,1087.681993,2020.222085, -0.962215,0.000007,-0.272291,-70.471455,1076.229348,2020.222024, -0.989742,0.000006,-0.142868,-70.471391,1087.681993,2020.222085, -0.993172,0.000005,0.11666,-70.843043,1076.2292,2048.335748, -0.969075,0.000004,0.246765,-70.842978,1087.681846,2048.335808, 0.157159,-0.595592,0.787764,7.616282,-1575.7751,2074.448146, 0.514086,-0.567226,0.643405,22.055299,-1575.77505,2068.546095, 0.297952,-0.659128,0.690489,67.675513,-1491.1023,2129.359093, 0.728344,0.000009,0.685212,57.120298,-1271.716562,2115.289236, 0.728344,0.000009,0.685212,83.421946,-1479.423514,2087.334581, 0.728344,0.000009,0.685212,83.420644,-1271.716562,2087.333353, 0.728344,0.000009,0.685212,83.421946,-1479.423514,2087.334581, 0.728344,0.000009,0.685212,57.120298,-1271.716562,2115.289236, 0.728344,0.000009,0.685212,57.1216,-1479.423514,2115.290463, -0.989965,-0.000005,-0.141316,18.725134,-1491.103683,1920.769396, -0.989965,-0.000004,-0.141316,16.238483,-1271.715391,1938.178783, -0.989964,-0.000002,-0.141318,18.723832,-1260.036393,1920.768168, -0.989965,-0.000004,-0.141316,16.238483,-1271.715391,1938.178783, -0.989965,-0.000005,-0.141316,18.725134,-1491.103683,1920.769396, -0.989965,-0.000005,-0.141313,16.239785,-1479.424685,1938.180011, 0.310182,0.662318,0.681999,26.490435,-1260.035141,2148.088903, 0.297947,0.65914,0.69048,67.674211,-1260.035009,2129.357866, 0.200522,0.618102,0.760093,7.61498,-1175.364977,2074.446919, 0.701579,0.662318,0.26291,98.555001,-1260.035011,2096.292295, 0.698924,0.659139,0.277563,114.431485,-1260.035146,2053.926124, 0.679257,0.618102,0.395677,33.135292,-1175.365031,2057.56651, 0.670858,0.621465,-0.404636,33.342575,-1175.364796,2013.145656, 0.688116,0.662016,-0.297036,112.886611,-1260.035395,2008.709218, 0.684421,0.659292,-0.311291,94.155574,-1260.035719,1967.525442, 0.679257,0.618102,0.395677,33.135292,-1175.365031,2057.56651, 0.698924,0.659139,0.277563,114.431485,-1260.035146,2053.926124, 0.789459,0.595062,0.15052,39.171839,-1175.364988,2043.183203, 0.989966,0.000004,0.141309,-18.726471,-1260.035388,2149.633777, 0.989966,0.000005,0.141309,-16.239951,-1479.423837,2132.224265, 0.989966,0.000002,0.141307,-16.241253,-1271.716239,2132.223038, 0.989966,0.000005,0.141309,-16.239951,-1479.423837,2132.224265, 0.989966,0.000004,0.141309,-18.726471,-1260.035388,2149.633777, 0.989965,0.000004,0.141311,-18.725169,-1491.102679,2149.635004, -0.000006,1,-0.000005,-33.343912,-1575.775422,2057.257517, -0.000006,1,-0.000005,-39.173175,-1575.775614,2027.21997, -0.000006,1,-0.000005,-39.245963,-1575.775532,2042.8185, -0.000006,1,-0.000005,-39.173175,-1575.775614,2027.21997, -0.000006,1,-0.000005,-33.343912,-1575.775422,2057.257517, -0.000006,1,-0.000005,-33.136629,-1575.775657,2012.836663, -0.000006,1,-0.000005,-33.136629,-1575.775657,2012.836663, -0.000006,1,-0.000005,-33.343912,-1575.775422,2057.257517, -0.000006,1,-0.000005,-22.365555,-1575.775301,2068.338812, -0.000006,1,-0.000005,-33.136629,-1575.775657,2012.836663, -0.000006,1,-0.000005,-22.365555,-1575.775301,2068.338812, -0.000006,1,-0.000005,-22.055334,-1575.775652,2001.858305, -0.000006,1,-0.000005,-22.055334,-1575.775652,2001.858305, -0.000006,1,-0.000005,-22.365555,-1575.775301,2068.338812, -0.000006,1,-0.000005,-7.982247,-1575.775188,2074.375358, -0.000006,1,-0.000005,-22.055334,-1575.775652,2001.858305, -0.000006,1,-0.000005,-7.982247,-1575.775188,2074.375358, -0.000006,1,-0.000005,-7.616317,-1575.775602,1995.956254, -0.000006,1,-0.000005,-7.616317,-1575.775602,1995.956254, -0.000006,1,-0.000005,-7.982247,-1575.775188,2074.375358, -0.000006,1,-0.000005,7.616282,-1575.7751,2074.448146, -0.000006,1,-0.000005,-7.616317,-1575.775602,1995.956254, -0.000006,1,-0.000005,7.616282,-1575.7751,2074.448146, -0.000006,1,-0.000005,7.982213,-1575.775514,1996.029042, -0.000006,1,-0.000005,7.982213,-1575.775514,1996.029042, -0.000006,1,-0.000005,7.616282,-1575.7751,2074.448146, -0.000006,1,-0.000005,22.055299,-1575.77505,2068.546095, -0.000006,1,-0.000005,7.982213,-1575.775514,1996.029042, -0.000006,1,-0.000005,22.055299,-1575.77505,2068.546095, -0.000006,1,-0.000005,22.36552,-1575.775401,2002.065588, -0.000006,1,-0.000005,22.36552,-1575.775401,2002.065588, -0.000006,1,-0.000005,22.055299,-1575.77505,2068.546095, -0.000006,1,-0.000005,33.136594,-1575.775046,2057.567737, -0.000006,1,-0.000005,22.36552,-1575.775401,2002.065588, -0.000006,1,-0.000005,33.136594,-1575.775046,2057.567737, -0.000006,1,-0.000005,33.343877,-1575.77528,2013.146883, -0.000006,1,-0.000005,33.343877,-1575.77528,2013.146883, -0.000006,1,-0.000005,33.136594,-1575.775046,2057.567737, -0.000006,1,-0.000005,39.173141,-1575.775088,2043.18443, -0.000006,1,-0.000005,33.343877,-1575.77528,2013.146883, -0.000006,1,-0.000005,39.173141,-1575.775088,2043.18443, -0.000006,1,-0.000005,39.245929,-1575.77517,2027.5859, 0.605656,0.000008,0.795727,22.055299,-1575.77505,2068.546095, 0.79004,0.000008,0.613055,33.136928,-1635.024249,2057.568052, 0.864064,0.000008,0.503381,33.136594,-1575.775046,2057.567737, 0.79004,0.000008,0.613055,33.136928,-1635.024249,2057.568052, 0.605656,0.000008,0.795727,22.055299,-1575.77505,2068.546095, 0.495296,0.000007,0.868724,22.055633,-1635.024253,2068.546409, -0.868724,0.000002,0.495296,-33.345214,-1175.364654,2057.256289, -0.96693,0.000004,0.255041,-39.234567,1078.145374,2042.829243, -0.992138,0.000005,0.125147,-39.247265,-1175.364544,2042.817272, -0.96693,0.000004,0.255041,-39.234567,1078.145374,2042.829243, -0.868724,0.000002,0.495296,-33.345214,-1175.364654,2057.256289, -0.795727,0.000001,0.605656,-33.332516,1078.145264,2057.26826, 0.503381,0.000002,-0.864064,22.364218,-1175.364675,2002.064361, 0.264054,0.000004,-0.964508,7.993609,1078.145357,1996.039785, 0.613055,0.000001,-0.79004,22.376916,1078.145244,2002.076332, 0.264054,0.000004,-0.964508,7.993609,1078.145357,1996.039785, 0.503381,0.000002,-0.864064,22.364218,-1175.364675,2002.064361, 0.101709,0.000005,-0.994814,7.980911,-1175.364562,1996.027815, 0.868724,-0.000002,-0.495296,33.355273,1078.145123,2013.157627, 0.96693,-0.000004,-0.255041,39.244627,-1175.364906,2027.584673, 0.795727,-0.000001,-0.605656,33.342575,-1175.364796,2013.145656, 0.96693,-0.000004,-0.255041,39.244627,-1175.364906,2027.584673, 0.868724,-0.000002,-0.495296,33.355273,1078.145123,2013.157627, 0.992138,-0.000005,-0.125147,39.257325,1078.145013,2027.596644, -0.684425,-0.659287,0.311293,-94.156911,-1491.103352,2102.87773, -0.688119,-0.66201,0.297042,-112.887948,-1491.103676,2061.693954, -0.670858,-0.621461,0.404642,-33.343912,-1575.775422,2057.257517, -0.142868,-0.000004,0.989742,-14.979477,1087.681226,2105.695818, 0.11666,-0.000006,0.993172,13.134182,1076.228421,2106.067344, 0.246765,-0.000007,0.969075,13.134247,1087.681066,2106.067405, 0.11666,-0.000006,0.993172,13.134182,1076.228421,2106.067344, -0.142868,-0.000004,0.989742,-14.979477,1087.681226,2105.695818, -0.272291,-0.000004,0.962215,-14.979542,1076.228581,2105.695757, 0.255041,-0.000007,0.96693,7.627679,1078.144942,2074.45889, 0.518094,-0.000007,0.855324,22.062392,314.38466,2068.552781, 0.605656,-0.000008,0.795727,22.066696,1078.144892,2068.556838, 0.518094,-0.000007,0.855324,22.062392,314.38466,2068.552781, 0.255041,-0.000007,0.96693,7.627679,1078.144942,2074.45889, 0.190512,-0.000006,0.981685,7.61498,-1175.364977,2074.446919, 0.518094,-0.000007,0.855324,22.062392,314.38466,2068.552781, 0.190512,-0.000006,0.981685,7.61498,-1175.364977,2074.446919, 0.551684,-0.000008,0.834053,22.053997,-1175.365027,2068.544867, -0.188244,-0.621459,0.760495,-7.982247,-1575.775188,2074.375358, 0.157159,-0.595592,0.787764,7.616282,-1575.7751,2074.448146, 0.011128,-0.512209,0.858789,-16.239951,-1479.423837,2132.224265, 0.514086,-0.567226,0.643405,22.055299,-1575.77505,2068.546095, 0.679262,-0.618094,0.395681,33.136594,-1575.775046,2057.567737, 0.616202,-0.509565,0.600532,83.421946,-1479.423514,2087.334581, -0.685212,0,0.728344,-80.08971,-1271.715667,2092.322594, -0.685212,0,0.728344,-52.132526,-1479.424112,2118.624167, -0.685212,0,0.728344,-52.133828,-1271.715965,2118.62294, -0.685212,0,0.728344,-52.132526,-1479.424112,2118.624167, -0.685212,0,0.728344,-80.08971,-1271.715667,2092.322594, -0.685212,0,0.728344,-80.088408,-1479.424409,2092.323821, -0.799934,-0.000001,0.600088,-67.675548,-1491.104063,1941.045307, -0.799934,-0.000001,0.600088,-57.123068,-1271.715068,1955.112585, -0.799935,-0,0.600087,-67.67685,-1260.036772,1941.044079, -0.799934,-0.000001,0.600088,-57.123068,-1271.715068,1955.112585, -0.799934,-0.000001,0.600088,-67.675548,-1491.104063,1941.045307, -0.799934,-0.000001,0.600088,-57.121766,-1479.425008,1955.113813, -0.613055,-0.000001,0.79004,-22.366857,-1175.364775,2068.337584, -0.795727,0.000001,0.605656,-33.332516,1078.145264,2057.26826, -0.868724,0.000002,0.495296,-33.345214,-1175.364654,2057.256289, -0.795727,0.000001,0.605656,-33.332516,1078.145264,2057.26826, -0.613055,-0.000001,0.79004,-22.366857,-1175.364775,2068.337584, -0.503381,-0.000002,0.864064,-22.354159,1078.145144,2068.349555, 0.605656,-0.000008,0.795727,22.066696,1078.144892,2068.556838, 0.805975,-0.000008,0.59195,33.135292,-1175.365031,2057.56651, 0.828868,-0.000008,0.559444,33.147991,1078.144888,2057.578481, 0.805975,-0.000008,0.59195,33.135292,-1175.365031,2057.56651, 0.605656,-0.000008,0.795727,22.066696,1078.144892,2068.556838, 0.518094,-0.000007,0.855324,22.062392,314.38466,2068.552781, 0.059136,-0.998215,0.008341,-70.471455,1076.229348,2020.222024, 0.058581,-0.998221,-0.011105,-39.234567,1078.145374,2042.829243, 0.058617,-0.998221,-0.010888,-70.843043,1076.2292,2048.335748, 0.058581,-0.998221,-0.011105,-39.234567,1078.145374,2042.829243, 0.059136,-0.998215,0.008341,-70.471455,1076.229348,2020.222024, 0.057675,-0.998208,0.015947,-39.161779,1078.145457,2027.230714, -0.036914,-0.998211,0.047029,40.833771,1076.228956,1975.832068, -0.047585,-0.998218,0.036011,33.355273,1078.145123,2013.157627, -0.03018,-0.998218,0.051478,22.376916,1078.145244,2002.076332, -0.047585,-0.998218,0.036011,33.355273,1078.145123,2013.157627, -0.036914,-0.998211,0.047029,40.833771,1076.228956,1975.832068, -0.052104,-0.998211,0.029324,60.450424,1076.228739,1995.974225, 0.655297,-0.595759,-0.464388,33.343877,-1575.77528,2013.146883, 0.561851,-0.416707,-0.714617,22.36552,-1575.775401,2002.065588, 0.600534,-0.509567,-0.616198,52.13236,-1479.42441,1951.780109, -0.818467,-0.56723,-0.09144,-39.173175,-1575.775614,2027.21997, -0.69893,-0.659132,-0.277564,-114.432821,-1491.103925,2016.477049, -0.67926,-0.618099,-0.395677,-33.136629,-1575.775657,2012.836663, 0.59883,-0.000008,0.800876,39.250141,1087.680974,2095.65205, 0.824055,-0.000008,0.566511,59.392233,1076.228319,2076.035337, 0.824055,-0.000008,0.566511,59.392298,1087.680965,2076.035397, 0.824055,-0.000008,0.566511,59.392233,1076.228319,2076.035337, 0.59883,-0.000008,0.800876,39.250141,1087.680974,2095.65205, 0.48785,-0.000007,0.872928,39.250077,1076.228329,2095.65199, -0.514083,-0.567231,-0.643403,-22.055334,-1575.775652,2001.858305, -0.6162,-0.509569,-0.600531,-83.422112,-1479.425008,1983.069695, -0.625236,-0.512922,-0.58821,-57.121766,-1479.425008,1955.113813, 0.858789,-0.512209,-0.011122,97.022044,-1479.423628,2051.442006, 0.789465,-0.595053,0.150522,39.173141,-1575.775088,2043.18443, 0.81446,-0.570986,-0.103102,39.245929,-1575.77517,2027.5859, 0.000006,-1,0.000005,0.000317,-1635.024555,2035.202515, 0.000006,-1,0.000005,-21.078506,-1635.024494,2068.87915, 0.000006,-1,0.000005,-33.343578,-1635.024625,2057.257832, 0.000006,-1,0.000005,7.982547,-1635.024718,1996.029357, 0.000006,-1,0.000005,0.000317,-1635.024555,2035.202515, 0.000006,-1,0.000005,-7.615983,-1635.024806,1995.956569, -0.514083,0.56723,-0.643404,-22.056636,-1175.364424,2001.857078, -0.625236,0.512922,-0.58821,-57.123068,-1271.715068,1955.112585, -0.6162,0.509569,-0.600531,-83.423414,-1271.715068,1983.068468, -0.999535,-0.000006,0.030499,-97.022211,-1479.424894,2018.96227, -0.999535,-0.000006,0.030499,-95.852871,-1271.715393,2057.325989, -0.999535,-0.000006,0.030499,-97.023513,-1271.715182,2018.961042, -0.999535,-0.000006,0.030499,-95.852871,-1271.715393,2057.325989, -0.999535,-0.000006,0.030499,-97.022211,-1479.424894,2018.96227, -0.999535,-0.000006,0.030499,-95.851569,-1479.424684,2057.327217, 0.000006,1,0.000005,0.062597,1105.461443,2035.212994, -0.132844,0.962206,-0.237725,-19.556757,1105.461714,2004.993466, -0.213632,0.962233,-0.168727,-29.627835,1105.461718,2014.801793, -0.255041,-0.000007,-0.96693,-7.615983,-1635.024806,1995.956569, -0.495296,-0.000007,-0.868724,-22.055334,-1575.775652,2001.858305, -0.125147,-0.000006,-0.992138,-7.616317,-1575.775602,1995.956254, -0.495296,-0.000007,-0.868724,-22.055334,-1575.775652,2001.858305, -0.255041,-0.000007,-0.96693,-7.615983,-1635.024806,1995.956569, -0.605656,-0.000008,-0.795727,-22.055,-1635.024856,2001.85862, -0.68812,0.662011,0.297038,-112.88925,-1260.036386,2061.692727, -0.655293,0.595761,0.464393,-33.345214,-1175.364654,2057.256289, -0.790675,0.595591,0.141793,-39.247265,-1175.364544,2042.817272, 0.799933,0.000001,-0.600089,67.674211,-1260.035009,2129.357866, 0.799933,0.000001,-0.600089,57.1216,-1479.423514,2115.290463, 0.799933,0,-0.600089,57.120298,-1271.716562,2115.289236, 0.799933,0.000001,-0.600089,57.1216,-1479.423514,2115.290463, 0.799933,0.000001,-0.600089,67.674211,-1260.035009,2129.357866, 0.799934,0.000001,-0.600088,67.675513,-1491.1023,2129.359093, 0.134993,-0.595761,-0.791736,7.982213,-1575.775514,1996.029042, 0.263853,-0.659287,-0.704075,18.725134,-1491.103683,1920.769396, 0.276542,-0.66201,-0.696611,61.091305,-1491.10336,1936.64588, 0.625238,-0.512917,0.588212,57.1216,-1479.423514,2115.290463, 0.514086,-0.567226,0.643405,22.055299,-1575.77505,2068.546095, 0.616202,-0.509565,0.600532,83.421946,-1479.423514,2087.334581, 0.248284,0.000004,0.968687,95.850101,-1271.716238,2013.075832, 0.248282,0.000002,0.968688,112.886611,-1260.035395,2008.709218, 0.248285,-0.000002,0.968687,39.244627,-1175.364906,2027.584673, -0.5094,0.000001,0.86053,83.420644,-1271.716562,2087.333353, -0.5094,0.000001,0.86053,98.555001,-1260.035011,2096.292295, -0.509399,-0.000001,0.86053,33.135292,-1175.365031,2057.56651, 0.248285,0.000002,0.968687,39.245929,-1575.77517,2027.5859, 0.248284,0.000005,0.968687,112.887913,-1491.102686,2008.710446, 0.248287,0.000005,0.968687,95.851403,-1479.423838,2013.077059, -0.509399,0.000001,0.86053,33.136594,-1575.775046,2057.567737, -0.5094,0.000001,0.86053,98.556303,-1491.102301,2096.293522, -0.509399,0.000001,0.86053,83.421946,-1479.423514,2087.334581, 0.993172,-0.000005,-0.11666,70.865843,1087.681187,2022.09018, 0.989742,-0.000006,0.142868,70.494191,1076.228394,2050.203843, 0.969075,-0.000004,-0.246765,70.865779,1076.228541,2022.090119, 0.989742,-0.000006,0.142868,70.494191,1076.228394,2050.203843, 0.993172,-0.000005,-0.11666,70.865843,1087.681187,2022.09018, 0.962215,-0.000007,0.272291,70.494256,1087.68104,2050.203904, -0.514083,-0.567231,-0.643403,-22.055334,-1575.775652,2001.858305, -0.297947,-0.659132,-0.690487,-67.675548,-1491.104063,1941.045307, -0.20052,-0.618098,-0.760096,-7.616317,-1575.775602,1995.956254, 0.655297,-0.595759,-0.464388,33.343877,-1575.77528,2013.146883, 0.684431,-0.659285,-0.311285,94.156876,-1491.10301,1967.52667, 0.688124,-0.662008,-0.297034,112.887913,-1491.102686,2008.710446, -0.955293,0.000007,-0.29566,-39.174477,-1175.364462,2027.218743, -0.828868,0.000008,-0.559444,-33.129537,314.385267,2012.843349, -0.828868,0.000008,-0.559444,-33.137931,-1175.36442,2012.835435, -0.828868,0.000008,-0.559444,-33.129537,314.385267,2012.843349, -0.955293,0.000007,-0.29566,-39.174477,-1175.364462,2027.218743, -0.828868,0.000008,-0.559444,-33.125233,1078.145499,2012.847406, -0.828868,0.000008,-0.559444,-33.125233,1078.145499,2012.847406, -0.955293,0.000007,-0.29566,-39.174477,-1175.364462,2027.218743, -0.990927,0.000006,-0.134401,-39.161779,1078.145457,2027.230714, -0.20052,-0.618098,-0.760096,-7.616317,-1575.775602,1995.956254, -0.297947,-0.659132,-0.690487,-67.675548,-1491.104063,1941.045307, -0.310184,-0.662311,-0.682004,-26.491771,-1491.10393,1922.314269, 0.255041,0.000007,0.96693,7.616282,-1575.7751,2074.448146, 0.495296,0.000007,0.868724,22.055633,-1635.024253,2068.546409, 0.605656,0.000008,0.795727,22.055299,-1575.77505,2068.546095, 0.495296,0.000007,0.868724,22.055633,-1635.024253,2068.546409, 0.255041,0.000007,0.96693,7.616282,-1575.7751,2074.448146, 0.125147,0.000006,0.992138,7.616616,-1635.024303,2074.448461, -0.96693,-0.000004,0.255041,-39.24563,-1635.024735,2042.818814, -0.868724,-0.000002,0.495296,-33.343912,-1575.775422,2057.257517, -0.992138,-0.000005,0.125147,-39.245963,-1575.775532,2042.8185, -0.868724,-0.000002,0.495296,-33.343912,-1575.775422,2057.257517, -0.96693,-0.000004,0.255041,-39.24563,-1635.024735,2042.818814, -0.789247,-0.002827,0.614069,-33.343578,-1635.024625,2057.257832, -0.818468,0.567229,-0.091441,-39.174477,-1175.364462,2027.218743, -0.679261,0.618097,-0.395679,-33.137931,-1175.36442,2012.835435, -0.698931,0.65913,-0.277566,-114.434123,-1260.036635,2016.475821, -0.684428,0.659289,0.311283,-94.158213,-1260.036061,2102.876503, -0.655293,0.595761,0.464393,-33.345214,-1175.364654,2057.256289, -0.68812,0.662011,0.297038,-112.88925,-1260.036386,2061.692727, 0.030499,0.000006,0.999535,-16.241253,-1271.716239,2132.223038, 0.030499,0.000006,0.999535,22.124996,-1479.423627,2131.053624, 0.030499,0.000006,0.999535,22.123694,-1271.716449,2131.052397, 0.030499,0.000006,0.999535,22.124996,-1479.423627,2131.053624, 0.030499,0.000006,0.999535,-16.241253,-1271.716239,2132.223038, 0.030499,0.000006,0.999535,-16.239951,-1479.423837,2132.224265, -0.605656,-0.000008,-0.795727,-22.055,-1635.024856,2001.85862, -0.79004,-0.000008,-0.613055,-33.136629,-1575.775657,2012.836663, -0.495296,-0.000007,-0.868724,-22.055334,-1575.775652,2001.858305, -0.79004,-0.000008,-0.613055,-33.136629,-1575.775657,2012.836663, -0.605656,-0.000008,-0.795727,-22.055,-1635.024856,2001.85862, -0.864064,-0.000008,-0.503381,-33.136295,-1635.02486,2012.836977, 0.999535,0.000006,-0.030499,97.020742,-1271.716448,2051.440779, 0.999535,0.000006,-0.030499,95.851403,-1479.423838,2013.077059, 0.999535,0.000006,-0.030499,95.850101,-1271.716238,2013.075832, 0.999535,0.000006,-0.030499,95.851403,-1479.423838,2013.077059, 0.999535,0.000006,-0.030499,97.020742,-1271.716448,2051.440779, 0.999535,0.000006,-0.030499,97.022044,-1479.423628,2051.442006, -0.69893,-0.659132,-0.277564,-114.432821,-1491.103925,2016.477049, -0.701584,-0.662311,-0.262913,-98.556338,-1491.104061,1974.110878, -0.67926,-0.618099,-0.395677,-33.136629,-1575.775657,2012.836663, 0.826538,0.557702,-0.076187,39.244627,-1175.364906,2027.584673, 0.688116,0.662016,-0.297036,112.886611,-1260.035395,2008.709218, 0.670858,0.621465,-0.404636,33.342575,-1175.364796,2013.145656, 0.509398,-0.000001,-0.860531,-83.423414,-1271.715068,1983.068468, 0.509398,-0.000001,-0.860531,-98.55764,-1260.03677,1974.10965, 0.509398,0.000001,-0.860531,-33.137931,-1175.36442,2012.835435, -0.799934,0,0.600088,-22.056636,-1175.364424,2001.857078, -0.799935,-0,0.600087,-67.67685,-1260.036772,1941.044079, -0.799934,-0.000001,0.600088,-57.123068,-1271.715068,1955.112585, 0.142868,0.000004,-0.989742,15.002278,1076.229161,1964.73011, -0.11666,0.000006,-0.993172,-13.111382,1087.681967,1964.358584, 0.272291,0.000004,-0.962215,15.002342,1087.681806,1964.730171, -0.11666,0.000006,-0.993172,-13.111382,1087.681967,1964.358584, 0.142868,0.000004,-0.989742,15.002278,1076.229161,1964.73011, -0.246765,0.000007,-0.969075,-13.111446,1076.229321,1964.358523, -0.992138,0.000005,0.125147,-39.247265,-1175.364544,2042.817272, -0.990927,0.000006,-0.134401,-39.161779,1078.145457,2027.230714, -0.955293,0.000007,-0.29566,-39.174477,-1175.364462,2027.218743, -0.990927,0.000006,-0.134401,-39.161779,1078.145457,2027.230714, -0.992138,0.000005,0.125147,-39.247265,-1175.364544,2042.817272, -0.96693,0.000004,0.255041,-39.234567,1078.145374,2042.829243, -0.6162,0.509569,-0.600531,-83.423414,-1271.715068,1983.068468, -0.679261,0.618097,-0.395679,-33.137931,-1175.36442,2012.835435, -0.514083,0.56723,-0.643404,-22.056636,-1175.364424,2001.857078, 0.134993,-0.595761,-0.791736,7.982213,-1575.775514,1996.029042, -0.011077,-0.509569,-0.860359,-22.125162,-1479.424895,1939.350652, -0.026179,-0.512921,-0.858036,16.239785,-1479.424685,1938.180011, -0.20052,-0.618098,-0.760096,-7.616317,-1575.775602,1995.956254, -0.011077,-0.509569,-0.860359,-22.125162,-1479.424895,1939.350652, 0.134993,-0.595761,-0.791736,7.982213,-1575.775514,1996.029042, 0.936408,0.000007,0.350914,98.555001,-1260.035011,2096.292295, 0.936408,0.000007,0.350914,114.432787,-1491.102437,2053.927351, 0.936408,0.000007,0.350914,114.431485,-1260.035146,2053.926124, 0.936408,0.000007,0.350914,114.432787,-1491.102437,2053.927351, 0.936408,0.000007,0.350914,98.555001,-1260.035011,2096.292295, 0.936408,0.000007,0.350914,98.556303,-1491.102301,2096.293522, -0.728344,-0.000009,-0.685212,-57.121766,-1479.425008,1955.113813, -0.728344,-0.000009,-0.685212,-83.423414,-1271.715068,1983.068468, -0.728344,-0.000009,-0.685212,-57.123068,-1271.715068,1955.112585, -0.728344,-0.000009,-0.685212,-83.423414,-1271.715068,1983.068468, -0.728344,-0.000009,-0.685212,-57.121766,-1479.425008,1955.113813, -0.728344,-0.000009,-0.685212,-83.422112,-1479.425008,1983.069695, -0.030499,-0.000006,-0.999535,16.239785,-1479.424685,1938.180011, -0.030499,-0.000006,-0.999535,-22.126464,-1271.715181,1939.349424, -0.030499,-0.000006,-0.999535,16.238483,-1271.715391,1938.178783, -0.030499,-0.000006,-0.999535,-22.126464,-1271.715181,1939.349424, -0.030499,-0.000006,-0.999535,16.239785,-1479.424685,1938.180011, -0.030499,-0.000006,-0.999535,-22.125162,-1479.424895,1939.350652, -0.502999,-0.570987,0.648819,-22.365555,-1575.775301,2068.338812, -0.589681,-0.509305,0.626805,-52.132526,-1479.424112,2118.624167, -0.599385,-0.512211,0.615124,-80.088408,-1479.424409,2092.323821, 0.858789,-0.512209,-0.011122,97.022044,-1479.423628,2051.442006, 0.81446,-0.570986,-0.103102,39.245929,-1575.77517,2027.5859, 0.860187,-0.509303,-0.026244,95.851403,-1479.423838,2013.077059, 0.276537,0.662012,-0.696611,61.090003,-1260.03607,1936.644652, 0.188248,0.621463,-0.760491,7.980911,-1175.364562,1996.027815, 0.503006,0.570988,-0.648812,22.364218,-1175.364675,2002.064361, 0.81446,-0.570986,-0.103102,39.245929,-1575.77517,2027.5859, 0.655297,-0.595759,-0.464388,33.343877,-1575.77528,2013.146883, 0.688124,-0.662008,-0.297034,112.887913,-1491.102686,2008.710446, -0.67926,-0.618099,-0.395677,-33.136629,-1575.775657,2012.836663, -0.6162,-0.509569,-0.600531,-83.422112,-1479.425008,1983.069695, -0.514083,-0.567231,-0.643403,-22.055334,-1575.775652,2001.858305, 0.860528,0.000004,0.509402,52.131057,-1271.715666,1951.778881, 0.860528,0.000006,0.509402,61.091305,-1491.10336,1936.64588, 0.860527,0.000002,0.509404,61.090003,-1260.03607,1936.644652, 0.860528,0.000006,0.509402,61.091305,-1491.10336,1936.64588, 0.860528,0.000004,0.509402,52.131057,-1271.715666,1951.778881, 0.86053,0.000006,0.5094,52.13236,-1479.42441,1951.780109, 0.350914,-0.000003,-0.936408,61.091305,-1491.10336,1936.64588, 0.350914,-0.000003,-0.936408,18.723832,-1260.036393,1920.768168, 0.350914,-0.000003,-0.936408,61.090003,-1260.03607,1936.644652, 0.350914,-0.000003,-0.936408,18.723832,-1260.036393,1920.768168, 0.350914,-0.000003,-0.936408,61.091305,-1491.10336,1936.64588, 0.350914,-0.000003,-0.936408,18.725134,-1491.103683,1920.769396, 0.600091,0.000006,0.799931,-94.156911,-1491.103352,2102.87773, 0.600091,0.000004,0.799931,-80.08971,-1271.715667,2092.322594, 0.600093,0.000002,0.79993,-94.158213,-1260.036061,2102.876503, 0.600091,0.000004,0.799931,-80.08971,-1271.715667,2092.322594, 0.600091,0.000006,0.799931,-94.156911,-1491.103352,2102.87773, 0.600089,0.000006,0.799933,-80.088408,-1479.424409,2092.323821, 0.248284,0.000004,0.968687,95.850101,-1271.716238,2013.075832, 0.248284,0.000005,0.968687,112.887913,-1491.102686,2008.710446, 0.248282,0.000002,0.968688,112.886611,-1260.035395,2008.709218, 0.248284,0.000005,0.968687,112.887913,-1491.102686,2008.710446, 0.248284,0.000004,0.968687,95.850101,-1271.716238,2013.075832, 0.248287,0.000005,0.968687,95.851403,-1479.423838,2013.077059, -0.860359,-0.509569,0.011083,-95.851569,-1479.424684,2057.327217, -0.858036,-0.512921,0.026184,-97.022211,-1479.424894,2018.96227, -0.818467,-0.56723,-0.09144,-39.173175,-1575.775614,2027.21997, 0.96693,0.000004,-0.255041,39.245929,-1575.77517,2027.5859, 0.829674,-0.002123,-0.558245,33.344211,-1635.024484,2013.147198, 0.834053,0.000002,-0.551684,33.343877,-1575.77528,2013.146883, 0.829674,-0.002123,-0.558245,33.344211,-1635.024484,2013.147198, 0.96693,0.000004,-0.255041,39.245929,-1575.77517,2027.5859, 0.992138,0.000005,-0.125147,39.246263,-1635.024374,2027.586215, 0.619788,0.000001,-0.784769,40.833836,1087.681602,1975.832129, 0.800876,-0.000001,-0.59883,60.450424,1076.228739,1995.974225, 0.510751,0.000002,-0.859729,40.833771,1076.228956,1975.832068, 0.800876,-0.000001,-0.59883,60.450424,1076.228739,1995.974225, 0.619788,0.000001,-0.784769,40.833836,1087.681602,1975.832129, 0.872928,-0.000002,-0.48785,60.450489,1087.681384,1995.974286, -0.910274,-0.000003,0.414007,-112.887948,-1491.103676,2061.693954, -0.910274,-0.000003,0.414007,-94.158213,-1260.036061,2102.876503, -0.910274,-0.000003,0.414007,-112.88925,-1260.036386,2061.692727, -0.910274,-0.000003,0.414007,-94.158213,-1260.036061,2102.876503, -0.910274,-0.000003,0.414007,-112.887948,-1491.103676,2061.693954, -0.910274,-0.000003,0.414007,-94.156911,-1491.103352,2102.87773 }; static const struct gllist robot_crank_full_frame = { GL_N3F_V3F, GL_TRIANGLES, 1164, robot_crank_full_data, 0 }; const struct gllist *robot_crank_full = &robot_crank_full_frame; static const float robot_gearbox_half_data[] = { 0.412791,0,-0.910826,-16.408995,-70.07352,1719.887419, 0.527987,0,-0.849253,-23.822213,-116.7892,1715.924987, 0.582553,0,-0.812793,-23.822213,-70.07352,1715.924987, 0.527987,0,-0.849253,-23.822213,-116.7892,1715.924987, 0.412791,0,-0.910826,-16.408995,-70.07352,1719.887419, 0.352161,0,-0.93594,-16.408995,-116.7892,1719.887419, 0,-1,0,712.934349,-116.7892,1614.073004, 0,-1,0,-758.547422,-116.7892,1522.846858, 0,-1,0,758.547422,-116.7892,1522.846858, 0,-1,0,-758.547422,-116.7892,1522.846858, 0,-1,0,712.934349,-116.7892,1614.073004, 0,-1,0,-712.590311,-116.7892,1614.76108, 0,-1,0,-712.590311,-116.7892,1614.76108, 0,-1,0,712.934349,-116.7892,1614.073004, 0,-1,0,93.432274,-116.7892,1614.761079, 0,-1,0,-712.590311,-116.7892,1614.76108, 0,-1,0,93.432274,-116.7892,1614.761079, 0,-1,0,-93.431364,-116.7892,1614.76108, 0,-1,0,-93.431364,-116.7892,1614.76108, 0,-1,0,93.432274,-116.7892,1614.761079, 0,-1,0,8.365227,-116.7892,1638.217273, 0,-1,0,8.365227,-116.7892,1638.217273, 0,-1,0,93.432274,-116.7892,1614.761079, 0,-1,0,16.409035,-116.7892,1640.657321, 0,-1,0,16.409035,-116.7892,1640.657321, 0,-1,0,93.432274,-116.7892,1614.761079, 0,-1,0,23.822253,-116.7892,1644.619753, 0,-1,0,23.822253,-116.7892,1644.619753, 0,-1,0,93.432274,-116.7892,1614.761079, 0,-1,0,30.319996,-116.7892,1649.952295, 0,-1,0,30.319996,-116.7892,1649.952295, 0,-1,0,93.432274,-116.7892,1614.761079, 0,-1,0,35.652559,-116.7892,1656.450021, 0,-1,0,35.652559,-116.7892,1656.450021, 0,-1,0,93.432274,-116.7892,1614.761079, 0,-1,0,39.615015,-116.7892,1663.863226, 0,-1,0,39.615015,-116.7892,1663.863226, 0,-1,0,93.432274,-116.7892,1614.761079, 0,-1,0,42.05509,-116.7892,1671.907025, 0,-1,0,42.05509,-116.7892,1671.907025, 0,-1,0,93.432274,-116.7892,1614.761079, 0,-1,0,42.879011,-116.7892,1680.2723, 0,-1,0,42.879011,-116.7892,1680.2723, 0,-1,0,93.432274,-116.7892,1614.761079, 0,-1,0,93.431356,-116.7892,2549.07468, 0,-1,0,-93.431364,-116.7892,1614.76108, 0,-1,0,8.365227,-116.7892,1638.217273, 0,-1,0,-0.00005,-116.7892,1637.393379, 0,-1,0,42.879011,-116.7892,1680.2723, 0,-1,0,93.431356,-116.7892,2549.07468, 0,-1,0,42.055117,-116.7892,1688.637578, 0,-1,0,42.055117,-116.7892,1688.637578, 0,-1,0,93.431356,-116.7892,2549.07468, 0,-1,0,39.615069,-116.7892,1696.681385, 0,-1,0,39.615069,-116.7892,1696.681385, 0,-1,0,93.431356,-116.7892,2549.07468, 0,-1,0,35.652637,-116.7892,1704.094603, 0,-1,0,35.652637,-116.7892,1704.094603, 0,-1,0,93.431356,-116.7892,2549.07468, 0,-1,0,30.320095,-116.7892,1710.592346, 0,-1,0,30.320095,-116.7892,1710.592346, 0,-1,0,93.431356,-116.7892,2549.07468, 0,-1,0,23.822369,-116.7892,1715.924909, 0,-1,0,23.822369,-116.7892,1715.924909, 0,-1,0,93.431356,-116.7892,2549.07468, 0,-1,0,16.409164,-116.7892,1719.887366, 0,-1,0,16.409164,-116.7892,1719.887366, 0,-1,0,93.431356,-116.7892,2549.07468, 0,-1,0,42.879011,-116.7892,2035.202107, 0,-1,0,16.409164,-116.7892,1719.887366, 0,-1,0,42.879011,-116.7892,2035.202107, 0,-1,0,42.055094,-116.7892,2026.836831, 0,-1,0,16.409164,-116.7892,1719.887366, 0,-1,0,42.055094,-116.7892,2026.836831, 0,-1,0,8.365365,-116.7892,1722.32744, 0,-1,0,8.365365,-116.7892,1722.32744, 0,-1,0,42.055094,-116.7892,2026.836831, 0,-1,0,0.00009,-116.7892,1723.151361, 0,-1,0,0.00009,-116.7892,1723.151361, 0,-1,0,42.055094,-116.7892,2026.836831, 0,-1,0,39.615024,-116.7892,2018.793031, 0,-1,0,0.00009,-116.7892,1723.151361, 0,-1,0,39.615024,-116.7892,2018.793031, 0,-1,0,35.652572,-116.7892,2011.379823, 0,-1,0,0.00009,-116.7892,1723.151361, 0,-1,0,35.652572,-116.7892,2011.379823, 0,-1,0,30.320012,-116.7892,2004.882095, 0,-1,0,0.00009,-116.7892,1723.151361, 0,-1,0,30.320012,-116.7892,2004.882095, 0,-1,0,23.822272,-116.7892,1999.549549, 0,-1,0,0.00009,-116.7892,1723.151361, 0,-1,0,23.822272,-116.7892,1999.549549, 0,-1,0,16.409056,-116.7892,1995.587113, 0,-1,0,0.00009,-116.7892,1723.151361, 0,-1,0,16.409056,-116.7892,1995.587113, 0,-1,0,8.36525,-116.7892,1993.147061, 0,-1,0,0.00009,-116.7892,1723.151361, 0,-1,0,8.36525,-116.7892,1993.147061, 0,-1,0,-0.000027,-116.7892,1992.323162, 0,-1,0,42.879011,-116.7892,2035.202107, 0,-1,0,93.431356,-116.7892,2549.07468, 0,-1,0,42.055112,-116.7892,2043.567384, 0,-1,0,42.055112,-116.7892,2043.567384, 0,-1,0,93.431356,-116.7892,2549.07468, 0,-1,0,39.61506,-116.7892,2051.61119, 0,-1,0,39.61506,-116.7892,2051.61119, 0,-1,0,93.431356,-116.7892,2549.07468, 0,-1,0,35.652624,-116.7892,2059.024406, 0,-1,0,35.652624,-116.7892,2059.024406, 0,-1,0,93.431356,-116.7892,2549.07468, 0,-1,0,30.320078,-116.7892,2065.522146, 0,-1,0,30.320078,-116.7892,2065.522146, 0,-1,0,93.431356,-116.7892,2549.07468, 0,-1,0,23.82235,-116.7892,2070.854706, 0,-1,0,23.82235,-116.7892,2070.854706, 0,-1,0,93.431356,-116.7892,2549.07468, 0,-1,0,16.409142,-116.7892,2074.817158, 0,-1,0,16.409142,-116.7892,2074.817158, 0,-1,0,93.431356,-116.7892,2549.07468, 0,-1,0,8.365342,-116.7892,2077.257228, 0,-1,0,8.365342,-116.7892,2077.257228, 0,-1,0,93.431356,-116.7892,2549.07468, 0,-1,0,0.000066,-116.7892,2078.081145, 0,-1,0,0.000066,-116.7892,2078.081145, 0,-1,0,93.431356,-116.7892,2549.07468, 0,-1,0,39.615042,-116.7892,2409.402612, 0,-1,0,0.000066,-116.7892,2078.081145, 0,-1,0,39.615042,-116.7892,2409.402612, 0,-1,0,35.652598,-116.7892,2401.9894, 0,-1,0,0.000066,-116.7892,2078.081145, 0,-1,0,35.652598,-116.7892,2401.9894, 0,-1,0,30.320045,-116.7892,2395.491666, 0,-1,0,0.000066,-116.7892,2078.081145, 0,-1,0,30.320045,-116.7892,2395.491666, 0,-1,0,23.822311,-116.7892,2390.159113, 0,-1,0,0.000066,-116.7892,2078.081145, 0,-1,0,23.822311,-116.7892,2390.159113, 0,-1,0,16.409099,-116.7892,2386.196669, 0,-1,0,0.000066,-116.7892,2078.081145, 0,-1,0,16.409099,-116.7892,2386.196669, 0,-1,0,8.365296,-116.7892,2383.756608, 0,-1,0,0.000066,-116.7892,2078.081145, 0,-1,0,8.365296,-116.7892,2383.756608, 0,-1,0,0.00002,-116.7892,2382.9327, 0,-1,0,39.615042,-116.7892,2409.402612, 0,-1,0,93.431356,-116.7892,2549.07468, 0,-1,0,42.055103,-116.7892,2417.446415, 0,-1,0,42.055103,-116.7892,2417.446415, 0,-1,0,93.431356,-116.7892,2549.07468, 0,-1,0,42.879011,-116.7892,2425.811691, 0,-1,0,42.879011,-116.7892,2425.811691, 0,-1,0,93.431356,-116.7892,2549.07468, 0,-1,0,42.055103,-116.7892,2434.176967, 0,-1,0,42.055103,-116.7892,2434.176967, 0,-1,0,93.431356,-116.7892,2549.07468, 0,-1,0,39.615042,-116.7892,2442.220771, 0,-1,0,39.615042,-116.7892,2442.220771, 0,-1,0,93.431356,-116.7892,2549.07468, 0,-1,0,35.652598,-116.7892,2449.633982, 0,-1,0,35.652598,-116.7892,2449.633982, 0,-1,0,93.431356,-116.7892,2549.07468, 0,-1,0,30.320045,-116.7892,2456.131717, 0,-1,0,30.320045,-116.7892,2456.131717, 0,-1,0,93.431356,-116.7892,2549.07468, 0,-1,0,23.822311,-116.7892,2461.464269, 0,-1,0,23.822311,-116.7892,2461.464269, 0,-1,0,93.431356,-116.7892,2549.07468, 0,-1,0,16.409099,-116.7892,2465.426714, 0,-1,0,16.409099,-116.7892,2465.426714, 0,-1,0,93.431356,-116.7892,2549.07468, 0,-1,0,8.365296,-116.7892,2467.866775, 0,-1,0,8.365296,-116.7892,2467.866775, 0,-1,0,93.431356,-116.7892,2549.07468, 0,-1,0,0.00002,-116.7892,2468.690683, 0,-1,0,-93.431364,-116.7892,1614.76108, 0,-1,0,-42.878972,-116.7892,1680.27244, 0,-1,0,-93.431364,-116.7892,2549.07468, 0,-1,0,-42.878972,-116.7892,1680.27244, 0,-1,0,-93.431364,-116.7892,1614.76108, 0,-1,0,-42.055077,-116.7892,1671.907163, 0,-1,0,-42.055077,-116.7892,1671.907163, 0,-1,0,-93.431364,-116.7892,1614.76108, 0,-1,0,-39.615029,-116.7892,1663.863355, 0,-1,0,-39.615029,-116.7892,1663.863355, 0,-1,0,-93.431364,-116.7892,1614.76108, 0,-1,0,-35.652597,-116.7892,1656.450137, 0,-1,0,-35.652597,-116.7892,1656.450137, 0,-1,0,-93.431364,-116.7892,1614.76108, 0,-1,0,-30.320055,-116.7892,1649.952394, 0,-1,0,-30.320055,-116.7892,1649.952394, 0,-1,0,-93.431364,-116.7892,1614.76108, 0,-1,0,-23.82233,-116.7892,1644.619831, 0,-1,0,-23.82233,-116.7892,1644.619831, 0,-1,0,-93.431364,-116.7892,1614.76108, 0,-1,0,-16.409125,-116.7892,1640.657374, 0,-1,0,-16.409125,-116.7892,1640.657374, 0,-1,0,-93.431364,-116.7892,1614.76108, 0,-1,0,-8.365325,-116.7892,1638.2173, 0,-1,0,-8.365325,-116.7892,1638.2173, 0,-1,0,-93.431364,-116.7892,1614.76108, 0,-1,0,-0.00005,-116.7892,1637.393379, 0,-1,0,-93.431364,-116.7892,2549.07468, 0,-1,0,-42.878972,-116.7892,1680.27244, 0,-1,0,-42.05505,-116.7892,1688.637715, 0,-1,0,-93.431364,-116.7892,2549.07468, 0,-1,0,-42.05505,-116.7892,1688.637715, 0,-1,0,-39.614976,-116.7892,1696.681514, 0,-1,0,-93.431364,-116.7892,2549.07468, 0,-1,0,-39.614976,-116.7892,1696.681514, 0,-1,0,-35.65252,-116.7892,1704.09472, 0,-1,0,-93.431364,-116.7892,2549.07468, 0,-1,0,-35.65252,-116.7892,1704.09472, 0,-1,0,-30.319956,-116.7892,1710.592445, 0,-1,0,-93.431364,-116.7892,2549.07468, 0,-1,0,-30.319956,-116.7892,1710.592445, 0,-1,0,-23.822213,-116.7892,1715.924987, 0,-1,0,-93.431364,-116.7892,2549.07468, 0,-1,0,-23.822213,-116.7892,1715.924987, 0,-1,0,-16.408995,-116.7892,1719.887419, 0,-1,0,-93.431364,-116.7892,2549.07468, 0,-1,0,-16.408995,-116.7892,1719.887419, 0,-1,0,-42.878972,-116.7892,2035.2022, 0,-1,0,-42.878972,-116.7892,2035.2022, 0,-1,0,-16.408995,-116.7892,1719.887419, 0,-1,0,-42.055073,-116.7892,2026.836923, 0,-1,0,-42.055073,-116.7892,2026.836923, 0,-1,0,-16.408995,-116.7892,1719.887419, 0,-1,0,-8.365188,-116.7892,1722.327467, 0,-1,0,-42.055073,-116.7892,2026.836923, 0,-1,0,-8.365188,-116.7892,1722.327467, 0,-1,0,0.00009,-116.7892,1723.151361, 0,-1,0,-42.055073,-116.7892,2026.836923, 0,-1,0,0.00009,-116.7892,1723.151361, 0,-1,0,-39.615021,-116.7892,2018.793117, 0,-1,0,-39.615021,-116.7892,2018.793117, 0,-1,0,0.00009,-116.7892,1723.151361, 0,-1,0,-35.652584,-116.7892,2011.379901, 0,-1,0,-35.652584,-116.7892,2011.379901, 0,-1,0,0.00009,-116.7892,1723.151361, 0,-1,0,-30.320039,-116.7892,2004.882161, 0,-1,0,-30.320039,-116.7892,2004.882161, 0,-1,0,0.00009,-116.7892,1723.151361, 0,-1,0,-23.82231,-116.7892,1999.549601, 0,-1,0,-23.82231,-116.7892,1999.549601, 0,-1,0,0.00009,-116.7892,1723.151361, 0,-1,0,-16.409103,-116.7892,1995.587149, 0,-1,0,-16.409103,-116.7892,1995.587149, 0,-1,0,0.00009,-116.7892,1723.151361, 0,-1,0,-8.365302,-116.7892,1993.147079, 0,-1,0,-8.365302,-116.7892,1993.147079, 0,-1,0,0.00009,-116.7892,1723.151361, 0,-1,0,-0.000027,-116.7892,1992.323162, 0,-1,0,-93.431364,-116.7892,2549.07468, 0,-1,0,-42.878972,-116.7892,2035.2022, 0,-1,0,-42.055055,-116.7892,2043.567475, 0,-1,0,-93.431364,-116.7892,2549.07468, 0,-1,0,-42.055055,-116.7892,2043.567475, 0,-1,0,-39.614985,-116.7892,2051.611276, 0,-1,0,-93.431364,-116.7892,2549.07468, 0,-1,0,-39.614985,-116.7892,2051.611276, 0,-1,0,-35.652533,-116.7892,2059.024483, 0,-1,0,-93.431364,-116.7892,2549.07468, 0,-1,0,-35.652533,-116.7892,2059.024483, 0,-1,0,-30.319973,-116.7892,2065.522212, 0,-1,0,-93.431364,-116.7892,2549.07468, 0,-1,0,-30.319973,-116.7892,2065.522212, 0,-1,0,-23.822233,-116.7892,2070.854758, 0,-1,0,-93.431364,-116.7892,2549.07468, 0,-1,0,-23.822233,-116.7892,2070.854758, 0,-1,0,-16.409017,-116.7892,2074.817194, 0,-1,0,-93.431364,-116.7892,2549.07468, 0,-1,0,-16.409017,-116.7892,2074.817194, 0,-1,0,-8.365211,-116.7892,2077.257246, 0,-1,0,-93.431364,-116.7892,2549.07468, 0,-1,0,-8.365211,-116.7892,2077.257246, 0,-1,0,0.000066,-116.7892,2078.081145, 0,-1,0,-93.431364,-116.7892,2549.07468, 0,-1,0,0.000066,-116.7892,2078.081145, 0,-1,0,-39.615003,-116.7892,2409.402612, 0,-1,0,-39.615003,-116.7892,2409.402612, 0,-1,0,0.000066,-116.7892,2078.081145, 0,-1,0,-35.652558,-116.7892,2401.9894, 0,-1,0,-35.652558,-116.7892,2401.9894, 0,-1,0,0.000066,-116.7892,2078.081145, 0,-1,0,-30.320006,-116.7892,2395.491666, 0,-1,0,-30.320006,-116.7892,2395.491666, 0,-1,0,0.000066,-116.7892,2078.081145, 0,-1,0,-23.822271,-116.7892,2390.159113, 0,-1,0,-23.822271,-116.7892,2390.159113, 0,-1,0,0.000066,-116.7892,2078.081145, 0,-1,0,-16.40906,-116.7892,2386.196669, 0,-1,0,-16.40906,-116.7892,2386.196669, 0,-1,0,0.000066,-116.7892,2078.081145, 0,-1,0,-8.365256,-116.7892,2383.756608, 0,-1,0,-8.365256,-116.7892,2383.756608, 0,-1,0,0.000066,-116.7892,2078.081145, 0,-1,0,0.00002,-116.7892,2382.9327, 0,-1,0,-93.431364,-116.7892,2549.07468, 0,-1,0,-39.615003,-116.7892,2409.402612, 0,-1,0,-42.055064,-116.7892,2417.446415, 0,-1,0,-93.431364,-116.7892,2549.07468, 0,-1,0,-42.055064,-116.7892,2417.446415, 0,-1,0,-42.878972,-116.7892,2425.811691, 0,-1,0,-93.431364,-116.7892,2549.07468, 0,-1,0,-42.878972,-116.7892,2425.811691, 0,-1,0,-42.055064,-116.7892,2434.176967, 0,-1,0,-93.431364,-116.7892,2549.07468, 0,-1,0,-42.055064,-116.7892,2434.176967, 0,-1,0,-39.615003,-116.7892,2442.220771, 0,-1,0,-93.431364,-116.7892,2549.07468, 0,-1,0,-39.615003,-116.7892,2442.220771, 0,-1,0,-35.652558,-116.7892,2449.633982, 0,-1,0,-93.431364,-116.7892,2549.07468, 0,-1,0,-35.652558,-116.7892,2449.633982, 0,-1,0,-30.320006,-116.7892,2456.131717, 0,-1,0,-93.431364,-116.7892,2549.07468, 0,-1,0,-30.320006,-116.7892,2456.131717, 0,-1,0,-23.822271,-116.7892,2461.464269, 0,-1,0,-93.431364,-116.7892,2549.07468, 0,-1,0,-23.822271,-116.7892,2461.464269, 0,-1,0,-16.40906,-116.7892,2465.426714, 0,-1,0,-93.431364,-116.7892,2549.07468, 0,-1,0,-16.40906,-116.7892,2465.426714, 0,-1,0,-8.365256,-116.7892,2467.866775, 0,-1,0,-93.431364,-116.7892,2549.07468, 0,-1,0,-8.365256,-116.7892,2467.866775, 0,-1,0,0.00002,-116.7892,2468.690683, 0,-1,0,-93.431364,-116.7892,2549.07468, 0,-1,0,0.00002,-116.7892,2468.690683, 0,-1,0,93.431356,-116.7892,2549.07468, 0.582553,0,-0.812793,-23.822213,-70.07352,1715.924987, 0.707106,0,-0.707108,-30.319956,-116.7892,1710.592445, 0.707106,0,-0.707108,-30.319956,-70.07352,1710.592445, 0.707106,0,-0.707108,-30.319956,-116.7892,1710.592445, 0.582553,0,-0.812793,-23.822213,-70.07352,1715.924987, 0.527987,0,-0.849253,-23.822213,-116.7892,1715.924987, -0.973856,0,-0.227168,-42.055064,-116.7892,2417.446415, -0.935939,0,-0.352162,-39.615003,-741.88772,2409.402612, -0.986659,0,-0.162803,-42.055064,-741.90215,2417.446415, -0.935939,0,-0.352162,-39.615003,-741.88772,2409.402612, -0.973856,0,-0.227168,-42.055064,-116.7892,2417.446415, -0.910825,0,-0.412792,-39.615003,-116.7892,2409.402612, 0,0,1,-39.361125,-835.428664,2408.92764, 0,0,1,39.361165,-741.420677,2408.92764, 0,0,1,-39.361125,-741.886218,2408.92764, 0,0,1,39.361165,-741.420677,2408.92764, 0,0,1,-39.361125,-835.428664,2408.92764, 0,0,1,39.361165,-835.428664,2408.92764, 0.162803,0,-0.986659,8.365296,-116.7892,2383.756608, 0.032813,0,-0.999462,0.00002,-858.151437,2382.9327, -0.032813,0,-0.999462,0.00002,-116.7892,2382.9327, 0.032813,0,-0.999462,0.00002,-858.151437,2382.9327, 0.162803,0,-0.986659,8.365296,-116.7892,2383.756608, 0.227168,0,-0.973856,8.365296,-857.431241,2383.756608, -0.890977,-0.087754,0.445488,-717.191404,-70.07352,1614.76108, -0.890977,-0.087754,0.445488,-758.547422,-116.7892,1522.846858, -0.890977,-0.087754,0.445488,-712.590311,-116.7892,1614.76108, -0.890977,-0.087754,0.445488,-758.547422,-116.7892,1522.846858, -0.890977,-0.087754,0.445488,-717.191404,-70.07352,1614.76108, -0.890977,-0.087754,0.445488,-763.148515,-70.07352,1522.846858, 0,1,0,-93.431364,-70.07352,1614.76108, 0,1,0,-8.365325,-70.07352,1638.2173, 0,1,0,-0.00005,-70.07352,1637.393379, 0,1,0,-8.365325,-70.07352,1638.2173, 0,1,0,-93.431364,-70.07352,1614.76108, 0,1,0,-16.409125,-70.07352,1640.657374, 0,1,0,-16.409125,-70.07352,1640.657374, 0,1,0,-93.431364,-70.07352,1614.76108, 0,1,0,-23.82233,-70.07352,1644.619831, 0,1,0,-23.82233,-70.07352,1644.619831, 0,1,0,-93.431364,-70.07352,1614.76108, 0,1,0,-30.320055,-70.07352,1649.952394, 0,1,0,-30.320055,-70.07352,1649.952394, 0,1,0,-93.431364,-70.07352,1614.76108, 0,1,0,-35.652597,-70.07352,1656.450137, 0,1,0,-35.652597,-70.07352,1656.450137, 0,1,0,-93.431364,-70.07352,1614.76108, 0,1,0,-39.615029,-70.07352,1663.863355, 0,1,0,-39.615029,-70.07352,1663.863355, 0,1,0,-93.431364,-70.07352,1614.76108, 0,1,0,-42.055077,-70.07352,1671.907163, 0,1,0,-42.055077,-70.07352,1671.907163, 0,1,0,-93.431364,-70.07352,1614.76108, 0,1,0,-42.878972,-70.07352,1680.27244, 0,1,0,-42.878972,-70.07352,1680.27244, 0,1,0,-93.431364,-70.07352,1614.76108, 0,1,0,-93.431364,-70.07352,2549.07468, 0,1,0,-42.878972,-70.07352,1680.27244, 0,1,0,-93.431364,-70.07352,2549.07468, 0,1,0,-42.05505,-70.07352,1688.637715, 0,1,0,-42.05505,-70.07352,1688.637715, 0,1,0,-93.431364,-70.07352,2549.07468, 0,1,0,-39.614976,-70.07352,1696.681514, 0,1,0,-39.614976,-70.07352,1696.681514, 0,1,0,-93.431364,-70.07352,2549.07468, 0,1,0,-35.65252,-70.07352,1704.09472, 0,1,0,-35.65252,-70.07352,1704.09472, 0,1,0,-93.431364,-70.07352,2549.07468, 0,1,0,-30.319956,-70.07352,1710.592445, 0,1,0,-30.319956,-70.07352,1710.592445, 0,1,0,-93.431364,-70.07352,2549.07468, 0,1,0,-23.822213,-70.07352,1715.924987, 0,1,0,-23.822213,-70.07352,1715.924987, 0,1,0,-93.431364,-70.07352,2549.07468, 0,1,0,-16.408995,-70.07352,1719.887419, 0,1,0,-16.408995,-70.07352,1719.887419, 0,1,0,-93.431364,-70.07352,2549.07468, 0,1,0,-42.878972,-70.07352,2035.2022, 0,1,0,-16.408995,-70.07352,1719.887419, 0,1,0,-42.878972,-70.07352,2035.2022, 0,1,0,-42.055073,-70.07352,2026.836923, 0,1,0,-16.408995,-70.07352,1719.887419, 0,1,0,-42.055073,-70.07352,2026.836923, 0,1,0,-8.365188,-70.07352,1722.327467, 0,1,0,-8.365188,-70.07352,1722.327467, 0,1,0,-42.055073,-70.07352,2026.836923, 0,1,0,0.00009,-70.07352,1723.151361, 0,1,0,0.00009,-70.07352,1723.151361, 0,1,0,-42.055073,-70.07352,2026.836923, 0,1,0,-39.615021,-70.07352,2018.793117, 0,1,0,0.00009,-70.07352,1723.151361, 0,1,0,-39.615021,-70.07352,2018.793117, 0,1,0,-35.652584,-70.07352,2011.379901, 0,1,0,0.00009,-70.07352,1723.151361, 0,1,0,-35.652584,-70.07352,2011.379901, 0,1,0,-30.320039,-70.07352,2004.882161, 0,1,0,0.00009,-70.07352,1723.151361, 0,1,0,-30.320039,-70.07352,2004.882161, 0,1,0,-23.82231,-70.07352,1999.549601, 0,1,0,0.00009,-70.07352,1723.151361, 0,1,0,-23.82231,-70.07352,1999.549601, 0,1,0,-16.409103,-70.07352,1995.587149, 0,1,0,0.00009,-70.07352,1723.151361, 0,1,0,-16.409103,-70.07352,1995.587149, 0,1,0,-8.365302,-70.07352,1993.147079, 0,1,0,0.00009,-70.07352,1723.151361, 0,1,0,-8.365302,-70.07352,1993.147079, 0,1,0,-0.000027,-70.07352,1992.323162, 0,1,0,-42.878972,-70.07352,2035.2022, 0,1,0,-93.431364,-70.07352,2549.07468, 0,1,0,-42.055055,-70.07352,2043.567475, 0,1,0,-42.055055,-70.07352,2043.567475, 0,1,0,-93.431364,-70.07352,2549.07468, 0,1,0,-39.614985,-70.07352,2051.611276, 0,1,0,-39.614985,-70.07352,2051.611276, 0,1,0,-93.431364,-70.07352,2549.07468, 0,1,0,-35.652533,-70.07352,2059.024483, 0,1,0,-35.652533,-70.07352,2059.024483, 0,1,0,-93.431364,-70.07352,2549.07468, 0,1,0,-30.319973,-70.07352,2065.522212, 0,1,0,-30.319973,-70.07352,2065.522212, 0,1,0,-93.431364,-70.07352,2549.07468, 0,1,0,-23.822233,-70.07352,2070.854758, 0,1,0,-23.822233,-70.07352,2070.854758, 0,1,0,-93.431364,-70.07352,2549.07468, 0,1,0,-16.409017,-70.07352,2074.817194, 0,1,0,-16.409017,-70.07352,2074.817194, 0,1,0,-93.431364,-70.07352,2549.07468, 0,1,0,-8.365211,-70.07352,2077.257246, 0,1,0,-8.365211,-70.07352,2077.257246, 0,1,0,-93.431364,-70.07352,2549.07468, 0,1,0,0.000066,-70.07352,2078.081145, 0,1,0,0.000066,-70.07352,2078.081145, 0,1,0,-93.431364,-70.07352,2549.07468, 0,1,0,-39.615003,-70.07352,2409.402612, 0,1,0,0.000066,-70.07352,2078.081145, 0,1,0,-39.615003,-70.07352,2409.402612, 0,1,0,-35.652558,-70.07352,2401.9894, 0,1,0,0.000066,-70.07352,2078.081145, 0,1,0,-35.652558,-70.07352,2401.9894, 0,1,0,-30.320006,-70.07352,2395.491666, 0,1,0,0.000066,-70.07352,2078.081145, 0,1,0,-30.320006,-70.07352,2395.491666, 0,1,0,-23.822271,-70.07352,2390.159113, 0,1,0,0.000066,-70.07352,2078.081145, 0,1,0,-23.822271,-70.07352,2390.159113, 0,1,0,-16.40906,-70.07352,2386.196669, 0,1,0,0.000066,-70.07352,2078.081145, 0,1,0,-16.40906,-70.07352,2386.196669, 0,1,0,-8.365256,-70.07352,2383.756608, 0,1,0,0.000066,-70.07352,2078.081145, 0,1,0,-8.365256,-70.07352,2383.756608, 0,1,0,0.00002,-70.07352,2382.9327, 0,1,0,-39.615003,-70.07352,2409.402612, 0,1,0,-93.431364,-70.07352,2549.07468, 0,1,0,-42.055064,-70.07352,2417.446415, 0,1,0,-42.055064,-70.07352,2417.446415, 0,1,0,-93.431364,-70.07352,2549.07468, 0,1,0,-42.878972,-70.07352,2425.811691, 0,1,0,-42.878972,-70.07352,2425.811691, 0,1,0,-93.431364,-70.07352,2549.07468, 0,1,0,-42.055064,-70.07352,2434.176967, 0,1,0,-42.055064,-70.07352,2434.176967, 0,1,0,-93.431364,-70.07352,2549.07468, 0,1,0,-39.615003,-70.07352,2442.220771, 0,1,0,-39.615003,-70.07352,2442.220771, 0,1,0,-93.431364,-70.07352,2549.07468, 0,1,0,-35.652558,-70.07352,2449.633982, 0,1,0,-35.652558,-70.07352,2449.633982, 0,1,0,-93.431364,-70.07352,2549.07468, 0,1,0,-30.320006,-70.07352,2456.131717, 0,1,0,-30.320006,-70.07352,2456.131717, 0,1,0,-93.431364,-70.07352,2549.07468, 0,1,0,-23.822271,-70.07352,2461.464269, 0,1,0,-23.822271,-70.07352,2461.464269, 0,1,0,-93.431364,-70.07352,2549.07468, 0,1,0,-16.40906,-70.07352,2465.426714, 0,1,0,-16.40906,-70.07352,2465.426714, 0,1,0,-93.431364,-70.07352,2549.07468, 0,1,0,-8.365256,-70.07352,2467.866775, 0,1,0,-8.365256,-70.07352,2467.866775, 0,1,0,-93.431364,-70.07352,2549.07468, 0,1,0,0.00002,-70.07352,2468.690683, 0,1,0,-717.191404,-70.07352,1614.76108, 0,1,0,763.148515,-70.07352,1522.846858, 0,1,0,-763.148515,-70.07352,1522.846858, 0,1,0,763.148515,-70.07352,1522.846858, 0,1,0,-717.191404,-70.07352,1614.76108, 0,1,0,717.537999,-70.07352,1614.067891, 0,1,0,717.537999,-70.07352,1614.067891, 0,1,0,-717.191404,-70.07352,1614.76108, 0,1,0,93.432274,-70.07352,1614.761079, 0,1,0,93.432274,-70.07352,1614.761079, 0,1,0,-717.191404,-70.07352,1614.76108, 0,1,0,-93.431364,-70.07352,1614.76108, 0,1,0,93.432274,-70.07352,1614.761079, 0,1,0,-93.431364,-70.07352,1614.76108, 0,1,0,8.365227,-70.07352,1638.217273, 0,1,0,93.432274,-70.07352,1614.761079, 0,1,0,8.365227,-70.07352,1638.217273, 0,1,0,16.409035,-70.07352,1640.657321, 0,1,0,93.432274,-70.07352,1614.761079, 0,1,0,16.409035,-70.07352,1640.657321, 0,1,0,23.822253,-70.07352,1644.619753, 0,1,0,93.432274,-70.07352,1614.761079, 0,1,0,23.822253,-70.07352,1644.619753, 0,1,0,30.319996,-70.07352,1649.952295, 0,1,0,93.432274,-70.07352,1614.761079, 0,1,0,30.319996,-70.07352,1649.952295, 0,1,0,35.652559,-70.07352,1656.450021, 0,1,0,93.432274,-70.07352,1614.761079, 0,1,0,35.652559,-70.07352,1656.450021, 0,1,0,39.615015,-70.07352,1663.863226, 0,1,0,93.432274,-70.07352,1614.761079, 0,1,0,39.615015,-70.07352,1663.863226, 0,1,0,42.05509,-70.07352,1671.907025, 0,1,0,93.432274,-70.07352,1614.761079, 0,1,0,42.05509,-70.07352,1671.907025, 0,1,0,42.879011,-70.07352,1680.2723, 0,1,0,93.432274,-70.07352,1614.761079, 0,1,0,42.879011,-70.07352,1680.2723, 0,1,0,93.431356,-70.07352,2549.07468, 0,1,0,8.365227,-70.07352,1638.217273, 0,1,0,-93.431364,-70.07352,1614.76108, 0,1,0,-0.00005,-70.07352,1637.393379, 0,1,0,93.431356,-70.07352,2549.07468, 0,1,0,42.879011,-70.07352,1680.2723, 0,1,0,42.055117,-70.07352,1688.637578, 0,1,0,93.431356,-70.07352,2549.07468, 0,1,0,42.055117,-70.07352,1688.637578, 0,1,0,39.615069,-70.07352,1696.681385, 0,1,0,93.431356,-70.07352,2549.07468, 0,1,0,39.615069,-70.07352,1696.681385, 0,1,0,35.652637,-70.07352,1704.094603, 0,1,0,93.431356,-70.07352,2549.07468, 0,1,0,35.652637,-70.07352,1704.094603, 0,1,0,30.320095,-70.07352,1710.592346, 0,1,0,93.431356,-70.07352,2549.07468, 0,1,0,30.320095,-70.07352,1710.592346, 0,1,0,23.822369,-70.07352,1715.924909, 0,1,0,93.431356,-70.07352,2549.07468, 0,1,0,23.822369,-70.07352,1715.924909, 0,1,0,16.409164,-70.07352,1719.887366, 0,1,0,93.431356,-70.07352,2549.07468, 0,1,0,16.409164,-70.07352,1719.887366, 0,1,0,42.879011,-70.07352,2035.202107, 0,1,0,42.879011,-70.07352,2035.202107, 0,1,0,16.409164,-70.07352,1719.887366, 0,1,0,42.055094,-70.07352,2026.836831, 0,1,0,42.055094,-70.07352,2026.836831, 0,1,0,16.409164,-70.07352,1719.887366, 0,1,0,8.365365,-70.07352,1722.32744, 0,1,0,42.055094,-70.07352,2026.836831, 0,1,0,8.365365,-70.07352,1722.32744, 0,1,0,0.00009,-70.07352,1723.151361, 0,1,0,42.055094,-70.07352,2026.836831, 0,1,0,0.00009,-70.07352,1723.151361, 0,1,0,39.615024,-70.07352,2018.793031, 0,1,0,39.615024,-70.07352,2018.793031, 0,1,0,0.00009,-70.07352,1723.151361, 0,1,0,35.652572,-70.07352,2011.379823, 0,1,0,35.652572,-70.07352,2011.379823, 0,1,0,0.00009,-70.07352,1723.151361, 0,1,0,30.320012,-70.07352,2004.882095, 0,1,0,30.320012,-70.07352,2004.882095, 0,1,0,0.00009,-70.07352,1723.151361, 0,1,0,23.822272,-70.07352,1999.549549, 0,1,0,23.822272,-70.07352,1999.549549, 0,1,0,0.00009,-70.07352,1723.151361, 0,1,0,16.409056,-70.07352,1995.587113, 0,1,0,16.409056,-70.07352,1995.587113, 0,1,0,0.00009,-70.07352,1723.151361, 0,1,0,8.36525,-70.07352,1993.147061, 0,1,0,8.36525,-70.07352,1993.147061, 0,1,0,0.00009,-70.07352,1723.151361, 0,1,0,-0.000027,-70.07352,1992.323162, 0,1,0,93.431356,-70.07352,2549.07468, 0,1,0,42.879011,-70.07352,2035.202107, 0,1,0,42.055112,-70.07352,2043.567384, 0,1,0,93.431356,-70.07352,2549.07468, 0,1,0,42.055112,-70.07352,2043.567384, 0,1,0,39.61506,-70.07352,2051.61119, 0,1,0,93.431356,-70.07352,2549.07468, 0,1,0,39.61506,-70.07352,2051.61119, 0,1,0,35.652624,-70.07352,2059.024406, 0,1,0,93.431356,-70.07352,2549.07468, 0,1,0,35.652624,-70.07352,2059.024406, 0,1,0,30.320078,-70.07352,2065.522146, 0,1,0,93.431356,-70.07352,2549.07468, 0,1,0,30.320078,-70.07352,2065.522146, 0,1,0,23.82235,-70.07352,2070.854706, 0,1,0,93.431356,-70.07352,2549.07468, 0,1,0,23.82235,-70.07352,2070.854706, 0,1,0,16.409142,-70.07352,2074.817158, 0,1,0,93.431356,-70.07352,2549.07468, 0,1,0,16.409142,-70.07352,2074.817158, 0,1,0,8.365342,-70.07352,2077.257228, 0,1,0,93.431356,-70.07352,2549.07468, 0,1,0,8.365342,-70.07352,2077.257228, 0,1,0,0.000066,-70.07352,2078.081145, 0,1,0,93.431356,-70.07352,2549.07468, 0,1,0,0.000066,-70.07352,2078.081145, 0,1,0,39.615042,-70.07352,2409.402612, 0,1,0,39.615042,-70.07352,2409.402612, 0,1,0,0.000066,-70.07352,2078.081145, 0,1,0,35.652598,-70.07352,2401.9894, 0,1,0,35.652598,-70.07352,2401.9894, 0,1,0,0.000066,-70.07352,2078.081145, 0,1,0,30.320045,-70.07352,2395.491666, 0,1,0,30.320045,-70.07352,2395.491666, 0,1,0,0.000066,-70.07352,2078.081145, 0,1,0,23.822311,-70.07352,2390.159113, 0,1,0,23.822311,-70.07352,2390.159113, 0,1,0,0.000066,-70.07352,2078.081145, 0,1,0,16.409099,-70.07352,2386.196669, 0,1,0,16.409099,-70.07352,2386.196669, 0,1,0,0.000066,-70.07352,2078.081145, 0,1,0,8.365296,-70.07352,2383.756608, 0,1,0,8.365296,-70.07352,2383.756608, 0,1,0,0.000066,-70.07352,2078.081145, 0,1,0,0.00002,-70.07352,2382.9327, 0,1,0,93.431356,-70.07352,2549.07468, 0,1,0,39.615042,-70.07352,2409.402612, 0,1,0,42.055103,-70.07352,2417.446415, 0,1,0,93.431356,-70.07352,2549.07468, 0,1,0,42.055103,-70.07352,2417.446415, 0,1,0,42.879011,-70.07352,2425.811691, 0,1,0,93.431356,-70.07352,2549.07468, 0,1,0,42.879011,-70.07352,2425.811691, 0,1,0,42.055103,-70.07352,2434.176967, 0,1,0,93.431356,-70.07352,2549.07468, 0,1,0,42.055103,-70.07352,2434.176967, 0,1,0,39.615042,-70.07352,2442.220771, 0,1,0,93.431356,-70.07352,2549.07468, 0,1,0,39.615042,-70.07352,2442.220771, 0,1,0,35.652598,-70.07352,2449.633982, 0,1,0,93.431356,-70.07352,2549.07468, 0,1,0,35.652598,-70.07352,2449.633982, 0,1,0,30.320045,-70.07352,2456.131717, 0,1,0,93.431356,-70.07352,2549.07468, 0,1,0,30.320045,-70.07352,2456.131717, 0,1,0,23.822311,-70.07352,2461.464269, 0,1,0,93.431356,-70.07352,2549.07468, 0,1,0,23.822311,-70.07352,2461.464269, 0,1,0,16.409099,-70.07352,2465.426714, 0,1,0,93.431356,-70.07352,2549.07468, 0,1,0,16.409099,-70.07352,2465.426714, 0,1,0,8.365296,-70.07352,2467.866775, 0,1,0,93.431356,-70.07352,2549.07468, 0,1,0,8.365296,-70.07352,2467.866775, 0,1,0,0.00002,-70.07352,2468.690683, 0,1,0,93.431356,-70.07352,2549.07468, 0,1,0,0.00002,-70.07352,2468.690683, 0,1,0,-93.431364,-70.07352,2549.07468, 0.890977,-0.087754,0.445488,763.148515,-70.07352,1522.846858, 0.890977,-0.087754,0.445488,712.934349,-116.7892,1614.073004, 0.890977,-0.087754,0.445488,758.547422,-116.7892,1522.846858, 0.890977,-0.087754,0.445488,712.934349,-116.7892,1614.073004, 0.890977,-0.087754,0.445488,763.148515,-70.07352,1522.846858, 0.890977,-0.087754,0.445488,717.537999,-70.07352,1614.067891, -1,0,0,-42.878972,-116.7892,2425.811691, -0.986659,0,-0.162803,-42.055064,-741.90215,2417.446415, -1,0,0,-42.878972,-741.907022,2425.811691, -0.986659,0,-0.162803,-42.055064,-741.90215,2417.446415, -1,0,0,-42.878972,-116.7892,2425.811691, -0.973856,0,-0.227168,-42.055064,-116.7892,2417.446415, -0.352162,-0,0.935939,-16.40906,-741.750486,2465.426714, -0.19509,-0,0.980785,-8.365256,-116.7892,2467.866775, -0.412792,-0,0.910825,-16.40906,-116.7892,2465.426714, -0.19509,-0,0.980785,-8.365256,-116.7892,2467.866775, -0.352162,-0,0.935939,-16.40906,-741.750486,2465.426714, -0.19509,0,0.980785,-8.365256,-741.702917,2467.866775, 0,0,-1,763.148515,-70.07352,1522.846858, 0,0,-1,-758.547422,-116.7892,1522.846858, 0,0,-1,-763.148515,-70.07352,1522.846858, 0,0,-1,-758.547422,-116.7892,1522.846858, 0,0,-1,763.148515,-70.07352,1522.846858, 0,0,-1,758.547422,-116.7892,1522.846858, -0.582554,-0,-0.812792,-23.822271,-116.7892,2390.159113, -0.683524,-0,-0.729928,-30.320006,-847.173358,2395.491666, -0.729928,0,-0.683524,-30.320006,-116.7892,2395.491666, -0.683524,-0,-0.729928,-30.320006,-847.173358,2395.491666, -0.582554,-0,-0.812792,-23.822271,-116.7892,2390.159113, -0.527988,-0,-0.849252,-23.822271,-851.834664,2390.159113, 0.862796,0,-0.505553,35.652598,-116.7892,2401.9894, 0.881921,-0,-0.471397,39.361165,-835.428664,2408.92764, 0.812792,0,-0.582554,35.652598,-841.493539,2401.9894, 0.881921,-0,-0.471397,39.361165,-835.428664,2408.92764, 0.862796,0,-0.505553,35.652598,-116.7892,2401.9894, 0.881921,0,-0.471397,39.361165,-741.420677,2408.92764, 0.881921,0,-0.471397,39.361165,-741.420677,2408.92764, 0.862796,0,-0.505553,35.652598,-116.7892,2401.9894, 0.910825,0,-0.412792,39.615042,-741.419175,2409.402612, 0.910825,0,-0.412792,39.615042,-741.419175,2409.402612, 0.862796,0,-0.505553,35.652598,-116.7892,2401.9894, 0.935939,0,-0.352162,39.615042,-116.7892,2409.402612, -0.412792,-0,-0.910825,-16.40906,-116.7892,2386.196669, -0.527988,-0,-0.849252,-23.822271,-851.834664,2390.159113, -0.582554,-0,-0.812792,-23.822271,-116.7892,2390.159113, -0.527988,-0,-0.849252,-23.822271,-851.834664,2390.159113, -0.412792,-0,-0.910825,-16.40906,-116.7892,2386.196669, -0.352162,-0,-0.935939,-16.40906,-855.298327,2386.196669, 0.001111,-0,0.999999,712.934349,-116.7892,1614.073004, 0.001111,-0,0.999999,93.432274,-70.07352,1614.761079, 0.001111,0,0.999999,93.432274,-116.7892,1614.761079, 0.001111,-0,0.999999,93.432274,-70.07352,1614.761079, 0.001111,-0,0.999999,712.934349,-116.7892,1614.073004, 0.001111,-0,0.999999,717.537999,-70.07352,1614.067891, 0.812792,0,0.582554,35.652598,-741.442608,2449.633982, 0.729928,0,0.683524,30.320045,-116.7892,2456.131717, 0.683524,-0,0.729928,30.320045,-741.474143,2456.131717, 0.729928,0,0.683524,30.320045,-116.7892,2456.131717, 0.812792,0,0.582554,35.652598,-741.442608,2449.633982, 0.849252,0,0.527988,35.652598,-116.7892,2449.633982, -0.52799,0,-0.849251,23.822369,-70.07352,1715.924909, -0.412794,0,-0.910824,16.409164,-116.7892,1719.887366, -0.352164,0,-0.935938,16.409164,-70.07352,1719.887366, -0.412794,0,-0.910824,16.409164,-116.7892,1719.887366, -0.52799,0,-0.849251,23.822369,-70.07352,1715.924909, -0.582555,0,-0.812791,23.822369,-116.7892,1715.924909, -0.910824,0,0.412794,39.615015,-70.07352,1663.863226, -0.849251,0,0.52799,35.652559,-116.7892,1656.450021, -0.935938,0,0.352164,39.615015,-116.7892,1663.863226, -0.849251,0,0.52799,35.652559,-116.7892,1656.450021, -0.910824,0,0.412794,39.615015,-70.07352,1663.863226, -0.812791,0,0.582555,35.652559,-70.07352,1656.450021, -0.352164,0,-0.935938,16.409164,-70.07352,1719.887366, -0.227169,0,-0.973855,8.365365,-116.7892,1722.32744, -0.162805,0,-0.986658,8.365365,-70.07352,1722.32744, -0.227169,0,-0.973855,8.365365,-116.7892,1722.32744, -0.352164,0,-0.935938,16.409164,-70.07352,1719.887366, -0.412794,0,-0.910824,16.409164,-116.7892,1719.887366, 0.93594,0,0.352161,-39.615029,-70.07352,1663.863355, 0.973856,0,0.227166,-42.055077,-116.7892,1671.907163, 0.910826,0,0.412791,-39.615029,-116.7892,1663.863355, 0.973856,0,0.227166,-42.055077,-116.7892,1671.907163, 0.93594,0,0.352161,-39.615029,-70.07352,1663.863355, 0.986659,0,0.162801,-42.055077,-70.07352,1671.907163, -0.973856,0,-0.227168,-42.055064,0,2417.446415, -0.935939,0,-0.352162,-39.615003,-70.07352,2409.402612, -0.986659,0,-0.162803,-42.055064,-70.07352,2417.446415, -0.935939,0,-0.352162,-39.615003,-70.07352,2409.402612, -0.973856,0,-0.227168,-42.055064,0,2417.446415, -0.910825,0,-0.412792,-39.615003,0,2409.402612, -0.999462,0,-0.032813,-42.878972,0,2425.811691, -0.986659,0,-0.162803,-42.055064,-70.07352,2417.446415, -0.999462,0,0.032813,-42.878972,-70.07352,2425.811691, -0.986659,0,-0.162803,-42.055064,-70.07352,2417.446415, -0.999462,0,-0.032813,-42.878972,0,2425.811691, -0.973856,0,-0.227168,-42.055064,0,2417.446415, -0.412792,0,-0.910825,-16.40906,0,2386.196669, -0.527988,0,-0.849252,-23.822271,-70.07352,2390.159113, -0.582554,0,-0.812792,-23.822271,0,2390.159113, -0.527988,0,-0.849252,-23.822271,-70.07352,2390.159113, -0.412792,0,-0.910825,-16.40906,0,2386.196669, -0.352162,0,-0.935939,-16.40906,-70.07352,2386.196669, 0.352162,0,-0.935939,16.409099,0,2386.196669, 0.227168,0,-0.973856,8.365296,-70.07352,2383.756608, 0.162803,0,-0.986659,8.365296,0,2383.756608, 0.227168,0,-0.973856,8.365296,-70.07352,2383.756608, 0.352162,0,-0.935939,16.409099,0,2386.196669, 0.412792,0,-0.910825,16.409099,-70.07352,2386.196669, 0.527988,0,0.849252,23.822311,-70.07352,2461.464269, 0.412792,0,0.910825,16.409099,0,2465.426714, 0.352162,0,0.935939,16.409099,-70.07352,2465.426714, 0.412792,0,0.910825,16.409099,0,2465.426714, 0.527988,0,0.849252,23.822311,-70.07352,2461.464269, 0.582554,0,0.812792,23.822311,0,2461.464269, 0.582555,0,0.812791,-23.82233,-116.7892,1644.619831, 0.707108,0,0.707106,-30.320055,-70.07352,1649.952394, 0.707108,0,0.707106,-30.320055,-116.7892,1649.952394, 0.707108,0,0.707106,-30.320055,-70.07352,1649.952394, 0.582555,0,0.812791,-23.82233,-116.7892,1644.619831, 0.52799,0,0.849251,-23.82233,-70.07352,1644.619831, 0.812791,0,-0.582555,-35.65252,-70.07352,1704.09472, 0.707106,0,-0.707108,-30.319956,-116.7892,1710.592445, 0.849251,0,-0.52799,-35.65252,-116.7892,1704.09472, 0.707106,0,-0.707108,-30.319956,-116.7892,1710.592445, 0.812791,0,-0.582555,-35.65252,-70.07352,1704.09472, 0.707106,0,-0.707108,-30.319956,-70.07352,1710.592445, 0.227166,0,-0.973856,-8.365188,-70.07352,1722.327467, 0.352161,0,-0.93594,-16.408995,-116.7892,1719.887419, 0.412791,0,-0.910826,-16.408995,-70.07352,1719.887419, 0.352161,0,-0.93594,-16.408995,-116.7892,1719.887419, 0.227166,0,-0.973856,-8.365188,-70.07352,1722.327467, 0.162801,0,-0.986659,-8.365188,-116.7892,1722.327467, -0.527987,0,0.849253,23.822253,-116.7892,1644.619753, -0.412791,0,0.910826,16.409035,-70.07352,1640.657321, -0.352161,0,0.93594,16.409035,-116.7892,1640.657321, -0.412791,0,0.910826,16.409035,-70.07352,1640.657321, -0.527987,0,0.849253,23.822253,-116.7892,1644.619753, -0.582553,0,0.812793,23.822253,-70.07352,1644.619753, 0.986659,0,0.162801,-42.055077,-70.07352,1671.907163, 0.999462,0,0.032811,-42.878972,-116.7892,1680.27244, 0.973856,0,0.227166,-42.055077,-116.7892,1671.907163, 0.999462,0,0.032811,-42.878972,-116.7892,1680.27244, 0.986659,0,0.162801,-42.055077,-70.07352,1671.907163, 0.999461,0,-0.032814,-42.878972,-70.07352,1680.27244, -0.849253,0,-0.527987,35.652637,-70.07352,1704.094603, -0.910826,0,-0.412791,39.615069,-116.7892,1696.681385, -0.812793,0,-0.582553,35.652637,-116.7892,1704.094603, -0.910826,0,-0.412791,39.615069,-116.7892,1696.681385, -0.849253,0,-0.527987,35.652637,-70.07352,1704.094603, -0.93594,0,-0.352161,39.615069,-70.07352,1696.681385, -0.986659,0,-0.162801,42.055117,-70.07352,1688.637578, -0.999462,0,-0.032811,42.879011,-116.7892,1680.2723, -0.973856,0,-0.227166,42.055117,-116.7892,1688.637578, -0.999462,0,-0.032811,42.879011,-116.7892,1680.2723, -0.986659,0,-0.162801,42.055117,-70.07352,1688.637578, -0.999461,0,0.032814,42.879011,-70.07352,1680.2723, -0.986659,0,0.162803,-42.055064,-741.90215,2434.176967, -1,0,0,-42.878972,-116.7892,2425.811691, -1,0,0,-42.878972,-741.907022,2425.811691, -1,0,0,-42.878972,-116.7892,2425.811691, -0.986659,0,0.162803,-42.055064,-741.90215,2434.176967, -0.973856,-0,0.227168,-42.055064,-116.7892,2434.176967, 1,0,-0,42.879011,-741.399873,2425.811691, 0.986659,0,0.162803,42.055103,-116.7892,2434.176967, 0.973856,0,0.227168,42.055103,-741.404745,2434.176967, 0.986659,0,0.162803,42.055103,-116.7892,2434.176967, 1,0,-0,42.879011,-741.399873,2425.811691, 1,0,-0,42.879011,-116.7892,2425.811691, -0,0,1,0.00002,-741.653448,2468.690683, -0.19509,-0,0.980785,-8.365256,-116.7892,2467.866775, -0.19509,0,0.980785,-8.365256,-741.702917,2467.866775, -0.19509,-0,0.980785,-8.365256,-116.7892,2467.866775, -0,0,1,0.00002,-741.653448,2468.690683, -0,-0,1,0.00002,-116.7892,2468.690683, -0.527988,-0,0.849252,-23.822271,-741.794326,2461.464269, -0.412792,-0,0.910825,-16.40906,-116.7892,2465.426714, -0.582554,-0,0.812792,-23.822271,-116.7892,2461.464269, -0.412792,-0,0.910825,-16.40906,-116.7892,2465.426714, -0.527988,-0,0.849252,-23.822271,-741.794326,2461.464269, -0.352162,-0,0.935939,-16.40906,-741.750486,2465.426714, -0.582554,0,-0.812792,-23.822271,0,2390.159113, -0.707107,0,-0.707107,-30.320006,-70.07352,2395.491666, -0.707107,0,-0.707107,-30.320006,0,2395.491666, -0.707107,0,-0.707107,-30.320006,-70.07352,2395.491666, -0.582554,0,-0.812792,-23.822271,0,2390.159113, -0.527988,0,-0.849252,-23.822271,-70.07352,2390.159113, -0.986659,0,0.162803,-42.055064,0,2434.176967, -0.999462,0,0.032813,-42.878972,-70.07352,2425.811691, -0.973856,0,0.227168,-42.055064,-70.07352,2434.176967, -0.999462,0,0.032813,-42.878972,-70.07352,2425.811691, -0.986659,0,0.162803,-42.055064,0,2434.176967, -0.999462,0,-0.032813,-42.878972,0,2425.811691, 0.986659,0,-0.162803,42.055103,0,2417.446415, 0.999462,0,-0.032813,42.879011,-70.07352,2425.811691, 0.973856,0,-0.227168,42.055103,-70.07352,2417.446415, 0.999462,0,-0.032813,42.879011,-70.07352,2425.811691, 0.986659,0,-0.162803,42.055103,0,2417.446415, 0.999462,0,0.032813,42.879011,0,2425.811691, -0.032813,0,-0.999462,0.00002,0,2382.9327, -0.162803,0,-0.986659,-8.365256,-70.07352,2383.756608, -0.227168,0,-0.973856,-8.365256,0,2383.756608, -0.162803,0,-0.986659,-8.365256,-70.07352,2383.756608, -0.032813,0,-0.999462,0.00002,0,2382.9327, 0.032813,0,-0.999462,0.00002,-70.07352,2382.9327, -0.582554,0,0.812792,-23.822271,-70.07352,2461.464269, -0.707107,0,0.707107,-30.320006,0,2456.131717, -0.707107,0,0.707107,-30.320006,-70.07352,2456.131717, -0.707107,0,0.707107,-30.320006,0,2456.131717, -0.582554,0,0.812792,-23.822271,-70.07352,2461.464269, -0.527988,0,0.849252,-23.822271,0,2461.464269, 0.352162,0,0.935939,16.409099,-70.07352,2465.426714, 0.227168,0,0.973856,8.365296,0,2467.866775, 0.162803,0,0.986659,8.365296,-70.07352,2467.866775, 0.227168,0,0.973856,8.365296,0,2467.866775, 0.352162,0,0.935939,16.409099,-70.07352,2465.426714, 0.412792,0,0.910825,16.409099,0,2465.426714, -0.849252,-0,0.527988,-35.652558,-741.864287,2449.633982, -0.910825,-0,0.412792,-39.615003,-116.7892,2442.220771, -0.935939,-0,0.352162,-39.615003,-741.88772,2442.220771, -0.910825,-0,0.412792,-39.615003,-116.7892,2442.220771, -0.849252,-0,0.527988,-35.652558,-741.864287,2449.633982, -0.812792,-0,0.582554,-35.652558,-116.7892,2449.633982, -0.999461,0,0.032814,42.879011,-70.07352,2035.202107, -0.986658,0,0.162804,42.055094,-116.7892,2026.836831, -0.999462,0,-0.032812,42.879011,-116.7892,2035.202107, -0.986658,0,0.162804,42.055094,-116.7892,2026.836831, -0.999461,0,0.032814,42.879011,-70.07352,2035.202107, -0.973855,0,0.227169,42.055094,-70.07352,2026.836831, 0.986659,-0,-0.162803,42.055103,-116.7892,2417.446415, 1,0,-0,42.879011,-741.399873,2425.811691, 0.973856,0,-0.227168,42.055103,-741.404745,2417.446415, 1,0,-0,42.879011,-741.399873,2425.811691, 0.986659,-0,-0.162803,42.055103,-116.7892,2417.446415, 1,0,-0,42.879011,-116.7892,2425.811691, 0.582555,0,0.812791,-23.82231,-116.7892,1999.549601, 0.707108,0,0.707106,-30.320039,-70.07352,2004.882161, 0.707108,0,0.707106,-30.320039,-116.7892,2004.882161, 0.707108,0,0.707106,-30.320039,-70.07352,2004.882161, 0.582555,0,0.812791,-23.82231,-116.7892,1999.549601, 0.527989,0,0.849251,-23.82231,-70.07352,1999.549601, 0.707107,0,-0.707107,30.320045,0,2395.491666, 0.582554,0,-0.812792,23.822311,-70.07352,2390.159113, 0.527988,0,-0.849252,23.822311,0,2390.159113, 0.582554,0,-0.812792,23.822311,-70.07352,2390.159113, 0.707107,0,-0.707107,30.320045,0,2395.491666, 0.707107,0,-0.707107,30.320045,-70.07352,2395.491666, 0.849252,0,-0.527988,35.652598,0,2401.9894, 0.910825,0,-0.412792,39.615042,-70.07352,2409.402612, 0.812792,0,-0.582554,35.652598,-70.07352,2401.9894, 0.910825,0,-0.412792,39.615042,-70.07352,2409.402612, 0.849252,0,-0.527988,35.652598,0,2401.9894, 0.935939,0,-0.352162,39.615042,0,2409.402612, -0.162804,0,-0.986658,8.365342,-70.07352,2077.257228, -0.032814,0,-0.999461,0.000066,-116.7892,2078.081145, 0.032812,0,-0.999462,0.000066,-70.07352,2078.081145, -0.032814,0,-0.999461,0.000066,-116.7892,2078.081145, -0.162804,0,-0.986658,8.365342,-70.07352,2077.257228, -0.227169,0,-0.973855,8.365342,-116.7892,2077.257228, -0.973855,0,0.227169,42.055094,-70.07352,2026.836831, -0.935939,0,0.352163,39.615024,-116.7892,2018.793031, -0.986658,0,0.162804,42.055094,-116.7892,2026.836831, -0.935939,0,0.352163,39.615024,-116.7892,2018.793031, -0.973855,0,0.227169,42.055094,-70.07352,2026.836831, -0.910825,0,0.412793,39.615024,-70.07352,2018.793031, -0.707108,0,-0.707106,30.320095,-70.07352,1710.592346, -0.582555,0,-0.812791,23.822369,-116.7892,1715.924909, -0.52799,0,-0.849251,23.822369,-70.07352,1715.924909, -0.582555,0,-0.812791,23.822369,-116.7892,1715.924909, -0.707108,0,-0.707106,30.320095,-70.07352,1710.592346, -0.707108,0,-0.707106,30.320095,-116.7892,1710.592346, 0.412793,0,0.910825,-16.409103,-116.7892,1995.587149, 0.527989,0,0.849251,-23.82231,-70.07352,1999.549601, 0.582555,0,0.812791,-23.82231,-116.7892,1999.549601, 0.527989,0,0.849251,-23.82231,-70.07352,1999.549601, 0.412793,0,0.910825,-16.409103,-116.7892,1995.587149, 0.352163,0,0.935939,-16.409103,-70.07352,1995.587149, -0.812792,0,-0.582554,-35.652558,-841.493539,2401.9894, -0.729928,0,-0.683524,-30.320006,-116.7892,2395.491666, -0.683524,-0,-0.729928,-30.320006,-847.173358,2395.491666, -0.729928,0,-0.683524,-30.320006,-116.7892,2395.491666, -0.812792,0,-0.582554,-35.652558,-841.493539,2401.9894, -0.85779,0,-0.514001,-35.652558,-116.7892,2401.9894, 0,0,1,-712.590311,-116.7892,1614.76108, 0,0,1,-93.431364,-70.07352,1614.76108, 0,0,1,-717.191404,-70.07352,1614.76108, 0,0,1,-93.431364,-70.07352,1614.76108, 0,0,1,-712.590311,-116.7892,1614.76108, 0,0,1,-93.431364,-116.7892,1614.76108, 0.227168,0,0.973856,8.365296,-741.603978,2467.866775, 0.382683,-0,0.92388,16.409099,-116.7892,2465.426714, 0.162803,0,0.986659,8.365296,-116.7892,2467.866775, 0.382683,-0,0.92388,16.409099,-116.7892,2465.426714, 0.227168,0,0.973856,8.365296,-741.603978,2467.866775, 0.382683,0,0.92388,16.409099,-741.556409,2465.426714, 0.973855,0,-0.227169,-42.05505,-70.07352,1688.637715, 0.935938,0,-0.352164,-39.614976,-116.7892,1696.681514, 0.986658,0,-0.162805,-42.05505,-116.7892,1688.637715, 0.935938,0,-0.352164,-39.614976,-116.7892,1696.681514, 0.973855,0,-0.227169,-42.05505,-70.07352,1688.637715, 0.910824,0,-0.412794,-39.614976,-70.07352,1696.681514, -0.973855,0,0.227169,42.05509,-70.07352,1671.907025, -0.935938,0,0.352164,39.615015,-116.7892,1663.863226, -0.986658,0,0.162805,42.05509,-116.7892,1671.907025, -0.935938,0,0.352164,39.615015,-116.7892,1663.863226, -0.973855,0,0.227169,42.05509,-70.07352,1671.907025, -0.910824,0,0.412794,39.615015,-70.07352,1663.863226, -0.849252,0,0.527988,-35.652558,0,2449.633982, -0.910825,0,0.412792,-39.615003,-70.07352,2442.220771, -0.812792,0,0.582554,-35.652558,-70.07352,2449.633982, -0.910825,0,0.412792,-39.615003,-70.07352,2442.220771, -0.849252,0,0.527988,-35.652558,0,2449.633982, -0.935939,0,0.352162,-39.615003,0,2442.220771, -1,0,0,-93.431364,-70.07352,2549.07468, -1,0,0,-93.431364,-116.7892,1614.76108, -1,0,0,-93.431364,-116.7892,2549.07468, -1,0,0,-93.431364,-116.7892,1614.76108, -1,0,0,-93.431364,-70.07352,2549.07468, -1,0,0,-93.431364,-70.07352,1614.76108, 0.032812,0,-0.999462,0.000066,-70.07352,2078.081145, 0.162802,0,-0.986659,-8.365211,-116.7892,2077.257246, 0.227167,0,-0.973856,-8.365211,-70.07352,2077.257246, 0.162802,0,-0.986659,-8.365211,-116.7892,2077.257246, 0.032812,0,-0.999462,0.000066,-70.07352,2078.081145, -0.032814,0,-0.999461,0.000066,-116.7892,2078.081145, -0.707108,0,-0.707106,30.320078,-70.07352,2065.522146, -0.582555,0,-0.812791,23.82235,-116.7892,2070.854706, -0.527989,0,-0.849251,23.82235,-70.07352,2070.854706, -0.582555,0,-0.812791,23.82235,-116.7892,2070.854706, -0.707108,0,-0.707106,30.320078,-70.07352,2065.522146, -0.707108,0,-0.707106,30.320078,-116.7892,2065.522146, 0.412791,0,-0.910826,-16.409017,-70.07352,2074.817194, 0.527987,0,-0.849252,-23.822233,-116.7892,2070.854758, 0.582553,0,-0.812793,-23.822233,-70.07352,2070.854758, 0.527987,0,-0.849252,-23.822233,-116.7892,2070.854758, 0.412791,0,-0.910826,-16.409017,-70.07352,2074.817194, 0.352161,0,-0.935939,-16.409017,-116.7892,2074.817194, -0,0,1,0.00002,-741.653448,2468.690683, 0.162803,0,0.986659,8.365296,-116.7892,2467.866775, -0,-0,1,0.00002,-116.7892,2468.690683, 0.162803,0,0.986659,8.365296,-116.7892,2467.866775, -0,0,1,0.00002,-741.653448,2468.690683, 0.227168,0,0.973856,8.365296,-741.603978,2467.866775, -0.227168,0,-0.973856,-8.365256,0,2383.756608, -0.352162,0,-0.935939,-16.40906,-70.07352,2386.196669, -0.412792,0,-0.910825,-16.40906,0,2386.196669, -0.352162,0,-0.935939,-16.40906,-70.07352,2386.196669, -0.227168,0,-0.973856,-8.365256,0,2383.756608, -0.162803,0,-0.986659,-8.365256,-70.07352,2383.756608, 0.707107,0,-0.707107,30.320045,-116.7892,2395.491666, 0.812792,0,-0.582554,35.652598,-841.493539,2401.9894, 0.707107,0,-0.707107,30.320045,-847.173358,2395.491666, 0.812792,0,-0.582554,35.652598,-841.493539,2401.9894, 0.707107,0,-0.707107,30.320045,-116.7892,2395.491666, 0.862796,0,-0.505553,35.652598,-116.7892,2401.9894, -0.812791,0,0.582555,35.652572,-70.07352,2011.379823, -0.707106,0,0.707108,30.320012,-116.7892,2004.882095, -0.849251,0,0.527989,35.652572,-116.7892,2011.379823, -0.707106,0,0.707108,30.320012,-116.7892,2004.882095, -0.812791,0,0.582555,35.652572,-70.07352,2011.379823, -0.707106,0,0.707108,30.320012,-70.07352,2004.882095, 0.412794,0,0.910824,-16.409125,-116.7892,1640.657374, 0.52799,0,0.849251,-23.82233,-70.07352,1644.619831, 0.582555,0,0.812791,-23.82233,-116.7892,1644.619831, 0.52799,0,0.849251,-23.82233,-70.07352,1644.619831, 0.412794,0,0.910824,-16.409125,-116.7892,1640.657374, 0.352164,0,0.935938,-16.409125,-70.07352,1640.657374, 0.812792,0,0.582554,35.652598,0,2449.633982, 0.707107,0,0.707107,30.320045,-70.07352,2456.131717, 0.849252,0,0.527988,35.652598,-70.07352,2449.633982, 0.707107,0,0.707107,30.320045,-70.07352,2456.131717, 0.812792,0,0.582554,35.652598,0,2449.633982, 0.707107,0,0.707107,30.320045,0,2456.131717, 0.032814,0,0.999461,-0.000027,-116.7892,1992.323162, 0.162804,0,0.986658,-8.365302,-70.07352,1993.147079, 0.227169,0,0.973855,-8.365302,-116.7892,1993.147079, 0.162804,0,0.986658,-8.365302,-70.07352,1993.147079, 0.032814,0,0.999461,-0.000027,-116.7892,1992.323162, -0.032812,0,0.999462,-0.000027,-70.07352,1992.323162, -0.986659,0,-0.162802,42.055112,-70.07352,2043.567384, -0.999462,0,-0.032812,42.879011,-116.7892,2035.202107, -0.973856,0,-0.227167,42.055112,-116.7892,2043.567384, -0.999462,0,-0.032812,42.879011,-116.7892,2035.202107, -0.986659,0,-0.162802,42.055112,-70.07352,2043.567384, -0.999461,0,0.032814,42.879011,-70.07352,2035.202107, -0.162805,0,-0.986658,8.365365,-70.07352,1722.32744, -0.032814,0,-0.999461,0.00009,-116.7892,1723.151361, 0.032811,0,-0.999462,0.00009,-70.07352,1723.151361, -0.032814,0,-0.999461,0.00009,-116.7892,1723.151361, -0.162805,0,-0.986658,8.365365,-70.07352,1722.32744, -0.227169,0,-0.973855,8.365365,-116.7892,1722.32744, -0.032813,0,0.999462,0.00002,-70.07352,2468.690683, -0.162803,0,0.986659,-8.365256,0,2467.866775, -0.227168,0,0.973856,-8.365256,-70.07352,2467.866775, -0.162803,0,0.986659,-8.365256,0,2467.866775, -0.032813,0,0.999462,0.00002,-70.07352,2468.690683, 0.032813,0,0.999462,0.00002,0,2468.690683, -0.935939,-0,0.352162,-39.615003,-741.88772,2442.220771, -0.973856,-0,0.227168,-42.055064,-116.7892,2434.176967, -0.986659,0,0.162803,-42.055064,-741.90215,2434.176967, -0.973856,-0,0.227168,-42.055064,-116.7892,2434.176967, -0.935939,-0,0.352162,-39.615003,-741.88772,2442.220771, -0.910825,-0,0.412792,-39.615003,-116.7892,2442.220771, 0.032811,0,-0.999462,0.00009,-70.07352,1723.151361, 0.162801,0,-0.986659,-8.365188,-116.7892,1722.327467, 0.227166,0,-0.973856,-8.365188,-70.07352,1722.327467, 0.162801,0,-0.986659,-8.365188,-116.7892,1722.327467, 0.032811,0,-0.999462,0.00009,-70.07352,1723.151361, -0.032814,0,-0.999461,0.00009,-116.7892,1723.151361, 0.227169,0,0.973855,-8.365325,-116.7892,1638.2173, 0.352164,0,0.935938,-16.409125,-70.07352,1640.657374, 0.412794,0,0.910824,-16.409125,-116.7892,1640.657374, 0.352164,0,0.935938,-16.409125,-70.07352,1640.657374, 0.227169,0,0.973855,-8.365325,-116.7892,1638.2173, 0.162805,0,0.986658,-8.365325,-70.07352,1638.2173, 0,0,1,93.431356,-116.7892,2549.07468, 0,0,1,-93.431364,-70.07352,2549.07468, 0,0,1,-93.431364,-116.7892,2549.07468, 0,0,1,-93.431364,-70.07352,2549.07468, 0,0,1,93.431356,-116.7892,2549.07468, 0,0,1,93.431356,-70.07352,2549.07468, 0.973856,0,0.227168,42.055103,-741.404745,2434.176967, 0.935939,0,0.352162,39.615042,-116.7892,2442.220771, 0.910825,0,0.412792,39.615042,-741.419175,2442.220771, 0.935939,0,0.352162,39.615042,-116.7892,2442.220771, 0.973856,0,0.227168,42.055103,-741.404745,2434.176967, 0.986659,0,0.162803,42.055103,-116.7892,2434.176967, -0.227168,-0,-0.973856,-8.365256,-116.7892,2383.756608, -0.352162,-0,-0.935939,-16.40906,-855.298327,2386.196669, -0.412792,-0,-0.910825,-16.40906,-116.7892,2386.196669, -0.352162,-0,-0.935939,-16.40906,-855.298327,2386.196669, -0.227168,-0,-0.973856,-8.365256,-116.7892,2383.756608, -0.162803,0,-0.986659,-8.365256,-857.431241,2383.756608, -0.352161,0,0.935939,16.409056,-116.7892,1995.587113, -0.227167,0,0.973856,8.36525,-70.07352,1993.147061, -0.162802,0,0.986659,8.36525,-116.7892,1993.147061, -0.227167,0,0.973856,8.36525,-70.07352,1993.147061, -0.352161,0,0.935939,16.409056,-116.7892,1995.587113, -0.412791,0,0.910826,16.409056,-70.07352,1995.587113, -0.999461,0,0.032814,42.879011,-70.07352,1680.2723, -0.986658,0,0.162805,42.05509,-116.7892,1671.907025, -0.999462,0,-0.032811,42.879011,-116.7892,1680.2723, -0.986658,0,0.162805,42.05509,-116.7892,1671.907025, -0.999461,0,0.032814,42.879011,-70.07352,1680.2723, -0.973855,0,0.227169,42.05509,-70.07352,1671.907025, -0.93594,0,-0.352161,39.615069,-70.07352,1696.681385, -0.973856,0,-0.227166,42.055117,-116.7892,1688.637578, -0.910826,0,-0.412791,39.615069,-116.7892,1696.681385, -0.973856,0,-0.227166,42.055117,-116.7892,1688.637578, -0.93594,0,-0.352161,39.615069,-70.07352,1696.681385, -0.986659,0,-0.162801,42.055117,-70.07352,1688.637578, 0.849253,0,0.527987,-35.652597,-70.07352,1656.450137, 0.910826,0,0.412791,-39.615029,-116.7892,1663.863355, 0.812793,0,0.582553,-35.652597,-116.7892,1656.450137, 0.910826,0,0.412791,-39.615029,-116.7892,1663.863355, 0.849253,0,0.527987,-35.652597,-70.07352,1656.450137, 0.93594,0,0.352161,-39.615029,-70.07352,1663.863355, -0.935939,0,-0.352161,39.61506,-70.07352,2051.61119, -0.973856,0,-0.227167,42.055112,-116.7892,2043.567384, -0.910826,0,-0.412791,39.61506,-116.7892,2051.61119, -0.973856,0,-0.227167,42.055112,-116.7892,2043.567384, -0.935939,0,-0.352161,39.61506,-70.07352,2051.61119, -0.986659,0,-0.162802,42.055112,-70.07352,2043.567384, -0,-0.752904,0.658131,8.365296,-857.431241,2383.756608, -0,-0.752904,0.658131,-8.365256,-857.431241,2383.756608, -0,-0.752904,0.658131,0.00002,-858.151437,2382.9327, -0,-0.752904,0.658131,-8.365256,-857.431241,2383.756608, -0,-0.752904,0.658131,8.365296,-857.431241,2383.756608, -0,-0.752904,0.658131,16.409099,-855.298327,2386.196669, -0,-0.752904,0.658131,-8.365256,-857.431241,2383.756608, -0,-0.752904,0.658131,16.409099,-855.298327,2386.196669, -0,-0.752904,0.658131,-16.40906,-855.298327,2386.196669, -0,-0.752904,0.658131,-16.40906,-855.298327,2386.196669, -0,-0.752904,0.658131,16.409099,-855.298327,2386.196669, -0,-0.752904,0.658131,23.822311,-851.834664,2390.159113, -0,-0.752904,0.658131,-16.40906,-855.298327,2386.196669, -0,-0.752904,0.658131,23.822311,-851.834664,2390.159113, 0,-0.752904,0.658131,-23.822271,-851.834664,2390.159113, 0,-0.752904,0.658131,-23.822271,-851.834664,2390.159113, -0,-0.752904,0.658131,23.822311,-851.834664,2390.159113, 0,-0.752904,0.658131,30.320045,-847.173358,2395.491666, 0,-0.752904,0.658131,-23.822271,-851.834664,2390.159113, 0,-0.752904,0.658131,30.320045,-847.173358,2395.491666, -0,-0.752904,0.658131,-30.320006,-847.173358,2395.491666, -0,-0.752904,0.658131,-30.320006,-847.173358,2395.491666, 0,-0.752904,0.658131,30.320045,-847.173358,2395.491666, -0,-0.752904,0.658131,35.652598,-841.493539,2401.9894, -0,-0.752904,0.658131,-30.320006,-847.173358,2395.491666, -0,-0.752904,0.658131,35.652598,-841.493539,2401.9894, -0,-0.752904,0.658131,-35.652558,-841.493539,2401.9894, -0,-0.752904,0.658131,-35.652558,-841.493539,2401.9894, -0,-0.752904,0.658131,35.652598,-841.493539,2401.9894, -0,-0.752904,0.658131,39.361165,-835.428664,2408.92764, -0,-0.752904,0.658131,-35.652558,-841.493539,2401.9894, -0,-0.752904,0.658131,39.361165,-835.428664,2408.92764, 0,-0.752904,0.658131,-39.361125,-835.428664,2408.92764, 0.352162,0,-0.935939,16.409099,-116.7892,2386.196669, 0.227168,0,-0.973856,8.365296,-857.431241,2383.756608, 0.162803,0,-0.986659,8.365296,-116.7892,2383.756608, 0.227168,0,-0.973856,8.365296,-857.431241,2383.756608, 0.352162,0,-0.935939,16.409099,-116.7892,2386.196669, 0.412792,0,-0.910825,16.409099,-855.298327,2386.196669, -0.707107,-0,0.707107,-30.320006,-741.832752,2456.131717, -0.582554,-0,0.812792,-23.822271,-116.7892,2461.464269, -0.707107,-0,0.707107,-30.320006,-116.7892,2456.131717, -0.582554,-0,0.812792,-23.822271,-116.7892,2461.464269, -0.707107,-0,0.707107,-30.320006,-741.832752,2456.131717, -0.527988,-0,0.849252,-23.822271,-741.794326,2461.464269, 1,0,0.000001,93.432274,-70.07352,1614.761079, 1,0,0.000001,93.431356,-116.7892,2549.07468, 1,0,0.000001,93.432274,-116.7892,1614.761079, 1,0,0.000001,93.431356,-116.7892,2549.07468, 1,0,0.000001,93.432274,-70.07352,1614.761079, 1,0,0.000001,93.431356,-70.07352,2549.07468, -0.707107,-0,0.707107,-30.320006,-741.832752,2456.131717, -0.812792,-0,0.582554,-35.652558,-116.7892,2449.633982, -0.849252,-0,0.527988,-35.652558,-741.864287,2449.633982, -0.812792,-0,0.582554,-35.652558,-116.7892,2449.633982, -0.707107,-0,0.707107,-30.320006,-741.832752,2456.131717, -0.707107,-0,0.707107,-30.320006,-116.7892,2456.131717, 0.527988,0,-0.849252,23.822311,-116.7892,2390.159113, 0.412792,0,-0.910825,16.409099,-855.298327,2386.196669, 0.352162,0,-0.935939,16.409099,-116.7892,2386.196669, 0.412792,0,-0.910825,16.409099,-855.298327,2386.196669, 0.527988,0,-0.849252,23.822311,-116.7892,2390.159113, 0.582554,0,-0.812792,23.822311,-851.834664,2390.159113, -0.707108,0,-0.707106,30.320078,-70.07352,2065.522146, -0.812793,0,-0.582553,35.652624,-116.7892,2059.024406, -0.707108,0,-0.707106,30.320078,-116.7892,2065.522146, -0.812793,0,-0.582553,35.652624,-116.7892,2059.024406, -0.707108,0,-0.707106,30.320078,-70.07352,2065.522146, -0.849252,0,-0.527987,35.652624,-70.07352,2059.024406, -0.352161,0,0.93594,16.409035,-116.7892,1640.657321, -0.227166,0,0.973856,8.365227,-70.07352,1638.217273, -0.162801,0,0.986659,8.365227,-116.7892,1638.217273, -0.227166,0,0.973856,8.365227,-70.07352,1638.217273, -0.352161,0,0.93594,16.409035,-116.7892,1640.657321, -0.412791,0,0.910826,16.409035,-70.07352,1640.657321, 0.935939,0,-0.352162,39.615042,0,2409.402612, 0.973856,0,-0.227168,42.055103,-70.07352,2417.446415, 0.910825,0,-0.412792,39.615042,-70.07352,2409.402612, 0.973856,0,-0.227168,42.055103,-70.07352,2417.446415, 0.935939,0,-0.352162,39.615042,0,2409.402612, 0.986659,0,-0.162803,42.055103,0,2417.446415, 0.005914,-0.999983,0,39.361165,-741.420677,2408.92764, 0.005914,-0.999983,0,-39.615003,-741.88772,2409.402612, 0.005914,-0.999983,0,-39.361125,-741.886218,2408.92764, 0.005914,-0.999983,0,-39.615003,-741.88772,2409.402612, 0.005914,-0.999983,0,39.361165,-741.420677,2408.92764, 0.005914,-0.999983,-0,39.615042,-741.419175,2409.402612, 0.005914,-0.999983,0,-39.615003,-741.88772,2409.402612, 0.005914,-0.999983,-0,39.615042,-741.419175,2409.402612, 0.005914,-0.999983,-0,-42.055064,-741.90215,2417.446415, 0.005914,-0.999983,-0,-42.055064,-741.90215,2417.446415, 0.005914,-0.999983,-0,39.615042,-741.419175,2409.402612, 0.005914,-0.999983,0,42.055103,-741.404745,2417.446415, 0.005914,-0.999983,-0,-42.055064,-741.90215,2417.446415, 0.005914,-0.999983,0,42.055103,-741.404745,2417.446415, 0.005914,-0.999983,0,42.879011,-741.399873,2425.811691, 0.005914,-0.999983,-0,-42.055064,-741.90215,2417.446415, 0.005914,-0.999983,0,42.879011,-741.399873,2425.811691, 0.005914,-0.999983,0,-42.878972,-741.907022,2425.811691, 0.005914,-0.999983,0,-42.878972,-741.907022,2425.811691, 0.005914,-0.999983,0,42.879011,-741.399873,2425.811691, 0.005914,-0.999983,-0,42.055103,-741.404745,2434.176967, 0.005914,-0.999983,0,-42.878972,-741.907022,2425.811691, 0.005914,-0.999983,-0,42.055103,-741.404745,2434.176967, 0.005914,-0.999983,-0,-42.055064,-741.90215,2434.176967, 0.005914,-0.999983,-0,-42.055064,-741.90215,2434.176967, 0.005914,-0.999983,-0,42.055103,-741.404745,2434.176967, 0.005914,-0.999983,0,39.615042,-741.419175,2442.220771, 0.005914,-0.999983,-0,-42.055064,-741.90215,2434.176967, 0.005914,-0.999983,0,39.615042,-741.419175,2442.220771, 0.005914,-0.999983,-0,-39.615003,-741.88772,2442.220771, 0.005914,-0.999983,-0,-39.615003,-741.88772,2442.220771, 0.005914,-0.999983,0,39.615042,-741.419175,2442.220771, 0.005914,-0.999983,-0,35.652598,-741.442608,2449.633982, 0.005914,-0.999983,-0,-39.615003,-741.88772,2442.220771, 0.005914,-0.999983,-0,35.652598,-741.442608,2449.633982, 0.005914,-0.999983,0,-35.652558,-741.864287,2449.633982, 0.005914,-0.999983,0,-35.652558,-741.864287,2449.633982, 0.005914,-0.999983,-0,35.652598,-741.442608,2449.633982, 0.005914,-0.999983,0,30.320045,-741.474143,2456.131717, 0.005914,-0.999983,0,-35.652558,-741.864287,2449.633982, 0.005914,-0.999983,0,30.320045,-741.474143,2456.131717, 0.005914,-0.999983,-0,-30.320006,-741.832752,2456.131717, 0.005914,-0.999983,-0,-30.320006,-741.832752,2456.131717, 0.005914,-0.999983,0,30.320045,-741.474143,2456.131717, 0.005914,-0.999983,0,23.822311,-741.512569,2461.464269, 0.005914,-0.999983,-0,-30.320006,-741.832752,2456.131717, 0.005914,-0.999983,0,23.822311,-741.512569,2461.464269, 0.005914,-0.999983,-0,-23.822271,-741.794326,2461.464269, 0.005914,-0.999983,-0,-23.822271,-741.794326,2461.464269, 0.005914,-0.999983,0,23.822311,-741.512569,2461.464269, 0.005914,-0.999983,0,-16.40906,-741.750486,2465.426714, 0.005914,-0.999983,0,-16.40906,-741.750486,2465.426714, 0.005914,-0.999983,0,23.822311,-741.512569,2461.464269, 0.005914,-0.999983,0,16.409099,-741.556409,2465.426714, 0.005914,-0.999983,0,-16.40906,-741.750486,2465.426714, 0.005914,-0.999983,0,16.409099,-741.556409,2465.426714, 0.005914,-0.999983,0,-8.365256,-741.702917,2467.866775, 0.005914,-0.999983,0,-8.365256,-741.702917,2467.866775, 0.005914,-0.999983,0,16.409099,-741.556409,2465.426714, 0.005914,-0.999983,0,8.365296,-741.603978,2467.866775, 0.005914,-0.999983,0,-8.365256,-741.702917,2467.866775, 0.005914,-0.999983,0,8.365296,-741.603978,2467.866775, 0.005914,-0.999983,0,0.00002,-741.653448,2468.690683, 0.162803,0,0.986659,8.365296,-70.07352,2467.866775, 0.032813,0,0.999462,0.00002,0,2468.690683, -0.032813,0,0.999462,0.00002,-70.07352,2468.690683, 0.032813,0,0.999462,0.00002,0,2468.690683, 0.162803,0,0.986659,8.365296,-70.07352,2467.866775, 0.227168,0,0.973856,8.365296,0,2467.866775, -0.910825,0,0.412793,39.615024,-70.07352,2018.793031, -0.849251,0,0.527989,35.652572,-116.7892,2011.379823, -0.935939,0,0.352163,39.615024,-116.7892,2018.793031, -0.849251,0,0.527989,35.652572,-116.7892,2011.379823, -0.910825,0,0.412793,39.615024,-70.07352,2018.793031, -0.812791,0,0.582555,35.652572,-70.07352,2011.379823, -0.527987,0,0.849252,23.822272,-116.7892,1999.549549, -0.412791,0,0.910826,16.409056,-70.07352,1995.587113, -0.352161,0,0.935939,16.409056,-116.7892,1995.587113, -0.412791,0,0.910826,16.409056,-70.07352,1995.587113, -0.527987,0,0.849252,23.822272,-116.7892,1999.549549, -0.582553,0,0.812793,23.822272,-70.07352,1999.549549, 0.999461,0,-0.032814,-42.878972,-70.07352,1680.27244, 0.986658,0,-0.162805,-42.05505,-116.7892,1688.637715, 0.999462,0,0.032811,-42.878972,-116.7892,1680.27244, 0.986658,0,-0.162805,-42.05505,-116.7892,1688.637715, 0.999461,0,-0.032814,-42.878972,-70.07352,1680.27244, 0.973855,0,-0.227169,-42.05505,-70.07352,1688.637715, -0.812792,0,-0.582554,-35.652558,0,2401.9894, -0.707107,0,-0.707107,-30.320006,-70.07352,2395.491666, -0.849252,0,-0.527988,-35.652558,-70.07352,2401.9894, -0.707107,0,-0.707107,-30.320006,-70.07352,2395.491666, -0.812792,0,-0.582554,-35.652558,0,2401.9894, -0.707107,0,-0.707107,-30.320006,0,2395.491666, 0.707107,0,-0.707107,30.320045,-116.7892,2395.491666, 0.582554,0,-0.812792,23.822311,-851.834664,2390.159113, 0.527988,0,-0.849252,23.822311,-116.7892,2390.159113, 0.582554,0,-0.812792,23.822311,-851.834664,2390.159113, 0.707107,0,-0.707107,30.320045,-116.7892,2395.491666, 0.707107,0,-0.707107,30.320045,-847.173358,2395.491666, -0.910825,0,-0.412792,-39.615003,-116.7892,2409.402612, -0.881921,0,-0.471397,-39.361125,-741.886218,2408.92764, -0.935939,0,-0.352162,-39.615003,-741.88772,2409.402612, -0.881921,-0,-0.471397,-39.361125,-835.428664,2408.92764, -0.85779,0,-0.514001,-35.652558,-116.7892,2401.9894, -0.812792,0,-0.582554,-35.652558,-841.493539,2401.9894, -0.85779,0,-0.514001,-35.652558,-116.7892,2401.9894, -0.881921,-0,-0.471397,-39.361125,-835.428664,2408.92764, -0.881921,0,-0.471397,-39.361125,-741.886218,2408.92764, -0.85779,0,-0.514001,-35.652558,-116.7892,2401.9894, -0.881921,0,-0.471397,-39.361125,-741.886218,2408.92764, -0.910825,0,-0.412792,-39.615003,-116.7892,2409.402612, 0.162803,0,-0.986659,8.365296,0,2383.756608, 0.032813,0,-0.999462,0.00002,-70.07352,2382.9327, -0.032813,0,-0.999462,0.00002,0,2382.9327, 0.032813,0,-0.999462,0.00002,-70.07352,2382.9327, 0.162803,0,-0.986659,8.365296,0,2383.756608, 0.227168,0,-0.973856,8.365296,-70.07352,2383.756608, 0.032814,0,0.999461,-0.00005,-116.7892,1637.393379, 0.162805,0,0.986658,-8.365325,-70.07352,1638.2173, 0.227169,0,0.973855,-8.365325,-116.7892,1638.2173, 0.162805,0,0.986658,-8.365325,-70.07352,1638.2173, 0.032814,0,0.999461,-0.00005,-116.7892,1637.393379, -0.032811,0,0.999462,-0.00005,-70.07352,1637.393379, 0.227169,0,0.973855,-8.365302,-116.7892,1993.147079, 0.352163,0,0.935939,-16.409103,-70.07352,1995.587149, 0.412793,0,0.910825,-16.409103,-116.7892,1995.587149, 0.352163,0,0.935939,-16.409103,-70.07352,1995.587149, 0.227169,0,0.973855,-8.365302,-116.7892,1993.147079, 0.162804,0,0.986658,-8.365302,-70.07352,1993.147079, -0.352163,0,-0.935939,16.409142,-70.07352,2074.817158, -0.227169,0,-0.973855,8.365342,-116.7892,2077.257228, -0.162804,0,-0.986658,8.365342,-70.07352,2077.257228, -0.227169,0,-0.973855,8.365342,-116.7892,2077.257228, -0.352163,0,-0.935939,16.409142,-70.07352,2074.817158, -0.412793,0,-0.910825,16.409142,-116.7892,2074.817158, 0.707107,0,-0.707107,30.320045,0,2395.491666, 0.812792,0,-0.582554,35.652598,-70.07352,2401.9894, 0.707107,0,-0.707107,30.320045,-70.07352,2395.491666, 0.812792,0,-0.582554,35.652598,-70.07352,2401.9894, 0.707107,0,-0.707107,30.320045,0,2395.491666, 0.849252,0,-0.527988,35.652598,0,2401.9894, -0.227168,0,0.973856,-8.365256,-70.07352,2467.866775, -0.352162,0,0.935939,-16.40906,0,2465.426714, -0.412792,0,0.910825,-16.40906,-70.07352,2465.426714, -0.352162,0,0.935939,-16.40906,0,2465.426714, -0.227168,0,0.973856,-8.365256,-70.07352,2467.866775, -0.162803,0,0.986659,-8.365256,0,2467.866775, -0.527989,0,-0.849251,23.82235,-70.07352,2070.854706, -0.412793,0,-0.910825,16.409142,-116.7892,2074.817158, -0.352163,0,-0.935939,16.409142,-70.07352,2074.817158, -0.412793,0,-0.910825,16.409142,-116.7892,2074.817158, -0.527989,0,-0.849251,23.82235,-70.07352,2070.854706, -0.582555,0,-0.812791,23.82235,-116.7892,2070.854706, -0.707106,0,0.707108,30.320012,-116.7892,2004.882095, -0.582553,0,0.812793,23.822272,-70.07352,1999.549549, -0.527987,0,0.849252,23.822272,-116.7892,1999.549549, -0.582553,0,0.812793,23.822272,-70.07352,1999.549549, -0.707106,0,0.707108,30.320012,-116.7892,2004.882095, -0.707106,0,0.707108,30.320012,-70.07352,2004.882095, 0.707107,0,0.707107,30.320045,-70.07352,2456.131717, 0.582554,0,0.812792,23.822311,0,2461.464269, 0.527988,0,0.849252,23.822311,-70.07352,2461.464269, 0.582554,0,0.812792,23.822311,0,2461.464269, 0.707107,0,0.707107,30.320045,-70.07352,2456.131717, 0.707107,0,0.707107,30.320045,0,2456.131717, -0.412792,0,0.910825,-16.40906,-70.07352,2465.426714, -0.527988,0,0.849252,-23.822271,0,2461.464269, -0.582554,0,0.812792,-23.822271,-70.07352,2461.464269, -0.527988,0,0.849252,-23.822271,0,2461.464269, -0.412792,0,0.910825,-16.40906,-70.07352,2465.426714, -0.352162,0,0.935939,-16.40906,0,2465.426714, -0.162802,0,0.986659,8.36525,-116.7892,1993.147061, -0.032812,0,0.999462,-0.000027,-70.07352,1992.323162, 0.032814,0,0.999461,-0.000027,-116.7892,1992.323162, -0.032812,0,0.999462,-0.000027,-70.07352,1992.323162, -0.162802,0,0.986659,8.36525,-116.7892,1993.147061, -0.227167,0,0.973856,8.36525,-70.07352,1993.147061, 0.527988,0,-0.849252,23.822311,0,2390.159113, 0.412792,0,-0.910825,16.409099,-70.07352,2386.196669, 0.352162,0,-0.935939,16.409099,0,2386.196669, 0.412792,0,-0.910825,16.409099,-70.07352,2386.196669, 0.527988,0,-0.849252,23.822311,0,2390.159113, 0.582554,0,-0.812792,23.822311,-70.07352,2390.159113, -0.812791,0,0.582555,35.652559,-70.07352,1656.450021, -0.707106,0,0.707108,30.319996,-116.7892,1649.952295, -0.849251,0,0.52799,35.652559,-116.7892,1656.450021, -0.707106,0,0.707108,30.319996,-116.7892,1649.952295, -0.812791,0,0.582555,35.652559,-70.07352,1656.450021, -0.707106,0,0.707108,30.319996,-70.07352,1649.952295, 0.910824,0,-0.412794,-39.614976,-70.07352,1696.681514, 0.849251,0,-0.52799,-35.65252,-116.7892,1704.09472, 0.935938,0,-0.352164,-39.614976,-116.7892,1696.681514, 0.849251,0,-0.52799,-35.65252,-116.7892,1704.09472, 0.910824,0,-0.412794,-39.614976,-70.07352,1696.681514, 0.812791,0,-0.582555,-35.65252,-70.07352,1704.09472, 0.935939,0,-0.352162,39.615042,-116.7892,2409.402612, 0.973856,0,-0.227168,42.055103,-741.404745,2417.446415, 0.910825,0,-0.412792,39.615042,-741.419175,2409.402612, 0.973856,0,-0.227168,42.055103,-741.404745,2417.446415, 0.935939,0,-0.352162,39.615042,-116.7892,2409.402612, 0.986659,-0,-0.162803,42.055103,-116.7892,2417.446415, -0.707107,0,0.707107,-30.320006,0,2456.131717, -0.812792,0,0.582554,-35.652558,-70.07352,2449.633982, -0.707107,0,0.707107,-30.320006,-70.07352,2456.131717, -0.812792,0,0.582554,-35.652558,-70.07352,2449.633982, -0.707107,0,0.707107,-30.320006,0,2456.131717, -0.849252,0,0.527988,-35.652558,0,2449.633982, 0.910825,0,0.412792,39.615042,0,2442.220771, 0.849252,0,0.527988,35.652598,-70.07352,2449.633982, 0.935939,0,0.352162,39.615042,-70.07352,2442.220771, 0.849252,0,0.527988,35.652598,-70.07352,2449.633982, 0.910825,0,0.412792,39.615042,0,2442.220771, 0.812792,0,0.582554,35.652598,0,2449.633982, 0.527988,-0,0.849252,23.822311,-741.512569,2461.464269, 0.382683,-0,0.92388,16.409099,-116.7892,2465.426714, 0.382683,0,0.92388,16.409099,-741.556409,2465.426714, 0.382683,-0,0.92388,16.409099,-116.7892,2465.426714, 0.527988,-0,0.849252,23.822311,-741.512569,2461.464269, 0.582554,-0,0.812792,23.822311,-116.7892,2461.464269, 0.910825,0,0.412792,39.615042,-741.419175,2442.220771, 0.849252,0,0.527988,35.652598,-116.7892,2449.633982, 0.812792,0,0.582554,35.652598,-741.442608,2449.633982, 0.849252,0,0.527988,35.652598,-116.7892,2449.633982, 0.910825,0,0.412792,39.615042,-741.419175,2442.220771, 0.935939,0,0.352162,39.615042,-116.7892,2442.220771, 0.973855,0,-0.227169,-42.055055,-70.07352,2043.567475, 0.935939,0,-0.352163,-39.614985,-116.7892,2051.611276, 0.986658,0,-0.162804,-42.055055,-116.7892,2043.567475, 0.935939,0,-0.352163,-39.614985,-116.7892,2051.611276, 0.973855,0,-0.227169,-42.055055,-70.07352,2043.567475, 0.910825,0,-0.412793,-39.614985,-70.07352,2051.611276, -0.910825,0,-0.412792,-39.615003,0,2409.402612, -0.849252,0,-0.527988,-35.652558,-70.07352,2401.9894, -0.935939,0,-0.352162,-39.615003,-70.07352,2409.402612, -0.849252,0,-0.527988,-35.652558,-70.07352,2401.9894, -0.910825,0,-0.412792,-39.615003,0,2409.402612, -0.812792,0,-0.582554,-35.652558,0,2401.9894, 0.227167,0,-0.973856,-8.365211,-70.07352,2077.257246, 0.352161,0,-0.935939,-16.409017,-116.7892,2074.817194, 0.412791,0,-0.910826,-16.409017,-70.07352,2074.817194, 0.352161,0,-0.935939,-16.409017,-116.7892,2074.817194, 0.227167,0,-0.973856,-8.365211,-70.07352,2077.257246, 0.162802,0,-0.986659,-8.365211,-116.7892,2077.257246, -0.849252,0,-0.527987,35.652624,-70.07352,2059.024406, -0.910826,0,-0.412791,39.61506,-116.7892,2051.61119, -0.812793,0,-0.582553,35.652624,-116.7892,2059.024406, -0.910826,0,-0.412791,39.61506,-116.7892,2051.61119, -0.849252,0,-0.527987,35.652624,-70.07352,2059.024406, -0.935939,0,-0.352161,39.61506,-70.07352,2051.61119, 0.812791,0,-0.582555,-35.652533,-70.07352,2059.024483, 0.707106,0,-0.707108,-30.319973,-116.7892,2065.522212, 0.849251,0,-0.527989,-35.652533,-116.7892,2059.024483, 0.707106,0,-0.707108,-30.319973,-116.7892,2065.522212, 0.812791,0,-0.582555,-35.652533,-70.07352,2059.024483, 0.707106,0,-0.707108,-30.319973,-70.07352,2065.522212, -0.707108,0,-0.707106,30.320095,-70.07352,1710.592346, -0.812793,0,-0.582553,35.652637,-116.7892,1704.094603, -0.707108,0,-0.707106,30.320095,-116.7892,1710.592346, -0.812793,0,-0.582553,35.652637,-116.7892,1704.094603, -0.707108,0,-0.707106,30.320095,-70.07352,1710.592346, -0.849253,0,-0.527987,35.652637,-70.07352,1704.094603, 0.910825,0,-0.412793,-39.614985,-70.07352,2051.611276, 0.849251,0,-0.527989,-35.652533,-116.7892,2059.024483, 0.935939,0,-0.352163,-39.614985,-116.7892,2051.611276, 0.849251,0,-0.527989,-35.652533,-116.7892,2059.024483, 0.910825,0,-0.412793,-39.614985,-70.07352,2051.611276, 0.812791,0,-0.582555,-35.652533,-70.07352,2059.024483, 0.582553,0,-0.812793,-23.822233,-70.07352,2070.854758, 0.707106,0,-0.707108,-30.319973,-116.7892,2065.522212, 0.707106,0,-0.707108,-30.319973,-70.07352,2065.522212, 0.707106,0,-0.707108,-30.319973,-116.7892,2065.522212, 0.582553,0,-0.812793,-23.822233,-70.07352,2070.854758, 0.527987,0,-0.849252,-23.822233,-116.7892,2070.854758, 0.707108,0,0.707106,-30.320039,-70.07352,2004.882161, 0.812793,0,0.582553,-35.652584,-116.7892,2011.379901, 0.707108,0,0.707106,-30.320039,-116.7892,2004.882161, 0.812793,0,0.582553,-35.652584,-116.7892,2011.379901, 0.707108,0,0.707106,-30.320039,-70.07352,2004.882161, 0.849252,0,0.527987,-35.652584,-70.07352,2011.379901, 0.935939,0,0.352161,-39.615021,-70.07352,2018.793117, 0.973856,0,0.227167,-42.055073,-116.7892,2026.836923, 0.910826,0,0.412791,-39.615021,-116.7892,2018.793117, 0.973856,0,0.227167,-42.055073,-116.7892,2026.836923, 0.935939,0,0.352161,-39.615021,-70.07352,2018.793117, 0.986659,0,0.162802,-42.055073,-70.07352,2026.836923, 0.986659,0,0.162802,-42.055073,-70.07352,2026.836923, 0.999462,0,0.032812,-42.878972,-116.7892,2035.2022, 0.973856,0,0.227167,-42.055073,-116.7892,2026.836923, 0.999462,0,0.032812,-42.878972,-116.7892,2035.2022, 0.986659,0,0.162802,-42.055073,-70.07352,2026.836923, 0.999461,0,-0.032814,-42.878972,-70.07352,2035.2022, 0.707108,0,0.707106,-30.320055,-70.07352,1649.952394, 0.812793,0,0.582553,-35.652597,-116.7892,1656.450137, 0.707108,0,0.707106,-30.320055,-116.7892,1649.952394, 0.812793,0,0.582553,-35.652597,-116.7892,1656.450137, 0.707108,0,0.707106,-30.320055,-70.07352,1649.952394, 0.849253,0,0.527987,-35.652597,-70.07352,1656.450137, 0.683524,-0,0.729928,30.320045,-741.474143,2456.131717, 0.582554,-0,0.812792,23.822311,-116.7892,2461.464269, 0.527988,-0,0.849252,23.822311,-741.512569,2461.464269, 0.582554,-0,0.812792,23.822311,-116.7892,2461.464269, 0.683524,-0,0.729928,30.320045,-741.474143,2456.131717, 0.729928,0,0.683524,30.320045,-116.7892,2456.131717, -0.162801,0,0.986659,8.365227,-116.7892,1638.217273, -0.032811,0,0.999462,-0.00005,-70.07352,1637.393379, 0.032814,0,0.999461,-0.00005,-116.7892,1637.393379, -0.032811,0,0.999462,-0.00005,-70.07352,1637.393379, -0.162801,0,0.986659,8.365227,-116.7892,1638.217273, -0.227166,0,0.973856,8.365227,-70.07352,1638.217273, -0.935939,0,0.352162,-39.615003,0,2442.220771, -0.973856,0,0.227168,-42.055064,-70.07352,2434.176967, -0.910825,0,0.412792,-39.615003,-70.07352,2442.220771, -0.973856,0,0.227168,-42.055064,-70.07352,2434.176967, -0.935939,0,0.352162,-39.615003,0,2442.220771, -0.986659,0,0.162803,-42.055064,0,2434.176967, -0.707106,0,0.707108,30.319996,-116.7892,1649.952295, -0.582553,0,0.812793,23.822253,-70.07352,1644.619753, -0.527987,0,0.849253,23.822253,-116.7892,1644.619753, -0.582553,0,0.812793,23.822253,-70.07352,1644.619753, -0.707106,0,0.707108,30.319996,-116.7892,1649.952295, -0.707106,0,0.707108,30.319996,-70.07352,1649.952295, -0.032813,0,-0.999462,0.00002,-116.7892,2382.9327, -0.162803,0,-0.986659,-8.365256,-857.431241,2383.756608, -0.227168,-0,-0.973856,-8.365256,-116.7892,2383.756608, -0.162803,0,-0.986659,-8.365256,-857.431241,2383.756608, -0.032813,0,-0.999462,0.00002,-116.7892,2382.9327, 0.032813,0,-0.999462,0.00002,-858.151437,2382.9327, 0.999462,0,0.032813,42.879011,0,2425.811691, 0.986659,0,0.162803,42.055103,-70.07352,2434.176967, 0.999462,0,-0.032813,42.879011,-70.07352,2425.811691, 0.986659,0,0.162803,42.055103,-70.07352,2434.176967, 0.999462,0,0.032813,42.879011,0,2425.811691, 0.973856,0,0.227168,42.055103,0,2434.176967, 0.973856,0,0.227168,42.055103,0,2434.176967, 0.935939,0,0.352162,39.615042,-70.07352,2442.220771, 0.986659,0,0.162803,42.055103,-70.07352,2434.176967, 0.935939,0,0.352162,39.615042,-70.07352,2442.220771, 0.973856,0,0.227168,42.055103,0,2434.176967, 0.910825,0,0.412792,39.615042,0,2442.220771, 0.849252,0,0.527987,-35.652584,-70.07352,2011.379901, 0.910826,0,0.412791,-39.615021,-116.7892,2018.793117, 0.812793,0,0.582553,-35.652584,-116.7892,2011.379901, 0.910826,0,0.412791,-39.615021,-116.7892,2018.793117, 0.849252,0,0.527987,-35.652584,-70.07352,2011.379901, 0.935939,0,0.352161,-39.615021,-70.07352,2018.793117, 0.999461,0,-0.032814,-42.878972,-70.07352,2035.2022, 0.986658,0,-0.162804,-42.055055,-116.7892,2043.567475, 0.999462,0,0.032812,-42.878972,-116.7892,2035.2022, 0.986658,0,-0.162804,-42.055055,-116.7892,2043.567475, 0.999461,0,-0.032814,-42.878972,-70.07352,2035.2022, 0.973855,0,-0.227169,-42.055055,-70.07352,2043.567475 }; static const struct gllist robot_gearbox_half_frame = { GL_N3F_V3F, GL_TRIANGLES, 1578, robot_gearbox_half_data, 0 }; const struct gllist *robot_gearbox_half = &robot_gearbox_half_frame; static const float robot_hand_half_data[] = { -0.418515,-0.90821,0,1034.126632,-1016.895232,2093.596753, -0.476936,-0.878938,0,993.755282,-994.9886,1976.807553, -0.358044,-0.933705,0,1034.126632,-1016.895232,1976.807553, -0.476936,-0.878938,0,993.755282,-994.9886,1976.807553, -0.418515,-0.90821,0,1034.126632,-1016.895232,2093.596753, -0.476936,-0.878938,0,993.755282,-994.9886,2093.596753, 0.878938,-0.476936,0,1351.758968,-887.662995,1976.807553, 0.845913,-0.533321,0,1329.088262,-929.442444,2093.596753, 0.809111,-0.587656,0,1329.088262,-929.442444,1976.807553, 0.845913,-0.533321,0,1329.088262,-929.442444,2093.596753, 0.878938,-0.476936,0,1351.758968,-887.662995,1976.807553, 0.878938,-0.476936,0,1351.758968,-887.662995,2093.596753, 0.702644,-0.711542,0,1298.7024,-965.996278,2093.596753, 0.577428,-0.816441,0,1261.769095,-995.919752,1976.807553, 0.702644,-0.711542,0,1298.7024,-965.996278,1976.807553, 0.577428,-0.816441,0,1261.769095,-995.919752,1976.807553, 0.702644,-0.711542,0,1298.7024,-965.996278,2093.596753, 0.522634,-0.852557,0,1261.769095,-995.919752,2093.596753, 0,0,-1,993.755282,-887.662995,1976.807553, 0,0,-1,1034.126632,-1016.895232,1976.807553, 0,0,-1,993.755282,-994.9886,1976.807553, 0,0,-1,1034.126632,-1016.895232,1976.807553, 0,0,-1,993.755282,-887.662995,1976.807553, 0,0,-1,1351.758968,-887.662995,1976.807553, 0,0,-1,1034.126632,-1016.895232,1976.807553, 0,0,-1,1351.758968,-887.662995,1976.807553, 0,0,-1,1079.526136,-1030.979562,1976.807553, 0,0,-1,1079.526136,-1030.979562,1976.807553, 0,0,-1,1351.758968,-887.662995,1976.807553, 0,0,-1,1126.801018,-1035.936261,1976.807553, 0,0,-1,1126.801018,-1035.936261,1976.807553, 0,0,-1,1351.758968,-887.662995,1976.807553, 0,0,-1,1174.13453,-1031.574846,1976.807553, 0,0,-1,1174.13453,-1031.574846,1976.807553, 0,0,-1,1351.758968,-887.662995,1976.807553, 0,0,-1,1219.707673,-1018.062925,1976.807553, 0,0,-1,1219.707673,-1018.062925,1976.807553, 0,0,-1,1351.758968,-887.662995,1976.807553, 0,0,-1,1261.769095,-995.919752,1976.807553, 0,0,-1,1261.769095,-995.919752,1976.807553, 0,0,-1,1351.758968,-887.662995,1976.807553, 0,0,-1,1298.7024,-965.996278,1976.807553, 0,0,-1,1298.7024,-965.996278,1976.807553, 0,0,-1,1351.758968,-887.662995,1976.807553, 0,0,-1,1329.088262,-929.442444,1976.807553, 0,0,1,1034.126632,-1016.895232,2093.596753, 0,0,1,993.755282,-887.662995,2093.596753, 0,0,1,993.755282,-994.9886,2093.596753, 0,0,1,993.755282,-887.662995,2093.596753, 0,0,1,1034.126632,-1016.895232,2093.596753, 0,0,1,1351.758968,-887.662995,2093.596753, 0,0,1,1351.758968,-887.662995,2093.596753, 0,0,1,1034.126632,-1016.895232,2093.596753, 0,0,1,1079.526136,-1030.979562,2093.596753, 0,0,1,1351.758968,-887.662995,2093.596753, 0,0,1,1079.526136,-1030.979562,2093.596753, 0,0,1,1126.801018,-1035.936261,2093.596753, 0,0,1,1351.758968,-887.662995,2093.596753, 0,0,1,1126.801018,-1035.936261,2093.596753, 0,0,1,1174.13453,-1031.574846,2093.596753, 0,0,1,1351.758968,-887.662995,2093.596753, 0,0,1,1174.13453,-1031.574846,2093.596753, 0,0,1,1219.707673,-1018.062925,2093.596753, 0,0,1,1351.758968,-887.662995,2093.596753, 0,0,1,1219.707673,-1018.062925,2093.596753, 0,0,1,1261.769095,-995.919752,2093.596753, 0,0,1,1351.758968,-887.662995,2093.596753, 0,0,1,1261.769095,-995.919752,2093.596753, 0,0,1,1298.7024,-965.996278,2093.596753, 0,0,1,1351.758968,-887.662995,2093.596753, 0,0,1,1298.7024,-965.996278,2093.596753, 0,0,1,1329.088262,-929.442444,2093.596753, -0,1,0,993.755282,-887.662995,2093.596753, -0,1,0,1351.758968,-887.662995,1976.807553, -0,1,0,993.755282,-887.662995,1976.807553, -0,1,0,1351.758968,-887.662995,1976.807553, -0,1,0,993.755282,-887.662995,2093.596753, -0,1,0,1351.758968,-887.662995,2093.596753, 0.809111,-0.587656,0,1329.088262,-929.442444,1976.807553, 0.702644,-0.711542,0,1298.7024,-965.996278,2093.596753, 0.702644,-0.711542,0,1298.7024,-965.996278,1976.807553, 0.702644,-0.711542,0,1298.7024,-965.996278,2093.596753, 0.809111,-0.587656,0,1329.088262,-929.442444,1976.807553, 0.845913,-0.533321,0,1329.088262,-929.442444,2093.596753, -0.039101,-0.999235,0,1126.801018,-1035.936261,2093.596753, -0.169008,-0.985615,0,1079.526136,-1030.979562,1976.807553, 0.026524,-0.999648,0,1126.801018,-1035.936261,1976.807553, -0.169008,-0.985615,0,1079.526136,-1030.979562,1976.807553, -0.039101,-0.999235,0,1126.801018,-1035.936261,2093.596753, -0.233291,-0.972407,0,1079.526136,-1030.979562,2093.596753, 0.156592,-0.987663,0,1174.13453,-1031.574846,2093.596753, 0.026524,-0.999648,0,1126.801018,-1035.936261,1976.807553, 0.221036,-0.975266,0,1174.13453,-1031.574846,1976.807553, 0.026524,-0.999648,0,1126.801018,-1035.936261,1976.807553, 0.156592,-0.987663,0,1174.13453,-1031.574846,2093.596753, -0.039101,-0.999235,0,1126.801018,-1035.936261,2093.596753, -0.233291,-0.972407,0,1079.526136,-1030.979562,2093.596753, -0.358044,-0.933705,0,1034.126632,-1016.895232,1976.807553, -0.169008,-0.985615,0,1079.526136,-1030.979562,1976.807553, -0.358044,-0.933705,0,1034.126632,-1016.895232,1976.807553, -0.233291,-0.972407,0,1079.526136,-1030.979562,2093.596753, -0.418515,-0.90821,0,1034.126632,-1016.895232,2093.596753, 0.346266,-0.938136,0,1219.707673,-1018.062925,2093.596753, 0.221036,-0.975266,0,1174.13453,-1031.574846,1976.807553, 0.407053,-0.913404,0,1219.707673,-1018.062925,1976.807553, 0.221036,-0.975266,0,1174.13453,-1031.574846,1976.807553, 0.346266,-0.938136,0,1219.707673,-1018.062925,2093.596753, 0.156592,-0.987663,0,1174.13453,-1031.574846,2093.596753, 0.522634,-0.852557,0,1261.769095,-995.919752,2093.596753, 0.407053,-0.913404,0,1219.707673,-1018.062925,1976.807553, 0.577428,-0.816441,0,1261.769095,-995.919752,1976.807553, 0.407053,-0.913404,0,1219.707673,-1018.062925,1976.807553, 0.522634,-0.852557,0,1261.769095,-995.919752,2093.596753, 0.346266,-0.938136,0,1219.707673,-1018.062925,2093.596753 }; static const struct gllist robot_hand_half_frame = { GL_N3F_V3F, GL_TRIANGLES, 114, robot_hand_half_data, 0 }; const struct gllist *robot_hand_half = &robot_hand_half_frame; static const float robot_leg_half_data[] = { -0.935939,0,-0.352162,166.455213,-280.29408,1639.761005, -0.973856,0,-0.227168,176.700984,-186.86272,1605.985223, -0.986659,0,-0.162803,176.700984,-280.29408,1605.985223, -0.973856,0,-0.227168,176.700984,-186.86272,1605.985223, -0.935939,0,-0.352162,166.455213,-280.29408,1639.761005, -0.910825,0,-0.412792,166.455213,-186.86272,1639.761005, -0.83147,0,-0.55557,149.816983,-280.29408,1670.888943, -0.910825,0,-0.412792,166.455213,-186.86272,1639.761005, -0.935939,0,-0.352162,166.455213,-280.29408,1639.761005, -0.910825,0,-0.412792,166.455213,-186.86272,1639.761005, -0.83147,0,-0.55557,149.816983,-280.29408,1670.888943, -0.83147,0,-0.55557,149.816983,-186.86272,1670.888943, 1,-0,0,93.530885,-186.86272,242.726639, 1,-0,0,93.530885,-280.29408,1315.222366, 1,-0,0,93.530885,-280.29408,242.726639, 1,-0,0,93.530885,-280.29408,1315.222366, 1,-0,0,93.530885,-186.86272,242.726639, 1,-0,0,93.530885,-186.86272,1315.222366, -0.582554,0,0.812792,100.141826,-280.29408,1421.155065, -0.707107,0,0.707107,127.425692,-186.86272,1443.546356, -0.527988,0,0.849252,100.141826,-186.86272,1421.155065, -0.707107,0,0.707107,127.425692,-186.86272,1443.546356, -0.582554,0,0.812792,100.141826,-280.29408,1421.155065, -0.707107,0,0.707107,127.425692,-280.29408,1443.546356, -0.615705,0.787976,-0,653.291518,-646.340639,5.83946, -0.559296,0.828968,-0,642.023926,-654.528574,-0, -0.530018,0.847987,-0,642.023926,-654.528574,5.83946, -0.559296,0.828968,-0,642.023926,-654.528574,-0, -0.615705,0.787976,-0,653.291518,-646.340639,5.83946, -0.642837,0.766003,-0,653.291518,-646.340639,-0, -0.83147,0,-0.55557,149.816983,-280.29408,1670.888943, -0.729928,0,-0.683524,127.425692,-186.86272,1698.17281, -0.83147,0,-0.55557,149.816983,-186.86272,1670.888943, -0.729928,0,-0.683524,127.425692,-186.86272,1698.17281, -0.83147,0,-0.55557,149.816983,-280.29408,1670.888943, -0.683524,0,-0.729928,127.425692,-280.29408,1698.17281, 0,1,0,806.270901,56.185652,23.357838, 0,1,0,847.545902,56.185652,0, 0,1,0,806.270901,56.185652,0, 0,1,0,847.545902,56.185652,0, 0,1,0,806.270901,56.185652,23.357838, 0,1,0,847.545902,56.185652,23.357838, 0.487279,-0.526963,0.696326,461.27,-697.739849,192.761586, 0.603343,-0.550894,0.576621,464.090792,-720.287768,170.665181, 0.603343,-0.467182,0.646311,464.09079,-696.627201,191.294034, 0.603343,-0.550894,0.576621,464.090792,-720.287768,170.665181, 0.487279,-0.526963,0.696326,461.27,-697.739849,192.761586, 0.487279,-0.616933,0.618023,461.270002,-721.590015,171.967428, 0.998111,-0.031311,0.052854,793.410423,-566.321374,23.357838, 0.991932,-0.07777,0.100113,792.007218,-582.090797,40.223697, 0.998111,-0.038222,0.048094,793.309566,-569.30368,23.357838, 0.991932,-0.07777,0.100113,792.007218,-582.090797,40.223697, 0.998111,-0.031311,0.052854,793.410423,-566.321374,23.357838, 0.991932,-0.063402,0.109777,792.007217,-577.494024,43.23773, 0.127347,-0.864568,0.486113,624.955342,-738.83011,109.90761, 0.030867,-0.796473,0.603886,599.602156,-724.524748,134.576836, 0.030867,-0.871333,0.489721,599.602151,-740.19647,110.675522, 0.030867,-0.796473,0.603886,599.602156,-724.524748,134.576836, 0.127347,-0.864568,0.486113,624.955342,-738.83011,109.90761, 0.127347,-0.790262,0.59939,624.955347,-723.275771,133.6299, -0.285905,0.891387,-0.351693,436.335613,-749.104397,83.53758, -0.415875,0.883495,-0.215602,439.690597,-756.366969,56.464997, -0.285905,0.930996,-0.226946,436.335601,-757.591911,56.762987, -0.415875,0.883495,-0.215602,439.690597,-756.366969,56.464997, -0.285905,0.891387,-0.351693,436.335613,-749.104397,83.53758, -0.415875,0.845875,-0.333982,439.690608,-747.931487,83.075452, -0.415875,0.845875,-0.333982,439.690608,-747.931487,83.075452, -0.537771,0.818998,-0.200111,442.839466,-754.702001,56.059962, -0.415875,0.883495,-0.215602,439.690597,-756.366969,56.464997, -0.537771,0.818998,-0.200111,442.839466,-754.702001,56.059962, -0.415875,0.845875,-0.333982,439.690608,-747.931487,83.075452, -0.537771,0.78409,-0.309846,442.839477,-746.337241,82.447316, 0.361665,-0.92741,0.095445,458.222215,-789.666464,31.875739, 0.229025,-0.94575,0.230443,455.006085,-785.239687,63.48879, 0.229024,-0.96833,0.09942,455.006069,-790.65817,31.977188, 0.229025,-0.94575,0.230443,455.006085,-785.239687,63.48879, 0.361665,-0.92741,0.095445,458.222215,-789.666464,31.875739, 0.361665,-0.905753,0.220929,458.222231,-784.271055,63.253152, 0,1,0,764.9959,-186.86272,23.357838, 0,1,0,0.001765,-186.86272,5.83946, 0,1,0,0.001765,-186.86272,23.357838, 0,1,0,0.001765,-186.86272,5.83946, 0,1,0,764.9959,-186.86272,23.357838, 0,1,0,764.9959,-186.86272,5.83946, 0.932875,-0.177759,0.313282,472.107204,-665.162054,199.228412, 0.874212,-0.294445,0.386077,470.677524,-692.04293,185.247507, 0.932875,-0.218791,0.286137,472.107209,-690.197308,182.813182, 0.874212,-0.294445,0.386077,470.677524,-692.04293,185.247507, 0.932875,-0.177759,0.313282,472.107204,-665.162054,199.228412, 0.874212,-0.239089,0.422598,470.677518,-666.658744,201.891525, -0.022507,0.01679,-0.999606,602.133251,-548.673148,186.220487, 0,0,-1,454.66772,-186.86272,186.220487, -0.030004,0,-0.99955,602.133251,-186.86272,186.220487, 0,0,-1,454.66772,-186.86272,186.220487, -0.022507,0.01679,-0.999606,602.133251,-548.673148,186.220487, -0,0.022395,-0.999749,454.66772,-548.673192,186.220487, 0.381503,-0.21794,0.898308,673.957358,-603.792753,197.311473, 0.499663,-0.316836,0.806196,696.758793,-625.025898,178.836737, 0.499663,-0.204023,0.84185,696.758783,-601.14038,186.408417, 0.499663,-0.316836,0.806196,696.758793,-625.025898,178.836737, 0.381503,-0.21794,0.898308,673.957358,-603.792753,197.311473, 0.381503,-0.338316,0.860231,673.957369,-629.139245,189.276665, 0,-0.016797,0.999859,473.71772,-549.195746,217.326639, 0.020529,0,0.999789,599.602099,-186.86272,217.326639, 0,0,1,473.71772,-186.86272,217.326639, 0.020529,0,0.999789,599.602099,-186.86272,217.326639, 0,-0.016797,0.999859,473.71772,-549.195746,217.326639, 0.041063,-0.016783,0.999016,599.602099,-549.195708,217.326639, 0,-1,-0,93.530885,-280.29408,242.726639, 0,-1,-0,0.112465,-280.29408,1390.81149, 0,-1,-0,0.000488,-280.29408,242.726639, 0,-1,-0,0.112465,-280.29408,1390.81149, 0,-1,-0,93.530885,-280.29408,242.726639, 0,-1,-0,35.238106,-280.29408,1394.271064, 0,-1,-0,35.238106,-280.29408,1394.271064, 0,-1,-0,93.530885,-280.29408,242.726639, 0,-1,-0,69.013887,-280.29408,1404.516835, 0,-1,-0,69.013887,-280.29408,1404.516835, 0,-1,-0,93.530885,-280.29408,242.726639, 0,-1,-0,93.530885,-280.29408,1315.222366, 0,-1,-0,69.013887,-280.29408,1404.516835, 0,-1,-0,93.530885,-280.29408,1315.222366, 0,-1,-0,100.141826,-280.29408,1421.155065, 0,-1,-0,100.141826,-280.29408,1421.155065, 0,-1,-0,93.530885,-280.29408,1315.222366, 0,-1,-0,221.73981,-280.29408,1435.598634, 0,-1,-0,100.141826,-280.29408,1421.155065, 0,-1,-0,221.73981,-280.29408,1435.598634, 0,-1,0,127.425692,-280.29408,1443.546356, 0,-1,0,127.425692,-280.29408,1443.546356, 0,-1,-0,221.73981,-280.29408,1435.598634, 0,-1,0,149.816983,-280.29408,1470.830222, 0,-1,0,149.816983,-280.29408,1470.830222, 0,-1,-0,221.73981,-280.29408,1435.598634, 0,-1,0,166.455213,-280.29408,1501.958161, 0,-1,0,166.455213,-280.29408,1501.958161, 0,-1,-0,221.73981,-280.29408,1435.598634, 0,-1,0,176.700984,-280.29408,1535.733942, 0,-1,0,176.700984,-280.29408,1535.733942, 0,-1,-0,221.73981,-280.29408,1435.598634, 0,-1,0,180.160558,-280.29408,1570.859583, 0,-1,0,180.160558,-280.29408,1570.859583, 0,-1,-0,221.73981,-280.29408,1435.598634, 0,-1,0,180.185724,-280.29408,1903.252111, 0,-1,0,35.243015,-280.29408,2079.865312, 0,-1,0,0.179984,-280.29408,2125.502553, 0,-1,0,0.112465,-280.29408,2083.325369, 0,-1,0,0.179984,-280.29408,2125.502553, 0,-1,0,35.243015,-280.29408,2079.865312, 0,-1,0,46.868397,-280.29408,2125.502553, 0,-1,0,46.868397,-280.29408,2125.502553, 0,-1,0,35.243015,-280.29408,2079.865312, 0,-1,0,69.023518,-280.29408,2069.618109, 0,-1,0,46.868397,-280.29408,2125.502553, 0,-1,0,69.023518,-280.29408,2069.618109, 0,-1,0,46.868397,-280.29408,2499.208064, 0,-1,0,46.868397,-280.29408,2499.208064, 0,-1,0,69.023518,-280.29408,2069.618109, 0,-1,0,93.652471,-280.29408,2499.208064, 0,-1,0,93.652471,-280.29408,2499.208064, 0,-1,0,69.023518,-280.29408,2069.618109, -0,-1,0,100.155807,-280.29408,2052.977553, 0,-1,0,93.652471,-280.29408,2499.208064, -0,-1,0,100.155807,-280.29408,2052.977553, -0,-1,0,123.089852,-280.29408,2224.766097, -0,-1,0,123.089852,-280.29408,2224.766097, -0,-1,0,100.155807,-280.29408,2052.977553, -0,-1,0,127.443487,-280.29408,2030.583133, -0,-1,0,123.089852,-280.29408,2224.766097, -0,-1,0,127.443487,-280.29408,2030.583133, 0,-1,0,221.73981,-280.29408,2013.443961, 0,-1,0,221.73981,-280.29408,2013.443961, -0,-1,0,127.443487,-280.29408,2030.583133, 0,-1,0,149.837908,-280.29408,2003.295453, 0,-1,0,221.73981,-280.29408,2013.443961, 0,-1,0,149.837908,-280.29408,2003.295453, 0,-1,0,166.478463,-280.29408,1972.163164, 0,-1,0,221.73981,-280.29408,2013.443961, 0,-1,0,166.478463,-280.29408,1972.163164, 0,-1,0,176.725666,-280.29408,1938.382661, 0,-1,0,221.73981,-280.29408,2013.443961, 0,-1,0,176.725666,-280.29408,1938.382661, 0,-1,0,180.185724,-280.29408,1903.252111, 0,-1,0,221.73981,-280.29408,2013.443961, 0,-1,0,180.185724,-280.29408,1903.252111, 0,-1,-0,221.73981,-280.29408,1435.598634, 0,-1,0,100.141826,-280.29408,1720.5641, 0,-1,0,100.155807,-280.29408,1753.526669, 0,-1,0,69.327289,-280.29408,1737.048483, 0,-1,0,100.155807,-280.29408,1753.526669, 0,-1,0,100.141826,-280.29408,1720.5641, 0,-1,0,127.425692,-280.29408,1698.17281, 0,-1,0,100.155807,-280.29408,1753.526669, 0,-1,0,127.425692,-280.29408,1698.17281, 0,-1,0,127.443487,-280.29408,1775.921089, 0,-1,0,127.443487,-280.29408,1775.921089, 0,-1,0,127.425692,-280.29408,1698.17281, 0,-1,0,149.816983,-280.29408,1670.888943, 0,-1,0,127.443487,-280.29408,1775.921089, 0,-1,0,149.816983,-280.29408,1670.888943, 0,-1,0,149.837908,-280.29408,1803.208769, 0,-1,0,149.837908,-280.29408,1803.208769, 0,-1,0,149.816983,-280.29408,1670.888943, 0,-1,0,166.455213,-280.29408,1639.761005, 0,-1,0,149.837908,-280.29408,1803.208769, 0,-1,0,166.455213,-280.29408,1639.761005, 0,-1,0,166.478463,-280.29408,1834.341059, 0,-1,0,166.478463,-280.29408,1834.341059, 0,-1,0,166.455213,-280.29408,1639.761005, 0,-1,0,176.700984,-280.29408,1605.985223, 0,-1,0,166.478463,-280.29408,1834.341059, 0,-1,0,176.700984,-280.29408,1605.985223, 0,-1,0,176.725666,-280.29408,1868.121561, 0,-1,0,176.725666,-280.29408,1868.121561, 0,-1,0,176.700984,-280.29408,1605.985223, 0,-1,0,180.160558,-280.29408,1570.859583, 0,-1,0,176.725666,-280.29408,1868.121561, 0,-1,0,180.160558,-280.29408,1570.859583, 0,-1,0,180.185724,-280.29408,1903.252111, -0.952384,0.284225,-0.110366,453.575559,-733.364268,77.335952, -0.985345,0.149457,-0.082208,454.431271,-719.259121,98.908612, -0.985345,0.159265,-0.061075,454.431263,-730.119577,76.057541, -0.985345,0.149457,-0.082208,454.431271,-719.259121,98.908612, -0.952384,0.284225,-0.110366,453.575559,-733.364268,77.335952, -0.952384,0.266534,-0.148066,453.575567,-722.299342,100.61724, 0.854897,-0.518797,-0,813.090986,-692.336727,-0, 0.806461,-0.591287,-0,794.401548,-720.307447,23.357838, 0.779867,-0.625945,-0,794.401548,-720.307447,-0, 0.806461,-0.591287,-0,794.401548,-720.307447,23.357838, 0.854897,-0.518797,-0,813.090986,-692.336727,-0, 0.87674,-0.480964,-0,813.090986,-692.336727,23.357838, 0.995804,-0.010878,0.090867,473.642039,-579.415029,219.678492, 0.973657,-0.055392,0.221186,473.101737,-608.824017,217.993091, 0.995804,-0.023158,0.088537,473.642053,-608.036762,214.756927, 0.973657,-0.055392,0.221186,473.101737,-608.824017,217.993091, 0.995804,-0.010878,0.090867,473.642039,-579.415029,219.678492, 0.973657,-0.024735,0.226671,473.101722,-579.75396,222.991746, 0.924993,-0.331932,0.184956,779.024167,-635.678246,51.93544, 0.867227,-0.463727,0.18131,767.829328,-662.181333,49.28971, 0.924993,-0.354039,0.138,779.024163,-640.917494,40.911739, 0.867227,-0.463727,0.18131,767.829328,-662.181333,49.28971, 0.924993,-0.331932,0.184956,779.024167,-635.678246,51.93544, 0.867227,-0.434695,0.24281,767.829333,-655.602109,63.132805, 0.924993,-0.230673,0.301955,779.024169,-611.764971,79.363123, 0.867227,-0.352996,0.351156,767.829337,-637.125516,87.502929, 0.924993,-0.269668,0.267706,779.02417,-620.964741,71.342153, 0.867227,-0.352996,0.351156,767.829337,-637.125516,87.502929, 0.924993,-0.230673,0.301955,779.024169,-611.764971,79.363123, 0.867227,-0.301852,0.395982,767.829336,-625.572837,97.575321, -0.832687,0.392486,-0.390624,450.471126,-695.789522,146.166935, -0.901181,0.263001,-0.344532,452.247014,-673.811262,161.200429, -0.901181,0.307496,-0.305481,452.247015,-693.58391,143.961322, -0.901181,0.263001,-0.344532,452.247014,-673.811262,161.200429, -0.832687,0.392486,-0.390624,450.471126,-695.789522,146.166935, -0.832687,0.335596,-0.440463,450.471124,-675.695751,163.686019, 0,0,-1,847.545902,-186.86272,0, -0,0,-1,806.270901,56.185652,0, 0,0,-1,847.545902,56.185652,0, -0,0,-1,806.270901,56.185652,0, 0,0,-1,847.545902,-186.86272,0, -0,0,-1,700.992217,-563.749227,-0, -0,0,-1,700.992217,-563.749227,-0, 0,0,-1,847.545902,-186.86272,0, 0,0,-1,847.545902,-563.749227,0, -0,0,-1,700.992217,-563.749227,-0, 0,0,-1,847.545902,-563.749227,0, -0,0,-1,843.130723,-608.452917,-0, -0,0,-1,700.992217,-563.749227,-0, -0,0,-1,843.130723,-608.452917,-0, -0,-0,-1,698.091838,-577.372321,-0, -0,-0,-1,698.091838,-577.372321,-0, -0,0,-1,843.130723,-608.452917,-0, -0,0,-1,693.784142,-590.617874,-0, -0,0,-1,693.784142,-590.617874,-0, -0,0,-1,843.130723,-608.452917,-0, -0,0,-1,688.11627,-603.340929,-0, -0,0,-1,688.11627,-603.340929,-0, -0,0,-1,843.130723,-608.452917,-0, -0,0,-1,681.15025,-615.40225,-0, -0,0,-1,681.15025,-615.40225,-0, -0,0,-1,843.130723,-608.452917,-0, -0,0,-1,838.782877,-630.311015,-0, -0,0,-1,681.15025,-615.40225,-0, -0,0,-1,838.782877,-630.311015,-0, -0,0,-1,672.962315,-626.669842,-0, -0,0,-1,672.962315,-626.669842,-0, -0,0,-1,838.782877,-630.311015,-0, -0,0,-1,663.642072,-637.020396,-0, -0,0,-1,663.642072,-637.020396,-0, -0,0,-1,838.782877,-630.311015,-0, -0,0,-1,827.969621,-662.165838,-0, -0,0,-1,663.642072,-637.020396,-0, -0,0,-1,827.969621,-662.165838,-0, -0,0,-1,653.291518,-646.340639,-0, -0,0,-1,653.291518,-646.340639,-0, -0,0,-1,827.969621,-662.165838,-0, -0,0,-1,642.023926,-654.528574,-0, -0,0,-1,642.023926,-654.528574,-0, -0,0,-1,827.969621,-662.165838,-0, -0,0,-1,629.962605,-661.494594,-0, -0,0,-1,629.962605,-661.494594,-0, -0,0,-1,827.969621,-662.165838,-0, -0,0,-1,617.239549,-667.162466,-0, -0,0,-1,617.239549,-667.162466,-0, -0,0,-1,827.969621,-662.165838,-0, -0,0,-1,813.090986,-692.336727,-0, -0,0,-1,617.239549,-667.162466,-0, -0,0,-1,813.090986,-692.336727,-0, -0,0,-1,603.993997,-671.470162,-0, -0,0,-1,603.993997,-671.470162,-0, -0,0,-1,813.090986,-692.336727,-0, -0,0,-1,590.370902,-674.370541,0, -0,0,-1,590.370902,-674.370541,0, -0,0,-1,813.090986,-692.336727,-0, -0,0,-1,0.000468,-674.370541,0, -0,0,-1,0.000468,-674.370541,0, -0,0,-1,813.090986,-692.336727,-0, -0,-0,-1,0.000468,-820.924227,0, -0,-0,-1,0.000468,-820.924227,0, -0,0,-1,813.090986,-692.336727,-0, -0,0,-1,794.401548,-720.307447,-0, -0,-0,-1,0.000468,-820.924227,0, -0,0,-1,794.401548,-720.307447,-0, -0,0,-1,772.221089,-745.599413,-0, -0,-0,-1,0.000468,-820.924227,0, -0,0,-1,772.221089,-745.599413,-0, -0,-0,-1,746.929123,-767.779872,-0, -0,-0,-1,0.000468,-820.924227,0, -0,-0,-1,746.929123,-767.779872,-0, -0,-0,-1,718.958402,-786.46931,-0, -0,-0,-1,0.000468,-820.924227,0, -0,-0,-1,718.958402,-786.46931,-0, -0,-0,-1,688.787514,-801.347945,-0, -0,-0,-1,0.000468,-820.924227,0, -0,-0,-1,688.787514,-801.347945,-0, -0,-0,-1,656.93269,-812.161201,-0, -0,-0,-1,0.000468,-820.924227,0, -0,-0,-1,656.93269,-812.161201,-0, -0,-0,-1,623.938976,-818.724059,-0, -0,-0,-1,0.000468,-820.924227,0, -0,-0,-1,623.938976,-818.724059,-0, 0,-0,-1,590.370902,-820.924227,0, -0.412792,0,0.910825,69.013887,-280.29408,1404.516835, -0.527988,0,0.849252,100.141826,-186.86272,1421.155065, -0.352162,0,0.935939,69.013887,-186.86272,1404.516835, -0.527988,0,0.849252,100.141826,-186.86272,1421.155065, -0.412792,0,0.910825,69.013887,-280.29408,1404.516835, -0.582554,0,0.812792,100.141826,-280.29408,1421.155065, -0.112343,0.23471,-0.965552,623.546346,-599.640892,180.244333, -0.022557,0.101727,-0.994557,602.133267,-575.89875,185.30549, -0.112343,0.100949,-0.988528,623.546333,-575.800358,184.343761, -0.022557,0.101727,-0.994557,602.133267,-575.89875,185.30549, -0.112343,0.23471,-0.965552,623.546346,-599.640892,180.244333, -0.022557,0.236303,-0.971418,602.13328,-599.869416,181.183686, -0.649152,0.701164,-0.294909,445.721732,-744.352284,81.665241, -0.748179,0.578988,-0.324038,448.282012,-730.404697,105.172511, -0.748179,0.617743,-0.242119,448.282005,-742.014746,80.744249, -0.748179,0.578988,-0.324038,448.282012,-730.404697,105.172511, -0.649152,0.701164,-0.294909,445.721732,-744.352284,81.665241, -0.649152,0.654437,-0.387703,445.72174,-732.59493,106.40344, 0.874212,-0.050786,0.482881,470.677482,-580.392895,229.237697, 0.79876,-0.143441,0.5843,468.840142,-610.976426,226.840986, 0.874212,-0.116112,0.471456,470.677497,-610.308103,224.093716, 0.79876,-0.143441,0.5843,468.840142,-610.976426,226.840986, 0.874212,-0.050786,0.482881,470.677482,-580.392895,229.237697, 0.79876,-0.062483,0.598396,468.840127,-580.680624,232.05041, 0.988867,-0.134398,0.063875,792.007216,-595.005501,23.357838, 0.969153,-0.229071,0.090936,787.130187,-618.467587,32.066457, 0.98147,-0.179832,0.066156,791.767078,-596.364536,23.357838, 0.969153,-0.229071,0.090936,787.130187,-618.467587,32.066457, 0.988867,-0.134398,0.063875,792.007216,-595.005501,23.357838, 0.991932,-0.111235,0.060808,792.007217,-592.860317,27.871437, 0.969153,-0.229071,0.090936,787.130187,-618.467587,32.066457, 0.991932,-0.111235,0.060808,792.007217,-592.860317,27.871437, 0.966794,-0.223491,0.12394,787.130189,-614.643058,40.113503, 0.382469,-0.01552,0.923838,458.222196,-549.595395,241.116069, 0.466054,-0,0.884757,461.269937,-186.86272,239.686382, 0.339245,0,0.940698,458.222196,-186.86272,241.116069, 0.466054,-0,0.884757,461.269937,-186.86272,239.686382, 0.382469,-0.01552,0.923838,458.222196,-549.595395,241.116069, 0.506559,-0.014482,0.862083,461.269937,-549.571376,239.686382, 0.707932,-0.563451,0.425857,736.997696,-679.337949,100.317733, 0.616524,-0.682339,0.392825,717.894074,-705.391609,91.114894, 0.717149,-0.603071,0.349289,736.997692,-690.762817,82.893397, 0.616524,-0.682339,0.392825,717.894074,-705.391609,91.114894, 0.707932,-0.563451,0.425857,736.997696,-679.337949,100.317733, 0.609002,-0.620953,0.493491,717.894078,-692.709977,110.455949, -0.928388,0.225646,-0.295263,753.576412,-604.820821,70.203974, -0.9698,0.12079,-0.21189,760.201826,-585.915972,58.223185, -0.9698,0.148537,-0.193454,760.201828,-592.476195,53.921748, -0.9698,0.12079,-0.21189,760.201826,-585.915972,58.223185, -0.928388,0.225646,-0.295263,753.576412,-604.820821,70.203974, -0.928388,0.183307,-0.323257,753.57641,-595.926736,76.035688, -0.985345,0.018907,-0.169523,454.43124,-576.627626,192.429881, -0.999453,0.000944,-0.033066,454.797637,-548.733344,189.801127, -0.999454,0.00493,-0.032673,454.797654,-576.264066,188.875876, -0.999453,0.000944,-0.033066,454.797637,-548.733344,189.801127, -0.985345,0.018907,-0.169523,454.43124,-576.627626,192.429881, -0.985283,0.003254,-0.170901,454.431224,-548.79322,193.365338, -0.415875,0.214324,-0.883806,439.690597,-606.087584,206.744382, -0.285905,0.097067,-0.953329,436.335587,-578.704167,212.729198, -0.415875,0.091892,-0.904767,439.690582,-578.575874,211.475076, -0.285905,0.097067,-0.953329,436.335587,-578.704167,212.729198, -0.415875,0.214324,-0.883806,439.690597,-606.087584,206.744382, -0.285905,0.226068,-0.93121,436.335601,-606.385575,207.969324, -0.537771,0.08495,-0.8388,442.839452,-578.401496,209.770445, -0.41512,0.01512,-0.909641,439.690565,-549.114088,212.465226, -0.536932,0.013961,-0.84351,442.839435,-549.085368,210.7557, -0.41512,0.01512,-0.909641,439.690565,-549.114088,212.465226, -0.537771,0.08495,-0.8388,442.839452,-578.401496,209.770445, -0.415875,0.091892,-0.904767,439.690582,-578.575874,211.475076, 0.499663,-0.204023,0.84185,696.758783,-601.14038,186.408417, 0.609101,-0.289877,0.738219,717.894067,-619.848758,165.69683, 0.609101,-0.186578,0.770833,717.894058,-597.802054,172.685609, 0.609101,-0.289877,0.738219,717.894067,-619.848758,165.69683, 0.499663,-0.204023,0.84185,696.758783,-601.14038,186.408417, 0.499663,-0.316836,0.806196,696.758793,-625.025898,178.836737, 0.995804,-0.08054,0.043457,473.642074,-743.137303,112.328326, 0.973657,-0.212704,0.08215,473.101749,-758.702385,87.31918, 0.995804,-0.08571,0.032077,473.642065,-755.603683,86.09829, 0.973657,-0.212704,0.08215,473.101749,-758.702385,87.31918, 0.995804,-0.08054,0.043457,473.642074,-743.137303,112.328326, 0.973657,-0.199526,0.110368,473.101758,-746.040734,113.960076, 0.237659,-0.971349,-0,656.93269,-812.161201,-0, 0.152151,-0.988357,-0,623.938976,-818.724059,23.357838, 0.108839,-0.994059,-0,623.938976,-818.724059,-0, 0.152151,-0.988357,-0,623.938976,-818.724059,23.357838, 0.237659,-0.971349,-0,656.93269,-812.161201,-0, 0.279856,-0.960042,-0,656.93269,-812.161201,23.357838, 0.932875,-0.038122,0.358177,472.107168,-580.082016,226.198682, 0.874212,-0.116112,0.471456,470.677497,-610.308103,224.093716, 0.932875,-0.086574,0.349641,472.107183,-609.58601,221.125411, 0.874212,-0.116112,0.471456,470.677497,-610.308103,224.093716, 0.932875,-0.038122,0.358177,472.107168,-580.082016,226.198682, 0.874212,-0.050786,0.482881,470.677482,-580.392895,229.237697, -0.040706,0.101643,-0.993988,429.267738,-578.813573,213.798664, -0,0.022395,-0.999749,0.016247,-549.153365,214.795487, -0.040617,0.016774,-0.999034,429.26772,-549.153238,214.795487, -0,0.022395,-0.999749,0.016247,-549.153365,214.795487, -0.040706,0.101643,-0.993988,429.267738,-578.813573,213.798664, -0,0.124431,-0.992228,0.016265,-578.81381,213.79866, 0.707841,-0.682368,0.182581,466.630415,-778.937032,61.955552, 0.603443,-0.741548,0.293196,464.090775,-771.60356,92.402256, 0.603443,-0.774584,0.189413,464.090763,-781.089165,62.479098, 0.603443,-0.741548,0.293196,464.090775,-771.60356,92.402256, 0.707841,-0.682368,0.182581,466.630415,-778.937032,61.955552, 0.707841,-0.651123,0.273862,466.630427,-769.542842,91.59033, -0.999454,0.009337,-0.031696,454.797666,-600.717836,184.671001, -0.999345,-0.004503,0.035903,454.667737,-575.898832,185.305489, -0.999345,-0.009353,0.034955,454.667749,-599.869485,181.183687, -0.999345,-0.004503,0.035903,454.667737,-575.898832,185.305489, -0.999454,0.009337,-0.031696,454.797666,-600.717836,184.671001, -0.999454,0.00493,-0.032673,454.797654,-576.264066,188.875876, 0.966794,-0.223491,0.12394,787.130189,-614.643058,40.113503, 0.924993,-0.354039,0.138,779.024163,-640.917494,40.911739, 0.969153,-0.229071,0.090936,787.130187,-618.467587,32.066457, 0.924993,-0.354039,0.138,779.024163,-640.917494,40.911739, 0.966794,-0.223491,0.12394,787.130189,-614.643058,40.113503, 0.924993,-0.331932,0.184956,779.024167,-635.678246,51.93544, 0.707841,-0.682368,0.182581,736.997677,-706.002952,44.212918, 0.609101,-0.737549,0.291577,717.894067,-715.319418,70.22617, 0.609101,-0.770402,0.188354,717.894058,-722.308196,48.179466, 0.609101,-0.737549,0.291577,717.894067,-715.319418,70.22617, 0.707841,-0.682368,0.182581,736.997677,-706.002952,44.212918, 0.707841,-0.651123,0.273862,736.997686,-699.706769,64.074769, -0.795651,0.010475,-0.605664,732.466031,-547.618545,123.445905, -0.858411,0,-0.512963,744.275028,-186.86272,105.557439, -0.869747,0.008617,-0.493422,744.275028,-547.318028,105.557439, -0.858411,0,-0.512963,744.275028,-186.86272,105.557439, -0.795651,0.010475,-0.605664,732.466031,-547.618545,123.445905, -0.7818,0,-0.623529,732.466031,-186.86272,123.445905, 0.091928,-0.967513,0.235514,451.683317,-785.765921,63.616808, 0.011271,-0.930329,0.366553,448.317768,-776.152256,94.194451, 0.01127,-0.9716,0.236362,448.317755,-785.839647,63.634744, 0.011271,-0.930329,0.366553,448.317768,-776.152256,94.194451, 0.091928,-0.967513,0.235514,451.683317,-785.765921,63.616808, 0.091928,-0.926396,0.365157,451.68333,-776.081661,94.166635, -0.494423,0.614096,-0.615169,684.332898,-669.009253,119.386665, -0.606606,0.622389,-0.494632,702.22136,-673.696701,96.040736, -0.494423,0.692194,-0.52575,684.332897,-683.128909,103.191916, -0.606606,0.622389,-0.494632,702.22136,-673.696701,96.040736, -0.494423,0.614096,-0.615169,684.332898,-669.009253,119.386665, -0.606606,0.549182,-0.574829,702.221362,-660.639487,111.0169, -0.244971,0.228806,-0.942145,644.636243,-598.733545,176.514546, -0.112343,0.100949,-0.988528,623.546333,-575.800358,184.343761, -0.244971,0.09829,-0.964535,644.636231,-575.409716,180.525125, -0.112343,0.100949,-0.988528,623.546333,-575.800358,184.343761, -0.244971,0.228806,-0.942145,644.636243,-598.733545,176.514546, -0.112343,0.23471,-0.965552,623.546346,-599.640892,180.244333, 0.874212,-0.116112,0.471456,470.677497,-610.308103,224.093716, 0.79876,-0.221723,0.559304,468.840155,-640.279768,217.551861, 0.874212,-0.179273,0.451236,470.677509,-639.24332,214.921287, 0.79876,-0.221723,0.559304,468.840155,-640.279768,217.551861, 0.874212,-0.116112,0.471456,470.677497,-610.308103,224.093716, 0.79876,-0.143441,0.5843,468.840142,-610.976426,226.840986, 0.989572,-0,0.144037,221.73981,-186.86272,2013.443961, 1,-0,0,221.73981,-280.29408,1435.598634, 1,-0,0,221.73981,-186.86272,1435.598634, 1,-0,0,221.73981,-280.29408,1435.598634, 0.989572,-0,0.144037,221.73981,-186.86272,2013.443961, 0.957608,-0,0.288074,221.73981,-280.29408,2013.443961, 0.362412,-0.932018,-0,688.787514,-801.347945,-0, 0.279856,-0.960042,-0,656.93269,-812.161201,23.357838, 0.237659,-0.971349,-0,656.93269,-812.161201,-0, 0.279856,-0.960042,-0,656.93269,-812.161201,23.357838, 0.362412,-0.932018,-0,688.787514,-801.347945,-0, 0.402772,-0.9153,-0,688.787514,-801.347945,23.357838, -0.986659,0,-0.162803,176.725666,-280.29408,1938.382661, -0.999462,0,-0.032813,180.185724,-186.86272,1903.252111, -0.999462,0,0.032813,180.185724,-280.29408,1903.252111, -0.999462,0,-0.032813,180.185724,-186.86272,1903.252111, -0.986659,0,-0.162803,176.725666,-280.29408,1938.382661, -0.973856,0,-0.227168,176.725666,-186.86272,1938.382661, -0.707841,0.151267,-0.689985,718.363091,-588.820775,135.766294, -0.796291,0.062774,-0.601647,732.466044,-569.495502,122.710666, -0.796291,0.144172,-0.587481,732.466052,-584.996349,120.045264, -0.796291,0.062774,-0.601647,732.466044,-569.495502,122.710666, -0.707841,0.151267,-0.689985,718.363091,-588.820775,135.766294, -0.707841,0.055835,-0.704162,718.363082,-571.142012,138.806193, -0.373111,0.655639,-0.656449,665.021391,-675.601701,125.979113, -0.244971,0.585448,-0.772813,644.636264,-662.459295,146.227532, -0.373111,0.560072,-0.739667,665.02139,-658.447133,140.935603, -0.244971,0.585448,-0.772813,644.636264,-662.459295,146.227532, -0.373111,0.655639,-0.656449,665.021391,-675.601701,125.979113, -0.244971,0.685296,-0.685827,644.636265,-680.297547,130.67496, -0.714681,0.677849,-0.172485,718.363091,-685.388881,39.198188, -0.796291,0.563252,-0.220608,732.466058,-664.91507,50.366817, -0.809671,0.570253,-0.138724,732.466052,-669.667851,35.373762, -0.796291,0.563252,-0.220608,732.466058,-664.91507,50.366817, -0.714681,0.677849,-0.172485,718.363091,-685.388881,39.198188, -0.707841,0.651123,-0.273862,718.363098,-679.96832,56.297814, 0.256673,-0.899078,0.354651,649.884111,-746.45866,82.495079, 0.127347,-0.864568,0.486113,624.955342,-738.83011,109.90761, 0.127347,-0.922744,0.363767,624.955334,-751.006818,84.287065, 0.127347,-0.864568,0.486113,624.955342,-738.83011,109.90761, 0.256673,-0.899078,0.354651,649.884111,-746.45866,82.495079, 0.256673,-0.842365,0.473857,649.884119,-734.568562,107.512581, 0.381503,-0.898037,0.219052,673.957358,-746.934061,54.170165, 0.256673,-0.899078,0.354651,649.884111,-746.45866,82.495079, 0.256673,-0.939019,0.228829,649.8841,-754.828812,56.090715, 0.256673,-0.899078,0.354651,649.884111,-746.45866,82.495079, 0.381503,-0.898037,0.219052,673.957358,-746.934061,54.170165, 0.381503,-0.859811,0.339381,673.957369,-738.899253,79.516658, -0.040706,0.871018,-0.489562,429.267772,-737.984764,109.432572, -0.150375,0.919722,-0.362627,432.838941,-749.833439,83.824825, -0.040706,0.929604,-0.366305,429.267763,-750.104609,83.931667, -0.150375,0.919722,-0.362627,432.838941,-749.833439,83.824825, -0.040706,0.871018,-0.489562,429.267772,-737.984764,109.432572, -0.150375,0.86173,-0.484571,432.838949,-737.730682,109.289775, -0.928388,0.346265,-0.134897,753.576407,-630.223631,36.698359, -0.9698,0.213348,-0.118196,760.201826,-607.845772,36.293385, -0.9721,0.218065,-0.086424,760.201824,-611.21315,29.208214, -0.9698,0.213348,-0.118196,760.201826,-607.845772,36.293385, -0.928388,0.346265,-0.134897,753.576407,-630.223631,36.698359, -0.928388,0.324653,-0.180823,753.57641,-625.658276,46.304148, 0.105242,-0.993886,0.033402,624.955304,-764.585289,23.357838, 0.030866,-0.994332,0.101738,599.602117,-765.945157,29.449075, 0.020529,-0.999225,0.033582,599.602113,-766.149871,23.357838, 0.030866,-0.994332,0.101738,599.602117,-765.945157,29.449075, 0.105242,-0.993886,0.033402,624.955304,-764.585289,23.357838, 0.127347,-0.98669,0.101126,624.955308,-764.385936,29.28956, 0.603443,-0.29142,0.742247,464.090775,-642.024843,221.980973, 0.700875,-0.343846,0.624935,466.630436,-669.291161,206.575475, 0.707841,-0.243878,0.662936,466.630427,-641.212918,219.920255, 0.700875,-0.343846,0.624935,466.630436,-669.291161,206.575475, 0.603443,-0.29142,0.742247,464.090775,-642.024843,221.980973, 0.592261,-0.384709,0.707974,464.090784,-670.376318,208.506333, 0.867227,-0.397554,0.299779,767.829336,-647.197908,75.95025, 0.794465,-0.530011,0.296503,753.739286,-674.070091,73.511955, 0.867227,-0.434695,0.24281,767.829333,-655.602109,63.132805, 0.794465,-0.530011,0.296503,753.739286,-674.070091,73.511955, 0.867227,-0.397554,0.299779,767.829336,-647.197908,75.95025, 0.794465,-0.484664,0.36596,753.739289,-664.079301,88.749145, 0.999748,-0.019808,0.010545,473.717772,-740.196479,110.67556, 0.995804,-0.08571,0.032077,473.642065,-755.603683,86.09829, 0.999748,-0.02106,0.007747,473.717764,-752.465075,84.861676, 0.995804,-0.08571,0.032077,473.642065,-755.603683,86.09829, 0.999748,-0.019808,0.010545,473.717772,-740.196479,110.67556, 0.995804,-0.08054,0.043457,473.642074,-743.137303,112.328326, 0.251027,-0.016259,0.967844,455.00605,-549.612103,242.110623, 0.339245,0,0.940698,458.222196,-186.86272,241.116069, 0.20592,0,0.978569,455.00605,-186.86272,242.110623, 0.339245,0,0.940698,458.222196,-186.86272,241.116069, 0.251027,-0.016259,0.967844,455.00605,-549.612103,242.110623, 0.382469,-0.01552,0.923838,458.222196,-549.595395,241.116069, 0.999747,-0.000377,0.02248,473.71772,-549.195746,217.326639, 0.995804,-0.010878,0.090867,473.642039,-579.415029,219.678492, 0.999748,-0.002792,0.022266,473.717738,-579.071732,216.322569, 0.995804,-0.010878,0.090867,473.642039,-579.415029,219.678492, 0.999747,-0.000377,0.02248,473.71772,-549.195746,217.326639, 0.994417,-0.002312,0.105501,473.642021,-549.252285,220.6922, -0.796291,0.144172,-0.587481,732.466052,-584.996349,120.045264, -0.870211,0.051465,-0.489984,744.27504,-567.670824,104.873423, -0.870211,0.117753,-0.4784,744.275047,-580.75808,102.623043, -0.870211,0.051465,-0.489984,744.27504,-567.670824,104.873423, -0.796291,0.144172,-0.587481,732.466052,-584.996349,120.045264, -0.796291,0.062774,-0.601647,732.466044,-569.495502,122.710666, 0.932875,-0.350339,0.083707,472.107183,-770.747999,59.963422, 0.885205,-0.462786,0.04734,470.677482,-778.860284,30.770308, 0.940951,-0.336786,0.034451,472.107168,-775.82127,30.459429, 0.885205,-0.462786,0.04734,470.677482,-778.860284,30.770308, 0.932875,-0.350339,0.083707,472.107183,-770.747999,59.963422, 0.874212,-0.47211,0.113426,470.677497,-773.716304,60.685516, -0.638578,0.17117,-0.75028,445.721721,-605.178251,203.006401, -0.537771,0.08495,-0.8388,442.839452,-578.401496,209.770445, -0.649249,0.076378,-0.756731,445.721707,-578.184383,207.648051, -0.537771,0.08495,-0.8388,442.839452,-578.401496,209.770445, -0.638578,0.17117,-0.75028,445.721721,-605.178251,203.006401, -0.537771,0.198458,-0.8194,442.839466,-605.68255,205.079413, 0.999748,-0.013961,0.017568,473.717777,-684.199453,174.902175, 0.995804,-0.065815,0.063588,473.64208,-708.127668,158.505081, 0.999748,-0.016225,0.015501,473.717779,-705.742288,156.119701, 0.995804,-0.065815,0.063588,473.64208,-708.127668,158.505081, 0.999748,-0.013961,0.017568,473.717777,-684.199453,174.902175, 0.995804,-0.056536,0.071964,473.642079,-686.237536,177.590351, -0.537771,0.198458,-0.8194,442.839466,-605.68255,205.079413, -0.415875,0.091892,-0.904767,439.690582,-578.575874,211.475076, -0.537771,0.08495,-0.8388,442.839452,-578.401496,209.770445, -0.415875,0.091892,-0.904767,439.690582,-578.575874,211.475076, -0.537771,0.198458,-0.8194,442.839466,-605.68255,205.079413, -0.415875,0.214324,-0.883806,439.690597,-606.087584,206.744382, 0.973657,-0.024735,0.226671,473.101722,-579.75396,222.991746, 0.932875,-0.086574,0.349641,472.107183,-609.58601,221.125411, 0.973657,-0.055392,0.221186,473.101737,-608.824017,217.993091, 0.932875,-0.086574,0.349641,472.107183,-609.58601,221.125411, 0.973657,-0.024735,0.226671,473.101722,-579.75396,222.991746, 0.932875,-0.038122,0.358177,472.107168,-580.082016,226.198682, 0.79876,-0.143441,0.5843,468.840142,-610.976426,226.840986, 0.707841,-0.243878,0.662936,466.630427,-641.212918,219.920255, 0.79876,-0.221723,0.559304,468.840155,-640.279768,217.551861, 0.707841,-0.243878,0.662936,466.630427,-641.212918,219.920255, 0.79876,-0.143441,0.5843,468.840142,-610.976426,226.840986, 0.707841,-0.151267,0.689985,466.630415,-611.57814,229.314444, 0.928983,-0.005506,0.370082,472.10715,-549.362134,227.231115, 0.874212,-0.050786,0.482881,470.677482,-580.392895,229.237697, 0.932875,-0.038122,0.358177,472.107168,-580.082016,226.198682, 0.874212,-0.050786,0.482881,470.677482,-580.392895,229.237697, 0.928983,-0.005506,0.370082,472.10715,-549.362134,227.231115, 0.866918,-0.01021,0.498346,470.677463,-549.413334,230.278856, 0.991932,-0.101911,0.075398,792.007218,-589.846284,32.468209, 0.966794,-0.223491,0.12394,787.130189,-614.643058,40.113503, 0.991932,-0.111235,0.060808,792.007217,-592.860317,27.871437, 0.966794,-0.223491,0.12394,787.130189,-614.643058,40.113503, 0.991932,-0.101911,0.075398,792.007218,-589.846284,32.468209, 0.966794,-0.204518,0.153238,787.130191,-609.757662,47.564335, 0.969153,-0.229071,0.090936,787.130187,-618.467587,32.066457, 0.933102,-0.349421,0.085002,779.024159,-644.605714,29.276931, 0.966774,-0.246753,0.066789,787.130183,-621.159902,23.573317, 0.933102,-0.349421,0.085002,779.024159,-644.605714,29.276931, 0.969153,-0.229071,0.090936,787.130187,-618.467587,32.066457, 0.924993,-0.354039,0.138,779.024163,-640.917494,40.911739, 0.960042,-0.279856,-0,838.782877,-630.311015,-0, 0.932018,-0.362412,-0,827.969621,-662.165838,23.357838, 0.9153,-0.402772,-0,827.969621,-662.165838,-0, 0.932018,-0.362412,-0,827.969621,-662.165838,23.357838, 0.960042,-0.279856,-0,838.782877,-630.311015,-0, 0.971349,-0.237659,-0,838.782877,-630.311015,23.357838, -0.729928,0,-0.683524,127.443487,-280.29408,2030.583133, -0.812792,0,-0.582554,149.837908,-186.86272,2003.295453, -0.849252,0,-0.527988,149.837908,-280.29408,2003.295453, -0.812792,0,-0.582554,149.837908,-186.86272,2003.295453, -0.729928,0,-0.683524,127.443487,-280.29408,2030.583133, -0.683524,0,-0.729928,127.443487,-186.86272,2030.583133, 0.946935,-0,0.321426,123.089852,-186.86272,2224.766097, 0.957608,-0,0.288074,221.73981,-280.29408,2013.443961, 0.989572,-0,0.144037,221.73981,-186.86272,2013.443961, 0.957608,-0,0.288074,221.73981,-280.29408,2013.443961, 0.946935,-0,0.321426,123.089852,-186.86272,2224.766097, 0.976682,-0,0.214689,123.089852,-280.29408,2224.766097, 0.932875,-0.314728,0.175187,472.107204,-748.850999,115.539467, 0.874212,-0.45225,0.176701,470.677509,-764.543874,89.620732, 0.932875,-0.335664,0.130666,472.107195,-761.701654,88.500895, 0.874212,-0.45225,0.176701,470.677509,-764.543874,89.620732, 0.932875,-0.314728,0.175187,472.107204,-748.850999,115.539467, 0.874212,-0.423953,0.236679,470.677518,-751.514112,117.036157, -0.985345,0.149457,-0.082208,454.431271,-719.259121,98.908612, -0.999454,0.027255,-0.01868,454.797688,-702.539296,117.908241, -0.999454,0.029547,-0.014792,454.797683,-716.144717,97.158293, -0.999454,0.027255,-0.01868,454.797688,-702.539296,117.908241, -0.985345,0.149457,-0.082208,454.431271,-719.259121,98.908612, -0.985345,0.136861,-0.101808,454.431275,-705.386141,120.066621, 0.361665,-0.219818,0.906024,458.222231,-612.875739,234.648467, 0.487278,-0.319392,0.812741,461.269985,-642.699947,223.694428, 0.487278,-0.205664,0.848683,461.269972,-612.537006,233.256044, 0.487278,-0.319392,0.812741,461.269985,-642.699947,223.694428, 0.361665,-0.219818,0.906024,458.222231,-612.875739,234.648467, 0.361665,-0.341228,0.867619,458.222244,-643.22526,225.027705, -0.9698,0.09079,-0.226373,760.201824,-578.830801,61.590563, -0.993727,0.027914,-0.108296,764.031421,-566.356087,43.420852, -0.993727,0.042411,-0.103482,764.031423,-571.081703,41.922837, -0.993727,0.027914,-0.108296,764.031421,-566.356087,43.420852, -0.9698,0.09079,-0.226373,760.201824,-578.830801,61.590563, -0.9698,0.059096,-0.236633,760.201821,-571.352859,63.961061, -0.040706,0.929604,-0.366305,429.267763,-750.104609,83.931667, -0.150374,0.960557,-0.233917,432.83893,-758.353294,56.948209, -0.040706,0.970848,-0.236215,429.267752,-758.636494,57.017104, -0.150374,0.960557,-0.233917,432.83893,-758.353294,56.948209, -0.040706,0.929604,-0.366305,429.267763,-750.104609,83.931667, -0.150375,0.919722,-0.362627,432.838941,-749.833439,83.824825, -0.985345,0.063975,-0.158123,454.431263,-625.680129,180.496989, -0.999454,0.009337,-0.031696,454.797666,-600.717836,184.671001, -0.999454,0.013569,-0.030128,454.797676,-624.370524,177.173126, -0.999454,0.009337,-0.031696,454.797666,-600.717836,184.671001, -0.985345,0.063975,-0.158123,454.431263,-625.680129,180.496989, -0.985345,0.041831,-0.165366,454.431253,-601.562294,188.142314, 0.874212,-0.45225,0.176701,470.677509,-764.543874,89.620732, 0.79876,-0.584897,0.140986,468.840142,-776.463573,61.353839, 0.874212,-0.47211,0.113426,470.677497,-773.716304,60.685516, 0.79876,-0.584897,0.140986,468.840142,-776.463573,61.353839, 0.874212,-0.45225,0.176701,470.677509,-764.543874,89.620732, 0.79876,-0.56023,0.219373,468.840155,-767.174448,90.657181, -0.494423,0.808436,-0.31934,684.332887,-704.132939,65.818702, -0.599001,0.779767,-0.182103,702.221343,-699.124264,42.539571, -0.494423,0.84441,-0.206198,684.332878,-710.625471,45.337452, -0.599001,0.779767,-0.182103,702.221343,-699.124264,42.539571, -0.494423,0.808436,-0.31934,684.332887,-704.132939,65.818702, -0.606705,0.739249,-0.292265,702.221351,-693.120267,61.479696, 0.506559,-0.014482,0.862083,461.269937,-549.571376,239.686382, 0.583909,-0,0.811819,464.090728,-186.86272,237.849027, 0.466054,-0,0.884757,461.269937,-186.86272,239.686382, 0.583909,-0,0.811819,464.090728,-186.86272,237.849027, 0.506559,-0.014482,0.862083,461.269937,-549.571376,239.686382, 0.620913,-0.013167,0.783769,464.090728,-549.540509,237.849027, 0.030867,-0.971194,0.236282,599.602131,-761.101673,57.616723, 0,-0.938509,0.345255,473.717764,-752.465075,84.861676, 0,-0.976801,0.214147,473.717752,-761.101674,57.616782, 0,-0.938509,0.345255,473.717764,-752.465075,84.861676, 0.030867,-0.971194,0.236282,599.602131,-761.101673,57.616723, 0.030867,-0.929938,0.366419,599.602143,-752.465071,84.861627, -0.936465,0.339085,-0.089746,753.576403,-633.437458,26.560066, -0.96393,0.253712,-0.080426,760.201822,-613.067712,23.357838, -0.951243,0.299703,-0.072908,757.969157,-620.274076,23.357838, -0.96393,0.253712,-0.080426,760.201822,-613.067712,23.357838, -0.936465,0.339085,-0.089746,753.576403,-633.437458,26.560066, -0.9721,0.218065,-0.086424,760.201824,-611.21315,29.208214, -0.9721,0.218065,-0.086424,760.201824,-611.21315,29.208214, -0.936465,0.339085,-0.089746,753.576403,-633.437458,26.560066, -0.928388,0.346265,-0.134897,753.576407,-630.223631,36.698359, 0.00966,-0.995709,0.092029,448.317739,-791.272422,32.040027, 0,-0.976801,0.214147,0.000035,-785.83965,63.634954, 0,-0.994809,0.101765,0.000019,-791.272419,32.040275, 0,-0.976801,0.214147,0.000035,-785.83965,63.634954, 0.00966,-0.995709,0.092029,448.317739,-791.272422,32.040027, 0.01127,-0.9716,0.236362,448.317755,-785.839647,63.634744, -0.952384,0.073533,-0.295901,453.575549,-602.386639,191.530944, -0.985345,0.018907,-0.169523,454.43124,-576.627626,192.429881, -0.985345,0.041831,-0.165366,454.431253,-601.562294,188.142314, -0.985345,0.018907,-0.169523,454.43124,-576.627626,192.429881, -0.952384,0.073533,-0.295901,453.575549,-602.386639,191.530944, -0.952384,0.032525,-0.303161,453.575536,-576.982526,195.899232, 0.98147,-0.179832,0.066156,791.767078,-596.364536,23.357838, 0.966774,-0.246753,0.066789,787.130183,-621.159902,23.573317, 0.981395,-0.183023,0.058018,787.308111,-620.274132,23.357838, 0.966774,-0.246753,0.066789,787.130183,-621.159902,23.573317, 0.98147,-0.179832,0.066156,791.767078,-596.364536,23.357838, 0.969153,-0.229071,0.090936,787.130187,-618.467587,32.066457, 0.924993,-0.303632,0.228462,779.024169,-628.985711,62.142384, 0.867227,-0.434695,0.24281,767.829333,-655.602109,63.132805, 0.924993,-0.331932,0.184956,779.024167,-635.678246,51.93544, 0.867227,-0.434695,0.24281,767.829333,-655.602109,63.132805, 0.924993,-0.303632,0.228462,779.024169,-628.985711,62.142384, 0.867227,-0.397554,0.299779,767.829336,-647.197908,75.95025, 0.707841,-0.651123,0.273862,466.630427,-769.542842,91.59033, 0.611311,-0.685845,0.394863,464.090784,-758.12892,120.753731, 0.603443,-0.741548,0.293196,464.090775,-771.60356,92.402256, 0.611311,-0.685845,0.394863,464.090784,-758.12892,120.753731, 0.707841,-0.651123,0.273862,466.630427,-769.542842,91.59033, 0.717647,-0.602641,0.349008,466.630436,-756.198062,119.668573, -0.952384,0.266534,-0.148066,453.575567,-722.299342,100.61724, -0.985345,0.136861,-0.101808,454.431275,-705.386141,120.066621, -0.985345,0.149457,-0.082208,454.431271,-719.259121,98.908612, -0.985345,0.136861,-0.101808,454.431275,-705.386141,120.066621, -0.952384,0.266534,-0.148066,453.575567,-722.299342,100.61724, -0.952384,0.243872,-0.183005,453.575571,-708.165176,122.173591, 0,-0.016797,0.999859,0,-549.622587,242.726639, -0,-0,1,93.530885,-280.29408,242.726639, 0,0,1,0.000488,-280.29408,242.726639, -0,-0,1,93.530885,-280.29408,242.726639, 0,-0.016797,0.999859,0,-549.622587,242.726639, 0.012852,-0.014396,0.999814,448.31772,-549.622454,242.726639, -0,-0,1,93.530885,-280.29408,242.726639, 0.007496,-0,0.999972,448.31772,-186.86272,242.726639, -0,-0,1,93.530885,-186.86272,242.726639, 0.007496,-0,0.999972,448.31772,-186.86272,242.726639, -0,-0,1,93.530885,-280.29408,242.726639, 0.012852,-0.014396,0.999814,448.31772,-549.622454,242.726639, 0.277314,-0.016138,0.960644,649.884069,-549.087494,210.885907, 0.360344,0,0.932819,673.957328,-186.86272,202.77988, 0.234823,0,0.972038,649.884069,-186.86272,210.885907, 0.360344,0,0.932819,673.957328,-186.86272,202.77988, 0.277314,-0.016138,0.960644,649.884069,-549.087494,210.885907, 0.401003,-0.015387,0.915947,673.957328,-548.951312,202.77988, 0.499663,-0.754768,0.425045,696.7588,-717.703482,98.034266, 0.381503,-0.736251,0.558918,673.957381,-712.905798,125.767735, 0.381503,-0.805545,0.453379,673.957376,-727.485522,103.531853, 0.381503,-0.736251,0.558918,673.957381,-712.905798,125.767735, 0.499663,-0.754768,0.425045,696.7588,-717.703482,98.034266, 0.499663,-0.689808,0.523929,696.758805,-703.964135,118.988469, -0,0.938509,-0.345255,0.01629,-750.104623,83.931833, -0.040706,0.970848,-0.236215,429.267752,-758.636494,57.017104, -0,0.976801,-0.214147,0.016279,-758.636496,57.017305, -0.040706,0.970848,-0.236215,429.267752,-758.636494,57.017104, -0,0.938509,-0.345255,0.01629,-750.104623,83.931833, -0.040706,0.929604,-0.366305,429.267763,-750.104609,83.931667, -0.999454,0.031287,-0.010628,454.797676,-726.795714,74.747937, -0.999345,-0.03194,0.017004,454.667766,-713.015957,95.399907, -0.999345,-0.033959,0.012493,454.667758,-723.45653,73.432296, -0.999345,-0.03194,0.017004,454.667766,-713.015957,95.399907, -0.999454,0.031287,-0.010628,454.797676,-726.795714,74.747937, -0.999454,0.029547,-0.014792,454.797683,-716.144717,97.158293, 0.256673,-0.228081,0.939201,649.8841,-605.713302,205.206225, 0.381503,-0.338316,0.860231,673.957369,-629.139245,189.276665, 0.381503,-0.21794,0.898308,673.957358,-603.792753,197.311473, 0.381503,-0.338316,0.860231,673.957369,-629.139245,189.276665, 0.256673,-0.228081,0.939201,649.8841,-605.713302,205.206225, 0.256673,-0.353935,0.899361,649.884111,-632.117666,196.836073, -0.373111,0.862993,-0.340635,665.021379,-712.807071,69.236324, -0.494423,0.84441,-0.206198,684.332878,-710.625471,45.337452, -0.373111,0.90136,-0.219861,665.02137,-719.684398,47.541206, -0.494423,0.84441,-0.206198,684.332878,-710.625471,45.337452, -0.373111,0.862993,-0.340635,665.021379,-712.807071,69.236324, -0.494423,0.808436,-0.31934,684.332887,-704.132939,65.818702, -0.716622,0.0095,-0.697397,718.363068,-547.889718,139.587655, -0.7818,0,-0.623529,732.466031,-186.86272,123.445905, -0.795651,0.010475,-0.605664,732.466031,-547.618545,123.445905, -0.7818,0,-0.623529,732.466031,-186.86272,123.445905, -0.716622,0.0095,-0.697397,718.363068,-547.889718,139.587655, -0.691044,0,-0.722813,718.363068,-186.86272,139.587655, -0.373111,0.808526,-0.455054,665.021386,-703.037584,89.791929, -0.494423,0.808436,-0.31934,684.332887,-704.132939,65.818702, -0.373111,0.862993,-0.340635,665.021379,-712.807071,69.236324, -0.494423,0.808436,-0.31934,684.332887,-704.132939,65.818702, -0.373111,0.808526,-0.455054,665.021386,-703.037584,89.791929, -0.494423,0.75738,-0.426523,684.332893,-694.910066,85.224197, 0.966794,-0.204518,0.153238,787.130191,-609.757662,47.564335, 0.924993,-0.331932,0.184956,779.024167,-635.678246,51.93544, 0.966794,-0.223491,0.12394,787.130189,-614.643058,40.113503, 0.924993,-0.331932,0.184956,779.024167,-635.678246,51.93544, 0.966794,-0.204518,0.153238,787.130191,-609.757662,47.564335, 0.924993,-0.303632,0.228462,779.024169,-628.985711,62.142384, 0.794465,-0.14471,0.589818,753.739273,-589.30933,137.774661, 0.707841,-0.243878,0.662936,736.997686,-613.697356,150.084182, 0.794465,-0.223732,0.564597,753.73928,-606.678073,132.26879, 0.707841,-0.243878,0.662936,736.997686,-613.697356,150.084182, 0.794465,-0.14471,0.589818,753.739273,-589.30933,137.774661, 0.707841,-0.151267,0.689985,736.997677,-593.835505,156.380365, 0.487278,-0.088099,0.868791,461.269956,-581.352493,238.618284, 0.603443,-0.187559,0.775035,464.090763,-612.101686,231.466578, 0.603443,-0.080198,0.793363,464.090747,-581.165077,236.78619, 0.603443,-0.187559,0.775035,464.090763,-612.101686,231.466578, 0.487278,-0.088099,0.868791,461.269956,-581.352493,238.618284, 0.487278,-0.205664,0.848683,461.269972,-612.537006,233.256044, -0.606705,0.739249,-0.292265,702.221351,-693.120267,61.479696, -0.714681,0.677849,-0.172485,718.363091,-685.388881,39.198188, -0.599001,0.779767,-0.182103,702.221343,-699.124264,42.539571, -0.714681,0.677849,-0.172485,718.363091,-685.388881,39.198188, -0.606705,0.739249,-0.292265,702.221351,-693.120267,61.479696, -0.707841,0.651123,-0.273862,718.363098,-679.96832,56.297814, -0.150375,0.919722,-0.362627,432.838941,-749.833439,83.824825, -0.285905,0.930996,-0.226946,436.335601,-757.591911,56.762987, -0.150374,0.960557,-0.233917,432.83893,-758.353294,56.948209, -0.285905,0.930996,-0.226946,436.335601,-757.591911,56.762987, -0.150375,0.919722,-0.362627,432.838941,-749.833439,83.824825, -0.285905,0.891387,-0.351693,436.335613,-749.104397,83.53758, 0.01127,-0.9716,0.236362,448.317755,-785.839647,63.634744, 0,-0.938509,0.345255,0.000048,-776.152271,94.194624, 0,-0.976801,0.214147,0.000035,-785.83965,63.634954, 0,-0.938509,0.345255,0.000048,-776.152271,94.194624, 0.01127,-0.9716,0.236362,448.317755,-785.839647,63.634744, 0.011271,-0.930329,0.366553,448.317768,-776.152256,94.194451, -0.901181,0.378553,-0.211115,452.247009,-725.206979,102.251354, -0.952384,0.243872,-0.183005,453.575571,-708.165176,122.173591, -0.952384,0.266534,-0.148066,453.575567,-722.299342,100.61724, -0.952384,0.243872,-0.183005,453.575571,-708.165176,122.173591, -0.901181,0.378553,-0.211115,452.247009,-725.206979,102.251354, -0.901181,0.346254,-0.26073,452.247014,-710.823017,124.188674, -0.9698,0.213348,-0.118196,760.201826,-607.845772,36.293385, -0.993727,0.090031,-0.066344,764.031425,-586.699189,30.082194, -0.993727,0.098232,-0.053457,764.031424,-589.417442,25.936523, -0.993727,0.090031,-0.066344,764.031425,-586.699189,30.082194, -0.9698,0.213348,-0.118196,760.201826,-607.845772,36.293385, -0.9698,0.195252,-0.146165,760.201828,-603.544336,42.853607, -0.537771,0.671316,-0.510036,442.83949,-719.276356,130.597708, -0.649152,0.654437,-0.387703,445.72174,-732.59493,106.40344, -0.537771,0.734555,-0.413801,442.839485,-734.454802,107.448703, -0.649152,0.654437,-0.387703,445.72174,-732.59493,106.40344, -0.537771,0.671316,-0.510036,442.83949,-719.276356,130.597708, -0.649152,0.595502,-0.473264,445.721745,-717.576266,129.308758, -0.707841,0.055835,-0.704162,718.363082,-571.142012,138.806193, -0.613495,0.011257,-0.789618,702.221319,-548.126642,153.690618, -0.716622,0.0095,-0.697397,718.363068,-547.889718,139.587655, -0.613495,0.011257,-0.789618,702.221319,-548.126642,153.690618, -0.707841,0.055835,-0.704162,718.363082,-571.142012,138.806193, -0.606705,0.079969,-0.790894,702.221333,-572.580561,152.868772, -0.285905,0.76333,-0.579298,436.335626,-721.646389,132.394587, -0.415875,0.792474,-0.446131,439.690616,-735.948584,108.28822, -0.285905,0.835148,-0.469878,436.335621,-737.047581,108.905866, -0.415875,0.792474,-0.446131,439.690616,-735.948584,108.28822, -0.285905,0.76333,-0.579298,436.335626,-721.646389,132.394587, -0.415875,0.72429,-0.549957,439.690621,-720.641807,131.632947, -0.691044,0,-0.722813,718.363068,-186.86272,139.587655, -0.613495,0.011257,-0.789618,702.221319,-548.126642,153.690618, -0.605809,0,-0.79561,702.221319,-186.86272,153.690618, -0.613495,0.011257,-0.789618,702.221319,-548.126642,153.690618, -0.691044,0,-0.722813,718.363068,-186.86272,139.587655, -0.716622,0.0095,-0.697397,718.363068,-547.889718,139.587655, 0.999748,-0.02106,0.007747,473.717764,-752.465075,84.861676, 0.995804,-0.089282,0.020098,473.642053,-764.379515,58.414175, 0.999748,-0.021919,0.004805,473.717752,-761.101674,57.616782, 0.995804,-0.089282,0.020098,473.642053,-764.379515,58.414175, 0.999748,-0.02106,0.007747,473.717764,-752.465075,84.861676, 0.995804,-0.08571,0.032077,473.642065,-755.603683,86.09829, -0.438529,0.898717,-0,629.962605,-661.494594,5.83946, -0.374833,0.927092,-0,617.239549,-667.162466,-0, -0.342242,0.939612,-0,617.239549,-667.162466,5.83946, -0.374833,0.927092,-0,617.239549,-667.162466,-0, -0.438529,0.898717,-0,629.962605,-661.494594,5.83946, -0.469634,0.882861,-0,629.962605,-661.494594,-0, -0.022557,0.236303,-0.971418,602.13328,-599.869416,181.183686, -0,0.124431,-0.992228,454.667737,-575.898832,185.305489, -0.022557,0.101727,-0.994557,602.133267,-575.89875,185.30549, -0,0.124431,-0.992228,454.667737,-575.898832,185.305489, -0.022557,0.236303,-0.971418,602.13328,-599.869416,181.183686, -0,0.258478,-0.966017,454.667749,-599.869485,181.183687, -0.881047,0.459625,-0.111811,744.275047,-652.24563,31.135492, -0.928388,0.346265,-0.134897,753.576407,-630.223631,36.698359, -0.936465,0.339085,-0.089746,753.576403,-633.437458,26.560066, -0.928388,0.346265,-0.134897,753.576407,-630.223631,36.698359, -0.881047,0.459625,-0.111811,744.275047,-652.24563,31.135492, -0.870211,0.458871,-0.17936,744.275052,-648.232891,43.794023, 0.79876,-0.062483,0.598396,468.840127,-580.680624,232.05041, 0.707841,-0.151267,0.689985,466.630415,-611.57814,229.314444, 0.79876,-0.143441,0.5843,468.840142,-610.976426,226.840986, 0.707841,-0.151267,0.689985,466.630415,-611.57814,229.314444, 0.79876,-0.062483,0.598396,468.840127,-580.680624,232.05041, 0.707841,-0.055835,0.704162,466.630399,-580.939677,234.58279, -0.748179,0.617743,-0.242119,448.282005,-742.014746,80.744249, -0.832687,0.483376,-0.27015,450.47112,-727.926176,103.779563, -0.832687,0.515679,-0.201762,450.471112,-739.369533,79.702032, -0.832687,0.483376,-0.27015,450.47112,-727.926176,103.779563, -0.748179,0.617743,-0.242119,448.282005,-742.014746,80.744249, -0.748179,0.578988,-0.324038,448.282012,-730.404697,105.172511, 0.603443,-0.080198,0.793363,464.090747,-581.165077,236.78619, 0.707841,-0.151267,0.689985,466.630415,-611.57814,229.314444, 0.707841,-0.055835,0.704162,466.630399,-580.939677,234.58279, 0.707841,-0.151267,0.689985,466.630415,-611.57814,229.314444, 0.603443,-0.080198,0.793363,464.090747,-581.165077,236.78619, 0.603443,-0.187559,0.775035,464.090763,-612.101686,231.466578, 0.361665,-0.094307,0.927526,458.222215,-581.498327,240.043877, 0.487278,-0.205664,0.848683,461.269972,-612.537006,233.256044, 0.487278,-0.088099,0.868791,461.269956,-581.352493,238.618284, 0.487278,-0.205664,0.848683,461.269972,-612.537006,233.256044, 0.361665,-0.094307,0.927526,458.222215,-581.498327,240.043877, 0.361665,-0.219818,0.906024,458.222231,-612.875739,234.648467, -0.683524,0,-0.729928,127.443487,-186.86272,2030.583133, -0.582554,0,-0.812792,100.155807,-280.29408,2052.977553, -0.527988,0,-0.849252,100.155807,-186.86272,2052.977553, -0.582554,0,-0.812792,100.155807,-280.29408,2052.977553, -0.683524,0,-0.729928,127.443487,-186.86272,2030.583133, -0.729928,0,-0.683524,127.443487,-280.29408,2030.583133, -0.227168,0,0.973856,35.238106,-280.29408,1394.271064, -0.352162,0,0.935939,69.013887,-186.86272,1404.516835, -0.162803,0,0.986659,35.238106,-186.86272,1394.271064, -0.352162,0,0.935939,69.013887,-186.86272,1404.516835, -0.227168,0,0.973856,35.238106,-280.29408,1394.271064, -0.412792,0,0.910825,69.013887,-280.29408,1404.516835, -0.415875,0.792474,-0.446131,439.690616,-735.948584,108.28822, -0.537771,0.78409,-0.309846,442.839477,-746.337241,82.447316, -0.415875,0.845875,-0.333982,439.690608,-747.931487,83.075452, -0.537771,0.78409,-0.309846,442.839477,-746.337241,82.447316, -0.415875,0.792474,-0.446131,439.690616,-735.948584,108.28822, -0.537771,0.734555,-0.413801,442.839485,-734.454802,107.448703, 0.041063,-0.016783,0.999016,599.602099,-549.195708,217.326639, 0.127347,-0.100746,0.986728,624.955308,-578.912147,214.763349, 0.148826,-0.01661,0.988724,624.95529,-549.169432,215.762941, 0.127347,-0.100746,0.986728,624.955308,-578.912147,214.763349, 0.041063,-0.016783,0.999016,599.602099,-549.195708,217.326639, 0.030866,-0.101695,0.994337,599.602117,-579.071663,216.32257, 0,-0.258478,0.966017,0.000035,-613.257542,236.217062, 0.011271,-0.366548,0.930331,448.317768,-643.817038,226.529669, 0.01127,-0.236356,0.971601,448.317755,-613.257332,236.21706, 0.011271,-0.366548,0.930331,448.317768,-643.817038,226.529669, 0,-0.258478,0.966017,0.000035,-613.257542,236.217062, 0,-0.387702,0.921785,0.000048,-643.817211,226.529683, 0,-0.124431,0.992228,473.717738,-579.071732,216.322569, 0.030867,-0.23624,0.971204,599.602131,-607.23931,211.479086, 0.030866,-0.101695,0.994337,599.602117,-579.071663,216.32257, 0.030867,-0.23624,0.971204,599.602131,-607.23931,211.479086, 0,-0.124431,0.992228,473.717738,-579.071732,216.322569, 0,-0.258478,0.966017,473.717752,-607.239369,211.479086, 0.924993,-0.354039,0.138,779.024163,-640.917494,40.911739, 0.87794,-0.465203,0.113169,767.829322,-666.812843,34.679214, 0.933102,-0.349421,0.085002,779.024159,-644.605714,29.276931, 0.87794,-0.465203,0.113169,767.829322,-666.812843,34.679214, 0.924993,-0.354039,0.138,779.024163,-640.917494,40.911739, 0.867227,-0.463727,0.18131,767.829328,-662.181333,49.28971, 0.999748,-0.002792,0.022266,473.717738,-579.071732,216.322569, 0.995804,-0.023158,0.088537,473.642053,-608.036762,214.756927, 0.999748,-0.0058,0.021677,473.717752,-607.239369,211.479086, 0.995804,-0.023158,0.088537,473.642053,-608.036762,214.756927, 0.999748,-0.002792,0.022266,473.717738,-579.071732,216.322569, 0.995804,-0.010878,0.090867,473.642039,-579.415029,219.678492, -0.373111,0.655639,-0.656449,665.021391,-675.601701,125.979113, -0.494423,0.692194,-0.52575,684.332897,-683.128909,103.191916, -0.373111,0.738976,-0.560984,665.02139,-690.558191,108.824546, -0.494423,0.692194,-0.52575,684.332897,-683.128909,103.191916, -0.373111,0.655639,-0.656449,665.021391,-675.601701,125.979113, -0.494423,0.614096,-0.615169,684.332898,-669.009253,119.386665, -0.9698,0.0263,-0.242479,760.201817,-563.621651,65.290458, -0.9937,0.002257,-0.112046,764.031409,-546.296855,44.770904, -0.993727,0.012896,-0.111089,764.031418,-561.470422,44.260952, -0.9937,0.002257,-0.112046,764.031409,-546.296855,44.770904, -0.9698,0.0263,-0.242479,760.201817,-563.621651,65.290458, -0.969674,0.004471,-0.24436,760.201807,-546.651151,65.860802, 0.229024,-0.098699,0.968404,455.006069,-581.599776,241.035583, 0.361665,-0.219818,0.906024,458.222231,-612.875739,234.648467, 0.361665,-0.094307,0.927526,458.222215,-581.498327,240.043877, 0.361665,-0.219818,0.906024,458.222231,-612.875739,234.648467, 0.229024,-0.098699,0.968404,455.006069,-581.599776,241.035583, 0.229025,-0.229739,0.945922,455.006085,-613.111378,235.617099, -0.985345,0.041831,-0.165366,454.431253,-601.562294,188.142314, -0.999454,0.00493,-0.032673,454.797654,-576.264066,188.875876, -0.999454,0.009337,-0.031696,454.797666,-600.717836,184.671001, -0.999454,0.00493,-0.032673,454.797654,-576.264066,188.875876, -0.985345,0.041831,-0.165366,454.431253,-601.562294,188.142314, -0.985345,0.018907,-0.169523,454.43124,-576.627626,192.429881, -0.9698,0.059096,-0.236633,760.201821,-571.352859,63.961061, -0.993727,0.012896,-0.111089,764.031418,-561.470422,44.260952, -0.993727,0.027914,-0.108296,764.031421,-566.356087,43.420852, -0.993727,0.012896,-0.111089,764.031418,-561.470422,44.260952, -0.9698,0.059096,-0.236633,760.201821,-571.352859,63.961061, -0.9698,0.0263,-0.242479,760.201817,-563.621651,65.290458, 0.973657,-0.055392,0.221186,473.101737,-608.824017,217.993091, 0.932875,-0.133411,0.334583,472.107195,-638.123482,212.079066, 0.973657,-0.085015,0.211575,473.101749,-636.941768,209.079797, 0.932875,-0.133411,0.334583,472.107195,-638.123482,212.079066, 0.973657,-0.055392,0.221186,473.101737,-608.824017,217.993091, 0.932875,-0.086574,0.349641,472.107183,-609.58601,221.125411, 0.999748,-0.0087,0.020685,473.717764,-634.484263,202.842487, 0.995804,-0.046203,0.078997,473.642074,-661.950913,193.514715, 0.999748,-0.011437,0.019306,473.717772,-660.298148,190.573891, 0.995804,-0.046203,0.078997,473.642074,-661.950913,193.514715, 0.999748,-0.0087,0.020685,473.717764,-634.484263,202.842487, 0.995804,-0.035007,0.084556,473.642065,-635.720877,205.981096, -0.244971,0.845012,-0.475335,644.636259,-708.826871,93.045557, -0.373111,0.862993,-0.340635,665.021379,-712.807071,69.236324, -0.244971,0.901902,-0.355754,644.636252,-718.985715,71.670721, -0.373111,0.862993,-0.340635,665.021379,-712.807071,69.236324, -0.244971,0.845012,-0.475335,644.636259,-708.826871,93.045557, -0.373111,0.808526,-0.455054,665.021386,-703.037584,89.791929, -0.9721,0.218065,-0.086424,760.201824,-611.21315,29.208214, -0.99093,0.121368,-0.057682,764.031423,-590.643016,23.357838, -0.983984,0.16585,-0.065345,763.093075,-596.364509,23.357838, -0.99093,0.121368,-0.057682,764.031423,-590.643016,23.357838, -0.9721,0.218065,-0.086424,760.201824,-611.21315,29.208214, -0.993727,0.098232,-0.053457,764.031424,-589.417442,25.936523, -0.993727,0.098232,-0.053457,764.031424,-589.417442,25.936523, -0.9721,0.218065,-0.086424,760.201824,-611.21315,29.208214, -0.9698,0.213348,-0.118196,760.201826,-607.845772,36.293385, -0.748179,0.529432,-0.399912,448.282017,-715.574197,127.790857, -0.832687,0.392486,-0.390624,450.471126,-695.789522,146.166935, -0.832687,0.442054,-0.333498,450.471124,-713.308606,126.073164, -0.832687,0.392486,-0.390624,450.471126,-695.789522,146.166935, -0.748179,0.529432,-0.399912,448.282017,-715.574197,127.790857, -0.748179,0.469999,-0.468325,448.282019,-697.799917,148.177329, 0.499663,-0.805647,0.318231,696.758793,-728.459324,75.40331, 0.381503,-0.805545,0.453379,673.957376,-727.485522,103.531853, 0.381503,-0.859811,0.339381,673.957369,-738.899253,79.516658, 0.381503,-0.805545,0.453379,673.957376,-727.485522,103.531853, 0.499663,-0.805647,0.318231,696.758793,-728.459324,75.40331, 0.499663,-0.754768,0.425045,696.7588,-717.703482,98.034266, 0.256673,-0.842365,0.473857,649.884119,-734.568562,107.512581, 0.127347,-0.790262,0.59939,624.955347,-723.275771,133.6299, 0.127347,-0.864568,0.486113,624.955342,-738.83011,109.90761, 0.127347,-0.790262,0.59939,624.955347,-723.275771,133.6299, 0.256673,-0.842365,0.473857,649.884119,-734.568562,107.512581, 0.256673,-0.769937,0.584223,649.884124,-719.380332,130.676509, 0.932875,-0.335664,0.130666,472.107195,-761.701654,88.500895, 0.874212,-0.47211,0.113426,470.677497,-773.716304,60.685516, 0.932875,-0.350339,0.083707,472.107183,-770.747999,59.963422, 0.874212,-0.47211,0.113426,470.677497,-773.716304,60.685516, 0.932875,-0.335664,0.130666,472.107195,-761.701654,88.500895, 0.874212,-0.45225,0.176701,470.677509,-764.543874,89.620732, -0.040706,0.970848,-0.236215,429.267752,-758.636494,57.017104, -0.150374,0.983472,-0.100844,432.838915,-763.131306,29.161323, -0.040706,0.99398,-0.101718,429.267738,-763.421251,29.190985, -0.150374,0.983472,-0.100844,432.838915,-763.131306,29.161323, -0.040706,0.970848,-0.236215,429.267752,-758.636494,57.017104, -0.150374,0.960557,-0.233917,432.83893,-758.353294,56.948209, -0.040706,0.706494,-0.706547,429.267778,-703.948313,154.325725, -0.150375,0.787661,-0.597476,432.838954,-722.270805,132.867998, -0.040706,0.796183,-0.603686,429.267777,-722.503059,133.044086, -0.150375,0.787661,-0.597476,432.838954,-722.270805,132.867998, -0.040706,0.706494,-0.706547,429.267778,-703.948313,154.325725, -0.150375,0.698898,-0.699234,432.838956,-703.74222,154.119632, -0.656747,0.730839,-0.185896,445.721721,-752.628988,55.555664, -0.754707,0.651908,-0.073718,448.28198,-754.771252,28.306118, -0.649249,0.756522,-0.078421,445.721707,-757.270639,28.561795, -0.754707,0.651908,-0.073718,448.28198,-754.771252,28.306118, -0.656747,0.730839,-0.185896,445.721721,-752.628988,55.555664, -0.757296,0.632534,-0.162491,448.281994,-750.187755,54.961789, 0.361665,-0.742579,0.563715,458.222259,-743.526109,148.983038, 0.229025,-0.688056,0.688568,455.006115,-723.308225,173.685638, 0.229025,-0.775467,0.588387,455.006113,-744.32049,149.585311, 0.229025,-0.688056,0.688568,455.006115,-723.308225,173.685638, 0.361665,-0.742579,0.563715,458.222259,-743.526109,148.983038, 0.361665,-0.658837,0.659646,458.22226,-722.603323,172.980735, -0.748179,0.469999,-0.468325,448.282019,-697.799917,148.177329, -0.832687,0.335596,-0.440463,450.471124,-675.695751,163.686019, -0.832687,0.392486,-0.390624,450.471126,-695.789522,146.166935, -0.832687,0.335596,-0.440463,450.471124,-675.695751,163.686019, -0.748179,0.469999,-0.468325,448.282019,-697.799917,148.177329, -0.748179,0.401798,-0.528002,448.282017,-677.413444,165.951609, 0.932875,-0.255741,0.253655,472.107211,-712.762199,163.139612, 0.874212,-0.387747,0.292242,470.677524,-734.870094,142.420342, 0.932875,-0.28792,0.21644,472.107209,-732.43577,140.574721, 0.874212,-0.387747,0.292242,470.677524,-734.870094,142.420342, 0.932875,-0.255741,0.253655,472.107211,-712.762199,163.139612, 0.874212,-0.344308,0.342352,470.677525,-714.922322,165.299734, 0.874212,-0.344308,0.342352,470.677525,-714.922322,165.299734, 0.79876,-0.480196,0.362483,468.840169,-737.123146,144.128529, 0.874212,-0.387747,0.292242,470.677524,-734.870094,142.420342, 0.79876,-0.480196,0.362483,468.840169,-737.123146,144.128529, 0.874212,-0.344308,0.342352,470.677525,-714.922322,165.299734, 0.79876,-0.426323,0.424536,468.840171,-716.92159,167.299002, 0.011271,-0.930329,0.366553,448.317768,-776.152256,94.194451, 0,-0.882708,0.469921,0.000057,-762.391004,123.149179, 0,-0.938509,0.345255,0.000048,-776.152271,94.194624, 0,-0.882708,0.469921,0.000057,-762.391004,123.149179, 0.011271,-0.930329,0.366553,448.317768,-776.152256,94.194451, 0.011271,-0.871702,0.489906,448.317778,-762.390973,123.149041, -0.999454,0.024455,-0.02222,454.797689,-686.233268,136.610681, -0.999345,-0.022513,0.028328,454.66777,-665.3625,150.056742, -0.999345,-0.026163,0.024996,454.667771,-683.695448,134.072861, -0.999345,-0.022513,0.028328,454.66777,-665.3625,150.056742, -0.999454,0.024455,-0.02222,454.797689,-686.233268,136.610681, -0.999454,0.021199,-0.025346,454.797688,-667.530829,152.916709, -0.537771,0.308263,-0.784714,442.839477,-632.069904,196.714653, -0.415875,0.214324,-0.883806,439.690597,-606.087584,206.744382, -0.537771,0.198458,-0.8194,442.839466,-605.68255,205.079413, -0.415875,0.214324,-0.883806,439.690597,-606.087584,206.744382, -0.537771,0.308263,-0.784714,442.839477,-632.069904,196.714653, -0.415875,0.332758,-0.846357,439.690608,-632.698039,198.308899, -0.748179,0.578988,-0.324038,448.282012,-730.404697,105.172511, -0.832687,0.442054,-0.333498,450.471124,-713.308606,126.073164, -0.832687,0.483376,-0.27015,450.47112,-727.926176,103.779563, -0.832687,0.442054,-0.333498,450.471124,-713.308606,126.073164, -0.748179,0.578988,-0.324038,448.282012,-730.404697,105.172511, -0.748179,0.529432,-0.399912,448.282017,-715.574197,127.790857, -0.415875,0.091892,-0.904767,439.690582,-578.575874,211.475076, -0.285329,0.015988,-0.958296,436.33557,-549.135218,213.722949, -0.41512,0.01512,-0.909641,439.690565,-549.114088,212.465226, -0.285329,0.015988,-0.958296,436.33557,-549.135218,213.722949, -0.415875,0.091892,-0.904767,439.690582,-578.575874,211.475076, -0.285905,0.097067,-0.953329,436.335587,-578.704167,212.729198, -0.832687,0.204213,-0.514714,450.471112,-629.324619,189.746946, -0.901181,0.103838,-0.42082,452.246991,-603.175034,194.771794, -0.901181,0.160213,-0.402745,452.247002,-628.181199,186.84487, -0.901181,0.103838,-0.42082,452.246991,-603.175034,194.771794, -0.832687,0.204213,-0.514714,450.471112,-629.324619,189.746946, -0.832687,0.13217,-0.53774,450.471101,-603.912334,197.80261, 0.381503,-0.91951,0.094637,673.957345,-751.440053,27.965226, 0.256673,-0.939019,0.228829,649.8841,-754.828812,56.090715, 0.256672,-0.961442,0.098738,649.884086,-759.522868,28.792076, 0.256673,-0.939019,0.228829,649.8841,-754.828812,56.090715, 0.381503,-0.91951,0.094637,673.957345,-751.440053,27.965226, 0.381503,-0.898037,0.219052,673.957358,-746.934061,54.170165, 0.625544,-0.013105,0.780079,717.89403,-548.526532,177.494989, 0.691408,-0,0.722464,736.997652,-186.86272,160.753391, 0.590628,-0,0.806944,717.89403,-186.86272,177.494989, 0.691408,-0,0.722464,736.997652,-186.86272,160.753391, 0.625544,-0.013105,0.780079,717.89403,-548.526532,177.494989, 0.716411,-0.0095,0.697614,736.997652,-548.24528,160.753391, -0.022557,0.36647,-0.930156,602.133289,-623.054827,173.833938, -0,0.258478,-0.966017,454.667749,-599.869485,181.183687, -0.022557,0.236303,-0.971418,602.13328,-599.869416,181.183686, -0,0.258478,-0.966017,454.667749,-599.869485,181.183687, -0.022557,0.36647,-0.930156,602.133289,-623.054827,173.833938, -0,0.387702,-0.921785,454.667758,-623.054884,173.833943, 0.499663,-0.689808,0.523929,696.758805,-703.964135,118.988469, 0.381503,-0.653222,0.654031,673.957383,-695.432071,145.809483, 0.381503,-0.736251,0.558918,673.957381,-712.905798,125.767735, 0.381503,-0.653222,0.654031,673.957383,-695.432071,145.809483, 0.499663,-0.689808,0.523929,696.758805,-703.964135,118.988469, 0.499663,-0.61198,0.61304,696.758806,-687.497596,137.875009, -0.901181,0.40379,-0.157562,452.247002,-736.467457,78.558611, -0.952384,0.266534,-0.148066,453.575567,-722.299342,100.61724, -0.952384,0.284225,-0.110366,453.575559,-733.364268,77.335952, -0.952384,0.266534,-0.148066,453.575567,-722.299342,100.61724, -0.901181,0.40379,-0.157562,452.247002,-736.467457,78.558611, -0.901181,0.378553,-0.211115,452.247009,-725.206979,102.251354, 0.381503,-0.805545,0.453379,673.957376,-727.485522,103.531853, 0.256673,-0.769937,0.584223,649.884124,-719.380332,130.676509, 0.256673,-0.842365,0.473857,649.884119,-734.568562,107.512581, 0.256673,-0.769937,0.584223,649.884124,-719.380332,130.676509, 0.381503,-0.805545,0.453379,673.957376,-727.485522,103.531853, 0.381503,-0.736251,0.558918,673.957381,-712.905798,125.767735, -0.606606,0.46573,-0.644302,702.22136,-645.663324,124.074113, -0.494423,0.4252,-0.758123,684.332893,-634.846784,145.287478, -0.595888,0.383438,-0.705615,702.221357,-629.047597,134.968788, -0.494423,0.4252,-0.758123,684.332893,-634.846784,145.287478, -0.606606,0.46573,-0.644302,702.22136,-645.663324,124.074113, -0.494423,0.524541,-0.693111,684.332897,-652.814504,133.506322, -0.244971,0.585448,-0.772813,644.636264,-662.459295,146.227532, -0.112343,0.486683,-0.866325,623.546362,-644.548798,162.550587, -0.244971,0.474679,-0.845381,644.636259,-642.668145,159.204284, -0.112343,0.486683,-0.866325,623.546362,-644.548798,162.550587, -0.244971,0.585448,-0.772813,644.636264,-662.459295,146.227532, -0.112343,0.600194,-0.791925,623.546367,-664.778393,149.286355, 0.030867,-0.871333,0.489721,599.602151,-740.19647,110.675522, 0,-0.81044,0.585821,473.717777,-724.524762,134.576865, 0,-0.882708,0.469921,473.717772,-740.196479,110.67556, 0,-0.81044,0.585821,473.717777,-724.524762,134.576865, 0.030867,-0.871333,0.489721,599.602151,-740.19647,110.675522, 0.030867,-0.796473,0.603886,599.602156,-724.524748,134.576836, 0.993395,-0.114677,0.003853,473.642035,-769.517334,23.357838, 0.978666,-0.204393,0.020908,473.101722,-772.614333,30.131373, 0.967989,-0.250852,0.00843,473.101718,-772.841978,23.357838, 0.978666,-0.204393,0.020908,473.101722,-772.614333,30.131373, 0.993395,-0.114677,0.003853,473.642035,-769.517334,23.357838, 0.997653,-0.068124,0.006968,473.642039,-769.30108,29.792441, -0.040706,0.603626,-0.796228,429.267777,-682.666673,172.880471, -0,0.509694,-0.860356,0.016298,-659.055291,188.362206, -0.040706,0.489496,-0.871055,429.267772,-659.055159,188.362176, -0,0.509694,-0.860356,0.016298,-659.055291,188.362206, -0.040706,0.603626,-0.796228,429.267777,-682.666673,172.880471, -0,0.622177,-0.782877,0.016303,-682.666775,172.880521, -0.150375,0.597097,-0.787948,432.838954,-682.490586,172.648217, -0.040706,0.489496,-0.871055,429.267772,-659.055159,188.362176, -0.150375,0.484157,-0.861963,432.838949,-658.912362,188.108094, -0.040706,0.489496,-0.871055,429.267772,-659.055159,188.362176, -0.150375,0.597097,-0.787948,432.838954,-682.490586,172.648217, -0.040706,0.603626,-0.796228,429.267777,-682.666673,172.880471, 0.707932,-0.427595,0.562134,466.630442,-695.289055,189.529057, 0.603343,-0.550894,0.576621,464.090792,-720.287768,170.665181, 0.707932,-0.500206,0.498623,466.630444,-718.721598,169.09901, 0.603343,-0.550894,0.576621,464.090792,-720.287768,170.665181, 0.707932,-0.427595,0.562134,466.630442,-695.289055,189.529057, 0.603343,-0.467182,0.646311,464.09079,-696.627201,191.294034, 0.011271,-0.604116,0.796817,448.317783,-699.580941,195.189934, 0.091928,-0.70401,0.704215,451.683346,-723.691181,174.068594, 0.091928,-0.601482,0.793579,451.683345,-699.535099,195.12947, 0.091928,-0.70401,0.704215,451.683346,-723.691181,174.068594, 0.011271,-0.604116,0.796817,448.317783,-699.580941,195.189934, 0.011271,-0.70706,0.707064,448.317785,-723.744835,174.122247, -0.150375,0.362184,-0.919897,432.838941,-633.447412,200.210852, -0.040706,0.236142,-0.970866,429.267752,-606.639691,209.013907, -0.150374,0.233455,-0.96067,432.83893,-606.570796,208.730707, -0.040706,0.236142,-0.970866,429.267752,-606.639691,209.013907, -0.150375,0.362184,-0.919897,432.838941,-633.447412,200.210852, -0.040706,0.366235,-0.929632,429.267763,-633.554255,200.482022, 0.091928,-0.235232,0.967582,451.683317,-613.239395,236.143333, 0.229025,-0.356494,0.905793,455.006098,-643.590692,225.955193, 0.229025,-0.229739,0.945922,455.006085,-613.111378,235.617099, 0.229025,-0.356494,0.905793,455.006098,-643.590692,225.955193, 0.091928,-0.235232,0.967582,451.683317,-613.239395,236.143333, 0.091928,-0.364886,0.926503,451.68333,-643.789223,226.459074, 0,0,1,0.179984,-280.29408,2125.502553, 0,0,1,46.868397,-186.86272,2125.502553, 0,0,1,0.179984,-186.86272,2125.502553, 0,0,1,46.868397,-186.86272,2125.502553, 0,0,1,0.179984,-280.29408,2125.502553, 0,0,1,46.868397,-280.29408,2125.502553, -0.606606,0.46573,-0.644302,702.22136,-645.663324,124.074113, -0.701084,0.343733,-0.624763,718.363103,-622.121887,122.645633, -0.707932,0.427569,-0.562154,718.363107,-637.122986,112.809644, -0.701084,0.343733,-0.624763,718.363103,-622.121887,122.645633, -0.606606,0.46573,-0.644302,702.22136,-645.663324,124.074113, -0.595888,0.383438,-0.705615,702.221357,-629.047597,134.968788, 0.783922,-0.620509,0.020854,468.840122,-781.931785,23.357838, 0.714887,-0.69482,0.078501,466.630399,-784.205377,31.31709, 0.690548,-0.722878,0.024294,466.630394,-784.472872,23.357838, 0.714887,-0.69482,0.078501,466.630399,-784.205377,31.31709, 0.783922,-0.620509,0.020854,468.840122,-781.931785,23.357838, 0.812465,-0.579983,0.059329,468.840127,-781.672997,31.058037, -0.952384,0.216659,-0.21453,453.575573,-691.225448,141.602861, -0.985345,0.104291,-0.134978,454.431275,-669.689209,155.763554, -0.985345,0.121711,-0.119507,454.431277,-688.759444,139.136857, -0.985345,0.104291,-0.134978,454.431275,-669.689209,155.763554, -0.952384,0.216659,-0.21453,453.575573,-691.225448,141.602861, -0.952384,0.185405,-0.242052,453.575571,-671.796178,158.542589, 0.229024,-0.96833,0.09942,455.006069,-790.65817,31.977188, 0.091928,-0.967513,0.235514,451.683317,-785.765921,63.616808, 0.091928,-0.990581,0.101478,451.683301,-791.19694,32.032304, 0.091928,-0.967513,0.235514,451.683317,-785.765921,63.616808, 0.229024,-0.96833,0.09942,455.006069,-790.65817,31.977188, 0.229025,-0.94575,0.230443,455.006085,-785.239687,63.48879, -0.796291,0.366435,-0.481296,732.466066,-627.348021,99.916734, -0.870211,0.242544,-0.428841,744.275056,-605.410265,92.910065, -0.870211,0.298718,-0.391791,744.275058,-616.515297,85.628667, -0.870211,0.242544,-0.428841,744.275056,-605.410265,92.910065, -0.796291,0.366435,-0.481296,732.466066,-627.348021,99.916734, -0.796291,0.297433,-0.526739,732.466063,-614.194966,108.540989, 0.487278,-0.205664,0.848683,461.269972,-612.537006,233.256044, 0.603443,-0.29142,0.742247,464.090775,-642.024843,221.980973, 0.603443,-0.187559,0.775035,464.090763,-612.101686,231.466578, 0.603443,-0.29142,0.742247,464.090775,-642.024843,221.980973, 0.487278,-0.205664,0.848683,461.269972,-612.537006,233.256044, 0.487278,-0.319392,0.812741,461.269985,-642.699947,223.694428, -0.112343,0.600194,-0.791925,623.546367,-664.778393,149.286355, -0.022557,0.4898,-0.871543,602.133296,-645.022449,163.39336, -0.112343,0.486683,-0.866325,623.546362,-644.548798,162.550587, -0.022557,0.4898,-0.871543,602.133296,-645.022449,163.39336, -0.112343,0.600194,-0.791925,623.546367,-664.778393,149.286355, -0.022557,0.603993,-0.79667,602.133301,-665.362465,150.056725, -0,0.723053,-0.690793,0.016305,-703.948386,154.325799, -0.040706,0.796183,-0.603686,429.267777,-722.503059,133.044086, -0,0.81044,-0.585821,0.016303,-722.503108,133.044187, -0.040706,0.796183,-0.603686,429.267777,-722.503059,133.044086, -0,0.723053,-0.690793,0.016305,-703.948386,154.325799, -0.040706,0.706494,-0.706547,429.267778,-703.948313,154.325725, -0.649152,0.44561,-0.616469,445.721745,-678.931346,167.953679, -0.537771,0.412318,-0.735388,442.839485,-657.07129,184.832214, -0.649152,0.35745,-0.67144,445.72174,-656.026027,182.972343, -0.537771,0.412318,-0.735388,442.839485,-657.07129,184.832214, -0.649152,0.44561,-0.616469,445.721745,-678.931346,167.953679, -0.537771,0.508681,-0.672344,442.83949,-680.220296,169.653769, 0.603343,-0.62433,0.496175,464.09079,-740.916622,147.004613, 0.487279,-0.616933,0.618023,461.270002,-721.590015,171.967428, 0.487279,-0.695395,0.528191,461.27,-742.384174,148.117261, 0.487279,-0.616933,0.618023,461.270002,-721.590015,171.967428, 0.603343,-0.62433,0.496175,464.09079,-740.916622,147.004613, 0.603343,-0.550894,0.576621,464.090792,-720.287768,170.665181, 0.487279,-0.695395,0.528191,461.27,-742.384174,148.117261, 0.361665,-0.658837,0.659646,458.22226,-722.603323,172.980735, 0.361665,-0.742579,0.563715,458.222259,-743.526109,148.983038, 0.361665,-0.658837,0.659646,458.22226,-722.603323,172.980735, 0.487279,-0.695395,0.528191,461.27,-742.384174,148.117261, 0.487279,-0.616933,0.618023,461.270002,-721.590015,171.967428, 0.114758,-0.016686,0.993253,451.683281,-549.621181,242.65094, 0.20592,0,0.978569,455.00605,-186.86272,242.110623, 0.068639,0,0.997642,451.683281,-186.86272,242.65094, 0.20592,0,0.978569,455.00605,-186.86272,242.110623, 0.114758,-0.016686,0.993253,451.683281,-549.621181,242.65094, 0.251027,-0.016259,0.967844,455.00605,-549.612103,242.110623, 0.707932,-0.500166,0.498664,736.997697,-665.645303,116.022715, 0.609002,-0.620953,0.493491,717.894078,-692.709977,110.455949, 0.707932,-0.563451,0.425857,736.997696,-679.337949,100.317733, 0.609002,-0.620953,0.493491,717.894078,-692.709977,110.455949, 0.707932,-0.500166,0.498664,736.997697,-665.645303,116.022715, 0.609002,-0.547915,0.573503,717.894079,-677.511106,127.888519, 0.609002,-0.620953,0.493491,717.894078,-692.709977,110.455949, 0.499663,-0.61198,0.61304,696.758806,-687.497596,137.875009, 0.499663,-0.689808,0.523929,696.758805,-703.964135,118.988469, 0.499663,-0.61198,0.61304,696.758806,-687.497596,137.875009, 0.609002,-0.620953,0.493491,717.894078,-692.709977,110.455949, 0.609002,-0.547915,0.573503,717.894079,-677.511106,127.888519, 0.855563,-0.510212,0.087731,767.829317,-668.759577,23.357838, 0.800126,-0.584324,0.13551,753.739273,-687.397248,39.686742, 0.780232,-0.616443,0.105998,753.739265,-690.205036,23.357838, 0.800126,-0.584324,0.13551,753.739273,-687.397248,39.686742, 0.855563,-0.510212,0.087731,767.829317,-668.759577,23.357838, 0.87794,-0.465203,0.113169,767.829322,-666.812843,34.679214, -0.537771,0.595553,-0.596756,442.839492,-701.085065,151.462478, -0.415875,0.548909,-0.725084,439.690621,-681.255534,171.01922, -0.537771,0.508681,-0.672344,442.83949,-680.220296,169.653769, -0.415875,0.548909,-0.725084,439.690621,-681.255534,171.01922, -0.537771,0.595553,-0.596756,442.839492,-701.085065,151.462478, -0.415875,0.642593,-0.643523,439.690622,-702.296712,152.674124, 0.361665,-0.905753,0.220929,458.222231,-784.271055,63.253152, 0.229025,-0.905527,0.357167,455.006098,-775.57778,93.968105, 0.229025,-0.94575,0.230443,455.006085,-785.239687,63.48879, 0.229025,-0.905527,0.357167,455.006098,-775.57778,93.968105, 0.361665,-0.905753,0.220929,458.222231,-784.271055,63.253152, 0.361665,-0.867199,0.342292,458.222244,-774.650293,93.602673, 0.229025,-0.94575,0.230443,455.006085,-785.239687,63.48879, 0.091928,-0.926396,0.365157,451.68333,-776.081661,94.166635, 0.091928,-0.967513,0.235514,451.683317,-785.765921,63.616808, 0.091928,-0.926396,0.365157,451.68333,-776.081661,94.166635, 0.229025,-0.94575,0.230443,455.006085,-785.239687,63.48879, 0.229025,-0.905527,0.357167,455.006098,-775.57778,93.968105, 0.986627,-0.162996,-0,843.130723,-608.452917,-0, 0.971349,-0.237659,-0,838.782877,-630.311015,23.357838, 0.960042,-0.279856,-0,838.782877,-630.311015,-0, 0.971349,-0.237659,-0,838.782877,-630.311015,23.357838, 0.986627,-0.162996,-0,843.130723,-608.452917,-0, 0.991423,-0.130694,-0,843.130723,-608.452917,23.357838, 0.691493,-0.722383,-0,772.221089,-745.599413,-0, 0.625945,-0.779867,-0,746.929123,-767.779872,23.357838, 0.591287,-0.806461,-0,746.929123,-767.779872,-0, 0.625945,-0.779867,-0,746.929123,-767.779872,23.357838, 0.691493,-0.722383,-0,772.221089,-745.599413,-0, 0.722383,-0.691493,-0,772.221089,-745.599413,23.357838, -0.614316,0.68383,-0.393691,702.221357,-684.591376,79.42501, -0.707932,0.563466,-0.425837,718.363107,-662.432231,87.500399, -0.71736,0.602889,-0.34917,718.363103,-672.268221,72.499299, -0.707932,0.563466,-0.425837,718.363107,-662.432231,87.500399, -0.614316,0.68383,-0.393691,702.221357,-684.591376,79.42501, -0.606606,0.622389,-0.494632,702.22136,-673.696701,96.040736, -0.537771,0.818998,-0.200111,442.839466,-754.702001,56.059962, -0.649249,0.756522,-0.078421,445.721707,-757.270639,28.561795, -0.537771,0.838627,-0.086642,442.839452,-759.393033,28.778909, -0.649249,0.756522,-0.078421,445.721707,-757.270639,28.561795, -0.537771,0.818998,-0.200111,442.839466,-754.702001,56.059962, -0.656747,0.730839,-0.185896,445.721721,-752.628988,55.555664, 1,-0,-0,847.545902,-186.86272,0, 0.999698,-0.024594,-0,847.545902,-563.749227,23.357838, 0.997846,-0.065595,-0,847.545902,-563.749227,0, 0.999698,-0.024594,-0,847.545902,-563.749227,23.357838, 1,-0,-0,847.545902,-186.86272,0, 1,-0,-0,847.545902,56.185652,0, 0.999698,-0.024594,-0,847.545902,-563.749227,23.357838, 1,-0,-0,847.545902,56.185652,0, 1,-0,-0,847.545902,56.185652,23.357838, -0.754707,0.651908,-0.073718,448.28198,-754.771252,28.306118, -0.819027,0.573431,-0.019271,450.471085,-752.099463,23.357838, -0.731829,0.681103,-0.02289,448.281977,-754.937554,23.357838, -0.819027,0.573431,-0.019271,450.471085,-752.099463,23.357838, -0.754707,0.651908,-0.073718,448.28198,-754.771252,28.306118, -0.845271,0.531564,-0.054376,450.471088,-751.942886,28.016787, 0.780232,-0,0.62549,753.73925,-186.86272,141.649769, 0.716411,-0.0095,0.697614,736.997652,-548.24528,160.753391, 0.793821,-0.010508,0.608061,753.73925,-547.924349,141.649769, 0.716411,-0.0095,0.697614,736.997652,-548.24528,160.753391, 0.780232,-0,0.62549,753.73925,-186.86272,141.649769, 0.691408,-0,0.722464,736.997652,-186.86272,160.753391, -0.999454,0.021199,-0.025346,454.797688,-667.530829,152.916709, -0.999345,-0.018443,0.031131,454.667766,-645.022494,163.39337, -0.999345,-0.022513,0.028328,454.66777,-665.3625,150.056742, -0.999345,-0.018443,0.031131,454.667766,-645.022494,163.39337, -0.999454,0.021199,-0.025346,454.797688,-667.530829,152.916709, -0.999454,0.017548,-0.027998,454.797683,-646.780881,166.522129, -0.613495,0.011257,-0.789618,702.221319,-548.126642,153.690618, -0.512963,0,-0.858411,684.332852,-186.86272,165.499615, -0.605809,0,-0.79561,702.221319,-186.86272,153.690618, -0.512963,0,-0.858411,684.332852,-186.86272,165.499615, -0.613495,0.011257,-0.789618,702.221319,-548.126642,153.690618, -0.493603,0.014422,-0.869568,684.332852,-548.325029,165.499615, -0.150375,0.787661,-0.597476,432.838954,-722.270805,132.867998, -0.285905,0.835148,-0.469878,436.335621,-737.047581,108.905866, -0.150375,0.86173,-0.484571,432.838949,-737.730682,109.289775, -0.285905,0.835148,-0.469878,436.335621,-737.047581,108.905866, -0.150375,0.787661,-0.597476,432.838954,-722.270805,132.867998, -0.285905,0.76333,-0.579298,436.335626,-721.646389,132.394587, -0.040617,0.016774,-0.999034,429.26772,-549.153238,214.795487, 0,0,-1,0.016247,-186.86272,214.795487, -0.054143,0,-0.998533,429.26772,-186.86272,214.795487, 0,0,-1,0.016247,-186.86272,214.795487, -0.040617,0.016774,-0.999034,429.26772,-549.153238,214.795487, -0,0.022395,-0.999749,0.016247,-549.153365,214.795487, -0.415875,0.642593,-0.643523,439.690622,-702.296712,152.674124, -0.285905,0.578577,-0.763876,436.335626,-682.017175,172.023802, -0.415875,0.548909,-0.725084,439.690621,-681.255534,171.01922, -0.285905,0.578577,-0.763876,436.335626,-682.017175,172.023802, -0.415875,0.642593,-0.643523,439.690622,-702.296712,152.674124, -0.285905,0.677271,-0.67791,436.335627,-703.188138,153.565551, 0.381503,-0.859811,0.339381,673.957369,-738.899253,79.516658, 0.256673,-0.842365,0.473857,649.884119,-734.568562,107.512581, 0.256673,-0.899078,0.354651,649.884111,-746.45866,82.495079, 0.256673,-0.842365,0.473857,649.884119,-734.568562,107.512581, 0.381503,-0.859811,0.339381,673.957369,-738.899253,79.516658, 0.381503,-0.805545,0.453379,673.957376,-727.485522,103.531853, -0.870211,0.458871,-0.17936,744.275052,-648.232891,43.794023, -0.928388,0.324653,-0.180823,753.57641,-625.658276,46.304148, -0.928388,0.346265,-0.134897,753.576407,-630.223631,36.698359, -0.928388,0.324653,-0.180823,753.57641,-625.658276,46.304148, -0.870211,0.458871,-0.17936,744.275052,-648.232891,43.794023, -0.870211,0.43015,-0.240215,744.275056,-642.532652,55.787678, 0.487278,-0.868635,0.089632,461.269956,-788.240871,31.729906, 0.361665,-0.905753,0.220929,458.222231,-784.271055,63.253152, 0.361665,-0.92741,0.095445,458.222215,-789.666464,31.875739, 0.361665,-0.905753,0.220929,458.222231,-784.271055,63.253152, 0.487278,-0.868635,0.089632,461.269956,-788.240871,31.729906, 0.487278,-0.848318,0.207161,461.269972,-782.878631,62.914419, 0.947715,-0.314502,0.054079,787.130183,-621.196954,23.357838, 0.933102,-0.349421,0.085002,779.024159,-644.605714,29.276931, 0.916097,-0.395156,0.067947,779.024156,-645.623514,23.357838, 0.933102,-0.349421,0.085002,779.024159,-644.605714,29.276931, 0.947715,-0.314502,0.054079,787.130183,-621.196954,23.357838, 0.966774,-0.246753,0.066789,787.130183,-621.159902,23.573317, 0.916097,-0.395156,0.067947,779.024156,-645.623514,23.357838, 0.87794,-0.465203,0.113169,767.829322,-666.812843,34.679214, 0.855563,-0.510212,0.087731,767.829317,-668.759577,23.357838, 0.87794,-0.465203,0.113169,767.829322,-666.812843,34.679214, 0.916097,-0.395156,0.067947,779.024156,-645.623514,23.357838, 0.933102,-0.349421,0.085002,779.024159,-644.605714,29.276931, 0.487278,-0.812176,0.320826,461.269985,-773.317015,93.077359, 0.361665,-0.812468,0.457269,458.222253,-760.983658,122.358117, 0.361665,-0.867199,0.342292,458.222244,-774.650293,93.602673, 0.361665,-0.812468,0.457269,458.222253,-760.983658,122.358117, 0.487278,-0.812176,0.320826,461.269985,-773.317015,93.077359, 0.487279,-0.760883,0.428506,461.269994,-759.734399,121.656023, 0.973657,-0.162317,0.16014,473.101765,-710.482719,160.860131, 0.932875,-0.28792,0.21644,472.107209,-732.43577,140.574721, 0.973657,-0.182625,0.136528,473.101763,-729.866936,138.627118, 0.932875,-0.28792,0.21644,472.107209,-732.43577,140.574721, 0.973657,-0.162317,0.16014,473.101765,-710.482719,160.860131, 0.932875,-0.255741,0.253655,472.107211,-712.762199,163.139612, 0.091928,-0.990581,0.101478,451.683301,-791.19694,32.032304, 0.01127,-0.9716,0.236362,448.317755,-785.839647,63.634744, 0.00966,-0.995709,0.092029,448.317739,-791.272422,32.040027, 0.01127,-0.9716,0.236362,448.317755,-785.839647,63.634744, 0.091928,-0.990581,0.101478,451.683301,-791.19694,32.032304, 0.091928,-0.967513,0.235514,451.683317,-785.765921,63.616808, 0.229025,-0.775467,0.588387,455.006113,-744.32049,149.585311, 0.091928,-0.70401,0.704215,451.683346,-723.691181,174.068594, 0.091928,-0.793404,0.601714,451.683345,-744.752058,149.912511, 0.091928,-0.70401,0.704215,451.683346,-723.691181,174.068594, 0.229025,-0.775467,0.588387,455.006113,-744.32049,149.585311, 0.229025,-0.688056,0.688568,455.006115,-723.308225,173.685638, 0.091928,-0.793404,0.601714,451.683345,-744.752058,149.912511, 0.011271,-0.70706,0.707064,448.317785,-723.744835,174.122247, 0.011271,-0.796813,0.60412,448.317783,-744.812521,149.958353, 0.011271,-0.70706,0.707064,448.317785,-723.744835,174.122247, 0.091928,-0.793404,0.601714,451.683345,-744.752058,149.912511, 0.091928,-0.70401,0.704215,451.683346,-723.691181,174.068594, 0.011271,-0.796813,0.60412,448.317783,-744.812521,149.958353, 0,-0.723053,0.690793,0.000065,-723.744912,174.122324, 0,-0.81044,0.585821,0.000063,-744.812573,149.958459, 0,-0.723053,0.690793,0.000065,-723.744912,174.122324, 0.011271,-0.796813,0.60412,448.317783,-744.812521,149.958353, 0.011271,-0.70706,0.707064,448.317785,-723.744835,174.122247, 0.256673,-0.353935,0.899361,649.884111,-632.117666,196.836073, 0.381503,-0.452381,0.806106,673.957376,-653.15444,177.862935, 0.381503,-0.338316,0.860231,673.957369,-629.139245,189.276665, 0.381503,-0.452381,0.806106,673.957376,-653.15444,177.862935, 0.256673,-0.353935,0.899361,649.884111,-632.117666,196.836073, 0.256673,-0.473186,0.842742,649.884119,-657.135168,184.945974, 0.779867,-0.625945,-0,794.401548,-720.307447,-0, 0.722383,-0.691493,-0,772.221089,-745.599413,23.357838, 0.691493,-0.722383,-0,772.221089,-745.599413,-0, 0.722383,-0.691493,-0,772.221089,-745.599413,23.357838, 0.779867,-0.625945,-0,794.401548,-720.307447,-0, 0.806461,-0.591287,-0,794.401548,-720.307447,23.357838, 0.620913,-0.013167,0.783769,464.090728,-549.540509,237.849027, 0.707107,0,0.707107,466.63038,-186.86272,235.639299, 0.583909,-0,0.811819,464.090728,-186.86272,237.849027, 0.707107,0,0.707107,466.63038,-186.86272,235.639299, 0.620913,-0.013167,0.783769,464.090728,-549.540509,237.849027, 0.707157,-0.011876,0.706957,466.63038,-549.503387,235.639299, 0.793821,-0.010508,0.608061,753.73925,-547.924349,141.649769, 0.707841,-0.055835,0.704162,736.997667,-573.300963,159.911321, 0.794465,-0.062988,0.604035,753.739264,-571.352333,140.862403, 0.707841,-0.055835,0.704162,736.997667,-573.300963,159.911321, 0.793821,-0.010508,0.608061,753.73925,-547.924349,141.649769, 0.716411,-0.0095,0.697614,736.997652,-548.24528,160.753391, 0.625544,-0.013105,0.780079,717.89403,-548.526532,177.494989, 0.707841,-0.055835,0.704162,736.997667,-573.300963,159.911321, 0.716411,-0.0095,0.697614,736.997652,-548.24528,160.753391, 0.707841,-0.055835,0.704162,736.997667,-573.300963,159.911321, 0.625544,-0.013105,0.780079,717.89403,-548.526532,177.494989, 0.609101,-0.079799,0.789068,717.894046,-575.008662,176.604979, 0.499663,-0.423738,0.755502,696.7588,-647.656853,168.080895, 0.609002,-0.464655,0.642816,717.894078,-660.078536,143.08739, 0.598552,-0.382497,0.703869,717.894074,-640.737481,155.769021, 0.609002,-0.464655,0.642816,717.894078,-660.078536,143.08739, 0.499663,-0.423738,0.755502,696.7588,-647.656853,168.080895, 0.499663,-0.522735,0.690714,696.758805,-668.611056,154.341548, -0.9721,0.218065,-0.086424,760.201824,-611.21315,29.208214, -0.983984,0.16585,-0.065345,763.093075,-596.364509,23.357838, -0.96393,0.253712,-0.080426,760.201822,-613.067712,23.357838, -0.537771,0.78409,-0.309846,442.839477,-746.337241,82.447316, -0.656747,0.730839,-0.185896,445.721721,-752.628988,55.555664, -0.537771,0.818998,-0.200111,442.839466,-754.702001,56.059962, -0.656747,0.730839,-0.185896,445.721721,-752.628988,55.555664, -0.537771,0.78409,-0.309846,442.839477,-746.337241,82.447316, -0.649152,0.701164,-0.294909,445.721732,-744.352284,81.665241, 0.995804,-0.089282,0.020098,473.642053,-764.379515,58.414175, 0.978666,-0.204393,0.020908,473.101722,-772.614333,30.131373, 0.997653,-0.068124,0.006968,473.642039,-769.30108,29.792441, 0.978666,-0.204393,0.020908,473.101722,-772.614333,30.131373, 0.995804,-0.089282,0.020098,473.642053,-764.379515,58.414175, 0.973657,-0.221914,0.0524,473.101737,-767.615679,59.201429, 0.973657,-0.221914,0.0524,473.101737,-767.615679,59.201429, 0.940951,-0.336786,0.034451,472.107168,-775.82127,30.459429, 0.978666,-0.204393,0.020908,473.101722,-772.614333,30.131373, 0.940951,-0.336786,0.034451,472.107168,-775.82127,30.459429, 0.973657,-0.221914,0.0524,473.101737,-767.615679,59.201429, 0.932875,-0.350339,0.083707,472.107183,-770.747999,59.963422, -0.757296,0.632534,-0.162491,448.281994,-750.187755,54.961789, -0.832687,0.515679,-0.201762,450.471112,-739.369533,79.702032, -0.832687,0.538362,-0.129611,450.471101,-747.425197,54.289747, -0.832687,0.515679,-0.201762,450.471112,-739.369533,79.702032, -0.757296,0.632534,-0.162491,448.281994,-750.187755,54.961789, -0.748179,0.617743,-0.242119,448.282005,-742.014746,80.744249, 0.701238,-0.343649,0.624636,736.997692,-632.515985,141.14023, 0.609002,-0.464655,0.642816,717.894078,-660.078536,143.08739, 0.707932,-0.427549,0.562168,736.997696,-649.94032,129.715362, 0.609002,-0.464655,0.642816,717.894078,-660.078536,143.08739, 0.701238,-0.343649,0.624636,736.997692,-632.515985,141.14023, 0.598552,-0.382497,0.703869,717.894074,-640.737481,155.769021, -0.656747,0.730839,-0.185896,445.721721,-752.628988,55.555664, -0.748179,0.617743,-0.242119,448.282005,-742.014746,80.744249, -0.757296,0.632534,-0.162491,448.281994,-750.187755,54.961789, -0.748179,0.617743,-0.242119,448.282005,-742.014746,80.744249, -0.656747,0.730839,-0.185896,445.721721,-752.628988,55.555664, -0.649152,0.701164,-0.294909,445.721732,-744.352284,81.665241, -0.985345,0.121711,-0.119507,454.431277,-688.759444,139.136857, -0.999454,0.021199,-0.025346,454.797688,-667.530829,152.916709, -0.999454,0.024455,-0.02222,454.797689,-686.233268,136.610681, -0.999454,0.021199,-0.025346,454.797688,-667.530829,152.916709, -0.985345,0.121711,-0.119507,454.431277,-688.759444,139.136857, -0.985345,0.104291,-0.134978,454.431275,-669.689209,155.763554, 0.361665,-0.867199,0.342292,458.222244,-774.650293,93.602673, 0.229025,-0.848411,0.477229,455.006107,-761.852699,122.846525, 0.229025,-0.905527,0.357167,455.006098,-775.57778,93.968105, 0.229025,-0.848411,0.477229,455.006107,-761.852699,122.846525, 0.361665,-0.867199,0.342292,458.222244,-774.650293,93.602673, 0.361665,-0.812468,0.457269,458.222253,-760.983658,122.358117, 0.932875,-0.086574,0.349641,472.107183,-609.58601,221.125411, 0.874212,-0.179273,0.451236,470.677509,-639.24332,214.921287, 0.932875,-0.133411,0.334583,472.107195,-638.123482,212.079066, 0.874212,-0.179273,0.451236,470.677509,-639.24332,214.921287, 0.932875,-0.086574,0.349641,472.107183,-609.58601,221.125411, 0.874212,-0.116112,0.471456,470.677497,-610.308103,224.093716, -0.150374,0.960557,-0.233917,432.83893,-758.353294,56.948209, -0.285905,0.953237,-0.097966,436.335587,-762.351785,29.08158, -0.150374,0.983472,-0.100844,432.838915,-763.131306,29.161323, -0.285905,0.953237,-0.097966,436.335587,-762.351785,29.08158, -0.150374,0.960557,-0.233917,432.83893,-758.353294,56.948209, -0.285905,0.930996,-0.226946,436.335601,-757.591911,56.762987, -0.939612,0.342242,0,693.784142,-590.617874,-0, -0.961178,0.27593,0,698.091838,-577.372321,5.83946, -0.970224,0.242209,-0,698.091838,-577.372321,-0, -0.961178,0.27593,0,698.091838,-577.372321,5.83946, -0.939612,0.342242,0,693.784142,-590.617874,-0, -0.927092,0.374833,-0,693.784142,-590.617874,5.83946, 0,1,-0,0.000468,-674.370541,5.83946, -0.104693,0.994505,-0,590.370902,-674.370541,0, 0,1,-0,0.000468,-674.370541,0, -0.104693,0.994505,-0,590.370902,-674.370541,0, 0,1,-0,0.000468,-674.370541,5.83946, -0.104693,0.994505,-0,590.370902,-674.370541,5.83946, -0.242209,0.970224,-0,603.993997,-671.470162,5.83946, -0.104693,0.994505,-0,590.370902,-674.370541,0, -0.104693,0.994505,-0,590.370902,-674.370541,5.83946, -0.104693,0.994505,-0,590.370902,-674.370541,0, -0.242209,0.970224,-0,603.993997,-671.470162,5.83946, -0.27593,0.961178,-0,603.993997,-671.470162,-0, -0.342242,0.939612,-0,617.239549,-667.162466,5.83946, -0.27593,0.961178,-0,603.993997,-671.470162,-0, -0.242209,0.970224,-0,603.993997,-671.470162,5.83946, -0.27593,0.961178,-0,603.993997,-671.470162,-0, -0.342242,0.939612,-0,617.239549,-667.162466,5.83946, -0.374833,0.927092,-0,617.239549,-667.162466,-0, 0.480964,-0.87674,-0,718.958402,-786.46931,-0, 0.402772,-0.9153,-0,688.787514,-801.347945,23.357838, 0.362412,-0.932018,-0,688.787514,-801.347945,-0, 0.402772,-0.9153,-0,688.787514,-801.347945,23.357838, 0.480964,-0.87674,-0,718.958402,-786.46931,-0, 0.518797,-0.854897,-0,718.958402,-786.46931,23.357838, -0.606606,0.549182,-0.574829,702.221362,-660.639487,111.0169, -0.707932,0.427569,-0.562154,718.363107,-637.122986,112.809644, -0.707932,0.500183,-0.498647,718.363108,-650.643847,101.02126, -0.707932,0.427569,-0.562154,718.363107,-637.122986,112.809644, -0.606606,0.549182,-0.574829,702.221362,-660.639487,111.0169, -0.606606,0.46573,-0.644302,702.22136,-645.663324,124.074113, 0.994447,0,0.105242,792.007202,-186.86272,48.711029, 0.998104,-0.001034,0.061542,793.5709,-545.937124,23.357838, 0.998103,0,0.06156,793.5709,-186.86272,23.357838, 0.998104,-0.001034,0.061542,793.5709,-545.937124,23.357838, 0.994447,0,0.105242,792.007202,-186.86272,48.711029, 0.98887,-0.002499,0.148764,792.007202,-546.363038,48.711029, 0.714887,-0.69482,0.078501,466.630399,-784.205377,31.31709, 0.603443,-0.774584,0.189413,464.090763,-781.089165,62.479098, 0.603443,-0.793169,0.082097,464.090747,-786.408778,31.542489, 0.603443,-0.774584,0.189413,464.090763,-781.089165,62.479098, 0.714887,-0.69482,0.078501,466.630399,-784.205377,31.31709, 0.707841,-0.682368,0.182581,466.630415,-778.937032,61.955552, 0.855563,-0,0.517699,767.829302,-186.86272,120.514493, 0.793821,-0.010508,0.608061,753.73925,-547.924349,141.649769, 0.866755,-0.008697,0.498658,767.829302,-547.569289,120.514493, 0.793821,-0.010508,0.608061,753.73925,-547.924349,141.649769, 0.855563,-0,0.517699,767.829302,-186.86272,120.514493, 0.780232,-0,0.62549,753.73925,-186.86272,141.649769, 0.79876,-0.364496,0.47867,468.840169,-693.751117,187.500559, 0.707932,-0.500206,0.498623,466.630444,-718.721598,169.09901, 0.79876,-0.426323,0.424536,468.840171,-716.92159,167.299002, 0.707932,-0.500206,0.498623,466.630444,-718.721598,169.09901, 0.79876,-0.364496,0.47867,468.840169,-693.751117,187.500559, 0.707932,-0.427595,0.562134,466.630442,-695.289055,189.529057, -0.494423,0.524541,-0.693111,684.332897,-652.814504,133.506322, -0.373111,0.454056,-0.809087,665.021386,-639.414516,153.414997, -0.494423,0.4252,-0.758123,684.332893,-634.846784,145.287478, -0.373111,0.454056,-0.809087,665.021386,-639.414516,153.414997, -0.494423,0.524541,-0.693111,684.332897,-652.814504,133.506322, -0.373111,0.560072,-0.739667,665.02139,-658.447133,140.935603, 0.973657,-0.113053,0.198017,473.101758,-663.582664,196.418147, 0.932875,-0.218791,0.286137,472.107209,-690.197308,182.813182, 0.973657,-0.138981,0.180764,473.101763,-688.249706,180.244348, 0.932875,-0.218791,0.286137,472.107209,-690.197308,182.813182, 0.973657,-0.113053,0.198017,473.101758,-663.582664,196.418147, 0.932875,-0.177759,0.313282,472.107204,-665.162054,199.228412, -0.022557,0.871531,-0.489821,602.133296,-713.015947,95.399861, -0.112343,0.924436,-0.364414,623.546355,-722.557073,73.077847, -0.022557,0.930148,-0.366491,602.133289,-723.456525,73.43224, -0.112343,0.924436,-0.364414,623.546355,-722.557073,73.077847, -0.022557,0.871531,-0.489821,602.133296,-713.015947,95.399861, -0.112343,0.866156,-0.486984,623.546362,-712.173175,94.926211, -0.112343,0.866156,-0.486984,623.546362,-712.173175,94.926211, -0.244971,0.901902,-0.355754,644.636252,-718.985715,71.670721, -0.112343,0.924436,-0.364414,623.546355,-722.557073,73.077847, -0.244971,0.901902,-0.355754,644.636252,-718.985715,71.670721, -0.112343,0.866156,-0.486984,623.546362,-712.173175,94.926211, -0.244971,0.845012,-0.475335,644.636259,-708.826871,93.045557, 0.499663,-0.841496,0.20548,696.758783,-736.031005,51.517793, 0.381503,-0.859811,0.339381,673.957369,-738.899253,79.516658, 0.381503,-0.898037,0.219052,673.957358,-746.934061,54.170165, 0.381503,-0.859811,0.339381,673.957369,-738.899253,79.516658, 0.499663,-0.841496,0.20548,696.758783,-736.031005,51.517793, 0.499663,-0.805647,0.318231,696.758793,-728.459324,75.40331, 0.021811,-0.999762,0,590.370902,-820.924227,0, -0,-1,-0,0.000797,-820.924227,17.047527, 0,-1,0,0.000468,-820.924227,0, -0,-1,-0,0.000797,-820.924227,17.047527, 0.032719,-0.999465,-0,590.370902,-820.924227,23.357838, 0,-1,-0,0.000468,-820.924227,23.357838, 0.032719,-0.999465,-0,590.370902,-820.924227,23.357838, -0,-1,-0,0.000797,-820.924227,17.047527, 0.021811,-0.999762,0,590.370902,-820.924227,0, 0.401003,-0.015387,0.915947,673.957328,-548.951312,202.77988, 0.479633,0,0.877469,696.758754,-186.86272,191.585041, 0.360344,0,0.932819,673.957328,-186.86272,202.77988, 0.479633,0,0.877469,696.758754,-186.86272,191.585041, 0.401003,-0.015387,0.915947,673.957328,-548.951312,202.77988, 0.517753,-0.01437,0.85541,696.758754,-548.76324,191.585041, -0.747451,0.007439,-0.664276,448.281963,-549.007501,206.120647, -0.665822,0,-0.746111,445.72169,-186.86272,208.627211, -0.747409,0,-0.664364,448.281963,-186.86272,206.120647, -0.665822,0,-0.746111,445.72169,-186.86272,208.627211, -0.747451,0.007439,-0.664276,448.281963,-549.007501,206.120647, -0.648424,0.012535,-0.761176,445.72169,-549.049611,208.627211, -0.832687,0.272446,-0.482085,450.47112,-653.402151,178.303588, -0.901181,0.160213,-0.402745,452.247002,-628.181199,186.84487, -0.901181,0.2136,-0.377157,452.247009,-651.873941,175.584392, -0.901181,0.160213,-0.402745,452.247002,-628.181199,186.84487, -0.832687,0.272446,-0.482085,450.47112,-653.402151,178.303588, -0.832687,0.204213,-0.514714,450.471112,-629.324619,189.746946, -0.741547,0.152765,-0.653277,448.281994,-604.584377,200.565168, -0.832687,0.057661,-0.550734,450.471088,-577.639374,202.320298, -0.832687,0.13217,-0.53774,450.471101,-603.912334,197.80261, -0.832687,0.057661,-0.550734,450.471088,-577.639374,202.320298, -0.741547,0.152765,-0.653277,448.281994,-604.584377,200.565168, -0.748094,0.052453,-0.661516,448.28198,-577.928705,205.148665, 0.499663,-0.861647,0.088896,696.75877,-740.277271,26.823309, 0.381503,-0.898037,0.219052,673.957358,-746.934061,54.170165, 0.381503,-0.91951,0.094637,673.957345,-751.440053,27.965226, 0.381503,-0.898037,0.219052,673.957358,-746.934061,54.170165, 0.499663,-0.861647,0.088896,696.75877,-740.277271,26.823309, 0.499663,-0.841496,0.20548,696.758783,-736.031005,51.517793, 0.603443,-0.793169,0.082097,464.090747,-786.408778,31.542489, 0.487278,-0.848318,0.207161,461.269972,-782.878631,62.914419, 0.487278,-0.868635,0.089632,461.269956,-788.240871,31.729906, 0.487278,-0.848318,0.207161,461.269972,-782.878631,62.914419, 0.603443,-0.793169,0.082097,464.090747,-786.408778,31.542489, 0.603443,-0.774584,0.189413,464.090763,-781.089165,62.479098, -0.373111,0.560072,-0.739667,665.02139,-658.447133,140.935603, -0.244971,0.474679,-0.845381,644.636259,-642.668145,159.204284, -0.373111,0.454056,-0.809087,665.021386,-639.414516,153.414997, -0.244971,0.474679,-0.845381,644.636259,-642.668145,159.204284, -0.373111,0.560072,-0.739667,665.02139,-658.447133,140.935603, -0.244971,0.585448,-0.772813,644.636264,-662.459295,146.227532, 0.924681,-0,0.380742,779.024141,-186.86272,97.713067, 0.9608,-0.004657,0.277203,787.130168,-546.781824,73.639808, 0.972038,0,0.234823,787.130168,-186.86272,73.639808, 0.9608,-0.004657,0.277203,787.130168,-546.781824,73.639808, 0.924681,-0,0.380742,779.024141,-186.86272,97.713067, 0.919603,-0.008082,0.392766,779.024141,-547.186239,97.713067, 0.794465,-0.430275,0.42859,753.73929,-652.105388,102.482801, 0.707932,-0.563451,0.425857,736.997696,-679.337949,100.317733, 0.794465,-0.484664,0.36596,753.739289,-664.079301,88.749145, 0.707932,-0.563451,0.425857,736.997696,-679.337949,100.317733, 0.794465,-0.430275,0.42859,753.73929,-652.105388,102.482801, 0.707932,-0.500166,0.498664,736.997697,-665.645303,116.022715, -0.993727,0.068775,-0.088188,764.031425,-579.704781,37.076602, -0.998991,0.022887,-0.038633,764.878707,-566.321382,23.357838, -0.998991,0.027938,-0.035154,764.805052,-569.303684,23.357838, -0.998991,0.022887,-0.038633,764.878707,-566.321382,23.357838, -0.993727,0.068775,-0.088188,764.031425,-579.704781,37.076602, -0.993727,0.056116,-0.096737,764.031424,-575.55911,39.794854, -0.022557,0.971412,-0.236325,602.13328,-730.806273,50.246828, -0.112343,0.988493,-0.101292,623.546333,-733.966349,26.17777, -0.022557,0.994554,-0.10175,602.133267,-734.928078,26.276163, -0.112343,0.988493,-0.101292,623.546333,-733.966349,26.17777, -0.022557,0.971412,-0.236325,602.13328,-730.806273,50.246828, -0.112343,0.96547,-0.235045,623.546346,-729.866921,50.018304, -0,0.882708,-0.469921,454.667766,-713.015957,95.399907, -0.022557,0.930148,-0.366491,602.133289,-723.456525,73.43224, -0,0.938509,-0.345255,454.667758,-723.45653,73.432296, -0.022557,0.930148,-0.366491,602.133289,-723.456525,73.43224, -0,0.882708,-0.469921,454.667766,-713.015957,95.399907, -0.022557,0.871531,-0.489821,602.133296,-713.015947,95.399861, 0.874212,-0.423953,0.236679,470.677518,-751.514112,117.036157, 0.79876,-0.56023,0.219373,468.840155,-767.174448,90.657181, 0.874212,-0.45225,0.176701,470.677509,-764.543874,89.620732, 0.79876,-0.56023,0.219373,468.840155,-767.174448,90.657181, 0.874212,-0.423953,0.236679,470.677518,-751.514112,117.036157, 0.79876,-0.525111,0.293667,468.840164,-753.978916,118.421396, 0.108839,-0.994059,-0,623.938976,-818.724059,-0, 0.032719,-0.999465,-0,590.370902,-820.924227,23.357838, 0.021811,-0.999762,0,590.370902,-820.924227,0, 0.032719,-0.999465,-0,590.370902,-820.924227,23.357838, 0.108839,-0.994059,-0,623.938976,-818.724059,-0, 0.152151,-0.988357,-0,623.938976,-818.724059,23.357838, 0.79876,-0.584897,0.140986,468.840142,-776.463573,61.353839, 0.714887,-0.69482,0.078501,466.630399,-784.205377,31.31709, 0.812465,-0.579983,0.059329,468.840127,-781.672997,31.058037, 0.714887,-0.69482,0.078501,466.630399,-784.205377,31.31709, 0.79876,-0.584897,0.140986,468.840142,-776.463573,61.353839, 0.707841,-0.682368,0.182581,466.630415,-778.937032,61.955552, 0.866755,-0.008697,0.498658,767.829302,-547.569289,120.514493, 0.794465,-0.062988,0.604035,753.739264,-571.352333,140.862403, 0.867227,-0.051963,0.495193,767.829315,-569.19647,119.787648, 0.794465,-0.062988,0.604035,753.739264,-571.352333,140.862403, 0.866755,-0.008697,0.498658,767.829302,-547.569289,120.514493, 0.793821,-0.010508,0.608061,753.73925,-547.924349,141.649769, -0.999951,0.009862,-0.001008,454.797654,-738.498463,26.641479, -0.999345,-0.035345,0.007749,454.667749,-730.806274,50.246897, -0.999345,-0.035987,0.003682,454.667737,-734.928076,26.276244, -0.999345,-0.035345,0.007749,454.667749,-730.806274,50.246897, -0.999951,0.009862,-0.001008,454.797654,-738.498463,26.641479, -0.999454,0.032443,-0.006265,454.797666,-734.293588,51.095248, -0.754707,0.651908,-0.073718,448.28198,-754.771252,28.306118, -0.832687,0.538362,-0.129611,450.471101,-747.425197,54.289747, -0.845271,0.531564,-0.054376,450.471088,-751.942886,28.016787, -0.832687,0.538362,-0.129611,450.471101,-747.425197,54.289747, -0.754707,0.651908,-0.073718,448.28198,-754.771252,28.306118, -0.757296,0.632534,-0.162491,448.281994,-750.187755,54.961789, -0.870211,0.117753,-0.4784,744.275047,-580.75808,102.623043, -0.928388,0.039234,-0.369537,753.576397,-565.700992,85.617213, -0.928388,0.089223,-0.360743,753.576403,-576.182654,83.81487, -0.928388,0.039234,-0.369537,753.576397,-565.700992,85.617213, -0.870211,0.117753,-0.4784,744.275047,-580.75808,102.623043, -0.870211,0.051465,-0.489984,744.27504,-567.670824,104.873423, -0.150052,0.016548,-0.98854,432.838898,-549.148352,214.504709, -0.054143,0,-0.998533,429.26772,-186.86272,214.795487, -0.172878,0,-0.984943,432.838898,-186.86272,214.504709, -0.054143,0,-0.998533,429.26772,-186.86272,214.795487, -0.150052,0.016548,-0.98854,432.838898,-549.148352,214.504709, -0.040617,0.016774,-0.999034,429.26772,-549.153238,214.795487, -0,0.81044,-0.585821,454.66777,-699.67933,115.739913, -0.022557,0.871531,-0.489821,602.133296,-713.015947,95.399861, -0,0.882708,-0.469921,454.667766,-713.015957,95.399907, -0.022557,0.871531,-0.489821,602.133296,-713.015947,95.399861, -0,0.81044,-0.585821,454.66777,-699.67933,115.739913, -0.022557,0.796656,-0.604012,602.133301,-699.679313,115.739878, 0.79876,-0.525111,0.293667,468.840164,-753.978916,118.421396, 0.707841,-0.651123,0.273862,466.630427,-769.542842,91.59033, 0.79876,-0.56023,0.219373,468.840155,-767.174448,90.657181, 0.707841,-0.651123,0.273862,466.630427,-769.542842,91.59033, 0.79876,-0.525111,0.293667,468.840164,-753.978916,118.421396, 0.717647,-0.602641,0.349008,466.630436,-756.198062,119.668573, -0.901181,0.2136,-0.377157,452.247009,-651.873941,175.584392, -0.952384,0.113168,-0.283121,453.575559,-626.95854,183.741681, -0.952384,0.150692,-0.265059,453.575567,-650.239827,172.676755, -0.952384,0.113168,-0.283121,453.575559,-626.95854,183.741681, -0.901181,0.2136,-0.377157,452.247009,-651.873941,175.584392, -0.901181,0.160213,-0.402745,452.247002,-628.181199,186.84487, -0.599001,0.779767,-0.182103,702.221343,-699.124264,42.539571, -0.691044,0.712358,-0.122491,718.363083,-688.112661,23.357838, -0.605809,0.784102,-0.134828,702.221333,-702.422602,23.357838, -0.691044,0.712358,-0.122491,718.363083,-688.112661,23.357838, -0.599001,0.779767,-0.182103,702.221343,-699.124264,42.539571, -0.714681,0.677849,-0.172485,718.363091,-685.388881,39.198188, 0,-0.016797,0.999859,0,-549.622587,242.726639, 0.01127,-0.101755,0.994746,448.317739,-581.662615,241.649835, 0.012852,-0.014396,0.999814,448.31772,-549.622454,242.726639, 0.01127,-0.101755,0.994746,448.317739,-581.662615,241.649835, 0,-0.016797,0.999859,0,-549.622587,242.726639, 0,-0.124431,0.992228,0.000019,-581.662862,241.649831, -0.649152,0.525457,-0.549997,445.721747,-699.576473,149.953886, -0.537771,0.508681,-0.672344,442.83949,-680.220296,169.653769, -0.649152,0.44561,-0.616469,445.721745,-678.931346,167.953679, -0.537771,0.508681,-0.672344,442.83949,-680.220296,169.653769, -0.649152,0.525457,-0.549997,445.721747,-699.576473,149.953886, -0.537771,0.595553,-0.596756,442.839492,-701.085065,151.462478, 0.012852,-0.014396,0.999814,448.31772,-549.622454,242.726639, 0.091928,-0.101189,0.990611,451.683301,-581.654891,241.574352, 0.114758,-0.016686,0.993253,451.683281,-549.621181,242.65094, 0.091928,-0.101189,0.990611,451.683301,-581.654891,241.574352, 0.012852,-0.014396,0.999814,448.31772,-549.622454,242.726639, 0.01127,-0.101755,0.994746,448.317739,-581.662615,241.649835, -0.901181,0.160213,-0.402745,452.247002,-628.181199,186.84487, -0.952384,0.073533,-0.295901,453.575549,-602.386639,191.530944, -0.952384,0.113168,-0.283121,453.575559,-626.95854,183.741681, -0.952384,0.073533,-0.295901,453.575549,-602.386639,191.530944, -0.901181,0.160213,-0.402745,452.247002,-628.181199,186.84487, -0.901181,0.103838,-0.42082,452.246991,-603.175034,194.771794, -0.415875,0.72429,-0.549957,439.690621,-720.641807,131.632947, -0.537771,0.734555,-0.413801,442.839485,-734.454802,107.448703, -0.415875,0.792474,-0.446131,439.690616,-735.948584,108.28822, -0.537771,0.734555,-0.413801,442.839485,-734.454802,107.448703, -0.415875,0.72429,-0.549957,439.690621,-720.641807,131.632947, -0.537771,0.671316,-0.510036,442.83949,-719.276356,130.597708, 0.966794,-0.15555,0.202766,787.130191,-597.186922,60.135075, 0.924993,-0.269668,0.267706,779.02417,-620.964741,71.342153, 0.966794,-0.181729,0.179678,787.130191,-603.902541,54.279953, 0.924993,-0.269668,0.267706,779.02417,-620.964741,71.342153, 0.966794,-0.15555,0.202766,787.130191,-597.186922,60.135075, 0.924993,-0.230673,0.301955,779.024169,-611.764971,79.363123, 0.603443,-0.187559,0.775035,464.090763,-612.101686,231.466578, 0.707841,-0.243878,0.662936,466.630427,-641.212918,219.920255, 0.707841,-0.151267,0.689985,466.630415,-611.57814,229.314444, 0.707841,-0.243878,0.662936,466.630427,-641.212918,219.920255, 0.603443,-0.187559,0.775035,464.090763,-612.101686,231.466578, 0.603443,-0.29142,0.742247,464.090775,-642.024843,221.980973, -0.530018,0.847987,-0,642.023926,-654.528574,5.83946, -0.469634,0.882861,-0,629.962605,-661.494594,-0, -0.438529,0.898717,-0,629.962605,-661.494594,5.83946, -0.469634,0.882861,-0,629.962605,-661.494594,-0, -0.530018,0.847987,-0,642.023926,-654.528574,5.83946, -0.559296,0.828968,-0,642.023926,-654.528574,-0, -0.847987,0.530018,-0,681.15025,-615.40225,-0, -0.882861,0.469634,-0,688.11627,-603.340929,5.83946, -0.898717,0.438529,-0,688.11627,-603.340929,-0, -0.882861,0.469634,-0,688.11627,-603.340929,5.83946, -0.847987,0.530018,-0,681.15025,-615.40225,-0, -0.828968,0.559296,-0,681.15025,-615.40225,5.83946, -0.982194,0.18787,-0,700.992217,-563.749227,5.83946, -0.985885,0.167425,-0,806.270901,56.185652,0, -0.982194,0.18787,-0,700.992217,-563.749227,-0, -0.985885,0.167425,-0,806.270901,56.185652,0, -0.982194,0.18787,-0,700.992217,-563.749227,5.83946, -0.985885,0.167425,-0,764.9959,-186.86272,5.83946, -0.985885,0.167425,-0,806.270901,56.185652,0, -0.985885,0.167425,-0,764.9959,-186.86272,5.83946, -0.985885,0.167425,0,806.270901,56.185652,23.357838, -0.985885,0.167425,0,806.270901,56.185652,23.357838, -0.985885,0.167425,-0,764.9959,-186.86272,5.83946, -0.997977,0.055997,-0.030099,764.9959,-186.86272,23.357838, 0.994417,-0.002312,0.105501,473.642021,-549.252285,220.6922, 0.973657,-0.024735,0.226671,473.101722,-579.75396,222.991746, 0.995804,-0.010878,0.090867,473.642039,-579.415029,219.678492, 0.973657,-0.024735,0.226671,473.101722,-579.75396,222.991746, 0.994417,-0.002312,0.105501,473.642021,-549.252285,220.6922, 0.973547,-0.004216,0.228449,473.101704,-549.308105,224.014969, 0.998104,-0.001034,0.061542,793.5709,-545.937124,23.357838, 0.991932,-0.01438,0.125953,792.007211,-561.87231,48.189795, 0.998111,-0.007644,0.060955,793.543158,-559.332109,23.357838, 0.991932,-0.01438,0.125953,792.007211,-561.87231,48.189795, 0.998104,-0.001034,0.061542,793.5709,-545.937124,23.357838, 0.98887,-0.002499,0.148764,792.007202,-546.363038,48.711029, 0.381503,-0.736251,0.558918,673.957381,-712.905798,125.767735, 0.256673,-0.683145,0.68369,649.884126,-701.177315,151.554728, 0.256673,-0.769937,0.584223,649.884124,-719.380332,130.676509, 0.256673,-0.683145,0.68369,649.884126,-701.177315,151.554728, 0.381503,-0.736251,0.558918,673.957381,-712.905798,125.767735, 0.381503,-0.653222,0.654031,673.957383,-695.432071,145.809483, 0.256673,-0.769937,0.584223,649.884124,-719.380332,130.676509, 0.127347,-0.701215,0.701485,624.955349,-704.633973,155.011385, 0.127347,-0.790262,0.59939,624.955347,-723.275771,133.6299, 0.127347,-0.701215,0.701485,624.955349,-704.633973,155.011385, 0.256673,-0.769937,0.584223,649.884124,-719.380332,130.676509, 0.256673,-0.683145,0.68369,649.884126,-701.177315,151.554728, 0.127347,-0.790262,0.59939,624.955347,-723.275771,133.6299, 0.030867,-0.706755,0.706785,599.602158,-705.742267,156.119679, 0.030867,-0.796473,0.603886,599.602156,-724.524748,134.576836, 0.030867,-0.706755,0.706785,599.602158,-705.742267,156.119679, 0.127347,-0.790262,0.59939,624.955347,-723.275771,133.6299, 0.127347,-0.701215,0.701485,624.955349,-704.633973,155.011385, 0.030867,-0.796473,0.603886,599.602156,-724.524748,134.576836, 0,-0.723053,0.690793,473.717779,-705.742288,156.119701, 0,-0.81044,0.585821,473.717777,-724.524762,134.576865, 0,-0.723053,0.690793,473.717779,-705.742288,156.119701, 0.030867,-0.796473,0.603886,599.602156,-724.524748,134.576836, 0.030867,-0.706755,0.706785,599.602158,-705.742267,156.119679, 0.999748,-0.016225,0.015501,473.717779,-705.742288,156.119701, 0.995804,-0.073866,0.054027,473.642079,-727.212939,136.614949, 0.999748,-0.018186,0.013146,473.717777,-724.524762,134.576865, 0.995804,-0.073866,0.054027,473.642079,-727.212939,136.614949, 0.999748,-0.016225,0.015501,473.717779,-705.742288,156.119701, 0.995804,-0.065815,0.063588,473.64208,-708.127668,158.505081, 0,-0.999436,0.033589,0.00089,-791.564218,23.357838, 0.00966,-0.995709,0.092029,448.317739,-791.272422,32.040027, 0,-0.994809,0.101765,0.000019,-791.272419,32.040275, 0.00966,-0.995709,0.092029,448.317739,-791.272422,32.040027, 0,-0.999436,0.033589,0.00089,-791.564218,23.357838, 0.011244,-0.999373,0.033587,448.317734,-791.564213,23.357838, -0.970224,0.242209,-0,698.091838,-577.372321,-0, -0.982194,0.18787,-0,700.992217,-563.749227,5.83946, -0.982194,0.18787,-0,700.992217,-563.749227,-0, -0.982194,0.18787,-0,700.992217,-563.749227,5.83946, -0.970224,0.242209,-0,698.091838,-577.372321,-0, -0.961178,0.27593,0,698.091838,-577.372321,5.83946, -0,0,1,0.00829,-763.617296,23.357836, -0,-0,1,764.9959,-186.86272,23.357838, 0,-0,1,0.001765,-186.86272,23.357838, -0,-0,1,764.9959,-186.86272,23.357838, -0,0,1,0.00829,-763.617296,23.357836, -0,-0,1,764.9959,-545.937132,23.357838, -0,-0,1,764.9959,-545.937132,23.357838, -0,0,1,0.00829,-763.617296,23.357836, -0,-0,1,764.975642,-559.332125,23.357838, -0,-0,1,764.975642,-559.332125,23.357838, -0,0,1,0.00829,-763.617296,23.357836, -0,-0,1,764.959284,-561.475403,23.357838, -0,-0,1,764.959284,-561.475403,23.357838, -0,0,1,0.00829,-763.617296,23.357836, -0,-0,1,764.928093,-563.76708,23.357838, -0,-0,1,764.928093,-563.76708,23.357838, -0,0,1,0.00829,-763.617296,23.357836, -0,-0,1,764.878707,-566.321382,23.357838, -0,-0,1,764.878707,-566.321382,23.357838, -0,0,1,0.00829,-763.617296,23.357836, -0,-0,1,764.805052,-569.303684,23.357838, -0,-0,1,764.805052,-569.303684,23.357838, -0,0,1,0.00829,-763.617296,23.357836, -0,-0,1,764.696221,-572.980425,23.357838, -0,-0,1,764.696221,-572.980425,23.357838, -0,0,1,0.00829,-763.617296,23.357836, -0,-0,1,764.531578,-577.829947,23.357838, -0,-0,1,764.531578,-577.829947,23.357838, -0,0,1,0.00829,-763.617296,23.357836, -0,-0,1,764.267941,-584.829097,23.357838, -0,-0,1,764.267941,-584.829097,23.357838, -0,0,1,0.00829,-763.617296,23.357836, -0,-0,1,764.031423,-590.643016,23.357838, -0,-0,1,764.031423,-590.643016,23.357838, -0,0,1,0.00829,-763.617296,23.357836, -0,0,1,763.093075,-596.364509,23.357838, -0,0,1,763.093075,-596.364509,23.357838, -0,0,1,0.00829,-763.617296,23.357836, -0,0,1,760.201822,-613.067712,23.357838, -0,0,1,760.201822,-613.067712,23.357838, -0,0,1,0.00829,-763.617296,23.357836, -0,0,1,757.969157,-620.274076,23.357838, -0,0,1,757.969157,-620.274076,23.357838, -0,0,1,0.00829,-763.617296,23.357836, -0,0,1,753.576401,-633.988087,23.357838, -0,0,1,753.576401,-633.988087,23.357838, -0,0,1,0.00829,-763.617296,23.357836, -0,0,1,744.275043,-653.583014,23.357838, -0,0,1,744.275043,-653.583014,23.357838, -0,0,1,0.00829,-763.617296,23.357836, -0,0,1,732.466046,-671.734013,23.357838, -0,0,1,732.466046,-671.734013,23.357838, -0,0,1,0.00829,-763.617296,23.357836, -0,0,1,718.363083,-688.112661,23.357838, -0,0,1,718.363083,-688.112661,23.357838, -0,0,1,0.00829,-763.617296,23.357836, -0,0,1,702.221333,-702.422602,23.357838, -0,0,1,702.221333,-702.422602,23.357838, -0,0,1,0.00829,-763.617296,23.357836, -0,0,1,696.28309,-706.40024,23.357838, -0,0,1,696.28309,-706.40024,23.357838, -0,0,1,0.00829,-763.617296,23.357836, -0,0,1,684.332867,-714.293585,23.357838, -0,0,1,684.332867,-714.293585,23.357838, -0,0,1,0.00829,-763.617296,23.357836, -0,0,1,454.667735,-735.026158,23.357838, -0,0,1,684.332867,-714.293585,23.357838, -0,0,1,454.667735,-735.026158,23.357838, -0,-0,1,665.021358,-723.600195,23.357838, -0,-0,1,665.021358,-723.600195,23.357838, -0,0,1,454.667735,-735.026158,23.357838, -0,-0,1,644.63623,-730.229356,23.357838, -0,-0,1,644.63623,-730.229356,23.357838, -0,0,1,454.667735,-735.026158,23.357838, -0,-0,1,623.546332,-734.061121,23.357838, -0,-0,1,623.546332,-734.061121,23.357838, -0,0,1,454.667735,-735.026158,23.357838, -0,-0,1,602.133266,-735.026157,23.357838, -0,0,1,454.667735,-735.026158,23.357838, -0,0,1,0.00829,-763.617296,23.357836, -0,-0,1,454.797652,-738.60882,23.357838, -0,-0,1,454.797652,-738.60882,23.357838, -0,0,1,0.00829,-763.617296,23.357836, -0,0,1,454.431238,-742.175043,23.357838, -0,0,1,454.431238,-742.175043,23.357838, -0,0,1,0.00829,-763.617296,23.357836, -0,0,1,453.575534,-745.656322,23.357838, -0,0,1,453.575534,-745.656322,23.357838, -0,0,1,0.00829,-763.617296,23.357836, -0,0,1,452.246975,-748.985782,23.357838, -0,0,1,452.246975,-748.985782,23.357838, -0,0,1,0.00829,-763.617296,23.357836, -0,0,1,450.471085,-752.099463,23.357838, -0,0,1,450.471085,-752.099463,23.357838, -0,0,1,0.00829,-763.617296,23.357836, -0,0,1,448.281977,-754.937554,23.357838, -0,0,1,448.281977,-754.937554,23.357838, -0,0,1,0.00829,-763.617296,23.357836, -0,0,1,445.721704,-757.445533,23.357838, -0,0,1,445.721704,-757.445533,23.357838, -0,0,1,0.00829,-763.617296,23.357836, -0,0,1,442.839449,-759.575224,23.357838, -0,0,1,442.839449,-759.575224,23.357838, -0,0,1,0.00829,-763.617296,23.357836, -0,0,1,439.690579,-761.285715,23.357838, -0,0,1,439.690579,-761.285715,23.357838, -0,0,1,0.00829,-763.617296,23.357836, -0,0,1,436.335584,-762.544148,23.357838, -0,0,1,436.335584,-762.544148,23.357838, -0,0,1,0.00829,-763.617296,23.357836, -0,0,1,432.838912,-763.326349,23.357838, -0,0,1,432.838912,-763.326349,23.357838, -0,0,1,0.00829,-763.617296,23.357836, -0,0,1,429.267734,-763.617291,23.357838, 0.999748,-0.018186,0.013146,473.717777,-724.524762,134.576865, 0.995804,-0.08054,0.043457,473.642074,-743.137303,112.328326, 0.999748,-0.019808,0.010545,473.717772,-740.196479,110.67556, 0.995804,-0.08054,0.043457,473.642074,-743.137303,112.328326, 0.999748,-0.018186,0.013146,473.717777,-724.524762,134.576865, 0.995804,-0.073866,0.054027,473.642079,-727.212939,136.614949, 0.609101,-0.737549,0.291577,717.894067,-715.319418,70.22617, 0.499663,-0.754768,0.425045,696.7588,-717.703482,98.034266, 0.499663,-0.805647,0.318231,696.758793,-728.459324,75.40331, 0.499663,-0.754768,0.425045,696.7588,-717.703482,98.034266, 0.609101,-0.737549,0.291577,717.894067,-715.319418,70.22617, 0.616524,-0.682339,0.392825,717.894074,-705.391609,91.114894, -0.614316,0.68383,-0.393691,702.221357,-684.591376,79.42501, -0.707841,0.651123,-0.273862,718.363098,-679.96832,56.297814, -0.606705,0.739249,-0.292265,702.221351,-693.120267,61.479696, -0.707841,0.651123,-0.273862,718.363098,-679.96832,56.297814, -0.614316,0.68383,-0.393691,702.221357,-684.591376,79.42501, -0.71736,0.602889,-0.34917,718.363103,-672.268221,72.499299, 0.874212,-0.47211,0.113426,470.677497,-773.716304,60.685516, 0.812465,-0.579983,0.059329,468.840127,-781.672997,31.058037, 0.885205,-0.462786,0.04734,470.677482,-778.860284,30.770308, 0.812465,-0.579983,0.059329,468.840127,-781.672997,31.058037, 0.874212,-0.47211,0.113426,470.677497,-773.716304,60.685516, 0.79876,-0.584897,0.140986,468.840142,-776.463573,61.353839, 0.867227,-0.463727,0.18131,767.829328,-662.181333,49.28971, 0.800126,-0.584324,0.13551,753.739273,-687.397248,39.686742, 0.87794,-0.465203,0.113169,767.829322,-666.812843,34.679214, 0.800126,-0.584324,0.13551,753.739273,-687.397248,39.686742, 0.867227,-0.463727,0.18131,767.829328,-662.181333,49.28971, 0.794465,-0.565471,0.221515,753.73928,-681.891377,57.055486, -0.832687,0.483376,-0.27015,450.47112,-727.926176,103.779563, -0.901181,0.346254,-0.26073,452.247014,-710.823017,124.188674, -0.901181,0.378553,-0.211115,452.247009,-725.206979,102.251354, -0.901181,0.346254,-0.26073,452.247014,-710.823017,124.188674, -0.832687,0.483376,-0.27015,450.47112,-727.926176,103.779563, -0.832687,0.442054,-0.333498,450.471124,-713.308606,126.073164, -0.832687,0.515679,-0.201762,450.471112,-739.369533,79.702032, -0.901181,0.378553,-0.211115,452.247009,-725.206979,102.251354, -0.901181,0.40379,-0.157562,452.247002,-736.467457,78.558611, -0.901181,0.378553,-0.211115,452.247009,-725.206979,102.251354, -0.832687,0.515679,-0.201762,450.471112,-739.369533,79.702032, -0.832687,0.483376,-0.27015,450.47112,-727.926176,103.779563, 0.148826,-0.01661,0.988724,624.95529,-549.169432,215.762941, 0.234823,0,0.972038,649.884069,-186.86272,210.885907, 0.105242,0,0.994447,624.95529,-186.86272,215.762941, 0.234823,0,0.972038,649.884069,-186.86272,210.885907, 0.148826,-0.01661,0.988724,624.95529,-549.169432,215.762941, 0.277314,-0.016138,0.960644,649.884069,-549.087494,210.885907, -0.9937,0.002257,-0.112046,764.031409,-546.296855,44.770904, -0.997977,0.055997,-0.030099,764.9959,-186.86272,23.357838, -0.998987,0.001007,-0.04498,764.9959,-545.937132,23.357838, -0.997977,0.055997,-0.030099,764.9959,-186.86272,23.357838, -0.9937,0.002257,-0.112046,764.031409,-546.296855,44.770904, -0.99093,0,-0.134378,764.031409,-186.86272,44.770904, -0.112343,0.486683,-0.866325,623.546362,-644.548798,162.550587, -0.022557,0.36647,-0.930156,602.133289,-623.054827,173.833938, -0.112343,0.364093,-0.924562,623.546355,-622.700434,172.934486, -0.022557,0.36647,-0.930156,602.133289,-623.054827,173.833938, -0.112343,0.486683,-0.866325,623.546362,-644.548798,162.550587, -0.022557,0.4898,-0.871543,602.133296,-645.022449,163.39336, -0.649152,0.35745,-0.67144,445.72174,-656.026027,182.972343, -0.748179,0.244321,-0.616875,448.282005,-630.366836,192.392159, -0.748179,0.326101,-0.577828,448.282012,-654.795099,180.782109, -0.748179,0.244321,-0.616875,448.282005,-630.366836,192.392159, -0.649152,0.35745,-0.67144,445.72174,-656.026027,182.972343, -0.649152,0.262621,-0.713885,445.721732,-631.287828,194.729696, 0.229025,-0.229739,0.945922,455.006085,-613.111378,235.617099, 0.361665,-0.341228,0.867619,458.222244,-643.22526,225.027705, 0.361665,-0.219818,0.906024,458.222231,-612.875739,234.648467, 0.361665,-0.341228,0.867619,458.222244,-643.22526,225.027705, 0.229025,-0.229739,0.945922,455.006085,-613.111378,235.617099, 0.229025,-0.356494,0.905793,455.006098,-643.590692,225.955193, -0,0.81044,-0.585821,0.016303,-722.503108,133.044187, -0.040706,0.871018,-0.489562,429.267772,-737.984764,109.432572, -0,0.882708,-0.469921,0.016298,-737.984793,109.432704, -0.040706,0.871018,-0.489562,429.267772,-737.984764,109.432572, -0,0.81044,-0.585821,0.016303,-722.503108,133.044187, -0.040706,0.796183,-0.603686,429.267777,-722.503059,133.044086, -0.040706,0.796183,-0.603686,429.267777,-722.503059,133.044086, -0.150375,0.86173,-0.484571,432.838949,-737.730682,109.289775, -0.040706,0.871018,-0.489562,429.267772,-737.984764,109.432572, -0.150375,0.86173,-0.484571,432.838949,-737.730682,109.289775, -0.040706,0.796183,-0.603686,429.267777,-722.503059,133.044086, -0.150375,0.787661,-0.597476,432.838954,-722.270805,132.867998, 0.127347,-0.98669,0.101126,624.955308,-764.385936,29.28956, 0.030867,-0.971194,0.236282,599.602131,-761.101673,57.616723, 0.030866,-0.994332,0.101738,599.602117,-765.945157,29.449075, 0.030867,-0.971194,0.236282,599.602131,-761.101673,57.616723, 0.127347,-0.98669,0.101126,624.955308,-764.385936,29.28956, 0.127347,-0.963706,0.234635,624.955322,-759.578731,57.246228, -0.928106,0.006604,-0.372257,753.576386,-546.993607,86.24593, -0.96393,0,-0.266155,760.201807,-186.86272,65.860802, -0.969674,0.004471,-0.24436,760.201807,-546.651151,65.860802, -0.96393,0,-0.266155,760.201807,-186.86272,65.860802, -0.928106,0.006604,-0.372257,753.576386,-546.993607,86.24593, -0.919489,0,-0.393115,753.576386,-186.86272,86.24593, -0.969674,0.004471,-0.24436,760.201807,-546.651151,65.860802, -0.99093,0,-0.134378,764.031409,-186.86272,44.770904, -0.9937,0.002257,-0.112046,764.031409,-546.296855,44.770904, -0.99093,0,-0.134378,764.031409,-186.86272,44.770904, -0.969674,0.004471,-0.24436,760.201807,-546.651151,65.860802, -0.96393,0,-0.266155,760.201807,-186.86272,65.860802, -0.494423,0.75738,-0.426523,684.332893,-694.910066,85.224197, -0.606705,0.739249,-0.292265,702.221351,-693.120267,61.479696, -0.494423,0.808436,-0.31934,684.332887,-704.132939,65.818702, -0.606705,0.739249,-0.292265,702.221351,-693.120267,61.479696, -0.494423,0.75738,-0.426523,684.332893,-694.910066,85.224197, -0.614316,0.68383,-0.393691,702.221357,-684.591376,79.42501, -0.649152,0.595502,-0.473264,445.721745,-717.576266,129.308758, -0.748179,0.469999,-0.468325,448.282019,-697.799917,148.177329, -0.748179,0.529432,-0.399912,448.282017,-715.574197,127.790857, -0.748179,0.469999,-0.468325,448.282019,-697.799917,148.177329, -0.649152,0.595502,-0.473264,445.721745,-717.576266,129.308758, -0.649152,0.525457,-0.549997,445.721747,-699.576473,149.953886, -0.022557,0.603993,-0.79667,602.133301,-665.362465,150.056725, -0,0.509694,-0.860356,454.667766,-645.022494,163.39337, -0.022557,0.4898,-0.871543,602.133296,-645.022449,163.39336, -0,0.509694,-0.860356,454.667766,-645.022494,163.39337, -0.022557,0.603993,-0.79667,602.133301,-665.362465,150.056725, -0,0.622177,-0.782877,454.66777,-665.3625,150.056742, 0.127347,-0.963706,0.234635,624.955322,-759.578731,57.246228, 0.030867,-0.929938,0.366419,599.602143,-752.465071,84.861627, 0.030867,-0.971194,0.236282,599.602131,-761.101673,57.616723, 0.030867,-0.929938,0.366419,599.602143,-752.465071,84.861627, 0.127347,-0.963706,0.234635,624.955322,-759.578731,57.246228, 0.127347,-0.922744,0.363767,624.955334,-751.006818,84.287065, -0,0.882708,-0.469921,0.016298,-737.984793,109.432704, -0.040706,0.929604,-0.366305,429.267763,-750.104609,83.931667, -0,0.938509,-0.345255,0.01629,-750.104623,83.931833, -0.040706,0.929604,-0.366305,429.267763,-750.104609,83.931667, -0,0.882708,-0.469921,0.016298,-737.984793,109.432704, -0.040706,0.871018,-0.489562,429.267772,-737.984764,109.432572, 0.999748,-0.021919,0.004805,473.717752,-761.101674,57.616782, 0.997653,-0.068124,0.006968,473.642039,-769.30108,29.792441, 0.999748,-0.022318,0.002282,473.717738,-765.945156,29.449145, 0.997653,-0.068124,0.006968,473.642039,-769.30108,29.792441, 0.999748,-0.021919,0.004805,473.717752,-761.101674,57.616782, 0.995804,-0.089282,0.020098,473.642053,-764.379515,58.414175, 0.091928,-0.601482,0.793579,451.683345,-699.535099,195.12947, 0.229025,-0.688056,0.688568,455.006115,-723.308225,173.685638, 0.229025,-0.58781,0.775904,455.006113,-699.207898,194.697902, 0.229025,-0.688056,0.688568,455.006115,-723.308225,173.685638, 0.091928,-0.601482,0.793579,451.683345,-699.535099,195.12947, 0.091928,-0.70401,0.704215,451.683346,-723.691181,174.068594, 0.995804,-0.035007,0.084556,473.642065,-635.720877,205.981096, 0.973657,-0.113053,0.198017,473.101758,-663.582664,196.418147, 0.995804,-0.046203,0.078997,473.642074,-661.950913,193.514715, 0.973657,-0.113053,0.198017,473.101758,-663.582664,196.418147, 0.995804,-0.035007,0.084556,473.642065,-635.720877,205.981096, 0.973657,-0.085015,0.211575,473.101749,-636.941768,209.079797, 0.609101,-0.770402,0.188354,717.894058,-722.308196,48.179466, 0.499663,-0.805647,0.318231,696.758793,-728.459324,75.40331, 0.499663,-0.841496,0.20548,696.758783,-736.031005,51.517793, 0.499663,-0.805647,0.318231,696.758793,-728.459324,75.40331, 0.609101,-0.770402,0.188354,717.894058,-722.308196,48.179466, 0.609101,-0.737549,0.291577,717.894067,-715.319418,70.22617, -0.537771,0.734555,-0.413801,442.839485,-734.454802,107.448703, -0.649152,0.701164,-0.294909,445.721732,-744.352284,81.665241, -0.537771,0.78409,-0.309846,442.839477,-746.337241,82.447316, -0.649152,0.701164,-0.294909,445.721732,-744.352284,81.665241, -0.537771,0.734555,-0.413801,442.839485,-734.454802,107.448703, -0.649152,0.654437,-0.387703,445.72174,-732.59493,106.40344, 0.381503,-0.452381,0.806106,673.957376,-653.15444,177.862935, 0.499663,-0.522735,0.690714,696.758805,-668.611056,154.341548, 0.499663,-0.423738,0.755502,696.7588,-647.656853,168.080895, 0.499663,-0.522735,0.690714,696.758805,-668.611056,154.341548, 0.381503,-0.452381,0.806106,673.957376,-653.15444,177.862935, 0.381503,-0.558006,0.736942,673.957381,-675.390322,163.28321, 0.256673,-0.473186,0.842742,649.884119,-657.135168,184.945974, 0.381503,-0.558006,0.736942,673.957381,-675.390322,163.28321, 0.381503,-0.452381,0.806106,673.957376,-653.15444,177.862935, 0.381503,-0.558006,0.736942,673.957381,-675.390322,163.28321, 0.256673,-0.473186,0.842742,649.884119,-657.135168,184.945974, 0.256673,-0.583609,0.770402,649.884124,-680.299096,169.757745, 0.127347,-0.48578,0.864755,624.955342,-659.530197,189.207523, 0.256673,-0.583609,0.770402,649.884124,-680.299096,169.757745, 0.256673,-0.473186,0.842742,649.884119,-657.135168,184.945974, 0.256673,-0.583609,0.770402,649.884124,-680.299096,169.757745, 0.127347,-0.48578,0.864755,624.955342,-659.530197,189.207523, 0.127347,-0.599085,0.790493,624.955347,-683.252488,173.653183, 0.030867,-0.489683,0.871354,599.602151,-660.298109,190.573883, 0.127347,-0.599085,0.790493,624.955347,-683.252488,173.653183, 0.127347,-0.48578,0.864755,624.955342,-659.530197,189.207523, 0.127347,-0.599085,0.790493,624.955347,-683.252488,173.653183, 0.030867,-0.489683,0.871354,599.602151,-660.298109,190.573883, 0.030867,-0.603851,0.796499,599.602156,-684.199423,174.90216, 0,-0.509694,0.860356,473.717772,-660.298148,190.573891, 0.030867,-0.603851,0.796499,599.602156,-684.199423,174.90216, 0.030867,-0.489683,0.871354,599.602151,-660.298109,190.573883, 0.030867,-0.603851,0.796499,599.602156,-684.199423,174.90216, 0,-0.509694,0.860356,473.717772,-660.298148,190.573891, 0,-0.622177,0.782877,473.717777,-684.199453,174.902175, 0.999748,-0.011437,0.019306,473.717772,-660.298148,190.573891, 0.995804,-0.056536,0.071964,473.642079,-686.237536,177.590351, 0.999748,-0.013961,0.017568,473.717777,-684.199453,174.902175, 0.995804,-0.056536,0.071964,473.642079,-686.237536,177.590351, 0.999748,-0.011437,0.019306,473.717772,-660.298148,190.573891, 0.995804,-0.046203,0.078997,473.642074,-661.950913,193.514715, 0.995804,-0.046203,0.078997,473.642074,-661.950913,193.514715, 0.973657,-0.138981,0.180764,473.101763,-688.249706,180.244348, 0.995804,-0.056536,0.071964,473.642079,-686.237536,177.590351, 0.973657,-0.138981,0.180764,473.101763,-688.249706,180.244348, 0.995804,-0.046203,0.078997,473.642074,-661.950913,193.514715, 0.973657,-0.113053,0.198017,473.101758,-663.582664,196.418147, -0.285905,0.677271,-0.67791,436.335627,-703.188138,153.565551, -0.415875,0.72429,-0.549957,439.690621,-720.641807,131.632947, -0.285905,0.76333,-0.579298,436.335626,-721.646389,132.394587, -0.415875,0.72429,-0.549957,439.690621,-720.641807,131.632947, -0.285905,0.677271,-0.67791,436.335627,-703.188138,153.565551, -0.415875,0.642593,-0.643523,439.690622,-702.296712,152.674124, 0.997846,-0.065595,-0,847.545902,-563.749227,0, 0.991423,-0.130694,-0,843.130723,-608.452917,23.357838, 0.986627,-0.162996,-0,843.130723,-608.452917,-0, 0.991423,-0.130694,-0,843.130723,-608.452917,23.357838, 0.997846,-0.065595,-0,847.545902,-563.749227,0, 0.999698,-0.024594,-0,847.545902,-563.749227,23.357838, 0.012852,-0.014396,0.999814,448.31772,-549.622454,242.726639, 0.068639,0,0.997642,451.683281,-186.86272,242.65094, 0.007496,-0,0.999972,448.31772,-186.86272,242.726639, 0.068639,0,0.997642,451.683281,-186.86272,242.65094, 0.012852,-0.014396,0.999814,448.31772,-549.622454,242.726639, 0.114758,-0.016686,0.993253,451.683281,-549.621181,242.65094, 0.874212,-0.294445,0.386077,470.677524,-692.04293,185.247507, 0.79876,-0.426323,0.424536,468.840171,-716.92159,167.299002, 0.874212,-0.344308,0.342352,470.677525,-714.922322,165.299734, 0.79876,-0.426323,0.424536,468.840171,-716.92159,167.299002, 0.874212,-0.294445,0.386077,470.677524,-692.04293,185.247507, 0.79876,-0.364496,0.47867,468.840169,-693.751117,187.500559, 0,-0.622177,0.782877,473.717777,-684.199453,174.902175, 0.030867,-0.706755,0.706785,599.602158,-705.742267,156.119679, 0.030867,-0.603851,0.796499,599.602156,-684.199423,174.90216, 0.030867,-0.706755,0.706785,599.602158,-705.742267,156.119679, 0,-0.622177,0.782877,473.717777,-684.199453,174.902175, 0,-0.723053,0.690793,473.717779,-705.742288,156.119701, 0.973657,-0.182625,0.136528,473.101763,-729.866936,138.627118, 0.932875,-0.314728,0.175187,472.107204,-748.850999,115.539467, 0.973657,-0.199526,0.110368,473.101758,-746.040734,113.960076, 0.932875,-0.314728,0.175187,472.107204,-748.850999,115.539467, 0.973657,-0.182625,0.136528,473.101763,-729.866936,138.627118, 0.932875,-0.28792,0.21644,472.107209,-732.43577,140.574721, 0.932875,-0.28792,0.21644,472.107209,-732.43577,140.574721, 0.874212,-0.423953,0.236679,470.677518,-751.514112,117.036157, 0.932875,-0.314728,0.175187,472.107204,-748.850999,115.539467, 0.874212,-0.423953,0.236679,470.677518,-751.514112,117.036157, 0.932875,-0.28792,0.21644,472.107209,-732.43577,140.574721, 0.874212,-0.387747,0.292242,470.677524,-734.870094,142.420342, 0.874212,-0.387747,0.292242,470.677524,-734.870094,142.420342, 0.79876,-0.525111,0.293667,468.840164,-753.978916,118.421396, 0.874212,-0.423953,0.236679,470.677518,-751.514112,117.036157, 0.79876,-0.525111,0.293667,468.840164,-753.978916,118.421396, 0.874212,-0.387747,0.292242,470.677524,-734.870094,142.420342, 0.79876,-0.480196,0.362483,468.840169,-737.123146,144.128529, -0.901181,0.307496,-0.305481,452.247015,-693.58391,143.961322, -0.952384,0.185405,-0.242052,453.575571,-671.796178,158.542589, -0.952384,0.216659,-0.21453,453.575573,-691.225448,141.602861, -0.952384,0.185405,-0.242052,453.575571,-671.796178,158.542589, -0.901181,0.307496,-0.305481,452.247015,-693.58391,143.961322, -0.901181,0.263001,-0.344532,452.247014,-673.811262,161.200429, 0.20592,-0.978017,0.032869,455.006064,-790.947849,23.357838, 0.091928,-0.990581,0.101478,451.683301,-791.19694,32.032304, 0.068639,-0.997079,0.03351,451.683295,-791.488471,23.357838, 0.091928,-0.990581,0.101478,451.683301,-791.19694,32.032304, 0.20592,-0.978017,0.032869,455.006064,-790.947849,23.357838, 0.229024,-0.96833,0.09942,455.006069,-790.65817,31.977188, 0.972038,0,0.234823,787.130168,-186.86272,73.639808, 0.98887,-0.002499,0.148764,792.007202,-546.363038,48.711029, 0.994447,0,0.105242,792.007202,-186.86272,48.711029, 0.98887,-0.002499,0.148764,792.007202,-546.363038,48.711029, 0.972038,0,0.234823,787.130168,-186.86272,73.639808, 0.9608,-0.004657,0.277203,787.130168,-546.781824,73.639808, -0,0.976801,-0.214147,454.667749,-730.806274,50.246897, -0.022557,0.994554,-0.10175,602.133267,-734.928078,26.276163, -0,0.996871,-0.079045,454.667737,-734.928076,26.276244, -0.022557,0.994554,-0.10175,602.133267,-734.928078,26.276163, -0,0.976801,-0.214147,454.667749,-730.806274,50.246897, -0.022557,0.971412,-0.236325,602.13328,-730.806273,50.246828, 0.79876,-0.480196,0.362483,468.840169,-737.123146,144.128529, 0.717647,-0.602641,0.349008,466.630436,-756.198062,119.668573, 0.79876,-0.525111,0.293667,468.840164,-753.978916,118.421396, 0.717647,-0.602641,0.349008,466.630436,-756.198062,119.668573, 0.79876,-0.480196,0.362483,468.840169,-737.123146,144.128529, 0.707932,-0.563486,0.425811,466.630442,-739.151644,145.666467, -0.244971,0.355055,-0.902178,644.636252,-621.293309,169.363128, -0.112343,0.23471,-0.965552,623.546346,-599.640892,180.244333, -0.244971,0.228806,-0.942145,644.636243,-598.733545,176.514546, -0.112343,0.23471,-0.965552,623.546346,-599.640892,180.244333, -0.244971,0.355055,-0.902178,644.636252,-621.293309,169.363128, -0.112343,0.364093,-0.924562,623.546355,-622.700434,172.934486, 0,-0.258478,0.966017,473.717752,-607.239369,211.479086, 0.030867,-0.366379,0.929954,599.602143,-634.484215,202.842483, 0.030867,-0.23624,0.971204,599.602131,-607.23931,211.479086, 0.030867,-0.366379,0.929954,599.602143,-634.484215,202.842483, 0,-0.258478,0.966017,473.717752,-607.239369,211.479086, 0,-0.387702,0.921785,473.717764,-634.484263,202.842487, 0.794465,-0.565471,0.221515,753.73928,-681.891377,57.055486, 0.707841,-0.682368,0.182581,736.997677,-706.002952,44.212918, 0.800126,-0.584324,0.13551,753.739273,-687.397248,39.686742, 0.707841,-0.682368,0.182581,736.997677,-706.002952,44.212918, 0.794465,-0.565471,0.221515,753.73928,-681.891377,57.055486, 0.707841,-0.651123,0.273862,736.997686,-699.706769,64.074769, 0.616524,-0.682339,0.392825,717.894074,-705.391609,91.114894, 0.499663,-0.689808,0.523929,696.758805,-703.964135,118.988469, 0.499663,-0.754768,0.425045,696.7588,-717.703482,98.034266, 0.499663,-0.689808,0.523929,696.758805,-703.964135,118.988469, 0.616524,-0.682339,0.392825,717.894074,-705.391609,91.114894, 0.609002,-0.620953,0.493491,717.894078,-692.709977,110.455949, 0.995785,-0,0.091715,473.642021,-186.86272,220.6922, 0.999747,-0.000377,0.02248,473.71772,-549.195746,217.326639, 0.999747,0,0.022487,473.71772,-186.86272,217.326639, 0.999747,-0.000377,0.02248,473.71772,-549.195746,217.326639, 0.995785,-0,0.091715,473.642021,-186.86272,220.6922, 0.994417,-0.002312,0.105501,473.642021,-549.252285,220.6922, 0.361665,-0.341228,0.867619,458.222244,-643.22526,225.027705, 0.487279,-0.427162,0.761638,461.269994,-671.27861,210.111812, 0.487278,-0.319392,0.812741,461.269985,-642.699947,223.694428, 0.487279,-0.427162,0.761638,461.269994,-671.27861,210.111812, 0.361665,-0.341228,0.867619,458.222244,-643.22526,225.027705, 0.361665,-0.456272,0.813028,458.222253,-671.980704,211.361071, -0.985345,0.084925,-0.14793,454.431271,-648.531199,169.636534, -0.999454,0.013569,-0.030128,454.797676,-624.370524,177.173126, -0.999454,0.017548,-0.027998,454.797683,-646.780881,166.522129, -0.999454,0.013569,-0.030128,454.797676,-624.370524,177.173126, -0.985345,0.084925,-0.14793,454.431271,-648.531199,169.636534, -0.985345,0.063975,-0.158123,454.431263,-625.680129,180.496989, -0,0.976801,-0.214147,0.016279,-758.636496,57.017305, -0.040706,0.99398,-0.101718,429.267738,-763.421251,29.190985, -0,0.996871,-0.079045,0.016265,-763.421248,29.191222, -0.040706,0.99398,-0.101718,429.267738,-763.421251,29.190985, -0,0.976801,-0.214147,0.016279,-758.636496,57.017305, -0.040706,0.970848,-0.236215,429.267752,-758.636494,57.017104, -0.832126,0.009639,-0.554503,450.471071,-548.95985,203.284158, -0.890491,0,-0.455,452.246961,-186.86272,200.172234, -0.90081,0.007643,-0.434147,452.246961,-548.907571,200.172234, -0.890491,0,-0.455,452.246961,-186.86272,200.172234, -0.832126,0.009639,-0.554503,450.471071,-548.95985,203.284158, -0.819027,0,-0.573755,450.471071,-186.86272,203.284158, 0.229025,-0.356494,0.905793,455.006098,-643.590692,225.955193, 0.361665,-0.456272,0.813028,458.222253,-671.980704,211.361071, 0.361665,-0.341228,0.867619,458.222244,-643.22526,225.027705, 0.361665,-0.456272,0.813028,458.222253,-671.980704,211.361071, 0.229025,-0.356494,0.905793,455.006098,-643.590692,225.955193, 0.229025,-0.476597,0.848766,455.006107,-672.469112,212.230111, -0.993727,0.098232,-0.053457,764.031424,-589.417442,25.936523, -0.998992,0.039135,-0.021994,764.267941,-584.829097,23.357838, -0.99093,0.121368,-0.057682,764.031423,-590.643016,23.357838, -0.150375,0.86173,-0.484571,432.838949,-737.730682,109.289775, -0.285905,0.891387,-0.351693,436.335613,-749.104397,83.53758, -0.150375,0.919722,-0.362627,432.838941,-749.833439,83.824825, -0.285905,0.891387,-0.351693,436.335613,-749.104397,83.53758, -0.150375,0.86173,-0.484571,432.838949,-737.730682,109.289775, -0.285905,0.835148,-0.469878,436.335621,-737.047581,108.905866, 0.995804,-0.073866,0.054027,473.642079,-727.212939,136.614949, 0.973657,-0.199526,0.110368,473.101758,-746.040734,113.960076, 0.995804,-0.08054,0.043457,473.642074,-743.137303,112.328326, 0.973657,-0.199526,0.110368,473.101758,-746.040734,113.960076, 0.995804,-0.073866,0.054027,473.642079,-727.212939,136.614949, 0.973657,-0.182625,0.136528,473.101763,-729.866936,138.627118, 0.707932,-0.427549,0.562168,736.997696,-649.94032,129.715362, 0.609002,-0.547915,0.573503,717.894079,-677.511106,127.888519, 0.707932,-0.500166,0.498664,736.997697,-665.645303,116.022715, 0.609002,-0.547915,0.573503,717.894079,-677.511106,127.888519, 0.707932,-0.427549,0.562168,736.997696,-649.94032,129.715362, 0.609002,-0.464655,0.642816,717.894078,-660.078536,143.08739, 0.499663,-0.522735,0.690714,696.758805,-668.611056,154.341548, 0.609002,-0.547915,0.573503,717.894079,-677.511106,127.888519, 0.609002,-0.464655,0.642816,717.894078,-660.078536,143.08739, 0.609002,-0.547915,0.573503,717.894079,-677.511106,127.888519, 0.499663,-0.522735,0.690714,696.758805,-668.611056,154.341548, 0.499663,-0.61198,0.61304,696.758806,-687.497596,137.875009, 0.381503,-0.558006,0.736942,673.957381,-675.390322,163.28321, 0.499663,-0.61198,0.61304,696.758806,-687.497596,137.875009, 0.499663,-0.522735,0.690714,696.758805,-668.611056,154.341548, 0.499663,-0.61198,0.61304,696.758806,-687.497596,137.875009, 0.381503,-0.558006,0.736942,673.957381,-675.390322,163.28321, 0.381503,-0.653222,0.654031,673.957383,-695.432071,145.809483, 0.256673,-0.583609,0.770402,649.884124,-680.299096,169.757745, 0.381503,-0.653222,0.654031,673.957383,-695.432071,145.809483, 0.381503,-0.558006,0.736942,673.957381,-675.390322,163.28321, 0.381503,-0.653222,0.654031,673.957383,-695.432071,145.809483, 0.256673,-0.583609,0.770402,649.884124,-680.299096,169.757745, 0.256673,-0.683145,0.68369,649.884126,-701.177315,151.554728, 0.127347,-0.599085,0.790493,624.955347,-683.252488,173.653183, 0.256673,-0.683145,0.68369,649.884126,-701.177315,151.554728, 0.256673,-0.583609,0.770402,649.884124,-680.299096,169.757745, 0.256673,-0.683145,0.68369,649.884126,-701.177315,151.554728, 0.127347,-0.599085,0.790493,624.955347,-683.252488,173.653183, 0.127347,-0.701215,0.701485,624.955349,-704.633973,155.011385, 0.867227,-0.434695,0.24281,767.829333,-655.602109,63.132805, 0.794465,-0.565471,0.221515,753.73928,-681.891377,57.055486, 0.867227,-0.463727,0.18131,767.829328,-662.181333,49.28971, 0.794465,-0.565471,0.221515,753.73928,-681.891377,57.055486, 0.867227,-0.434695,0.24281,767.829333,-655.602109,63.132805, 0.794465,-0.530011,0.296503,753.739286,-674.070091,73.511955, 0.794465,-0.530011,0.296503,753.739286,-674.070091,73.511955, 0.707841,-0.651123,0.273862,736.997686,-699.706769,64.074769, 0.794465,-0.565471,0.221515,753.73928,-681.891377,57.055486, 0.707841,-0.651123,0.273862,736.997686,-699.706769,64.074769, 0.794465,-0.530011,0.296503,753.739286,-674.070091,73.511955, 0.717149,-0.603071,0.349289,736.997692,-690.762817,82.893397, 0.707841,-0.651123,0.273862,736.997686,-699.706769,64.074769, 0.616524,-0.682339,0.392825,717.894074,-705.391609,91.114894, 0.609101,-0.737549,0.291577,717.894067,-715.319418,70.22617, 0.616524,-0.682339,0.392825,717.894074,-705.391609,91.114894, 0.707841,-0.651123,0.273862,736.997686,-699.706769,64.074769, 0.717149,-0.603071,0.349289,736.997692,-690.762817,82.893397, 0.487278,-0.319392,0.812741,461.269985,-642.699947,223.694428, 0.592261,-0.384709,0.707974,464.090784,-670.376318,208.506333, 0.603443,-0.29142,0.742247,464.090775,-642.024843,221.980973, 0.592261,-0.384709,0.707974,464.090784,-670.376318,208.506333, 0.487278,-0.319392,0.812741,461.269985,-642.699947,223.694428, 0.487279,-0.427162,0.761638,461.269994,-671.27861,210.111812, 0.603443,-0.774584,0.189413,464.090763,-781.089165,62.479098, 0.487278,-0.812176,0.320826,461.269985,-773.317015,93.077359, 0.487278,-0.848318,0.207161,461.269972,-782.878631,62.914419, 0.487278,-0.812176,0.320826,461.269985,-773.317015,93.077359, 0.603443,-0.774584,0.189413,464.090763,-781.089165,62.479098, 0.603443,-0.741548,0.293196,464.090775,-771.60356,92.402256, -0.832687,0.538362,-0.129611,450.471101,-747.425197,54.289747, -0.901181,0.40379,-0.157562,452.247002,-736.467457,78.558611, -0.901181,0.421494,-0.101069,452.246991,-744.394382,53.552447, -0.901181,0.40379,-0.157562,452.247002,-736.467457,78.558611, -0.832687,0.538362,-0.129611,450.471101,-747.425197,54.289747, -0.832687,0.515679,-0.201762,450.471112,-739.369533,79.702032, -0.901181,0.421494,-0.101069,452.246991,-744.394382,53.552447, -0.952384,0.284225,-0.110366,453.575559,-733.364268,77.335952, -0.952384,0.296613,-0.070606,453.575549,-741.153531,52.764052, -0.952384,0.284225,-0.110366,453.575559,-733.364268,77.335952, -0.901181,0.421494,-0.101069,452.246991,-744.394382,53.552447, -0.901181,0.40379,-0.157562,452.247002,-736.467457,78.558611, -0.952384,0.296613,-0.070606,453.575549,-741.153531,52.764052, -0.985345,0.159265,-0.061075,454.431263,-730.119577,76.057541, -0.985345,0.166102,-0.038803,454.431253,-737.764902,51.939707, -0.985345,0.159265,-0.061075,454.431263,-730.119577,76.057541, -0.952384,0.296613,-0.070606,453.575549,-741.153531,52.764052, -0.952384,0.284225,-0.110366,453.575559,-733.364268,77.335952, -0.985345,0.166102,-0.038803,454.431253,-737.764902,51.939707, -0.999454,0.031287,-0.010628,454.797676,-726.795714,74.747937, -0.999454,0.032443,-0.006265,454.797666,-734.293588,51.095248, -0.999454,0.031287,-0.010628,454.797676,-726.795714,74.747937, -0.985345,0.166102,-0.038803,454.431253,-737.764902,51.939707, -0.985345,0.159265,-0.061075,454.431263,-730.119577,76.057541, -0.999454,0.032443,-0.006265,454.797666,-734.293588,51.095248, -0.999345,-0.033959,0.012493,454.667758,-723.45653,73.432296, -0.999345,-0.035345,0.007749,454.667749,-730.806274,50.246897, -0.999345,-0.033959,0.012493,454.667758,-723.45653,73.432296, -0.999454,0.032443,-0.006265,454.797666,-734.293588,51.095248, -0.999454,0.031287,-0.010628,454.797676,-726.795714,74.747937, -0,0.938509,-0.345255,454.667758,-723.45653,73.432296, -0.022557,0.971412,-0.236325,602.13328,-730.806273,50.246828, -0,0.976801,-0.214147,454.667749,-730.806274,50.246897, -0.022557,0.971412,-0.236325,602.13328,-730.806273,50.246828, -0,0.938509,-0.345255,454.667758,-723.45653,73.432296, -0.022557,0.930148,-0.366491,602.133289,-723.456525,73.43224, -0.022557,0.930148,-0.366491,602.133289,-723.456525,73.43224, -0.112343,0.96547,-0.235045,623.546346,-729.866921,50.018304, -0.022557,0.971412,-0.236325,602.13328,-730.806273,50.246828, -0.112343,0.96547,-0.235045,623.546346,-729.866921,50.018304, -0.022557,0.930148,-0.366491,602.133289,-723.456525,73.43224, -0.112343,0.924436,-0.364414,623.546355,-722.557073,73.077847, -0.112343,0.924436,-0.364414,623.546355,-722.557073,73.077847, -0.244971,0.941967,-0.229537,644.636243,-726.137133,49.110957, -0.112343,0.96547,-0.235045,623.546346,-729.866921,50.018304, -0.244971,0.941967,-0.229537,644.636243,-726.137133,49.110957, -0.112343,0.924436,-0.364414,623.546355,-722.557073,73.077847, -0.244971,0.901902,-0.355754,644.636252,-718.985715,71.670721, -0.244971,0.901902,-0.355754,644.636252,-718.985715,71.670721, -0.373111,0.90136,-0.219861,665.02137,-719.684398,47.541206, -0.244971,0.941967,-0.229537,644.636243,-726.137133,49.110957, -0.373111,0.90136,-0.219861,665.02137,-719.684398,47.541206, -0.244971,0.901902,-0.355754,644.636252,-718.985715,71.670721, -0.373111,0.862993,-0.340635,665.021379,-712.807071,69.236324, -0.787976,0.615705,-0,672.962315,-626.669842,-0, -0.828968,0.559296,-0,681.15025,-615.40225,5.83946, -0.847987,0.530018,-0,681.15025,-615.40225,-0, -0.828968,0.559296,-0,681.15025,-615.40225,5.83946, -0.787976,0.615705,-0,672.962315,-626.669842,-0, -0.766003,0.642837,-0,672.962315,-626.669842,5.83946, -0,-0,-1,700.992217,-563.749227,5.83946, -0,0,-1,0.001765,-186.86272,5.83946, 0,0,-1,764.9959,-186.86272,5.83946, -0,0,-1,0.001765,-186.86272,5.83946, -0,-0,-1,700.992217,-563.749227,5.83946, -0,-0,-1,0.000468,-674.370541,5.83946, -0,-0,-1,0.000468,-674.370541,5.83946, -0,-0,-1,700.992217,-563.749227,5.83946, -0,-0,-1,698.091838,-577.372321,5.83946, -0,-0,-1,0.000468,-674.370541,5.83946, -0,-0,-1,698.091838,-577.372321,5.83946, -0,-0,-1,693.784142,-590.617874,5.83946, -0,-0,-1,0.000468,-674.370541,5.83946, -0,-0,-1,693.784142,-590.617874,5.83946, -0,-0,-1,688.11627,-603.340929,5.83946, -0,-0,-1,0.000468,-674.370541,5.83946, -0,-0,-1,688.11627,-603.340929,5.83946, -0,-0,-1,681.15025,-615.40225,5.83946, -0,-0,-1,0.000468,-674.370541,5.83946, -0,-0,-1,681.15025,-615.40225,5.83946, -0,-0,-1,672.962315,-626.669842,5.83946, -0,-0,-1,0.000468,-674.370541,5.83946, -0,-0,-1,672.962315,-626.669842,5.83946, -0,-0,-1,663.642072,-637.020396,5.83946, -0,-0,-1,0.000468,-674.370541,5.83946, -0,-0,-1,663.642072,-637.020396,5.83946, -0,-0,-1,653.291518,-646.340639,5.83946, -0,-0,-1,0.000468,-674.370541,5.83946, -0,-0,-1,653.291518,-646.340639,5.83946, -0,-0,-1,642.023926,-654.528574,5.83946, -0,-0,-1,0.000468,-674.370541,5.83946, -0,-0,-1,642.023926,-654.528574,5.83946, -0,-0,-1,629.962605,-661.494594,5.83946, -0,-0,-1,0.000468,-674.370541,5.83946, -0,-0,-1,629.962605,-661.494594,5.83946, -0,-0,-1,617.239549,-667.162466,5.83946, -0,-0,-1,0.000468,-674.370541,5.83946, -0,-0,-1,617.239549,-667.162466,5.83946, -0,-0,-1,603.993997,-671.470162,5.83946, -0,-0,-1,0.000468,-674.370541,5.83946, -0,-0,-1,603.993997,-671.470162,5.83946, 0,-0,-1,590.370902,-674.370541,5.83946, -0.898717,0.438529,-0,688.11627,-603.340929,-0, -0.927092,0.374833,-0,693.784142,-590.617874,5.83946, -0.939612,0.342242,0,693.784142,-590.617874,-0, -0.927092,0.374833,-0,693.784142,-590.617874,5.83946, -0.898717,0.438529,-0,688.11627,-603.340929,-0, -0.882861,0.469634,-0,688.11627,-603.340929,5.83946, -0.719343,0.694655,-0,663.642072,-637.020396,-0, -0.766003,0.642837,-0,672.962315,-626.669842,5.83946, -0.787976,0.615705,-0,672.962315,-626.669842,-0, -0.766003,0.642837,-0,672.962315,-626.669842,5.83946, -0.719343,0.694655,-0,663.642072,-637.020396,-0, -0.694655,0.719343,-0,663.642072,-637.020396,5.83946, -0.694655,0.719343,-0,663.642072,-637.020396,5.83946, -0.642837,0.766003,-0,653.291518,-646.340639,-0, -0.615705,0.787976,-0,653.291518,-646.340639,5.83946, -0.642837,0.766003,-0,653.291518,-646.340639,-0, -0.694655,0.719343,-0,663.642072,-637.020396,5.83946, -0.719343,0.694655,-0,663.642072,-637.020396,-0, -0.985345,0.159265,-0.061075,454.431263,-730.119577,76.057541, -0.999454,0.029547,-0.014792,454.797683,-716.144717,97.158293, -0.999454,0.031287,-0.010628,454.797676,-726.795714,74.747937, -0.999454,0.029547,-0.014792,454.797683,-716.144717,97.158293, -0.985345,0.159265,-0.061075,454.431263,-730.119577,76.057541, -0.985345,0.149457,-0.082208,454.431271,-719.259121,98.908612, -0.040706,0.489496,-0.871055,429.267772,-659.055159,188.362176, -0,0.387702,-0.921785,0.01629,-633.55442,200.482036, -0.040706,0.366235,-0.929632,429.267763,-633.554255,200.482022, -0,0.387702,-0.921785,0.01629,-633.55442,200.482036, -0.040706,0.489496,-0.871055,429.267772,-659.055159,188.362176, -0,0.509694,-0.860356,0.016298,-659.055291,188.362206, 0.091928,-0.364886,0.926503,451.68333,-643.789223,226.459074, 0.229025,-0.476597,0.848766,455.006107,-672.469112,212.230111, 0.229025,-0.356494,0.905793,455.006098,-643.590692,225.955193, 0.229025,-0.476597,0.848766,455.006107,-672.469112,212.230111, 0.091928,-0.364886,0.926503,451.68333,-643.789223,226.459074, 0.091928,-0.487734,0.868139,451.683339,-672.734453,212.70224, -0.244971,0.685296,-0.685827,644.636265,-680.297547,130.67496, -0.373111,0.738976,-0.560984,665.02139,-690.558191,108.824546, -0.244971,0.772358,-0.586047,644.636264,-695.850119,112.836708, -0.373111,0.738976,-0.560984,665.02139,-690.558191,108.824546, -0.244971,0.685296,-0.685827,644.636265,-680.297547,130.67496, -0.373111,0.655639,-0.656449,665.021391,-675.601701,125.979113, 0.487278,-0.848318,0.207161,461.269972,-782.878631,62.914419, 0.361665,-0.867199,0.342292,458.222244,-774.650293,93.602673, 0.361665,-0.905753,0.220929,458.222231,-784.271055,63.253152, 0.361665,-0.867199,0.342292,458.222244,-774.650293,93.602673, 0.487278,-0.848318,0.207161,461.269972,-782.878631,62.914419, 0.487278,-0.812176,0.320826,461.269985,-773.317015,93.077359, -0.748179,0.244321,-0.616875,448.282005,-630.366836,192.392159, -0.832687,0.13217,-0.53774,450.471101,-603.912334,197.80261, -0.832687,0.204213,-0.514714,450.471112,-629.324619,189.746946, -0.832687,0.13217,-0.53774,450.471101,-603.912334,197.80261, -0.748179,0.244321,-0.616875,448.282005,-630.366836,192.392159, -0.741547,0.152765,-0.653277,448.281994,-604.584377,200.565168, 0.79876,-0.221723,0.559304,468.840155,-640.279768,217.551861, 0.700875,-0.343846,0.624935,466.630436,-669.291161,206.575475, 0.79876,-0.29587,0.523873,468.840164,-668.043983,204.356329, 0.700875,-0.343846,0.624935,466.630436,-669.291161,206.575475, 0.79876,-0.221723,0.559304,468.840155,-640.279768,217.551861, 0.707841,-0.243878,0.662936,466.630427,-641.212918,219.920255, -0.999454,0.017548,-0.027998,454.797683,-646.780881,166.522129, -0.999345,-0.014029,0.033354,454.667758,-623.054884,173.833943, -0.999345,-0.018443,0.031131,454.667766,-645.022494,163.39337, -0.999345,-0.014029,0.033354,454.667758,-623.054884,173.833943, -0.999454,0.017548,-0.027998,454.797683,-646.780881,166.522129, -0.999454,0.013569,-0.030128,454.797676,-624.370524,177.173126, -0.022557,0.4898,-0.871543,602.133296,-645.022449,163.39336, -0,0.387702,-0.921785,454.667758,-623.054884,173.833943, -0.022557,0.36647,-0.930156,602.133289,-623.054827,173.833938, -0,0.387702,-0.921785,454.667758,-623.054884,173.833943, -0.022557,0.4898,-0.871543,602.133296,-645.022449,163.39336, -0,0.509694,-0.860356,454.667766,-645.022494,163.39337, 0.603443,-0.741548,0.293196,464.090775,-771.60356,92.402256, 0.487279,-0.760883,0.428506,461.269994,-759.734399,121.656023, 0.487278,-0.812176,0.320826,461.269985,-773.317015,93.077359, 0.487279,-0.760883,0.428506,461.269994,-759.734399,121.656023, 0.603443,-0.741548,0.293196,464.090775,-771.60356,92.402256, 0.611311,-0.685845,0.394863,464.090784,-758.12892,120.753731, 0.229025,-0.476597,0.848766,455.006107,-672.469112,212.230111, 0.361665,-0.562804,0.74327,458.222259,-698.605625,193.903521, 0.361665,-0.456272,0.813028,458.222253,-671.980704,211.361071, 0.361665,-0.562804,0.74327,458.222259,-698.605625,193.903521, 0.229025,-0.476597,0.848766,455.006107,-672.469112,212.230111, 0.229025,-0.58781,0.775904,455.006113,-699.207898,194.697902, -0.527988,0,-0.849252,100.155807,-186.86272,2052.977553, -0.382683,0,-0.92388,69.023518,-280.29408,2069.618109, -0.382683,0,-0.92388,69.023518,-186.86272,2069.618109, -0.382683,0,-0.92388,69.023518,-280.29408,2069.618109, -0.527988,0,-0.849252,100.155807,-186.86272,2052.977553, -0.582554,0,-0.812792,100.155807,-280.29408,2052.977553, -0.582554,0,0.812792,100.155807,-280.29408,1753.526669, -0.707107,0,0.707107,127.443487,-186.86272,1775.921089, -0.527988,0,0.849252,100.155807,-186.86272,1753.526669, -0.707107,0,0.707107,127.443487,-186.86272,1775.921089, -0.582554,0,0.812792,100.155807,-280.29408,1753.526669, -0.707107,0,0.707107,127.443487,-280.29408,1775.921089, -0.812792,0,0.582554,149.837908,-280.29408,1803.208769, -0.707107,0,0.707107,127.443487,-186.86272,1775.921089, -0.707107,0,0.707107,127.443487,-280.29408,1775.921089, -0.707107,0,0.707107,127.443487,-186.86272,1775.921089, -0.812792,0,0.582554,149.837908,-280.29408,1803.208769, -0.849252,0,0.527988,149.837908,-186.86272,1803.208769, -0.849252,0,-0.527988,149.837908,-280.29408,2003.295453, -0.910825,0,-0.412792,166.478463,-186.86272,1972.163164, -0.935939,0,-0.352162,166.478463,-280.29408,1972.163164, -0.910825,0,-0.412792,166.478463,-186.86272,1972.163164, -0.849252,0,-0.527988,149.837908,-280.29408,2003.295453, -0.812792,0,-0.582554,149.837908,-186.86272,2003.295453, -0.870211,0.298718,-0.391791,744.275058,-616.515297,85.628667, -0.928388,0.183307,-0.323257,753.57641,-595.926736,76.035688, -0.928388,0.225646,-0.295263,753.576412,-604.820821,70.203974, -0.928388,0.183307,-0.323257,753.57641,-595.926736,76.035688, -0.870211,0.298718,-0.391791,744.275058,-616.515297,85.628667, -0.870211,0.242544,-0.428841,744.275056,-605.410265,92.910065, 0.973657,-0.085015,0.211575,473.101749,-636.941768,209.079797, 0.932875,-0.177759,0.313282,472.107204,-665.162054,199.228412, 0.973657,-0.113053,0.198017,473.101758,-663.582664,196.418147, 0.932875,-0.177759,0.313282,472.107204,-665.162054,199.228412, 0.973657,-0.085015,0.211575,473.101749,-636.941768,209.079797, 0.932875,-0.133411,0.334583,472.107195,-638.123482,212.079066, -0.112343,0.364093,-0.924562,623.546355,-622.700434,172.934486, -0.022557,0.236303,-0.971418,602.13328,-599.869416,181.183686, -0.112343,0.23471,-0.965552,623.546346,-599.640892,180.244333, -0.022557,0.236303,-0.971418,602.13328,-599.869416,181.183686, -0.112343,0.364093,-0.924562,623.546355,-622.700434,172.934486, -0.022557,0.36647,-0.930156,602.133289,-623.054827,173.833938, 0,-0.622177,0.782877,0.000063,-699.581047,195.189986, 0.011271,-0.70706,0.707064,448.317785,-723.744835,174.122247, 0.011271,-0.604116,0.796817,448.317783,-699.580941,195.189934, 0.011271,-0.70706,0.707064,448.317785,-723.744835,174.122247, 0,-0.622177,0.782877,0.000063,-699.581047,195.189986, 0,-0.723053,0.690793,0.000065,-723.744912,174.122324, -0.999454,0.027255,-0.01868,454.797688,-702.539296,117.908241, -0.999345,-0.026163,0.024996,454.667771,-683.695448,134.072861, -0.999345,-0.029325,0.021198,454.66777,-699.67933,115.739913, -0.999345,-0.026163,0.024996,454.667771,-683.695448,134.072861, -0.999454,0.027255,-0.01868,454.797688,-702.539296,117.908241, -0.999454,0.024455,-0.02222,454.797689,-686.233268,136.610681, -0,0.723053,-0.690793,454.667771,-683.695448,134.072861, -0.022557,0.796656,-0.604012,602.133301,-699.679313,115.739878, -0,0.81044,-0.585821,454.66777,-699.67933,115.739913, -0.022557,0.796656,-0.604012,602.133301,-699.679313,115.739878, -0,0.723053,-0.690793,454.667771,-683.695448,134.072861, -0.022557,0.706919,-0.706935,602.133302,-683.695423,134.072836, 0.361665,-0.456272,0.813028,458.222253,-671.980704,211.361071, 0.487279,-0.526963,0.696326,461.27,-697.739849,192.761586, 0.487279,-0.427162,0.761638,461.269994,-671.27861,210.111812, 0.487279,-0.526963,0.696326,461.27,-697.739849,192.761586, 0.361665,-0.456272,0.813028,458.222253,-671.980704,211.361071, 0.361665,-0.562804,0.74327,458.222259,-698.605625,193.903521, 0.030866,-0.101695,0.994337,599.602117,-579.071663,216.32257, 0.127347,-0.234264,0.963796,624.955322,-606.868816,209.956143, 0.127347,-0.100746,0.986728,624.955308,-578.912147,214.763349, 0.127347,-0.234264,0.963796,624.955322,-606.868816,209.956143, 0.030866,-0.101695,0.994337,599.602117,-579.071663,216.32257, 0.030867,-0.23624,0.971204,599.602131,-607.23931,211.479086, 0.091928,-0.926396,0.365157,451.68333,-776.081661,94.166635, 0.011271,-0.871702,0.489906,448.317778,-762.390973,123.149041, 0.011271,-0.930329,0.366553,448.317768,-776.152256,94.194451, 0.011271,-0.871702,0.489906,448.317778,-762.390973,123.149041, 0.091928,-0.926396,0.365157,451.68333,-776.081661,94.166635, 0.091928,-0.867996,0.487987,451.683339,-762.324827,123.111865, -0.796291,0.563252,-0.220608,732.466058,-664.91507,50.366817, -0.870211,0.43015,-0.240215,744.275056,-642.532652,55.787678, -0.870211,0.458871,-0.17936,744.275052,-648.232891,43.794023, -0.870211,0.43015,-0.240215,744.275056,-642.532652,55.787678, -0.796291,0.563252,-0.220608,732.466058,-664.91507,50.366817, -0.796291,0.527936,-0.295302,732.466063,-658.163576,64.572379, 0.229025,-0.905527,0.357167,455.006098,-775.57778,93.968105, 0.091928,-0.867996,0.487987,451.683339,-762.324827,123.111865, 0.091928,-0.926396,0.365157,451.68333,-776.081661,94.166635, 0.091928,-0.867996,0.487987,451.683339,-762.324827,123.111865, 0.229025,-0.905527,0.357167,455.006098,-775.57778,93.968105, 0.229025,-0.848411,0.477229,455.006107,-761.852699,122.846525, -0.112099,0.016649,-0.993558,623.546317,-548.656939,185.255996, -0.030004,0,-0.99955,602.133251,-186.86272,186.220487, -0.134378,0,-0.99093,623.546317,-186.86272,185.255996, -0.030004,0,-0.99955,602.133251,-186.86272,186.220487, -0.112099,0.016649,-0.993558,623.546317,-548.656939,185.255996, -0.022507,0.01679,-0.999606,602.133251,-548.673148,186.220487, 0.867227,-0.051963,0.495193,767.829315,-569.19647,119.787648, 0.794465,-0.14471,0.589818,753.739273,-589.30933,137.774661, 0.867227,-0.118957,0.483493,767.829322,-584.301801,117.190256, 0.794465,-0.14471,0.589818,753.739273,-589.30933,137.774661, 0.867227,-0.051963,0.495193,767.829315,-569.19647,119.787648, 0.794465,-0.062988,0.604035,753.739264,-571.352333,140.862403, 0.794465,-0.062988,0.604035,753.739264,-571.352333,140.862403, 0.707841,-0.151267,0.689985,736.997677,-593.835505,156.380365, 0.794465,-0.14471,0.589818,753.739273,-589.30933,137.774661, 0.707841,-0.151267,0.689985,736.997677,-593.835505,156.380365, 0.794465,-0.062988,0.604035,753.739264,-571.352333,140.862403, 0.707841,-0.055835,0.704162,736.997667,-573.300963,159.911321, 0.995804,-0.056536,0.071964,473.642079,-686.237536,177.590351, 0.973657,-0.162317,0.16014,473.101765,-710.482719,160.860131, 0.995804,-0.065815,0.063588,473.64208,-708.127668,158.505081, 0.973657,-0.162317,0.16014,473.101765,-710.482719,160.860131, 0.995804,-0.056536,0.071964,473.642079,-686.237536,177.590351, 0.973657,-0.138981,0.180764,473.101763,-688.249706,180.244348, -0.9698,0.173513,-0.171408,760.201828,-598.389085,48.766498, -0.993727,0.068775,-0.088188,764.031425,-579.704781,37.076602, -0.993727,0.08015,-0.077994,764.031425,-583.441377,33.81879, -0.993727,0.068775,-0.088188,764.031425,-579.704781,37.076602, -0.9698,0.173513,-0.171408,760.201828,-598.389085,48.766498, -0.9698,0.148537,-0.193454,760.201828,-592.476195,53.921748, -0.649152,0.654437,-0.387703,445.72174,-732.59493,106.40344, -0.748179,0.529432,-0.399912,448.282017,-715.574197,127.790857, -0.748179,0.578988,-0.324038,448.282012,-730.404697,105.172511, -0.748179,0.529432,-0.399912,448.282017,-715.574197,127.790857, -0.649152,0.654437,-0.387703,445.72174,-732.59493,106.40344, -0.649152,0.595502,-0.473264,445.721745,-717.576266,129.308758, -0.022557,0.796656,-0.604012,602.133301,-699.679313,115.739878, -0.112343,0.866156,-0.486984,623.546362,-712.173175,94.926211, -0.022557,0.871531,-0.489821,602.133296,-713.015947,95.399861, -0.112343,0.866156,-0.486984,623.546362,-712.173175,94.926211, -0.022557,0.796656,-0.604012,602.133301,-699.679313,115.739878, -0.112343,0.791717,-0.600469,623.546367,-698.908942,115.155806, 0.707932,-0.563486,0.425811,466.630442,-739.151644,145.666467, 0.611311,-0.685845,0.394863,464.090784,-758.12892,120.753731, 0.717647,-0.602641,0.349008,466.630436,-756.198062,119.668573, 0.611311,-0.685845,0.394863,464.090784,-758.12892,120.753731, 0.707932,-0.563486,0.425811,466.630442,-739.151644,145.666467, 0.603343,-0.62433,0.496175,464.09079,-740.916622,147.004613, 0.611311,-0.685845,0.394863,464.090784,-758.12892,120.753731, 0.487279,-0.695395,0.528191,461.27,-742.384174,148.117261, 0.487279,-0.760883,0.428506,461.269994,-759.734399,121.656023, 0.487279,-0.695395,0.528191,461.27,-742.384174,148.117261, 0.611311,-0.685845,0.394863,464.090784,-758.12892,120.753731, 0.603343,-0.62433,0.496175,464.09079,-740.916622,147.004613, 0.487279,-0.760883,0.428506,461.269994,-759.734399,121.656023, 0.361665,-0.742579,0.563715,458.222259,-743.526109,148.983038, 0.361665,-0.812468,0.457269,458.222253,-760.983658,122.358117, 0.361665,-0.742579,0.563715,458.222259,-743.526109,148.983038, 0.487279,-0.760883,0.428506,461.269994,-759.734399,121.656023, 0.487279,-0.695395,0.528191,461.27,-742.384174,148.117261, -0.71736,0.602889,-0.34917,718.363103,-672.268221,72.499299, -0.796291,0.482772,-0.364488,732.466066,-649.539321,77.725434, -0.796291,0.527936,-0.295302,732.466063,-658.163576,64.572379, -0.796291,0.482772,-0.364488,732.466066,-649.539321,77.725434, -0.71736,0.602889,-0.34917,718.363103,-672.268221,72.499299, -0.707932,0.563466,-0.425837,718.363107,-662.432231,87.500399, -0.796291,0.527936,-0.295302,732.466063,-658.163576,64.572379, -0.870211,0.393404,-0.29659,744.275058,-635.251255,66.89271, -0.870211,0.43015,-0.240215,744.275056,-642.532652,55.787678, -0.870211,0.393404,-0.29659,744.275058,-635.251255,66.89271, -0.796291,0.527936,-0.295302,732.466063,-658.163576,64.572379, -0.796291,0.482772,-0.364488,732.466066,-649.539321,77.725434, -0.870211,0.43015,-0.240215,744.275056,-642.532652,55.787678, -0.928388,0.296985,-0.223376,753.576412,-619.826561,55.198234, -0.928388,0.324653,-0.180823,753.57641,-625.658276,46.304148, -0.928388,0.296985,-0.223376,753.576412,-619.826561,55.198234, -0.870211,0.43015,-0.240215,744.275056,-642.532652,55.787678, -0.870211,0.393404,-0.29659,744.275058,-635.251255,66.89271, -0.928388,0.324653,-0.180823,753.57641,-625.658276,46.304148, -0.9698,0.195252,-0.146165,760.201828,-603.544336,42.853607, -0.9698,0.213348,-0.118196,760.201826,-607.845772,36.293385, -0.9698,0.195252,-0.146165,760.201828,-603.544336,42.853607, -0.928388,0.324653,-0.180823,753.57641,-625.658276,46.304148, -0.928388,0.296985,-0.223376,753.576412,-619.826561,55.198234, 0.991932,-0.090686,0.088582,792.007219,-586.233981,36.611394, 0.966794,-0.204518,0.153238,787.130191,-609.757662,47.564335, 0.991932,-0.101911,0.075398,792.007218,-589.846284,32.468209, 0.966794,-0.204518,0.153238,787.130191,-609.757662,47.564335, 0.991932,-0.090686,0.088582,792.007219,-586.233981,36.611394, 0.966794,-0.181729,0.179678,787.130191,-603.902541,54.279953, 0.966794,-0.181729,0.179678,787.130191,-603.902541,54.279953, 0.924993,-0.303632,0.228462,779.024169,-628.985711,62.142384, 0.966794,-0.204518,0.153238,787.130191,-609.757662,47.564335, 0.924993,-0.303632,0.228462,779.024169,-628.985711,62.142384, 0.966794,-0.181729,0.179678,787.130191,-603.902541,54.279953, 0.924993,-0.269668,0.267706,779.02417,-620.964741,71.342153, 0.924993,-0.269668,0.267706,779.02417,-620.964741,71.342153, 0.867227,-0.397554,0.299779,767.829336,-647.197908,75.95025, 0.924993,-0.303632,0.228462,779.024169,-628.985711,62.142384, 0.867227,-0.397554,0.299779,767.829336,-647.197908,75.95025, 0.924993,-0.269668,0.267706,779.02417,-620.964741,71.342153, 0.867227,-0.352996,0.351156,767.829337,-637.125516,87.502929, 0.867227,-0.352996,0.351156,767.829337,-637.125516,87.502929, 0.794465,-0.484664,0.36596,753.739289,-664.079301,88.749145, 0.867227,-0.397554,0.299779,767.829336,-647.197908,75.95025, 0.794465,-0.484664,0.36596,753.739289,-664.079301,88.749145, 0.867227,-0.352996,0.351156,767.829337,-637.125516,87.502929, 0.794465,-0.430275,0.42859,753.73929,-652.105388,102.482801, -0.928388,0.296985,-0.223376,753.576412,-619.826561,55.198234, -0.9698,0.173513,-0.171408,760.201828,-598.389085,48.766498, -0.9698,0.195252,-0.146165,760.201828,-603.544336,42.853607, -0.9698,0.173513,-0.171408,760.201828,-598.389085,48.766498, -0.928388,0.296985,-0.223376,753.576412,-619.826561,55.198234, -0.928388,0.263776,-0.261761,753.576413,-612.83728,63.214693, 0.780232,-0.616443,0.105998,753.739265,-690.205036,23.357838, 0.714403,-0.693748,0.091332,736.997667,-709.533908,23.678376, 0.752834,-0.654794,0.066982,739.751559,-706.400475,23.357838, 0.714403,-0.693748,0.091332,736.997667,-709.533908,23.678376, 0.780232,-0.616443,0.105998,753.739265,-690.205036,23.357838, 0.800126,-0.584324,0.13551,753.739273,-687.397248,39.686742, 0.714403,-0.693748,0.091332,736.997667,-709.533908,23.678376, 0.800126,-0.584324,0.13551,753.739273,-687.397248,39.686742, 0.707841,-0.682368,0.182581,736.997677,-706.002952,44.212918, 0.714403,-0.693748,0.091332,736.997667,-709.533908,23.678376, 0.609101,-0.770402,0.188354,717.894058,-722.308196,48.179466, 0.609101,-0.788882,0.081617,717.894046,-726.227566,25.386075, 0.609101,-0.770402,0.188354,717.894058,-722.308196,48.179466, 0.714403,-0.693748,0.091332,736.997667,-709.533908,23.678376, 0.707841,-0.682368,0.182581,736.997677,-706.002952,44.212918, 0.609101,-0.788882,0.081617,717.894046,-726.227566,25.386075, 0.499663,-0.841496,0.20548,696.758783,-736.031005,51.517793, 0.499663,-0.861647,0.088896,696.75877,-740.277271,26.823309, 0.499663,-0.841496,0.20548,696.758783,-736.031005,51.517793, 0.609101,-0.788882,0.081617,717.894046,-726.227566,25.386075, 0.609101,-0.770402,0.188354,717.894058,-722.308196,48.179466, -0.606606,0.549182,-0.574829,702.221362,-660.639487,111.0169, -0.494423,0.524541,-0.693111,684.332897,-652.814504,133.506322, -0.606606,0.46573,-0.644302,702.22136,-645.663324,124.074113, -0.494423,0.524541,-0.693111,684.332897,-652.814504,133.506322, -0.606606,0.549182,-0.574829,702.221362,-660.639487,111.0169, -0.494423,0.614096,-0.615169,684.332898,-669.009253,119.386665, -0.150374,0.100371,-0.983521,432.838915,-578.78391,213.508718, -0.040617,0.016774,-0.999034,429.26772,-549.153238,214.795487, -0.150052,0.016548,-0.98854,432.838898,-549.148352,214.504709, -0.040617,0.016774,-0.999034,429.26772,-549.153238,214.795487, -0.150374,0.100371,-0.983521,432.838915,-578.78391,213.508718, -0.040706,0.101643,-0.993988,429.267738,-578.813573,213.798664, -0.748179,0.401798,-0.528002,448.282017,-677.413444,165.951609, -0.832687,0.272446,-0.482085,450.47112,-653.402151,178.303588, -0.832687,0.335596,-0.440463,450.471124,-675.695751,163.686019, -0.832687,0.272446,-0.482085,450.47112,-653.402151,178.303588, -0.748179,0.401798,-0.528002,448.282017,-677.413444,165.951609, -0.748179,0.326101,-0.577828,448.282012,-654.795099,180.782109, -0.832687,0.335596,-0.440463,450.471124,-675.695751,163.686019, -0.901181,0.2136,-0.377157,452.247009,-651.873941,175.584392, -0.901181,0.263001,-0.344532,452.247014,-673.811262,161.200429, -0.901181,0.2136,-0.377157,452.247009,-651.873941,175.584392, -0.832687,0.335596,-0.440463,450.471124,-675.695751,163.686019, -0.832687,0.272446,-0.482085,450.47112,-653.402151,178.303588, -0.901181,0.263001,-0.344532,452.247014,-673.811262,161.200429, -0.952384,0.150692,-0.265059,453.575567,-650.239827,172.676755, -0.952384,0.185405,-0.242052,453.575571,-671.796178,158.542589, -0.952384,0.150692,-0.265059,453.575567,-650.239827,172.676755, -0.901181,0.263001,-0.344532,452.247014,-673.811262,161.200429, -0.901181,0.2136,-0.377157,452.247009,-651.873941,175.584392, -0.952384,0.185405,-0.242052,453.575571,-671.796178,158.542589, -0.985345,0.084925,-0.14793,454.431271,-648.531199,169.636534, -0.985345,0.104291,-0.134978,454.431275,-669.689209,155.763554, -0.985345,0.084925,-0.14793,454.431271,-648.531199,169.636534, -0.952384,0.185405,-0.242052,453.575571,-671.796178,158.542589, -0.952384,0.150692,-0.265059,453.575567,-650.239827,172.676755, 0.9608,-0.004657,0.277203,787.130168,-546.781824,73.639808, 0.924993,-0.040048,0.377867,779.024152,-566.870657,97.051514, 0.966794,-0.027448,0.254079,787.130178,-564.415116,73.047189, 0.924993,-0.040048,0.377867,779.024152,-566.870657,97.051514, 0.9608,-0.004657,0.277203,787.130168,-546.781824,73.639808, 0.919603,-0.008082,0.392766,779.024141,-547.186239,97.713067, 0.919603,-0.008082,0.392766,779.024141,-547.186239,97.713067, 0.867227,-0.051963,0.495193,767.829315,-569.19647,119.787648, 0.924993,-0.040048,0.377867,779.024152,-566.870657,97.051514, 0.867227,-0.051963,0.495193,767.829315,-569.19647,119.787648, 0.919603,-0.008082,0.392766,779.024141,-547.186239,97.713067, 0.866755,-0.008697,0.498658,767.829302,-547.569289,120.514493, 0.591287,-0.806461,-0,746.929123,-767.779872,-0, 0.518797,-0.854897,-0,718.958402,-786.46931,23.357838, 0.480964,-0.87674,-0,718.958402,-786.46931,-0, 0.518797,-0.854897,-0,718.958402,-786.46931,23.357838, 0.591287,-0.806461,-0,746.929123,-767.779872,-0, 0.625945,-0.779867,-0,746.929123,-767.779872,23.357838, 0.9153,-0.402772,-0,827.969621,-662.165838,-0, 0.87674,-0.480964,-0,813.090986,-692.336727,23.357838, 0.854897,-0.518797,-0,813.090986,-692.336727,-0, 0.87674,-0.480964,-0,813.090986,-692.336727,23.357838, 0.9153,-0.402772,-0,827.969621,-662.165838,-0, 0.932018,-0.362412,-0,827.969621,-662.165838,23.357838, 0.973657,-0.199526,0.110368,473.101758,-746.040734,113.960076, 0.932875,-0.335664,0.130666,472.107195,-761.701654,88.500895, 0.973657,-0.212704,0.08215,473.101749,-758.702385,87.31918, 0.932875,-0.335664,0.130666,472.107195,-761.701654,88.500895, 0.973657,-0.199526,0.110368,473.101758,-746.040734,113.960076, 0.932875,-0.314728,0.175187,472.107204,-748.850999,115.539467, -0.870211,0.181845,-0.457892,744.275052,-593.41661,98.610304, -0.928388,0.089223,-0.360743,753.576403,-576.182654,83.81487, -0.928388,0.137548,-0.34522,753.576407,-586.320946,80.601044, -0.928388,0.089223,-0.360743,753.576403,-576.182654,83.81487, -0.870211,0.181845,-0.457892,744.275052,-593.41661,98.610304, -0.870211,0.117753,-0.4784,744.275047,-580.75808,102.623043, -0.9698,0.195252,-0.146165,760.201828,-603.544336,42.853607, -0.993727,0.08015,-0.077994,764.031425,-583.441377,33.81879, -0.993727,0.090031,-0.066344,764.031425,-586.699189,30.082194, -0.993727,0.08015,-0.077994,764.031425,-583.441377,33.81879, -0.9698,0.195252,-0.146165,760.201828,-603.544336,42.853607, -0.9698,0.173513,-0.171408,760.201828,-598.389085,48.766498, 0.794465,-0.484664,0.36596,753.739289,-664.079301,88.749145, 0.717149,-0.603071,0.349289,736.997692,-690.762817,82.893397, 0.794465,-0.530011,0.296503,753.739286,-674.070091,73.511955, 0.717149,-0.603071,0.349289,736.997692,-690.762817,82.893397, 0.794465,-0.484664,0.36596,753.739289,-664.079301,88.749145, 0.707932,-0.563451,0.425857,736.997696,-679.337949,100.317733, 0.79876,-0.426323,0.424536,468.840171,-716.92159,167.299002, 0.707932,-0.563486,0.425811,466.630442,-739.151644,145.666467, 0.79876,-0.480196,0.362483,468.840169,-737.123146,144.128529, 0.707932,-0.563486,0.425811,466.630442,-739.151644,145.666467, 0.79876,-0.426323,0.424536,468.840171,-716.92159,167.299002, 0.707932,-0.500206,0.498623,466.630444,-718.721598,169.09901, 0.707932,-0.500206,0.498623,466.630444,-718.721598,169.09901, 0.603343,-0.62433,0.496175,464.09079,-740.916622,147.004613, 0.707932,-0.563486,0.425811,466.630442,-739.151644,145.666467, 0.603343,-0.62433,0.496175,464.09079,-740.916622,147.004613, 0.707932,-0.500206,0.498623,466.630444,-718.721598,169.09901, 0.603343,-0.550894,0.576621,464.090792,-720.287768,170.665181, -0.707841,0.651123,-0.273862,718.363098,-679.96832,56.297814, -0.796291,0.527936,-0.295302,732.466063,-658.163576,64.572379, -0.796291,0.563252,-0.220608,732.466058,-664.91507,50.366817, -0.796291,0.527936,-0.295302,732.466063,-658.163576,64.572379, -0.707841,0.651123,-0.273862,718.363098,-679.96832,56.297814, -0.71736,0.602889,-0.34917,718.363103,-672.268221,72.499299, 0.011271,-0.366548,0.930331,448.317768,-643.817038,226.529669, 0.091928,-0.487734,0.868139,451.683339,-672.734453,212.70224, 0.091928,-0.364886,0.926503,451.68333,-643.789223,226.459074, 0.091928,-0.487734,0.868139,451.683339,-672.734453,212.70224, 0.011271,-0.366548,0.930331,448.317768,-643.817038,226.529669, 0.011271,-0.489901,0.871705,448.317778,-672.771628,212.768386, 0.874212,-0.179273,0.451236,470.677509,-639.24332,214.921287, 0.79876,-0.29587,0.523873,468.840164,-668.043983,204.356329, 0.874212,-0.239089,0.422598,470.677518,-666.658744,201.891525, 0.79876,-0.29587,0.523873,468.840164,-668.043983,204.356329, 0.874212,-0.179273,0.451236,470.677509,-639.24332,214.921287, 0.79876,-0.221723,0.559304,468.840155,-640.279768,217.551861, 0.874212,-0.239089,0.422598,470.677518,-666.658744,201.891525, 0.79876,-0.364496,0.47867,468.840169,-693.751117,187.500559, 0.874212,-0.294445,0.386077,470.677524,-692.04293,185.247507, 0.79876,-0.364496,0.47867,468.840169,-693.751117,187.500559, 0.874212,-0.239089,0.422598,470.677518,-666.658744,201.891525, 0.79876,-0.29587,0.523873,468.840164,-668.043983,204.356329, 0.79876,-0.29587,0.523873,468.840164,-668.043983,204.356329, 0.707932,-0.427595,0.562134,466.630442,-695.289055,189.529057, 0.79876,-0.364496,0.47867,468.840169,-693.751117,187.500559, 0.707932,-0.427595,0.562134,466.630442,-695.289055,189.529057, 0.79876,-0.29587,0.523873,468.840164,-668.043983,204.356329, 0.700875,-0.343846,0.624935,466.630436,-669.291161,206.575475, 0.700875,-0.343846,0.624935,466.630436,-669.291161,206.575475, 0.603343,-0.467182,0.646311,464.09079,-696.627201,191.294034, 0.707932,-0.427595,0.562134,466.630442,-695.289055,189.529057, 0.603343,-0.467182,0.646311,464.09079,-696.627201,191.294034, 0.700875,-0.343846,0.624935,466.630436,-669.291161,206.575475, 0.592261,-0.384709,0.707974,464.090784,-670.376318,208.506333, 0.487279,-0.427162,0.761638,461.269994,-671.27861,210.111812, 0.603343,-0.467182,0.646311,464.09079,-696.627201,191.294034, 0.592261,-0.384709,0.707974,464.090784,-670.376318,208.506333, 0.603343,-0.467182,0.646311,464.09079,-696.627201,191.294034, 0.487279,-0.427162,0.761638,461.269994,-671.27861,210.111812, 0.487279,-0.526963,0.696326,461.27,-697.739849,192.761586, -0,0.996871,-0.079045,0.016265,-763.421248,29.191222, -0.027072,0.999069,-0.033577,429.267734,-763.617291,23.357838, -0,0.999436,-0.033589,0.00829,-763.617296,23.357836, -0.027072,0.999069,-0.033577,429.267734,-763.617291,23.357838, -0,0.996871,-0.079045,0.016265,-763.421248,29.191222, -0.040706,0.99398,-0.101718,429.267738,-763.421251,29.190985, -0.415875,0.904633,-0.093201,439.690582,-761.097663,28.953287, -0.517204,0.855379,-0.028747,442.839449,-759.575224,23.357838, -0.393899,0.918635,-0.030873,439.690579,-761.285715,23.357838, -0.517204,0.855379,-0.028747,442.839449,-759.575224,23.357838, -0.415875,0.904633,-0.093201,439.690582,-761.097663,28.953287, -0.537771,0.838627,-0.086642,442.839452,-759.393033,28.778909, -0.809671,0.570253,-0.138724,732.466052,-669.667851,35.373762, -0.858411,0.505544,-0.086929,744.275043,-653.583014,23.357838, -0.7818,0.61451,-0.105666,732.466046,-671.734013,23.357838, -0.858411,0.505544,-0.086929,744.275043,-653.583014,23.357838, -0.809671,0.570253,-0.138724,732.466052,-669.667851,35.373762, -0.881047,0.459625,-0.111811,744.275047,-652.24563,31.135492, -0.373111,0.90136,-0.219861,665.02137,-719.684398,47.541206, -0.482609,0.869945,-0.101409,684.332867,-714.266541,24.162533, -0.373111,0.922912,-0.094985,665.021359,-723.541264,25.111307, -0.482609,0.869945,-0.101409,684.332867,-714.266541,24.162533, -0.373111,0.90136,-0.219861,665.02137,-719.684398,47.541206, -0.494423,0.84441,-0.206198,684.332878,-710.625471,45.337452, 0.583909,-0.811361,0.027268,464.090742,-786.683847,23.357838, 0.487278,-0.868635,0.089632,461.269956,-788.240871,31.729906, 0.466054,-0.884257,0.029718,461.269951,-788.52224,23.357838, 0.487278,-0.868635,0.089632,461.269956,-788.240871,31.729906, 0.583909,-0.811361,0.027268,464.090742,-786.683847,23.357838, 0.603443,-0.793169,0.082097,464.090747,-786.408778,31.542489, -0.244971,0.941967,-0.229537,644.636243,-726.137133,49.110957, -0.373111,0.922912,-0.094985,665.021359,-723.541264,25.111307, -0.244971,0.964459,-0.099038,644.636231,-730.147713,25.787129, -0.373111,0.922912,-0.094985,665.021359,-723.541264,25.111307, -0.244971,0.941967,-0.229537,644.636243,-726.137133,49.110957, -0.373111,0.90136,-0.219861,665.02137,-719.684398,47.541206, -0.999462,0,0.032813,180.160558,-280.29408,1570.859583, -0.986659,0,0.162803,176.700984,-186.86272,1535.733942, -0.973856,0,0.227168,176.700984,-280.29408,1535.733942, -0.986659,0,0.162803,176.700984,-186.86272,1535.733942, -0.999462,0,0.032813,180.160558,-280.29408,1570.859583, -0.999462,0,-0.032813,180.160558,-186.86272,1570.859583, -0.973856,0,0.227168,176.700984,-280.29408,1535.733942, -0.935939,0,0.352162,166.455213,-186.86272,1501.958161, -0.910825,0,0.412792,166.455213,-280.29408,1501.958161, -0.935939,0,0.352162,166.455213,-186.86272,1501.958161, -0.973856,0,0.227168,176.700984,-280.29408,1535.733942, -0.986659,0,0.162803,176.700984,-186.86272,1535.733942, -0.910825,0,0.412792,166.455213,-280.29408,1501.958161, -0.849252,0,0.527988,149.816983,-186.86272,1470.830222, -0.812792,0,0.582554,149.816983,-280.29408,1470.830222, -0.849252,0,0.527988,149.816983,-186.86272,1470.830222, -0.910825,0,0.412792,166.455213,-280.29408,1501.958161, -0.935939,0,0.352162,166.455213,-186.86272,1501.958161, -0.812792,0,0.582554,149.816983,-280.29408,1470.830222, -0.707107,0,0.707107,127.425692,-186.86272,1443.546356, -0.707107,0,0.707107,127.425692,-280.29408,1443.546356, -0.707107,0,0.707107,127.425692,-186.86272,1443.546356, -0.812792,0,0.582554,149.816983,-280.29408,1470.830222, -0.849252,0,0.527988,149.816983,-186.86272,1470.830222, 0,-0.387702,0.921785,473.717764,-634.484263,202.842487, 0.030867,-0.489683,0.871354,599.602151,-660.298109,190.573883, 0.030867,-0.366379,0.929954,599.602143,-634.484215,202.842483, 0.030867,-0.489683,0.871354,599.602151,-660.298109,190.573883, 0,-0.387702,0.921785,473.717764,-634.484263,202.842487, 0,-0.509694,0.860356,473.717772,-660.298148,190.573891, -0.649152,0.262621,-0.713885,445.721732,-631.287828,194.729696, -0.537771,0.198458,-0.8194,442.839466,-605.68255,205.079413, -0.638578,0.17117,-0.75028,445.721721,-605.178251,203.006401, -0.537771,0.198458,-0.8194,442.839466,-605.68255,205.079413, -0.649152,0.262621,-0.713885,445.721732,-631.287828,194.729696, -0.537771,0.308263,-0.784714,442.839477,-632.069904,196.714653, -0.112343,0.96547,-0.235045,623.546346,-729.866921,50.018304, -0.244971,0.964459,-0.099038,644.636231,-730.147713,25.787129, -0.112343,0.988493,-0.101292,623.546333,-733.966349,26.17777, -0.244971,0.964459,-0.099038,644.636231,-730.147713,25.787129, -0.112343,0.96547,-0.235045,623.546346,-729.866921,50.018304, -0.244971,0.941967,-0.229537,644.636243,-726.137133,49.110957, -0.989023,0.146995,-0.015036,454.43124,-742.052468,27.005038, -0.999454,0.032443,-0.006265,454.797666,-734.293588,51.095248, -0.999951,0.009862,-0.001008,454.797654,-738.498463,26.641479, -0.999454,0.032443,-0.006265,454.797666,-734.293588,51.095248, -0.989023,0.146995,-0.015036,454.43124,-742.052468,27.005038, -0.985345,0.166102,-0.038803,454.431253,-737.764902,51.939707, -0.881047,0.459625,-0.111811,744.275047,-652.24563,31.135492, -0.919489,0.387429,-0.066619,753.576401,-633.988087,23.357838, -0.858411,0.505544,-0.086929,744.275043,-653.583014,23.357838, -0.919489,0.387429,-0.066619,753.576401,-633.988087,23.357838, -0.881047,0.459625,-0.111811,744.275047,-652.24563,31.135492, -0.936465,0.339085,-0.089746,753.576403,-633.437458,26.560066, -0.845271,0.531564,-0.054376,450.471088,-751.942886,28.016787, -0.901181,0.421494,-0.101069,452.246991,-744.394382,53.552447, -0.91096,0.410353,-0.041977,452.246978,-748.839872,27.699361, -0.901181,0.421494,-0.101069,452.246991,-744.394382,53.552447, -0.845271,0.531564,-0.054376,450.471088,-751.942886,28.016787, -0.832687,0.538362,-0.129611,450.471101,-747.425197,54.289747, 0.114758,-0.016686,0.993253,451.683281,-549.621181,242.65094, 0.229024,-0.098699,0.968404,455.006069,-581.599776,241.035583, 0.251027,-0.016259,0.967844,455.00605,-549.612103,242.110623, 0.229024,-0.098699,0.968404,455.006069,-581.599776,241.035583, 0.114758,-0.016686,0.993253,451.683281,-549.621181,242.65094, 0.091928,-0.101189,0.990611,451.683301,-581.654891,241.574352, 0.998111,-0.038222,0.048094,793.309566,-569.30368,23.357838, 0.991932,-0.090686,0.088582,792.007219,-586.233981,36.611394, 0.998111,-0.044419,0.042437,793.160542,-572.980425,23.357838, 0.991932,-0.090686,0.088582,792.007219,-586.233981,36.611394, 0.998111,-0.038222,0.048094,793.309566,-569.30368,23.357838, 0.991932,-0.07777,0.100113,792.007218,-582.090797,40.223697, -0.040706,0.366235,-0.929632,429.267763,-633.554255,200.482022, -0,0.258478,-0.966017,0.016279,-606.639892,209.013909, -0.040706,0.236142,-0.970866,429.267752,-606.639691,209.013907, -0,0.258478,-0.966017,0.016279,-606.639892,209.013909, -0.040706,0.366235,-0.929632,429.267763,-633.554255,200.482022, -0,0.387702,-0.921785,0.01629,-633.55442,200.482036, -0.707841,0.243878,-0.662936,718.363098,-605.920401,130.345733, -0.606705,0.186995,-0.77262,702.221343,-592.162158,149.501677, -0.707841,0.151267,-0.689985,718.363091,-588.820775,135.766294, -0.606705,0.186995,-0.77262,702.221343,-592.162158,149.501677, -0.707841,0.243878,-0.662936,718.363098,-605.920401,130.345733, -0.606705,0.290533,-0.739932,702.221351,-611.102283,143.49768, 0.924993,-0.091165,0.368885,779.024159,-578.899518,94.983127, 0.867227,-0.183731,0.462774,767.829328,-598.912297,112.558746, 0.924993,-0.140582,0.353021,779.024163,-590.534326,91.294907, 0.867227,-0.183731,0.462774,767.829328,-598.912297,112.558746, 0.924993,-0.091165,0.368885,779.024159,-578.899518,94.983127, 0.867227,-0.118957,0.483493,767.829322,-584.301801,117.190256, 0.994297,-0,0.106651,93.652471,-186.86272,2499.208064, 0.976682,-0,0.214689,123.089852,-280.29408,2224.766097, 0.946935,-0,0.321426,123.089852,-186.86272,2224.766097, 0.976682,-0,0.214689,123.089852,-280.29408,2224.766097, 0.994297,-0,0.106651,93.652471,-186.86272,2499.208064, 0.994297,-0,0.106651,93.652471,-280.29408,2499.208064, 0.466054,-0.884257,0.029718,461.269951,-788.52224,23.357838, 0.361665,-0.92741,0.095445,458.222215,-789.666464,31.875739, 0.339245,-0.940167,0.031597,458.22221,-789.952733,23.357838, 0.361665,-0.92741,0.095445,458.222215,-789.666464,31.875739, 0.466054,-0.884257,0.029718,461.269951,-788.52224,23.357838, 0.487278,-0.868635,0.089632,461.269956,-788.240871,31.729906, -0.91096,0.410353,-0.041977,452.246978,-748.839872,27.699361, -0.952384,0.296613,-0.070606,453.575549,-741.153531,52.764052, -0.959176,0.281343,-0.02878,453.575536,-745.52182,27.359938, -0.952384,0.296613,-0.070606,453.575549,-741.153531,52.764052, -0.91096,0.410353,-0.041977,452.246978,-748.839872,27.699361, -0.901181,0.421494,-0.101069,452.246991,-744.394382,53.552447, -0.649249,0.756522,-0.078421,445.721707,-757.270639,28.561795, -0.731829,0.681103,-0.02289,448.281977,-754.937554,23.357838, -0.630573,0.775692,-0.026069,445.721704,-757.445533,23.357838, -0.731829,0.681103,-0.02289,448.281977,-754.937554,23.357838, -0.649249,0.756522,-0.078421,445.721707,-757.270639,28.561795, -0.754707,0.651908,-0.073718,448.28198,-754.771252,28.306118, -0.150374,0.983472,-0.100844,432.838915,-763.131306,29.161323, -0.263028,0.964244,-0.032406,436.335584,-762.544148,23.357838, -0.127104,0.99133,-0.033316,432.838912,-763.326349,23.357838, -0.263028,0.964244,-0.032406,436.335584,-762.544148,23.357838, -0.150374,0.983472,-0.100844,432.838915,-763.131306,29.161323, -0.285905,0.953237,-0.097966,436.335587,-762.351785,29.08158, -0,0.996871,-0.079045,454.667737,-734.928076,26.276244, -0.015002,0.999323,-0.033585,602.133266,-735.026157,23.357838, -0,0.999436,-0.033589,454.667735,-735.026158,23.357838, -0.015002,0.999323,-0.033585,602.133266,-735.026157,23.357838, -0,0.996871,-0.079045,454.667737,-734.928076,26.276244, -0.022557,0.994554,-0.10175,602.133267,-734.928078,26.276163, 0.794465,-0.298581,0.528844,753.739286,-623.134542,124.447504, 0.707932,-0.427549,0.562168,736.997696,-649.94032,129.715362, 0.794465,-0.367859,0.483224,753.739289,-638.371733,114.456714, 0.707932,-0.427549,0.562168,736.997696,-649.94032,129.715362, 0.794465,-0.298581,0.528844,753.739286,-623.134542,124.447504, 0.701238,-0.343649,0.624636,736.997692,-632.515985,141.14023, -0.606606,0.622389,-0.494632,702.22136,-673.696701,96.040736, -0.707932,0.500183,-0.498647,718.363108,-650.643847,101.02126, -0.707932,0.563466,-0.425837,718.363107,-662.432231,87.500399, -0.707932,0.500183,-0.498647,718.363108,-650.643847,101.02126, -0.606606,0.622389,-0.494632,702.22136,-673.696701,96.040736, -0.606606,0.549182,-0.574829,702.221362,-660.639487,111.0169, -0.707932,0.563466,-0.425837,718.363107,-662.432231,87.500399, -0.796291,0.428601,-0.426873,732.466067,-639.203194,89.580607, -0.796291,0.482772,-0.364488,732.466066,-649.539321,77.725434, -0.796291,0.428601,-0.426873,732.466067,-639.203194,89.580607, -0.707932,0.563466,-0.425837,718.363107,-662.432231,87.500399, -0.707932,0.500183,-0.498647,718.363108,-650.643847,101.02126, -0.796291,0.482772,-0.364488,732.466066,-649.539321,77.725434, -0.870211,0.349319,-0.347431,744.275059,-626.524536,76.901948, -0.870211,0.393404,-0.29659,744.275058,-635.251255,66.89271, -0.870211,0.349319,-0.347431,744.275059,-626.524536,76.901948, -0.796291,0.482772,-0.364488,732.466066,-649.539321,77.725434, -0.796291,0.428601,-0.426873,732.466067,-639.203194,89.580607, 0.030867,-0.929938,0.366419,599.602143,-752.465071,84.861627, 0,-0.882708,0.469921,473.717772,-740.196479,110.67556, 0,-0.938509,0.345255,473.717764,-752.465075,84.861676, 0,-0.882708,0.469921,473.717772,-740.196479,110.67556, 0.030867,-0.929938,0.366419,599.602143,-752.465071,84.861627, 0.030867,-0.871333,0.489721,599.602151,-740.19647,110.675522, -0.999454,0.00493,-0.032673,454.797654,-576.264066,188.875876, -0.999343,-0.000812,0.036246,454.66772,-548.673192,186.220487, -0.999345,-0.004503,0.035903,454.667737,-575.898832,185.305489, -0.999343,-0.000812,0.036246,454.66772,-548.673192,186.220487, -0.999454,0.00493,-0.032673,454.797654,-576.264066,188.875876, -0.999453,0.000944,-0.033066,454.797637,-548.733344,189.801127, 0.867227,-0.118957,0.483493,767.829322,-584.301801,117.190256, 0.794465,-0.223732,0.564597,753.73928,-606.678073,132.26879, 0.867227,-0.183731,0.462774,767.829328,-598.912297,112.558746, 0.794465,-0.223732,0.564597,753.73928,-606.678073,132.26879, 0.867227,-0.118957,0.483493,767.829322,-584.301801,117.190256, 0.794465,-0.14471,0.589818,753.739273,-589.30933,137.774661, -0.022557,0.101727,-0.994557,602.133267,-575.89875,185.30549, -0,0.022395,-0.999749,454.66772,-548.673192,186.220487, -0.022507,0.01679,-0.999606,602.133251,-548.673148,186.220487, -0,0.022395,-0.999749,454.66772,-548.673192,186.220487, -0.022557,0.101727,-0.994557,602.133267,-575.89875,185.30549, -0,0.124431,-0.992228,454.667737,-575.898832,185.305489, -0.112343,0.100949,-0.988528,623.546333,-575.800358,184.343761, -0.022507,0.01679,-0.999606,602.133251,-548.673148,186.220487, -0.112099,0.016649,-0.993558,623.546317,-548.656939,185.255996, -0.022507,0.01679,-0.999606,602.133251,-548.673148,186.220487, -0.112343,0.100949,-0.988528,623.546333,-575.800358,184.343761, -0.022557,0.101727,-0.994557,602.133267,-575.89875,185.30549, -0.707932,0.427569,-0.562154,718.363107,-637.122986,112.809644, -0.796291,0.297433,-0.526739,732.466063,-614.194966,108.540989, -0.796291,0.366435,-0.481296,732.466066,-627.348021,99.916734, -0.796291,0.297433,-0.526739,732.466063,-614.194966,108.540989, -0.707932,0.427569,-0.562154,718.363107,-637.122986,112.809644, -0.701084,0.343733,-0.624763,718.363103,-622.121887,122.645633, -0.999454,0.013569,-0.030128,454.797676,-624.370524,177.173126, -0.999345,-0.009353,0.034955,454.667749,-599.869485,181.183687, -0.999345,-0.014029,0.033354,454.667758,-623.054884,173.833943, -0.999345,-0.009353,0.034955,454.667749,-599.869485,181.183687, -0.999454,0.013569,-0.030128,454.797676,-624.370524,177.173126, -0.999454,0.009337,-0.031696,454.797666,-600.717836,184.671001, -0.606705,0.290533,-0.739932,702.221351,-611.102283,143.49768, -0.494423,0.204724,-0.844769,684.332878,-594.960039,161.002883, -0.606705,0.186995,-0.77262,702.221343,-592.162158,149.501677, -0.494423,0.204724,-0.844769,684.332878,-594.960039,161.002883, -0.606705,0.290533,-0.739932,702.221351,-611.102283,143.49768, -0.494423,0.317928,-0.808992,684.332887,-615.44129,154.510351, 0.98887,-0.002499,0.148764,792.007202,-546.363038,48.711029, 0.966794,-0.027448,0.254079,787.130178,-564.415116,73.047189, 0.991932,-0.01438,0.125953,792.007211,-561.87231,48.189795, 0.966794,-0.027448,0.254079,787.130178,-564.415116,73.047189, 0.98887,-0.002499,0.148764,792.007202,-546.363038,48.711029, 0.9608,-0.004657,0.277203,787.130168,-546.781824,73.639808, -0.928388,0.263776,-0.261761,753.576413,-612.83728,63.214693, -0.9698,0.148537,-0.193454,760.201828,-592.476195,53.921748, -0.9698,0.173513,-0.171408,760.201828,-598.389085,48.766498, -0.9698,0.148537,-0.193454,760.201828,-592.476195,53.921748, -0.928388,0.263776,-0.261761,753.576413,-612.83728,63.214693, -0.928388,0.225646,-0.295263,753.576412,-604.820821,70.203974, 0.041063,-0.016783,0.999016,599.602099,-549.195708,217.326639, 0.105242,0,0.994447,624.95529,-186.86272,215.762941, 0.020529,0,0.999789,599.602099,-186.86272,217.326639, 0.105242,0,0.994447,624.95529,-186.86272,215.762941, 0.041063,-0.016783,0.999016,599.602099,-549.195708,217.326639, 0.148826,-0.01661,0.988724,624.95529,-549.169432,215.762941, -0.606705,0.079969,-0.790894,702.221333,-572.580561,152.868772, -0.493603,0.014422,-0.869568,684.332852,-548.325029,165.499615, -0.613495,0.011257,-0.789618,702.221319,-548.126642,153.690618, -0.493603,0.014422,-0.869568,684.332852,-548.325029,165.499615, -0.606705,0.079969,-0.790894,702.221333,-572.580561,152.868772, -0.494423,0.087701,-0.864786,684.332867,-573.78512,164.643953, -0.112343,0.791717,-0.600469,623.546367,-698.908942,115.155806, -0.244971,0.845012,-0.475335,644.636259,-708.826871,93.045557, -0.112343,0.866156,-0.486984,623.546362,-712.173175,94.926211, -0.244971,0.845012,-0.475335,644.636259,-708.826871,93.045557, -0.112343,0.791717,-0.600469,623.546367,-698.908942,115.155806, -0.244971,0.772358,-0.586047,644.636264,-695.850119,112.836708, -0.244971,0.772358,-0.586047,644.636264,-695.850119,112.836708, -0.373111,0.808526,-0.455054,665.021386,-703.037584,89.791929, -0.244971,0.845012,-0.475335,644.636259,-708.826871,93.045557, -0.373111,0.808526,-0.455054,665.021386,-703.037584,89.791929, -0.244971,0.772358,-0.586047,644.636264,-695.850119,112.836708, -0.373111,0.738976,-0.560984,665.02139,-690.558191,108.824546, -0.536932,0.013961,-0.84351,442.839435,-549.085368,210.7557, -0.436021,0,-0.899936,439.690565,-186.86272,212.465226, -0.556264,0,-0.831005,442.839435,-186.86272,210.7557, -0.436021,0,-0.899936,439.690565,-186.86272,212.465226, -0.536932,0.013961,-0.84351,442.839435,-549.085368,210.7557, -0.41512,0.01512,-0.909641,439.690565,-549.114088,212.465226, 0,0,1,46.868397,-280.29408,2499.208064, 0,0,1,93.652471,-186.86272,2499.208064, 0,0,1,46.868397,-186.86272,2499.208064, 0,0,1,93.652471,-186.86272,2499.208064, 0,0,1,46.868397,-280.29408,2499.208064, 0,0,1,93.652471,-280.29408,2499.208064, -0.373111,0.738976,-0.560984,665.02139,-690.558191,108.824546, -0.494423,0.75738,-0.426523,684.332893,-694.910066,85.224197, -0.373111,0.808526,-0.455054,665.021386,-703.037584,89.791929, -0.494423,0.75738,-0.426523,684.332893,-694.910066,85.224197, -0.373111,0.738976,-0.560984,665.02139,-690.558191,108.824546, -0.494423,0.692194,-0.52575,684.332897,-683.128909,103.191916, 0.030867,-0.366379,0.929954,599.602143,-634.484215,202.842483, 0.127347,-0.48578,0.864755,624.955342,-659.530197,189.207523, 0.127347,-0.363412,0.922884,624.955334,-633.909652,201.38423, 0.127347,-0.48578,0.864755,624.955342,-659.530197,189.207523, 0.030867,-0.366379,0.929954,599.602143,-634.484215,202.842483, 0.030867,-0.489683,0.871354,599.602151,-660.298109,190.573883, -0.714681,0.677849,-0.172485,718.363091,-685.388881,39.198188, -0.7818,0.61451,-0.105666,732.466046,-671.734013,23.357838, -0.691044,0.712358,-0.122491,718.363083,-688.112661,23.357838, -0.7818,0.61451,-0.105666,732.466046,-671.734013,23.357838, -0.714681,0.677849,-0.172485,718.363091,-685.388881,39.198188, -0.809671,0.570253,-0.138724,732.466052,-669.667851,35.373762, 0.234823,-0.97149,0.03265,649.884083,-759.705502,23.357838, 0.127347,-0.98669,0.101126,624.955308,-764.385936,29.28956, 0.105242,-0.993886,0.033402,624.955304,-764.585289,23.357838, 0.127347,-0.98669,0.101126,624.955308,-764.385936,29.28956, 0.234823,-0.97149,0.03265,649.884083,-759.705502,23.357838, 0.256672,-0.961442,0.098738,649.884086,-759.522868,28.792076, -0.993727,0.027914,-0.108296,764.031421,-566.356087,43.420852, -0.998991,0.005587,-0.044554,764.975642,-559.332125,23.357838, -0.998991,0.011606,-0.043377,764.959284,-561.475403,23.357838, -0.998991,0.005587,-0.044554,764.975642,-559.332125,23.357838, -0.993727,0.027914,-0.108296,764.031421,-566.356087,43.420852, -0.993727,0.012896,-0.111089,764.031418,-561.470422,44.260952, -0.150375,0.484157,-0.861963,432.838949,-658.912362,188.108094, -0.040706,0.366235,-0.929632,429.267763,-633.554255,200.482022, -0.150375,0.362184,-0.919897,432.838941,-633.447412,200.210852, -0.040706,0.366235,-0.929632,429.267763,-633.554255,200.482022, -0.150375,0.484157,-0.861963,432.838949,-658.912362,188.108094, -0.040706,0.489496,-0.871055,429.267772,-659.055159,188.362176, -0.244466,0.016195,-0.969523,644.636215,-548.592598,181.426394, -0.134378,0,-0.99093,623.546317,-186.86272,185.255996, -0.266155,0,-0.96393,644.636215,-186.86272,181.426394, -0.134378,0,-0.99093,623.546317,-186.86272,185.255996, -0.244466,0.016195,-0.969523,644.636215,-548.592598,181.426394, -0.112099,0.016649,-0.993558,623.546317,-548.656939,185.255996, -0.999454,0.029547,-0.014792,454.797683,-716.144717,97.158293, -0.999345,-0.029325,0.021198,454.66777,-699.67933,115.739913, -0.999345,-0.03194,0.017004,454.667766,-713.015957,95.399907, -0.999345,-0.029325,0.021198,454.66777,-699.67933,115.739913, -0.999454,0.029547,-0.014792,454.797683,-716.144717,97.158293, -0.999454,0.027255,-0.01868,454.797688,-702.539296,117.908241, -0.870211,0.393404,-0.29659,744.275058,-635.251255,66.89271, -0.928388,0.263776,-0.261761,753.576413,-612.83728,63.214693, -0.928388,0.296985,-0.223376,753.576412,-619.826561,55.198234, -0.928388,0.263776,-0.261761,753.576413,-612.83728,63.214693, -0.870211,0.393404,-0.29659,744.275058,-635.251255,66.89271, -0.870211,0.349319,-0.347431,744.275059,-626.524536,76.901948, -0.928388,0.089223,-0.360743,753.576403,-576.182654,83.81487, -0.9698,0.0263,-0.242479,760.201817,-563.621651,65.290458, -0.9698,0.059096,-0.236633,760.201821,-571.352859,63.961061, -0.9698,0.0263,-0.242479,760.201817,-563.621651,65.290458, -0.928388,0.089223,-0.360743,753.576403,-576.182654,83.81487, -0.928388,0.039234,-0.369537,753.576397,-565.700992,85.617213, -0.494423,0.692194,-0.52575,684.332897,-683.128909,103.191916, -0.614316,0.68383,-0.393691,702.221357,-684.591376,79.42501, -0.494423,0.75738,-0.426523,684.332893,-694.910066,85.224197, -0.614316,0.68383,-0.393691,702.221357,-684.591376,79.42501, -0.494423,0.692194,-0.52575,684.332897,-683.128909,103.191916, -0.606606,0.622389,-0.494632,702.22136,-673.696701,96.040736, -0.373111,0.33957,-0.863412,665.021379,-618.858911,163.184484, -0.244971,0.228806,-0.942145,644.636243,-598.733545,176.514546, -0.373111,0.218748,-0.901631,665.02137,-597.163793,170.061811, -0.244971,0.228806,-0.942145,644.636243,-598.733545,176.514546, -0.373111,0.33957,-0.863412,665.021379,-618.858911,163.184484, -0.244971,0.355055,-0.902178,644.636252,-621.293309,169.363128, -0.959176,0.281343,-0.02878,453.575536,-745.52182,27.359938, -0.985345,0.166102,-0.038803,454.431253,-737.764902,51.939707, -0.989023,0.146995,-0.015036,454.43124,-742.052468,27.005038, -0.985345,0.166102,-0.038803,454.431253,-737.764902,51.939707, -0.959176,0.281343,-0.02878,453.575536,-745.52182,27.359938, -0.952384,0.296613,-0.070606,453.575549,-741.153531,52.764052, -0.985345,0.104291,-0.134978,454.431275,-669.689209,155.763554, -0.999454,0.017548,-0.027998,454.797683,-646.780881,166.522129, -0.999454,0.021199,-0.025346,454.797688,-667.530829,152.916709, -0.999454,0.017548,-0.027998,454.797683,-646.780881,166.522129, -0.985345,0.104291,-0.134978,454.431275,-669.689209,155.763554, -0.985345,0.084925,-0.14793,454.431271,-648.531199,169.636534, 0.866918,-0.01021,0.498346,470.677463,-549.413334,230.278856, 0.79876,-0.062483,0.598396,468.840127,-580.680624,232.05041, 0.874212,-0.050786,0.482881,470.677482,-580.392895,229.237697, 0.79876,-0.062483,0.598396,468.840127,-580.680624,232.05041, 0.866918,-0.01021,0.498346,470.677463,-549.413334,230.278856, 0.792107,-0.00894,0.610317,468.840108,-549.460722,233.099647, -0.648424,0.012535,-0.761176,445.72169,-549.049611,208.627211, -0.556264,0,-0.831005,442.839435,-186.86272,210.7557, -0.665822,0,-0.746111,445.72169,-186.86272,208.627211, -0.556264,0,-0.831005,442.839435,-186.86272,210.7557, -0.648424,0.012535,-0.761176,445.72169,-549.049611,208.627211, -0.536932,0.013961,-0.84351,442.839435,-549.085368,210.7557, 0.381503,-0.338316,0.860231,673.957369,-629.139245,189.276665, 0.499663,-0.423738,0.755502,696.7588,-647.656853,168.080895, 0.499663,-0.316836,0.806196,696.758793,-625.025898,178.836737, 0.499663,-0.423738,0.755502,696.7588,-647.656853,168.080895, 0.381503,-0.338316,0.860231,673.957369,-629.139245,189.276665, 0.381503,-0.452381,0.806106,673.957376,-653.15444,177.862935, 0.609101,-0.079799,0.789068,717.894046,-575.008662,176.604979, 0.707841,-0.151267,0.689985,736.997677,-593.835505,156.380365, 0.707841,-0.055835,0.704162,736.997667,-573.300963,159.911321, 0.707841,-0.151267,0.689985,736.997677,-593.835505,156.380365, 0.609101,-0.079799,0.789068,717.894046,-575.008662,176.604979, 0.609101,-0.186578,0.770833,717.894058,-597.802054,172.685609, -0.649249,0.076378,-0.756731,445.721707,-578.184383,207.648051, -0.536932,0.013961,-0.84351,442.839435,-549.085368,210.7557, -0.648424,0.012535,-0.761176,445.72169,-549.049611,208.627211, -0.536932,0.013961,-0.84351,442.839435,-549.085368,210.7557, -0.649249,0.076378,-0.756731,445.721707,-578.184383,207.648051, -0.537771,0.08495,-0.8388,442.839452,-578.401496,209.770445, -0.537771,0.838627,-0.086642,442.839452,-759.393033,28.778909, -0.630573,0.775692,-0.026069,445.721704,-757.445533,23.357838, -0.517204,0.855379,-0.028747,442.839449,-759.575224,23.357838, -0.630573,0.775692,-0.026069,445.721704,-757.445533,23.357838, -0.537771,0.838627,-0.086642,442.839452,-759.393033,28.778909, -0.649249,0.756522,-0.078421,445.721707,-757.270639,28.561795, 0.590628,-0.806489,0.027104,717.894045,-726.295731,23.357838, 0.499663,-0.861647,0.088896,696.75877,-740.277271,26.823309, 0.479633,-0.876974,0.029473,696.758768,-740.393738,23.357838, 0.499663,-0.861647,0.088896,696.75877,-740.277271,26.823309, 0.590628,-0.806489,0.027104,717.894045,-726.295731,23.357838, 0.609101,-0.788882,0.081617,717.894046,-726.227566,25.386075, 0.251027,-0.016259,0.967844,455.00605,-549.612103,242.110623, 0.361665,-0.094307,0.927526,458.222215,-581.498327,240.043877, 0.382469,-0.01552,0.923838,458.222196,-549.595395,241.116069, 0.361665,-0.094307,0.927526,458.222215,-581.498327,240.043877, 0.251027,-0.016259,0.967844,455.00605,-549.612103,242.110623, 0.229024,-0.098699,0.968404,455.006069,-581.599776,241.035583, 0.924993,-0.140582,0.353021,779.024163,-590.534326,91.294907, 0.867227,-0.245078,0.433421,767.829333,-612.755392,105.979521, 0.924993,-0.187375,0.330572,779.024167,-601.558028,86.055659, 0.867227,-0.245078,0.433421,767.829333,-612.755392,105.979521, 0.924993,-0.140582,0.353021,779.024163,-590.534326,91.294907, 0.867227,-0.183731,0.462774,767.829328,-598.912297,112.558746, 0.867227,-0.183731,0.462774,767.829328,-598.912297,112.558746, 0.794465,-0.298581,0.528844,753.739286,-623.134542,124.447504, 0.867227,-0.245078,0.433421,767.829333,-612.755392,105.979521, 0.794465,-0.298581,0.528844,753.739286,-623.134542,124.447504, 0.867227,-0.183731,0.462774,767.829328,-598.912297,112.558746, 0.794465,-0.223732,0.564597,753.73928,-606.678073,132.26879, 0.794465,-0.223732,0.564597,753.73928,-606.678073,132.26879, 0.701238,-0.343649,0.624636,736.997692,-632.515985,141.14023, 0.794465,-0.298581,0.528844,753.739286,-623.134542,124.447504, 0.701238,-0.343649,0.624636,736.997692,-632.515985,141.14023, 0.794465,-0.223732,0.564597,753.73928,-606.678073,132.26879, 0.707841,-0.243878,0.662936,736.997686,-613.697356,150.084182, 0.609101,-0.289877,0.738219,717.894067,-619.848758,165.69683, 0.701238,-0.343649,0.624636,736.997692,-632.515985,141.14023, 0.707841,-0.243878,0.662936,736.997686,-613.697356,150.084182, 0.701238,-0.343649,0.624636,736.997692,-632.515985,141.14023, 0.609101,-0.289877,0.738219,717.894067,-619.848758,165.69683, 0.598552,-0.382497,0.703869,717.894074,-640.737481,155.769021, 0.499663,-0.316836,0.806196,696.758793,-625.025898,178.836737, 0.598552,-0.382497,0.703869,717.894074,-640.737481,155.769021, 0.609101,-0.289877,0.738219,717.894067,-619.848758,165.69683, 0.598552,-0.382497,0.703869,717.894074,-640.737481,155.769021, 0.499663,-0.316836,0.806196,696.758793,-625.025898,178.836737, 0.499663,-0.423738,0.755502,696.7588,-647.656853,168.080895, -0.796291,0.428601,-0.426873,732.466067,-639.203194,89.580607, -0.870211,0.298718,-0.391791,744.275058,-616.515297,85.628667, -0.870211,0.349319,-0.347431,744.275059,-626.524536,76.901948, -0.870211,0.298718,-0.391791,744.275058,-616.515297,85.628667, -0.796291,0.428601,-0.426873,732.466067,-639.203194,89.580607, -0.796291,0.366435,-0.481296,732.466066,-627.348021,99.916734, 0.256673,-0.939019,0.228829,649.8841,-754.828812,56.090715, 0.127347,-0.922744,0.363767,624.955334,-751.006818,84.287065, 0.127347,-0.963706,0.234635,624.955322,-759.578731,57.246228, 0.127347,-0.922744,0.363767,624.955334,-751.006818,84.287065, 0.256673,-0.939019,0.228829,649.8841,-754.828812,56.090715, 0.256673,-0.899078,0.354651,649.884111,-746.45866,82.495079, 0.79876,-0.56023,0.219373,468.840155,-767.174448,90.657181, 0.707841,-0.682368,0.182581,466.630415,-778.937032,61.955552, 0.79876,-0.584897,0.140986,468.840142,-776.463573,61.353839, 0.707841,-0.682368,0.182581,466.630415,-778.937032,61.955552, 0.79876,-0.56023,0.219373,468.840155,-767.174448,90.657181, 0.707841,-0.651123,0.273862,466.630427,-769.542842,91.59033, 0.973547,-0.004216,0.228449,473.101704,-549.308105,224.014969, 0.932875,-0.038122,0.358177,472.107168,-580.082016,226.198682, 0.973657,-0.024735,0.226671,473.101722,-579.75396,222.991746, 0.932875,-0.038122,0.358177,472.107168,-580.082016,226.198682, 0.973547,-0.004216,0.228449,473.101704,-549.308105,224.014969, 0.928983,-0.005506,0.370082,472.10715,-549.362134,227.231115, 0.127347,-0.922744,0.363767,624.955334,-751.006818,84.287065, 0.030867,-0.871333,0.489721,599.602151,-740.19647,110.675522, 0.030867,-0.929938,0.366419,599.602143,-752.465071,84.861627, 0.030867,-0.871333,0.489721,599.602151,-740.19647,110.675522, 0.127347,-0.922744,0.363767,624.955334,-751.006818,84.287065, 0.127347,-0.864568,0.486113,624.955342,-738.83011,109.90761, -0.986659,0,-0.162803,176.700984,-280.29408,1605.985223, -0.999462,0,-0.032813,180.160558,-186.86272,1570.859583, -0.999462,0,0.032813,180.160558,-280.29408,1570.859583, -0.999462,0,-0.032813,180.160558,-186.86272,1570.859583, -0.986659,0,-0.162803,176.700984,-280.29408,1605.985223, -0.973856,0,-0.227168,176.700984,-186.86272,1605.985223, -0.809671,0.570253,-0.138724,732.466052,-669.667851,35.373762, -0.870211,0.458871,-0.17936,744.275052,-648.232891,43.794023, -0.881047,0.459625,-0.111811,744.275047,-652.24563,31.135492, -0.870211,0.458871,-0.17936,744.275052,-648.232891,43.794023, -0.809671,0.570253,-0.138724,732.466052,-669.667851,35.373762, -0.796291,0.563252,-0.220608,732.466058,-664.91507,50.366817, -0.285905,0.097067,-0.953329,436.335587,-578.704167,212.729198, -0.150052,0.016548,-0.98854,432.838898,-549.148352,214.504709, -0.285329,0.015988,-0.958296,436.33557,-549.135218,213.722949, -0.150052,0.016548,-0.98854,432.838898,-549.148352,214.504709, -0.285905,0.097067,-0.953329,436.335587,-578.704167,212.729198, -0.150374,0.100371,-0.983521,432.838915,-578.78391,213.508718, 0.995804,-0.08571,0.032077,473.642065,-755.603683,86.09829, 0.973657,-0.221914,0.0524,473.101737,-767.615679,59.201429, 0.995804,-0.089282,0.020098,473.642053,-764.379515,58.414175, 0.973657,-0.221914,0.0524,473.101737,-767.615679,59.201429, 0.995804,-0.08571,0.032077,473.642065,-755.603683,86.09829, 0.973657,-0.212704,0.08215,473.101749,-758.702385,87.31918, -0.285905,0.835148,-0.469878,436.335621,-737.047581,108.905866, -0.415875,0.845875,-0.333982,439.690608,-747.931487,83.075452, -0.285905,0.891387,-0.351693,436.335613,-749.104397,83.53758, -0.415875,0.845875,-0.333982,439.690608,-747.931487,83.075452, -0.285905,0.835148,-0.469878,436.335621,-737.047581,108.905866, -0.415875,0.792474,-0.446131,439.690616,-735.948584,108.28822, 0,-0.016797,0.999859,473.71772,-549.195746,217.326639, 0.030866,-0.101695,0.994337,599.602117,-579.071663,216.32257, 0.041063,-0.016783,0.999016,599.602099,-549.195708,217.326639, 0.030866,-0.101695,0.994337,599.602117,-579.071663,216.32257, 0,-0.016797,0.999859,473.71772,-549.195746,217.326639, 0,-0.124431,0.992228,473.717738,-579.071732,216.322569, 0.479633,-0.876974,0.029473,696.758768,-740.393738,23.357838, 0.381503,-0.91951,0.094637,673.957345,-751.440053,27.965226, 0.360344,-0.932293,0.031332,673.957342,-751.594898,23.357838, 0.381503,-0.91951,0.094637,673.957345,-751.440053,27.965226, 0.479633,-0.876974,0.029473,696.758768,-740.393738,23.357838, 0.499663,-0.861647,0.088896,696.75877,-740.277271,26.823309, -0.707932,0.500183,-0.498647,718.363108,-650.643847,101.02126, -0.796291,0.366435,-0.481296,732.466066,-627.348021,99.916734, -0.796291,0.428601,-0.426873,732.466067,-639.203194,89.580607, -0.796291,0.366435,-0.481296,732.466066,-627.348021,99.916734, -0.707932,0.500183,-0.498647,718.363108,-650.643847,101.02126, -0.707932,0.427569,-0.562154,718.363107,-637.122986,112.809644, 0.966794,-0.061815,0.247969,787.130183,-573.195905,71.537315, 0.924993,-0.140582,0.353021,779.024163,-590.534326,91.294907, 0.966794,-0.095028,0.237232,787.130187,-581.689044,68.845, 0.924993,-0.140582,0.353021,779.024163,-590.534326,91.294907, 0.966794,-0.061815,0.247969,787.130183,-573.195905,71.537315, 0.924993,-0.091165,0.368885,779.024159,-578.899518,94.983127, -0.285905,0.350852,-0.891718,436.335613,-633.160168,199.481809, -0.150374,0.233455,-0.96067,432.83893,-606.570796,208.730707, -0.285905,0.226068,-0.93121,436.335601,-606.385575,207.969324, -0.150374,0.233455,-0.96067,432.83893,-606.570796,208.730707, -0.285905,0.350852,-0.891718,436.335613,-633.160168,199.481809, -0.150375,0.362184,-0.919897,432.838941,-633.447412,200.210852, 0.998111,-0.023817,0.056627,793.478048,-563.767069,23.357838, 0.991932,-0.063402,0.109777,792.007217,-577.494024,43.23773, 0.998111,-0.031311,0.052854,793.410423,-566.321374,23.357838, 0.991932,-0.063402,0.109777,792.007217,-577.494024,43.23773, 0.998111,-0.023817,0.056627,793.478048,-563.767069,23.357838, 0.991932,-0.047852,0.117393,792.007216,-572.529419,45.597264, 0.127347,-0.363412,0.922884,624.955334,-633.909652,201.38423, 0.256673,-0.473186,0.842742,649.884119,-657.135168,184.945974, 0.256673,-0.353935,0.899361,649.884111,-632.117666,196.836073, 0.256673,-0.473186,0.842742,649.884119,-657.135168,184.945974, 0.127347,-0.363412,0.922884,624.955334,-633.909652,201.38423, 0.127347,-0.48578,0.864755,624.955342,-659.530197,189.207523, -0.91096,0.410353,-0.041977,452.246978,-748.839872,27.699361, -0.94485,0.32732,-0.011,453.575534,-745.656322,23.357838, -0.890491,0.454743,-0.015282,452.246975,-748.985782,23.357838, -0.94485,0.32732,-0.011,453.575534,-745.656322,23.357838, -0.91096,0.410353,-0.041977,452.246978,-748.839872,27.699361, -0.959176,0.281343,-0.02878,453.575536,-745.52182,27.359938, -0.999951,0.009862,-0.001008,454.797654,-738.498463,26.641479, -0.999342,-0.036239,0.001219,454.667735,-735.026158,23.357838, -0.998419,0.056178,-0.001887,454.797652,-738.60882,23.357838, -0.999342,-0.036239,0.001219,454.667735,-735.026158,23.357838, -0.999951,0.009862,-0.001008,454.797654,-738.498463,26.641479, -0.999345,-0.035987,0.003682,454.667737,-734.928076,26.276244, -0.415875,0.883495,-0.215602,439.690597,-756.366969,56.464997, -0.537771,0.838627,-0.086642,442.839452,-759.393033,28.778909, -0.415875,0.904633,-0.093201,439.690582,-761.097663,28.953287, -0.537771,0.838627,-0.086642,442.839452,-759.393033,28.778909, -0.415875,0.883495,-0.215602,439.690597,-756.366969,56.464997, -0.537771,0.818998,-0.200111,442.839466,-754.702001,56.059962, 0.030867,-0.603851,0.796499,599.602156,-684.199423,174.90216, 0.127347,-0.701215,0.701485,624.955349,-704.633973,155.011385, 0.127347,-0.599085,0.790493,624.955347,-683.252488,173.653183, 0.127347,-0.701215,0.701485,624.955349,-704.633973,155.011385, 0.030867,-0.603851,0.796499,599.602156,-684.199423,174.90216, 0.030867,-0.706755,0.706785,599.602158,-705.742267,156.119679, -0.537771,0.508681,-0.672344,442.83949,-680.220296,169.653769, -0.415875,0.444984,-0.793119,439.690616,-657.910808,186.325996, -0.537771,0.412318,-0.735388,442.839485,-657.07129,184.832214, -0.415875,0.444984,-0.793119,439.690616,-657.910808,186.325996, -0.537771,0.508681,-0.672344,442.83949,-680.220296,169.653769, -0.415875,0.548909,-0.725084,439.690621,-681.255534,171.01922, -0.244971,0.474679,-0.845381,644.636259,-642.668145,159.204284, -0.112343,0.364093,-0.924562,623.546355,-622.700434,172.934486, -0.244971,0.355055,-0.902178,644.636252,-621.293309,169.363128, -0.112343,0.364093,-0.924562,623.546355,-622.700434,172.934486, -0.244971,0.474679,-0.845381,644.636259,-642.668145,159.204284, -0.112343,0.486683,-0.866325,623.546362,-644.548798,162.550587, -0.373111,0.454056,-0.809087,665.021386,-639.414516,153.414997, -0.244971,0.355055,-0.902178,644.636252,-621.293309,169.363128, -0.373111,0.33957,-0.863412,665.021379,-618.858911,163.184484, -0.244971,0.355055,-0.902178,644.636252,-621.293309,169.363128, -0.373111,0.454056,-0.809087,665.021386,-639.414516,153.414997, -0.244971,0.474679,-0.845381,644.636259,-642.668145,159.204284, -0.494423,0.4252,-0.758123,684.332893,-634.846784,145.287478, -0.373111,0.33957,-0.863412,665.021379,-618.858911,163.184484, -0.494423,0.317928,-0.808992,684.332887,-615.44129,154.510351, -0.373111,0.33957,-0.863412,665.021379,-618.858911,163.184484, -0.494423,0.4252,-0.758123,684.332893,-634.846784,145.287478, -0.373111,0.454056,-0.809087,665.021386,-639.414516,153.414997, -0.595888,0.383438,-0.705615,702.221357,-629.047597,134.968788, -0.494423,0.317928,-0.808992,684.332887,-615.44129,154.510351, -0.606705,0.290533,-0.739932,702.221351,-611.102283,143.49768, -0.494423,0.317928,-0.808992,684.332887,-615.44129,154.510351, -0.595888,0.383438,-0.705615,702.221357,-629.047597,134.968788, -0.494423,0.4252,-0.758123,684.332893,-634.846784,145.287478, -0.701084,0.343733,-0.624763,718.363103,-622.121887,122.645633, -0.606705,0.290533,-0.739932,702.221351,-611.102283,143.49768, -0.707841,0.243878,-0.662936,718.363098,-605.920401,130.345733, -0.606705,0.290533,-0.739932,702.221351,-611.102283,143.49768, -0.701084,0.343733,-0.624763,718.363103,-622.121887,122.645633, -0.595888,0.383438,-0.705615,702.221357,-629.047597,134.968788, -0.701084,0.343733,-0.624763,718.363103,-622.121887,122.645633, -0.796291,0.222882,-0.562356,732.466058,-599.989405,115.292483, -0.796291,0.297433,-0.526739,732.466063,-614.194966,108.540989, -0.796291,0.222882,-0.562356,732.466058,-599.989405,115.292483, -0.701084,0.343733,-0.624763,718.363103,-622.121887,122.645633, -0.707841,0.243878,-0.662936,718.363098,-605.920401,130.345733, -0.993727,0.090031,-0.066344,764.031425,-586.699189,30.082194, -0.998991,0.032467,-0.031019,764.696221,-572.980425,23.357838, -0.998991,0.036391,-0.026305,764.531578,-577.829947,23.357838, -0.998991,0.032467,-0.031019,764.696221,-572.980425,23.357838, -0.993727,0.090031,-0.066344,764.031425,-586.699189,30.082194, -0.993727,0.08015,-0.077994,764.031425,-583.441377,33.81879, 0.998111,-0.049787,0.035988,792.935095,-577.829952,23.357838, 0.991932,-0.111235,0.060808,792.007217,-592.860317,27.871437, 0.998112,-0.05354,0.03009,792.574093,-584.829111,23.357838, 0.991932,-0.111235,0.060808,792.007217,-592.860317,27.871437, 0.998111,-0.049787,0.035988,792.935095,-577.829952,23.357838, 0.991932,-0.101911,0.075398,792.007218,-589.846284,32.468209, -0.993727,0.012896,-0.111089,764.031418,-561.470422,44.260952, -0.998987,0.001007,-0.04498,764.9959,-545.937132,23.357838, -0.998991,0.005587,-0.044554,764.975642,-559.332125,23.357838, -0.998987,0.001007,-0.04498,764.9959,-545.937132,23.357838, -0.993727,0.012896,-0.111089,764.031418,-561.470422,44.260952, -0.9937,0.002257,-0.112046,764.031409,-546.296855,44.770904, 0.924681,-0,0.380742,779.024141,-186.86272,97.713067, 0.866755,-0.008697,0.498658,767.829302,-547.569289,120.514493, 0.919603,-0.008082,0.392766,779.024141,-547.186239,97.713067, 0.866755,-0.008697,0.498658,767.829302,-547.569289,120.514493, 0.924681,-0,0.380742,779.024141,-186.86272,97.713067, 0.855563,-0,0.517699,767.829302,-186.86272,120.514493, -0.901181,0.346254,-0.26073,452.247014,-710.823017,124.188674, -0.952384,0.216659,-0.21453,453.575573,-691.225448,141.602861, -0.952384,0.243872,-0.183005,453.575571,-708.165176,122.173591, -0.952384,0.216659,-0.21453,453.575573,-691.225448,141.602861, -0.901181,0.346254,-0.26073,452.247014,-710.823017,124.188674, -0.901181,0.307496,-0.305481,452.247015,-693.58391,143.961322, -0.952384,0.243872,-0.183005,453.575571,-708.165176,122.173591, -0.985345,0.121711,-0.119507,454.431277,-688.759444,139.136857, -0.985345,0.136861,-0.101808,454.431275,-705.386141,120.066621, -0.985345,0.121711,-0.119507,454.431277,-688.759444,139.136857, -0.952384,0.243872,-0.183005,453.575571,-708.165176,122.173591, -0.952384,0.216659,-0.21453,453.575573,-691.225448,141.602861, -0.285905,0.930996,-0.226946,436.335601,-757.591911,56.762987, -0.415875,0.904633,-0.093201,439.690582,-761.097663,28.953287, -0.285905,0.953237,-0.097966,436.335587,-762.351785,29.08158, -0.415875,0.904633,-0.093201,439.690582,-761.097663,28.953287, -0.285905,0.930996,-0.226946,436.335601,-757.591911,56.762987, -0.415875,0.883495,-0.215602,439.690597,-756.366969,56.464997, 0.229025,-0.58781,0.775904,455.006113,-699.207898,194.697902, 0.361665,-0.658837,0.659646,458.22226,-722.603323,172.980735, 0.361665,-0.562804,0.74327,458.222259,-698.605625,193.903521, 0.361665,-0.658837,0.659646,458.22226,-722.603323,172.980735, 0.229025,-0.58781,0.775904,455.006113,-699.207898,194.697902, 0.229025,-0.688056,0.688568,455.006115,-723.308225,173.685638, 0.361665,-0.562804,0.74327,458.222259,-698.605625,193.903521, 0.487279,-0.616933,0.618023,461.270002,-721.590015,171.967428, 0.487279,-0.526963,0.696326,461.27,-697.739849,192.761586, 0.487279,-0.616933,0.618023,461.270002,-721.590015,171.967428, 0.361665,-0.562804,0.74327,458.222259,-698.605625,193.903521, 0.361665,-0.658837,0.659646,458.22226,-722.603323,172.980735, -0.845271,0.531564,-0.054376,450.471088,-751.942886,28.016787, -0.890491,0.454743,-0.015282,452.246975,-748.985782,23.357838, -0.819027,0.573431,-0.019271,450.471085,-752.099463,23.357838, -0.890491,0.454743,-0.015282,452.246975,-748.985782,23.357838, -0.845271,0.531564,-0.054376,450.471088,-751.942886,28.016787, -0.91096,0.410353,-0.041977,452.246978,-748.839872,27.699361, -0.494423,0.84441,-0.206198,684.332878,-710.625471,45.337452, -0.551599,0.82639,-0.113216,696.28309,-706.40024,23.357838, -0.482609,0.869945,-0.101409,684.332867,-714.266541,24.162533, -0.551599,0.82639,-0.113216,696.28309,-706.40024,23.357838, -0.494423,0.84441,-0.206198,684.332878,-710.625471,45.337452, -0.599001,0.779767,-0.182103,702.221343,-699.124264,42.539571, -0.551599,0.82639,-0.113216,696.28309,-706.40024,23.357838, -0.599001,0.779767,-0.182103,702.221343,-699.124264,42.539571, -0.605809,0.784102,-0.134828,702.221333,-702.422602,23.357838, -0.796291,0.297433,-0.526739,732.466063,-614.194966,108.540989, -0.870211,0.181845,-0.457892,744.275052,-593.41661,98.610304, -0.870211,0.242544,-0.428841,744.275056,-605.410265,92.910065, -0.870211,0.181845,-0.457892,744.275052,-593.41661,98.610304, -0.796291,0.297433,-0.526739,732.466063,-614.194966,108.540989, -0.796291,0.222882,-0.562356,732.466058,-599.989405,115.292483, -0.870211,0.242544,-0.428841,744.275056,-605.410265,92.910065, -0.928388,0.137548,-0.34522,753.576407,-586.320946,80.601044, -0.928388,0.183307,-0.323257,753.57641,-595.926736,76.035688, -0.928388,0.137548,-0.34522,753.576407,-586.320946,80.601044, -0.870211,0.242544,-0.428841,744.275056,-605.410265,92.910065, -0.870211,0.181845,-0.457892,744.275052,-593.41661,98.610304, -0.928388,0.183307,-0.323257,753.57641,-595.926736,76.035688, -0.9698,0.09079,-0.226373,760.201824,-578.830801,61.590563, -0.9698,0.12079,-0.21189,760.201826,-585.915972,58.223185, -0.9698,0.09079,-0.226373,760.201824,-578.830801,61.590563, -0.928388,0.183307,-0.323257,753.57641,-595.926736,76.035688, -0.928388,0.137548,-0.34522,753.576407,-586.320946,80.601044, -0.9698,0.12079,-0.21189,760.201826,-585.915972,58.223185, -0.993727,0.042411,-0.103482,764.031423,-571.081703,41.922837, -0.993727,0.056116,-0.096737,764.031424,-575.55911,39.794854, -0.993727,0.042411,-0.103482,764.031423,-571.081703,41.922837, -0.9698,0.12079,-0.21189,760.201826,-585.915972,58.223185, -0.9698,0.09079,-0.226373,760.201824,-578.830801,61.590563, -0.993727,0.056116,-0.096737,764.031424,-575.55911,39.794854, -0.998991,0.017409,-0.041391,764.928093,-563.76708,23.357838, -0.998991,0.022887,-0.038633,764.878707,-566.321382,23.357838, -0.998991,0.017409,-0.041391,764.928093,-563.76708,23.357838, -0.993727,0.056116,-0.096737,764.031424,-575.55911,39.794854, -0.993727,0.042411,-0.103482,764.031423,-571.081703,41.922837, 0.991932,-0.063402,0.109777,792.007217,-577.494024,43.23773, 0.966794,-0.15555,0.202766,787.130191,-597.186922,60.135075, 0.991932,-0.07777,0.100113,792.007218,-582.090797,40.223697, 0.966794,-0.15555,0.202766,787.130191,-597.186922,60.135075, 0.991932,-0.063402,0.109777,792.007217,-577.494024,43.23773, 0.966794,-0.126469,0.22207,787.130189,-589.736091,65.02047, 0.966794,-0.126469,0.22207,787.130189,-589.736091,65.02047, 0.924993,-0.230673,0.301955,779.024169,-611.764971,79.363123, 0.966794,-0.15555,0.202766,787.130191,-597.186922,60.135075, 0.924993,-0.230673,0.301955,779.024169,-611.764971,79.363123, 0.966794,-0.126469,0.22207,787.130189,-589.736091,65.02047, 0.924993,-0.187375,0.330572,779.024167,-601.558028,86.055659, 0.924993,-0.187375,0.330572,779.024167,-601.558028,86.055659, 0.867227,-0.301852,0.395982,767.829336,-625.572837,97.575321, 0.924993,-0.230673,0.301955,779.024169,-611.764971,79.363123, 0.867227,-0.301852,0.395982,767.829336,-625.572837,97.575321, 0.924993,-0.187375,0.330572,779.024167,-601.558028,86.055659, 0.867227,-0.245078,0.433421,767.829333,-612.755392,105.979521, 0.867227,-0.245078,0.433421,767.829333,-612.755392,105.979521, 0.794465,-0.367859,0.483224,753.739289,-638.371733,114.456714, 0.867227,-0.301852,0.395982,767.829336,-625.572837,97.575321, 0.794465,-0.367859,0.483224,753.739289,-638.371733,114.456714, 0.867227,-0.245078,0.433421,767.829333,-612.755392,105.979521, 0.794465,-0.298581,0.528844,753.739286,-623.134542,124.447504, -0.244971,0.09829,-0.964535,644.636231,-575.409716,180.525125, -0.112099,0.016649,-0.993558,623.546317,-548.656939,185.255996, -0.244466,0.016195,-0.969523,644.636215,-548.592598,181.426394, -0.112099,0.016649,-0.993558,623.546317,-548.656939,185.255996, -0.244971,0.09829,-0.964535,644.636231,-575.409716,180.525125, -0.112343,0.100949,-0.988528,623.546333,-575.800358,184.343761, -0.373111,0.093846,-0.923028,665.021359,-574.733894,173.918677, -0.244466,0.016195,-0.969523,644.636215,-548.592598,181.426394, -0.372406,0.015448,-0.927941,665.021343,-548.48129,174.800973, -0.244466,0.016195,-0.969523,644.636215,-548.592598,181.426394, -0.373111,0.093846,-0.923028,665.021359,-574.733894,173.918677, -0.244971,0.09829,-0.964535,644.636231,-575.409716,180.525125, 0.923987,-0.382207,0.012845,472.107164,-776.05994,23.357838, 0.885205,-0.462786,0.04734,470.677482,-778.860284,30.770308, 0.862236,-0.50622,0.017013,470.677477,-779.109402,23.357838, 0.885205,-0.462786,0.04734,470.677482,-778.860284,30.770308, 0.923987,-0.382207,0.012845,472.107164,-776.05994,23.357838, 0.940951,-0.336786,0.034451,472.107168,-775.82127,30.459429, -0.040706,0.99398,-0.101718,429.267738,-763.421251,29.190985, -0.127104,0.99133,-0.033316,432.838912,-763.326349,23.357838, -0.027072,0.999069,-0.033577,429.267734,-763.617291,23.357838, -0.127104,0.99133,-0.033316,432.838912,-763.326349,23.357838, -0.040706,0.99398,-0.101718,429.267738,-763.421251,29.190985, -0.150374,0.983472,-0.100844,432.838915,-763.131306,29.161323, -0.959176,0.281343,-0.02878,453.575536,-745.52182,27.359938, -0.981057,0.193609,-0.006506,454.431238,-742.175043,23.357838, -0.94485,0.32732,-0.011,453.575534,-745.656322,23.357838, -0.981057,0.193609,-0.006506,454.431238,-742.175043,23.357838, -0.959176,0.281343,-0.02878,453.575536,-745.52182,27.359938, -0.989023,0.146995,-0.015036,454.43124,-742.052468,27.005038, 0.998111,-0.044419,0.042437,793.160542,-572.980425,23.357838, 0.991932,-0.101911,0.075398,792.007218,-589.846284,32.468209, 0.998111,-0.049787,0.035988,792.935095,-577.829952,23.357838, 0.991932,-0.101911,0.075398,792.007218,-589.846284,32.468209, 0.998111,-0.044419,0.042437,793.160542,-572.980425,23.357838, 0.991932,-0.090686,0.088582,792.007219,-586.233981,36.611394, 0.690548,-0.722878,0.024294,466.630394,-784.472872,23.357838, 0.603443,-0.793169,0.082097,464.090747,-786.408778,31.542489, 0.583909,-0.811361,0.027268,464.090742,-786.683847,23.357838, 0.603443,-0.793169,0.082097,464.090747,-786.408778,31.542489, 0.690548,-0.722878,0.024294,466.630394,-784.472872,23.357838, 0.714887,-0.69482,0.078501,466.630399,-784.205377,31.31709, -0.551599,0.82639,-0.113216,696.28309,-706.40024,23.357838, -0.473888,0.880088,-0.029578,684.332867,-714.293585,23.357838, -0.482609,0.869945,-0.101409,684.332867,-714.266541,24.162533, -0.989023,0.146995,-0.015036,454.43124,-742.052468,27.005038, -0.998419,0.056178,-0.001887,454.797652,-738.60882,23.357838, -0.981057,0.193609,-0.006506,454.431238,-742.175043,23.357838, -0.998419,0.056178,-0.001887,454.797652,-738.60882,23.357838, -0.989023,0.146995,-0.015036,454.43124,-742.052468,27.005038, -0.999951,0.009862,-0.001008,454.797654,-738.498463,26.641479, 0.862236,-0.50622,0.017013,470.677477,-779.109402,23.357838, 0.812465,-0.579983,0.059329,468.840127,-781.672997,31.058037, 0.783922,-0.620509,0.020854,468.840122,-781.931785,23.357838, 0.812465,-0.579983,0.059329,468.840127,-781.672997,31.058037, 0.862236,-0.50622,0.017013,470.677477,-779.109402,23.357838, 0.885205,-0.462786,0.04734,470.677482,-778.860284,30.770308, -0.993727,0.08015,-0.077994,764.031425,-583.441377,33.81879, -0.998991,0.027938,-0.035154,764.805052,-569.303684,23.357838, -0.998991,0.032467,-0.031019,764.696221,-572.980425,23.357838, -0.998991,0.027938,-0.035154,764.805052,-569.303684,23.357838, -0.993727,0.08015,-0.077994,764.031425,-583.441377,33.81879, -0.993727,0.068775,-0.088188,764.031425,-579.704781,37.076602, 0.020529,-0.999225,0.033582,599.602113,-766.149871,23.357838, 0,-0.996871,0.079045,473.717738,-765.945156,29.449145, 0,-0.999436,0.033589,473.717734,-766.149872,23.357838, 0,-0.996871,0.079045,473.717738,-765.945156,29.449145, 0.020529,-0.999225,0.033582,599.602113,-766.149871,23.357838, 0.030866,-0.994332,0.101738,599.602117,-765.945157,29.449075, -0.683524,0,-0.729928,127.425692,-280.29408,1698.17281, -0.582647,0,-0.812725,100.141826,-186.86272,1720.5641, -0.729928,0,-0.683524,127.425692,-186.86272,1698.17281, -0.582647,0,-0.812725,100.141826,-186.86272,1720.5641, -0.683524,0,-0.729928,127.425692,-280.29408,1698.17281, -0.528184,0,-0.84913,100.141826,-280.29408,1720.5641, -0.832687,0.442054,-0.333498,450.471124,-713.308606,126.073164, -0.901181,0.307496,-0.305481,452.247015,-693.58391,143.961322, -0.901181,0.346254,-0.26073,452.247014,-710.823017,124.188674, -0.901181,0.307496,-0.305481,452.247015,-693.58391,143.961322, -0.832687,0.442054,-0.333498,450.471124,-713.308606,126.073164, -0.832687,0.392486,-0.390624,450.471126,-695.789522,146.166935, -0.649152,0.44561,-0.616469,445.721745,-678.931346,167.953679, -0.748179,0.326101,-0.577828,448.282012,-654.795099,180.782109, -0.748179,0.401798,-0.528002,448.282017,-677.413444,165.951609, -0.748179,0.326101,-0.577828,448.282012,-654.795099,180.782109, -0.649152,0.44561,-0.616469,445.721745,-678.931346,167.953679, -0.649152,0.35745,-0.67144,445.72174,-656.026027,182.972343, -0.372406,0.015448,-0.927941,665.021343,-548.48129,174.800973, -0.266155,0,-0.96393,644.636215,-186.86272,181.426394, -0.393115,0,-0.919489,665.021343,-186.86272,174.800973, -0.266155,0,-0.96393,644.636215,-186.86272,181.426394, -0.372406,0.015448,-0.927941,665.021343,-548.48129,174.800973, -0.244466,0.016195,-0.969523,644.636215,-548.592598,181.426394, 0.792107,-0.00894,0.610317,468.840108,-549.460722,233.099647, 0.707841,-0.055835,0.704162,466.630399,-580.939677,234.58279, 0.79876,-0.062483,0.598396,468.840127,-580.680624,232.05041, 0.707841,-0.055835,0.704162,466.630399,-580.939677,234.58279, 0.792107,-0.00894,0.610317,468.840108,-549.460722,233.099647, 0.707157,-0.011876,0.706957,466.63038,-549.503387,235.639299, 0.517753,-0.01437,0.85541,696.758754,-548.76324,191.585041, 0.609101,-0.079799,0.789068,717.894046,-575.008662,176.604979, 0.625544,-0.013105,0.780079,717.89403,-548.526532,177.494989, 0.609101,-0.079799,0.789068,717.894046,-575.008662,176.604979, 0.517753,-0.01437,0.85541,696.758754,-548.76324,191.585041, 0.499663,-0.087405,0.861799,696.75877,-576.445897,190.654684, 0.499663,-0.087405,0.861799,696.75877,-576.445897,190.654684, 0.609101,-0.186578,0.770833,717.894058,-597.802054,172.685609, 0.609101,-0.079799,0.789068,717.894046,-575.008662,176.604979, 0.609101,-0.186578,0.770833,717.894058,-597.802054,172.685609, 0.499663,-0.087405,0.861799,696.75877,-576.445897,190.654684, 0.499663,-0.204023,0.84185,696.758783,-601.14038,186.408417, 0.381503,-0.093498,0.919627,673.957345,-577.587813,201.817466, 0.499663,-0.204023,0.84185,696.758783,-601.14038,186.408417, 0.499663,-0.087405,0.861799,696.75877,-576.445897,190.654684, 0.499663,-0.204023,0.84185,696.758783,-601.14038,186.408417, 0.381503,-0.093498,0.919627,673.957345,-577.587813,201.817466, 0.381503,-0.21794,0.898308,673.957358,-603.792753,197.311473, 0.256672,-0.097972,0.96152,649.884086,-578.414663,209.900281, 0.381503,-0.21794,0.898308,673.957358,-603.792753,197.311473, 0.381503,-0.093498,0.919627,673.957345,-577.587813,201.817466, 0.381503,-0.21794,0.898308,673.957358,-603.792753,197.311473, 0.256672,-0.097972,0.96152,649.884086,-578.414663,209.900281, 0.256673,-0.228081,0.939201,649.8841,-605.713302,205.206225, 0.127347,-0.100746,0.986728,624.955308,-578.912147,214.763349, 0.256673,-0.228081,0.939201,649.8841,-605.713302,205.206225, 0.256672,-0.097972,0.96152,649.884086,-578.414663,209.900281, 0.256673,-0.228081,0.939201,649.8841,-605.713302,205.206225, 0.127347,-0.100746,0.986728,624.955308,-578.912147,214.763349, 0.127347,-0.234264,0.963796,624.955322,-606.868816,209.956143, -0.993727,0.042411,-0.103482,764.031423,-571.081703,41.922837, -0.998991,0.011606,-0.043377,764.959284,-561.475403,23.357838, -0.998991,0.017409,-0.041391,764.928093,-563.76708,23.357838, -0.998991,0.011606,-0.043377,764.959284,-561.475403,23.357838, -0.993727,0.042411,-0.103482,764.031423,-571.081703,41.922837, -0.993727,0.027914,-0.108296,764.031421,-566.356087,43.420852, -0.494423,0.614096,-0.615169,684.332898,-669.009253,119.386665, -0.373111,0.560072,-0.739667,665.02139,-658.447133,140.935603, -0.494423,0.524541,-0.693111,684.332897,-652.814504,133.506322, -0.373111,0.560072,-0.739667,665.02139,-658.447133,140.935603, -0.494423,0.614096,-0.615169,684.332898,-669.009253,119.386665, -0.373111,0.655639,-0.656449,665.021391,-675.601701,125.979113, 0.517753,-0.01437,0.85541,696.758754,-548.76324,191.585041, 0.590628,-0,0.806944,717.89403,-186.86272,177.494989, 0.479633,0,0.877469,696.758754,-186.86272,191.585041, 0.590628,-0,0.806944,717.89403,-186.86272,177.494989, 0.517753,-0.01437,0.85541,696.758754,-548.76324,191.585041, 0.625544,-0.013105,0.780079,717.89403,-548.526532,177.494989, -0.928388,0.137548,-0.34522,753.576407,-586.320946,80.601044, -0.9698,0.059096,-0.236633,760.201821,-571.352859,63.961061, -0.9698,0.09079,-0.226373,760.201824,-578.830801,61.590563, -0.9698,0.059096,-0.236633,760.201821,-571.352859,63.961061, -0.928388,0.137548,-0.34522,753.576407,-586.320946,80.601044, -0.928388,0.089223,-0.360743,753.576403,-576.182654,83.81487, -0.494423,0.317928,-0.808992,684.332887,-615.44129,154.510351, -0.373111,0.218748,-0.901631,665.02137,-597.163793,170.061811, -0.494423,0.204724,-0.844769,684.332878,-594.960039,161.002883, -0.373111,0.218748,-0.901631,665.02137,-597.163793,170.061811, -0.494423,0.317928,-0.808992,684.332887,-615.44129,154.510351, -0.373111,0.33957,-0.863412,665.021379,-618.858911,163.184484, 0.127347,-0.234264,0.963796,624.955322,-606.868816,209.956143, 0.256673,-0.353935,0.899361,649.884111,-632.117666,196.836073, 0.256673,-0.228081,0.939201,649.8841,-605.713302,205.206225, 0.256673,-0.353935,0.899361,649.884111,-632.117666,196.836073, 0.127347,-0.234264,0.963796,624.955322,-606.868816,209.956143, 0.127347,-0.363412,0.922884,624.955334,-633.909652,201.38423, -0.285905,0.953237,-0.097966,436.335587,-762.351785,29.08158, -0.393899,0.918635,-0.030873,439.690579,-761.285715,23.357838, -0.263028,0.964244,-0.032406,436.335584,-762.544148,23.357838, -0.393899,0.918635,-0.030873,439.690579,-761.285715,23.357838, -0.285905,0.953237,-0.097966,436.335587,-762.351785,29.08158, -0.415875,0.904633,-0.093201,439.690582,-761.097663,28.953287, 0.999747,-0.022474,0.000755,473.717734,-766.149872,23.357838, 0.997653,-0.068124,0.006968,473.642039,-769.30108,29.792441, 0.993395,-0.114677,0.003853,473.642035,-769.517334,23.357838, 0.997653,-0.068124,0.006968,473.642039,-769.30108,29.792441, 0.999747,-0.022474,0.000755,473.717734,-766.149872,23.357838, 0.999748,-0.022318,0.002282,473.717738,-765.945156,29.449145, -0.373111,0.922912,-0.094985,665.021359,-723.541264,25.111307, -0.473888,0.880088,-0.029578,684.332867,-714.293585,23.357838, -0.351418,0.935691,-0.031446,665.021358,-723.600195,23.357838, -0.473888,0.880088,-0.029578,684.332867,-714.293585,23.357838, -0.373111,0.922912,-0.094985,665.021359,-723.541264,25.111307, -0.482609,0.869945,-0.101409,684.332867,-714.266541,24.162533, -0.244971,0.964459,-0.099038,644.636231,-730.147713,25.787129, -0.351418,0.935691,-0.031446,665.021358,-723.600195,23.357838, -0.222589,0.974362,-0.032746,644.63623,-730.229356,23.357838, -0.351418,0.935691,-0.031446,665.021358,-723.600195,23.357838, -0.244971,0.964459,-0.099038,644.636231,-730.147713,25.787129, -0.373111,0.922912,-0.094985,665.021359,-723.541264,25.111307, -0.022557,0.994554,-0.10175,602.133267,-734.928078,26.276163, -0.089733,0.995404,-0.033453,623.546332,-734.061121,23.357838, -0.015002,0.999323,-0.033585,602.133266,-735.026157,23.357838, -0.089733,0.995404,-0.033453,623.546332,-734.061121,23.357838, -0.022557,0.994554,-0.10175,602.133267,-734.928078,26.276163, -0.112343,0.988493,-0.101292,623.546333,-733.966349,26.17777, 0.691408,-0.722056,0.024266,736.997667,-709.544681,23.357838, 0.609101,-0.788882,0.081617,717.894046,-726.227566,25.386075, 0.590628,-0.806489,0.027104,717.894045,-726.295731,23.357838, 0.609101,-0.788882,0.081617,717.894046,-726.227566,25.386075, 0.691408,-0.722056,0.024266,736.997667,-709.544681,23.357838, 0.714403,-0.693748,0.091332,736.997667,-709.533908,23.678376, -0.936465,0.339085,-0.089746,753.576403,-633.437458,26.560066, -0.951243,0.299703,-0.072908,757.969157,-620.274076,23.357838, -0.919489,0.387429,-0.066619,753.576401,-633.988087,23.357838, 0.967989,-0.250852,0.00843,473.101718,-772.841978,23.357838, 0.940951,-0.336786,0.034451,472.107168,-775.82127,30.459429, 0.923987,-0.382207,0.012845,472.107164,-776.05994,23.357838, 0.940951,-0.336786,0.034451,472.107168,-775.82127,30.459429, 0.967989,-0.250852,0.00843,473.101718,-772.841978,23.357838, 0.978666,-0.204393,0.020908,473.101722,-772.614333,30.131373, 0.360344,-0.932293,0.031332,673.957342,-751.594898,23.357838, 0.256672,-0.961442,0.098738,649.884086,-759.522868,28.792076, 0.234823,-0.97149,0.03265,649.884083,-759.705502,23.357838, 0.256672,-0.961442,0.098738,649.884086,-759.522868,28.792076, 0.360344,-0.932293,0.031332,673.957342,-751.594898,23.357838, 0.381503,-0.91951,0.094637,673.957345,-751.440053,27.965226, 0.068639,-0.997079,0.03351,451.683295,-791.488471,23.357838, 0.00966,-0.995709,0.092029,448.317739,-791.272422,32.040027, 0.011244,-0.999373,0.033587,448.317734,-791.564213,23.357838, 0.00966,-0.995709,0.092029,448.317739,-791.272422,32.040027, 0.068639,-0.997079,0.03351,451.683295,-791.488471,23.357838, 0.091928,-0.990581,0.101478,451.683301,-791.19694,32.032304, 0.714403,-0.693748,0.091332,736.997667,-709.533908,23.678376, 0.691408,-0.722056,0.024266,736.997667,-709.544681,23.357838, 0.752834,-0.654794,0.066982,739.751559,-706.400475,23.357838, -0.112343,0.988493,-0.101292,623.546333,-733.966349,26.17777, -0.222589,0.974362,-0.032746,644.63623,-730.229356,23.357838, -0.089733,0.995404,-0.033453,623.546332,-734.061121,23.357838, -0.222589,0.974362,-0.032746,644.63623,-730.229356,23.357838, -0.112343,0.988493,-0.101292,623.546333,-733.966349,26.17777, -0.244971,0.964459,-0.099038,644.636231,-730.147713,25.787129, 0.999748,-0.0058,0.021677,473.717752,-607.239369,211.479086, 0.995804,-0.035007,0.084556,473.642065,-635.720877,205.981096, 0.999748,-0.0087,0.020685,473.717764,-634.484263,202.842487, 0.995804,-0.035007,0.084556,473.642065,-635.720877,205.981096, 0.999748,-0.0058,0.021677,473.717752,-607.239369,211.479086, 0.995804,-0.023158,0.088537,473.642053,-608.036762,214.756927, 0.091928,-0.487734,0.868139,451.683339,-672.734453,212.70224, 0.229025,-0.58781,0.775904,455.006113,-699.207898,194.697902, 0.229025,-0.476597,0.848766,455.006107,-672.469112,212.230111, 0.229025,-0.58781,0.775904,455.006113,-699.207898,194.697902, 0.091928,-0.487734,0.868139,451.683339,-672.734453,212.70224, 0.091928,-0.601482,0.793579,451.683345,-699.535099,195.12947, 0.011271,-0.489901,0.871705,448.317778,-672.771628,212.768386, 0.091928,-0.601482,0.793579,451.683345,-699.535099,195.12947, 0.091928,-0.487734,0.868139,451.683339,-672.734453,212.70224, 0.091928,-0.601482,0.793579,451.683345,-699.535099,195.12947, 0.011271,-0.489901,0.871705,448.317778,-672.771628,212.768386, 0.011271,-0.604116,0.796817,448.317783,-699.580941,195.189934, -0.415875,0.642593,-0.643523,439.690622,-702.296712,152.674124, -0.537771,0.671316,-0.510036,442.83949,-719.276356,130.597708, -0.415875,0.72429,-0.549957,439.690621,-720.641807,131.632947, -0.537771,0.671316,-0.510036,442.83949,-719.276356,130.597708, -0.415875,0.642593,-0.643523,439.690622,-702.296712,152.674124, -0.537771,0.595553,-0.596756,442.839492,-701.085065,151.462478, -0.537771,0.595553,-0.596756,442.839492,-701.085065,151.462478, -0.649152,0.595502,-0.473264,445.721745,-717.576266,129.308758, -0.537771,0.671316,-0.510036,442.83949,-719.276356,130.597708, -0.649152,0.595502,-0.473264,445.721745,-717.576266,129.308758, -0.537771,0.595553,-0.596756,442.839492,-701.085065,151.462478, -0.649152,0.525457,-0.549997,445.721747,-699.576473,149.953886, -0.150375,0.698898,-0.699234,432.838956,-703.74222,154.119632, -0.285905,0.76333,-0.579298,436.335626,-721.646389,132.394587, -0.150375,0.787661,-0.597476,432.838954,-722.270805,132.867998, -0.285905,0.76333,-0.579298,436.335626,-721.646389,132.394587, -0.150375,0.698898,-0.699234,432.838956,-703.74222,154.119632, -0.285905,0.677271,-0.67791,436.335627,-703.188138,153.565551, -0.112343,0.702509,-0.702752,623.546368,-683.011825,133.389238, -0.244971,0.772358,-0.586047,644.636264,-695.850119,112.836708, -0.112343,0.791717,-0.600469,623.546367,-698.908942,115.155806, -0.244971,0.772358,-0.586047,644.636264,-695.850119,112.836708, -0.112343,0.702509,-0.702752,623.546368,-683.011825,133.389238, -0.244971,0.685296,-0.685827,644.636265,-680.297547,130.67496, 0.382469,-0.01552,0.923838,458.222196,-549.595395,241.116069, 0.487278,-0.088099,0.868791,461.269956,-581.352493,238.618284, 0.506559,-0.014482,0.862083,461.269937,-549.571376,239.686382, 0.487278,-0.088099,0.868791,461.269956,-581.352493,238.618284, 0.382469,-0.01552,0.923838,458.222196,-549.595395,241.116069, 0.361665,-0.094307,0.927526,458.222215,-581.498327,240.043877, -0.19509,0,-0.980785,35.243015,-186.86272,2079.865312, -0.098017,0,-0.995185,0.112465,-280.29408,2083.325369, -0.098017,0,-0.995185,0.112465,-186.86272,2083.325369, -0.098017,0,-0.995185,0.112465,-280.29408,2083.325369, -0.19509,0,-0.980785,35.243015,-186.86272,2079.865312, -0.19509,0,-0.980785,35.243015,-280.29408,2079.865312, -0.382683,0,-0.92388,69.023518,-280.29408,2069.618109, -0.19509,0,-0.980785,35.243015,-186.86272,2079.865312, -0.382683,0,-0.92388,69.023518,-186.86272,2069.618109, -0.19509,0,-0.980785,35.243015,-186.86272,2079.865312, -0.382683,0,-0.92388,69.023518,-280.29408,2069.618109, -0.19509,0,-0.980785,35.243015,-280.29408,2079.865312, 0.684487,-0,-0.729025,221.73981,-186.86272,1435.598634, 0.684487,-0,-0.729025,93.530885,-280.29408,1315.222366, 0.684487,-0,-0.729025,93.530885,-186.86272,1315.222366, 0.684487,-0,-0.729025,93.530885,-280.29408,1315.222366, 0.684487,-0,-0.729025,221.73981,-186.86272,1435.598634, 0.684487,-0,-0.729025,221.73981,-280.29408,1435.598634, -0.494423,0.087701,-0.864786,684.332867,-573.78512,164.643953, -0.372406,0.015448,-0.927941,665.021343,-548.48129,174.800973, -0.493603,0.014422,-0.869568,684.332852,-548.325029,165.499615, -0.372406,0.015448,-0.927941,665.021343,-548.48129,174.800973, -0.494423,0.087701,-0.864786,684.332867,-573.78512,164.643953, -0.373111,0.093846,-0.923028,665.021359,-574.733894,173.918677, -0.985345,0.136861,-0.101808,454.431275,-705.386141,120.066621, -0.999454,0.024455,-0.02222,454.797689,-686.233268,136.610681, -0.999454,0.027255,-0.01868,454.797688,-702.539296,117.908241, -0.999454,0.024455,-0.02222,454.797689,-686.233268,136.610681, -0.985345,0.136861,-0.101808,454.431275,-705.386141,120.066621, -0.985345,0.121711,-0.119507,454.431277,-688.759444,139.136857, -0.022557,0.706919,-0.706935,602.133302,-683.695423,134.072836, -0.112343,0.791717,-0.600469,623.546367,-698.908942,115.155806, -0.022557,0.796656,-0.604012,602.133301,-699.679313,115.739878, -0.112343,0.791717,-0.600469,623.546367,-698.908942,115.155806, -0.022557,0.706919,-0.706935,602.133302,-683.695423,134.072836, -0.112343,0.702509,-0.702752,623.546368,-683.011825,133.389238, -0.741547,0.152765,-0.653277,448.281994,-604.584377,200.565168, -0.649249,0.076378,-0.756731,445.721707,-578.184383,207.648051, -0.748094,0.052453,-0.661516,448.28198,-577.928705,205.148665, -0.649249,0.076378,-0.756731,445.721707,-578.184383,207.648051, -0.741547,0.152765,-0.653277,448.281994,-604.584377,200.565168, -0.638578,0.17117,-0.75028,445.721721,-605.178251,203.006401, 0.030867,-0.23624,0.971204,599.602131,-607.23931,211.479086, 0.127347,-0.363412,0.922884,624.955334,-633.909652,201.38423, 0.127347,-0.234264,0.963796,624.955322,-606.868816,209.956143, 0.127347,-0.363412,0.922884,624.955334,-633.909652,201.38423, 0.030867,-0.23624,0.971204,599.602131,-607.23931,211.479086, 0.030867,-0.366379,0.929954,599.602143,-634.484215,202.842483, 0.991932,-0.047852,0.117393,792.007216,-572.529419,45.597264, 0.966794,-0.126469,0.22207,787.130189,-589.736091,65.02047, 0.991932,-0.063402,0.109777,792.007217,-577.494024,43.23773, 0.966794,-0.126469,0.22207,787.130189,-589.736091,65.02047, 0.991932,-0.047852,0.117393,792.007216,-572.529419,45.597264, 0.966794,-0.095028,0.237232,787.130187,-581.689044,68.845, 0.966794,-0.095028,0.237232,787.130187,-581.689044,68.845, 0.924993,-0.187375,0.330572,779.024167,-601.558028,86.055659, 0.966794,-0.126469,0.22207,787.130189,-589.736091,65.02047, 0.924993,-0.187375,0.330572,779.024167,-601.558028,86.055659, 0.966794,-0.095028,0.237232,787.130187,-581.689044,68.845, 0.924993,-0.140582,0.353021,779.024163,-590.534326,91.294907, -0.707841,0.055835,-0.704162,718.363082,-571.142012,138.806193, -0.795651,0.010475,-0.605664,732.466031,-547.618545,123.445905, -0.796291,0.062774,-0.601647,732.466044,-569.495502,122.710666, -0.795651,0.010475,-0.605664,732.466031,-547.618545,123.445905, -0.707841,0.055835,-0.704162,718.363082,-571.142012,138.806193, -0.716622,0.0095,-0.697397,718.363068,-547.889718,139.587655, -0.796291,0.062774,-0.601647,732.466044,-569.495502,122.710666, -0.869747,0.008617,-0.493422,744.275028,-547.318028,105.557439, -0.870211,0.051465,-0.489984,744.27504,-567.670824,104.873423, -0.869747,0.008617,-0.493422,744.275028,-547.318028,105.557439, -0.796291,0.062774,-0.601647,732.466044,-569.495502,122.710666, -0.795651,0.010475,-0.605664,732.466031,-547.618545,123.445905, -0.870211,0.051465,-0.489984,744.27504,-567.670824,104.873423, -0.928106,0.006604,-0.372257,753.576386,-546.993607,86.24593, -0.928388,0.039234,-0.369537,753.576397,-565.700992,85.617213, -0.928106,0.006604,-0.372257,753.576386,-546.993607,86.24593, -0.870211,0.051465,-0.489984,744.27504,-567.670824,104.873423, -0.869747,0.008617,-0.493422,744.275028,-547.318028,105.557439, -0.928388,0.039234,-0.369537,753.576397,-565.700992,85.617213, -0.969674,0.004471,-0.24436,760.201807,-546.651151,65.860802, -0.9698,0.0263,-0.242479,760.201817,-563.621651,65.290458, -0.969674,0.004471,-0.24436,760.201807,-546.651151,65.860802, -0.928388,0.039234,-0.369537,753.576397,-565.700992,85.617213, -0.928106,0.006604,-0.372257,753.576386,-546.993607,86.24593, 0.991932,-0.07777,0.100113,792.007218,-582.090797,40.223697, 0.966794,-0.181729,0.179678,787.130191,-603.902541,54.279953, 0.991932,-0.090686,0.088582,792.007219,-586.233981,36.611394, 0.966794,-0.181729,0.179678,787.130191,-603.902541,54.279953, 0.991932,-0.07777,0.100113,792.007218,-582.090797,40.223697, 0.966794,-0.15555,0.202766,787.130191,-597.186922,60.135075, -0.040706,0.706494,-0.706547,429.267778,-703.948313,154.325725, -0,0.622177,-0.782877,0.016303,-682.666775,172.880521, -0.040706,0.603626,-0.796228,429.267777,-682.666673,172.880471, -0,0.622177,-0.782877,0.016303,-682.666775,172.880521, -0.040706,0.706494,-0.706547,429.267778,-703.948313,154.325725, -0,0.723053,-0.690793,0.016305,-703.948386,154.325799, -0.150375,0.698898,-0.699234,432.838956,-703.74222,154.119632, -0.040706,0.603626,-0.796228,429.267777,-682.666673,172.880471, -0.150375,0.597097,-0.787948,432.838954,-682.490586,172.648217, -0.040706,0.603626,-0.796228,429.267777,-682.666673,172.880471, -0.150375,0.698898,-0.699234,432.838956,-703.74222,154.119632, -0.040706,0.706494,-0.706547,429.267778,-703.948313,154.325725, -0.285905,0.677271,-0.67791,436.335627,-703.188138,153.565551, -0.150375,0.597097,-0.787948,432.838954,-682.490586,172.648217, -0.285905,0.578577,-0.763876,436.335626,-682.017175,172.023802, -0.150375,0.597097,-0.787948,432.838954,-682.490586,172.648217, -0.285905,0.677271,-0.67791,436.335627,-703.188138,153.565551, -0.150375,0.698898,-0.699234,432.838956,-703.74222,154.119632, 0.620913,-0.013167,0.783769,464.090728,-549.540509,237.849027, 0.707841,-0.055835,0.704162,466.630399,-580.939677,234.58279, 0.707157,-0.011876,0.706957,466.63038,-549.503387,235.639299, 0.707841,-0.055835,0.704162,466.630399,-580.939677,234.58279, 0.620913,-0.013167,0.783769,464.090728,-549.540509,237.849027, 0.603443,-0.080198,0.793363,464.090747,-581.165077,236.78619, -0.748094,0.052453,-0.661516,448.28198,-577.928705,205.148665, -0.648424,0.012535,-0.761176,445.72169,-549.049611,208.627211, -0.747451,0.007439,-0.664276,448.281963,-549.007501,206.120647, -0.648424,0.012535,-0.761176,445.72169,-549.049611,208.627211, -0.748094,0.052453,-0.661516,448.28198,-577.928705,205.148665, -0.649249,0.076378,-0.756731,445.721707,-578.184383,207.648051, -0.748094,0.052453,-0.661516,448.28198,-577.928705,205.148665, -0.832126,0.009639,-0.554503,450.471071,-548.95985,203.284158, -0.832687,0.057661,-0.550734,450.471088,-577.639374,202.320298, -0.832126,0.009639,-0.554503,450.471071,-548.95985,203.284158, -0.748094,0.052453,-0.661516,448.28198,-577.928705,205.148665, -0.747451,0.007439,-0.664276,448.281963,-549.007501,206.120647, -0.832687,0.057661,-0.550734,450.471088,-577.639374,202.320298, -0.90081,0.007643,-0.434147,452.246961,-548.907571,200.172234, -0.901181,0.045526,-0.431045,452.246978,-577.321949,199.217285, -0.90081,0.007643,-0.434147,452.246961,-548.907571,200.172234, -0.832687,0.057661,-0.550734,450.471088,-577.639374,202.320298, -0.832126,0.009639,-0.554503,450.471071,-548.95985,203.284158, -0.901181,0.045526,-0.431045,452.246978,-577.321949,199.217285, -0.95219,0.005502,-0.305456,453.575519,-548.85167,196.844653, -0.952384,0.032525,-0.303161,453.575536,-576.982526,195.899232, -0.95219,0.005502,-0.305456,453.575519,-548.85167,196.844653, -0.901181,0.045526,-0.431045,452.246978,-577.321949,199.217285, -0.90081,0.007643,-0.434147,452.246961,-548.907571,200.172234, -0.952384,0.032525,-0.303161,453.575536,-576.982526,195.899232, -0.985283,0.003254,-0.170901,454.431224,-548.79322,193.365338, -0.985345,0.018907,-0.169523,454.43124,-576.627626,192.429881, -0.985283,0.003254,-0.170901,454.431224,-548.79322,193.365338, -0.952384,0.032525,-0.303161,453.575536,-576.982526,195.899232, -0.95219,0.005502,-0.305456,453.575519,-548.85167,196.844653, 0.794465,-0.367859,0.483224,753.739289,-638.371733,114.456714, 0.707932,-0.500166,0.498664,736.997697,-665.645303,116.022715, 0.794465,-0.430275,0.42859,753.73929,-652.105388,102.482801, 0.707932,-0.500166,0.498664,736.997697,-665.645303,116.022715, 0.794465,-0.367859,0.483224,753.739289,-638.371733,114.456714, 0.707932,-0.427549,0.562168,736.997696,-649.94032,129.715362, 0.967989,-0,0.250993,473.101704,-186.86272,224.014969, 0.928983,-0.005506,0.370082,472.10715,-549.362134,227.231115, 0.973547,-0.004216,0.228449,473.101704,-549.308105,224.014969, 0.928983,-0.005506,0.370082,472.10715,-549.362134,227.231115, 0.967989,-0,0.250993,473.101704,-186.86272,224.014969, 0.932593,0,0.360931,472.10715,-186.86272,227.231115, -0.901181,0.103838,-0.42082,452.246991,-603.175034,194.771794, -0.952384,0.032525,-0.303161,453.575536,-576.982526,195.899232, -0.952384,0.073533,-0.295901,453.575549,-602.386639,191.530944, -0.952384,0.032525,-0.303161,453.575536,-576.982526,195.899232, -0.901181,0.103838,-0.42082,452.246991,-603.175034,194.771794, -0.901181,0.045526,-0.431045,452.246978,-577.321949,199.217285, -0.285329,0.015988,-0.958296,436.33557,-549.135218,213.722949, -0.172878,0,-0.984943,432.838898,-186.86272,214.504709, -0.307402,0,-0.95158,436.33557,-186.86272,213.722949, -0.172878,0,-0.984943,432.838898,-186.86272,214.504709, -0.285329,0.015988,-0.958296,436.33557,-549.135218,213.722949, -0.150052,0.016548,-0.98854,432.838898,-549.148352,214.504709, 0.998111,-0.007644,0.060955,793.543158,-559.332109,23.357838, 0.991932,-0.031409,0.122818,792.007213,-567.289597,47.258281, 0.998111,-0.015878,0.059345,793.520758,-561.475389,23.357838, 0.991932,-0.031409,0.122818,792.007213,-567.289597,47.258281, 0.998111,-0.007644,0.060955,793.543158,-559.332109,23.357838, 0.991932,-0.01438,0.125953,792.007211,-561.87231,48.189795, 0.991932,-0.01438,0.125953,792.007211,-561.87231,48.189795, 0.966794,-0.061815,0.247969,787.130183,-573.195905,71.537315, 0.991932,-0.031409,0.122818,792.007213,-567.289597,47.258281, 0.966794,-0.061815,0.247969,787.130183,-573.195905,71.537315, 0.991932,-0.01438,0.125953,792.007211,-561.87231,48.189795, 0.966794,-0.027448,0.254079,787.130178,-564.415116,73.047189, 0.966794,-0.027448,0.254079,787.130178,-564.415116,73.047189, 0.924993,-0.091165,0.368885,779.024159,-578.899518,94.983127, 0.966794,-0.061815,0.247969,787.130183,-573.195905,71.537315, 0.924993,-0.091165,0.368885,779.024159,-578.899518,94.983127, 0.966794,-0.027448,0.254079,787.130178,-564.415116,73.047189, 0.924993,-0.040048,0.377867,779.024152,-566.870657,97.051514, 0.924993,-0.040048,0.377867,779.024152,-566.870657,97.051514, 0.867227,-0.118957,0.483493,767.829322,-584.301801,117.190256, 0.924993,-0.091165,0.368885,779.024159,-578.899518,94.983127, 0.867227,-0.118957,0.483493,767.829322,-584.301801,117.190256, 0.924993,-0.040048,0.377867,779.024152,-566.870657,97.051514, 0.867227,-0.051963,0.495193,767.829315,-569.19647,119.787648, 0.277314,-0.016138,0.960644,649.884069,-549.087494,210.885907, 0.381503,-0.093498,0.919627,673.957345,-577.587813,201.817466, 0.401003,-0.015387,0.915947,673.957328,-548.951312,202.77988, 0.381503,-0.093498,0.919627,673.957345,-577.587813,201.817466, 0.277314,-0.016138,0.960644,649.884069,-549.087494,210.885907, 0.256672,-0.097972,0.96152,649.884086,-578.414663,209.900281, 0.148826,-0.01661,0.988724,624.95529,-549.169432,215.762941, 0.256672,-0.097972,0.96152,649.884086,-578.414663,209.900281, 0.277314,-0.016138,0.960644,649.884069,-549.087494,210.885907, 0.256672,-0.097972,0.96152,649.884086,-578.414663,209.900281, 0.148826,-0.01661,0.988724,624.95529,-549.169432,215.762941, 0.127347,-0.100746,0.986728,624.955308,-578.912147,214.763349, 0.867227,-0.301852,0.395982,767.829336,-625.572837,97.575321, 0.794465,-0.430275,0.42859,753.73929,-652.105388,102.482801, 0.867227,-0.352996,0.351156,767.829337,-637.125516,87.502929, 0.794465,-0.430275,0.42859,753.73929,-652.105388,102.482801, 0.867227,-0.301852,0.395982,767.829336,-625.572837,97.575321, 0.794465,-0.367859,0.483224,753.739289,-638.371733,114.456714, -0.41512,0.01512,-0.909641,439.690565,-549.114088,212.465226, -0.307402,0,-0.95158,436.33557,-186.86272,213.722949, -0.436021,0,-0.899936,439.690565,-186.86272,212.465226, -0.307402,0,-0.95158,436.33557,-186.86272,213.722949, -0.41512,0.01512,-0.909641,439.690565,-549.114088,212.465226, -0.285329,0.015988,-0.958296,436.33557,-549.135218,213.722949, 0.998111,-0.015878,0.059345,793.520758,-561.475389,23.357838, 0.991932,-0.047852,0.117393,792.007216,-572.529419,45.597264, 0.998111,-0.023817,0.056627,793.478048,-563.767069,23.357838, 0.991932,-0.047852,0.117393,792.007216,-572.529419,45.597264, 0.998111,-0.015878,0.059345,793.520758,-561.475389,23.357838, 0.991932,-0.031409,0.122818,792.007213,-567.289597,47.258281, -0,1,0,35.238106,-186.86272,1394.271064, -0,1,0,18.722685,-186.86272,1315.222366, -0,1,0,0.112465,-186.86272,1390.81149, -0,1,0,18.722685,-186.86272,1315.222366, -0,1,0,35.238106,-186.86272,1394.271064, 0,1,0,56.126785,-186.86272,1315.222366, 0,1,0,56.126785,-186.86272,1315.222366, -0,1,0,35.238106,-186.86272,1394.271064, -0,1,0,69.013887,-186.86272,1404.516835, 0,1,0,56.126785,-186.86272,1315.222366, -0,1,0,69.013887,-186.86272,1404.516835, 0,1,0,56.126785,-186.86272,268.426375, -0,1,0,100.155807,-186.86272,1753.526669, 0,1,0,100.141826,-186.86272,1720.5641, -0,1,0,69.327289,-186.86272,1737.048483, 0,1,0,100.141826,-186.86272,1720.5641, -0,1,0,100.155807,-186.86272,1753.526669, 0,1,0,127.425692,-186.86272,1698.17281, 0,1,0,127.425692,-186.86272,1698.17281, -0,1,0,100.155807,-186.86272,1753.526669, 0,1,0,127.443487,-186.86272,1775.921089, 0,1,0,127.425692,-186.86272,1698.17281, 0,1,0,127.443487,-186.86272,1775.921089, 0,1,0,149.816983,-186.86272,1670.888943, 0,1,0,149.816983,-186.86272,1670.888943, 0,1,0,127.443487,-186.86272,1775.921089, 0,1,0,149.837908,-186.86272,1803.208769, 0,1,0,149.816983,-186.86272,1670.888943, 0,1,0,149.837908,-186.86272,1803.208769, 0,1,0,166.455213,-186.86272,1639.761005, 0,1,0,166.455213,-186.86272,1639.761005, 0,1,0,149.837908,-186.86272,1803.208769, 0,1,0,166.478463,-186.86272,1834.341059, 0,1,0,166.455213,-186.86272,1639.761005, 0,1,0,166.478463,-186.86272,1834.341059, 0,1,0,176.700984,-186.86272,1605.985223, 0,1,0,176.700984,-186.86272,1605.985223, 0,1,0,166.478463,-186.86272,1834.341059, 0,1,0,176.725666,-186.86272,1868.121561, 0,1,0,176.700984,-186.86272,1605.985223, 0,1,0,176.725666,-186.86272,1868.121561, 0,1,0,180.160558,-186.86272,1570.859583, 0,1,0,180.160558,-186.86272,1570.859583, 0,1,0,176.725666,-186.86272,1868.121561, 0,1,0,180.185724,-186.86272,1903.252111, 0,1,0,93.652471,-186.86272,2499.208064, 0,1,0,46.868397,-186.86272,2125.502553, 0,1,0,46.868397,-186.86272,2499.208064, 0,1,0,46.868397,-186.86272,2125.502553, 0,1,0,93.652471,-186.86272,2499.208064, 0,1,0,69.023518,-186.86272,2069.618109, 0,1,0,69.023518,-186.86272,2069.618109, 0,1,0,93.652471,-186.86272,2499.208064, 0,1,-0,100.155807,-186.86272,2052.977553, 0,1,-0,100.155807,-186.86272,2052.977553, 0,1,0,93.652471,-186.86272,2499.208064, 0,1,-0,123.089852,-186.86272,2224.766097, 0,1,-0,100.155807,-186.86272,2052.977553, 0,1,-0,123.089852,-186.86272,2224.766097, 0,1,-0,127.443487,-186.86272,2030.583133, 0,1,-0,127.443487,-186.86272,2030.583133, 0,1,-0,123.089852,-186.86272,2224.766097, -0,1,-0,221.73981,-186.86272,2013.443961, 0,1,-0,127.443487,-186.86272,2030.583133, -0,1,-0,221.73981,-186.86272,2013.443961, 0,1,0,149.837908,-186.86272,2003.295453, 0,1,0,149.837908,-186.86272,2003.295453, -0,1,-0,221.73981,-186.86272,2013.443961, 0,1,0,166.478463,-186.86272,1972.163164, 0,1,0,166.478463,-186.86272,1972.163164, -0,1,-0,221.73981,-186.86272,2013.443961, 0,1,0,176.725666,-186.86272,1938.382661, 0,1,0,176.725666,-186.86272,1938.382661, -0,1,-0,221.73981,-186.86272,2013.443961, 0,1,0,180.185724,-186.86272,1903.252111, -0,1,0,100.141826,-186.86272,1421.155065, -0,1,0,93.530885,-186.86272,1315.222366, -0,1,0,69.013887,-186.86272,1404.516835, -0,1,0,93.530885,-186.86272,1315.222366, -0,1,0,100.141826,-186.86272,1421.155065, -0,1,0,221.73981,-186.86272,1435.598634, -0,1,0,221.73981,-186.86272,1435.598634, -0,1,0,100.141826,-186.86272,1421.155065, 0,1,0,127.425692,-186.86272,1443.546356, -0,1,0,221.73981,-186.86272,1435.598634, 0,1,0,127.425692,-186.86272,1443.546356, 0,1,0,149.816983,-186.86272,1470.830222, -0,1,0,221.73981,-186.86272,1435.598634, 0,1,0,149.816983,-186.86272,1470.830222, 0,1,0,166.455213,-186.86272,1501.958161, -0,1,0,221.73981,-186.86272,1435.598634, 0,1,0,166.455213,-186.86272,1501.958161, 0,1,0,176.700984,-186.86272,1535.733942, -0,1,0,221.73981,-186.86272,1435.598634, 0,1,0,176.700984,-186.86272,1535.733942, 0,1,0,180.160558,-186.86272,1570.859583, -0,1,0,221.73981,-186.86272,1435.598634, 0,1,0,180.160558,-186.86272,1570.859583, 0,1,0,180.185724,-186.86272,1903.252111, -0,1,0,221.73981,-186.86272,1435.598634, 0,1,0,180.185724,-186.86272,1903.252111, -0,1,-0,221.73981,-186.86272,2013.443961, -0,1,-0,0.016247,-186.86272,214.795487, -0,1,-0,93.530885,-186.86272,242.726639, 0,1,-0,429.26772,-186.86272,214.795487, -0,1,-0,93.530885,-186.86272,242.726639, -0,1,-0,0.016247,-186.86272,214.795487, -0,1,-0,18.722685,-186.86272,268.426375, -0,1,-0,18.722685,-186.86272,268.426375, -0,1,-0,0.016247,-186.86272,214.795487, -0,1,0,0.112465,-186.86272,1390.81149, -0,1,-0,18.722685,-186.86272,268.426375, -0,1,0,0.112465,-186.86272,1390.81149, -0,1,0,18.722685,-186.86272,1315.222366, -0,1,-0,93.530885,-186.86272,242.726639, -0,1,-0,18.722685,-186.86272,268.426375, 0,1,0,56.126785,-186.86272,268.426375, -0,1,-0,93.530885,-186.86272,242.726639, 0,1,0,56.126785,-186.86272,268.426375, -0,1,0,69.013887,-186.86272,1404.516835, -0,1,-0,93.530885,-186.86272,242.726639, -0,1,0,69.013887,-186.86272,1404.516835, -0,1,0,93.530885,-186.86272,1315.222366, 0,1,-0,429.26772,-186.86272,214.795487, -0,1,-0,93.530885,-186.86272,242.726639, 0,1,-0,448.31772,-186.86272,242.726639, 0,1,-0,429.26772,-186.86272,214.795487, 0,1,-0,448.31772,-186.86272,242.726639, 0,1,0,432.838898,-186.86272,214.504709, 0,1,0,432.838898,-186.86272,214.504709, 0,1,-0,448.31772,-186.86272,242.726639, 0,1,0,436.33557,-186.86272,213.722949, 0,1,0,436.33557,-186.86272,213.722949, 0,1,-0,448.31772,-186.86272,242.726639, 0,1,0,439.690565,-186.86272,212.465226, 0,1,0,439.690565,-186.86272,212.465226, 0,1,-0,448.31772,-186.86272,242.726639, 0,1,0,442.839435,-186.86272,210.7557, 0,1,0,442.839435,-186.86272,210.7557, 0,1,-0,448.31772,-186.86272,242.726639, 0,1,0,445.72169,-186.86272,208.627211, 0,1,0,445.72169,-186.86272,208.627211, 0,1,-0,448.31772,-186.86272,242.726639, 0,1,0,448.281963,-186.86272,206.120647, 0,1,0,448.281963,-186.86272,206.120647, 0,1,-0,448.31772,-186.86272,242.726639, 0,1,0,450.471071,-186.86272,203.284158, 0,1,0,450.471071,-186.86272,203.284158, 0,1,-0,448.31772,-186.86272,242.726639, 0,1,0,451.683281,-186.86272,242.65094, 0,1,0,450.471071,-186.86272,203.284158, 0,1,0,451.683281,-186.86272,242.65094, 0,1,0,452.246961,-186.86272,200.172234, 0,1,0,452.246961,-186.86272,200.172234, 0,1,0,451.683281,-186.86272,242.65094, 0,1,0,455.00605,-186.86272,242.110623, 0,1,0,452.246961,-186.86272,200.172234, 0,1,0,455.00605,-186.86272,242.110623, 0,1,0,453.575519,-186.86272,196.844653, 0,1,0,453.575519,-186.86272,196.844653, 0,1,0,455.00605,-186.86272,242.110623, 0,1,0,454.431224,-186.86272,193.365338, 0,1,0,454.431224,-186.86272,193.365338, 0,1,0,455.00605,-186.86272,242.110623, 0,1,0,454.797637,-186.86272,189.801127, 0,1,0,454.797637,-186.86272,189.801127, 0,1,0,602.133251,-186.86272,186.220487, 0,1,0,454.66772,-186.86272,186.220487, 0,1,0,602.133251,-186.86272,186.220487, 0,1,0,454.797637,-186.86272,189.801127, 0,1,0,473.71772,-186.86272,217.326639, 0,1,0,473.71772,-186.86272,217.326639, 0,1,0,454.797637,-186.86272,189.801127, 0,1,0,455.00605,-186.86272,242.110623, 0,1,0,473.71772,-186.86272,217.326639, 0,1,0,455.00605,-186.86272,242.110623, 0,1,0,458.222196,-186.86272,241.116069, 0,1,0,473.71772,-186.86272,217.326639, 0,1,0,458.222196,-186.86272,241.116069, 0,1,0,461.269937,-186.86272,239.686382, 0,1,0,473.71772,-186.86272,217.326639, 0,1,0,461.269937,-186.86272,239.686382, 0,1,0,464.090728,-186.86272,237.849027, 0,1,0,473.71772,-186.86272,217.326639, 0,1,0,464.090728,-186.86272,237.849027, 0,1,0,466.63038,-186.86272,235.639299, 0,1,0,473.71772,-186.86272,217.326639, 0,1,0,466.63038,-186.86272,235.639299, 0,1,0,468.840108,-186.86272,233.099647, 0,1,0,473.71772,-186.86272,217.326639, 0,1,0,468.840108,-186.86272,233.099647, 0,1,0,470.677463,-186.86272,230.278856, 0,1,0,473.71772,-186.86272,217.326639, 0,1,0,470.677463,-186.86272,230.278856, 0,1,0,472.10715,-186.86272,227.231115, 0,1,0,473.71772,-186.86272,217.326639, 0,1,0,472.10715,-186.86272,227.231115, 0,1,0,473.101704,-186.86272,224.014969, 0,1,0,473.71772,-186.86272,217.326639, 0,1,0,473.101704,-186.86272,224.014969, 0,1,0,473.642021,-186.86272,220.6922, 0,1,0,602.133251,-186.86272,186.220487, 0,1,0,473.71772,-186.86272,217.326639, 0,1,0,599.602099,-186.86272,217.326639, 0,1,0,602.133251,-186.86272,186.220487, 0,1,0,599.602099,-186.86272,217.326639, 0,1,0,624.95529,-186.86272,215.762941, 0,1,0,602.133251,-186.86272,186.220487, 0,1,0,624.95529,-186.86272,215.762941, 0,1,0,623.546317,-186.86272,185.255996, 0,1,0,623.546317,-186.86272,185.255996, 0,1,0,624.95529,-186.86272,215.762941, 0,1,0,644.636215,-186.86272,181.426394, 0,1,0,644.636215,-186.86272,181.426394, 0,1,0,624.95529,-186.86272,215.762941, 0,1,0,649.884069,-186.86272,210.885907, 0,1,0,644.636215,-186.86272,181.426394, 0,1,0,649.884069,-186.86272,210.885907, 0,1,0,665.021343,-186.86272,174.800973, 0,1,0,665.021343,-186.86272,174.800973, 0,1,0,649.884069,-186.86272,210.885907, 0,1,0,673.957328,-186.86272,202.77988, 0,1,0,665.021343,-186.86272,174.800973, 0,1,0,673.957328,-186.86272,202.77988, 0,1,0,684.332852,-186.86272,165.499615, 0,1,0,684.332852,-186.86272,165.499615, 0,1,0,673.957328,-186.86272,202.77988, 0,1,0,696.758754,-186.86272,191.585041, 0,1,0,684.332852,-186.86272,165.499615, 0,1,0,696.758754,-186.86272,191.585041, 0,1,0,702.221319,-186.86272,153.690618, 0,1,0,702.221319,-186.86272,153.690618, 0,1,0,696.758754,-186.86272,191.585041, 0,1,0,717.89403,-186.86272,177.494989, 0,1,0,702.221319,-186.86272,153.690618, 0,1,0,717.89403,-186.86272,177.494989, 0,1,0,718.363068,-186.86272,139.587655, 0,1,0,718.363068,-186.86272,139.587655, 0,1,0,717.89403,-186.86272,177.494989, 0,1,0,736.997652,-186.86272,160.753391, 0,1,0,718.363068,-186.86272,139.587655, 0,1,0,736.997652,-186.86272,160.753391, 0,1,0,732.466031,-186.86272,123.445905, 0,1,0,732.466031,-186.86272,123.445905, 0,1,0,736.997652,-186.86272,160.753391, 0,1,0,744.275028,-186.86272,105.557439, 0,1,0,744.275028,-186.86272,105.557439, 0,1,0,736.997652,-186.86272,160.753391, 0,1,0,753.73925,-186.86272,141.649769, 0,1,0,744.275028,-186.86272,105.557439, 0,1,0,753.73925,-186.86272,141.649769, 0,1,0,753.576386,-186.86272,86.24593, 0,1,0,753.576386,-186.86272,86.24593, 0,1,0,753.73925,-186.86272,141.649769, 0,1,0,760.201807,-186.86272,65.860802, 0,1,0,760.201807,-186.86272,65.860802, 0,1,0,753.73925,-186.86272,141.649769, 0,1,0,767.829302,-186.86272,120.514493, 0,1,0,760.201807,-186.86272,65.860802, 0,1,0,767.829302,-186.86272,120.514493, 0,1,0,764.031409,-186.86272,44.770904, 0,1,0,764.031409,-186.86272,44.770904, 0,1,0,767.829302,-186.86272,120.514493, 0,1,0,764.9959,-186.86272,23.357838, 0,1,0,764.9959,-186.86272,23.357838, 0,1,0,767.829302,-186.86272,120.514493, 0,1,0,793.5709,-186.86272,23.357838, 0,1,0,793.5709,-186.86272,23.357838, 0,1,0,767.829302,-186.86272,120.514493, 0,1,0,779.024141,-186.86272,97.713067, 0,1,0,793.5709,-186.86272,23.357838, 0,1,0,779.024141,-186.86272,97.713067, 0,1,0,787.130168,-186.86272,73.639808, 0,1,0,793.5709,-186.86272,23.357838, 0,1,0,787.130168,-186.86272,73.639808, 0,1,0,792.007202,-186.86272,48.711029, 0,1,0,0.179984,-186.86272,2125.502553, 0,1,0,35.243015,-186.86272,2079.865312, 0,1,0,0.112465,-186.86272,2083.325369, 0,1,0,35.243015,-186.86272,2079.865312, 0,1,0,0.179984,-186.86272,2125.502553, 0,1,0,46.868397,-186.86272,2125.502553, 0,1,0,35.243015,-186.86272,2079.865312, 0,1,0,46.868397,-186.86272,2125.502553, 0,1,0,69.023518,-186.86272,2069.618109, -0.935939,0,-0.352162,166.478463,-280.29408,1972.163164, -0.973856,0,-0.227168,176.725666,-186.86272,1938.382661, -0.986659,0,-0.162803,176.725666,-280.29408,1938.382661, -0.973856,0,-0.227168,176.725666,-186.86272,1938.382661, -0.935939,0,-0.352162,166.478463,-280.29408,1972.163164, -0.910825,0,-0.412792,166.478463,-186.86272,1972.163164, -0.098017,0,0.995185,0.112465,-280.29408,1390.81149, -0.162803,0,0.986659,35.238106,-186.86272,1394.271064, -0.098017,0,0.995185,0.112465,-186.86272,1390.81149, -0.162803,0,0.986659,35.238106,-186.86272,1394.271064, -0.098017,0,0.995185,0.112465,-280.29408,1390.81149, -0.227168,0,0.973856,35.238106,-280.29408,1394.271064, -0.471397,0,0.881921,69.327289,-280.29408,1737.048483, -0.527988,0,0.849252,100.155807,-186.86272,1753.526669, -0.471397,0,0.881921,69.327289,-186.86272,1737.048483, -0.527988,0,0.849252,100.155807,-186.86272,1753.526669, -0.471397,0,0.881921,69.327289,-280.29408,1737.048483, -0.582554,0,0.812792,100.155807,-280.29408,1753.526669, -0.528184,0,-0.84913,100.141826,-280.29408,1720.5641, -0.471701,0,-0.881759,69.327289,-186.86272,1737.048483, -0.582647,0,-0.812725,100.141826,-186.86272,1720.5641, -0.471701,0,-0.881759,69.327289,-186.86272,1737.048483, -0.528184,0,-0.84913,100.141826,-280.29408,1720.5641, -0.471701,0,-0.881759,69.327289,-280.29408,1737.048483, -0.999462,0,0.032813,180.185724,-280.29408,1903.252111, -0.986659,0,0.162803,176.725666,-186.86272,1868.121561, -0.973856,0,0.227168,176.725666,-280.29408,1868.121561, -0.986659,0,0.162803,176.725666,-186.86272,1868.121561, -0.999462,0,0.032813,180.185724,-280.29408,1903.252111, -0.999462,0,-0.032813,180.185724,-186.86272,1903.252111, -0.973856,0,0.227168,176.725666,-280.29408,1868.121561, -0.935939,0,0.352162,166.478463,-186.86272,1834.341059, -0.910825,0,0.412792,166.478463,-280.29408,1834.341059, -0.935939,0,0.352162,166.478463,-186.86272,1834.341059, -0.973856,0,0.227168,176.725666,-280.29408,1868.121561, -0.986659,0,0.162803,176.725666,-186.86272,1868.121561, -0.910825,0,0.412792,166.478463,-280.29408,1834.341059, -0.849252,0,0.527988,149.837908,-186.86272,1803.208769, -0.812792,0,0.582554,149.837908,-280.29408,1803.208769, -0.849252,0,0.527988,149.837908,-186.86272,1803.208769, -0.910825,0,0.412792,166.478463,-280.29408,1834.341059, -0.935939,0,0.352162,166.478463,-186.86272,1834.341059, -0.748179,0.326101,-0.577828,448.282012,-654.795099,180.782109, -0.832687,0.204213,-0.514714,450.471112,-629.324619,189.746946, -0.832687,0.272446,-0.482085,450.47112,-653.402151,178.303588, -0.832687,0.204213,-0.514714,450.471112,-629.324619,189.746946, -0.748179,0.326101,-0.577828,448.282012,-654.795099,180.782109, -0.748179,0.244321,-0.616875,448.282005,-630.366836,192.392159, 0.256672,-0.961442,0.098738,649.884086,-759.522868,28.792076, 0.127347,-0.963706,0.234635,624.955322,-759.578731,57.246228, 0.127347,-0.98669,0.101126,624.955308,-764.385936,29.28956, 0.127347,-0.963706,0.234635,624.955322,-759.578731,57.246228, 0.256672,-0.961442,0.098738,649.884086,-759.522868,28.792076, 0.256673,-0.939019,0.228829,649.8841,-754.828812,56.090715, -0.747451,0.007439,-0.664276,448.281963,-549.007501,206.120647, -0.819027,0,-0.573755,450.471071,-186.86272,203.284158, -0.832126,0.009639,-0.554503,450.471071,-548.95985,203.284158, -0.819027,0,-0.573755,450.471071,-186.86272,203.284158, -0.747451,0.007439,-0.664276,448.281963,-549.007501,206.120647, -0.747409,0,-0.664364,448.281963,-186.86272,206.120647, -0.493603,0.014422,-0.869568,684.332852,-548.325029,165.499615, -0.393115,0,-0.919489,665.021343,-186.86272,174.800973, -0.512963,0,-0.858411,684.332852,-186.86272,165.499615, -0.393115,0,-0.919489,665.021343,-186.86272,174.800973, -0.493603,0.014422,-0.869568,684.332852,-548.325029,165.499615, -0.372406,0.015448,-0.927941,665.021343,-548.48129,174.800973, 0.030866,-0.994332,0.101738,599.602117,-765.945157,29.449075, 0,-0.976801,0.214147,473.717752,-761.101674,57.616782, 0,-0.996871,0.079045,473.717738,-765.945156,29.449145, 0,-0.976801,0.214147,473.717752,-761.101674,57.616782, 0.030866,-0.994332,0.101738,599.602117,-765.945157,29.449075, 0.030867,-0.971194,0.236282,599.602131,-761.101673,57.616723, -0.707841,0.243878,-0.662936,718.363098,-605.920401,130.345733, -0.796291,0.144172,-0.587481,732.466052,-584.996349,120.045264, -0.796291,0.222882,-0.562356,732.466058,-599.989405,115.292483, -0.796291,0.144172,-0.587481,732.466052,-584.996349,120.045264, -0.707841,0.243878,-0.662936,718.363098,-605.920401,130.345733, -0.707841,0.151267,-0.689985,718.363091,-588.820775,135.766294, -1,0,0,46.868397,-280.29408,2499.208064, -1,0,0,46.868397,-186.86272,2125.502553, -1,0,0,46.868397,-280.29408,2125.502553, -1,0,0,46.868397,-186.86272,2125.502553, -1,0,0,46.868397,-280.29408,2499.208064, -1,0,0,46.868397,-186.86272,2499.208064, 0.401003,-0.015387,0.915947,673.957328,-548.951312,202.77988, 0.499663,-0.087405,0.861799,696.75877,-576.445897,190.654684, 0.517753,-0.01437,0.85541,696.758754,-548.76324,191.585041, 0.499663,-0.087405,0.861799,696.75877,-576.445897,190.654684, 0.401003,-0.015387,0.915947,673.957328,-548.951312,202.77988, 0.381503,-0.093498,0.919627,673.957345,-577.587813,201.817466, -0.285905,0.578577,-0.763876,436.335626,-682.017175,172.023802, -0.150375,0.484157,-0.861963,432.838949,-658.912362,188.108094, -0.285905,0.46909,-0.835591,436.335621,-658.528453,187.424994, -0.150375,0.484157,-0.861963,432.838949,-658.912362,188.108094, -0.285905,0.578577,-0.763876,436.335626,-682.017175,172.023802, -0.150375,0.597097,-0.787948,432.838954,-682.490586,172.648217, 0.339245,-0.940167,0.031597,458.22221,-789.952733,23.357838, 0.229024,-0.96833,0.09942,455.006069,-790.65817,31.977188, 0.20592,-0.978017,0.032869,455.006064,-790.947849,23.357838, 0.229024,-0.96833,0.09942,455.006069,-790.65817,31.977188, 0.339245,-0.940167,0.031597,458.22221,-789.952733,23.357838, 0.361665,-0.92741,0.095445,458.222215,-789.666464,31.875739, -0,-0,1,764.9959,-186.86272,23.357838, -0,-0,1,847.545902,56.185652,23.357838, -0,-0,1,806.270901,56.185652,23.357838, -0,-0,1,847.545902,56.185652,23.357838, -0,-0,1,764.9959,-186.86272,23.357838, -0,-0,1,793.5709,-186.86272,23.357838, -0,-0,1,793.5709,-186.86272,23.357838, -0,-0,1,847.545902,-563.749227,23.357838, -0,-0,1,847.545902,56.185652,23.357838, -0,-0,1,847.545902,-563.749227,23.357838, -0,-0,1,793.5709,-186.86272,23.357838, -0,-0,1,793.5709,-545.937124,23.357838, -0,-0,1,847.545902,-563.749227,23.357838, -0,-0,1,793.5709,-545.937124,23.357838, -0,-0,1,793.543158,-559.332109,23.357838, -0,-0,1,847.545902,-563.749227,23.357838, -0,-0,1,793.543158,-559.332109,23.357838, -0,-0,1,793.520758,-561.475389,23.357838, -0,-0,1,847.545902,-563.749227,23.357838, -0,-0,1,793.520758,-561.475389,23.357838, -0,-0,1,793.478048,-563.767069,23.357838, -0,-0,1,847.545902,-563.749227,23.357838, -0,-0,1,793.478048,-563.767069,23.357838, -0,-0,1,843.130723,-608.452917,23.357838, -0,-0,1,843.130723,-608.452917,23.357838, -0,-0,1,793.478048,-563.767069,23.357838, -0,-0,1,793.410423,-566.321374,23.357838, -0,-0,1,843.130723,-608.452917,23.357838, -0,-0,1,793.410423,-566.321374,23.357838, -0,-0,1,793.309566,-569.30368,23.357838, -0,-0,1,843.130723,-608.452917,23.357838, -0,-0,1,793.309566,-569.30368,23.357838, -0,-0,1,793.160542,-572.980425,23.357838, -0,-0,1,843.130723,-608.452917,23.357838, -0,-0,1,793.160542,-572.980425,23.357838, -0,-0,1,792.935095,-577.829952,23.357838, -0,-0,1,843.130723,-608.452917,23.357838, -0,-0,1,792.935095,-577.829952,23.357838, -0,-0,1,792.574093,-584.829111,23.357838, -0,-0,1,843.130723,-608.452917,23.357838, -0,-0,1,792.574093,-584.829111,23.357838, -0,-0,1,792.007216,-595.005501,23.357838, -0,-0,1,843.130723,-608.452917,23.357838, -0,-0,1,792.007216,-595.005501,23.357838, -0,-0,1,791.767078,-596.364536,23.357838, -0,-0,1,843.130723,-608.452917,23.357838, -0,-0,1,791.767078,-596.364536,23.357838, -0,0,1,787.308111,-620.274132,23.357838, -0,-0,1,843.130723,-608.452917,23.357838, -0,0,1,787.308111,-620.274132,23.357838, -0,0,1,838.782877,-630.311015,23.357838, -0,0,1,838.782877,-630.311015,23.357838, -0,0,1,787.308111,-620.274132,23.357838, -0,0,1,787.130183,-621.196954,23.357838, -0,0,1,838.782877,-630.311015,23.357838, -0,0,1,787.130183,-621.196954,23.357838, -0,0,1,779.024156,-645.623514,23.357838, -0,0,1,838.782877,-630.311015,23.357838, -0,0,1,779.024156,-645.623514,23.357838, -0,0,1,827.969621,-662.165838,23.357838, -0,0,1,827.969621,-662.165838,23.357838, -0,0,1,779.024156,-645.623514,23.357838, -0,0,1,767.829317,-668.759577,23.357838, -0,0,1,827.969621,-662.165838,23.357838, -0,0,1,767.829317,-668.759577,23.357838, -0,0,1,813.090986,-692.336727,23.357838, -0,0,1,813.090986,-692.336727,23.357838, -0,0,1,767.829317,-668.759577,23.357838, -0,0,1,753.739265,-690.205036,23.357838, -0,0,1,813.090986,-692.336727,23.357838, -0,0,1,753.739265,-690.205036,23.357838, -0,0,1,739.751559,-706.400475,23.357838, -0,0,1,813.090986,-692.336727,23.357838, -0,0,1,739.751559,-706.400475,23.357838, -0,0,1,794.401548,-720.307447,23.357838, -0,0,1,794.401548,-720.307447,23.357838, -0,0,1,739.751559,-706.400475,23.357838, -0,0,1,736.997667,-709.544681,23.357838, -0,0,1,794.401548,-720.307447,23.357838, -0,0,1,736.997667,-709.544681,23.357838, -0,0,1,717.894045,-726.295731,23.357838, -0,0,1,794.401548,-720.307447,23.357838, -0,0,1,717.894045,-726.295731,23.357838, -0,0,1,772.221089,-745.599413,23.357838, -0,0,1,772.221089,-745.599413,23.357838, -0,0,1,717.894045,-726.295731,23.357838, -0,0,1,696.758768,-740.393738,23.357838, -0,0,1,772.221089,-745.599413,23.357838, -0,0,1,696.758768,-740.393738,23.357838, -0,0,1,673.957342,-751.594898,23.357838, -0,0,1,772.221089,-745.599413,23.357838, -0,0,1,673.957342,-751.594898,23.357838, -0,0,1,746.929123,-767.779872,23.357838, -0,0,1,746.929123,-767.779872,23.357838, -0,0,1,673.957342,-751.594898,23.357838, -0,0,1,649.884083,-759.705502,23.357838, -0,0,1,746.929123,-767.779872,23.357838, -0,0,1,649.884083,-759.705502,23.357838, -0,0,1,624.955304,-764.585289,23.357838, -0,0,1,746.929123,-767.779872,23.357838, -0,0,1,624.955304,-764.585289,23.357838, -0,0,1,599.602113,-766.149871,23.357838, -0,0,1,746.929123,-767.779872,23.357838, -0,0,1,599.602113,-766.149871,23.357838, -0,0,1,473.717734,-766.149872,23.357838, -0,0,1,746.929123,-767.779872,23.357838, -0,0,1,473.717734,-766.149872,23.357838, -0,0,1,473.642035,-769.517334,23.357838, -0,0,1,746.929123,-767.779872,23.357838, -0,0,1,473.642035,-769.517334,23.357838, -0,0,1,718.958402,-786.46931,23.357838, -0,0,1,718.958402,-786.46931,23.357838, -0,0,1,473.642035,-769.517334,23.357838, -0,-0,1,473.101718,-772.841978,23.357838, -0,0,1,718.958402,-786.46931,23.357838, -0,-0,1,473.101718,-772.841978,23.357838, -0,-0,1,472.107164,-776.05994,23.357838, -0,0,1,718.958402,-786.46931,23.357838, -0,-0,1,472.107164,-776.05994,23.357838, -0,0,1,470.677477,-779.109402,23.357838, -0,0,1,718.958402,-786.46931,23.357838, -0,0,1,470.677477,-779.109402,23.357838, -0,0,1,468.840122,-781.931785,23.357838, -0,0,1,718.958402,-786.46931,23.357838, -0,0,1,468.840122,-781.931785,23.357838, -0,0,1,466.630394,-784.472872,23.357838, -0,0,1,718.958402,-786.46931,23.357838, -0,0,1,466.630394,-784.472872,23.357838, -0,0,1,464.090742,-786.683847,23.357838, -0,0,1,718.958402,-786.46931,23.357838, -0,0,1,464.090742,-786.683847,23.357838, -0,0,1,688.787514,-801.347945,23.357838, -0,0,1,688.787514,-801.347945,23.357838, -0,0,1,464.090742,-786.683847,23.357838, -0,0,1,461.269951,-788.52224,23.357838, -0,0,1,688.787514,-801.347945,23.357838, -0,0,1,461.269951,-788.52224,23.357838, -0,0,1,458.22221,-789.952733,23.357838, -0,0,1,688.787514,-801.347945,23.357838, -0,0,1,458.22221,-789.952733,23.357838, -0,0,1,455.006064,-790.947849,23.357838, -0,0,1,688.787514,-801.347945,23.357838, -0,0,1,455.006064,-790.947849,23.357838, -0,0,1,451.683295,-791.488471,23.357838, -0,0,1,688.787514,-801.347945,23.357838, -0,0,1,451.683295,-791.488471,23.357838, -0,0,1,448.317734,-791.564213,23.357838, -0,0,1,688.787514,-801.347945,23.357838, -0,0,1,448.317734,-791.564213,23.357838, 0,0,1,0.00089,-791.564218,23.357838, -0,0,1,688.787514,-801.347945,23.357838, 0,0,1,0.00089,-791.564218,23.357838, 0,0,1,0.000468,-820.924227,23.357838, -0,0,1,688.787514,-801.347945,23.357838, 0,0,1,0.000468,-820.924227,23.357838, 0,0,1,656.93269,-812.161201,23.357838, 0,0,1,656.93269,-812.161201,23.357838, 0,0,1,0.000468,-820.924227,23.357838, 0,0,1,623.938976,-818.724059,23.357838, 0,0,1,623.938976,-818.724059,23.357838, 0,0,1,0.000468,-820.924227,23.357838, 0,0,1,590.370902,-820.924227,23.357838, 0,-0.509694,0.860356,0.000057,-672.771767,212.768417, 0.011271,-0.604116,0.796817,448.317783,-699.580941,195.189934, 0.011271,-0.489901,0.871705,448.317778,-672.771628,212.768386, 0.011271,-0.604116,0.796817,448.317783,-699.580941,195.189934, 0,-0.509694,0.860356,0.000057,-672.771767,212.768417, 0,-0.622177,0.782877,0.000063,-699.581047,195.189986, -0.649152,0.262621,-0.713885,445.721732,-631.287828,194.729696, -0.741547,0.152765,-0.653277,448.281994,-604.584377,200.565168, -0.748179,0.244321,-0.616875,448.282005,-630.366836,192.392159, -0.741547,0.152765,-0.653277,448.281994,-604.584377,200.565168, -0.649152,0.262621,-0.713885,445.721732,-631.287828,194.729696, -0.638578,0.17117,-0.75028,445.721721,-605.178251,203.006401, -0.415875,0.548909,-0.725084,439.690621,-681.255534,171.01922, -0.285905,0.46909,-0.835591,436.335621,-658.528453,187.424994, -0.415875,0.444984,-0.793119,439.690616,-657.910808,186.325996, -0.285905,0.46909,-0.835591,436.335621,-658.528453,187.424994, -0.415875,0.548909,-0.725084,439.690621,-681.255534,171.01922, -0.285905,0.578577,-0.763876,436.335626,-682.017175,172.023802, 0.973657,-0.212704,0.08215,473.101749,-758.702385,87.31918, 0.932875,-0.350339,0.083707,472.107183,-770.747999,59.963422, 0.973657,-0.221914,0.0524,473.101737,-767.615679,59.201429, 0.932875,-0.350339,0.083707,472.107183,-770.747999,59.963422, 0.973657,-0.212704,0.08215,473.101749,-758.702385,87.31918, 0.932875,-0.335664,0.130666,472.107195,-761.701654,88.500895, -0.649152,0.525457,-0.549997,445.721747,-699.576473,149.953886, -0.748179,0.401798,-0.528002,448.282017,-677.413444,165.951609, -0.748179,0.469999,-0.468325,448.282019,-697.799917,148.177329, -0.748179,0.401798,-0.528002,448.282017,-677.413444,165.951609, -0.649152,0.525457,-0.549997,445.721747,-699.576473,149.953886, -0.649152,0.44561,-0.616469,445.721745,-678.931346,167.953679, 0.995804,-0.065815,0.063588,473.64208,-708.127668,158.505081, 0.973657,-0.182625,0.136528,473.101763,-729.866936,138.627118, 0.995804,-0.073866,0.054027,473.642079,-727.212939,136.614949, 0.973657,-0.182625,0.136528,473.101763,-729.866936,138.627118, 0.995804,-0.065815,0.063588,473.64208,-708.127668,158.505081, 0.973657,-0.162317,0.16014,473.101765,-710.482719,160.860131, -0.9698,0.148537,-0.193454,760.201828,-592.476195,53.921748, -0.993727,0.056116,-0.096737,764.031424,-575.55911,39.794854, -0.993727,0.068775,-0.088188,764.031425,-579.704781,37.076602, -0.993727,0.056116,-0.096737,764.031424,-575.55911,39.794854, -0.9698,0.148537,-0.193454,760.201828,-592.476195,53.921748, -0.9698,0.12079,-0.21189,760.201826,-585.915972,58.223185, -0.870211,0.349319,-0.347431,744.275059,-626.524536,76.901948, -0.928388,0.225646,-0.295263,753.576412,-604.820821,70.203974, -0.928388,0.263776,-0.261761,753.576413,-612.83728,63.214693, -0.928388,0.225646,-0.295263,753.576412,-604.820821,70.203974, -0.870211,0.349319,-0.347431,744.275059,-626.524536,76.901948, -0.870211,0.298718,-0.391791,744.275058,-616.515297,85.628667, -0.869747,0.008617,-0.493422,744.275028,-547.318028,105.557439, -0.919489,0,-0.393115,753.576386,-186.86272,86.24593, -0.928106,0.006604,-0.372257,753.576386,-546.993607,86.24593, -0.919489,0,-0.393115,753.576386,-186.86272,86.24593, -0.869747,0.008617,-0.493422,744.275028,-547.318028,105.557439, -0.858411,0,-0.512963,744.275028,-186.86272,105.557439, -0.373111,0.218748,-0.901631,665.02137,-597.163793,170.061811, -0.244971,0.09829,-0.964535,644.636231,-575.409716,180.525125, -0.373111,0.093846,-0.923028,665.021359,-574.733894,173.918677, -0.244971,0.09829,-0.964535,644.636231,-575.409716,180.525125, -0.373111,0.218748,-0.901631,665.02137,-597.163793,170.061811, -0.244971,0.228806,-0.942145,644.636243,-598.733545,176.514546, 0.991932,-0.031409,0.122818,792.007213,-567.289597,47.258281, 0.966794,-0.095028,0.237232,787.130187,-581.689044,68.845, 0.991932,-0.047852,0.117393,792.007216,-572.529419,45.597264, 0.966794,-0.095028,0.237232,787.130187,-581.689044,68.845, 0.991932,-0.031409,0.122818,792.007213,-567.289597,47.258281, 0.966794,-0.061815,0.247969,787.130183,-573.195905,71.537315, 0.091928,-0.101189,0.990611,451.683301,-581.654891,241.574352, 0.229025,-0.229739,0.945922,455.006085,-613.111378,235.617099, 0.229024,-0.098699,0.968404,455.006069,-581.599776,241.035583, 0.229025,-0.229739,0.945922,455.006085,-613.111378,235.617099, 0.091928,-0.101189,0.990611,451.683301,-581.654891,241.574352, 0.091928,-0.235232,0.967582,451.683317,-613.239395,236.143333, 0.01127,-0.101755,0.994746,448.317739,-581.662615,241.649835, 0.091928,-0.235232,0.967582,451.683317,-613.239395,236.143333, 0.091928,-0.101189,0.990611,451.683301,-581.654891,241.574352, 0.091928,-0.235232,0.967582,451.683317,-613.239395,236.143333, 0.01127,-0.101755,0.994746,448.317739,-581.662615,241.649835, 0.01127,-0.236356,0.971601,448.317755,-613.257332,236.21706, -0.494423,0.204724,-0.844769,684.332878,-594.960039,161.002883, -0.373111,0.093846,-0.923028,665.021359,-574.733894,173.918677, -0.494423,0.087701,-0.864786,684.332867,-573.78512,164.643953, -0.373111,0.093846,-0.923028,665.021359,-574.733894,173.918677, -0.494423,0.204724,-0.844769,684.332878,-594.960039,161.002883, -0.373111,0.218748,-0.901631,665.02137,-597.163793,170.061811, 0,-0.124431,0.992228,0.000019,-581.662862,241.649831, 0.01127,-0.236356,0.971601,448.317755,-613.257332,236.21706, 0.01127,-0.101755,0.994746,448.317739,-581.662615,241.649835, 0.01127,-0.236356,0.971601,448.317755,-613.257332,236.21706, 0,-0.124431,0.992228,0.000019,-581.662862,241.649831, 0,-0.258478,0.966017,0.000035,-613.257542,236.217062, 0.995804,-0.023158,0.088537,473.642053,-608.036762,214.756927, 0.973657,-0.085015,0.211575,473.101749,-636.941768,209.079797, 0.995804,-0.035007,0.084556,473.642065,-635.720877,205.981096, 0.973657,-0.085015,0.211575,473.101749,-636.941768,209.079797, 0.995804,-0.023158,0.088537,473.642053,-608.036762,214.756927, 0.973657,-0.055392,0.221186,473.101737,-608.824017,217.993091, 0.973657,-0.138981,0.180764,473.101763,-688.249706,180.244348, 0.932875,-0.255741,0.253655,472.107211,-712.762199,163.139612, 0.973657,-0.162317,0.16014,473.101765,-710.482719,160.860131, 0.932875,-0.255741,0.253655,472.107211,-712.762199,163.139612, 0.973657,-0.138981,0.180764,473.101763,-688.249706,180.244348, 0.932875,-0.218791,0.286137,472.107209,-690.197308,182.813182, 0.932875,-0.218791,0.286137,472.107209,-690.197308,182.813182, 0.874212,-0.344308,0.342352,470.677525,-714.922322,165.299734, 0.932875,-0.255741,0.253655,472.107211,-712.762199,163.139612, 0.874212,-0.344308,0.342352,470.677525,-714.922322,165.299734, 0.932875,-0.218791,0.286137,472.107209,-690.197308,182.813182, 0.874212,-0.294445,0.386077,470.677524,-692.04293,185.247507, -0.952384,0.113168,-0.283121,453.575559,-626.95854,183.741681, -0.985345,0.041831,-0.165366,454.431253,-601.562294,188.142314, -0.985345,0.063975,-0.158123,454.431263,-625.680129,180.496989, -0.985345,0.041831,-0.165366,454.431253,-601.562294,188.142314, -0.952384,0.113168,-0.283121,453.575559,-626.95854,183.741681, -0.952384,0.073533,-0.295901,453.575549,-602.386639,191.530944, 0.01127,-0.236356,0.971601,448.317755,-613.257332,236.21706, 0.091928,-0.364886,0.926503,451.68333,-643.789223,226.459074, 0.091928,-0.235232,0.967582,451.683317,-613.239395,236.143333, 0.091928,-0.364886,0.926503,451.68333,-643.789223,226.459074, 0.01127,-0.236356,0.971601,448.317755,-613.257332,236.21706, 0.011271,-0.366548,0.930331,448.317768,-643.817038,226.529669, 0.609101,-0.186578,0.770833,717.894058,-597.802054,172.685609, 0.707841,-0.243878,0.662936,736.997686,-613.697356,150.084182, 0.707841,-0.151267,0.689985,736.997677,-593.835505,156.380365, 0.707841,-0.243878,0.662936,736.997686,-613.697356,150.084182, 0.609101,-0.186578,0.770833,717.894058,-597.802054,172.685609, 0.609101,-0.289877,0.738219,717.894067,-619.848758,165.69683, -0.040706,0.236142,-0.970866,429.267752,-606.639691,209.013907, -0,0.124431,-0.992228,0.016265,-578.81381,213.79866, -0.040706,0.101643,-0.993988,429.267738,-578.813573,213.798664, -0,0.124431,-0.992228,0.016265,-578.81381,213.79866, -0.040706,0.236142,-0.970866,429.267752,-606.639691,209.013907, -0,0.258478,-0.966017,0.016279,-606.639892,209.013909, -0.606705,0.186995,-0.77262,702.221343,-592.162158,149.501677, -0.494423,0.087701,-0.864786,684.332867,-573.78512,164.643953, -0.606705,0.079969,-0.790894,702.221333,-572.580561,152.868772, -0.494423,0.087701,-0.864786,684.332867,-573.78512,164.643953, -0.606705,0.186995,-0.77262,702.221343,-592.162158,149.501677, -0.494423,0.204724,-0.844769,684.332878,-594.960039,161.002883, -0.150374,0.233455,-0.96067,432.83893,-606.570796,208.730707, -0.040706,0.101643,-0.993988,429.267738,-578.813573,213.798664, -0.150374,0.100371,-0.983521,432.838915,-578.78391,213.508718, -0.040706,0.101643,-0.993988,429.267738,-578.813573,213.798664, -0.150374,0.233455,-0.96067,432.83893,-606.570796,208.730707, -0.040706,0.236142,-0.970866,429.267752,-606.639691,209.013907, -0.285905,0.226068,-0.93121,436.335601,-606.385575,207.969324, -0.150374,0.100371,-0.983521,432.838915,-578.78391,213.508718, -0.285905,0.097067,-0.953329,436.335587,-578.704167,212.729198, -0.150374,0.100371,-0.983521,432.838915,-578.78391,213.508718, -0.285905,0.226068,-0.93121,436.335601,-606.385575,207.969324, -0.150374,0.233455,-0.96067,432.83893,-606.570796,208.730707, -0.707841,0.151267,-0.689985,718.363091,-588.820775,135.766294, -0.606705,0.079969,-0.790894,702.221333,-572.580561,152.868772, -0.707841,0.055835,-0.704162,718.363082,-571.142012,138.806193, -0.606705,0.079969,-0.790894,702.221333,-572.580561,152.868772, -0.707841,0.151267,-0.689985,718.363091,-588.820775,135.766294, -0.606705,0.186995,-0.77262,702.221343,-592.162158,149.501677, -0.993727,0.098232,-0.053457,764.031424,-589.417442,25.936523, -0.998991,0.036391,-0.026305,764.531578,-577.829947,23.357838, -0.998992,0.039135,-0.021994,764.267941,-584.829097,23.357838, -0.998991,0.036391,-0.026305,764.531578,-577.829947,23.357838, -0.993727,0.098232,-0.053457,764.031424,-589.417442,25.936523, -0.993727,0.090031,-0.066344,764.031425,-586.699189,30.082194, 0.991932,-0.111235,0.060808,792.007217,-592.860317,27.871437, 0.988867,-0.134398,0.063875,792.007216,-595.005501,23.357838, 0.998112,-0.05354,0.03009,792.574093,-584.829111,23.357838, 0.361665,-0.812468,0.457269,458.222253,-760.983658,122.358117, 0.229025,-0.775467,0.588387,455.006113,-744.32049,149.585311, 0.229025,-0.848411,0.477229,455.006107,-761.852699,122.846525, 0.229025,-0.775467,0.588387,455.006113,-744.32049,149.585311, 0.361665,-0.812468,0.457269,458.222253,-760.983658,122.358117, 0.361665,-0.742579,0.563715,458.222259,-743.526109,148.983038, 0.229025,-0.848411,0.477229,455.006107,-761.852699,122.846525, 0.091928,-0.793404,0.601714,451.683345,-744.752058,149.912511, 0.091928,-0.867996,0.487987,451.683339,-762.324827,123.111865, 0.091928,-0.793404,0.601714,451.683345,-744.752058,149.912511, 0.229025,-0.848411,0.477229,455.006107,-761.852699,122.846525, 0.229025,-0.775467,0.588387,455.006113,-744.32049,149.585311, 0.091928,-0.867996,0.487987,451.683339,-762.324827,123.111865, 0.011271,-0.796813,0.60412,448.317783,-744.812521,149.958353, 0.011271,-0.871702,0.489906,448.317778,-762.390973,123.149041, 0.011271,-0.796813,0.60412,448.317783,-744.812521,149.958353, 0.091928,-0.867996,0.487987,451.683339,-762.324827,123.111865, 0.091928,-0.793404,0.601714,451.683345,-744.752058,149.912511, 0.011271,-0.871702,0.489906,448.317778,-762.390973,123.149041, 0,-0.81044,0.585821,0.000063,-744.812573,149.958459, 0,-0.882708,0.469921,0.000057,-762.391004,123.149179, 0,-0.81044,0.585821,0.000063,-744.812573,149.958459, 0.011271,-0.871702,0.489906,448.317778,-762.390973,123.149041, 0.011271,-0.796813,0.60412,448.317783,-744.812521,149.958353, 0.506559,-0.014482,0.862083,461.269937,-549.571376,239.686382, 0.603443,-0.080198,0.793363,464.090747,-581.165077,236.78619, 0.620913,-0.013167,0.783769,464.090728,-549.540509,237.849027, 0.603443,-0.080198,0.793363,464.090747,-581.165077,236.78619, 0.506559,-0.014482,0.862083,461.269937,-549.571376,239.686382, 0.487278,-0.088099,0.868791,461.269956,-581.352493,238.618284, -0.022557,0.706919,-0.706935,602.133302,-683.695423,134.072836, -0,0.622177,-0.782877,454.66777,-665.3625,150.056742, -0.022557,0.603993,-0.79667,602.133301,-665.362465,150.056725, -0,0.622177,-0.782877,454.66777,-665.3625,150.056742, -0.022557,0.706919,-0.706935,602.133302,-683.695423,134.072836, -0,0.723053,-0.690793,454.667771,-683.695448,134.072861, -0.112343,0.702509,-0.702752,623.546368,-683.011825,133.389238, -0.022557,0.603993,-0.79667,602.133301,-665.362465,150.056725, -0.112343,0.600194,-0.791925,623.546367,-664.778393,149.286355, -0.022557,0.603993,-0.79667,602.133301,-665.362465,150.056725, -0.112343,0.702509,-0.702752,623.546368,-683.011825,133.389238, -0.022557,0.706919,-0.706935,602.133302,-683.695423,134.072836, -0.244971,0.685296,-0.685827,644.636265,-680.297547,130.67496, -0.112343,0.600194,-0.791925,623.546367,-664.778393,149.286355, -0.244971,0.585448,-0.772813,644.636264,-662.459295,146.227532, -0.112343,0.600194,-0.791925,623.546367,-664.778393,149.286355, -0.244971,0.685296,-0.685827,644.636265,-680.297547,130.67496, -0.112343,0.702509,-0.702752,623.546368,-683.011825,133.389238, -0.832687,0.13217,-0.53774,450.471101,-603.912334,197.80261, -0.901181,0.045526,-0.431045,452.246978,-577.321949,199.217285, -0.901181,0.103838,-0.42082,452.246991,-603.175034,194.771794, -0.901181,0.045526,-0.431045,452.246978,-577.321949,199.217285, -0.832687,0.13217,-0.53774,450.471101,-603.912334,197.80261, -0.832687,0.057661,-0.550734,450.471088,-577.639374,202.320298, 0.995785,-0,0.091715,473.642021,-186.86272,220.6922, 0.973547,-0.004216,0.228449,473.101704,-549.308105,224.014969, 0.994417,-0.002312,0.105501,473.642021,-549.252285,220.6922, 0.973547,-0.004216,0.228449,473.101704,-549.308105,224.014969, 0.995785,-0,0.091715,473.642021,-186.86272,220.6922, 0.967989,-0,0.250993,473.101704,-186.86272,224.014969, 0.873731,0,0.48641,470.677463,-186.86272,230.278856, 0.928983,-0.005506,0.370082,472.10715,-549.362134,227.231115, 0.932593,0,0.360931,472.10715,-186.86272,227.231115, 0.928983,-0.005506,0.370082,472.10715,-549.362134,227.231115, 0.873731,0,0.48641,470.677463,-186.86272,230.278856, 0.866918,-0.01021,0.498346,470.677463,-549.413334,230.278856, 0.873731,0,0.48641,470.677463,-186.86272,230.278856, 0.792107,-0.00894,0.610317,468.840108,-549.460722,233.099647, 0.866918,-0.01021,0.498346,470.677463,-549.413334,230.278856, 0.792107,-0.00894,0.610317,468.840108,-549.460722,233.099647, 0.873731,0,0.48641,470.677463,-186.86272,230.278856, 0.798084,0,0.602546,468.840108,-186.86272,233.099647, 0.707107,0,0.707107,466.63038,-186.86272,235.639299, 0.792107,-0.00894,0.610317,468.840108,-549.460722,233.099647, 0.798084,0,0.602546,468.840108,-186.86272,233.099647, 0.792107,-0.00894,0.610317,468.840108,-549.460722,233.099647, 0.707107,0,0.707107,466.63038,-186.86272,235.639299, 0.707157,-0.011876,0.706957,466.63038,-549.503387,235.639299, -0.415875,0.332758,-0.846357,439.690608,-632.698039,198.308899, -0.285905,0.226068,-0.93121,436.335601,-606.385575,207.969324, -0.415875,0.214324,-0.883806,439.690597,-606.087584,206.744382, -0.285905,0.226068,-0.93121,436.335601,-606.385575,207.969324, -0.415875,0.332758,-0.846357,439.690608,-632.698039,198.308899, -0.285905,0.350852,-0.891718,436.335613,-633.160168,199.481809, -0.796291,0.222882,-0.562356,732.466058,-599.989405,115.292483, -0.870211,0.117753,-0.4784,744.275047,-580.75808,102.623043, -0.870211,0.181845,-0.457892,744.275052,-593.41661,98.610304, -0.870211,0.117753,-0.4784,744.275047,-580.75808,102.623043, -0.796291,0.222882,-0.562356,732.466058,-599.989405,115.292483, -0.796291,0.144172,-0.587481,732.466052,-584.996349,120.045264, 0.932875,-0.133411,0.334583,472.107195,-638.123482,212.079066, 0.874212,-0.239089,0.422598,470.677518,-666.658744,201.891525, 0.932875,-0.177759,0.313282,472.107204,-665.162054,199.228412, 0.874212,-0.239089,0.422598,470.677518,-666.658744,201.891525, 0.932875,-0.133411,0.334583,472.107195,-638.123482,212.079066, 0.874212,-0.179273,0.451236,470.677509,-639.24332,214.921287, 0,-0.387702,0.921785,0.000048,-643.817211,226.529683, 0.011271,-0.489901,0.871705,448.317778,-672.771628,212.768386, 0.011271,-0.366548,0.930331,448.317768,-643.817038,226.529669, 0.011271,-0.489901,0.871705,448.317778,-672.771628,212.768386, 0,-0.387702,0.921785,0.000048,-643.817211,226.529683, 0,-0.509694,0.860356,0.000057,-672.771767,212.768417, -0.285905,0.46909,-0.835591,436.335621,-658.528453,187.424994, -0.150375,0.362184,-0.919897,432.838941,-633.447412,200.210852, -0.285905,0.350852,-0.891718,436.335613,-633.160168,199.481809, -0.150375,0.362184,-0.919897,432.838941,-633.447412,200.210852, -0.285905,0.46909,-0.835591,436.335621,-658.528453,187.424994, -0.150375,0.484157,-0.861963,432.838949,-658.912362,188.108094, -0.415875,0.444984,-0.793119,439.690616,-657.910808,186.325996, -0.285905,0.350852,-0.891718,436.335613,-633.160168,199.481809, -0.415875,0.332758,-0.846357,439.690608,-632.698039,198.308899, -0.285905,0.350852,-0.891718,436.335613,-633.160168,199.481809, -0.415875,0.444984,-0.793119,439.690616,-657.910808,186.325996, -0.285905,0.46909,-0.835591,436.335621,-658.528453,187.424994, -0.537771,0.412318,-0.735388,442.839485,-657.07129,184.832214, -0.415875,0.332758,-0.846357,439.690608,-632.698039,198.308899, -0.537771,0.308263,-0.784714,442.839477,-632.069904,196.714653, -0.415875,0.332758,-0.846357,439.690608,-632.698039,198.308899, -0.537771,0.412318,-0.735388,442.839485,-657.07129,184.832214, -0.415875,0.444984,-0.793119,439.690616,-657.910808,186.325996, -0.649152,0.35745,-0.67144,445.72174,-656.026027,182.972343, -0.537771,0.308263,-0.784714,442.839477,-632.069904,196.714653, -0.649152,0.262621,-0.713885,445.721732,-631.287828,194.729696, -0.537771,0.308263,-0.784714,442.839477,-632.069904,196.714653, -0.649152,0.35745,-0.67144,445.72174,-656.026027,182.972343, -0.537771,0.412318,-0.735388,442.839485,-657.07129,184.832214, -0.952384,0.150692,-0.265059,453.575567,-650.239827,172.676755, -0.985345,0.063975,-0.158123,454.431263,-625.680129,180.496989, -0.985345,0.084925,-0.14793,454.431271,-648.531199,169.636534, -0.985345,0.063975,-0.158123,454.431263,-625.680129,180.496989, -0.952384,0.150692,-0.265059,453.575567,-650.239827,172.676755, -0.952384,0.113168,-0.283121,453.575559,-626.95854,183.741681, -0.90081,0.007643,-0.434147,452.246961,-548.907571,200.172234, -0.94485,0,-0.327505,453.575519,-186.86272,196.844653, -0.95219,0.005502,-0.305456,453.575519,-548.85167,196.844653, -0.94485,0,-0.327505,453.575519,-186.86272,196.844653, -0.90081,0.007643,-0.434147,452.246961,-548.907571,200.172234, -0.890491,0,-0.455,452.246961,-186.86272,200.172234, -0.95219,0.005502,-0.305456,453.575519,-548.85167,196.844653, -0.981057,0,-0.193718,454.431224,-186.86272,193.365338, -0.985283,0.003254,-0.170901,454.431224,-548.79322,193.365338, -0.981057,0,-0.193718,454.431224,-186.86272,193.365338, -0.95219,0.005502,-0.305456,453.575519,-548.85167,196.844653, -0.94485,0,-0.327505,453.575519,-186.86272,196.844653, -0.985283,0.003254,-0.170901,454.431224,-548.79322,193.365338, -0.998419,0,-0.05621,454.797637,-186.86272,189.801127, -0.999453,0.000944,-0.033066,454.797637,-548.733344,189.801127, -0.998419,0,-0.05621,454.797637,-186.86272,189.801127, -0.985283,0.003254,-0.170901,454.431224,-548.79322,193.365338, -0.981057,0,-0.193718,454.431224,-186.86272,193.365338, -0.999453,0.000944,-0.033066,454.797637,-548.733344,189.801127, -0.999342,-0,0.036259,454.66772,-186.86272,186.220487, -0.999343,-0.000812,0.036246,454.66772,-548.673192,186.220487, -0.999342,-0,0.036259,454.66772,-186.86272,186.220487, -0.999453,0.000944,-0.033066,454.797637,-548.733344,189.801127, -0.998419,0,-0.05621,454.797637,-186.86272,189.801127, -0,1,-0,56.126785,-233.5784,1315.222366, -0,1,-0,18.722685,-233.5784,268.426375, 0,1,-0,18.722685,-233.5784,1315.222366, -0,1,-0,18.722685,-233.5784,268.426375, -0,1,-0,56.126785,-233.5784,1315.222366, -0,1,0,56.126785,-233.5784,268.426375, 0,0,1,18.722685,-186.86272,268.426375, 0,0,1,56.126785,-233.5784,268.426375, 0,0,1,56.126785,-186.86272,268.426375, 0,0,1,56.126785,-233.5784,268.426375, 0,0,1,18.722685,-186.86272,268.426375, 0,0,1,18.722685,-233.5784,268.426375, 1,0,-0,18.722685,-186.86272,1315.222366, 1,0,-0,18.722685,-233.5784,268.426375, 1,0,0,18.722685,-186.86272,268.426375, 1,0,-0,18.722685,-233.5784,268.426375, 1,0,-0,18.722685,-186.86272,1315.222366, 1,0,-0,18.722685,-233.5784,1315.222366, 0,0,-1,56.126785,-233.5784,1315.222366, 0,0,-1,18.722685,-186.86272,1315.222366, 0,0,-1,56.126785,-186.86272,1315.222366, 0,0,-1,18.722685,-186.86272,1315.222366, 0,0,-1,56.126785,-233.5784,1315.222366, 0,0,-1,18.722685,-233.5784,1315.222366, -1,-0,0,56.126785,-233.5784,1315.222366, -1,-0,0,56.126785,-186.86272,268.426375, -1,-0,0,56.126785,-233.5784,268.426375, -1,-0,0,56.126785,-186.86272,268.426375, -1,-0,0,56.126785,-233.5784,1315.222366, -1,-0,0,56.126785,-186.86272,1315.222366 }; static const struct gllist robot_leg_half_frame = { GL_N3F_V3F, GL_TRIANGLES, 5190, robot_leg_half_data, 0 }; const struct gllist *robot_leg_half = &robot_leg_half_frame; static const float robot_rotator_half_data[] = { 0.707107,0,-0.707106,123.957535,-140.14704,1438.610184, 0.812792,0,-0.582553,145.758595,-327.00976,1465.174884, 0.707107,0,-0.707106,123.957535,-327.00976,1438.610184, 0.812792,0,-0.582553,145.758595,-327.00976,1465.174884, 0.707107,0,-0.707106,123.957535,-140.14704,1438.610184, 0.849252,0,-0.527988,145.758595,-140.14704,1465.174884, -0.812792,-0,-0.582554,-145.758282,-327.00976,1465.174712, -0.707106,-0,-0.707107,-123.957191,-140.14704,1438.610037, -0.707106,-0,-0.707107,-123.957191,-327.00976,1438.610037, -0.707106,-0,-0.707107,-123.957191,-140.14704,1438.610037, -0.812792,-0,-0.582554,-145.758282,-327.00976,1465.174712, -0.849251,0,-0.527989,-145.758282,-140.14704,1465.174712, 0.227167,0,0.973856,34.199757,-140.14704,1734.501295, 0.352162,0,0.935939,67.085244,-327.00976,1724.525612, 0.412792,0,0.910825,67.085244,-140.14704,1724.525612, 0.352162,0,0.935939,67.085244,-327.00976,1724.525612, 0.227167,0,0.973856,34.199757,-140.14704,1734.501295, 0.162802,0,0.986659,34.199757,-327.00976,1734.501295, -0.227167,0,-0.973856,-34.199559,-327.00976,1390.633652, -0.352162,0,-0.935939,-67.085047,-140.14704,1400.609334, -0.162802,0,-0.986659,-34.199559,-140.14704,1390.633652, -0.352162,0,-0.935939,-67.085047,-140.14704,1400.609334, -0.227167,0,-0.973856,-34.199559,-327.00976,1390.633652, -0.412792,-0,-0.910825,-67.085047,-327.00976,1400.609334, 0.849252,0,-0.527988,145.758595,-140.14704,1465.174884, 0.910825,0,-0.412792,161.958238,-327.00976,1495.482328, 0.812792,0,-0.582553,145.758595,-327.00976,1465.174884, 0.910825,0,-0.412792,161.958238,-327.00976,1495.482328, 0.849252,0,-0.527988,145.758595,-140.14704,1465.174884, 0.935939,0,-0.352162,161.958238,-140.14704,1495.482328, 0.032812,0,0.999462,-0.000005,-140.14704,1737.869657, 0.162802,0,0.986659,34.199757,-327.00976,1734.501295, 0.227167,0,0.973856,34.199757,-140.14704,1734.501295, 0.162802,0,0.986659,34.199757,-327.00976,1734.501295, 0.032812,0,0.999462,-0.000005,-140.14704,1737.869657, -0.032813,-0,0.999461,-0.000005,-327.00976,1737.869657, 0.973856,0,0.227168,171.93388,-140.14704,1596.767334, 0.935939,0,0.352163,161.958159,-327.00976,1629.65281, 0.986659,0,0.162804,171.93388,-327.00976,1596.767334, 0.935939,0,0.352163,161.958159,-327.00976,1629.65281, 0.973856,0,0.227168,171.93388,-140.14704,1596.767334, 0.910825,0,0.412793,161.958159,-140.14704,1629.65281, -0.412792,-0,-0.910825,-67.085047,-327.00976,1400.609334, -0.527988,-0,-0.849252,-97.39249,-140.14704,1416.808977, -0.352162,0,-0.935939,-67.085047,-140.14704,1400.609334, -0.527988,-0,-0.849252,-97.39249,-140.14704,1416.808977, -0.412792,-0,-0.910825,-67.085047,-327.00976,1400.609334, -0.582553,-0,-0.812792,-97.39249,-327.00976,1416.808977, 0.999461,0,0.032813,175.302282,-140.14704,1562.567577, 0.986659,0,0.162804,171.93388,-327.00976,1596.767334, 0.999462,0,-0.032812,175.302282,-327.00976,1562.567577, 0.986659,0,0.162804,171.93388,-327.00976,1596.767334, 0.999461,0,0.032813,175.302282,-140.14704,1562.567577, 0.973856,0,0.227168,171.93388,-140.14704,1596.767334, -0.707107,-0,0.707106,-123.957337,-327.00976,1686.524763, -0.812792,-0,0.582553,-145.758398,-140.14704,1659.960062, -0.849252,-0,0.527988,-145.758398,-327.00976,1659.960062, -0.812792,-0,0.582553,-145.758398,-140.14704,1659.960062, -0.707107,-0,0.707106,-123.957337,-327.00976,1686.524763, -0.707107,-0,0.707106,-123.957337,-140.14704,1686.524763, 0.910825,0,0.412793,161.958159,-140.14704,1629.65281, 0.849251,0,0.527989,145.75848,-327.00976,1659.960235, 0.935939,0,0.352163,161.958159,-327.00976,1629.65281, 0.849251,0,0.527989,145.75848,-327.00976,1659.960235, 0.910825,0,0.412793,161.958159,-140.14704,1629.65281, 0.812792,-0,0.582554,145.75848,-140.14704,1659.960235, -0.582553,-0,-0.812792,-97.39249,-327.00976,1416.808977, -0.707106,-0,-0.707107,-123.957191,-140.14704,1438.610037, -0.527988,-0,-0.849252,-97.39249,-140.14704,1416.808977, -0.707106,-0,-0.707107,-123.957191,-140.14704,1438.610037, -0.582553,-0,-0.812792,-97.39249,-327.00976,1416.808977, -0.707106,-0,-0.707107,-123.957191,-327.00976,1438.610037, -0.935939,-0,0.352162,-161.95804,-327.00976,1629.652619, -0.973856,-0,0.227167,-171.933723,-140.14704,1596.767131, -0.986659,-0,0.162802,-171.933723,-327.00976,1596.767131, -0.973856,-0,0.227167,-171.933723,-140.14704,1596.767131, -0.935939,-0,0.352162,-161.95804,-327.00976,1629.652619, -0.910825,-0,0.412792,-161.95804,-140.14704,1629.652619, 0.412792,0,0.910825,67.085244,-140.14704,1724.525612, 0.527988,0,0.849252,97.392688,-327.00976,1708.32597, 0.582553,-0,0.812792,97.392688,-140.14704,1708.32597, 0.527988,0,0.849252,97.392688,-327.00976,1708.32597, 0.412792,0,0.910825,67.085244,-140.14704,1724.525612, 0.352162,0,0.935939,67.085244,-327.00976,1724.525612, -0.352163,-0,0.935939,-67.085238,-140.14704,1724.525533, -0.227168,-0,0.973856,-34.199762,-327.00976,1734.501255, -0.162804,-0,0.986659,-34.199762,-140.14704,1734.501255, -0.227168,-0,0.973856,-34.199762,-327.00976,1734.501255, -0.352163,-0,0.935939,-67.085238,-140.14704,1724.525533, -0.412793,-0,0.910825,-67.085238,-327.00976,1724.525533, 0.162804,0,-0.986659,34.19996,-327.00976,1390.633692, 0.032813,0,-0.999461,0.000202,-140.14704,1387.26529, 0.227168,0,-0.973856,34.19996,-140.14704,1390.633692, 0.032813,0,-0.999461,0.000202,-140.14704,1387.26529, 0.162804,0,-0.986659,34.19996,-327.00976,1390.633692, -0.032812,0,-0.999462,0.000202,-327.00976,1387.26529, -0.032812,0,-0.999462,0.000202,-327.00976,1387.26529, -0.162802,0,-0.986659,-34.199559,-140.14704,1390.633652, 0.032813,0,-0.999461,0.000202,-140.14704,1387.26529, -0.162802,0,-0.986659,-34.199559,-140.14704,1390.633652, -0.032812,0,-0.999462,0.000202,-327.00976,1387.26529, -0.227167,0,-0.973856,-34.199559,-327.00976,1390.633652, 0.752338,0,0.658777,21.00973,-0,1702.42617, 0.896537,0,0.442969,27.450543,-140.14704,1692.786831, 0.947173,0,0.320723,27.450543,-0,1692.786831, 0.896537,0,0.442969,27.450543,-140.14704,1692.786831, 0.752338,0,0.658777,21.00973,-0,1702.42617, 0.658776,0,0.75234,21.00973,-140.14704,1702.42617, 0.352163,0,-0.935939,67.085436,-327.00976,1400.609414, 0.227168,0,-0.973856,34.19996,-140.14704,1390.633692, 0.412793,0,-0.910825,67.085436,-140.14704,1400.609414, 0.227168,0,-0.973856,34.19996,-140.14704,1390.633692, 0.352163,0,-0.935939,67.085436,-327.00976,1400.609414, 0.162804,0,-0.986659,34.19996,-327.00976,1390.633692, 0.582553,-0,0.812792,97.392688,-140.14704,1708.32597, 0.707106,-0,0.707107,123.957388,-327.00976,1686.524909, 0.707106,-0,0.707107,123.957388,-140.14704,1686.524909, 0.707106,-0,0.707107,123.957388,-327.00976,1686.524909, 0.582553,-0,0.812792,97.392688,-140.14704,1708.32597, 0.527988,0,0.849252,97.392688,-327.00976,1708.32597, 0.935939,0,-0.352162,161.958238,-140.14704,1495.482328, 0.973856,0,-0.227167,171.93392,-327.00976,1528.367816, 0.910825,0,-0.412792,161.958238,-327.00976,1495.482328, 0.973856,0,-0.227167,171.93392,-327.00976,1528.367816, 0.935939,0,-0.352162,161.958238,-140.14704,1495.482328, 0.986659,0,-0.162802,171.93392,-140.14704,1528.367816, 0.986659,0,-0.162802,171.93392,-140.14704,1528.367816, 0.999462,0,-0.032812,175.302282,-327.00976,1562.567577, 0.973856,0,-0.227167,171.93392,-327.00976,1528.367816, 0.999462,0,-0.032812,175.302282,-327.00976,1562.567577, 0.986659,0,-0.162802,171.93392,-140.14704,1528.367816, 0.999461,0,0.032813,175.302282,-140.14704,1562.567577, 0.555571,0,-0.831469,97.39286,-327.00976,1416.809092, 0.412793,0,-0.910825,67.085436,-140.14704,1400.609414, 0.555571,0,-0.831469,97.39286,-140.14704,1416.809092, 0.412793,0,-0.910825,67.085436,-140.14704,1400.609414, 0.555571,0,-0.831469,97.39286,-327.00976,1416.809092, 0.352163,0,-0.935939,67.085436,-327.00976,1400.609414, -0.849252,-0,0.527988,-145.758398,-327.00976,1659.960062, -0.910825,-0,0.412792,-161.95804,-140.14704,1629.652619, -0.935939,-0,0.352162,-161.95804,-327.00976,1629.652619, -0.910825,-0,0.412792,-161.95804,-140.14704,1629.652619, -0.849252,-0,0.527988,-145.758398,-327.00976,1659.960062, -0.812792,-0,0.582553,-145.758398,-140.14704,1659.960062, 0.707107,0,-0.707106,123.957535,-140.14704,1438.610184, 0.555571,0,-0.831469,97.39286,-327.00976,1416.809092, 0.555571,0,-0.831469,97.39286,-140.14704,1416.809092, 0.555571,0,-0.831469,97.39286,-327.00976,1416.809092, 0.707107,0,-0.707106,123.957535,-140.14704,1438.610184, 0.707107,0,-0.707106,123.957535,-327.00976,1438.610184, -0.986659,-0,0.162802,-171.933723,-327.00976,1596.767131, -0.999462,-0,0.032812,-175.302085,-140.14704,1562.56737, -0.999461,-0,-0.032813,-175.302085,-327.00976,1562.56737, -0.999462,-0,0.032812,-175.302085,-140.14704,1562.56737, -0.986659,-0,0.162802,-171.933723,-327.00976,1596.767131, -0.973856,-0,0.227167,-171.933723,-140.14704,1596.767131, -0.999461,-0,-0.032813,-175.302085,-327.00976,1562.56737, -0.986659,-0,-0.162804,-171.933682,-140.14704,1528.367612, -0.973856,-0,-0.227168,-171.933682,-327.00976,1528.367612, -0.986659,-0,-0.162804,-171.933682,-140.14704,1528.367612, -0.999461,-0,-0.032813,-175.302085,-327.00976,1562.56737, -0.999462,-0,0.032812,-175.302085,-140.14704,1562.56737, -0.973856,-0,-0.227168,-171.933682,-327.00976,1528.367612, -0.935939,0,-0.352163,-161.957961,-140.14704,1495.482136, -0.910825,0,-0.412793,-161.957961,-327.00976,1495.482136, -0.935939,0,-0.352163,-161.957961,-140.14704,1495.482136, -0.973856,-0,-0.227168,-171.933682,-327.00976,1528.367612, -0.986659,-0,-0.162804,-171.933682,-140.14704,1528.367612, -0.910825,0,-0.412793,-161.957961,-327.00976,1495.482136, -0.849251,0,-0.527989,-145.758282,-140.14704,1465.174712, -0.812792,-0,-0.582554,-145.758282,-327.00976,1465.174712, -0.849251,0,-0.527989,-145.758282,-140.14704,1465.174712, -0.910825,0,-0.412793,-161.957961,-327.00976,1495.482136, -0.935939,0,-0.352163,-161.957961,-140.14704,1495.482136, 0.812792,-0,0.582554,145.75848,-140.14704,1659.960235, 0.707106,-0,0.707107,123.957388,-327.00976,1686.524909, 0.849251,0,0.527989,145.75848,-327.00976,1659.960235, 0.707106,-0,0.707107,123.957388,-327.00976,1686.524909, 0.812792,-0,0.582554,145.75848,-140.14704,1659.960235, 0.707106,-0,0.707107,123.957388,-140.14704,1686.524909, -0.555571,-0,0.831469,-97.392662,-140.14704,1708.325854, -0.412793,-0,0.910825,-67.085238,-327.00976,1724.525533, -0.352163,-0,0.935939,-67.085238,-140.14704,1724.525533, -0.412793,-0,0.910825,-67.085238,-327.00976,1724.525533, -0.555571,-0,0.831469,-97.392662,-140.14704,1708.325854, -0.555571,-0,0.831469,-97.392662,-327.00976,1708.325854, -0.707107,-0,0.707106,-123.957337,-327.00976,1686.524763, -0.555571,-0,0.831469,-97.392662,-140.14704,1708.325854, -0.707107,-0,0.707106,-123.957337,-140.14704,1686.524763, -0.555571,-0,0.831469,-97.392662,-140.14704,1708.325854, -0.707107,-0,0.707106,-123.957337,-327.00976,1686.524763, -0.555571,-0,0.831469,-97.392662,-327.00976,1708.325854, 0.707107,-0,-0.707106,21.009767,-140.14704,1660.406714, 0.382684,-0,-0.923879,11.370427,-0,1653.965901, 0.707107,0,-0.707106,21.009767,-0,1660.406714, 0.382684,-0,-0.923879,11.370427,-0,1653.965901, 0.707107,-0,-0.707106,21.009767,-140.14704,1660.406714, 0.382684,-0,-0.923879,11.370427,-140.14704,1653.965901, -0.442967,-0,-0.896538,-11.370339,-140.14704,1653.965881, -0.707106,-0,-0.707107,-21.00969,-0,1660.406677, -0.320721,-0,-0.947174,-11.370339,-0,1653.965881, -0.707106,-0,-0.707107,-21.00969,-0,1660.406677, -0.442967,-0,-0.896538,-11.370339,-140.14704,1653.965881, -0.707106,-0,-0.707107,-21.00969,-140.14704,1660.406677, -0.000001,0,1,-0.000006,-0,1711.128666, 0.320721,0,0.947174,11.370379,-140.14704,1708.866966, 0.442967,0,0.896538,11.370379,-0,1708.866966, 0.320721,0,0.947174,11.370379,-140.14704,1708.866966, -0.000001,0,1,-0.000006,-0,1711.128666, -0.000001,0,1,-0.000006,-140.14704,1711.128666, -0.896537,-0,-0.442969,-27.450503,-140.14704,1670.046016, -0.707106,-0,-0.707107,-21.00969,-0,1660.406677, -0.707106,-0,-0.707107,-21.00969,-140.14704,1660.406677, -0.707106,-0,-0.707107,-21.00969,-0,1660.406677, -0.896537,-0,-0.442969,-27.450503,-140.14704,1670.046016, -0.947173,-0,-0.320723,-27.450503,-0,1670.046016, 0.442967,0,0.896538,11.370379,-0,1708.866966, 0.658776,0,0.75234,21.00973,-140.14704,1702.42617, 0.752338,0,0.658777,21.00973,-0,1702.42617, 0.658776,0,0.75234,21.00973,-140.14704,1702.42617, 0.442967,0,0.896538,11.370379,-0,1708.866966, 0.320721,0,0.947174,11.370379,-140.14704,1708.866966, 0.947173,0,0.320723,27.450543,-0,1692.786831, 0.997809,0,0.06616,29.712263,-140.14704,1681.41645, 0.997809,0,-0.066158,29.712263,-0,1681.41645, 0.997809,0,0.06616,29.712263,-140.14704,1681.41645, 0.947173,0,0.320723,27.450543,-0,1692.786831, 0.896537,0,0.442969,27.450543,-140.14704,1692.786831, 0.997809,0,-0.066158,29.712263,-0,1681.41645, 0.947174,0,-0.320721,27.450563,-140.14704,1670.046065, 0.896538,0,-0.442967,27.450563,-0,1670.046065, 0.947174,0,-0.320721,27.450563,-140.14704,1670.046065, 0.997809,0,-0.066158,29.712263,-0,1681.41645, 0.997809,0,0.06616,29.712263,-140.14704,1681.41645, -0.707107,-0,0.707106,-21.009727,-0,1702.426133, -0.382684,-0,0.923879,-11.370387,-140.14704,1708.866946, -0.382684,-0,0.923879,-11.370387,-0,1708.866946, -0.382684,-0,0.923879,-11.370387,-140.14704,1708.866946, -0.707107,-0,0.707106,-21.009727,-0,1702.426133, -0.707107,-0,0.707106,-21.009727,-140.14704,1702.426133, -0,1,0,-171.933723,-140.14704,1596.767131, -0,1,0,-171.933682,-140.14704,1528.367612, -0,1,0,-175.302085,-140.14704,1562.56737, -0,1,0,-171.933682,-140.14704,1528.367612, -0,1,0,-171.933723,-140.14704,1596.767131, 0,1,0,-161.95804,-140.14704,1629.652619, -0,1,0,-171.933682,-140.14704,1528.367612, 0,1,0,-161.95804,-140.14704,1629.652619, 0,1,0,-161.957961,-140.14704,1495.482136, 0,1,0,-161.957961,-140.14704,1495.482136, 0,1,0,-161.95804,-140.14704,1629.652619, -0,1,0,-145.758398,-140.14704,1659.960062, 0,1,0,-161.957961,-140.14704,1495.482136, -0,1,0,-145.758398,-140.14704,1659.960062, -0,1,0,-145.758282,-140.14704,1465.174712, -0,1,0,-145.758282,-140.14704,1465.174712, -0,1,0,-145.758398,-140.14704,1659.960062, -0,1,0,-123.957337,-140.14704,1686.524763, -0,1,0,-145.758282,-140.14704,1465.174712, -0,1,0,-123.957337,-140.14704,1686.524763, 0,1,0,-123.957191,-140.14704,1438.610037, 0,1,0,-123.957191,-140.14704,1438.610037, -0,1,0,-123.957337,-140.14704,1686.524763, -0,1,0,-97.392662,-140.14704,1708.325854, 0,1,0,-123.957191,-140.14704,1438.610037, -0,1,0,-97.392662,-140.14704,1708.325854, -0,1,0,-97.39249,-140.14704,1416.808977, -0,1,0,-97.39249,-140.14704,1416.808977, -0,1,0,-97.392662,-140.14704,1708.325854, -0,1,0,-85.022439,-140.14704,1562.567379, -0,1,0,-85.022439,-140.14704,1562.567379, -0,1,0,-97.392662,-140.14704,1708.325854, -0,1,0,-83.388773,-140.14704,1579.154455, -0,1,0,-83.388773,-140.14704,1579.154455, -0,1,0,-97.392662,-140.14704,1708.325854, 0,1,0,-67.085238,-140.14704,1724.525533, -0,1,0,-83.388773,-140.14704,1579.154455, 0,1,0,-67.085238,-140.14704,1724.525533, 0,1,0,-78.55052,-140.14704,1595.104103, 0,1,0,-78.55052,-140.14704,1595.104103, 0,1,0,-67.085238,-140.14704,1724.525533, 0,1,0,-70.69361,-140.14704,1609.803386, 0,1,0,-70.69361,-140.14704,1609.803386, 0,1,0,-67.085238,-140.14704,1724.525533, -0,1,0,-60.119981,-140.14704,1622.687419, -0,1,0,-60.119981,-140.14704,1622.687419, 0,1,0,-67.085238,-140.14704,1724.525533, -0,1,0,-34.199762,-140.14704,1734.501255, -0,1,0,-60.119981,-140.14704,1622.687419, -0,1,0,-34.199762,-140.14704,1734.501255, -0,1,0,-47.235971,-140.14704,1633.261077, -0,1,0,-47.235971,-140.14704,1633.261077, -0,1,0,-34.199762,-140.14704,1734.501255, -0,1,0,-32.536705,-140.14704,1641.118019, -0,1,0,-32.536705,-140.14704,1641.118019, -0,1,0,-34.199762,-140.14704,1734.501255, -0,1,0,-29.712222,-140.14704,1681.416397, -0,1,0,-29.712222,-140.14704,1681.416397, -0,1,0,-34.199762,-140.14704,1734.501255, -0,1,0,-27.450523,-140.14704,1692.786782, -0,1,0,-27.450523,-140.14704,1692.786782, -0,1,0,-34.199762,-140.14704,1734.501255, -0,1,0,-0.000005,-140.14704,1737.869657, -0,1,0,-27.450523,-140.14704,1692.786782, -0,1,0,-0.000005,-140.14704,1737.869657, 0,1,0,-21.009727,-140.14704,1702.426133, 0,1,0,-21.009727,-140.14704,1702.426133, -0,1,0,-0.000005,-140.14704,1737.869657, 0,1,0,-11.370387,-140.14704,1708.866946, 0,1,0,-11.370387,-140.14704,1708.866946, -0,1,0,-0.000005,-140.14704,1737.869657, 0,1,0,-0.000006,-140.14704,1711.128666, 0,1,0,-0.000006,-140.14704,1711.128666, -0,1,0,-0.000005,-140.14704,1737.869657, 0,1,0,11.370379,-140.14704,1708.866966, 0,1,0,11.370379,-140.14704,1708.866966, -0,1,0,-0.000005,-140.14704,1737.869657, -0,1,0,34.199757,-140.14704,1734.501295, 0,1,0,11.370379,-140.14704,1708.866966, -0,1,0,34.199757,-140.14704,1734.501295, 0,1,0,21.00973,-140.14704,1702.42617, 0,1,0,21.00973,-140.14704,1702.42617, -0,1,0,34.199757,-140.14704,1734.501295, 0,1,0,27.450543,-140.14704,1692.786831, 0,1,0,27.450543,-140.14704,1692.786831, -0,1,0,34.199757,-140.14704,1734.501295, -0,1,0,29.712263,-140.14704,1681.41645, -0,1,0,29.712263,-140.14704,1681.41645, -0,1,0,34.199757,-140.14704,1734.501295, -0,1,0,32.536728,-140.14704,1641.118092, -0,1,0,32.536728,-140.14704,1641.118092, -0,1,0,34.199757,-140.14704,1734.501295, 0,1,0,47.236011,-140.14704,1633.261182, 0,1,0,47.236011,-140.14704,1633.261182, -0,1,0,34.199757,-140.14704,1734.501295, -0,1,0,67.085244,-140.14704,1724.525612, 0,1,0,47.236011,-140.14704,1633.261182, -0,1,0,67.085244,-140.14704,1724.525612, -0,1,0,60.120045,-140.14704,1622.687553, -0,1,0,60.120045,-140.14704,1622.687553, -0,1,0,67.085244,-140.14704,1724.525612, -0,1,0,70.693703,-140.14704,1609.803543, -0,1,0,70.693703,-140.14704,1609.803543, -0,1,0,67.085244,-140.14704,1724.525612, 0,1,0,97.392688,-140.14704,1708.32597, -0,1,0,70.693703,-140.14704,1609.803543, 0,1,0,97.392688,-140.14704,1708.32597, 0,1,0,78.550645,-140.14704,1595.104277, 0,1,0,78.550645,-140.14704,1595.104277, 0,1,0,97.392688,-140.14704,1708.32597, 0,1,0,83.388934,-140.14704,1579.15464, 0,1,0,83.388934,-140.14704,1579.15464, 0,1,0,97.392688,-140.14704,1708.32597, 0,1,0,85.022636,-140.14704,1562.567568, -0,1,0,-97.39249,-140.14704,1416.808977, 0,1,0,-83.388736,-140.14704,1545.980306, -0,1,0,-67.085047,-140.14704,1400.609334, 0,1,0,-83.388736,-140.14704,1545.980306, -0,1,0,-97.39249,-140.14704,1416.808977, -0,1,0,-85.022439,-140.14704,1562.567379, -0,1,0,-67.085047,-140.14704,1400.609334, 0,1,0,-83.388736,-140.14704,1545.980306, -0,1,0,-78.550447,-140.14704,1530.030669, -0,1,0,-67.085047,-140.14704,1400.609334, -0,1,0,-78.550447,-140.14704,1530.030669, -0,1,0,-70.693505,-140.14704,1515.331404, -0,1,0,-67.085047,-140.14704,1400.609334, -0,1,0,-70.693505,-140.14704,1515.331404, 0,1,0,-60.119847,-140.14704,1502.447394, -0,1,0,-67.085047,-140.14704,1400.609334, 0,1,0,-60.119847,-140.14704,1502.447394, -0,1,0,-34.199559,-140.14704,1390.633652, -0,1,0,-34.199559,-140.14704,1390.633652, 0,1,0,-60.119847,-140.14704,1502.447394, 0,1,0,-47.235814,-140.14704,1491.873764, -0,1,0,-34.199559,-140.14704,1390.633652, 0,1,0,-47.235814,-140.14704,1491.873764, -0,1,0,-32.53653,-140.14704,1484.016855, -0,1,0,-34.199559,-140.14704,1390.633652, -0,1,0,-32.53653,-140.14704,1484.016855, -0,1,0,0.000202,-140.14704,1387.26529, -0,1,0,0.000202,-140.14704,1387.26529, -0,1,0,-32.53653,-140.14704,1484.016855, -0,1,0,-16.586883,-140.14704,1479.178602, -0,1,0,0.000202,-140.14704,1387.26529, -0,1,0,-16.586883,-140.14704,1479.178602, -0,1,0,0.000193,-140.14704,1477.544936, -0,1,0,0.000202,-140.14704,1387.26529, -0,1,0,0.000193,-140.14704,1477.544936, -0,1,0,16.587266,-140.14704,1479.178638, -0,1,0,0.000202,-140.14704,1387.26529, -0,1,0,16.587266,-140.14704,1479.178638, -0,1,0,34.19996,-140.14704,1390.633692, -0,1,0,34.19996,-140.14704,1390.633692, -0,1,0,16.587266,-140.14704,1479.178638, -0,1,0,32.536903,-140.14704,1484.016927, -0,1,0,34.19996,-140.14704,1390.633692, -0,1,0,32.536903,-140.14704,1484.016927, -0,1,0,47.236168,-140.14704,1491.87387, -0,1,0,34.19996,-140.14704,1390.633692, -0,1,0,47.236168,-140.14704,1491.87387, -0,1,0,67.085436,-140.14704,1400.609414, -0,1,0,67.085436,-140.14704,1400.609414, -0,1,0,47.236168,-140.14704,1491.87387, -0,1,0,60.120178,-140.14704,1502.447527, -0,1,0,67.085436,-140.14704,1400.609414, -0,1,0,60.120178,-140.14704,1502.447527, -0,1,0,70.693808,-140.14704,1515.331561, -0,1,0,67.085436,-140.14704,1400.609414, -0,1,0,70.693808,-140.14704,1515.331561, 0,1,0,97.39286,-140.14704,1416.809092, 0,1,0,97.39286,-140.14704,1416.809092, -0,1,0,70.693808,-140.14704,1515.331561, -0,1,0,78.550717,-140.14704,1530.030844, 0,1,0,97.39286,-140.14704,1416.809092, -0,1,0,78.550717,-140.14704,1530.030844, 0,1,0,83.388971,-140.14704,1545.980492, 0,1,0,97.39286,-140.14704,1416.809092, 0,1,0,83.388971,-140.14704,1545.980492, 0,1,0,85.022636,-140.14704,1562.567568, 0,1,0,97.39286,-140.14704,1416.809092, 0,1,0,85.022636,-140.14704,1562.567568, 0,1,0,97.392688,-140.14704,1708.32597, 0,1,0,97.39286,-140.14704,1416.809092, 0,1,0,97.392688,-140.14704,1708.32597, -0,1,0,123.957388,-140.14704,1686.524909, 0,1,0,97.39286,-140.14704,1416.809092, -0,1,0,123.957388,-140.14704,1686.524909, -0,1,0,123.957535,-140.14704,1438.610184, -0,1,0,123.957535,-140.14704,1438.610184, -0,1,0,123.957388,-140.14704,1686.524909, -0,1,0,145.75848,-140.14704,1659.960235, -0,1,0,123.957535,-140.14704,1438.610184, -0,1,0,145.75848,-140.14704,1659.960235, -0,1,0,145.758595,-140.14704,1465.174884, -0,1,0,145.758595,-140.14704,1465.174884, -0,1,0,145.75848,-140.14704,1659.960235, 0,1,0,161.958159,-140.14704,1629.65281, -0,1,0,145.758595,-140.14704,1465.174884, 0,1,0,161.958159,-140.14704,1629.65281, 0,1,0,161.958238,-140.14704,1495.482328, 0,1,0,161.958238,-140.14704,1495.482328, 0,1,0,161.958159,-140.14704,1629.65281, -0,1,0,171.93388,-140.14704,1596.767334, 0,1,0,161.958238,-140.14704,1495.482328, -0,1,0,171.93388,-140.14704,1596.767334, -0,1,0,171.93392,-140.14704,1528.367816, -0,1,0,171.93392,-140.14704,1528.367816, -0,1,0,171.93388,-140.14704,1596.767334, -0,1,0,175.302282,-140.14704,1562.567577, -0,1,0,-32.536705,-140.14704,1641.118019, 0,1,0,-27.450503,-140.14704,1670.046016, -0,1,0,-16.587068,-140.14704,1645.956308, 0,1,0,-27.450503,-140.14704,1670.046016, -0,1,0,-32.536705,-140.14704,1641.118019, -0,1,0,-29.712222,-140.14704,1681.416397, -0,1,0,-16.587068,-140.14704,1645.956308, 0,1,0,-27.450503,-140.14704,1670.046016, 0,1,0,-21.00969,-140.14704,1660.406677, -0,1,0,-16.587068,-140.14704,1645.956308, 0,1,0,-21.00969,-140.14704,1660.406677, -0,1,0,-11.370339,-140.14704,1653.965881, -0,1,0,-16.587068,-140.14704,1645.956308, -0,1,0,-11.370339,-140.14704,1653.965881, 0,1,0,0.000004,-140.14704,1647.590011, 0,1,0,0.000004,-140.14704,1647.590011, -0,1,0,-11.370339,-140.14704,1653.965881, 0,1,0,0.000046,-140.14704,1651.704181, 0,1,0,0.000004,-140.14704,1647.590011, 0,1,0,0.000046,-140.14704,1651.704181, -0,1,0,16.58708,-140.14704,1645.956345, -0,1,0,16.58708,-140.14704,1645.956345, 0,1,0,0.000046,-140.14704,1651.704181, -0,1,0,11.370427,-140.14704,1653.965901, -0,1,0,16.58708,-140.14704,1645.956345, -0,1,0,11.370427,-140.14704,1653.965901, -0,1,0,21.009767,-140.14704,1660.406714, -0,1,0,16.58708,-140.14704,1645.956345, -0,1,0,21.009767,-140.14704,1660.406714, -0,1,0,32.536728,-140.14704,1641.118092, -0,1,0,32.536728,-140.14704,1641.118092, -0,1,0,21.009767,-140.14704,1660.406714, -0,1,0,27.450563,-140.14704,1670.046065, -0,1,0,32.536728,-140.14704,1641.118092, -0,1,0,27.450563,-140.14704,1670.046065, -0,1,0,29.712263,-140.14704,1681.41645, -0.162804,-0,0.986659,-34.199762,-140.14704,1734.501255, -0.032813,-0,0.999461,-0.000005,-327.00976,1737.869657, 0.032812,0,0.999462,-0.000005,-140.14704,1737.869657, -0.032813,-0,0.999461,-0.000005,-327.00976,1737.869657, -0.162804,-0,0.986659,-34.199762,-140.14704,1734.501255, -0.227168,-0,0.973856,-34.199762,-327.00976,1734.501255, 0.812791,0,0.582555,-70.693505,-301.60976,1515.331404, 0.729927,0,0.683525,-60.119847,-327.00976,1502.447394, 0.683523,0,0.729929,-60.119847,-301.60976,1502.447394, 0.729927,0,0.683525,-60.119847,-327.00976,1502.447394, 0.812791,0,0.582555,-70.693505,-301.60976,1515.331404, 0.849251,0,0.527989,-70.693505,-327.00976,1515.331404, 0,-1,0,-83.388736,-301.60976,1545.980306, 0,-1,0,-83.388773,-301.60976,1579.154455, 0,-1,0,-85.022439,-301.60976,1562.567379, 0,-1,0,-83.388773,-301.60976,1579.154455, 0,-1,0,-83.388736,-301.60976,1545.980306, 0,-1,0,-78.55052,-301.60976,1595.104103, 0,-1,0,-78.55052,-301.60976,1595.104103, 0,-1,0,-83.388736,-301.60976,1545.980306, 0,-1,-0,-78.550447,-301.60976,1530.030669, 0,-1,0,-78.55052,-301.60976,1595.104103, 0,-1,-0,-78.550447,-301.60976,1530.030669, 0,-1,-0,-70.69361,-301.60976,1609.803386, 0,-1,-0,-70.69361,-301.60976,1609.803386, 0,-1,-0,-78.550447,-301.60976,1530.030669, -0,-1,-0,-70.693505,-301.60976,1515.331404, 0,-1,-0,-70.69361,-301.60976,1609.803386, -0,-1,-0,-70.693505,-301.60976,1515.331404, -0,-1,-0,-60.119981,-301.60976,1622.687419, -0,-1,-0,-60.119981,-301.60976,1622.687419, -0,-1,-0,-70.693505,-301.60976,1515.331404, -0,-1,-0,-60.119847,-301.60976,1502.447394, -0,-1,-0,-60.119981,-301.60976,1622.687419, -0,-1,-0,-60.119847,-301.60976,1502.447394, 0,-1,-0,-47.235971,-301.60976,1633.261077, 0,-1,-0,-47.235971,-301.60976,1633.261077, -0,-1,-0,-60.119847,-301.60976,1502.447394, -0,-1,-0,-47.235814,-301.60976,1491.873764, 0,-1,-0,-47.235971,-301.60976,1633.261077, -0,-1,-0,-47.235814,-301.60976,1491.873764, 0,-1,-0,-32.536705,-301.60976,1641.118019, 0,-1,-0,-32.536705,-301.60976,1641.118019, -0,-1,-0,-47.235814,-301.60976,1491.873764, 0,-1,-0,-32.53653,-301.60976,1484.016855, 0,-1,-0,-32.536705,-301.60976,1641.118019, 0,-1,-0,-32.53653,-301.60976,1484.016855, 0,-1,-0,-16.587068,-301.60976,1645.956308, 0,-1,-0,-16.587068,-301.60976,1645.956308, 0,-1,-0,-32.53653,-301.60976,1484.016855, 0,-1,-0,-16.586883,-301.60976,1479.178602, 0,-1,-0,-16.587068,-301.60976,1645.956308, 0,-1,-0,-16.586883,-301.60976,1479.178602, -0,-1,-0,0.000004,-301.60976,1647.590011, -0,-1,-0,0.000004,-301.60976,1647.590011, 0,-1,-0,-16.586883,-301.60976,1479.178602, -0,-1,-0,0.000193,-301.60976,1477.544936, -0,-1,-0,0.000004,-301.60976,1647.590011, -0,-1,-0,0.000193,-301.60976,1477.544936, -0,-1,-0,16.58708,-301.60976,1645.956345, -0,-1,-0,16.58708,-301.60976,1645.956345, -0,-1,-0,0.000193,-301.60976,1477.544936, 0,-1,-0,16.587266,-301.60976,1479.178638, -0,-1,-0,16.58708,-301.60976,1645.956345, 0,-1,-0,16.587266,-301.60976,1479.178638, -0,-1,-0,32.536728,-301.60976,1641.118092, -0,-1,-0,32.536728,-301.60976,1641.118092, 0,-1,-0,16.587266,-301.60976,1479.178638, 0,-1,-0,32.536903,-301.60976,1484.016927, -0,-1,-0,32.536728,-301.60976,1641.118092, 0,-1,-0,32.536903,-301.60976,1484.016927, -0,-1,-0,47.236011,-301.60976,1633.261182, -0,-1,-0,47.236011,-301.60976,1633.261182, 0,-1,-0,32.536903,-301.60976,1484.016927, 0,-1,-0,47.236168,-301.60976,1491.87387, -0,-1,-0,47.236011,-301.60976,1633.261182, 0,-1,-0,47.236168,-301.60976,1491.87387, 0,-1,-0,60.120045,-301.60976,1622.687553, 0,-1,-0,60.120045,-301.60976,1622.687553, 0,-1,-0,47.236168,-301.60976,1491.87387, 0,-1,-0,60.120178,-301.60976,1502.447527, 0,-1,-0,60.120045,-301.60976,1622.687553, 0,-1,-0,60.120178,-301.60976,1502.447527, 0,-1,-0,70.693703,-301.60976,1609.803543, 0,-1,-0,70.693703,-301.60976,1609.803543, 0,-1,-0,60.120178,-301.60976,1502.447527, 0,-1,-0,70.693808,-301.60976,1515.331561, 0,-1,-0,70.693703,-301.60976,1609.803543, 0,-1,-0,70.693808,-301.60976,1515.331561, -0,-1,-0,78.550645,-301.60976,1595.104277, -0,-1,-0,78.550645,-301.60976,1595.104277, 0,-1,-0,70.693808,-301.60976,1515.331561, 0,-1,-0,78.550717,-301.60976,1530.030844, -0,-1,-0,78.550645,-301.60976,1595.104277, 0,-1,-0,78.550717,-301.60976,1530.030844, -0,-1,-0,83.388934,-301.60976,1579.15464, -0,-1,-0,83.388934,-301.60976,1579.15464, 0,-1,-0,78.550717,-301.60976,1530.030844, -0,-1,-0,83.388971,-301.60976,1545.980492, -0,-1,-0,83.388934,-301.60976,1579.15464, -0,-1,-0,83.388971,-301.60976,1545.980492, -0,-1,-0,85.022636,-301.60976,1562.567568, 0.973855,0,0.227169,-83.388736,-301.60976,1545.980306, 0.935939,0,0.352163,-78.550447,-327.00976,1530.030669, 0.910825,0,0.412793,-78.550447,-301.60976,1530.030669, 0.935939,0,0.352163,-78.550447,-327.00976,1530.030669, 0.973855,0,0.227169,-83.388736,-301.60976,1545.980306, 0.986658,0,0.162804,-83.388736,-327.00976,1545.980306, 0.582555,0,-0.812791,-47.235971,-327.00976,1633.261077, 0.707108,0,-0.707106,-60.119981,-301.60976,1622.687419, 0.527989,0,-0.849251,-47.235971,-301.60976,1633.261077, 0.707108,0,-0.707106,-60.119981,-301.60976,1622.687419, 0.582555,0,-0.812791,-47.235971,-327.00976,1633.261077, 0.707108,0,-0.707106,-60.119981,-327.00976,1622.687419, 0.999461,0,0.032814,-85.022439,-301.60976,1562.567379, 0.986658,0,0.162804,-83.388736,-327.00976,1545.980306, 0.973855,0,0.227169,-83.388736,-301.60976,1545.980306, 0.986658,0,0.162804,-83.388736,-327.00976,1545.980306, 0.999461,0,0.032814,-85.022439,-301.60976,1562.567379, 0.999462,0,-0.032812,-85.022439,-327.00976,1562.567379, 0.412793,0,-0.910825,-32.536705,-327.00976,1641.118019, 0.527989,0,-0.849251,-47.235971,-301.60976,1633.261077, 0.352163,0,-0.935939,-32.536705,-301.60976,1641.118019, 0.527989,0,-0.849251,-47.235971,-301.60976,1633.261077, 0.412793,0,-0.910825,-32.536705,-327.00976,1641.118019, 0.582555,0,-0.812791,-47.235971,-327.00976,1633.261077, 0.935939,0,-0.352161,-78.55052,-301.60976,1595.104103, 0.973856,0,-0.227166,-83.388773,-327.00976,1579.154455, 0.986659,0,-0.162802,-83.388773,-301.60976,1579.154455, 0.973856,0,-0.227166,-83.388773,-327.00976,1579.154455, 0.935939,0,-0.352161,-78.55052,-301.60976,1595.104103, 0.910826,0,-0.412791,-78.55052,-327.00976,1595.104103, -0.582555,-0,0.812791,47.236168,-165.54704,1491.87387, -0.683525,-0,0.729927,60.120178,-140.14704,1502.447527, -0.527989,-0,0.849251,47.236168,-140.14704,1491.87387, -0.683525,-0,0.729927,60.120178,-140.14704,1502.447527, -0.582555,-0,0.812791,47.236168,-165.54704,1491.87387, -0.729929,-0,0.683523,60.120178,-165.54704,1502.447527, -0.729929,-0,0.683523,60.120178,-165.54704,1502.447527, -0.812793,-0,0.582553,70.693808,-140.14704,1515.331561, -0.683525,-0,0.729927,60.120178,-140.14704,1502.447527, -0.812793,-0,0.582553,70.693808,-140.14704,1515.331561, -0.729929,-0,0.683523,60.120178,-165.54704,1502.447527, -0.849252,-0,0.527987,70.693808,-165.54704,1515.331561, -0.849252,-0,0.527987,70.693808,-165.54704,1515.331561, -0.910826,-0,0.412791,78.550717,-140.14704,1530.030844, -0.812793,-0,0.582553,70.693808,-140.14704,1515.331561, -0.910826,-0,0.412791,78.550717,-140.14704,1530.030844, -0.849252,-0,0.527987,70.693808,-165.54704,1515.331561, -0.935939,-0,0.352161,78.550717,-165.54704,1530.030844, -0,-1,-0,-97.39249,-327.00976,1416.808977, -0,-1,-0,-83.388736,-327.00976,1545.980306, -0,-1,-0,-85.022439,-327.00976,1562.567379, -0,-1,-0,-83.388736,-327.00976,1545.980306, -0,-1,-0,-97.39249,-327.00976,1416.808977, 0,-1,-0,-67.085047,-327.00976,1400.609334, -0,-1,-0,-83.388736,-327.00976,1545.980306, 0,-1,-0,-67.085047,-327.00976,1400.609334, 0,-1,-0,-78.550447,-327.00976,1530.030669, 0,-1,-0,-78.550447,-327.00976,1530.030669, 0,-1,-0,-67.085047,-327.00976,1400.609334, 0,-1,-0,-70.693505,-327.00976,1515.331404, 0,-1,-0,-70.693505,-327.00976,1515.331404, 0,-1,-0,-67.085047,-327.00976,1400.609334, -0,-1,-0,-60.119847,-327.00976,1502.447394, -0,-1,-0,-60.119847,-327.00976,1502.447394, 0,-1,-0,-67.085047,-327.00976,1400.609334, 0,-1,-0,-34.199559,-327.00976,1390.633652, -0,-1,-0,-60.119847,-327.00976,1502.447394, 0,-1,-0,-34.199559,-327.00976,1390.633652, -0,-1,-0,-47.235814,-327.00976,1491.873764, -0,-1,-0,-47.235814,-327.00976,1491.873764, 0,-1,-0,-34.199559,-327.00976,1390.633652, 0,-1,-0,-32.53653,-327.00976,1484.016855, 0,-1,-0,-32.53653,-327.00976,1484.016855, 0,-1,-0,-34.199559,-327.00976,1390.633652, 0,-1,-0,0.000202,-327.00976,1387.26529, 0,-1,-0,-32.53653,-327.00976,1484.016855, 0,-1,-0,0.000202,-327.00976,1387.26529, 0,-1,-0,-16.586883,-327.00976,1479.178602, 0,-1,-0,-16.586883,-327.00976,1479.178602, 0,-1,-0,0.000202,-327.00976,1387.26529, 0,-1,-0,0.000193,-327.00976,1477.544936, 0,-1,-0,0.000193,-327.00976,1477.544936, 0,-1,-0,0.000202,-327.00976,1387.26529, 0,-1,-0,16.587266,-327.00976,1479.178638, 0,-1,-0,16.587266,-327.00976,1479.178638, 0,-1,-0,0.000202,-327.00976,1387.26529, 0,-1,-0,34.19996,-327.00976,1390.633692, 0,-1,-0,16.587266,-327.00976,1479.178638, 0,-1,-0,34.19996,-327.00976,1390.633692, 0,-1,-0,32.536903,-327.00976,1484.016927, 0,-1,-0,32.536903,-327.00976,1484.016927, 0,-1,-0,34.19996,-327.00976,1390.633692, 0,-1,-0,47.236168,-327.00976,1491.87387, 0,-1,-0,47.236168,-327.00976,1491.87387, 0,-1,-0,34.19996,-327.00976,1390.633692, 0,-1,-0,67.085436,-327.00976,1400.609414, 0,-1,-0,47.236168,-327.00976,1491.87387, 0,-1,-0,67.085436,-327.00976,1400.609414, 0,-1,-0,60.120178,-327.00976,1502.447527, 0,-1,-0,60.120178,-327.00976,1502.447527, 0,-1,-0,67.085436,-327.00976,1400.609414, 0,-1,-0,70.693808,-327.00976,1515.331561, 0,-1,-0,70.693808,-327.00976,1515.331561, 0,-1,-0,67.085436,-327.00976,1400.609414, -0,-1,-0,97.39286,-327.00976,1416.809092, 0,-1,-0,70.693808,-327.00976,1515.331561, -0,-1,-0,97.39286,-327.00976,1416.809092, 0,-1,-0,78.550717,-327.00976,1530.030844, 0,-1,-0,78.550717,-327.00976,1530.030844, -0,-1,-0,97.39286,-327.00976,1416.809092, -0,-1,-0,83.388971,-327.00976,1545.980492, -0,-1,-0,83.388971,-327.00976,1545.980492, -0,-1,-0,97.39286,-327.00976,1416.809092, -0,-1,-0,85.022636,-327.00976,1562.567568, -0,-1,-0,85.022636,-327.00976,1562.567568, -0,-1,-0,97.39286,-327.00976,1416.809092, -0,-1,-0,97.392688,-327.00976,1708.32597, -0,-1,-0,97.392688,-327.00976,1708.32597, -0,-1,-0,97.39286,-327.00976,1416.809092, 0,-1,-0,123.957388,-327.00976,1686.524909, 0,-1,-0,123.957388,-327.00976,1686.524909, -0,-1,-0,97.39286,-327.00976,1416.809092, 0,-1,-0,123.957535,-327.00976,1438.610184, 0,-1,-0,123.957388,-327.00976,1686.524909, 0,-1,-0,123.957535,-327.00976,1438.610184, 0,-1,-0,145.75848,-327.00976,1659.960235, 0,-1,-0,145.75848,-327.00976,1659.960235, 0,-1,-0,123.957535,-327.00976,1438.610184, 0,-1,-0,145.758595,-327.00976,1465.174884, 0,-1,-0,145.75848,-327.00976,1659.960235, 0,-1,-0,145.758595,-327.00976,1465.174884, 0,-1,-0,161.958159,-327.00976,1629.65281, 0,-1,-0,161.958159,-327.00976,1629.65281, 0,-1,-0,145.758595,-327.00976,1465.174884, -0,-1,-0,161.958238,-327.00976,1495.482328, 0,-1,-0,161.958159,-327.00976,1629.65281, -0,-1,-0,161.958238,-327.00976,1495.482328, -0,-1,-0,171.93388,-327.00976,1596.767334, -0,-1,-0,171.93388,-327.00976,1596.767334, -0,-1,-0,161.958238,-327.00976,1495.482328, -0,-1,-0,171.93392,-327.00976,1528.367816, -0,-1,-0,171.93388,-327.00976,1596.767334, -0,-1,-0,171.93392,-327.00976,1528.367816, 0,-1,0,175.302282,-327.00976,1562.567577, 0,-1,-0,-171.933682,-327.00976,1528.367612, 0,-1,-0,-171.933723,-327.00976,1596.767131, 0,-1,-0,-175.302085,-327.00976,1562.56737, 0,-1,-0,-171.933723,-327.00976,1596.767131, 0,-1,-0,-171.933682,-327.00976,1528.367612, -0,-1,-0,-161.95804,-327.00976,1629.652619, -0,-1,-0,-161.95804,-327.00976,1629.652619, 0,-1,-0,-171.933682,-327.00976,1528.367612, -0,-1,-0,-161.957961,-327.00976,1495.482136, -0,-1,-0,-161.95804,-327.00976,1629.652619, -0,-1,-0,-161.957961,-327.00976,1495.482136, 0,-1,-0,-145.758398,-327.00976,1659.960062, 0,-1,-0,-145.758398,-327.00976,1659.960062, -0,-1,-0,-161.957961,-327.00976,1495.482136, 0,-1,-0,-145.758282,-327.00976,1465.174712, 0,-1,-0,-145.758398,-327.00976,1659.960062, 0,-1,-0,-145.758282,-327.00976,1465.174712, 0,-1,-0,-123.957337,-327.00976,1686.524763, 0,-1,-0,-123.957337,-327.00976,1686.524763, 0,-1,-0,-145.758282,-327.00976,1465.174712, 0,-1,-0,-123.957191,-327.00976,1438.610037, 0,-1,-0,-123.957337,-327.00976,1686.524763, 0,-1,-0,-123.957191,-327.00976,1438.610037, 0,-1,-0,-97.392662,-327.00976,1708.325854, 0,-1,-0,-97.392662,-327.00976,1708.325854, 0,-1,-0,-123.957191,-327.00976,1438.610037, -0,-1,-0,-97.39249,-327.00976,1416.808977, 0,-1,-0,-97.392662,-327.00976,1708.325854, -0,-1,-0,-97.39249,-327.00976,1416.808977, -0,-1,-0,-85.022439,-327.00976,1562.567379, 0,-1,-0,-97.392662,-327.00976,1708.325854, -0,-1,-0,-85.022439,-327.00976,1562.567379, 0,-1,-0,-83.388773,-327.00976,1579.154455, 0,-1,-0,-97.392662,-327.00976,1708.325854, 0,-1,-0,-83.388773,-327.00976,1579.154455, 0,-1,-0,-67.085238,-327.00976,1724.525533, 0,-1,-0,-67.085238,-327.00976,1724.525533, 0,-1,-0,-83.388773,-327.00976,1579.154455, 0,-1,-0,-78.55052,-327.00976,1595.104103, 0,-1,-0,-67.085238,-327.00976,1724.525533, 0,-1,-0,-78.55052,-327.00976,1595.104103, -0,-1,-0,-70.69361,-327.00976,1609.803386, 0,-1,-0,-67.085238,-327.00976,1724.525533, -0,-1,-0,-70.69361,-327.00976,1609.803386, -0,-1,-0,-60.119981,-327.00976,1622.687419, 0,-1,-0,-67.085238,-327.00976,1724.525533, -0,-1,-0,-60.119981,-327.00976,1622.687419, 0,-1,-0,-34.199762,-327.00976,1734.501255, 0,-1,-0,-34.199762,-327.00976,1734.501255, -0,-1,-0,-60.119981,-327.00976,1622.687419, 0,-1,-0,-47.235971,-327.00976,1633.261077, 0,-1,-0,-34.199762,-327.00976,1734.501255, 0,-1,-0,-47.235971,-327.00976,1633.261077, 0,-1,-0,-32.536705,-327.00976,1641.118019, 0,-1,-0,-34.199762,-327.00976,1734.501255, 0,-1,-0,-32.536705,-327.00976,1641.118019, 0,-1,-0,-0.000005,-327.00976,1737.869657, 0,-1,-0,-0.000005,-327.00976,1737.869657, 0,-1,-0,-32.536705,-327.00976,1641.118019, 0,-1,-0,-16.587068,-327.00976,1645.956308, 0,-1,-0,-0.000005,-327.00976,1737.869657, 0,-1,-0,-16.587068,-327.00976,1645.956308, -0,-1,-0,0.000004,-327.00976,1647.590011, 0,-1,-0,-0.000005,-327.00976,1737.869657, -0,-1,-0,0.000004,-327.00976,1647.590011, -0,-1,-0,34.199757,-327.00976,1734.501295, -0,-1,-0,34.199757,-327.00976,1734.501295, -0,-1,-0,0.000004,-327.00976,1647.590011, -0,-1,-0,16.58708,-327.00976,1645.956345, -0,-1,-0,34.199757,-327.00976,1734.501295, -0,-1,-0,16.58708,-327.00976,1645.956345, -0,-1,-0,32.536728,-327.00976,1641.118092, -0,-1,-0,34.199757,-327.00976,1734.501295, -0,-1,-0,32.536728,-327.00976,1641.118092, -0,-1,-0,47.236011,-327.00976,1633.261182, -0,-1,-0,34.199757,-327.00976,1734.501295, -0,-1,-0,47.236011,-327.00976,1633.261182, 0,-1,-0,67.085244,-327.00976,1724.525612, 0,-1,-0,67.085244,-327.00976,1724.525612, -0,-1,-0,47.236011,-327.00976,1633.261182, 0,-1,-0,60.120045,-327.00976,1622.687553, 0,-1,-0,67.085244,-327.00976,1724.525612, 0,-1,-0,60.120045,-327.00976,1622.687553, 0,-1,-0,70.693703,-327.00976,1609.803543, 0,-1,-0,67.085244,-327.00976,1724.525612, 0,-1,-0,70.693703,-327.00976,1609.803543, -0,-1,-0,97.392688,-327.00976,1708.32597, -0,-1,-0,97.392688,-327.00976,1708.32597, 0,-1,-0,70.693703,-327.00976,1609.803543, -0,-1,-0,78.550645,-327.00976,1595.104277, -0,-1,-0,97.392688,-327.00976,1708.32597, -0,-1,-0,78.550645,-327.00976,1595.104277, -0,-1,-0,83.388934,-327.00976,1579.15464, -0,-1,-0,97.392688,-327.00976,1708.32597, -0,-1,-0,83.388934,-327.00976,1579.15464, -0,-1,-0,85.022636,-327.00976,1562.567568, 0,1,0,-83.388773,-165.54704,1579.154455, 0,1,0,-83.388736,-165.54704,1545.980306, 0,1,0,-85.022439,-165.54704,1562.567379, 0,1,0,-83.388736,-165.54704,1545.980306, 0,1,0,-83.388773,-165.54704,1579.154455, 0,1,0,-78.55052,-165.54704,1595.104103, 0,1,0,-83.388736,-165.54704,1545.980306, 0,1,0,-78.55052,-165.54704,1595.104103, 0,1,0,-78.550447,-165.54704,1530.030669, 0,1,0,-78.550447,-165.54704,1530.030669, 0,1,0,-78.55052,-165.54704,1595.104103, 0,1,0,-70.69361,-165.54704,1609.803386, 0,1,0,-78.550447,-165.54704,1530.030669, 0,1,0,-70.69361,-165.54704,1609.803386, -0,1,0,-70.693505,-165.54704,1515.331404, -0,1,0,-70.693505,-165.54704,1515.331404, 0,1,0,-70.69361,-165.54704,1609.803386, -0,1,0,-60.119981,-165.54704,1622.687419, -0,1,0,-70.693505,-165.54704,1515.331404, -0,1,0,-60.119981,-165.54704,1622.687419, 0,1,0,-60.119847,-165.54704,1502.447394, 0,1,0,-60.119847,-165.54704,1502.447394, -0,1,0,-60.119981,-165.54704,1622.687419, -0,1,0,-47.235971,-165.54704,1633.261077, 0,1,0,-60.119847,-165.54704,1502.447394, -0,1,0,-47.235971,-165.54704,1633.261077, 0,1,0,-47.235814,-165.54704,1491.873764, 0,1,0,-47.235814,-165.54704,1491.873764, -0,1,0,-47.235971,-165.54704,1633.261077, -0,1,0,-32.536705,-165.54704,1641.118019, 0,1,0,-47.235814,-165.54704,1491.873764, -0,1,0,-32.536705,-165.54704,1641.118019, -0,1,0,-32.53653,-165.54704,1484.016855, -0,1,0,-32.53653,-165.54704,1484.016855, -0,1,0,-32.536705,-165.54704,1641.118019, -0,1,0,-16.587068,-165.54704,1645.956308, -0,1,0,-32.53653,-165.54704,1484.016855, -0,1,0,-16.587068,-165.54704,1645.956308, -0,1,0,-16.586883,-165.54704,1479.178602, -0,1,0,-16.586883,-165.54704,1479.178602, -0,1,0,-16.587068,-165.54704,1645.956308, -0,1,0,0.000004,-165.54704,1647.590011, -0,1,0,-16.586883,-165.54704,1479.178602, -0,1,0,0.000004,-165.54704,1647.590011, 0,1,0,0.000193,-165.54704,1477.544936, 0,1,0,0.000193,-165.54704,1477.544936, -0,1,0,0.000004,-165.54704,1647.590011, 0,1,0,16.58708,-165.54704,1645.956345, 0,1,0,0.000193,-165.54704,1477.544936, 0,1,0,16.58708,-165.54704,1645.956345, -0,1,0,16.587266,-165.54704,1479.178638, -0,1,0,16.587266,-165.54704,1479.178638, 0,1,0,16.58708,-165.54704,1645.956345, 0,1,0,32.536728,-165.54704,1641.118092, -0,1,0,16.587266,-165.54704,1479.178638, 0,1,0,32.536728,-165.54704,1641.118092, -0,1,0,32.536903,-165.54704,1484.016927, -0,1,0,32.536903,-165.54704,1484.016927, 0,1,0,32.536728,-165.54704,1641.118092, 0,1,0,47.236011,-165.54704,1633.261182, -0,1,0,32.536903,-165.54704,1484.016927, 0,1,0,47.236011,-165.54704,1633.261182, -0,1,0,47.236168,-165.54704,1491.87387, -0,1,0,47.236168,-165.54704,1491.87387, 0,1,0,47.236011,-165.54704,1633.261182, -0,1,0,60.120045,-165.54704,1622.687553, -0,1,0,47.236168,-165.54704,1491.87387, -0,1,0,60.120045,-165.54704,1622.687553, -0,1,0,60.120178,-165.54704,1502.447527, -0,1,0,60.120178,-165.54704,1502.447527, -0,1,0,60.120045,-165.54704,1622.687553, -0,1,0,70.693703,-165.54704,1609.803543, -0,1,0,60.120178,-165.54704,1502.447527, -0,1,0,70.693703,-165.54704,1609.803543, -0,1,0,70.693808,-165.54704,1515.331561, -0,1,0,70.693808,-165.54704,1515.331561, -0,1,0,70.693703,-165.54704,1609.803543, 0,1,0,78.550645,-165.54704,1595.104277, -0,1,0,70.693808,-165.54704,1515.331561, 0,1,0,78.550645,-165.54704,1595.104277, -0,1,0,78.550717,-165.54704,1530.030844, -0,1,0,78.550717,-165.54704,1530.030844, 0,1,0,78.550645,-165.54704,1595.104277, 0,1,0,83.388934,-165.54704,1579.15464, -0,1,0,78.550717,-165.54704,1530.030844, 0,1,0,83.388934,-165.54704,1579.15464, 0,1,0,83.388971,-165.54704,1545.980492, 0,1,0,83.388971,-165.54704,1545.980492, 0,1,0,83.388934,-165.54704,1579.15464, 0,1,0,85.022636,-165.54704,1562.567568, -0.032814,-0,0.999461,0.000193,-140.14704,1477.544936, -0.162804,-0,0.986658,16.587266,-165.54704,1479.178638, -0.227169,-0,0.973855,16.587266,-140.14704,1479.178638, -0.162804,-0,0.986658,16.587266,-165.54704,1479.178638, -0.032814,-0,0.999461,0.000193,-140.14704,1477.544936, 0.032812,0,0.999462,0.000193,-165.54704,1477.544936, -0.227169,-0,0.973855,16.587266,-140.14704,1479.178638, -0.382684,-0,0.923879,32.536903,-165.54704,1484.016927, -0.382684,-0,0.923879,32.536903,-140.14704,1484.016927, -0.382684,-0,0.923879,32.536903,-165.54704,1484.016927, -0.227169,-0,0.973855,16.587266,-140.14704,1479.178638, -0.162804,-0,0.986658,16.587266,-165.54704,1479.178638, -0.382684,-0,0.923879,32.536903,-165.54704,1484.016927, -0.527989,-0,0.849251,47.236168,-140.14704,1491.87387, -0.382684,-0,0.923879,32.536903,-140.14704,1484.016927, -0.527989,-0,0.849251,47.236168,-140.14704,1491.87387, -0.382684,-0,0.923879,32.536903,-165.54704,1484.016927, -0.582555,-0,0.812791,47.236168,-165.54704,1491.87387, -0.935939,-0,0.352161,78.550717,-165.54704,1530.030844, -0.973856,-0,0.227166,83.388971,-140.14704,1545.980492, -0.910826,-0,0.412791,78.550717,-140.14704,1530.030844, -0.973856,-0,0.227166,83.388971,-140.14704,1545.980492, -0.935939,-0,0.352161,78.550717,-165.54704,1530.030844, -0.986659,-0,0.162802,83.388971,-165.54704,1545.980492, -0.986659,-0,0.162802,83.388971,-165.54704,1545.980492, -0.999462,-0,0.032812,85.022636,-140.14704,1562.567568, -0.973856,-0,0.227166,83.388971,-140.14704,1545.980492, -0.999462,-0,0.032812,85.022636,-140.14704,1562.567568, -0.986659,-0,0.162802,83.388971,-165.54704,1545.980492, -0.999461,-0,-0.032814,85.022636,-165.54704,1562.567568, -0.999461,-0,-0.032814,85.022636,-165.54704,1562.567568, -0.986658,-0,-0.162804,83.388934,-140.14704,1579.15464, -0.999462,-0,0.032812,85.022636,-140.14704,1562.567568, -0.986658,-0,-0.162804,83.388934,-140.14704,1579.15464, -0.999461,-0,-0.032814,85.022636,-165.54704,1562.567568, -0.973855,-0,-0.227169,83.388934,-165.54704,1579.15464, -0.973855,-0,-0.227169,83.388934,-165.54704,1579.15464, -0.935939,-0,-0.352163,78.550645,-140.14704,1595.104277, -0.986658,-0,-0.162804,83.388934,-140.14704,1579.15464, -0.935939,-0,-0.352163,78.550645,-140.14704,1595.104277, -0.973855,-0,-0.227169,83.388934,-165.54704,1579.15464, -0.910825,-0,-0.412793,78.550645,-165.54704,1595.104277, -0.910825,-0,-0.412793,78.550645,-165.54704,1595.104277, -0.849251,-0,-0.527989,70.693703,-140.14704,1609.803543, -0.935939,-0,-0.352163,78.550645,-140.14704,1595.104277, -0.849251,-0,-0.527989,70.693703,-140.14704,1609.803543, -0.910825,-0,-0.412793,78.550645,-165.54704,1595.104277, -0.812791,-0,-0.582555,70.693703,-165.54704,1609.803543, -0.812791,-0,-0.582555,70.693703,-165.54704,1609.803543, -0.729927,-0,-0.683525,60.120045,-140.14704,1622.687553, -0.849251,-0,-0.527989,70.693703,-140.14704,1609.803543, -0.729927,-0,-0.683525,60.120045,-140.14704,1622.687553, -0.812791,-0,-0.582555,70.693703,-165.54704,1609.803543, -0.683523,-0,-0.729929,60.120045,-165.54704,1622.687553, -0.683523,-0,-0.729929,60.120045,-165.54704,1622.687553, -0.582553,-0,-0.812793,47.236011,-140.14704,1633.261182, -0.729927,-0,-0.683525,60.120045,-140.14704,1622.687553, -0.582553,-0,-0.812793,47.236011,-140.14704,1633.261182, -0.683523,-0,-0.729929,60.120045,-165.54704,1622.687553, -0.527987,-0,-0.849252,47.236011,-165.54704,1633.261182, -0.527987,-0,-0.849252,47.236011,-165.54704,1633.261182, -0.412791,-0,-0.910826,32.536728,-140.14704,1641.118092, -0.582553,-0,-0.812793,47.236011,-140.14704,1633.261182, -0.412791,-0,-0.910826,32.536728,-140.14704,1641.118092, -0.527987,-0,-0.849252,47.236011,-165.54704,1633.261182, -0.352161,-0,-0.935939,32.536728,-165.54704,1641.118092, -0.352161,-0,-0.935939,32.536728,-165.54704,1641.118092, -0.227166,-0,-0.973856,16.58708,-140.14704,1645.956345, -0.412791,-0,-0.910826,32.536728,-140.14704,1641.118092, -0.227166,-0,-0.973856,16.58708,-140.14704,1645.956345, -0.352161,-0,-0.935939,32.536728,-165.54704,1641.118092, -0.162802,-0,-0.986659,16.58708,-165.54704,1645.956345, -0.162802,-0,-0.986659,16.58708,-165.54704,1645.956345, -0.032812,-0,-0.999462,0.000004,-140.14704,1647.590011, -0.227166,-0,-0.973856,16.58708,-140.14704,1645.956345, -0.032812,-0,-0.999462,0.000004,-140.14704,1647.590011, -0.162802,-0,-0.986659,16.58708,-165.54704,1645.956345, 0.032814,0,-0.999461,0.000004,-165.54704,1647.590011, 0.032814,0,-0.999461,0.000004,-165.54704,1647.590011, 0.162804,0,-0.986658,-16.587068,-140.14704,1645.956308, -0.032812,-0,-0.999462,0.000004,-140.14704,1647.590011, 0.162804,0,-0.986658,-16.587068,-140.14704,1645.956308, 0.032814,0,-0.999461,0.000004,-165.54704,1647.590011, 0.227169,0,-0.973855,-16.587068,-165.54704,1645.956308, 0.227169,0,-0.973855,-16.587068,-165.54704,1645.956308, 0.352163,0,-0.935939,-32.536705,-140.14704,1641.118019, 0.162804,0,-0.986658,-16.587068,-140.14704,1645.956308, 0.352163,0,-0.935939,-32.536705,-140.14704,1641.118019, 0.227169,0,-0.973855,-16.587068,-165.54704,1645.956308, 0.412793,0,-0.910825,-32.536705,-165.54704,1641.118019, 0.412793,0,-0.910825,-32.536705,-165.54704,1641.118019, 0.527989,0,-0.849251,-47.235971,-140.14704,1633.261077, 0.352163,0,-0.935939,-32.536705,-140.14704,1641.118019, 0.527989,0,-0.849251,-47.235971,-140.14704,1633.261077, 0.412793,0,-0.910825,-32.536705,-165.54704,1641.118019, 0.582555,0,-0.812791,-47.235971,-165.54704,1633.261077, 0.582555,0,-0.812791,-47.235971,-165.54704,1633.261077, 0.707108,-0,-0.707106,-60.119981,-140.14704,1622.687419, 0.527989,0,-0.849251,-47.235971,-140.14704,1633.261077, 0.707108,-0,-0.707106,-60.119981,-140.14704,1622.687419, 0.582555,0,-0.812791,-47.235971,-165.54704,1633.261077, 0.707108,0,-0.707106,-60.119981,-165.54704,1622.687419, 0.707108,-0,-0.707106,-60.119981,-140.14704,1622.687419, 0.812793,-0,-0.582553,-70.69361,-165.54704,1609.803386, 0.849252,-0,-0.527987,-70.69361,-140.14704,1609.803386, 0.812793,-0,-0.582553,-70.69361,-165.54704,1609.803386, 0.707108,-0,-0.707106,-60.119981,-140.14704,1622.687419, 0.707108,0,-0.707106,-60.119981,-165.54704,1622.687419, 0.849252,-0,-0.527987,-70.69361,-140.14704,1609.803386, 0.910826,-0,-0.412791,-78.55052,-165.54704,1595.104103, 0.935939,0,-0.352161,-78.55052,-140.14704,1595.104103, 0.910826,-0,-0.412791,-78.55052,-165.54704,1595.104103, 0.849252,-0,-0.527987,-70.69361,-140.14704,1609.803386, 0.812793,-0,-0.582553,-70.69361,-165.54704,1609.803386, 0.935939,0,-0.352161,-78.55052,-140.14704,1595.104103, 0.973856,0,-0.227166,-83.388773,-165.54704,1579.154455, 0.986659,0,-0.162802,-83.388773,-140.14704,1579.154455, 0.973856,0,-0.227166,-83.388773,-165.54704,1579.154455, 0.935939,0,-0.352161,-78.55052,-140.14704,1595.104103, 0.910826,-0,-0.412791,-78.55052,-165.54704,1595.104103, 0.986659,0,-0.162802,-83.388773,-140.14704,1579.154455, 0.999462,0,-0.032812,-85.022439,-165.54704,1562.567379, 0.999461,0,0.032814,-85.022439,-140.14704,1562.567379, 0.999462,0,-0.032812,-85.022439,-165.54704,1562.567379, 0.986659,0,-0.162802,-83.388773,-140.14704,1579.154455, 0.973856,0,-0.227166,-83.388773,-165.54704,1579.154455, 0.999461,0,0.032814,-85.022439,-140.14704,1562.567379, 0.986658,0,0.162804,-83.388736,-165.54704,1545.980306, 0.973855,0,0.227169,-83.388736,-140.14704,1545.980306, 0.986658,0,0.162804,-83.388736,-165.54704,1545.980306, 0.999461,0,0.032814,-85.022439,-140.14704,1562.567379, 0.999462,0,-0.032812,-85.022439,-165.54704,1562.567379, 0.973855,0,0.227169,-83.388736,-140.14704,1545.980306, 0.935939,0,0.352163,-78.550447,-165.54704,1530.030669, 0.910825,0,0.412793,-78.550447,-140.14704,1530.030669, 0.935939,0,0.352163,-78.550447,-165.54704,1530.030669, 0.973855,0,0.227169,-83.388736,-140.14704,1545.980306, 0.986658,0,0.162804,-83.388736,-165.54704,1545.980306, 0.910825,0,0.412793,-78.550447,-140.14704,1530.030669, 0.849251,0,0.527989,-70.693505,-165.54704,1515.331404, 0.812791,0,0.582555,-70.693505,-140.14704,1515.331404, 0.849251,0,0.527989,-70.693505,-165.54704,1515.331404, 0.910825,0,0.412793,-78.550447,-140.14704,1530.030669, 0.935939,0,0.352163,-78.550447,-165.54704,1530.030669, 0.812791,0,0.582555,-70.693505,-140.14704,1515.331404, 0.729927,0,0.683525,-60.119847,-165.54704,1502.447394, 0.683523,0,0.729929,-60.119847,-140.14704,1502.447394, 0.729927,0,0.683525,-60.119847,-165.54704,1502.447394, 0.812791,0,0.582555,-70.693505,-140.14704,1515.331404, 0.849251,0,0.527989,-70.693505,-165.54704,1515.331404, 0.683523,0,0.729929,-60.119847,-140.14704,1502.447394, 0.582553,0,0.812793,-47.235814,-165.54704,1491.873764, 0.527987,0,0.849252,-47.235814,-140.14704,1491.873764, 0.582553,0,0.812793,-47.235814,-165.54704,1491.873764, 0.683523,0,0.729929,-60.119847,-140.14704,1502.447394, 0.729927,0,0.683525,-60.119847,-165.54704,1502.447394, 0.527987,0,0.849252,-47.235814,-140.14704,1491.873764, 0.412791,0,0.910826,-32.53653,-165.54704,1484.016855, 0.352161,0,0.935939,-32.53653,-140.14704,1484.016855, 0.412791,0,0.910826,-32.53653,-165.54704,1484.016855, 0.527987,0,0.849252,-47.235814,-140.14704,1491.873764, 0.582553,0,0.812793,-47.235814,-165.54704,1491.873764, 0.352161,0,0.935939,-32.53653,-140.14704,1484.016855, 0.227166,0,0.973856,-16.586883,-165.54704,1479.178602, 0.162802,0,0.986659,-16.586883,-140.14704,1479.178602, 0.227166,0,0.973856,-16.586883,-165.54704,1479.178602, 0.352161,0,0.935939,-32.53653,-140.14704,1484.016855, 0.412791,0,0.910826,-32.53653,-165.54704,1484.016855, 0.162802,0,0.986659,-16.586883,-140.14704,1479.178602, 0.032812,0,0.999462,0.000193,-165.54704,1477.544936, -0.032814,-0,0.999461,0.000193,-140.14704,1477.544936, 0.032812,0,0.999462,0.000193,-165.54704,1477.544936, 0.162802,0,0.986659,-16.586883,-140.14704,1479.178602, 0.227166,0,0.973856,-16.586883,-165.54704,1479.178602, 0.849252,0,-0.527987,-70.69361,-301.60976,1609.803386, 0.910826,0,-0.412791,-78.55052,-327.00976,1595.104103, 0.935939,0,-0.352161,-78.55052,-301.60976,1595.104103, 0.910826,0,-0.412791,-78.55052,-327.00976,1595.104103, 0.849252,0,-0.527987,-70.69361,-301.60976,1609.803386, 0.812793,0,-0.582553,-70.69361,-327.00976,1609.803386, -0.162802,-0,-0.986659,16.58708,-327.00976,1645.956345, -0.032812,-0,-0.999462,0.000004,-301.60976,1647.590011, -0.227166,-0,-0.973856,16.58708,-301.60976,1645.956345, -0.032812,-0,-0.999462,0.000004,-301.60976,1647.590011, -0.162802,-0,-0.986659,16.58708,-327.00976,1645.956345, 0.032814,0,-0.999461,0.000004,-327.00976,1647.590011, 0.227169,0,-0.973855,-16.587068,-327.00976,1645.956308, 0.352163,0,-0.935939,-32.536705,-301.60976,1641.118019, 0.162804,0,-0.986658,-16.587068,-301.60976,1645.956308, 0.352163,0,-0.935939,-32.536705,-301.60976,1641.118019, 0.227169,0,-0.973855,-16.587068,-327.00976,1645.956308, 0.412793,0,-0.910825,-32.536705,-327.00976,1641.118019, 0.032814,0,-0.999461,0.000004,-327.00976,1647.590011, 0.162804,0,-0.986658,-16.587068,-301.60976,1645.956308, -0.032812,-0,-0.999462,0.000004,-301.60976,1647.590011, 0.162804,0,-0.986658,-16.587068,-301.60976,1645.956308, 0.032814,0,-0.999461,0.000004,-327.00976,1647.590011, 0.227169,0,-0.973855,-16.587068,-327.00976,1645.956308, 0.527987,0,0.849252,-47.235814,-301.60976,1491.873764, 0.412791,0,0.910826,-32.53653,-327.00976,1484.016855, 0.352161,0,0.935939,-32.53653,-301.60976,1484.016855, 0.412791,0,0.910826,-32.53653,-327.00976,1484.016855, 0.527987,0,0.849252,-47.235814,-301.60976,1491.873764, 0.582553,0,0.812793,-47.235814,-327.00976,1491.873764, 0.910825,0,0.412793,-78.550447,-301.60976,1530.030669, 0.849251,0,0.527989,-70.693505,-327.00976,1515.331404, 0.812791,0,0.582555,-70.693505,-301.60976,1515.331404, 0.849251,0,0.527989,-70.693505,-327.00976,1515.331404, 0.910825,0,0.412793,-78.550447,-301.60976,1530.030669, 0.935939,0,0.352163,-78.550447,-327.00976,1530.030669, 0.707108,0,-0.707106,-60.119981,-301.60976,1622.687419, 0.812793,0,-0.582553,-70.69361,-327.00976,1609.803386, 0.849252,0,-0.527987,-70.69361,-301.60976,1609.803386, 0.812793,0,-0.582553,-70.69361,-327.00976,1609.803386, 0.707108,0,-0.707106,-60.119981,-301.60976,1622.687419, 0.707108,0,-0.707106,-60.119981,-327.00976,1622.687419, 0.352161,0,0.935939,-32.53653,-301.60976,1484.016855, 0.227166,0,0.973856,-16.586883,-327.00976,1479.178602, 0.162802,0,0.986659,-16.586883,-301.60976,1479.178602, 0.227166,0,0.973856,-16.586883,-327.00976,1479.178602, 0.352161,0,0.935939,-32.53653,-301.60976,1484.016855, 0.412791,0,0.910826,-32.53653,-327.00976,1484.016855, 0.683523,0,0.729929,-60.119847,-301.60976,1502.447394, 0.582553,0,0.812793,-47.235814,-327.00976,1491.873764, 0.527987,0,0.849252,-47.235814,-301.60976,1491.873764, 0.582553,0,0.812793,-47.235814,-327.00976,1491.873764, 0.683523,0,0.729929,-60.119847,-301.60976,1502.447394, 0.729927,0,0.683525,-60.119847,-327.00976,1502.447394, 0.986659,0,-0.162802,-83.388773,-301.60976,1579.154455, 0.999462,0,-0.032812,-85.022439,-327.00976,1562.567379, 0.999461,0,0.032814,-85.022439,-301.60976,1562.567379, 0.999462,0,-0.032812,-85.022439,-327.00976,1562.567379, 0.986659,0,-0.162802,-83.388773,-301.60976,1579.154455, 0.973856,0,-0.227166,-83.388773,-327.00976,1579.154455, 0.162802,0,0.986659,-16.586883,-301.60976,1479.178602, 0.032812,0,0.999462,0.000193,-327.00976,1477.544936, -0.032814,-0,0.999461,0.000193,-301.60976,1477.544936, 0.032812,0,0.999462,0.000193,-327.00976,1477.544936, 0.162802,0,0.986659,-16.586883,-301.60976,1479.178602, 0.227166,0,0.973856,-16.586883,-327.00976,1479.178602, -0.032814,-0,0.999461,0.000193,-301.60976,1477.544936, -0.162804,-0,0.986658,16.587266,-327.00976,1479.178638, -0.227169,-0,0.973855,16.587266,-301.60976,1479.178638, -0.162804,-0,0.986658,16.587266,-327.00976,1479.178638, -0.032814,-0,0.999461,0.000193,-301.60976,1477.544936, 0.032812,0,0.999462,0.000193,-327.00976,1477.544936, -0.227169,-0,0.973855,16.587266,-301.60976,1479.178638, -0.382684,-0,0.923879,32.536903,-327.00976,1484.016927, -0.382684,-0,0.923879,32.536903,-301.60976,1484.016927, -0.382684,-0,0.923879,32.536903,-327.00976,1484.016927, -0.227169,-0,0.973855,16.587266,-301.60976,1479.178638, -0.162804,-0,0.986658,16.587266,-327.00976,1479.178638, -0.382684,-0,0.923879,32.536903,-327.00976,1484.016927, -0.527989,-0,0.849251,47.236168,-301.60976,1491.87387, -0.382684,-0,0.923879,32.536903,-301.60976,1484.016927, -0.527989,-0,0.849251,47.236168,-301.60976,1491.87387, -0.382684,-0,0.923879,32.536903,-327.00976,1484.016927, -0.582555,-0,0.812791,47.236168,-327.00976,1491.87387, -0.582555,-0,0.812791,47.236168,-327.00976,1491.87387, -0.707108,-0,0.707106,60.120178,-301.60976,1502.447527, -0.527989,-0,0.849251,47.236168,-301.60976,1491.87387, -0.707108,-0,0.707106,60.120178,-301.60976,1502.447527, -0.582555,-0,0.812791,47.236168,-327.00976,1491.87387, -0.707108,-0,0.707106,60.120178,-327.00976,1502.447527, -0.812793,-0,0.582553,70.693808,-327.00976,1515.331561, -0.707108,-0,0.707106,60.120178,-301.60976,1502.447527, -0.707108,-0,0.707106,60.120178,-327.00976,1502.447527, -0.707108,-0,0.707106,60.120178,-301.60976,1502.447527, -0.812793,-0,0.582553,70.693808,-327.00976,1515.331561, -0.849252,-0,0.527987,70.693808,-301.60976,1515.331561, -0.910826,-0,0.412791,78.550717,-327.00976,1530.030844, -0.849252,-0,0.527987,70.693808,-301.60976,1515.331561, -0.812793,-0,0.582553,70.693808,-327.00976,1515.331561, -0.849252,-0,0.527987,70.693808,-301.60976,1515.331561, -0.910826,-0,0.412791,78.550717,-327.00976,1530.030844, -0.935939,-0,0.352161,78.550717,-301.60976,1530.030844, -0.973856,-0,0.227166,83.388971,-327.00976,1545.980492, -0.935939,-0,0.352161,78.550717,-301.60976,1530.030844, -0.910826,-0,0.412791,78.550717,-327.00976,1530.030844, -0.935939,-0,0.352161,78.550717,-301.60976,1530.030844, -0.973856,-0,0.227166,83.388971,-327.00976,1545.980492, -0.986659,-0,0.162802,83.388971,-301.60976,1545.980492, -0.999462,-0,0.032812,85.022636,-327.00976,1562.567568, -0.986659,-0,0.162802,83.388971,-301.60976,1545.980492, -0.973856,-0,0.227166,83.388971,-327.00976,1545.980492, -0.986659,-0,0.162802,83.388971,-301.60976,1545.980492, -0.999462,-0,0.032812,85.022636,-327.00976,1562.567568, -0.999461,-0,-0.032814,85.022636,-301.60976,1562.567568, -0.986658,-0,-0.162804,83.388934,-327.00976,1579.15464, -0.999461,-0,-0.032814,85.022636,-301.60976,1562.567568, -0.999462,-0,0.032812,85.022636,-327.00976,1562.567568, -0.999461,-0,-0.032814,85.022636,-301.60976,1562.567568, -0.986658,-0,-0.162804,83.388934,-327.00976,1579.15464, -0.973855,-0,-0.227169,83.388934,-301.60976,1579.15464, -0.935939,-0,-0.352163,78.550645,-327.00976,1595.104277, -0.973855,-0,-0.227169,83.388934,-301.60976,1579.15464, -0.986658,-0,-0.162804,83.388934,-327.00976,1579.15464, -0.973855,-0,-0.227169,83.388934,-301.60976,1579.15464, -0.935939,-0,-0.352163,78.550645,-327.00976,1595.104277, -0.910825,-0,-0.412793,78.550645,-301.60976,1595.104277, -0.849251,-0,-0.527989,70.693703,-327.00976,1609.803543, -0.910825,-0,-0.412793,78.550645,-301.60976,1595.104277, -0.935939,-0,-0.352163,78.550645,-327.00976,1595.104277, -0.910825,-0,-0.412793,78.550645,-301.60976,1595.104277, -0.849251,-0,-0.527989,70.693703,-327.00976,1609.803543, -0.812791,-0,-0.582555,70.693703,-301.60976,1609.803543, -0.707106,-0,-0.707108,60.120045,-327.00976,1622.687553, -0.812791,-0,-0.582555,70.693703,-301.60976,1609.803543, -0.849251,-0,-0.527989,70.693703,-327.00976,1609.803543, -0.812791,-0,-0.582555,70.693703,-301.60976,1609.803543, -0.707106,-0,-0.707108,60.120045,-327.00976,1622.687553, -0.707106,-0,-0.707108,60.120045,-301.60976,1622.687553, -0.707106,-0,-0.707108,60.120045,-327.00976,1622.687553, -0.582553,-0,-0.812793,47.236011,-301.60976,1633.261182, -0.707106,-0,-0.707108,60.120045,-301.60976,1622.687553, -0.582553,-0,-0.812793,47.236011,-301.60976,1633.261182, -0.707106,-0,-0.707108,60.120045,-327.00976,1622.687553, -0.527987,-0,-0.849252,47.236011,-327.00976,1633.261182, -0.527987,-0,-0.849252,47.236011,-327.00976,1633.261182, -0.412791,-0,-0.910826,32.536728,-301.60976,1641.118092, -0.582553,-0,-0.812793,47.236011,-301.60976,1633.261182, -0.412791,-0,-0.910826,32.536728,-301.60976,1641.118092, -0.527987,-0,-0.849252,47.236011,-327.00976,1633.261182, -0.352161,-0,-0.935939,32.536728,-327.00976,1641.118092, -0.352161,-0,-0.935939,32.536728,-327.00976,1641.118092, -0.227166,-0,-0.973856,16.58708,-301.60976,1645.956345, -0.412791,-0,-0.910826,32.536728,-301.60976,1641.118092, -0.227166,-0,-0.973856,16.58708,-301.60976,1645.956345, -0.352161,-0,-0.935939,32.536728,-327.00976,1641.118092, -0.162802,-0,-0.986659,16.58708,-327.00976,1645.956345, -1,-0,-0.000001,-29.712222,-140.14704,1681.416397, -0.947173,-0,-0.320723,-27.450503,-0,1670.046016, -0.896537,-0,-0.442969,-27.450503,-140.14704,1670.046016, -0.947173,-0,-0.320723,-27.450503,-0,1670.046016, -1,-0,-0.000001,-29.712222,-140.14704,1681.416397, -1,-0,-0.000001,-29.712222,-0,1681.416397, 0.382684,-0,-0.923879,11.370427,-0,1653.965901, 0.000001,-0,-1,0.000046,-140.14704,1651.704181, 0.000001,-0,-1,0.000046,-0,1651.704181, 0.000001,-0,-1,0.000046,-140.14704,1651.704181, 0.382684,-0,-0.923879,11.370427,-0,1653.965901, 0.382684,-0,-0.923879,11.370427,-140.14704,1653.965901, -0.896538,-0,0.442967,-27.450523,-140.14704,1692.786782, -0.707107,-0,0.707106,-21.009727,-0,1702.426133, -0.947174,-0,0.320721,-27.450523,-0,1692.786782, -0.707107,-0,0.707106,-21.009727,-0,1702.426133, -0.896538,-0,0.442967,-27.450523,-140.14704,1692.786782, -0.707107,-0,0.707106,-21.009727,-140.14704,1702.426133, 0.896538,0,-0.442967,27.450563,-0,1670.046065, 0.707107,-0,-0.707106,21.009767,-140.14704,1660.406714, 0.707107,0,-0.707106,21.009767,-0,1660.406714, 0.707107,-0,-0.707106,21.009767,-140.14704,1660.406714, 0.896538,0,-0.442967,27.450563,-0,1670.046065, 0.947174,0,-0.320721,27.450563,-140.14704,1670.046065, -1,-0,-0.000001,-29.712222,-140.14704,1681.416397, -0.947174,-0,0.320721,-27.450523,-0,1692.786782, -1,-0,-0.000001,-29.712222,-0,1681.416397, -0.947174,-0,0.320721,-27.450523,-0,1692.786782, -1,-0,-0.000001,-29.712222,-140.14704,1681.416397, -0.896538,-0,0.442967,-27.450523,-140.14704,1692.786782, 0.000001,-0,-1,0.000046,-140.14704,1651.704181, -0.320721,-0,-0.947174,-11.370339,-0,1653.965881, 0.000001,-0,-1,0.000046,-0,1651.704181, -0.320721,-0,-0.947174,-11.370339,-0,1653.965881, 0.000001,-0,-1,0.000046,-140.14704,1651.704181, -0.442967,-0,-0.896538,-11.370339,-140.14704,1653.965881, -0.382684,-0,0.923879,-11.370387,-140.14704,1708.866946, -0.000001,0,1,-0.000006,-0,1711.128666, -0.382684,-0,0.923879,-11.370387,-0,1708.866946, -0.000001,0,1,-0.000006,-0,1711.128666, -0.382684,-0,0.923879,-11.370387,-140.14704,1708.866946, -0.000001,0,1,-0.000006,-140.14704,1711.128666 }; static const struct gllist robot_rotator_half_frame = { GL_N3F_V3F, GL_TRIANGLES, 1290, robot_rotator_half_data, 0 }; const struct gllist *robot_rotator_half = &robot_rotator_half_frame; xscreensaver-5.36/hacks/glx/robot-wireframe.c000664 000767 000024 00000011670 12701612217 021277 0ustar00jwzstaff000000 000000 /* Generated from "robot-wireframe.dxf" on Aug-22-2014. Wireframe. */ #include "gllist.h" static const float robot_wireframe_data[] = { 729.885788,421.399756,2459.256694, 959.278463,553.839679,1921.436233, 729.885788,421.399756,2824.242214, -0,842.799512,2824.242214, -0,842.799512,2824.242214, -0,842.799512,2459.256694, -0,842.799512,2459.256694, 729.885788,421.399756,2459.256694, 0,0,3212.282649, -0,842.799512,2824.242214, 665.532008,384.245084,587.016307, -0,768.490168,587.016307, 750.739667,433.439749,887.912962, 0,866.879498,887.912962, 690.700937,398.776372,934.321154, 750.739667,433.439749,887.912962, 959.278463,-553.839679,1921.436233, 959.278463,553.839679,1921.436233, 959.278463,553.839679,1921.436233, 690.700937,398.776372,934.321154, 690.700937,-398.776372,934.321154, 690.700937,398.776372,934.321154, 665.532008,-384.245084,587.016307, 665.532008,384.245084,587.016307, 750.739667,-433.439749,887.912962, 750.739667,433.439749,887.912962, 750.739667,433.439749,887.912962, 665.532008,384.245084,587.016307, -0,-797.552743,934.321154, 690.700937,-398.776372,934.321154, -0,-1107.679357,1921.436233, 959.278463,-553.839679,1921.436233, 959.278463,-553.839679,1921.436233, 690.700937,-398.776372,934.321154, 0,-866.879498,887.912962, -0,-797.552743,934.321154, -0,-797.552743,934.321154, -0,-1107.679357,1921.436233, 690.700937,-398.776372,934.321154, 750.739667,-433.439749,887.912962, 750.739667,-433.439749,887.912962, 665.532008,-384.245084,587.016307, 729.885788,421.399756,2824.242214, 729.885788,421.399756,2459.256694, 729.885788,421.399756,2459.256694, 729.885788,-421.399756,2459.256694, 729.885788,-421.399756,2824.242214, 729.885788,421.399756,2824.242214, 0,-866.879498,887.912962, 750.739667,-433.439749,887.912962, 0,-768.490168,587.016307, 0,-866.879498,887.912962, 0,-768.490168,587.016307, 665.532008,-384.245084,587.016307, 0,0,3212.282649, 729.885788,-421.399756,2824.242214, -0,-1107.679357,1921.436233, 0,-842.799512,2459.256694, 729.885788,-421.399756,2459.256694, 959.278463,-553.839679,1921.436233, 0,-842.799512,2824.242214, 0,0,3212.282649, 0,0,3212.282649, 729.885788,421.399756,2824.242214, 0,866.879498,887.912962, -0,768.490168,587.016307, 690.700937,398.776372,934.321154, 0,797.552743,934.321154, 0,797.552743,934.321154, 0,866.879498,887.912962, 959.278463,553.839679,1921.436233, 0,1107.679357,1921.436233, 0,1107.679357,1921.436233, 0,797.552743,934.321154, -0,842.799512,2459.256694, 0,1107.679357,1921.436233, -0,842.799512,2824.242214, -729.885788,421.399756,2824.242214, -729.885788,421.399756,2824.242214, -729.885788,421.399756,2459.256694, -729.885788,421.399756,2459.256694, -0,842.799512,2459.256694, 0,0,3212.282649, -729.885788,421.399756,2824.242214, -0,768.490168,587.016307, -665.532008,384.245084,587.016307, 0,866.879498,887.912962, -750.739667,433.439749,887.912962, -750.739667,433.439749,887.912962, -665.532008,384.245084,587.016307, 0,797.552743,934.321154, -690.700937,398.776372,934.321154, -690.700937,398.776372,934.321154, -750.739667,433.439749,887.912962, 0,1107.679357,1921.436233, -959.278463,553.839679,1921.436233, -959.278463,553.839679,1921.436233, -690.700937,398.776372,934.321154, -729.885788,421.399756,2459.256694, -959.278463,553.839679,1921.436233, -729.885788,421.399756,2824.242214, -729.885788,-421.399756,2824.242214, -729.885788,-421.399756,2824.242214, -729.885788,-421.399756,2459.256694, -729.885788,-421.399756,2459.256694, -729.885788,421.399756,2459.256694, 0,0,3212.282649, -729.885788,-421.399756,2824.242214, -665.532008,384.245084,587.016307, -665.532008,-384.245084,587.016307, -750.739667,433.439749,887.912962, -750.739667,-433.439749,887.912962, -750.739667,-433.439749,887.912962, -665.532008,-384.245084,587.016307, -690.700937,398.776372,934.321154, -690.700937,-398.776372,934.321154, -690.700937,-398.776372,934.321154, -750.739667,-433.439749,887.912962, -959.278463,553.839679,1921.436233, -959.278463,-553.839679,1921.436233, -959.278463,-553.839679,1921.436233, -690.700937,-398.776372,934.321154, -729.885788,-421.399756,2459.256694, -959.278463,-553.839679,1921.436233, -729.885788,-421.399756,2824.242214, 0,-842.799512,2824.242214, 0,-842.799512,2459.256694, -729.885788,-421.399756,2459.256694, -665.532008,-384.245084,587.016307, 0,-768.490168,587.016307, -750.739667,-433.439749,887.912962, 0,-866.879498,887.912962, -690.700937,-398.776372,934.321154, -0,-797.552743,934.321154, -959.278463,-553.839679,1921.436233, -0,-1107.679357,1921.436233, 0,-842.799512,2459.256694, 0,-842.799512,2824.242214, 0,-842.799512,2824.242214, 729.885788,-421.399756,2824.242214, 729.885788,-421.399756,2824.242214, 729.885788,-421.399756,2459.256694, 729.885788,-421.399756,2459.256694, 0,-842.799512,2459.256694 }; static const struct gllist robot_wireframe_frame = { GL_V3F, GL_LINES, 144, robot_wireframe_data, 0 }; const struct gllist *robot_wireframe = &robot_wireframe_frame; xscreensaver-5.36/hacks/glx/cityflow.c000644 000767 000024 00000033127 12701612217 020032 0ustar00jwzstaff000000 000000 /* cityflow, Copyright (c) 2014 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. */ #define DEFAULTS "*delay: 20000 \n" \ "*count: 800 \n" \ "*showFPS: False \n" \ "*wireframe: False \n" \ # define refresh_cube 0 # define release_cube 0 #undef countof #define countof(x) (sizeof((x))/sizeof((*x))) #include "xlockmore.h" #include "colors.h" #include "gltrackball.h" #include #ifdef USE_GL /* whole file */ #define DEF_SKEW "12" #define DEF_WAVES "6" #define DEF_WAVE_SPEED "25" #define DEF_WAVE_RADIUS "256" static int texture_size = 512; typedef struct { GLfloat x, y, z; GLfloat w, h, d; GLfloat cth, sth; } cube; typedef struct { int x, y; double xth, yth; } wave_src; typedef struct { int nwaves; int radius; int speed; wave_src *srcs; int *heights; } waves; typedef struct { GLXContext *glx_context; trackball_state *trackball; Bool button_down_p; GLuint cube_list; int cube_polys; int ncubes; cube *cubes; waves *waves; GLfloat min_x, max_x, min_y, max_y; int texture_width, texture_height; int ncolors; XColor *colors; } cube_configuration; static cube_configuration *ccs = NULL; static int wave_count; static int wave_speed; static int wave_radius; static int skew; static XrmOptionDescRec opts[] = { {"-waves", ".waves", XrmoptionSepArg, 0 }, {"-wave-speed", ".waveSpeed", XrmoptionSepArg, 0 }, {"-wave-radius", ".waveRadius", XrmoptionSepArg, 0 }, {"-skew", ".skew", XrmoptionSepArg, 0 }, }; static argtype vars[] = { {&wave_count, "waves", "Waves", DEF_WAVES, t_Int}, {&wave_speed, "waveSpeed", "WaveSpeed", DEF_WAVE_SPEED, t_Int}, {&wave_radius,"waveRadius","WaveRadius", DEF_WAVE_RADIUS,t_Int}, {&skew, "skew", "Skew", DEF_SKEW,t_Int}, }; ENTRYPOINT ModeSpecOpt cube_opts = { countof(opts), opts, countof(vars), vars, NULL}; ENTRYPOINT void reshape_cube (ModeInfo *mi, int width, int height) { GLfloat h = (GLfloat) height / (GLfloat) width; glViewport (0, 0, (GLint) width, (GLint) height); glMatrixMode(GL_PROJECTION); glLoadIdentity(); /* For this one it's really important to minimize the distance between near and far. */ gluPerspective (30, 1/h, 10, 50); glMatrixMode(GL_MODELVIEW); glLoadIdentity(); gluLookAt( 0.0, 0.0, 30.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0); glClear(GL_COLOR_BUFFER_BIT); } static void reset_colors (ModeInfo *mi) { cube_configuration *cc = &ccs[MI_SCREEN(mi)]; make_smooth_colormap (0, 0, 0, cc->colors, &cc->ncolors, False, 0, False); if (! MI_IS_WIREFRAME(mi)) glClearColor (cc->colors[0].red / 65536.0, cc->colors[0].green / 65536.0, cc->colors[0].blue / 65536.0, 1); } static void tweak_cubes (ModeInfo *mi) { cube_configuration *cc = &ccs[MI_SCREEN(mi)]; int i; for (i = 0; i < cc->ncubes; i++) { cube *cube = &cc->cubes[i]; cube->x += (frand(2)-1)*0.01; cube->y += (frand(2)-1)*0.01; cube->z += (frand(2)-1)*0.01; } } ENTRYPOINT Bool cube_handle_event (ModeInfo *mi, XEvent *event) { cube_configuration *cc = &ccs[MI_SCREEN(mi)]; /* Neutralize any vertical motion */ GLfloat rot = current_device_rotation(); Bool rotp = ((rot > 45 && rot < 135) || (rot < -45 && rot > -135)); if (event->xany.type == ButtonPress || event->xany.type == ButtonRelease) { if (rotp) event->xbutton.x = MI_WIDTH(mi) / 2; else event->xbutton.y = MI_HEIGHT(mi) / 2; } else if (event->xany.type == MotionNotify) { if (rotp) event->xmotion.x = MI_WIDTH(mi) / 2; else event->xmotion.y = MI_HEIGHT(mi) / 2; } if (gltrackball_event_handler (event, cc->trackball, MI_WIDTH (mi), MI_HEIGHT (mi), &cc->button_down_p)) return True; else if (screenhack_event_helper (MI_DISPLAY(mi), MI_WINDOW(mi), event)) { reset_colors (mi); tweak_cubes (mi); gltrackball_reset (cc->trackball); return True; } return False; } /* Waves. Adapted from ../hacks/interference.c by Hannu Mallat. */ static void init_wave (ModeInfo *mi) { cube_configuration *cc = &ccs[MI_SCREEN(mi)]; waves *ww; int i; cc->waves = ww = (waves *) calloc (sizeof(*cc->waves), 1); ww->nwaves = wave_count; ww->radius = wave_radius; ww->speed = wave_speed; ww->heights = (int *) calloc (sizeof(*ww->heights), ww->radius); ww->srcs = (wave_src *) calloc (sizeof(*ww->srcs), ww->nwaves); for (i = 0; i < ww->radius; i++) { float max = (cc->ncolors * (ww->radius - i) / (float) ww->radius); ww->heights[i] = ((max + max * cos(i / 50.0)) / 2.0); } for (i = 0; i < ww->nwaves; i++) { ww->srcs[i].xth = frand(2.0) * M_PI; ww->srcs[i].yth = frand(2.0) * M_PI; } cc->texture_width = texture_size; cc->texture_height = texture_size; } static int interference_point (cube_configuration *cc, int x, int y) { /* Compute the effect of the waves on a pixel. */ waves *ww = cc->waves; int result = 0; int i; for (i = 0; i < ww->nwaves; i++) { int dx = x - ww->srcs[i].x; int dy = y - ww->srcs[i].y; int dist = sqrt (dx*dx + dy*dy); result += (dist >= ww->radius ? 0 : ww->heights[dist]); } result *= 0.4; if (result > 255) result = 255; return result; } static void interference (ModeInfo *mi) { cube_configuration *cc = &ccs[MI_SCREEN(mi)]; waves *ww = cc->waves; int i; /* Move the wave origins around */ for (i = 0; i < ww->nwaves; i++) { ww->srcs[i].xth += (ww->speed / 1000.0); if (ww->srcs[i].xth > 2*M_PI) ww->srcs[i].xth -= 2*M_PI; ww->srcs[i].yth += (ww->speed / 1000.0); if (ww->srcs[i].yth > 2*M_PI) ww->srcs[i].yth -= 2*M_PI; ww->srcs[i].x = (cc->texture_width/2 + (cos (ww->srcs[i].xth) * cc->texture_width / 2)); ww->srcs[i].y = (cc->texture_height/2 + (cos (ww->srcs[i].yth) * cc->texture_height / 2)); } } /* qsort comparator for sorting cubes by y position */ static int cmp_cubes (const void *aa, const void *bb) { const cube *a = (cube *) aa; const cube *b = (cube *) bb; return ((int) (b->y * 10000) - (int) (a->y * 10000)); } ENTRYPOINT void init_cube (ModeInfo *mi) { int i; cube_configuration *cc; if (!ccs) { ccs = (cube_configuration *) calloc (MI_NUM_SCREENS(mi), sizeof (cube_configuration)); if (!ccs) { fprintf(stderr, "%s: out of memory\n", progname); exit(1); } } cc = &ccs[MI_SCREEN(mi)]; if ((cc->glx_context = init_GL(mi)) != NULL) { reshape_cube (mi, MI_WIDTH(mi), MI_HEIGHT(mi)); } cc->trackball = gltrackball_init (True); cc->ncolors = 256; cc->colors = (XColor *) calloc(cc->ncolors, sizeof(XColor)); reset_colors (mi); init_wave (mi); cc->ncubes = MI_COUNT (mi); if (cc->ncubes < 1) cc->ncubes = 1; cc->cubes = (cube *) calloc (sizeof(cube), cc->ncubes); for (i = 0; i < cc->ncubes; i++) { /* Set the size to roughly cover a 2x2 square on average. */ GLfloat scale = 1.8 / sqrt (cc->ncubes); cube *cube = &cc->cubes[i]; cube->x = (frand(1)-0.5); cube->y = (frand(1)-0.5); cube->z = frand(0.12); double th = -(skew ? frand(skew) : 0) * M_PI / 180; cube->cth = cos(th); cube->sth = sin(th); cube->w = scale * (frand(1) + 0.2); cube->d = scale * (frand(1) + 0.2); if (cube->x < cc->min_x) cc->min_x = cube->x; if (cube->y < cc->min_y) cc->min_y = cube->y; if (cube->x > cc->max_x) cc->max_x = cube->x; if (cube->y > cc->max_y) cc->max_y = cube->y; } /* Sorting by depth improves frame rate slightly. With 6000 polygons we get: 3.9 FPS unsorted; 3.1 FPS back to front; 4.3 FPS front to back. */ qsort (cc->cubes, cc->ncubes, sizeof(*cc->cubes), cmp_cubes); } static void animate_cubes (ModeInfo *mi) { cube_configuration *cc = &ccs[MI_SCREEN(mi)]; int i; for (i = 0; i < cc->ncubes; i++) { cube *cube = &cc->cubes[i]; GLfloat fx = (cube->x - cc->min_x) / (cc->max_x - cc->min_x); GLfloat fy = (cube->y - cc->min_y) / (cc->max_y - cc->min_y); int x = (int) (cc->texture_width * fx) % cc->texture_width; int y = (int) (cc->texture_height * fy) % cc->texture_height; unsigned char v = interference_point (cc, x, y); cube->h = cube->z + (v / 256.0 / 2.5) + 0.1; } } ENTRYPOINT void draw_cube (ModeInfo *mi) { cube_configuration *cc = &ccs[MI_SCREEN(mi)]; int wire = MI_IS_WIREFRAME(mi); Display *dpy = MI_DISPLAY(mi); Window window = MI_WINDOW(mi); int i; if (!cc->glx_context) return; mi->polygon_count = 0; glXMakeCurrent(MI_DISPLAY(mi), MI_WINDOW(mi), *(cc->glx_context)); interference (mi); animate_cubes (mi); glShadeModel(GL_FLAT); glEnable(GL_DEPTH_TEST); glEnable(GL_NORMALIZE); glEnable(GL_CULL_FACE); /* glEnable (GL_POLYGON_OFFSET_FILL); */ glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glPushMatrix (); gltrackball_rotate (cc->trackball); glRotatef (-180, 1, 0, 0); { GLfloat s = 15; glScalef (s, s, s); } glRotatef (-90, 1, 0, 0); glRotatef(current_device_rotation(), 0, 1, 0); glTranslatef (-0.18, 0, -0.18); glRotatef (37, 1, 0, 0); glRotatef (20, 0, 0, 1); glScalef (2.1, 2.1, 2.1); /* Position lights after device rotation. */ if (!wire) { static const GLfloat pos[4] = {0.0, 0.25, -1.0, 0.0}; static const GLfloat amb[4] = {0.2, 0.2, 0.2, 1.0}; static const GLfloat dif[4] = {1.0, 1.0, 1.0, 1.0}; glLightfv(GL_LIGHT0, GL_POSITION, pos); glLightfv(GL_LIGHT0, GL_AMBIENT, amb); glLightfv(GL_LIGHT0, GL_DIFFUSE, dif); glEnable(GL_LIGHTING); glEnable(GL_LIGHT0); glEnable(GL_DEPTH_TEST); glEnable(GL_CULL_FACE); } glBegin (wire ? GL_LINES : GL_QUADS); for (i = 0; i < cc->ncubes; i++) { cube *cube = &cc->cubes[i]; GLfloat cth = cube->cth; GLfloat sth = cube->sth; GLfloat x = cth*cube->x + sth*cube->y; GLfloat y = -sth*cube->x + cth*cube->y; GLfloat w = cube->w/2; GLfloat h = cube->h/2; GLfloat d = cube->d/2; GLfloat bottom = 5; GLfloat xw = cth*w, xd = sth*d; GLfloat yw = -sth*w, yd = cth*d; GLfloat color[4]; int c = cube->h * cc->ncolors * 0.7; c %= cc->ncolors; color[0] = cc->colors[c].red / 65536.0; color[1] = cc->colors[c].green / 65536.0; color[2] = cc->colors[c].blue / 65536.0; color[3] = 1.0; glMaterialfv (GL_FRONT, GL_AMBIENT_AND_DIFFUSE, color); /* Putting this in a display list makes no performance difference. */ if (! wire) { glNormal3f (0, 0, -1); /* top */ glVertex3f (x+xw+xd, y+yw+yd, -h); glVertex3f (x+xw-xd, y+yw-yd, -h); glVertex3f (x-xw-xd, y-yw-yd, -h); glVertex3f (x-xw+xd, y-yw+yd, -h); mi->polygon_count++; glNormal3f (sth, cth, 0); /* front */ glVertex3f (x+xw+xd, y+yw+yd, bottom); glVertex3f (x+xw+xd, y+yw+yd, -h); glVertex3f (x-xw+xd, y-yw+yd, -h); glVertex3f (x-xw+xd, y-yw+yd, bottom); mi->polygon_count++; glNormal3f (cth, -sth, 0); /* right */ glVertex3f (x+xw-xd, y+yw-yd, -h); glVertex3f (x+xw+xd, y+yw+yd, -h); glVertex3f (x+xw+xd, y+yw+yd, bottom); glVertex3f (x+xw-xd, y+yw-yd, bottom); mi->polygon_count++; # if 0 /* Omitting these makes no performance difference. */ glNormal3f (-cth, sth, 0); /* left */ glVertex3f (x-xw+xd, y-yw+yd, -h); glVertex3f (x-xw-xd, y-yw-yd, -h); glVertex3f (x-xw-xd, y-yw-yd, bottom); glVertex3f (x-xw+xd, y-yw+yd, bottom); mi->polygon_count++; glNormal3f (-sth, -cth, 0); /* back */ glVertex3f (x-xw-xd, y-yw-yd, bottom); glVertex3f (x-xw-xd, y-yw-yd, -h); glVertex3f (x+xw-xd, y+yw-yd, -h); glVertex3f (x+xw-xd, y+yw-yd, bottom); mi->polygon_count++; # endif } else { glNormal3f (0, 0, -1); /* top */ glVertex3f (x+xw+xd, y+yw+yd, -h); glVertex3f (x+xw-xd, y+yw-yd, -h); glVertex3f (x+xw-xd, y+yw-yd, -h); glVertex3f (x-xw-xd, y-yw-yd, -h); glVertex3f (x-xw-xd, y-yw-yd, -h); glVertex3f (x-xw+xd, y-yw+yd, -h); glVertex3f (x-xw+xd, y-yw+yd, -h); glVertex3f (x+xw+xd, y+yw+yd, -h); mi->polygon_count++; } } glEnd(); glPolygonOffset (0, 0); # if 0 glDisable(GL_DEPTH_TEST); /* Outline the playfield */ glColor3f(1,1,1); glBegin(GL_LINE_LOOP); glVertex3f (-0.5, -0.5, 0); glVertex3f (-0.5, 0.5, 0); glVertex3f ( 0.5, 0.5, 0); glVertex3f ( 0.5, -0.5, 0); glEnd(); # endif glPopMatrix(); if (mi->fps_p) do_fps (mi); glFinish(); glXSwapBuffers(dpy, window); } XSCREENSAVER_MODULE_2 ("Cityflow", cityflow, cube) #endif /* USE_GL */ xscreensaver-5.36/hacks/glx/romanboy.c000664 000767 000024 00000134526 12701612217 020027 0ustar00jwzstaff000000 000000 /* romanboy --- Shows a 3d immersion of the real projective plane that rotates in 3d or on which you can walk and that can deform smoothly between the Roman surface and the Boy surface. */ #if 0 static const char sccsid[] = "@(#)romanboy.c 1.1 14/10/03 xlockmore"; #endif /* Copyright (c) 2013-2014 Carsten Steger . */ /* * Permission to use, copy, modify, and distribute this software and its * documentation for any purpose and without fee is hereby granted, * provided that the above copyright notice appear in all copies and that * both that copyright notice and this permission notice appear in * supporting documentation. * * This file is provided AS IS with no warranties of any kind. The author * shall have no liability with respect to the infringement of copyrights, * trade secrets or any patents by this file or any part thereof. In no * event will the author be liable for any lost revenue or profits or * other special, indirect and consequential damages. * * REVISION HISTORY: * C. Steger - 14/10/03: Initial version */ /* * This program shows a 3d immersion of the real projective plane * that smoothly deforms between the Roman surface and the Boy * surface. You can walk on the projective plane or turn in 3d. The * smooth deformation (homotopy) between these two famous immersions * of the real projective plane was constructed by François Apéry. * * The real projective plane is a non-orientable surface. To make * this apparent, the two-sided color mode can be used. * Alternatively, orientation markers (curling arrows) can be drawn as * a texture map on the surface of the projective plane. While * walking on the projective plane, you will notice that the * orientation of the curling arrows changes (which it must because * the projective plane is non-orientable). * * The real projective plane is a model for the projective geometry in * 2d space. One point can be singled out as the origin. A line can * be singled out as the line at infinity, i.e., a line that lies at * an infinite distance to the origin. The line at infinity is * topologically a circle. Points on the line at infinity are also * used to model directions in projective geometry. The origin can be * visualized in different manners. When using distance colors, the * origin is the point that is displayed as fully saturated red, which * is easier to see as the center of the reddish area on the * projective plane. Alternatively, when using distance bands, the * origin is the center of the only band that projects to a disk. * When using direction bands, the origin is the point where all * direction bands collapse to a point. Finally, when orientation * markers are being displayed, the origin the the point where all * orientation markers are compressed to a point. The line at * infinity can also be visualized in different ways. When using * distance colors, the line at infinity is the line that is displayed * as fully saturated magenta. When two-sided colors are used, the * line at infinity lies at the points where the red and green "sides" * of the projective plane meet (of course, the real projective plane * only has one side, so this is a design choice of the * visualization). Alternatively, when orientation markers are being * displayed, the line at infinity is the place where the orientation * markers change their orientation. * * Note that when the projective plane is displayed with bands, the * orientation markers are placed in the middle of the bands. For * distance bands, the bands are chosen in such a way that the band at * the origin is only half as wide as the remaining bands, which * results in a disk being displayed at the origin that has the same * diameter as the remaining bands. This choice, however, also * implies that the band at infinity is half as wide as the other * bands. Since the projective plane is attached to itself (in a * complicated fashion) at the line at infinity, effectively the band * at infinity is again as wide as the remaining bands. However, * since the orientation markers are displayed in the middle of the * bands, this means that only one half of the orientation markers * will be displayed twice at the line at infinity if distance bands * are used. If direction bands are used or if the projective plane * is displayed as a solid surface, the orientation markers are * displayed fully at the respective sides of the line at infinity. * * The immersed projective plane can be projected to the screen either * perspectively or orthographically. When using the walking modes, * perspective projection to the screen will be used. * * There are three display modes for the projective plane: mesh * (wireframe), solid, or transparent. Furthermore, the appearance of * the projective plane can be as a solid object or as a set of * see-through bands. The bands can be distance bands, i.e., bands * that lie at increasing distances from the origin, or direction * bands, i.e., bands that lie at increasing angles with respect to * the origin. * * When the projective plane is displayed with direction bands, you * will be able to see that each direction band (modulo the "pinching" * at the origin) is a Moebius strip, which also shows that the * projective plane is non-orientable. * * Finally, the colors with with the projective plane is drawn can be * set to two-sided, distance, or direction. In two-sided mode, the * projective plane is drawn with red on one "side" and green on the * "other side". As described above, the projective plane only has * one side, so the color jumps from red to green along the line at * infinity. This mode enables you to see that the projective plane * is non-orientable. In distance mode, the projective plane is * displayed with fully saturated colors that depend on the distance * of the points on the projective plane to the origin. The origin is * displayed in red, the line at infinity is displayed in magenta. If * the projective plane is displayed as distance bands, each band will * be displayed with a different color. In direction mode, the * projective plane is displayed with fully saturated colors that * depend on the angle of the points on the projective plane with * respect to the origin. Angles in opposite directions to the origin * (e.g., 15 and 205 degrees) are displayed in the same color since * they are projectively equivalent. If the projective plane is * displayed as direction bands, each band will be displayed with a * different color. * * The rotation speed for each of the three coordinate axes around * which the projective plane rotates can be chosen. * * Furthermore, in the walking mode the walking direction in the 2d * base square of the projective plane and the walking speed can be * chosen. The walking direction is measured as an angle in degrees * in the 2d square that forms the coordinate system of the surface of * the projective plane. A value of 0 or 180 means that the walk is * along a circle at a randomly chosen distance from the origin * (parallel to a distance band). A value of 90 or 270 means that the * walk is directly from the origin to the line at infinity and back * (analogous to a direction band). Any other value results in a * curved path from the origin to the line at infinity and back. * * By default, the immersion of the real projective plane smoothly * deforms between the Roman and Boy surfaces. It is possible to * choose the speed of the deformation. Furthermore, it is possible * to switch the deformation off. It is also possible to determine * the initial deformation of the immersion. This is mostly useful if * the deformation is switched off, in which case it will determine * the appearance of the surface. * * As a final option, it is possible to display generalized versions * of the immersion discussed above by specifying the order of the * surface. The default surface order of 3 results in the immersion * of the real projective described above. The surface order can be * chosen between 2 and 9. Odd surface orders result in generalized * immersions of the real projective plane, while even numbers result * in a immersion of a topological sphere (which is orientable). The * most interesting even case is a surface order of 2, which results * in an immersion of the halfway model of Morin's sphere eversion (if * the deformation is switched off). * * This program is inspired by François Apéry's book "Models of the * Real Projective Plane", Vieweg, 1987. */ #include "curlicue.h" #ifndef M_PI #define M_PI 3.14159265358979323846 #endif #define DISP_WIREFRAME 0 #define DISP_SURFACE 1 #define DISP_TRANSPARENT 2 #define NUM_DISPLAY_MODES 3 #define APPEARANCE_SOLID 0 #define APPEARANCE_DISTANCE_BANDS 1 #define APPEARANCE_DIRECTION_BANDS 2 #define NUM_APPEARANCES 3 #define COLORS_TWOSIDED 0 #define COLORS_DISTANCE 1 #define COLORS_DIRECTION 2 #define NUM_COLORS 3 #define VIEW_WALK 0 #define VIEW_TURN 1 #define NUM_VIEW_MODES 2 #define DISP_PERSPECTIVE 0 #define DISP_ORTHOGRAPHIC 1 #define NUM_DISP_MODES 2 #define DEF_DISPLAY_MODE "random" #define DEF_APPEARANCE "random" #define DEF_COLORS "random" #define DEF_VIEW_MODE "random" #define DEF_MARKS "False" #define DEF_DEFORM "True" #define DEF_PROJECTION "random" #define DEF_SPEEDX "1.1" #define DEF_SPEEDY "1.3" #define DEF_SPEEDZ "1.5" #define DEF_WALK_DIRECTION "83.0" #define DEF_WALK_SPEED "20.0" #define DEF_DEFORM_SPEED "10.0" #define DEF_INIT_DEFORM "1000.0" #define DEF_SURFACE_ORDER "3" #ifdef STANDALONE # define DEFAULTS "*delay: 10000 \n" \ "*showFPS: False \n" \ # define refresh_romanboy 0 # include "xlockmore.h" /* from the xscreensaver distribution */ #else /* !STANDALONE */ # include "xlock.h" /* from the xlockmore distribution */ #endif /* !STANDALONE */ #ifdef USE_GL #ifndef HAVE_JWXYZ # include #endif #include "gltrackball.h" #include #ifdef USE_MODULES ModStruct romanboy_description = {"romanboy", "init_romanboy", "draw_romanboy", "release_romanboy", "draw_romanboy", "change_romanboy", NULL, &romanboy_opts, 25000, 1, 1, 1, 1.0, 4, "", "Rotate a 3d immersion of the real projective plane in 3d or walk on it", 0, NULL}; #endif static char *mode; static int display_mode; static char *appear; static int appearance; static char *color_mode; static int colors; static char *view_mode; static int view; static Bool marks; static Bool deform; static char *proj; static int projection; static float speed_x; static float speed_y; static float speed_z; static float walk_direction; static float walk_speed; static float deform_speed; static float init_deform; static int surface_order; static XrmOptionDescRec opts[] = { {"-mode", ".displayMode", XrmoptionSepArg, 0 }, {"-wireframe", ".displayMode", XrmoptionNoArg, "wireframe" }, {"-surface", ".displayMode", XrmoptionNoArg, "surface" }, {"-transparent", ".displayMode", XrmoptionNoArg, "transparent" }, {"-appearance", ".appearance", XrmoptionSepArg, 0 }, {"-solid", ".appearance", XrmoptionNoArg, "solid" }, {"-distance-bands", ".appearance", XrmoptionNoArg, "distance-bands" }, {"-direction-bands", ".appearance", XrmoptionNoArg, "direction-bands" }, {"-colors", ".colors", XrmoptionSepArg, 0 }, {"-twosided-colors", ".colors", XrmoptionNoArg, "two-sided" }, {"-distance-colors", ".colors", XrmoptionNoArg, "distance" }, {"-direction-colors", ".colors", XrmoptionNoArg, "direction" }, {"-view-mode", ".viewMode", XrmoptionSepArg, 0 }, {"-walk", ".viewMode", XrmoptionNoArg, "walk" }, {"-turn", ".viewMode", XrmoptionNoArg, "turn" }, {"-deform", ".deform", XrmoptionNoArg, "on"}, {"+deform", ".deform", XrmoptionNoArg, "off"}, {"-orientation-marks", ".marks", XrmoptionNoArg, "on"}, {"+orientation-marks", ".marks", XrmoptionNoArg, "off"}, {"-projection", ".projection", XrmoptionSepArg, 0 }, {"-perspective", ".projection", XrmoptionNoArg, "perspective" }, {"-orthographic", ".projection", XrmoptionNoArg, "orthographic" }, {"-speed-x", ".speedx", XrmoptionSepArg, 0 }, {"-speed-y", ".speedy", XrmoptionSepArg, 0 }, {"-speed-z", ".speedz", XrmoptionSepArg, 0 }, {"-walk-direction", ".walkDirection", XrmoptionSepArg, 0 }, {"-walk-speed", ".walkSpeed", XrmoptionSepArg, 0 }, {"-deformation-speed", ".deformSpeed", XrmoptionSepArg, 0 }, {"-initial-deformation", ".initDeform", XrmoptionSepArg, 0 }, {"-roman", ".initDeform", XrmoptionNoArg, "0.0" }, {"-boy", ".initDeform", XrmoptionNoArg, "1000.0" }, {"-surface-order", ".surfaceOrder", XrmoptionSepArg, 0 }, }; static argtype vars[] = { { &mode, "displayMode", "DisplayMode", DEF_DISPLAY_MODE, t_String }, { &appear, "appearance", "Appearance", DEF_APPEARANCE, t_String }, { &color_mode, "colors", "Colors", DEF_COLORS, t_String }, { &view_mode, "viewMode", "ViewMode", DEF_VIEW_MODE, t_String }, { &deform, "deform", "Deform", DEF_DEFORM, t_Bool }, { &marks, "marks", "Marks", DEF_MARKS, t_Bool }, { &proj, "projection", "Projection", DEF_PROJECTION, t_String }, { &speed_x, "speedx", "Speedx", DEF_SPEEDX, t_Float}, { &speed_y, "speedy", "Speedy", DEF_SPEEDY, t_Float}, { &speed_z, "speedz", "Speedz", DEF_SPEEDZ, t_Float}, { &walk_direction, "walkDirection", "WalkDirection", DEF_WALK_DIRECTION, t_Float}, { &walk_speed, "walkSpeed", "WalkSpeed", DEF_WALK_SPEED, t_Float}, { &deform_speed, "deformSpeed", "DeformSpeed", DEF_DEFORM_SPEED, t_Float}, { &init_deform, "initDeform", "InitDeform", DEF_INIT_DEFORM, t_Float }, { &surface_order, "surfaceOrder", "SurfaceOrder", DEF_SURFACE_ORDER, t_Int } }; ENTRYPOINT ModeSpecOpt romanboy_opts = {sizeof opts / sizeof opts[0], opts, sizeof vars / sizeof vars[0], vars, NULL}; /* Offset by which we walk above the projective plane */ #define DELTAY 0.01 /* Number of subdivisions of the projective plane */ #define NUMU 64 #define NUMV 128 /* Number of subdivisions per band */ #define NUMB 8 typedef struct { GLint WindH, WindW; GLXContext *glx_context; /* 3D rotation angles */ float alpha, beta, delta; /* Movement parameters */ float umove, vmove, dumove, dvmove; int side, dir; /* Deformation parameters */ float dd; int defdir; /* The type of the generalized Roman-Boy surface */ int g; /* The viewing offset in 3d */ float offset3d[3]; /* The 3d coordinates of the projective plane and their derivatives */ float *pp; float *pn; /* The precomputed colors of the projective plane */ float *col; /* The precomputed texture coordinates of the projective plane */ float *tex; /* The "curlicue" texture */ GLuint tex_name; /* Aspect ratio of the current window */ float aspect; /* Trackball states */ trackball_state *trackball; Bool button_pressed; /* A random factor to modify the rotation speeds */ float speed_scale; } romanboystruct; static romanboystruct *romanboy = (romanboystruct *) NULL; /* Add a rotation around the x-axis to the matrix m. */ static void rotatex(float m[3][3], float phi) { float c, s, u, v; int i; phi *= M_PI/180.0; c = cos(phi); s = sin(phi); for (i=0; i<3; i++) { u = m[i][1]; v = m[i][2]; m[i][1] = c*u+s*v; m[i][2] = -s*u+c*v; } } /* Add a rotation around the y-axis to the matrix m. */ static void rotatey(float m[3][3], float phi) { float c, s, u, v; int i; phi *= M_PI/180.0; c = cos(phi); s = sin(phi); for (i=0; i<3; i++) { u = m[i][0]; v = m[i][2]; m[i][0] = c*u-s*v; m[i][2] = s*u+c*v; } } /* Add a rotation around the z-axis to the matrix m. */ static void rotatez(float m[3][3], float phi) { float c, s, u, v; int i; phi *= M_PI/180.0; c = cos(phi); s = sin(phi); for (i=0; i<3; i++) { u = m[i][0]; v = m[i][1]; m[i][0] = c*u+s*v; m[i][1] = -s*u+c*v; } } /* Compute the rotation matrix m from the rotation angles. */ static void rotateall(float al, float be, float de, float m[3][3]) { int i, j; for (i=0; i<3; i++) for (j=0; j<3; j++) m[i][j] = (i==j); rotatex(m,al); rotatey(m,be); rotatez(m,de); } /* Multiply two rotation matrices: o=m*n. */ static void mult_rotmat(float m[3][3], float n[3][3], float o[3][3]) { int i, j, k; for (i=0; i<3; i++) { for (j=0; j<3; j++) { o[i][j] = 0.0; for (k=0; k<3; k++) o[i][j] += m[i][k]*n[k][j]; } } } /* Compute a 3D rotation matrix from a unit quaternion. */ static void quat_to_rotmat(float p[4], float m[3][3]) { double al, be, de; double r00, r01, r02, r12, r22; r00 = 1.0-2.0*(p[1]*p[1]+p[2]*p[2]); r01 = 2.0*(p[0]*p[1]+p[2]*p[3]); r02 = 2.0*(p[2]*p[0]-p[1]*p[3]); r12 = 2.0*(p[1]*p[2]+p[0]*p[3]); r22 = 1.0-2.0*(p[1]*p[1]+p[0]*p[0]); al = atan2(-r12,r22)*180.0/M_PI; be = atan2(r02,sqrt(r00*r00+r01*r01))*180.0/M_PI; de = atan2(-r01,r00)*180.0/M_PI; rotateall(al,be,de,m); } /* Compute a fully saturated and bright color based on an angle. */ static void color(double angle, float col[4]) { int s; double t; if (colors == COLORS_TWOSIDED) return; if (angle >= 0.0) angle = fmod(angle,2.0*M_PI); else angle = fmod(angle,-2.0*M_PI); s = floor(angle/(M_PI/3)); t = angle/(M_PI/3)-s; if (s >= 6) s = 0; switch (s) { case 0: col[0] = 1.0; col[1] = t; col[2] = 0.0; break; case 1: col[0] = 1.0-t; col[1] = 1.0; col[2] = 0.0; break; case 2: col[0] = 0.0; col[1] = 1.0; col[2] = t; break; case 3: col[0] = 0.0; col[1] = 1.0-t; col[2] = 1.0; break; case 4: col[0] = t; col[1] = 0.0; col[2] = 1.0; break; case 5: col[0] = 1.0; col[1] = 0.0; col[2] = 1.0-t; break; } if (display_mode == DISP_TRANSPARENT) col[3] = 0.7; else col[3] = 1.0; } /* Set up the projective plane colors and texture. */ static void setup_roman_boy_color_texture(ModeInfo *mi, double umin, double umax, double vmin, double vmax, int numu, int numv) { int i, j, k, g; double u, v, ur, vr; romanboystruct *pp = &romanboy[MI_SCREEN(mi)]; g = pp->g; ur = umax-umin; vr = vmax-vmin; for (i=0; i<=numv; i++) { for (j=0; j<=numu; j++) { k = i*(numu+1)+j; if (appearance != APPEARANCE_DIRECTION_BANDS) u = -ur*j/numu+umin; else u = ur*j/numu+umin; v = vr*i/numv+vmin; if (colors == COLORS_DIRECTION) color(2.0*M_PI-fmod(2.0*u,2.0*M_PI),&pp->col[4*k]); else /* colors == COLORS_DISTANCE */ color(v*(5.0/6.0),&pp->col[4*k]); pp->tex[2*k+0] = -16*g*u/(2.0*M_PI); if (appearance == APPEARANCE_DISTANCE_BANDS) pp->tex[2*k+1] = 32*v/(2.0*M_PI)-0.5; else pp->tex[2*k+1] = 32*v/(2.0*M_PI); } } } /* Draw a 3d immersion of the projective plane. */ static int roman_boy(ModeInfo *mi, double umin, double umax, double vmin, double vmax, int numu, int numv) { int polys = 0; static const GLfloat mat_diff_red[] = { 1.0, 0.0, 0.0, 1.0 }; static const GLfloat mat_diff_green[] = { 0.0, 1.0, 0.0, 1.0 }; static const GLfloat mat_diff_trans_red[] = { 1.0, 0.0, 0.0, 0.7 }; static const GLfloat mat_diff_trans_green[] = { 0.0, 1.0, 0.0, 0.7 }; float p[3], pu[3], pv[3], pm[3], n[3], b[3], mat[3][3]; int i, j, k, l, m, o, g; double u, v, ur, vr, oz; double xx[3], xxu[3], xxv[3]; double r, s, t; double d, dd, radius; double cu, su, cgu, sgu, cgm1u, sgm1u, cv, c2v, s2v, cv2; double sqrt2og, h1m1og, gm1, nomx, nomy, nomux, nomuy, nomvx, nomvy; double den, den2, denu, denv; float qu[4], r1[3][3], r2[3][3]; romanboystruct *pp = &romanboy[MI_SCREEN(mi)]; g = pp->g; dd = pp->dd; d = ((6.0*dd-15.0)*dd+10.0)*dd*dd*dd; r = 1.0+d*d*(1.0/2.0+d*d*(1.0/6.0+d*d*(1.0/3.0))); radius = 1.0/r; oz = 0.5*r; if (view == VIEW_WALK) { u = pp->umove; v = pp->vmove; if (g & 1) v = 0.5*M_PI-0.25*v; else v = 0.5*M_PI-0.5*v; sqrt2og = M_SQRT2/g; h1m1og = 0.5*(1.0-1.0/g); gm1 = g-1.0; cu = cos(u); su = sin(u); cgu = cos(g*u); sgu = sin(g*u); cgm1u = cos(gm1*u); sgm1u = sin(gm1*u); cv = cos(v); c2v = cos(2.0*v); s2v = sin(2.0*v); cv2 = cv*cv; nomx = sqrt2og*cv2*cgm1u+h1m1og*s2v*cu; nomy = sqrt2og*cv2*sgm1u-h1m1og*s2v*su; nomux = -sqrt2og*cv2*gm1*sgm1u-h1m1og*s2v*su; nomuy = sqrt2og*cv2*gm1*cgm1u-h1m1og*s2v*cu; nomvx = -sqrt2og*s2v*cgm1u+2.0*h1m1og*c2v*cu; nomvy = -sqrt2og*s2v*sgm1u-2.0*h1m1og*c2v*su; den = 1.0/(1.0-0.5*M_SQRT2*d*s2v*sgu); den2 = den*den; denu = 0.5*M_SQRT2*d*g*cgu*s2v; denv = M_SQRT2*d*sgu*c2v; xx[0] = nomx*den; xx[1] = nomy*den; xx[2] = cv2*den-oz; /* Avoid degenerate tangential plane basis vectors. */ if (0.5*M_PI-fabs(v) < FLT_EPSILON) { if (0.5*M_PI-v < FLT_EPSILON) v = 0.5*M_PI-FLT_EPSILON; else v = -0.5*M_PI+FLT_EPSILON; cv = cos(v); c2v = cos(2.0*v); s2v = sin(2.0*v); cv2 = cv*cv; nomx = sqrt2og*cv2*cgm1u+h1m1og*s2v*cu; nomy = sqrt2og*cv2*sgm1u-h1m1og*s2v*su; nomux = -sqrt2og*cv2*gm1*sgm1u-h1m1og*s2v*su; nomuy = sqrt2og*cv2*gm1*cgm1u-h1m1og*s2v*cu; nomvx = -sqrt2og*s2v*cgm1u+2.0*h1m1og*c2v*cu; nomvy = -sqrt2og*s2v*sgm1u-2.0*h1m1og*c2v*su; den = 1.0/(1.0-0.5*M_SQRT2*d*s2v*sgu); den2 = den*den; denu = 0.5*M_SQRT2*d*g*cgu*s2v; denv = M_SQRT2*d*sgu*c2v; } xxu[0] = nomux*den+nomx*denu*den2; xxu[1] = nomuy*den+nomy*denu*den2; xxu[2] = cv2*denu*den2; xxv[0] = nomvx*den+nomx*denv*den2; xxv[1] = nomvy*den+nomy*denv*den2; xxv[2] = -s2v*den+cv2*denv*den2; for (l=0; l<3; l++) { p[l] = xx[l]*radius; pu[l] = xxu[l]*radius; pv[l] = xxv[l]*radius; } n[0] = pu[1]*pv[2]-pu[2]*pv[1]; n[1] = pu[2]*pv[0]-pu[0]*pv[2]; n[2] = pu[0]*pv[1]-pu[1]*pv[0]; t = 1.0/(pp->side*4.0*sqrt(n[0]*n[0]+n[1]*n[1]+n[2]*n[2])); n[0] *= t; n[1] *= t; n[2] *= t; pm[0] = pu[0]*pp->dumove-pv[0]*0.25*pp->dvmove; pm[1] = pu[1]*pp->dumove-pv[1]*0.25*pp->dvmove; pm[2] = pu[2]*pp->dumove-pv[2]*0.25*pp->dvmove; t = 1.0/(4.0*sqrt(pm[0]*pm[0]+pm[1]*pm[1]+pm[2]*pm[2])); pm[0] *= t; pm[1] *= t; pm[2] *= t; b[0] = n[1]*pm[2]-n[2]*pm[1]; b[1] = n[2]*pm[0]-n[0]*pm[2]; b[2] = n[0]*pm[1]-n[1]*pm[0]; t = 1.0/(4.0*sqrt(b[0]*b[0]+b[1]*b[1]+b[2]*b[2])); b[0] *= t; b[1] *= t; b[2] *= t; /* Compute alpha, beta, gamma from the three basis vectors. | -b[0] -b[1] -b[2] | m = | n[0] n[1] n[2] | | -pm[0] -pm[1] -pm[2] | */ pp->alpha = atan2(-n[2],-pm[2])*180/M_PI; pp->beta = atan2(-b[2],sqrt(b[0]*b[0]+b[1]*b[1]))*180/M_PI; pp->delta = atan2(b[1],-b[0])*180/M_PI; /* Compute the rotation that rotates the projective plane in 3D. */ rotateall(pp->alpha,pp->beta,pp->delta,mat); u = pp->umove; v = pp->vmove; if (g & 1) v = 0.5*M_PI-0.25*v; else v = 0.5*M_PI-0.5*v; sqrt2og = M_SQRT2/g; h1m1og = 0.5*(1.0-1.0/g); gm1 = g-1.0; cu = cos(u); su = sin(u); sgu = sin(g*u); cgm1u = cos(gm1*u); sgm1u = sin(gm1*u); cv = cos(v); s2v = sin(2.0*v); cv2 = cv*cv; nomx = sqrt2og*cv2*cgm1u+h1m1og*s2v*cu; nomy = sqrt2og*cv2*sgm1u-h1m1og*s2v*su; den = 1.0/(1.0-0.5*M_SQRT2*d*s2v*sgu); xx[0] = nomx*den; xx[1] = nomy*den; xx[2] = cv2*den-oz; for (l=0; l<3; l++) { r = 0.0; for (m=0; m<3; m++) r += mat[l][m]*xx[m]; p[l] = r*radius; } pp->offset3d[0] = -p[0]; pp->offset3d[1] = -p[1]-DELTAY; pp->offset3d[2] = -p[2]; } else { /* Compute the rotation that rotates the projective plane in 3D, including the trackball rotations. */ rotateall(pp->alpha,pp->beta,pp->delta,r1); gltrackball_get_quaternion(pp->trackball,qu); quat_to_rotmat(qu,r2); mult_rotmat(r2,r1,mat); } if (colors == COLORS_TWOSIDED) { glColor3fv(mat_diff_red); if (display_mode == DISP_TRANSPARENT) { glMaterialfv(GL_FRONT,GL_AMBIENT_AND_DIFFUSE,mat_diff_trans_red); glMaterialfv(GL_BACK,GL_AMBIENT_AND_DIFFUSE,mat_diff_trans_green); } else { glMaterialfv(GL_FRONT,GL_AMBIENT_AND_DIFFUSE,mat_diff_red); glMaterialfv(GL_BACK,GL_AMBIENT_AND_DIFFUSE,mat_diff_green); } } glBindTexture(GL_TEXTURE_2D,pp->tex_name); ur = umax-umin; vr = vmax-vmin; /* Set up the projective plane coordinates and normals. */ if (appearance != APPEARANCE_DIRECTION_BANDS) { for (i=0; i<=numv; i++) { if (appearance == APPEARANCE_DISTANCE_BANDS && ((i & (NUMB-1)) >= NUMB/4+1) && ((i & (NUMB-1)) < 3*NUMB/4)) continue; for (j=0; j<=numu; j++) { o = i*(numu+1)+j; u = ur*j/numu+umin; v = vr*i/numv+vmin; if (g & 1) v = 0.5*M_PI-0.25*v; else v = 0.5*M_PI-0.5*v; sqrt2og = M_SQRT2/g; h1m1og = 0.5*(1.0-1.0/g); gm1 = g-1.0; cu = cos(u); su = sin(u); cgu = cos(g*u); sgu = sin(g*u); cgm1u = cos(gm1*u); sgm1u = sin(gm1*u); cv = cos(v); c2v = cos(2.0*v); s2v = sin(2.0*v); cv2 = cv*cv; nomx = sqrt2og*cv2*cgm1u+h1m1og*s2v*cu; nomy = sqrt2og*cv2*sgm1u-h1m1og*s2v*su; nomux = -sqrt2og*cv2*gm1*sgm1u-h1m1og*s2v*su; nomuy = sqrt2og*cv2*gm1*cgm1u-h1m1og*s2v*cu; nomvx = -sqrt2og*s2v*cgm1u+2.0*h1m1og*c2v*cu; nomvy = -sqrt2og*s2v*sgm1u-2.0*h1m1og*c2v*su; den = 1.0/(1.0-0.5*M_SQRT2*d*s2v*sgu); den2 = den*den; denu = 0.5*M_SQRT2*d*g*cgu*s2v; denv = M_SQRT2*d*sgu*c2v; xx[0] = nomx*den; xx[1] = nomy*den; xx[2] = cv2*den-oz; /* Avoid degenerate tangential plane basis vectors. */ if (0.5*M_PI-fabs(v) < FLT_EPSILON) { if (0.5*M_PI-v < FLT_EPSILON) v = 0.5*M_PI-FLT_EPSILON; else v = -0.5*M_PI+FLT_EPSILON; cv = cos(v); c2v = cos(2.0*v); s2v = sin(2.0*v); cv2 = cv*cv; nomx = sqrt2og*cv2*cgm1u+h1m1og*s2v*cu; nomy = sqrt2og*cv2*sgm1u-h1m1og*s2v*su; nomux = -sqrt2og*cv2*gm1*sgm1u-h1m1og*s2v*su; nomuy = sqrt2og*cv2*gm1*cgm1u-h1m1og*s2v*cu; nomvx = -sqrt2og*s2v*cgm1u+2.0*h1m1og*c2v*cu; nomvy = -sqrt2og*s2v*sgm1u-2.0*h1m1og*c2v*su; den = 1.0/(1.0-0.5*M_SQRT2*d*s2v*sgu); den2 = den*den; denu = 0.5*M_SQRT2*d*g*cgu*s2v; denv = M_SQRT2*d*sgu*c2v; } xxu[0] = nomux*den+nomx*denu*den2; xxu[1] = nomuy*den+nomy*denu*den2; xxu[2] = cv2*denu*den2; xxv[0] = nomvx*den+nomx*denv*den2; xxv[1] = nomvy*den+nomy*denv*den2; xxv[2] = -s2v*den+cv2*denv*den2; for (l=0; l<3; l++) { r = 0.0; s = 0.0; t = 0.0; for (m=0; m<3; m++) { r += mat[l][m]*xx[m]; s += mat[l][m]*xxu[m]; t += mat[l][m]*xxv[m]; } p[l] = r*radius+pp->offset3d[l]; pu[l] = s*radius; pv[l] = t*radius; } n[0] = pu[1]*pv[2]-pu[2]*pv[1]; n[1] = pu[2]*pv[0]-pu[0]*pv[2]; n[2] = pu[0]*pv[1]-pu[1]*pv[0]; t = 1.0/sqrt(n[0]*n[0]+n[1]*n[1]+n[2]*n[2]); n[0] *= t; n[1] *= t; n[2] *= t; pp->pp[3*o+0] = p[0]; pp->pp[3*o+1] = p[1]; pp->pp[3*o+2] = p[2]; pp->pn[3*o+0] = n[0]; pp->pn[3*o+1] = n[1]; pp->pn[3*o+2] = n[2]; } } } else /* appearance == APPEARANCE_DIRECTION_BANDS */ { for (j=0; j<=numu; j++) { if ((j & (NUMB-1)) >= NUMB/2+1) continue; for (i=0; i<=numv; i++) { o = i*(numu+1)+j; u = -ur*j/numu+umin; v = vr*i/numv+vmin; if (g & 1) v = 0.5*M_PI-0.25*v; else v = 0.5*M_PI-0.5*v; sqrt2og = M_SQRT2/g; h1m1og = 0.5*(1.0-1.0/g); gm1 = g-1.0; cu = cos(u); su = sin(u); cgu = cos(g*u); sgu = sin(g*u); cgm1u = cos(gm1*u); sgm1u = sin(gm1*u); cv = cos(v); c2v = cos(2.0*v); s2v = sin(2.0*v); cv2 = cv*cv; nomx = sqrt2og*cv2*cgm1u+h1m1og*s2v*cu; nomy = sqrt2og*cv2*sgm1u-h1m1og*s2v*su; nomux = -sqrt2og*cv2*gm1*sgm1u-h1m1og*s2v*su; nomuy = sqrt2og*cv2*gm1*cgm1u-h1m1og*s2v*cu; nomvx = -sqrt2og*s2v*cgm1u+2.0*h1m1og*c2v*cu; nomvy = -sqrt2og*s2v*sgm1u-2.0*h1m1og*c2v*su; den = 1.0/(1.0-0.5*M_SQRT2*d*s2v*sgu); den2 = den*den; denu = 0.5*M_SQRT2*d*g*cgu*s2v; denv = M_SQRT2*d*sgu*c2v; xx[0] = nomx*den; xx[1] = nomy*den; xx[2] = cv2*den-oz; /* Avoid degenerate tangential plane basis vectors. */ if (0.5*M_PI-fabs(v) < FLT_EPSILON) { if (0.5*M_PI-v < FLT_EPSILON) v = 0.5*M_PI-FLT_EPSILON; else v = -0.5*M_PI+FLT_EPSILON; cv = cos(v); c2v = cos(2.0*v); s2v = sin(2.0*v); cv2 = cv*cv; nomx = sqrt2og*cv2*cgm1u+h1m1og*s2v*cu; nomy = sqrt2og*cv2*sgm1u-h1m1og*s2v*su; nomux = -sqrt2og*cv2*gm1*sgm1u-h1m1og*s2v*su; nomuy = sqrt2og*cv2*gm1*cgm1u-h1m1og*s2v*cu; nomvx = -sqrt2og*s2v*cgm1u+2.0*h1m1og*c2v*cu; nomvy = -sqrt2og*s2v*sgm1u-2.0*h1m1og*c2v*su; den = 1.0/(1.0-0.5*M_SQRT2*d*s2v*sgu); den2 = den*den; denu = 0.5*M_SQRT2*d*g*cgu*s2v; denv = M_SQRT2*d*sgu*c2v; } xxu[0] = nomux*den+nomx*denu*den2; xxu[1] = nomuy*den+nomy*denu*den2; xxu[2] = cv2*denu*den2; xxv[0] = nomvx*den+nomx*denv*den2; xxv[1] = nomvy*den+nomy*denv*den2; xxv[2] = -s2v*den+cv2*denv*den2; for (l=0; l<3; l++) { r = 0.0; s = 0.0; t = 0.0; for (m=0; m<3; m++) { r += mat[l][m]*xx[m]; s += mat[l][m]*xxu[m]; t += mat[l][m]*xxv[m]; } p[l] = r*radius+pp->offset3d[l]; pu[l] = s*radius; pv[l] = t*radius; } n[0] = pu[1]*pv[2]-pu[2]*pv[1]; n[1] = pu[2]*pv[0]-pu[0]*pv[2]; n[2] = pu[0]*pv[1]-pu[1]*pv[0]; t = 1.0/sqrt(n[0]*n[0]+n[1]*n[1]+n[2]*n[2]); n[0] *= t; n[1] *= t; n[2] *= t; pp->pp[3*o+0] = p[0]; pp->pp[3*o+1] = p[1]; pp->pp[3*o+2] = p[2]; pp->pn[3*o+0] = n[0]; pp->pn[3*o+1] = n[1]; pp->pn[3*o+2] = n[2]; } } } if (appearance != APPEARANCE_DIRECTION_BANDS) { for (i=0; i= NUMB/4) && ((i & (NUMB-1)) < 3*NUMB/4)) continue; if (display_mode == DISP_WIREFRAME) glBegin(GL_QUAD_STRIP); else glBegin(GL_TRIANGLE_STRIP); for (j=0; j<=numu; j++) { for (k=0; k<=1; k++) { l = (i+k); m = j; o = l*(numu+1)+m; glTexCoord2fv(&pp->tex[2*o]); if (colors != COLORS_TWOSIDED) { glColor3fv(&pp->col[4*o]); glMaterialfv(GL_FRONT_AND_BACK,GL_AMBIENT_AND_DIFFUSE, &pp->col[4*o]); } glNormal3fv(&pp->pn[3*o]); glVertex3fv(&pp->pp[3*o]); polys++; } } glEnd(); } } else /* appearance == APPEARANCE_DIRECTION_BANDS */ { for (j=0; j= NUMB/2) continue; if (display_mode == DISP_WIREFRAME) glBegin(GL_QUAD_STRIP); else glBegin(GL_TRIANGLE_STRIP); for (i=0; i<=numv; i++) { for (k=0; k<=1; k++) { l = i; m = (j+k); o = l*(numu+1)+m; glTexCoord2fv(&pp->tex[2*o]); if (colors != COLORS_TWOSIDED) { glColor3fv(&pp->col[4*o]); glMaterialfv(GL_FRONT_AND_BACK,GL_AMBIENT_AND_DIFFUSE, &pp->col[4*o]); } glNormal3fv(&pp->pn[3*o]); glVertex3fv(&pp->pp[3*o]); polys++; } } glEnd(); } } polys /= 2; return polys; } /* Generate a texture image that shows the orientation reversal. */ static void gen_texture(ModeInfo *mi) { romanboystruct *pp = &romanboy[MI_SCREEN(mi)]; glGenTextures(1,&pp->tex_name); glBindTexture(GL_TEXTURE_2D,pp->tex_name); glPixelStorei(GL_UNPACK_ALIGNMENT,1); glTexParameterf(GL_TEXTURE_2D,GL_TEXTURE_WRAP_S,GL_REPEAT); glTexParameterf(GL_TEXTURE_2D,GL_TEXTURE_WRAP_T,GL_REPEAT); glTexParameterf(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR); glTexParameterf(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR); glTexEnvf(GL_TEXTURE_ENV,GL_TEXTURE_ENV_MODE,GL_MODULATE); glTexImage2D(GL_TEXTURE_2D,0,GL_RGB,TEX_DIMENSION,TEX_DIMENSION,0, GL_LUMINANCE,GL_UNSIGNED_BYTE,texture); } static void init(ModeInfo *mi) { static const GLfloat light_ambient[] = { 0.0, 0.0, 0.0, 1.0 }; static const GLfloat light_diffuse[] = { 1.0, 1.0, 1.0, 1.0 }; static const GLfloat light_specular[] = { 1.0, 1.0, 1.0, 1.0 }; static const GLfloat light_position[] = { 1.0, 1.0, 1.0, 0.0 }; static const GLfloat mat_specular[] = { 1.0, 1.0, 1.0, 1.0 }; romanboystruct *pp = &romanboy[MI_SCREEN(mi)]; if (deform_speed == 0.0) deform_speed = 10.0; if (init_deform < 0.0) init_deform = 0.0; if (init_deform > 1000.0) init_deform = 1000.0; if (walk_speed == 0.0) walk_speed = 20.0; if (view == VIEW_TURN) { pp->alpha = frand(360.0); pp->beta = frand(360.0); pp->delta = frand(360.0); } else { pp->alpha = 0.0; pp->beta = 0.0; pp->delta = 0.0; } pp->umove = frand(2.0*M_PI); pp->vmove = frand(2.0*M_PI); pp->dumove = 0.0; pp->dvmove = 0.0; pp->side = 1; if (sin(walk_direction*M_PI/180.0) >= 0.0) pp->dir = 1; else pp->dir = -1; pp->dd = init_deform*0.001; pp->defdir = -1; pp->offset3d[0] = 0.0; pp->offset3d[1] = 0.0; pp->offset3d[2] = -1.8; gen_texture(mi); setup_roman_boy_color_texture(mi,0.0,2.0*M_PI,0.0,2.0*M_PI,pp->g*NUMU,NUMV); if (marks) glEnable(GL_TEXTURE_2D); else glDisable(GL_TEXTURE_2D); glMatrixMode(GL_PROJECTION); glLoadIdentity(); if (projection == DISP_PERSPECTIVE || view == VIEW_WALK) { if (view == VIEW_WALK) gluPerspective(60.0,1.0,0.01,10.0); else gluPerspective(60.0,1.0,0.1,10.0); } else { glOrtho(-1.0,1.0,-1.0,1.0,0.1,10.0); } glMatrixMode(GL_MODELVIEW); glLoadIdentity(); # ifdef HAVE_JWZGLES /* #### glPolygonMode other than GL_FILL unimplemented */ if (display_mode == DISP_WIREFRAME) display_mode = DISP_SURFACE; # endif if (display_mode == DISP_SURFACE) { glEnable(GL_DEPTH_TEST); glDepthFunc(GL_LESS); glShadeModel(GL_SMOOTH); glPolygonMode(GL_FRONT_AND_BACK,GL_FILL); glLightModeli(GL_LIGHT_MODEL_TWO_SIDE,GL_TRUE); glEnable(GL_LIGHTING); glEnable(GL_LIGHT0); glLightfv(GL_LIGHT0,GL_AMBIENT,light_ambient); glLightfv(GL_LIGHT0,GL_DIFFUSE,light_diffuse); glLightfv(GL_LIGHT0,GL_SPECULAR,light_specular); glLightfv(GL_LIGHT0,GL_POSITION,light_position); glMaterialfv(GL_FRONT_AND_BACK,GL_SPECULAR,mat_specular); glMaterialf(GL_FRONT_AND_BACK,GL_SHININESS,50.0); glDepthMask(GL_TRUE); glDisable(GL_BLEND); } else if (display_mode == DISP_TRANSPARENT) { glDisable(GL_DEPTH_TEST); glShadeModel(GL_SMOOTH); glPolygonMode(GL_FRONT_AND_BACK,GL_FILL); glLightModeli(GL_LIGHT_MODEL_TWO_SIDE,GL_TRUE); glEnable(GL_LIGHTING); glEnable(GL_LIGHT0); glLightfv(GL_LIGHT0,GL_AMBIENT,light_ambient); glLightfv(GL_LIGHT0,GL_DIFFUSE,light_diffuse); glLightfv(GL_LIGHT0,GL_SPECULAR,light_specular); glLightfv(GL_LIGHT0,GL_POSITION,light_position); glMaterialfv(GL_FRONT_AND_BACK,GL_SPECULAR,mat_specular); glMaterialf(GL_FRONT_AND_BACK,GL_SHININESS,50.0); glDepthMask(GL_FALSE); glEnable(GL_BLEND); glBlendFunc(GL_SRC_ALPHA,GL_ONE); } else /* display_mode == DISP_WIREFRAME */ { glDisable(GL_DEPTH_TEST); glShadeModel(GL_FLAT); glPolygonMode(GL_FRONT_AND_BACK,GL_LINE); glDisable(GL_LIGHTING); glDisable(GL_LIGHT0); glDisable(GL_BLEND); } } /* Redisplay the Klein bottle. */ static void display_romanboy(ModeInfo *mi) { romanboystruct *pp = &romanboy[MI_SCREEN(mi)]; if (!pp->button_pressed) { if (deform) { pp->dd += pp->defdir*deform_speed*0.001; if (pp->dd < 0.0) { pp->dd = -pp->dd; pp->defdir = -pp->defdir; } if (pp->dd > 1.0) { pp->dd = 2.0-pp->dd; pp->defdir = -pp->defdir; } } if (view == VIEW_TURN) { pp->alpha += speed_x * pp->speed_scale; if (pp->alpha >= 360.0) pp->alpha -= 360.0; pp->beta += speed_y * pp->speed_scale; if (pp->beta >= 360.0) pp->beta -= 360.0; pp->delta += speed_z * pp->speed_scale; if (pp->delta >= 360.0) pp->delta -= 360.0; } if (view == VIEW_WALK) { pp->dvmove = (pp->dir*sin(walk_direction*M_PI/180.0)* walk_speed*M_PI/4096.0); pp->vmove += pp->dvmove; if (pp->vmove > 2.0*M_PI) { pp->vmove = 4.0*M_PI-pp->vmove; pp->umove = pp->umove-M_PI; if (pp->umove < 0.0) pp->umove += 2.0*M_PI; pp->side = -pp->side; pp->dir = -pp->dir; pp->dvmove = -pp->dvmove; } if (pp->vmove < 0.0) { pp->vmove = -pp->vmove; pp->umove = pp->umove-M_PI; if (pp->umove < 0.0) pp->umove += 2.0*M_PI; pp->dir = -pp->dir; pp->dvmove = -pp->dvmove; } pp->dumove = cos(walk_direction*M_PI/180.0)*walk_speed*M_PI/4096.0; pp->umove += pp->dumove; if (pp->umove >= 2.0*M_PI) pp->umove -= 2.0*M_PI; if (pp->umove < 0.0) pp->umove += 2.0*M_PI; } } glMatrixMode(GL_PROJECTION); glLoadIdentity(); if (projection == DISP_PERSPECTIVE || view == VIEW_WALK) { if (view == VIEW_WALK) gluPerspective(60.0,pp->aspect,0.01,10.0); else gluPerspective(60.0,pp->aspect,0.1,10.0); } else { if (pp->aspect >= 1.0) glOrtho(-pp->aspect,pp->aspect,-1.0,1.0,0.1,10.0); else glOrtho(-1.0,1.0,-1.0/pp->aspect,1.0/pp->aspect,0.1,10.0); } glMatrixMode(GL_MODELVIEW); glLoadIdentity(); mi->polygon_count = roman_boy(mi,0.0,2.0*M_PI,0.0,2.0*M_PI,pp->g*NUMU,NUMV); } ENTRYPOINT void reshape_romanboy(ModeInfo *mi, int width, int height) { romanboystruct *pp = &romanboy[MI_SCREEN(mi)]; pp->WindW = (GLint)width; pp->WindH = (GLint)height; glViewport(0,0,width,height); pp->aspect = (GLfloat)width/(GLfloat)height; } ENTRYPOINT Bool romanboy_handle_event(ModeInfo *mi, XEvent *event) { romanboystruct *pp = &romanboy[MI_SCREEN(mi)]; if (event->xany.type == ButtonPress && event->xbutton.button == Button1) { pp->button_pressed = 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_pressed = False; return True; } else if (event->xany.type == MotionNotify && pp->button_pressed) { gltrackball_track(pp->trackball, event->xmotion.x, event->xmotion.y, MI_WIDTH(mi), MI_HEIGHT(mi)); return True; } return False; } /* *----------------------------------------------------------------------------- *----------------------------------------------------------------------------- * Xlock hooks. *----------------------------------------------------------------------------- *----------------------------------------------------------------------------- */ /* *----------------------------------------------------------------------------- * Initialize romanboy. Called each time the window changes. *----------------------------------------------------------------------------- */ ENTRYPOINT void init_romanboy(ModeInfo *mi) { romanboystruct *pp; if (romanboy == NULL) { romanboy = (romanboystruct *)calloc(MI_NUM_SCREENS(mi),sizeof(romanboystruct)); if (romanboy == NULL) return; } pp = &romanboy[MI_SCREEN(mi)]; if (surface_order < 2) pp->g = 2; else if (surface_order > 9) pp->g = 9; else pp->g = surface_order; pp->pp = calloc(3*pp->g*(NUMU+1)*(NUMV+1),sizeof(float)); pp->pn = calloc(3*pp->g*(NUMU+1)*(NUMV+1),sizeof(float)); pp->col = calloc(4*pp->g*(NUMU+1)*(NUMV+1),sizeof(float)); pp->tex = calloc(2*pp->g*(NUMU+1)*(NUMV+1),sizeof(float)); pp->trackball = gltrackball_init(True); pp->button_pressed = False; /* Set the display mode. */ if (!strcasecmp(mode,"random")) { display_mode = random() % NUM_DISPLAY_MODES; } else if (!strcasecmp(mode,"wireframe")) { display_mode = DISP_WIREFRAME; } else if (!strcasecmp(mode,"surface")) { display_mode = DISP_SURFACE; } else if (!strcasecmp(mode,"transparent")) { display_mode = DISP_TRANSPARENT; } else { display_mode = random() % NUM_DISPLAY_MODES; } /* Orientation marks don't make sense in wireframe mode. */ if (display_mode == DISP_WIREFRAME) marks = False; /* Set the appearance. */ if (!strcasecmp(appear,"random")) { appearance = random() % NUM_APPEARANCES; } else if (!strcasecmp(appear,"solid")) { appearance = APPEARANCE_SOLID; } else if (!strcasecmp(appear,"distance-bands")) { appearance = APPEARANCE_DISTANCE_BANDS; } else if (!strcasecmp(appear,"direction-bands")) { appearance = APPEARANCE_DIRECTION_BANDS; } else { appearance = random() % NUM_APPEARANCES; } /* Set the color mode. */ if (!strcasecmp(color_mode,"random")) { colors = random() % NUM_COLORS; } else if (!strcasecmp(color_mode,"two-sided")) { colors = COLORS_TWOSIDED; } else if (!strcasecmp(color_mode,"distance")) { colors = COLORS_DISTANCE; } else if (!strcasecmp(color_mode,"direction")) { colors = COLORS_DIRECTION; } else { colors = random() % NUM_COLORS; } /* Set the view mode. */ if (!strcasecmp(view_mode,"random")) { view = random() % NUM_VIEW_MODES; } else if (!strcasecmp(view_mode,"walk")) { view = VIEW_WALK; } else if (!strcasecmp(view_mode,"turn")) { view = VIEW_TURN; } else { view = random() % NUM_VIEW_MODES; } /* Set the 3d projection mode. */ if (!strcasecmp(proj,"random")) { /* Orthographic projection only makes sense in turn mode. */ if (view == VIEW_TURN) projection = random() % NUM_DISP_MODES; else projection = DISP_PERSPECTIVE; } else if (!strcasecmp(proj,"perspective")) { projection = DISP_PERSPECTIVE; } else if (!strcasecmp(proj,"orthographic")) { projection = DISP_ORTHOGRAPHIC; } else { /* Orthographic projection only makes sense in turn mode. */ if (view == VIEW_TURN) projection = random() % NUM_DISP_MODES; else projection = DISP_PERSPECTIVE; } /* make multiple screens rotate at slightly different rates. */ pp->speed_scale = 0.9 + frand(0.3); if ((pp->glx_context = init_GL(mi)) != NULL) { reshape_romanboy(mi,MI_WIDTH(mi),MI_HEIGHT(mi)); glDrawBuffer(GL_BACK); init(mi); } else { MI_CLEARWINDOW(mi); } } /* *----------------------------------------------------------------------------- * Called by the mainline code periodically to update the display. *----------------------------------------------------------------------------- */ ENTRYPOINT void draw_romanboy(ModeInfo *mi) { Display *display = MI_DISPLAY(mi); Window window = MI_WINDOW(mi); romanboystruct *pp; if (romanboy == NULL) return; pp = &romanboy[MI_SCREEN(mi)]; MI_IS_DRAWN(mi) = True; if (!pp->glx_context) return; glXMakeCurrent(display,window,*(pp->glx_context)); glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT); glLoadIdentity(); display_romanboy(mi); if (MI_IS_FPS(mi)) do_fps (mi); glFlush(); glXSwapBuffers(display,window); } /* *----------------------------------------------------------------------------- * The display is being taken away from us. Free up malloc'ed * memory and X resources that we've alloc'ed. Only called * once, we must zap everything for every screen. *----------------------------------------------------------------------------- */ ENTRYPOINT void release_romanboy(ModeInfo *mi) { if (romanboy != NULL) { int screen; for (screen = 0; screen < MI_NUM_SCREENS(mi); screen++) { romanboystruct *pp = &romanboy[screen]; if (pp->glx_context) pp->glx_context = (GLXContext *)NULL; if (pp->pp) (void) free((void *)pp->pp); if (pp->pn) (void) free((void *)pp->pn); if (pp->col) (void) free((void *)pp->col); if (pp->tex) (void) free((void *)pp->tex); } (void) free((void *)romanboy); romanboy = (romanboystruct *)NULL; } FreeAllGL(mi); } #ifndef STANDALONE ENTRYPOINT void change_romanboy(ModeInfo *mi) { romanboystruct *pp = &romanboy[MI_SCREEN(mi)]; if (!pp->glx_context) return; glXMakeCurrent(MI_DISPLAY(mi),MI_WINDOW(mi),*(pp->glx_context)); init(mi); } #endif /* !STANDALONE */ XSCREENSAVER_MODULE ("RomanBoy", romanboy) #endif /* USE_GL */ xscreensaver-5.36/hacks/glx/splitflap.c000644 000767 000024 00000105471 12710313225 020167 0ustar00jwzstaff000000 000000 /* splitflap, Copyright (c) 2015 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. * * Draws a split-flap text display. */ #define FLAP_FONT "-*-helvetica-bold-r-normal-*-*-1440-*-*-*-*-*-*" #define DEFAULTS "*delay: 20000 \n" \ "*showFPS: False \n" \ "*wireframe: False \n" \ "*flapFont: " FLAP_FONT "\n" \ "*frameColor: #444444" "\n" \ "*caseColor: #666666" "\n" \ "*discColor: #888888" "\n" \ "*finColor: #222222" "\n" \ "*textColor: #FFFF00" "\n" \ "*multiSample: True \n" \ "*program: xscreensaver-text\n" \ "*usePty: False\n" # define refresh_splitflap 0 #undef countof #define countof(x) (sizeof((x))/sizeof((*x))) #define DEF_SPEED "1.0" #define DEF_WIDTH "22" #define DEF_HEIGHT "8" #define DEF_SPIN "XYZ" #define DEF_WANDER "True" #define DEF_FACE_FRONT "True" #define DEF_MODE "Text" #include "xlockmore.h" #include #ifdef USE_GL /* whole file */ #include "gltrackball.h" #include "rotator.h" #include "xpm-ximage.h" #include "utf8wc.h" #include "textclient.h" #include "texfont.h" #include "gllist.h" extern const struct gllist *splitflap_obj_box_quarter_frame, *splitflap_obj_disc_quarter, *splitflap_obj_fin_edge_half, *splitflap_obj_fin_face_half; static struct gllist *splitflap_obj_outer_frame = 0; static const struct gllist * const *all_objs[] = { &splitflap_obj_box_quarter_frame, &splitflap_obj_disc_quarter, &splitflap_obj_fin_edge_half, &splitflap_obj_fin_face_half, (const struct gllist * const *) &splitflap_obj_outer_frame }; #define SPLITFLAP_QUARTER_FRAME 0 #define SPLITFLAP_DISC_QUARTER 1 #define SPLITFLAP_FIN_EDGE_HALF 2 #define SPLITFLAP_FIN_FACE_HALF 3 #define SPLITFLAP_OUTER_FRAME 4 #define COLON_WIDTH 0.5 typedef struct { int target_index; /* desired character */ double current_index; /* currently displayed, fractional */ GLfloat sticky; /* bottom fin doesn't fall all the way */ int missing; /* which fin has snapped off, or -1 */ const char * const *spool; /* chars available for display */ int spool_size; /* how many fins on the spool */ } flapper; typedef struct { const char *text; GLuint texid; XCharStruct metrics; int tex_width, tex_height; } texinfo; typedef struct { GLXContext *glx_context; rotator *rot, *rot2; trackball_state *trackball; Bool button_down_p; Bool spinx, spiny, spinz; texinfo *texinfo; int texinfo_size; GLuint *dlists; GLfloat component_colors[countof(all_objs)][4]; GLfloat text_color[4]; flapper *flappers; /* grid_width * grid_height */ texture_font_data *font_data; int ascent, descent; text_data *tc; unsigned char text[5]; int linger; int clock_p; Bool first_time_p; } splitflap_configuration; static const char * const digit_s1_spool[] = { " ", "1" }; static const char * const digit_01_spool[] = { "0", "1" }; static const char * const ap_spool[] = { "A", "P" }; static const char * const m_spool[] = { "M" }; static const char * const digit_05_spool[] = { "0", "1", "2", "3", "4", "5" }; static const char * const digit_spool[] = { "0", "1", "2", "3", "4", "5", "6", "7", "8", "9" }; static const char * const ascii_spool[] = { " ", "!", "\"", "#", "$", "%", "&", "'", "(", ")", "*", "+", ",", "-", ".", "/", "0", "1", "2", "3", "4", "5", "6", "7", "8", "9", ":", ";", "<", "=", ">", "?", "@", "A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z", "[", "\\", "]", "^", "_", "`", "{", "|", "}", "~", }; /* If we include these, the flappers just take too long. It's boring. */ static const char * const latin1_spool[] = { " ", "!", "\"", "#", "$", "%", "&", "'", "(", ")", "*", "+", ",", "-", ".", "/", "0", "1", "2", "3", "4", "5", "6", "7", "8", "9", ":", ";", "<", "=", ">", "?", "@", "A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z", "[", "\\", "]", "^", "_", "`", "{", "|", "}", "~", "\302\241", "\302\242", "\302\243", "\302\245", "\302\247", "\302\251", "\302\265", "\302\266", "\303\200", "\303\201", "\303\202", "\303\203", "\303\204", "\303\205", "\303\206", "\303\207", "\303\210", "\303\211", "\303\212", "\303\213", "\303\214", "\303\215", "\303\216", "\303\217", "\303\220", "\303\221", "\303\222", "\303\223", "\303\224", "\303\225", "\303\226", "\303\230", "\303\231", "\303\232", "\303\233", "\303\234", "\303\235", "\303\236", "\303\237", "\303\267", }; static splitflap_configuration *bps = NULL; static GLfloat speed; static int grid_width, grid_height; static char *do_spin; static Bool do_wander; static Bool face_front_p; static char *mode_str; static XrmOptionDescRec opts[] = { { "-speed", ".speed", XrmoptionSepArg, 0 }, { "-width", ".width", XrmoptionSepArg, 0 }, { "-height", ".height", XrmoptionSepArg, 0 }, { "-spin", ".spin", XrmoptionSepArg, 0 }, { "+spin", ".spin", XrmoptionNoArg, "" }, { "-wander", ".wander", XrmoptionNoArg, "True" }, { "+wander", ".wander", XrmoptionNoArg, "False" }, { "-front", ".faceFront", XrmoptionNoArg, "True" }, { "+front", ".faceFront", XrmoptionNoArg, "False" }, { "-mode", ".mode", XrmoptionSepArg, 0 }, }; static argtype vars[] = { {&speed, "speed", "Speed", DEF_SPEED, t_Float}, {&grid_width, "width", "Width", DEF_WIDTH, t_Int}, {&grid_height, "height", "Height", DEF_HEIGHT, t_Int}, {&do_spin, "spin", "Spin", DEF_SPIN, t_String}, {&do_wander, "wander", "Wander", DEF_WANDER, t_Bool}, {&face_front_p, "faceFront", "FaceFront", DEF_FACE_FRONT, t_Bool}, {&mode_str, "mode", "Mode", DEF_MODE, t_String}, }; ENTRYPOINT ModeSpecOpt splitflap_opts = { countof(opts), opts, countof(vars), vars, NULL}; /* Window management, etc */ ENTRYPOINT void reshape_splitflap (ModeInfo *mi, int width, int height) { GLfloat h = (GLfloat) height / (GLfloat) width; glViewport (0, 0, (GLint) width, (GLint) height); glMatrixMode(GL_PROJECTION); glLoadIdentity(); gluPerspective (40.0, 1/h, 0.5, 25); glMatrixMode(GL_MODELVIEW); glLoadIdentity(); gluLookAt( 0, 0, 3, /* 10x lower than traditional, for better depth rez */ 0, 0, 0, 0, 1, 0); # ifdef HAVE_MOBILE /* Keep it the same relative size when rotated. */ { int o = (int) current_device_rotation(); if (o != 0 && o != 180 && o != -180) glScalef (h, h, h); } # endif glClear(GL_COLOR_BUFFER_BIT); } ENTRYPOINT Bool splitflap_handle_event (ModeInfo *mi, XEvent *event) { splitflap_configuration *bp = &bps[MI_SCREEN(mi)]; if (gltrackball_event_handler (event, bp->trackball, MI_WIDTH (mi), MI_HEIGHT (mi), &bp->button_down_p)) return True; return False; } static void init_textures (ModeInfo *mi) { splitflap_configuration *bp = &bps[MI_SCREEN(mi)]; int i; const char * const *spool = latin1_spool; int max = countof(latin1_spool); bp->texinfo = (texinfo *) calloc (max+1, sizeof(*bp->texinfo)); texture_string_metrics (bp->font_data, "", 0, &bp->ascent, &bp->descent); for (i = 0; i < max; i++) { texinfo *ti = &bp->texinfo[i]; glGenTextures (1, &ti->texid); glBindTexture (GL_TEXTURE_2D, ti->texid); ti->text = spool[i]; /* fprintf(stderr, "%d \\%03o\\%03o %s\n", i, (unsigned char) ti->text[0], (unsigned char) ti->text[1], ti->text); */ string_to_texture (bp->font_data, ti->text, &ti->metrics, &ti->tex_width, &ti->tex_height); } bp->texinfo_size = i; glBindTexture (GL_TEXTURE_2D, 0); } static void parse_color (ModeInfo *mi, char *key, GLfloat color[4]) { XColor xcolor; char *string = get_string_resource (mi->dpy, key, "Color"); if (!XParseColor (mi->dpy, mi->xgwa.colormap, string, &xcolor)) { fprintf (stderr, "%s: unparsable color in %s: %s\n", progname, key, string); exit (1); } color[0] = xcolor.red / 65536.0; color[1] = xcolor.green / 65536.0; color[2] = xcolor.blue / 65536.0; color[3] = 1; } static int draw_outer_frame (ModeInfo *mi); ENTRYPOINT void init_splitflap (ModeInfo *mi) { splitflap_configuration *bp; int wire = MI_IS_WIREFRAME(mi); int i; if (!bps) { bps = (splitflap_configuration *) calloc (MI_NUM_SCREENS(mi), sizeof (splitflap_configuration)); if (!bps) { fprintf(stderr, "%s: out of memory\n", progname); exit(1); } } bp = &bps[MI_SCREEN(mi)]; bp->glx_context = init_GL(mi); reshape_splitflap (mi, MI_WIDTH(mi), MI_HEIGHT(mi)); bp->first_time_p = True; if (!mode_str || !*mode_str || !strcasecmp(mode_str, "text")) { bp->clock_p = 0; } else if (!strcasecmp (mode_str, "clock") || !strcasecmp (mode_str, "clock12")) { bp->clock_p = 12; grid_width = 8; grid_height = 1; } else if (!strcasecmp (mode_str, "clock24")) { bp->clock_p = 24; grid_width = 6; grid_height = 1; } else { fprintf (stderr, "%s: `mode' must be text, clock12 or clock24: not `%s'\n", progname, mode_str); exit (1); } if (! bp->clock_p) { bp->tc = textclient_open (MI_DISPLAY (mi)); bp->text[0] = 0; if (grid_width > 10) textclient_reshape (bp->tc, grid_width, grid_height, grid_width, grid_height, 0); } if (bp->clock_p) speed /= 4; glShadeModel(GL_SMOOTH); glEnable(GL_DEPTH_TEST); glEnable(GL_NORMALIZE); glEnable(GL_CULL_FACE); if (!wire) { GLfloat pos[4] = {0.4, 0.2, 0.4, 0.0}; /* GLfloat amb[4] = {0.0, 0.0, 0.0, 1.0};*/ GLfloat amb[4] = {0.2, 0.2, 0.2, 1.0}; GLfloat dif[4] = {1.0, 1.0, 1.0, 1.0}; GLfloat spc[4] = {1.0, 1.0, 1.0, 1.0}; glEnable(GL_LIGHTING); glEnable(GL_LIGHT0); glEnable(GL_DEPTH_TEST); glEnable(GL_CULL_FACE); glLightfv(GL_LIGHT0, GL_POSITION, pos); glLightfv(GL_LIGHT0, GL_AMBIENT, amb); glLightfv(GL_LIGHT0, GL_DIFFUSE, dif); glLightfv(GL_LIGHT0, GL_SPECULAR, spc); glBlendFunc (GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); } { double spin_speed = 0.5; double wander_speed = 0.005; double tilt_speed = 0.001; double spin_accel = 0.5; char *s = do_spin; while (*s) { if (*s == 'x' || *s == 'X') bp->spinx = True; else if (*s == 'y' || *s == 'Y') bp->spiny = True; else if (*s == 'z' || *s == 'Z') bp->spinz = True; else if (*s == '0') ; else { fprintf (stderr, "%s: spin must contain only the characters X, Y, or Z (not \"%s\")\n", progname, do_spin); exit (1); } s++; } bp->rot = make_rotator (bp->spinx ? spin_speed : 0, bp->spiny ? spin_speed : 0, bp->spinz ? spin_speed : 0, spin_accel, do_wander ? wander_speed : 0, False); bp->rot2 = (face_front_p ? make_rotator (0, 0, 0, 0, tilt_speed, True) : 0); bp->trackball = gltrackball_init (False); } bp->dlists = (GLuint *) calloc (countof(all_objs)+1, sizeof(GLuint)); for (i = 0; i < countof(all_objs); i++) bp->dlists[i] = glGenLists (1); parse_color (mi, "textColor", bp->text_color); for (i = 0; i < countof(all_objs); i++) { const struct gllist *gll = *all_objs[i]; char *key = 0; GLfloat spec[4] = {0.4, 0.4, 0.4, 1.0}; GLfloat shiny = 80; /* 0-128 */ glNewList (bp->dlists[i], GL_COMPILE); glMatrixMode(GL_MODELVIEW); glPushMatrix(); glMatrixMode(GL_TEXTURE); glPushMatrix(); glMatrixMode(GL_MODELVIEW); glRotatef (-90, 1, 0, 0); glBindTexture (GL_TEXTURE_2D, 0); switch (i) { case SPLITFLAP_QUARTER_FRAME: key = "frameColor"; break; case SPLITFLAP_OUTER_FRAME: key = "caseColor"; break; case SPLITFLAP_DISC_QUARTER: key = (wire ? "frameColor" : "discColor"); break; case SPLITFLAP_FIN_EDGE_HALF: case SPLITFLAP_FIN_FACE_HALF: key = "finColor"; break; default: abort(); } parse_color (mi, key, bp->component_colors[i]); if (wire && i == SPLITFLAP_FIN_EDGE_HALF) bp->component_colors[i][0] = bp->component_colors[i][1] = bp->component_colors[i][2] = 0.7; glMaterialfv (GL_FRONT_AND_BACK, GL_SPECULAR, spec); glMaterialf (GL_FRONT_AND_BACK, GL_SHININESS, shiny); switch (i) { case SPLITFLAP_OUTER_FRAME: if (! splitflap_obj_outer_frame) splitflap_obj_outer_frame = (struct gllist *) calloc (1, sizeof(*splitflap_obj_outer_frame)); splitflap_obj_outer_frame->points = draw_outer_frame(mi); break; default: renderList (gll, wire); break; } glMatrixMode(GL_TEXTURE); glPopMatrix(); glMatrixMode(GL_MODELVIEW); glPopMatrix(); glEndList (); } if (grid_width < 1) grid_width = 1; if (grid_height < 1) grid_height = 1; bp->flappers = (flapper *) calloc (grid_width * grid_height, sizeof (flapper)); for (i = 0; i < grid_width * grid_height; i++) { flapper *f = &bp->flappers[i]; if (!bp->clock_p) { f->spool = ascii_spool; f->spool_size = countof (ascii_spool); } else { switch (i) { case 0: if (bp->clock_p == 12) { f->spool = digit_s1_spool; f->spool_size = countof (digit_s1_spool); } else { f->spool = digit_01_spool; f->spool_size = countof (digit_01_spool); } break; case 1: case 3: case 5: f->spool = digit_spool; f->spool_size = countof (digit_spool); break; case 2: case 4: f->spool = digit_05_spool; f->spool_size = countof (digit_05_spool); break; case 6: f->spool = ap_spool; f->spool_size = countof (ap_spool); break; case 7: f->spool = m_spool; f->spool_size = countof (m_spool); break; default: abort(); } } f->target_index = random() % f->spool_size; /* f->target_index = 0; */ f->current_index = f->target_index; f->missing = (((random() % 10) == 0) ? (random() % f->spool_size) : -1); } bp->font_data = load_texture_font (mi->dpy, "flapFont"); init_textures (mi); reshape_splitflap (mi, MI_WIDTH(mi), MI_HEIGHT(mi)); } static int draw_component (ModeInfo *mi, int i) { splitflap_configuration *bp = &bps[MI_SCREEN(mi)]; glMaterialfv (GL_FRONT_AND_BACK, GL_AMBIENT_AND_DIFFUSE, bp->component_colors[i]); glCallList (bp->dlists[i]); return (*all_objs[i])->points / 3; } static int draw_frame_quarter (ModeInfo *mi, flapper *f) { int count = 0; glPushMatrix(); count += draw_component (mi, SPLITFLAP_QUARTER_FRAME); glPopMatrix(); return count; } static int draw_disc_quarter (ModeInfo *mi, flapper *f) { int count = 0; glPushMatrix(); count += draw_component (mi, SPLITFLAP_DISC_QUARTER); glPopMatrix(); return count; } static int draw_fin_edge_half (ModeInfo *mi, flapper *f) { int count = 0; glPushMatrix(); count += draw_component (mi, SPLITFLAP_FIN_EDGE_HALF); glPopMatrix(); return count; } static int draw_fin_face_half (ModeInfo *mi, flapper *f) { int count = 0; if (MI_IS_WIREFRAME(mi)) return 0; glPushMatrix(); count += draw_component (mi, SPLITFLAP_FIN_FACE_HALF); glPopMatrix(); return count; } static int draw_frame (ModeInfo *mi, flapper *f) { int count = 0; glPushMatrix(); glFrontFace (GL_CCW); count += draw_frame_quarter (mi, f); count += draw_disc_quarter (mi, f); glScalef (-1, 1, 1); glFrontFace (GL_CW); count += draw_frame_quarter (mi, f); count += draw_disc_quarter (mi, f); glScalef ( 1, -1, 1); glFrontFace (GL_CCW); count += draw_frame_quarter (mi, f); count += draw_disc_quarter (mi, f); glScalef (-1, 1, 1); glFrontFace (GL_CW); count += draw_frame_quarter (mi, f); count += draw_disc_quarter (mi, f); glPopMatrix(); return count; } static void draw_fin_text_quad (ModeInfo *mi, flapper *f, int index, Bool top_p) { int wire = MI_IS_WIREFRAME(mi); splitflap_configuration *bp = &bps[MI_SCREEN(mi)]; /* 15 / is weird 27 ; descends too far 32 @ is too wide 59 [ descends too far 79 A^ is taller than the font 89 I` is weird */ GLfloat z = 0.035; /* Lifted off the surface by this distance */ GLfloat bot = 0.013; /* Distance away from the mid gutter */ GLfloat scale = 1.8; /* Scale to fill the panel */ int lh = bp->ascent + bp->descent; texinfo *ti; GLfloat qx0, qy0, qx1, qy1; GLfloat tx0, ty0, tx1, ty1; XCharStruct overall; int tex_width, tex_height; int i; for (i = 0; i < bp->texinfo_size; i++) { ti = &bp->texinfo[i]; if (!strcmp (f->spool[index], ti->text)) break; } if (i >= bp->texinfo_size) abort(); overall = ti->metrics; tex_width = ti->tex_width; tex_height = ti->tex_height; if (bp->ascent < overall.ascent) /* WTF! Á has a higher ascent than the font itself! Scale it down so that it doesn't overlap the fin. */ scale *= bp->ascent / (GLfloat) overall.ascent * 0.98; glPushMatrix(); glNormal3f (0, 0, 1); glFrontFace (top_p ? GL_CCW : GL_CW); if (! wire) { glBindTexture (GL_TEXTURE_2D, ti->texid); enable_texture_string_parameters(); } glTranslatef (0, 0, z); /* Move to just above the surface */ glScalef (1.0 / lh, 1.0 / lh, 1); /* Scale to font pixel coordinates */ glScalef (scale, scale, 1); /* Fill the panel with the font */ if (!top_p) { glRotatef (180, 0, 0, 1); } /* Position the XCharStruct origin at 0,0 in the scene. */ qx0 = -overall.lbearing; qy0 = -overall.descent; qx1 = overall.rbearing; qy1 = overall.ascent; /* Center horizontally. */ qx0 -= (overall.rbearing - overall.lbearing) / 2.0; qx1 -= (overall.rbearing - overall.lbearing) / 2.0; /* Move origin to below font descenders. */ qy0 += bp->descent; qy1 += bp->descent; /* Center vertically. */ qy0 -= (bp->ascent + bp->descent) / 2.0; qy1 -= (bp->ascent + bp->descent) / 2.0; /* Move the descenders down a bit, if there's room. This means that weirdos like [ and $ might not be on the baseline. #### This looks good with X11 fonts but bad with MacOS fonts. WTF? */ #ifndef HAVE_COCOA { GLfloat off = bp->descent / 3.0; GLfloat max = bp->descent - off; if (overall.descent > max) off = max - overall.descent; if (off < 0) off = 0; qy0 -= off; qy1 -= off; } # endif /* !HAVE_COCOA */ /* Attach the texture to the quad. */ tx0 = 0; ty1 = 0; tx1 = (overall.rbearing - overall.lbearing) / (GLfloat) tex_width; ty0 = (overall.ascent + overall.descent) / (GLfloat) tex_height; /* Convert from font ascent/descent to character ascent/descent. */ /* Flip texture horizontally on bottom panel. */ if (!top_p) { GLfloat s = tx0; tx0 = tx1; tx1 = s; } /* Cut the character in half, truncating just above the split line. */ { GLfloat oqy0 = qy0; GLfloat oqy1 = qy1; GLfloat r0, r1; bot *= lh * scale; if (top_p) { if (qy0 < bot) qy0 = bot; } else { if (qy1 > -bot) qy1 = -bot; } r0 = (qy0 - oqy0) / (oqy1 - oqy0); r1 = (qy1 - oqy1) / (oqy1 - oqy0); ty0 -= r0 * (ty0 - ty1); ty1 -= r1 * (ty0 - ty1); } glColor4fv (bp->text_color); glBegin (wire ? GL_LINE_LOOP : GL_QUADS); glTexCoord2f (tx0, ty0); glVertex3f (qx0, qy0, 0); glTexCoord2f (tx1, ty0); glVertex3f (qx1, qy0, 0); glTexCoord2f (tx1, ty1); glVertex3f (qx1, qy1, 0); glTexCoord2f (tx0, ty1); glVertex3f (qx0, qy1, 0); glEnd(); glPopMatrix(); if (! wire) { glDisable (GL_BLEND); glEnable (GL_LIGHTING); glDisable (GL_TEXTURE_2D); } } static int draw_fin (ModeInfo *mi, flapper *f, int front_index, int back_index, Bool text_p) { int count = 0; glPushMatrix(); glFrontFace (GL_CCW); if (! text_p) count += draw_fin_edge_half (mi, f); if (front_index >= 0) { if (text_p) { draw_fin_text_quad (mi, f, front_index, True); count++; } else count += draw_fin_face_half (mi, f); } glScalef (-1, 1, 1); if (! text_p) { glFrontFace (GL_CW); count += draw_fin_edge_half (mi, f); if (front_index >= 0) count += draw_fin_face_half (mi, f); } if (back_index >= 0) { glRotatef (180, 0, 1, 0); if (text_p) { draw_fin_text_quad (mi, f, back_index, False); count++; } else { count += draw_fin_face_half (mi, f); glScalef (-1, 1, 1); glFrontFace (GL_CCW); count += draw_fin_face_half (mi, f); } } glPopMatrix(); return count; } /* The case holding the grid of flappers. */ static int draw_outer_frame (ModeInfo *mi) { splitflap_configuration *bp = &bps[MI_SCREEN(mi)]; int count = 0; GLfloat w = grid_width; GLfloat h = grid_height; GLfloat d = 1; if (bp->clock_p == 12) w += COLON_WIDTH * 3; else if (bp->clock_p == 24) w += COLON_WIDTH * 2; w += 0.2; h += 0.2; if (bp->clock_p) w += 0.25; if (w > 3) w += 0.5; if (h > 3) h += 0.5; if (MI_IS_WIREFRAME(mi)) return 0; glFrontFace (GL_CCW); glPushMatrix(); glTranslatef (0, 1.03, 0); glBegin (GL_QUADS); glNormal3f ( 0, 1, 0); /* back */ glVertex3f (-w, d, h); glVertex3f ( w, d, h); glVertex3f ( w, d, -h); glVertex3f (-w, d, -h); count++; glNormal3f ( 0, -1, 0); /* front */ glVertex3f (-w, -d, -h); glVertex3f ( w, -d, -h); glVertex3f ( w, -d, h); glVertex3f (-w, -d, h); count++; glNormal3f ( 0, 0, 1); /* top */ glVertex3f (-w, -d, h); glVertex3f ( w, -d, h); glVertex3f ( w, d, h); glVertex3f (-w, d, h); count++; glNormal3f ( 0, 0, -1); /* bottom */ glVertex3f (-w, d, -h); glVertex3f ( w, d, -h); glVertex3f ( w, -d, -h); glVertex3f (-w, -d, -h); count++; glNormal3f ( 1, 0, 0); /* left */ glVertex3f ( w, -d, h); glVertex3f ( w, -d, -h); glVertex3f ( w, d, -h); glVertex3f ( w, d, h); count++; glNormal3f (-1, 0, 0); /* right */ glVertex3f (-w, -d, -h); glVertex3f (-w, -d, h); glVertex3f (-w, d, h); glVertex3f (-w, d, -h); count++; glEnd(); glPopMatrix(); return count; } static void tick_flapper (ModeInfo *mi, flapper *f) { splitflap_configuration *bp = &bps[MI_SCREEN(mi)]; double prev = f->current_index; Bool wrapped_p = False; if (bp->button_down_p) return; if (f->current_index == f->target_index) return; f->current_index += speed * 0.35; /* turn the crank */ while (f->current_index > f->spool_size) { f->current_index -= f->spool_size; wrapped_p = True; } if (f->current_index < 0) abort(); if ((prev < f->target_index || wrapped_p) && f->current_index > f->target_index) /* just overshot */ f->current_index = f->target_index; } #define MOD(M,N) (((M)+(N)) % (N)) /* Works with negatives */ static int draw_flapper (ModeInfo *mi, flapper *f, Bool text_p) { int prev_index = floor (f->current_index); int next_index = MOD (prev_index+1, f->spool_size); int count = 0; GLfloat epsilon = 0.02; GLfloat r = f->current_index - prev_index; Bool moving_p = (r > 0 && r < 1); GLfloat sticky = f->sticky; if (f->missing >= 0) sticky = 0; if (f->missing >= 0 && MOD (prev_index, f->spool_size) == f->missing) { moving_p = False; sticky = 0; } if (!moving_p) next_index = prev_index; if (! text_p) count += draw_frame (mi, f); /* Top flap, flat: top half of target char */ if (!moving_p || !text_p || r > epsilon) { int p2 = next_index; if (p2 == f->missing) p2 = MOD (p2+1, f->spool_size); count += draw_fin (mi, f, p2, -1, text_p); } /* Bottom flap, flat: bottom half of prev char */ if (!moving_p || !text_p || r < 1 - epsilon) { int p2 = prev_index; if (!moving_p && sticky) p2 = MOD (p2-1, f->spool_size); if (f->missing >= 0 && p2 == MOD (f->missing+1, f->spool_size)) p2 = MOD (p2-1, f->spool_size); glPushMatrix(); glRotatef (180, 1, 0, 0); count += draw_fin (mi, f, -1, p2, text_p); glPopMatrix(); } /* Moving flap, front: top half of prev char */ /* Moving flap, back: bottom half of target char */ if (moving_p || sticky) { if (!moving_p) r = 1.0; if (sticky && r > 1 - sticky) r = 1 - sticky; glPushMatrix(); glRotatef (r * 180, 1, 0, 0); count += draw_fin (mi, f, prev_index, next_index, text_p); glPopMatrix(); } return count; } static int draw_colon (ModeInfo *mi) { splitflap_configuration *bp = &bps[MI_SCREEN(mi)]; GLfloat s = 1.0 / (bp->ascent + bp->descent); GLfloat z = 0.01; int count = 0; XCharStruct m; texture_string_metrics (bp->font_data, ":", &m, 0, 0); s *= 2; glPushMatrix(); glTranslatef (-(1 + COLON_WIDTH), 0, 0); glScalef (s, s, 1); glTranslatef (-m.lbearing - (m.rbearing - m.lbearing)/2, -(m.ascent + m.descent) / 2, 0); glEnable (GL_TEXTURE_2D); /* draw the text five times, to give it a border. */ { const XPoint offsets[] = {{ -1, -1 }, { -1, 1 }, { 1, 1 }, { 1, -1 }, { 0, 0 }}; int i; GLfloat n = 1.5; glColor3f (0, 0, 0); for (i = 0; i < countof(offsets); i++) { glPushMatrix(); if (offsets[i].x == 0) { glColor4fv (bp->text_color); glTranslatef (0, 0, z * 2); } glTranslatef (n * offsets[i].x, n * offsets[i].y, 0); print_texture_string (bp->font_data, ":"); count++; glPopMatrix(); } } glPopMatrix(); return count; } /* Reads and returns a single Unicode character from the text client. */ static unsigned long read_unicode (ModeInfo *mi) { splitflap_configuration *bp = &bps[MI_SCREEN(mi)]; const unsigned char *end = bp->text + sizeof(bp->text) - 1; /* 4 bytes */ unsigned long uc = 0; long L; int i; if (bp->clock_p || !bp->tc) abort(); /* Fill the buffer with available input. */ i = strlen ((char *) bp->text); while (i < (end - bp->text)) { int c = textclient_getc (bp->tc); if (c <= 0) break; bp->text[i++] = (char) c; bp->text[i] = 0; } /* Pop 1-4 bytes from the front of the buffer and extract a UTF8 character. */ L = utf8_decode (bp->text, i, &uc); if (L) { int j = end - bp->text - L; memmove (bp->text, bp->text + L, j); bp->text[j] = 0; } else uc = 0; return uc; } /* Given a Unicode character, finds the corresponding index on the spool, if any. Returns 0 if not found. */ static int find_index (ModeInfo *mi, flapper *f, long uc) { char string[5]; int L = utf8_encode (uc, string, sizeof(string) - 1); int i; if (L <= 0) return 0; string[L] = 0; for (i = 0; i < f->spool_size; i++) { if (!strcmp (string, f->spool[i])) return i; } return 0; } /* Read input from the text client and populate the spool with it. */ static void fill_targets (ModeInfo *mi) { splitflap_configuration *bp = &bps[MI_SCREEN(mi)]; int x, y; Bool cls_p = False; if (bp->clock_p) { char buf[80]; time_t now = time ((time_t *) 0); struct tm *tm = localtime (&now); const char *fmt = (bp->clock_p == 24 ? "%H%M%S" : "%I%M%S%p"); int i; strftime (buf, sizeof(buf)-1, fmt, tm); if (bp->clock_p == 12 && buf[0] == '0') buf[0] = ' '; for (i = 0; i < strlen(buf); i++) { flapper *f = &bp->flappers[i]; f->target_index = find_index (mi, f, buf[i]); } for (; i < grid_width * grid_height; i++) { flapper *f = &bp->flappers[i]; f->target_index = find_index (mi, f, ' '); } return; } for (y = 0; y < grid_height; y++) { Bool nl_p = False; for (x = 0; x < grid_width; x++) { int i = y * grid_width + x; flapper *f = &bp->flappers[i]; unsigned long uc = ((nl_p || cls_p) ? ' ' : read_unicode (mi)); if (uc == '\r' || uc == '\n') nl_p = True; else if (uc == 12) /* ^L */ cls_p = True; /* Convert Unicode to the closest Latin1 equivalent. */ if (uc > 127) { Bool ascii_p = (f->spool != latin1_spool); unsigned char s[5], *s2; int L = utf8_encode (uc, (char *) s, sizeof(s)); s[L] = 0; s2 = (unsigned char *) utf8_to_latin1 ((char *) s, ascii_p); if (s2[0] < 128) /* ASCII */ uc = s2[0]; else /* Latin1 -> UTF8 -> Unicode */ { s[0] = (s2[0] > 0xBF ? 0xC3 : 0xC2); s[1] = s2[0] & (s2[0] > 0xBF ? 0xBF : 0xFF); s[2] = 0; utf8_decode (s, 2, &uc); } free (s2); } /* Upcase ASCII. Upcasing Unicrud would be rocket surgery. */ if (uc >= 'a' && uc <= 'z') uc += ('A'-'a'); f->target_index = find_index (mi, f, uc); f->sticky = (((random() % 20) == 0) ? 0.05 + frand(0.1) + frand(0.1) : 0); } } # if 0 for (y = 0; y < grid_height; y++) { fprintf (stderr, "# "); for (x = 0; x < grid_width; x++) { int i = y * grid_width + x; flapper *f = &bp->flappers[i]; fprintf(stderr, "%s", bp->spool[f->target_index]); } fprintf (stderr, " #\n"); } fprintf (stderr, "\n"); # endif } static void draw_flappers (ModeInfo *mi, Bool text_p) { splitflap_configuration *bp = &bps[MI_SCREEN(mi)]; int x, y; int running = 0; for (y = 0; y < grid_height; y++) for (x = 0; x < grid_width; x++) { int i = (grid_height - y - 1) * grid_width + x; flapper *f = &bp->flappers[i]; GLfloat xx = x; GLfloat yy = y; if (bp->clock_p) { if (x >= 2) xx += COLON_WIDTH; if (x >= 4) xx += COLON_WIDTH; if (x >= 6) xx += COLON_WIDTH; } xx *= 2.01; yy *= 1.98; glPushMatrix(); glTranslatef (xx, yy, 0); mi->polygon_count += draw_flapper (mi, f, text_p); if (text_p && bp->clock_p && (x == 2 || x == 4)) mi->polygon_count += draw_colon (mi); glPopMatrix(); if (text_p) { tick_flapper (mi, f); if (f->current_index != f->target_index) running++; } } if (text_p && !running) { if (bp->clock_p) fill_targets (mi); else if (bp->linger) { bp->linger--; if (!bp->linger) fill_targets (mi); } else { /* Base of 1 second, plus 1 second for every 25 characters. Also multiply by speed? */ bp->linger = 30; if (!bp->first_time_p) bp->linger += (grid_width * grid_height * 1.2); bp->first_time_p = False; } } } ENTRYPOINT void draw_splitflap (ModeInfo *mi) { splitflap_configuration *bp = &bps[MI_SCREEN(mi)]; Display *dpy = MI_DISPLAY(mi); Window window = MI_WINDOW(mi); if (!bp->glx_context) return; glXMakeCurrent(MI_DISPLAY(mi), MI_WINDOW(mi), *(bp->glx_context)); glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glPushMatrix (); glRotatef(current_device_rotation(), 0, 0, 1); glScalef (0.1, 0.1, 0.1); /* because of gluLookAt */ { double x, y, z; get_position (bp->rot, &x, &y, &z, !bp->button_down_p); glTranslatef((x - 0.5) * 8, (y - 0.5) * 8, (z - 0.5) * 8); gltrackball_rotate (bp->trackball); if (face_front_p) { double maxx = 120; double maxy = 60; double maxz = 45; get_position (bp->rot2, &x, &y, &z, !bp->button_down_p); if (bp->spinx) glRotatef (maxy/2 - x*maxy, 1, 0, 0); if (bp->spiny) glRotatef (maxx/2 - y*maxx, 0, 1, 0); if (bp->spinz) glRotatef (maxz/2 - z*maxz, 0, 0, 1); } else { get_rotation (bp->rot, &x, &y, &z, !bp->button_down_p); glRotatef (x * 360, 1, 0, 0); glRotatef (y * 360, 0, 1, 0); glRotatef (z * 360, 0, 0, 1); } } /* Fit the whole grid on the screen */ { GLfloat r = MI_HEIGHT(mi) / (GLfloat) MI_WIDTH(mi); int cells = (grid_width > grid_height ? grid_width * r : grid_height); GLfloat s = 8; # ifdef HAVE_MOBILE s *= 2; /* #### What. Why is this necessary? */ #endif s /= cells; glScalef (s, s, s); } mi->polygon_count = 0; mi->polygon_count += draw_component (mi, SPLITFLAP_OUTER_FRAME); { GLfloat xoff = (bp->clock_p == 12 ? COLON_WIDTH * 3 : bp->clock_p == 24 ? COLON_WIDTH * 2 : 0); glTranslatef (1 - (grid_width + xoff), 1 - grid_height, 0); } /* We must render all text after all polygons, or alpha blending doesn't work right. */ draw_flappers (mi, False); draw_flappers (mi, True); glPopMatrix (); if (mi->fps_p) do_fps (mi); glFinish(); glXSwapBuffers(dpy, window); } ENTRYPOINT void release_splitflap (ModeInfo *mi) { splitflap_configuration *bp = &bps[MI_SCREEN(mi)]; if (bp->tc) textclient_close (bp->tc); /* #### bp->texinfo */ } XSCREENSAVER_MODULE ("SplitFlap", splitflap) #endif /* USE_GL */ xscreensaver-5.36/hacks/glx/splitflap_obj.c000664 000767 000024 00000016773 12701612217 021034 0ustar00jwzstaff000000 000000 /* Generated from "splitflap.dxf" on 04-May-2015. Smoothed vertex normals. Normalized to unit bounding box. Components: box_quarter_frame, disc_quarter, fin_edge_half, fin_face_half. */ #include "gllist.h" static const float splitflap_obj_box_quarter_frame_data[] = { 0,0,-1,0,0.037037,0.884606, 0,0,-1,-0.950617,-0.049383,0.884606, 0,0,-1,-0.950617,0.037037,0.884606, 0,0,-1,-0.950617,-0.049383,0.884606, 0,0,-1,0,0.037037,0.884606, 0,0,-1,0,-0.049383,0.884606, 0,0,1,-1,-0.049383,0.983371, 0,0,1,0,0.061728,0.983371, 0,0,1,-1,0.061728,0.983371, 0,0,1,0,0.061728,0.983371, 0,0,1,-1,-0.049383,0.983371, 0,0,1,0,-0.049383,0.983371, 0,-1,0,0,-0.049383,0.983371, 0,-1,0.000217,-0.950617,-0.049383,0.884606, 0,-1,0,0,-0.049383,0.884606, 0,-1,0.000217,-0.950617,-0.049383,0.884606, 0,-1,0,0,-0.049383,0.983371, -0.002919,-0.999996,0.000163,-1,-0.049383,0.884606, -0.002919,-0.999996,0.000163,-1,-0.049383,0.884606, 0,-1,0,0,-0.049383,0.983371, 0,-1,0,-1,-0.049383,0.983371, -1,0,0,-1,0.061728,0.983371, -1,0,0,-1,-0.049383,0.884606, -1,0,0,-1,-0.049383,0.983371, -1,0,0,-1,-0.049383,0.884606, -1,0,0,-1,0.061728,0.983371, -1,0,0,-1,0.061728,0.884606, -1,0,0,-1,0.061728,0.884606, -1,0,0,-1,-0.049383,-0.000043, -1,0,0,-1,-0.049383,0.884606, -1,0,0,-1,-0.049383,-0.000043, -1,0,0,-1,0.061728,0.884606, -1,0,0,-1,0.061728,-0.000043, -0.005838,-0.999983,0.000326,-0.950617,-0.049959,0, -0.002919,-0.999996,0.000163,-1,-0.049383,0.884606, -0.011676,-0.999932,0,-1,-0.049383,-0.000043, -0.002919,-0.999996,0.000163,-1,-0.049383,0.884606, -0.005838,-0.999983,0.000326,-0.950617,-0.049959,0, 0,-1,0.000217,-0.950617,-0.049383,0.884606, 1,0,0,-0.950617,0.037037,0, 1,0,0,-0.950617,-0.049383,0.884606, 1,0,0,-0.950617,-0.049959,0, 1,0,0,-0.950617,-0.049383,0.884606, 1,0,0,-0.950617,0.037037,0, 1,0,0,-0.950617,0.037037,0.884606, 0,-1,0,0,0.037037,0.884606, 0,-1,0,-0.950617,0.037037,0, 0,-1,0,0,0.037037,0, 0,-1,0,-0.950617,0.037037,0, 0,-1,0,0,0.037037,0.884606, 0,-1,0,-0.950617,0.037037,0.884606 }; static const struct gllist splitflap_obj_box_quarter_frame_frame = { GL_N3F_V3F, GL_TRIANGLES, 51, splitflap_obj_box_quarter_frame_data, 0 }; const struct gllist *splitflap_obj_box_quarter_frame = &splitflap_obj_box_quarter_frame_frame; static const float splitflap_obj_disc_quarter_data[] = { 0,-1,0,-0.839506,-0.08077,0, 0,-0.991445,0.130526,-0.950617,-0.08077,0.076689, 0,-1,0,-0.950617,-0.08077,0, 0,-0.991445,0.130526,-0.950617,-0.08077,0.076689, 0,-1,0,-0.839506,-0.08077,0, 0,-0.991445,0.130526,-0.839506,-0.08077,0.076689, 0,-0.939769,0.341811,-0.839506,-0.041073,0.22484, 0,-0.991445,0.130526,-0.950617,-0.08077,0.076689, 0,-0.991445,0.130526,-0.839506,-0.08077,0.076689, 0,-0.991445,0.130526,-0.950617,-0.08077,0.076689, 0,-0.939769,0.341811,-0.839506,-0.041073,0.22484, 0,-0.906214,0.42282,-0.950617,-0.041073,0.22484, 0,-0.866025,0.5,-0.839506,0.037037,0.36013, 0,-0.906214,0.42282,-0.950617,-0.041073,0.22484, 0,-0.939769,0.341811,-0.839506,-0.041073,0.22484, 0,-0.906214,0.42282,-0.950617,-0.041073,0.22484, 0,-0.866025,0.5,-0.839506,0.037037,0.36013, 0,-0.866025,0.5,-0.950617,0.037037,0.36013, -1,0,0,-0.950617,0.037037,0, -1,0,0,-0.950617,-0.08077,0, -1,0,0,-0.950617,-0.08077,0.076689, -1,0,0,-0.950617,0.037037,0, -1,0,0,-0.950617,-0.08077,0.076689, -1,0,0,-0.950617,-0.041073,0.22484, 1,0,0,-0.839506,0.037037,0.36013, 1,0,0,-0.839506,-0.041073,0.22484, 1,0,0,-0.839506,0.037037,0, 1,0,0,-0.839506,0.037037,0, 1,0,0,-0.839506,-0.08077,0.076689, 1,0,0,-0.839506,-0.08077,0, 1,0,0,-0.839506,0.037037,0, 1,0,0,-0.839506,-0.041073,0.22484, 1,0,0,-0.839506,-0.08077,0.076689 }; static const struct gllist splitflap_obj_disc_quarter_frame = { GL_N3F_V3F, GL_TRIANGLES, 33, splitflap_obj_disc_quarter_data, 0 }; const struct gllist *splitflap_obj_disc_quarter = &splitflap_obj_disc_quarter_frame; static const float splitflap_obj_fin_edge_half_data[] = { 0,0,-1,-0.82716,0.006173,0.43613, 0,0,-1,-0.925926,-0.030864,0.43613, 0,0,-1,-0.925926,0.006173,0.43613, 0,0,-1,-0.925926,-0.030864,0.43613, 0,0,-1,-0.82716,0.006173,0.43613, 0,0,-1,-0.82716,-0.030864,0.43613, -0.996214,0,0.086934,-0.925926,0.006173,0.761149, -1,0,0,-0.925926,-0.030864,0.43613, -0.984769,0,0.173868,-0.925926,-0.030864,0.761149, -1,0,0,-0.925926,-0.030864,0.43613, -0.996214,0,0.086934,-0.925926,0.006173,0.761149, -1,0,0,-0.925926,0.006173,0.43613, 0,0,1,0,-0.030864,0.859915, -0.086934,0,0.996214,-0.82716,0.006173,0.859915, -0.173868,0,0.984769,-0.82716,-0.030864,0.859915, -0.086934,0,0.996214,-0.82716,0.006173,0.859915, 0,0,1,0,-0.030864,0.859915, 0,0,1,0,0.006173,0.859915, 0,0,-1,0,0.006173,0.012346, 0,0,-1,-0.82716,-0.030864,0.012346, 0,0,-1,-0.82716,0.006173,0.012346, 0,0,-1,-0.82716,-0.030864,0.012346, 0,0,-1,0,0.006173,0.012346, 0,0,-1,0,-0.030864,0.012346, -1,0,0,-0.82716,0.006173,0.43613, -1,0,0,-0.82716,-0.030864,0.012346, -1,0,0,-0.82716,-0.030864,0.43613, -1,0,0,-0.82716,-0.030864,0.012346, -1,0,0,-0.82716,0.006173,0.43613, -1,0,0,-0.82716,0.006173,0.012346, -0.907073,0,0.420974,-0.912694,0.006173,0.810532, -0.984769,0,0.173868,-0.925926,-0.030864,0.761149, -0.81811,0,0.575061,-0.912694,-0.030864,0.810532, -0.984769,0,0.173868,-0.925926,-0.030864,0.761149, -0.907073,0,0.420974,-0.912694,0.006173,0.810532, -0.996214,0,0.086934,-0.925926,0.006173,0.761149, -0.707107,0,0.707107,-0.876543,0.006173,0.846683, -0.81811,0,0.575061,-0.912694,-0.030864,0.810532, -0.707107,0,0.707107,-0.876543,-0.030864,0.846683, -0.81811,0,0.575061,-0.912694,-0.030864,0.810532, -0.707107,0,0.707107,-0.876543,0.006173,0.846683, -0.907073,0,0.420974,-0.912694,0.006173,0.810532, -0.173868,0,0.984769,-0.82716,-0.030864,0.859915, -0.258819,0,0.965926,-0.876543,0.006173,0.846683, -0.258819,0,0.965926,-0.876543,-0.030864,0.846683, -0.258819,0,0.965926,-0.876543,0.006173,0.846683, -0.173868,0,0.984769,-0.82716,-0.030864,0.859915, -0.086934,0,0.996214,-0.82716,0.006173,0.859915 }; static const struct gllist splitflap_obj_fin_edge_half_frame = { GL_N3F_V3F, GL_TRIANGLES, 48, splitflap_obj_fin_edge_half_data, 0 }; const struct gllist *splitflap_obj_fin_edge_half = &splitflap_obj_fin_edge_half_frame; static const float splitflap_obj_fin_face_half_data[] = { 0,-1,0,-0.82716,-0.030864,0.859915, 0,-1,0,-0.82716,-0.030864,0.761149, 0,-1,0,0,-0.030864,0.761149, 0,-1,0,-0.82716,-0.030864,0.761149, 0,-1,0,-0.925926,-0.030864,0.761149, 0,-1,0,-0.82716,-0.030864,0.43613, 0,-1,0,-0.82716,-0.030864,0.761149, 0,-1,0,-0.82716,-0.030864,0.43613, 0,-1,0,0,-0.030864,0.761149, 0,-1,0,0,-0.030864,0.761149, 0,-1,0,-0.82716,-0.030864,0.43613, 0,-1,0,0,-0.030864,0.43613, 0,-1,0,-0.82716,-0.030864,0.859915, 0,-1,0,0,-0.030864,0.761149, 0,-1,0,0,-0.030864,0.859915, 0,-1,0,-0.925926,-0.030864,0.761149, 0,-1,0,-0.925926,-0.030864,0.43613, 0,-1,0,-0.82716,-0.030864,0.43613, 0,-1,0,-0.82716,-0.030864,0.43613, 0,-1,0,0,-0.030864,0.012346, 0,-1,0,0,-0.030864,0.43613, 0,-1,0,-0.82716,-0.030864,0.43613, 0,-1,0,-0.82716,-0.030864,0.012346, 0,-1,0,0,-0.030864,0.012346, 0,-1,0,-0.912694,-0.030864,0.810532, 0,-1,0,-0.925926,-0.030864,0.761149, 0,-1,0,-0.82716,-0.030864,0.761149, 0,-1,0,-0.876543,-0.030864,0.846683, 0,-1,0,-0.912694,-0.030864,0.810532, 0,-1,0,-0.82716,-0.030864,0.761149, 0,-1,0,-0.82716,-0.030864,0.859915, 0,-1,0,-0.876543,-0.030864,0.846683, 0,-1,0,-0.82716,-0.030864,0.761149 }; static const struct gllist splitflap_obj_fin_face_half_frame = { GL_N3F_V3F, GL_TRIANGLES, 33, splitflap_obj_fin_face_half_data, 0 }; const struct gllist *splitflap_obj_fin_face_half = &splitflap_obj_fin_face_half_frame; xscreensaver-5.36/hacks/glx/dymaxionmap.c000664 000767 000024 00000066035 12736545620 020541 0ustar00jwzstaff000000 000000 /* dymaxionmap --- Buckminster Fuller's unwrapped icosahedral globe. * Copyright (c) 2016 Jamie Zawinski. * * Permission to use, copy, modify, and distribute this software and its * documentation for any purpose and without fee is hereby granted, * provided that the above copyright notice appear in all copies and that * both that copyright notice and this permission notice appear in * supporting documentation. * * This file is provided AS IS with no warranties of any kind. The author * shall have no liability with respect to the infringement of copyrights, * trade secrets or any patents by this file or any part thereof. In no * event will the author be liable for any lost revenue or profits or * other special, indirect and consequential damages. */ #define LABEL_FONT "-*-helvetica-bold-r-normal-*-*-240-*-*-*-*-*-*" #ifdef STANDALONE #define DEFAULTS "*delay: 20000 \n" \ "*showFPS: False \n" \ "*wireframe: False \n" \ "*labelFont: " LABEL_FONT "\n" # define refresh_planet 0 # include "xlockmore.h" /* from the xscreensaver distribution */ #else /* !STANDALONE */ # include "xlock.h" /* from the xlockmore distribution */ #endif /* !STANDALONE */ #ifdef USE_GL /* whole file */ #include "sphere.h" #include "normals.h" #include "texfont.h" #ifdef HAVE_XMU # ifndef VMS # include #else /* VMS */ # include # endif /* VMS */ #endif #define DEF_ROTATE "True" #define DEF_ROLL "True" #define DEF_WANDER "True" #define DEF_TEXTURE "True" #define DEF_STARS "True" #define DEF_SPEED "1.0" #define DEF_IMAGE "BUILTIN" #undef countof #define countof(x) (sizeof((x))/sizeof((*x))) #undef BELLRAND #define BELLRAND(n) ((frand((n)) + frand((n)) + frand((n))) / 3) static int do_roll; static int do_wander; static int do_texture; static int do_stars; static GLfloat speed; static char *which_image; static XrmOptionDescRec opts[] = { {"-speed", ".dymaxionmap.speed", XrmoptionSepArg, 0 }, {"-roll", ".dymaxionmap.roll", XrmoptionNoArg, "true" }, {"+roll", ".dymaxionmap.roll", XrmoptionNoArg, "false" }, {"-wander", ".dymaxionmap.wander", XrmoptionNoArg, "true" }, {"+wander", ".dymaxionmap.wander", XrmoptionNoArg, "false" }, {"-texture", ".dymaxionmap.texture", XrmoptionNoArg, "true" }, {"+texture", ".dymaxionmap.texture", XrmoptionNoArg, "false" }, {"-stars", ".dymaxionmap.stars", XrmoptionNoArg, "true" }, {"+stars", ".dymaxionmap.stars", XrmoptionNoArg, "false" }, {"-image", ".dymaxionmap.image", XrmoptionSepArg, 0 }, }; static argtype vars[] = { {&speed, "speed", "Speed", DEF_SPEED, t_Float}, {&do_roll, "roll", "Roll", DEF_ROLL, t_Bool}, {&do_wander, "wander", "Wander", DEF_WANDER, t_Bool}, {&do_texture, "texture", "Texture", DEF_TEXTURE, t_Bool}, {&do_stars, "stars", "Stars", DEF_STARS, t_Bool}, {&which_image, "image", "Image", DEF_IMAGE, t_String}, }; ENTRYPOINT ModeSpecOpt planet_opts = {countof(opts), opts, countof(vars), vars, NULL}; #ifdef USE_MODULES ModStruct planet_description = {"planet", "init_planet", "draw_planet", "release_planet", "draw_planet", "init_planet", NULL, &planet_opts, 1000, 1, 2, 1, 4, 1.0, "", "Buckminster Fuller's unwrapped icosahedral globe", 0, NULL}; #endif # ifdef __GNUC__ __extension__ /* don't warn about "string length is greater than the length ISO C89 compilers are required to support" when including the following XPM file... */ # endif #include "../images/dymaxionmap.xpm" #include "../images/ground.xpm" #include "xpm-ximage.h" #include "rotator.h" #include "gltrackball.h" typedef struct { GLXContext *glx_context; GLuint starlist; int starcount; rotator *rot; trackball_state *trackball; Bool button_down_p; enum { STARTUP, FLAT, FOLD, ICO, STEL_IN, AXIS, SPIN, STEL, STEL_OUT, ICO2, UNFOLD } state; GLfloat ratio; GLuint tex1, tex2; texture_font_data *font_data; } planetstruct; static planetstruct *planets = NULL; /* Set up and enable texturing on our object */ static void setup_xpm_texture (ModeInfo *mi, char **xpm_data) { XImage *image = xpm_to_ximage (MI_DISPLAY (mi), MI_VISUAL (mi), MI_COLORMAP (mi), xpm_data); char buf[1024]; clear_gl_error(); glPixelStorei(GL_UNPACK_ALIGNMENT, 1); /* iOS invalid enum: glPixelStorei(GL_UNPACK_ROW_LENGTH, image->width); */ glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, image->width, image->height, 0, GL_RGBA, /* GL_UNSIGNED_BYTE, */ GL_UNSIGNED_INT_8_8_8_8_REV, image->data); sprintf (buf, "builtin texture (%dx%d)", image->width, image->height); check_gl_error(buf); } static Bool setup_file_texture (ModeInfo *mi, char *filename) { Display *dpy = mi->dpy; Visual *visual = mi->xgwa.visual; char buf[1024]; Colormap cmap = mi->xgwa.colormap; XImage *image = xpm_file_to_ximage (dpy, visual, cmap, filename); if (!image) return False; clear_gl_error(); glPixelStorei(GL_UNPACK_ALIGNMENT, 4); glPixelStorei(GL_UNPACK_ROW_LENGTH, image->width); glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, image->width, image->height, 0, GL_RGBA, /* GL_UNSIGNED_BYTE, */ GL_UNSIGNED_INT_8_8_8_8_REV, image->data); sprintf (buf, "texture: %.100s (%dx%d)", filename, image->width, image->height); check_gl_error(buf); return True; } static void setup_texture(ModeInfo * mi) { planetstruct *gp = &planets[MI_SCREEN(mi)]; glGenTextures (1, &gp->tex1); glBindTexture (GL_TEXTURE_2D, gp->tex1); /* Must be after glBindTexture */ glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE); glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT); glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT); glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); if (!which_image || !*which_image || !strcmp(which_image, "BUILTIN")) { BUILTIN: setup_xpm_texture (mi, dymaxionmap_xpm); } else { if (! setup_file_texture (mi, which_image)) goto BUILTIN; } glGenTextures (1, &gp->tex2); glBindTexture (GL_TEXTURE_2D, gp->tex2); /* Must be after glBindTexture */ glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE); glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT); glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT); glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); setup_xpm_texture (mi, ground); check_gl_error("texture initialization"); /* Need to flip the texture top for bottom for some reason. */ glMatrixMode (GL_TEXTURE); glScalef (1, -1, 1); glMatrixMode (GL_MODELVIEW); } static void init_stars (ModeInfo *mi) { planetstruct *gp = &planets[MI_SCREEN(mi)]; int i, j; int width = MI_WIDTH(mi); int height = MI_HEIGHT(mi); int size = (width > height ? width : height); int nstars = size * size / 80; int max_size = 3; GLfloat inc = 0.5; int steps = max_size / inc; gp->starlist = glGenLists(1); glNewList(gp->starlist, GL_COMPILE); for (j = 1; j <= steps; j++) { glPointSize(inc * j); glBegin (GL_POINTS); for (i = 0; i < nstars / steps; i++) { GLfloat d = 0.1; GLfloat r = 0.15 + frand(0.3); GLfloat g = r + frand(d) - d; GLfloat b = r + frand(d) - d; GLfloat x = frand(1)-0.5; GLfloat y = frand(1)-0.5; GLfloat z = ((random() & 1) ? frand(1)-0.5 : (BELLRAND(1)-0.5)/12); /* milky way */ d = sqrt (x*x + y*y + z*z); x /= d; y /= d; z /= d; glColor3f (r, g, b); glVertex3f (x, y, z); gp->starcount++; } glEnd (); } glEndList (); check_gl_error("stars initialization"); } ENTRYPOINT void reshape_planet (ModeInfo *mi, int width, int height) { GLfloat h = (GLfloat) height / (GLfloat) width; glViewport(0, 0, (GLint) width, (GLint) height); glMatrixMode(GL_PROJECTION); glLoadIdentity(); glFrustum(-1.0, 1.0, -h, h, 5.0, 100.0); glMatrixMode(GL_MODELVIEW); glLoadIdentity(); glTranslatef(0.0, 0.0, -40); # ifdef HAVE_MOBILE /* Keep it the same relative size when rotated. */ { int o = (int) current_device_rotation(); if (o != 0 && o != 180 && o != -180) glScalef (h, h, h); } # endif glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); } static void do_normal2 (Bool frontp, XYZ a, XYZ b, XYZ c) { if (frontp) do_normal (a.x, a.y, a.z, b.x, b.y, b.z, c.x, c.y, c.z); else do_normal (b.x, b.y, b.z, a.x, a.y, a.z, c.x, c.y, c.z); } static void triangle0 (ModeInfo *mi, Bool frontp, GLfloat stel_ratio, int bitmask) { /* Render a triangle as six sub-triangles: A / \ / | \ / | \ / 0 | 1 \ E /_ | _\ F / \_ | _/ \ / 5 \D/ 2 \ / / | \ \ / / 4 | 3 \ \ / / | \ \ B ----------------------- C G */ Bool wire = MI_IS_WIREFRAME(mi); GLfloat h = sqrt(3) / 2; GLfloat h2 = sqrt(h*h - (h/2)*(h/2)) - 0.5; XYZ A, B, C, D, E, F, G; XYZ tA, tB, tC, tD, tE, tF, tG; XYZ a, b, c; XYZ ta, tb, tc; A.x = 0; A.y = h; A.z = 0; B.x = -0.5, B.y = 0; B.z = 0; C.x = 0.5, C.y = 0; C.z = 0; D.x = 0; D.y = h/3; D.z = 0; E.x = -h2; E.y = h/2; E.z = 0; F.x = h2; F.y = h/2; F.z = 0; G.x = 0; G.y = 0; G.z = 0; /* When tweaking object XY to stellate, don't change texture coordinates. */ tA = A; tB = B; tC = C; tD = D; tE = E; tF = F; tG = G; /* Eyeballed this to find the depth of stellation that seems to most approximate a sphere. */ D.z = 0.193 * stel_ratio; /* We want to raise E, F and G as well but we can't just shift Z: we need to keep them on the same vector from the center of the sphere, which means also changing F and G's X and Y. */ E.z = F.z = G.z = 0.132 * stel_ratio; { double magic_x = 0.044; double magic_y = 0.028; /* G.x stays 0 */ G.y -= sqrt (magic_x*magic_x + magic_y*magic_y) * stel_ratio; E.x -= magic_x * stel_ratio; E.y += magic_y * stel_ratio; F.x += magic_x * stel_ratio; F.y += magic_y * stel_ratio; } if (bitmask & 1<<0) { glBegin (wire ? GL_LINE_LOOP : GL_TRIANGLES); a = E; b = D; c = A; ta = tE; tb = tD; tc = tA; do_normal2 (frontp, a, b, c); glTexCoord2f (ta.x, ta.y); glVertex3f (a.x, a.y, a.z); glTexCoord2f (tb.x, tb.y); glVertex3f (b.x, b.y, b.z); glTexCoord2f (tc.x, tc.y); glVertex3f (c.x, c.y, c.z); glEnd(); mi->polygon_count++; } if (bitmask & 1<<1) { glBegin (wire ? GL_LINE_LOOP : GL_TRIANGLES); a = D; b = F; c = A; ta = tD; tb = tF; tc = tA; do_normal2 (frontp, a, b, c); glTexCoord2f (ta.x, ta.y); glVertex3f (a.x, a.y, a.z); glTexCoord2f (tb.x, tb.y); glVertex3f (b.x, b.y, b.z); glTexCoord2f (tc.x, tc.y); glVertex3f (c.x, c.y, c.z); glEnd(); mi->polygon_count++; } if (bitmask & 1<<2) { glBegin (wire ? GL_LINE_LOOP : GL_TRIANGLES); a = D; b = C; c = F; ta = tD; tb = tC; tc = tF; do_normal2 (frontp, a, b, c); glTexCoord2f (ta.x, ta.y); glVertex3f (a.x, a.y, a.z); glTexCoord2f (tb.x, tb.y); glVertex3f (b.x, b.y, b.z); glTexCoord2f (tc.x, tc.y); glVertex3f (c.x, c.y, c.z); glEnd(); mi->polygon_count++; } if (bitmask & 1<<3) { glBegin (wire ? GL_LINE_LOOP : GL_TRIANGLES); a = G; b = C; c = D; ta = tG; tb = tC; tc = tD; do_normal2 (frontp, a, b, c); glTexCoord2f (ta.x, ta.y); glVertex3f (a.x, a.y, a.z); glTexCoord2f (tb.x, tb.y); glVertex3f (b.x, b.y, b.z); glTexCoord2f (tc.x, tc.y); glVertex3f (c.x, c.y, c.z); glEnd(); mi->polygon_count++; } if (bitmask & 1<<4) { glBegin (wire ? GL_LINE_LOOP : GL_TRIANGLES); a = B; b = G; c = D; ta = tB; tb = tG; tc = tD; do_normal2 (frontp, a, b, c); glTexCoord2f (ta.x, ta.y); glVertex3f (a.x, a.y, a.z); glTexCoord2f (tb.x, tb.y); glVertex3f (b.x, b.y, b.z); glTexCoord2f (tc.x, tc.y); glVertex3f (c.x, c.y, c.z); glEnd(); mi->polygon_count++; } if (bitmask & 1<<5) { glBegin (wire ? GL_LINE_LOOP : GL_TRIANGLES); a = B; b = D; c = E; ta = tB; tb = tD; tc = tE; do_normal2 (frontp, a, b, c); glTexCoord2f (ta.x, ta.y); glVertex3f (a.x, a.y, a.z); glTexCoord2f (tb.x, tb.y); glVertex3f (b.x, b.y, b.z); glTexCoord2f (tc.x, tc.y); glVertex3f (c.x, c.y, c.z); glEnd(); mi->polygon_count++; } if (bitmask & 1<<6) { glBegin (wire ? GL_LINE_LOOP : GL_TRIANGLES); a = E; b = D; c = A; ta = tE; tb = tD; tc = tA; do_normal2 (frontp, a, b, c); glTexCoord2f (ta.x, ta.y); glVertex3f (a.x, a.y, a.z); glTexCoord2f (tb.x, tb.y); glVertex3f (b.x, b.y, b.z); glTexCoord2f (tc.x, tc.y); glVertex3f (c.x, c.y, c.z); glEnd(); mi->polygon_count++; } } /* The segments, numbered arbitrarily from the top left: ________ _ ________ \ /\ /\ \ |\ / \ 0 / \ / \3> | \ 5 / \ / 1 \ / 2 \| ..|4 \ /-6-.. ___________\/______\/______\/______\/______\ | /\ /\ /\ /\ /\ |7 / \ 9 / \ 11 / \ 13 / \ 15 / \ | / 8 \ / 10 \ / 12 \ / 14 \ / 16 \ |/______\/______\/______\/______\/______\ \ /\ / /\ /\ \ 17 / \ 18 / / \ 20 / \ \ / \ / / 19 \ / 21 \ \/ \/ /______\/______\ Each triangle can be connected to at most two other triangles. We start from the middle, #12, and work our way to the edges. Its centroid is 0,0. */ static void triangle (ModeInfo *mi, int which, Bool frontp, GLfloat fold_ratio, GLfloat stel_ratio) { planetstruct *gp = &planets[MI_SCREEN(mi)]; const GLfloat fg[3] = { 1, 1, 1 }; const GLfloat bg[3] = { 0.3, 0.3, 0.3 }; int a = -1, b = -1; GLfloat max = acos (sqrt(5)/3); GLfloat rot = -max * fold_ratio / (M_PI/180); Bool wire = MI_IS_WIREFRAME(mi); if (wire) glColor3fv (fg); switch (which) { case 3: /* One third of the face. */ triangle0 (mi, frontp, stel_ratio, 1<<3 | 1<<4); break; case 4: /* Two thirds of the face: convex. */ triangle0 (mi, frontp, stel_ratio, 1<<1 | 1<<2 | 1<<3 | 1<<4); break; case 6: /* One half of the face. */ triangle0 (mi, frontp, stel_ratio, 1<<1 | 1<<2 | 1<<3); break; case 7: /* One half of the face. */ triangle0 (mi, frontp, stel_ratio, 1<<2 | 1<<3 | 1<<4); break; default: /* Full face. */ triangle0 (mi, frontp, stel_ratio, 0x3F); break; } if (wire) { char tag[20]; glColor3fv (bg); sprintf (tag, "%d", which); glPushMatrix(); glTranslatef (-0.1, 0.2, 0); glScalef (0.005, 0.005, 0.005); print_texture_string (gp->font_data, tag); glPopMatrix(); mi->polygon_count++; } /* The connection hierarchy of the faces starting at the middle, #12. */ switch (which) { case 0: break; case 1: a = 0; b = -1; break; case 2: a = -1; b = 3; break; case 3: break; case 4: a = -1; b = 5; break; case 5: a = -1; b = 6; break; case 7: break; case 6: break; case 8: a = 17; b = 7; break; case 9: a = 8; b = -1; break; case 10: a = 18; b = 9; break; case 11: a = 10; b = 1; break; case 12: a = 11; b = 13; break; case 13: a = 2; b = 14; break; case 14: a = 15; b = 20; break; case 15: a = 4; b = 16; break; case 16: break; case 17: break; case 18: break; case 19: break; case 20: a = 21; b = 19; break; case 21: break; default: abort(); break; } if (a != -1) { glPushMatrix(); glTranslatef (-0.5, 0, 0); /* Move model matrix to upper left */ glRotatef (60, 0, 0, 1); glTranslatef ( 0.5, 0, 0); glMatrixMode(GL_TEXTURE); /* glPushMatrix(); */ glTranslatef (-0.5, 0, 0); /* Move texture matrix the same way */ glRotatef (60, 0, 0, 1); glTranslatef ( 0.5, 0, 0); glMatrixMode(GL_MODELVIEW); glRotatef (rot, 1, 0, 0); triangle (mi, a, frontp, fold_ratio, stel_ratio); /* This should just be a PopMatrix on the TEXTURE stack, but fucking iOS has GL_MAX_TEXTURE_STACK_DEPTH == 4! WTF! So we have to undo our rotations and translations manually. */ glMatrixMode(GL_TEXTURE); /* glPopMatrix(); */ glTranslatef (-0.5, 0, 0); glRotatef (-60, 0, 0, 1); glTranslatef (0.5, 0, 0); glMatrixMode(GL_MODELVIEW); glPopMatrix(); } if (b != -1) { glPushMatrix(); glTranslatef (0.5, 0, 0); /* Move model matrix to upper right */ glRotatef (-60, 0, 0, 1); glTranslatef (-0.5, 0, 0); glMatrixMode(GL_TEXTURE); /* glPushMatrix(); */ glTranslatef (0.5, 0, 0); /* Move texture matrix the same way */ glRotatef (-60, 0, 0, 1); glTranslatef (-0.5, 0, 0); glMatrixMode(GL_MODELVIEW); glRotatef (rot, 1, 0, 0); triangle (mi, b, frontp, fold_ratio, stel_ratio); /* See above. Grr. */ glMatrixMode(GL_TEXTURE); /* glPopMatrix(); */ glTranslatef (0.5, 0, 0); glRotatef (60, 0, 0, 1); glTranslatef (-0.5, 0, 0); glMatrixMode(GL_MODELVIEW); glPopMatrix(); } } static void draw_triangles (ModeInfo *mi, GLfloat fold_ratio, GLfloat stel_ratio) { planetstruct *gp = &planets[MI_SCREEN(mi)]; Bool wire = MI_IS_WIREFRAME(mi); GLfloat h = sqrt(3) / 2; GLfloat c = h / 3; glTranslatef (0, -h/3, 0); /* Center on face 12 */ /* When closed, center on midpoint of icosahedron. Eyeballed this. */ glTranslatef (0, 0, fold_ratio * 0.754); glFrontFace (GL_CCW); /* Adjust the texture matrix so that it has the same coordinate space as the model. */ glMatrixMode(GL_TEXTURE); glPushMatrix(); { GLfloat texw = 5.5; GLfloat texh = 3 * h; GLfloat midx = 2.5; GLfloat midy = 3 * c; glScalef (1/texw, -1/texh, 1); glTranslatef (midx, midy, 0); } glMatrixMode(GL_MODELVIEW); /* Front faces */ if (wire) glDisable (GL_TEXTURE_2D); else if (do_texture) { glEnable (GL_TEXTURE_2D); glBindTexture (GL_TEXTURE_2D, gp->tex1); } else glDisable (GL_TEXTURE_2D); triangle (mi, 12, True, fold_ratio, stel_ratio); /* Back faces */ if (wire) glDisable (GL_TEXTURE_2D); else if (do_texture) { glEnable (GL_TEXTURE_2D); glBindTexture (GL_TEXTURE_2D, gp->tex2); } else glDisable (GL_TEXTURE_2D); glFrontFace (GL_CW); triangle (mi, 12, False, fold_ratio, 0); glMatrixMode(GL_TEXTURE); glPopMatrix(); glMatrixMode(GL_MODELVIEW); } static void align_axis (ModeInfo *mi, int undo) { /* Rotate so that an axis is lined up with the north and south poles on the map, which are not in the center of their faces, or any other easily computable spot. */ GLfloat r1 = 20.5; GLfloat r2 = 28.5; if (undo) { glRotatef (-r2, 0, 1, 0); glRotatef ( r2, 1, 0, 0); glRotatef (-r1, 1, 0, 0); } else { glRotatef (r1, 1, 0, 0); glRotatef (-r2, 1, 0, 0); glRotatef ( r2, 0, 1, 0); } } static void draw_axis (ModeInfo *mi) { GLfloat s; glDisable (GL_TEXTURE_2D); glDisable (GL_LIGHTING); glPushMatrix(); align_axis (mi, 0); glTranslatef (0.34, 0.39, -0.61); s = 0.96; glScalef (s, s, s); /* tighten up the enclosing sphere */ glColor3f (0.5, 0.5, 0); glRotatef (90, 1, 0, 0); /* unit_sphere is off by 90 */ glRotatef (9.5, 0, 1, 0); /* line up the time zones */ glFrontFace (GL_CCW); unit_sphere (12, 24, True); glBegin(GL_LINES); glVertex3f(0, -2, 0); glVertex3f(0, 2, 0); glEnd(); glPopMatrix(); } ENTRYPOINT Bool planet_handle_event (ModeInfo *mi, XEvent *event) { planetstruct *gp = &planets[MI_SCREEN(mi)]; if (gltrackball_event_handler (event, gp->trackball, MI_WIDTH (mi), MI_HEIGHT (mi), &gp->button_down_p)) return True; else if (event->xany.type == KeyPress) { KeySym keysym; char c = 0; XLookupString (&event->xkey, &c, 1, &keysym, 0); if (c == ' ' || c == '\t' || c == '\r' || c == '\n') { switch (gp->state) { case FLAT: case ICO: case STEL: case AXIS: case ICO2: gp->ratio = 1; break; default: break; } return True; } } return False; } ENTRYPOINT void init_planet (ModeInfo * mi) { planetstruct *gp; int screen = MI_SCREEN(mi); Bool wire = MI_IS_WIREFRAME(mi); if (planets == NULL) { if ((planets = (planetstruct *) calloc(MI_NUM_SCREENS(mi), sizeof (planetstruct))) == NULL) return; } gp = &planets[screen]; if ((gp->glx_context = init_GL(mi)) != NULL) { reshape_planet(mi, MI_WIDTH(mi), MI_HEIGHT(mi)); } gp->state = STARTUP; gp->ratio = 0; gp->font_data = load_texture_font (mi->dpy, "labelFont"); { double spin_speed = 0.1; double wander_speed = 0.002; gp->rot = make_rotator (do_roll ? spin_speed : 0, do_roll ? spin_speed : 0, 0, 1, do_wander ? wander_speed : 0, False); gp->trackball = gltrackball_init (True); } if (wire) do_texture = False; if (do_texture) setup_texture (mi); if (do_stars) init_stars (mi); glEnable (GL_DEPTH_TEST); glEnable (GL_NORMALIZE); glEnable (GL_CULL_FACE); if (!wire) { GLfloat pos[4] = {0.4, 0.2, 0.4, 0.0}; GLfloat amb[4] = {0.4, 0.4, 0.4, 1.0}; GLfloat dif[4] = {1.0, 1.0, 1.0, 1.0}; GLfloat spc[4] = {1.0, 1.0, 1.0, 1.0}; glEnable(GL_LIGHTING); glEnable(GL_LIGHT0); glLightfv(GL_LIGHT0, GL_POSITION, pos); glLightfv(GL_LIGHT0, GL_AMBIENT, amb); glLightfv(GL_LIGHT0, GL_DIFFUSE, dif); glLightfv(GL_LIGHT0, GL_SPECULAR, spc); } } static GLfloat ease_fn (GLfloat r) { return cos ((r/2 + 1) * M_PI) + 1; /* Smooth curve up, end at slope 1. */ } static GLfloat ease_ratio (GLfloat r) { GLfloat ease = 0.35; if (r <= 0) return 0; else if (r >= 1) return 1; else if (r <= ease) return ease * ease_fn (r / ease); else if (r > 1-ease) return 1 - ease * ease_fn ((1 - r) / ease); else return r; } ENTRYPOINT void draw_planet (ModeInfo * mi) { planetstruct *gp = &planets[MI_SCREEN(mi)]; int wire = MI_IS_WIREFRAME(mi); Display *dpy = MI_DISPLAY(mi); Window window = MI_WINDOW(mi); double x, y, z; if (!gp->glx_context) return; glDrawBuffer(GL_BACK); glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glXMakeCurrent (dpy, window, *(gp->glx_context)); mi->polygon_count = 0; if (! gp->button_down_p) switch (gp->state) { case STARTUP: gp->ratio += speed * 0.01; break; case FLAT: gp->ratio += speed * 0.005; break; case FOLD: gp->ratio += speed * 0.01; break; case ICO: gp->ratio += speed * 0.01; break; case STEL_IN: gp->ratio += speed * 0.05; break; case STEL: gp->ratio += speed * 0.01; break; case STEL_OUT: gp->ratio += speed * 0.07; break; case ICO2: gp->ratio += speed * 0.07; break; case AXIS: gp->ratio += speed * 0.02; break; case SPIN: gp->ratio += speed * 0.005; break; case UNFOLD: gp->ratio += speed * 0.01; break; default: abort(); } if (gp->ratio > 1.0) { gp->ratio = 0; switch (gp->state) { case STARTUP: gp->state = FLAT; break; case FLAT: gp->state = FOLD; break; case FOLD: gp->state = ICO; break; case ICO: gp->state = STEL_IN; break; case STEL_IN: gp->state = STEL; break; case STEL: { int i = (random() << 9) % 7; gp->state = (i < 3 ? STEL_OUT : i < 6 ? SPIN : AXIS); } break; case AXIS: gp->state = STEL_OUT; break; case SPIN: gp->state = STEL_OUT; break; case STEL_OUT: gp->state = ICO2; break; case ICO2: gp->state = UNFOLD; break; case UNFOLD: gp->state = FLAT; break; default: abort(); } } glEnable(GL_LINE_SMOOTH); glEnable(GL_POINT_SMOOTH); glEnable(GL_DEPTH_TEST); glEnable(GL_CULL_FACE); glCullFace(GL_BACK); glPushMatrix(); gltrackball_rotate (gp->trackball); glRotatef (current_device_rotation(), 0, 0, 1); if (gp->state != STARTUP) { get_position (gp->rot, &x, &y, &z, !gp->button_down_p); x = (x - 0.5) * 3; y = (y - 0.5) * 3; z = 0; glTranslatef(x, y, z); } if (do_roll && gp->state != STARTUP) { get_rotation (gp->rot, &x, &y, 0, !gp->button_down_p); glRotatef (x * 360, 1.0, 0.0, 0.0); glRotatef (y * 360, 0.0, 1.0, 0.0); } if (do_stars) { glDisable(GL_TEXTURE_2D); glDisable(GL_LIGHTING); glPushMatrix(); glScalef (60, 60, 60); glRotatef (90, 1, 0, 0); glRotatef (35, 1, 0, 0); glCallList (gp->starlist); mi->polygon_count += gp->starcount; glPopMatrix(); glClear(GL_DEPTH_BUFFER_BIT); } if (! wire) glEnable (GL_LIGHTING); if (do_texture) glEnable(GL_TEXTURE_2D); glScalef (2.6, 2.6, 2.6); { GLfloat fold_ratio = 0; GLfloat stel_ratio = 0; switch (gp->state) { case FOLD: fold_ratio = gp->ratio; break; case UNFOLD: fold_ratio = 1 - gp->ratio; break; case ICO: case ICO2: fold_ratio = 1; break; case STEL: case AXIS: case SPIN: fold_ratio = 1; stel_ratio = 1; break; case STEL_IN: fold_ratio = 1; stel_ratio = gp->ratio; break; case STEL_OUT: fold_ratio = 1; stel_ratio = 1 - gp->ratio; break; case STARTUP: /* Tilt in from flat */ glRotatef (-90 * ease_ratio (1 - gp->ratio), 1, 0, 0); break; default: break; } # ifdef HAVE_MOBILE /* Enlarge the icosahedron a bit to make it more visible */ { GLfloat s = 1 + 1.3 * ease_ratio (fold_ratio); glScalef (s, s, s); } # endif if (gp->state == SPIN) { align_axis (mi, 0); glRotatef (ease_ratio (gp->ratio) * 360 * 3, 0, 0, 1); align_axis (mi, 1); } draw_triangles (mi, ease_ratio (fold_ratio), ease_ratio (stel_ratio)); if (gp->state == AXIS) draw_axis(mi); } glPopMatrix(); if (mi->fps_p) do_fps (mi); glFinish(); glXSwapBuffers(dpy, window); } ENTRYPOINT void release_planet (ModeInfo * mi) { if (planets != NULL) { int screen; for (screen = 0; screen < MI_NUM_SCREENS(mi); screen++) { planetstruct *gp = &planets[screen]; if (gp->glx_context) { /* Display lists MUST be freed while their glXContext is current. */ /* but this gets a BadMatch error. -jwz */ /*glXMakeCurrent(MI_DISPLAY(mi), MI_WINDOW(mi), *(gp->glx_context));*/ if (glIsList(gp->starlist)) glDeleteLists(gp->starlist, 1); } } (void) free((void *) planets); planets = NULL; } FreeAllGL(mi); } XSCREENSAVER_MODULE_2 ("DymaxionMap", dymaxionmap, planet) #endif xscreensaver-5.36/hacks/glx/unicrud.c000664 000767 000024 00000064456 12710313371 017655 0ustar00jwzstaff000000 000000 /* unicrud, Copyright (c) 2016 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. */ #define DEFAULTS "*delay: 20000 \n" \ "*showFPS: False \n" \ "*suppressRotationAnimation: True\n" \ "*titleFont: -*-helvetica-bold-r-normal-*-*-180-*-*-*-*-*-*\n" \ "*font: -*-helvetica-bold-r-normal-*-*-2400-*-*-*-*-iso10646-1\n" \ # define refresh_unicrud 0 # define release_unicrud 0 #undef countof #define countof(x) (sizeof((x))/sizeof((*x))) #include "xlockmore.h" #include "rotator.h" #include "gltrackball.h" #include "texfont.h" #include "utf8wc.h" #include #ifdef USE_GL /* whole file */ #define DEF_SPIN "True" #define DEF_WANDER "True" #define DEF_SPEED "1.0" #define DEF_BLOCK "ALL" typedef struct { GLXContext *glx_context; rotator *rot; trackball_state *trackball; Bool button_down_p; GLfloat color[4]; texture_font_data *title_font, *char_font; unsigned long unichar; const char *charplane, *charblock, *charname; enum { IN, LINGER, OUT } state; int spin_direction; GLfloat ratio; } unicrud_configuration; static unicrud_configuration *bps = NULL; static Bool do_spin; static GLfloat speed; static Bool do_wander; static char *do_block; static XrmOptionDescRec opts[] = { { "-spin", ".spin", XrmoptionNoArg, "True" }, { "+spin", ".spin", XrmoptionNoArg, "False" }, { "-wander", ".wander", XrmoptionNoArg, "True" }, { "+wander", ".wander", XrmoptionNoArg, "False" }, { "-speed", ".speed", XrmoptionSepArg, 0 }, { "-block", ".block", XrmoptionSepArg, 0 }, }; static argtype vars[] = { {&do_spin, "spin", "Spin", DEF_SPIN, t_Bool}, {&do_wander, "wander", "Wander", DEF_WANDER, t_Bool}, {&speed, "speed", "Speed", DEF_SPEED, t_Float}, {&do_block, "block", "Block", DEF_BLOCK, t_String}, }; ENTRYPOINT ModeSpecOpt unicrud_opts = {countof(opts), opts, countof(vars), vars, NULL}; static const struct { unsigned long start; const char * const name; } unicode_block_names[] = { /* Through Unicode 8.0, early 2016. */ { 0x0000, "*Basic Multilingual" }, { 0x0000, "Unassigned" }, { 0x0021, "ASCII" }, { 0x0080, "Unassigned" }, { 0x00A1, "Latin1" }, { 0x0100, "Latin Extended-A" }, { 0x0180, "Latin Extended-B" }, { 0x0250, "IPA Extensions" }, { 0x02B0, "Spacing Modifier Letters" }, { 0x0300, "Combining Diacritical Marks" }, { 0x0370, "Greek and Coptic" }, { 0x0400, "Cyrillic" }, { 0x0500, "Cyrillic Supplement" }, { 0x0530, "Armenian" }, { 0x058B, "Unassigned" }, { 0x0590, "Hebrew" }, { 0x05F5, "Unassigned" }, { 0x0600, "Arabic" }, { 0x0700, "Syriac" }, { 0x0750, "Arabic Supplement" }, { 0x0780, "Thaana" }, { 0x07C0, "N'Ko" }, { 0x0800, "Samaritan" }, { 0x0840, "Mandaic" }, { 0x0860, "Unassigned" }, { 0x08A0, "Arabic Extended-A" }, { 0x0900, "Devanagari" }, { 0x0980, "Bengali" }, { 0x09FC, "Unassigned" }, { 0x0A00, "Gurmukhi" }, { 0x0A76, "Unassigned" }, { 0x0A80, "Gujarati" }, { 0x0AF2, "Unassigned" }, { 0x0B00, "Oriya" }, { 0x0B80, "Tamil" }, { 0x0BFB, "Unassigned" }, { 0x0C00, "Telugu" }, { 0x0C80, "Kannada" }, { 0x0CF0, "Unassigned" }, { 0x0D00, "Malayalam" }, { 0x0D80, "Sinhala" }, { 0x0DF5, "Unassigned" }, { 0x0E00, "Thai" }, { 0x0E5C, "Unassigned" }, { 0x0E80, "Lao" }, { 0x0EE0, "Unassigned" }, { 0x0F00, "Tibetan" }, { 0x0FDB, "Unassigned" }, { 0x1000, "Myanmar" }, { 0x10A0, "Georgian" }, { 0x1100, "Hangul Jamo" }, { 0x1200, "Ethiopic" }, { 0x1380, "Ethiopic Supplement" }, { 0x13A0, "Cherokee" }, { 0x1400, "Unified Canadian Aboriginal Syllabics" }, { 0x1677, "Unassigned" }, { 0x1680, "Ogham" }, { 0x16A0, "Runic" }, { 0x16F1, "Unassigned" }, { 0x1700, "Tagalog" }, { 0x1715, "Unassigned" }, { 0x1720, "Hanunoo" }, { 0x1737, "Unassigned" }, { 0x1740, "Buhid" }, { 0x1754, "Unassigned" }, { 0x1760, "Tagbanwa" }, { 0x1774, "Unassigned" }, { 0x1780, "Khmer" }, { 0x17FA, "Unassigned" }, { 0x1800, "Mongolian" }, { 0x18AB, "Unassigned" }, { 0x18B0, "Unified Canadian Aboriginal Syllabics Extended" }, { 0x18F6, "Unassigned" }, { 0x1900, "Limbu" }, { 0x1950, "Tai Le" }, { 0x1975, "Unassigned" }, { 0x1980, "Tai Lue" }, { 0x19E0, "Khmer Symbols" }, { 0x1A00, "Buginese" }, { 0x1A20, "Tai Tham" }, { 0x1AAE, "Unassigned" }, { 0x1AB0, "Combining Diacritical Marks Extended" }, { 0x1ABF, "Unassigned" }, { 0x1B00, "Balinese" }, { 0x1B80, "Sundanese" }, { 0x1BC0, "Batak" }, { 0x1C00, "Lepcha" }, { 0x1C50, "Ol Chiki" }, { 0x1C80, "Unassigned" }, { 0x1CC0, "Sundanese Supplement" }, { 0x1CC8, "Unassigned" }, { 0x1CD0, "Vedic Extensions" }, { 0x1CFA, "Unassigned" }, { 0x1D00, "Phonetic Extensions" }, { 0x1D80, "Phonetic Extensions Supplement" }, { 0x1DC0, "Combining Diacritical Marks Supplement" }, { 0x1E00, "Latin Extended Additional" }, { 0x1F00, "Greek Extended" }, { 0x2000, "General Punctuation" }, { 0x2070, "Superscripts and Subscripts" }, { 0x2095, "Unassigned" }, { 0x20A0, "Currency Symbols" }, { 0x20BE, "Unassigned" }, { 0x20D0, "Combining Diacritical Marks for Symbols" }, { 0x20F1, "Unassigned" }, { 0x2100, "Letterlike Symbols" }, { 0x2150, "Number Forms" }, { 0x2190, "Arrows" }, { 0x2200, "Mathematical Operators" }, { 0x2300, "Miscellaneous Technical" }, { 0x2400, "Control Pictures" }, { 0x2437, "Unassigned" }, { 0x2440, "Optical Character Recognition" }, { 0x244B, "Unassigned" }, { 0x2460, "Enclosed Alphanumerics" }, { 0x2500, "Box Drawing" }, { 0x2580, "Block Elements" }, { 0x25A0, "Geometric Shapes" }, { 0x2600, "Miscellaneous Symbols" }, { 0x2700, "Dingbats" }, { 0x27C0, "Miscellaneous Mathematical Symbols-A" }, { 0x27F0, "Supplemental Arrows-A" }, { 0x2800, "Braille Patterns" }, { 0x2900, "Supplemental Arrows-B" }, { 0x2980, "Miscellaneous Mathematical Symbols-B" }, { 0x2A00, "Supplemental Mathematical Operators" }, { 0x2B00, "Miscellaneous Symbols and Arrows" }, { 0x2B56, "Unassigned" }, /* Unicode 5.1 */ { 0x2BF0, "Unassigned" }, { 0x2C00, "Glagolitic" }, { 0x2C60, "Latin Extended-C" }, { 0x2C80, "Coptic" }, { 0x2D00, "Georgian Supplement" }, { 0x2D26, "Unassigned" }, { 0x2D30, "Tifinagh" }, { 0x2D80, "Ethiopic Extended" }, { 0x2DE0, "Cyrillic Extended-A" }, { 0x2E00, "Supplemental Punctuation" }, { 0x2E43, "Unassigned" }, { 0x2E80, "CJK Radicals Supplement" }, { 0x2EF5, "Unassigned" }, { 0x2F00, "Kangxi Radicals" }, { 0x2FD6, "Unassigned" }, { 0x2FE0, "Unassigned" }, { 0x2FF0, "Ideographic Description Characters" }, { 0x2FFC, "Unassigned" }, { 0x3000, "CJK Symbols and Punctuation" }, { 0x3040, "Hiragana" }, { 0x30A0, "Katakana" }, { 0x3100, "Bopomofo" }, { 0x3130, "Hangul Compatibility Jamo" }, { 0x3190, "Kanbun" }, { 0x31A0, "Bopomofo Extended" }, { 0x31BB, "Unassigned" }, { 0x31C0, "CJK Strokes" }, { 0x31E4, "Unassigned" }, { 0x31F0, "Katakana Phonetic Extensions" }, { 0x3200, "Enclosed CJK Letters and Months" }, { 0x3300, "CJK Compatibility" }, { 0x3400, "CJK Unified Ideographs Extension A" }, { 0x4DB6, "Unassigned" }, { 0x4DC0, "Yijing Hexagram Symbols" }, { 0x4E00, "CJK Unified Ideographs" }, { 0x9FD6, "Unassigned" }, { 0xA000, "Yi Syllables" }, { 0xA48D, "Unassigned" }, { 0xA490, "Yi Radicals" }, { 0xA4C7, "Unassigned" }, { 0xA4D0, "Lisu" }, { 0xA500, "Vai" }, { 0xA62C, "Unassigned" }, { 0xA640, "Cyrillic Extended-B" }, { 0xA6A0, "Bamum" }, { 0xA700, "Modifier Tone Letters" }, { 0xA720, "Latin Extended-D" }, { 0xA800, "Syloti Nagri" }, { 0xA82C, "Unassigned" }, { 0xA830, "Common Indic Number Forms" }, { 0xA83A, "Unassigned" }, { 0xA840, "Phags-pa" }, { 0xA878, "Unassigned" }, { 0xA880, "Saurashtra" }, { 0xA8DA, "Unassigned" }, { 0xA8E0, "Devanagari Extended" }, { 0xA8FE, "Unassigned" }, { 0xA900, "Kayah Li" }, { 0xA930, "Rejang" }, { 0xA960, "Hangul Jamo Extended-A" }, { 0xA97D, "Unassigned" }, { 0xA980, "Javanese" }, { 0xA9E0, "Myanmar Extended-B" }, { 0xAA00, "Cham" }, { 0xAA60, "Myanmar Extended-A" }, { 0xAA80, "Tai Viet" }, { 0xAAE0, "Meetei Mayek Extensions" }, { 0xAB00, "Ethiopic Extended-A" }, { 0xAB30, "Latin Extended-E" }, { 0xAB66, "Unassigned" }, { 0xAB70, "Cherokee Supplement" }, { 0xABC0, "Meetei Mayek" }, { 0xABFA, "Unassigned" }, { 0xAC00, "Hangul Syllables" }, { 0xD7B0, "Hangul Jamo Extended-B" }, { 0xD7FC, "Unassigned" }, /*{ 0xD800, "High Surrogates" }, */ /* UTF-16 compatibility */ /*{ 0xDC00, "Low Surrogates" }, */ /* UTF-16 compatibility */ { 0xE000, "Private Use Area" }, { 0xF900, "CJK Compatibility Ideographs" }, { 0xFAEA, "Unassigned" }, { 0xFB00, "Alphabetic Presentation Forms" }, { 0xFB50, "Arabic Presentation Forms-A" }, { 0xFE00, "Variation Selectors" }, { 0xFE10, "Vertical Forms" }, { 0xFE1A, "Unassigned" }, { 0xFE20, "Combining Half Marks" }, { 0xFE30, "CJK Compatibility Forms" }, { 0xFE50, "Small Form Variants" }, { 0xFE6C, "Unassigned" }, { 0xFE70, "Arabic Presentation Forms-B" }, { 0xFF00, "Halfwidth and Fullwidth Forms" }, { 0xFFF0, "Unassigned" }, { 0xFFF9, "Specials" }, { 0xFFFE, "Unassigned" }, { 0x10000, "*Supplementary Multilingual" }, { 0x10000, "Linear B Syllabary" }, { 0x1007E, "Unassigned" }, { 0x10080, "Linear B Ideograms" }, { 0x100FB, "Unassigned" }, { 0x10100, "Aegean Numbers" }, { 0x10140, "Ancient Greek Numbers" }, { 0x1018D, "Unassigned" }, { 0x10190, "Ancient Symbols" }, { 0x1019C, "Unassigned" }, { 0x101D0, "Phaistos Disc" }, { 0x10200, "Unassigned" }, { 0x10280, "Lycian" }, { 0x1029D, "Unassigned" }, { 0x102A0, "Carian" }, { 0x102D1, "Unassigned" }, { 0x102E0, "Coptic Epact Numbers" }, { 0x102FC, "Unassigned" }, { 0x10300, "Old Italic" }, { 0x10324, "Unassigned" }, { 0x10330, "Gothic" }, { 0x1034B, "Unassigned" }, { 0x10350, "Old Permic" }, { 0x10380, "Ugaritic" }, { 0x103A0, "Old Persian" }, { 0x103D6, "Unassigned" }, { 0x103E0, "Unassigned" }, { 0x10400, "Deseret" }, { 0x10450, "Shavian" }, { 0x10480, "Osmanya" }, { 0x104AA, "Unassigned" }, { 0x104B0, "Unassigned" }, { 0x10500, "Elbasan" }, { 0x10528, "Unassigned" }, { 0x10530, "Caucasian Albanian" }, { 0x10570, "Unassigned" }, { 0x10600, "Linear A" }, { 0x10768, "Unassigned" }, { 0x10780, "Unassigned" }, { 0x10800, "Cypriot Syllabary" }, { 0x10840, "Imperial Aramaic" }, { 0x10860, "Palmyrene" }, { 0x10880, "Nabataean" }, { 0x108B0, "Unassigned" }, { 0x108E0, "Hatran" }, { 0x10900, "Phoenician" }, { 0x10920, "Lydian" }, { 0x10940, "Unassigned" }, { 0x10980, "Meroitic Hieroglyphs" }, { 0x109A0, "Meroitic Cursive" }, { 0x10A00, "Kharoshthi" }, { 0x10A59, "Unassigned" }, { 0x10A60, "Old South Arabian" }, { 0x10A80, "Old North Arabian" }, { 0x10AA0, "Unassigned" }, { 0x10AC0, "Manichaean" }, { 0x10AF7, "Unassigned" }, { 0x10B00, "Avestan" }, { 0x10B40, "Inscriptional Parthian" }, { 0x10B60, "Inscriptional Pahlavi" }, { 0x10B80, "Psalter Pahlavi" }, { 0x10BB0, "Unassigned" }, { 0x10C00, "Old Turkic" }, { 0x10C49, "Unassigned" }, { 0x10C50, "Unassigned" }, { 0x10C80, "Old Hungarian" }, { 0x10D00, "Unassigned" }, { 0x10E60, "Rumi Numeral Symbols" }, { 0x10E80, "Unassigned" }, { 0x11000, "Brahmi" }, { 0x11070, "Unassigned" }, { 0x11080, "Kaithi" }, { 0x110C2, "Unassigned" }, { 0x110D0, "Sora Sompeng" }, { 0x110FA, "Unassigned" }, { 0x11100, "Chakma" }, { 0x11144, "Unassigned" }, { 0x11150, "Mahajani" }, { 0x11177, "Unassigned" }, { 0x11180, "Sharada" }, { 0x111E0, "Sinhala Archaic Numbers" }, { 0x111F5, "Unassigned" }, { 0x11200, "Khojki" }, { 0x1123E, "Unassigned" }, { 0x11250, "Unassigned" }, { 0x11280, "Multani" }, { 0x112AA, "Unassigned" }, { 0x112B0, "Khudawadi" }, { 0x112FA, "Unassigned" }, { 0x11300, "Grantha" }, { 0x11375, "Unassigned" }, { 0x11380, "Unassigned" }, { 0x11480, "Tirhuta" }, { 0x114DA, "Unassigned" }, { 0x114E0, "Unassigned" }, { 0x11580, "Siddham" }, { 0x115DE, "Unassigned" }, { 0x11600, "Modi" }, { 0x1165A, "Unassigned" }, { 0x11660, "Unassigned" }, { 0x11680, "Takri" }, { 0x116CA, "Unassigned" }, { 0x116D0, "Unassigned" }, { 0x11700, "Ahom" }, { 0x11740, "Unassigned" }, { 0x118A0, "Warang Citi" }, { 0x11900, "Unassigned" }, { 0x11AC0, "Pau Cin Hau" }, { 0x11AF9, "Unassigned" }, { 0x11B00, "Unassigned" }, { 0x12000, "Cuneiform" }, { 0x1239A, "Unassigned" }, { 0x12400, "Cuneiform Numbers and Punctuation" }, { 0x12475, "Unassigned" }, { 0x12480, "Early Dynastic Cuneiform" }, { 0x12544, "Unassigned" }, { 0x12550, "Unassigned" }, { 0x13000, "Egyptian Hieroglyphs" }, { 0x13430, "Unassigned" }, { 0x14400, "Anatolian Hieroglyphs" }, { 0x14647, "Unassigned" }, { 0x14680, "Unassigned" }, { 0x16800, "Bamum Supplement" }, { 0x16A39, "Unassigned" }, { 0x16A40, "Mro" }, { 0x16A70, "Unassigned" }, { 0x16AD0, "Bassa Vah" }, { 0x16AF6, "Unassigned" }, { 0x16B00, "Pahawh Hmong" }, { 0x16B90, "Unassigned" }, { 0x16F00, "Miao" }, { 0x16FA0, "Unassigned" }, { 0x1B000, "Kana Supplement" }, { 0x1B002, "Unassigned" }, { 0x1B100, "Unassigned" }, { 0x1BC00, "Duployan Shorthand" }, { 0x1BCA4, "Unassigned" }, { 0x1BCB0, "Unassigned" }, { 0x1D000, "Byzantine Musical Symbols" }, { 0x1D0F5, "Unassigned" }, { 0x1D100, "Musical Symbols" }, { 0x1D1E9, "Unassigned" }, { 0x1D200, "Ancient Greek Musical Notation" }, { 0x1D246, "Unassigned" }, { 0x1D250, "Unassigned" }, { 0x1D300, "Tai Xuan Jing Symbols" }, { 0x1D357, "Unassigned" }, { 0x1D360, "Counting Rod Numerals" }, { 0x1D372, "Unassigned" }, { 0x1D380, "Unassigned" }, { 0x1D400, "Mathematical Alphanumeric Symbols" }, { 0x1D800, "Sutton SignWriting" }, { 0x1DAB0, "Unassigned" }, { 0x1E800, "Mende Kikakui" }, { 0X1E8D7, "Unassigned" }, { 0x1E8E0, "Unassigned" }, { 0x1EE00, "Arabic Mathematical Alphabetic Symbols" }, { 0X1EEFC, "Unassigned" }, { 0x1EF00, "Unassigned" }, { 0x1F000, "Mahjong Tiles" }, { 0x1F02C, "Unassigned" }, { 0x1F030, "Domino Tiles" }, { 0x1F094, "Unassigned" }, { 0x1F0A0, "Playing Cards" }, { 0x1F0F6, "Unassigned" }, { 0x1F100, "Enclosed Alphanumeric Supplement" }, { 0x1F19B, "Unassigned" }, { 0x1F1E6, "Enclosed Alphanumeric Supplement" }, { 0x1F200, "Enclosed Ideographic Supplement" }, { 0x1F252, "Unassigned" }, { 0x1F300, "Miscellaneous Symbols and Pictographs" }, { 0x1F600, "Emoticons" }, { 0x1F650, "Ornamental Dingbats" }, { 0x1F680, "Transport and Map Symbols" }, { 0x1F6F4, "Unassigned" }, { 0x1F700, "Alchemical Symbols" }, { 0x1F774, "Unassigned" }, { 0x1F780, "Geometric Shapes Extended" }, { 0x1F7D5, "Unassigned" }, { 0x1F800, "Supplemental Arrows-C" }, { 0x1F8AD, "Unassigned" }, { 0x1F910, "Supplemental Symbols and Pictographs" }, { 0x1F9C1, "Unassigned" }, { 0x1FA00, "Unassigned" }, { 0x20000, "*Supplementary Ideographic" }, { 0x20000, "CJK Unified Ideographs Extension B" }, { 0x2A6D7, "Unassigned" }, { 0x2A6E0, "Unassigned" }, { 0x2A700, "CJK Unified Ideographs Extension C" }, { 0x2B740, "Unassigned" }, { 0x2B740, "CJK Unified Ideographs Extension D" }, { 0x2B820, "Unassigned" }, { 0x2B820, "CJK Unified Ideographs Extension E" }, { 0x2CEA2, "Unassigned" }, { 0x2CEB0, "Unassigned" }, { 0x2F800, "CJK Compatibility Ideographs Supplement" }, { 0x2FA20, "Unassigned" }, { 0x30000, "*Unassigned Plane 3" }, { 0x40000, "*Unassigned Plane 4" }, { 0x50000, "*Unassigned Plane 5" }, { 0x60000, "*Unassigned Plane 6" }, { 0x70000, "*Unassigned Plane 7" }, { 0x80000, "*Unassigned Plane 8" }, { 0x90000, "*Unassigned Plane 9" }, { 0xA0000, "*Unassigned Plane 10" }, { 0xB0000, "*Unassigned Plane 11" }, { 0xC0000, "*Unassigned Plane 12" }, { 0xD0000, "*Unassigned Plane 13" }, { 0xE0000, "*Supplementary Special-Purpose" }, { 0xE0080, "Unassigned" }, { 0xE0020, "Tags" }, { 0xE0080, "Unassigned" }, { 0xE0100, "Variation Selectors Supplement" }, { 0xE01F0, "Unassigned" }, { 0xF0000, "*Supplementary Private Use Area A" }, { 0x100000, "*Supplementary Private Use Area B" }, }; static char *strip (char *s) { int L; while (*s == ' ' || *s == '\t' || *s == '\n') s++; L = strlen (s); while (s[L-1] == ' ' || s[L-1] == '\t' || s[L-1] == '\n') s[--L] = 0; return s; } /* matches ("AA, BB, CC", "CC") => True matches ("AA, BB, CC", "CCx") => False */ static Bool matches (const char *pattern, const char *string) { char *token = strdup (pattern ? pattern : ""); char *otoken = token; char *name; Bool match = False; while ((name = strtok (token, ","))) { token = 0; name = strip (name); if (*name && !strcasecmp (name, string)) { match = True; break; } } free (otoken); return match; } static void pick_unichar (ModeInfo *mi) { unicrud_configuration *bp = &bps[MI_SCREEN(mi)]; int i; unsigned long min = 0; unsigned long max = 0x2F800; unsigned long last = 0; int retries = 0; AGAIN: bp->unichar = min + (random() % (max - min)); if (++retries > 0xF0000 / 2) { fprintf (stderr, "%s: internal error: too many retries\n", progname); exit (1); } /* bp->unichar = 0x1F4A9; */ last = 0; bp->charplane = "Unassigned"; bp->charblock = "Unassigned"; for (i = 0; i < countof(unicode_block_names); i++) { if (unicode_block_names[i].start < last) { fprintf (stderr, "%s: progname: internal error: misordered: 0x%lX\n", progname, unicode_block_names[i].start); exit (1); } last = unicode_block_names[i].start; if (bp->unichar >= unicode_block_names[i].start) { if (unicode_block_names[i].name[0] == '*') { bp->charplane = unicode_block_names[i].name + 1; bp->charblock = "Unassigned"; } else bp->charblock = unicode_block_names[i].name; } else break; } if (!strncmp (bp->charblock, "Unassigned", 10) || !strncmp (bp->charblock, "Combining", 9)) goto AGAIN; if (*do_block && !matches (do_block, bp->charblock)) goto AGAIN; /* Skip blank characters */ { XCharStruct e; char text[10]; int i; i = utf8_encode (bp->unichar, text, sizeof(text) - 1); text[i] = 0; texture_string_metrics (bp->char_font, text, &e, 0, 0); if (e.width < 2 || e.ascent + e.descent < 2) goto AGAIN; } # ifdef HAVE_JWXYZ bp->charname = texfont_unicode_character_name (bp->char_font, bp->unichar); # endif bp->color[0] = 0.5 + frand(0.5); bp->color[1] = 0.5 + frand(0.5); bp->color[2] = 0.5 + frand(0.5); bp->color[3] = 1; } static void draw_unichar (ModeInfo *mi) { unicrud_configuration *bp = &bps[MI_SCREEN(mi)]; char text[10]; char title[400]; XCharStruct e; int w, h, i, j; GLfloat s; i = utf8_encode (bp->unichar, text, sizeof(text) - 1); text[i] = 0; *title = 0; sprintf (title + strlen(title), "Plane:\t%s\n", bp->charplane); sprintf (title + strlen(title), "Block:\t%s\n", bp->charblock); # ifdef HAVE_JWXYZ sprintf (title + strlen(title), "Name:\t%s\n", (bp->charname ? bp->charname : "")); #endif sprintf (title + strlen(title), "Unicode:\t%04lX\n", bp->unichar); sprintf (title + strlen(title), "UTF-8:\t"); for (j = 0; j < i; j++) sprintf (title + strlen(title), "%02X ", ((unsigned char *)text)[j]); texture_string_metrics (bp->char_font, text, &e, 0, 0); w = e.width; h = e.ascent; s = 9; glScalef (s, s, s); s = 1.0 / (h > w ? h : w); /* Scale to unit */ glScalef (s, s, s); glTranslatef (-w/2, -h/2, 0); glColor4fv (bp->color); print_texture_string (bp->char_font, text); glColor3f (1, 1, 0); print_texture_label (mi->dpy, bp->title_font, mi->xgwa.width, mi->xgwa.height, 1, title); } /* Window management, etc */ ENTRYPOINT void reshape_unicrud (ModeInfo *mi, int width, int height) { GLfloat h = (GLfloat) height / (GLfloat) width; glViewport (0, 0, (GLint) width, (GLint) height); glMatrixMode(GL_PROJECTION); glLoadIdentity(); gluPerspective (30.0, 1/h, 1.0, 100.0); glMatrixMode(GL_MODELVIEW); glLoadIdentity(); gluLookAt( 0.0, 0.0, 30.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0); # ifdef HAVE_MOBILE /* Keep it the same relative size when rotated. */ { int o = (int) current_device_rotation(); if (o != 0 && o != 180 && o != -180) glScalef (1/h, 1/h, 1/h); } # endif glClear(GL_COLOR_BUFFER_BIT); } ENTRYPOINT Bool unicrud_handle_event (ModeInfo *mi, XEvent *event) { unicrud_configuration *bp = &bps[MI_SCREEN(mi)]; if (gltrackball_event_handler (event, bp->trackball, MI_WIDTH (mi), MI_HEIGHT (mi), &bp->button_down_p)) return True; else if (event->xany.type == KeyPress) { KeySym keysym; char c = 0; XLookupString (&event->xkey, &c, 1, &keysym, 0); if (c == ' ' || c == '\t' || c == '\r' || c == '\n') { if (bp->state == LINGER) bp->ratio = 1; return True; } } return False; } ENTRYPOINT void init_unicrud (ModeInfo *mi) { unicrud_configuration *bp; if (!bps) { bps = (unicrud_configuration *) calloc (MI_NUM_SCREENS(mi), sizeof (unicrud_configuration)); if (!bps) { fprintf(stderr, "%s: out of memory\n", progname); exit(1); } } bp = &bps[MI_SCREEN(mi)]; bp->glx_context = init_GL(mi); reshape_unicrud (mi, MI_WIDTH(mi), MI_HEIGHT(mi)); { double spin_speed = 0.05; double wander_speed = 0.01; double spin_accel = 1.0; bp->rot = make_rotator (do_spin ? spin_speed : 0, do_spin ? spin_speed : 0, do_spin ? spin_speed : 0, spin_accel, do_wander ? wander_speed : 0, False); bp->trackball = gltrackball_init (True); } bp->title_font = load_texture_font (mi->dpy, "titleFont"); bp->char_font = load_texture_font (mi->dpy, "font"); bp->state = IN; bp->ratio = 0; bp->spin_direction = (random() & 1) ? 1 : -1; if (matches ("all", do_block)) do_block = ""; { char *s; for (s = do_block; *s; s++) if (*s == '_') *s = ' '; } if (matches ("help", do_block)) { int i; fprintf (stderr, "%s: --blocks must contain one or more of these," " separated by commas:\n\n", progname); for (i = 0; i < countof(unicode_block_names); i++) { const char *n = unicode_block_names[i].name; if (*n == '*') continue; if (!strncmp (n, "Unassigned", 10) || !strncmp (n, "Combining", 9)) continue; fprintf (stderr, "\t%s\n", n); } fprintf (stderr, "\n"); exit (1); } /* Make sure all elements in --block are valid. */ if (*do_block) { char *token = strdup (do_block ? do_block : ""); char *otoken = token; char *name; while ((name = strtok (token, ","))) { token = 0; name = strip (name); if (*name) { Bool match = False; int i; for (i = 0; i < countof(unicode_block_names); i++) { const char *n = unicode_block_names[i].name; if (*n == '*') continue; if (!strncmp (n, "Unassigned", 10) || !strncmp (n, "Combining", 9)) continue; if (!strcasecmp (name, n)) { match = True; break; } } if (! match) { fprintf (stderr, "%s: unknown block name: \"%s\"\n", progname, name); fprintf (stderr, "%s: use '--block help' for a list\n", progname); exit (1); } } } free (otoken); } pick_unichar (mi); } ENTRYPOINT void draw_unicrud (ModeInfo *mi) { unicrud_configuration *bp = &bps[MI_SCREEN(mi)]; Display *dpy = MI_DISPLAY(mi); Window window = MI_WINDOW(mi); if (!bp->glx_context) return; glXMakeCurrent(MI_DISPLAY(mi), MI_WINDOW(mi), *(bp->glx_context)); glShadeModel (GL_FLAT); glEnable (GL_NORMALIZE); glDisable (GL_CULL_FACE); glDisable (GL_LIGHTING); glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); if (! bp->button_down_p) switch (bp->state) { case IN: bp->ratio += speed * 0.05; break; case OUT: bp->ratio += speed * 0.05; break; case LINGER: bp->ratio += speed * 0.005; break; default: abort(); } if (bp->ratio > 1.0) { bp->ratio = 0; switch (bp->state) { case IN: bp->state = LINGER; break; case LINGER: bp->state = OUT; bp->spin_direction = (random() & 1) ? 1 : -1; break; case OUT: bp->state = IN; pick_unichar(mi); break; default: abort(); } } glPushMatrix (); { double x, y, z; get_position (bp->rot, &x, &y, &z, !bp->button_down_p); glTranslatef((x - 0.5) * 6, (y - 0.5) * 6, (z - 0.5) * 6); gltrackball_rotate (bp->trackball); get_rotation (bp->rot, &x, &y, &z, !bp->button_down_p); x = y = 0; glRotatef (x * 360, 1.0, 0.0, 0.0); glRotatef (y * 360, 0.0, 1.0, 0.0); glRotatef (z * 360, 0.0, 0.0, 1.0); } # define SINOID(N) (sin(M_PI - (N) / 2 * M_PI)) { GLfloat s; switch (bp->state) { case IN: s = SINOID (bp->ratio); break; case OUT: s = SINOID (1-bp->ratio); break; default: s = 1; break; } glScalef (s, s, s); glRotatef (360 * s * bp->spin_direction * (bp->state == IN ? -1 : 1), 0, 0, 1); } draw_unichar (mi); glPopMatrix (); if (mi->fps_p) do_fps (mi); glFinish(); glXSwapBuffers(dpy, window); } XSCREENSAVER_MODULE_2 ("Unicrud", unicrud, unicrud) #endif /* USE_GL */ xscreensaver-5.36/hacks/glx/energystream.c000664 000767 000024 00000033006 12720230743 020676 0ustar00jwzstaff000000 000000 /* energystream, Copyright (c) 2016 Eugene Sandulenko * * 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. * * Based on Public Domain code by konrad "yoghurt" zagorowicz * for Tesla demo by Sunflower (http://www.pouet.net/prod.php?which=33) */ #define DEFAULTS "*delay: 30000 \n" \ "*count: 30 \n" \ "*showFPS: False \n" \ "*wireframe: False \n" \ # define refresh_stream 0 #undef countof #define countof(x) (sizeof((x))/sizeof((*x))) #include "xlockmore.h" #include "gltrackball.h" #include "rotator.h" #include #ifdef USE_GL /* whole file */ static float change_time = 0; static float change_time1 = 25; static float change_time2 = 40; static float change_time3 = 60; #define DEF_STREAMS "16" #include #include typedef struct timeval streamtime; #define GETSECS(t) ((t).tv_sec) #define GETMSECS(t) ((t).tv_usec/1000) #define DEF_SPIN "False" #define DEF_WANDER "False" #define DEF_SPEED "1.0" typedef struct { float x, y, z; } Vector; typedef struct { Vector *flares; int num_flares; GLuint flare_tex; float speed; } flare_stream; typedef struct { GLXContext *glx_context; rotator *rot; trackball_state *trackball; Bool button_down_p; time_t start_time; int num_streams; flare_stream *streams; } stream_configuration; static stream_configuration *ess = NULL; static int num_streams; static Bool do_spin; static GLfloat global_speed; static Bool do_wander; static XrmOptionDescRec opts[] = { { "-streams", ".streams", XrmoptionSepArg, 0 }, { "-spin", ".spin", XrmoptionNoArg, "True" }, { "+spin", ".spin", XrmoptionNoArg, "False" }, { "-speed", ".speed", XrmoptionSepArg, 0 }, { "-wander", ".wander", XrmoptionNoArg, "True" }, { "+wander", ".wander", XrmoptionNoArg, "False" } }; static argtype vars[] = { {&num_streams, "streams", "Streams", DEF_STREAMS, t_Int}, {&do_spin, "spin", "Spin", DEF_SPIN, t_Bool}, {&do_wander, "wander", "Wander", DEF_WANDER, t_Bool}, {&global_speed, "speed", "Speed", DEF_SPEED, t_Float}, }; ENTRYPOINT ModeSpecOpt stream_opts = {countof(opts), opts, countof(vars), vars, NULL}; static void gettime(streamtime *t) { #ifdef GETTIMEOFDAY_TWO_ARGS struct timezone tzp; gettimeofday(t, &tzp); #else /* !GETTIMEOFDAY_TWO_ARGS */ gettimeofday(t); #endif /* !GETTIMEOFDAY_TWO_ARGS */ } /* Window management, etc */ ENTRYPOINT void reshape_stream (ModeInfo *mi, int width, int height) { GLfloat h = (GLfloat) height / (GLfloat) width; glViewport (0, 0, (GLint) width, (GLint) height); glMatrixMode (GL_PROJECTION); glLoadIdentity (); gluPerspective (30.0, 1/h, 1.0, 100.0); glMatrixMode (GL_MODELVIEW); glLoadIdentity (); gluLookAt (0.0, 0.0, 30.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0); glClear (GL_COLOR_BUFFER_BIT); } ENTRYPOINT Bool stream_handle_event (ModeInfo *mi, XEvent *event) { stream_configuration *es = &ess[MI_SCREEN(mi)]; if (gltrackball_event_handler (event, es->trackball, MI_WIDTH (mi), MI_HEIGHT (mi), &es->button_down_p)) return True; return False; } #define TEX_WIDTH 256 #define TEX_HEIGHT 256 #define COEFF 0.2 static GLuint gen_texture (void) { int x, y, i; float color; GLuint tex; unsigned char *texture = (unsigned char *)calloc (TEX_WIDTH * TEX_HEIGHT, 4); unsigned char *ptr = texture; float tint[3]; for (i = 0; i < 3; i++) tint[i] = 1.0 * random() / RAND_MAX; for (y = 0; y < TEX_HEIGHT; y++) { for (x = 0; x < TEX_WIDTH; x++) { color = 255 - sqrt((x - TEX_WIDTH / 2) * (x - TEX_WIDTH / 2) / COEFF + (y - TEX_HEIGHT / 2) * (y - TEX_HEIGHT / 2) / COEFF); if (color < 0) color = 0; for (i = 0; i < 3; i++) ptr[i] = (unsigned char)(color * tint[i]); ptr[3] = color ? 255 : 0; ptr += 4; } } glGenTextures (1, &tex); #ifdef HAVE_GLBINDTEXTURE glBindTexture (GL_TEXTURE_2D, tex); #endif /* HAVE_GLBINDTEXTURE */ glPixelStorei (GL_UNPACK_ALIGNMENT, 4); clear_gl_error (); glTexImage2D (GL_TEXTURE_2D, 0, GL_RGBA, TEX_WIDTH, TEX_HEIGHT, 0, GL_RGBA, GL_UNSIGNED_INT_8_8_8_8_REV, texture); check_gl_error ("texture"); /* Texture parameters, LINEAR scaling for better texture quality */ glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT); glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT); glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); free (texture); return tex; } static inline void vector_copy (Vector *a, Vector *b) { a->x = b->x; a->y = b->y; a->z = b->z; } /* a += b */ static inline void vector_add (Vector *a, Vector *b) { a->x += b->x; a->y += b->y; a->z += b->z; } /* a -= b */ static inline void vector_sub (Vector *a, Vector *b) { a->x -= b->x; a->y -= b->y; a->z -= b->z; } static void init_flare_stream (flare_stream *s, int num_flares, float bx, float by, float bz, float speed) { int i; s->flares = (Vector *) calloc (num_flares, sizeof (Vector)); s->num_flares = num_flares; s->flare_tex = gen_texture(); s->speed = speed; for (i = 0; i != s->num_flares; i++) { s->flares[i].x = -800.0f * random() / RAND_MAX - 1150 + bx; s->flares[i].y = 10.0f * random() / RAND_MAX - 20 + by; s->flares[i].z = 10.0f * random() / RAND_MAX - 20 + bz; } } static void render_flare_stream (flare_stream *s, float cur_time, Vector *vx, Vector *vy, float alpha) { float fMultipler = 1; int i; if (s->flare_tex == -1) return; if (!s->num_flares) return; if (cur_time < change_time) return; cur_time -= change_time; glColor4f (1.0, 1, 1, alpha); #ifdef HAVE_GLBINDTEXTURE glBindTexture (GL_TEXTURE_2D, s->flare_tex); #endif glBegin (GL_QUADS); if (cur_time + change_time > change_time1) { if (cur_time + change_time > change_time2) { fMultipler = 2.5; } else fMultipler = 2; } for (i = 0; i != s->num_flares; i++) { Vector flare_pos; Vector cc; flare_pos.x = fmod (s->flares[i].x + cur_time * s->speed * fMultipler, 800) - 400; flare_pos.y = s->flares[i].y + 2 * sin (cur_time * 7 + s->flares[i].x); flare_pos.z = s->flares[i].z + 2 * cos (cur_time * 7 + i * 3.14); glTexCoord2f (0, 0); vector_copy (&cc, &flare_pos); vector_sub (&cc, vx); vector_add (&cc, vy); glVertex3fv ((float *)&cc); glTexCoord2f ( 1, 0 ); vector_copy (&cc, &flare_pos); vector_add (&cc, vx); vector_add (&cc, vy); glVertex3fv ((float *)&cc); glTexCoord2f ( 1, 1 ); vector_copy (&cc, &flare_pos); vector_add (&cc, vx); vector_sub (&cc, vy); glVertex3fv ((float *)&cc); glTexCoord2f ( 0, 1 ); vector_copy (&cc, &flare_pos); vector_sub (&cc, vx); vector_sub (&cc, vy); glVertex3fv ((float *)&cc); } glEnd (); } ENTRYPOINT void init_stream (ModeInfo *mi) { stream_configuration *es; streamtime current_time; if (!ess) { ess = (stream_configuration *) calloc (MI_NUM_SCREENS(mi), sizeof (stream_configuration)); if (!ess) { fprintf (stderr, "%s: out of memory\n", progname); exit (1); } } es = &ess[MI_SCREEN(mi)]; es->glx_context = init_GL (mi); reshape_stream (mi, MI_WIDTH(mi), MI_HEIGHT(mi)); gettime (¤t_time); es->start_time = GETSECS(current_time) * 1000 + GETMSECS(current_time); es->num_streams = num_streams; es->streams = (flare_stream *) calloc (es->num_streams, sizeof(flare_stream)); init_flare_stream (&es->streams[0], 150, 0, 50, 0, 300); init_flare_stream (&es->streams[1], 150, 0, 0, 0, 150); init_flare_stream (&es->streams[2], 150, 0, 90, 60, 250); init_flare_stream (&es->streams[3], 150, 0, -100, 30, 160); init_flare_stream (&es->streams[4], 150, 0, 50, -100, 340); init_flare_stream (&es->streams[5], 150, 0, -50, 50, 270 ); init_flare_stream (&es->streams[6], 150, 0, 100, 50, 180); init_flare_stream (&es->streams[7], 150, 0, -30, 90, 130); init_flare_stream (&es->streams[8], 150, 0, 150, 10, 200); init_flare_stream (&es->streams[9], 150, 0, 100, -100, 210); init_flare_stream (&es->streams[10], 150, 0, 190, 160, 220); init_flare_stream (&es->streams[11], 150, 0, -200, 130, 230); init_flare_stream (&es->streams[12], 150, 0, 150, -200, 240); init_flare_stream (&es->streams[13], 150, 0, -150, 250, 160); init_flare_stream (&es->streams[14], 150, 0, 200, 150, 230); init_flare_stream (&es->streams[15], 150, 0, -130, 190, 250); { double spin_speed = 0.5 * global_speed; double wander_speed = 0.02 * global_speed; double spin_accel = 1.1; es->rot = make_rotator (do_spin ? spin_speed : 0, do_spin ? spin_speed : 0, do_spin ? spin_speed : 0, spin_accel, do_wander ? wander_speed : 0, True); es->trackball = gltrackball_init (True); } } ENTRYPOINT void release_stream (ModeInfo * mi) { int screen; for (screen = 0; screen < MI_NUM_SCREENS(mi); screen++) { stream_configuration *es = &ess[screen]; int i; for (i = 0; i < es->num_streams; i++) { free (es->streams[i].flares); glDeleteTextures (1, &es->streams[i].flare_tex); } free (es->streams); } FreeAllGL (mi); } static void inverse_matrix (float m[16]) { double a,b,c,d,e,f,g,h,i,j,k,l; register double dW; a = m[ 0]; b = m[ 1]; c = m[ 2]; d = m[ 4]; e = m[ 5]; f = m[ 6]; g = m[ 8]; h = m[ 9]; i = m[10]; j = m[12]; k = m[13]; l = m[14]; dW = 1.0 / (a * (e * i - f * h) - (b * (d * i - f * g) + c * (e * g - d * h))); m[ 0]= (float)((e * i - f * h) * dW); m[ 1]= (float)((c * h - b * i) * dW); m[ 2]= (float)((b * f - c * e) * dW); m[ 4]= (float)((f * g - d * i) * dW); m[ 5]= (float)((a * i - c * g) * dW); m[ 6]= (float)((c * d - a * f) * dW); m[ 8]= (float)((d * h - e * g) * dW); m[ 9]= (float)((b * g - a * h) * dW); m[10]= (float)((a * e - b * d) * dW); m[12]= (float)((e * (g * l - i * j) + f * (h * j - g * k) - d * (h * l - i * k)) * dW); m[13]= (float)((a * (h * l - i * k) + b * (i * j - g * l) + c * (g * k - h * j)) * dW); m[14]= (float)((b * (d * l - f * j) + c * (e * j - d * k) - a * (e * l - f * k)) * dW); } ENTRYPOINT void draw_stream (ModeInfo *mi) { stream_configuration *es = &ess[MI_SCREEN(mi)]; Display *dpy = MI_DISPLAY(mi); Window window = MI_WINDOW(mi); streamtime current_time; float cur_time; int i; float alpha = 1.0; Vector vx; Vector vy; GLfloat m[4*4]; if (!es->glx_context) return; gettime (¤t_time); cur_time = (float)(GETSECS(current_time) * 1000 + GETMSECS(current_time) - es->start_time) / 1000.0; cur_time *= global_speed; glXMakeCurrent (MI_DISPLAY(mi), MI_WINDOW(mi), *(es->glx_context)); glClear (GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glMatrixMode (GL_PROJECTION); glLoadIdentity (); glFrustum (-.6f, .6f, -.45f, .45f, 1, 1000); glMatrixMode (GL_MODELVIEW); glLoadIdentity (); glEnable (GL_LIGHTING); glEnable (GL_TEXTURE_2D); glEnable (GL_BLEND); glBlendFunc (GL_SRC_ALPHA, GL_ONE); glDisable (GL_CULL_FACE); glDisable (GL_DEPTH_TEST); glDepthMask (0); glTexEnvi (GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_ADD); glTranslatef (0, 0, -300); glRotatef (cur_time * 30, 1, 0, 0); glRotatef (30 * sin(cur_time / 3) + 10, 0, 0, 1); { double x, y, z; get_position (es->rot, &x, &y, &z, !es->button_down_p); glTranslatef((x - 0.5) * 8, (y - 0.5) * 8, (z - 0.5) * 15); gltrackball_rotate (es->trackball); get_rotation (es->rot, &x, &y, &z, !es->button_down_p); glRotatef (x * 360, 1.0, 0.0, 0.0); glRotatef (y * 360, 0.0, 1.0, 0.0); glRotatef (z * 360, 0.0, 0.0, 1.0); } if (cur_time > change_time1) { if (cur_time > change_time2) { glRotatef (90, 0, 1, 0); if (cur_time > change_time3) es->start_time = GETSECS(current_time) * 1000 + GETMSECS(current_time) - 5000; } else { glRotatef (180, 0, 1, 0); } } glEnable ( GL_FOG); glFogf (GL_FOG_START, 200); glFogf (GL_FOG_END, 500); glFogf (GL_FOG_MODE, GL_LINEAR); glGetFloatv (GL_MODELVIEW_MATRIX, m); inverse_matrix (m); vx.x = m[0] * 10; vx.y = m[1] * 10; vx.z = m[2] * 10; vy.x = m[4] * 10; vy.y = m[5] * 10; vy.z = m[6] * 10; mi->polygon_count = 0; for (i = 0; i != es->num_streams; i++) { mi->polygon_count += es->streams[i].num_flares; render_flare_stream (&es->streams[i], cur_time, &vx, &vy, alpha); } glDisable (GL_TEXTURE_2D); glDisable (GL_LIGHTING); glDisable (GL_FOG); glTexEnvi (GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE); if (mi->fps_p) do_fps (mi); glFinish(); glXSwapBuffers (dpy, window); } XSCREENSAVER_MODULE_2("EnergyStream", energystream, stream) #endif /* USE_GL */ xscreensaver-5.36/hacks/glx/raverhoop.c000664 000767 000024 00000043335 12711304452 020203 0ustar00jwzstaff000000 000000 /* raverhoop, Copyright (c) 2016 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. * * Simulates an LED hula hoop in a dark room. Oontz oontz oontz. */ #define DEFAULTS "*delay: 20000 \n" \ "*ncolors: 12 \n" \ "*showFPS: False \n" \ "*wireframe: False \n" \ # define refresh_hoop 0 # define release_hoop 0 #undef countof #define countof(x) (sizeof((x))/sizeof((*x))) #include "xlockmore.h" #include "colors.h" #include "rotator.h" #include "gltrackball.h" #include #ifdef USE_GL /* whole file */ #define DEF_SPIN "False" #define DEF_WANDER "False" #define DEF_LIGHTS "200" #define DEF_SPEED "1.0" #define DEF_LIGHT_SPEED "1.0" #define DEF_SUSTAIN "1.0" typedef struct { GLfloat x,y,z; } XYZ; typedef struct afterimage afterimage; struct afterimage { GLfloat color[4]; XYZ position; afterimage *next; }; typedef struct { GLfloat color[4]; int duty_cycle[10]; /* off, on, off, on... values add to 100 */ GLfloat ratio; Bool on; } light; typedef struct oscillator oscillator; struct oscillator { GLfloat ratio, from, to, speed, *var; int remaining; oscillator *next; }; typedef struct { GLXContext *glx_context; rotator *rot; trackball_state *trackball; Bool button_down_p; int nlights; light *lights; GLfloat radius; GLfloat axial_radius; XYZ midpoint; GLfloat tilt; GLfloat spin; GLfloat th; GLfloat speed; afterimage *trail; oscillator *oscillators; } hoop_configuration; static hoop_configuration *bps = NULL; static Bool do_spin; static Bool do_wander; static int nlights; static GLfloat speed, light_speed, sustain; static XrmOptionDescRec opts[] = { { "-spin", ".spin", XrmoptionNoArg, "True" }, { "+spin", ".spin", XrmoptionNoArg, "False" }, { "-wander", ".wander", XrmoptionNoArg, "True" }, { "+wander", ".wander", XrmoptionNoArg, "False" }, { "-lights", ".lights", XrmoptionSepArg, 0 }, { "-speed", ".speed", XrmoptionSepArg, 0 }, { "-light-speed", ".lightSpeed", XrmoptionSepArg, 0 }, { "-sustain", ".sustain", XrmoptionSepArg, 0 }, }; static argtype vars[] = { {&do_spin, "spin", "Spin", DEF_SPIN, t_Bool}, {&do_wander, "wander", "Wander", DEF_WANDER, t_Bool}, {&nlights, "lights", "Lights", DEF_LIGHTS, t_Int}, {&speed, "speed", "Speed", DEF_SPEED, t_Float}, {&light_speed, "lightSpeed", "Speed", DEF_LIGHT_SPEED, t_Float}, {&sustain, "sustain", "Sustain", DEF_SUSTAIN, t_Float}, }; ENTRYPOINT ModeSpecOpt hoop_opts = {countof(opts), opts, countof(vars), vars, NULL}; static void decay_afterimages (ModeInfo *mi) { hoop_configuration *bp = &bps[MI_SCREEN(mi)]; afterimage *prev = 0; afterimage *a = bp->trail; GLfloat tick = 0.05 / sustain; while (a) { afterimage *next = a->next; a->color[3] -= tick; if (a->color[3] < 0) { if (prev) prev->next = next; else bp->trail = next; free (a); } else prev = a; a = next; } } static void add_afterimage (ModeInfo *mi, GLfloat x, GLfloat y, GLfloat z, GLfloat color[4]) { hoop_configuration *bp = &bps[MI_SCREEN(mi)]; afterimage *a = (afterimage *) calloc (1, sizeof (*a)); afterimage *b; a->position.x = x; a->position.y = y; a->position.z = z; memcpy (a->color, color, sizeof(a->color)); /* Put it at the end so that the older, dimmer ones are laid down on the frame buffer before the newer, brighter ones. */ if (!bp->trail) bp->trail = a; else { for (b = bp->trail; b->next; b = b->next) ; b->next = a; } } static void tick_light (light *L) { int i; int n = 0; L->ratio += 0.05 * light_speed; while (L->ratio > 1) L->ratio -= 1; for (i = 0; i < countof(L->duty_cycle); i++) { n += L->duty_cycle[i]; if (n > 100) abort(); if (n / 100.0 > L->ratio) { L->on = (i & 1); break; } } } static void tick_hoop (ModeInfo *mi) { hoop_configuration *bp = &bps[MI_SCREEN(mi)]; GLfloat m0[16]; int i; glGetFloatv (GL_MODELVIEW_MATRIX, m0); for (i = 0; i < bp->nlights; i++) { light *L = &bp->lights[i]; GLfloat m1[16]; GLfloat th = M_PI * 2 * i / bp->nlights; GLfloat x = cos (th); GLfloat y = sin (th); GLfloat z; tick_light (L); if (! L->on) continue; glPushMatrix(); glTranslatef (bp->midpoint.x, bp->midpoint.y, bp->midpoint.z); glRotatef (bp->th * 180 / M_PI, 0, 0, 1); glRotatef (bp->tilt, 0, 1, 0); glRotatef (bp->spin, 1, 0, 0); glTranslatef (x * bp->radius, y * bp->radius, 0); glGetFloatv (GL_MODELVIEW_MATRIX, m1); glPopMatrix(); /* After all of our translations and rotations, figure out where it actually ended up. */ x = m1[12] - m0[12]; y = m1[13] - m0[13]; z = m1[14] - m0[14]; add_afterimage (mi, x, y, z, L->color); } } static void draw_lights (ModeInfo *mi) { hoop_configuration *bp = &bps[MI_SCREEN(mi)]; int wire = MI_IS_WIREFRAME(mi); afterimage *a; GLfloat m[4][4]; if (wire) { int n = 360; int i; glPushMatrix(); glBegin (GL_LINES); glVertex3f (0, 0, -bp->radius); glVertex3f (0, 0, bp->radius); glEnd(); glTranslatef (bp->midpoint.x, bp->midpoint.y, bp->midpoint.z); glRotatef (bp->th * 180 / M_PI, 0, 0, 1); glRotatef (bp->tilt, 0, 1, 0); glRotatef (bp->spin, 1, 0, 0); glBegin (GL_LINE_LOOP); glVertex3f (0, 0, 0); for (i = 0; i <= n; i++) { GLfloat th = i * M_PI * 2 / n; glVertex3f (bp->radius * -cos(th), bp->radius * -sin(th), 0); } for (i = 0; i <= n; i++) { GLfloat th = i * M_PI * 2 / n; glVertex3f (bp->axial_radius * -cos(th), bp->axial_radius * -sin(th), 0); } glEnd(); glPopMatrix(); } /* Billboard the lights to always face the camera */ glGetFloatv (GL_MODELVIEW_MATRIX, &m[0][0]); m[0][0] = 1; m[1][0] = 0; m[2][0] = 0; m[0][1] = 0; m[1][1] = 1; m[2][1] = 0; m[0][2] = 0; m[1][2] = 0; m[2][2] = 1; glLoadIdentity(); glMultMatrixf (&m[0][0]); for (a = bp->trail; a; a = a->next) { glPushMatrix(); glTranslatef (a->position.x, a->position.y, a->position.z); if (wire) { GLfloat c[3]; c[0] = a->color[0] * a->color[3]; c[1] = a->color[1] * a->color[3]; c[2] = a->color[2] * a->color[3]; glColor3fv (c); } else glColor4fv (a->color); glRotatef (45, 0, 0, 1); glScalef (0.15, 0.15, 0.15); glBegin (GL_QUADS); glTexCoord2f (0, 0); glVertex3f (-1, -1, 0); glTexCoord2f (1, 0); glVertex3f ( 1, -1, 0); glTexCoord2f (1, 1); glVertex3f ( 1, 1, 0); glTexCoord2f (0, 1); glVertex3f (-1, 1, 0); glEnd(); mi->polygon_count++; glPopMatrix(); } } static GLfloat ease_fn (GLfloat r) { return cos ((r/2 + 1) * M_PI) + 1; /* Smooth curve up, end at slope 1. */ } static GLfloat ease_ratio (GLfloat r) { GLfloat ease = 0.35; if (r <= 0) return 0; else if (r >= 1) return 1; else if (r <= ease) return ease * ease_fn (r / ease); else if (r > 1-ease) return 1 - ease * ease_fn ((1 - r) / ease); else return r; } static void tick_oscillators (ModeInfo *mi) { hoop_configuration *bp = &bps[MI_SCREEN(mi)]; oscillator *prev = 0; oscillator *a = bp->oscillators; GLfloat tick = 0.1 / speed; while (a) { oscillator *next = a->next; a->ratio += tick * a->speed; if (a->ratio > 1) a->ratio = 1; *a->var = a->from + (a->to - a->from) * ease_ratio (a->ratio); if (a->ratio < 1) /* mid cycle */ prev = a; else if (--a->remaining <= 0) /* ended, and expired */ { if (prev) prev->next = next; else bp->oscillators = next; free (a); } else /* keep going the other way */ { GLfloat swap = a->from; a->from = a->to; a->to = swap; a->ratio = 0; prev = a; } a = next; } } static void calm_oscillators (ModeInfo *mi) { hoop_configuration *bp = &bps[MI_SCREEN(mi)]; oscillator *a; for (a = bp->oscillators; a && a->next; a = a->next) a->remaining = 1; } static void add_oscillator (ModeInfo *mi, GLfloat *var, GLfloat speed, GLfloat to, int repeat) { hoop_configuration *bp = &bps[MI_SCREEN(mi)]; oscillator *a; /* If an oscillator is already running on this variable, don't add another. */ for (a = bp->oscillators; a && a->next; a = a->next) if (a->var == var) return; a = (oscillator *) calloc (1, sizeof (*a)); if (repeat <= 0) abort(); a->ratio = 0; a->from = *var; a->to = to; a->speed = speed; a->var = var; a->remaining = repeat; a->next = bp->oscillators; bp->oscillators = a; # if 0 fprintf (stderr, "%s: %3d %6.2f -> %6.2f %s\n", progname, repeat, *var, to, (var == &bp->midpoint.z ? "z" : var == &bp->tilt ? "tilt" : var == &bp->axial_radius ? "r" : var == &bp->speed ? "speed" : "?")); # endif } static void add_random_oscillator (ModeInfo *mi) { hoop_configuration *bp = &bps[MI_SCREEN(mi)]; int n = random() % 12; switch (n) { case 0: case 1: case 2: add_oscillator (mi, &bp->midpoint.z, 1, bp->radius * (0.8 + frand(0.2)) * (random() & 1 ? 1 : -1), (3 + (random() % 10))); break; case 3: case 4: case 5: add_oscillator (mi, &bp->tilt, 1, -(GLfloat) (random() % 15), 3 + (random() % 20)); break; case 6: case 7: case 8: add_oscillator (mi, &bp->axial_radius, 1, 0.1 + bp->radius * frand(1.4), 1 + (random() % 4)); break; case 9: case 10: add_oscillator (mi, &bp->speed, 3, (0.7 + frand(0.9)) * (random() & 1 ? 1 : -1), ((random() % 5) ? 1 : 2 + (random() % 5))); break; case 11: add_oscillator (mi, &bp->spin, 0.1, 180 * (1 + (random() % 2)), 2 * (1 + (random() % 5))); break; default: abort(); break; } } static void randomize_colors (ModeInfo *mi) { hoop_configuration *bp = &bps[MI_SCREEN(mi)]; int ncolors = MI_NCOLORS(mi); GLfloat *colors; int ncycles; int i; if (ncolors < 1) ncolors = 1; if (ncolors > bp->nlights) ncolors = bp->nlights; if (! (random() % 10)) ncolors = 1; colors = calloc (ncolors, 4 * sizeof(*colors)); for (i = 0; i < ncolors; i++) { GLfloat *c = &colors[i * 4]; # define QUANTIZE() (((random() % 16) << 4) | 0xF) / 255.0 c[0] = QUANTIZE(); c[1] = QUANTIZE(); c[2] = QUANTIZE(); c[3] = 1; } switch (random() % 5) { case 0: ncycles = 1; break; case 2: ncycles = ncolors * (1 + (random() % 5)); break; default: ncycles = ncolors; break; } for (i = 0; i < bp->nlights; i++) { light *L = &bp->lights[i]; int n = i * ncolors / bp->nlights; int m = i * ncycles / bp->nlights; if (n >= ncolors) abort(); if (m >= ncycles) abort(); memcpy (L->color, &colors[n], sizeof (L->color)); if (ncycles <= 1) { L->duty_cycle[0] = 0; L->duty_cycle[1] = 100; } else if (m & 1) { L->duty_cycle[0] = 50; L->duty_cycle[1] = 50; } else { L->duty_cycle[0] = 0; L->duty_cycle[1] = 50; L->duty_cycle[2] = 50; } } free (colors); } static void move_hoop (ModeInfo *mi) { hoop_configuration *bp = &bps[MI_SCREEN(mi)]; bp->th += 0.2 * speed * bp->speed; while (bp->th > M_PI*2) bp->th -= M_PI*2; while (bp->th < 0) bp->th += M_PI*2; bp->midpoint.x = bp->axial_radius * cos (bp->th); bp->midpoint.y = bp->axial_radius * sin (bp->th); tick_oscillators (mi); if (! (random() % 80)) add_random_oscillator (mi); if (! (random() % 120)) randomize_colors (mi); } static void build_texture (ModeInfo *mi) { int x, y; int size = 128; int s2 = size / 2; int bpl = size * 2; unsigned char *data = malloc (bpl * size); for (y = 0; y < size; y++) { for (x = 0; x < size; x++) { double dist = (sqrt (((s2 - x) * (s2 - x)) + ((s2 - y) * (s2 - y))) / s2); unsigned char *c = &data [y * bpl + x * 2]; c[0] = 0xFF; c[1] = 0xFF * sin (dist > 1 ? 0 : (1 - dist)); } } glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT); glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT); glTexEnvi (GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE); glPixelStorei (GL_UNPACK_ALIGNMENT, 1); check_gl_error ("texture param"); glTexImage2D (GL_TEXTURE_2D, 0, GL_LUMINANCE_ALPHA, size, size, 0, GL_LUMINANCE_ALPHA, GL_UNSIGNED_BYTE, data); check_gl_error ("light texture"); free (data); } /* Window management, etc */ ENTRYPOINT void reshape_hoop (ModeInfo *mi, int width, int height) { GLfloat h = (GLfloat) height / (GLfloat) width; glViewport (0, 0, (GLint) width, (GLint) height); glMatrixMode(GL_PROJECTION); glLoadIdentity(); gluPerspective (30.0, 1/h, 1.0, 100.0); glMatrixMode(GL_MODELVIEW); glLoadIdentity(); gluLookAt( 0.0, 0.0, 30.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0); # ifdef HAVE_MOBILE /* Keep it the same relative size when rotated. */ { int o = (int) current_device_rotation(); if (o != 0 && o != 180 && o != -180) glScalef (1/h, 1/h, 1/h); } # endif glClear(GL_COLOR_BUFFER_BIT); } ENTRYPOINT Bool hoop_handle_event (ModeInfo *mi, XEvent *event) { hoop_configuration *bp = &bps[MI_SCREEN(mi)]; if (gltrackball_event_handler (event, bp->trackball, MI_WIDTH (mi), MI_HEIGHT (mi), &bp->button_down_p)) return True; else if (event->xany.type == KeyPress) { KeySym keysym; char c = 0; XLookupString (&event->xkey, &c, 1, &keysym, 0); if (c == ' ' || c == '\t') { randomize_colors (mi); calm_oscillators (mi); add_random_oscillator (mi); return True; } } return False; } ENTRYPOINT void init_hoop (ModeInfo *mi) { hoop_configuration *bp; int wire = MI_IS_WIREFRAME(mi); if (!bps) { bps = (hoop_configuration *) calloc (MI_NUM_SCREENS(mi), sizeof (hoop_configuration)); if (!bps) { fprintf(stderr, "%s: out of memory\n", progname); exit(1); } } bp = &bps[MI_SCREEN(mi)]; bp->glx_context = init_GL(mi); reshape_hoop (mi, MI_WIDTH(mi), MI_HEIGHT(mi)); glDisable (GL_LIGHTING); glDisable (GL_DEPTH_TEST); glEnable (GL_CULL_FACE); glEnable (GL_NORMALIZE); glEnable (GL_BLEND); glBlendFunc (GL_SRC_ALPHA, GL_ONE); glPolygonMode (GL_FRONT, GL_FILL); glShadeModel (GL_FLAT); if (! wire) { build_texture (mi); glEnable (GL_TEXTURE_2D); } { double spin_speed = 0.3; double wander_speed = 0.005; double spin_accel = 2.0; bp->rot = make_rotator (do_spin ? spin_speed : 0, do_spin ? spin_speed : 0, do_spin ? spin_speed : 0, spin_accel, do_wander ? wander_speed : 0, False); bp->trackball = gltrackball_init (True); } bp->radius = 30; bp->axial_radius = bp->radius * 0.3; bp->tilt = - (GLfloat) (5 + (random() % 12)); bp->speed = (random() % 1 ? 1 : -1); bp->nlights = nlights; bp->lights = (light *) calloc (bp->nlights, sizeof (*bp->lights)); randomize_colors (mi); move_hoop (mi); add_random_oscillator (mi); } ENTRYPOINT void draw_hoop (ModeInfo *mi) { hoop_configuration *bp = &bps[MI_SCREEN(mi)]; Display *dpy = MI_DISPLAY(mi); Window window = MI_WINDOW(mi); if (!bp->glx_context) return; glXMakeCurrent(MI_DISPLAY(mi), MI_WINDOW(mi), *(bp->glx_context)); glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glPushMatrix (); { double x, y, z; get_position (bp->rot, &x, &y, &z, !bp->button_down_p); glTranslatef((x - 0.5) * 7, (y - 0.5) * 0.5, (z - 0.5) * 15); 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); glRotatef (y * 360, 0.0, 1.0, 0.0); glRotatef (z * 360, 0.0, 0.0, 1.0); } mi->polygon_count = 0; glScalef (0.2, 0.2, 0.2); # ifdef HAVE_MOBILE glScalef (0.7, 0.7, 0.7); # endif glRotatef (70, 1, 0, 0); if (! bp->button_down_p) move_hoop (mi); decay_afterimages (mi); tick_hoop (mi); draw_lights (mi); glPopMatrix (); if (mi->fps_p) do_fps (mi); glFinish(); glXSwapBuffers(dpy, window); } XSCREENSAVER_MODULE_2 ("RaverHoop", raverhoop, hoop) #endif /* USE_GL */ xscreensaver-5.36/hacks/glx/hydrostat.c000664 000767 000024 00000047162 12727405313 020226 0ustar00jwzstaff000000 000000 /* hydrostat, Copyright (C) 2012 by Justin Windle * Copyright (c) 2016 Jamie Zawinski * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. * * Tentacle simulation using inverse kinematics. * * http://soulwire.co.uk/experiments/muscular-hydrostats/ * https://github.com/soulwire/Muscular-Hydrostats/ * * Ported to C from Javascript by jwz, May 2016 */ #define DEFAULTS "*delay: 20000 \n" \ "*count: 3 \n" \ "*showFPS: False \n" \ "*wireframe: False \n" \ "*suppressRotationAnimation: True\n" \ # define refresh_hydrostat 0 #undef countof #define countof(x) (sizeof((x))/sizeof((*x))) #include "xlockmore.h" #include "colors.h" #include "sphere.h" #include "normals.h" #include "gltrackball.h" #include #ifdef USE_GL /* whole file */ /* It looks bad when you rotate it with the trackball, because it reveals that the tentacles are moving in a 2d plane. But it's useful for debugging. */ #undef USE_TRACKBALL #define DEF_SPEED "1.0" #define DEF_PULSE "True" #define DEF_HEAD_RADIUS "60" #define DEF_TENTACLES "35" #define DEF_THICKNESS "18" #define DEF_LENGTH "55" #define DEF_GRAVITY "0.5" #define DEF_CURRENT "0.25" #define DEF_FRICTION "0.02" #define DEF_OPACITY "0.8" typedef struct { XYZ pos, opos, v; } node; typedef struct { int length; GLfloat radius; GLfloat spacing; GLfloat friction; GLfloat th; node *nodes; GLfloat color[4]; } tentacle; typedef struct { XYZ pos, from, to; GLfloat ratio, pulse, rate; GLfloat head_radius; GLfloat thickness; int ntentacles; tentacle *tentacles; GLfloat color[4]; } squid; typedef struct { GLXContext *glx_context; Bool button_down_p; int dragging; squid **squids; # ifdef USE_TRACKBALL trackball_state *trackball; # endif } hydrostat_configuration; static hydrostat_configuration *bps = NULL; static Bool do_pulse; static GLfloat speed_arg; static GLfloat head_radius_arg; static GLfloat ntentacles_arg; static GLfloat thickness_arg; static GLfloat length_arg; static GLfloat gravity_arg; static GLfloat current_arg; static GLfloat friction_arg; static GLfloat opacity_arg; static XrmOptionDescRec opts[] = { { "-pulse", ".pulse", XrmoptionNoArg, "True" }, { "+pulse", ".pulse", XrmoptionNoArg, "False" }, { "-speed", ".speed", XrmoptionSepArg, 0 }, { "-head-radius", ".headRadius", XrmoptionSepArg, 0 }, { "-tentacles", ".tentacles", XrmoptionSepArg, 0 }, { "-thickness", ".thickness", XrmoptionSepArg, 0 }, { "-length", ".length", XrmoptionSepArg, 0 }, { "-gravity", ".gravity", XrmoptionSepArg, 0 }, { "-current", ".current", XrmoptionSepArg, 0 }, { "-friction", ".friction", XrmoptionSepArg, 0 }, { "-opacity", ".opacity", XrmoptionSepArg, 0 }, }; static argtype vars[] = { { &do_pulse, "pulse", "Pulse", DEF_PULSE, t_Bool }, { &speed_arg, "speed", "Speed", DEF_SPEED, t_Float }, { &head_radius_arg, "headRadius", "HeadRadius", DEF_HEAD_RADIUS, t_Float }, { &ntentacles_arg, "tentacles", "Tentacles", DEF_TENTACLES, t_Float }, { &thickness_arg, "thickness", "Thickness", DEF_THICKNESS, t_Float }, { &length_arg, "length", "Length", DEF_LENGTH, t_Float }, { &gravity_arg, "gravity", "Gravity", DEF_GRAVITY, t_Float }, { ¤t_arg, "current", "Current", DEF_CURRENT, t_Float }, { &friction_arg, "friction", "Friction", DEF_FRICTION, t_Float }, { &opacity_arg, "opacity", "Opacity", DEF_OPACITY, t_Float }, }; ENTRYPOINT ModeSpecOpt hydrostat_opts = {countof(opts), opts, countof(vars), vars, NULL}; static void move_tentacle (squid *sq, tentacle *t) { int i, j; node *prev = &t->nodes[0]; int rot = (int) current_device_rotation(); for (i = 1, j = 0; i < t->length; i++, j++) { XYZ d, p; GLfloat da; node *n = &t->nodes[i]; /* Sadly, this is still computing motion in a 2d plane, so the tentacles look dumb if the scene is rotated. */ n->pos.x += n->v.x; n->pos.y += n->v.y; n->pos.z += n->v.z; d.x = prev->pos.x - n->pos.x; d.y = prev->pos.y - n->pos.y; d.z = prev->pos.z - n->pos.z; da = atan2 (d.z, d.x); p.x = n->pos.x + cos (da) * t->spacing * t->length; p.y = n->pos.y + cos (da) * t->spacing * t->length; p.z = n->pos.z + sin (da) * t->spacing * t->length; n->pos.x = prev->pos.x - (p.x - n->pos.x); n->pos.y = prev->pos.y - (p.y - n->pos.y); n->pos.z = prev->pos.z - (p.z - n->pos.z); n->v.x = n->pos.x - n->opos.x; n->v.y = n->pos.y - n->opos.y; n->v.z = n->pos.z - n->opos.z; n->v.x *= t->friction * (1 - friction_arg); n->v.y *= t->friction * (1 - friction_arg); n->v.z *= t->friction * (1 - friction_arg); switch (rot) { case 90: case -270: n->v.x += gravity_arg; n->v.y -= current_arg; n->v.z -= current_arg; break; case -90: case 270: n->v.x -= gravity_arg; n->v.y += current_arg; n->v.z += current_arg; break; case 180: case -180: n->v.x -= current_arg; n->v.y -= current_arg; n->v.z -= gravity_arg; break; default: n->v.x += current_arg; n->v.y += current_arg; n->v.z += gravity_arg; break; } n->opos.x = n->pos.x; n->opos.y = n->pos.y; n->opos.z = n->pos.z; prev = n; } } static GLfloat ease_fn (GLfloat r) { return cos ((r/2 + 1) * M_PI) + 1; /* Smooth curve up, end at slope 1. */ } /* Squirty motion: fast acceleration, then fade. */ static GLfloat ease_ratio (GLfloat r) { GLfloat ease = 0.05; GLfloat ease2 = 1-ease; if (r <= 0) r = 0; else if (r >= 1) r = 1; else if (r <= ease) r = ease * ease_fn (r / ease); else r = 1 - ease2 * ease_fn ((1 - r) / ease2); return r; } static void move_squid (ModeInfo *mi, squid *sq) { hydrostat_configuration *bp = &bps[MI_SCREEN(mi)]; GLfloat step = M_PI * 2 / sq->ntentacles; int i; GLfloat radius = head_radius_arg; GLfloat r; /* Move to a new position */ if (! bp->button_down_p) { sq->ratio += speed_arg * 0.01; if (sq->ratio >= 1) { sq->ratio = -(frand(2.0) + frand(2.0) + frand(2.0)); sq->from.x = sq->to.x; sq->from.y = sq->to.y; sq->from.z = sq->to.z; sq->to.x = 250 - frand(500); sq->to.y = 250 - frand(500); sq->to.z = 250 - frand(500); } r = sq->ratio > 0 ? ease_ratio (sq->ratio) : 0; sq->pos.x = sq->from.x + r * (sq->to.x - sq->from.x); sq->pos.y = sq->from.y + r * (sq->to.y - sq->from.y); sq->pos.z = sq->from.z + r * (sq->to.z - sq->from.z); } if (do_pulse) { GLfloat p = pow (sin (sq->pulse * M_PI), 18); sq->head_radius = (head_radius_arg * 0.7 + head_radius_arg * 0.3 * p); radius = sq->head_radius * 0.25; sq->pulse += sq->rate * speed_arg * 0.02; if (sq->pulse > 1) sq->pulse = 0; } for (i = 0; i < sq->ntentacles; i++) { tentacle *tt = &sq->tentacles[i]; GLfloat th = i * step; GLfloat px = cos (th) * radius; GLfloat py = sin (th) * radius; tt->th = th; tt->nodes[0].pos.x = sq->pos.x + px; tt->nodes[0].pos.y = sq->pos.y + py; tt->nodes[0].pos.z = sq->pos.z; move_tentacle (sq, tt); } } /* Find the angle at which the head should be tilted in the XY plane. */ static GLfloat head_angle (ModeInfo *mi, squid *sq) { int i; XYZ sum = { 0, }; for (i = 0; i < sq->ntentacles; i++) { tentacle *t = &sq->tentacles[i]; int j = t->length / 3; /* Pick a node toward the top */ node *n = &t->nodes[j]; sum.x += n->pos.x; sum.y += n->pos.y; sum.z += n->pos.z; } sum.x /= sq->ntentacles; sum.y /= sq->ntentacles; sum.z /= sq->ntentacles; sum.x -= sq->pos.x; sum.y -= sq->pos.y; sum.z -= sq->pos.z; return (-atan2 (sum.x, sum.z) * (180 / M_PI)); } static void draw_head (ModeInfo *mi, squid *sq, GLfloat scale) { int wire = MI_IS_WIREFRAME(mi); int i = wire ? 8 : 64; GLfloat c2[4]; GLfloat angle = head_angle (mi, sq); scale *= 1.1; glPushMatrix(); glTranslatef (sq->pos.x, sq->pos.y, sq->pos.z); glScalef (sq->head_radius, sq->head_radius, sq->head_radius); glScalef (scale, scale, scale); glRotatef (90, 1, 0, 0); memcpy (c2, sq->color, sizeof(c2)); if (opacity_arg < 1.0 && scale >= 1.0) c2[3] *= 0.6; glColor4fv (c2); glMaterialfv (GL_FRONT, GL_AMBIENT_AND_DIFFUSE, c2); glTranslatef (0, 0.3, 0); glRotatef (angle, 0, 0, 1); glScalef (1, 1.1, 1); unit_dome (i, i/2, wire); glRotatef (180, 0, 0, 1); glScalef (1, 0.5, 1); unit_dome (i, i/2, wire); mi->polygon_count += i * i; glPopMatrix(); } static void draw_squid (ModeInfo *mi, squid *sq) { int wire = MI_IS_WIREFRAME(mi); int i; glPushMatrix(); glRotatef (90, 1, 0, 0); if (opacity_arg < 1.0) draw_head (mi, sq, 0.75); for (i = 0; i < sq->ntentacles; i++) { tentacle *t = &sq->tentacles[i]; int j; glColor4fv (t->color); glMaterialfv (GL_FRONT, GL_AMBIENT_AND_DIFFUSE, t->color); if (wire) { glBegin (GL_LINE_STRIP); for (j = 0; j < t->length; j++) glVertex3f (t->nodes[j].pos.x, t->nodes[j].pos.y, t->nodes[j].pos.z); glEnd(); mi->polygon_count += t->length; } else { GLfloat radius = t->radius * thickness_arg; GLfloat rstep = radius / t->length; int faces = 8; glFrontFace (GL_CCW); for (j = 0; j < t->length-1; j++) { int k; node *n1 = &t->nodes[j]; node *n2 = &t->nodes[j+1]; GLfloat X = (n1->pos.x - n2->pos.x); GLfloat Y = (n1->pos.y - n2->pos.y); GLfloat Z = (n1->pos.z - n2->pos.z); GLfloat L = sqrt (X*X + Y*Y + Z*Z); GLfloat r2 = radius - rstep; glPushMatrix(); glTranslatef (n1->pos.x, n1->pos.y, n1->pos.z); glRotatef (-atan2 (X, Y) * (180 / M_PI), 0, 0, 1); glRotatef ( atan2 (Z, sqrt(X*X + Y*Y)) * (180 / M_PI), 1, 0, 0); glBegin (wire ? GL_LINE_LOOP : GL_QUAD_STRIP); for (k = 0; k <= faces; k++) { GLfloat th = k * M_PI * 2 / faces; GLfloat c = cos(th); GLfloat s = sin(th); GLfloat x1 = radius * c; GLfloat y1 = radius * s; GLfloat z1 = 0; GLfloat x2 = r2 * c; GLfloat y2 = r2 * s; GLfloat z2 = L; glNormal3f (x1, z1, y1); glVertex3f (x1, z1, y1); glVertex3f (x2, z2, y2); mi->polygon_count++; } glEnd(); glPopMatrix(); radius = r2; } } } draw_head (mi, sq, 1.0); glPopMatrix(); } static squid * make_squid (ModeInfo *mi, int which) { squid *sq = calloc (1, sizeof(*sq)); int i; sq->head_radius = head_radius_arg; sq->thickness = thickness_arg; sq->ntentacles = ntentacles_arg; sq->color[0] = 0.1 + frand(0.7); sq->color[1] = 0.5 + frand(0.5); sq->color[2] = 0.1 + frand(0.7); sq->color[3] = opacity_arg; sq->from.x = sq->to.x = sq->pos.x = 200 - frand(400); sq->from.y = sq->to.y = sq->pos.y = 200 - frand(400); sq->from.z = sq->to.z = sq->pos.z = -frand(200); sq->ratio = -frand(3); if (which > 0) /* Start others off screen, and moving in */ { sq->from.x = sq->to.x = sq->pos.x = 800 + frand(500) * (random()&1 ? 1 : -1); sq->from.y = sq->to.y = sq->pos.y = 800 + frand(500) * (random()&1 ? 1 : -1); sq->ratio = 0; } if (do_pulse) sq->pulse = frand(1.0); sq->rate = 0.8 + frand(0.2); sq->tentacles = (tentacle *) calloc (sq->ntentacles, sizeof(*sq->tentacles)); for (i = 0; i < sq->ntentacles; i++) { int j; tentacle *t = &sq->tentacles[i]; GLfloat shade = 0.75 + frand(0.25); t->length = 2 + length_arg * (0.8 + frand (0.4)); t->radius = 0.05 + frand (0.95); t->spacing = 0.02 + frand (0.08); t->friction = 0.7 + frand (0.18); t->nodes = (node *) calloc (t->length + 1, sizeof (*t->nodes)); t->color[0] = shade * sq->color[0]; t->color[1] = shade * sq->color[1]; t->color[2] = shade * sq->color[2]; t->color[3] = sq->color[3]; for (j = 0; j < t->length; j++) { node *n = &t->nodes[j]; n->pos.x = sq->pos.x; n->pos.y = sq->pos.y; n->pos.z = sq->pos.z + j; } } return sq; } /* qsort comparator for sorting squid by depth */ static int cmp_squid (const void *aa, const void *bb) { squid * const *a = aa; squid * const *b = bb; return ((int) ((*b)->pos.y * 10000) - (int) ((*a)->pos.y * 10000)); } static void free_squid (squid *sq) { int i; for (i = 0; i < sq->ntentacles; i++) free (sq->tentacles[i].nodes); free (sq->tentacles); free (sq); } /* Window management, etc */ ENTRYPOINT void reshape_hydrostat (ModeInfo *mi, int width, int height) { GLfloat h = (GLfloat) height / (GLfloat) width; glViewport (0, 0, (GLint) width, (GLint) height); glMatrixMode(GL_PROJECTION); glLoadIdentity(); gluPerspective (30.0, 1/h, 1.0, 100.0); glMatrixMode(GL_MODELVIEW); glLoadIdentity(); gluLookAt( 0.0, 0.0, 30.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0); # ifdef HAVE_MOBILE /* Keep it the same relative size when rotated. */ { int o = (int) current_device_rotation(); if (o != 0 && o != 180 && o != -180) glScalef (1/h, 1/h, 1/h); } # endif glClear(GL_COLOR_BUFFER_BIT); } ENTRYPOINT Bool hydrostat_handle_event (ModeInfo *mi, XEvent *event) { hydrostat_configuration *bp = &bps[MI_SCREEN(mi)]; int w = MI_WIDTH(mi); int h = MI_HEIGHT(mi); int x, y; # ifdef USE_TRACKBALL if (gltrackball_event_handler (event, bp->trackball, MI_WIDTH (mi), MI_HEIGHT (mi), &bp->button_down_p)) return True; # endif switch (event->xany.type) { case ButtonPress: case ButtonRelease: x = event->xbutton.x; y = event->xbutton.y; break; case MotionNotify: x = event->xmotion.x; y = event->xmotion.y; break; default: x = y = 0; } x -= w/2; y -= h/2; x *= 0.7; y *= 0.7; if (event->xany.type == ButtonPress) { int i; GLfloat D0 = 999999; /* This is pretty halfassed hit detection, but it works ok... */ for (i = 0; i < MI_COUNT(mi); i++) { squid *s = bp->squids[i]; GLfloat X = s->pos.x - x; GLfloat Y = s->pos.z - y; GLfloat D = sqrt(X*X + Y*Y); if (D < D0) { bp->dragging = i; D0 = D; } } if (D0 > 300) /* Too far away, missed hit */ { bp->dragging = -1; return False; } bp->squids[bp->dragging]->ratio = -3; bp->button_down_p = True; return True; } else if (event->xany.type == ButtonRelease && bp->dragging >= 0) { bp->button_down_p = False; bp->dragging = -1; return True; } else if (event->xany.type == MotionNotify && bp->dragging >= 0) { squid *s = bp->squids[bp->dragging]; s->from.x = s->to.x = s->pos.x = x; s->from.z = s->to.z = s->pos.z = y; s->from.y = s->to.y = s->pos.y; return True; } return False; } ENTRYPOINT void init_hydrostat (ModeInfo *mi) { int wire = MI_IS_WIREFRAME(mi); hydrostat_configuration *bp; int i; if (!bps) { bps = (hydrostat_configuration *) calloc (MI_NUM_SCREENS(mi), sizeof (hydrostat_configuration)); if (!bps) { fprintf(stderr, "%s: out of memory\n", progname); exit(1); } } bp = &bps[MI_SCREEN(mi)]; bp->glx_context = init_GL(mi); reshape_hydrostat (mi, MI_WIDTH(mi), MI_HEIGHT(mi)); if (!wire) { GLfloat pos[4] = {1.0, 1.0, 1.0, 0.0}; GLfloat amb[4] = {0.0, 0.0, 0.0, 1.0}; GLfloat dif[4] = {1.0, 1.0, 1.0, 1.0}; GLfloat spc[4] = {0.0, 1.0, 1.0, 1.0}; glEnable(GL_LIGHTING); glEnable(GL_LIGHT0); glEnable(GL_DEPTH_TEST); glEnable(GL_CULL_FACE); glLightfv(GL_LIGHT0, GL_POSITION, pos); glLightfv(GL_LIGHT0, GL_AMBIENT, amb); glLightfv(GL_LIGHT0, GL_DIFFUSE, dif); glLightfv(GL_LIGHT0, GL_SPECULAR, spc); } glShadeModel(GL_SMOOTH); glEnable(GL_DEPTH_TEST); glEnable(GL_NORMALIZE); if (MI_COUNT(mi) <= 0) MI_COUNT(mi) = 1; if (random() & 1) current_arg = -current_arg; if (MI_COUNT(mi) == 1 || wire) opacity_arg = 1.0; if (opacity_arg < 0.1) opacity_arg = 0.1; if (opacity_arg > 1.0) opacity_arg = 1.0; bp->squids = (squid **) calloc (MI_COUNT(mi), sizeof(*bp->squids)); for (i = 0; i < MI_COUNT(mi); i++) bp->squids[i] = make_squid (mi, i); bp->dragging = -1; if (opacity_arg < 1.0) { glEnable (GL_BLEND); glBlendFunc (GL_SRC_ALPHA, GL_ONE); } # ifdef USE_TRACKBALL bp->trackball = gltrackball_init (True); # endif } ENTRYPOINT void draw_hydrostat (ModeInfo *mi) { hydrostat_configuration *bp = &bps[MI_SCREEN(mi)]; Display *dpy = MI_DISPLAY(mi); Window window = MI_WINDOW(mi); int i; if (!bp->glx_context) return; glXMakeCurrent(MI_DISPLAY(mi), MI_WINDOW(mi), *(bp->glx_context)); glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glPushMatrix (); glScalef (0.03, 0.03, 0.03); # ifdef USE_TRACKBALL gltrackball_rotate (bp->trackball); # endif mi->polygon_count = 0; if (opacity_arg < 1.0) qsort (bp->squids, MI_COUNT(mi), sizeof(*bp->squids), cmp_squid); for (i = 0; i < MI_COUNT(mi); i++) { squid *sq = bp->squids[i]; move_squid (mi, sq); draw_squid (mi, sq); if (opacity_arg < 1.0) glClear (GL_DEPTH_BUFFER_BIT); } if (! (random() % 700)) /* Reverse the flow every now and then */ current_arg = -current_arg; glPopMatrix (); if (mi->fps_p) do_fps (mi); glFinish(); glXSwapBuffers(dpy, window); } ENTRYPOINT void release_hydrostat (ModeInfo *mi) { hydrostat_configuration *bp = &bps[MI_SCREEN(mi)]; int i; for (i = 0; i < MI_COUNT(mi); i++) free_squid (bp->squids[i]); free (bp->squids); } XSCREENSAVER_MODULE ("Hydrostat", hydrostat) #endif /* USE_GL */ xscreensaver-5.36/hacks/glx/discoball.c000664 000767 000024 00000043725 12730177264 020147 0ustar00jwzstaff000000 000000 /* discoball, Copyright (c) 2016 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. */ #define DEFAULTS "*delay: 30000 \n" \ "*count: 30 \n" \ "*showFPS: False \n" \ "*wireframe: False \n" \ # define refresh_ball 0 #undef countof #define countof(x) (sizeof((x))/sizeof((*x))) #include "xlockmore.h" #include "normals.h" #include "rotator.h" #include "gltrackball.h" #include #ifdef USE_GL /* whole file */ #define DEF_SPIN "False" #define DEF_WANDER "True" #define DEF_SPEED "1.0" typedef struct tile tile; struct tile { XYZ position, normal; GLfloat size, tilt; tile *next; }; typedef struct { XYZ normal; GLfloat color[4]; } ray; typedef struct { GLXContext *glx_context; rotator *rot; GLfloat th; trackball_state *trackball; Bool button_down_p; tile *tiles; int nrays; ray *rays; } ball_configuration; static ball_configuration *bps = NULL; static Bool do_spin; static GLfloat speed; static Bool do_wander; static XrmOptionDescRec opts[] = { { "-spin", ".spin", XrmoptionNoArg, "True" }, { "+spin", ".spin", XrmoptionNoArg, "False" }, { "-speed", ".speed", XrmoptionSepArg, 0 }, { "-wander", ".wander", XrmoptionNoArg, "True" }, { "+wander", ".wander", XrmoptionNoArg, "False" } }; static argtype vars[] = { {&do_spin, "spin", "Spin", DEF_SPIN, t_Bool}, {&do_wander, "wander", "Wander", DEF_WANDER, t_Bool}, {&speed, "speed", "Speed", DEF_SPEED, t_Float}, }; ENTRYPOINT ModeSpecOpt ball_opts = {countof(opts), opts, countof(vars), vars, NULL}; static XYZ normalize (XYZ p) { GLfloat d = sqrt(p.x*p.x + p.y*p.y * p.z*p.z); if (d < 0.0000001) p.x = p.y = p.z = 0; else { p.x /= d; p.y /= d; p.z /= d; } return p; } static void build_texture (ModeInfo *mi) { int x, y; int size = 128; int bpl = size * 2; unsigned char *data = malloc (bpl * size); for (y = 0; y < size; y++) { for (x = 0; x < size; x++) { unsigned char *c = &data [y * bpl + x * 2]; GLfloat X = (x / (GLfloat) (size-1)) - 0.5; GLfloat Y = (y / (GLfloat) (size-1)) - 0.5; X = cos (X * X * 6.2); Y = cos (Y * Y * 6.2); X = X < Y ? X : Y; X *= 0.4; c[0] = 0xFF; c[1] = 0xFF * X; } } glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT); glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT); glTexEnvi (GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE); glPixelStorei (GL_UNPACK_ALIGNMENT, 1); check_gl_error ("texture param"); glTexImage2D (GL_TEXTURE_2D, 0, GL_LUMINANCE_ALPHA, size, size, 0, GL_LUMINANCE_ALPHA, GL_UNSIGNED_BYTE, data); check_gl_error ("light texture"); free (data); } static int draw_rays (ModeInfo *mi) { ball_configuration *bp = &bps[MI_SCREEN(mi)]; int wire = MI_IS_WIREFRAME(mi); int polys = 0; int i; glEnable (GL_TEXTURE_2D); glDisable (GL_LIGHTING); glEnable (GL_BLEND); glDisable (GL_DEPTH_TEST); glBlendFunc (GL_SRC_ALPHA, GL_ONE); for (i = 0; i < bp->nrays; i++) { GLfloat x = bp->rays[i].normal.x; GLfloat y = bp->rays[i].normal.y; GLfloat z = bp->rays[i].normal.z; glPushMatrix(); /* Orient to direction of ray. */ glRotatef (-atan2 (x, y) * (180 / M_PI), 0, 0, 1); glRotatef ( atan2 (z, sqrt(x*x + y*y)) * (180 / M_PI), 1, 0, 0); glScalef (5, 5, 10); glTranslatef(0, 0, 1.1); glColor4fv (bp->rays[i].color); glBegin(wire ? GL_LINE_LOOP : GL_QUADS); glTexCoord2f (0, 0); glVertex3f (-0.5, 0, -1); glTexCoord2f (1, 0); glVertex3f ( 0.5, 0, -1); glTexCoord2f (1, 1); glVertex3f ( 0.5, 0, 1); glTexCoord2f (0, 1); glVertex3f (-0.5, 0, 1); glEnd(); polys++; glPopMatrix(); } glDisable (GL_TEXTURE_2D); glEnable (GL_LIGHTING); glDisable (GL_BLEND); glEnable (GL_DEPTH_TEST); glDisable (GL_FOG); return polys; } static int draw_ball_1 (ModeInfo *mi) { ball_configuration *bp = &bps[MI_SCREEN(mi)]; int wire = MI_IS_WIREFRAME(mi); int polys = 0; tile *t; GLfloat m[4][4]; glGetFloatv (GL_MODELVIEW_MATRIX, &m[0][0]); glFrontFace (GL_CW); #if 0 /* Draw the back rays. */ if (! wire) { glPushMatrix(); glLoadIdentity(); glMultMatrixf (&m[0][0]); glTranslatef(0, 0, -4.1); glRotatef (bp->th, 0, 0, 1); polys += draw_rays (mi); glPopMatrix(); } glClear(GL_DEPTH_BUFFER_BIT); #endif /* Instead of rendering polygons for the foam ball substrate, let's just billboard a quad down the middle to mask out the back-facing tiles. */ { glPushMatrix(); m[0][0] = 1; m[1][0] = 0; m[2][0] = 0; m[0][1] = 0; m[1][1] = 1; m[2][1] = 0; m[0][2] = 0; m[1][2] = 0; m[2][2] = 1; glLoadIdentity(); glMultMatrixf (&m[0][0]); glScalef (40, 40, 40); glTranslatef (-0.5, -0.5, -0.01); if (! wire) glDisable (GL_LIGHTING); /* Draw into the depth buffer but not the frame buffer */ glColorMask (GL_FALSE, GL_FALSE, GL_FALSE, GL_FALSE); glColor3f (0, 0, 0); glBegin (GL_QUADS); glVertex3f (0, 0, 0); glVertex3f (0, 1, 0); glVertex3f (1, 1, 0); glVertex3f (1, 0, 0); glEnd(); polys++; glColorMask (GL_TRUE, GL_TRUE, GL_TRUE, GL_TRUE); if (! wire) glEnable (GL_LIGHTING); glPopMatrix(); glColor3f (1, 1, 1); } /* Draw all the tiles. */ for (t = bp->tiles; t; t = t->next) { GLfloat x = t->normal.x; GLfloat y = t->normal.y; GLfloat z = t->normal.z; GLfloat s = t->size / 2; glPushMatrix(); /* Move to location of tile. */ glTranslatef (t->position.x, t->position.y, t->position.z); /* Orient to direction tile is facing. */ glRotatef (-atan2 (x, y) * (180 / M_PI), 0, 0, 1); glRotatef ( atan2 (z, sqrt(x*x + y*y)) * (180 / M_PI), 1, 0, 0); glRotatef (t->tilt, 0, 1, 0); glScalef (s, s, s); glNormal3f (0, 1, 0); glBegin (wire ? GL_LINE_LOOP : GL_QUADS); glVertex3f (-1, 0, -1); glVertex3f ( 1, 0, -1); glVertex3f ( 1, 0, 1); glVertex3f (-1, 0, 1); glEnd(); polys++; if (! wire) { GLfloat d = 0.2; glNormal3f (0, 0, -1); glBegin (wire ? GL_LINE_LOOP : GL_QUADS); glVertex3f (-1, 0, -1); glVertex3f (-1, -d, -1); glVertex3f ( 1, -d, -1); glVertex3f ( 1, 0, -1); glEnd(); polys++; glNormal3f (0, 0, 1); glBegin (wire ? GL_LINE_LOOP : GL_QUADS); glVertex3f ( 1, 0, 1); glVertex3f ( 1, -d, 1); glVertex3f (-1, -d, 1); glVertex3f (-1, 0, 1); glEnd(); polys++; glNormal3f (1, 0, 0); glBegin (wire ? GL_LINE_LOOP : GL_QUADS); glVertex3f ( 1, 0, -1); glVertex3f ( 1, -d, -1); glVertex3f ( 1, -d, 1); glVertex3f ( 1, 0, 1); glEnd(); polys++; glNormal3f (-1, 0, 0); glBegin (wire ? GL_LINE_LOOP : GL_QUADS); glVertex3f (-1, 0, 1); glVertex3f (-1, -d, 1); glVertex3f (-1, -d, -1); glVertex3f (-1, 0, -1); glEnd(); polys++; } glPopMatrix(); } /* Draw the front rays. */ if (! wire) { glPushMatrix(); glLoadIdentity(); glMultMatrixf (&m[0][0]); glTranslatef(0, 0, 4.1); glRotatef (-bp->th, 0, 0, 1); polys += draw_rays (mi); glPopMatrix(); } return polys; } static GLfloat vector_angle (XYZ a, XYZ b) { double La = sqrt (a.x*a.x + a.y*a.y + a.z*a.z); double Lb = sqrt (b.x*b.x + b.y*b.y + b.z*b.z); double cc, angle; if (La == 0 || Lb == 0) return 0; if (a.x == b.x && a.y == b.y && a.z == b.z) return 0; /* dot product of two vectors is defined as: La * Lb * cos(angle between vectors) and is also defined as: ax*bx + ay*by + az*bz so: La * Lb * cos(angle) = ax*bx + ay*by + az*bz cos(angle) = (ax*bx + ay*by + az*bz) / (La * Lb) angle = acos ((ax*bx + ay*by + az*bz) / (La * Lb)); */ cc = (a.x*b.x + a.y*b.y + a.z*b.z) / (La * Lb); if (cc > 1) cc = 1; /* avoid fp rounding error (1.000001 => sqrt error) */ angle = acos (cc); return (angle); } #undef RANDSIGN #define RANDSIGN() ((random() & 1) ? 1 : -1) #undef BELLRAND #define BELLRAND(n) ((frand((n)) + frand((n)) + frand((n))) / 3) static void build_ball (ModeInfo *mi) { ball_configuration *bp = &bps[MI_SCREEN(mi)]; int rows = MI_COUNT (mi); GLfloat tile_size = M_PI / rows; GLfloat th0, th1; struct { XYZ position; GLfloat strength; } dents[5]; int dent_count = random() % countof(dents); int i; for (i = 0; i < dent_count; i++) { GLfloat dist; dents[i].position.x = RANDSIGN() * (2 - BELLRAND(0.2)); dents[i].position.y = RANDSIGN() * (2 - BELLRAND(0.2)); dents[i].position.z = RANDSIGN() * (2 - BELLRAND(0.2)); dist = sqrt (dents[i].position.x * dents[i].position.x + dents[i].position.y * dents[i].position.y + dents[i].position.z * dents[i].position.z); dents[i].strength = dist - (1 - BELLRAND(0.3)); dents[i].strength = dist - (1 - BELLRAND(0.3)); } for (th1 = M_PI/2; th1 > -(M_PI/2 + tile_size/2); th1 -= tile_size) { GLfloat x = cos (th1); GLfloat y = sin (th1); GLfloat x0 = cos (th1 - tile_size/2); GLfloat x1 = cos (th1 + tile_size/2); GLfloat circ0 = M_PI * x0 * 2; GLfloat circ1 = M_PI * x1 * 2; GLfloat circ = (circ0 < circ1 ? circ0 : circ1); int row_tiles = floor ((circ < 0 ? 0 : circ) / tile_size); GLfloat spacing; GLfloat dropsy = 0.13 + frand(0.04); if (row_tiles <= 0) row_tiles = 1; spacing = M_PI*2 / row_tiles; for (th0 = 0; th0 < M_PI*2; th0 += spacing) { tile *t = (tile *) calloc (1, sizeof(*t)); t->size = tile_size * 0.85; t->position.x = cos (th0) * x; t->position.y = sin (th0) * x; t->position.z = y; t->normal = t->position; /* Apply pressure on position from the dents. */ for (i = 0; i < dent_count; i++) { GLfloat dist; XYZ direction; if (! (random() % 150)) /* Drop tiles randomly */ { free (t); goto SKIP; } direction.x = t->position.x - dents[i].position.x; direction.y = t->position.y - dents[i].position.y; direction.z = t->position.z - dents[i].position.z; dist = sqrt (direction.x * direction.x + direction.y * direction.y + direction.z * direction.z); if (dist < dents[i].strength) { GLfloat s = 1 - (dents[i].strength - dist) * 0.66; XYZ n2 = t->normal; GLfloat angle = vector_angle (t->position, dents[i].position); /* Drop out the tiles near the apex of the dent. */ if (angle < dropsy) { free (t); goto SKIP; } t->position.x *= s; t->position.y *= s; t->position.z *= s; direction = normalize (direction); n2.x -= direction.x; n2.y -= direction.y; n2.z -= direction.z; t->normal.x = (t->normal.x + n2.x) / 2; t->normal.y = (t->normal.y + n2.y) / 2; t->normal.z = (t->normal.z + n2.z) / 2; } } /* Skew the direction the tile is facing slightly. */ t->normal.x += 0.12 - frand(0.06); t->normal.y += 0.12 - frand(0.06); t->normal.z += 0.12 - frand(0.06); t->tilt = 4 - BELLRAND(8); t->next = bp->tiles; bp->tiles = t; SKIP: ; } } bp->nrays = 5 + BELLRAND(10); bp->rays = (ray *) calloc (bp->nrays, sizeof(*bp->rays)); for (i = 0; i < bp->nrays; i++) { GLfloat th = frand(M_PI * 2); bp->rays[i].normal.x = cos (th); bp->rays[i].normal.y = sin (th); bp->rays[i].normal.z = 1; bp->rays[i].normal = normalize (bp->rays[i].normal); bp->rays[i].color[0] = 0.9 + frand(0.1); bp->rays[i].color[1] = 0.6 + frand(0.4); bp->rays[i].color[2] = 0.6 + frand(0.2); bp->rays[i].color[3] = 1; } } /* Window management, etc */ ENTRYPOINT void reshape_ball (ModeInfo *mi, int width, int height) { GLfloat h = (GLfloat) height / (GLfloat) width; glViewport (0, 0, (GLint) width, (GLint) height); glMatrixMode(GL_PROJECTION); glLoadIdentity(); gluPerspective (30.0, 1/h, 1.0, 100.0); glMatrixMode(GL_MODELVIEW); glLoadIdentity(); gluLookAt( 0.0, 0.0, 30.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0); # ifdef HAVE_MOBILE /* Keep it the same relative size when rotated. */ { int o = (int) current_device_rotation(); if (o != 0 && o != 180 && o != -180) glScalef (1/h, 1/h, 1/h); } # endif glClear(GL_COLOR_BUFFER_BIT); } ENTRYPOINT Bool ball_handle_event (ModeInfo *mi, XEvent *event) { ball_configuration *bp = &bps[MI_SCREEN(mi)]; if (gltrackball_event_handler (event, bp->trackball, MI_WIDTH (mi), MI_HEIGHT (mi), &bp->button_down_p)) return True; return False; } ENTRYPOINT void init_ball (ModeInfo *mi) { ball_configuration *bp; int wire = MI_IS_WIREFRAME(mi); if (!bps) { bps = (ball_configuration *) calloc (MI_NUM_SCREENS(mi), sizeof (ball_configuration)); if (!bps) { fprintf(stderr, "%s: out of memory\n", progname); exit(1); } } bp = &bps[MI_SCREEN(mi)]; bp->glx_context = init_GL(mi); if (! wire) build_texture (mi); reshape_ball (mi, MI_WIDTH(mi), MI_HEIGHT(mi)); bp->th = 180 - frand(360); if (MI_COUNT(mi) < 10) MI_COUNT(mi) = 10; if (MI_COUNT(mi) > 200) MI_COUNT(mi) = 200; { double spin_speed = 0.1; double wander_speed = 0.003; double spin_accel = 1; bp->rot = make_rotator (do_spin ? spin_speed : 0, do_spin ? spin_speed : 0, do_spin ? spin_speed : 0, spin_accel, do_wander ? wander_speed : 0, False); bp->trackball = gltrackball_init (True); } build_ball (mi); if (!wire) { GLfloat color[4] = {0.5, 0.5, 0.5, 1}; GLfloat cspec[4] = {1, 1, 1, 1}; static const GLfloat shiny = 10; static GLfloat pos0[4] = { 0.5, -1, -0.5, 0}; static GLfloat pos1[4] = {-0.75, -1, 0, 0}; static GLfloat amb[4] = {0, 0, 0, 1}; static GLfloat dif[4] = {1, 1, 1, 1}; static GLfloat spc[4] = {1, 1, 1, 1}; glEnable(GL_LIGHTING); glEnable(GL_LIGHT0); glEnable(GL_LIGHT1); glEnable(GL_DEPTH_TEST); glEnable(GL_CULL_FACE); color[0] += frand(0.2); color[1] += frand(0.2); color[2] += frand(0.2); cspec[0] -= frand(0.2); cspec[1] -= frand(0.2); cspec[2] -= frand(0.2); glLightfv(GL_LIGHT0, GL_POSITION, pos0); glLightfv(GL_LIGHT0, GL_AMBIENT, amb); glLightfv(GL_LIGHT0, GL_DIFFUSE, dif); glLightfv(GL_LIGHT0, GL_SPECULAR, spc); glLightfv(GL_LIGHT1, GL_POSITION, pos1); glLightfv(GL_LIGHT1, GL_AMBIENT, amb); glLightfv(GL_LIGHT1, GL_DIFFUSE, dif); glLightfv(GL_LIGHT1, GL_SPECULAR, spc); glMaterialfv (GL_FRONT, GL_AMBIENT_AND_DIFFUSE, color); glMaterialfv (GL_FRONT, GL_SPECULAR, cspec); glMateriali (GL_FRONT, GL_SHININESS, shiny); } } ENTRYPOINT void draw_ball (ModeInfo *mi) { ball_configuration *bp = &bps[MI_SCREEN(mi)]; Display *dpy = MI_DISPLAY(mi); Window window = MI_WINDOW(mi); if (!bp->glx_context) return; glXMakeCurrent(MI_DISPLAY(mi), MI_WINDOW(mi), *(bp->glx_context)); glShadeModel(GL_SMOOTH); glEnable(GL_DEPTH_TEST); glEnable(GL_NORMALIZE); glEnable(GL_CULL_FACE); glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glPushMatrix (); glRotatef(current_device_rotation(), 0, 0, 1); { double x, y, z; get_position (bp->rot, &x, &y, &z, !bp->button_down_p); glTranslatef((x - 0.5) * 6, (y - 0.5) * 6, (z - 0.5) * 2); gltrackball_rotate (bp->trackball); get_rotation (bp->rot, &x, &y, &z, !bp->button_down_p); glRotatef (x * 360, 1.0, 0.0, 0.0); glRotatef (y * 360, 0.0, 1.0, 0.0); glRotatef (z * 360, 0.0, 0.0, 1.0); } mi->polygon_count = 0; glRotatef (50, 1, 0, 0); glScalef (4, 4, 4); glRotatef (bp->th, 0, 0, 1); if (! bp->button_down_p) { bp->th += (bp->th > 0 ? speed : -speed); while (bp->th > 360) bp->th -= 360; while (bp->th < -360) bp->th += 360; } mi->polygon_count += draw_ball_1 (mi); glPopMatrix (); if (mi->fps_p) do_fps (mi); glFinish(); glXSwapBuffers(dpy, window); } ENTRYPOINT void release_ball (ModeInfo *mi) { ball_configuration *bp = &bps[MI_SCREEN(mi)]; while (bp->tiles) { tile *t = bp->tiles->next; free (bp->tiles); bp->tiles = t; } free (bp->rays); } XSCREENSAVER_MODULE_2 ("Discoball", discoball, ball) #endif /* USE_GL */ xscreensaver-5.36/hacks/glx/cubetwist.c000664 000767 000024 00000034007 12731303375 020210 0ustar00jwzstaff000000 000000 /* cubetwist, Copyright (c) 2016 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. */ #define DEFAULTS "*delay: 30000 \n" \ "*showFPS: False \n" \ "*wireframe: False \n" \ "*suppressRotationAnimation: True\n" \ # define refresh_cube 0 #undef countof #define countof(x) (sizeof((x))/sizeof((*x))) #include "xlockmore.h" #include "normals.h" #include "rotator.h" #include "gltrackball.h" #include #ifdef USE_GL /* whole file */ #define DEF_SPIN "True" #define DEF_WANDER "True" #define DEF_SPEED "1.0" #define DEF_FLAT "True" #define DEF_THICKNESS "0.0" #define DEF_DISPLACEMENT "0.0" typedef struct cube cube; struct cube { GLfloat size, thickness; XYZ pos, rot; GLfloat color[4]; cube *next; }; typedef struct oscillator oscillator; struct oscillator { double ratio, from, to, speed, *var; int remaining; oscillator *next; }; typedef struct { GLXContext *glx_context; rotator *rot; trackball_state *trackball; Bool button_down_p; cube *cubes; oscillator *oscillators; } cube_configuration; static cube_configuration *bps = NULL; static Bool do_flat; static Bool do_spin; static GLfloat speed; static GLfloat thickness; static GLfloat displacement; static Bool do_wander; static XrmOptionDescRec opts[] = { { "-spin", ".spin", XrmoptionNoArg, "True" }, { "+spin", ".spin", XrmoptionNoArg, "False" }, { "-wander", ".wander", XrmoptionNoArg, "True" }, { "+wander", ".wander", XrmoptionNoArg, "False" }, { "-flat", ".flat", XrmoptionNoArg, "True" }, { "+flat", ".flat", XrmoptionNoArg, "False" }, { "-speed", ".speed", XrmoptionSepArg, 0 }, { "-thickness", ".thickness", XrmoptionSepArg, 0 }, { "-displacement", ".displacement", XrmoptionSepArg, 0 }, }; static argtype vars[] = { {&do_flat, "flat", "flat", DEF_FLAT, t_Bool}, {&do_spin, "spin", "Spin", DEF_SPIN, t_Bool}, {&do_wander, "wander", "Wander", DEF_WANDER, t_Bool}, {&speed, "speed", "Speed", DEF_SPEED, t_Float}, {&thickness, "thickness", "Thickness", DEF_THICKNESS, t_Float}, {&displacement, "displacement", "Displacement", DEF_DISPLACEMENT, t_Float}, }; ENTRYPOINT ModeSpecOpt cube_opts = {countof(opts), opts, countof(vars), vars, NULL}; static int draw_strut (ModeInfo *mi, cube *c) { int wire = MI_IS_WIREFRAME(mi); int polys = 0; glPushMatrix(); glFrontFace (GL_CW); glNormal3f (0, 0, -1); glTranslatef (-c->size/2, -c->size/2, -c->size/2); glBegin (wire ? GL_LINE_LOOP : GL_TRIANGLE_FAN); glVertex3f (0, 0, 0); glVertex3f (c->size, 0, 0); glVertex3f (c->size - c->thickness, c->thickness, 0); glVertex3f (c->thickness, c->thickness, 0); glEnd(); polys += 2; glNormal3f (0, 1, 0); glBegin (wire ? GL_LINE_LOOP : GL_TRIANGLE_FAN); glVertex3f (c->thickness, c->thickness, 0); glVertex3f (c->size - c->thickness, c->thickness, 0); glVertex3f (c->size - c->thickness, c->thickness, c->thickness); glVertex3f (c->thickness, c->thickness, c->thickness); glEnd(); polys += 2; glPopMatrix(); return polys; } static int draw_cubes (ModeInfo *mi, cube *c) { int polys = 0; int i, j; glPushMatrix(); glColor4fv (c->color); glMaterialfv (GL_FRONT, GL_AMBIENT_AND_DIFFUSE, c->color); glPushMatrix(); for (j = 0; j < 6; j++) { for (i = 0; i < 4; i++) { polys += draw_strut (mi, c); glRotatef (90, 0, 0, 1); } if (j == 3) glRotatef (90, 0, 0, 1); if (j < 4) glRotatef (90, 0, 1, 0); else glRotatef (180, 1, 0, 0); } glPopMatrix(); if (c->next) { glRotatef (c->rot.x, 1, 0, 0); glRotatef (c->rot.y, 0, 1, 0); glRotatef (c->rot.z, 0, 0, 1); glTranslatef (c->pos.x, c->pos.y, c->pos.z); c->next->pos = c->pos; c->next->rot = c->rot; polys += draw_cubes (mi, c->next); } glPopMatrix(); return polys; } static void make_cubes (ModeInfo *mi) { cube_configuration *bp = &bps[MI_SCREEN(mi)]; GLfloat step = 2 * (thickness + displacement); GLfloat size = 1.0; cube *tail = 0; GLfloat cc[4], cstep; int depth = 0; cube *c; cc[0] = 0.3 + frand(0.7); cc[1] = 0.3 + frand(0.7); cc[2] = 0.3 + frand(0.7); cc[3] = 1; if (bp->cubes) abort(); while (1) { cube *c = (cube *) calloc (1, sizeof (*c)); c->size = size; c->thickness = thickness; if (tail) tail->next = c; else bp->cubes = c; tail = c; depth++; size -= step; if (size <= step) break; } cstep = 0.8 / depth; for (c = bp->cubes; c; c = c->next) { memcpy (c->color, cc, sizeof(cc)); cc[0] -= cstep; cc[1] -= cstep; cc[2] -= cstep; } } static GLfloat ease_fn (GLfloat r) { return cos ((r/2 + 1) * M_PI) + 1; /* Smooth curve up, end at slope 1. */ } static GLfloat ease_ratio (GLfloat r) { GLfloat ease = 0.5; if (r <= 0) return 0; else if (r >= 1) return 1; else if (r <= ease) return ease * ease_fn (r / ease); else if (r > 1-ease) return 1 - ease * ease_fn ((1 - r) / ease); else return r; } static void tick_oscillators (ModeInfo *mi) { cube_configuration *bp = &bps[MI_SCREEN(mi)]; oscillator *prev = 0; oscillator *a = bp->oscillators; GLfloat tick = 0.1 / speed; while (a) { oscillator *next = a->next; a->ratio += tick * a->speed; if (a->ratio > 1) a->ratio = 1; *a->var = a->from + (a->to - a->from) * ease_ratio (a->ratio); if (a->ratio < 1) /* mid cycle */ prev = a; else if (--a->remaining <= 0) /* ended, and expired */ { if (prev) prev->next = next; else bp->oscillators = next; free (a); } else /* keep going the other way */ { GLfloat swap = a->from; a->from = a->to; a->to = swap; a->ratio = 0; prev = a; } a = next; } } static void add_oscillator (ModeInfo *mi, double *var, GLfloat speed, GLfloat to, int repeat) { cube_configuration *bp = &bps[MI_SCREEN(mi)]; oscillator *a; /* If an oscillator is already running on this variable, don't add another. */ for (a = bp->oscillators; a && a->next; a = a->next) if (a->var == var) return; a = (oscillator *) calloc (1, sizeof (*a)); if (repeat <= 0) abort(); a->ratio = 0; a->from = *var; a->to = to; a->speed = speed; a->var = var; a->remaining = repeat; a->next = bp->oscillators; bp->oscillators = a; # if 0 fprintf (stderr, "%s: %3d %6.2f -> %6.2f %s\n", progname, repeat, *var, to, (var == &bp->midpoint.z ? "z" : var == &bp->tilt ? "tilt" : var == &bp->axial_radius ? "r" : var == &bp->speed ? "speed" : "?")); # endif } #undef RANDSIGN #define RANDSIGN() ((random() & 1) ? 1 : -1) static void add_random_oscillator (ModeInfo *mi) { cube_configuration *bp = &bps[MI_SCREEN(mi)]; cube *c = bp->cubes; double s1 = speed * 0.07; double s2 = speed * 0.3; double disp = (thickness + displacement); int c1 = 1 + ((random() % 4) ? 0 : (random() % 3)); int c2 = 2; int n = random() % 6; switch (n) { case 0: add_oscillator (mi, &c->rot.x, s1, 90 * RANDSIGN(), c1); break; case 1: add_oscillator (mi, &c->rot.y, s1, 90 * RANDSIGN(), c1); break; case 2: add_oscillator (mi, &c->rot.z, s1, 90 * RANDSIGN(), c1); break; case 3: add_oscillator (mi, &c->pos.x, s2, disp * RANDSIGN(), c2); break; case 4: add_oscillator (mi, &c->pos.y, s2, disp * RANDSIGN(), c2); break; case 5: add_oscillator (mi, &c->pos.z, s2, disp * RANDSIGN(), c2); break; default: abort(); break; } } /* Window management, etc */ ENTRYPOINT void reshape_cube (ModeInfo *mi, int width, int height) { GLfloat h = (GLfloat) height / (GLfloat) width; glViewport (0, 0, (GLint) width, (GLint) height); glMatrixMode(GL_PROJECTION); glLoadIdentity(); gluPerspective (30.0, 1/h, 1.0, 100.0); glMatrixMode(GL_MODELVIEW); glLoadIdentity(); gluLookAt( 0.0, 0.0, 30.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0); # ifdef HAVE_MOBILE /* Keep it the same relative size when rotated. */ { int o = (int) current_device_rotation(); if (o != 0 && o != 180 && o != -180) glScalef (1/h, 1/h, 1/h); } # endif glClear(GL_COLOR_BUFFER_BIT); } ENTRYPOINT Bool cube_handle_event (ModeInfo *mi, XEvent *event) { cube_configuration *bp = &bps[MI_SCREEN(mi)]; if (gltrackball_event_handler (event, bp->trackball, MI_WIDTH (mi), MI_HEIGHT (mi), &bp->button_down_p)) return True; else if (event->xany.type == KeyPress) { KeySym keysym; char c = 0; XLookupString (&event->xkey, &c, 1, &keysym, 0); if (c == ' ' || c == '\t') { while (bp->cubes) { cube *c = bp->cubes->next; free (bp->cubes); bp->cubes = c; } while (bp->oscillators) { oscillator *o = bp->oscillators->next; free (bp->oscillators); bp->oscillators = o; } if (random() & 1) { thickness = 0.03 + frand(0.02); displacement = (random() & 1) ? 0 : (thickness / 3); } else { thickness = 0.001 + frand(0.02); displacement = 0; } make_cubes (mi); return True; } } return False; } ENTRYPOINT void init_cube (ModeInfo *mi) { cube_configuration *bp; int wire = MI_IS_WIREFRAME(mi); if (!bps) { bps = (cube_configuration *) calloc (MI_NUM_SCREENS(mi), sizeof (cube_configuration)); if (!bps) { fprintf(stderr, "%s: out of memory\n", progname); exit(1); } } bp = &bps[MI_SCREEN(mi)]; bp->glx_context = init_GL(mi); reshape_cube (mi, MI_WIDTH(mi), MI_HEIGHT(mi)); if (!wire && !do_flat) { GLfloat color[4] = {1, 1, 1, 1}; GLfloat cspec[4] = {1, 1, 0, 1}; static const GLfloat shiny = 30; static GLfloat pos0[4] = { 0.5, -1, -0.5, 0}; static GLfloat pos1[4] = {-0.75, -1, 0, 0}; static GLfloat amb[4] = {0, 0, 0, 1}; static GLfloat dif[4] = {1, 1, 1, 1}; static GLfloat spc[4] = {1, 1, 1, 1}; glEnable(GL_LIGHTING); glEnable(GL_LIGHT0); glEnable(GL_LIGHT1); glEnable(GL_DEPTH_TEST); glEnable(GL_CULL_FACE); glLightfv(GL_LIGHT0, GL_POSITION, pos0); glLightfv(GL_LIGHT0, GL_AMBIENT, amb); glLightfv(GL_LIGHT0, GL_DIFFUSE, dif); glLightfv(GL_LIGHT0, GL_SPECULAR, spc); glLightfv(GL_LIGHT1, GL_POSITION, pos1); glLightfv(GL_LIGHT1, GL_AMBIENT, amb); glLightfv(GL_LIGHT1, GL_DIFFUSE, dif); glLightfv(GL_LIGHT1, GL_SPECULAR, spc); glMaterialfv (GL_FRONT, GL_AMBIENT_AND_DIFFUSE, color); glMaterialfv (GL_FRONT, GL_SPECULAR, cspec); glMateriali (GL_FRONT, GL_SHININESS, shiny); } { double spin_speed = 0.05; double wander_speed = 0.005; double spin_accel = 1.0; bp->rot = make_rotator (do_spin ? spin_speed : 0, do_spin ? spin_speed : 0, do_spin ? spin_speed : 0, spin_accel, do_wander ? wander_speed : 0, True); bp->trackball = gltrackball_init (True); } if (thickness > 0.5) thickness = 0.5; if (displacement > 0.5) displacement = 0.5; if (thickness <= 0.0001) { if (random() & 1) { thickness = 0.03 + frand(0.02); displacement = (random() & 1) ? 0 : (thickness / 3); } else { thickness = 0.001 + frand(0.02); displacement = 0; } } make_cubes (mi); } ENTRYPOINT void draw_cube (ModeInfo *mi) { cube_configuration *bp = &bps[MI_SCREEN(mi)]; Display *dpy = MI_DISPLAY(mi); Window window = MI_WINDOW(mi); if (!bp->glx_context) return; glXMakeCurrent(MI_DISPLAY(mi), MI_WINDOW(mi), *(bp->glx_context)); glShadeModel(GL_SMOOTH); glEnable(GL_DEPTH_TEST); glEnable(GL_NORMALIZE); glEnable(GL_CULL_FACE); glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glPushMatrix (); glScalef(1.1, 1.1, 1.1); { double x, y, z; get_position (bp->rot, &x, &y, &z, !bp->button_down_p); glTranslatef((x - 0.5) * 4, (y - 0.5) * 4, (z - 0.5) * 2); gltrackball_rotate (bp->trackball); get_rotation (bp->rot, &x, &y, &z, !bp->button_down_p); glRotatef (x * 360, 1.0, 0.0, 0.0); glRotatef (y * 360, 0.0, 1.0, 0.0); glRotatef (z * 360, 0.0, 0.0, 1.0); } mi->polygon_count = 0; glScalef (6, 6, 6); mi->polygon_count = draw_cubes (mi, bp->cubes); glPopMatrix (); if (!bp->button_down_p) tick_oscillators (mi); if (! bp->oscillators && !bp->button_down_p && !(random() % 60)) { bp->cubes->pos.x = bp->cubes->pos.y = bp->cubes->pos.z = 0; bp->cubes->rot.x = bp->cubes->rot.y = bp->cubes->rot.z = 0; add_random_oscillator (mi); } if (mi->fps_p) do_fps (mi); glFinish(); glXSwapBuffers(dpy, window); } ENTRYPOINT void release_cube (ModeInfo *mi) { cube_configuration *bp = &bps[MI_SCREEN(mi)]; while (bp->cubes) { cube *c = bp->cubes->next; free (bp->cubes); bp->cubes = c; } while (bp->oscillators) { oscillator *o = bp->oscillators->next; free (bp->oscillators); bp->oscillators = o; } } XSCREENSAVER_MODULE_2 ("CubeTwist", cubetwist, cube) #endif /* USE_GL */ xscreensaver-5.36/hacks/glx/cubestack.c000664 000767 000024 00000025012 12731473750 020144 0ustar00jwzstaff000000 000000 /* cubestack, Copyright (c) 2016 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. */ #define DEFAULTS "*delay: 30000 \n" \ "*showFPS: False \n" \ "*wireframe: False \n" \ "*suppressRotationAnimation: True\n" \ # define refresh_cube 0 # define release_cube 0 #undef countof #define countof(x) (sizeof((x))/sizeof((*x))) #include "xlockmore.h" #include "colors.h" #include "rotator.h" #include "gltrackball.h" #include #ifdef USE_GL /* whole file */ #define DEF_WANDER "True" #define DEF_SPEED "1.0" #define DEF_THICKNESS "0.13" #define DEF_OPACITY "0.7" typedef struct { GLXContext *glx_context; rotator *rot; trackball_state *trackball; Bool button_down_p; GLfloat state; GLfloat r; int length; int ncolors; XColor *colors; int ccolor; } cube_configuration; static cube_configuration *bps = NULL; static GLfloat speed; static GLfloat thickness; static GLfloat opacity; static Bool do_wander; static XrmOptionDescRec opts[] = { { "-wander", ".wander", XrmoptionNoArg, "True" }, { "+wander", ".wander", XrmoptionNoArg, "False" }, { "-speed", ".speed", XrmoptionSepArg, 0 }, { "-thickness", ".thickness", XrmoptionSepArg, 0 }, { "-opacity", ".opacity", XrmoptionSepArg, 0 }, }; static argtype vars[] = { {&do_wander, "wander", "Wander", DEF_WANDER, t_Bool}, {&speed, "speed", "Speed", DEF_SPEED, t_Float}, {&thickness, "thickness", "Thickness", DEF_THICKNESS, t_Float}, {&opacity, "opacity", "Opacity", DEF_OPACITY, t_Float}, }; ENTRYPOINT ModeSpecOpt cube_opts = {countof(opts), opts, countof(vars), vars, NULL}; static int draw_strut (ModeInfo *mi) { int wire = MI_IS_WIREFRAME(mi); int polys = 0; GLfloat h; glPushMatrix(); glFrontFace (GL_CCW); glNormal3f (0, 0, -1); glTranslatef (-0.5, -0.5, 0); glBegin (wire ? GL_LINE_LOOP : GL_TRIANGLE_FAN); glVertex3f (0, 0, 0); glVertex3f (1, 0, 0); glVertex3f (1 - thickness, thickness, 0); glVertex3f (thickness, thickness, 0); glEnd(); polys += 2; h = 0.5 - thickness; if (h >= 0.25) { glBegin (wire ? GL_LINE_LOOP : GL_TRIANGLE_FAN); glVertex3f (0.5, 0.5, 0); glVertex3f (0.5 - thickness/2, 0.5 - thickness/2, 0); glVertex3f (0.5 - thickness/2, 0.5 - h/2, 0); glVertex3f (0.5 + thickness/2, 0.5 - h/2, 0); glVertex3f (0.5 + thickness/2, 0.5 - thickness/2, 0); glEnd(); polys += 3; } glPopMatrix(); return polys; } static int draw_face (ModeInfo *mi) { int i; int polys = 0; for (i = 0; i < 4; i++) { polys += draw_strut (mi); glRotatef (90, 0, 0, 1); } return polys; } static GLfloat ease_fn (GLfloat r) { return cos ((r/2 + 1) * M_PI) + 1; /* Smooth curve up, end at slope 1. */ } static GLfloat ease_ratio (GLfloat r) { GLfloat ease = 0.5; if (r <= 0) return 0; else if (r >= 1) return 1; else if (r <= ease) return ease * ease_fn (r / ease); else if (r > 1-ease) return 1 - ease * ease_fn ((1 - r) / ease); else return r; } static int draw_cube_1 (ModeInfo *mi, GLfloat state, GLfloat color[4], Bool bottom_p) { int polys = 0; int istate = state; GLfloat r = state - istate; GLfloat a = color[3]; r = ease_ratio (r); # define COLORIZE(R) \ color[3] = a * R; \ glMaterialfv (GL_FRONT_AND_BACK, GL_AMBIENT_AND_DIFFUSE, color); \ glColor4fv (color) if (bottom_p) { GLfloat r2 = (state < 0 ? 1 + state : 1); COLORIZE(r2); polys += draw_face (mi); /* Bottom */ } if (state >= 0) /* Left */ { GLfloat r2 = (istate == 0 ? r : 1); COLORIZE(r2); glPushMatrix(); glTranslatef (-0.5, 0.5, 0); glRotatef (-r2 * 90, 0, 1, 0); glTranslatef (0.5, -0.5, 0); polys += draw_face (mi); glPopMatrix(); } if (state >= 1) /* Back */ { GLfloat r2 = (istate == 1 ? r : 1); COLORIZE(r2); glPushMatrix(); glTranslatef (-0.5, 0.5, 0); glRotatef ( 90, 0, 1, 0); glRotatef (-90, 0, 0, 1); glRotatef (-r2 * 90, 0, 1, 0); glTranslatef (0.5, -0.5, 0); polys += draw_face (mi); glPopMatrix(); } if (state >= 2) /* Right */ { GLfloat r2 = (istate == 2 ? r : 1); COLORIZE(r2); glPushMatrix(); glTranslatef (0.5, 0.5, 0); glRotatef ( 90, 0, 1, 0); glRotatef (-90, 0, 0, 1); glRotatef (-90, 0, 1, 0); glRotatef (-r2 * 90, 0, 1, 0); glTranslatef (-0.5, -0.5, 0); polys += draw_face (mi); glPopMatrix(); } if (state >= 3) /* Front */ { GLfloat r2 = (istate == 3 ? r : 1); COLORIZE(r2); glPushMatrix(); glTranslatef (0.5, 0.5, 0); glRotatef ( 90, 0, 1, 0); glRotatef (-90, 0, 0, 1); glRotatef (-180, 0, 1, 0); glTranslatef (-1, 0, 0); glRotatef (-r2 * 90, 0, 1, 0); glTranslatef (0.5, -0.5, 0); polys += draw_face (mi); glPopMatrix(); } if (state >= 4) /* Top */ { GLfloat r2 = (istate == 4 ? r : 1); COLORIZE(r2); glPushMatrix(); glTranslatef (0, 0, 1); glRotatef (-90, 0, 0, 1); glTranslatef (0.5, 0.5, 0); glRotatef (-90, 0, 1, 0); glRotatef (r2 * 90, 0, 1, 0); glTranslatef (-0.5, -0.5, 0); polys += draw_face (mi); glPopMatrix(); } return polys; } static int draw_cubes (ModeInfo *mi) { cube_configuration *bp = &bps[MI_SCREEN(mi)]; int polys = 0; GLfloat z = bp->state / 6; int i; GLfloat c[4]; int c0 = bp->ccolor; GLfloat alpha = opacity; glPushMatrix(); glTranslatef (0, 0, -1.5 - z); glTranslatef (0, 0, -bp->length); for (i = bp->length-1; i >= 0; i--) { int c1 = c0 - i - 1; if (c1 < 0) c1 += bp->ncolors; c[0] = bp->colors[c1].red / 65536.0; c[1] = bp->colors[c1].green / 65536.0; c[2] = bp->colors[c1].blue / 65536.0; c[3] = alpha; glTranslatef (0, 0, 1); polys += draw_cube_1 (mi, 5, c, i == bp->length - 1); } c[0] = bp->colors[c0].red / 65536.0; c[1] = bp->colors[c0].green / 65536.0; c[2] = bp->colors[c0].blue / 65536.0; c[3] = alpha; glTranslatef (0, 0, 1); polys += draw_cube_1 (mi, bp->state, c, bp->length == 0); glPopMatrix(); return polys; } /* Window management, etc */ ENTRYPOINT void reshape_cube (ModeInfo *mi, int width, int height) { GLfloat h = (GLfloat) height / (GLfloat) width; glViewport (0, 0, (GLint) width, (GLint) height); glMatrixMode(GL_PROJECTION); glLoadIdentity(); gluPerspective (30.0, 1/h, 1.0, 100.0); glMatrixMode(GL_MODELVIEW); glLoadIdentity(); gluLookAt( 0.0, 0.0, 30.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0); # ifdef HAVE_MOBILE /* Keep it the same relative size when rotated. */ { int o = (int) current_device_rotation(); if (o != 0 && o != 180 && o != -180) glScalef (1/h, 1/h, 1/h); } # endif glClear(GL_COLOR_BUFFER_BIT); } ENTRYPOINT Bool cube_handle_event (ModeInfo *mi, XEvent *event) { cube_configuration *bp = &bps[MI_SCREEN(mi)]; if (gltrackball_event_handler (event, bp->trackball, MI_WIDTH (mi), MI_HEIGHT (mi), &bp->button_down_p)) return True; else if (event->xany.type == KeyPress) { KeySym keysym; char c = 0; XLookupString (&event->xkey, &c, 1, &keysym, 0); if (c == ' ' || c == '\t') { bp->ncolors = 32; make_smooth_colormap (0, 0, 0, bp->colors, &bp->ncolors, False, 0, False); return True; } } return False; } ENTRYPOINT void init_cube (ModeInfo *mi) { cube_configuration *bp; int wire = MI_IS_WIREFRAME(mi); if (!bps) { bps = (cube_configuration *) calloc (MI_NUM_SCREENS(mi), sizeof (cube_configuration)); if (!bps) { fprintf(stderr, "%s: out of memory\n", progname); exit(1); } } bp = &bps[MI_SCREEN(mi)]; bp->glx_context = init_GL(mi); reshape_cube (mi, MI_WIDTH(mi), MI_HEIGHT(mi)); if (!wire) { glDisable (GL_LIGHTING); glEnable(GL_DEPTH_TEST); glShadeModel (GL_SMOOTH); glEnable (GL_NORMALIZE); glDisable (GL_CULL_FACE); glEnable (GL_BLEND); glDisable (GL_DEPTH_TEST); glBlendFunc (GL_SRC_ALPHA, GL_ONE); } { double wander_speed = 0.005; bp->rot = make_rotator (0, 0, 0, 0, do_wander ? wander_speed : 0, False); bp->trackball = gltrackball_init (True); } if (thickness > 0.5) thickness = 0.5; if (thickness < 0.001) thickness = 0.001; bp->ncolors = 32; bp->colors = (XColor *) calloc(bp->ncolors, sizeof(XColor)); make_smooth_colormap (0, 0, 0, bp->colors, &bp->ncolors, False, 0, False); bp->state = -1; } ENTRYPOINT void draw_cube (ModeInfo *mi) { cube_configuration *bp = &bps[MI_SCREEN(mi)]; Display *dpy = MI_DISPLAY(mi); Window window = MI_WINDOW(mi); if (!bp->glx_context) return; glXMakeCurrent(MI_DISPLAY(mi), MI_WINDOW(mi), *(bp->glx_context)); glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glPushMatrix (); { double x, y, z; get_position (bp->rot, &x, &y, &z, !bp->button_down_p); glTranslatef((x - 0.5) * 4, (y - 0.5) * 4, (z - 0.5) * 2); gltrackball_rotate (bp->trackball); } mi->polygon_count = 0; glScalef (6, 6, 6); glRotatef (-45, 1, 0, 0); glRotatef (20, 0, 0, 1); glRotatef (bp->r, 0, 0, 1); mi->polygon_count = draw_cubes (mi); glPopMatrix (); if (!bp->button_down_p) { int max = 6; bp->state += speed * 0.015; bp->r += speed * 0.05; while (bp->r > 360) bp->r -= 360; while (bp->state > max) { bp->state -= max; bp->length++; bp->ccolor++; if (bp->ccolor > bp->ncolors) bp->ccolor = 0; } if (bp->length > 20) bp->length = 20; } if (mi->fps_p) do_fps (mi); glFinish(); glXSwapBuffers(dpy, window); } XSCREENSAVER_MODULE_2 ("CubeStack", cubestack, cube) #endif /* USE_GL */ xscreensaver-5.36/hacks/glx/splodesic.c000664 000767 000024 00000036026 12731727667 020205 0ustar00jwzstaff000000 000000 /* splodesic, Copyright (c) 2016 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. */ #define DEFAULTS "*delay: 30000 \n" \ "*showFPS: False \n" \ "*wireframe: False \n" \ "*suppressRotationAnimation: True\n" \ # define refresh_splodesic 0 #undef countof #define countof(x) (sizeof((x))/sizeof((*x))) #include "xlockmore.h" #include "colors.h" #include "normals.h" #include "rotator.h" #include "gltrackball.h" #include #ifdef USE_GL /* whole file */ #define DEF_SPIN "True" #define DEF_WANDER "True" #define DEF_SPEED "1.0" #define DEF_DEPTH "4" #define BELLRAND(n) ((frand((n)) + frand((n)) + frand((n))) / 3) typedef struct { double a, o; } LL; /* latitude + longitude */ typedef struct triangle triangle; struct triangle { XYZ p[3]; triangle *next; triangle *neighbors[3]; GLfloat altitude; GLfloat velocity; GLfloat thrust; int thrust_duration; int refcount; }; typedef struct { GLXContext *glx_context; rotator *rot; trackball_state *trackball; Bool button_down_p; int count; triangle *triangles; int ncolors; XColor *colors; int ccolor; } splodesic_configuration; static splodesic_configuration *bps = NULL; static Bool do_spin; static GLfloat speed; static int depth_arg; static Bool do_wander; static XrmOptionDescRec opts[] = { { "-spin", ".spin", XrmoptionNoArg, "True" }, { "+spin", ".spin", XrmoptionNoArg, "False" }, { "-speed", ".speed", XrmoptionSepArg, 0 }, { "-depth", ".depth", XrmoptionSepArg, 0 }, { "-wander", ".wander", XrmoptionNoArg, "True" }, { "+wander", ".wander", XrmoptionNoArg, "False" } }; static argtype vars[] = { {&do_spin, "spin", "Spin", DEF_SPIN, t_Bool}, {&do_wander, "wander", "Wander", DEF_WANDER, t_Bool}, {&speed, "speed", "Speed", DEF_SPEED, t_Float}, {&depth_arg, "depth", "Depth", DEF_DEPTH, t_Int}, }; ENTRYPOINT ModeSpecOpt splodesic_opts = {countof(opts), opts, countof(vars), vars, NULL}; /* Creates a triangle specified by 3 polar endpoints. */ static void make_triangle1 (ModeInfo *mi, LL v1, LL v2, LL v3) { splodesic_configuration *bp = &bps[MI_SCREEN(mi)]; triangle *t = (triangle *) calloc (1, sizeof(*t)); t->p[0].x = cos (v1.a) * cos (v1.o); t->p[0].y = cos (v1.a) * sin (v1.o); t->p[0].z = sin (v1.a); t->p[1].x = cos (v2.a) * cos (v2.o); t->p[1].y = cos (v2.a) * sin (v2.o); t->p[1].z = sin (v2.a); t->p[2].x = cos (v3.a) * cos (v3.o); t->p[2].y = cos (v3.a) * sin (v3.o); t->p[2].z = sin (v3.a); t->next = bp->triangles; bp->triangles = t; bp->count++; } /* Computes the midpoint of a line between two polar coords. */ static void midpoint2 (LL v1, LL v2, LL *vm_ret, XYZ *p1_ret, XYZ *p2_ret, XYZ *pm_ret) { XYZ p1, p2, pm; LL vm; GLfloat hyp; p1.x = cos (v1.a) * cos (v1.o); p1.y = cos (v1.a) * sin (v1.o); p1.z = sin (v1.a); p2.x = cos (v2.a) * cos (v2.o); p2.y = cos (v2.a) * sin (v2.o); p2.z = sin (v2.a); pm.x = (p1.x + p2.x) / 2; pm.y = (p1.y + p2.y) / 2; pm.z = (p1.z + p2.z) / 2; vm.o = atan2 (pm.y, pm.x); hyp = sqrt (pm.x * pm.x + pm.y * pm.y); vm.a = atan2 (pm.z, hyp); *p1_ret = p1; *p2_ret = p2; *pm_ret = pm; *vm_ret = vm; } /* Creates triangular geodesic facets to the given depth. */ static void make_triangle (ModeInfo *mi, LL v1, LL v2, LL v3, int depth) { if (depth <= 0) make_triangle1 (mi, v1, v2, v3); else { LL v12, v23, v13; XYZ p1, p2, p3, p12, p23, p13; midpoint2 (v1, v2, &v12, &p1, &p2, &p12); midpoint2 (v2, v3, &v23, &p2, &p3, &p23); midpoint2 (v1, v3, &v13, &p1, &p3, &p13); depth--; make_triangle (mi, v1, v12, v13, depth); make_triangle (mi, v12, v2, v23, depth); make_triangle (mi, v13, v23, v3, depth); make_triangle (mi, v12, v23, v13, depth); } } /* Creates triangles of a geodesic to the given depth (frequency). */ static void make_geodesic (ModeInfo *mi) { int depth = depth_arg; GLfloat th0 = atan (0.5); /* lat division: 26.57 deg */ GLfloat s = M_PI / 5; /* lon division: 72 deg */ int i; for (i = 0; i < 10; i++) { GLfloat th1 = s * i; GLfloat th2 = s * (i+1); GLfloat th3 = s * (i+2); LL v1, v2, v3, vc; v1.a = th0; v1.o = th1; v2.a = th0; v2.o = th3; v3.a = -th0; v3.o = th2; vc.a = M_PI/2; vc.o = th2; if (i & 1) /* north */ { make_triangle (mi, v1, v2, vc, depth); make_triangle (mi, v2, v1, v3, depth); } else /* south */ { v1.a = -v1.a; v2.a = -v2.a; v3.a = -v3.a; vc.a = -vc.a; make_triangle (mi, v2, v1, vc, depth); make_triangle (mi, v1, v2, v3, depth); } } } /* Add t1 to the neighbor list of t0. */ static void link_neighbor (int i, int j, triangle *t0, triangle *t1) { int k; if (t0 == t1) return; for (k = 0; k < countof(t0->neighbors); k++) { if (t0->neighbors[k] == t1 || t0->neighbors[k] == 0) { t0->neighbors[k] = t1; return; } } fprintf (stderr, "%d %d: too many neighbors\n", i, j); abort(); } static int feq (GLfloat a, GLfloat b) /* Oh for fuck's sake */ { const GLfloat e = 0.00001; GLfloat d = a - b; return (d > -e && d < e); } /* Link each triangle to its three neighbors. */ static void link_neighbors (ModeInfo *mi) { splodesic_configuration *bp = &bps[MI_SCREEN(mi)]; triangle *t0 = bp->triangles; int i; /* Triangles are neighbors if they share an edge (exactly 2 points). (There must be a faster than N! way to do this...) */ for (i = 0, t0 = bp->triangles; t0; t0 = t0->next, i++) { triangle *t1; int j; for (j = i+1, t1 = t0->next; t1; t1 = t1->next, j++) { int count = 0; int ii, jj; for (ii = 0; ii < 3; ii++) for (jj = 0; jj < 3; jj++) if (feq (t0->p[ii].x, t1->p[jj].x) && feq (t0->p[ii].y, t1->p[jj].y) && feq (t0->p[ii].z, t1->p[jj].z)) count++; if (count >= 3) { fprintf (stderr, "%d %d: too many matches: %d\n", i, j, count); abort(); } if (count == 2) { link_neighbor (i, j, t0, t1); link_neighbor (j, i, t1, t0); } } if (! (t0->neighbors[0] && t0->neighbors[1] && t0->neighbors[2])) { fprintf (stderr, "%d: missing neighbors\n", i); abort(); } t0->altitude = 60; /* Fall in from space */ } } /* Add thrust to the triangle, and propagate some of that to its neighbors. */ static void add_thrust (triangle *t, GLfloat thrust) { GLfloat dampen = 0; if (t->refcount) return; t->refcount++; t->velocity += thrust; /* Eyeballed this to look roughly the same at various depths. Eh. */ switch (depth_arg) { case 0: dampen = 0.5; break; case 1: dampen = 0.7; break; case 2: dampen = 0.9; break; case 3: dampen = 0.98; break; case 4: dampen = 0.985; break; default: dampen = 0.993; break; } thrust *= dampen; if (thrust > 0.1) { add_thrust (t->neighbors[0], thrust); add_thrust (t->neighbors[1], thrust); add_thrust (t->neighbors[2], thrust); } } static void tick_triangles (ModeInfo *mi) { splodesic_configuration *bp = &bps[MI_SCREEN(mi)]; GLfloat gravity = 0.1; triangle *t; int i; /* Compute new velocities. */ for (i = 0, t = bp->triangles; t; t = t->next, i++) { if (t->thrust > 0) { add_thrust (t, t->thrust); t->thrust_duration--; if (t->thrust_duration <= 0) { t->thrust_duration = 0; t->thrust = 0; } } } /* Apply new velocities. */ for (i = 0, t = bp->triangles; t; t = t->next, i++) { t->altitude += t->velocity; t->velocity -= gravity; if (t->altitude < 0) { t->velocity = 0; t->altitude = 0; } t->refcount = 0; /* Clear for next time */ } /* Add eruptions. */ if (frand(1 / speed) < 0.2) { int n = random() % bp->count; for (i = 0, t = bp->triangles; t; t = t->next, i++) if (i == n) break; t->thrust += gravity * 1.5; t->thrust_duration = 1 + BELLRAND(16); } bp->ccolor++; if (bp->ccolor >= bp->ncolors) bp->ccolor = 0; } static void draw_triangles (ModeInfo *mi) { splodesic_configuration *bp = &bps[MI_SCREEN(mi)]; int wire = MI_IS_WIREFRAME(mi); triangle *t; GLfloat c[4]; int c0 = bp->ccolor; int c1 = (c0 + bp->ncolors / 2) % bp->ncolors; c[0] = bp->colors[c0].red / 65536.0; c[1] = bp->colors[c0].green / 65536.0; c[2] = bp->colors[c0].blue / 65536.0; c[3] = 1; if (wire) glColor4fv (c); else { glMaterialfv (GL_FRONT, GL_AMBIENT_AND_DIFFUSE, c); c[0] = bp->colors[c1].red / 65536.0; c[1] = bp->colors[c1].green / 65536.0; c[2] = bp->colors[c1].blue / 65536.0; c[3] = 1; glMaterialfv (GL_BACK, GL_AMBIENT_AND_DIFFUSE, c); } glFrontFace (GL_CCW); for (t = bp->triangles; t; t = t->next) { GLfloat a = t->altitude * 0.25; XYZ c; glPushMatrix(); c.x = t->p[0].x + t->p[1].x + t->p[2].x; c.y = t->p[0].y + t->p[1].y + t->p[2].y; c.z = t->p[0].z + t->p[1].z + t->p[2].z; if (a > 0) glTranslatef (a * c.x / 3, a * c.y / 3, a * c.z / 3); glBegin (wire ? GL_LINE_LOOP : GL_TRIANGLES); glNormal3f (c.x, c.y, c.z); glVertex3f (t->p[0].x, t->p[0].y, t->p[0].z); glVertex3f (t->p[1].x, t->p[1].y, t->p[1].z); glVertex3f (t->p[2].x, t->p[2].y, t->p[2].z); glEnd(); mi->polygon_count++; glPopMatrix(); } } /* Window management, etc */ ENTRYPOINT void reshape_splodesic (ModeInfo *mi, int width, int height) { GLfloat h = (GLfloat) height / (GLfloat) width; glViewport (0, 0, (GLint) width, (GLint) height); glMatrixMode(GL_PROJECTION); glLoadIdentity(); gluPerspective (30.0, 1/h, 1.0, 100.0); glMatrixMode(GL_MODELVIEW); glLoadIdentity(); gluLookAt( 0.0, 0.0, 30.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0); # ifdef HAVE_MOBILE /* Keep it the same relative size when rotated. */ { int o = (int) current_device_rotation(); if (o != 0 && o != 180 && o != -180) glScalef (1/h, 1/h, 1/h); } # endif glClear(GL_COLOR_BUFFER_BIT); } ENTRYPOINT Bool splodesic_handle_event (ModeInfo *mi, XEvent *event) { splodesic_configuration *bp = &bps[MI_SCREEN(mi)]; if (gltrackball_event_handler (event, bp->trackball, MI_WIDTH (mi), MI_HEIGHT (mi), &bp->button_down_p)) return True; else if (event->xany.type == KeyPress) { KeySym keysym; char c = 0; XLookupString (&event->xkey, &c, 1, &keysym, 0); if (c == ' ' || c == '\t') { bp->ncolors = 1024; make_smooth_colormap (0, 0, 0, bp->colors, &bp->ncolors, False, 0, False); return True; } } return False; } ENTRYPOINT void init_splodesic (ModeInfo *mi) { splodesic_configuration *bp; int wire = MI_IS_WIREFRAME(mi); if (!bps) { bps = (splodesic_configuration *) calloc (MI_NUM_SCREENS(mi), sizeof (splodesic_configuration)); if (!bps) { fprintf(stderr, "%s: out of memory\n", progname); exit(1); } } bp = &bps[MI_SCREEN(mi)]; bp->glx_context = init_GL(mi); reshape_splodesic (mi, MI_WIDTH(mi), MI_HEIGHT(mi)); if (!wire) { GLfloat pos[4] = {4.0, 1.4, 1.1, 0.0}; GLfloat amb[4] = {0.0, 0.0, 0.0, 1.0}; GLfloat dif[4] = {1.0, 1.0, 1.0, 1.0}; GLfloat spc[4] = {1.0, 0.2, 0.2, 1.0}; GLfloat cspec[4] = {1, 1, 1, 1}; static const GLfloat shiny = 10; int lightmodel = 1; glEnable(GL_LIGHTING); glEnable(GL_LIGHT0); glEnable(GL_DEPTH_TEST); glEnable(GL_CULL_FACE); glLightfv(GL_LIGHT0, GL_POSITION, pos); glLightfv(GL_LIGHT0, GL_AMBIENT, amb); glLightfv(GL_LIGHT0, GL_DIFFUSE, dif); glLightfv(GL_LIGHT0, GL_SPECULAR, spc); glLightModeliv (GL_LIGHT_MODEL_TWO_SIDE, &lightmodel); glMaterialfv (GL_FRONT_AND_BACK, GL_SPECULAR, cspec); glMateriali (GL_FRONT_AND_BACK, GL_SHININESS, shiny); } { double spin_speed = 0.5; double wander_speed = 0.005; double spin_accel = 1.0; bp->rot = make_rotator (do_spin ? spin_speed : 0, do_spin ? spin_speed : 0, do_spin ? spin_speed : 0, spin_accel, do_wander ? wander_speed : 0, True); bp->trackball = gltrackball_init (True); } bp->ncolors = 1024; bp->colors = (XColor *) calloc(bp->ncolors, sizeof(XColor)); make_smooth_colormap (0, 0, 0, bp->colors, &bp->ncolors, False, 0, False); # ifdef HAVE_MOBILE depth_arg--; # endif if (depth_arg < 0) depth_arg = 0; if (depth_arg > 10) depth_arg = 10; make_geodesic (mi); link_neighbors (mi); } ENTRYPOINT void draw_splodesic (ModeInfo *mi) { splodesic_configuration *bp = &bps[MI_SCREEN(mi)]; Display *dpy = MI_DISPLAY(mi); Window window = MI_WINDOW(mi); if (!bp->glx_context) return; glXMakeCurrent(MI_DISPLAY(mi), MI_WINDOW(mi), *(bp->glx_context)); glShadeModel(GL_SMOOTH); glEnable(GL_DEPTH_TEST); glEnable(GL_NORMALIZE); glDisable(GL_CULL_FACE); glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glPushMatrix (); { double x, y, z; get_position (bp->rot, &x, &y, &z, !bp->button_down_p); glTranslatef((x - 0.5) * 6, (y - 0.5) * 6, (z - 0.5) * 8); gltrackball_rotate (bp->trackball); get_rotation (bp->rot, &x, &y, &z, !bp->button_down_p); glRotatef (x * 360, 1.0, 0.0, 0.0); glRotatef (y * 360, 0.0, 1.0, 0.0); glRotatef (z * 360, 0.0, 0.0, 1.0); } mi->polygon_count = 0; # ifdef HAVE_MOBILE glScalef (3, 3, 3); #else glScalef (4, 4, 4); # endif if (! bp->button_down_p) tick_triangles (mi); draw_triangles (mi); glPopMatrix (); if (mi->fps_p) do_fps (mi); glFinish(); glXSwapBuffers(dpy, window); } ENTRYPOINT void release_splodesic (ModeInfo *mi) { splodesic_configuration *bp = &bps[MI_SCREEN(mi)]; while (bp->triangles) { triangle *t = bp->triangles->next; free (bp->triangles); bp->triangles = t; } } XSCREENSAVER_MODULE ("Splodesic", splodesic) #endif /* USE_GL */ xscreensaver-5.36/hacks/glx/hexstrut.c000664 000767 000024 00000030467 12776010257 020076 0ustar00jwzstaff000000 000000 /* hexstrut, Copyright (c) 2016 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. */ #define DEFAULTS "*delay: 30000 \n" \ "*showFPS: False \n" \ "*wireframe: False \n" \ "*count: 20 \n" \ "*suppressRotationAnimation: True\n" \ # define refresh_hexstrut 0 #undef countof #define countof(x) (sizeof((x))/sizeof((*x))) #include "xlockmore.h" #include "colors.h" #include "normals.h" #include "rotator.h" #include "gltrackball.h" #include #ifdef USE_GL /* whole file */ #define DEF_SPIN "True" #define DEF_WANDER "True" #define DEF_SPEED "1.0" #define DEF_THICKNESS "0.2" #define BELLRAND(n) ((frand((n)) + frand((n)) + frand((n))) / 3) typedef struct { double a, o; } LL; /* latitude + longitude */ typedef struct triangle triangle; struct triangle { XYZ p[3]; triangle *next; triangle *neighbors[6]; GLfloat orot, rot; int delay, odelay; int ccolor; }; typedef struct { GLXContext *glx_context; rotator *rot; trackball_state *trackball; Bool button_down_p; int count; triangle *triangles; int ncolors; XColor *colors; } hexstrut_configuration; static hexstrut_configuration *bps = NULL; static Bool do_spin; static GLfloat speed; static Bool do_wander; static GLfloat thickness; static XrmOptionDescRec opts[] = { { "-spin", ".spin", XrmoptionNoArg, "True" }, { "+spin", ".spin", XrmoptionNoArg, "False" }, { "-speed", ".speed", XrmoptionSepArg, 0 }, { "-wander", ".wander", XrmoptionNoArg, "True" }, { "+wander", ".wander", XrmoptionNoArg, "False" }, { "-thickness", ".thickness", XrmoptionSepArg, 0 }, }; static argtype vars[] = { {&do_spin, "spin", "Spin", DEF_SPIN, t_Bool}, {&do_wander, "wander", "Wander", DEF_WANDER, t_Bool}, {&speed, "speed", "Speed", DEF_SPEED, t_Float}, {&thickness, "thickness", "Thickness", DEF_THICKNESS, t_Float}, }; ENTRYPOINT ModeSpecOpt hexstrut_opts = {countof(opts), opts, countof(vars), vars, NULL}; /* Add t1 to the neighbor list of t0. */ static void link_neighbor (triangle *t0, triangle *t1) { int k; if (t0 == t1) return; for (k = 0; k < countof(t0->neighbors); k++) { if (t0->neighbors[k] == t1 || t0->neighbors[k] == 0) { t0->neighbors[k] = t1; return; } } fprintf (stderr, "too many neighbors\n"); abort(); } static void make_plane (ModeInfo *mi) { hexstrut_configuration *bp = &bps[MI_SCREEN(mi)]; int n = MI_COUNT(mi) * 2; GLfloat size = 2.0 / n; int x, y; GLfloat w = size; GLfloat h = size * sqrt(3) / 2; triangle **grid = (triangle **) calloc (n * n, sizeof(*grid)); for (y = 0; y < n; y++) for (x = 0; x < n; x++) { triangle *t; t = (triangle *) calloc (1, sizeof(*t)); t->p[0].x = (x - n/2) * w; t->p[0].y = (y - n/2) * h; if (y & 1) t->p[0].x += w / 2; t->p[1].x = t->p[0].x - w/2; t->p[2].x = t->p[0].x + w/2; t->p[1].y = t->p[0].y + h; t->p[2].y = t->p[0].y + h; if (x > 0) { triangle *t2 = grid[y * n + (x-1)]; link_neighbor (t, t2); link_neighbor (t2, t); } if (y > 0) { triangle *t2 = grid[(y-1) * n + x]; link_neighbor (t, t2); link_neighbor (t2, t); if (x < n-1) { t2 = grid[(y-1) * n + (x+1)]; link_neighbor (t, t2); link_neighbor (t2, t); } } t->next = bp->triangles; bp->triangles = t; grid[y * n + x] = t; bp->count++; } free (grid); } static void tick_triangles (ModeInfo *mi) { hexstrut_configuration *bp = &bps[MI_SCREEN(mi)]; triangle *t; GLfloat step = 0.01 + (0.04 * speed); if (! (random() % 80)) { int n = random() % bp->count; int i; for (i = 0, t = bp->triangles; t && i < n; t = t->next, i++) ; if (! t->rot) { t->rot += step * ((random() & 1) ? 1 : -1); t->odelay = t->delay = 4; } } for (t = bp->triangles; t; t = t->next) { /* If this triangle is rotating, continue until done. */ if (t->rot) { t->rot += step * (t->rot > 0 ? 1 : -1); t->ccolor++; if (t->ccolor > bp->ncolors) t->ccolor = 0; if (t->rot > 1 || t->rot < -1) { t->orot += (t->rot > 1 ? 1 : -1); t->rot = 0; } } /* If this triangle's propagation delay hasn't hit zero, decrement it. When it does, start its neighbors rotating. */ if (t->delay) { int i; t->delay--; if (t->delay == 0) for (i = 0; i < countof(t->neighbors); i++) { if (t->neighbors[i] && t->neighbors[i]->rot == 0) { t->neighbors[i]->rot += step * (t->rot > 0 ? 1 : -1); t->neighbors[i]->delay = t->neighbors[i]->odelay = t->odelay; } } } } } static void draw_triangles (ModeInfo *mi) { hexstrut_configuration *bp = &bps[MI_SCREEN(mi)]; int wire = MI_IS_WIREFRAME(mi); triangle *t; GLfloat length = sqrt(3) / 3; GLfloat t2 = length * thickness / 2; GLfloat scale; { triangle *t = bp->triangles; GLfloat X = t->p[0].x - t->p[1].x; GLfloat Y = t->p[0].y - t->p[1].y; GLfloat Z = t->p[0].z - t->p[1].z; scale = sqrt(X*X + Y*Y + Z*Z); } glFrontFace (GL_CCW); glBegin (wire ? GL_LINES : GL_QUADS); glNormal3f (0, 0, 1); for (t = bp->triangles; t; t = t->next) { int i; XYZ c; GLfloat color[4]; GLfloat angle = (M_PI * 2 / 3) * t->rot; GLfloat cr = cos(angle), sr = sin(angle); c.x = (t->p[0].x + t->p[1].x + t->p[2].x) / 3; c.y = (t->p[0].y + t->p[1].y + t->p[2].y) / 3; c.z = (t->p[0].z + t->p[1].z + t->p[2].z) / 3; /* Actually we don't need normals at all, since no lighting. do_normal (t->p[0].x, t->p[0].y, t->p[0].z, t->p[1].x, t->p[1].y, t->p[1].z, t->p[2].x, t->p[2].y, t->p[2].z); */ color[0] = bp->colors[t->ccolor].red / 65535.0; color[1] = bp->colors[t->ccolor].green / 65535.0; color[2] = bp->colors[t->ccolor].blue / 65535.0; color[3] = 1; /* Brighter */ color[0] = color[0] * 0.75 + 0.25; color[1] = color[1] * 0.75 + 0.25; color[2] = color[2] * 0.75 + 0.25; glColor4fv (color); glMaterialfv (GL_FRONT, GL_AMBIENT_AND_DIFFUSE, color); for (i = 0; i < 3; i++) { /* Orient to direction of corner. */ GLfloat x = t->p[i].x - c.x; GLfloat y = t->p[i].y - c.y; GLfloat z = t->p[i].z - c.z; GLfloat smc = sr * y - cr * x; GLfloat spc = cr * y + sr * x; GLfloat st2 = t2 * scale / sqrt(x*x + y*y); GLfloat slength = length * scale / sqrt(x*x + y*y + z*z); GLfloat xt2 = spc * st2; GLfloat yt2 = smc * st2; GLfloat xlength = c.x - slength * smc; GLfloat ylength = c.y + slength * spc; GLfloat zlength = c.z + slength * z; if (! wire) glVertex3f (c.x - xt2, c.y - yt2, c.z); glVertex3f (c.x + xt2, c.y + yt2, c.z); if (wire) glVertex3f (xlength + xt2, ylength + yt2, zlength); if (! wire) glVertex3f (xlength + xt2, ylength + yt2, zlength); glVertex3f (xlength - xt2, ylength - yt2, zlength); if (wire) glVertex3f (c.x - xt2, c.y - yt2, c.z); mi->polygon_count++; } } glEnd(); } /* Window management, etc */ ENTRYPOINT void reshape_hexstrut (ModeInfo *mi, int width, int height) { GLfloat h = (GLfloat) height / (GLfloat) width; glViewport (0, 0, (GLint) width, (GLint) height); glMatrixMode(GL_PROJECTION); glLoadIdentity(); gluPerspective (30.0, 1/h, 1.0, 100.0); glMatrixMode(GL_MODELVIEW); glLoadIdentity(); gluLookAt( 0.0, 0.0, 30.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0); # ifdef HAVE_MOBILE /* Keep it the same relative size when rotated. */ { int o = (int) current_device_rotation(); if (o != 0 && o != 180 && o != -180) glScalef (1/h, 1/h, 1/h); } # endif glClear(GL_COLOR_BUFFER_BIT); } ENTRYPOINT Bool hexstrut_handle_event (ModeInfo *mi, XEvent *event) { hexstrut_configuration *bp = &bps[MI_SCREEN(mi)]; if (gltrackball_event_handler (event, bp->trackball, MI_WIDTH (mi), MI_HEIGHT (mi), &bp->button_down_p)) return True; else if (event->xany.type == KeyPress) { KeySym keysym; char c = 0; XLookupString (&event->xkey, &c, 1, &keysym, 0); if (c == ' ' || c == '\t') { bp->ncolors = 64; make_smooth_colormap (0, 0, 0, bp->colors, &bp->ncolors, False, 0, False); return True; } } return False; } ENTRYPOINT void init_hexstrut (ModeInfo *mi) { hexstrut_configuration *bp; if (!bps) { bps = (hexstrut_configuration *) calloc (MI_NUM_SCREENS(mi), sizeof (hexstrut_configuration)); if (!bps) { fprintf(stderr, "%s: out of memory\n", progname); exit(1); } } bp = &bps[MI_SCREEN(mi)]; bp->glx_context = init_GL(mi); reshape_hexstrut (mi, MI_WIDTH(mi), MI_HEIGHT(mi)); { double spin_speed = 0.002; double wander_speed = 0.003; double spin_accel = 1.0; bp->rot = make_rotator (do_spin ? spin_speed : 0, do_spin ? spin_speed : 0, do_spin ? spin_speed : 0, spin_accel, do_wander ? wander_speed : 0, False); bp->trackball = gltrackball_init (True); } /* Let's tilt the scene a little. */ gltrackball_start (bp->trackball, 500, 500, 1000, 1000); gltrackball_track (bp->trackball, 350 + (random() % 300), 350 + (random() % 300), 1000, 1000); if (thickness < 0.05) thickness = 0.05; if (thickness < 0.05) MI_IS_WIREFRAME(mi) = True; if (thickness > 1.7) thickness = 1.7; if (speed > 2) speed = 2; bp->ncolors = 64; bp->colors = (XColor *) calloc(bp->ncolors, sizeof(XColor)); make_smooth_colormap (0, 0, 0, bp->colors, &bp->ncolors, False, 0, False); make_plane (mi); } ENTRYPOINT void draw_hexstrut (ModeInfo *mi) { hexstrut_configuration *bp = &bps[MI_SCREEN(mi)]; Display *dpy = MI_DISPLAY(mi); Window window = MI_WINDOW(mi); if (!bp->glx_context) return; glXMakeCurrent(MI_DISPLAY(mi), MI_WINDOW(mi), *(bp->glx_context)); glShadeModel(GL_SMOOTH); glDisable(GL_DEPTH_TEST); glEnable(GL_NORMALIZE); glDisable(GL_CULL_FACE); glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glPushMatrix (); { double x, y, z; get_position (bp->rot, &x, &y, &z, !bp->button_down_p); glTranslatef((x - 0.5) * 6, (y - 0.5) * 6, (z - 0.5) * 12); gltrackball_rotate (bp->trackball); get_rotation (bp->rot, &x, &y, &z, !bp->button_down_p); glRotatef (z * 360, 0.0, 0.0, 1.0); } mi->polygon_count = 0; glScalef (30, 30, 30); if (! bp->button_down_p) tick_triangles (mi); draw_triangles (mi); glPopMatrix (); if (mi->fps_p) do_fps (mi); glFinish(); glXSwapBuffers(dpy, window); } ENTRYPOINT void release_hexstrut (ModeInfo *mi) { hexstrut_configuration *bp = &bps[MI_SCREEN(mi)]; while (bp->triangles) { triangle *t = bp->triangles->next; free (bp->triangles); bp->triangles = t; } } XSCREENSAVER_MODULE ("Hexstrut", hexstrut) #endif /* USE_GL */ xscreensaver-5.36/hacks/glx/atlantis.h000644 000767 000024 00000010745 12710074263 020022 0ustar00jwzstaff000000 000000 /* atlantis --- Shows moving 3D sea animals */ /* Copyright (c) E. Lassauge, 1998. */ /* * Permission to use, copy, modify, and distribute this software and its * documentation for any purpose and without fee is hereby granted, * provided that the above copyright notice appear in all copies and that * both that copyright notice and this permission notice appear in * supporting documentation. * * This file is provided AS IS with no warranties of any kind. The author * shall have no liability with respect to the infringement of copyrights, * trade secrets or any patents by this file or any part thereof. In no * event will the author be liable for any lost revenue or profits or * other special, indirect and consequential damages. * * The original code for this mode was written by Mark J. Kilgard * as a demo for openGL programming. * * Porting it to xlock was possible by comparing the original Mesa's morph3d * demo with it's ported version to xlock, so thanks for Marcelo F. Vianna * (look at morph3d.c) for his indirect help. * * Thanks goes also to Brian Paul for making it possible and inexpensive * to use OpenGL at home. * * My e-mail address is lassauge@users.sourceforge.net * * Eric Lassauge (May-13-1998) * */ /** * (c) Copyright 1993, 1994, Silicon Graphics, Inc. * ALL RIGHTS RESERVED * Permission to use, copy, modify, and distribute this software for * any purpose and without fee is hereby granted, provided that the above * copyright notice appear in all copies and that both the copyright notice * and this permission notice appear in supporting documentation, and that * the name of Silicon Graphics, Inc. not be used in advertising * or publicity pertaining to distribution of the software without specific, * written prior permission. * * THE MATERIAL EMBODIED ON THIS SOFTWARE IS PROVIDED TO YOU "AS-IS" * AND WITHOUT WARRANTY OF ANY KIND, EXPRESS, IMPLIED OR OTHERWISE, * INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY OR * FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL SILICON * GRAPHICS, INC. BE LIABLE TO YOU OR ANYONE ELSE FOR ANY DIRECT, * SPECIAL, INCIDENTAL, INDIRECT OR CONSEQUENTIAL DAMAGES OF ANY * KIND, OR ANY DAMAGES WHATSOEVER, INCLUDING WITHOUT LIMITATION, * LOSS OF PROFIT, LOSS OF USE, SAVINGS OR REVENUE, OR THE CLAIMS OF * THIRD PARTIES, WHETHER OR NOT SILICON GRAPHICS, INC. HAS BEEN * ADVISED OF THE POSSIBILITY OF SUCH LOSS, HOWEVER CAUSED AND ON * ANY THEORY OF LIABILITY, ARISING OUT OF OR IN CONNECTION WITH THE * POSSESSION, USE OR PERFORMANCE OF THIS SOFTWARE. * * US Government Users Restricted Rights * Use, duplication, or disclosure by the Government is subject to * restrictions set forth in FAR 52.227.19(c)(2) or subparagraph * (c)(1)(ii) of the Rights in Technical Data and Computer Software * clause at DFARS 252.227-7013 and/or in similar or successor * clauses in the FAR or the DOD or NASA FAR Supplement. * Unpublished-- rights reserved under the copyright laws of the * United States. Contractor/manufacturer is Silicon Graphics, * Inc., 2011 N. Shoreline Blvd., Mountain View, CA 94039-7311. * * OpenGL(TM) is a trademark of Silicon Graphics, Inc. */ #ifdef HAVE_CONFIG_H # include "config.h" #endif /* HAVE_CONFIG_H */ #ifdef STANDALONE # include # include "screenhackI.h" # ifndef HAVE_JWXYZ # include # include # endif #else # include "xlock.h" #endif #ifdef HAVE_ANDROID #include #endif #ifdef HAVE_JWZGLES # include "jwzgles.h" #endif /* HAVE_JWZGLES */ #define RAD 57.295 #define RRAD 0.01745 /* default values */ #define NUM_SHARKS 4 #define SHARKSPEED 100 #define SHARKSIZE 6000 typedef struct _fishRec { float x, y, z, phi, theta, psi, v; float xt, yt, zt; float htail, vtail; float dtheta; int spurt, attack; int sign; } fishRec; typedef struct { GLint WinH, WinW; GLXContext *glx_context; int num_sharks; float sharkspeed, whalespeed; int sharksize; int wire; Bool whaledir; fishRec *sharks; fishRec momWhale; fishRec babyWhale; fishRec dolph; XImage *texture; /* water distortion overlay bits */ } atlantisstruct; extern void FishTransform(fishRec *); extern void WhalePilot(fishRec *, float, Bool); extern void SharkPilot(fishRec *, float); extern void SharkMiss(atlantisstruct *, int); extern void DrawWhale(fishRec *, int); extern void DrawShark(fishRec *, int); extern void DrawDolphin(fishRec *, int); xscreensaver-5.36/hacks/glx/bubble3d.h000644 000767 000024 00000006536 12717747747 017715 0ustar00jwzstaff000000 000000 /* GLBUBBLES (C) 1998 Richard W.M. Jones. */ #ifndef __bubbles3d_h__ #define __bubbles3d_h__ #ifdef HAVE_CONFIG_H # include "config.h" #endif /* HAVE_CONFIG_H */ #ifdef STANDALONE # include # include "xlockmoreI.h" /* from the xscreensaver distribution */ #else /* !STANDALONE */ # include "xlock.h" /* from the xlockmore distribution */ #endif /* !STANDALONE */ #if !defined(HAVE_JWXYZ) && !defined(HAVE_JWZGLES) # include # include #endif #ifdef HAVE_JWZGLES # include "jwzgles.h" #endif /* HAVE_JWZGLES */ /* Static configuration. */ #define GLB_SLOW_GL 0 /* Set this if you have a slow GL * implementation. If you have an accelerated * graphics card, set this to 0. */ #define GLB_VERTICES_EPSILON 0.0005 /* How close are identical vertices? */ /* Configuration structure. */ struct glb_config { int transparent_p; /* Whether to use alpha blending */ int subdivision_depth; /* Controls how many triangles are in * each bubble. 2 and 3 are good values. */ int nr_nudge_axes; /* Number of directions in which each * bubble gets stretched. Values between * 3 and 7 seem to produce good results. */ GLfloat nudge_angle_factor; /* Max. amount of rotation in nudge angles. * Controls the amount of `wobble' we see, * and 0.3 seems to work well. */ GLfloat nudge_factor; /* Max. displacement of any single nudge. * Controls the amount of the wobble. Depends * on NR_NUDGE_AXES, and must not exceed * 1 / NR_NUDGE_AXES. 0.1 is good. */ GLfloat rotation_factor; /* Max. amount by which bubbles rotate. */ int create_bubbles_every; /* How often to create new bubbles. */ int max_bubbles; /* Max. number of bubbles to create. */ double p_bubble_group[4]; /* Probabilities of creating 1, 2, 3, 4 * bubbles in a group. Cumulative. */ GLfloat max_size; /* Max. size. */ GLfloat min_size; /* Min. size of bubbles. */ GLfloat max_speed; /* Max. speed. */ GLfloat min_speed; /* Min. speed of bubbles. */ GLfloat scale_factor; /* Factor by which bubbles scale from bottom * of screen to top. 1.5 - 2.0 are OK. */ GLfloat screen_bottom; /* Bottom of screen. */ GLfloat screen_top; /* Top of screen. */ GLfloat bubble_colour[4]; /* Colour of the bubbles. */ int polygon_count; }; extern struct glb_config glb_config; #define glb_drand() ((double)LRAND() / (double)MAXRAND) /*-- From glb_sphere.c. --*/ typedef struct glb_data glb_data; typedef GLfloat glb_vertex[3]; typedef GLuint glb_triangle[3]; extern glb_data * glb_sphere_init(void); extern glb_vertex *glb_sphere_get_vertices(glb_data *, int *nr_vertices); extern glb_triangle *glb_sphere_get_triangles(glb_data *, int *nr_triangles); extern void glb_sphere_end(glb_data *); /*-- From glb_bubble.c. --*/ extern void *glb_bubble_new(glb_data *d, GLfloat x, GLfloat y, GLfloat z, GLfloat scale, GLfloat y_incr, GLfloat scale_incr); extern void glb_bubble_delete(void *); extern void glb_bubble_step(void *); extern void glb_bubble_draw(glb_data *d, void *); extern GLfloat glb_bubble_get_y(void *); /*-- From glb_draw.c. --*/ extern void *glb_draw_init(void); extern void glb_draw_step(void *); extern void glb_draw_end(void *); #endif /* __bubbles3d_h__ */ xscreensaver-5.36/hacks/glx/buildlwo.h000644 000767 000024 00000001264 12710074263 020020 0ustar00jwzstaff000000 000000 /*- * buildlwo.h: Header file for Lightwave Object Display List Builder * for OpenGL * * by Ed Mackey, 4/19/97 * */ #ifndef __BUILD_LWO_H__ #define __BUILD_LWO_H__ #ifdef HAVE_CONFIG_H # include "config.h" #endif /* HAVE_CONFIG_H */ #ifdef STANDALONE # ifndef HAVE_JWXYZ # include # endif #endif #ifdef HAVE_ANDROID # include #endif #ifdef HAVE_JWZGLES # include "jwzgles.h" #endif /* HAVE_JWZGLES */ struct lwo { int num_pnts; const GLfloat *pnts; const GLfloat *normals; const unsigned short int *pols; const GLfloat *smoothnormals; }; GLuint BuildLWO(int wireframe, const struct lwo *object); #endif /* End of buildlwo.h */ xscreensaver-5.36/hacks/glx/e_textures.h000644 000767 000024 00000313601 12701612217 020364 0ustar00jwzstaff000000 000000 static unsigned char WoodTextureWidth = 199; static unsigned char WoodTextureHeight = 37; static unsigned char WoodTextureData[] = { 84, 30, 12, 84, 26, 12, 108, 42, 28, 100, 38, 28, 108, 42, 28, 108, 46, 28, 100, 38, 28, 108, 46, 28, 108, 42, 28, 108, 42, 20, 108, 42, 28, 108, 38, 20, 108, 42, 20, 108, 42, 28, 116, 42, 28, 108, 42, 20, 108, 46, 28, 100, 34, 12, 108, 42, 20, 108, 42, 20, 108, 42, 20, 108, 38, 20, 100, 38, 20, 100, 38, 20, 108, 42, 20, 108, 42, 20, 108, 38, 20, 100, 38, 20, 108, 38, 20, 100, 38, 20, 108, 42, 20, 108, 42, 20, 108, 42, 28, 108, 42, 20, 108, 42, 20, 100, 38, 20, 100, 38, 20, 100, 38, 20, 108, 38, 20, 116, 50, 28, 108, 42, 28, 108, 42, 20, 100, 38, 20, 108, 42, 20, 108, 42, 20, 108, 46, 28, 108, 42, 20, 108, 42, 20, 108, 42, 20, 100, 38, 20, 108, 38, 20, 100, 38, 20, 108, 38, 20, 100, 38, 20, 100, 38, 20, 108, 38, 20, 100, 38, 20, 108, 38, 20, 100, 42, 20, 108, 42, 20, 108, 42, 28, 108, 42, 20, 100, 38, 20, 108, 42, 20, 100, 38, 20, 100, 34, 12, 100, 38, 20, 108, 38, 20, 100, 38, 20, 108, 42, 20, 108, 42, 20, 108, 42, 20, 100, 38, 20, 108, 38, 20, 100, 38, 20, 100, 34, 12, 100, 38, 20, 108, 38, 20, 100, 38, 20, 108, 42, 20, 100, 38, 20, 100, 34, 12, 100, 34, 12, 100, 38, 20, 108, 38, 20, 100, 38, 20, 108, 38, 20, 108, 42, 20, 100, 38, 20, 108, 42, 20, 108, 42, 28, 108, 46, 20, 108, 38, 20, 108, 42, 20, 108, 46, 28, 108, 46, 28, 108, 42, 20, 108, 42, 20, 108, 42, 20, 100, 38, 20, 108, 42, 20, 100, 38, 20, 108, 38, 20, 100, 38, 20, 108, 38, 20, 108, 42, 20, 108, 46, 28, 116, 50, 28, 116, 54, 36, 116, 54, 36, 116, 54, 28, 108, 46, 28, 108, 42, 20, 108, 42, 28, 108, 42, 20, 108, 42, 20, 108, 46, 28, 116, 50, 28, 116, 50, 28, 116, 50, 28, 116, 46, 28, 108, 42, 28, 116, 50, 36, 116, 50, 36, 100, 38, 20, 108, 42, 28, 108, 38, 20, 100, 38, 20, 108, 38, 20, 108, 42, 28, 108, 46, 28, 116, 46, 28, 108, 42, 28, 108, 42, 28, 108, 42, 20, 108, 46, 28, 116, 50, 28, 116, 50, 28, 116, 50, 28, 116, 50, 28, 108, 42, 28, 108, 42, 20, 100, 38, 20, 116, 50, 28, 108, 46, 28, 108, 42, 20, 108, 42, 20, 108, 46, 28, 116, 46, 28, 108, 46, 28, 108, 46, 28, 108, 46, 20, 108, 46, 28, 116, 46, 28, 108, 46, 28, 116, 50, 28, 108, 46, 28, 108, 46, 28, 108, 42, 20, 116, 46, 28, 108, 46, 28, 108, 42, 20, 108, 42, 28, 108, 46, 28, 116, 50, 28, 116, 50, 28, 116, 50, 36, 124, 54, 36, 116, 54, 36, 116, 54, 28, 116, 50, 28, 116, 50, 28, 108, 46, 28, 116, 46, 28, 108, 46, 28, 116, 50, 28, 116, 46, 28, 116, 50, 28, 116, 50, 28, 116, 50, 28, 116, 50, 28, 108, 46, 28, 108, 46, 20, 124, 50, 36, 116, 54, 28, 124, 54, 28, 116, 54, 28, 116, 54, 28, 116, 54, 28, 124, 54, 36, 124, 58, 36, 124, 50, 36, 116, 46, 28, 116, 46, 28, 116, 42, 28, 116, 50, 36, 124, 66, 44, 108, 58, 36, 84, 30, 12, 100, 42, 20, 116, 54, 36, 140, 82, 68, 148, 86, 68, 148, 86, 68, 156, 90, 76, 148, 86, 68, 156, 86, 76, 156, 86, 68, 148, 86, 68, 156, 86, 68, 156, 86, 68, 156, 86, 68, 156, 86, 68, 156, 90, 68, 156, 86, 68, 156, 90, 68, 164, 94, 76, 164, 98, 84, 164, 102, 84, 164, 102, 84, 164, 98, 76, 156, 94, 68, 164, 94, 76, 156, 94, 76, 164, 98, 84, 164, 98, 76, 164, 98, 76, 156, 94, 76, 164, 98, 76, 164, 98, 76, 164, 102, 84, 164, 102, 84, 172, 106, 84, 172, 106, 84, 164, 98, 76, 164, 94, 68, 164, 94, 68, 164, 98, 76, 172, 106, 84, 164, 98, 76, 164, 98, 76, 164, 94, 68, 164, 94, 76, 164, 98, 76, 164, 98, 76, 164, 98, 76, 164, 102, 84, 172, 102, 84, 172, 106, 84, 172, 106, 84, 172, 106, 84, 172, 106, 76, 164, 98, 76, 164, 98, 76, 164, 98, 76, 164, 98, 76, 164, 94, 68, 164, 98, 76, 164, 98, 76, 164, 102, 76, 164, 94, 76, 156, 94, 68, 172, 102, 84, 172, 106, 84, 172, 102, 84, 164, 98, 76, 164, 102, 76, 172, 102, 84, 172, 106, 84, 172, 106, 84, 172, 106, 84, 172, 102, 84, 164, 102, 76, 164, 98, 76, 164, 98, 76, 164, 98, 76, 164, 98, 76, 164, 98, 76, 172, 102, 76, 164, 98, 76, 164, 94, 76, 156, 94, 68, 164, 98, 76, 164, 102, 76, 164, 98, 76, 164, 98, 76, 164, 94, 76, 156, 94, 68, 164, 94, 76, 164, 102, 76, 172, 106, 84, 164, 98, 76, 164, 98, 76, 164, 98, 76, 164, 98, 76, 164, 98, 76, 164, 98, 76, 164, 98, 76, 164, 102, 76, 172, 102, 84, 172, 106, 84, 172, 110, 84, 180, 110, 92, 172, 110, 84, 172, 110, 84, 180, 114, 92, 188, 122, 100, 188, 122, 100, 188, 122, 100, 188, 118, 92, 180, 110, 92, 172, 106, 84, 172, 106, 84, 172, 106, 84, 180, 114, 92, 188, 118, 100, 188, 118, 100, 180, 118, 100, 188, 122, 108, 188, 126, 108, 188, 118, 100, 196, 130, 108, 204, 134, 116, 188, 126, 108, 196, 122, 108, 180, 118, 100, 180, 110, 92, 180, 114, 100, 180, 118, 100, 188, 118, 100, 188, 122, 108, 188, 118, 100, 188, 118, 100, 180, 118, 100, 188, 118, 100, 180, 118, 100, 180, 118, 100, 180, 118, 100, 180, 114, 92, 180, 114, 92, 172, 110, 92, 172, 106, 84, 180, 114, 92, 172, 106, 92, 172, 102, 84, 172, 106, 84, 172, 110, 92, 180, 110, 84, 172, 110, 92, 172, 106, 84, 172, 102, 84, 172, 102, 84, 172, 106, 84, 172, 106, 84, 172, 106, 84, 172, 106, 84, 172, 106, 84, 172, 106, 84, 172, 106, 84, 172, 102, 84, 164, 102, 84, 164, 102, 76, 172, 106, 84, 172, 110, 92, 180, 110, 92, 172, 110, 84, 172, 114, 92, 180, 114, 92, 180, 110, 92, 172, 110, 92, 172, 106, 92, 172, 106, 84, 172, 106, 84, 164, 102, 84, 180, 114, 100, 180, 114, 92, 180, 118, 100, 180, 118, 100, 180, 114, 92, 172, 110, 92, 172, 106, 84, 172, 106, 84, 180, 110, 92, 180, 114, 92, 180, 114, 92, 172, 110, 92, 172, 110, 84, 172, 110, 92, 180, 114, 92, 180, 118, 100, 196, 126, 100, 196, 122, 108, 196, 126, 108, 196, 130, 116, 196, 134, 116, 204, 142, 124, 164, 106, 84, 100, 42, 20, 84, 26, 4, 132, 78, 68, 188, 122, 108, 188, 122, 108, 188, 126, 116, 196, 134, 116, 188, 122, 108, 188, 126, 108, 188, 126, 108, 188, 122, 108, 196, 126, 108, 196, 130, 108, 188, 126, 108, 188, 122, 100, 196, 126, 108, 196, 126, 108, 188, 126, 108, 196, 130, 108, 196, 130, 108, 196, 134, 116, 196, 130, 108, 196, 130, 108, 188, 126, 108, 196, 126, 108, 188, 126, 108, 196, 130, 108, 188, 126, 108, 188, 126, 108, 196, 126, 108, 188, 126, 108, 196, 130, 108, 196, 130, 108, 196, 134, 116, 204, 142, 116, 204, 134, 116, 196, 130, 108, 196, 130, 108, 188, 126, 108, 196, 126, 100, 196, 134, 108, 196, 130, 108, 188, 126, 100, 188, 122, 100, 188, 126, 108, 196, 126, 100, 188, 126, 108, 196, 126, 100, 188, 126, 100, 196, 130, 108, 204, 134, 108, 196, 134, 116, 196, 134, 108, 196, 130, 108, 196, 126, 108, 196, 130, 108, 196, 130, 108, 196, 130, 108, 188, 126, 108, 196, 126, 108, 196, 134, 108, 196, 130, 108, 196, 130, 108, 188, 122, 100, 196, 130, 108, 196, 130, 108, 196, 134, 108, 196, 130, 108, 188, 126, 100, 196, 130, 108, 196, 134, 108, 204, 134, 116, 204, 138, 116, 204, 138, 116, 204, 134, 116, 196, 130, 108, 196, 130, 108, 196, 134, 108, 204, 134, 116, 196, 134, 116, 196, 134, 108, 196, 130, 108, 196, 130, 108, 204, 134, 116, 204, 138, 116, 204, 138, 116, 196, 130, 108, 196, 130, 108, 188, 122, 100, 180, 118, 92, 188, 118, 100, 196, 130, 108, 196, 130, 108, 188, 126, 100, 188, 122, 100, 188, 122, 100, 204, 134, 108, 196, 134, 116, 204, 134, 116, 196, 134, 108, 196, 130, 108, 204, 134, 108, 204, 138, 116, 204, 138, 116, 212, 142, 124, 204, 142, 116, 204, 134, 116, 204, 138, 116, 204, 138, 116, 204, 138, 116, 204, 134, 108, 188, 126, 108, 196, 130, 108, 196, 126, 100, 188, 122, 100, 196, 130, 108, 204, 138, 116, 212, 146, 124, 204, 142, 116, 204, 138, 116, 212, 146, 124, 212, 142, 124, 204, 138, 124, 204, 138, 124, 204, 138, 124, 204, 138, 116, 212, 142, 124, 204, 138, 124, 196, 130, 116, 204, 134, 116, 204, 138, 116, 204, 138, 124, 204, 138, 116, 204, 138, 124, 204, 134, 116, 204, 138, 124, 212, 142, 124, 204, 138, 116, 196, 134, 116, 196, 130, 108, 196, 134, 116, 204, 138, 116, 204, 142, 124, 212, 142, 124, 204, 138, 116, 204, 138, 116, 204, 138, 116, 204, 138, 116, 204, 138, 124, 204, 142, 124, 204, 142, 116, 204, 138, 124, 196, 134, 108, 196, 134, 116, 196, 134, 116, 196, 130, 116, 196, 130, 108, 188, 126, 108, 196, 126, 108, 188, 130, 108, 188, 126, 108, 188, 122, 100, 180, 118, 100, 188, 118, 100, 188, 126, 108, 196, 130, 108, 196, 126, 108, 188, 126, 108, 188, 122, 100, 188, 122, 108, 188, 126, 108, 196, 126, 108, 196, 130, 108, 188, 126, 108, 196, 126, 108, 188, 126, 108, 196, 134, 108, 196, 134, 116, 196, 134, 108, 196, 130, 108, 196, 126, 108, 188, 122, 108, 188, 122, 100, 188, 122, 100, 196, 130, 108, 196, 130, 100, 196, 130, 108, 196, 130, 100, 188, 130, 108, 196, 130, 108, 196, 134, 108, 204, 138, 116, 204, 130, 108, 204, 134, 116, 204, 134, 116, 204, 134, 116, 204, 138, 124, 204, 146, 124, 156, 102, 84, 84, 26, 4, 84, 26, 4, 116, 58, 36, 164, 106, 92, 164, 102, 84, 164, 106, 92, 172, 110, 92, 156, 98, 84, 172, 102, 84, 172, 102, 84, 180, 110, 92, 180, 118, 100, 180, 118, 100, 180, 110, 92, 180, 110, 92, 180, 114, 92, 180, 114, 92, 180, 114, 92, 172, 106, 92, 172, 106, 84, 172, 106, 84, 172, 106, 92, 172, 110, 92, 172, 110, 92, 172, 106, 84, 172, 106, 84, 164, 102, 84, 164, 102, 84, 172, 102, 76, 164, 102, 84, 172, 106, 84, 172, 106, 84, 172, 110, 92, 172, 110, 84, 180, 110, 92, 172, 110, 84, 180, 110, 92, 172, 110, 84, 172, 106, 84, 172, 110, 84, 180, 110, 92, 172, 106, 84, 172, 102, 84, 164, 102, 84, 172, 102, 76, 172, 102, 84, 172, 102, 84, 164, 102, 76, 164, 94, 76, 172, 102, 84, 172, 110, 92, 172, 110, 84, 172, 102, 84, 164, 98, 76, 172, 102, 76, 172, 106, 84, 172, 110, 84, 172, 106, 84, 172, 106, 84, 172, 106, 84, 180, 114, 92, 180, 114, 92, 172, 110, 84, 172, 106, 84, 172, 102, 76, 172, 110, 84, 172, 110, 84, 172, 102, 84, 172, 102, 84, 172, 106, 84, 180, 110, 92, 172, 110, 84, 180, 118, 92, 180, 114, 92, 180, 110, 92, 172, 110, 84, 180, 110, 92, 180, 114, 92, 180, 118, 92, 188, 122, 100, 188, 118, 100, 180, 114, 92, 180, 118, 92, 180, 114, 92, 180, 118, 92, 188, 118, 100, 180, 118, 92, 180, 114, 92, 180, 118, 92, 180, 110, 84, 180, 110, 92, 180, 118, 92, 188, 122, 100, 188, 114, 100, 180, 114, 92, 180, 114, 92, 196, 126, 108, 188, 126, 100, 188, 122, 100, 188, 118, 100, 180, 118, 100, 180, 114, 92, 188, 118, 100, 188, 122, 100, 180, 110, 92, 172, 110, 84, 180, 110, 92, 180, 114, 92, 188, 122, 100, 188, 126, 100, 188, 118, 100, 180, 114, 92, 172, 110, 84, 172, 110, 92, 180, 114, 92, 180, 114, 92, 180, 118, 92, 188, 118, 100, 188, 122, 100, 188, 122, 100, 180, 106, 92, 172, 110, 92, 172, 102, 84, 172, 102, 84, 164, 94, 76, 164, 94, 76, 164, 98, 76, 164, 102, 84, 172, 102, 84, 172, 106, 84, 180, 110, 92, 180, 110, 92, 180, 110, 92, 172, 106, 92, 172, 106, 84, 172, 106, 92, 172, 110, 84, 164, 102, 84, 164, 98, 76, 164, 94, 76, 164, 98, 76, 172, 110, 92, 180, 114, 92, 180, 118, 100, 180, 118, 100, 188, 122, 100, 180, 122, 108, 188, 122, 100, 188, 122, 100, 188, 122, 100, 188, 122, 100, 188, 126, 108, 188, 122, 100, 188, 126, 108, 188, 122, 100, 188, 122, 100, 180, 118, 100, 180, 114, 92, 180, 114, 92, 180, 118, 100, 180, 110, 92, 172, 110, 92, 172, 106, 84, 180, 110, 92, 180, 118, 92, 180, 118, 100, 180, 114, 92, 180, 110, 92, 172, 110, 84, 172, 110, 92, 180, 114, 92, 180, 114, 92, 180, 118, 92, 180, 118, 92, 180, 114, 92, 180, 118, 92, 180, 110, 92, 180, 110, 92, 180, 114, 92, 172, 110, 92, 172, 106, 84, 172, 106, 84, 172, 106, 92, 172, 110, 84, 180, 110, 92, 180, 114, 92, 180, 118, 92, 180, 118, 92, 180, 118, 92, 180, 118, 92, 188, 118, 100, 188, 122, 100, 180, 114, 100, 180, 110, 92, 188, 114, 100, 180, 110, 92, 172, 110, 92, 180, 126, 108, 148, 98, 76, 84, 26, 4, 84, 26, 12, 108, 50, 36, 164, 102, 84, 164, 98, 84, 156, 94, 76, 164, 98, 84, 148, 86, 68, 156, 90, 76, 156, 94, 84, 164, 90, 76, 164, 98, 84, 172, 102, 84, 164, 94, 76, 156, 90, 68, 164, 94, 76, 164, 98, 84, 164, 94, 76, 164, 98, 76, 164, 98, 84, 164, 98, 76, 172, 102, 84, 172, 106, 84, 172, 106, 84, 172, 106, 84, 164, 102, 84, 164, 94, 68, 164, 94, 76, 156, 98, 76, 164, 98, 76, 164, 98, 76, 164, 98, 84, 164, 102, 84, 172, 102, 84, 164, 98, 76, 164, 98, 76, 172, 102, 84, 172, 106, 84, 172, 106, 84, 180, 106, 84, 172, 110, 84, 172, 106, 84, 164, 102, 76, 164, 98, 76, 164, 98, 76, 164, 102, 76, 164, 102, 76, 164, 98, 76, 164, 98, 76, 172, 106, 84, 180, 110, 84, 172, 106, 84, 164, 98, 76, 164, 98, 76, 172, 106, 84, 180, 114, 92, 172, 106, 84, 164, 102, 76, 164, 98, 76, 172, 106, 84, 180, 110, 92, 180, 114, 92, 180, 110, 92, 172, 106, 84, 172, 106, 84, 180, 114, 92, 188, 118, 100, 180, 114, 92, 172, 110, 84, 180, 114, 92, 180, 114, 92, 180, 114, 92, 172, 110, 92, 172, 106, 84, 164, 102, 76, 172, 102, 76, 164, 102, 84, 180, 110, 84, 180, 118, 92, 188, 118, 100, 188, 122, 100, 180, 118, 92, 180, 110, 92, 180, 110, 84, 172, 106, 92, 180, 114, 84, 180, 114, 100, 188, 122, 100, 188, 122, 100, 180, 114, 92, 172, 110, 92, 180, 114, 92, 188, 118, 92, 180, 114, 92, 180, 114, 92, 180, 118, 92, 164, 102, 84, 172, 102, 84, 172, 106, 84, 172, 102, 76, 164, 102, 76, 172, 102, 84, 172, 110, 84, 180, 114, 92, 172, 110, 84, 172, 102, 84, 172, 106, 84, 180, 110, 84, 180, 118, 100, 188, 118, 92, 180, 110, 92, 172, 106, 84, 172, 106, 84, 180, 110, 92, 188, 118, 92, 180, 118, 100, 180, 114, 92, 180, 114, 92, 180, 114, 92, 180, 118, 100, 180, 114, 92, 188, 122, 100, 188, 126, 108, 188, 118, 100, 172, 110, 92, 172, 102, 84, 172, 106, 84, 180, 106, 92, 164, 98, 76, 172, 102, 84, 172, 106, 92, 172, 106, 84, 172, 106, 84, 172, 102, 84, 172, 102, 84, 172, 102, 84, 172, 106, 84, 164, 102, 84, 164, 98, 76, 164, 98, 76, 172, 106, 84, 172, 110, 92, 180, 114, 92, 180, 114, 92, 180, 118, 100, 188, 122, 100, 188, 122, 100, 188, 126, 108, 188, 122, 100, 188, 122, 100, 188, 122, 108, 196, 126, 108, 180, 118, 92, 188, 118, 100, 180, 118, 100, 180, 118, 100, 180, 114, 92, 180, 110, 92, 180, 114, 92, 180, 118, 100, 180, 110, 92, 172, 110, 84, 172, 106, 92, 172, 110, 92, 188, 118, 100, 180, 118, 100, 180, 114, 92, 172, 106, 84, 180, 110, 92, 180, 114, 92, 172, 110, 92, 180, 114, 92, 180, 114, 100, 180, 114, 92, 172, 110, 92, 172, 110, 92, 180, 114, 92, 180, 114, 92, 180, 114, 100, 180, 110, 92, 172, 110, 92, 172, 110, 92, 180, 114, 92, 180, 118, 92, 172, 106, 84, 180, 110, 84, 180, 118, 92, 188, 122, 100, 180, 118, 100, 180, 118, 92, 180, 118, 92, 180, 114, 92, 180, 110, 92, 180, 110, 92, 188, 118, 108, 188, 118, 100, 188, 122, 100, 188, 130, 108, 156, 102, 84, 84, 26, 12, 84, 30, 12, 108, 46, 28, 140, 82, 68, 156, 90, 76, 156, 94, 84, 156, 94, 84, 156, 94, 76, 164, 94, 76, 156, 90, 76, 164, 94, 76, 156, 94, 76, 156, 90, 68, 156, 90, 68, 164, 90, 76, 156, 90, 68, 148, 82, 60, 148, 78, 60, 164, 98, 76, 164, 94, 76, 156, 90, 68, 156, 90, 68, 156, 94, 76, 164, 98, 76, 164, 98, 76, 164, 98, 76, 156, 90, 68, 148, 86, 68, 156, 90, 68, 156, 90, 68, 156, 90, 76, 164, 94, 68, 156, 94, 76, 156, 94, 68, 156, 90, 68, 156, 90, 68, 172, 102, 76, 180, 114, 92, 188, 118, 92, 172, 106, 84, 180, 106, 84, 172, 106, 84, 164, 98, 76, 164, 94, 68, 164, 98, 76, 172, 102, 84, 172, 106, 84, 172, 102, 76, 164, 98, 76, 172, 106, 84, 180, 110, 92, 172, 110, 84, 172, 98, 76, 164, 98, 76, 172, 106, 84, 180, 118, 92, 180, 106, 84, 180, 106, 84, 172, 106, 84, 172, 110, 84, 180, 110, 92, 180, 110, 84, 172, 102, 76, 164, 98, 76, 164, 94, 68, 172, 106, 84, 180, 114, 92, 172, 106, 84, 164, 98, 76, 172, 98, 76, 172, 106, 84, 172, 106, 84, 180, 106, 84, 180, 110, 84, 172, 110, 84, 180, 110, 92, 180, 110, 84, 180, 110, 92, 180, 110, 84, 172, 106, 84, 188, 118, 92, 188, 114, 92, 172, 106, 84, 172, 102, 76, 172, 106, 84, 188, 118, 92, 188, 122, 100, 188, 118, 100, 188, 118, 92, 180, 110, 92, 180, 114, 84, 180, 114, 92, 180, 110, 92, 172, 106, 84, 164, 98, 76, 172, 102, 76, 180, 106, 84, 180, 114, 84, 172, 102, 76, 164, 94, 76, 172, 106, 84, 180, 110, 84, 172, 106, 84, 172, 106, 84, 188, 122, 100, 188, 118, 92, 180, 118, 92, 188, 118, 100, 196, 122, 100, 188, 122, 100, 180, 118, 92, 180, 110, 84, 188, 114, 92, 172, 110, 84, 172, 106, 84, 180, 114, 92, 188, 114, 92, 180, 114, 92, 180, 114, 84, 180, 114, 92, 180, 110, 92, 180, 110, 92, 180, 110, 92, 172, 106, 84, 164, 98, 76, 172, 110, 92, 188, 118, 100, 180, 118, 92, 180, 110, 92, 180, 114, 100, 180, 118, 100, 172, 106, 84, 164, 94, 76, 164, 98, 76, 172, 102, 76, 164, 102, 84, 164, 102, 84, 172, 102, 84, 172, 106, 84, 172, 106, 84, 172, 106, 84, 172, 106, 84, 172, 106, 84, 172, 106, 92, 180, 118, 92, 180, 118, 100, 180, 114, 92, 180, 110, 92, 180, 114, 92, 180, 114, 100, 180, 118, 92, 180, 118, 100, 188, 122, 108, 188, 122, 100, 188, 118, 100, 180, 114, 92, 180, 114, 92, 172, 110, 92, 172, 110, 92, 172, 106, 84, 188, 122, 100, 180, 114, 100, 172, 106, 84, 172, 110, 84, 180, 114, 92, 180, 114, 92, 180, 110, 92, 172, 110, 92, 172, 106, 84, 172, 110, 92, 180, 114, 92, 180, 118, 100, 180, 114, 92, 172, 110, 92, 172, 110, 92, 180, 110, 92, 164, 106, 84, 172, 106, 84, 172, 110, 84, 172, 110, 92, 172, 110, 92, 180, 110, 84, 172, 110, 92, 172, 110, 84, 180, 110, 92, 180, 110, 92, 180, 114, 92, 180, 118, 92, 180, 118, 92, 180, 118, 100, 188, 118, 92, 188, 118, 100, 180, 110, 92, 180, 110, 92, 188, 118, 100, 188, 118, 100, 180, 118, 100, 180, 122, 108, 148, 90, 68, 84, 30, 12, 92, 34, 12, 116, 58, 44, 156, 90, 76, 156, 94, 76, 156, 94, 76, 156, 90, 76, 148, 86, 68, 156, 90, 76, 148, 86, 68, 156, 86, 68, 156, 86, 68, 156, 90, 68, 156, 90, 76, 156, 90, 68, 156, 86, 68, 148, 78, 60, 140, 74, 52, 148, 82, 68, 148, 82, 60, 148, 86, 68, 156, 90, 68, 156, 94, 76, 164, 98, 76, 164, 98, 84, 164, 98, 76, 148, 86, 68, 156, 86, 68, 156, 90, 68, 156, 90, 76, 156, 94, 68, 156, 94, 76, 164, 94, 76, 164, 98, 76, 172, 102, 76, 164, 98, 76, 172, 102, 76, 172, 106, 84, 180, 110, 92, 172, 106, 84, 164, 98, 76, 172, 102, 76, 172, 102, 84, 164, 94, 68, 164, 94, 76, 172, 102, 76, 180, 110, 84, 180, 110, 92, 164, 98, 76, 172, 102, 76, 172, 106, 84, 172, 102, 76, 164, 98, 76, 164, 98, 76, 172, 102, 76, 180, 110, 92, 180, 110, 92, 172, 110, 84, 172, 106, 84, 180, 106, 84, 180, 114, 84, 180, 110, 92, 172, 102, 84, 164, 98, 76, 156, 94, 68, 172, 106, 84, 188, 114, 92, 180, 110, 84, 172, 106, 84, 172, 102, 76, 172, 106, 84, 180, 110, 84, 172, 106, 84, 172, 106, 84, 180, 110, 84, 180, 110, 92, 180, 114, 84, 172, 110, 84, 172, 106, 84, 172, 106, 84, 164, 98, 76, 164, 98, 76, 164, 98, 76, 164, 90, 68, 164, 98, 76, 172, 102, 84, 172, 106, 76, 172, 102, 76, 172, 106, 84, 172, 106, 84, 180, 110, 84, 180, 114, 92, 188, 114, 92, 180, 110, 84, 180, 110, 92, 180, 114, 92, 172, 106, 84, 180, 114, 92, 172, 106, 84, 164, 94, 68, 172, 106, 84, 180, 114, 92, 188, 118, 92, 196, 126, 100, 188, 122, 100, 188, 122, 100, 188, 118, 92, 180, 118, 92, 188, 118, 100, 188, 118, 92, 180, 114, 92, 172, 106, 84, 180, 114, 92, 180, 106, 84, 172, 102, 76, 172, 102, 76, 172, 106, 84, 172, 102, 84, 172, 106, 84, 180, 110, 84, 172, 102, 84, 164, 102, 84, 172, 102, 84, 164, 94, 76, 156, 90, 68, 164, 94, 76, 180, 106, 92, 172, 102, 84, 164, 98, 84, 180, 110, 84, 180, 110, 92, 164, 98, 84, 164, 94, 76, 164, 98, 76, 164, 98, 84, 172, 98, 76, 164, 102, 84, 164, 102, 84, 172, 102, 84, 164, 106, 84, 172, 106, 92, 172, 106, 92, 172, 110, 92, 180, 110, 84, 180, 118, 100, 188, 118, 100, 180, 118, 100, 180, 114, 92, 172, 114, 92, 180, 110, 92, 180, 110, 92, 180, 114, 92, 180, 118, 100, 180, 118, 92, 180, 114, 100, 180, 114, 92, 180, 110, 92, 172, 110, 92, 180, 110, 92, 172, 114, 92, 188, 118, 100, 180, 114, 92, 172, 110, 92, 172, 106, 84, 172, 110, 92, 172, 110, 92, 172, 110, 84, 164, 102, 84, 172, 102, 84, 172, 110, 92, 180, 114, 92, 180, 114, 92, 180, 114, 92, 180, 110, 92, 172, 106, 84, 172, 106, 84, 172, 110, 92, 180, 110, 92, 180, 114, 92, 180, 114, 92, 180, 118, 100, 180, 114, 92, 180, 114, 100, 180, 114, 92, 180, 114, 92, 180, 118, 92, 188, 118, 92, 188, 122, 92, 180, 122, 100, 188, 122, 100, 180, 122, 100, 188, 118, 100, 196, 122, 100, 188, 118, 100, 196, 122, 108, 180, 114, 100, 180, 114, 100, 180, 126, 108, 148, 98, 76, 92, 34, 12, 84, 26, 12, 116, 58, 36, 148, 90, 76, 148, 90, 76, 140, 82, 68, 148, 82, 68, 140, 78, 60, 156, 86, 68, 148, 86, 68, 156, 90, 68, 156, 90, 76, 164, 94, 76, 156, 90, 76, 156, 90, 68, 148, 82, 68, 148, 78, 60, 140, 78, 60, 156, 86, 68, 148, 86, 68, 156, 86, 68, 156, 90, 68, 156, 94, 76, 164, 94, 76, 156, 94, 76, 148, 86, 68, 148, 82, 60, 148, 86, 68, 156, 90, 68, 156, 90, 76, 156, 90, 68, 156, 90, 68, 156, 94, 76, 164, 102, 76, 172, 102, 84, 172, 102, 76, 172, 106, 84, 180, 110, 84, 180, 114, 84, 180, 110, 84, 172, 102, 76, 180, 106, 84, 172, 106, 76, 172, 98, 76, 164, 98, 68, 172, 106, 76, 172, 106, 84, 180, 110, 84, 172, 98, 76, 180, 106, 84, 180, 110, 84, 180, 110, 84, 172, 98, 76, 172, 98, 76, 180, 106, 84, 180, 114, 84, 188, 114, 92, 180, 110, 84, 180, 110, 84, 180, 110, 84, 180, 114, 92, 180, 110, 84, 172, 106, 84, 164, 98, 68, 164, 94, 68, 180, 106, 84, 188, 118, 92, 180, 114, 92, 180, 110, 84, 180, 110, 84, 180, 110, 92, 180, 110, 84, 172, 106, 76, 180, 106, 84, 180, 110, 84, 180, 114, 92, 188, 114, 92, 180, 110, 84, 180, 106, 84, 172, 106, 76, 180, 106, 84, 188, 114, 92, 180, 114, 84, 180, 110, 84, 180, 114, 92, 188, 118, 92, 188, 118, 92, 180, 110, 84, 180, 106, 84, 172, 106, 76, 180, 106, 84, 188, 114, 92, 188, 118, 92, 180, 118, 92, 188, 118, 92, 196, 122, 100, 172, 106, 84, 188, 114, 84, 172, 106, 84, 164, 98, 68, 172, 102, 76, 180, 106, 84, 180, 110, 84, 188, 118, 92, 188, 122, 92, 188, 114, 92, 180, 110, 92, 180, 114, 84, 188, 118, 92, 188, 118, 92, 180, 110, 84, 172, 102, 84, 188, 122, 92, 180, 110, 84, 164, 102, 76, 172, 102, 76, 172, 98, 76, 172, 102, 76, 172, 102, 76, 180, 106, 84, 180, 110, 92, 180, 106, 84, 180, 106, 84, 172, 102, 76, 164, 90, 76, 172, 98, 76, 180, 110, 92, 172, 102, 76, 172, 102, 84, 180, 106, 84, 180, 110, 84, 172, 102, 84, 172, 98, 76, 164, 94, 76, 164, 98, 76, 164, 98, 76, 172, 98, 84, 164, 98, 76, 164, 102, 84, 172, 106, 84, 172, 106, 84, 172, 110, 92, 180, 114, 92, 180, 114, 92, 188, 122, 100, 188, 122, 100, 188, 122, 100, 180, 118, 100, 172, 106, 92, 172, 106, 84, 164, 106, 84, 172, 106, 84, 180, 114, 92, 180, 110, 92, 172, 110, 84, 172, 110, 92, 180, 110, 92, 172, 110, 92, 180, 114, 92, 180, 114, 92, 180, 118, 92, 172, 110, 92, 172, 106, 84, 172, 106, 84, 172, 110, 92, 172, 106, 84, 164, 102, 84, 164, 94, 76, 164, 98, 76, 172, 110, 92, 180, 114, 92, 172, 106, 92, 172, 106, 92, 172, 110, 84, 172, 106, 92, 164, 102, 84, 172, 110, 92, 180, 110, 92, 172, 110, 92, 180, 114, 92, 180, 114, 92, 180, 118, 100, 180, 114, 92, 180, 118, 92, 180, 114, 92, 188, 114, 92, 180, 118, 92, 180, 118, 100, 180, 118, 92, 180, 118, 100, 188, 118, 92, 180, 118, 92, 180, 110, 92, 180, 106, 92, 180, 110, 92, 172, 106, 92, 172, 106, 84, 172, 114, 92, 140, 90, 68, 84, 26, 12, 84, 30, 12, 116, 58, 44, 156, 90, 76, 156, 90, 76, 148, 86, 68, 148, 86, 76, 148, 86, 68, 156, 90, 76, 156, 90, 76, 164, 94, 84, 164, 98, 76, 164, 94, 76, 156, 90, 68, 156, 86, 68, 156, 86, 60, 156, 90, 68, 156, 90, 76, 164, 94, 76, 156, 94, 68, 156, 94, 76, 164, 98, 76, 164, 98, 76, 164, 98, 76, 156, 94, 76, 156, 94, 68, 148, 78, 60, 148, 86, 68, 156, 90, 68, 156, 90, 68, 148, 86, 68, 156, 86, 68, 156, 90, 68, 164, 98, 76, 164, 94, 68, 172, 98, 76, 180, 106, 84, 188, 118, 92, 188, 118, 92, 188, 118, 100, 180, 114, 92, 180, 114, 84, 180, 106, 84, 172, 102, 76, 172, 98, 76, 172, 106, 84, 180, 106, 84, 164, 98, 68, 172, 102, 76, 180, 114, 84, 196, 122, 100, 188, 118, 92, 172, 106, 76, 172, 102, 76, 180, 110, 84, 188, 122, 92, 188, 118, 92, 188, 114, 92, 180, 110, 84, 188, 114, 84, 188, 114, 92, 180, 114, 84, 180, 106, 84, 172, 102, 76, 164, 94, 68, 180, 110, 84, 188, 118, 92, 188, 118, 92, 188, 114, 92, 180, 114, 92, 188, 114, 84, 180, 114, 92, 180, 106, 84, 180, 110, 84, 180, 114, 84, 188, 114, 92, 180, 114, 84, 180, 110, 92, 180, 110, 84, 180, 106, 84, 180, 114, 84, 188, 114, 92, 188, 114, 92, 180, 114, 92, 188, 118, 92, 196, 122, 100, 188, 122, 92, 180, 114, 92, 188, 114, 92, 180, 110, 84, 180, 114, 84, 188, 118, 92, 188, 122, 92, 188, 118, 92, 188, 118, 92, 188, 122, 92, 188, 118, 92, 196, 122, 100, 188, 118, 92, 188, 114, 92, 188, 122, 100, 196, 126, 100, 188, 118, 92, 188, 114, 92, 188, 114, 92, 180, 114, 84, 180, 110, 84, 180, 110, 84, 188, 118, 92, 188, 118, 92, 188, 118, 92, 180, 114, 84, 196, 126, 100, 188, 114, 92, 180, 106, 84, 172, 106, 76, 172, 102, 76, 172, 102, 76, 172, 106, 76, 180, 110, 84, 188, 118, 92, 180, 110, 92, 180, 114, 92, 180, 106, 92, 164, 98, 76, 180, 106, 84, 188, 114, 100, 180, 106, 84, 180, 110, 92, 180, 110, 92, 188, 114, 92, 180, 110, 92, 172, 106, 84, 172, 98, 76, 172, 98, 76, 164, 98, 76, 164, 102, 76, 164, 102, 84, 172, 102, 84, 172, 106, 84, 172, 110, 92, 180, 118, 92, 180, 114, 100, 180, 118, 100, 188, 122, 108, 188, 126, 100, 188, 118, 100, 180, 114, 92, 172, 106, 84, 164, 102, 84, 172, 102, 84, 172, 110, 92, 172, 110, 92, 172, 110, 84, 172, 106, 92, 172, 106, 84, 172, 110, 84, 172, 110, 92, 180, 110, 92, 180, 114, 92, 180, 110, 92, 172, 110, 92, 172, 110, 92, 180, 110, 92, 172, 110, 92, 180, 110, 84, 164, 102, 84, 164, 98, 76, 156, 94, 76, 172, 106, 84, 180, 114, 92, 172, 106, 84, 164, 102, 84, 172, 110, 84, 172, 106, 84, 164, 98, 76, 172, 102, 84, 164, 106, 84, 172, 106, 84, 172, 106, 92, 172, 110, 92, 180, 110, 92, 180, 110, 92, 172, 110, 92, 180, 106, 84, 172, 110, 84, 172, 110, 84, 180, 110, 84, 172, 110, 84, 172, 110, 84, 172, 106, 84, 172, 106, 84, 180, 106, 92, 180, 106, 84, 188, 114, 100, 188, 118, 100, 180, 114, 100, 180, 126, 108, 148, 90, 68, 84, 30, 12, 92, 34, 12, 124, 66, 44, 156, 98, 84, 164, 102, 84, 164, 98, 84, 164, 98, 84, 156, 94, 76, 164, 98, 84, 164, 98, 76, 156, 90, 76, 156, 94, 76, 164, 94, 76, 156, 90, 76, 156, 90, 68, 156, 86, 68, 156, 86, 68, 164, 94, 68, 156, 90, 76, 156, 94, 68, 156, 90, 76, 164, 98, 76, 164, 102, 84, 172, 106, 84, 172, 106, 84, 172, 102, 84, 148, 82, 60, 148, 86, 68, 156, 90, 68, 156, 90, 68, 148, 86, 68, 148, 82, 60, 156, 86, 68, 156, 94, 68, 156, 86, 68, 164, 98, 68, 180, 110, 84, 188, 118, 92, 196, 122, 92, 196, 122, 100, 188, 118, 92, 188, 118, 92, 180, 110, 92, 172, 106, 76, 172, 106, 76, 180, 106, 84, 180, 106, 84, 172, 102, 76, 180, 110, 84, 188, 118, 92, 196, 126, 100, 188, 118, 100, 180, 110, 84, 172, 106, 84, 188, 114, 84, 188, 122, 100, 196, 122, 100, 188, 118, 92, 180, 114, 84, 180, 114, 92, 188, 118, 92, 188, 118, 92, 180, 110, 84, 180, 106, 84, 172, 102, 76, 180, 110, 84, 196, 122, 100, 188, 122, 92, 188, 118, 92, 188, 118, 92, 188, 122, 92, 188, 114, 92, 188, 114, 84, 180, 114, 92, 188, 114, 84, 180, 110, 92, 180, 114, 84, 188, 114, 92, 180, 114, 84, 188, 114, 92, 180, 114, 92, 188, 114, 92, 180, 114, 84, 180, 110, 84, 180, 110, 84, 188, 118, 92, 188, 114, 92, 180, 114, 84, 188, 118, 92, 180, 114, 92, 188, 114, 92, 188, 122, 92, 188, 118, 100, 188, 118, 92, 188, 118, 92, 196, 122, 100, 180, 114, 92, 188, 118, 92, 180, 110, 84, 180, 110, 84, 196, 130, 100, 204, 134, 108, 196, 126, 100, 188, 118, 100, 188, 122, 92, 188, 114, 92, 188, 114, 92, 188, 114, 92, 188, 122, 100, 196, 122, 100, 196, 122, 100, 188, 118, 92, 188, 118, 100, 188, 118, 92, 180, 110, 84, 180, 110, 84, 180, 110, 84, 172, 102, 76, 172, 102, 76, 180, 110, 84, 180, 110, 92, 172, 106, 84, 180, 106, 84, 172, 98, 76, 164, 94, 68, 172, 106, 84, 180, 110, 92, 172, 106, 84, 180, 110, 84, 180, 110, 84, 180, 114, 92, 180, 110, 92, 180, 110, 92, 172, 106, 84, 180, 106, 84, 172, 106, 84, 172, 102, 84, 172, 102, 76, 164, 102, 84, 172, 110, 92, 180, 114, 92, 188, 118, 100, 188, 122, 100, 188, 118, 92, 188, 126, 108, 188, 122, 100, 180, 118, 100, 172, 110, 92, 164, 106, 84, 172, 102, 84, 172, 106, 84, 180, 114, 92, 180, 110, 92, 172, 110, 92, 172, 106, 84, 172, 106, 84, 172, 102, 84, 172, 106, 84, 172, 106, 84, 172, 110, 92, 172, 110, 92, 172, 110, 92, 172, 110, 84, 180, 110, 92, 172, 114, 92, 180, 110, 92, 172, 106, 92, 172, 106, 84, 156, 94, 68, 172, 106, 92, 180, 114, 92, 172, 102, 84, 164, 102, 84, 180, 110, 92, 172, 106, 92, 164, 98, 76, 164, 102, 84, 172, 102, 84, 164, 102, 84, 172, 106, 84, 172, 106, 84, 172, 106, 84, 172, 106, 84, 172, 110, 84, 172, 102, 84, 172, 106, 84, 172, 106, 84, 172, 110, 84, 172, 106, 84, 164, 106, 84, 172, 106, 84, 172, 102, 84, 172, 102, 84, 172, 102, 84, 180, 114, 100, 188, 118, 100, 180, 118, 100, 188, 126, 100, 148, 94, 76, 92, 34, 12, 92, 34, 12, 116, 62, 44, 156, 94, 76, 164, 94, 84, 156, 94, 76, 156, 94, 76, 148, 86, 68, 148, 86, 76, 148, 82, 68, 148, 78, 60, 148, 82, 68, 156, 90, 68, 156, 94, 76, 164, 90, 76, 156, 90, 68, 148, 82, 68, 148, 82, 60, 164, 94, 76, 156, 94, 76, 156, 94, 68, 164, 94, 76, 164, 102, 84, 164, 102, 84, 172, 102, 84, 164, 102, 84, 156, 90, 68, 156, 90, 68, 156, 94, 76, 156, 90, 68, 148, 86, 68, 148, 86, 68, 156, 90, 68, 156, 90, 68, 164, 98, 76, 172, 106, 84, 180, 110, 84, 180, 110, 84, 180, 114, 92, 188, 118, 92, 180, 110, 84, 188, 118, 92, 188, 118, 92, 180, 110, 84, 180, 106, 84, 180, 114, 84, 180, 114, 84, 180, 114, 92, 188, 114, 84, 180, 114, 92, 188, 114, 84, 188, 118, 92, 188, 114, 92, 180, 114, 92, 188, 114, 84, 180, 110, 84, 196, 122, 100, 188, 118, 92, 188, 114, 92, 188, 114, 92, 188, 118, 92, 188, 118, 92, 188, 118, 92, 180, 110, 84, 172, 106, 84, 188, 114, 92, 196, 122, 100, 188, 122, 100, 196, 122, 92, 196, 122, 100, 188, 122, 100, 188, 118, 92, 188, 122, 100, 188, 118, 92, 188, 118, 92, 188, 114, 92, 188, 118, 92, 188, 114, 92, 188, 118, 92, 188, 122, 92, 196, 122, 100, 188, 126, 100, 188, 118, 92, 180, 110, 84, 188, 114, 92, 188, 122, 100, 196, 126, 100, 188, 118, 100, 196, 122, 92, 188, 114, 92, 180, 114, 92, 196, 122, 92, 188, 122, 100, 188, 118, 92, 196, 122, 100, 196, 126, 100, 188, 118, 92, 188, 118, 92, 172, 98, 76, 164, 94, 68, 180, 110, 92, 188, 122, 92, 188, 114, 92, 180, 114, 84, 204, 130, 108, 196, 126, 100, 188, 118, 92, 188, 122, 92, 196, 122, 100, 188, 122, 92, 188, 122, 92, 188, 114, 92, 180, 114, 84, 180, 110, 84, 180, 110, 84, 180, 114, 92, 180, 110, 84, 172, 102, 76, 172, 102, 76, 180, 106, 84, 180, 110, 92, 180, 106, 84, 172, 102, 76, 172, 98, 76, 164, 94, 76, 180, 106, 84, 180, 110, 92, 180, 106, 84, 172, 102, 76, 172, 98, 84, 172, 102, 76, 180, 110, 84, 180, 110, 84, 180, 106, 84, 180, 110, 92, 180, 114, 92, 172, 110, 92, 172, 106, 92, 172, 106, 84, 180, 110, 92, 180, 118, 100, 188, 122, 100, 180, 122, 100, 188, 118, 100, 188, 126, 108, 188, 118, 100, 180, 114, 92, 172, 106, 84, 172, 106, 84, 172, 110, 92, 180, 114, 92, 180, 114, 92, 172, 114, 92, 180, 110, 92, 172, 106, 84, 164, 102, 84, 164, 102, 84, 172, 106, 84, 172, 106, 84, 172, 106, 92, 180, 110, 84, 172, 110, 92, 180, 110, 92, 172, 110, 92, 180, 110, 92, 180, 114, 92, 172, 114, 92, 180, 110, 92, 164, 98, 76, 172, 110, 92, 180, 114, 92, 172, 106, 84, 172, 106, 84, 172, 110, 92, 172, 106, 84, 164, 102, 84, 172, 106, 84, 172, 110, 84, 172, 106, 92, 172, 106, 84, 172, 106, 84, 172, 110, 92, 172, 110, 92, 180, 110, 84, 172, 106, 84, 172, 106, 84, 180, 110, 84, 172, 110, 84, 172, 114, 92, 172, 110, 92, 172, 110, 84, 172, 110, 84, 180, 106, 92, 172, 102, 84, 180, 106, 92, 172, 106, 92, 172, 106, 92, 180, 122, 100, 148, 98, 76, 92, 34, 12, 100, 42, 28, 116, 54, 36, 148, 86, 68, 148, 90, 76, 148, 86, 76, 148, 86, 76, 140, 78, 60, 148, 78, 60, 140, 78, 60, 148, 78, 60, 148, 78, 60, 148, 82, 60, 156, 86, 68, 156, 90, 68, 156, 90, 68, 156, 90, 68, 148, 86, 68, 172, 102, 84, 164, 102, 84, 172, 102, 84, 164, 102, 84, 172, 106, 84, 172, 106, 84, 164, 102, 84, 164, 98, 76, 156, 94, 76, 164, 98, 76, 156, 94, 76, 164, 98, 76, 164, 94, 76, 164, 94, 76, 156, 94, 76, 164, 98, 76, 180, 110, 84, 188, 114, 84, 188, 114, 92, 180, 106, 84, 188, 114, 84, 188, 118, 92, 188, 114, 92, 188, 118, 92, 188, 118, 92, 188, 114, 92, 180, 110, 84, 188, 114, 92, 188, 118, 92, 188, 114, 92, 188, 118, 92, 188, 118, 92, 188, 114, 92, 188, 118, 92, 188, 118, 92, 188, 118, 92, 188, 114, 92, 180, 110, 84, 196, 122, 100, 188, 118, 92, 180, 114, 84, 188, 114, 92, 188, 122, 92, 196, 122, 100, 188, 118, 92, 188, 114, 92, 180, 110, 84, 188, 118, 92, 196, 122, 100, 196, 122, 92, 188, 118, 92, 188, 118, 100, 196, 122, 92, 188, 118, 92, 196, 122, 100, 196, 122, 92, 196, 122, 100, 188, 122, 92, 196, 122, 100, 188, 122, 92, 196, 122, 100, 196, 122, 100, 196, 122, 100, 196, 122, 92, 188, 114, 92, 180, 110, 84, 188, 114, 84, 188, 118, 92, 196, 122, 92, 188, 118, 92, 188, 122, 92, 188, 118, 92, 188, 114, 92, 188, 118, 92, 196, 122, 92, 188, 118, 92, 188, 118, 92, 196, 126, 100, 204, 130, 108, 204, 134, 108, 188, 122, 92, 180, 106, 84, 188, 114, 92, 188, 118, 92, 188, 118, 92, 196, 122, 100, 204, 134, 108, 196, 130, 100, 196, 122, 100, 188, 122, 92, 196, 122, 100, 196, 122, 100, 188, 118, 92, 188, 114, 92, 188, 114, 84, 180, 110, 84, 180, 110, 84, 188, 114, 92, 180, 110, 84, 180, 106, 84, 180, 106, 84, 188, 114, 92, 188, 118, 92, 188, 114, 92, 180, 110, 92, 180, 106, 84, 172, 102, 84, 180, 110, 84, 188, 118, 92, 180, 106, 84, 180, 106, 84, 172, 106, 84, 180, 106, 84, 180, 106, 92, 188, 114, 92, 180, 110, 92, 180, 110, 84, 188, 114, 92, 188, 114, 100, 180, 114, 92, 172, 110, 92, 180, 114, 92, 188, 122, 100, 188, 122, 108, 188, 122, 100, 180, 118, 100, 188, 122, 100, 180, 118, 100, 180, 114, 92, 180, 110, 92, 180, 114, 92, 180, 114, 92, 180, 114, 92, 172, 110, 92, 180, 110, 92, 172, 110, 84, 172, 106, 84, 164, 102, 84, 172, 102, 84, 164, 106, 84, 172, 106, 84, 180, 110, 92, 172, 114, 92, 180, 110, 92, 172, 110, 92, 180, 110, 92, 172, 110, 84, 172, 110, 92, 172, 110, 84, 180, 110, 92, 164, 102, 84, 172, 110, 92, 180, 114, 92, 180, 114, 92, 180, 110, 92, 172, 110, 84, 172, 110, 92, 172, 106, 84, 180, 114, 92, 180, 110, 92, 180, 110, 92, 172, 110, 92, 172, 110, 92, 172, 110, 84, 172, 110, 92, 180, 110, 92, 172, 110, 92, 180, 110, 84, 180, 114, 92, 180, 114, 92, 180, 114, 92, 180, 118, 92, 180, 114, 92, 180, 114, 92, 188, 118, 100, 188, 114, 92, 196, 122, 108, 188, 118, 100, 180, 118, 100, 188, 130, 108, 156, 106, 84, 100, 42, 28, 84, 30, 12, 116, 54, 36, 156, 90, 76, 156, 90, 76, 156, 90, 68, 156, 94, 76, 148, 86, 68, 164, 94, 84, 156, 94, 76, 156, 90, 76, 148, 86, 68, 148, 78, 60, 148, 78, 60, 148, 86, 68, 164, 94, 76, 164, 94, 76, 172, 98, 84, 164, 98, 76, 164, 102, 76, 172, 106, 84, 180, 110, 92, 180, 118, 100, 180, 118, 100, 180, 110, 92, 172, 110, 92, 164, 98, 76, 164, 94, 76, 164, 98, 76, 164, 98, 84, 164, 102, 76, 164, 102, 84, 172, 102, 84, 164, 102, 76, 188, 118, 92, 188, 122, 100, 196, 122, 100, 188, 114, 92, 180, 114, 92, 188, 114, 92, 196, 122, 100, 196, 122, 100, 188, 118, 92, 188, 114, 92, 188, 118, 92, 188, 118, 92, 188, 118, 92, 180, 110, 84, 196, 122, 100, 196, 122, 100, 188, 122, 92, 196, 122, 100, 196, 126, 100, 196, 122, 100, 188, 118, 92, 188, 118, 92, 196, 122, 100, 188, 118, 92, 188, 114, 92, 188, 118, 92, 196, 122, 100, 196, 126, 100, 196, 122, 100, 188, 118, 92, 188, 114, 84, 188, 122, 92, 196, 122, 100, 188, 122, 92, 188, 118, 92, 196, 122, 100, 196, 122, 92, 188, 118, 92, 196, 122, 100, 196, 126, 100, 196, 122, 100, 196, 126, 100, 196, 126, 100, 196, 126, 100, 196, 122, 100, 196, 126, 100, 196, 122, 100, 196, 126, 100, 196, 122, 100, 188, 118, 92, 188, 118, 100, 196, 126, 100, 196, 126, 100, 196, 122, 100, 196, 126, 100, 196, 122, 100, 188, 118, 92, 188, 122, 100, 196, 122, 92, 188, 114, 92, 188, 114, 92, 188, 122, 92, 188, 114, 92, 204, 130, 108, 196, 126, 100, 188, 118, 92, 188, 118, 92, 188, 118, 92, 196, 122, 100, 196, 126, 100, 204, 130, 108, 196, 126, 100, 196, 122, 100, 188, 118, 92, 196, 122, 100, 196, 126, 100, 196, 122, 100, 188, 118, 92, 188, 114, 92, 188, 114, 92, 188, 118, 92, 188, 118, 92, 188, 118, 92, 180, 114, 84, 188, 114, 92, 196, 126, 100, 196, 122, 100, 188, 114, 92, 180, 110, 84, 180, 106, 84, 172, 98, 76, 180, 110, 92, 188, 114, 92, 172, 102, 84, 196, 126, 100, 188, 114, 92, 188, 114, 92, 188, 114, 92, 188, 114, 92, 180, 110, 84, 188, 114, 92, 188, 114, 92, 188, 122, 100, 180, 118, 100, 180, 114, 92, 180, 118, 100, 188, 122, 100, 188, 126, 108, 188, 122, 100, 180, 118, 100, 188, 122, 100, 180, 118, 100, 180, 110, 92, 180, 114, 100, 180, 118, 100, 188, 118, 100, 172, 114, 92, 172, 106, 84, 172, 110, 92, 172, 106, 92, 172, 102, 84, 164, 102, 84, 172, 102, 76, 172, 106, 84, 172, 106, 92, 180, 114, 92, 180, 110, 92, 180, 114, 92, 172, 110, 92, 172, 110, 84, 172, 106, 84, 172, 106, 84, 172, 106, 92, 172, 110, 84, 172, 106, 84, 180, 110, 92, 180, 114, 92, 180, 118, 100, 180, 118, 100, 180, 110, 92, 172, 110, 92, 180, 110, 92, 180, 114, 92, 172, 114, 92, 172, 110, 92, 172, 106, 84, 172, 106, 84, 172, 106, 92, 172, 110, 84, 172, 106, 84, 180, 110, 84, 172, 110, 92, 180, 114, 92, 180, 114, 92, 180, 118, 92, 180, 118, 92, 180, 114, 92, 180, 118, 92, 188, 114, 100, 180, 110, 92, 188, 122, 108, 188, 122, 100, 180, 118, 108, 188, 126, 108, 148, 90, 76, 84, 30, 12, 92, 38, 28, 140, 78, 60, 156, 90, 68, 156, 90, 76, 156, 90, 68, 156, 94, 76, 164, 98, 76, 156, 94, 76, 164, 94, 76, 156, 94, 68, 156, 94, 76, 156, 90, 68, 156, 86, 68, 148, 86, 68, 156, 86, 68, 156, 94, 76, 164, 102, 76, 180, 110, 92, 172, 102, 84, 172, 98, 84, 172, 106, 84, 180, 114, 92, 188, 122, 100, 188, 114, 92, 172, 110, 92, 172, 102, 84, 164, 98, 76, 156, 90, 68, 156, 86, 68, 164, 94, 76, 172, 102, 84, 172, 106, 84, 180, 110, 92, 188, 114, 92, 196, 126, 100, 196, 126, 100, 188, 118, 92, 180, 110, 92, 188, 118, 92, 196, 130, 108, 196, 126, 100, 196, 122, 100, 188, 126, 100, 196, 126, 108, 196, 126, 100, 196, 122, 100, 180, 118, 92, 188, 114, 92, 188, 118, 92, 196, 122, 100, 188, 122, 100, 188, 122, 100, 188, 118, 92, 188, 118, 92, 188, 118, 92, 196, 126, 100, 188, 122, 100, 196, 122, 100, 188, 122, 100, 196, 126, 100, 196, 130, 100, 196, 126, 108, 196, 130, 100, 196, 122, 100, 188, 122, 100, 196, 126, 108, 196, 126, 100, 204, 130, 108, 196, 130, 100, 196, 130, 108, 196, 130, 108, 188, 122, 100, 196, 126, 100, 188, 122, 100, 196, 122, 100, 188, 122, 100, 196, 126, 100, 196, 126, 100, 196, 130, 100, 196, 130, 108, 196, 130, 100, 196, 126, 100, 196, 126, 100, 204, 130, 108, 196, 130, 100, 196, 126, 108, 188, 126, 100, 196, 122, 100, 196, 126, 100, 196, 130, 108, 204, 130, 108, 196, 126, 108, 196, 130, 100, 196, 122, 100, 188, 122, 100, 196, 126, 100, 204, 134, 108, 204, 134, 108, 196, 126, 100, 188, 114, 92, 188, 118, 92, 188, 122, 100, 196, 126, 100, 196, 130, 108, 196, 126, 108, 196, 126, 100, 196, 126, 100, 196, 126, 100, 188, 122, 92, 188, 122, 100, 188, 122, 100, 196, 122, 100, 188, 122, 100, 196, 122, 100, 188, 122, 100, 196, 122, 100, 188, 122, 100, 188, 118, 92, 188, 118, 100, 196, 126, 100, 188, 122, 100, 188, 122, 100, 188, 118, 100, 188, 118, 92, 188, 118, 92, 188, 114, 92, 188, 118, 92, 188, 122, 100, 188, 114, 92, 180, 114, 92, 180, 114, 84, 172, 102, 84, 172, 106, 84, 188, 118, 92, 188, 118, 100, 188, 122, 100, 188, 122, 100, 180, 118, 100, 188, 118, 100, 188, 122, 100, 188, 122, 100, 188, 118, 100, 180, 118, 100, 196, 130, 108, 180, 114, 92, 172, 106, 84, 172, 110, 92, 180, 114, 92, 172, 110, 92, 172, 106, 84, 172, 106, 84, 180, 110, 92, 180, 114, 92, 180, 114, 92, 180, 110, 92, 164, 102, 84, 164, 98, 84, 172, 102, 84, 172, 106, 84, 172, 106, 92, 172, 106, 84, 172, 106, 84, 180, 106, 92, 172, 106, 92, 180, 110, 92, 180, 110, 92, 172, 110, 92, 172, 102, 84, 172, 110, 92, 180, 114, 92, 180, 114, 100, 180, 114, 92, 172, 110, 92, 180, 114, 92, 172, 110, 92, 180, 114, 92, 180, 114, 92, 180, 110, 92, 180, 110, 92, 172, 110, 92, 180, 110, 84, 172, 110, 92, 172, 110, 92, 180, 110, 92, 180, 110, 92, 180, 114, 92, 180, 114, 92, 180, 118, 100, 180, 118, 100, 180, 114, 92, 180, 114, 92, 172, 102, 84, 172, 102, 84, 180, 106, 92, 164, 94, 84, 156, 94, 76, 172, 110, 100, 140, 82, 68, 92, 38, 28, 92, 34, 20, 124, 58, 44, 140, 78, 60, 148, 86, 68, 156, 90, 68, 156, 94, 76, 164, 94, 76, 148, 90, 68, 156, 90, 68, 164, 94, 76, 156, 94, 76, 156, 94, 76, 156, 90, 68, 148, 86, 60, 148, 86, 68, 156, 90, 68, 164, 94, 76, 164, 98, 76, 156, 94, 76, 156, 94, 76, 172, 98, 84, 180, 110, 92, 180, 118, 100, 188, 114, 100, 180, 114, 92, 172, 102, 84, 164, 98, 84, 164, 94, 76, 156, 94, 76, 156, 90, 68, 164, 94, 76, 164, 94, 76, 164, 94, 76, 164, 98, 76, 180, 110, 92, 196, 126, 100, 196, 126, 108, 204, 130, 100, 196, 126, 108, 196, 130, 108, 196, 126, 100, 188, 122, 100, 196, 122, 100, 196, 126, 100, 196, 126, 100, 188, 122, 100, 188, 118, 92, 196, 130, 108, 196, 134, 108, 204, 134, 108, 204, 134, 108, 196, 130, 108, 196, 130, 108, 196, 126, 108, 196, 130, 108, 196, 126, 100, 188, 126, 100, 188, 122, 100, 196, 126, 100, 196, 126, 100, 196, 126, 108, 196, 126, 100, 188, 126, 100, 188, 122, 100, 196, 126, 100, 188, 122, 100, 188, 122, 100, 188, 122, 100, 196, 122, 100, 196, 126, 100, 196, 126, 108, 204, 130, 108, 196, 130, 108, 196, 130, 108, 196, 130, 108, 196, 130, 108, 204, 130, 108, 196, 130, 108, 204, 130, 108, 196, 130, 108, 196, 126, 100, 188, 126, 108, 196, 126, 100, 196, 126, 108, 196, 130, 108, 196, 126, 100, 196, 126, 100, 196, 126, 100, 188, 126, 100, 196, 126, 100, 196, 126, 108, 196, 130, 100, 196, 126, 108, 188, 126, 100, 196, 122, 100, 188, 126, 100, 196, 130, 108, 196, 130, 108, 188, 122, 100, 180, 114, 92, 188, 118, 92, 188, 122, 100, 188, 122, 100, 188, 118, 92, 188, 122, 100, 188, 118, 100, 188, 122, 100, 188, 118, 92, 188, 118, 100, 188, 118, 92, 188, 122, 100, 188, 118, 92, 188, 122, 92, 188, 118, 100, 188, 118, 92, 188, 118, 92, 188, 118, 92, 188, 118, 100, 180, 118, 92, 188, 122, 100, 188, 122, 100, 188, 118, 92, 188, 118, 92, 180, 114, 92, 180, 114, 92, 180, 114, 92, 188, 118, 92, 196, 126, 100, 188, 118, 100, 188, 122, 100, 188, 118, 92, 180, 110, 84, 180, 114, 92, 188, 122, 100, 188, 122, 100, 180, 114, 92, 180, 114, 92, 180, 114, 92, 180, 114, 92, 180, 118, 100, 180, 118, 100, 180, 114, 92, 172, 110, 92, 172, 106, 84, 164, 94, 76, 164, 102, 84, 180, 114, 92, 180, 118, 100, 172, 106, 84, 164, 98, 76, 164, 98, 84, 164, 98, 76, 164, 98, 84, 172, 102, 84, 172, 102, 84, 164, 98, 76, 172, 102, 84, 172, 106, 84, 180, 110, 92, 180, 110, 92, 180, 110, 92, 180, 110, 92, 180, 110, 92, 180, 110, 92, 180, 110, 92, 172, 110, 92, 180, 110, 92, 172, 106, 84, 172, 110, 92, 180, 118, 92, 188, 118, 100, 180, 114, 92, 180, 114, 92, 180, 114, 92, 180, 114, 92, 180, 118, 100, 180, 118, 100, 180, 118, 100, 180, 118, 100, 188, 118, 92, 180, 118, 100, 180, 118, 100, 188, 118, 100, 180, 110, 92, 172, 110, 100, 180, 114, 100, 180, 118, 100, 180, 118, 100, 180, 118, 100, 188, 122, 100, 188, 118, 100, 180, 106, 84, 172, 102, 84, 188, 114, 100, 164, 98, 76, 164, 98, 84, 172, 110, 100, 132, 78, 68, 92, 34, 20, 92, 34, 20, 132, 70, 52, 156, 90, 68, 164, 102, 76, 164, 98, 76, 164, 98, 84, 164, 98, 76, 156, 90, 68, 156, 94, 76, 148, 82, 60, 148, 86, 68, 148, 82, 60, 148, 82, 60, 148, 82, 60, 148, 78, 60, 148, 82, 60, 148, 86, 68, 148, 82, 68, 148, 82, 60, 156, 82, 68, 156, 90, 68, 164, 98, 76, 172, 102, 84, 172, 106, 84, 172, 106, 84, 164, 102, 76, 172, 98, 84, 164, 98, 76, 156, 90, 76, 156, 82, 60, 140, 78, 60, 140, 70, 52, 132, 70, 52, 156, 82, 60, 172, 98, 76, 188, 114, 92, 196, 122, 100, 196, 126, 100, 196, 126, 108, 196, 130, 108, 196, 130, 108, 196, 126, 100, 188, 126, 100, 196, 126, 100, 188, 126, 100, 196, 126, 100, 188, 122, 100, 196, 130, 108, 204, 130, 108, 196, 130, 108, 196, 130, 108, 196, 122, 100, 188, 122, 100, 196, 122, 100, 188, 126, 100, 196, 126, 100, 196, 122, 100, 188, 122, 100, 188, 122, 100, 196, 122, 100, 188, 126, 100, 188, 122, 100, 188, 122, 100, 196, 122, 100, 188, 122, 100, 196, 126, 100, 188, 122, 100, 188, 118, 100, 188, 118, 92, 188, 122, 100, 188, 126, 100, 196, 126, 100, 196, 126, 100, 196, 130, 108, 196, 126, 100, 196, 126, 100, 196, 126, 108, 196, 126, 100, 188, 122, 100, 196, 130, 108, 196, 130, 100, 196, 126, 108, 196, 126, 100, 196, 130, 108, 204, 130, 108, 196, 130, 108, 196, 126, 108, 196, 130, 108, 204, 134, 108, 196, 130, 108, 196, 130, 108, 196, 130, 108, 196, 130, 108, 204, 130, 108, 196, 134, 108, 204, 130, 108, 204, 134, 116, 196, 130, 108, 196, 122, 100, 188, 122, 100, 196, 126, 108, 196, 126, 100, 196, 126, 100, 188, 118, 100, 188, 118, 92, 188, 118, 92, 188, 122, 92, 188, 118, 100, 188, 122, 100, 188, 122, 100, 188, 122, 100, 188, 122, 100, 188, 118, 100, 188, 122, 92, 188, 118, 100, 188, 122, 100, 188, 122, 100, 188, 122, 100, 188, 122, 100, 188, 118, 92, 188, 122, 100, 188, 122, 100, 188, 118, 100, 188, 118, 92, 188, 114, 92, 188, 122, 100, 188, 122, 100, 188, 122, 100, 188, 118, 92, 188, 122, 100, 188, 122, 100, 180, 110, 92, 180, 114, 92, 188, 122, 100, 188, 122, 100, 188, 118, 100, 180, 118, 100, 180, 118, 100, 188, 122, 100, 188, 122, 100, 188, 122, 100, 180, 114, 92, 180, 110, 92, 172, 110, 92, 164, 102, 76, 164, 102, 84, 188, 118, 100, 180, 118, 100, 172, 106, 84, 164, 102, 84, 172, 110, 92, 180, 110, 92, 180, 110, 92, 180, 110, 92, 180, 110, 92, 172, 106, 84, 180, 110, 92, 172, 110, 92, 180, 110, 92, 180, 110, 92, 180, 114, 92, 180, 110, 92, 180, 114, 92, 172, 110, 92, 180, 110, 84, 180, 110, 92, 180, 110, 92, 172, 102, 84, 172, 106, 84, 172, 110, 92, 180, 110, 92, 172, 110, 92, 172, 110, 92, 172, 106, 92, 172, 110, 92, 180, 114, 92, 180, 114, 92, 180, 114, 92, 180, 114, 92, 180, 114, 100, 180, 114, 92, 180, 114, 92, 180, 114, 92, 180, 110, 100, 180, 114, 92, 180, 114, 92, 180, 114, 100, 180, 118, 92, 180, 122, 100, 188, 122, 100, 188, 122, 100, 188, 118, 100, 180, 110, 92, 188, 114, 100, 172, 102, 92, 172, 106, 92, 180, 118, 100, 132, 78, 68, 92, 34, 20, 92, 34, 20, 132, 74, 60, 156, 90, 68, 164, 94, 76, 148, 90, 68, 156, 86, 68, 156, 90, 68, 156, 90, 68, 164, 98, 84, 156, 90, 68, 156, 90, 68, 156, 90, 76, 156, 94, 76, 164, 98, 76, 164, 98, 84, 164, 102, 76, 172, 102, 84, 172, 102, 84, 172, 106, 84, 172, 106, 84, 180, 110, 92, 180, 110, 92, 180, 110, 92, 180, 114, 100, 180, 114, 92, 180, 110, 92, 180, 114, 92, 180, 114, 92, 180, 110, 92, 164, 98, 84, 164, 94, 76, 156, 90, 68, 156, 90, 68, 172, 102, 84, 180, 110, 92, 188, 118, 92, 196, 122, 100, 196, 122, 100, 188, 122, 100, 188, 122, 100, 188, 118, 92, 188, 118, 100, 188, 118, 100, 180, 114, 92, 188, 114, 92, 188, 118, 100, 188, 118, 92, 196, 126, 100, 188, 126, 100, 196, 122, 100, 188, 122, 100, 180, 118, 92, 188, 118, 92, 188, 122, 100, 196, 122, 100, 196, 126, 108, 188, 126, 100, 188, 122, 100, 196, 122, 100, 188, 126, 100, 196, 122, 100, 188, 122, 100, 188, 118, 92, 180, 110, 92, 180, 114, 92, 188, 118, 92, 180, 114, 92, 180, 110, 84, 172, 110, 84, 180, 114, 92, 188, 114, 92, 188, 126, 100, 196, 126, 108, 196, 126, 100, 196, 130, 108, 196, 126, 108, 188, 126, 100, 188, 126, 100, 196, 122, 100, 188, 122, 100, 188, 122, 100, 188, 118, 92, 188, 122, 100, 188, 122, 100, 188, 126, 100, 188, 122, 100, 188, 118, 92, 196, 130, 108, 196, 130, 108, 196, 126, 108, 196, 126, 100, 196, 130, 108, 196, 130, 108, 196, 130, 108, 204, 130, 108, 196, 130, 108, 196, 130, 100, 196, 122, 100, 180, 118, 92, 188, 118, 92, 188, 122, 100, 196, 126, 100, 180, 118, 100, 188, 118, 92, 180, 118, 92, 180, 114, 92, 188, 118, 92, 180, 114, 92, 188, 118, 92, 180, 114, 92, 188, 114, 92, 180, 114, 92, 180, 114, 92, 180, 114, 92, 180, 114, 92, 188, 118, 92, 180, 114, 92, 188, 118, 92, 188, 118, 92, 180, 110, 92, 188, 114, 92, 188, 122, 92, 180, 118, 92, 180, 110, 92, 180, 110, 92, 180, 118, 92, 196, 122, 100, 188, 118, 100, 180, 114, 92, 188, 122, 100, 188, 118, 92, 180, 110, 92, 180, 114, 84, 188, 118, 100, 180, 118, 92, 188, 118, 100, 188, 122, 100, 188, 122, 100, 188, 122, 108, 188, 122, 100, 188, 122, 100, 180, 114, 92, 172, 106, 84, 164, 98, 84, 156, 94, 76, 164, 94, 76, 164, 102, 76, 172, 102, 84, 164, 98, 76, 172, 106, 84, 188, 122, 100, 188, 118, 100, 188, 118, 100, 180, 114, 92, 180, 114, 92, 180, 110, 92, 180, 110, 92, 180, 110, 92, 172, 110, 92, 180, 110, 92, 172, 110, 92, 180, 110, 84, 172, 110, 92, 180, 110, 92, 172, 106, 92, 172, 110, 84, 172, 106, 92, 172, 102, 84, 172, 106, 84, 172, 110, 92, 172, 110, 84, 172, 106, 84, 172, 106, 84, 172, 106, 84, 172, 106, 84, 172, 102, 84, 164, 102, 84, 172, 106, 84, 172, 106, 84, 172, 106, 84, 172, 106, 92, 172, 106, 84, 172, 106, 92, 180, 110, 92, 172, 110, 92, 180, 106, 92, 172, 110, 92, 172, 110, 92, 180, 114, 92, 180, 118, 92, 180, 118, 92, 188, 118, 100, 188, 114, 100, 188, 118, 100, 180, 110, 92, 180, 118, 108, 180, 122, 108, 132, 78, 68, 92, 34, 20, 92, 34, 20, 108, 50, 28, 132, 66, 52, 140, 74, 52, 132, 70, 52, 140, 74, 52, 140, 78, 60, 148, 86, 60, 164, 94, 76, 156, 94, 68, 156, 94, 76, 164, 98, 76, 164, 102, 84, 172, 106, 84, 172, 106, 84, 172, 110, 92, 172, 106, 84, 180, 110, 92, 180, 110, 92, 180, 114, 92, 180, 110, 92, 180, 110, 92, 180, 114, 92, 180, 110, 92, 180, 114, 92, 172, 106, 92, 180, 110, 92, 180, 114, 92, 180, 114, 92, 180, 110, 92, 180, 114, 92, 188, 114, 100, 188, 122, 100, 180, 110, 84, 188, 114, 92, 180, 114, 92, 188, 114, 92, 180, 110, 92, 180, 110, 92, 180, 110, 92, 180, 114, 92, 180, 114, 84, 180, 114, 92, 180, 110, 84, 180, 110, 92, 172, 110, 84, 180, 110, 92, 180, 114, 92, 180, 114, 92, 180, 114, 92, 180, 110, 92, 180, 110, 84, 180, 110, 92, 188, 118, 92, 188, 122, 100, 180, 114, 84, 180, 110, 92, 180, 110, 84, 180, 110, 84, 180, 110, 92, 180, 114, 92, 180, 106, 84, 172, 106, 84, 164, 102, 76, 172, 102, 84, 180, 110, 84, 180, 110, 84, 172, 110, 92, 180, 106, 84, 180, 110, 84, 180, 110, 92, 180, 118, 92, 188, 118, 92, 188, 118, 100, 188, 122, 100, 188, 122, 92, 188, 118, 100, 188, 118, 92, 180, 114, 92, 188, 118, 92, 180, 114, 92, 180, 110, 92, 180, 114, 92, 180, 114, 92, 188, 114, 92, 180, 114, 92, 180, 114, 92, 188, 114, 92, 188, 118, 92, 188, 122, 92, 188, 118, 100, 196, 122, 92, 188, 122, 100, 188, 118, 100, 188, 122, 92, 188, 118, 100, 188, 118, 92, 180, 114, 92, 172, 106, 84, 180, 110, 92, 180, 118, 92, 188, 114, 92, 172, 110, 84, 180, 110, 84, 180, 110, 92, 180, 110, 92, 180, 110, 84, 172, 110, 84, 180, 106, 84, 172, 106, 84, 172, 106, 84, 172, 102, 84, 172, 106, 76, 172, 106, 84, 172, 106, 84, 172, 106, 84, 172, 106, 84, 180, 110, 84, 172, 106, 84, 172, 102, 76, 172, 106, 84, 180, 110, 84, 172, 106, 84, 172, 102, 84, 172, 102, 76, 180, 106, 84, 180, 114, 92, 188, 118, 92, 180, 114, 92, 188, 118, 92, 188, 122, 100, 180, 110, 84, 180, 110, 92, 188, 118, 92, 180, 114, 92, 180, 114, 92, 172, 114, 92, 180, 114, 92, 180, 114, 92, 180, 114, 92, 172, 110, 84, 164, 98, 84, 156, 94, 76, 140, 74, 52, 140, 78, 60, 148, 86, 68, 156, 90, 68, 156, 94, 76, 156, 98, 76, 172, 102, 84, 172, 110, 92, 172, 106, 92, 172, 106, 84, 172, 106, 84, 172, 102, 84, 172, 106, 84, 172, 106, 84, 172, 106, 84, 180, 106, 84, 172, 106, 84, 172, 102, 84, 172, 106, 84, 172, 102, 84, 172, 106, 84, 180, 106, 84, 172, 106, 84, 172, 106, 84, 172, 106, 84, 172, 110, 92, 180, 110, 92, 180, 110, 92, 172, 106, 92, 172, 106, 84, 172, 106, 84, 172, 110, 92, 164, 102, 84, 172, 102, 84, 164, 106, 84, 172, 106, 84, 172, 106, 92, 172, 106, 84, 172, 106, 84, 172, 106, 84, 172, 106, 92, 172, 106, 92, 164, 102, 84, 172, 102, 84, 164, 106, 84, 164, 102, 84, 172, 106, 84, 172, 106, 84, 180, 110, 92, 180, 106, 92, 180, 110, 92, 172, 102, 92, 172, 114, 100, 180, 118, 100, 132, 74, 60, 92, 34, 20, 92, 34, 12, 124, 58, 44, 148, 78, 60, 148, 90, 68, 156, 86, 68, 156, 94, 76, 156, 94, 76, 156, 90, 68, 164, 98, 76, 156, 94, 76, 164, 94, 76, 156, 94, 68, 164, 94, 76, 164, 98, 76, 164, 98, 84, 164, 98, 76, 156, 98, 76, 164, 94, 76, 164, 98, 76, 164, 98, 84, 164, 98, 84, 172, 102, 76, 164, 102, 84, 172, 102, 84, 172, 102, 84, 172, 106, 84, 172, 106, 92, 180, 106, 84, 172, 106, 92, 172, 106, 84, 180, 110, 92, 180, 110, 92, 180, 114, 92, 180, 110, 92, 180, 106, 84, 180, 114, 92, 188, 118, 92, 188, 118, 92, 188, 114, 92, 188, 118, 92, 188, 118, 92, 188, 118, 100, 188, 118, 92, 188, 122, 100, 188, 122, 100, 188, 118, 92, 180, 118, 92, 188, 118, 92, 188, 118, 100, 188, 118, 92, 180, 118, 92, 188, 114, 92, 180, 118, 92, 188, 122, 100, 196, 130, 108, 188, 114, 92, 180, 114, 92, 180, 118, 92, 188, 118, 92, 188, 118, 100, 188, 118, 92, 180, 114, 92, 180, 110, 84, 180, 110, 92, 180, 114, 84, 180, 114, 92, 180, 114, 92, 188, 118, 92, 188, 118, 100, 188, 118, 92, 188, 118, 100, 188, 118, 92, 188, 118, 100, 188, 122, 92, 188, 122, 100, 188, 122, 100, 188, 122, 100, 188, 122, 100, 196, 122, 100, 188, 126, 100, 188, 122, 100, 188, 122, 92, 188, 122, 100, 196, 122, 100, 188, 126, 100, 196, 122, 100, 188, 118, 92, 180, 118, 92, 188, 118, 100, 188, 118, 92, 188, 122, 100, 188, 122, 100, 188, 122, 100, 188, 122, 100, 188, 122, 100, 188, 118, 92, 188, 118, 100, 180, 114, 92, 180, 110, 84, 180, 110, 92, 188, 118, 92, 180, 114, 92, 180, 110, 92, 188, 118, 92, 180, 118, 92, 188, 114, 92, 180, 114, 92, 180, 110, 92, 180, 110, 84, 180, 110, 84, 180, 110, 84, 180, 110, 84, 180, 110, 84, 180, 106, 84, 180, 110, 84, 180, 110, 92, 180, 110, 84, 180, 110, 92, 180, 110, 92, 172, 106, 84, 180, 110, 84, 180, 114, 92, 180, 110, 92, 172, 110, 84, 172, 110, 84, 180, 110, 92, 188, 118, 92, 188, 118, 92, 180, 114, 92, 188, 118, 100, 188, 118, 92, 180, 110, 92, 180, 114, 84, 188, 118, 100, 180, 114, 92, 180, 110, 92, 172, 110, 92, 172, 110, 92, 172, 110, 92, 172, 110, 92, 172, 102, 84, 164, 98, 76, 156, 94, 76, 156, 94, 68, 172, 102, 76, 172, 110, 92, 172, 110, 84, 172, 106, 92, 172, 110, 84, 172, 106, 84, 172, 106, 84, 172, 106, 84, 180, 106, 92, 172, 106, 84, 172, 106, 92, 172, 102, 84, 172, 102, 84, 172, 106, 92, 172, 106, 84, 172, 102, 84, 172, 102, 84, 172, 102, 84, 172, 102, 84, 172, 106, 84, 172, 102, 84, 172, 106, 92, 172, 102, 84, 164, 98, 76, 164, 102, 84, 164, 102, 84, 164, 102, 76, 164, 98, 76, 164, 98, 76, 164, 98, 84, 164, 98, 76, 164, 98, 76, 164, 98, 76, 164, 102, 84, 172, 102, 84, 164, 102, 84, 164, 102, 84, 164, 102, 84, 164, 98, 76, 172, 102, 84, 172, 102, 84, 172, 102, 84, 164, 98, 84, 164, 102, 76, 164, 98, 76, 164, 98, 76, 164, 98, 76, 172, 98, 84, 172, 98, 76, 172, 98, 84, 164, 94, 84, 172, 110, 92, 172, 110, 100, 116, 62, 52, 92, 34, 12, 92, 34, 20, 148, 90, 68, 172, 106, 84, 172, 110, 92, 172, 106, 84, 172, 110, 84, 180, 110, 92, 164, 102, 84, 172, 106, 84, 172, 106, 84, 172, 106, 84, 164, 102, 84, 172, 106, 84, 172, 106, 84, 172, 110, 92, 172, 106, 84, 172, 106, 92, 172, 106, 84, 172, 102, 84, 172, 106, 84, 172, 106, 84, 180, 110, 92, 180, 110, 92, 180, 110, 92, 180, 110, 92, 188, 118, 100, 188, 114, 100, 180, 114, 92, 180, 110, 92, 180, 110, 92, 172, 110, 92, 180, 110, 92, 172, 106, 84, 188, 118, 100, 188, 118, 92, 196, 122, 100, 196, 126, 108, 204, 130, 108, 188, 122, 100, 188, 118, 100, 180, 118, 92, 180, 114, 92, 188, 122, 100, 196, 122, 100, 188, 122, 100, 188, 118, 92, 180, 110, 92, 196, 122, 100, 188, 126, 100, 196, 126, 100, 188, 122, 100, 188, 122, 100, 196, 126, 100, 196, 126, 108, 196, 130, 108, 196, 130, 108, 196, 126, 100, 196, 126, 108, 196, 130, 108, 196, 134, 108, 204, 134, 108, 196, 130, 108, 188, 126, 108, 188, 118, 92, 180, 114, 92, 180, 106, 84, 180, 110, 84, 180, 114, 92, 180, 118, 92, 188, 118, 92, 180, 118, 92, 188, 126, 100, 188, 122, 100, 196, 126, 100, 196, 126, 100, 196, 126, 100, 196, 130, 108, 204, 130, 108, 196, 130, 108, 196, 122, 100, 188, 122, 100, 188, 118, 100, 188, 118, 92, 188, 122, 100, 188, 122, 100, 188, 122, 100, 188, 118, 100, 180, 118, 100, 188, 118, 92, 180, 114, 92, 188, 118, 92, 188, 118, 100, 188, 122, 92, 188, 122, 100, 196, 122, 100, 180, 118, 92, 188, 118, 92, 180, 114, 92, 172, 110, 84, 180, 110, 84, 180, 114, 92, 188, 118, 92, 180, 114, 92, 180, 118, 92, 188, 114, 92, 180, 114, 92, 180, 114, 92, 180, 114, 92, 180, 114, 92, 180, 114, 92, 180, 110, 92, 180, 114, 92, 180, 110, 92, 180, 114, 92, 180, 110, 92, 180, 114, 84, 180, 110, 92, 180, 110, 84, 180, 114, 84, 180, 110, 92, 180, 114, 92, 180, 114, 92, 180, 110, 84, 180, 110, 92, 180, 114, 84, 180, 114, 92, 180, 118, 92, 180, 110, 92, 172, 106, 84, 180, 110, 84, 180, 110, 84, 164, 102, 76, 172, 102, 84, 180, 110, 84, 172, 110, 84, 172, 106, 84, 172, 106, 84, 172, 102, 84, 172, 106, 84, 172, 110, 84, 172, 106, 92, 172, 106, 84, 164, 98, 76, 180, 118, 100, 188, 122, 100, 188, 118, 100, 188, 118, 100, 180, 114, 92, 172, 106, 92, 172, 106, 84, 164, 102, 84, 180, 106, 84, 172, 106, 92, 180, 110, 92, 172, 106, 84, 172, 102, 84, 172, 102, 84, 172, 102, 84, 172, 106, 92, 172, 98, 84, 164, 102, 84, 172, 102, 84, 172, 102, 84, 172, 106, 92, 180, 106, 84, 172, 110, 92, 180, 106, 92, 164, 98, 76, 164, 98, 76, 164, 98, 76, 164, 98, 76, 156, 94, 76, 156, 94, 76, 156, 94, 76, 164, 98, 76, 164, 98, 84, 164, 98, 76, 172, 102, 84, 164, 102, 84, 172, 102, 84, 164, 102, 84, 164, 98, 76, 156, 94, 76, 172, 102, 84, 172, 102, 92, 164, 102, 84, 172, 102, 84, 164, 106, 84, 164, 106, 84, 164, 102, 76, 172, 102, 84, 164, 98, 76, 172, 102, 84, 172, 102, 84, 164, 94, 84, 172, 106, 92, 164, 106, 92, 116, 62, 52, 92, 34, 20, 100, 46, 28, 148, 86, 76, 164, 98, 76, 164, 98, 76, 156, 90, 76, 164, 98, 76, 164, 102, 84, 172, 102, 84, 172, 106, 84, 164, 102, 84, 164, 102, 84, 164, 98, 76, 164, 98, 84, 172, 106, 84, 172, 110, 92, 180, 110, 92, 172, 110, 84, 180, 110, 92, 180, 106, 92, 172, 106, 84, 180, 110, 92, 180, 110, 92, 180, 114, 92, 180, 110, 92, 172, 110, 92, 172, 106, 84, 172, 102, 84, 164, 102, 84, 172, 106, 84, 180, 106, 92, 180, 110, 84, 172, 106, 84, 172, 102, 84, 180, 110, 92, 172, 102, 76, 172, 98, 76, 172, 106, 84, 180, 106, 84, 172, 98, 76, 164, 98, 76, 164, 94, 76, 164, 98, 76, 172, 102, 76, 172, 110, 84, 172, 106, 84, 172, 98, 76, 156, 94, 68, 164, 94, 68, 164, 94, 76, 164, 98, 76, 164, 94, 68, 164, 94, 68, 156, 90, 68, 164, 94, 68, 164, 98, 76, 164, 98, 76, 164, 98, 76, 164, 98, 76, 172, 102, 76, 172, 106, 84, 172, 106, 84, 172, 102, 76, 164, 98, 76, 172, 106, 84, 164, 98, 76, 148, 86, 60, 148, 82, 60, 156, 90, 68, 164, 94, 76, 164, 98, 76, 164, 94, 76, 172, 98, 76, 164, 98, 76, 164, 98, 76, 172, 102, 84, 172, 102, 76, 172, 106, 84, 172, 106, 84, 180, 110, 84, 172, 106, 84, 172, 102, 76, 172, 102, 76, 172, 102, 76, 172, 106, 84, 172, 106, 84, 172, 102, 76, 172, 102, 76, 172, 106, 84, 172, 102, 84, 172, 102, 76, 164, 102, 84, 172, 102, 76, 172, 106, 84, 180, 110, 84, 180, 114, 92, 172, 102, 76, 172, 106, 84, 172, 102, 84, 164, 94, 76, 164, 98, 76, 172, 102, 76, 172, 102, 84, 172, 102, 76, 164, 98, 76, 172, 98, 76, 164, 102, 76, 172, 102, 76, 164, 98, 76, 172, 102, 76, 164, 102, 76, 172, 102, 76, 172, 102, 76, 164, 102, 76, 172, 102, 76, 164, 102, 76, 172, 98, 76, 164, 98, 76, 164, 102, 76, 164, 98, 76, 172, 102, 84, 172, 102, 76, 172, 102, 76, 164, 98, 76, 172, 102, 76, 172, 102, 84, 172, 102, 76, 172, 102, 84, 172, 102, 76, 164, 98, 76, 164, 98, 76, 164, 102, 76, 156, 90, 68, 164, 94, 68, 164, 98, 76, 164, 98, 76, 164, 94, 76, 156, 94, 76, 156, 94, 76, 164, 94, 76, 164, 98, 76, 164, 102, 84, 164, 102, 76, 164, 98, 84, 164, 94, 76, 156, 90, 68, 156, 90, 76, 156, 94, 68, 156, 94, 76, 156, 90, 68, 156, 90, 68, 156, 94, 76, 156, 86, 68, 156, 90, 68, 164, 98, 76, 164, 94, 76, 164, 94, 76, 164, 98, 76, 172, 102, 84, 180, 114, 92, 164, 102, 76, 172, 102, 84, 172, 102, 84, 172, 106, 84, 172, 106, 84, 180, 110, 92, 180, 110, 92, 180, 114, 92, 172, 106, 92, 180, 110, 92, 172, 110, 92, 180, 110, 92, 172, 106, 84, 172, 106, 84, 172, 106, 84, 172, 110, 92, 172, 110, 84, 172, 110, 92, 180, 114, 92, 180, 114, 92, 180, 114, 92, 172, 110, 92, 172, 110, 84, 172, 106, 84, 172, 102, 92, 172, 106, 84, 172, 106, 92, 172, 110, 92, 172, 110, 92, 172, 110, 92, 180, 106, 84, 172, 106, 84, 180, 106, 92, 180, 110, 92, 180, 110, 100, 172, 102, 84, 180, 114, 100, 172, 110, 100, 124, 66, 52, 100, 46, 28, 100, 42, 28, 148, 78, 68, 156, 90, 68, 156, 94, 76, 164, 98, 76, 164, 98, 76, 164, 98, 76, 156, 90, 68, 148, 82, 60, 148, 82, 68, 148, 86, 60, 148, 82, 68, 148, 86, 60, 148, 86, 68, 156, 90, 68, 148, 86, 68, 156, 90, 68, 156, 90, 68, 164, 94, 76, 164, 98, 84, 164, 98, 76, 156, 94, 76, 164, 94, 76, 164, 98, 76, 164, 98, 76, 172, 102, 84, 156, 90, 68, 164, 94, 76, 164, 98, 76, 164, 94, 76, 156, 86, 68, 156, 94, 76, 180, 110, 92, 172, 98, 76, 172, 102, 76, 172, 102, 84, 164, 98, 76, 172, 98, 76, 180, 110, 84, 188, 122, 100, 188, 118, 92, 180, 114, 92, 188, 118, 100, 188, 118, 92, 188, 122, 100, 180, 114, 92, 180, 110, 92, 172, 102, 76, 172, 106, 84, 188, 118, 92, 188, 122, 100, 188, 122, 100, 188, 118, 92, 188, 118, 100, 188, 118, 92, 172, 102, 76, 172, 102, 76, 180, 106, 84, 180, 110, 92, 180, 114, 92, 188, 118, 92, 188, 114, 92, 180, 114, 92, 188, 114, 92, 188, 118, 100, 188, 118, 92, 180, 114, 92, 172, 102, 76, 164, 98, 76, 172, 102, 76, 172, 106, 84, 180, 110, 84, 172, 110, 84, 172, 102, 84, 172, 102, 76, 164, 98, 76, 172, 102, 76, 172, 106, 76, 172, 102, 84, 172, 102, 76, 172, 106, 84, 180, 110, 92, 180, 114, 92, 180, 110, 84, 172, 110, 84, 180, 106, 84, 180, 110, 92, 172, 106, 76, 172, 110, 84, 180, 110, 92, 180, 110, 84, 180, 106, 84, 172, 106, 84, 180, 106, 84, 172, 110, 84, 180, 110, 84, 172, 102, 84, 172, 102, 76, 172, 102, 76, 164, 94, 68, 164, 98, 76, 172, 102, 76, 164, 94, 76, 172, 102, 76, 164, 98, 76, 164, 94, 76, 164, 98, 76, 172, 102, 76, 172, 102, 84, 172, 102, 76, 164, 98, 76, 164, 102, 84, 172, 98, 76, 164, 98, 76, 172, 102, 76, 164, 98, 76, 156, 90, 68, 156, 90, 68, 164, 94, 76, 172, 102, 76, 172, 106, 84, 172, 106, 84, 164, 98, 76, 164, 98, 76, 172, 102, 76, 172, 102, 76, 164, 98, 76, 164, 102, 76, 164, 98, 76, 172, 102, 76, 172, 102, 84, 164, 94, 68, 164, 94, 76, 172, 102, 76, 164, 98, 76, 164, 102, 76, 164, 94, 76, 156, 90, 68, 156, 94, 76, 164, 98, 76, 156, 94, 76, 156, 90, 68, 156, 94, 76, 156, 90, 68, 156, 94, 76, 164, 98, 76, 164, 98, 76, 156, 94, 76, 156, 86, 68, 148, 86, 68, 148, 82, 60, 156, 86, 68, 156, 86, 68, 156, 86, 68, 156, 86, 68, 156, 82, 60, 148, 86, 68, 156, 86, 68, 156, 90, 76, 156, 90, 68, 156, 86, 68, 148, 78, 60, 148, 82, 60, 156, 86, 68, 156, 90, 76, 156, 90, 68, 156, 86, 68, 148, 86, 60, 156, 86, 68, 148, 86, 68, 148, 86, 68, 156, 90, 68, 156, 90, 68, 164, 94, 76, 156, 94, 76, 156, 86, 68, 156, 90, 68, 156, 90, 68, 156, 90, 76, 156, 90, 68, 156, 90, 68, 156, 86, 68, 148, 86, 68, 156, 86, 68, 156, 86, 68, 156, 90, 68, 156, 90, 76, 164, 98, 76, 164, 102, 76, 164, 102, 84, 172, 106, 84, 172, 102, 84, 164, 90, 76, 172, 102, 84, 172, 102, 84, 164, 102, 92, 164, 102, 92, 124, 70, 60, 100, 42, 28, 84, 30, 12, 132, 70, 52, 140, 74, 60, 148, 78, 60, 140, 74, 52, 140, 74, 60, 140, 78, 60, 140, 78, 60, 140, 74, 52, 148, 78, 60, 148, 82, 60, 148, 82, 60, 148, 82, 68, 156, 86, 60, 156, 90, 68, 156, 90, 68, 156, 90, 76, 148, 82, 68, 156, 90, 68, 156, 90, 68, 164, 90, 68, 156, 90, 68, 156, 86, 68, 156, 90, 68, 164, 90, 76, 172, 102, 84, 156, 94, 76, 156, 90, 68, 172, 98, 84, 164, 102, 84, 164, 94, 76, 164, 94, 76, 172, 102, 84, 180, 110, 84, 180, 110, 92, 188, 114, 92, 180, 110, 84, 180, 110, 92, 188, 114, 92, 188, 118, 92, 188, 118, 92, 180, 118, 92, 188, 114, 92, 188, 118, 92, 180, 118, 92, 180, 114, 92, 180, 110, 84, 180, 114, 92, 180, 118, 92, 188, 118, 100, 180, 114, 92, 180, 114, 92, 180, 114, 92, 188, 118, 92, 188, 122, 100, 180, 114, 92, 180, 114, 92, 180, 110, 84, 180, 114, 92, 180, 114, 92, 180, 114, 92, 172, 110, 84, 172, 102, 84, 172, 106, 76, 180, 110, 92, 188, 118, 92, 188, 118, 100, 188, 118, 92, 180, 114, 92, 180, 110, 92, 180, 114, 92, 180, 110, 84, 180, 106, 84, 180, 110, 92, 180, 114, 92, 180, 114, 92, 180, 110, 92, 180, 110, 84, 172, 110, 84, 172, 102, 84, 172, 106, 84, 180, 110, 84, 180, 114, 92, 180, 110, 92, 180, 114, 92, 180, 110, 84, 180, 110, 92, 172, 106, 84, 180, 106, 84, 180, 110, 84, 172, 110, 84, 172, 106, 84, 172, 106, 84, 180, 106, 84, 180, 110, 92, 180, 110, 92, 172, 106, 76, 172, 106, 84, 172, 106, 84, 164, 94, 76, 164, 98, 76, 172, 106, 84, 172, 102, 76, 172, 102, 76, 164, 102, 76, 172, 98, 76, 164, 102, 76, 172, 102, 84, 172, 106, 76, 172, 102, 84, 172, 102, 76, 172, 102, 76, 164, 102, 84, 172, 102, 76, 172, 102, 84, 172, 102, 76, 164, 94, 68, 164, 94, 76, 172, 102, 76, 172, 106, 84, 180, 106, 84, 172, 106, 84, 172, 102, 76, 172, 102, 76, 172, 106, 84, 172, 106, 84, 172, 102, 76, 172, 102, 76, 164, 98, 76, 172, 102, 84, 172, 106, 76, 164, 94, 76, 164, 98, 76, 172, 102, 76, 164, 98, 76, 172, 102, 84, 164, 98, 76, 156, 94, 76, 164, 102, 84, 172, 102, 84, 164, 98, 76, 164, 98, 76, 164, 98, 76, 156, 94, 76, 164, 94, 76, 164, 98, 76, 164, 102, 84, 164, 98, 76, 164, 98, 76, 164, 98, 76, 164, 102, 84, 164, 94, 76, 156, 94, 76, 164, 94, 76, 156, 94, 76, 156, 90, 68, 156, 86, 68, 156, 90, 68, 164, 94, 76, 164, 94, 76, 156, 90, 68, 156, 86, 68, 156, 86, 68, 156, 94, 76, 164, 98, 76, 164, 94, 76, 156, 90, 76, 156, 86, 68, 148, 90, 68, 156, 90, 68, 156, 94, 68, 156, 94, 76, 156, 94, 76, 156, 94, 76, 156, 94, 68, 156, 94, 76, 156, 94, 76, 164, 94, 76, 156, 98, 76, 164, 94, 76, 156, 94, 76, 156, 90, 68, 156, 90, 68, 164, 94, 84, 156, 94, 76, 164, 98, 84, 164, 98, 76, 164, 102, 76, 156, 98, 76, 164, 98, 76, 164, 94, 68, 156, 82, 68, 132, 66, 44, 140, 70, 52, 148, 78, 68, 156, 90, 76, 156, 102, 84, 124, 66, 52, 84, 30, 12, 92, 38, 28, 132, 66, 52, 140, 74, 52, 132, 74, 60, 132, 66, 44, 124, 66, 44, 140, 70, 52, 140, 78, 60, 148, 82, 60, 148, 82, 68, 148, 86, 60, 148, 86, 68, 156, 86, 68, 148, 90, 68, 156, 90, 76, 156, 94, 68, 156, 94, 76, 164, 90, 68, 164, 94, 76, 164, 98, 76, 164, 98, 84, 172, 98, 84, 164, 98, 84, 172, 98, 76, 164, 102, 84, 172, 102, 84, 172, 98, 84, 164, 98, 76, 172, 102, 84, 180, 110, 84, 180, 110, 92, 172, 110, 92, 172, 102, 76, 180, 106, 92, 180, 110, 84, 180, 110, 84, 180, 110, 92, 180, 106, 84, 172, 102, 84, 180, 118, 92, 188, 114, 92, 180, 114, 92, 180, 114, 92, 180, 114, 92, 188, 114, 92, 180, 110, 92, 172, 110, 84, 188, 118, 100, 188, 118, 92, 188, 114, 92, 180, 114, 92, 180, 110, 84, 180, 110, 92, 180, 114, 92, 188, 118, 92, 188, 114, 92, 180, 114, 92, 180, 114, 92, 180, 114, 92, 180, 114, 92, 180, 110, 84, 172, 102, 84, 172, 102, 76, 172, 102, 76, 172, 110, 84, 188, 118, 100, 188, 122, 100, 188, 118, 92, 188, 118, 100, 188, 122, 92, 188, 122, 100, 172, 110, 84, 180, 110, 92, 180, 114, 84, 180, 114, 92, 188, 114, 92, 180, 118, 92, 188, 114, 92, 180, 118, 92, 180, 106, 84, 172, 106, 84, 180, 106, 84, 180, 114, 84, 180, 114, 92, 188, 114, 92, 180, 114, 92, 180, 114, 84, 172, 106, 84, 180, 106, 84, 172, 110, 92, 180, 110, 84, 180, 106, 84, 172, 106, 84, 172, 106, 84, 172, 110, 84, 180, 110, 84, 172, 106, 84, 172, 106, 84, 172, 106, 84, 164, 94, 68, 164, 98, 76, 180, 106, 84, 172, 110, 84, 172, 102, 84, 172, 102, 84, 164, 102, 76, 172, 102, 76, 172, 106, 84, 172, 106, 84, 172, 106, 84, 172, 102, 84, 172, 102, 84, 172, 102, 76, 172, 106, 84, 172, 106, 84, 172, 102, 84, 164, 98, 76, 172, 102, 76, 172, 106, 84, 180, 110, 84, 180, 114, 92, 180, 110, 84, 172, 106, 84, 172, 106, 84, 180, 110, 92, 180, 110, 84, 172, 110, 84, 172, 102, 84, 172, 102, 76, 172, 106, 84, 180, 110, 84, 164, 98, 76, 164, 98, 76, 172, 106, 84, 164, 102, 76, 172, 102, 84, 164, 98, 84, 164, 98, 76, 172, 106, 84, 172, 110, 84, 172, 102, 84, 164, 102, 84, 164, 102, 84, 172, 106, 84, 164, 102, 84, 164, 102, 84, 172, 102, 84, 164, 102, 84, 156, 94, 76, 164, 98, 76, 172, 106, 84, 172, 102, 76, 164, 98, 84, 172, 102, 84, 164, 98, 76, 164, 94, 76, 164, 94, 76, 164, 98, 76, 164, 98, 84, 164, 98, 76, 164, 94, 76, 156, 94, 76, 164, 94, 76, 172, 102, 84, 172, 102, 84, 164, 98, 76, 164, 94, 76, 156, 86, 68, 156, 90, 68, 164, 94, 76, 164, 98, 84, 164, 98, 76, 164, 98, 76, 164, 94, 76, 164, 94, 76, 164, 98, 84, 164, 102, 76, 164, 98, 76, 164, 102, 84, 164, 98, 76, 164, 98, 76, 164, 98, 76, 164, 94, 76, 164, 98, 84, 172, 102, 84, 172, 102, 84, 172, 106, 92, 164, 102, 84, 164, 98, 76, 156, 94, 68, 156, 90, 68, 156, 86, 68, 132, 62, 44, 140, 66, 52, 140, 74, 60, 156, 94, 84, 172, 110, 100, 132, 74, 60, 92, 38, 28, 116, 58, 44, 164, 106, 84, 180, 114, 92, 180, 114, 92, 172, 106, 84, 172, 106, 84, 172, 110, 92, 188, 122, 100, 188, 126, 100, 180, 114, 92, 180, 114, 100, 180, 114, 92, 180, 114, 92, 180, 114, 92, 180, 110, 92, 172, 110, 92, 180, 110, 92, 164, 102, 84, 172, 106, 84, 180, 106, 92, 180, 110, 92, 180, 114, 92, 180, 110, 92, 180, 114, 92, 180, 110, 92, 172, 110, 84, 180, 114, 92, 180, 114, 100, 180, 114, 92, 180, 114, 100, 188, 122, 100, 188, 122, 100, 188, 114, 92, 180, 114, 92, 188, 114, 92, 188, 114, 92, 188, 122, 100, 188, 114, 92, 180, 110, 84, 180, 110, 92, 180, 110, 84, 180, 110, 92, 180, 114, 92, 180, 114, 92, 180, 110, 84, 180, 110, 92, 180, 110, 84, 180, 114, 92, 180, 114, 92, 180, 114, 92, 180, 114, 92, 180, 110, 84, 180, 110, 92, 180, 110, 84, 180, 110, 92, 172, 110, 84, 172, 106, 84, 180, 106, 84, 180, 110, 84, 180, 110, 84, 180, 110, 84, 172, 106, 84, 172, 102, 76, 180, 110, 92, 180, 114, 92, 180, 114, 92, 180, 114, 92, 180, 110, 84, 180, 114, 92, 188, 118, 92, 188, 122, 100, 188, 114, 92, 180, 110, 84, 172, 106, 84, 172, 106, 84, 172, 106, 84, 180, 110, 84, 180, 114, 92, 188, 118, 92, 180, 110, 92, 180, 114, 84, 180, 110, 92, 180, 114, 92, 180, 114, 92, 180, 114, 92, 180, 110, 84, 172, 106, 84, 172, 102, 84, 172, 106, 76, 172, 106, 84, 172, 106, 84, 172, 102, 76, 172, 102, 76, 172, 106, 84, 180, 106, 84, 172, 110, 84, 172, 102, 84, 180, 110, 84, 172, 106, 84, 164, 94, 68, 164, 98, 76, 172, 106, 84, 180, 110, 84, 172, 106, 84, 172, 102, 76, 172, 102, 76, 172, 102, 84, 172, 106, 84, 172, 106, 84, 172, 106, 76, 172, 102, 76, 172, 102, 84, 164, 102, 76, 172, 102, 84, 172, 106, 84, 172, 106, 84, 172, 102, 76, 172, 102, 84, 180, 110, 84, 180, 110, 92, 180, 114, 84, 180, 110, 92, 172, 106, 84, 180, 106, 84, 172, 110, 84, 180, 106, 84, 172, 110, 92, 180, 106, 84, 172, 106, 84, 180, 110, 84, 172, 106, 84, 164, 98, 76, 172, 98, 76, 180, 110, 84, 172, 106, 84, 172, 102, 84, 164, 98, 76, 164, 102, 84, 172, 106, 84, 172, 110, 92, 172, 106, 84, 172, 102, 84, 164, 102, 84, 172, 106, 84, 164, 98, 76, 164, 98, 76, 164, 102, 84, 164, 98, 76, 156, 90, 68, 156, 90, 68, 164, 98, 84, 164, 98, 84, 172, 102, 76, 172, 102, 84, 164, 102, 84, 164, 98, 76, 164, 98, 84, 172, 102, 84, 172, 106, 84, 172, 98, 84, 164, 98, 76, 164, 98, 76, 172, 98, 84, 172, 106, 84, 172, 106, 84, 164, 98, 84, 164, 94, 76, 156, 94, 76, 164, 98, 76, 164, 98, 76, 164, 102, 76, 164, 102, 84, 164, 98, 76, 164, 98, 76, 156, 94, 76, 164, 102, 76, 172, 102, 84, 164, 102, 84, 164, 102, 76, 164, 102, 84, 164, 98, 84, 164, 98, 76, 164, 98, 84, 164, 98, 84, 164, 98, 84, 172, 102, 84, 164, 102, 84, 172, 106, 84, 164, 102, 84, 164, 98, 76, 164, 98, 76, 172, 102, 84, 164, 90, 68, 164, 90, 76, 164, 94, 76, 164, 102, 92, 172, 114, 100, 140, 82, 68, 116, 58, 44, 116, 62, 52, 148, 86, 68, 164, 98, 76, 164, 102, 84, 164, 98, 76, 156, 94, 76, 164, 98, 76, 164, 102, 84, 172, 102, 84, 164, 102, 84, 164, 102, 76, 164, 102, 84, 164, 98, 84, 164, 98, 76, 164, 102, 84, 164, 98, 76, 164, 98, 76, 172, 102, 84, 172, 102, 84, 172, 106, 84, 180, 110, 84, 172, 110, 92, 180, 110, 84, 172, 106, 92, 172, 106, 84, 164, 90, 76, 172, 106, 84, 180, 110, 92, 172, 98, 84, 164, 98, 76, 172, 106, 84, 180, 110, 92, 180, 114, 92, 180, 110, 92, 180, 110, 84, 188, 114, 92, 188, 118, 100, 188, 114, 92, 180, 110, 84, 172, 106, 84, 172, 106, 84, 172, 106, 84, 180, 110, 84, 180, 110, 84, 180, 114, 92, 180, 110, 84, 180, 114, 92, 180, 106, 84, 172, 110, 84, 180, 106, 84, 172, 106, 84, 180, 110, 84, 172, 110, 84, 180, 110, 84, 172, 110, 84, 172, 102, 76, 172, 102, 76, 172, 102, 76, 172, 102, 84, 172, 110, 92, 180, 110, 84, 172, 106, 84, 172, 102, 84, 172, 110, 84, 180, 110, 84, 180, 110, 84, 180, 110, 84, 172, 106, 84, 172, 106, 84, 180, 110, 84, 180, 110, 92, 180, 114, 92, 180, 114, 92, 172, 106, 84, 172, 102, 84, 172, 102, 76, 172, 106, 84, 180, 106, 84, 180, 114, 92, 180, 114, 92, 180, 114, 92, 180, 110, 84, 180, 110, 84, 180, 110, 92, 180, 114, 84, 172, 106, 84, 172, 106, 84, 172, 102, 76, 172, 102, 76, 172, 102, 84, 172, 102, 76, 164, 98, 76, 164, 98, 76, 172, 102, 76, 172, 106, 84, 172, 102, 84, 172, 102, 76, 172, 106, 84, 172, 102, 76, 156, 90, 68, 164, 94, 68, 172, 106, 84, 172, 106, 84, 172, 102, 76, 172, 98, 76, 164, 98, 76, 164, 98, 76, 172, 102, 76, 172, 102, 76, 172, 102, 84, 164, 102, 76, 172, 102, 76, 164, 98, 76, 172, 102, 76, 180, 106, 84, 172, 106, 84, 164, 102, 76, 172, 102, 76, 172, 110, 92, 180, 110, 84, 172, 110, 84, 172, 106, 84, 172, 106, 84, 172, 106, 84, 172, 106, 84, 172, 106, 84, 172, 106, 84, 180, 114, 84, 172, 106, 84, 180, 106, 84, 172, 106, 84, 164, 94, 68, 164, 98, 76, 180, 110, 84, 180, 114, 92, 164, 98, 84, 156, 98, 76, 164, 98, 76, 172, 106, 84, 172, 110, 92, 172, 106, 84, 164, 102, 76, 164, 102, 84, 156, 90, 68, 156, 90, 68, 156, 94, 76, 164, 102, 76, 164, 98, 76, 156, 94, 76, 164, 98, 76, 164, 102, 84, 164, 98, 76, 164, 98, 76, 164, 98, 84, 172, 98, 76, 164, 98, 84, 172, 98, 76, 172, 102, 84, 172, 106, 92, 164, 98, 76, 164, 94, 76, 164, 98, 76, 164, 98, 84, 172, 106, 84, 172, 102, 84, 164, 98, 76, 156, 90, 68, 164, 98, 76, 164, 98, 76, 164, 98, 84, 164, 98, 76, 164, 98, 84, 164, 102, 76, 164, 98, 84, 164, 102, 76, 172, 102, 84, 164, 102, 84, 164, 98, 76, 164, 98, 84, 164, 98, 76, 164, 98, 76, 164, 102, 76, 164, 98, 76, 164, 98, 84, 172, 98, 84, 164, 102, 84, 164, 102, 84, 164, 102, 84, 164, 106, 84, 172, 102, 84, 172, 106, 84, 172, 102, 84, 172, 102, 84, 172, 102, 92, 164, 98, 84, 164, 102, 92, 156, 98, 84, 132, 74, 60, 116, 62, 52, 116, 58, 44, 148, 86, 68, 164, 94, 76, 164, 102, 84, 164, 102, 76, 164, 98, 76, 164, 98, 76, 164, 102, 84, 164, 98, 76, 172, 106, 84, 172, 106, 84, 172, 106, 92, 172, 110, 84, 172, 110, 92, 180, 110, 92, 180, 114, 92, 180, 114, 92, 164, 102, 84, 172, 102, 84, 172, 106, 84, 172, 106, 92, 180, 110, 92, 180, 110, 92, 172, 106, 84, 172, 102, 84, 164, 98, 84, 180, 114, 92, 188, 122, 100, 180, 114, 92, 172, 102, 84, 180, 106, 92, 188, 118, 100, 188, 122, 100, 172, 102, 84, 172, 106, 84, 180, 106, 84, 180, 110, 84, 180, 110, 84, 180, 106, 92, 172, 102, 76, 172, 102, 84, 180, 110, 84, 180, 110, 84, 180, 110, 92, 180, 110, 84, 180, 114, 92, 180, 114, 92, 180, 110, 84, 172, 106, 84, 172, 102, 76, 164, 98, 76, 172, 102, 84, 172, 106, 84, 180, 110, 92, 180, 114, 92, 172, 102, 84, 172, 102, 84, 172, 106, 84, 172, 106, 84, 180, 106, 84, 172, 106, 84, 172, 102, 76, 164, 98, 76, 172, 102, 76, 172, 102, 84, 172, 106, 84, 180, 110, 92, 180, 110, 84, 180, 110, 84, 172, 106, 84, 172, 106, 84, 180, 110, 84, 180, 114, 92, 180, 114, 92, 188, 114, 92, 180, 114, 92, 180, 110, 92, 172, 110, 84, 172, 106, 84, 180, 114, 92, 180, 110, 92, 180, 110, 84, 172, 110, 84, 180, 110, 84, 172, 106, 84, 172, 106, 84, 172, 102, 76, 172, 102, 84, 172, 102, 84, 172, 106, 76, 164, 98, 76, 164, 98, 76, 172, 98, 76, 172, 102, 84, 172, 106, 84, 172, 106, 76, 164, 98, 76, 172, 106, 84, 172, 102, 84, 164, 94, 68, 164, 94, 76, 172, 102, 76, 172, 102, 76, 164, 102, 84, 172, 102, 76, 164, 98, 76, 172, 102, 76, 172, 102, 84, 172, 106, 84, 172, 102, 76, 172, 102, 84, 164, 102, 76, 172, 98, 76, 164, 102, 76, 172, 106, 84, 172, 102, 76, 172, 102, 76, 172, 102, 84, 180, 110, 84, 180, 110, 84, 172, 102, 84, 172, 102, 76, 172, 106, 84, 172, 106, 76, 172, 102, 76, 172, 102, 84, 172, 106, 84, 180, 110, 84, 172, 106, 84, 180, 110, 84, 172, 102, 84, 156, 90, 68, 164, 94, 68, 172, 110, 84, 180, 114, 92, 172, 102, 76, 164, 94, 76, 164, 98, 76, 164, 102, 84, 172, 106, 84, 164, 102, 84, 164, 98, 76, 164, 98, 84, 156, 94, 76, 164, 98, 76, 164, 98, 84, 164, 102, 84, 164, 98, 76, 164, 98, 84, 164, 102, 76, 164, 102, 84, 164, 94, 76, 164, 94, 76, 164, 98, 76, 164, 98, 84, 164, 98, 76, 164, 98, 76, 172, 102, 84, 172, 106, 84, 164, 98, 76, 164, 98, 76, 164, 94, 76, 164, 98, 76, 172, 102, 84, 172, 102, 84, 164, 94, 76, 156, 90, 68, 164, 98, 84, 164, 98, 76, 164, 98, 76, 164, 98, 76, 164, 98, 76, 164, 98, 84, 164, 102, 84, 172, 102, 84, 164, 102, 84, 164, 98, 76, 164, 98, 84, 164, 98, 76, 164, 98, 76, 164, 98, 84, 164, 98, 76, 164, 98, 84, 172, 102, 84, 164, 102, 84, 172, 102, 84, 164, 98, 84, 164, 102, 76, 164, 98, 76, 164, 102, 76, 164, 98, 76, 172, 98, 84, 164, 98, 76, 172, 98, 84, 164, 94, 76, 164, 98, 84, 156, 98, 84, 124, 70, 60, 116, 58, 44, 116, 62, 44, 164, 98, 76, 164, 102, 84, 172, 106, 84, 164, 98, 84, 164, 102, 84, 172, 102, 84, 172, 106, 84, 164, 102, 84, 164, 98, 84, 164, 98, 76, 164, 102, 84, 172, 102, 84, 172, 106, 84, 172, 110, 84, 172, 110, 92, 180, 110, 92, 172, 110, 92, 180, 110, 92, 180, 110, 92, 180, 114, 92, 180, 114, 92, 180, 114, 92, 180, 106, 92, 164, 102, 84, 180, 106, 84, 180, 114, 100, 188, 118, 100, 188, 118, 100, 180, 114, 92, 180, 110, 92, 180, 118, 100, 188, 118, 100, 188, 114, 92, 188, 118, 100, 188, 118, 92, 188, 118, 100, 188, 114, 92, 188, 122, 100, 172, 106, 84, 172, 106, 84, 180, 110, 84, 172, 110, 92, 180, 110, 84, 172, 106, 84, 172, 110, 84, 180, 110, 84, 180, 114, 92, 172, 106, 84, 172, 102, 84, 172, 102, 76, 172, 106, 84, 180, 110, 84, 180, 114, 92, 180, 114, 92, 180, 110, 84, 172, 110, 84, 172, 106, 84, 180, 110, 84, 180, 114, 92, 180, 110, 84, 172, 106, 84, 172, 102, 76, 172, 106, 84, 172, 106, 84, 180, 110, 84, 180, 114, 92, 180, 114, 92, 180, 114, 92, 180, 106, 84, 172, 106, 84, 172, 106, 84, 180, 110, 84, 180, 114, 92, 188, 118, 92, 188, 118, 92, 180, 114, 92, 180, 110, 84, 172, 106, 84, 180, 106, 84, 172, 106, 84, 180, 106, 84, 172, 106, 84, 172, 106, 84, 172, 102, 84, 172, 102, 76, 172, 106, 84, 172, 106, 84, 172, 106, 84, 172, 106, 84, 172, 102, 76, 172, 102, 84, 172, 102, 76, 172, 106, 84, 180, 110, 84, 180, 106, 84, 172, 102, 76, 172, 106, 84, 172, 106, 84, 164, 98, 76, 164, 98, 76, 172, 102, 84, 164, 98, 76, 172, 106, 76, 172, 102, 84, 164, 98, 76, 172, 102, 76, 172, 106, 84, 172, 106, 84, 172, 106, 84, 172, 102, 76, 172, 102, 84, 172, 102, 76, 172, 102, 84, 172, 106, 84, 172, 106, 84, 172, 98, 76, 164, 102, 84, 180, 110, 84, 172, 110, 84, 172, 102, 84, 172, 102, 76, 172, 106, 84, 172, 106, 84, 172, 98, 76, 172, 102, 76, 172, 106, 84, 172, 106, 84, 172, 102, 84, 180, 110, 84, 172, 106, 84, 156, 94, 68, 164, 90, 68, 172, 106, 84, 180, 110, 84, 164, 102, 84, 164, 98, 76, 164, 98, 76, 164, 102, 84, 172, 106, 84, 164, 98, 84, 164, 98, 76, 164, 98, 76, 164, 98, 76, 172, 106, 84, 172, 106, 84, 164, 98, 76, 164, 94, 76, 164, 98, 76, 164, 98, 84, 164, 98, 76, 164, 98, 76, 164, 98, 84, 172, 102, 84, 172, 98, 76, 164, 98, 76, 164, 94, 76, 164, 98, 76, 172, 102, 84, 164, 98, 84, 164, 94, 76, 164, 94, 76, 164, 94, 76, 164, 98, 84, 164, 98, 76, 164, 94, 76, 156, 86, 68, 164, 94, 76, 156, 94, 76, 164, 98, 76, 164, 98, 76, 164, 102, 84, 172, 102, 76, 164, 102, 84, 164, 102, 76, 172, 102, 84, 164, 102, 76, 164, 102, 84, 164, 98, 76, 164, 98, 76, 164, 98, 76, 164, 98, 84, 164, 102, 76, 164, 102, 84, 172, 98, 84, 164, 102, 84, 164, 98, 76, 164, 102, 84, 156, 98, 76, 164, 98, 76, 164, 94, 76, 164, 98, 76, 172, 98, 84, 172, 98, 84, 164, 90, 76, 172, 106, 92, 164, 106, 92, 132, 70, 60, 116, 62, 44, 116, 58, 44, 164, 98, 84, 164, 98, 76, 164, 98, 76, 156, 90, 68, 156, 90, 68, 164, 98, 76, 164, 102, 84, 164, 98, 76, 172, 106, 84, 172, 102, 84, 172, 106, 84, 172, 106, 84, 172, 106, 92, 172, 106, 84, 172, 110, 92, 172, 106, 84, 180, 110, 92, 172, 106, 84, 180, 110, 92, 180, 110, 92, 180, 114, 100, 180, 110, 92, 172, 106, 84, 164, 98, 76, 180, 110, 92, 180, 110, 92, 180, 114, 92, 188, 118, 100, 188, 118, 100, 180, 114, 92, 180, 110, 92, 180, 110, 92, 180, 114, 92, 188, 118, 92, 188, 118, 100, 180, 110, 84, 180, 110, 92, 188, 118, 92, 172, 106, 84, 180, 110, 84, 180, 114, 92, 180, 110, 92, 180, 110, 84, 172, 106, 84, 172, 106, 84, 180, 106, 84, 180, 110, 92, 172, 106, 84, 180, 110, 84, 180, 110, 92, 180, 114, 92, 180, 114, 92, 180, 110, 92, 180, 106, 84, 172, 110, 84, 180, 106, 84, 180, 110, 92, 180, 110, 84, 180, 118, 100, 188, 114, 92, 180, 114, 92, 180, 110, 92, 188, 122, 100, 188, 118, 92, 180, 114, 100, 180, 114, 84, 180, 110, 92, 180, 110, 84, 180, 110, 92, 180, 110, 84, 172, 106, 84, 172, 110, 84, 180, 110, 84, 180, 110, 92, 180, 110, 84, 180, 110, 92, 180, 110, 84, 180, 110, 92, 164, 98, 76, 172, 102, 76, 172, 106, 84, 172, 102, 76, 172, 102, 76, 172, 102, 76, 172, 106, 84, 180, 106, 84, 180, 110, 84, 180, 110, 84, 180, 110, 92, 172, 106, 84, 172, 106, 84, 172, 106, 84, 172, 110, 84, 180, 114, 92, 180, 110, 92, 172, 106, 84, 180, 106, 84, 180, 110, 84, 172, 102, 76, 172, 102, 76, 172, 102, 76, 164, 94, 76, 172, 106, 84, 172, 102, 84, 172, 106, 84, 172, 102, 84, 172, 106, 84, 180, 110, 84, 172, 106, 84, 172, 106, 84, 172, 106, 84, 172, 106, 84, 172, 106, 84, 180, 110, 84, 172, 106, 84, 172, 102, 76, 172, 102, 84, 180, 110, 84, 180, 110, 92, 172, 106, 76, 172, 102, 84, 172, 106, 84, 172, 106, 84, 172, 102, 76, 164, 102, 76, 180, 106, 84, 164, 98, 76, 164, 102, 76, 180, 110, 84, 172, 110, 84, 164, 94, 76, 156, 94, 68, 172, 102, 84, 172, 106, 84, 172, 106, 92, 164, 102, 84, 164, 98, 76, 164, 102, 84, 172, 102, 84, 164, 98, 76, 164, 98, 84, 164, 102, 84, 156, 90, 68, 164, 102, 84, 164, 102, 84, 156, 86, 68, 148, 86, 68, 172, 102, 84, 172, 110, 84, 172, 102, 84, 172, 102, 84, 172, 102, 84, 172, 102, 84, 164, 98, 76, 164, 94, 76, 156, 94, 76, 164, 94, 76, 164, 98, 76, 172, 98, 84, 164, 98, 76, 156, 90, 76, 164, 94, 76, 172, 98, 76, 164, 98, 84, 164, 94, 76, 156, 90, 68, 148, 90, 68, 156, 94, 76, 164, 94, 76, 164, 102, 84, 164, 102, 84, 164, 102, 84, 164, 98, 76, 164, 98, 84, 172, 106, 84, 164, 102, 84, 172, 102, 84, 164, 98, 76, 164, 98, 84, 164, 98, 76, 164, 102, 76, 164, 98, 84, 164, 94, 76, 164, 94, 76, 164, 98, 84, 164, 102, 84, 164, 102, 84, 164, 98, 76, 164, 94, 76, 156, 94, 76, 164, 98, 76, 164, 94, 84, 164, 98, 84, 156, 94, 76, 164, 106, 92, 164, 102, 92, 124, 66, 52, 116, 58, 44, 116, 58, 36, 164, 106, 92, 172, 106, 84, 164, 106, 84, 172, 102, 84, 164, 102, 84, 164, 102, 84, 164, 102, 76, 164, 98, 84, 172, 106, 84, 172, 106, 84, 172, 110, 92, 172, 110, 84, 172, 106, 92, 172, 106, 84, 172, 110, 92, 180, 114, 92, 180, 110, 92, 180, 110, 92, 172, 110, 92, 180, 110, 92, 188, 118, 92, 188, 118, 100, 180, 114, 100, 180, 114, 92, 180, 114, 92, 180, 114, 92, 188, 118, 100, 180, 114, 100, 180, 114, 92, 180, 114, 92, 180, 110, 92, 172, 106, 84, 188, 118, 100, 188, 118, 92, 188, 118, 100, 188, 118, 92, 188, 118, 92, 180, 114, 92, 180, 106, 92, 180, 114, 92, 188, 118, 100, 180, 114, 100, 180, 110, 92, 172, 106, 84, 180, 110, 92, 180, 114, 92, 180, 114, 92, 180, 110, 92, 172, 106, 84, 172, 106, 84, 180, 114, 92, 188, 122, 100, 188, 118, 100, 180, 118, 92, 188, 114, 100, 180, 118, 92, 188, 118, 100, 188, 118, 100, 188, 118, 100, 180, 114, 92, 180, 118, 92, 188, 118, 100, 188, 122, 100, 188, 118, 100, 180, 114, 92, 188, 114, 92, 180, 114, 100, 180, 114, 92, 180, 110, 92, 172, 106, 84, 188, 118, 92, 180, 114, 92, 172, 110, 84, 172, 110, 84, 172, 110, 84, 172, 110, 84, 180, 110, 84, 172, 106, 84, 172, 110, 84, 172, 106, 84, 180, 106, 84, 172, 106, 84, 180, 106, 84, 172, 102, 84, 180, 106, 84, 172, 106, 84, 172, 106, 84, 172, 106, 84, 180, 110, 84, 180, 114, 84, 180, 110, 92, 180, 110, 84, 180, 110, 92, 180, 110, 84, 172, 106, 84, 172, 106, 76, 172, 102, 84, 164, 102, 76, 164, 102, 76, 172, 102, 84, 172, 106, 84, 172, 106, 84, 172, 102, 76, 172, 102, 84, 172, 106, 84, 180, 110, 84, 180, 110, 92, 172, 106, 84, 172, 106, 84, 172, 102, 84, 180, 106, 84, 172, 106, 84, 180, 106, 92, 172, 106, 84, 180, 106, 92, 172, 106, 84, 172, 106, 84, 172, 106, 84, 172, 106, 84, 172, 110, 84, 180, 110, 84, 172, 110, 84, 172, 98, 76, 164, 102, 76, 172, 110, 84, 180, 118, 92, 172, 106, 84, 172, 110, 84, 172, 102, 84, 172, 102, 76, 164, 102, 76, 164, 98, 76, 164, 98, 76, 164, 98, 68, 164, 102, 84, 164, 102, 76, 164, 98, 84, 164, 98, 76, 164, 98, 76, 164, 98, 76, 164, 102, 76, 164, 102, 84, 164, 98, 76, 164, 98, 76, 156, 98, 76, 164, 94, 76, 156, 94, 76, 164, 98, 76, 164, 98, 84, 164, 106, 84, 164, 98, 76, 164, 98, 76, 156, 94, 76, 156, 94, 76, 164, 94, 76, 164, 98, 76, 172, 102, 84, 164, 102, 84, 164, 94, 76, 156, 98, 76, 164, 94, 76, 164, 98, 76, 164, 98, 76, 164, 102, 76, 164, 94, 76, 156, 94, 76, 148, 86, 68, 164, 94, 76, 164, 102, 84, 164, 102, 76, 164, 94, 76, 156, 94, 76, 164, 98, 76, 164, 98, 76, 164, 98, 76, 164, 98, 76, 164, 98, 76, 164, 98, 76, 164, 98, 76, 164, 98, 84, 164, 98, 76, 164, 98, 76, 164, 98, 84, 164, 94, 84, 164, 90, 76, 164, 94, 76, 164, 98, 84, 164, 98, 84, 164, 94, 76, 164, 94, 76, 172, 102, 84, 164, 98, 76, 172, 98, 84, 164, 98, 84, 172, 110, 92, 164, 102, 84, 124, 66, 52, 116, 58, 36, 108, 46, 28, 180, 110, 92, 180, 110, 92, 172, 110, 92, 172, 110, 84, 172, 106, 84, 172, 106, 84, 172, 106, 84, 172, 106, 84, 172, 110, 92, 172, 110, 92, 180, 110, 92, 172, 110, 92, 172, 110, 84, 172, 110, 92, 180, 114, 92, 180, 118, 100, 180, 110, 92, 172, 106, 84, 180, 110, 92, 180, 110, 92, 180, 114, 100, 188, 118, 100, 180, 114, 92, 180, 114, 92, 180, 114, 100, 180, 114, 92, 180, 114, 100, 180, 114, 92, 180, 110, 92, 180, 110, 92, 172, 106, 92, 180, 106, 84, 180, 114, 92, 180, 110, 92, 180, 114, 92, 180, 114, 92, 180, 114, 92, 180, 114, 92, 172, 110, 92, 180, 110, 92, 188, 118, 100, 180, 114, 92, 180, 110, 92, 172, 106, 84, 180, 106, 92, 180, 110, 92, 180, 114, 92, 172, 106, 92, 172, 106, 84, 180, 106, 92, 180, 114, 92, 188, 118, 100, 188, 118, 100, 180, 114, 92, 180, 110, 92, 180, 114, 100, 188, 118, 100, 188, 118, 100, 180, 118, 100, 188, 118, 100, 188, 118, 100, 188, 118, 100, 196, 126, 108, 188, 122, 100, 188, 118, 100, 188, 118, 100, 188, 122, 100, 188, 118, 100, 180, 118, 100, 180, 114, 92, 188, 118, 100, 180, 118, 92, 180, 110, 84, 180, 110, 92, 180, 114, 84, 180, 114, 92, 180, 110, 92, 180, 110, 84, 180, 110, 92, 180, 110, 84, 180, 110, 92, 180, 110, 92, 188, 114, 84, 180, 110, 92, 180, 110, 84, 188, 114, 92, 188, 114, 92, 180, 118, 92, 188, 118, 100, 188, 118, 92, 188, 122, 100, 188, 118, 92, 188, 118, 100, 180, 118, 92, 180, 106, 84, 172, 106, 84, 172, 102, 76, 172, 102, 76, 172, 102, 84, 172, 102, 76, 172, 106, 84, 172, 106, 84, 172, 102, 84, 164, 102, 84, 172, 102, 84, 172, 106, 84, 172, 106, 84, 172, 102, 84, 172, 102, 84, 164, 98, 84, 172, 106, 84, 172, 110, 92, 172, 106, 84, 180, 110, 92, 172, 106, 84, 172, 110, 92, 180, 106, 92, 172, 110, 92, 180, 110, 84, 172, 114, 92, 180, 114, 92, 172, 110, 84, 172, 106, 84, 172, 106, 84, 180, 114, 84, 180, 118, 92, 180, 110, 84, 172, 110, 84, 172, 110, 84, 172, 106, 84, 164, 102, 76, 172, 102, 76, 164, 102, 76, 164, 102, 84, 172, 102, 76, 164, 102, 84, 164, 98, 76, 164, 98, 84, 164, 98, 76, 164, 102, 84, 164, 102, 84, 172, 98, 76, 164, 98, 84, 164, 98, 76, 164, 94, 76, 156, 94, 68, 164, 94, 76, 164, 98, 76, 164, 98, 76, 164, 102, 84, 172, 102, 84, 164, 102, 84, 164, 98, 76, 164, 98, 76, 156, 94, 76, 164, 98, 76, 164, 98, 76, 164, 102, 76, 164, 98, 76, 164, 98, 76, 156, 94, 76, 164, 98, 76, 164, 102, 84, 164, 98, 84, 164, 98, 76, 164, 94, 76, 156, 94, 68, 164, 102, 84, 172, 106, 84, 172, 110, 92, 172, 102, 84, 164, 102, 76, 172, 102, 84, 164, 106, 84, 164, 98, 84, 164, 98, 76, 164, 98, 84, 156, 98, 76, 164, 98, 76, 164, 98, 76, 164, 98, 76, 164, 98, 84, 164, 98, 84, 164, 94, 76, 164, 94, 76, 164, 94, 76, 164, 98, 84, 164, 98, 84, 164, 98, 84, 164, 94, 76, 156, 94, 84, 156, 94, 76, 156, 94, 76, 156, 90, 76, 164, 98, 84, 156, 90, 76, 116, 54, 36, 108, 46, 28, 116, 54, 36, 172, 110, 92, 172, 110, 92, 180, 110, 92, 172, 110, 92, 172, 106, 84, 172, 106, 92, 164, 106, 84, 172, 106, 84, 172, 106, 84, 172, 106, 84, 172, 110, 84, 172, 106, 92, 172, 106, 84, 172, 106, 84, 172, 106, 84, 180, 110, 92, 172, 106, 84, 172, 106, 84, 172, 106, 84, 180, 110, 92, 180, 114, 92, 180, 114, 92, 188, 114, 100, 180, 114, 92, 180, 110, 92, 180, 110, 92, 180, 110, 92, 180, 110, 92, 172, 106, 84, 180, 106, 92, 172, 110, 84, 172, 106, 92, 180, 110, 84, 180, 110, 92, 180, 110, 92, 180, 110, 84, 180, 110, 92, 180, 106, 84, 180, 106, 84, 180, 114, 92, 180, 114, 100, 180, 114, 92, 172, 106, 92, 172, 106, 84, 172, 106, 84, 172, 106, 92, 180, 110, 92, 172, 106, 84, 172, 102, 84, 172, 106, 84, 180, 114, 92, 180, 114, 100, 180, 114, 92, 180, 114, 92, 180, 110, 92, 180, 114, 92, 188, 122, 100, 188, 118, 100, 188, 118, 100, 180, 114, 92, 180, 114, 92, 180, 114, 92, 180, 110, 92, 172, 106, 92, 172, 106, 84, 172, 106, 84, 172, 106, 92, 172, 106, 84, 180, 110, 92, 172, 110, 84, 180, 114, 92, 180, 114, 92, 172, 110, 84, 172, 110, 84, 172, 110, 84, 180, 110, 92, 180, 114, 84, 172, 110, 84, 172, 102, 84, 172, 106, 76, 172, 106, 84, 180, 106, 84, 172, 106, 84, 180, 106, 84, 180, 106, 84, 172, 106, 84, 180, 106, 84, 180, 110, 84, 172, 110, 92, 180, 110, 84, 180, 110, 92, 172, 110, 84, 180, 110, 84, 172, 106, 84, 172, 106, 84, 172, 106, 84, 164, 102, 84, 172, 102, 76, 164, 102, 76, 172, 102, 84, 172, 106, 76, 172, 106, 84, 172, 102, 84, 172, 102, 84, 172, 106, 84, 180, 106, 84, 172, 106, 92, 172, 106, 84, 172, 102, 84, 172, 102, 84, 172, 102, 84, 172, 106, 84, 172, 102, 84, 172, 106, 84, 172, 106, 92, 180, 106, 84, 172, 106, 92, 172, 110, 84, 180, 110, 92, 180, 110, 92, 172, 114, 92, 180, 110, 84, 172, 114, 92, 180, 110, 84, 172, 114, 92, 180, 110, 92, 172, 114, 92, 180, 110, 92, 172, 106, 84, 172, 106, 84, 164, 106, 84, 172, 106, 84, 164, 102, 84, 172, 106, 84, 164, 98, 76, 164, 98, 76, 164, 98, 84, 164, 102, 76, 164, 102, 84, 164, 98, 76, 164, 98, 84, 164, 98, 76, 164, 98, 76, 164, 98, 76, 156, 94, 76, 156, 90, 76, 156, 94, 68, 156, 94, 76, 156, 94, 76, 164, 98, 76, 164, 102, 84, 164, 102, 76, 164, 98, 76, 156, 94, 76, 156, 94, 76, 156, 94, 68, 156, 90, 76, 156, 94, 76, 164, 98, 76, 164, 98, 76, 156, 94, 76, 164, 98, 76, 164, 98, 76, 164, 98, 76, 164, 98, 76, 156, 94, 76, 156, 86, 68, 156, 94, 68, 164, 98, 76, 164, 98, 76, 156, 94, 76, 156, 90, 68, 156, 94, 76, 164, 94, 76, 156, 98, 76, 164, 94, 76, 156, 98, 76, 164, 94, 76, 164, 98, 76, 156, 94, 76, 164, 98, 76, 156, 94, 76, 164, 94, 76, 156, 90, 76, 156, 90, 76, 156, 90, 76, 156, 94, 76, 164, 94, 76, 156, 90, 76, 156, 94, 76, 164, 98, 84, 164, 94, 76, 164, 98, 84, 156, 94, 76, 164, 102, 84, 156, 94, 76, 116, 58, 36, 116, 54, 36, 116, 58, 36, 180, 114, 100, 180, 118, 92, 180, 114, 92, 180, 114, 92, 180, 114, 92, 180, 114, 92, 180, 110, 92, 172, 110, 92, 180, 114, 92, 180, 114, 100, 180, 114, 92, 180, 114, 92, 172, 110, 92, 172, 110, 92, 180, 114, 92, 180, 118, 100, 180, 114, 92, 180, 114, 100, 188, 118, 100, 188, 118, 100, 188, 122, 100, 196, 126, 108, 188, 122, 108, 196, 126, 100, 188, 122, 108, 188, 122, 100, 188, 118, 100, 180, 118, 100, 188, 114, 100, 180, 118, 100, 188, 118, 100, 188, 118, 100, 196, 126, 108, 188, 126, 100, 196, 126, 108, 188, 122, 100, 180, 114, 100, 180, 114, 92, 188, 122, 100, 196, 122, 108, 196, 126, 108, 196, 126, 100, 188, 118, 100, 180, 114, 100, 188, 114, 92, 180, 118, 100, 188, 122, 100, 188, 118, 100, 188, 114, 100, 188, 118, 100, 188, 122, 100, 196, 122, 108, 188, 126, 108, 188, 122, 100, 196, 126, 108, 196, 130, 108, 196, 130, 116, 196, 130, 108, 196, 126, 108, 188, 118, 100, 180, 114, 100, 180, 110, 92, 172, 106, 84, 172, 106, 84, 172, 102, 84, 172, 102, 84, 172, 106, 84, 180, 106, 92, 180, 114, 92, 180, 114, 92, 180, 118, 92, 180, 118, 92, 180, 118, 92, 180, 118, 92, 188, 118, 92, 180, 118, 92, 180, 118, 92, 188, 118, 100, 180, 114, 84, 180, 110, 92, 188, 114, 92, 180, 110, 92, 188, 114, 92, 188, 118, 92, 188, 118, 100, 188, 118, 92, 180, 114, 92, 180, 114, 92, 180, 114, 92, 180, 114, 92, 180, 110, 84, 180, 110, 92, 180, 110, 84, 180, 110, 84, 188, 118, 92, 180, 114, 92, 180, 114, 92, 180, 110, 84, 180, 110, 92, 180, 114, 92, 180, 114, 92, 188, 118, 92, 188, 118, 100, 188, 122, 100, 188, 122, 100, 188, 122, 108, 188, 122, 100, 188, 122, 100, 188, 122, 100, 188, 118, 100, 180, 114, 92, 180, 114, 92, 180, 114, 100, 188, 114, 92, 180, 118, 100, 188, 118, 100, 188, 118, 100, 188, 118, 100, 188, 122, 100, 180, 122, 100, 188, 118, 100, 188, 122, 100, 188, 122, 100, 188, 126, 108, 188, 122, 100, 180, 118, 92, 172, 106, 84, 172, 110, 84, 172, 106, 84, 164, 102, 84, 172, 102, 76, 164, 102, 76, 164, 102, 84, 172, 102, 76, 156, 94, 76, 164, 98, 76, 164, 98, 76, 164, 102, 84, 164, 98, 76, 164, 102, 76, 164, 98, 76, 156, 98, 76, 164, 98, 84, 164, 98, 76, 156, 94, 76, 164, 94, 68, 156, 94, 76, 156, 94, 68, 164, 94, 76, 156, 94, 76, 164, 98, 76, 164, 98, 84, 164, 98, 76, 156, 94, 76, 156, 90, 68, 156, 94, 76, 156, 90, 68, 156, 94, 76, 164, 94, 76, 156, 94, 76, 164, 94, 76, 156, 98, 76, 164, 98, 76, 164, 98, 84, 156, 98, 76, 156, 94, 68, 164, 94, 76, 164, 98, 76, 164, 102, 84, 164, 102, 84, 164, 98, 76, 164, 98, 76, 164, 98, 76, 164, 98, 76, 156, 94, 76, 156, 94, 68, 156, 94, 76, 156, 94, 76, 156, 94, 76, 156, 94, 76, 156, 94, 68, 156, 94, 76, 172, 98, 84, 164, 98, 84, 172, 98, 76, 164, 94, 84, 172, 98, 84, 164, 98, 84, 164, 98, 84, 172, 98, 84, 164, 98, 84, 164, 98, 84, 164, 106, 84, 164, 102, 84, 172, 110, 92, 164, 98, 84, 124, 66, 44, 116, 58, 36, 116, 50, 36, 172, 106, 84, 164, 102, 84, 172, 102, 84, 164, 102, 84, 172, 102, 84, 164, 102, 84, 164, 102, 84, 172, 102, 84, 164, 102, 84, 172, 106, 84, 164, 106, 84, 172, 102, 84, 164, 102, 76, 172, 102, 84, 164, 102, 84, 172, 106, 84, 172, 102, 84, 180, 106, 84, 172, 110, 92, 180, 114, 92, 180, 110, 92, 180, 114, 92, 180, 114, 92, 180, 114, 100, 180, 114, 92, 180, 110, 92, 180, 110, 92, 172, 106, 84, 180, 110, 84, 172, 106, 84, 180, 110, 92, 180, 110, 92, 180, 118, 92, 180, 114, 100, 180, 110, 92, 180, 110, 92, 180, 106, 92, 172, 102, 84, 180, 114, 92, 180, 114, 92, 180, 114, 100, 180, 114, 92, 180, 110, 92, 180, 106, 92, 172, 106, 84, 172, 106, 84, 180, 106, 92, 172, 110, 92, 172, 106, 84, 180, 110, 92, 180, 110, 92, 180, 114, 92, 180, 110, 92, 180, 110, 92, 180, 110, 92, 188, 114, 100, 188, 122, 100, 188, 118, 100, 180, 110, 92, 172, 106, 84, 172, 102, 84, 164, 98, 76, 172, 102, 84, 172, 102, 84, 164, 102, 84, 172, 98, 76, 164, 98, 84, 172, 106, 84, 180, 106, 92, 180, 110, 92, 172, 106, 92, 172, 110, 84, 172, 106, 84, 172, 110, 92, 172, 106, 84, 172, 110, 92, 180, 106, 84, 172, 110, 92, 180, 110, 84, 172, 110, 92, 180, 110, 84, 180, 110, 92, 180, 114, 92, 180, 114, 92, 188, 114, 92, 188, 114, 92, 180, 110, 92, 180, 110, 92, 180, 110, 92, 180, 110, 84, 180, 110, 92, 172, 110, 84, 172, 106, 84, 172, 106, 92, 172, 106, 84, 180, 106, 84, 172, 106, 84, 172, 102, 84, 172, 106, 84, 172, 106, 84, 172, 106, 84, 172, 106, 84, 180, 110, 92, 180, 110, 92, 180, 110, 92, 180, 114, 92, 180, 114, 100, 180, 114, 92, 180, 110, 92, 180, 110, 92, 172, 102, 84, 172, 102, 84, 172, 106, 84, 172, 106, 84, 172, 106, 92, 180, 110, 84, 172, 110, 92, 180, 110, 92, 172, 106, 92, 172, 106, 84, 172, 106, 84, 172, 110, 92, 180, 114, 92, 180, 110, 92, 172, 110, 92, 172, 102, 84, 172, 106, 92, 164, 102, 84, 172, 102, 84, 164, 102, 84, 164, 98, 84, 164, 102, 76, 164, 98, 84, 164, 102, 84, 164, 98, 76, 164, 98, 76, 164, 98, 84, 172, 102, 76, 164, 102, 84, 164, 98, 84, 164, 98, 84, 164, 98, 76, 172, 102, 76, 164, 102, 84, 164, 102, 76, 164, 98, 84, 164, 98, 76, 164, 98, 76, 164, 98, 76, 164, 98, 76, 164, 98, 76, 164, 98, 76, 164, 98, 76, 164, 94, 76, 164, 98, 76, 164, 94, 76, 164, 98, 76, 164, 98, 76, 164, 98, 76, 164, 98, 76, 164, 98, 76, 164, 98, 76, 164, 102, 84, 164, 102, 84, 164, 98, 76, 156, 94, 76, 164, 98, 76, 164, 98, 84, 172, 102, 84, 164, 102, 76, 164, 98, 84, 164, 98, 76, 164, 98, 84, 164, 98, 76, 164, 94, 76, 164, 94, 76, 164, 94, 76, 156, 94, 76, 164, 94, 68, 164, 94, 76, 164, 94, 76, 156, 94, 76, 164, 94, 76, 164, 90, 76, 156, 94, 76, 164, 94, 76, 164, 94, 76, 156, 94, 76, 164, 94, 76, 164, 94, 76, 156, 94, 76, 164, 94, 76, 164, 102, 84, 164, 102, 84, 172, 106, 92, 156, 94, 76, 124, 62, 44, 116, 50, 36, 108, 50, 28, 156, 86, 68, 156, 90, 68, 148, 86, 68, 156, 90, 68, 148, 86, 68, 156, 90, 68, 156, 86, 68, 148, 90, 68, 156, 90, 68, 156, 90, 76, 156, 94, 76, 156, 90, 68, 148, 86, 68, 156, 86, 68, 156, 90, 68, 156, 90, 76, 148, 86, 68, 156, 86, 68, 156, 90, 68, 164, 90, 76, 156, 90, 68, 156, 90, 76, 164, 90, 68, 156, 90, 76, 164, 90, 68, 156, 90, 76, 156, 90, 68, 156, 90, 68, 156, 90, 76, 156, 90, 68, 156, 90, 68, 156, 90, 68, 156, 86, 76, 156, 86, 68, 156, 90, 76, 156, 90, 68, 156, 90, 76, 156, 90, 68, 164, 90, 76, 164, 94, 76, 164, 94, 76, 156, 94, 76, 156, 90, 68, 156, 90, 68, 156, 86, 68, 156, 86, 68, 156, 86, 68, 156, 86, 68, 156, 90, 68, 156, 90, 68, 156, 90, 76, 164, 90, 68, 156, 90, 76, 156, 90, 68, 148, 86, 68, 156, 86, 68, 164, 94, 76, 164, 94, 76, 156, 90, 68, 156, 90, 68, 156, 86, 68, 156, 86, 68, 156, 86, 68, 156, 86, 68, 156, 86, 68, 156, 86, 68, 156, 86, 68, 156, 86, 68, 156, 90, 68, 164, 94, 76, 156, 90, 68, 156, 94, 76, 164, 98, 76, 164, 94, 76, 156, 94, 68, 156, 90, 68, 156, 94, 68, 164, 94, 68, 156, 86, 68, 156, 86, 68, 156, 90, 68, 156, 90, 68, 164, 90, 68, 164, 90, 76, 164, 90, 68, 164, 90, 76, 164, 94, 76, 156, 94, 68, 164, 94, 68, 156, 90, 68, 156, 90, 68, 164, 90, 68, 164, 94, 76, 156, 90, 68, 156, 90, 68, 156, 90, 68, 156, 90, 68, 164, 90, 68, 156, 90, 68, 156, 90, 68, 164, 90, 68, 156, 90, 68, 156, 90, 76, 156, 90, 68, 156, 90, 76, 164, 90, 68, 156, 90, 68, 156, 90, 76, 156, 90, 68, 156, 90, 76, 156, 90, 68, 156, 90, 76, 156, 86, 68, 164, 90, 76, 156, 90, 68, 164, 90, 76, 156, 94, 68, 164, 94, 76, 156, 90, 68, 156, 90, 76, 156, 90, 68, 156, 90, 76, 156, 94, 76, 156, 94, 76, 156, 90, 76, 148, 86, 68, 164, 98, 84, 164, 98, 76, 164, 98, 76, 156, 94, 76, 164, 94, 76, 156, 94, 76, 164, 94, 76, 156, 94, 76, 164, 94, 76, 156, 98, 76, 164, 98, 76, 164, 98, 76, 164, 94, 76, 164, 98, 76, 156, 94, 76, 156, 94, 76, 164, 98, 76, 164, 98, 76, 164, 98, 76, 164, 98, 76, 164, 98, 76, 164, 98, 76, 164, 98, 76, 156, 94, 76, 156, 94, 76, 156, 90, 68, 156, 94, 76, 156, 94, 76, 164, 94, 76, 156, 98, 76, 164, 98, 76, 164, 98, 84, 156, 94, 76, 156, 94, 76, 156, 94, 76, 164, 94, 76, 164, 98, 76, 164, 98, 76, 164, 94, 76, 156, 90, 76, 156, 90, 68, 156, 90, 68, 156, 94, 76, 156, 90, 68, 156, 90, 68, 156, 90, 68, 148, 90, 68, 156, 90, 68, 156, 90, 76, 156, 94, 68, 156, 90, 68, 156, 94, 76, 156, 90, 68, 156, 94, 76, 156, 90, 68, 156, 94, 68, 156, 82, 68, 156, 86, 76, 156, 90, 76, 156, 86, 76, 148, 86, 68, 156, 86, 68, 156, 86, 76, 156, 90, 68, 156, 94, 76, 164, 94, 84, 164, 98, 84, 156, 94, 76, 156, 98, 76, 148, 86, 68, 116, 54, 36, 108, 50, 28, 108, 50, 36, 140, 78, 60, 140, 78, 60, 148, 78, 60, 140, 78, 60, 140, 78, 60, 140, 78, 60, 140, 78, 60, 140, 78, 60, 148, 82, 60, 148, 82, 60, 148, 82, 60, 148, 78, 60, 140, 74, 52, 140, 74, 52, 140, 78, 60, 148, 82, 60, 140, 70, 52, 140, 74, 52, 148, 74, 60, 140, 78, 60, 148, 74, 60, 140, 74, 52, 140, 74, 52, 140, 78, 60, 140, 74, 52, 148, 78, 60, 140, 74, 60, 148, 78, 60, 148, 74, 60, 148, 78, 60, 148, 74, 60, 148, 78, 60, 140, 70, 52, 140, 70, 52, 148, 74, 60, 140, 74, 60, 148, 78, 60, 148, 78, 68, 140, 78, 60, 148, 78, 60, 140, 78, 60, 148, 78, 60, 148, 78, 60, 148, 74, 60, 140, 74, 52, 140, 74, 52, 140, 74, 52, 140, 74, 52, 140, 74, 52, 148, 74, 60, 148, 78, 60, 140, 78, 60, 148, 74, 60, 140, 74, 52, 140, 70, 52, 140, 74, 52, 140, 78, 60, 148, 78, 60, 148, 78, 60, 148, 78, 60, 148, 78, 60, 148, 82, 60, 140, 74, 52, 140, 74, 52, 140, 78, 60, 140, 74, 52, 140, 74, 52, 140, 74, 52, 140, 74, 52, 140, 78, 60, 140, 82, 60, 148, 82, 60, 148, 86, 68, 148, 86, 60, 140, 82, 60, 148, 78, 60, 140, 78, 60, 140, 78, 60, 140, 70, 52, 140, 70, 52, 140, 74, 52, 140, 70, 52, 140, 74, 52, 140, 70, 52, 140, 74, 52, 140, 74, 52, 140, 78, 60, 148, 74, 60, 140, 74, 52, 140, 74, 60, 140, 74, 52, 140, 74, 60, 140, 78, 60, 148, 78, 60, 156, 82, 60, 148, 82, 68, 156, 82, 60, 148, 82, 68, 148, 82, 60, 156, 82, 68, 148, 82, 60, 148, 82, 68, 148, 82, 60, 148, 82, 60, 148, 82, 60, 148, 82, 68, 148, 78, 60, 156, 82, 60, 148, 82, 68, 148, 82, 60, 156, 82, 60, 148, 82, 60, 156, 82, 68, 148, 82, 60, 156, 86, 68, 148, 82, 60, 156, 82, 68, 148, 82, 60, 148, 82, 68, 148, 82, 68, 148, 82, 68, 148, 86, 68, 148, 82, 68, 156, 86, 68, 148, 82, 68, 148, 82, 60, 148, 82, 68, 140, 78, 60, 148, 78, 68, 140, 78, 60, 148, 78, 60, 140, 78, 60, 148, 78, 60, 140, 78, 60, 148, 82, 60, 148, 78, 60, 140, 78, 60, 140, 78, 60, 140, 78, 60, 140, 78, 60, 148, 78, 60, 148, 82, 60, 140, 78, 60, 148, 78, 60, 140, 78, 60, 148, 78, 60, 140, 78, 60, 140, 78, 60, 148, 78, 60, 148, 82, 60, 140, 74, 52, 140, 78, 60, 148, 78, 60, 140, 78, 60, 148, 82, 60, 148, 82, 60, 148, 82, 60, 148, 82, 60, 148, 78, 60, 148, 78, 60, 140, 78, 60, 140, 78, 60, 148, 82, 60, 148, 82, 60, 148, 78, 60, 140, 78, 60, 148, 86, 60, 148, 82, 68, 148, 82, 60, 148, 82, 60, 140, 78, 60, 148, 82, 60, 148, 78, 60, 148, 78, 60, 140, 78, 60, 140, 78, 60, 140, 78, 60, 140, 78, 60, 140, 78, 60, 140, 78, 60, 148, 78, 60, 140, 78, 60, 148, 82, 68, 148, 82, 68, 148, 86, 68, 156, 82, 68, 148, 82, 68, 148, 82, 68, 148, 82, 68, 148, 86, 68, 148, 82, 68, 148, 78, 60, 140, 82, 60, 140, 74, 60, 140, 78, 60, 140, 74, 60, 116, 50, 36, 108, 50, 36, 108, 50, 28, 108, 42, 28, 108, 42, 20, 108, 42, 20, 108, 42, 20, 116, 46, 28, 108, 42, 20, 116, 46, 28, 108, 42, 20, 108, 46, 28, 108, 46, 28, 116, 46, 28, 108, 46, 20, 108, 42, 20, 100, 42, 20, 108, 42, 20, 108, 42, 28, 108, 42, 20, 116, 46, 28, 116, 46, 28, 116, 46, 28, 108, 42, 20, 108, 38, 20, 108, 42, 28, 116, 42, 28, 108, 42, 20, 116, 46, 28, 116, 46, 28, 116, 46, 28, 116, 50, 28, 108, 46, 28, 116, 46, 28, 108, 42, 20, 108, 42, 28, 116, 42, 28, 108, 46, 28, 116, 46, 28, 116, 46, 28, 108, 46, 28, 116, 42, 28, 108, 42, 20, 116, 46, 28, 108, 42, 20, 116, 46, 28, 108, 46, 28, 108, 42, 20, 116, 42, 28, 108, 38, 20, 108, 42, 28, 116, 46, 28, 108, 46, 28, 116, 46, 28, 108, 42, 20, 108, 42, 20, 116, 42, 28, 116, 46, 28, 116, 50, 28, 116, 50, 28, 116, 50, 28, 116, 46, 28, 116, 46, 28, 116, 46, 28, 116, 50, 28, 116, 46, 28, 116, 50, 36, 124, 50, 36, 116, 50, 28, 116, 46, 28, 116, 46, 28, 116, 46, 28, 116, 46, 28, 108, 46, 20, 108, 50, 28, 116, 50, 28, 116, 54, 28, 108, 46, 28, 108, 46, 20, 108, 42, 20, 108, 42, 20, 116, 50, 28, 116, 46, 28, 116, 46, 28, 116, 46, 28, 116, 46, 28, 108, 46, 28, 116, 46, 28, 116, 46, 28, 116, 46, 28, 116, 46, 28, 116, 46, 28, 116, 42, 28, 116, 46, 28, 116, 46, 28, 116, 50, 28, 124, 50, 36, 124, 58, 36, 124, 58, 36, 124, 58, 36, 124, 58, 36, 124, 58, 44, 124, 58, 36, 124, 58, 36, 124, 54, 36, 132, 62, 44, 124, 54, 36, 124, 58, 36, 124, 58, 36, 124, 58, 36, 124, 54, 44, 124, 58, 36, 132, 62, 44, 124, 54, 36, 124, 58, 36, 124, 58, 36, 124, 58, 36, 124, 58, 36, 124, 54, 36, 124, 58, 36, 124, 58, 36, 124, 58, 44, 124, 58, 36, 124, 58, 44, 124, 54, 36, 124, 58, 44, 124, 58, 36, 124, 58, 44, 124, 58, 44, 132, 62, 44, 124, 62, 44, 132, 62, 44, 124, 58, 44, 124, 58, 44, 124, 58, 44, 132, 62, 44, 124, 62, 44, 132, 62, 44, 124, 62, 44, 124, 62, 44, 124, 58, 36, 124, 58, 36, 124, 62, 44, 124, 62, 44, 132, 62, 44, 116, 58, 36, 124, 58, 36, 124, 58, 44, 124, 62, 44, 124, 62, 44, 124, 62, 44, 124, 62, 44, 124, 58, 36, 124, 62, 44, 124, 58, 36, 124, 62, 44, 132, 62, 44, 124, 62, 44, 132, 62, 44, 124, 66, 44, 132, 62, 44, 124, 62, 44, 124, 58, 36, 124, 58, 36, 124, 62, 44, 132, 62, 44, 124, 62, 44, 124, 62, 44, 124, 58, 36, 124, 62, 44, 124, 58, 36, 124, 58, 36, 124, 58, 44, 124, 58, 36, 124, 58, 36, 116, 58, 36, 124, 58, 36, 124, 58, 36, 124, 58, 36, 124, 58, 36, 124, 58, 36, 124, 58, 36, 124, 58, 36, 124, 58, 36, 124, 58, 36, 124, 50, 36, 124, 54, 36, 124, 54, 36, 124, 54, 36, 116, 54, 36, 116, 50, 36, 124, 54, 36, 124, 54, 44, 124, 54, 36, 116, 54, 36, 116, 54, 36, 108, 46, 28, 124, 58, 44, 124, 58, 44, 100, 42, 20, 108, 50, 28 }; xscreensaver-5.36/hacks/glx/xpm-ximage.h000644 000767 000024 00000002444 12701612217 020251 0ustar00jwzstaff000000 000000 /* xpm-ximage.h --- converts XPM data to an XImage for use with OpenGL. * xscreensaver, Copyright (c) 1998, 2002 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. */ #ifndef _XPM_TEXTURE_H_ #define _XPM_TEXTURE_H_ /* Returns an XImage structure containing the bits of the given XPM image. This XImage will be 32 bits per pixel, 8 each per R, G, and B, with the extra byte set to 0xFF. The Display and Visual arguments are used only for creating the XImage; no bits are pushed to the server. The Colormap argument is used just for parsing color names; no colors are allocated. */ extern XImage *xpm_to_ximage (Display *, Visual *, Colormap, char **xpm_data); extern XImage *xpm_file_to_ximage (Display *, Visual *, Colormap, const char *filename); #endif /* _XPM_TEXTURE_H_ */ xscreensaver-5.36/hacks/glx/grab-ximage.h000644 000767 000024 00000007152 12701612217 020361 0ustar00jwzstaff000000 000000 /* grab-ximage.c --- grab the screen to an XImage for use with OpenGL. * xscreensaver, Copyright (c) 2001-2006 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. */ #ifndef __GRAB_XIMAGE_H__ #define __GRAB_XIMAGE_H__ /* Grabs an image of the desktop (or another random image file) and loads the image into GL's texture memory. Most of the work is done in the background; when the image has been loaded, a callback is run. As a side-effect, that image *may* be painted onto the given Window. If mipmap_p is true, then make mipmaps instead of just a single texture. If desired_width/height are non-zero, then (if possible) the image will be scaled to fit in that rectangle. If they are 0, then the size of the window is used. These parameters are so that you can hint to the image loader that smaller images are acceptable (if you will never be displaying the texture at 100% magnification, you can get away with smaller textures.) Returns the sizes of various things: texture_width/height: The size of the texture itself, in pixels. This will often be larger than the grabbed image, since OpenGL sometimes requires texture dimensions to be a power of 2. image_width/height: The size of the image: this will usually be the same as the desired_width/height you passed in (but may be the size of the Window instead.) geometry: The position in the texture of the image bits. When image files are loaded, they are scaled up to the size of the window, but if the image does not have the same aspect ratio as the window, there will be black bars on the top/bottom or left/right. This geometry specification tells you where the "real" image bits are. So, don't use texture coordinates from 0.0 to 1.0. Instead use: [0.0 - iw/tw] If you want to display a quad that is the same [0.0 - ih/th] size as the window; or [gx/tw - (gx+gw)/tw] If you want to display a quad that is the same [gy/th - (gy+gh)/th] size as the loaded image file. When the callback is called, the image data will have been loaded into texture number `texid' (via glBindTexture.) If an error occurred, width/height will be 0. */ void load_texture_async (Screen *, Window, GLXContext, int desired_width, int desired_height, Bool mipmap_p, GLuint texid, void (*callback) (const char *filename, XRectangle *geometry, int image_width, int image_height, int texture_width, int texture_height, void *closure), void *closure); #endif /* __GRAB_XIMAGE_H__ */ xscreensaver-5.36/hacks/glx/tube.h000644 000767 000024 00000002452 12701612217 017133 0ustar00jwzstaff000000 000000 /* tube, Copyright (c) 2001, 2003, 2007 Jamie Zawinski * Utility functions to create tubes and cones in GL. * * 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. */ #ifndef __TUBE_H__ #define __TUBE_H__ /* Renders a tube along the line described by the two points. Returns the number of polygons used. */ extern int tube (GLfloat x1, GLfloat y1, GLfloat z1, GLfloat x2, GLfloat y2, GLfloat z2, GLfloat diameter, GLfloat cap_size, int faces, int smooth, int caps_p, int wire_p); /* Renders a cone along the line described by the two points. Returns the number of polygons used. */ extern int cone (GLfloat x1, GLfloat y1, GLfloat z1, GLfloat x2, GLfloat y2, GLfloat z2, GLfloat diameter, GLfloat cap_size, int faces, int smooth, int cap_p, int wire_p); #endif /* __TUBE_H__ */ xscreensaver-5.36/hacks/glx/sphere.h000644 000767 000024 00000001734 12701612217 017464 0ustar00jwzstaff000000 000000 /* sphere, Copyright (c) 2001-2014 Jamie Zawinski * Utility function to create a unit sphere in GL. * * 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. */ #ifndef __SPHERE_H__ #define __SPHERE_H__ /* Creates a diameter 1 sphere at 0, 0, 0. stacks = number of north/south divisions (latitude) slices = number of clockwise/counterclockwise divisions (longitude) Returns number of polygons used. */ extern int unit_sphere (int stacks, int slices, int wire_p); extern int unit_dome (int stacks, int slices, int wire_p); #endif /* __SPHERE_H__ */ xscreensaver-5.36/hacks/glx/boxed.h000644 000767 000024 00001106211 12701612217 017274 0ustar00jwzstaff000000 000000 /* GIMP header image file format (RGB-only): /home/shag/build/xscreensaver-3.33/hacks/glx/thebox.h */ static unsigned int width = 256; static unsigned int height = 256; /* Call this macro repeatedly. After each use, the pixel data can be extracted */ #define HEADER_PIXEL(data,pixel) \ pixel[0] = (((data[0] - 33) << 2) | ((data[1] - 33) >> 4)); \ pixel[1] = ((((data[1] - 33) & 0xF) << 4) | ((data[2] - 33) >> 2)); \ pixel[2] = ((((data[2] - 33) & 0x3) << 6) | ((data[3] - 33))); \ data += 4; # ifdef __GNUC__ __extension__ /* don't warn about "string length is greater than the length ISO C89 compilers are required to support" when including the following constant data... */ # endif static char *header_data = "!FY'\"&Q#!&M!!VM-!6Y(!&M##6Q&\"69%\"FU'!FE!!VM$!VI$!&M!!FM#!VU&!'!!" "\"&M%#&M!\"6Q$\"')#!FY#\"FY%\"6Y\"\"&Y#\"6]$\"&U!\"G%!\"7%&!G)!!'-!!')!\"'=!" "!G!##G5\"\"75$\"W9#!G5#!G9!!WA$#'=\"!GE#\"'A%#GI$!GI!#'A!!'E##GQ&%7Q#" "#WU%#W=%\"W]#\"GY\"%WQ)%7Y\"\"H-!\"W]&\"8!$%8%#$8-&\"8%!#81%$85)#H!##H-&" "$H1(#H)#\"X5#$XA%\"X9##H9#\"89#\"89!\"HA\"\"8A!\"8A!\"X=#$8E&#(I!\"8I&$HM!" "#8I%\"8M!!HM#!HM!!HU!$(M($8Q)!H])!XQ!\"8Y!$(]'$(Y'$8Q(\"XY%#XQ#\"I!$" "\"XY\"#Y)##)%#%(]%$Y!!#I%\"\")!%#Y!$#9%!#8]!#I%\"$)%$%HY%#HU\"$91($9-(" "$))$#95!%8]&!9-\"$X](\")!#!)%!%)-\"#9-$#)-&#I5\"$Y%!#)-)\"I-!#91!\"Y-\"" "\"(]\"$I-'#IA\"\"I-!#Y-&#)-##Y-##)1#!I-##)-#\"H]!#)5#\"Y-\"!)-!\"Y!&$)-!" "#)1#\"Y%##(]!$9-)\"I)!#)1#$Y%'\"XY\"\"91#!)1!#I)\"$)%%%(]&#HY\"#(]!#I)\"" "&8]%!(]!\"Y!##H]%#X]!#)%##(Y&\"I)!$X]!#Y!#\"(Y\"\"HY!#Y%'\"8Y!%(]+#XQ&" "\"8M#!XQ$\"Y%%\"8M!#XU!#HI\"$XQ$#XI&\"HI!#8A\"$8E\"#(5!#8A$$(A%\"8=#$(5(" "#X='$89##H=\"#(=!\"XA#\"(-#\"H1\"\"81!\"8-!!(5!\"X-##8!#\"H1%$(!&%X1$" "#(%$\"G]\"!8%\"\"7M!\"7U!#'Y$\"7M!#7Y##GI$#WI%!'M#\"7A!\"GI\"!G9!!GI&!GE!" "\"GE%!W=\"!'E#\"W!\"!G%%!W5&!G9!!W)\"\"'-#!7-'\"V]&!W1\"\"'%\"\"'%#\"&]\"!'1%" "\"&Y##FQ%!&U!\"FU!\"&Q#!&I!!FU#!&Y!!6M\"!FM%!FI!!&M!!VM\"!VM\"!FI%\"6Q$" "!&E#!VQ&!&E!\"FM!\"FM#!&Q!\"&I%#&I%\"&M*\"VM(!6U\"!6A\"!&I'!FM#!FM!\"6M\"" "!FE##FU%#V]$\"&Y#\"FY!\"F]%!F]!!V]\"!G1!\"7%\"#75(!G%!\"71$\"'-#\"'1!!G5&" "!W5$!G=!\"7)\"\"G=%\"7M#\"GM'!WA\"!'A!#7A*\"7I!#7Q&#X!*$'I!#'I\"$'U(\"7U!" "#7Y%!GY!#GY&\"7]!!H)!$H!+\"WY##X!'#X%'\"H1!\"()#\"H=\"\"X1(%X-(!H1!#X5!" "\"H5\"$8-&%X5'\"8-!#X-'\"XE%#H= '#XA$\"XE#\"XE#\"H=!#HE%\"XI\"!HM##(I'" "\"8A!#H=#\"H]!#(Q#\"8Q##(Y#!HE#\"HU!\"))%$(Y$#(Q#$H]&#X]!#X]#\"HU!!)%!" "\"Y!\"#I!&$)%%$)%$#Y-#$XQ*#95!#9)!&9%($)1'!Y)!\"Y-\"#9)$%I%'#)-#\"I-!" "$9)(!YA'&)-*!I%#!Y5!#Y)#%I-$$I5#\"Y1%#I)%#YA&$I1)#))#!Y5!#9-$#)1#" "\"I1!\"I1!!)1$\"I-!#I1%\"Y!#\"H]!#I)%#9)!#))#$9) -$$)='#Y1##I9\"!Y1$" "$)-'#Y)##I-%#99$!)-!#)-&!)-'$Y-+!9-\"%9)#\"X]\"$))'\"9=#$Y)!#Y%#$Y%(" "!I%&#Y!##(]!$I!'#9!!%I)!!Y!\"$H]#\"9!##8I(#8]$$(Y'\"I-!$8U##(Q##8I$" "$(U'!HU#$HU!#(Q!%(I)#H](#HU\"$(E(\"XM\"\"HI!\"XA#\"HE!\"(I%&(A(#HE%#XI!" "#H9##8=!\"HA$$8=#!H1##(=!%(1&\"H1!#85%\"X1#\"8-!$(-#\"8-!\"X-\"\"X%#\"X%!" "!H!#!H!!#8-%!'I!\"8%!\"GY%$7M)\"GM\"!'M!\"GU\"\"WU#\"WM!\"'I#\"8!!!75\"\"'I#" "\"79+\"G5\"\"'5!!GA#\"'-\"#'=\"!G%!#')'\"'=,!W5$\"'-#\"G!#\"')#\"'%#\"6U#!W!\"" "\"6]#\"G!%#'!$!VU\"!&Q!\"&Q#\"6]$!FM!!&]##&Q'!&Q!!6M$!6M&!&I!!69\"!G!#" "\"6I$!&E!!6Y\"!FI#!6M&!&M!!F='!&Q&!&M!!VE$!VI$\"&I'!6M\"\"&I#!FE!\"6E&" "#&Y%\"W)(!VU\"\"G!)!FU!#V]&!G9!!79&\"G-\"\"7)$!G1!\"G-$!W5\"\"71$\"'5#\"'5!" "!71\"\"'1\"!G9!!7A%\"'A#!G1&\"GI$\"'A!#7I%\"'E'#H!&\"WY#\"WM&$GU%\"']\"!GY!" "!WY!$H!+#W]'\"8!!\"X!#\"'Y#\"W]!!H)##X1'#H-##(5##89\"#H-!\"81!\"89##H1&" "%HE%\"8=!$(9%\"X9\"!X9!\"XA#\"HI$\"XE(#(I#$(Y*$8I(\"8I!#85!#XM!!HM!$8M&" "#(Y##(Q!#XQ!#XY##8Q$#(Q#$9%%#HY%\"X]\"$H]&!H]!\"8Y!!Y5!$I!)'I!'$)!!" "#9%!\"9!$%95#\"9%&#I1(#9)$\"9-#!Y%!\"Y!#\"))\"!HQ!\"I)!$91\"\"I-!#9!!$9))" "!)-'\"I-!$I5##)9#\"I5$#8]!#Y)##)1##)1#\"I9!$I-##9=!\"YA%$9-%\")5%\"I)!" "\"I5!$)-'$)1!\"9=#$Y5!\"Y)\"#Y5&!)A!\"Y-\"#I=!#91$#I%\"#)-#%I5!#)5##9)$" "#)1&!9-\"#91$\"I1!\"I1$\"Y9\"#I)%!I-#!I-##)-#\"I-!\"Y5\"#I)\"!))$\"))\"!)%!" "!X]!$)!(\"Y%#$9%\"#I%\"#I)\"$Y-'#I%#\"I!!#Y-##I%)!Y%!\"8]!#I-%#)%#$(Y'" "$)%%#XY#\"I!!\"8]!#(U#\"HA$#HU\"&HQ)&(Q*\"HU!#8M$\"8M!#8Q$#8Q$$(E(\"8E#" "#(A#\"HA!%85'#(=!%(=#\"H5\"#H9\"\"89!\"85!\"H-'!H5#\"8=!$85$\"8-!!X)!#'U$" "\"8%!\"8!!$H!$#(1!\"(%#!GU#!WY!\"WU#\"7U!$GU#\"7Q!#GI$\"7M!\"7M#\"GI%\"GI\"" "#WE*\"'E#\"WA&#'A'\"'I\"!')!\"G9\"\"W5$#W-#\"'1#\"'-#!7-\"\"&Y%\"G5\"\"'!#!'%#" "\"'%#\"F]'\"VY&!&Q!#&Y\"\"&U!\"&Q#!FQ!\"FQ%$VU*!&E!!FM%!VM&!VM$\"F9)\"&U)" "!&M#!&Q!!&I!!&M!!6Q\"\"6]&!&A!!FQ#!VQ$!6=\"!6Y&!6M\"$6M&#FM)!FQ!\"&Q#" "\"6M,\"6Y$#&]$\"V]*#FY)!F]!!G!!!&]!\"')\"!W)!\"7-&!G5!!'-!\"75#!G5!!G9!" "\"'A#!G5!!GA#\"WA#\"GA)!'E!#'A\"#GU!#WM%#7M%\"7M!#WY'#7Y%\"7Y!\"GM\"#7]%" "\"X)##']$\"8%!#8%$%(=&\"8%!\"8)$$X)#$()#$8%)\"8-!&X1(\"X=\"$H='$(=\"%H1&" "!HE#\"X=#\"89!!X5'$8A##XI&\"8A&#(I!&(Y##HI(#(]#\"8M!#8Q$!HQ!\"HQ!$(Y'" "\"XU\"#9!$$X](\"XM%#HU%\"XQ(#XU&\"8Y!#9-!#8Y$\"8Y!#I!\"\"9)#\"H]!\"8]!#8U!" "$9%##X]!\"X]\"\"I%!$Y!*!I)##9-$$914\")1(#I-%#)-#!))$$)5$$Y1*#91$\"Y1%" "$9=\"!Y9!\"9-#$9%)\"Y5\"&)-&$)5'\"Y%#\"I5!\"I='#)9##99$#)=##I9%\"YI!#)9#" "#)9#%I9.\"II!#Y9#\")=\"\"I9!%)1($Y9$\")E\"#Y9#\"Y9\"!YA$$I9)\"I5!#95$\")5(" "$)1'#Y=##Y9&$I5##Y9&\")9\"#Y5##)9##9=$#9-$!Y9!$)A'\"Y-\"&9-+!)-!\"Y-\"" "\"I)!\"I-!#91'#))##9)$\"XY\"#9)$#9%!$H]#!I)#%I)!&I%&$9!%%I1!!X]!\"8]!" "\"8]!\"I!\"$HU'!XY!\"XU\"#(Q##(U#%(U)$XE%#8I$!(U#\"8M#\"HU$#(Q!\"HM!#HU\"" "!XE$\"8M!\"85!!H9!\"XA\"#(=$\"X=##HI%$89##X5&\"89#!H=&#(1&\"85!\"(5\"#H-%" "$(!&#H)%#(5#\"()#\"8)$!G]#\"']\"#W]'#8!##WY'$X!)#7U#\"WQ#\"7Q!\"WM##'Q!" "\"7I!\"WI#\"G=\"$7E$#W5*\"'=#!G=!$75,#W='\"'5\"!79\"#71(!W%\"\"G%#\"')#\"'%#" "#G%$\"7)$!'!!\"'!#\"G%\"\"&Y#!VU\"!6M\"!FQ!\"6]&!6=\"!F]#!VM$!&U#\"FQ#\"&E#" "!&M#!VI$!VU*\"VU&!6M(!6Q\"\"FQ%#6M$!FQ#!FI#!VMM(\"&M#\"&U#\"&M#!F]&" "!FY(\"6Y$!7)\"#6U\"\"W)&!G!!\"G%##G)'!W)\"!'9!\"7-$#W5#\"'-#\"'9%!W-\"\"'=\"" "!'=!\"G9%#7Q##'E$\"GI#%'I'!GE#\"WQ!\"'Q\"\"WM##GY$#WY)\"7Y##8!%#X%!\"X%#" "#H)$\"H%\"%(5!#'Y!$8))#7]%#H-#$81$\"H5\"#89$#(=!#85!$(5($H-$#XMY\"" "$(E%!(M!#89\"$HM'\"(E\"\"HM!!(I!\"8I!!(I$#8]$#(E#%(Q)$HQ)#XQ'$(U'#8A$" "\"HI!#XY#\"8Y!#(]##9!!#8]$$)!(#Y%$$9%%$9%#%(]\"#9!!\"Y%##Y)##I-\"#8Y-" "\"I1!$9-\"$)5'\"I1!#))#\"I1!!))!#9%$!I)#\"I1!%)5\"\"95##91!$)5$$I5)#95!" "$9=%\"I1!\"YI\"\"I9!#99$\"I9!\"Y5\"#I=%$)9!$I=#$)='!YI!\"I9!%I='!)5!#Y9#" "$I=#!)A$\"I=!#I=%#9=$\"YQ!#)=##)A#\"YA\"\"I5!#I=(#Y9&\"II!!IA#\"9=##Y5#" "#)9#\"I1!\"IE!#Y9&\"YI\"#Y-&\"Y=\"\"I=!#I9%#)9##I9\"$Y1'&9A&#I1%\"I!'#)1#" "\"91#\"Y1\"#Y1&$))$$I5#!I%(\"I!$\"I)!#))#$Y)!#I1\"#I%##8]$#(]!$8Y\"#Y-#" "#HQ(\"XY\"\"I!!#(Y#\"Y1\"#8Y$$(Y(\"HU!\"XM\"#8U$%(I#\"XQ\"\"XY\"#(M!!HI&\"(I\"" "#HE#!HI!#HM(#8=$\"X=\"#XE'!(9&\"XE#$X=&#(A'\"81!\"H1!#8=$\"81$$81&#(-$" "#H-%\"8%!#H))$H)\"\"8%!\"X%!#8)%\"']%#(!!\"7U!\"'E#\"WU#!GM!\"GQ\"\"7Q!#WI%" "!WM$\"GA$\"WA!\"WE#!'A!\"'A#!7A\"#GA$!G5!\"G5$\"W5#!G5!!'1!\"W)$\"G5\"#&Y#" "\"'%#\"'%#\"F]##6M!!F]!#6](!G!!\"FU#\"6I$!VQ\"\"FM)!&Q!!&Y!!FM#!&=#\"FM%" "!6U\"!6M$!6M\"!FQ##&E%\"&M*!VM$!6Q\"\"6U(\"6M$\"6Q$\"6E\"!VM\"!FY#!VU$\"&]\"" "\"FI%!&U&\"'%#\"'!\"!W!\"!G!!\"W%#\"71$\"'-#\"7%$!G-!!F]!!G=!\"'-\"#GI#\"7A#" "\"7=$!WI\"\"GU\"!GE#\"GU\"#'Q$\"7Y&!'Q#\"W=$#7Y%$GY#\"GY%!G]#\"H)\"\"H!\"\"(!\"" "\"7Y!$(%%\"8)$$H-%\"X-\"\"X%#$(-(#H1##81%\"85!#(A#\"89!#(9##H=%#(=!!H=#" "\"XA%\"HE$#H=%!HI!$XQ+#(I#\"8E!#(Q#\"8M#\"XQ\"\"HI$#I%%%9%*#8Y$#(U#%)%\"" "\"X]%\"Y-\"\"8Y!\"I!!!Y!$#(U!\"I!!$))!!Y-!%I-+%9%&\"I)!\"I!!\"I-!$)-$#I1\"" "\"Y!%#)1#!91\"\"I-!#HY%\"I1!$Y-+#95!$I5&#Y=&#IA%\"I9!#Y9&#I=%\"I9!\"I9!" "#9E#$)M&\"I=!!9=\"$I=#\"Y9%#Y5)$)A!$)=$#I=\"%99\"%II&#Y9##YA#$IA##Y9&" "!)E!\"I5!#9A$$Y=!$9A$\"YM!#IA\"$YI&$IA%#I9\"$YA'#Y=#$)9$#9E!$9=%\"IE!" "\"Y5\"\"I9!\"IQ!#I=%%9I%\"I=!#)M#\"99&!)=!#YE%#99'$I9#$Y5'#)9##)9##)1#" "$I=#\")-%\"Y)\"!I1)'))'\"I-!\"I)!$9-%$)-!#H]%#9)!$I)#\"Y)\"#I!#\"I-!$)!$" "#I%\"#8Y$$8U##(Q#!X]!\"X]%%H]-\"(Y\"\"H]!\"XQ\"#XQ$#(Q&%(Q)#(Q#!HQ!\"8U#" "\"HQ!#XY&\"8Y!!HI&\"X=##(M#!(=!#8E%\"H9\"!H9#$()##8I$%(5&#()!#H9&!(-!" "#8-%#H-%#H9##']$\"8)!\"(%##X%!\"81!!(!$$H)(!(!$\"GY)#WQ'#7U#\"7Y#!GY#" "!'Q!\"WM#!'Q!\"W9#\"'E#!WE!\"GA%\"G=%\"'=#\"G9$!G1!!W5\"!7-\"#71(!W1'\"'%#" "\"F]%!7%'\"&]#!6Y$\"W-&#&]'!FY!\"&Q#\"&M#\"FI%$VY%!6M*\"VM&!&M!!&M#!FM#" "!&Q!!&U%!FM#!6M\"\"6M$!&I!\"&M%!&M!#&U%#&M'!7%$!FQ!\"VY&#&U%\"6Y&!W!$" "!6M$!FY!!&]#\"'%%\"'1\"!G1#\"V]\"\"W1&\"W5(!G9!!G9!!79\"!'5#!'=!\"GA\"!GA#" "!GE!#79\"\"WI!\"'I!#WE#\"GQ\"$'Q##7U#!GQ!\"X)\"\"7Y!\"'Y\"$'Y%!H!!\"8)!#(%$" "$H-%\"(%#%(!$#X-'\"X%#\"H%!#X1$#(5#\"89#\"X9\"#XQ&\"X=#\"89!#X=!#(E#\"HE$" "#HA##(E&#(M#\"XM%$(M!\"HI!$XM(#HQ%#HY%$H]&#)!#$9!+#H]\"%Y!#$(]$%I!+" "\"8]!#9!!#9%!!Y)$#9-!#9-!\")%\"\"I!\"#9-$\"I-!\"I-!\"Y9\"&)9##8]!$91%#)1#" "#9=$\"Y1\"#I9%#Y5##Y5&\"I5!$)='!Y1!#I1($9=(#)9#\"Y9\"\")=\"!YI!!Y=!!Y=!" "#Y%$$YA&#YA\"%9E%#9=!#95!#YA##99!$)5$%Y9%$YA&%9I)$)E$%9E)#)5##9E$" "#YM\"$IE%$YI$#9A!%)E!#9E!#9=!#Y=#$95%&)M\"$I5##I=!$)I$$YA&$IA%$9M!" "#Y5##YA\"$9=\"#YI#$)A$#)A#$)5$&9A.$IA($)1$#9E#\"I=!!I9##)A#!95\"\"II!" "\"99##Y1&!)9!\"Y!##Y=#$Y5.#))#\"(]\"\"I1!\"I5!\"9)#!Y-!$Y%*$))$\"I)$\"I)!" "$)%!$I)##9!!#9!\"$HE!$(]$#8]$\"8Y!#(]##HY%\"8U#!HY!#XU&\"XU\"\"HY!\"89!" "\"8M!#HI##XM'#XAQ$\"XI\"!H5##(9#\"XA#!H5#$X=%\"H9%$X9#%(=#$X5&#(5&" "$H1*%X%'#(-!$(-%#8)%#H-&\"8%!#()$$(!#\"8%!#X%!$']&\"WU#\"W]#\"7U!$'U#" "\"WQ!!GU!#'I$!'I#\"GI\"!GM!\"'I#!'E#\"WM#!W)!#'9&!G9!#'5\"!G5#!')!!7%&" "\"G-%\"W)&!79%\"')#\"7)$\"7-$#&]&\"&U!$6Y%!FQ!!W%!\"FY%!VM\"#6E\"!V]\"\"6M&" "!FU#!&M#!&Q!\"6M(!6M\"!&=#!VM$\"VE(\"VM$!V]\"\"&Q#\"&U#!6U$!FM!!&Y##'%%" "!G%!!W%!\"7%$!')#!')!\"G-%#'1&$'I!!G9#\"79+!75\"\"W9&\"71$\"W-&#'U\"\"7E#" "!WM$!'E#!GU##7I#\"WM(!G]!\"7U!#'A\"\"X!#$7]*#X!'\"8!!\"WI##(!$#H%&!H!#" "$8)$\"X)%#8-'#(5#!H5!!(=!%XE)\"89#!X9$\"H=!\"X=%#H5&\"HE!#(M#%8I'#HE#" "$HY)%(E+\"8]!\"8M!#(Q#\"XY\"!HI&!8I\"$8Y&\"8I!\"HI'\"XU\"#HY%#(])#8Y$#I!#" "#9!!#H]\"#I%\"\"Y-\"!))!$))!$9=%$9-)#I)\"#9-$\"I1'\"I1!%Y=(#))&$95\"#)5#" "$I9)#)5)$I9)&91'\"I5!%Y=$!)='\"Y-\"$Y-!#95!%9=)$IA\"$9=%%)A(#9A!#91!" "$)E#\"IA$#9E!#IE\"\"II!$9E$%)A%%)E$&IE.#)=#$)='$IA\"$)A!#9E!%IM&$)E$" "$)Q#$9I\"$)=!$IA#&9I'#9I$$9I$#9I!$9M!%)A+#IE$\"IE!$IA%%9=\"$9=%$Y=$" "$)I#!)E!#YQ##9E!#YE#&)A(!YA$%)A(#YA#&)A\"&9I&#IE\"$Y=!$9=(\"IA!\"Y1\"" "$9)\"!YA!#I9%#)%$#Y%#%95\"\"I)!$)5'\"I1!\"9%$\"I1$#Y)&#)-#$91(\"Y-%%)-%" "\"8]!#99'#)%#%Y%,\"I-!$)!!#9-!#9!\"!Y!!$HY##(U#\"I!$#(Y##(Y#%(]%#XU#" "#(Q#!XQ!#(Q##8I$#HQ%#8Q!#HQ\"\"XE#\"8I!#XE&\"XQ%#X9$\"XA0\"X5#$8-)!H9!" "#(=!\"XE#\"X=#$(1#\"7]#!X1!#8%\"#H)$!(%!#H%&\"H!\"\"X%#$8-'\"H%\"\"7Y!$(!(" "\"GQ$\"7E!!H%!#WM'\"7M!#7M#!GI#!WY$\"GA#!WE!!GE!#7I(\"W=!\"G9%\"')(#71$" "#G%\"!'%!\"'A'\"G1\"!G%#!'!!!G!#\"G1#!FU#!FY)#&U%!&U#!VY\"\"VQ$\"FQ%!FM*" "!VM$\"FI'\"&Q#\"&M#$&M)\"6M$!VM$\"&M##&M!\"&U##VU,\"&U!\"&U#\"FU%\"&]#!FY&" "#')%\"G)%!FY!$7-%\"')\"\"G1%!W1(!G5%\"G9$!'9!!G=!\"'=#!G1!!W=\"!GA!\"7I!" "\"7M!$'M(\"7M!\"7I!#WQ%\"WY#$GY%$'U#!7Y\"#W]$\"X!#\"X%#$(%%\"8)!#()!!X-$" "\"X-#&H9'\"H5'!H5!#H)&$8=##89$\"X9#\"X=#\"8A!%8A-#(9#\"HM!#XE##HA&\"(A\"" "\"8M!\"HA!!HI!#HQ%#HM&!XQ$$8U##XI#\"8Y!#XY##9%!#Y)&#HY%#9%!!X]$$9!&" "$I%'#)%$%)9%$I!*$Y%!!)-!#Y1#$8](#)9#$I5,\"Y1%#I5%#95!\"I1$$95(%II&" "$)A!\"I9!!)=!\"I=!\"Y5\"$9=%$IA#%9E\"#Y9#$9=+$)=$$)A$!Y=!$YI&#YA\"$Y=#" "$IQ%%IE$&)I,$)I#%9I%#YM#\"II!#YI\"#)Q\"#9I!#YM\"$)I#%IQ)&)I,$9Y!%II#" "#9M!#9M!%IA*%YA$%YQ!$)I#\"YM!#)=#\"IM!#9A!#YM#$9U$#IM\"%)I(%)M!#9E!" "#)I&#)M##Y9#'YI*#II\"#9E!#Y=\"$)E#&9E#%YE+%YE+#9I!#9A!%IQ#%9A\"$)=!" "#99!#Y1#!9=%#)9#%9=\"$)5!\"Y=\"\"Y=\"#I=%\"Y-\"!I%##)1#\"I1!%)=$#))&!(]#" "\"Y1%!I-##9)$#Y-&$91(#Y))#Y)##H]\"$I)#%I!!$X]*#9)!\"X]\"!8U%$8Y\"$(Y$" "\"8U!%HI%!XM!$(Q(\"8M##Y!'#(M&#(I'#(E$\"(U\"!(E!\"HE!!HI!$HA'!H=!\"8-!" "$89#\"HA!#89%#(9#\"81!\"(1\"\"(-\"#(5#$8).$()(\"8%!#7U%\"8!!\"GY$\"7]!#GY&" "\"GY\"\"WU##GQ&!GM#!GI#\"GM\"\"GI\"#7I%\"GE$!WA!\"'A%%'9#\"7=#$'A&\"'9#!W5\"" "\"79&!W-\"!G1!!W)!\"G)%!'%##G%\"\"&Y#!VY\"!&]!\"6Y$!FU!!VU\"\"&Q##6]#!FM%" "!FQ!!6Q$!6M$!6Q\"!6E\"\"W!&\"VM$!&I!!VM\"\"VQ##FQ)\"6Y#!W%\"\"7!\"#7)##'!%" "\"'%\"\"'1#\"G%##G-)\"71(\"W1!\"G-%\"79$!W9\"!G9!\"W=##7A#$'E(!'I!\"GU\"\"G=%" "\"W=#\"7=$!GE(\"WU##'U$#'I!#8%%$W](%8)(#'Y&!(!!\"']#\"(-#%'Y$#H-##X-'" "\"X9#\"(5\"#X=#\"8)(\"X=##X5'#X=!\"8=$\"8A!!HE!$XE%!HA!\"8I!$8I)$HE*#8M$" "#8Q2#8Y$$XQ*$HU&\"HM!$(]'\"(U\"#(]#\"H]!\"8]!$Y!!#9%!\"I!!#)1#\"9%$$))%" "#9-!#(]!#))#\"8Q!$9A(\"I5!$99($I-##)I##YE&!I1&$99(#IE$\"I9!$I9\"\"I5!" "\"IQ!\"IE$#9=$#9A!%IE$!YA!$)-$$II%$IE&$YA&$IQ\"$)I!\"IM!#YI#\"II$#9A!" "\"I9!#YM#%9M)#9I#\"II!#9I!#IM\"$I=##)Y#$9I!#IE\"#IM+#YU)#Y=##9Q!#9M!" "#9M!#9I!\"9U#$)Q'%)U'%)Q*$)A!$YU#%9M)#9Q!%IE##9M!#9E$$IQ&$)M#%YE$" "#)M%#IM!!YM$$II##YM#\"IU!$)E#%)A!$)Q$$)I'$II##9I!$IE#$9A!$II&$IE%" "$9A%#YA##IE!$YE*#9=!!)A!#9A'#9=!\"I9!%99#\"95#\")1%\"I-!!Y5!#Y%'$I5)" "$(Y'#91$#9)!$9-%!)!!\"95##9)!\"8Y&%9-#$)!%%)%&\"Y!\"#(]!#(]#\"9!#\"H]$" "$(M%#8M$#(M#$(Q(!XQ!#(Q#\"8U!\"9!##8M$!(=!#8E%\"XI\"#(I##(='\"XA\"\"8=#" "\"8A#!(=!$(9\"\"X=\"$(=\"$(1(\"X%#!8-(#H-&!H%%$8%$\"8-!\"W]#\"8%!#7Q&\"W]#" "#7Y#\"WY!&'E$#7U##'Q$\"7M!\"WQ#\"'A!#7M%!WE\"!WQ\"\"79\"#G=$\"GA%\"G)!!W9\"" "\"GM$%7)'#'-&!'-!\"7!$!W-!\"'%#!FU!\"&U#!F]!!W!\"\"&U#\"&Q#!FU#\"FU!\"&I)" "!FM!!6M\"!&]!!&=!!&M!#6M\"\"6]$$&Q'#6Y(!&U!\"&M#!F]!\"6Y#\"6Y$#'!'\"'1#" "!G)!!')$!'-#\"G-%#G5'!G5#!GE!\"'=##G9\"\"W=%!GA%\"7A!!'M#\"WM!\"GA#\"GU\"" "$GY*\"7Y!\"WY!#7Q\"#8!%\"7]!#']!!WY&\"7U!\"7U!$(-%\"X!##H)#$(!*#H9&$X-\"" "#X-!#85\"#H)&\"X9#\"H5!#(='\"8E!!H9!$8A##(Q#$8M##XI&\"8=!!)!$#HI#!XQ!" "$HU$\"(Y%\"XU\"!X]!#(U!$I1##I!&#)!&$))$#8]!$9%#'I%'\"I)$!I-##9)!$I9#" "!Y)!!Y-!\"I1!\"I1!#))#$I5&\"I5!!I5#%I9#\"Y9%#)=&#Y9&\"II!\"I=!$I1&$YE#" "$9I%')5*#9E!!YE!$IE&$IE%&YQ($IE#$YM#%)I/$9M!$YA$$IE##YM##YU\"%)U'" "\"IM$$IQ)#II!%YM.#9Q!$)Y##IM!$IQ&$IU\"$)U##9Q!$IQ&#YQ##9Q!$)U#$)Q#" "\"IU!$YQ##YQ#$9Q!\"II!$)M$')Q*$9I!$)M#$II%#YQ#'9I(#IU!$YY&\"Z!\"#9U!" "#YQ#!YE!$)U#\"IU##9I!$YI$$9M$#9M!%IQ'$IM\"#YI#%)5!#9M!#II\"#YI#%9E)" "#YE#\"IE!%9M)%9=*$99%#YI#\"YA\"$Y1!#Y=##99!#9=$\"9I&$9=%$Y5*#)9#\"Y=\"" "%9E)#)1#&)5##I1%$)5*%Y)\"$9-(#X]&!Y)!#(Y&#I!\"$I)'$))!$9!%#I%\"\"8]!" "\"X]\"\"I%!$I!##(U&\"HU!#(U#!XY$#8U$#9!$\"8E!\"(Y.#XI'$(I!#(A!#(M!\"XE#" "#(A##8=$%(=)\"X9##X9!$(1&#(5#\"89!#(1$$()%\"()%#8)%%8%#\"H!\"\"8!!$'Y%" "#7]%$(-#\"7Y!#(%$#7U##WU\"#7M%#'E+\"GE\"\"GE\"!GE!\"'E#\"'9!$'=&\"'9\"#'9+" "\"'E#\"W5#\"'1'\"71&!71$\"&U#\"'-!\"&Y#\"W%$\"G%!!F]!\"F]#!&]#!FU!\"&U#!6Q'" "!VQ$!VM\"\"VQ*!&Q!\"6M$\"&U#\"&I!\"&U#!G!!\"&]'!V]\"\"W!&!G!!!71\"!')!!')!" "\"'-\"\"'-!\"'-#!'!%\"W1##GI#!'5!!GI!!'E!\"G=%!WE)\"7=$#7I!!WM\"#'M$\"'M\"" "$7Y$\"GE#!X%$\"GY\"\"7]!\"8!!\"89!\"(!%#(%'\"H)\"\"8)#$X1&#X%$\"X1#\"(-($(1#" "#X5!\"89##89%#85%!8=\"\"H5\"$HA!#8=$%8]#\"XE\"\"XI\"\"(I\"#XE!#(Q##HI%!HU!" "\"HQ!\"8Y)!HM#\"8]!\"8U!\"X]\"$9%%%Y9!\"Y!\"$)%%$Y!'\"Y=\"$))!#Y-#$I-)\"I-!" "$Y1*\"Y1\"\"95#$)1'\"I5$#95$#95$\"I9!#)9#\"I=!%)=(\"I9$#IE\"!Y-$#9A!#9I!" "#I9\"#IE%\"I5!#)I#\"IM$$II&$9U$#)A#$IQ&&IM(%)M!%9E Q!#YQ#$YQ'%)Q!" "%9Q($YY#%9Y\"&)Q(&IM$%)Y'!YU$#YM#%)U($9U($9U$%9Q($9U!&YY%%)Y$$9U$" "\"IU'\"9M#%YE!#)]#!YQ!$YM##I]!&Y]$#)Y&\"YU$$)Y##II\"#9Q!%IU&\"9Y##IY!" "&9M-#YQ&$Y]&$YQ'$YQ##9Q!\"YQ!#9U!#9Q!\"YQ\"$IM&$)A-#YI\"#9Q!$II%#IM$" "\")A%\"YM\"#9I!$Y=!$9E\"$)5$#YA#%)9%!YA!#9=!#9A!#99!#)A#%IY*\"I9!\"Y9\"" "!Y-!\"I9!&)=&!)1!!91+\"I1!#91$#I5\"#I-%$H]##9)!#))#\"I1!\"Y-\"$9%&\"I)!" "$8U\"#(]#!(]!\"I%!#8U$\"8Y!#XU&#HE#$HQ&#HQ%#(Q##(M#$HI'#(I##(U##(E$" "\"X=#$XA(\"8=##(9#\"(9%\"X5\"!H5#\"X5\"#89%#85$$(!(#8-*!G]#!X!$\"X%\"#8)%" "\"X!#\"GY'!'U!\"7U!\"7U!!']#\"WQ#!WQ!$'U##7I!\"7E!!GE!#WA%\"'A*\"'A#!79\"" "\"75(\"W9#\"G5%!W5$!G=%\"7-$#')'!G)!#7)&!G-%$7!#\"&Q#\"7%$\"FY%#FU\"#FA#" "!&M!!&M!!VI$#&M#\"FQ!!&M!!G%!!6U$!FU!\"&Y#\"&]#\"'!\"!F]!!G!!!W)\"#W!!" "\"'-##'1&!'1!!G9!!G5!\"7A!!GI!\"7A$\"7Q#\"7A$\"W9!#7Q%\"7Q!#'U$$'Q&\"GQ\"" "!'M!\"7Y!\"7Y!\"7]$\"7]!\"'Y##'Y$!X%!\"X)-%$(9(#8-%#H9#!(I$#85%#(E$" "#89$#H=%!HA##(I#\"XA%#(A#$89!\"(I\"\"HI$!(I)\"Y!#$8Q(#HQ&&HM*#(Q#!HM!" "$(Y!!Y!'#)!##X]&\"9)#$9)\"#XU#!Y%$!Y)!$)1'!X]'$91%\"I-!$Y1!\")-\"\"9%#" "\")5\"$I1)#IE%#Y-&$I=)#)9#\"Y5%#Y9#\"IE$%)A%&91$#IA!#YE\"#9E!#)E##9M!" "\"II!#)I#\"9E##IM\"$YE*\"9I#%YQ'#I]!$)U##9Q!#9I!#I]!#9U!%)Q$%IY)#Y=\"" "%IQ*%9Q($)Y#%I=#%)U'$)U#\"IY!$)Y##9U$#9U!%I]#'J!'$)Y#$9Y$$*%&$IY&" "!YY!$)Q#$Z!##Z%)$I]%$YY##YY\"\"YM\"$IY&%YI!#IU\"\"IY!$)M$$9Y$\":!#'9]+" "%9Y(&YU$#YI#')Q%$IU%$IU%$)U##J)!\"9E##9U#$J%%!YQ!$9E\"$IY\"$)I#\"9M#" "\")I\"#9I!$YE U!$9A$$I]\"#99!#YI##9E!#IE!#YA#\"IE!#9A!#Y9##I9\"!)5!" "\")E%#)9##Y=&$)1'#)5##)5##))#\"I1!\"Y1\"%)I!\"I-$\"I-$$)%'#9)$\"Y%#$))$" "$Y%%$I)##X]!'I%*&(]&%HY$#8Y$#(Q#\"HM$#8U$#(]&\"H]!\"(=\"#XQ##(I#\"8Y#" "$(A(!(A!#8A$\"H%!#X='#H=##(9!#X=$#H5&\"X-#!(9!\"H)\"$H-*\"8!!\"8A!\"8%!" "!H!#\"(!#!GY#\"W]!#WY$\"7U#\"7Q!\"WU#\"7Q!\"WM#\"G9\"\"WY##7]%\"'I#!7A$!'9!" "\"'=##'I$\"75$!G5!!71\"\"'-#\"'-#!'!!\"7-$!G!!#'!%\"VU#\"&]#!FE!!F]!\"&U!" "!&I!!FM#!VE&\"6Y&\"&Q#\"6=(\"'!#!F]!\"&]##'%'#6]$!W%$!7)%!G)!\"G-%\"W1#" "\"'1##'5\"\"75$!'9!!G1%!G=!\"'1#$79%!GE!\"WQ#!7E\"%GU&!GE&\"'=!#X)'\"7U#" "\"GQ\"#'Y$\"WQ#\"8!!\"W]#\"X1#\"(%*\"()*\"8%!#81%$X-+#H!!%(=)!85\"#H=%#(=!" "#XI'#8A$!HA#\"X=\"\"8E!\"XQ\"$HM*\"XQ%\"8A!#H]\"\"8Q##XQ#\"XE#\"8U!\"8Y!\"Y-\"" "$H]&\"I-!#(Y!\")!##9)!#9%$\"9)&\")1\"#I)&$9)(\"Y1(#)9##))##91!!Y5!#I5\"" "\"I9!!Y9!\"I9!!Y=!\"II!#Y=##YA##Y9#$IA#&I=(&IE$%)E(#IA!'9E+%II##99!" "!)Q!#9M!#9=!'9M'$)M$#YQ#%II#$)Q$#IM\"#J!!%YE!$)Y##IY!#IQ!$9Y$$I]&" "&IY.$:)!%YM.%)M($Z!&\"Z!\"%9])$:!$$I]&$J%&%)]($:-#&)Y!$:!$#I]!$:)!" "#I]!$9]$%IY*#J)!#J)!%YU!$IQ%#IY!&*!$%*-'!I]#$9U$#Y]\"#YU\"\")M%\"I]'" "$)Y##Y]\"#IY!#9U!#9Y#\"YY!$9]$')Y\"$)Y#\"YQ!#9I!#9U!\"IE$%)M!#IY!$IQ&" "#9Q!#)Y&#YQ#%)M($9Y$%9I%$9E%#YI#\"YM\"!9I\"#IA\"%9E\"#Y=\"$)A!\"9E[!" "#9A!&9=&%Y=!\"I=!\"IE!#Y5##I9\"\"I9!#Y=\"#I-%\"Y-\"#91$#9%$!)5!!Y)!\"I)!" "\"8U!$Y-(!Y%!$)!$\"I!!\"H]!!Y!!#XY!&HY)#)!##8U$#8Q$!(Q!#XI##HQ%#HY%" "#8I$#8M(\"XI\"#XA!!8E\"#(A!#85%#X5'\"89&\"85#!(5#%(1$\"(1##H5&$8!)!(5!" "#(%$#85\"\"8-!\"WQ#\"7Q!#GU$\"X%\"\"WU##WU%\"WY#$'M!#'Y$#WQ'\"WM#!G=!\"'A#" "#'I'!W=\"#G1$\"79&!71\"!W%$!W1&!'-!#')\"!79\"!W%\"\"'5#!W)(#F]'\"&Y!!FU!" "!7!%!FY#\"VI&!FU##&Q#!6U\"\"6Y#!F]!!F]!!6]\"\"&]\"!G%!\"'5\"#G-)!'9%\"'%#" "\"G1#\"75,!W9\"!G1!!W5\"!W5\"!GQ!!GE!#7Q#\"'Q##8%*\"7U!\"WQ#\"WU#\"GY\"!WM)" "\"W]#!G]!#()$\"'Q\"#(%&$(%(#H))\"(1\"\"H-!!X)!\"HA\"\"85!\"85!\"XA#\"X=##(E$" "\"X=#!HA!\"8A!\"HE!\"(I%#HE%%8M'#HQM$#(U#!)!!$)%!#(I##XY&#(]#&)%*" "#8]$#91!$Y%!$I!$$I%'$Y)(!Y%!#I-\"#I-%#)9##I%%#)-#%I9.#)9##)A&$I9#" "\"I=!\"I9!!YE!!Y9!$YU'#9M!$IE##9=!!IA&#YM&$)I$%)E!%)A$$9A%$9M!%)Q$" "%)M(%YQ$!YU!#YM)$YI*$)] Q!#IY!#IU!$Y]&$9U!$)]#%*%'#IY!$IY\"#:!#" "#Z!\"#Y]\"#I]!$Z!\"%)]$$9Y$$*%##J%!$Y]'$:!$%J)*&*%!$J%&&*!($9U($I]%" "$:%$%*-'#YY\"#J%!$*!#$9Q!#J%!\"YQ!\"J%!$:-$#IY!%*1##J!!!*!!\"J!!$J!%" "%)](#9]$#I]!$9U$%)Q!!YQ!#J)$$YM#$)Y#$9U$$IY\"%)Y!#9M!&)](#9I!$)U#" "$9M!&)U$#)U##9Q#$*%##J%!\")M,$IU%$)M##YM&$YI&\")E\"\"II$$YE##YE#%)-(" "%)E$#IA!&9M&\"I1!\"YM\"\"I=!\"99#!)9*#9-!\"I1!#95!\"I9!#))##I)_$\"I)*" "#(Y!!Y-!!)-!#I%##I%##I!#%)1(\"I)!$8]\"#8Q!#(U#!(U!!8U(!XQ!\"8Q!!HE#" "\"8E!$HI$\"8I!\"XE(#XY#!XA!#H5&#(I##(5$!(9!#(5$$85&#H)#$X1#$8-&\"X-\"" "#85'!WQ'\"8!!\"X!#\"WY!#GY!\"X!#\"(%%#']$#'U'\"WM##WA'\"WM!!GQ%#'I$!GE#" "$'A&\"7A$\"'=!!W%\"!G=!!WA!#W=%!G1!\"7%$!'E%!G)!!FY!!F]!\"6Y$!F]!\"6Q$" "!&M'!FM!!FY!\"&U#\"&U#\"&Y\"!FU!!V]$!'!!#&]'!'%##7-#\"75&!G-!#7)#!G1!" "#'5&!G-!\"GE#!WA!#7A(!GM!\"7I##GM&$'Y(\"WA!\"WQ%!GQ!!WQ$#7Y%!W]!\"7]!" "!'U!#W]%\"X-##85%#()$\"85!\"(%#\"8!!#(1!$(9(!H-!\"89!\"X)#$(E'\"(=\"#XA'" "\"8A#\"X=#\"HE!#XY#\"XM\"\"H9!#(I#\"(I%\"8U!#9!!#8I\"$XU$\"(]\"\"Y%##XI!%)))" "#9)!$)-$$Y-$\"I-!\"Y%##)1##Y5##9=!\"I5!\"Y1\"!Y-$\")5\"$I1&#Y)&$9I%\"I9$" "#)5##YI##99!#)E##IE\"#IE%!YI!$9A$#9E!$9M!\"YM\"#9U!$)A$#YQ##9A!#9U!" "$9I$#)U#$9]!#II\"$99%#9]##J!!%9Q)&9Y\"$Y]'$9]$\"I]#$:!$%YI!#9U!#Z)\"" "\"9]\"$J!%$JA!#J!!#YY\"#Z!%$:!!\"Z%$\"YY$!Z-!$Z)##J-!$IY&#J!!%)]!%Y]'" "$J!&$*%##J1!%*!#%J-%!*%!%)I%!*-$$I]\"#Y]\"#9U!$*-#\"J%!#J)!\"YY\"$*!#" "$*!#$*%##J!!!YY!#J!!!YQ!$*%#$J!%$)]##J!$#J)!#)]#$)]#&:!&#IU!#YY\"" "%Z%+%9U\"$9U$#IU\"#IM%\"J%$#9Q#&II($9]'$9Q!$YM#$YU#$II%#9Q!#YE\"#9I!" "$)=$$)A!$II&#)A&$YA$$IA\"\"I=!$YE&\"I1!#))##)9#\"))\"\"I5!\"Y-\"\"XY\"!Y-!" "\"91##)-##))#\"Y-\"#)5##Y)##(Y!#9!!&Y!.\"X]\"\"I!!\"HY!#8]'$(Y'#XI'!8U%" "#XQ&\"8Q!!H]!\"8Q!&(M!#H5#!HE!!8M%\"HA!#H9&\"H=\"#81%#X5'#(5!\"X-\"#8-\"" "$(-(\"8%!$(5&#H%&!H!#\"8!!$GY#$(!%#'U$\"WU#\"GA#\"GQ\"\"7M!#7M%\"7]!#7I%" "!WU\"#'5'\"'E#!G=!\"'9\"#'9$\"'5#\"7-$#71%\"G5$\"'-!!G)!!G%!\"G%#\"FM#!FY!" "\"'!##&Q$#&U'!FU!!&]!\"&Y\"!F]!!G!!\"'!#\"'-#!')#\"W)\"#7)#!G1#\"'1\"!G=!" "!W9\"\"7M#\"'=#\"'Q#\"W=%#GM(\"GI#\"'E#\"WQ#!'Q!#'Q$!'E%\"7U!!'Y#\"W]#\"W]!" "\"WU#!X%$\"8%!#X%'#81%%(-'#X1&\"81!$(5(%(=&#(=!\"H9!#(=##HA\"\"XQ\"%8=$" "\"8E!!HM!\"8E!!89\"#(M#!XM!#(U##(Q#\"XU\"%8Y&%)!+!HY!#(E$$XU%%)!##Y1#" "#)%#\"Y)\"\"X]\"!)1!#I5%$)9$\"Y1\"#Y9#!Y5!#YE%#Y5##I=%$9=%\"IM!#YQ)$)A#" "#YE#%9Q)%9A\"!YA'#YI##YQ%$)U#$YA$#YM\"#YQ)%)=!'9M+$9Y!#9U!#IY!#)Y#" "\"IM!!IY#%YU*#YY\"$*%'\"J!!#)]##I]!%9])#9Q!$*%#$Z!#$:!$'Z!%!J!##Z!\"" "#Z%&#J%!#Z%\"#J%!!Z%!%IM&$J1%#J!$\"J%!$*)#%:1!$J)\"#J1!$Z!\"#Z!\"$Z!#" "#:1##I]!%Z)##J)!#Z)\"\"J!!%J)\"%Z-#$J%!#Z-\"$:-$#*5\"$:%$#J-!#I]!$*!'" "%*%##J5!$:%$$:%$$*1#\"Z-!#)]##Z!\"$)]#$*%#$9U!$*5#$Z%&$)]#$)Y#$)]#" "$I]%$)]#\"YU\"$9Y!$I]&%9Q(%*!!\"IQ!$IE%$9Q!%9Q($Z%#$9Q%%IQ##9I!#9I#" "%II*#9=!$)I!$95%$9U!#Y5#$IA%%99##Y=#%9A#!9I)\"Y1\"$Y5*\"9M#\"I5!\")5%" "#I5\"$I-'#)5#\"Y-\"#Y)&\"I%%%9!&$I) !!#Y!#&(Q'\"I!!#HU%#8U$#(M##8M$" "\"8Q!#8U$#XI'\"XM\"#(I#!HI!\"XA#\"XE\"!HE!#(A$#(I#\"XA#!(9'#X5Q\"\"(1#" "\"X1#!8-\"#H)%#H)%%'U\"!GI!#7Y\"\"G]\"\"W]#\"'Y%\"WU##7Q&!WE$\"7U#\"7E!$'M&" "$7M&\"'M#\"'9\"!7A$#'5&\"G9\"\"71&\"W5+\"'1!!'-!\"G-\"!G-#!G)'\"'%!\"7%$#VY$" "!&Q!\"W%#\"&U%\"F])!VU\"\"F]%!V]&$FU)!G%%#7)%!W1\"!G)!\"71#!G%'!W5\"\"G=#" "\"G-$\"'E!!G9!\"'A#!WA\"\"'A!#GM$$'M!\"8%!#7Q(#GU&!GY!#'Y$!WU$\"7Q&$H!\"" "#(%$$X%#!X!!\"8)!!8-%#(5#\"89!!(5!\"X5##XI##(=#\"H=!#8A!$(=%\"XE#!(9#" "\"XY%#(U##XM!\"X]\"$9!($(]!\"8M!\"HM!!HM#\")!##(]#\"I!!#Y%$$I!'!Y!!#I!%" "\"I)!\"9-#$Y1!#I)\"\")=%$I1#\"Y5\"$)9!#95$%I-$#9A$#Y=#\"IE!$)I#\"I=!$9M$" "\"Y=\"%)I%$9Q!#9Q!')I*\"YQ$\"9M&&)I\"#YQ\"\")Q\"$9I\"#I]!%)E$$YY#$)U#%)Y!" "$)Y#%)I%#IY!$)]#%I]*$I]%$J%!$9]$#Z!\"#Y]\"#J)!$Z%&#Z%\"#Z)\"#YU\"%:)%" "%*-#%:)($*-*#Z!\"#Z)\"$*)#!:)\"#J-!#Z-\"#Z-\"%*-'$:-!\"Z1!$:-!#Z1\"\"J-!" "&*-'#*)\"%Z5-#J1!$:-#$:-!$*%##Z5\"$Z1&#J!!#J%!%Z-#!*-!\"*)%#Z1\"&:%%" "%*)'!:-%#J)!&:5)!Z)!$Z%&#J)!#J!!%:%!#J%!#J=!#J%!$:!!#:5#$Z%&$:!$" "$*%#$J!%#9U!#9]$$*!##IQ\"\"9I&$YU'%IY&#)A##IQ!$9]$%)U(#YM#&)]($)U#" "#9U!%9=)\"I-!#YI#\"YQ\"$IE#!YE!#YI&\"9I#%YQ!#Y=#\")=\"\"Y=\"$)9!#)9#!)1!" "#)-#$I9##I1%#)-##I-%#))#\"Y)\"\"I)!$9%%$I5&#I!%#(]##XQ'!Y%!!9-\"#X]&" "\"XM\"#X]&$8I#%8M*#(M#\"HY!%(I#\"89#$8E&#(A#$(E$#H9#!H=+%HA##X1'$X5+" "!H1#$(-%#GY#\"8)!#X-'\"8!!\"X!#\"7]!!G]!\"7Q!\"WU#\"GY\"\"7U$!'Q##7Q%%7I(" "!GM#\"WA#\"'Q\"\"7A##'9$\"7=!!GA!\"'9!\"'-!\"79$\"GA%\"71$\"6]$#&]\"#7!&\"&Y#" "!FE!\"&M#!6Y\"#&Y#!F]!!F]!\"7!$!VQ\"!G!!#7)'\"'-#\"G1\"!'5$!G5#!G9!!WQ$" "\"'=#\"GA##'9'\"GU\"\"GU$\"'I!!'M&\"'A!!WQ!#7U%\"W]##8!%!7U\"\"WU#\"X)#\"H-\"" "\"8!!!H-!\"(!##(5#\"X-##(5$#H5&\"HE!#(5&$HE*#8Q$#(I#\"8A!\"8E#!(A#$(U!" "#HM&%(Q##(Q#\"8M##(U##(U#\"Y%#\"XE\"#XY&$))!#9%!#(U!!9)\"#XQ#$))$#9%$" "\"I1!\"8]#$Y%'$)1$#95$#I5\"$I=&#Y9#\"IE!\"9A#%)M!$Y=#%)A(#9E!$9E%#9I!" "!YE!#II!#9M!$YU M!$IQ\"$)U#$IQ%%*!$$IY%$IQ&$:!!%)Y'\"IY$#Y]\"!9]&" "!9U\"$9U!#J!!%:!$$J!&#Z!\"%:%!\"IY$&J%&$J))%*5#$*%##Z1\"%Z)'$Z1&\"Z)\"" "#Z%\"!:-)#J-!')]&$:%$#J%!!:1\"#Z)\"#J-!!Z-!'J1*$*)#$Z1&$:!!$Z-#&:1%" "$J5!$:1##J5!\"*5\"%Z1&$:1!#J1!#J-$&:--$:1$#J!!&*-!\"J!!!Z-!%J-\"#Z)\"" "%:%!#J9!%J-\"#Z-\"#Z!\"$:%$#Z)\"#YY\"$I]\"$:1##J)!$:)!#Z%\"!*!!#Z%\"$)U'" "$YU#%)Q$#Z!\"#Z%&$J%%$)]##Y]\"$9Y$$)M##:!#$*!#%)Y+&)I\"#I]!%*)$#Y=\"" "%)Q!$9Y$$)A#$*)#$)Q##YI##IQ%#YE#$)E$%9M%$YE'#YE\"#9-!\"IA!$95(#Y5#" "$)9!!Y1!\"I9!\"Y1\"#)=#!Y=!#)-##)%$$))$%9%*$)!!#Y-##I!%#)%##(]#$8U\"" "&)%*#XQ!\"8Y!\"(Q%#I)%!H]!#XE&\"I!!#XE&\"8E!#89!#(I$#89%#(A##(9!#XA!" "#(5!\"X)#\"81!\"X-#!H1!#H%(\"X)#$X5%\"H%!$'U#\"8!!!GY!!X%'\"GY\"$'U#\"7U!" "#WI%\"7I!\"GI#\"'9#\"GE%!G9!\"G=%\"'5\"\"W9(!G1!\"G1%\"7-$#'-%#'!'#W)##'!'" "!G)!!&Q!\"F]#\"&U!\"7!\"\"6](\"'!#!W)\"!G1!\"'!!!'5#!71\"\"'5!!G9!\"G9\"#'-'" "#G))!'=!\"GA$\"7Q&#WE%\"WM#\"WQ##7E(\"WU!\"7U!#G]!!WQ$\"(!#\"H!!#(!$#G]!" "\"8!!\"8M!\"X1#\"85+!X=&\"X=#\"X5\"$H9$\"XE\"\"XI\"#(5$#(E##XM$\"HI!$(I%#8M$" "#8E$#)!#\"(I\"\"8Q#$(Y(!HY#\"HY$#X]##)!'$XU!$8]\"!Y)!#I%\"#I)%#)-#$)1!" "#Y1##I5%$)5'\"I5$!9E\"#)5#\"Y-($)5!$9=\"#)M#\"9=#$YE&&9A-%YE!!IE)#9A!" "#IM\"$9E\"#YA##YQ\"#YE#%YM$$)U#$)U#$9U!#IY!#YM%$:%$%Y]-#I]!%Y]#%YU(" "$)]#&*!!%:!!%:-(#J)!#I]!'*-!#Z9\"$:)$$J1%&J-'%J%&$9]!#J1!&*-+$*%#" "#Z1%$:)$$:1##J1!$J1!\"Z1!$Z=&#:1##Z1\"%J1\"$J5%#J1!#J9!$:E##Z5\"%*5'" "#J1!$*5\"%Z5&!:5\"#J5!#J5!#*9\"$:5#%*5##J-!!ZI!%:5(#J9!$Z1\"\"J1##Z-\"" "#J1!$Z1\"#J%!%*1##Z5\"\"J1!#Z-\"$:-!#J-!$*-'#Z5\"#Z-\"$*-#%:)!#I]!$Z%\"" "\"J)!#J-!$J5!&Z)+#:-#$J-\"\"J%!':-*$)]##YQ\"#J!!\"YY$$IY%$*!##9U!%IQ'" "%9Q)#9Q!%I9!#YQ##IE(!YY$#9I!&)I,$9M!#YE\"!YI!#9E!%I1'&)E&#I=!#Y=#" "!I9)#95$\")5\"%9-'#Y9#$9-%#)5#\"I-!#)-##))#!Y-$%)%)%I%!#I-\"\"I!!\"Y1%" "\"XU\"\"HQ!$9!#\"HU!!8U\"#8U$#(U#\"XM\"!(E!#(I#$8E)#HE#\"HE!\"85!#H=\"\"X9#" "!()!\"X5\"\"8)!!8-\"#H-#\"81!#8)%\"X%\"\"GY\"\"7]!\"8%##'Y$\"'Y#!W]!\"W]#\"WQ#" "\"WQ##GQ!!GE#\"G=\"!7Y%\"GE%\"W=#\"'9\"#W1%!W9&\"G9%#'1&!W5\"\"7%\"#'!'\"G)%" "!FI!!VY\"!G!!\"&Y!!W!$!G%!!G)!!'9#\"G-%\"G1#!W1\"!W5$!W9!\"'I!!G1!#79'" "\"WA%\"'E##GI&#'A$\"7M!\"GQ\"#'Q$\"WU#\"WY##7],#(!$#X!!#8!\"#(!$\"8)!#(9!" "\"8)!\"X-\"\"8-!\"(5%#X-$\"X-\"$HA$$H-$#8A%!8=\"\"(=(#HM)#8Q$\"X]\"#XU##(Q!" "#(Q##(]##XY#\"8]!$XI%$(]'#H]%$X]$'9%/#I!#\"I)!\"I)!!95\"#9-!$)1'\"I5!" "!Y9!#95$$9)%$99\"!Y1$\"YE\"$)I$$95\"$)A$$YA$$)E#&9E##9I$$9Q!#9M!%)E(" "#YQ\"&)Y,%)Q$$YY&$IU%%)I($IY%!YY!$IY(%I]*$IY)$I]\"$I]\"\"9Q#$*!#&*)!" "%J%\"$:%$%J)\"$J)%%*5'%:%!#Z%\"#J)!#J5!$:-#!*-!#Z-\"$*5\"%:1)#JA!\"J1!" "'J-'%J9\"#JA!#J9!$J)%$J5!#)]#%:5!$*A#%Z=#$J5!\"Z5!%J9)$JE%#JA!#J9!" "$*=##*9\"\"Z%\"#Z9\"\"*1\"#J9!\"Z9!%*=#\"*1\"#JA!%:E(&*9+\"Z5!$:)!\"J%!%:1!" "!:-\"#J1!!9Y%#J)!#Z5!#Z9!!Z!!#Z%\"$J1($*5##Z!\"\"Z1!!*-%%:)!#J-%!:-\"" "%Z5#%*)##J)!!Z)!#J-!#Z-\"#J%!$J%)#I]!#Z!\"':)&%J))$I]\"$Z!##9Y'$)Y#" "#9M!#YM\"#9U!#I]!#IQ+$9M%#)Q\"%)Q!$)I##IE!$II##9Q!!IA)%IE$!)A!&)-#" "#Y9#!)=!!)1$\"I-!!)1!#)-#\"Y5\"$Y5$\"Y1\"#)-#%)!\"#Y)&$Y%+$)9!\"I%!#9)!" "\"I)!\"8Y!$(]$#8]!#(I$#8]$#HU%\"HQ!#(M!\"8M##HI%\"XE\"!HA!\"HE!#HE\"%8=%" "\"85!!H=!!(5!#85\"$H1*#H-#$(-##81\"\"H!\"$H%(\"8)!#(!$\"7]!$H!*\"8!!\"7U!" "#GM&#WU'#8%$!GI!\"GI\"\"'E!!7A\"\"GA.\"G-'\"'9\"\"G9\"$79$\"'=\"\"71$\"79#\"7!&" "\"&Y!\"&Y#!&U!\"W!(\"&Y!\"'%#!'1!!W-!$'-(\"G)'\"G9$!79\"!W=\"\"7I$#'A%\"'A#" "!GA!\"'9!#7I%\"7Q!\"GI#$GQ\"%'Y'$'Q!$7Y'\"GQ\"$7]$#W]%!H1!\"8%!#(%$\"(-\"" "#8-%#(5!\"X5#\"85!\"8=!\"X=##(9!\"XA#\"XE\"\"89!\"(I\"\"8A!#(I##HM%!XU$$(U%" "\"8Q!$I!'#HU%#(U#\"I!!$(U'&)5&\"H]!$)!!!Y)!\"9-##I-%$9-+#9-!\"I-!!Y9$" "#)5##99$$99%#)1##)A##9A!$IA&\")E\"%IE*#9M!$IU\"#YM#$YM&$YU'$9Q%#99!" "$)Q$#9Q!$IE&%9U%#)Y\"%)U!%IY'!YM!$9]!$*!#%:)($*1#$*1#$*%#%:%(#J1!" "$Z%##J)!#Z)&%:-!%YY$#Z-\"%:-!%*='!Z5!%*5'\":5\"%:5+(*9!#J5!#J)!#J1!" "$*A&#JA!#J9!#Z9\"$JA!#Z5\"':1\"\"JI$$Z9\"!*9$$*M\"#ZA%\":E\"#ZA\"$J%&$J=%" "$:=$&*E(#J=!\"Z=!#J9%\"Z=!&:=,#J9%$ZA\"\"ZU!#Z9\"%JM)\":5*$J9!%:=!$JA!" "$J9!%:5(\":5\"!*%!%ZM\"#J5!$J5!#:5##J5!$Z5\"#Z-\"#J1!\"J1!!Z9!!*5!\"Z%!" "#Z-\"#J1%\"Z-!#J-!#Z)\"&Z%!$IU\"$J)\"$J-!%*)'#Z%\"$J!&#*!&$)U#%9Y%#I]!" "$)]#\"IY!!)Y!#9Q!$9]$%)U!%IQ##YE#$)E#$IM\"\"IM!#9M$$)9!$)E#\"9E#$IA#" "#IA!#YE#$I=c$#9)$#)9)#I-(\"Y5\"%91&\"Y=+\"I-!\"I!!#9%%\"Y!#$Y%$#))#" "$I)&\"H]!\"8]!$)%!!HQ!\"8Q!#(]##(Q#\"HQ!#(A!\"X=#\"8I!#HI%#8E%$(A($8A)" "\"8A!\"X1#$H5*#(1$\"81!#81%#81\"\"H)%#H)##8%%$H%'#H!&#H!$#X%'\"GM\"\"WU!" "#WQ'\"GQ\"\"WQ%#7E%!'Q#\"GI\"#7A%!'A!#'E'!G%!\"WM&\"'-\"\"W5%\"'1#\"'1'!W-!" "\"'!#\"V]&\"G%\"!W)\"\"7)$\"7%(\"W-(\"71#!V]\"!G-#\"75(#W9\"#7=&\"7=$\"7A$!G9!" "!GI!#7M%#WM'\"WU#\"WQ#\"7Y$#7Y%\"7Y!#'Q\"$WU!%!H!!\"8)!#85%$8-!\"85!" "\"81!\"X5\"\"85!!(9!#81\"\"XA#$H9%!HA&\"8E!$XI%#(I!#(M&!Y!$!HQ&\"(Q%!HE&" "!HY!$8Y\"\"8]!\"Y%#$)1!#9%%#I!#\"I%!#))#\")-(#Y1##)1##)-#$I5#\"Y1\"\"Y%\"" "%)9(\"Y=\"#9M$$)A$#I=!#9A!#YE##IE$$YI'%99)#IE!$9E$#9Q$%)Q!$)I!$YI#" "%YU*#J!!$)Y##9]$$IY&!YM!%YU#\"Y]$%Z5\"\"Z!%\"J!!&J)*#Z)\"#J1!#Z)\"$*)#" "$Z1&#J)!#J-!\"*-\"\"J)!%*1#$:!!#*9\"$*5#&:9($J5!$:E#$J5!#Z)\"$*9##ZA!" "#*=\"#ZE\"$J9!#J=!#JA!#JA!$Z=%#ZI\"%*9'%:=$$:9#$J=!$*A#$ZA&&Z5#&:E!" "%*A'!:A\"$JE$$JI$$*A#(:9.%ZQ%$JQ!&*=($JA$&Z=.\"Z9!#J9!#Z=\"#Z=\"#Z9\"" "#Z=\"%ZE\"#JA!$J-\"$*=#%:=($*5\"#J=!#J1(#JE!#J=!#*9\"#Z5!$:5$#ZA!\"Z-!" "$:9#\"J1!#:-##JE!#J1!#*-\"%J))%:)!$IQ&$J1\"%*1+%J!\"#J%$%:!\"$9Y$$IY%" "\")Q\"$9]!$Z%\"#)Y-$)Y#$YM'$)]#$9Q$$IU\"#YQ#$)Q$\"J)!#9Q!#9A!$)I$$IA&" "$I9#$9=%$I=#$)9$!I5#$9=%#9-$%)A\"\"I5!#Y5&%)1(#9)$\"I-!\"9-##H]\"\"I!!" "#9)!#)-##I!\"#XY!%(M)#8Y!!8U\"#(]#\"9!#\"XQ\"%XE##8M$#(M##XM!!HI&$8=(" "!HA!\"X=#\"8=##(5#!(9$#H5&$(%(\"WY!#X-$#(-$\"X)#!H%!!H!!$'Y!\"8!!\"7Y!" "#'E$\"WU!#']$#7I##WM\"\"7Q!\"WI#\"'E#\"7I)!G=(\"W9!\"G5%\"79&\"WI#\"')\"!G1!" "!6]\"\"6]&\"'%#!7!\"#'))\"W-%*\"'1!\"'5##W1*!W9!!W=!\"GA%\"'9\"\"GE\"!GM!" "$'Y&\"WY#\"GI#$'M#\"7U!\"WY%$GM#\"'Y%#GY$\"WY#\"7]##X=$!(%!#()!\"81!#(1#" "#H-##H5#!HA&\"8E!\"X=##(A##XE!%8E$!(E!\"XI\"!XI!#(I$\"HQ!#XU!#(I#%(Y\"" "!HU!#H]\"\"Y!##9-!\")!#&)%'#9)'!Y)$#9-!#9-!$9-%$Y=*#91$%I9$$95\"\"I9!" "#9=$#Y=#%I9.$9E$\"IM!#YQ\"#YI##9=!$9M!#YM#%IQ*$YU##YI#$YY'$)U#$YY'" "$)Y##YY\"#I]!#YE#&:!*\"J!$$Z!'$*%##J%!%J-\"$J-\"\"Z)%#*%#$J-%#*-\"$J-\"" "$*)#$:-#\"J1!#Z5\"$J9%#Z)\"%J5)#J5!#J9!&:9%#:5#\"*=\"%J1\"#J9!$JA!!:E\"" "$Z1&#Z=\"!Z%!#Z5\"$JE!&JA-#JA!\"ZI!#JA!#JA!$ZA\"$*=)#Z=\"%*I#$*Q\"%JE(" "!ZM$#ZI\"$ZI&\"ZE!#*A\"#ZQ!%ZE\"\"ZM!#ZI\"#*A\"#J=!$ZM!#ZA!#ZA!$JQ!$JQ%" "#JA!#J=!$*A##ZA!#J5!&JE)#J=!$JA!#ZE\"#J1!#J9!$:!$%:E$#J9!\"Z9!#Z5!" "#Z-\"!:%\"%:9!$J1\"\"Z1!$*!##Z-\"!:-%#Z-\"$:-!%Z-&&:))$:)$$:%$%*!($9]$" "#)]\"&J!#%J!&$J-%$*)#$9Y!$9Y$%YM!$)U##YU\"\")Q\"!9M%#9M!$)]#%IA'#9M-" "#YM\"\"9I#$YU#%)=(#9E!#Y=&\"9=##)A##9A!!9-\"#)5#\"I!!!91%\"I-!$9E%!Y)$" "&)9\"#HQ\"#I!#$9!##)!##(M##9!*$(I'#I-%$(M%\"XU\"#(U&!(=!\"HQ!!8E%$(E%" "!HM#!HI#\"X=\"\"X=\"\"(!##85%$8=##(=!#H-#!(9!\"H)\"\"X!!#(%$!X!$$H!%\"W]#" "\"7U!\"WY!!GU!\"7Y!\"WU#!WE$\"'I!\"GE\"!GQ%\"G1$!GA!!'A$\"7M!!G)#\"W1(!G1!" "\"'!%!6]%\"'%#!W)\"\"G5\"!G-#!W-!#75%#'5%\"G5%!W=$\"GA%\"'E#!'A$#'E$\"7]!" "!GM#!W]\"#'E$\"WU##WY\"#W]'#7M#\"X%#$(%(#X1&!X)\"#H)#\"89!$H1'\"X)#!HA!" "#(9$\"8=!$8=##8-%#H=%\"XE\"\"8E!#HI\"\"HI!$XM+$8Q)\"HI!#HU%#HU%$(Y'#I)%" "\"I!!#I)\"#9)!\"I)!#9!!$9)+\"I1!#Y%$#Y)'#Y)#\"Y5\"#Y%'#Y5#\"I9!\")A%$9=!" "$)E#$)I!\"9E#$)A#$)A!%IA*%YI!#9=!#IE\"#IY!!YU!$9M!$*!##YY\"#Z%\"#9Q!" "\"IY!$YU#$:!$$*!##)U#\"Z%!%I]*$*)##J-!$J%!!J-#\"Z9!%JA%$9]!#Z!\"$J1!" "#J1!#Z1\"&JE)%*9#%*I'#JA!$:9$!Z-!&J9\"#Z9\"#JI!#J=!$:E$#J5!\"ZA!#*A\"" "#ZA\"#ZQ!#JA!$:)$\"J1!#ZI\"#JE!$JE!$ZE&#JE!#JE$\"ZE!$JI$':E%$*I\"%:U'" "$ZI&%*I#\"*Q\"#*]\"%:I$%*Q'$J=!#ZI\"#JM!%JE)$ZE\"#JE!\"ZE!$:Q##JA!\"ZI!" "#*M\"#JE!$ZE\"%*M\"#J=!%:A(#JE!#*=\"&:E!$*=\"$:=##JA!#Z=\"%*9&#JE!#*9\"" "!Z9!!ZA!#J5!$Z-&\"ZE!&*)(\":1##J9!!:9\"%:1!#Z)\"$Z!\"#*-\"%:)!#J1!!YU!" "#J%!#J%!\"J!!$Z!'$*%#%9U)$Y] ]##Y]\"#IY$\"IU#$IU%#IQ$#IU!#)Q#))U," "$9I\"%YI+$9A$\"I5!\"IA!#II!#9A!#)=##)A#\"YA\"\"I9!$9)(\"I5!\"Y1\"%Y=,!9-\"" "!Y9!#HQ%#91!#Y%##Y-&\"9%#$(U$#X]##X]&#(Q#!8Q\"$8Q\"\"HQ!\"XQ\"$XI+\"HM!" "\"XE%\"89!!8E%\"X1#$8E&#H9&\"HI!\"(5\"#X1'#(=!!X-!\"8)!$85)\"H%!\"H!'!()!" "$7M$\"W]##7U%#(%&\"WQ!$WQ+#GM&#'E$#GE&\"'A#!7A$\"GA#!GA!!75'\"G1)\"'E%" "!G)!#G%\"#W%#\"71#!G-!\"71$\"W5#\"'5\"\"'I)\"'E#\"WA!!G5!!GM!\"'E!#7A!!GQ!" "\"WU!\"GU\"\"7U#!7]$!GM%\"8!$\"GU\"\"X)%#X%$!H)#$89(#HE\"\"X5\"#85'\"X5#\"89!" "\"(1##8I$\"XA\"\"(I%$8M#\"(A\"#HM##(M#!XM$#(A$\"8U!#95!#I%%!HY!\"X]\"#XY&" "$HQ##I!\"'9%%#I%\"#9-!#91!!Y)!$)1'!I=##)5##95!%9A&#)5#$Y9'%9E\"\"I=!" "\"YU$\"IE$#)9#$9U$#Y9##9Q'$IM&$IQ\"#9Q!#9U!%IY##9U!$)Y#\"IY!$Y]'#*!#" "\"J%!$*!#%)]!$:!'(:%+\"Z)!#J)!#J)!$9Y!$J-%$J-!%J%\"$J5%#J1!$:5##J5!" "\"Z9%\"ZE!&:9,$J5%$J=!!Z9!$*9\"\"ZE!$*9\"$:I$#ZA\"#ZI\"#ZA\"$ZE%$ZE&$*E\"" "%:E!#J=!!:E&\"Z=!\"ZI!#JI!$ZI%$:I##ZM!#JE!\"Z]$&:Y,#:A#$ZI!$JI!#JA!" "#JE!$Z9&!ZA!!*Q!!ZI!%*9&#ZU!#ZQ!#:A##ZE!&*E($*9##:U\"#ZM!%:I'&JI!" "$JE!':E1#:U#$*E\"'*U#\"Z5%#JM!$J=!#JE!#J=!#J=!\"Z=!$ZI\"#JA!#:=&\"Z-!" "\"ZE!$*I\"#JE!#J5!#Z9!#Z9\"$J5%#Z5\"#J!!$JI$#J1!\"*1%#J-!#J-!$*-#!:-\"" "#J1!#J%!#J%!&:-)#J!!$*!##J!!$9Q!$I]&#Y]\"\"IY!%)Y!#)]#$)Y##9Q!$YQ#" "$)U#$)I#$9A$#IU\"#YE\"$9I!#Y=#&)A,$)A$#)M#\"IE!\")=\"!Y)!%Y1+\"I)!\")9\"" "\"I-!#Y5&$)-$\"8U!#9!!#(Q!%91)!)!!$(]$\"(M\"#I!)\"HU$$HM*#(E$\"8]!!8M\"" "!XI!\"8Q!%8E'#8I$%XE#\"81!\"85!\"89$\"X)\"!(1!$X5%#85%!H9(\"H-\"#X%'!G]!" "%']'#W]'!GU#$'Y(#7Q%\"7Q!\"'Q#\"7M!#'I%#7I%\"GA$\"GE%!W=$!G=#!'-#\"G5%" "!W%\"!W%\"!7)\"!G)#\"W5%#'5$#G5&!'=!!G9!\"'=#!GI!\"'E##'A$\"'E!\"7U!#7A#" "\"7Q!!GU!\"7Y!$GE#\"WY##GU&!G]!\"G]\"#(%$\"8)#$7])#(I$\"81!#8A\"#(A#$H9*" "#X-'!H=!#8A%#85\"!HA!!8I\"$8Q(\"(M\"\"8Q!$HM)\"XU\"#XY#\"XY\"#(]#\"8]!$I)'" "%Y! %!\")!##))#\"I-!\"Y5\"$I)#\"I5!$I-&#)=##Y9&#IQ$$Y9$!YA!#9E!#YQ#" "$IE&$)E$#IE\"#9U!#9M!&)Q(&9M.$)U#$IQ&$9Y$%)]!&9Y&%)]!$I]%%:!$%Z%*" "$*)#$:1!#J1!#J)!&J-'\"I]!%J5%'Z-('*9%#J1!$:1#%:=!#Z=!\"J5##J9!#Z-\"" "\"*9\"#*5\"#ZE\"#*=\"%*9&%JA%&:A!#JI!#Z9!%:A!#JM!#ZE!%ZE*$ZE\"#ZE\"%*I#" "#*I\"$:I#&:E$%JQ!':9\"#JM!$:E#%*M&#JM!#JA!%JI)#Z]!$J]$%*Q*$JM$#JA!" "\"ZM!#ZM!(:M*#:M\"$:M$#:I#%JI!#ZY!#JM!#JM!'JI&#JM!$ZI&#ZE\"$JI$#JM!" "#JM!#JI!$JI!#JE!%JY(%*E'$ZA\"%ZM*#JE!\"*A!\"*I\"%*A+#J=!&*9+$:A##ZA!" "#:A##JE!':Q(#J1!%:E!#Z-\"$Z9&&*1!#Z9\"\"Z5!%J1-#J1!\"J)!#I]!#J%!$J-%" "!Z5!#*!##J)!%Z9*\"9]&$*!'#Z%%$*!#%IY'$)Q$$IY%&IY$$IY%!Z!!#YQ##YQ#" "\"II$$9M!$9M(#9Q!$IM%#YE\"!9Q\"%9E%#9A!&IE($)1!#9I#\"IE!#)9#$)='#)5#" "$I9)\"Y1\"&9-*#Y%$#9%%\"I%!$9%##(Y!!)%$#(Y##XU'#Y!&\"8Y!\"8M!#8U$!HM!" "$(M'\"XA#\"XU\"\"8I#\"8A!\"(5\"\"XI\"\"H9\"\"X=\"\"H)\"\"(1\"!X%'\"8-!$()(\"7]!#7Y\"" "#H)%$(%##H%##()$#G]!\"7Y!\"G]\"\"7Q!\"'Q#\"WI!#7Q'\"'E#\"G=%\"'A#\"G9\"!'1%" "\"G-%\"'%#\"G-$!G-!\"G1$\"WM&!GE!!7A\"#'5$!WE!!WM!!7I\"\"7I!#GY!$'I)\"GA\"" "\"H%\"\"G]%\"W]#\"G]\"#GY##H!&%8%#\"8%!\"(-#$(9%\"81!\"X%\"#(9##X='\"8)!\"8=!" "!8A\"$8A(\"81!#(I#\"(M\"#HM\"\"XU\"%8U*#8]!$8U%\"8Y#%I%+\"8]#\"HY$#9-!\"8]!" "$)%%$Y)+#99$#Y)'#91!#)9#!Y5!#99$#9Q#$)M&\"I5$#9E!&)A%$Y=!#9A!$YM#" "%)9(#9M!\"YI!$IU%#YQ#%*!#!YU$$)Y##IY!#IU\"#YQ#%)]'$*%#%9U)&*%!&J%#" "#J%!$:%$$Z9\"$:%$(Z-&$:-##J1!#*1\"$J5!#Z9\"$J9!#ZE\"#J5!#Z9!$*=&!*=!" "#J9!&*-+#JA!%:1(%JU!$JA!#Z=\"#JE!#JE!$*5##JI!#JE!#ZI!$JM%$*U\"#JM!" "$:E$$JM!\"ZM!\"ZM!#J=!#ZQ!%JQ(#ZQ!#ZQ!$JQ!#ZQ!$ZI%#JM!$:U##ZY!!ZQ!" "#JM!&:Q($JE%\"ZQ!&JU%\"*Q\"\":Q\"%*I#&*Q#!Z]!$:Q#%JQ)$+)\"$*Q)#ZU!\"*Q\"" "$:Q#%JM)$JM!$*U\"$[!&':M!%JQ!&ZM+%ZM&&:I%#ZE\"$J5!#ZY!%:E!\"Z=!\"ZE!" "$*M\"$ZA%\"*A!%:A($*9\"#J9!!:=%#J-!#JE!%:9%#Z-\"$J5!$J=!#Z)\"#J=!\"Z)\"" "%*1''*9)#Z9!$:-$\"Z!\"\"Z)!$*%#!Z)!%:)($*!#%Z!'#J!!$IU%$YU'!Z%!#9U!" "\"IU!%)Q'\"9Q##YQ##9I!#9M!$IA##IQ!$)E&!)E!#Y9##Y=#\"IM!\"I-!!I5&$Y5$" "#9A!#9=*%I1$#)-##91!#91!$9!%#9!!#9!!!Y!!#8]!\"(U\"\"I!!#(Y#\"8I#\"XQ\"" "!(9$\"HI!\"XM\"#(I#\"HE$#(M##(=$!HE!#X1%#89%#(=!!()!$HA*#()'\"81!$(%&" "\"X%!#']&\"8!!#8!$#GY$#'Y$!GU#\"GQ%\"7Q!#7M#$7I'\"'E\"!'Q#!7A%\"75#\"'E#" "#')%!'-!#'5'\"W5&!G5&\"75$\"7=$\"'=#!GM!\"WE%\"'E#\"WE##7Y%\"GI#\"GQ\"#7Y#" "\"X%##GY!\"7]!\"H%$$8%%\"\"WY#\"H)!!X-!#H1&\"H1\"\"89!%89%\"85!\"HQ$#H=\"" "\"8E!!HE&$HI'\"XE#!(A!\"XE#\"HQ'\"8U!#XUY$#HI#\")!(%9%,$8]%#9%!!)-!" "#))&!Y9!\"I-!$Y)(\"I!!$I5#\")5\"\"I9!!9I%$Y=!#I9\"$)I$#YE%&)E)$9I%#9I!" "$IM%$*)##J!!%YQ'#*!&$IU%%9Y(%IY\"\"I]!#I]!#J%!$I]\"#J)!%:1($Z!&%:%!" "%)]!#J-%%J-\"%:1(%*=+#J1!#Z)\"#Z5!$J9!#JA!#J5!#J5!#*5\"&*A+#ZA%%*A&" "$Z-\"$Z9&#JA!$JI(%:E!#JE!#Z9!#ZI\"$JM!\"ZI!!*M!#JI!\"ZM!#ZU!\"*M\"%Z])" "&:I!$JM!%JM!$*Q\"#JA!%*U\"#ZQ!!ZM!#Z]!#ZU!#ZU!\"ZU!**U)$*]&#ZY!\"[!!" "%JQ!$[!!#ZU!#JI!%ZU)#JI!$J]!$ZQ%#ZU!#[)!'*U#$JI!$*]\"$Z]%%+)\"\"[!!" "$JU!#JM!%*M\"%:Q$!*Q$%JQ!#ZU!#Z]!#:M##JM!#JM$&ZU\"$ZM\"!:Q\"#ZE!#JI!" "%*I\"&:A,$J9!#JI!$Z=\"$*=#$JQ!\"ZA!#J5!#*=\"%Z1&#J9!$J9!#Z9%!*5!#J5!" "#J%!#J=!#*9\"#JA!#J-!%*1'%Z)+#Z-\"\"J!!%:%(#:%##Y]\"$*!#!)]!%:%!%9Y," "#IU!#IU\"$)]#%9U%#9U!&IM$\"YM\"$9I$$YI&&Y9/#IE(#9A!$IA%%9=%\"I=!!I=#" "\"I1!\"(]%$9-(#9A$#9)!\"I-!$))%#))#%I%$%)!%\"8]#$X]$\"Y%##)%##))##8Y$" "$(]$%(M##8M$\"H-*!HQ!\"XI\"#(A##8A%%H=&#(E!\"8M#\"8=!\"X1\"\"X9#\"8)!\"8)!" "\"X=%$()(\"X!#$8%)#']$\"H!!\"WQ#!'M!\"7Q!\"GM\"\"GY\"#7I%#7I%!W1\"!GE%!WA&" "!G-!\"7=#\"G1$#'9'#'5\"\"'5#!W9&\"79#\"W1&$7E$\"GM\"#']$#WA#!GU##7Y#$8)&" "$'Y#\"G]!\"W]##(!$\"(!#\"8)!\"H)!\"X-#\"X-#$(9%#(9!#H1!#X5&&(=%%(E##(A$" "!HE#!XI$#(M!#8M!\"XE#$(Q!#(U#%8Q$#(Y!#(]##HU\"#XU&#(]!#I5\"\"I1!\"I5!" "\"I)!#))##9-$$Y1'!)1$#I=%\"I9!#9A!%Y=(%)E!#)A#\"IE!$)E#\"IA!$9U!#YM\"" "%YM$#YM#$IU\"!9Q\"$)U#$*!#$:!!&)]$#Z!\"\"J%!\"Z%\"%Z%'%*%'$J-\"#Z!\"#J-!" "!Z-!#*9\"'*1%#J1!#J5!$J5!!Z1!$Z9\"$:9##J=!$Z5\"#Z=!#J=!%:E!#JA!#Z=\"" "&:I,\"JM#\"ZE!$JM$!ZY!%*I\"$:Y#%ZQ&$ZM\"$*U\"#:Q##;%&#ZQ!#ZQ!$J]!$*Y\"" "%*I\"#:U#$JU$#*]\"%:U$$J]!#ZU!\"ZU%#[)!#[%!$*U\"$ZY%$*Y\"$*Y\"#[)!$JU$" "$;%\"\"Z]!&[%\"\"JY#\"[!!$ZU%(J].#ZU!#*]\"%JY)\"*Y\"\"ZM!$ZY)\"ZQ!$ZY%$:Q#" "#ZU!$JQ!#ZI!$+!\"$*U\"#JM!$*U\"\":]\"#*Q\"$*M\"!ZM!#ZQ!#:]\"%ZE*$JA%%ZU)" "$:I#$*I\"$J9%(JI#\"*E!#ZA\"#JE!$JM!$*A\"\"JM#%JA)#ZA%#ZQ!\"*9!#:5##Z=\"" "\"Z5!&:5!#J9!$*%##J)!%J-\"%J5\"\"J%!%:-!$:1!$:)!#*%#%J!*$:!!#J%!&9Y&" "%YY$$)Y#$)Y##IU!#YU\"#YQ#%9U%#9U!#9A!#YI##)M#$IU%$YI'$)A!$)=$#)5#" "#I=!#9=$\"Y=\"!Y5$%Y5%\"9-##9!*\"H]!#Y9##)%##Y-#%Y1($)%%$(]'!HY!#(E!" "#XU##8Q$\"8Q+#8M$#HQ\"#(I#\"HU$%(E#\"XA\"!(I!\"85!\"8=#\"H=!\"8=#\"8-!\"X%#" "!H)!\"(!%#8%$#(!$\"8)!\"(%%#WY$!7U\"!GQ#$7M'\"7Q$\"GM%#7M&!GE!\"'9##GI$" "\"7=$#'-'!W1!!79\"\"G1'\"7=#!WA$#7A##'A'#'E$\"WQ##'E'\"WQ&\"GU\"#GU!\"W]#" "#']$!GU!#H!&$(%(#H)!$8%)\"X)##(A$#(1 $\"(9\"$(=!$XA&#(I##(A$#XI!" "!XI$#HI#\"8Y!\"8M##XQ&#(U##(U!\"XY\"#H]%$I)##9!!!8Y\"%I!(\"I)!\"I)!$Y1$" "$H]#$)5'\"I1$#I1%$I9 I##I1%#IA%#)A##IA\"#9E!$)Y##)U\"\"IU!#YQ#$9Q!" "#YE%$)U#$IQ\"$J! Q!#9]'%:!\"\"IU!#J)!$J%)$*%#%9])$J)%&*-($Z-&\"J-!" "#Z-\"'Z1)$J5!$J9!%*A#$J9!$J9!#J)!#J5$#J=!%:5(#JA!%J9\"%JE(#JM!#ZA!" "#J9!&ZM\"\"ZI!%*Q\"#JE!#JM!&ZI\"$JQ$!K!#'+!#![!$$JU$#ZQ!#[%!#[)!#JI!" "%:M(#[)!$[%%#[-!#ZY!#[!!$*Y\"$[)!$ZU%$J]$#Z]!\"*]!$:]*$[%!#[-!#ZQ!" "\"ZM!$:M$%J]%&;!#$[%!#;!#&ZY.#JM!#*]\"';!,$*]\"#Z]$#Z]!\"+!\"#ZY!%Z]\"" "%ZU\"$*U\"'*Q+#*Q\"#JE!%K)(#*Y\"$J]!%*U'$JE$$JM!&J]!#ZQ!#J9!!ZY!$JQ$" "%ZM\"$:M$\"JM$%ZE\"$:I$$:I$#J=!#J=!\"*E%$:E##JM!$JM!$*I\"#*A&#J1!$:=$" "#*9\"#J9!\"J9#%:5!$JA$$J!\"%J1\"#Z-\"%J5)$:-!#J)!#J-!#Z%\"#J!!'*!0&J-\"" "#IU\"#J)%#IY+$IY%#YQ##J)!$9Y!#9Q!#9M!#)M#%YI(%I5!#YA#$9E(#9I!$)A#" "#)A#!Y9!&99*%)5%!Y5$$Y-'\"I5!#)%#!Y1!\"I1!$9%&$(]$\"8Y!\"Y)\"\"8U##(I'" "!8M($(U$#(=$\"HQ!$(E(\"8I#\"8I!#HE##(=$\"HE$\"8E!$X5,#8=%$H5\"\"8-!$(-#" "#8-%!(-!\"(5'#X%'\"8!!\"8-!\"H!!\"WY!$'Y)#7]%\"7Q!\"7M!\"7M!\"7I##'E+!G=!" "\"7)$\"G-$\"'1\"!'1$\"'5%#79!\"'I##'E'!7U\"$7E*\"WM##7Q#\"GY\"!7Q\"!GM!\"X!#" "$H!'$X!)#(%!\"8-!\"8%!#85\"\"H1!\"81$\"(9\"$81!#(1!#8=$!HI!$8I&\"(E\"\"8I!" "!HE!$8M&\"(Q\"\"XE\"#)!$\"X]\"$(Y!#H]%$(]*#H]\"#Y)#$))$#I-\"\"9-##I)&$)!(" "!)1$#)5#$95%!Y=!!Y=!\"I=!$YA&#IA\"$IA A!#YI\"#YY\"%IQ'%)Q$#IU\"%)Y$" "$YU'#IM\"#J!!\"I]$$Y]&$*!#$9]$!J%#$)Y#$:)!&*!(#Z-\"\"J!!\"Z9!$:%$$:5$" "#J1!#J9!%J-\"#J=!#J9!\"J=##JE!#J5!%ZE)&:M(\"ZM!$ZM%#ZE\"$JQ(#ZI!#ZU!" "%JM!&:A$&*=+%*M&&*I'$ZQ%#ZY!#[!!$JU!$+%\"$:U$#ZU!$ZM\"$:Y'#Z]!&*Y*" "$Z]%$K%(\"ZY!!Z]!#;%#%K!)#*]!#Z]!%;)+#[!!#[%!$Z]%#[%!$*U\"$ZY%%;!'" "&K%!!+!$$K!$#*Y%\"[!!\"[1!#[!!#+)&$:Y*$+-\"$+!\"#ZY!#[9!$;!##[!!#[)!" "%K)$$ZU%\"*]!$JY!#ZU!%J],$:Y#![!!\"JQ$$*U\"':I%#ZU!\"ZU!%*I'%:]#%K!)" "$ZQ%!ZU!$*Q\"&JY!%JQ$$*M\"#*M\"$JI!#JE!%*E'\"*Q!#JE!$*E\"$Z=\"\"*I\"\"ZA%" "#J=$#J5!$:9##Z9\"$*1&#J1!$J5!\"J1!$*-##J=!\":-\"$:)!#*1\"$:!$$J5%$:)$" "\"J!!#Z!&\"IU!$:%!#)M%&)Y%!IQ##YQ&$)Q$#)Q#$YU#\"IM$$YI&%Y1%#9E!%)5\"" "&)I\"!95\"#9=$#I5%#99$#)9##I9\"#Y9#!Y-!\"Y-\"$I-)#9%!#Y%$$9!&\"I1$\"8]!" "\"(Y\"\"8Y!\"(]%\"HQ$#(]#!XU!#XI!#(I#\"8A!$XE\"\"8A!\"X=#%(1'\"X9\"#()!\"85!" "\"89&!()#\"X!#\"G]\"\"X%#$WY!\"(%#!']!#X!\"#7Q#$'M##GQ&\"GM\"$'E!\"'E\"!W=\"" "!71'\"'%#!'=#!W5!\"G=\"!WQ\"!WE\"$'U($GI&\"GM'\"7M!#7M&\"GQ\"\"WY##7Q%!WY$" "!(!#$8%$\"X%##(!$&(-+\"8-!$(A\"\"(%#\"HE$#85$\"X-#!HA!#8A$\"(5%#89$#8]$" "\"8I!\"8A!!HQ!#(Q#\"XY\"$8M#\"X]\"\"I!!%Y!#%XY\"!Y!!#Y%&$))$#Y-&!Y1!\"91#" "#9I$$I9&#)5&#Y5 =!#)=#!YE!\"II!#)A##9I!!YM!#9Q!%9Y%$9U$#)]##IM\"" "#)Y#&)Y!#Y]\"$YY&$)Q$%:%+!Z)!$J!%&*-!&J-\"$:-#&*-+$:1!$Z1&$Z5\"#*5%" "%:1%#J9!#J=!#J=!#Z=\"#JA!$*A\"%*M&%*E\"&:Q,&*E$!*I$#JE!%*M*#JM!$:E#" "!ZM!#Z]!$*M\"\"*Q!#ZU!$*M\"$:]##[!!$*I\"'JY*\"ZU$$*Y&#[%!&+)\"&:M!%:U$" "$[!!#[!!$;%\"%[!)#;!\"$+!\"%[!&%[%)$[!&$[%!%+%&$K%$#[%!\"ZU!$+!\"$*U\"" "#[%)#[%!$;%\"$+)\"#[%!!ZY!$K%$$[%!$[1!%+%&#[%!$+%\"#ZU!$K1$#*]!$K%$" "\";5&%;%'%JY!#[!!![!!&:]+#[!!#:]\"%;!$%ZY\"$[!&%*Y*%:Y#$*M\"%JY($K!$" "&;)'&JU)&JQ%$*U\"$:M$$*M\"$:Q$$*M\"%*M&%JM!%*I'$:M'%JI!\"ZM!#ZA\"#JA!" "#JA!#JA!$:=$$*9)%*='$J%&$Z-&$JI!#J9!#J1$$:1!#Z-\"%:-%!Z%!$Z)\"#J=!" "%9]!#J%!#YQ##Z!(#9Q!#J1!$)]#$)]#$)U#$)Q$$IQ&\"IQ!#IQ\"#YE%#Y]\"&9=$" "#9A!#9E!#I5\"%Y=,#YA\"\"Y9\"\"I5!\"I=!\")9%$)5'#Y%'$I% %!$I%'#XU##(Q!" "\"X]\"\"XI\"\"8Y##9!!#(E!\"HM!#XA#\"8I!\"8E#\"X=#!X=!\"8A!\"81!\"89!\"H9!#HM&" "#']$#85%$X1#\"X)##(!'#8-%\"G]\"\"WY#&(%)#'Q$!GU!#7]%\"GE\"\"7Y!#7=%#'I\"" "$'5&#G1$!G=%!G=!!W1&\"'E#!WE\"\"GA\"\"WM#\"7=!\"'Q#\"8%!$GY*!G]%#W]'\"7]!" "\"X)##8!\"!(%!$H1%#(1!\"81!\"X5%\"W]##8=$%(5#\"XE#\"H-$#8E%#(I#\"XU\"\"8Q!" "\"HU!\"I!\"\"XU\"\"XE\"!X]$!XY$\"I!!$Y!'%I-!\"XY\"\"8Y!$)5!\"I)!$Y1*\"IA!#)1#" "#)-#!YA!\"IE!$)-$$)I$$YE$#IE!\"9I##9Q'#)]##9I!#99!\"YU!#IY!#YU\"$)Y#" "#Z!\"$)Y#%*%'\":!\"!Z!!$9Y!%Y]'#Z%\"$Z1&&*%(#J-!$:1!#J5!#JI!\":A#%*9'" "#JE!%:=(%:=$$ZE&%*=&$J5!&:I,$:Q#%:M$#JI!#*E\"$JY!$*M\"#ZI!#Z]!$:I#" "#ZQ!\"*Q\"%:Q$%*Q##[!!%ZY\"%*Y\"#ZQ!$+!\"$;!#$[!!$*]\"&:],%K!)%;!#\"[)!" "&;)#![%!#[%!\"K!$#JY$$[)!\"+!\"&+%\"$[%!\"ZQ!$[)%\"K)#'[)\"$+1\"#[1!#[)!" "\"Z]$#+)\"%;)+$+)!$+!\"$+)\"%+).#+!\"#;)\"$[)!#[%!#[)!%+-&$[%!![1!\"[%!" "$+!\"$;)\"#Z]!#[%!#[%!#[1!$;)'#ZY!%K!!'K%,%Z])!*]!#JI!#Z]!#Z]!%:M'" "$:]##+%!$JU!$:Q#&:Q$$ZU\"#ZE\"$JQ!$JQ($ZE%$ZM%#ZY!$JQ!#JI!#Z5\"&:E%" "\"ZM!#JE!%*=*$*A#$Z=\"#Z=!#JE!#ZA\"#Z5!#*5\"&*1!!*5$%Z1#$Z9&#J-!\"J)!" "#J1!#J-!#I]!$:!$#IU\"$Y]#$)U##IY!#IU!$:!!#9]$#)Y#\"I]!#9I$$)U##)9#" "!YE!#YE\"#9A!#II\"!I1#\"I9!#)-#\"Y5\"\"IE!#Y!'#9-$!Y5!\"(Y($HY$#I%\"#I%\"" "!Y1!\"XM\"\"HY!#HM%\"8Y!!I%##XA$#(M!#8M$$8M\"#XE&\"XA\"#(A$#(A!!H9##H9#" "$81)!H=!#(-!#(!$\"85!\"H)!\"W]#%8%%!7]\"\"7]#\"X!#!WQ$#WQ'\"WU#\"7]!#7I\"" "\"'=##79!#7=(\"'=%\"W=%\"75&\"7I!\"7M!#'Q$#WQ'\"7U!\"7U!#']$#7Y%!']!!X)$" "!H)!#H)#$H-*!XA!#X-'!H5!#X!(!H9!!X1!#(I!\"HI'\"8=!\"HA!#8Q!\"8M!$(Q(" "%(U,#I!%#XY&#XU&#(]##9%!$9!&$X](#9%!\"I)!!)9!\"9%#!Y=!#)=&#Y-#\"I=!" "#I9%\"I=$$9=%$Y9'$9E%$)E#$9I\"#9M!%)I!$IQ&&)]($)]##YY\"$IY&%9Y!$9U$" "$Z!##9U$#I]!&*!!#Z1\"&J)*#Z1\"#J-$$*9\"#J1!$Z5\"#Z5\"#ZE\"#J9!#J5!%:=!" "%*=##Z9\"$*A##ZE\"!ZI!!ZQ!#ZQ!#JI!#J=!\"ZU!!ZI$!ZQ!%*Q'':Q!\"ZU!':U%" "!:U\"\"ZU!#ZY!#ZY!&*Y#%ZY\"(*](\";%\"%ZU)%K%!\"[!!\"[!!#[!!#[!!!:Q\"#*M\"" "$[)!$+-\"#K)$$K9#$[)!$;!#%+)\"$+-\"$+)\"&[-.\";-&\"+1%$+-\"%+!\"$K5$$;1#" "$[-$&;-+$;-\"%[)!$+5\"%+9&$+-!$+1\"$+)\"$*Y\"$[)!#[I!%;-'$+)\"%+)&\"[1$" "\"[!!$+1\"#K)#%[)%\"[5!#[!!#[!$#:]\"$*]\"$+)\"#JM!%[-&$JU!%K%!#JM!$+-&" "\":]&$Z]!$J]!%:Y$\"ZY!#Z]!&ZU*%ZU\"#;%'$:I$#ZQ!$*M\"%:M$#ZY!$J]!#JM!" "#ZU!#JM!$ZA%%ZA&$ZE)#:=##J9!%:=(%:=($J=!$J5!$JE%$J!%$Z1&#Z9\"$J%&" "\":)#%JA)\":%#$*%#$:-#&*!!#Y]&%*%+$9Y!'YQ*#IU!$)U##)Q##IY!\"9Q##IQ!" "#9Q!#YE%$IE#$YA!#)9##)A#\"IA!\"95##95$\"I5!#)5##)9##I5\"#I)&#Y-##Y!$" "#9%$\"Y!#\"X]\"#8Y$#XY!!XU'#(Q#$XQ*$(Q!\"8I!#XM#$X=+\"(E\"$8A&$H=!\"85!" "#85!\"X5##(1&!H%#\"(-#&()(#(%&\"X%\"\"']#\"8!!#'Y$#'Y$#7U\"\"WM#\"WQ&\"WE!" "!79%\"'9!\"'E\"\"7I!#GM!\"W=(\"WM#$'Q!\"7Q!!GU!\"7Y!\"7Y!\"G]\"#7Q##W]'#GU#" "#(!$#H)&\"(9\"\"X5##X5&#(5)%(=##8I%$8A '\"HE!\"8Q!!(=!\"8M#\"XM\"\"XM\"" "#HQ&\"Y%#\"I!$#(]##9-$#Y!$$I!&$))!#)1#$)A!#)1##Y1&!Y=!#)5##Y-##9=$" "\"I=!#IA%')I\"$)E#!)U!$)I$$9M!$YM#!IQ#$YU&$IQ&$)U##II\"#Y]\"#9Q!%YU(" "#Z!\"!*%!$J)\"!Z1!\"J1!#J-!\"*1\"#J!$#J5!#J5!$*5#$J=!'*5(#J1!%Z9##JA!" "%Z1#\"*A\"%JE(!:E\"#*I\"$JI%$*Y\"$*M\"!ZM!#JA!#Z]!#Z]!#ZQ!&*U*#ZU!$;!\"" "$*Y\"'JQ%$JY!#[%!#[)$#ZQ!%[!&#;!#%+!\"%Z]*#JY(&+%*%;!'#[=!&;)'#[-!" "%JY%#[%!#[)!%+-&%K-$$+)!#[-!#ZY!#[-!$+-!#[-!$[-!%;E\"%+5!#[=!#+1!" "#[1!\"K)#$+M!#[5!$+1\"#+1\"#[-!%K1($+1\"#[-!!;=\"$J]!'[1-%+1&%+-\"$;-&" "$[5$#[%!$[)%\"[1!$K)$%;-\"&K)!&+)\"$+)!$[)%%[%&\"ZU!%:Y$#;%*$[!!%ZY\"" "\"Z]!%Z])'*]+$:Q#$:]#$:Q$#ZY!%;%'#*U\"$*Q\"#*Y\"#ZQ!$*Q\"$*Y\"\"ZM!!ZY!" "%:I'!:I%#JI!'JA\"#JE$%:M$$*A\"!*9!#J9!#Z%&#Z5\"$J1%\"Z5+#J5$#Z-\"$:9#" "#Z%\"%:1!#J9!#Z5\"\"J%!$J!\"$YY#&J!#$)]&$*%#$Y]&$9M!#IU$$9M%%YI!$)A#" "$9M!#YE\"#YI\"$9E\"$)A#$)=!!YA!#9Q#$)=!\"I5$$91(#I1%\"Y1\"\"I-$\"I-!\"Y)\"" "\"Y)%#I-\"#)%#\"I-!#(Y##(A$$8Y%\"HU!\"8Q!!HM!#(9##(Y!\"8M!\"X=#\"81!\"8-!" "#89%#X5$\"81!#()$$(9(\"7]!$X)&$8%)\"8%!\"WY%\"WI#\"WY#\"X-##WU!\"WU%\"WQ!" "!W5\"\"W=*#'9$\"'A\"#'E$#G9$!GM!\"WQ##'I$#7U%#7Y%#H!$$(!+\"7]!\"W]#\"8!$" "#()$$(-(#(5##(=!#H-%%H9,#85$\"H=\"#(A#\"H=!$(Q'\"8M!\"(M\"!(Q!!HQ#\"8Q!" "#(Y#$(Q%!H]!\"8]!#9!!%I%'\"Y)\"$)%!#I)%\"I%!\"I-!\"99&\"I9$#99$#)I##Y=#" "$)=$$)A#%)9($9Q!#YQ\"$9U$$)M##YQ#\"IU!#J%!%)E%#IY!$*!#$9]$&:)-!Z%!" "$Z)#$*)&#*1\"%J-\"&*5,$:A#$ZI!$:5##J=!#J9!#JI!#Z5\"&:9!$J5!%JA)&:A!" "#ZE!&JE)':I!!*A$$*M\"!*U!#JM!$*Q\"$:M#\":A\"$ZU\"#ZU!%[!&$*Y\"\"ZE!$J]!" "#ZY!#Z]!#[%!$J]!\"K!'#[)!$+%\"#[%!%K%)#[)!#[-!$[5!$;-\"$+!\"#+-\"$;-\"" "!+)!&+1\"#;)\"&[1&#[1!\"[1!#[1!$;1\"%+9\"#K1$$[9!#[1!$+9\"#[1!&K5$\"[%!" "$;A\"\";5&$;5\"$;5\"#[5!$K9#\";5\"%+5!$;-\"%+9&$[5!\"[1!#[1!$[-!$+1\"$+1\"" "#[1!$[%!$;9\"#[)!#[%!#[-!$[!!$;)\"'K-!#[5!$+)\"#[9!&K5,#[)!$+)&#+)\"" "$K9'\"ZQ$#ZY!![%!$JU!#Z]!#Z]!#[!!%*M'$*]\"#[%!$ZU%%*U&$JY!%*U'$:Q$" "$*M\"\"ZM!#ZM!#JM!%ZI'%:I$&:E!%:A(%ZA\"$JE$!Z5!#JA!$*9#\"Z=!&*=+#J9!" "$Z1\"$*-'#Z-\"$:-!#:)'$J)%#J%!$*%#$J%%&J%&$)]##9U!\"J%!#I]!#9U!#YQ%" "$9I$%)A'%)I!#YI&$YA&#IA\"\"IA!\"9A&$91\"$)5'#Y5&\"I=!$Y1*!)-$#I!##))#" "$9)%#8]'#H]\"%)!)\"I!!\"I!!%(U##(U#!(Y!#8M$\"XM\"#(I##(E#\"8=!\"H9\"\"8A#" "!81\"#X=)$85)#HA+\"(5#\"8)$\"(%\"#(9!\"()\"\"8!!!X!!\"']#\"WU##WY\"\"(!%\"7Q#" "#'A$!G9#\"'I!%WM+#GI'#'I%#'I&\"7E#\"'E!\"7Q$\"GQ\"#']$\"X%#\"X!#\"(%\"$()#" "\"89##(1#$H9'#H1&#(9!!H=##HA='\"8M!#81\"#8I%$XU+\"HQ!$HM!\"XU\"%(M#" "#8U!\"9!$%9!*$))!$9!&\"I)!\"Y-($I-)#)1##I9+#I1\"#Y=\"%)Q*$)9'#YE#$)A!" "#9M!#YE##9A!%)=$%)Q!#IQ!#9Q!$)Y##YI\"$)Y##9Q!%*!!$:!!#IY!&Z%$%:%!" "$J)%$I]&#*)\"\"J)!$J5!#J1!#Z=!'*5%%J9)%:5!\":=\"&*=+#JA!#:A'#*A\"#JM!" "\"ZE!$JQ$$:M$$JM(#ZM!#ZQ!#JQ$$*U\"\"Z]!$JU!'[-)%*Y&#Z]!#;5\"%*]&$[%%" "$;-##ZU!$:U#$[)!#[)!$J]!#[)!$+5!%:]+%[))\"[1!#K5$$;)#$[-$%JY)&;)+" "%[-)%+)&$+!\"$+1\"\"[%!$+9\"%;1+$+%&$[5!&[5!![1!$;)\"$+-\"#[=!%+=!%+)\"" "%[A%%+=%%;9\"%[9!#K5'$[-!%+9\"&;9\"%K9$$[9!'+1+'[1!&[1)%;5\"&[9!$[=$" "#[5!\"[5!#[-!$[5$\";1\"#[-!#[-!$;1\"#+1\"\";-\"$K-(![-$#+-\"$[)!%K)(%Z]%" "$[1$$[%!$*]\"#[%!%K!$%;-\"%K!)%K!$#Z]!$*]\"$*]\"#ZY!$ZY%$ZU%%*U\"$*U\"" "&:Q$#JM$&JE-$*M\"#ZI!\"ZM!#JI!%:E!#Z9\"%ZE\"#J=!\"JE$%J5)#J9!#Z5!#J1!" "#*9\"%J5%#J1!#J-!\"J-!\"Z)%#J)!$:%!$*!##I]!%IQ)$)]&%I]&$:!!\")Y\"$)Q$" "\"J!!#IY!#YM#\"YI\"!Y=!$Y9'#95!#)E##95!#95$\"I9!!IA#\"I9!\"91#!8]%#9%!" "$I%)#I%#$HY&#(Q!!I%&#(U##XY##(Y##XU!\"HU!#XQ!!HQ!!HI!#HI&&H9*\"HA%" "\"81$$(A(#(9##89%\"XE(!H=!\"X)##H!&#H))\"8%!\"X!#\"7]!!W]!\"WY#\"7U!#H!$" "\"'E#%WI(!GM##'I$#GM$\"WQ&\"GQ\"#'I$!(!#%H1&\"7]!\"()##8%$#8)%\"85!$H9!" "$X1(#XE!#(5$#X=!#H=#\"89!#8A!$(M'$HQ'\"8I!%HIA%%HQ!!HU!%)!($HE!" "\"H]!#Y)'!H]!\"Y%##))#$)-'#Y-##I)%\"9A#\"I=!\"I9!\"IA!\"I='%YE!$)M'\")E\"" "#YE#$IA%&9A M!\"IU$#YQ\"%)U'$YY&#J5$$I]&$Z)&\")]\"\"J!!#*%#%J)\"$*)#" "$*-##J)!%*%'\"J1!#*5\"#Z9\"$9]$%*='#ZI\"#Z5\"!:=\"$Z=)#JE!#*E\"#JI!#JI!" "#ZE\"$K!$%*M'$:Q$$*Q\"!ZQ!$ZU\"\"Z]!!*U(#ZY!$;!#\";-\"$JY$#[!!%+!\"#[)!" "$*Y\"#[!!\"+)%#[-!$+)\"#[-!#+)\"\"[-!#[!!$[)!$+1\"#[)!#[%!\";1\"%K=##+5\"" "$+9\"%;9''+5\"#[5!%+=\"#[9!$[9!%K9$%;=\"\"[9!$[9!$[9!%;-\"&;I&$[9!&[5*" "%+=!'[E!'+1&$[A!%+5\"%+=%$[I!%+M!#[5!%;5#&[=!#[9!%;9\"$[1%$[9!%+1\"" "$[A!%+1!$[E!&[=)#[9!'[5&\"[5!&K1$%;%#%+9!$+-!\"[5!#[%!\";)\"$+9!&+-&" "!;5)$+5\"$K-$$K!$%;%'#[!!$+-\"$[!!%J](%;!#$*Y\"#Z]!#[%!%JY!':U)#Z]!" "\"ZU!#ZQ!#ZU!$*I\"#JM!#JM!$*M\"#JM!$ZI%%JI(\"ZE!$ZI\"$ZA&\"Z)!$J-)#J9!" "#*9\"#J1!#:1'\"Z9!%ZE)#Z)\"&*)!#Z-\"%:5(%Z5#$9]$%9Y(%)U+$YM'$)Y##Z!&" "#9Q!#)Y&#YQ)$IM%')M)#YQ##I9\"#YE\"'Y=#$Y=$\"I=!#)9##YE#\"I5!!)1!$Y1'" "#)-##Y%'$I)##9%!\"Y%\"\"9%##8]$#(]##(I$#8U!#(Y!#8M!#(E$#8=%\"X=#!8E\"" "#(A#\"85#$(=(\"X=##85%\"X1##X-$!H1##X-'!8%\"!W]\"#8%(\"W]##7Y%\"WQ#!GU#" "!7M%!WE\"\"7M!#WM'$WQ)$X%&\"7U!#'Q!\"G]$\"'I!\"GU\"\"8%&!(!$!H)!\"X-#\"8!!" "!(%!!H9!#(1$\"H-\"\"H9!!HM!\"8M!\"8I!!8M\"$(E(#(Y!!HM!\"8U#\"HU!#(U#\"8]!" "!Y%!#9-!$9-%$I%'#HY%\"I1!%)1(%91&#I5%\"I9!!99\"#I=%#9=!#9=!#YE#$YI'" "$YY##9U!$)U#&IE+\")M\"$IU(#J%!$)U#%Z!+\"YY!#Z%\"$:%!%Z%'#Z%\"$J%%\":)\"" "$J5%\"*1\"!Z5!%Z9&$J9!$:-#$ZE\"$J=!%JA%#Z9\"$ZE%!ZI!!:E\"#JM!$:M##JM$" "\"*M!#ZU!$:]##ZY!#ZU!$*Y\"#[!!#ZY!#:]\"%J]!&ZQ*#[!$%+!\"%[!\"#K%$#[1!" "#[1!'+)+#ZY!#[)!$+-&$+-\"&;A&\"[1!%+9&$KE##[1!$+1\"#[=!$K=$#[5!%+M!" "$[E!$[=!%[=!#[9!%[9%%[E!$[=!%[5%'KI$%[9%%;9\"![=!%;E\"%[=!\"[=!$[5!" "%;5#%K1$&KA$$[A!#+1\"$[=!!+E!\"[9!&KA(&[=!%;I\"%+=\"![I!&K9((+1\"%[-%" "$[A!$[=!'+9\"'+9&%KE$%+=\"&[5!#[9!%+5\"$[1!$+E!#[5!#+1%$K1(%[1!$;%#" "#;!'%+)&#[-!\"K!#$+)\"\"[)!!*]!#ZQ!\"[%!$+)\"&+!+$JU!$J]$\";)&#ZY!(ZY+" "\"ZY!%ZY\"&:Q$#ZY!&:M+$:Y##ZU!!ZM!#*=%#JE$$JI!$JA$\"Z=!\"*A\"&:A%%*='" "$J-%&:5%$:9##J5!$*5\"$:=$%J-\"#J%$$Z)#$J!)$Z%#\"YY\"\"YY!#J!!\"IY!#9M!" "$YQ##YU\"&)Y)$)M$%IM##YM##9I!$9M!#9I!#Y=\"#9A!#)1##99!\"I5!\"I5!\"Y1\"" "!)1!#I)\"#I!#\"Y%\"$9%#!(U!\"(Y%$(]'$8M#\"8M!$HU-#XQ#$(9'#HA\"\"HI!\"89!" "#HM%\"HA\"\"8=!$(9'\"(9\"!H5!#H1U$$X-%\"X-##H-&#H-&\"7U!$W](!GQ!\"7Y!" "#G1'#'E\"\"WQ#\"'M\"#7M%\"7U!#7E#$'Y(#(!$#8!$#(!M#!X)\"#X)\"#H-!\"85!" "%HE\"#(=$\"(5%$(A%$8A(%HA\"$(E'#(I!\"(M\"#(I#\"(M\"$)%'\"8U#$8Y)#(]#$(]'" "#I!#$)%$!Y)!%9))\"9%#\"9-##)%$\"9A#\"I9!\"I-!$)5$$)E$#IA!$)E!#9Q!\")E\"" "#9M!#YM#$)U##IU\"$YY&$J%%#IY!#YY&#YY\"%J!##J%!#9U!!ZA!$J)\"&*-+#J1!" "\"*5\"%J1)%:9($*9\"\":9#%J=\"$Z9\"#J1!%JA\"\"ZE!!ZA!$ZI&%J=%%JM!$ZM\"$*Q\"" "&ZQ*#ZQ!$ZA&#JI!#ZY!%:U(%*]&%Z]!$*Q\"(;!-$K!$$J]'$;%#\"Z]$\";)\"$+)-" "%[5!$+-\"![-!$;-\"$+1!$K=#\";1\"\";1\"$[-%&;5'\"[5!%+9\"#+9!$[=!$[9!%[1!" "$[=!)[=*&;A\"'[A!$[-!(+=\"%+M!%[=!$[=!'KE,#;A\"(+A&$;M\"%KA$\"[A!$[A!" "%+A!&[A)%+E!%[A%$[=!%+9\"%KA$%+U!';1,&[=$#;E\"%K-$&+A!$[A!%K=$'+A*" "\";5\"$+E!';=\"&[9!\"[A!&[=!%+I!#[9!%[=%&;E\"%+=\"&K1$&+=\"$;=\"'K-!%[5!" "#K1#$[1$%;1'&K=,#+-\"$K-$\"[-!#[%!$*]\"$;%\"#[%!&+-&%+%\"$*U\"&J]!#+!\"" "$*U\"$JM!#*Y\"$;!\"$[%%$[!!%*Q'%JM%%JI((ZU/#JI!%*9&&JY%#:E#%:A!#JA!" "!*5!%ZI*#J9!$J9!\"*5\"#J5!#J5!$:1$#J5!#J)!#Z%\"$*1\"$*-#&*!$#:)#\"J!!" "')])$IQ\"')I\"\"YU%#9Q!$)9*$YM##II\"$Y=!#YA#&)=-#I5%\"Y=\"\"Y%#\"YE\"\"Y-\"" "\"Y5\"#)-#!91+!))'%9) %!#9%!!)-$$I!&\"Y%%%)!)#(U!\"XQ%$(Q!#(U#$HI$" "#89%\"XA##8A%#XE!$(5%\"H5\"\"(5#$H1$\"X1#\"H-'$8)!$8%)\"H!!\"8!!\"G]\"\"WY!" "#GE)\"7M!\"8!!!H!!\"GE\"\"7]!\"WU#&'Y&\"G]!&(!,#X%\"#8%$#H%&#(-!!(9!!(9#" "\"(%%\"89!\"85!$HE$\"HE$#HI&\"XM\"#(I$\"XY\"#(Q##XU&\"8A!&8Y(#(Y!\"Y%\"%I%'" "&I%)#HU\"\"I)!$Y-!#I5%!Y5!#)5##))##)A#&91'$IE)#9=!$9E%#YE\"#9M!$IQ%" "#YA#&)Q(#IQ\"#9U!$J!&$)Y#$YU*$Z%*%IU)$IY%$*%#\"Z)!\"J-!%J-\"#Z-\"%*1'" "%Z)'%*5'%:A!#J5$!ZA!#JA!#JA!%:9$#ZM!'ZI'\"ZA!'*M'!*Y$'*Y,%:M$#ZU!" "%JY!#ZU!#ZY!$+)!!ZQ!&JU%#Z]!$*Y\"#+%&$[%!\"[%!$JY!#[)!#ZQ!%+)\"#[9!" "%[-&&;9+%+1\"$[9$#[1!&;5#%;5#&+5\"#;9\"%+)\"$[9!#K=#)K11%+M!![I!$[E!" "%+9\"%KA$&;=&%[9!%;=\"%;A&%;M\"&;E'&[9)$[I!(+5\"$+U!'[A!&+E!';M/&;I\"" "![E!%+M!%;A\"$[A!%;A\"$[I!$[E!&[E%$[I!$[E$%KE#%;M\"$[I!![A!$;I&%+9\"" "$;E\"%;A\"#+A)'+E*&+9*$[A!&+A\"%;=\"&;A'$+=!%;='%+U!#[9!'+9\"%;I\"%[9!" "!+1!#[1!$;=\"#[%!'+-\"%[-)&;-$$[1!#[-!#[%!%[1)%;-\"#[)!\"[)!$+)\"';-," "%[!\"#ZQ!&+)&$:Q$%*U'#ZQ!#ZY!#ZY!#ZQ!&JQ-$JI!$JM!#ZE\"#JI!!ZE!#Z=\"" "#ZQ!%:=(#:=#\"Z=%\"Z9!\"Z)\"#J5!$J1($Z5&&Z!$$*1#%:)!#J-$!*)!%:!(#YI&" "$IM%#IY!\"I]!$IQ&#IU\"#9I!#IY!#J!!%)I$#IQ!\"9M##9A!!YM!!)9!#)1#$I5&" "!95\"\"Y1\"#91!#)-#!))!!I!##9)!%)%&\"8M##8]$\"8I##HU\"#(M#\"Y%\"#XI#$(I$" "#8=\"#8I$$HE*!(I!#(=$#X=$\"X%#\"H5\"\"X1#\"8-!!H%##H)!#7U%\"W]#\"7Q!\"(%%" "%7A$$WM$\"7U!#H-!\"WI%#7Y#!()!#8!\"#7]##H!&$H-$!H1!#X-!\"8=!\"H1\"%H-$" "#8=$\"8=!$X=+\"XI\"\"8I!\"8A!#(M#$HM#%HI%#(Y##HQ%\"8U!%XQ&#Y% )!#I)\"" "#9%!#I-%#I%)#)1#\"I1!#)5##)9#\"9=#!)9!$)E!$9I%\"I9$%)I!#)I&%Y=+&99'" "#I]!#YU\"#9M!$Z-&!YY!#J)!#J!!%Y]$#J%!#J)!$Z)&$:A#\":%##Z5\"\"Z%\"#Z=\"" "$*9\"\":1#$J=!%J9!#ZE\"#ZI!%*E'#J1!$JQ%$ZI\"#:M\"$*M\"$JI!$*I\"$*Q\"#ZU!" "&JY,#ZI\"%K!$#Z]!$ZY\"%+%\"#[%!%[9$';%$#[-!$;)#%+)\"%[-&#K-$$+9\"$;1+" "%K1('[9&$[5$%+5\"\";=\"$[=!%[)&\";5\"'+=*%KI#%[=!$[A!&KA(%;A\"&;U\"'+A\"" "%;5\"'KE($[E!%;A\"%;E\"%;E\"&;I&&[M)%+Y!$[E$%;E\"%+Y!);E($;I\"$[I!%;I\"" "$[I!$[E!#[E!%[I$&+I%%;M\"%;1\"$+U!%;E\"%KI#%[=$$+Q!$[9!%+I%$[E!%[I!" "%[I$$[E!&KE(&KA(%+I&$;E\"%[A$$;A\"%+U!#[A!$[=!%;A\"&[=!&[=$%+1\"%[9%" "&[9!$+9\"#+1\"%[5!#+-\"\"[9!$[=)$;1#\"[1!%;1'$ZU!%+!\"$;-\"#[%!%[%)\"[%!" "#[-!$[-$$+%&$;%#!JU##*]\"&:Y$$*]\"#JY$\"*E\"$*Q\"\"Z=!\"JU$%J9\"$JM$$JA!" "#ZQ!$*M\"!ZA!&:9!%J5\"#*!#$:=$%J1&!Z1!%Z%*%*='\"ZE!$J)%#J1!$J%%#*%#" "':!\"%9]\"\"I]!$IU%#YM&#Y]\"$Y]##9Q!$)Q$\"9Q##IE\"#9E#$)E##IA!$)9*$9=%" "#Y=##I1%#95$&Y1-\"Y1\"#9!\"#I!#$Y%!#Y!$#(]##(]#\"XY\"#8U$$8Q(\"I!!\"XM\"" "$(E(!(I$\"HE!!(E!\"X=(#8E%#85\"\"H1\"\"HA%\"X!!\"X%#!(-!#8)'#X!!#7Y%!']!" "#GM$\"7E!!'U!!'U!#X%'\"7U!#H!$\"8%!#X%'#(-!\"X!##(-$!H1#\"8=#\"(-#%(9&" "#8I$#X='\"XA!%HI%\"8I##8M$\"XQ\"$HM#!HU#%(M#%)!\"!H]!!)!$%9)&%9%*" "\"8]!#)-#$)-'\")A%%I1$!YA$$)5!\"I5!%IA*$9U!$)=$%)E$#YI##YQ#$)I$$YY#" "&)U!!)Q!#9U$&I]*$IY&$:!!$YY&$*%#%*!!\"Z)\"#Z-\"\"J--#J1!\"Z5!$J5!#Z=\"" "#J1!#J=!#J=!%:Q$#ZQ!$:I#&:=%$:E$$JM%%JQ$#ZQ!$JA%&JY,$*U\"$*Y\"&*]&" "&JY!\"ZY!$K!$#[!!%*Y&(;5($;%\"%JY(%;1#$[-%#;-\"%K-(\";=\"#+1\"%+1!$;I\"" "&[5!\";9&$[5!%+1\"\"[5!&+=&%+A!%KE$$+E!&+A\"&;Q'&+9\"'[E!%;I\"$;E\"%;A\"" "'KE,&[M$%;I\"';A+$[I!&+Q%%KM#$+Q!$[U%%+M%$KQ#%[5)&[]$#[M$$+M!%+M!" "$;M\"$[M$$+M!!+Y)#+Q!$+M!&;A/#[A!%+M%#+Q!\";]\"#[E!$+U%#[I!%+M!(,!)" "%;I\"%[E!$[A!%;M\"%;Q&$[E!%+E)'[E)&;E'$[=!$+Q!%+M!%[A$$[A!$[9!%+=!" "$KI#$;5&%[9$%+5\"$[9!&*Y'$[1!$;-#%+1!$+1\"%+1!$;-#$;%\"%+=&#ZU!%K1$" "\"ZM!&;!,#ZY!';5#$:U#\"+%!$J]!&J]!&*U+$:U#!ZQ!':A%$*M\"\"*A\"#JE$$ZM%" "#*I\"%ZI\"$ZI&!ZQ!#Z=!)*%'#Z9!#ZA!%Z5\"$*5\"#JE!#Z-\"%J-%!:-&#J!!$J%\"" "%*%'%*!$\"*!%!YU!#I]!$9U!#9U!%IQ&$9M%&9M#$)E!#9E!#9E!\")E\"\"Y=%!Y5!" "$Y1*!)9!%95,$)1'#I-%%9-)#))&#Y%#$)!!#)5#%8]#!H]##XY#\"HU!\"HQ$#(U#" "%X])!H1#\"8I#$8E#\"81!!(=!$(E(#X9'\"(A\"$81&#H1&$8-)\"X)#\"X%!\"X)##'Q$" "#7M#\"'I!\"7U!#GY#\"GU\"\"WM#\"GU\"\"G]!\"H%\"\"H%'#7]%#8=%\"H5\"#(5#\"(1##89$" "#8Q$\"8M!\"XE#!HM&!HI!!XQ!\"XM\"%HQ(!XU$#8Y$\"8Y!#Y%*#X]&$Y%!#I%#\"Y%%" "#I-%\"I)!\"I1!!Y-$#)5#!Y9!\"IA$%)E'#Y=#$)A##9Q!#9E!#9I!%IY\"$IM\"%YY(" "\"YU\"\"J%!$9]'&I]#$*!#\")Q\"\"J)##I]!$*!1\"Z-%\"J1!$:1!#J-!#J1!%*9&#ZA\"" "%*9'$JE%$*A\"\"*Q\"#ZQ!\"ZE!%:I'$*E\"%:E$%JQ!$JI%#ZQ!&JY,#ZU!\"ZY!#ZU!" "$J]!#[)%$JY!%+5\"$+%\"%+)\"$;5\"%;-#!+1$#[!!#[1!%+1&&;E\"%;5#\"[)!#[5!" "&[)\"&K9$'+=*$[5!#[=!$[I!&;I\"%[A!%[=$&;I&&;E\"%[E$$;=&%+I%&+A&$+A%" "%;M\"$[E$#;Q\"%+E!$;Q\"%;M&$KY#$+Q!\"+U!$+I!$+Q!$;M##[=!&[M%$+U!#;Q\"" "&;Y\"%+M%%;U'$<%\"$+Q!$+U!$+U%$+M!%;U&&+Q%$;I\"&[],$+]!&+=!$[U$$;U\"" "%+M%&+M!$KE#%[M1$;Q\"$KE##+I!'+=\"$KY'&[I$![A!&;A&#[A!#+I!%[E!$[A!" "%KA$$;M\"%[9$%;A&%[E$$[9!%[=!$[A!%;=\"#[5!&K)($Z]%$[E$$[)!$;1#&+%'" "';!$#Z]!!+%!$[)!#[-%&;!#$*Y&\"*U\"$:Y#&*Y\"#[!!$+!\"#ZE\"#*]\"$JE!\"ZM!" "%:I'#ZA\"%*E'#JE$#JA!#Z=\"$J=!#*9\"%*9&#JE!$:5$%:-!%:-($*)#$J%\"$*)#" "$:1!#J%$#IY!\"IY#$9Y!!9Y\"\"IE!$IY%#)M\"#II$$IM&!YU!'9E+#)A#$IA%#9A!" "!I=&!Y9!\"Y5(#Y=&!)=$!Y)!#I9\"\"I)!$I%'$I1##I!#\"Y!##XYc$$HQ'\"XU\"" "\"8Q##(I##8M$#(A$#(E#\"H=!!H=!!X-)\"81!\"(9\"#(9!$!8-\"\"H%'\"7U#\"7]!" "#7Q#$7M%!'Q!\"8!!#']!#H)&#()$\"81!!(5!\"X)\"#G]!\"X-\"#(5$!H5%#85$$85&" "#HA%\"8A!!(M!\"8I!$8M(#(M##8Q$!(U!#HY%!XY*#9)!\"8Y!#9!!$)%$#9)$\"IA!" "$)-$#91$\"91#$IA)$Y1'!Y=!\"I=!\")=\"#)E#$9I\"!IE##IY!$YM##IY!#9Q!#Z!," "\"IE!$9Y!$J%\"$Z!#$:1!#Y]\"%:-(':%#\"J-!%*1#%Z1#\"J1!#J5!!Z9!#ZA!!ZM!" "%:-!\":A\"#ZI\"\"ZI!#JA!$+)\"\"*Y!%ZQ\"!ZU!\":U\"#JM!$[!!#[%!#[!!#ZU!$+%\"" "%+!\"#;)\"(K%*%ZU\"#[!!$[-!$K-($[-!#+%\"#K9$!+5$#[%!'KI#%;I\"%[=(%+1\"" "%[I!$[A!$[A!\"[5!$[A!%+A!$+Q!$+M!$[E!$+M!&[I!#;I\"$KI#%+M!#+M!$+M!" "$;M\"\"+U!$;M\"$KI'$+U!$;Y\"%+Q!$;E\"&[])%[U%%+U!\"[I$'+M!$KY#%+Q!&;I\"" "$;Y\"%[Y$*;I'%KQ#$[U%$+M!'+Q*%;U\"%KY#&[U%&;E\"([I!#K]#%K]#&KU#$[Q$" "&[Q$$;M'$+Q!&;I+%;Q+\"[Q%%+M%\"[E!%+=&%+Q!%KM#%[I!#KE#![I!&[E)%[E!" "#;E\"#;=&%;A\"&+9\"&;A\"'[=!%+I%$[9!$[9!&;9#%;1#![5!#[1!$[5(#*]\"$[%!" "$J]$#[-!%+)&%[5%!+)$$ZY\"#ZU!$:]##[%!!:]*#ZY!#Z]!#ZU!\"ZY!\"ZQ!$*Q\"" "(JM.#JM!$JM!$ZA%#ZQ!&:I!$ZA&#J9!#Z9\"$:1!\"J-!#:1#$Z1\"#Z1\"%:-%!*-!" "#J%!#J%!#J%!$)M$()]*!)U$$II##9U!$9U$%)Q$#YE#&IQ(\")I\"$IE%$9E$#Y=\"" "$9A$#9M$&9-.\"Y)\"#)-#\"I1!$)%!&9%.\"Y-%$)9$#H]%\"Y!#$))!\"8Y!#(Y#$(Q'" "#HU%$8E##(Q#\"HM$$(E$\"H9\"\"XA\"!(=!\"X=#\"X5#$(!#\"8)!$8-#\"H%\"\"GU%\"7Y$" "\"WU!!GQ%#8-%\"7Y$\"GI\"#G])#()!#8%$\"8!!!H-&#(1##85$!H9!$XM%\"X=#\"H9\"" "#XM!$HE*\"H5\"#(M)#XM!$8E&#(U##HU\"!(Y!#HU-#(]!\"9-##X]!$Y5*\"9A#\"9)#" "$)1$#Y5##95$$IA&#)-#\"I9!#)I##9I!%YU#$)U#%II##9U!#9E!\")U%#I]!&*%$" "#YU\"#9]##Z!&$*!##IY!%J1&#JA!&:-)%:1!$Z1\"\":5\"%:5!\"*5\"$J-%!Z5!#ZE!" "$Z5&$JE$#*M\"#JI!$JI$$JM%#:Q\"$JQ%$ZU\"$JY$$*Y\"#[%!\"*]\"%[!&$;)\"\"K!#" "!Z]!%+1&$[)%%K%!$+-\"%+-&$[1!%K)$&[5!$+9\"%[5!$[9!\"[9!$;=\"$[=!#;=\"" "%;M\"![9!$[A!%K5$%+M!'KI,$[I!%;E\"%[Q(#[M%$[I!\"KM'%;M&$KQ#&+M&(+Q%" "\"+Q!$;I\"&KM#%+U!%+Y%&KU,%+U!%KU#%+Q!&[E%#+Q!%KY#\"+M!%+U!%+Y!%;]!" "%;Y\"%[Y$\"KU#$;Y&%KY#%\\)($+Y!'KY+(+Y!%+]!%+Y!$+Y!%+Y!'%#&]A&$]Y!%]Y!'=U(&-U!$MY!" "%]Y!'MY#%^!!%^%%%]]!%]Y!(-Y+%N)%%^!!&-Y!$MU!%]U!$>%%(-Q+%]U!$MU!" "%]M!#MY!%]M!&]M!#=E!%]Q!(=I,%M=!&N!$%]Q!&]E!&]E!&=A$#MA!&-A\"'-=\"" "(=1(&M9%$=9!&]1!%]=!%M1!&=1$']-!'M)%%]9!&M)!'M%$%]%\"$=!!%!!%^%!%]]!" "'-]!&]Q!&N!$&MU$&=]#%]M!%]]!(-]%$N%!%]]!(-Y+%]Y!%^%!)]Y(\"-Y!(-Q!" "%]U+%]Y!%]]!&=Q#&-Q\"'-U!)-U%%]Q!&]M!*=M+&M=$'=A($ME!%]Q!&]E!#]E#" "'-E!$MA!'==(*=5+(]=$$]5\"&-=#)-E+&]I!']-*%]5!\"M1\"&M1%(])/%M1!&-!#" "%<]!%%(%^-!(=Y!" "&-]!$^!!'-M''>)''.!%$N!!'.!!'.!+&>%#&-Y\"&-]!%]]!#]]\"$N%!%^!!%^%!" "%=Y$'-Y!%]M!%]Q!$M]!'-U&(>%!&]A!\"-Q!%=E$%]I!%ME!%M=!%=I$)=I!'-1'" "%M9!%MA!%]-\"#=9!(M=$&]9&%]9!'-5'&]A!%]1\"%M%*(M-$'\\]&%])\"$=)!%<]!" "%M5!')!!^!)%^)!&.!!'-]!&-U\"'N-\"%^!!" "&.!!%^-!'.%!%]Y!$N)!'-Y!$N!!$N!!)]U)%]]!&]]%#>!!%^-!%^!!'^-$$MY!" "%]Y!#=Y!%]Y!%^!!%]M!'.!!%]Y!%]Y!$M]!*MY!%]Q!%]Q!$=9!$MQ!&]E!&]I!" "%]Y!&-=#'=E\"#]9#%M5!&=9$#=A!&=9)\"=9!)--!\"-)!#=)!#M%\"(M%$#=5!\"-)!" "%=!$&M!%&M!!&\\Y'&LY&%,U#$,M)%!-%^!!(M]'%^!!%^%!!.-&%^)!%^%!#>%!&^%%" "&.9!%^!!$N-%%^%!$N%!%.9\"$M]!%^!!'.%!%]]!%^%!%^%!'N%('.%&%]Y!$>1$" "*^!!%]]!']])%.!(&-U!(=]!%^%!)>!*)-U*%]Q!%]M!&=U#%]Q!%^!!%]M!$MM!" "%]I!%ME!'-=!']E$\"-E!'=A(&-E\")=9!%M-!&])&%M5!%M%!%]1\"(-1+%]!\"&=)$" "'1!'-]!%^!+%]Y!%]Q!!.5!&>!#(>%!*^!!&.=!%^!!'.)!%^)!%^)!&>)\"%^!!" "&.5!%^5&$^5!%^-!#>%!%^)!%^-!%^)!,N)**.%)'.%&%^!!#^)\"&.)&*.%#%]U&" "&N!$\"-]!&>1\"%^)!%]Y!%]]!&.5!%]]!#MY+%MY%*-Y)%^%!&=Q(%]U!%]Q!%]I!" "&-9\"%]M!&]A!&]E!\"-A!(-=!(]A)%]I!&-=\"*-I4&M5$%M5!&-E\"%\\]&']-!$]!'" "'-)\"%]%\"$=!!&=!$)-!\"(\\Y!%!%&=]#'-Y!#=]!&M]$$N%!" "%^!!%]]!'-Y!(>)!'^!)'.-!%^-!&N1#%]]!&>1\"%^)!)>-%'.!!%^1!&.9!$N-!" "&.=!'>)'%^-!%^)!&.-!'-]!'>5&(=]!%^!!'>-!'>9!%^1!&N1$&N)#%^%!'>5!" "$N)!(>%!%^%!'-Y!$N!!%^%!'.-!%]Y!'-]!%]]!'-Y!%]]!%]Q!&-U\"%^!!#]1#" "(]I$%]M!\"-U!%MM%(-I!&]E!&]A!%MA!$MQ!&]=!%-5#%]=+&M5$(MA$&M-!\"M5\"" "'=%)$]5\"'M%*%M!!#\\](%LU!%]!\"&LM!$!!$N!!%^!!" "%.%\"'^)$'-U!%^)!&.%!'.)!'.)!%^-!%]]!%^)!'.1!&^5%'^1)'>1!#>-!%^1!" "&>1($N-!(.9*'.1!).1#)^9,&>%#(.1%(^--'>1'&^5*&.5!#>!!#N-!(^)#$N1!" "(^-#'.)!\".!!#N)&&^)%'>9!'.!!'.)%%]]!(>%+%^!!&]]%'.!!'N%#&-U!$ME!" "&=Q#$MQ!$MQ!&]Q%%]I!%]Q!&-=\"$MI!#=I!(-A!$]-\"&M9$$-1$&]1!)=-\"$]1#" ")--&%M-!&=)$'M)$(\\Y!'-!,&=)$%\\Y#&=%$*%!$]Y!&N%$" "%^%!(>)!'.)!%^-!%^-!%^%!&.9!$N1!%^)!'.%!&N1$$^5!&>)\"'>5!%^-!&.5!" "'^E#%]]!)^5&&.5!(N9!&.9!$^A!,^1*%^1!'.)&&>5\"&>1\"$^5!&>=\"&N)$%^1!" "'>1!%^-!%^-%&.9!%^)!'.)!%>)$'^1$&^!%&>!#$N!!$N!!%]Y!#=]!$MY!&>!#" "&]M%&-Y\"'-U&'=E((-Q%%]M!&-I\"&]E+'ME(%MA!%]5\"&MA$&=1)(=9#%]%'&-1#" "%MA!&M-!%M%!&=5((M!%$<]!&M!!'L]!%-#'.)%" "%^-!%^)!(>-!&.9!%^1!&.9!%^!!&.5!&N-#\">5!&>5-&.=!&.9!).9)&.9!&.9!" "$^E!&.A!%.=\"&.9!%^1!&N9#&NA#'>9!&N-##N9!%^1!'^9)%^)!&.9!*NI$'.-!" "'>5!%^-!(>)&&^-%%^-!%^-!(N9!&>%#%^1!(^)\"%]]!)=M,%^)!)=Y%%]]!&N!$" "\"^!#%]M!%^%!%]M!'-U!%MA!(-M!(=I!%]M!(=U!%MA!\"-=*'M5$%==$%ME!%]5'" "%M1!%M1!%M-!%=%$%M)!%=-$$-!)&M%%(,Y,%\\Y\"&LU!%!!&^-%)N%!%^-!)N%&&^-%$.!$(>-%" "(^)($^!!%^1!'.%!\".-!&.5!$^5!&.I!(>-!&.5!&.9!&.5!&.=!%^)!&.=!&.=!" "$^E!&.M!'.1!&.=!'.1%&.5!#N=!&.=!&.9!&.=!%N9$&.9!'>M&#NA!$^5&*.9\"" "&.9!(.9%(^-(%^-!%^1!&N-#$^5!'.-!+.A,&>)\"%^%!%^%!%]M!%^-!'N)('-U!" "(=]!'MY-%^!!(MY\"%]Y!%]I!+-M#(-M+(=U&(-=!&]M!(MQ,&MA$'ME(']=/%M1!" "'M5*(-1'']5&'--\"&M=$$=1!%M)!%])\"$<]!%!!%]Q!#=Q!%]Y!%]]!#>-!%^)!!>-\"$N)%#>)!(=Y!(>-!'>1&%^-!&N%$" "'N9(&.9!%^1!&.=!&.5!&.9!)^Q&&>5\"(NA,)>=/&.=!&.5!$^=!$^A!&.A!(NA!" "&.A!&.A!'N=\"\">A!&.=!&^A$&.U!&.=!(N5!'NI'&^A$%N=$&.A!(N=!%>-$$^9!" "&.9!$^5!&.I!+N9*&.5!&>5\"&.5!$>1$%^)!%^-!%^-!(N!!$N%!%^%!%^%!&.!!" "!.!%'=]\")M]!'-Y!%]U!$MU!&MQ$(-M!%]M!%]M!%]I!(]E.$MA!'M=$#=5!%MA!" "&M=)#=5!%M1!%]5\"'M-*(-)\"&M%%$=1!(\\]!%\\]\"&,]#&L]!%!!#M]!(-Q!" "(-U*&-Y\"%^)!(=]!$M]!%^!!)=U0&>!\"%^%!%^-!%^)!'M](%^-!(N1!(.-*%^1!" ").9)'>9!'^9#'>5&(>%!(N=!'NM'&N9#*.A''NA''>A!'>9!(NM!&.E!&>E\"(^='" "'>E&#^M'&.9!).E#*.M!&.Q!'>A!&.E!\">M!&.E!&.]!&>A!&.=!#^A\"&.A!&.E!" "&.=!#>=%&>=\"&.9!(>1!&.=!&.5!'>9!&.5!(>1%&>-')N10%^%!&N)$&.)!#>1!" ")>)%%>%#(-U!(=Y&$MQ!(=U'%^%!%]Q!$MM!&MQ$%M1&)=M!*-=$&]E!%M9*$]E\"" "%=9$#=A!%M9!$<]!%]-\"(=5-#=1!$=%!(M%$%LU!'--\"&]!!%LM\"%\\U\"%!&%^!&%^%!%^)!'.)!%^1!$N%!*^!!'.1!%^1!$^=!%^1!" "$^E!&.E&&.=!&.5!#NA!'>9!'>E!&.5!%>U\")NQ0%^A*&NQ\"'.I%(^M'(NI!'.=%" "(>I+&.I&&.A!&.M!&^I)&.E!)^E!&.A!'>I,'>A!&.=!$^E!&.E!&>I!%.Q'(NI&" "'>A!&.A!&.=!&.=!$^E&&.9!#^5\"'N9'#>-!%^)!$N1!%^-!&>!\"%^)!)N)&'.%!" "$N!!'.)!%ME!$]M!$MY!)-Y)$M]!(=Y!%]Q!']Y))-A+$MQ!&]=!'ME)$ME!(-=!" "$MA!*=9!%M9%#M9\"&M%!%]-\"%M)!%]=!&-%$']%!%-%$'=!)%\\]\"%1'$^I!&.5!&.A!$>)$" "(.5*&.=!&>E'&.A!&NA#'>E!'NA''>=!'^I\"(^A\"'.I%#NI!&.I!+^M#'NM'$^M!" "%^M%*.A'&.M!'>M!&.I!&.M!&.M!&^I$\">M!'>E!'>I!&.M!&NI()^I,$^E!(^E'" "&>E!#NI!\">E!)^A!'>E!%^1!&.=!&>5\"#N5!'>5!%N5$&.9!(.A*'^5)#^1'&.)!" "'>-'%^1!$N%!'N!)'.!!$M]!&-Y'*MY&&]M%#ME\"%]I!%]I!%]I!%M=!'-Y&$MI!" "&-=#'-5\"%M9!%M5!\"M=#']-*%]9&$=)!'-%#&M-%&\\Y&&L]&$\\]#$=!!&\\U&%!0&]Y%%^%!%>%#(>1!'>1,%^)!*N-%&.5!%^)!'.1!+.5'#^9\"&^9%$.A#'.=%" "'>Q!&^A$&>=\"'.A&(>A+&.M!%.9\"&.=&&.M!#NM!&.I!&.Q!&.I&&.Q!$_)!\"^Q#" ").Q-&?!!(NM!'>Q!&^I$'^U\"'>M!&.]!#^Q!'>U!).I.(N=!&.M!'>I&)^I!'>I!" "&^I$(NA!)^A!&.M&&^9$'^9#&.A!&.I!$^=!'>5!'>5!'>9!%N-%&.5!&.5!&>1\"" "'>-&'-Y&#^)\"$^!&'.!!'.!&&-]\"&]=!'=Y'&-Y\"%]Q!&=M#%]Q!%ME!$MA!%ME!" "%]M!%]E!&M9$%M9!(-E!'-1'&=1$%M-&'])!%M%!&M)!%])\"&L]!$=!!),]!%\\U\"" "%LM!%%!%]Q!'M])" "%^!!%]U!\"^!#$N1!'-]+$>)$'.-!'.1!&>1\"&.%!&^9%)^=!(.5$$^=!&.A!&.Q!" "$^E!&.E!$^Q!&.Q!(^Q!'^I#&.A!(>M*$^M!'^E#+NY.\">U!'NM''>Q!(N]&(>U$" "(>U%&.U&&.Y!'.]$(/)().I#(>Y*(^U'&.U!'>I!&.Q!(>U/&.Q!&.I!)^I!&.M!" "&>I!$^A!*.M!#>=%&>I!&NM#$.A#*^E%'>9!(NA!'.=%&.9!(NA!&.=&&>-\"&N1$" "(.1*#^-\"&.-!%]]!)>)*'^!)%^1!#>1!%]Q!%]Y!(-M!&]I!'-A!#=M!$MM!%M=!" ",]E!']9+$MM!#M5\")-9!%M5!(]5$)--!'=-$&]-'%M)!%-9#%M)!&]!'%]%\"(LU%" "'LU!&,U#$LM\"(%/%]]!*^%!" "!-M!&.%!$N1!$^9&(>)!'>)'%^1!&.1!\"N1'(N9+$^9!(^1-(>5+&.A!'NE''.I%" "&NE#&NI\"&^=$&.Q!&>Y!&>Y!&NQ\"*.Q'&^U)$^Y!'^]\"&^Y#'NM!'>=!&.U!'NY'" "'NY!(^U!*.Y'&.U!&.Q!'^Y\"&.Y!%/!!+>U'!.U!'>E&&>Q!).U''.Q%&.E!$^M!" "'>M!(^Q!&NI#(>M%'.Q%&.A!#^E\"&.A!$^5!)^Q&$^=!'>-&$^A!$N)!'>5!&^5%" "&.5!%^1!).-$'.)%%^)!%^-!'N5(%^!!%-]#$MQ!'-Y!'-U!'-M&'-M!%ME!'-M'" "%]A!%]I!&-M\"%MA!%M=!%M5&\"-1%&-=#%M-!'\\M'$=)!&<]$%M!!(,U#%!%" "%^%!).1$'>)'%^-!&>!##N=!$^5!'>1&(.9*#NI!%N=$&.9!$^A!#N9!&>E!*NM4" "&.A!&.Q!&.M!#^=\"$^Q!#NE!(^Q!)O%#$^Q!&^U#&.Y!'NY!'^Y\"&.Y!&.Y!*>]-" "'_)(*.]!&.]!&.]!&?%!*?!(&.U!&?!!$^U!\"^Y#&.Y!*?!!&.U!&.]!&N]\"&.I&" "&.]!&.Q!'>U!&.M!&.M!'>I&%.Q!'>A!&.I!&NI\"&>A!&.A!(NA!%^)!&.A!'N-\"" "#>-!$N%!%>-$&N-#%^%!&.5!%]]!%^!!$N!!']])%]Y!%]M!)-]%#=Q!%]]!&MY$" "%-=($MI!$M9!&-A\"%]5\"&-A\"&-A#%M-!%]1\"'--#$]%\"%M%!'\\M\"%M)!$,Y$'L]%" "%LU!&\\Q&%!!%]]!%^-!%]]!" "(>!!$>)%%N5%'^-)'>1&!.9!$N1!'>9&(.=$&.I!&.=!%^A&&.I!&.E!&.E!&.E!" "(NM,'>=&&NQ\"(>A+&?!!)^U,&.U!&?1!*^Y$$.Q#-_-+$^]!&?!!&.]!&.]!&.]!" "&?!!$_!!'O-!&^Y#&?-!(_%!'O-!&?!!'^]'%^]%$_!!%N]$*.]!&.Y!&?!!&.Y!" "(^U!$^U!(^Y!'NQ'*NQ##.Q)*.M!&.I&(.E)*NA0&.I!&.=!$^9!(^-\"%^1!&^9%" "&.=!&.9!#N9!$N1!%.9\"+^)+%^)!&.%!%^!!&N-)'.!%&=]#$MQ!&-]!(-U!&=E$" "'-A'%]I!(]A$%MA!&-=\"#=-!&-E\"$]9'']1*#=A!%]-\"%-1$#M%\"%!$'.1!&N-$" "%^%!#^!\"&.5!$N1!)>5*&>E\"&.A!&.=!%^1!'.=%$^M!&NA#).I\"&.M!&.U!)^M1" "'>Q+'>Q&(.U)&.M!&.Q!$_%!&>]!&.Y!&N]\"&.Y!'O!!&_!)&?!!(_!!&?-!#O1!" "'_)(&O!\"'N]!'?%%&_9\"&O%\"&?!!&.]!&_!#%O!#$.Y#'/!*%_%$&.Q!'N]!&.]!" ").]-+NU'*.U!&.Y&&.Y!%>Q#$^Y!&_!#'NI!'>I!&NI\")NA%&.E!'^)*(.A$(.=$" "&.9!&N-#'>9!&^1%%^)!#>-!&>)\"\">!!%^)!%]]!%]]!%.!\"%]Y!(-U%(=Y!%]]!" "%ME!%]I!+M5'%M9!#M9!(==\"&-5#%M5!&-9\"%]I!&]=!%M%!,M=&'LM!(]!!&\\]&" "&9!'^=(+NE4$.I#&.E&'^M\"'^=(!>I''>M&#^Q\"'NY!" "&.Y!&.]!$_!!&.Y!&.]!'^U(&^Y#&NU\"'O!'!/!!&.]!&?!!%/-!(_)!&?%!*>Y3" "&?%!&?%!$_)!'O)!*_%#%_%%&?)!'/)$&/9%&?)!'O1!'O)!&?!!&O!\"&?!!&^]#" "%/-!&.]!'>Q!&.Q!'NY!*.U!*^M**.M2)?!('NE!#NE!&.I!$^A!'^E\"#NA!&N=#" ")>=/'.=&$^9!'.!!#>1!%>-$'>-!&N%$$N)!%^-!$^%!%^!!%]Y!%]M!%]Q!%]Q!" "'MM.%]M!&-I\"#=E!&]A%%M9!&-=\"$]9\"&-A\"(=1#\"M-#(])&&=9$%M%!'\\Y!%M%!" "%\\]\"$L]\"%LQ!&LM&%,]#%!!'=U''^%)'.%!%^%!" "%^-!'>)'%^-!(^)(&.)'&.=!&.5!\"N5\"\">I!$^A!$^I!$^E!&>A')NY$&.Q!+NU!" "\">U!)>Y)%^A&).U-(_%!&.]!'/5$&.Q!$_%!&?)!&?%!&O-!&?!!#O-!&?)!$_)!" "(_%!&_)#&?-!#O!!&?)!&?)!&?%!(/A!*?)!'O),(_)!(>Y*'_%((^U!#O%!+>Q!" "(O!%(_%!%?%\"&.]!&.]!&?!!'.M%&>U!$^U!'NM'\">M!*NM)'>I!(^Q!&.E!-NA&" "%>=(&.A!&.9!%N5%&>5\"%^1!$>-$%^)!%^-!'.!!#>)!,>!)&=]#$]Y!&=E#$MM!" "(=Y&&=U#\"MU\"#=I!'-I&&]=!&-A\"(]A$%]5!%M5!%]5\"(--'&=)$\"-%!(LQ!%]!\"" "&LY!&5&&.Q!&.Y!&.M!&.Q!+>A'$^Q!&.U!" "(^Y!)^U,'>U!&?)!'N]'#N]!(_%!$_)!&NU\"&.]!'O)'&?%!&?5!&?1!'/9$%/5!" "&_-#$^]!%/5!'_A''O-!&?1!'/1$'/5$*_1)+O-!&?-!%/-!'O)!&?)!)?5\")?%(" "$O!%*O!/&?%!&.]!'O!!%/!!$^Y!'>U!'.Y$'NY!(^Q!&.M!$^M!&>1\"&.E!+>M!" "&>A\"&.9!&.9!&>=\"&.5!&.-!&.9!&N-)(.1*'.-!&>%\"&]]%%]Y!%]]!'>!')^!(" "(-M!%]Q!$]M!%]I!\"-E!#MA!'-1'%M=!%M9!%=-$&=1$(=1('=!)%]%\"%M%!'=%(" "']!!%LU!%M!!*1#" "&.5!&N5#&.9!'.I/&.A!&.=!%.I!&.E!%NI$#^M!&.E!'NU!&.Y!&^A$&.Y!#>Y%" "'N]''^]!&.M!%O%#&?%!$O5$%/-!&?)!(_!!%/-!)/5-%/-!&?1!'O)!#O1!&?1!" "$?1#*_-)&?-!&_1#(?))'_1!&O-\"*?1'&?!!*?5''O1!&?9!(O9$&?%!'?)%&?)!" "'/)$#NY!&?5!&?!!&.U!,/)/'O%!'/!$&.Y!&.Q!&.M!(NQ&&.M!'O!!(.E)&^E)" "&.=!&.A!&N=#&.=!'^5#&.5!(^1-%^1!$.-#$N)!&MU$&]]%%.!\")M]!%]]!(=]," "#=Q!%MQ$%]Q!\"-Q!%ME!%MA!%ME!$M=!%M9!&-=\"%]=!$]=\"%]5!#=)!'])+#]%#" "&M!%(]%!)\\Y!&LQ!%LM\"%\\Q\"$%\"'.%&'N-('>1''.1!" "%^)!)^9&&>9\"\">=!'>=!'>E!&.E!#^5\"&^Q#\">Y!'.Y%#NM!->Y*'^Y\"#NY!&.U!" "$_%!&?!!%/5!&?1!#O)!&?)!&.Y!&/)&'_-(&?-!)/1!(?1$&_5\")/1!(/=\"(O5*" "&O%\"&?A+%/1'%/5!&?9!&?5!)?5(&O)\"&?5!&?A!&?5!&?9!&?9!#O)!&?)!)/-!" "&?)!)/)''/!$&?-!'NY!(_%!&?!!)/!-'>Q!$^Y&&.M!&?!!&.U!).A#'NM'(NI!" "&.A!&.I!%N=$+>9((N5!'.A%&.5!%.-\"'.1%%^-!&>%#&=Y#%^%!*^!''-]!%]I!" "%]Q!'>%'&-Q\"$MM!%]M!&M5%$=9!%]I!&-9\"&-E\"'=5(&-)#&-A\"%M5!&]5!%]-\"" "&-%#']%&%%&$^1!$N%!%^1!\">5!" "\"N)\"&.5!&>9\"&.A!&.I!$^E!&.Q!&.Q!&.I!'NY!$^U!&^U$(^U!(^Y!(_)!&.]!" "#NU!&N]\"&.]!&O1!%/5!&?-!*/!!&?=!%?1\"%/1!'O9&%_9*&?1!*?9!&?9!%/-!" "&O1!%/=!)O9\"'/-$&O5!'_5'&_9\"&?E!&_M\"#OA!&_5#&?-!,_5&&?!!'O1!)_A*" "&?5!(_-+'O)!&?)!%O)#'?-%&?!!%_!$\">]!&?)!&.Y!#NU!'>U!&.M!'>I&&.M!" "&.I!'.E+&.A!&.A!&.9!&.A!$N1!#N=!'.1!%^-!'^))'.)!\"-Q!&>%#%]]!&.!!" "$MU!\".%!'-A\"%]Q!%-M#']=%'-E''=A(%M=!&-9\"$]1\"%M5!(])/+M%3%M%!%]!\"" ")=='%]!\"\",M!%\\E##\\U#$\\E#%U!#NU!(>]$$_%!'?!%'.]/#O%!" "&?-!&?)!&O)!#O1!\"?9!&?=!&O1(&?1!'?=%&_5\"&O=')/E!&?5!&?5!(/M!&?=!" "%/=!&?A!'?=%&O=!'O=&&?=!&?9!)/A,&?=!)?=(%/9!&?9!&_9)(OA+'/1$&?)!" "&?1!&?=!)/-!#O-!(?))%/-!$/%-&?%!&.U!#O)!#O!!(^]!&.I!'.Q*(.Q$&.U!" "&.I!&.I!&>E!'.-%&.=!&.9!(N9!%^-!'NA!$>5)*N)%%]Y!'.-!(>%!)M]!%^!!" "'MY#$]]&%]U!&=Q#%]M!$=E$\"-I!#=A!%]A!%M=!+M=!%]I!(-1+'-)\"'])+'--'" "%]-!%M!&\"<]\"',Q#$\\I#'<=!$\\I#%LQ!\",I!%LI\"%\\A#%L=\"$,=!&<1!%L5'&LA\"" "%,!!%\\)##<1\"#+Y!&+]!'+Y!&L!'%[E!$[E!%+]%%;E\"%[E$'KE($[=!$[5!&[M-" "#[1!%;5\"%+%\"$;5\"%[%%%;!$#[%!#[!!$:Q$#JI!\"JM##ZA\"%ZI*\"ZE!%*=&$JE(" "\"Z9!$J9!$J5!#J%!$*!##J1!%I]\"#J!!%:%(#)M#%9]%#9Q!$9M%#YM##IE\"#I=!" "%I)(\"Y1\"%I5*%)-%&9A*$Y=#\"II!%IA##9A!#II!#YI#%9U%$)Y##IY!$:-#$IU\"" "$:5$#J-!$J1%#Z)\"#J-!#J%!\"Z9!#Z=\"\"ZA!%ZQ&%*Q'$ZM\"$:I$'ZU\"!:A\"#[!!" "\"Z]!#[!!#[%!#[%!![9!$+=!$+5!%[9!&+M%%+A%&;A&![I!$[I!'+M!$K]#';U+" "%KM#&+]!&\\%#$,%!%<9!$<)\"',5-%\\9#%LM\"'<5*&LA\"%\\A##,5!$LA\"$LA\"&\\Q&" "%)'%^%!%^!!%^1!\">-!(>%!\".1!" "&^9$&.I!&NE#%^I%'>E&&.M!&>M!$^Q!%>]\"%>U((.Y)'O!!&.U!&.]!&?)!&?-!" "&?-!#O)!&?)!$_!!)/%!)/E!&?5!%/9!#O=!&?9!&?E!&?=!&_E\"&?=!%/E!&_M(" "&_A\"&OE!'_A!'/U#&?5!'?E$(O9$)_A#&?9!&?A!&_A\"&?=!)?-.&?9!&?=!&?5!" "&_%#'?5%&?1!(/1)&?1!'O)!&?)!&O%\"$.Y##/1$&.]!'>E!$^Y!&.U!)NU/\">]!" "*.M!&.Q!&.I!&^I$&.M!(.A*(^-.&.A!'N5'&.=!&>%(&.-!\".%!%^!!&-]\")]](" "$MY!']Y%&-U\"'-U!']M*%]I!&-I\"%ME!%ME!$]-\"%M=!#=5!%]5\"'M-.%]1\"&M%!" "%]!\"'-!'%L]!%M%!'M!*$A!'.)&&.5!$^9!&.9!" "&.9!(^A!)^E!&.I!&.U!&.A!&^U#'.Y$#^I\"&?!!'NY!'.]%%/-!&?)!'O%''O)!" "'O-!(_)!&?-!)?1))?5!'_9!&?E!)?I!&?=!#O1!&/E%'/A##OA!)?E'*OA!*_U(" "&OI')_A*'_E!)/9!#OA!(/A!+_E!'_I!)/A!*O=!'_A!&_=\"%/=!&?=!&?-!'/9$" "#O9!'?5*%?5\",_1&&_1)'>Y&'/-$&O-!&.Y!&?)!$_%!'>]&$^M!$^]!&.U!+.Q," "&.U!(NI!)^I&&.Y!&.E!(.A)&.9!&.9!'>1&'N%\"%^1!$N)!%N-%'.%!\".1!'.!!" "&=M$%^-!&]Q%'-]!%]U!#=E!(-M%&=E#$ME!)MA-(=I,%M9!'=9('=1-$=-!']5!" "%-=#%M)!'-!(%<]!&LY&$-$&N=#'N5').5/*^A%(>5+" "(^A-(^E-$>1*&.=!&^M$#^E\"&.Q!(NU&(N]+&NY'\"NU!*_!#&.]!&?-!&_)#&?-!" "(_1,&O1!&?-!&?=!&?=!&O9!&?=+%?A!%/=!&?E!'_A!*_Y!'_A!*O=!*_E(&OI!" "&_I\"+_=!'?I$&?E!%/]!&OI!'_I!&OU!)/E!&?A!*OE!'_E!-?I!#O=!'_A!'_A!" "#O=!&O-\"&OQ!&/Q$)/5!&?=!&?)!&?E!%/)!%/%!$_!!&.]!&.]!&?%!(/)('>U!" "(^Q!'_!(*>U\"&.M!&>E!)^E!(>A&'.5&'>=&'.I*(N5,&.5!%^%!$>)*%^)!'^%)" "\".!!'.!!%^!!\"-U!&]M!%]Q!&=Q(#=I!$=9!%MA!$M=!$]9\"'-9\"%]M!$]1\"']-!" "%M%!'M)$*-!!$L]\"&,Y(%-%$%\\U\"%\\Y\"%LM\"&!!&N5#%^-!%^)!#N=!$^E!&.A!&.I&" "(NE&'^A('NM''^Y('^U(&.Q!(NA,'N]!&?-!'O!!&?1!&?-!&?1!&N]\"&_%#)/=!" "&?5!!O9#$_%!&?9!%/9!)/5!&?=!%/Q!*OA!*/E%*/E+*OM!,_E+#OE!&OI!%O=#" "&OM!'_Q!&OM!'_M'(_E+(/Q!&_=\"'OM%\"?E!'/M#&?E!'_I!)/9!)/E!'_I!'_I&" "&_I\")/=,(?9)&_9\"\"OE!'_5'&O)!(/=(&?-!'_!!)O%#$_%!$_!&&N]\"&>]!&.U!" "'NY!&.Q!&.M!$>Q$&.M!(NM!%^1!%^-!%^%!&N9#&>-\"'N1('^-#%^5&).-$%^!!" "'-U!&]]%$MY!'=Y((=Y!%]U!!-I!%]I!!-E!'=U\"&]=!!]A$']5!%M5!'-%#\"--!" "(])&&-%$%M!!&\\]&&-!($!%$MQ!&MY$%]U!$MU!&-Q'-N%.&M]$'.-!$N1!&>5\")^9'&.9!)>5%&.M!" "&.E!(.M)&.M!&.Q!&.U!&.U!$^M!(NI!'N]'(?!)&?%!&?%!'?)%&?-!'/-$+O1'" "(?5#&?5!&?A!'O5!&?=!'/E#+OI%+_E!&_E(%/I!&OM!&OQ!&OI!&O]!)?M!&OQ!" "&OI!%/E!&OU!!/Q!*OM''_U!&OU!&OQ!&OM!)OM\")OM((_I+&OI!'_E!'_A!\"?5!" "*?E&&?9!&OM!&?=!'?9%!/5!&?%!&?)!&?-!&?E!#O)!'?-%'_-'&.]!(/)(&.Y!" "'^U(&.Q!&.Q!'>M!(NE!&.I!&>-\"+NQ-\">I!(^='(.=$$^A!+>E!(>-&#>)!)>%+" "#^!\"&-]!&>!\"'MQ#%]Q!&]M!%]M!%ME!)=I!$=9!%ME!&-9#$M=!&M)!%<])&M-!" "%M)!&]5!',Q#%=%$%\\]\"%\\]\"(-!-'LI+&%!%^)!$^9!$N-!'^9#&.9!$^9!&.=!$^A!&.E!" "&.M!&.U!$^M!&^Q#&.M!&?1&&.M!&N]\"&?!!&?!!&?)'&?)!'O%!'O-&&?%!,O9%" "'O)!#O9!(_=%'OA&#OA!'_=!&OM!&?E!%/E!&OI!&OM!'?]$'_M!%_U#&_U\"&OI!" "#_M!-/Y,&OM!&OY!'/U)&_U\"(OM$%_M#(?Q)&/U$'_Q!&OY!&OI!#_Q!%/=!*_A\"" "'_E!(/A\"$/Q\"&?=!&OE!&?9!&?9!'?-%%/1!&?5!,?A\"'O)&'O%!$_)!._!1&.Y!" "#.U)&.Q!$^Q!&.Q!%^M%&.Q!&.A!&^=$&NM\"(N=!%^1!(>5&'.-*$]U''.-!&=]#" "$N-!%]U!'-Y!%]Y!'-U!%^!!&-U\"%]M!%]I!']E$%]A!&M=$&M9%(]%*$M5!%M-!" "(M1)%]-!&=-$&\\]!%5!&N)$%^-!%^1!&>1\"&.9!'>9&'>A!&^Q#'>I!" "%.I!&.M!&.E!+>U!&.E!&.U!(_!&&.U!'_!\"\"N]!$^]!#O%!'O1!&?1!'O1!)/5!" "&?5!'_E!'_=!)?M!'_E!'_A!)_I*'_Q!&OI!%/E!'/9#+_Q&&?E!\"OM!&OU!)_Q#" "!/]!&P-!&OY!&P)!(/]!)?I!'_Y!)/M,(/]!&OU!&OU!(_Q$&OY!(_U+'_M!(?=)" "%/=!-/M&)/=!&OA!%?=!'O=&&OI!'O1!'O%!'/5$(O9*&?1!(/-)&?!!&?%!&.Q!" "&.Q!'^Y'(NE!$^Q!&.M!%.Q!+^M)&NI#'NA'&.=!'>9!&^9$&^5%(>A+%^-!%^)!" "$^%!%^!!%]]!&]U*&N)#&-U'%=I$'-U!%M9!*=A&#=A!&]A&(=9,'M5)&M5%'M5)" "%]%\"%]!\")-1&'-%\"$!!'>9!'>5!'^-#'N1\"'>5+&NE#$^I!&.A!'>A&'^E#" "&.I!#^E!%>M\"*NY\"(NA,&.U!'O!!$^]!&?%!&?%!'O)!&?9!&?1&'_A''O5!)?9!" ")/=!'?=$)/A!*OM!&?5!#/I#(OI$)/E!)?M!&OI!$/U(&_U!&OU!'_Y!%_Y#'_U!" "&OI!+?]*&P!!%/]!%0!!(/]!&O]!&_Y!'/]\"(OY*(/Q')?U!$/U\"#_M!\"_I\")OQ\"" "'_U!(?E)%/I!'_E!&OM!&?=!+OA7$_Q%*O=!'?-+(?1#&?1!$/1\"&?=!&?%!'O)!" "(^M-&?!!#NU!&.U!&.]!(>I+'>U!(NI!&>I!&>E\"%^)!&.!!&.I!%^-!%^!!'.)!" "(>!!'.%!$N1!%]Y!)-]*%]Y!']Q$%]Q!&]M!%]U!%ME!'-=\"%M=!&-5#%-5#&=12" "(M)$%M)!$M-!(]%!%-!$&-%$%L]!'LQ!%1&'^1)(N5!'>A!&>A\"%.I\"&.I!&.]!" "(NI!%>I()NQ*(>I%$^Y!(_!,&/!&&.]!)/-(&?)!$_%!'/1$'^]!%/5!'O1!'O9&" ")_A/)/A!-?1)+/E#&OI!&OM!$/Y!'OU%&_Q\"&P!!\"?U!#_]!'?Y$&OU!(/]!#_]!" ")/],(_Y$'@!#%`1\"&P)!%0!!&P%!&O]!&OU!'/]/'/Y#&OU!&OY!&OU!'P!%(/]'" "#_M!%/]!'_E!(/I!'_=!&?=!%/A!&?A!'O1!&?5!&?1!&?A!%/-!&?)!&?%!'>Q&" "%NM$+N]'(NM!'>A!'>Q!'>M!&.E!&>Q!'>E&+^=+&.=!%N1$%N9$(>-!&N-#$^9!" "&^)%'>!\"%^!!%]U!$MY!%]U!$MY!%]Q!%]Q!%]I!%ME!%]I!#]E#%M1*%M5!']-*" "'-9'']-!'])+%M1!'=))'%!%]U!#MM!%]]!&-U!%^%!)N)1(>)!'.%!&.=!&.9!&.=!'>E!&>A!&.Q!$^I!" "&NA##NY!,.]$&.M!&.U!&.U!&?)!$_%!'O)!&_1\"&?1!'O1!(/9(%?9\")/=!&?=!" "&OI!'_E!*_E\"%/M!'OI%(_Q$'OM%&_U\")/U,&OU!&OY!&_]!&O]!&OY!)P-!(@!\"" ",@%!&OQ!(0!!'`!,-`1!(?]\"'_U!'0-\")@!!(O]))OU.&`%'&_Y!'@!$&_U!&/Q%" "'_Q!&_M\"#_E!%/M!,/E!'_9!&?1!\"?1!%/9!&?9!&_5#)/1!&O)!&?-!$_)!&?%!" "&O!\"&.Y!*?%!&.Q!&^U$\">Y!$^M!'^Q\"&>M!$^=!&>A!&.9!(NI!$^5!*.-.&.)'" "%]Y!&^-%%^!!$M]!\".%!%]A!%]U!$MQ!%]M!&]I%%M5!%]I!'==#&-A\"%-=$(-A!" "'-1'#M-\"$=%!$]%#&,]#%<]!%LQ!%\\Q\"&)!%]Y!'N-(#>)!'>5!$N1!'^-#'N9'&.9!%^1!&.E!#NU!&.M!" "&NI#%>Q\"#NY!*.U!(^]1!/%!(?!$&?5!&_1\"&?1!&_1\"'_5'&?=!&?-!+_=!(?9)" "'O-!'_A!*/M$%OE#(OM$(?M\"'_Y!)?Y!(@!\"&OU!-0-#%O]\")@-&(0)!*`)!,@-'" ")`%)&P%!(0!!'_U!(@%!)P-!(/]!(0%!(OQ#,@!!)@!!&O]!&P1!&O]!%/Y!&OU'" "%/]!&/Q%&OM!)?M'&OI!,?E/'_E!\"?Q!'_=!&?A!&O1!*O=-%?1\"%?!($_)!(/1)" "&O!\"&.]!&.]!$^Y!&NU\",NQ!&.]!'N]!'>M!&.E!\">A!&.5!%^-!%^)!&.-!%^)!" "%>1#$N)!&.%!&.)!'-Y!%]U!)=Y&%^!!&]A!$MI!']9%'-U!$MA!%M=%%M9!&M5%" "'-9,&-A\"%]-!#=%!&,M#%M!!%<]!&,Y#',Y##LI\"%-!%^)!(>1+*^1%&>5\").93#NA!'^A(&.Y!$^I!)^E!" "'NQ'%NY$*.Q!$^Y!&.]!(NQ&%?%\",O),'/-$&?!!&_5\"'_E!(?%*)/5!'_5'&?=!" "&?E!(/9(&OI!)/Q&&OM!&_Y!(/Q-)_Y.)?]!&P!!(0!!,?Y4(09!'_I!(@!\"(09!" "(0-!(0)!+0-!(@)!-`)!)@!!(0)!(P9\"(0-!)0%%)P)!(@!\"%0!!&OY!&O]!&OY!" "(_Q+-OY!&OI!$?M#$OE$(/E!*OI!'?=%'_I&%OM\"&O9!#OA!&?1!(/=((/%#'_)!" "$^Y!&.Q!&?%!$^U!'>U!&.Q!&NQ\"'>M!&.9!&^Q$$^A!&>=\"%.9\"&.5!&>5\"%^1!" ",.%-&N1##>!!\".!!&-]'&-]!&]U%'-]!&-M\"&=I#'=I('=E\"&]A!%M=!&M9$%M-!" "&]1!&]1+%M%!%M%!*-%&%M)!)-!,%)!%^%!'N5(%^-!%^-!(>)!&.=!&^9%'^=#&.5!&NM\"&.=!&.U!" "&.I!+>U!&^Q#&.]!#^]!&_)(&?)!$O1$'O)!&?1!'/=#'O5!(/5((?=#*OA!'_I!" "(?I#%?I!)?I!'_Q!%/]!'_Q!%@%!(?M\"'P%$(/]!(0)!$0)!(0)!\"@!!)@!!(09!" "(0-!/?Y)(@A!(0-!(0%!+@-),@-!)01%)@!!)P)!+@-/#`%!*?Y,'_Y!'?U$(_]+" "&O]!)O].)?Y'\"?Q!&OI!&OI!'_Q!)?Q!&?A!&?=!&?-!&?-!%_5$&?1!&O-\"'_)!" "&?5&&?!!&.]!&.I!\">]!$^Q!&.Q!&.M!'.=%'>U&&.=!$^=!\"N=\"&.9!%^-!&>5\"" "&.5!%>-$%^!!$N%!&]]%%]Q!$MY!(=U!!-Q!&]M!%ME!)-=!&]A!&]A&&-E\"$=A$" "%M1!%M-!%]5\"$<]!$=%!%\\]\"%\\Q\"%LY!&\\]&'LI*%!$%^%!%^-!$N%!'.)!%^-!&.9!$^I!'NE!(>E%'>A&)^I!&.I!" "&.U!&>I!'^Y'*.Y!&?!!'O!!$_)!&O)!(O5%'/-)*?5,&?9!'_=!*OI!!/A!)/A'" "(?E#&OI!&OQ!(_9%!/U!%OY('`!&&P!!(0!!(`!$(0!!(@!!(05!(0-!-0)1&01$" "#`1!\"@1!'01\"(01!(01!(/]!(P)\"*`%!&`-!*0-**P-,'0)\"(_U%(@%!+/]!)@!!" "&O]!*/U+(/Y'%/U!&OQ!'_]&&?=!'_M!%/I!#_I!&_A\"&?9!&?5!&?1!&?1!#O-!" "+_)(\"?%&$_!!'N]!&^U#'NU'&>I!&>M!#NI!&.E!$^E!&.A!'.A&)^9!)N1!#N9!" "%^)!'.-!%^%!&.%!$N!!$M]!$]M\"%]U!'MI)(-E&%M5!%]M!&MA$&-=\"$=9!%]5\"" ")MA(']1/%M1!%M5!#M%\"&,]#%-!$&L]&$\\Q#$LA\"')\"(^)(%^%%'^-#$^5!%^-!(>1!&.=!)^9''>A!&.I!&.M!%.Q!" "*^U5'.Y$(^Y!#NY!%/%!)?!#(?-#&?-!%/1!&_1##/5$&?9!&?=!)/A!&?9!&OQ!" "&?E!&OM!&?9!'/Y\"&OM!&OQ!+0!!*0)0#?]$&P%!'@1#&P-!(09!&`9!(01!)`-(" "&P1!)@A%'`-%#`5!%`5#&`5!%@%!)@A%+01!(0-!)P-!,@9&+0!!%@1!%@%!(0!!" "%?]!(0!!*OY&&_U!&P!!&?A!)_I*&?E!'_=!)OA.(_5&&?5!&?%!&O1('_A!&N]\"" "*/!2\"?=!*>]''O%!&.Y!(/%('^Y\"#NQ!$N=%-.E0#NA!&>=\"(.%*&.A!&.9!'>5!" "&^!%&N)#%^)!&.5!%]Y!$]Y!&]Y*&-U!(-Q%%]M!%]Q!&=A($MA!(]A/%]='(-9'" "'-5'$]1\"%M-!%M1!(M%$&-%#&M!%'LY!&,U#%LQ!$5&&N5#&.9&!.=!(NA&)>A$&.E!&.Q!(NM!" "'>Q!'.U%'^]\"&.U!'O!!(_%&&O-!'_-!&?9!#_9!\"?=!#_-!*_9))?I!)?E')?M'" "&?E!'/U#&P!!-?E'(/]!\"_]((/]!+@)/)0%%(@)!(09!)@1&+`11&01$)P1!'P5$" "+P90(05!&`9!'@A)(09!&`5!&`9!%P5!'05\"#`5!,P5!)01%&P-!(0%!)P)!(0%!" "(0!!(0-&&OU!&OU!&OU!'_I!&_I\"\"?Q!%/U!'_A!#OA!&O=!&O9!%/5!'/1$)_)*" ")/5!'^]\"#O!!'N]!'.]%'?%&*>E)&.Y!&.I!&NI\"&.=!\"^A#(N=!&.A!&.5!&^9$" "&.5!&N1#(>)+).-)%^!!%^!!(-M+'=I(#]U#%]M!%=A$)-9+)=M!&-A\"(MI-!==\"" ")\\]%#=1!%M)!%LY!\"=!\"%,Y,',U#$L]\"%]&'O!'$^]!$_)!&?-!&?5!(/A('?E$&?=!'_=!(?I#&/E%&OI'" "&OM!+/Y)\"OU''OY%)/Y&&O]!(0%!'P)$(0!!.@A/&P%!*0-#&P-!$`A$&`9!'01\"" "%@9!&`9!\"P-'&`5!(05!&`5!!0=!(`9#&`9!&`9!&`5!)`5((0-!&P!!(0)!'_U!" ",/]!&O]!&_]!)?]'%/U!&OQ!'?I$&OI!'_E!'_E!%/9!&?=!&?9!(_)!&?-!&?%!" "$^]!'/%$%/5!(^]!#NU!(NY&&.]!'O!!\">Q!&.]!&.A!&NA#&N=#&>=')^9!&.5!" "(.5*%>-(&>-\"&.!!\"-]!(>!,$MY!&MU$%]U!&=M#&-Q\"'MA$$MI!'M=$&-E\"&-9\"" "%M-!*=1,$]1\"%=)%%]%''=%$$<]!()!%^-!%^)!)>-%&.9!'.M%*.U!%^1!$^E!&.I!&.U!%.Q!" "'>U!&>A!$?!#$^]&&?%!'?!&%NY#&?-!&?)'&?5!&?5!&?9!&?E!)/E!#`!!!/M!" "(/Q('?M$&OU!'/Y#(/]!&OU!(0!!(`!$)0%%)_]))P5!(0)!'P1$'01\")P=!&`A!" "(@=!(@A!+0A')`A!*@A*(PI!&`-!&`=')0=*'@1#(P5\"(@1!&P1!(0)!)@!!(P)\"" ")`%\"(_Y$%/U!(0!!'_U!&OM!$/U\"&OQ!&?A!'_=!&?A!&?9!'O5!(O5$&?-!&?1!" "&O-!&?!!&.Y!%>]($_%!&?%!%NQ))>Q#(NM!&.M!$^9!'>I!$^A&(.=$(.9*%^%!" "%^1!&>%#(^92&>1\"%^%!(>!!(-M0+-U#(>!!%M=!%]M!&=I#%-=#$]=\"$M=!%MA!" "&-=\"'-A\"&-=#)M!.*-%!'-%\"'-!'\"5\"&.5!&.9!&.I!&.Q!&NI().U\"&>E!(N=!&.Y!" ")O!*(N]+&^]#&.Y!\"?)!$_!!'O1&&?5!&O)!&?9!'_9!&O=!(OE$)?Q!%/M&&OM!" "*OQ!&OU!(/Q!%/]!'?]#)/]%(0!!(09!-`9'*@1+(`5#'P1$)P1-%@=!(@=!(@=!" "&`A!'`I%(@Q!(@E!*PM*)@E%&`A!)`Q!(@A!&`Y!&`=!'PA*(01!)`%)(01!(`=#" "(0)!'_Y!#_Q!)/Y&#_I!(?]('_Y&&OM!#_M!(?M\"&?A!(_=&#/9)&?9!&?5!&?1&" "'O-!%/-!&?%!'NY'&NY\"*?!!*>U\"'.U%$^E!&.I!(.E)'>A!&.A!$N1!(>9+(^-#" "#N!!$N-!'.)!(>!!&^!%$M]!&=I#%]Y!%^!!$=U%%]M!%]I!*]Q!'=E(\"])$$=5!" "&-9\"%]1!&LY!$M9!'M%%%=%%&=!$%M%!&M!%%]'&?5!(_)!'O)'&?!!%O-#&?9!(?9*%/E&)OE\"'_E!(?I\"'_=!" "%/U!(`%*%/]!+`)%&P)!(0)!+P96,@)!+0-!(0--'P5$)`9.'05\",P=!(@=!(`I\"" "+@E')`A!&`Q!+@A!)0I$#0U#&`9!(@E!(@I!+01!&`9!&`A!#`5!+`%2(0-!(/]!" "(0)!)P%!&P%!(/]!#_]!#`%!$?Q#&OI!&?A!'_E!*?9&(_I%&OA!'O5&*?5!'/1$" "&?-!).U\"&?%!'/!$#N]!%NY.&.]&$^Q!'>Q&#NI!&.A!'>E!&>A!&^1%&.5!'>9!" "%^%!%^-!$>)%%.)\").!%'^%*)M]!%]I!%-U#&]M!&]M%']I$&MQ$&]A&*-=%$]9\"" "%M9+(-%,$]1\"']%!&]-&#\\]#&\\Q\"$\\E#'\\Y+',U#&A!&.E!'>A!&.M&'^U($^A!" "$^U!&.]!$>]$&.Y!&?=!&?)!&O-!'O9&)/A&'O1!&?E!&?A!+?=+&_I\"&OM!#OE!" "&P!!%_U)'O]%)P)'#`%!(0%!&P%!+@-\"&P1!#`1!,P5!(`1#(@=!(@A!+@]!(`A#" "(@E!*PM$)`M!&`E!%@M&(@I!'P9*'0E((@E!*PE+&`9!*@9#%@A!,@-!(P-)(0-!" "+P)1,@)!(0!!'_]&(/E!&OM!%_U)&_M\"&?A!'_Q&'_E!&_A\"&O=!'O=&#O5!%/5!" "\"?9!#O!!)_%%*O-!(^U!$_!!&.Q!%>Q($^=!&.E!$^Y!(NE!&N-$&.A!&.I!'.5&" "$N%!%^)!)>-*)>%0(-U+&N!$%^%!%^!!'=Q\"#]Q##=M!%]I!'=A#&M=%'-5'$=5!" "%M5+%M1!&=-$$=-!%])\"$=5!'<])&])&%M!!$1\"*^-!$^5!&.I!&.=!&.9!*.I-#^I\"&.M!'>Q!).U\"" "&.]!'O!')/!-&.Q!'/9##O-!'O-!'O1&&.]!'_9!&?A!&?E!(?M\"&OM!$/Y\"%OQ\"" "&P-!%/9!%/Y&&_]!*@!$(0-!(0%!)P9!(01!&`9!(09&)`9(+P5*(09!)`I!(@I!" "&`M!)`E!*0]!'@Y\",@M%(@I!%@M!(@A!#`9!(@Q!+@=/&`M!(`A#&`9!(@1!(0-!" "*0)))@%&%/]!'_Q!+?Y#)OU!&OU!&OQ!&_M\"&OE!&OE!&?A!)/='$OE$*/1+)/9!" "&?5!$O1%'/%$)/%!&?!!$^]!&?)!#O!!%.U!&.Q!$^E!).I.$^A!&N1#&N1$%N1$" "&.%!$^I!&.)!&.9!'.%!'.!%%]Q!$MU!&-U!%]U!'=M\"'-Y!)-9&(-A!'=5##M9\"" "%])\"&M1%#=-!&]-!%M)!%]%\"%]!\"%M!!&\\Y!#)+(>A%&.5!%.A!'>5!'>9&#NA!*>I\"&.M!$^I!(^U!" "(_%!&?!!)/!($_%+'O%'&?9!&_1\")/5!'?-%&?1!\"?=!&?9!'_E!'OM%&OM!&OQ!" ")_Y\"&OY!&_]!&P)!(0!!*_Y!%@)!\"@-!(0-!%@5!&`9!&`I!,0E$)PI&&`A!(@E!" "(@M!)0I$+0Q,(@]!&`Q!+`Q\"(@]!*@I)(@M!&09#&`M!+PM/(05!(P1)(01!(@-!" ".P)$'_Y!(/]!&OQ!&OY!(?]/&OQ!&OQ!'_M!)_E/+_E,&?A!&?=!&?5!'O!!&_5#" ")/-!'/)$(/%((_!!&O%\"&?!!'>Q!&.I!&^M)&.U!'>E&'>M!&.A!&.I!'NA'&>5\"" "(N1,'.-*(>-!*>%*,.%-%]Q!%^!!'=U\"'-U!(-U*(=Y!'=I()=E1$MA!'-=!&M9$" "'M5$$]A\"&]1&&M-!&]-!'M%%\"-%!'-%''LY%),Q'#,M!&,I#%\\A#$LA\"&,I$&\\9(" "%L=\"%\\=#%<5!%,1!$,5!%+Q!%,)!%9!%^)!'-]!%^!!&>1\"&.5!&N9#&>-\"#N=!&.=!%>=#(NQ,'^Q(#NU!" "$.Y#$^]!&?!!&O)\")O!)(/)(&?-!%/9!&?=!&?9!&?5!$_5*+?5+&OI!*_M(*@!%" "\"?U!&OY!&P)!&`-!/0!!)P%!(0%!&P-!(/]!(`=#(`9#%@=!(@I!(@E!,@U+&`U!" "*0U!*`Q+(@Q!)0Y#)`Q!+@I!/`Q!(`E\"(@I!)@E%*PY*(P-\"&`9!%@9!(01!(`-$" ")?]&(@)!(O]#&P-!&P%!&P%!&O]!&?U%&/E%'_M!'_E!&/A%#O9!*OA!)?=('O1!" ")_-%%/1!'_1''?!&+O!!(/%\"%^I%\">Q!$^U!'>E!$^I!%.E\"'NA'$^=!&.=!#>1!" "$^-!&^-%%^-!%^%!#>%!$N!!%]]!(>-!%]U!'-Q&(-M!%=I$'ME$(-=!'-5'$=-%" "%M-!&=5$%M1!%])\"&M-!&=)$',U##,U!*\\Y*$!*'.-!&^5$(>)!$^1&(.1*'.-!&^5%'>A!&.A!'^E\"&.A!&.Q!'>U!'NU," "&.Y!&?!!(?!)&?)!%/1'#O)!#_1!\"?-!'/!$&?9!%/=!&?E!%/A!&OI!'OM%)OI)" "#_U!'O]%)?]!$P%#(/]!(0-!(0)!(05!+01!&`5!,P9!%@5!&`A!(PI!*0I\"(@M!" ")PQ&(@U!+@Y!+P]!(@]!)PY%-@]\")`M!)`E')`I!&`=!%@A!%@9!#`9!)01$(01!" "(P)\")P%!(0!!(/]!+@!0&OY!&OU!*OM!#OE!)_Q)&OM!'_=!'/=#'_9!+O1!\"?1!" "(>]*)?)()_-1'/9$&?%!&_!)&.Y!'?)%&NY\"&.M!)^E!$^I!'^=)(N5!'>=!&.=!" "%N5%&.5!%^!!%N5%'.%!%^!!%]]!#-Y$)-=!'-M&#]M(&=E$&]E&&M=%'-E'%M9!" "&M%&&M5*%M%!']-!%M)!%1\"&>!\"%^-!(^M'(.9$'>A!'N='*N5+&.I!'NM''>Q!%^U%" "+>Y-'O!!&O-\"%_!$(/%#(_!!'/1$(/1\"&?9!$?1#&OI!)_A#'_M!(_I%&OM!&P!!" "(OY*&P-!%?]'*_]!(0)!%0!!,@)!)@5&%@-!(05!%@=!&`E!(09!(@E!'@I\")`A!" "(@I!)`U!&`U!*@E)(@M!.@]!*`]+(@M!/P=!&`M!,`A!(@=!)P=!&`5!+05!)P-'" "(P)\"*P%,*`!-&P!!&O]!&OY!%OU\"&?E!&OM!*OM!(_Q$./A%&OA!&?9!&?9!&?1!" "&?1!&O)!*O)($_!!)?%.&>]!'NY!&>U'&.Q!&^Q$&.I!(.U##N=!$^=!&.A!(N1'" "#NA!%^1!%^-!$MY!(=Y!%^!!%]]!%-Y\")=Q!(=M'%ME!)=I!&M=$%MA!&-=#(=9," "&]5&%]5!+])4*-1%%]-\")=%\"$=!!&\\Y!%!#(=Y!" "&MU%%]M!\">5!'>)!&^-%%^)!&.9!'.)!&.9!'^=#$^=!'>E&'>I!&.A!'.U*&N]\"" "%O!)&.]!%O-#+O%!&.Q!'O%!&_5\"&?-!(O5*%/-!&?=!&?9!#OE!&OM!&OM!)?Q'" ")?Y!&OY!*@)+'?Y$&OY!&OQ!(/]!(P-\"&`5!&`5!%`)#&`A!(@A!(@I!&`E!(@I!" "(@A!(@Q!*0U!)0M#(@E!)`M!&`Q!%@Q!(@E!)P5')0E$&`=!,@1-&`5!#`!!(@)(" "(0!!(0%!&OY!(P))%@)!&P!!&OM!&O]!\"_U\"%/A!(/M!&OA!%/=!'_9'*O5-%/1!" "&?)!(_-&$_%!&?%!&.Y!&>Y!&?%!&?!!$^Q!)>M.#^M\"&.M!&.=!$^=!%N=$&.5!" "&.9!'^%)(.-%%>1#%^!!)M]!%]Y!$M]!&]]%%]U!%]Y!'-A\"%ME!$ME!#=9!$=1!" "%,]#&M5*']5!#,]!%M1!&-!$&=%$&,]#$!\"$^)!*>!%%^)!&.=!'.-!'.-!'>E!'>=!%^1!&.=!'^I-'.I%'.Q%#NU!&.U!" "&^Y#*.]1$_!!&O1!&.Y!(_%'&O-\")/-!&?5!!/5!&?A!'?9*'_E!%/I!&OM!)?Q-" "'?M*&?E!&/M%%/Q!(0)!(`)$,@-!)P)!'P1$%`1\"&`9!&`I!(@=!(PA!+0I-(@E!" ")`M!(@M!+@Q'(@Q!(PQ!(@Q!(@M!&`=!)PQ&#`9!$@9\"&`=!(09!%@5!&P1!\"`-\"" "(0%!(0%!(`%$&OY!&OM!&OU!*/U+&OQ!&O]!&?=!)?E(&?A!&?E!#/9#%O5#&?)!" "'_-'%/-!&.Y!\"NY!$_!!,/%#%NY#&.U!#^Q!&.I!).A($^E!%.Q!(NA,&N9#'>=!" "(^!)$N!!%^)!%^1!&-U!%]Y!%^!!%]U!'-Q'(MQ\"%]I!&]Q!%ME!%M=%&]A!*-=/" "&=5$(M1.%]5\"&=-$%M)!%]%\"%-!$^5!%^%!'>-&$N-!'^5)%^=&'>9!$^E!#^I\"#NM!(NE!+^U4" "*NI$(.Q#$>Y$&^Q##O!!(_-,&?-!#O-!%/-'&?A!&?=!#OE!'_I!'/I#'OU%%/A!" "(/M(&OU!&OY!'_U!(0%!(P)\"(@)!-0)2)P9&(01!'`5%(@1'&`9!)P9!(@M!(@=!" "(@U!)`I!*0M((`M\"*@I#(@E!&`E!)`E'#`M!,0A2+@1)'@5#&`A!)@!!)P1'(0-!" "'`)&+/U\"&P!!'P-$)?]!*_M4'_M!&OM!'OE&)?M-(_9%&OA!'_9!%/1!&?)!)/A!" "&?5!&?)!\"?)!#O%!#N]!&?!!&.Y!&^M$&.Q!'>M+&^E$'.E%&.9!'>=!&^9$$^5!" "%^-!*^)!'>)!\"-]!&^5$'.!!(=]!'-Q&%]M!$MI!&]=!#=I!)-E+#]I\"'=E\"%M=!" "$=9!(=9\"%]!\"%M%!']-!&M)!&]!\"%M!!'<]$(,Y#$A&&NM\"&NI\"$^Y!$^Q!&.U!" "$NU%(^Y!'O%'&?!!#O%!&?)!'O5!*O-(+_9!%/1!%/I!#?A%)OA\"&/=%'?M$&_M\"" "&OU!&_Y!&P1!&`%!(/]!)@)&)P%!)0)%(0)!)P1!&`5!%@I!)`A!)`=')@5%(@E!" "(@E!(PI!(@U!(@I!(@A'*0=)(01!(@E!'P5$(09!%@A!'09!&P1!(@1((P-\")01$" "(0-!,@%!)P!'&O]!%OI\"&OU!,OQ*&OM!%/I!)?I'&?=&'_I!*O=3&O=!)/5!&_1#" "$_)!(/)#%/1!'/!$&.Q!'NY!$^U!'>U!%^Q%&.M!(>M+'.A%&.I!'.9&'>9!$^=!" "%^-!#N=!%]]!(>)!'-Y!(N!-%]]!%]Y!(=Y,*MQ,&MY$&-I\"$-A$&]I!&]5&%M9!" "'M5*#]-#&M5$)\\Y!(=5''-)\"&=1.%<]!&\\Y+&LU!(,U(*-!!$\\I#)!\"%^%!%^)!%>-#'>5!&.5!%^-!(NA!'>9!'>I!%.I!&.M!'^U'&.Q!" "'_!('.]*(^],$^U!(O-*&_=\"&O-\"&?1!#OA!(_1+)/A!&?9!#OA!'_I!&OU!&OY!" "'_Q!&OM!#_Y!&P%!&OQ!)/Y%(0!!(01!'@1#(01!(P%\"%@-!'0=!%@=!(09!$@E\"" "&`5!(@E!(@E!*PE+(@A!)`M!(@=!(@A'\"@A!&`=!'@=#+05!)P-!(05!(0-!)@%&" "&OU!/0!!)0%%%/]!&OU!&OU!(_U%#_]!)?I!)/A!*_5)&_Q\"'_9!&O5!'?5%&/-%" "'O5!'?)%'O1!&?%!&.M!&.A!&.Q!#^Q!$^M!$^M!#NI!&>M!'>E!&.=!&>=\"(>Q%" "&.)!%^)!%^%!'.-!%^!!'N%()M]!%]Y!%]Q!&-U!%MA!&]E!']5!%MA!'M-*)==!" "%]1\"%M-!$]1\"%M%!#,Y!&-%#']-*(,Y,%M!!%\\U#%LM!#1\"'N1()^91&.E!)>E$&.E!&.I!'>9!&.M!&.U!" "$^E!&.Y!&.]!&?5!(?-)&?-!$_)!%/1!$?1#&?=!$_)!&?E!%_E$+OA%%/Q!'/Q#" "(_Q%&OQ!'_U&&O]!(/]!(0!!&`)!(@%!)P)!)0-%)P5!&`5!(P5)'/Y\")PA&&`9!" "&`=!(`A#(@9'#`A!(@=!(@A!(P=\"&`=!(09!#`9!)@9%(05!&`=!(05!(0%!+01!" "(0%!)@!&&OY!&P-!&OU!(OQ*)?Q!*OM!)/I,'_5!%/9!(/=\"*?9!(/5(%/1!&?1!" "&?A!#NQ!&.U!'O!'&.U!(.Y)$_!!$^I!%>A#$^I!'>E&&>E!&.A!$^5!&.1!$>-$" "#>1!'.1!%N)*%^-!#=Y!%]]!$MU!'-U!\"MU''=U'&N-$#=I!)=5\"&-A(%]I!$]A\"" "&M)!%MA!%MA!%=)$%M)!%]!\"#=)!%<]!%)!'N-\"%^1!$N1!&.9!'>=!&>=\"$^E!&>E\"&.]!&.M!$_!!" "'>M!$.Y\"&.]!'NY!&?!!&?!!%?5\"#O-!&?=!&?5!$?=#)/=!&?A!'_A!)OI('_I'" "*OM!%/Q!&?E!&_Y!(/]!%?]!(@!!'_Y!)P)!)0-%+P5*)@1&&P)!*P)2(P9\"*050" "&`9!(P=\"%@9!&`9!&`A!(`9#&`E!(`5#&`9!!0A!(@-!&P1!)P%!)P-!%@%!(0%!" "&P!!&O]!&OM!)_Y\")?U!&OU!%/M!#_M!)/E!*OI!'OE&'_=!(O9*%/5!$_)!#_-!" "%/1!&_%(#O-!#O%!(/!(&^Q#$^Y!+NY'&^U$+NQ(&.=!#NI!&.9!&.=!&^E$&.-!" "'>1!%^!!'.=&&-]!&.!!$N)!%]Q!'=I(%]Q!%]M!%]M&&]M+$MA!&-E\"$=1!&M9$" "(-)'%])\"%M-!%M1!$])#&M!&&,]#%])\"'\\Y!%A!#NA!&N5#$^9!&.=!&.E!&>I!$^Q!&^M$\">Q!" "'_%!'O%!(O!%#^E\"&?!!*?)!&?)!)/%((O)*&?9!&/1%%?1\"&OI!'_E!)/E!(OE$" "&OM!#_Q!#_Y!&P!!%?U!&O]!)@!!'_Y!)P).&P1!&P1!(0-!)01$(05!'@-#%@=!" "(09!#`9!&0E#&P1!&`9!(09!)P5!(`5#*`)!(P1\"+01!,`-)*P%%)P)!-`%!+0)(" "(0%!&P%!(OY*(O]#&OU!'_I'&O5(&?E!'_E!\"?9!'/E)&?=!(?A)&?9!)?5.$_-&" "#O-!&?!!$_%!&.Y!\"NY\"$.Y\"*>M((.Q)&.I!&NI#&.M!'>E&#NI!)^A!%^1!#>-!" "\".1!%^)!%N-%'N)#&^%%!]]$%]U!%]Y!&MQ$&=M#)]]\"#=E!%MA!%=A$']=%&-A\"" "&M-!%M=!%=!*'])!&M%&%M!!&E!&.Q!" "'>Q&'>U!&?!!&.U!\"?!!)?!\"&?)!&?1!&?1!&?9!&?-!$O)$'_=!'_E!%?A!$/U(" "&_U!&O]!'_M!&OU!'/Y#'_Q!&O]!'0!\"(/]!(0!!(`-$(01!)/Y&&P%!,@1!(0-!" "&`9!&`5!(0-'#0-#&P1!(P5)&@1%+P=0(01!)PE&(`-$*`)!*`)!&P%!(@1'*_Y!" "%/]!&OU!'/]\"&OI!&OQ!\"?U!&?9!)?I!'?I$)/A!'_=!&_A\"\"?5!&^]#&?-!&.Y!" "(/=.#O%!'O%!&_-#(.Y)&NU\"&.Q!$^M!&>Q!%NI$'>E!&.A!'>9!'^9#)>5%&.9!" "$^A!$M]!#N)!\".%!'>!\"(M]'%^-!&MU$%^!!']M*%ME!#=E!%MA!&]=!%-=#%M9!" "&]5!%]1\"%M1!(--+*M%$']!!*-%!(\\Y&%\\Y#'\\Q+%%!%]Y!#=]!$N%!&N1#%^-!&.1!$.9#)N%!&.=!%^=%'>E!$^I!$.U\"$^M!" "'NU'$^U!'.Y%$^]!'O!!&O%\")/-!&O)\"'O-&#O5!'/!$(O9*$/9\"(O=**O=!)/E!" "'?I$#_Y!&P!!%/Q!\"_U\"(/U'&`!!(/]!+05!(0%!'@)#)P)!*`%!)P1!(@-!&P1!" ",@-!(P)#*@1++01!%@1!%`1)(0-!(01!(`-#(P5\"&OY!(01!(`%$(P-\")?U!&OQ!" "&O]!&O]!&_U!&OQ!%/Q!&OM!)OA)*_M-(OA$&?E!%/9'&O-\"'O5!(O9$#O-!&?)!" "$_%!&.Y!&?!!)?%('NE!'>A!$^U!&.M!&.E!(.I$'>E!&.Q!&.=!(>A+(>1!&.9!" "*N-%%^-!&.%!\".-!%^!&%]Y!$MY!(]U#&>!#']E*&-I0%MA!%M-!'M5$&=9$%-9$" ")]93%M-!%M%!$=%!&,]#%M!!%!!'>%'&.)!'.-!'>)''-]&&.5!&N=#&.=!&.A!%^=&'NI''>M!" "&.Q!&.I!&?!!&>Y!&?%!)O!$&?%!$_)!%?-\"%/1!&?9!&?5!'_M&(/=(&?A!)/E!" ",?E\")_U\"*_Y!'OI%&_U!)?U!&?E!'?]#&OY!(0%!&OY!+01!,`)#)`-\"$`-%,@-!" "&`5!)P)!&`=!+@5('`1,.@-6(@-!,0-&'@)#(0)!*P)%'_U!+O]$(0!!\"?Q!(P!)" "!/E!'0!\"&OQ!&OU!%/M!%O]\"\"_E\"'OE&'?I$'?=$&?9!%/5!%O5#&O1!'O)&&.]!" "&?%!(?!$(^]!&_!#%.Y!&.Y!'NQ'&.Y!#NE!&^A$&.A!$^=!(>A+&.9!&.9!#NA!" "'.)!'.%&$N)!(=],&-Y!'-Y&&-]\"'=U(%]Q!%^!!%]I!&=I$\"]A#'-='%M9!%M-!" "'=%(&-)#'=5$*-)!%M%!&=!$%,U)&<]$%LM&%\\Q#',M#$LI\"&,I#\"<1\"\"L=#'<=%" "%<9!&<5!%\\1#%,%!%K]#%,%%%<)!%;]&#,!!%;U\"$+U!\"[I(\";=\"%[A%%[E!\";A\"" "%KA#$K=$%+1\"&+1*'+-/%[))$[-$#ZY!#J]$&JY!$*U\"#ZU!$*I&$ZA\"$K!$#J9!" "\"ZA!%Z=#%Z9\"$J5%&:1!%:-(\"J!!#J%!%J-&#J!!%*%$%YY#$)M##YU\"#9A!&9I*" "#Y-#\"I5!$)='\")%\"#9=!!IA##Y=#\"II$$9I$\"IQ!#)]&#IM%$9]$%:!$$Z-&#J%!" "#*%\"#J-!%J5\"#J9!#JE!$*=\"#JI!#:M#$JM%\"ZQ!#[!!%:]'#*Y\"$[!)\"Z]!\"ZU!" "![1!#K5#%K1$&+%'%K9($[=!%;A\"%K=#&[I!';I\"\"KQ#$+M!$+Q!'L!#$;Y\"%+U!" "'[Q-%<%\"&,%)&L1&&\\1(&<5%#<1!%\\%,&<=!%\\A#%LI\"&,Q#&\\M\"%%%%^%!$N%!%^)!'^-$&N1#&.)!&^5%&^%%&.=!'NM'(>E+'>I!&NI(" "(^Q!(>I%&.Y!&.Y!(^Y!'_!!&?!!'/))%^Y%'_A!#O1!&?=!&?=&&O=!(?=**/5+" "(/E!#_M!&OE'&OQ!)?I!&OQ!'OM%&OU!&O]!%?]!)@%&*_Y!%@%!*`%!)P-!(0)!" "*@1$(/]!\"@9!&P-!*`1&,@)!(0-!&P!!)P%!*`%!&/]$(/]!*@!%&_I\"(/]!#_Y'" "\"?]!%/U!&OQ!*_Q(&_I\"%/I!'/E*(_A%&?A!&?=!&?9!'O5!&?1!)/-!(?-)\"?)!" "'/%$*/!!&.U!&>]!&.Q!'NY'&>Q!'.M%&>Y!&.E!#NI!&.9!'>9!&.%!&.=!'>-!" "%^-!'.%%'.%%$N!!%]Y!%]E!&MU$$MM!(-U*+-I)$MI!%ME!%ME!#=5!%-5$&-1#" "&-=\"&M5%%=)%#=%!(-)\"%M!!'-!(%\\Q\"#LE\"&LQ&$!!%N%%\".%!&-U!'.!!&^1%&NE#&.9!'.=&&.A!&.E!)^E&(.Q$" "+>M!'NQ!&.M!&NY\"&?!!#N]!&?!!'/-$(_)!'O-&%O1#+/%%&?5!#O=!$/E\"*OA!" "'_A!(?U\"&?E!'_E!&OU!&OQ!%/U!#_M!$@!\"'_Y!&O]!\"@%&&`-!&P)&#_]!(0!!" "(0%!(0%!(0!!&/U$&P1!*0%*(0!!)P%!(01!+/]((0%!&`!!(/]!&OY&%?]!!/]!" "&OY!$OU$&_M\"&OQ!%/E!)/A!+/A#%O9#&_9)&?5!&?-!&?5!&/-&$_%!&O)(&?%!" "(/!.&.Q!&.]!&>Y!&.]!&.Q!&.M!).I\"'>I!&.I!&.A!#N=!).=#$N1!#>)!&.=!" "'>9!%^%!%^%!&]]%%]Q!%]U!#]]\"$MQ!$]E,#=U!&]A!$MQ!%ME!%M5!#-9$%M)!" "%M1!$]9')M)2&=)$#=)!&<]$%<]!&,I#&!#&N-$%^-%\".%!&.=!&.5!%N=$&^=$&.E!" "&.Q!&.Q!).]-'^U().Y!(^]!$^]!&?!!&?%!&?-!&_-#&O1!'O%!'_5''O-!%O-#" "&_A\"*/U+&?E!&OI!'OE&&OQ!(/]!%/]!&_U!&OU!&OY!&OQ!&OY!*0!#)?]!&OY!" ")`!))@!!)?]!(/]!)P%!%`%#)?]')@!!(_Y$&O]!,P!0*?Y1&_Y!&OY!&_Q!(/Y'" "&OU!&OI!\"?I!&OQ!'_9''_9!&?E!%/=!&_1\"&_5#+?1%&^]#&?-!&?)!*?1!&?%!" "'.]%'O%!'NY!*N]\"'.Y%&.M!(^Q!$.M##NE!&.A!'>A!#NE!&.5!&>E\"'^-#%^)!" "%^1!%.1')M],%]]!#^!\"(=Y!&]M!%]I!%]M!$MI!&]E!)-Q*%M1!%M5!)-5&%]5!" "#=1!$=-!'-1''])!'-!(%<]!%\\]\"&LU!%%#)^)!%.)\"$^9!%^1!%N5%&>E\"(NA!&.A!&.E!\"^E#" "'>M!$^M!&.Q!'>M!*NU.\"_)\"*.]!(^U!,/%/'?)%'_-(%/=!&?5!'/9#&?9!&?9!" "*OA!&?A!%/E!&?A!&OM!)OU.'OE%'?M$#_I!,?Q\"'_U!&P!!\"?Y!\"?Y!*/]#&O]!" "(O]*(?](&P!!(0%!(0!!'@!#*OM!)P!!&O]!'P%$*OU2&OY!&OY!&OU!'@!##_Q!" "*OQ&&OI!%OM\")/A!(/E!&_Q!#OA!'O5!'/A#*?)!&?-!&O-\"&>Y!&?%!&_1\"(/!(" "(_%!%.Q!'NY!&^M$(NQ+(>I*(NM!&NI#)^E!%^1!)N%!%^)!&.5!(>%!&>5''>-'" ")=Y!'.)!%^!!&.%!'MU#$]M!%]U!%]U!&-I\"%]I!&-E\"'-A!$M=!%MA!&=5$'M=$" "%]5\"&=-)$<]!%M9!%)!$N-!(>)%%^1!'>5!'>-'&.A!'>I!)^A!$^=!" "&.Q!&.M!&.M!&?!!&.Q!&?%!&?!!#O!!&?!!'?1*#O-!&?)!#/5$)/5!'?1*&O9'" "(_M0(/=\"&?A!)?E!)_9*'/I#&OI!&_M\"#_Q!(/]!*_U!'_Y!)?U-&P!!(0-'(/]!" "'?Q$$?]\"&O]!'P)$(/]!'@!$+OU+&OY!&O]!'OQ%&O]!&OY!'_U!)?I!&OQ!(OM*" "+/I)+OA+&?=!)?E('_E!%/=!&_=\"%_=$*/5%&?1!'?)%&?-!(O)0'O!!&?)!'.]$" "&>]!&N]\"&^U#$^M!$^Q!&NE#'O!!*.E2&.Y!'>A!'N=,%^-!&.5!%^1!'.1!).)*" "%.!\"(^-#']Y$%]]!%^%!'-U!%]Q!&=Q#&]A!'MI))-A+%=A$(==\"$=5!%]-\"%]1\"" "$=1!&-5#%-)(\"])$&M!%$L]\"%%!(N!()N%!%^)!'N%.(.1*%^1!'>9!(NA!$^I!'>E&%>E#" "$^I&(.M)&^Y#(NU&(NQ+#>I%*?1!&^]#&?!!&.]!&?1!&N]\"%/=!'?)%&?5!'O)'" "&?5!*?9')/=!&?A!'_A!'_E!*O],&?=!'_Q!'_I!)/Q,&OI!%?Q!(0-!&OY!'/M#" "!0!!)?U!,OY*&OU!'_Y!(_Q+(?Q\"$/U!%/U!&OY!&_I\"&OQ!&OQ!$OE$'_I&#_9!" "%/=!'_I!'_M!-/A'&OA'(/A!&?9!&_5\"&?9!&?1!&?-!&?-!&.]!$_!!&O!\"$^Y!" "$^]!'?%&&>Q'&^U$'.M%$^M!)>M#(NI!)^E&&.A!&.=!(N9&&.5!&.9!%^)!&N%$" "&N1#%^!!&-]!&M])%]Y!(>!!+=U*%]I!#]I#%]I!%MA!'-A!&-=#$]9\"$M1!%M)!" "&M)%$=1!&-%$%-!&N-$'.)!'>9!(^=!$^5!'^A(" "'>A!&.E!$^Q!%>Y\"(^Q!'>U!&>Y!&.]!'O!!#_!!$_)!#O9!&O)!&?)!)O9#&?1!" "&?9!&?5!%OM\"'/=#&?E!)/=!'_E!'_A!(O=$*OI!%?M!'?M$%/=!'?Y$&OQ!(/Q(" "(_U+&OU!&_U\"#OY%&OI'&?A!&_U!#`!&(_Q%&OQ!&OQ!&OM!&OI!'_I!%_I*)/E!" "&?E!%OA#)?9!&?=!\"?Q!+/5*&?5!#O5!&?1!&?-!(?-/'O)&&?)!&?!!&?!!&.]!" "'.]$(.U#&.Q!(^Q'&.M!&.I!&NI#&^U)&NI#&.=!$^9!'N9'&.5!%^-!&>-\"$N!!" "+.)(&>!\"$N%!%]]!%]U!%]U!(-Q%&-Y\"%ME!\"]E#$MA!%]1\"(=9\"'M=$&=5$%]A!" "'--#%M!!&-%$'<]$$\\U((LY*',Y#%\\Q\"*,U&%LM\"%!!*.!$'.%!&N1$\"^)#)>9/&.9!$^=!&.A!" "&^=$&^I$%N]#&N=#(^U!$^Y!'>M!&.Y!$^]!$_)!&_)#&O!\"&?)!$/!\"%/-!'_A!" "(/5)#OA&'_9!'_=!'?=$#OA!(O9$&?=!'_E!*_E)&?9!&OQ!)?M!&?E!*/M+&OM'" "%/I!'_Q!%/U!'OQ%'0%)&OQ!&_U\"(/E(&OU!&OY!&OM!\"_I\"(?I#'/E#'_E!'_E!" ")/A&&?A!'?E$&?=!&?9!&?E!&?9!&/A%&?1!%/=!&?)!%/1!&>Q!$_!!&.]!'>M&" "&^Y#&.U!&.Q!'O)!&.E!&.I!'NE!$^M!'^9)'^1#&.9!%.5\"%^1!(N-!%^)!%]]!" ")=Q,%^!!&=]#&]Q!%]Q!\"=Q!%]M!(]I$(M9)$MA!%M=!&]=!%M9!%M)!&=1$%M)!" "(-)\"'=-)\"M-\"),]\"%L]&#,Q!$I/%^9&&.A!" "&.A!&.E!*^Q+&.U!&.Q!&.M!$^=!&.Y!'.U%&.]!&_!#$_%!(?%*'O-!&?-''?%&" "+?5+(O5*&?A!&?5!(/%(&?A!&?=!'?E$'_A!&/E%(/I!'_E'&OQ!)OE\"&_9.&OM!" "&OM!&OI!&OM!%/U!&OQ!%OM)&_U\"%/M!'_I!$?I#&OU!&?E!%?E!&?A!'_E!)OM\"" "%/=!'_A!%/A&&?1!&?5!'O5!%/-!$_)!&?1!%_-$#O!!'/!$&?!!&?%!&.M!$_%!" "\"_%#(.M)&.Q!'>M!'^E#'.Q%'>A!&>A\"&NA#&^=$&.A!&.5!(>-&&>)\"'>5!'.A&" "%^!!%>%#&-Y!&]Y%(=I'%]I!%]I!*MI!%]I!&]E%%]5!%M=!'M5$&-1#%M1!&]5!" "(=9'%M%&%M1!']!&%L]!%\\U\"%-%&.9!%^-!(N=!" "&.A!&.Q!&^=$)^Y+&.M!%.E\"&.M!%>A#'.Y%'NY!'N]!'?!%&?%!)?%(&O)!'O-!" "-_),*/1+&_=\"&?5!$?9#'_=!'_=!'_=!&?=!'OA&%OA#)?E'\"_E\",?E6)?I!)?U!" "&/I0'_9!&OI!&OM!(/]!&OM!'_M&)/I,'_M!*O=!&OQ!*OE!#O1!&?A!&?A!&?1!" "'_=!(_5&*?=&&?1!&?-!$/-\"&?-!'?9%&.]!&?%!)O%$#O!!(.U)&.]!&.U!$^U!" "&.U!#NU!&.Q!&.E!'>9!$^M!(>A+&.=!(>A+&.9!'.E%%^1!$N!!'.)!(>)!%^%!" "'.!!#-])#>-!&MU%$MQ!&=E$%-]#%]M!']E*(-A!'-='&]9!&=1$&]1!%]5\"$=-!" "%]%\"(M9.!=5\"%9!%^)!" "$^5!%.E\"&.A!'>A!(.Q#&^Q$&^U#'.Y%&^U#%NY#&.M!&.]!(>U*'O)&(.])&/)&" ")O-#'O!!%O1#&?)!'O5!'?1%'_=!)/9!&_5#&?9!&?E!#O-!'_9!'_E!-/A&)/E!" "'_E!(_U$'_I!'_E!&OM!*OE!(OE$'_=!'O1!+/A0&OI!&O9!&?=!%/-!(_9%&?9!" "%/1!)_5$+/5$'O)!(?1$)/1-*_1\"'O%'&?!!$_)!*.]2'N]!'>Q&&.Q!(_)!&.Q!" "&.M!&NQ\"(NI!'NE''>E&&NA#$^=!\"^=#&.9!\"NA\"'.1!'.)!%^1!'-]!$N%!%^%!" "%]Y!%]U!\">!!%]Q!%]Q!%]Q!$MA!&]E!(-=!&]A%)-5!']9*&=5$%M)!%M!!$])\"" "%]1\"%\\]\")\\]!',Y#'!\"%^)!%]U!'.)!&^-*'N)\"'.-!&.=!'N5(" "&.=!'.1%(NA!'N='&>A\"$^M!&.A!&.Q!&.Y!'^U(#NQ!&.]!#^]!'_1('O%!)_)0" "$_)!&/1%&?-!'O1!&?5!\"?=!&/5*'?=$)?A!&?9!&?=!%/A!&O5!&?=!&?E!'OA&" "%/M!&_A\"'?Q$&?A!#OA!&?=!%/A!)/A!'?=$\"?=!&?=!(?=)'/E#&O9!&?9!&?5!" "&?5!%/A!&_1\"&?1!(O-*'?)%'?%%'O%!'_)!(O!+&?!!*N])'.]$$^U!&^U$&.]!" "'>A!$^Q!&.=!&.E!'>I!'.I%&.9!&.I!$N1!&.1!'N1('>9!$M]!$N%!&>!\"(N!-" "\"]Y#%]U!&>%#\"-Q!%]M!&-9#&]]%)-A&%MA!%]=!&-9\"&=9$%]5!(-E!&\\Y\"%5!%^)!'.1!&N5(&.9!" "'>9!(^=!'>=!&.E!&^A$&.E!(NE!&.M!&.U!&.U!$_%!'>M!&?!!(?!$&?!!(_%!" "&?%!'/)$-/5!%/-!&?-!+?-+'_9!'?-%&?1!&?-!&_9\"'_A!&?5!&?-!!/)!+_=!" "&_5#'_)((?=*&?=!(OA0'?A%(_=+*_=\"*/A1)/5!&?9!(?9*&?=!&_9\"#O1!'O5!" "'?)%&?9!'/%$\"?-!&?%!\"?)!(?%)'O%!)?!(&.Y!(_!!&.]!'>A!$^Y!(>U%&.Y!" "&^U#&.I!&.I!$>M)&.A!(>=&&>9\"'.-!&^1%'.1!'-]&$N1!%N5$(N5!%^!!%^!!" "$N!!%]]!%]I!%]Y!%]M!'MQ$&=E#&]A!)-A+&MQ$%M9!#MA&&-9\"%M-!\"M!'%])\"" "%\\Y#$]1\"#=!!&,U#%!\"&>)\"%^!!(>!!&.=!$N-!'>5!%^1!" "&.M!'>9+&.=!'>=+$^E!%.Q!(^A2&NM\"(NM!&.Q!&.M!%/!!(^]!&.M!(>]*&.Y!" "&.U!&?9!%/1!)/1!$_)!&?-!#^U!$_)!&_9\"'O1!&?5!)?5.&?-!&?A!#O9!'_E!" "%/-!#O9!(?9#&?1!'_9!#O9!&_5\"(?A#%O9)'_1''_=!'?%&'_1'%/I!&?1!'/5$" "&?-!)?-\"(?))'O)!&_%#'?-%)_!0&O%\"'N]!#O!!$_!!&>U!*^U*&?!!&NM#'^M(" "$^M!'^E(!.E!&.A!$^9!%N5%%^)%$N%!#>!!(>-!$N-!%^%!(.-*(N!!%^%!'-]!" "%^!!%-U#%]Q!'-Q&&]M!&-I\"%ME!$MA!&-A\"%M9!'-9'#M5\"%M1!'])+%]-\"(--!" ")=%\"'=!)%<]!$%!%^%!$N%!%^-!(>)!&>1\"" "'>9!$^5!'^=((^=\"(N=!\">E!&.M!&.I!&.9!&.M!&.M!&>Q!#NU!+.Y1%NY)$^]!" "$_!!'O)&#O)!\">]!'O1&&?-!#O)!&.Y!)/-!&?=!&?%!'_I!'O1!%/5!(O5$'O1!" "&?1!'_5!*O5-%/A!&?5!%/5!'O5&%/5!'_9!'O5&%/-!&?1!$_5&&?1!%/9!&?%!" ")/%(&?1!$_)!&?)!#N]!'/!$&.M!&?!!&.Q!'>]&$^Q!).Y!'>U!(.E$&.A!'>Q!" "+>=\"&.A!&.=!&.A!'NI'&.9!&^9%&>)('.)!&N9#&.-!%^%!$N%!'>)!\"-]!'MM(" "'=U\"%]U!%]Q!\"-I!'MM(%]U!%ME!']=*$M=!%]5!$=-!&]9&'-1''M-$%M9!%M!!" "%M-!']!+%L]!'%%)M]!$M]!&M]$!-]*%^%!&>-\"%.-\"&^5$" "&N1#&.E!)>9*(>-!&.9!&.I!!>E\"&.=!&>I!'>I!(^Y!&.I!'NY'$^Y!(_!'&.Q!" "$NU%$_!!&>U!$_!!$_)!%O)#'O-&#O)!&?-!&?-!&?-!&?9!'_1('/-)(_!!&?-!" "'O1!%/5!'O-&&?-'%/-!'O5&\"O9!'_1!&_1#&?)!)/%(&?1!&O)\"'NY!'_-'&?%!" "'_1(&?!!&?%!&?)!&O1!'N]!&.]!&.U!(?!)&>U!).Y!(>U*)^I!&NM\"'^U'+NI(" "$^E!(NA!(N=!&.9!$^9!&.9!&.5!&>1\"%^-!'>)'%]Q!%^1!'M])%^!!%.9\"#>!!" "'-U!%ME!#]I\"&]M!)M9#'ME.&]A!%M1!\"-1!%M9!%]5\"'-1'%]5!&=)$#=)!&M%!" "%M%!'-)'(,Y,&,Y#(,Q1#,I%%%\"&.5!#N5!$^E!&.=!!.9!&^A$'>I!&.=!&.M!&.U&&NM\"&.]!&?!!&.Q!&.]!" "&.U!'>U!\"O%!$_!!$/%\"'O%!&O-\"&?-!\"?)!'_!('O!!'O)!&?1!+?!1&?-!$O5)" "$_)!)/1!&?A!(?5/'O-!#O5!%/5!*?)!'O)!'>Q!*_-))/5!&?)!'?)%'O)''O%!" "&?5!(^Q!&.Y!'^Y''>U!&?!!'>Q!,.Y5&.U!%^M**>Q\"&.M!#^M\"&.M!'N='&.I!" "'.1!&NE##NE!&.9!&.5!$^9!%^1!$N!!$N-!(>!&'.%%$N)!%^!!*>!)'=Y\"%]U!" "%]M!&-U!&-I\"\"MI+%]Q!%M1%(]9.$-Q$%M9!&]5&\"-)!%]1\"&]-'%9+!.9!&.9!&.E!&NE#+.E,&.E!&.M!&.Q!&>Q!&.Y!" "&^U$$_!!&?)!&?)!&?-!&.U!$_!!&?!!&.Q!&.M!&^])'O-!&O)!'O9&'O)!'O)!" "'O)!#NU&&?5!(_)!(?))&?!!&?1!&O1!&?=!&?%!(?-#&?%!&?%!'.]*)?)\"'?!&" "'.Y$#O%!$_!!&?!!'.U%&.Y!$NI%&.Y!&.Y!$^Y!'>M!'>M!'^I#&>E'(NE&&.E!" "$^A!'>=!&.E!&>E\"%^%!(>1%'>-&'.-!'>)'(>)&%]U!$.)#%^!!%]Y!'MM$'-]!" "&-A\"'-I'%]Q!%]I!&=A$(-A!$]='&-9#(-A+)]E#&M%!&=)$%M)!%M%!',],%<]!" "&M-!(1\"" "'.-!%^=%&.5!#N5!#>)!%^)!'N1(&.A!&.9!&.M!#NE!&>E\"(^M!&.I!'>U!'.Q%" "&>I!&.U!).U'(_%!'NY!\">Y!).Y'&?%!&?)!&N]\"&.Y!&O%\"\"?)!+/%+&?%!*O%." "'O)''O)!\"_1\"+O!!&?)!%/-!&?%!)/-!'O1!&?-!)/%-%?%\"'^Y(%/-!&O)\"(_!!" "(?!)\"O%!&.Y!'NY!'_!!&.Q!*.Q!&.U!'.E%&>M''NY!'^=('>E!$^E!&.I!%^)!" "\">=!$^9!'>9!&.5!%^1!&^!%&>-\"(.9%#>!!'.!!+-]\"%]]!%]Y!(=]!'-Y!%ME!" "%]M!%]Q!(]I)%M=!&]M!']5%&]=!$]9\"']9%%M1!%]1\"&M-%%]!\"%M%!%M!!%<]!" ")-)0%\\Q\"$A!" "&.U!&.E!(?!)'>U&\">Q!&.U!'NY!&?%!%.M!*>]'&>Y!&.]!#O!!&?)!%O)#'.]$" "&?!!'O)''O%!'O!!&_%#)^U,'^]!&?!!&/)&$.Y##NY!&O%\"%O%#\">Q!,.]*\"N]!" "&?!!'/1$&.]!(_)!$.U\"$^Q!'>U&$^M!&.U!&.E!&^M$#NI!&.9!&.A!&.=!$^=!" "#N9!$^9!&.5!'.-!*.))%^1!'>9!%^%!$>5$%.!\"$MY!$M]!$M]!%]U!(-Q!&]Q!" "'-U!%M9!$ME!&=I(%MA!%]1!%]-\"%]1\"#\\](&M%*'--\"%]%\"']%*%]%\"&L]&%M!!" "%M!!&Y!&.Y!*.Y,&.]!&?!!'O!').].#NU!&.]!" "#_!!'_!(&?1!(^Y''O%!(_!&&?!!&_!#&N]\"*.],'N]!&.Y!#N]!'.Q%&>Y!'.Y%" "'>U!'>U!'NQ!&.Q!)>Y)&>A\"&.M!&.I!$^I!&.E!(^E-&.A!&>E!&N5#(>=%'.=%" "'.%!&.5!$^E!$N1!%^-!%^)!%^%!$N%!$^!!$M]!%]]!']Y)'-U!&]]%%]U!%M5!" "&-A#%]I!%ME!)]Q-$-=$%M=!'-9'%M5!&-1'&M5%&=9$&=-$(=%(&]!\"%M%&(,Y(" "(!\"" "(N),%^%!$N%!$^9!'N-\"$^5!*.=('>5!'.-!&>)\"&.=!&.A!)^Q,(NM!#N=!&.I!" "#NA!'>=!&.U!&.A!(>M+'>E!(NU+'^U\"&>Q!'>U!(?!$&.Y!'O%!)>Y##NY!\"?-!" "'O)&&>U!&.Y!$^]!&?%!&?!!#N]!'>]&(^Y!'^Y'&.U!(>U%&.U!'NY-+>M3'>I!" "%>Y\"&.I&&^Q#\">I!&.Q!&.]!&.I!&.U!'NM!&.M!&.5!&.5!(>M+&.5!'>9!\">5!" "&.5!&.=!%^-!$^9!'.)!'.)!$N%!%^%!(-Y*'-]!$ME!'-U&&]Y*%]]!']M$%M=!" "(=I!#]E#'-A!&]I%&MA$&=-$%M5!$=%%%M9!\"--!%!!&.5!$N1!'.9&$^9!&.=!$N)!&.I!&.E!&.=!" "&.M!&>1\"&>I!&.Q!!.M!'/!$(N=!'>U!&.]!'>Q&'>Q!&>]!#NM!&.Q!&NM#'^Y'" "&.]!&.]!(^Y!(>Q*(NQ+(^Y!&O)!*NY#'>M!&>M!&.Q!&.M!&^U#*^Y*'>Q&&.A!" "&.Q!&.Q!\">U!&.I!&^-%'.I%#^E!&.I!'>5!%^1!'.9&'>5!\">E!(>)&&N5#$^5!" "&N)$&.=!&^-%'>9!&.5!#>%!).)*#>%!%^!!&^%%%]Y!'-U!&-Q\"$MQ!%]Q!%-=$" "$ME!$M-!)-A&&-=\"%]9!&=A$%M!!)=A0&=-$%!!%^%!#^5\"%^%!\".)!%^%!&^-%'>1'$N1!%N5%&N=#%^-!%^1!(NA!#NA!$^=!" "&.5!&.A!'>E!&>E!'>I!&.M!&>I!&.M!'>M!(_)!)NQ%&.U!&^Q##NQ!&.U!&.Y!" "'.Y%'.]$&.I!&.I!&.U!#O%!&.U!&_%#,>I&&.I!&.Q!&.Q!(.Q$&>Q!&.Q!)^Q&" "#NM!(NI&&.=!(.M)#NI!&^Q#&NA#!N9#)^A!#N9!&>9\"%.9\")^=!'N)('N5(&.1!" "&N-)&^-%%^)!%^%!%^!!$N!!+>%)&>!#*-Y$&-]\"'.!!\"-Q!%=M$%]M!%ME!']A*" "&-9#%MA!&-A#%]5\"&]9!(=9'$=1!%]!'$])\"#=%!$<]!$M!\"()!(^-.'>1&%^-!&.9!)^=!&.5!&.5!" "$^I!$^A!'>A!#^E!&.Q!&.Q!)NU%'>I&$^I!&.M!%NM$%.M'&.M!'>Q!&.E!&.M!" "'>Q!&^=$&^M)&.E!&>Q!&NQ\"$^Q!#NQ!&.Y!(NI!'>M+*.M!&.M!'NQ'%.Q!$^M!" "\">E!'>I!(^E-(^I'&.I!'^=)&.A!$^=!&^=*%^-!&.9!&.5!'>5!*^5&$N)!%^-!" "(.9*&MY$%^1!'N!#(MY(%]U!%]]!$MQ!%]Y!&MY$$MU!&-]!%]M!'-Y!%ME!$ME!" "%MA!%M=!$M1*)=I!%]5!&])&&=9$']1!%M)!%]-!'=%)%\\U\"%M-!%<=!',I(&LU!" "&\\Q\"%!!$N%!'.-!&-]!&>!\"%>-#%>)$)>9%%^1!%.5\"#N9!&.=!&>A\"" "&.9!&.A,&NA#&>A\"'NI'&.9!&>Q!#NE!&NI\"'>I!'>I!#NE!)>I$&.Q!&.M!&>I'" "&.]!)^I!(.M$(.I)&.M!)>M$&.A!'^Q\"&>Q!&.M!&NI\"&N5#&.I!(.I$&NI\"'.A%" ").M3&.E!#>A%#NA!&>=\"%^-!*^A&)>9%&.9!'.-!#N1&$N1!&^5$%^)!%^-!\">)!" "(N)'&.%!%^%!$N!!#=]!%^!!$MU!%]U!)=]%%]Q!%]E!$=9!&-A\"&]I%%MA!%M=!" "&M9%']I$(-50&]5!'=5($-1$%M-!'-)#$M)!'M%%&M%&%]!\"%<]!%])\"&]5!$LQ\"" "$L=\"%LQ!&LE&%LE\"%!!$N%!%^%!%^-!(>%!#>!!%^)!&.5!%^)!'>A!%^%!'>A&" "%.5\"&.=!&.A!(>I+&.=!&.=!'NA\"(NA!#NI!&^I)$^E!&^E$%.E!*>I\"&.Q!&>E\"" "&.U!&.I!&.I!&.Y!(^U!#>I%&.I!#.M)*NA*&.I!%^1!&.E!&.A!%NE$$^E!'NA\"" "&>E!*N9+&.=!(>E+%^=&'N='&.5!&>1\"&.=!&.5!$^9!'N1((>-!&.-!(>!,\".)!" "%N%*&.%!#>-!$M]!%]]!%]]!%]Y!'-U!$MM!%]Q!&]M+$MI!%ME!%]I!%MA!%MA!" "(=E\"%M9%&M1%'-5'%M-!&]1!%M!!%])''-%''=!$%M%!%!%(N!\"%^)!%^1!(]]-%^!!(>%!%]]!'.1!%^-!&.)!&.5!" "(.E)&N9#'>9!&.9!&.A!'>A!)N10'.=%&.U!&>E!'^E\"&.I!&>E\"&.M!'^5#&.I!" "$^=!&.E!&NI#(NE!&.E!(.E*(NM!'N=!&.E!&.M!(^M-'>A!'>E,#NA!(.A$&N=#" "(N=,(N=!(>=&&.=!(>1!&.5!'>A!&.5!%.1\"&.5!&.-!&.9!%]Y!%^-!%.-\"'.%!" "(=]!&>!\"'-Y!%]Q!)=Q0(N-'(-M!'=Q\"'-E!&=I$%]E!'MI(%M=!'-9\"\"ME\"$]9\"" "&-9\"$=5!&M5%$=1!&-%#$M=!'=)(%]!'\"=)!'=!$\"]-$%M%!\"L]#&,]#'LQ&*,U!" "%A!(^).(N9!&.A!%>%#&.5!'>E&&.9!)>=$%N5%$^5!&.M!" "%^A*&.A!&.=!&.=!&.A!\">=!&.=!'NA\"'>A!+>A(&^A$$^=!'^=($^E!&.=!%^9+" "*>=#'.1!(>5+$^5!*.=('.-!%^-!%^1!%.1\"$>!%'>-&\".1!%^%!%^!!%.%\"$M]!" "(.%%&=]#'.%!'=Y(%]M!&]Q!'-U!%]I!'MI)%]I!&=M$#=M!&-A#%]5!$==%#=A!" "%M9!&-%$)]1*%]-\"%M5&%M%!(-)\"(=-('-%#&M!&%)!(>%!%^-!(.-*&.-!" "&.=!*.E'\">5!%^1!&N1#'.1!&.1!%^-!&>9\"&.A!&^=$'>E!&.9!(>A+$^M!(NA!" "$^5!&.A!'>9!'>9!&.9!%^%!$N9&$^=!'>5!$^=!&.=!&.A!'.=%&.9!&.9!&^I$" "#N5!&.5!%N1*%^1!$N-!'>)'\".-!&N-#&.E!(>)+&^)%%^%!&N%$%^!!&^!%%]]!" "'-]&%]Y!&-Y!&-Y!'-U!(-Q!$MM!%]I!#=I!&]M!&M9%&ME$&M9%&]I%'-9'%]=!" "%]5!$M=!)-1&%M-!&=!$#=!!%M%!%=!%%L]!'<]#$)#$=U%).%$'.-!&>)(" "%^)!%^)!&.9!$^9!)>9%'.-%'.)%$N5%#>1!(N9!(N5!&.E!&^9$&.=!'NI''>9!" "'N5()>1*$^=!&>9\"#N5!%N9$&.5!(N9!,>A,'>5!&.9!&.A!(N5!#N5!\"^1#\".1!" "&>5\"&.A!%^%!%N1$(NA!(^-#$^%!'^)*)N%&#M]!)>%*&.-!\"N!\"(MU-%]]!%]Q!" "&-Y!%]U!%]U!%]Q!%]Q!$MI!&MU$\"-I!(MQ($MI!$MQ!&]Q%%=A$%]5\"'-9'&M=$" "$-1$&M-!%]5\"&-%$(])!%M)!&-!(&LU!%<]!%%\"&>%\"%^%!%.%\"" "\".!!%^1!$^9!(N9!'>1'#>)!&N1#'.9&'.1!&N1#*.93%^)!$N1!%^1!'.1*'>5!" "%^1!&N-$&.5!&>I!#N1!&.5!&^9$&.A!&.5!&.5!(N-'&.5!'>1''.1!).1)'.1!" "%^-!%^)!%.1\"(N5,&N5))N!!&.5!$N%!%^%!&>%#(]]-'M])%]]!%]]!&-Y!(]Q(" "&^%%%ME!(]I)$MY!'=]!'MA$%M1!%ME!(-A!%MA!&-9\"&-9\"'M1*%M9!%ME*$M5!" "%M=!&]-&%<]!%M-!'=%)\"\\E$+-!+'LQ!#=!!%\\]\"&LU!#LQ#'%#&>)\"&^5%%^-!&>-\"%^-!&N-#'^!$(>1!'^-#'.)!\".1!" "%^1!'NA''^)*'>5!&.5!%^1!&N)#'.1!$N1%%^)!$^5!&.9!\">E!$N-!-N-(&.5!" "%^1!#^)\"'.)&&N-$'.-%%^)!%^1!(N!'\"-]!!.%!%]Q!&-]!$MY!)MI,$MY!%^!!" "&-]\"#MA!$MM!%]M!%]M!&-I\"%]M!&=I$$MU!'-A\"'M=)&-9\"%]E!&-1,'=)($=-!" "'M-$&M!&%M)!%]5\"#=%!%<]!(=%$%M!!%<]!%\\U#&LU!&LM*'<9!%!\"%^!!%.)\"$>-$)>!%%^-!(>!!'.)!#^%\"'.%!%^1!'>=!(^%(%^)!%^-!$^%!" "(N%,%^%!&>1\"%^1!&N)$&.9!(>-!%^)!$N1!&N)#*^1!).1$%^-!#>-!&.)!(>)%" "%^%!,>9'(^%#'-Y!).%$$.%#%^!!(>!!&-Y!%]]!(=U!%]Y!&MY$$]U&%^)!'.!&" "&=I($MI!%]M!$ME!#=U!&]E!%M=!$MA!$-=$']5!%M9!'=Q\"%]5\"%M-!%M1!$]9\"" "$])\"#=%!%<]!%!!%^)!(^%#'.%!$N)!%^-!%^)!'>-'%^-!&^)%$N-!&.5!" "#>)!&.)'&.5!%^%!$N!!$N)!%^%!'^-$%^-!$N-!%^-!$N)!&N5(%]]!%]U!%^1!" "%^)!'.%!'.!&*^!!'>!''.)!%]U!$]Q!&-Y!%M]%*.!)&]Y%'.%&%]Q!'-Q'%]I!" "\"-I!#=E!%]A!$M=!$ME!%M9!%-A('M1)$-A$']9!*-5&%M5!#=)%\"-1!%--$%]%\"" "'=)$%]%\"$=-!',]'&LQ&&\\Q&%M-!%\\U#$,M)%LM\"&LQ!%LQ!%,A$%)!$N%!'.%!&>-\"%^%!%^%!%^%!" "%^1!%^-!&^!%'N='%^%!#^)\"(^))$N%!&N)#'.!!(>)!+>%)'.)%(N5!%-]\"%^-!" "(N!(&>!#'-]!%]Q!)M]2'.!%%]Q!&MY$(=Y!%=Y)$]M!'=I((-Q!+-M('=M#(-M!" "%]U!\"MQ\"(]E/%ME!%MA!%MA!%M=!(MA.%M1!&]5!$--$&--#%M)!'=%$%]-''--#" "%\\Y\"%-5#%M!!%M!!'!'" "%^1!%]Q!%^%!&MY)%^%!$N%!%^%!%^)!(^!#(.!%%]U!)MU'&.)!(.%%%]Y!%]Y!" "&=]#(=]!%]]!%]Y!$M]!%]U!$]]!&=U#&]Q!%]Q!%]U!&=M$$MU!%]M!'=A#$MI!" "\"-Y!$MI!&]M!&]E!$ME!&MA$$=9!&-E\"%M1!'=1#&-5#&=)$*M1'%M)!%]!\"%--$" "$M!\"'L]!'<]$$,]$%<]!&)!%]U!%]U!%]U!&-Y!&.!'%]]!%]U!$MU!'-Y!(=]!%^!!%]]!$M]!'N)#%>)$" "'N!)#>!!'^-#'-]!&>!#%^!!%^)!'>!\"&^!%'>!''.!!%]]!%]M!%=]$)-]%#=]!" "%^!!)]]-%]]!'-Y&(-Q!!-]%&=I#%]Q!%]Q!'=Q(&=I#(-Q!#=I!&=M#']M)&]E!" "%MA!(-E!&]9!&-9#&]9!%]E!%]1\"&-9#$]1\"%]-!'M-*$MI!%M%!(-)!&M-!%M%!" "%\\]\"(L]%$-!$$)!%^!!$]]!#=Q!%]]!'-Q!%]Y!$MY!&]Y%'.!!&=Y#" "'-U!%]M!%]U!%=Y$%]Q!$]Q'%]M!'=Y'&-M,&-M\"%ME!%-I#']A%#=I!$MI/&ME$" "&MA$#=A!(=5,&=E#'-9'&]E!'-5''-=!!=1\"(M1$&])&%M)!'M%%$=%!%M!!'--#" "#,]!%!\"']Q$%]I!(-Q!#=Q%" "$MM!%]Q!$MQ!&MU%&]Q!'-]!#=E!%]M!&]Q!(-Q%$MY!&MI$(=M!%]I!#=]!&]E%" "%]Q!\"-U!*>!4'=I(&]Q!$MA!%]M!)=A+%]5\"(-E!&=M$&-1#(=9-%-5(%]9!'==(" "'=5#%]5\"%]1!*-1*%]%\"(]5$$=)!%]-\"#M%\"%M!!%M-!&L]!&LQ&(,],'-)'&LY!" "'M%$%LE\"&\\Q'&' */ static const CoordRec char62_stroke0[] = { { 2.78, 85.7143 }, { 78.9705, 42.8571 }, { 2.78, 0 }, }; static const StrokeRec char62[] = { { 3, char62_stroke0 }, }; /* char: 63 '?' */ static const CoordRec char63_stroke0[] = { { 8.42, 76.1905 }, { 8.42, 80.9524 }, { 13.1819, 90.4762 }, { 17.9438, 95.2381 }, { 27.4676, 100 }, { 46.5152, 100 }, { 56.039, 95.2381 }, { 60.801, 90.4762 }, { 65.5629, 80.9524 }, { 65.5629, 71.4286 }, { 60.801, 61.9048 }, { 56.039, 57.1429 }, { 36.9914, 47.619 }, { 36.9914, 33.3333 }, }; static const CoordRec char63_stroke1[] = { { 36.9914, 9.5238 }, { 32.2295, 4.7619 }, { 36.9914, 0 }, { 41.7533, 4.7619 }, { 36.9914, 9.5238 }, }; static const StrokeRec char63[] = { { 14, char63_stroke0 }, { 5, char63_stroke1 }, }; /* char: 64 '@' */ static const CoordRec char64_stroke0[] = { { 49.2171, 52.381 }, { 39.6933, 57.1429 }, { 30.1695, 57.1429 }, { 25.4076, 47.619 }, { 25.4076, 42.8571 }, { 30.1695, 33.3333 }, { 39.6933, 33.3333 }, { 49.2171, 38.0952 }, }; static const CoordRec char64_stroke1[] = { { 49.2171, 57.1429 }, { 49.2171, 38.0952 }, { 53.979, 33.3333 }, { 63.5029, 33.3333 }, { 68.2648, 42.8571 }, { 68.2648, 47.619 }, { 63.5029, 61.9048 }, { 53.979, 71.4286 }, { 39.6933, 76.1905 }, { 34.9314, 76.1905 }, { 20.6457, 71.4286 }, { 11.1219, 61.9048 }, { 6.36, 47.619 }, { 6.36, 42.8571 }, { 11.1219, 28.5714 }, { 20.6457, 19.0476 }, { 34.9314, 14.2857 }, { 39.6933, 14.2857 }, { 53.979, 19.0476 }, }; static const StrokeRec char64[] = { { 8, char64_stroke0 }, { 19, char64_stroke1 }, }; /* char: 65 'A' */ static const CoordRec char65_stroke0[] = { { 40.5952, 100 }, { 2.5, 0 }, }; static const CoordRec char65_stroke1[] = { { 40.5952, 100 }, { 78.6905, 0 }, }; static const CoordRec char65_stroke2[] = { { 16.7857, 33.3333 }, { 64.4048, 33.3333 }, }; static const StrokeRec char65[] = { { 2, char65_stroke0 }, { 2, char65_stroke1 }, { 2, char65_stroke2 }, }; /* char: 66 'B' */ static const CoordRec char66_stroke0[] = { { 11.42, 100 }, { 11.42, 0 }, }; static const CoordRec char66_stroke1[] = { { 11.42, 100 }, { 54.2771, 100 }, { 68.5629, 95.2381 }, { 73.3248, 90.4762 }, { 78.0867, 80.9524 }, { 78.0867, 71.4286 }, { 73.3248, 61.9048 }, { 68.5629, 57.1429 }, { 54.2771, 52.381 }, }; static const CoordRec char66_stroke2[] = { { 11.42, 52.381 }, { 54.2771, 52.381 }, { 68.5629, 47.619 }, { 73.3248, 42.8571 }, { 78.0867, 33.3333 }, { 78.0867, 19.0476 }, { 73.3248, 9.5238 }, { 68.5629, 4.7619 }, { 54.2771, 0 }, { 11.42, 0 }, }; static const StrokeRec char66[] = { { 2, char66_stroke0 }, { 9, char66_stroke1 }, { 10, char66_stroke2 }, }; /* char: 67 'C' */ static const CoordRec char67_stroke0[] = { { 78.0886, 76.1905 }, { 73.3267, 85.7143 }, { 63.8029, 95.2381 }, { 54.279, 100 }, { 35.2314, 100 }, { 25.7076, 95.2381 }, { 16.1838, 85.7143 }, { 11.4219, 76.1905 }, { 6.66, 61.9048 }, { 6.66, 38.0952 }, { 11.4219, 23.8095 }, { 16.1838, 14.2857 }, { 25.7076, 4.7619 }, { 35.2314, 0 }, { 54.279, 0 }, { 63.8029, 4.7619 }, { 73.3267, 14.2857 }, { 78.0886, 23.8095 }, }; static const StrokeRec char67[] = { { 18, char67_stroke0 }, }; /* char: 68 'D' */ static const CoordRec char68_stroke0[] = { { 11.96, 100 }, { 11.96, 0 }, }; static const CoordRec char68_stroke1[] = { { 11.96, 100 }, { 45.2933, 100 }, { 59.579, 95.2381 }, { 69.1029, 85.7143 }, { 73.8648, 76.1905 }, { 78.6267, 61.9048 }, { 78.6267, 38.0952 }, { 73.8648, 23.8095 }, { 69.1029, 14.2857 }, { 59.579, 4.7619 }, { 45.2933, 0 }, { 11.96, 0 }, }; static const StrokeRec char68[] = { { 2, char68_stroke0 }, { 12, char68_stroke1 }, }; /* char: 69 'E' */ static const CoordRec char69_stroke0[] = { { 11.42, 100 }, { 11.42, 0 }, }; static const CoordRec char69_stroke1[] = { { 11.42, 100 }, { 73.3248, 100 }, }; static const CoordRec char69_stroke2[] = { { 11.42, 52.381 }, { 49.5152, 52.381 }, }; static const CoordRec char69_stroke3[] = { { 11.42, 0 }, { 73.3248, 0 }, }; static const StrokeRec char69[] = { { 2, char69_stroke0 }, { 2, char69_stroke1 }, { 2, char69_stroke2 }, { 2, char69_stroke3 }, }; /* char: 70 'F' */ static const CoordRec char70_stroke0[] = { { 11.42, 100 }, { 11.42, 0 }, }; static const CoordRec char70_stroke1[] = { { 11.42, 100 }, { 73.3248, 100 }, }; static const CoordRec char70_stroke2[] = { { 11.42, 52.381 }, { 49.5152, 52.381 }, }; static const StrokeRec char70[] = { { 2, char70_stroke0 }, { 2, char70_stroke1 }, { 2, char70_stroke2 }, }; /* char: 71 'G' */ static const CoordRec char71_stroke0[] = { { 78.4886, 76.1905 }, { 73.7267, 85.7143 }, { 64.2029, 95.2381 }, { 54.679, 100 }, { 35.6314, 100 }, { 26.1076, 95.2381 }, { 16.5838, 85.7143 }, { 11.8219, 76.1905 }, { 7.06, 61.9048 }, { 7.06, 38.0952 }, { 11.8219, 23.8095 }, { 16.5838, 14.2857 }, { 26.1076, 4.7619 }, { 35.6314, 0 }, { 54.679, 0 }, { 64.2029, 4.7619 }, { 73.7267, 14.2857 }, { 78.4886, 23.8095 }, { 78.4886, 38.0952 }, }; static const CoordRec char71_stroke1[] = { { 54.679, 38.0952 }, { 78.4886, 38.0952 }, }; static const StrokeRec char71[] = { { 19, char71_stroke0 }, { 2, char71_stroke1 }, }; /* char: 72 'H' */ static const CoordRec char72_stroke0[] = { { 11.42, 100 }, { 11.42, 0 }, }; static const CoordRec char72_stroke1[] = { { 78.0867, 100 }, { 78.0867, 0 }, }; static const CoordRec char72_stroke2[] = { { 11.42, 52.381 }, { 78.0867, 52.381 }, }; static const StrokeRec char72[] = { { 2, char72_stroke0 }, { 2, char72_stroke1 }, { 2, char72_stroke2 }, }; /* char: 73 'I' */ static const CoordRec char73_stroke0[] = { { 10.86, 100 }, { 10.86, 0 }, }; static const StrokeRec char73[] = { { 2, char73_stroke0 }, }; /* char: 74 'J' */ static const CoordRec char74_stroke0[] = { { 50.119, 100 }, { 50.119, 23.8095 }, { 45.3571, 9.5238 }, { 40.5952, 4.7619 }, { 31.0714, 0 }, { 21.5476, 0 }, { 12.0238, 4.7619 }, { 7.2619, 9.5238 }, { 2.5, 23.8095 }, { 2.5, 33.3333 }, }; static const StrokeRec char74[] = { { 10, char74_stroke0 }, }; /* char: 75 'K' */ static const CoordRec char75_stroke0[] = { { 11.28, 100 }, { 11.28, 0 }, }; static const CoordRec char75_stroke1[] = { { 77.9467, 100 }, { 11.28, 33.3333 }, }; static const CoordRec char75_stroke2[] = { { 35.0895, 57.1429 }, { 77.9467, 0 }, }; static const StrokeRec char75[] = { { 2, char75_stroke0 }, { 2, char75_stroke1 }, { 2, char75_stroke2 }, }; /* char: 76 'L' */ static const CoordRec char76_stroke0[] = { { 11.68, 100 }, { 11.68, 0 }, }; static const CoordRec char76_stroke1[] = { { 11.68, 0 }, { 68.8229, 0 }, }; static const StrokeRec char76[] = { { 2, char76_stroke0 }, { 2, char76_stroke1 }, }; /* char: 77 'M' */ static const CoordRec char77_stroke0[] = { { 10.86, 100 }, { 10.86, 0 }, }; static const CoordRec char77_stroke1[] = { { 10.86, 100 }, { 48.9552, 0 }, }; static const CoordRec char77_stroke2[] = { { 87.0505, 100 }, { 48.9552, 0 }, }; static const CoordRec char77_stroke3[] = { { 87.0505, 100 }, { 87.0505, 0 }, }; static const StrokeRec char77[] = { { 2, char77_stroke0 }, { 2, char77_stroke1 }, { 2, char77_stroke2 }, { 2, char77_stroke3 }, }; /* char: 78 'N' */ static const CoordRec char78_stroke0[] = { { 11.14, 100 }, { 11.14, 0 }, }; static const CoordRec char78_stroke1[] = { { 11.14, 100 }, { 77.8067, 0 }, }; static const CoordRec char78_stroke2[] = { { 77.8067, 100 }, { 77.8067, 0 }, }; static const StrokeRec char78[] = { { 2, char78_stroke0 }, { 2, char78_stroke1 }, { 2, char78_stroke2 }, }; /* char: 79 'O' */ static const CoordRec char79_stroke0[] = { { 34.8114, 100 }, { 25.2876, 95.2381 }, { 15.7638, 85.7143 }, { 11.0019, 76.1905 }, { 6.24, 61.9048 }, { 6.24, 38.0952 }, { 11.0019, 23.8095 }, { 15.7638, 14.2857 }, { 25.2876, 4.7619 }, { 34.8114, 0 }, { 53.859, 0 }, { 63.3829, 4.7619 }, { 72.9067, 14.2857 }, { 77.6686, 23.8095 }, { 82.4305, 38.0952 }, { 82.4305, 61.9048 }, { 77.6686, 76.1905 }, { 72.9067, 85.7143 }, { 63.3829, 95.2381 }, { 53.859, 100 }, { 34.8114, 100 }, }; static const StrokeRec char79[] = { { 21, char79_stroke0 }, }; /* char: 80 'P' */ static const CoordRec char80_stroke0[] = { { 12.1, 100 }, { 12.1, 0 }, }; static const CoordRec char80_stroke1[] = { { 12.1, 100 }, { 54.9571, 100 }, { 69.2429, 95.2381 }, { 74.0048, 90.4762 }, { 78.7667, 80.9524 }, { 78.7667, 66.6667 }, { 74.0048, 57.1429 }, { 69.2429, 52.381 }, { 54.9571, 47.619 }, { 12.1, 47.619 }, }; static const StrokeRec char80[] = { { 2, char80_stroke0 }, { 10, char80_stroke1 }, }; /* char: 81 'Q' */ static const CoordRec char81_stroke0[] = { { 33.8714, 100 }, { 24.3476, 95.2381 }, { 14.8238, 85.7143 }, { 10.0619, 76.1905 }, { 5.3, 61.9048 }, { 5.3, 38.0952 }, { 10.0619, 23.8095 }, { 14.8238, 14.2857 }, { 24.3476, 4.7619 }, { 33.8714, 0 }, { 52.919, 0 }, { 62.4429, 4.7619 }, { 71.9667, 14.2857 }, { 76.7286, 23.8095 }, { 81.4905, 38.0952 }, { 81.4905, 61.9048 }, { 76.7286, 76.1905 }, { 71.9667, 85.7143 }, { 62.4429, 95.2381 }, { 52.919, 100 }, { 33.8714, 100 }, }; static const CoordRec char81_stroke1[] = { { 48.1571, 19.0476 }, { 76.7286, -9.5238 }, }; static const StrokeRec char81[] = { { 21, char81_stroke0 }, { 2, char81_stroke1 }, }; /* char: 82 'R' */ static const CoordRec char82_stroke0[] = { { 11.68, 100 }, { 11.68, 0 }, }; static const CoordRec char82_stroke1[] = { { 11.68, 100 }, { 54.5371, 100 }, { 68.8229, 95.2381 }, { 73.5848, 90.4762 }, { 78.3467, 80.9524 }, { 78.3467, 71.4286 }, { 73.5848, 61.9048 }, { 68.8229, 57.1429 }, { 54.5371, 52.381 }, { 11.68, 52.381 }, }; static const CoordRec char82_stroke2[] = { { 45.0133, 52.381 }, { 78.3467, 0 }, }; static const StrokeRec char82[] = { { 2, char82_stroke0 }, { 10, char82_stroke1 }, { 2, char82_stroke2 }, }; /* char: 83 'S' */ static const CoordRec char83_stroke0[] = { { 74.6667, 85.7143 }, { 65.1429, 95.2381 }, { 50.8571, 100 }, { 31.8095, 100 }, { 17.5238, 95.2381 }, { 8, 85.7143 }, { 8, 76.1905 }, { 12.7619, 66.6667 }, { 17.5238, 61.9048 }, { 27.0476, 57.1429 }, { 55.619, 47.619 }, { 65.1429, 42.8571 }, { 69.9048, 38.0952 }, { 74.6667, 28.5714 }, { 74.6667, 14.2857 }, { 65.1429, 4.7619 }, { 50.8571, 0 }, { 31.8095, 0 }, { 17.5238, 4.7619 }, { 8, 14.2857 }, }; static const StrokeRec char83[] = { { 20, char83_stroke0 }, }; /* char: 84 'T' */ static const CoordRec char84_stroke0[] = { { 35.6933, 100 }, { 35.6933, 0 }, }; static const CoordRec char84_stroke1[] = { { 2.36, 100 }, { 69.0267, 100 }, }; static const StrokeRec char84[] = { { 2, char84_stroke0 }, { 2, char84_stroke1 }, }; /* char: 85 'U' */ static const CoordRec char85_stroke0[] = { { 11.54, 100 }, { 11.54, 28.5714 }, { 16.3019, 14.2857 }, { 25.8257, 4.7619 }, { 40.1114, 0 }, { 49.6352, 0 }, { 63.921, 4.7619 }, { 73.4448, 14.2857 }, { 78.2067, 28.5714 }, { 78.2067, 100 }, }; static const StrokeRec char85[] = { { 10, char85_stroke0 }, }; /* char: 86 'V' */ static const CoordRec char86_stroke0[] = { { 2.36, 100 }, { 40.4552, 0 }, }; static const CoordRec char86_stroke1[] = { { 78.5505, 100 }, { 40.4552, 0 }, }; static const StrokeRec char86[] = { { 2, char86_stroke0 }, { 2, char86_stroke1 }, }; /* char: 87 'W' */ static const CoordRec char87_stroke0[] = { { 2.22, 100 }, { 26.0295, 0 }, }; static const CoordRec char87_stroke1[] = { { 49.839, 100 }, { 26.0295, 0 }, }; static const CoordRec char87_stroke2[] = { { 49.839, 100 }, { 73.6486, 0 }, }; static const CoordRec char87_stroke3[] = { { 97.4581, 100 }, { 73.6486, 0 }, }; static const StrokeRec char87[] = { { 2, char87_stroke0 }, { 2, char87_stroke1 }, { 2, char87_stroke2 }, { 2, char87_stroke3 }, }; /* char: 88 'X' */ static const CoordRec char88_stroke0[] = { { 2.5, 100 }, { 69.1667, 0 }, }; static const CoordRec char88_stroke1[] = { { 69.1667, 100 }, { 2.5, 0 }, }; static const StrokeRec char88[] = { { 2, char88_stroke0 }, { 2, char88_stroke1 }, }; /* char: 89 'Y' */ static const CoordRec char89_stroke0[] = { { 1.52, 100 }, { 39.6152, 52.381 }, { 39.6152, 0 }, }; static const CoordRec char89_stroke1[] = { { 77.7105, 100 }, { 39.6152, 52.381 }, }; static const StrokeRec char89[] = { { 3, char89_stroke0 }, { 2, char89_stroke1 }, }; /* char: 90 'Z' */ static const CoordRec char90_stroke0[] = { { 69.1667, 100 }, { 2.5, 0 }, }; static const CoordRec char90_stroke1[] = { { 2.5, 100 }, { 69.1667, 100 }, }; static const CoordRec char90_stroke2[] = { { 2.5, 0 }, { 69.1667, 0 }, }; static const StrokeRec char90[] = { { 2, char90_stroke0 }, { 2, char90_stroke1 }, { 2, char90_stroke2 }, }; /* char: 91 '[' */ static const CoordRec char91_stroke0[] = { { 7.78, 119.048 }, { 7.78, -33.3333 }, }; static const CoordRec char91_stroke1[] = { { 12.5419, 119.048 }, { 12.5419, -33.3333 }, }; static const CoordRec char91_stroke2[] = { { 7.78, 119.048 }, { 41.1133, 119.048 }, }; static const CoordRec char91_stroke3[] = { { 7.78, -33.3333 }, { 41.1133, -33.3333 }, }; static const StrokeRec char91[] = { { 2, char91_stroke0 }, { 2, char91_stroke1 }, { 2, char91_stroke2 }, { 2, char91_stroke3 }, }; /* char: 92 '\' */ static const CoordRec char92_stroke0[] = { { 5.84, 100 }, { 72.5067, -14.2857 }, }; static const StrokeRec char92[] = { { 2, char92_stroke0 }, }; /* char: 93 ']' */ static const CoordRec char93_stroke0[] = { { 33.0114, 119.048 }, { 33.0114, -33.3333 }, }; static const CoordRec char93_stroke1[] = { { 37.7733, 119.048 }, { 37.7733, -33.3333 }, }; static const CoordRec char93_stroke2[] = { { 4.44, 119.048 }, { 37.7733, 119.048 }, }; static const CoordRec char93_stroke3[] = { { 4.44, -33.3333 }, { 37.7733, -33.3333 }, }; static const StrokeRec char93[] = { { 2, char93_stroke0 }, { 2, char93_stroke1 }, { 2, char93_stroke2 }, { 2, char93_stroke3 }, }; /* char: 94 '^' */ static const CoordRec char94_stroke0[] = { { 44.0752, 109.524 }, { 5.98, 42.8571 }, }; static const CoordRec char94_stroke1[] = { { 44.0752, 109.524 }, { 82.1705, 42.8571 }, }; static const StrokeRec char94[] = { { 2, char94_stroke0 }, { 2, char94_stroke1 }, }; /* char: 95 '_' */ static const CoordRec char95_stroke0[] = { { -1.1, -33.3333 }, { 103.662, -33.3333 }, { 103.662, -28.5714 }, { -1.1, -28.5714 }, { -1.1, -33.3333 }, }; static const StrokeRec char95[] = { { 5, char95_stroke0 }, }; /* char: 96 '`' */ static const CoordRec char96_stroke0[] = { { 33.0219, 100 }, { 56.8314, 71.4286 }, }; static const CoordRec char96_stroke1[] = { { 33.0219, 100 }, { 28.26, 95.2381 }, { 56.8314, 71.4286 }, }; static const StrokeRec char96[] = { { 2, char96_stroke0 }, { 3, char96_stroke1 }, }; /* char: 97 'a' */ static const CoordRec char97_stroke0[] = { { 63.8229, 66.6667 }, { 63.8229, 0 }, }; static const CoordRec char97_stroke1[] = { { 63.8229, 52.381 }, { 54.299, 61.9048 }, { 44.7752, 66.6667 }, { 30.4895, 66.6667 }, { 20.9657, 61.9048 }, { 11.4419, 52.381 }, { 6.68, 38.0952 }, { 6.68, 28.5714 }, { 11.4419, 14.2857 }, { 20.9657, 4.7619 }, { 30.4895, 0 }, { 44.7752, 0 }, { 54.299, 4.7619 }, { 63.8229, 14.2857 }, }; static const StrokeRec char97[] = { { 2, char97_stroke0 }, { 14, char97_stroke1 }, }; /* char: 98 'b' */ static const CoordRec char98_stroke0[] = { { 8.76, 100 }, { 8.76, 0 }, }; static const CoordRec char98_stroke1[] = { { 8.76, 52.381 }, { 18.2838, 61.9048 }, { 27.8076, 66.6667 }, { 42.0933, 66.6667 }, { 51.6171, 61.9048 }, { 61.141, 52.381 }, { 65.9029, 38.0952 }, { 65.9029, 28.5714 }, { 61.141, 14.2857 }, { 51.6171, 4.7619 }, { 42.0933, 0 }, { 27.8076, 0 }, { 18.2838, 4.7619 }, { 8.76, 14.2857 }, }; static const StrokeRec char98[] = { { 2, char98_stroke0 }, { 14, char98_stroke1 }, }; /* char: 99 'c' */ static const CoordRec char99_stroke0[] = { { 62.6629, 52.381 }, { 53.139, 61.9048 }, { 43.6152, 66.6667 }, { 29.3295, 66.6667 }, { 19.8057, 61.9048 }, { 10.2819, 52.381 }, { 5.52, 38.0952 }, { 5.52, 28.5714 }, { 10.2819, 14.2857 }, { 19.8057, 4.7619 }, { 29.3295, 0 }, { 43.6152, 0 }, { 53.139, 4.7619 }, { 62.6629, 14.2857 }, }; static const StrokeRec char99[] = { { 14, char99_stroke0 }, }; /* char: 100 'd' */ static const CoordRec char100_stroke0[] = { { 61.7829, 100 }, { 61.7829, 0 }, }; static const CoordRec char100_stroke1[] = { { 61.7829, 52.381 }, { 52.259, 61.9048 }, { 42.7352, 66.6667 }, { 28.4495, 66.6667 }, { 18.9257, 61.9048 }, { 9.4019, 52.381 }, { 4.64, 38.0952 }, { 4.64, 28.5714 }, { 9.4019, 14.2857 }, { 18.9257, 4.7619 }, { 28.4495, 0 }, { 42.7352, 0 }, { 52.259, 4.7619 }, { 61.7829, 14.2857 }, }; static const StrokeRec char100[] = { { 2, char100_stroke0 }, { 14, char100_stroke1 }, }; /* char: 101 'e' */ static const CoordRec char101_stroke0[] = { { 5.72, 38.0952 }, { 62.8629, 38.0952 }, { 62.8629, 47.619 }, { 58.101, 57.1429 }, { 53.339, 61.9048 }, { 43.8152, 66.6667 }, { 29.5295, 66.6667 }, { 20.0057, 61.9048 }, { 10.4819, 52.381 }, { 5.72, 38.0952 }, { 5.72, 28.5714 }, { 10.4819, 14.2857 }, { 20.0057, 4.7619 }, { 29.5295, 0 }, { 43.8152, 0 }, { 53.339, 4.7619 }, { 62.8629, 14.2857 }, }; static const StrokeRec char101[] = { { 17, char101_stroke0 }, }; /* char: 102 'f' */ static const CoordRec char102_stroke0[] = { { 38.7752, 100 }, { 29.2514, 100 }, { 19.7276, 95.2381 }, { 14.9657, 80.9524 }, { 14.9657, 0 }, }; static const CoordRec char102_stroke1[] = { { 0.68, 66.6667 }, { 34.0133, 66.6667 }, }; static const StrokeRec char102[] = { { 5, char102_stroke0 }, { 2, char102_stroke1 }, }; /* char: 103 'g' */ static const CoordRec char103_stroke0[] = { { 62.5029, 66.6667 }, { 62.5029, -9.5238 }, { 57.741, -23.8095 }, { 52.979, -28.5714 }, { 43.4552, -33.3333 }, { 29.1695, -33.3333 }, { 19.6457, -28.5714 }, }; static const CoordRec char103_stroke1[] = { { 62.5029, 52.381 }, { 52.979, 61.9048 }, { 43.4552, 66.6667 }, { 29.1695, 66.6667 }, { 19.6457, 61.9048 }, { 10.1219, 52.381 }, { 5.36, 38.0952 }, { 5.36, 28.5714 }, { 10.1219, 14.2857 }, { 19.6457, 4.7619 }, { 29.1695, 0 }, { 43.4552, 0 }, { 52.979, 4.7619 }, { 62.5029, 14.2857 }, }; static const StrokeRec char103[] = { { 7, char103_stroke0 }, { 14, char103_stroke1 }, }; /* char: 104 'h' */ static const CoordRec char104_stroke0[] = { { 9.6, 100 }, { 9.6, 0 }, }; static const CoordRec char104_stroke1[] = { { 9.6, 47.619 }, { 23.8857, 61.9048 }, { 33.4095, 66.6667 }, { 47.6952, 66.6667 }, { 57.219, 61.9048 }, { 61.981, 47.619 }, { 61.981, 0 }, }; static const StrokeRec char104[] = { { 2, char104_stroke0 }, { 7, char104_stroke1 }, }; /* char: 105 'i' */ static const CoordRec char105_stroke0[] = { { 10.02, 100 }, { 14.7819, 95.2381 }, { 19.5438, 100 }, { 14.7819, 104.762 }, { 10.02, 100 }, }; static const CoordRec char105_stroke1[] = { { 14.7819, 66.6667 }, { 14.7819, 0 }, }; static const StrokeRec char105[] = { { 5, char105_stroke0 }, { 2, char105_stroke1 }, }; /* char: 106 'j' */ static const CoordRec char106_stroke0[] = { { 17.3876, 100 }, { 22.1495, 95.2381 }, { 26.9114, 100 }, { 22.1495, 104.762 }, { 17.3876, 100 }, }; static const CoordRec char106_stroke1[] = { { 22.1495, 66.6667 }, { 22.1495, -14.2857 }, { 17.3876, -28.5714 }, { 7.8638, -33.3333 }, { -1.66, -33.3333 }, }; static const StrokeRec char106[] = { { 5, char106_stroke0 }, { 5, char106_stroke1 }, }; /* char: 107 'k' */ static const CoordRec char107_stroke0[] = { { 9.6, 100 }, { 9.6, 0 }, }; static const CoordRec char107_stroke1[] = { { 57.219, 66.6667 }, { 9.6, 19.0476 }, }; static const CoordRec char107_stroke2[] = { { 28.6476, 38.0952 }, { 61.981, 0 }, }; static const StrokeRec char107[] = { { 2, char107_stroke0 }, { 2, char107_stroke1 }, { 2, char107_stroke2 }, }; /* char: 108 'l' */ static const CoordRec char108_stroke0[] = { { 10.02, 100 }, { 10.02, 0 }, }; static const StrokeRec char108[] = { { 2, char108_stroke0 }, }; /* char: 109 'm' */ static const CoordRec char109_stroke0[] = { { 9.6, 66.6667 }, { 9.6, 0 }, }; static const CoordRec char109_stroke1[] = { { 9.6, 47.619 }, { 23.8857, 61.9048 }, { 33.4095, 66.6667 }, { 47.6952, 66.6667 }, { 57.219, 61.9048 }, { 61.981, 47.619 }, { 61.981, 0 }, }; static const CoordRec char109_stroke2[] = { { 61.981, 47.619 }, { 76.2667, 61.9048 }, { 85.7905, 66.6667 }, { 100.076, 66.6667 }, { 109.6, 61.9048 }, { 114.362, 47.619 }, { 114.362, 0 }, }; static const StrokeRec char109[] = { { 2, char109_stroke0 }, { 7, char109_stroke1 }, { 7, char109_stroke2 }, }; /* char: 110 'n' */ static const CoordRec char110_stroke0[] = { { 9.18, 66.6667 }, { 9.18, 0 }, }; static const CoordRec char110_stroke1[] = { { 9.18, 47.619 }, { 23.4657, 61.9048 }, { 32.9895, 66.6667 }, { 47.2752, 66.6667 }, { 56.799, 61.9048 }, { 61.561, 47.619 }, { 61.561, 0 }, }; static const StrokeRec char110[] = { { 2, char110_stroke0 }, { 7, char110_stroke1 }, }; /* char: 111 'o' */ static const CoordRec char111_stroke0[] = { { 28.7895, 66.6667 }, { 19.2657, 61.9048 }, { 9.7419, 52.381 }, { 4.98, 38.0952 }, { 4.98, 28.5714 }, { 9.7419, 14.2857 }, { 19.2657, 4.7619 }, { 28.7895, 0 }, { 43.0752, 0 }, { 52.599, 4.7619 }, { 62.1229, 14.2857 }, { 66.8848, 28.5714 }, { 66.8848, 38.0952 }, { 62.1229, 52.381 }, { 52.599, 61.9048 }, { 43.0752, 66.6667 }, { 28.7895, 66.6667 }, }; static const StrokeRec char111[] = { { 17, char111_stroke0 }, }; /* char: 112 'p' */ static const CoordRec char112_stroke0[] = { { 9.46, 66.6667 }, { 9.46, -33.3333 }, }; static const CoordRec char112_stroke1[] = { { 9.46, 52.381 }, { 18.9838, 61.9048 }, { 28.5076, 66.6667 }, { 42.7933, 66.6667 }, { 52.3171, 61.9048 }, { 61.841, 52.381 }, { 66.6029, 38.0952 }, { 66.6029, 28.5714 }, { 61.841, 14.2857 }, { 52.3171, 4.7619 }, { 42.7933, 0 }, { 28.5076, 0 }, { 18.9838, 4.7619 }, { 9.46, 14.2857 }, }; static const StrokeRec char112[] = { { 2, char112_stroke0 }, { 14, char112_stroke1 }, }; /* char: 113 'q' */ static const CoordRec char113_stroke0[] = { { 61.9829, 66.6667 }, { 61.9829, -33.3333 }, }; static const CoordRec char113_stroke1[] = { { 61.9829, 52.381 }, { 52.459, 61.9048 }, { 42.9352, 66.6667 }, { 28.6495, 66.6667 }, { 19.1257, 61.9048 }, { 9.6019, 52.381 }, { 4.84, 38.0952 }, { 4.84, 28.5714 }, { 9.6019, 14.2857 }, { 19.1257, 4.7619 }, { 28.6495, 0 }, { 42.9352, 0 }, { 52.459, 4.7619 }, { 61.9829, 14.2857 }, }; static const StrokeRec char113[] = { { 2, char113_stroke0 }, { 14, char113_stroke1 }, }; /* char: 114 'r' */ static const CoordRec char114_stroke0[] = { { 9.46, 66.6667 }, { 9.46, 0 }, }; static const CoordRec char114_stroke1[] = { { 9.46, 38.0952 }, { 14.2219, 52.381 }, { 23.7457, 61.9048 }, { 33.2695, 66.6667 }, { 47.5552, 66.6667 }, }; static const StrokeRec char114[] = { { 2, char114_stroke0 }, { 5, char114_stroke1 }, }; /* char: 115 's' */ static const CoordRec char115_stroke0[] = { { 57.081, 52.381 }, { 52.319, 61.9048 }, { 38.0333, 66.6667 }, { 23.7476, 66.6667 }, { 9.4619, 61.9048 }, { 4.7, 52.381 }, { 9.4619, 42.8571 }, { 18.9857, 38.0952 }, { 42.7952, 33.3333 }, { 52.319, 28.5714 }, { 57.081, 19.0476 }, { 57.081, 14.2857 }, { 52.319, 4.7619 }, { 38.0333, 0 }, { 23.7476, 0 }, { 9.4619, 4.7619 }, { 4.7, 14.2857 }, }; static const StrokeRec char115[] = { { 17, char115_stroke0 }, }; /* char: 116 't' */ static const CoordRec char116_stroke0[] = { { 14.8257, 100 }, { 14.8257, 19.0476 }, { 19.5876, 4.7619 }, { 29.1114, 0 }, { 38.6352, 0 }, }; static const CoordRec char116_stroke1[] = { { 0.54, 66.6667 }, { 33.8733, 66.6667 }, }; static const StrokeRec char116[] = { { 5, char116_stroke0 }, { 2, char116_stroke1 }, }; /* char: 117 'u' */ static const CoordRec char117_stroke0[] = { { 9.46, 66.6667 }, { 9.46, 19.0476 }, { 14.2219, 4.7619 }, { 23.7457, 0 }, { 38.0314, 0 }, { 47.5552, 4.7619 }, { 61.841, 19.0476 }, }; static const CoordRec char117_stroke1[] = { { 61.841, 66.6667 }, { 61.841, 0 }, }; static const StrokeRec char117[] = { { 7, char117_stroke0 }, { 2, char117_stroke1 }, }; /* char: 118 'v' */ static const CoordRec char118_stroke0[] = { { 1.8, 66.6667 }, { 30.3714, 0 }, }; static const CoordRec char118_stroke1[] = { { 58.9429, 66.6667 }, { 30.3714, 0 }, }; static const StrokeRec char118[] = { { 2, char118_stroke0 }, { 2, char118_stroke1 }, }; /* char: 119 'w' */ static const CoordRec char119_stroke0[] = { { 2.5, 66.6667 }, { 21.5476, 0 }, }; static const CoordRec char119_stroke1[] = { { 40.5952, 66.6667 }, { 21.5476, 0 }, }; static const CoordRec char119_stroke2[] = { { 40.5952, 66.6667 }, { 59.6429, 0 }, }; static const CoordRec char119_stroke3[] = { { 78.6905, 66.6667 }, { 59.6429, 0 }, }; static const StrokeRec char119[] = { { 2, char119_stroke0 }, { 2, char119_stroke1 }, { 2, char119_stroke2 }, { 2, char119_stroke3 }, }; /* char: 120 'x' */ static const CoordRec char120_stroke0[] = { { 1.66, 66.6667 }, { 54.041, 0 }, }; static const CoordRec char120_stroke1[] = { { 54.041, 66.6667 }, { 1.66, 0 }, }; static const StrokeRec char120[] = { { 2, char120_stroke0 }, { 2, char120_stroke1 }, }; /* char: 121 'y' */ static const CoordRec char121_stroke0[] = { { 6.5619, 66.6667 }, { 35.1333, 0 }, }; static const CoordRec char121_stroke1[] = { { 63.7048, 66.6667 }, { 35.1333, 0 }, { 25.6095, -19.0476 }, { 16.0857, -28.5714 }, { 6.5619, -33.3333 }, { 1.8, -33.3333 }, }; static const StrokeRec char121[] = { { 2, char121_stroke0 }, { 6, char121_stroke1 }, }; /* char: 122 'z' */ static const CoordRec char122_stroke0[] = { { 56.821, 66.6667 }, { 4.44, 0 }, }; static const CoordRec char122_stroke1[] = { { 4.44, 66.6667 }, { 56.821, 66.6667 }, }; static const CoordRec char122_stroke2[] = { { 4.44, 0 }, { 56.821, 0 }, }; static const StrokeRec char122[] = { { 2, char122_stroke0 }, { 2, char122_stroke1 }, { 2, char122_stroke2 }, }; /* char: 123 '{' */ static const CoordRec char123_stroke0[] = { { 31.1895, 119.048 }, { 21.6657, 114.286 }, { 16.9038, 109.524 }, { 12.1419, 100 }, { 12.1419, 90.4762 }, { 16.9038, 80.9524 }, { 21.6657, 76.1905 }, { 26.4276, 66.6667 }, { 26.4276, 57.1429 }, { 16.9038, 47.619 }, }; static const CoordRec char123_stroke1[] = { { 21.6657, 114.286 }, { 16.9038, 104.762 }, { 16.9038, 95.2381 }, { 21.6657, 85.7143 }, { 26.4276, 80.9524 }, { 31.1895, 71.4286 }, { 31.1895, 61.9048 }, { 26.4276, 52.381 }, { 7.38, 42.8571 }, { 26.4276, 33.3333 }, { 31.1895, 23.8095 }, { 31.1895, 14.2857 }, { 26.4276, 4.7619 }, { 21.6657, 0 }, { 16.9038, -9.5238 }, { 16.9038, -19.0476 }, { 21.6657, -28.5714 }, }; static const CoordRec char123_stroke2[] = { { 16.9038, 38.0952 }, { 26.4276, 28.5714 }, { 26.4276, 19.0476 }, { 21.6657, 9.5238 }, { 16.9038, 4.7619 }, { 12.1419, -4.7619 }, { 12.1419, -14.2857 }, { 16.9038, -23.8095 }, { 21.6657, -28.5714 }, { 31.1895, -33.3333 }, }; static const StrokeRec char123[] = { { 10, char123_stroke0 }, { 17, char123_stroke1 }, { 10, char123_stroke2 }, }; /* char: 124 '|' */ static const CoordRec char124_stroke0[] = { { 11.54, 119.048 }, { 11.54, -33.3333 }, }; static const StrokeRec char124[] = { { 2, char124_stroke0 }, }; /* char: 125 '}' */ static const CoordRec char125_stroke0[] = { { 9.18, 119.048 }, { 18.7038, 114.286 }, { 23.4657, 109.524 }, { 28.2276, 100 }, { 28.2276, 90.4762 }, { 23.4657, 80.9524 }, { 18.7038, 76.1905 }, { 13.9419, 66.6667 }, { 13.9419, 57.1429 }, { 23.4657, 47.619 }, }; static const CoordRec char125_stroke1[] = { { 18.7038, 114.286 }, { 23.4657, 104.762 }, { 23.4657, 95.2381 }, { 18.7038, 85.7143 }, { 13.9419, 80.9524 }, { 9.18, 71.4286 }, { 9.18, 61.9048 }, { 13.9419, 52.381 }, { 32.9895, 42.8571 }, { 13.9419, 33.3333 }, { 9.18, 23.8095 }, { 9.18, 14.2857 }, { 13.9419, 4.7619 }, { 18.7038, 0 }, { 23.4657, -9.5238 }, { 23.4657, -19.0476 }, { 18.7038, -28.5714 }, }; static const CoordRec char125_stroke2[] = { { 23.4657, 38.0952 }, { 13.9419, 28.5714 }, { 13.9419, 19.0476 }, { 18.7038, 9.5238 }, { 23.4657, 4.7619 }, { 28.2276, -4.7619 }, { 28.2276, -14.2857 }, { 23.4657, -23.8095 }, { 18.7038, -28.5714 }, { 9.18, -33.3333 }, }; static const StrokeRec char125[] = { { 10, char125_stroke0 }, { 17, char125_stroke1 }, { 10, char125_stroke2 }, }; /* char: 126 '~' */ static const CoordRec char126_stroke0[] = { { 2.92, 28.5714 }, { 2.92, 38.0952 }, { 7.6819, 52.381 }, { 17.2057, 57.1429 }, { 26.7295, 57.1429 }, { 36.2533, 52.381 }, { 55.301, 38.0952 }, { 64.8248, 33.3333 }, { 74.3486, 33.3333 }, { 83.8724, 38.0952 }, { 88.6343, 47.619 }, }; static const CoordRec char126_stroke1[] = { { 2.92, 38.0952 }, { 7.6819, 47.619 }, { 17.2057, 52.381 }, { 26.7295, 52.381 }, { 36.2533, 47.619 }, { 55.301, 33.3333 }, { 64.8248, 28.5714 }, { 74.3486, 28.5714 }, { 83.8724, 33.3333 }, { 88.6343, 47.619 }, { 88.6343, 57.1429 }, }; static const StrokeRec char126[] = { { 11, char126_stroke0 }, { 11, char126_stroke1 }, }; /* char: 127 */ static const CoordRec char127_stroke0[] = { { 52.381, 100 }, { 14.2857, -33.3333 }, }; static const CoordRec char127_stroke1[] = { { 28.5714, 66.6667 }, { 14.2857, 61.9048 }, { 4.7619, 52.381 }, { 0, 38.0952 }, { 0, 23.8095 }, { 4.7619, 14.2857 }, { 14.2857, 4.7619 }, { 28.5714, 0 }, { 38.0952, 0 }, { 52.381, 4.7619 }, { 61.9048, 14.2857 }, { 66.6667, 28.5714 }, { 66.6667, 42.8571 }, { 61.9048, 52.381 }, { 52.381, 61.9048 }, { 38.0952, 66.6667 }, { 28.5714, 66.6667 }, }; static const StrokeRec char127[] = { { 2, char127_stroke0 }, { 17, char127_stroke1 }, }; static const StrokeCharRec chars[] = { { 0, /* char0 */ 0, 0, 0 }, { 0, /* char1 */ 0, 0, 0 }, { 0, /* char2 */ 0, 0, 0 }, { 0, /* char3 */ 0, 0, 0 }, { 0, /* char4 */ 0, 0, 0 }, { 0, /* char5 */ 0, 0, 0 }, { 0, /* char6 */ 0, 0, 0 }, { 0, /* char7 */ 0, 0, 0 }, { 0, /* char8 */ 0, 0, 0 }, { 0, /* char9 */ 0, 0, 0 }, { 0, /* char10 */ 0, 0, 0 }, { 0, /* char11 */ 0, 0, 0 }, { 0, /* char12 */ 0, 0, 0 }, { 0, /* char13 */ 0, 0, 0 }, { 0, /* char14 */ 0, 0, 0 }, { 0, /* char15 */ 0, 0, 0 }, { 0, /* char16 */ 0, 0, 0 }, { 0, /* char17 */ 0, 0, 0 }, { 0, /* char18 */ 0, 0, 0 }, { 0, /* char19 */ 0, 0, 0 }, { 0, /* char20 */ 0, 0, 0 }, { 0, /* char21 */ 0, 0, 0 }, { 0, /* char22 */ 0, 0, 0 }, { 0, /* char23 */ 0, 0, 0 }, { 0, /* char24 */ 0, 0, 0 }, { 0, /* char25 */ 0, 0, 0 }, { 0, /* char26 */ 0, 0, 0 }, { 0, /* char27 */ 0, 0, 0 }, { 0, /* char28 */ 0, 0, 0 }, { 0, /* char29 */ 0, 0, 0 }, { 0, /* char30 */ 0, 0, 0 }, { 0, /* char31 */ 0, 0, 0 }, { 0, /* char32 */ 0, 35, 70 }, /* jwz: changed this to be 'n' width. (it was 52.381, 104.762) */ { 2, char33, 13.3819, 26.6238 }, { 2, char34, 23.0676, 51.4352 }, { 4, char35, 36.5333, 79.4886 }, { 3, char36, 38.1533, 76.2067 }, { 3, char37, 49.2171, 96.5743 }, { 1, char38, 53.599, 101.758 }, { 1, char39, 4.44, 13.62 }, { 1, char40, 21.8657, 47.1733 }, { 1, char41, 24.3276, 47.5333 }, { 3, char42, 30.7695, 59.439 }, { 2, char43, 48.8371, 97.2543 }, { 1, char44, 13.5219, 26.0638 }, { 1, char45, 50.2371, 100.754 }, { 1, char46, 13.1019, 26.4838 }, { 1, char47, 40.5733, 82.1067 }, { 1, char48, 38.3133, 77.0667 }, { 1, char49, 30.8676, 66.5295 }, { 1, char50, 38.7533, 77.6467 }, { 1, char51, 38.3333, 77.0467 }, { 2, char52, 37.2133, 80.1686 }, { 1, char53, 38.1933, 77.6867 }, { 1, char54, 34.1514, 73.8048 }, { 2, char55, 38.8933, 77.2267 }, { 1, char56, 38.9333, 77.6667 }, { 1, char57, 39.9333, 74.0648 }, { 2, char58, 14.0819, 26.2238 }, { 2, char59, 12.9619, 26.3038 }, { 1, char60, 41.1552, 81.6105 }, { 2, char61, 48.5571, 97.2543 }, { 1, char62, 40.8752, 81.6105 }, { 2, char63, 36.9914, 73.9029 }, { 2, char64, 34.9314, 74.3648 }, { 3, char65, 40.5952, 80.4905 }, { 3, char66, 44.7533, 83.6267 }, { 1, char67, 39.9933, 84.4886 }, { 2, char68, 45.2933, 85.2867 }, { 4, char69, 39.9914, 78.1848 }, { 3, char70, 39.9914, 78.7448 }, { 2, char71, 40.3933, 89.7686 }, { 3, char72, 44.7533, 89.0867 }, { 1, char73, 10.86, 21.3 }, { 1, char74, 31.0714, 59.999 }, { 3, char75, 44.6133, 79.3267 }, { 2, char76, 40.2514, 71.3229 }, { 4, char77, 48.9552, 97.2105 }, { 3, char78, 44.4733, 88.8067 }, { 1, char79, 44.3352, 88.8305 }, { 2, char80, 45.4333, 85.6667 }, { 2, char81, 43.3952, 88.0905 }, { 3, char82, 45.0133, 82.3667 }, { 1, char83, 41.3333, 80.8267 }, { 2, char84, 35.6933, 71.9467 }, { 1, char85, 44.8733, 89.4867 }, { 2, char86, 40.4552, 81.6105 }, { 4, char87, 49.839, 100.518 }, { 2, char88, 35.8333, 72.3667 }, { 2, char89, 39.6152, 79.6505 }, { 3, char90, 35.8333, 73.7467 }, { 4, char91, 22.0657, 46.1133 }, { 1, char92, 39.1733, 78.2067 }, { 4, char93, 23.4876, 46.3933 }, { 2, char94, 44.0752, 90.2305 }, { 1, char95, 51.281, 104.062 }, { 2, char96, 42.5457, 83.5714 }, { 2, char97, 35.2514, 66.6029 }, { 2, char98, 37.3314, 70.4629 }, { 1, char99, 34.0914, 68.9229 }, { 2, char100, 33.2114, 70.2629 }, { 1, char101, 34.2914, 68.5229 }, { 2, char102, 14.9657, 38.6552 }, { 2, char103, 33.9314, 70.9829 }, { 2, char104, 33.4095, 71.021 }, { 2, char105, 14.7819, 28.8638 }, { 2, char106, 17.3876, 36.2314 }, { 3, char107, 33.4095, 62.521 }, { 1, char108, 10.02, 19.34 }, { 3, char109, 61.981, 123.962 }, { 2, char110, 32.9895, 70.881 }, { 1, char111, 33.5514, 71.7448 }, { 2, char112, 38.0314, 70.8029 }, { 2, char113, 33.4114, 70.7429 }, { 2, char114, 23.7457, 49.4952 }, { 1, char115, 28.5095, 62.321 }, { 2, char116, 14.8257, 39.3152 }, { 2, char117, 33.2695, 71.161 }, { 2, char118, 30.3714, 60.6029 }, { 4, char119, 40.5952, 80.4905 }, { 2, char120, 25.4695, 56.401 }, { 2, char121, 35.1333, 66.0648 }, { 3, char122, 28.2495, 61.821 }, { 3, char123, 21.6657, 41.6295 }, { 1, char124, 11.54, 23.78 }, { 3, char125, 18.7038, 41.4695 }, { 2, char126, 45.7771, 91.2743 }, { 2, char127, 33.3333, 66.6667 }, }; static StrokeFontRec glutStrokeRoman = { "Roman", 128, chars, 119.048, -33.3333 }; xscreensaver-5.36/hacks/glx/marching.h000644 000767 000024 00000003766 12701612217 017775 0ustar00jwzstaff000000 000000 /* xscreensaver, Copyright (c) 2002 Jamie Zawinski * Utility functions to create "marching cubes" meshes from 3d fields. * * 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. */ #ifndef __MARCHING_H__ #define __MARCHING_H__ /* Given a function capable of generating a value at any XYZ position, creates OpenGL faces for the solids defined. init_fn is called at the beginning for initial, and returns an object. free_fn is called at the end. compute_fn is called for each XYZ in the specified grid, and returns the double value of that coordinate. If smoothing is on, then compute_fn will also be called twice more for each emitted vertex, in order to calculate vertex normals (so don't assume it will only be called with values falling on the grid boundaries.) Points are inside an object if the are less than `isolevel', and outside otherwise. If polygon_count is specified, the number of faces generated will be returned there. */ extern void marching_cubes (int grid_size, /* density of the mesh */ double isolevel, /* cutoff point for "in" versus "out" */ int wireframe_p, /* wireframe, or solid */ int smooth_p, /* smooth, or faceted */ void * (*init_fn) (double grid_size, void *closure1), double (*compute_fn) (double x, double y, double z, void *closure2), void (*free_fn) (void *closure2), void *closure1, unsigned long *polygon_count); #endif /* __MARCHING_H__ */ xscreensaver-5.36/hacks/glx/rotator.h000644 000767 000024 00000004545 12701612217 017673 0ustar00jwzstaff000000 000000 /* xscreensaver, Copyright (c) 1998-2002 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. */ #ifndef __ROTATOR_H__ #define __ROTATOR_H__ typedef struct rotator rotator; /* Returns a rotator object, which encapsulates rotation and motion state. spin_[xyz]_speed indicates the relative speed of rotation. Specify 0 if you don't want any rotation around that axis. spin_accel specifies a scaling factor for the acceleration that is randomly applied to spin: if you want the speed to change faster, make this > 1. wander_speed indicates the relative speed through space. If randomize_initial_state_p is true, then the initial position and rotation will be randomized (even if the spin speeds are 0.) If it is false, then all values will be initially zeroed. */ extern rotator *make_rotator (double spin_x_speed, double spin_y_speed, double spin_z_speed, double spin_accel, double wander_speed, int randomize_initial_state_p); /* Rotates one step, and returns the new rotation values. x, y, and z range from 0.0-1.0, the fraction through the circle (*not* radians or degrees!) If `update_p' is non-zero, then (maybe) rotate first. */ extern void get_rotation (rotator *rot, double *x_ret, double *y_ret, double *z_ret, int update_p); /* Moves one step, and returns the new position values. x, y, and z range from 0.0-1.0, the fraction through space: scale those values as needed. If `update_p' is non-zero, then (maybe) move first. */ extern void get_position (rotator *rot, double *x_ret, double *y_ret, double *z_ret, int update_p); /* Destroys and frees a `rotator' object. */ extern void free_rotator (rotator *r); #endif /* __ROTATOR_H__ */ xscreensaver-5.36/hacks/glx/trackball.h000644 000767 000024 00000006400 12701612217 020130 0ustar00jwzstaff000000 000000 /* * (c) Copyright 1993, 1994, Silicon Graphics, Inc. * ALL RIGHTS RESERVED * Permission to use, copy, modify, and distribute this software for * any purpose and without fee is hereby granted, provided that the above * copyright notice appear in all copies and that both the copyright notice * and this permission notice appear in supporting documentation, and that * the name of Silicon Graphics, Inc. not be used in advertising * or publicity pertaining to distribution of the software without specific, * written prior permission. * * THE MATERIAL EMBODIED ON THIS SOFTWARE IS PROVIDED TO YOU "AS-IS" * AND WITHOUT WARRANTY OF ANY KIND, EXPRESS, IMPLIED OR OTHERWISE, * INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY OR * FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL SILICON * GRAPHICS, INC. BE LIABLE TO YOU OR ANYONE ELSE FOR ANY DIRECT, * SPECIAL, INCIDENTAL, INDIRECT OR CONSEQUENTIAL DAMAGES OF ANY * KIND, OR ANY DAMAGES WHATSOEVER, INCLUDING WITHOUT LIMITATION, * LOSS OF PROFIT, LOSS OF USE, SAVINGS OR REVENUE, OR THE CLAIMS OF * THIRD PARTIES, WHETHER OR NOT SILICON GRAPHICS, INC. HAS BEEN * ADVISED OF THE POSSIBILITY OF SUCH LOSS, HOWEVER CAUSED AND ON * ANY THEORY OF LIABILITY, ARISING OUT OF OR IN CONNECTION WITH THE * POSSESSION, USE OR PERFORMANCE OF THIS SOFTWARE. * * US Government Users Restricted Rights * Use, duplication, or disclosure by the Government is subject to * restrictions set forth in FAR 52.227.19(c)(2) or subparagraph * (c)(1)(ii) of the Rights in Technical Data and Computer Software * clause at DFARS 252.227-7013 and/or in similar or successor * clauses in the FAR or the DOD or NASA FAR Supplement. * Unpublished-- rights reserved under the copyright laws of the * United States. Contractor/manufacturer is Silicon Graphics, * Inc., 2011 N. Shoreline Blvd., Mountain View, CA 94039-7311. * * OpenGL(TM) is a trademark of Silicon Graphics, Inc. */ /* * trackball.h * A virtual trackball implementation * Written by Gavin Bell for Silicon Graphics, November 1988. */ #ifndef __TRACKBALL_H__ #define __TRACKBALL_H__ /* * Pass the x and y coordinates of the last and current positions of * the mouse, scaled so they are from (-1.0 ... 1.0). * * The resulting rotation is returned as a quaternion rotation in the * first paramater. */ void trackball(float q[4], float p1x, float p1y, float p2x, float p2y); /* * Given two quaternions, add them together to get a third quaternion. * Adding quaternions to get a compound rotation is analagous to adding * translations to get a compound translation. When incrementally * adding rotations, the first argument here should be the new * rotation, the second and third the total rotation (which will be * over-written with the resulting new total rotation). */ void add_quats(float *q1, float *q2, float *dest); /* * A useful function, builds a rotation matrix in Matrix based on * given quaternion. */ void build_rotmatrix(float m[4][4], float q[4]); /* * This function computes a quaternion based on an axis (defined by * 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]); */ #endif /* __TRACKBALL_H__ */ xscreensaver-5.36/hacks/glx/gltrackball.h000644 000767 000024 00000005533 12701612217 020461 0ustar00jwzstaff000000 000000 /* gltrackball, Copyright (c) 2002-2014 Jamie Zawinski * GL-flavored wrapper for trackball.c * * 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. */ #ifndef __GLTRACKBALL_H__ #define __GLTRACKBALL_H__ typedef struct trackball_state trackball_state; /* Returns a trackball_state object, which encapsulates the stuff necessary to make dragging the mouse on the window of a GL program do the right thing. */ extern trackball_state *gltrackball_init (int ignore_device_rotation_p); /* 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. */ extern void gltrackball_start (trackball_state *, int x, int y, int w, int h); /* Track the mouse: Call this each time the mouse moves with the button down. x and y are the new mouse position relative to the window. w and h are the size of the window. */ extern void gltrackball_track (trackball_state *, int x, int y, int w, int h); /* Stop tracking the mouse: Call this when the mouse button goes up. */ extern void gltrackball_stop (trackball_state *); /* Execute the rotations current encapsulated in the trackball_state: this does something analagous to glRotatef(). */ extern void gltrackball_rotate (trackball_state *); /* Call this when a mouse-wheel click is detected. Clicks act like horizontal or vertical drags. Percent is the length of the drag as a percentage of the screen size. Button is 'Button4' or 'Button5' (for the vertical wheel) or 'Button5' or 'Button6' (for the horizontal wheel). If `flip_p' is true, swap the horizontal and vertical axes. */ void gltrackball_mousewheel (trackball_state *ts, int button, int percent, int flip_p); /* Return the quaternion encapsulated by the trackball state. */ extern void gltrackball_get_quaternion (trackball_state *ts, float q[4]); /* Reset the trackball to the default unrotated state. */ extern void gltrackball_reset (trackball_state *ts); /* A utility function for event-handler functions: Handles the various motion and click events related to trackballs. Returns True if the event was handled. */ extern Bool gltrackball_event_handler (XEvent *, trackball_state *, int window_width, int window_height, Bool *button_down_p); #endif /* __GLTRACKBALL_H__ */ xscreensaver-5.36/hacks/glx/chessmodels.h000644 000767 000024 00000002572 12701612217 020510 0ustar00jwzstaff000000 000000 /* * models for the xss chess screensavers * hacked from: * * glChess - A 3D chess interface * * Copyright (C) 2006 John-Paul Gignac * * Copyright (C) 2002 Robert Ancell * Michael Duelli * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ /* ugggggggly */ #define PIECES 7 #define NONE 0 #define KING 1 #define QUEEN 2 #define BISHOP 3 #define KNIGHT 4 #define ROOK 5 #define PAWN 6 #define BKING 8 #define BQUEEN 9 #define BBISHOP 10 #define BKNIGHT 11 #define BROOK 12 #define BPAWN 13 extern void chessmodels_gen_lists( int classic, int poly_count[PIECES]); xscreensaver-5.36/hacks/glx/chessgames.h000644 000767 000024 00000022737 12701612217 020326 0ustar00jwzstaff000000 000000 /* * endgame -- plays through a chess game ending. enjoy. * * Copyright (C) 2002 Blair Tennessy (tennessy@cs.ubc.ca) * * 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. */ #ifndef __CHESSGAMES_H__ #define __CHESSGAMES_H__ /** structure for a chess game */ typedef struct { /** original board configuration */ int board[BOARDSIZE][BOARDSIZE]; /** total moves */ int movecount; /** moves in game. this is a slight hack: moves are encoded in integer pairs (x,y). the first pair, _from_, determines the piece to move. the second pair, _to_, determines where to move. in case _to_ is held by another piece, that piece is taken. (see drawTakePiece(), draw_chess()) in case the move promotes a pawn, we assume a queening. (see drawMovingPiece()) what's lacking? castling, en passant, under-promotions. */ int moves[40][4]; } ChessGame; #define GAMES 7 static ChessGame games[GAMES] = { /** game 1: E. N. Somov-Nasimovitsch White to play and win. "Zadachi I Etiudi" 1928 */ { { { 0, 0, 0, 0, 0, BKING, 0, 0}, { BPAWN, 0, BPAWN, 0, BPAWN, 0, 0, 0}, { 0, 0, BPAWN, 0, BPAWN, 0, 0, KNIGHT}, { PAWN, 0, ROOK, 0, 0, 0, 0, 0}, { PAWN, 0, 0, 0, KING, PAWN, 0, 0}, { 0, 0, 0, 0, 0, 0, 0, 0}, { BPAWN, 0, 0, 0, 0, 0, 0, PAWN}, { BBISHOP,0, 0, 0, 0, 0, 0, 0}, }, 24, { {3, 2, 6, 2}, {7, 0, 6, 1}, {6, 2, 6, 6}, {0, 5, 0, 4}, {6, 6, 0, 6}, {0, 4, 1, 3}, {2, 7, 1, 5}, {2, 2, 3, 2}, {0, 6, 0, 3}, {1, 3, 2, 2}, {0, 3, 6, 3}, {3, 2, 4, 2}, /* pawn to bishop 5 */ {1, 5, 0, 3}, /* check */ {2, 2, 3, 2}, {0, 3, 2, 4}, /* takes pawn */ {3, 2, 2, 2}, {2, 4, 0, 3}, {2, 2, 3, 2}, {6, 3, 6, 1}, /* rook takes bishop */ {6, 0, 7, 0}, {6, 1, 3, 1}, {3, 2, 2, 3}, {3, 1, 3, 3}, {0, 0, 2, 3}, } }, /** game 2: K. A. L. Kubbel White to play and win. "Chess in the USSR" 1936 */ { { { 0, 0, 0, 0, 0, 0, 0, 0}, { 0, 0, 0, 0, 0, 0, 0, BPAWN}, { 0, 0, 0, 0, BPAWN, KING, 0, BKING}, { 0, 0, 0, 0, 0, ROOK, 0, 0}, { 0, 0, 0, 0, 0, 0, 0, 0}, { 0,BBISHOP, 0, 0, BROOK, 0, PAWN, 0}, { 0, 0, 0, 0, 0, 0, 0, 0}, { 0, 0, 0, 0, 0,BISHOP, 0, 0}, }, 10, { {3, 5, 6, 5}, {5, 1, 7, 3}, {6, 5, 6, 7}, /* check */ {7, 3, 3, 7}, {7, 5, 6, 4}, {5, 4, 6, 4}, {5, 6, 4, 6}, /* ! */ {6, 4, 6, 7}, {4, 6, 3, 6}, {0, 0, 2, 7} } }, /** game 3: J. Hasek White to play and win. "Le Strategie" 1929 */ { { { 0, 0, 0, KNIGHT, 0, 0, 0, KNIGHT}, { 0, KING, BPAWN, BPAWN, 0, 0, 0, 0}, { 0, 0, 0, 0, 0, 0, 0, 0}, { 0, BKING, 0, 0, 0, 0, 0, 0}, { 0, PAWN, 0, 0, 0, BPAWN, 0, 0}, { PAWN, 0, PAWN, 0, 0, 0, 0, 0}, { 0, 0, 0, 0, 0, 0, 0, 0}, { 0, 0, 0, 0, 0, 0, 0, 0}, }, 11, { {0, 3, 2, 2}, {1, 3, 2, 2}, {0, 7, 2, 6}, {4, 5, 5, 5}, {2, 6, 3, 4}, {5, 5, 6, 5}, {3, 4, 5, 3}, /* ! */ {6, 5, 7, 5}, {5, 3, 6, 1}, {0, 0, 0, 0}, /* mull it over... */ {0, 0, 3, 1} } }, /** game 4: M.B. Newman White to play and win. "Chess Amateur" 1913 */ { { { 0, 0, 0, 0, BQUEEN, 0, 0, 0}, {BKNIGHT, 0, 0, 0, 0, 0, 0, 0}, { 0, 0, 0, 0, 0, 0, 0, 0}, { 0, 0, 0, 0, 0, 0, 0, PAWN}, { BKING, 0, BISHOP, 0, KNIGHT, 0, 0, 0}, { PAWN, 0, 0, 0, KNIGHT, 0, 0, 0}, { 0, 0, 0, 0, 0, 0, 0, 0}, { KING, 0, 0, 0, 0, 0, 0, 0}, }, 15, { {4, 2, 3, 1}, {0, 4, 3, 1}, /* queen wins bishop */ {4, 4, 5, 2}, {4, 0, 5, 0}, /* king takes pawn */ {5, 2, 3, 1}, /* knight takes queen, check */ {1, 0, 3, 1}, /* knight takes knight */ {3, 7, 2, 7}, /* pawn advances */ {3, 1, 2, 3}, {5, 4, 4, 2}, {2, 3, 4, 2}, {2, 7, 1, 7}, /* pawn advances */ {4, 2, 2, 3}, {1, 7, 0, 7}, {0, 0, 0, 0}, {0, 0, 5, 0} } }, /** game 5: V.A. Korolikov White to play and win First Prize - "Truda" 1935 */ { { { 0, 0, BISHOP, 0, 0, 0, 0, 0}, { BPAWN, ROOK, 0, 0, 0, 0, 0, 0}, { 0, 0, BPAWN, PAWN, 0, BKING, 0, 0}, { 0, 0, 0, 0, 0, 0, 0, 0}, { 0, 0, 0, 0, 0, 0, KING, BBISHOP}, { 0, 0, 0, 0, BPAWN, 0, PAWN, 0}, { 0, 0, 0, 0, 0, BPAWN, 0, 0}, { 0, 0, 0, 0, 0, 0, 0, 0}, }, 21, { {2, 3, 1, 3}, /* pawn to q7 */ {2, 5, 1, 4}, /* cover with king */ {1, 1, 0, 1}, {4, 7, 5, 6}, /* bishop takes pawn */ {0, 1, 0, 0}, /* r - r8 */ {6, 5, 7, 5}, /* queened */ {1, 3, 0, 3}, /* white pawn promoted */ {1, 4, 0, 3}, /* king takes queen */ {0, 2, 2, 0}, /* discovered check */ {5, 6, 0, 1}, /* pull back bishop */ {2, 0, 7, 5}, /* bishop takes queen */ {0, 3, 1, 2}, {7, 5, 2, 0}, /* save rook */ {5, 4, 6, 4}, {2, 0, 6, 4}, /* bishop takes pawn */ {1, 2, 1, 1}, /* king moves in */ {6, 4, 5, 5}, {1, 1, 0, 0}, {5, 5, 2, 2}, {0, 0, 0, 0}, {0, 0, 0, 0} } }, /** game 6: T.B. Gorgiev White to play and win First Prize - "64" 1929 */ { { { 0, 0, 0, 0, 0, 0, KNIGHT, 0}, { BKNIGHT, 0, 0, 0, 0, 0, 0, 0}, { 0, 0, 0, BKING, BKNIGHT, 0, 0, 0}, { KING, 0, 0, 0, 0, 0, 0, 0}, { 0, 0, 0, 0, 0, 0, KNIGHT, 0}, { 0, 0, 0, 0, 0, 0, 0, 0}, { 0, 0, 0, 0, 0, 0, 0, 0}, { 0, 0, 0, 0, BISHOP, 0, 0, 0}, }, 13, { {3, 0, 2, 1}, /* king on move */ {1, 0, 0, 2}, /* check */ {2, 1, 1, 1}, {0, 2, 1, 4}, /* knight moves on */ {7, 4, 5, 6}, /* bishop puts king in check */ {2, 3, 1, 3}, /* king moves back */ {0, 6, 2, 5}, /* knight moves in, check */ {1, 3, 0, 3}, /* king moves back queen */ {5, 6, 1, 2}, /* bishop - b7 ch!! */ {2, 4, 1, 2}, /* black knight takes bishop */ {4, 6, 3, 4}, /* knight to k5 */ {0, 0, 0, 0}, /* mate */ {0, 0, 0, 0} } }, /** game 7: K. A. L. Kubbel White to play and win "Schachmatny Listok" 1922 */ { { { 0, KNIGHT, 0, 0, 0, 0, 0, 0}, { 0, 0, 0, 0, 0, 0, 0, 0}, { KING, 0, 0, 0, 0, 0, 0, 0}, { 0, 0, 0, BKING, 0, 0, 0, 0}, { 0, 0, 0, BPAWN, 0, 0, 0, BISHOP}, { BPAWN, 0, 0, 0, 0, 0, 0, 0}, { 0, 0, PAWN, PAWN, 0, 0, 0, 0}, { 0, 0, 0, 0, 0, 0, 0, 0}, }, 12, { {0, 1, 2, 2}, /* kt-b6 */ {3, 3, 2, 2}, /* k x kt */ {4, 7, 2, 5}, /* b-b6 */ {2, 2, 3, 3}, /* king back to original position */ {6, 3, 5, 3}, /* p-q3! */ {5, 0, 6, 0}, /* p-r7 */ {6, 2, 4, 2}, /* p-b4ch */ {3, 3, 3, 2}, /* king moves, black cannot capture in passing */ {2, 0, 1, 1}, /* k-kt7! */ {6, 0, 7, 0}, /* promo */ {2, 5, 1, 4}, /* mate */ {0, 0, 3, 2}, } }, }; #endif /* __CHESSGAMES_H__ */ xscreensaver-5.36/hacks/glx/gllist.h000644 000767 000024 00000002157 12701612217 017474 0ustar00jwzstaff000000 000000 /* xscreensaver, Copyright (c) 1998-2014 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. */ #ifndef __GLLIST_H__ #define __GLLIST_H__ #ifdef HAVE_CONFIG_H # include "config.h" #endif /* HAVE_CONFIG_H */ #include #ifdef HAVE_COCOA #elif defined(HAVE_ANDROID) # include #else /* real X11 */ # include #endif #ifdef HAVE_JWZGLES # include "jwzgles.h" #endif /* HAVE_JWZGLES */ struct gllist { GLenum format; GLenum primitive; int points; const void *data; struct gllist *next; }; void renderList (const struct gllist *, int wire_p); void renderListNormals (const struct gllist *, GLfloat length, int facesp); #endif /* __GLLIST_H__ */ xscreensaver-5.36/hacks/glx/flurry.h000644 000767 000024 00000015771 12717747745 017555 0ustar00jwzstaff000000 000000 /* Copyright (c) 2002, Calum Robinson All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. * Neither the name of the author nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ /* -*- Mode: C; tab-width: 4 c-basic-offset: 4 indent-tabs-mode: t -*- */ /* flurry */ #ifndef __GLCODE__ #define __GLCODE__ #ifdef HAVE_CONFIG_H # include "config.h" #endif /* HAVE_CONFIG_H */ #ifndef HAVE_JWXYZ # include # include # include #endif #ifdef HAVE_JWZGLES # include "jwzgles.h" #endif /* HAVE_JWZGLES */ #include #include #include "yarandom.h" #include "rotator.h" #include "gltrackball.h" typedef struct _global_info_t global_info_t; typedef struct _flurry_info_t flurry_info_t; #define sqr(X) ((X) * (X)) #define PI 3.14159265358979323846f #define DEG2RAD(X) (PI*(X)/180.0) #define RAD2DEG(X) ((X)*180.0/PI) #define rnd() (frand(1.0)) /* fabs: Absolute function. */ /* #undef abs */ /* #define abs(a) ( (a) > 0 ? (a) : -(a) ) */ /* Force sign clamping to (-1;0;1) */ #define sgn(a) ((a)<0?-1:((a)?1:0)) /* used to compute the min and max of two expresions */ #define MIN_(a, b) (((a) < (b)) ? (a) : (b)) #define MAX_(a, b) (((a) > (b)) ? (a) : (b)) typedef union { float f[4]; #if 0 #if __VEC__ vector float v; #endif #endif /* 0 */ } floatToVector; typedef union { unsigned int i[4]; #if 0 #if __VEC__ vector unsigned int v; #endif #endif /* 0 */ } intToVector; typedef struct SmokeParticleV { floatToVector color[4]; floatToVector position[3]; floatToVector oldposition[3]; floatToVector delta[3]; intToVector dead; floatToVector time; intToVector animFrame; } SmokeParticleV; #define NUMSMOKEPARTICLES 3600 typedef struct SmokeV { SmokeParticleV p[NUMSMOKEPARTICLES/4]; int nextParticle; int nextSubParticle; float lastParticleTime; int firstTime; long frame; float old[3]; floatToVector seraphimVertices[NUMSMOKEPARTICLES*2+1]; floatToVector seraphimColors[NUMSMOKEPARTICLES*4+1]; float seraphimTextures[NUMSMOKEPARTICLES*2*4]; } SmokeV; void InitSmoke(SmokeV *s); void UpdateSmoke_ScalarBase(global_info_t *global, flurry_info_t *flurry, SmokeV *s); #if 0 #ifdef __ppc__ void UpdateSmoke_ScalarFrsqrte(global_info_t *global, flurry_info_t *flurry, SmokeV *s); #endif #ifdef __VEC__ void UpdateSmoke_VectorBase(global_info_t *global, flurry_info_t *flurry, SmokeV *s); void UpdateSmoke_VectorUnrolled(global_info_t *global, flurry_info_t *flurry, SmokeV *s); #endif #endif /* 0 */ void DrawSmoke_Scalar(global_info_t *global, flurry_info_t *flurry, SmokeV *s, float); void DrawSmoke_Vector(global_info_t *global, flurry_info_t *flurry, SmokeV *s, float); typedef struct Star { float position[3]; float mystery; float rotSpeed; int ate; } Star; void UpdateStar(global_info_t *global, flurry_info_t *flurry, Star *s); void InitStar(Star *s); typedef struct Spark { float position[3]; int mystery; float delta[3]; float color[4]; } Spark; void UpdateSparkColour(global_info_t *info, flurry_info_t *flurry, Spark *s); void InitSpark(Spark *s); void UpdateSpark(global_info_t *info, flurry_info_t *flurry, Spark *s); void DrawSpark(global_info_t *info, flurry_info_t *flurry, Spark *s); /* #define FastDistance2D(x,y) hypot(x,y) */ /* UInt8 sys_glBPP=32; */ /* int SSMODE = FALSE; */ /* int currentVideoMode = 0; */ /* int cohesiveness = 7; */ /* int fieldStrength; */ /* int colorCoherence = 7; */ /* int fieldIncoherence = 0; */ /* int ifieldSpeed = 120; */ static inline float FastDistance2D(float x, float y) { /* this function computes the distance from 0,0 to x,y with ~3.5% error */ float mn; /* first compute the absolute value of x,y */ x = (x < 0.0f) ? -x : x; y = (y < 0.0f) ? -y : y; /* compute the minimum of x,y */ mn = x * * 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. */ #ifndef __POLYHEDRA_H__ #define __POLYHEDRA_H__ typedef struct { double x, y, z; } point; typedef struct { int color; int npoints; int *points; /* indexes into point list */ } face; typedef struct { int number; char *wythoff; char *name; char *dual; char *config; char *group; char *class; int nfaces; int logical_faces; int logical_vertices; int nedges; int npoints; int density; int chi; point *points; face *faces; } polyhedron; extern int construct_polyhedra (polyhedron ***polyhedra_ret); extern void free_polyhedron (polyhedron *p); #endif /* __POLYHEDRA_H__ */ xscreensaver-5.36/hacks/glx/normals.h000644 000767 000024 00000002543 12717747735 017675 0ustar00jwzstaff000000 000000 /* normals, Copyright (c) 2002-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. * * Compute normal vectors for arbitrary triangles. */ #ifndef __NORMALS_H__ #define __NORMALS_H__ #ifdef HAVE_CONFIG_H # include "config.h" #endif /* HAVE_CONFIG_H */ #ifndef HAVE_JWXYZ # include #endif #ifdef HAVE_ANDROID # include #endif #ifdef HAVE_JWZGLES # include "jwzgles.h" #endif /* HAVE_JWZGLES */ typedef struct { double x,y,z; } XYZ; /* Calculate the unit normal at p given two other points p1,p2 on the surface. The normal points in the direction of p1 crossproduct p2 */ extern XYZ calc_normal (XYZ p, XYZ p1, XYZ p2); /* Call glNormal3f() with a normal of the indicated triangle. */ extern void do_normal (GLfloat x1, GLfloat y1, GLfloat z1, GLfloat x2, GLfloat y2, GLfloat z2, GLfloat x3, GLfloat y3, GLfloat z3); #endif /* __NORMALS_H__ */ xscreensaver-5.36/hacks/glx/texfont.h000644 000767 000024 00000005163 12702670274 017675 0ustar00jwzstaff000000 000000 /* texfonts, Copyright (c) 2005-2016 Jamie Zawinski * Loads X11 fonts into textures for use with OpenGL. * * 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. */ #ifndef __TEXTURE_FONT_H__ #define __TEXTURE_FONT_H__ typedef struct texture_font_data texture_font_data; /* Loads the font named by the X resource "res" and returns a texture-font object. */ extern texture_font_data *load_texture_font (Display *, char *res); /* Bounding box of the multi-line string, in pixels, and overall ascent/descent of the font. */ extern void texture_string_metrics (texture_font_data *, const char *, XCharStruct *metrics_ret, int *ascent_ret, int *descent_ret); /* Draws the string in the scene at the origin. Newlines and tab stops are honored. Any numbers inside [] will be rendered as a subscript. Assumes the font has been loaded as with load_texture_font(). */ extern void print_texture_string (texture_font_data *, const char *); /* Draws the string on the window at the given pixel position. Newlines and tab stops are honored. Any numbers inside [] will be rendered as a subscript. Assumes the font has been loaded as with load_texture_font(). Position is 0 for center, 1 for top left, 2 for bottom left. */ void print_texture_label (Display *, texture_font_data *, int window_width, int window_height, int position, const char *string); /* Renders the given string into the prevailing texture. Returns the metrics of the text, and size of the texture. */ void string_to_texture (texture_font_data *, const char *, XCharStruct *extents_ret, int *tex_width_ret, int *tex_height_ret); /* Set the various OpenGL parameters for properly rendering things with a texture generated by string_to_texture(). */ void enable_texture_string_parameters (void); /* Releases the texture font. */ extern void free_texture_font (texture_font_data *); #ifdef HAVE_JWXYZ extern char *texfont_unicode_character_name (texture_font_data *, unsigned long uc); #endif #endif /* __TEXTURE_FONT_H__ */ xscreensaver-5.36/hacks/glx/tangram_shapes.h000644 000767 000024 00000001010 12701612217 021155 0ustar00jwzstaff000000 000000 #ifndef TANGRAM_SHAPES_H #define TANGRAM_SHAPES_H /* get_sm_tri_dl - Get small triangle Display List */ GLuint tangram_get_sm_tri_dl(int wire); /* get_lg_tri_dl - Get large triangle Display List */ GLuint tangram_get_lg_tri_dl(int wire); /* get_md_tri_dl - Get medium triangle Display List */ GLuint tangram_get_md_tri_dl(int wire); /* get_square_dl - Get square Display List */ GLuint tangram_get_square_dl(int wire); /* get_rhomboid_dl - Get rhomboid Display List */ GLuint tangram_get_rhomboid_dl(int wire); #endif xscreensaver-5.36/hacks/glx/sproingies.h000644 000767 000024 00000002145 12701612217 020355 0ustar00jwzstaff000000 000000 /*- * sproingies.c - Copyright 1996 by Ed Mackey, freely distributable. * * Permission to use, copy, modify, and distribute this software and its * documentation for any purpose and without fee is hereby granted, * provided that the above copyright notice appear in all copies and that * both that copyright notice and this permission notice appear in * supporting documentation. * * This file is provided AS IS with no warranties of any kind. The author * shall have no liability with respect to the infringement of copyrights, * trade secrets or any patents by this file or any part thereof. In no * event will the author be liable for any lost revenue or profits or * other special, indirect and consequential damages. * * Revision History: * See sproingiewrap.c */ extern void DisplaySproingies(int screen,int pause); extern void NextSproingieDisplay(int screen,int pause); extern void ReshapeSproingies(int w, int h); extern void CleanupSproingies(int screen); extern void InitSproingies(int wfmode, int grnd, int mspr, int smrtspr, int screen, int numscreens, int mono); xscreensaver-5.36/hacks/glx/extrusion.h000644 000767 000024 00000003344 12701612217 020235 0ustar00jwzstaff000000 000000 /* -*- Mode: C; tab-width: 4 -*- */ /* extrusion --- extrusion module for xscreensaver */ /*- * Permission to use, copy, modify, and distribute this software and its * documentation for any purpose and without fee is hereby granted, * provided that the above copyright notice appear in all copies and that * both that copyright notice and this permission notice appear in * supporting documentation. * * This file is provided AS IS with no warranties of any kind. The author * shall have no liability with respect to the infringement of copyrights, * trade secrets or any patents by this file or any part thereof. In no * event will the author be liable for any lost revenue or profits or * other special, indirect and consequential damages. */ #ifndef __XSCREENSAVER_EXTRUSION_H__ #define __XSCREENSAVER_EXTRUSION_H__ #ifdef HAVE_CONFIG_H # include #endif #ifdef HAVE_COCOA # include /* gle is included with GLUT on OSX */ #else /* !HAVE_COCOA */ # include # include # ifdef HAVE_GLE3 # include # else # include # endif #endif /* !HAVE_COCOA */ #ifdef HAVE_JWZGLES # include "jwzgles.h" #endif /* HAVE_JWZGLES */ extern void InitStuff_helix2(void); extern void DrawStuff_helix2(void); extern void InitStuff_helix3(void); extern void DrawStuff_helix3(void); extern void InitStuff_helix4(void); extern void DrawStuff_helix4(void); extern void InitStuff_joinoffset(void); extern void DrawStuff_joinoffset(void); extern void InitStuff_screw(void); extern void DrawStuff_screw(void); extern void InitStuff_taper(void); extern void DrawStuff_taper(void); extern void InitStuff_twistoid(void); extern void DrawStuff_twistoid(void); #endif /* __XSCREENSAVER_EXTRUSION_H__ */ xscreensaver-5.36/hacks/glx/glschool.h000644 000767 000024 00000001240 12701612217 020000 0ustar00jwzstaff000000 000000 /* glschool.h, Copyright (c) 2005-2006 David C. Lambert * * 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. */ #ifndef __GLSCHOOL_H__ #define __GLSCHOOL_H__ #include "glschool_alg.h" #include "glschool_gl.h" #endif /* __GLSCHOOL_H__ */ xscreensaver-5.36/hacks/glx/glschool_gl.h000644 000767 000024 00000003141 12710074263 020467 0ustar00jwzstaff000000 000000 /* glschool_gl.h, Copyright (c) 2005-2006 David C. Lambert * * 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. */ #ifndef __GLSCHOOL_GL_H__ #define __GLSCHOOL_GL_H__ #ifdef HAVE_CONFIG_H # include "config.h" #endif /* HAVE_CONFIG_H */ #ifdef HAVE_JWXYZ # include "jwxyz.h" # ifndef HAVE_JWZGLES # include # endif #else # include # include # include #endif #ifdef HAVE_ANDROID #include #endif #ifdef HAVE_JWZGLES # include "jwzgles.h" #endif /* HAVE_JWZGLES */ #include "glschool_alg.h" 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__ */ xscreensaver-5.36/hacks/glx/glschool_alg.h000644 000767 000024 00000010147 12701612217 020631 0ustar00jwzstaff000000 000000 /* glschool_alg.h, Copyright (c) 2005-2006 David C. Lambert * * 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. */ #ifndef __GLSCHOOL_ALG_H__ #define __GLSCHOOL_ALG_H__ typedef struct { double mins[3]; double maxs[3]; } BBox; #define BBOX_XMIN(b) ((b)->mins[0]) #define BBOX_YMIN(b) ((b)->mins[1]) #define BBOX_ZMIN(b) ((b)->mins[2]) #define BBOX_MINS(b) ((b)->mins) #define BBOX_IMIN(b, i) ((b)->mins[(i)]) #define BBOX_XMAX(b) ((b)->maxs[0]) #define BBOX_YMAX(b) ((b)->maxs[1]) #define BBOX_ZMAX(b) ((b)->maxs[2]) #define BBOX_MAXS(b) ((b)->maxs) #define BBOX_IMAX(b, i) ((b)->maxs[(i)]) #define BBOX_IMID(b, i) (((b)->maxs[(i)] + (b)->mins[(i)])/2.0) #define BBOX_IRANGE(b, i) ((b)->maxs[(i)] - (b)->mins[(i)]) typedef struct { double pos[3]; double vel[3]; double accel[3]; double oldVel[3]; double magic[3]; double avgVel[3]; } Fish; #define FISH_POS(f) ((f)->pos) #define FISH_X(f) ((f)->pos[0]) #define FISH_Y(f) ((f)->pos[1]) #define FISH_Z(f) ((f)->pos[2]) #define FISH_VEL(f) ((f)->vel) #define FISH_VX(f) ((f)->vel[0]) #define FISH_VY(f) ((f)->vel[1]) #define FISH_VZ(f) ((f)->vel[2]) #define FISH_ACC(f) ((f)->accel) #define FISH_MAGIC(f) ((f)->magic) #define FISH_OLDVEL(f) ((f)->oldVel) #define FISH_AVGVEL(f) ((f)->avgVel) #define FISH_IPOS(f, i) ((f)->pos[(i)]) #define FISH_IVEL(f, i) ((f)->vel[(i)]) #define FISH_IACC(f, i) ((f)->accel[(i)]) #define FISH_IMAGIC(f, i) ((f)->magic[(i)]) #define FISH_IOLDVEL(f, i) ((f)->oldVel[(i)]) #define FISH_IAVGVEL(f, i) ((f)->avgVel[(i)]) typedef struct { int nFish; double maxVel; double minVel; double distExp; double momentum; double accLimit; double minRadius; double minRadiusExp; double avoidFact; double matchFact; double centerFact; double targetFact; double distComp; double goal[3]; double boxMids[3]; double boxRanges[3]; BBox theBox; Fish *theFish; } School; #define SCHOOL_NFISH(s) ((s)->nFish) #define SCHOOL_MAXVEL(s) ((s)->maxVel) #define SCHOOL_MINVEL(s) ((s)->minVel) #define SCHOOL_DISTEXP(s) ((s)->distExp) #define SCHOOL_MOMENTUM(s) ((s)->momentum) #define SCHOOL_ACCLIMIT(s) ((s)->accLimit) #define SCHOOL_MINRADIUS(s) ((s)->minRadius) #define SCHOOL_MINRADIUSEXP(s) ((s)->minRadiusExp) #define SCHOOL_MATCHFACT(s) ((s)->matchFact) #define SCHOOL_AVOIDFACT(s) ((s)->avoidFact) #define SCHOOL_CENTERFACT(s) ((s)->centerFact) #define SCHOOL_TARGETFACT(s) ((s)->targetFact) #define SCHOOL_DISTCOMP(s) ((s)->distComp) #define SCHOOL_GOAL(s) ((s)->goal) #define SCHOOL_IGOAL(s,i) ((s)->goal[(i)]) #define SCHOOL_BBMINS(s) ((s)->bbox.mins) #define SCHOOL_BBMAXS(s) ((s)->bbox.maxs) #define SCHOOL_BBMIDS(s) ((s)->boxMids) #define SCHOOL_IMID(s,i) ((s)->boxMids[(i)]) #define SCHOOL_BBRANGES(s) ((s)->boxRanges) #define SCHOOL_IRANGE(s,i) ((s)->boxRanges[(i)]) #define SCHOOL_BBOX(s) ((s)->theBox) #define SCHOOL_FISHES(s) ((s)->theFish) #define SCHOOL_IFISH(s,i) ((s)->theFish[i]) extern void glschool_initFishes(School *); extern void glschool_initFish(Fish *, double *, double *); extern void glschool_applyMovements(School *); /* extern void applyFishMovements(Fish *, BBox *, 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 glschool_newGoal(School *); extern void glschool_setBBox(School *, double, double, double, 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__ */ xscreensaver-5.36/hacks/glx/topblock.h000600 000767 000024 00000001702 12701612217 017776 0ustar00jwzstaff000000 000000 /* topblock - openGL based hack */ static void buildCarpet(ModeInfo *); static void polygonPlane(int, int, int, int, int ,int); static void buildBlock(ModeInfo *); static void generateNewBlock(ModeInfo *); static void followBlock(ModeInfo *); static void buildBlobBlock(ModeInfo *); static double quadrantCorrection(double,int,int,int,int); /* this structure holds all the attributes about a block */ typedef struct blockNode { int color; /* indexed */ int rotation; /* indexed: 0=S-N, 1=W-E, 2=N-S, 3=E-W */ GLfloat height; GLfloat x; GLfloat y; int falling; struct blockNode *next; } NODE; /* some handy macros and definitions */ #define blockHeight 1.49f #define getHeight(a) (a * blockHeight) #define getOrientation(a) (a * 90) #define blockWidth 2.0f #define getLocation(a) (a * blockWidth) #define TOLERANCE 0.1f #define cylSize 0.333334f #define uddSize 0.4f #define singleThick 0.29 /* defines the thickness of the carpet */ xscreensaver-5.36/hacks/glx/involute.h000644 000767 000024 00000006102 12701612217 020035 0ustar00jwzstaff000000 000000 /* involute, Copyright (c) 2004-2014 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. * * Utilities for rendering OpenGL gears with involute teeth. */ #ifndef __GEAR_INVOLUTE_H__ #define __GEAR_INVOLUTE_H__ typedef struct { unsigned long id; /* unique name */ double x, y, z; /* position */ double r; /* radius of the gear, at middle of teeth */ double th; /* rotation (degrees) */ GLint nteeth; /* how many teeth */ double tooth_w, tooth_h; /* size of teeth */ double tooth_slope; /* 0 for normal right-angle gear; 1 = 45 deg. */ double inner_r; /* radius of the (larger) inside hole */ double inner_r2; /* radius of the (smaller) inside hole, if any */ double inner_r3; /* yet another */ double thickness; /* height of the edge */ double thickness2; /* height of the (smaller) inside disc if any */ double thickness3; /* yet another */ int spokes; /* how many spokes inside, if any */ int nubs; /* how many little nubbly bits, if any */ double spoke_thickness; /* spoke versus hole */ double wobble; /* factory defect! */ int motion_blur_p; /* whether it's spinning too fast to draw */ int polygons; /* how many polys in this gear */ double ratio; /* gearing ratio with previous gears */ double rpm; /* approximate revolutions per minute */ Bool inverted_p; /* whether this gear has teeth on the inside */ Bool base_p; /* whether this gear begins a new train */ int coax_p; /* whether this is one of a pair of bound gears. 1 for first, 2 for second. */ double coax_displacement; /* distance between gear planes */ double coax_thickness; /* thickness of the other gear in the pair */ enum { INVOLUTE_SMALL, INVOLUTE_MEDIUM, INVOLUTE_LARGE, INVOLUTE_HUGE } size; /* Controls complexity of mesh. */ GLfloat color[4]; GLfloat color2[4]; GLuint dlist; } gear; /* Render one gear, unrotated at 0,0. Returns the number of polygons. */ extern int draw_involute_gear (gear *g, Bool wire_p); /* Draws a much simpler representation of a gear. Returns the number of polygons. */ extern int draw_involute_schematic (gear *g, Bool wire_p); /* Which of the gear's inside rings is the biggest? */ extern int involute_biggest_ring (gear *g, double *posP, double *sizeP, double *heightP); #endif /* __GEAR_INVOLUTE_H__ */ xscreensaver-5.36/hacks/glx/teapot.h000644 000767 000024 00000000171 12701612217 017464 0ustar00jwzstaff000000 000000 #ifndef __TEAPOT_H__ #define __TEAPOT_H__ extern int unit_teapot (int density, int wire_p); #endif /* __TEAPOT_H__ */ xscreensaver-5.36/hacks/glx/sonar.h000644 000767 000024 00000005653 12701612217 017324 0ustar00jwzstaff000000 000000 /* 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 * 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. */ #ifndef __SONAR_XSCREENSAVER_H__ #define __SONAR_XSCREENSAVER_H__ typedef struct sonar_sensor_data sonar_sensor_data; typedef struct sonar_bogie sonar_bogie; struct sonar_bogie { void *closure; char *name; /* bogie name, e.g., host name */ char *desc; /* second line of text, e.g., ping time */ double r; /* distance, 0 - 1.0 */ double th; /* heading, 0 - 2 pi */ double ttl; /* time to live, 0 - 2 pi */ sonar_bogie *next; /* next one in the list */ }; struct sonar_sensor_data { void *closure; /* Called frequently (every time the sweep moves). Returns a list of new bogies to be added to the display list once the sweep comes around to their position. */ sonar_bogie *(*scan_cb) (sonar_sensor_data *); /* Called when a bogie is freed, to free bogie->closure */ void (*free_bogie_cb) (sonar_sensor_data *, void *closure); /* Called at exit, to free ssd->closure */ void (*free_data_cb) (sonar_sensor_data *, void *closure); }; /* frees bogie and its contents, including calling the free_bogie_cb. */ 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 *sonar_copy_bogie (sonar_sensor_data *, const sonar_bogie *); /* Set up and return sensor state for ICMP pings. */ extern sonar_sensor_data *sonar_init_ping (Display *dpy, char **error_ret, 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__ */ xscreensaver-5.36/hacks/glx/dropshadow.h000644 000767 000024 00000002312 12717744467 020365 0ustar00jwzstaff000000 000000 /* dropshadow.h, Copyright (c) 2009 Jens Kilian * * 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. */ #ifndef __DROPSHADOW_H__ #define __DROPSHADOW_H__ #ifdef HAVE_CONFIG_H # include "config.h" #endif /* HAVE_CONFIG_H */ #include "xlockmoreI.h" /* Initialize drop shadow texture, return a texture ID. */ GLuint init_drop_shadow(void); /* Draw a drop shadow around a rectangle. t Texture ID (as returned by init_drop_shadow()). x, y, z; w, h Position (left bottom), depth and size of rectangle. r Radius of drop shadow. The shadow will be drawn using the current color. */ void draw_drop_shadow (GLuint t, GLfloat x, GLfloat y, GLfloat z, GLfloat w, GLfloat h, GLfloat r); #endif /* __DROPSHADOW_H__ */ xscreensaver-5.36/hacks/glx/starwars.h000664 000767 000024 00000014367 12753474632 020072 0ustar00jwzstaff000000 000000 #define DEF_TEXT \ "Episode IV\\n" \ "\\n" \ "STAR WARS: A NEW HOPE\\n" \ "\\n" \ "It is a period of Civil War.\\n" \ "Rebel Spaceships, striking\\n" \ "from a hidden base, have won\\n" \ "their first victory against\\n" \ "the evil Galactic Empire.\\n" \ "\\n" \ "During the battle, Rebel\\n" \ "spies managed to steal secret\\n" \ "plans to the Empire's\\n" \ "ultimate weapon, the DEATH\\n" \ "STAR, an armored space\\n" \ "station with enough power to\\n" \ "destroy an entire planet.\\n" \ "\\n" \ "Pursued by the Empire's\\n" \ "sinister agents, Princess\\n" \ "Leia races home aboard her\\n" \ "starship, custodian of the\\n" \ "stolen plans that can save\\n" \ "her people and restore\\n" \ "freedom to the galaxy...\\n" \ "\\n" \ "\\n" \ "\\n" \ "\\n" \ "\\n" \ "\\n" \ "\\n" \ "\\n" \ "\\n" \ "\\n" \ "\\n" \ "\\n" \ "\\n" \ "\\n" \ "\\n" \ "\\n" \ "\\n" \ "\\n" \ "\\n" \ "\\n" \ "\\n" \ "\\n" \ "\\n" \ "\\n" \ "\\n" \ "\\n" \ "\\n" \ "\\n" \ "Episode V\\n" \ "\\n" \ "THE EMPIRE STRIKES BACK\\n" \ "\\n" \ "It is a dark time for the\\n" \ "Rebellion. Although the Death\\n" \ "Star has been destroyed,\\n" \ "Imperial troops have driven the\\n" \ "Rebel forces from their hidden\\n" \ "base and pursued them across\\n" \ "the galaxy.\\n" \ "\\n" \ "Evading the dreaded Imperial\\n" \ "Starfleet, a group of freedom\\n" \ "fighters led by Luke Skywalker\\n" \ "has established a new secret\\n" \ "base on the remote ice world\\n" \ "of Hoth.\\n" \ "\\n" \ "The evil lord Darth Vader,\\n" \ "obsessed with finding young\\n" \ "Skywalker, has dispatched\\n" \ "thousands of remote probes into\\n" \ "the far reaches of space....\\n" \ "\\n" \ "\\n" \ "\\n" \ "\\n" \ "\\n" \ "\\n" \ "\\n" \ "\\n" \ "\\n" \ "\\n" \ "\\n" \ "\\n" \ "\\n" \ "\\n" \ "\\n" \ "\\n" \ "\\n" \ "\\n" \ "\\n" \ "\\n" \ "\\n" \ "\\n" \ "\\n" \ "\\n" \ "\\n" \ "\\n" \ "\\n" \ "\\n" \ "Episode VI\\n" \ "\\n" \ "RETURN OF THE JEDI\\n" \ "\\n" \ "Luke Skywalker has returned to\\n" \ "his home planet of Tatooine in\\n" \ "an attempt to rescue his\\n" \ "friend Han Solo from the\\n" \ "clutches of the vile gangster\\n" \ "Jabba the Hutt.\\n" \ "\\n" \ "Little does Luke know that the\\n" \ "GALACTIC EMPIRE has secretly\\n" \ "begun construction on a new\\n" \ "armored space station even\\n" \ "more powerful than the first\\n" \ "dreaded Death Star.\\n" \ "\\n" \ "When completed, this ultimate\\n" \ "weapon will spell certain doom\\n" \ "for the small band of rebels\\n" \ "struggling to restore freedom\\n" \ "to the galaxy...\\n" \ "\\n" \ "\\n" \ "\\n" \ "\\n" \ "\\n" \ "\\n" \ "\\n" \ "\\n" \ "\\n" \ "\\n" \ "\\n" \ "\\n" \ "\\n" \ "\\n" \ "\\n" \ "\\n" \ "\\n" \ "\\n" \ "\\n" \ "\\n" \ "\\n" \ "\\n" \ "\\n" \ "\\n" \ "\\n" \ "\\n" \ "\\n" \ "\\n" \ "Episode I\\n" \ "\\n" \ "THE PHANTOM MENACE\\n" \ "\\n" \ "Turmoil has engulfed the\\n" \ "Galactic Republic. The taxation\\n" \ "of trade routes to outlying star\\n" \ "systems is in dispute.\\n" \ "\\n" \ "Hoping to resolve the matter\\n" \ "with a blockade of deadly\\n" \ "battleships, the greedy Trade\\n" \ "Federation has stopped all\\n" \ "shipping to the small planet\\n" \ "of Naboo.\\n" \ "\\n" \ "While the Congress of the\\n" \ "Republic endlessly debates\\n" \ "this alarming chain of events,\\n" \ "the Supreme Chancellor has\\n" \ "secretly dispatched two Jedi\\n" \ "Knights, the guardians of\\n" \ "peace and justice in the\\n" \ "galaxy to settle the conflict...\\n" \ "\\n" \ "\\n" \ "\\n" \ "\\n" \ "\\n" \ "\\n" \ "\\n" \ "\\n" \ "\\n" \ "\\n" \ "\\n" \ "\\n" \ "\\n" \ "\\n" \ "\\n" \ "\\n" \ "\\n" \ "\\n" \ "\\n" \ "\\n" \ "\\n" \ "\\n" \ "\\n" \ "\\n" \ "\\n" \ "\\n" \ "\\n" \ "\\n" \ "Episode II\\n" \ "\\n" \ "ATTACK OF THE CLONES\\n" \ "\\n" \ "There is unrest in the Galactic\\n" \ "Senate. Several thousand solar\\n" \ "systems have declared their\\n" \ "intentions to leave the Republic.\\n" \ "\\n" \ "This separatist movement,\\n" \ "under the leadership of the\\n" \ "mysterious Count Dooku, has\\n" \ "made it difficult for the limited\\n" \ "number of Jedi Knights to\\n" \ "maintain peace and order in the\\n" \ "galaxy.\\n" \ "\\n" \ "Senator Amidala, the former\\n" \ "Queen of Naboo, is returning\\n" \ "to the Galactic Senate to vote\\n" \ "on the critical issue of creating\\n" \ "an ARMY OF THE REPUBLIC\\n" \ "to assist the overwhelmed\\n" \ "Jedi....\\n" \ "\\n" \ "\\n" \ "\\n" \ "\\n" \ "\\n" \ "\\n" \ "\\n" \ "\\n" \ "\\n" \ "\\n" \ "\\n" \ "\\n" \ "\\n" \ "\\n" \ "\\n" \ "\\n" \ "\\n" \ "\\n" \ "\\n" \ "\\n" \ "\\n" \ "\\n" \ "\\n" \ "\\n" \ "\\n" \ "\\n" \ "\\n" \ "\\n" \ "Episode III\\n" \ "\\n" \ "REVENGE OF THE SITH\\n" \ "\\n" \ "War! The Republic is crumbling\\n" \ "under attacks by the ruthless\\n" \ "Sith Lord, Count Dooku.\\n" \ "There are heroes on both sides.\\n" \ "Evil is everywhere.\\n" \ "\\n" \ "In a stunning move, the\\n" \ "fiendish droid leader, General\\n" \ "Grievous, has swept into the\\n" \ "Republic capital and kidnapped\\n" \ "Chancellor Palpatine, leader of\\n" \ "the Galactic Senate.\\n" \ "\\n" \ "As the Separatist Droid Army\\n" \ "attempts to flee th besieged\\n" \ "capital with their valuable\\n" \ "hostage, two Jedi Knights lead a\\n" \ "desperate mission to rescue the\\n" \ "captive Chancellor....\\n" \ "\\n" \ "\\n" \ "\\n" \ "\\n" \ "\\n" \ "\\n" \ "\\n" \ "\\n" \ "\\n" \ "\\n" \ "\\n" \ "\\n" \ "\\n" \ "\\n" \ "\\n" \ "\\n" \ "\\n" \ "\\n" \ "\\n" \ "\\n" \ "\\n" \ "\\n" \ "\\n" \ "\\n" \ "\\n" \ "\\n" \ "\\n" \ "\\n" \ "Episode VII\\n" \ "THE FORCE AWAKENS\\n" \ "Luke Skywalker has vanished.\\n" \ "In his absence, the sinister\\n" \ "FIRST ORDER has risen from\\n" \ "the ashes of the Empire\\n" \ "and will not rest until\\n" \ "Skywalker, the last Jedi,\\n" \ "has been destroyed.\\n" \ "\\n" \ "With the support of the\\n" \ "REPUBLIC, General Leia Organa\\n" \ "leads a brave RESISTANCE.\\n" \ "She is desperate to find her\\n" \ "brother Luke and gain his\\n" \ "help in restoring peace and \\n" \ "justice to the galaxy.\\n" \ "\\n" \ "Leia has sent her most daring\\n" \ "pilot on a secret mission\\n" \ "to Jakku, where an old ally\\n" \ "has discovered a clue to\\n" \ "Luke's whereabouts...\\n" \ "\\n" \ "\\n" \ "\\n" \ "\\n" \ "\\n" \ "\\n" \ "\\n" \ "\\n" \ "\\n" \ "\\n" \ "\\n" \ "\\n" \ "\\n" \ "\\n" \ "\\n" \ "\\n" \ "\\n" \ "\\n" \ "\\n" \ "\\n" \ "\\n" \ "\\n" \ "\\n" \ "\\n" \ "\\n" \ "\\n" \ "\\n" \ "\\n" xscreensaver-5.36/hacks/glx/teapot2.h000664 000767 000024 00001706140 12701612217 017562 0ustar00jwzstaff000000 000000 /* 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 }; xscreensaver-5.36/hacks/glx/dnapizza.h000644 000767 000024 00000013753 12701612217 020022 0ustar00jwzstaff000000 000000 /* 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, }; xscreensaver-5.36/hacks/glx/curlicue.h000664 000767 000024 00000041634 12701612217 020016 0ustar00jwzstaff000000 000000 /* curlicue.h --- A texture map containing a "curlicue" */ #define TEX_DIMENSION 64 static const unsigned char texture[TEX_DIMENSION*TEX_DIMENSION] = { 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255, 58, 43, 43, 43, 43, 45, 70, 70, 70, 70, 70, 70, 70, 74, 98, 98, 98,100,194,255,255,255,255,255,255, 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 30,186,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1,111,244,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 43,198,255,255,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5,123,248,255,255,255,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 50,209,255,255,255,255,255,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,246, 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255, 18, 0, 0, 0, 0, 0, 0, 0, 0, 74,252,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255,255,255,255,255,255,255,138, 4, 66,229,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255, 18, 0, 0, 0, 0, 0, 0, 0, 0, 1,170,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255,255,255,255,255,255,153, 0, 0, 0, 53,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6,188,255,255,255,255,255,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255,255,255,255,255,213, 7, 0, 0, 0, 0,226,255,255,255,255,255,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255, 45, 0, 0, 0, 0, 0, 47, 0, 0, 0, 0, 22,225,255,255,255,255,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255,255,255,255,254, 54, 0, 0, 0, 0, 81,254,255,255,255,255,255,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255, 45, 0, 0, 0, 0, 56,247, 82, 0, 0, 0, 0, 59,253,255,255,255,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255,255,255,255,152, 0, 0, 0, 0, 52,243,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255, 45, 0, 0, 0, 8,215,255,250, 56, 0, 0, 0, 0,142,255,255,255,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255,255,255,241, 19, 0, 0, 0, 15, 220,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255, 45, 0, 0, 0,129,255,255,255,230, 23, 0, 0, 0, 12,230,255,255,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255,255,255,131, 0, 0, 0, 0,157, 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255, 45, 0, 0, 49,250,255,255,255,255, 171, 0, 0, 0, 0,112,255,255,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255,255,246, 19, 0, 0, 0, 54,253, 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255, 45, 0, 5,208,255,255,255,255,255, 255, 77, 0, 0, 0, 9,231,255,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255,255,163, 0, 0, 0, 0,186,255, 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255, 45, 0,121,255,255,255,255,255,255, 255,211, 2, 0, 0, 0,134,255,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255,255, 69, 0, 0, 0, 50,255,255, 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255, 45, 41,247,255,255,255,255,255,255, 255,255, 73, 0, 0, 0, 38,254,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255,237, 4, 0, 0, 0,145,255,255, 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255, 52,201,255,255,255,255,255,255,255, 255,255,169, 0, 0, 0, 0,216,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255,181, 0, 0, 0, 0,229,255,255, 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,186,255,255,255,255,255,255,255,255, 255,255,247, 7, 0, 0, 0,150,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255,130, 0, 0, 0, 42,255,255,255, 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 255,255,255, 67, 0, 0, 0, 91,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255, 79, 0, 0, 0, 95,255,255,255, 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 255,255,255,120, 0, 0, 0, 56,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255, 55, 0, 0, 0,130,255,255,255, 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 255,255,255,157, 0, 0, 0, 21,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255, 34, 0, 0, 0,161,255,255,255, 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 255,255,255,179, 0, 0, 0, 2,250,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255, 27, 0, 0, 0,168,255,255,255, 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 255,255,255,200, 0, 0, 0, 0,249,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255, 27, 0, 0, 0,168,255,255,255, 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 255,255,255,200, 0, 0, 0, 0,249,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255, 27, 0, 0, 0,163,255,255,255, 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 255,255,255,183, 0, 0, 0, 0,249,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255, 42, 0, 0, 0,135,255,255,255, 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 255,255,255,161, 0, 0, 0, 17,254,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255, 76, 0, 0, 0,100,255,255,255, 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 255,255,255,126, 0, 0, 0, 48,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255,114, 0, 0, 0, 53,255,255,255, 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 255,255,255, 78, 0, 0, 0, 84,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255,165, 0, 0, 0, 3,241,255,255, 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 255,255,252, 16, 0, 0, 0,139,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255,228, 0, 0, 0, 0,161,255,255, 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 255,255,192, 0, 0, 0, 0,198,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255,255, 46, 0, 0, 0, 67,255,255, 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 255,255, 93, 0, 0, 0, 21,250,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255,255,139, 0, 0, 0, 1,211,255, 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 255,226, 7, 0, 0, 0,108,255,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255,255,230, 6, 0, 0, 0, 79,255, 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 255,106, 0, 0, 0, 1,206,255,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255,255,255, 97, 0, 0, 0, 0,183, 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 202, 3, 0, 0, 0, 67,255,255,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255,255,255,221, 8, 0, 0, 0, 27, 235,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,243, 40, 0, 0, 0, 0,198,255,255,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255,255,255,255,126, 0, 0, 0, 0, 71,252,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255,255,255,255,255,255,255,253, 85, 0, 0, 0, 0, 96,255,255,255,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255,255,255,255,247, 44, 0, 0, 0, 0, 91,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255,255,255,255,255,255,255,116, 0, 0, 0, 0, 25,233,255,255,255,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255,255,255,255,255,216, 11, 0, 0, 0, 0, 90,251,255,255,255,255,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255,255,255,255,255,252,112, 0, 0, 0, 0, 4,191,255,255,255,255,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255,255,255,255,255,255,174, 4, 0, 0, 0, 0, 72,235,255,255,255,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255,255,255,255,242, 84, 0, 0, 0, 0, 0,146,255,255,255,255,255,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255,255,255,255,255,255,255,150, 1, 0, 0, 0, 0, 27,181,255,255,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255,255,255,194, 39, 0, 0, 0, 0, 0,120,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,151, 4, 0, 0, 0, 0, 0, 77,209,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255,216, 92, 1, 0, 0, 0, 0, 0, 125,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 175, 12, 0, 0, 0, 0, 0, 1, 70,164,241,255,255,255,255,255, 255,255,255,255,255,242,171, 77, 2, 0, 0, 0, 0, 0, 4,150, 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 255,214, 41, 0, 0, 0, 0, 0, 0, 0, 4, 48, 98,138,163,163, 163,163,140,103, 55, 5, 0, 0, 0, 0, 0, 0, 0, 30,199,255, 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 255,255,245,125, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,105,240,255,255, 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 255,255,255,255,222,100, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 83,210,255,255,255,255, 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,228,136, 45, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 37,125,220,255,255,255,255,255,255, 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255,255,225,166,112, 74, 43, 32, 12, 8, 32, 40, 71,105,162,218,255,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, }; xscreensaver-5.36/hacks/glx/atlantis.man000644 000767 000024 00000004140 12701612221 020326 0ustar00jwzstaff000000 000000 .TH XScreenSaver 1 "" "X Version 11" .SH NAME atlantis - draw swimming sharks, whales, and dolphins. .SH SYNOPSIS .B atlantis [\-display \fIhost:display.screen\fP] [\-visual \fIvisual\fP] [\-window] [\-root] [\-whalespeed \fInumber\fP] [\-delay \fInumber\fP] [\-size \fInumber\fP] [\-count \fInumber\fP] [\-no-texture] [\-gradient] [\-wireframe] [\-fps] .SH DESCRIPTION This is xfishtank writ large: a GL animation of a number of sharks, dolphins, and whales. The swimming motions are great. .SH OPTIONS .TP 8 .B \-visual \fIvisual\fP Specify which visual to use. Legal values are the name of a visual class, or the id number (decimal or hex) of a specific visual. .TP 8 .B \-window Draw on a newly-created window. This is the default. .TP 8 .B \-root Draw on the root window. .TP 8 .B \-whalespeed \fInumber\fP Whale Speed. 0 - 1000. Default: 250. .TP 8 .B \-cycles \fInumber\fP Shark Speed. Default: 100. .TP 8 .B \-size \fInumber\fP Shark Proximity. 100 - 10000. Default: 6000. .TP 8 .B \-count \fInumber\fP Number of Sharks. 0 - 20. Default: 4. .TP 8 .B \-texture | \-no-texture Whether to show shimmering water. .TP 8 .B \-gradient Whether to draw a gradient on the background, making it darker at the bottom. .TP 8 .B \-wireframe Render in wireframe instead of solid. .TP 8 .B \-fps Display the current frame rate, CPU load, and polygon count. .SH ENVIRONMENT .PP .TP 8 .B DISPLAY to get the default host and display number. .TP 8 .B XENVIRONMENT to get the name of a resource file that overrides the global resources stored in the RESOURCE_MANAGER property. .SH SEE ALSO .BR X (1), .BR xscreensaver (1) .SH COPYRIGHT Copyright \(co 2002 by Mark Kilgard. 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. .SH AUTHOR Mark Kilgard. xscreensaver-5.36/hacks/glx/boxed.man000644 000767 000024 00000003147 12701612221 017616 0ustar00jwzstaff000000 000000 .TH XScreenSaver 1 "" "X Version 11" .SH NAME boxed - draws a box full of 3D bouncing balls that explode. .SH SYNOPSIS .B boxed [\-display \fIhost:display.screen\fP] [\-visual \fIvisual\fP] [\-window] [\-root] [\-delay \fInumber\fP] [\-wireframe] [\-fps] .SH DESCRIPTION Draws a box full of 3D bouncing balls that explode. .SH OPTIONS .TP 8 .B \-visual \fIvisual\fP Specify which visual to use. Legal values are the name of a visual class, or the id number (decimal or hex) of a specific visual. .TP 8 .B \-window Draw on a newly-created window. This is the default. .TP 8 .B \-root Draw on the root window. .TP 8 .B \-delay \fInumber\fP Per-frame delay, in microseconds. Default: 20000 (0.02 seconds.). .TP 8 .B \-wireframe Render in wireframe instead of solid. .TP 8 .B \-fps Display the current frame rate, CPU load, and polygon count. .SH ENVIRONMENT .PP .TP 8 .B DISPLAY to get the default host and display number. .TP 8 .B XENVIRONMENT to get the name of a resource file that overrides the global resources stored in the RESOURCE_MANAGER property. .SH SEE ALSO .BR X (1), .BR xscreensaver (1) .SH COPYRIGHT Copyright \(co 2002 by Sander van Grieken. 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. .SH AUTHOR Sander van Grieken. xscreensaver-5.36/hacks/glx/bubble3d.man000644 000767 000024 00000003436 12701612221 020200 0ustar00jwzstaff000000 000000 .TH XScreenSaver 1 "" "X Version 11" .SH NAME bubble3d - 3d rising bubbles. .SH SYNOPSIS .B bubble3d [\-display \fIhost:display.screen\fP] [\-visual \fIvisual\fP] [\-window] [\-root] [\-delay \fInumber\fP] [\-transparent] [\-color \fIcolor\fP] [\-fps] .SH DESCRIPTION Draws a stream of rising, undulating 3D bubbles, rising toward the top of the screen, with nice specular reflections. .SH OPTIONS .TP 8 .B \-visual \fIvisual\fP Specify which visual to use. Legal values are the name of a visual class, or the id number (decimal or hex) of a specific visual. .TP 8 .B \-window Draw on a newly-created window. This is the default. .TP 8 .B \-root Draw on the root window. .TP 8 .B \-transparent Draw transparent bubbles instead of solid ones. .TP 8 .B \-color \fIcolor\fP Draw bubbles of the specified color. "Random" means a different color for each bubble. .TP 8 .B \-delay \fInumber\fP Per-frame delay, in microseconds. Default: 15000 (0.015 seconds.). .TP 8 .B \-fps Display the current frame rate, CPU load, and polygon count. .SH ENVIRONMENT .PP .TP 8 .B DISPLAY to get the default host and display number. .TP 8 .B XENVIRONMENT to get the name of a resource file that overrides the global resources stored in the RESOURCE_MANAGER property. .SH SEE ALSO .BR X (1), .BR xscreensaver (1) .SH COPYRIGHT Copyright \(co 2002 by Richard Jones. 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. .SH AUTHOR Richard Jones. xscreensaver-5.36/hacks/glx/cage.man000644 000767 000024 00000003312 12701612221 017406 0ustar00jwzstaff000000 000000 .TH XScreenSaver 1 "" "X Version 11" .SH NAME cage - Escher's impossible cage, for xscreensaver. .SH SYNOPSIS .B cage [\-display \fIhost:display.screen\fP] [\-visual \fIvisual\fP] [\-window] [\-root] [\-delay \fInumber\fP] [\-mono] [\-wireframe] [\-fps] .SH DESCRIPTION This draws Escher's "Impossible Cage", a 3d analog of a moebius strip, and rotates it in three dimensions. .SH OPTIONS .TP 8 .B \-visual \fIvisual\fP Specify which visual to use. Legal values are the name of a visual class, or the id number (decimal or hex) of a specific visual. .TP 8 .B \-window Draw on a newly-created window. This is the default. .TP 8 .B \-root Draw on the root window. .TP 8 .B \-delay \fInumber\fP Per-frame delay, in microseconds. Default: 25000 (0.03 seconds.). .TP 8 .B \-mono Render solid instead of textured. .TP 8 .B \-wireframe Render in wireframe instead of textured. .TP 8 .B \-fps Display the current frame rate, CPU load, and polygon count. .SH ENVIRONMENT .PP .TP 8 .B DISPLAY to get the default host and display number. .TP 8 .B XENVIRONMENT to get the name of a resource file that overrides the global resources stored in the RESOURCE_MANAGER property. .SH SEE ALSO .BR X (1), .BR xscreensaver (1) .SH COPYRIGHT Copyright \(co 2002 by Marcelo Vianna. 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. .SH AUTHOR Marcelo Vianna. xscreensaver-5.36/hacks/glx/circuit.man000644 000767 000024 00000003651 12701612221 020157 0ustar00jwzstaff000000 000000 .TH XScreenSaver 1 "5-May-2004" "X Version 11" .SH NAME circuit - animates a number of 3D electronic components. .SH SYNOPSIS .B circuit [\-display \fIhost:display.screen\fP] [\-visual \fIvisual\fP] [\-window] [\-root] [\-delay \fInumber\fP] [\-parts \fInumber\fP] [\-no-spin] [\-rotate] [\-speed \fInumber\fP] [\-no-light] [\-fps] .SH DESCRIPTION Animates a number of 3D electronic components. .SH OPTIONS .TP 8 .B \-visual \fIvisual\fP Specify which visual to use. Legal values are the name of a visual class, or the id number (decimal or hex) of a specific visual. .TP 8 .B \-window Draw on a newly-created window. This is the default. .TP 8 .B \-root Draw on the root window. .TP 8 .B \-delay \fInumber\fP Per-frame delay, in microseconds. Default: 20000 (0.02 seconds.). .TP 8 .B \-parts \fInumber\fP Number of parts. Default: 10. .TP 8 .B \-spin | \-no-spin Whether the objects should spin. .TP 8 .B \-rotate | \-no-rotate Whether the scene should spin. .TP 8 .B \-speed \fInumber\fP Rotation speed, 0 - 100. Default: 1. .TP 8 .B \-light | \-no-light Whether to us lighting, or flat coloring. .TP 8 .B \-fps Display the current frame rate, CPU load, and polygon count. .SH ENVIRONMENT .PP .TP 8 .B DISPLAY to get the default host and display number. .TP 8 .B XENVIRONMENT to get the name of a resource file that overrides the global resources stored in the RESOURCE_MANAGER property. .SH SEE ALSO .BR X (1), .BR xscreensaver (1) .SH COPYRIGHT Copyright \(co 2002 by Ben Buxton. 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. .SH AUTHOR Ben Buxton. xscreensaver-5.36/hacks/glx/cubenetic.man000644 000767 000024 00000004544 12701612221 020460 0ustar00jwzstaff000000 000000 .TH XScreenSaver 1 "" "X Version 11" .SH NAME cubenetic - cubist 3D undulating blob. .SH SYNOPSIS .B cubenetic [\-display \fIhost:display.screen\fP] [\-visual \fIvisual\fP] [\-window] [\-root] [\-delay \fInumber\fP] [\-count \fInumber\fP] [\-no-wander] [\-no-spin] [\-spin \fI[XYZ]\fP] [\-wireframe] [\-no-texture] [\-wave-speed \fInumber\fP] [\-wave-radius \fInumber\fP] [\-waves \fInumber\fP] [\-fps] .SH DESCRIPTION Draws a pulsating set of overlapping boxes with ever-chaning blobby patterns undulating across their surfaces. .SH OPTIONS .TP 8 .B \-visual \fIvisual\fP Specify which visual to use. Legal values are the name of a visual class, or the id number (decimal or hex) of a specific visual. .TP 8 .B \-window Draw on a newly-created window. This is the default. .TP 8 .B \-root Draw on the root window. .TP 8 .B \-delay \fInumber\fP Per-frame delay, in microseconds. Default: 20000 (0.02 seconds.). .TP 8 .B \-count \fInumber\fP How many boxes make up the object. Default: 5. .TP 8 .B \-wander | \-no-wander Whether the object should wander around the screen. .TP 8 .B \-spin \fI[XYZ]\fP Around which axes should the object spin? .TP 8 .B \-no-spin Don't spin. .TP 8 .B \-wireframe Render in wireframe instead of solid. .TP 8 .B \-texture | \-no-texture Display Solid Colors. .TP 8 .B \-wave-speed \fInumber\fP Surface Pattern Speed. 5 - 150. Default: 80. .TP 8 .B \-wave-radius \fInumber\fP Surface Pattern Overlap. 5 - 600. Default: 512. .TP 8 .B \-waves \fInumber\fP Surface Pattern Complexity. 1 - 20. Default: 3. .TP 8 .B \-fps Display the current frame rate, CPU load, and polygon count. .SH ENVIRONMENT .PP .TP 8 .B DISPLAY to get the default host and display number. .TP 8 .B XENVIRONMENT to get the name of a resource file that overrides the global resources stored in the RESOURCE_MANAGER property. .SH SEE ALSO .BR X (1), .BR xscreensaver (1) .SH COPYRIGHT Copyright \(co 2002 by 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. .SH AUTHOR Jamie Zawinski. xscreensaver-5.36/hacks/glx/dangerball.man000644 000767 000024 00000003757 12701612221 020617 0ustar00jwzstaff000000 000000 .TH XScreenSaver 1 "" "X Version 11" .SH NAME dangerball - a 3D ball that periodically extrudes spikes. Ouch! .SH SYNOPSIS .B dangerball [\-display \fIhost:display.screen\fP] [\-visual \fIvisual\fP] [\-window] [\-root] [\-delay \fInumber\fP] [\-speed \fInumber\fP] [\-count \fInumber\fP] [\-no-wander] [\-no-spin] [\-wireframe] [\-fps] .SH DESCRIPTION Draws a ball that periodically extrudes many random spikes. Ouch! .SH OPTIONS .TP 8 .B \-visual \fIvisual\fP Specify which visual to use. Legal values are the name of a visual class, or the id number (decimal or hex) of a specific visual. .TP 8 .B \-window Draw on a newly-created window. This is the default. .TP 8 .B \-root Draw on the root window. .TP 8 .B \-delay \fInumber\fP Per-frame delay, in microseconds. Default: 30000 (0.03 seconds.). .TP 8 .B \-speed \fInumber\fP Spike growth frequency. 0.0 - 0.25. Default: 0.05. .TP 8 .B \-count \fInumber\fP Number o spikes. Default: 30. .TP 8 .B \-wander | \-no-wander Whether the object should wander around the screen. .TP 8 .B \-spin | \-no-spin Whether the object should spin. .TP 8 .B \-wireframe | \-no-wireframe Render in wireframe instead of solid. .TP 8 .B \-fps Display the current frame rate, CPU load, and polygon count. .SH ENVIRONMENT .PP .TP 8 .B DISPLAY to get the default host and display number. .TP 8 .B XENVIRONMENT to get the name of a resource file that overrides the global resources stored in the RESOURCE_MANAGER property. .SH SEE ALSO .BR X (1), .BR xscreensaver (1) .SH COPYRIGHT Copyright \(co 2002 by 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. .SH AUTHOR Jamie Zawinski. xscreensaver-5.36/hacks/glx/engine.man000644 000767 000024 00000004114 12701612221 017755 0ustar00jwzstaff000000 000000 .TH XScreenSaver 1 "" "X Version 11" .SH NAME engine - draws a 3D four-stroke engine. .SH SYNOPSIS .B engine [\-display \fIhost:display.screen\fP] [\-visual \fIvisual\fP] [\-window] [\-root] [\-engine \fIname\fP] [\-delay \fInumber\fP] [\-no-move] [\-no-spin] [\-no-title] [\-fps] .SH DESCRIPTION Draws a simple four-stroke engine that floats around the screen. .SH OPTIONS .TP 8 .B \-visual \fIvisual\fP Specify which visual to use. Legal values are the name of a visual class, or the id number (decimal or hex) of a specific visual. .TP 8 .B \-window Draw on a newly-created window. This is the default. .TP 8 .B \-root Draw on the root window. .TP 8 .B \-engine \fIname\fP What kind of engine to draw. Default: random. Known models are: "Honda Insight" (3), "BMW M3" (4), "VW Beetle" (flat 4), "Audi Quattro" (5), "BMW M5" (6), "Subaru XT" (V6), "Porsche 911" (flat 6), "Corvette Z06" (V8), "Dodge Viper" (V10), and "Jaguar XKE" (V12). .TP 8 .B \-delay \fInumber\fP Per-frame delay, in microseconds. Default: 10000 (0.01 seconds.). .TP 8 .B \-move | \-no-move Whether the object should wander around the screen. .TP 8 .B \-spin | \-no-spin Whether the object should spin. .TP 8 .B \-fps Display the current frame rate, CPU load, and polygon count. .TP 8 .B \-title | \-no-title Whether to display the name of the engine being rendered. .SH ENVIRONMENT .PP .TP 8 .B DISPLAY to get the default host and display number. .TP 8 .B XENVIRONMENT to get the name of a resource file that overrides the global resources stored in the RESOURCE_MANAGER property. .SH SEE ALSO .BR X (1), .BR xscreensaver (1) .SH COPYRIGHT Copyright \(co 2002 by Ben Buxton. 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. .SH AUTHOR Ben Buxton. xscreensaver-5.36/hacks/glx/extrusion.man000644 000767 000024 00000004033 12701612221 020550 0ustar00jwzstaff000000 000000 .TH XScreenSaver 1 "" "X Version 11" .SH NAME extrusion - various rotating extruded shapes. .SH SYNOPSIS .B extrusion [\-display \fIhost:display.screen\fP] [\-visual \fIvisual\fP] [\-window] [\-root] [\-delay \fInumber\fP] [\-name \fIwhich\fP] [\-no-light] [\-wireframe] [\-fps] .SH DESCRIPTION Draws various rotating extruded shapes that twist around, lengthen, and turn inside out. .SH OPTIONS .TP 8 .B \-visual \fIvisual\fP Specify which visual to use. Legal values are the name of a visual class, or the id number (decimal or hex) of a specific visual. .TP 8 .B \-window Draw on a newly-created window. This is the default. .TP 8 .B \-root Draw on the root window. .TP 8 .B \-delay \fInumber\fP Per-frame delay, in microseconds. Default: 10000 (0.01 seconds.). .TP 8 .B \-name \fIwhich\fP Which object to draw. Choices are: helix2, helix3, helix4, joinoffset, screw, taper, and twistoid. .TP 8 .B \-light | \-no-light Whether to light the scene, or use flat coloring. .TP 8 .B \-bitmap \fIfile\fP The texture map to use. .TP 8 .B \-wireframe Render in wireframe instead of solid. .TP 8 .B \-fps Display the current frame rate, CPU load, and polygon count. .SH ENVIRONMENT .PP .TP 8 .B DISPLAY to get the default host and display number. .TP 8 .B XENVIRONMENT to get the name of a resource file that overrides the global resources stored in the RESOURCE_MANAGER property. .SH SEE ALSO .BR X (1), .BR xscreensaver (1) .SH COPYRIGHT Copyright \(co 2002 by Linas Vepstas and David Konerding. 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. .SH AUTHOR This screensaver was created by David Konerding from the samples that come with the GL Extrusion library by Linas Vepstas. xscreensaver-5.36/hacks/glx/flipscreen3d.man000644 000767 000024 00000003367 12701612221 021102 0ustar00jwzstaff000000 000000 .TH XScreenSaver 1 "" "X Version 11" .SH NAME flipscreen3d - rotates an image of the screen through 3 dimensions. .SH SYNOPSIS .B flipscreen3d [\-display \fIhost:display.screen\fP] [\-visual \fIvisual\fP] [\-window] [\-root] [\-delay \fInumber\fP] [\-no-rotate] [\-wireframe] [\-fps] .SH DESCRIPTION Grabs an image of the desktop, turns it into a GL texture map, and spins it around and deforms it in various ways. .SH OPTIONS .TP 8 .B \-visual \fIvisual\fP Specify which visual to use. Legal values are the name of a visual class, or the id number (decimal or hex) of a specific visual. .TP 8 .B \-window Draw on a newly-created window. This is the default. .TP 8 .B \-root Draw on the root window. .TP 8 .B \-delay \fInumber\fP Per-frame delay, in microseconds. Default: 20000 (0.02 seconds.). .TP 8 .B \-rotate | \-no-rotate Whether to rotate. .TP 8 .B \-wireframe Just render boxes instead of textures (for debugging). .TP 8 .B \-fps Display the current frame rate, CPU load, and polygon count. .SH ENVIRONMENT .PP .TP 8 .B DISPLAY to get the default host and display number. .TP 8 .B XENVIRONMENT to get the name of a resource file that overrides the global resources stored in the RESOURCE_MANAGER property. .SH SEE ALSO .BR X (1), .BR xscreensaver (1) .SH COPYRIGHT Copyright \(co 2002 by Ben Buxton. 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. .SH AUTHOR Ben Buxton. xscreensaver-5.36/hacks/glx/gears.man000644 000767 000024 00000004237 12701612221 017617 0ustar00jwzstaff000000 000000 .TH XScreenSaver 1 "" "X Version 11" .SH NAME gears - draw interlocking gears, for xscreensaver. .SH SYNOPSIS .B gears [\-display \fIhost:display.screen\fP] [\-window] [\-root] [\-install] [\-visual \fIvisual\fP] [\-delay \fIusecs\fP] [\-speed \fIfloat\fP] [\-no\-spin] [\-no\-wander] [-count \fIinteger\fP] [-wireframe] [-fps] .SH DESCRIPTION This draws a set of rotating gears. .SH OPTIONS .I gears accepts the following options: .TP 8 .B \-window Draw on a newly-created window. This is the default. .TP 8 .B \-root Draw on the root window. .TP 8 .B \-install Install a private colormap for the window. .TP 8 .B \-visual \fIvisual\fP Specify which visual to use. Legal values are the name of a visual class, or the id number (decimal or hex) of a specific visual. .TP 8 .B \-delay \fIusecs\fP The delay between frames of the animation, in microseconds. Default: 30000 (0.03 seconds.) .TP 8 .B \-speed \fIfloat\fP Larger numbers mean run faster. Default: 1.0. .TP 8 .B \-no\-spin Don't rotate the object. .TP 8 .B \-no\-wander Don't wander the object around the screen. .TP 8 .B \-count \fIinteger\fP How many gears to draw. Default: 0 for random. .TP 8 .B \-wireframe Render in wireframe instead of solid. .TP 8 .B \-fps Display the current frame rate, CPU load, and polygon count. .SH ENVIRONMENT .PP .TP 8 .B DISPLAY to get the default host and display number. .TP 8 .B XENVIRONMENT to get the name of a resource file that overrides the global resources stored in the RESOURCE_MANAGER property. .SH SEE ALSO .BR X (1), .BR xscreensaver (1) .SH COPYRIGHT Copyright \(co 2007 by 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. .SH AUTHOR Jamie Zawinski. An earlier version of this program by Brian Paul was written in 1997; this version was rewritten from scratch by jwz in 2007. xscreensaver-5.36/hacks/glx/gflux.man000644 000767 000024 00000007413 12701612221 017642 0ustar00jwzstaff000000 000000 .TH XScreenSaver 1 "May 2004" .SH NAME gflux \- rippling surface graphics hack .SH SYNOPSIS .B gflux [\-display \fIhost:display.screen\fP] [\-window] [\-root] [\-install] [\-visual \fIvisual\fP] [\-delay \fImicroseconds\fP] [\-squares \fInum\fP] [\-resolution \fInum\fP] [\-mode \fImode\fP] [\-flat \fInum\fP] [\-speed \fInum\fP] [\-rotationx \fInum\fP] [\-rotationy \fInum\fP] [\-rotationz \fInum\fP] [\-waves \fInum\fP] [\-waveChange \fInum\fP] [\-waveHeight \fInum\fP] [\-waveFreq \fInum\fP] [\-zoom \fInum\fP] [\-wireframe] [\-fps] .SH DESCRIPTION The \fIgflux\fP program draws a colourfull animated rippling square rotating in 3D space. .SH OPTIONS .I gflux accepts the following options: .TP 8 .B \-window Draw on a newly-created window. This is the default. .TP 8 .B \-root Draw on the root window. .TP 8 .B \-install Install a private colormap for the window. .TP 8 .B \-visual \fIvisual\fP\fP Specify which visual to use. Legal values are the name of a visual class, or the id number (decimal or hex) of a specific visual. .TP 8 .B \-squares \fInum\fP\fP Specifies the size of the grid in squares. default 19 .TP 8 .B \-resolution \fInum\fP\fP Specifies the wireframe detail of the squares. default 4 .TP 8 .B \-mode \fImode\fP\fP Specifies the draw method: wireframe; solid (meaning a solid colored surface); light (same as solid, but with lighting effects); checker (a texture-mapped checkerboard pattern); or grab (meaning grab an image to manipulate.) When grabbing images, the image will be grabbed from the portion of the screen underlying the window, or from the system's video input, or from a random file on disk, as indicated by the \fIgrabDesktopImages\fP, \fIgrabVideoFrames\fP, and \fIchooseRandomImages\fP options in the \fI~/.xscreensaver\fP file; see .BR xscreensaver-demo (1) for more details. .TP 8 .B \-wireframe Same as "-mode wire". .TP 8 .B \-flat \fInum\fP\fP 0 for smooth shading 1 for flat. default 0 .TP 8 .B \-speed \fInum\fP\fP Specifies speed of ripples flowing over the surface. default 0.05 .TP 8 .B \-rotationx \fInum\fP \-rotationy \fInum\fP \-rotationz \fInum\fP\fP Specifies the speed of rotation of the surface in these axis .TP 8 .B \-waves \fInum\fP\fP Specifies the number of ripple centres at any one time. Values should be greater than 1. default 3 .TP 8 .B \-waveChange \fInum\fP\fP Specifies the duration of a ripple centre. after this they fade away to be reborn elsewhere with a different frequency. default 50 .TP 8 .B \-waveHeight \fInum\fP\fP Specifies the height of ripples on the surface. default 1.0 .TP 8 .B \-waveFreq \fInum\fP\fP Specifies the maximum frequency of ripples. default 3.0 .TP 8 .B \-zoom \fInum\fP\fP Specifies the size of the viewport. Smaller values fill the screen with rippling surface. default 1.0 .TP 8 .B \-delay \fImicroseconds\fP How long to pause between frames. Default is 20000, or 0.02 second. .TP 8 .B \-fps Display the current frame rate, CPU load, and polygon count. .SH ENVIRONMENT .PP .TP 8 .B DISPLAY to get the default host and display number. .TP 8 .B XENVIRONMENT to get the name of a resource file that overrides the global resources stored in the RESOURCE_MANAGER property. .SH SEE ALSO .BR X (1), .BR xscreensaver (1) .BR xscreensaver\-demo (1), .BR xscreensaver\-getimage (1) .SH COPYRIGHT Copyright \(co 2000 by Josiah Pease. 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. .SH AUTHOR Josiah Pease , 10-Jun-2000. xscreensaver-5.36/hacks/glx/glplanet.man000644 000767 000024 00000003643 12701612221 020324 0ustar00jwzstaff000000 000000 .TH XScreenSaver 1 "" "X Version 11" .SH NAME glplanet - rotating 3d texture-mapped planet. .SH SYNOPSIS .B glplanet [\-display \fIhost:display.screen\fP] [\-visual \fIvisual\fP] [\-window] [\-root] [\-delay \fInumber\fP] [\-image \fIfile\fP] [\-resolution \fInumber\fP] [\-wireframe] [\-fps] .SH DESCRIPTION Draws a planet bouncing around in space. The built-in image is a map of the earth, but you can wrap any texture around the sphere, e.g., the planetary textures that come with `ssystem'. .SH OPTIONS .TP 8 .B \-visual \fIvisual\fP Specify which visual to use. Legal values are the name of a visual class, or the id number (decimal or hex) of a specific visual. .TP 8 .B \-window Draw on a newly-created window. This is the default. .TP 8 .B \-root Draw on the root window. .TP 8 .B \-delay \fInumber\fP Per-frame delay, in microseconds. Default: 20000 (0.02 seconds.). .TP 8 .B \-images \fIfile\fP The texture map to wrap around the planet's surface. .TP 8 .B \-resolution The resolution of the planet. Default: 128. .TP 8 .B \-wireframe Render in wireframe instead of solid. .TP 8 .B \-fps Display the current frame rate, CPU load, and polygon count. .SH ENVIRONMENT .PP .TP 8 .B DISPLAY to get the default host and display number. .TP 8 .B XENVIRONMENT to get the name of a resource file that overrides the global resources stored in the RESOURCE_MANAGER property. .SH SEE ALSO .BR X (1), .BR xscreensaver (1) .SH COPYRIGHT Copyright \(co 2002 by David Konerding. 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. .SH AUTHOR David Konerding. xscreensaver-5.36/hacks/glx/glsnake.man000644 000767 000024 00000005720 12701612221 020140 0ustar00jwzstaff000000 000000 .\" Hey, EMACS: -*- nroff -*- .TH XScreenSaver 1 "January 15, 2001" "X Version 11" .SH NAME glsnake \- OpenGL enhanced Rubik's Snake cyclewaster. .SH SYNOPSIS .B glsnake [\-display \fIhost:display.screen\fP] [\-window] [\-root] [\-visual \fIvisual\fP] [\-delay \fImicroseconds\fP] [\-fps] [\-wireframe] [\-altcolour] [\-angvel \fIangular\fP] [\-explode \fIdistance\fP] [\-statictime \fImilliseconds\fP] [\-yangvel \fIangle\fP] [\-zangvel \fIangle\fP] .SH DESCRIPTION .PP .B glsnake is an imitation of Rubiks\' Snake, using OpenGL. .SH OPTIONS .I glsnake accepts the following options: .TP 8 .B \-window Draw on a newly-created window. This is the default. .TP 8 .B \-root Draw on the root window. .TP 8 .B \-install Install a private colormap for the window. .TP 8 .B \-visual \fIvisual\fP\fP Specify which visual to use. Legal values are the name of a visual class, or the id number (decimal or hex) of a specific visual. .TP 8 .B \-fps Display the current frame rate, CPU load, and polygon count. .TP 8 .B \-wireframe Display the snake in wireframe mode, rather than the default solid mode. .TP 8 .B \-altcolour Use the alternate colour scheme for the snake. Shape identification using colour will be disabled. .TP 8 .B -angvel \fIangular\fP Change the speed at which the snake morphs to a new shape. .TP 8 .B -explode \fIdistance\fP Change the distance between the nodes of a snake. .TP 8 .B \-statictime \fImilliseconds\fP Change the time between morphs. .TP 8 .B \-yangvel \fIangle\fP Change the angle of rotation around the Y axis per frame. .TP 8 .B \-zangvel \fIangle\fP Change the angle of rotation around the Z axis per frame. .SH ENVIRONMENT .PP .TP 8 .B DISPLAY to get the default host and display number. .TP 8 .B XENVIRONMENT to get the name of a resource file that overrides the global resources stored in the RESOURCE_MANAGER property. .SH FILES .TP \fB/usr/share/glsnake/*.glsnake\fP This XScreenSaver will attempt to read model files installed with the interactive \fBglsnake\fP. .SH SEE ALSO .BR X (1), .BR xscreensaver (1), .BR glsnake (MANSUFFIX) .PP .EX http://spacepants.org/src/glsnake/ .EE .SH BUGS The snake will happily intersect itself while morphing (this is not a bug). .PP The rotation/camera position sucks. .SH COPYRIGHT Copyright \(co 2001,2002 by Jamie Wilkinson, Andrew Bennetts, and Peter Aylett. .PP This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. .PP This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. .SH AUTHOR Jamie Wilkinson , Andrew Bennetts , and Peter Aylett . Ported to XScreenSaver by Jamie Wilkinson. xscreensaver-5.36/hacks/glx/gltext.man000644 000767 000024 00000006750 12701612221 020027 0ustar00jwzstaff000000 000000 .de EX \"Begin example .ne 5 .if n .sp 1 .if t .sp .5 .nf .in +.5i .. .de EE .fi .in -.5i .if n .sp 1 .if t .sp .5 .. .TH XScreenSaver 1 "25-Jul-98" "X Version 11" .SH NAME gltext - draws text spinning around in 3D .SH SYNOPSIS .B gltext [\-display \fIhost:display.screen\fP] [\-window] [\-root] [\-visual \fIvisual\fP] [\-delay \fImicroseconds\fP] [\-text \fIstring\fP] [\-program \fIcommand\fP] [\-wander] [\-no-wander] [\-spin \fIaxes\fP] [\-no-spin] [\-front] [\-no\-front] [\-wireframe] [\-fps] .SH DESCRIPTION The \fIgltext\fP program draws some text spinning around in 3D, using a font that appears to be made of solid tubes. .SH OPTIONS .I gltext accepts the following options: .TP 8 .B \-window Draw on a newly-created window. This is the default. .TP 8 .B \-root Draw on the root window. .TP 8 .B \-install Install a private colormap for the window. .TP 8 .B \-visual \fIvisual\fP\fP Specify which visual to use. Legal values are the name of a visual class, or the id number (decimal or hex) of a specific visual. .TP 8 .B \-text \fIstring\fP The text to display. This may contain newlines, but it shouldn't be very long. The default is to display the machine name and OS version. This may also be a format string acceptable to .BR date (1) and .BR strftime (3) , in which case, it will be updated once a second. So to make this program display a spinning digital clock, you could do this: .EX gltext -text "%A%n%d %b %Y%n%l:%M:%S %p" .EE To include a literal `%', you must double it: `%%'. See the man page for .BR strftime (3) for more details. .TP 8 .B \-program \fIcommand\fP The given program is run, and its output is displayed. If specified, this overrides \fI\-text\fP. The output of this program will be repeatedely displayed, with new pages of text shifting in every few seconds. Lines should be relatively short. You might try: .EX -program 'xscreensaver-text --cols 20' .EE .TP 8 .B \-wander Move the text around the screen. This is the default. .TP 8 .B \-no\-wander Keep the text centered on the screen. .TP 8 .B \-spin Which axes around which the text should spin. The default is "XYZ", meaning rotate it freely in space. "\fB\-spin Z\fP" would rotate the text in the plane of the screen while not rotating it into or out of the screen; etc. .TP 8 .B \-no\-spin Don't spin the text at all: the same as \fB\-spin ""\fP. .TP 8 .B \-front When spinning, never spin all the way around or upside down: always face mostly forward so that the text is easily readable. .TP 8 .B \-no\-front Allow spins to go all the way around or upside down. This is the default. .TP 8 .B \-wireframe Render in wireframe instead of solid. .TP 8 .B \-fps Display the current frame rate, CPU load, and polygon count. .SH ENVIRONMENT .PP .TP 8 .B DISPLAY to get the default host and display number. .TP 8 .B XENVIRONMENT to get the name of a resource file that overrides the global resources stored in the RESOURCE_MANAGER property. .SH SEE ALSO .BR X (1), .BR xscreensaver (1) .BR xscreensaver-text (1) .SH COPYRIGHT Copyright \(co 2001-2014 by 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. .SH AUTHOR Jamie Zawinski xscreensaver-5.36/hacks/glx/lament.man000644 000767 000024 00000004121 12701612221 017766 0ustar00jwzstaff000000 000000 .TH XScreenSaver 1 "25-Jul-98" "X Version 11" .SH NAME lament - animates the Lament Configuration .SH SYNOPSIS .B lament [\-display \fIhost:display.screen\fP] [\-window] [\-root] [\-install] [\-visual \fIvisual\fP] [\-delay \fImicroseconds\fP] [\-fps] [\-texture] [\-no\-texture] [\-wireframe] .SH DESCRIPTION The \fIlament\fP program draws an animation of a particular puzzle box repeatedly solving itself. .SH OPTIONS .I lament accepts the following options: .TP 8 .B \-window Draw on a newly-created window. This is the default. .TP 8 .B \-root Draw on the root window. .TP 8 .B \-install Install a private colormap for the window. .TP 8 .B \-visual \fIvisual\fP\fP Specify which visual to use. Legal values are the name of a visual class, or the id number (decimal or hex) of a specific visual. .TP 8 .B \-texture Use texture maps. This is the default. .TP 8 .B \-no\-texture Do not use texture maps. This is boring and wrong. .TP 8 .B \-wireframe Only draw outlines. .TP 8 .B \-delay \fImicroseconds\fP How long to pause between frames. Default is 20000, or 0.02 second. .TP 8 .B \-fps Display the current frame rate, CPU load, and polygon count. .SH ENVIRONMENT .PP .TP 8 .B DISPLAY to get the default host and display number. .TP 8 .B XENVIRONMENT to get the name of a resource file that overrides the global resources stored in the RESOURCE_MANAGER property. .SH BUGS This hack is glacially slow on machines lacking hardware texture support. Occasionally opens doors, admitting theologians of the Order of the Gash. .SH SEE ALSO .BR X (1), .BR xscreensaver (1) .SH COPYRIGHT Copyright \(co 1998 by 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. .SH AUTHOR Jamie Zawinski , 25-Jul-98. xscreensaver-5.36/hacks/glx/lavalite.man000644 000767 000024 00000011521 12701612221 020311 0ustar00jwzstaff000000 000000 .de EX \"Begin example .ne 5 .if n .sp 1 .if t .sp .5 .nf .in +.5i .. .de EE .fi .in -.5i .if n .sp 1 .if t .sp .5 .. .TH XScreenSaver 1 "18-May-2002" "X Version 11" .SH NAME lavalite - 3D OpenGL simulation of a Lavalite. .SH SYNOPSIS .B lavalite [\-display \fIhost:display.screen\fP] [\-window] [\-root] [\-visual \fIvisual\fP] [\-delay \fImicroseconds\fP] [\-fps] [\-style \fIstyle\fP ] [\-spin \fIxyz\fP ] [\-no-spin ] [\-speed \fIfloat\fP ] [\-resolution \fIinteger\fP ] [\-count \fIinteger\fP ] [\-no-smooth ] [\-wireframe ] [\-impatient ] [\-lava-color \fIcolor\fP ] [\-fluid-color \fIcolor\fP ] [\-base-color \fIcolor\fP ] [\-table-color \fIcolor\fP ] [\-fluid-texture \fIfilename\fP ] [\-base-texture \fIfilename\fP ] [\-table-texture \fIfilename\fP ] .SH DESCRIPTION The \fIlavalite\fP program displays a 3D simulation of the famous lamp of the same name. It requires a fast computer with fast OpenGL support. .SH OPTIONS .I lavalite accepts the following options: .TP 8 .B \-window Draw on a newly-created window. This is the default. .TP 8 .B \-root Draw on the root window. .TP 8 .B \-visual \fIvisual\fP\fP Specify which visual to use. Legal values are the name of a visual class, or the id number (decimal or hex) of a specific visual. .TP 8 .B \-style \fIstyle\fP\fP Specify which model of lamp to draw. Available models are: \fBClassic\fP, \fBGiant\fP, \fBCone\fP, and \fBRocket\fP. Default: random. .TP 8 .B \-spin \fIxyz\fP Around which axes the model should auto-spin. Defaults to "Z", meaning it rotates horizontally, but otherwise pitch or roll. .TP 8 .B \-no-spin Same as \fB\-spin ''\fP. .TP 8 .B \-speed \fIfloat\fP A number controlling the frequency at which new blobs launch: you can think of this as being related to the the heat of the lightbulb in the base. Default: 0.003. .TP 8 .B \-delay \fIusecs\fP The delay between steps of the animation; default is 30000 (0.03 second.) .TP 8 .B \-resolution \fIinteger\fP The size of the grid from which the mesh is created that is used to polygonize the blobs. higher values will give very smooth looking blobs, at the expense of speed. Default: 40. The options "-resolution 10 -no-smooth" look kind of interesting. .TP 8 .B \-fps Display the current frame rate, CPU load, and polygon count. .TP 8 .B \-count \fIinteger\fP The maximum number of blobs that can be in motion at once. Default: 3. .TP 8 .B \-no-smooth Turn off smoothing: the objects in the scene will be facetted. .TP 8 .B \-wireframe Render all objects in wireframe instead of as solids. .TP 8 .B \-impatient Provide this option if you are. This will pre-warm the lamp, so when it starts up, the first frame will show a blob already halfway up the lamp. .TP 8 .B \-lava-color \fIcolor\fP Specifies the color of the blobbies. Default: red. .TP 8 .B \-fluid-color \fIcolor\fP Specifies the color of the fluid that the blobbies float in. Default: light blue. .TP 8 .B \-base-color \fIcolor\fP Specifies the color of the lamp base, and the cap on top of the bottle. Default: very dark gray. .TP 8 .B \-table-color \fIcolor\fP Specifies the color of the table that the lamp is sitting on. Default: black (meaning it is invisible.) .TP 8 .B \-fluid-texture \fIfilename\fP An image file to wrap around the glass. Note that on most systems, GL textures must have dimensions that are a power of two. Note also that colors and textures are both applied: so, if you apply a texture and it isn't showing up, try specifying the corresponding color as "white". Otherwise, the combination of the two might be too dark to see. .TP 8 .B \-base-texture \fIfilename\fP An image file to wrap around the base of the lamp, and the cap on top of the bottle. .TP 8 .B \-table-texture \fItexture\fP An image file to spread across the table that the lamp is sitting on. .SH ENVIRONMENT .PP .TP 8 .B DISPLAY to get the default host and display number. .TP 8 .B XENVIRONMENT to get the name of a resource file that overrides the global resources stored in the RESOURCE_MANAGER property. .SH SEE ALSO .BR X (1), .BR xscreensaver (1), http://www.lavaworld.com/ http://www.lavarnd.org/ .SH COPYRIGHT Copyright \(co 2002 by 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. LAVA LITE\(rg and the configuration of the LAVA\(rg brand motion lamp are registered trademarks of Haggerty Enterprises, Inc. The configuration of the globe and base of the motion lamp are registered trademarks of Haggerty Enterprises, Inc. in the U.S.A. and in other countries around the world. .SH AUTHOR Jamie Zawinski xscreensaver-5.36/hacks/glx/menger.man000644 000767 000024 00000004157 12701612221 017774 0ustar00jwzstaff000000 000000 .TH XScreenSaver 1 "" "X Version 11" .SH NAME menger - 3D menger gasket fractal. .SH SYNOPSIS .B menger [\-display \fIhost:display.screen\fP] [\-visual \fIvisual\fP] [\-window] [\-root] [\-delay \fInumber\fP] [\-speed \fInumber\fP] [\-depth \fInumber\fP] [\-no-wander] [\-no-spin] [\-spin \fI[XYZ]\fP] [\-wireframe] [\-fps] .SH DESCRIPTION This draws the three-dimensional variant of the recursive Menger Gasket, a cube-based fractal object analagous to the Sierpinski Tetrahedron. .SH OPTIONS .TP 8 .B \-visual \fIvisual\fP Specify which visual to use. Legal values are the name of a visual class, or the id number (decimal or hex) of a specific visual. .TP 8 .B \-window Draw on a newly-created window. This is the default. .TP 8 .B \-root Draw on the root window. .TP 8 .B \-delay \fInumber\fP Per-frame delay, in microseconds. Default: 30000 (0.03 seconds.). .TP 8 .B \-speed \fInumber\fP Number of frames before changing shape. Default: 150. .TP 8 .B \-depth \fInumber\fP Max depth to descend. Default: 3. You probably don't have enough memory for 6. .TP 8 .B \-wander | \-no-wander Whether the object should wander around the screen. .TP 8 .B \-spin [XYZ] Around which axes should the object spin? .TP 8 .B \-no-spin None. .TP 8 .B \-wireframe Render in wireframe instead of solid. .TP 8 .B \-fps Display the current frame rate, CPU load, and polygon count. .SH ENVIRONMENT .PP .TP 8 .B DISPLAY to get the default host and display number. .TP 8 .B XENVIRONMENT to get the name of a resource file that overrides the global resources stored in the RESOURCE_MANAGER property. .SH SEE ALSO .BR X (1), .BR xscreensaver (1) .SH COPYRIGHT Copyright \(co 2002 by 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. .SH AUTHOR Jamie Zawinski. xscreensaver-5.36/hacks/glx/moebius.man000644 000767 000024 00000003446 12701612221 020162 0ustar00jwzstaff000000 000000 .TH XScreenSaver 1 "" "X Version 11" .SH NAME moebius - Escher's Moebuis Strip II, with ants. .SH SYNOPSIS .B moebius [\-display \fIhost:display.screen\fP] [\-visual \fIvisual\fP] [\-window] [\-root] [-delay \fInumber\fP] [-solidmoebius] [-wireframe] [-noants] [-fps] .SH DESCRIPTION Another M. C. Escher hack by Marcelo Vianna, this one draws ``Moebius Strip II,'' a GL image of ants walking along the surface of a moebius strip. .SH OPTIONS .TP 8 .B \-visual \fIvisual\fP Specify which visual to use. Legal values are the name of a visual class, or the id number (decimal or hex) of a specific visual. .TP 8 .B \-window Draw on a newly-created window. This is the default. .TP 8 .B \-root Draw on the root window. .TP 8 .B \-delay \fInumber\fP Per-frame delay, in microseconds. Default: 20000 (0.02 seconds.). .TP 8 .B \-solidmoebius Solid Floor. .TP 8 .B \-wireframe Render in wireframe instead of solid. .TP 8 .B \-noants | \-no-noants Draw Ants. Boolean. .TP 8 .B \-fps Display the current frame rate, CPU load, and polygon count. .SH ENVIRONMENT .PP .TP 8 .B DISPLAY to get the default host and display number. .TP 8 .B XENVIRONMENT to get the name of a resource file that overrides the global resources stored in the RESOURCE_MANAGER property. .SH SEE ALSO .BR X (1), .BR xscreensaver (1) .SH COPYRIGHT Copyright \(co 2002 by Marcelo Vianna. 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. .SH AUTHOR Marcelo Vianna. xscreensaver-5.36/hacks/glx/molecule.man000644 000767 000024 00000011574 12701612221 020325 0ustar00jwzstaff000000 000000 .TH XScreenSaver 1 "13-Mar-01" "X Version 11" .SH NAME molecule - draws 3D molecular structures .SH SYNOPSIS .B molecule [\-display \fIhost:display.screen\fP] [\-window] [\-root] [\-visual \fIvisual\fP] [\-delay \fImicroseconds\fP] [\-wander] [\-no-wander] [\-spin \fIaxes\fP] [\-no-spin] [\-timeout \fIseconds\fP] [\-labels] [\-no-labels] [\-titles] [\-no-titles] [\-atoms] [\-no-atoms] [\-bonds] [\-no-bonds] [\-shells] [\-no-shells] [\-molecule \fIfile-or-directory\fP] [\-verbose] [\-wireframe] [\-fps] .SH DESCRIPTION The \fImolecule\fP program draws several different representations of molecules. Some common molecules are built in, and it can read PDB (Protein Data Base) files as input. .SH OPTIONS .I molecule accepts the following options: .TP 8 .B \-window Draw on a newly-created window. This is the default. .TP 8 .B \-root Draw on the root window. .TP 8 .B \-install Install a private colormap for the window. .TP 8 .B \-visual \fIvisual\fP\fP Specify which visual to use. Legal values are the name of a visual class, or the id number (decimal or hex) of a specific visual. .TP 8 .B \-fps Display the current frame rate, CPU load, and polygon count. .TP 8 .B \-verbose Print debugging info on stderr about files being loaded, etc. .TP 8 .B \-wander Move the molecules around the screen. .TP 8 .B \-no\-wander Keep the molecule centered on the screen. This is the default. .TP 8 .B \-spin Which axes around which the molecule should spin. The default is "XYZ", meaning rotate it freely in space. "\fB\-spin Z\fP" would rotate the molecule in the plane of the screen while not rotating it into or out of the screen; etc. .TP 8 .B \-no\-spin Don't spin it at all: the same as \fB\-spin ""\fP. .TP 8 .B \-labels Draw labels on the atoms (or the spot where the atoms would be.) This is the default. .TP 8 .B \-no\-labels Do not draw labels on the atoms. .TP 8 .B \-titles Print the name of the molecule and its chemical formula at the top of the screen. .TP 8 .B \-no\-titles Do not print the molecule name. .TP 8 .B \-atoms Represent the atoms as shaded spheres of appropriate sizes. This is the default. .TP 8 .B \-no\-atoms Do not draw spheres for the atoms: only draw bond lines. .TP 8 .B \-bonds Represent the atomic bonds as solid tubes of appropriate thicknesses. This is the default. .TP 8 .B \-no\-bonds Do not draw the bonds: instead, make the spheres for the atoms be larger, for a "space-filling" representation of the molecule. .TP 8 .B \-shells Draw transparent electron shells around the atoms. This only works if bonds are also being drawn. .TP 8 .B \-no\-shells Do not draw electron shells. This is the default. .TP 8 .B \-shell\-alpha When drawing shells, how transparent to make them. Default 0.4. .TP 8 .B \-wireframe Draw a wireframe rendition of the molecule: this will consist only of single-pixel lines for the bonds, and text labels where the atoms go. This will be very fast. .TP 8 .B \-timeout \fIseconds\fP When using the built-in data set, change to a new molecule every this-many seconds. Default is 20 seconds. .TP 8 .B \-molecule \fIfile-or-directory\fP Instead of using the built-in molecules, read one from the given file. This file must be in PDB (Protein Data Base) format. (Note that it's not uncommon for PDB files to contain only the atoms, with no (or little) information about the atomic bonds.) This can also be a directory, in which case, all of the .pdb files in that directory will be loaded. A new one will be displayed at random every few seconds (as per the \fI\-timeout\fP option.) .PP When the molecule is too large (bigger than about 30 angstroms from side to side), the \fI\-label\fP option will be automatically turned off, because otherwise, the labels would overlap and completely obscure the display. When the molecule is around 150 angstroms from side to side, wireframe mode will be turned on (because otherwise it would be too slow.) .SH ENVIRONMENT .PP .TP 8 .B DISPLAY to get the default host and display number. .TP 8 .B XENVIRONMENT to get the name of a resource file that overrides the global resources stored in the RESOURCE_MANAGER property. .SH SEE ALSO .BR X (1), .BR xscreensaver (1) .PP Documentation on the PDB file format: http://www.wwpdb.org/docs.html http://www.rcsb.org/pdb/docs/format/pdbguide2.2/guide2.2_frame.html A good source of PDB files: http://www.umass.edu/microbio/rasmol/whereget.htm http://www.wwpdb.org/docs.html .SH COPYRIGHT Copyright \(co 2001-2005 by 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. .SH AUTHOR Jamie Zawinski xscreensaver-5.36/hacks/glx/morph3d.man000644 000767 000024 00000003223 12701612221 020064 0ustar00jwzstaff000000 000000 .TH XScreenSaver 1 "" "X Version 11" .SH NAME morph3d - 3d morphing objects. .SH SYNOPSIS .B morph3d [\-display \fIhost:display.screen\fP] [\-visual \fIvisual\fP] [\-window] [\-root] [\-count \fInumber\fP] [\-delay \fInumber\fP] [\-fps] .SH DESCRIPTION Another 3d shape-changing GL hack. It has the same shiny-plastic feel as Superquadrics, as many computer-generated objects do... .SH OPTIONS .TP 8 .B \-visual \fIvisual\fP Specify which visual to use. Legal values are the name of a visual class, or the id number (decimal or hex) of a specific visual. .TP 8 .B \-window Draw on a newly-created window. This is the default. .TP 8 .B \-root Draw on the root window. .TP 8 .B \-count \fInumber\fP 0 - 20. Default: 0. .TP 8 .B \-delay \fInumber\fP Per-frame delay, in microseconds. Default: 40000 (0.04 seconds.). .TP 8 .B \-fps Display the current frame rate, CPU load, and polygon count. .SH ENVIRONMENT .PP .TP 8 .B DISPLAY to get the default host and display number. .TP 8 .B XENVIRONMENT to get the name of a resource file that overrides the global resources stored in the RESOURCE_MANAGER property. .SH SEE ALSO .BR X (1), .BR xscreensaver (1) .SH COPYRIGHT Copyright \(co 2002 by Marcelo Vianna. 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. .SH AUTHOR Marcelo Vianna. xscreensaver-5.36/hacks/glx/pipes.man000644 000767 000024 00000004326 12701612221 017635 0ustar00jwzstaff000000 000000 .TH XScreenSaver 1 "" "X Version 11" .SH NAME pipes - fill the screen with a plumbing system. .SH SYNOPSIS .B pipes [\-display \fIhost:display.screen\fP] [\-visual \fIvisual\fP] [\-window] [\-root] [-count 0] [-count 1] [-cycles \fInumber\fP] [-size \fInumber\fP] [-factory \fInumber\fP] [-delay \fInumber\fP] [-no-fisheye] [-tightturns] [-db] [-fps] .SH DESCRIPTION If you've ever been in the same room as a Windows NT machine, you've probably seen this GL hack. It fills the screen with a plumbing system. .SH OPTIONS .TP 8 .B \-visual \fIvisual\fP Specify which visual to use. Legal values are the name of a visual class, or the id number (decimal or hex) of a specific visual. .TP 8 .B \-window Draw on a newly-created window. This is the default. .TP 8 .B \-root Draw on the root window. .TP 8 .B \-count 0 Curved Pipes. .TP 8 .B \-count 1 Ball Joints. .TP 8 .B \-cycles \fInumber\fP Number of pipe systems to draw at once. Default: 5. .TP 8 .B \-size \fInumber\fP Length of each pipe system. Default: 500. .TP 8 .B \-factory \fInumber\fP How much gadgetry to create; Useful range is 0-10. Default: 2. .TP 8 .B \-delay \fInumber\fP How long (in microseconds) to sleep between frames. Default: 10000. .TP 8 .B \-fisheye | \-no-fisheye Whether to use a fisheye lens. .TP 8 .B \-tightturns | \-no-tightturns Whether to allow tight turns. .TP 8 .B \-db | \-no-db Whether to double-buffer. .TP 8 .B \-fps Display the current frame rate, CPU load, and polygon count. .SH ENVIRONMENT .PP .TP 8 .B DISPLAY to get the default host and display number. .TP 8 .B XENVIRONMENT to get the name of a resource file that overrides the global resources stored in the RESOURCE_MANAGER property. .SH SEE ALSO .BR X (1), .BR xscreensaver (1) .SH COPYRIGHT Copyright \(co 2002 by Marcelo Vianna. 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. .SH AUTHOR Marcelo Vianna. xscreensaver-5.36/hacks/glx/pulsar.man000644 000767 000024 00000005066 12701612221 020025 0ustar00jwzstaff000000 000000 .TH XScreenSaver 1 "" "X Version 11" .SH NAME pulsar - intersecting planes, alpha blending, fog, and textures. .SH SYNOPSIS .B pulsar [\-display \fIhost:display.screen\fP] [\-visual \fIvisual\fP] [\-window] [\-root] [\-no-light] [\-wire] [\-delay \fInumber\fP] [\-quads \fInumber\fP] [\-image \fIfile\fP] [\-light] [\-fog] [\-texture] [\-mipmap] [\-no-blend] [\-antialias] [\-texture_quality] [\-do_depth] [\-fps] .SH DESCRIPTION Draws some intersecting planes, making use of alpha blending, fog, textures, and mipmaps, plus a ``frames per second'' meter so that you can tell how fast your graphics card is... Requires OpenGL. .SH OPTIONS .TP 8 .B \-visual \fIvisual\fP Specify which visual to use. Legal values are the name of a visual class, or the id number (decimal or hex) of a specific visual. .TP 8 .B \-window Draw on a newly-created window. This is the default. .TP 8 .B \-root Draw on the root window. .TP 8 .B \-light | \-no-light Use Flat Coloring. .TP 8 .B \-wire Render in wireframe instead of solid. .TP 8 .B \-delay \fInumber\fP Per-frame delay, in microseconds. Default: 10000 (0.01 seconds.). .TP 8 .B \-image \fIfile\fP The texture map to use. .TP 8 .B \-quads \fInumber\fP Quad Count. 1 - 50. Default: 5. .TP 8 .B \-light | \-no-light Whether to enable lighting. .TP 8 .B \-fog | \-no-fog Whether to enable fog. .TP 8 .B \-texture | \-no-texture Whether to enable texturing. .TP 8 .B \-mipmap | \-no-mipmap Whether to enable texture mipmaps. .TP 8 .B \-blend | \-no-blend Whether to enable blending. .TP 8 .B \-antialias | \-no-antialias Whether to anti-alias lines. .TP 8 .B \-texture_quality | \-no-texture_quality Whether to enable texture filtering. .TP 8 .B \-do_depth | \-no-do_depth Whether to enable depth buffer. .TP 8 .B \-fps Display the current frame rate, CPU load, and polygon count. .SH ENVIRONMENT .PP .TP 8 .B DISPLAY to get the default host and display number. .TP 8 .B XENVIRONMENT to get the name of a resource file that overrides the global resources stored in the RESOURCE_MANAGER property. .SH SEE ALSO .BR X (1), .BR xscreensaver (1) .SH COPYRIGHT Copyright \(co 2002 by David Konerding. 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. .SH AUTHOR David Konerding. xscreensaver-5.36/hacks/glx/queens.man000644 000767 000024 00000004074 12701612221 020015 0ustar00jwzstaff000000 000000 .TH XScreenSaver 1 "May 2002" .SH NAME queens \- n queens screensaver .SH SYNOPSIS .B queens [\-display \fIhost:display.screen\fP] [\-window] [\-root] [\-install] [\-visual \fIvisual\fP] [\-delay \fImicroseconds\fP] [\-wireframe] [\-fps] .SH DESCRIPTION The \fIqueens\fP program solves the n-queens problem (where, in this program, N is between 5 and 10 queens) using a straightforward backtracking algorithm. The problem is: how may one place N queens on an NxN chessboard such that no queen can attack a sister? .SH OPTIONS .I queens accepts the following options: .TP 8 .B \-window Draw on a newly-created window. This is the default. .TP 8 .B \-root Draw on the root window. .TP 8 .B \-install Install a private colormap for the window. .TP 8 .B \-visual \fIvisual\fP\fP Specify which visual to use. Legal values are the name of a visual class, or the id number (decimal or hex) of a specific visual. .TP 8 .B \-wireframe Render in wireframe instead of solid. .B \-fps Display the current frame rate, CPU load, and polygon count. .SH ENVIRONMENT .PP .TP 8 .B DISPLAY to get the default host and display number. .TP 8 .B XENVIRONMENT to get the name of a resource file that overrides the global resources stored in the RESOURCE_MANAGER property. .SH BUGS It's not unknown for this and other OpenGL hacks to fail under hardware accelaration (UtahGLX) and take the X server with them. Texture images must be 16x16 or 32x32 or 64x64 etc. .SH SEE ALSO .BR X (1), .BR xscreensaver (1) .BR xscreensaver\-demo (1), .BR xscreensaver\-getimage (1) .SH COPYRIGHT Copyright \(co 2002 by Blair Tennessy. 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. .SH AUTHOR Blair Tennessy , 20-April-2002. xscreensaver-5.36/hacks/glx/rubik.man000644 000767 000024 00000003620 12701612221 017625 0ustar00jwzstaff000000 000000 .TH XScreenSaver 1 "" "X Version 11" .SH NAME rubik - screen saver that solves Rubik's Cube. .SH SYNOPSIS .B rubik [\-display \fIhost:display.screen\fP] [\-visual \fIvisual\fP] [\-window] [\-root] [\-count \fInumber\fP] [\-cycles \fInumber\fP] [\-delay \fInumber\fP] [\-size \fInumber\fP] [\-hideshuffling] [\-fps] .SH DESCRIPTION Draws a Rubik's Cube that rotates in three dimensions and repeatedly shuffles and solves itself. .SH OPTIONS .TP 8 .B \-visual \fIvisual\fP Specify which visual to use. Legal values are the name of a visual class, or the id number (decimal or hex) of a specific visual. .TP 8 .B \-window Draw on a newly-created window. This is the default. .TP 8 .B \-root Draw on the root window. .TP 8 .B \-count \fInumber\fP Count. -100 - 100. Default: -30. .TP 8 .B \-cycles \fInumber\fP Timeout. 0 - 60. Default: 5. .TP 8 .B \-delay \fInumber\fP Per-frame delay, in microseconds. Default: 40000 (0.04 seconds.). .TP 8 .B \-size \fInumber\fP Size. -20 - 20. Default: -6. .TP 8 .B \-hideshuffling | \-no-hideshuffling Show Shuffling. Boolean. .TP 8 .B \-fps Display the current frame rate, CPU load, and polygon count. .SH ENVIRONMENT .PP .TP 8 .B DISPLAY to get the default host and display number. .TP 8 .B XENVIRONMENT to get the name of a resource file that overrides the global resources stored in the RESOURCE_MANAGER property. .SH SEE ALSO .BR X (1), .BR xscreensaver (1) .SH COPYRIGHT Copyright \(co 2002 by Marcelo Vianna. 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. .SH AUTHOR Marcelo Vianna. xscreensaver-5.36/hacks/glx/sballs.man000644 000767 000024 00000005673 12701612221 020003 0ustar00jwzstaff000000 000000 .de EX \"Begin example .ne 5 .if n .sp 1 .if t .sp .5 .nf .in +.5i .. .de EE .fi .in -.5i .if n .sp 1 .if t .sp .5 .. .TH XScreenSaver 1 "03-Oct-01" "X Version 11" .SH NAME sballs - draws balls spinning like crazy in GL .SH SYNOPSIS .B sballs [\-display \fIhost:display.screen\fP] [\-window] [\-root] [\-visual \fIvisual\fP] [\-delay \fImicroseconds\fP] [\-object \fIobject_number\fP] [\-cycles \fIsphere_speed\fP] [\-size \fIviewport_size\fP] [\-texture] [\-no-texture] [\-wireframe] [\-no-wireframe] [\-trackmouse] [\-no-trackmouse] [\-fps] .SH DESCRIPTION The \fIsballs\fP program draws an animation of balls spinning like crazy in GL. .SH OPTIONS .I sballs accepts the following options: .TP 8 .B \-window Draw on a newly-created window. This is the default. .TP 8 .B \-root Draw on the root window. .TP 8 .B \-install Install a private colormap for the window. .TP 8 .B \-visual \fIvisual\fP Specify which visual to use. Legal values are the name of a visual class, or the id number (decimal or hex) of a specific visual. .TP 8 .B \-fps Display the current frame rate, CPU load, and polygon count. .TP 8 .B \-object \fIobject_number\fP\fP Specify how the spheres are grouped (forming an object). Objects are: .TP 10 .B 1 tetrahedron .TP 10 .B 2 cube. This is the default. .TP 10 .B 3 octahedron .TP 10 .B 4 dodecahedron .TP 10 .B 5 icosahedron .TP 10 .B 6 plane .TP 10 .B 7 pyramid .TP 10 .B 8 star .TP 8 .B \-size \fIviewport_size\fP\fP Viewport of GL scene is specified size if greater than 32 and less than screensize. Default value is 0, meaning full screensize. .TP 8 .B \-texture Show a textured background and spheres. This is the default. .TP 8 .B \-no\-texture Disables texturing the animation. .TP 8 .B \-trackmouse Let the mouse be a joystick to change the view of the animation. This implies .I \-no\-wander. .TP 8 .B \-no\-trackmouse Disables mouse tracking. This is the default. .TP 8 .B \-wire Draw a wireframe rendition of the spheres. .SH ENVIRONMENT .PP .TP 8 .B DISPLAY to get the default host and display number. .TP 8 .B XENVIRONMENT to get the name of a resource file that overrides the global resources stored in the RESOURCE_MANAGER property. .SH SEE ALSO .BR X (1), .BR xscreensaver (1) .SH COPYRIGHT Copyright \(co 2001 by Eric Lassauge. 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. The original code for this mode was written by Mustata Bogdan (LoneRunner) and can be found at http://www.cfxweb.net/lonerunner/ .SH AUTHOR Mustata Bogdan (LoneRunner) Eric Lassauge xscreensaver-5.36/hacks/glx/sierpinski3d.man000644 000767 000024 00000003626 12701612221 021126 0ustar00jwzstaff000000 000000 .TH XScreenSaver 1 "" "X Version 11" .SH NAME sierpinski3d - 3D Sierpinski triangle fractal. .SH SYNOPSIS .B sierpinski3d [\-display \fIhost:display.screen\fP] [\-visual \fIvisual\fP] [\-window] [\-root] [\-delay \fInumber\fP] [\-speed \fInumber\fP] [\-depth \fInumber\fP] [\-wireframe] [\-fps] .SH DESCRIPTION This draws the three-dimensional variant of the recursive Sierpinski triangle fractal, using GL. .SH OPTIONS .TP 8 .B \-visual \fIvisual\fP Specify which visual to use. Legal values are the name of a visual class, or the id number (decimal or hex) of a specific visual. .TP 8 .B \-window Draw on a newly-created window. This is the default. .TP 8 .B \-root Draw on the root window. .TP 8 .B \-delay \fInumber\fP Per-frame delay, in microseconds. Default: 20000 (0.02 seconds.). .TP 8 .B \-speed \fInumber\fP Number of frames before changing shape. Default: 150. .TP 8 .B \-depth \fInumber\fP Max depth to descend. Default: 5. You probably don't have enough memory for 6. .TP 8 .B \-wireframe Render in wireframe instead of solid. .TP 8 .B \-fps Display the current frame rate, CPU load, and polygon count. .SH ENVIRONMENT .PP .TP 8 .B DISPLAY to get the default host and display number. .TP 8 .B XENVIRONMENT to get the name of a resource file that overrides the global resources stored in the RESOURCE_MANAGER property. .SH SEE ALSO .BR X (1), .BR xscreensaver (1) .SH COPYRIGHT Copyright \(co 2002 by Tim Robinson and 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. .SH AUTHOR Tim Robinson and Jamie Zawinski. xscreensaver-5.36/hacks/glx/spheremonics.man000644 000767 000024 00000004642 12701612221 021215 0ustar00jwzstaff000000 000000 .TH XScreenSaver 1 "" "X Version 11" .SH NAME spheremonics - 3d spherical harmonic shapes. .SH SYNOPSIS .B spheremonics [\-display \fIhost:display.screen\fP] [\-visual \fIvisual\fP] [\-window] [\-root] [\-delay \fInumber\fP] [\-duration \fInumber\fP] [\-resolution \fInumber\fP] [\-wander] [\-no-spin] [\-spin \fI[XYZ]\fP] [\-wireframe] [\-no-smooth] [\-no-grid] [\-bbox] [\-fps] .SH DESCRIPTION These closed objects are commonly called spherical harmonics, although they are only remotely related to the mathematical definition found in the solution to certain wave functions, most notable the eigenfunctions of angular momentum operators. .SH OPTIONS .TP 8 .B \-visual \fIvisual\fP Specify which visual to use. Legal values are the name of a visual class, or the id number (decimal or hex) of a specific visual. .TP 8 .B \-window Draw on a newly-created window. This is the default. .TP 8 .B \-root Draw on the root window. .TP 8 .B \-delay \fInumber\fP Per-frame delay, in microseconds. Default: 30000 (0.03 seconds.). .TP 8 .B \-duration \fInumber\fP Duration. 5 - 1000. Default: 100. .TP 8 .B \-resolution \fInumber\fP Resolution. 5 - 100. Default: 64. .TP 8 .B \-wander | \-no-wander Whether the object should wander around the screen. .TP 8 .B \-spin \fI[XYZ]\fP Around which axes should the object spin? .TP 8 .B \-no-spin Don't spin. .TP 8 .B \-wireframe Render in wireframe instead of solid. .TP 8 .B \-smooth | \-no-smooth Smoothed Lines. Boolean. .TP 8 .B \-grid | \-no-grid Draw Grid. Boolean. .TP 8 .B \-bbox | \-no-bbox Draw Bounding Box. Boolean. .TP 8 .B \-fps Display the current frame rate, CPU load, and polygon count. .SH ENVIRONMENT .PP .TP 8 .B DISPLAY to get the default host and display number. .TP 8 .B XENVIRONMENT to get the name of a resource file that overrides the global resources stored in the RESOURCE_MANAGER property. .SH SEE ALSO .BR X (1), .BR xscreensaver (1) .SH COPYRIGHT Copyright \(co 2002 by Paul Bourke and 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. .SH AUTHOR Paul Bourke and Jamie Zawinski. xscreensaver-5.36/hacks/glx/sproingies.man000644 000767 000024 00000003630 12701612221 020674 0ustar00jwzstaff000000 000000 .TH XScreenSaver 1 "" "X Version 11" .SH NAME sproingies - Q-Bert meets Marble Madness! .SH SYNOPSIS .B sproingies [\-display \fIhost:display.screen\fP] [\-visual \fIvisual\fP] [\-window] [\-root] [\-count \fInumber\fP] [\-delay \fInumber\fP] [\-size \fInumber\fP] [\-no\-fall] [\-wireframe] [\-fps] .SH DESCRIPTION Q-Bert meets Marble Madness! .SH OPTIONS .TP 8 .B \-visual \fIvisual\fP Specify which visual to use. Legal values are the name of a visual class, or the id number (decimal or hex) of a specific visual. .TP 8 .B \-window Draw on a newly-created window. This is the default. .TP 8 .B \-root Draw on the root window. .TP 8 .B \-count \fInumber\fP How many sproingies to draw at once. Default: 5. .TP 8 .B \-delay \fInumber\fP Per-frame delay, in microseconds. Default: 25000 (0.03 seconds.). .TP 8 .B \-size \fInumber\fP How much to scale the image down. Default 0 (full screen.) .TP 8 .B \-no\-fall Make sproingies "smart", so they do not fall down the edge. .TP 8 .B \-wireframe Render in wireframe instead of solid. .TP 8 .B \-fps Display the current frame rate, CPU load, and polygon count. .SH ENVIRONMENT .PP .TP 8 .B DISPLAY to get the default host and display number. .TP 8 .B XENVIRONMENT to get the name of a resource file that overrides the global resources stored in the RESOURCE_MANAGER property. .SH SEE ALSO .BR X (1), .BR xscreensaver (1) .SH COPYRIGHT Copyright \(co 2002 by Ed Mackey. 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. .SH AUTHOR Ed Mackey. Some additional code by Sergio Gutiérrez "Sergut". xscreensaver-5.36/hacks/glx/stairs.man000644 000767 000024 00000003073 12701612221 020020 0ustar00jwzstaff000000 000000 .TH XScreenSaver 1 "" "X Version 11" .SH NAME stairs - Escher's infinite staircase. .SH SYNOPSIS .B stairs [\-display \fIhost:display.screen\fP] [\-visual \fIvisual\fP] [\-window] [\-root] [\-delay \fInumber\fP] [\-wireframe] [\-fps] .SH DESCRIPTION This draws an "infinite" staircase. .SH OPTIONS .TP 8 .B \-visual \fIvisual\fP Specify which visual to use. Legal values are the name of a visual class, or the id number (decimal or hex) of a specific visual. .TP 8 .B \-window Draw on a newly-created window. This is the default. .TP 8 .B \-root Draw on the root window. .TP 8 .B \-delay \fInumber\fP Per-frame delay, in microseconds. Default: 20000 (0.02 seconds.). .TP 8 .B \-wireframe Render in wireframe instead of solid. .TP 8 .B \-fps Display the current frame rate, CPU load, and polygon count. .SH ENVIRONMENT .PP .TP 8 .B DISPLAY to get the default host and display number. .TP 8 .B XENVIRONMENT to get the name of a resource file that overrides the global resources stored in the RESOURCE_MANAGER property. .SH SEE ALSO .BR X (1), .BR xscreensaver (1) .SH COPYRIGHT Copyright \(co 2002 by Marcelo Vianna. 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. .SH AUTHOR Marcelo Vianna. xscreensaver-5.36/hacks/glx/starwars.man000644 000767 000024 00000013301 12701612221 020354 0ustar00jwzstaff000000 000000 .de EX \"Begin example .ne 5 .if n .sp 1 .if t .sp .5 .nf .in +.5i .. .de EE .fi .in -.5i .if n .sp 1 .if t .sp .5 .. .TH XScreenSaver 1 "25-Jul-98" "X Version 11" .SH NAME starwars - draws a perspective text crawl, like at the beginning of the movie .SH SYNOPSIS .B starwars [\-display \fIhost:display.screen\fP] [\-window] [\-root] [\-visual \fIvisual\fP] [\-delay \fImicroseconds\fP] [\-program \fIcommand\fP] [\-size \fIinteger\fP ] [\-columns \fIinteger\fP] [\-wrap | \-no\-wrap] [\-left | \-center | \-right] [\-lines \fIinteger\fP] [\-spin \fIfloat\fP] [\-steps \fIinteger\fP] [\-delay \fIusecs\fP] [\-font \fIxlfd\fP] [\-no\-textures] [\-no\-smooth] [\-no\-thick] [\-fps] .SH DESCRIPTION The \fIstarwars\fP program runs another program to generate a stream of text, then animates that text receeding into the background at an angle, in front of a star field. .SH OPTIONS .I starwars accepts the following options: .TP 8 .B \-window Draw on a newly-created window. This is the default. .TP 8 .B \-root Draw on the root window. .TP 8 .B \-install Install a private colormap for the window. .TP 8 .B \-visual \fIvisual\fP\fP Specify which visual to use. Legal values are the name of a visual class, or the id number (decimal or hex) of a specific visual. .TP 8 .B \-program \fIsh-command\fP The command to run to generate the text to display. This option may be any string acceptable to /bin/sh. The program will be run at the end of a pipe, and any characters that it prints to \fIstdout\fP will be printed on the starwars window. If the program exits, it will be launched again after we have processed all the text it produced. Note that starwars is \fInot\fP a terminal emulator: programs that try to directly address the screen will not do what you might expect. This program merely draws the characters on the screen left to right, top to bottom, in perspective. Lines (may) wrap when they reach the right edge. In other words, programs like .BR fortune (1) will work, but programs like .BR top (1) won't. Some examples: .EX starwars -program 'cat /usr/src/linux*/README' starwars -columns 30 -program 'ping www.starwars.com' starwars -left -no-wrap -program 'ps -auxwwf' starwars -left -no-wrap -columns 45 -program 'top -bn1' starwars -left -columns 40 -program 'od -txC /dev/urandom' starwars -font fixed -program 'od -txC /dev/urandom' .EE .TP 8 .B \-size \fIinteger\fP How large a font to use, in points. (Well, in some arbitrary unit we're calling "points" for the sake of argument.) Default: 24. .TP 8 .B \-columns \fIinteger\fP How many columns of text should be visible on the bottom line of the screen. Default: 60. Only one of \fI\-columns\fP and \fI\-size\fP may be specified; if both are specified, \fI\-columns\fP takes priority. .TP 8 .B \-wrap Word-wrap lines when they reach the rightmost column. This is the default. .TP 8 .B \-no\-wrap Do not word-wrap: just let the lines go off the right side of the screen. .TP 8 .B \-left | \-center | \-right Whether to align the text flush left, centered, or flush right. The default is centered. .TP 8 .B \-lines \fIinteger\fP How many lines should be allowed to be on the screen before they fall off the end. The default is 125. .TP 8 .B \-spin \fIfloat\fP The star field on the background slowly rotates. This is how fast. The default is 0.03. .TP 8 .B \-steps \fIinteger\fP How many steps should be used to scroll a single line. The default is 35. If the animation looks jerky to you, increase this number. .TP 8 .B \-delay \fIusecs\fP The delay between steps of the animation; default is 40000 (1/25th second.) .TP 8 .B \-font \fIfont-name\fP The name of the font to use. For best effect, this should be a large font (at least 36 points.) The bigger the font, the better looking the characters will be. Note that the size of this font affects only the clarity of the characters, not their size on the screen: for that, use the \fI\-size\fP or \fI\-columns\fP options. Default: -*-utopia-bold-r-normal-*-*-720-*-*-*-*-iso8859-1 .TP 8 .B \-no\-textures Instead of texture-mapping a real font to render the text, use a built-in font composed of line segments. On graphics cards without texture support, the line-segment font will have much better performance. .TP 8 .B \-no\-smooth When using the line-segment font, turn off anti-aliasing of the lines used to draw the font. This will make the text blockier, but may improve performance. .TP 8 .B \-no\-thick When using the line-segment font, turn off use of thick lines for the characters that are close to the foreground. This will make the text appear unnaturally skinny, but may improve performance. .TP 8 .B \-fps Display the current frame rate, CPU load, and polygon count. .SH ENVIRONMENT .PP .TP 8 .B DISPLAY to get the default host and display number. .TP 8 .B XENVIRONMENT to get the name of a resource file that overrides the global resources stored in the RESOURCE_MANAGER property. .SH SEE ALSO .BR xscreensaver (1), .BR xscreensaver-text (1), .BR fortune (1), .BR phosphor (MANSUFFIX), .BR apple2 (MANSUFFIX), .BR fontglide (MANSUFFIX), .BR ljlatest (MANSUFFIX), .BR dadadodo (1), .BR webcollage (MANSUFFIX), .BR driftnet (1) .BR EtherPEG , .BR EtherPeek .SH COPYRIGHT Copyright \(co 1998-2005 by Jamie Zawinski and Claudio Matsuoka. 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. .SH AUTHOR Jamie Zawinski and Claudio Matauoka xscreensaver-5.36/hacks/glx/stonerview.man000644 000767 000024 00000003063 12701612221 020717 0ustar00jwzstaff000000 000000 .TH XScreenSaver 1 "" "X Version 11" .SH NAME stonerview - 3D undulating ribbons of squares. .SH SYNOPSIS .B stonerview [\-display \fIhost:display.screen\fP] [\-visual \fIvisual\fP] [\-window] [\-root] [\-wireframe] [\-fps] .SH DESCRIPTION Chains of colorful squares dance around each other in complex spiral patterns. This is a clone of the SGI "electropaint" screen saver. .SH OPTIONS .TP 8 .B \-visual \fIvisual\fP Specify which visual to use. Legal values are the name of a visual class, or the id number (decimal or hex) of a specific visual. .TP 8 .B \-window Draw on a newly-created window. This is the default. .TP 8 .B \-root Draw on the root window. .TP 8 .B \-wireframe Render in wireframe instead of solid. .TP 8 .B \-fps Display the current frame rate, CPU load, and polygon count. .SH ENVIRONMENT .PP .TP 8 .B DISPLAY to get the default host and display number. .TP 8 .B XENVIRONMENT to get the name of a resource file that overrides the global resources stored in the RESOURCE_MANAGER property. .SH SEE ALSO .BR X (1), .BR xscreensaver (1) .SH COPYRIGHT Copyright \(co 2002 by Andrew Plotkin. 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. .SH AUTHOR Andrew Plotkin. xscreensaver-5.36/hacks/glx/superquadrics.man000644 000767 000024 00000003675 12701612221 021415 0ustar00jwzstaff000000 000000 .TH XScreenSaver 1 "" "X Version 11" .SH NAME superquadrics - morphing 3d shapes. .SH SYNOPSIS .B superquadrics [\-display \fIhost:display.screen\fP] [\-visual \fIvisual\fP] [\-window] [\-root] [\-delay \fInumber\fP] [\-spinspeed \fInumber\fP] [\-count \fInumber\fP] [\-cycles \fInumber\fP] [\-wireframe] [\-fps] .SH DESCRIPTION Ed Mackey reports that he wrote the first version of this program in BASIC on a Commodore 64 in 1987, as a 320x200 black and white wireframe. Now it is GL and has specular reflections. .SH OPTIONS .TP 8 .B \-visual \fIvisual\fP Specify which visual to use. Legal values are the name of a visual class, or the id number (decimal or hex) of a specific visual. .TP 8 .B \-window Draw on a newly-created window. This is the default. .TP 8 .B \-root Draw on the root window. .TP 8 .B \-delay \fInumber\fP Per-frame delay, in microseconds. Default: 40000 (0.04 seconds.). .TP 8 .B \-spinspeed \fInumber\fP 0.1 - 15.0. Default: 5.0. .TP 8 .B \-count \fInumber\fP 0 - 100. Default: 25. .TP 8 .B \-cycles \fInumber\fP 0 - 100. Default: 40. .TP 8 .B \-wireframe Render in wireframe instead of solid. .TP 8 .B \-fps Display the current frame rate, CPU load, and polygon count. .SH ENVIRONMENT .PP .TP 8 .B DISPLAY to get the default host and display number. .TP 8 .B XENVIRONMENT to get the name of a resource file that overrides the global resources stored in the RESOURCE_MANAGER property. .SH SEE ALSO .BR X (1), .BR xscreensaver (1) .SH COPYRIGHT Copyright \(co 2002 by Ed Mackey. 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. .SH AUTHOR Ed Mackey. xscreensaver-5.36/hacks/glx/xscreensaver-gl-helper.man000644 000767 000024 00000002270 12701612223 023100 0ustar00jwzstaff000000 000000 .TH XScreenSaver 1 "5-Nov-00" "X Version 11" .SH NAME xscreensaver-gl-helper - figure out which X visual to use for GL programs .SH SYNOPSIS .B xscreensaver-gl-helper [\-display \fIhost:display.screen\fP] .SH DESCRIPTION This program prints the ID of the visual that should be used for proper operation of OpenGL programs. This program only exists so that the .BR xscreensaver (1) daemon does not need to link against the OpenGL library. .SH ENVIRONMENT .PP .TP 8 .B DISPLAY to get the default host, display, and screen number. .SH SEE ALSO .BR X (1), .BR xdpyinfo (1), .BR xglinfo (1), .BR glxinfo (1), .BR glxdpyinfo (1), .BR xscreensaver (1), .BR xscreensaver\-demo (1), .BR xscreensaver\-command (1) .SH COPYRIGHT Copyright \(co 2000 by 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. xscreensaver-5.36/hacks/glx/endgame.man000644 000767 000024 00000004052 12701612221 020111 0ustar00jwzstaff000000 000000 .TH XScreenSaver 1 "5-May-2004" .SH NAME endgame \- endgame chess screensaver .SH SYNOPSIS .B endgame [\-display \fIhost:display.screen\fP] [\-window] [\-root] [\-install] [\-visual \fIvisual\fP] [\-delay \fImicroseconds\fP] [\-wireframe] [\-fps] .SH DESCRIPTION endgame replays a brilliant chess ending .SH OPTIONS .I endgame accepts the following options: .TP 8 .B \-window Draw on a newly-created window. This is the default. .TP 8 .B \-root Draw on the root window. .TP 8 .B \-install Install a private colormap for the window. .TP 8 .B \-shadows Project pieces against the board with dark blend. .TP 8 .B \-reflections Reflect pieces in light board squares. .TP 8 .B \-classic Use the original low-polygon piece models. .TP 8 .B \-visual \fIvisual\fP\fP Specify which visual to use. Legal values are the name of a visual class, or the id number (decimal or hex) of a specific visual. .TP 8 .B \-wireframe Render in wireframe instead of solid. .B \-fps Display the current frame rate, CPU load, and polygon count. .SH ENVIRONMENT .PP .TP 8 .B DISPLAY to get the default host and display number. .TP 8 .B XENVIRONMENT to get the name of a resource file that overrides the global resources stored in the RESOURCE_MANAGER property. .SH BUGS It's not unknown for this and other OpenGL hacks to fail under hardware accelaration (UtahGLX) and take the X server with them. Texture images must be 16x16 or 32x32 or 64x64 etc. .SH SEE ALSO .BR X (1), .BR xscreensaver (1) .BR xscreensaver\-demo (1), .BR xscreensaver\-getimage (1) .SH COPYRIGHT Copyright \(co 2002 by Blair Tennessy. 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. .SH AUTHOR Blair Tennessy , 20-April-2002. xscreensaver-5.36/hacks/glx/flurry.man000644 000767 000024 00000003072 12701612221 020035 0ustar00jwzstaff000000 000000 .TH XScreenSaver 1 "" "X Version 11" .SH NAME flurry - a colorful particle system .SH SYNOPSIS .B flurry [\-display \fIhost:display.screen\fP] [\-visual \fIvisual\fP] [\-window] [\-root] [\-preset ] [\-fps] .SH DESCRIPTION This is a port of the OSX screensaver flurry. .SH OPTIONS .TP 8 .B \-visual \fIvisual\fP Specify which visual to use. Legal values are the name of a visual class, or the id number (decimal or hex) of a specific visual. .TP 8 .B \-window Draw on a newly-created window. This is the default. .TP 8 .B \-root Draw on the root window. .TP 8 .B \-preset Select a preset (classic, fire, water, psychedelic, rgb, binary, random, insane) (Insane will never be selected at random, because it requires lots of CPU/GPU power) .TP 8 .B \-fps Display the current frame rate, CPU load, and polygon count. .TP 8 .SH ENVIRONMENT .PP .TP 8 .B DISPLAY to get the default host and display number. .TP 8 .B XENVIRONMENT to get the name of a resource file that overrides the global resources stored in the RESOURCE_MANAGER property. .SH AUTHORS OSX screensaver by Calum Robinson http://homepage.mac.com/calumr xscreensaver port by Tobias Sargeant .SH POSTCARDS If you really like it, send me a postcard (after all, you're getting this for free!). Please check this address by downloading the latest version of Flurry just before you send me a postcard - I may have moved. .PD 0 Calum Robinson .P 133 Sydenham Avenue .P Belfast .P Northern Ireland .P BT4 2DQ .PD 0 .SH SEE ALSO .BR X (1), .BR xscreensaver (1) .SH COPYRIGHT xscreensaver-5.36/hacks/glx/glblur.man000644 000767 000024 00000004603 12701612221 020002 0ustar00jwzstaff000000 000000 .TH XScreenSaver 1 "" "X Version 11" .SH NAME glblur - 3D radial blur texture fields .SH SYNOPSIS .B glblur [\-display \fIhost:display.screen\fP] [\-visual \fIvisual\fP] [\-window] [\-root] [\-delay \fInumber\fP] [\-blursize \fInumber\fP] [\-no-wander] [\-no-spin] [\-spin \fI[XYZ]\fP] [\-fps] .SH DESCRIPTION This program draws a box and a few line segments, and generates a radial blur outward from it. This creates flowing field effects. This is done by rendering the scene into a small texture, then repeatedly rendering increasingly-enlarged and increasingly-transparent versions of that texture onto the frame buffer. As such, it's quite graphics intensive: don't bother trying to run this if you don't have hardware-accelerated texture support. It will hurt your machine bad. .SH OPTIONS .TP 8 .B \-visual \fIvisual\fP Specify which visual to use. Legal values are the name of a visual class, or the id number (decimal or hex) of a specific visual. .TP 8 .B \-window Draw on a newly-created window. This is the default. .TP 8 .B \-root Draw on the root window. .TP 8 .B \-delay \fInumber\fP Per-frame delay, in microseconds. Default: 10000 (0.01 seconds.). .TP 8 .B \-blursize \fInumber\fP How many copies of the scene should be laid down to make the vapor trail. Default: 15. Larger numbers create smoother fields, but are slower. .TP 8 .B \-wander | \-no-wander Whether the object should wander around the screen. .TP 8 .B \-spin [XYZ] Around which axes should the object spin? .TP 8 .B \-no-spin None. .TP 8 .B \-fps Display the current frame rate, CPU load, and polygon count. .SH ENVIRONMENT .PP .TP 8 .B DISPLAY to get the default host and display number. .TP 8 .B XENVIRONMENT to get the name of a resource file that overrides the global resources stored in the RESOURCE_MANAGER property. .SH SEE ALSO .BR X (1), .BR xscreensaver (1) .SH COPYRIGHT Copyright \(co 2002 by 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. .SH AUTHOR Jamie Zawinski, with inspiration from a tutorial by Dario Corno. xscreensaver-5.36/hacks/glx/atunnel.man000644 000767 000024 00000004122 12701612221 020155 0ustar00jwzstaff000000 000000 .de EX \"Begin example .ne 5 .if n .sp 1 .if t .sp .5 .nf .in +.5i .. .de EE .fi .in -.5i .if n .sp 1 .if t .sp .5 .. .TH XScreenSaver 1 "12-Feb-03" "X Version 11" .SH NAME atunnel - hypnotic GL tunnel journey .SH SYNOPSIS .B sballs [\-display \fIhost:display.screen\fP] [\-window] [\-root] [\-visual \fIvisual\fP] [\-delay \fImicroseconds\fP] [\-light] [\-no-light] [\-wire] [\-no-wire] [\-texture] [\-no-texture] [\-fps] .SH DESCRIPTION The \fIatunnel\fP program draws an animation of a journey in a GL tunnel. .SH OPTIONS .I sballs accepts the following options: .TP 8 .B \-window Draw on a newly-created window. This is the default. .TP 8 .B \-root Draw on the root window. .TP 8 .B \-install Install a private colormap for the window. .TP 8 .B \-visual \fIvisual\fP Specify which visual to use. Legal values are the name of a visual class, or the id number (decimal or hex) of a specific visual. .TP 8 .B \-fps Display the current frame rate, CPU load, and polygon count. .TP 8 .B \-texture Show a textured tunnel. This is the default. .TP 8 .B \-no\-texture Disables texturing the animation. .TP 8 .B \-wire Draw a wireframe rendition of the tunnel. .SH ENVIRONMENT .PP .TP 8 .B DISPLAY to get the default host and display number. .TP 8 .B XENVIRONMENT to get the name of a resource file that overrides the global resources stored in the RESOURCE_MANAGER property. .SH SEE ALSO .BR X (1), .BR xscreensaver (1) .SH COPYRIGHT Copyright \(co 2003 by Eric Lassauge. 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. The original code for this mode was written by Roman Podobedov and can be found at http://romka.demonews.com .SH AUTHOR Roman Podobedov Eric Lassauge xscreensaver-5.36/hacks/glx/flyingtoasters.man000644 000767 000024 00000005264 12701612221 021574 0ustar00jwzstaff000000 000000 .TH XScreenSaver 1 "" "X Version 11" .SH NAME flyingtoasters - 3d space-age jet-powered flying toasters (and toast) .SH SYNOPSIS .B flyingtoasters [\-display \fIhost:display.screen\fP] [\-visual \fIvisual\fP] [\-window] [\-root] [\-delay \fInumber\fP] [\-speed \fInumber\fP] [\-ntoasters \fInumber\fP] [\-nslices \fInumber\fP] [\-no-texture] [\-wireframe] [\-fps] .SH DESCRIPTION Draws a squadron of shiny 3D space-age jet-powered flying toasters, and associated toast, flying across your screen. .SH OPTIONS .TP 8 .B \-visual \fIvisual\fP Specify which visual to use. Legal values are the name of a visual class, or the id number (decimal or hex) of a specific visual. .TP 8 .B \-window Draw on a newly-created window. This is the default. .TP 8 .B \-root Draw on the root window. .TP 8 .B \-delay \fInumber\fP Per-frame delay, in microseconds. Default: 30000 (0.03 seconds.). .TP 8 .B \-speed \fInumber\fP How fast the toasters fly. Larger for faster. Default: 1.0. .TP 8 .B \-ntoasters \fInumber\fP How many toasters to draw. Default 20. .TP 8 .B \-nslices \fInumber\fP How many slices of toast to draw. Default 25. .TP 8 .B \-no-texture Turn off texture mapping (for slow machines.) .TP 8 .B \-wireframe Render in wireframe instead of solid. .TP 8 .B \-fps Display the current frame rate, CPU load, and polygon count. .SH ENVIRONMENT .PP .TP 8 .B DISPLAY to get the default host and display number. .TP 8 .B XENVIRONMENT to get the name of a resource file that overrides the global resources stored in the RESOURCE_MANAGER property. .SH SEE ALSO .BR X (1), .BR xscreensaver (1) .BR After Dark .SH COPYRIGHT Copyright \(co 2003 by 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. The original After Dark flying toasters, with the fluffy white wings, were a trademark of Berkeley Systems. Berkeley Systems ceased to exist some time in 1998, having been gobbled up by Sierra Online, who were subsequently gobbled up by Flipside and/or Vivendi (it's hard to tell exactly what happened when.) I doubt anyone even cares any more, but if they do, hopefully this homage, with the space-age 3D jet-plane toasters, will be considered different enough that whoever still owns the trademark to the fluffy-winged 2D bitmapped toasters won't get all huffy at us. .SH AUTHOR Code by Jamie Zawinski. Object models by Baconmonkey. xscreensaver-5.36/hacks/glx/bouncingcow.man000644 000767 000024 00000003727 12701612221 021036 0ustar00jwzstaff000000 000000 .TH XScreenSaver 1 "" "X Version 11" .SH NAME bouncingcow - a happy cow on a trampoline in 3D. Moo. .SH SYNOPSIS .B bouncingcow [\-display \fIhost:display.screen\fP] [\-visual \fIvisual\fP] [\-window] [\-root] [\-delay \fInumber\fP] [\-speed \fInumber\fP] [\-count \fInumber\fP] [\-texture \fIfilename\fP] [\-wireframe] [\-fps] .SH DESCRIPTION It's very silly. .SH OPTIONS .TP 8 .B \-visual \fIvisual\fP Specify which visual to use. Legal values are the name of a visual class, or the id number (decimal or hex) of a specific visual. .TP 8 .B \-window Draw on a newly-created window. This is the default. .TP 8 .B \-root Draw on the root window. .TP 8 .B \-delay \fInumber\fP Per-frame delay, in microseconds. Default: 30000 (0.03 seconds.). .TP 8 .B \-speed \fInumber\fP How fast the cow bounces. Larger for faster. Default: 1.0. .TP 8 .B \-count \fInumber\fP How many cows! Default 1. .TP 8 .B \-texture \fIfilename\fP An image file to paint on the cow's hide. Note that on most systems, GL textures must have dimensions that are a power of two. .TP 8 .B \-wireframe Render in wireframe instead of solid. .TP 8 .B \-fps Display the current frame rate, CPU load, and polygon count. .SH ENVIRONMENT .PP .TP 8 .B DISPLAY to get the default host and display number. .TP 8 .B XENVIRONMENT to get the name of a resource file that overrides the global resources stored in the RESOURCE_MANAGER property. .SH SEE ALSO .BR X (1), .BR xscreensaver (1) .SH COPYRIGHT Copyright \(co 2003 by Jamie Zawinski. Moo. 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. Moo. No representations are made about the suitability of this software for any purpose. It is provided "as is" without express or implied warranty. Moo. .SH AUTHOR Jamie Zawinski xscreensaver-5.36/hacks/glx/glslideshow.man000644 000767 000024 00000010213 12701612221 021031 0ustar00jwzstaff000000 000000 .TH XScreenSaver 1 "" "X Version 11" .SH NAME glslideshow - slideshow of images using smooth zooming and fades .SH SYNOPSIS .B glslideshow [\-display \fIhost:display.screen\fP] [\-visual \fIvisual\fP] [\-window] [\-root] [\-duration \fIseconds\fP] [\-zoom \fIpercent\fP] [\-pan \fIseconds\fP] [\-fade \fIseconds\fP] [\-titles] [\-letterbox | \-clip] [\-delay \fIusecs\fP] [\-fps] [\-debug] [\-wireframe] [\-cutoff \fIint\fP] .SH DESCRIPTION Loads a random sequence of images and smoothly scans and zooms around in each, fading from pan to pan. This program requires a good video card capable of supporting large textures. To specify the directory that images are loaded from, run .BR xscreensaver-demo (1) and click on the "Advanced" tab. .SH OPTIONS .TP 8 .B \-visual \fIvisual\fP Specify which visual to use. Legal values are the name of a visual class, or the id number (decimal or hex) of a specific visual. .TP 8 .B \-window Draw on a newly-created window. This is the default. .TP 8 .B \-root Draw on the root window. .TP 8 .B \-duration \fIseconds\fP How long each image will be displayed before loading a new one. Default 30 seconds. .TP 8 .B \-pan \fIseconds\fP How long each pan-and-zoom should last. Default 6 seconds. With the default settings of \fI\-pan 6 \-duration 30\fP, each image will be displayed five times (30/6), and then a new image will be loaded. If you want a new image to be loaded at each fade, then set \fI\-pan\fP and \fI\-duration\fP to the same value. .TP 8 .B \-fade \fIseconds\fP How long each cross-fade between images should last. Default 2 seconds. If set to 0, then no cross-fading will be done (all transitions will be jump-cuts.) Note that fades are included in the pan time, so \fI\-fade\fP cannot be larger than \fI\-pan\fP. .TP 8 .B \-zoom \fInumber\fP Amount to zoom and pan as a percentage. Default: 75, meaning that 75% or more of each image will always be visible. If set to 100%, then the images will always fill the screen, and no panning or zooming will occur. (Images will still smoothly fade from one to another if \fI\-fade\fP is non-zero.) .TP 8 .B \-titles Whether to print the file name of the current image in the upper left corner. .TP 8 .B \-letterbox In "letterbox" mode, when an image is not the same aspect ratio as the screen, black bars will appear at the top/bottom or left/right so that the whole image can be displayed. This is the default. .TP 8 .B \-clip In "clip" mode, when an image is not the same aspect ratio as the screen, we will zoom in further until the image takes up the whole screen. This is the opposite of \fI\-letterbox\fP. .TP 8 .B \-delay \fInumber\fP Per-frame delay, in microseconds. Default: 20000 (0.02 seconds.). .TP 8 .B \-fps Display the current frame rate, CPU load, and polygon count. .TP 8 .B \-cutoff \fInumber\fP If the frame rate we are achieving is lower than this, then panning, fading, and zooming will be disabled. Default 5 FPS. The idea here is that if your machine can't maintain a decent frame rate, then it must not have fast 3D hardware, so we might as well behave in a simpler manner. Set this to 0 to disable this check. .TP 8 .B \-debug Prints debugging info to stderr. .TP 8 .B \-wireframe Another debug mode. .SH ENVIRONMENT .PP .TP 8 .B DISPLAY to get the default host and display number. .TP 8 .B XENVIRONMENT to get the name of a resource file that overrides the global resources stored in the RESOURCE_MANAGER property. .SH SEE ALSO .BR X (1), .BR xscreensaver-demo (1), .BR xscreensaver-getimage (1), .BR xscreensaver (1), .BR carousel (MANSUFFIX) .BR photopile (MANSUFFIX) .SH COPYRIGHT Copyright \(co 2003-2005 by Jamie Zawinski, based on an earlier version that was Copyright \(co 2002 by Mike Oliphant. 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. .SH AUTHOR Jamie Zawinski and Mike Oliphant. xscreensaver-5.36/hacks/glx/jigglypuff.man000644 000767 000024 00000010777 12701612221 020672 0ustar00jwzstaff000000 000000 .TH XScreenSaver 1 "" "X Version 11" .SH NAME jigglypuff - save your screen by tormenting your eyes. .SH SYNOPSIS .B jigglypuff [\-display \fIhost:display.screen\fP] [\-visual \fIvisual\fP] [\-window] [\-root] [-delay \fInumber\fP] [-cycles \fInumber\fP] [-wireframe] [-fps] [-color \fIcolorspec\fP] [-spooky] [-complexity \fIn\fP] [-speed \fIn\fP] [-spherism \fIn\fP] [-hold \fIn\fP] [-distance \fIn\fP] [-damping \fIn\fP] .SH DESCRIPTION This draws all manners of obscene, spastic, puffy, vaguely ball-shaped objects orbiting lazily about the screen, with a dizzying array of mostly pointless options. .SH OPTIONS .TP 8 .B \-visual \fIvisual\fP Specify which visual to use. Legal values are the name of a visual class, or the id number (decimal or hex) of a specific visual. .TP 8 .B \-window Draw on a newly-created window. This is the default. .TP 8 .B \-root Draw on the root window. .TP 8 .B \-delay \fInumber\fP Per-frame delay, in microseconds. Default: 20000 (0.02 seconds.). .TP 8 .B \-wireframe Render in wireframe instead of solid. Default: render solid. .TP 8 .B \-fps Display the current frame rate, CPU load, and polygon count. .TP 8 .B -tetra | -no-tetra Whether to start the shape in the form of a tetrahedron. The default is to start as a sphere. .TP 8 .B -color \fIcolorspec\fP Available options for colorspec are: cycle, flowerbox, clownpuke, chrome and #xxxxxx (i.e an (old-style) X color specification.) Default: cycle .TP 8 .B -spooky \fIn\fP This option controls a kind of interesting effect obtained by using unnormalized normal vectors (how's that for an oxymoron?) in OpenGL. A value of zero disables the effect. Other values vary the lengths of the normals proportionally. Okay, so it's not very spooky. Sue me. Default: 0 .TP 8 .B -complexity \fIn\fP Valid options are 1, 2, and 3. Everything else is treated as though it were 2, which is the default. This controls the number of polygons in the 'thing'. A value of 1 yields 1024, and the values go up in powers of 4. (i.e. 4096, 16384.) note: There is an inherent lack of stability at lower complexity, which can cause the shape to devolve into a 'flying snotrag'. .TP 8 .B -speed \fIn\fP Controls how fast the blob moves around the screen. Default: 500. .TP 8 .B -spherism, -hold, -distance, -damping These options control the 'jigglyness'. The best way to explain these is to explain how jigglypuff works. Basically, the shape is a tetrahedron whose faces are subdivided into a number of triangles, forming a mesh. Each of the vertices of the mesh has two different forces applied to it: one proportional to its distance from the surface of a sphere, and one proportional to the difference of the distance to each of its neighbors in the mesh to a given ideal distance. In short, one tries to move the points into the configuration of a sphere, and the other tries to push them back into a tetrahedron. The catch is that the points have inertia, so they always overshoot their target, and hence they oscillate. The magnitudes of the two forces is controlled by the options 'spherism' and \'hold'; 'distance' specifies the distance the vertices seek to keep from their neighbors, with 500 corresponding to the size of the start tetrahedron. e.g. if you were to give the options '-tetra -spherism 0 -distance 500', you would end up with a stable tetrahedron. The 'damping' option can help to keep the blob from collapsing or flying apart. The option specifies the speed at which damping starts, hence lower values mean more damping. Defaults: spherism: 75; hold: 800; distance: 100; damping: 500. .TP 8 .B -random Probably the only parameter you'l ever need. Overrides almost all of the parameters with random values. The values affected are: speed, spherism, hold, distance, damping, spooky, color, wireframe and tetra. Default: off .SH ENVIRONMENT .PP .TP 8 .B DISPLAY to get the default host and display number. .TP 8 .B XENVIRONMENT to get the name of a resource file that overrides the global resources stored in the RESOURCE_MANAGER property. .SH SEE ALSO .BR X (1), .BR xscreensaver (1) .SH COPYRIGHT Copyright \(co 2003 by Keith Macleod. 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. .SH AUTHOR By Keith Macleod xscreensaver-5.36/hacks/glx/klein.man000644 000767 000024 00000027257 12701612221 017627 0ustar00jwzstaff000000 000000 .TH XScreenSaver 1 "" "X Version 11" .SH NAME klein - Draws a 4d Klein bottle. .SH SYNOPSIS .B klein [\-display \fIhost:display.screen\fP] [\-install] [\-visual \fIvisual\fP] [\-window] [\-root] [\-delay \fIusecs\fP] [\-fps] [\-klein-bottle \fIbottle-name\fP] [-figure-8] [-squeezed-torus] [-lawson] [\-mode \fIdisplay-mode\fP] [\-wireframe] [\-surface] [\-transparent] [\-appearance \fIappearance\fP] [\-solid] [\-bands] [\-colors \fIcolor-scheme\fP] [\-twosided] [\-rainbow] [\-depth] [\-view-mode \fIview-mode\fP] [\-walk] [\-turn] [\-walk-turn] [\-orientation-marks] [\-projection-3d \fImode\fP] [\-perspective-3d] [\-orthographic-3d] [\-projection-4d \fImode\fP] [\-perspective-4d] [\-orthographic-4d] [\-speed-wx \fIfloat\fP] [\-speed-wy \fIfloat\fP] [\-speed-wz \fIfloat\fP] [\-speed-xy \fIfloat\fP] [\-speed-xz \fIfloat\fP] [\-speed-yz \fIfloat\fP] [\-walk-direction \fIfloat\fP] [\-walk-speed \fIfloat\fP] .SH DESCRIPTION The \fIklein\fP program shows three different Klein bottles in 4d: the figure-8 Klein bottle, the squeezed torus Klein bottle, or the Lawson Klein bottle. You can walk on the Klein bottle, see it turn in 4d, or walk on it while it turns in 4d. The figure-8 Klein bottle is well known in its 3d form. The 4d form used in this program is an extension of the 3d form to 4d that does not intersect itself in 4d (which can be seen in the depth colors mode). The squeezed torus Klein bottle also does not intersect itself in 4d (which can be seen in the depth colors mode). The Lawson Klein bottle, on the other hand, does intersect itself in 4d. Its primary use is that it has a nice appearance for walking and for turning in 3d. The Klein bottle is a non-orientable surface. To make this apparent, the two-sided color mode can be used. Alternatively, orientation markers (curling arrows) can be drawn as a texture map on the surface of the Klein bottle. While walking on the Klein bottle, you will notice that the orientation of the curling arrows changes (which it must because the Klein bottle is non-orientable). The program projects the 4d Klein bottle to 3d using either a perspective or an orthographic projection. Which of the two alternatives looks more appealing depends on the viewing mode and the Klein bottle. For example, the Lawson Klein bottle looks nicest when projected perspectively. The figure-8 Klein bottle, on the other hand, looks nicer while walking when projected orthographically from 4d. For the squeezed torus Klein bottle, both projection modes give equally acceptable projections. The projected Klein bottle can then be projected to the screen either perspectively or orthographically. When using the walking modes, perspective projection to the screen should be used. There are three display modes for the Klein bottle: mesh (wireframe), solid, or transparent. Furthermore, the appearance of the Klein bottle can be as a solid object or as a set of see-through bands. Finally, the colors with with the Klein bottle is drawn can be set to two-sided, rainbow, or depth. In the first case, the Klein bottle is drawn with red on one "side" and green on the "other side". Of course, the Klein bottle only has one side, so the color jumps from red to green along a curve on the surface of the Klein bottle. This mode enables you to see that the Klein bottle is non-orientable. The second mode draws the Klein bottle with fully saturated rainbow colors. This gives a very nice effect when combined with the see-through bands mode or with the orientation markers drawn. The third mode draws the Klein bottle with colors that are chosen according to the 4d "depth" of the points. This mode enables you to see that the figure-8 and squeezed torus Klein bottles do not intersect themselves in 4d, while the Lawson Klein bottle does intersect itself. The rotation speed for each of the six planes around which the Klein bottle rotates can be chosen. For the walk-and-turn mode, only the rotation speeds around the true 4d planes are used (the xy, xz, and yz planes). Furthermore, in the walking modes the walking direction in the 2d base square of the Klein bottle and the walking speed can be chosen. This program is somewhat inspired by Thomas Banchoff's book "Beyond the Third Dimension: Geometry, Computer Graphics, and Higher Dimensions", Scientific American Library, 1990. .SH OPTIONS .I klein accepts the following options: .TP 8 .B \-window Draw on a newly-created window. This is the default. .TP 8 .B \-root Draw on the root window. .TP 8 .B \-install Install a private colormap for the window. .TP 8 .B \-visual \fIvisual\fP Specify which visual to use. Legal values are the name of a visual class, or the id number (decimal or hex) of a specific visual. .TP 8 .B \-delay \fImicroseconds\fP How much of a delay should be introduced between steps of the animation. Default 10000, or 1/100th second. .TP 8 .B \-fps Display the current frame rate, CPU load, and polygon count. .PP The following three options are mutually exclusive. They determine which Klein bottle is displayed. .TP 8 .B \-klein-bottle random Display a random Klein bottle (default). .TP 8 .B \-klein-bottle figure-8 \fP(Shortcut: \fB\-figure-8\fP) Display the figure-8 Klein bottle. .TP 8 .B \-klein-bottle squeezed-torus \fP(Shortcut: \fB\-squeezed-torus\fP) Display the squeezed torus Klein bottle. .TP 8 .B \-klein-bottle lawson \fP(Shortcut: \fB\-lawson\fP) Display the Lawson Klein bottle. .PP The following four options are mutually exclusive. They determine how the Klein bottle is displayed. .TP 8 .B \-mode random Display the Klein bottle in a random display mode (default). .TP 8 .B \-mode wireframe \fP(Shortcut: \fB\-wireframe\fP) Display the Klein bottle as a wireframe mesh. .TP 8 .B \-mode surface \fP(Shortcut: \fB\-surface\fP) Display the Klein bottle as a solid surface. .TP 8 .B \-mode transparent \fP(Shortcut: \fB\-transparent\fP) Display the Klein bottle as a transparent surface. .PP The following three options are mutually exclusive. They determine the appearance of the Klein bottle. .TP 8 .B \-appearance random Display the Klein bottle with a random appearance (default). .TP 8 .B \-appearance solid \fP(Shortcut: \fB\-solid\fP) Display the Klein bottle as a solid object. .TP 8 .B \-appearance bands \fP(Shortcut: \fB\-bands\fP) Display the Klein bottle as see-through bands. .PP The following four options are mutually exclusive. They determine how to color the Klein bottle. .TP 8 .B \-colors random Display the Klein bottle with a random color scheme (default). .TP 8 .B \-colors twosided \fP(Shortcut: \fB\-twosided\fP) Display the Klein bottle with two colors: red on one "side" and green on the "other side". .TP 8 .B \-colors rainbow \fP(Shortcut: \fB\-rainbow\fP) Display the Klein bottle with fully saturated rainbow colors. If the Klein bottle is displayed as see-through bands, each band will be displayed with a different color. .TP 8 .B \-colors depth \fP(Shortcut: \fB\-depth\fP) Display the Klein bottle with colors chosen depending on the 4d "depth" of the points. .PP The following four options are mutually exclusive. They determine how to view the Klein bottle. .TP 8 .B \-view-mode random View the Klein bottle in a random view mode (default). .TP 8 .B \-view-mode walk \fP(Shortcut: \fB\-walk\fP) View the Klein bottle as if walking on its surface. .TP 8 .B \-view-mode turn \fP(Shortcut: \fB\-turn\fP) View the Klein bottle while it turns in 4d. .TP 8 .B \-view-mode walk-turn \fP(Shortcut: \fB\-walk-turn\fP) View the Klein bottle as if walking on its surface. Additionally, the Klein bottle turns around the true 4d planes (the xy, xz, and yz planes). .PP The following options determine whether orientation marks are shown on the Klein bottle. .TP 8 .B \-orientation-marks Display orientation marks on the Klein bottle. .TP 8 .B \-no-orientation-marks Don't display orientation marks on the Klein bottle (default). .PP The following three options are mutually exclusive. They determine how the Klein bottle is projected from 3d to 2d (i.e., to the screen). .TP 8 .B \-projection-3d random Project the Klein bottle from 3d to 2d using a random projection mode (default). .TP 8 .B \-projection-3d perspective \fP(Shortcut: \fB\-perspective-3d\fP) Project the Klein bottle from 3d to 2d using a perspective projection. .TP 8 .B \-projection-3d orthographic \fP(Shortcut: \fB\-orthographic-3d\fP) Project the Klein bottle from 3d to 2d using an orthographic projection. .PP The following three options are mutually exclusive. They determine how the Klein bottle is projected from 4d to 3d. .TP 8 .B \-projection-4d random Project the Klein bottle from 4d to 3d using a random projection mode (default). .TP 8 .B \-projection-4d perspective \fP(Shortcut: \fB\-perspective-4d\fP) Project the Klein bottle from 4d to 3d using a perspective projection. .TP 8 .B \-projection-4d orthographic \fP(Shortcut: \fB\-orthographic-4d\fP) Project the Klein bottle from 4d to 3d using an orthographic projection. .PP The following six options determine the rotation speed of the Klein bottle around the six possible hyperplanes. The rotation speed is measured in degrees per frame. The speeds should be set to relatively small values, e.g., less than 4 in magnitude. In walk mode, all speeds are ignored. In walk-and-turn mode, the 3d rotation speeds are ignored (i.e., the wx, wy, and wz speeds). In walk-and-turn mode, smaller speeds must be used than in the turn mode to achieve a nice visualization. Therefore, in walk-and-turn mode the speeds you have selected are divided by 5 internally. .TP 8 .B \-speed-wx \fIfloat\fP Rotation speed around the wx plane (default: 1.1). .TP 8 .B \-speed-wy \fIfloat\fP Rotation speed around the wy plane (default: 1.3). .TP 8 .B \-speed-wz \fIfloat\fP Rotation speed around the wz plane (default: 1.5). .TP 8 .B \-speed-xy \fIfloat\fP Rotation speed around the xy plane (default: 1.7). .TP 8 .B \-speed-xz \fIfloat\fP Rotation speed around the xz plane (default: 1.9). .TP 8 .B \-speed-yz \fIfloat\fP Rotation speed around the yz plane (default: 2.1). .PP The following two options determine the walking speed and direction. .TP 8 .B \-walk-direction \fIfloat\fP The walking direction is measured as an angle in degrees in the 2d square that forms the coordinate system of the surface of the Klein bottle (default: 7.0). .TP 8 .B \-walk-speed \fIfloat\fP The walking speed is measured in percent of some sensible maximum speed (default: 20.0). .SH INTERACTION If you run this program in standalone mode in its turn mode, you can rotate the Klein bottle by dragging the mouse while pressing the left mouse button. This rotates the Klein bottle in 3D, i.e., around the wx, wy, and wz planes. If you press the shift key while dragging the mouse with the left button pressed the Klein bottle is rotated in 4D, i.e., around the xy, xz, and yz planes. To examine the Klein bottle at your leisure, it is best to set all speeds to 0. Otherwise, the Klein bottle will rotate while the left mouse button is not pressed. This kind of interaction is not available in the two walk modes. .SH ENVIRONMENT .PP .TP 8 .B DISPLAY to get the default host and display number. .TP 8 .B XENVIRONMENT to get the name of a resource file that overrides the global resources stored in the RESOURCE_MANAGER property. .SH SEE ALSO .BR X (1), .BR xscreensaver (1) .SH COPYRIGHT Copyright \(co 2005-2014 by Carsten Steger. 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. .SH AUTHOR Carsten Steger , 03-oct-2014. xscreensaver-5.36/hacks/glx/hypertorus.man000644 000767 000024 00000014664 12701612221 020747 0ustar00jwzstaff000000 000000 .TH XScreenSaver 1 "" "X Version 11" .SH NAME hypertorus - Draws a hypertorus that rotates in 4d .SH SYNOPSIS .B hypertorus [\-display \fIhost:display.screen\fP] [\-install] [\-visual \fIvisual\fP] [\-window] [\-root] [\-delay \fIusecs\fP] [\-fps] [\-wireframe] [\-surface] [\-transparent] [\-solid] [\-bands] [\-spirals-{1,2,4,8,16}] [\-twosided] [\-colorwheel] [\-perspective-3d] [\-orthographic-3d] [\-perspective-4d] [\-orthographic-4d] [\-speed-wx \fIfloat\fP] [\-speed-wy \fIfloat\fP] [\-speed-wz \fIfloat\fP] [\-speed-xy \fIfloat\fP] [\-speed-xz \fIfloat\fP] [\-speed-yz \fIfloat\fP] .SH DESCRIPTION The \fIhypertorus\fP program shows the Clifford torus as it rotates in 4d. The Clifford torus is a torus lies on the "surface" of the hypersphere in 4d. The program projects the 4d torus to 3d using either a perspective or an orthographic projection. Of the two alternatives, the perspective projection looks much more appealing. In orthographic projections the torus degenerates into a doubly covered cylinder for some angles. The projected 3d torus can then be projected to the screen either perspectively or orthographically. There are three display modes for the torus: mesh (wireframe), solid, or transparent. Furthermore, the appearance of the torus can be as a solid object or as a set of see-through bands or see-through spirals. Finally, the colors with with the torus is drawn can be set to either two-sided or to a color wheel. In the first case, the torus is drawn with red on the outside and green on the inside. This mode enables you to see that the torus turns inside-out as it rotates in 4d. The second mode draws the torus with a fully saturated color wheel. This gives a very nice effect when combined with the see-through bands or see-through spirals mode. The rotation speed for each of the six planes around which the torus rotates can be chosen. This program is very much inspired by Thomas Banchoff's book "Beyond the Third Dimension: Geometry, Computer Graphics, and Higher Dimensions", Scientific American Library, 1990. .SH OPTIONS .I hypertorus accepts the following options: .TP 8 .B \-window Draw on a newly-created window. This is the default. .TP 8 .B \-root Draw on the root window. .TP 8 .B \-install Install a private colormap for the window. .TP 8 .B \-visual \fIvisual\fP Specify which visual to use. Legal values are the name of a visual class, or the id number (decimal or hex) of a specific visual. .TP 8 .B \-delay \fImicroseconds\fP How much of a delay should be introduced between steps of the animation. Default 25000, or 1/40th second. .PP The following three options are mutually exclusive. They determine how the torus is displayed. .TP 8 .B \-wireframe Display the torus as a wireframe mesh. .TP 8 .B \-surface Display the torus as a solid surface (default). .TP 8 .B \-transparent Display the torus as a transparent surface. .PP The following seven options are mutually exclusive. They determine the appearance of the torus. .TP 8 .B \-solid Display the torus as a solid object. .TP 8 .B \-bands Display the torus as see-through bands (default). .TP 8 .B \-spirals-1, \-spirals-2, \-spirals-4, \-spirals-8, \-spirals-16 Display the torus as see-through spirals with the indicated number of spirals. .PP The following two options are mutually exclusive. They determine how to color the torus. .TP 8 .B \-twosided Display the torus with two colors: red on the outside and green on the inside. .TP 8 .B \-colorwheel Display the torus with a fully saturated color wheel (default). If the torus is displayed as see-through bands each band will be displayed with a different color. Likewise, if the torus is displayed as see-through spirals each spiral will receive a different color. .PP The following two options are mutually exclusive. They determine how the torus is projected from 3d to 2d (i.e., to the screen). .TP 8 .B \-perspective-3d Project the torus from 3d to 2d using a perspective projection (default). .TP 8 .B \-orthographic-3d Project the torus from 3d to 2d using an orthographic projection. .PP The following two options are mutually exclusive. They determine how the torus is projected from 4d to 3d. .TP 8 .B \-perspective-4d Project the torus from 4d to 3d using a perspective projection (default). .TP 8 .B \-orthographic-4d Project the torus from 4d to 3d using an orthographic projection. .PP The following six options determine the rotation speed of the torus around the six possible hyperplanes. The rotation speed is measured in degrees per frame. The speeds should be set to relatively small values, e.g., less than 4 in magnitude. .TP 8 .B \-speed-wx \fIfloat\fP Rotation speed around the wx plane (default: 1.1). .TP 8 .B \-speed-wy \fIfloat\fP Rotation speed around the wy plane (default: 1.3). .TP 8 .B \-speed-wz \fIfloat\fP Rotation speed around the wz plane (default: 1.5). .TP 8 .B \-speed-xy \fIfloat\fP Rotation speed around the xy plane (default: 1.7). .TP 8 .B \-speed-xz \fIfloat\fP Rotation speed around the xz plane (default: 1.9). .TP 8 .B \-speed-yz \fIfloat\fP Rotation speed around the yz plane (default: 2.1). .TP 8 .B \-fps Display the current frame rate, CPU load, and polygon count. .SH INTERACTION If you run this program in standalone mode you can rotate the hypertorus by dragging the mouse while pressing the left mouse button. This rotates the hypertorus in 3D, i.e., around the wx, wy, and wz planes. If you press the shift key while dragging the mouse with the left button pressed the hypertorus is rotated in 4D, i.e., around the xy, xz, and yz planes. To examine the hypertorus at your leisure, it is best to set all speeds to 0. Otherwise, the hypertorus will rotate while the left mouse button is not pressed. .SH ENVIRONMENT .PP .TP 8 .B DISPLAY to get the default host and display number. .TP 8 .B XENVIRONMENT to get the name of a resource file that overrides the global resources stored in the RESOURCE_MANAGER property. .SH SEE ALSO .BR X (1), .BR xscreensaver (1) .SH COPYRIGHT Copyright \(co 2003-2005 by Carsten Steger. 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. .SH AUTHOR Carsten Steger , 28-sep-2005. xscreensaver-5.36/hacks/glx/glmatrix.man000644 000767 000024 00000006524 12701612221 020346 0ustar00jwzstaff000000 000000 .TH XScreenSaver 1 "30-Oct-99" "X Version 11" .SH NAME glmatrix - simulates the title sequence effect of the movie .SH SYNOPSIS .B glmatrix [\-display \fIhost:display.screen\fP] [\-window] [\-root] [\-install] [\-visual \fIvisual\fP] [\-delay \fIusecs\fP] [\-speed \fIratio\fP] [\-density \fIpct\fP] [\-no\-fog] [\-no\-waves] [\-no\-rotate] [\-binary] [\-hexadecimal] [\-dna] [\-clock] [\-timefmt \fIfmt\fP] [\-wireframe] [\-fps] .SH DESCRIPTION The \fIglmatrix\fP program draws the 3D "digital rain" effect, as seen in the title sequence of the Wachowski brothers' film, "The Matrix". Also see .BR xmatrix (MANSUFFIX) for a 2D rendering of the similar effect that appeared on the computer monitors actually \fIin\fP the movie. .SH OPTIONS .I glmatrix accepts the following options: .TP 8 .B \-window Draw on a newly-created window. This is the default. .TP 8 .B \-root Draw on the root window. .TP 8 .B \-install Install a private colormap for the window. .TP 8 .B \-visual \fIvisual\fP\fP Specify which visual to use. Legal values are the name of a visual class, or the id number (decimal or hex) of a specific visual. .TP 8 .B \-delay \fIusecs\fP The delay between frames of the animation, in microseconds: default 30000. .TP 8 .B \-speed \fIratio\fP How fast the glyphs should move; default 1.0. 2.0 means twice as fast, 0.5 means half as fast. .TP 8 .B \-density \fIpercentage\fP The approximate percentage of the screen that should be filled with characters at any given time. Default 20%. .TP 8 .B \-no\-fog By default, glyphs are dimmer the farther away they are. This argument disables that. .TP 8 .B \-no\-waves By default, waves of color roll down the columns of glyphs. This argument disables that. .TP 8 .B \-no-rotate\fP By default, the scene slowly tilts and rotates. This argument disables that. .TP 8 .B \-binary\fP Instead of displaying Matrix glyphs, only display ones and zeros. .TP 8 .B \-hexadecimal\fP Instead of displaying Matrix glyphs, display hexadecimal digits. .TP 8 .B \-dna\fP Instead of displaying Matrix glyphs, display genetic code (guanine, adenine, thymine, and cytosine.) .TP 8 .B \-clock\fP Hide a clock displaying the current time somewhere in the glyphs. .TP 8 .B \-timefmt\fP \fIstrftime-string\fP How to format the clock when \fI\-clock\fP is specified. Default "\ %l%M%p\ ". .TP 8 .B \-speed \fIratio\fP Less than 1 for slower, greater than 1 for faster. Default 1. .TP 8 .B \-wireframe Just draw boxes instead of textured characters. .TP 8 .B \-fps Display the current frame rate, CPU load, and polygon count. .SH ENVIRONMENT .PP .TP 8 .B DISPLAY to get the default host and display number. .TP 8 .B XENVIRONMENT to get the name of a resource file that overrides the global resources stored in the RESOURCE_MANAGER property. .SH SEE ALSO .BR xmatrix (MANSUFFIX), .BR X (1), .BR xscreensaver (1) .SH COPYRIGHT Copyright \(co 1999-2003 by 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. .SH AUTHOR Jamie Zawinski , 8-Jun-2003. xscreensaver-5.36/hacks/glx/cubestorm.man000644 000767 000024 00000004160 12701612221 020514 0ustar00jwzstaff000000 000000 .TH XScreenSaver 1 "" "X Version 11" .SH NAME cubestorm - a series of 3D boxes that fill space .SH SYNOPSIS .B cubestorm [\-display \fIhost:display.screen\fP] [\-visual \fIvisual\fP] [\-window] [\-root] [\-delay \fInumber\fP] [\-speed \fIfloat\fP] [\-count \fIint\fP] [\-thickness \fIfloat\fP] [\-no-wander] [\-no-spin] [\-wireframe] [\-fps] .SH DESCRIPTION Draws a series of rotating 3D boxes that intersect each other and eventually fill space. .SH OPTIONS .TP 8 .B \-visual \fIvisual\fP Specify which visual to use. Legal values are the name of a visual class, or the id number (decimal or hex) of a specific visual. .TP 8 .B \-window Draw on a newly-created window. This is the default. .TP 8 .B \-root Draw on the root window. .TP 8 .B \-delay \fInumber\fP Per-frame delay, in microseconds. Default: 30000 (0.03 seconds.). .TP 8 .B \-speed \fInumber\fP Larger numbers mean run faster. Default: 1.0. .TP 8 .B \-count \fInumber\fP Number of cubes. Default 4. .TP 8 .B \-thickness \fIfloat\fP How thick the struts making up the cubes should be (0.0-1.0). Default 0.06. .TP 8 .B \-wander | \-no-wander Whether the cubes should wander around the screen. .TP 8 .B \-spin | \-no-spin Whether the cubes should spin. .TP 8 .B \-wireframe | \-no-wireframe Render in wireframe instead of solid. .TP 8 .B \-fps Display the current frame rate, CPU load, and polygon count. .SH ENVIRONMENT .PP .TP 8 .B DISPLAY to get the default host and display number. .TP 8 .B XENVIRONMENT to get the name of a resource file that overrides the global resources stored in the RESOURCE_MANAGER property. .SH SEE ALSO .BR X (1), .BR xscreensaver (1) .SH COPYRIGHT Copyright \(co 2003 by 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. .SH AUTHOR Jamie Zawinski. xscreensaver-5.36/hacks/glx/glknots.man000644 000767 000024 00000004446 12701612221 020201 0ustar00jwzstaff000000 000000 .TH XScreenSaver 1 "" "X Version 11" .SH NAME glknots - generates some twisting 3d knot patterns .SH SYNOPSIS .B glknots [\-display \fIhost:display.screen\fP] [\-visual \fIvisual\fP] [\-window] [\-root] [\-delay \fInumber\fP] [\-speed \fIfloat\fP] [\-segments \fIint\fP] [\-thickness \fIfloat\fP] [\-duration \fIseconds\fP] [\-no-wander] [\-spin \fIXYZ\fP] [\-wireframe] [\-fps] .SH DESCRIPTION Generates some twisting 3d knot patterns. Spins 'em around. .SH OPTIONS .TP 8 .B \-visual \fIvisual\fP Specify which visual to use. Legal values are the name of a visual class, or the id number (decimal or hex) of a specific visual. .TP 8 .B \-window Draw on a newly-created window. This is the default. .TP 8 .B \-root Draw on the root window. .TP 8 .B \-delay \fInumber\fP Per-frame delay, in microseconds. Default: 30000 (0.03 seconds.). .TP 8 .B \-speed \fInumber\fP Larger numbers mean run faster. Default: 1.0. .TP 8 .B \-segments \fInumber\fP Number of segments in each path. Default 800. Larger numbers make the curves smoother, at the expense of a higher polygon count. .TP 8 .B \-thickness \fIfloat\fP How thick the tubes should be. Default 0.3. .TP 8 .B \-duration \fIseconds\fP How long to leave each knot up. Default 8 seconds. .TP 8 .B \-wander | \-no-wander Whether the cubes should wander around the screen. .TP 8 .B \-spin [XYZ] | \-no-spin Which axes, if any, to spin around on. .TP 8 .B \-wireframe | \-no-wireframe Render in wireframe instead of solid. .TP 8 .B \-fps Display the current frame rate, CPU load, and polygon count. .SH ENVIRONMENT .PP .TP 8 .B DISPLAY to get the default host and display number. .TP 8 .B XENVIRONMENT to get the name of a resource file that overrides the global resources stored in the RESOURCE_MANAGER property. .SH SEE ALSO .BR X (1), .BR xscreensaver (1) .SH COPYRIGHT Copyright \(co 2003 by 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. .SH AUTHOR Jamie Zawinski. xscreensaver-5.36/hacks/glx/blocktube.man000644 000767 000024 00000004042 12701612221 020462 0ustar00jwzstaff000000 000000 .TH XScreenSaver 1 "" "X Version 11" .SH NAME blocktube - draws a swirling, falling tunnel of reflective slabs .SH SYNOPSIS .B blocktube [\-display \fIhost:display.screen\fP] [\-visual \fIvisual\fP] [\-window] [\-root] [\-delay \fInumber\fP] [\-holdtime \fInumber\fP] [\-changetime \fInumber\fP] [\-no-texture] [\-no-fog] [\-wireframe] [\-fps] .SH DESCRIPTION Blocktube draws a swirling, falling tunnel of reflective slabs. They fade from hue to hue. .SH OPTIONS .TP 8 .B \-visual \fIvisual\fP Specify which visual to use. Legal values are the name of a visual class, or the id number (decimal or hex) of a specific visual. .TP 8 .B \-window Draw on a newly-created window. This is the default. .TP 8 .B \-root Draw on the root window. .TP 8 .B \-delay \fInumber\fP Per-frame delay, in microseconds. Default: 40000 (0.04 seconds.). .TP 8 .B \-holdtime \fInumber\fP How long to stay on the same color. Default: 1000 frames. .TP 8 .B \-changetime \fInumber\fP How long it takes to fade to a new color. Default: 200 frames. .TP 8 .B \-no-texture Draw solid blocks intstead of reflective blocks. .TP 8 .B \-no-fog Do not make blocks in the distance be darker. .TP 8 .B \-wireframe Only draw outlines. .TP 8 .B \-fps Display the current frame rate, CPU load, and polygon count. .SH ENVIRONMENT .PP .TP 8 .B DISPLAY to get the default host and display number. .TP 8 .B XENVIRONMENT to get the name of a resource file that overrides the global resources stored in the RESOURCE_MANAGER property. .SH SEE ALSO .BR X (1), .BR xscreensaver (1) .SH COPYRIGHT Copyright \(co 2003 by Lars Damerow. 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. .SH AUTHOR Lars Damerow xscreensaver-5.36/hacks/glx/flipflop.man000644 000767 000024 00000005456 12701612221 020335 0ustar00jwzstaff000000 000000 .TH XScreenSaver 1 "" "X Version 11" .SH NAME flipflop - draws a grid of 3D squares that change positions .SH SYNOPSIS .B flipflop [\-display \fIhost:display.screen\fP] [\-visual \fIvisual\fP] [\-window] [\-count \fInumber\fP | \-free \fInumber\fP] [\-size \fInumber\fP] [\-size-x \fInumber\fP] [\-size-y \fInumber\fP] [\-spin \fInumber\fP] [\-mode sticks | tiles] [\-delay \fInumber\fP] [\-wireframe] [\-fps] [\-texture] .SH DESCRIPTION Flipflop draws a grid of 3D colored tiles that change positions with each other. .SH OPTIONS .TP 8 .B \-visual \fIvisual\fP Specify which visual to use. Legal values are the name of a visual class, or the id number (decimal or hex) of a specific visual. .TP 8 .B \-window Draw on a newly-created window. This is the default. .TP 8 .B \-root Draw on the root window. .TP 8 .B \-count \fInumber\fP Number of tiles on the board. A value of "0" means "default". The default number of tiles depends on the size of the board and the mode: 95% of total tiles for "tiles" mode and 80% of total sticks for "sticks" mode (e.g. 76 tiles or 64 sticks for a 9x9 board). .TP 8 .B \-free \fInumber\fP Number of tiles missing from the board. See -count. .TP 8 .B \-size \fInumber\fP Number of tiles on each side of the board. Takes precedence over -size-x and -size-y. Default: 9. .TP 8 .B \-size-x \fInumber\fP Width (in tiles) of the board. Default: 9. .TP 8 .B \-size-y \fInumber\fP Length (in tiles) of the board. Default: 9. .TP 8 .B \-spin \fInumber\fP Angular velocity for the rotation of the board. .TP 8 .B \-mode sticks Draw hopping sticks instead of flipping tiles. .TP 8 .B \-mode tiles Draw flipping tiles. This is the default. .TP 8 .B \-delay \fInumber\fP Per-frame delay, in microseconds. Default: 20000 (0.02 seconds.). .TP 8 .B \-fps | \-no\-fps Display the current frame rate, CPU load, and polygon count. .TP 8 .B \-wireframe Only draw outlines. .TP 8 .B \-texture | \-no\-texture Whether to texture the tiles with a screen grab or an image. .SH ENVIRONMENT .PP .TP 8 .B DISPLAY to get the default host and display number. .TP 8 .B XENVIRONMENT to get the name of a resource file that overrides the global resources stored in the RESOURCE_MANAGER property. .SH SEE ALSO .BR X (1), .BR xscreensaver (1) .SH COPYRIGHT Copyright \(co 2003 by Kevin Ogden. 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. .SH AUTHOR Kevin Ogden . Some additional code by Sergio Gutierrez . xscreensaver-5.36/hacks/glx/antspotlight.man000644 000767 000024 00000003315 12701612221 021232 0ustar00jwzstaff000000 000000 .TH XScreenSaver 1 "July 2003" .SH NAME antspotlight \- ant spotlight screenhack .SH SYNOPSIS .B antspotlight [\-display \fIhost:display.screen\fP] [\-window] [\-root] [\-install] [\-visual \fIvisual\fP] [\-delay \fImicroseconds\fP] [\-fps] .SH DESCRIPTION The \fIantspotlight\fP code displays a single ant spotting out a screenshot. .SH OPTIONS .I antspotlight accepts the following options: .TP 8 .B \-window Draw on a newly-created window. This is the default. .TP 8 .B \-root Draw on the root window. .TP 8 .B \-install Install a private colormap for the window. .TP 8 .B \-visual \fIvisual\fP\fP Specify which visual to use. Legal values are the name of a visual class, or the id number (decimal or hex) of a specific visual. .TP 8 .B \-fps Display the current frame rate, CPU load, and polygon count. .TP 8 .B \-delay \fImicroseconds\fP Per-frame delay. .SH ENVIRONMENT .PP .TP 8 .B DISPLAY to get the default host and display number. .TP 8 .B XENVIRONMENT to get the name of a resource file that overrides the global resources stored in the RESOURCE_MANAGER property. .SH SEE ALSO .BR X (1), .BR xscreensaver (1) .BR xscreensaver\-demo (1), .BR xscreensaver\-getimage (1) .SH COPYRIGHT Copyright \(co 2003 by Blair Tennessy. 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. .SH AUTHOR Blair Tennessy , 20-July-2003. xscreensaver-5.36/hacks/glx/polytopes.man000644 000767 000024 00000016200 12701612221 020545 0ustar00jwzstaff000000 000000 .TH XScreenSaver 1 "" "X Version 11" .SH NAME polytopes - Draws one of the six regular 4d polytopes rotating in 4d. .SH SYNOPSIS .B polytopes [\-display \fIhost:display.screen\fP] [\-install] [\-visual \fIvisual\fP] [\-window] [\-root] [\-delay \fIusecs\fP] [\-fps] [\-5-cell] [\-8-cell] [\-16-cell] [\-24-cell] [\-120-cell] [\-600-cell] [\-wireframe] [\-surface] [\-transparent] [\-single-color] [\-depth-colors] [\-perspective-3d] [\-orthographic-3d] [\-perspective-4d] [\-orthographic-4d] [\-speed-wx \fIfloat\fP] [\-speed-wy \fIfloat\fP] [\-speed-wz \fIfloat\fP] [\-speed-xy \fIfloat\fP] [\-speed-xz \fIfloat\fP] [\-speed-yz \fIfloat\fP] .SH DESCRIPTION The \fIpolytopes\fP program shows one of the six regular 4d polytopes (5-cell, 8-cell, 16-cell, 24-cell, 120-cell, or 600-cell) rotating in 4d. The program projects the 4d polytope to 3d using either a perspective or an orthographic projection. The projected 3d polytope can then be projected to the screen either perspectively or orthographically. There are three display modes for the polytope: mesh (wireframe), solid, or transparent. Furthermore, the colors with which the polytope is drawn can be set to either single color or to a coloring according to the 4d "depth" (the w coordinate) of the polytope in its unrotated position. In the first case, the polytope is drawn in red. This coloring combined with transparency gives a nice visual effect of the structure of the polytope. The second mode draws the polytope with a fully saturated color wheel in which the edges or faces are colored accoring to their average 4d "depth". This mode is best combined with the wireframe mode, where it allows you to see how different parts of the polytope are moved to the "inside" of the projected polytope in 3d. Of course, in 4d the cells, faces, and edges of the polytope all have the same distance from the center of the polytope. Only the projection creates the appearance that some of the cells lie "inside" the figure in 3d. .SH OPTIONS .I polytopes accepts the following options: .TP 8 .B \-window Draw on a newly-created window. This is the default. .TP 8 .B \-root Draw on the root window. .TP 8 .B \-install Install a private colormap for the window. .TP 8 .B \-visual \fIvisual\fP Specify which visual to use. Legal values are the name of a visual class, or the id number (decimal or hex) of a specific visual. .TP 8 .B \-delay \fImicroseconds\fP How much of a delay should be introduced between steps of the animation. Default 25000, or 1/40th second. .PP The following six options are mutually exclusive. They determine which polytope is displayed. .TP 8 .B \-5-cell Display the 5-cell. The 5-cell is the 4d analogon of a regular tetrahedron in 3d. It has 5 regular tetrahedra as its cells, 10 equilateral triangles as faces, 10 edges, and 5 vertices. .TP 8 .B \-8-cell Display the 8-cell (a.k.a. hypercube or tessaract). The 8-cell is the 4d analogon of a cube in 3d. It has 8 cubes as its cells, 24 squares as faces, 32 edges, and 16 vertices. .TP 8 .B \-16-cell Display the 16-cell. The 16-cell is the 4d analogon of an octahedron in 3d. It has 16 regular tetrahedra as its cells, 32 equilateral triangles as faces, 24 edges, and 8 vertices. .TP 8 .B \-24-cell Display the 24-cell. The 24-cell has no 3d analogon. It has 24 regular octahedra as its cells, 96 equilateral triangles as faces, 96 edges, and 24 vertices. .TP 8 .B \-120-cell Display the 120-cell. The 120-cell has no 3d analogon. It has 120 regular dodecahedra as its cells, 720 regular pentagons as faces, 1200 edges, and 600 vertices. .TP 8 .B \-600-cell Display the 600-cell. The 600-cell has no 3d analogon. It has 600 regular tetrahedra as its cells, 1200 equilateral triangles as faces, 720 edges, and 120 vertices. .PP The following three options are mutually exclusive. They determine how the polytope is displayed. .TP 8 .B \-wireframe Display the polytope as a wireframe mesh. .TP 8 .B \-surface Display the polytope as a solid object. .TP 8 .B \-transparent Display the polytope as a transparent object (default). .PP The following two options are mutually exclusive. They determine how to color the polytope. .TP 8 .B \-single-color Display the polytope in red. .TP 8 .B \-depth-colors Display the polytope with a fully saturated color wheel in which the edges or faces are colored accoring to their average 4d "depth", i.e., the w coordinate of the polytope in its unrotated position (default). .PP The following two options are mutually exclusive. They determine how the polytope is projected from 3d to 2d (i.e., to the screen). .TP 8 .B \-perspective-3d Project the polytope from 3d to 2d using a perspective projection (default). .TP 8 .B \-orthographic-3d Project the polytope from 3d to 2d using an orthographic projection. .PP The following two options are mutually exclusive. They determine how the polytope is projected from 4d to 3d. .TP 8 .B \-perspective-4d Project the polytope from 4d to 3d using a perspective projection (default). .TP 8 .B \-orthographic-4d Project the polytope from 4d to 3d using an orthographic projection. .PP The following six options determine the rotation speed of the polytope around the six possible hyperplanes. The rotation speed is measured in degrees per frame. The speeds should be set to relatively small values, e.g., less than 4 in magnitude. .TP 8 .B \-speed-wx \fIfloat\fP Rotation speed around the wx plane (default: 1.1). .TP 8 .B \-speed-wy \fIfloat\fP Rotation speed around the wy plane (default: 1.3). .TP 8 .B \-speed-wz \fIfloat\fP Rotation speed around the wz plane (default: 1.5). .TP 8 .B \-speed-xy \fIfloat\fP Rotation speed around the xy plane (default: 1.7). .TP 8 .B \-speed-xz \fIfloat\fP Rotation speed around the xz plane (default: 1.9). .TP 8 .B \-speed-yz \fIfloat\fP Rotation speed around the yz plane (default: 2.1). .SH INTERACTION If you run this program in standalone mode you can rotate the polytope by dragging the mouse while pressing the left mouse button. This rotates the polytope in 3D, i.e., around the wx, wy, and wz planes. If you press the shift key while dragging the mouse with the left button pressed the polytope is rotated in 4D, i.e., around the xy, xz, and yz planes. To examine the polytope at your leisure, it is best to set all speeds to 0. Otherwise, the polytope will rotate while the left mouse button is not pressed. .B \-fps Display the current frame rate, CPU load, and polygon count. .SH ENVIRONMENT .PP .TP 8 .B DISPLAY to get the default host and display number. .TP 8 .B XENVIRONMENT to get the name of a resource file that overrides the global resources stored in the RESOURCE_MANAGER property. .SH SEE ALSO .BR X (1), .BR xscreensaver (1) .SH COPYRIGHT Copyright \(co 2003-2005 by Carsten Steger. 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. .SH AUTHOR Carsten Steger , 28-sep-2005. xscreensaver-5.36/hacks/glx/gleidescope.man000644 000767 000024 00000003707 12701612221 021002 0ustar00jwzstaff000000 000000 .TH XScreenSaver 1 "" "X Version 11" .SH NAME gleidescope - a tiled OpenGL kaleidescope .SH SYNOPSIS .B gleidescope [\-display \fIhost:display.screen\fP] [\-visual \fIvisual\fP] [\-window] [\-root] [-delay \fInumber\fP] [-move] [-rotate] [-zoom] [-image \fIfile\fP] [-fps] [-size \fInumber\fP] [-duration \fInumber\fP] .SH DESCRIPTION A tiled kaleidescope using OpenGL. .SH OPTIONS .TP 8 .B \-visual \fIvisual\fP Specify which visual to use. Legal values are the name of a visual class, or the id number (decimal or hex) of a specific visual. .TP 8 .B \-window Draw on a newly-created window. This is the default. .TP 8 .B \-root Draw on the root window. .TP 8 .B \-delay \fInumber\fP Per-frame delay, in microseconds. Default: 20000 (0.02 seconds.). .TP 8 .B \-move Move the camera. .TP 8 .B \-rotate Rotate the camera. .TP 8 .B \-zoom Zoom the camera in and out. .TP 8 .B \-image \fIfile\fP The texture map to use at the end of the kaleidescope. .TP 8 .B \-fps Display the current frame rate, CPU load, and polygon count. .TP 8 .B \-size \fInumber\fP The size of the hexagons being displayed [1(small)-10(large)] .TP 8 .B \-duration \fInumber\fP The time in seconds before another image is chosen. .TP 8 .SH ENVIRONMENT .PP .TP 8 .B DISPLAY to get the default host and display number. .TP 8 .B XENVIRONMENT to get the name of a resource file that overrides the global resources stored in the RESOURCE_MANAGER property. .SH SEE ALSO .BR X (1), .BR xscreensaver (1) .SH COPYRIGHT Copyright \(co 2003 by Andrew Dean 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. .SH AUTHOR Andrew Dean. xscreensaver-5.36/hacks/glx/mirrorblob.man000644 000767 000024 00000005777 12701612221 020701 0ustar00jwzstaff000000 000000 .TH XScreenSaver 1 "" "X Version 11" .SH NAME mirrorblob - Draws a wobbly blob that distorts the image behind it. .SH SYNOPSIS .B mirrorblob [\-display \fIhost:display.screen\fP] [\-visual \fIvisual\fP] [\-window] [\-root] [\-wire] [\-delay \fInumber\fP] [\-fog] [\-walls] [\-colour] [\-texture] [\-offset-texture] [\-blend] [\-antialias] [\-resolution \fInumber\fP] [\-bumps \fInumber\fP] [\-fade-time \fInumber\fP] [\-hold-time \fInumber\fP] [\-zoom \fInumber\fP] [\-fps] .SH DESCRIPTION Draws a wobbling blob, making use of alpha blending, fog, textures, and lighting, plus a ``frames per second'' meter so that you can tell how fast your graphics card is... Requires OpenGL. .SH OPTIONS .TP 8 .B \-visual \fIvisual\fP Specify which visual to use. Legal values are the name of a visual class, or the id number (decimal or hex) of a specific visual. .TP 8 .B \-window Draw on a newly-created window. This is the default. .TP 8 .B \-root Draw on the root window. .B \-wire Render in wireframe instead of solid. .TP 8 .B \-delay \fInumber\fP Per-frame delay, in microseconds. Default: 10000 (0.01 seconds.). .TP 8 .B \-fog | \-no-fog Whether to enable fog. .TP 8 .B \-walls | \-no-walls Add walls for blob to hit. .TP 8 .B \-colour | \-no-colour Draw coloured blob. If also textured, the texture will have color mixed in. .TP 8 .B \-texture | \-no-texture Whether to wrap a texture image on the blob. .TP 8 .B \-offset_texture | \-no-offset_texture Whether to ofset the texture calculations to only use a region of the image under the blob. This works well with a semi-transparent blob. .TP 8 .B \-blend | \-no-blend Whether to draw a transparent blob. (see also offset_texture above) .TP 8 .B \-antialias | \-no-antialias Whether to antialias lines. .TP 8 .B \-resolution \fInumber\fP Resolution of the tessellation used to calculate and draw the blob. Larger numbers give a smoother blob but increase calculation times exponentially. .TP 8 .B \-bumps \fInumber\fP Number of bumps used to distort the blob. .TP 8 .B \-hold-time \fInumber\fP Time until loading a new image. .TP 8 .B \-fade-time \fInumber\fP Time taken to transition between images. .TP 8 .B \-zoom \fInumber\fP Size multiplier for blob. .TP 8 .B \-fps Display the current frame rate, CPU load, and polygon count. .SH ENVIRONMENT .PP .TP 8 .B DISPLAY to get the default host and display number. .TP 8 .B XENVIRONMENT to get the name of a resource file that overrides the global resources stored in the RESOURCE_MANAGER property. .SH SEE ALSO .BR X (1), .BR xscreensaver (1) .SH COPYRIGHT Copyright \(co 2003 by Jon Dowdall. 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. .SH AUTHOR Jon Dowdall. xscreensaver-5.36/hacks/glx/blinkbox.man000644 000767 000024 00000004077 12701612221 020330 0ustar00jwzstaff000000 000000 .TH XScreenSaver 1 "" "X Version 11" .SH NAME blinkbox \- shows a ball inside a box. .SH SYNOPSIS .B blinkbox [\-display \fIhost:display.screen\fP] [\-visual \fIvisual\fP] [\-window] [\-root] [\-delay \fInumber\fP] [\-wireframe] [\-boxsize \fInumber\fP] [\-dissolve] [\-fade] [\-no\-blur] [\-fps] .SH DESCRIPTION Shows a ball contained inside of a bounding box. Colored blocks blink in when the ball hits the edges. .SH OPTIONS .TP 8 .B \-visual \fIvisual\fP Specify which visual to use. Legal values are the name of a visual class, or the id number (decimal or hex) of a specific visual. .TP 8 .B \-window Draw on a newly-created window. This is the default. .TP 8 .B \-root Draw on the root window. .TP 8 .B \-delay \fInumber\fP Per-frame delay, in microseconds. Default: 30000 (0.03 seconds.). .TP 8 .B \-wireframe | \-no-wireframe Render in wireframe instead of solid. .TP 8 .B \-boxsize Sets the size of the colored boxes. Should be between 1 and 8. Default: 2 .TP 8 .B \-dissolve | \-no-dissolve Boxes shrink instead of just vanishing. .TP 8 .B \-fade | \-no-fade Boxes fade to transparency instead of just vanishing. .TP 8 .B \-blur | \-no-blur Enable or disable motion blur on the ball. Default: blurry. .TP 8 .B \-fps Display the current frame rate, CPU load, and polygon count. .SH ENVIRONMENT .PP .TP 8 .B DISPLAY to get the default host and display number. .TP 8 .B XENVIRONMENT to get the name of a resource file that overrides the global resources stored in the RESOURCE_MANAGER property. .SH SEE ALSO .BR X (1), .BR xscreensaver (1) .SH COPYRIGHT Copyright \(co 2003 by Jeremy English. 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. .SH AUTHOR Jeremy English. Motion blur by John Boero. xscreensaver-5.36/hacks/glx/noof.man000644 000767 000024 00000002777 12701612221 017466 0ustar00jwzstaff000000 000000 .TH XScreenSaver 1 "" "X Version 11" .SH NAME noof - draw rotatey patterns .SH SYNOPSIS .B dangerball [\-display \fIhost:display.screen\fP] [\-visual \fIvisual\fP] [\-window] [\-root] [\-delay \fInumber\fP] [\-fps] .SH DESCRIPTION Draws some rotatey patterns, using OpenGL. .SH OPTIONS .TP 8 .B \-visual \fIvisual\fP Specify which visual to use. Legal values are the name of a visual class, or the id number (decimal or hex) of a specific visual. .TP 8 .B \-window Draw on a newly-created window. This is the default. .TP 8 .B \-root Draw on the root window. .TP 8 .B \-delay \fInumber\fP Per-frame delay, in microseconds. Default: 10000 (0.01 seconds.). .TP 8 .B \-fps Display the current frame rate, CPU load, and polygon count. .SH ENVIRONMENT .PP .TP 8 .B DISPLAY to get the default host and display number. .TP 8 .B XENVIRONMENT to get the name of a resource file that overrides the global resources stored in the RESOURCE_MANAGER property. .SH SEE ALSO .BR X (1), .BR xscreensaver (1) .SH COPYRIGHT Copyright \(co 2004 by Mark Kilgard. 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. .SH AUTHOR Mark Kilgard xscreensaver-5.36/hacks/glx/polyhedra.man000644 000767 000024 00000007210 12701612221 020477 0ustar00jwzstaff000000 000000 .TH XScreenSaver 1 "" "X Version 11" .SH NAME polyhedra - draws the 80 uniform polyhedra and their duals .SH SYNOPSIS .SH SYNOPSIS .B polyhedra [\-display \fIhost:display.screen\fP] [\-visual \fIvisual\fP] [\-window] [\-root] [\-delay \fInumber\fP] [\-speed \fIfloat\fP] [\-duration \fIseconds\fP] [\-no-wander] [\-spin \fIXYZ\fP] [\-wireframe] [\-no-titles] [\-which \fIname\fP] [\-wireframe] [\-fps] .SH DESCRIPTION This program renders 160 different 3D solids, and displays some information about each. A new solid is chosen every few seconds. There are 75 uniform polyhedra, plus an inifinite number of prisms and antiprisms: * Convex Uniform Polyhedra: * Platonic solids (5) * Archimedean solids (13) * Convex prisms and antiprisms (2 infinite families) * Nonconvex Uniform Polyhedra: * Kepler-Poinsot polyhedra (4) * Nonconvex uniform polyhedra (53) * Nonconvex prisms, antiprisms, and crossed antiprisms (3 infinite families) Representative samples of the prism sets brings the total to 80 solids. Including the \fIdual\fP of each brings the total up to 160. (To create the "dual" of a polyhedron, faces are replaced with vertices, and vertices with faces.) .SH OPTIONS .TP 8 .B \-visual \fIvisual\fP Specify which visual to use. Legal values are the name of a visual class, or the id number (decimal or hex) of a specific visual. .TP 8 .B \-window Draw on a newly-created window. This is the default. .TP 8 .B \-root Draw on the root window. .TP 8 .B \-delay \fInumber\fP Per-frame delay, in microseconds. Default: 30000 (0.03 seconds.). .TP 8 .B \-speed \fInumber\fP Larger numbers mean run faster. Default: 1.0. .TP 8 .B \-duration \fIseconds\fP How long before switching to a new polyhedron. Default 12 seconds. .TP 8 .B \-wander | \-no-wander Whether the objects should wander around the screen. .TP 8 .B \-spin [XYZ] | \-no-spin Which axes, if any, to spin around on. .TP 8 .B \-titles | \-no-titles Whether to display text describing each object. .TP 8 .B \-which \fIobject-name\fP Display only one particular object, identified by number, name, or Whthoff symbol. .TP 8 .B \-wireframe | \-no-wireframe Render in wireframe instead of solid. .TP 8 .B \-fps Display the current frame rate, CPU load, and polygon count. .SH KEY BINDINGS When running in a window, you can rotate the object with the mouse. Also, the following keystrokes are defined: .TP 12 .B SPC \fIor\fP TAB Select a new polyhedron at random. .TP 12 .B + \fIor\fP > Select the next-higher-numbered polyhedron. .TP 12 .B - \fIor\fP < Select the next-lower-numbered polyhedron. .TP 12 .B ESC \fIor\fP ^C Quit. .SH ENVIRONMENT .PP .TP 8 .B DISPLAY to get the default host and display number. .TP 8 .B XENVIRONMENT to get the name of a resource file that overrides the global resources stored in the RESOURCE_MANAGER property. .SH SEE ALSO .BR X (1), .BR xscreensaver (1) .SH COPYRIGHT Copyright \(co 1991-2002 Dr. Zvi Har'El. Copyright \(co 2004 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. .SH AUTHOR Based on the program \fIkaleido\fP ("Kaleidoscopic construction of uniform polyhedra"), by Dr. Zvi Har'El http://www.math.technion.ac.il/~rl/ ftp://ftp.math.technion.ac.il/kaleido/ Adapted for OpenGL and XScreenSaver by Jamie Zawinski, 2004. xscreensaver-5.36/hacks/glx/antinspect.man000644 000767 000024 00000003306 12701612221 020662 0ustar00jwzstaff000000 000000 .TH XScreenSaver 1 "March 2004" .SH NAME antinspect \- ant model inspection screenhack .SH SYNOPSIS .B antinspect [\-display \fIhost:display.screen\fP] [\-window] [\-root] [\-install] [\-visual \fIvisual\fP] [\-delay \fImicroseconds\fP] [\-fps] .SH DESCRIPTION The \fIantinspect\fP code displays three ant-powered balls churning in a circle. .SH OPTIONS .I antinspect accepts the following options: .TP 8 .B \-window Draw on a newly-created window. This is the default. .TP 8 .B \-root Draw on the root window. .TP 8 .B \-install Install a private colormap for the window. .TP 8 .B \-shadows Draw shadows on ground .TP 8 .B \-visual \fIvisual\fP\fP Specify which visual to use. Legal values are the name of a visual class, or the id number (decimal or hex) of a specific visual. .B \-fps Display the current frame rate, CPU load, and polygon count. .SH ENVIRONMENT .PP .TP 8 .B DISPLAY to get the default host and display number. .TP 8 .B XENVIRONMENT to get the name of a resource file that overrides the global resources stored in the RESOURCE_MANAGER property. .SH SEE ALSO .BR X (1), .BR xscreensaver (1) .BR xscreensaver\-demo (1), .BR xscreensaver\-getimage (1) .SH COPYRIGHT Copyright \(co 2004 by Blair Tennessy. 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. .SH AUTHOR Blair Tennessy , 15-March-2004. xscreensaver-5.36/hacks/glx/providence.man000644 000767 000024 00000003461 12701612221 020652 0ustar00jwzstaff000000 000000 .TH XScreenSaver 1 "May 2004" .SH NAME providence - eye in glory screenhack .SH SYNOPSIS .B providence [\-display \fIhost:display.screen\fP] [\-window] [\-root] [\-install] [\-visual \fIvisual\fP] [\-delay \fImicroseconds\fP] [\-wireframe] [\-fps] .SH DESCRIPTION The \fIprovidence\fP code displays an eye, shrouded in glory, set upon the base of a pyramid. .SH OPTIONS .I providence accepts the following options: .TP 8 .B \-window Draw on a newly-created window. This is the default. .TP 8 .B \-root Draw on the root window. .TP 8 .B \-install Install a private colormap for the window. .TP 8 .B \-eye Draw an eye/$. .TP 8 .B \-visual \fIvisual\fP\fP Specify which visual to use. Legal values are the name of a visual class, or the id number (decimal or hex) of a specific visual. .TP 8 .B \-wireframe Render in wireframe (with hidden line removal) instead of as textured solids. .TP 8 .B \-fps Display the current frame rate, CPU load, and polygon count. .SH ENVIRONMENT .PP .TP 8 .B DISPLAY to get the default host and display number. .TP 8 .B XENVIRONMENT to get the name of a resource file that overrides the global resources stored in the RESOURCE_MANAGER property. .SH SEE ALSO .BR X (1), .BR xscreensaver (1) .BR xscreensaver\-demo (1), .BR xscreensaver\-getimage (1) .SH COPYRIGHT Copyright \(co 2004 by Blair Tennessy. 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. .SH AUTHOR Blair Tennessy , 11-May-2004. xscreensaver-5.36/hacks/glx/pinion.man000644 000767 000024 00000004767 12701612221 020022 0ustar00jwzstaff000000 000000 .TH XScreenSaver 1 "30-Oct-99" "X Version 11" .SH NAME pinion - draws a scrolling sequence of interconnected gears .SH SYNOPSIS .B pinion [\-display \fIhost:display.screen\fP] [\-window] [\-root] [\-install] [\-visual \fIvisual\fP] [\-delay \fIusecs\fP] [\-scroll \fIratio\fP] [\-spin \fIratio\fP] [\-size \fIratio\fP] [\-max-rpm \fIint\fP] [\-wireframe] [\-fps] .SH DESCRIPTION The \fIpinion\fP program draws an interconnected set of gears moving across the screen. .SH OPTIONS .I pinion accepts the following options: .TP 8 .B \-window Draw on a newly-created window. This is the default. .TP 8 .B \-root Draw on the root window. .TP 8 .B \-install Install a private colormap for the window. .TP 8 .B \-visual \fIvisual\fP\fP Specify which visual to use. Legal values are the name of a visual class, or the id number (decimal or hex) of a specific visual. .TP 8 .B \-delay \fIusecs\fP The delay between frames of the animation, in microseconds: default 15000. .TP 8 .B \-spin \fIratio\fP How fast the gears should spin; default 1.0. 2.0 means twice as fast, 0.5 means half as fast. .TP 8 .B \-scroll \fIratio\fP How fast the gears should scroll past the screen; default 1.0. 2.0 means twice as fast, 0.5 means half as fast. .TP 8 .B \-size \fIratio\fP How big the gears should be, on average; default 1.0. 2.0 means twice as large, 0.5 means half as large. .TP 8 .B \-max\-rpm \fIinteger\fP If any gear exceeds the maximum RPM, the current gear train is broken there, and we start a new train. Default: 900 RPM. (At 30 FPS, that's about half a rotation per frame.) .TP 8 .B \-wireframe Render in wireframe instead of solid. .TP 8 .B \-fps Display the current frame rate, CPU load, and polygon count. .SH ENVIRONMENT .PP .TP 8 .B DISPLAY to get the default host and display number. .TP 8 .B XENVIRONMENT to get the name of a resource file that overrides the global resources stored in the RESOURCE_MANAGER property. .SH SEE ALSO .BR gears (MANSUFFIX), .BR xscreensaver (1), .BR X (1) .SH COPYRIGHT Copyright \(co 2004 by 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. .SH AUTHOR Jamie Zawinski , 12-Dec-2004. xscreensaver-5.36/hacks/glx/boing.man000644 000767 000024 00000006051 12701612221 017610 0ustar00jwzstaff000000 000000 .TH XScreenSaver 1 "30-Oct-99" "X Version 11" .SH NAME boing - draws a bouncing ball like the ancient Amiga demo .SH SYNOPSIS .B boing [\-display \fIhost:display.screen\fP] [\-window] [\-root] [\-install] [\-visual \fIvisual\fP] [\-delay \fIusecs\fP] [\-smooth] [\-lighting] [\-scanlines] [\-speed] [\-no\-spin] [\-angle \fIdegrees\fP] [\-size \fIratio\fP] [\-parallels \fIn\fP] [\-meridians \fIn\fP] [\-wireframe] [\-fps] .SH DESCRIPTION The \fIboing\fP program draws a bouncing checkered ball on a grid. This is a clone of the first graphics demo for the Amiga 1000, which was written by Dale Luck and RJ Mical during a break at the 1984 Consumer Electronics Show (or so the legend goes.) The boing ball was briefly the official logo of Amiga Inc., until they were bought by Commodore later that year. With no arguments, this program looks a lot like the original Amiga demo. With "-smooth -lighting", it looks... less old. .SH OPTIONS .I boing accepts the following options: .TP 8 .B \-window Draw on a newly-created window. This is the default. .TP 8 .B \-root Draw on the root window. .TP 8 .B \-install Install a private colormap for the window. .TP 8 .B \-visual \fIvisual\fP\fP Specify which visual to use. Legal values are the name of a visual class, or the id number (decimal or hex) of a specific visual. .TP 8 .B \-delay \fIusecs\fP The delay between frames of the animation, in microseconds: default 15000. .TP 8 .B \-smooth Draw a smooth sphere instead of a faceted polyhedron. .TP 8 .B \-lighting Do shaded lighting instead of flat colors. .TP 8 .B \-scanlines If the window is large enough, draw horizontal lines to simulate the scanlines on a low resolution monitor. .TP 8 .B \-speed \fIratio\fP Change the animation speed; 0.5 to go half as fast, 2.0 to go twice as fast. .TP 8 .B \-no\-spin Don't rotate the ball. .TP 8 .B \-angle \fIdegrees\fP The jaunty angle at which the ball sits. Default 15 degrees. .TP 8 .B \-size \fIratio\fP How big the ball is; default 0.5 meaning about half the size of the window. .TP 8 .B \-parallels \fIn\fP .B \-meridians \fIn\fP The pattern of rectangles on the ball. Default 8x16. .TP 8 .B \-wireframe Look crummy. .TP 8 .B \-fps Display the current frame rate, CPU load, and polygon count. .SH ENVIRONMENT .PP .TP 8 .B DISPLAY to get the default host and display number. .TP 8 .B XENVIRONMENT to get the name of a resource file that overrides the global resources stored in the RESOURCE_MANAGER property. .SH SEE ALSO .BR bsod (MANSUFFIX), .BR pong (MANSUFFIX), .BR xscreensaver (1), .BR X (1) .SH COPYRIGHT Copyright \(co 2005 by 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. .SH AUTHOR Jamie Zawinski , 19-Feb-2005. xscreensaver-5.36/hacks/glx/carousel.man000644 000767 000024 00000006343 12701612221 020333 0ustar00jwzstaff000000 000000 .TH XScreenSaver 1 "" "X Version 11" .SH NAME carousel - displays multiple images rotating in a circular formation .SH SYNOPSIS .B carousel [\-display \fIhost:display.screen\fP] [\-visual \fIvisual\fP] [\-window] [\-root] [\-count \fIint\fP] [\-zoom | \-no\-zoom] [\-tilt \fIXY\fP] [\-titles | \-no\-titles] [\-font \fIfont\fP] [\-speed \fIratio\fP] [\-duration \fIseconds\fP] [\-fps] [\-debug] [\-wireframe] .SH DESCRIPTION Loads several random images, and displays them flying in a circular formation. The circle changes speed and direction randomly, tilts on its axis, and the images move in and out. This program requires a good video card capable of supporting large textures. To specify the directory that images are loaded from, run .BR xscreensaver-demo (1) and click on the "Advanced" tab. .SH OPTIONS .TP 8 .B \-visual \fIvisual\fP Specify which visual to use. Legal values are the name of a visual class, or the id number (decimal or hex) of a specific visual. .TP 8 .B \-window Draw on a newly-created window. This is the default. .TP 8 .B \-root Draw on the root window. .TP 8 .B \-count \fIint\fP How many images to display. Default 7. .TP 8 .B \-zoom \fB| \-no\-zoom\fP Whether the images should move in and out (toward and away from the axis of rotation). Default true. .TP 8 .B \-tilt \fIXY\fP \fB| \-no\-tilt\fP Whether the axis of rotation should tilt, and how. \fB-tilt X\fP means that it will tilt toward and away from the viewer. \fB-tilt Y\fP means that it will tilt to the left and right of the screen. \fB-tilt XY\fP (the default) means it will do both. .TP 8 .B \-titles \fB| \-no\-titles\fP Whether to display the file names of the images beneath them. Default: yes. .TP 8 .B \-font \fIfont-name\fP The font to use for titles. Note that the size of the font affects the clarity of the characters, not their size (it is auto-scaled.) .TP 8 .B \-duration \fIseconds\fP Every \fIduration\fP seconds, one of the images will be replaced with a new one. Default 20 seconds. .TP 8 .B \-speed \fIratio\fP Speed up or slow down the animation. 0.5 means half as fast as the default; 2.0 means twice as fast. .TP 8 .B \-delay \fInumber\fP Per-frame delay, in microseconds. Default: 20000 (0.02 seconds.). .TP 8 .B \-fps Display the current frame rate, CPU load, and polygon count. .TP 8 .B \-debug Prints debugging info to stderr. .TP 8 .B \-wireframe Another debug mode. .SH ENVIRONMENT .PP .TP 8 .B DISPLAY to get the default host and display number. .TP 8 .B XENVIRONMENT to get the name of a resource file that overrides the global resources stored in the RESOURCE_MANAGER property. .SH SEE ALSO .BR X (1), .BR xscreensaver-demo (1) .BR xscreensaver-getimage (1) .BR xscreensaver (1) .BR glslideshow (MANSUFFIX) .BR photopile (MANSUFFIX) .SH COPYRIGHT Copyright \(co 2005 by 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. .SH AUTHOR Jamie Zawinski. xscreensaver-5.36/hacks/glx/fliptext.man000644 000767 000024 00000007177 12701612221 020363 0ustar00jwzstaff000000 000000 .TH XScreenSaver 1 "20-Mar-2005" "X Version 11" .SH NAME fliptext - draws pages of text whose lines transparently flip around .SH SYNOPSIS .B fliptext [\-display \fIhost:display.screen\fP] [\-window] [\-root] [\-visual \fIvisual\fP] [\-delay \fImicroseconds\fP] [\-program \fIcommand\fP] [\-size \fIinteger\fP ] [\-columns \fIinteger\fP] [\-left | \-center | \-right] [\-lines \fIinteger\fP] [\-speed \fIfloat\fP] [\-delay \fIusecs\fP] [\-font \fIxlfd\fP] [\-wireframe] [\-fps] .SH DESCRIPTION The \fIfliptext\fP program runs another program to generate a stream of text, then animates the lines of that text transparently flipping in and out in 3D. .SH OPTIONS .I fliptext accepts the following options: .TP 8 .B \-window Draw on a newly-created window. This is the default. .TP 8 .B \-root Draw on the root window. .TP 8 .B \-install Install a private colormap for the window. .TP 8 .B \-visual \fIvisual\fP\fP Specify which visual to use. Legal values are the name of a visual class, or the id number (decimal or hex) of a specific visual. .TP 8 .B \-program \fIsh-command\fP This program will be run periodically, and its output will be the text that is displayed. Default \fIxscreensaver\-text\fP. You can configure the text printed through the "Advanced" tab of .BR xscreensaver\-demo (1), or by editing your ~/.xscreensaver file. .TP 8 .B \-size \fIinteger\fP How large a font to use, in points. (Well, in some arbitrary unit we're calling "points" for the sake of argument.) Default: 20. .TP 8 .B \-columns \fIinteger\fP At (approximately) what column to wrap lines. Default 80. Wrapping is done by pixels, not characters, and lines will always wrap at the edge of the screen regardless. .TP 8 .B \-left | \-center | \-right Whether to align the text flush left, centered, or flush right. The default is to choose randomly each time a new screen of text is displayed. .TP 8 .B \-lines \fIinteger\fP How many lines of text should be shown at once. Default 8. .TP 8 .B \-speed \fIratio\fP Change the animation speed; 0.5 to go half as fast, 2.0 to go twice as fast. .TP 8 .B \-delay \fIusecs\fP The delay between frames of the animation; default is 10000 (1/10th second.) .TP 8 .B \-font \fIfont-name\fP The name of the font to use. For best effect, this should be a large font (at least 36 points.) The bigger the font, the better looking the characters will be. Note that the size of this font affects only the clarity of the characters, not their size on the screen: for that, use the \fI\-size\fP or \fI\-columns\fP options. Default: -*-utopia-bold-r-normal-*-*-720-*-*-*-*-iso8859-1 .TP 8 .B \-fps Display the current frame rate, CPU load, and polygon count. .SH ENVIRONMENT .PP .TP 8 .B DISPLAY to get the default host and display number. .TP 8 .B XENVIRONMENT to get the name of a resource file that overrides the global resources stored in the RESOURCE_MANAGER property. .SH SEE ALSO .BR xscreensaver (1), .BR xscreensaver-text (1), .BR fortune (1), .BR phosphor (MANSUFFIX), .BR apple2 (MANSUFFIX), .BR fontglide (MANSUFFIX), .BR ljlatest (MANSUFFIX), .BR dadadodo (1), .BR webcollage (MANSUFFIX), .BR driftnet (1) .BR EtherPEG , .BR EtherPeek .SH COPYRIGHT Copyright \(co 2005 by 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. .SH AUTHOR Jamie Zawinski xscreensaver-5.36/hacks/glx/antmaze.man000644 000767 000024 00000003163 12701612221 020152 0ustar00jwzstaff000000 000000 .TH XScreenSaver 1 "May 2005" .SH NAME antmaze \- ant maze walker .SH SYNOPSIS .B antmaze [\-display \fIhost:display.screen\fP] [\-window] [\-root] [\-install] [\-visual \fIvisual\fP] [\-delay \fImicroseconds\fP] [\-fps] .SH DESCRIPTION The \fIantmaze\fP code displays ants finding their way through a maze. .SH OPTIONS .I antmaze accepts the following options: .TP 8 .B \-window Draw on a newly-created window. This is the default. .TP 8 .B \-root Draw on the root window. .TP 8 .B \-install Install a private colormap for the window. .TP 8 .B \-visual \fIvisual\fP\fP Specify which visual to use. Legal values are the name of a visual class, or the id number (decimal or hex) of a specific visual. .B \-fps Display the current frame rate, CPU load, and polygon count. .SH ENVIRONMENT .PP .TP 8 .B DISPLAY to get the default host and display number. .TP 8 .B XENVIRONMENT to get the name of a resource file that overrides the global resources stored in the RESOURCE_MANAGER property. .SH SEE ALSO .BR X (1), .BR xscreensaver (1) .BR xscreensaver\-demo (1), .BR xscreensaver\-getimage (1) .SH COPYRIGHT Copyright \(co 2005 by Blair Tennessy. 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. .SH AUTHOR Blair Tennessy , 8-May-2005. xscreensaver-5.36/hacks/glx/tangram.man000644 000767 000024 00000003715 12701612221 020147 0ustar00jwzstaff000000 000000 .TH XScreenSaver 1 "" "X Version 11" .SH NAME tangram - watch the computer solve tangram puzzles. .SH SYNOPSIS .B tangram [\-display \fIhost:display.screen\fP] [\-visual \fIvisual\fP] [\-window] [\-root] [\-delay \fInumber\fP] [\-wireframe] [\-viewing_time \fInumber\fP] [\-rotate] [\-fps] .SH DESCRIPTION The \fItangram\fP program uses a few basic shapes to build silhouettes of recognizable objects. .SH OPTIONS .I tangram accepts the following options: .TP 8 .B \-visual \fIvisual\fP Specify which visual to use. Legal values are the name of a visual class, or the id number (decimal or hex) of a specific visual. .TP 8 .B \-window Draw on a newly-created window. This is the default. .TP 8 .B \-root Draw on the root window. .TP 8 .B \-delay \fInumber\fP Per-frame delay, in microseconds. Default: 10000 (0.01 seconds.). .TP 8 .B \-wireframe | \-no-wireframe Render in wireframe instead of solid. .TP 8 .B \-viewing_time \fInumber\fP Specify the length of time, in seconds, that the finished puzzle should be displayed. Default: 5 .TP 8 .B \-rotate | \-no-rotate Rotate the camera around the puzzle. .TP 8 .B \-fps Display the current frame rate, CPU load, and polygon count. .SH ENVIRONMENT .PP .TP 8 .B DISPLAY to get the default host and display number. .TP 8 .B XENVIRONMENT to get the name of a resource file that overrides the global resources stored in the RESOURCE_MANAGER property. .SH SEE ALSO .BR X (1), .BR xscreensaver (1) .SH COPYRIGHT Copyright \(co 2005 by Jeremy English. 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. .SH AUTHOR Jeremy English xscreensaver-5.36/hacks/glx/crackberg.man000644 000767 000024 00000006451 12701612221 020441 0ustar00jwzstaff000000 000000 .TH XScreenSaver 1 "" "X Version 11" .SH NAME crackberg - Lose your way wandering some height fields, and enjoy candy. .SH SYNOPSIS .B crackberg [\-root] [\-window] [\-install] [\-display \fIhost:display.screen\fP] [\-visual \fIvisual\fP] [\-window-id \fIid\fP] [\-delay \fIusecs\fP] [\-fps] [\-crack] [\-lit] [\-boring] [\-letterbox] [\-flat] [\-wire] [\-nowater] [\-visibility \fIfloat\fP] [\-color \fIstring\fP] [\-nsubdivs \fIinteger\fP] .SH DESCRIPTION Flies through height maps, optionally animating the instantiation and destruction of generated tiles; by default, tiles 'grow' into place (height gradually increased up to correct value). In windowed mode the following key controls are available: .TP 8 .B left, right Turn left and right. .TP 8 .B a,w,s,d Move left, forwards, backwards, and to the right, respectively. .TP 8 .B 1,2 Decrease and increase manual speed, respectively. .TP 8 .B Spacebar Return to automatic control. .SH OPTIONS .I crackberg accepts the following options: .TP 8 .B \-root Draw on the root window. .TP 8 .B \-window Draw on a newly-created window. This is the default. .TP 8 .B \-install Install a private colormap for the window. .TP 8 .B \-visual \fIvisual\fP Specify which visual to use. Legal values are the name of a visual class, or the id number (decimal or hex) of a specific visual. .TP 8 .B \-delay \fImicroseconds\fP Delay between frames; default 20000 (1/50th of a second). .TP 8 .B \-fps Display the current frame rate, CPU load, and polygon count. .TP 8 .B \-crack Use all possible methods to animate tile instantiation. .TP 8 .B \-boring Do not animate instatiation at all; use this to get standard landscape generator behavior. .TP 8 .B \-letterbox Drawable window region has a 16:9 aspect ratio, regardless of actual window size. .TP 8 .B \-lit Enable lighting. .TP 8 .B \-flat Flat shading (OpenGL will use one color per primitive, rather than interpolating betwixt vertices). .TP 8 .B \-wire Wireframe. .TP 8 .B \-nowater Do not display 'water' (forces negative values to zero, and selects a different coloring method). .TP 8 .B \-visibility \fIfloat\fP Value in range [0.2,1.0] (default 0.6) specifying proportion of viewable XY plane which is to be drawn upon. .TP 8 .B \-color \fIstring\fP Selects color scheme. Use with no or bogus argument for current list. .TP 8 .B \-nsubdivs \fIinteger\fP Number of times to recursively subdivide each triangular tile. Each increment increases total triangles by a factor of 4; for instance the default setting 4 results in 256 triangles per tile. .SH ENVIRONMENT .PP .TP 8 .B DISPLAY to get the default host and display number. .TP 8 .B XENVIRONMENT to get the name of a resource file that overrides the global resources stored in the RESOURCE_MANAGER property. .SH SEE ALSO .BR X (1), .BR xscreensaver (1) .SH COPYRIGHT Copyright \(co 2005 by Matus Telgarsky. 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. .SH AUTHOR Matus Telgarsky , 2005. xscreensaver-5.36/hacks/glx/glhanoi.man000664 000767 000024 00000004211 12701612221 020131 0ustar00jwzstaff000000 000000 .TH XScreenSaver 1 "" "X Version 11" .SH NAME glhanoi - OpenGL Towers of Hanoi .SH SYNOPSIS .B glhanoi [\-display \fIhost:display.screen\fP] [\-visual \fIvisual\fP] [\-window] [\-root] [\-delay \fInumber\fP] [\-count \fInumber\fP] [\-poles \fInumber\fP] [\-speed \fInumber\fP] [\-wireframe] [\-light] [\-texture] [\-fog] [\-fps] .SH DESCRIPTION Implementation of Towers of Hanoi in OpenGL .SH OPTIONS .TP 8 .B \-visual \fIvisual\fP Specify which visual to use. Legal values are the name of a visual class, or the id number (decimal or hex) of a specific visual. .TP 8 .B \-window Draw on a newly-created window. This is the default. .TP 8 .B \-root Draw on the root window. .TP 8 .B \-delay \fInumber\fP Per-frame delay, in microseconds. Default: 30000 (0.03 seconds.). .TP 8 .B \-count \fInumber\fP Number of disks. Default: 7. .TP 8 .B \-poles \fInumber\fP Number of poles. Default: random from 3 to disks+1. .TP 8 .B \-speed \fInumber\fP Speed multiplier (for smallest disks). Default: 1. .TP 8 .B \-trails \fInumber\fP Length of disk trails, in seconds. Default: 2. .TP 8 .B \-wireframe | \-no-wireframe Render in wireframe instead of solid. .TP 8 .B \-fog | \-no-fog Render in fog. .TP 8 .B \-fps Display the current frame rate, CPU load, and polygon count. .TP 8 .B \-light | -no-light Whether the scene is lit. .TP 8 .B \-texture | \-no-texture Render with textures instead of solid. .SH ENVIRONMENT .PP .TP 8 .B DISPLAY to get the default host and display number. .TP 8 .B XENVIRONMENT to get the name of a resource file that overrides the global resources stored in the RESOURCE_MANAGER property. .SH SEE ALSO .BR X (1), .BR xscreensaver (1) .SH COPYRIGHT Copyright \(co 2004 by Dave Atkinson. 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. .SH AUTHOR Dave Atkinson. xscreensaver-5.36/hacks/glx/cube21.man000644 000767 000024 00000010171 12701612221 017571 0ustar00jwzstaff000000 000000 .TH XScreenSaver 1 "30-Aug-05" "X Version 11" .SH NAME cube21 - animates the Cube 21 puzzle .SH SYNOPSIS .B cube21 [\-display \fIhost:display.screen\fP] [\-visual \fIvisual\fP] [\-window] [\-root] [\-install] [\-delay \fImicroseconds\fP] [\-texture] [\-no\-texture] [\-mono] [\-wireframe] [\-spin] [\-no\-spin] [\-wander] [\-no\-wander] [\-randomize] [\-no\-randomize] [\-spinspeed \fInumber\fP] [\-rotspeed \fInumber\fP] [\-wanderspeed \fInumber\fP] [\-wait \fInumber\fP] [\-cubesize \fInumber\fP] [\-colormode \fIarg\fP] [\-fps] .SH DESCRIPTION This program animates a puzzle known as Cube 21 or Square-1. Its moves are chosen randomly. .P Cube 21 is a Rubik-like puzzle invented in 1992. Its specialities are that it can change its shape and even the number of possible moves. It can have more than 200 different shapes and the total number of configurations (assuming colors) is several tens of billions. .SH OPTIONS .I cube21 accepts the following options: .TP 8 .B \-window Draw on a newly-created window. This is the default. .TP 8 .B \-root Draw on the root window. .TP 8 .B \-install Install a private colormap for the window. .TP 8 .B \-visual \fIvisual\fP\fP Specify which visual to use. Legal values are the name of a visual class, or the id number (decimal or hex) of a specific visual. .TP 8 .B \-delay \fImicroseconds\fP How long to pause between frames. Default is 20000, or 0.02 second. .TP 8 .B \-texture Use texture maps. This is the default. .TP 8 .B \-no\-texture Use solid colors. .TP 8 .B \-mono Disable both texture maps and colors. .TP 8 .B \-wireframe Only draw outlines. Outlines of all pieces, not only the whole object, are drawn. .TP 8 .B \-spin Spin the whole object around X, Y and Z axes. This is the default. .TP 8 .B \-no\-spin Do not spin, showing the same three faces all the time. .TP 8 .B \-wander Move the object around the screen. This is the default. .TP 8 .B \-no\-wander Keep the object centered on the screen. .TP 8 .B \-randomize Shuffle the puzzle randomly at startup. This is the default. .TP 8 .B \-no\-randomize Do not shuffle at startup, begin at the shape of cube. .TP 8 .B \-spinspeed \fInumber\fP The relative speed of spinning. Default is 1.0. .TP 8 .B \-rotspeed \fInumber\fP The relative speed of the moves. Default is 3.0. Setting to \(<= 0.0 makes the object stay at one configuration. .TP 8 .B \-wanderspeed \fInumber\fP The relative speed of wandering around the screen. Default is 1.0. .TP 8 .B \-wait \fInumber\fP How long to stay at ending position after each move. The meaning of the argument is again relative. Default is 40.0. .TP 8 .B \-cubesize \fInumber\fP Size of the object. Value of 3.0 fills roughly all the screen (its height). Default is 0.7. .TP 8 .B \-colormode \fIargument\fP How many and which colors should the object have. The colors are put on the piece faces so that the puzzle is solvable. The inner faces are not influenced. .RS .TP 8 .BR se " or " silver Simulate the "Silver Edition" \- white and one random color. .TP 8 .BR 2 " or " two Two random colors. .TP 8 .BR ce " or " classic Simulate the "Classic Edition" \- white, yellow, orange, red, green and blue. .TP 8 .BR 6 " or " six Six random colors. .TP 8 .BR 1 " or " random " or " rnd One random color. .TP 8 Anything else All faces white. .RE .TP 8 .B \-fps Display the current frame rate, CPU load, and polygon count. .SH ENVIRONMENT .PP .TP 8 .B DISPLAY to get the default host and display number. .TP 8 .B XENVIRONMENT to get the name of a resource file that overrides the global resources stored in the RESOURCE_MANAGER property. .SH SEE ALSO .BR X (1), .BR xscreensaver (1) .SH COPYRIGHT Copyright \(co 2005 by Vaclav Potocek. 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. .SH AUTHOR Vaclav (Vasek) Potocek , 30-Aug-05. xscreensaver-5.36/hacks/glx/timetunnel.man000644 000767 000024 00000005476 12701612221 020710 0ustar00jwzstaff000000 000000 .TH XScreenSaver 1 "" "X Version 11" .SH NAME timetunnel - Plasma tunnels fade in and out .SH SYNOPSIS .B timetunnel [\-display \fIhost:display.screen\fP] [\-visual \fIvisual\fP] [\-window] [\-root] [\-start \fInumber\fP] [\-end \fInumber\fP] [\-dilate \fInumber\fP] [\-no-logo] [\-reverse] [\-no-fog] [\-no-texture] [\-wireframe] [\-fps] [\-tardis \fItexture\fP] [\-head \fItexture\fP] [\-marquee \fItexture\fP] [\-tun1 \fItexture\fP] [\-tun2 \fItexture\fP] [\-tun3 \fItexture\fP] .SH DESCRIPTION Draws an animation similar to the opening and closing effects on the Dr. Who television show. .SH OPTIONS .TP 8 .B \-visual \fIvisual\fP Specify which visual to use. Legal values are the name of a visual class, or the id number (decimal or hex) of a specific visual. .TP 8 .B \-window Draw on a newly-created window. This is the default. .TP 8 .B \-root Draw on the root window. .TP 8 .B \-start \fInumber\fP Start time of loop, 0.0 - 30.00. Default 0.0. May be identical to end time. .TP 8 .B \-end \fInumber\fP End time of loop, 0.0 - 30.00. Default 27.79. May be identical to start time. .TP 8 .B \-dilate \fInumber\fP Scale time to speed or slow simulation. Numbers less than one slow it down. .TP 8 .B \-no-logo Show only tunnels, no logos, etc. .TP 8 .B \-reverse Play in reverse, including tunnels. .TP 8 .B \-no-fog Turn off fog. .TP 8 .B \-no-texture Turn off textures. .TP 8 .B \-wireframe Show as wire frame. .TP 8 .B \-fps | \-no-fps Whether to show a frames-per-second display at the bottom of the screen. .TP 8 .B \-tardis \fItexture\fP Specify an xpm file to override default tardis texture. .TP 8 .B \-head \fItexture\fP Specify an xpm file to override default Dr. Who head texture. .TP 8 .B \-marquee \fItexture\fP Specify an xpm file to override default show marquee texture. .TP 8 .B \-tun1 \fItexture\fP Specify an xpm file to override default tardis tunnel texture. .TP 8 .B \-tun2 \fItexture\fP Specify an xpm file to override default middle tunnel texture. .TP 8 .B \-tun3 \fItexture\fP Specify an xpm file to override default final tunnel texture. .SH ENVIRONMENT .PP .TP 8 .B DISPLAY to get the default host and display number. .TP 8 .B XENVIRONMENT to get the name of a resource file that overrides the global resources stored in the RESOURCE_MANAGER property. .SH SEE ALSO .BR X (1), .BR xscreensaver (1) .SH COPYRIGHT Copyright \(co 2005 by Sean Brennan. 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. .SH AUTHOR Sean Brennan xscreensaver-5.36/hacks/glx/juggler3d.man000644 000767 000024 00000011223 12701612221 020375 0ustar00jwzstaff000000 000000 '\" t .\" ** The above line should force tbl to be used as a preprocessor ** .TH XScreenSaver 1 "" "X Version 11" .SH NAME juggler3d - juggling man screen saver. .SH SYNOPSIS .B juggler3d [\-display host:display.screen ] [\-root ] [\-window ] [\-mono ] [\-install | \-noinstall ] [\-visual visual ] [\-window\-id id ] [\-pattern pattern ] [\-tail number ] [\-real | \-no\-real ] [\-describe | \-no\-describe ] [\-balls | \-no\-balls ] [\-clubs | \-no\-clubs ] [\-torches | \-no\-torches ] [\-knives | \-no\-knives ] [\-rings | \-no\-rings ] [\-bballs | \-no\-bballs ] [\-count count ] [\-cycles cycles ] [\-delay delay ] [\-ncolors ncolors ] [\-fps] .SH DESCRIPTION Draws a stick-man juggling various collections of objects. .SH OPTIONS .I juggler3d accepts the following options: .TP 8 .B \-display host:display.screen X11 display to use. Overrides .B DISPLAY environment variable. .TP 8 .B \-root Draw on the root window. .TP 8 .B \-window Draw on a newly-created X window. This is the default. .TP 8 .B \-mono Draw in monochrome. .TP 8 .B \-install | \-noinstall Turn on/off installing colormap. .TP 8 .B \-visual visual Specify which visual to use. Legal values are the name of a visual class, or the id number (decimal or hex) of a specific visual. .TP 8 .B \-window\-id id Draw on an already existing X window. .TP 8 .B \-pattern\ \(dq pattern \(dq Specify juggling pattern in annotated .B site-swap notation. In .B site-swap notation, the "height" of each throw is given. E.g., "3" is the height needed to juggle a 3\-Cascade. Note that these sequences need to be chosen carefully, to avoid collisions. Annotations indicate relative hand movements or tricks: .TS cb l. \&\- Inside throw (default) + Outside throw \&= Cross Throw & Cross Catch x Cross Throw and Catch \&_ Bounce .TE .TP 8 .B \-pattern\ \(dq[ pattern ]\(dq Specify juggling pattern in annotated .B Adam notation. Adam notation is a little harder to visualize. Each integer .B n represents a cyclic permutation of (0...n). The equivalent .B site-swap value is determined by calculating how many of the permutations it takes to get back to the identity. The largest number used is the same as the number of objects in the pattern. The advantage of Adam notation is that these sequences do not need to be chosen carefully, since all possible sequences are juggle-able. Annotations are the same as in .B site-swap notation. For example, both of these describe a 3\-Shower: .IP .B \-pattern\ "+5 1" .IP .B \-pattern\ "[+3 1]" For further examples, see the .B portfolio list in the source code. .TP 8 .B \-tail number Minimum Trail Length. 0 \- 100. Default: 1. Objects may override this, for example flaming torches always leave a trail. .TP 8 .BR \-real | \-no\-real Turn on/off real-time juggling. .B Deprecated. There should be no need to turn off real-time juggling, even on slow systems. Adjust speed using .B \-count above. .TP 8 .BR \-describe | \-no\-describe Turn on/off pattern descriptions. .TP 8 .BR \-balls | \-no\-balls Turn on/off Balls. .TP 8 .BR \-clubs | \-no\-clubs Turn on/off Clubs. .TP 8 .BR \-torches | \-no\-torches Turn on/off Flaming Torches. .TP 8 .BR \-knives | \-no\-knives Turn on/off Knives. .TP 8 .BR \-rings | \-no\-rings Turn on/off Rings. .TP 8 .BR \-bballs | \-no\-bballs Turn on/off Bowling Balls. .TP 8 .B \-count number Speed. 50 \- 1000. Default: 200. This determines the expected time interval between a throw and the next catch, in milliseconds. .TP 8 .B \-cycles number Performance Length. 50 \- 1000. Default: 1000. Setting this smaller will force the juggler to switch patterns (and objects) more often. .TP 8 .B \-delay delay Additional delay between frames, in microseconds. Default: 10000. .B Deprecated. Adjust speed using .BR \-count . .TP 8 .B \-ncolors ncolors Maximum number of colors to use. Default: 32. .TP 8 .B \-fps Display the current frame rate and CPU load. .SH ENVIRONMENT .PP .TP 8 .B DISPLAY to get the default host and display number. .TP 8 .B XENVIRONMENT to get the name of a resource file that overrides the global resources stored in the RESOURCE_MANAGER property. .SH SEE ALSO .BR X (1), .BR xscreensaver (1) .SH COPYRIGHT Copyright \(co 1996,2000,2002,2004 by Tim Auckland. 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. .SH AUTHOR Tim Auckland. Converted to OpenGL by Jamie Zawinski, 2009. xscreensaver-5.36/hacks/glx/topblock.man000644 000767 000024 00000007745 12701612221 020342 0ustar00jwzstaff000000 000000 .TH XScreenSaver 1 "" "X Version 11" .SH NAME topblock - a 3D world of falling blocks that build up and up. .SH SYNOPSIS .B topblock [\-display \fIhost:display.screen\fP] [\-visual \fIvisual\fP] [\-window] [\-root] [\-delay \fInumber\fP] [\-wireframe] [\-fps] [\-size \fInumber\fP] [\-spawn \fInumber\fP] [\-camX \fInumber\fP] [\-camY \fInumber\fP] [\-camZ \fInumber\fP] [\-rotate] [\-no-carpet] [\-no-nipples] [\-blob] [\-rotateSpeed \fInumber\fP] [\-follow] [\-maxFalling \fInumber\fP] [\-resolution \fInumber\fP] [\-maxColors \fInumber\fP] [\-dropSpeed \fInumber\fP] [\-override] .SH DESCRIPTION Creates a world of falling blocks that build up and up. .SH OPTIONS .TP 8 .B \-visual \fIvisual\fP Specify which visual to use. Legal values are the name of a visual class, or the id number (decimal or hex) of a specific visual. .TP 8 .B \-window Draw on a newly-created window. This is the default. .TP 8 .B \-root Draw on the root window. .TP 8 .B \-delay \fInumber\fP Per-frame delay, in microseconds. Default: 10000 (0.01 seconds.). .TP 8 .B \-wireframe | \-no-wireframe Render in wireframe instead of solid. .TP 8 .B \-fps Display the current frame rate, CPU load, and polygon count. .TP 8 .B \-size \fInumber\fP Size of the base/carpet. .TP 8 .B \-spawn \fInumber\fP Likeyhood of a new block being created per frame : 1 high, 1000 very low. .TP 8 .B \-camX \fInumber\fP Initial camera X location in the world. .TP 8 .B \-camY \fInumber\fP Initial camera Y location in the world. .TP 8 .B \-camZ \fInumber\fP Initial camera Z location in the world. .TP 8 .B \-rotate | -no-rotate Add/Remove rotation to/from the animation. .TP 8 .B \-no-carpet Remove the base/carpet. .TP 8 .B \-no-nipples Remove nipples on the blocks (also applies to udders) (has no effect in blob mode). .TP 8 .B \-blob Run in blob mode, blocks become over sized spheres. .TP 8 .B \-rotateSpeed \fInumber\fP Varries speed of world rotation. .TP 8 .B \-follow Camera follows blocks as they fall instead of camera being semi static (stays with top block). .TP 8 .B \-maxFalling \fInumber\fP Maximum number of objects created before recycling occurs. .TP 8 .B \-resolution \fInumber\fP Resolution of tubes, disks and spheres. .TP 8 .B \-maxColors \fInumber\fP Number of different colors available to falling objects. .TP 8 .B \-dropSpeed \fInumber\fP Varries speed of falling objects. .TP 8 .B \-override Overrides camera settings and provides a tunnel view. .SH KEYS .PP .TP 8 .B a Increases viewing X coordinate. .TP 8 .B z Decreases viewing X coordinate. .TP 8 .B s Increases viewing Y coordinate. .TP 8 .B x Decreases viewing Y coordinate. .TP 8 .B d Increases viewing Z coordinate. .TP 8 .B c Decreases viewing Z coordinate. .TP 8 .B f Increases camera location X coordinate. .TP 8 .B v Decreases camera location X coordinate. .TP 8 .B g Increases camera location Y coordinate. .TP 8 .B b Decreases camera location Y coordinate. .TP 8 .B h Increases camera location Z coordinate. .TP 8 .B n Decreases camera location Z coordinate. .TP 8 .B r Increases world rotation. .TP 8 .B q quit. .SH EXAMPLES To see which block follow-mode is tracking, set the number of block colors to 1. .TP 8 .B topblock -follow -maxColors 1 .SH ENVIRONMENT .PP .TP 8 .B DISPLAY to get the default host and display number. .TP 8 .B XENVIRONMENT to get the name of a resource file that overrides the global resources stored in the RESOURCE_MANAGER property. .SH SEE ALSO .BR X (1), .BR xscreensaver (1) .SH COPYRIGHT Copyright \(co 2006 by rednuht. 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. .SH AUTHOR rednuht xscreensaver-5.36/hacks/glx/glschool.man000644 000767 000024 00000007142 12701612221 020326 0ustar00jwzstaff000000 000000 .TH XScreenSaver 1 "" "X Version 11" .SH NAME glschool - a 3D schooling simulation .SH SYNOPSIS .B glschool [\-display \fIhost:display.screen\fP] [\-visual \fIvisual\fP] [\-window] [\-root] [\-wireframe] [\-fps] [\-delay \fInumber\fP] [\-nfish \fInumber\fP] [\-maxvel \fInumber\fP] [\-minvel \fInumber\fP] [\-acclimit \fInumber\fP] [\-avoidfact \fInumber\fP] [\-matchfact \fInumber\fP] [\-centerfact \fInumber\fP] [\-targetfact \fInumber\fP] [\-minradius \fInumber\fP] [\-momentum \fInumber\fP] [\-distexp \fInumber\fP] [\-goalchgf \fInumber\fP] [\-fog] [\-drawgoal] [\-drawbbox] .SH DESCRIPTION Uses Craig Reynolds Boids algorithm to simulate a 3d school of fish. See for a description of the algorithm and the original paper. This is a lightly modified version of the algorithm that supports goal attraction. Many different behaviors are possible by tweaking the parameters. No sanity checking is performed on the command line params, so if you want to use negative accelerations or minimum velocity that is larger than maximum velocity or that sort of thing, the simulation will try to digest it. It looks best with the highest number of fish that will give you an FPS of > 25 or so. .SH OPTIONS .TP 8 .B \-visual \fIvisual\fP Specify which visual to use. Legal values are the name of a visual class, or the id number (decimal or hex) of a specific visual. .TP 8 .B \-window Draw on a newly-created window. This is the default. .TP 8 .B \-root Draw on the root window. .TP 8 .B \-delay \fInumber\fP Per-frame delay, in microseconds. Default: 20000 (0.020 seconds.). .TP 8 .B \-wireframe | \-no-wireframe Render in wireframe instead of solid. .TP 8 .B \-fps Display the current frame rate, CPU load, and polygon count. .TP 8 .B \-fog | \-no-fog Whether to show foggy (cloudy) water. .TP 8 .B \-drawgoal | \-no-drawgoal Whether to show the school's attraction goal. .TP 8 .B \-drawbbox | \-no-drawbbox Whether to show the bounding box. .TP 8 .B \-fog | \-no-fog Whether to show foggy (cloudy) water. .TP 8 .B \-nfish \fInumber\fP Number of fish. Defaults to 100 .TP 8 .B \-acclimit \fInumber\fP Acceleration limit. Defaults to 8.0 .TP 8 .B \-minvel \fInumber\fP Minimum velocity. Defaults to 1.0 .TP 8 .B \-maxvel \fInumber\fP Minimum velocity. Defaults to 7.0 .TP 8 .B \-goalchgf \fInumber\fP Goal change frequency. Defaults to 50 (frames) .TP 8 .B \-avoidfact \fInumber\fP Avoidance acceleration factor. Defaults to 1.5 .TP 8 .B \-matchfact \fInumber\fP Match avg velocity acceleration factor. Defaults to 0.15 .TP 8 .B \-centerfact \fInumber\fP School centering acceleration factor. Defaults to 0.1 .TP 8 .B \-targetfact \fInumber\fP Target attraction acceleration factor. Defaults to 80 .TP 8 .B \-distexp \fInumber\fP Distance weighting exponent. Defaults to 2.2 .TP 8 .B \-momentum \fInumber\fP Momentum. Defaults to 0.9 .SH ENVIRONMENT .PP .TP 8 .B DISPLAY to get the default host and display number. .TP 8 .B XENVIRONMENT to get the name of a resource file that overrides the global resources stored in the RESOURCE_MANAGER property. .SH SEE ALSO .BR X (1), .BR xscreensaver (1) .SH COPYRIGHT Copyright \(co 2005-2006 by David C. Lambert. 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. .SH AUTHOR David C. Lambert xscreensaver-5.36/hacks/glx/glcells.man000644 000767 000024 00000006336 12701612221 020145 0ustar00jwzstaff000000 000000 .TH XScreenSaver 1 "June 2007" .SH NAME glcells \- growing cells graphics hack .SH SYNOPSIS .B glcells [\-display \fIhost:display.screen\fP] [\-window] [\-root] [\-install] [\-visual \fIvisual\fP] [\-delay \fInum\fP] [\-pause \fInum\fP] [\-maxcells \fInum\fP] [\-radius \fInum\fP] [\-seeds \fInum\fP] [\-quality \fInum\fP] [\-minfood \fInum\fP] [\-maxfood \fInum\fP] [\-divideage \fInum\fP] [\-mindist \fInum\fP] [\-keepold] [\-wireframe] [\-fps] .SH DESCRIPTION The \fIglcells\fP program draws cells that divide exponentially, eat and eventually die. .SH OPTIONS .I glcells accepts the following options: .TP 8 .B \-window Draw on a newly-created window. This is the default. .TP 8 .B \-root Draw on the root window. .TP 8 .B \-install Install a private colormap for the window. .TP 8 .B \-visual \fIvisual\fP\fP Specify which visual to use. Legal values are the name of a visual class, or the id number (decimal or hex) of a specific visual. .TP 8 .B \-pause \fInum\fP\fP Specifies the pause at the end of the animation (all cells dead or maximum amount of cells reached). Unit is in frames, default 20. .TP 8 .B \-maxcells \fInum\fP\fP Specifies the maximum number of cells on screen (dead cells also count, even if invisible). Default is 800. .TP 8 .B \-radius \fInum\fP\fP Specifies the radius of the cells. Default is 40. .TP 8 .B \-seeds \fInum\fP\fP Specifies the number of cells when animation starts. Default is 1. .TP 8 .B \-quality \fInum\fP\fP Specifies subdivision quality of the spheres used to draw the cells [0...5]. Default is 3. .TP 8 .B \-minfood \fInum\fP\fP Food is ditributed randomly on the screen (Yes, the cells need to eat). This parameter specifies the minimum amount of food per pixel. Default is 5. .TP 8 .B \-maxfood \fInum\fP\fP Food is ditributed randomly on the screen (Yes, the cells need to eat). This parameter specifies the maximum amount of food per pixel. Default is 20. .TP 8 .B \-divideage \fInum\fP\fP Specifies the minimum age in frames a cell needs to have before beeing able to divide. Default is 20 .TP 8 .B \-mindist \fInum\fP\fP Specifies the minimum distance between cells. Default 1.4 .TP 8 .B \-delay \fInum\fP How long to pause between frames. Default is 20000, or 0.02 second. .TP 8 .B \-fps Display the current frame rate, CPU load, and polygon count. .TP 8 .B \-wireframe Draw wireframe only. .TP 8 .B \-keepold Dead cells stay on screen. .SH ENVIRONMENT .PP .TP 8 .B DISPLAY to get the default host and display number. .TP 8 .B XENVIRONMENT to get the name of a resource file that overrides the global resources stored in the RESOURCE_MANAGER property. .SH SEE ALSO .BR X (1), .BR xscreensaver (1) .BR xscreensaver\-demo (1), .SH COPYRIGHT Copyright \(co 2007 by Matthias Toussaint. 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. .SH AUTHOR Matthias Toussaint , 17-Jun-2007, http://www.mtoussaint.de/bits.html. xscreensaver-5.36/hacks/glx/voronoi.man000644 000767 000024 00000005332 12701612221 020206 0ustar00jwzstaff000000 000000 .TH XScreenSaver 1 "" "X Version 11" .SH NAME voronoi - draws a randomly-colored Voronoi tessellation .SH SYNOPSIS .B voronoi [\-display \fIhost:display.screen\fP] [\-visual \fIvisual\fP] [\-window] [\-root] [\-points \fIint\fP] [\-point\-size \fIint\fP] [\-point\-speed \fIratio\fP] [\-point\-delay \fIseconds\fP] [\-zoom\-speed \fIratio\fP] [\-zoom\-delay \fIseconds\fP] [\-fps] .SH DESCRIPTION Draws a randomly-colored Voronoi tessellation, and periodically zooms in and adds new points. The existing points also wander around. There are a set of control points on the plane, each at the center of a colored cell. Every pixel within that cell is closer to that cell's control point than to any other control point. That is what determines the cell's shapes. When running in a window, you can click to insert a new point at the mouse position. Clicking on an existing point lets you drag it around. This implementation takes advantage of the OpenGL depth buffer to compute the cells for us, by rendering the intersection of overlapping cones in an orthographic plane. .SH OPTIONS .TP 8 .B \-visual \fIvisual\fP Specify which visual to use. Legal values are the name of a visual class, or the id number (decimal or hex) of a specific visual. .TP 8 .B \-window Draw on a newly-created window. This is the default. .TP 8 .B \-root Draw on the root window. .TP 8 .B \-points \fIint\fP How many points to add each time we zoom in. .TP 8 .B \-point\-size \fIint\fP How big to draw the stars, in pixels. 0 for no stars. .TP 8 .B \-point\-speed \fIratio\fP How fast the points should wander. Less than 1 for slower, greater than 1 for faster. .TP 8 .B \-point\-delay \fIseconds\fP How quickly to insert new points, when adding. .TP 8 .B \-zoom\-speed \fIratio\fP How fast to zoom in. Less than 1 for slower, greater than 1 for faster. .TP 8 .B \-zoom\-delay \fIseconds\fP Zoom in every this-many seconds. .TP 8 .B \-fps Display the current frame rate, CPU load, and polygon count. .SH ENVIRONMENT .PP .TP 8 .B DISPLAY to get the default host and display number. .TP 8 .B XENVIRONMENT to get the name of a resource file that overrides the global resources stored in the RESOURCE_MANAGER property. .SH SEE ALSO .BR X (1), .BR xscreensaver (1) .SH COPYRIGHT Copyright \(co 2007 by 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. .SH AUTHOR Jamie Zawinski. xscreensaver-5.36/hacks/glx/moebiusgears.man000644 000767 000024 00000004617 12701612221 021205 0ustar00jwzstaff000000 000000 .TH XScreenSaver 1 "30-Oct-99" "X Version 11" .SH NAME moebiusgears - draw a moebius strip of interlocking gears. .SH SYNOPSIS .B moebiusgears [\-display \fIhost:display.screen\fP] [\-window] [\-root] [\-install] [\-visual \fIvisual\fP] [\-delay \fIusecs\fP] [\-speed \fIfloat\fP] [\-no\-spin] [\-no\-wander] [\-no\-roll] [-count \fIinteger\fP] [-teeth \fIinteger\fP] [-wireframe] [-fps] .SH DESCRIPTION The \fImoebiusgears\fP program draws a closed, interlinked chain of rotating gears. The layout of the gears follows the path of a moebius strip. .SH OPTIONS .I moebiusgears accepts the following options: .TP 8 .B \-window Draw on a newly-created window. This is the default. .TP 8 .B \-root Draw on the root window. .TP 8 .B \-install Install a private colormap for the window. .TP 8 .B \-visual \fIvisual\fP Specify which visual to use. Legal values are the name of a visual class, or the id number (decimal or hex) of a specific visual. .TP 8 .B \-delay \fIusecs\fP The delay between frames of the animation, in microseconds. Default: 30000 (0.03 seconds.) .TP 8 .B \-speed \fIfloat\fP Larger numbers mean run faster. Default: 1.0. .TP 8 .B \-no\-spin Don't rotate the object. .TP 8 .B \-no\-wander Don't wander the object around the screen. .TP 8 .B \-no\-roll Don't slowly roll the moebius strip inside out. .TP 8 .B \-count \fIinteger\fP How many gears to draw. Default: 17. Minimum 11, must be odd. .TP 8 .B \-teeth \fIinteger\fP How many teeth to draw on each draw. Default: 15. Minimum 7, must be odd. .TP 8 .B \-wireframe Render in wireframe instead of solid. .TP 8 .B \-fps Display the current frame rate, CPU load, and polygon count. .SH ENVIRONMENT .PP .TP 8 .B DISPLAY to get the default host and display number. .TP 8 .B XENVIRONMENT to get the name of a resource file that overrides the global resources stored in the RESOURCE_MANAGER property. .SH SEE ALSO .BR X (1), .BR xscreensaver (1) .SH COPYRIGHT Copyright \(co 2007 by 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. .SH AUTHOR Jamie Zawinski. xscreensaver-5.36/hacks/glx/lockward.man000644 000767 000024 00000004152 12701612221 020320 0ustar00jwzstaff000000 000000 .TH XScreenSaver 1 "" "X Version 11" .SH NAME lockward - Rotating spinning color-cycling things .SH SYNOPSIS .B lockward [\-display \fIdisplayspec\fP] [\-root] [\-window] [\-visual \fIarg\fP] [\-window-id \fIarg\fP] [\-delay \fIusec\fP] [\-pair] [\-fps] [\-blink | \-no-blink] [\-rotateidle-min \fImsec\fP] [\-rotateidle-max \fImsec\fP] [\-blinkidle-min \fImsec\fP] [\-blinkidle-max \fImsec\fP] [\-blinkdwell-min \fImsec\fP] [\-blinkdwell-max \fImsec\fP] .SH DESCRIPTION .B lockward draws a spinning, rotating set of notched wheels overlaid with some flashing effects, using OpenGL. It's a sort of cross between the wards in a combination lock and those old information displays that animated via polarized light. .SH OPTIONS .TP 8 .B \-visual \fIvisual\fP Specify which visual to use. Legal values are the name of a visual class, or the ID number (decimal or hex) of a specific visual. .TP 8 .B \-window Draw on a newly-created window (default). .TP 8 .B \-root Draw on the root window. .TP 8 .B \-delay \fImicroseconds\fP Per-frame delay, in microseconds. Default: 20000 (50 frames/sec). .TP 8 .B \-blink | \-no-blink Enables/disables the blinking effects. Default: Enabled. .TP 8 .B \-fps Display the current frame rate, CPU load, and polygon count. .TP 8 .B \-rotateidle-min \fImilliseconds .TP 8 .B \-rotateidle-max \fImilliseconds The minimum and maximum time each spinner will sit idle, in milliseconds. Defaults: Min 1000, max 6000. .TP 8 .B \-blinkidle-min \fImilliseconds .TP 8 .B \-blinkidle-max \fImilliseconds The minimum and maximum time between blinking effects, in milliseconds. Defaults: Min 1000, max 9000. .TP 8 .B \-blinkdwell-min \fImilliseconds .TP 8 .B \-blinkdwell-max \fImilliseconds The minimum and maximum dwell time for the blinking effects, in milliseconds. This affects how quickly the blinks actually happen. Defaults: Min 100, max 600. .SH ENVIRONMENT .PP .TP 8 .B DISPLAY Default host and display number. .TP 8 .B XENVIRONMENT Name of a resource file that overrides the global resources stored in the RESOURCE_MANAGER property. .SH SEE ALSO .BR X (1), .BR xscreensaver (1) .SH AUTHORS Leo L. Schwab xscreensaver-5.36/hacks/glx/cubicgrid.man000644 000767 000024 00000005036 12701612221 020447 0ustar00jwzstaff000000 000000 .TH XScreenSaver 1 "Dec-28-07" "X Version 11" .SH NAME cubicgrid - rotating 3D lattice seen from inside .SH SYNOPSIS .B cubicgrid [\-display \fIhost:display.screen\fP] [\-visual \fIvisual\fP] [\-window] [\-root] [\-install] [\-delay \fImicroseconds\fP] [\-mono] [\-speed \fInumber\fP] [\-zoom \fInumber\fP] [\-ticks \fInumber\fP] [\-bigdots] [\-fps] .SH DESCRIPTION This program shows the view of an observer located inside a set of points arranged to a 3D lattice. As the lattice rotates, various view-throughs appear and evolve. A simple idea with interesting results. .SH OPTIONS .I cubicgrid accepts the following options: .TP 8 .B \-window Draw on a newly-created window. This is the default. .TP 8 .B \-root Draw on the root window. .TP 8 .B \-install Install a private colormap for the window. .TP 8 .B \-visual \fIvisual\fP\fP Specify which visual to use. Legal values are the name of a visual class, or the id number (decimal or hex) of a specific visual. .TP 8 .B \-delay \fImicroseconds\fP How long to pause between frames. Default is 20000, or 0.02 second. .TP 8 .B \-mono Draw in black and white. If not used, a fixed all-color scheme is chosen. .TP 8 .B \-speed \fInumber\fP The maximum speed of the rotation. The actual speed and axis change smoothly for better effect. 0.5 - 10. The default is 1.0. .TP 8 .B \-zoom \fInumber\fP Size of the lattice. Ideally it should fill all the screen, but one may find other values also interesting. 5 - 50. The default of 20 should do for common screen aspect ratios. .TP 8 .B \-ticks \fInumber\fP The count of points drawn along every axis. 10 - 100. The default is 30. .TP 8 .B \-bigdots Draw the points twice as big. .TP 8 .B \-fps Display the current frame rate, CPU load, and polygon count. .SH ENVIRONMENT .PP .TP 8 .B DISPLAY to get the default host and display number. .TP 8 .B XENVIRONMENT to get the name of a resource file that overrides the global resources stored in the RESOURCE_MANAGER property. .SH SEE ALSO .BR X (1), .BR xscreensaver (1) .SH COPYRIGHT Copyright \(co 2007 by Vasek Potocek. 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. .SH AUTHOR Vasek Potocek , Dec-28-07. xscreensaver-5.36/hacks/glx/hypnowheel.man000644 000767 000024 00000004507 12701612221 020700 0ustar00jwzstaff000000 000000 .TH XScreenSaver 1 "" "X Version 11" .SH NAME hypnowheel - draws overlapping, translucent spiral patterns .SH SYNOPSIS .B hypnowheel [\-display \fIhost:display.screen\fP] [\-visual \fIvisual\fP] [\-window] [\-root] [\-delay \fIint\fP] [\-layers \fIint\fP] [\-count \fIint\fP] [\-twistiness \fIfloat\fP] [\-speed \fIfloat\fP] [\-wander\fP] [\-symmetric\fP] [\-fps] .SH DESCRIPTION Draws a series of overlapping, translucent spiral patterns. The tightness of their spirals fluctuates in and out. .SH OPTIONS .TP 8 .B \-visual \fIvisual\fP Specify which visual to use. Legal values are the name of a visual class, or the id number (decimal or hex) of a specific visual. .TP 8 .B \-window Draw on a newly-created window. This is the default. .TP 8 .B \-root Draw on the root window. .TP 8 .B \-delay \fIint\fP Delay between frames, in microseconds. Default 20000. .TP 8 .B \-layers \fIint\fP How many different spirals to draw at once. Default 4. .TP 8 .B \-count \fIint\fP How many arms each spiral should have. Default 11. .TP 8 .B \-twistiness \fIfloat\fP How tightly wound the spirals can become, measured in rotations. Default 4.0 (four times around). .TP 8 .B \-speed \fIratio\fP Less than 1 for slower, greater than 1 for faster. Default 1. .TP 8 .B \-wander If specified, then the centers of the spirals will wander around, rather than them all having the same origin. .TP 8 .B \-symmetric If specified, then each pair of left-wrapping and right-wrapping spirals will be mirror images of each other. .TP 8 .B \-fps Display the current frame rate, CPU load, and polygon count. .SH ENVIRONMENT .PP .TP 8 .B DISPLAY to get the default host and display number. .TP 8 .B XENVIRONMENT to get the name of a resource file that overrides the global resources stored in the RESOURCE_MANAGER property. .SH SEE ALSO .BR X (1), .BR xscreensaver (1) .SH COPYRIGHT Copyright \(co 2008 by 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. .SH AUTHOR Jamie Zawinski. xscreensaver-5.36/hacks/glx/skytentacles.man000644 000767 000024 00000005553 12701612221 021231 0ustar00jwzstaff000000 000000 .TH XScreenSaver 1 "" "X Version 11" .SH NAME skytentacles - 3D tentacles from the sky! .SH SYNOPSIS .B skytentacles [\-display \fIhost:display.screen\fP] [\-visual \fIvisual\fP] [\-window] [\-root] [\-delay \fIint\fP] [\-speed \fIratio\fP] [\-count \fIint\fP] [\-slices \fIint\fP] [\-length \fIfloat\fP] [\-wiggliness \fIratio\fP] [\-flexibility \fIratio\fP] [\-color \fIcolor\fP] [\-stripe\-color \fIcolor\fP] [\-sucker\-color \fIcolor\fP] [\-segments \fIint\fP] [\-thickness \fIratio\fP] [\-no\-smooth] [\-fps] .SH DESCRIPTION There is a tentacled abomination in the sky. From above you it devours. .SH OPTIONS .TP 8 .B \-visual \fIvisual\fP Specify which visual to use. Legal values are the name of a visual class, or the id number (decimal or hex) of a specific visual. .TP 8 .B \-window Draw on a newly-created window. This is the default. .TP 8 .B \-root Draw on the root window. .TP 8 .B \-delay \fIint\fP Delay between frames, in microseconds. Default 30000. .TP 8 .B \-speed \fIratio\fP Less than 1 for slower, greater than 1 for faster. Default 1. .TP 8 .B \-count \fIint\fP How many tentacles. Default 8. .TP 8 .B \-thickness \fIratio\fP Less than 1 for thinner tentacles, greater than 1 for thicker. Default 1. .TP 8 .B \-length \fIratio\fP Length of the tentacles. Default 9. .TP 8 .B \-wiggliness \fIratio\fP A measure of how bendy the tentacles are. Smaller numbers result in smoother flexing; larger numbers make it "crinkly". Default 0.35. .TP 8 .B \-flexibility \fIratio\fP Another measure of how bendy the tentacles are. Smaller numbers result in straighter tentacles; larger numbers result in more extreme curves. Default 0.35. .TP 8 .B \-color \fIcolor\fP .TP 8 .B \-stripe\-color \fIcolor\fP .TP 8 .B \-sucker\-color \fIcolor\fP The colors of the various parts of the tentacle. Default green with a redish stripe. .TP 8 .B \-slices \fIint\fP .TP 8 .B \-segments \fIint\fP Larger numbers increase number of polygons in the object mesh. Default 32. .TP 8 .B \-no\-smooth Make the tentacles appear faceted instead of smooth. .TP 8 .B \-fps Display the current frame rate, CPU load, and polygon count. .SH ENVIRONMENT .PP .TP 8 .B DISPLAY to get the default host and display number. .TP 8 .B XENVIRONMENT to get the name of a resource file that overrides the global resources stored in the RESOURCE_MANAGER property. .SH SEE ALSO .BR X (1), .BR xscreensaver (1) .SH COPYRIGHT Copyright \(co 2008 by 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. .SH AUTHOR Jamie Zawinski. xscreensaver-5.36/hacks/glx/sonar.man000644 000767 000024 00000011622 12701612221 017634 0ustar00jwzstaff000000 000000 .de EX \"Begin example .ne 5 .if n .sp 1 .if t .sp .5 .nf .in +.5i .. .de EE .fi .in -.5i .if n .sp 1 .if t .sp .5 .. .TH Sonar 1 "12-Aug-08" "X Version 11" .SH NAME sonar - display a sonar scope .SH SYNOPSIS .B sonar [\-ping \fIhosts-or-subnets\fP] [\-ping\-timeout \fIint\fP] [\-delay \fIusecs\fP] [\-speed \fIratio\fP] [\-sweep-size \fIratio\fP] [\-font-size \fIpoints\fP] [\-team-a-name \fIstring\fP] [\-team-b-name \fIstring\fP] [\-team-a-count \fIint\fP] [\-team-b-count \fIint\fP] [\-no\-dns] [\-no\-times] [\-no\-wobble] [\-debug] [\-fps] .SH DESCRIPTION This draws a sonar screen that pings (get it?) the hosts on your local network, and plots their distance (response time) from you. The three rings represent ping times of approximately 2.5, 70 and 2,000 milliseconds respectively. Alternately, it can run a simulation that doesn't involve hosts. .SH OPTIONS .I sonar understands the following options: .TP 8 .B \-ping \fIhosts-or-subnets\fP The list of things to ping, separated by commas or spaces. Elements of this list may be: .RS 8 .TP 12 .B simulation Run in simulation mode instead of pinging real hosts. .TP 12 .I hostname Ping the given host. .TP 12 .I A.B.C.D Ping the given IPv4 address. .TP 12 .B subnet 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 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 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 format used by \fI/etc/hosts\fP, or it can be any file that has host names as the first or second element on each line. If you use ssh, try this: sonar -ping $HOME/.ssh/known_hosts .RE .TP 8 .B \-ping\-timeout \fIint\fP The amount of time in milliseconds the program will wait for an answer to a ping. .TP 8 .B \-delay \fIint\fP Delay between frames, in microseconds. Default 20000. .TP 8 .B \-speed \fIratio\fP Less than 1 for slower, greater than 1 for faster. Default 1. .TP 8 .B \-sweep-size \fIratio\fP How big the glowing sweep area should be. Default 0.3. .TP 8 .B \-font-size \fIpoints\fP How large the text should be. Default 10 points. .TP 8 .B \-no\-wobble Keep the display stationary instead of very slowly wobbling back and forth. .TP 8 .B \-no\-dns Do not attempt to resolve IP addresses to hostnames. .TP 8 .B \-no\-times Do not display ping times beneath the host names. .TP 8 .B \-team-a-name \fIstring\fP In simulation mode, the name of team A. .TP 8 .B \-team-b-name \fIstring\fP In simulation mode, the name of team B. .TP 8 .B \-team-a-count \fIint\fP In simulation mode, the number of bogies on team A. .TP 8 .B \-team-b-count \fIint\fP In simulation mode, the number of bogies on team B. .TP 8 .B \-fps Display the current frame rate, polygon count, and CPU load. .SH NOTES On most Unix systems, this program must be installed as setuid root in order to ping hosts. This is because root privileges are needed to create an ICMP RAW socket. Privileges are disavowed shortly after startup (just after connecting to the X server) so this is believed to be safe: .EX chown root:root sonar chmod u+s sonar .EE It is not necessary to make it setuid on MacOS systems, because on MacOS, unprivileged programs can ping by using ICMP DGRAM sockets instead of ICMP RAW. In ping-mode, the display is a logarithmic scale, calibrated so that the three rings represent ping times of approximately 2.5, 70 and 2,000 milliseconds respectively. 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 ping6 (8) .SH COPYRIGHT Copyright \(co 2000-2012 by Jamie Zawinski .RE Copyright \(co 1998 by 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 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. .SH AUTHORS Stephen Martin , 3-nov-1998. Subnet support, etc. added by Jamie Zawinski, 17-Jul-2000. Rewritten using OpenGL instead of X11 by Jamie Zawinski, 12-Aug-2008. xscreensaver-5.36/hacks/glx/jigsaw.man000644 000767 000024 00000005452 12701612221 020002 0ustar00jwzstaff000000 000000 .TH XScreenSaver 1 "25-Aug-2008" "X Version 11" .SH NAME jigsaw - permute an image like a jigsaw puzzle .SH SYNOPSIS .B jigsaw [\-display \fIhost:display.screen\fP] [\-delay \fIusecs\fP] [\-speed \fIratio\fP] [\-complexity \fIratio\fP] [\-resolution \fIint\fP] [\-thickness \fIfloat\fP] [\-no\-wobble] [\-fps] .SH DESCRIPTION The \fIjigsaw\fP program loads an image, carves it up into a jigsaw puzzle, shuffles it, and then solves it. The image that it manipulates will be grabbed from the portion of the screen underlying the window, or from the system's video input, or from a random file on disk, as indicated by the \fIgrabDesktopImages\fP, \fIgrabVideoFrames\fP, and \fIchooseRandomImages\fP options in the \fI~/.xscreensaver\fP file; see .BR xscreensaver-demo (1) for more details. .SH OPTIONS .I jigsaw accepts the following options: .TP 8 .B \-delay \fImicroseconds\fP How long to wait between animation frames; default 20000. .TP 8 .B \-speed \fIratio\fP Less than 1 for slower, greater than 1 for faster. Default 1. .TP 8 .B \-complexity \fIratio\fP Less than 1 for simpler puzzles (fewer pieces), greater than 1 for more complex puzzles (more pieces). Default 1. .TP 8 .B \-resolution \fIratio\fP Smoothness of the edges of the pieces. Less than 1 for rougher pieces (fewer polygons), greater than 1 for more smoother pieces (more polygons). Default 1. .TP 8 .B \-thickness \fIfloat\fP Thickness of the puzzle pieces (relative to their width). Default 0.06. .TP 8 .B \-no\-wobble Keep the display stationary instead of very slowly wobbling back and forth. .TP 8 .B \-fps Display the current frame rate, polygon count, and CPU load. .TP 8 .B \-window Draw on a newly-created window. This is the default. .TP 8 .B \-root Draw on the root window. .TP 8 .B \-install Install a private colormap for the window. .TP 8 .B \-visual \fIvisual\fP Specify which visual to use. Legal values are the name of a visual class, or the id number (decimal or hex) of a specific visual. .SH ENVIRONMENT .PP .TP 8 .B DISPLAY to get the default host and display number. .TP 8 .B XENVIRONMENT to get the name of a resource file that overrides the global resources stored in the RESOURCE_MANAGER property. .SH SEE ALSO .BR X (1), .BR xscreensaver (1), .BR xscreensaver\-demo (1), .BR xscreensaver\-getimage (1) .SH COPYRIGHT Copyright \(co 1997 by 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. .SH AUTHOR Jamie Zawinski , 25-Nov-97. xscreensaver-5.36/hacks/glx/photopile.man000644 000767 000024 00000006277 12736546171 020551 0ustar00jwzstaff000000 000000 .TH XScreenSaver 1 "" "X Version 11" .SH NAME photopile - displays multiple images in a periodically shuffled pile .SH SYNOPSIS .B photopile [\-display \fIhost:display.screen\fP] [\-visual \fIvisual\fP] [\-window] [\-root] [\-count \fIint\fP] [\-scale \fIfactor\fP] [\-maxTilt \fIdegrees\fP] [\-titles | \-no\-titles] [\-polaroid | \-no\-polaroid] [\-shadows | \-no\-shadows] [\-font \fIfont\fP] [\-speed \fIratio\fP] [\-duration \fIseconds\fP] [\-fps] [\-debug] [\-wireframe] .SH DESCRIPTION Loads several random images, and displays them as if lying in a random pile. The pile is periodically reshuffled, with new images coming in and old ones being thrown out. This program requires a good video card capable of supporting large textures. To specify the directory that images are loaded from, run .BR xscreensaver-demo (1) and click on the "Advanced" tab. .SH OPTIONS .TP 8 .B \-visual \fIvisual\fP Specify which visual to use. Legal values are the name of a visual class, or the id number (decimal or hex) of a specific visual. .TP 8 .B \-window Draw on a newly-created window. This is the default. .TP 8 .B \-root Draw on the root window. .TP 8 .B \-count \fIint\fP How many images to display. Default 7. .TP 8 .B \-scale \fIfactor\fP Size of images in relation to the size of the window. Default 0.4. .TP 8 .B \-maxTilt \fIdegrees\fP Maximum deviation from vertical. Default 50 degrees. .TP 8 .B \-duration \fIseconds\fP Every \fIduration\fP seconds, one of the images will be replaced with a new one. Default 5 seconds. .TP 8 .B \-speed \fIratio\fP Speed up or slow down the animation. 0.5 means half as fast as the default; 2.0 means twice as fast. .TP 8 .B \-delay \fInumber\fP Per-frame delay, in microseconds. Default: 10000 (0.01 seconds.). .TP 8 .B \-titles \fB| \-no\-titles\fP Whether to display the file names of the images beneath them. Default: yes. .TP 8 .B \-polaroid \fB| \-no\-polaroid\fP Whether to simulate images taken by an instant camera. Default: yes. .TP 8 .B \-shadows \fB| \-no\-shadows\fP Whether to draw images with drop shadows. Default: no. .TP 8 .B \-font \fIfont-name\fP The font to use for the initial loading screen. .TP 8 .B \-fps Display the current frame rate, CPU load, and polygon count. .TP 8 .B \-debug Prints debugging info to stderr. .TP 8 .B \-wireframe Another debug mode. .SH ENVIRONMENT .PP .TP 8 .B DISPLAY to get the default host and display number. .TP 8 .B XENVIRONMENT to get the name of a resource file that overrides the global resources stored in the RESOURCE_MANAGER property. .SH SEE ALSO .BR X (1), .BR xscreensaver-demo (1) .BR xscreensaver-getimage (1) .BR xscreensaver (1) .BR carousel (MANSUFFIX) .BR glslideshow (MANSUFFIX) .SH COPYRIGHT Copyright \(co 2005 by Jamie Zawinski. Copyright \(co 2008 by Jens Kilian. 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. .SH AUTHOR Jens Kilian. xscreensaver-5.36/hacks/glx/rubikblocks.man000644 000767 000024 00000006437 12701612221 021034 0ustar00jwzstaff000000 000000 .TH XScreenSaver 1 "04-Feb-09" "X Version 11" .SH NAME rubikblocks - animates the Rubik's Mirror Blocks puzzle .SH SYNOPSIS .B rubikblocks [\-display \fIhost:display.screen\fP] [\-visual \fIvisual\fP] [\-window] [\-root] [\-install] [\-delay \fImicroseconds\fP] [\-texture] [\-no\-texture] [\-mono] [\-wireframe] [\-spin] [\-no\-spin] [\-wander] [\-no\-wander] [\-randomize] [\-no\-randomize] [\-spinspeed \fInumber\fP] [\-rotspeed \fInumber\fP] [\-wanderspeed \fInumber\fP] [\-wait \fInumber\fP] [\-cubesize \fInumber\fP] [\-fps] .SH DESCRIPTION This program animates a puzzle called Rubik's Mirror Blocks. The moves are chosen randomly. .SH OPTIONS .I rubikblocks accepts the following options: .TP 8 .B \-window Draw on a newly-created window. This is the default. .TP 8 .B \-root Draw on the root window. .TP 8 .B \-install Install a private colormap for the window. .TP 8 .B \-visual \fIvisual\fP\fP Specify which visual to use. Legal values are the name of a visual class, or the id number (decimal or hex) of a specific visual. .TP 8 .B \-delay \fImicroseconds\fP How long to pause between frames. Default is 20000, or 0.02 second. .TP 8 .B \-texture Use texture maps. This is the default. .TP 8 .B \-no\-texture Use solid colors. Looks a bit weird. .TP 8 .B \-mono Disable both texture maps and colors. Ditto. .TP 8 .B \-wireframe Only draw outlines. Outlines of each piece, not only the whole object, are drawn. .TP 8 .B \-spin Spin the whole object around X, Y and Z axes. This is the default. .TP 8 .B \-no\-spin Do not spin, stay in the same tilt all the time. .TP 8 .B \-wander Move the object around the screen. This is the default. .TP 8 .B \-no\-wander Keep the object centered on the screen. .TP 8 .B \-randomize Shuffle the puzzle randomly at startup. This is the default. .TP 8 .B \-no\-randomize Do not shuffle at startup, begin at the shape of cube. .TP 8 .B \-spinspeed \fInumber\fP The relative speed of spinning. Default is 1.0. .TP 8 .B \-rotspeed \fInumber\fP The relative speed of the moves. Default is 3.0. Setting to \(<= 0.0 makes the object stay at one configuration. .TP 8 .B \-wanderspeed \fInumber\fP The relative speed of wandering around the screen. Default is 0.02. .TP 8 .B \-wait \fInumber\fP How long to stay at final position after each move. The meaning of the argument is again relative. Default is 40.0. .TP 8 .B \-cubesize \fInumber\fP Size of the object. Value of 3.0 fills roughly all the screen. .TP 8 .B \-fps Display the current frame rate, CPU load, and polygon count. .SH ENVIRONMENT .PP .TP 8 .B DISPLAY to get the default host and display number. .TP 8 .B XENVIRONMENT to get the name of a resource file that overrides the global resources stored in the RESOURCE_MANAGER property. .SH SEE ALSO .BR X (1), .BR xscreensaver (1) .SH COPYRIGHT Copyright \(co 2009 by Vasek Potocek. 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. .SH AUTHOR Vasek Potocek , 04-Feb-09. xscreensaver-5.36/hacks/glx/surfaces.man000644 000767 000024 00000006253 12701612221 020331 0ustar00jwzstaff000000 000000 .TH XScreenSaver 1 "" "X Version 11" .SH NAME surfaces - Draws some interesting 3d parametric surfaces. .SH SYNOPSIS .B surfaces [\-display \fIhost:display.screen\fP] [\-visual \fIvisual\fP] [\-window] [\-root] [\-speed \fInumber\fP] [\-rand] [\-spin] [\-wander] [\-fps] [\-surface \fIsurface-name\fP] [\-random-surface] [\-dini] [\-enneper] [\-kuen] [\-moebius] [\-seashell] [\-swallowtail] [\-bohemian] [\-whitney] [\-pluecker] [\-henneberg] [\-catalan] [\-corkscrew] [\-mode \fIdisplay-mode\fP] [\-random-mode] [\-points] [\-lines] [\-line-loops] .SH DESCRIPTION This draws one of several three dimensional parametric surfaces. .SH OPTIONS .TP 8 .B \-visual \fIvisual\fP Specify which visual to use. Legal values are the name of a visual class, or the id number (decimal or hex) of a specific visual. .TP 8 .B \-window Draw on a newly-created window. This is the default. .TP 8 .B \-root Draw on the root window. .TP 8 .B \-delay \fInumber\fP Per-frame delay, in microseconds. Default: 20000 (0.02 seconds.). .TP 8 .B \-speed \fInumber\fP Number of frames before changing shape. Default: 1000. .TP 8 .B \-surface random \fP(Shortcut: \fB\-random-surface\fP) Display a random surface. This is the default. .TP 8 .B \-surface dini \fP(Shortcut: \fB\-dini\fP) Display Dini's surface. .TP 8 .B \-surface enneper \fP(Shortcut: \fB\-enneper\fP) Display Enneper's minimal surface. .TP 8 .B \-surface kuen \fP(Shortcut: \fB\-kuen\fP) Display the Kuen surface. .TP 8 .B \-surface moebius \fP(Shortcut: \fB\-moebius\fP) Display the Moebius strip. .TP 8 .B \-surface seashell \fP(Shortcut: \fB\-seashell\fP) Display the seashell surface. .TP 8 .B \-surface swallowtail \fP(Shortcut: \fB\-swallowtail\fP) Display the swallowtail catastrophe. .TP 8 .B \-surface bohemian \fP(Shortcut: \fB\-bohemian\fP) Display the Bohemian dome. .TP 8 .B \-surface whitney \fP(Shortcut: \fB\-whitney\fP) Display the Whitney umbrella. .TP 8 .B \-surface pluecker \fP(Shortcut: \fB\-pluecker\fP) Display Pluecker's conoid. .TP 8 .B \-surface henneberg \fP(Shortcut: \fB\-henneberg\fP) Display Henneberg's minimal surface. .TP 8 .B \-surface catalan \fP(Shortcut: \fB\-catalan\fP) Display Catalan's minimal surface. .TP 8 .B \-surface corkscrew \fP(Shortcut: \fB\-corkscrew\fP) Display the corkscrew surface. .TP 8 .B \-mode random \fP(Shortcut: \fB\-random-mode\fP) Use random OpenGL primitives to display the surface. This is the default. .TP 8 .B \-mode points \fP(Shortcut: \fB\-points\fP) Use OpenGL points to display the surface. .TP 8 .B \-mode lines \fP(Shortcut: \fB\-lines\fP) Use OpenGL lines to display the surface. .TP 8 .B \-mode line-loops \fP(Shortcut: \fB\-line-loops\fP) Use OpenGL line loops to display the surface. .TP 8 .B \-wander | \-no-wander Whether to wander around the screen. .TP 8 .B \-spin | \-no-spin Whether to rotate around the center of the figure. .TP 8 .B \-fps Display the current frame rate, CPU load, and polygon count. .SH ENVIRONMENT .PP .TP 8 .B DISPLAY to get the default host and display number. .TP 8 .B XENVIRONMENT to get the name of a resource file that overrides the global resources stored in the RESOURCE_MANAGER property. .SH SEE ALSO .BR X (1), .BR xscreensaver (1) .SH AUTHORS Andrey Mirtchovski, Carsten Steger xscreensaver-5.36/hacks/glx/hilbert.man000644 000767 000024 00000005506 12701612221 020147 0ustar00jwzstaff000000 000000 .TH XScreenSaver 1 "" "X Version 11" .SH NAME hilbert - 3D Hilbert fractal. .SH SYNOPSIS .B hilbert [\-display \fIhost:display.screen\fP] [\-visual \fIvisual\fP] [\-window] [\-root] [\-delay \fInumber\fP] [\-speed \fIratio\fP] [\-depth \fInumber\fP] [\-spin] [\-wander] [\-2d] [\-3d] [\-closed] [\-open] [\-max\-depth \fInumber\fP] [\-thickness \fIratio\fP] [\-wireframe] [\-fps] .SH DESCRIPTION This draws the recursive Hilbert space-filling curve, in both 2D and 3D variants. It incrementally animates the growth and recursion to the maximum depth, then unwinds it back. The Hilbert path is a single contiguous line that can fill a volume without crossing itself. As a data structure, Hilbert paths are useful because ordering along the curve preserves locality: points that close together along the curve are also close together in space. The converse is often, but not always, true. The coloration reflects this. .SH OPTIONS .TP 8 .B \-visual \fIvisual\fP Specify which visual to use. Legal values are the name of a visual class, or the id number (decimal or hex) of a specific visual. .TP 8 .B \-window Draw on a newly-created window. This is the default. .TP 8 .B \-root Draw on the root window. .TP 8 .B \-delay \fInumber\fP Per-frame delay, in microseconds. Default: 30000 (0.03 seconds.). .TP 8 .B \-speed \fInumber\fP How fast the animation should run. Less than 1 for slower, greater than 1 for faster. .TP 8 .B \-max\-depth \fInumber\fP Max depth to descend. Default: 5, which peaks at around half a million polygons. .TP 8 .B \-spin .B \-no\-spin Whether to rotate the object. Default: true. .TP 8 .B \-wander .B \-no\-wander Whether to wander the object around on the screen. Default: false; .TP 8 .B \-2d .B \-3d Whether to draw the 2D or 3D variant. Default: random. .TP 8 .B \-closed .B \-open Whether to draw the open or closed-path variant. Default: random. .TP 8 .B \-thickness \fIratio\fP How thick the lines should be. Default: 0.25. .TP 8 .B \-wireframe Render in wireframe instead of solid. .TP 8 .B \-fps Display the current frame rate, CPU load, and polygon count. .SH ENVIRONMENT .PP .TP 8 .B DISPLAY to get the default host and display number. .TP 8 .B XENVIRONMENT to get the name of a resource file that overrides the global resources stored in the RESOURCE_MANAGER property. .SH SEE ALSO .BR X (1), .BR xscreensaver (1) .SH COPYRIGHT Copyright \(co 2011 by 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. .SH AUTHOR Jamie Zawinski. xscreensaver-5.36/hacks/glx/companioncube.man000644 000767 000024 00000004615 12701612221 021340 0ustar00jwzstaff000000 000000 .TH XScreenSaver 1 "" "X Version 11" .SH NAME companioncube - a vital aparatus. .SH SYNOPSIS .B companioncube [\-display \fIhost:display.screen\fP] [\-visual \fIvisual\fP] [\-window] [\-root] [\-delay \fInumber\fP] [\-speed \fIratio\fP] [\-spin] [\-wander] [\-count \fInumber\fP] [\-wireframe] [\-fps] .SH DESCRIPTION The symptoms most commonly produced by Enrichment Center testing are superstition, perceiving inanimate objects as alive, and hallucinations. The Enrichment Center reminds you that the weighted companion cube will never threaten to stab you and, in fact, cannot speak. In the event that the Weighted Companion Cube does speak, the Enrichment Center urges you to disregard its advice. .SH OPTIONS .TP 8 .B \-visual \fIvisual\fP Specify which visual to use. Legal values are the name of a visual class, or the id number (decimal or hex) of a specific visual. .TP 8 .B \-window Draw on a newly-created window. This is the default. .TP 8 .B \-root Draw on the root window. .TP 8 .B \-delay \fInumber\fP Per-frame delay, in microseconds. Default: 30000 (0.03 seconds.). .TP 8 .B \-speed \fInumber\fP How fast the animation should run. Less than 1 for slower, greater than 1 for faster. .TP 8 .B \-count \fInumber\fP How many cubes. Default 3. .TP 8 .B \-spin .B \-no\-spin Instead of bouncing, float and spin. .TP 8 .B \-wander .B \-no\-wander Instead of bouncing, float and drift. .TP 8 .B \-wireframe Render in wireframe instead of solid. .TP 8 .B \-fps Display the current frame rate, CPU load, and polygon count. .SH ENVIRONMENT .PP .TP 8 .B DISPLAY to get the default host and display number. .TP 8 .B XENVIRONMENT to get the name of a resource file that overrides the global resources stored in the RESOURCE_MANAGER property. .SH SEE ALSO .BR X (1), .BR tronbit (1), .BR lament (1), .BR dangerball (1), .BR xscreensaver (1) .SH COPYRIGHT Copyright \(co 2011 by 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. .SH AUTHOR Jamie Zawinski, with apologies to the fine folks at Valve Software and Aperture Science. xscreensaver-5.36/hacks/glx/tronbit.man000644 000767 000024 00000004227 12701612221 020176 0ustar00jwzstaff000000 000000 .TH XScreenSaver 1 "" "X Version 11" .SH NAME tronbit - Yes. Yes. No. Yes. Yes. No. Yes. Yes yes yes yes yes. .SH SYNOPSIS .B tronbit [\-display \fIhost:display.screen\fP] [\-visual \fIvisual\fP] [\-window] [\-root] [\-delay \fInumber\fP] [\-speed \fIratio\fP] [\-spin] [\-wander] [\-wireframe] [\-fps] .SH DESCRIPTION Draws an animation of the character "Bit" from the film, \fITron\fP. The "yes" state is a tetrahedron; the "no" state is the second stellation of an icosahedron; and the idle state oscillates between a small triambic icosahedron and the compound of an icosahedron and a dodecahedron. .SH OPTIONS .TP 8 .B \-visual \fIvisual\fP Specify which visual to use. Legal values are the name of a visual class, or the id number (decimal or hex) of a specific visual. .TP 8 .B \-window Draw on a newly-created window. This is the default. .TP 8 .B \-root Draw on the root window. .TP 8 .B \-delay \fInumber\fP Per-frame delay, in microseconds. Default: 30000 (0.03 seconds.). .TP 8 .B \-speed \fInumber\fP How fast the animation should run. Less than 1 for slower, greater than 1 for faster. .TP 8 .B \-no\-spin Don't rotate. .TP 8 .B \-no\-wander Don't wander around. .TP 8 .B \-wireframe Render in wireframe instead of solid. .TP 8 .B \-fps Display the current frame rate, CPU load, and polygon count. .SH ENVIRONMENT .PP .TP 8 .B DISPLAY to get the default host and display number. .TP 8 .B XENVIRONMENT to get the name of a resource file that overrides the global resources stored in the RESOURCE_MANAGER property. .SH SEE ALSO .BR X (1), .BR polyhedra (1), .BR dangerball (1), .BR companioncube (1), .BR xscreensaver (1), .BR TRON. .SH COPYRIGHT Copyright \(co 2011 by 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. .SH AUTHOR Jamie Zawinski, who fights for the users. xscreensaver-5.36/hacks/glx/kaleidocycle.man000644 000767 000024 00000005031 12701612221 021137 0ustar00jwzstaff000000 000000 .de EX \"Begin example .ne 5 .if n .sp 1 .if t .sp .5 .nf .in +.5i .. .de EE .fi .in -.5i .if n .sp 1 .if t .sp .5 .. .TH XScreenSaver 1 "25-Jul-98" "X Version 11" .SH NAME kaleidocycle - draws twistable rings of tetrahedra .SH SYNOPSIS .B kaleidocycle [\-display \fIhost:display.screen\fP] [\-window] [\-root] [\-visual \fIvisual\fP] [\-delay \fImicroseconds\fP] [\-count \fInumber\fP] [\-speed \fInumber\fP] [\-wander] [\-no-wander] [\-spin \fIaxes\fP] [\-no-spin] [\-wireframe] [\-fps] .SH DESCRIPTION The \fIkaleidocycle\fP program draws a ring composed of tetrahedra connected at the edges that twists and rotates toroidally. Segments are occasionally inserted or removed. .SH OPTIONS .I kaleidocycle accepts the following options: .TP 8 .B \-window Draw on a newly-created window. This is the default. .TP 8 .B \-root Draw on the root window. .TP 8 .B \-install Install a private colormap for the window. .TP 8 .B \-visual \fIvisual\fP\fP Specify which visual to use. Legal values are the name of a visual class, or the id number (decimal or hex) of a specific visual. .TP 8 .B \-count \fInumber\fP The initial number of segments. Default 16. Must be 8 or greater, and an even number. .TP 8 .B \-speed \fInumber\fP Adjust the animation speed. 0.5 for half as fast, 2.0 for twice as fast. .TP 8 .B \-wander Move the text around the screen. This is the default. .TP 8 .B \-no\-wander Keep the text centered on the screen. .TP 8 .B \-spin Which axes around which the text should spin. The default is "Z", meaning rotate the object the plane of the screen only. .TP 8 .B \-no\-spin Don't spin the text at all: the same as \fB\-spin ""\fP. .TP 8 .B \-wireframe Render in wireframe instead of solid. .TP 8 .B \-fps Display the current frame rate, CPU load, and polygon count. .SH ENVIRONMENT .PP .TP 8 .B DISPLAY to get the default host and display number. .TP 8 .B XENVIRONMENT to get the name of a resource file that overrides the global resources stored in the RESOURCE_MANAGER property. .SH SEE ALSO .BR X (1), .BR xscreensaver (1) .SH COPYRIGHT Copyright \(co 2001-2013 by 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. .SH AUTHOR Jamie Zawinski xscreensaver-5.36/hacks/glx/quasicrystal.man000664 000767 000024 00000005064 12701612221 021243 0ustar00jwzstaff000000 000000 .TH XScreenSaver 1 "" "X Version 11" .SH NAME quasicrystal - aperiodic plane tilings. .SH SYNOPSIS .B quasicrystal [\-display \fIhost:display.screen\fP] [\-visual \fIvisual\fP] [\-window] [\-root] [\-delay \fInumber\fP] [\-speed \fInumber\fP] [\-count \fInumber\fP] [\-contrast \fIpercent\fP] [\-no-wander] [\-no-spin] [\-asymmetric] [\-fps] .SH DESCRIPTION A quasicrystal is a structure that is ordered but aperiodic. Two-dimensional quasicrystals can be generated by adding a set of planes where x is the sine of y. Different complex aperiodic plane tilings are produced depending on the period, position, and rotation of the component planes, and whether the rotation of the planes is evenly distributed around the circle (the "symmetric" option, above) or random. See also the "RD-Bomb", "CWaves" and "Penrose" screen savers. .SH OPTIONS .TP 8 .B \-visual \fIvisual\fP Specify which visual to use. Legal values are the name of a visual class, or the id number (decimal or hex) of a specific visual. .TP 8 .B \-window Draw on a newly-created window. This is the default. .TP 8 .B \-root Draw on the root window. .TP 8 .B \-delay \fInumber\fP Per-frame delay, in microseconds. Default: 30000 (0.03 seconds.). .TP 8 .B \-speed \fInumber\fP Animation speed. 2 for twice as fast, 0.5 for half as fast. .TP 8 .B \-contrast \fIcontrast\fP Contrast. Sort of. Default 30%. .TP 8 .B \-count \fInumber\fP How many planes to use. Default 17. .TP 8 .B \-wander | \-no-wander Whether the planes should displace horizontally and vertically. .TP 8 .B \-spin | \-no-spin Whether the planes should rotate. .TP 8 .B \-asymmetric Allow each plane to rotate freely instead of being constrained to an even distribution around the circle. .TP 8 .B \-fps | \-no-fps Whether to show a frames-per-second display at the bottom of the screen. .SH ENVIRONMENT .PP .TP 8 .B DISPLAY to get the default host and display number. .TP 8 .B XENVIRONMENT to get the name of a resource file that overrides the global resources stored in the RESOURCE_MANAGER property. .SH SEE ALSO .BR X (1), .BR xscreensaver (1) .SH COPYRIGHT Copyright \(co 2013 by 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. .SH AUTHOR Jamie Zawinski. xscreensaver-5.36/hacks/glx/unknownpleasures.man000664 000767 000024 00000004556 12701612221 022147 0ustar00jwzstaff000000 000000 .TH XScreenSaver 1 "" "X Version 11" .SH NAME unknownpleasures - an animation of the signal from the pulsar PSR B1919+21. .SH SYNOPSIS .B unknownpleasures [\-display \fIhost:display.screen\fP] [\-visual \fIvisual\fP] [\-window] [\-root] [\-delay \fInumber\fP] [\-speed \fIpercent\fP] [\-count \fIinteger\fP] [\-resolution \fIpercent\fP] [\-no-ortho] [\-fps] .SH DESCRIPTION PSR B1919+21 (AKA CP 1919) was the first pulsar ever discovered: a spinning neutron star emitting a periodic lighthouse-like beacon. An illustration of the signal received from it was published in Scientific American in 1971, and later in The Cambridge Encyclopedia of Astronomy in 1977, where it was seen by Stephen Morris, the drummer of Joy Division, and was consequently appropriated by Peter Saville for the cover of the band's album "Unknown Pleasures". .SH OPTIONS .TP 8 .B \-visual \fIvisual\fP Specify which visual to use. Legal values are the name of a visual class, or the id number (decimal or hex) of a specific visual. .TP 8 .B \-window Draw on a newly-created window. This is the default. .TP 8 .B \-root Draw on the root window. .TP 8 .B \-delay \fInumber\fP Per-frame delay, in microseconds. Default: 30000 (0.03 seconds.). .TP 8 .B \-speed \fInumber\fP Animation speed. 2 for twice as fast, 0.5 for half as fast. .TP 8 .B \-count \fInumber\fP Scanlines (vertical resolution). Default: 80. .TP 8 .B \-count \fInumber\fP Horizontal Resolution, Default: 100%. .TP 8 .B \-ortho | \-no-ortho Whether to use an orthographic projection. .TP 8 .B \-fps | \-no-fps Whether to show a frames-per-second display at the bottom of the screen. .SH ENVIRONMENT .PP .TP 8 .B DISPLAY to get the default host and display number. .TP 8 .B XENVIRONMENT to get the name of a resource file that overrides the global resources stored in the RESOURCE_MANAGER property. .SH SEE ALSO .BR X (1), .BR xscreensaver (1) .SH COPYRIGHT Copyright \(co 2013 by 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. .SH AUTHOR Jamie Zawinski. xscreensaver-5.36/hacks/glx/geodesic.man000664 000767 000024 00000004672 12701612221 020305 0ustar00jwzstaff000000 000000 .TH XScreenSaver 1 "" "X Version 11" .SH NAME geodesic - animates a mesh geodesic sphere. .SH SYNOPSIS .B geodesic [\-display \fIhost:display.screen\fP] [\-visual \fIvisual\fP] [\-window] [\-root] [\-mode \fImode\fP] [\-no-wander] [\-no-spin] [\-fps] [\-delay \fInumber\fP] [\-speed \fInumber\fP] [\-count \fInumber\fP] .SH DESCRIPTION Animates a mesh geodesic sphere of increasing and decreasing complexity. A geodesic sphere is an icosohedron whose equilateral faces are sub-divided into non-equilateral triangles to more closely approximate a sphere. The animation shows the equilateral triangles subdivided into four coplanar equilateral triangles; and then inflated outward, causing the sub-triangles to no longer be equilateral, but to more closely approximate the surface of a sphere. .SH OPTIONS .TP 8 .B \-visual \fIvisual\fP Specify which visual to use. Legal values are the name of a visual class, or the id number (decimal or hex) of a specific visual. .TP 8 .B \-window Draw on a newly-created window. This is the default. .TP 8 .B \-root Draw on the root window. .TP 8 .B \-mode mesh | solid | stellated | stellated2 | wire Face/edge display style. Default mesh. .TP 8 .B \-wander | \-no-wander Whether the object should wander around the screen. .TP 8 .B \-spin | \-no-spin Whether the object should spin. .TP 8 .B \-fps | \-no-fps Whether to show a frames-per-second display at the bottom of the screen. .TP 8 .B \-delay \fInumber\fP Per-frame delay, in microseconds. Default: 30000 (0.03 seconds). .TP 8 .B \-speed \fInumber\fP Animation speed. 2.0 means twice as fast, 0.5 means half as fast. .TP 8 .B \-count \fInumber\fP Depth (frequency) of the geodesic sphere. Default: 4. .SH ENVIRONMENT .PP .TP 8 .B DISPLAY to get the default host and display number. .TP 8 .B XENVIRONMENT to get the name of a resource file that overrides the global resources stored in the RESOURCE_MANAGER property. .SH SEE ALSO .BR X (1), .BR xscreensaver (1) .SH COPYRIGHT Copyright \(co 2013 by 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. .SH AUTHOR Jamie Zawinski. xscreensaver-5.36/hacks/glx/geodesicgears.man000664 000767 000024 00000004251 12701612221 021320 0ustar00jwzstaff000000 000000 .TH XScreenSaver 1 "" "X Version 11" .SH NAME geodesicgears - gears on the surface of a sphere. .SH SYNOPSIS .B geodesicgears [\-display \fIhost:display.screen\fP] [\-visual \fIvisual\fP] [\-window] [\-root] [\-delay \fInumber\fP] [\-timeout \fInumber\fP] [\-labels] [\-numbers] [\-wireframe] [\-wander] [\-no-spin] [\-fps] .SH DESCRIPTION A set of meshed gears arranged on the surface of a sphere. .SH OPTIONS .TP 8 .B \-visual \fIvisual\fP Specify which visual to use. Legal values are the name of a visual class, or the id number (decimal or hex) of a specific visual. .TP 8 .B \-window Draw on a newly-created window. This is the default. .TP 8 .B \-root Draw on the root window. .TP 8 .B \-delay \fInumber\fP Per-frame delay, in microseconds. Default: 30000 (0.03 seconds). .TP 8 .B \-timeout \fInumber\fP Duration before switching to a new model. 5 - 120 seconds. Default: 20. .TP 8 .B \-labels | \-no-labels Whether to show the number of gears and teeth. Default: no. .TP 8 .B \-numbers | \-no-numbers Whether to label the gears with ID numbers. Default: no. .TP 8 .B \-wireframe | \-no-wireframe Render in wireframe instead of solid. .TP 8 .B \-wander | \-no-wander Whether the object should wander around the screen. .TP 8 .B \-spin | \-no-spin Whether the object should spin. .TP 8 .B \-fps | \-no-fps Whether to show a frames-per-second display at the bottom of the screen. .SH ENVIRONMENT .PP .TP 8 .B DISPLAY to get the default host and display number. .TP 8 .B XENVIRONMENT to get the name of a resource file that overrides the global resources stored in the RESOURCE_MANAGER property. .SH SEE ALSO .BR X (1), .BR xscreensaver (1), .BR geodesic (1), .BR pinion (1) .SH COPYRIGHT Copyright \(co 2014 by 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. .SH AUTHOR Jamie Zawinski. xscreensaver-5.36/hacks/glx/projectiveplane.man000644 000767 000024 00000042347 12701612221 021714 0ustar00jwzstaff000000 000000 .TH XScreenSaver 1 "" "X Version 11" .SH NAME projectiveplane - Draws a 4d embedding of the real projective plane. .SH SYNOPSIS .B projectiveplane [\-display \fIhost:display.screen\fP] [\-install] [\-visual \fIvisual\fP] [\-window] [\-root] [\-delay \fIusecs\fP] [\-fps] [\-mode \fIdisplay-mode\fP] [\-wireframe] [\-surface] [\-transparent] [\-appearance \fIappearance\fP] [\-solid] [\-distance-bands] [\-direction-bands] [\-colors \fIcolor-scheme\fP] [\-twosided-colors] [\-distance-colors] [\-direction-colors] [\-depth-colors] [\-view-mode \fIview-mode\fP] [\-walk] [\-turn] [\-walk-turn] [\-orientation-marks] [\-projection-3d \fImode\fP] [\-perspective-3d] [\-orthographic-3d] [\-projection-4d \fImode\fP] [\-perspective-4d] [\-orthographic-4d] [\-speed-wx \fIfloat\fP] [\-speed-wy \fIfloat\fP] [\-speed-wz \fIfloat\fP] [\-speed-xy \fIfloat\fP] [\-speed-xz \fIfloat\fP] [\-speed-yz \fIfloat\fP] [\-walk-direction \fIfloat\fP] [\-walk-speed \fIfloat\fP] .SH DESCRIPTION The \fIprojectiveplane\fP program shows a 4d embedding of the real projective plane. You can walk on the projective plane, see it turn in 4d, or walk on it while it turns in 4d. The fact that the surface is an embedding of the real projective plane in 4d can be seen in the depth colors mode: set all rotation speeds to 0 and the projection mode to 4d orthographic projection. In its default orientation, the embedding of the real projective plane will then project to the Roman surface, which has three lines of self-intersection. However, at the three lines of self-intersection the parts of the surface that intersect have different colors, i.e., different 4d depths. .PP The real projective plane is a non-orientable surface. To make this apparent, the two-sided color mode can be used. Alternatively, orientation markers (curling arrows) can be drawn as a texture map on the surface of the projective plane. While walking on the projective plane, you will notice that the orientation of the curling arrows changes (which it must because the projective plane is non-orientable). .PP The real projective plane is a model for the projective geometry in 2d space. One point can be singled out as the origin. A line can be singled out as the line at infinity, i.e., a line that lies at an infinite distance to the origin. The line at infinity is topologically a circle. Points on the line at infinity are also used to model directions in projective geometry. The origin can be visualized in different manners. When using distance colors, the origin is the point that is displayed as fully saturated red, which is easier to see as the center of the reddish area on the projective plane. Alternatively, when using distance bands, the origin is the center of the only band that projects to a disk. When using direction bands, the origin is the point where all direction bands collapse to a point. Finally, when orientation markers are being displayed, the origin the the point where all orientation markers are compressed to a point. The line at infinity can also be visualized in different ways. When using distance colors, the line at infinity is the line that is displayed as fully saturated magenta. When two-sided colors are used, the line at infinity lies at the points where the red and green "sides" of the projective plane meet (of course, the real projective plane only has one side, so this is a design choice of the visualization). Alternatively, when orientation markers are being displayed, the line at infinity is the place where the orientation markers change their orientation. .PP Note that when the projective plane is displayed with bands, the orientation markers are placed in the middle of the bands. For distance bands, the bands are chosen in such a way that the band at the origin is only half as wide as the remaining bands, which results in a disk being displayed at the origin that has the same diameter as the remaining bands. This choice, however, also implies that the band at infinity is half as wide as the other bands. Since the projective plane is attached to itself (in a complicated fashion) at the line at infinity, effectively the band at infinity is again as wide as the remaining bands. However, since the orientation markers are displayed in the middle of the bands, this means that only one half of the orientation markers will be displayed twice at the line at infinity if distance bands are used. If direction bands are used or if the projective plane is displayed as a solid surface, the orientation markers are displayed fully at the respective sides of the line at infinity. .PP The program projects the 4d projective plane to 3d using either a perspective or an orthographic projection. Which of the two alternatives looks more appealing is up to you. However, two famous surfaces are obtained if orthographic 4d projection is used: The Roman surface and the cross cap. If the projective plane is rotated in 4d, the result of the projection for certain rotations is a Roman surface and for certain rotations it is a cross cap. The easiest way to see this is to set all rotation speeds to 0 and the rotation speed around the yz plane to a value different from 0. However, for any 4d rotation speeds, the projections will generally cycle between the Roman surface and the cross cap. The difference is where the origin and the line at infinity will lie with respect to the self-intersections in the projections to 3d. .PP The projected projective plane can then be projected to the screen either perspectively or orthographically. When using the walking modes, perspective projection to the screen will be used. .PP There are three display modes for the projective plane: mesh (wireframe), solid, or transparent. Furthermore, the appearance of the projective plane can be as a solid object or as a set of see-through bands. The bands can be distance bands, i.e., bands that lie at increasing distances from the origin, or direction bands, i.e., bands that lie at increasing angles with respect to the origin. .PP When the projective plane is displayed with direction bands, you will be able to see that each direction band (modulo the "pinching" at the origin) is a Moebius strip, which also shows that the projective plane is non-orientable. .PP Finally, the colors with with the projective plane is drawn can be set to two-sided, distance, direction, or depth. In two-sided mode, the projective plane is drawn with red on one "side" and green on the "other side". As described above, the projective plane only has one side, so the color jumps from red to green along the line at infinity. This mode enables you to see that the projective plane is non-orientable. In distance mode, the projective plane is displayed with fully saturated colors that depend on the distance of the points on the projective plane to the origin. The origin is displayed in red, the line at infinity is displayed in magenta. If the projective plane is displayed as distance bands, each band will be displayed with a different color. In direction mode, the projective plane is displayed with fully saturated colors that depend on the angle of the points on the projective plane with respect to the origin. Angles in opposite directions to the origin (e.g., 15 and 205 degrees) are displayed in the same color since they are projectively equivalent. If the projective plane is displayed as direction bands, each band will be displayed with a different color. Finally, in depth mode the projective plane with colors chosen depending on the 4d "depth" (i.e., the w coordinate) of the points on the projective plane at its default orientation in 4d. As discussed above, this mode enables you to see that the projective plane does not intersect itself in 4d. .PP The rotation speed for each of the six planes around which the projective plane rotates can be chosen. For the walk-and-turn mode, only the rotation speeds around the true 4d planes are used (the xy, xz, and yz planes). .PP Furthermore, in the walking modes the walking direction in the 2d base square of the projective plane and the walking speed can be chosen. The walking direction is measured as an angle in degrees in the 2d square that forms the coordinate system of the surface of the projective plane. A value of 0 or 180 means that the walk is along a circle at a randomly chosen distance from the origin (parallel to a distance band). A value of 90 or 270 means that the walk is directly from the origin to the line at infinity and back (analogous to a direction band). Any other value results in a curved path from the origin to the line at infinity and back. .PP This program is somewhat inspired by Thomas Banchoff's book "Beyond the Third Dimension: Geometry, Computer Graphics, and Higher Dimensions", Scientific American Library, 1990. .SH OPTIONS .I projectiveplane accepts the following options: .TP 8 .B \-window Draw on a newly-created window. This is the default. .TP 8 .B \-root Draw on the root window. .TP 8 .B \-install Install a private colormap for the window. .TP 8 .B \-visual \fIvisual\fP Specify which visual to use. Legal values are the name of a visual class, or the id number (decimal or hex) of a specific visual. .TP 8 .B \-delay \fImicroseconds\fP How much of a delay should be introduced between steps of the animation. Default 10000, or 1/100th second. .TP 8 .B \-fps Display the current frame rate, CPU load, and polygon count. .PP The following four options are mutually exclusive. They determine how the projective plane is displayed. .TP 8 .B \-mode random Display the projective plane in a random display mode (default). .TP 8 .B \-mode wireframe \fP(Shortcut: \fB\-wireframe\fP) Display the projective plane as a wireframe mesh. .TP 8 .B \-mode surface \fP(Shortcut: \fB\-surface\fP) Display the projective plane as a solid surface. .TP 8 .B \-mode transparent \fP(Shortcut: \fB\-transparent\fP) Display the projective plane as a transparent surface. .PP The following three options are mutually exclusive. They determine the appearance of the projective plane. .TP 8 .B \-appearance random Display the projective plane with a random appearance (default). .TP 8 .B \-appearance solid \fP(Shortcut: \fB\-solid\fP) Display the projective plane as a solid object. .TP 8 .B \-appearance distance-bands \fP(Shortcut: \fB\-distance-bands\fP) Display the projective plane as see-through bands that lie at increasing distances from the origin. .PP .TP 8 .B \-appearance direction-bands \fP(Shortcut: \fB\-direction-bands\fP) Display the projective plane as see-through bands that lie at increasing angles with respect to the origin. .PP The following four options are mutually exclusive. They determine how to color the projective plane. .TP 8 .B \-colors random Display the projective plane with a random color scheme (default). .TP 8 .B \-colors twosided \fP(Shortcut: \fB\-twosided-colors\fP) Display the projective plane with two colors: red on one "side" and green on the "other side." Note that the line at infinity lies at the points where the red and green "sides" of the projective plane meet, i.e., where the orientation of the projective plane reverses. .TP 8 .B \-colors distance \fP(Shortcut: \fB\-distance-colors\fP) Display the projective plane with fully saturated colors that depend on the distance of the points on the projective plane to the origin. The origin is displayed in red, the line at infinity is displayed in magenta. If the projective plane is displayed as distance bands, each band will be displayed with a different color. .TP 8 .B \-colors direction \fP(Shortcut: \fB\-direction-colors\fP) Display the projective plane with fully saturated colors that depend on the angle of the points on the projective plane with respect to the origin. Angles in opposite directions to the origin (e.g., 15 and 205 degrees) are displayed in the same color since they are projectively equivalent. If the projective plane is displayed as direction bands, each band will be displayed with a different color. .TP 8 .B \-colors depth \fP(Shortcut: \fB\-depth\fP) Display the projective plane with colors chosen depending on the 4d "depth" (i.e., the w coordinate) of the points on the projective plane at its default orientation in 4d. .PP The following four options are mutually exclusive. They determine how to view the projective plane. .TP 8 .B \-view-mode random View the projective plane in a random view mode (default). .TP 8 .B \-view-mode turn \fP(Shortcut: \fB\-turn\fP) View the projective plane while it turns in 4d. .TP 8 .B \-view-mode walk \fP(Shortcut: \fB\-walk\fP) View the projective plane as if walking on its surface. .TP 8 .B \-view-mode walk-turn \fP(Shortcut: \fB\-walk-turn\fP) View the projective plane as if walking on its surface. Additionally, the projective plane turns around the true 4d planes (the xy, xz, and yz planes). .PP The following options determine whether orientation marks are shown on the projective plane. .TP 8 .B \-orientation-marks Display orientation marks on the projective plane. .TP 8 .B \-no-orientation-marks Don't display orientation marks on the projective plane (default). .PP The following three options are mutually exclusive. They determine how the projective plane is projected from 3d to 2d (i.e., to the screen). .TP 8 .B \-projection-3d random Project the projective plane from 3d to 2d using a random projection mode (default). .TP 8 .B \-projection-3d perspective \fP(Shortcut: \fB\-perspective-3d\fP) Project the projective plane from 3d to 2d using a perspective projection. .TP 8 .B \-projection-3d orthographic \fP(Shortcut: \fB\-orthographic-3d\fP) Project the projective plane from 3d to 2d using an orthographic projection. .PP The following three options are mutually exclusive. They determine how the projective plane is projected from 4d to 3d. .TP 8 .B \-projection-4d random Project the projective plane from 4d to 3d using a random projection mode (default). .TP 8 .B \-projection-4d perspective \fP(Shortcut: \fB\-perspective-4d\fP) Project the projective plane from 4d to 3d using a perspective projection. .TP 8 .B \-projection-4d orthographic \fP(Shortcut: \fB\-orthographic-4d\fP) Project the projective plane from 4d to 3d using an orthographic projection. .PP The following six options determine the rotation speed of the projective plane around the six possible hyperplanes. The rotation speed is measured in degrees per frame. The speeds should be set to relatively small values, e.g., less than 4 in magnitude. In walk mode, all speeds are ignored. In walk-and-turn mode, the 3d rotation speeds are ignored (i.e., the wx, wy, and wz speeds). In walk-and-turn mode, smaller speeds must be used than in the turn mode to achieve a nice visualization. Therefore, in walk-and-turn mode the speeds you have selected are divided by 5 internally. .TP 8 .B \-speed-wx \fIfloat\fP Rotation speed around the wx plane (default: 1.1). .TP 8 .B \-speed-wy \fIfloat\fP Rotation speed around the wy plane (default: 1.3). .TP 8 .B \-speed-wz \fIfloat\fP Rotation speed around the wz plane (default: 1.5). .TP 8 .B \-speed-xy \fIfloat\fP Rotation speed around the xy plane (default: 1.7). .TP 8 .B \-speed-xz \fIfloat\fP Rotation speed around the xz plane (default: 1.9). .TP 8 .B \-speed-yz \fIfloat\fP Rotation speed around the yz plane (default: 2.1). .PP The following two options determine the walking speed and direction. .TP 8 .B \-walk-direction \fIfloat\fP The walking direction is measured as an angle in degrees in the 2d square that forms the coordinate system of the surface of the projective plane (default: 83.0). A value of 0 or 180 means that the walk is along a circle at a randomly chosen distance from the origin (parallel to a distance band). A value of 90 or 270 means that the walk is directly from the origin to the line at infinity and back (analogous to a direction band). Any other value results in a curved path from the origin to the line at infinity and back. .TP 8 .B \-walk-speed \fIfloat\fP The walking speed is measured in percent of some sensible maximum speed (default: 20.0). .SH INTERACTION If you run this program in standalone mode in its turn mode, you can rotate the projective plane by dragging the mouse while pressing the left mouse button. This rotates the projective plane in 3D, i.e., around the wx, wy, and wz planes. If you press the shift key while dragging the mouse with the left button pressed the projective plane is rotated in 4D, i.e., around the xy, xz, and yz planes. To examine the projective plane at your leisure, it is best to set all speeds to 0. Otherwise, the projective plane will rotate while the left mouse button is not pressed. This kind of interaction is not available in the two walk modes. .SH ENVIRONMENT .PP .TP 8 .B DISPLAY to get the default host and display number. .TP 8 .B XENVIRONMENT to get the name of a resource file that overrides the global resources stored in the RESOURCE_MANAGER property. .SH SEE ALSO .BR X (1), .BR xscreensaver (1) .SH COPYRIGHT Copyright \(co 2005-2014 by Carsten Steger. 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. .SH AUTHOR Carsten Steger , 03-oct-2014. xscreensaver-5.36/hacks/glx/winduprobot.man000664 000767 000024 00000004775 12701612221 021103 0ustar00jwzstaff000000 000000 .TH XScreenSaver 1 "" "X Version 11" .SH NAME winduprobot - screen saver. .SH SYNOPSIS .B winduprobot [\-display \fIhost:display.screen\fP] [\-visual \fIvisual\fP] [\-window] [\-root] [\-delay \fInumber\fP] [\-count \fInumber\fP] [\-speed \fIratio\fP] [\-size \fIratio\fP] [\-opacity \fIratio\fP] [\-talk \fIratio\fP] [\-no-texture] [\-no-fade] [\-fps] .SH DESCRIPTION A swarm of wind-up toy robots wander around the table-top, bumping into each other. Each robot contains a mechanically accurate gear system inside, which you can see when the robot's shell occasionally fades to transparency. .SH OPTIONS .TP 8 .B \-visual \fIvisual\fP Specify which visual to use. Legal values are the name of a visual class, or the id number (decimal or hex) of a specific visual. .TP 8 .B \-window Draw on a newly-created window. This is the default. .TP 8 .B \-root Draw on the root window. .TP 8 .B \-delay \fInumber\fP Per-frame delay, in microseconds. Default: 20000 (0.02 seconds). .TP 8 .B \-count \fInumber\fP Number of robots. 1 - 100. Default: 25. .TP 8 .B \-speed \fIratio\fP Animation speed. 2.0 means twice as fast, 0.5 means half as fast. .TP 8 .B \-size \fIratio\fP Robot size. 2.0 means twice as big, 0.5 means half as big. .TP 8 .B \-opacity \fIratio\fP Robot skin transparency. 0.0 - 1.0. Default: 1.0. .TP 8 .B \-talk \fIratio\fP How often to occasionally pop up a word bubble with random text in it. 0.0 means never. 1.0 means often. .TP 8 .B \-texture | \-no-texture Whether the robot's surface should be reflective chrome. .TP 8 .B \-fade | \-no-fade Whether to sometimes fade the robot's opacity to show the inner mechanism. .TP 8 .B \-fps | \-no-fps Whether to show a frames-per-second display at the bottom of the screen. .SH ENVIRONMENT .PP .TP 8 .B DISPLAY to get the default host and display number. .TP 8 .B XENVIRONMENT to get the name of a resource file that overrides the global resources stored in the RESOURCE_MANAGER property. .SH SEE ALSO .BR X (1), .BR xscreensaver (1) .BR xscreensaver-text (1) .SH COPYRIGHT Copyright \(co 2014 by 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. .SH AUTHOR Jamie Zawinski. xscreensaver-5.36/hacks/glx/cityflow.man000664 000767 000024 00000004115 12701612221 020353 0ustar00jwzstaff000000 000000 .TH XScreenSaver 1 "" "X Version 11" .SH NAME cityflow - waves of boxes. .SH SYNOPSIS .B cityflow [\-display \fIhost:display.screen\fP] [\-visual \fIvisual\fP] [\-window] [\-root] [\-delay \fInumber\fP] [\-count \fInumber\fP] [\-wave-speed \fInumber\fP] [\-wave-radius \fInumber\fP] [\-waves \fInumber\fP] [\-skew \fInumber\fP] [\-wireframe] [\-fps] .SH DESCRIPTION Waves move across a sea of boxes. The city swells. The walls are closing in. .SH OPTIONS .TP 8 .B \-visual \fIvisual\fP Specify which visual to use. Legal values are the name of a visual class, or the id number (decimal or hex) of a specific visual. .TP 8 .B \-window Draw on a newly-created window. This is the default. .TP 8 .B \-root Draw on the root window. .TP 8 .B \-delay \fInumber\fP Per-frame delay, in microseconds. Default: 20000 (0.02 seconds). .TP 8 .B \-count \fInumber\fP Boxes. 50 - 4000. Default: 800. .TP 8 .B \-wave-speed \fInumber\fP Wave speed. 5 - 150. Default: 25. .TP 8 .B \-wave-radius \fInumber\fP Wave overlap. 5 - 512. Default: 256. .TP 8 .B \-waves \fInumber\fP Wave complexity. 1 - 20. Default: 6. .TP 8 .B \-skew \fInumber\fP Skew. 0 - 45. Default: 12. .TP 8 .B \-wireframe | \-no-wireframe Render in wireframe instead of solid. .TP 8 .B \-fps | \-no-fps Whether to show a frames-per-second display at the bottom of the screen. .SH ENVIRONMENT .PP .TP 8 .B DISPLAY to get the default host and display number. .TP 8 .B XENVIRONMENT to get the name of a resource file that overrides the global resources stored in the RESOURCE_MANAGER property. .SH SEE ALSO .BR X (1), .BR xscreensaver (1) .SH COPYRIGHT Copyright \(co 2012 by 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. .SH AUTHOR Jamie Zawinski. xscreensaver-5.36/hacks/glx/romanboy.man000664 000767 000024 00000040241 12701612221 020341 0ustar00jwzstaff000000 000000 .TH XScreenSaver 1 "" "X Version 11" .SH NAME romanboy - Draws a 3d immersion of the real projective plane that smoothly deforms between the Roman surface and the Boy surface. .SH SYNOPSIS .B romanboy [\-display \fIhost:display.screen\fP] [\-install] [\-visual \fIvisual\fP] [\-window] [\-root] [\-delay \fIusecs\fP] [\-fps] [\-mode \fIdisplay-mode\fP] [\-wireframe] [\-surface] [\-transparent] [\-appearance \fIappearance\fP] [\-solid] [\-distance-bands] [\-direction-bands] [\-colors \fIcolor-scheme\fP] [\-twosided-colors] [\-distance-colors] [\-direction-colors] [\-view-mode \fIview-mode\fP] [\-walk] [\-turn] [\-no-deform] [\-deformation-speed \fIfloat\fP] [\-initial-deformation \fIfloat\fP] [\-roman] [\-boy] [\-surface-order \fInumber\fP] [\-orientation-marks] [\-projection \fImode\fP] [\-perspective] [\-orthographic] [\-speed-x \fIfloat\fP] [\-speed-y \fIfloat\fP] [\-speed-z \fIfloat\fP] [\-walk-direction \fIfloat\fP] [\-walk-speed \fIfloat\fP] .SH DESCRIPTION The \fIromanboy\fP program shows a 3d immersion of the real projective plane that smoothly deforms between the Roman surface and the Boy surface. You can walk on the projective plane or turn in 3d. The smooth deformation (homotopy) between these two famous immersions of the real projective plane was constructed by François Apéry. .PP The real projective plane is a non-orientable surface. To make this apparent, the two-sided color mode can be used. Alternatively, orientation markers (curling arrows) can be drawn as a texture map on the surface of the projective plane. While walking on the projective plane, you will notice that the orientation of the curling arrows changes (which it must because the projective plane is non-orientable). .PP The real projective plane is a model for the projective geometry in 2d space. One point can be singled out as the origin. A line can be singled out as the line at infinity, i.e., a line that lies at an infinite distance to the origin. The line at infinity is topologically a circle. Points on the line at infinity are also used to model directions in projective geometry. The origin can be visualized in different manners. When using distance colors, the origin is the point that is displayed as fully saturated red, which is easier to see as the center of the reddish area on the projective plane. Alternatively, when using distance bands, the origin is the center of the only band that projects to a disk. When using direction bands, the origin is the point where all direction bands collapse to a point. Finally, when orientation markers are being displayed, the origin the the point where all orientation markers are compressed to a point. The line at infinity can also be visualized in different ways. When using distance colors, the line at infinity is the line that is displayed as fully saturated magenta. When two-sided colors are used, the line at infinity lies at the points where the red and green "sides" of the projective plane meet (of course, the real projective plane only has one side, so this is a design choice of the visualization). Alternatively, when orientation markers are being displayed, the line at infinity is the place where the orientation markers change their orientation. .PP Note that when the projective plane is displayed with bands, the orientation markers are placed in the middle of the bands. For distance bands, the bands are chosen in such a way that the band at the origin is only half as wide as the remaining bands, which results in a disk being displayed at the origin that has the same diameter as the remaining bands. This choice, however, also implies that the band at infinity is half as wide as the other bands. Since the projective plane is attached to itself (in a complicated fashion) at the line at infinity, effectively the band at infinity is again as wide as the remaining bands. However, since the orientation markers are displayed in the middle of the bands, this means that only one half of the orientation markers will be displayed twice at the line at infinity if distance bands are used. If direction bands are used or if the projective plane is displayed as a solid surface, the orientation markers are displayed fully at the respective sides of the line at infinity. .PP The immersed projective plane can be projected to the screen either perspectively or orthographically. When using the walking modes, perspective projection to the screen will be used. .PP There are three display modes for the projective plane: mesh (wireframe), solid, or transparent. Furthermore, the appearance of the projective plane can be as a solid object or as a set of see-through bands. The bands can be distance bands, i.e., bands that lie at increasing distances from the origin, or direction bands, i.e., bands that lie at increasing angles with respect to the origin. .PP When the projective plane is displayed with direction bands, you will be able to see that each direction band (modulo the "pinching" at the origin) is a Moebius strip, which also shows that the projective plane is non-orientable. .PP Finally, the colors with with the projective plane is drawn can be set to two-sided, distance, or direction. In two-sided mode, the projective plane is drawn with red on one "side" and green on the "other side". As described above, the projective plane only has one side, so the color jumps from red to green along the line at infinity. This mode enables you to see that the projective plane is non-orientable. In distance mode, the projective plane is displayed with fully saturated colors that depend on the distance of the points on the projective plane to the origin. The origin is displayed in red, the line at infinity is displayed in magenta. If the projective plane is displayed as distance bands, each band will be displayed with a different color. In direction mode, the projective plane is displayed with fully saturated colors that depend on the angle of the points on the projective plane with respect to the origin. Angles in opposite directions to the origin (e.g., 15 and 205 degrees) are displayed in the same color since they are projectively equivalent. If the projective plane is displayed as direction bands, each band will be displayed with a different color. .PP The rotation speed for each of the three coordinate axes around which the projective plane rotates can be chosen. .PP Furthermore, in the walking mode the walking direction in the 2d base square of the projective plane and the walking speed can be chosen. The walking direction is measured as an angle in degrees in the 2d square that forms the coordinate system of the surface of the projective plane. A value of 0 or 180 means that the walk is along a circle at a randomly chosen distance from the origin (parallel to a distance band). A value of 90 or 270 means that the walk is directly from the origin to the line at infinity and back (analogous to a direction band). Any other value results in a curved path from the origin to the line at infinity and back. .PP By default, the immersion of the real projective plane smoothly deforms between the Roman and Boy surfaces. It is possible to choose the speed of the deformation. Furthermore, it is possible to switch the deformation off. It is also possible to determine the initial deformation of the immersion. This is mostly useful if the deformation is switched off, in which case it will determine the appearance of the surface. .PP As a final option, it is possible to display generalized versions of the immersion discussed above by specifying the order of the surface. The default surface order of 3 results in the immersion of the real projective described above. The surface order can be chosen between 2 and 9. Odd surface orders result in generalized immersions of the real projective plane, while even numbers result in a immersion of a topological sphere (which is orientable). The most interesting even case is a surface order of 2, which results in an immersion of the halfway model of Morin's sphere eversion (if the deformation is switched off). .PP This program is inspired by François Apéry's book "Models of the Real Projective Plane", Vieweg, 1987. .SH OPTIONS .I romanboy accepts the following options: .TP 8 .B \-window Draw on a newly-created window. This is the default. .TP 8 .B \-root Draw on the root window. .TP 8 .B \-install Install a private colormap for the window. .TP 8 .B \-visual \fIvisual\fP Specify which visual to use. Legal values are the name of a visual class, or the id number (decimal or hex) of a specific visual. .TP 8 .B \-delay \fImicroseconds\fP How much of a delay should be introduced between steps of the animation. Default 10000, or 1/100th second. .TP 8 .B \-fps Display the current frame rate, CPU load, and polygon count. .PP The following four options are mutually exclusive. They determine how the projective plane is displayed. .TP 8 .B \-mode random Display the projective plane in a random display mode (default). .TP 8 .B \-mode wireframe \fP(Shortcut: \fB\-wireframe\fP) Display the projective plane as a wireframe mesh. .TP 8 .B \-mode surface \fP(Shortcut: \fB\-surface\fP) Display the projective plane as a solid surface. .TP 8 .B \-mode transparent \fP(Shortcut: \fB\-transparent\fP) Display the projective plane as a transparent surface. .PP The following four options are mutually exclusive. They determine the appearance of the projective plane. .TP 8 .B \-appearance random Display the projective plane with a random appearance (default). .TP 8 .B \-appearance solid \fP(Shortcut: \fB\-solid\fP) Display the projective plane as a solid object. .TP 8 .B \-appearance distance-bands \fP(Shortcut: \fB\-distance-bands\fP) Display the projective plane as see-through bands that lie at increasing distances from the origin. .PP .TP 8 .B \-appearance direction-bands \fP(Shortcut: \fB\-direction-bands\fP) Display the projective plane as see-through bands that lie at increasing angles with respect to the origin. .PP The following four options are mutually exclusive. They determine how to color the projective plane. .TP 8 .B \-colors random Display the projective plane with a random color scheme (default). .TP 8 .B \-colors twosided \fP(Shortcut: \fB\-twosided-colors\fP) Display the projective plane with two colors: red on one "side" and green on the "other side." Note that the line at infinity lies at the points where the red and green "sides" of the projective plane meet, i.e., where the orientation of the projective plane reverses. .TP 8 .B \-colors distance \fP(Shortcut: \fB\-distance-colors\fP) Display the projective plane with fully saturated colors that depend on the distance of the points on the projective plane to the origin. The origin is displayed in red, the line at infinity is displayed in magenta. If the projective plane is displayed as distance bands, each band will be displayed with a different color. .TP 8 .B \-colors direction \fP(Shortcut: \fB\-direction-colors\fP) Display the projective plane with fully saturated colors that depend on the angle of the points on the projective plane with respect to the origin. Angles in opposite directions to the origin (e.g., 15 and 205 degrees) are displayed in the same color since they are projectively equivalent. If the projective plane is displayed as direction bands, each band will be displayed with a different color. .PP The following three options are mutually exclusive. They determine how to view the projective plane. .TP 8 .B \-view-mode random View the projective plane in a random view mode (default). .TP 8 .B \-view-mode turn \fP(Shortcut: \fB\-turn\fP) View the projective plane while it turns in 3d. .TP 8 .B \-view-mode walk \fP(Shortcut: \fB\-walk\fP) View the projective plane as if walking on its surface. .PP The following options determine whether the surface is being deformed. .TP 8 .B \-deform Deform the surface smoothly between the Roman and Boy surfaces (default). .TP 8 .B \-no-deform Don't deform the surface. .PP The following option determines the deformation speed. .TP 8 .B \-deformation-speed \fIfloat\fP The deformation speed is measured in percent of some sensible maximum speed (default: 10.0). .PP The following options determine the initial deformation of the surface. As described above, this is mostly useful if \fB\-no-deform\fP is specified. .TP 8 .B \-initial-deformation \fIfloat\fP The initial deformation is specified as a number between 0 and 1000. A value of 0 corresponds to the Roman surface, while a value of 1000 corresponds to the Boy surface. The default value is 1000. .TP 8 .B \-roman This is a shortcut for \fB\-initial-deformation 0\fP. .TP 8 .B \-boy This is a shortcut for \fB\-initial-deformation 1000\fP. .PP The following option determines the order of the surface to be displayed. .TP 8 .B \-surface-order \fInumber\fP The surface order can be set to values between 2 and 9 (default: 3). As described above, odd surface orders result in generalized immersions of the real projective plane, while even numbers result in a immersion of a topological sphere. .PP The following options determine whether orientation marks are shown on the projective plane. .TP 8 .B \-orientation-marks Display orientation marks on the projective plane. .TP 8 .B \-no-orientation-marks Don't display orientation marks on the projective plane (default). .PP The following three options are mutually exclusive. They determine how the projective plane is projected from 3d to 2d (i.e., to the screen). .TP 8 .B \-projection random Project the projective plane from 3d to 2d using a random projection mode (default). .TP 8 .B \-projection perspective \fP(Shortcut: \fB\-perspective\fP) Project the projective plane from 3d to 2d using a perspective projection. .TP 8 .B \-projection orthographic \fP(Shortcut: \fB\-orthographic\fP) Project the projective plane from 3d to 2d using an orthographic projection. .PP The following three options determine the rotation speed of the projective plane around the three possible axes. The rotation speed is measured in degrees per frame. The speeds should be set to relatively small values, e.g., less than 4 in magnitude. In walk mode, all speeds are ignored. .TP 8 .B \-speed-x \fIfloat\fP Rotation speed around the x axis (default: 1.1). .TP 8 .B \-speed-y \fIfloat\fP Rotation speed around the y axis (default: 1.3). .TP 8 .B \-speed-z \fIfloat\fP Rotation speed around the z axis (default: 1.5). .PP The following two options determine the walking speed and direction. .TP 8 .B \-walk-direction \fIfloat\fP The walking direction is measured as an angle in degrees in the 2d square that forms the coordinate system of the surface of the projective plane (default: 83.0). A value of 0 or 180 means that the walk is along a circle at a randomly chosen distance from the origin (parallel to a distance band). A value of 90 or 270 means that the walk is directly from the origin to the line at infinity and back (analogous to a direction band). Any other value results in a curved path from the origin to the line at infinity and back. .TP 8 .B \-walk-speed \fIfloat\fP The walking speed is measured in percent of some sensible maximum speed (default: 20.0). .SH INTERACTION If you run this program in standalone mode in its turn mode, you can rotate the projective plane by dragging the mouse while pressing the left mouse button. This rotates the projective plane in 3d. To examine the projective plane at your leisure, it is best to set all speeds to 0. Otherwise, the projective plane will rotate while the left mouse button is not pressed. This kind of interaction is not available in the walk mode. .SH ENVIRONMENT .PP .TP 8 .B DISPLAY to get the default host and display number. .TP 8 .B XENVIRONMENT to get the name of a resource file that overrides the global resources stored in the RESOURCE_MANAGER property. .SH SEE ALSO .BR X (1), .BR xscreensaver (1) .SH COPYRIGHT Copyright \(co 2013-2014 by Carsten Steger. 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. .SH AUTHOR Carsten Steger , 03-oct-2014. xscreensaver-5.36/hacks/glx/splitflap.man000664 000767 000024 00000005501 12701612221 020511 0ustar00jwzstaff000000 000000 .TH XScreenSaver 1 "" "X Version 11" .SH NAME splitflap - a simulation of a split-flap electromechanical display. .SH SYNOPSIS .B splitflap [\-display \fIhost:display.screen\fP] [\-visual \fIvisual\fP] [\-window] [\-root] [\-delay \fImicroseconds\fP] [\-speed \fIfloat\fP] [\-width \fIcolumns\fP] [\-height \fIrows\fP] [\-mode text | clock12 | clock24] [\-no-wander] [\-spin \fIaxes\fP] [\-no\-spin] [\-front] [\-no-front] [\-wireframe] [\-fps] .SH DESCRIPTION Simulates a split-flap display, an old style of electromechanical sign as seen in airports and train stations, and commonly used in alarm clocks in the 1960s and 1970s. .SH OPTIONS .TP 8 .B \-visual \fIvisual\fP Specify which visual to use. Legal values are the name of a visual class, or the id number (decimal or hex) of a specific visual. .TP 8 .B \-window Draw on a newly-created window. This is the default. .TP 8 .B \-root Draw on the root window. .TP 8 .B \-delay \fInumber\fP Per-frame delay, in microseconds. Default: 20000 (0.02 seconds). .TP 8 .B \-speed \fInumber\fP Animation speed. 2.0 means twice as fast, 0.5 means half as fast. .TP 8 .B \-width \fInumber\fP Columns of the display. Default: 22. .TP 8 .B \-height \fInumber\fP Rows of the display. Default: 8. .TP 8 .B \-mode clock12 Display a 12-hour clock. .TP 8 .B \-mode clock24 Display a 24-hour clock. .TP 8 .B \-front | \-no-front When spinning, never spin all the way around or upside down: always face mostly forward so that the text is easily readable. This is the default. .TP 8 .B \-no\-front Allow spins to go all the way around or upside down. .TP 8 .B \-wander | \-no-wander Whether the object should wander around the screen. .TP 8 .B \-spin Which axes around which the text should spin. The default is "XYZ", meaning rotate it freely in space. "\fB\-spin Z\fP" would rotate the text in the plane of the screen while not rotating it into or out of the screen; etc. .TP 8 .B \-wireframe | \-no-wireframe Render in wireframe instead of solid. .TP 8 .B \-fps | \-no-fps Whether to show a frames-per-second display at the bottom of the screen. .SH ENVIRONMENT .PP .TP 8 .B DISPLAY to get the default host and display number. .TP 8 .B XENVIRONMENT to get the name of a resource file that overrides the global resources stored in the RESOURCE_MANAGER property. .SH SEE ALSO .BR X (1), .BR xscreensaver (1) .SH COPYRIGHT Copyright \(co 2015 by 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. .SH AUTHOR Jamie Zawinski. xscreensaver-5.36/hacks/glx/dymaxionmap.man000664 000767 000024 00000004033 12701612221 021040 0ustar00jwzstaff000000 000000 .TH XScreenSaver 1 "" "X Version 11" .SH NAME dymaxionmap - An animation of Buckminster Fuller's unwrapped icosahedral globe. .SH SYNOPSIS .B dymaxionmap [\-display \fIhost:display.screen\fP] [\-visual \fIvisual\fP] [\-window] [\-root] [\-delay \fInumber\fP] [\-no-wander] [\-no-roll] [\-no-stars] [\-wireframe] [\-fps] .SH DESCRIPTION Buckminster Fuller's map of the Earth projected onto the surface of an unfolded icosahedron. It depicts the Earth's continents as one island, or nearly contiguous land masses. .SH OPTIONS .TP 8 .B \-visual \fIvisual\fP Specify which visual to use. Legal values are the name of a visual class, or the id number (decimal or hex) of a specific visual. .TP 8 .B \-window Draw on a newly-created window. This is the default. .TP 8 .B \-root Draw on the root window. .TP 8 .B \-delay \fInumber\fP Per-frame delay, in microseconds. Default: 20000 (0.02 seconds). .TP 8 .B \-wander | \-no-wander Whether the object should wander around the screen. .TP 8 .B \-roll | \-no-roll Whether the object should roll randomly. .TP 8 .B \-stars | \-no-stars Whether to display a star field. .TP 8 .B \-wireframe | \-no-wireframe Render in wireframe instead of solid. .TP 8 .B \-fps | \-no-fps Whether to show a frames-per-second display at the bottom of the screen. .SH ENVIRONMENT .PP .TP 8 .B DISPLAY to get the default host and display number. .TP 8 .B XENVIRONMENT to get the name of a resource file that overrides the global resources stored in the RESOURCE_MANAGER property. .SH SEE ALSO .BR X (1), .BR xscreensaver (1) .SH COPYRIGHT Copyright \(co 2016 by 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. .SH AUTHOR Jamie Zawinski. xscreensaver-5.36/hacks/glx/unicrud.man000664 000767 000024 00000004137 12702771613 020204 0ustar00jwzstaff000000 000000 .TH XScreenSaver 1 "" "X Version 11" .SH NAME unicrud - Bounces a random Unicode character on the screen. .SH SYNOPSIS .B unicrud [\-display \fIhost:display.screen\fP] [\-visual \fIvisual\fP] [\-window] [\-root] [\-delay \fInumber\fP] [\-speed \fInumber\fP] [\-block \fIstring\fP] [\-no-wander] [\-no-roll] [\-fps] .SH DESCRIPTION Chooses a random Unicode character and displays it full screen, along with some information about it. https://en.wikipedia.org/wiki/Unicode .SH OPTIONS .TP 8 .B \-visual \fIvisual\fP Specify which visual to use. Legal values are the name of a visual class, or the id number (decimal or hex) of a specific visual. .TP 8 .B \-window Draw on a newly-created window. This is the default. .TP 8 .B \-root Draw on the root window. .TP 8 .B \-delay \fInumber\fP Per-frame delay, in microseconds. Default: 20000 (0.02 seconds). .TP 8 .B \-speed \fInumber\fP Animation speed. 2.0 means twice as fast, 0.5 means half as fast. .TP 8 .B \-wander | \-no-wander Whether the object should wander around the screen. .TP 8 .B \-roll | \-no-roll Whether the object should rotate. Boolean. .TP 8 .B \-block \fIstring\fP Which block or blocks of Unicode characters to display. Default: "all". Use \fI\-block help\fP to see the full list. .TP 8 .B \-fps | \-no-fps Whether to show a frames-per-second display at the bottom of the screen. .SH ENVIRONMENT .PP .TP 8 .B DISPLAY to get the default host and display number. .TP 8 .B XENVIRONMENT to get the name of a resource file that overrides the global resources stored in the RESOURCE_MANAGER property. .SH SEE ALSO .BR X (1), .BR xscreensaver (1) .SH COPYRIGHT Copyright \(co 2016 by 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. .SH AUTHOR Jamie Zawinski. xscreensaver-5.36/hacks/glx/energystream.man000664 000767 000024 00000003153 12705774627 021250 0ustar00jwzstaff000000 000000 .TH XScreenSaver 1 "" "X Version 11" .SH NAME energystream - a flow of particles which form an energy stream .SH SYNOPSIS .B energystream [\-display \fIhost:display.screen\fP] [\-visual \fIvisual\fP] [\-window] [\-root] [\-no-wander] [\-no-spin] [\-fps] .SH DESCRIPTION Draws a set of flowing particles with camera flying around and through it. .SH OPTIONS .TP 8 .B \-visual \fIvisual\fP Specify which visual to use. Legal values are the name of a visual class, or the id number (decimal or hex) of a specific visual. .TP 8 .B \-window Draw on a newly-created window. This is the default. .TP 8 .B \-root Draw on the root window. .TP 8 .B \-wander | \-no-wander Whether the camera should wander around the screen. .TP 8 .B \-spin | \-no-spin Whether the camera should spin. .TP 8 .B \-fps Display the current frame rate, CPU load, and polygon count. .SH ENVIRONMENT .PP .TP 8 .B DISPLAY to get the default host and display number. .TP 8 .B XENVIRONMENT to get the name of a resource file that overrides the global resources stored in the RESOURCE_MANAGER property. .SH SEE ALSO .BR X (1), .BR xscreensaver (1) .SH COPYRIGHT Copyright \(co 2016 by Eugene Sandulenko. 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. .SH AUTHOR Eugene Sandulenko. xscreensaver-5.36/hacks/glx/raverhoop.man000664 000767 000024 00000004617 12711267602 020541 0ustar00jwzstaff000000 000000 .TH XScreenSaver 1 "" "X Version 11" .SH NAME raverhoop - Simulates an LED hula hoop in a dark room. .SH SYNOPSIS .B raverhoop [\-display \fIhost:display.screen\fP] [\-visual \fIvisual\fP] [\-window] [\-root] [\-delay \fInumber\fP] [\-ncolors \fInumber\fP] [\-lights \fInumber\fP] [\-speed \fInumber\fP] [\-light-speed \fInumber\fP] [\-sustain \fInumber\fP] [\-no-wander] [\-no-spin] [\-fps] .SH DESCRIPTION Simulates an LED hula hoop in a dark room. Oontz oontz oontz. .SH OPTIONS .TP 8 .B \-visual \fIvisual\fP Specify which visual to use. Legal values are the name of a visual class, or the id number (decimal or hex) of a specific visual. .TP 8 .B \-window Draw on a newly-created window. This is the default. .TP 8 .B \-root Draw on the root window. .TP 8 .B \-delay \fInumber\fP Per-frame delay, in microseconds. Default: 20000 (0.02 seconds). .TP 8 .B \-ncolors \fInumber\fP The number of colors to use on the hoop. Default: 12. .TP 8 .B \-lights \fInumber\fP The number of LEDs comprising the hoop. Default: 200. .TP 8 .B \-speed \fInumber\fP Speed of the motion of the object. 2.0 means twice as fast, 0.5 means half as fast. .TP 8 .B \-light-speed \fInumber\fP Speed at which the lights animate. 2.0 means twice as fast, 0.5 means half as fast. .TP 8 .B \-sustain \fInumber\fP Speed at which the after-images / vapor trails fade away. 2.0 means they last twice as long, 0.5 means half as long. .TP 8 .B \-wander | \-no-wander Whether the object should wander around the screen. .TP 8 .B \-spin | \-no-spin Whether the scene itself should spin. .TP 8 .B \-fps | \-no-fps Whether to show a frames-per-second display at the bottom of the screen. .SH ENVIRONMENT .PP .TP 8 .B DISPLAY to get the default host and display number. .TP 8 .B XENVIRONMENT to get the name of a resource file that overrides the global resources stored in the RESOURCE_MANAGER property. .SH SEE ALSO .BR X (1), .BR xscreensaver (1) .SH COPYRIGHT Copyright \(co 2016 by 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. .SH AUTHOR Jamie Zawinski. xscreensaver-5.36/hacks/glx/hydrostat.man000664 000767 000024 00000005731 12716256144 020557 0ustar00jwzstaff000000 000000 .TH XScreenSaver 1 "" "X Version 11" .SH NAME hydrostat - Wiggly squid or jellyfish with many tentacles. .SH SYNOPSIS .B hydrostat [\-display \fIhost:display.screen\fP] [\-visual \fIvisual\fP] [\-window] [\-root] [\-delay \fInumber\fP] [\-speed \fInumber\fP] [\-count \fInumber\fP] [\-head-radius \fInumber\fP] [\-tentacles \fInumber\fP] [\-thickness \fInumber\fP] [\-length \fInumber\fP] [\-gravity \fInumber\fP] [\-current \fInumber\fP] [\-friction \fInumber\fP] [\-no-pulse] [\-wireframe] [\-fps] .SH DESCRIPTION Wiggly squid or jellyfish with many tentacles. A muscular hydrostat is a biological structure used to move its host about, consisting of muscles with no skeletal support. It performs its hydraulic movement without fluid in a separate compartment, as in a hydrostatic skeleton. .SH OPTIONS .TP 8 .B \-visual \fIvisual\fP Specify which visual to use. Legal values are the name of a visual class, or the id number (decimal or hex) of a specific visual. .TP 8 .B \-window Draw on a newly-created window. This is the default. .TP 8 .B \-root Draw on the root window. .TP 8 .B \-delay \fInumber\fP Per-frame delay, in microseconds. Default: 20000 (0.02 seconds). .TP 8 .B \-speed \fInumber\fP Animation speed. 2.0 means twice as fast, 0.5 means half as fast. .TP 8 .B \-count \fInumber\fP Number of squid. 1 - 100. Default: 10. .TP 8 .B \-head-radius \fInumber\fP Head size. 10 - 100. Default: 60. .TP 8 .B \-tentacles \fInumber\fP Number of tentacles. 3 - 100. Default: 40. .TP 8 .B \-thickness \fInumber\fP Thickness of tentacles. 3 - 40. Default: 18. .TP 8 .B \-length \fInumber\fP Length of tentacles. 10 - 150. Default: 70. .TP 8 .B \-gravity \fInumber\fP Strength of gravity. 0 - 10.0. Default: 0.5. .TP 8 .B \-current \fInumber\fP Strength of current. 0.0 - 10.0. Default: 0.25. .TP 8 .B \-friction \fInumber\fP Coefficient of friction. 0.0 - 0.1. Default: 0.02. .TP 8 .B \-pulse | \-no-pulse Whether the squid should pulse. Default true. .TP 8 .B \-wireframe | \-no-wireframe Render in wireframe instead of solid. .TP 8 .B \-fps | \-no-fps Whether to show a frames-per-second display at the bottom of the screen. .SH ENVIRONMENT .PP .TP 8 .B DISPLAY to get the default host and display number. .TP 8 .B XENVIRONMENT to get the name of a resource file that overrides the global resources stored in the RESOURCE_MANAGER property. .SH SEE ALSO .BR X (1), .BR xscreensaver (1) .BR http://soulwire.co.uk/experiments/muscular-hydrostats/ .SH COPYRIGHT Copyright \(co 2016 by Justin Windle and 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. .SH AUTHOR Justin Windle and Jamie Zawinski. xscreensaver-5.36/hacks/glx/discoball.man000664 000767 000024 00000004007 12727704452 020467 0ustar00jwzstaff000000 000000 .TH XScreenSaver 1 "" "X Version 11" .SH NAME discoball - A dusty, dented disco ball screen saver. .SH SYNOPSIS .B discoball [\-display \fIhost:display.screen\fP] [\-visual \fIvisual\fP] [\-window] [\-root] [\-delay \fInumber\fP] [\-speed \fInumber\fP] [\-count \fInumber\fP] [\-no-wander] [\-spin] [\-wireframe] [\-fps] .SH DESCRIPTION A dusty, dented disco ball. Woop woop. .SH OPTIONS .TP 8 .B \-visual \fIvisual\fP Specify which visual to use. Legal values are the name of a visual class, or the id number (decimal or hex) of a specific visual. .TP 8 .B \-window Draw on a newly-created window. This is the default. .TP 8 .B \-root Draw on the root window. .TP 8 .B \-delay \fInumber\fP Per-frame delay, in microseconds. Default: 30000 (0.03 seconds). .TP 8 .B \-speed \fInumber\fP Animation speed. 2.0 means twice as fast, 0.5 means half as fast. .TP 8 .B \-count \fInumber\fP Number of rows of tiles on the ball. 10 - 100. Default: 30. .TP 8 .B \-wander | \-no-wander Whether the object should wander around the screen. .TP 8 .B \-spin | \-no-spin Whether the scene should spin. .TP 8 .B \-wireframe | \-no-wireframe Render in wireframe instead of solid. .TP 8 .B \-fps | \-no-fps Whether to show a frames-per-second display at the bottom of the screen. .SH ENVIRONMENT .PP .TP 8 .B DISPLAY to get the default host and display number. .TP 8 .B XENVIRONMENT to get the name of a resource file that overrides the global resources stored in the RESOURCE_MANAGER property. .SH SEE ALSO .BR X (1), .BR xscreensaver (1) .SH COPYRIGHT Copyright \(co 2016 by 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. .SH AUTHOR Jamie Zawinski. xscreensaver-5.36/hacks/glx/cubetwist.man000664 000767 000024 00000004421 12730606277 020544 0ustar00jwzstaff000000 000000 .TH XScreenSaver 1 "" "X Version 11" .SH NAME cubetwist - A series of nested cubes rotate and slide recursively. .SH SYNOPSIS .B cubetwist [\-display \fIhost:display.screen\fP] [\-visual \fIvisual\fP] [\-window] [\-root] [\-delay \fInumber\fP] [\-speed \fInumber\fP] [\-thickness \fInumber\fP] [\-displacement \fInumber\fP] [\-no-flat] [\-no-wander] [\-no-spin] [\-wireframe] [\-fps] .SH DESCRIPTION A series of nested cubes rotate and slide recursively. .SH OPTIONS .TP 8 .B \-visual \fIvisual\fP Specify which visual to use. Legal values are the name of a visual class, or the id number (decimal or hex) of a specific visual. .TP 8 .B \-window Draw on a newly-created window. This is the default. .TP 8 .B \-root Draw on the root window. .TP 8 .B \-delay \fInumber\fP Per-frame delay, in microseconds. Default: 30000 (0.03 seconds). .TP 8 .B \-speed \fInumber\fP Animation speed. 2.0 means twice as fast, 0.5 means half as fast. .TP 8 .B \-thickness \fInumber\fP Thickness of the cube edges. 0.005 - 0.2. Default: 0.05. .TP 8 .B \-displacement \fInumber\fP Displacement between nested cubes. 0.0 - 0.2. Default: 0.01. .TP 8 .B \-flat | \-no-flat Whether to use flat shading, or lighting. Default flat. .TP 8 .B \-wander | \-no-wander Whether the object should wander around the screen. .TP 8 .B \-spin | \-no-spin Whether the object should spin. .TP 8 .B \-wireframe | \-no-wireframe Render in wireframe instead of solid. .TP 8 .B \-fps | \-no-fps Whether to show a frames-per-second display at the bottom of the screen. .SH ENVIRONMENT .PP .TP 8 .B DISPLAY to get the default host and display number. .TP 8 .B XENVIRONMENT to get the name of a resource file that overrides the global resources stored in the RESOURCE_MANAGER property. .SH SEE ALSO .BR X (1), .BR xscreensaver (1) .SH COPYRIGHT Copyright \(co 2016 by 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. .SH AUTHOR Jamie Zawinski. xscreensaver-5.36/hacks/glx/cubestack.man000664 000767 000024 00000004104 12731331151 020460 0ustar00jwzstaff000000 000000 .TH XScreenSaver 1 "" "X Version 11" .SH NAME cubestack - An endless stack of unfolding, translucent cubes. .SH SYNOPSIS .B cubestack [\-display \fIhost:display.screen\fP] [\-visual \fIvisual\fP] [\-window] [\-root] [\-delay \fInumber\fP] [\-speed \fInumber\fP] [\-thickness \fInumber\fP] [\-opacity \fInumber\fP] [\-no-wander] [\-wireframe] [\-fps] .SH DESCRIPTION An endless stack of unfolding, translucent cubes. .SH OPTIONS .TP 8 .B \-visual \fIvisual\fP Specify which visual to use. Legal values are the name of a visual class, or the id number (decimal or hex) of a specific visual. .TP 8 .B \-window Draw on a newly-created window. This is the default. .TP 8 .B \-root Draw on the root window. .TP 8 .B \-delay \fInumber\fP Per-frame delay, in microseconds. Default: 30000 (0.03 seconds). .TP 8 .B \-speed \fInumber\fP Animation speed. 2.0 means twice as fast, 0.5 means half as fast. .TP 8 .B \-thickness \fInumber\fP Thickness of the face edges. 0.0 - 0.5. Default: 0.13. .TP 8 .B \-opacity \fInumber\fP Opacity of the cubes. 0.01 - 1.0. Default: 0.7. .TP 8 .B \-wander | \-no-wander Whether the object should wander around the screen. .TP 8 .B \-wireframe | \-no-wireframe Render in wireframe instead of solid. .TP 8 .B \-fps | \-no-fps Whether to show a frames-per-second display at the bottom of the screen. .SH ENVIRONMENT .PP .TP 8 .B DISPLAY to get the default host and display number. .TP 8 .B XENVIRONMENT to get the name of a resource file that overrides the global resources stored in the RESOURCE_MANAGER property. .SH SEE ALSO .BR X (1), .BR xscreensaver (1) .SH COPYRIGHT Copyright \(co 2016 by 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. .SH AUTHOR Jamie Zawinski. xscreensaver-5.36/hacks/glx/splodesic.man000664 000767 000024 00000003716 12731726271 020524 0ustar00jwzstaff000000 000000 .TH XScreenSaver 1 "" "X Version 11" .SH NAME splodesic - k A geodesic sphere experiences a series of eruptions. .SH SYNOPSIS .B splodesic [\-display \fIhost:display.screen\fP] [\-visual \fIvisual\fP] [\-window] [\-root] [\-no-wander] [\-no-spin] [\-fps] [\-delay \fInumber\fP] [\-speed \fInumber\fP] [\-depth \fInumber\fP] .SH DESCRIPTION A geodesic sphere experiences a series of eruptions. .SH OPTIONS .TP 8 .B \-visual \fIvisual\fP Specify which visual to use. Legal values are the name of a visual class, or the id number (decimal or hex) of a specific visual. .TP 8 .B \-window Draw on a newly-created window. This is the default. .TP 8 .B \-root Draw on the root window. .TP 8 .B \-wander | \-no-wander Whether the object should wander around the screen. .TP 8 .B \-spin | \-no-spin Whether the object should spin. .TP 8 .B \-fps | \-no-fps Whether to show a frames-per-second display at the bottom of the screen. .TP 8 .B \-delay \fInumber\fP Per-frame delay, in microseconds. Default: 30000 (0.03 seconds). .TP 8 .B \-speed \fInumber\fP Frequency of eruptions. 2.0 means twice as often, 0.5 means half as often. .TP 8 .B \-depth \fInumber\fP Depth (frequency) of the geodesic. 0 - 5. Default: 4. .SH ENVIRONMENT .PP .TP 8 .B DISPLAY to get the default host and display number. .TP 8 .B XENVIRONMENT to get the name of a resource file that overrides the global resources stored in the RESOURCE_MANAGER property. .SH SEE ALSO .BR X (1), .BR xscreensaver (1) .SH COPYRIGHT Copyright \(co 2016 by 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. .SH AUTHOR Jamie Zawinski. xscreensaver-5.36/hacks/glx/hexstrut.man000664 000767 000024 00000004367 12762500137 020423 0ustar00jwzstaff000000 000000 .TH XScreenSaver 1 "" "X Version 11" .SH NAME hexstrut - a grid of hexagons composed of rotating Y-shaped struts. .SH SYNOPSIS .B hexstrut [\-display \fIhost:display.screen\fP] [\-visual \fIvisual\fP] [\-window] [\-root] [\-delay \fInumber\fP] [\-speed \fInumber\fP] [\-count \fInumber\fP] [\-thickness \fInumber\fP] [\-no-wander] [\-no-spin] [\-wireframe] [\-fps] .SH DESCRIPTION A grid of hexagons composed of rotating Y-shaped struts. Waves of rotation and color changes randomly propagate across the plane. .SH OPTIONS .TP 8 .B \-visual \fIvisual\fP Specify which visual to use. Legal values are the name of a visual class, or the id number (decimal or hex) of a specific visual. .TP 8 .B \-window Draw on a newly-created window. This is the default. .TP 8 .B \-root Draw on the root window. .TP 8 .B \-delay \fInumber\fP Per-frame delay, in microseconds. Default: 30000 (0.03 seconds). .TP 8 .B \-speed \fInumber\fP Animation speed. 2.0 means twice as fast, 0.5 means half as fast. .TP 8 .B \-count \fInumber\fP Approximate number of hexagons on the screen, horizontally. Default: 20. .TP 8 .B \-thickness \fInumber\fP Relative thickness of the struts. 0.01 - 1.7. Default: 0.2. .TP 8 .B \-wander | \-no-wander Whether the grid should wander around the screen. .TP 8 .B \-spin | \-no-spin Whether the grid should spin. .TP 8 .B \-wireframe | \-no-wireframe Render in wireframe instead of solid. .TP 8 .B \-fps | \-no-fps Whether to show a frames-per-second display at the bottom of the screen. .SH ENVIRONMENT .PP .TP 8 .B DISPLAY to get the default host and display number. .TP 8 .B XENVIRONMENT to get the name of a resource file that overrides the global resources stored in the RESOURCE_MANAGER property. .SH SEE ALSO .BR X (1), .BR xscreensaver (1) .SH COPYRIGHT Copyright \(co 2016 by 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. .SH AUTHOR Jamie Zawinski. xscreensaver-5.36/hacks/glx/glforestfire.man000644 000767 000024 00000007062 12701612221 021210 0ustar00jwzstaff000000 000000 .de EX \"Begin example .ne 5 .if n .sp 1 .if t .sp .5 .nf .in +.5i .. .de EE .fi .in -.5i .if n .sp 1 .if t .sp .5 .. .TH XScreenSaver 1 "03-Oct-01" "X Version 11" .SH NAME glforestfire - draws a GL animation of sprinkling fire-like 3D triangles .SH SYNOPSIS .B glforestfire [\-display \fIhost:display.screen\fP] [\-window] [\-root] [\-visual \fIvisual\fP] [\-delay \fImicroseconds\fP] [\-count \fInumber_of_particles\fP] [\-trees \fInumber_of_trees\fP] [\-size \fIviewport_size\fP] [\-texture] [\-no-texture] [\-shadows] [\-no-shadows] [\-fog] [\-no-fog] [\-wireframe] [\-no-wireframe] [\-wander] [\-no-wander] [\-trackmouse] [\-no-trackmouse] [\-fps] .SH DESCRIPTION The \fIglforestfire\fP program draws an animation of sprinkling fire-like 3D triangles in a landscape filled with trees. .SH OPTIONS .I glforestfire accepts the following options: .TP 8 .B \-window Draw on a newly-created window. This is the default. .TP 8 .B \-root Draw on the root window. .TP 8 .B \-install Install a private colormap for the window. .TP 8 .B \-visual \fIvisual\fP\fP Specify which visual to use. Legal values are the name of a visual class, or the id number (decimal or hex) of a specific visual. .TP 8 .B \-fps Display the current frame rate, CPU load, and polygon count. .TP 8 .B \-trees \fInumber_of_trees\fP\fP Specify how much trees are drawn in the landscape. .TP 8 .B \-count \fInumber_of_particles\fP\fP Specify how much fire particles are drawn. A very special case is 0 wich means that you get .B rain ! .TP 8 .B \-size \fIviewport_size\fP\fP Viewport of GL scene is specified size if greater than 32 and less than screensize. Default value is 0, meaning full screensize. .TP 8 .B \-texture Show a textured ground and the trees. This is the default. .TP 8 .B \-no\-texture Disables texturing the landscape. This implies that no trees are drawn. .TP 8 .B \-shadows Show a shadow for each particle on the ground. This is the default. .TP 8 .B \-no\-shadows Disables the drawing of the shadows. .TP 8 .B \-fog Show a fog in the distance. .TP 8 .B \-no\-fog Disables the fog. This is the default. .TP 8 .B \-wander Move the observer around the landscape. This is the default. .TP 8 .B \-no\-wander Keep the fire centered on the screen. .TP 8 .B \-trackmouse Let the mouse be a joystick to change the view of the landscape. This implies .I \-no\-wander. .TP 8 .B \-no\-trackmouse Disables mouse tracking. This is the default. .TP 8 .B \-wire Draw a wireframe rendition of the fire: this will consist only of single-pixel lines for the triangles. .SH ENVIRONMENT .PP .TP 8 .B DISPLAY to get the default host and display number. .TP 8 .B XENVIRONMENT to get the name of a resource file that overrides the global resources stored in the RESOURCE_MANAGER property. .SH SEE ALSO .BR X (1), .BR xscreensaver (1) .SH COPYRIGHT Copyright \(co 2001 by Eric Lassauge. 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. The original code for this hack was written by David Bucciarelli (tech.hmw@plus.it) and could be found in the demo package of Mesa (Mesa-3.2/3Dfx/demos/). This hack is the result of the merge of two of the David's demos (fire and rain). .SH AUTHOR David Bucciarelli Eric Lassauge xscreensaver-5.36/hacks/glx/README000644 000767 000024 00000000726 06672701165 016720 0ustar00jwzstaff000000 000000 This directory contains various graphics hacks that requre OpenGL. These are independent from the xscreensaver program (in the ../../driver/ directory) but some of them use the utility functions found in the ../../utils/ directory. If you have compilation problems, check the parameters in ../../config.h. If you're looking for a free implementation of the OpenGL library, check out . For general OpenGL info, see . xscreensaver-5.36/hacks/glx/Makefile.in000664 000767 000000 00000323351 12777052476 020113 0ustar00jwzwheel000000 000000 # hacks/glx/Makefile.in --- xscreensaver, Copyright (c) 1999-2010 # by Jamie Zawinski. # the `../../configure' script generates `hacks/glx/Makefile' from this file. @SET_MAKE@ .SUFFIXES: .SUFFIXES: .c .o srcdir = @srcdir@ VPATH = @srcdir@ top_srcdir = @top_srcdir@ top_builddir = .. install_prefix = prefix = @prefix@ exec_prefix = @exec_prefix@ bindir = @bindir@ datarootdir = @datarootdir@ datadir = @datadir@ mandir = @mandir@ libexecdir = @libexecdir@ mansuffix = 6 manNdir = $(mandir)/man$(mansuffix) HACKDIR = @HACKDIR@ HACK_CONF_DIR = @HACK_CONF_DIR@ CC = @CC@ CFLAGS = @CFLAGS@ LDFLAGS = @LDFLAGS@ DEFS = -DSTANDALONE -DUSE_GL @DEFS@ LIBS = @LIBS@ DEPEND = @DEPEND@ DEPEND_FLAGS = @DEPEND_FLAGS@ DEPEND_DEFINES = @DEPEND_DEFINES@ SHELL = /bin/sh INSTALL = @INSTALL@ SUID_FLAGS = -o root -m 4755 INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SETUID = @INSTALL_SETUID@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_DIRS = @INSTALL_DIRS@ X_CFLAGS = @X_CFLAGS@ X_LIBS = @X_LIBS@ X_PRE_LIBS = @X_PRE_LIBS@ X_EXTRA_LIBS = @X_EXTRA_LIBS@ XMU_LIBS = @XMU_LIBS@ XFT_LIBS = @XFT_LIBS@ # Note: see comment in ../../driver/Makefile.in for explanation of X_LIBS, etc. # HACK_PRE = $(LIBS) $(X_LIBS) HACK_POST = $(X_PRE_LIBS) $(XFT_LIBS) -lXt -lX11 $(XMU_LIBS) -lXext $(X_EXTRA_LIBS) -lm HACK_POST2 = @GL_LIBS@ @HACK_LIBS@ $(HACK_POST) HACK_LIBS = $(HACK_PRE) @ANIM_LIBS@ $(HACK_POST2) XPM_LIBS = $(HACK_PRE) @XPM_LIBS@ $(HACK_POST2) GLE_LIBS = $(HACK_PRE) @GLE_LIBS@ @XPM_LIBS@ $(HACK_POST2) TEXT_LIBS = @PTY_LIBS@ MINIXPM = $(UTILS_BIN)/minixpm.o HACK_SRC = $(srcdir)/.. HACK_BIN = .. UTILS_SRC = $(HACK_SRC)/../utils JWXYZ_SRC = $(HACK_SRC)/../jwxyz UTILS_BIN = $(HACK_BIN)/../utils JWXYZ_BIN = $(HACK_BIN)/../jwxyz INCLUDES_1 = -I. -I$(srcdir) -I$(UTILS_SRC) -I$(JWXYZ_SRC) -I$(HACK_SRC) -I../.. INCLUDES = $(INCLUDES_1) @INCLUDES@ UTILDIR_OBJS = $(UTILS_BIN)/colors.o $(UTILS_BIN)/grabclient.o \ $(UTILS_BIN)/hsv.o $(UTILS_BIN)/resources.o \ $(UTILS_BIN)/usleep.o $(UTILS_BIN)/visual.o \ $(UTILS_BIN)/xmu.o $(UTILS_BIN)/xft.o \ $(UTILS_BIN)/utf8wc.o $(UTILS_BIN)/logo.o \ $(UTILS_BIN)/minixpm.o $(UTILS_BIN)/visual-gl.o \ $(UTILS_BIN)/yarandom.o $(UTILS_BIN)/xshm.o \ $(UTILS_BIN)/textclient.o $(UTILS_BIN)/async_netdb.o \ $(UTILS_BIN)/aligned_malloc.o $(UTILS_BIN)/thread_util.o \ $(UTILS_BIN)/spline.o JWXYZ_OBJS = $(JWXYZ_BIN)/jwzgles.o HACKDIR_OBJS = $(HACK_SRC)/screenhack.o $(UTILS_SRC)/xlockmore.o \ $(HACK_SRC)/fps.o SRCS = xscreensaver-gl-helper.c normals.c fps-gl.c \ atlantis.c b_draw.c b_lockglue.c b_sphere.c bubble3d.c \ buildlwo.c cage.c dolphin.c gears.c lament.c lament_model.c \ moebius.c morph3d.c pipeobjs.c pipes.c rubik.c s1_1.c s1_2.c \ s1_3.c s1_4.c s1_5.c s1_6.c s1_b.c shark.c sproingies.c \ sproingiewrap.c stairs.c superquadrics.c swim.c whale.c \ xlock-gl-utils.c xpm-ximage.c glplanet.c pulsar.c \ extrusion.c extrusion-helix2.c extrusion-helix3.c \ extrusion-helix4.c extrusion-joinoffset.c extrusion-screw.c \ extrusion-taper.c extrusion-twistoid.c sierpinski3d.c \ gflux.c stonerview.c stonerview-move.c stonerview-osc.c \ stonerview-view.c starwars.c glut_stroke.c glut_swidth.c \ gltext.c molecule.c dangerball.c sphere.c tube.c circuit.c \ menger.c engine.c flipscreen3d.c dnalogo.c \ grab-ximage.c glsnake.c boxed.c glforestfire.c sballs.c \ cubenetic.c spheremonics.c marching.c lavalite.c rotator.c \ trackball.c gltrackball.c queens.c endgame.c chessmodels.c \ glblur.c gllist.c flurry.c flurry-smoke.c flurry-spark.c \ flurry-star.c flurry-texture.c atunnel.c tunnel_draw.c \ flyingtoasters.c toaster.c toaster_base.c toaster_handle.c \ toaster_handle2.c toaster_jet.c toaster_knob.c \ toaster_slots.c toaster_wing.c toast.c toast2.c \ bouncingcow.c cow_face.c cow_hide.c cow_hoofs.c cow_horns.c \ cow_tail.c cow_udder.c glslideshow.c jigglypuff.c klein.c \ hypertorus.c glmatrix.c cubestorm.c glknots.c blocktube.c \ flipflop.c antspotlight.c polytopes.c gleidescope.c \ mirrorblob.c blinkbox.c noof.c polyhedra.c polyhedra-gl.c \ antinspect.c providence.c pinion.c involute.c boing.c \ texfont.c carousel.c fliptext.c antmaze.c tangram.c \ tangram_shapes.c crackberg.c glhanoi.c cube21.c \ timetunnel.c juggler3d.c topblock.c glschool.c \ glschool_gl.c glschool_alg.c glcells.c voronoi.c \ moebiusgears.c lockward.c cubicgrid.c hypnowheel.c \ skytentacles.c teapot.c sonar.c sonar-sim.c sonar-icmp.c \ jigsaw.c photopile.c dropshadow.c rubikblocks.c surfaces.c \ hilbert.c companion.c companion_quad.c companion_disc.c \ companion_heart.c tronbit.c tronbit_idle1.c tronbit_idle2.c \ tronbit_no.c tronbit_yes.c kaleidocycle.c \ quasicrystal.c unknownpleasures.c geodesic.c geodesicgears.c \ projectiveplane.c winduprobot.c robot.c robot-wireframe.c \ cityflow.c romanboy.c splitflap.c splitflap_obj.c \ dymaxionmap.c unicrud.c energystream.c raverhoop.c \ hydrostat.c discoball.c cubetwist.c cubestack.c splodesic.c \ hexstrut.c OBJS = xscreensaver-gl-helper.o normals.o fps-gl.o \ atlantis.o b_draw.o b_lockglue.o b_sphere.o bubble3d.o \ buildlwo.o cage.o dolphin.o gears.o lament.o lament_model.o \ moebius.o morph3d.o pipeobjs.o pipes.o rubik.o s1_1.o s1_2.o \ s1_3.o s1_4.o s1_5.o s1_6.o s1_b.o shark.o sproingies.o \ sproingiewrap.o stairs.o superquadrics.o swim.o whale.o \ xlock-gl-utils.o xpm-ximage.o glplanet.o pulsar.o \ extrusion.o extrusion-helix2.o extrusion-helix3.o \ extrusion-helix4.o extrusion-joinoffset.o extrusion-screw.o \ extrusion-taper.o extrusion-twistoid.o sierpinski3d.o \ gflux.o stonerview.o stonerview-move.o stonerview-osc.o \ stonerview-view.o starwars.o glut_stroke.o glut_swidth.o \ gltext.o molecule.o dangerball.o sphere.o tube.o circuit.o \ menger.o engine.o flipscreen3d.o dnalogo.o \ grab-ximage.o glsnake.o boxed.o glforestfire.o sballs.o \ cubenetic.o spheremonics.o marching.o lavalite.o rotator.o \ trackball.o gltrackball.o queens.o endgame.o chessmodels.o \ glblur.o gllist.o flurry.o flurry-smoke.o flurry-spark.o \ flurry-star.o flurry-texture.o atunnel.o tunnel_draw.o \ flyingtoasters.o toaster.o toaster_base.o toaster_handle.o \ toaster_handle2.o toaster_jet.o toaster_knob.o \ toaster_slots.o toaster_wing.o toast.o toast2.o \ bouncingcow.o cow_face.o cow_hide.o cow_hoofs.o cow_horns.o \ cow_tail.o cow_udder.o glslideshow.o jigglypuff.o klein.o \ hypertorus.o glmatrix.o cubestorm.o glknots.o blocktube.o \ flipflop.o antspotlight.o polytopes.o gleidescope.o \ mirrorblob.o blinkbox.o noof.o polyhedra.o polyhedra-gl.o \ antinspect.o providence.o pinion.o involute.o boing.o \ texfont.o carousel.o fliptext.o antmaze.o tangram.o \ tangram_shapes.o crackberg.o glhanoi.o cube21.o \ timetunnel.o juggler3d.o topblock.o glschool.o \ glschool_gl.o glschool_alg.o glcells.o voronoi.o \ moebiusgears.o lockward.o cubicgrid.o hypnowheel.o \ skytentacles.o teapot.o sonar.o sonar-sim.o sonar-icmp.o \ jigsaw.o photopile.o dropshadow.o rubikblocks.o surfaces.o \ hilbert.o companion.o companion_quad.o companion_disc.o \ companion_heart.o tronbit.o tronbit_idle1.o tronbit_idle2.o \ tronbit_no.o tronbit_yes.o kaleidocycle.o \ quasicrystal.o unknownpleasures.o geodesic.o geodesicgears.o \ projectiveplane.o winduprobot.o robot.o robot-wireframe.o \ cityflow.o romanboy.o splitflap.o splitflap_obj.o \ dymaxionmap.o unicrud.o energystream.o raverhoop.o \ hydrostat.o discoball.o cubetwist.o cubestack.o splodesic.o \ hexstrut.o GL_EXES = cage gears moebius pipes sproingies stairs superquadrics \ morph3d rubik atlantis lament bubble3d glplanet pulsar \ sierpinski3d gflux stonerview starwars gltext molecule \ dangerball circuit menger engine flipscreen3d glsnake boxed \ sballs cubenetic spheremonics lavalite queens \ endgame glblur flurry atunnel flyingtoasters bouncingcow \ glslideshow jigglypuff klein hypertorus glmatrix cubestorm \ glknots blocktube flipflop antspotlight polytopes \ gleidescope mirrorblob blinkbox noof polyhedra \ antinspect providence pinion boing carousel fliptext \ antmaze tangram crackberg glhanoi cube21 timetunnel \ juggler3d topblock glschool glcells voronoi moebiusgears \ lockward cubicgrid hypnowheel skytentacles jigsaw photopile \ rubikblocks surfaces hilbert companioncube tronbit \ kaleidocycle quasicrystal unknownpleasures geodesic \ geodesicgears projectiveplane winduprobot cityflow romanboy \ splitflap dymaxionmap unicrud energystream raverhoop \ hydrostat discoball cubetwist cubestack splodesic \ hexstrut GLE_EXES = extrusion SUID_EXES = sonar GL_UTIL_EXES = xscreensaver-gl-helper JWZGLES_OBJS = @JWZGLES_OBJS@ HACK_EXES_1 = @GL_EXES@ @GLE_EXES@ HACK_EXES = $(HACK_EXES_1) @SUID_EXES@ XSHM_OBJS = $(UTILS_BIN)/xshm.o GRAB_OBJS = $(UTILS_BIN)/grabclient.o grab-ximage.o $(XSHM_OBJS) ANIM_OBJS = recanim-gl.o ANIM_LIBS = @XPM_LIBS@ EXES = @GL_UTIL_EXES@ $(HACK_EXES) RETIRED_EXES = @RETIRED_GL_EXES@ RETIRED_GL_EXES = glforestfire FPS_OBJS = texfont.o $(HACK_BIN)/fps.o fps-gl.o @XFT_OBJS@ HACK_OBJS = $(JWZGLES_OBJS) $(HACK_BIN)/screenhack.o @ANIM_OBJS@ \ xlockmore-gl.o xlock-gl-utils.o ${FPS_OBJS} \ $(UTILS_BIN)/resources.o $(UTILS_BIN)/visual.o \ $(UTILS_BIN)/visual-gl.o $(UTILS_BIN)/usleep.o \ $(UTILS_BIN)/yarandom.o $(UTILS_BIN)/hsv.o \ $(UTILS_BIN)/colors.o $(UTILS_BIN)/async_netdb.o \ $(UTILS_BIN)/aligned_malloc.o $(UTILS_BIN)/thread_util.o \ $(UTILS_BIN)/utf8wc.o HDRS = atlantis.h bubble3d.h buildlwo.h e_textures.h xpm-ximage.h \ grab-ximage.h tube.h sphere.h boxed.h \ stonerview.h stonerview-move.h stonerview-osc.h \ glutstroke.h glut_roman.h marching.h rotator.h trackball.h \ gltrackball.h chessmodels.h chessgames.h gllist.h flurry.h \ tunnel_draw.h ants.h polyhedra.h normals.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 \ teapot2.h dnapizza.h curlicue.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 \ glplanet.man glsnake.man gltext.man lament.man lavalite.man \ menger.man moebius.man molecule.man morph3d.man pipes.man \ pulsar.man queens.man rubik.man sballs.man sierpinski3d.man \ spheremonics.man sproingies.man stairs.man starwars.man \ stonerview.man superquadrics.man xscreensaver-gl-helper.man \ endgame.man flurry.man glblur.man atunnel.man \ flyingtoasters.man bouncingcow.man glslideshow.man \ jigglypuff.man klein.man hypertorus.man glmatrix.man \ cubestorm.man glknots.man blocktube.man flipflop.man \ antspotlight.man polytopes.man gleidescope.man \ mirrorblob.man blinkbox.man noof.man polyhedra.man \ antinspect.man providence.man pinion.man boing.man \ carousel.man fliptext.man antmaze.man tangram.man \ crackberg.man glhanoi.man cube21.man timetunnel.man \ juggler3d.man topblock.man glschool.man glcells.man \ voronoi.man moebiusgears.man lockward.man cubicgrid.man \ hypnowheel.man skytentacles.man sonar.man jigsaw.man \ photopile.man rubikblocks.man surfaces.man hilbert.man \ companioncube.man tronbit.man kaleidocycle.man \ quasicrystal.man unknownpleasures.man geodesic.man \ geodesicgears.man projectiveplane.man winduprobot.man \ cityflow.man romanboy.man splitflap.man dymaxionmap.man \ unicrud.man energystream.man raverhoop.man hydrostat.man \ discoball.man cubetwist.man cubestack.man splodesic.man \ hexstrut.man MEN = @GL_MEN@ RETIRED_MEN = glforestfire.man EXTRAS = README Makefile.in dxf2gl.pl vrml2gl.pl wfront2gl.pl \ molecules.sh starwars.txt zalgo.txt *.dxf TARFILES = $(SRCS) $(HDRS) $(GL_MEN) $(RETIRED_MEN) $(EXTRAS) default: all all: $(EXES) $(RETIRED_EXES) install: install-program install-xml install-man uninstall: uninstall-program uninstall-xml uninstall-man install-strip: $(MAKE) INSTALL_PROGRAM='$(INSTALL_PROGRAM) -s' install # the hacks, in $HACKDIR install-program:: $(EXES) @exes="$(HACK_EXES_1)" ; \ idir="$(install_prefix)$(HACKDIR)" ; \ if [ "$$exes" != "" ]; then \ if [ ! -d $$idir ]; then \ $(INSTALL_DIRS) $$idir ; \ fi ; \ for program in $$exes; do \ echo $(INSTALL_PROGRAM) $$program $$idir/$$program ; \ $(INSTALL_PROGRAM) $$program $$idir/$$program ; \ done ; \ \ exes="$(SUID_EXES)" ; \ if [ @SETUID_HACKS@ = yes ]; then \ sinst="$(INSTALL_SETUID)" ; \ else \ sinst="$(INSTALL_PROGRAM)" ; \ fi ; \ for program in $$exes; do \ echo $$sinst $$program $$idir/$$program ; \ if $$sinst $$program $$idir/$$program ; then \ true ; \ elif [ @SETUID_HACKS@ = yes ]; then \ echo $(INSTALL_PROGRAM) $$program $$idir/$$program ; \ if $(INSTALL_PROGRAM) $$program $$idir/$$program ; then\ echo "" ; \ echo "WARNING: unable to install $$program setuid:" \ "installed non-setuid instead." ; \ echo "" ; \ else \ exit 1 ; \ fi ; \ else \ exit 1 ; \ fi ; \ done ; \ fi # the xscreensaver-gl-helper program, in $bindir install-program:: $(EXES) @exes="@GL_UTIL_EXES@" ; \ idir="$(install_prefix)$(bindir)" ; \ if [ "$$exes" != "" ]; then \ if [ ! -d $$idir ]; then \ $(INSTALL_DIRS) $$idir ; \ fi ; \ for program in $$exes; do \ echo $(INSTALL_PROGRAM) $$program $$idir/$$program ; \ $(INSTALL_PROGRAM) $$program $$idir/$$program ; \ done ; \ fi # When installing man pages, we install "foo.man" as "foo.N" and update # the .TH line in the installed file with one like # # .TH XScreenSaver N "V.VV (DD-MMM-YYYY)" "X Version 11" # # where N is the manual section suffix. # install-man: $(MEN) @men="$(MEN)" ; \ U=$(UTILS_SRC)/version.h ; \ V=`sed -n 's/.*xscreensaver \([0-9]\.[^)]*)\).*/\1/p' < $$U` ; \ T=/tmp/xs$$$$.$(mansuffix) ; \ TH=".TH XScreenSaver $(mansuffix) \"$$V\" \"X Version 11\"" ; \ echo "installing man pages: $$TH" ; \ \ if [ ! -d $(install_prefix)$(manNdir) ]; then \ $(INSTALL_DIRS) $(install_prefix)$(manNdir) ; \ fi ; \ \ for man in $$men; do \ instname=`echo $$man | sed 's/\.man$$/\.$(mansuffix)/'` ; \ manbase=`echo $$man | sed 's/\.man$$//'` ; \ TH=".TH $$manbase $(mansuffix) \"$$V\" \"X Version 11\" \"XScreenSaver manual\"" ; \ sed -e "s/^\.TH.*/$$TH/" \ -e 's@(MANSUFFIX)@($(mansuffix))@g' \ < $(srcdir)/$$man > $$T ; \ echo $(INSTALL_DATA) $(srcdir)/$$man \ $(install_prefix)$(manNdir)/$$instname ; \ $(INSTALL_DATA) $$T \ $(install_prefix)$(manNdir)/$$instname ; \ done ; \ rm -f $$T install-xml: @dest=$(install_prefix)$(HACK_CONF_DIR) ; \ if [ ! -d $$dest ]; then \ $(INSTALL_DIRS) $$dest ; \ fi ; \ src=$(srcdir)/../config ; \ for file in $(EXES) $(SCRIPTS) ; do \ if [ -f $$src/$$file.xml ]; then \ echo $(INSTALL_DATA) $$src/$$file.xml $$dest/$$file.xml ; \ $(INSTALL_DATA) $$src/$$file.xml $$dest/$$file.xml ; \ fi ; \ done # the hacks, in $HACKDIR uninstall-program:: @exes="$(HACK_EXES) $(RETIRED_EXES)" ; \ idir="$(install_prefix)$(HACKDIR)" ; \ for program in $$exes; do \ echo rm -f $$idir/$$program ; \ rm -f $$idir/$$program ; \ done # the xscreensaver-gl-helper program, in $bindir uninstall-program:: @exes="$(GL_UTIL_EXES)" ; \ idir="$(install_prefix)$(bindir)" ; \ for program in $$exes; do \ echo rm -f $$idir/$$program ; \ rm -f $$idir/$$program ; \ done uninstall-man: @men="$(MEN) $(RETIRED_MEN)" ; \ for man in $$men; do \ instname=`echo $$man | sed 's/\.man$$/\.$(mansuffix)/'` ; \ echo rm -f $(install_prefix)$(manNdir)/$$instname* ; \ rm -f $(install_prefix)$(manNdir)/$$instname* ; \ done uninstall-xml: @dest=$(install_prefix)$(HACK_CONF_DIR) ; \ for file in $(EXES) $(RETIRED_EXES) $(SCRIPTS) ; do \ echo rm -f $$dest/$$file.xml ; \ rm -f $$dest/$$file.xml ; \ done clean: -rm -f *.o a.out core $(EXES) $(RETIRED_EXES) molecules.h distclean: clean -rm -f Makefile TAGS *~ "#"* # Adds all current dependencies to Makefile depend: $(DEPEND) -s '# DO NOT DELETE: updated by make depend' \ $(DEPEND_FLAGS) -- \ $(INCLUDES) $(DEFS) $(DEPEND_DEFINES) $(CFLAGS) $(X_CFLAGS) -- \ $(SRCS) # Adds some dependencies to Makefile.in -- not totally accurate, but pretty # close. This excludes dependencies on files in /usr/include, etc. It tries # to include only dependencies on files which are themselves a part of this # package. distdepend:: molecules.h @echo updating dependencies in `pwd`/Makefile.in... ; \ $(DEPEND) -w 0 -f - \ -s '# DO NOT DELETE: updated by make distdepend' $(DEPEND_FLAGS) -- \ $(INCLUDES_1) $(DEFS) $(DEPEND_DEFINES) $(CFLAGS) $(X_CFLAGS) -- \ $(SRCS) 2>/dev/null | \ sort -d | \ ( \ awk '/^# .*Makefile.in ---/,/^# DO .*distdepend/' < Makefile.in ; \ sed -e '/^#.*/d' \ -e 's@ \./@ @g;s@ /[^ ]*@@g;/^.*:$$/d' \ -e 's@\.\./\.\./utils@$$(UTILS_SRC)@g' \ -e 's@\.\./\.\./jwxyz@$$(JWXYZ_SRC)@g' \ -e 's@\.\./glx/@@g' \ -e 's@ \.\./@ $$(HACK_SRC)/@g' \ -e 's@ \([^$$]\)@ $$(srcdir)/\1@g' \ -e 's@ $$(srcdir)/\(.*config.h\)@ \1@g' \ -e 's@ $$(HACK_SRC)/\(.*config.h\)@ ../\1@g' \ -e 's@ $$(srcdir)/\(.*molecules.h\)@ \1@g' ; \ echo '' \ ) > /tmp/distdepend.$$$$ && \ mv /tmp/distdepend.$$$$ Makefile.in TAGS: tags tags: find $(srcdir) -name '*.[chly]' -print | xargs etags -a echo_tarfiles: @echo $(TARFILES) check_men: @badmen="" ; \ for exe in $(EXES); do \ if ! [ -f $(srcdir)/$$exe.man ]; then \ badmen="$$badmen $$exe" ; \ fi ; \ done ; \ if [ -n "$$badmen" ]; then \ echo "" ; \ echo "Warning: The following programs have no manuals:" ; \ echo "" ; \ for m in $$badmen ; do \ echo " $$m" ; \ done ; \ fi validate_xml: @echo "Validating XML..." ; \ cd $(HACK_SRC) ; ./check-configs.pl $(GL_EXES) $(GLE_EXES) $(SUID_EXES) distdepend:: check_men validate_xml # Rules for noticing when the objects from the utils and hacks # directories are out of date with respect to their sources, and going # and building them according to the rules in their own Makefile... # $(UTILS_BIN)/colors.o: $(UTILS_SRC)/colors.c $(UTILS_BIN)/grabclient.o: $(UTILS_SRC)/grabclient.c $(UTILS_BIN)/hsv.o: $(UTILS_SRC)/hsv.c $(UTILS_BIN)/resources.o: $(UTILS_SRC)/resources.c $(UTILS_BIN)/usleep.o: $(UTILS_SRC)/usleep.c $(UTILS_BIN)/visual.o: $(UTILS_SRC)/visual.c $(UTILS_BIN)/xmu.o: $(UTILS_SRC)/xmu.c $(UTILS_BIN)/xft.o: $(UTILS_SRC)/xft.c $(UTILS_BIN)/utf8wc.o: $(UTILS_SRC)/utf8wc.c $(UTILS_BIN)/logo.o: $(UTILS_SRC)/logo.c $(UTILS_BIN)/minixpm.o: $(UTILS_SRC)/minixpm.c $(UTILS_BIN)/visual-gl.o: $(UTILS_SRC)/visual-gl.c $(UTILS_BIN)/yarandom.o: $(UTILS_SRC)/yarandom.c $(UTILS_BIN)/xshm.o: $(UTILS_SRC)/xshm.c $(UTILS_BIN)/textclient.o: $(UTILS_SRC)/textclient.c $(UTILS_BIN)/async_netdb.o: $(UTILS_SRC)/async_netdb.c $(UTILS_BIN)/aligned_malloc.o: $(UTILS_SRC)/aligned_malloc.c $(UTILS_BIN)/thread_util.o: $(UTILS_SRC)/thread_util.c $(UTILS_BIN)/spline.o: $(UTILS_SRC)/spline.c $(HACK_BIN)/screenhack.o: $(HACK_SRC)/screenhack.c $(HACK_BIN)/xlockmore.o: $(HACK_SRC)/xlockmore.c $(HACK_BIN)/fps.o: $(HACK_SRC)/fps.c $(UTILDIR_OBJS): $(MAKE) -C $(UTILS_BIN) $(@F) CC="$(CC)" CFLAGS="$(CFLAGS)" $(JWXYZ_OBJS): $(MAKE) -C $(JWXYZ_BIN) $(@F) CC="$(CC)" CFLAGS="$(CFLAGS)" $(HACKDIR_OBJS): $(MAKE) -C $(HACK_BIN) $(@F) CC="$(CC)" CFLAGS="$(CFLAGS)" # How we build object files in this directory. .c.o: $(CC) -c $(INCLUDES) $(DEFS) $(CPPFLAGS) $(CFLAGS) $(X_CFLAGS) $< # How to build the "xscreensaver-gl-helper" program, that lets the daemon # know which visual is the right one for GL programs. # HELPER_OBJS = xscreensaver-gl-helper.o $(UTILS_BIN)/visual-gl.o \ $(UTILS_BIN)/visual.o $(UTILS_BIN)/resources.o xscreensaver-gl-helper: $(HELPER_OBJS) $(CC) $(LDFLAGS) -o $@ $(HELPER_OBJS) $(LIBS) $(X_LIBS) $(HACK_POST2) # These hacks use a slightly-differently-compiled variant of xlockmore.c. # This is how to make the the other .o file from it. # XLM_CFLAGS=-DUSE_GL $(INCLUDES) $(DEFS) $(CPPFLAGS) $(CFLAGS) $(X_CFLAGS) xlockmore-gl.o: $(HACK_SRC)/xlockmore.c $(CC) -o $@ -c $(XLM_CFLAGS) $(HACK_SRC)/xlockmore.c recanim-gl.o: $(HACK_SRC)/recanim.c $(CC) -o $@ -c $(XLM_CFLAGS) $(HACK_SRC)/recanim.c CC_HACK = $(CC) $(LDFLAGS) TRACK_OBJS=rotator.o trackball.o gltrackball.o HACK_TRACK_OBJS=$(HACK_OBJS) $(TRACK_OBJS) HACK_GRAB_OBJS=$(HACK_OBJS) $(GRAB_OBJS) HACK_TRACK_GRAB_OBJS=$(HACK_TRACK_OBJS) $(GRAB_OBJS) TEXT=$(UTILS_BIN)/textclient.o ATLANTIS_OBJS = $(HACK_OBJS) dolphin.o shark.o swim.o whale.o xpm-ximage.o atlantis: atlantis.o $(ATLANTIS_OBJS) $(CC_HACK) -o $@ $@.o $(ATLANTIS_OBJS) $(XPM_LIBS) ATUNNEL_OBJS = $(HACK_OBJS) tunnel_draw.o xpm-ximage.o atunnel: atunnel.o $(ATUNNEL_OBJS) $(CC_HACK) -o $@ $@.o $(ATUNNEL_OBJS) $(XPM_LIBS) cage: cage.o xpm-ximage.o $(HACK_OBJS) $(CC_HACK) -o $@ $@.o xpm-ximage.o $(HACK_OBJS) $(XPM_LIBS) FLURRY_OBJS_1 = flurry-smoke.o flurry-spark.o flurry-star.o flurry-texture.o FLURRY_OBJS = $(FLURRY_OBJS_1) $(HACK_OBJS) flurry: flurry.o $(FLURRY_OBJS) $(CC_HACK) -o $@ $@.o $(FLURRY_OBJS) $(HACK_LIBS) -lm GEARS_OBJS_1=normals.o involute.o GEARS_OBJS=$(GEARS_OBJS_1) $(HACK_TRACK_OBJS) gears: gears.o tube.o $(GEARS_OBJS) $(CC_HACK) -o $@ $@.o tube.o $(GEARS_OBJS) $(HACK_LIBS) 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 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) morph3d: morph3d.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) \ $(HACK_LIBS) $(XPM_LIBS) SPROINGIES = sproingiewrap.o gllist.o \ s1_1.o s1_2.o s1_3.o s1_4.o s1_5.o s1_6.o s1_b.o sproingies: sproingies.o $(HACK_OBJS) $(SPROINGIES) $(CC_HACK) -o $@ $@.o $(HACK_OBJS) $(SPROINGIES) $(HACK_LIBS) LAMENTOBJS = gllist.o lament_model.o $(HACK_TRACK_OBJS) xpm-ximage.o normals.o lament: lament.o $(LAMENTOBJS) $(CC_HACK) -o $@ $@.o $(LAMENTOBJS) $(XPM_LIBS) lament_dxf:: ./dxf2gl.pl --smooth --layers lament.dxf lament_model.c B3D_OBJS = b_sphere.o b_draw.o b_lockglue.o $(HACK_OBJS) bubble3d: bubble3d.o $(B3D_OBJS) $(CC_HACK) -o $@ $@.o $(B3D_OBJS) $(HACK_LIBS) PLANET_OBJS=sphere.o xpm-ximage.o $(HACK_TRACK_OBJS) glplanet: glplanet.o $(PLANET_OBJS) $(CC_HACK) -o $@ $@.o $(PLANET_OBJS) $(XPM_LIBS) dymaxionmap: dymaxionmap.o normals.o $(PLANET_OBJS) $(CC_HACK) -o $@ $@.o normals.o $(PLANET_OBJS) $(XPM_LIBS) pulsar: pulsar.o $(HACK_OBJS) xpm-ximage.o $(CC_HACK) -o $@ $@.o $(HACK_OBJS) xpm-ximage.o $(XPM_LIBS) EXTRUSION_OBJS=extrusion.o extrusion-helix2.o extrusion-helix3.o \ extrusion-helix4.o extrusion-joinoffset.o extrusion-screw.o \ extrusion-taper.o extrusion-twistoid.o xpm-ximage.o \ $(HACK_TRACK_OBJS) extrusion: $(EXTRUSION_OBJS) $(CC_HACK) -o $@ $(EXTRUSION_OBJS) $(XPM_LIBS) $(GLE_LIBS) sierpinski3d: sierpinski3d.o $(HACK_TRACK_OBJS) $(CC_HACK) -o $@ $@.o $(HACK_TRACK_OBJS) $(HACK_LIBS) gflux: gflux.o $(HACK_TRACK_GRAB_OBJS) $(CC_HACK) -o $@ $@.o $(HACK_TRACK_GRAB_OBJS) $(HACK_LIBS) SW_OBJS=starwars.o glut_stroke.o glut_swidth.o $(TEXT) $(HACK_OBJS) starwars: $(SW_OBJS) $(CC_HACK) -o $@ $(SW_OBJS) $(HACK_LIBS) $(TEXT_LIBS) 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) DB_OBJS=sphere.o tube.o $(HACK_TRACK_OBJS) dangerball: dangerball.o $(DB_OBJS) $(CC_HACK) -o $@ $@.o $(DB_OBJS) $(HACK_LIBS) circuit: circuit.o $(HACK_OBJS) $(CC_HACK) -o $@ $@.o $(HACK_OBJS) $(HACK_LIBS) menger: menger.o $(HACK_TRACK_OBJS) $(CC_HACK) -o $@ $@.o $(HACK_TRACK_OBJS) $(HACK_LIBS) engine: engine.o $(HACK_TRACK_OBJS) $(CC_HACK) -o $@ $@.o $(HACK_TRACK_OBJS) $(HACK_LIBS) flipscreen3d: flipscreen3d.o $(HACK_TRACK_GRAB_OBJS) $(CC_HACK) -o $@ $@.o $(HACK_TRACK_GRAB_OBJS) $(HACK_LIBS) glsnake: glsnake.o $(HACK_OBJS) $(CC_HACK) -o $@ $@.o $(HACK_OBJS) $(HACK_LIBS) boxed: boxed.o $(HACK_OBJS) $(CC_HACK) -o $@ $@.o $(HACK_OBJS) $(HACK_LIBS) glforestfire: glforestfire.o xpm-ximage.o $(HACK_TRACK_OBJS) $(CC_HACK) -o $@ $@.o xpm-ximage.o $(HACK_TRACK_OBJS) $(XPM_LIBS) sballs: sballs.o xpm-ximage.o $(HACK_TRACK_OBJS) $(CC_HACK) -o $@ $@.o xpm-ximage.o $(HACK_TRACK_OBJS) $(XPM_LIBS) cubenetic: cubenetic.o $(HACK_TRACK_OBJS) $(CC_HACK) -o $@ $@.o $(HACK_TRACK_OBJS) $(HACK_LIBS) spheremonics: spheremonics.o normals.o $(HACK_TRACK_OBJS) $(CC_HACK) -o $@ $@.o normals.o $(HACK_TRACK_OBJS) $(HACK_LIBS) LL_OBJS=marching.o xpm-ximage.o normals.o $(HACK_TRACK_OBJS) lavalite: lavalite.o $(LL_OBJS) $(CC_HACK) -o $@ $@.o $(LL_OBJS) $(XPM_LIBS) queens: queens.o chessmodels.o $(HACK_TRACK_OBJS) $(CC_HACK) -o $@ $@.o chessmodels.o $(HACK_TRACK_OBJS) $(HACK_LIBS) endgame: endgame.o chessmodels.o $(HACK_TRACK_OBJS) $(CC_HACK) -o $@ $@.o chessmodels.o $(HACK_TRACK_OBJS) $(HACK_LIBS) glblur: glblur.o $(HACK_TRACK_OBJS) $(CC_HACK) -o $@ $@.o $(HACK_TRACK_OBJS) $(HACK_LIBS) TOAST_OBJS=\ toaster.o toaster_base.o toaster_handle.o toaster_handle2.o \ toaster_jet.o toaster_knob.o toaster_slots.o toaster_wing.o \ toast.o toast2.o \ flyingtoasters.o gllist.o xpm-ximage.o $(HACK_TRACK_OBJS) flyingtoasters: $(TOAST_OBJS) $(CC_HACK) -o $@ $(TOAST_OBJS) $(XPM_LIBS) toaster_dxf:: @set -e ; \ for f in \ toaster.dxf \ toaster_base.dxf \ toaster_handle.dxf \ toaster_handle2.dxf \ toaster_jet.dxf \ toaster_knob.dxf \ toaster_slots.dxf \ toaster_wing.dxf \ toast.dxf \ toast2.dxf \ ; do \ f2=`echo $$f | sed 's/dxf$$/c/'` ; \ ./dxf2gl.pl --normalize --smooth $$f $$f2 ; \ done ; \ COW_OBJS=\ cow_face.o cow_hide.o cow_hoofs.o cow_horns.o cow_tail.o cow_udder.o \ bouncingcow.o gllist.o xpm-ximage.o $(HACK_TRACK_OBJS) bouncingcow: $(COW_OBJS) $(CC_HACK) -o $@ $(COW_OBJS) $(XPM_LIBS) ROBO_OBJS=\ robot.o robot-wireframe.o gllist.o xpm-ximage.o sphere.o \ winduprobot.o $(GEARS_OBJS_1) $(TEXT) $(HACK_TRACK_OBJS) winduprobot: $(ROBO_OBJS) $(CC_HACK) -o $@ $(ROBO_OBJS) $(XPM_LIBS) $(TEXT_LIBS) winduprobot_dxf:: ./dxf2gl.pl --smooth --layers robot.dxf robot.c ./dxf2gl.pl --wireframe robot-wireframe.dxf robot-wireframe.c glslideshow: glslideshow.o $(HACK_GRAB_OBJS) $(CC_HACK) -o $@ $@.o $(HACK_GRAB_OBJS) $(HACK_LIBS) jigglypuff: jigglypuff.o xpm-ximage.o $(HACK_TRACK_OBJS) $(CC_HACK) -o $@ $@.o xpm-ximage.o $(HACK_TRACK_OBJS) $(XPM_LIBS) klein: klein.o $(HACK_TRACK_OBJS) $(CC_HACK) -o $@ $@.o $(HACK_TRACK_OBJS) $(HACK_LIBS) surfaces: surfaces.o $(HACK_TRACK_OBJS) $(CC_HACK) -o $@ $@.o $(HACK_TRACK_OBJS) $(HACK_LIBS) hypertorus: hypertorus.o $(HACK_TRACK_OBJS) $(CC_HACK) -o $@ $@.o $(HACK_TRACK_OBJS) $(HACK_LIBS) projectiveplane: projectiveplane.o $(HACK_TRACK_OBJS) $(CC_HACK) -o $@ $@.o $(HACK_TRACK_OBJS) $(HACK_LIBS) romanboy: romanboy.o $(HACK_TRACK_OBJS) $(CC_HACK) -o $@ $@.o $(HACK_TRACK_OBJS) $(HACK_LIBS) glmatrix: glmatrix.o xpm-ximage.o $(HACK_OBJS) $(CC_HACK) -o $@ $@.o xpm-ximage.o $(HACK_OBJS) $(XPM_LIBS) cubestorm: cubestorm.o $(HACK_TRACK_OBJS) $(CC_HACK) -o $@ $@.o $(HACK_TRACK_OBJS) $(HACK_LIBS) glknots: glknots.o tube.o $(HACK_TRACK_OBJS) $(CC_HACK) -o $@ $@.o tube.o $(HACK_TRACK_OBJS) $(HACK_LIBS) blocktube: blocktube.o xpm-ximage.o $(HACK_OBJS) $(CC_HACK) -o $@ $@.o xpm-ximage.o $(HACK_OBJS) $(XPM_LIBS) flipflop: flipflop.o $(HACK_TRACK_GRAB_OBJS) $(CC_HACK) -o $@ $@.o $(HACK_TRACK_GRAB_OBJS) $(HACK_LIBS) antspotlight: antspotlight.o sphere.o $(HACK_TRACK_GRAB_OBJS) $(CC_HACK) -o $@ $@.o sphere.o $(HACK_TRACK_GRAB_OBJS) $(HACK_LIBS) polytopes: polytopes.o $(HACK_TRACK_OBJS) $(CC_HACK) -o $@ $@.o $(HACK_TRACK_OBJS) $(HACK_LIBS) STONER_OBJS=stonerview-move.o stonerview-osc.o stonerview-view.o stonerview: stonerview.o $(STONER_OBJS) $(HACK_TRACK_OBJS) $(CC_HACK) -o $@ $@.o $(STONER_OBJS) $(HACK_TRACK_OBJS) $(HACK_LIBS) molecules.h: @echo "building molecules.h from $(HACK_SRC)/images/molecules/*.pdb"; \ UTILS_SRC="$(UTILS_SRC)" \ $(srcdir)/molecules.sh molecules.h $(HACK_SRC)/images/molecules/*.pdb MOLECULE_OBJS=sphere.o tube.o $(HACK_TRACK_OBJS) molecule.o: molecules.h molecule: molecule.o $(MOLECULE_OBJS) $(CC_HACK) -o $@ $@.o $(MOLECULE_OBJS) $(HACK_LIBS) gleidescope: gleidescope.o xpm-ximage.o $(HACK_GRAB_OBJS) $(CC_HACK) -o $@ $@.o xpm-ximage.o $(HACK_GRAB_OBJS) $(XPM_LIBS) mirrorblob: mirrorblob.o $(HACK_TRACK_GRAB_OBJS) $(CC_HACK) -o $@ $@.o $(HACK_TRACK_GRAB_OBJS) $(XPM_LIBS) blinkbox: blinkbox.o sphere.o $(HACK_OBJS) $(CC_HACK) -o $@ $@.o sphere.o $(HACK_OBJS) $(HACK_LIBS) noof: noof.o $(HACK_OBJS) $(CC_HACK) -o $@ $@.o $(HACK_OBJS) $(HACK_LIBS) PH_OBJS=polyhedra-gl.o normals.o teapot.o $(HACK_TRACK_OBJS) polyhedra: polyhedra.o $(PH_OBJS) $(CC_HACK) -o $@ $@.o $(PH_OBJS) $(HACK_LIBS) antinspect: antinspect.o sphere.o $(HACK_TRACK_OBJS) $(CC_HACK) -o $@ $@.o sphere.o $(HACK_TRACK_OBJS) $(HACK_LIBS) providence: providence.o $(HACK_TRACK_OBJS) $(CC_HACK) -o $@ $@.o $(HACK_TRACK_OBJS) $(HACK_LIBS) pinion: pinion.o $(GEARS_OBJS) $(CC_HACK) -o $@ $@.o $(GEARS_OBJS) $(HACK_LIBS) moebiusgears: moebiusgears.o $(GEARS_OBJS) $(CC_HACK) -o $@ $@.o $(GEARS_OBJS) $(HACK_LIBS) boing: boing.o normals.o $(HACK_TRACK_OBJS) $(CC_HACK) -o $@ $@.o normals.o $(HACK_TRACK_OBJS) $(HACK_LIBS) carousel: carousel.o $(HACK_TRACK_GRAB_OBJS) $(CC_HACK) -o $@ $@.o $(HACK_TRACK_GRAB_OBJS) $(HACK_LIBS) fliptext: fliptext.o $(TEXT) $(HACK_OBJS) $(CC_HACK) -o $@ $@.o $(TEXT) $(HACK_OBJS) $(HACK_LIBS) $(TEXT_LIBS) antmaze: antmaze.o sphere.o tube.o $(HACK_TRACK_OBJS) $(CC_HACK) -o $@ $@.o sphere.o tube.o $(HACK_TRACK_OBJS) $(HACK_LIBS) TANGRAM_OBJS=tangram_shapes.o $(HACK_OBJS) tangram: tangram.o $(TANGRAM_OBJS) $(CC_HACK) -o $@ $@.o $(TANGRAM_OBJS) $(HACK_LIBS) crackberg: crackberg.o $(HACK_OBJS) $(CC_HACK) -o $@ $@.o $(HACK_OBJS) $(HACK_LIBS) glhanoi: glhanoi.o $(HACK_TRACK_OBJS) $(CC_HACK) -o $@ $@.o $(HACK_TRACK_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) $(CC_HACK) -o $@ $@.o $(TIMETUNNEL_OBJS) $(XPM_LIBS) JUGG_OBJS=sphere.o tube.o $(HACK_TRACK_OBJS) juggler3d: juggler3d.o $(JUGG_OBJS) $(CC_HACK) -o $@ $@.o $(JUGG_OBJS) $(HACK_LIBS) dnalogo: dnalogo.o tube.o sphere.o normals.o $(HACK_TRACK_OBJS) $(CC_HACK) -o $@ $@.o tube.o sphere.o normals.o $(HACK_TRACK_OBJS) $(HACK_LIBS) topblock: topblock.o sphere.o tube.o $(HACK_TRACK_OBJS) $(CC_HACK) -o $@ $@.o sphere.o tube.o $(HACK_TRACK_OBJS) $(HACK_LIBS) SCHOOL_OBJS=glschool.o glschool_alg.o glschool_gl.o \ sphere.o tube.o normals.o $(HACK_OBJS) glschool: $(SCHOOL_OBJS) $(CC_HACK) -o $@ $(SCHOOL_OBJS) $(HACK_LIBS) glcells: glcells.o $(HACK_OBJS) $(CC_HACK) -o $@ $@.o $(HACK_OBJS) $(HACK_LIBS) voronoi: voronoi.o $(HACK_OBJS) $(CC_HACK) -o $@ $@.o $(HACK_OBJS) $(HACK_LIBS) lockward: lockward.o $(HACK_OBJS) $(CC_HACK) -o $@ $@.o $(HACK_OBJS) $(HACK_LIBS) cubicgrid: cubicgrid.o $(HACK_TRACK_OBJS) $(CC_HACK) -o $@ $@.o $(HACK_TRACK_OBJS) $(HACK_LIBS) hypnowheel: hypnowheel.o $(HACK_TRACK_OBJS) $(CC_HACK) -o $@ $@.o $(HACK_TRACK_OBJS) $(HACK_LIBS) TENTACLE_OBJS=normals.o xpm-ximage.o $(HACK_TRACK_OBJS) skytentacles: skytentacles.o $(TENTACLE_OBJS) $(CC_HACK) -o $@ $@.o $(TENTACLE_OBJS) $(XPM_LIBS) SONAR_OBJS=sonar-sim.o sonar-icmp.o $(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: jigsaw.o $(JIGSAW_OBJS) $(CC_HACK) -o $@ $@.o $(JIGSAW_OBJS) $(HACK_LIBS) PHOTOPILE_OBJS=dropshadow.o $(HACK_GRAB_OBJS) photopile: photopile.o $(PHOTOPILE_OBJS) $(CC_HACK) -o $@ $@.o $(PHOTOPILE_OBJS) $(HACK_LIBS) rubikblocks: rubikblocks.o $(HACK_TRACK_OBJS) $(CC_HACK) -o $@ $@.o $(HACK_TRACK_OBJS) $(HACK_LIBS) HILB_OBJS=sphere.o tube.o $(HACK_TRACK_OBJS) hilbert: hilbert.o $(HILB_OBJS) $(CC_HACK) -o $@ $@.o $(HILB_OBJS) $(HACK_LIBS) CCUBE_OBJS=companion.o companion_quad.o companion_disc.o companion_heart.o \ gllist.o $(HACK_TRACK_OBJS) companioncube: $(CCUBE_OBJS) $(CC_HACK) -o $@ $(CCUBE_OBJS) $(HACK_LIBS) TBIT_OBJS=tronbit.o tronbit_idle1.o tronbit_idle2.o tronbit_no.o tronbit_yes.o\ gllist.o $(HACK_TRACK_OBJS) tronbit: $(TBIT_OBJS) $(CC_HACK) -o $@ $(TBIT_OBJS) $(HACK_LIBS) KALEIDOCYCLE_OBJS=kaleidocycle.o normals.o $(HACK_TRACK_OBJS) kaleidocycle: $(KALEIDOCYCLE_OBJS) $(CC_HACK) -o $@ $(KALEIDOCYCLE_OBJS) $(HACK_LIBS) quasicrystal: quasicrystal.o $(HACK_TRACK_OBJS) $(CC_HACK) -o $@ $@.o $(HACK_TRACK_OBJS) $(HACK_LIBS) unknownpleasures: unknownpleasures.o $(HACK_TRACK_OBJS) $(CC_HACK) -o $@ $@.o $(HACK_TRACK_OBJS) $(HACK_LIBS) geodesic: geodesic.o normals.o $(HACK_TRACK_OBJS) $(CC_HACK) -o $@ $@.o normals.o $(HACK_TRACK_OBJS) $(HACK_LIBS) geodesicgears: geodesicgears.o $(GEARS_OBJS) $(CC_HACK) -o $@ $@.o $(GEARS_OBJS) $(HACK_LIBS) cityflow: cityflow.o $(HACK_TRACK_OBJS) $(CC_HACK) -o $@ $@.o $(HACK_TRACK_OBJS) $(HACK_LIBS) splitflap_dxf:: ./dxf2gl.pl --normalize --smooth --layers splitflap.dxf splitflap_obj.c FLAP_OBJS=splitflap_obj.o gllist.o splitflap.o $(TEXT) $(HACK_TRACK_OBJS) splitflap: $(FLAP_OBJS) $(CC_HACK) -o $@ $(FLAP_OBJS) $(XPM_LIBS) $(TEXT_LIBS) unicrud: unicrud.o $(HACK_TRACK_OBJS) $(CC_HACK) -o $@ $@.o $(HACK_TRACK_OBJS) $(HACK_LIBS) ES_OBJS=xpm-ximage.o $(HACK_TRACK_OBJS) energystream: energystream.o $(ES_OBJS) $(CC_HACK) -o $@ $@.o $(ES_OBJS) $(XPM_LIBS) $(HACK_LIBS) raverhoop: raverhoop.o $(HACK_TRACK_OBJS) $(CC_HACK) -o $@ $@.o $(HACK_TRACK_OBJS) $(HACK_LIBS) HSTAT_OBJS=sphere.o normals.o $(HACK_TRACK_OBJS) hydrostat: hydrostat.o $(HSTAT_OBJS) $(CC_HACK) -o $@ $@.o $(HSTAT_OBJS) $(HACK_LIBS) discoball: discoball.o $(HACK_TRACK_OBJS) $(CC_HACK) -o $@ $@.o $(HACK_TRACK_OBJS) $(HACK_LIBS) cubetwist: cubetwist.o $(HACK_TRACK_OBJS) $(CC_HACK) -o $@ $@.o $(HACK_TRACK_OBJS) $(HACK_LIBS) cubestack: cubestack.o $(HACK_TRACK_OBJS) $(CC_HACK) -o $@ $@.o $(HACK_TRACK_OBJS) $(HACK_LIBS) splodesic: splodesic.o $(HACK_TRACK_OBJS) $(CC_HACK) -o $@ $@.o $(HACK_TRACK_OBJS) $(HACK_LIBS) hexstrut: hexstrut.o normals.o $(HACK_TRACK_OBJS) $(CC_HACK) -o $@ $@.o normals.o $(HACK_TRACK_OBJS) $(HACK_LIBS) ############################################################################## # # DO NOT DELETE: updated by make distdepend antinspect.o: ../../config.h antinspect.o: $(HACK_SRC)/fps.h antinspect.o: $(srcdir)/gltrackball.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 antinspect.o: $(UTILS_SRC)/resources.h antinspect.o: $(UTILS_SRC)/usleep.h antinspect.o: $(UTILS_SRC)/visual.h antinspect.o: $(UTILS_SRC)/xshm.h antinspect.o: $(UTILS_SRC)/yarandom.h antinspect.o: $(HACK_SRC)/xlockmoreI.h antinspect.o: $(HACK_SRC)/xlockmore.h antmaze.o: $(srcdir)/ants.h antmaze.o: ../../config.h antmaze.o: $(HACK_SRC)/fps.h antmaze.o: $(srcdir)/gltrackball.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 antmaze.o: $(UTILS_SRC)/resources.h antmaze.o: $(UTILS_SRC)/usleep.h antmaze.o: $(UTILS_SRC)/visual.h antmaze.o: $(UTILS_SRC)/xshm.h antmaze.o: $(UTILS_SRC)/yarandom.h antmaze.o: $(HACK_SRC)/xlockmoreI.h antmaze.o: $(HACK_SRC)/xlockmore.h antspotlight.o: $(srcdir)/ants.h antspotlight.o: ../../config.h antspotlight.o: $(HACK_SRC)/fps.h antspotlight.o: $(srcdir)/gltrackball.h antspotlight.o: $(srcdir)/grab-ximage.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 antspotlight.o: $(UTILS_SRC)/resources.h antspotlight.o: $(UTILS_SRC)/usleep.h antspotlight.o: $(UTILS_SRC)/visual.h antspotlight.o: $(UTILS_SRC)/xshm.h antspotlight.o: $(UTILS_SRC)/yarandom.h antspotlight.o: $(HACK_SRC)/xlockmoreI.h antspotlight.o: $(HACK_SRC)/xlockmore.h 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: $(HACK_SRC)/screenhackI.h atlantis.o: $(UTILS_SRC)/colors.h atlantis.o: $(UTILS_SRC)/grabscreen.h atlantis.o: $(UTILS_SRC)/hsv.h atlantis.o: $(UTILS_SRC)/resources.h atlantis.o: $(UTILS_SRC)/usleep.h atlantis.o: $(UTILS_SRC)/visual.h atlantis.o: $(UTILS_SRC)/xshm.h atlantis.o: $(UTILS_SRC)/yarandom.h atlantis.o: $(HACK_SRC)/xlockmoreI.h atlantis.o: $(HACK_SRC)/xlockmore.h atlantis.o: $(srcdir)/xpm-ximage.h atunnel.o: ../../config.h atunnel.o: $(HACK_SRC)/fps.h atunnel.o: $(HACK_SRC)/images/tunnel0.xpm atunnel.o: $(HACK_SRC)/images/tunnel1.xpm 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: $(HACK_SRC)/screenhackI.h atunnel.o: $(srcdir)/tunnel_draw.h atunnel.o: $(UTILS_SRC)/colors.h atunnel.o: $(UTILS_SRC)/grabscreen.h atunnel.o: $(UTILS_SRC)/hsv.h atunnel.o: $(UTILS_SRC)/resources.h atunnel.o: $(UTILS_SRC)/usleep.h atunnel.o: $(UTILS_SRC)/visual.h atunnel.o: $(UTILS_SRC)/xshm.h atunnel.o: $(UTILS_SRC)/yarandom.h atunnel.o: $(HACK_SRC)/xlockmoreI.h atunnel.o: $(HACK_SRC)/xlockmore.h 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: $(HACK_SRC)/screenhackI.h b_draw.o: $(UTILS_SRC)/colors.h b_draw.o: $(UTILS_SRC)/grabscreen.h b_draw.o: $(UTILS_SRC)/hsv.h b_draw.o: $(UTILS_SRC)/resources.h b_draw.o: $(UTILS_SRC)/usleep.h b_draw.o: $(UTILS_SRC)/visual.h b_draw.o: $(UTILS_SRC)/xshm.h 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: $(HACK_SRC)/screenhackI.h blinkbox.o: $(srcdir)/sphere.h blinkbox.o: $(UTILS_SRC)/colors.h blinkbox.o: $(UTILS_SRC)/grabscreen.h blinkbox.o: $(UTILS_SRC)/hsv.h blinkbox.o: $(UTILS_SRC)/resources.h blinkbox.o: $(UTILS_SRC)/usleep.h blinkbox.o: $(UTILS_SRC)/visual.h blinkbox.o: $(UTILS_SRC)/xshm.h blinkbox.o: $(UTILS_SRC)/yarandom.h blinkbox.o: $(HACK_SRC)/xlockmoreI.h 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: $(HACK_SRC)/screenhackI.h b_lockglue.o: $(UTILS_SRC)/colors.h b_lockglue.o: $(UTILS_SRC)/grabscreen.h b_lockglue.o: $(UTILS_SRC)/hsv.h b_lockglue.o: $(UTILS_SRC)/resources.h b_lockglue.o: $(UTILS_SRC)/usleep.h b_lockglue.o: $(UTILS_SRC)/visual.h b_lockglue.o: $(UTILS_SRC)/xshm.h b_lockglue.o: $(UTILS_SRC)/yarandom.h b_lockglue.o: $(HACK_SRC)/xlockmoreI.h 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: $(HACK_SRC)/screenhackI.h blocktube.o: $(UTILS_SRC)/colors.h blocktube.o: $(UTILS_SRC)/grabscreen.h blocktube.o: $(UTILS_SRC)/hsv.h blocktube.o: $(UTILS_SRC)/resources.h blocktube.o: $(UTILS_SRC)/usleep.h blocktube.o: $(UTILS_SRC)/visual.h blocktube.o: $(UTILS_SRC)/xshm.h blocktube.o: $(UTILS_SRC)/yarandom.h blocktube.o: $(HACK_SRC)/xlockmoreI.h blocktube.o: $(HACK_SRC)/xlockmore.h blocktube.o: $(srcdir)/xpm-ximage.h boing.o: ../../config.h boing.o: $(HACK_SRC)/fps.h boing.o: $(srcdir)/gltrackball.h boing.o: $(HACK_SRC)/screenhackI.h boing.o: $(UTILS_SRC)/colors.h boing.o: $(UTILS_SRC)/grabscreen.h boing.o: $(UTILS_SRC)/hsv.h boing.o: $(UTILS_SRC)/resources.h boing.o: $(UTILS_SRC)/usleep.h boing.o: $(UTILS_SRC)/visual.h boing.o: $(UTILS_SRC)/xshm.h boing.o: $(UTILS_SRC)/yarandom.h boing.o: $(HACK_SRC)/xlockmoreI.h boing.o: $(HACK_SRC)/xlockmore.h bouncingcow.o: ../../config.h bouncingcow.o: $(HACK_SRC)/fps.h bouncingcow.o: $(srcdir)/gllist.h bouncingcow.o: $(srcdir)/gltrackball.h bouncingcow.o: $(srcdir)/rotator.h bouncingcow.o: $(HACK_SRC)/screenhackI.h bouncingcow.o: $(UTILS_SRC)/colors.h bouncingcow.o: $(UTILS_SRC)/grabscreen.h bouncingcow.o: $(UTILS_SRC)/hsv.h bouncingcow.o: $(UTILS_SRC)/resources.h bouncingcow.o: $(UTILS_SRC)/usleep.h bouncingcow.o: $(UTILS_SRC)/visual.h bouncingcow.o: $(UTILS_SRC)/xshm.h bouncingcow.o: $(UTILS_SRC)/yarandom.h bouncingcow.o: $(HACK_SRC)/xlockmoreI.h bouncingcow.o: $(HACK_SRC)/xlockmore.h bouncingcow.o: $(srcdir)/xpm-ximage.h boxed.o: $(srcdir)/boxed.h boxed.o: ../../config.h boxed.o: $(HACK_SRC)/fps.h boxed.o: $(HACK_SRC)/screenhackI.h boxed.o: $(UTILS_SRC)/colors.h boxed.o: $(UTILS_SRC)/grabscreen.h boxed.o: $(UTILS_SRC)/hsv.h boxed.o: $(UTILS_SRC)/resources.h boxed.o: $(UTILS_SRC)/usleep.h boxed.o: $(UTILS_SRC)/visual.h boxed.o: $(UTILS_SRC)/xshm.h boxed.o: $(UTILS_SRC)/yarandom.h boxed.o: $(HACK_SRC)/xlockmoreI.h 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: $(HACK_SRC)/screenhackI.h b_sphere.o: $(UTILS_SRC)/colors.h b_sphere.o: $(UTILS_SRC)/grabscreen.h b_sphere.o: $(UTILS_SRC)/hsv.h b_sphere.o: $(UTILS_SRC)/resources.h b_sphere.o: $(UTILS_SRC)/usleep.h b_sphere.o: $(UTILS_SRC)/visual.h b_sphere.o: $(UTILS_SRC)/xshm.h b_sphere.o: $(UTILS_SRC)/yarandom.h b_sphere.o: $(HACK_SRC)/xlockmoreI.h bubble3d.o: $(srcdir)/bubble3d.h bubble3d.o: ../../config.h bubble3d.o: $(HACK_SRC)/fps.h bubble3d.o: $(HACK_SRC)/screenhackI.h bubble3d.o: $(UTILS_SRC)/colors.h bubble3d.o: $(UTILS_SRC)/grabscreen.h bubble3d.o: $(UTILS_SRC)/hsv.h bubble3d.o: $(UTILS_SRC)/resources.h bubble3d.o: $(UTILS_SRC)/usleep.h bubble3d.o: $(UTILS_SRC)/visual.h 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 cage.o: ../../config.h cage.o: $(HACK_SRC)/fps.h cage.o: $(HACK_SRC)/images/wood.xpm cage.o: $(HACK_SRC)/screenhackI.h cage.o: $(UTILS_SRC)/colors.h cage.o: $(UTILS_SRC)/grabscreen.h cage.o: $(UTILS_SRC)/hsv.h cage.o: $(UTILS_SRC)/resources.h cage.o: $(UTILS_SRC)/usleep.h cage.o: $(UTILS_SRC)/visual.h 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)/rotator.h carousel.o: $(HACK_SRC)/screenhackI.h carousel.o: $(srcdir)/texfont.h carousel.o: $(UTILS_SRC)/colors.h carousel.o: $(UTILS_SRC)/grabscreen.h carousel.o: $(UTILS_SRC)/hsv.h carousel.o: $(UTILS_SRC)/resources.h carousel.o: $(UTILS_SRC)/usleep.h carousel.o: $(UTILS_SRC)/visual.h carousel.o: $(UTILS_SRC)/xshm.h 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 circuit.o: ../../config.h circuit.o: $(HACK_SRC)/fps.h circuit.o: $(HACK_SRC)/screenhackI.h circuit.o: $(srcdir)/texfont.h circuit.o: $(UTILS_SRC)/colors.h circuit.o: $(UTILS_SRC)/grabscreen.h circuit.o: $(UTILS_SRC)/hsv.h circuit.o: $(UTILS_SRC)/resources.h circuit.o: $(UTILS_SRC)/usleep.h circuit.o: $(UTILS_SRC)/visual.h circuit.o: $(UTILS_SRC)/xshm.h circuit.o: $(UTILS_SRC)/yarandom.h circuit.o: $(HACK_SRC)/xlockmoreI.h circuit.o: $(HACK_SRC)/xlockmore.h cityflow.o: ../../config.h cityflow.o: $(HACK_SRC)/fps.h cityflow.o: $(srcdir)/gltrackball.h cityflow.o: $(HACK_SRC)/screenhackI.h cityflow.o: $(UTILS_SRC)/colors.h cityflow.o: $(UTILS_SRC)/grabscreen.h cityflow.o: $(UTILS_SRC)/hsv.h cityflow.o: $(UTILS_SRC)/resources.h cityflow.o: $(UTILS_SRC)/usleep.h cityflow.o: $(UTILS_SRC)/visual.h cityflow.o: $(UTILS_SRC)/xshm.h cityflow.o: $(UTILS_SRC)/yarandom.h cityflow.o: $(HACK_SRC)/xlockmoreI.h cityflow.o: $(HACK_SRC)/xlockmore.h companion_disc.o: ../../config.h companion_disc.o: $(srcdir)/gllist.h companion_heart.o: ../../config.h companion_heart.o: $(srcdir)/gllist.h companion.o: ../../config.h companion.o: $(HACK_SRC)/fps.h companion.o: $(srcdir)/gllist.h companion.o: $(srcdir)/gltrackball.h companion.o: $(srcdir)/rotator.h companion.o: $(HACK_SRC)/screenhackI.h companion.o: $(UTILS_SRC)/colors.h companion.o: $(UTILS_SRC)/grabscreen.h companion.o: $(UTILS_SRC)/hsv.h companion.o: $(UTILS_SRC)/resources.h companion.o: $(UTILS_SRC)/usleep.h companion.o: $(UTILS_SRC)/visual.h companion.o: $(UTILS_SRC)/xshm.h 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 cow_face.o: ../../config.h cow_face.o: $(srcdir)/gllist.h cow_hide.o: ../../config.h cow_hide.o: $(srcdir)/gllist.h cow_hoofs.o: ../../config.h cow_hoofs.o: $(srcdir)/gllist.h cow_horns.o: ../../config.h cow_horns.o: $(srcdir)/gllist.h cow_tail.o: ../../config.h cow_tail.o: $(srcdir)/gllist.h cow_udder.o: ../../config.h cow_udder.o: $(srcdir)/gllist.h crackberg.o: ../../config.h crackberg.o: $(HACK_SRC)/fps.h crackberg.o: $(HACK_SRC)/screenhackI.h crackberg.o: $(UTILS_SRC)/colors.h crackberg.o: $(UTILS_SRC)/grabscreen.h crackberg.o: $(UTILS_SRC)/hsv.h crackberg.o: $(UTILS_SRC)/resources.h crackberg.o: $(UTILS_SRC)/usleep.h crackberg.o: $(UTILS_SRC)/visual.h crackberg.o: $(UTILS_SRC)/xshm.h crackberg.o: $(UTILS_SRC)/yarandom.h 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: $(HACK_SRC)/screenhackI.h cube21.o: $(UTILS_SRC)/colors.h cube21.o: $(UTILS_SRC)/grabscreen.h cube21.o: $(UTILS_SRC)/hsv.h cube21.o: $(UTILS_SRC)/resources.h cube21.o: $(UTILS_SRC)/usleep.h cube21.o: $(UTILS_SRC)/visual.h cube21.o: $(UTILS_SRC)/xshm.h cube21.o: $(UTILS_SRC)/yarandom.h cube21.o: $(HACK_SRC)/xlockmoreI.h cube21.o: $(HACK_SRC)/xlockmore.h cubenetic.o: ../../config.h cubenetic.o: $(HACK_SRC)/fps.h cubenetic.o: $(srcdir)/gltrackball.h cubenetic.o: $(srcdir)/rotator.h cubenetic.o: $(HACK_SRC)/screenhackI.h cubenetic.o: $(UTILS_SRC)/colors.h cubenetic.o: $(UTILS_SRC)/grabscreen.h cubenetic.o: $(UTILS_SRC)/hsv.h cubenetic.o: $(UTILS_SRC)/resources.h cubenetic.o: $(UTILS_SRC)/usleep.h cubenetic.o: $(UTILS_SRC)/visual.h cubenetic.o: $(UTILS_SRC)/xshm.h cubenetic.o: $(UTILS_SRC)/yarandom.h cubenetic.o: $(HACK_SRC)/xlockmoreI.h cubenetic.o: $(HACK_SRC)/xlockmore.h cubestack.o: ../../config.h cubestack.o: $(HACK_SRC)/fps.h cubestack.o: $(srcdir)/gltrackball.h cubestack.o: $(srcdir)/rotator.h cubestack.o: $(HACK_SRC)/screenhackI.h cubestack.o: $(UTILS_SRC)/colors.h cubestack.o: $(UTILS_SRC)/grabscreen.h cubestack.o: $(UTILS_SRC)/hsv.h cubestack.o: $(UTILS_SRC)/resources.h cubestack.o: $(UTILS_SRC)/usleep.h cubestack.o: $(UTILS_SRC)/visual.h cubestack.o: $(UTILS_SRC)/xshm.h cubestack.o: $(UTILS_SRC)/yarandom.h cubestack.o: $(HACK_SRC)/xlockmoreI.h cubestack.o: $(HACK_SRC)/xlockmore.h cubestorm.o: ../../config.h cubestorm.o: $(HACK_SRC)/fps.h cubestorm.o: $(srcdir)/gltrackball.h cubestorm.o: $(srcdir)/rotator.h cubestorm.o: $(HACK_SRC)/screenhackI.h cubestorm.o: $(UTILS_SRC)/colors.h cubestorm.o: $(UTILS_SRC)/grabscreen.h cubestorm.o: $(UTILS_SRC)/hsv.h cubestorm.o: $(UTILS_SRC)/resources.h cubestorm.o: $(UTILS_SRC)/usleep.h cubestorm.o: $(UTILS_SRC)/visual.h cubestorm.o: $(UTILS_SRC)/xshm.h cubestorm.o: $(UTILS_SRC)/yarandom.h cubestorm.o: $(HACK_SRC)/xlockmoreI.h cubestorm.o: $(HACK_SRC)/xlockmore.h cubetwist.o: ../../config.h cubetwist.o: $(HACK_SRC)/fps.h cubetwist.o: $(srcdir)/gltrackball.h cubetwist.o: $(srcdir)/normals.h cubetwist.o: $(srcdir)/rotator.h cubetwist.o: $(HACK_SRC)/screenhackI.h cubetwist.o: $(UTILS_SRC)/colors.h cubetwist.o: $(UTILS_SRC)/grabscreen.h cubetwist.o: $(UTILS_SRC)/hsv.h cubetwist.o: $(UTILS_SRC)/resources.h cubetwist.o: $(UTILS_SRC)/usleep.h cubetwist.o: $(UTILS_SRC)/visual.h cubetwist.o: $(UTILS_SRC)/xshm.h cubetwist.o: $(UTILS_SRC)/yarandom.h cubetwist.o: $(HACK_SRC)/xlockmoreI.h cubetwist.o: $(HACK_SRC)/xlockmore.h cubicgrid.o: ../../config.h cubicgrid.o: $(HACK_SRC)/fps.h cubicgrid.o: $(srcdir)/gltrackball.h cubicgrid.o: $(srcdir)/rotator.h cubicgrid.o: $(HACK_SRC)/screenhackI.h cubicgrid.o: $(UTILS_SRC)/colors.h cubicgrid.o: $(UTILS_SRC)/grabscreen.h cubicgrid.o: $(UTILS_SRC)/hsv.h cubicgrid.o: $(UTILS_SRC)/resources.h cubicgrid.o: $(UTILS_SRC)/usleep.h cubicgrid.o: $(UTILS_SRC)/visual.h cubicgrid.o: $(UTILS_SRC)/xshm.h cubicgrid.o: $(UTILS_SRC)/yarandom.h cubicgrid.o: $(HACK_SRC)/xlockmoreI.h cubicgrid.o: $(HACK_SRC)/xlockmore.h dangerball.o: ../../config.h dangerball.o: $(HACK_SRC)/fps.h dangerball.o: $(srcdir)/gltrackball.h dangerball.o: $(srcdir)/rotator.h dangerball.o: $(HACK_SRC)/screenhackI.h dangerball.o: $(srcdir)/sphere.h dangerball.o: $(srcdir)/tube.h dangerball.o: $(UTILS_SRC)/colors.h dangerball.o: $(UTILS_SRC)/grabscreen.h dangerball.o: $(UTILS_SRC)/hsv.h dangerball.o: $(UTILS_SRC)/resources.h dangerball.o: $(UTILS_SRC)/usleep.h dangerball.o: $(UTILS_SRC)/visual.h dangerball.o: $(UTILS_SRC)/xshm.h dangerball.o: $(UTILS_SRC)/yarandom.h dangerball.o: $(HACK_SRC)/xlockmoreI.h dangerball.o: $(HACK_SRC)/xlockmore.h discoball.o: ../../config.h discoball.o: $(HACK_SRC)/fps.h discoball.o: $(srcdir)/gltrackball.h discoball.o: $(srcdir)/normals.h discoball.o: $(srcdir)/rotator.h discoball.o: $(HACK_SRC)/screenhackI.h discoball.o: $(UTILS_SRC)/colors.h discoball.o: $(UTILS_SRC)/grabscreen.h discoball.o: $(UTILS_SRC)/hsv.h discoball.o: $(UTILS_SRC)/resources.h discoball.o: $(UTILS_SRC)/usleep.h discoball.o: $(UTILS_SRC)/visual.h discoball.o: $(UTILS_SRC)/xshm.h discoball.o: $(UTILS_SRC)/yarandom.h discoball.o: $(HACK_SRC)/xlockmoreI.h discoball.o: $(HACK_SRC)/xlockmore.h dnalogo.o: ../../config.h dnalogo.o: $(HACK_SRC)/fps.h dnalogo.o: $(srcdir)/gltrackball.h dnalogo.o: $(srcdir)/normals.h dnalogo.o: $(srcdir)/rotator.h dnalogo.o: $(HACK_SRC)/screenhackI.h dnalogo.o: $(srcdir)/sphere.h dnalogo.o: $(srcdir)/texfont.h dnalogo.o: $(srcdir)/tube.h dnalogo.o: $(UTILS_SRC)/colors.h dnalogo.o: $(UTILS_SRC)/grabscreen.h dnalogo.o: $(UTILS_SRC)/hsv.h dnalogo.o: $(UTILS_SRC)/resources.h dnalogo.o: $(UTILS_SRC)/usleep.h dnalogo.o: $(UTILS_SRC)/utf8wc.h dnalogo.o: $(UTILS_SRC)/visual.h dnalogo.o: $(UTILS_SRC)/xshm.h dnalogo.o: $(UTILS_SRC)/yarandom.h dnalogo.o: $(HACK_SRC)/xlockmoreI.h dnalogo.o: $(HACK_SRC)/xlockmore.h dolphin.o: $(srcdir)/atlantis.h dolphin.o: ../../config.h dolphin.o: $(HACK_SRC)/fps.h dolphin.o: $(HACK_SRC)/screenhackI.h dolphin.o: $(UTILS_SRC)/colors.h dolphin.o: $(UTILS_SRC)/grabscreen.h dolphin.o: $(UTILS_SRC)/hsv.h 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: $(HACK_SRC)/fps.h dropshadow.o: $(HACK_SRC)/screenhackI.h dropshadow.o: $(UTILS_SRC)/colors.h dropshadow.o: $(UTILS_SRC)/grabscreen.h dropshadow.o: $(UTILS_SRC)/hsv.h dropshadow.o: $(UTILS_SRC)/resources.h dropshadow.o: $(UTILS_SRC)/usleep.h dropshadow.o: $(UTILS_SRC)/visual.h dropshadow.o: $(UTILS_SRC)/xshm.h dropshadow.o: $(UTILS_SRC)/yarandom.h dropshadow.o: $(HACK_SRC)/xlockmoreI.h dymaxionmap.o: ../../config.h dymaxionmap.o: $(HACK_SRC)/fps.h dymaxionmap.o: $(srcdir)/gltrackball.h dymaxionmap.o: $(HACK_SRC)/images/dymaxionmap.xpm dymaxionmap.o: $(HACK_SRC)/images/ground.xpm dymaxionmap.o: $(srcdir)/normals.h dymaxionmap.o: $(srcdir)/rotator.h dymaxionmap.o: $(HACK_SRC)/screenhackI.h dymaxionmap.o: $(srcdir)/sphere.h dymaxionmap.o: $(srcdir)/texfont.h dymaxionmap.o: $(UTILS_SRC)/colors.h dymaxionmap.o: $(UTILS_SRC)/grabscreen.h dymaxionmap.o: $(UTILS_SRC)/hsv.h dymaxionmap.o: $(UTILS_SRC)/resources.h dymaxionmap.o: $(UTILS_SRC)/usleep.h dymaxionmap.o: $(UTILS_SRC)/visual.h dymaxionmap.o: $(UTILS_SRC)/xshm.h dymaxionmap.o: $(UTILS_SRC)/yarandom.h dymaxionmap.o: $(HACK_SRC)/xlockmoreI.h dymaxionmap.o: $(HACK_SRC)/xlockmore.h dymaxionmap.o: $(srcdir)/xpm-ximage.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: $(HACK_SRC)/screenhackI.h endgame.o: $(UTILS_SRC)/colors.h endgame.o: $(UTILS_SRC)/grabscreen.h endgame.o: $(UTILS_SRC)/hsv.h endgame.o: $(UTILS_SRC)/resources.h endgame.o: $(UTILS_SRC)/usleep.h endgame.o: $(UTILS_SRC)/visual.h endgame.o: $(UTILS_SRC)/xshm.h endgame.o: $(UTILS_SRC)/yarandom.h endgame.o: $(HACK_SRC)/xlockmoreI.h endgame.o: $(HACK_SRC)/xlockmore.h energystream.o: ../../config.h energystream.o: $(HACK_SRC)/fps.h energystream.o: $(srcdir)/gltrackball.h energystream.o: $(srcdir)/rotator.h energystream.o: $(HACK_SRC)/screenhackI.h energystream.o: $(UTILS_SRC)/colors.h energystream.o: $(UTILS_SRC)/grabscreen.h energystream.o: $(UTILS_SRC)/hsv.h energystream.o: $(UTILS_SRC)/resources.h energystream.o: $(UTILS_SRC)/usleep.h energystream.o: $(UTILS_SRC)/visual.h energystream.o: $(UTILS_SRC)/xshm.h energystream.o: $(UTILS_SRC)/yarandom.h energystream.o: $(HACK_SRC)/xlockmoreI.h energystream.o: $(HACK_SRC)/xlockmore.h engine.o: ../../config.h engine.o: $(HACK_SRC)/fps.h engine.o: $(srcdir)/gltrackball.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 engine.o: $(UTILS_SRC)/resources.h engine.o: $(UTILS_SRC)/usleep.h engine.o: $(UTILS_SRC)/visual.h engine.o: $(UTILS_SRC)/xshm.h engine.o: $(UTILS_SRC)/yarandom.h engine.o: $(HACK_SRC)/xlockmoreI.h engine.o: $(HACK_SRC)/xlockmore.h extrusion-helix2.o: ../../config.h extrusion-helix2.o: $(srcdir)/extrusion.h extrusion-helix3.o: ../../config.h extrusion-helix3.o: $(srcdir)/extrusion.h extrusion-helix4.o: ../../config.h extrusion-helix4.o: $(srcdir)/extrusion.h extrusion-joinoffset.o: ../../config.h extrusion-joinoffset.o: $(srcdir)/extrusion.h extrusion.o: ../../config.h extrusion.o: $(srcdir)/extrusion.h extrusion.o: $(HACK_SRC)/fps.h extrusion.o: $(srcdir)/gltrackball.h extrusion.o: $(srcdir)/rotator.h extrusion.o: $(HACK_SRC)/screenhackI.h extrusion.o: $(UTILS_SRC)/colors.h extrusion.o: $(UTILS_SRC)/grabscreen.h extrusion.o: $(UTILS_SRC)/hsv.h extrusion.o: $(UTILS_SRC)/resources.h extrusion.o: $(UTILS_SRC)/usleep.h extrusion.o: $(UTILS_SRC)/visual.h extrusion.o: $(UTILS_SRC)/xshm.h extrusion.o: $(UTILS_SRC)/yarandom.h extrusion.o: $(HACK_SRC)/xlockmoreI.h extrusion.o: $(HACK_SRC)/xlockmore.h extrusion.o: $(srcdir)/xpm-ximage.h extrusion-screw.o: ../../config.h extrusion-screw.o: $(srcdir)/extrusion.h extrusion-taper.o: ../../config.h extrusion-taper.o: $(srcdir)/extrusion.h extrusion-twistoid.o: ../../config.h extrusion-twistoid.o: $(srcdir)/extrusion.h flipflop.o: ../../config.h flipflop.o: $(HACK_SRC)/fps.h flipflop.o: $(srcdir)/gltrackball.h flipflop.o: $(srcdir)/grab-ximage.h flipflop.o: $(HACK_SRC)/screenhackI.h flipflop.o: $(UTILS_SRC)/colors.h flipflop.o: $(UTILS_SRC)/grabscreen.h flipflop.o: $(UTILS_SRC)/hsv.h flipflop.o: $(UTILS_SRC)/resources.h flipflop.o: $(UTILS_SRC)/usleep.h flipflop.o: $(UTILS_SRC)/visual.h flipflop.o: $(UTILS_SRC)/xshm.h flipflop.o: $(UTILS_SRC)/yarandom.h flipflop.o: $(HACK_SRC)/xlockmoreI.h flipflop.o: $(HACK_SRC)/xlockmore.h flipscreen3d.o: ../../config.h flipscreen3d.o: $(HACK_SRC)/fps.h flipscreen3d.o: $(srcdir)/gltrackball.h flipscreen3d.o: $(srcdir)/grab-ximage.h flipscreen3d.o: $(HACK_SRC)/screenhackI.h flipscreen3d.o: $(UTILS_SRC)/colors.h flipscreen3d.o: $(UTILS_SRC)/grabscreen.h flipscreen3d.o: $(UTILS_SRC)/hsv.h flipscreen3d.o: $(UTILS_SRC)/resources.h flipscreen3d.o: $(UTILS_SRC)/usleep.h flipscreen3d.o: $(UTILS_SRC)/visual.h flipscreen3d.o: $(UTILS_SRC)/xshm.h flipscreen3d.o: $(UTILS_SRC)/yarandom.h flipscreen3d.o: $(HACK_SRC)/xlockmoreI.h flipscreen3d.o: $(HACK_SRC)/xlockmore.h fliptext.o: ../../config.h fliptext.o: $(HACK_SRC)/fps.h fliptext.o: $(HACK_SRC)/screenhackI.h fliptext.o: $(srcdir)/texfont.h 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 fliptext.o: $(UTILS_SRC)/yarandom.h fliptext.o: $(HACK_SRC)/xlockmoreI.h fliptext.o: $(HACK_SRC)/xlockmore.h flurry.o: ../../config.h flurry.o: $(srcdir)/flurry.h flurry.o: $(HACK_SRC)/fps.h flurry.o: $(srcdir)/gltrackball.h flurry.o: $(srcdir)/rotator.h flurry.o: $(HACK_SRC)/screenhackI.h flurry.o: $(UTILS_SRC)/colors.h flurry.o: $(UTILS_SRC)/grabscreen.h flurry.o: $(UTILS_SRC)/hsv.h flurry.o: $(UTILS_SRC)/resources.h flurry.o: $(UTILS_SRC)/usleep.h flurry.o: $(UTILS_SRC)/visual.h flurry.o: $(UTILS_SRC)/xshm.h flurry.o: $(UTILS_SRC)/yarandom.h flurry.o: $(HACK_SRC)/xlockmoreI.h 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)/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)/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)/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)/rotator.h flurry-texture.o: $(UTILS_SRC)/yarandom.h flyingtoasters.o: ../../config.h flyingtoasters.o: $(HACK_SRC)/fps.h 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: $(HACK_SRC)/screenhackI.h flyingtoasters.o: $(UTILS_SRC)/colors.h flyingtoasters.o: $(UTILS_SRC)/grabscreen.h flyingtoasters.o: $(UTILS_SRC)/hsv.h flyingtoasters.o: $(UTILS_SRC)/resources.h flyingtoasters.o: $(UTILS_SRC)/usleep.h flyingtoasters.o: $(UTILS_SRC)/visual.h flyingtoasters.o: $(UTILS_SRC)/xshm.h flyingtoasters.o: $(UTILS_SRC)/yarandom.h flyingtoasters.o: $(HACK_SRC)/xlockmoreI.h flyingtoasters.o: $(HACK_SRC)/xlockmore.h flyingtoasters.o: $(srcdir)/xpm-ximage.h fps-gl.o: ../../config.h fps-gl.o: $(HACK_SRC)/fpsI.h fps-gl.o: $(HACK_SRC)/fps.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 fps-gl.o: $(UTILS_SRC)/resources.h fps-gl.o: $(UTILS_SRC)/usleep.h fps-gl.o: $(UTILS_SRC)/visual.h fps-gl.o: $(UTILS_SRC)/xshm.h fps-gl.o: $(UTILS_SRC)/yarandom.h fps-gl.o: $(HACK_SRC)/xlockmoreI.h gears.o: ../../config.h gears.o: $(HACK_SRC)/fps.h gears.o: $(srcdir)/gltrackball.h gears.o: $(srcdir)/involute.h gears.o: $(srcdir)/normals.h gears.o: $(srcdir)/rotator.h gears.o: $(HACK_SRC)/screenhackI.h gears.o: $(srcdir)/tube.h gears.o: $(UTILS_SRC)/colors.h gears.o: $(UTILS_SRC)/grabscreen.h gears.o: $(UTILS_SRC)/hsv.h gears.o: $(UTILS_SRC)/resources.h gears.o: $(UTILS_SRC)/usleep.h gears.o: $(UTILS_SRC)/visual.h gears.o: $(UTILS_SRC)/xshm.h gears.o: $(UTILS_SRC)/yarandom.h gears.o: $(HACK_SRC)/xlockmoreI.h gears.o: $(HACK_SRC)/xlockmore.h geodesicgears.o: ../../config.h geodesicgears.o: $(HACK_SRC)/fps.h geodesicgears.o: $(srcdir)/gllist.h geodesicgears.o: $(srcdir)/gltrackball.h geodesicgears.o: $(srcdir)/involute.h geodesicgears.o: $(srcdir)/normals.h geodesicgears.o: $(srcdir)/rotator.h geodesicgears.o: $(HACK_SRC)/screenhackI.h geodesicgears.o: $(srcdir)/texfont.h geodesicgears.o: $(UTILS_SRC)/colors.h geodesicgears.o: $(UTILS_SRC)/grabscreen.h geodesicgears.o: $(UTILS_SRC)/hsv.h geodesicgears.o: $(UTILS_SRC)/resources.h geodesicgears.o: $(UTILS_SRC)/usleep.h geodesicgears.o: $(UTILS_SRC)/visual.h geodesicgears.o: $(UTILS_SRC)/xshm.h geodesicgears.o: $(UTILS_SRC)/yarandom.h geodesicgears.o: $(HACK_SRC)/xlockmoreI.h geodesicgears.o: $(HACK_SRC)/xlockmore.h geodesic.o: ../../config.h geodesic.o: $(HACK_SRC)/fps.h geodesic.o: $(srcdir)/gllist.h geodesic.o: $(srcdir)/gltrackball.h geodesic.o: $(srcdir)/normals.h geodesic.o: $(srcdir)/rotator.h geodesic.o: $(HACK_SRC)/screenhackI.h geodesic.o: $(UTILS_SRC)/colors.h geodesic.o: $(UTILS_SRC)/grabscreen.h geodesic.o: $(UTILS_SRC)/hsv.h geodesic.o: $(UTILS_SRC)/resources.h geodesic.o: $(UTILS_SRC)/usleep.h geodesic.o: $(UTILS_SRC)/visual.h geodesic.o: $(UTILS_SRC)/xshm.h geodesic.o: $(UTILS_SRC)/yarandom.h geodesic.o: $(HACK_SRC)/xlockmoreI.h geodesic.o: $(HACK_SRC)/xlockmore.h gflux.o: ../../config.h gflux.o: $(HACK_SRC)/fps.h gflux.o: $(srcdir)/gltrackball.h gflux.o: $(srcdir)/grab-ximage.h gflux.o: $(HACK_SRC)/screenhackI.h gflux.o: $(UTILS_SRC)/colors.h gflux.o: $(UTILS_SRC)/grabscreen.h gflux.o: $(UTILS_SRC)/hsv.h gflux.o: $(UTILS_SRC)/resources.h gflux.o: $(UTILS_SRC)/usleep.h gflux.o: $(UTILS_SRC)/visual.h gflux.o: $(UTILS_SRC)/xshm.h gflux.o: $(UTILS_SRC)/yarandom.h gflux.o: $(HACK_SRC)/xlockmoreI.h gflux.o: $(HACK_SRC)/xlockmore.h glblur.o: ../../config.h glblur.o: $(HACK_SRC)/fps.h glblur.o: $(srcdir)/gltrackball.h glblur.o: $(srcdir)/rotator.h glblur.o: $(HACK_SRC)/screenhackI.h glblur.o: $(UTILS_SRC)/colors.h glblur.o: $(UTILS_SRC)/grabscreen.h glblur.o: $(UTILS_SRC)/hsv.h glblur.o: $(UTILS_SRC)/resources.h glblur.o: $(UTILS_SRC)/usleep.h glblur.o: $(UTILS_SRC)/visual.h glblur.o: $(UTILS_SRC)/xshm.h glblur.o: $(UTILS_SRC)/yarandom.h glblur.o: $(HACK_SRC)/xlockmoreI.h glblur.o: $(HACK_SRC)/xlockmore.h glcells.o: ../../config.h glcells.o: $(HACK_SRC)/fps.h glcells.o: $(HACK_SRC)/screenhackI.h glcells.o: $(UTILS_SRC)/colors.h glcells.o: $(UTILS_SRC)/grabscreen.h glcells.o: $(UTILS_SRC)/hsv.h glcells.o: $(UTILS_SRC)/resources.h glcells.o: $(UTILS_SRC)/usleep.h glcells.o: $(UTILS_SRC)/visual.h glcells.o: $(UTILS_SRC)/xshm.h glcells.o: $(UTILS_SRC)/yarandom.h glcells.o: $(HACK_SRC)/xlockmoreI.h glcells.o: $(HACK_SRC)/xlockmore.h gleidescope.o: ../../config.h gleidescope.o: $(HACK_SRC)/fps.h gleidescope.o: $(srcdir)/grab-ximage.h gleidescope.o: $(HACK_SRC)/screenhackI.h gleidescope.o: $(UTILS_SRC)/colors.h gleidescope.o: $(UTILS_SRC)/grabscreen.h gleidescope.o: $(UTILS_SRC)/hsv.h gleidescope.o: $(UTILS_SRC)/resources.h gleidescope.o: $(UTILS_SRC)/usleep.h gleidescope.o: $(UTILS_SRC)/visual.h gleidescope.o: $(UTILS_SRC)/xshm.h gleidescope.o: $(UTILS_SRC)/yarandom.h gleidescope.o: $(HACK_SRC)/xlockmoreI.h gleidescope.o: $(HACK_SRC)/xlockmore.h gleidescope.o: $(srcdir)/xpm-ximage.h glforestfire.o: ../../config.h 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: $(HACK_SRC)/screenhackI.h glforestfire.o: $(UTILS_SRC)/colors.h glforestfire.o: $(UTILS_SRC)/grabscreen.h glforestfire.o: $(UTILS_SRC)/hsv.h glforestfire.o: $(UTILS_SRC)/resources.h glforestfire.o: $(UTILS_SRC)/usleep.h glforestfire.o: $(UTILS_SRC)/visual.h glforestfire.o: $(UTILS_SRC)/xshm.h glforestfire.o: $(UTILS_SRC)/yarandom.h glforestfire.o: $(HACK_SRC)/xlockmoreI.h 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)/rotator.h glhanoi.o: $(HACK_SRC)/screenhackI.h glhanoi.o: $(UTILS_SRC)/colors.h glhanoi.o: $(UTILS_SRC)/grabscreen.h glhanoi.o: $(UTILS_SRC)/hsv.h glhanoi.o: $(UTILS_SRC)/resources.h glhanoi.o: $(UTILS_SRC)/usleep.h glhanoi.o: $(UTILS_SRC)/visual.h glhanoi.o: $(UTILS_SRC)/xshm.h glhanoi.o: $(UTILS_SRC)/yarandom.h glhanoi.o: $(HACK_SRC)/xlockmoreI.h glhanoi.o: $(HACK_SRC)/xlockmore.h glknots.o: ../../config.h glknots.o: $(HACK_SRC)/fps.h glknots.o: $(srcdir)/gltrackball.h glknots.o: $(srcdir)/rotator.h glknots.o: $(HACK_SRC)/screenhackI.h glknots.o: $(srcdir)/tube.h glknots.o: $(UTILS_SRC)/colors.h glknots.o: $(UTILS_SRC)/grabscreen.h glknots.o: $(UTILS_SRC)/hsv.h glknots.o: $(UTILS_SRC)/resources.h glknots.o: $(UTILS_SRC)/usleep.h glknots.o: $(UTILS_SRC)/visual.h 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 glmatrix.o: ../../config.h glmatrix.o: $(HACK_SRC)/fps.h glmatrix.o: $(HACK_SRC)/images/matrix3.xpm glmatrix.o: $(HACK_SRC)/screenhackI.h glmatrix.o: $(UTILS_SRC)/colors.h glmatrix.o: $(UTILS_SRC)/grabscreen.h glmatrix.o: $(UTILS_SRC)/hsv.h glmatrix.o: $(UTILS_SRC)/resources.h glmatrix.o: $(UTILS_SRC)/usleep.h glmatrix.o: $(UTILS_SRC)/visual.h glmatrix.o: $(UTILS_SRC)/xshm.h glmatrix.o: $(UTILS_SRC)/yarandom.h glmatrix.o: $(HACK_SRC)/xlockmoreI.h glmatrix.o: $(HACK_SRC)/xlockmore.h glmatrix.o: $(srcdir)/xpm-ximage.h glplanet.o: ../../config.h glplanet.o: $(HACK_SRC)/fps.h glplanet.o: $(srcdir)/gltrackball.h glplanet.o: $(HACK_SRC)/images/earth_night.xpm glplanet.o: $(HACK_SRC)/images/earth.xpm glplanet.o: $(srcdir)/rotator.h glplanet.o: $(HACK_SRC)/screenhackI.h glplanet.o: $(srcdir)/sphere.h glplanet.o: $(UTILS_SRC)/colors.h glplanet.o: $(UTILS_SRC)/grabscreen.h glplanet.o: $(UTILS_SRC)/hsv.h glplanet.o: $(UTILS_SRC)/resources.h glplanet.o: $(UTILS_SRC)/usleep.h glplanet.o: $(UTILS_SRC)/visual.h glplanet.o: $(UTILS_SRC)/xshm.h glplanet.o: $(UTILS_SRC)/yarandom.h glplanet.o: $(HACK_SRC)/xlockmoreI.h glplanet.o: $(HACK_SRC)/xlockmore.h 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)/sphere.h glschool_gl.o: $(srcdir)/tube.h glschool.o: ../../config.h 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: $(HACK_SRC)/screenhackI.h glschool.o: $(UTILS_SRC)/colors.h glschool.o: $(UTILS_SRC)/grabscreen.h glschool.o: $(UTILS_SRC)/hsv.h glschool.o: $(UTILS_SRC)/resources.h glschool.o: $(UTILS_SRC)/usleep.h glschool.o: $(UTILS_SRC)/visual.h glschool.o: $(UTILS_SRC)/xshm.h glschool.o: $(UTILS_SRC)/yarandom.h glschool.o: $(HACK_SRC)/xlockmoreI.h glschool.o: $(HACK_SRC)/xlockmore.h glslideshow.o: ../../config.h glslideshow.o: $(HACK_SRC)/fps.h glslideshow.o: $(srcdir)/grab-ximage.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 glslideshow.o: $(UTILS_SRC)/resources.h glslideshow.o: $(UTILS_SRC)/usleep.h glslideshow.o: $(UTILS_SRC)/visual.h glslideshow.o: $(UTILS_SRC)/xshm.h glslideshow.o: $(UTILS_SRC)/yarandom.h glslideshow.o: $(HACK_SRC)/xlockmoreI.h glslideshow.o: $(HACK_SRC)/xlockmore.h glsnake.o: ../../config.h glsnake.o: $(HACK_SRC)/fps.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 glsnake.o: $(UTILS_SRC)/resources.h glsnake.o: $(UTILS_SRC)/usleep.h glsnake.o: $(UTILS_SRC)/visual.h glsnake.o: $(UTILS_SRC)/xshm.h glsnake.o: $(UTILS_SRC)/yarandom.h glsnake.o: $(HACK_SRC)/xlockmoreI.h glsnake.o: $(HACK_SRC)/xlockmore.h gltext.o: ../../config.h 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)/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)/utf8wc.h gltext.o: $(UTILS_SRC)/visual.h gltext.o: $(UTILS_SRC)/xshm.h gltext.o: $(UTILS_SRC)/yarandom.h gltext.o: $(HACK_SRC)/xlockmoreI.h gltext.o: $(HACK_SRC)/xlockmore.h gltrackball.o: ../../config.h gltrackball.o: $(srcdir)/gltrackball.h gltrackball.o: $(srcdir)/trackball.h glut_stroke.o: ../../config.h glut_stroke.o: $(srcdir)/glutstroke.h glut_swidth.o: ../../config.h glut_swidth.o: $(srcdir)/glutstroke.h grab-ximage.o: ../../config.h grab-ximage.o: $(srcdir)/grab-ximage.h grab-ximage.o: $(UTILS_SRC)/grabscreen.h grab-ximage.o: $(UTILS_SRC)/resources.h grab-ximage.o: $(UTILS_SRC)/visual.h grab-ximage.o: $(UTILS_SRC)/xshm.h hexstrut.o: ../../config.h hexstrut.o: $(HACK_SRC)/fps.h hexstrut.o: $(srcdir)/gltrackball.h hexstrut.o: $(srcdir)/normals.h hexstrut.o: $(srcdir)/rotator.h hexstrut.o: $(HACK_SRC)/screenhackI.h hexstrut.o: $(UTILS_SRC)/colors.h hexstrut.o: $(UTILS_SRC)/grabscreen.h hexstrut.o: $(UTILS_SRC)/hsv.h hexstrut.o: $(UTILS_SRC)/resources.h hexstrut.o: $(UTILS_SRC)/usleep.h hexstrut.o: $(UTILS_SRC)/visual.h hexstrut.o: $(UTILS_SRC)/xshm.h hexstrut.o: $(UTILS_SRC)/yarandom.h hexstrut.o: $(HACK_SRC)/xlockmoreI.h hexstrut.o: $(HACK_SRC)/xlockmore.h hilbert.o: ../../config.h hilbert.o: $(HACK_SRC)/fps.h hilbert.o: $(srcdir)/gltrackball.h hilbert.o: $(srcdir)/rotator.h hilbert.o: $(HACK_SRC)/screenhackI.h hilbert.o: $(srcdir)/sphere.h hilbert.o: $(srcdir)/tube.h hilbert.o: $(UTILS_SRC)/colors.h hilbert.o: $(UTILS_SRC)/grabscreen.h hilbert.o: $(UTILS_SRC)/hsv.h hilbert.o: $(UTILS_SRC)/resources.h hilbert.o: $(UTILS_SRC)/usleep.h hilbert.o: $(UTILS_SRC)/visual.h hilbert.o: $(UTILS_SRC)/xshm.h hilbert.o: $(UTILS_SRC)/yarandom.h hilbert.o: $(HACK_SRC)/xlockmoreI.h hilbert.o: $(HACK_SRC)/xlockmore.h hydrostat.o: ../../config.h hydrostat.o: $(HACK_SRC)/fps.h hydrostat.o: $(srcdir)/gltrackball.h hydrostat.o: $(srcdir)/normals.h hydrostat.o: $(HACK_SRC)/screenhackI.h hydrostat.o: $(srcdir)/sphere.h hydrostat.o: $(UTILS_SRC)/colors.h hydrostat.o: $(UTILS_SRC)/grabscreen.h hydrostat.o: $(UTILS_SRC)/hsv.h hydrostat.o: $(UTILS_SRC)/resources.h hydrostat.o: $(UTILS_SRC)/usleep.h hydrostat.o: $(UTILS_SRC)/visual.h hydrostat.o: $(UTILS_SRC)/xshm.h hydrostat.o: $(UTILS_SRC)/yarandom.h hydrostat.o: $(HACK_SRC)/xlockmoreI.h hydrostat.o: $(HACK_SRC)/xlockmore.h hypertorus.o: ../../config.h hypertorus.o: $(HACK_SRC)/fps.h hypertorus.o: $(srcdir)/gltrackball.h hypertorus.o: $(HACK_SRC)/screenhackI.h hypertorus.o: $(UTILS_SRC)/colors.h hypertorus.o: $(UTILS_SRC)/grabscreen.h hypertorus.o: $(UTILS_SRC)/hsv.h hypertorus.o: $(UTILS_SRC)/resources.h hypertorus.o: $(UTILS_SRC)/usleep.h hypertorus.o: $(UTILS_SRC)/visual.h hypertorus.o: $(UTILS_SRC)/xshm.h hypertorus.o: $(UTILS_SRC)/yarandom.h 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)/rotator.h hypnowheel.o: $(HACK_SRC)/screenhackI.h hypnowheel.o: $(UTILS_SRC)/colors.h hypnowheel.o: $(UTILS_SRC)/grabscreen.h hypnowheel.o: $(UTILS_SRC)/hsv.h hypnowheel.o: $(UTILS_SRC)/resources.h hypnowheel.o: $(UTILS_SRC)/usleep.h hypnowheel.o: $(UTILS_SRC)/visual.h hypnowheel.o: $(UTILS_SRC)/xshm.h hypnowheel.o: $(UTILS_SRC)/yarandom.h hypnowheel.o: $(HACK_SRC)/xlockmoreI.h hypnowheel.o: $(HACK_SRC)/xlockmore.h involute.o: ../../config.h involute.o: $(HACK_SRC)/fps.h involute.o: $(srcdir)/involute.h involute.o: $(srcdir)/normals.h involute.o: $(HACK_SRC)/screenhackI.h involute.o: $(UTILS_SRC)/colors.h involute.o: $(UTILS_SRC)/grabscreen.h involute.o: $(UTILS_SRC)/hsv.h involute.o: $(UTILS_SRC)/resources.h involute.o: $(UTILS_SRC)/usleep.h involute.o: $(UTILS_SRC)/visual.h involute.o: $(UTILS_SRC)/yarandom.h jigglypuff.o: ../../config.h jigglypuff.o: $(HACK_SRC)/fps.h jigglypuff.o: $(srcdir)/gltrackball.h jigglypuff.o: $(HACK_SRC)/images/jigglymap.xpm jigglypuff.o: $(HACK_SRC)/screenhackI.h jigglypuff.o: $(UTILS_SRC)/colors.h jigglypuff.o: $(UTILS_SRC)/grabscreen.h jigglypuff.o: $(UTILS_SRC)/hsv.h jigglypuff.o: $(UTILS_SRC)/resources.h jigglypuff.o: $(UTILS_SRC)/usleep.h jigglypuff.o: $(UTILS_SRC)/visual.h jigglypuff.o: $(UTILS_SRC)/xshm.h jigglypuff.o: $(UTILS_SRC)/yarandom.h jigglypuff.o: $(HACK_SRC)/xlockmoreI.h jigglypuff.o: $(HACK_SRC)/xlockmore.h jigglypuff.o: $(srcdir)/xpm-ximage.h jigsaw.o: ../../config.h jigsaw.o: $(HACK_SRC)/fps.h jigsaw.o: $(srcdir)/gltrackball.h jigsaw.o: $(srcdir)/grab-ximage.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 jigsaw.o: $(UTILS_SRC)/resources.h jigsaw.o: $(UTILS_SRC)/spline.h jigsaw.o: $(UTILS_SRC)/usleep.h jigsaw.o: $(UTILS_SRC)/visual.h jigsaw.o: $(UTILS_SRC)/xshm.h jigsaw.o: $(UTILS_SRC)/yarandom.h jigsaw.o: $(HACK_SRC)/xlockmoreI.h jigsaw.o: $(HACK_SRC)/xlockmore.h juggler3d.o: ../../config.h juggler3d.o: $(HACK_SRC)/fps.h juggler3d.o: $(srcdir)/gltrackball.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 juggler3d.o: $(UTILS_SRC)/hsv.h juggler3d.o: $(UTILS_SRC)/resources.h juggler3d.o: $(UTILS_SRC)/usleep.h juggler3d.o: $(UTILS_SRC)/visual.h juggler3d.o: $(UTILS_SRC)/xshm.h juggler3d.o: $(UTILS_SRC)/yarandom.h juggler3d.o: $(HACK_SRC)/xlockmoreI.h juggler3d.o: $(HACK_SRC)/xlockmore.h kaleidocycle.o: ../../config.h kaleidocycle.o: $(HACK_SRC)/fps.h kaleidocycle.o: $(srcdir)/gltrackball.h kaleidocycle.o: $(srcdir)/normals.h kaleidocycle.o: $(srcdir)/rotator.h kaleidocycle.o: $(HACK_SRC)/screenhackI.h kaleidocycle.o: $(UTILS_SRC)/colors.h kaleidocycle.o: $(UTILS_SRC)/grabscreen.h kaleidocycle.o: $(UTILS_SRC)/hsv.h kaleidocycle.o: $(UTILS_SRC)/resources.h kaleidocycle.o: $(UTILS_SRC)/usleep.h kaleidocycle.o: $(UTILS_SRC)/visual.h kaleidocycle.o: $(UTILS_SRC)/xshm.h kaleidocycle.o: $(UTILS_SRC)/yarandom.h kaleidocycle.o: $(HACK_SRC)/xlockmoreI.h kaleidocycle.o: $(HACK_SRC)/xlockmore.h klein.o: ../../config.h klein.o: $(srcdir)/curlicue.h klein.o: $(HACK_SRC)/fps.h klein.o: $(srcdir)/gltrackball.h klein.o: $(HACK_SRC)/screenhackI.h klein.o: $(UTILS_SRC)/colors.h klein.o: $(UTILS_SRC)/grabscreen.h klein.o: $(UTILS_SRC)/hsv.h klein.o: $(UTILS_SRC)/resources.h klein.o: $(UTILS_SRC)/usleep.h klein.o: $(UTILS_SRC)/visual.h klein.o: $(UTILS_SRC)/xshm.h klein.o: $(UTILS_SRC)/yarandom.h klein.o: $(HACK_SRC)/xlockmoreI.h klein.o: $(HACK_SRC)/xlockmore.h lament_model.o: ../../config.h lament_model.o: $(srcdir)/gllist.h lament.o: ../../config.h lament.o: $(HACK_SRC)/fps.h lament.o: $(srcdir)/gllist.h lament.o: $(srcdir)/gltrackball.h lament.o: $(HACK_SRC)/images/lament512.xpm lament.o: $(srcdir)/normals.h lament.o: $(srcdir)/rotator.h lament.o: $(HACK_SRC)/screenhackI.h lament.o: $(UTILS_SRC)/colors.h lament.o: $(UTILS_SRC)/grabscreen.h lament.o: $(UTILS_SRC)/hsv.h lament.o: $(UTILS_SRC)/resources.h lament.o: $(UTILS_SRC)/usleep.h lament.o: $(UTILS_SRC)/visual.h lament.o: $(UTILS_SRC)/xshm.h lament.o: $(UTILS_SRC)/yarandom.h lament.o: $(HACK_SRC)/xlockmoreI.h lament.o: $(HACK_SRC)/xlockmore.h lament.o: $(srcdir)/xpm-ximage.h lavalite.o: ../../config.h lavalite.o: $(HACK_SRC)/fps.h lavalite.o: $(srcdir)/gltrackball.h lavalite.o: $(srcdir)/marching.h lavalite.o: $(srcdir)/rotator.h lavalite.o: $(HACK_SRC)/screenhackI.h lavalite.o: $(UTILS_SRC)/colors.h lavalite.o: $(UTILS_SRC)/grabscreen.h lavalite.o: $(UTILS_SRC)/hsv.h lavalite.o: $(UTILS_SRC)/resources.h lavalite.o: $(UTILS_SRC)/usleep.h lavalite.o: $(UTILS_SRC)/visual.h lavalite.o: $(UTILS_SRC)/xshm.h lavalite.o: $(UTILS_SRC)/yarandom.h lavalite.o: $(HACK_SRC)/xlockmoreI.h lavalite.o: $(HACK_SRC)/xlockmore.h lavalite.o: $(srcdir)/xpm-ximage.h lockward.o: ../../config.h lockward.o: $(HACK_SRC)/fps.h lockward.o: $(HACK_SRC)/screenhackI.h lockward.o: $(UTILS_SRC)/colors.h lockward.o: $(UTILS_SRC)/grabscreen.h lockward.o: $(UTILS_SRC)/hsv.h lockward.o: $(UTILS_SRC)/resources.h lockward.o: $(UTILS_SRC)/usleep.h lockward.o: $(UTILS_SRC)/visual.h lockward.o: $(UTILS_SRC)/xshm.h 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)/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)/rotator.h menger.o: $(HACK_SRC)/screenhackI.h menger.o: $(UTILS_SRC)/colors.h menger.o: $(UTILS_SRC)/grabscreen.h menger.o: $(UTILS_SRC)/hsv.h menger.o: $(UTILS_SRC)/resources.h menger.o: $(UTILS_SRC)/usleep.h menger.o: $(UTILS_SRC)/visual.h menger.o: $(UTILS_SRC)/xshm.h menger.o: $(UTILS_SRC)/yarandom.h menger.o: $(HACK_SRC)/xlockmoreI.h menger.o: $(HACK_SRC)/xlockmore.h mirrorblob.o: ../../config.h mirrorblob.o: $(HACK_SRC)/fps.h mirrorblob.o: $(srcdir)/gltrackball.h mirrorblob.o: $(srcdir)/grab-ximage.h mirrorblob.o: $(HACK_SRC)/screenhackI.h mirrorblob.o: $(UTILS_SRC)/colors.h mirrorblob.o: $(UTILS_SRC)/grabscreen.h mirrorblob.o: $(UTILS_SRC)/hsv.h mirrorblob.o: $(UTILS_SRC)/resources.h mirrorblob.o: $(UTILS_SRC)/usleep.h mirrorblob.o: $(UTILS_SRC)/visual.h mirrorblob.o: $(UTILS_SRC)/xshm.h mirrorblob.o: $(UTILS_SRC)/yarandom.h mirrorblob.o: $(HACK_SRC)/xlockmoreI.h mirrorblob.o: $(HACK_SRC)/xlockmore.h moebiusgears.o: ../../config.h moebiusgears.o: $(HACK_SRC)/fps.h moebiusgears.o: $(srcdir)/gltrackball.h moebiusgears.o: $(srcdir)/involute.h moebiusgears.o: $(srcdir)/normals.h moebiusgears.o: $(srcdir)/rotator.h moebiusgears.o: $(HACK_SRC)/screenhackI.h moebiusgears.o: $(UTILS_SRC)/colors.h moebiusgears.o: $(UTILS_SRC)/grabscreen.h moebiusgears.o: $(UTILS_SRC)/hsv.h moebiusgears.o: $(UTILS_SRC)/resources.h moebiusgears.o: $(UTILS_SRC)/usleep.h moebiusgears.o: $(UTILS_SRC)/visual.h moebiusgears.o: $(UTILS_SRC)/xshm.h moebiusgears.o: $(UTILS_SRC)/yarandom.h moebiusgears.o: $(HACK_SRC)/xlockmoreI.h moebiusgears.o: $(HACK_SRC)/xlockmore.h moebius.o: ../../config.h moebius.o: $(HACK_SRC)/fps.h moebius.o: $(srcdir)/gltrackball.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 moebius.o: $(UTILS_SRC)/resources.h moebius.o: $(UTILS_SRC)/usleep.h moebius.o: $(UTILS_SRC)/visual.h moebius.o: $(UTILS_SRC)/xshm.h moebius.o: $(UTILS_SRC)/yarandom.h moebius.o: $(HACK_SRC)/xlockmoreI.h moebius.o: $(HACK_SRC)/xlockmore.h molecule.o: ../../config.h molecule.o: $(HACK_SRC)/fps.h molecule.o: $(srcdir)/gltrackball.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 molecule.o: $(UTILS_SRC)/hsv.h molecule.o: $(UTILS_SRC)/resources.h molecule.o: $(UTILS_SRC)/usleep.h molecule.o: $(UTILS_SRC)/visual.h molecule.o: $(UTILS_SRC)/xshm.h molecule.o: $(UTILS_SRC)/yarandom.h molecule.o: $(HACK_SRC)/xlockmoreI.h molecule.o: $(HACK_SRC)/xlockmore.h morph3d.o: ../../config.h morph3d.o: $(HACK_SRC)/fps.h morph3d.o: $(HACK_SRC)/screenhackI.h morph3d.o: $(UTILS_SRC)/colors.h morph3d.o: $(UTILS_SRC)/grabscreen.h morph3d.o: $(UTILS_SRC)/hsv.h morph3d.o: $(UTILS_SRC)/resources.h morph3d.o: $(UTILS_SRC)/usleep.h morph3d.o: $(UTILS_SRC)/visual.h morph3d.o: $(UTILS_SRC)/xshm.h morph3d.o: $(UTILS_SRC)/yarandom.h morph3d.o: $(HACK_SRC)/xlockmoreI.h morph3d.o: $(HACK_SRC)/xlockmore.h noof.o: ../../config.h noof.o: $(HACK_SRC)/fps.h noof.o: $(HACK_SRC)/screenhackI.h noof.o: $(UTILS_SRC)/colors.h noof.o: $(UTILS_SRC)/grabscreen.h noof.o: $(UTILS_SRC)/hsv.h noof.o: $(UTILS_SRC)/resources.h noof.o: $(UTILS_SRC)/usleep.h noof.o: $(UTILS_SRC)/visual.h noof.o: $(UTILS_SRC)/xshm.h 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)/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: $(HACK_SRC)/screenhackI.h photopile.o: $(srcdir)/texfont.h photopile.o: $(UTILS_SRC)/colors.h photopile.o: $(UTILS_SRC)/grabscreen.h photopile.o: $(UTILS_SRC)/hsv.h photopile.o: $(UTILS_SRC)/resources.h photopile.o: $(UTILS_SRC)/usleep.h photopile.o: $(UTILS_SRC)/visual.h photopile.o: $(UTILS_SRC)/xshm.h photopile.o: $(UTILS_SRC)/yarandom.h photopile.o: $(HACK_SRC)/xlockmoreI.h photopile.o: $(HACK_SRC)/xlockmore.h pinion.o: ../../config.h pinion.o: $(HACK_SRC)/fps.h pinion.o: $(srcdir)/gltrackball.h pinion.o: $(srcdir)/involute.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 pinion.o: $(UTILS_SRC)/resources.h pinion.o: $(UTILS_SRC)/usleep.h pinion.o: $(UTILS_SRC)/visual.h pinion.o: $(UTILS_SRC)/xshm.h 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 pipes.o: $(srcdir)/buildlwo.h pipes.o: ../../config.h pipes.o: $(HACK_SRC)/fps.h pipes.o: $(srcdir)/gltrackball.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 pipes.o: $(UTILS_SRC)/hsv.h pipes.o: $(UTILS_SRC)/resources.h pipes.o: $(UTILS_SRC)/usleep.h pipes.o: $(UTILS_SRC)/visual.h pipes.o: $(UTILS_SRC)/xshm.h pipes.o: $(UTILS_SRC)/yarandom.h pipes.o: $(HACK_SRC)/xlockmoreI.h pipes.o: $(HACK_SRC)/xlockmore.h polyhedra-gl.o: ../../config.h polyhedra-gl.o: $(HACK_SRC)/fps.h polyhedra-gl.o: $(srcdir)/gltrackball.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 polyhedra-gl.o: $(UTILS_SRC)/resources.h polyhedra-gl.o: $(UTILS_SRC)/usleep.h polyhedra-gl.o: $(UTILS_SRC)/visual.h polyhedra-gl.o: $(UTILS_SRC)/xshm.h polyhedra-gl.o: $(UTILS_SRC)/yarandom.h polyhedra-gl.o: $(HACK_SRC)/xlockmoreI.h polyhedra-gl.o: $(HACK_SRC)/xlockmore.h polyhedra.o: ../../config.h polyhedra.o: $(srcdir)/polyhedra.h polytopes.o: ../../config.h polytopes.o: $(HACK_SRC)/fps.h polytopes.o: $(srcdir)/gltrackball.h polytopes.o: $(HACK_SRC)/screenhackI.h polytopes.o: $(UTILS_SRC)/colors.h polytopes.o: $(UTILS_SRC)/grabscreen.h polytopes.o: $(UTILS_SRC)/hsv.h polytopes.o: $(UTILS_SRC)/resources.h polytopes.o: $(UTILS_SRC)/usleep.h polytopes.o: $(UTILS_SRC)/visual.h polytopes.o: $(UTILS_SRC)/xshm.h polytopes.o: $(UTILS_SRC)/yarandom.h polytopes.o: $(HACK_SRC)/xlockmoreI.h polytopes.o: $(HACK_SRC)/xlockmore.h projectiveplane.o: ../../config.h projectiveplane.o: $(srcdir)/curlicue.h projectiveplane.o: $(HACK_SRC)/fps.h projectiveplane.o: $(srcdir)/gltrackball.h projectiveplane.o: $(HACK_SRC)/screenhackI.h projectiveplane.o: $(UTILS_SRC)/colors.h projectiveplane.o: $(UTILS_SRC)/grabscreen.h projectiveplane.o: $(UTILS_SRC)/hsv.h projectiveplane.o: $(UTILS_SRC)/resources.h projectiveplane.o: $(UTILS_SRC)/usleep.h projectiveplane.o: $(UTILS_SRC)/visual.h projectiveplane.o: $(UTILS_SRC)/xshm.h projectiveplane.o: $(UTILS_SRC)/yarandom.h projectiveplane.o: $(HACK_SRC)/xlockmoreI.h projectiveplane.o: $(HACK_SRC)/xlockmore.h providence.o: ../../config.h providence.o: $(HACK_SRC)/fps.h providence.o: $(srcdir)/gltrackball.h providence.o: $(HACK_SRC)/screenhackI.h providence.o: $(UTILS_SRC)/colors.h providence.o: $(UTILS_SRC)/grabscreen.h providence.o: $(UTILS_SRC)/hsv.h providence.o: $(UTILS_SRC)/resources.h providence.o: $(UTILS_SRC)/usleep.h providence.o: $(UTILS_SRC)/visual.h providence.o: $(UTILS_SRC)/xshm.h providence.o: $(UTILS_SRC)/yarandom.h providence.o: $(HACK_SRC)/xlockmoreI.h providence.o: $(HACK_SRC)/xlockmore.h pulsar.o: ../../config.h pulsar.o: $(HACK_SRC)/fps.h pulsar.o: $(HACK_SRC)/screenhackI.h pulsar.o: $(UTILS_SRC)/colors.h pulsar.o: $(UTILS_SRC)/grabscreen.h pulsar.o: $(UTILS_SRC)/hsv.h pulsar.o: $(UTILS_SRC)/resources.h pulsar.o: $(UTILS_SRC)/usleep.h pulsar.o: $(UTILS_SRC)/visual.h pulsar.o: $(UTILS_SRC)/xshm.h pulsar.o: $(UTILS_SRC)/yarandom.h pulsar.o: $(HACK_SRC)/xlockmoreI.h pulsar.o: $(HACK_SRC)/xlockmore.h pulsar.o: $(srcdir)/xpm-ximage.h quasicrystal.o: ../../config.h quasicrystal.o: $(HACK_SRC)/fps.h quasicrystal.o: $(srcdir)/rotator.h quasicrystal.o: $(HACK_SRC)/screenhackI.h quasicrystal.o: $(UTILS_SRC)/colors.h quasicrystal.o: $(UTILS_SRC)/grabscreen.h quasicrystal.o: $(UTILS_SRC)/hsv.h quasicrystal.o: $(UTILS_SRC)/resources.h quasicrystal.o: $(UTILS_SRC)/usleep.h quasicrystal.o: $(UTILS_SRC)/visual.h quasicrystal.o: $(UTILS_SRC)/xshm.h quasicrystal.o: $(UTILS_SRC)/yarandom.h quasicrystal.o: $(HACK_SRC)/xlockmoreI.h quasicrystal.o: $(HACK_SRC)/xlockmore.h queens.o: $(srcdir)/chessmodels.h queens.o: ../../config.h queens.o: $(HACK_SRC)/fps.h queens.o: $(srcdir)/gltrackball.h queens.o: $(HACK_SRC)/screenhackI.h queens.o: $(UTILS_SRC)/colors.h queens.o: $(UTILS_SRC)/grabscreen.h queens.o: $(UTILS_SRC)/hsv.h queens.o: $(UTILS_SRC)/resources.h queens.o: $(UTILS_SRC)/usleep.h queens.o: $(UTILS_SRC)/visual.h queens.o: $(UTILS_SRC)/xshm.h queens.o: $(UTILS_SRC)/yarandom.h queens.o: $(HACK_SRC)/xlockmoreI.h queens.o: $(HACK_SRC)/xlockmore.h raverhoop.o: ../../config.h raverhoop.o: $(HACK_SRC)/fps.h raverhoop.o: $(srcdir)/gltrackball.h raverhoop.o: $(srcdir)/rotator.h raverhoop.o: $(HACK_SRC)/screenhackI.h raverhoop.o: $(UTILS_SRC)/colors.h raverhoop.o: $(UTILS_SRC)/grabscreen.h raverhoop.o: $(UTILS_SRC)/hsv.h raverhoop.o: $(UTILS_SRC)/resources.h raverhoop.o: $(UTILS_SRC)/usleep.h raverhoop.o: $(UTILS_SRC)/visual.h raverhoop.o: $(UTILS_SRC)/xshm.h raverhoop.o: $(UTILS_SRC)/yarandom.h raverhoop.o: $(HACK_SRC)/xlockmoreI.h raverhoop.o: $(HACK_SRC)/xlockmore.h robot.o: ../../config.h robot.o: $(srcdir)/gllist.h robot-wireframe.o: ../../config.h robot-wireframe.o: $(srcdir)/gllist.h romanboy.o: ../../config.h romanboy.o: $(srcdir)/curlicue.h romanboy.o: $(HACK_SRC)/fps.h romanboy.o: $(srcdir)/gltrackball.h romanboy.o: $(HACK_SRC)/screenhackI.h romanboy.o: $(UTILS_SRC)/colors.h romanboy.o: $(UTILS_SRC)/grabscreen.h romanboy.o: $(UTILS_SRC)/hsv.h romanboy.o: $(UTILS_SRC)/resources.h romanboy.o: $(UTILS_SRC)/usleep.h romanboy.o: $(UTILS_SRC)/visual.h romanboy.o: $(UTILS_SRC)/xshm.h romanboy.o: $(UTILS_SRC)/yarandom.h romanboy.o: $(HACK_SRC)/xlockmoreI.h romanboy.o: $(HACK_SRC)/xlockmore.h rotator.o: ../../config.h rotator.o: $(srcdir)/rotator.h rotator.o: $(UTILS_SRC)/yarandom.h rubikblocks.o: ../../config.h rubikblocks.o: $(HACK_SRC)/fps.h rubikblocks.o: $(srcdir)/gltrackball.h rubikblocks.o: $(srcdir)/rotator.h rubikblocks.o: $(HACK_SRC)/screenhackI.h rubikblocks.o: $(UTILS_SRC)/colors.h rubikblocks.o: $(UTILS_SRC)/grabscreen.h rubikblocks.o: $(UTILS_SRC)/hsv.h rubikblocks.o: $(UTILS_SRC)/resources.h rubikblocks.o: $(UTILS_SRC)/usleep.h rubikblocks.o: $(UTILS_SRC)/visual.h rubikblocks.o: $(UTILS_SRC)/xshm.h rubikblocks.o: $(UTILS_SRC)/yarandom.h 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: $(HACK_SRC)/screenhackI.h rubik.o: $(UTILS_SRC)/colors.h rubik.o: $(UTILS_SRC)/grabscreen.h rubik.o: $(UTILS_SRC)/hsv.h rubik.o: $(UTILS_SRC)/resources.h rubik.o: $(UTILS_SRC)/usleep.h rubik.o: $(UTILS_SRC)/visual.h 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_2.o: ../../config.h s1_2.o: $(srcdir)/gllist.h s1_3.o: ../../config.h s1_3.o: $(srcdir)/gllist.h s1_4.o: ../../config.h s1_4.o: $(srcdir)/gllist.h s1_5.o: ../../config.h s1_5.o: $(srcdir)/gllist.h s1_6.o: ../../config.h s1_6.o: $(srcdir)/gllist.h s1_b.o: ../../config.h s1_b.o: $(srcdir)/gllist.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: $(HACK_SRC)/screenhackI.h sballs.o: $(UTILS_SRC)/colors.h sballs.o: $(UTILS_SRC)/grabscreen.h sballs.o: $(UTILS_SRC)/hsv.h sballs.o: $(UTILS_SRC)/resources.h sballs.o: $(UTILS_SRC)/usleep.h sballs.o: $(UTILS_SRC)/visual.h sballs.o: $(UTILS_SRC)/xshm.h sballs.o: $(UTILS_SRC)/yarandom.h sballs.o: $(HACK_SRC)/xlockmoreI.h sballs.o: $(HACK_SRC)/xlockmore.h sballs.o: $(srcdir)/xpm-ximage.h shark.o: $(srcdir)/atlantis.h shark.o: ../../config.h shark.o: $(HACK_SRC)/fps.h shark.o: $(HACK_SRC)/screenhackI.h shark.o: $(UTILS_SRC)/colors.h shark.o: $(UTILS_SRC)/grabscreen.h shark.o: $(UTILS_SRC)/hsv.h shark.o: $(UTILS_SRC)/resources.h shark.o: $(UTILS_SRC)/usleep.h shark.o: $(UTILS_SRC)/visual.h shark.o: $(UTILS_SRC)/yarandom.h sierpinski3d.o: ../../config.h sierpinski3d.o: $(HACK_SRC)/fps.h sierpinski3d.o: $(srcdir)/gltrackball.h sierpinski3d.o: $(srcdir)/rotator.h sierpinski3d.o: $(HACK_SRC)/screenhackI.h sierpinski3d.o: $(UTILS_SRC)/colors.h sierpinski3d.o: $(UTILS_SRC)/grabscreen.h sierpinski3d.o: $(UTILS_SRC)/hsv.h sierpinski3d.o: $(UTILS_SRC)/resources.h sierpinski3d.o: $(UTILS_SRC)/usleep.h sierpinski3d.o: $(UTILS_SRC)/visual.h sierpinski3d.o: $(UTILS_SRC)/xshm.h sierpinski3d.o: $(UTILS_SRC)/yarandom.h sierpinski3d.o: $(HACK_SRC)/xlockmoreI.h sierpinski3d.o: $(HACK_SRC)/xlockmore.h 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)/normals.h skytentacles.o: $(srcdir)/rotator.h skytentacles.o: $(HACK_SRC)/screenhackI.h skytentacles.o: $(UTILS_SRC)/colors.h skytentacles.o: $(UTILS_SRC)/grabscreen.h skytentacles.o: $(UTILS_SRC)/hsv.h skytentacles.o: $(UTILS_SRC)/resources.h skytentacles.o: $(UTILS_SRC)/usleep.h skytentacles.o: $(UTILS_SRC)/visual.h skytentacles.o: $(UTILS_SRC)/xshm.h skytentacles.o: $(UTILS_SRC)/yarandom.h skytentacles.o: $(HACK_SRC)/xlockmoreI.h skytentacles.o: $(HACK_SRC)/xlockmore.h skytentacles.o: $(srcdir)/xpm-ximage.h sonar-icmp.o: ../../config.h sonar-icmp.o: $(HACK_SRC)/fps.h sonar-icmp.o: $(HACK_SRC)/screenhackI.h sonar-icmp.o: $(srcdir)/sonar.h sonar-icmp.o: $(UTILS_SRC)/aligned_malloc.h sonar-icmp.o: $(UTILS_SRC)/async_netdb.h sonar-icmp.o: $(UTILS_SRC)/colors.h sonar-icmp.o: $(UTILS_SRC)/grabscreen.h sonar-icmp.o: $(UTILS_SRC)/hsv.h sonar-icmp.o: $(UTILS_SRC)/resources.h sonar-icmp.o: $(UTILS_SRC)/thread_util.h sonar-icmp.o: $(UTILS_SRC)/usleep.h sonar-icmp.o: $(UTILS_SRC)/version.h sonar-icmp.o: $(UTILS_SRC)/visual.h 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)/rotator.h sonar.o: $(HACK_SRC)/screenhackI.h sonar.o: $(srcdir)/sonar.h sonar.o: $(srcdir)/texfont.h sonar.o: $(UTILS_SRC)/aligned_malloc.h sonar.o: $(UTILS_SRC)/colors.h sonar.o: $(UTILS_SRC)/grabscreen.h sonar.o: $(UTILS_SRC)/hsv.h sonar.o: $(UTILS_SRC)/resources.h sonar.o: $(UTILS_SRC)/thread_util.h sonar.o: $(UTILS_SRC)/usleep.h sonar.o: $(UTILS_SRC)/visual.h sonar.o: $(UTILS_SRC)/xshm.h sonar.o: $(UTILS_SRC)/yarandom.h sonar.o: $(HACK_SRC)/xlockmoreI.h sonar.o: $(HACK_SRC)/xlockmore.h sonar-sim.o: ../../config.h sonar-sim.o: $(HACK_SRC)/fps.h sonar-sim.o: $(HACK_SRC)/screenhackI.h sonar-sim.o: $(srcdir)/sonar.h sonar-sim.o: $(UTILS_SRC)/colors.h sonar-sim.o: $(UTILS_SRC)/grabscreen.h sonar-sim.o: $(UTILS_SRC)/hsv.h sonar-sim.o: $(UTILS_SRC)/resources.h sonar-sim.o: $(UTILS_SRC)/usleep.h sonar-sim.o: $(UTILS_SRC)/visual.h sonar-sim.o: $(UTILS_SRC)/yarandom.h spheremonics.o: ../../config.h spheremonics.o: $(HACK_SRC)/fps.h spheremonics.o: $(srcdir)/gltrackball.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 spheremonics.o: $(UTILS_SRC)/resources.h spheremonics.o: $(UTILS_SRC)/usleep.h spheremonics.o: $(UTILS_SRC)/visual.h spheremonics.o: $(UTILS_SRC)/xshm.h 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)/sphere.h splitflap.o: ../../config.h splitflap.o: $(HACK_SRC)/fps.h splitflap.o: $(srcdir)/gllist.h splitflap.o: $(srcdir)/gltrackball.h splitflap.o: $(srcdir)/rotator.h splitflap.o: $(HACK_SRC)/screenhackI.h splitflap.o: $(srcdir)/texfont.h splitflap.o: $(UTILS_SRC)/colors.h splitflap.o: $(UTILS_SRC)/grabscreen.h splitflap.o: $(UTILS_SRC)/hsv.h splitflap.o: $(UTILS_SRC)/resources.h splitflap.o: $(UTILS_SRC)/textclient.h splitflap.o: $(UTILS_SRC)/usleep.h splitflap.o: $(UTILS_SRC)/utf8wc.h splitflap.o: $(UTILS_SRC)/visual.h splitflap.o: $(UTILS_SRC)/xshm.h splitflap.o: $(UTILS_SRC)/yarandom.h splitflap.o: $(HACK_SRC)/xlockmoreI.h splitflap.o: $(HACK_SRC)/xlockmore.h splitflap.o: $(srcdir)/xpm-ximage.h splitflap_obj.o: ../../config.h splitflap_obj.o: $(srcdir)/gllist.h splodesic.o: ../../config.h splodesic.o: $(HACK_SRC)/fps.h splodesic.o: $(srcdir)/gltrackball.h splodesic.o: $(srcdir)/normals.h splodesic.o: $(srcdir)/rotator.h splodesic.o: $(HACK_SRC)/screenhackI.h splodesic.o: $(UTILS_SRC)/colors.h splodesic.o: $(UTILS_SRC)/grabscreen.h splodesic.o: $(UTILS_SRC)/hsv.h splodesic.o: $(UTILS_SRC)/resources.h splodesic.o: $(UTILS_SRC)/usleep.h splodesic.o: $(UTILS_SRC)/visual.h splodesic.o: $(UTILS_SRC)/xshm.h splodesic.o: $(UTILS_SRC)/yarandom.h splodesic.o: $(HACK_SRC)/xlockmoreI.h splodesic.o: $(HACK_SRC)/xlockmore.h sproingies.o: ../../config.h sproingies.o: $(HACK_SRC)/fps.h sproingies.o: $(srcdir)/gllist.h sproingies.o: $(HACK_SRC)/screenhackI.h sproingies.o: $(srcdir)/sproingies.h sproingies.o: $(UTILS_SRC)/colors.h sproingies.o: $(UTILS_SRC)/grabscreen.h sproingies.o: $(UTILS_SRC)/hsv.h sproingies.o: $(UTILS_SRC)/resources.h sproingies.o: $(UTILS_SRC)/usleep.h sproingies.o: $(UTILS_SRC)/visual.h sproingies.o: $(UTILS_SRC)/xshm.h sproingies.o: $(UTILS_SRC)/yarandom.h sproingies.o: $(HACK_SRC)/xlockmoreI.h sproingiewrap.o: ../../config.h sproingiewrap.o: $(HACK_SRC)/fps.h sproingiewrap.o: $(HACK_SRC)/screenhackI.h sproingiewrap.o: $(srcdir)/sproingies.h sproingiewrap.o: $(UTILS_SRC)/colors.h sproingiewrap.o: $(UTILS_SRC)/grabscreen.h sproingiewrap.o: $(UTILS_SRC)/hsv.h sproingiewrap.o: $(UTILS_SRC)/resources.h sproingiewrap.o: $(UTILS_SRC)/usleep.h sproingiewrap.o: $(UTILS_SRC)/visual.h sproingiewrap.o: $(UTILS_SRC)/xshm.h sproingiewrap.o: $(UTILS_SRC)/yarandom.h sproingiewrap.o: $(HACK_SRC)/xlockmoreI.h sproingiewrap.o: $(HACK_SRC)/xlockmore.h stairs.o: ../../config.h stairs.o: $(HACK_SRC)/fps.h stairs.o: $(srcdir)/gltrackball.h stairs.o: $(HACK_SRC)/images/wood.xpm stairs.o: $(HACK_SRC)/screenhackI.h stairs.o: $(srcdir)/sphere.h stairs.o: $(UTILS_SRC)/colors.h stairs.o: $(UTILS_SRC)/grabscreen.h stairs.o: $(UTILS_SRC)/hsv.h stairs.o: $(UTILS_SRC)/resources.h stairs.o: $(UTILS_SRC)/usleep.h stairs.o: $(UTILS_SRC)/visual.h 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: $(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)/utf8wc.h starwars.o: $(UTILS_SRC)/visual.h starwars.o: $(UTILS_SRC)/xshm.h 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)/stonerview.h stonerview-move.o: $(srcdir)/stonerview-move.h stonerview-move.o: $(srcdir)/stonerview-osc.h stonerview-move.o: $(UTILS_SRC)/yarandom.h stonerview.o: ../../config.h stonerview.o: $(HACK_SRC)/fps.h stonerview.o: $(srcdir)/gltrackball.h stonerview.o: $(HACK_SRC)/screenhackI.h stonerview.o: $(srcdir)/stonerview.h stonerview.o: $(srcdir)/stonerview-move.h stonerview.o: $(srcdir)/stonerview-osc.h stonerview.o: $(UTILS_SRC)/colors.h stonerview.o: $(UTILS_SRC)/grabscreen.h stonerview.o: $(UTILS_SRC)/hsv.h stonerview.o: $(UTILS_SRC)/resources.h stonerview.o: $(UTILS_SRC)/usleep.h stonerview.o: $(UTILS_SRC)/visual.h stonerview.o: $(UTILS_SRC)/xshm.h 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)/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)/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: $(HACK_SRC)/screenhackI.h superquadrics.o: $(UTILS_SRC)/colors.h superquadrics.o: $(UTILS_SRC)/grabscreen.h superquadrics.o: $(UTILS_SRC)/hsv.h superquadrics.o: $(UTILS_SRC)/resources.h superquadrics.o: $(UTILS_SRC)/usleep.h superquadrics.o: $(UTILS_SRC)/visual.h superquadrics.o: $(UTILS_SRC)/xshm.h superquadrics.o: $(UTILS_SRC)/yarandom.h superquadrics.o: $(HACK_SRC)/xlockmoreI.h superquadrics.o: $(HACK_SRC)/xlockmore.h surfaces.o: ../../config.h surfaces.o: $(HACK_SRC)/fps.h surfaces.o: $(srcdir)/gltrackball.h surfaces.o: $(srcdir)/rotator.h surfaces.o: $(HACK_SRC)/screenhackI.h surfaces.o: $(UTILS_SRC)/colors.h surfaces.o: $(UTILS_SRC)/grabscreen.h surfaces.o: $(UTILS_SRC)/hsv.h surfaces.o: $(UTILS_SRC)/resources.h surfaces.o: $(UTILS_SRC)/usleep.h surfaces.o: $(UTILS_SRC)/visual.h surfaces.o: $(UTILS_SRC)/xshm.h surfaces.o: $(UTILS_SRC)/yarandom.h surfaces.o: $(HACK_SRC)/xlockmoreI.h surfaces.o: $(HACK_SRC)/xlockmore.h swim.o: $(srcdir)/atlantis.h swim.o: ../../config.h swim.o: $(HACK_SRC)/fps.h swim.o: $(HACK_SRC)/screenhackI.h swim.o: $(UTILS_SRC)/colors.h swim.o: $(UTILS_SRC)/grabscreen.h swim.o: $(UTILS_SRC)/hsv.h swim.o: $(UTILS_SRC)/resources.h swim.o: $(UTILS_SRC)/usleep.h swim.o: $(UTILS_SRC)/visual.h swim.o: $(UTILS_SRC)/xshm.h swim.o: $(UTILS_SRC)/yarandom.h swim.o: $(HACK_SRC)/xlockmoreI.h tangram.o: ../../config.h tangram.o: $(HACK_SRC)/fps.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 tangram.o: $(UTILS_SRC)/resources.h tangram.o: $(UTILS_SRC)/usleep.h tangram.o: $(UTILS_SRC)/visual.h 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)/tangram_shapes.h teapot.o: ../../config.h teapot.o: $(srcdir)/teapot.h texfont.o: ../../config.h texfont.o: $(HACK_SRC)/fps.h texfont.o: $(srcdir)/texfont.h texfont.o: $(UTILS_SRC)/resources.h texfont.o: $(UTILS_SRC)/xft.h texfont.o: $(UTILS_SRC)/xshm.h timetunnel.o: ../../config.h timetunnel.o: $(HACK_SRC)/fps.h timetunnel.o: $(srcdir)/gltrackball.h 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)/rotator.h timetunnel.o: $(HACK_SRC)/screenhackI.h timetunnel.o: $(UTILS_SRC)/colors.h timetunnel.o: $(UTILS_SRC)/grabscreen.h timetunnel.o: $(UTILS_SRC)/hsv.h timetunnel.o: $(UTILS_SRC)/images/logo-180.xpm timetunnel.o: $(UTILS_SRC)/resources.h timetunnel.o: $(UTILS_SRC)/usleep.h timetunnel.o: $(UTILS_SRC)/visual.h timetunnel.o: $(UTILS_SRC)/xshm.h 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 toaster_base.o: ../../config.h toaster_base.o: $(srcdir)/gllist.h toaster_handle2.o: ../../config.h toaster_handle2.o: $(srcdir)/gllist.h toaster_handle.o: ../../config.h toaster_handle.o: $(srcdir)/gllist.h toaster_jet.o: ../../config.h toaster_jet.o: $(srcdir)/gllist.h toaster_knob.o: ../../config.h toaster_knob.o: $(srcdir)/gllist.h toaster.o: ../../config.h toaster.o: $(srcdir)/gllist.h toaster_slots.o: ../../config.h toaster_slots.o: $(srcdir)/gllist.h toaster_wing.o: ../../config.h toaster_wing.o: $(srcdir)/gllist.h toast.o: ../../config.h toast.o: $(srcdir)/gllist.h topblock.o: ../../config.h topblock.o: $(HACK_SRC)/fps.h topblock.o: $(srcdir)/gltrackball.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 topblock.o: $(UTILS_SRC)/resources.h topblock.o: $(UTILS_SRC)/usleep.h topblock.o: $(UTILS_SRC)/visual.h topblock.o: $(UTILS_SRC)/xshm.h topblock.o: $(UTILS_SRC)/yarandom.h 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_idle2.o: ../../config.h tronbit_idle2.o: $(srcdir)/gllist.h tronbit_no.o: ../../config.h tronbit_no.o: $(srcdir)/gllist.h tronbit.o: ../../config.h tronbit.o: $(HACK_SRC)/fps.h tronbit.o: $(srcdir)/gllist.h tronbit.o: $(srcdir)/gltrackball.h tronbit.o: $(srcdir)/rotator.h tronbit.o: $(HACK_SRC)/screenhackI.h tronbit.o: $(srcdir)/sphere.h tronbit.o: $(UTILS_SRC)/colors.h tronbit.o: $(UTILS_SRC)/grabscreen.h tronbit.o: $(UTILS_SRC)/hsv.h tronbit.o: $(UTILS_SRC)/resources.h tronbit.o: $(UTILS_SRC)/usleep.h tronbit.o: $(UTILS_SRC)/visual.h 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 tube.o: ../../config.h tube.o: $(srcdir)/tube.h tunnel_draw.o: ../../config.h tunnel_draw.o: $(HACK_SRC)/fps.h tunnel_draw.o: $(HACK_SRC)/screenhackI.h tunnel_draw.o: $(srcdir)/tunnel_draw.h tunnel_draw.o: $(UTILS_SRC)/colors.h tunnel_draw.o: $(UTILS_SRC)/grabscreen.h tunnel_draw.o: $(UTILS_SRC)/hsv.h tunnel_draw.o: $(UTILS_SRC)/resources.h tunnel_draw.o: $(UTILS_SRC)/usleep.h tunnel_draw.o: $(UTILS_SRC)/visual.h tunnel_draw.o: $(UTILS_SRC)/xshm.h tunnel_draw.o: $(UTILS_SRC)/yarandom.h tunnel_draw.o: $(HACK_SRC)/xlockmoreI.h unicrud.o: ../../config.h unicrud.o: $(HACK_SRC)/fps.h unicrud.o: $(srcdir)/gltrackball.h unicrud.o: $(srcdir)/rotator.h unicrud.o: $(HACK_SRC)/screenhackI.h unicrud.o: $(srcdir)/texfont.h unicrud.o: $(UTILS_SRC)/colors.h unicrud.o: $(UTILS_SRC)/grabscreen.h unicrud.o: $(UTILS_SRC)/hsv.h unicrud.o: $(UTILS_SRC)/resources.h unicrud.o: $(UTILS_SRC)/usleep.h unicrud.o: $(UTILS_SRC)/utf8wc.h unicrud.o: $(UTILS_SRC)/visual.h unicrud.o: $(UTILS_SRC)/xshm.h unicrud.o: $(UTILS_SRC)/yarandom.h unicrud.o: $(HACK_SRC)/xlockmoreI.h unicrud.o: $(HACK_SRC)/xlockmore.h unknownpleasures.o: ../../config.h unknownpleasures.o: $(HACK_SRC)/fps.h unknownpleasures.o: $(srcdir)/gltrackball.h unknownpleasures.o: $(HACK_SRC)/screenhackI.h unknownpleasures.o: $(UTILS_SRC)/colors.h unknownpleasures.o: $(UTILS_SRC)/grabscreen.h unknownpleasures.o: $(UTILS_SRC)/hsv.h unknownpleasures.o: $(UTILS_SRC)/resources.h unknownpleasures.o: $(UTILS_SRC)/usleep.h unknownpleasures.o: $(UTILS_SRC)/visual.h unknownpleasures.o: $(UTILS_SRC)/xshm.h unknownpleasures.o: $(UTILS_SRC)/yarandom.h unknownpleasures.o: $(HACK_SRC)/xlockmoreI.h unknownpleasures.o: $(HACK_SRC)/xlockmore.h voronoi.o: ../../config.h voronoi.o: $(HACK_SRC)/fps.h voronoi.o: $(HACK_SRC)/screenhackI.h voronoi.o: $(UTILS_SRC)/colors.h voronoi.o: $(UTILS_SRC)/grabscreen.h voronoi.o: $(UTILS_SRC)/hsv.h voronoi.o: $(UTILS_SRC)/resources.h voronoi.o: $(UTILS_SRC)/usleep.h voronoi.o: $(UTILS_SRC)/visual.h voronoi.o: $(UTILS_SRC)/xshm.h voronoi.o: $(UTILS_SRC)/yarandom.h voronoi.o: $(HACK_SRC)/xlockmoreI.h voronoi.o: $(HACK_SRC)/xlockmore.h whale.o: $(srcdir)/atlantis.h whale.o: ../../config.h whale.o: $(HACK_SRC)/fps.h whale.o: $(HACK_SRC)/screenhackI.h whale.o: $(UTILS_SRC)/colors.h whale.o: $(UTILS_SRC)/grabscreen.h whale.o: $(UTILS_SRC)/hsv.h whale.o: $(UTILS_SRC)/resources.h whale.o: $(UTILS_SRC)/usleep.h whale.o: $(UTILS_SRC)/visual.h whale.o: $(UTILS_SRC)/yarandom.h winduprobot.o: ../../config.h winduprobot.o: $(HACK_SRC)/fps.h winduprobot.o: $(srcdir)/gllist.h winduprobot.o: $(srcdir)/gltrackball.h winduprobot.o: $(HACK_SRC)/images/chromesphere.xpm winduprobot.o: $(srcdir)/involute.h winduprobot.o: $(HACK_SRC)/screenhackI.h winduprobot.o: $(srcdir)/sphere.h winduprobot.o: $(srcdir)/texfont.h winduprobot.o: $(UTILS_SRC)/colors.h winduprobot.o: $(UTILS_SRC)/grabscreen.h winduprobot.o: $(UTILS_SRC)/hsv.h winduprobot.o: $(UTILS_SRC)/resources.h winduprobot.o: $(UTILS_SRC)/textclient.h winduprobot.o: $(UTILS_SRC)/usleep.h winduprobot.o: $(UTILS_SRC)/visual.h winduprobot.o: $(UTILS_SRC)/xshm.h winduprobot.o: $(UTILS_SRC)/yarandom.h winduprobot.o: $(HACK_SRC)/xlockmoreI.h winduprobot.o: $(HACK_SRC)/xlockmore.h winduprobot.o: $(srcdir)/xpm-ximage.h xlock-gl-utils.o: ../../config.h xlock-gl-utils.o: $(HACK_SRC)/fps.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 xlock-gl-utils.o: $(UTILS_SRC)/resources.h xlock-gl-utils.o: $(UTILS_SRC)/usleep.h xlock-gl-utils.o: $(UTILS_SRC)/visual.h xlock-gl-utils.o: $(UTILS_SRC)/xshm.h xlock-gl-utils.o: $(UTILS_SRC)/yarandom.h xlock-gl-utils.o: $(HACK_SRC)/xlockmoreI.h xpm-ximage.o: ../../config.h xpm-ximage.o: $(srcdir)/xpm-ximage.h xscreensaver-gl-helper.o: ../../config.h xscreensaver-gl-helper.o: $(UTILS_SRC)/utils.h xscreensaver-gl-helper.o: $(UTILS_SRC)/visual.h xscreensaver-5.36/hacks/glx/dxf2gl.pl000775 000767 000024 00000052421 12377530312 017560 0ustar00jwzstaff000000 000000 #!/usr/bin/perl -w # Copyright © 2003-2014 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. # # Reads a DXF file, and emits C data suitable for use with OpenGL's # glInterleavedArrays() and glDrawArrays() routines. # # Options: # # --normalize Compute the bounding box of the object, and scale all # coordinates so that the object fits inside a unit cube. # # --smooth When computing normals for the vertexes, average the # normals at any edge which is less than 90 degrees. # If this option is not specified, planar normals will be # used, resulting in a "faceted" object. # # --wireframe Emit lines instead of faces. # # --layers Emit a separate set of polygons for each layer in the # input file, instead of emitting the whole file as a # single unit. # # Created: 8-Mar-2003. require 5; use diagnostics; use strict; use POSIX qw(mktime strftime); use Math::Trig qw(acos); use Text::Wrap; my $progname = $0; $progname =~ s@.*/@@g; my ($version) = ('$Revision: 1.11 $' =~ m/\s(\d[.\d]+)\s/s); my $verbose = 0; # convert a vector to a unit vector sub normalize($$$) { my ($x, $y, $z) = @_; my $L = sqrt (($x * $x) + ($y * $y) + ($z * $z)); if ($L != 0) { $x /= $L; $y /= $L; $z /= $L; } else { $x = $y = $z = 0; } return ($x, $y, $z); } # Calculate the unit normal at p0 given two other points p1,p2 on the # surface. The normal points in the direction of p1 crossproduct p2. # sub face_normal($$$$$$$$$) { my ($p0x, $p0y, $p0z, $p1x, $p1y, $p1z, $p2x, $p2y, $p2z) = @_; my ($nx, $ny, $nz); my ($pax, $pay, $paz); my ($pbx, $pby, $pbz); $pax = $p1x - $p0x; $pay = $p1y - $p0y; $paz = $p1z - $p0z; $pbx = $p2x - $p0x; $pby = $p2y - $p0y; $pbz = $p2z - $p0z; $nx = $pay * $pbz - $paz * $pby; $ny = $paz * $pbx - $pax * $pbz; $nz = $pax * $pby - $pay * $pbx; return (normalize ($nx, $ny, $nz)); } my $pi = 3.141592653589793; my $radians_to_degrees = 180.0 / $pi; # Calculate the angle (in degrees) between two vectors. # sub vector_angle($$$$$$) { my ($x1, $y1, $z1, $x2, $y2, $z2) = @_; my $L1 = sqrt ($x1*$x1 + $y1*$y1 + $z1*$z1); my $L2 = sqrt ($x2*$x2 + $y2*$y2 + $z2*$z2); return 0 if ($L1 == 0 || $L2 == 0); return 0 if ($x1 == $x2 && $y1 == $y2 && $z1 == $z2); # dot product of two vectors is defined as: # $L1 * $L1 * cos(angle between vectors) # and is also defined as: # $x1*$x2 + $y1*$y2 + $z1*$z2 # so: # $L1 * $L1 * cos($angle) = $x1*$x2 + $y1*$y2 + $z1*$z2 # cos($angle) = ($x1*$x2 + $y1*$y2 + $z1*$z2) / ($L1 * $L2) # $angle = acos (($x1*$x2 + $y1*$y2 + $z1*$z2) / ($L1 * $L2)); # my $cos = ($x1*$x2 + $y1*$y2 + $z1*$z2) / ($L1 * $L2); $cos = 1 if ($cos > 1); # avoid fp rounding error (1.000001 => sqrt error) my $angle = acos ($cos); return ($angle * $radians_to_degrees); } # given a list of triangles ( [ X1, Y1, Z1, X2, Y2, Z2, X3, Y3, Z3, ]+ ) # returns a list of the normals for each vertex. These are the smoothed # normals: the average of the normals of the participating faces. # sub compute_vertex_normals(@) { my (@points) = @_; my $npoints = ($#points+1) / 3; my $nfaces = $npoints / 3; my @face_normals = (); my %point_faces; for (my $i = 0; $i < $nfaces; $i++) { my ($ax, $ay, $az, $bx, $by, $bz, $cx, $cy, $cz) = @points[($i*9) .. ($i*9)+8]; # store the normal for each face in the $face_normals array # indexed by face number. # my @norm = face_normal ($ax, $ay, $az, $bx, $by, $bz, $cx, $cy, $cz); $face_normals[$i] = \@norm; # store in the %point_faces hash table a list of every face number # in which a point participates foreach my $p ("$ax $ay $az", "$bx $by $bz", "$cx $cy $cz") { my @flist = (defined($point_faces{$p}) ? @{$point_faces{$p}} : ()); push @flist, $i; $point_faces{$p} = \@flist; } } # compute the normal for each vertex of each face. # (these points are not unique -- because there might be multiple # normals associated with the same vertex for different faces, # in the case where it's a sharp angle.) # my @normals = (); for (my $i = 0; $i < $nfaces; $i++) { my @verts = @points[($i*9) .. ($i*9)+8]; error ("overshot in points?") unless defined($verts[8]); my @norm = @{$face_normals[$i]}; error ("no normal $i?") unless defined($norm[2]); # iterate over the (three) vertexes in this face. # for (my $j = 0; $j < 3; $j++) { my ($x, $y, $z) = @verts[($j*3) .. ($j*3)+2]; error ("overshot in verts?") unless defined($z); # Iterate over the faces in which this point participates. # But ignore any other faces that are at more than an N degree # angle from this point's face. Those are sharp edges. # my ($nx, $ny, $nz) = (0, 0, 0); my @faces = @{$point_faces{"$x $y $z"}}; foreach my $fn (@faces) { my ($ax, $ay, $az, $bx, $by, $bz, $cx, $cy, $cz) = @points[($fn*9) .. ($fn*9)+8]; my @fnorm = @{$face_normals[$fn]}; # ignore any adjascent faces that are more than N degrees off. my $angle = vector_angle ($norm[0], $norm[1], $norm[2], $fnorm[0], $fnorm[1], $fnorm[2]); next if ($angle >= 30); $nx += $fnorm[0]; $ny += $fnorm[1]; $nz += $fnorm[2]; } push @normals, normalize ($nx, $ny, $nz); } } return @normals; } sub parse_dxf($$$$$) { my ($filename, $dxf, $normalize_p, $wireframe_p, $layers_p) = @_; $dxf =~ s/\r\n/\n/gs; # CRLF $dxf =~ s/^[ \t\n]+|[ \t\n]+$//s; # leading/trailing whitespace # Convert whitespace within a line to _, e.g., "ObjectDBX Classes". # What the hell is up with this file format! 1 while ($dxf =~ s/([^ \t\n])[ \t]+([^ \t\n])/$1_$2/gs); $dxf =~ s/\r/\n/gs; # Turn blank lines into "", e.g., "$DIMBLK \n 1 \n \n 9 \n" $dxf =~ s/\n\n/\n""\n/gs; my @tokens = split (/[ \t\n]+/, $dxf); # tokenize my @entities = (); # parse while (@tokens) { my @elts = (); my $key = shift @tokens; # sectionize at "0 WORD" do { my $val = shift @tokens; push @elts, [ $key, $val ]; # contents are [CODE VAL] $key = shift @tokens; } while ($key && $key ne 0); unshift @tokens, $key if defined($key); push @entities, \@elts; } my %triangles; # list of points, indexed by layer name my %lines; my $error_count = 0; foreach my $entity (@entities) { my $header = shift @$entity; my ($code, $name) = @$header; if ($name eq 'SECTION' || $name eq 'HEADER' || $name eq 'ENDSEC' || $name eq 'EOF') { print STDERR "$progname: $filename: ignoring \"$code $name\"\n" if ($verbose > 1); } elsif ($name eq '3DFACE') { my @points = (); my $pc = 0; my $layer = ''; foreach my $entry (@$entity) { my ($key, $val) = @$entry; if ($key eq 8) { $layer = $val; # layer name } elsif ($key eq 10) { $pc++; $points[0] = $val; # X1 } elsif ($key eq 20) { $pc++; $points[1] = $val; # Y1 } elsif ($key eq 30) { $pc++; $points[2] = $val; # Z1 } elsif ($key eq 11) { $pc++; $points[3] = $val; # X2 } elsif ($key eq 21) { $pc++; $points[4] = $val; # Y2 } elsif ($key eq 31) { $pc++; $points[5] = $val; # Z2 } elsif ($key eq 12) { $pc++; $points[6] = $val; # X3 } elsif ($key eq 22) { $pc++; $points[7] = $val; # Y3 } elsif ($key eq 32) { $pc++; $points[8] = $val; # Z3 } elsif ($key eq 13) { $pc++; $points[9] = $val; # X4 } elsif ($key eq 23) { $pc++; $points[10] = $val; # Y4 } elsif ($key eq 33) { $pc++; $points[11] = $val; # Z4 } elsif ($key eq 62) { # color number } elsif ($key eq 70) { # invisible edge flag } else { print STDERR "$progname: $filename: WARNING:" . " unknown $name: \"$key $val\"\n"; $error_count++; } } error ("got $pc points in $name") unless ($pc == 12); if ($points[6] != $points[9] || $points[7] != $points[10] || $points[8] != $points[11]) { error ("$filename: got a quad, not a triangle\n"); } else { @points = @points[0 .. 8]; } foreach (@points) { $_ += 0; } # convert strings to numbers $layer = '' unless $layers_p; $triangles{$layer} = [] unless defined ($triangles{$layer}); push @{$triangles{$layer}}, @points; } elsif ($name eq 'LINE') { my @points = (); my $pc = 0; my $layer = ''; foreach my $entry (@$entity) { my ($key, $val) = @$entry; if ($key eq 8) { $layer = $val; # layer name } elsif ($key eq 10) { $pc++; $points[0] = $val; # X1 } elsif ($key eq 20) { $pc++; $points[1] = $val; # Y1 } elsif ($key eq 30) { $pc++; $points[2] = $val; # Z1 } elsif ($key eq 11) { $pc++; $points[3] = $val; # X2 } elsif ($key eq 21) { $pc++; $points[4] = $val; # Y2 } elsif ($key eq 31) { $pc++; $points[5] = $val; # Z2 } elsif ($key eq 39) { # thickness } elsif ($key eq 62) { # color number } else { print STDERR "$progname: $filename: WARNING:" . " unknown $name: \"$key $val\"\n"; $error_count++; } } error ("got $pc points in $name") unless ($pc == 6); foreach (@points) { $_ += 0; } # convert strings to numbers $layer = '' unless $layers_p; $lines{$layer} = [] unless defined ($lines{$layer}); push @{$lines{$layer}}, @points; } elsif ($name =~ m/^\d+$/s) { error ("sequence lost: \"$code $name\""); } else { print STDERR "$progname: $filename: WARNING: unknown: \"$code $name\"\n"; $error_count++; } error ("too many errors: bailing!") if ($error_count > 50); } if ($wireframe_p) { # Convert faces to lines. # Don't duplicate shared edges. foreach my $layer (keys %triangles) { my %dups; my @triangles = @{$triangles{$layer}}; while (@triangles) { my $x1 = shift @triangles; # 0 my $y1 = shift @triangles; # 1 my $z1 = shift @triangles; # 2 my $x2 = shift @triangles; # 3 my $y2 = shift @triangles; # 4 my $z2 = shift @triangles; # 5 my $x3 = shift @triangles; # 6 my $y3 = shift @triangles; # 7 my $z3 = shift @triangles; # 8 my $p = sub(@) { my ($x1, $y1, $z1, $x2, $y2, $z2) = @_; my $key1 = "$x1, $y1, $z1, $x2, $y2, $z2"; my $key2 = "$x2, $y2, $z2, $x1, $y1, $z1"; my $dup = $dups{$key1} || $dups{$key2}; $dups{$key1} = 1; $dups{$key2} = 1; push @{$lines{$layer}}, @_ unless $dup; } ; $p->($x1, $y1, $z1, $x2, $y2, $z2); $p->($x2, $y2, $z2, $x3, $y3, $z3); $p->($x3, $y3, $z3, $x1, $y1, $z1); } @{$triangles{$layer}} = (); } } else { foreach my $layer (keys %lines) { my $n = @{$lines{$layer}}; @{$lines{$layer}} = (); print STDERR "$progname: $filename: $layer: WARNING:" . " ignored $n stray LINE" . ($n == 1 ? "" : "s") . ".\n" if ($n); } } # find bounding box, and normalize # if ($normalize_p || $verbose) { my $minx = 999999999; my $miny = 999999999; my $minz = 999999999; my $maxx = -999999999; my $maxy = -999999999; my $maxz = -999999999; my $i = 0; foreach my $layer (keys %triangles) { my %dups; my @triangles = @{$triangles{$layer}}; foreach my $n (@{$lines{$layer}}, @{$triangles{$layer}}) { if ($i == 0) { $minx = $n if ($n < $minx); $maxx = $n if ($n > $maxx); } elsif ($i == 1) { $miny = $n if ($n < $miny); $maxy = $n if ($n > $maxy); } else { $minz = $n if ($n < $minz); $maxz = $n if ($n > $maxz); } $i = 0 if (++$i == 3); } } my $w = ($maxx - $minx); my $h = ($maxy - $miny); my $d = ($maxz - $minz); my $sizea = ($w > $h ? $w : $h); my $sizeb = ($w > $d ? $w : $d); my $size = ($sizea > $sizeb ? $sizea : $sizeb); print STDERR "$progname: $filename: bbox is " . sprintf("%.2f x %.2f x %.2f\n", $w, $h, $d) if ($verbose); print STDERR "$progname: $filename: center is " . sprintf("%.2f, %.2f, %.2f\n", $minx + $w / 2, $miny + $h / 2, $minz + $d / 2) if ($verbose); if ($normalize_p) { $w /= $size; $h /= $size; $d /= $size; print STDERR "$progname: $filename: dividing by " . sprintf("%.2f", $size) . " for bbox of " . sprintf("%.2f x %.2f x %.2f\n", $w, $h, $d) if ($verbose); foreach my $layer (keys %triangles) { foreach my $n (@{$triangles{$layer}}) { $n /= $size; } foreach my $n (@{$lines{$layer}}) { $n /= $size; } } } } return ($wireframe_p ? \%lines : \%triangles); } sub generate_c_1($$$$$@) { my ($name, $outfile, $smooth_p, $wireframe_p, $normalize_p, @points) = @_; my $ccw_p = 1; # counter-clockwise winding rule for computing normals my $npoints = ($#points + 1) / 3; my $nfaces = ($wireframe_p ? $npoints/2 : $npoints/3); my @normals; if ($smooth_p && !$wireframe_p) { @normals = compute_vertex_normals (@points); if ($#normals != $#points) { error ("computed " . (($#normals+1)/3) . " normals for " . (($#points+1)/3) . " points?"); } } my $code .= "\nstatic const float ${name}_data[] = {\n"; if ($wireframe_p) { my %dups; for (my $i = 0; $i < $nfaces; $i++) { my $ax = $points[$i*6]; my $ay = $points[$i*6+1]; my $az = $points[$i*6+2]; my $bx = $points[$i*6+3]; my $by = $points[$i*6+4]; my $bz = $points[$i*6+5]; my $lines = sprintf("\t" . "%.6f,%.6f,%.6f,\n" . "\t" . "%.6f,%.6f,%.6f,\n", $ax, $ay, $az, $bx, $by, $bz); $lines =~ s/([.\d])0+,/$1,/g; # lose trailing insignificant zeroes $lines =~ s/\.,/,/g; $lines =~ s/-0,/0,/g; $code .= $lines; } } else { for (my $i = 0; $i < $nfaces; $i++) { my $ax = $points[$i*9]; my $ay = $points[$i*9+1]; my $az = $points[$i*9+2]; my $bx = $points[$i*9+3]; my $by = $points[$i*9+4]; my $bz = $points[$i*9+5]; my $cx = $points[$i*9+6]; my $cy = $points[$i*9+7]; my $cz = $points[$i*9+8]; my ($nax, $nay, $naz, $nbx, $nby, $nbz, $ncx, $ncy, $ncz); if ($smooth_p) { $nax = $normals[$i*9]; $nay = $normals[$i*9+1]; $naz = $normals[$i*9+2]; $nbx = $normals[$i*9+3]; $nby = $normals[$i*9+4]; $nbz = $normals[$i*9+5]; $ncx = $normals[$i*9+6]; $ncy = $normals[$i*9+7]; $ncz = $normals[$i*9+8]; } else { if ($ccw_p) { ($nax, $nay, $naz) = face_normal ($ax, $ay, $az, $bx, $by, $bz, $cx, $cy, $cz); } else { ($nax, $nay, $naz) = face_normal ($ax, $ay, $az, $cx, $cy, $cz, $bx, $by, $bz); } ($nbx, $nby, $nbz) = ($nax, $nay, $naz); ($ncx, $ncy, $ncz) = ($nax, $nay, $naz); } my $lines = sprintf("\t" . "%.6f,%.6f,%.6f," . "%.6f,%.6f,%.6f,\n" . "\t" . "%.6f,%.6f,%.6f," . "%.6f,%.6f,%.6f,\n" . "\t" . "%.6f,%.6f,%.6f," . "%.6f,%.6f,%.6f,\n", $nax, $nay, $naz, $ax, $ay, $az, $nbx, $nby, $nbz, $bx, $by, $bz, $ncx, $ncy, $ncz, $cx, $cy, $cz); $lines =~ s/([.\d])0+,/$1,/g; # lose trailing insignificant zeroes $lines =~ s/\.,/,/g; $lines =~ s/-0,/0,/g; $code .= $lines; } } my $format = ($wireframe_p ? 'GL_V3F' : 'GL_N3F_V3F'); my $primitive = ($wireframe_p ? 'GL_LINES' : 'GL_TRIANGLES'); $code =~ s/,\n$//s; $code .= "\n};\n"; $code .= "static const struct gllist ${name}_frame = {\n"; $code .= " $format, $primitive, $npoints, ${name}_data, 0\n};\n"; $code .= "const struct gllist *$name = &${name}_frame;\n"; print STDERR "$progname: $outfile: $name: $npoints points, $nfaces faces.\n" if ($verbose); return ($code, $npoints, $nfaces); } sub generate_c($$$$$$) { my ($infile, $outfile, $smooth_p, $wireframe_p, $normalize_p, $layers) = @_; my $code = ''; my $token = $outfile; # guess at a C token from the filename $token =~ s/\<[^<>]*\>//; $token =~ s@^.*/@@; $token =~ s/\.[^.]*$//; $token =~ s/[^a-z\d]/_/gi; $token =~ s/__+/_/g; $token =~ s/^_//g; $token =~ s/_$//g; $token =~ tr [A-Z] [a-z]; $token = 'foo' if ($token eq ''); my @layers = sort (keys %$layers); $infile =~ s@^.*/@@s; $code .= ("/* Generated from \"$infile\" on " . strftime ("%d-%b-%Y", localtime ()) . ".\n" . " " . ($wireframe_p ? "Wireframe." : ($smooth_p ? "Smoothed vertex normals." : "Faceted face normals.")) . ($normalize_p ? " Normalized to unit bounding box." : "") . "\n" . (@layers > 1 ? wrap (" ", " ", "Components: " . join (", ", @layers)) . ".\n" : "") . " */\n\n"); $code .= "#include \"gllist.h\"\n"; my $npoints = 0; my $nfaces = 0; foreach my $layer (@layers) { my $name = $layer ? "${token}_${layer}" : $token; my ($c, $np, $nf) = generate_c_1 ($name, $outfile, $smooth_p, $wireframe_p, $normalize_p, @{$layers->{$layer}}); $code .= $c; $npoints += $np; $nfaces += $nf; } print STDERR "$progname: $outfile: total: $npoints points, $nfaces faces.\n" if ($verbose && @layers > 1); return $code; } # Returns true if the two files differ (by running "cmp") # sub cmp_files($$) { my ($file1, $file2) = @_; my @cmd = ("cmp", "-s", "$file1", "$file2"); print STDERR "$progname: executing \"" . join(" ", @cmd) . "\"\n" if ($verbose > 3); system (@cmd); my $exit_value = $? >> 8; my $signal_num = $? & 127; my $dumped_core = $? & 128; error ("$cmd[0]: core dumped!") if ($dumped_core); error ("$cmd[0]: signal $signal_num!") if ($signal_num); return $exit_value; } sub dxf_to_gl($$$$$$) { my ($infile, $outfile, $smooth_p, $normalize_p, $wireframe_p, $layers_p) = @_; open (my $in, "<$infile") || error ("$infile: $!"); my $filename = ($infile eq '-' ? "" : $infile); print STDERR "$progname: reading $filename...\n" if ($verbose); local $/ = undef; # read entire file my $dxf = <$in>; close $in; my $data = parse_dxf ($filename, $dxf, $normalize_p, $wireframe_p, $layers_p); $filename = ($outfile eq '-' ? "" : $outfile); my $code = generate_c ($infile, $filename, $smooth_p, $wireframe_p, $normalize_p, $data); if ($outfile eq '-') { print STDOUT $code; } else { my $tmp = "$outfile.tmp"; open (my $out, '>', $tmp) || error ("$tmp: $!"); print $out $code || error ("$filename: $!"); close $out || error ("$filename: $!"); if (cmp_files ($filename, $tmp)) { if (!rename ($tmp, $filename)) { unlink $tmp; error ("mv $tmp $filename: $!"); } print STDERR "$progname: wrote $filename\n"; } else { unlink "$tmp" || error ("rm $tmp: $!\n"); print STDERR "$progname: $filename unchanged\n" if ($verbose); } } } sub error() { ($_) = @_; print STDERR "$progname: $_\n"; exit 1; } sub usage() { print STDERR "usage: $progname " . "[--verbose] [--normalize] [--smooth] [--wireframe] [--layers]\n" . "[infile [outfile]]\n"; exit 1; } sub main() { my ($infile, $outfile); my $normalize_p = 0; my $smooth_p = 0; my $wireframe_p = 0; my $layers_p = 0; while ($_ = $ARGV[0]) { shift @ARGV; if ($_ eq "--verbose") { $verbose++; } elsif (m/^-v+$/) { $verbose += length($_)-1; } elsif ($_ eq "--normalize") { $normalize_p = 1; } elsif ($_ eq "--smooth") { $smooth_p = 1; } elsif ($_ eq "--wireframe") { $wireframe_p = 1; } elsif ($_ eq "--layers") { $layers_p = 1; } elsif (m/^-./) { usage; } elsif (!defined($infile)) { $infile = $_; } elsif (!defined($outfile)) { $outfile = $_; } else { usage; } } $infile = "-" unless defined ($infile); $outfile = "-" unless defined ($outfile); dxf_to_gl ($infile, $outfile, $smooth_p, $normalize_p, $wireframe_p, $layers_p); } main; exit 0; xscreensaver-5.36/hacks/glx/vrml2gl.pl000775 000767 000024 00000022362 12644632422 017762 0ustar00jwzstaff000000 000000 #!/usr/bin/perl -w # Copyright © 2003-2011 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. # # Reads a VRML WRL file, and emits C data suitable for use with OpenGL's # glInterleavedArrays() and glDrawArrays() routines. # # Face normals are computed. # # Options: # # --normalize Compute the bounding box of the object, and scale all # coordinates so that the object fits inside a unit cube. # # Created: 8-Mar-2003 for Wavefront OBJ, converted to VRML 27-Sep-2011. require 5; use diagnostics; use strict; my $progname = $0; $progname =~ s@.*/@@g; my ($version) = ('$Revision: 1.2 $' =~ m/\s(\d[.\d]+)\s/s); my $verbose = 0; # convert a vector to a unit vector sub normalize($$$) { my ($x, $y, $z) = @_; my $L = sqrt (($x * $x) + ($y * $y) + ($z * $z)); if ($L != 0) { $x /= $L; $y /= $L; $z /= $L; } else { $x = $y = $z = 0; } return ($x, $y, $z); } # Calculate the unit normal at p0 given two other points p1,p2 on the # surface. The normal points in the direction of p1 crossproduct p2. # sub face_normal($$$$$$$$$) { my ($p0x, $p0y, $p0z, $p1x, $p1y, $p1z, $p2x, $p2y, $p2z) = @_; my ($nx, $ny, $nz); my ($pax, $pay, $paz); my ($pbx, $pby, $pbz); $pax = $p1x - $p0x; $pay = $p1y - $p0y; $paz = $p1z - $p0z; $pbx = $p2x - $p0x; $pby = $p2y - $p0y; $pbz = $p2z - $p0z; $nx = $pay * $pbz - $paz * $pby; $ny = $paz * $pbx - $pax * $pbz; $nz = $pax * $pby - $pay * $pbx; return (normalize ($nx, $ny, $nz)); } sub parse_vrml_1($$$) { my ($filename, $body, $normalize_p) = @_; my @verts = (); # list of refs of coords, [x, y, z] my @faces = (); # list of refs of [ point, point, point, ... ] # where 'point' is a list of indexes into 'verts'. $body =~ s% \b point \s* \[ (.*?) \] %{ foreach my $point (split (/,/, $1)) { $point =~ s/^\s+|\s+$//gsi; next unless $point; my @p = split(/\s+/, $point); push @verts, \@p; } }%gsexi; $body =~ s% \b coordIndex \s* \[ (.*?) \] %{ foreach my $face (split (/\s*,-1,?\s*/, $1)) { $face =~ s/^\s+|\s+$//gsi; next unless $face; my @p = split(/\s*,\s*/, $face); push @faces, \@p; } }%gsexi; return () if ($#verts < 0); # generate interleaved list of triangle coordinates and normals # my @triangles = (); my $nfaces = $#faces+1; foreach my $f (@faces) { # $f is [ p1, p2, p3, ... ] my @f = @$f; error ("too few points in face") if ($#f < 2); my $p1 = shift @f; # If there are more than 3 points, do a triangle fan from the first one: # [1 2 3] [1 3 4] [1 4 5] etc. Doesn't always work with convex shapes. while ($#f) { my $p2 = shift @f; my $p3 = $f[0]; my ($pp1, $pp2, $pp3) = ($p1, $p2, $p3); # Reverse the winding order. # ($pp1, $pp2, $pp3) = ($pp3, $pp2, $pp1); my $x1 = $verts[$pp1]->[0]; my $y1 = $verts[$pp1]->[1]; my $z1 = $verts[$pp1]->[2]; my $x2 = $verts[$pp2]->[0]; my $y2 = $verts[$pp2]->[1]; my $z2 = $verts[$pp2]->[2]; my $x3 = $verts[$pp3]->[0]; my $y3 = $verts[$pp3]->[1]; my $z3 = $verts[$pp3]->[2]; error ("missing points in face") unless defined($z3); my ($nx, $ny, $nz) = face_normal ($x1, $y1, $z1, $x2, $y2, $z2, $x3, $y3, $z3); push @triangles, [$nx, $ny, $nz, $x1, $y1, $z1, $nx, $ny, $nz, $x2, $y2, $z2, $nx, $ny, $nz, $x3, $y3, $z3]; } } return (@triangles); } sub parse_vrml($$$) { my ($filename, $body, $normalize_p) = @_; my @triangles = (); $body =~ s/\s*\#.*$//gmi; # comments # Lose 2D imagery $body =~ s/\bIndexedLineSet \s* { \s* coordIndex \s* \[ .*? \] \s* }//gsix; $body =~ s/(\bSeparator\b)/\001$1/g; foreach my $sec (split (m/\001/, $body)) { push @triangles, parse_vrml_1 ($filename, $sec, $normalize_p); } # find bounding box, and normalize # if ($normalize_p || $verbose) { my $minx = 999999999; my $miny = 999999999; my $minz = 999999999; my $maxx = -999999999; my $maxy = -999999999; my $maxz = -999999999; my $i = 0; foreach my $t (@triangles) { my ($nx1, $ny1, $nz1, $x1, $y1, $z1, $nx2, $ny2, $nz2, $x2, $y2, $z2, $nx3, $ny3, $nz3, $x3, $y3, $z3) = @$t; foreach my $x ($x1, $x2, $x3) { $minx = $x if ($x < $minx); $maxx = $x if ($x > $maxx); } foreach my $y ($y1, $y2, $y3) { $miny = $y if ($y < $miny); $maxy = $y if ($y > $maxy); } foreach my $z ($z1, $z2, $z3) { $minz = $z if ($z < $minz); $maxz = $z if ($z > $maxz); } } my $w = ($maxx - $minx); my $h = ($maxy - $miny); my $d = ($maxz - $minz); my $sizea = ($w > $h ? $w : $h); my $sizeb = ($w > $d ? $w : $d); my $size = ($sizea > $sizeb ? $sizea : $sizeb); print STDERR "$progname: bbox is " . sprintf("%.2f x %.2f x %.2f\n", $w, $h, $d) if ($verbose); if ($normalize_p) { $w /= $size; $h /= $size; $d /= $size; print STDERR "$progname: dividing by $size for bbox of " . sprintf("%.2f x %.2f x %.2f\n", $w, $h, $d) if ($verbose); foreach my $t (@triangles) { my @t = @$t; $t[3] /= $size; $t[4] /= $size; $t[5] /= $size; $t[9] /= $size; $t[10] /= $size; $t[11] /= $size; $t[15] /= $size; $t[16] /= $size; $t[17] /= $size; $t = \@t; } } } return @triangles; } sub generate_c($@) { my ($filename, @triangles) = @_; my $code = ''; $code .= "#include \"gllist.h\"\n"; $code .= "static const float data[]={\n"; my $nfaces = $#triangles + 1; my $npoints = $nfaces * 3; foreach my $t (@triangles) { my ($nx1, $ny1, $nz1, $x1, $y1, $z1, $nx2, $ny2, $nz2, $x2, $y2, $z2, $nx3, $ny3, $nz3, $x3, $y3, $z3) = @$t; my $lines = sprintf("\t" . "%.6f,%.6f,%.6f," . "%.6f,%.6f,%.6f,\n" . "\t" . "%.6f,%.6f,%.6f," . "%.6f,%.6f,%.6f,\n" . "\t" . "%.6f,%.6f,%.6f," . "%.6f,%.6f,%.6f,\n", $nx1, $ny1, $nz1, $x1, $y1, $z1, $nx2, $ny2, $nz2, $x2, $y2, $z2, $nx3, $ny3, $nz3, $x3, $y3, $z3); $lines =~ s/([.\d])0+,/$1,/g; # lose trailing insignificant zeroes $lines =~ s/\.,/,/g; $lines =~ s/-0,/0,/g; $code .= $lines; } my $token = $filename; # guess at a C token from the filename $token =~ s/\<[^<>]*\>//; $token =~ s@^.*/@@; $token =~ s/\.[^.]*$//; $token =~ s/[^a-z\d]/_/gi; $token =~ s/__+/_/g; $token =~ s/^_//g; $token =~ s/_$//g; $token =~ tr [A-Z] [a-z]; $token = 'foo' if ($token eq ''); my $format = 'GL_N3F_V3F'; my $primitive = 'GL_TRIANGLES'; $code =~ s/,\n$//s; $code .= "\n};\n"; $code .= "static const struct gllist frame={"; $code .= "$format,$primitive,$npoints,data,NULL};\n"; $code .= "const struct gllist *$token=&frame;\n"; print STDERR "$filename: " . (($#triangles+1)*3) . " points, " . (($#triangles+1)) . " faces.\n" if ($verbose); return $code; } sub vrml_to_gl($$$) { my ($infile, $outfile, $normalize_p) = @_; my $body = ''; my $in; if ($infile eq '-') { $in = *STDIN; } else { open ($in, '<', $infile) || error ("$infile: $!"); } my $filename = ($infile eq '-' ? "" : $infile); print STDERR "$progname: reading $filename...\n" if ($verbose); while (<$in>) { $body .= $_; } close $in; $body =~ s/\r\n/\n/g; # CRLF -> LF $body =~ s/\r/\n/g; # CR -> LF my @triangles = parse_vrml ($filename, $body, $normalize_p); $filename = ($outfile eq '-' ? "" : $outfile); my $code = generate_c ($filename, @triangles); my $out; if ($outfile eq '-') { $out = *STDOUT; } else { open ($out, '>', $outfile) || error ("$outfile: $!"); } (print $out $code) || error ("$filename: $!"); (close $out) || error ("$filename: $!"); print STDERR "$progname: wrote $filename\n" if ($verbose || $outfile ne '-'); } sub error { ($_) = @_; print STDERR "$progname: $_\n"; exit 1; } sub usage { print STDERR "usage: $progname [--verbose] [infile [outfile]]\n"; exit 1; } sub main { my ($infile, $outfile); my $normalize_p = 0; while ($_ = $ARGV[0]) { shift @ARGV; if ($_ eq "--verbose") { $verbose++; } elsif (m/^-v+$/) { $verbose += length($_)-1; } elsif ($_ eq "--normalize") { $normalize_p = 1; } elsif (m/^-./) { usage; } elsif (!defined($infile)) { $infile = $_; } elsif (!defined($outfile)) { $outfile = $_; } else { usage; } } $infile = "-" unless defined ($infile); $outfile = "-" unless defined ($outfile); vrml_to_gl ($infile, $outfile, $normalize_p); } main; exit 0; xscreensaver-5.36/hacks/glx/wfront2gl.pl000775 000767 000024 00000024171 12644632423 020322 0ustar00jwzstaff000000 000000 #!/usr/bin/perl -w # Copyright © 2003-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. # # Reads a Wavefront OBJ file, and emits C data suitable for use with OpenGL's # glInterleavedArrays() and glDrawArrays() routines. # # If the OBJ file does not contain face normals, they are computed. # Texture coordinates are ignored. # # Options: # # --normalize Compute the bounding box of the object, and scale all # coordinates so that the object fits inside a unit cube. # # Created: 8-Mar-2003. require 5; use diagnostics; use strict; my $progname = $0; $progname =~ s@.*/@@g; my ($version) = ('$Revision: 1.6 $' =~ m/\s(\d[.\d]+)\s/s); my $verbose = 0; # convert a vector to a unit vector sub normalize($$$) { my ($x, $y, $z) = @_; my $L = sqrt (($x * $x) + ($y * $y) + ($z * $z)); if ($L != 0) { $x /= $L; $y /= $L; $z /= $L; } else { $x = $y = $z = 0; } return ($x, $y, $z); } # Calculate the unit normal at p0 given two other points p1,p2 on the # surface. The normal points in the direction of p1 crossproduct p2. # sub face_normal($$$$$$$$$) { my ($p0x, $p0y, $p0z, $p1x, $p1y, $p1z, $p2x, $p2y, $p2z) = @_; my ($nx, $ny, $nz); my ($pax, $pay, $paz); my ($pbx, $pby, $pbz); $pax = $p1x - $p0x; $pay = $p1y - $p0y; $paz = $p1z - $p0z; $pbx = $p2x - $p0x; $pby = $p2y - $p0y; $pbz = $p2z - $p0z; $nx = $pay * $pbz - $paz * $pby; $ny = $paz * $pbx - $pax * $pbz; $nz = $pax * $pby - $pay * $pbx; return (normalize ($nx, $ny, $nz)); } sub parse_obj($$$) { my ($filename, $obj, $normalize_p) = @_; $_ = $obj; my @verts = (); # list of refs of coords, [x, y, z] my @norms = (); # list of refs of coords, [x, y, z] my @texts = (); # list of refs of coords, [u, v] my @faces = (); # list of refs of [ point, point, point, ... ] # where 'point' is a ref of indexes into the # above lists, [ vert, text, norm ] my $lineno = 0; foreach (split (/\n/, $obj)) { $lineno++; next if (m/^\s*$|^\s*\#/); if (m/^v\s/) { my ($x, $y, $z) = m/^v\s+([^\s]+)\s+([^\s]+)\s+([^\s]+)\s*$/; error ("line $lineno: unparsable V line: $_") unless defined($z); push @verts, [$x+0, $y+0, $z+0]; } elsif (m/^vn\s/) { my ($x, $y, $z) = m/^vn\s+([^\s]+)\s+([^\s]+)\s+([^\s]+)\s*$/; error ("line $lineno: unparsable VN line: $_") unless defined($z); push @norms, [$x+0, $y+0, $z+0]; } elsif (m/^vt\s/) { my ($u, $v) = m/^vt\s+([^\s]+)\s+([^\s]+)\s*$/; error ("line $lineno: unparsable VT line: $_") unless defined($v); push @texts, [$u+0, $v+0]; } elsif (m/^g\b/) { # group name } elsif (m/f\s/) { my @f = split(/\s+/, $_); shift @f; my @vs = (); foreach my $f (@f) { my ($v, $t, $n); if ($f =~ m@^(\d+)$@s) { $v = $1; } elsif ($f =~ m@^(\d+)/(\d+)$@s) { $v = $1, $t = $2; } elsif ($f =~ m@^(\d+)/(\d+)/(\d+)$@s) { $v = $1, $t = $2; $n = $3; } elsif ($f =~ m@^(\d+)///?(\d+)$@s) { $v = $1; $n = $3; } else { error ("line $lineno: unparsable F line: $_") unless defined($v); } $t = -1 unless defined($t); $n = -1 unless defined($n); push @vs, [$v+0, $t+0, $n+0]; } push @faces, \@vs; } elsif (m/^s\b/) { # turn on smooth shading } elsif (m/^(mtllib|usemtl)\b/) { # reference to external materials file (textures, etc.) } else { error ("line $lineno: unknown line: $_"); } } # find bounding box, and normalize # if ($normalize_p || $verbose) { my $minx = 999999999; my $miny = 999999999; my $minz = 999999999; my $maxx = -999999999; my $maxy = -999999999; my $maxz = -999999999; my $i = 0; foreach my $v (@verts) { my ($x, $y, $z) = @$v; $minx = $x if ($x < $minx); $maxx = $x if ($x > $maxx); $miny = $y if ($y < $miny); $maxy = $y if ($y > $maxy); $minz = $z if ($z < $minz); $maxz = $z if ($z > $maxz); } my $w = ($maxx - $minx); my $h = ($maxy - $miny); my $d = ($maxz - $minz); my $sizea = ($w > $h ? $w : $h); my $sizeb = ($w > $d ? $w : $d); my $size = ($sizea > $sizeb ? $sizea : $sizeb); print STDERR "$progname: bbox is " . sprintf("%.2f x %.2f x %.2f\n", $w, $h, $d) if ($verbose); if ($normalize_p) { $w /= $size; $h /= $size; $d /= $size; print STDERR "$progname: dividing by $size for bbox of " . sprintf("%.2f x %.2f x %.2f\n", $w, $h, $d) if ($verbose); foreach my $n (@verts) { my @n = @$n; foreach (@n) { $_ /= $size; } $n = \@n; } } } # generate interleaved list of triangle coordinates and normals # my @triangles = (); my $nfaces = $#faces+1; foreach my $f (@faces) { # $f is [ [v, t, n], [v, t, n], ... ] my @f = @$f; # # (Kludge for the companion cube model) # if ($#f > 15) { # my $i = 12; # @f = (@f[$i-1 .. $#f], @f[0 .. $i]); # } error ("too few points in face") if ($#f < 2); my $p1 = shift @f; # If there are more than 3 points, do a triangle fan from the first one: # [1 2 3] [1 3 4] [1 4 5] etc. Doesn't always work with convex shapes. while ($#f) { my $p2 = shift @f; my $p3 = $f[0]; my $x1 = $verts[$p1->[0]-1]->[0]; my $nx1 = $norms[$p1->[2]-1]->[0]; my $y1 = $verts[$p1->[0]-1]->[1]; my $ny1 = $norms[$p1->[2]-1]->[1]; my $z1 = $verts[$p1->[0]-1]->[2]; my $nz1 = $norms[$p1->[2]-1]->[2]; my $x2 = $verts[$p2->[0]-1]->[0]; my $nx2 = $norms[$p2->[2]-1]->[0]; my $y2 = $verts[$p2->[0]-1]->[1]; my $ny2 = $norms[$p2->[2]-1]->[1]; my $z2 = $verts[$p2->[0]-1]->[2]; my $nz2 = $norms[$p2->[2]-1]->[2]; my $x3 = $verts[$p3->[0]-1]->[0]; my $nx3 = $norms[$p3->[2]-1]->[0]; my $y3 = $verts[$p3->[0]-1]->[1]; my $ny3 = $norms[$p3->[2]-1]->[1]; my $z3 = $verts[$p3->[0]-1]->[2]; my $nz3 = $norms[$p3->[2]-1]->[2]; error ("missing points in face") unless defined($z3); if (!defined($nz3)) { my ($nx, $ny, $nz) = face_normal ($x1, $y1, $z1, $x2, $y2, $z2, $x3, $y3, $z3); $nx1 = $nx2 = $nx3 = $nx; $ny1 = $ny2 = $ny3 = $ny; $nz1 = $nz2 = $nz3 = $nz; } push @triangles, [$nx1, $ny1, $nz1, $x1, $y1, $z1, $nx2, $ny2, $nz2, $x2, $y2, $z2, $nx3, $ny3, $nz3, $x3, $y3, $z3]; } } return (@triangles); } sub generate_c($@) { my ($filename, @triangles) = @_; my $code = ''; $code .= "#include \"gllist.h\"\n"; $code .= "static const float data[]={\n"; my $nfaces = $#triangles + 1; my $npoints = $nfaces * 3; foreach my $t (@triangles) { my ($nx1, $ny1, $nz1, $x1, $y1, $z1, $nx2, $ny2, $nz2, $x2, $y2, $z2, $nx3, $ny3, $nz3, $x3, $y3, $z3) = @$t; my $lines = sprintf("\t" . "%.6f,%.6f,%.6f," . "%.6f,%.6f,%.6f,\n" . "\t" . "%.6f,%.6f,%.6f," . "%.6f,%.6f,%.6f,\n" . "\t" . "%.6f,%.6f,%.6f," . "%.6f,%.6f,%.6f,\n", $nx1, $ny1, $nz1, $x1, $y1, $z1, $nx2, $ny2, $nz2, $x2, $y2, $z2, $nx3, $ny3, $nz3, $x3, $y3, $z3); $lines =~ s/([.\d])0+,/$1,/g; # lose trailing insignificant zeroes $lines =~ s/\.,/,/g; $lines =~ s/-0,/0,/g; $code .= $lines; } my $token = $filename; # guess at a C token from the filename $token =~ s/\<[^<>]*\>//; $token =~ s@^.*/@@; $token =~ s/\.[^.]*$//; $token =~ s/[^a-z\d]/_/gi; $token =~ s/__+/_/g; $token =~ s/^_//g; $token =~ s/_$//g; $token =~ tr [A-Z] [a-z]; $token = 'foo' if ($token eq ''); my $format = 'GL_N3F_V3F'; my $primitive = 'GL_TRIANGLES'; $code =~ s/,\n$//s; $code .= "\n};\n"; $code .= "static const struct gllist frame={"; $code .= "$format,$primitive,$npoints,data,NULL};\n"; $code .= "const struct gllist *$token=&frame;\n"; print STDERR "$filename: " . (($#triangles+1)*3) . " points, " . (($#triangles+1)) . " faces.\n" if ($verbose); return $code; } sub obj_to_gl($$$) { my ($infile, $outfile, $normalize_p) = @_; my $obj = ''; open (my $in, '<', $infile) || error ("$infile: $!"); my $filename = ($infile eq '-' ? "" : $infile); print STDERR "$progname: reading $filename...\n" if ($verbose); while (<$in>) { $obj .= $_; } close $in; $obj =~ s/\r\n/\n/g; # CRLF -> LF $obj =~ s/\r/\n/g; # CR -> LF my @triangles = parse_obj ($filename, $obj, $normalize_p); $filename = ($outfile eq '-' ? "" : $outfile); my $code = generate_c ($filename, @triangles); open (my $out, '>', $outfile) || error ("$outfile: $!"); (print $out $code) || error ("$filename: $!"); (close $out) || error ("$filename: $!"); print STDERR "$progname: wrote $filename\n" if ($verbose || $outfile ne '-'); } sub error { ($_) = @_; print STDERR "$progname: $_\n"; exit 1; } sub usage { print STDERR "usage: $progname [--verbose] [infile [outfile]]\n"; exit 1; } sub main { my ($infile, $outfile); my $normalize_p = 0; while ($_ = $ARGV[0]) { shift @ARGV; if ($_ eq "--verbose") { $verbose++; } elsif (m/^-v+$/) { $verbose += length($_)-1; } elsif ($_ eq "--normalize") { $normalize_p = 1; } elsif (m/^-./) { usage; } elsif (!defined($infile)) { $infile = $_; } elsif (!defined($outfile)) { $outfile = $_; } else { usage; } } $infile = "-" unless defined ($infile); $outfile = "-" unless defined ($outfile); obj_to_gl ($infile, $outfile, $normalize_p); } main; exit 0; xscreensaver-5.36/hacks/glx/molecules.sh000755 000767 000024 00000000510 12725612214 020346 0ustar00jwzstaff000000 000000 #!/bin/sh TARGET=$1 shift SRCS=$* TMP=molecules.h.$$ rm -f $TMP trap "rm -f $TMP" 1 2 3 15 EXIT if [ -z "$UTILS_SRC" ]; then UTILS_SRC="../../utils"; fi for f in $SRCS ; do sh "$UTILS_SRC/ad2c" "$f" | sed 's/",$/\\n"/' >> $TMP echo ',' >> $TMP done if cmp -s $TMP $TARGET ; then rm $TMP else mv $TMP $TARGET fi xscreensaver-5.36/hacks/glx/starwars.txt000644 000767 000024 00000007401 12753473630 020444 0ustar00jwzstaff000000 000000 Episode IV STAR WARS: A NEW HOPE It is a period of Civil War. Rebel Spaceships, striking from a hidden base, have won their first victory against the evil Galactic Empire. During the battle, Rebel spies managed to steal secret plans to the Empire's ultimate weapon, the DEATH STAR, an armored space station with enough power to destroy an entire planet. Pursued by the Empire's sinister agents, Princess Leia races home aboard her starship, custodian of the stolen plans that can save her people and restore freedom to the galaxy... Episode V THE EMPIRE STRIKES BACK It is a dark time for the Rebellion. Although the Death Star has been destroyed, Imperial troops have driven the Rebel forces from their hidden base and pursued them across the galaxy. Evading the dreaded Imperial Starfleet, a group of freedom fighters led by Luke Skywalker has established a new secret base on the remote ice world of Hoth. The evil lord Darth Vader, obsessed with finding young Skywalker, has dispatched thousands of remote probes into the far reaches of space.... Episode VI RETURN OF THE JEDI Luke Skywalker has returned to his home planet of Tatooine in an attempt to rescue his friend Han Solo from the clutches of the vile gangster Jabba the Hutt. Little does Luke know that the GALACTIC EMPIRE has secretly begun construction on a new armored space station even more powerful than the first dreaded Death Star. When completed, this ultimate weapon will spell certain doom for the small band of rebels struggling to restore freedom to the galaxy... Episode I THE PHANTOM MENACE Turmoil has engulfed the Galactic Republic. The taxation of trade routes to outlying star systems is in dispute. Hoping to resolve the matter with a blockade of deadly battleships, the greedy Trade Federation has stopped all shipping to the small planet of Naboo. While the Congress of the Republic endlessly debates this alarming chain of events, the Supreme Chancellor has secretly dispatched two Jedi Knights, the guardians of peace and justice in the galaxy to settle the conflict... Episode II ATTACK OF THE CLONES There is unrest in the Galactic Senate. Several thousand solar systems have declared their intentions to leave the Republic. This separatist movement, under the leadership of the mysterious Count Dooku, has made it difficult for the limited number of Jedi Knights to maintain peace and order in the galaxy. Senator Amidala, the former Queen of Naboo, is returning to the Galactic Senate to vote on the critical issue of creating an ARMY OF THE REPUBLIC to assist the overwhelmed Jedi.... Episode III REVENGE OF THE SITH War! The Republic is crumbling under attacks by the ruthless Sith Lord, Count Dooku. There are heroes on both sides. Evil is everywhere. In a stunning move, the fiendish droid leader, General Grievous, has swept into the Republic capital and kidnapped Chancellor Palpatine, leader of the Galactic Senate. As the Separatist Droid Army attempts to flee th besieged capital with their valuable hostage, two Jedi Knights lead a desperate mission to rescue the captive Chancellor.... Episode VII THE FORCE AWAKENS Luke Skywalker has vanished. In his absence, the sinister FIRST ORDER has risen from the ashes of the Empire and will not rest until Skywalker, the last Jedi, has been destroyed. With the support of the REPUBLIC, General Leia Organa leads a brave RESISTANCE. She is desperate to find her brother Luke and gain his help in restoring peace and justice to the galaxy. Leia has sent her most daring pilot on a secret mission to Jakku, where an old ally has discovered a clue to Luke's whereabouts... xscreensaver-5.36/hacks/glx/zalgo.txt000664 000767 000024 00000004166 12524725415 017716 0ustar00jwzstaff000000 000000 Í P Í PÍ PÍ PÍ  PÍ  PÍ  💩💩💩💩💩💩💩💩💩💩💩💩💩💩 y̆̆̆̆̆̆̆̆̆̆̆̆̆̆̆̆̆̆ â†Deleted Page H̸̡̪̯ͨ͊̽̅̾̎Ȩ̬̩̾͛ͪ̈ÌÌ€Ì͘ ̶̧̨̱̹̭̯ͧ̾ͬC̷̙̲ÌÍ–Í­Ìͥͮ͟OÍ®Í̮̪ÌÍM̲̖͊̒ͪͩͬ̚̚͜Ȇ̴̟̟͙̞ͩ͌ÍS̨̥̫͎̭ͯ̿̔̀ͅ Rege̿̔̉x-based HTML parsers are the cancer that is killing StackOverflow it is too late it is too late we cannot be saved the trangession of a chiÍ¡ld ensures regex will consume all living tissue (except for HTML which it cannot, as previously prophesied) dear lord help us how can anyone survive this scourge using regex to parse HTML has doomed humanity to an eternity of dread torture and security holes using regex as a tool to process HTML establishes a breach between this world and the dread realm of c͒ͪo͛ͫrrupt entities (like SGML entities, but more corrupt) a mere glimpse of the world of reg​ex parsers for HTML will ins​tantly transport a programmer's consciousness into a world of ceaseless screaming, he comes, the pestilent slithy regex-infection wil​l devour your HT​ML parser, application and existence for all time like Visual Basic only worse he comes he comes do not fi​ght he comÌ¡e̶s, Ì•h̵i​s un̨hoÍžly radiaÅ„cé destroÒ‰ying all enliÌ̈Ì̂̈Ìghtenment, HTML tags leaÍ ki̧n͘g fr̶ǫm Ì¡yo​͟ur eyeÍ¢s̸ Ì›lÌ•ikÍe liq​uid pain, the song of re̸gular exp​ression parsing will exti​nguish the voices of mor​tal man from the sp​here I can see it can you see ̲͚̖͔̙î̩Ìt̲͎̩̱͔Ì̋̀ it is beautiful t​he final snuffing of the lie​s of Man ALL IS LOŚ͖̩͇̗̪Ì̈ÌT ALL I​S LOST the ponÌ·y he comes he c̶̮omes he comes the ich​or permeates all MY FACE MY FACE áµ’h god no NO NOO̼O​O NΘ stop the an​*̶͑̾̾​̅ͫÍ̙̤g͇̫͛͆̾ͫ̑͆l͖͉̗̩̳̟ÌͫͥͨeÌ Ì…s ÍŽa̧͈͖r̽̾̈ÌÍ’Í‘e n​ot rè̑ͧ̌aͨl̘Ì̙̃ͤ͂̾̆ ZA̡͊͠ÍLGÎŒ ISͮ̂҉̯͈͕̹̘̱ TO͇̹̺ͅÆÌ´È³Ì³ TH̘Ë͖Ì̉ Í P̯ÍÌ­O̚​NÌYÌ¡ H̸̡̪̯ͨ͊̽̅̾̎Ȩ̬̩̾͛ͪ̈ÌÌ€Ì͘ ̶̧̨̱̹̭̯ͧ̾ͬC̷̙̲ÌÍ–Í­Ìͥͮ͟OÍ®Í̮̪ÌÍM̲̖͊̒ͪͩͬ̚̚͜Ȇ̴̟̟͙̞ͩ͌ÍS̨̥̫͎̭ͯ̿̔̀ͅ xscreensaver-5.36/hacks/glx/lament.dxf000644 000767 000024 00003604554 12376721711 020034 0ustar00jwzstaff000000 000000 0 SECTION 2 ENTITIES 0 3DFACE 8 tetra_une 10 3.0 20 3.0 30 0.0 11 3.0 21 3.0 31 3.0 12 3.0 22 0.0 32 3.0 13 3.0 23 0.0 33 3.0 70 1 0 3DFACE 8 tetra_une 10 3.0 20 3.0 30 3.0 11 3.0 21 3.0 31 0.0 12 3.0 22 3.0 32 0.205 13 3.0 23 3.0 33 0.205 70 13 0 3DFACE 8 tetra_une 10 3.0 20 3.0 30 3.0 11 3.0 21 3.0 31 0.205 12 3.0 22 3.0 32 1.5 13 3.0 23 3.0 33 1.5 70 13 0 3DFACE 8 tetra_une 10 3.0 20 3.0 30 3.0 11 3.0 21 3.0 31 1.5 12 3.0 22 3.0 32 2.795 13 3.0 23 3.0 33 2.795 70 1 0 3DFACE 8 tetra_une 10 3.0 20 0.0 30 3.0 11 0.205 21 3.0 31 3.0 12 0.0 22 3.0 32 3.0 13 0.0 23 3.0 33 3.0 70 1 0 3DFACE 8 tetra_une 10 0.205 20 3.0 30 3.0 11 3.0 21 0.0 31 3.0 12 1.5 22 3.0 32 3.0 13 1.5 23 3.0 33 3.0 70 3 0 3DFACE 8 tetra_une 10 1.5 20 3.0 30 3.0 11 3.0 21 0.0 31 3.0 12 2.795 22 3.0 32 3.0 13 2.795 23 3.0 33 3.0 70 3 0 3DFACE 8 tetra_une 10 2.795 20 3.0 30 3.0 11 3.0 21 0.0 31 3.0 12 3.0 22 3.0 32 3.0 13 3.0 23 3.0 33 3.0 70 1 0 3DFACE 8 tetra_une 10 2.795 20 3.0 30 1.5 11 2.795 21 3.0 31 0.205 12 2.1475 22 3.0 32 0.8525 13 2.1475 23 3.0 33 0.8525 70 0 0 3DFACE 8 tetra_une 10 3.0 20 3.0 30 0.205 11 3.0 21 3.0 31 0.0 12 2.795 22 3.0 32 0.205 13 2.795 23 3.0 33 0.205 70 0 0 3DFACE 8 tetra_une 10 3.0 20 0.0 30 3.0 11 2.795 21 3.0 31 0.205 12 3.0 22 3.0 32 0.0 13 3.0 23 3.0 33 0.0 70 1 0 3DFACE 8 tetra_une 10 2.795 20 3.0 30 0.205 11 3.0 21 0.0 31 3.0 12 2.1475 22 3.0 32 0.8525 13 2.1475 23 3.0 33 0.8525 70 3 0 3DFACE 8 tetra_une 10 2.1475 20 3.0 30 0.8525 11 3.0 21 0.0 31 3.0 12 0.8525 22 3.0 32 2.1475 13 0.8525 23 3.0 33 2.1475 70 3 0 3DFACE 8 tetra_une 10 0.8525 20 3.0 30 2.1475 11 3.0 21 0.0 31 3.0 12 0.205 22 3.0 32 2.795 13 0.205 23 3.0 33 2.795 70 3 0 3DFACE 8 tetra_une 10 0.205 20 3.0 30 2.795 11 3.0 21 0.0 31 3.0 12 0.0 22 3.0 32 3.0 13 0.0 23 3.0 33 3.0 70 1 0 3DFACE 8 tetra_une 10 2.795 20 3.0 30 2.795 11 3.0 21 3.0 31 1.5 12 2.795 22 3.0 32 1.5 13 2.795 23 3.0 33 1.5 70 1 0 3DFACE 8 tetra_une 10 3.0 20 3.0 30 1.5 11 2.795 21 3.0 31 2.795 12 3.0 22 3.0 32 2.795 13 3.0 23 3.0 33 2.795 70 1 0 3DFACE 8 tetra_une 10 2.795 20 3.0 30 1.5 11 3.0 21 3.0 31 0.205 12 2.795 22 3.0 32 0.205 13 2.795 23 3.0 33 0.205 70 1 0 3DFACE 8 tetra_une 10 3.0 20 3.0 30 0.205 11 2.795 21 3.0 31 1.5 12 3.0 22 3.0 32 1.5 13 3.0 23 3.0 33 1.5 70 1 0 3DFACE 8 tetra_une 10 0.205 20 3.0 30 3.0 11 0.205 21 3.0 31 2.795 12 0.0 22 3.0 32 3.0 13 0.0 23 3.0 33 3.0 70 0 0 3DFACE 8 tetra_une 10 1.5 20 3.0 30 2.795 11 0.8525 21 3.0 31 2.1475 12 0.205 22 3.0 32 2.795 13 0.205 23 3.0 33 2.795 70 0 0 3DFACE 8 tetra_une 10 0.205 20 3.0 30 3.0 11 1.5 21 3.0 31 2.795 12 0.205 22 3.0 32 2.795 13 0.205 23 3.0 33 2.795 70 1 0 3DFACE 8 tetra_une 10 1.5 20 3.0 30 2.795 11 0.205 21 3.0 31 3.0 12 1.5 22 3.0 32 3.0 13 1.5 23 3.0 33 3.0 70 1 0 3DFACE 8 tetra_une 10 0.8525 20 3.0 30 2.1475 11 2.795 21 3.0 31 1.5 12 2.1475 22 3.0 32 0.8525 13 2.1475 23 3.0 33 0.8525 70 1 0 3DFACE 8 tetra_une 10 2.795 20 3.0 30 1.5 11 0.8525 21 3.0 31 2.1475 12 1.5 22 3.0 32 2.795 13 1.5 23 3.0 33 2.795 70 1 0 3DFACE 8 tetra_une 10 2.795 20 3.0 30 3.0 11 3.0 21 3.0 31 2.795 12 2.795 22 3.0 32 2.795 13 2.795 23 3.0 33 2.795 70 1 0 3DFACE 8 tetra_une 10 3.0 20 3.0 30 2.795 11 2.795 21 3.0 31 3.0 12 3.0 22 3.0 32 3.0 13 3.0 23 3.0 33 3.0 70 1 0 3DFACE 8 tetra_une 10 2.795 20 3.0 30 2.795 11 2.795 21 3.0 31 1.5 12 1.5 22 3.0 32 2.795 13 1.5 23 3.0 33 2.795 70 0 0 3DFACE 8 tetra_une 10 1.5 20 3.0 30 3.0 11 2.795 21 3.0 31 2.795 12 1.5 22 3.0 32 2.795 13 1.5 23 3.0 33 2.795 70 1 0 3DFACE 8 tetra_une 10 2.795 20 3.0 30 2.795 11 1.5 21 3.0 31 3.0 12 2.795 22 3.0 32 3.0 13 2.795 23 3.0 33 3.0 70 1 0 3DFACE 8 tetra_usw 10 2.1475 20 0.0 30 2.1475 11 0.205 21 0.0 31 1.5 12 0.8525 22 0.0 32 0.8525 13 0.8525 23 0.0 33 0.8525 70 1 0 3DFACE 8 tetra_usw 10 0.205 20 0.0 30 1.5 11 2.1475 21 0.0 31 2.1475 12 1.5 22 0.0 32 2.795 13 1.5 23 0.0 33 2.795 70 1 0 3DFACE 8 tetra_usw 10 0.205 20 0.0 30 3.0 11 0.0 21 3.0 31 3.0 12 0.0 22 0.0 32 3.0 13 0.0 23 0.0 33 3.0 70 1 0 3DFACE 8 tetra_usw 10 0.0 20 3.0 30 3.0 11 0.205 21 0.0 31 3.0 12 3.0 22 0.0 32 3.0 13 3.0 23 0.0 33 3.0 70 3 0 3DFACE 8 tetra_usw 10 3.0 20 0.0 30 3.0 11 0.205 21 0.0 31 3.0 12 1.5 22 0.0 32 3.0 13 1.5 23 0.0 33 3.0 70 13 0 3DFACE 8 tetra_usw 10 3.0 20 0.0 30 3.0 11 1.5 21 0.0 31 3.0 12 2.795 22 0.0 32 3.0 13 2.795 23 0.0 33 3.0 70 1 0 3DFACE 8 tetra_usw 10 0.0 20 3.0 30 3.0 11 0.0 21 0.0 31 2.795 12 0.0 22 0.0 32 3.0 13 0.0 23 0.0 33 3.0 70 1 0 3DFACE 8 tetra_usw 10 0.0 20 0.0 30 2.795 11 0.0 21 3.0 31 3.0 12 0.0 22 0.0 32 1.5 13 0.0 23 0.0 33 1.5 70 3 0 3DFACE 8 tetra_usw 10 0.0 20 0.0 30 1.5 11 0.0 21 3.0 31 3.0 12 0.0 22 0.0 32 0.205 13 0.0 23 0.0 33 0.205 70 3 0 3DFACE 8 tetra_usw 10 0.0 20 0.0 30 0.205 11 0.0 21 3.0 31 3.0 12 0.0 22 0.0 32 0.0 13 0.0 23 0.0 33 0.0 70 1 0 3DFACE 8 tetra_usw 10 0.0 20 3.0 30 3.0 11 0.205 21 0.0 31 0.205 12 0.0 22 0.0 32 0.0 13 0.0 23 0.0 33 0.0 70 1 0 3DFACE 8 tetra_usw 10 0.205 20 0.0 30 0.205 11 0.0 21 3.0 31 3.0 12 0.8525 22 0.0 32 0.8525 13 0.8525 23 0.0 33 0.8525 70 3 0 3DFACE 8 tetra_usw 10 0.8525 20 0.0 30 0.8525 11 0.0 21 3.0 31 3.0 12 2.1475 22 0.0 32 2.1475 13 2.1475 23 0.0 33 2.1475 70 3 0 3DFACE 8 tetra_usw 10 2.1475 20 0.0 30 2.1475 11 0.0 21 3.0 31 3.0 12 2.795 22 0.0 32 2.795 13 2.795 23 0.0 33 2.795 70 3 0 3DFACE 8 tetra_usw 10 2.795 20 0.0 30 2.795 11 0.0 21 3.0 31 3.0 12 3.0 22 0.0 32 3.0 13 3.0 23 0.0 33 3.0 70 1 0 3DFACE 8 tetra_usw 10 0.205 20 0.0 30 1.5 11 0.205 21 0.0 31 0.205 12 0.8525 22 0.0 32 0.8525 13 0.8525 23 0.0 33 0.8525 70 0 0 3DFACE 8 tetra_usw 10 2.795 20 0.0 30 3.0 11 1.5 21 0.0 31 2.795 12 2.795 22 0.0 32 2.795 13 2.795 23 0.0 33 2.795 70 1 0 3DFACE 8 tetra_usw 10 1.5 20 0.0 30 2.795 11 2.795 21 0.0 31 3.0 12 1.5 22 0.0 32 3.0 13 1.5 23 0.0 33 3.0 70 1 0 3DFACE 8 tetra_usw 10 1.5 20 0.0 30 2.795 11 2.1475 21 0.0 31 2.1475 12 2.795 22 0.0 32 2.795 13 2.795 23 0.0 33 2.795 70 0 0 3DFACE 8 tetra_usw 10 0.0 20 0.0 30 0.205 11 0.0 21 0.0 31 0.0 12 0.205 22 0.0 32 0.205 13 0.205 23 0.0 33 0.205 70 0 0 3DFACE 8 tetra_usw 10 0.205 20 0.0 30 3.0 11 0.0 21 0.0 31 2.795 12 0.205 22 0.0 32 2.795 13 0.205 23 0.0 33 2.795 70 1 0 3DFACE 8 tetra_usw 10 0.0 20 0.0 30 2.795 11 0.205 21 0.0 31 3.0 12 0.0 22 0.0 32 3.0 13 0.0 23 0.0 33 3.0 70 1 0 3DFACE 8 tetra_usw 10 0.205 20 0.0 30 2.795 11 0.0 21 0.0 31 1.5 12 0.205 22 0.0 32 1.5 13 0.205 23 0.0 33 1.5 70 1 0 3DFACE 8 tetra_usw 10 0.0 20 0.0 30 1.5 11 0.205 21 0.0 31 2.795 12 0.0 22 0.0 32 2.795 13 0.0 23 0.0 33 2.795 70 1 0 3DFACE 8 tetra_usw 10 1.5 20 0.0 30 3.0 11 0.205 21 0.0 31 2.795 12 1.5 22 0.0 32 2.795 13 1.5 23 0.0 33 2.795 70 1 0 3DFACE 8 tetra_usw 10 0.205 20 0.0 30 2.795 11 1.5 21 0.0 31 3.0 12 0.205 22 0.0 32 3.0 13 0.205 23 0.0 33 3.0 70 1 0 3DFACE 8 tetra_usw 10 0.205 20 0.0 30 1.5 11 0.0 21 0.0 31 0.205 12 0.205 22 0.0 32 0.205 13 0.205 23 0.0 33 0.205 70 1 0 3DFACE 8 tetra_usw 10 0.0 20 0.0 30 0.205 11 0.205 21 0.0 31 1.5 12 0.0 22 0.0 32 1.5 13 0.0 23 0.0 33 1.5 70 1 0 3DFACE 8 tetra_usw 10 0.205 20 0.0 30 2.795 11 0.205 21 0.0 31 1.5 12 1.5 22 0.0 32 2.795 13 1.5 23 0.0 33 2.795 70 0 0 3DFACE 8 tetra_usw 10 2.795 20 0.0 30 3.0 11 2.795 21 0.0 31 2.795 12 3.0 22 0.0 32 3.0 13 3.0 23 0.0 33 3.0 70 0 0 3DFACE 8 tetra_dwn 10 2.1475 20 3.0 30 0.8525 11 2.795 21 3.0 31 0.205 12 1.5 22 3.0 32 0.205 13 1.5 23 3.0 33 0.205 70 0 0 3DFACE 8 tetra_dwn 10 0.0 20 3.0 30 3.0 11 0.0 21 3.0 31 0.0 12 0.0 22 0.0 32 0.0 13 0.0 23 0.0 33 0.0 70 1 0 3DFACE 8 tetra_dwn 10 0.0 20 3.0 30 0.0 11 0.0 21 3.0 31 3.0 12 0.0 22 3.0 32 2.795 13 0.0 23 3.0 33 2.795 70 13 0 3DFACE 8 tetra_dwn 10 0.0 20 3.0 30 0.0 11 0.0 21 3.0 31 2.795 12 0.0 22 3.0 32 1.5 13 0.0 23 3.0 33 1.5 70 13 0 3DFACE 8 tetra_dwn 10 0.0 20 3.0 30 0.0 11 0.0 21 3.0 31 1.5 12 0.0 22 3.0 32 0.205 13 0.0 23 3.0 33 0.205 70 1 0 3DFACE 8 tetra_dwn 10 0.205 20 3.0 30 0.0 11 0.0 21 0.0 31 0.0 12 0.0 22 3.0 32 0.0 13 0.0 23 3.0 33 0.0 70 1 0 3DFACE 8 tetra_dwn 10 0.0 20 0.0 30 0.0 11 0.205 21 3.0 31 0.0 12 3.0 22 3.0 32 0.0 13 3.0 23 3.0 33 0.0 70 3 0 3DFACE 8 tetra_dwn 10 3.0 20 3.0 30 0.0 11 0.205 21 3.0 31 0.0 12 1.5 22 3.0 32 0.0 13 1.5 23 3.0 33 0.0 70 13 0 3DFACE 8 tetra_dwn 10 3.0 20 3.0 30 0.0 11 1.5 21 3.0 31 0.0 12 2.795 22 3.0 32 0.0 13 2.795 23 3.0 33 0.0 70 1 0 3DFACE 8 tetra_dwn 10 2.795 20 3.0 30 0.205 11 0.0 21 0.0 31 0.0 12 3.0 22 3.0 32 0.0 13 3.0 23 3.0 33 0.0 70 1 0 3DFACE 8 tetra_dwn 10 0.0 20 0.0 30 0.0 11 2.795 21 3.0 31 0.205 12 0.0 22 3.0 32 3.0 13 0.0 23 3.0 33 3.0 70 3 0 3DFACE 8 tetra_dwn 10 0.0 20 3.0 30 3.0 11 2.795 21 3.0 31 0.205 12 2.1475 22 3.0 32 0.8525 13 2.1475 23 3.0 33 0.8525 70 13 0 3DFACE 8 tetra_dwn 10 0.0 20 3.0 30 3.0 11 2.1475 21 3.0 31 0.8525 12 0.8525 22 3.0 32 2.1475 13 0.8525 23 3.0 33 2.1475 70 13 0 3DFACE 8 tetra_dwn 10 0.0 20 3.0 30 3.0 11 0.8525 21 3.0 31 2.1475 12 0.205 22 3.0 32 2.795 13 0.205 23 3.0 33 2.795 70 1 0 3DFACE 8 tetra_dwn 10 0.205 20 3.0 30 1.5 11 2.1475 21 3.0 31 0.8525 12 1.5 22 3.0 32 0.205 13 1.5 23 3.0 33 0.205 70 1 0 3DFACE 8 tetra_dwn 10 2.1475 20 3.0 30 0.8525 11 0.205 21 3.0 31 1.5 12 0.8525 22 3.0 32 2.1475 13 0.8525 23 3.0 33 2.1475 70 1 0 3DFACE 8 tetra_dwn 10 0.0 20 3.0 30 0.205 11 0.205 21 3.0 31 0.0 12 0.0 22 3.0 32 0.0 13 0.0 23 3.0 33 0.0 70 1 0 3DFACE 8 tetra_dwn 10 0.205 20 3.0 30 0.0 11 0.0 21 3.0 31 0.205 12 0.205 22 3.0 32 0.205 13 0.205 23 3.0 33 0.205 70 1 0 3DFACE 8 tetra_dwn 10 2.795 20 3.0 30 0.205 11 3.0 21 3.0 31 0.0 12 2.795 22 3.0 32 0.0 13 2.795 23 3.0 33 0.0 70 0 0 3DFACE 8 tetra_dwn 10 1.5 20 3.0 30 0.205 11 2.795 21 3.0 31 0.0 12 1.5 22 3.0 32 0.0 13 1.5 23 3.0 33 0.0 70 1 0 3DFACE 8 tetra_dwn 10 2.795 20 3.0 30 0.0 11 1.5 21 3.0 31 0.205 12 2.795 22 3.0 32 0.205 13 2.795 23 3.0 33 0.205 70 1 0 3DFACE 8 tetra_dwn 10 0.205 20 3.0 30 2.795 11 0.8525 21 3.0 31 2.1475 12 0.205 22 3.0 32 1.5 13 0.205 23 3.0 33 1.5 70 0 0 3DFACE 8 tetra_dwn 10 0.0 20 3.0 30 3.0 11 0.205 21 3.0 31 2.795 12 0.0 22 3.0 32 2.795 13 0.0 23 3.0 33 2.795 70 0 0 3DFACE 8 tetra_dwn 10 0.0 20 3.0 30 2.795 11 0.205 21 3.0 31 1.5 12 0.0 22 3.0 32 1.5 13 0.0 23 3.0 33 1.5 70 1 0 3DFACE 8 tetra_dwn 10 0.205 20 3.0 30 1.5 11 0.0 21 3.0 31 2.795 12 0.205 22 3.0 32 2.795 13 0.205 23 3.0 33 2.795 70 1 0 3DFACE 8 tetra_dwn 10 0.0 20 3.0 30 1.5 11 0.205 21 3.0 31 0.205 12 0.0 22 3.0 32 0.205 13 0.0 23 3.0 33 0.205 70 1 0 3DFACE 8 tetra_dwn 10 0.205 20 3.0 30 0.205 11 0.0 21 3.0 31 1.5 12 0.205 22 3.0 32 1.5 13 0.205 23 3.0 33 1.5 70 1 0 3DFACE 8 tetra_dwn 10 0.205 20 3.0 30 0.205 11 1.5 21 3.0 31 0.0 12 0.205 22 3.0 32 0.0 13 0.205 23 3.0 33 0.0 70 1 0 3DFACE 8 tetra_dwn 10 1.5 20 3.0 30 0.0 11 0.205 21 3.0 31 0.205 12 1.5 22 3.0 32 0.205 13 1.5 23 3.0 33 0.205 70 1 0 3DFACE 8 tetra_dwn 10 0.205 20 3.0 30 1.5 11 1.5 21 3.0 31 0.205 12 0.205 22 3.0 32 0.205 13 0.205 23 3.0 33 0.205 70 0 0 3DFACE 8 tetra_dse 10 2.795 20 0.0 30 1.5 11 0.8525 21 0.0 31 0.8525 12 1.5 22 0.0 32 0.205 13 1.5 23 0.0 33 0.205 70 1 0 3DFACE 8 tetra_dse 10 0.8525 20 0.0 30 0.8525 11 2.795 21 0.0 31 1.5 12 2.1475 22 0.0 32 2.1475 13 2.1475 23 0.0 33 2.1475 70 1 0 3DFACE 8 tetra_dse 10 3.0 20 3.0 30 0.0 11 0.205 21 0.0 31 0.0 12 0.0 22 0.0 32 0.0 13 0.0 23 0.0 33 0.0 70 1 0 3DFACE 8 tetra_dse 10 0.205 20 0.0 30 0.0 11 3.0 21 3.0 31 0.0 12 1.5 22 0.0 32 0.0 13 1.5 23 0.0 33 0.0 70 3 0 3DFACE 8 tetra_dse 10 1.5 20 0.0 30 0.0 11 3.0 21 3.0 31 0.0 12 2.795 22 0.0 32 0.0 13 2.795 23 0.0 33 0.0 70 3 0 3DFACE 8 tetra_dse 10 2.795 20 0.0 30 0.0 11 3.0 21 3.0 31 0.0 12 3.0 22 0.0 32 0.0 13 3.0 23 0.0 33 0.0 70 1 0 3DFACE 8 tetra_dse 10 3.0 20 3.0 30 0.0 11 3.0 21 0.0 31 0.205 12 3.0 22 0.0 32 0.0 13 3.0 23 0.0 33 0.0 70 1 0 3DFACE 8 tetra_dse 10 3.0 20 0.0 30 0.205 11 3.0 21 3.0 31 0.0 12 3.0 22 0.0 32 1.5 13 3.0 23 0.0 33 1.5 70 3 0 3DFACE 8 tetra_dse 10 3.0 20 0.0 30 1.5 11 3.0 21 3.0 31 0.0 12 3.0 22 0.0 32 2.795 13 3.0 23 0.0 33 2.795 70 3 0 3DFACE 8 tetra_dse 10 3.0 20 0.0 30 2.795 11 3.0 21 3.0 31 0.0 12 3.0 22 0.0 32 3.0 13 3.0 23 0.0 33 3.0 70 1 0 3DFACE 8 tetra_dse 10 3.0 20 3.0 30 0.0 11 2.795 21 0.0 31 2.795 12 3.0 22 0.0 32 3.0 13 3.0 23 0.0 33 3.0 70 1 0 3DFACE 8 tetra_dse 10 2.795 20 0.0 30 2.795 11 3.0 21 3.0 31 0.0 12 2.1475 22 0.0 32 2.1475 13 2.1475 23 0.0 33 2.1475 70 3 0 3DFACE 8 tetra_dse 10 2.1475 20 0.0 30 2.1475 11 3.0 21 3.0 31 0.0 12 0.8525 22 0.0 32 0.8525 13 0.8525 23 0.0 33 0.8525 70 3 0 3DFACE 8 tetra_dse 10 0.8525 20 0.0 30 0.8525 11 3.0 21 3.0 31 0.0 12 0.205 22 0.0 32 0.205 13 0.205 23 0.0 33 0.205 70 3 0 3DFACE 8 tetra_dse 10 0.205 20 0.0 30 0.205 11 3.0 21 3.0 31 0.0 12 0.0 22 0.0 32 0.0 13 0.0 23 0.0 33 0.0 70 1 0 LINE 8 tetra_dse 10 0.205 20 0.0 30 2.795 11 0.0 21 0.0 31 2.795 0 3DFACE 8 tetra_dse 10 0.205 20 0.0 30 0.205 11 0.0 21 0.0 31 0.0 12 0.205 22 0.0 32 0.0 13 0.205 23 0.0 33 0.0 70 0 0 3DFACE 8 tetra_dse 10 2.795 20 0.0 30 2.795 11 2.1475 21 0.0 31 2.1475 12 2.795 22 0.0 32 1.5 13 2.795 23 0.0 33 1.5 70 0 0 3DFACE 8 tetra_dse 10 0.8525 20 0.0 30 0.8525 11 0.205 21 0.0 31 0.205 12 1.5 22 0.0 32 0.205 13 1.5 23 0.0 33 0.205 70 0 0 3DFACE 8 tetra_dse 10 3.0 20 0.0 30 3.0 11 2.795 21 0.0 31 2.795 12 3.0 22 0.0 32 2.795 13 3.0 23 0.0 33 2.795 70 0 0 3DFACE 8 tetra_dse 10 3.0 20 0.0 30 0.205 11 2.795 21 0.0 31 0.0 12 3.0 22 0.0 32 0.0 13 3.0 23 0.0 33 0.0 70 1 0 3DFACE 8 tetra_dse 10 2.795 20 0.0 30 0.0 11 3.0 21 0.0 31 0.205 12 2.795 22 0.0 32 0.205 13 2.795 23 0.0 33 0.205 70 1 0 3DFACE 8 tetra_dse 10 1.5 20 0.0 30 0.205 11 0.205 21 0.0 31 0.0 12 1.5 22 0.0 32 0.0 13 1.5 23 0.0 33 0.0 70 1 0 3DFACE 8 tetra_dse 10 0.205 20 0.0 30 0.0 11 1.5 21 0.0 31 0.205 12 0.205 22 0.0 32 0.205 13 0.205 23 0.0 33 0.205 70 1 0 3DFACE 8 tetra_dse 10 3.0 20 0.0 30 2.795 11 2.795 21 0.0 31 1.5 12 3.0 22 0.0 32 1.5 13 3.0 23 0.0 33 1.5 70 1 0 3DFACE 8 tetra_dse 10 2.795 20 0.0 30 1.5 11 3.0 21 0.0 31 2.795 12 2.795 22 0.0 32 2.795 13 2.795 23 0.0 33 2.795 70 1 0 3DFACE 8 tetra_dse 10 2.795 20 0.0 30 0.205 11 1.5 21 0.0 31 0.0 12 2.795 22 0.0 32 0.0 13 2.795 23 0.0 33 0.0 70 1 0 3DFACE 8 tetra_dse 10 1.5 20 0.0 30 0.0 11 2.795 21 0.0 31 0.205 12 1.5 22 0.0 32 0.205 13 1.5 23 0.0 33 0.205 70 1 0 3DFACE 8 tetra_dse 10 3.0 20 0.0 30 1.5 11 2.795 21 0.0 31 0.205 12 3.0 22 0.0 32 0.205 13 3.0 23 0.0 33 0.205 70 1 0 3DFACE 8 tetra_dse 10 2.795 20 0.0 30 0.205 11 3.0 21 0.0 31 1.5 12 2.795 22 0.0 32 1.5 13 2.795 23 0.0 33 1.5 70 1 0 3DFACE 8 tetra_dse 10 2.795 20 0.0 30 1.5 11 1.5 21 0.0 31 0.205 12 2.795 22 0.0 32 0.205 13 2.795 23 0.0 33 0.205 70 0 0 3DFACE 8 tetra_base 10 0.0 20 3.0 30 3.0 11 3.0 21 0.0 31 3.0 12 3.0 22 3.0 32 0.0 13 3.0 23 3.0 33 0.0 70 0 0 3DFACE 8 tetra_base 10 0.0 20 3.0 30 3.0 11 0.0 21 0.0 31 0.0 12 3.0 22 0.0 32 3.0 13 3.0 23 0.0 33 3.0 70 0 0 3DFACE 8 tetra_base 10 3.0 20 3.0 30 0.0 11 0.0 21 0.0 31 0.0 12 0.0 22 3.0 32 3.0 13 0.0 23 3.0 33 3.0 70 0 0 3DFACE 8 tetra_base 10 3.0 20 3.0 30 0.0 11 3.0 21 0.0 31 3.0 12 0.0 22 0.0 32 0.0 13 0.0 23 0.0 33 0.0 70 0 0 3DFACE 8 star_u 10 3.0 20 1.20163144893051 30 3.0 11 2.26629223953759 21 1.42452680194624 31 3.0 12 2.25520466591049 22 1.34978045204758 32 3.0 13 2.25520466591049 23 1.34978045204758 33 3.0 70 1 0 3DFACE 8 star_u 10 2.26629223953759 20 1.42452680194624 30 3.0 11 3.0 21 1.20163144893051 31 3.0 12 2.27 22 1.5 32 3.0 13 2.27 23 1.5 33 3.0 70 3 0 3DFACE 8 star_u 10 2.27 20 1.5 30 3.0 11 3.0 21 1.20163144893051 31 3.0 12 3.0 22 1.5 32 3.0 13 3.0 23 1.5 33 3.0 70 1 0 3DFACE 8 star_u 10 0.73 20 1.5 30 3.0 11 0.0 21 1.79836855106949 31 3.0 12 0.0 22 1.5 32 3.0 13 0.0 23 1.5 33 3.0 70 1 0 3DFACE 8 star_u 10 0.0 20 1.79836855106949 30 3.0 11 0.73 21 1.5 31 3.0 12 0.733707760462408 22 1.57547319805376 32 3.0 13 0.733707760462408 23 1.57547319805376 33 3.0 70 13 0 3DFACE 8 star_u 10 0.0 20 1.79836855106949 30 3.0 11 0.733707760462408 21 1.57547319805376 31 3.0 12 0.744795334089513 22 1.65021954795242 32 3.0 13 0.744795334089513 23 1.65021954795242 33 3.0 70 1 0 3DFACE 8 star_u 10 2.50226795687895 20 0.0 30 3.0 11 1.98848282880601 21 0.904781950910693 31 3.0 12 1.92778907942509 22 0.85976839852704 32 3.0 13 1.92778907942509 23 0.85976839852704 33 3.0 70 1 0 3DFACE 8 star_u 10 1.98848282880601 20 0.904781950910693 30 3.0 11 2.50226795687895 21 0.0 31 3.0 12 2.04447222151364 22 0.955527778486358 32 3.0 13 2.04447222151364 23 0.955527778486358 33 3.0 70 3 0 3DFACE 8 star_u 10 2.04447222151364 20 0.955527778486358 30 3.0 11 2.50226795687895 21 0.0 31 3.0 12 3.0 22 0.0 32 3.0 13 3.0 23 0.0 33 3.0 70 3 0 3DFACE 8 star_u 10 3.0 20 0.0 30 3.0 11 2.50226795687895 21 0.0 31 3.0 12 2.795 22 0.0 32 3.0 13 2.795 23 0.0 33 3.0 70 1 0 3DFACE 8 star_u 10 0.955527778486358 20 0.955527778486358 30 3.0 11 0.0 21 0.497732043121051 31 3.0 12 0.0 22 0.0 32 3.0 13 0.0 23 0.0 33 3.0 70 1 0 3DFACE 8 star_u 10 0.0 20 0.497732043121051 30 3.0 11 0.955527778486358 21 0.955527778486358 31 3.0 12 0.904781950910692 22 1.01151717119399 32 3.0 13 0.904781950910692 23 1.01151717119399 33 3.0 70 13 0 3DFACE 8 star_u 10 0.0 20 0.497732043121051 30 3.0 11 0.904781950910692 21 1.01151717119399 31 3.0 12 0.85976839852704 22 1.07221092057491 32 3.0 13 0.85976839852704 23 1.07221092057491 33 3.0 70 1 0 3DFACE 8 star_u 10 1.57547319805376 20 2.26629223953759 30 3.0 11 1.5 21 3.0 31 3.0 12 1.5 22 2.27 32 3.0 13 1.5 23 2.27 33 3.0 70 1 0 3DFACE 8 star_u 10 1.5 20 3.0 30 3.0 11 1.57547319805376 21 2.26629223953759 31 3.0 12 1.79836855106949 22 3.0 32 3.0 13 1.79836855106949 23 3.0 33 3.0 70 3 0 3DFACE 8 star_u 10 1.79836855106949 20 3.0 30 3.0 11 1.57547319805376 21 2.26629223953759 31 3.0 12 1.65021954795242 22 2.25520466591049 32 3.0 13 1.65021954795242 23 2.25520466591049 33 3.0 70 1 0 3DFACE 8 star_u 10 2.09521804908931 20 1.98848282880601 30 3.0 11 3.0 21 3.0 31 3.0 12 2.04447222151364 22 2.04447222151364 32 3.0 13 2.04447222151364 23 2.04447222151364 33 3.0 70 1 0 3DFACE 8 star_u 10 3.0 20 3.0 30 3.0 11 2.09521804908931 21 1.98848282880601 31 3.0 12 2.14023160147296 22 1.92778907942509 32 3.0 13 2.14023160147296 23 1.92778907942509 33 3.0 70 13 0 3DFACE 8 star_u 10 3.0 20 3.0 30 3.0 11 2.14023160147296 21 1.92778907942509 31 3.0 12 3.0 22 2.50226795687895 32 3.0 13 3.0 23 2.50226795687895 33 3.0 70 1 0 3DFACE 8 star_u 10 0.0 20 3.0 30 3.0 11 0.205 21 3.0 31 2.795 12 0.0 22 3.0 32 2.795 13 0.0 23 3.0 33 2.795 70 1 0 3DFACE 8 star_u 10 0.205 20 3.0 30 2.795 11 0.0 21 3.0 31 3.0 12 0.205 22 3.0 32 3.0 13 0.205 23 3.0 33 3.0 70 1 0 3DFACE 8 star_u 10 2.12132034355964 20 0.0 30 2.17367965644036 11 2.12132034355964 21 0.0 31 0.826320343559644 12 2.795 22 0.0 32 1.5 13 2.795 23 0.0 33 1.5 70 0 0 3DFACE 8 star_u 10 3.0 20 2.50226795687895 30 0.0 11 3.0 21 2.12132034355964 31 3.0 12 3.0 22 2.12132034355964 32 0.0 13 3.0 23 2.12132034355964 33 0.0 70 1 0 3DFACE 8 star_u 10 3.0 20 2.12132034355964 30 3.0 11 3.0 21 2.50226795687895 31 0.0 12 3.0 22 2.50226795687895 32 3.0 13 3.0 23 2.50226795687895 33 3.0 70 3 0 3DFACE 8 star_u 10 3.0 20 2.50226795687895 30 3.0 11 3.0 21 2.50226795687895 31 0.0 12 3.0 22 3.0 32 0.0 13 3.0 23 3.0 33 0.0 70 13 0 3DFACE 8 star_u 10 3.0 20 2.50226795687895 30 3.0 11 3.0 21 3.0 31 0.0 12 3.0 22 3.0 32 3.0 13 3.0 23 3.0 33 3.0 70 1 0 3DFACE 8 star_u 10 2.2368440585138 20 1.27648079851406 30 0.0 11 3.0 21 0.878679656440358 31 0.0 12 2.21138724003369 22 1.20533375707888 32 0.0 13 2.21138724003369 23 1.20533375707888 33 0.0 70 1 0 3DFACE 8 star_u 10 3.0 20 0.878679656440358 30 0.0 11 2.2368440585138 21 1.27648079851406 31 0.0 12 2.25520466591049 22 1.34978045204758 32 0.0 13 2.25520466591049 23 1.34978045204758 33 0.0 70 13 0 3DFACE 8 star_u 10 3.0 20 0.878679656440358 30 0.0 11 2.25520466591049 21 1.34978045204758 31 0.0 12 3.0 22 1.20163144893051 32 0.0 13 3.0 23 1.20163144893051 33 0.0 70 1 0 3DFACE 8 star_u 10 0.0 20 0.497732043121051 30 3.0 11 0.0 21 0.0 31 0.0 12 0.0 22 0.0 32 3.0 13 0.0 23 0.0 33 3.0 70 1 0 3DFACE 8 star_u 10 0.0 20 0.0 30 0.0 11 0.0 21 0.497732043121051 31 3.0 12 0.0 22 0.497732043121051 32 0.0 13 0.0 23 0.497732043121051 33 0.0 70 3 0 3DFACE 8 star_u 10 0.0 20 0.497732043121051 30 0.0 11 0.0 21 0.497732043121051 31 3.0 12 -4.44089209850063e-16 22 0.878679656440356 32 3.0 13 -4.44089209850063e-16 23 0.878679656440356 33 3.0 70 13 0 3DFACE 8 star_u 10 0.0 20 0.497732043121051 30 0.0 11 -4.44089209850063e-16 21 0.878679656440356 31 3.0 12 0.0 22 0.878679656440356 32 0.0 13 0.0 23 0.878679656440356 33 0.0 70 1 0 3DFACE 8 star_u 10 0.955527778486358 20 2.04447222151364 30 3.0 11 0.205 21 3.0 31 3.0 12 0.0 22 3.0 32 3.0 13 0.0 23 3.0 33 3.0 70 1 0 3DFACE 8 star_u 10 0.205 20 3.0 30 3.0 11 0.955527778486358 21 2.04447222151364 31 3.0 12 0.497732043121052 22 3.0 32 3.0 13 0.497732043121052 23 3.0 33 3.0 70 3 0 3DFACE 8 star_u 10 0.497732043121052 20 3.0 30 3.0 11 0.955527778486358 21 2.04447222151364 31 3.0 12 1.01151717119399 22 2.09521804908931 32 3.0 13 1.01151717119399 23 2.09521804908931 33 3.0 70 13 0 3DFACE 8 star_u 10 0.497732043121052 20 3.0 30 3.0 11 1.01151717119399 21 2.09521804908931 31 3.0 12 1.07221092057491 22 2.14023160147296 32 3.0 13 1.07221092057491 23 2.14023160147296 33 3.0 70 1 0 3DFACE 8 star_u 10 1.5 20 0.0 30 3.0 11 1.34978045204758 21 0.744795334089513 31 3.0 12 1.20163144893051 22 1.11022302462516e-16 32 3.0 13 1.20163144893051 23 1.11022302462516e-16 33 3.0 70 1 0 3DFACE 8 star_u 10 1.34978045204758 20 0.744795334089513 30 3.0 11 1.5 21 0.0 31 3.0 12 1.42452680194624 22 0.733707760462408 32 3.0 13 1.42452680194624 23 0.733707760462408 33 3.0 70 3 0 3DFACE 8 star_u 10 1.42452680194624 20 0.733707760462408 30 3.0 11 1.5 21 0.0 31 3.0 12 1.5 22 0.73 32 3.0 13 1.5 23 0.73 33 3.0 70 1 0 3DFACE 8 star_u 10 0.788612759966309 20 1.20533375707888 30 0.0 11 0.0 21 0.497732043121051 31 0.0 12 0.0 22 0.878679656440356 32 0.0 13 0.0 23 0.878679656440356 33 0.0 70 1 0 3DFACE 8 star_u 10 0.0 20 0.497732043121051 30 0.0 11 0.788612759966309 21 1.20533375707888 31 0.0 12 0.820920626451767 22 1.13702451264398 32 0.0 13 0.820920626451767 23 1.13702451264398 33 0.0 70 13 0 3DFACE 8 star_u 10 0.0 20 0.497732043121051 30 0.0 11 0.820920626451767 21 1.13702451264398 31 0.0 12 0.85976839852704 22 1.07221092057491 32 0.0 13 0.85976839852704 23 1.07221092057491 33 0.0 70 1 0 3DFACE 8 star_u 10 1.07221092057491 20 0.85976839852704 30 3.0 11 1.01151717119399 21 0.904781950910692 31 1.5 12 1.07221092057491 22 0.85976839852704 32 1.5 13 1.07221092057491 23 0.85976839852704 33 1.5 70 1 0 3DFACE 8 star_u 10 1.01151717119399 20 0.904781950910692 30 1.5 11 1.07221092057491 21 0.85976839852704 31 3.0 12 1.01151717119399 22 0.904781950910692 32 3.0 13 1.01151717119399 23 0.904781950910692 33 3.0 70 1 0 3DFACE 8 star_u 10 3.0 20 2.50226795687895 30 0.0 11 2.17907937354823 21 1.86297548735602 31 0.0 12 2.14023160147296 22 1.92778907942509 32 0.0 13 2.14023160147296 23 1.92778907942509 33 0.0 70 1 0 3DFACE 8 star_u 10 2.17907937354823 20 1.86297548735602 30 0.0 11 3.0 21 2.50226795687895 31 0.0 12 2.21138724003369 22 1.79466624292112 32 0.0 13 2.21138724003369 23 1.79466624292112 33 0.0 70 3 0 3DFACE 8 star_u 10 2.21138724003369 20 1.79466624292112 30 0.0 11 3.0 21 2.50226795687895 31 0.0 12 3.0 22 2.12132034355964 32 0.0 13 3.0 23 2.12132034355964 33 0.0 70 1 0 3DFACE 8 star_u 10 1.5 20 3.0 30 3.0 11 1.5 21 2.27 31 1.5 12 1.5 22 2.27 32 3.0 13 1.5 23 2.27 33 3.0 70 1 0 3DFACE 8 star_u 10 1.5 20 2.27 30 1.5 11 1.5 21 3.0 31 3.0 12 1.5 22 2.27 32 0.0 13 1.5 23 2.27 33 0.0 70 3 0 3DFACE 8 star_u 10 1.5 20 2.27 30 0.0 11 1.5 21 3.0 31 3.0 12 1.5 22 3.0 32 0.0 13 1.5 23 3.0 33 0.0 70 3 0 3DFACE 8 star_u 10 1.5 20 3.0 30 0.0 11 1.5 21 3.0 31 3.0 12 1.5 22 3.0 32 2.795 13 1.5 23 3.0 33 2.795 70 13 0 3DFACE 8 star_u 10 1.5 20 3.0 30 0.0 11 1.5 21 3.0 31 2.795 12 1.5 22 3.0 32 0.205 13 1.5 23 3.0 33 0.205 70 1 0 3DFACE 8 star_u 10 2.27 20 1.5 30 1.5 11 2.26629223953759 21 1.42452680194624 31 0.0 12 2.26629223953759 22 1.42452680194624 32 1.5 13 2.26629223953759 23 1.42452680194624 33 1.5 70 1 0 3DFACE 8 star_u 10 2.26629223953759 20 1.42452680194624 30 0.0 11 2.27 21 1.5 31 1.5 12 2.27 22 1.5 32 0.0 13 2.27 23 1.5 33 0.0 70 1 0 3DFACE 8 star_u 10 2.2368440585138 20 1.27648079851406 30 1.5 11 2.21138724003369 21 1.20533375707888 31 0.0 12 2.21138724003369 22 1.20533375707888 32 1.5 13 2.21138724003369 23 1.20533375707888 33 1.5 70 1 0 3DFACE 8 star_u 10 2.21138724003369 20 1.20533375707888 30 0.0 11 2.2368440585138 21 1.27648079851406 31 1.5 12 2.2368440585138 22 1.27648079851406 32 0.0 13 2.2368440585138 23 1.27648079851406 33 0.0 70 1 0 3DFACE 8 star_u 10 1.79466624292112 20 0.788612759966309 30 3.0 11 2.12132034355964 21 0.0 31 2.795 12 2.12132034355964 22 0.0 32 3.0 13 2.12132034355964 23 0.0 33 3.0 70 1 0 3DFACE 8 star_u 10 2.12132034355964 20 0.0 30 2.795 11 1.79466624292112 21 0.788612759966309 31 3.0 12 2.12132034355964 22 0.0 32 2.17367965644036 13 2.12132034355964 23 0.0 33 2.17367965644036 70 3 0 3DFACE 8 star_u 10 2.12132034355964 20 0.0 30 2.17367965644036 11 1.79466624292112 21 0.788612759966309 31 3.0 12 2.12132034355964 22 0.0 32 0.826320343559644 13 2.12132034355964 23 0.0 33 0.826320343559644 70 3 0 3DFACE 8 star_u 10 2.12132034355964 20 0.0 30 0.826320343559644 11 1.79466624292112 21 0.788612759966309 31 3.0 12 2.12132034355964 22 0.0 32 0.205 13 2.12132034355964 23 0.0 33 0.205 70 3 0 3DFACE 8 star_u 10 2.12132034355964 20 0.0 30 0.205 11 1.79466624292112 21 0.788612759966309 31 3.0 12 2.12132034355964 22 0.0 32 0.0 13 2.12132034355964 23 0.0 33 0.0 70 3 0 3DFACE 8 star_u 10 2.12132034355964 20 0.0 30 0.0 11 1.79466624292112 21 0.788612759966309 31 3.0 12 1.79466624292112 22 0.788612759966309 32 0.0 13 1.79466624292112 23 0.788612759966309 33 0.0 70 3 0 3DFACE 8 star_u 10 1.79466624292112 20 0.788612759966309 30 0.0 11 1.79466624292112 21 0.788612759966309 31 3.0 12 1.79466624292112 22 0.788612759966309 32 1.5 13 1.79466624292112 23 0.788612759966309 33 1.5 70 1 0 3DFACE 8 star_u 10 1.01151717119399 20 0.904781950910692 30 3.0 11 0.955527778486358 21 0.955527778486358 31 1.5 12 1.01151717119399 22 0.904781950910692 32 1.5 13 1.01151717119399 23 0.904781950910692 33 1.5 70 1 0 3DFACE 8 star_u 10 0.955527778486358 20 0.955527778486358 30 1.5 11 1.01151717119399 21 0.904781950910692 31 3.0 12 0.955527778486358 22 0.955527778486358 32 3.0 13 0.955527778486358 23 0.955527778486358 33 3.0 70 1 0 3DFACE 8 star_u 10 2.17907937354823 20 1.13702451264398 30 1.5 11 2.14023160147296 21 1.07221092057491 31 3.0 12 2.14023160147296 22 1.07221092057491 32 1.5 13 2.14023160147296 23 1.07221092057491 33 1.5 70 1 0 3DFACE 8 star_u 10 2.14023160147296 20 1.07221092057491 30 3.0 11 2.17907937354823 21 1.13702451264398 31 1.5 12 2.17907937354823 22 1.13702451264398 32 3.0 13 2.17907937354823 23 1.13702451264398 33 3.0 70 1 0 3DFACE 8 star_u 10 2.12132034355964 20 3.0 30 0.0 11 1.79466624292112 21 2.21138724003369 31 1.5 12 1.79466624292112 22 2.21138724003369 32 0.0 13 1.79466624292112 23 2.21138724003369 33 0.0 70 1 0 3DFACE 8 star_u 10 1.79466624292112 20 2.21138724003369 30 1.5 11 2.12132034355964 21 3.0 31 0.0 12 1.79466624292112 22 2.21138724003369 32 3.0 13 1.79466624292112 23 2.21138724003369 33 3.0 70 3 0 3DFACE 8 star_u 10 1.79466624292112 20 2.21138724003369 30 3.0 11 2.12132034355964 21 3.0 31 0.0 12 2.12132034355964 22 3.0 32 3.0 13 2.12132034355964 23 3.0 33 3.0 70 3 0 3DFACE 8 star_u 10 2.12132034355964 20 3.0 30 3.0 11 2.12132034355964 21 3.0 31 0.0 12 2.12132034355964 22 3.0 32 0.205 13 2.12132034355964 23 3.0 33 0.205 70 13 0 3DFACE 8 star_u 10 2.12132034355964 20 3.0 30 3.0 11 2.12132034355964 21 3.0 31 0.205 12 2.12132034355964 22 3.0 32 0.826320343559643 13 2.12132034355964 23 3.0 33 0.826320343559643 70 13 0 3DFACE 8 star_u 10 2.12132034355964 20 3.0 30 3.0 11 2.12132034355964 21 3.0 31 0.826320343559643 12 2.12132034355964 22 3.0 32 2.17367965644036 13 2.12132034355964 23 3.0 33 2.17367965644036 70 13 0 3DFACE 8 star_u 10 2.12132034355964 20 3.0 30 3.0 11 2.12132034355964 21 3.0 31 2.17367965644036 12 2.12132034355964 22 3.0 32 2.795 13 2.12132034355964 23 3.0 33 2.795 70 1 0 3DFACE 8 star_u 10 2.04447222151364 20 2.04447222151364 30 1.5 11 2.09521804908931 21 1.98848282880601 31 0.0 12 2.09521804908931 22 1.98848282880601 32 1.5 13 2.09521804908931 23 1.98848282880601 33 1.5 70 1 0 3DFACE 8 star_u 10 2.09521804908931 20 1.98848282880601 30 0.0 11 2.04447222151364 21 2.04447222151364 31 1.5 12 2.04447222151364 22 2.04447222151364 32 0.0 13 2.04447222151364 23 2.04447222151364 33 0.0 70 1 0 3DFACE 8 star_u 10 1.20533375707888 20 2.21138724003369 30 3.0 11 1.27648079851406 21 2.2368440585138 31 1.5 12 1.20533375707888 22 2.21138724003369 32 1.5 13 1.20533375707888 23 2.21138724003369 33 1.5 70 1 0 3DFACE 8 star_u 10 1.27648079851406 20 2.2368440585138 30 1.5 11 1.20533375707888 21 2.21138724003369 31 3.0 12 1.27648079851406 22 2.2368440585138 32 3.0 13 1.27648079851406 23 2.2368440585138 33 3.0 70 1 0 3DFACE 8 star_u 10 2.21138724003369 20 1.79466624292112 30 1.5 11 2.2368440585138 21 1.72351920148594 31 3.0 12 2.2368440585138 22 1.72351920148594 32 1.5 13 2.2368440585138 23 1.72351920148594 33 1.5 70 1 0 3DFACE 8 star_u 10 2.2368440585138 20 1.72351920148594 30 3.0 11 2.21138724003369 21 1.79466624292112 31 1.5 12 2.21138724003369 22 1.79466624292112 32 3.0 13 2.21138724003369 23 1.79466624292112 33 3.0 70 1 0 3DFACE 8 star_u 10 1.57547319805376 20 0.733707760462408 30 3.0 11 1.5 21 0.73 31 1.5 12 1.57547319805376 22 0.733707760462408 32 1.5 13 1.57547319805376 23 0.733707760462408 33 1.5 70 1 0 3DFACE 8 star_u 10 1.5 20 0.73 30 1.5 11 1.57547319805376 21 0.733707760462408 31 3.0 12 1.5 22 0.73 32 3.0 13 1.5 23 0.73 33 3.0 70 1 0 3DFACE 8 star_u 10 2.04447222151364 20 0.955527778486358 30 1.5 11 3.0 21 0.0 31 0.0 12 2.04447222151364 22 0.955527778486358 32 0.0 13 2.04447222151364 23 0.955527778486358 33 0.0 70 1 0 3DFACE 8 star_u 10 3.0 20 0.0 30 0.0 11 2.04447222151364 21 0.955527778486358 31 1.5 12 3.0 22 0.0 32 0.205 13 3.0 23 0.0 33 0.205 70 3 0 3DFACE 8 star_u 10 3.0 20 0.0 30 0.205 11 2.04447222151364 21 0.955527778486358 31 1.5 12 3.0 22 0.0 32 1.5 13 3.0 23 0.0 33 1.5 70 3 0 3DFACE 8 star_u 10 3.0 20 0.0 30 1.5 11 2.04447222151364 21 0.955527778486358 31 1.5 12 2.04447222151364 22 0.955527778486358 32 3.0 13 2.04447222151364 23 0.955527778486358 33 3.0 70 13 0 3DFACE 8 star_u 10 3.0 20 0.0 30 1.5 11 2.04447222151364 21 0.955527778486358 31 3.0 12 3.0 22 0.0 32 2.795 13 3.0 23 0.0 33 2.795 70 3 0 3DFACE 8 star_u 10 3.0 20 0.0 30 2.795 11 2.04447222151364 21 0.955527778486358 31 3.0 12 3.0 22 0.0 32 3.0 13 3.0 23 0.0 33 3.0 70 1 0 3DFACE 8 star_u 10 2.09521804908931 20 1.98848282880601 30 1.5 11 2.14023160147296 21 1.92778907942509 31 0.0 12 2.14023160147296 22 1.92778907942509 32 1.5 13 2.14023160147296 23 1.92778907942509 33 1.5 70 1 0 3DFACE 8 star_u 10 2.14023160147296 20 1.92778907942509 30 0.0 11 2.09521804908931 21 1.98848282880601 31 1.5 12 2.09521804908931 22 1.98848282880601 32 0.0 13 2.09521804908931 23 1.98848282880601 33 0.0 70 1 0 3DFACE 8 star_u 10 2.25520466591049 20 1.65021954795242 30 1.5 11 2.26629223953759 21 1.57547319805376 31 3.0 12 2.26629223953759 22 1.57547319805376 32 1.5 13 2.26629223953759 23 1.57547319805376 33 1.5 70 1 0 3DFACE 8 star_u 10 2.26629223953759 20 1.57547319805376 30 3.0 11 2.25520466591049 21 1.65021954795242 31 1.5 12 2.25520466591049 22 1.65021954795242 32 3.0 13 2.25520466591049 23 1.65021954795242 33 3.0 70 1 0 3DFACE 8 star_u 10 1.20533375707888 20 0.788612759966309 30 1.5 11 1.27648079851406 21 0.763155941486199 31 0.0 12 1.20533375707888 22 0.788612759966309 32 0.0 13 1.20533375707888 23 0.788612759966309 33 0.0 70 1 0 3DFACE 8 star_u 10 1.27648079851406 20 0.763155941486199 30 0.0 11 1.20533375707888 21 0.788612759966309 31 1.5 12 1.27648079851406 22 0.763155941486199 32 1.5 13 1.27648079851406 23 0.763155941486199 33 1.5 70 1 0 3DFACE 8 star_u 10 1.65021954795242 20 2.25520466591049 30 1.5 11 1.57547319805376 21 2.26629223953759 31 0.0 12 1.65021954795242 22 2.25520466591049 32 0.0 13 1.65021954795242 23 2.25520466591049 33 0.0 70 1 0 3DFACE 8 star_u 10 1.57547319805376 20 2.26629223953759 30 0.0 11 1.65021954795242 21 2.25520466591049 31 1.5 12 1.57547319805376 22 2.26629223953759 32 1.5 13 1.57547319805376 23 2.26629223953759 33 1.5 70 1 0 3DFACE 8 star_u 10 1.72351920148594 20 2.2368440585138 30 1.5 11 1.65021954795242 21 2.25520466591049 31 0.0 12 1.72351920148594 22 2.2368440585138 32 0.0 13 1.72351920148594 23 2.2368440585138 33 0.0 70 1 0 3DFACE 8 star_u 10 1.65021954795242 20 2.25520466591049 30 0.0 11 1.72351920148594 21 2.2368440585138 31 1.5 12 1.65021954795242 22 2.25520466591049 32 1.5 13 1.65021954795242 23 2.25520466591049 33 1.5 70 1 0 3DFACE 8 star_u 10 1.57547319805376 20 2.26629223953759 30 1.5 11 1.5 21 2.27 31 0.0 12 1.57547319805376 22 2.26629223953759 32 0.0 13 1.57547319805376 23 2.26629223953759 33 0.0 70 1 0 3DFACE 8 star_u 10 1.5 20 2.27 30 0.0 11 1.57547319805376 21 2.26629223953759 31 1.5 12 1.5 22 2.27 32 1.5 13 1.5 23 2.27 33 1.5 70 1 0 3DFACE 8 star_u 10 0.904781950910692 20 1.01151717119399 30 0.0 11 0.955527778486358 21 0.955527778486358 31 1.5 12 0.955527778486358 22 0.955527778486358 32 0.0 13 0.955527778486358 23 0.955527778486358 33 0.0 70 1 0 3DFACE 8 star_u 10 0.955527778486358 20 0.955527778486358 30 1.5 11 0.904781950910692 21 1.01151717119399 31 0.0 12 0.904781950910692 22 1.01151717119399 32 1.5 13 0.904781950910692 23 1.01151717119399 33 1.5 70 1 0 3DFACE 8 star_u 10 0.820920626451767 20 1.86297548735602 30 3.0 11 0.788612759966309 21 1.79466624292112 31 1.5 12 0.788612759966309 22 1.79466624292112 32 3.0 13 0.788612759966309 23 1.79466624292112 33 3.0 70 1 0 3DFACE 8 star_u 10 0.788612759966309 20 1.79466624292112 30 1.5 11 0.820920626451767 21 1.86297548735602 31 3.0 12 0.820920626451767 22 1.86297548735602 32 1.5 13 0.820920626451767 23 1.86297548735602 33 1.5 70 1 0 3DFACE 8 star_u 10 0.0 20 1.79836855106949 30 3.0 11 0.0 21 1.5 31 0.0 12 0.0 22 1.5 32 3.0 13 0.0 23 1.5 33 3.0 70 1 0 3DFACE 8 star_u 10 0.0 20 1.5 30 0.0 11 0.0 21 1.79836855106949 31 3.0 12 0.0 22 1.79836855106949 32 0.0 13 0.0 23 1.79836855106949 33 0.0 70 3 0 3DFACE 8 star_u 10 0.0 20 1.79836855106949 30 0.0 11 0.0 21 1.79836855106949 31 3.0 12 -2.22044604925031e-16 22 2.12132034355964 32 3.0 13 -2.22044604925031e-16 23 2.12132034355964 33 3.0 70 13 0 3DFACE 8 star_u 10 0.0 20 1.79836855106949 30 0.0 11 -2.22044604925031e-16 21 2.12132034355964 31 3.0 12 0.0 22 2.12132034355964 32 0.0 13 0.0 23 2.12132034355964 33 0.0 70 1 0 3DFACE 8 star_u 10 1.79836855106949 20 3.0 30 0.0 11 1.72351920148594 21 2.2368440585138 31 0.0 12 1.65021954795242 22 2.25520466591049 32 0.0 13 1.65021954795242 23 2.25520466591049 33 0.0 70 1 0 3DFACE 8 star_u 10 1.72351920148594 20 2.2368440585138 30 0.0 11 1.79836855106949 21 3.0 31 0.0 12 1.79466624292112 22 2.21138724003369 32 0.0 13 1.79466624292112 23 2.21138724003369 33 0.0 70 3 0 3DFACE 8 star_u 10 1.79466624292112 20 2.21138724003369 30 0.0 11 1.79836855106949 21 3.0 31 0.0 12 2.12132034355964 22 3.0 32 0.0 13 2.12132034355964 23 3.0 33 0.0 70 1 0 3DFACE 8 star_u 10 1.86297548735602 20 0.820920626451767 30 0.0 11 2.12132034355964 21 0.0 31 0.0 12 1.79466624292112 22 0.788612759966309 32 0.0 13 1.79466624292112 23 0.788612759966309 33 0.0 70 1 0 3DFACE 8 star_u 10 2.12132034355964 20 0.0 30 0.0 11 1.86297548735602 21 0.820920626451767 31 0.0 12 1.92778907942509 22 0.85976839852704 32 0.0 13 1.92778907942509 23 0.85976839852704 33 0.0 70 13 0 3DFACE 8 star_u 10 2.12132034355964 20 0.0 30 0.0 11 1.92778907942509 21 0.85976839852704 31 0.0 12 2.50226795687895 22 0.0 32 0.0 13 2.50226795687895 23 0.0 33 0.0 70 1 0 3DFACE 8 star_u 10 -4.44089209850063e-16 20 0.878679656440356 30 3.0 11 0.788612759966309 21 1.20533375707888 31 0.0 12 0.0 22 0.878679656440356 32 0.0 13 0.0 23 0.878679656440356 33 0.0 70 1 0 3DFACE 8 star_u 10 0.788612759966309 20 1.20533375707888 30 0.0 11 -4.44089209850063e-16 21 0.878679656440356 31 3.0 12 0.788612759966309 22 1.20533375707888 32 1.5 13 0.788612759966309 23 1.20533375707888 33 1.5 70 3 0 3DFACE 8 star_u 10 0.788612759966309 20 1.20533375707888 30 1.5 11 -4.44089209850063e-16 21 0.878679656440356 31 3.0 12 0.788612759966309 22 1.20533375707888 32 3.0 13 0.788612759966309 23 1.20533375707888 33 3.0 70 1 0 3DFACE 8 star_u 10 0.73 20 1.5 30 1.5 11 0.0 21 1.5 31 0.0 12 0.73 22 1.5 32 0.0 13 0.73 23 1.5 33 0.0 70 1 0 3DFACE 8 star_u 10 0.0 20 1.5 30 0.0 11 0.73 21 1.5 31 1.5 12 0.0 22 1.5 32 3.0 13 0.0 23 1.5 33 3.0 70 3 0 3DFACE 8 star_u 10 0.0 20 1.5 30 3.0 11 0.73 21 1.5 31 1.5 12 0.73 22 1.5 32 3.0 13 0.73 23 1.5 33 3.0 70 1 0 3DFACE 8 star_u 10 2.04447222151364 20 2.04447222151364 30 1.5 11 3.0 21 3.0 31 0.0 12 2.04447222151364 22 2.04447222151364 32 0.0 13 2.04447222151364 23 2.04447222151364 33 0.0 70 1 0 3DFACE 8 star_u 10 3.0 20 3.0 30 0.0 11 2.04447222151364 21 2.04447222151364 31 1.5 12 3.0 22 3.0 32 3.0 13 3.0 23 3.0 33 3.0 70 3 0 3DFACE 8 star_u 10 3.0 20 3.0 30 3.0 11 2.04447222151364 21 2.04447222151364 31 1.5 12 2.04447222151364 22 2.04447222151364 32 3.0 13 2.04447222151364 23 2.04447222151364 33 3.0 70 1 0 3DFACE 8 star_u 10 3.0 20 0.878679656440358 30 3.0 11 2.21138724003369 21 1.20533375707888 31 0.0 12 3.0 22 0.878679656440358 32 0.0 13 3.0 23 0.878679656440358 33 0.0 70 1 0 3DFACE 8 star_u 10 2.21138724003369 20 1.20533375707888 30 0.0 11 3.0 21 0.878679656440358 31 3.0 12 2.21138724003369 22 1.20533375707888 32 1.5 13 2.21138724003369 23 1.20533375707888 33 1.5 70 3 0 3DFACE 8 star_u 10 2.21138724003369 20 1.20533375707888 30 1.5 11 3.0 21 0.878679656440358 31 3.0 12 2.21138724003369 22 1.20533375707888 32 3.0 13 2.21138724003369 23 1.20533375707888 33 3.0 70 1 0 3DFACE 8 star_u 10 1.20533375707888 20 0.788612759966309 30 3.0 11 1.13702451264398 21 0.820920626451767 31 1.5 12 1.20533375707888 22 0.788612759966309 32 1.5 13 1.20533375707888 23 0.788612759966309 33 1.5 70 1 0 3DFACE 8 star_u 10 1.13702451264398 20 0.820920626451767 30 1.5 11 1.20533375707888 21 0.788612759966309 31 3.0 12 1.13702451264398 22 0.820920626451767 32 3.0 13 1.13702451264398 23 0.820920626451767 33 3.0 70 1 0 3DFACE 8 star_u 10 0.878679656440356 20 3.0 30 0.0 11 1.20533375707888 21 2.21138724003369 31 1.5 12 1.20533375707888 22 2.21138724003369 32 0.0 13 1.20533375707888 23 2.21138724003369 33 0.0 70 1 0 3DFACE 8 star_u 10 1.20533375707888 20 2.21138724003369 30 1.5 11 0.878679656440356 21 3.0 31 0.0 12 1.20533375707888 22 2.21138724003369 32 3.0 13 1.20533375707888 23 2.21138724003369 33 3.0 70 3 0 3DFACE 8 star_u 10 1.20533375707888 20 2.21138724003369 30 3.0 11 0.878679656440356 21 3.0 31 0.0 12 0.878679656440356 22 3.0 32 3.0 13 0.878679656440356 23 3.0 33 3.0 70 3 0 3DFACE 8 star_u 10 0.878679656440356 20 3.0 30 3.0 11 0.878679656440356 21 3.0 31 0.0 12 0.878679656440356 22 3.0 32 0.205 13 0.878679656440356 23 3.0 33 0.205 70 13 0 3DFACE 8 star_u 10 0.878679656440356 20 3.0 30 3.0 11 0.878679656440356 21 3.0 31 0.205 12 0.878679656440356 22 3.0 32 0.826320343559644 13 0.878679656440356 23 3.0 33 0.826320343559644 70 13 0 3DFACE 8 star_u 10 0.878679656440356 20 3.0 30 3.0 11 0.878679656440356 21 3.0 31 0.826320343559644 12 0.878679656440356 22 3.0 32 2.17367965644036 13 0.878679656440356 23 3.0 33 2.17367965644036 70 13 0 3DFACE 8 star_u 10 0.878679656440356 20 3.0 30 3.0 11 0.878679656440356 21 3.0 31 2.17367965644036 12 0.878679656440356 22 3.0 32 2.795 13 0.878679656440356 23 3.0 33 2.795 70 1 0 3DFACE 8 star_u 10 0.955527778486358 20 2.04447222151364 30 3.0 11 0.904781950910692 21 1.98848282880601 31 1.5 12 0.904781950910692 22 1.98848282880601 32 3.0 13 0.904781950910692 23 1.98848282880601 33 3.0 70 1 0 3DFACE 8 star_u 10 0.904781950910692 20 1.98848282880601 30 1.5 11 0.955527778486358 21 2.04447222151364 31 3.0 12 0.955527778486358 22 2.04447222151364 32 1.5 13 0.955527778486358 23 2.04447222151364 33 1.5 70 1 0 3DFACE 8 star_u 10 0.733707760462408 20 1.42452680194624 30 3.0 11 0.744795334089513 21 1.34978045204758 31 1.5 12 0.744795334089513 22 1.34978045204758 32 3.0 13 0.744795334089513 23 1.34978045204758 33 3.0 70 1 0 3DFACE 8 star_u 10 0.744795334089513 20 1.34978045204758 30 1.5 11 0.733707760462408 21 1.42452680194624 31 3.0 12 0.733707760462408 22 1.42452680194624 32 1.5 13 0.733707760462408 23 1.42452680194624 33 1.5 70 1 0 3DFACE 8 star_u 10 0.0 20 3.0 30 3.0 11 0.955527778486358 21 2.04447222151364 31 1.5 12 0.955527778486358 22 2.04447222151364 32 3.0 13 0.955527778486358 23 2.04447222151364 33 3.0 70 1 0 3DFACE 8 star_u 10 0.955527778486358 20 2.04447222151364 30 1.5 11 0.0 21 3.0 31 3.0 12 0.955527778486358 22 2.04447222151364 32 0.0 13 0.955527778486358 23 2.04447222151364 33 0.0 70 3 0 3DFACE 8 star_u 10 0.955527778486358 20 2.04447222151364 30 0.0 11 0.0 21 3.0 31 3.0 12 0.0 22 3.0 32 0.0 13 0.0 23 3.0 33 0.0 70 3 0 3DFACE 8 star_u 10 0.0 20 3.0 30 0.0 11 0.0 21 3.0 31 3.0 12 0.0 22 3.0 32 2.795 13 0.0 23 3.0 33 2.795 70 13 0 3DFACE 8 star_u 10 0.0 20 3.0 30 0.0 11 0.0 21 3.0 31 2.795 12 0.0 22 3.0 32 1.5 13 0.0 23 3.0 33 1.5 70 13 0 3DFACE 8 star_u 10 0.0 20 3.0 30 0.0 11 0.0 21 3.0 31 1.5 12 0.0 22 3.0 32 0.205 13 0.0 23 3.0 33 0.205 70 1 0 3DFACE 8 star_u 10 2.04447222151364 20 2.04447222151364 30 1.5 11 2.21138724003369 21 1.79466624292112 31 1.5 12 1.5 22 1.5 32 1.5 13 1.5 23 1.5 33 1.5 70 1 0 3DFACE 8 star_u 10 2.21138724003369 20 1.79466624292112 30 1.5 11 2.04447222151364 21 2.04447222151364 31 1.5 12 2.09521804908931 22 1.98848282880601 32 1.5 13 2.09521804908931 23 1.98848282880601 33 1.5 70 13 0 3DFACE 8 star_u 10 2.21138724003369 20 1.79466624292112 30 1.5 11 2.09521804908931 21 1.98848282880601 31 1.5 12 2.14023160147296 22 1.92778907942509 32 1.5 13 2.14023160147296 23 1.92778907942509 33 1.5 70 13 0 3DFACE 8 star_u 10 2.21138724003369 20 1.79466624292112 30 1.5 11 2.14023160147296 21 1.92778907942509 31 1.5 12 2.17907937354823 22 1.86297548735602 32 1.5 13 2.17907937354823 23 1.86297548735602 33 1.5 70 1 0 3DFACE 8 star_u 10 1.72351920148594 20 0.763155941486199 30 3.0 11 1.65021954795242 21 0.744795334089513 31 1.5 12 1.72351920148594 22 0.763155941486199 32 1.5 13 1.72351920148594 23 0.763155941486199 33 1.5 70 1 0 3DFACE 8 star_u 10 1.65021954795242 20 0.744795334089513 30 1.5 11 1.72351920148594 21 0.763155941486199 31 3.0 12 1.65021954795242 22 0.744795334089513 32 3.0 13 1.65021954795242 23 0.744795334089513 33 3.0 70 1 0 3DFACE 8 star_u 10 0.820920626451767 20 1.13702451264398 30 0.0 11 0.85976839852704 21 1.07221092057491 31 1.5 12 0.85976839852704 22 1.07221092057491 32 0.0 13 0.85976839852704 23 1.07221092057491 33 0.0 70 1 0 3DFACE 8 star_u 10 0.85976839852704 20 1.07221092057491 30 1.5 11 0.820920626451767 21 1.13702451264398 31 0.0 12 0.820920626451767 22 1.13702451264398 32 1.5 13 0.820920626451767 23 1.13702451264398 33 1.5 70 1 0 3DFACE 8 star_u 10 2.14023160147296 20 1.07221092057491 30 1.5 11 2.09521804908931 21 1.01151717119399 31 3.0 12 2.09521804908931 22 1.01151717119399 32 1.5 13 2.09521804908931 23 1.01151717119399 33 1.5 70 1 0 3DFACE 8 star_u 10 2.09521804908931 20 1.01151717119399 30 3.0 11 2.14023160147296 21 1.07221092057491 31 1.5 12 2.14023160147296 22 1.07221092057491 32 3.0 13 2.14023160147296 23 1.07221092057491 33 3.0 70 1 0 3DFACE 8 star_u 10 0.878679656440356 20 3.0 30 0.0 11 1.07221092057491 21 2.14023160147296 31 0.0 12 0.497732043121052 22 3.0 32 0.0 13 0.497732043121052 23 3.0 33 0.0 70 1 0 3DFACE 8 star_u 10 1.07221092057491 20 2.14023160147296 30 0.0 11 0.878679656440356 21 3.0 31 0.0 12 1.13702451264398 22 2.17907937354823 32 0.0 13 1.13702451264398 23 2.17907937354823 33 0.0 70 3 0 3DFACE 8 star_u 10 1.13702451264398 20 2.17907937354823 30 0.0 11 0.878679656440356 21 3.0 31 0.0 12 1.20533375707888 22 2.21138724003369 32 0.0 13 1.20533375707888 23 2.21138724003369 33 0.0 70 1 0 3DFACE 8 star_u 10 1.5 20 0.0 30 2.795 11 0.878679656440357 21 1.53956708492942e-17 31 0.826320343559643 12 1.5 22 0.0 32 0.205 13 1.5 23 0.0 33 0.205 70 1 0 3DFACE 8 star_u 10 0.878679656440357 20 1.53956708492942e-17 30 0.826320343559643 11 1.5 21 0.0 31 2.795 12 0.878679656440357 22 4.01154803819637e-17 32 2.17367965644036 13 0.878679656440357 23 4.01154803819637e-17 33 2.17367965644036 70 1 0 3DFACE 8 star_u 10 1.5 20 0.73 30 0.0 11 1.5 21 0.0 31 0.205 12 1.5 22 0.0 32 0.0 13 1.5 23 0.0 33 0.0 70 1 0 3DFACE 8 star_u 10 1.5 20 0.0 30 0.205 11 1.5 21 0.73 31 0.0 12 1.5 22 0.0 32 2.795 13 1.5 23 0.0 33 2.795 70 3 0 3DFACE 8 star_u 10 1.5 20 0.0 30 2.795 11 1.5 21 0.73 31 0.0 12 1.5 22 0.0 32 3.0 13 1.5 23 0.0 33 3.0 70 3 0 3DFACE 8 star_u 10 1.5 20 0.0 30 3.0 11 1.5 21 0.73 31 0.0 12 1.5 22 0.73 32 3.0 13 1.5 23 0.73 33 3.0 70 3 0 3DFACE 8 star_u 10 1.5 20 0.73 30 3.0 11 1.5 21 0.73 31 0.0 12 1.5 22 0.73 32 1.5 13 1.5 23 0.73 33 1.5 70 1 0 3DFACE 8 star_u 10 2.26629223953759 20 1.42452680194624 30 1.5 11 2.25520466591049 21 1.34978045204758 31 0.0 12 2.25520466591049 22 1.34978045204758 32 1.5 13 2.25520466591049 23 1.34978045204758 33 1.5 70 1 0 3DFACE 8 star_u 10 2.25520466591049 20 1.34978045204758 30 0.0 11 2.26629223953759 21 1.42452680194624 31 1.5 12 2.26629223953759 22 1.42452680194624 32 0.0 13 2.26629223953759 23 1.42452680194624 33 0.0 70 1 0 3DFACE 8 star_u 10 2.2368440585138 20 1.72351920148594 30 1.5 11 2.25520466591049 21 1.65021954795242 31 3.0 12 2.25520466591049 22 1.65021954795242 32 1.5 13 2.25520466591049 23 1.65021954795242 33 1.5 70 1 0 3DFACE 8 star_u 10 2.25520466591049 20 1.65021954795242 30 3.0 11 2.2368440585138 21 1.72351920148594 31 1.5 12 2.2368440585138 22 1.72351920148594 32 3.0 13 2.2368440585138 23 1.72351920148594 33 3.0 70 1 0 3DFACE 8 star_u 10 1.27648079851406 20 2.2368440585138 30 3.0 11 1.34978045204758 21 2.25520466591049 31 1.5 12 1.27648079851406 22 2.2368440585138 32 1.5 13 1.27648079851406 23 2.2368440585138 33 1.5 70 1 0 3DFACE 8 star_u 10 1.34978045204758 20 2.25520466591049 30 1.5 11 1.27648079851406 21 2.2368440585138 31 3.0 12 1.34978045204758 22 2.25520466591049 32 3.0 13 1.34978045204758 23 2.25520466591049 33 3.0 70 1 0 3DFACE 8 star_u 10 2.21138724003369 20 1.20533375707888 30 1.5 11 2.17907937354823 21 1.13702451264398 31 3.0 12 2.17907937354823 22 1.13702451264398 32 1.5 13 2.17907937354823 23 1.13702451264398 33 1.5 70 1 0 3DFACE 8 star_u 10 2.17907937354823 20 1.13702451264398 30 3.0 11 2.21138724003369 21 1.20533375707888 31 1.5 12 2.21138724003369 22 1.20533375707888 32 3.0 13 2.21138724003369 23 1.20533375707888 33 3.0 70 1 0 3DFACE 8 star_u 10 1.98848282880601 20 2.09521804908931 30 3.0 11 2.04447222151364 21 2.04447222151364 31 1.5 12 1.98848282880601 22 2.09521804908931 32 1.5 13 1.98848282880601 23 2.09521804908931 33 1.5 70 1 0 3DFACE 8 star_u 10 2.04447222151364 20 2.04447222151364 30 1.5 11 1.98848282880601 21 2.09521804908931 31 3.0 12 2.04447222151364 22 2.04447222151364 32 3.0 13 2.04447222151364 23 2.04447222151364 33 3.0 70 1 0 3DFACE 8 star_u 10 1.42452680194624 20 2.26629223953759 30 3.0 11 1.5 21 2.27 31 1.5 12 1.42452680194624 22 2.26629223953759 32 1.5 13 1.42452680194624 23 2.26629223953759 33 1.5 70 1 0 3DFACE 8 star_u 10 1.5 20 2.27 30 1.5 11 1.42452680194624 21 2.26629223953759 31 3.0 12 1.5 22 2.27 32 3.0 13 1.5 23 2.27 33 3.0 70 1 0 3DFACE 8 star_u 10 1.79466624292112 20 2.21138724003369 30 3.0 11 1.86297548735602 21 2.17907937354823 31 1.5 12 1.79466624292112 22 2.21138724003369 32 1.5 13 1.79466624292112 23 2.21138724003369 33 1.5 70 1 0 3DFACE 8 star_u 10 1.86297548735602 20 2.17907937354823 30 1.5 11 1.79466624292112 21 2.21138724003369 31 3.0 12 1.86297548735602 22 2.17907937354823 32 3.0 13 1.86297548735602 23 2.17907937354823 33 3.0 70 1 0 3DFACE 8 star_u 10 2.27 20 1.5 30 1.5 11 3.0 21 1.5 31 0.0 12 2.27 22 1.5 32 0.0 13 2.27 23 1.5 33 0.0 70 1 0 3DFACE 8 star_u 10 3.0 20 1.5 30 0.0 11 2.27 21 1.5 31 1.5 12 3.0 22 1.5 32 3.0 13 3.0 23 1.5 33 3.0 70 3 0 3DFACE 8 star_u 10 3.0 20 1.5 30 3.0 11 2.27 21 1.5 31 1.5 12 2.27 22 1.5 32 3.0 13 2.27 23 1.5 33 3.0 70 1 0 3DFACE 8 star_u 10 0.733707760462408 20 1.57547319805376 30 0.0 11 0.73 21 1.5 31 1.5 12 0.73 22 1.5 32 0.0 13 0.73 23 1.5 33 0.0 70 1 0 3DFACE 8 star_u 10 0.73 20 1.5 30 1.5 11 0.733707760462408 21 1.57547319805376 31 0.0 12 0.733707760462408 22 1.57547319805376 32 1.5 13 0.733707760462408 23 1.57547319805376 33 1.5 70 1 0 3DFACE 8 star_u 10 0.85976839852704 20 1.92778907942509 30 3.0 11 0.820920626451767 21 1.86297548735602 31 1.5 12 0.820920626451767 22 1.86297548735602 32 3.0 13 0.820920626451767 23 1.86297548735602 33 3.0 70 1 0 3DFACE 8 star_u 10 0.820920626451767 20 1.86297548735602 30 1.5 11 0.85976839852704 21 1.92778907942509 31 3.0 12 0.85976839852704 22 1.92778907942509 32 1.5 13 0.85976839852704 23 1.92778907942509 33 1.5 70 1 0 3DFACE 8 star_u 10 0.73 20 1.5 30 3.0 11 0.733707760462408 21 1.42452680194624 31 1.5 12 0.733707760462408 22 1.42452680194624 32 3.0 13 0.733707760462408 23 1.42452680194624 33 3.0 70 1 0 3DFACE 8 star_u 10 0.733707760462408 20 1.42452680194624 30 1.5 11 0.73 21 1.5 31 3.0 12 0.73 22 1.5 32 1.5 13 0.73 23 1.5 33 1.5 70 1 0 3DFACE 8 star_u 10 0.744795334089513 20 1.34978045204758 30 3.0 11 0.763155941486199 21 1.27648079851406 31 1.5 12 0.763155941486199 22 1.27648079851406 32 3.0 13 0.763155941486199 23 1.27648079851406 33 3.0 70 1 0 3DFACE 8 star_u 10 0.763155941486199 20 1.27648079851406 30 1.5 11 0.744795334089513 21 1.34978045204758 31 3.0 12 0.744795334089513 22 1.34978045204758 32 1.5 13 0.744795334089513 23 1.34978045204758 33 1.5 70 1 0 LINE 8 star_u 10 3.0 20 0.878679656440358 30 3.0 11 3.00250198874351 21 0.87764329876989 31 3.0 0 3DFACE 8 star_u 10 0.763155941486199 20 1.72351920148594 30 0.0 11 0.744795334089513 21 1.65021954795242 31 1.5 12 0.744795334089513 22 1.65021954795242 32 0.0 13 0.744795334089513 23 1.65021954795242 33 0.0 70 1 0 3DFACE 8 star_u 10 0.744795334089513 20 1.65021954795242 30 1.5 11 0.763155941486199 21 1.72351920148594 31 0.0 12 0.763155941486199 22 1.72351920148594 32 1.5 13 0.763155941486199 23 1.72351920148594 33 1.5 70 1 0 3DFACE 8 star_u 10 1.79466624292112 20 0.788612759966309 30 3.0 11 1.72351920148594 21 0.763155941486199 31 1.5 12 1.79466624292112 22 0.788612759966309 32 1.5 13 1.79466624292112 23 0.788612759966309 33 1.5 70 1 0 3DFACE 8 star_u 10 1.72351920148594 20 0.763155941486199 30 1.5 11 1.79466624292112 21 0.788612759966309 31 3.0 12 1.72351920148594 22 0.763155941486199 32 3.0 13 1.72351920148594 23 0.763155941486199 33 3.0 70 1 0 3DFACE 8 star_u 10 0.955527778486358 20 0.955527778486358 30 0.0 11 0.0 21 0.0 31 3.0 12 0.0 22 0.0 32 0.0 13 0.0 23 0.0 33 0.0 70 1 0 3DFACE 8 star_u 10 0.0 20 0.0 30 3.0 11 0.955527778486358 21 0.955527778486358 31 0.0 12 0.955527778486358 22 0.955527778486358 32 3.0 13 0.955527778486358 23 0.955527778486358 33 3.0 70 3 0 3DFACE 8 star_u 10 0.955527778486358 20 0.955527778486358 30 3.0 11 0.955527778486358 21 0.955527778486358 31 0.0 12 0.955527778486358 22 0.955527778486358 32 1.5 13 0.955527778486358 23 0.955527778486358 33 1.5 70 1 0 3DFACE 8 star_u 10 1.01151717119399 20 2.09521804908931 30 1.5 11 0.955527778486358 21 2.04447222151364 31 0.0 12 1.01151717119399 22 2.09521804908931 32 0.0 13 1.01151717119399 23 2.09521804908931 33 0.0 70 1 0 3DFACE 8 star_u 10 0.955527778486358 20 2.04447222151364 30 0.0 11 1.01151717119399 21 2.09521804908931 31 1.5 12 0.955527778486358 22 2.04447222151364 32 1.5 13 0.955527778486358 23 2.04447222151364 33 1.5 70 1 0 3DFACE 8 star_u 10 1.86297548735602 20 0.820920626451767 30 1.5 11 1.92778907942509 21 0.85976839852704 31 0.0 12 1.86297548735602 22 0.820920626451767 32 0.0 13 1.86297548735602 23 0.820920626451767 33 0.0 70 1 0 3DFACE 8 star_u 10 1.92778907942509 20 0.85976839852704 30 0.0 11 1.86297548735602 21 0.820920626451767 31 1.5 12 1.92778907942509 22 0.85976839852704 32 1.5 13 1.92778907942509 23 0.85976839852704 33 1.5 70 1 0 3DFACE 8 star_u 10 2.25520466591049 20 1.34978045204758 30 1.5 11 2.2368440585138 21 1.27648079851406 31 0.0 12 2.2368440585138 22 1.27648079851406 32 1.5 13 2.2368440585138 23 1.27648079851406 33 1.5 70 1 0 3DFACE 8 star_u 10 2.2368440585138 20 1.27648079851406 30 0.0 11 2.25520466591049 21 1.34978045204758 31 1.5 12 2.25520466591049 22 1.34978045204758 32 0.0 13 2.25520466591049 23 1.34978045204758 33 0.0 70 1 0 3DFACE 8 star_u 10 1.79466624292112 20 0.788612759966309 30 1.5 11 1.86297548735602 21 0.820920626451767 31 0.0 12 1.79466624292112 22 0.788612759966309 32 0.0 13 1.79466624292112 23 0.788612759966309 33 0.0 70 1 0 3DFACE 8 star_u 10 1.86297548735602 20 0.820920626451767 30 0.0 11 1.79466624292112 21 0.788612759966309 31 1.5 12 1.86297548735602 22 0.820920626451767 32 1.5 13 1.86297548735602 23 0.820920626451767 33 1.5 70 1 0 3DFACE 8 star_u 10 1.42452680194624 20 0.733707760462408 30 1.5 11 1.5 21 0.73 31 0.0 12 1.42452680194624 22 0.733707760462408 32 0.0 13 1.42452680194624 23 0.733707760462408 33 0.0 70 1 0 3DFACE 8 star_u 10 1.5 20 0.73 30 0.0 11 1.42452680194624 21 0.733707760462408 31 1.5 12 1.5 22 0.73 32 1.5 13 1.5 23 0.73 33 1.5 70 1 0 3DFACE 8 star_u 10 1.13702451264398 20 0.820920626451767 30 3.0 11 1.07221092057491 21 0.85976839852704 31 1.5 12 1.13702451264398 22 0.820920626451767 32 1.5 13 1.13702451264398 23 0.820920626451767 33 1.5 70 1 0 3DFACE 8 star_u 10 1.07221092057491 20 0.85976839852704 30 1.5 11 1.13702451264398 21 0.820920626451767 31 3.0 12 1.07221092057491 22 0.85976839852704 32 3.0 13 1.07221092057491 23 0.85976839852704 33 3.0 70 1 0 3DFACE 8 star_u 10 1.13702451264398 20 2.17907937354823 30 1.5 11 1.07221092057491 21 2.14023160147296 31 0.0 12 1.13702451264398 22 2.17907937354823 32 0.0 13 1.13702451264398 23 2.17907937354823 33 0.0 70 1 0 3DFACE 8 star_u 10 1.07221092057491 20 2.14023160147296 30 0.0 11 1.13702451264398 21 2.17907937354823 31 1.5 12 1.07221092057491 22 2.14023160147296 32 1.5 13 1.07221092057491 23 2.14023160147296 33 1.5 70 1 0 3DFACE 8 star_u 10 0.878679656440357 20 3.68628738645072e-18 30 0.205 11 1.20533375707888 21 0.788612759966309 31 0.0 12 0.878679656440357 22 0.0 32 0.0 13 0.878679656440357 23 0.0 33 0.0 70 1 0 3DFACE 8 star_u 10 1.20533375707888 20 0.788612759966309 30 0.0 11 0.878679656440357 21 3.68628738645072e-18 31 0.205 12 0.878679656440357 22 1.53956708492942e-17 32 0.826320343559643 13 0.878679656440357 23 1.53956708492942e-17 33 0.826320343559643 70 13 0 3DFACE 8 star_u 10 1.20533375707888 20 0.788612759966309 30 0.0 11 0.878679656440357 21 1.53956708492942e-17 31 0.826320343559643 12 0.878679656440357 22 4.01154803819637e-17 32 2.17367965644036 13 0.878679656440357 23 4.01154803819637e-17 33 2.17367965644036 70 13 0 3DFACE 8 star_u 10 1.20533375707888 20 0.788612759966309 30 0.0 11 0.878679656440357 21 4.01154803819637e-17 31 2.17367965644036 12 0.878679656440357 22 5.18248638448071e-17 32 2.795 13 0.878679656440357 23 5.18248638448071e-17 33 2.795 70 13 0 3DFACE 8 star_u 10 1.20533375707888 20 0.788612759966309 30 0.0 11 0.878679656440357 21 5.18248638448071e-17 31 2.795 12 0.878679656440357 22 1.11022302462516e-16 32 3.0 13 0.878679656440357 23 1.11022302462516e-16 33 3.0 70 13 0 3DFACE 8 star_u 10 1.20533375707888 20 0.788612759966309 30 0.0 11 0.878679656440357 21 1.11022302462516e-16 31 3.0 12 1.20533375707888 22 0.788612759966309 32 3.0 13 1.20533375707888 23 0.788612759966309 33 3.0 70 13 0 3DFACE 8 star_u 10 1.20533375707888 20 0.788612759966309 30 0.0 11 1.20533375707888 21 0.788612759966309 31 3.0 12 1.20533375707888 22 0.788612759966309 32 1.5 13 1.20533375707888 23 0.788612759966309 33 1.5 70 1 0 3DFACE 8 star_u 10 2.09521804908931 20 1.01151717119399 30 1.5 11 2.04447222151364 21 0.955527778486358 31 3.0 12 2.04447222151364 22 0.955527778486358 32 1.5 13 2.04447222151364 23 0.955527778486358 33 1.5 70 1 0 3DFACE 8 star_u 10 2.04447222151364 20 0.955527778486358 30 3.0 11 2.09521804908931 21 1.01151717119399 31 1.5 12 2.09521804908931 22 1.01151717119399 32 3.0 13 2.09521804908931 23 1.01151717119399 33 3.0 70 1 0 3DFACE 8 star_u 10 1.86297548735602 20 2.17907937354823 30 3.0 11 1.92778907942509 21 2.14023160147296 31 1.5 12 1.86297548735602 22 2.17907937354823 32 1.5 13 1.86297548735602 23 2.17907937354823 33 1.5 70 1 0 3DFACE 8 star_u 10 1.92778907942509 20 2.14023160147296 30 1.5 11 1.86297548735602 21 2.17907937354823 31 3.0 12 1.92778907942509 22 2.14023160147296 32 3.0 13 1.92778907942509 23 2.14023160147296 33 3.0 70 1 0 3DFACE 8 star_u 10 3.0 20 2.12132034355964 30 3.0 11 2.21138724003369 21 1.79466624292112 31 0.0 12 3.0 22 2.12132034355964 32 0.0 13 3.0 23 2.12132034355964 33 0.0 70 1 0 3DFACE 8 star_u 10 2.21138724003369 20 1.79466624292112 30 0.0 11 3.0 21 2.12132034355964 31 3.0 12 2.21138724003369 22 1.79466624292112 32 1.5 13 2.21138724003369 23 1.79466624292112 33 1.5 70 3 0 3DFACE 8 star_u 10 2.21138724003369 20 1.79466624292112 30 1.5 11 3.0 21 2.12132034355964 31 3.0 12 2.21138724003369 22 1.79466624292112 32 3.0 13 2.21138724003369 23 1.79466624292112 33 3.0 70 1 0 3DFACE 8 star_u 10 1.65021954795242 20 0.744795334089513 30 3.0 11 1.57547319805376 21 0.733707760462408 31 1.5 12 1.65021954795242 22 0.744795334089513 32 1.5 13 1.65021954795242 23 0.744795334089513 33 1.5 70 1 0 3DFACE 8 star_u 10 1.57547319805376 20 0.733707760462408 30 1.5 11 1.65021954795242 21 0.744795334089513 31 3.0 12 1.57547319805376 22 0.733707760462408 32 3.0 13 1.57547319805376 23 0.733707760462408 33 3.0 70 1 0 3DFACE 8 star_u 10 0.763155941486199 20 1.27648079851406 30 3.0 11 0.788612759966309 21 1.20533375707888 31 1.5 12 0.788612759966309 22 1.20533375707888 32 3.0 13 0.788612759966309 23 1.20533375707888 33 3.0 70 1 0 3DFACE 8 star_u 10 0.788612759966309 20 1.20533375707888 30 1.5 11 0.763155941486199 21 1.27648079851406 31 3.0 12 0.763155941486199 22 1.27648079851406 32 1.5 13 0.763155941486199 23 1.27648079851406 33 1.5 70 1 0 3DFACE 8 star_u 10 1.27648079851406 20 0.763155941486199 30 1.5 11 1.34978045204758 21 0.744795334089513 31 0.0 12 1.27648079851406 22 0.763155941486199 32 0.0 13 1.27648079851406 23 0.763155941486199 33 0.0 70 1 0 3DFACE 8 star_u 10 1.34978045204758 20 0.744795334089513 30 0.0 11 1.27648079851406 21 0.763155941486199 31 1.5 12 1.34978045204758 22 0.744795334089513 32 1.5 13 1.34978045204758 23 0.744795334089513 33 1.5 70 1 0 3DFACE 8 star_u 10 2.26629223953759 20 1.57547319805376 30 1.5 11 2.27 21 1.5 31 3.0 12 2.27 22 1.5 32 1.5 13 2.27 23 1.5 33 1.5 70 1 0 3DFACE 8 star_u 10 2.27 20 1.5 30 3.0 11 2.26629223953759 21 1.57547319805376 31 1.5 12 2.26629223953759 22 1.57547319805376 32 3.0 13 2.26629223953759 23 1.57547319805376 33 3.0 70 1 0 3DFACE 8 star_u 10 0.744795334089513 20 1.65021954795242 30 0.0 11 0.733707760462408 21 1.57547319805376 31 1.5 12 0.733707760462408 22 1.57547319805376 32 0.0 13 0.733707760462408 23 1.57547319805376 33 0.0 70 1 0 3DFACE 8 star_u 10 0.733707760462408 20 1.57547319805376 30 1.5 11 0.744795334089513 21 1.65021954795242 31 0.0 12 0.744795334089513 22 1.65021954795242 32 1.5 13 0.744795334089513 23 1.65021954795242 33 1.5 70 1 0 3DFACE 8 star_u 10 0.788612759966309 20 1.20533375707888 30 0.0 11 0.820920626451767 21 1.13702451264398 31 1.5 12 0.820920626451767 22 1.13702451264398 32 0.0 13 0.820920626451767 23 1.13702451264398 33 0.0 70 1 0 3DFACE 8 star_u 10 0.820920626451767 20 1.13702451264398 30 1.5 11 0.788612759966309 21 1.20533375707888 31 0.0 12 0.788612759966309 22 1.20533375707888 32 1.5 13 0.788612759966309 23 1.20533375707888 33 1.5 70 1 0 3DFACE 8 star_u 10 1.20533375707888 20 2.21138724003369 30 1.5 11 1.13702451264398 21 2.17907937354823 31 0.0 12 1.20533375707888 22 2.21138724003369 32 0.0 13 1.20533375707888 23 2.21138724003369 33 0.0 70 1 0 3DFACE 8 star_u 10 1.13702451264398 20 2.17907937354823 30 0.0 11 1.20533375707888 21 2.21138724003369 31 1.5 12 1.13702451264398 22 2.17907937354823 32 1.5 13 1.13702451264398 23 2.17907937354823 33 1.5 70 1 0 3DFACE 8 star_u 10 1.79466624292112 20 2.21138724003369 30 1.5 11 1.72351920148594 21 2.2368440585138 31 0.0 12 1.79466624292112 22 2.21138724003369 32 0.0 13 1.79466624292112 23 2.21138724003369 33 0.0 70 1 0 3DFACE 8 star_u 10 1.72351920148594 20 2.2368440585138 30 0.0 11 1.79466624292112 21 2.21138724003369 31 1.5 12 1.72351920148594 22 2.2368440585138 32 1.5 13 1.72351920148594 23 2.2368440585138 33 1.5 70 1 0 3DFACE 8 star_u 10 2.17907937354823 20 1.86297548735602 30 1.5 11 2.21138724003369 21 1.79466624292112 31 0.0 12 2.21138724003369 22 1.79466624292112 32 1.5 13 2.21138724003369 23 1.79466624292112 33 1.5 70 1 0 3DFACE 8 star_u 10 2.21138724003369 20 1.79466624292112 30 0.0 11 2.17907937354823 21 1.86297548735602 31 1.5 12 2.17907937354823 22 1.86297548735602 32 0.0 13 2.17907937354823 23 1.86297548735602 33 0.0 70 1 0 LINE 8 star_u 10 2.12132034355964 20 0.0 30 3.0 11 2.12187288805765 21 -0.0013339604208924 31 3.0 0 3DFACE 8 star_u 10 1.92778907942509 20 0.85976839852704 30 1.5 11 1.98848282880601 21 0.904781950910693 31 0.0 12 1.92778907942509 22 0.85976839852704 32 0.0 13 1.92778907942509 23 0.85976839852704 33 0.0 70 1 0 3DFACE 8 star_u 10 1.98848282880601 20 0.904781950910693 30 0.0 11 1.92778907942509 21 0.85976839852704 31 1.5 12 1.98848282880601 22 0.904781950910693 32 1.5 13 1.98848282880601 23 0.904781950910693 33 1.5 70 1 0 3DFACE 8 star_u 10 1.07221092057491 20 2.14023160147296 30 1.5 11 1.01151717119399 21 2.09521804908931 31 0.0 12 1.07221092057491 22 2.14023160147296 32 0.0 13 1.07221092057491 23 2.14023160147296 33 0.0 70 1 0 3DFACE 8 star_u 10 1.01151717119399 20 2.09521804908931 30 0.0 11 1.07221092057491 21 2.14023160147296 31 1.5 12 1.01151717119399 22 2.09521804908931 32 1.5 13 1.01151717119399 23 2.09521804908931 33 1.5 70 1 0 3DFACE 8 star_u 10 1.34978045204758 20 0.744795334089513 30 1.5 11 1.42452680194624 21 0.733707760462408 31 0.0 12 1.34978045204758 22 0.744795334089513 32 0.0 13 1.34978045204758 23 0.744795334089513 33 0.0 70 1 0 3DFACE 8 star_u 10 1.42452680194624 20 0.733707760462408 30 0.0 11 1.34978045204758 21 0.744795334089513 31 1.5 12 1.42452680194624 22 0.733707760462408 32 1.5 13 1.42452680194624 23 0.733707760462408 33 1.5 70 1 0 3DFACE 8 star_u 10 1.92778907942509 20 2.14023160147296 30 3.0 11 1.98848282880601 21 2.09521804908931 31 1.5 12 1.92778907942509 22 2.14023160147296 32 1.5 13 1.92778907942509 23 2.14023160147296 33 1.5 70 1 0 3DFACE 8 star_u 10 1.98848282880601 20 2.09521804908931 30 1.5 11 1.92778907942509 21 2.14023160147296 31 3.0 12 1.98848282880601 22 2.09521804908931 32 3.0 13 1.98848282880601 23 2.09521804908931 33 3.0 70 1 0 3DFACE 8 star_u 10 3.0 20 1.20163144893051 30 0.0 11 3.0 21 0.878679656440358 31 3.0 12 3.0 22 0.878679656440358 32 0.0 13 3.0 23 0.878679656440358 33 0.0 70 1 0 3DFACE 8 star_u 10 3.0 20 0.878679656440358 30 3.0 11 3.0 21 1.20163144893051 31 0.0 12 3.0 22 1.20163144893051 32 3.0 13 3.0 23 1.20163144893051 33 3.0 70 3 0 3DFACE 8 star_u 10 3.0 20 1.20163144893051 30 3.0 11 3.0 21 1.20163144893051 31 0.0 12 3.0 22 1.5 32 0.0 13 3.0 23 1.5 33 0.0 70 13 0 3DFACE 8 star_u 10 3.0 20 1.20163144893051 30 3.0 11 3.0 21 1.5 31 0.0 12 3.0 22 1.5 32 3.0 13 3.0 23 1.5 33 3.0 70 1 0 3DFACE 8 star_u 10 0.85976839852704 20 1.07221092057491 30 0.0 11 0.904781950910692 21 1.01151717119399 31 1.5 12 0.904781950910692 22 1.01151717119399 32 0.0 13 0.904781950910692 23 1.01151717119399 33 0.0 70 1 0 3DFACE 8 star_u 10 0.904781950910692 20 1.01151717119399 30 1.5 11 0.85976839852704 21 1.07221092057491 31 0.0 12 0.85976839852704 22 1.07221092057491 32 1.5 13 0.85976839852704 23 1.07221092057491 33 1.5 70 1 0 3DFACE 8 star_u 10 0.788612759966309 20 1.79466624292112 30 0.0 11 0.763155941486199 21 1.72351920148594 31 1.5 12 0.763155941486199 22 1.72351920148594 32 0.0 13 0.763155941486199 23 1.72351920148594 33 0.0 70 1 0 3DFACE 8 star_u 10 0.763155941486199 20 1.72351920148594 30 1.5 11 0.788612759966309 21 1.79466624292112 31 0.0 12 0.788612759966309 22 1.79466624292112 32 1.5 13 0.788612759966309 23 1.79466624292112 33 1.5 70 1 0 3DFACE 8 star_u 10 0.788612759966309 20 1.79466624292112 30 0.0 11 0.0 21 1.79836855106949 31 0.0 12 0.0 22 2.12132034355964 32 0.0 13 0.0 23 2.12132034355964 33 0.0 70 1 0 3DFACE 8 star_u 10 0.0 20 1.79836855106949 30 0.0 11 0.788612759966309 21 1.79466624292112 31 0.0 12 0.763155941486199 22 1.72351920148594 32 0.0 13 0.763155941486199 23 1.72351920148594 33 0.0 70 13 0 3DFACE 8 star_u 10 0.0 20 1.79836855106949 30 0.0 11 0.763155941486199 21 1.72351920148594 31 0.0 12 0.744795334089513 22 1.65021954795242 32 0.0 13 0.744795334089513 23 1.65021954795242 33 0.0 70 1 0 3DFACE 8 star_u 10 1.20533375707888 20 0.788612759966309 30 0.0 11 1.20163144893051 21 1.11022302462516e-16 31 0.0 12 0.878679656440357 22 0.0 32 0.0 13 0.878679656440357 23 0.0 33 0.0 70 1 0 3DFACE 8 star_u 10 1.20163144893051 20 1.11022302462516e-16 30 0.0 11 1.20533375707888 21 0.788612759966309 31 0.0 12 1.27648079851406 22 0.763155941486199 32 0.0 13 1.27648079851406 23 0.763155941486199 33 0.0 70 13 0 3DFACE 8 star_u 10 1.20163144893051 20 1.11022302462516e-16 30 0.0 11 1.27648079851406 21 0.763155941486199 31 0.0 12 1.34978045204758 22 0.744795334089513 32 0.0 13 1.34978045204758 23 0.744795334089513 33 0.0 70 1 0 3DFACE 8 star_u 10 2.12132034355964 20 3.0 30 0.826320343559643 11 2.12132034355964 21 3.0 31 0.205 12 1.5 22 3.0 32 0.205 13 1.5 23 3.0 33 0.205 70 0 0 3DFACE 8 star_u 10 0.904781950910692 20 1.98848282880601 30 3.0 11 0.85976839852704 21 1.92778907942509 31 1.5 12 0.85976839852704 22 1.92778907942509 32 3.0 13 0.85976839852704 23 1.92778907942509 33 3.0 70 1 0 3DFACE 8 star_u 10 0.85976839852704 20 1.92778907942509 30 1.5 11 0.904781950910692 21 1.98848282880601 31 3.0 12 0.904781950910692 22 1.98848282880601 32 1.5 13 0.904781950910692 23 1.98848282880601 33 1.5 70 1 0 3DFACE 8 star_u 10 1.34978045204758 20 2.25520466591049 30 3.0 11 1.42452680194624 21 2.26629223953759 31 1.5 12 1.34978045204758 22 2.25520466591049 32 1.5 13 1.34978045204758 23 2.25520466591049 33 1.5 70 1 0 3DFACE 8 star_u 10 1.42452680194624 20 2.26629223953759 30 1.5 11 1.34978045204758 21 2.25520466591049 31 3.0 12 1.42452680194624 22 2.26629223953759 32 3.0 13 1.42452680194624 23 2.26629223953759 33 3.0 70 1 0 3DFACE 8 star_u 10 -2.22044604925031e-16 20 2.12132034355964 30 3.0 11 0.788612759966309 21 1.79466624292112 31 0.0 12 0.0 22 2.12132034355964 32 0.0 13 0.0 23 2.12132034355964 33 0.0 70 1 0 3DFACE 8 star_u 10 0.788612759966309 20 1.79466624292112 30 0.0 11 -2.22044604925031e-16 21 2.12132034355964 31 3.0 12 0.788612759966309 22 1.79466624292112 32 1.5 13 0.788612759966309 23 1.79466624292112 33 1.5 70 3 0 3DFACE 8 star_u 10 0.788612759966309 20 1.79466624292112 30 1.5 11 -2.22044604925031e-16 21 2.12132034355964 31 3.0 12 0.788612759966309 22 1.79466624292112 32 3.0 13 0.788612759966309 23 1.79466624292112 33 3.0 70 1 0 3DFACE 8 star_u 10 2.14023160147296 20 1.92778907942509 30 1.5 11 2.17907937354823 21 1.86297548735602 31 0.0 12 2.17907937354823 22 1.86297548735602 32 1.5 13 2.17907937354823 23 1.86297548735602 33 1.5 70 1 0 3DFACE 8 star_u 10 2.17907937354823 20 1.86297548735602 30 0.0 11 2.14023160147296 21 1.92778907942509 31 1.5 12 2.14023160147296 22 1.92778907942509 32 0.0 13 2.14023160147296 23 1.92778907942509 33 0.0 70 1 0 3DFACE 8 star_u 10 1.98848282880601 20 0.904781950910693 30 1.5 11 2.04447222151364 21 0.955527778486358 31 0.0 12 1.98848282880601 22 0.904781950910693 32 0.0 13 1.98848282880601 23 0.904781950910693 33 0.0 70 1 0 3DFACE 8 star_u 10 2.04447222151364 20 0.955527778486358 30 0.0 11 1.98848282880601 21 0.904781950910693 31 1.5 12 2.04447222151364 22 0.955527778486358 32 1.5 13 2.04447222151364 23 0.955527778486358 33 1.5 70 1 0 3DFACE 8 star_u 10 1.5 20 1.5 30 3.0 11 0.733707760462408 21 1.57547319805376 31 3.0 12 0.73 22 1.5 32 3.0 13 0.73 23 1.5 33 3.0 70 1 0 3DFACE 8 star_u 10 0.733707760462408 20 1.57547319805376 30 3.0 11 1.5 21 1.5 31 3.0 12 0.744795334089513 22 1.65021954795242 32 3.0 13 0.744795334089513 23 1.65021954795242 33 3.0 70 1 0 3DFACE 8 star_u 10 1.5 20 1.5 30 3.0 11 0.763155941486199 21 1.72351920148594 31 3.0 12 0.744795334089513 22 1.65021954795242 32 3.0 13 0.744795334089513 23 1.65021954795242 33 3.0 70 1 0 3DFACE 8 star_u 10 0.763155941486199 20 1.72351920148594 30 3.0 11 1.5 21 1.5 31 3.0 12 0.788612759966309 22 1.79466624292112 32 3.0 13 0.788612759966309 23 1.79466624292112 33 3.0 70 1 0 3DFACE 8 star_u 10 1.42452680194624 20 0.733707760462408 30 3.0 11 1.5 21 1.5 31 3.0 12 1.34978045204758 22 0.744795334089513 32 3.0 13 1.34978045204758 23 0.744795334089513 33 3.0 70 1 0 3DFACE 8 star_u 10 1.5 20 1.5 30 3.0 11 1.42452680194624 21 0.733707760462408 31 3.0 12 1.5 22 0.73 32 3.0 13 1.5 23 0.73 33 3.0 70 1 0 3DFACE 8 star_u 10 1.27648079851406 20 0.763155941486199 30 3.0 11 1.5 21 1.5 31 3.0 12 1.20533375707888 22 0.788612759966309 32 3.0 13 1.20533375707888 23 0.788612759966309 33 3.0 70 1 0 3DFACE 8 star_u 10 1.5 20 1.5 30 3.0 11 1.27648079851406 21 0.763155941486199 31 3.0 12 1.34978045204758 22 0.744795334089513 32 3.0 13 1.34978045204758 23 0.744795334089513 33 3.0 70 1 0 3DFACE 8 star_u 10 2.14023160147296 20 1.07221092057491 30 3.0 11 2.21138724003369 21 1.20533375707888 31 3.0 12 1.5 22 1.5 32 3.0 13 1.5 23 1.5 33 3.0 70 1 0 3DFACE 8 star_u 10 2.21138724003369 20 1.20533375707888 30 3.0 11 2.14023160147296 21 1.07221092057491 31 3.0 12 2.17907937354823 22 1.13702451264398 32 3.0 13 2.17907937354823 23 1.13702451264398 33 3.0 70 1 0 3DFACE 8 star_u 10 1.13702451264398 20 0.820920626451767 30 3.0 11 1.5 21 1.5 31 3.0 12 1.07221092057491 22 0.85976839852704 32 3.0 13 1.07221092057491 23 0.85976839852704 33 3.0 70 1 0 3DFACE 8 star_u 10 1.5 20 1.5 30 3.0 11 1.13702451264398 21 0.820920626451767 31 3.0 12 1.20533375707888 22 0.788612759966309 32 3.0 13 1.20533375707888 23 0.788612759966309 33 3.0 70 1 0 3DFACE 8 star_u 10 1.57547319805376 20 0.733707760462408 30 3.0 11 1.5 21 1.5 31 3.0 12 1.5 22 0.73 32 3.0 13 1.5 23 0.73 33 3.0 70 1 0 3DFACE 8 star_u 10 1.5 20 1.5 30 3.0 11 1.57547319805376 21 0.733707760462408 31 3.0 12 1.65021954795242 22 0.744795334089513 32 3.0 13 1.65021954795242 23 0.744795334089513 33 3.0 70 1 0 3DFACE 8 star_u 10 1.65021954795242 20 0.744795334089513 30 3.0 11 1.79466624292112 21 0.788612759966309 31 3.0 12 1.5 22 1.5 32 3.0 13 1.5 23 1.5 33 3.0 70 1 0 3DFACE 8 star_u 10 1.79466624292112 20 0.788612759966309 30 3.0 11 1.65021954795242 21 0.744795334089513 31 3.0 12 1.72351920148594 22 0.763155941486199 32 3.0 13 1.72351920148594 23 0.763155941486199 33 3.0 70 1 0 3DFACE 8 star_u 10 0.0 20 0.497732043121051 30 3.0 11 0.788612759966309 21 1.20533375707888 31 3.0 12 -4.44089209850063e-16 22 0.878679656440356 32 3.0 13 -4.44089209850063e-16 23 0.878679656440356 33 3.0 70 1 0 3DFACE 8 star_u 10 0.788612759966309 20 1.20533375707888 30 3.0 11 0.0 21 0.497732043121051 31 3.0 12 0.820920626451767 22 1.13702451264398 32 3.0 13 0.820920626451767 23 1.13702451264398 33 3.0 70 3 0 3DFACE 8 star_u 10 0.820920626451767 20 1.13702451264398 30 3.0 11 0.0 21 0.497732043121051 31 3.0 12 0.85976839852704 22 1.07221092057491 32 3.0 13 0.85976839852704 23 1.07221092057491 33 3.0 70 1 0 3DFACE 8 star_u 10 0.904781950910692 20 1.01151717119399 30 3.0 11 1.5 21 1.5 31 3.0 12 0.85976839852704 22 1.07221092057491 32 3.0 13 0.85976839852704 23 1.07221092057491 33 3.0 70 1 0 3DFACE 8 star_u 10 1.5 20 1.5 30 3.0 11 0.904781950910692 21 1.01151717119399 31 3.0 12 0.955527778486358 22 0.955527778486358 32 3.0 13 0.955527778486358 23 0.955527778486358 33 3.0 70 1 0 3DFACE 8 star_u 10 1.5 20 1.5 30 3.0 11 0.820920626451767 21 1.86297548735602 31 3.0 12 0.788612759966309 22 1.79466624292112 32 3.0 13 0.788612759966309 23 1.79466624292112 33 3.0 70 1 0 3DFACE 8 star_u 10 0.820920626451767 20 1.86297548735602 30 3.0 11 1.5 21 1.5 31 3.0 12 0.85976839852704 22 1.92778907942509 32 3.0 13 0.85976839852704 23 1.92778907942509 33 3.0 70 1 0 3DFACE 8 star_u 10 2.21138724003369 20 1.20533375707888 30 3.0 11 2.25520466591049 21 1.34978045204758 31 3.0 12 1.5 22 1.5 32 3.0 13 1.5 23 1.5 33 3.0 70 1 0 3DFACE 8 star_u 10 2.25520466591049 20 1.34978045204758 30 3.0 11 2.21138724003369 21 1.20533375707888 31 3.0 12 2.2368440585138 22 1.27648079851406 32 3.0 13 2.2368440585138 23 1.27648079851406 33 3.0 70 1 0 3DFACE 8 star_u 10 1.92778907942509 20 0.85976839852704 30 3.0 11 2.04447222151364 21 0.955527778486358 31 3.0 12 1.5 22 1.5 32 3.0 13 1.5 23 1.5 33 3.0 70 1 0 3DFACE 8 star_u 10 2.04447222151364 20 0.955527778486358 30 3.0 11 1.92778907942509 21 0.85976839852704 31 3.0 12 1.98848282880601 22 0.904781950910693 32 3.0 13 1.98848282880601 23 0.904781950910693 33 3.0 70 1 0 3DFACE 8 star_u 10 3.0 20 0.878679656440358 30 3.0 11 2.2368440585138 21 1.27648079851406 31 3.0 12 2.21138724003369 22 1.20533375707888 32 3.0 13 2.21138724003369 23 1.20533375707888 33 3.0 70 1 0 3DFACE 8 star_u 10 2.2368440585138 20 1.27648079851406 30 3.0 11 3.0 21 0.878679656440358 31 3.0 12 2.25520466591049 22 1.34978045204758 32 3.0 13 2.25520466591049 23 1.34978045204758 33 3.0 70 3 0 3DFACE 8 star_u 10 2.25520466591049 20 1.34978045204758 30 3.0 11 3.0 21 0.878679656440358 31 3.0 12 3.0 22 1.20163144893051 32 3.0 13 3.0 23 1.20163144893051 33 3.0 70 1 0 3DFACE 8 star_u 10 1.20163144893051 20 1.11022302462516e-16 30 3.0 11 1.20533375707888 21 0.788612759966309 31 3.0 12 0.878679656440357 22 1.11022302462516e-16 32 3.0 13 0.878679656440357 23 1.11022302462516e-16 33 3.0 70 1 0 3DFACE 8 star_u 10 1.20533375707888 20 0.788612759966309 30 3.0 11 1.20163144893051 21 1.11022302462516e-16 31 3.0 12 1.27648079851406 22 0.763155941486199 32 3.0 13 1.27648079851406 23 0.763155941486199 33 3.0 70 3 0 3DFACE 8 star_u 10 1.27648079851406 20 0.763155941486199 30 3.0 11 1.20163144893051 21 1.11022302462516e-16 31 3.0 12 1.34978045204758 22 0.744795334089513 32 3.0 13 1.34978045204758 23 0.744795334089513 33 3.0 70 1 0 3DFACE 8 star_u 10 2.25520466591049 20 1.65021954795242 30 3.0 11 2.21138724003369 21 1.79466624292112 31 3.0 12 1.5 22 1.5 32 3.0 13 1.5 23 1.5 33 3.0 70 1 0 3DFACE 8 star_u 10 2.21138724003369 20 1.79466624292112 30 3.0 11 2.25520466591049 21 1.65021954795242 31 3.0 12 2.2368440585138 22 1.72351920148594 32 3.0 13 2.2368440585138 23 1.72351920148594 33 3.0 70 1 0 3DFACE 8 star_u 10 2.21138724003369 20 1.79466624292112 30 3.0 11 2.14023160147296 21 1.92778907942509 31 3.0 12 1.5 22 1.5 32 3.0 13 1.5 23 1.5 33 3.0 70 1 0 3DFACE 8 star_u 10 2.14023160147296 20 1.92778907942509 30 3.0 11 2.21138724003369 21 1.79466624292112 31 3.0 12 2.17907937354823 22 1.86297548735602 32 3.0 13 2.17907937354823 23 1.86297548735602 33 3.0 70 1 0 3DFACE 8 star_u 10 2.27 20 1.5 30 3.0 11 2.25520466591049 21 1.65021954795242 31 3.0 12 1.5 22 1.5 32 3.0 13 1.5 23 1.5 33 3.0 70 1 0 3DFACE 8 star_u 10 2.25520466591049 20 1.65021954795242 30 3.0 11 2.27 21 1.5 31 3.0 12 2.26629223953759 22 1.57547319805376 32 3.0 13 2.26629223953759 23 1.57547319805376 33 3.0 70 1 0 3DFACE 8 star_u 10 2.12132034355964 20 0.0 30 3.0 11 1.86297548735602 21 0.820920626451767 31 3.0 12 1.79466624292112 22 0.788612759966309 32 3.0 13 1.79466624292112 23 0.788612759966309 33 3.0 70 1 0 3DFACE 8 star_u 10 1.86297548735602 20 0.820920626451767 30 3.0 11 2.12132034355964 21 0.0 31 3.0 12 1.92778907942509 22 0.85976839852704 32 3.0 13 1.92778907942509 23 0.85976839852704 33 3.0 70 3 0 3DFACE 8 star_u 10 1.92778907942509 20 0.85976839852704 30 3.0 11 2.12132034355964 21 0.0 31 3.0 12 2.50226795687895 22 0.0 32 3.0 13 2.50226795687895 23 0.0 33 3.0 70 1 0 3DFACE 8 star_u 10 1.72351920148594 20 2.2368440585138 30 3.0 11 1.79836855106949 21 3.0 31 3.0 12 1.65021954795242 22 2.25520466591049 32 3.0 13 1.65021954795242 23 2.25520466591049 33 3.0 70 1 0 3DFACE 8 star_u 10 1.79836855106949 20 3.0 30 3.0 11 1.72351920148594 21 2.2368440585138 31 3.0 12 1.79466624292112 22 2.21138724003369 32 3.0 13 1.79466624292112 23 2.21138724003369 33 3.0 70 13 0 3DFACE 8 star_u 10 1.79836855106949 20 3.0 30 3.0 11 1.79466624292112 21 2.21138724003369 31 3.0 12 2.12132034355964 22 3.0 32 3.0 13 2.12132034355964 23 3.0 33 3.0 70 1 0 3DFACE 8 star_u 10 1.5 20 1.5 30 3.0 11 1.42452680194624 21 2.26629223953759 31 3.0 12 1.34978045204758 22 2.25520466591049 32 3.0 13 1.34978045204758 23 2.25520466591049 33 3.0 70 1 0 3DFACE 8 star_u 10 1.42452680194624 20 2.26629223953759 30 3.0 11 1.5 21 1.5 31 3.0 12 1.5 22 2.27 32 3.0 13 1.5 23 2.27 33 3.0 70 1 0 3DFACE 8 star_u 10 1.5 20 1.5 30 3.0 11 1.27648079851406 21 2.2368440585138 31 3.0 12 1.20533375707888 22 2.21138724003369 32 3.0 13 1.20533375707888 23 2.21138724003369 33 3.0 70 1 0 3DFACE 8 star_u 10 1.27648079851406 20 2.2368440585138 30 3.0 11 1.5 21 1.5 31 3.0 12 1.34978045204758 22 2.25520466591049 32 3.0 13 1.34978045204758 23 2.25520466591049 33 3.0 70 1 0 3DFACE 8 star_u 10 1.5 20 1.5 30 3.0 11 1.57547319805376 21 2.26629223953759 31 3.0 12 1.5 22 2.27 32 3.0 13 1.5 23 2.27 33 3.0 70 1 0 3DFACE 8 star_u 10 1.57547319805376 20 2.26629223953759 30 3.0 11 1.5 21 1.5 31 3.0 12 1.65021954795242 22 2.25520466591049 32 3.0 13 1.65021954795242 23 2.25520466591049 33 3.0 70 1 0 3DFACE 8 star_u 10 1.79466624292112 20 2.21138724003369 30 3.0 11 1.65021954795242 21 2.25520466591049 31 3.0 12 1.5 22 1.5 32 3.0 13 1.5 23 1.5 33 3.0 70 1 0 3DFACE 8 star_u 10 1.65021954795242 20 2.25520466591049 30 3.0 11 1.79466624292112 21 2.21138724003369 31 3.0 12 1.72351920148594 22 2.2368440585138 32 3.0 13 1.72351920148594 23 2.2368440585138 33 3.0 70 1 0 3DFACE 8 star_u 10 1.92778907942509 20 2.14023160147296 30 3.0 11 1.79466624292112 21 2.21138724003369 31 3.0 12 1.5 22 1.5 32 3.0 13 1.5 23 1.5 33 3.0 70 1 0 3DFACE 8 star_u 10 1.79466624292112 20 2.21138724003369 30 3.0 11 1.92778907942509 21 2.14023160147296 31 3.0 12 1.86297548735602 22 2.17907937354823 32 3.0 13 1.86297548735602 23 2.17907937354823 33 3.0 70 1 0 3DFACE 8 star_u 10 1.5 20 1.5 30 3.0 11 1.13702451264398 21 2.17907937354823 31 3.0 12 1.07221092057491 22 2.14023160147296 32 3.0 13 1.07221092057491 23 2.14023160147296 33 3.0 70 1 0 3DFACE 8 star_u 10 1.13702451264398 20 2.17907937354823 30 3.0 11 1.5 21 1.5 31 3.0 12 1.20533375707888 22 2.21138724003369 32 3.0 13 1.20533375707888 23 2.21138724003369 33 3.0 70 1 0 3DFACE 8 star_u 10 1.5 20 1.5 30 3.0 11 1.01151717119399 21 2.09521804908931 31 3.0 12 0.955527778486358 22 2.04447222151364 32 3.0 13 0.955527778486358 23 2.04447222151364 33 3.0 70 1 0 3DFACE 8 star_u 10 1.01151717119399 20 2.09521804908931 30 3.0 11 1.5 21 1.5 31 3.0 12 1.07221092057491 22 2.14023160147296 32 3.0 13 1.07221092057491 23 2.14023160147296 33 3.0 70 1 0 3DFACE 8 star_u 10 1.07221092057491 20 2.14023160147296 30 3.0 11 0.878679656440356 21 3.0 31 3.0 12 0.497732043121052 22 3.0 32 3.0 13 0.497732043121052 23 3.0 33 3.0 70 1 0 3DFACE 8 star_u 10 0.878679656440356 20 3.0 30 3.0 11 1.07221092057491 21 2.14023160147296 31 3.0 12 1.13702451264398 22 2.17907937354823 32 3.0 13 1.13702451264398 23 2.17907937354823 33 3.0 70 13 0 3DFACE 8 star_u 10 0.878679656440356 20 3.0 30 3.0 11 1.13702451264398 21 2.17907937354823 31 3.0 12 1.20533375707888 22 2.21138724003369 32 3.0 13 1.20533375707888 23 2.21138724003369 33 3.0 70 1 0 3DFACE 8 star_u 10 0.733707760462408 20 1.42452680194624 30 3.0 11 1.5 21 1.5 31 3.0 12 0.73 22 1.5 32 3.0 13 0.73 23 1.5 33 3.0 70 1 0 3DFACE 8 star_u 10 1.5 20 1.5 30 3.0 11 0.733707760462408 21 1.42452680194624 31 3.0 12 0.744795334089513 22 1.34978045204758 32 3.0 13 0.744795334089513 23 1.34978045204758 33 3.0 70 1 0 3DFACE 8 star_u 10 0.0 20 1.79836855106949 30 3.0 11 0.788612759966309 21 1.79466624292112 31 3.0 12 -2.22044604925031e-16 22 2.12132034355964 32 3.0 13 -2.22044604925031e-16 23 2.12132034355964 33 3.0 70 1 0 3DFACE 8 star_u 10 0.788612759966309 20 1.79466624292112 30 3.0 11 0.0 21 1.79836855106949 31 3.0 12 0.763155941486199 22 1.72351920148594 32 3.0 13 0.763155941486199 23 1.72351920148594 33 3.0 70 3 0 3DFACE 8 star_u 10 0.763155941486199 20 1.72351920148594 30 3.0 11 0.0 21 1.79836855106949 31 3.0 12 0.744795334089513 22 1.65021954795242 32 3.0 13 0.744795334089513 23 1.65021954795242 33 3.0 70 1 0 3DFACE 8 star_u 10 2.04447222151364 20 2.04447222151364 30 3.0 11 1.92778907942509 21 2.14023160147296 31 3.0 12 1.5 22 1.5 32 3.0 13 1.5 23 1.5 33 3.0 70 1 0 3DFACE 8 star_u 10 1.92778907942509 20 2.14023160147296 30 3.0 11 2.04447222151364 21 2.04447222151364 31 3.0 12 1.98848282880601 22 2.09521804908931 32 3.0 13 1.98848282880601 23 2.09521804908931 33 3.0 70 1 0 3DFACE 8 star_u 10 2.25520466591049 20 1.34978045204758 30 3.0 11 2.27 21 1.5 31 3.0 12 1.5 22 1.5 32 3.0 13 1.5 23 1.5 33 3.0 70 1 0 3DFACE 8 star_u 10 2.27 20 1.5 30 3.0 11 2.25520466591049 21 1.34978045204758 31 3.0 12 2.26629223953759 22 1.42452680194624 32 3.0 13 2.26629223953759 23 1.42452680194624 33 3.0 70 1 0 3DFACE 8 star_u 10 1.79466624292112 20 0.788612759966309 30 3.0 11 1.92778907942509 21 0.85976839852704 31 3.0 12 1.5 22 1.5 32 3.0 13 1.5 23 1.5 33 3.0 70 1 0 3DFACE 8 star_u 10 1.92778907942509 20 0.85976839852704 30 3.0 11 1.79466624292112 21 0.788612759966309 31 3.0 12 1.86297548735602 22 0.820920626451767 32 3.0 13 1.86297548735602 23 0.820920626451767 33 3.0 70 1 0 3DFACE 8 star_u 10 2.17907937354823 20 1.86297548735602 30 3.0 11 3.0 21 2.50226795687895 31 3.0 12 2.14023160147296 22 1.92778907942509 32 3.0 13 2.14023160147296 23 1.92778907942509 33 3.0 70 1 0 3DFACE 8 star_u 10 3.0 20 2.50226795687895 30 3.0 11 2.17907937354823 21 1.86297548735602 31 3.0 12 2.21138724003369 22 1.79466624292112 32 3.0 13 2.21138724003369 23 1.79466624292112 33 3.0 70 13 0 3DFACE 8 star_u 10 3.0 20 2.50226795687895 30 3.0 11 2.21138724003369 21 1.79466624292112 31 3.0 12 3.0 22 2.12132034355964 32 3.0 13 3.0 23 2.12132034355964 33 3.0 70 1 0 3DFACE 8 star_u 10 2.04447222151364 20 0.955527778486358 30 3.0 11 2.14023160147296 21 1.07221092057491 31 3.0 12 1.5 22 1.5 32 3.0 13 1.5 23 1.5 33 3.0 70 1 0 3DFACE 8 star_u 10 2.14023160147296 20 1.07221092057491 30 3.0 11 2.04447222151364 21 0.955527778486358 31 3.0 12 2.09521804908931 22 1.01151717119399 32 3.0 13 2.09521804908931 23 1.01151717119399 33 3.0 70 1 0 3DFACE 8 star_u 10 0.820920626451767 20 1.13702451264398 30 3.0 11 1.5 21 1.5 31 3.0 12 0.788612759966309 22 1.20533375707888 32 3.0 13 0.788612759966309 23 1.20533375707888 33 3.0 70 1 0 3DFACE 8 star_u 10 1.5 20 1.5 30 3.0 11 0.820920626451767 21 1.13702451264398 31 3.0 12 0.85976839852704 22 1.07221092057491 32 3.0 13 0.85976839852704 23 1.07221092057491 33 3.0 70 1 0 3DFACE 8 star_u 10 1.01151717119399 20 0.904781950910692 30 3.0 11 1.5 21 1.5 31 3.0 12 0.955527778486358 22 0.955527778486358 32 3.0 13 0.955527778486358 23 0.955527778486358 33 3.0 70 1 0 3DFACE 8 star_u 10 1.5 20 1.5 30 3.0 11 1.01151717119399 21 0.904781950910692 31 3.0 12 1.07221092057491 22 0.85976839852704 32 3.0 13 1.07221092057491 23 0.85976839852704 33 3.0 70 1 0 3DFACE 8 star_u 10 0.763155941486199 20 1.27648079851406 30 3.0 11 1.5 21 1.5 31 3.0 12 0.744795334089513 22 1.34978045204758 32 3.0 13 0.744795334089513 23 1.34978045204758 33 3.0 70 1 0 3DFACE 8 star_u 10 1.5 20 1.5 30 3.0 11 0.763155941486199 21 1.27648079851406 31 3.0 12 0.788612759966309 22 1.20533375707888 32 3.0 13 0.788612759966309 23 1.20533375707888 33 3.0 70 1 0 3DFACE 8 star_u 10 2.14023160147296 20 1.92778907942509 30 3.0 11 2.04447222151364 21 2.04447222151364 31 3.0 12 1.5 22 1.5 32 3.0 13 1.5 23 1.5 33 3.0 70 1 0 3DFACE 8 star_u 10 2.04447222151364 20 2.04447222151364 30 3.0 11 2.14023160147296 21 1.92778907942509 31 3.0 12 2.09521804908931 22 1.98848282880601 32 3.0 13 2.09521804908931 23 1.98848282880601 33 3.0 70 1 0 3DFACE 8 star_u 10 1.5 20 1.5 30 3.0 11 0.904781950910692 21 1.98848282880601 31 3.0 12 0.85976839852704 22 1.92778907942509 32 3.0 13 0.85976839852704 23 1.92778907942509 33 3.0 70 1 0 3DFACE 8 star_u 10 0.904781950910692 20 1.98848282880601 30 3.0 11 1.5 21 1.5 31 3.0 12 0.955527778486358 22 2.04447222151364 32 3.0 13 0.955527778486358 23 2.04447222151364 33 3.0 70 1 0 3DFACE 8 star_u 10 3.0 20 3.0 30 0.0 11 2.09521804908931 21 1.98848282880601 31 0.0 12 2.04447222151364 22 2.04447222151364 32 0.0 13 2.04447222151364 23 2.04447222151364 33 0.0 70 1 0 3DFACE 8 star_u 10 2.09521804908931 20 1.98848282880601 30 0.0 11 3.0 21 3.0 31 0.0 12 2.14023160147296 22 1.92778907942509 32 0.0 13 2.14023160147296 23 1.92778907942509 33 0.0 70 3 0 3DFACE 8 star_u 10 2.14023160147296 20 1.92778907942509 30 0.0 11 3.0 21 3.0 31 0.0 12 3.0 22 2.50226795687895 32 0.0 13 3.0 23 2.50226795687895 33 0.0 70 1 0 3DFACE 8 star_u 10 1.5 20 3.0 30 0.0 11 1.57547319805376 21 2.26629223953759 31 0.0 12 1.5 22 2.27 32 0.0 13 1.5 23 2.27 33 0.0 70 1 0 3DFACE 8 star_u 10 1.57547319805376 20 2.26629223953759 30 0.0 11 1.5 21 3.0 31 0.0 12 1.79836855106949 22 3.0 32 0.0 13 1.79836855106949 23 3.0 33 0.0 70 13 0 3DFACE 8 star_u 10 1.57547319805376 20 2.26629223953759 30 0.0 11 1.79836855106949 21 3.0 31 0.0 12 1.65021954795242 22 2.25520466591049 32 0.0 13 1.65021954795242 23 2.25520466591049 33 0.0 70 1 0 3DFACE 8 star_u 10 2.26629223953759 20 1.42452680194624 30 0.0 11 3.0 21 1.20163144893051 31 0.0 12 2.25520466591049 22 1.34978045204758 32 0.0 13 2.25520466591049 23 1.34978045204758 33 0.0 70 1 0 3DFACE 8 star_u 10 3.0 20 1.20163144893051 30 0.0 11 2.26629223953759 21 1.42452680194624 31 0.0 12 2.27 22 1.5 32 0.0 13 2.27 23 1.5 33 0.0 70 13 0 3DFACE 8 star_u 10 3.0 20 1.20163144893051 30 0.0 11 2.27 21 1.5 31 0.0 12 3.0 22 1.5 32 0.0 13 3.0 23 1.5 33 0.0 70 1 0 3DFACE 8 star_u 10 1.34978045204758 20 0.744795334089513 30 0.0 11 1.5 21 0.0 31 0.0 12 1.20163144893051 22 1.11022302462516e-16 32 0.0 13 1.20163144893051 23 1.11022302462516e-16 33 0.0 70 1 0 3DFACE 8 star_u 10 1.5 20 0.0 30 0.0 11 1.34978045204758 21 0.744795334089513 31 0.0 12 1.42452680194624 22 0.733707760462408 32 0.0 13 1.42452680194624 23 0.733707760462408 33 0.0 70 13 0 3DFACE 8 star_u 10 1.5 20 0.0 30 0.0 11 1.42452680194624 21 0.733707760462408 31 0.0 12 1.5 22 0.73 32 0.0 13 1.5 23 0.73 33 0.0 70 1 0 3DFACE 8 star_u 10 1.98848282880601 20 0.904781950910693 30 0.0 11 2.50226795687895 21 0.0 31 0.0 12 1.92778907942509 22 0.85976839852704 32 0.0 13 1.92778907942509 23 0.85976839852704 33 0.0 70 1 0 3DFACE 8 star_u 10 2.50226795687895 20 0.0 30 0.0 11 1.98848282880601 21 0.904781950910693 31 0.0 12 2.04447222151364 22 0.955527778486358 32 0.0 13 2.04447222151364 23 0.955527778486358 33 0.0 70 13 0 3DFACE 8 star_u 10 2.50226795687895 20 0.0 30 0.0 11 2.04447222151364 21 0.955527778486358 31 0.0 12 3.0 22 0.0 32 0.0 13 3.0 23 0.0 33 0.0 70 13 0 3DFACE 8 star_u 10 2.50226795687895 20 0.0 30 0.0 11 3.0 21 0.0 31 0.0 12 2.795 22 0.0 32 0.0 13 2.795 23 0.0 33 0.0 70 1 0 3DFACE 8 star_u 10 0.744795334089513 20 1.65021954795242 30 0.0 11 0.0 21 1.5 31 0.0 12 0.0 22 1.79836855106949 32 0.0 13 0.0 23 1.79836855106949 33 0.0 70 1 0 3DFACE 8 star_u 10 0.0 20 1.5 30 0.0 11 0.744795334089513 21 1.65021954795242 31 0.0 12 0.733707760462408 22 1.57547319805376 32 0.0 13 0.733707760462408 23 1.57547319805376 33 0.0 70 13 0 3DFACE 8 star_u 10 0.0 20 1.5 30 0.0 11 0.733707760462408 21 1.57547319805376 31 0.0 12 0.73 22 1.5 32 0.0 13 0.73 23 1.5 33 0.0 70 1 0 3DFACE 8 star_u 10 0.205 20 3.0 30 0.0 11 0.955527778486358 21 2.04447222151364 31 0.0 12 0.0 22 3.0 32 0.0 13 0.0 23 3.0 33 0.0 70 1 0 3DFACE 8 star_u 10 0.955527778486358 20 2.04447222151364 30 0.0 11 0.205 21 3.0 31 0.0 12 0.497732043121052 22 3.0 32 0.0 13 0.497732043121052 23 3.0 33 0.0 70 13 0 3DFACE 8 star_u 10 0.955527778486358 20 2.04447222151364 30 0.0 11 0.497732043121052 21 3.0 31 0.0 12 1.01151717119399 22 2.09521804908931 32 0.0 13 1.01151717119399 23 2.09521804908931 33 0.0 70 3 0 3DFACE 8 star_u 10 1.01151717119399 20 2.09521804908931 30 0.0 11 0.497732043121052 21 3.0 31 0.0 12 1.07221092057491 22 2.14023160147296 32 0.0 13 1.07221092057491 23 2.14023160147296 33 0.0 70 1 0 3DFACE 8 star_u 10 0.85976839852704 20 1.07221092057491 30 0.0 11 0.0 21 0.0 31 0.0 12 0.0 22 0.497732043121051 32 0.0 13 0.0 23 0.497732043121051 33 0.0 70 1 0 3DFACE 8 star_u 10 0.0 20 0.0 30 0.0 11 0.85976839852704 21 1.07221092057491 31 0.0 12 0.904781950910692 22 1.01151717119399 32 0.0 13 0.904781950910692 23 1.01151717119399 33 0.0 70 13 0 3DFACE 8 star_u 10 0.0 20 0.0 30 0.0 11 0.904781950910692 21 1.01151717119399 31 0.0 12 0.955527778486358 22 0.955527778486358 32 0.0 13 0.955527778486358 23 0.955527778486358 33 0.0 70 1 0 3DFACE 8 star_u 10 2.795 20 0.0 30 2.795 11 2.12132034355964 21 0.0 31 2.17367965644036 12 2.795 22 0.0 32 1.5 13 2.795 23 0.0 33 1.5 70 1 0 3DFACE 8 star_u 10 2.12132034355964 20 0.0 30 2.17367965644036 11 2.795 21 0.0 31 2.795 12 2.12132034355964 22 0.0 32 2.795 13 2.12132034355964 23 0.0 33 2.795 70 1 0 3DFACE 8 star_u 10 2.795 20 0.0 30 0.205 11 2.50226795687895 21 0.0 31 0.0 12 2.795 22 0.0 32 0.0 13 2.795 23 0.0 33 0.0 70 1 0 3DFACE 8 star_u 10 2.50226795687895 20 0.0 30 0.0 11 2.795 21 0.0 31 0.205 12 2.12132034355964 22 0.0 32 0.0 13 2.12132034355964 23 0.0 33 0.0 70 3 0 3DFACE 8 star_u 10 2.12132034355964 20 0.0 30 0.0 11 2.795 21 0.0 31 0.205 12 2.12132034355964 22 0.0 32 0.205 13 2.12132034355964 23 0.0 33 0.205 70 1 0 3DFACE 8 star_u 10 2.795 20 0.0 30 3.0 11 2.12132034355964 21 0.0 31 2.795 12 2.795 22 0.0 32 2.795 13 2.795 23 0.0 33 2.795 70 1 0 3DFACE 8 star_u 10 2.12132034355964 20 0.0 30 2.795 11 2.795 21 0.0 31 3.0 12 2.12132034355964 22 0.0 32 3.0 13 2.12132034355964 23 0.0 33 3.0 70 3 0 3DFACE 8 star_u 10 2.12132034355964 20 0.0 30 3.0 11 2.795 21 0.0 31 3.0 12 2.50226795687895 22 0.0 32 3.0 13 2.50226795687895 23 0.0 33 3.0 70 1 0 3DFACE 8 star_u 10 2.795 20 0.0 30 1.5 11 2.12132034355964 21 0.0 31 0.205 12 2.795 22 0.0 32 0.205 13 2.795 23 0.0 33 0.205 70 1 0 3DFACE 8 star_u 10 2.12132034355964 20 0.0 30 0.205 11 2.795 21 0.0 31 1.5 12 2.12132034355964 22 0.0 32 0.826320343559644 13 2.12132034355964 23 0.0 33 0.826320343559644 70 1 0 3DFACE 8 star_u 10 1.5 20 0.0 30 0.205 11 1.20163144893051 21 1.11022302462516e-16 31 0.0 12 1.5 22 0.0 32 0.0 13 1.5 23 0.0 33 0.0 70 1 0 3DFACE 8 star_u 10 1.20163144893051 20 1.11022302462516e-16 30 0.0 11 1.5 21 0.0 31 0.205 12 0.878679656440357 22 0.0 32 0.0 13 0.878679656440357 23 0.0 33 0.0 70 3 0 3DFACE 8 star_u 10 0.878679656440357 20 0.0 30 0.0 11 1.5 21 0.0 31 0.205 12 0.878679656440357 22 3.68628738645072e-18 32 0.205 13 0.878679656440357 23 3.68628738645072e-18 33 0.205 70 1 0 3DFACE 8 star_u 10 0.878679656440357 20 5.18248638448071e-17 30 2.795 11 0.878679656440357 21 4.01154803819637e-17 31 2.17367965644036 12 1.5 22 0.0 32 2.795 13 1.5 23 0.0 33 2.795 70 0 0 3DFACE 8 star_u 10 0.878679656440357 20 1.53956708492942e-17 30 0.826320343559643 11 0.878679656440357 21 3.68628738645072e-18 31 0.205 12 1.5 22 0.0 32 0.205 13 1.5 23 0.0 33 0.205 70 0 0 3DFACE 8 star_u 10 3.0 20 0.0 30 3.0 11 2.795 21 0.0 31 2.795 12 3.0 22 0.0 32 2.795 13 3.0 23 0.0 33 2.795 70 1 0 3DFACE 8 star_u 10 2.795 20 0.0 30 2.795 11 3.0 21 0.0 31 3.0 12 2.795 22 0.0 32 3.0 13 2.795 23 0.0 33 3.0 70 1 0 3DFACE 8 star_u 10 3.0 20 0.0 30 0.205 11 2.795 21 0.0 31 0.0 12 3.0 22 0.0 32 0.0 13 3.0 23 0.0 33 0.0 70 1 0 3DFACE 8 star_u 10 2.795 20 0.0 30 0.0 11 3.0 21 0.0 31 0.205 12 2.795 22 0.0 32 0.205 13 2.795 23 0.0 33 0.205 70 1 0 3DFACE 8 star_u 10 3.0 20 0.0 30 2.795 11 2.795 21 0.0 31 1.5 12 3.0 22 0.0 32 1.5 13 3.0 23 0.0 33 1.5 70 1 0 3DFACE 8 star_u 10 2.795 20 0.0 30 1.5 11 3.0 21 0.0 31 2.795 12 2.795 22 0.0 32 2.795 13 2.795 23 0.0 33 2.795 70 1 0 3DFACE 8 star_u 10 1.5 20 0.0 30 3.0 11 0.878679656440357 21 5.18248638448071e-17 31 2.795 12 1.5 22 0.0 32 2.795 13 1.5 23 0.0 33 2.795 70 1 0 3DFACE 8 star_u 10 0.878679656440357 20 5.18248638448071e-17 30 2.795 11 1.5 21 0.0 31 3.0 12 0.878679656440357 22 1.11022302462516e-16 32 3.0 13 0.878679656440357 23 1.11022302462516e-16 33 3.0 70 3 0 3DFACE 8 star_u 10 0.878679656440357 20 1.11022302462516e-16 30 3.0 11 1.5 21 0.0 31 3.0 12 1.20163144893051 22 1.11022302462516e-16 32 3.0 13 1.20163144893051 23 1.11022302462516e-16 33 3.0 70 1 0 3DFACE 8 star_u 10 3.0 20 0.0 30 1.5 11 2.795 21 0.0 31 0.205 12 3.0 22 0.0 32 0.205 13 3.0 23 0.0 33 0.205 70 1 0 3DFACE 8 star_u 10 2.795 20 0.0 30 0.205 11 3.0 21 0.0 31 1.5 12 2.795 22 0.0 32 1.5 13 2.795 23 0.0 33 1.5 70 1 0 3DFACE 8 star_u 10 1.5 20 3.0 30 0.205 11 1.79836855106949 21 3.0 31 0.0 12 1.5 22 3.0 32 0.0 13 1.5 23 3.0 33 0.0 70 1 0 3DFACE 8 star_u 10 1.79836855106949 20 3.0 30 0.0 11 1.5 21 3.0 31 0.205 12 2.12132034355964 22 3.0 32 0.0 13 2.12132034355964 23 3.0 33 0.0 70 3 0 3DFACE 8 star_u 10 2.12132034355964 20 3.0 30 0.0 11 1.5 21 3.0 31 0.205 12 2.12132034355964 22 3.0 32 0.205 13 2.12132034355964 23 3.0 33 0.205 70 1 0 3DFACE 8 star_u 10 2.12132034355964 20 3.0 30 2.795 11 2.12132034355964 21 3.0 31 2.17367965644036 12 1.5 22 3.0 32 2.795 13 1.5 23 3.0 33 2.795 70 0 0 3DFACE 8 star_u 10 1.5 20 3.0 30 2.795 11 2.12132034355964 21 3.0 31 0.826320343559643 12 1.5 22 3.0 32 0.205 13 1.5 23 3.0 33 0.205 70 1 0 3DFACE 8 star_u 10 2.12132034355964 20 3.0 30 0.826320343559643 11 1.5 21 3.0 31 2.795 12 2.12132034355964 22 3.0 32 2.17367965644036 13 2.12132034355964 23 3.0 33 2.17367965644036 70 1 0 3DFACE 8 star_u 10 1.5 20 3.0 30 3.0 11 2.12132034355964 21 3.0 31 2.795 12 1.5 22 3.0 32 2.795 13 1.5 23 3.0 33 2.795 70 1 0 3DFACE 8 star_u 10 2.12132034355964 20 3.0 30 2.795 11 1.5 21 3.0 31 3.0 12 2.12132034355964 22 3.0 32 3.0 13 2.12132034355964 23 3.0 33 3.0 70 3 0 3DFACE 8 star_u 10 2.12132034355964 20 3.0 30 3.0 11 1.5 21 3.0 31 3.0 12 1.79836855106949 22 3.0 32 3.0 13 1.79836855106949 23 3.0 33 3.0 70 1 0 3DFACE 8 star_u 10 0.878679656440356 20 3.0 30 2.17367965644036 11 0.878679656440356 21 3.0 31 0.826320343559644 12 0.205 22 3.0 32 1.5 13 0.205 23 3.0 33 1.5 70 0 0 3DFACE 8 star_u 10 0.205 20 3.0 30 1.5 11 0.878679656440356 21 3.0 31 0.205 12 0.205 22 3.0 32 0.205 13 0.205 23 3.0 33 0.205 70 1 0 3DFACE 8 star_u 10 0.878679656440356 20 3.0 30 0.205 11 0.205 21 3.0 31 1.5 12 0.878679656440356 22 3.0 32 0.826320343559644 13 0.878679656440356 23 3.0 33 0.826320343559644 70 1 0 3DFACE 8 star_u 10 0.0 20 3.0 30 2.795 11 0.205 21 3.0 31 1.5 12 0.0 22 3.0 32 1.5 13 0.0 23 3.0 33 1.5 70 1 0 3DFACE 8 star_u 10 0.205 20 3.0 30 1.5 11 0.0 21 3.0 31 2.795 12 0.205 22 3.0 32 2.795 13 0.205 23 3.0 33 2.795 70 1 0 3DFACE 8 star_u 10 0.205 20 3.0 30 3.0 11 0.878679656440356 21 3.0 31 2.795 12 0.205 22 3.0 32 2.795 13 0.205 23 3.0 33 2.795 70 1 0 3DFACE 8 star_u 10 0.878679656440356 20 3.0 30 2.795 11 0.205 21 3.0 31 3.0 12 0.878679656440356 22 3.0 32 3.0 13 0.878679656440356 23 3.0 33 3.0 70 3 0 3DFACE 8 star_u 10 0.878679656440356 20 3.0 30 3.0 11 0.205 21 3.0 31 3.0 12 0.497732043121052 22 3.0 32 3.0 13 0.497732043121052 23 3.0 33 3.0 70 1 0 3DFACE 8 star_u 10 0.205 20 3.0 30 2.795 11 0.878679656440356 21 3.0 31 2.17367965644036 12 0.205 22 3.0 32 1.5 13 0.205 23 3.0 33 1.5 70 1 0 3DFACE 8 star_u 10 0.878679656440356 20 3.0 30 2.17367965644036 11 0.205 21 3.0 31 2.795 12 0.878679656440356 22 3.0 32 2.795 13 0.878679656440356 23 3.0 33 2.795 70 1 0 3DFACE 8 star_u 10 0.0 20 3.0 30 1.5 11 0.205 21 3.0 31 0.205 12 0.0 22 3.0 32 0.205 13 0.0 23 3.0 33 0.205 70 1 0 3DFACE 8 star_u 10 0.205 20 3.0 30 0.205 11 0.0 21 3.0 31 1.5 12 0.205 22 3.0 32 1.5 13 0.205 23 3.0 33 1.5 70 1 0 3DFACE 8 star_u 10 0.0 20 3.0 30 0.205 11 0.205 21 3.0 31 0.0 12 0.0 22 3.0 32 0.0 13 0.0 23 3.0 33 0.0 70 1 0 3DFACE 8 star_u 10 0.205 20 3.0 30 0.0 11 0.0 21 3.0 31 0.205 12 0.205 22 3.0 32 0.205 13 0.205 23 3.0 33 0.205 70 1 0 3DFACE 8 star_u 10 0.205 20 3.0 30 0.205 11 0.497732043121052 21 3.0 31 0.0 12 0.205 22 3.0 32 0.0 13 0.205 23 3.0 33 0.0 70 1 0 3DFACE 8 star_u 10 0.497732043121052 20 3.0 30 0.0 11 0.205 21 3.0 31 0.205 12 0.878679656440356 22 3.0 32 0.0 13 0.878679656440356 23 3.0 33 0.0 70 3 0 3DFACE 8 star_u 10 0.878679656440356 20 3.0 30 0.0 11 0.205 21 3.0 31 0.205 12 0.878679656440356 22 3.0 32 0.205 13 0.878679656440356 23 3.0 33 0.205 70 1 0 3DFACE 8 star_u 10 2.21138724003369 20 1.20533375707888 30 1.5 11 2.04447222151364 21 0.955527778486358 31 1.5 12 1.5 22 1.5 32 1.5 13 1.5 23 1.5 33 1.5 70 1 0 3DFACE 8 star_u 10 2.04447222151364 20 0.955527778486358 30 1.5 11 2.21138724003369 21 1.20533375707888 31 1.5 12 2.09521804908931 22 1.01151717119399 32 1.5 13 2.09521804908931 23 1.01151717119399 33 1.5 70 3 0 3DFACE 8 star_u 10 2.09521804908931 20 1.01151717119399 30 1.5 11 2.21138724003369 21 1.20533375707888 31 1.5 12 2.14023160147296 22 1.07221092057491 32 1.5 13 2.14023160147296 23 1.07221092057491 33 1.5 70 3 0 3DFACE 8 star_u 10 2.14023160147296 20 1.07221092057491 30 1.5 11 2.21138724003369 21 1.20533375707888 31 1.5 12 2.17907937354823 22 1.13702451264398 32 1.5 13 2.17907937354823 23 1.13702451264398 33 1.5 70 1 0 3DFACE 8 star_u 10 0.788612759966309 20 1.79466624292112 30 3.0 11 1.5 21 1.5 31 1.5 12 0.788612759966309 22 1.79466624292112 32 1.5 13 0.788612759966309 23 1.79466624292112 33 1.5 70 1 0 3DFACE 8 star_u 10 1.5 20 1.5 30 1.5 11 0.788612759966309 21 1.79466624292112 31 3.0 12 2.21138724003369 22 1.20533375707888 32 1.5 13 2.21138724003369 23 1.20533375707888 33 1.5 70 3 0 3DFACE 8 star_u 10 2.21138724003369 20 1.20533375707888 30 1.5 11 0.788612759966309 21 1.79466624292112 31 3.0 12 2.21138724003369 22 1.20533375707888 32 3.0 13 2.21138724003369 23 1.20533375707888 33 3.0 70 3 0 3DFACE 8 star_u 10 2.21138724003369 20 1.20533375707888 30 3.0 11 0.788612759966309 21 1.79466624292112 31 3.0 12 1.5 22 1.5 32 3.0 13 1.5 23 1.5 33 3.0 70 1 0 3DFACE 8 star_u 10 1.27648079851406 20 2.2368440585138 30 1.5 11 1.5 21 1.5 31 1.5 12 1.20533375707888 22 2.21138724003369 32 1.5 13 1.20533375707888 23 2.21138724003369 33 1.5 70 1 0 3DFACE 8 star_u 10 1.5 20 1.5 30 1.5 11 1.27648079851406 21 2.2368440585138 31 1.5 12 1.34978045204758 22 2.25520466591049 32 1.5 13 1.34978045204758 23 2.25520466591049 33 1.5 70 13 0 3DFACE 8 star_u 10 1.5 20 1.5 30 1.5 11 1.34978045204758 21 2.25520466591049 31 1.5 12 1.42452680194624 22 2.26629223953759 32 1.5 13 1.42452680194624 23 2.26629223953759 33 1.5 70 13 0 3DFACE 8 star_u 10 1.5 20 1.5 30 1.5 11 1.42452680194624 21 2.26629223953759 31 1.5 12 1.5 22 2.27 32 1.5 13 1.5 23 2.27 33 1.5 70 1 0 3DFACE 8 star_u 10 1.5 20 1.5 30 1.5 11 0.733707760462408 21 1.42452680194624 31 1.5 12 0.73 22 1.5 32 1.5 13 0.73 23 1.5 33 1.5 70 1 0 3DFACE 8 star_u 10 0.733707760462408 20 1.42452680194624 30 1.5 11 1.5 21 1.5 31 1.5 12 0.744795334089513 22 1.34978045204758 32 1.5 13 0.744795334089513 23 1.34978045204758 33 1.5 70 3 0 3DFACE 8 star_u 10 0.744795334089513 20 1.34978045204758 30 1.5 11 1.5 21 1.5 31 1.5 12 0.763155941486199 22 1.27648079851406 32 1.5 13 0.763155941486199 23 1.27648079851406 33 1.5 70 3 0 3DFACE 8 star_u 10 0.763155941486199 20 1.27648079851406 30 1.5 11 1.5 21 1.5 31 1.5 12 0.788612759966309 22 1.20533375707888 32 1.5 13 0.788612759966309 23 1.20533375707888 33 1.5 70 1 0 3DFACE 8 star_u 10 1.5 20 1.5 30 1.5 11 1.20533375707888 21 0.788612759966309 31 3.0 12 1.20533375707888 22 0.788612759966309 32 1.5 13 1.20533375707888 23 0.788612759966309 33 1.5 70 1 0 3DFACE 8 star_u 10 1.20533375707888 20 0.788612759966309 30 3.0 11 1.5 21 1.5 31 1.5 12 1.5 22 1.5 32 3.0 13 1.5 23 1.5 33 3.0 70 3 0 3DFACE 8 star_u 10 1.5 20 1.5 30 3.0 11 1.5 21 1.5 31 1.5 12 1.79466624292112 22 2.21138724003369 32 1.5 13 1.79466624292112 23 2.21138724003369 33 1.5 70 13 0 3DFACE 8 star_u 10 1.5 20 1.5 30 3.0 11 1.79466624292112 21 2.21138724003369 31 1.5 12 1.79466624292112 22 2.21138724003369 32 3.0 13 1.79466624292112 23 2.21138724003369 33 3.0 70 1 0 3DFACE 8 star_u 10 1.01151717119399 20 2.09521804908931 30 1.5 11 1.5 21 1.5 31 1.5 12 0.955527778486358 22 2.04447222151364 32 1.5 13 0.955527778486358 23 2.04447222151364 33 1.5 70 1 0 3DFACE 8 star_u 10 1.5 20 1.5 30 1.5 11 1.01151717119399 21 2.09521804908931 31 1.5 12 1.07221092057491 22 2.14023160147296 32 1.5 13 1.07221092057491 23 2.14023160147296 33 1.5 70 13 0 3DFACE 8 star_u 10 1.5 20 1.5 30 1.5 11 1.07221092057491 21 2.14023160147296 31 1.5 12 1.13702451264398 22 2.17907937354823 32 1.5 13 1.13702451264398 23 2.17907937354823 33 1.5 70 13 0 3DFACE 8 star_u 10 1.5 20 1.5 30 1.5 11 1.13702451264398 21 2.17907937354823 31 1.5 12 1.20533375707888 22 2.21138724003369 32 1.5 13 1.20533375707888 23 2.21138724003369 33 1.5 70 1 0 3DFACE 8 star_u 10 1.5 20 1.5 30 1.5 11 1.27648079851406 21 0.763155941486199 31 1.5 12 1.20533375707888 22 0.788612759966309 32 1.5 13 1.20533375707888 23 0.788612759966309 33 1.5 70 1 0 3DFACE 8 star_u 10 1.27648079851406 20 0.763155941486199 30 1.5 11 1.5 21 1.5 31 1.5 12 1.34978045204758 22 0.744795334089513 32 1.5 13 1.34978045204758 23 0.744795334089513 33 1.5 70 3 0 3DFACE 8 star_u 10 1.34978045204758 20 0.744795334089513 30 1.5 11 1.5 21 1.5 31 1.5 12 1.42452680194624 22 0.733707760462408 32 1.5 13 1.42452680194624 23 0.733707760462408 33 1.5 70 3 0 3DFACE 8 star_u 10 1.42452680194624 20 0.733707760462408 30 1.5 11 1.5 21 1.5 31 1.5 12 1.5 22 0.73 32 1.5 13 1.5 23 0.73 33 1.5 70 1 0 3DFACE 8 star_u 10 1.5 20 1.5 30 1.5 11 1.79466624292112 21 0.788612759966309 31 3.0 12 1.79466624292112 22 0.788612759966309 32 1.5 13 1.79466624292112 23 0.788612759966309 33 1.5 70 1 0 3DFACE 8 star_u 10 1.79466624292112 20 0.788612759966309 30 3.0 11 1.5 21 1.5 31 1.5 12 1.5 22 1.5 32 3.0 13 1.5 23 1.5 33 3.0 70 3 0 3DFACE 8 star_u 10 1.5 20 1.5 30 3.0 11 1.5 21 1.5 31 1.5 12 1.20533375707888 22 2.21138724003369 32 1.5 13 1.20533375707888 23 2.21138724003369 33 1.5 70 13 0 3DFACE 8 star_u 10 1.5 20 1.5 30 3.0 11 1.20533375707888 21 2.21138724003369 31 1.5 12 1.20533375707888 22 2.21138724003369 32 3.0 13 1.20533375707888 23 2.21138724003369 33 3.0 70 1 0 3DFACE 8 star_u 10 1.5 20 1.5 30 1.5 11 1.01151717119399 21 0.904781950910692 31 1.5 12 0.955527778486358 22 0.955527778486358 32 1.5 13 0.955527778486358 23 0.955527778486358 33 1.5 70 1 0 3DFACE 8 star_u 10 1.01151717119399 20 0.904781950910692 30 1.5 11 1.5 21 1.5 31 1.5 12 1.07221092057491 22 0.85976839852704 32 1.5 13 1.07221092057491 23 0.85976839852704 33 1.5 70 3 0 3DFACE 8 star_u 10 1.07221092057491 20 0.85976839852704 30 1.5 11 1.5 21 1.5 31 1.5 12 1.13702451264398 22 0.820920626451767 32 1.5 13 1.13702451264398 23 0.820920626451767 33 1.5 70 3 0 3DFACE 8 star_u 10 1.13702451264398 20 0.820920626451767 30 1.5 11 1.5 21 1.5 31 1.5 12 1.20533375707888 22 0.788612759966309 32 1.5 13 1.20533375707888 23 0.788612759966309 33 1.5 70 1 0 3DFACE 8 star_u 10 2.27 20 1.5 30 1.5 11 2.21138724003369 21 1.20533375707888 31 1.5 12 1.5 22 1.5 32 1.5 13 1.5 23 1.5 33 1.5 70 1 0 3DFACE 8 star_u 10 2.21138724003369 20 1.20533375707888 30 1.5 11 2.27 21 1.5 31 1.5 12 2.2368440585138 22 1.27648079851406 32 1.5 13 2.2368440585138 23 1.27648079851406 33 1.5 70 3 0 3DFACE 8 star_u 10 2.2368440585138 20 1.27648079851406 30 1.5 11 2.27 21 1.5 31 1.5 12 2.25520466591049 22 1.34978045204758 32 1.5 13 2.25520466591049 23 1.34978045204758 33 1.5 70 3 0 3DFACE 8 star_u 10 2.25520466591049 20 1.34978045204758 30 1.5 11 2.27 21 1.5 31 1.5 12 2.26629223953759 22 1.42452680194624 32 1.5 13 2.26629223953759 23 1.42452680194624 33 1.5 70 1 0 3DFACE 8 star_u 10 0.788612759966309 20 1.20533375707888 30 3.0 11 1.5 21 1.5 31 1.5 12 0.788612759966309 22 1.20533375707888 32 1.5 13 0.788612759966309 23 1.20533375707888 33 1.5 70 1 0 3DFACE 8 star_u 10 1.5 20 1.5 30 1.5 11 0.788612759966309 21 1.20533375707888 31 3.0 12 2.21138724003369 22 1.79466624292112 32 1.5 13 2.21138724003369 23 1.79466624292112 33 1.5 70 3 0 3DFACE 8 star_u 10 2.21138724003369 20 1.79466624292112 30 1.5 11 0.788612759966309 21 1.20533375707888 31 3.0 12 2.21138724003369 22 1.79466624292112 32 3.0 13 2.21138724003369 23 1.79466624292112 33 3.0 70 3 0 3DFACE 8 star_u 10 2.21138724003369 20 1.79466624292112 30 3.0 11 0.788612759966309 21 1.20533375707888 31 3.0 12 1.5 22 1.5 32 3.0 13 1.5 23 1.5 33 3.0 70 1 0 3DFACE 8 star_u 10 2.21138724003369 20 1.79466624292112 30 1.5 11 2.27 21 1.5 31 1.5 12 1.5 22 1.5 32 1.5 13 1.5 23 1.5 33 1.5 70 1 0 3DFACE 8 star_u 10 2.27 20 1.5 30 1.5 11 2.21138724003369 21 1.79466624292112 31 1.5 12 2.2368440585138 22 1.72351920148594 32 1.5 13 2.2368440585138 23 1.72351920148594 33 1.5 70 13 0 3DFACE 8 star_u 10 2.27 20 1.5 30 1.5 11 2.2368440585138 21 1.72351920148594 31 1.5 12 2.25520466591049 22 1.65021954795242 32 1.5 13 2.25520466591049 23 1.65021954795242 33 1.5 70 13 0 3DFACE 8 star_u 10 2.27 20 1.5 30 1.5 11 2.25520466591049 21 1.65021954795242 31 1.5 12 2.26629223953759 22 1.57547319805376 32 1.5 13 2.26629223953759 23 1.57547319805376 33 1.5 70 1 0 3DFACE 8 star_u 10 0.733707760462408 20 1.57547319805376 30 1.5 11 1.5 21 1.5 31 1.5 12 0.73 22 1.5 32 1.5 13 0.73 23 1.5 33 1.5 70 1 0 3DFACE 8 star_u 10 1.5 20 1.5 30 1.5 11 0.733707760462408 21 1.57547319805376 31 1.5 12 0.744795334089513 22 1.65021954795242 32 1.5 13 0.744795334089513 23 1.65021954795242 33 1.5 70 13 0 3DFACE 8 star_u 10 1.5 20 1.5 30 1.5 11 0.744795334089513 21 1.65021954795242 31 1.5 12 0.763155941486199 22 1.72351920148594 32 1.5 13 0.763155941486199 23 1.72351920148594 33 1.5 70 13 0 3DFACE 8 star_u 10 1.5 20 1.5 30 1.5 11 0.763155941486199 21 1.72351920148594 31 1.5 12 0.788612759966309 22 1.79466624292112 32 1.5 13 0.788612759966309 23 1.79466624292112 33 1.5 70 1 0 3DFACE 8 star_u 10 2.27 20 1.5 30 3.0 11 1.5 21 1.5 31 1.5 12 2.27 22 1.5 32 1.5 13 2.27 23 1.5 33 1.5 70 1 0 3DFACE 8 star_u 10 1.5 20 1.5 30 1.5 11 2.27 21 1.5 31 3.0 12 0.73 22 1.5 32 1.5 13 0.73 23 1.5 33 1.5 70 3 0 3DFACE 8 star_u 10 0.73 20 1.5 30 1.5 11 2.27 21 1.5 31 3.0 12 0.73 22 1.5 32 3.0 13 0.73 23 1.5 33 3.0 70 3 0 3DFACE 8 star_u 10 0.73 20 1.5 30 3.0 11 2.27 21 1.5 31 3.0 12 1.5 22 1.5 32 3.0 13 1.5 23 1.5 33 3.0 70 1 0 3DFACE 8 star_u 10 0.820920626451767 20 1.86297548735602 30 1.5 11 1.5 21 1.5 31 1.5 12 0.788612759966309 22 1.79466624292112 32 1.5 13 0.788612759966309 23 1.79466624292112 33 1.5 70 1 0 3DFACE 8 star_u 10 1.5 20 1.5 30 1.5 11 0.820920626451767 21 1.86297548735602 31 1.5 12 0.85976839852704 22 1.92778907942509 32 1.5 13 0.85976839852704 23 1.92778907942509 33 1.5 70 13 0 3DFACE 8 star_u 10 1.5 20 1.5 30 1.5 11 0.85976839852704 21 1.92778907942509 31 1.5 12 0.904781950910692 22 1.98848282880601 32 1.5 13 0.904781950910692 23 1.98848282880601 33 1.5 70 13 0 3DFACE 8 star_u 10 1.5 20 1.5 30 1.5 11 0.904781950910692 21 1.98848282880601 31 1.5 12 0.955527778486358 22 2.04447222151364 32 1.5 13 0.955527778486358 23 2.04447222151364 33 1.5 70 1 0 3DFACE 8 star_u 10 2.04447222151364 20 0.955527778486358 30 1.5 11 1.79466624292112 21 0.788612759966309 31 1.5 12 1.5 22 1.5 32 1.5 13 1.5 23 1.5 33 1.5 70 1 0 3DFACE 8 star_u 10 1.79466624292112 20 0.788612759966309 30 1.5 11 2.04447222151364 21 0.955527778486358 31 1.5 12 1.86297548735602 22 0.820920626451767 32 1.5 13 1.86297548735602 23 0.820920626451767 33 1.5 70 3 0 3DFACE 8 star_u 10 1.86297548735602 20 0.820920626451767 30 1.5 11 2.04447222151364 21 0.955527778486358 31 1.5 12 1.92778907942509 22 0.85976839852704 32 1.5 13 1.92778907942509 23 0.85976839852704 33 1.5 70 3 0 3DFACE 8 star_u 10 1.92778907942509 20 0.85976839852704 30 1.5 11 2.04447222151364 21 0.955527778486358 31 1.5 12 1.98848282880601 22 0.904781950910693 32 1.5 13 1.98848282880601 23 0.904781950910693 33 1.5 70 1 0 3DFACE 8 star_u 10 1.5 20 1.5 30 3.0 11 2.04447222151364 21 0.955527778486358 31 1.5 12 2.04447222151364 22 0.955527778486358 32 3.0 13 2.04447222151364 23 0.955527778486358 33 3.0 70 1 0 3DFACE 8 star_u 10 2.04447222151364 20 0.955527778486358 30 1.5 11 1.5 21 1.5 31 3.0 12 1.5 22 1.5 32 1.5 13 1.5 23 1.5 33 1.5 70 3 0 3DFACE 8 star_u 10 1.5 20 1.5 30 1.5 11 1.5 21 1.5 31 3.0 12 0.955527778486358 22 2.04447222151364 32 1.5 13 0.955527778486358 23 2.04447222151364 33 1.5 70 3 0 3DFACE 8 star_u 10 0.955527778486358 20 2.04447222151364 30 1.5 11 1.5 21 1.5 31 3.0 12 0.955527778486358 22 2.04447222151364 32 3.0 13 0.955527778486358 23 2.04447222151364 33 3.0 70 1 0 3DFACE 8 star_u 10 1.79466624292112 20 0.788612759966309 30 1.5 11 1.5 21 0.73 31 1.5 12 1.5 22 1.5 32 1.5 13 1.5 23 1.5 33 1.5 70 1 0 3DFACE 8 star_u 10 1.5 20 0.73 30 1.5 11 1.79466624292112 21 0.788612759966309 31 1.5 12 1.57547319805376 22 0.733707760462408 32 1.5 13 1.57547319805376 23 0.733707760462408 33 1.5 70 3 0 3DFACE 8 star_u 10 1.57547319805376 20 0.733707760462408 30 1.5 11 1.79466624292112 21 0.788612759966309 31 1.5 12 1.65021954795242 22 0.744795334089513 32 1.5 13 1.65021954795242 23 0.744795334089513 33 1.5 70 3 0 3DFACE 8 star_u 10 1.65021954795242 20 0.744795334089513 30 1.5 11 1.79466624292112 21 0.788612759966309 31 1.5 12 1.72351920148594 22 0.763155941486199 32 1.5 13 1.72351920148594 23 0.763155941486199 33 1.5 70 1 0 3DFACE 8 star_u 10 1.57547319805376 20 2.26629223953759 30 1.5 11 1.5 21 1.5 31 1.5 12 1.5 22 2.27 32 1.5 13 1.5 23 2.27 33 1.5 70 1 0 3DFACE 8 star_u 10 1.5 20 1.5 30 1.5 11 1.57547319805376 21 2.26629223953759 31 1.5 12 1.79466624292112 22 2.21138724003369 32 1.5 13 1.79466624292112 23 2.21138724003369 33 1.5 70 3 0 3DFACE 8 star_u 10 1.79466624292112 20 2.21138724003369 30 1.5 11 1.57547319805376 21 2.26629223953759 31 1.5 12 1.65021954795242 22 2.25520466591049 32 1.5 13 1.65021954795242 23 2.25520466591049 33 1.5 70 13 0 3DFACE 8 star_u 10 1.79466624292112 20 2.21138724003369 30 1.5 11 1.65021954795242 21 2.25520466591049 31 1.5 12 1.72351920148594 22 2.2368440585138 32 1.5 13 1.72351920148594 23 2.2368440585138 33 1.5 70 1 0 3DFACE 8 star_u 10 1.5 20 1.5 30 1.5 11 1.5 21 0.73 31 3.0 12 1.5 22 0.73 32 1.5 13 1.5 23 0.73 33 1.5 70 1 0 3DFACE 8 star_u 10 1.5 20 0.73 30 3.0 11 1.5 21 1.5 31 1.5 12 1.5 22 1.5 32 3.0 13 1.5 23 1.5 33 3.0 70 3 0 3DFACE 8 star_u 10 1.5 20 1.5 30 3.0 11 1.5 21 1.5 31 1.5 12 1.5 22 2.27 32 1.5 13 1.5 23 2.27 33 1.5 70 13 0 3DFACE 8 star_u 10 1.5 20 1.5 30 3.0 11 1.5 21 2.27 31 1.5 12 1.5 22 2.27 32 3.0 13 1.5 23 2.27 33 3.0 70 1 0 3DFACE 8 star_u 10 1.5 20 1.5 30 1.5 11 0.820920626451767 21 1.13702451264398 31 1.5 12 0.788612759966309 22 1.20533375707888 32 1.5 13 0.788612759966309 23 1.20533375707888 33 1.5 70 1 0 3DFACE 8 star_u 10 0.820920626451767 20 1.13702451264398 30 1.5 11 1.5 21 1.5 31 1.5 12 0.85976839852704 22 1.07221092057491 32 1.5 13 0.85976839852704 23 1.07221092057491 33 1.5 70 3 0 3DFACE 8 star_u 10 0.85976839852704 20 1.07221092057491 30 1.5 11 1.5 21 1.5 31 1.5 12 0.904781950910692 22 1.01151717119399 32 1.5 13 0.904781950910692 23 1.01151717119399 33 1.5 70 3 0 3DFACE 8 star_u 10 0.904781950910692 20 1.01151717119399 30 1.5 11 1.5 21 1.5 31 1.5 12 0.955527778486358 22 0.955527778486358 32 1.5 13 0.955527778486358 23 0.955527778486358 33 1.5 70 1 0 3DFACE 8 star_u 10 1.79466624292112 20 2.21138724003369 30 1.5 11 2.04447222151364 21 2.04447222151364 31 1.5 12 1.5 22 1.5 32 1.5 13 1.5 23 1.5 33 1.5 70 1 0 3DFACE 8 star_u 10 2.04447222151364 20 2.04447222151364 30 1.5 11 1.79466624292112 21 2.21138724003369 31 1.5 12 1.86297548735602 22 2.17907937354823 32 1.5 13 1.86297548735602 23 2.17907937354823 33 1.5 70 13 0 3DFACE 8 star_u 10 2.04447222151364 20 2.04447222151364 30 1.5 11 1.86297548735602 21 2.17907937354823 31 1.5 12 1.92778907942509 22 2.14023160147296 32 1.5 13 1.92778907942509 23 2.14023160147296 33 1.5 70 13 0 3DFACE 8 star_u 10 2.04447222151364 20 2.04447222151364 30 1.5 11 1.92778907942509 21 2.14023160147296 31 1.5 12 1.98848282880601 22 2.09521804908931 32 1.5 13 1.98848282880601 23 2.09521804908931 33 1.5 70 1 0 3DFACE 8 star_u 10 1.5 20 1.5 30 1.5 11 0.955527778486358 21 0.955527778486358 31 3.0 12 0.955527778486358 22 0.955527778486358 32 1.5 13 0.955527778486358 23 0.955527778486358 33 1.5 70 1 0 3DFACE 8 star_u 10 0.955527778486358 20 0.955527778486358 30 3.0 11 1.5 21 1.5 31 1.5 12 1.5 22 1.5 32 3.0 13 1.5 23 1.5 33 3.0 70 3 0 3DFACE 8 star_u 10 1.5 20 1.5 30 3.0 11 1.5 21 1.5 31 1.5 12 2.04447222151364 22 2.04447222151364 32 1.5 13 2.04447222151364 23 2.04447222151364 33 1.5 70 13 0 3DFACE 8 star_u 10 1.5 20 1.5 30 3.0 11 2.04447222151364 21 2.04447222151364 31 1.5 12 2.04447222151364 22 2.04447222151364 32 3.0 13 2.04447222151364 23 2.04447222151364 33 3.0 70 1 0 3DFACE 8 star_d 10 0.955527778486359 20 0.955527778486358 30 1.20736753927986e-15 11 0.205000000000001 21 0.0 31 -1.16573417585641e-15 12 1.19348975147204e-15 22 0.0 32 -1.16573417585641e-15 13 1.19348975147204e-15 23 0.0 33 -1.16573417585641e-15 70 1 0 3DFACE 8 star_d 10 0.205000000000001 20 0.0 30 -1.16573417585641e-15 11 0.955527778486359 21 0.955527778486358 31 1.20736753927986e-15 12 0.497732043121054 22 0.0 32 1.19348975147204e-15 13 0.497732043121054 23 0.0 33 1.19348975147204e-15 70 3 0 3DFACE 8 star_d 10 0.497732043121054 20 0.0 30 1.19348975147204e-15 11 0.955527778486359 21 0.955527778486358 31 1.20736753927986e-15 12 1.01151717119399 22 0.904781950910693 32 6.38378239159465e-16 13 1.01151717119399 23 0.904781950910693 33 6.38378239159465e-16 70 13 0 3DFACE 8 star_d 10 0.497732043121054 20 0.0 30 1.19348975147204e-15 11 1.01151717119399 21 0.904781950910693 31 6.38378239159465e-16 12 1.07221092057491 22 0.85976839852704 32 -1.38777878078145e-17 13 1.07221092057491 23 0.85976839852704 33 -1.38777878078145e-17 70 1 0 3DFACE 8 star_d 10 2.50226795687895 20 3.0 30 1.19348975147204e-15 11 1.98848282880601 21 2.09521804908931 31 -8.46545056276682e-16 12 1.92778907942509 22 2.14023160147296 32 -1.02695629777827e-15 13 1.92778907942509 23 2.14023160147296 33 -1.02695629777827e-15 70 1 0 3DFACE 8 star_d 10 1.98848282880601 20 2.09521804908931 30 -8.46545056276682e-16 11 2.50226795687895 21 3.0 31 1.19348975147204e-15 12 2.04447222151364 22 2.04447222151364 32 -1.11022302462516e-16 13 2.04447222151364 23 2.04447222151364 33 -1.11022302462516e-16 70 3 0 3DFACE 8 star_d 10 2.04447222151364 20 2.04447222151364 30 -1.11022302462516e-16 11 2.50226795687895 21 3.0 31 1.19348975147204e-15 12 3.0 22 3.0 32 1.19348975147204e-15 13 3.0 23 3.0 33 1.19348975147204e-15 70 3 0 3DFACE 8 star_d 10 3.0 20 3.0 30 1.19348975147204e-15 11 2.50226795687895 21 3.0 31 1.19348975147204e-15 12 2.795 22 3.0 32 -1.16573417585641e-15 13 2.795 23 3.0 33 -1.16573417585641e-15 70 1 0 3DFACE 8 star_d 10 3.0 20 1.79836855106949 30 1.19348975147204e-15 11 2.26629223953759 21 1.57547319805376 31 -1.11022302462516e-16 12 2.25520466591049 22 1.65021954795242 32 -1.2490009027033e-15 13 2.25520466591049 23 1.65021954795242 33 -1.2490009027033e-15 70 1 0 3DFACE 8 star_d 10 2.26629223953759 20 1.57547319805376 30 -1.11022302462516e-16 11 3.0 21 1.79836855106949 31 1.19348975147204e-15 12 2.27 22 1.5 32 -2.35922392732846e-16 13 2.27 23 1.5 33 -2.35922392732846e-16 70 3 0 3DFACE 8 star_d 10 2.27 20 1.5 30 -2.35922392732846e-16 11 3.0 21 1.79836855106949 31 1.19348975147204e-15 12 3.0 22 1.5 32 1.19348975147204e-15 13 3.0 23 1.5 33 1.19348975147204e-15 70 1 0 3DFACE 8 star_d 10 1.5 20 3.0 30 6.93889390390723e-16 11 1.34978045204758 21 2.25520466591049 31 -4.02455846426619e-16 12 1.20163144893051 22 3.0 32 1.19348975147204e-15 13 1.20163144893051 23 3.0 33 1.19348975147204e-15 70 1 0 3DFACE 8 star_d 10 1.34978045204758 20 2.25520466591049 30 -4.02455846426619e-16 11 1.5 21 3.0 31 6.93889390390723e-16 12 1.42452680194624 22 2.26629223953759 32 -6.93889390390723e-16 13 1.42452680194624 23 2.26629223953759 33 -6.93889390390723e-16 70 3 0 3DFACE 8 star_d 10 1.42452680194624 20 2.26629223953759 30 -6.93889390390723e-16 11 1.5 21 3.0 31 6.93889390390723e-16 12 1.5 22 2.27 32 6.93889390390723e-16 13 1.5 23 2.27 33 6.93889390390723e-16 70 1 0 3DFACE 8 star_d 10 0.955527778486359 20 2.04447222151364 30 1.20736753927986e-15 11 1.33226762955019e-15 21 2.50226795687895 31 1.19348975147204e-15 12 1.19348975147204e-15 22 3.0 32 -1.16573417585641e-15 13 1.19348975147204e-15 23 3.0 33 -1.16573417585641e-15 70 1 0 3DFACE 8 star_d 10 1.33226762955019e-15 20 2.50226795687895 30 1.19348975147204e-15 11 0.955527778486359 21 2.04447222151364 31 1.20736753927986e-15 12 0.904781950910692 22 1.98848282880601 32 1.31838984174237e-15 13 0.904781950910692 23 1.98848282880601 33 1.31838984174237e-15 70 13 0 3DFACE 8 star_d 10 1.33226762955019e-15 20 2.50226795687895 30 1.19348975147204e-15 11 0.904781950910692 21 1.98848282880601 31 1.31838984174237e-15 12 0.859768398527041 22 1.92778907942509 32 8.74300631892311e-16 13 0.859768398527041 23 1.92778907942509 33 8.74300631892311e-16 70 1 0 3DFACE 8 star_d 10 2.09521804908931 20 1.01151717119399 30 7.63278329429795e-16 11 3.0 21 0.0 31 1.19348975147204e-15 12 2.04447222151364 22 0.955527778486358 32 -1.11022302462516e-16 13 2.04447222151364 23 0.955527778486358 33 -1.11022302462516e-16 70 1 0 3DFACE 8 star_d 10 3.0 20 0.0 30 1.19348975147204e-15 11 2.09521804908931 21 1.01151717119399 31 7.63278329429795e-16 12 2.14023160147296 22 1.07221092057491 32 -9.71445146547012e-16 13 2.14023160147296 23 1.07221092057491 33 -9.71445146547012e-16 70 13 0 3DFACE 8 star_d 10 3.0 20 0.0 30 1.19348975147204e-15 11 2.14023160147296 21 1.07221092057491 31 -9.71445146547012e-16 12 3.0 22 0.497732043121051 32 1.19348975147204e-15 13 3.0 23 0.497732043121051 33 1.19348975147204e-15 70 1 0 3DFACE 8 star_d 10 2.12132034355964 20 5.55111512312578e-17 30 0.826320343559641 11 1.5 21 0.0 31 2.795 12 1.5 22 0.0 32 0.204999999999999 13 1.5 23 0.0 33 0.204999999999999 70 1 0 3DFACE 8 star_d 10 1.5 20 0.0 30 2.795 11 2.12132034355964 21 5.55111512312578e-17 31 0.826320343559641 12 2.12132034355964 22 5.55111512312578e-17 32 2.17367965644036 13 2.12132034355964 23 5.55111512312578e-17 33 2.17367965644036 70 1 0 3DFACE 8 star_d 10 1.79836855106949 20 5.55111512312578e-17 30 3.0 11 1.72351920148594 21 0.763155941486199 31 3.0 12 1.65021954795242 22 0.744795334089513 32 3.0 13 1.65021954795242 23 0.744795334089513 33 3.0 70 1 0 3DFACE 8 star_d 10 1.72351920148594 20 0.763155941486199 30 3.0 11 1.79836855106949 21 5.55111512312578e-17 31 3.0 12 1.79466624292112 22 0.788612759966309 32 3.0 13 1.79466624292112 23 0.788612759966309 33 3.0 70 3 0 3DFACE 8 star_d 10 1.79466624292112 20 0.788612759966309 30 3.0 11 1.79836855106949 21 5.55111512312578e-17 31 3.0 12 2.12132034355964 22 1.11022302462516e-16 32 3.0 13 2.12132034355964 23 1.11022302462516e-16 33 3.0 70 1 0 3DFACE 8 star_d 10 0.878679656440357 20 3.0 30 3.0 11 1.5 21 3.0 31 2.795 12 0.878679656440357 22 3.0 32 2.795 13 0.878679656440357 23 3.0 33 2.795 70 1 0 3DFACE 8 star_d 10 1.5 20 3.0 30 2.795 11 0.878679656440357 21 3.0 31 3.0 12 1.20163144893051 22 3.0 32 3.0 13 1.20163144893051 23 3.0 33 3.0 70 13 0 3DFACE 8 star_d 10 1.5 20 3.0 30 3.0 11 1.5 21 3.0 31 2.795 12 1.20163144893051 22 3.0 32 3.0 13 1.20163144893051 23 3.0 33 3.0 70 2 0 3DFACE 8 star_d 10 0.878679656440356 20 0.0 30 3.0 11 1.07221092057491 21 0.85976839852704 31 3.0 12 0.497732043121053 22 0.0 32 3.0 13 0.497732043121053 23 0.0 33 3.0 70 1 0 3DFACE 8 star_d 10 1.07221092057491 20 0.85976839852704 30 3.0 11 0.878679656440356 21 0.0 31 3.0 12 1.13702451264398 22 0.820920626451767 32 3.0 13 1.13702451264398 23 0.820920626451767 33 3.0 70 3 0 3DFACE 8 star_d 10 1.13702451264398 20 0.820920626451767 30 3.0 11 0.878679656440356 21 0.0 31 3.0 12 1.20533375707888 22 0.788612759966309 32 3.0 13 1.20533375707888 23 0.788612759966309 33 3.0 70 1 0 3DFACE 8 star_d 10 3.0 20 1.79836855106949 30 1.19348975147204e-15 11 3.0 21 1.5 31 3.0 12 3.0 22 1.5 32 1.19348975147204e-15 13 3.0 23 1.5 33 1.19348975147204e-15 70 1 0 3DFACE 8 star_d 10 3.0 20 1.5 30 3.0 11 3.0 21 1.79836855106949 31 1.19348975147204e-15 12 3.0 22 1.79836855106949 32 3.0 13 3.0 23 1.79836855106949 33 3.0 70 3 0 3DFACE 8 star_d 10 3.0 20 1.79836855106949 30 3.0 11 3.0 21 1.79836855106949 31 1.19348975147204e-15 12 3.0 22 2.12132034355964 32 1.19348975147204e-15 13 3.0 23 2.12132034355964 33 1.19348975147204e-15 70 13 0 3DFACE 8 star_d 10 3.0 20 1.79836855106949 30 3.0 11 3.0 21 2.12132034355964 31 1.19348975147204e-15 12 3.0 22 2.12132034355964 32 3.0 13 3.0 23 2.12132034355964 33 3.0 70 1 0 3DFACE 8 star_d 10 2.77555756156289e-16 20 1.20163144893051 30 3.0 11 1.19348975147204e-15 21 0.878679656440358 31 -1.16573417585641e-15 12 2.77555756156289e-16 22 0.878679656440358 32 3.0 13 2.77555756156289e-16 23 0.878679656440358 33 3.0 70 1 0 3DFACE 8 star_d 10 1.19348975147204e-15 20 0.878679656440358 30 -1.16573417585641e-15 11 2.77555756156289e-16 21 1.20163144893051 31 3.0 12 1.33226762955019e-15 22 1.20163144893051 32 1.19348975147204e-15 13 1.33226762955019e-15 23 1.20163144893051 33 1.19348975147204e-15 70 3 0 3DFACE 8 star_d 10 1.33226762955019e-15 20 1.20163144893051 30 1.19348975147204e-15 11 2.77555756156289e-16 21 1.20163144893051 31 3.0 12 2.77555756156289e-16 22 1.5 32 3.0 13 2.77555756156289e-16 23 1.5 33 3.0 70 13 0 3DFACE 8 star_d 10 1.33226762955019e-15 20 1.20163144893051 30 1.19348975147204e-15 11 2.77555756156289e-16 21 1.5 31 3.0 12 1.19348975147204e-15 22 1.5 32 -1.16573417585641e-15 13 1.19348975147204e-15 23 1.5 33 -1.16573417585641e-15 70 1 0 3DFACE 8 star_d 10 2.2368440585138 20 1.72351920148594 30 3.0 11 3.0 21 2.12132034355964 31 3.0 12 2.21138724003369 22 1.79466624292112 32 3.0 13 2.21138724003369 23 1.79466624292112 33 3.0 70 1 0 3DFACE 8 star_d 10 3.0 20 2.12132034355964 30 3.0 11 2.2368440585138 21 1.72351920148594 31 3.0 12 2.25520466591049 22 1.65021954795242 32 3.0 13 2.25520466591049 23 1.65021954795242 33 3.0 70 13 0 3DFACE 8 star_d 10 3.0 20 2.12132034355964 30 3.0 11 2.25520466591049 21 1.65021954795242 31 3.0 12 3.0 22 1.79836855106949 32 3.0 13 3.0 23 1.79836855106949 33 3.0 70 1 0 3DFACE 8 star_d 10 1.57547319805376 20 0.733707760462408 30 1.38777878078145e-16 11 1.5 21 0.0 31 6.93889390390723e-16 12 1.5 22 0.73 32 6.93889390390723e-16 13 1.5 23 0.73 33 6.93889390390723e-16 70 1 0 3DFACE 8 star_d 10 1.5 20 0.0 30 6.93889390390723e-16 11 1.57547319805376 21 0.733707760462408 31 1.38777878078145e-16 12 1.79836855106949 22 5.55111512312578e-17 32 1.19348975147204e-15 13 1.79836855106949 23 5.55111512312578e-17 33 1.19348975147204e-15 70 3 0 3DFACE 8 star_d 10 1.79836855106949 20 5.55111512312578e-17 30 1.19348975147204e-15 11 1.57547319805376 21 0.733707760462408 31 1.38777878078145e-16 12 1.65021954795242 22 0.744795334089513 32 -3.60822483003176e-16 13 1.65021954795242 23 0.744795334089513 33 -3.60822483003176e-16 70 1 0 3DFACE 8 star_d 10 3.0 20 0.497732043121051 30 3.0 11 2.17907937354823 21 1.13702451264398 31 3.0 12 2.14023160147296 22 1.07221092057491 32 3.0 13 2.14023160147296 23 1.07221092057491 33 3.0 70 1 0 3DFACE 8 star_d 10 2.17907937354823 20 1.13702451264398 30 3.0 11 3.0 21 0.497732043121051 31 3.0 12 2.21138724003369 22 1.20533375707888 32 3.0 13 2.21138724003369 23 1.20533375707888 33 3.0 70 3 0 3DFACE 8 star_d 10 2.21138724003369 20 1.20533375707888 30 3.0 11 3.0 21 0.497732043121051 31 3.0 12 3.0 22 0.878679656440356 32 3.0 13 3.0 23 0.878679656440356 33 3.0 70 1 0 3DFACE 8 star_d 10 0.788612759966309 20 1.20533375707888 30 3.0 11 2.77555756156289e-16 21 1.20163144893051 31 3.0 12 2.77555756156289e-16 22 0.878679656440358 32 3.0 13 2.77555756156289e-16 23 0.878679656440358 33 3.0 70 1 0 3DFACE 8 star_d 10 2.77555756156289e-16 20 1.20163144893051 30 3.0 11 0.788612759966309 21 1.20533375707888 31 3.0 12 0.763155941486199 22 1.27648079851406 32 3.0 13 0.763155941486199 23 1.27648079851406 33 3.0 70 13 0 3DFACE 8 star_d 10 2.77555756156289e-16 20 1.20163144893051 30 3.0 11 0.763155941486199 21 1.27648079851406 31 3.0 12 0.744795334089513 22 1.34978045204758 32 3.0 13 0.744795334089513 23 1.34978045204758 33 3.0 70 1 0 3DFACE 8 star_d 10 0.73 20 1.5 30 7.07767178198537e-16 11 1.33226762955019e-15 21 1.20163144893051 31 1.19348975147204e-15 12 1.19348975147204e-15 22 1.5 32 -1.16573417585641e-15 13 1.19348975147204e-15 23 1.5 33 -1.16573417585641e-15 70 1 0 3DFACE 8 star_d 10 1.33226762955019e-15 20 1.20163144893051 30 1.19348975147204e-15 11 0.73 21 1.5 31 7.07767178198537e-16 12 0.733707760462409 22 1.42452680194624 32 4.16333634234434e-16 13 0.733707760462409 23 1.42452680194624 33 4.16333634234434e-16 70 13 0 3DFACE 8 star_d 10 1.33226762955019e-15 20 1.20163144893051 30 1.19348975147204e-15 11 0.733707760462409 21 1.42452680194624 31 4.16333634234434e-16 12 0.744795334089513 22 1.34978045204758 32 4.71844785465692e-16 13 0.744795334089513 23 1.34978045204758 33 4.71844785465692e-16 70 1 0 3DFACE 8 star_d 10 0.205000000000001 20 0.0 30 2.795 11 1.19348975147204e-15 21 0.0 31 1.5 12 0.205000000000001 22 0.0 32 1.5 13 0.205000000000001 23 0.0 33 1.5 70 1 0 3DFACE 8 star_d 10 1.19348975147204e-15 20 0.0 30 1.5 11 0.205000000000001 21 0.0 31 2.795 12 1.19348975147204e-15 22 0.0 32 2.795 13 1.19348975147204e-15 23 0.0 33 2.795 70 1 0 3DFACE 8 star_d 10 2.77555756156289e-16 20 2.50226795687895 30 3.0 11 1.19348975147204e-15 21 2.12132034355964 31 -1.16573417585641e-15 12 2.77555756156289e-16 22 2.12132034355964 32 3.0 13 2.77555756156289e-16 23 2.12132034355964 33 3.0 70 1 0 3DFACE 8 star_d 10 1.19348975147204e-15 20 2.12132034355964 30 -1.16573417585641e-15 11 2.77555756156289e-16 21 2.50226795687895 31 3.0 12 1.33226762955019e-15 22 2.50226795687895 32 1.19348975147204e-15 13 1.33226762955019e-15 23 2.50226795687895 33 1.19348975147204e-15 70 3 0 3DFACE 8 star_d 10 1.33226762955019e-15 20 2.50226795687895 30 1.19348975147204e-15 11 2.77555756156289e-16 21 2.50226795687895 31 3.0 12 2.77555756156289e-16 22 3.0 32 3.0 13 2.77555756156289e-16 23 3.0 33 3.0 70 13 0 3DFACE 8 star_d 10 1.33226762955019e-15 20 2.50226795687895 30 1.19348975147204e-15 11 2.77555756156289e-16 21 3.0 31 3.0 12 1.19348975147204e-15 22 3.0 32 -1.16573417585641e-15 13 1.19348975147204e-15 23 3.0 33 -1.16573417585641e-15 70 1 0 3DFACE 8 star_d 10 1.92778907942509 20 2.14023160147296 30 -1.02695629777827e-15 11 2.04447222151364 21 2.04447222151364 31 -1.11022302462516e-16 12 1.5 22 1.5 32 1.19348975147204e-15 13 1.5 23 1.5 33 1.19348975147204e-15 70 1 0 3DFACE 8 star_d 10 2.04447222151364 20 2.04447222151364 30 -1.11022302462516e-16 11 1.92778907942509 21 2.14023160147296 31 -1.02695629777827e-15 12 1.98848282880601 22 2.09521804908931 32 -8.46545056276682e-16 13 1.98848282880601 23 2.09521804908931 33 -8.46545056276682e-16 70 1 0 3DFACE 8 star_d 10 1.20533375707888 20 2.21138724003369 30 3.0 11 1.20163144893051 21 3.0 31 3.0 12 0.878679656440357 22 3.0 32 3.0 13 0.878679656440357 23 3.0 33 3.0 70 1 0 3DFACE 8 star_d 10 1.20163144893051 20 3.0 30 3.0 11 1.20533375707888 21 2.21138724003369 31 3.0 12 1.27648079851406 22 2.2368440585138 32 3.0 13 1.27648079851406 23 2.2368440585138 33 3.0 70 13 0 3DFACE 8 star_d 10 1.20163144893051 20 3.0 30 3.0 11 1.27648079851406 21 2.2368440585138 31 3.0 12 1.34978045204758 22 2.25520466591049 32 3.0 13 1.34978045204758 23 2.25520466591049 33 3.0 70 1 0 3DFACE 8 star_d 10 3.0 20 0.497732043121051 30 1.19348975147204e-15 11 3.0 21 0.0 31 3.0 12 3.0 22 0.0 32 1.19348975147204e-15 13 3.0 23 0.0 33 1.19348975147204e-15 70 1 0 3DFACE 8 star_d 10 3.0 20 0.0 30 3.0 11 3.0 21 0.497732043121051 31 1.19348975147204e-15 12 3.0 22 0.497732043121051 32 3.0 13 3.0 23 0.497732043121051 33 3.0 70 3 0 3DFACE 8 star_d 10 3.0 20 0.497732043121051 30 3.0 11 3.0 21 0.497732043121051 31 1.19348975147204e-15 12 3.0 22 0.878679656440356 32 1.19348975147204e-15 13 3.0 23 0.878679656440356 33 1.19348975147204e-15 70 13 0 3DFACE 8 star_d 10 3.0 20 0.497732043121051 30 3.0 11 3.0 21 0.878679656440356 31 1.19348975147204e-15 12 3.0 22 0.878679656440356 32 3.0 13 3.0 23 0.878679656440356 33 3.0 70 1 0 3DFACE 8 star_d 10 2.12132034355964 20 3.0 30 0.826320343559642 11 2.795 21 3.0 31 0.204999999999999 12 2.12132034355964 22 3.0 32 0.204999999999999 13 2.12132034355964 23 3.0 33 0.204999999999999 70 1 0 3DFACE 8 star_d 10 2.795 20 3.0 30 0.204999999999999 11 2.12132034355964 21 3.0 31 0.826320343559642 12 2.795 22 3.0 32 1.5 13 2.795 23 3.0 33 1.5 70 1 0 3DFACE 8 star_d 10 1.92778907942509 20 2.14023160147296 30 3.0 11 1.86297548735602 21 2.17907937354823 31 1.5 12 1.92778907942509 22 2.14023160147296 32 1.5 13 1.92778907942509 23 2.14023160147296 33 1.5 70 1 0 3DFACE 8 star_d 10 1.86297548735602 20 2.17907937354823 30 1.5 11 1.92778907942509 21 2.14023160147296 31 3.0 12 1.86297548735602 22 2.17907937354823 32 3.0 13 1.86297548735602 23 2.17907937354823 33 3.0 70 1 0 3DFACE 8 star_d 10 2.21138724003369 20 1.79466624292112 30 3.0 11 2.2368440585138 21 1.72351920148594 31 1.5 12 2.2368440585138 22 1.72351920148594 32 3.0 13 2.2368440585138 23 1.72351920148594 33 3.0 70 1 0 3DFACE 8 star_d 10 2.2368440585138 20 1.72351920148594 30 1.5 11 2.21138724003369 21 1.79466624292112 31 3.0 12 2.21138724003369 22 1.79466624292112 32 1.5 13 2.21138724003369 23 1.79466624292112 33 1.5 70 1 0 3DFACE 8 star_d 10 0.955527778486359 20 2.04447222151364 30 1.5 11 0.904781950910692 21 1.98848282880601 31 3.0 12 0.904781950910694 22 1.98848282880601 32 1.5 13 0.904781950910694 23 1.98848282880601 33 1.5 70 1 0 3DFACE 8 star_d 10 0.904781950910692 20 1.98848282880601 30 3.0 11 0.955527778486359 21 2.04447222151364 31 1.5 12 0.955527778486358 22 2.04447222151364 32 3.0 13 0.955527778486358 23 2.04447222151364 33 3.0 70 1 0 3DFACE 8 star_d 10 2.26629223953759 20 1.57547319805376 30 3.0 11 2.27 21 1.5 31 1.5 12 2.27 22 1.5 32 3.0 13 2.27 23 1.5 33 3.0 70 1 0 3DFACE 8 star_d 10 2.27 20 1.5 30 1.5 11 2.26629223953759 21 1.57547319805376 31 3.0 12 2.26629223953759 22 1.57547319805376 32 1.5 13 2.26629223953759 23 1.57547319805376 33 1.5 70 1 0 3DFACE 8 star_d 10 2.14023160147296 20 1.07221092057491 30 3.0 11 2.09521804908931 21 1.01151717119399 31 1.5 12 2.09521804908931 22 1.01151717119399 32 3.0 13 2.09521804908931 23 1.01151717119399 33 3.0 70 1 0 3DFACE 8 star_d 10 2.09521804908931 20 1.01151717119399 30 1.5 11 2.14023160147296 21 1.07221092057491 31 3.0 12 2.14023160147296 22 1.07221092057491 32 1.5 13 2.14023160147296 23 1.07221092057491 33 1.5 70 1 0 3DFACE 8 star_d 10 0.859768398527041 20 1.92778907942509 30 1.5 11 0.820920626451767 21 1.86297548735602 31 3.0 12 0.820920626451766 22 1.86297548735602 32 1.5 13 0.820920626451766 23 1.86297548735602 33 1.5 70 1 0 3DFACE 8 star_d 10 0.820920626451767 20 1.86297548735602 30 3.0 11 0.859768398527041 21 1.92778907942509 31 1.5 12 0.859768398527041 22 1.92778907942509 32 3.0 13 0.859768398527041 23 1.92778907942509 33 3.0 70 1 0 3DFACE 8 star_d 10 1.86297548735602 20 2.17907937354823 30 1.5 11 1.79466624292112 21 2.21138724003369 31 3.0 12 1.79466624292112 22 2.21138724003369 32 1.5 13 1.79466624292112 23 2.21138724003369 33 1.5 70 1 0 3DFACE 8 star_d 10 1.79466624292112 20 2.21138724003369 30 3.0 11 1.86297548735602 21 2.17907937354823 31 1.5 12 1.86297548735602 22 2.17907937354823 32 3.0 13 1.86297548735602 23 2.17907937354823 33 3.0 70 1 0 3DFACE 8 star_d 10 0.78861275996631 20 1.79466624292112 30 2.77555756156289e-17 11 2.77555756156289e-16 21 2.12132034355964 31 3.0 12 1.19348975147204e-15 22 2.12132034355964 32 -1.16573417585641e-15 13 1.19348975147204e-15 23 2.12132034355964 33 -1.16573417585641e-15 70 1 0 3DFACE 8 star_d 10 2.77555756156289e-16 20 2.12132034355964 30 3.0 11 0.78861275996631 21 1.79466624292112 31 2.77555756156289e-17 12 0.78861275996631 22 1.79466624292112 32 1.5 13 0.78861275996631 23 1.79466624292112 33 1.5 70 13 0 3DFACE 8 star_d 10 2.77555756156289e-16 20 2.12132034355964 30 3.0 11 0.78861275996631 21 1.79466624292112 31 1.5 12 0.788612759966309 22 1.79466624292112 32 3.0 13 0.788612759966309 23 1.79466624292112 33 3.0 70 1 0 3DFACE 8 star_d 10 1.27648079851406 20 0.763155941486199 30 1.1518563880486e-15 11 1.20533375707888 21 0.788612759966309 31 1.5 12 1.20533375707888 22 0.788612759966309 32 2.63677968348475e-16 13 1.20533375707888 23 0.788612759966309 33 2.63677968348475e-16 70 1 0 3DFACE 8 star_d 10 1.20533375707888 20 0.788612759966309 30 1.5 11 1.27648079851406 21 0.763155941486199 31 1.1518563880486e-15 12 1.27648079851406 22 0.763155941486199 32 1.5 13 1.27648079851406 23 0.763155941486199 33 1.5 70 1 0 3DFACE 8 star_d 10 1.5 20 0.73 30 3.0 11 1.5 21 0.0 31 2.795 12 1.5 22 0.0 32 3.0 13 1.5 23 0.0 33 3.0 70 1 0 3DFACE 8 star_d 10 1.5 20 0.0 30 2.795 11 1.5 21 0.73 31 3.0 12 1.5 22 0.0 32 0.204999999999999 13 1.5 23 0.0 33 0.204999999999999 70 3 0 3DFACE 8 star_d 10 1.5 20 0.0 30 0.204999999999999 11 1.5 21 0.73 31 3.0 12 1.5 22 0.0 32 6.93889390390723e-16 13 1.5 23 0.0 33 6.93889390390723e-16 70 3 0 3DFACE 8 star_d 10 1.5 20 0.0 30 6.93889390390723e-16 11 1.5 21 0.73 31 3.0 12 1.5 22 0.73 32 6.93889390390723e-16 13 1.5 23 0.73 33 6.93889390390723e-16 70 3 0 3DFACE 8 star_d 10 1.5 20 0.73 30 6.93889390390723e-16 11 1.5 21 0.73 31 3.0 12 1.5 22 0.73 32 1.5 13 1.5 23 0.73 33 1.5 70 1 0 3DFACE 8 star_d 10 2.09521804908931 20 1.98848282880601 30 7.63278329429795e-16 11 2.14023160147296 21 1.92778907942509 31 1.5 12 2.14023160147296 22 1.92778907942509 32 -9.71445146547012e-16 13 2.14023160147296 23 1.92778907942509 33 -9.71445146547012e-16 70 1 0 3DFACE 8 star_d 10 2.14023160147296 20 1.92778907942509 30 1.5 11 2.09521804908931 21 1.98848282880601 31 7.63278329429795e-16 12 2.09521804908931 22 1.98848282880601 32 1.5 13 2.09521804908931 23 1.98848282880601 33 1.5 70 1 0 3DFACE 8 star_d 10 1.57547319805376 20 2.26629223953759 30 1.38777878078145e-16 11 1.65021954795242 21 2.25520466591049 31 1.5 12 1.65021954795242 22 2.25520466591049 32 -3.60822483003176e-16 13 1.65021954795242 23 2.25520466591049 33 -3.60822483003176e-16 70 1 0 3DFACE 8 star_d 10 1.65021954795242 20 2.25520466591049 30 1.5 11 1.57547319805376 21 2.26629223953759 31 1.38777878078145e-16 12 1.57547319805376 22 2.26629223953759 32 1.5 13 1.57547319805376 23 2.26629223953759 33 1.5 70 1 0 3DFACE 8 star_d 10 2.21138724003369 20 1.79466624292112 30 1.5 11 3.0 21 2.12132034355964 31 1.19348975147204e-15 12 2.21138724003369 22 1.79466624292112 32 -6.66133814775094e-16 13 2.21138724003369 23 1.79466624292112 33 -6.66133814775094e-16 70 1 0 3DFACE 8 star_d 10 3.0 20 2.12132034355964 30 1.19348975147204e-15 11 2.21138724003369 21 1.79466624292112 31 1.5 12 3.0 22 2.12132034355964 32 3.0 13 3.0 23 2.12132034355964 33 3.0 70 3 0 3DFACE 8 star_d 10 3.0 20 2.12132034355964 30 3.0 11 2.21138724003369 21 1.79466624292112 31 1.5 12 2.21138724003369 22 1.79466624292112 32 3.0 13 2.21138724003369 23 1.79466624292112 33 3.0 70 1 0 3DFACE 8 star_d 10 1.07221092057491 20 2.14023160147296 30 1.5 11 1.13702451264398 21 2.17907937354823 31 8.18789480661053e-16 12 1.07221092057491 22 2.14023160147296 32 3.19189119579733e-16 13 1.07221092057491 23 2.14023160147296 33 3.19189119579733e-16 70 1 0 3DFACE 8 star_d 10 1.13702451264398 20 2.17907937354823 30 8.18789480661053e-16 11 1.07221092057491 21 2.14023160147296 31 1.5 12 1.13702451264398 22 2.17907937354823 32 1.5 13 1.13702451264398 23 2.17907937354823 33 1.5 70 1 0 3DFACE 8 star_d 10 1.86297548735602 20 0.820920626451767 30 1.58206781009085e-15 11 1.79466624292112 21 0.788612759966309 31 1.5 12 1.79466624292112 22 0.788612759966309 32 -1.38777878078145e-16 13 1.79466624292112 23 0.788612759966309 33 -1.38777878078145e-16 70 1 0 3DFACE 8 star_d 10 1.79466624292112 20 0.788612759966309 30 1.5 11 1.86297548735602 21 0.820920626451767 31 1.58206781009085e-15 12 1.86297548735602 22 0.820920626451767 32 1.5 13 1.86297548735602 23 0.820920626451767 33 1.5 70 1 0 3DFACE 8 star_d 10 0.788612759966309 20 1.20533375707888 30 1.5 11 0.820920626451768 21 1.13702451264398 31 1.65145674912992e-15 12 0.820920626451766 22 1.13702451264398 32 1.5 13 0.820920626451766 23 1.13702451264398 33 1.5 70 1 0 3DFACE 8 star_d 10 0.820920626451768 20 1.13702451264398 30 1.65145674912992e-15 11 0.788612759966309 21 1.20533375707888 31 1.5 12 0.78861275996631 22 1.20533375707888 32 2.77555756156289e-17 13 0.78861275996631 23 1.20533375707888 33 2.77555756156289e-17 70 1 0 3DFACE 8 star_d 10 0.955527778486359 20 2.04447222151364 30 1.20736753927986e-15 11 1.01151717119399 21 2.09521804908931 31 1.5 12 1.01151717119399 22 2.09521804908931 32 6.38378239159465e-16 13 1.01151717119399 23 2.09521804908931 33 6.38378239159465e-16 70 1 0 3DFACE 8 star_d 10 1.01151717119399 20 2.09521804908931 30 1.5 11 0.955527778486359 21 2.04447222151364 31 1.20736753927986e-15 12 0.955527778486359 22 2.04447222151364 32 1.5 13 0.955527778486359 23 2.04447222151364 33 1.5 70 1 0 3DFACE 8 star_d 10 1.5 20 2.27 30 6.93889390390723e-16 11 1.57547319805376 21 2.26629223953759 31 1.5 12 1.57547319805376 22 2.26629223953759 32 1.38777878078145e-16 13 1.57547319805376 23 2.26629223953759 33 1.38777878078145e-16 70 1 0 3DFACE 8 star_d 10 1.57547319805376 20 2.26629223953759 30 1.5 11 1.5 21 2.27 31 6.93889390390723e-16 12 1.5 22 2.27 32 1.5 13 1.5 23 2.27 33 1.5 70 1 0 3DFACE 8 star_d 10 1.13702451264398 20 2.17907937354823 30 8.18789480661053e-16 11 1.20533375707888 21 2.21138724003369 31 1.5 12 1.20533375707888 22 2.21138724003369 32 -5.68989300120393e-16 13 1.20533375707888 23 2.21138724003369 33 -5.68989300120393e-16 70 1 0 3DFACE 8 star_d 10 1.20533375707888 20 2.21138724003369 30 1.5 11 1.13702451264398 21 2.17907937354823 31 8.18789480661053e-16 12 1.13702451264398 22 2.17907937354823 32 1.5 13 1.13702451264398 23 2.17907937354823 33 1.5 70 1 0 3DFACE 8 star_d 10 1.92778907942509 20 0.85976839852704 30 1.5 11 1.86297548735602 21 0.820920626451767 31 1.58206781009085e-15 12 1.92778907942509 22 0.85976839852704 32 -1.02695629777827e-15 13 1.92778907942509 23 0.85976839852704 33 -1.02695629777827e-15 70 1 0 3DFACE 8 star_d 10 1.86297548735602 20 0.820920626451767 30 1.58206781009085e-15 11 1.92778907942509 21 0.85976839852704 31 1.5 12 1.86297548735602 22 0.820920626451767 32 1.5 13 1.86297548735602 23 0.820920626451767 33 1.5 70 1 0 3DFACE 8 star_d 10 1.01151717119399 20 2.09521804908931 30 6.38378239159465e-16 11 1.07221092057491 21 2.14023160147296 31 1.5 12 1.07221092057491 22 2.14023160147296 32 3.19189119579733e-16 13 1.07221092057491 23 2.14023160147296 33 3.19189119579733e-16 70 1 0 3DFACE 8 star_d 10 1.07221092057491 20 2.14023160147296 30 1.5 11 1.01151717119399 21 2.09521804908931 31 6.38378239159465e-16 12 1.01151717119399 22 2.09521804908931 32 1.5 13 1.01151717119399 23 2.09521804908931 33 1.5 70 1 0 3DFACE 8 star_d 10 2.17907937354823 20 1.13702451264398 30 3.0 11 2.14023160147296 21 1.07221092057491 31 1.5 12 2.14023160147296 22 1.07221092057491 32 3.0 13 2.14023160147296 23 1.07221092057491 33 3.0 70 1 0 3DFACE 8 star_d 10 2.14023160147296 20 1.07221092057491 30 1.5 11 2.17907937354823 21 1.13702451264398 31 3.0 12 2.17907937354823 22 1.13702451264398 32 1.5 13 2.17907937354823 23 1.13702451264398 33 1.5 70 1 0 3DFACE 8 star_d 10 0.859768398527041 20 1.07221092057491 30 1.5 11 0.904781950910692 21 1.01151717119399 31 1.31838984174237e-15 12 0.904781950910694 22 1.01151717119399 32 1.5 13 0.904781950910694 23 1.01151717119399 33 1.5 70 1 0 3DFACE 8 star_d 10 0.904781950910692 20 1.01151717119399 30 1.31838984174237e-15 11 0.859768398527041 21 1.07221092057491 31 1.5 12 0.859768398527041 22 1.07221092057491 32 8.74300631892311e-16 13 0.859768398527041 23 1.07221092057491 33 8.74300631892311e-16 70 1 0 3DFACE 8 star_d 10 1.42452680194624 20 2.26629223953759 30 3.0 11 1.34978045204758 21 2.25520466591049 31 1.5 12 1.42452680194624 22 2.26629223953759 32 1.5 13 1.42452680194624 23 2.26629223953759 33 1.5 70 1 0 3DFACE 8 star_d 10 1.34978045204758 20 2.25520466591049 30 1.5 11 1.42452680194624 21 2.26629223953759 31 3.0 12 1.34978045204758 22 2.25520466591049 32 3.0 13 1.34978045204758 23 2.25520466591049 33 3.0 70 1 0 3DFACE 8 star_d 10 2.09521804908931 20 1.01151717119399 30 3.0 11 2.04447222151364 21 0.955527778486358 31 1.5 12 2.04447222151364 22 0.955527778486358 32 3.0 13 2.04447222151364 23 0.955527778486358 33 3.0 70 1 0 3DFACE 8 star_d 10 2.04447222151364 20 0.955527778486358 30 1.5 11 2.09521804908931 21 1.01151717119399 31 3.0 12 2.09521804908931 22 1.01151717119399 32 1.5 13 2.09521804908931 23 1.01151717119399 33 1.5 70 1 0 3DFACE 8 star_d 10 2.2368440585138 20 1.72351920148594 30 3.0 11 2.25520466591049 21 1.65021954795242 31 1.5 12 2.25520466591049 22 1.65021954795242 32 3.0 13 2.25520466591049 23 1.65021954795242 33 3.0 70 1 0 3DFACE 8 star_d 10 2.25520466591049 20 1.65021954795242 30 1.5 11 2.2368440585138 21 1.72351920148594 31 3.0 12 2.2368440585138 22 1.72351920148594 32 1.5 13 2.2368440585138 23 1.72351920148594 33 1.5 70 1 0 3DFACE 8 star_d 10 1.13702451264398 20 0.820920626451767 30 1.5 11 1.20533375707888 21 0.788612759966309 31 3.0 12 1.20533375707888 22 0.788612759966309 32 1.5 13 1.20533375707888 23 0.788612759966309 33 1.5 70 1 0 3DFACE 8 star_d 10 1.20533375707888 20 0.788612759966309 30 3.0 11 1.13702451264398 21 0.820920626451767 31 1.5 12 1.13702451264398 22 0.820920626451767 32 3.0 13 1.13702451264398 23 0.820920626451767 33 3.0 70 1 0 3DFACE 8 star_d 10 1.72351920148594 20 2.2368440585138 30 -5.27355936696949e-16 11 1.79466624292112 21 2.21138724003369 31 1.5 12 1.79466624292112 22 2.21138724003369 32 -1.4432899320127e-15 13 1.79466624292112 23 2.21138724003369 33 -1.4432899320127e-15 70 1 0 3DFACE 8 star_d 10 1.79466624292112 20 2.21138724003369 30 1.5 11 1.72351920148594 21 2.2368440585138 31 -5.27355936696949e-16 12 1.72351920148594 22 2.2368440585138 32 1.5 13 1.72351920148594 23 2.2368440585138 33 1.5 70 1 0 3DFACE 8 star_d 10 0.955527778486359 20 0.955527778486358 30 1.5 11 1.01151717119399 21 0.904781950910693 31 3.0 12 1.01151717119399 22 0.904781950910693 32 1.5 13 1.01151717119399 23 0.904781950910693 33 1.5 70 1 0 3DFACE 8 star_d 10 1.01151717119399 20 0.904781950910693 30 3.0 11 0.955527778486359 21 0.955527778486358 31 1.5 12 0.955527778486358 22 0.955527778486358 32 3.0 13 0.955527778486358 23 0.955527778486358 33 3.0 70 1 0 3DFACE 8 star_d 10 1.5 20 3.0 30 6.93889390390723e-16 11 1.5 21 2.27 31 1.5 12 1.5 22 2.27 32 6.93889390390723e-16 13 1.5 23 2.27 33 6.93889390390723e-16 70 1 0 3DFACE 8 star_d 10 1.5 20 2.27 30 1.5 11 1.5 21 3.0 31 6.93889390390723e-16 12 1.5 22 2.27 32 3.0 13 1.5 23 2.27 33 3.0 70 3 0 3DFACE 8 star_d 10 1.5 20 2.27 30 3.0 11 1.5 21 3.0 31 6.93889390390723e-16 12 1.5 22 3.0 32 3.0 13 1.5 23 3.0 33 3.0 70 3 0 3DFACE 8 star_d 10 1.5 20 3.0 30 3.0 11 1.5 21 3.0 31 6.93889390390723e-16 12 1.5 22 3.0 32 0.204999999999999 13 1.5 23 3.0 33 0.204999999999999 70 13 0 3DFACE 8 star_d 10 1.5 20 3.0 30 3.0 11 1.5 21 3.0 31 0.204999999999999 12 1.5 22 3.0 32 2.795 13 1.5 23 3.0 33 2.795 70 1 0 3DFACE 8 star_d 10 0.763155941486199 20 1.72351920148594 30 1.5 11 0.744795334089513 21 1.65021954795242 31 4.71844785465692e-16 12 0.744795334089513 22 1.65021954795242 32 1.5 13 0.744795334089513 23 1.65021954795242 33 1.5 70 1 0 3DFACE 8 star_d 10 0.744795334089513 20 1.65021954795242 30 4.71844785465692e-16 11 0.763155941486199 21 1.72351920148594 31 1.5 12 0.7631559414862 22 1.72351920148594 32 -2.77555756156289e-17 13 0.7631559414862 23 1.72351920148594 33 -2.77555756156289e-17 70 1 0 3DFACE 8 star_d 10 0.820920626451766 20 1.86297548735602 30 1.5 11 0.788612759966309 21 1.79466624292112 31 3.0 12 0.78861275996631 22 1.79466624292112 32 1.5 13 0.78861275996631 23 1.79466624292112 33 1.5 70 1 0 3DFACE 8 star_d 10 0.788612759966309 20 1.79466624292112 30 3.0 11 0.820920626451766 21 1.86297548735602 31 1.5 12 0.820920626451767 22 1.86297548735602 32 3.0 13 0.820920626451767 23 1.86297548735602 33 3.0 70 1 0 3DFACE 8 star_d 10 1.98848282880601 20 2.09521804908931 30 1.5 11 1.92778907942509 21 2.14023160147296 31 3.0 12 1.92778907942509 22 2.14023160147296 32 1.5 13 1.92778907942509 23 2.14023160147296 33 1.5 70 1 0 3DFACE 8 star_d 10 1.92778907942509 20 2.14023160147296 30 3.0 11 1.98848282880601 21 2.09521804908931 31 1.5 12 1.98848282880601 22 2.09521804908931 32 3.0 13 1.98848282880601 23 2.09521804908931 33 3.0 70 1 0 3DFACE 8 star_d 10 0.955527778486358 20 0.955527778486358 30 3.0 11 1.19348975147204e-15 21 0.0 31 2.795 12 2.77555756156289e-16 22 0.0 32 3.0 13 2.77555756156289e-16 23 0.0 33 3.0 70 1 0 3DFACE 8 star_d 10 1.19348975147204e-15 20 0.0 30 2.795 11 0.955527778486358 21 0.955527778486358 31 3.0 12 1.19348975147204e-15 22 0.0 32 1.5 13 1.19348975147204e-15 23 0.0 33 1.5 70 3 0 3DFACE 8 star_d 10 1.19348975147204e-15 20 0.0 30 1.5 11 0.955527778486358 21 0.955527778486358 31 3.0 12 1.19348975147204e-15 22 0.0 32 0.204999999999999 13 1.19348975147204e-15 23 0.0 33 0.204999999999999 70 3 0 3DFACE 8 star_d 10 1.19348975147204e-15 20 0.0 30 0.204999999999999 11 0.955527778486358 21 0.955527778486358 31 3.0 12 1.19348975147204e-15 22 0.0 32 -1.16573417585641e-15 13 1.19348975147204e-15 23 0.0 33 -1.16573417585641e-15 70 3 0 3DFACE 8 star_d 10 1.19348975147204e-15 20 0.0 30 -1.16573417585641e-15 11 0.955527778486358 21 0.955527778486358 31 3.0 12 0.955527778486359 22 0.955527778486358 32 1.20736753927986e-15 13 0.955527778486359 23 0.955527778486358 33 1.20736753927986e-15 70 3 0 3DFACE 8 star_d 10 0.955527778486359 20 0.955527778486358 30 1.20736753927986e-15 11 0.955527778486358 21 0.955527778486358 31 3.0 12 0.955527778486359 22 0.955527778486358 32 1.5 13 0.955527778486359 23 0.955527778486358 33 1.5 70 1 0 3DFACE 8 star_d 10 3.0 20 0.0 30 1.19348975147204e-15 11 2.04447222151364 21 0.955527778486358 31 1.5 12 2.04447222151364 22 0.955527778486358 32 -1.11022302462516e-16 13 2.04447222151364 23 0.955527778486358 33 -1.11022302462516e-16 70 1 0 3DFACE 8 star_d 10 2.04447222151364 20 0.955527778486358 30 1.5 11 3.0 21 0.0 31 1.19348975147204e-15 12 3.0 22 0.0 32 3.0 13 3.0 23 0.0 33 3.0 70 13 0 3DFACE 8 star_d 10 2.04447222151364 20 0.955527778486358 30 1.5 11 3.0 21 0.0 31 3.0 12 2.04447222151364 22 0.955527778486358 32 3.0 13 2.04447222151364 23 0.955527778486358 33 3.0 70 1 0 3DFACE 8 star_d 10 2.12132034355964 20 1.11022302462516e-16 30 -6.80011602582908e-16 11 2.12132034355964 21 5.55111512312578e-17 31 0.826320343559641 12 2.12132034355964 22 5.55111512312578e-17 32 0.204999999999999 13 2.12132034355964 23 5.55111512312578e-17 33 0.204999999999999 70 1 0 3DFACE 8 star_d 10 2.12132034355964 20 5.55111512312578e-17 30 0.826320343559641 11 2.12132034355964 21 1.11022302462516e-16 31 -6.80011602582908e-16 12 2.12132034355964 22 5.55111512312578e-17 32 2.17367965644036 13 2.12132034355964 23 5.55111512312578e-17 33 2.17367965644036 70 3 0 3DFACE 8 star_d 10 2.12132034355964 20 5.55111512312578e-17 30 2.17367965644036 11 2.12132034355964 21 1.11022302462516e-16 31 -6.80011602582908e-16 12 2.12132034355964 22 5.55111512312578e-17 32 2.795 13 2.12132034355964 23 5.55111512312578e-17 33 2.795 70 3 0 3DFACE 8 star_d 10 2.12132034355964 20 5.55111512312578e-17 30 2.795 11 2.12132034355964 21 1.11022302462516e-16 31 -6.80011602582908e-16 12 2.12132034355964 22 1.11022302462516e-16 32 3.0 13 2.12132034355964 23 1.11022302462516e-16 33 3.0 70 3 0 3DFACE 8 star_d 10 2.12132034355964 20 1.11022302462516e-16 30 3.0 11 2.12132034355964 21 1.11022302462516e-16 31 -6.80011602582908e-16 12 1.79466624292112 22 0.788612759966309 32 -1.38777878078145e-16 13 1.79466624292112 23 0.788612759966309 33 -1.38777878078145e-16 70 13 0 3DFACE 8 star_d 10 2.12132034355964 20 1.11022302462516e-16 30 3.0 11 1.79466624292112 21 0.788612759966309 31 -1.38777878078145e-16 12 1.79466624292112 22 0.788612759966309 32 3.0 13 1.79466624292112 23 0.788612759966309 33 3.0 70 3 0 3DFACE 8 star_d 10 1.79466624292112 20 0.788612759966309 30 3.0 11 1.79466624292112 21 0.788612759966309 31 -1.38777878078145e-16 12 1.79466624292112 22 0.788612759966309 32 1.5 13 1.79466624292112 23 0.788612759966309 33 1.5 70 1 0 3DFACE 8 star_d 10 2.26629223953759 20 1.42452680194624 30 -1.11022302462516e-16 11 2.25520466591049 21 1.34978045204758 31 1.5 12 2.25520466591049 22 1.34978045204758 32 -1.2490009027033e-15 13 2.25520466591049 23 1.34978045204758 33 -1.2490009027033e-15 70 1 0 3DFACE 8 star_d 10 2.25520466591049 20 1.34978045204758 30 1.5 11 2.26629223953759 21 1.42452680194624 31 -1.11022302462516e-16 12 2.26629223953759 22 1.42452680194624 32 1.5 13 2.26629223953759 23 1.42452680194624 33 1.5 70 1 0 3DFACE 8 star_d 10 2.27 20 1.5 30 -2.35922392732846e-16 11 2.26629223953759 21 1.42452680194624 31 1.5 12 2.26629223953759 22 1.42452680194624 32 -1.11022302462516e-16 13 2.26629223953759 23 1.42452680194624 33 -1.11022302462516e-16 70 1 0 3DFACE 8 star_d 10 2.26629223953759 20 1.42452680194624 30 1.5 11 2.27 21 1.5 31 -2.35922392732846e-16 12 2.27 22 1.5 32 1.5 13 2.27 23 1.5 33 1.5 70 1 0 3DFACE 8 star_d 10 2.25520466591049 20 1.34978045204758 30 -1.2490009027033e-15 11 2.2368440585138 21 1.27648079851406 31 1.5 12 2.2368440585138 22 1.27648079851406 32 -1.06858966120171e-15 13 2.2368440585138 23 1.27648079851406 33 -1.06858966120171e-15 70 1 0 3DFACE 8 star_d 10 2.2368440585138 20 1.27648079851406 30 1.5 11 2.25520466591049 21 1.34978045204758 31 -1.2490009027033e-15 12 2.25520466591049 22 1.34978045204758 32 1.5 13 2.25520466591049 23 1.34978045204758 33 1.5 70 1 0 3DFACE 8 star_d 10 2.04447222151364 20 0.955527778486358 30 1.5 11 2.21138724003369 21 1.20533375707888 31 1.5 12 1.5 22 1.5 32 1.5 13 1.5 23 1.5 33 1.5 70 1 0 3DFACE 8 star_d 10 2.21138724003369 20 1.20533375707888 30 1.5 11 2.04447222151364 21 0.955527778486358 31 1.5 12 2.09521804908931 22 1.01151717119399 32 1.5 13 2.09521804908931 23 1.01151717119399 33 1.5 70 13 0 3DFACE 8 star_d 10 2.21138724003369 20 1.20533375707888 30 1.5 11 2.09521804908931 21 1.01151717119399 31 1.5 12 2.14023160147296 22 1.07221092057491 32 1.5 13 2.14023160147296 23 1.07221092057491 33 1.5 70 13 0 3DFACE 8 star_d 10 2.21138724003369 20 1.20533375707888 30 1.5 11 2.14023160147296 21 1.07221092057491 31 1.5 12 2.17907937354823 22 1.13702451264398 32 1.5 13 2.17907937354823 23 1.13702451264398 33 1.5 70 1 0 3DFACE 8 star_d 10 0.73370776046241 20 1.42452680194624 30 1.5 11 0.744795334089513 21 1.34978045204758 31 3.0 12 0.744795334089513 22 1.34978045204758 32 1.5 13 0.744795334089513 23 1.34978045204758 33 1.5 70 1 0 3DFACE 8 star_d 10 0.744795334089513 20 1.34978045204758 30 3.0 11 0.73370776046241 21 1.42452680194624 31 1.5 12 0.733707760462408 22 1.42452680194624 32 3.0 13 0.733707760462408 23 1.42452680194624 33 3.0 70 1 0 3DFACE 8 star_d 10 0.820920626451766 20 1.13702451264398 30 1.5 11 0.859768398527041 21 1.07221092057491 31 8.74300631892311e-16 12 0.859768398527041 22 1.07221092057491 32 1.5 13 0.859768398527041 23 1.07221092057491 33 1.5 70 1 0 3DFACE 8 star_d 10 0.859768398527041 20 1.07221092057491 30 8.74300631892311e-16 11 0.820920626451766 21 1.13702451264398 31 1.5 12 0.820920626451768 22 1.13702451264398 32 1.65145674912992e-15 13 0.820920626451768 23 1.13702451264398 33 1.65145674912992e-15 70 1 0 3DFACE 8 star_d 10 0.878679656440357 20 3.0 30 3.0 11 1.20533375707888 21 2.21138724003369 31 1.5 12 1.20533375707888 22 2.21138724003369 32 3.0 13 1.20533375707888 23 2.21138724003369 33 3.0 70 1 0 3DFACE 8 star_d 10 1.20533375707888 20 2.21138724003369 30 1.5 11 0.878679656440357 21 3.0 31 3.0 12 1.20533375707888 22 2.21138724003369 32 -5.68989300120393e-16 13 1.20533375707888 23 2.21138724003369 33 -5.68989300120393e-16 70 3 0 3DFACE 8 star_d 10 1.20533375707888 20 2.21138724003369 30 -5.68989300120393e-16 11 0.878679656440357 21 3.0 31 3.0 12 0.878679656440358 22 3.0 32 9.29811783123569e-16 13 0.878679656440358 23 3.0 33 9.29811783123569e-16 70 3 0 3DFACE 8 star_d 10 0.878679656440358 20 3.0 30 9.29811783123569e-16 11 0.878679656440357 21 3.0 31 3.0 12 0.878679656440357 22 3.0 32 2.795 13 0.878679656440357 23 3.0 33 2.795 70 13 0 3DFACE 8 star_d 10 0.878679656440358 20 3.0 30 9.29811783123569e-16 11 0.878679656440357 21 3.0 31 2.795 12 0.878679656440357 22 3.0 32 2.17367965644036 13 0.878679656440357 23 3.0 33 2.17367965644036 70 13 0 3DFACE 8 star_d 10 0.878679656440358 20 3.0 30 9.29811783123569e-16 11 0.878679656440357 21 3.0 31 2.17367965644036 12 0.878679656440358 22 3.0 32 0.826320343559643 13 0.878679656440358 23 3.0 33 0.826320343559643 70 13 0 3DFACE 8 star_d 10 0.878679656440358 20 3.0 30 9.29811783123569e-16 11 0.878679656440358 21 3.0 31 0.826320343559643 12 0.878679656440358 22 3.0 32 0.204999999999999 13 0.878679656440358 23 3.0 33 0.204999999999999 70 1 0 3DFACE 8 star_d 10 2.21138724003369 20 1.20533375707888 30 1.5 11 3.0 21 0.878679656440356 31 1.19348975147204e-15 12 2.21138724003369 22 1.20533375707888 32 -6.66133814775094e-16 13 2.21138724003369 23 1.20533375707888 33 -6.66133814775094e-16 70 1 0 3DFACE 8 star_d 10 3.0 20 0.878679656440356 30 1.19348975147204e-15 11 2.21138724003369 21 1.20533375707888 31 1.5 12 3.0 22 0.878679656440356 32 3.0 13 3.0 23 0.878679656440356 33 3.0 70 3 0 3DFACE 8 star_d 10 3.0 20 0.878679656440356 30 3.0 11 2.21138724003369 21 1.20533375707888 31 1.5 12 2.21138724003369 22 1.20533375707888 32 3.0 13 2.21138724003369 23 1.20533375707888 33 3.0 70 1 0 3DFACE 8 star_d 10 3.0 20 1.5 30 1.19348975147204e-15 11 2.27 21 1.5 31 1.5 12 2.27 22 1.5 32 -2.35922392732846e-16 13 2.27 23 1.5 33 -2.35922392732846e-16 70 1 0 3DFACE 8 star_d 10 2.27 20 1.5 30 1.5 11 3.0 21 1.5 31 1.19348975147204e-15 12 3.0 22 1.5 32 3.0 13 3.0 23 1.5 33 3.0 70 13 0 3DFACE 8 star_d 10 2.27 20 1.5 30 1.5 11 3.0 21 1.5 31 3.0 12 2.27 22 1.5 32 3.0 13 2.27 23 1.5 33 3.0 70 1 0 3DFACE 8 star_d 10 0.78861275996631 20 1.20533375707888 30 2.77555756156289e-17 11 2.77555756156289e-16 21 0.878679656440358 31 3.0 12 1.19348975147204e-15 22 0.878679656440358 32 -1.16573417585641e-15 13 1.19348975147204e-15 23 0.878679656440358 33 -1.16573417585641e-15 70 1 0 3DFACE 8 star_d 10 2.77555756156289e-16 20 0.878679656440358 30 3.0 11 0.78861275996631 21 1.20533375707888 31 2.77555756156289e-17 12 0.788612759966309 22 1.20533375707888 32 1.5 13 0.788612759966309 23 1.20533375707888 33 1.5 70 13 0 3DFACE 8 star_d 10 2.77555756156289e-16 20 0.878679656440358 30 3.0 11 0.788612759966309 21 1.20533375707888 31 1.5 12 0.788612759966309 22 1.20533375707888 32 3.0 13 0.788612759966309 23 1.20533375707888 33 3.0 70 1 0 3DFACE 8 star_d 10 1.01151717119399 20 0.904781950910693 30 3.0 11 1.07221092057491 21 0.85976839852704 31 1.5 12 1.01151717119399 22 0.904781950910693 32 1.5 13 1.01151717119399 23 0.904781950910693 33 1.5 70 1 0 3DFACE 8 star_d 10 1.07221092057491 20 0.85976839852704 30 1.5 11 1.01151717119399 21 0.904781950910693 31 3.0 12 1.07221092057491 22 0.85976839852704 32 3.0 13 1.07221092057491 23 0.85976839852704 33 3.0 70 1 0 3DFACE 8 star_d 10 2.17907937354823 20 1.86297548735602 30 -1.2490009027033e-16 11 2.21138724003369 21 1.79466624292112 31 1.5 12 2.21138724003369 22 1.79466624292112 32 -6.66133814775094e-16 13 2.21138724003369 23 1.79466624292112 33 -6.66133814775094e-16 70 1 0 3DFACE 8 star_d 10 2.21138724003369 20 1.79466624292112 30 1.5 11 2.17907937354823 21 1.86297548735602 31 -1.2490009027033e-16 12 2.17907937354823 22 1.86297548735602 32 1.5 13 2.17907937354823 23 1.86297548735602 33 1.5 70 1 0 3DFACE 8 star_d 10 1.98848282880601 20 0.904781950910692 30 -1.66533453693773e-16 11 1.92778907942509 21 0.85976839852704 31 1.5 12 1.92778907942509 22 0.85976839852704 32 -1.02695629777827e-15 13 1.92778907942509 23 0.85976839852704 33 -1.02695629777827e-15 70 1 0 3DFACE 8 star_d 10 1.92778907942509 20 0.85976839852704 30 1.5 11 1.98848282880601 21 0.904781950910692 31 -1.66533453693773e-16 12 1.98848282880601 22 0.904781950910692 32 1.5 13 1.98848282880601 23 0.904781950910692 33 1.5 70 1 0 3DFACE 8 star_d 10 1.27648079851406 20 2.2368440585138 30 3.0 11 1.20533375707888 21 2.21138724003369 31 1.5 12 1.27648079851406 22 2.2368440585138 32 1.5 13 1.27648079851406 23 2.2368440585138 33 1.5 70 1 0 3DFACE 8 star_d 10 1.20533375707888 20 2.21138724003369 30 1.5 11 1.27648079851406 21 2.2368440585138 31 3.0 12 1.20533375707888 22 2.21138724003369 32 3.0 13 1.20533375707888 23 2.21138724003369 33 3.0 70 1 0 3DFACE 8 star_d 10 0.744795334089513 20 1.34978045204758 30 1.5 11 0.763155941486199 21 1.27648079851406 31 3.0 12 0.763155941486199 22 1.27648079851406 32 1.5 13 0.763155941486199 23 1.27648079851406 33 1.5 70 1 0 3DFACE 8 star_d 10 0.763155941486199 20 1.27648079851406 30 3.0 11 0.744795334089513 21 1.34978045204758 31 1.5 12 0.744795334089513 22 1.34978045204758 32 3.0 13 0.744795334089513 23 1.34978045204758 33 3.0 70 1 0 3DFACE 8 star_d 10 1.72351920148594 20 0.763155941486199 30 3.0 11 1.79466624292112 21 0.788612759966309 31 1.5 12 1.72351920148594 22 0.763155941486199 32 1.5 13 1.72351920148594 23 0.763155941486199 33 1.5 70 1 0 3DFACE 8 star_d 10 1.79466624292112 20 0.788612759966309 30 1.5 11 1.72351920148594 21 0.763155941486199 31 3.0 12 1.79466624292112 22 0.788612759966309 32 3.0 13 1.79466624292112 23 0.788612759966309 33 3.0 70 1 0 3DFACE 8 star_d 10 2.04447222151364 20 2.04447222151364 30 3.0 11 1.98848282880601 21 2.09521804908931 31 1.5 12 2.04447222151364 22 2.04447222151364 32 1.5 13 2.04447222151364 23 2.04447222151364 33 1.5 70 1 0 3DFACE 8 star_d 10 1.98848282880601 20 2.09521804908931 30 1.5 11 2.04447222151364 21 2.04447222151364 31 3.0 12 1.98848282880601 22 2.09521804908931 32 3.0 13 1.98848282880601 23 2.09521804908931 33 3.0 70 1 0 3DFACE 8 star_d 10 1.65021954795242 20 0.744795334089513 30 3.0 11 1.72351920148594 21 0.763155941486199 31 1.5 12 1.65021954795242 22 0.744795334089513 32 1.5 13 1.65021954795242 23 0.744795334089513 33 1.5 70 1 0 3DFACE 8 star_d 10 1.72351920148594 20 0.763155941486199 30 1.5 11 1.65021954795242 21 0.744795334089513 31 3.0 12 1.72351920148594 22 0.763155941486199 32 3.0 13 1.72351920148594 23 0.763155941486199 33 3.0 70 1 0 3DFACE 8 star_d 10 1.57547319805376 20 0.733707760462408 30 1.5 11 1.65021954795242 21 0.744795334089513 31 3.0 12 1.65021954795242 22 0.744795334089513 32 1.5 13 1.65021954795242 23 0.744795334089513 33 1.5 70 1 0 3DFACE 8 star_d 10 1.65021954795242 20 0.744795334089513 30 3.0 11 1.57547319805376 21 0.733707760462408 31 1.5 12 1.57547319805376 22 0.733707760462408 32 3.0 13 1.57547319805376 23 0.733707760462408 33 3.0 70 1 0 3DFACE 8 star_d 10 1.5 20 2.27 30 1.5 11 1.42452680194624 21 2.26629223953759 31 3.0 12 1.42452680194624 22 2.26629223953759 32 1.5 13 1.42452680194624 23 2.26629223953759 33 1.5 70 1 0 3DFACE 8 star_d 10 1.42452680194624 20 2.26629223953759 30 3.0 11 1.5 21 2.27 31 1.5 12 1.5 22 2.27 32 3.0 13 1.5 23 2.27 33 3.0 70 1 0 3DFACE 8 star_d 10 1.34978045204758 20 2.25520466591049 30 3.0 11 1.27648079851406 21 2.2368440585138 31 1.5 12 1.34978045204758 22 2.25520466591049 32 1.5 13 1.34978045204758 23 2.25520466591049 33 1.5 70 1 0 3DFACE 8 star_d 10 1.27648079851406 20 2.2368440585138 30 1.5 11 1.34978045204758 21 2.25520466591049 31 3.0 12 1.27648079851406 22 2.2368440585138 32 3.0 13 1.27648079851406 23 2.2368440585138 33 3.0 70 1 0 3DFACE 8 star_d 10 0.729999999999999 20 1.5 30 1.5 11 0.733707760462408 21 1.42452680194624 31 3.0 12 0.73370776046241 22 1.42452680194624 32 1.5 13 0.73370776046241 23 1.42452680194624 33 1.5 70 1 0 3DFACE 8 star_d 10 0.733707760462408 20 1.42452680194624 30 3.0 11 0.729999999999999 21 1.5 31 1.5 12 0.73 22 1.5 32 3.0 13 0.73 23 1.5 33 3.0 70 1 0 3DFACE 8 star_d 10 2.25520466591049 20 1.65021954795242 30 3.0 11 2.26629223953759 21 1.57547319805376 31 1.5 12 2.26629223953759 22 1.57547319805376 32 3.0 13 2.26629223953759 23 1.57547319805376 33 3.0 70 1 0 3DFACE 8 star_d 10 2.26629223953759 20 1.57547319805376 30 1.5 11 2.25520466591049 21 1.65021954795242 31 3.0 12 2.25520466591049 22 1.65021954795242 32 1.5 13 2.25520466591049 23 1.65021954795242 33 1.5 70 1 0 3DFACE 8 star_d 10 1.42452680194624 20 0.733707760462408 30 1.5 11 1.34978045204758 21 0.744795334089513 31 -4.02455846426619e-16 12 1.42452680194624 22 0.733707760462408 32 -6.93889390390723e-16 13 1.42452680194624 23 0.733707760462408 33 -6.93889390390723e-16 70 1 0 3DFACE 8 star_d 10 1.34978045204758 20 0.744795334089513 30 -4.02455846426619e-16 11 1.42452680194624 21 0.733707760462408 31 1.5 12 1.34978045204758 22 0.744795334089513 32 1.5 13 1.34978045204758 23 0.744795334089513 33 1.5 70 1 0 3DFACE 8 star_d 10 2.21138724003369 20 1.20533375707888 30 3.0 11 2.17907937354823 21 1.13702451264398 31 1.5 12 2.17907937354823 22 1.13702451264398 32 3.0 13 2.17907937354823 23 1.13702451264398 33 3.0 70 1 0 3DFACE 8 star_d 10 2.17907937354823 20 1.13702451264398 30 1.5 11 2.21138724003369 21 1.20533375707888 31 3.0 12 2.21138724003369 22 1.20533375707888 32 1.5 13 2.21138724003369 23 1.20533375707888 33 1.5 70 1 0 3DFACE 8 star_d 10 1.5 20 0.73 30 3.0 11 1.57547319805376 21 0.733707760462408 31 1.5 12 1.5 22 0.73 32 1.5 13 1.5 23 0.73 33 1.5 70 1 0 3DFACE 8 star_d 10 1.57547319805376 20 0.733707760462408 30 1.5 11 1.5 21 0.73 31 3.0 12 1.57547319805376 22 0.733707760462408 32 3.0 13 1.57547319805376 23 0.733707760462408 33 3.0 70 1 0 LINE 8 star_d 10 1.19348975147204e-15 20 0.878679656440358 30 -1.16573417585641e-15 11 -0.00250198874351172 21 0.87764329876989 31 -1.47104550762833e-15 0 3DFACE 8 star_d 10 2.04447222151364 20 0.955527778486358 30 -1.11022302462516e-16 11 1.98848282880601 21 0.904781950910692 31 1.5 12 1.98848282880601 22 0.904781950910692 32 -1.66533453693773e-16 13 1.98848282880601 23 0.904781950910692 33 -1.66533453693773e-16 70 1 0 3DFACE 8 star_d 10 1.98848282880601 20 0.904781950910692 30 1.5 11 2.04447222151364 21 0.955527778486358 31 -1.11022302462516e-16 12 2.04447222151364 22 0.955527778486358 32 1.5 13 2.04447222151364 23 0.955527778486358 33 1.5 70 1 0 3DFACE 8 star_d 10 1.5 20 0.73 30 6.93889390390723e-16 11 1.42452680194624 21 0.733707760462408 31 1.5 12 1.42452680194624 22 0.733707760462408 32 -6.93889390390723e-16 13 1.42452680194624 23 0.733707760462408 33 -6.93889390390723e-16 70 1 0 3DFACE 8 star_d 10 1.42452680194624 20 0.733707760462408 30 1.5 11 1.5 21 0.73 31 6.93889390390723e-16 12 1.5 22 0.73 32 1.5 13 1.5 23 0.73 33 1.5 70 1 0 3DFACE 8 star_d 10 0.744795334089513 20 1.65021954795242 30 1.5 11 0.733707760462409 21 1.57547319805376 31 4.16333634234434e-16 12 0.73370776046241 22 1.57547319805376 32 1.5 13 0.73370776046241 23 1.57547319805376 33 1.5 70 1 0 3DFACE 8 star_d 10 0.733707760462409 20 1.57547319805376 30 4.16333634234434e-16 11 0.744795334089513 21 1.65021954795242 31 1.5 12 0.744795334089513 22 1.65021954795242 32 4.71844785465692e-16 13 0.744795334089513 23 1.65021954795242 33 4.71844785465692e-16 70 1 0 3DFACE 8 star_d 10 0.78861275996631 20 1.79466624292112 30 1.5 11 0.7631559414862 21 1.72351920148594 31 -2.77555756156289e-17 12 0.763155941486199 22 1.72351920148594 32 1.5 13 0.763155941486199 23 1.72351920148594 33 1.5 70 1 0 3DFACE 8 star_d 10 0.7631559414862 20 1.72351920148594 30 -2.77555756156289e-17 11 0.78861275996631 21 1.79466624292112 31 1.5 12 0.78861275996631 22 1.79466624292112 32 2.77555756156289e-17 13 0.78861275996631 23 1.79466624292112 33 2.77555756156289e-17 70 1 0 3DFACE 8 star_d 10 1.34978045204758 20 0.744795334089513 30 1.5 11 1.27648079851406 21 0.763155941486199 31 1.1518563880486e-15 12 1.34978045204758 22 0.744795334089513 32 -4.02455846426619e-16 13 1.34978045204758 23 0.744795334089513 33 -4.02455846426619e-16 70 1 0 3DFACE 8 star_d 10 1.27648079851406 20 0.763155941486199 30 1.1518563880486e-15 11 1.34978045204758 21 0.744795334089513 31 1.5 12 1.27648079851406 22 0.763155941486199 32 1.5 13 1.27648079851406 23 0.763155941486199 33 1.5 70 1 0 3DFACE 8 star_d 10 2.04447222151364 20 2.04447222151364 30 -1.11022302462516e-16 11 2.09521804908931 21 1.98848282880601 31 1.5 12 2.09521804908931 22 1.98848282880601 32 7.63278329429795e-16 13 2.09521804908931 23 1.98848282880601 33 7.63278329429795e-16 70 1 0 3DFACE 8 star_d 10 2.09521804908931 20 1.98848282880601 30 1.5 11 2.04447222151364 21 2.04447222151364 31 -1.11022302462516e-16 12 2.04447222151364 22 2.04447222151364 32 1.5 13 2.04447222151364 23 2.04447222151364 33 1.5 70 1 0 LINE 8 star_d 10 0.878679656440356 20 0.0 30 -7.35522753814166e-16 11 0.878127111942354 21 -0.0013339604208924 31 1.42941214420489e-15 0 3DFACE 8 star_d 10 0.904781950910694 20 1.01151717119399 30 1.5 11 0.955527778486359 21 0.955527778486358 31 1.20736753927986e-15 12 0.955527778486359 22 0.955527778486358 32 1.5 13 0.955527778486359 23 0.955527778486358 33 1.5 70 1 0 3DFACE 8 star_d 10 0.955527778486359 20 0.955527778486358 30 1.20736753927986e-15 11 0.904781950910694 21 1.01151717119399 31 1.5 12 0.904781950910692 22 1.01151717119399 32 1.31838984174237e-15 13 0.904781950910692 23 1.01151717119399 33 1.31838984174237e-15 70 1 0 3DFACE 8 star_d 10 1.65021954795242 20 2.25520466591049 30 -3.60822483003176e-16 11 1.72351920148594 21 2.2368440585138 31 1.5 12 1.72351920148594 22 2.2368440585138 32 -5.27355936696949e-16 13 1.72351920148594 23 2.2368440585138 33 -5.27355936696949e-16 70 1 0 3DFACE 8 star_d 10 1.72351920148594 20 2.2368440585138 30 1.5 11 1.65021954795242 21 2.25520466591049 31 -3.60822483003176e-16 12 1.65021954795242 22 2.25520466591049 32 1.5 13 1.65021954795242 23 2.25520466591049 33 1.5 70 1 0 3DFACE 8 star_d 10 0.73370776046241 20 1.57547319805376 30 1.5 11 0.73 21 1.5 31 7.07767178198537e-16 12 0.729999999999999 22 1.5 32 1.5 13 0.729999999999999 23 1.5 33 1.5 70 1 0 3DFACE 8 star_d 10 0.73 20 1.5 30 7.07767178198537e-16 11 0.73370776046241 21 1.57547319805376 31 1.5 12 0.733707760462409 22 1.57547319805376 32 4.16333634234434e-16 13 0.733707760462409 23 1.57547319805376 33 4.16333634234434e-16 70 1 0 3DFACE 8 star_d 10 3.0 20 3.0 30 1.19348975147204e-15 11 2.04447222151364 21 2.04447222151364 31 1.5 12 2.04447222151364 22 2.04447222151364 32 -1.11022302462516e-16 13 2.04447222151364 23 2.04447222151364 33 -1.11022302462516e-16 70 1 0 3DFACE 8 star_d 10 2.04447222151364 20 2.04447222151364 30 1.5 11 3.0 21 3.0 31 1.19348975147204e-15 12 3.0 22 3.0 32 0.204999999999999 13 3.0 23 3.0 33 0.204999999999999 70 13 0 3DFACE 8 star_d 10 2.04447222151364 20 2.04447222151364 30 1.5 11 3.0 21 3.0 31 0.204999999999999 12 3.0 22 3.0 32 1.5 13 3.0 23 3.0 33 1.5 70 13 0 3DFACE 8 star_d 10 2.04447222151364 20 2.04447222151364 30 1.5 11 3.0 21 3.0 31 1.5 12 3.0 22 3.0 32 2.795 13 3.0 23 3.0 33 2.795 70 13 0 3DFACE 8 star_d 10 2.04447222151364 20 2.04447222151364 30 1.5 11 3.0 21 3.0 31 2.795 12 2.04447222151364 22 2.04447222151364 32 3.0 13 2.04447222151364 23 2.04447222151364 33 3.0 70 3 0 3DFACE 8 star_d 10 2.04447222151364 20 2.04447222151364 30 3.0 11 3.0 21 3.0 31 2.795 12 3.0 22 3.0 32 3.0 13 3.0 23 3.0 33 3.0 70 1 0 3DFACE 8 star_d 10 2.14023160147296 20 1.92778907942509 30 -9.71445146547012e-16 11 2.17907937354823 21 1.86297548735602 31 1.5 12 2.17907937354823 22 1.86297548735602 32 -1.2490009027033e-16 13 2.17907937354823 23 1.86297548735602 33 -1.2490009027033e-16 70 1 0 3DFACE 8 star_d 10 2.17907937354823 20 1.86297548735602 30 1.5 11 2.14023160147296 21 1.92778907942509 31 -9.71445146547012e-16 12 2.14023160147296 22 1.92778907942509 32 1.5 13 2.14023160147296 23 1.92778907942509 33 1.5 70 1 0 3DFACE 8 star_d 10 2.2368440585138 20 1.27648079851406 30 -1.06858966120171e-15 11 2.21138724003369 21 1.20533375707888 31 1.5 12 2.21138724003369 22 1.20533375707888 32 -6.66133814775094e-16 13 2.21138724003369 23 1.20533375707888 33 -6.66133814775094e-16 70 1 0 3DFACE 8 star_d 10 2.21138724003369 20 1.20533375707888 30 1.5 11 2.2368440585138 21 1.27648079851406 31 -1.06858966120171e-15 12 2.2368440585138 22 1.27648079851406 32 1.5 13 2.2368440585138 23 1.27648079851406 33 1.5 70 1 0 3DFACE 8 star_d 10 2.77555756156289e-16 20 1.5 30 3.0 11 0.73 21 1.5 31 7.07767178198537e-16 12 1.19348975147204e-15 22 1.5 32 -1.16573417585641e-15 13 1.19348975147204e-15 23 1.5 33 -1.16573417585641e-15 70 1 0 3DFACE 8 star_d 10 0.73 20 1.5 30 7.07767178198537e-16 11 2.77555756156289e-16 21 1.5 31 3.0 12 0.729999999999999 22 1.5 32 1.5 13 0.729999999999999 23 1.5 33 1.5 70 3 0 3DFACE 8 star_d 10 0.729999999999999 20 1.5 30 1.5 11 2.77555756156289e-16 21 1.5 31 3.0 12 0.73 22 1.5 32 3.0 13 0.73 23 1.5 33 3.0 70 1 0 3DFACE 8 star_d 10 1.07221092057491 20 0.85976839852704 30 3.0 11 1.13702451264398 21 0.820920626451767 31 1.5 12 1.07221092057491 22 0.85976839852704 32 1.5 13 1.07221092057491 23 0.85976839852704 33 1.5 70 1 0 3DFACE 8 star_d 10 1.13702451264398 20 0.820920626451767 30 1.5 11 1.07221092057491 21 0.85976839852704 31 3.0 12 1.13702451264398 22 0.820920626451767 32 3.0 13 1.13702451264398 23 0.820920626451767 33 3.0 70 1 0 3DFACE 8 star_d 10 0.763155941486199 20 1.27648079851406 30 1.5 11 0.788612759966309 21 1.20533375707888 31 3.0 12 0.788612759966309 22 1.20533375707888 32 1.5 13 0.788612759966309 23 1.20533375707888 33 1.5 70 1 0 3DFACE 8 star_d 10 0.788612759966309 20 1.20533375707888 30 3.0 11 0.763155941486199 21 1.27648079851406 31 1.5 12 0.763155941486199 22 1.27648079851406 32 3.0 13 0.763155941486199 23 1.27648079851406 33 3.0 70 1 0 3DFACE 8 star_d 10 0.904781950910694 20 1.98848282880601 30 1.5 11 0.859768398527041 21 1.92778907942509 31 3.0 12 0.859768398527041 22 1.92778907942509 32 1.5 13 0.859768398527041 23 1.92778907942509 33 1.5 70 1 0 3DFACE 8 star_d 10 0.859768398527041 20 1.92778907942509 30 3.0 11 0.904781950910694 21 1.98848282880601 31 1.5 12 0.904781950910692 22 1.98848282880601 32 3.0 13 0.904781950910692 23 1.98848282880601 33 3.0 70 1 0 3DFACE 8 star_d 10 1.20533375707888 20 0.788612759966309 30 2.63677968348475e-16 11 0.878679656440356 21 0.0 31 0.204999999999999 12 0.878679656440356 22 0.0 32 -7.35522753814166e-16 13 0.878679656440356 23 0.0 33 -7.35522753814166e-16 70 1 0 3DFACE 8 star_d 10 0.878679656440356 20 0.0 30 0.204999999999999 11 1.20533375707888 21 0.788612759966309 31 2.63677968348475e-16 12 0.878679656440356 22 0.0 32 0.826320343559644 13 0.878679656440356 23 0.0 33 0.826320343559644 70 3 0 3DFACE 8 star_d 10 0.878679656440356 20 0.0 30 0.826320343559644 11 1.20533375707888 21 0.788612759966309 31 2.63677968348475e-16 12 0.878679656440356 22 0.0 32 2.17367965644035 13 0.878679656440356 23 0.0 33 2.17367965644035 70 3 0 3DFACE 8 star_d 10 0.878679656440356 20 0.0 30 2.17367965644035 11 1.20533375707888 21 0.788612759966309 31 2.63677968348475e-16 12 0.878679656440356 22 0.0 32 2.795 13 0.878679656440356 23 0.0 33 2.795 70 3 0 3DFACE 8 star_d 10 0.878679656440356 20 0.0 30 2.795 11 1.20533375707888 21 0.788612759966309 31 2.63677968348475e-16 12 0.878679656440356 22 0.0 32 3.0 13 0.878679656440356 23 0.0 33 3.0 70 3 0 3DFACE 8 star_d 10 0.878679656440356 20 0.0 30 3.0 11 1.20533375707888 21 0.788612759966309 31 2.63677968348475e-16 12 1.20533375707888 22 0.788612759966309 32 3.0 13 1.20533375707888 23 0.788612759966309 33 3.0 70 3 0 3DFACE 8 star_d 10 1.20533375707888 20 0.788612759966309 30 3.0 11 1.20533375707888 21 0.788612759966309 31 2.63677968348475e-16 12 1.20533375707888 22 0.788612759966309 32 1.5 13 1.20533375707888 23 0.788612759966309 33 1.5 70 1 0 3DFACE 8 star_d 10 1.33226762955019e-15 20 1.20163144893051 30 1.19348975147204e-15 11 0.78861275996631 21 1.20533375707888 31 2.77555756156289e-17 12 1.19348975147204e-15 22 0.878679656440358 32 -1.16573417585641e-15 13 1.19348975147204e-15 23 0.878679656440358 33 -1.16573417585641e-15 70 1 0 3DFACE 8 star_d 10 0.78861275996631 20 1.20533375707888 30 2.77555756156289e-17 11 1.33226762955019e-15 21 1.20163144893051 31 1.19348975147204e-15 12 0.7631559414862 22 1.27648079851406 32 -2.77555756156289e-17 13 0.7631559414862 23 1.27648079851406 33 -2.77555756156289e-17 70 3 0 3DFACE 8 star_d 10 0.7631559414862 20 1.27648079851406 30 -2.77555756156289e-17 11 1.33226762955019e-15 21 1.20163144893051 31 1.19348975147204e-15 12 0.744795334089513 22 1.34978045204758 32 4.71844785465692e-16 13 0.744795334089513 23 1.34978045204758 33 4.71844785465692e-16 70 1 0 3DFACE 8 star_d 10 2.04447222151364 20 2.04447222151364 30 -1.11022302462516e-16 11 2.14023160147296 21 1.92778907942509 31 -9.71445146547012e-16 12 1.5 22 1.5 32 1.19348975147204e-15 13 1.5 23 1.5 33 1.19348975147204e-15 70 1 0 3DFACE 8 star_d 10 2.14023160147296 20 1.92778907942509 30 -9.71445146547012e-16 11 2.04447222151364 21 2.04447222151364 31 -1.11022302462516e-16 12 2.09521804908931 22 1.98848282880601 32 7.63278329429795e-16 13 2.09521804908931 23 1.98848282880601 33 7.63278329429795e-16 70 1 0 3DFACE 8 star_d 10 2.14023160147296 20 1.92778907942509 30 -9.71445146547012e-16 11 2.21138724003369 21 1.79466624292112 31 -6.66133814775094e-16 12 1.5 22 1.5 32 1.19348975147204e-15 13 1.5 23 1.5 33 1.19348975147204e-15 70 1 0 3DFACE 8 star_d 10 2.21138724003369 20 1.79466624292112 30 -6.66133814775094e-16 11 2.14023160147296 21 1.92778907942509 31 -9.71445146547012e-16 12 2.17907937354823 22 1.86297548735602 32 -1.2490009027033e-16 13 2.17907937354823 23 1.86297548735602 33 -1.2490009027033e-16 70 1 0 3DFACE 8 star_d 10 1.07221092057491 20 0.85976839852704 30 -1.38777878078145e-17 11 0.878679656440356 21 0.0 31 -7.35522753814166e-16 12 0.497732043121054 22 0.0 32 1.19348975147204e-15 13 0.497732043121054 23 0.0 33 1.19348975147204e-15 70 1 0 3DFACE 8 star_d 10 0.878679656440356 20 0.0 30 -7.35522753814166e-16 11 1.07221092057491 21 0.85976839852704 31 -1.38777878078145e-17 12 1.13702451264398 22 0.820920626451767 32 8.18789480661053e-16 13 1.13702451264398 23 0.820920626451767 33 8.18789480661053e-16 70 13 0 3DFACE 8 star_d 10 0.878679656440356 20 0.0 30 -7.35522753814166e-16 11 1.13702451264398 21 0.820920626451767 31 8.18789480661053e-16 12 1.20533375707888 22 0.788612759966309 32 2.63677968348475e-16 13 1.20533375707888 23 0.788612759966309 33 2.63677968348475e-16 70 1 0 3DFACE 8 star_d 10 2.17907937354823 20 1.13702451264398 30 -1.2490009027033e-16 11 3.0 21 0.497732043121051 31 1.19348975147204e-15 12 2.14023160147296 22 1.07221092057491 32 -9.71445146547012e-16 13 2.14023160147296 23 1.07221092057491 33 -9.71445146547012e-16 70 1 0 3DFACE 8 star_d 10 3.0 20 0.497732043121051 30 1.19348975147204e-15 11 2.17907937354823 21 1.13702451264398 31 -1.2490009027033e-16 12 2.21138724003369 22 1.20533375707888 32 -6.66133814775094e-16 13 2.21138724003369 23 1.20533375707888 33 -6.66133814775094e-16 70 13 0 3DFACE 8 star_d 10 3.0 20 0.497732043121051 30 1.19348975147204e-15 11 2.21138724003369 21 1.20533375707888 31 -6.66133814775094e-16 12 3.0 22 0.878679656440356 32 1.19348975147204e-15 13 3.0 23 0.878679656440356 33 1.19348975147204e-15 70 1 0 3DFACE 8 star_d 10 1.92778907942509 20 0.85976839852704 30 -1.02695629777827e-15 11 1.79466624292112 21 0.788612759966309 31 -1.38777878078145e-16 12 1.5 22 1.5 32 1.19348975147204e-15 13 1.5 23 1.5 33 1.19348975147204e-15 70 1 0 3DFACE 8 star_d 10 1.79466624292112 20 0.788612759966309 30 -1.38777878078145e-16 11 1.92778907942509 21 0.85976839852704 31 -1.02695629777827e-15 12 1.86297548735602 22 0.820920626451767 32 1.58206781009085e-15 13 1.86297548735602 23 0.820920626451767 33 1.58206781009085e-15 70 1 0 3DFACE 8 star_d 10 1.79466624292112 20 0.788612759966309 30 -1.38777878078145e-16 11 1.65021954795242 21 0.744795334089513 31 -3.60822483003176e-16 12 1.5 22 1.5 32 1.19348975147204e-15 13 1.5 23 1.5 33 1.19348975147204e-15 70 1 0 3DFACE 8 star_d 10 1.65021954795242 20 0.744795334089513 30 -3.60822483003176e-16 11 1.79466624292112 21 0.788612759966309 31 -1.38777878078145e-16 12 1.72351920148594 22 0.763155941486199 32 -5.27355936696949e-16 13 1.72351920148594 23 0.763155941486199 33 -5.27355936696949e-16 70 1 0 3DFACE 8 star_d 10 2.25520466591049 20 1.34978045204758 30 -1.2490009027033e-15 11 2.21138724003369 21 1.20533375707888 31 -6.66133814775094e-16 12 1.5 22 1.5 32 1.19348975147204e-15 13 1.5 23 1.5 33 1.19348975147204e-15 70 1 0 3DFACE 8 star_d 10 2.21138724003369 20 1.20533375707888 30 -6.66133814775094e-16 11 2.25520466591049 21 1.34978045204758 31 -1.2490009027033e-15 12 2.2368440585138 22 1.27648079851406 32 -1.06858966120171e-15 13 2.2368440585138 23 1.27648079851406 33 -1.06858966120171e-15 70 1 0 3DFACE 8 star_d 10 0.820920626451768 20 1.86297548735602 30 1.65145674912992e-15 11 1.5 21 1.5 31 1.19348975147204e-15 12 0.78861275996631 22 1.79466624292112 32 2.77555756156289e-17 13 0.78861275996631 23 1.79466624292112 33 2.77555756156289e-17 70 1 0 3DFACE 8 star_d 10 1.5 20 1.5 30 1.19348975147204e-15 11 0.820920626451768 21 1.86297548735602 31 1.65145674912992e-15 12 0.859768398527041 22 1.92778907942509 32 8.74300631892311e-16 13 0.859768398527041 23 1.92778907942509 33 8.74300631892311e-16 70 1 0 3DFACE 8 star_d 10 0.904781950910692 20 1.98848282880601 30 1.31838984174237e-15 11 1.5 21 1.5 31 1.19348975147204e-15 12 0.859768398527041 22 1.92778907942509 32 8.74300631892311e-16 13 0.859768398527041 23 1.92778907942509 33 8.74300631892311e-16 70 1 0 3DFACE 8 star_d 10 1.5 20 1.5 30 1.19348975147204e-15 11 0.904781950910692 21 1.98848282880601 31 1.31838984174237e-15 12 0.955527778486359 22 2.04447222151364 32 1.20736753927986e-15 13 0.955527778486359 23 2.04447222151364 33 1.20736753927986e-15 70 1 0 3DFACE 8 star_d 10 0.7631559414862 20 1.72351920148594 30 -2.77555756156289e-17 11 1.5 21 1.5 31 1.19348975147204e-15 12 0.744795334089513 22 1.65021954795242 32 4.71844785465692e-16 13 0.744795334089513 23 1.65021954795242 33 4.71844785465692e-16 70 1 0 3DFACE 8 star_d 10 1.5 20 1.5 30 1.19348975147204e-15 11 0.7631559414862 21 1.72351920148594 31 -2.77555756156289e-17 12 0.78861275996631 22 1.79466624292112 32 2.77555756156289e-17 13 0.78861275996631 23 1.79466624292112 33 2.77555756156289e-17 70 1 0 3DFACE 8 star_d 10 1.79466624292112 20 2.21138724003369 30 -1.4432899320127e-15 11 1.92778907942509 21 2.14023160147296 31 -1.02695629777827e-15 12 1.5 22 1.5 32 1.19348975147204e-15 13 1.5 23 1.5 33 1.19348975147204e-15 70 1 0 3DFACE 8 star_d 10 1.92778907942509 20 2.14023160147296 30 -1.02695629777827e-15 11 1.79466624292112 21 2.21138724003369 31 -1.4432899320127e-15 12 1.86297548735602 22 2.17907937354823 32 1.58206781009085e-15 13 1.86297548735602 23 2.17907937354823 33 1.58206781009085e-15 70 1 0 3DFACE 8 star_d 10 1.65021954795242 20 2.25520466591049 30 -3.60822483003176e-16 11 1.79466624292112 21 2.21138724003369 31 -1.4432899320127e-15 12 1.5 22 1.5 32 1.19348975147204e-15 13 1.5 23 1.5 33 1.19348975147204e-15 70 1 0 3DFACE 8 star_d 10 1.79466624292112 20 2.21138724003369 30 -1.4432899320127e-15 11 1.65021954795242 21 2.25520466591049 31 -3.60822483003176e-16 12 1.72351920148594 22 2.2368440585138 32 -5.27355936696949e-16 13 1.72351920148594 23 2.2368440585138 33 -5.27355936696949e-16 70 1 0 3DFACE 8 star_d 10 1.72351920148594 20 0.763155941486199 30 -5.27355936696949e-16 11 1.79836855106949 21 5.55111512312578e-17 31 1.19348975147204e-15 12 1.65021954795242 22 0.744795334089513 32 -3.60822483003176e-16 13 1.65021954795242 23 0.744795334089513 33 -3.60822483003176e-16 70 1 0 3DFACE 8 star_d 10 1.79836855106949 20 5.55111512312578e-17 30 1.19348975147204e-15 11 1.72351920148594 21 0.763155941486199 31 -5.27355936696949e-16 12 1.79466624292112 22 0.788612759966309 32 -1.38777878078145e-16 13 1.79466624292112 23 0.788612759966309 33 -1.38777878078145e-16 70 13 0 3DFACE 8 star_d 10 1.79836855106949 20 5.55111512312578e-17 30 1.19348975147204e-15 11 1.79466624292112 21 0.788612759966309 31 -1.38777878078145e-16 12 2.12132034355964 22 1.11022302462516e-16 32 -6.80011602582908e-16 13 2.12132034355964 23 1.11022302462516e-16 33 -6.80011602582908e-16 70 1 0 3DFACE 8 star_d 10 2.21138724003369 20 1.79466624292112 30 -6.66133814775094e-16 11 2.25520466591049 21 1.65021954795242 31 -1.2490009027033e-15 12 1.5 22 1.5 32 1.19348975147204e-15 13 1.5 23 1.5 33 1.19348975147204e-15 70 1 0 3DFACE 8 star_d 10 2.25520466591049 20 1.65021954795242 30 -1.2490009027033e-15 11 2.21138724003369 21 1.79466624292112 31 -6.66133814775094e-16 12 2.2368440585138 22 1.72351920148594 32 -1.06858966120171e-15 13 2.2368440585138 23 1.72351920148594 33 -1.06858966120171e-15 70 1 0 3DFACE 8 star_d 10 2.25520466591049 20 1.65021954795242 30 -1.2490009027033e-15 11 2.27 21 1.5 31 -2.35922392732846e-16 12 1.5 22 1.5 32 1.19348975147204e-15 13 1.5 23 1.5 33 1.19348975147204e-15 70 1 0 3DFACE 8 star_d 10 2.27 20 1.5 30 -2.35922392732846e-16 11 2.25520466591049 21 1.65021954795242 31 -1.2490009027033e-15 12 2.26629223953759 22 1.57547319805376 32 -1.11022302462516e-16 13 2.26629223953759 23 1.57547319805376 33 -1.11022302462516e-16 70 1 0 3DFACE 8 star_d 10 1.5 20 1.5 30 1.19348975147204e-15 11 1.01151717119399 21 0.904781950910693 31 6.38378239159465e-16 12 0.955527778486359 22 0.955527778486358 32 1.20736753927986e-15 13 0.955527778486359 23 0.955527778486358 33 1.20736753927986e-15 70 1 0 3DFACE 8 star_d 10 1.01151717119399 20 0.904781950910693 30 6.38378239159465e-16 11 1.5 21 1.5 31 1.19348975147204e-15 12 1.07221092057491 22 0.85976839852704 32 -1.38777878078145e-17 13 1.07221092057491 23 0.85976839852704 33 -1.38777878078145e-17 70 1 0 3DFACE 8 star_d 10 1.5 20 1.5 30 1.19348975147204e-15 11 1.13702451264398 21 0.820920626451767 31 8.18789480661053e-16 12 1.07221092057491 22 0.85976839852704 32 -1.38777878078145e-17 13 1.07221092057491 23 0.85976839852704 33 -1.38777878078145e-17 70 1 0 3DFACE 8 star_d 10 1.13702451264398 20 0.820920626451767 30 8.18789480661053e-16 11 1.5 21 1.5 31 1.19348975147204e-15 12 1.20533375707888 22 0.788612759966309 32 2.63677968348475e-16 13 1.20533375707888 23 0.788612759966309 33 2.63677968348475e-16 70 1 0 3DFACE 8 star_d 10 1.5 20 1.5 30 1.19348975147204e-15 11 0.733707760462409 21 1.42452680194624 31 4.16333634234434e-16 12 0.73 22 1.5 32 7.07767178198537e-16 13 0.73 23 1.5 33 7.07767178198537e-16 70 1 0 3DFACE 8 star_d 10 0.733707760462409 20 1.42452680194624 30 4.16333634234434e-16 11 1.5 21 1.5 31 1.19348975147204e-15 12 0.744795334089513 22 1.34978045204758 32 4.71844785465692e-16 13 0.744795334089513 23 1.34978045204758 33 4.71844785465692e-16 70 1 0 3DFACE 8 star_d 10 1.5 20 1.5 30 1.19348975147204e-15 11 1.27648079851406 21 0.763155941486199 31 1.1518563880486e-15 12 1.20533375707888 22 0.788612759966309 32 2.63677968348475e-16 13 1.20533375707888 23 0.788612759966309 33 2.63677968348475e-16 70 1 0 3DFACE 8 star_d 10 1.27648079851406 20 0.763155941486199 30 1.1518563880486e-15 11 1.5 21 1.5 31 1.19348975147204e-15 12 1.34978045204758 22 0.744795334089513 32 -4.02455846426619e-16 13 1.34978045204758 23 0.744795334089513 33 -4.02455846426619e-16 70 1 0 3DFACE 8 star_d 10 1.5 20 1.5 30 1.19348975147204e-15 11 0.7631559414862 21 1.27648079851406 31 -2.77555756156289e-17 12 0.744795334089513 22 1.34978045204758 32 4.71844785465692e-16 13 0.744795334089513 23 1.34978045204758 33 4.71844785465692e-16 70 1 0 3DFACE 8 star_d 10 0.7631559414862 20 1.27648079851406 30 -2.77555756156289e-17 11 1.5 21 1.5 31 1.19348975147204e-15 12 0.78861275996631 22 1.20533375707888 32 2.77555756156289e-17 13 0.78861275996631 23 1.20533375707888 33 2.77555756156289e-17 70 1 0 3DFACE 8 star_d 10 0.733707760462409 20 1.57547319805376 30 4.16333634234434e-16 11 1.5 21 1.5 31 1.19348975147204e-15 12 0.73 22 1.5 32 7.07767178198537e-16 13 0.73 23 1.5 33 7.07767178198537e-16 70 1 0 3DFACE 8 star_d 10 1.5 20 1.5 30 1.19348975147204e-15 11 0.733707760462409 21 1.57547319805376 31 4.16333634234434e-16 12 0.744795334089513 22 1.65021954795242 32 4.71844785465692e-16 13 0.744795334089513 23 1.65021954795242 33 4.71844785465692e-16 70 1 0 3DFACE 8 star_d 10 1.5 20 1.5 30 1.19348975147204e-15 11 0.820920626451768 21 1.13702451264398 31 1.65145674912992e-15 12 0.78861275996631 22 1.20533375707888 32 2.77555756156289e-17 13 0.78861275996631 23 1.20533375707888 33 2.77555756156289e-17 70 1 0 3DFACE 8 star_d 10 0.820920626451768 20 1.13702451264398 30 1.65145674912992e-15 11 1.5 21 1.5 31 1.19348975147204e-15 12 0.859768398527041 22 1.07221092057491 32 8.74300631892311e-16 13 0.859768398527041 23 1.07221092057491 33 8.74300631892311e-16 70 1 0 3DFACE 8 star_d 10 2.27 20 1.5 30 -2.35922392732846e-16 11 2.25520466591049 21 1.34978045204758 31 -1.2490009027033e-15 12 1.5 22 1.5 32 1.19348975147204e-15 13 1.5 23 1.5 33 1.19348975147204e-15 70 1 0 3DFACE 8 star_d 10 2.25520466591049 20 1.34978045204758 30 -1.2490009027033e-15 11 2.27 21 1.5 31 -2.35922392732846e-16 12 2.26629223953759 22 1.42452680194624 32 -1.11022302462516e-16 13 2.26629223953759 23 1.42452680194624 33 -1.11022302462516e-16 70 1 0 3DFACE 8 star_d 10 2.14023160147296 20 1.07221092057491 30 -9.71445146547012e-16 11 2.04447222151364 21 0.955527778486358 31 -1.11022302462516e-16 12 1.5 22 1.5 32 1.19348975147204e-15 13 1.5 23 1.5 33 1.19348975147204e-15 70 1 0 3DFACE 8 star_d 10 2.04447222151364 20 0.955527778486358 30 -1.11022302462516e-16 11 2.14023160147296 21 1.07221092057491 31 -9.71445146547012e-16 12 2.09521804908931 22 1.01151717119399 32 7.63278329429795e-16 13 2.09521804908931 23 1.01151717119399 33 7.63278329429795e-16 70 1 0 3DFACE 8 star_d 10 1.57547319805376 20 2.26629223953759 30 1.38777878078145e-16 11 1.5 21 1.5 31 1.19348975147204e-15 12 1.5 22 2.27 32 6.93889390390723e-16 13 1.5 23 2.27 33 6.93889390390723e-16 70 1 0 3DFACE 8 star_d 10 1.5 20 1.5 30 1.19348975147204e-15 11 1.57547319805376 21 2.26629223953759 31 1.38777878078145e-16 12 1.65021954795242 22 2.25520466591049 32 -3.60822483003176e-16 13 1.65021954795242 23 2.25520466591049 33 -3.60822483003176e-16 70 1 0 3DFACE 8 star_d 10 1.01151717119399 20 2.09521804908931 30 6.38378239159465e-16 11 1.5 21 1.5 31 1.19348975147204e-15 12 0.955527778486359 22 2.04447222151364 32 1.20736753927986e-15 13 0.955527778486359 23 2.04447222151364 33 1.20736753927986e-15 70 1 0 3DFACE 8 star_d 10 1.5 20 1.5 30 1.19348975147204e-15 11 1.01151717119399 21 2.09521804908931 31 6.38378239159465e-16 12 1.07221092057491 22 2.14023160147296 32 3.19189119579733e-16 13 1.07221092057491 23 2.14023160147296 33 3.19189119579733e-16 70 1 0 3DFACE 8 star_d 10 1.13702451264398 20 2.17907937354823 30 8.18789480661053e-16 11 1.5 21 1.5 31 1.19348975147204e-15 12 1.07221092057491 22 2.14023160147296 32 3.19189119579733e-16 13 1.07221092057491 23 2.14023160147296 33 3.19189119579733e-16 70 1 0 3DFACE 8 star_d 10 1.5 20 1.5 30 1.19348975147204e-15 11 1.13702451264398 21 2.17907937354823 31 8.18789480661053e-16 12 1.20533375707888 22 2.21138724003369 32 -5.68989300120393e-16 13 1.20533375707888 23 2.21138724003369 33 -5.68989300120393e-16 70 1 0 3DFACE 8 star_d 10 2.04447222151364 20 0.955527778486358 30 -1.11022302462516e-16 11 1.92778907942509 21 0.85976839852704 31 -1.02695629777827e-15 12 1.5 22 1.5 32 1.19348975147204e-15 13 1.5 23 1.5 33 1.19348975147204e-15 70 1 0 3DFACE 8 star_d 10 1.92778907942509 20 0.85976839852704 30 -1.02695629777827e-15 11 2.04447222151364 21 0.955527778486358 31 -1.11022302462516e-16 12 1.98848282880601 22 0.904781950910692 32 -1.66533453693773e-16 13 1.98848282880601 23 0.904781950910692 33 -1.66533453693773e-16 70 1 0 3DFACE 8 star_d 10 1.27648079851407 20 2.2368440585138 30 -1.80411241501588e-16 11 1.5 21 1.5 31 1.19348975147204e-15 12 1.20533375707888 22 2.21138724003369 32 -5.68989300120393e-16 13 1.20533375707888 23 2.21138724003369 33 -5.68989300120393e-16 70 1 0 3DFACE 8 star_d 10 1.5 20 1.5 30 1.19348975147204e-15 11 1.27648079851407 21 2.2368440585138 31 -1.80411241501588e-16 12 1.34978045204758 22 2.25520466591049 32 -4.02455846426619e-16 13 1.34978045204758 23 2.25520466591049 33 -4.02455846426619e-16 70 1 0 3DFACE 8 star_d 10 1.42452680194624 20 2.26629223953759 30 -6.93889390390723e-16 11 1.5 21 1.5 31 1.19348975147204e-15 12 1.34978045204758 22 2.25520466591049 32 -4.02455846426619e-16 13 1.34978045204758 23 2.25520466591049 33 -4.02455846426619e-16 70 1 0 3DFACE 8 star_d 10 1.5 20 1.5 30 1.19348975147204e-15 11 1.42452680194624 21 2.26629223953759 31 -6.93889390390723e-16 12 1.5 22 2.27 32 6.93889390390723e-16 13 1.5 23 2.27 33 6.93889390390723e-16 70 1 0 3DFACE 8 star_d 10 2.21138724003369 20 1.20533375707888 30 -6.66133814775094e-16 11 2.14023160147296 21 1.07221092057491 31 -9.71445146547012e-16 12 1.5 22 1.5 32 1.19348975147204e-15 13 1.5 23 1.5 33 1.19348975147204e-15 70 1 0 3DFACE 8 star_d 10 2.14023160147296 20 1.07221092057491 30 -9.71445146547012e-16 11 2.21138724003369 21 1.20533375707888 31 -6.66133814775094e-16 12 2.17907937354823 22 1.13702451264398 32 -1.2490009027033e-16 13 2.17907937354823 23 1.13702451264398 33 -1.2490009027033e-16 70 1 0 3DFACE 8 star_d 10 1.5 20 1.5 30 1.19348975147204e-15 11 0.904781950910692 21 1.01151717119399 31 1.31838984174237e-15 12 0.859768398527041 22 1.07221092057491 32 8.74300631892311e-16 13 0.859768398527041 23 1.07221092057491 33 8.74300631892311e-16 70 1 0 3DFACE 8 star_d 10 0.904781950910692 20 1.01151717119399 30 1.31838984174237e-15 11 1.5 21 1.5 31 1.19348975147204e-15 12 0.955527778486359 22 0.955527778486358 32 1.20736753927986e-15 13 0.955527778486359 23 0.955527778486358 33 1.20736753927986e-15 70 1 0 3DFACE 8 star_d 10 1.5 20 1.5 30 1.19348975147204e-15 11 1.57547319805376 21 0.733707760462408 31 1.38777878078145e-16 12 1.5 22 0.73 32 6.93889390390723e-16 13 1.5 23 0.73 33 6.93889390390723e-16 70 1 0 3DFACE 8 star_d 10 1.57547319805376 20 0.733707760462408 30 1.38777878078145e-16 11 1.5 21 1.5 31 1.19348975147204e-15 12 1.65021954795242 22 0.744795334089513 32 -3.60822483003176e-16 13 1.65021954795242 23 0.744795334089513 33 -3.60822483003176e-16 70 1 0 3DFACE 8 star_d 10 1.20163144893051 20 3.0 30 1.19348975147204e-15 11 1.20533375707888 21 2.21138724003369 31 -5.68989300120393e-16 12 0.878679656440358 22 3.0 32 9.29811783123569e-16 13 0.878679656440358 23 3.0 33 9.29811783123569e-16 70 1 0 3DFACE 8 star_d 10 1.20533375707888 20 2.21138724003369 30 -5.68989300120393e-16 11 1.20163144893051 21 3.0 31 1.19348975147204e-15 12 1.27648079851407 22 2.2368440585138 32 -1.80411241501588e-16 13 1.27648079851407 23 2.2368440585138 33 -1.80411241501588e-16 70 3 0 3DFACE 8 star_d 10 1.27648079851407 20 2.2368440585138 30 -1.80411241501588e-16 11 1.20163144893051 21 3.0 31 1.19348975147204e-15 12 1.34978045204758 22 2.25520466591049 32 -4.02455846426619e-16 13 1.34978045204758 23 2.25520466591049 33 -4.02455846426619e-16 70 1 0 3DFACE 8 star_d 10 1.33226762955019e-15 20 2.50226795687895 30 1.19348975147204e-15 11 0.78861275996631 21 1.79466624292112 31 2.77555756156289e-17 12 1.19348975147204e-15 22 2.12132034355964 32 -1.16573417585641e-15 13 1.19348975147204e-15 23 2.12132034355964 33 -1.16573417585641e-15 70 1 0 3DFACE 8 star_d 10 0.78861275996631 20 1.79466624292112 30 2.77555756156289e-17 11 1.33226762955019e-15 21 2.50226795687895 31 1.19348975147204e-15 12 0.820920626451768 22 1.86297548735602 32 1.65145674912992e-15 13 0.820920626451768 23 1.86297548735602 33 1.65145674912992e-15 70 3 0 3DFACE 8 star_d 10 0.820920626451768 20 1.86297548735602 30 1.65145674912992e-15 11 1.33226762955019e-15 21 2.50226795687895 31 1.19348975147204e-15 12 0.859768398527041 22 1.92778907942509 32 8.74300631892311e-16 13 0.859768398527041 23 1.92778907942509 33 8.74300631892311e-16 70 1 0 3DFACE 8 star_d 10 2.12132034355964 20 3.0 30 -1.56819002228303e-15 11 1.86297548735602 21 2.17907937354823 31 1.58206781009085e-15 12 1.79466624292112 22 2.21138724003369 32 -1.4432899320127e-15 13 1.79466624292112 23 2.21138724003369 33 -1.4432899320127e-15 70 1 0 3DFACE 8 star_d 10 1.86297548735602 20 2.17907937354823 30 1.58206781009085e-15 11 2.12132034355964 21 3.0 31 -1.56819002228303e-15 12 1.92778907942509 22 2.14023160147296 32 -1.02695629777827e-15 13 1.92778907942509 23 2.14023160147296 33 -1.02695629777827e-15 70 3 0 3DFACE 8 star_d 10 1.92778907942509 20 2.14023160147296 30 -1.02695629777827e-15 11 2.12132034355964 21 3.0 31 -1.56819002228303e-15 12 2.50226795687895 22 3.0 32 1.19348975147204e-15 13 2.50226795687895 23 3.0 33 1.19348975147204e-15 70 1 0 3DFACE 8 star_d 10 1.5 20 1.5 30 1.19348975147204e-15 11 1.42452680194624 21 0.733707760462408 31 -6.93889390390723e-16 12 1.34978045204758 22 0.744795334089513 32 -4.02455846426619e-16 13 1.34978045204758 23 0.744795334089513 33 -4.02455846426619e-16 70 1 0 3DFACE 8 star_d 10 1.42452680194624 20 0.733707760462408 30 -6.93889390390723e-16 11 1.5 21 1.5 31 1.19348975147204e-15 12 1.5 22 0.73 32 6.93889390390723e-16 13 1.5 23 0.73 33 6.93889390390723e-16 70 1 0 3DFACE 8 star_d 10 3.0 20 2.12132034355964 30 1.19348975147204e-15 11 2.2368440585138 21 1.72351920148594 31 -1.06858966120171e-15 12 2.21138724003369 22 1.79466624292112 32 -6.66133814775094e-16 13 2.21138724003369 23 1.79466624292112 33 -6.66133814775094e-16 70 1 0 3DFACE 8 star_d 10 2.2368440585138 20 1.72351920148594 30 -1.06858966120171e-15 11 3.0 21 2.12132034355964 31 1.19348975147204e-15 12 2.25520466591049 22 1.65021954795242 32 -1.2490009027033e-15 13 2.25520466591049 23 1.65021954795242 33 -1.2490009027033e-15 70 3 0 3DFACE 8 star_d 10 2.25520466591049 20 1.65021954795242 30 -1.2490009027033e-15 11 3.0 21 2.12132034355964 31 1.19348975147204e-15 12 3.0 22 1.79836855106949 32 1.19348975147204e-15 13 3.0 23 1.79836855106949 33 1.19348975147204e-15 70 1 0 3DFACE 8 star_d 10 2.12132034355964 20 3.0 30 3.0 11 1.79466624292112 21 2.21138724003369 31 1.5 12 1.79466624292112 22 2.21138724003369 32 3.0 13 1.79466624292112 23 2.21138724003369 33 3.0 70 1 0 3DFACE 8 star_d 10 1.79466624292112 20 2.21138724003369 30 1.5 11 2.12132034355964 21 3.0 31 3.0 12 1.79466624292112 22 2.21138724003369 32 -1.4432899320127e-15 13 1.79466624292112 23 2.21138724003369 33 -1.4432899320127e-15 70 3 0 3DFACE 8 star_d 10 1.79466624292112 20 2.21138724003369 30 -1.4432899320127e-15 11 2.12132034355964 21 3.0 31 3.0 12 2.12132034355964 22 3.0 32 -1.56819002228303e-15 13 2.12132034355964 23 3.0 33 -1.56819002228303e-15 70 3 0 3DFACE 8 star_d 10 2.12132034355964 20 3.0 30 -1.56819002228303e-15 11 2.12132034355964 21 3.0 31 3.0 12 2.12132034355964 22 3.0 32 2.795 13 2.12132034355964 23 3.0 33 2.795 70 13 0 3DFACE 8 star_d 10 2.12132034355964 20 3.0 30 -1.56819002228303e-15 11 2.12132034355964 21 3.0 31 2.795 12 2.12132034355964 22 3.0 32 2.17367965644036 13 2.12132034355964 23 3.0 33 2.17367965644036 70 13 0 3DFACE 8 star_d 10 2.12132034355964 20 3.0 30 -1.56819002228303e-15 11 2.12132034355964 21 3.0 31 2.17367965644036 12 2.12132034355964 22 3.0 32 0.826320343559642 13 2.12132034355964 23 3.0 33 0.826320343559642 70 13 0 3DFACE 8 star_d 10 2.12132034355964 20 3.0 30 -1.56819002228303e-15 11 2.12132034355964 21 3.0 31 0.826320343559642 12 2.12132034355964 22 3.0 32 0.204999999999999 13 2.12132034355964 23 3.0 33 0.204999999999999 70 1 0 3DFACE 8 star_d 10 1.86297548735602 20 2.17907937354823 30 3.0 11 2.12132034355964 21 3.0 31 3.0 12 1.79466624292112 22 2.21138724003369 32 3.0 13 1.79466624292112 23 2.21138724003369 33 3.0 70 1 0 3DFACE 8 star_d 10 2.12132034355964 20 3.0 30 3.0 11 1.86297548735602 21 2.17907937354823 31 3.0 12 1.92778907942509 22 2.14023160147296 32 3.0 13 1.92778907942509 23 2.14023160147296 33 3.0 70 13 0 3DFACE 8 star_d 10 2.12132034355964 20 3.0 30 3.0 11 1.92778907942509 21 2.14023160147296 31 3.0 12 2.50226795687895 22 3.0 32 3.0 13 2.50226795687895 23 3.0 33 3.0 70 1 0 3DFACE 8 star_d 10 0.788612759966309 20 1.79466624292112 30 3.0 11 2.77555756156289e-16 21 2.50226795687895 31 3.0 12 2.77555756156289e-16 22 2.12132034355964 32 3.0 13 2.77555756156289e-16 23 2.12132034355964 33 3.0 70 1 0 3DFACE 8 star_d 10 2.77555756156289e-16 20 2.50226795687895 30 3.0 11 0.788612759966309 21 1.79466624292112 31 3.0 12 0.820920626451767 22 1.86297548735602 32 3.0 13 0.820920626451767 23 1.86297548735602 33 3.0 70 13 0 3DFACE 8 star_d 10 2.77555756156289e-16 20 2.50226795687895 30 3.0 11 0.820920626451767 21 1.86297548735602 31 3.0 12 0.859768398527041 22 1.92778907942509 32 3.0 13 0.859768398527041 23 1.92778907942509 33 3.0 70 1 0 3DFACE 8 star_d 10 1.19348975147204e-15 20 3.0 30 -1.16573417585641e-15 11 0.955527778486359 21 2.04447222151364 31 1.5 12 0.955527778486359 22 2.04447222151364 32 1.20736753927986e-15 13 0.955527778486359 23 2.04447222151364 33 1.20736753927986e-15 70 1 0 3DFACE 8 star_d 10 0.955527778486359 20 2.04447222151364 30 1.5 11 1.19348975147204e-15 21 3.0 31 -1.16573417585641e-15 12 0.955527778486358 22 2.04447222151364 32 3.0 13 0.955527778486358 23 2.04447222151364 33 3.0 70 3 0 3DFACE 8 star_d 10 0.955527778486358 20 2.04447222151364 30 3.0 11 1.19348975147204e-15 21 3.0 31 -1.16573417585641e-15 12 2.77555756156289e-16 22 3.0 32 3.0 13 2.77555756156289e-16 23 3.0 33 3.0 70 1 0 3DFACE 8 star_d 10 0.859768398527041 20 1.92778907942509 30 3.0 11 2.77555756156289e-16 21 3.0 31 3.0 12 2.77555756156289e-16 22 2.50226795687895 32 3.0 13 2.77555756156289e-16 23 2.50226795687895 33 3.0 70 1 0 3DFACE 8 star_d 10 2.77555756156289e-16 20 3.0 30 3.0 11 0.859768398527041 21 1.92778907942509 31 3.0 12 0.904781950910692 22 1.98848282880601 32 3.0 13 0.904781950910692 23 1.98848282880601 33 3.0 70 13 0 3DFACE 8 star_d 10 2.77555756156289e-16 20 3.0 30 3.0 11 0.904781950910692 21 1.98848282880601 31 3.0 12 0.955527778486358 22 2.04447222151364 32 3.0 13 0.955527778486358 23 2.04447222151364 33 3.0 70 1 0 3DFACE 8 star_d 10 1.34978045204758 20 2.25520466591049 30 3.0 11 1.5 21 3.0 31 3.0 12 1.20163144893051 22 3.0 32 3.0 13 1.20163144893051 23 3.0 33 3.0 70 1 0 3DFACE 8 star_d 10 1.5 20 3.0 30 3.0 11 1.34978045204758 21 2.25520466591049 31 3.0 12 1.42452680194624 22 2.26629223953759 32 3.0 13 1.42452680194624 23 2.26629223953759 33 3.0 70 13 0 3DFACE 8 star_d 10 1.5 20 3.0 30 3.0 11 1.42452680194624 21 2.26629223953759 31 3.0 12 1.5 22 2.27 32 3.0 13 1.5 23 2.27 33 3.0 70 1 0 3DFACE 8 star_d 10 2.26629223953759 20 1.57547319805376 30 3.0 11 3.0 21 1.79836855106949 31 3.0 12 2.25520466591049 22 1.65021954795242 32 3.0 13 2.25520466591049 23 1.65021954795242 33 3.0 70 1 0 3DFACE 8 star_d 10 3.0 20 1.79836855106949 30 3.0 11 2.26629223953759 21 1.57547319805376 31 3.0 12 2.27 22 1.5 32 3.0 13 2.27 23 1.5 33 3.0 70 13 0 3DFACE 8 star_d 10 3.0 20 1.79836855106949 30 3.0 11 2.27 21 1.5 31 3.0 12 3.0 22 1.5 32 3.0 13 3.0 23 1.5 33 3.0 70 1 0 3DFACE 8 star_d 10 0.205000000000001 20 0.0 30 3.0 11 0.955527778486358 21 0.955527778486358 31 3.0 12 2.77555756156289e-16 22 0.0 32 3.0 13 2.77555756156289e-16 23 0.0 33 3.0 70 1 0 3DFACE 8 star_d 10 0.955527778486358 20 0.955527778486358 30 3.0 11 0.205000000000001 21 0.0 31 3.0 12 0.497732043121053 22 0.0 32 3.0 13 0.497732043121053 23 0.0 33 3.0 70 13 0 3DFACE 8 star_d 10 0.955527778486358 20 0.955527778486358 30 3.0 11 0.497732043121053 21 0.0 31 3.0 12 1.01151717119399 22 0.904781950910693 32 3.0 13 1.01151717119399 23 0.904781950910693 33 3.0 70 3 0 3DFACE 8 star_d 10 1.01151717119399 20 0.904781950910693 30 3.0 11 0.497732043121053 21 0.0 31 3.0 12 1.07221092057491 22 0.85976839852704 32 3.0 13 1.07221092057491 23 0.85976839852704 33 3.0 70 1 0 3DFACE 8 star_d 10 0.744795334089513 20 1.34978045204758 30 3.0 11 2.77555756156289e-16 21 1.5 31 3.0 12 2.77555756156289e-16 22 1.20163144893051 32 3.0 13 2.77555756156289e-16 23 1.20163144893051 33 3.0 70 1 0 3DFACE 8 star_d 10 2.77555756156289e-16 20 1.5 30 3.0 11 0.744795334089513 21 1.34978045204758 31 3.0 12 0.733707760462408 22 1.42452680194624 32 3.0 13 0.733707760462408 23 1.42452680194624 33 3.0 70 13 0 3DFACE 8 star_d 10 2.77555756156289e-16 20 1.5 30 3.0 11 0.733707760462408 21 1.42452680194624 31 3.0 12 0.73 22 1.5 32 3.0 13 0.73 23 1.5 33 3.0 70 1 0 3DFACE 8 star_d 10 1.98848282880601 20 2.09521804908931 30 3.0 11 2.50226795687895 21 3.0 31 3.0 12 1.92778907942509 22 2.14023160147296 32 3.0 13 1.92778907942509 23 2.14023160147296 33 3.0 70 1 0 3DFACE 8 star_d 10 2.50226795687895 20 3.0 30 3.0 11 1.98848282880601 21 2.09521804908931 31 3.0 12 2.04447222151364 22 2.04447222151364 32 3.0 13 2.04447222151364 23 2.04447222151364 33 3.0 70 13 0 3DFACE 8 star_d 10 2.50226795687895 20 3.0 30 3.0 11 2.04447222151364 21 2.04447222151364 31 3.0 12 3.0 22 3.0 32 3.0 13 3.0 23 3.0 33 3.0 70 13 0 3DFACE 8 star_d 10 2.50226795687895 20 3.0 30 3.0 11 3.0 21 3.0 31 3.0 12 2.795 22 3.0 32 3.0 13 2.795 23 3.0 33 3.0 70 1 0 3DFACE 8 star_d 10 1.79836855106949 20 5.55111512312578e-17 30 3.0 11 1.5 21 0.73 31 3.0 12 1.5 22 0.0 32 3.0 13 1.5 23 0.0 33 3.0 70 1 0 3DFACE 8 star_d 10 1.5 20 0.73 30 3.0 11 1.79836855106949 21 5.55111512312578e-17 31 3.0 12 1.57547319805376 22 0.733707760462408 32 3.0 13 1.57547319805376 23 0.733707760462408 33 3.0 70 3 0 3DFACE 8 star_d 10 1.57547319805376 20 0.733707760462408 30 3.0 11 1.79836855106949 21 5.55111512312578e-17 31 3.0 12 1.65021954795242 22 0.744795334089513 32 3.0 13 1.65021954795242 23 0.744795334089513 33 3.0 70 1 0 3DFACE 8 star_d 10 3.0 20 0.0 30 3.0 11 2.09521804908931 21 1.01151717119399 31 3.0 12 2.04447222151364 22 0.955527778486358 32 3.0 13 2.04447222151364 23 0.955527778486358 33 3.0 70 1 0 3DFACE 8 star_d 10 2.09521804908931 20 1.01151717119399 30 3.0 11 3.0 21 0.0 31 3.0 12 2.14023160147296 22 1.07221092057491 32 3.0 13 2.14023160147296 23 1.07221092057491 33 3.0 70 3 0 3DFACE 8 star_d 10 2.14023160147296 20 1.07221092057491 30 3.0 11 3.0 21 0.0 31 3.0 12 3.0 22 0.497732043121051 32 3.0 13 3.0 23 0.497732043121051 33 3.0 70 1 0 3DFACE 8 star_d 10 2.12132034355964 20 3.0 30 2.17367965644036 11 2.795 21 3.0 31 1.5 12 2.12132034355964 22 3.0 32 0.826320343559642 13 2.12132034355964 23 3.0 33 0.826320343559642 70 0 0 3DFACE 8 star_d 10 2.12132034355964 20 3.0 30 2.17367965644036 11 2.795 21 3.0 31 2.795 12 2.795 22 3.0 32 1.5 13 2.795 23 3.0 33 1.5 70 1 0 3DFACE 8 star_d 10 2.795 20 3.0 30 2.795 11 2.12132034355964 21 3.0 31 2.17367965644036 12 2.12132034355964 22 3.0 32 2.795 13 2.12132034355964 23 3.0 33 2.795 70 1 0 3DFACE 8 star_d 10 2.795 20 3.0 30 0.204999999999999 11 3.0 21 3.0 31 1.19348975147204e-15 12 2.795 22 3.0 32 -1.16573417585641e-15 13 2.795 23 3.0 33 -1.16573417585641e-15 70 1 0 3DFACE 8 star_d 10 3.0 20 3.0 30 1.19348975147204e-15 11 2.795 21 3.0 31 0.204999999999999 12 3.0 22 3.0 32 0.204999999999999 13 3.0 23 3.0 33 0.204999999999999 70 1 0 3DFACE 8 star_d 10 2.12132034355964 20 3.0 30 0.204999999999999 11 2.50226795687895 21 3.0 31 1.19348975147204e-15 12 2.12132034355964 22 3.0 32 -1.56819002228303e-15 13 2.12132034355964 23 3.0 33 -1.56819002228303e-15 70 1 0 3DFACE 8 star_d 10 2.50226795687895 20 3.0 30 1.19348975147204e-15 11 2.795 21 3.0 31 0.204999999999999 12 2.795 22 3.0 32 -1.16573417585641e-15 13 2.795 23 3.0 33 -1.16573417585641e-15 70 1 0 3DFACE 8 star_d 10 2.795 20 3.0 30 0.204999999999999 11 2.50226795687895 21 3.0 31 1.19348975147204e-15 12 2.12132034355964 22 3.0 32 0.204999999999999 13 2.12132034355964 23 3.0 33 0.204999999999999 70 3 0 3DFACE 8 star_d 10 2.795 20 3.0 30 1.5 11 3.0 21 3.0 31 0.204999999999999 12 2.795 22 3.0 32 0.204999999999999 13 2.795 23 3.0 33 0.204999999999999 70 1 0 3DFACE 8 star_d 10 3.0 20 3.0 30 0.204999999999999 11 2.795 21 3.0 31 1.5 12 3.0 22 3.0 32 1.5 13 3.0 23 3.0 33 1.5 70 1 0 3DFACE 8 star_d 10 0.878679656440358 20 3.0 30 0.826320343559643 11 1.5 21 3.0 31 0.204999999999999 12 0.878679656440358 22 3.0 32 0.204999999999999 13 0.878679656440358 23 3.0 33 0.204999999999999 70 0 0 3DFACE 8 star_d 10 1.5 20 3.0 30 2.795 11 0.878679656440357 21 3.0 31 2.17367965644036 12 0.878679656440357 22 3.0 32 2.795 13 0.878679656440357 23 3.0 33 2.795 70 0 0 3DFACE 8 star_d 10 0.878679656440358 20 3.0 30 0.826320343559643 11 1.5 21 3.0 31 2.795 12 1.5 22 3.0 32 0.204999999999999 13 1.5 23 3.0 33 0.204999999999999 70 1 0 3DFACE 8 star_d 10 1.5 20 3.0 30 2.795 11 0.878679656440358 21 3.0 31 0.826320343559643 12 0.878679656440357 22 3.0 32 2.17367965644036 13 0.878679656440357 23 3.0 33 2.17367965644036 70 1 0 3DFACE 8 star_d 10 2.795 20 3.0 30 3.0 11 3.0 21 3.0 31 2.795 12 2.795 22 3.0 32 2.795 13 2.795 23 3.0 33 2.795 70 1 0 3DFACE 8 star_d 10 3.0 20 3.0 30 2.795 11 2.795 21 3.0 31 3.0 12 3.0 22 3.0 32 3.0 13 3.0 23 3.0 33 3.0 70 1 0 3DFACE 8 star_d 10 2.795 20 3.0 30 2.795 11 3.0 21 3.0 31 1.5 12 2.795 22 3.0 32 1.5 13 2.795 23 3.0 33 1.5 70 1 0 3DFACE 8 star_d 10 3.0 20 3.0 30 1.5 11 2.795 21 3.0 31 2.795 12 3.0 22 3.0 32 2.795 13 3.0 23 3.0 33 2.795 70 1 0 3DFACE 8 star_d 10 0.878679656440358 20 3.0 30 0.204999999999999 11 1.20163144893051 21 3.0 31 1.19348975147204e-15 12 0.878679656440358 22 3.0 32 9.29811783123569e-16 13 0.878679656440358 23 3.0 33 9.29811783123569e-16 70 1 0 3DFACE 8 star_d 10 1.20163144893051 20 3.0 30 1.19348975147204e-15 11 1.5 21 3.0 31 0.204999999999999 12 1.5 22 3.0 32 6.93889390390723e-16 13 1.5 23 3.0 33 6.93889390390723e-16 70 1 0 3DFACE 8 star_d 10 1.5 20 3.0 30 0.204999999999999 11 1.20163144893051 21 3.0 31 1.19348975147204e-15 12 0.878679656440358 22 3.0 32 0.204999999999999 13 0.878679656440358 23 3.0 33 0.204999999999999 70 3 0 3DFACE 8 star_d 10 2.12132034355964 20 3.0 30 3.0 11 2.795 21 3.0 31 2.795 12 2.12132034355964 22 3.0 32 2.795 13 2.12132034355964 23 3.0 33 2.795 70 1 0 3DFACE 8 star_d 10 2.795 20 3.0 30 2.795 11 2.12132034355964 21 3.0 31 3.0 12 2.795 22 3.0 32 3.0 13 2.795 23 3.0 33 3.0 70 3 0 3DFACE 8 star_d 10 2.795 20 3.0 30 3.0 11 2.12132034355964 21 3.0 31 3.0 12 2.50226795687895 22 3.0 32 3.0 13 2.50226795687895 23 3.0 33 3.0 70 1 0 3DFACE 8 star_d 10 2.12132034355964 20 5.55111512312578e-17 30 0.204999999999999 11 1.79836855106949 21 5.55111512312578e-17 31 1.19348975147204e-15 12 2.12132034355964 22 1.11022302462516e-16 32 -6.80011602582908e-16 13 2.12132034355964 23 1.11022302462516e-16 33 -6.80011602582908e-16 70 1 0 3DFACE 8 star_d 10 1.79836855106949 20 5.55111512312578e-17 30 1.19348975147204e-15 11 1.5 21 0.0 31 0.204999999999999 12 1.5 22 0.0 32 6.93889390390723e-16 13 1.5 23 0.0 33 6.93889390390723e-16 70 1 0 3DFACE 8 star_d 10 1.5 20 0.0 30 0.204999999999999 11 1.79836855106949 21 5.55111512312578e-17 31 1.19348975147204e-15 12 2.12132034355964 22 5.55111512312578e-17 32 0.204999999999999 13 2.12132034355964 23 5.55111512312578e-17 33 0.204999999999999 70 3 0 3DFACE 8 star_d 10 2.12132034355964 20 1.11022302462516e-16 30 3.0 11 1.5 21 0.0 31 2.795 12 2.12132034355964 22 5.55111512312578e-17 32 2.795 13 2.12132034355964 23 5.55111512312578e-17 33 2.795 70 1 0 3DFACE 8 star_d 10 1.5 20 0.0 30 2.795 11 2.12132034355964 21 1.11022302462516e-16 31 3.0 12 1.79836855106949 22 5.55111512312578e-17 32 3.0 13 1.79836855106949 23 5.55111512312578e-17 33 3.0 70 13 0 3DFACE 8 star_d 10 1.5 20 0.0 30 2.795 11 1.79836855106949 21 5.55111512312578e-17 31 3.0 12 1.5 22 0.0 32 3.0 13 1.5 23 0.0 33 3.0 70 1 0 3DFACE 8 star_d 10 2.12132034355964 20 5.55111512312578e-17 30 0.826320343559641 11 1.5 21 0.0 31 0.204999999999999 12 2.12132034355964 22 5.55111512312578e-17 32 0.204999999999999 13 2.12132034355964 23 5.55111512312578e-17 33 0.204999999999999 70 0 0 3DFACE 8 star_d 10 0.878679656440356 20 0.0 30 2.17367965644035 11 0.205000000000001 21 0.0 31 1.5 12 0.878679656440356 22 0.0 32 0.826320343559644 13 0.878679656440356 23 0.0 33 0.826320343559644 70 0 0 3DFACE 8 star_d 10 0.205000000000001 20 0.0 30 3.0 11 1.19348975147204e-15 21 0.0 31 2.795 12 0.205000000000001 22 0.0 32 2.795 13 0.205000000000001 23 0.0 33 2.795 70 1 0 3DFACE 8 star_d 10 1.19348975147204e-15 20 0.0 30 2.795 11 0.205000000000001 21 0.0 31 3.0 12 2.77555756156289e-16 22 0.0 32 3.0 13 2.77555756156289e-16 23 0.0 33 3.0 70 1 0 3DFACE 8 star_d 10 0.205000000000001 20 0.0 30 1.5 11 1.19348975147204e-15 21 0.0 31 0.204999999999999 12 0.205000000000001 22 0.0 32 0.204999999999999 13 0.205000000000001 23 0.0 33 0.204999999999999 70 1 0 3DFACE 8 star_d 10 1.19348975147204e-15 20 0.0 30 0.204999999999999 11 0.205000000000001 21 0.0 31 1.5 12 1.19348975147204e-15 22 0.0 32 1.5 13 1.19348975147204e-15 23 0.0 33 1.5 70 1 0 3DFACE 8 star_d 10 0.205000000000001 20 0.0 30 0.204999999999999 11 1.19348975147204e-15 21 0.0 31 -1.16573417585641e-15 12 0.205000000000001 22 0.0 32 -1.16573417585641e-15 13 0.205000000000001 23 0.0 33 -1.16573417585641e-15 70 1 0 3DFACE 8 star_d 10 1.19348975147204e-15 20 0.0 30 -1.16573417585641e-15 11 0.205000000000001 21 0.0 31 0.204999999999999 12 1.19348975147204e-15 22 0.0 32 0.204999999999999 13 1.19348975147204e-15 23 0.0 33 0.204999999999999 70 1 0 3DFACE 8 star_d 10 0.878679656440356 20 0.0 30 3.0 11 0.205000000000001 21 0.0 31 2.795 12 0.878679656440356 22 0.0 32 2.795 13 0.878679656440356 23 0.0 33 2.795 70 1 0 3DFACE 8 star_d 10 0.205000000000001 20 0.0 30 2.795 11 0.878679656440356 21 0.0 31 3.0 12 0.205000000000001 22 0.0 32 3.0 13 0.205000000000001 23 0.0 33 3.0 70 3 0 3DFACE 8 star_d 10 0.205000000000001 20 0.0 30 3.0 11 0.878679656440356 21 0.0 31 3.0 12 0.497732043121053 22 0.0 32 3.0 13 0.497732043121053 23 0.0 33 3.0 70 1 0 3DFACE 8 star_d 10 0.878679656440356 20 0.0 30 0.204999999999999 11 0.497732043121054 21 0.0 31 1.19348975147204e-15 12 0.878679656440356 22 0.0 32 -7.35522753814166e-16 13 0.878679656440356 23 0.0 33 -7.35522753814166e-16 70 1 0 3DFACE 8 star_d 10 0.497732043121054 20 0.0 30 1.19348975147204e-15 11 0.205000000000001 21 0.0 31 0.204999999999999 12 0.205000000000001 22 0.0 32 -1.16573417585641e-15 13 0.205000000000001 23 0.0 33 -1.16573417585641e-15 70 1 0 3DFACE 8 star_d 10 0.205000000000001 20 0.0 30 0.204999999999999 11 0.497732043121054 21 0.0 31 1.19348975147204e-15 12 0.878679656440356 22 0.0 32 0.204999999999999 13 0.878679656440356 23 0.0 33 0.204999999999999 70 3 0 3DFACE 8 star_d 10 0.878679656440356 20 0.0 30 2.17367965644035 11 0.205000000000001 21 0.0 31 2.795 12 0.205000000000001 22 0.0 32 1.5 13 0.205000000000001 23 0.0 33 1.5 70 1 0 3DFACE 8 star_d 10 0.205000000000001 20 0.0 30 2.795 11 0.878679656440356 21 0.0 31 2.17367965644035 12 0.878679656440356 22 0.0 32 2.795 13 0.878679656440356 23 0.0 33 2.795 70 1 0 3DFACE 8 star_d 10 0.878679656440356 20 0.0 30 0.826320343559644 11 0.205000000000001 21 0.0 31 0.204999999999999 12 0.878679656440356 22 0.0 32 0.204999999999999 13 0.878679656440356 23 0.0 33 0.204999999999999 70 1 0 3DFACE 8 star_d 10 0.205000000000001 20 0.0 30 0.204999999999999 11 0.878679656440356 21 0.0 31 0.826320343559644 12 0.205000000000001 22 0.0 32 1.5 13 0.205000000000001 23 0.0 33 1.5 70 1 0 3DFACE 8 star_d 10 1.5 20 0.0 30 2.795 11 2.12132034355964 21 5.55111512312578e-17 31 2.17367965644036 12 2.12132034355964 22 5.55111512312578e-17 32 2.795 13 2.12132034355964 23 5.55111512312578e-17 33 2.795 70 0 0 3DFACE 8 star_d 10 1.79466624292112 20 0.788612759966309 30 1.5 11 2.04447222151364 21 0.955527778486358 31 1.5 12 1.5 22 1.5 32 1.5 13 1.5 23 1.5 33 1.5 70 1 0 3DFACE 8 star_d 10 2.04447222151364 20 0.955527778486358 30 1.5 11 1.79466624292112 21 0.788612759966309 31 1.5 12 1.86297548735602 22 0.820920626451767 32 1.5 13 1.86297548735602 23 0.820920626451767 33 1.5 70 13 0 3DFACE 8 star_d 10 2.04447222151364 20 0.955527778486358 30 1.5 11 1.86297548735602 21 0.820920626451767 31 1.5 12 1.92778907942509 22 0.85976839852704 32 1.5 13 1.92778907942509 23 0.85976839852704 33 1.5 70 13 0 3DFACE 8 star_d 10 2.04447222151364 20 0.955527778486358 30 1.5 11 1.92778907942509 21 0.85976839852704 31 1.5 12 1.98848282880601 22 0.904781950910692 32 1.5 13 1.98848282880601 23 0.904781950910692 33 1.5 70 1 0 3DFACE 8 star_d 10 1.5 20 1.5 30 1.19348975147204e-15 11 2.04447222151364 21 0.955527778486358 31 1.5 12 2.04447222151364 22 0.955527778486358 32 -1.11022302462516e-16 13 2.04447222151364 23 0.955527778486358 33 -1.11022302462516e-16 70 1 0 3DFACE 8 star_d 10 2.04447222151364 20 0.955527778486358 30 1.5 11 1.5 21 1.5 31 1.19348975147204e-15 12 1.5 22 1.5 32 1.5 13 1.5 23 1.5 33 1.5 70 3 0 3DFACE 8 star_d 10 1.5 20 1.5 30 1.5 11 1.5 21 1.5 31 1.19348975147204e-15 12 0.955527778486359 22 2.04447222151364 32 1.20736753927986e-15 13 0.955527778486359 23 2.04447222151364 33 1.20736753927986e-15 70 13 0 3DFACE 8 star_d 10 1.5 20 1.5 30 1.5 11 0.955527778486359 21 2.04447222151364 31 1.20736753927986e-15 12 0.955527778486359 22 2.04447222151364 32 1.5 13 0.955527778486359 23 2.04447222151364 33 1.5 70 1 0 3DFACE 8 star_d 10 1.5 20 1.5 30 1.5 11 1.27648079851406 21 2.2368440585138 31 1.5 12 1.20533375707888 22 2.21138724003369 32 1.5 13 1.20533375707888 23 2.21138724003369 33 1.5 70 1 0 3DFACE 8 star_d 10 1.27648079851406 20 2.2368440585138 30 1.5 11 1.5 21 1.5 31 1.5 12 1.34978045204758 22 2.25520466591049 32 1.5 13 1.34978045204758 23 2.25520466591049 33 1.5 70 3 0 3DFACE 8 star_d 10 1.34978045204758 20 2.25520466591049 30 1.5 11 1.5 21 1.5 31 1.5 12 1.42452680194624 22 2.26629223953759 32 1.5 13 1.42452680194624 23 2.26629223953759 33 1.5 70 3 0 3DFACE 8 star_d 10 1.42452680194624 20 2.26629223953759 30 1.5 11 1.5 21 1.5 31 1.5 12 1.5 22 2.27 32 1.5 13 1.5 23 2.27 33 1.5 70 1 0 3DFACE 8 star_d 10 1.5 20 1.5 30 1.5 11 0.820920626451766 21 1.86297548735602 31 1.5 12 0.78861275996631 22 1.79466624292112 32 1.5 13 0.78861275996631 23 1.79466624292112 33 1.5 70 1 0 3DFACE 8 star_d 10 0.820920626451766 20 1.86297548735602 30 1.5 11 1.5 21 1.5 31 1.5 12 0.859768398527041 22 1.92778907942509 32 1.5 13 0.859768398527041 23 1.92778907942509 33 1.5 70 3 0 3DFACE 8 star_d 10 0.859768398527041 20 1.92778907942509 30 1.5 11 1.5 21 1.5 31 1.5 12 0.904781950910694 22 1.98848282880601 32 1.5 13 0.904781950910694 23 1.98848282880601 33 1.5 70 3 0 3DFACE 8 star_d 10 0.904781950910694 20 1.98848282880601 30 1.5 11 1.5 21 1.5 31 1.5 12 0.955527778486359 22 2.04447222151364 32 1.5 13 0.955527778486359 23 2.04447222151364 33 1.5 70 1 0 3DFACE 8 star_d 10 2.21138724003369 20 1.20533375707888 30 1.5 11 1.5 21 1.5 31 1.19348975147204e-15 12 2.21138724003369 22 1.20533375707888 32 -6.66133814775094e-16 13 2.21138724003369 23 1.20533375707888 33 -6.66133814775094e-16 70 1 0 3DFACE 8 star_d 10 1.5 20 1.5 30 1.19348975147204e-15 11 0.78861275996631 21 1.79466624292112 31 1.5 12 0.78861275996631 22 1.79466624292112 32 2.77555756156289e-17 13 0.78861275996631 23 1.79466624292112 33 2.77555756156289e-17 70 1 0 3DFACE 8 star_d 10 0.78861275996631 20 1.79466624292112 30 1.5 11 1.5 21 1.5 31 1.19348975147204e-15 12 2.21138724003369 22 1.20533375707888 32 1.5 13 2.21138724003369 23 1.20533375707888 33 1.5 70 15 0 3DFACE 8 star_d 10 0.78861275996631 20 1.79466624292112 30 1.5 11 2.21138724003369 21 1.20533375707888 31 1.5 12 1.5 22 1.5 32 1.5 13 1.5 23 1.5 33 1.5 70 1 0 3DFACE 8 star_d 10 1.5 20 1.5 30 1.5 11 1.01151717119399 21 2.09521804908931 31 1.5 12 0.955527778486359 22 2.04447222151364 32 1.5 13 0.955527778486359 23 2.04447222151364 33 1.5 70 1 0 3DFACE 8 star_d 10 1.01151717119399 20 2.09521804908931 30 1.5 11 1.5 21 1.5 31 1.5 12 1.07221092057491 22 2.14023160147296 32 1.5 13 1.07221092057491 23 2.14023160147296 33 1.5 70 3 0 3DFACE 8 star_d 10 1.07221092057491 20 2.14023160147296 30 1.5 11 1.5 21 1.5 31 1.5 12 1.13702451264398 22 2.17907937354823 32 1.5 13 1.13702451264398 23 2.17907937354823 33 1.5 70 3 0 3DFACE 8 star_d 10 1.13702451264398 20 2.17907937354823 30 1.5 11 1.5 21 1.5 31 1.5 12 1.20533375707888 22 2.21138724003369 32 1.5 13 1.20533375707888 23 2.21138724003369 33 1.5 70 1 0 3DFACE 8 star_d 10 1.27648079851406 20 0.763155941486199 30 1.5 11 1.5 21 1.5 31 1.5 12 1.20533375707888 22 0.788612759966309 32 1.5 13 1.20533375707888 23 0.788612759966309 33 1.5 70 1 0 3DFACE 8 star_d 10 1.5 20 1.5 30 1.5 11 1.27648079851406 21 0.763155941486199 31 1.5 12 1.34978045204758 22 0.744795334089513 32 1.5 13 1.34978045204758 23 0.744795334089513 33 1.5 70 13 0 3DFACE 8 star_d 10 1.5 20 1.5 30 1.5 11 1.34978045204758 21 0.744795334089513 31 1.5 12 1.42452680194624 22 0.733707760462408 32 1.5 13 1.42452680194624 23 0.733707760462408 33 1.5 70 13 0 3DFACE 8 star_d 10 1.5 20 1.5 30 1.5 11 1.42452680194624 21 0.733707760462408 31 1.5 12 1.5 22 0.73 32 1.5 13 1.5 23 0.73 33 1.5 70 1 0 3DFACE 8 star_d 10 1.5 20 1.5 30 1.19348975147204e-15 11 1.79466624292112 21 0.788612759966309 31 1.5 12 1.79466624292112 22 0.788612759966309 32 -1.38777878078145e-16 13 1.79466624292112 23 0.788612759966309 33 -1.38777878078145e-16 70 1 0 3DFACE 8 star_d 10 1.79466624292112 20 0.788612759966309 30 1.5 11 1.5 21 1.5 31 1.19348975147204e-15 12 1.5 22 1.5 32 1.5 13 1.5 23 1.5 33 1.5 70 3 0 3DFACE 8 star_d 10 1.5 20 1.5 30 1.5 11 1.5 21 1.5 31 1.19348975147204e-15 12 1.20533375707888 22 2.21138724003369 32 -5.68989300120393e-16 13 1.20533375707888 23 2.21138724003369 33 -5.68989300120393e-16 70 13 0 3DFACE 8 star_d 10 1.5 20 1.5 30 1.5 11 1.20533375707888 21 2.21138724003369 31 -5.68989300120393e-16 12 1.20533375707888 22 2.21138724003369 32 1.5 13 1.20533375707888 23 2.21138724003369 33 1.5 70 1 0 3DFACE 8 star_d 10 1.57547319805376 20 0.733707760462408 30 1.5 11 1.5 21 1.5 31 1.5 12 1.5 22 0.73 32 1.5 13 1.5 23 0.73 33 1.5 70 1 0 3DFACE 8 star_d 10 1.5 20 1.5 30 1.5 11 1.57547319805376 21 0.733707760462408 31 1.5 12 1.79466624292112 22 0.788612759966309 32 1.5 13 1.79466624292112 23 0.788612759966309 33 1.5 70 3 0 3DFACE 8 star_d 10 1.79466624292112 20 0.788612759966309 30 1.5 11 1.57547319805376 21 0.733707760462408 31 1.5 12 1.65021954795242 22 0.744795334089513 32 1.5 13 1.65021954795242 23 0.744795334089513 33 1.5 70 13 0 3DFACE 8 star_d 10 1.79466624292112 20 0.788612759966309 30 1.5 11 1.65021954795242 21 0.744795334089513 31 1.5 12 1.72351920148594 22 0.763155941486199 32 1.5 13 1.72351920148594 23 0.763155941486199 33 1.5 70 1 0 3DFACE 8 star_d 10 2.04447222151364 20 2.04447222151364 30 1.5 11 1.79466624292112 21 2.21138724003369 31 1.5 12 1.5 22 1.5 32 1.5 13 1.5 23 1.5 33 1.5 70 1 0 3DFACE 8 star_d 10 1.79466624292112 20 2.21138724003369 30 1.5 11 2.04447222151364 21 2.04447222151364 31 1.5 12 1.86297548735602 22 2.17907937354823 32 1.5 13 1.86297548735602 23 2.17907937354823 33 1.5 70 3 0 3DFACE 8 star_d 10 1.86297548735602 20 2.17907937354823 30 1.5 11 2.04447222151364 21 2.04447222151364 31 1.5 12 1.92778907942509 22 2.14023160147296 32 1.5 13 1.92778907942509 23 2.14023160147296 33 1.5 70 3 0 3DFACE 8 star_d 10 1.92778907942509 20 2.14023160147296 30 1.5 11 2.04447222151364 21 2.04447222151364 31 1.5 12 1.98848282880601 22 2.09521804908931 32 1.5 13 1.98848282880601 23 2.09521804908931 33 1.5 70 1 0 3DFACE 8 star_d 10 1.5 20 1.5 30 1.19348975147204e-15 11 1.5 21 0.73 31 1.5 12 1.5 22 0.73 32 6.93889390390723e-16 13 1.5 23 0.73 33 6.93889390390723e-16 70 1 0 3DFACE 8 star_d 10 1.5 20 0.73 30 1.5 11 1.5 21 1.5 31 1.19348975147204e-15 12 1.5 22 1.5 32 1.5 13 1.5 23 1.5 33 1.5 70 3 0 3DFACE 8 star_d 10 1.5 20 1.5 30 1.5 11 1.5 21 1.5 31 1.19348975147204e-15 12 1.5 22 2.27 32 6.93889390390723e-16 13 1.5 23 2.27 33 6.93889390390723e-16 70 13 0 3DFACE 8 star_d 10 1.5 20 1.5 30 1.5 11 1.5 21 2.27 31 6.93889390390723e-16 12 1.5 22 2.27 32 1.5 13 1.5 23 2.27 33 1.5 70 1 0 3DFACE 8 star_d 10 0.820920626451766 20 1.13702451264398 30 1.5 11 1.5 21 1.5 31 1.5 12 0.788612759966309 22 1.20533375707888 32 1.5 13 0.788612759966309 23 1.20533375707888 33 1.5 70 1 0 3DFACE 8 star_d 10 1.5 20 1.5 30 1.5 11 0.820920626451766 21 1.13702451264398 31 1.5 12 0.859768398527041 22 1.07221092057491 32 1.5 13 0.859768398527041 23 1.07221092057491 33 1.5 70 13 0 3DFACE 8 star_d 10 1.5 20 1.5 30 1.5 11 0.859768398527041 21 1.07221092057491 31 1.5 12 0.904781950910694 22 1.01151717119399 32 1.5 13 0.904781950910694 23 1.01151717119399 33 1.5 70 13 0 3DFACE 8 star_d 10 1.5 20 1.5 30 1.5 11 0.904781950910694 21 1.01151717119399 31 1.5 12 0.955527778486359 22 0.955527778486358 32 1.5 13 0.955527778486359 23 0.955527778486358 33 1.5 70 1 0 3DFACE 8 star_d 10 1.5 20 1.5 30 1.5 11 1.57547319805376 21 2.26629223953759 31 1.5 12 1.5 22 2.27 32 1.5 13 1.5 23 2.27 33 1.5 70 1 0 3DFACE 8 star_d 10 1.57547319805376 20 2.26629223953759 30 1.5 11 1.5 21 1.5 31 1.5 12 1.79466624292112 22 2.21138724003369 32 1.5 13 1.79466624292112 23 2.21138724003369 33 1.5 70 13 0 3DFACE 8 star_d 10 1.57547319805376 20 2.26629223953759 30 1.5 11 1.79466624292112 21 2.21138724003369 31 1.5 12 1.65021954795242 22 2.25520466591049 32 1.5 13 1.65021954795242 23 2.25520466591049 33 1.5 70 3 0 3DFACE 8 star_d 10 1.65021954795242 20 2.25520466591049 30 1.5 11 1.79466624292112 21 2.21138724003369 31 1.5 12 1.72351920148594 22 2.2368440585138 32 1.5 13 1.72351920148594 23 2.2368440585138 33 1.5 70 1 0 3DFACE 8 star_d 10 1.5 20 1.5 30 1.19348975147204e-15 11 1.20533375707888 21 0.788612759966309 31 1.5 12 1.20533375707888 22 0.788612759966309 32 2.63677968348475e-16 13 1.20533375707888 23 0.788612759966309 33 2.63677968348475e-16 70 1 0 3DFACE 8 star_d 10 1.20533375707888 20 0.788612759966309 30 1.5 11 1.5 21 1.5 31 1.19348975147204e-15 12 1.5 22 1.5 32 1.5 13 1.5 23 1.5 33 1.5 70 3 0 3DFACE 8 star_d 10 1.5 20 1.5 30 1.5 11 1.5 21 1.5 31 1.19348975147204e-15 12 1.79466624292112 22 2.21138724003369 32 -1.4432899320127e-15 13 1.79466624292112 23 2.21138724003369 33 -1.4432899320127e-15 70 13 0 3DFACE 8 star_d 10 1.5 20 1.5 30 1.5 11 1.79466624292112 21 2.21138724003369 31 -1.4432899320127e-15 12 1.79466624292112 22 2.21138724003369 32 1.5 13 1.79466624292112 23 2.21138724003369 33 1.5 70 1 0 3DFACE 8 star_d 10 2.27 20 1.5 30 1.5 11 2.21138724003369 21 1.79466624292112 31 1.5 12 1.5 22 1.5 32 1.5 13 1.5 23 1.5 33 1.5 70 1 0 3DFACE 8 star_d 10 2.21138724003369 20 1.79466624292112 30 1.5 11 2.27 21 1.5 31 1.5 12 2.2368440585138 22 1.72351920148594 32 1.5 13 2.2368440585138 23 1.72351920148594 33 1.5 70 3 0 3DFACE 8 star_d 10 2.2368440585138 20 1.72351920148594 30 1.5 11 2.27 21 1.5 31 1.5 12 2.25520466591049 22 1.65021954795242 32 1.5 13 2.25520466591049 23 1.65021954795242 33 1.5 70 3 0 3DFACE 8 star_d 10 2.25520466591049 20 1.65021954795242 30 1.5 11 2.27 21 1.5 31 1.5 12 2.26629223953759 22 1.57547319805376 32 1.5 13 2.26629223953759 23 1.57547319805376 33 1.5 70 1 0 3DFACE 8 star_d 10 1.01151717119399 20 0.904781950910693 30 1.5 11 1.5 21 1.5 31 1.5 12 0.955527778486359 22 0.955527778486358 32 1.5 13 0.955527778486359 23 0.955527778486358 33 1.5 70 1 0 3DFACE 8 star_d 10 1.5 20 1.5 30 1.5 11 1.01151717119399 21 0.904781950910693 31 1.5 12 1.07221092057491 22 0.85976839852704 32 1.5 13 1.07221092057491 23 0.85976839852704 33 1.5 70 13 0 3DFACE 8 star_d 10 1.5 20 1.5 30 1.5 11 1.07221092057491 21 0.85976839852704 31 1.5 12 1.13702451264398 22 0.820920626451767 32 1.5 13 1.13702451264398 23 0.820920626451767 33 1.5 70 13 0 3DFACE 8 star_d 10 1.5 20 1.5 30 1.5 11 1.13702451264398 21 0.820920626451767 31 1.5 12 1.20533375707888 22 0.788612759966309 32 1.5 13 1.20533375707888 23 0.788612759966309 33 1.5 70 1 0 3DFACE 8 star_d 10 2.04447222151364 20 2.04447222151364 30 1.5 11 1.5 21 1.5 31 1.19348975147204e-15 12 2.04447222151364 22 2.04447222151364 32 -1.11022302462516e-16 13 2.04447222151364 23 2.04447222151364 33 -1.11022302462516e-16 70 1 0 3DFACE 8 star_d 10 1.5 20 1.5 30 1.19348975147204e-15 11 2.04447222151364 21 2.04447222151364 31 1.5 12 0.955527778486359 22 0.955527778486358 32 1.20736753927986e-15 13 0.955527778486359 23 0.955527778486358 33 1.20736753927986e-15 70 3 0 3DFACE 8 star_d 10 0.955527778486359 20 0.955527778486358 30 1.20736753927986e-15 11 2.04447222151364 21 2.04447222151364 31 1.5 12 0.955527778486359 22 0.955527778486358 32 1.5 13 0.955527778486359 23 0.955527778486358 33 1.5 70 3 0 3DFACE 8 star_d 10 0.955527778486359 20 0.955527778486358 30 1.5 11 2.04447222151364 21 2.04447222151364 31 1.5 12 1.5 22 1.5 32 1.5 13 1.5 23 1.5 33 1.5 70 1 0 3DFACE 8 star_d 10 1.5 20 1.5 30 1.5 11 0.73370776046241 21 1.57547319805376 31 1.5 12 0.729999999999999 22 1.5 32 1.5 13 0.729999999999999 23 1.5 33 1.5 70 1 0 3DFACE 8 star_d 10 0.73370776046241 20 1.57547319805376 30 1.5 11 1.5 21 1.5 31 1.5 12 0.744795334089513 22 1.65021954795242 32 1.5 13 0.744795334089513 23 1.65021954795242 33 1.5 70 3 0 3DFACE 8 star_d 10 0.744795334089513 20 1.65021954795242 30 1.5 11 1.5 21 1.5 31 1.5 12 0.763155941486199 22 1.72351920148594 32 1.5 13 0.763155941486199 23 1.72351920148594 33 1.5 70 3 0 3DFACE 8 star_d 10 0.763155941486199 20 1.72351920148594 30 1.5 11 1.5 21 1.5 31 1.5 12 0.78861275996631 22 1.79466624292112 32 1.5 13 0.78861275996631 23 1.79466624292112 33 1.5 70 1 0 3DFACE 8 star_d 10 2.21138724003369 20 1.79466624292112 30 1.5 11 2.04447222151364 21 2.04447222151364 31 1.5 12 1.5 22 1.5 32 1.5 13 1.5 23 1.5 33 1.5 70 1 0 3DFACE 8 star_d 10 2.04447222151364 20 2.04447222151364 30 1.5 11 2.21138724003369 21 1.79466624292112 31 1.5 12 2.09521804908931 22 1.98848282880601 32 1.5 13 2.09521804908931 23 1.98848282880601 33 1.5 70 3 0 3DFACE 8 star_d 10 2.09521804908931 20 1.98848282880601 30 1.5 11 2.21138724003369 21 1.79466624292112 31 1.5 12 2.14023160147296 22 1.92778907942509 32 1.5 13 2.14023160147296 23 1.92778907942509 33 1.5 70 3 0 3DFACE 8 star_d 10 2.14023160147296 20 1.92778907942509 30 1.5 11 2.21138724003369 21 1.79466624292112 31 1.5 12 2.17907937354823 22 1.86297548735602 32 1.5 13 2.17907937354823 23 1.86297548735602 33 1.5 70 1 0 3DFACE 8 star_d 10 2.21138724003369 20 1.79466624292112 30 1.5 11 1.5 21 1.5 31 1.19348975147204e-15 12 2.21138724003369 22 1.79466624292112 32 -6.66133814775094e-16 13 2.21138724003369 23 1.79466624292112 33 -6.66133814775094e-16 70 1 0 3DFACE 8 star_d 10 1.5 20 1.5 30 1.19348975147204e-15 11 2.21138724003369 21 1.79466624292112 31 1.5 12 0.788612759966309 22 1.20533375707888 32 1.5 13 0.788612759966309 23 1.20533375707888 33 1.5 70 15 0 3DFACE 8 star_d 10 0.788612759966309 20 1.20533375707888 30 1.5 11 2.21138724003369 21 1.79466624292112 31 1.5 12 1.5 22 1.5 32 1.5 13 1.5 23 1.5 33 1.5 70 1 0 3DFACE 8 star_d 10 0.788612759966309 20 1.20533375707888 30 1.5 11 0.78861275996631 21 1.20533375707888 31 2.77555756156289e-17 12 1.5 22 1.5 32 1.19348975147204e-15 13 1.5 23 1.5 33 1.19348975147204e-15 70 12 0 3DFACE 8 star_d 10 0.73370776046241 20 1.42452680194624 30 1.5 11 1.5 21 1.5 31 1.5 12 0.729999999999999 22 1.5 32 1.5 13 0.729999999999999 23 1.5 33 1.5 70 1 0 3DFACE 8 star_d 10 1.5 20 1.5 30 1.5 11 0.73370776046241 21 1.42452680194624 31 1.5 12 0.744795334089513 22 1.34978045204758 32 1.5 13 0.744795334089513 23 1.34978045204758 33 1.5 70 13 0 3DFACE 8 star_d 10 1.5 20 1.5 30 1.5 11 0.744795334089513 21 1.34978045204758 31 1.5 12 0.763155941486199 22 1.27648079851406 32 1.5 13 0.763155941486199 23 1.27648079851406 33 1.5 70 13 0 3DFACE 8 star_d 10 1.5 20 1.5 30 1.5 11 0.763155941486199 21 1.27648079851406 31 1.5 12 0.788612759966309 22 1.20533375707888 32 1.5 13 0.788612759966309 23 1.20533375707888 33 1.5 70 1 0 3DFACE 8 star_d 10 2.21138724003369 20 1.20533375707888 30 1.5 11 2.27 21 1.5 31 1.5 12 1.5 22 1.5 32 1.5 13 1.5 23 1.5 33 1.5 70 1 0 3DFACE 8 star_d 10 2.27 20 1.5 30 1.5 11 2.21138724003369 21 1.20533375707888 31 1.5 12 2.2368440585138 22 1.27648079851406 32 1.5 13 2.2368440585138 23 1.27648079851406 33 1.5 70 13 0 3DFACE 8 star_d 10 2.27 20 1.5 30 1.5 11 2.2368440585138 21 1.27648079851406 31 1.5 12 2.25520466591049 22 1.34978045204758 32 1.5 13 2.25520466591049 23 1.34978045204758 33 1.5 70 13 0 3DFACE 8 star_d 10 2.27 20 1.5 30 1.5 11 2.25520466591049 21 1.34978045204758 31 1.5 12 2.26629223953759 22 1.42452680194624 32 1.5 13 2.26629223953759 23 1.42452680194624 33 1.5 70 1 0 3DFACE 8 star_d 10 0.729999999999999 20 1.5 30 1.5 11 1.5 21 1.5 31 1.19348975147204e-15 12 0.73 22 1.5 32 7.07767178198537e-16 13 0.73 23 1.5 33 7.07767178198537e-16 70 1 0 3DFACE 8 star_d 10 1.5 20 1.5 30 1.19348975147204e-15 11 0.729999999999999 21 1.5 31 1.5 12 1.5 22 1.5 32 1.5 13 1.5 23 1.5 33 1.5 70 13 0 3DFACE 8 star_d 10 1.5 20 1.5 30 1.19348975147204e-15 11 2.27 21 1.5 31 1.5 12 2.27 22 1.5 32 -2.35922392732846e-16 13 2.27 23 1.5 33 -2.35922392732846e-16 70 1 0 3DFACE 8 star_d 10 2.27 20 1.5 30 1.5 11 1.5 21 1.5 31 1.19348975147204e-15 12 1.5 22 1.5 32 1.5 13 1.5 23 1.5 33 1.5 70 3 0 3DFACE 8 lid_base 10 3.0 20 0.0 30 1.5 11 2.795 21 0.0 31 0.205 12 3.0 22 0.0 32 0.205 13 3.0 23 0.0 33 0.205 70 1 0 3DFACE 8 lid_base 10 2.795 20 0.0 30 0.205 11 3.0 21 0.0 31 1.5 12 2.795 22 0.0 32 1.5 13 2.795 23 0.0 33 1.5 70 1 0 3DFACE 8 lid_base 10 0.205 20 3.0 30 0.205 11 0.205 21 3.0 31 0.0 12 0.0 22 3.0 32 0.0 13 0.0 23 3.0 33 0.0 70 0 0 3DFACE 8 lid_base 10 1.5 20 0.0 30 0.205 11 1.20163144893051 21 1.11022302462516e-16 31 0.0 12 1.5 22 0.0 32 0.0 13 1.5 23 0.0 33 0.0 70 1 0 3DFACE 8 lid_base 10 1.20163144893051 20 1.11022302462516e-16 30 0.0 11 1.5 21 0.0 31 0.205 12 0.878679656440358 22 1.66533453693773e-16 32 0.0 13 0.878679656440358 23 1.66533453693773e-16 33 0.0 70 3 0 3DFACE 8 lid_base 10 0.878679656440358 20 1.66533453693773e-16 30 0.0 11 1.5 21 0.0 31 0.205 12 0.497732043121053 22 0.0 32 0.0 13 0.497732043121053 23 0.0 33 0.0 70 3 0 3DFACE 8 lid_base 10 0.497732043121053 20 0.0 30 0.0 11 1.5 21 0.0 31 0.205 12 0.205 22 0.0 32 0.0 13 0.205 23 0.0 33 0.0 70 3 0 3DFACE 8 lid_base 10 0.205 20 0.0 30 0.0 11 1.5 21 0.0 31 0.205 12 0.205 22 0.0 32 0.205 13 0.205 23 0.0 33 0.205 70 1 0 3DFACE 8 lid_base 10 1.98213889596437 20 2.08748794455568 30 3.0 11 2.50226795687895 21 3.0 31 3.0 12 1.9222333770949 22 2.13191690534993 32 3.0 13 1.9222333770949 23 2.13191690534993 33 3.0 70 1 0 3DFACE 8 lid_base 10 2.50226795687895 20 3.0 30 3.0 11 1.98213889596437 21 2.08748794455568 31 3.0 12 2.03740115370178 22 2.03740115370178 32 3.0 13 2.03740115370178 23 2.03740115370178 33 3.0 70 13 0 3DFACE 8 lid_base 10 2.50226795687895 20 3.0 30 3.0 11 2.03740115370178 21 2.03740115370178 31 3.0 12 3.0 22 3.0 32 3.0 13 3.0 23 3.0 33 3.0 70 13 0 3DFACE 8 lid_base 10 2.50226795687895 20 3.0 30 3.0 11 3.0 21 3.0 31 3.0 12 2.795 22 3.0 32 3.0 13 2.795 23 3.0 33 3.0 70 1 0 3DFACE 8 lid_base 10 3.0 20 3.0 30 0.205 11 3.0 21 2.795 31 1.5 12 3.0 22 2.795 32 0.205 13 3.0 23 2.795 33 0.205 70 1 0 3DFACE 8 lid_base 10 3.0 20 2.795 30 1.5 11 3.0 21 3.0 31 0.205 12 3.0 22 3.0 32 1.5 13 3.0 23 3.0 33 1.5 70 1 0 3DFACE 8 lid_base 10 2.795 20 0.0 30 3.0 11 1.5 21 0.0 31 2.795 12 2.795 22 0.0 32 2.795 13 2.795 23 0.0 33 2.795 70 1 0 3DFACE 8 lid_base 10 1.5 20 0.0 30 2.795 11 2.795 21 0.0 31 3.0 12 1.5 22 0.0 32 3.0 13 1.5 23 0.0 33 3.0 70 3 0 3DFACE 8 lid_base 10 1.5 20 0.0 30 3.0 11 2.795 21 0.0 31 3.0 12 2.50226795687895 22 0.0 32 3.0 13 2.50226795687895 23 0.0 33 3.0 70 13 0 3DFACE 8 lid_base 10 1.5 20 0.0 30 3.0 11 2.50226795687895 21 0.0 31 3.0 12 2.12132034355964 22 0.0 32 3.0 13 2.12132034355964 23 0.0 33 3.0 70 13 0 3DFACE 8 lid_base 10 1.5 20 0.0 30 3.0 11 2.12132034355964 21 0.0 31 3.0 12 1.79836855106949 22 5.55111512312578e-17 32 3.0 13 1.79836855106949 23 5.55111512312578e-17 33 3.0 70 1 0 3DFACE 8 lid_base 10 0.205 20 0.0 30 2.795 11 0.0 21 0.0 31 1.5 12 0.205 22 0.0 32 1.5 13 0.205 23 0.0 33 1.5 70 1 0 3DFACE 8 lid_base 10 0.0 20 0.0 30 1.5 11 0.205 21 0.0 31 2.795 12 0.0 22 0.0 32 2.795 13 0.0 23 0.0 33 2.795 70 1 0 3DFACE 8 lid_base 10 0.0 20 0.205 30 2.795 11 0.0 21 0.0 31 2.795 12 0.0 22 0.0 32 3.0 13 0.0 23 0.0 33 3.0 70 0 0 3DFACE 8 lid_base 10 0.962598846298224 20 0.962598846298224 30 0.0 11 0.205 21 0.0 31 0.0 12 0.0 22 0.0 32 0.0 13 0.0 23 0.0 33 0.0 70 1 0 3DFACE 8 lid_base 10 0.205 20 0.0 30 0.0 11 0.962598846298224 21 0.962598846298224 31 0.0 12 0.497732043121053 22 0.0 32 0.0 13 0.497732043121053 23 0.0 33 0.0 70 3 0 3DFACE 8 lid_base 10 0.497732043121053 20 0.0 30 0.0 11 0.962598846298224 21 0.962598846298224 31 0.0 12 1.01786110403563 22 0.91251205544432 32 0.0 13 1.01786110403563 23 0.91251205544432 33 0.0 70 13 0 3DFACE 8 lid_base 10 0.497732043121053 20 0.0 30 0.0 11 1.01786110403563 21 0.91251205544432 31 0.0 12 1.0777666229051 22 0.868083094650066 32 0.0 13 1.0777666229051 23 0.868083094650066 33 0.0 70 1 0 3DFACE 8 lid_base 10 2.1475 20 0.0 30 2.1475 11 2.545 21 0.25 31 1.5 12 2.795 22 0.0 32 1.5 13 2.795 23 0.0 33 1.5 70 1 0 3DFACE 8 lid_base 10 2.545 20 0.25 30 1.5 11 2.1475 21 0.0 31 2.1475 12 2.0225 22 0.25 32 2.0225 13 2.0225 23 0.25 33 2.0225 70 1 0 3DFACE 8 lid_base 10 2.1475 20 0.0 30 0.8525 11 1.5 21 0.25 31 0.455 12 1.5 22 0.0 32 0.205 13 1.5 23 0.0 33 0.205 70 1 0 3DFACE 8 lid_base 10 1.5 20 0.25 30 0.455 11 2.1475 21 0.0 31 0.8525 12 2.0225 22 0.25 32 0.9775 13 2.0225 23 0.25 33 0.9775 70 1 0 3DFACE 8 lid_base 10 0.9775 20 0.25 30 2.0225 11 1.5 21 0.0 31 2.795 12 0.8525 22 0.0 32 2.1475 13 0.8525 23 0.0 33 2.1475 70 1 0 3DFACE 8 lid_base 10 1.5 20 0.0 30 2.795 11 0.9775 21 0.25 31 2.0225 12 1.5 22 0.25 32 2.545 13 1.5 23 0.25 33 2.545 70 1 0 3DFACE 8 lid_base 10 0.9775 20 0.25 30 0.9775 11 0.205 21 0.0 31 1.5 12 0.8525 22 0.0 32 0.8525 13 0.8525 23 0.0 33 0.8525 70 1 0 3DFACE 8 lid_base 10 0.205 20 0.0 30 1.5 11 0.9775 21 0.25 31 0.9775 12 0.454999999999999 22 0.25 32 1.5 13 0.454999999999999 23 0.25 33 1.5 70 1 0 3DFACE 8 lid_base 10 0.205 20 0.0 30 2.795 11 0.8525 21 0.0 31 2.1475 12 1.5 22 0.0 32 2.795 13 1.5 23 0.0 33 2.795 70 0 0 3DFACE 8 lid_base 10 0.205 20 0.0 30 0.205 11 0.0 21 0.0 31 0.205 12 0.0 22 0.0 32 0.0 13 0.0 23 0.0 33 0.0 70 0 0 3DFACE 8 lid_base 10 2.795 20 0.0 30 0.205 11 3.0 21 0.0 31 0.0 12 3.0 22 0.0 32 0.205 13 3.0 23 0.0 33 0.205 70 0 0 3DFACE 8 lid_base 10 0.205 20 0.0 30 1.5 11 0.205 21 0.0 31 0.205 12 0.8525 22 0.0 32 0.8525 13 0.8525 23 0.0 33 0.8525 70 0 0 3DFACE 8 lid_base 10 0.205 20 0.0 30 0.205 11 0.0 21 0.0 31 1.5 12 0.0 22 0.0 32 0.205 13 0.0 23 0.0 33 0.205 70 1 0 3DFACE 8 lid_base 10 0.0 20 0.0 30 1.5 11 0.205 21 0.0 31 0.205 12 0.205 22 0.0 32 1.5 13 0.205 23 0.0 33 1.5 70 1 0 3DFACE 8 lid_base 10 2.795 20 0.0 30 0.205 11 2.50226795687895 21 0.0 31 0.0 12 2.795 22 0.0 32 0.0 13 2.795 23 0.0 33 0.0 70 1 0 3DFACE 8 lid_base 10 2.50226795687895 20 0.0 30 0.0 11 2.795 21 0.0 31 0.205 12 2.12132034355964 22 0.0 32 0.0 13 2.12132034355964 23 0.0 33 0.0 70 3 0 3DFACE 8 lid_base 10 2.12132034355964 20 0.0 30 0.0 11 2.795 21 0.0 31 0.205 12 1.79836855106949 22 5.55111512312578e-17 32 0.0 13 1.79836855106949 23 5.55111512312578e-17 33 0.0 70 3 0 3DFACE 8 lid_base 10 1.79836855106949 20 5.55111512312578e-17 30 0.0 11 2.795 21 0.0 31 0.205 12 1.5 22 0.0 32 0.0 13 1.5 23 0.0 33 0.0 70 3 0 3DFACE 8 lid_base 10 1.5 20 0.0 30 0.0 11 2.795 21 0.0 31 0.205 12 1.5 22 0.0 32 0.205 13 1.5 23 0.0 33 0.205 70 1 0 3DFACE 8 lid_base 10 2.795 20 0.0 30 1.5 11 2.1475 21 0.0 31 0.8525 12 2.795 22 0.0 32 0.205 13 2.795 23 0.0 33 0.205 70 0 0 3DFACE 8 lid_base 10 2.795 20 0.0 30 3.0 11 2.795 21 0.0 31 2.795 12 3.0 22 0.0 32 3.0 13 3.0 23 0.0 33 3.0 70 0 0 3DFACE 8 lid_base 10 1.5 20 0.0 30 2.795 11 2.1475 21 0.0 31 2.1475 12 2.795 22 0.0 32 2.795 13 2.795 23 0.0 33 2.795 70 0 0 3DFACE 8 lid_base 10 3.0 20 0.0 30 2.795 11 2.795 21 0.0 31 1.5 12 3.0 22 0.0 32 1.5 13 3.0 23 0.0 33 1.5 70 1 0 3DFACE 8 lid_base 10 2.795 20 0.0 30 1.5 11 3.0 21 0.0 31 2.795 12 2.795 22 0.0 32 2.795 13 2.795 23 0.0 33 2.795 70 1 0 3DFACE 8 lid_base 10 1.5 20 0.0 30 3.0 11 0.205 21 0.0 31 2.795 12 1.5 22 0.0 32 2.795 13 1.5 23 0.0 33 2.795 70 1 0 3DFACE 8 lid_base 10 0.205 20 0.0 30 2.795 11 1.5 21 0.0 31 3.0 12 0.205 22 0.0 32 3.0 13 0.205 23 0.0 33 3.0 70 3 0 3DFACE 8 lid_base 10 0.205 20 0.0 30 3.0 11 1.5 21 0.0 31 3.0 12 1.20163144893051 22 1.11022302462516e-16 32 3.0 13 1.20163144893051 23 1.11022302462516e-16 33 3.0 70 13 0 3DFACE 8 lid_base 10 0.205 20 0.0 30 3.0 11 1.20163144893051 21 1.11022302462516e-16 31 3.0 12 0.878679656440358 22 1.66533453693773e-16 32 3.0 13 0.878679656440358 23 1.66533453693773e-16 33 3.0 70 13 0 3DFACE 8 lid_base 10 0.205 20 0.0 30 3.0 11 0.878679656440358 21 1.66533453693773e-16 31 3.0 12 0.497732043121053 22 0.0 32 3.0 13 0.497732043121053 23 0.0 33 3.0 70 1 0 3DFACE 8 lid_base 10 0.0 20 0.0 30 3.0 11 0.205 21 0.0 31 2.795 12 0.205 22 0.0 32 3.0 13 0.205 23 0.0 33 3.0 70 0 0 LINE 8 lid_base 10 1.5 20 1.5 30 0.0 11 2.03740115370178 21 2.03740115370178 31 0.0 0 LINE 8 lid_base 10 1.5 20 1.5 30 0.0 11 1.9222333770949 21 0.868083094650066 31 0.0 0 LINE 8 lid_base 10 1.5 20 1.5 30 0.0 11 0.754603186893545 21 1.35173135526774 31 0.0 0 LINE 8 lid_base 10 1.5 20 1.5 30 0.0 11 1.35173135526774 21 2.24539681310645 31 0.0 0 LINE 8 lid_base 10 1.5 20 1.5 30 0.0 11 0.797851555291422 21 1.79083940859747 31 0.0 0 LINE 8 lid_base 10 2.20214844470858 20 1.20916059140253 30 0.0 11 1.5 21 1.5 31 0.0 0 LINE 8 lid_base 10 0.74 20 1.5 30 0.0 11 1.5 21 1.5 31 0.0 0 LINE 8 lid_base 10 1.5 20 1.5 30 0.0 11 1.64826864473226 21 2.24539681310645 31 0.0 0 LINE 8 lid_base 10 0.962598846298224 20 0.962598846298224 30 0.0 11 1.5 21 1.5 31 0.0 0 LINE 8 lid_base 10 1.5 20 1.5 30 0.0 11 0.754603186893545 21 1.64826864473226 31 0.0 0 LINE 8 lid_base 10 1.5 20 1.5 30 0.0 11 2.13191690534993 21 1.0777666229051 31 0.0 0 LINE 8 lid_base 10 1.5 20 1.5 30 0.0 11 1.79083940859747 21 0.797851555291422 31 0.0 0 LINE 8 lid_base 10 1.5 20 1.5 30 0.0 11 2.24539681310645 21 1.64826864473226 31 0.0 0 LINE 8 lid_base 10 1.5 20 1.5 30 0.0 11 1.9222333770949 21 2.13191690534993 31 0.0 0 LINE 8 lid_base 10 2.03740115370178 20 0.962598846298224 30 0.0 11 1.5 21 1.5 31 0.0 0 LINE 8 lid_base 10 1.5 20 1.5 30 0.0 11 1.20916059140253 21 0.797851555291422 31 0.0 0 LINE 8 lid_base 10 1.5 20 1.5 30 0.0 11 0.868083094650066 21 1.0777666229051 31 0.0 0 LINE 8 lid_base 10 1.5 20 1.5 30 0.0 11 2.26 21 1.5 31 0.0 0 LINE 8 lid_base 10 1.5 20 1.5 30 0.0 11 1.0777666229051 21 2.13191690534993 31 0.0 0 LINE 8 lid_base 10 1.5 20 1.5 30 0.0 11 1.5 21 2.26 31 0.0 0 LINE 8 lid_base 10 1.5 20 1.5 30 0.0 11 2.20214844470858 21 1.79083940859747 31 0.0 0 LINE 8 lid_base 10 1.5 20 1.5 30 0.0 11 1.35173135526774 21 0.754603186893545 31 0.0 0 LINE 8 lid_base 10 1.5 20 1.5 30 0.0 11 1.79083940859747 21 2.20214844470858 31 0.0 0 LINE 8 lid_base 10 1.5 20 1.5 30 0.0 11 1.64826864473226 21 0.754603186893545 31 0.0 0 LINE 8 lid_base 10 1.5 20 1.5 30 0.0 11 0.962598846298224 21 2.03740115370178 31 0.0 0 LINE 8 lid_base 10 1.5 20 1.5 30 0.0 11 0.868083094650066 21 1.9222333770949 31 0.0 0 LINE 8 lid_base 10 1.5 20 1.5 30 0.0 11 2.24539681310646 21 1.35173135526774 31 0.0 0 LINE 8 lid_base 10 1.5 20 1.5 30 0.0 11 1.20916059140253 21 2.20214844470858 31 0.0 0 LINE 8 lid_base 10 1.5 20 1.5 30 0.0 11 0.797851555291422 21 1.20916059140253 31 0.0 0 LINE 8 lid_base 10 1.5 20 1.5 30 0.0 11 1.0777666229051 21 0.868083094650066 31 0.0 0 LINE 8 lid_base 10 1.5 20 0.74 30 0.0 11 1.5 21 1.5 31 0.0 0 LINE 8 lid_base 10 1.5 20 1.5 30 0.0 11 2.13191690534993 21 1.9222333770949 31 0.0 0 3DFACE 8 lid_base 10 1.5 20 3.0 30 0.0 11 1.35173135526774 21 2.24539681310645 31 0.0 12 1.20163144893051 22 3.0 32 0.0 13 1.20163144893051 23 3.0 33 0.0 70 1 0 3DFACE 8 lid_base 10 1.35173135526774 20 2.24539681310645 30 0.0 11 1.5 21 3.0 31 0.0 12 1.42550697334953 22 2.25634039227087 32 0.0 13 1.42550697334953 23 2.25634039227087 33 0.0 70 3 0 3DFACE 8 lid_base 10 1.42550697334953 20 2.25634039227087 30 0.0 11 1.5 21 3.0 31 0.0 12 1.5 22 2.26 32 0.0 13 1.5 23 2.26 33 0.0 70 1 0 3DFACE 8 lid_base 10 1.79836855106949 20 3.0 30 0.0 11 1.5 21 2.26 31 0.0 12 1.5 22 3.0 32 0.0 13 1.5 23 3.0 33 0.0 70 1 0 3DFACE 8 lid_base 10 1.5 20 2.26 30 0.0 11 1.79836855106949 21 3.0 31 0.0 12 1.57449302665047 22 2.25634039227087 32 0.0 13 1.57449302665047 23 2.25634039227087 33 0.0 70 3 0 3DFACE 8 lid_base 10 1.57449302665047 20 2.25634039227087 30 0.0 11 1.79836855106949 21 3.0 31 0.0 12 1.64826864473226 22 2.24539681310645 32 0.0 13 1.64826864473226 23 2.24539681310645 33 0.0 70 1 0 3DFACE 8 lid_base 10 1.98213889596437 20 0.91251205544432 30 0.0 11 2.50226795687895 21 0.0 31 0.0 12 1.9222333770949 22 0.868083094650066 32 0.0 13 1.9222333770949 23 0.868083094650066 33 0.0 70 1 0 3DFACE 8 lid_base 10 2.50226795687895 20 0.0 30 0.0 11 1.98213889596437 21 0.91251205544432 31 0.0 12 2.03740115370178 22 0.962598846298224 32 0.0 13 2.03740115370178 23 0.962598846298224 33 0.0 70 13 0 3DFACE 8 lid_base 10 2.50226795687895 20 0.0 30 0.0 11 2.03740115370178 21 0.962598846298224 31 0.0 12 3.0 22 0.0 32 0.0 13 3.0 23 0.0 33 0.0 70 13 0 3DFACE 8 lid_base 10 2.50226795687895 20 0.0 30 0.0 11 3.0 21 0.0 31 0.0 12 2.795 22 0.0 32 0.0 13 2.795 23 0.0 33 0.0 70 1 0 3DFACE 8 lid_base 10 1.85826151998776 20 0.82973983909525 30 0.0 11 2.12132034355964 21 0.0 31 0.0 12 1.79083940859747 22 0.797851555291422 32 0.0 13 1.79083940859747 23 0.797851555291422 33 0.0 70 1 0 3DFACE 8 lid_base 10 2.12132034355964 20 0.0 30 0.0 11 1.85826151998776 21 0.82973983909525 31 0.0 12 1.9222333770949 22 0.868083094650066 32 0.0 13 1.9222333770949 23 0.868083094650066 33 0.0 70 13 0 3DFACE 8 lid_base 10 2.12132034355964 20 0.0 30 0.0 11 1.9222333770949 21 0.868083094650066 31 0.0 12 2.50226795687895 22 0.0 32 0.0 13 2.50226795687895 23 0.0 33 0.0 70 1 0 3DFACE 8 lid_base 10 1.35173135526774 20 0.754603186893545 30 0.0 11 1.5 21 0.0 31 0.0 12 1.20163144893051 22 1.11022302462516e-16 32 0.0 13 1.20163144893051 23 1.11022302462516e-16 33 0.0 70 1 0 3DFACE 8 lid_base 10 1.5 20 0.0 30 0.0 11 1.35173135526774 21 0.754603186893545 31 0.0 12 1.42550697334953 22 0.743659607729131 32 0.0 13 1.42550697334953 23 0.743659607729131 33 0.0 70 13 0 3DFACE 8 lid_base 10 1.5 20 0.0 30 0.0 11 1.42550697334953 21 0.743659607729131 31 0.0 12 1.5 22 0.74 32 0.0 13 1.5 23 0.74 33 0.0 70 1 0 3DFACE 8 lid_base 10 1.20916059140253 20 0.797851555291422 30 0.0 11 1.20163144893051 21 1.11022302462516e-16 31 0.0 12 0.878679656440358 22 1.66533453693773e-16 32 0.0 13 0.878679656440358 23 1.66533453693773e-16 33 0.0 70 1 0 3DFACE 8 lid_base 10 1.20163144893051 20 1.11022302462516e-16 30 0.0 11 1.20916059140253 21 0.797851555291422 31 0.0 12 1.27938364528661 22 0.772725344843521 32 0.0 13 1.27938364528661 23 0.772725344843521 33 0.0 70 13 0 3DFACE 8 lid_base 10 1.20163144893051 20 1.11022302462516e-16 30 0.0 11 1.27938364528661 21 0.772725344843521 31 0.0 12 1.35173135526774 22 0.754603186893545 32 0.0 13 1.35173135526774 23 0.754603186893545 33 0.0 70 1 0 3DFACE 8 lid_base 10 0.868083094650066 20 1.0777666229051 30 0.0 11 0.0 21 0.205 31 0.0 12 0.0 22 0.497732043121051 32 0.0 13 0.0 23 0.497732043121051 33 0.0 70 1 0 3DFACE 8 lid_base 10 0.0 20 0.205 30 0.0 11 0.868083094650066 21 1.0777666229051 31 0.0 12 0.0 22 0.0 32 0.0 13 0.0 23 0.0 33 0.0 70 3 0 3DFACE 8 lid_base 10 0.0 20 0.0 30 0.0 11 0.868083094650066 21 1.0777666229051 31 0.0 12 0.91251205544432 22 1.01786110403563 32 0.0 13 0.91251205544432 23 1.01786110403563 33 0.0 70 13 0 3DFACE 8 lid_base 10 0.0 20 0.0 30 0.0 11 0.91251205544432 21 1.01786110403563 31 0.0 12 0.962598846298224 22 0.962598846298224 32 0.0 13 0.962598846298224 23 0.962598846298224 33 0.0 70 1 0 3DFACE 8 lid_base 10 1.0777666229051 20 0.868083094650066 30 0.0 11 0.878679656440358 21 1.66533453693773e-16 31 0.0 12 0.497732043121053 22 0.0 32 0.0 13 0.497732043121053 23 0.0 33 0.0 70 1 0 3DFACE 8 lid_base 10 0.878679656440358 20 1.66533453693773e-16 30 0.0 11 1.0777666229051 21 0.868083094650066 31 0.0 12 1.14173848001224 22 0.82973983909525 32 0.0 13 1.14173848001224 23 0.82973983909525 33 0.0 70 13 0 3DFACE 8 lid_base 10 0.878679656440358 20 1.66533453693773e-16 30 0.0 11 1.14173848001224 21 0.82973983909525 31 0.0 12 1.20916059140253 22 0.797851555291422 32 0.0 13 1.20916059140253 23 0.797851555291422 33 0.0 70 1 0 3DFACE 8 lid_base 10 0.74 20 1.5 30 0.0 11 0.0 21 1.20163144893051 31 0.0 12 0.0 22 1.5 32 0.0 13 0.0 23 1.5 33 0.0 70 1 0 3DFACE 8 lid_base 10 0.0 20 1.20163144893051 30 0.0 11 0.74 21 1.5 31 0.0 12 0.743659607729131 22 1.42550697334953 32 0.0 13 0.743659607729131 23 1.42550697334953 33 0.0 70 13 0 3DFACE 8 lid_base 10 0.0 20 1.20163144893051 30 0.0 11 0.743659607729131 21 1.42550697334953 31 0.0 12 0.754603186893545 22 1.35173135526774 32 0.0 13 0.754603186893545 23 1.35173135526774 33 0.0 70 1 0 3DFACE 8 lid_base 10 0.754603186893545 20 1.64826864473226 30 0.0 11 0.0 21 1.5 31 0.0 12 0.0 22 1.79836855106949 32 0.0 13 0.0 23 1.79836855106949 33 0.0 70 1 0 3DFACE 8 lid_base 10 0.0 20 1.5 30 0.0 11 0.754603186893545 21 1.64826864473226 31 0.0 12 0.743659607729131 22 1.57449302665047 32 0.0 13 0.743659607729131 23 1.57449302665047 33 0.0 70 13 0 3DFACE 8 lid_base 10 0.0 20 1.5 30 0.0 11 0.743659607729131 21 1.57449302665047 31 0.0 12 0.74 22 1.5 32 0.0 13 0.74 23 1.5 33 0.0 70 1 0 3DFACE 8 lid_base 10 1.57449302665047 20 0.743659607729131 30 0.0 11 1.5 21 0.0 31 0.0 12 1.5 22 0.74 32 0.0 13 1.5 23 0.74 33 0.0 70 1 0 3DFACE 8 lid_base 10 1.5 20 0.0 30 0.0 11 1.57449302665047 21 0.743659607729131 31 0.0 12 1.79836855106949 22 5.55111512312578e-17 32 0.0 13 1.79836855106949 23 5.55111512312578e-17 33 0.0 70 3 0 3DFACE 8 lid_base 10 1.79836855106949 20 5.55111512312578e-17 30 0.0 11 1.57449302665047 21 0.743659607729131 31 0.0 12 1.64826864473226 22 0.754603186893545 32 0.0 13 1.64826864473226 23 0.754603186893545 33 0.0 70 1 0 3DFACE 8 lid_base 10 2.50226795687895 20 3.0 30 0.0 11 1.98213889596437 21 2.08748794455568 31 0.0 12 1.9222333770949 22 2.13191690534993 32 0.0 13 1.9222333770949 23 2.13191690534993 33 0.0 70 1 0 3DFACE 8 lid_base 10 1.98213889596437 20 2.08748794455568 30 0.0 11 2.50226795687895 21 3.0 31 0.0 12 2.03740115370178 22 2.03740115370178 32 0.0 13 2.03740115370178 23 2.03740115370178 33 0.0 70 3 0 3DFACE 8 lid_base 10 2.03740115370178 20 2.03740115370178 30 0.0 11 2.50226795687895 21 3.0 31 0.0 12 3.0 22 3.0 32 0.0 13 3.0 23 3.0 33 0.0 70 3 0 3DFACE 8 lid_base 10 3.0 20 3.0 30 0.0 11 2.50226795687895 21 3.0 31 0.0 12 2.795 22 3.0 32 0.0 13 2.795 23 3.0 33 0.0 70 1 0 3DFACE 8 lid_base 10 3.0 20 3.0 30 0.0 11 2.08748794455568 21 1.98213889596437 31 0.0 12 2.03740115370178 22 2.03740115370178 32 0.0 13 2.03740115370178 23 2.03740115370178 33 0.0 70 1 0 3DFACE 8 lid_base 10 2.08748794455568 20 1.98213889596437 30 0.0 11 3.0 21 3.0 31 0.0 12 2.13191690534993 22 1.9222333770949 32 0.0 13 2.13191690534993 23 1.9222333770949 33 0.0 70 3 0 3DFACE 8 lid_base 10 2.13191690534993 20 1.9222333770949 30 0.0 11 3.0 21 3.0 31 0.0 12 3.0 22 2.50226795687895 32 0.0 13 3.0 23 2.50226795687895 33 0.0 70 3 0 3DFACE 8 lid_base 10 3.0 20 2.50226795687895 30 0.0 11 3.0 21 3.0 31 0.0 12 3.0 22 2.795 32 0.0 13 3.0 23 2.795 33 0.0 70 1 0 3DFACE 8 lid_base 10 1.72061635471339 20 0.772725344843521 30 0.0 11 1.79836855106949 21 5.55111512312578e-17 31 0.0 12 1.64826864473226 22 0.754603186893545 32 0.0 13 1.64826864473226 23 0.754603186893545 33 0.0 70 1 0 3DFACE 8 lid_base 10 1.79836855106949 20 5.55111512312578e-17 30 0.0 11 1.72061635471339 21 0.772725344843521 31 0.0 12 1.79083940859747 22 0.797851555291422 32 0.0 13 1.79083940859747 23 0.797851555291422 33 0.0 70 13 0 3DFACE 8 lid_base 10 1.79836855106949 20 5.55111512312578e-17 30 0.0 11 1.79083940859747 21 0.797851555291422 31 0.0 12 2.12132034355964 22 0.0 32 0.0 13 2.12132034355964 23 0.0 33 0.0 70 1 0 3DFACE 8 lid_base 10 2.12132034355964 20 3.0 30 0.0 11 1.85826151998776 21 2.17026016090475 31 0.0 12 1.79083940859747 22 2.20214844470858 32 0.0 13 1.79083940859747 23 2.20214844470858 33 0.0 70 1 0 3DFACE 8 lid_base 10 1.85826151998776 20 2.17026016090475 30 0.0 11 2.12132034355964 21 3.0 31 0.0 12 1.9222333770949 22 2.13191690534993 32 0.0 13 1.9222333770949 23 2.13191690534993 33 0.0 70 3 0 3DFACE 8 lid_base 10 1.9222333770949 20 2.13191690534993 30 0.0 11 2.12132034355964 21 3.0 31 0.0 12 2.50226795687895 22 3.0 32 0.0 13 2.50226795687895 23 3.0 33 0.0 70 1 0 3DFACE 8 lid_base 10 0.962598846298224 20 2.03740115370178 30 0.0 11 0.0 21 2.795 31 0.0 12 0.0 22 3.0 32 0.0 13 0.0 23 3.0 33 0.0 70 1 0 3DFACE 8 lid_base 10 0.0 20 2.795 30 0.0 11 0.962598846298224 21 2.03740115370178 31 0.0 12 0.0 22 2.50226795687895 32 0.0 13 0.0 23 2.50226795687895 33 0.0 70 3 0 3DFACE 8 lid_base 10 0.0 20 2.50226795687895 30 0.0 11 0.962598846298224 21 2.03740115370178 31 0.0 12 0.91251205544432 22 1.98213889596437 32 0.0 13 0.91251205544432 23 1.98213889596437 33 0.0 70 13 0 3DFACE 8 lid_base 10 0.0 20 2.50226795687895 30 0.0 11 0.91251205544432 21 1.98213889596437 31 0.0 12 0.868083094650066 22 1.9222333770949 32 0.0 13 0.868083094650066 23 1.9222333770949 33 0.0 70 1 0 3DFACE 8 lid_base 10 0.205 20 3.0 30 0.0 11 0.962598846298224 21 2.03740115370178 31 0.0 12 0.0 22 3.0 32 0.0 13 0.0 23 3.0 33 0.0 70 1 0 3DFACE 8 lid_base 10 0.962598846298224 20 2.03740115370178 30 0.0 11 0.205 21 3.0 31 0.0 12 0.497732043121052 22 3.0 32 0.0 13 0.497732043121052 23 3.0 33 0.0 70 13 0 3DFACE 8 lid_base 10 0.962598846298224 20 2.03740115370178 30 0.0 11 0.497732043121052 21 3.0 31 0.0 12 1.01786110403563 22 2.08748794455568 32 0.0 13 1.01786110403563 23 2.08748794455568 33 0.0 70 3 0 3DFACE 8 lid_base 10 1.01786110403563 20 2.08748794455568 30 0.0 11 0.497732043121052 21 3.0 31 0.0 12 1.0777666229051 22 2.13191690534993 32 0.0 13 1.0777666229051 23 2.13191690534993 33 0.0 70 1 0 3DFACE 8 lid_base 10 0.797851555291422 20 1.20916059140253 30 0.0 11 0.0 21 0.497732043121051 31 0.0 12 0.0 22 0.878679656440357 32 0.0 13 0.0 23 0.878679656440357 33 0.0 70 1 0 3DFACE 8 lid_base 10 0.0 20 0.497732043121051 30 0.0 11 0.797851555291422 21 1.20916059140253 31 0.0 12 0.82973983909525 22 1.14173848001224 32 0.0 13 0.82973983909525 23 1.14173848001224 33 0.0 70 13 0 3DFACE 8 lid_base 10 0.0 20 0.497732043121051 30 0.0 11 0.82973983909525 21 1.14173848001224 31 0.0 12 0.868083094650066 22 1.0777666229051 32 0.0 13 0.868083094650066 23 1.0777666229051 33 0.0 70 1 0 3DFACE 8 lid_base 10 1.79836855106949 20 3.0 30 0.0 11 1.72061635471339 21 2.22727465515648 31 0.0 12 1.64826864473226 22 2.24539681310645 32 0.0 13 1.64826864473226 23 2.24539681310645 33 0.0 70 1 0 3DFACE 8 lid_base 10 1.72061635471339 20 2.22727465515648 30 0.0 11 1.79836855106949 21 3.0 31 0.0 12 1.79083940859747 22 2.20214844470858 32 0.0 13 1.79083940859747 23 2.20214844470858 33 0.0 70 3 0 3DFACE 8 lid_base 10 1.79083940859747 20 2.20214844470858 30 0.0 11 1.79836855106949 21 3.0 31 0.0 12 2.12132034355964 22 3.0 32 0.0 13 2.12132034355964 23 3.0 33 0.0 70 1 0 3DFACE 8 lid_base 10 0.868083094650066 20 1.9222333770949 30 0.0 11 0.0 21 2.12132034355964 31 0.0 12 0.0 22 2.50226795687895 32 0.0 13 0.0 23 2.50226795687895 33 0.0 70 1 0 3DFACE 8 lid_base 10 0.0 20 2.12132034355964 30 0.0 11 0.868083094650066 21 1.9222333770949 31 0.0 12 0.82973983909525 22 1.85826151998776 32 0.0 13 0.82973983909525 23 1.85826151998776 33 0.0 70 13 0 3DFACE 8 lid_base 10 0.0 20 2.12132034355964 30 0.0 11 0.82973983909525 21 1.85826151998776 31 0.0 12 0.797851555291422 22 1.79083940859747 32 0.0 13 0.797851555291422 23 1.79083940859747 33 0.0 70 1 0 3DFACE 8 lid_base 10 3.0 20 2.12132034355964 30 0.0 11 2.22727465515648 21 1.72061635471339 31 0.0 12 2.20214844470858 22 1.79083940859747 32 0.0 13 2.20214844470858 23 1.79083940859747 33 0.0 70 1 0 3DFACE 8 lid_base 10 2.22727465515648 20 1.72061635471339 30 0.0 11 3.0 21 2.12132034355964 31 0.0 12 2.24539681310645 22 1.64826864473226 32 0.0 13 2.24539681310645 23 1.64826864473226 33 0.0 70 3 0 3DFACE 8 lid_base 10 2.24539681310645 20 1.64826864473226 30 0.0 11 3.0 21 2.12132034355964 31 0.0 12 3.0 22 1.79836855106949 32 0.0 13 3.0 23 1.79836855106949 33 0.0 70 1 0 3DFACE 8 lid_base 10 3.0 20 1.79836855106949 30 0.0 11 2.25634039227087 21 1.57449302665047 31 0.0 12 2.24539681310645 22 1.64826864473226 32 0.0 13 2.24539681310645 23 1.64826864473226 33 0.0 70 1 0 3DFACE 8 lid_base 10 2.25634039227087 20 1.57449302665047 30 0.0 11 3.0 21 1.79836855106949 31 0.0 12 2.26 22 1.5 32 0.0 13 2.26 23 1.5 33 0.0 70 3 0 3DFACE 8 lid_base 10 2.26 20 1.5 30 0.0 11 3.0 21 1.79836855106949 31 0.0 12 3.0 22 1.5 32 0.0 13 3.0 23 1.5 33 0.0 70 1 0 3DFACE 8 lid_base 10 3.0 20 2.50226795687895 30 0.0 11 2.17026016090475 21 1.85826151998776 31 0.0 12 2.13191690534993 22 1.9222333770949 32 0.0 13 2.13191690534993 23 1.9222333770949 33 0.0 70 1 0 3DFACE 8 lid_base 10 2.17026016090475 20 1.85826151998776 30 0.0 11 3.0 21 2.50226795687895 31 0.0 12 2.20214844470858 22 1.79083940859747 32 0.0 13 2.20214844470858 23 1.79083940859747 33 0.0 70 3 0 3DFACE 8 lid_base 10 2.20214844470858 20 1.79083940859747 30 0.0 11 3.0 21 2.50226795687895 31 0.0 12 3.0 22 2.12132034355964 32 0.0 13 3.0 23 2.12132034355964 33 0.0 70 1 0 3DFACE 8 lid_base 10 0.754603186893545 20 1.35173135526774 30 0.0 11 0.0 21 0.878679656440357 31 0.0 12 0.0 22 1.20163144893051 32 0.0 13 0.0 23 1.20163144893051 33 0.0 70 1 0 3DFACE 8 lid_base 10 0.0 20 0.878679656440357 30 0.0 11 0.754603186893545 21 1.35173135526774 31 0.0 12 0.772725344843521 22 1.27938364528661 32 0.0 13 0.772725344843521 23 1.27938364528661 33 0.0 70 13 0 3DFACE 8 lid_base 10 0.0 20 0.878679656440357 30 0.0 11 0.772725344843521 21 1.27938364528661 31 0.0 12 0.797851555291422 22 1.20916059140253 32 0.0 13 0.797851555291422 23 1.20916059140253 33 0.0 70 1 0 3DFACE 8 lid_base 10 2.08748794455568 20 1.01786110403563 30 0.0 11 3.0 21 0.0 31 0.0 12 2.03740115370178 22 0.962598846298224 32 0.0 13 2.03740115370178 23 0.962598846298224 33 0.0 70 1 0 3DFACE 8 lid_base 10 3.0 20 0.0 30 0.0 11 2.08748794455568 21 1.01786110403563 31 0.0 12 2.13191690534993 22 1.0777666229051 32 0.0 13 2.13191690534993 23 1.0777666229051 33 0.0 70 13 0 3DFACE 8 lid_base 10 3.0 20 0.0 30 0.0 11 2.13191690534993 21 1.0777666229051 31 0.0 12 3.0 22 0.497732043121051 32 0.0 13 3.0 23 0.497732043121051 33 0.0 70 13 0 3DFACE 8 lid_base 10 3.0 20 0.0 30 0.0 11 3.0 21 0.497732043121051 31 0.0 12 3.0 22 0.205 32 0.0 13 3.0 23 0.205 33 0.0 70 1 0 3DFACE 8 lid_base 10 0.797851555291422 20 1.79083940859747 30 0.0 11 0.0 21 1.79836855106949 31 0.0 12 0.0 22 2.12132034355964 32 0.0 13 0.0 23 2.12132034355964 33 0.0 70 1 0 3DFACE 8 lid_base 10 0.0 20 1.79836855106949 30 0.0 11 0.797851555291422 21 1.79083940859747 31 0.0 12 0.772725344843521 22 1.72061635471339 32 0.0 13 0.772725344843521 23 1.72061635471339 33 0.0 70 13 0 3DFACE 8 lid_base 10 0.0 20 1.79836855106949 30 0.0 11 0.772725344843521 21 1.72061635471339 31 0.0 12 0.754603186893545 22 1.64826864473226 32 0.0 13 0.754603186893545 23 1.64826864473226 33 0.0 70 1 0 3DFACE 8 lid_base 10 0.743659607729131 20 1.57449302665047 30 0.0 11 0.743659607729131 21 1.42550697334953 31 0.0 12 0.74 22 1.5 32 0.0 13 0.74 23 1.5 33 0.0 70 1 0 3DFACE 8 lid_base 10 0.743659607729131 20 1.42550697334953 30 0.0 11 0.743659607729131 21 1.57449302665047 31 0.0 12 0.754603186893545 22 1.64826864473226 32 0.0 13 0.754603186893545 23 1.64826864473226 33 0.0 70 13 0 3DFACE 8 lid_base 10 0.743659607729131 20 1.42550697334953 30 0.0 11 0.754603186893545 21 1.64826864473226 31 0.0 12 0.754603186893545 22 1.35173135526774 32 0.0 13 0.754603186893545 23 1.35173135526774 33 0.0 70 3 0 3DFACE 8 lid_base 10 0.754603186893545 20 1.35173135526774 30 0.0 11 0.754603186893545 21 1.64826864473226 31 0.0 12 0.772725344843521 22 1.72061635471339 32 0.0 13 0.772725344843521 23 1.72061635471339 33 0.0 70 13 0 3DFACE 8 lid_base 10 0.754603186893545 20 1.35173135526774 30 0.0 11 0.772725344843521 21 1.72061635471339 31 0.0 12 0.772725344843521 22 1.27938364528661 32 0.0 13 0.772725344843521 23 1.27938364528661 33 0.0 70 3 0 3DFACE 8 lid_base 10 0.772725344843521 20 1.27938364528661 30 0.0 11 0.772725344843521 21 1.72061635471339 31 0.0 12 0.797851555291422 22 1.79083940859747 32 0.0 13 0.797851555291422 23 1.79083940859747 33 0.0 70 13 0 3DFACE 8 lid_base 10 0.772725344843521 20 1.27938364528661 30 0.0 11 0.797851555291422 21 1.79083940859747 31 0.0 12 0.797851555291422 22 1.20916059140253 32 0.0 13 0.797851555291422 23 1.20916059140253 33 0.0 70 3 0 3DFACE 8 lid_base 10 0.797851555291422 20 1.20916059140253 30 0.0 11 0.797851555291422 21 1.79083940859747 31 0.0 12 0.82973983909525 22 1.85826151998776 32 0.0 13 0.82973983909525 23 1.85826151998776 33 0.0 70 13 0 3DFACE 8 lid_base 10 0.797851555291422 20 1.20916059140253 30 0.0 11 0.82973983909525 21 1.85826151998776 31 0.0 12 0.82973983909525 22 1.14173848001224 32 0.0 13 0.82973983909525 23 1.14173848001224 33 0.0 70 3 0 3DFACE 8 lid_base 10 0.82973983909525 20 1.14173848001224 30 0.0 11 0.82973983909525 21 1.85826151998776 31 0.0 12 0.868083094650066 22 1.9222333770949 32 0.0 13 0.868083094650066 23 1.9222333770949 33 0.0 70 13 0 3DFACE 8 lid_base 10 0.82973983909525 20 1.14173848001224 30 0.0 11 0.868083094650066 21 1.9222333770949 31 0.0 12 0.868083094650066 22 1.0777666229051 32 0.0 13 0.868083094650066 23 1.0777666229051 33 0.0 70 3 0 3DFACE 8 lid_base 10 0.868083094650066 20 1.0777666229051 30 0.0 11 0.868083094650066 21 1.9222333770949 31 0.0 12 0.91251205544432 22 1.98213889596437 32 0.0 13 0.91251205544432 23 1.98213889596437 33 0.0 70 13 0 3DFACE 8 lid_base 10 0.868083094650066 20 1.0777666229051 30 0.0 11 0.91251205544432 21 1.98213889596437 31 0.0 12 0.91251205544432 22 1.01786110403563 32 0.0 13 0.91251205544432 23 1.01786110403563 33 0.0 70 3 0 3DFACE 8 lid_base 10 0.91251205544432 20 1.01786110403563 30 0.0 11 0.91251205544432 21 1.98213889596437 31 0.0 12 0.962598846298224 22 2.03740115370178 32 0.0 13 0.962598846298224 23 2.03740115370178 33 0.0 70 13 0 3DFACE 8 lid_base 10 0.91251205544432 20 1.01786110403563 30 0.0 11 0.962598846298224 21 2.03740115370178 31 0.0 12 0.962598846298224 22 0.962598846298224 32 0.0 13 0.962598846298224 23 0.962598846298224 33 0.0 70 3 0 3DFACE 8 lid_base 10 0.962598846298224 20 0.962598846298224 30 0.0 11 0.962598846298224 21 2.03740115370178 31 0.0 12 1.01786110403563 22 2.08748794455568 32 0.0 13 1.01786110403563 23 2.08748794455568 33 0.0 70 13 0 3DFACE 8 lid_base 10 0.962598846298224 20 0.962598846298224 30 0.0 11 1.01786110403563 21 2.08748794455568 31 0.0 12 1.01786110403563 22 0.91251205544432 32 0.0 13 1.01786110403563 23 0.91251205544432 33 0.0 70 3 0 3DFACE 8 lid_base 10 1.01786110403563 20 0.91251205544432 30 0.0 11 1.01786110403563 21 2.08748794455568 31 0.0 12 1.0777666229051 22 2.13191690534993 32 0.0 13 1.0777666229051 23 2.13191690534993 33 0.0 70 13 0 3DFACE 8 lid_base 10 1.01786110403563 20 0.91251205544432 30 0.0 11 1.0777666229051 21 2.13191690534993 31 0.0 12 1.0777666229051 22 0.868083094650066 32 0.0 13 1.0777666229051 23 0.868083094650066 33 0.0 70 3 0 3DFACE 8 lid_base 10 1.0777666229051 20 0.868083094650066 30 0.0 11 1.0777666229051 21 2.13191690534993 31 0.0 12 1.14173848001224 22 2.17026016090475 32 0.0 13 1.14173848001224 23 2.17026016090475 33 0.0 70 13 0 3DFACE 8 lid_base 10 1.0777666229051 20 0.868083094650066 30 0.0 11 1.14173848001224 21 2.17026016090475 31 0.0 12 1.14173848001224 22 0.82973983909525 32 0.0 13 1.14173848001224 23 0.82973983909525 33 0.0 70 3 0 3DFACE 8 lid_base 10 1.14173848001224 20 0.82973983909525 30 0.0 11 1.14173848001224 21 2.17026016090475 31 0.0 12 1.20916059140253 22 2.20214844470858 32 0.0 13 1.20916059140253 23 2.20214844470858 33 0.0 70 13 0 3DFACE 8 lid_base 10 1.14173848001224 20 0.82973983909525 30 0.0 11 1.20916059140253 21 2.20214844470858 31 0.0 12 1.20916059140253 22 0.797851555291422 32 0.0 13 1.20916059140253 23 0.797851555291422 33 0.0 70 3 0 3DFACE 8 lid_base 10 1.20916059140253 20 0.797851555291422 30 0.0 11 1.20916059140253 21 2.20214844470858 31 0.0 12 1.27938364528661 22 2.22727465515648 32 0.0 13 1.27938364528661 23 2.22727465515648 33 0.0 70 13 0 3DFACE 8 lid_base 10 1.20916059140253 20 0.797851555291422 30 0.0 11 1.27938364528661 21 2.22727465515648 31 0.0 12 1.27938364528661 22 0.772725344843521 32 0.0 13 1.27938364528661 23 0.772725344843521 33 0.0 70 3 0 3DFACE 8 lid_base 10 1.27938364528661 20 0.772725344843521 30 0.0 11 1.27938364528661 21 2.22727465515648 31 0.0 12 1.35173135526774 22 2.24539681310645 32 0.0 13 1.35173135526774 23 2.24539681310645 33 0.0 70 13 0 3DFACE 8 lid_base 10 1.27938364528661 20 0.772725344843521 30 0.0 11 1.35173135526774 21 2.24539681310645 31 0.0 12 1.35173135526774 22 0.754603186893545 32 0.0 13 1.35173135526774 23 0.754603186893545 33 0.0 70 3 0 3DFACE 8 lid_base 10 1.35173135526774 20 0.754603186893545 30 0.0 11 1.35173135526774 21 2.24539681310645 31 0.0 12 1.42550697334953 22 2.25634039227087 32 0.0 13 1.42550697334953 23 2.25634039227087 33 0.0 70 13 0 3DFACE 8 lid_base 10 1.35173135526774 20 0.754603186893545 30 0.0 11 1.42550697334953 21 2.25634039227087 31 0.0 12 1.42550697334953 22 0.743659607729131 32 0.0 13 1.42550697334953 23 0.743659607729131 33 0.0 70 3 0 3DFACE 8 lid_base 10 1.42550697334953 20 0.743659607729131 30 0.0 11 1.42550697334953 21 2.25634039227087 31 0.0 12 1.5 22 2.26 32 0.0 13 1.5 23 2.26 33 0.0 70 13 0 3DFACE 8 lid_base 10 1.42550697334953 20 0.743659607729131 30 0.0 11 1.5 21 2.26 31 0.0 12 1.5 22 0.74 32 0.0 13 1.5 23 0.74 33 0.0 70 3 0 3DFACE 8 lid_base 10 1.5 20 0.74 30 0.0 11 1.5 21 2.26 31 0.0 12 1.57449302665047 22 2.25634039227087 32 0.0 13 1.57449302665047 23 2.25634039227087 33 0.0 70 13 0 3DFACE 8 lid_base 10 1.5 20 0.74 30 0.0 11 1.57449302665047 21 2.25634039227087 31 0.0 12 1.57449302665047 22 0.743659607729131 32 0.0 13 1.57449302665047 23 0.743659607729131 33 0.0 70 3 0 3DFACE 8 lid_base 10 1.57449302665047 20 0.743659607729131 30 0.0 11 1.57449302665047 21 2.25634039227087 31 0.0 12 1.64826864473226 22 2.24539681310645 32 0.0 13 1.64826864473226 23 2.24539681310645 33 0.0 70 13 0 3DFACE 8 lid_base 10 1.57449302665047 20 0.743659607729131 30 0.0 11 1.64826864473226 21 2.24539681310645 31 0.0 12 1.64826864473226 22 0.754603186893545 32 0.0 13 1.64826864473226 23 0.754603186893545 33 0.0 70 3 0 3DFACE 8 lid_base 10 1.64826864473226 20 0.754603186893545 30 0.0 11 1.64826864473226 21 2.24539681310645 31 0.0 12 1.72061635471339 22 2.22727465515648 32 0.0 13 1.72061635471339 23 2.22727465515648 33 0.0 70 13 0 3DFACE 8 lid_base 10 1.64826864473226 20 0.754603186893545 30 0.0 11 1.72061635471339 21 2.22727465515648 31 0.0 12 1.72061635471339 22 0.772725344843521 32 0.0 13 1.72061635471339 23 0.772725344843521 33 0.0 70 3 0 3DFACE 8 lid_base 10 1.72061635471339 20 0.772725344843521 30 0.0 11 1.72061635471339 21 2.22727465515648 31 0.0 12 1.79083940859747 22 2.20214844470858 32 0.0 13 1.79083940859747 23 2.20214844470858 33 0.0 70 13 0 3DFACE 8 lid_base 10 1.72061635471339 20 0.772725344843521 30 0.0 11 1.79083940859747 21 2.20214844470858 31 0.0 12 1.79083940859747 22 0.797851555291422 32 0.0 13 1.79083940859747 23 0.797851555291422 33 0.0 70 3 0 3DFACE 8 lid_base 10 1.79083940859747 20 0.797851555291422 30 0.0 11 1.79083940859747 21 2.20214844470858 31 0.0 12 1.85826151998776 22 2.17026016090475 32 0.0 13 1.85826151998776 23 2.17026016090475 33 0.0 70 13 0 3DFACE 8 lid_base 10 1.79083940859747 20 0.797851555291422 30 0.0 11 1.85826151998776 21 2.17026016090475 31 0.0 12 1.85826151998776 22 0.82973983909525 32 0.0 13 1.85826151998776 23 0.82973983909525 33 0.0 70 3 0 3DFACE 8 lid_base 10 1.85826151998776 20 0.82973983909525 30 0.0 11 1.85826151998776 21 2.17026016090475 31 0.0 12 1.9222333770949 22 2.13191690534993 32 0.0 13 1.9222333770949 23 2.13191690534993 33 0.0 70 13 0 3DFACE 8 lid_base 10 1.85826151998776 20 0.82973983909525 30 0.0 11 1.9222333770949 21 2.13191690534993 31 0.0 12 1.9222333770949 22 0.868083094650066 32 0.0 13 1.9222333770949 23 0.868083094650066 33 0.0 70 3 0 3DFACE 8 lid_base 10 1.9222333770949 20 0.868083094650066 30 0.0 11 1.9222333770949 21 2.13191690534993 31 0.0 12 1.98213889596437 22 2.08748794455568 32 0.0 13 1.98213889596437 23 2.08748794455568 33 0.0 70 13 0 3DFACE 8 lid_base 10 1.9222333770949 20 0.868083094650066 30 0.0 11 1.98213889596437 21 2.08748794455568 31 0.0 12 1.98213889596437 22 0.91251205544432 32 0.0 13 1.98213889596437 23 0.91251205544432 33 0.0 70 3 0 3DFACE 8 lid_base 10 1.98213889596437 20 0.91251205544432 30 0.0 11 1.98213889596437 21 2.08748794455568 31 0.0 12 2.03740115370178 22 2.03740115370178 32 0.0 13 2.03740115370178 23 2.03740115370178 33 0.0 70 13 0 3DFACE 8 lid_base 10 1.98213889596437 20 0.91251205544432 30 0.0 11 2.03740115370178 21 2.03740115370178 31 0.0 12 2.03740115370178 22 0.962598846298224 32 0.0 13 2.03740115370178 23 0.962598846298224 33 0.0 70 3 0 3DFACE 8 lid_base 10 2.03740115370178 20 0.962598846298224 30 0.0 11 2.03740115370178 21 2.03740115370178 31 0.0 12 2.08748794455568 22 1.98213889596437 32 0.0 13 2.08748794455568 23 1.98213889596437 33 0.0 70 13 0 3DFACE 8 lid_base 10 2.03740115370178 20 0.962598846298224 30 0.0 11 2.08748794455568 21 1.98213889596437 31 0.0 12 2.08748794455568 22 1.01786110403563 32 0.0 13 2.08748794455568 23 1.01786110403563 33 0.0 70 3 0 3DFACE 8 lid_base 10 2.08748794455568 20 1.01786110403563 30 0.0 11 2.08748794455568 21 1.98213889596437 31 0.0 12 2.13191690534993 22 1.9222333770949 32 0.0 13 2.13191690534993 23 1.9222333770949 33 0.0 70 13 0 3DFACE 8 lid_base 10 2.08748794455568 20 1.01786110403563 30 0.0 11 2.13191690534993 21 1.9222333770949 31 0.0 12 2.13191690534993 22 1.0777666229051 32 0.0 13 2.13191690534993 23 1.0777666229051 33 0.0 70 3 0 3DFACE 8 lid_base 10 2.13191690534993 20 1.0777666229051 30 0.0 11 2.13191690534993 21 1.9222333770949 31 0.0 12 2.17026016090475 22 1.85826151998776 32 0.0 13 2.17026016090475 23 1.85826151998776 33 0.0 70 13 0 3DFACE 8 lid_base 10 2.13191690534993 20 1.0777666229051 30 0.0 11 2.17026016090475 21 1.85826151998776 31 0.0 12 2.17026016090475 22 1.14173848001224 32 0.0 13 2.17026016090475 23 1.14173848001224 33 0.0 70 3 0 3DFACE 8 lid_base 10 2.17026016090475 20 1.14173848001224 30 0.0 11 2.17026016090475 21 1.85826151998776 31 0.0 12 2.20214844470858 22 1.79083940859747 32 0.0 13 2.20214844470858 23 1.79083940859747 33 0.0 70 13 0 3DFACE 8 lid_base 10 2.17026016090475 20 1.14173848001224 30 0.0 11 2.20214844470858 21 1.79083940859747 31 0.0 12 2.20214844470858 22 1.20916059140253 32 0.0 13 2.20214844470858 23 1.20916059140253 33 0.0 70 3 0 3DFACE 8 lid_base 10 2.20214844470858 20 1.20916059140253 30 0.0 11 2.20214844470858 21 1.79083940859747 31 0.0 12 2.22727465515648 22 1.72061635471339 32 0.0 13 2.22727465515648 23 1.72061635471339 33 0.0 70 13 0 3DFACE 8 lid_base 10 2.20214844470858 20 1.20916059140253 30 0.0 11 2.22727465515648 21 1.72061635471339 31 0.0 12 2.22727465515648 22 1.27938364528661 32 0.0 13 2.22727465515648 23 1.27938364528661 33 0.0 70 3 0 3DFACE 8 lid_base 10 2.22727465515648 20 1.27938364528661 30 0.0 11 2.22727465515648 21 1.72061635471339 31 0.0 12 2.24539681310645 22 1.64826864473226 32 0.0 13 2.24539681310645 23 1.64826864473226 33 0.0 70 13 0 3DFACE 8 lid_base 10 2.22727465515648 20 1.27938364528661 30 0.0 11 2.24539681310645 21 1.64826864473226 31 0.0 12 2.24539681310646 22 1.35173135526774 32 0.0 13 2.24539681310646 23 1.35173135526774 33 0.0 70 3 0 3DFACE 8 lid_base 10 2.24539681310646 20 1.35173135526774 30 0.0 11 2.24539681310645 21 1.64826864473226 31 0.0 12 2.25634039227087 22 1.57449302665047 32 0.0 13 2.25634039227087 23 1.57449302665047 33 0.0 70 13 0 3DFACE 8 lid_base 10 2.24539681310646 20 1.35173135526774 30 0.0 11 2.25634039227087 21 1.57449302665047 31 0.0 12 2.25634039227087 22 1.42550697334953 32 0.0 13 2.25634039227087 23 1.42550697334953 33 0.0 70 3 0 3DFACE 8 lid_base 10 2.25634039227087 20 1.42550697334953 30 0.0 11 2.25634039227087 21 1.57449302665047 31 0.0 12 2.26 22 1.5 32 0.0 13 2.26 23 1.5 33 0.0 70 1 0 3DFACE 8 lid_base 10 2.17026016090475 20 1.14173848001224 30 0.0 11 3.0 21 0.497732043121051 31 0.0 12 2.13191690534993 22 1.0777666229051 32 0.0 13 2.13191690534993 23 1.0777666229051 33 0.0 70 1 0 3DFACE 8 lid_base 10 3.0 20 0.497732043121051 30 0.0 11 2.17026016090475 21 1.14173848001224 31 0.0 12 2.20214844470858 22 1.20916059140253 32 0.0 13 2.20214844470858 23 1.20916059140253 33 0.0 70 13 0 3DFACE 8 lid_base 10 3.0 20 0.497732043121051 30 0.0 11 2.20214844470858 21 1.20916059140253 31 0.0 12 3.0 22 0.878679656440357 32 0.0 13 3.0 23 0.878679656440357 33 0.0 70 1 0 3DFACE 8 lid_base 10 2.22727465515648 20 1.27938364528661 30 0.0 11 3.0 21 0.878679656440357 31 0.0 12 2.20214844470858 22 1.20916059140253 32 0.0 13 2.20214844470858 23 1.20916059140253 33 0.0 70 1 0 3DFACE 8 lid_base 10 3.0 20 0.878679656440357 30 0.0 11 2.22727465515648 21 1.27938364528661 31 0.0 12 2.24539681310646 22 1.35173135526774 32 0.0 13 2.24539681310646 23 1.35173135526774 33 0.0 70 13 0 3DFACE 8 lid_base 10 3.0 20 0.878679656440357 30 0.0 11 2.24539681310646 21 1.35173135526774 31 0.0 12 3.0 22 1.20163144893051 32 0.0 13 3.0 23 1.20163144893051 33 0.0 70 1 0 3DFACE 8 lid_base 10 2.25634039227087 20 1.42550697334953 30 0.0 11 3.0 21 1.20163144893051 31 0.0 12 2.24539681310646 22 1.35173135526774 32 0.0 13 2.24539681310646 23 1.35173135526774 33 0.0 70 1 0 3DFACE 8 lid_base 10 3.0 20 1.20163144893051 30 0.0 11 2.25634039227087 21 1.42550697334953 31 0.0 12 2.26 22 1.5 32 0.0 13 2.26 23 1.5 33 0.0 70 13 0 3DFACE 8 lid_base 10 3.0 20 1.20163144893051 30 0.0 11 2.26 21 1.5 31 0.0 12 3.0 22 1.5 32 0.0 13 3.0 23 1.5 33 0.0 70 1 0 3DFACE 8 lid_base 10 0.878679656440356 20 3.0 30 0.0 11 1.0777666229051 21 2.13191690534993 31 0.0 12 0.497732043121052 22 3.0 32 0.0 13 0.497732043121052 23 3.0 33 0.0 70 1 0 3DFACE 8 lid_base 10 1.0777666229051 20 2.13191690534993 30 0.0 11 0.878679656440356 21 3.0 31 0.0 12 1.14173848001224 22 2.17026016090475 32 0.0 13 1.14173848001224 23 2.17026016090475 33 0.0 70 3 0 3DFACE 8 lid_base 10 1.14173848001224 20 2.17026016090475 30 0.0 11 0.878679656440356 21 3.0 31 0.0 12 1.20916059140253 22 2.20214844470858 32 0.0 13 1.20916059140253 23 2.20214844470858 33 0.0 70 1 0 3DFACE 8 lid_base 10 1.20163144893051 20 3.0 30 0.0 11 1.20916059140253 21 2.20214844470858 31 0.0 12 0.878679656440356 22 3.0 32 0.0 13 0.878679656440356 23 3.0 33 0.0 70 1 0 3DFACE 8 lid_base 10 1.20916059140253 20 2.20214844470858 30 0.0 11 1.20163144893051 21 3.0 31 0.0 12 1.27938364528661 22 2.22727465515648 32 0.0 13 1.27938364528661 23 2.22727465515648 33 0.0 70 3 0 3DFACE 8 lid_base 10 1.27938364528661 20 2.22727465515648 30 0.0 11 1.20163144893051 21 3.0 31 0.0 12 1.35173135526774 22 2.24539681310645 32 0.0 13 1.35173135526774 23 2.24539681310645 33 0.0 70 1 0 LINE 8 lid_base 10 1.5 20 1.5 30 3.0 11 2.13191690534993 21 1.0777666229051 31 3.0 0 LINE 8 lid_base 10 1.5 20 1.5 30 3.0 11 2.24539681310646 21 1.35173135526774 31 3.0 0 LINE 8 lid_base 10 1.5 20 0.74 30 3.0 11 1.5 21 1.5 31 3.0 0 LINE 8 lid_base 10 1.5 20 1.5 30 3.0 11 1.64826864473226 21 0.754603186893545 31 3.0 0 LINE 8 lid_base 10 1.5 20 1.5 30 3.0 11 1.64826864473226 21 2.24539681310645 31 3.0 0 LINE 8 lid_base 10 1.5 20 1.5 30 3.0 11 1.79083940859747 21 0.797851555291422 31 3.0 0 LINE 8 lid_base 10 1.5 20 1.5 30 3.0 11 2.26 21 1.5 31 3.0 0 LINE 8 lid_base 10 1.5 20 1.5 30 3.0 11 1.0777666229051 21 0.868083094650066 31 3.0 0 LINE 8 lid_base 10 1.5 20 1.5 30 3.0 11 1.20916059140253 21 2.20214844470858 31 3.0 0 LINE 8 lid_base 10 1.5 20 1.5 30 3.0 11 0.754603186893545 21 1.64826864473226 31 3.0 0 LINE 8 lid_base 10 1.5 20 1.5 30 3.0 11 1.79083940859747 21 2.20214844470858 31 3.0 0 LINE 8 lid_base 10 0.962598846298224 20 0.962598846298224 30 3.0 11 1.5 21 1.5 31 3.0 0 LINE 8 lid_base 10 1.5 20 1.5 30 3.0 11 1.9222333770949 21 2.13191690534993 31 3.0 0 LINE 8 lid_base 10 1.5 20 1.5 30 3.0 11 1.0777666229051 21 2.13191690534993 31 3.0 0 LINE 8 lid_base 10 1.5 20 1.5 30 3.0 11 2.13191690534993 21 1.9222333770949 31 3.0 0 LINE 8 lid_base 10 1.5 20 1.5 30 3.0 11 1.9222333770949 21 0.868083094650066 31 3.0 0 LINE 8 lid_base 10 1.5 20 1.5 30 3.0 11 0.754603186893545 21 1.35173135526774 31 3.0 0 LINE 8 lid_base 10 1.5 20 1.5 30 3.0 11 1.35173135526774 21 2.24539681310645 31 3.0 0 LINE 8 lid_base 10 1.5 20 1.5 30 3.0 11 0.797851555291422 21 1.79083940859747 31 3.0 0 LINE 8 lid_base 10 2.20214844470858 20 1.20916059140253 30 3.0 11 1.5 21 1.5 31 3.0 0 LINE 8 lid_base 10 0.74 20 1.5 30 3.0 11 1.5 21 1.5 31 3.0 0 LINE 8 lid_base 10 1.5 20 1.5 30 3.0 11 2.24539681310645 21 1.64826864473226 31 3.0 0 LINE 8 lid_base 10 1.5 20 1.5 30 3.0 11 0.797851555291422 21 1.20916059140253 31 3.0 0 LINE 8 lid_base 10 1.5 20 1.5 30 3.0 11 0.962598846298224 21 2.03740115370178 31 3.0 0 LINE 8 lid_base 10 1.5 20 1.5 30 3.0 11 0.868083094650066 21 1.9222333770949 31 3.0 0 LINE 8 lid_base 10 1.5 20 1.5 30 3.0 11 2.03740115370178 21 2.03740115370178 31 3.0 0 LINE 8 lid_base 10 1.5 20 1.5 30 3.0 11 1.35173135526774 21 0.754603186893545 31 3.0 0 LINE 8 lid_base 10 1.5 20 1.5 30 3.0 11 2.20214844470858 21 1.79083940859747 31 3.0 0 LINE 8 lid_base 10 2.03740115370178 20 0.962598846298224 30 3.0 11 1.5 21 1.5 31 3.0 0 LINE 8 lid_base 10 1.5 20 1.5 30 3.0 11 1.5 21 2.26 31 3.0 0 LINE 8 lid_base 10 1.5 20 1.5 30 3.0 11 1.20916059140253 21 0.797851555291422 31 3.0 0 LINE 8 lid_base 10 1.5 20 1.5 30 3.0 11 0.868083094650066 21 1.0777666229051 31 3.0 0 3DFACE 8 lid_base 10 2.08748794455568 20 1.98213889596437 30 3.0 11 3.0 21 3.0 31 3.0 12 2.03740115370178 22 2.03740115370178 32 3.0 13 2.03740115370178 23 2.03740115370178 33 3.0 70 1 0 3DFACE 8 lid_base 10 3.0 20 3.0 30 3.0 11 2.08748794455568 21 1.98213889596437 31 3.0 12 2.13191690534993 22 1.9222333770949 32 3.0 13 2.13191690534993 23 1.9222333770949 33 3.0 70 13 0 3DFACE 8 lid_base 10 3.0 20 3.0 30 3.0 11 2.13191690534993 21 1.9222333770949 31 3.0 12 3.0 22 2.50226795687895 32 3.0 13 3.0 23 2.50226795687895 33 3.0 70 13 0 3DFACE 8 lid_base 10 3.0 20 3.0 30 3.0 11 3.0 21 2.50226795687895 31 3.0 12 3.0 22 2.795 32 3.0 13 3.0 23 2.795 33 3.0 70 1 0 3DFACE 8 lid_base 10 2.25634039227087 20 1.57449302665047 30 3.0 11 3.0 21 1.79836855106949 31 3.0 12 2.24539681310645 22 1.64826864473226 32 3.0 13 2.24539681310645 23 1.64826864473226 33 3.0 70 1 0 3DFACE 8 lid_base 10 3.0 20 1.79836855106949 30 3.0 11 2.25634039227087 21 1.57449302665047 31 3.0 12 2.26 22 1.5 32 3.0 13 2.26 23 1.5 33 3.0 70 13 0 3DFACE 8 lid_base 10 3.0 20 1.79836855106949 30 3.0 11 2.26 21 1.5 31 3.0 12 3.0 22 1.5 32 3.0 13 3.0 23 1.5 33 3.0 70 1 0 3DFACE 8 lid_base 10 3.0 20 1.20163144893051 30 3.0 11 2.25634039227087 21 1.42550697334953 31 3.0 12 2.24539681310646 22 1.35173135526774 32 3.0 13 2.24539681310646 23 1.35173135526774 33 3.0 70 1 0 3DFACE 8 lid_base 10 2.25634039227087 20 1.42550697334953 30 3.0 11 3.0 21 1.20163144893051 31 3.0 12 2.26 22 1.5 32 3.0 13 2.26 23 1.5 33 3.0 70 3 0 3DFACE 8 lid_base 10 2.26 20 1.5 30 3.0 11 3.0 21 1.20163144893051 31 3.0 12 3.0 22 1.5 32 3.0 13 3.0 23 1.5 33 3.0 70 1 0 3DFACE 8 lid_base 10 1.57449302665047 20 2.25634039227087 30 3.0 11 1.5 21 3.0 31 3.0 12 1.5 22 2.26 32 3.0 13 1.5 23 2.26 33 3.0 70 1 0 3DFACE 8 lid_base 10 1.5 20 3.0 30 3.0 11 1.57449302665047 21 2.25634039227087 31 3.0 12 1.79836855106949 22 3.0 32 3.0 13 1.79836855106949 23 3.0 33 3.0 70 3 0 3DFACE 8 lid_base 10 1.79836855106949 20 3.0 30 3.0 11 1.57449302665047 21 2.25634039227087 31 3.0 12 1.64826864473226 22 2.24539681310645 32 3.0 13 1.64826864473226 23 2.24539681310645 33 3.0 70 1 0 3DFACE 8 lid_base 10 1.72061635471339 20 2.22727465515648 30 3.0 11 1.79836855106949 21 3.0 31 3.0 12 1.64826864473226 22 2.24539681310645 32 3.0 13 1.64826864473226 23 2.24539681310645 33 3.0 70 1 0 3DFACE 8 lid_base 10 1.79836855106949 20 3.0 30 3.0 11 1.72061635471339 21 2.22727465515648 31 3.0 12 1.79083940859747 22 2.20214844470858 32 3.0 13 1.79083940859747 23 2.20214844470858 33 3.0 70 13 0 3DFACE 8 lid_base 10 1.79836855106949 20 3.0 30 3.0 11 1.79083940859747 21 2.20214844470858 31 3.0 12 2.12132034355964 22 3.0 32 3.0 13 2.12132034355964 23 3.0 33 3.0 70 1 0 3DFACE 8 lid_base 10 0.868083094650066 20 1.9222333770949 30 3.0 11 0.0 21 2.795 31 3.0 12 0.0 22 2.50226795687895 32 3.0 13 0.0 23 2.50226795687895 33 3.0 70 1 0 3DFACE 8 lid_base 10 0.0 20 2.795 30 3.0 11 0.868083094650066 21 1.9222333770949 31 3.0 12 0.0 22 3.0 32 3.0 13 0.0 23 3.0 33 3.0 70 3 0 3DFACE 8 lid_base 10 0.0 20 3.0 30 3.0 11 0.868083094650066 21 1.9222333770949 31 3.0 12 0.91251205544432 22 1.98213889596437 32 3.0 13 0.91251205544432 23 1.98213889596437 33 3.0 70 13 0 3DFACE 8 lid_base 10 0.0 20 3.0 30 3.0 11 0.91251205544432 21 1.98213889596437 31 3.0 12 0.962598846298224 22 2.03740115370178 32 3.0 13 0.962598846298224 23 2.03740115370178 33 3.0 70 1 0 3DFACE 8 lid_base 10 1.35173135526774 20 2.24539681310645 30 3.0 11 1.5 21 3.0 31 3.0 12 1.20163144893051 22 3.0 32 3.0 13 1.20163144893051 23 3.0 33 3.0 70 1 0 3DFACE 8 lid_base 10 1.5 20 3.0 30 3.0 11 1.35173135526774 21 2.24539681310645 31 3.0 12 1.42550697334953 22 2.25634039227087 32 3.0 13 1.42550697334953 23 2.25634039227087 33 3.0 70 13 0 3DFACE 8 lid_base 10 1.5 20 3.0 30 3.0 11 1.42550697334953 21 2.25634039227087 31 3.0 12 1.5 22 2.26 32 3.0 13 1.5 23 2.26 33 3.0 70 1 0 3DFACE 8 lid_base 10 3.0 20 0.0 30 3.0 11 2.08748794455568 21 1.01786110403563 31 3.0 12 2.03740115370178 22 0.962598846298224 32 3.0 13 2.03740115370178 23 0.962598846298224 33 3.0 70 1 0 3DFACE 8 lid_base 10 2.08748794455568 20 1.01786110403563 30 3.0 11 3.0 21 0.0 31 3.0 12 2.13191690534993 22 1.0777666229051 32 3.0 13 2.13191690534993 23 1.0777666229051 33 3.0 70 3 0 3DFACE 8 lid_base 10 2.13191690534993 20 1.0777666229051 30 3.0 11 3.0 21 0.0 31 3.0 12 3.0 22 0.497732043121051 32 3.0 13 3.0 23 0.497732043121051 33 3.0 70 3 0 3DFACE 8 lid_base 10 3.0 20 0.497732043121051 30 3.0 11 3.0 21 0.0 31 3.0 12 3.0 22 0.205 32 3.0 13 3.0 23 0.205 33 3.0 70 1 0 3DFACE 8 lid_base 10 3.0 20 0.497732043121051 30 3.0 11 2.17026016090475 21 1.14173848001224 31 3.0 12 2.13191690534993 22 1.0777666229051 32 3.0 13 2.13191690534993 23 1.0777666229051 33 3.0 70 1 0 3DFACE 8 lid_base 10 2.17026016090475 20 1.14173848001224 30 3.0 11 3.0 21 0.497732043121051 31 3.0 12 2.20214844470858 22 1.20916059140253 32 3.0 13 2.20214844470858 23 1.20916059140253 33 3.0 70 3 0 3DFACE 8 lid_base 10 2.20214844470858 20 1.20916059140253 30 3.0 11 3.0 21 0.497732043121051 31 3.0 12 3.0 22 0.878679656440357 32 3.0 13 3.0 23 0.878679656440357 33 3.0 70 1 0 3DFACE 8 lid_base 10 2.22727465515648 20 1.72061635471339 30 3.0 11 3.0 21 2.12132034355964 31 3.0 12 2.20214844470858 22 1.79083940859747 32 3.0 13 2.20214844470858 23 1.79083940859747 33 3.0 70 1 0 3DFACE 8 lid_base 10 3.0 20 2.12132034355964 30 3.0 11 2.22727465515648 21 1.72061635471339 31 3.0 12 2.24539681310645 22 1.64826864473226 32 3.0 13 2.24539681310645 23 1.64826864473226 33 3.0 70 13 0 3DFACE 8 lid_base 10 3.0 20 2.12132034355964 30 3.0 11 2.24539681310645 21 1.64826864473226 31 3.0 12 3.0 22 1.79836855106949 32 3.0 13 3.0 23 1.79836855106949 33 3.0 70 1 0 3DFACE 8 lid_base 10 1.79836855106949 20 5.55111512312578e-17 30 3.0 11 1.5 21 0.74 31 3.0 12 1.5 22 0.0 32 3.0 13 1.5 23 0.0 33 3.0 70 1 0 3DFACE 8 lid_base 10 1.5 20 0.74 30 3.0 11 1.79836855106949 21 5.55111512312578e-17 31 3.0 12 1.57449302665047 22 0.743659607729131 32 3.0 13 1.57449302665047 23 0.743659607729131 33 3.0 70 3 0 3DFACE 8 lid_base 10 1.57449302665047 20 0.743659607729131 30 3.0 11 1.79836855106949 21 5.55111512312578e-17 31 3.0 12 1.64826864473226 22 0.754603186893545 32 3.0 13 1.64826864473226 23 0.754603186893545 33 3.0 70 1 0 3DFACE 8 lid_base 10 1.79836855106949 20 5.55111512312578e-17 30 3.0 11 1.72061635471339 21 0.772725344843521 31 3.0 12 1.64826864473226 22 0.754603186893545 32 3.0 13 1.64826864473226 23 0.754603186893545 33 3.0 70 1 0 3DFACE 8 lid_base 10 1.72061635471339 20 0.772725344843521 30 3.0 11 1.79836855106949 21 5.55111512312578e-17 31 3.0 12 1.79083940859747 22 0.797851555291422 32 3.0 13 1.79083940859747 23 0.797851555291422 33 3.0 70 3 0 3DFACE 8 lid_base 10 1.79083940859747 20 0.797851555291422 30 3.0 11 1.79836855106949 21 5.55111512312578e-17 31 3.0 12 2.12132034355964 22 0.0 32 3.0 13 2.12132034355964 23 0.0 33 3.0 70 1 0 3DFACE 8 lid_base 10 0.962598846298224 20 2.03740115370178 30 3.0 11 0.205 21 3.0 31 3.0 12 0.0 22 3.0 32 3.0 13 0.0 23 3.0 33 3.0 70 1 0 3DFACE 8 lid_base 10 0.205 20 3.0 30 3.0 11 0.962598846298224 21 2.03740115370178 31 3.0 12 0.497732043121052 22 3.0 32 3.0 13 0.497732043121052 23 3.0 33 3.0 70 3 0 3DFACE 8 lid_base 10 0.497732043121052 20 3.0 30 3.0 11 0.962598846298224 21 2.03740115370178 31 3.0 12 1.01786110403563 22 2.08748794455568 32 3.0 13 1.01786110403563 23 2.08748794455568 33 3.0 70 13 0 3DFACE 8 lid_base 10 0.497732043121052 20 3.0 30 3.0 11 1.01786110403563 21 2.08748794455568 31 3.0 12 1.0777666229051 22 2.13191690534993 32 3.0 13 1.0777666229051 23 2.13191690534993 33 3.0 70 1 0 3DFACE 8 lid_base 10 0.868083094650066 20 1.0777666229051 30 3.0 11 0.0 21 0.878679656440357 31 3.0 12 0.0 22 0.497732043121051 32 3.0 13 0.0 23 0.497732043121051 33 3.0 70 1 0 3DFACE 8 lid_base 10 0.0 20 0.878679656440357 30 3.0 11 0.868083094650066 21 1.0777666229051 31 3.0 12 0.82973983909525 22 1.14173848001224 32 3.0 13 0.82973983909525 23 1.14173848001224 33 3.0 70 13 0 3DFACE 8 lid_base 10 0.0 20 0.878679656440357 30 3.0 11 0.82973983909525 21 1.14173848001224 31 3.0 12 0.797851555291422 22 1.20916059140253 32 3.0 13 0.797851555291422 23 1.20916059140253 33 3.0 70 1 0 3DFACE 8 lid_base 10 2.12132034355964 20 0.0 30 3.0 11 1.85826151998776 21 0.82973983909525 31 3.0 12 1.79083940859747 22 0.797851555291422 32 3.0 13 1.79083940859747 23 0.797851555291422 33 3.0 70 1 0 3DFACE 8 lid_base 10 1.85826151998776 20 0.82973983909525 30 3.0 11 2.12132034355964 21 0.0 31 3.0 12 1.9222333770949 22 0.868083094650066 32 3.0 13 1.9222333770949 23 0.868083094650066 33 3.0 70 3 0 3DFACE 8 lid_base 10 1.9222333770949 20 0.868083094650066 30 3.0 11 2.12132034355964 21 0.0 31 3.0 12 2.50226795687895 22 0.0 32 3.0 13 2.50226795687895 23 0.0 33 3.0 70 1 0 3DFACE 8 lid_base 10 0.797851555291422 20 1.20916059140253 30 3.0 11 0.0 21 1.20163144893051 31 3.0 12 0.0 22 0.878679656440357 32 3.0 13 0.0 23 0.878679656440357 33 3.0 70 1 0 3DFACE 8 lid_base 10 0.0 20 1.20163144893051 30 3.0 11 0.797851555291422 21 1.20916059140253 31 3.0 12 0.772725344843521 22 1.27938364528661 32 3.0 13 0.772725344843521 23 1.27938364528661 33 3.0 70 13 0 3DFACE 8 lid_base 10 0.0 20 1.20163144893051 30 3.0 11 0.772725344843521 21 1.27938364528661 31 3.0 12 0.754603186893545 22 1.35173135526774 32 3.0 13 0.754603186893545 23 1.35173135526774 33 3.0 70 1 0 3DFACE 8 lid_base 10 1.0777666229051 20 2.13191690534993 30 3.0 11 0.878679656440356 21 3.0 31 3.0 12 0.497732043121052 22 3.0 32 3.0 13 0.497732043121052 23 3.0 33 3.0 70 1 0 3DFACE 8 lid_base 10 0.878679656440356 20 3.0 30 3.0 11 1.0777666229051 21 2.13191690534993 31 3.0 12 1.14173848001224 22 2.17026016090475 32 3.0 13 1.14173848001224 23 2.17026016090475 33 3.0 70 13 0 3DFACE 8 lid_base 10 0.878679656440356 20 3.0 30 3.0 11 1.14173848001224 21 2.17026016090475 31 3.0 12 1.20916059140253 22 2.20214844470858 32 3.0 13 1.20916059140253 23 2.20214844470858 33 3.0 70 1 0 3DFACE 8 lid_base 10 1.20916059140253 20 2.20214844470858 30 3.0 11 1.20163144893051 21 3.0 31 3.0 12 0.878679656440356 22 3.0 32 3.0 13 0.878679656440356 23 3.0 33 3.0 70 1 0 3DFACE 8 lid_base 10 1.20163144893051 20 3.0 30 3.0 11 1.20916059140253 21 2.20214844470858 31 3.0 12 1.27938364528661 22 2.22727465515648 32 3.0 13 1.27938364528661 23 2.22727465515648 33 3.0 70 13 0 3DFACE 8 lid_base 10 1.20163144893051 20 3.0 30 3.0 11 1.27938364528661 21 2.22727465515648 31 3.0 12 1.35173135526774 22 2.24539681310645 32 3.0 13 1.35173135526774 23 2.24539681310645 33 3.0 70 1 0 3DFACE 8 lid_base 10 1.5 20 0.0 30 3.0 11 1.35173135526774 21 0.754603186893545 31 3.0 12 1.20163144893051 22 1.11022302462516e-16 32 3.0 13 1.20163144893051 23 1.11022302462516e-16 33 3.0 70 1 0 3DFACE 8 lid_base 10 1.35173135526774 20 0.754603186893545 30 3.0 11 1.5 21 0.0 31 3.0 12 1.42550697334953 22 0.743659607729131 32 3.0 13 1.42550697334953 23 0.743659607729131 33 3.0 70 3 0 3DFACE 8 lid_base 10 1.42550697334953 20 0.743659607729131 30 3.0 11 1.5 21 0.0 31 3.0 12 1.5 22 0.74 32 3.0 13 1.5 23 0.74 33 3.0 70 1 0 3DFACE 8 lid_base 10 0.205 20 0.0 30 3.0 11 0.962598846298224 21 0.962598846298224 31 3.0 12 0.0 22 0.0 32 3.0 13 0.0 23 0.0 33 3.0 70 1 0 3DFACE 8 lid_base 10 0.962598846298224 20 0.962598846298224 30 3.0 11 0.205 21 0.0 31 3.0 12 0.497732043121053 22 0.0 32 3.0 13 0.497732043121053 23 0.0 33 3.0 70 13 0 3DFACE 8 lid_base 10 0.962598846298224 20 0.962598846298224 30 3.0 11 0.497732043121053 21 0.0 31 3.0 12 1.01786110403563 22 0.91251205544432 32 3.0 13 1.01786110403563 23 0.91251205544432 33 3.0 70 3 0 3DFACE 8 lid_base 10 1.01786110403563 20 0.91251205544432 30 3.0 11 0.497732043121053 21 0.0 31 3.0 12 1.0777666229051 22 0.868083094650066 32 3.0 13 1.0777666229051 23 0.868083094650066 33 3.0 70 1 0 3DFACE 8 lid_base 10 0.878679656440358 20 1.66533453693773e-16 30 3.0 11 1.0777666229051 21 0.868083094650066 31 3.0 12 0.497732043121053 22 0.0 32 3.0 13 0.497732043121053 23 0.0 33 3.0 70 1 0 3DFACE 8 lid_base 10 1.0777666229051 20 0.868083094650066 30 3.0 11 0.878679656440358 21 1.66533453693773e-16 31 3.0 12 1.14173848001224 22 0.82973983909525 32 3.0 13 1.14173848001224 23 0.82973983909525 33 3.0 70 3 0 3DFACE 8 lid_base 10 1.14173848001224 20 0.82973983909525 30 3.0 11 0.878679656440358 21 1.66533453693773e-16 31 3.0 12 1.20916059140253 22 0.797851555291422 32 3.0 13 1.20916059140253 23 0.797851555291422 33 3.0 70 1 0 3DFACE 8 lid_base 10 1.20163144893051 20 1.11022302462516e-16 30 3.0 11 1.20916059140253 21 0.797851555291422 31 3.0 12 0.878679656440358 22 1.66533453693773e-16 32 3.0 13 0.878679656440358 23 1.66533453693773e-16 33 3.0 70 1 0 3DFACE 8 lid_base 10 1.20916059140253 20 0.797851555291422 30 3.0 11 1.20163144893051 21 1.11022302462516e-16 31 3.0 12 1.27938364528661 22 0.772725344843521 32 3.0 13 1.27938364528661 23 0.772725344843521 33 3.0 70 3 0 3DFACE 8 lid_base 10 1.27938364528661 20 0.772725344843521 30 3.0 11 1.20163144893051 21 1.11022302462516e-16 31 3.0 12 1.35173135526774 22 0.754603186893545 32 3.0 13 1.35173135526774 23 0.754603186893545 33 3.0 70 1 0 3DFACE 8 lid_base 10 1.85826151998776 20 2.17026016090475 30 3.0 11 2.12132034355964 21 3.0 31 3.0 12 1.79083940859747 22 2.20214844470858 32 3.0 13 1.79083940859747 23 2.20214844470858 33 3.0 70 1 0 3DFACE 8 lid_base 10 2.12132034355964 20 3.0 30 3.0 11 1.85826151998776 21 2.17026016090475 31 3.0 12 1.9222333770949 22 2.13191690534993 32 3.0 13 1.9222333770949 23 2.13191690534993 33 3.0 70 13 0 3DFACE 8 lid_base 10 2.12132034355964 20 3.0 30 3.0 11 1.9222333770949 21 2.13191690534993 31 3.0 12 2.50226795687895 22 3.0 32 3.0 13 2.50226795687895 23 3.0 33 3.0 70 1 0 3DFACE 8 lid_base 10 3.0 20 0.878679656440357 30 3.0 11 2.22727465515648 21 1.27938364528661 31 3.0 12 2.20214844470858 22 1.20916059140253 32 3.0 13 2.20214844470858 23 1.20916059140253 33 3.0 70 1 0 3DFACE 8 lid_base 10 2.22727465515648 20 1.27938364528661 30 3.0 11 3.0 21 0.878679656440357 31 3.0 12 2.24539681310646 22 1.35173135526774 32 3.0 13 2.24539681310646 23 1.35173135526774 33 3.0 70 3 0 3DFACE 8 lid_base 10 2.24539681310646 20 1.35173135526774 30 3.0 11 3.0 21 0.878679656440357 31 3.0 12 3.0 22 1.20163144893051 32 3.0 13 3.0 23 1.20163144893051 33 3.0 70 1 0 3DFACE 8 lid_base 10 2.50226795687895 20 0.0 30 3.0 11 1.98213889596437 21 0.91251205544432 31 3.0 12 1.9222333770949 22 0.868083094650066 32 3.0 13 1.9222333770949 23 0.868083094650066 33 3.0 70 1 0 3DFACE 8 lid_base 10 1.98213889596437 20 0.91251205544432 30 3.0 11 2.50226795687895 21 0.0 31 3.0 12 2.03740115370178 22 0.962598846298224 32 3.0 13 2.03740115370178 23 0.962598846298224 33 3.0 70 3 0 3DFACE 8 lid_base 10 2.03740115370178 20 0.962598846298224 30 3.0 11 2.50226795687895 21 0.0 31 3.0 12 3.0 22 0.0 32 3.0 13 3.0 23 0.0 33 3.0 70 3 0 3DFACE 8 lid_base 10 3.0 20 0.0 30 3.0 11 2.50226795687895 21 0.0 31 3.0 12 2.795 22 0.0 32 3.0 13 2.795 23 0.0 33 3.0 70 1 0 3DFACE 8 lid_base 10 0.74 20 1.5 30 3.0 11 0.0 21 1.79836855106949 31 3.0 12 0.0 22 1.5 32 3.0 13 0.0 23 1.5 33 3.0 70 1 0 3DFACE 8 lid_base 10 0.0 20 1.79836855106949 30 3.0 11 0.74 21 1.5 31 3.0 12 0.743659607729131 22 1.57449302665047 32 3.0 13 0.743659607729131 23 1.57449302665047 33 3.0 70 13 0 3DFACE 8 lid_base 10 0.0 20 1.79836855106949 30 3.0 11 0.743659607729131 21 1.57449302665047 31 3.0 12 0.754603186893545 22 1.64826864473226 32 3.0 13 0.754603186893545 23 1.64826864473226 33 3.0 70 1 0 3DFACE 8 lid_base 10 0.754603186893545 20 1.64826864473226 30 3.0 11 0.0 21 2.12132034355964 31 3.0 12 0.0 22 1.79836855106949 32 3.0 13 0.0 23 1.79836855106949 33 3.0 70 1 0 3DFACE 8 lid_base 10 0.0 20 2.12132034355964 30 3.0 11 0.754603186893545 21 1.64826864473226 31 3.0 12 0.772725344843521 22 1.72061635471339 32 3.0 13 0.772725344843521 23 1.72061635471339 33 3.0 70 13 0 3DFACE 8 lid_base 10 0.0 20 2.12132034355964 30 3.0 11 0.772725344843521 21 1.72061635471339 31 3.0 12 0.797851555291422 22 1.79083940859747 32 3.0 13 0.797851555291422 23 1.79083940859747 33 3.0 70 1 0 3DFACE 8 lid_base 10 2.17026016090475 20 1.85826151998776 30 3.0 11 3.0 21 2.50226795687895 31 3.0 12 2.13191690534993 22 1.9222333770949 32 3.0 13 2.13191690534993 23 1.9222333770949 33 3.0 70 1 0 3DFACE 8 lid_base 10 3.0 20 2.50226795687895 30 3.0 11 2.17026016090475 21 1.85826151998776 31 3.0 12 2.20214844470858 22 1.79083940859747 32 3.0 13 2.20214844470858 23 1.79083940859747 33 3.0 70 13 0 3DFACE 8 lid_base 10 3.0 20 2.50226795687895 30 3.0 11 2.20214844470858 21 1.79083940859747 31 3.0 12 3.0 22 2.12132034355964 32 3.0 13 3.0 23 2.12132034355964 33 3.0 70 1 0 3DFACE 8 lid_base 10 0.962598846298224 20 0.962598846298224 30 3.0 11 0.0 21 0.205 31 3.0 12 0.0 22 0.0 32 3.0 13 0.0 23 0.0 33 3.0 70 1 0 3DFACE 8 lid_base 10 0.0 20 0.205 30 3.0 11 0.962598846298224 21 0.962598846298224 31 3.0 12 0.0 22 0.497732043121051 32 3.0 13 0.0 23 0.497732043121051 33 3.0 70 3 0 3DFACE 8 lid_base 10 0.0 20 0.497732043121051 30 3.0 11 0.962598846298224 21 0.962598846298224 31 3.0 12 0.91251205544432 22 1.01786110403563 32 3.0 13 0.91251205544432 23 1.01786110403563 33 3.0 70 13 0 3DFACE 8 lid_base 10 0.0 20 0.497732043121051 30 3.0 11 0.91251205544432 21 1.01786110403563 31 3.0 12 0.868083094650066 22 1.0777666229051 32 3.0 13 0.868083094650066 23 1.0777666229051 33 3.0 70 1 0 3DFACE 8 lid_base 10 0.754603186893545 20 1.35173135526774 30 3.0 11 0.0 21 1.5 31 3.0 12 0.0 22 1.20163144893051 32 3.0 13 0.0 23 1.20163144893051 33 3.0 70 1 0 3DFACE 8 lid_base 10 0.0 20 1.5 30 3.0 11 0.754603186893545 21 1.35173135526774 31 3.0 12 0.743659607729131 22 1.42550697334953 32 3.0 13 0.743659607729131 23 1.42550697334953 33 3.0 70 13 0 3DFACE 8 lid_base 10 0.0 20 1.5 30 3.0 11 0.743659607729131 21 1.42550697334953 31 3.0 12 0.74 22 1.5 32 3.0 13 0.74 23 1.5 33 3.0 70 1 0 3DFACE 8 lid_base 10 0.743659607729131 20 1.42550697334953 30 3.0 11 0.743659607729131 21 1.57449302665047 31 3.0 12 0.74 22 1.5 32 3.0 13 0.74 23 1.5 33 3.0 70 1 0 3DFACE 8 lid_base 10 0.743659607729131 20 1.57449302665047 30 3.0 11 0.743659607729131 21 1.42550697334953 31 3.0 12 0.754603186893545 22 1.35173135526774 32 3.0 13 0.754603186893545 23 1.35173135526774 33 3.0 70 13 0 3DFACE 8 lid_base 10 0.743659607729131 20 1.57449302665047 30 3.0 11 0.754603186893545 21 1.35173135526774 31 3.0 12 0.754603186893545 22 1.64826864473226 32 3.0 13 0.754603186893545 23 1.64826864473226 33 3.0 70 3 0 3DFACE 8 lid_base 10 0.754603186893545 20 1.64826864473226 30 3.0 11 0.754603186893545 21 1.35173135526774 31 3.0 12 0.772725344843521 22 1.27938364528661 32 3.0 13 0.772725344843521 23 1.27938364528661 33 3.0 70 13 0 3DFACE 8 lid_base 10 0.754603186893545 20 1.64826864473226 30 3.0 11 0.772725344843521 21 1.27938364528661 31 3.0 12 0.772725344843521 22 1.72061635471339 32 3.0 13 0.772725344843521 23 1.72061635471339 33 3.0 70 3 0 3DFACE 8 lid_base 10 0.772725344843521 20 1.72061635471339 30 3.0 11 0.772725344843521 21 1.27938364528661 31 3.0 12 0.797851555291422 22 1.20916059140253 32 3.0 13 0.797851555291422 23 1.20916059140253 33 3.0 70 13 0 3DFACE 8 lid_base 10 0.772725344843521 20 1.72061635471339 30 3.0 11 0.797851555291422 21 1.20916059140253 31 3.0 12 0.797851555291422 22 1.79083940859747 32 3.0 13 0.797851555291422 23 1.79083940859747 33 3.0 70 3 0 3DFACE 8 lid_base 10 0.797851555291422 20 1.79083940859747 30 3.0 11 0.797851555291422 21 1.20916059140253 31 3.0 12 0.82973983909525 22 1.14173848001224 32 3.0 13 0.82973983909525 23 1.14173848001224 33 3.0 70 13 0 3DFACE 8 lid_base 10 0.797851555291422 20 1.79083940859747 30 3.0 11 0.82973983909525 21 1.14173848001224 31 3.0 12 0.82973983909525 22 1.85826151998776 32 3.0 13 0.82973983909525 23 1.85826151998776 33 3.0 70 3 0 3DFACE 8 lid_base 10 0.82973983909525 20 1.85826151998776 30 3.0 11 0.82973983909525 21 1.14173848001224 31 3.0 12 0.868083094650066 22 1.0777666229051 32 3.0 13 0.868083094650066 23 1.0777666229051 33 3.0 70 13 0 3DFACE 8 lid_base 10 0.82973983909525 20 1.85826151998776 30 3.0 11 0.868083094650066 21 1.0777666229051 31 3.0 12 0.868083094650066 22 1.9222333770949 32 3.0 13 0.868083094650066 23 1.9222333770949 33 3.0 70 3 0 3DFACE 8 lid_base 10 0.868083094650066 20 1.9222333770949 30 3.0 11 0.868083094650066 21 1.0777666229051 31 3.0 12 0.91251205544432 22 1.01786110403563 32 3.0 13 0.91251205544432 23 1.01786110403563 33 3.0 70 13 0 3DFACE 8 lid_base 10 0.868083094650066 20 1.9222333770949 30 3.0 11 0.91251205544432 21 1.01786110403563 31 3.0 12 0.91251205544432 22 1.98213889596437 32 3.0 13 0.91251205544432 23 1.98213889596437 33 3.0 70 3 0 3DFACE 8 lid_base 10 0.91251205544432 20 1.98213889596437 30 3.0 11 0.91251205544432 21 1.01786110403563 31 3.0 12 0.962598846298224 22 0.962598846298224 32 3.0 13 0.962598846298224 23 0.962598846298224 33 3.0 70 13 0 3DFACE 8 lid_base 10 0.91251205544432 20 1.98213889596437 30 3.0 11 0.962598846298224 21 0.962598846298224 31 3.0 12 0.962598846298224 22 2.03740115370178 32 3.0 13 0.962598846298224 23 2.03740115370178 33 3.0 70 3 0 3DFACE 8 lid_base 10 0.962598846298224 20 2.03740115370178 30 3.0 11 0.962598846298224 21 0.962598846298224 31 3.0 12 1.01786110403563 22 0.91251205544432 32 3.0 13 1.01786110403563 23 0.91251205544432 33 3.0 70 13 0 3DFACE 8 lid_base 10 0.962598846298224 20 2.03740115370178 30 3.0 11 1.01786110403563 21 0.91251205544432 31 3.0 12 1.01786110403563 22 2.08748794455568 32 3.0 13 1.01786110403563 23 2.08748794455568 33 3.0 70 3 0 3DFACE 8 lid_base 10 1.01786110403563 20 2.08748794455568 30 3.0 11 1.01786110403563 21 0.91251205544432 31 3.0 12 1.0777666229051 22 2.13191690534993 32 3.0 13 1.0777666229051 23 2.13191690534993 33 3.0 70 3 0 3DFACE 8 lid_base 10 1.0777666229051 20 2.13191690534993 30 3.0 11 1.01786110403563 21 0.91251205544432 31 3.0 12 1.0777666229051 22 0.868083094650066 32 3.0 13 1.0777666229051 23 0.868083094650066 33 3.0 70 13 0 3DFACE 8 lid_base 10 1.0777666229051 20 2.13191690534993 30 3.0 11 1.0777666229051 21 0.868083094650066 31 3.0 12 1.14173848001224 22 0.82973983909525 32 3.0 13 1.14173848001224 23 0.82973983909525 33 3.0 70 13 0 3DFACE 8 lid_base 10 1.0777666229051 20 2.13191690534993 30 3.0 11 1.14173848001224 21 0.82973983909525 31 3.0 12 1.14173848001224 22 2.17026016090475 32 3.0 13 1.14173848001224 23 2.17026016090475 33 3.0 70 3 0 3DFACE 8 lid_base 10 1.14173848001224 20 2.17026016090475 30 3.0 11 1.14173848001224 21 0.82973983909525 31 3.0 12 1.20916059140253 22 2.20214844470858 32 3.0 13 1.20916059140253 23 2.20214844470858 33 3.0 70 3 0 3DFACE 8 lid_base 10 1.20916059140253 20 2.20214844470858 30 3.0 11 1.14173848001224 21 0.82973983909525 31 3.0 12 1.20916059140253 22 0.797851555291422 32 3.0 13 1.20916059140253 23 0.797851555291422 33 3.0 70 13 0 3DFACE 8 lid_base 10 1.20916059140253 20 2.20214844470858 30 3.0 11 1.20916059140253 21 0.797851555291422 31 3.0 12 1.27938364528661 22 0.772725344843521 32 3.0 13 1.27938364528661 23 0.772725344843521 33 3.0 70 13 0 3DFACE 8 lid_base 10 1.20916059140253 20 2.20214844470858 30 3.0 11 1.27938364528661 21 0.772725344843521 31 3.0 12 1.27938364528661 22 2.22727465515648 32 3.0 13 1.27938364528661 23 2.22727465515648 33 3.0 70 3 0 3DFACE 8 lid_base 10 1.27938364528661 20 2.22727465515648 30 3.0 11 1.27938364528661 21 0.772725344843521 31 3.0 12 1.35173135526774 22 0.754603186893545 32 3.0 13 1.35173135526774 23 0.754603186893545 33 3.0 70 13 0 3DFACE 8 lid_base 10 1.27938364528661 20 2.22727465515648 30 3.0 11 1.35173135526774 21 0.754603186893545 31 3.0 12 1.35173135526774 22 2.24539681310645 32 3.0 13 1.35173135526774 23 2.24539681310645 33 3.0 70 3 0 3DFACE 8 lid_base 10 1.35173135526774 20 2.24539681310645 30 3.0 11 1.35173135526774 21 0.754603186893545 31 3.0 12 1.42550697334953 22 0.743659607729131 32 3.0 13 1.42550697334953 23 0.743659607729131 33 3.0 70 13 0 3DFACE 8 lid_base 10 1.35173135526774 20 2.24539681310645 30 3.0 11 1.42550697334953 21 0.743659607729131 31 3.0 12 1.42550697334953 22 2.25634039227087 32 3.0 13 1.42550697334953 23 2.25634039227087 33 3.0 70 3 0 3DFACE 8 lid_base 10 1.42550697334953 20 2.25634039227087 30 3.0 11 1.42550697334953 21 0.743659607729131 31 3.0 12 1.5 22 0.74 32 3.0 13 1.5 23 0.74 33 3.0 70 13 0 3DFACE 8 lid_base 10 1.42550697334953 20 2.25634039227087 30 3.0 11 1.5 21 0.74 31 3.0 12 1.5 22 2.26 32 3.0 13 1.5 23 2.26 33 3.0 70 3 0 3DFACE 8 lid_base 10 1.5 20 2.26 30 3.0 11 1.5 21 0.74 31 3.0 12 1.57449302665047 22 0.743659607729131 32 3.0 13 1.57449302665047 23 0.743659607729131 33 3.0 70 13 0 3DFACE 8 lid_base 10 1.5 20 2.26 30 3.0 11 1.57449302665047 21 0.743659607729131 31 3.0 12 1.57449302665047 22 2.25634039227087 32 3.0 13 1.57449302665047 23 2.25634039227087 33 3.0 70 3 0 3DFACE 8 lid_base 10 1.57449302665047 20 2.25634039227087 30 3.0 11 1.57449302665047 21 0.743659607729131 31 3.0 12 1.64826864473226 22 0.754603186893545 32 3.0 13 1.64826864473226 23 0.754603186893545 33 3.0 70 13 0 3DFACE 8 lid_base 10 1.57449302665047 20 2.25634039227087 30 3.0 11 1.64826864473226 21 0.754603186893545 31 3.0 12 1.64826864473226 22 2.24539681310645 32 3.0 13 1.64826864473226 23 2.24539681310645 33 3.0 70 3 0 3DFACE 8 lid_base 10 1.64826864473226 20 2.24539681310645 30 3.0 11 1.64826864473226 21 0.754603186893545 31 3.0 12 1.72061635471339 22 0.772725344843521 32 3.0 13 1.72061635471339 23 0.772725344843521 33 3.0 70 13 0 3DFACE 8 lid_base 10 1.64826864473226 20 2.24539681310645 30 3.0 11 1.72061635471339 21 0.772725344843521 31 3.0 12 1.72061635471339 22 2.22727465515648 32 3.0 13 1.72061635471339 23 2.22727465515648 33 3.0 70 3 0 3DFACE 8 lid_base 10 1.72061635471339 20 2.22727465515648 30 3.0 11 1.72061635471339 21 0.772725344843521 31 3.0 12 1.79083940859747 22 0.797851555291422 32 3.0 13 1.79083940859747 23 0.797851555291422 33 3.0 70 13 0 3DFACE 8 lid_base 10 1.72061635471339 20 2.22727465515648 30 3.0 11 1.79083940859747 21 0.797851555291422 31 3.0 12 1.79083940859747 22 2.20214844470858 32 3.0 13 1.79083940859747 23 2.20214844470858 33 3.0 70 3 0 3DFACE 8 lid_base 10 1.79083940859747 20 2.20214844470858 30 3.0 11 1.79083940859747 21 0.797851555291422 31 3.0 12 1.85826151998776 22 0.82973983909525 32 3.0 13 1.85826151998776 23 0.82973983909525 33 3.0 70 13 0 3DFACE 8 lid_base 10 1.79083940859747 20 2.20214844470858 30 3.0 11 1.85826151998776 21 0.82973983909525 31 3.0 12 1.85826151998776 22 2.17026016090475 32 3.0 13 1.85826151998776 23 2.17026016090475 33 3.0 70 3 0 3DFACE 8 lid_base 10 1.85826151998776 20 2.17026016090475 30 3.0 11 1.85826151998776 21 0.82973983909525 31 3.0 12 1.9222333770949 22 0.868083094650066 32 3.0 13 1.9222333770949 23 0.868083094650066 33 3.0 70 13 0 3DFACE 8 lid_base 10 1.85826151998776 20 2.17026016090475 30 3.0 11 1.9222333770949 21 0.868083094650066 31 3.0 12 1.9222333770949 22 2.13191690534993 32 3.0 13 1.9222333770949 23 2.13191690534993 33 3.0 70 3 0 3DFACE 8 lid_base 10 1.9222333770949 20 2.13191690534993 30 3.0 11 1.9222333770949 21 0.868083094650066 31 3.0 12 1.98213889596437 22 2.08748794455568 32 3.0 13 1.98213889596437 23 2.08748794455568 33 3.0 70 3 0 3DFACE 8 lid_base 10 1.98213889596437 20 2.08748794455568 30 3.0 11 1.9222333770949 21 0.868083094650066 31 3.0 12 1.98213889596437 22 0.91251205544432 32 3.0 13 1.98213889596437 23 0.91251205544432 33 3.0 70 13 0 3DFACE 8 lid_base 10 1.98213889596437 20 2.08748794455568 30 3.0 11 1.98213889596437 21 0.91251205544432 31 3.0 12 2.03740115370178 22 0.962598846298224 32 3.0 13 2.03740115370178 23 0.962598846298224 33 3.0 70 13 0 3DFACE 8 lid_base 10 1.98213889596437 20 2.08748794455568 30 3.0 11 2.03740115370178 21 0.962598846298224 31 3.0 12 2.03740115370178 22 2.03740115370178 32 3.0 13 2.03740115370178 23 2.03740115370178 33 3.0 70 3 0 3DFACE 8 lid_base 10 2.03740115370178 20 2.03740115370178 30 3.0 11 2.03740115370178 21 0.962598846298224 31 3.0 12 2.08748794455568 22 1.01786110403563 32 3.0 13 2.08748794455568 23 1.01786110403563 33 3.0 70 13 0 3DFACE 8 lid_base 10 2.03740115370178 20 2.03740115370178 30 3.0 11 2.08748794455568 21 1.01786110403563 31 3.0 12 2.08748794455568 22 1.98213889596437 32 3.0 13 2.08748794455568 23 1.98213889596437 33 3.0 70 3 0 3DFACE 8 lid_base 10 2.08748794455568 20 1.98213889596437 30 3.0 11 2.08748794455568 21 1.01786110403563 31 3.0 12 2.13191690534993 22 1.0777666229051 32 3.0 13 2.13191690534993 23 1.0777666229051 33 3.0 70 13 0 3DFACE 8 lid_base 10 2.08748794455568 20 1.98213889596437 30 3.0 11 2.13191690534993 21 1.0777666229051 31 3.0 12 2.13191690534993 22 1.9222333770949 32 3.0 13 2.13191690534993 23 1.9222333770949 33 3.0 70 3 0 3DFACE 8 lid_base 10 2.13191690534993 20 1.9222333770949 30 3.0 11 2.13191690534993 21 1.0777666229051 31 3.0 12 2.17026016090475 22 1.14173848001224 32 3.0 13 2.17026016090475 23 1.14173848001224 33 3.0 70 13 0 3DFACE 8 lid_base 10 2.13191690534993 20 1.9222333770949 30 3.0 11 2.17026016090475 21 1.14173848001224 31 3.0 12 2.17026016090475 22 1.85826151998776 32 3.0 13 2.17026016090475 23 1.85826151998776 33 3.0 70 3 0 3DFACE 8 lid_base 10 2.17026016090475 20 1.85826151998776 30 3.0 11 2.17026016090475 21 1.14173848001224 31 3.0 12 2.20214844470858 22 1.20916059140253 32 3.0 13 2.20214844470858 23 1.20916059140253 33 3.0 70 13 0 3DFACE 8 lid_base 10 2.17026016090475 20 1.85826151998776 30 3.0 11 2.20214844470858 21 1.20916059140253 31 3.0 12 2.20214844470858 22 1.79083940859747 32 3.0 13 2.20214844470858 23 1.79083940859747 33 3.0 70 3 0 3DFACE 8 lid_base 10 2.20214844470858 20 1.79083940859747 30 3.0 11 2.20214844470858 21 1.20916059140253 31 3.0 12 2.22727465515648 22 1.27938364528661 32 3.0 13 2.22727465515648 23 1.27938364528661 33 3.0 70 13 0 3DFACE 8 lid_base 10 2.20214844470858 20 1.79083940859747 30 3.0 11 2.22727465515648 21 1.27938364528661 31 3.0 12 2.22727465515648 22 1.72061635471339 32 3.0 13 2.22727465515648 23 1.72061635471339 33 3.0 70 3 0 3DFACE 8 lid_base 10 2.22727465515648 20 1.72061635471339 30 3.0 11 2.22727465515648 21 1.27938364528661 31 3.0 12 2.24539681310646 22 1.35173135526774 32 3.0 13 2.24539681310646 23 1.35173135526774 33 3.0 70 13 0 3DFACE 8 lid_base 10 2.22727465515648 20 1.72061635471339 30 3.0 11 2.24539681310646 21 1.35173135526774 31 3.0 12 2.24539681310645 22 1.64826864473226 32 3.0 13 2.24539681310645 23 1.64826864473226 33 3.0 70 3 0 3DFACE 8 lid_base 10 2.24539681310645 20 1.64826864473226 30 3.0 11 2.24539681310646 21 1.35173135526774 31 3.0 12 2.25634039227087 22 1.57449302665047 32 3.0 13 2.25634039227087 23 1.57449302665047 33 3.0 70 3 0 3DFACE 8 lid_base 10 2.25634039227087 20 1.57449302665047 30 3.0 11 2.24539681310646 21 1.35173135526774 31 3.0 12 2.25634039227087 22 1.42550697334953 32 3.0 13 2.25634039227087 23 1.42550697334953 33 3.0 70 13 0 3DFACE 8 lid_base 10 2.25634039227087 20 1.57449302665047 30 3.0 11 2.25634039227087 21 1.42550697334953 31 3.0 12 2.26 22 1.5 32 3.0 13 2.26 23 1.5 33 3.0 70 1 0 3DFACE 8 lid_base 10 0.797851555291422 20 1.79083940859747 30 3.0 11 0.0 21 2.50226795687895 31 3.0 12 0.0 22 2.12132034355964 32 3.0 13 0.0 23 2.12132034355964 33 3.0 70 1 0 3DFACE 8 lid_base 10 0.0 20 2.50226795687895 30 3.0 11 0.797851555291422 21 1.79083940859747 31 3.0 12 0.82973983909525 22 1.85826151998776 32 3.0 13 0.82973983909525 23 1.85826151998776 33 3.0 70 13 0 3DFACE 8 lid_base 10 0.0 20 2.50226795687895 30 3.0 11 0.82973983909525 21 1.85826151998776 31 3.0 12 0.868083094650066 22 1.9222333770949 32 3.0 13 0.868083094650066 23 1.9222333770949 33 3.0 70 1 0 3DFACE 8 lid_base 10 0.0 20 3.0 30 2.795 11 0.205 21 3.0 31 1.5 12 0.0 22 3.0 32 1.5 13 0.0 23 3.0 33 1.5 70 1 0 3DFACE 8 lid_base 10 0.205 20 3.0 30 1.5 11 0.0 21 3.0 31 2.795 12 0.205 22 3.0 32 2.795 13 0.205 23 3.0 33 2.795 70 1 0 3DFACE 8 lid_base 10 0.0 20 3.0 30 1.5 11 0.205 21 3.0 31 0.205 12 0.0 22 3.0 32 0.205 13 0.0 23 3.0 33 0.205 70 1 0 3DFACE 8 lid_base 10 0.205 20 3.0 30 0.205 11 0.0 21 3.0 31 1.5 12 0.205 22 3.0 32 1.5 13 0.205 23 3.0 33 1.5 70 1 0 3DFACE 8 lid_base 10 2.795 20 3.0 30 0.205 11 3.0 21 3.0 31 0.0 12 2.795 22 3.0 32 0.0 13 2.795 23 3.0 33 0.0 70 0 0 3DFACE 8 lid_base 10 2.795 20 3.0 30 1.5 11 3.0 21 3.0 31 0.205 12 2.795 22 3.0 32 0.205 13 2.795 23 3.0 33 0.205 70 1 0 3DFACE 8 lid_base 10 3.0 20 3.0 30 0.205 11 2.795 21 3.0 31 1.5 12 3.0 22 3.0 32 1.5 13 3.0 23 3.0 33 1.5 70 1 0 3DFACE 8 lid_base 10 2.795 20 3.0 30 2.795 11 3.0 21 3.0 31 1.5 12 2.795 22 3.0 32 1.5 13 2.795 23 3.0 33 1.5 70 1 0 3DFACE 8 lid_base 10 3.0 20 3.0 30 1.5 11 2.795 21 3.0 31 2.795 12 3.0 22 3.0 32 2.795 13 3.0 23 3.0 33 2.795 70 1 0 3DFACE 8 lid_base 10 3.0 20 3.0 30 3.0 11 3.0 21 3.0 31 2.795 12 2.795 22 3.0 32 2.795 13 2.795 23 3.0 33 2.795 70 0 0 3DFACE 8 lid_base 10 1.5 20 3.0 30 0.205 11 1.79836855106949 21 3.0 31 0.0 12 1.5 22 3.0 32 0.0 13 1.5 23 3.0 33 0.0 70 1 0 3DFACE 8 lid_base 10 1.79836855106949 20 3.0 30 0.0 11 1.5 21 3.0 31 0.205 12 2.12132034355964 22 3.0 32 0.0 13 2.12132034355964 23 3.0 33 0.0 70 3 0 3DFACE 8 lid_base 10 2.12132034355964 20 3.0 30 0.0 11 1.5 21 3.0 31 0.205 12 2.50226795687895 22 3.0 32 0.0 13 2.50226795687895 23 3.0 33 0.0 70 3 0 3DFACE 8 lid_base 10 2.50226795687895 20 3.0 30 0.0 11 1.5 21 3.0 31 0.205 12 2.795 22 3.0 32 0.0 13 2.795 23 3.0 33 0.0 70 3 0 3DFACE 8 lid_base 10 2.795 20 3.0 30 0.0 11 1.5 21 3.0 31 0.205 12 2.795 22 3.0 32 0.205 13 2.795 23 3.0 33 0.205 70 1 0 3DFACE 8 lid_base 10 0.205 20 3.0 30 0.205 11 0.497732043121052 21 3.0 31 0.0 12 0.205 22 3.0 32 0.0 13 0.205 23 3.0 33 0.0 70 1 0 3DFACE 8 lid_base 10 0.497732043121052 20 3.0 30 0.0 11 0.205 21 3.0 31 0.205 12 0.878679656440356 22 3.0 32 0.0 13 0.878679656440356 23 3.0 33 0.0 70 3 0 3DFACE 8 lid_base 10 0.878679656440356 20 3.0 30 0.0 11 0.205 21 3.0 31 0.205 12 1.20163144893051 22 3.0 32 0.0 13 1.20163144893051 23 3.0 33 0.0 70 3 0 3DFACE 8 lid_base 10 1.20163144893051 20 3.0 30 0.0 11 0.205 21 3.0 31 0.205 12 1.5 22 3.0 32 0.0 13 1.5 23 3.0 33 0.0 70 3 0 3DFACE 8 lid_base 10 1.5 20 3.0 30 0.0 11 0.205 21 3.0 31 0.205 12 1.5 22 3.0 32 0.205 13 1.5 23 3.0 33 0.205 70 1 0 3DFACE 8 lid_base 10 0.0 20 3.0 30 3.0 11 0.205 21 3.0 31 2.795 12 0.0 22 3.0 32 2.795 13 0.0 23 3.0 33 2.795 70 0 0 3DFACE 8 lid_base 10 2.795 20 3.0 30 1.5 11 2.795 21 3.0 31 0.205 12 2.1475 22 3.0 32 0.8525 13 2.1475 23 3.0 33 0.8525 70 0 0 3DFACE 8 lid_base 10 0.205 20 3.0 30 3.0 11 1.5 21 3.0 31 2.795 12 0.205 22 3.0 32 2.795 13 0.205 23 3.0 33 2.795 70 1 0 3DFACE 8 lid_base 10 1.5 20 3.0 30 2.795 11 0.205 21 3.0 31 3.0 12 0.497732043121052 22 3.0 32 3.0 13 0.497732043121052 23 3.0 33 3.0 70 13 0 3DFACE 8 lid_base 10 0.497732043121052 20 3.0 30 3.0 11 1.5 21 3.0 31 3.0 12 1.5 22 3.0 32 2.795 13 1.5 23 3.0 33 2.795 70 13 0 3DFACE 8 lid_base 10 1.5 20 3.0 30 3.0 11 0.497732043121052 21 3.0 31 3.0 12 0.878679656440356 22 3.0 32 3.0 13 0.878679656440356 23 3.0 33 3.0 70 13 0 3DFACE 8 lid_base 10 1.5 20 3.0 30 3.0 11 0.878679656440356 21 3.0 31 3.0 12 1.20163144893051 22 3.0 32 3.0 13 1.20163144893051 23 3.0 33 3.0 70 1 0 3DFACE 8 lid_base 10 1.5 20 3.0 30 3.0 11 2.795 21 3.0 31 2.795 12 1.5 22 3.0 32 2.795 13 1.5 23 3.0 33 2.795 70 1 0 3DFACE 8 lid_base 10 2.795 20 3.0 30 2.795 11 1.5 21 3.0 31 3.0 12 2.50226795687895 22 3.0 32 3.0 13 2.50226795687895 23 3.0 33 3.0 70 15 0 3DFACE 8 lid_base 10 2.795 20 3.0 30 2.795 11 2.50226795687895 21 3.0 31 3.0 12 2.795 22 3.0 32 3.0 13 2.795 23 3.0 33 3.0 70 1 0 3DFACE 8 lid_base 10 2.50226795687895 20 3.0 30 3.0 11 1.5 21 3.0 31 3.0 12 1.79836855106949 22 3.0 32 3.0 13 1.79836855106949 23 3.0 33 3.0 70 13 0 3DFACE 8 lid_base 10 2.50226795687895 20 3.0 30 3.0 11 1.79836855106949 21 3.0 31 3.0 12 2.12132034355964 22 3.0 32 3.0 13 2.12132034355964 23 3.0 33 3.0 70 1 0 3DFACE 8 lid_base 10 2.1475 20 3.0 30 0.8525 11 2.795 21 3.0 31 0.205 12 1.5 22 3.0 32 0.205 13 1.5 23 3.0 33 0.205 70 0 0 3DFACE 8 lid_base 10 0.205 20 3.0 30 3.0 11 0.205 21 3.0 31 2.795 12 0.0 22 3.0 32 3.0 13 0.0 23 3.0 33 3.0 70 0 0 3DFACE 8 lid_base 10 0.205 20 3.0 30 2.795 11 0.8525 21 3.0 31 2.1475 12 0.205 22 3.0 32 1.5 13 0.205 23 3.0 33 1.5 70 0 0 3DFACE 8 lid_base 10 2.795 20 3.0 30 1.5 11 2.1475 21 3.0 31 0.8525 12 1.5 22 3.0 32 1.5 13 1.5 23 3.0 33 1.5 70 0 0 3DFACE 8 lid_base 10 0.8525 20 3.0 30 0.8525 11 1.5 21 3.0 31 0.205 12 0.205 22 3.0 32 0.205 13 0.205 23 3.0 33 0.205 70 0 0 3DFACE 8 lid_base 10 2.795 20 3.0 30 2.795 11 2.795 21 3.0 31 1.5 12 2.1475 22 3.0 32 2.1475 13 2.1475 23 3.0 33 2.1475 70 0 0 3DFACE 8 lid_base 10 1.5 20 3.0 30 1.5 11 1.5 21 3.0 31 0.205 12 0.8525 22 3.0 32 0.8525 13 0.8525 23 3.0 33 0.8525 70 0 0 3DFACE 8 lid_base 10 3.0 20 3.0 30 0.205 11 3.0 21 3.0 31 0.0 12 2.795 22 3.0 32 0.205 13 2.795 23 3.0 33 0.205 70 0 0 3DFACE 8 lid_base 10 2.795 20 3.0 30 2.795 11 2.1475 21 3.0 31 2.1475 12 1.5 22 3.0 32 2.795 13 1.5 23 3.0 33 2.795 70 0 0 3DFACE 8 lid_base 10 1.5 20 3.0 30 2.795 11 0.8525 21 3.0 31 2.1475 12 0.205 22 3.0 32 2.795 13 0.205 23 3.0 33 2.795 70 0 0 3DFACE 8 lid_base 10 0.205 20 3.0 30 1.5 11 0.8525 21 3.0 31 0.8525 12 0.205 22 3.0 32 0.205 13 0.205 23 3.0 33 0.205 70 0 0 3DFACE 8 lid_base 10 1.5 20 3.0 30 1.5 11 0.8525 21 3.0 31 0.8525 12 0.205 22 3.0 32 1.5 13 0.205 23 3.0 33 1.5 70 0 0 3DFACE 8 lid_base 10 1.5 20 3.0 30 2.795 11 1.5 21 3.0 31 1.5 12 0.8525 22 3.0 32 2.1475 13 0.8525 23 3.0 33 2.1475 70 0 0 3DFACE 8 lid_base 10 0.205 20 3.0 30 0.205 11 0.0 21 3.0 31 0.0 12 0.0 22 3.0 32 0.205 13 0.0 23 3.0 33 0.205 70 0 0 3DFACE 8 lid_base 10 2.795 20 3.0 30 3.0 11 3.0 21 3.0 31 3.0 12 2.795 22 3.0 32 2.795 13 2.795 23 3.0 33 2.795 70 0 0 3DFACE 8 lid_base 10 1.5 20 3.0 30 2.795 11 2.1475 21 3.0 31 2.1475 12 1.5 22 3.0 32 1.5 13 1.5 23 3.0 33 1.5 70 0 0 3DFACE 8 lid_base 10 1.5 20 3.0 30 1.5 11 2.1475 21 3.0 31 0.8525 12 1.5 22 3.0 32 0.205 13 1.5 23 3.0 33 0.205 70 0 0 3DFACE 8 lid_base 10 2.1475 20 3.0 30 2.1475 11 2.795 21 3.0 31 1.5 12 1.5 22 3.0 32 1.5 13 1.5 23 3.0 33 1.5 70 0 0 3DFACE 8 lid_base 10 0.8525 20 3.0 30 2.1475 11 1.5 21 3.0 31 1.5 12 0.205 22 3.0 32 1.5 13 0.205 23 3.0 33 1.5 70 0 0 3DFACE 8 lid_base 10 0.205 20 0.0 30 2.795 11 0.205 21 0.0 31 1.5 12 0.8525 22 0.0 32 2.1475 13 0.8525 23 0.0 33 2.1475 70 0 0 3DFACE 8 lid_base 10 2.1475 20 0.0 30 0.8525 11 1.5 21 0.0 31 0.205 12 2.795 22 0.0 32 0.205 13 2.795 23 0.0 33 0.205 70 0 0 3DFACE 8 lid_base 10 0.0 20 0.0 30 3.0 11 0.0 21 0.0 31 2.795 12 0.205 22 0.0 32 2.795 13 0.205 23 0.0 33 2.795 70 0 0 3DFACE 8 lid_base 10 2.795 20 0.0 30 0.205 11 2.795 21 0.0 31 0.0 12 3.0 22 0.0 32 0.0 13 3.0 23 0.0 33 0.0 70 0 0 3DFACE 8 lid_base 10 0.205 20 0.0 30 0.205 11 0.0 21 0.0 31 0.0 12 0.205 22 0.0 32 0.0 13 0.205 23 0.0 33 0.0 70 0 0 3DFACE 8 lid_base 10 2.795 20 0.0 30 2.795 11 2.1475 21 0.0 31 2.1475 12 2.795 22 0.0 32 1.5 13 2.795 23 0.0 33 1.5 70 0 0 3DFACE 8 lid_base 10 0.8525 20 0.0 30 0.8525 11 0.205 21 0.0 31 0.205 12 1.5 22 0.0 32 0.205 13 1.5 23 0.0 33 0.205 70 0 0 3DFACE 8 lid_base 10 3.0 20 0.0 30 3.0 11 2.795 21 0.0 31 2.795 12 3.0 22 0.0 32 2.795 13 3.0 23 0.0 33 2.795 70 0 0 3DFACE 8 lid_base 10 1.5 20 0.25 30 0.455 11 0.8525 21 0.0 31 0.8525 12 1.5 22 0.0 32 0.205 13 1.5 23 0.0 33 0.205 70 1 0 3DFACE 8 lid_base 10 0.8525 20 0.0 30 0.8525 11 1.5 21 0.25 31 0.455 12 0.9775 22 0.25 32 0.9775 13 0.9775 23 0.25 33 0.9775 70 1 0 3DFACE 8 lid_base 10 1.5 20 0.25 30 2.545 11 2.1475 21 0.0 31 2.1475 12 1.5 22 0.0 32 2.795 13 1.5 23 0.0 33 2.795 70 1 0 3DFACE 8 lid_base 10 2.1475 20 0.0 30 2.1475 11 1.5 21 0.25 31 2.545 12 2.0225 22 0.25 32 2.0225 13 2.0225 23 0.25 33 2.0225 70 1 0 3DFACE 8 lid_base 10 2.795 20 0.0 30 1.5 11 2.0225 21 0.25 31 0.9775 12 2.1475 22 0.0 32 0.8525 13 2.1475 23 0.0 33 0.8525 70 1 0 3DFACE 8 lid_base 10 2.0225 20 0.25 30 0.9775 11 2.795 21 0.0 31 1.5 12 2.545 22 0.25 32 1.5 13 2.545 23 0.25 33 1.5 70 1 0 LINE 8 lid_base 10 3.0 20 1.5 30 1.5 11 3.0 21 0.205 31 1.5 0 LINE 8 lid_base 10 3.0 20 0.205 30 2.795 11 3.0 21 1.5 31 1.5 0 LINE 8 lid_base 10 3.0 20 1.5 30 2.795 11 3.0 21 1.5 31 1.5 0 LINE 8 lid_base 10 3.0 20 2.795 30 2.795 11 3.0 21 1.5 31 1.5 0 LINE 8 lid_base 10 3.0 20 2.795 30 1.5 11 3.0 21 1.5 31 1.5 0 LINE 8 lid_base 10 3.0 20 1.5 30 1.5 11 3.0 21 2.795 31 0.205 0 LINE 8 lid_base 10 3.0 20 1.5 30 1.5 11 3.0 21 0.205 31 0.205 0 LINE 8 lid_base 10 3.0 20 1.5 30 1.5 11 3.0 21 1.5 31 0.205 0 3DFACE 8 lid_base 10 3.0 20 3.0 30 1.5 11 3.0 21 2.795 31 2.795 12 3.0 22 2.795 32 1.5 13 3.0 23 2.795 33 1.5 70 1 0 3DFACE 8 lid_base 10 3.0 20 2.795 30 2.795 11 3.0 21 3.0 31 1.5 12 3.0 22 3.0 32 2.795 13 3.0 23 3.0 33 2.795 70 1 0 3DFACE 8 lid_base 10 3.0 20 1.5 30 2.795 11 3.0 21 0.205 31 3.0 12 3.0 22 0.205 32 2.795 13 3.0 23 0.205 33 2.795 70 1 0 3DFACE 8 lid_base 10 3.0 20 0.205 30 3.0 11 3.0 21 1.5 31 2.795 12 3.0 22 0.497732043121051 32 3.0 13 3.0 23 0.497732043121051 33 3.0 70 3 0 3DFACE 8 lid_base 10 3.0 20 0.497732043121051 30 3.0 11 3.0 21 1.5 31 2.795 12 3.0 22 0.878679656440357 32 3.0 13 3.0 23 0.878679656440357 33 3.0 70 3 0 3DFACE 8 lid_base 10 3.0 20 0.878679656440357 30 3.0 11 3.0 21 1.5 31 2.795 12 3.0 22 1.20163144893051 32 3.0 13 3.0 23 1.20163144893051 33 3.0 70 3 0 3DFACE 8 lid_base 10 3.0 20 1.20163144893051 30 3.0 11 3.0 21 1.5 31 2.795 12 3.0 22 1.5 32 3.0 13 3.0 23 1.5 33 3.0 70 1 0 3DFACE 8 lid_base 10 3.0 20 0.205 30 3.0 11 3.0 21 0.0 31 3.0 12 3.0 22 0.205 32 2.795 13 3.0 23 0.205 33 2.795 70 0 0 3DFACE 8 lid_base 10 3.0 20 3.0 30 0.205 11 3.0 21 2.795 31 0.205 12 3.0 22 3.0 32 0.0 13 3.0 23 3.0 33 0.0 70 0 0 3DFACE 8 lid_base 10 3.0 20 0.205 30 0.205 11 3.0 21 0.0 31 0.205 12 3.0 22 0.0 32 0.0 13 3.0 23 0.0 33 0.0 70 0 0 3DFACE 8 lid_base 10 3.0 20 0.205 30 0.205 11 3.0 21 0.0 31 1.5 12 3.0 22 0.0 32 0.205 13 3.0 23 0.0 33 0.205 70 1 0 3DFACE 8 lid_base 10 3.0 20 0.0 30 1.5 11 3.0 21 0.205 31 0.205 12 3.0 22 0.205 32 1.5 13 3.0 23 0.205 33 1.5 70 1 0 3DFACE 8 lid_base 10 3.0 20 3.0 30 3.0 11 3.0 21 2.795 31 2.795 12 3.0 22 3.0 32 2.795 13 3.0 23 3.0 33 2.795 70 0 0 3DFACE 8 lid_base 10 3.0 20 0.205 30 1.5 11 3.0 21 0.0 31 2.795 12 3.0 22 0.0 32 1.5 13 3.0 23 0.0 33 1.5 70 1 0 3DFACE 8 lid_base 10 3.0 20 0.0 30 2.795 11 3.0 21 0.205 31 1.5 12 3.0 22 0.205 32 2.795 13 3.0 23 0.205 33 2.795 70 1 0 3DFACE 8 lid_base 10 3.0 20 2.795 30 2.795 11 3.0 21 1.5 31 3.0 12 3.0 22 1.5 32 2.795 13 3.0 23 1.5 33 2.795 70 1 0 3DFACE 8 lid_base 10 3.0 20 1.5 30 3.0 11 3.0 21 2.795 31 2.795 12 3.0 22 1.79836855106949 32 3.0 13 3.0 23 1.79836855106949 33 3.0 70 3 0 3DFACE 8 lid_base 10 3.0 20 1.79836855106949 30 3.0 11 3.0 21 2.795 31 2.795 12 3.0 22 2.12132034355964 32 3.0 13 3.0 23 2.12132034355964 33 3.0 70 3 0 3DFACE 8 lid_base 10 3.0 20 2.12132034355964 30 3.0 11 3.0 21 2.795 31 2.795 12 3.0 22 2.50226795687895 32 3.0 13 3.0 23 2.50226795687895 33 3.0 70 3 0 3DFACE 8 lid_base 10 3.0 20 2.50226795687895 30 3.0 11 3.0 21 2.795 31 2.795 12 3.0 22 2.795 32 3.0 13 3.0 23 2.795 33 3.0 70 1 0 3DFACE 8 lid_base 10 3.0 20 0.205 30 0.205 11 3.0 21 0.0 31 0.0 12 3.0 22 0.205 32 0.0 13 3.0 23 0.205 33 0.0 70 0 0 3DFACE 8 lid_base 10 3.0 20 0.497732043121051 30 0.0 11 3.0 21 0.205 31 0.205 12 3.0 22 0.205 32 0.0 13 3.0 23 0.205 33 0.0 70 1 0 3DFACE 8 lid_base 10 3.0 20 0.205 30 0.205 11 3.0 21 0.497732043121051 31 0.0 12 3.0 22 1.5 32 0.205 13 3.0 23 1.5 33 0.205 70 3 0 3DFACE 8 lid_base 10 3.0 20 1.5 30 0.205 11 3.0 21 0.497732043121051 31 0.0 12 3.0 22 0.878679656440357 32 0.0 13 3.0 23 0.878679656440357 33 0.0 70 13 0 3DFACE 8 lid_base 10 3.0 20 1.5 30 0.205 11 3.0 21 0.878679656440357 31 0.0 12 3.0 22 1.20163144893051 32 0.0 13 3.0 23 1.20163144893051 33 0.0 70 13 0 3DFACE 8 lid_base 10 3.0 20 1.5 30 0.205 11 3.0 21 1.20163144893051 31 0.0 12 3.0 22 1.5 32 0.0 13 3.0 23 1.5 33 0.0 70 1 0 3DFACE 8 lid_base 10 3.0 20 3.0 30 0.0 11 3.0 21 2.795 31 0.205 12 3.0 22 2.795 32 0.0 13 3.0 23 2.795 33 0.0 70 0 0 3DFACE 8 lid_base 10 3.0 20 1.79836855106949 30 0.0 11 3.0 21 1.5 31 0.205 12 3.0 22 1.5 32 0.0 13 3.0 23 1.5 33 0.0 70 1 0 3DFACE 8 lid_base 10 3.0 20 1.5 30 0.205 11 3.0 21 1.79836855106949 31 0.0 12 3.0 22 2.795 32 0.205 13 3.0 23 2.795 33 0.205 70 3 0 3DFACE 8 lid_base 10 3.0 20 2.795 30 0.205 11 3.0 21 1.79836855106949 31 0.0 12 3.0 22 2.12132034355964 32 0.0 13 3.0 23 2.12132034355964 33 0.0 70 13 0 3DFACE 8 lid_base 10 3.0 20 2.795 30 0.205 11 3.0 21 2.12132034355964 31 0.0 12 3.0 22 2.50226795687895 32 0.0 13 3.0 23 2.50226795687895 33 0.0 70 13 0 3DFACE 8 lid_base 10 3.0 20 2.795 30 0.205 11 3.0 21 2.50226795687895 31 0.0 12 3.0 22 2.795 32 0.0 13 3.0 23 2.795 33 0.0 70 1 0 3DFACE 8 lid_base 10 3.0 20 1.5 30 0.205 11 3.0 21 0.205 31 1.5 12 3.0 22 0.205 32 0.205 13 3.0 23 0.205 33 0.205 70 1 0 3DFACE 8 lid_base 10 3.0 20 3.0 30 3.0 11 3.0 21 2.795 31 3.0 12 3.0 22 2.795 32 2.795 13 3.0 23 2.795 33 2.795 70 0 0 3DFACE 8 lid_base 10 3.0 20 0.205 30 1.5 11 3.0 21 1.5 31 2.795 12 3.0 22 0.205 32 2.795 13 3.0 23 0.205 33 2.795 70 1 0 3DFACE 8 lid_base 10 3.0 20 1.5 30 2.795 11 3.0 21 0.205 31 1.5 12 3.0 22 1.5 32 0.205 13 3.0 23 1.5 33 0.205 70 15 0 3DFACE 8 lid_base 10 3.0 20 1.5 30 2.795 11 3.0 21 1.5 31 0.205 12 3.0 22 2.795 32 0.205 13 3.0 23 2.795 33 0.205 70 13 0 3DFACE 8 lid_base 10 3.0 20 1.5 30 2.795 11 3.0 21 2.795 31 0.205 12 3.0 22 2.795 32 2.795 13 3.0 23 2.795 33 2.795 70 3 0 3DFACE 8 lid_base 10 3.0 20 2.795 30 2.795 11 3.0 21 2.795 31 0.205 12 3.0 22 2.795 32 1.5 13 3.0 23 2.795 33 1.5 70 1 0 3DFACE 8 lid_base 10 3.0 20 0.205 30 2.795 11 3.0 21 0.0 31 3.0 12 3.0 22 0.0 32 2.795 13 3.0 23 0.0 33 2.795 70 0 0 LINE 8 lid_base 10 0.0 20 1.5 30 1.5 11 0.0 21 0.205 31 1.5 0 LINE 8 lid_base 10 0.0 20 2.795 30 2.795 11 0.0 21 1.5 31 1.5 0 LINE 8 lid_base 10 0.0 20 1.5 30 1.5 11 0.0 21 1.5 31 0.205 0 LINE 8 lid_base 10 0.0 20 0.205 30 2.795 11 0.0 21 1.5 31 1.5 0 LINE 8 lid_base 10 0.0 20 2.795 30 1.5 11 0.0 21 1.5 31 1.5 0 LINE 8 lid_base 10 0.0 20 1.5 30 1.5 11 0.0 21 0.205 31 0.205 0 LINE 8 lid_base 10 0.0 20 1.5 30 2.795 11 0.0 21 1.5 31 1.5 0 LINE 8 lid_base 10 0.0 20 1.5 30 1.5 11 0.0 21 2.795 31 0.205 0 3DFACE 8 lid_base 10 0.0 20 0.497732043121051 30 3.0 11 0.0 21 0.205 31 2.795 12 0.0 22 0.205 32 3.0 13 0.0 23 0.205 33 3.0 70 1 0 3DFACE 8 lid_base 10 0.0 20 0.205 30 2.795 11 0.0 21 0.497732043121051 31 3.0 12 0.0 22 1.5 32 2.795 13 0.0 23 1.5 33 2.795 70 3 0 3DFACE 8 lid_base 10 0.0 20 1.5 30 2.795 11 0.0 21 0.497732043121051 31 3.0 12 0.0 22 0.878679656440357 32 3.0 13 0.0 23 0.878679656440357 33 3.0 70 13 0 3DFACE 8 lid_base 10 0.0 20 1.5 30 2.795 11 0.0 21 0.878679656440357 31 3.0 12 0.0 22 1.20163144893051 32 3.0 13 0.0 23 1.20163144893051 33 3.0 70 13 0 3DFACE 8 lid_base 10 0.0 20 1.5 30 2.795 11 0.0 21 1.20163144893051 31 3.0 12 0.0 22 1.5 32 3.0 13 0.0 23 1.5 33 3.0 70 1 0 3DFACE 8 lid_base 10 0.0 20 0.205 30 2.795 11 0.0 21 0.0 31 3.0 12 0.0 22 0.205 32 3.0 13 0.0 23 0.205 33 3.0 70 0 0 3DFACE 8 lid_base 10 0.0 20 0.205 30 0.205 11 0.0 21 0.497732043121051 31 0.0 12 0.0 22 0.205 32 0.0 13 0.0 23 0.205 33 0.0 70 1 0 3DFACE 8 lid_base 10 0.0 20 0.497732043121051 30 0.0 11 0.0 21 0.205 31 0.205 12 0.0 22 1.5 32 0.205 13 0.0 23 1.5 33 0.205 70 13 0 3DFACE 8 lid_base 10 0.0 20 0.497732043121051 30 0.0 11 0.0 21 1.5 31 0.205 12 0.0 22 0.878679656440357 32 0.0 13 0.0 23 0.878679656440357 33 0.0 70 3 0 3DFACE 8 lid_base 10 0.0 20 0.878679656440357 30 0.0 11 0.0 21 1.5 31 0.205 12 0.0 22 1.20163144893051 32 0.0 13 0.0 23 1.20163144893051 33 0.0 70 3 0 3DFACE 8 lid_base 10 0.0 20 1.20163144893051 30 0.0 11 0.0 21 1.5 31 0.205 12 0.0 22 1.5 32 0.0 13 0.0 23 1.5 33 0.0 70 1 0 3DFACE 8 lid_base 10 0.0 20 0.205 30 0.205 11 0.0 21 0.205 31 0.0 12 0.0 22 0.0 32 0.0 13 0.0 23 0.0 33 0.0 70 0 0 3DFACE 8 lid_base 10 0.0 20 3.0 30 3.0 11 0.0 21 2.795 31 2.795 12 0.0 22 2.795 32 3.0 13 0.0 23 2.795 33 3.0 70 0 0 3DFACE 8 lid_base 10 0.0 20 3.0 30 2.795 11 0.0 21 2.795 31 2.795 12 0.0 22 3.0 32 3.0 13 0.0 23 3.0 33 3.0 70 0 0 3DFACE 8 lid_base 10 0.0 20 3.0 30 2.795 11 0.0 21 2.795 31 1.5 12 0.0 22 2.795 32 2.795 13 0.0 23 2.795 33 2.795 70 1 0 3DFACE 8 lid_base 10 0.0 20 2.795 30 1.5 11 0.0 21 3.0 31 2.795 12 0.0 22 3.0 32 1.5 13 0.0 23 3.0 33 1.5 70 1 0 3DFACE 8 lid_base 10 0.0 20 1.79836855106949 30 3.0 11 0.0 21 1.5 31 2.795 12 0.0 22 1.5 32 3.0 13 0.0 23 1.5 33 3.0 70 1 0 3DFACE 8 lid_base 10 0.0 20 1.5 30 2.795 11 0.0 21 1.79836855106949 31 3.0 12 0.0 22 2.795 32 2.795 13 0.0 23 2.795 33 2.795 70 3 0 3DFACE 8 lid_base 10 0.0 20 2.795 30 2.795 11 0.0 21 1.79836855106949 31 3.0 12 0.0 22 2.12132034355964 32 3.0 13 0.0 23 2.12132034355964 33 3.0 70 13 0 3DFACE 8 lid_base 10 0.0 20 2.795 30 2.795 11 0.0 21 2.12132034355964 31 3.0 12 0.0 22 2.50226795687895 32 3.0 13 0.0 23 2.50226795687895 33 3.0 70 13 0 3DFACE 8 lid_base 10 0.0 20 2.795 30 2.795 11 0.0 21 2.50226795687895 31 3.0 12 0.0 22 2.795 32 3.0 13 0.0 23 2.795 33 3.0 70 1 0 3DFACE 8 lid_base 10 0.0 20 0.205 30 2.795 11 0.0 21 0.0 31 1.5 12 0.0 22 0.0 32 2.795 13 0.0 23 0.0 33 2.795 70 1 0 3DFACE 8 lid_base 10 0.0 20 0.0 30 1.5 11 0.0 21 0.205 31 2.795 12 0.0 22 0.205 32 1.5 13 0.0 23 0.205 33 1.5 70 1 0 3DFACE 8 lid_base 10 0.0 20 3.0 30 1.5 11 0.0 21 2.795 31 0.205 12 0.0 22 2.795 32 1.5 13 0.0 23 2.795 33 1.5 70 1 0 3DFACE 8 lid_base 10 0.0 20 2.795 30 0.205 11 0.0 21 3.0 31 1.5 12 0.0 22 3.0 32 0.205 13 0.0 23 3.0 33 0.205 70 1 0 3DFACE 8 lid_base 10 0.0 20 0.205 30 1.5 11 0.0 21 0.0 31 0.205 12 0.0 22 0.0 32 1.5 13 0.0 23 0.0 33 1.5 70 1 0 3DFACE 8 lid_base 10 0.0 20 0.0 30 0.205 11 0.0 21 0.205 31 1.5 12 0.0 22 0.205 32 0.205 13 0.0 23 0.205 33 0.205 70 1 0 3DFACE 8 lid_base 10 0.0 20 2.795 30 0.205 11 0.0 21 1.5 31 0.0 12 0.0 22 1.5 32 0.205 13 0.0 23 1.5 33 0.205 70 1 0 3DFACE 8 lid_base 10 0.0 20 1.5 30 0.0 11 0.0 21 2.795 31 0.205 12 0.0 22 1.79836855106949 32 0.0 13 0.0 23 1.79836855106949 33 0.0 70 3 0 3DFACE 8 lid_base 10 0.0 20 1.79836855106949 30 0.0 11 0.0 21 2.795 31 0.205 12 0.0 22 2.12132034355964 32 0.0 13 0.0 23 2.12132034355964 33 0.0 70 3 0 3DFACE 8 lid_base 10 0.0 20 2.12132034355964 30 0.0 11 0.0 21 2.795 31 0.205 12 0.0 22 2.50226795687895 32 0.0 13 0.0 23 2.50226795687895 33 0.0 70 3 0 3DFACE 8 lid_base 10 0.0 20 2.50226795687895 30 0.0 11 0.0 21 2.795 31 0.205 12 0.0 22 2.795 32 0.0 13 0.0 23 2.795 33 0.0 70 1 0 3DFACE 8 lid_base 10 0.0 20 3.0 30 0.0 11 0.0 21 2.795 31 0.205 12 0.0 22 3.0 32 0.205 13 0.0 23 3.0 33 0.205 70 0 0 3DFACE 8 lid_base 10 0.0 20 3.0 30 0.0 11 0.0 21 2.795 31 0.0 12 0.0 22 2.795 32 0.205 13 0.0 23 2.795 33 0.205 70 0 0 3DFACE 8 lid_base 10 0.0 20 1.5 30 2.795 11 0.0 21 0.205 31 1.5 12 0.0 22 0.205 32 2.795 13 0.0 23 0.205 33 2.795 70 1 0 3DFACE 8 lid_base 10 0.0 20 0.205 30 1.5 11 0.0 21 1.5 31 2.795 12 0.0 22 0.205 32 0.205 13 0.0 23 0.205 33 0.205 70 3 0 3DFACE 8 lid_base 10 0.0 20 0.205 30 0.205 11 0.0 21 1.5 31 2.795 12 0.0 22 1.5 32 0.205 13 0.0 23 1.5 33 0.205 70 3 0 3DFACE 8 lid_base 10 0.0 20 1.5 30 0.205 11 0.0 21 1.5 31 2.795 12 0.0 22 2.795 32 2.795 13 0.0 23 2.795 33 2.795 70 13 0 3DFACE 8 lid_base 10 0.0 20 1.5 30 0.205 11 0.0 21 2.795 31 2.795 12 0.0 22 2.795 32 0.205 13 0.0 23 2.795 33 0.205 70 3 0 3DFACE 8 lid_base 10 0.0 20 2.795 30 0.205 11 0.0 21 2.795 31 2.795 12 0.0 22 2.795 32 1.5 13 0.0 23 2.795 33 1.5 70 1 0 3DFACE 8 lid_base 10 0.0 20 0.205 30 0.205 11 0.0 21 0.0 31 0.0 12 0.0 22 0.0 32 0.205 13 0.0 23 0.0 33 0.205 70 0 0 3DFACE 8 lid_base 10 0.454999999999999 20 0.25 30 1.5 11 0.8525 21 0.0 31 2.1475 12 0.205 22 0.0 32 1.5 13 0.205 23 0.0 33 1.5 70 1 0 3DFACE 8 lid_base 10 0.8525 20 0.0 30 2.1475 11 0.454999999999999 21 0.25 31 1.5 12 0.9775 22 0.25 32 2.0225 13 0.9775 23 0.25 33 2.0225 70 1 0 3DFACE 8 lid_b 10 1.5 20 0.0 30 2.795 11 1.5 21 0.0 31 1.5 12 2.795 22 0.0 32 1.5 13 2.795 23 0.0 33 1.5 70 0 0 3DFACE 8 lid_b 10 2.795 20 0.0 30 1.5 11 1.5 21 0.0 31 1.5 12 2.7325 22 0.0625 32 1.5 13 2.7325 23 0.0625 33 1.5 70 0 0 3DFACE 8 lid_b 10 1.5 20 0.0625 30 2.7325 11 1.5 21 0.0 31 1.5 12 1.5 22 0.0 32 2.795 13 1.5 23 0.0 33 2.795 70 0 0 3DFACE 8 lid_b 10 1.5 20 0.0625 30 2.7325 11 2.7325 21 0.0625 31 1.5 12 1.5 22 0.0 32 1.5 13 1.5 23 0.0 33 1.5 70 0 0 3DFACE 8 lid_b 10 2.7325 20 0.0625 30 1.5 11 1.5 21 0.0 31 2.795 12 2.795 22 0.0 32 1.5 13 2.795 23 0.0 33 1.5 70 1 0 3DFACE 8 lid_b 10 1.5 20 0.0 30 2.795 11 2.7325 21 0.0625 31 1.5 12 1.5 22 0.0625 32 2.7325 13 1.5 23 0.0625 33 2.7325 70 1 0 3DFACE 8 lid_c 10 1.5 20 0.0 30 1.5 11 1.5 21 0.0 31 0.205 12 2.795 22 0.0 32 1.5 13 2.795 23 0.0 33 1.5 70 0 0 3DFACE 8 lid_c 10 1.5 20 0.0625 30 0.2675 11 1.5 21 0.0 31 0.205 12 1.5 22 0.0 32 1.5 13 1.5 23 0.0 33 1.5 70 0 0 3DFACE 8 lid_c 10 2.795 20 0.0 30 1.5 11 2.7325 21 0.0625000000000004 31 1.5 12 1.5 22 0.0 32 1.5 13 1.5 23 0.0 33 1.5 70 0 0 3DFACE 8 lid_c 10 2.7325 20 0.0625000000000004 30 1.5 11 1.5 21 0.0625 31 0.2675 12 1.5 22 0.0 32 1.5 13 1.5 23 0.0 33 1.5 70 0 0 3DFACE 8 lid_c 10 1.5 20 0.0625 30 0.2675 11 2.795 21 0.0 31 1.5 12 1.5 22 0.0 32 0.205 13 1.5 23 0.0 33 0.205 70 1 0 3DFACE 8 lid_c 10 2.795 20 0.0 30 1.5 11 1.5 21 0.0625 31 0.2675 12 2.7325 22 0.0625000000000004 32 1.5 13 2.7325 23 0.0625000000000004 33 1.5 70 1 0 3DFACE 8 lid_d 10 0.205 20 0.0 30 1.5 11 1.5 21 0.0 31 0.205 12 1.5 22 0.0 32 1.5 13 1.5 23 0.0 33 1.5 70 0 0 3DFACE 8 lid_d 10 1.5 20 0.0 30 1.5 11 0.2675 21 0.0625 31 1.5 12 0.205 22 0.0 32 1.5 13 0.205 23 0.0 33 1.5 70 0 0 3DFACE 8 lid_d 10 1.5 20 0.0625 30 0.2675 11 1.5 21 0.0 31 1.5 12 1.5 22 0.0 32 0.205 13 1.5 23 0.0 33 0.205 70 0 0 3DFACE 8 lid_d 10 1.5 20 0.0 30 1.5 11 1.5 21 0.0625 31 0.2675 12 0.2675 22 0.0625 32 1.5 13 0.2675 23 0.0625 33 1.5 70 0 0 3DFACE 8 lid_d 10 0.205 20 0.0 30 1.5 11 1.5 21 0.0625 31 0.2675 12 1.5 22 0.0 32 0.205 13 1.5 23 0.0 33 0.205 70 1 0 3DFACE 8 lid_d 10 1.5 20 0.0625 30 0.2675 11 0.205 21 0.0 31 1.5 12 0.2675 22 0.0625 32 1.5 13 0.2675 23 0.0625 33 1.5 70 1 0 3DFACE 8 lid_a 10 1.5 20 0.0 30 2.795 11 0.205 21 0.0 31 1.5 12 1.5 22 0.0 32 1.5 13 1.5 23 0.0 33 1.5 70 0 0 3DFACE 8 lid_a 10 1.5 20 0.0625 30 2.7325 11 1.5 21 0.0 31 2.795 12 1.5 22 0.0 32 1.5 13 1.5 23 0.0 33 1.5 70 0 0 3DFACE 8 lid_a 10 1.5 20 0.0 30 1.5 11 0.205 21 0.0 31 1.5 12 0.2675 22 0.0625 32 1.5 13 0.2675 23 0.0625 33 1.5 70 0 0 3DFACE 8 lid_a 10 1.5 20 0.0 30 2.795 11 0.2675 21 0.0625 31 1.5 12 0.205 22 0.0 32 1.5 13 0.205 23 0.0 33 1.5 70 1 0 3DFACE 8 lid_a 10 0.2675 20 0.0625 30 1.5 11 1.5 21 0.0 31 2.795 12 1.5 22 0.0625 32 2.7325 13 1.5 23 0.0625 33 2.7325 70 1 0 3DFACE 8 lid_a 10 1.5 20 0.0625 30 2.7325 11 1.5 21 0.0 31 1.5 12 0.2675 22 0.0625 32 1.5 13 0.2675 23 0.0625 33 1.5 70 0 0 3DFACE 8 taser_base 10 1.61135857342883 20 3.0 30 1.20801452412167 11 1.58220277009702 21 1.5 31 1.1985054650771 12 1.58220277009702 22 3.0 32 1.1985054650771 13 1.58220277009702 23 3.0 33 1.1985054650771 70 1 0 3DFACE 8 taser_base 10 1.58220277009702 20 1.5 30 1.1985054650771 11 1.61135857342883 21 3.0 31 1.20801452412167 12 1.61135857342883 22 1.5 32 1.20801452412167 13 1.61135857342883 23 1.5 33 1.20801452412167 70 1 0 3DFACE 8 taser_base 10 1.295 20 1.5 30 -6.93889390390723e-17 11 1.5 21 1.5 31 1.18780925188093 12 1.71583333333333 22 1.5 32 0.8525 13 1.71583333333333 23 1.5 33 0.8525 70 15 0 3DFACE 8 taser_base 10 1.5 20 1.5 30 1.18780925188093 11 1.295 21 1.5 31 -6.93889390390723e-17 12 1.295 22 1.5 32 3.0 13 1.295 23 1.5 33 3.0 70 13 0 3DFACE 8 taser_base 10 1.5 20 1.5 30 1.18780925188093 11 1.295 21 1.5 31 3.0 12 1.5 22 1.5 32 1.81219074811907 13 1.5 23 1.5 33 1.81219074811907 70 3 0 3DFACE 8 taser_base 10 1.5 20 1.5 30 1.81219074811907 11 1.295 21 1.5 31 3.0 12 1.50885609734932 22 1.5 32 1.81237448605758 13 1.50885609734932 23 1.5 33 1.81237448605758 70 3 0 3DFACE 8 taser_base 10 1.50885609734932 20 1.5 30 1.81237448605758 11 1.295 21 1.5 31 3.0 12 1.71583333333333 22 1.5 32 2.1475 13 1.71583333333333 23 1.5 33 2.1475 70 15 0 3DFACE 8 taser_base 10 1.71583333333333 20 1.5 30 2.1475 11 1.295 21 1.5 31 3.0 12 2.1475 22 1.5 32 2.1475 13 2.1475 23 1.5 33 2.1475 70 13 0 3DFACE 8 taser_base 10 2.1475 20 1.5 30 2.1475 11 2.1475 21 1.5 31 1.71583333333333 12 1.71583333333333 22 1.5 32 2.1475 13 1.71583333333333 23 1.5 33 2.1475 70 12 0 3DFACE 8 taser_base 10 1.70501413192602 20 1.5 30 1.73585049440402 11 1.71583333333333 21 1.5 31 2.1475 12 1.71583333333333 22 1.5 32 1.72547110140021 13 1.71583333333333 23 1.5 33 1.72547110140021 70 1 0 3DFACE 8 taser_base 10 1.71583333333333 20 1.5 30 2.1475 11 1.70501413192602 21 1.5 31 1.73585049440402 12 1.68090954183794 22 1.5 32 1.7548097087475 13 1.68090954183794 23 1.5 33 1.7548097087475 70 13 0 3DFACE 8 taser_base 10 1.71583333333333 20 1.5 30 2.1475 11 1.68090954183794 21 1.5 31 1.7548097087475 12 1.65506269396675 22 1.5 32 1.77131496630259 13 1.65506269396675 23 1.5 33 1.77131496630259 70 13 0 3DFACE 8 taser_base 10 1.71583333333333 20 1.5 30 2.1475 11 1.65506269396675 21 1.5 31 1.77131496630259 12 1.62772250758676 22 1.5 32 1.78520731241634 13 1.62772250758676 23 1.5 33 1.78520731241634 70 13 0 3DFACE 8 taser_base 10 1.71583333333333 20 1.5 30 2.1475 11 1.62772250758676 21 1.5 31 1.78520731241634 12 1.59915228363849 22 1.5 32 1.79635295620134 13 1.59915228363849 23 1.5 33 1.79635295620134 70 13 0 3DFACE 8 taser_base 10 1.71583333333333 20 1.5 30 2.1475 11 1.59915228363849 21 1.5 31 1.79635295620134 12 1.56962716899663 22 1.5 32 1.80464455901512 13 1.56962716899663 23 1.5 33 1.80464455901512 70 13 0 3DFACE 8 taser_base 10 1.71583333333333 20 1.5 30 2.1475 11 1.56962716899663 21 1.5 31 1.80464455901512 12 1.53943150665524 22 1.5 32 1.81000226818992 13 1.53943150665524 23 1.5 33 1.81000226818992 70 13 0 3DFACE 8 taser_base 10 1.71583333333333 20 1.5 30 2.1475 11 1.53943150665524 21 1.5 31 1.81000226818992 12 1.50885609734932 22 1.5 32 1.81237448605758 13 1.50885609734932 23 1.5 33 1.81237448605758 70 13 0 3DFACE 8 taser_base 10 1.71583333333333 20 1.5 30 0.8525 11 1.71461991087043 21 1.5 31 1.27285567614847 12 1.71583333333333 22 1.5 32 1.27412051524007 13 1.71583333333333 23 1.5 33 1.27412051524007 70 1 0 3DFACE 8 taser_base 10 1.71461991087043 20 1.5 30 1.27285567614847 11 1.71583333333333 21 1.5 31 0.8525 12 1.69132242027198 22 1.5 32 1.25291300823137 13 1.69132242027198 23 1.5 33 1.25291300823137 70 3 0 3DFACE 8 taser_base 10 1.69132242027198 20 1.5 30 1.25291300823137 11 1.71583333333333 21 1.5 31 0.8525 12 1.66618239017884 22 1.5 32 1.23534992311649 13 1.66618239017884 23 1.5 33 1.23534992311649 70 3 0 3DFACE 8 taser_base 10 1.66618239017884 20 1.5 30 1.23534992311649 11 1.71583333333333 21 1.5 31 0.8525 12 1.63944193282374 22 1.5 32 1.22033556291445 13 1.63944193282374 23 1.5 33 1.22033556291445 70 3 0 3DFACE 8 taser_base 10 1.63944193282374 20 1.5 30 1.22033556291445 11 1.71583333333333 21 1.5 31 0.8525 12 1.61135857342883 22 1.5 32 1.20801452412167 13 1.61135857342883 23 1.5 33 1.20801452412167 70 3 0 3DFACE 8 taser_base 10 1.61135857342883 20 1.5 30 1.20801452412167 11 1.71583333333333 21 1.5 31 0.8525 12 1.58220277009702 22 1.5 32 1.1985054650771 13 1.58220277009702 23 1.5 33 1.1985054650771 70 3 0 3DFACE 8 taser_base 10 1.58220277009702 20 1.5 30 1.1985054650771 11 1.71583333333333 21 1.5 31 0.8525 12 1.55225530915257 22 1.5 32 1.19189996321751 13 1.55225530915257 23 1.5 33 1.19189996321751 70 3 0 3DFACE 8 taser_base 10 1.55225530915257 20 1.5 30 1.19189996321751 11 1.71583333333333 21 1.5 31 0.8525 12 1.52180460101532 22 1.5 32 1.18826163313676 13 1.52180460101532 23 1.5 33 1.18826163313676 70 3 0 3DFACE 8 taser_base 10 1.52180460101532 20 1.5 30 1.18826163313676 11 1.71583333333333 21 1.5 31 0.8525 12 1.5 22 1.5 32 1.18780925188093 13 1.5 23 1.5 33 1.18780925188093 70 3 0 3DFACE 8 taser_base 10 1.71583333333333 20 1.5 30 0.8525 11 2.1475 21 1.5 31 0.8525 12 1.295 22 1.5 32 -6.93889390390723e-17 13 1.295 23 1.5 33 -6.93889390390723e-17 70 13 0 3DFACE 8 taser_base 10 2.1475 20 1.5 30 0.8525 11 1.71583333333333 21 1.5 31 0.8525 12 2.1475 22 1.5 32 1.28416666666667 13 2.1475 23 1.5 33 1.28416666666667 70 1 0 3DFACE 8 taser_base 10 1.5 20 1.5 30 0.0 11 1.295 21 1.19319581865357 31 -2.75981973074096e-17 12 1.295 22 1.295 32 -2.99528920185329e-17 13 1.295 23 1.295 33 -2.99528920185329e-17 70 0 0 3DFACE 8 taser_base 10 1.56962716899663 20 1.5 30 1.80464455901512 11 1.53943150665524 21 3.0 31 1.81000226818992 12 1.53943150665524 22 1.5 32 1.81000226818992 13 1.53943150665524 23 1.5 33 1.81000226818992 70 1 0 3DFACE 8 taser_base 10 1.53943150665524 20 3.0 30 1.81000226818992 11 1.56962716899663 21 1.5 31 1.80464455901512 12 1.56962716899663 22 3.0 32 1.80464455901512 13 1.56962716899663 23 3.0 33 1.80464455901512 70 1 0 3DFACE 8 taser_base 10 1.68090954183794 20 1.5 30 1.7548097087475 11 1.65506269396675 21 3.0 31 1.77131496630259 12 1.65506269396675 22 1.5 32 1.77131496630259 13 1.65506269396675 23 1.5 33 1.77131496630259 70 1 0 3DFACE 8 taser_base 10 1.65506269396675 20 3.0 30 1.77131496630259 11 1.68090954183794 21 1.5 31 1.7548097087475 12 1.68090954183794 22 3.0 32 1.7548097087475 13 1.68090954183794 23 3.0 33 1.7548097087475 70 1 0 3DFACE 8 taser_base 10 1.52180460101532 20 3.0 30 1.18826163313676 11 1.5 21 1.5 31 1.18780925188093 12 1.5 22 3.0 32 1.18780925188093 13 1.5 23 3.0 33 1.18780925188093 70 1 0 3DFACE 8 taser_base 10 1.5 20 1.5 30 1.18780925188093 11 1.52180460101532 21 3.0 31 1.18826163313676 12 1.52180460101532 22 1.5 32 1.18826163313676 13 1.52180460101532 23 1.5 33 1.18826163313676 70 1 0 3DFACE 8 taser_base 10 1.5 20 3.0 30 1.81219074811907 11 1.5 21 1.5 31 1.18780925188093 12 1.5 22 1.5 32 1.81219074811907 13 1.5 23 1.5 33 1.81219074811907 70 1 0 3DFACE 8 taser_base 10 1.5 20 1.5 30 1.18780925188093 11 1.5 21 3.0 31 1.81219074811907 12 1.5 22 3.0 32 1.18780925188093 13 1.5 23 3.0 33 1.18780925188093 70 3 0 3DFACE 8 taser_base 10 1.5 20 3.0 30 1.18780925188093 11 1.5 21 3.0 31 1.81219074811907 12 1.5 22 3.0 32 1.5 13 1.5 23 3.0 33 1.5 70 1 0 3DFACE 8 taser_base 10 1.71583333333333 20 3.0 30 2.1475 11 1.71583333333333 21 1.5 31 1.72547110140021 12 1.71583333333333 22 1.5 32 2.1475 13 1.71583333333333 23 1.5 33 2.1475 70 1 0 3DFACE 8 taser_base 10 1.71583333333333 20 1.5 30 1.72547110140021 11 1.71583333333333 21 3.0 31 2.1475 12 1.71583333333333 22 3.0 32 1.72547110140021 13 1.71583333333333 23 3.0 33 1.72547110140021 70 1 0 3DFACE 8 taser_base 10 1.58220277009702 20 3.0 30 1.1985054650771 11 1.55225530915257 21 1.5 31 1.19189996321751 12 1.55225530915257 22 3.0 32 1.19189996321751 13 1.55225530915257 23 3.0 33 1.19189996321751 70 1 0 3DFACE 8 taser_base 10 1.55225530915257 20 1.5 30 1.19189996321751 11 1.58220277009702 21 3.0 31 1.1985054650771 12 1.58220277009702 22 1.5 32 1.1985054650771 13 1.58220277009702 23 1.5 33 1.1985054650771 70 1 0 3DFACE 8 taser_base 10 2.795 20 3.0 30 2.795 11 2.795 21 3.0 31 1.5 12 2.1475 22 3.0 32 2.1475 13 2.1475 23 3.0 33 2.1475 70 0 0 3DFACE 8 taser_base 10 2.1475 20 1.5 30 1.71583333333333 11 1.71583333333333 21 3.0 31 2.1475 12 1.71583333333333 22 1.5 32 2.1475 13 1.71583333333333 23 1.5 33 2.1475 70 1 0 3DFACE 8 taser_base 10 1.71583333333333 20 3.0 30 2.1475 11 2.1475 21 1.5 31 1.71583333333333 12 2.1475 22 3.0 32 1.71583333333333 13 2.1475 23 3.0 33 1.71583333333333 70 1 0 3DFACE 8 taser_base 10 1.66618239017884 20 3.0 30 1.23534992311649 11 1.63944193282374 21 1.5 31 1.22033556291445 12 1.63944193282374 22 3.0 32 1.22033556291445 13 1.63944193282374 23 3.0 33 1.22033556291445 70 1 0 3DFACE 8 taser_base 10 1.63944193282374 20 1.5 30 1.22033556291445 11 1.66618239017884 21 3.0 31 1.23534992311649 12 1.66618239017884 22 1.5 32 1.23534992311649 13 1.66618239017884 23 1.5 33 1.23534992311649 70 1 0 3DFACE 8 taser_base 10 1.69132242027198 20 3.0 30 1.25291300823137 11 1.66618239017884 21 1.5 31 1.23534992311649 12 1.66618239017884 22 3.0 32 1.23534992311649 13 1.66618239017884 23 3.0 33 1.23534992311649 70 1 0 3DFACE 8 taser_base 10 1.66618239017884 20 1.5 30 1.23534992311649 11 1.69132242027198 21 3.0 31 1.25291300823137 12 1.69132242027198 22 1.5 32 1.25291300823137 13 1.69132242027198 23 1.5 33 1.25291300823137 70 1 0 3DFACE 8 taser_base 10 1.71461991087043 20 3.0 30 1.27285567614847 11 1.69132242027198 21 1.5 31 1.25291300823137 12 1.69132242027198 22 3.0 32 1.25291300823137 13 1.69132242027198 23 3.0 33 1.25291300823137 70 1 0 3DFACE 8 taser_base 10 1.69132242027198 20 1.5 30 1.25291300823137 11 1.71461991087043 21 3.0 31 1.27285567614847 12 1.71461991087043 22 1.5 32 1.27285567614847 13 1.71461991087043 23 1.5 33 1.27285567614847 70 1 0 3DFACE 8 taser_base 10 1.71583333333333 20 3.0 30 0.8525 11 2.1475 21 1.5 31 1.28416666666667 12 1.71583333333333 22 1.5 32 0.8525 13 1.71583333333333 23 1.5 33 0.8525 70 1 0 3DFACE 8 taser_base 10 2.1475 20 1.5 30 1.28416666666667 11 1.71583333333333 21 3.0 31 0.8525 12 2.1475 22 3.0 32 1.28416666666667 13 2.1475 23 3.0 33 1.28416666666667 70 1 0 3DFACE 8 taser_base 10 2.1475 20 3.0 30 2.1475 11 2.1475 21 1.5 31 1.71583333333333 12 2.1475 22 1.5 32 2.1475 13 2.1475 23 1.5 33 2.1475 70 1 0 3DFACE 8 taser_base 10 2.1475 20 1.5 30 1.71583333333333 11 2.1475 21 3.0 31 2.1475 12 2.1475 22 3.0 32 1.71583333333333 13 2.1475 23 3.0 33 1.71583333333333 70 1 0 3DFACE 8 taser_base 10 1.53943150665524 20 1.5 30 1.81000226818992 11 1.50885609734932 21 3.0 31 1.81237448605758 12 1.50885609734932 22 1.5 32 1.81237448605758 13 1.50885609734932 23 1.5 33 1.81237448605758 70 1 0 3DFACE 8 taser_base 10 1.50885609734932 20 3.0 30 1.81237448605758 11 1.53943150665524 21 1.5 31 1.81000226818992 12 1.53943150665524 22 3.0 32 1.81000226818992 13 1.53943150665524 23 3.0 33 1.81000226818992 70 1 0 3DFACE 8 taser_base 10 1.50885609734932 20 1.5 30 1.81237448605758 11 1.5 21 3.0 31 1.81219074811907 12 1.5 22 1.5 32 1.81219074811907 13 1.5 23 1.5 33 1.81219074811907 70 1 0 3DFACE 8 taser_base 10 1.5 20 3.0 30 1.81219074811907 11 1.50885609734932 21 1.5 31 1.81237448605758 12 1.50885609734932 22 3.0 32 1.81237448605758 13 1.50885609734932 23 3.0 33 1.81237448605758 70 1 0 3DFACE 8 taser_base 10 1.62772250758676 20 1.5 30 1.78520731241634 11 1.59915228363849 21 3.0 31 1.79635295620134 12 1.59915228363849 22 1.5 32 1.79635295620134 13 1.59915228363849 23 1.5 33 1.79635295620134 70 1 0 3DFACE 8 taser_base 10 1.59915228363849 20 3.0 30 1.79635295620134 11 1.62772250758676 21 1.5 31 1.78520731241634 12 1.62772250758676 22 3.0 32 1.78520731241634 13 1.62772250758676 23 3.0 33 1.78520731241634 70 1 0 3DFACE 8 taser_base 10 1.59915228363849 20 1.5 30 1.79635295620134 11 1.56962716899663 21 3.0 31 1.80464455901512 12 1.56962716899663 22 1.5 32 1.80464455901512 13 1.56962716899663 23 1.5 33 1.80464455901512 70 1 0 3DFACE 8 taser_base 10 1.56962716899663 20 3.0 30 1.80464455901512 11 1.59915228363849 21 1.5 31 1.79635295620134 12 1.59915228363849 22 3.0 32 1.79635295620134 13 1.59915228363849 23 3.0 33 1.79635295620134 70 1 0 3DFACE 8 taser_base 10 1.71583333333333 20 3.0 30 1.27412051524007 11 1.71583333333333 21 1.5 31 0.8525 12 1.71583333333333 22 1.5 32 1.27412051524007 13 1.71583333333333 23 1.5 33 1.27412051524007 70 1 0 3DFACE 8 taser_base 10 1.71583333333333 20 1.5 30 0.8525 11 1.71583333333333 21 3.0 31 1.27412051524007 12 1.71583333333333 22 3.0 32 0.8525 13 1.71583333333333 23 3.0 33 0.8525 70 1 0 3DFACE 8 taser_base 10 1.65506269396675 20 1.5 30 1.77131496630259 11 1.62772250758676 21 3.0 31 1.78520731241634 12 1.62772250758676 22 1.5 32 1.78520731241634 13 1.62772250758676 23 1.5 33 1.78520731241634 70 1 0 3DFACE 8 taser_base 10 1.62772250758676 20 3.0 30 1.78520731241634 11 1.65506269396675 21 1.5 31 1.77131496630259 12 1.65506269396675 22 3.0 32 1.77131496630259 13 1.65506269396675 23 3.0 33 1.77131496630259 70 1 0 3DFACE 8 taser_base 10 1.55225530915257 20 3.0 30 1.19189996321751 11 1.52180460101532 21 1.5 31 1.18826163313676 12 1.52180460101532 22 3.0 32 1.18826163313676 13 1.52180460101532 23 3.0 33 1.18826163313676 70 1 0 3DFACE 8 taser_base 10 1.52180460101532 20 1.5 30 1.18826163313676 11 1.55225530915257 21 3.0 31 1.19189996321751 12 1.55225530915257 22 1.5 32 1.19189996321751 13 1.55225530915257 23 1.5 33 1.19189996321751 70 1 0 3DFACE 8 taser_base 10 3.0 20 0.205 30 0.205 11 3.0 21 0.0 31 0.0 12 3.0 22 0.205 32 0.0 13 3.0 23 0.205 33 0.0 70 0 0 3DFACE 8 taser_base 10 1.295 20 1.54077703531283 30 3.0 11 2.1475 21 1.5 31 2.1475 12 1.295 22 1.5 32 3.0 13 1.295 23 1.5 33 3.0 70 1 0 3DFACE 8 taser_base 10 2.1475 20 1.5 30 2.1475 11 1.295 21 1.54077703531283 31 3.0 12 2.1475 22 3.0 32 2.1475 13 2.1475 23 3.0 33 2.1475 70 3 0 3DFACE 8 taser_base 10 2.1475 20 3.0 30 2.1475 11 1.295 21 1.54077703531283 31 3.0 12 1.295 22 1.58491378028648 32 3.0 13 1.295 23 1.58491378028648 33 3.0 70 13 0 3DFACE 8 taser_base 10 2.1475 20 3.0 30 2.1475 11 1.295 21 1.58491378028648 31 3.0 12 1.295 22 1.63697662077346 32 3.0 13 1.295 23 1.63697662077346 33 3.0 70 13 0 3DFACE 8 taser_base 10 2.1475 20 3.0 30 2.1475 11 1.295 21 1.63697662077346 31 3.0 12 1.295 22 1.705 32 3.0 13 1.295 23 1.705 33 3.0 70 13 0 3DFACE 8 taser_base 10 2.1475 20 3.0 30 2.1475 11 1.295 21 1.705 31 3.0 12 1.295 22 1.80680418134643 32 3.0 13 1.295 23 1.80680418134643 33 3.0 70 13 0 3DFACE 8 taser_base 10 2.1475 20 3.0 30 2.1475 11 1.295 21 1.80680418134643 31 3.0 12 1.295 22 1.99491378028649 32 3.0 13 1.295 23 1.99491378028649 33 3.0 70 13 0 3DFACE 8 taser_base 10 2.1475 20 3.0 30 2.1475 11 1.295 21 1.99491378028649 31 3.0 12 1.295 22 2.2311863483779 32 3.0 13 1.295 23 2.2311863483779 33 3.0 70 13 0 3DFACE 8 taser_base 10 2.1475 20 3.0 30 2.1475 11 1.295 21 2.2311863483779 31 3.0 12 1.295 22 2.5306045958858 32 3.0 13 1.295 23 2.5306045958858 33 3.0 70 13 0 3DFACE 8 taser_base 10 2.1475 20 3.0 30 2.1475 11 1.295 21 2.5306045958858 31 3.0 12 1.295 22 3.0 32 3.0 13 1.295 23 3.0 33 3.0 70 13 0 3DFACE 8 taser_base 10 2.1475 20 3.0 30 2.1475 11 1.295 21 3.0 31 3.0 12 1.5 22 3.0 32 2.795 13 1.5 23 3.0 33 2.795 70 1 0 3DFACE 8 taser_base 10 1.5 20 1.5 30 3.0 11 1.295 21 1.54077703531283 31 3.0 12 1.295 22 1.5 32 3.0 13 1.295 23 1.5 33 3.0 70 0 0 3DFACE 8 taser_base 10 2.1475 20 3.0 30 1.28416666666667 11 2.1475 21 1.5 31 0.8525 12 2.1475 22 1.5 32 1.28416666666667 13 2.1475 23 1.5 33 1.28416666666667 70 1 0 3DFACE 8 taser_base 10 2.1475 20 1.5 30 0.8525 11 2.1475 21 3.0 31 1.28416666666667 12 2.1475 22 3.0 32 0.8525 13 2.1475 23 3.0 33 0.8525 70 1 0 3DFACE 8 taser_base 10 1.70501413192602 20 1.5 30 1.73585049440402 11 1.68090954183794 21 3.0 31 1.7548097087475 12 1.68090954183794 22 1.5 32 1.7548097087475 13 1.68090954183794 23 1.5 33 1.7548097087475 70 1 0 3DFACE 8 taser_base 10 1.68090954183794 20 3.0 30 1.7548097087475 11 1.70501413192602 21 1.5 31 1.73585049440402 12 1.70501413192602 22 3.0 32 1.73585049440402 13 1.70501413192602 23 3.0 33 1.73585049440402 70 1 0 3DFACE 8 taser_base 10 1.63944193282374 20 3.0 30 1.22033556291445 11 1.61135857342883 21 1.5 31 1.20801452412167 12 1.61135857342883 22 3.0 32 1.20801452412167 13 1.61135857342883 23 3.0 33 1.20801452412167 70 1 0 3DFACE 8 taser_base 10 1.61135857342883 20 1.5 30 1.20801452412167 11 1.63944193282374 21 3.0 31 1.22033556291445 12 1.63944193282374 22 1.5 32 1.22033556291445 13 1.63944193282374 23 1.5 33 1.22033556291445 70 1 0 3DFACE 8 taser_base 10 1.71461991087043 20 3.0 30 1.27285567614847 11 1.71583333333333 21 1.5 31 1.27412051524007 12 1.71461991087043 22 1.5 32 1.27285567614847 13 1.71461991087043 23 1.5 33 1.27285567614847 70 1 0 3DFACE 8 taser_base 10 1.71583333333333 20 1.5 30 1.27412051524007 11 1.71461991087043 21 3.0 31 1.27285567614847 12 1.71583333333333 22 3.0 32 1.27412051524007 13 1.71583333333333 23 3.0 33 1.27412051524007 70 1 0 3DFACE 8 taser_base 10 1.71583333333333 20 1.5 30 1.72547110140021 11 1.70501413192602 21 3.0 31 1.73585049440402 12 1.70501413192602 22 1.5 32 1.73585049440402 13 1.70501413192602 23 1.5 33 1.73585049440402 70 1 0 3DFACE 8 taser_base 10 1.70501413192602 20 3.0 30 1.73585049440402 11 1.71583333333333 21 1.5 31 1.72547110140021 12 1.71461991087043 22 3.0 32 1.72547110140021 13 1.71461991087043 23 3.0 33 1.72547110140021 70 3 0 3DFACE 8 taser_base 10 1.71461991087043 20 3.0 30 1.72547110140021 11 1.71583333333333 21 1.5 31 1.72547110140021 12 1.71583333333333 22 3.0 32 1.72547110140021 13 1.71583333333333 23 3.0 33 1.72547110140021 70 1 0 3DFACE 8 taser_base 10 2.1475 20 1.5 30 0.8525 11 1.295 21 1.54077703531283 31 -3.67694180123813e-17 12 1.295 22 1.5 32 -6.93889390390723e-17 13 1.295 23 1.5 33 -6.93889390390723e-17 70 1 0 3DFACE 8 taser_base 10 1.295 20 1.54077703531283 30 -3.67694180123813e-17 11 2.1475 21 1.5 31 0.8525 12 1.295 22 1.58491378028649 32 -3.90153260770453e-17 13 1.295 23 1.58491378028649 33 -3.90153260770453e-17 70 3 0 3DFACE 8 taser_base 10 1.295 20 1.58491378028649 30 -3.90153260770453e-17 11 2.1475 21 1.5 31 0.8525 12 1.295 22 1.63697662077346 32 -4.16645552711963e-17 13 1.295 23 1.63697662077346 33 -4.16645552711963e-17 70 3 0 3DFACE 8 taser_base 10 1.295 20 1.63697662077346 30 -4.16645552711963e-17 11 2.1475 21 1.5 31 0.8525 12 1.295 22 1.705 32 -4.51259400217434e-17 13 1.295 23 1.705 33 -4.51259400217434e-17 70 3 0 3DFACE 8 taser_base 10 1.295 20 1.705 30 -4.51259400217434e-17 11 2.1475 21 1.5 31 0.8525 12 1.295 22 1.80680418134643 32 -5.03062683862146e-17 13 1.295 23 1.80680418134643 33 -5.03062683862146e-17 70 3 0 3DFACE 8 taser_base 10 1.295 20 1.80680418134643 30 -5.03062683862146e-17 11 2.1475 21 1.5 31 0.8525 12 1.295 22 1.99491378028649 32 -5.98782670814598e-17 13 1.295 23 1.99491378028649 33 -5.98782670814598e-17 70 3 0 3DFACE 8 taser_base 10 1.295 20 1.99491378028649 30 -5.98782670814598e-17 11 2.1475 21 1.5 31 0.8525 12 1.295 22 2.2311863483779 32 -7.19010491523201e-17 13 1.295 23 2.2311863483779 33 -7.19010491523201e-17 70 3 0 3DFACE 8 taser_base 10 1.295 20 2.2311863483779 30 -7.19010491523201e-17 11 2.1475 21 1.5 31 0.8525 12 1.295 22 2.5306045958858 32 -8.71370131362283e-17 13 1.295 23 2.5306045958858 33 -8.71370131362283e-17 70 3 0 3DFACE 8 taser_base 10 1.295 20 2.5306045958858 30 -8.71370131362283e-17 11 2.1475 21 1.5 31 0.8525 12 1.295 22 3.0 32 -2.22044604925031e-16 13 1.295 23 3.0 33 -2.22044604925031e-16 70 3 0 3DFACE 8 taser_base 10 1.295 20 3.0 30 -2.22044604925031e-16 11 2.1475 21 1.5 31 0.8525 12 1.5 22 3.0 32 0.205 13 1.5 23 3.0 33 0.205 70 3 0 3DFACE 8 taser_base 10 1.5 20 3.0 30 0.205 11 2.1475 21 1.5 31 0.8525 12 2.1475 22 3.0 32 0.8525 13 2.1475 23 3.0 33 0.8525 70 1 0 LINE 8 taser_base 10 1.5 20 1.5 30 0.0 11 1.9222333770949 21 2.13191690534993 31 0.0 0 LINE 8 taser_base 10 1.5 20 1.5 30 0.0 11 1.9222333770949 21 0.868083094650066 31 0.0 0 LINE 8 taser_base 10 1.5 20 1.5 30 0.0 11 2.24539681310646 21 1.35173135526774 31 0.0 0 LINE 8 taser_base 10 1.5 20 1.5 30 0.0 11 1.79083940859747 21 2.20214844470858 31 0.0 0 LINE 8 taser_base 10 1.5 20 0.740000000000001 30 0.0 11 1.5 21 1.5 31 0.0 0 LINE 8 taser_base 10 1.5 20 1.5 30 0.0 11 1.79083940859747 21 0.797851555291423 31 0.0 0 LINE 8 taser_base 10 2.20214844470858 20 1.20916059140253 30 0.0 11 1.5 21 1.5 31 0.0 0 LINE 8 taser_base 10 1.5 20 1.5 30 0.0 11 2.24539681310645 21 1.64826864473226 31 0.0 0 LINE 8 taser_base 10 1.5 20 1.5 30 0.0 11 1.5 21 2.26 31 0.0 0 LINE 8 taser_base 10 1.5 20 1.5 30 0.0 11 2.26 21 1.5 31 0.0 0 LINE 8 taser_base 10 1.5 20 1.5 30 0.0 11 2.20214844470858 21 1.79083940859747 31 0.0 0 LINE 8 taser_base 10 1.5 20 1.5 30 0.0 11 2.13191690534993 21 1.0777666229051 31 0.0 0 LINE 8 taser_base 10 1.5 20 1.5 30 0.0 11 2.13191690534993 21 1.9222333770949 31 0.0 0 LINE 8 taser_base 10 2.03740115370178 20 0.962598846298225 30 0.0 11 1.5 21 1.5 31 0.0 0 LINE 8 taser_base 10 1.5 20 1.5 30 0.0 11 1.64826864473226 21 0.754603186893546 31 0.0 0 LINE 8 taser_base 10 1.5 20 1.5 30 0.0 11 1.64826864473226 21 2.24539681310646 31 0.0 0 LINE 8 taser_base 10 1.5 20 1.5 30 0.0 11 2.03740115370178 21 2.03740115370178 31 0.0 0 3DFACE 8 taser_base 10 1.5 20 1.5 30 0.0 11 1.295 21 1.295 31 -2.99528920185329e-17 12 1.295 22 1.36302337922654 32 -3.1526248723327e-17 13 1.295 23 1.36302337922654 33 -3.1526248723327e-17 70 0 0 3DFACE 8 taser_base 10 1.5 20 1.5 30 0.0 11 1.295 21 1.45922296468717 31 -3.37513111136975e-17 12 1.295 22 1.5 32 -6.93889390390723e-17 13 1.295 23 1.5 33 -6.93889390390723e-17 70 0 0 3DFACE 8 taser_base 10 1.5 20 1.5 30 0.0 11 1.295 21 1.80680418134643 31 -5.03062683862146e-17 12 1.295 22 1.99491378028649 32 -5.98782670814598e-17 13 1.295 23 1.99491378028649 33 -5.98782670814598e-17 70 0 0 3DFACE 8 taser_base 10 1.5 20 1.5 30 0.0 11 1.295 21 1.41508621971352 31 -3.27304438115775e-17 12 1.295 22 1.45922296468717 32 -3.37513111136975e-17 13 1.295 23 1.45922296468717 33 -3.37513111136975e-17 70 0 0 3DFACE 8 taser_base 10 1.5 20 1.5 30 0.0 11 1.295 21 1.5 31 -6.93889390390723e-17 12 1.295 22 1.54077703531283 32 -3.67694180123813e-17 13 1.295 23 1.54077703531283 33 -3.67694180123813e-17 70 0 0 3DFACE 8 taser_base 10 1.35173135526774 20 2.24539681310646 30 0.0 11 1.295 21 2.2311863483779 31 -7.19010491523201e-17 12 1.295 22 2.5306045958858 32 -8.71370131362283e-17 13 1.295 23 2.5306045958858 33 -8.71370131362283e-17 70 0 0 3DFACE 8 taser_base 10 1.35173135526774 20 2.24539681310646 30 0.0 11 1.295 21 1.99491378028649 31 -5.98782670814598e-17 12 1.295 22 2.2311863483779 32 -7.19010491523201e-17 13 1.295 23 2.2311863483779 33 -7.19010491523201e-17 70 1 0 3DFACE 8 taser_base 10 1.295 20 1.99491378028649 30 -5.98782670814598e-17 11 1.35173135526774 21 2.24539681310646 31 0.0 12 1.5 22 1.5 32 0.0 13 1.5 23 1.5 33 0.0 70 1 0 3DFACE 8 taser_base 10 1.5 20 1.5 30 0.0 11 1.295 21 1.58491378028649 31 -3.90153260770453e-17 12 1.295 22 1.63697662077346 32 -4.16645552711963e-17 13 1.295 23 1.63697662077346 33 -4.16645552711963e-17 70 0 0 3DFACE 8 taser_base 10 1.5 20 1.5 30 0.0 11 1.295 21 1.63697662077346 31 -4.16645552711963e-17 12 1.295 22 1.705 32 -4.51259400217434e-17 13 1.295 23 1.705 33 -4.51259400217434e-17 70 0 0 3DFACE 8 taser_base 10 2.08748794455568 20 1.01786110403563 30 0.0 11 3.0 21 0.0 31 0.0 12 2.03740115370178 22 0.962598846298225 32 0.0 13 2.03740115370178 23 0.962598846298225 33 0.0 70 1 0 3DFACE 8 taser_base 10 3.0 20 0.0 30 0.0 11 2.08748794455568 21 1.01786110403563 31 0.0 12 2.13191690534993 22 1.0777666229051 32 0.0 13 2.13191690534993 23 1.0777666229051 33 0.0 70 13 0 3DFACE 8 taser_base 10 3.0 20 0.0 30 0.0 11 2.13191690534993 21 1.0777666229051 31 0.0 12 3.0 22 0.497732043121052 32 0.0 13 3.0 23 0.497732043121052 33 0.0 70 13 0 3DFACE 8 taser_base 10 3.0 20 0.0 30 0.0 11 3.0 21 0.497732043121052 31 0.0 12 3.0 22 0.205 32 0.0 13 3.0 23 0.205 33 0.0 70 1 0 3DFACE 8 taser_base 10 2.17026016090475 20 1.14173848001224 30 0.0 11 3.0 21 0.497732043121052 31 0.0 12 2.13191690534993 22 1.0777666229051 32 0.0 13 2.13191690534993 23 1.0777666229051 33 0.0 70 1 0 3DFACE 8 taser_base 10 3.0 20 0.497732043121052 30 0.0 11 2.17026016090475 21 1.14173848001224 31 0.0 12 2.20214844470858 22 1.20916059140253 32 0.0 13 2.20214844470858 23 1.20916059140253 33 0.0 70 13 0 3DFACE 8 taser_base 10 3.0 20 0.497732043121052 30 0.0 11 2.20214844470858 21 1.20916059140253 31 0.0 12 3.0 22 0.878679656440358 32 0.0 13 3.0 23 0.878679656440358 33 0.0 70 1 0 3DFACE 8 taser_base 10 2.22727465515648 20 1.27938364528661 30 0.0 11 3.0 21 0.878679656440358 31 0.0 12 2.20214844470858 22 1.20916059140253 32 0.0 13 2.20214844470858 23 1.20916059140253 33 0.0 70 1 0 3DFACE 8 taser_base 10 3.0 20 0.878679656440358 30 0.0 11 2.22727465515648 21 1.27938364528661 31 0.0 12 2.24539681310646 22 1.35173135526774 32 0.0 13 2.24539681310646 23 1.35173135526774 33 0.0 70 13 0 3DFACE 8 taser_base 10 3.0 20 0.878679656440358 30 0.0 11 2.24539681310646 21 1.35173135526774 31 0.0 12 3.0 22 1.20163144893051 32 0.0 13 3.0 23 1.20163144893051 33 0.0 70 1 0 3DFACE 8 taser_base 10 2.25634039227087 20 1.42550697334953 30 0.0 11 3.0 21 1.20163144893051 31 0.0 12 2.24539681310646 22 1.35173135526774 32 0.0 13 2.24539681310646 23 1.35173135526774 33 0.0 70 1 0 3DFACE 8 taser_base 10 3.0 20 1.20163144893051 30 0.0 11 2.25634039227087 21 1.42550697334953 31 0.0 12 2.26 22 1.5 32 0.0 13 2.26 23 1.5 33 0.0 70 13 0 3DFACE 8 taser_base 10 3.0 20 1.20163144893051 30 0.0 11 2.26 21 1.5 31 0.0 12 3.0 22 1.5 32 0.0 13 3.0 23 1.5 33 0.0 70 1 0 3DFACE 8 taser_base 10 1.5 20 3.0 30 0.0 11 1.295 21 2.5306045958858 31 -8.71370131362283e-17 12 1.295 22 3.0 32 -2.22044604925031e-16 13 1.295 23 3.0 33 -2.22044604925031e-16 70 1 0 3DFACE 8 taser_base 10 1.295 20 2.5306045958858 30 -8.71370131362283e-17 11 1.5 21 3.0 31 0.0 12 1.35173135526774 22 2.24539681310646 32 0.0 13 1.35173135526774 23 2.24539681310646 33 0.0 70 3 0 3DFACE 8 taser_base 10 1.35173135526774 20 2.24539681310646 30 0.0 11 1.5 21 3.0 31 0.0 12 1.42550697334953 22 2.25634039227087 32 0.0 13 1.42550697334953 23 2.25634039227087 33 0.0 70 3 0 3DFACE 8 taser_base 10 1.42550697334953 20 2.25634039227087 30 0.0 11 1.5 21 3.0 31 0.0 12 1.5 22 2.26 32 0.0 13 1.5 23 2.26 33 0.0 70 1 0 3DFACE 8 taser_base 10 1.79836855106949 20 3.0 30 0.0 11 1.5 21 2.26 31 0.0 12 1.5 22 3.0 32 0.0 13 1.5 23 3.0 33 0.0 70 1 0 3DFACE 8 taser_base 10 1.5 20 2.26 30 0.0 11 1.79836855106949 21 3.0 31 0.0 12 1.57449302665047 22 2.25634039227087 32 0.0 13 1.57449302665047 23 2.25634039227087 33 0.0 70 3 0 3DFACE 8 taser_base 10 1.57449302665047 20 2.25634039227087 30 0.0 11 1.79836855106949 21 3.0 31 0.0 12 1.64826864473226 22 2.24539681310646 32 0.0 13 1.64826864473226 23 2.24539681310646 33 0.0 70 1 0 3DFACE 8 taser_base 10 1.35173135526774 20 0.754603186893546 30 0.0 11 1.295 21 0.0 31 0.0 12 1.295 22 0.469395404114199 32 -1.0856949693767e-17 13 1.295 23 0.469395404114199 33 -1.0856949693767e-17 70 1 0 3DFACE 8 taser_base 10 1.295 20 0.0 30 0.0 11 1.35173135526774 21 0.754603186893546 31 0.0 12 1.5 22 4.9960036108132e-16 32 0.0 13 1.5 23 4.9960036108132e-16 33 0.0 70 3 0 3DFACE 8 taser_base 10 1.5 20 4.9960036108132e-16 30 0.0 11 1.35173135526774 21 0.754603186893546 31 0.0 12 1.42550697334953 22 0.743659607729131 32 0.0 13 1.42550697334953 23 0.743659607729131 33 0.0 70 13 0 3DFACE 8 taser_base 10 1.5 20 4.9960036108132e-16 30 0.0 11 1.42550697334953 21 0.743659607729131 31 0.0 12 1.5 22 0.740000000000001 32 0.0 13 1.5 23 0.740000000000001 33 0.0 70 1 0 3DFACE 8 taser_base 10 1.57449302665047 20 0.743659607729131 30 0.0 11 1.5 21 4.9960036108132e-16 31 0.0 12 1.5 22 0.740000000000001 32 0.0 13 1.5 23 0.740000000000001 33 0.0 70 1 0 3DFACE 8 taser_base 10 1.5 20 4.9960036108132e-16 30 0.0 11 1.57449302665047 21 0.743659607729131 31 0.0 12 1.79836855106949 22 4.9960036108132e-16 32 0.0 13 1.79836855106949 23 4.9960036108132e-16 33 0.0 70 3 0 3DFACE 8 taser_base 10 1.79836855106949 20 4.9960036108132e-16 30 0.0 11 1.57449302665047 21 0.743659607729131 31 0.0 12 1.64826864473226 22 0.754603186893546 32 0.0 13 1.64826864473226 23 0.754603186893546 33 0.0 70 1 0 3DFACE 8 taser_base 10 1.5 20 1.5 30 0.0 11 1.295 21 1.705 31 -4.51259400217434e-17 12 1.295 22 1.80680418134643 32 -5.03062683862146e-17 13 1.295 23 1.80680418134643 33 -5.03062683862146e-17 70 0 0 3DFACE 8 taser_base 10 1.79836855106949 20 3.0 30 0.0 11 1.72061635471339 21 2.22727465515648 31 0.0 12 1.64826864473226 22 2.24539681310646 32 0.0 13 1.64826864473226 23 2.24539681310646 33 0.0 70 1 0 3DFACE 8 taser_base 10 1.72061635471339 20 2.22727465515648 30 0.0 11 1.79836855106949 21 3.0 31 0.0 12 1.79083940859747 22 2.20214844470858 32 0.0 13 1.79083940859747 23 2.20214844470858 33 0.0 70 3 0 3DFACE 8 taser_base 10 1.79083940859747 20 2.20214844470858 30 0.0 11 1.79836855106949 21 3.0 31 0.0 12 2.12132034355964 22 3.0 32 0.0 13 2.12132034355964 23 3.0 33 0.0 70 1 0 3DFACE 8 taser_base 10 1.5 20 1.5 30 0.0 11 1.295 21 1.36302337922654 31 -3.1526248723327e-17 12 1.295 22 1.41508621971352 32 -3.27304438115775e-17 13 1.295 23 1.41508621971352 33 -3.27304438115775e-17 70 0 0 3DFACE 8 taser_base 10 1.85826151998776 20 0.829739839095251 30 0.0 11 2.12132034355964 21 4.44089209850063e-16 31 0.0 12 1.79083940859747 22 0.797851555291423 32 0.0 13 1.79083940859747 23 0.797851555291423 33 0.0 70 1 0 3DFACE 8 taser_base 10 2.12132034355964 20 4.44089209850063e-16 30 0.0 11 1.85826151998776 21 0.829739839095251 31 0.0 12 1.9222333770949 22 0.868083094650066 32 0.0 13 1.9222333770949 23 0.868083094650066 33 0.0 70 13 0 3DFACE 8 taser_base 10 2.12132034355964 20 4.44089209850063e-16 30 0.0 11 1.9222333770949 21 0.868083094650066 31 0.0 12 2.50226795687895 22 4.44089209850063e-16 32 0.0 13 2.50226795687895 23 4.44089209850063e-16 33 0.0 70 1 0 3DFACE 8 taser_base 10 1.72061635471339 20 0.772725344843522 30 0.0 11 1.79836855106949 21 4.9960036108132e-16 31 0.0 12 1.64826864473226 22 0.754603186893546 32 0.0 13 1.64826864473226 23 0.754603186893546 33 0.0 70 1 0 3DFACE 8 taser_base 10 1.79836855106949 20 4.9960036108132e-16 30 0.0 11 1.72061635471339 21 0.772725344843522 31 0.0 12 1.79083940859747 22 0.797851555291423 32 0.0 13 1.79083940859747 23 0.797851555291423 33 0.0 70 13 0 3DFACE 8 taser_base 10 1.79836855106949 20 4.9960036108132e-16 30 0.0 11 1.79083940859747 21 0.797851555291423 31 0.0 12 2.12132034355964 22 4.44089209850063e-16 32 0.0 13 2.12132034355964 23 4.44089209850063e-16 33 0.0 70 1 0 3DFACE 8 taser_base 10 2.12132034355964 20 3.0 30 0.0 11 1.85826151998776 21 2.17026016090475 31 0.0 12 1.79083940859747 22 2.20214844470858 32 0.0 13 1.79083940859747 23 2.20214844470858 33 0.0 70 1 0 3DFACE 8 taser_base 10 1.85826151998776 20 2.17026016090475 30 0.0 11 2.12132034355964 21 3.0 31 0.0 12 1.9222333770949 22 2.13191690534993 32 0.0 13 1.9222333770949 23 2.13191690534993 33 0.0 70 3 0 3DFACE 8 taser_base 10 1.9222333770949 20 2.13191690534993 30 0.0 11 2.12132034355964 21 3.0 31 0.0 12 2.50226795687895 22 3.0 32 0.0 13 2.50226795687895 23 3.0 33 0.0 70 1 0 3DFACE 8 taser_base 10 3.0 20 1.79836855106949 30 0.0 11 2.25634039227087 21 1.57449302665047 31 0.0 12 2.24539681310645 22 1.64826864473226 32 0.0 13 2.24539681310645 23 1.64826864473226 33 0.0 70 1 0 3DFACE 8 taser_base 10 2.25634039227087 20 1.57449302665047 30 0.0 11 3.0 21 1.79836855106949 31 0.0 12 2.26 22 1.5 32 0.0 13 2.26 23 1.5 33 0.0 70 3 0 3DFACE 8 taser_base 10 2.26 20 1.5 30 0.0 11 3.0 21 1.79836855106949 31 0.0 12 3.0 22 1.5 32 0.0 13 3.0 23 1.5 33 0.0 70 1 0 3DFACE 8 taser_base 10 2.50226795687895 20 3.0 30 0.0 11 1.98213889596437 21 2.08748794455568 31 0.0 12 1.9222333770949 22 2.13191690534993 32 0.0 13 1.9222333770949 23 2.13191690534993 33 0.0 70 1 0 3DFACE 8 taser_base 10 1.98213889596437 20 2.08748794455568 30 0.0 11 2.50226795687895 21 3.0 31 0.0 12 2.03740115370178 22 2.03740115370178 32 0.0 13 2.03740115370178 23 2.03740115370178 33 0.0 70 3 0 3DFACE 8 taser_base 10 2.03740115370178 20 2.03740115370178 30 0.0 11 2.50226795687895 21 3.0 31 0.0 12 2.795 22 3.0 32 0.0 13 2.795 23 3.0 33 0.0 70 13 0 3DFACE 8 taser_base 10 2.03740115370178 20 2.03740115370178 30 0.0 11 2.795 21 3.0 31 0.0 12 3.0 22 3.0 32 0.0 13 3.0 23 3.0 33 0.0 70 1 0 3DFACE 8 taser_base 10 3.0 20 3.0 30 0.0 11 2.08748794455568 21 1.98213889596437 31 0.0 12 2.03740115370178 22 2.03740115370178 32 0.0 13 2.03740115370178 23 2.03740115370178 33 0.0 70 1 0 3DFACE 8 taser_base 10 2.08748794455568 20 1.98213889596437 30 0.0 11 3.0 21 3.0 31 0.0 12 2.13191690534993 22 1.9222333770949 32 0.0 13 2.13191690534993 23 1.9222333770949 33 0.0 70 3 0 3DFACE 8 taser_base 10 2.13191690534993 20 1.9222333770949 30 0.0 11 3.0 21 3.0 31 0.0 12 3.0 22 2.50226795687895 32 0.0 13 3.0 23 2.50226795687895 33 0.0 70 3 0 3DFACE 8 taser_base 10 3.0 20 2.50226795687895 30 0.0 11 3.0 21 3.0 31 0.0 12 3.0 22 2.795 32 0.0 13 3.0 23 2.795 33 0.0 70 1 0 3DFACE 8 taser_base 10 1.35173135526774 20 0.754603186893546 30 0.0 11 1.295 21 0.469395404114199 31 -1.0856949693767e-17 12 1.295 22 0.768813651622095 32 -1.77823878682707e-17 13 1.295 23 0.768813651622095 33 -1.77823878682707e-17 70 0 0 3DFACE 8 taser_base 10 1.5 20 1.5 30 0.0 11 1.295 21 0.768813651622095 31 -1.77823878682707e-17 12 1.295 22 1.00508621971351 32 -2.32472888095709e-17 13 1.295 23 1.00508621971351 33 -2.32472888095709e-17 70 1 0 3DFACE 8 taser_base 10 1.295 20 0.768813651622095 30 -1.77823878682707e-17 11 1.5 21 1.5 31 0.0 12 1.35173135526774 22 0.754603186893546 32 0.0 13 1.35173135526774 23 0.754603186893546 33 0.0 70 1 0 3DFACE 8 taser_base 10 3.0 20 2.50226795687895 30 0.0 11 2.17026016090475 21 1.85826151998776 31 0.0 12 2.13191690534993 22 1.9222333770949 32 0.0 13 2.13191690534993 23 1.9222333770949 33 0.0 70 1 0 3DFACE 8 taser_base 10 2.17026016090475 20 1.85826151998776 30 0.0 11 3.0 21 2.50226795687895 31 0.0 12 2.20214844470858 22 1.79083940859747 32 0.0 13 2.20214844470858 23 1.79083940859747 33 0.0 70 3 0 3DFACE 8 taser_base 10 2.20214844470858 20 1.79083940859747 30 0.0 11 3.0 21 2.50226795687895 31 0.0 12 3.0 22 2.12132034355964 32 0.0 13 3.0 23 2.12132034355964 33 0.0 70 1 0 3DFACE 8 taser_base 10 3.0 20 2.12132034355964 30 0.0 11 2.22727465515648 21 1.72061635471339 31 0.0 12 2.20214844470858 22 1.79083940859747 32 0.0 13 2.20214844470858 23 1.79083940859747 33 0.0 70 1 0 3DFACE 8 taser_base 10 2.22727465515648 20 1.72061635471339 30 0.0 11 3.0 21 2.12132034355964 31 0.0 12 2.24539681310645 22 1.64826864473226 32 0.0 13 2.24539681310645 23 1.64826864473226 33 0.0 70 3 0 3DFACE 8 taser_base 10 2.24539681310645 20 1.64826864473226 30 0.0 11 3.0 21 2.12132034355964 31 0.0 12 3.0 22 1.79836855106949 32 0.0 13 3.0 23 1.79836855106949 33 0.0 70 1 0 3DFACE 8 taser_base 10 1.98213889596437 20 0.912512055444321 30 0.0 11 2.50226795687895 21 4.44089209850063e-16 31 0.0 12 1.9222333770949 22 0.868083094650066 32 0.0 13 1.9222333770949 23 0.868083094650066 33 0.0 70 1 0 3DFACE 8 taser_base 10 2.50226795687895 20 4.44089209850063e-16 30 0.0 11 1.98213889596437 21 0.912512055444321 31 0.0 12 2.03740115370178 22 0.962598846298225 32 0.0 13 2.03740115370178 23 0.962598846298225 33 0.0 70 13 0 3DFACE 8 taser_base 10 2.50226795687895 20 4.44089209850063e-16 30 0.0 11 2.03740115370178 21 0.962598846298225 31 0.0 12 3.0 22 0.0 32 0.0 13 3.0 23 0.0 33 0.0 70 1 0 3DFACE 8 taser_base 10 1.42550697334953 20 2.25634039227087 30 0.0 11 1.5 21 1.5 31 0.0 12 1.35173135526774 22 2.24539681310646 32 0.0 13 1.35173135526774 23 2.24539681310646 33 0.0 70 1 0 3DFACE 8 taser_base 10 1.5 20 1.5 30 0.0 11 1.42550697334953 21 2.25634039227087 31 0.0 12 1.5 22 2.26 32 0.0 13 1.5 23 2.26 33 0.0 70 13 0 3DFACE 8 taser_base 10 1.5 20 1.5 30 0.0 11 1.5 21 2.26 31 0.0 12 1.57449302665047 22 2.25634039227087 32 0.0 13 1.57449302665047 23 2.25634039227087 33 0.0 70 13 0 3DFACE 8 taser_base 10 1.5 20 1.5 30 0.0 11 1.57449302665047 21 2.25634039227087 31 0.0 12 1.5 22 0.740000000000001 32 0.0 13 1.5 23 0.740000000000001 33 0.0 70 15 0 3DFACE 8 taser_base 10 1.5 20 0.740000000000001 30 0.0 11 1.57449302665047 21 2.25634039227087 31 0.0 12 1.57449302665047 22 0.743659607729131 32 0.0 13 1.57449302665047 23 0.743659607729131 33 0.0 70 3 0 3DFACE 8 taser_base 10 1.57449302665047 20 0.743659607729131 30 0.0 11 1.57449302665047 21 2.25634039227087 31 0.0 12 1.64826864473226 22 2.24539681310646 32 0.0 13 1.64826864473226 23 2.24539681310646 33 0.0 70 13 0 3DFACE 8 taser_base 10 1.57449302665047 20 0.743659607729131 30 0.0 11 1.64826864473226 21 2.24539681310646 31 0.0 12 1.64826864473226 22 0.754603186893546 32 0.0 13 1.64826864473226 23 0.754603186893546 33 0.0 70 3 0 3DFACE 8 taser_base 10 1.64826864473226 20 0.754603186893546 30 0.0 11 1.64826864473226 21 2.24539681310646 31 0.0 12 1.72061635471339 22 2.22727465515648 32 0.0 13 1.72061635471339 23 2.22727465515648 33 0.0 70 13 0 3DFACE 8 taser_base 10 1.64826864473226 20 0.754603186893546 30 0.0 11 1.72061635471339 21 2.22727465515648 31 0.0 12 1.72061635471339 22 0.772725344843522 32 0.0 13 1.72061635471339 23 0.772725344843522 33 0.0 70 3 0 3DFACE 8 taser_base 10 1.72061635471339 20 0.772725344843522 30 0.0 11 1.72061635471339 21 2.22727465515648 31 0.0 12 1.79083940859747 22 2.20214844470858 32 0.0 13 1.79083940859747 23 2.20214844470858 33 0.0 70 13 0 3DFACE 8 taser_base 10 1.72061635471339 20 0.772725344843522 30 0.0 11 1.79083940859747 21 2.20214844470858 31 0.0 12 1.79083940859747 22 0.797851555291423 32 0.0 13 1.79083940859747 23 0.797851555291423 33 0.0 70 3 0 3DFACE 8 taser_base 10 1.79083940859747 20 0.797851555291423 30 0.0 11 1.79083940859747 21 2.20214844470858 31 0.0 12 1.85826151998776 22 2.17026016090475 32 0.0 13 1.85826151998776 23 2.17026016090475 33 0.0 70 13 0 3DFACE 8 taser_base 10 1.79083940859747 20 0.797851555291423 30 0.0 11 1.85826151998776 21 2.17026016090475 31 0.0 12 1.85826151998776 22 0.829739839095251 32 0.0 13 1.85826151998776 23 0.829739839095251 33 0.0 70 3 0 3DFACE 8 taser_base 10 1.85826151998776 20 0.829739839095251 30 0.0 11 1.85826151998776 21 2.17026016090475 31 0.0 12 1.9222333770949 22 2.13191690534993 32 0.0 13 1.9222333770949 23 2.13191690534993 33 0.0 70 13 0 3DFACE 8 taser_base 10 1.85826151998776 20 0.829739839095251 30 0.0 11 1.9222333770949 21 2.13191690534993 31 0.0 12 1.9222333770949 22 0.868083094650066 32 0.0 13 1.9222333770949 23 0.868083094650066 33 0.0 70 3 0 3DFACE 8 taser_base 10 1.9222333770949 20 0.868083094650066 30 0.0 11 1.9222333770949 21 2.13191690534993 31 0.0 12 1.98213889596437 22 2.08748794455568 32 0.0 13 1.98213889596437 23 2.08748794455568 33 0.0 70 13 0 3DFACE 8 taser_base 10 1.9222333770949 20 0.868083094650066 30 0.0 11 1.98213889596437 21 2.08748794455568 31 0.0 12 1.98213889596437 22 0.912512055444321 32 0.0 13 1.98213889596437 23 0.912512055444321 33 0.0 70 3 0 3DFACE 8 taser_base 10 1.98213889596437 20 0.912512055444321 30 0.0 11 1.98213889596437 21 2.08748794455568 31 0.0 12 2.03740115370178 22 2.03740115370178 32 0.0 13 2.03740115370178 23 2.03740115370178 33 0.0 70 13 0 3DFACE 8 taser_base 10 1.98213889596437 20 0.912512055444321 30 0.0 11 2.03740115370178 21 2.03740115370178 31 0.0 12 2.03740115370178 22 0.962598846298225 32 0.0 13 2.03740115370178 23 0.962598846298225 33 0.0 70 3 0 3DFACE 8 taser_base 10 2.03740115370178 20 0.962598846298225 30 0.0 11 2.03740115370178 21 2.03740115370178 31 0.0 12 2.08748794455568 22 1.98213889596437 32 0.0 13 2.08748794455568 23 1.98213889596437 33 0.0 70 13 0 3DFACE 8 taser_base 10 2.03740115370178 20 0.962598846298225 30 0.0 11 2.08748794455568 21 1.98213889596437 31 0.0 12 2.08748794455568 22 1.01786110403563 32 0.0 13 2.08748794455568 23 1.01786110403563 33 0.0 70 3 0 3DFACE 8 taser_base 10 2.08748794455568 20 1.01786110403563 30 0.0 11 2.08748794455568 21 1.98213889596437 31 0.0 12 2.13191690534993 22 1.9222333770949 32 0.0 13 2.13191690534993 23 1.9222333770949 33 0.0 70 13 0 3DFACE 8 taser_base 10 2.08748794455568 20 1.01786110403563 30 0.0 11 2.13191690534993 21 1.9222333770949 31 0.0 12 2.13191690534993 22 1.0777666229051 32 0.0 13 2.13191690534993 23 1.0777666229051 33 0.0 70 3 0 3DFACE 8 taser_base 10 2.13191690534993 20 1.0777666229051 30 0.0 11 2.13191690534993 21 1.9222333770949 31 0.0 12 2.17026016090475 22 1.85826151998776 32 0.0 13 2.17026016090475 23 1.85826151998776 33 0.0 70 13 0 3DFACE 8 taser_base 10 2.13191690534993 20 1.0777666229051 30 0.0 11 2.17026016090475 21 1.85826151998776 31 0.0 12 2.17026016090475 22 1.14173848001224 32 0.0 13 2.17026016090475 23 1.14173848001224 33 0.0 70 3 0 3DFACE 8 taser_base 10 2.17026016090475 20 1.14173848001224 30 0.0 11 2.17026016090475 21 1.85826151998776 31 0.0 12 2.20214844470858 22 1.79083940859747 32 0.0 13 2.20214844470858 23 1.79083940859747 33 0.0 70 13 0 3DFACE 8 taser_base 10 2.17026016090475 20 1.14173848001224 30 0.0 11 2.20214844470858 21 1.79083940859747 31 0.0 12 2.20214844470858 22 1.20916059140253 32 0.0 13 2.20214844470858 23 1.20916059140253 33 0.0 70 3 0 3DFACE 8 taser_base 10 2.20214844470858 20 1.20916059140253 30 0.0 11 2.20214844470858 21 1.79083940859747 31 0.0 12 2.22727465515648 22 1.72061635471339 32 0.0 13 2.22727465515648 23 1.72061635471339 33 0.0 70 13 0 3DFACE 8 taser_base 10 2.20214844470858 20 1.20916059140253 30 0.0 11 2.22727465515648 21 1.72061635471339 31 0.0 12 2.22727465515648 22 1.27938364528661 32 0.0 13 2.22727465515648 23 1.27938364528661 33 0.0 70 3 0 3DFACE 8 taser_base 10 2.22727465515648 20 1.27938364528661 30 0.0 11 2.22727465515648 21 1.72061635471339 31 0.0 12 2.24539681310645 22 1.64826864473226 32 0.0 13 2.24539681310645 23 1.64826864473226 33 0.0 70 13 0 3DFACE 8 taser_base 10 2.22727465515648 20 1.27938364528661 30 0.0 11 2.24539681310645 21 1.64826864473226 31 0.0 12 2.24539681310646 22 1.35173135526774 32 0.0 13 2.24539681310646 23 1.35173135526774 33 0.0 70 3 0 3DFACE 8 taser_base 10 2.24539681310646 20 1.35173135526774 30 0.0 11 2.24539681310645 21 1.64826864473226 31 0.0 12 2.25634039227087 22 1.57449302665047 32 0.0 13 2.25634039227087 23 1.57449302665047 33 0.0 70 13 0 3DFACE 8 taser_base 10 2.24539681310646 20 1.35173135526774 30 0.0 11 2.25634039227087 21 1.57449302665047 31 0.0 12 2.25634039227087 22 1.42550697334953 32 0.0 13 2.25634039227087 23 1.42550697334953 33 0.0 70 3 0 3DFACE 8 taser_base 10 2.25634039227087 20 1.42550697334953 30 0.0 11 2.25634039227087 21 1.57449302665047 31 0.0 12 2.26 22 1.5 32 0.0 13 2.26 23 1.5 33 0.0 70 1 0 3DFACE 8 taser_base 10 1.5 20 1.5 30 0.0 11 1.42550697334953 21 0.743659607729131 31 0.0 12 1.35173135526774 22 0.754603186893546 32 0.0 13 1.35173135526774 23 0.754603186893546 33 0.0 70 1 0 3DFACE 8 taser_base 10 1.42550697334953 20 0.743659607729131 30 0.0 11 1.5 21 1.5 31 0.0 12 1.5 22 0.740000000000001 32 0.0 13 1.5 23 0.740000000000001 33 0.0 70 3 0 3DFACE 8 taser_base 10 1.5 20 1.5 30 0.0 11 1.295 21 1.00508621971351 31 -2.32472888095709e-17 12 1.295 22 1.19319581865357 32 -2.75981973074096e-17 13 1.295 23 1.19319581865357 33 -2.75981973074096e-17 70 0 0 3DFACE 8 taser_base 10 1.5 20 1.5 30 0.0 11 1.295 21 1.54077703531283 31 -3.67694180123813e-17 12 1.295 22 1.58491378028649 32 -3.90153260770453e-17 13 1.295 23 1.58491378028649 33 -3.90153260770453e-17 70 0 0 LINE 8 taser_base 10 1.5 20 0.740000000000001 30 3.0 11 1.5 21 1.5 31 3.0 0 LINE 8 taser_base 10 1.5 20 1.5 30 3.0 11 1.64826864473226 21 0.754603186893546 31 3.0 0 LINE 8 taser_base 10 1.5 20 1.5 30 3.0 11 2.03740115370178 21 2.03740115370178 31 3.0 0 LINE 8 taser_base 10 2.03740115370178 20 0.962598846298225 30 3.0 11 1.5 21 1.5 31 3.0 0 LINE 8 taser_base 10 1.5 20 1.5 30 3.0 11 2.26 21 1.5 31 3.0 0 LINE 8 taser_base 10 1.5 20 1.5 30 3.0 11 2.20214844470858 21 1.79083940859747 31 3.0 0 LINE 8 taser_base 10 1.5 20 1.5 30 3.0 11 2.13191690534993 21 1.0777666229051 31 3.0 0 LINE 8 taser_base 10 1.5 20 1.5 30 3.0 11 1.79083940859747 21 0.797851555291423 31 3.0 0 LINE 8 taser_base 10 1.5 20 1.5 30 3.0 11 2.24539681310645 21 1.64826864473226 31 3.0 0 LINE 8 taser_base 10 1.5 20 1.5 30 3.0 11 1.9222333770949 21 2.13191690534993 31 3.0 0 LINE 8 taser_base 10 1.5 20 1.5 30 3.0 11 2.13191690534993 21 1.9222333770949 31 3.0 0 LINE 8 taser_base 10 1.5 20 1.5 30 3.0 11 1.9222333770949 21 0.868083094650066 31 3.0 0 LINE 8 taser_base 10 2.20214844470858 20 1.20916059140253 30 3.0 11 1.5 21 1.5 31 3.0 0 LINE 8 taser_base 10 1.5 20 1.5 30 3.0 11 1.64826864473226 21 2.24539681310646 31 3.0 0 LINE 8 taser_base 10 1.5 20 1.5 30 3.0 11 2.24539681310646 21 1.35173135526774 31 3.0 0 LINE 8 taser_base 10 1.5 20 1.5 30 3.0 11 1.5 21 2.26 31 3.0 0 LINE 8 taser_base 10 1.5 20 1.5 30 3.0 11 1.79083940859747 21 2.20214844470858 31 3.0 0 3DFACE 8 taser_base 10 1.5 20 1.5 30 3.0 11 1.295 21 1.5 31 3.0 12 1.295 22 1.45922296468717 32 3.0 13 1.295 23 1.45922296468717 33 3.0 70 0 0 3DFACE 8 taser_base 10 1.35173135526774 20 2.24539681310646 30 3.0 11 1.295 21 2.5306045958858 31 3.0 12 1.295 22 2.2311863483779 32 3.0 13 1.295 23 2.2311863483779 33 3.0 70 0 0 3DFACE 8 taser_base 10 1.5 20 1.5 30 3.0 11 1.295 21 2.2311863483779 31 3.0 12 1.295 22 1.99491378028649 32 3.0 13 1.295 23 1.99491378028649 33 3.0 70 1 0 3DFACE 8 taser_base 10 1.295 20 2.2311863483779 30 3.0 11 1.5 21 1.5 31 3.0 12 1.35173135526774 22 2.24539681310646 32 3.0 13 1.35173135526774 23 2.24539681310646 33 3.0 70 1 0 3DFACE 8 taser_base 10 1.5 20 1.5 30 3.0 11 1.295 21 1.36302337922654 31 3.0 12 1.295 22 1.295 32 3.0 13 1.295 23 1.295 33 3.0 70 0 0 3DFACE 8 taser_base 10 1.5 20 4.9960036108132e-16 30 3.0 11 1.295 21 0.469395404114199 31 3.0 12 1.295 22 0.0 32 3.0 13 1.295 23 0.0 33 3.0 70 1 0 3DFACE 8 taser_base 10 1.295 20 0.469395404114199 30 3.0 11 1.5 21 4.9960036108132e-16 31 3.0 12 1.35173135526774 22 0.754603186893546 32 3.0 13 1.35173135526774 23 0.754603186893546 33 3.0 70 3 0 3DFACE 8 taser_base 10 1.35173135526774 20 0.754603186893546 30 3.0 11 1.5 21 4.9960036108132e-16 31 3.0 12 1.42550697334953 22 0.743659607729131 32 3.0 13 1.42550697334953 23 0.743659607729131 33 3.0 70 3 0 3DFACE 8 taser_base 10 1.42550697334953 20 0.743659607729131 30 3.0 11 1.5 21 4.9960036108132e-16 31 3.0 12 1.5 22 0.740000000000001 32 3.0 13 1.5 23 0.740000000000001 33 3.0 70 1 0 3DFACE 8 taser_base 10 1.5 20 1.5 30 3.0 11 1.295 21 1.41508621971352 31 3.0 12 1.295 22 1.36302337922654 32 3.0 13 1.295 23 1.36302337922654 33 3.0 70 0 0 3DFACE 8 taser_base 10 1.5 20 1.5 30 3.0 11 1.295 21 1.295 31 3.0 12 1.295 22 1.19319581865357 32 3.0 13 1.295 23 1.19319581865357 33 3.0 70 0 0 3DFACE 8 taser_base 10 3.0 20 0.0 30 3.0 11 2.08748794455568 21 1.01786110403563 31 3.0 12 2.03740115370178 22 0.962598846298225 32 3.0 13 2.03740115370178 23 0.962598846298225 33 3.0 70 1 0 3DFACE 8 taser_base 10 2.08748794455568 20 1.01786110403563 30 3.0 11 3.0 21 0.0 31 3.0 12 2.13191690534993 22 1.0777666229051 32 3.0 13 2.13191690534993 23 1.0777666229051 33 3.0 70 3 0 3DFACE 8 taser_base 10 2.13191690534993 20 1.0777666229051 30 3.0 11 3.0 21 0.0 31 3.0 12 3.0 22 0.497732043121052 32 3.0 13 3.0 23 0.497732043121052 33 3.0 70 3 0 3DFACE 8 taser_base 10 3.0 20 0.497732043121052 30 3.0 11 3.0 21 0.0 31 3.0 12 3.0 22 0.205 32 3.0 13 3.0 23 0.205 33 3.0 70 1 0 3DFACE 8 taser_base 10 3.0 20 0.497732043121052 30 3.0 11 2.17026016090475 21 1.14173848001224 31 3.0 12 2.13191690534993 22 1.0777666229051 32 3.0 13 2.13191690534993 23 1.0777666229051 33 3.0 70 1 0 3DFACE 8 taser_base 10 2.17026016090475 20 1.14173848001224 30 3.0 11 3.0 21 0.497732043121052 31 3.0 12 2.20214844470858 22 1.20916059140253 32 3.0 13 2.20214844470858 23 1.20916059140253 33 3.0 70 3 0 3DFACE 8 taser_base 10 2.20214844470858 20 1.20916059140253 30 3.0 11 3.0 21 0.497732043121052 31 3.0 12 3.0 22 0.878679656440358 32 3.0 13 3.0 23 0.878679656440358 33 3.0 70 1 0 3DFACE 8 taser_base 10 1.5 20 1.5 30 3.0 11 1.295 21 1.58491378028648 31 3.0 12 1.295 22 1.54077703531283 32 3.0 13 1.295 23 1.54077703531283 33 3.0 70 0 0 3DFACE 8 taser_base 10 1.5 20 1.5 30 3.0 11 1.295 21 1.45922296468717 31 3.0 12 1.295 22 1.41508621971352 32 3.0 13 1.295 23 1.41508621971352 33 3.0 70 0 0 3DFACE 8 taser_base 10 1.5 20 1.5 30 3.0 11 1.295 21 1.19319581865357 31 3.0 12 1.295 22 1.00508621971351 32 3.0 13 1.295 23 1.00508621971351 33 3.0 70 0 0 3DFACE 8 taser_base 10 1.35173135526774 20 0.754603186893546 30 3.0 11 1.295 21 0.768813651622095 31 3.0 12 1.295 22 0.469395404114199 32 3.0 13 1.295 23 0.469395404114199 33 3.0 70 0 0 3DFACE 8 taser_base 10 1.57449302665047 20 2.25634039227087 30 3.0 11 1.5 21 3.0 31 3.0 12 1.5 22 2.26 32 3.0 13 1.5 23 2.26 33 3.0 70 1 0 3DFACE 8 taser_base 10 1.5 20 3.0 30 3.0 11 1.57449302665047 21 2.25634039227087 31 3.0 12 1.79836855106949 22 3.0 32 3.0 13 1.79836855106949 23 3.0 33 3.0 70 3 0 3DFACE 8 taser_base 10 1.79836855106949 20 3.0 30 3.0 11 1.57449302665047 21 2.25634039227087 31 3.0 12 1.64826864473226 22 2.24539681310646 32 3.0 13 1.64826864473226 23 2.24539681310646 33 3.0 70 1 0 3DFACE 8 taser_base 10 1.72061635471339 20 2.22727465515648 30 3.0 11 1.79836855106949 21 3.0 31 3.0 12 1.64826864473226 22 2.24539681310646 32 3.0 13 1.64826864473226 23 2.24539681310646 33 3.0 70 1 0 3DFACE 8 taser_base 10 1.79836855106949 20 3.0 30 3.0 11 1.72061635471339 21 2.22727465515648 31 3.0 12 1.79083940859747 22 2.20214844470858 32 3.0 13 1.79083940859747 23 2.20214844470858 33 3.0 70 13 0 3DFACE 8 taser_base 10 1.79836855106949 20 3.0 30 3.0 11 1.79083940859747 21 2.20214844470858 31 3.0 12 2.12132034355964 22 3.0 32 3.0 13 2.12132034355964 23 3.0 33 3.0 70 1 0 3DFACE 8 taser_base 10 3.0 20 0.878679656440358 30 3.0 11 2.22727465515648 21 1.27938364528661 31 3.0 12 2.20214844470858 22 1.20916059140253 32 3.0 13 2.20214844470858 23 1.20916059140253 33 3.0 70 1 0 3DFACE 8 taser_base 10 2.22727465515648 20 1.27938364528661 30 3.0 11 3.0 21 0.878679656440358 31 3.0 12 2.24539681310646 22 1.35173135526774 32 3.0 13 2.24539681310646 23 1.35173135526774 33 3.0 70 3 0 3DFACE 8 taser_base 10 2.24539681310646 20 1.35173135526774 30 3.0 11 3.0 21 0.878679656440358 31 3.0 12 3.0 22 1.20163144893051 32 3.0 13 3.0 23 1.20163144893051 33 3.0 70 1 0 3DFACE 8 taser_base 10 2.17026016090475 20 1.85826151998776 30 3.0 11 3.0 21 2.50226795687895 31 3.0 12 2.13191690534993 22 1.9222333770949 32 3.0 13 2.13191690534993 23 1.9222333770949 33 3.0 70 1 0 3DFACE 8 taser_base 10 3.0 20 2.50226795687895 30 3.0 11 2.17026016090475 21 1.85826151998776 31 3.0 12 2.20214844470858 22 1.79083940859747 32 3.0 13 2.20214844470858 23 1.79083940859747 33 3.0 70 13 0 3DFACE 8 taser_base 10 3.0 20 2.50226795687895 30 3.0 11 2.20214844470858 21 1.79083940859747 31 3.0 12 3.0 22 2.12132034355964 32 3.0 13 3.0 23 2.12132034355964 33 3.0 70 1 0 3DFACE 8 taser_base 10 1.5 20 1.5 30 3.0 11 1.295 21 1.80680418134643 31 3.0 12 1.295 22 1.705 32 3.0 13 1.295 23 1.705 33 3.0 70 0 0 3DFACE 8 taser_base 10 1.5 20 1.5 30 3.0 11 1.295 21 1.99491378028649 31 3.0 12 1.295 22 1.80680418134643 32 3.0 13 1.295 23 1.80680418134643 33 3.0 70 0 0 3DFACE 8 taser_base 10 1.5 20 1.5 30 3.0 11 1.295 21 1.705 31 3.0 12 1.295 22 1.63697662077346 32 3.0 13 1.295 23 1.63697662077346 33 3.0 70 0 0 3DFACE 8 taser_base 10 1.5 20 1.5 30 3.0 11 1.295 21 1.63697662077346 31 3.0 12 1.295 22 1.58491378028648 32 3.0 13 1.295 23 1.58491378028648 33 3.0 70 0 0 3DFACE 8 taser_base 10 1.35173135526774 20 2.24539681310646 30 3.0 11 1.295 21 3.0 31 3.0 12 1.295 22 2.5306045958858 32 3.0 13 1.295 23 2.5306045958858 33 3.0 70 1 0 3DFACE 8 taser_base 10 1.295 20 3.0 30 3.0 11 1.35173135526774 21 2.24539681310646 31 3.0 12 1.5 22 3.0 32 3.0 13 1.5 23 3.0 33 3.0 70 3 0 3DFACE 8 taser_base 10 1.5 20 3.0 30 3.0 11 1.35173135526774 21 2.24539681310646 31 3.0 12 1.42550697334953 22 2.25634039227087 32 3.0 13 1.42550697334953 23 2.25634039227087 33 3.0 70 13 0 3DFACE 8 taser_base 10 1.5 20 3.0 30 3.0 11 1.42550697334953 21 2.25634039227087 31 3.0 12 1.5 22 2.26 32 3.0 13 1.5 23 2.26 33 3.0 70 1 0 3DFACE 8 taser_base 10 2.12132034355964 20 4.44089209850063e-16 30 3.0 11 1.85826151998776 21 0.829739839095251 31 3.0 12 1.79083940859747 22 0.797851555291423 32 3.0 13 1.79083940859747 23 0.797851555291423 33 3.0 70 1 0 3DFACE 8 taser_base 10 1.85826151998776 20 0.829739839095251 30 3.0 11 2.12132034355964 21 4.44089209850063e-16 31 3.0 12 1.9222333770949 22 0.868083094650066 32 3.0 13 1.9222333770949 23 0.868083094650066 33 3.0 70 3 0 3DFACE 8 taser_base 10 1.9222333770949 20 0.868083094650066 30 3.0 11 2.12132034355964 21 4.44089209850063e-16 31 3.0 12 2.50226795687895 22 4.44089209850063e-16 32 3.0 13 2.50226795687895 23 4.44089209850063e-16 33 3.0 70 1 0 3DFACE 8 taser_base 10 2.50226795687895 20 4.44089209850063e-16 30 3.0 11 1.98213889596437 21 0.912512055444321 31 3.0 12 1.9222333770949 22 0.868083094650066 32 3.0 13 1.9222333770949 23 0.868083094650066 33 3.0 70 1 0 3DFACE 8 taser_base 10 1.98213889596437 20 0.912512055444321 30 3.0 11 2.50226795687895 21 4.44089209850063e-16 31 3.0 12 2.03740115370178 22 0.962598846298225 32 3.0 13 2.03740115370178 23 0.962598846298225 33 3.0 70 3 0 3DFACE 8 taser_base 10 2.03740115370178 20 0.962598846298225 30 3.0 11 2.50226795687895 21 4.44089209850063e-16 31 3.0 12 3.0 22 0.0 32 3.0 13 3.0 23 0.0 33 3.0 70 1 0 3DFACE 8 taser_base 10 1.35173135526774 20 0.754603186893546 30 3.0 11 1.295 21 1.00508621971351 31 3.0 12 1.295 22 0.768813651622095 32 3.0 13 1.295 23 0.768813651622095 33 3.0 70 1 0 3DFACE 8 taser_base 10 1.295 20 1.00508621971351 30 3.0 11 1.35173135526774 21 0.754603186893546 31 3.0 12 1.5 22 1.5 32 3.0 13 1.5 23 1.5 33 3.0 70 1 0 3DFACE 8 taser_base 10 2.22727465515648 20 1.72061635471339 30 3.0 11 3.0 21 2.12132034355964 31 3.0 12 2.20214844470858 22 1.79083940859747 32 3.0 13 2.20214844470858 23 1.79083940859747 33 3.0 70 1 0 3DFACE 8 taser_base 10 3.0 20 2.12132034355964 30 3.0 11 2.22727465515648 21 1.72061635471339 31 3.0 12 2.24539681310645 22 1.64826864473226 32 3.0 13 2.24539681310645 23 1.64826864473226 33 3.0 70 13 0 3DFACE 8 taser_base 10 3.0 20 2.12132034355964 30 3.0 11 2.24539681310645 21 1.64826864473226 31 3.0 12 3.0 22 1.79836855106949 32 3.0 13 3.0 23 1.79836855106949 33 3.0 70 1 0 3DFACE 8 taser_base 10 1.79836855106949 20 4.9960036108132e-16 30 3.0 11 1.72061635471339 21 0.772725344843522 31 3.0 12 1.64826864473226 22 0.754603186893546 32 3.0 13 1.64826864473226 23 0.754603186893546 33 3.0 70 1 0 3DFACE 8 taser_base 10 1.72061635471339 20 0.772725344843522 30 3.0 11 1.79836855106949 21 4.9960036108132e-16 31 3.0 12 1.79083940859747 22 0.797851555291423 32 3.0 13 1.79083940859747 23 0.797851555291423 33 3.0 70 3 0 3DFACE 8 taser_base 10 1.79083940859747 20 0.797851555291423 30 3.0 11 1.79836855106949 21 4.9960036108132e-16 31 3.0 12 2.12132034355964 22 4.44089209850063e-16 32 3.0 13 2.12132034355964 23 4.44089209850063e-16 33 3.0 70 1 0 3DFACE 8 taser_base 10 3.0 20 1.20163144893051 30 3.0 11 2.25634039227087 21 1.42550697334953 31 3.0 12 2.24539681310646 22 1.35173135526774 32 3.0 13 2.24539681310646 23 1.35173135526774 33 3.0 70 1 0 3DFACE 8 taser_base 10 2.25634039227087 20 1.42550697334953 30 3.0 11 3.0 21 1.20163144893051 31 3.0 12 2.26 22 1.5 32 3.0 13 2.26 23 1.5 33 3.0 70 3 0 3DFACE 8 taser_base 10 2.26 20 1.5 30 3.0 11 3.0 21 1.20163144893051 31 3.0 12 3.0 22 1.5 32 3.0 13 3.0 23 1.5 33 3.0 70 1 0 3DFACE 8 taser_base 10 2.25634039227087 20 1.57449302665047 30 3.0 11 3.0 21 1.79836855106949 31 3.0 12 2.24539681310645 22 1.64826864473226 32 3.0 13 2.24539681310645 23 1.64826864473226 33 3.0 70 1 0 3DFACE 8 taser_base 10 3.0 20 1.79836855106949 30 3.0 11 2.25634039227087 21 1.57449302665047 31 3.0 12 2.26 22 1.5 32 3.0 13 2.26 23 1.5 33 3.0 70 13 0 3DFACE 8 taser_base 10 3.0 20 1.79836855106949 30 3.0 11 2.26 21 1.5 31 3.0 12 3.0 22 1.5 32 3.0 13 3.0 23 1.5 33 3.0 70 1 0 3DFACE 8 taser_base 10 1.79836855106949 20 4.9960036108132e-16 30 3.0 11 1.5 21 0.740000000000001 31 3.0 12 1.5 22 4.9960036108132e-16 32 3.0 13 1.5 23 4.9960036108132e-16 33 3.0 70 1 0 3DFACE 8 taser_base 10 1.5 20 0.740000000000001 30 3.0 11 1.79836855106949 21 4.9960036108132e-16 31 3.0 12 1.57449302665047 22 0.743659607729131 32 3.0 13 1.57449302665047 23 0.743659607729131 33 3.0 70 3 0 3DFACE 8 taser_base 10 1.57449302665047 20 0.743659607729131 30 3.0 11 1.79836855106949 21 4.9960036108132e-16 31 3.0 12 1.64826864473226 22 0.754603186893546 32 3.0 13 1.64826864473226 23 0.754603186893546 33 3.0 70 1 0 3DFACE 8 taser_base 10 2.08748794455568 20 1.98213889596437 30 3.0 11 3.0 21 3.0 31 3.0 12 2.03740115370178 22 2.03740115370178 32 3.0 13 2.03740115370178 23 2.03740115370178 33 3.0 70 1 0 3DFACE 8 taser_base 10 3.0 20 3.0 30 3.0 11 2.08748794455568 21 1.98213889596437 31 3.0 12 2.13191690534993 22 1.9222333770949 32 3.0 13 2.13191690534993 23 1.9222333770949 33 3.0 70 13 0 3DFACE 8 taser_base 10 3.0 20 3.0 30 3.0 11 2.13191690534993 21 1.9222333770949 31 3.0 12 3.0 22 2.50226795687895 32 3.0 13 3.0 23 2.50226795687895 33 3.0 70 13 0 3DFACE 8 taser_base 10 3.0 20 3.0 30 3.0 11 3.0 21 2.50226795687895 31 3.0 12 3.0 22 2.795 32 3.0 13 3.0 23 2.795 33 3.0 70 1 0 3DFACE 8 taser_base 10 1.98213889596437 20 2.08748794455568 30 3.0 11 2.50226795687895 21 3.0 31 3.0 12 1.9222333770949 22 2.13191690534993 32 3.0 13 1.9222333770949 23 2.13191690534993 33 3.0 70 1 0 3DFACE 8 taser_base 10 2.50226795687895 20 3.0 30 3.0 11 1.98213889596437 21 2.08748794455568 31 3.0 12 2.03740115370178 22 2.03740115370178 32 3.0 13 2.03740115370178 23 2.03740115370178 33 3.0 70 13 0 3DFACE 8 taser_base 10 2.50226795687895 20 3.0 30 3.0 11 2.03740115370178 21 2.03740115370178 31 3.0 12 2.795 22 3.0 32 3.0 13 2.795 23 3.0 33 3.0 70 3 0 3DFACE 8 taser_base 10 2.795 20 3.0 30 3.0 11 2.03740115370178 21 2.03740115370178 31 3.0 12 3.0 22 3.0 32 3.0 13 3.0 23 3.0 33 3.0 70 1 0 3DFACE 8 taser_base 10 1.85826151998776 20 2.17026016090475 30 3.0 11 2.12132034355964 21 3.0 31 3.0 12 1.79083940859747 22 2.20214844470858 32 3.0 13 1.79083940859747 23 2.20214844470858 33 3.0 70 1 0 3DFACE 8 taser_base 10 2.12132034355964 20 3.0 30 3.0 11 1.85826151998776 21 2.17026016090475 31 3.0 12 1.9222333770949 22 2.13191690534993 32 3.0 13 1.9222333770949 23 2.13191690534993 33 3.0 70 13 0 3DFACE 8 taser_base 10 2.12132034355964 20 3.0 30 3.0 11 1.9222333770949 21 2.13191690534993 31 3.0 12 2.50226795687895 22 3.0 32 3.0 13 2.50226795687895 23 3.0 33 3.0 70 1 0 3DFACE 8 taser_base 10 1.42550697334953 20 0.743659607729131 30 3.0 11 1.5 21 1.5 31 3.0 12 1.35173135526774 22 0.754603186893546 32 3.0 13 1.35173135526774 23 0.754603186893546 33 3.0 70 1 0 3DFACE 8 taser_base 10 1.5 20 1.5 30 3.0 11 1.42550697334953 21 0.743659607729131 31 3.0 12 1.5 22 0.740000000000001 32 3.0 13 1.5 23 0.740000000000001 33 3.0 70 13 0 3DFACE 8 taser_base 10 1.5 20 1.5 30 3.0 11 1.5 21 0.740000000000001 31 3.0 12 1.57449302665047 22 0.743659607729131 32 3.0 13 1.57449302665047 23 0.743659607729131 33 3.0 70 13 0 3DFACE 8 taser_base 10 1.5 20 1.5 30 3.0 11 1.57449302665047 21 0.743659607729131 31 3.0 12 1.5 22 2.26 32 3.0 13 1.5 23 2.26 33 3.0 70 15 0 3DFACE 8 taser_base 10 1.5 20 2.26 30 3.0 11 1.57449302665047 21 0.743659607729131 31 3.0 12 1.57449302665047 22 2.25634039227087 32 3.0 13 1.57449302665047 23 2.25634039227087 33 3.0 70 3 0 3DFACE 8 taser_base 10 1.57449302665047 20 2.25634039227087 30 3.0 11 1.57449302665047 21 0.743659607729131 31 3.0 12 1.64826864473226 22 0.754603186893546 32 3.0 13 1.64826864473226 23 0.754603186893546 33 3.0 70 13 0 3DFACE 8 taser_base 10 1.57449302665047 20 2.25634039227087 30 3.0 11 1.64826864473226 21 0.754603186893546 31 3.0 12 1.64826864473226 22 2.24539681310646 32 3.0 13 1.64826864473226 23 2.24539681310646 33 3.0 70 3 0 3DFACE 8 taser_base 10 1.64826864473226 20 2.24539681310646 30 3.0 11 1.64826864473226 21 0.754603186893546 31 3.0 12 1.72061635471339 22 0.772725344843522 32 3.0 13 1.72061635471339 23 0.772725344843522 33 3.0 70 13 0 3DFACE 8 taser_base 10 1.64826864473226 20 2.24539681310646 30 3.0 11 1.72061635471339 21 0.772725344843522 31 3.0 12 1.72061635471339 22 2.22727465515648 32 3.0 13 1.72061635471339 23 2.22727465515648 33 3.0 70 3 0 3DFACE 8 taser_base 10 1.72061635471339 20 2.22727465515648 30 3.0 11 1.72061635471339 21 0.772725344843522 31 3.0 12 1.79083940859747 22 0.797851555291423 32 3.0 13 1.79083940859747 23 0.797851555291423 33 3.0 70 13 0 3DFACE 8 taser_base 10 1.72061635471339 20 2.22727465515648 30 3.0 11 1.79083940859747 21 0.797851555291423 31 3.0 12 1.79083940859747 22 2.20214844470858 32 3.0 13 1.79083940859747 23 2.20214844470858 33 3.0 70 3 0 3DFACE 8 taser_base 10 1.79083940859747 20 2.20214844470858 30 3.0 11 1.79083940859747 21 0.797851555291423 31 3.0 12 1.85826151998776 22 0.829739839095251 32 3.0 13 1.85826151998776 23 0.829739839095251 33 3.0 70 13 0 3DFACE 8 taser_base 10 1.79083940859747 20 2.20214844470858 30 3.0 11 1.85826151998776 21 0.829739839095251 31 3.0 12 1.85826151998776 22 2.17026016090475 32 3.0 13 1.85826151998776 23 2.17026016090475 33 3.0 70 3 0 3DFACE 8 taser_base 10 1.85826151998776 20 2.17026016090475 30 3.0 11 1.85826151998776 21 0.829739839095251 31 3.0 12 1.9222333770949 22 0.868083094650066 32 3.0 13 1.9222333770949 23 0.868083094650066 33 3.0 70 13 0 3DFACE 8 taser_base 10 1.85826151998776 20 2.17026016090475 30 3.0 11 1.9222333770949 21 0.868083094650066 31 3.0 12 1.9222333770949 22 2.13191690534993 32 3.0 13 1.9222333770949 23 2.13191690534993 33 3.0 70 3 0 3DFACE 8 taser_base 10 1.9222333770949 20 2.13191690534993 30 3.0 11 1.9222333770949 21 0.868083094650066 31 3.0 12 1.98213889596437 22 2.08748794455568 32 3.0 13 1.98213889596437 23 2.08748794455568 33 3.0 70 3 0 3DFACE 8 taser_base 10 1.98213889596437 20 2.08748794455568 30 3.0 11 1.9222333770949 21 0.868083094650066 31 3.0 12 1.98213889596437 22 0.912512055444321 32 3.0 13 1.98213889596437 23 0.912512055444321 33 3.0 70 13 0 3DFACE 8 taser_base 10 1.98213889596437 20 2.08748794455568 30 3.0 11 1.98213889596437 21 0.912512055444321 31 3.0 12 2.03740115370178 22 0.962598846298225 32 3.0 13 2.03740115370178 23 0.962598846298225 33 3.0 70 13 0 3DFACE 8 taser_base 10 1.98213889596437 20 2.08748794455568 30 3.0 11 2.03740115370178 21 0.962598846298225 31 3.0 12 2.03740115370178 22 2.03740115370178 32 3.0 13 2.03740115370178 23 2.03740115370178 33 3.0 70 3 0 3DFACE 8 taser_base 10 2.03740115370178 20 2.03740115370178 30 3.0 11 2.03740115370178 21 0.962598846298225 31 3.0 12 2.08748794455568 22 1.01786110403563 32 3.0 13 2.08748794455568 23 1.01786110403563 33 3.0 70 13 0 3DFACE 8 taser_base 10 2.03740115370178 20 2.03740115370178 30 3.0 11 2.08748794455568 21 1.01786110403563 31 3.0 12 2.08748794455568 22 1.98213889596437 32 3.0 13 2.08748794455568 23 1.98213889596437 33 3.0 70 3 0 3DFACE 8 taser_base 10 2.08748794455568 20 1.98213889596437 30 3.0 11 2.08748794455568 21 1.01786110403563 31 3.0 12 2.13191690534993 22 1.0777666229051 32 3.0 13 2.13191690534993 23 1.0777666229051 33 3.0 70 13 0 3DFACE 8 taser_base 10 2.08748794455568 20 1.98213889596437 30 3.0 11 2.13191690534993 21 1.0777666229051 31 3.0 12 2.13191690534993 22 1.9222333770949 32 3.0 13 2.13191690534993 23 1.9222333770949 33 3.0 70 3 0 3DFACE 8 taser_base 10 2.13191690534993 20 1.9222333770949 30 3.0 11 2.13191690534993 21 1.0777666229051 31 3.0 12 2.17026016090475 22 1.14173848001224 32 3.0 13 2.17026016090475 23 1.14173848001224 33 3.0 70 13 0 3DFACE 8 taser_base 10 2.13191690534993 20 1.9222333770949 30 3.0 11 2.17026016090475 21 1.14173848001224 31 3.0 12 2.17026016090475 22 1.85826151998776 32 3.0 13 2.17026016090475 23 1.85826151998776 33 3.0 70 3 0 3DFACE 8 taser_base 10 2.17026016090475 20 1.85826151998776 30 3.0 11 2.17026016090475 21 1.14173848001224 31 3.0 12 2.20214844470858 22 1.20916059140253 32 3.0 13 2.20214844470858 23 1.20916059140253 33 3.0 70 13 0 3DFACE 8 taser_base 10 2.17026016090475 20 1.85826151998776 30 3.0 11 2.20214844470858 21 1.20916059140253 31 3.0 12 2.20214844470858 22 1.79083940859747 32 3.0 13 2.20214844470858 23 1.79083940859747 33 3.0 70 3 0 3DFACE 8 taser_base 10 2.20214844470858 20 1.79083940859747 30 3.0 11 2.20214844470858 21 1.20916059140253 31 3.0 12 2.22727465515648 22 1.27938364528661 32 3.0 13 2.22727465515648 23 1.27938364528661 33 3.0 70 13 0 3DFACE 8 taser_base 10 2.20214844470858 20 1.79083940859747 30 3.0 11 2.22727465515648 21 1.27938364528661 31 3.0 12 2.22727465515648 22 1.72061635471339 32 3.0 13 2.22727465515648 23 1.72061635471339 33 3.0 70 3 0 3DFACE 8 taser_base 10 2.22727465515648 20 1.72061635471339 30 3.0 11 2.22727465515648 21 1.27938364528661 31 3.0 12 2.24539681310646 22 1.35173135526774 32 3.0 13 2.24539681310646 23 1.35173135526774 33 3.0 70 13 0 3DFACE 8 taser_base 10 2.22727465515648 20 1.72061635471339 30 3.0 11 2.24539681310646 21 1.35173135526774 31 3.0 12 2.24539681310645 22 1.64826864473226 32 3.0 13 2.24539681310645 23 1.64826864473226 33 3.0 70 3 0 3DFACE 8 taser_base 10 2.24539681310645 20 1.64826864473226 30 3.0 11 2.24539681310646 21 1.35173135526774 31 3.0 12 2.25634039227087 22 1.57449302665047 32 3.0 13 2.25634039227087 23 1.57449302665047 33 3.0 70 3 0 3DFACE 8 taser_base 10 2.25634039227087 20 1.57449302665047 30 3.0 11 2.24539681310646 21 1.35173135526774 31 3.0 12 2.25634039227087 22 1.42550697334953 32 3.0 13 2.25634039227087 23 1.42550697334953 33 3.0 70 13 0 3DFACE 8 taser_base 10 2.25634039227087 20 1.57449302665047 30 3.0 11 2.25634039227087 21 1.42550697334953 31 3.0 12 2.26 22 1.5 32 3.0 13 2.26 23 1.5 33 3.0 70 1 0 3DFACE 8 taser_base 10 1.5 20 1.5 30 3.0 11 1.42550697334953 21 2.25634039227087 31 3.0 12 1.35173135526774 22 2.24539681310646 32 3.0 13 1.35173135526774 23 2.24539681310646 33 3.0 70 1 0 3DFACE 8 taser_base 10 1.42550697334953 20 2.25634039227087 30 3.0 11 1.5 21 1.5 31 3.0 12 1.5 22 2.26 32 3.0 13 1.5 23 2.26 33 3.0 70 3 0 3DFACE 8 taser_base 10 3.0 20 0.0 30 0.205 11 2.50226795687895 21 4.44089209850063e-16 31 0.0 12 3.0 22 0.0 32 0.0 13 3.0 23 0.0 33 0.0 70 1 0 3DFACE 8 taser_base 10 2.50226795687895 20 4.44089209850063e-16 30 0.0 11 3.0 21 0.0 31 0.205 12 2.12132034355964 22 4.44089209850063e-16 32 0.0 13 2.12132034355964 23 4.44089209850063e-16 33 0.0 70 3 0 3DFACE 8 taser_base 10 2.12132034355964 20 4.44089209850063e-16 30 0.0 11 3.0 21 0.0 31 0.205 12 1.79836855106949 22 4.9960036108132e-16 32 0.0 13 1.79836855106949 23 4.9960036108132e-16 33 0.0 70 3 0 3DFACE 8 taser_base 10 1.79836855106949 20 4.9960036108132e-16 30 0.0 11 3.0 21 0.0 31 0.205 12 1.5 22 4.9960036108132e-16 32 0.0 13 1.5 23 4.9960036108132e-16 33 0.0 70 3 0 3DFACE 8 taser_base 10 1.5 20 4.9960036108132e-16 30 0.0 11 3.0 21 0.0 31 0.205 12 1.295 22 0.0 32 0.0 13 1.295 23 0.0 33 0.0 70 3 0 3DFACE 8 taser_base 10 1.295 20 0.0 30 0.0 11 3.0 21 0.0 31 0.205 12 1.295 22 0.0 32 3.0 13 1.295 23 0.0 33 3.0 70 3 0 3DFACE 8 taser_base 10 1.295 20 0.0 30 3.0 11 3.0 21 0.0 31 0.205 12 3.0 22 0.0 32 1.5 13 3.0 23 0.0 33 1.5 70 13 0 3DFACE 8 taser_base 10 1.295 20 0.0 30 3.0 11 3.0 21 0.0 31 1.5 12 3.0 22 0.0 32 2.795 13 3.0 23 0.0 33 2.795 70 13 0 3DFACE 8 taser_base 10 1.295 20 0.0 30 3.0 11 3.0 21 0.0 31 2.795 12 3.0 22 0.0 32 3.0 13 3.0 23 0.0 33 3.0 70 13 0 3DFACE 8 taser_base 10 1.295 20 0.0 30 3.0 11 3.0 21 0.0 31 3.0 12 2.50226795687895 22 4.44089209850063e-16 32 3.0 13 2.50226795687895 23 4.44089209850063e-16 33 3.0 70 13 0 3DFACE 8 taser_base 10 1.295 20 0.0 30 3.0 11 2.50226795687895 21 4.44089209850063e-16 31 3.0 12 2.12132034355964 22 4.44089209850063e-16 32 3.0 13 2.12132034355964 23 4.44089209850063e-16 33 3.0 70 13 0 3DFACE 8 taser_base 10 1.295 20 0.0 30 3.0 11 2.12132034355964 21 4.44089209850063e-16 31 3.0 12 1.79836855106949 22 4.9960036108132e-16 32 3.0 13 1.79836855106949 23 4.9960036108132e-16 33 3.0 70 13 0 3DFACE 8 taser_base 10 1.295 20 0.0 30 3.0 11 1.79836855106949 21 4.9960036108132e-16 31 3.0 12 1.5 22 4.9960036108132e-16 32 3.0 13 1.5 23 4.9960036108132e-16 33 3.0 70 1 0 3DFACE 8 taser_base 10 1.295 20 0.469395404114199 30 3.0 11 1.295 21 0.0 31 0.0 12 1.295 22 0.0 32 3.0 13 1.295 23 0.0 33 3.0 70 1 0 3DFACE 8 taser_base 10 1.295 20 0.0 30 0.0 11 1.295 21 0.469395404114199 31 3.0 12 1.295 22 0.469395404114199 32 -1.0856949693767e-17 13 1.295 23 0.469395404114199 33 -1.0856949693767e-17 70 3 0 3DFACE 8 taser_base 10 1.295 20 0.469395404114199 30 -1.0856949693767e-17 11 1.295 21 0.469395404114199 31 3.0 12 1.295 22 0.768813651622095 32 -1.77823878682707e-17 13 1.295 23 0.768813651622095 33 -1.77823878682707e-17 70 3 0 3DFACE 8 taser_base 10 1.295 20 0.768813651622095 30 -1.77823878682707e-17 11 1.295 21 0.469395404114199 31 3.0 12 1.295 22 0.768813651622095 32 3.0 13 1.295 23 0.768813651622095 33 3.0 70 13 0 3DFACE 8 taser_base 10 1.295 20 0.768813651622095 30 -1.77823878682707e-17 11 1.295 21 0.768813651622095 31 3.0 12 1.295 22 1.00508621971351 32 3.0 13 1.295 23 1.00508621971351 33 3.0 70 13 0 3DFACE 8 taser_base 10 1.295 20 0.768813651622095 30 -1.77823878682707e-17 11 1.295 21 1.00508621971351 31 3.0 12 1.295 22 1.00508621971351 32 -2.32472888095709e-17 13 1.295 23 1.00508621971351 33 -2.32472888095709e-17 70 3 0 3DFACE 8 taser_base 10 1.295 20 1.00508621971351 30 -2.32472888095709e-17 11 1.295 21 1.00508621971351 31 3.0 12 1.295 22 1.19319581865357 32 -2.75981973074096e-17 13 1.295 23 1.19319581865357 33 -2.75981973074096e-17 70 3 0 3DFACE 8 taser_base 10 1.295 20 1.19319581865357 30 -2.75981973074096e-17 11 1.295 21 1.00508621971351 31 3.0 12 1.295 22 1.19319581865357 32 3.0 13 1.295 23 1.19319581865357 33 3.0 70 13 0 3DFACE 8 taser_base 10 1.295 20 1.19319581865357 30 -2.75981973074096e-17 11 1.295 21 1.19319581865357 31 3.0 12 1.295 22 1.295 32 -2.99528920185329e-17 13 1.295 23 1.295 33 -2.99528920185329e-17 70 3 0 3DFACE 8 taser_base 10 1.295 20 1.295 30 -2.99528920185329e-17 11 1.295 21 1.19319581865357 31 3.0 12 1.295 22 1.295 32 3.0 13 1.295 23 1.295 33 3.0 70 13 0 3DFACE 8 taser_base 10 1.295 20 1.295 30 -2.99528920185329e-17 11 1.295 21 1.295 31 3.0 12 1.295 22 1.36302337922654 32 -3.1526248723327e-17 13 1.295 23 1.36302337922654 33 -3.1526248723327e-17 70 3 0 3DFACE 8 taser_base 10 1.295 20 1.36302337922654 30 -3.1526248723327e-17 11 1.295 21 1.295 31 3.0 12 1.295 22 1.36302337922654 32 3.0 13 1.295 23 1.36302337922654 33 3.0 70 13 0 3DFACE 8 taser_base 10 1.295 20 1.36302337922654 30 -3.1526248723327e-17 11 1.295 21 1.36302337922654 31 3.0 12 1.295 22 1.41508621971352 32 3.0 13 1.295 23 1.41508621971352 33 3.0 70 13 0 3DFACE 8 taser_base 10 1.295 20 1.36302337922654 30 -3.1526248723327e-17 11 1.295 21 1.41508621971352 31 3.0 12 1.295 22 1.41508621971352 32 -3.27304438115775e-17 13 1.295 23 1.41508621971352 33 -3.27304438115775e-17 70 3 0 3DFACE 8 taser_base 10 1.295 20 1.41508621971352 30 -3.27304438115775e-17 11 1.295 21 1.41508621971352 31 3.0 12 1.295 22 1.45922296468717 32 3.0 13 1.295 23 1.45922296468717 33 3.0 70 13 0 3DFACE 8 taser_base 10 1.295 20 1.41508621971352 30 -3.27304438115775e-17 11 1.295 21 1.45922296468717 31 3.0 12 1.295 22 1.45922296468717 32 -3.37513111136975e-17 13 1.295 23 1.45922296468717 33 -3.37513111136975e-17 70 3 0 3DFACE 8 taser_base 10 1.295 20 1.45922296468717 30 -3.37513111136975e-17 11 1.295 21 1.45922296468717 31 3.0 12 1.295 22 1.5 32 3.0 13 1.295 23 1.5 33 3.0 70 13 0 3DFACE 8 taser_base 10 1.295 20 1.45922296468717 30 -3.37513111136975e-17 11 1.295 21 1.5 31 3.0 12 1.295 22 1.5 32 -6.93889390390723e-17 13 1.295 23 1.5 33 -6.93889390390723e-17 70 1 0 3DFACE 8 taser_base 10 1.5 20 3.0 30 3.0 11 1.5 21 3.0 31 2.795 12 1.295 22 3.0 32 3.0 13 1.295 23 3.0 33 3.0 70 0 0 3DFACE 8 taser_base 10 1.5 20 3.0 30 0.205 11 1.5 21 3.0 31 0.0 12 1.295 22 3.0 32 -2.22044604925031e-16 13 1.295 23 3.0 33 -2.22044604925031e-16 70 0 0 3DFACE 8 taser_base 10 1.5 20 3.0 30 0.205 11 1.79836855106949 21 3.0 31 0.0 12 1.5 22 3.0 32 0.0 13 1.5 23 3.0 33 0.0 70 1 0 3DFACE 8 taser_base 10 1.79836855106949 20 3.0 30 0.0 11 1.5 21 3.0 31 0.205 12 2.12132034355964 22 3.0 32 0.0 13 2.12132034355964 23 3.0 33 0.0 70 3 0 3DFACE 8 taser_base 10 2.12132034355964 20 3.0 30 0.0 11 1.5 21 3.0 31 0.205 12 2.50226795687895 22 3.0 32 0.0 13 2.50226795687895 23 3.0 33 0.0 70 3 0 3DFACE 8 taser_base 10 2.50226795687895 20 3.0 30 0.0 11 1.5 21 3.0 31 0.205 12 2.795 22 3.0 32 0.0 13 2.795 23 3.0 33 0.0 70 3 0 3DFACE 8 taser_base 10 2.795 20 3.0 30 0.0 11 1.5 21 3.0 31 0.205 12 2.795 22 3.0 32 0.205 13 2.795 23 3.0 33 0.205 70 1 0 3DFACE 8 taser_base 10 2.1475 20 3.0 30 0.8525 11 2.795 21 3.0 31 0.205 12 1.5 22 3.0 32 0.205 13 1.5 23 3.0 33 0.205 70 0 0 3DFACE 8 taser_base 10 2.795 20 3.0 30 0.205 11 3.0 21 3.0 31 0.0 12 2.795 22 3.0 32 0.0 13 2.795 23 3.0 33 0.0 70 0 0 3DFACE 8 taser_base 10 3.0 20 3.0 30 3.0 11 3.0 21 3.0 31 2.795 12 2.795 22 3.0 32 2.795 13 2.795 23 3.0 33 2.795 70 0 0 3DFACE 8 taser_base 10 2.795 20 3.0 30 1.5 11 3.0 21 3.0 31 0.205 12 2.795 22 3.0 32 0.205 13 2.795 23 3.0 33 0.205 70 1 0 3DFACE 8 taser_base 10 3.0 20 3.0 30 0.205 11 2.795 21 3.0 31 1.5 12 3.0 22 3.0 32 1.5 13 3.0 23 3.0 33 1.5 70 1 0 3DFACE 8 taser_base 10 2.1475 20 3.0 30 1.71583333333333 11 2.795 21 3.0 31 1.5 12 2.1475 22 3.0 32 1.5 13 2.1475 23 3.0 33 1.5 70 1 0 3DFACE 8 taser_base 10 2.795 20 3.0 30 1.5 11 2.1475 21 3.0 31 1.71583333333333 12 2.1475 22 3.0 32 2.1475 13 2.1475 23 3.0 33 2.1475 70 1 0 3DFACE 8 taser_base 10 2.795 20 3.0 30 2.795 11 3.0 21 3.0 31 1.5 12 2.795 22 3.0 32 1.5 13 2.795 23 3.0 33 1.5 70 1 0 3DFACE 8 taser_base 10 3.0 20 3.0 30 1.5 11 2.795 21 3.0 31 2.795 12 3.0 22 3.0 32 2.795 13 3.0 23 3.0 33 2.795 70 1 0 3DFACE 8 taser_base 10 1.5 20 3.0 30 3.0 11 2.795 21 3.0 31 2.795 12 1.5 22 3.0 32 2.795 13 1.5 23 3.0 33 2.795 70 1 0 3DFACE 8 taser_base 10 2.795 20 3.0 30 2.795 11 1.5 21 3.0 31 3.0 12 2.50226795687895 22 3.0 32 3.0 13 2.50226795687895 23 3.0 33 3.0 70 15 0 3DFACE 8 taser_base 10 2.795 20 3.0 30 2.795 11 2.50226795687895 21 3.0 31 3.0 12 2.795 22 3.0 32 3.0 13 2.795 23 3.0 33 3.0 70 1 0 3DFACE 8 taser_base 10 2.50226795687895 20 3.0 30 3.0 11 1.5 21 3.0 31 3.0 12 1.79836855106949 22 3.0 32 3.0 13 1.79836855106949 23 3.0 33 3.0 70 13 0 3DFACE 8 taser_base 10 2.50226795687895 20 3.0 30 3.0 11 1.79836855106949 21 3.0 31 3.0 12 2.12132034355964 22 3.0 32 3.0 13 2.12132034355964 23 3.0 33 3.0 70 1 0 3DFACE 8 taser_base 10 2.1475 20 3.0 30 1.28416666666667 11 2.795 21 3.0 31 1.5 12 2.1475 22 3.0 32 0.8525 13 2.1475 23 3.0 33 0.8525 70 1 0 3DFACE 8 taser_base 10 2.795 20 3.0 30 1.5 11 2.1475 21 3.0 31 1.28416666666667 12 2.1475 22 3.0 32 1.5 13 2.1475 23 3.0 33 1.5 70 1 0 3DFACE 8 taser_base 10 1.71461991087043 20 3.0 30 1.5 11 1.71583333333333 21 3.0 31 1.27412051524007 12 1.71461991087043 22 3.0 32 1.27285567614847 13 1.71461991087043 23 3.0 33 1.27285567614847 70 1 0 3DFACE 8 taser_base 10 1.71583333333333 20 3.0 30 1.27412051524007 11 1.71461991087043 21 3.0 31 1.5 12 2.1475 22 3.0 32 1.28416666666667 13 2.1475 23 3.0 33 1.28416666666667 70 15 0 3DFACE 8 taser_base 10 2.1475 20 3.0 30 1.28416666666667 11 1.71461991087043 21 3.0 31 1.5 12 2.1475 22 3.0 32 1.5 13 2.1475 23 3.0 33 1.5 70 1 0 3DFACE 8 taser_base 10 2.1475 20 3.0 30 1.28416666666667 11 1.71583333333333 21 3.0 31 0.8525 12 1.71583333333333 22 3.0 32 1.27412051524007 13 1.71583333333333 23 3.0 33 1.27412051524007 70 12 0 3DFACE 8 taser_base 10 1.71461991087043 20 3.0 30 1.72547110140021 11 2.1475 21 3.0 31 1.5 12 1.71461991087043 22 3.0 32 1.5 13 1.71461991087043 23 3.0 33 1.5 70 1 0 3DFACE 8 taser_base 10 2.1475 20 3.0 30 1.5 11 1.71461991087043 21 3.0 31 1.72547110140021 12 2.1475 22 3.0 32 1.71583333333333 13 2.1475 23 3.0 33 1.71583333333333 70 3 0 3DFACE 8 taser_base 10 2.1475 20 3.0 30 1.71583333333333 11 1.71461991087043 21 3.0 31 1.72547110140021 12 1.71583333333333 22 3.0 32 1.72547110140021 13 1.71583333333333 23 3.0 33 1.72547110140021 70 13 0 3DFACE 8 taser_base 10 2.1475 20 3.0 30 1.71583333333333 11 1.71583333333333 21 3.0 31 1.72547110140021 12 1.71583333333333 22 3.0 32 2.1475 13 1.71583333333333 23 3.0 33 2.1475 70 1 0 3DFACE 8 taser_base 10 1.5 20 3.0 30 1.5 11 1.52180460101532 21 3.0 31 1.18826163313676 12 1.5 22 3.0 32 1.18780925188093 13 1.5 23 3.0 33 1.18780925188093 70 1 0 3DFACE 8 taser_base 10 1.52180460101532 20 3.0 30 1.18826163313676 11 1.5 21 3.0 31 1.5 12 1.55225530915257 22 3.0 32 1.19189996321751 13 1.55225530915257 23 3.0 33 1.19189996321751 70 3 0 3DFACE 8 taser_base 10 1.55225530915257 20 3.0 30 1.19189996321751 11 1.5 21 3.0 31 1.5 12 1.58220277009702 22 3.0 32 1.1985054650771 13 1.58220277009702 23 3.0 33 1.1985054650771 70 3 0 3DFACE 8 taser_base 10 1.58220277009702 20 3.0 30 1.1985054650771 11 1.5 21 3.0 31 1.5 12 1.61135857342883 22 3.0 32 1.20801452412167 13 1.61135857342883 23 3.0 33 1.20801452412167 70 3 0 3DFACE 8 taser_base 10 1.61135857342883 20 3.0 30 1.20801452412167 11 1.5 21 3.0 31 1.5 12 1.63944193282374 22 3.0 32 1.22033556291445 13 1.63944193282374 23 3.0 33 1.22033556291445 70 3 0 3DFACE 8 taser_base 10 1.63944193282374 20 3.0 30 1.22033556291445 11 1.5 21 3.0 31 1.5 12 1.66618239017884 22 3.0 32 1.23534992311649 13 1.66618239017884 23 3.0 33 1.23534992311649 70 3 0 3DFACE 8 taser_base 10 1.66618239017884 20 3.0 30 1.23534992311649 11 1.5 21 3.0 31 1.5 12 1.69132242027198 22 3.0 32 1.25291300823137 13 1.69132242027198 23 3.0 33 1.25291300823137 70 3 0 3DFACE 8 taser_base 10 1.69132242027198 20 3.0 30 1.25291300823137 11 1.5 21 3.0 31 1.5 12 1.71461991087043 22 3.0 32 1.27285567614847 13 1.71461991087043 23 3.0 33 1.27285567614847 70 1 0 3DFACE 8 taser_base 10 1.5 20 3.0 30 1.81219074811907 11 1.71461991087043 21 3.0 31 1.72547110140021 12 1.5 22 3.0 32 1.5 13 1.5 23 3.0 33 1.5 70 1 0 3DFACE 8 taser_base 10 1.71461991087043 20 3.0 30 1.72547110140021 11 1.5 21 3.0 31 1.81219074811907 12 1.70501413192602 22 3.0 32 1.73585049440402 13 1.70501413192602 23 3.0 33 1.73585049440402 70 3 0 3DFACE 8 taser_base 10 1.70501413192602 20 3.0 30 1.73585049440402 11 1.5 21 3.0 31 1.81219074811907 12 1.68090954183794 22 3.0 32 1.7548097087475 13 1.68090954183794 23 3.0 33 1.7548097087475 70 3 0 3DFACE 8 taser_base 10 1.68090954183794 20 3.0 30 1.7548097087475 11 1.5 21 3.0 31 1.81219074811907 12 1.65506269396675 22 3.0 32 1.77131496630259 13 1.65506269396675 23 3.0 33 1.77131496630259 70 3 0 3DFACE 8 taser_base 10 1.65506269396675 20 3.0 30 1.77131496630259 11 1.5 21 3.0 31 1.81219074811907 12 1.62772250758676 22 3.0 32 1.78520731241634 13 1.62772250758676 23 3.0 33 1.78520731241634 70 3 0 3DFACE 8 taser_base 10 1.62772250758676 20 3.0 30 1.78520731241634 11 1.5 21 3.0 31 1.81219074811907 12 1.59915228363849 22 3.0 32 1.79635295620134 13 1.59915228363849 23 3.0 33 1.79635295620134 70 3 0 3DFACE 8 taser_base 10 1.59915228363849 20 3.0 30 1.79635295620134 11 1.5 21 3.0 31 1.81219074811907 12 1.56962716899663 22 3.0 32 1.80464455901512 13 1.56962716899663 23 3.0 33 1.80464455901512 70 3 0 3DFACE 8 taser_base 10 1.56962716899663 20 3.0 30 1.80464455901512 11 1.5 21 3.0 31 1.81219074811907 12 1.53943150665524 22 3.0 32 1.81000226818992 13 1.53943150665524 23 3.0 33 1.81000226818992 70 3 0 3DFACE 8 taser_base 10 1.53943150665524 20 3.0 30 1.81000226818992 11 1.5 21 3.0 31 1.81219074811907 12 1.50885609734932 22 3.0 32 1.81237448605758 13 1.50885609734932 23 3.0 33 1.81237448605758 70 1 0 3DFACE 8 taser_base 10 1.71461991087043 20 3.0 30 1.72547110140021 11 1.71461991087043 21 3.0 31 1.5 12 1.5 22 3.0 32 1.5 13 1.5 23 3.0 33 1.5 70 0 0 3DFACE 8 taser_base 10 1.71461991087043 20 3.0 30 1.5 11 1.71461991087043 21 3.0 31 1.27285567614847 12 1.5 22 3.0 32 1.5 13 1.5 23 3.0 33 1.5 70 0 0 3DFACE 8 taser_base 10 2.795 20 3.0 30 2.795 11 2.1475 21 3.0 31 2.1475 12 1.5 22 3.0 32 2.795 13 1.5 23 3.0 33 2.795 70 0 0 3DFACE 8 taser_base 10 2.795 20 3.0 30 3.0 11 3.0 21 3.0 31 3.0 12 2.795 22 3.0 32 2.795 13 2.795 23 3.0 33 2.795 70 0 0 3DFACE 8 taser_base 10 2.795 20 3.0 30 1.5 11 2.795 21 3.0 31 0.205 12 2.1475 22 3.0 32 0.8525 13 2.1475 23 3.0 33 0.8525 70 0 0 3DFACE 8 taser_base 10 3.0 20 3.0 30 0.205 11 3.0 21 3.0 31 0.0 12 2.795 22 3.0 32 0.205 13 2.795 23 3.0 33 0.205 70 0 0 LINE 8 taser_base 10 3.0 20 1.5 30 1.5 11 3.0 21 1.5 31 0.205 0 LINE 8 taser_base 10 3.0 20 0.205 30 2.795 11 3.0 21 1.5 31 1.5 0 LINE 8 taser_base 10 3.0 20 2.795 30 1.5 11 3.0 21 1.5 31 1.5 0 LINE 8 taser_base 10 3.0 20 1.5 30 2.795 11 3.0 21 1.5 31 1.5 0 LINE 8 taser_base 10 3.0 20 1.5 30 1.5 11 3.0 21 0.205 31 0.205 0 LINE 8 taser_base 10 3.0 20 2.795 30 2.795 11 3.0 21 1.5 31 1.5 0 LINE 8 taser_base 10 3.0 20 1.5 30 1.5 11 3.0 21 2.795 31 0.205 0 LINE 8 taser_base 10 3.0 20 1.5 30 1.5 11 3.0 21 0.205 31 1.5 0 3DFACE 8 taser_base 10 3.0 20 0.205 30 0.205 11 3.0 21 0.0 31 0.205 12 3.0 22 0.0 32 0.0 13 3.0 23 0.0 33 0.0 70 0 0 3DFACE 8 taser_base 10 3.0 20 3.0 30 0.205 11 3.0 21 2.795 31 1.5 12 3.0 22 2.795 32 0.205 13 3.0 23 2.795 33 0.205 70 1 0 3DFACE 8 taser_base 10 3.0 20 2.795 30 1.5 11 3.0 21 3.0 31 0.205 12 3.0 22 3.0 32 1.5 13 3.0 23 3.0 33 1.5 70 1 0 3DFACE 8 taser_base 10 3.0 20 3.0 30 1.5 11 3.0 21 2.795 31 2.795 12 3.0 22 2.795 32 1.5 13 3.0 23 2.795 33 1.5 70 1 0 3DFACE 8 taser_base 10 3.0 20 2.795 30 2.795 11 3.0 21 3.0 31 1.5 12 3.0 22 3.0 32 2.795 13 3.0 23 3.0 33 2.795 70 1 0 3DFACE 8 taser_base 10 3.0 20 1.5 30 2.795 11 3.0 21 0.205 31 3.0 12 3.0 22 0.205 32 2.795 13 3.0 23 0.205 33 2.795 70 1 0 3DFACE 8 taser_base 10 3.0 20 0.205 30 3.0 11 3.0 21 1.5 31 2.795 12 3.0 22 0.497732043121052 32 3.0 13 3.0 23 0.497732043121052 33 3.0 70 3 0 3DFACE 8 taser_base 10 3.0 20 0.497732043121052 30 3.0 11 3.0 21 1.5 31 2.795 12 3.0 22 0.878679656440358 32 3.0 13 3.0 23 0.878679656440358 33 3.0 70 3 0 3DFACE 8 taser_base 10 3.0 20 0.878679656440358 30 3.0 11 3.0 21 1.5 31 2.795 12 3.0 22 1.20163144893051 32 3.0 13 3.0 23 1.20163144893051 33 3.0 70 3 0 3DFACE 8 taser_base 10 3.0 20 1.20163144893051 30 3.0 11 3.0 21 1.5 31 2.795 12 3.0 22 1.5 32 3.0 13 3.0 23 1.5 33 3.0 70 1 0 3DFACE 8 taser_base 10 3.0 20 0.205 30 1.5 11 3.0 21 0.0 31 2.795 12 3.0 22 0.0 32 1.5 13 3.0 23 0.0 33 1.5 70 1 0 3DFACE 8 taser_base 10 3.0 20 0.0 30 2.795 11 3.0 21 0.205 31 1.5 12 3.0 22 0.205 32 2.795 13 3.0 23 0.205 33 2.795 70 1 0 3DFACE 8 taser_base 10 3.0 20 0.205 30 0.205 11 3.0 21 0.0 31 1.5 12 3.0 22 0.0 32 0.205 13 3.0 23 0.0 33 0.205 70 1 0 3DFACE 8 taser_base 10 3.0 20 0.0 30 1.5 11 3.0 21 0.205 31 0.205 12 3.0 22 0.205 32 1.5 13 3.0 23 0.205 33 1.5 70 1 0 3DFACE 8 taser_base 10 3.0 20 0.205 30 2.795 11 3.0 21 0.0 31 3.0 12 3.0 22 0.0 32 2.795 13 3.0 23 0.0 33 2.795 70 0 0 3DFACE 8 taser_base 10 3.0 20 0.205 30 3.0 11 3.0 21 0.0 31 3.0 12 3.0 22 0.205 32 2.795 13 3.0 23 0.205 33 2.795 70 0 0 3DFACE 8 taser_base 10 3.0 20 3.0 30 0.205 11 3.0 21 2.795 31 0.205 12 3.0 22 3.0 32 0.0 13 3.0 23 3.0 33 0.0 70 0 0 3DFACE 8 taser_base 10 3.0 20 1.5 30 0.205 11 3.0 21 0.205 31 1.5 12 3.0 22 0.205 32 0.205 13 3.0 23 0.205 33 0.205 70 1 0 3DFACE 8 taser_base 10 3.0 20 0.205 30 1.5 11 3.0 21 1.5 31 2.795 12 3.0 22 0.205 32 2.795 13 3.0 23 0.205 33 2.795 70 1 0 3DFACE 8 taser_base 10 3.0 20 1.5 30 2.795 11 3.0 21 0.205 31 1.5 12 3.0 22 1.5 32 0.205 13 3.0 23 1.5 33 0.205 70 15 0 3DFACE 8 taser_base 10 3.0 20 1.5 30 2.795 11 3.0 21 1.5 31 0.205 12 3.0 22 2.795 32 0.205 13 3.0 23 2.795 33 0.205 70 13 0 3DFACE 8 taser_base 10 3.0 20 1.5 30 2.795 11 3.0 21 2.795 31 0.205 12 3.0 22 2.795 32 2.795 13 3.0 23 2.795 33 2.795 70 3 0 3DFACE 8 taser_base 10 3.0 20 2.795 30 2.795 11 3.0 21 2.795 31 0.205 12 3.0 22 2.795 32 1.5 13 3.0 23 2.795 33 1.5 70 1 0 3DFACE 8 taser_base 10 3.0 20 3.0 30 0.0 11 3.0 21 2.795 31 0.205 12 3.0 22 2.795 32 0.0 13 3.0 23 2.795 33 0.0 70 0 0 3DFACE 8 taser_base 10 3.0 20 3.0 30 3.0 11 3.0 21 2.795 31 2.795 12 3.0 22 3.0 32 2.795 13 3.0 23 3.0 33 2.795 70 0 0 3DFACE 8 taser_base 10 3.0 20 0.497732043121052 30 0.0 11 3.0 21 0.205 31 0.205 12 3.0 22 0.205 32 0.0 13 3.0 23 0.205 33 0.0 70 1 0 3DFACE 8 taser_base 10 3.0 20 0.205 30 0.205 11 3.0 21 0.497732043121052 31 0.0 12 3.0 22 1.5 32 0.205 13 3.0 23 1.5 33 0.205 70 3 0 3DFACE 8 taser_base 10 3.0 20 1.5 30 0.205 11 3.0 21 0.497732043121052 31 0.0 12 3.0 22 0.878679656440358 32 0.0 13 3.0 23 0.878679656440358 33 0.0 70 13 0 3DFACE 8 taser_base 10 3.0 20 1.5 30 0.205 11 3.0 21 0.878679656440358 31 0.0 12 3.0 22 1.20163144893051 32 0.0 13 3.0 23 1.20163144893051 33 0.0 70 13 0 3DFACE 8 taser_base 10 3.0 20 1.5 30 0.205 11 3.0 21 1.20163144893051 31 0.0 12 3.0 22 1.5 32 0.0 13 3.0 23 1.5 33 0.0 70 1 0 3DFACE 8 taser_base 10 3.0 20 2.795 30 2.795 11 3.0 21 1.5 31 3.0 12 3.0 22 1.5 32 2.795 13 3.0 23 1.5 33 2.795 70 1 0 3DFACE 8 taser_base 10 3.0 20 1.5 30 3.0 11 3.0 21 2.795 31 2.795 12 3.0 22 1.79836855106949 32 3.0 13 3.0 23 1.79836855106949 33 3.0 70 3 0 3DFACE 8 taser_base 10 3.0 20 1.79836855106949 30 3.0 11 3.0 21 2.795 31 2.795 12 3.0 22 2.12132034355964 32 3.0 13 3.0 23 2.12132034355964 33 3.0 70 3 0 3DFACE 8 taser_base 10 3.0 20 2.12132034355964 30 3.0 11 3.0 21 2.795 31 2.795 12 3.0 22 2.50226795687895 32 3.0 13 3.0 23 2.50226795687895 33 3.0 70 3 0 3DFACE 8 taser_base 10 3.0 20 2.50226795687895 30 3.0 11 3.0 21 2.795 31 2.795 12 3.0 22 2.795 32 3.0 13 3.0 23 2.795 33 3.0 70 1 0 3DFACE 8 taser_base 10 3.0 20 1.5 30 0.0 11 3.0 21 2.795 31 0.205 12 3.0 22 1.5 32 0.205 13 3.0 23 1.5 33 0.205 70 1 0 3DFACE 8 taser_base 10 3.0 20 2.795 30 0.205 11 3.0 21 1.5 31 0.0 12 3.0 22 1.79836855106949 32 0.0 13 3.0 23 1.79836855106949 33 0.0 70 13 0 3DFACE 8 taser_base 10 3.0 20 2.795 30 0.205 11 3.0 21 1.79836855106949 31 0.0 12 3.0 22 2.12132034355964 32 0.0 13 3.0 23 2.12132034355964 33 0.0 70 13 0 3DFACE 8 taser_base 10 3.0 20 2.795 30 0.205 11 3.0 21 2.12132034355964 31 0.0 12 3.0 22 2.50226795687895 32 0.0 13 3.0 23 2.50226795687895 33 0.0 70 13 0 3DFACE 8 taser_base 10 3.0 20 2.795 30 0.205 11 3.0 21 2.50226795687895 31 0.0 12 3.0 22 2.795 32 0.0 13 3.0 23 2.795 33 0.0 70 1 0 3DFACE 8 taser_base 10 3.0 20 3.0 30 3.0 11 3.0 21 2.795 31 3.0 12 3.0 22 2.795 32 2.795 13 3.0 23 2.795 33 2.795 70 0 0 3DFACE 8 taser_a 10 0.0 20 1.5 30 3.0 11 0.0 21 2.795 31 2.795 12 0.0 22 1.5 32 2.795 13 0.0 23 1.5 33 2.795 70 1 0 3DFACE 8 taser_a 10 0.0 20 2.795 30 2.795 11 0.0 21 1.5 31 3.0 12 0.0 22 1.79836855106949 32 3.0 13 0.0 23 1.79836855106949 33 3.0 70 13 0 3DFACE 8 taser_a 10 0.0 20 2.795 30 2.795 11 0.0 21 1.79836855106949 31 3.0 12 0.0 22 2.12132034355964 32 3.0 13 0.0 23 2.12132034355964 33 3.0 70 13 0 3DFACE 8 taser_a 10 0.0 20 2.795 30 2.795 11 0.0 21 2.12132034355964 31 3.0 12 0.0 22 2.50226795687895 32 3.0 13 0.0 23 2.50226795687895 33 3.0 70 13 0 3DFACE 8 taser_a 10 0.0 20 2.795 30 2.795 11 0.0 21 2.50226795687895 31 3.0 12 0.0 22 2.795 32 3.0 13 0.0 23 2.795 33 3.0 70 1 0 3DFACE 8 taser_a 10 0.0 20 1.5 30 2.795 11 0.0 21 1.5 31 1.5 12 0.0 22 0.205 32 2.795 13 0.0 23 0.205 33 2.795 70 1 0 3DFACE 8 taser_a 10 0.0 20 1.5 30 1.5 11 0.0 21 1.5 31 2.795 12 0.0 22 1.5 32 2.277 13 0.0 23 1.5 33 2.277 70 1 0 3DFACE 8 taser_a 10 0.205 20 3.0 30 1.5 11 0.53125 21 3.0 31 0.723 12 0.205 22 3.0 32 0.723 13 0.205 23 3.0 33 0.723 70 1 0 3DFACE 8 taser_a 10 0.53125 20 3.0 30 0.723 11 0.205 21 3.0 31 1.5 12 0.53125 22 3.0 32 0.982 13 0.53125 23 3.0 33 0.982 70 3 0 3DFACE 8 taser_a 10 0.53125 20 3.0 30 0.982 11 0.205 21 3.0 31 1.5 12 0.53125 22 3.0 32 1.17375 13 0.53125 23 3.0 33 1.17375 70 1 0 3DFACE 8 taser_a 10 0.777 20 3.0 30 2.795 11 0.777 21 1.5 31 3.0 12 0.777 22 1.5 32 2.795 13 0.777 23 1.5 33 2.795 70 1 0 3DFACE 8 taser_a 10 0.777 20 1.5 30 3.0 11 0.777 21 3.0 31 2.795 12 0.777 22 1.64381364161549 32 3.0 13 0.777 23 1.64381364161549 33 3.0 70 3 0 3DFACE 8 taser_a 10 0.777 20 1.64381364161549 30 3.0 11 0.777 21 3.0 31 2.795 12 0.777 22 1.79947640559575 32 3.0 13 0.777 23 1.79947640559575 33 3.0 70 3 0 3DFACE 8 taser_a 10 0.777 20 1.79947640559575 30 3.0 11 0.777 21 3.0 31 2.795 12 0.777 22 1.98309315521565 32 3.0 13 0.777 23 1.98309315521565 33 3.0 70 3 0 3DFACE 8 taser_a 10 0.777 20 1.98309315521565 30 3.0 11 0.777 21 3.0 31 2.795 12 0.777 22 2.223 32 3.0 13 0.777 23 2.223 33 3.0 70 3 0 3DFACE 8 taser_a 10 0.777 20 2.223 30 3.0 11 0.777 21 3.0 31 2.795 12 0.777 22 2.58204596640715 32 3.0 13 0.777 23 2.58204596640715 33 3.0 70 3 0 3DFACE 8 taser_a 10 0.777 20 2.58204596640715 30 3.0 11 0.777 21 3.0 31 2.795 12 0.777 22 3.0 32 3.0 13 0.777 23 3.0 33 3.0 70 1 0 3DFACE 8 taser_a 10 1.295 20 0.0 30 3.0 11 0.0 21 0.0 31 2.22044604925031e-16 12 1.295 22 0.0 32 2.22044604925031e-16 13 1.295 23 0.0 33 2.22044604925031e-16 70 1 0 3DFACE 8 taser_a 10 0.0 20 0.0 30 2.22044604925031e-16 11 1.295 21 0.0 31 3.0 12 0.0 22 0.0 32 0.205 13 0.0 23 0.0 33 0.205 70 3 0 3DFACE 8 taser_a 10 0.0 20 0.0 30 0.205 11 1.295 21 0.0 31 3.0 12 0.0 22 0.0 32 1.5 13 0.0 23 0.0 33 1.5 70 3 0 3DFACE 8 taser_a 10 0.0 20 0.0 30 1.5 11 1.295 21 0.0 31 3.0 12 0.0 22 0.0 32 2.795 13 0.0 23 0.0 33 2.795 70 3 0 3DFACE 8 taser_a 10 0.0 20 0.0 30 2.795 11 1.295 21 0.0 31 3.0 12 0.0 22 0.0 32 3.0 13 0.0 23 0.0 33 3.0 70 1 0 3DFACE 8 taser_a 10 0.777 20 1.98309315521565 30 3.0 11 0.0 21 2.795 31 3.0 12 0.0 22 2.50226795687895 32 3.0 13 0.0 23 2.50226795687895 33 3.0 70 1 0 3DFACE 8 taser_a 10 0.0 20 2.795 30 3.0 11 0.777 21 1.98309315521565 31 3.0 12 0.0 22 3.0 32 3.0 13 0.0 23 3.0 33 3.0 70 3 0 3DFACE 8 taser_a 10 0.0 20 3.0 30 3.0 11 0.777 21 1.98309315521565 31 3.0 12 0.777 22 2.223 32 3.0 13 0.777 23 2.223 33 3.0 70 1 0 3DFACE 8 taser_a 10 0.0 20 3.0 30 1.5 11 0.0 21 2.795 31 0.723 12 0.0 22 2.795 32 1.5 13 0.0 23 2.795 33 1.5 70 1 0 3DFACE 8 taser_a 10 0.0 20 2.795 30 0.723 11 0.0 21 3.0 31 1.5 12 0.0 22 3.0 32 0.723 13 0.0 23 3.0 33 0.723 70 1 0 3DFACE 8 taser_a 10 0.53125 20 3.0 30 2.018 11 0.53125 21 1.5 31 2.277 12 0.53125 22 1.5 32 2.018 13 0.53125 23 1.5 33 2.018 70 1 0 3DFACE 8 taser_a 10 0.53125 20 1.5 30 2.277 11 0.53125 21 3.0 31 2.018 12 0.53125 22 3.0 32 2.277 13 0.53125 23 3.0 33 2.277 70 1 0 3DFACE 8 taser_a 10 0.0 20 0.205 30 2.795 11 0.0 21 0.0 31 3.0 12 0.0 22 0.205 32 3.0 13 0.0 23 0.205 33 3.0 70 0 0 3DFACE 8 taser_a 10 0.0 20 3.0 30 3.0 11 0.205 21 3.0 31 2.795 12 0.0 22 3.0 32 2.795 13 0.0 23 3.0 33 2.795 70 1 0 3DFACE 8 taser_a 10 0.205 20 3.0 30 2.795 11 0.0 21 3.0 31 3.0 12 0.205 22 3.0 32 3.0 13 0.205 23 3.0 33 3.0 70 1 0 3DFACE 8 taser_a 10 0.53125 20 3.0 30 1.82625 11 0.796875 21 3.0 31 1.5 12 0.53125 22 3.0 32 1.5 13 0.53125 23 3.0 33 1.5 70 1 0 3DFACE 8 taser_a 10 0.796875 20 3.0 30 1.5 11 0.53125 21 3.0 31 1.82625 12 0.796875 22 3.0 32 1.759 13 0.796875 23 3.0 33 1.759 70 3 0 3DFACE 8 taser_a 10 0.796875 20 3.0 30 1.759 11 0.53125 21 3.0 31 1.82625 12 0.796875 22 3.0 32 2.018 13 0.796875 23 3.0 33 2.018 70 3 0 3DFACE 8 taser_a 10 0.796875 20 3.0 30 2.018 11 0.53125 21 3.0 31 1.82625 12 0.723000000000001 22 3.0 32 2.018 13 0.723000000000001 23 3.0 33 2.018 70 1 0 3DFACE 8 taser_a 10 0.723 20 3.0 30 0.982 11 0.53125 21 1.5 31 0.982 12 0.53125 22 3.0 32 0.982 13 0.53125 23 3.0 33 0.982 70 1 0 3DFACE 8 taser_a 10 0.53125 20 1.5 30 0.982 11 0.723 21 3.0 31 0.982 12 0.796875 22 1.5 32 0.982 13 0.796875 23 1.5 33 0.982 70 3 0 3DFACE 8 taser_a 10 0.796875 20 1.5 30 0.982 11 0.723 21 3.0 31 0.982 12 0.796875 22 3.0 32 0.982 13 0.796875 23 3.0 33 0.982 70 1 0 3DFACE 8 taser_a 10 0.205 20 3.0 30 2.795 11 0.0 21 2.795 31 2.795 12 0.0 22 3.0 32 2.795 13 0.0 23 3.0 33 2.795 70 1 0 3DFACE 8 taser_a 10 0.0 20 2.795 30 2.795 11 0.205 21 3.0 31 2.795 12 0.0 22 1.5 32 2.795 13 0.0 23 1.5 33 2.795 70 3 0 3DFACE 8 taser_a 10 0.0 20 1.5 30 2.795 11 0.205 21 3.0 31 2.795 12 0.777 22 1.5 32 2.795 13 0.777 23 1.5 33 2.795 70 3 0 3DFACE 8 taser_a 10 0.777 20 1.5 30 2.795 11 0.205 21 3.0 31 2.795 12 0.777 22 3.0 32 2.795 13 0.777 23 3.0 33 2.795 70 1 0 3DFACE 8 taser_a 10 1.295 20 1.5 30 1.52655665885959e-16 11 1.295 21 0.0 31 3.0 12 1.295 22 0.0 32 2.22044604925031e-16 13 1.295 23 0.0 33 2.22044604925031e-16 70 1 0 3DFACE 8 taser_a 10 1.295 20 0.0 30 3.0 11 1.295 21 1.5 31 1.52655665885959e-16 12 1.295 22 1.5 32 3.0 13 1.295 23 1.5 33 3.0 70 1 0 3DFACE 8 taser_a 10 0.776999999999999 20 1.98309315521565 30 4.44089209850063e-17 11 0.0 21 2.12132034355964 31 0.0 12 0.0 22 2.50226795687895 32 0.0 13 0.0 23 2.50226795687895 33 0.0 70 1 0 3DFACE 8 taser_a 10 0.0 20 2.12132034355964 30 0.0 11 0.776999999999999 21 1.98309315521565 31 4.44089209850063e-17 12 0.776999999999999 22 1.79947640559575 32 4.44089209850063e-17 13 0.776999999999999 23 1.79947640559575 33 4.44089209850063e-17 70 1 0 3DFACE 8 taser_a 10 0.0 20 0.205 30 0.205 11 0.0 21 1.5 31 0.0 12 0.0 22 0.205 32 2.22044604925031e-16 13 0.0 23 0.205 33 2.22044604925031e-16 70 1 0 3DFACE 8 taser_a 10 0.0 20 1.5 30 0.0 11 0.0 21 0.205 31 0.205 12 0.0 22 1.5 32 0.205 13 0.0 23 1.5 33 0.205 70 1 0 3DFACE 8 taser_a 10 0.0 20 0.205 30 1.5 11 0.0 21 0.0 31 0.205 12 0.0 22 0.0 32 1.5 13 0.0 23 0.0 33 1.5 70 1 0 3DFACE 8 taser_a 10 0.0 20 0.0 30 0.205 11 0.0 21 0.205 31 1.5 12 0.0 22 0.205 32 0.205 13 0.0 23 0.205 33 0.205 70 1 0 3DFACE 8 taser_a 10 0.53125 20 3.0 30 0.723 11 0.53125 21 1.5 31 0.982 12 0.53125 22 1.5 32 0.723 13 0.53125 23 1.5 33 0.723 70 1 0 3DFACE 8 taser_a 10 0.53125 20 1.5 30 0.982 11 0.53125 21 3.0 31 0.723 12 0.53125 22 3.0 32 0.982 13 0.53125 23 3.0 33 0.982 70 1 0 3DFACE 8 taser_a 10 0.53125 20 1.5 30 2.277 11 0.0 21 2.277 31 2.277 12 0.0 22 1.5 32 2.277 13 0.0 23 1.5 33 2.277 70 1 0 3DFACE 8 taser_a 10 0.0 20 2.277 30 2.277 11 0.53125 21 1.5 31 2.277 12 0.0 22 2.795 32 2.277 13 0.0 23 2.795 33 2.277 70 3 0 3DFACE 8 taser_a 10 0.0 20 2.795 30 2.277 11 0.53125 21 1.5 31 2.277 12 0.0 22 3.0 32 2.277 13 0.0 23 3.0 33 2.277 70 3 0 3DFACE 8 taser_a 10 0.0 20 3.0 30 2.277 11 0.53125 21 1.5 31 2.277 12 0.205 22 3.0 32 2.277 13 0.205 23 3.0 33 2.277 70 3 0 3DFACE 8 taser_a 10 0.205 20 3.0 30 2.277 11 0.53125 21 1.5 31 2.277 12 0.53125 22 3.0 32 2.277 13 0.53125 23 3.0 33 2.277 70 1 0 3DFACE 8 taser_a 10 0.796875 20 3.0 30 1.759 11 0.796875 21 1.5 31 2.018 12 0.796875 22 1.5 32 1.759 13 0.796875 23 1.5 33 1.759 70 1 0 3DFACE 8 taser_a 10 0.796875 20 1.5 30 2.018 11 0.796875 21 3.0 31 1.759 12 0.796875 22 3.0 32 2.018 13 0.796875 23 3.0 33 2.018 70 1 0 3DFACE 8 taser_a 10 0.796875 20 3.0 30 1.5 11 1.0625 21 3.0 31 1.241 12 0.796875 22 3.0 32 1.241 13 0.796875 23 3.0 33 1.241 70 1 0 3DFACE 8 taser_a 10 1.0625 20 3.0 30 1.241 11 0.796875 21 3.0 31 1.5 12 1.0625 22 3.0 32 1.5 13 1.0625 23 3.0 33 1.5 70 1 0 3DFACE 8 taser_a 10 0.777 20 1.79947640559575 30 3.0 11 0.0 21 2.50226795687895 31 3.0 12 0.0 22 2.12132034355964 32 3.0 13 0.0 23 2.12132034355964 33 3.0 70 1 0 3DFACE 8 taser_a 10 0.0 20 2.50226795687895 30 3.0 11 0.777 21 1.79947640559575 31 3.0 12 0.777 22 1.98309315521565 32 3.0 13 0.777 23 1.98309315521565 33 3.0 70 1 0 3DFACE 8 taser_a 10 0.0 20 3.0 30 1.5 11 0.205 21 3.0 31 0.723 12 0.0 22 3.0 32 0.723 13 0.0 23 3.0 33 0.723 70 1 0 3DFACE 8 taser_a 10 0.205 20 3.0 30 0.723 11 0.0 21 3.0 31 1.5 12 0.205 22 3.0 32 1.5 13 0.205 23 3.0 33 1.5 70 1 0 3DFACE 8 taser_a 10 0.796875 20 3.0 30 0.982 11 0.796875 21 1.5 31 1.241 12 0.796875 22 1.5 32 0.982 13 0.796875 23 1.5 33 0.982 70 1 0 3DFACE 8 taser_a 10 0.796875 20 1.5 30 1.241 11 0.796875 21 3.0 31 0.982 12 0.796875 22 3.0 32 1.241 13 0.796875 23 3.0 33 1.241 70 1 0 3DFACE 8 taser_a 10 0.0 20 0.205 30 2.795 11 0.0 21 0.0 31 1.5 12 0.0 22 0.0 32 2.795 13 0.0 23 0.0 33 2.795 70 1 0 3DFACE 8 taser_a 10 0.0 20 0.0 30 1.5 11 0.0 21 0.205 31 2.795 12 0.0 22 0.205 32 1.5 13 0.0 23 0.205 33 1.5 70 1 0 3DFACE 8 taser_a 10 1.0625 20 1.5 30 1.759 11 0.796875 21 3.0 31 1.759 12 0.796875 22 1.5 32 1.759 13 0.796875 23 1.5 33 1.759 70 1 0 3DFACE 8 taser_a 10 0.796875 20 3.0 30 1.759 11 1.0625 21 1.5 31 1.759 12 1.0625 22 3.0 32 1.759 13 1.0625 23 3.0 33 1.759 70 1 0 3DFACE 8 taser_a 10 0.0 20 3.0 30 2.22044604925031e-16 11 0.0 21 2.795 31 0.205 12 0.0 22 3.0 32 0.205 13 0.0 23 3.0 33 0.205 70 0 0 3DFACE 8 taser_a 10 0.0 20 3.0 30 2.277 11 0.0 21 2.795 31 1.5 12 0.0 22 2.795 32 2.277 13 0.0 23 2.795 33 2.277 70 1 0 3DFACE 8 taser_a 10 0.0 20 2.795 30 1.5 11 0.0 21 3.0 31 2.277 12 0.0 22 3.0 32 1.5 13 0.0 23 3.0 33 1.5 70 1 0 3DFACE 8 taser_a 10 0.205 20 3.0 30 3.0 11 0.777 21 3.0 31 2.795 12 0.205 22 3.0 32 2.795 13 0.205 23 3.0 33 2.795 70 1 0 3DFACE 8 taser_a 10 0.777 20 3.0 30 2.795 11 0.205 21 3.0 31 3.0 12 0.777 22 3.0 32 3.0 13 0.777 23 3.0 33 3.0 70 3 0 3DFACE 8 taser_a 10 0.777 20 3.0 30 3.0 11 0.205 21 3.0 31 3.0 12 0.259 22 3.0 32 3.0 13 0.259 23 3.0 33 3.0 70 13 0 3DFACE 8 taser_a 10 0.777 20 3.0 30 3.0 11 0.259 21 3.0 31 3.0 12 0.497732043121052 22 3.0 32 3.0 13 0.497732043121052 23 3.0 33 3.0 70 13 0 3DFACE 8 taser_a 10 0.777 20 3.0 30 3.0 11 0.497732043121052 21 3.0 31 3.0 12 0.518 22 3.0 32 3.0 13 0.518 23 3.0 33 3.0 70 1 0 3DFACE 8 taser_a 10 0.53125 20 3.0 30 1.17375 11 0.723 21 3.0 31 0.982 12 0.53125 22 3.0 32 0.982 13 0.53125 23 3.0 33 0.982 70 0 0 3DFACE 8 taser_a 10 0.0 20 1.5 30 1.5 11 0.0 21 1.5 31 0.205 12 0.0 22 0.205 32 0.205 13 0.0 23 0.205 33 0.205 70 1 0 3DFACE 8 taser_a 10 0.0 20 1.5 30 0.205 11 0.0 21 1.5 31 1.5 12 0.0 22 1.5 32 0.723 13 0.0 23 1.5 33 0.723 70 1 0 3DFACE 8 taser_a 10 0.776999999999999 20 1.5 30 0.205 11 0.0 21 2.795 31 0.205 12 0.0 22 1.5 32 0.205 13 0.0 23 1.5 33 0.205 70 1 0 3DFACE 8 taser_a 10 0.0 20 2.795 30 0.205 11 0.776999999999999 21 1.5 31 0.205 12 0.0 22 3.0 32 0.205 13 0.0 23 3.0 33 0.205 70 3 0 3DFACE 8 taser_a 10 0.0 20 3.0 30 0.205 11 0.776999999999999 21 1.5 31 0.205 12 0.205 22 3.0 32 0.205 13 0.205 23 3.0 33 0.205 70 3 0 3DFACE 8 taser_a 10 0.205 20 3.0 30 0.205 11 0.776999999999999 21 1.5 31 0.205 12 0.776999999999999 22 3.0 32 0.205 13 0.776999999999999 23 3.0 33 0.205 70 1 0 3DFACE 8 taser_a 10 0.796875 20 1.5 30 2.018 11 0.53125 21 3.0 31 2.018 12 0.53125 22 1.5 32 2.018 13 0.53125 23 1.5 33 2.018 70 1 0 3DFACE 8 taser_a 10 0.53125 20 3.0 30 2.018 11 0.796875 21 1.5 31 2.018 12 0.723000000000001 22 3.0 32 2.018 13 0.723000000000001 23 3.0 33 2.018 70 3 0 3DFACE 8 taser_a 10 0.723000000000001 20 3.0 30 2.018 11 0.796875 21 1.5 31 2.018 12 0.796875 22 3.0 32 2.018 13 0.796875 23 3.0 33 2.018 70 1 0 3DFACE 8 taser_a 10 0.0 20 2.795 30 0.205 11 0.0 21 1.5 31 0.0 12 0.0 22 1.5 32 0.205 13 0.0 23 1.5 33 0.205 70 1 0 3DFACE 8 taser_a 10 0.0 20 1.5 30 0.0 11 0.0 21 2.795 31 0.205 12 0.0 22 2.12132034355964 32 0.0 13 0.0 23 2.12132034355964 33 0.0 70 3 0 3DFACE 8 taser_a 10 0.0 20 2.12132034355964 30 0.0 11 0.0 21 2.795 31 0.205 12 0.0 22 2.50226795687895 32 0.0 13 0.0 23 2.50226795687895 33 0.0 70 3 0 3DFACE 8 taser_a 10 0.0 20 2.50226795687895 30 0.0 11 0.0 21 2.795 31 0.205 12 0.0 22 2.795 32 2.22044604925031e-16 13 0.0 23 2.795 33 2.22044604925031e-16 70 1 0 3DFACE 8 taser_a 10 0.777 20 1.64381364161549 30 3.0 11 0.0 21 2.12132034355964 31 3.0 12 0.0 22 1.79836855106949 32 3.0 13 0.0 23 1.79836855106949 33 3.0 70 1 0 3DFACE 8 taser_a 10 0.0 20 2.12132034355964 30 3.0 11 0.777 21 1.64381364161549 31 3.0 12 0.777 22 1.79947640559575 32 3.0 13 0.777 23 1.79947640559575 33 3.0 70 1 0 3DFACE 8 taser_a 10 0.776999999999999 20 1.79947640559575 30 4.44089209850063e-17 11 0.0 21 1.5 31 0.0 12 0.0 22 2.12132034355964 32 0.0 13 0.0 23 2.12132034355964 33 0.0 70 1 0 3DFACE 8 taser_a 10 0.0 20 1.5 30 0.0 11 0.776999999999999 21 1.79947640559575 31 4.44089209850063e-17 12 0.776999999999999 22 1.5 32 8.88178419700126e-17 13 0.776999999999999 23 1.5 33 8.88178419700126e-17 70 1 0 3DFACE 8 taser_a 10 0.0 20 0.205 30 0.205 11 0.0 21 0.0 31 2.22044604925031e-16 12 0.0 22 0.0 32 0.205 13 0.0 23 0.0 33 0.205 70 0 0 3DFACE 8 taser_a 10 0.205 20 3.0 30 2.22044604925031e-16 11 0.776999999999999 21 3.0 31 8.88178419700126e-17 12 0.497732043121052 22 3.0 32 0.0 13 0.497732043121052 23 3.0 33 0.0 70 1 0 3DFACE 8 taser_a 10 0.776999999999999 20 3.0 30 8.88178419700126e-17 11 0.205 21 3.0 31 2.22044604925031e-16 12 0.776999999999999 22 3.0 32 0.205 13 0.776999999999999 23 3.0 33 0.205 70 3 0 3DFACE 8 taser_a 10 0.776999999999999 20 3.0 30 0.205 11 0.205 21 3.0 31 2.22044604925031e-16 12 0.205 22 3.0 32 0.205 13 0.205 23 3.0 33 0.205 70 1 0 3DFACE 8 taser_a 10 0.0 20 3.0 30 2.22044604925031e-16 11 0.0 21 2.795 31 2.22044604925031e-16 12 0.0 22 2.795 32 0.205 13 0.0 23 2.795 33 0.205 70 0 0 3DFACE 8 taser_a 10 0.205 20 3.0 30 2.22044604925031e-16 11 0.776999999999999 21 2.223 31 4.44089209850063e-17 12 0.0 22 3.0 32 2.22044604925031e-16 13 0.0 23 3.0 33 2.22044604925031e-16 70 1 0 3DFACE 8 taser_a 10 0.776999999999999 20 2.223 30 4.44089209850063e-17 11 0.205 21 3.0 31 2.22044604925031e-16 12 0.497732043121052 22 3.0 32 0.0 13 0.497732043121052 23 3.0 33 0.0 70 13 0 3DFACE 8 taser_a 10 0.776999999999999 20 2.223 30 4.44089209850063e-17 11 0.497732043121052 21 3.0 31 0.0 12 0.776999999999999 22 2.58204596640715 32 4.44089209850063e-17 13 0.776999999999999 23 2.58204596640715 33 4.44089209850063e-17 70 1 0 3DFACE 8 taser_a 10 0.53125 20 3.0 30 1.82625 11 0.53125 21 3.0 31 1.5 12 0.205 22 3.0 32 1.5 13 0.205 23 3.0 33 1.5 70 0 0 3DFACE 8 taser_a 10 0.777 20 1.5 30 3.0 11 0.0 21 1.79836855106949 31 3.0 12 0.0 22 1.5 32 3.0 13 0.0 23 1.5 33 3.0 70 1 0 3DFACE 8 taser_a 10 0.0 20 1.79836855106949 30 3.0 11 0.777 21 1.5 31 3.0 12 0.777 22 1.64381364161549 32 3.0 13 0.777 23 1.64381364161549 33 3.0 70 1 0 3DFACE 8 taser_a 10 0.723000000000001 20 3.0 30 2.018 11 0.53125 21 3.0 31 1.82625 12 0.53125 22 3.0 32 2.018 13 0.53125 23 3.0 33 2.018 70 0 0 3DFACE 8 taser_a 10 0.53125 20 3.0 30 1.17375 11 0.796875 21 3.0 31 0.982 12 0.723 22 3.0 32 0.982 13 0.723 23 3.0 33 0.982 70 1 0 3DFACE 8 taser_a 10 0.796875 20 3.0 30 0.982 11 0.53125 21 3.0 31 1.17375 12 0.796875 22 3.0 32 1.241 13 0.796875 23 3.0 33 1.241 70 3 0 3DFACE 8 taser_a 10 0.796875 20 3.0 30 1.241 11 0.53125 21 3.0 31 1.17375 12 0.53125 22 3.0 32 1.5 13 0.53125 23 3.0 33 1.5 70 13 0 3DFACE 8 taser_a 10 0.796875 20 3.0 30 1.241 11 0.53125 21 3.0 31 1.5 12 0.796875 22 3.0 32 1.5 13 0.796875 23 3.0 33 1.5 70 1 0 3DFACE 8 taser_a 10 0.776999999999999 20 3.0 30 8.88178419700126e-17 11 0.776999999999999 21 2.58204596640715 31 4.44089209850063e-17 12 0.497732043121052 22 3.0 32 0.0 13 0.497732043121052 23 3.0 33 0.0 70 0 0 3DFACE 8 taser_a 10 0.0 20 1.5 30 3.0 11 0.0 21 0.205 31 2.795 12 0.0 22 0.205 32 3.0 13 0.0 23 0.205 33 3.0 70 1 0 3DFACE 8 taser_a 10 0.0 20 0.205 30 2.795 11 0.0 21 1.5 31 3.0 12 0.0 22 1.5 32 2.795 13 0.0 23 1.5 33 2.795 70 1 0 3DFACE 8 taser_a 10 0.205 20 3.0 30 0.723 11 0.0 21 2.795 31 0.723 12 0.0 22 3.0 32 0.723 13 0.0 23 3.0 33 0.723 70 1 0 3DFACE 8 taser_a 10 0.0 20 2.795 30 0.723 11 0.205 21 3.0 31 0.723 12 0.0 22 2.277 32 0.723 13 0.0 23 2.277 33 0.723 70 3 0 3DFACE 8 taser_a 10 0.0 20 2.277 30 0.723 11 0.205 21 3.0 31 0.723 12 0.0 22 1.5 32 0.723 13 0.0 23 1.5 33 0.723 70 3 0 3DFACE 8 taser_a 10 0.0 20 1.5 30 0.723 11 0.205 21 3.0 31 0.723 12 0.53125 22 1.5 32 0.723 13 0.53125 23 1.5 33 0.723 70 3 0 3DFACE 8 taser_a 10 0.53125 20 1.5 30 0.723 11 0.205 21 3.0 31 0.723 12 0.53125 22 3.0 32 0.723 13 0.53125 23 3.0 33 0.723 70 1 0 3DFACE 8 taser_a 10 0.0 20 2.277 30 0.723 11 0.0 21 1.5 31 0.723 12 0.0 22 1.5 32 1.5 13 0.0 23 1.5 33 1.5 70 0 0 3DFACE 8 taser_a 10 0.0 20 3.0 30 3.0 11 0.0 21 2.795 31 2.795 12 0.0 22 2.795 32 3.0 13 0.0 23 2.795 33 3.0 70 0 0 3DFACE 8 taser_a 10 0.205 20 3.0 30 2.277 11 0.53125 21 3.0 31 1.82625 12 0.205 22 3.0 32 1.5 13 0.205 23 3.0 33 1.5 70 1 0 3DFACE 8 taser_a 10 0.53125 20 3.0 30 1.82625 11 0.205 21 3.0 31 2.277 12 0.53125 22 3.0 32 2.018 13 0.53125 23 3.0 33 2.018 70 3 0 3DFACE 8 taser_a 10 0.53125 20 3.0 30 2.018 11 0.205 21 3.0 31 2.277 12 0.53125 22 3.0 32 2.277 13 0.53125 23 3.0 33 2.277 70 1 0 3DFACE 8 taser_a 10 1.0625 20 3.0 30 1.241 11 1.0625 21 1.5 31 1.759 12 1.0625 22 1.5 32 1.241 13 1.0625 23 1.5 33 1.241 70 1 0 3DFACE 8 taser_a 10 1.0625 20 1.5 30 1.759 11 1.0625 21 3.0 31 1.241 12 1.0625 22 3.0 32 1.759 13 1.0625 23 3.0 33 1.759 70 3 0 3DFACE 8 taser_a 10 1.0625 20 3.0 30 1.759 11 1.0625 21 3.0 31 1.241 12 1.0625 22 3.0 32 1.5 13 1.0625 23 3.0 33 1.5 70 1 0 3DFACE 8 taser_a 10 0.0 20 3.0 30 2.277 11 0.205 21 3.0 31 1.5 12 0.0 22 3.0 32 1.5 13 0.0 23 3.0 33 1.5 70 1 0 3DFACE 8 taser_a 10 0.205 20 3.0 30 1.5 11 0.0 21 3.0 31 2.277 12 0.205 22 3.0 32 2.277 13 0.205 23 3.0 33 2.277 70 1 0 3DFACE 8 taser_a 10 0.776999999999999 20 1.79947640559575 30 4.44089209850063e-17 11 0.776999999999999 21 1.5 31 0.205 12 0.776999999999999 22 1.5 32 8.88178419700126e-17 13 0.776999999999999 23 1.5 33 8.88178419700126e-17 70 1 0 3DFACE 8 taser_a 10 0.776999999999999 20 1.5 30 0.205 11 0.776999999999999 21 1.79947640559575 31 4.44089209850063e-17 12 0.776999999999999 22 3.0 32 0.205 13 0.776999999999999 23 3.0 33 0.205 70 3 0 3DFACE 8 taser_a 10 0.776999999999999 20 3.0 30 0.205 11 0.776999999999999 21 1.79947640559575 31 4.44089209850063e-17 12 0.776999999999999 22 1.98309315521565 32 4.44089209850063e-17 13 0.776999999999999 23 1.98309315521565 33 4.44089209850063e-17 70 13 0 3DFACE 8 taser_a 10 0.776999999999999 20 3.0 30 0.205 11 0.776999999999999 21 1.98309315521565 31 4.44089209850063e-17 12 0.776999999999999 22 2.223 32 4.44089209850063e-17 13 0.776999999999999 23 2.223 33 4.44089209850063e-17 70 13 0 3DFACE 8 taser_a 10 0.776999999999999 20 3.0 30 0.205 11 0.776999999999999 21 2.223 31 4.44089209850063e-17 12 0.776999999999999 22 2.58204596640715 32 4.44089209850063e-17 13 0.776999999999999 23 2.58204596640715 33 4.44089209850063e-17 70 13 0 3DFACE 8 taser_a 10 0.776999999999999 20 3.0 30 0.205 11 0.776999999999999 21 2.58204596640715 31 4.44089209850063e-17 12 0.776999999999999 22 3.0 32 8.88178419700126e-17 13 0.776999999999999 23 3.0 33 8.88178419700126e-17 70 1 0 3DFACE 8 taser_a 10 0.776999999999999 20 2.223 30 4.44089209850063e-17 11 0.0 21 2.795 31 2.22044604925031e-16 12 0.0 22 3.0 32 2.22044604925031e-16 13 0.0 23 3.0 33 2.22044604925031e-16 70 1 0 3DFACE 8 taser_a 10 0.0 20 2.795 30 2.22044604925031e-16 11 0.776999999999999 21 2.223 31 4.44089209850063e-17 12 0.0 22 2.50226795687895 32 0.0 13 0.0 23 2.50226795687895 33 0.0 70 3 0 3DFACE 8 taser_a 10 0.0 20 2.50226795687895 30 0.0 11 0.776999999999999 21 2.223 31 4.44089209850063e-17 12 0.776999999999999 22 1.98309315521565 32 4.44089209850063e-17 13 0.776999999999999 23 1.98309315521565 33 4.44089209850063e-17 70 1 0 3DFACE 8 taser_a 10 0.0 20 3.0 30 0.205 11 0.205 21 3.0 31 2.22044604925031e-16 12 0.0 22 3.0 32 2.22044604925031e-16 13 0.0 23 3.0 33 2.22044604925031e-16 70 1 0 3DFACE 8 taser_a 10 0.205 20 3.0 30 2.22044604925031e-16 11 0.0 21 3.0 31 0.205 12 0.205 22 3.0 32 0.205 13 0.205 23 3.0 33 0.205 70 1 0 3DFACE 8 taser_a 10 0.777 20 2.223 30 3.0 11 0.205 21 3.0 31 3.0 12 0.0 22 3.0 32 3.0 13 0.0 23 3.0 33 3.0 70 1 0 3DFACE 8 taser_a 10 0.205 20 3.0 30 3.0 11 0.777 21 2.223 31 3.0 12 0.259 22 3.0 32 3.0 13 0.259 23 3.0 33 3.0 70 3 0 3DFACE 8 taser_a 10 0.259 20 3.0 30 3.0 11 0.777 21 2.223 31 3.0 12 0.497732043121052 22 3.0 32 3.0 13 0.497732043121052 23 3.0 33 3.0 70 3 0 3DFACE 8 taser_a 10 0.497732043121052 20 3.0 30 3.0 11 0.777 21 2.223 31 3.0 12 0.777 22 2.58204596640715 32 3.0 13 0.777 23 2.58204596640715 33 3.0 70 1 0 3DFACE 8 taser_a 10 0.0 20 1.5 30 1.5 11 0.0 21 0.205 31 1.5 12 0.0 22 0.205 32 2.795 13 0.0 23 0.205 33 2.795 70 0 0 3DFACE 8 taser_a 10 0.53125 20 3.0 30 1.5 11 0.53125 21 3.0 31 1.17375 12 0.205 22 3.0 32 1.5 13 0.205 23 3.0 33 1.5 70 0 0 3DFACE 8 taser_a 10 0.0 20 2.277 30 2.277 11 0.0 21 2.795 31 1.5 12 0.0 22 1.5 32 1.5 13 0.0 23 1.5 33 1.5 70 1 0 3DFACE 8 taser_a 10 0.0 20 2.795 30 1.5 11 0.0 21 2.277 31 2.277 12 0.0 22 2.795 32 2.277 13 0.0 23 2.795 33 2.277 70 1 0 3DFACE 8 taser_a 10 0.0 20 0.205 30 0.205 11 0.0 21 0.205 31 2.22044604925031e-16 12 0.0 22 0.0 32 2.22044604925031e-16 13 0.0 23 0.0 33 2.22044604925031e-16 70 0 0 3DFACE 8 taser_a 10 1.0625 20 3.0 30 1.241 11 0.796875 21 1.5 31 1.241 12 0.796875 22 3.0 32 1.241 13 0.796875 23 3.0 33 1.241 70 1 0 3DFACE 8 taser_a 10 0.796875 20 1.5 30 1.241 11 1.0625 21 3.0 31 1.241 12 1.0625 22 1.5 32 1.241 13 1.0625 23 1.5 33 1.241 70 1 0 3DFACE 8 taser_a 10 0.0 20 3.0 30 2.795 11 0.0 21 2.795 31 2.795 12 0.0 22 3.0 32 3.0 13 0.0 23 3.0 33 3.0 70 0 0 3DFACE 8 taser_a 10 0.777 20 2.58204596640715 30 3.0 11 0.518 21 3.0 31 3.0 12 0.497732043121052 22 3.0 32 3.0 13 0.497732043121052 23 3.0 33 3.0 70 1 0 3DFACE 8 taser_a 10 0.518 20 3.0 30 3.0 11 0.777 21 2.58204596640715 31 3.0 12 0.777 22 3.0 32 3.0 13 0.777 23 3.0 33 3.0 70 1 0 3DFACE 8 taser_a 10 0.0 20 0.205 30 2.795 11 0.0 21 0.0 31 2.795 12 0.0 22 0.0 32 3.0 13 0.0 23 0.0 33 3.0 70 0 0 3DFACE 8 taser_a 10 0.796875 20 3.0 30 1.759 11 1.0625 21 3.0 31 1.5 12 0.796875 22 3.0 32 1.5 13 0.796875 23 3.0 33 1.5 70 1 0 3DFACE 8 taser_a 10 1.0625 20 3.0 30 1.5 11 0.796875 21 3.0 31 1.759 12 1.0625 22 3.0 32 1.759 13 1.0625 23 3.0 33 1.759 70 1 0 3DFACE 8 taser_a 10 0.796875 20 1.5 30 2.018 11 1.0625 21 1.5 31 1.759 12 0.796875 22 1.5 32 1.759 13 0.796875 23 1.5 33 1.759 70 1 0 3DFACE 8 taser_a 10 0.53125 20 1.5 30 2.277 11 0.796875 21 1.5 31 2.018 12 0.53125 22 1.5 32 2.018 13 0.53125 23 1.5 33 2.018 70 1 0 3DFACE 8 taser_a 10 0.0 20 1.5 30 2.795 11 0.53125 21 1.5 31 2.277 12 0.0 22 1.5 32 2.277 13 0.0 23 1.5 33 2.277 70 1 0 3DFACE 8 taser_a 10 0.776999999999999 20 1.5 30 0.205 11 1.295 21 1.5 31 1.52655665885959e-16 12 0.776999999999999 22 1.5 32 8.88178419700126e-17 13 0.776999999999999 23 1.5 33 8.88178419700126e-17 70 1 0 3DFACE 8 taser_a 10 1.295 20 1.5 30 1.52655665885959e-16 11 0.776999999999999 21 1.5 31 0.205 12 1.0625 22 1.5 32 1.241 13 1.0625 23 1.5 33 1.241 70 15 0 3DFACE 8 taser_a 10 1.295 20 1.5 30 1.52655665885959e-16 11 1.0625 21 1.5 31 1.241 12 1.295 22 1.5 32 3.0 13 1.295 23 1.5 33 3.0 70 3 0 3DFACE 8 taser_a 10 1.0625 20 1.5 30 1.241 11 0.776999999999999 21 1.5 31 0.205 12 0.796875 22 1.5 32 0.982 13 0.796875 23 1.5 33 0.982 70 15 0 3DFACE 8 taser_a 10 0.796875 20 1.5 30 0.982 11 0.776999999999999 21 1.5 31 0.205 12 0.0 22 1.5 32 0.205 13 0.0 23 1.5 33 0.205 70 13 0 3DFACE 8 taser_a 10 0.796875 20 1.5 30 0.982 11 0.0 21 1.5 31 0.205 12 0.53125 22 1.5 32 0.723 13 0.53125 23 1.5 33 0.723 70 15 0 3DFACE 8 taser_a 10 0.53125 20 1.5 30 0.723 11 0.0 21 1.5 31 0.205 12 0.0 22 1.5 32 0.723 13 0.0 23 1.5 33 0.723 70 1 0 3DFACE 8 taser_a 10 0.796875 20 1.5 30 0.982 11 0.53125 21 1.5 31 0.723 12 0.53125 22 1.5 32 0.982 13 0.53125 23 1.5 33 0.982 70 1 0 3DFACE 8 taser_a 10 1.0625 20 1.5 30 1.241 11 0.796875 21 1.5 31 0.982 12 0.796875 22 1.5 32 1.241 13 0.796875 23 1.5 33 1.241 70 1 0 3DFACE 8 taser_a 10 1.295 20 1.5 30 3.0 11 1.0625 21 1.5 31 1.241 12 1.0625 22 1.5 32 1.759 13 1.0625 23 1.5 33 1.759 70 13 0 3DFACE 8 taser_a 10 1.295 20 1.5 30 3.0 11 1.0625 21 1.5 31 1.759 12 0.796875 22 1.5 32 2.018 13 0.796875 23 1.5 33 2.018 70 15 0 3DFACE 8 taser_a 10 1.295 20 1.5 30 3.0 11 0.796875 21 1.5 31 2.018 12 0.53125 22 1.5 32 2.277 13 0.53125 23 1.5 33 2.277 70 15 0 3DFACE 8 taser_a 10 1.295 20 1.5 30 3.0 11 0.53125 21 1.5 31 2.277 12 0.777 22 1.5 32 2.795 13 0.777 23 1.5 33 2.795 70 15 0 3DFACE 8 taser_a 10 0.777 20 1.5 30 2.795 11 0.53125 21 1.5 31 2.277 12 0.0 22 1.5 32 2.795 13 0.0 23 1.5 33 2.795 70 3 0 3DFACE 8 taser_a 10 1.295 20 1.5 30 3.0 11 0.777 21 1.5 31 2.795 12 0.777 22 1.5 32 3.0 13 0.777 23 1.5 33 3.0 70 1 0 3DFACE 8 taser_a 10 0.0 20 2.795 30 1.5 11 0.0 21 2.277 31 0.723 12 0.0 22 1.5 32 1.5 13 0.0 23 1.5 33 1.5 70 1 0 3DFACE 8 taser_a 10 0.0 20 2.277 30 0.723 11 0.0 21 2.795 31 1.5 12 0.0 22 2.795 32 0.723 13 0.0 23 2.795 33 0.723 70 1 0 3DFACE 8 taser_a 10 0.0 20 2.277 30 2.277 11 0.0 21 1.5 31 1.5 12 0.0 22 1.5 32 2.277 13 0.0 23 1.5 33 2.277 70 0 0 3DFACE 8 taser_a 10 0.0 20 1.5 30 1.5 11 0.0 21 0.205 31 0.205 12 0.0 22 0.205 32 1.5 13 0.0 23 0.205 33 1.5 70 0 0 3DFACE 8 taser_a 10 1.295 20 0.0 30 3.0 11 0.0 21 0.205 31 3.0 12 0.0 22 0.0 32 3.0 13 0.0 23 0.0 33 3.0 70 1 0 3DFACE 8 taser_a 10 0.0 20 0.205 30 3.0 11 1.295 21 0.0 31 3.0 12 0.0 22 1.5 32 3.0 13 0.0 23 1.5 33 3.0 70 3 0 3DFACE 8 taser_a 10 0.0 20 1.5 30 3.0 11 1.295 21 0.0 31 3.0 12 0.777 22 1.5 32 3.0 13 0.777 23 1.5 33 3.0 70 3 0 3DFACE 8 taser_a 10 0.777 20 1.5 30 3.0 11 1.295 21 0.0 31 3.0 12 1.295 22 1.5 32 3.0 13 1.295 23 1.5 33 3.0 70 1 0 3DFACE 8 taser_a 10 0.0 20 1.5 30 3.0 11 0.777 21 1.5 31 2.795 12 0.0 22 1.5 32 2.795 13 0.0 23 1.5 33 2.795 70 1 0 3DFACE 8 taser_a 10 0.777 20 1.5 30 2.795 11 0.0 21 1.5 31 3.0 12 0.777 22 1.5 32 3.0 13 0.777 23 1.5 33 3.0 70 1 0 3DFACE 8 taser_a 10 0.776999999999999 20 1.5 30 8.88178419700126e-17 11 0.0 21 0.205 31 2.22044604925031e-16 12 0.0 22 1.5 32 0.0 13 0.0 23 1.5 33 0.0 70 1 0 3DFACE 8 taser_a 10 0.0 20 0.205 30 2.22044604925031e-16 11 0.776999999999999 21 1.5 31 8.88178419700126e-17 12 0.0 22 0.0 32 2.22044604925031e-16 13 0.0 23 0.0 33 2.22044604925031e-16 70 3 0 3DFACE 8 taser_a 10 0.0 20 0.0 30 2.22044604925031e-16 11 0.776999999999999 21 1.5 31 8.88178419700126e-17 12 1.295 22 0.0 32 2.22044604925031e-16 13 1.295 23 0.0 33 2.22044604925031e-16 70 3 0 3DFACE 8 taser_a 10 1.295 20 0.0 30 2.22044604925031e-16 11 0.776999999999999 21 1.5 31 8.88178419700126e-17 12 1.295 22 1.5 32 1.52655665885959e-16 13 1.295 23 1.5 33 1.52655665885959e-16 70 1 0 3DFACE 8 taser_a 10 0.0 20 1.5 30 0.205 11 0.776999999999999 21 1.5 31 8.88178419700126e-17 12 0.0 22 1.5 32 0.0 13 0.0 23 1.5 33 0.0 70 1 0 3DFACE 8 taser_a 10 0.776999999999999 20 1.5 30 8.88178419700126e-17 11 0.0 21 1.5 31 0.205 12 0.776999999999999 22 1.5 32 0.205 13 0.776999999999999 23 1.5 33 0.205 70 1 0 3DFACE 8 taser_b 10 0.868083094650066 20 1.9222333770949 30 3.0 11 0.777 21 2.223 31 3.0 12 0.777 22 1.98309315521565 32 3.0 13 0.777 23 1.98309315521565 33 3.0 70 1 0 3DFACE 8 taser_b 10 0.777 20 2.223 30 3.0 11 0.868083094650066 21 1.9222333770949 31 3.0 12 0.91251205544432 22 1.98213889596437 32 3.0 13 0.91251205544432 23 1.98213889596437 33 3.0 70 13 0 3DFACE 8 taser_b 10 0.777 20 2.223 30 3.0 11 0.91251205544432 21 1.98213889596437 31 3.0 12 0.962598846298224 22 2.03740115370178 32 3.0 13 0.962598846298224 23 2.03740115370178 33 3.0 70 1 0 3DFACE 8 taser_b 10 1.01786110403563 20 2.08748794455568 30 0.0 11 1.295 21 1.705 31 6.58963624407723e-17 12 0.962598846298224 22 2.03740115370178 32 0.0 13 0.962598846298224 23 2.03740115370178 33 0.0 70 1 0 3DFACE 8 taser_b 10 1.295 20 1.705 30 6.58963624407723e-17 11 1.01786110403563 21 2.08748794455568 31 0.0 12 1.0777666229051 22 2.13191690534993 32 0.0 13 1.0777666229051 23 2.13191690534993 33 0.0 70 13 0 3DFACE 8 taser_b 10 1.295 20 1.705 30 6.58963624407723e-17 11 1.0777666229051 21 2.13191690534993 31 0.0 12 1.295 22 1.80680418134643 32 6.07160340763011e-17 13 1.295 23 1.80680418134643 33 6.07160340763011e-17 70 1 0 3DFACE 8 taser_b 10 0.0 20 3.0 30 0.205 11 0.0 21 1.5 31 0.205 12 0.0 22 3.0 32 0.464 13 0.0 23 3.0 33 0.464 70 2 0 3DFACE 8 taser_b 10 0.0 20 3.0 30 0.723 11 0.0 21 1.5 31 0.205 12 0.0 22 1.5 32 0.723 13 0.0 23 1.5 33 0.723 70 1 0 3DFACE 8 taser_b 10 0.0 20 1.5 30 0.205 11 0.0 21 3.0 31 0.723 12 0.0 22 3.0 32 0.464 13 0.0 23 3.0 33 0.464 70 13 0 3DFACE 8 taser_b 10 0.53125 20 3.0 30 0.982 11 0.53125 21 1.5 31 0.723 12 0.53125 22 1.5 32 0.982 13 0.53125 23 1.5 33 0.982 70 1 0 3DFACE 8 taser_b 10 0.53125 20 1.5 30 0.723 11 0.53125 21 3.0 31 0.982 12 0.53125 22 3.0 32 0.723 13 0.53125 23 3.0 33 0.723 70 1 0 3DFACE 8 taser_b 10 1.0625 20 1.5 30 1.241 11 0.796875 21 3.0 31 1.241 12 0.796875 22 1.5 32 1.241 13 0.796875 23 1.5 33 1.241 70 1 0 3DFACE 8 taser_b 10 0.796875 20 3.0 30 1.241 11 1.0625 21 1.5 31 1.241 12 1.0625 22 3.0 32 1.241 13 1.0625 23 3.0 33 1.241 70 1 0 3DFACE 8 taser_b 10 1.0625 20 3.0 30 1.759 11 0.796875 21 1.5 31 1.759 12 0.796875 22 3.0 32 1.759 13 0.796875 23 3.0 33 1.759 70 1 0 3DFACE 8 taser_b 10 0.796875 20 1.5 30 1.759 11 1.0625 21 3.0 31 1.759 12 1.0625 22 1.5 32 1.759 13 1.0625 23 1.5 33 1.759 70 1 0 3DFACE 8 taser_b 10 0.777 20 1.64381364161549 30 3.0 11 0.777 21 1.5 31 2.795 12 0.777 22 1.5 32 3.0 13 0.777 23 1.5 33 3.0 70 1 0 3DFACE 8 taser_b 10 0.777 20 1.5 30 2.795 11 0.777 21 1.64381364161549 31 3.0 12 0.777 22 3.0 32 2.795 13 0.777 23 3.0 33 2.795 70 3 0 3DFACE 8 taser_b 10 0.777 20 3.0 30 2.795 11 0.777 21 1.64381364161549 31 3.0 12 0.777 22 1.73256321554271 32 3.0 13 0.777 23 1.73256321554271 33 3.0 70 13 0 3DFACE 8 taser_b 10 0.777 20 3.0 30 2.795 11 0.777 21 1.73256321554271 31 3.0 12 0.777 22 1.79947640559575 32 3.0 13 0.777 23 1.79947640559575 33 3.0 70 13 0 3DFACE 8 taser_b 10 0.777 20 3.0 30 2.795 11 0.777 21 1.79947640559575 31 3.0 12 0.777 22 1.98309315521565 32 3.0 13 0.777 23 1.98309315521565 33 3.0 70 13 0 3DFACE 8 taser_b 10 0.777 20 3.0 30 2.795 11 0.777 21 1.98309315521565 31 3.0 12 0.777 22 2.223 32 3.0 13 0.777 23 2.223 33 3.0 70 13 0 3DFACE 8 taser_b 10 0.777 20 3.0 30 2.795 11 0.777 21 2.223 31 3.0 12 0.777 22 2.58204596640715 32 3.0 13 0.777 23 2.58204596640715 33 3.0 70 13 0 3DFACE 8 taser_b 10 0.777 20 3.0 30 2.795 11 0.777 21 2.58204596640715 31 3.0 12 0.777 22 3.0 32 3.0 13 0.777 23 3.0 33 3.0 70 1 0 3DFACE 8 taser_b 10 0.53125 20 3.0 30 2.277 11 0.53125 21 1.5 31 2.018 12 0.53125 22 1.5 32 2.277 13 0.53125 23 1.5 33 2.277 70 1 0 3DFACE 8 taser_b 10 0.53125 20 1.5 30 2.018 11 0.53125 21 3.0 31 2.277 12 0.53125 22 3.0 32 2.018 13 0.53125 23 3.0 33 2.018 70 1 0 3DFACE 8 taser_b 10 0.796875 20 3.0 30 1.241 11 0.796875 21 1.5 31 0.982 12 0.796875 22 1.5 32 1.241 13 0.796875 23 1.5 33 1.241 70 1 0 3DFACE 8 taser_b 10 0.796875 20 1.5 30 0.982 11 0.796875 21 3.0 31 1.241 12 0.796875 22 3.0 32 0.982 13 0.796875 23 3.0 33 0.982 70 1 0 3DFACE 8 taser_b 10 1.0625 20 3.0 30 1.759 11 1.0625 21 1.5 31 1.5 12 1.0625 22 1.5 32 1.759 13 1.0625 23 1.5 33 1.759 70 1 0 3DFACE 8 taser_b 10 1.0625 20 1.5 30 1.5 11 1.0625 21 3.0 31 1.759 12 1.0625 22 1.5 32 1.241 13 1.0625 23 1.5 33 1.241 70 3 0 3DFACE 8 taser_b 10 1.0625 20 1.5 30 1.241 11 1.0625 21 3.0 31 1.759 12 1.0625 22 3.0 32 1.241 13 1.0625 23 3.0 33 1.241 70 3 0 3DFACE 8 taser_b 10 1.0625 20 3.0 30 1.241 11 1.0625 21 3.0 31 1.759 12 1.0625 22 3.0 32 1.5 13 1.0625 23 3.0 33 1.5 70 1 0 3DFACE 8 taser_b 10 0.796875 20 3.0 30 2.018 11 0.796875 21 1.5 31 1.759 12 0.796875 22 1.5 32 2.018 13 0.796875 23 1.5 33 2.018 70 1 0 3DFACE 8 taser_b 10 0.796875 20 1.5 30 1.759 11 0.796875 21 3.0 31 2.018 12 0.796875 22 3.0 32 1.759 13 0.796875 23 3.0 33 1.759 70 1 0 3DFACE 8 taser_b 10 0.723000000000001 20 3.0 30 2.018 11 0.53125 21 1.5 31 2.018 12 0.53125 22 3.0 32 2.018 13 0.53125 23 3.0 33 2.018 70 1 0 3DFACE 8 taser_b 10 0.53125 20 1.5 30 2.018 11 0.723000000000001 21 3.0 31 2.018 12 0.796875 22 1.5 32 2.018 13 0.796875 23 1.5 33 2.018 70 3 0 3DFACE 8 taser_b 10 0.796875 20 1.5 30 2.018 11 0.723000000000001 21 3.0 31 2.018 12 0.796875 22 3.0 32 2.018 13 0.796875 23 3.0 33 2.018 70 1 0 3DFACE 8 taser_b 10 0.0 20 3.0 30 2.795 11 0.0 21 1.5 31 2.277 12 0.0 22 1.5 32 2.795 13 0.0 23 1.5 33 2.795 70 1 0 3DFACE 8 taser_b 10 0.0 20 1.5 30 2.277 11 0.0 21 3.0 31 2.795 12 0.0 22 3.0 32 2.277 13 0.0 23 3.0 33 2.277 70 3 0 3DFACE 8 taser_b 10 0.0 20 3.0 30 2.277 11 0.0 21 3.0 31 2.795 12 0.0 22 3.0 32 2.536 13 0.0 23 3.0 33 2.536 70 1 0 3DFACE 8 taser_b 10 0.796875 20 1.5 30 0.982 11 0.53125 21 3.0 31 0.982 12 0.53125 22 1.5 32 0.982 13 0.53125 23 1.5 33 0.982 70 1 0 3DFACE 8 taser_b 10 0.53125 20 3.0 30 0.982 11 0.796875 21 1.5 31 0.982 12 0.723000000000001 22 3.0 32 0.982 13 0.723000000000001 23 3.0 33 0.982 70 3 0 3DFACE 8 taser_b 10 0.723000000000001 20 3.0 30 0.982 11 0.796875 21 1.5 31 0.982 12 0.796875 22 3.0 32 0.982 13 0.796875 23 3.0 33 0.982 70 1 0 3DFACE 8 taser_b 10 0.91251205544432 20 1.98213889596437 30 0.0 11 1.295 21 1.63697662077346 31 6.93577471913193e-17 12 0.868083094650066 22 1.9222333770949 32 0.0 13 0.868083094650066 23 1.9222333770949 33 0.0 70 1 0 3DFACE 8 taser_b 10 1.295 20 1.63697662077346 30 6.93577471913193e-17 11 0.91251205544432 21 1.98213889596437 31 0.0 12 0.962598846298224 22 2.03740115370178 32 0.0 13 0.962598846298224 23 2.03740115370178 33 0.0 70 13 0 3DFACE 8 taser_b 10 1.295 20 1.63697662077346 30 6.93577471913193e-17 11 0.962598846298224 21 2.03740115370178 31 0.0 12 1.295 22 1.705 32 6.58963624407723e-17 13 1.295 23 1.705 33 6.58963624407723e-17 70 1 0 3DFACE 8 taser_b 10 1.27938364528661 20 2.22727465515648 30 0.0 11 1.295 21 1.99491378028649 31 5.11440353810559e-17 12 1.20916059140253 22 2.20214844470858 32 0.0 13 1.20916059140253 23 2.20214844470858 33 0.0 70 1 0 3DFACE 8 taser_b 10 1.295 20 1.99491378028649 30 5.11440353810559e-17 11 1.27938364528661 21 2.22727465515648 31 0.0 12 1.295 22 2.2311863483779 32 3.91212533101955e-17 13 1.295 23 2.2311863483779 33 3.91212533101955e-17 70 1 0 3DFACE 8 taser_b 10 1.14173848001224 20 2.17026016090475 30 0.0 11 1.295 21 1.80680418134643 31 6.07160340763011e-17 12 1.0777666229051 22 2.13191690534993 32 0.0 13 1.0777666229051 23 2.13191690534993 33 0.0 70 1 0 3DFACE 8 taser_b 10 1.295 20 1.80680418134643 30 6.07160340763011e-17 11 1.14173848001224 21 2.17026016090475 31 0.0 12 1.20916059140253 22 2.20214844470858 32 0.0 13 1.20916059140253 23 2.20214844470858 33 0.0 70 13 0 3DFACE 8 taser_b 10 1.295 20 1.80680418134643 30 6.07160340763011e-17 11 1.20916059140253 21 2.20214844470858 31 0.0 12 1.295 22 1.99491378028649 32 5.11440353810559e-17 13 1.295 23 1.99491378028649 33 5.11440353810559e-17 70 1 0 3DFACE 8 taser_b 10 0.82973983909525 20 1.85826151998776 30 0.0 11 1.295 21 1.58491378028649 31 7.20069763854704e-17 12 0.797851555291422 22 1.79083940859747 32 0.0 13 0.797851555291422 23 1.79083940859747 33 0.0 70 1 0 3DFACE 8 taser_b 10 1.295 20 1.58491378028649 30 7.20069763854704e-17 11 0.82973983909525 21 1.85826151998776 31 0.0 12 0.868083094650066 22 1.9222333770949 32 0.0 13 0.868083094650066 23 1.9222333770949 33 0.0 70 13 0 3DFACE 8 taser_b 10 1.295 20 1.58491378028649 30 7.20069763854704e-17 11 0.868083094650066 21 1.9222333770949 31 0.0 12 1.295 22 1.63697662077346 32 6.93577471913193e-17 13 1.295 23 1.63697662077346 33 6.93577471913193e-17 70 1 0 3DFACE 8 taser_b 10 1.295 20 1.54077703531283 30 7.42528844501344e-17 11 0.776999999999999 21 1.5 31 8.88178419700126e-17 12 0.776999999999999 22 1.64381364161549 32 4.44089209850063e-17 13 0.776999999999999 23 1.64381364161549 33 4.44089209850063e-17 70 1 0 3DFACE 8 taser_b 10 0.776999999999999 20 1.5 30 8.88178419700126e-17 11 1.295 21 1.54077703531283 31 7.42528844501344e-17 12 1.295 22 1.5 32 1.52655665885959e-16 13 1.295 23 1.5 33 1.52655665885959e-16 70 1 0 3DFACE 8 taser_b 10 0.797851555291422 20 1.79083940859747 30 0.0 11 0.776999999999999 21 1.64381364161549 31 4.44089209850063e-17 12 0.776999999999999 22 1.73256321554271 32 4.44089209850063e-17 13 0.776999999999999 23 1.73256321554271 33 4.44089209850063e-17 70 1 0 3DFACE 8 taser_b 10 0.776999999999999 20 1.64381364161549 30 4.44089209850063e-17 11 0.797851555291422 21 1.79083940859747 31 0.0 12 1.295 22 1.54077703531283 32 7.42528844501344e-17 13 1.295 23 1.54077703531283 33 7.42528844501344e-17 70 3 0 3DFACE 8 taser_b 10 1.295 20 1.54077703531283 30 7.42528844501344e-17 11 0.797851555291422 21 1.79083940859747 31 0.0 12 1.295 22 1.58491378028649 32 7.20069763854704e-17 13 1.295 23 1.58491378028649 33 7.20069763854704e-17 70 1 0 3DFACE 8 taser_b 10 1.295 20 2.5306045958858 30 2.38852893262874e-17 11 1.20163144893051 21 3.0 31 0.0 12 1.295 22 3.0 32 0.0 13 1.295 23 3.0 33 0.0 70 0 0 3DFACE 8 taser_b 10 1.20163144893051 20 3.0 30 0.0 11 1.20916059140253 21 2.20214844470858 31 0.0 12 0.878679656440356 22 3.0 32 0.0 13 0.878679656440356 23 3.0 33 0.0 70 1 0 3DFACE 8 taser_b 10 1.20916059140253 20 2.20214844470858 30 0.0 11 1.20163144893051 21 3.0 31 0.0 12 1.295 22 2.5306045958858 32 2.38852893262874e-17 13 1.295 23 2.5306045958858 33 2.38852893262874e-17 70 13 0 3DFACE 8 taser_b 10 1.20916059140253 20 2.20214844470858 30 0.0 11 1.295 21 2.5306045958858 31 2.38852893262874e-17 12 1.27938364528661 22 2.22727465515648 32 0.0 13 1.27938364528661 23 2.22727465515648 33 0.0 70 3 0 3DFACE 8 taser_b 10 1.27938364528661 20 2.22727465515648 30 0.0 11 1.295 21 2.5306045958858 31 2.38852893262874e-17 12 1.295 22 2.2311863483779 32 3.91212533101955e-17 13 1.295 23 2.2311863483779 33 3.91212533101955e-17 70 1 0 3DFACE 8 taser_b 10 0.776999999999999 20 3.0 30 8.88178419700126e-17 11 1.0777666229051 21 2.13191690534993 31 0.0 12 0.776999999999999 22 2.58204596640715 32 4.44089209850063e-17 13 0.776999999999999 23 2.58204596640715 33 4.44089209850063e-17 70 1 0 3DFACE 8 taser_b 10 1.0777666229051 20 2.13191690534993 30 0.0 11 0.776999999999999 21 3.0 31 8.88178419700126e-17 12 0.878679656440356 22 3.0 32 0.0 13 0.878679656440356 23 3.0 33 0.0 70 13 0 3DFACE 8 taser_b 10 1.0777666229051 20 2.13191690534993 30 0.0 11 0.878679656440356 21 3.0 31 0.0 12 1.14173848001224 22 2.17026016090475 32 0.0 13 1.14173848001224 23 2.17026016090475 33 0.0 70 3 0 3DFACE 8 taser_b 10 1.14173848001224 20 2.17026016090475 30 0.0 11 0.878679656440356 21 3.0 31 0.0 12 1.20916059140253 22 2.20214844470858 32 0.0 13 1.20916059140253 23 2.20214844470858 33 0.0 70 1 0 3DFACE 8 taser_b 10 0.868083094650066 20 1.9222333770949 30 0.0 11 0.776999999999999 21 1.79947640559575 31 4.44089209850063e-17 12 0.776999999999999 22 1.98309315521565 32 4.44089209850063e-17 13 0.776999999999999 23 1.98309315521565 33 4.44089209850063e-17 70 1 0 3DFACE 8 taser_b 10 0.776999999999999 20 1.79947640559575 30 4.44089209850063e-17 11 0.868083094650066 21 1.9222333770949 31 0.0 12 0.82973983909525 22 1.85826151998776 32 0.0 13 0.82973983909525 23 1.85826151998776 33 0.0 70 13 0 3DFACE 8 taser_b 10 0.776999999999999 20 1.79947640559575 30 4.44089209850063e-17 11 0.82973983909525 21 1.85826151998776 31 0.0 12 0.797851555291422 22 1.79083940859747 32 0.0 13 0.797851555291422 23 1.79083940859747 33 0.0 70 1 0 3DFACE 8 taser_b 10 0.962598846298224 20 2.03740115370178 30 0.0 11 0.776999999999999 21 1.98309315521565 31 4.44089209850063e-17 12 0.776999999999999 22 2.223 32 4.44089209850063e-17 13 0.776999999999999 23 2.223 33 4.44089209850063e-17 70 1 0 3DFACE 8 taser_b 10 0.776999999999999 20 1.98309315521565 30 4.44089209850063e-17 11 0.962598846298224 21 2.03740115370178 31 0.0 12 0.91251205544432 22 1.98213889596437 32 0.0 13 0.91251205544432 23 1.98213889596437 33 0.0 70 13 0 3DFACE 8 taser_b 10 0.776999999999999 20 1.98309315521565 30 4.44089209850063e-17 11 0.91251205544432 21 1.98213889596437 31 0.0 12 0.868083094650066 22 1.9222333770949 32 0.0 13 0.868083094650066 23 1.9222333770949 33 0.0 70 1 0 3DFACE 8 taser_b 10 1.0777666229051 20 2.13191690534993 30 0.0 11 0.776999999999999 21 2.223 31 4.44089209850063e-17 12 0.776999999999999 22 2.58204596640715 32 4.44089209850063e-17 13 0.776999999999999 23 2.58204596640715 33 4.44089209850063e-17 70 1 0 3DFACE 8 taser_b 10 0.776999999999999 20 2.223 30 4.44089209850063e-17 11 1.0777666229051 21 2.13191690534993 31 0.0 12 1.01786110403563 22 2.08748794455568 32 0.0 13 1.01786110403563 23 2.08748794455568 33 0.0 70 13 0 3DFACE 8 taser_b 10 0.776999999999999 20 2.223 30 4.44089209850063e-17 11 1.01786110403563 21 2.08748794455568 31 0.0 12 0.962598846298224 22 2.03740115370178 32 0.0 13 0.962598846298224 23 2.03740115370178 33 0.0 70 1 0 3DFACE 8 taser_b 10 0.797851555291422 20 1.79083940859747 30 0.0 11 0.776999999999999 21 1.73256321554271 31 4.44089209850063e-17 12 0.776999999999999 22 1.79947640559575 32 4.44089209850063e-17 13 0.776999999999999 23 1.79947640559575 33 4.44089209850063e-17 70 0 0 3DFACE 8 taser_b 10 0.962598846298224 20 2.03740115370178 30 3.0 11 0.777 21 2.58204596640715 31 3.0 12 0.777 22 2.223 32 3.0 13 0.777 23 2.223 33 3.0 70 1 0 3DFACE 8 taser_b 10 0.777 20 2.58204596640715 30 3.0 11 0.962598846298224 21 2.03740115370178 31 3.0 12 1.01786110403563 22 2.08748794455568 32 3.0 13 1.01786110403563 23 2.08748794455568 33 3.0 70 13 0 3DFACE 8 taser_b 10 0.777 20 2.58204596640715 30 3.0 11 1.01786110403563 21 2.08748794455568 31 3.0 12 1.0777666229051 22 2.13191690534993 32 3.0 13 1.0777666229051 23 2.13191690534993 33 3.0 70 1 0 3DFACE 8 taser_b 10 0.797851555291422 20 1.79083940859747 30 3.0 11 0.777 21 1.98309315521565 31 3.0 12 0.777 22 1.79947640559575 32 3.0 13 0.777 23 1.79947640559575 33 3.0 70 1 0 3DFACE 8 taser_b 10 0.777 20 1.98309315521565 30 3.0 11 0.797851555291422 21 1.79083940859747 31 3.0 12 0.82973983909525 22 1.85826151998776 32 3.0 13 0.82973983909525 23 1.85826151998776 33 3.0 70 13 0 3DFACE 8 taser_b 10 0.777 20 1.98309315521565 30 3.0 11 0.82973983909525 21 1.85826151998776 31 3.0 12 0.868083094650066 22 1.9222333770949 32 3.0 13 0.868083094650066 23 1.9222333770949 33 3.0 70 1 0 3DFACE 8 taser_b 10 1.295 20 1.5 30 3.0 11 0.777 21 1.64381364161549 31 3.0 12 0.777 22 1.5 32 3.0 13 0.777 23 1.5 33 3.0 70 1 0 3DFACE 8 taser_b 10 0.777 20 1.64381364161549 30 3.0 11 1.295 21 1.5 31 3.0 12 1.295 22 1.54077703531283 32 3.0 13 1.295 23 1.54077703531283 33 3.0 70 1 0 3DFACE 8 taser_b 10 1.0777666229051 20 2.13191690534993 30 3.0 11 0.777 21 3.0 31 3.0 12 0.777 22 2.58204596640715 32 3.0 13 0.777 23 2.58204596640715 33 3.0 70 1 0 3DFACE 8 taser_b 10 0.777 20 3.0 30 3.0 11 1.0777666229051 21 2.13191690534993 31 3.0 12 0.878679656440356 22 3.0 32 3.0 13 0.878679656440356 23 3.0 33 3.0 70 3 0 3DFACE 8 taser_b 10 0.878679656440356 20 3.0 30 3.0 11 1.0777666229051 21 2.13191690534993 31 3.0 12 1.14173848001224 22 2.17026016090475 32 3.0 13 1.14173848001224 23 2.17026016090475 33 3.0 70 13 0 3DFACE 8 taser_b 10 0.878679656440356 20 3.0 30 3.0 11 1.14173848001224 21 2.17026016090475 31 3.0 12 1.20916059140253 22 2.20214844470858 32 3.0 13 1.20916059140253 23 2.20214844470858 33 3.0 70 1 0 3DFACE 8 taser_b 10 1.295 20 3.0 30 3.0 11 1.20163144893051 21 3.0 31 3.0 12 1.295 22 2.5306045958858 32 3.0 13 1.295 23 2.5306045958858 33 3.0 70 0 0 3DFACE 8 taser_b 10 1.295 20 1.705 30 3.0 11 1.01786110403563 21 2.08748794455568 31 3.0 12 0.962598846298224 22 2.03740115370178 32 3.0 13 0.962598846298224 23 2.03740115370178 33 3.0 70 1 0 3DFACE 8 taser_b 10 1.01786110403563 20 2.08748794455568 30 3.0 11 1.295 21 1.705 31 3.0 12 1.0777666229051 22 2.13191690534993 32 3.0 13 1.0777666229051 23 2.13191690534993 33 3.0 70 3 0 3DFACE 8 taser_b 10 1.0777666229051 20 2.13191690534993 30 3.0 11 1.295 21 1.705 31 3.0 12 1.295 22 1.80680418134643 32 3.0 13 1.295 23 1.80680418134643 33 3.0 70 1 0 3DFACE 8 taser_b 10 1.295 20 1.63697662077346 30 3.0 11 0.91251205544432 21 1.98213889596437 31 3.0 12 0.868083094650066 22 1.9222333770949 32 3.0 13 0.868083094650066 23 1.9222333770949 33 3.0 70 1 0 3DFACE 8 taser_b 10 0.91251205544432 20 1.98213889596437 30 3.0 11 1.295 21 1.63697662077346 31 3.0 12 0.962598846298224 22 2.03740115370178 32 3.0 13 0.962598846298224 23 2.03740115370178 33 3.0 70 3 0 3DFACE 8 taser_b 10 0.962598846298224 20 2.03740115370178 30 3.0 11 1.295 21 1.63697662077346 31 3.0 12 1.295 22 1.705 32 3.0 13 1.295 23 1.705 33 3.0 70 1 0 3DFACE 8 taser_b 10 1.295 20 1.80680418134643 30 3.0 11 1.14173848001224 21 2.17026016090475 31 3.0 12 1.0777666229051 22 2.13191690534993 32 3.0 13 1.0777666229051 23 2.13191690534993 33 3.0 70 1 0 3DFACE 8 taser_b 10 1.14173848001224 20 2.17026016090475 30 3.0 11 1.295 21 1.80680418134643 31 3.0 12 1.20916059140253 22 2.20214844470858 32 3.0 13 1.20916059140253 23 2.20214844470858 33 3.0 70 3 0 3DFACE 8 taser_b 10 1.20916059140253 20 2.20214844470858 30 3.0 11 1.295 21 1.80680418134643 31 3.0 12 1.295 22 1.99491378028649 32 3.0 13 1.295 23 1.99491378028649 33 3.0 70 1 0 3DFACE 8 taser_b 10 1.295 20 1.58491378028648 30 3.0 11 0.82973983909525 21 1.85826151998776 31 3.0 12 0.797851555291422 22 1.79083940859747 32 3.0 13 0.797851555291422 23 1.79083940859747 33 3.0 70 1 0 3DFACE 8 taser_b 10 0.82973983909525 20 1.85826151998776 30 3.0 11 1.295 21 1.58491378028648 31 3.0 12 0.868083094650066 22 1.9222333770949 32 3.0 13 0.868083094650066 23 1.9222333770949 33 3.0 70 3 0 3DFACE 8 taser_b 10 0.868083094650066 20 1.9222333770949 30 3.0 11 1.295 21 1.58491378028648 31 3.0 12 1.295 22 1.63697662077346 32 3.0 13 1.295 23 1.63697662077346 33 3.0 70 1 0 3DFACE 8 taser_b 10 1.20916059140253 20 2.20214844470858 30 3.0 11 1.036 21 3.0 31 3.0 12 0.878679656440356 22 3.0 32 3.0 13 0.878679656440356 23 3.0 33 3.0 70 1 0 3DFACE 8 taser_b 10 1.036 20 3.0 30 3.0 11 1.20916059140253 21 2.20214844470858 31 3.0 12 1.20163144893051 22 3.0 32 3.0 13 1.20163144893051 23 3.0 33 3.0 70 3 0 3DFACE 8 taser_b 10 1.20163144893051 20 3.0 30 3.0 11 1.20916059140253 21 2.20214844470858 31 3.0 12 1.295 22 2.5306045958858 32 3.0 13 1.295 23 2.5306045958858 33 3.0 70 3 0 3DFACE 8 taser_b 10 1.295 20 2.5306045958858 30 3.0 11 1.20916059140253 21 2.20214844470858 31 3.0 12 1.27938364528661 22 2.22727465515648 32 3.0 13 1.27938364528661 23 2.22727465515648 33 3.0 70 13 0 3DFACE 8 taser_b 10 1.295 20 2.5306045958858 30 3.0 11 1.27938364528661 21 2.22727465515648 31 3.0 12 1.295 22 2.2311863483779 32 3.0 13 1.295 23 2.2311863483779 33 3.0 70 1 0 3DFACE 8 taser_b 10 1.295 20 1.99491378028649 30 3.0 11 1.27938364528661 21 2.22727465515648 31 3.0 12 1.20916059140253 22 2.20214844470858 32 3.0 13 1.20916059140253 23 2.20214844470858 33 3.0 70 1 0 3DFACE 8 taser_b 10 1.27938364528661 20 2.22727465515648 30 3.0 11 1.295 21 1.99491378028649 31 3.0 12 1.295 22 2.2311863483779 32 3.0 13 1.295 23 2.2311863483779 33 3.0 70 1 0 3DFACE 8 taser_b 10 1.295 20 1.54077703531283 30 3.0 11 0.777 21 1.73256321554271 31 3.0 12 0.777 22 1.64381364161549 32 3.0 13 0.777 23 1.64381364161549 33 3.0 70 1 0 3DFACE 8 taser_b 10 0.777 20 1.73256321554271 30 3.0 11 1.295 21 1.54077703531283 31 3.0 12 0.797851555291422 22 1.79083940859747 32 3.0 13 0.797851555291422 23 1.79083940859747 33 3.0 70 3 0 3DFACE 8 taser_b 10 0.797851555291422 20 1.79083940859747 30 3.0 11 1.295 21 1.54077703531283 31 3.0 12 1.295 22 1.58491378028648 32 3.0 13 1.295 23 1.58491378028648 33 3.0 70 1 0 3DFACE 8 taser_b 10 0.797851555291422 20 1.79083940859747 30 3.0 11 0.777 21 1.79947640559575 31 3.0 12 0.777 22 1.73256321554271 32 3.0 13 0.777 23 1.73256321554271 33 3.0 70 0 0 3DFACE 8 taser_b 10 0.777 20 1.5 30 2.795 11 0.0 21 3.0 31 2.795 12 0.0 22 1.5 32 2.795 13 0.0 23 1.5 33 2.795 70 1 0 3DFACE 8 taser_b 10 0.0 20 3.0 30 2.795 11 0.777 21 1.5 31 2.795 12 0.205000000000001 22 3.0 32 2.795 13 0.205000000000001 23 3.0 33 2.795 70 3 0 3DFACE 8 taser_b 10 0.205000000000001 20 3.0 30 2.795 11 0.777 21 1.5 31 2.795 12 0.777 22 3.0 32 2.795 13 0.777 23 3.0 33 2.795 70 1 0 3DFACE 8 taser_b 10 0.205000000000001 20 3.0 30 2.277 11 0.0 21 1.5 31 2.277 12 0.0 22 3.0 32 2.277 13 0.0 23 3.0 33 2.277 70 1 0 3DFACE 8 taser_b 10 0.0 20 1.5 30 2.277 11 0.205000000000001 21 3.0 31 2.277 12 0.53125 22 1.5 32 2.277 13 0.53125 23 1.5 33 2.277 70 3 0 3DFACE 8 taser_b 10 0.53125 20 1.5 30 2.277 11 0.205000000000001 21 3.0 31 2.277 12 0.53125 22 3.0 32 2.277 13 0.53125 23 3.0 33 2.277 70 1 0 3DFACE 8 taser_b 10 0.53125 20 1.5 30 0.723 11 0.0 21 3.0 31 0.723 12 0.0 22 1.5 32 0.723 13 0.0 23 1.5 33 0.723 70 1 0 3DFACE 8 taser_b 10 0.0 20 3.0 30 0.723 11 0.53125 21 1.5 31 0.723 12 0.205 22 3.0 32 0.723 13 0.205 23 3.0 33 0.723 70 3 0 3DFACE 8 taser_b 10 0.205 20 3.0 30 0.723 11 0.53125 21 1.5 31 0.723 12 0.53125 22 3.0 32 0.723 13 0.53125 23 3.0 33 0.723 70 1 0 3DFACE 8 taser_b 10 0.776999999999999 20 3.0 30 0.205 11 0.776999999999999 21 1.5 31 8.88178419700126e-17 12 0.776999999999999 22 1.5 32 0.205 13 0.776999999999999 23 1.5 33 0.205 70 1 0 3DFACE 8 taser_b 10 0.776999999999999 20 1.5 30 8.88178419700126e-17 11 0.776999999999999 21 3.0 31 0.205 12 0.776999999999999 22 1.64381364161549 32 4.44089209850063e-17 13 0.776999999999999 23 1.64381364161549 33 4.44089209850063e-17 70 3 0 3DFACE 8 taser_b 10 0.776999999999999 20 1.64381364161549 30 4.44089209850063e-17 11 0.776999999999999 21 3.0 31 0.205 12 0.776999999999999 22 1.73256321554271 32 4.44089209850063e-17 13 0.776999999999999 23 1.73256321554271 33 4.44089209850063e-17 70 3 0 3DFACE 8 taser_b 10 0.776999999999999 20 1.73256321554271 30 4.44089209850063e-17 11 0.776999999999999 21 3.0 31 0.205 12 0.776999999999999 22 1.79947640559575 32 4.44089209850063e-17 13 0.776999999999999 23 1.79947640559575 33 4.44089209850063e-17 70 3 0 3DFACE 8 taser_b 10 0.776999999999999 20 1.79947640559575 30 4.44089209850063e-17 11 0.776999999999999 21 3.0 31 0.205 12 0.776999999999999 22 1.98309315521565 32 4.44089209850063e-17 13 0.776999999999999 23 1.98309315521565 33 4.44089209850063e-17 70 3 0 3DFACE 8 taser_b 10 0.776999999999999 20 1.98309315521565 30 4.44089209850063e-17 11 0.776999999999999 21 3.0 31 0.205 12 0.776999999999999 22 2.223 32 4.44089209850063e-17 13 0.776999999999999 23 2.223 33 4.44089209850063e-17 70 3 0 3DFACE 8 taser_b 10 0.776999999999999 20 2.223 30 4.44089209850063e-17 11 0.776999999999999 21 3.0 31 0.205 12 0.776999999999999 22 2.58204596640715 32 4.44089209850063e-17 13 0.776999999999999 23 2.58204596640715 33 4.44089209850063e-17 70 3 0 3DFACE 8 taser_b 10 0.776999999999999 20 2.58204596640715 30 4.44089209850063e-17 11 0.776999999999999 21 3.0 31 0.205 12 0.776999999999999 22 3.0 32 8.88178419700126e-17 13 0.776999999999999 23 3.0 33 8.88178419700126e-17 70 1 0 3DFACE 8 taser_b 10 0.205000000000001 20 3.0 30 0.205000000000001 11 0.0 21 1.5 31 0.205 12 0.0 22 3.0 32 0.205 13 0.0 23 3.0 33 0.205 70 1 0 3DFACE 8 taser_b 10 0.0 20 1.5 30 0.205 11 0.205000000000001 21 3.0 31 0.205000000000001 12 0.776999999999999 22 1.5 32 0.205 13 0.776999999999999 23 1.5 33 0.205 70 3 0 3DFACE 8 taser_b 10 0.776999999999999 20 1.5 30 0.205 11 0.205000000000001 21 3.0 31 0.205000000000001 12 0.776999999999999 22 3.0 32 0.205 13 0.776999999999999 23 3.0 33 0.205 70 1 0 3DFACE 8 taser_b 10 1.5 20 3.0 30 0.205000000000001 11 1.295 21 2.5306045958858 31 2.38852893262874e-17 12 1.295 22 3.0 32 0.0 13 1.295 23 3.0 33 0.0 70 1 0 3DFACE 8 taser_b 10 1.295 20 2.5306045958858 30 2.38852893262874e-17 11 1.5 21 3.0 31 0.205000000000001 12 1.295 22 2.2311863483779 32 3.91212533101955e-17 13 1.295 23 2.2311863483779 33 3.91212533101955e-17 70 3 0 3DFACE 8 taser_b 10 1.295 20 2.2311863483779 30 3.91212533101955e-17 11 1.5 21 3.0 31 0.205000000000001 12 1.295 22 1.99491378028649 32 5.11440353810559e-17 13 1.295 23 1.99491378028649 33 5.11440353810559e-17 70 3 0 3DFACE 8 taser_b 10 1.295 20 1.99491378028649 30 5.11440353810559e-17 11 1.5 21 3.0 31 0.205000000000001 12 1.295 22 1.80680418134643 32 6.07160340763011e-17 13 1.295 23 1.80680418134643 33 6.07160340763011e-17 70 3 0 3DFACE 8 taser_b 10 1.295 20 1.80680418134643 30 6.07160340763011e-17 11 1.5 21 3.0 31 0.205000000000001 12 1.295 22 1.705 32 6.58963624407723e-17 13 1.295 23 1.705 33 6.58963624407723e-17 70 3 0 3DFACE 8 taser_b 10 1.295 20 1.705 30 6.58963624407723e-17 11 1.5 21 3.0 31 0.205000000000001 12 1.295 22 1.63697662077346 32 6.93577471913193e-17 13 1.295 23 1.63697662077346 33 6.93577471913193e-17 70 3 0 3DFACE 8 taser_b 10 1.295 20 1.63697662077346 30 6.93577471913193e-17 11 1.5 21 3.0 31 0.205000000000001 12 1.295 22 1.58491378028649 32 7.20069763854704e-17 13 1.295 23 1.58491378028649 33 7.20069763854704e-17 70 3 0 3DFACE 8 taser_b 10 1.295 20 1.58491378028649 30 7.20069763854704e-17 11 1.5 21 3.0 31 0.205000000000001 12 1.295 22 1.54077703531283 32 7.42528844501344e-17 13 1.295 23 1.54077703531283 33 7.42528844501344e-17 70 3 0 3DFACE 8 taser_b 10 1.295 20 1.54077703531283 30 7.42528844501344e-17 11 1.5 21 3.0 31 0.205000000000001 12 1.295 22 1.5 32 1.52655665885959e-16 13 1.295 23 1.5 33 1.52655665885959e-16 70 3 0 3DFACE 8 taser_b 10 1.295 20 1.5 30 1.52655665885959e-16 11 1.5 21 3.0 31 0.205000000000001 12 2.1475 22 1.5 32 0.8525 13 2.1475 23 1.5 33 0.8525 70 3 0 3DFACE 8 taser_b 10 2.1475 20 1.5 30 0.8525 11 1.5 21 3.0 31 0.205000000000001 12 2.1475 22 3.0 32 0.8525 13 2.1475 23 3.0 33 0.8525 70 1 0 3DFACE 8 taser_b 10 2.1475 20 3.0 30 0.8525 11 2.1475 21 1.5 31 1.28416666666667 12 2.1475 22 1.5 32 0.8525 13 2.1475 23 1.5 33 0.8525 70 1 0 3DFACE 8 taser_b 10 2.1475 20 1.5 30 1.28416666666667 11 2.1475 21 3.0 31 0.8525 12 2.1475 22 3.0 32 1.28416666666667 13 2.1475 23 3.0 33 1.28416666666667 70 1 0 3DFACE 8 taser_b 10 2.1475 20 3.0 30 1.71583333333333 11 1.71583333333333 21 1.5 31 2.1475 12 1.71583333333333 22 3.0 32 2.1475 13 1.71583333333333 23 3.0 33 2.1475 70 1 0 3DFACE 8 taser_b 10 1.71583333333333 20 1.5 30 2.1475 11 2.1475 21 3.0 31 1.71583333333333 12 2.1475 22 1.5 32 1.71583333333333 13 2.1475 23 1.5 33 1.71583333333333 70 1 0 3DFACE 8 taser_b 10 2.1475 20 3.0 30 1.71583333333333 11 2.1475 21 1.5 31 2.1475 12 2.1475 22 1.5 32 1.71583333333333 13 2.1475 23 1.5 33 1.71583333333333 70 1 0 3DFACE 8 taser_b 10 2.1475 20 1.5 30 2.1475 11 2.1475 21 3.0 31 1.71583333333333 12 2.1475 22 3.0 32 2.1475 13 2.1475 23 3.0 33 2.1475 70 1 0 3DFACE 8 taser_b 10 2.1475 20 3.0 30 2.1475 11 1.295 21 1.5 31 3.0 12 2.1475 22 1.5 32 2.1475 13 2.1475 23 1.5 33 2.1475 70 1 0 3DFACE 8 taser_b 10 1.295 20 1.5 30 3.0 11 2.1475 21 3.0 31 2.1475 12 1.295 22 1.54077703531283 32 3.0 13 1.295 23 1.54077703531283 33 3.0 70 3 0 3DFACE 8 taser_b 10 1.295 20 1.54077703531283 30 3.0 11 2.1475 21 3.0 31 2.1475 12 1.295 22 1.58491378028648 32 3.0 13 1.295 23 1.58491378028648 33 3.0 70 3 0 3DFACE 8 taser_b 10 1.295 20 1.58491378028648 30 3.0 11 2.1475 21 3.0 31 2.1475 12 1.295 22 1.63697662077346 32 3.0 13 1.295 23 1.63697662077346 33 3.0 70 3 0 3DFACE 8 taser_b 10 1.295 20 1.63697662077346 30 3.0 11 2.1475 21 3.0 31 2.1475 12 1.295 22 1.705 32 3.0 13 1.295 23 1.705 33 3.0 70 3 0 3DFACE 8 taser_b 10 1.295 20 1.705 30 3.0 11 2.1475 21 3.0 31 2.1475 12 1.295 22 1.80680418134643 32 3.0 13 1.295 23 1.80680418134643 33 3.0 70 3 0 3DFACE 8 taser_b 10 1.295 20 1.80680418134643 30 3.0 11 2.1475 21 3.0 31 2.1475 12 1.295 22 1.99491378028649 32 3.0 13 1.295 23 1.99491378028649 33 3.0 70 3 0 3DFACE 8 taser_b 10 1.295 20 1.99491378028649 30 3.0 11 2.1475 21 3.0 31 2.1475 12 1.295 22 2.2311863483779 32 3.0 13 1.295 23 2.2311863483779 33 3.0 70 3 0 3DFACE 8 taser_b 10 1.295 20 2.2311863483779 30 3.0 11 2.1475 21 3.0 31 2.1475 12 1.295 22 2.5306045958858 32 3.0 13 1.295 23 2.5306045958858 33 3.0 70 3 0 3DFACE 8 taser_b 10 1.295 20 2.5306045958858 30 3.0 11 2.1475 21 3.0 31 2.1475 12 1.295 22 3.0 32 3.0 13 1.295 23 3.0 33 3.0 70 3 0 3DFACE 8 taser_b 10 1.295 20 3.0 30 3.0 11 2.1475 21 3.0 31 2.1475 12 1.5 22 3.0 32 2.795 13 1.5 23 3.0 33 2.795 70 1 0 3DFACE 8 taser_b 10 1.5 20 3.0 30 1.5 11 1.5 21 1.5 31 1.81219074811907 12 1.5 22 1.5 32 1.5 13 1.5 23 1.5 33 1.5 70 1 0 3DFACE 8 taser_b 10 1.5 20 1.5 30 1.81219074811907 11 1.5 21 3.0 31 1.5 12 1.5 22 3.0 32 1.81219074811907 13 1.5 23 3.0 33 1.81219074811907 70 1 0 3DFACE 8 taser_b 10 1.60791666666667 20 3.0 30 1.97984537405954 11 1.50885609734932 21 3.0 31 1.81237448605758 12 1.5 22 3.0 32 1.81219074811907 13 1.5 23 3.0 33 1.81219074811907 70 1 0 3DFACE 8 taser_b 10 1.70501413192602 20 3.0 30 1.73585049440402 11 1.60791666666667 21 3.0 31 1.97984537405954 12 1.71583333333333 22 3.0 32 1.72547110140021 13 1.71583333333333 23 3.0 33 1.72547110140021 70 1 0 3DFACE 8 taser_b 10 1.60791666666667 20 3.0 30 1.97984537405954 11 1.70501413192602 21 3.0 31 1.73585049440402 12 1.68090954183794 22 3.0 32 1.7548097087475 13 1.68090954183794 23 3.0 33 1.7548097087475 70 13 0 3DFACE 8 taser_b 10 1.60791666666667 20 3.0 30 1.97984537405954 11 1.68090954183794 21 3.0 31 1.7548097087475 12 1.65506269396675 22 3.0 32 1.77131496630259 13 1.65506269396675 23 3.0 33 1.77131496630259 70 13 0 3DFACE 8 taser_b 10 1.60791666666667 20 3.0 30 1.97984537405954 11 1.65506269396675 21 3.0 31 1.77131496630259 12 1.62772250758676 22 3.0 32 1.78520731241634 13 1.62772250758676 23 3.0 33 1.78520731241634 70 13 0 3DFACE 8 taser_b 10 1.60791666666667 20 3.0 30 1.97984537405954 11 1.62772250758676 21 3.0 31 1.78520731241634 12 1.59915228363849 22 3.0 32 1.79635295620134 13 1.59915228363849 23 3.0 33 1.79635295620134 70 13 0 3DFACE 8 taser_b 10 1.60791666666667 20 3.0 30 1.97984537405954 11 1.59915228363849 21 3.0 31 1.79635295620134 12 1.56962716899663 22 3.0 32 1.80464455901512 13 1.56962716899663 23 3.0 33 1.80464455901512 70 13 0 3DFACE 8 taser_b 10 1.60791666666667 20 3.0 30 1.97984537405954 11 1.56962716899663 21 3.0 31 1.80464455901512 12 1.53943150665524 22 3.0 32 1.81000226818992 13 1.53943150665524 23 3.0 33 1.81000226818992 70 13 0 3DFACE 8 taser_b 10 1.60791666666667 20 3.0 30 1.97984537405954 11 1.53943150665524 21 3.0 31 1.81000226818992 12 1.50885609734932 22 3.0 32 1.81237448605758 13 1.50885609734932 23 3.0 33 1.81237448605758 70 13 0 3DFACE 8 taser_b 10 1.5 20 1.5 30 1.81219074811907 11 1.0625 21 1.5 31 1.5 12 1.5 22 1.5 32 1.5 13 1.5 23 1.5 33 1.5 70 1 0 3DFACE 8 taser_b 10 1.0625 20 1.5 30 1.5 11 1.5 21 1.5 31 1.81219074811907 12 1.0625 22 1.5 32 1.759 13 1.0625 23 1.5 33 1.759 70 1 0 3DFACE 8 taser_b 10 0.0 20 1.5 30 2.795 11 0.0 21 1.5 31 2.277 12 0.53125 22 1.5 32 2.277 13 0.53125 23 1.5 33 2.277 70 0 0 3DFACE 8 taser_b 10 0.0 20 1.5 30 2.795 11 0.53125 21 1.5 31 2.277 12 0.777 22 1.5 32 2.795 13 0.777 23 1.5 33 2.795 70 0 0 3DFACE 8 taser_b 10 0.777 20 1.5 30 2.795 11 0.53125 21 1.5 31 2.018 12 0.796875 22 1.5 32 2.018 13 0.796875 23 1.5 33 2.018 70 1 0 3DFACE 8 taser_b 10 0.53125 20 1.5 30 2.018 11 0.777 21 1.5 31 2.795 12 0.53125 22 1.5 32 2.277 13 0.53125 23 1.5 33 2.277 70 1 0 3DFACE 8 taser_b 10 1.71583333333333 20 1.5 30 2.1475 11 2.1475 21 1.5 31 1.71583333333333 12 2.1475 22 1.5 32 2.1475 13 2.1475 23 1.5 33 2.1475 70 0 0 3DFACE 8 taser_b 10 1.295 20 1.5 30 3.0 11 1.71583333333333 21 1.5 31 2.1475 12 2.1475 22 1.5 32 2.1475 13 2.1475 23 1.5 33 2.1475 70 0 0 3DFACE 8 taser_b 10 1.295 20 1.5 30 3.0 11 0.777 21 1.5 31 2.795 12 1.71583333333333 22 1.5 32 2.1475 13 1.71583333333333 23 1.5 33 2.1475 70 1 0 3DFACE 8 taser_b 10 0.777 20 1.5 30 2.795 11 1.295 21 1.5 31 3.0 12 0.777 22 1.5 32 3.0 13 0.777 23 1.5 33 3.0 70 1 0 3DFACE 8 taser_b 10 1.71583333333333 20 1.5 30 2.1475 11 0.796875 21 1.5 31 2.018 12 0.796875 22 1.5 32 1.759 13 0.796875 23 1.5 33 1.759 70 1 0 3DFACE 8 taser_b 10 0.796875 20 1.5 30 2.018 11 1.71583333333333 21 1.5 31 2.1475 12 0.777 22 1.5 32 2.795 13 0.777 23 1.5 33 2.795 70 1 0 3DFACE 8 taser_b 10 1.5 20 1.5 30 1.81219074811907 11 0.796875 21 1.5 31 1.759 12 1.0625 22 1.5 32 1.759 13 1.0625 23 1.5 33 1.759 70 1 0 3DFACE 8 taser_b 10 0.796875 20 1.5 30 1.759 11 1.5 21 1.5 31 1.81219074811907 12 1.71583333333333 22 1.5 32 2.1475 13 1.71583333333333 23 1.5 33 2.1475 70 1 0 3DFACE 8 taser_b 10 0.0 20 1.5 30 0.723 11 0.0 21 1.5 31 0.205 12 0.53125 22 1.5 32 0.723 13 0.53125 23 1.5 33 0.723 70 0 0 3DFACE 8 taser_b 10 0.53125 20 1.5 30 0.723 11 0.0 21 1.5 31 0.205 12 0.776999999999999 22 1.5 32 0.205 13 0.776999999999999 23 1.5 33 0.205 70 0 0 3DFACE 8 taser_b 10 0.796875 20 1.5 30 0.982 11 0.53125 21 1.5 31 0.723 12 0.776999999999999 22 1.5 32 0.205 13 0.776999999999999 23 1.5 33 0.205 70 1 0 3DFACE 8 taser_b 10 0.53125 20 1.5 30 0.723 11 0.796875 21 1.5 31 0.982 12 0.53125 22 1.5 32 0.982 13 0.53125 23 1.5 33 0.982 70 1 0 3DFACE 8 taser_b 10 2.1475 20 1.5 30 1.28416666666667 11 1.71583333333333 21 1.5 31 0.8525 12 2.1475 22 1.5 32 0.8525 13 2.1475 23 1.5 33 0.8525 70 0 0 3DFACE 8 taser_b 10 1.71583333333333 20 1.5 30 0.8525 11 1.295 21 1.5 31 1.52655665885959e-16 12 2.1475 22 1.5 32 0.8525 13 2.1475 23 1.5 33 0.8525 70 0 0 3DFACE 8 taser_b 10 1.71583333333333 20 1.5 30 0.8525 11 0.776999999999999 21 1.5 31 8.88178419700126e-17 12 1.295 22 1.5 32 1.52655665885959e-16 13 1.295 23 1.5 33 1.52655665885959e-16 70 0 0 3DFACE 8 taser_b 10 1.71583333333333 20 1.5 30 0.8525 11 0.776999999999999 21 1.5 31 0.205 12 0.776999999999999 22 1.5 32 8.88178419700126e-17 13 0.776999999999999 23 1.5 33 8.88178419700126e-17 70 1 0 3DFACE 8 taser_b 10 0.776999999999999 20 1.5 30 0.205 11 1.71583333333333 21 1.5 31 0.8525 12 0.796875 22 1.5 32 0.982 13 0.796875 23 1.5 33 0.982 70 3 0 3DFACE 8 taser_b 10 0.796875 20 1.5 30 0.982 11 1.71583333333333 21 1.5 31 0.8525 12 0.796875 22 1.5 32 1.241 13 0.796875 23 1.5 33 1.241 70 1 0 3DFACE 8 taser_b 10 1.5 20 1.5 30 1.18780925188093 11 0.796875 21 1.5 31 1.241 12 1.71583333333333 22 1.5 32 0.8525 13 1.71583333333333 23 1.5 33 0.8525 70 1 0 3DFACE 8 taser_b 10 0.796875 20 1.5 30 1.241 11 1.5 21 1.5 31 1.18780925188093 12 1.0625 22 1.5 32 1.241 13 1.0625 23 1.5 33 1.241 70 1 0 3DFACE 8 taser_b 10 1.71583333333333 20 3.0 30 1.72547110140021 11 1.71583333333333 21 1.5 31 2.1475 12 1.71583333333333 22 1.5 32 1.72547110140021 13 1.71583333333333 23 1.5 33 1.72547110140021 70 1 0 3DFACE 8 taser_b 10 1.71583333333333 20 1.5 30 2.1475 11 1.71583333333333 21 3.0 31 1.72547110140021 12 1.71583333333333 22 3.0 32 2.1475 13 1.71583333333333 23 3.0 33 2.1475 70 1 0 3DFACE 8 taser_b 10 1.50885609734932 20 3.0 30 1.81237448605758 11 1.5 21 1.5 31 1.81219074811907 12 1.5 22 3.0 32 1.81219074811907 13 1.5 23 3.0 33 1.81219074811907 70 1 0 3DFACE 8 taser_b 10 1.5 20 1.5 30 1.81219074811907 11 1.50885609734932 21 3.0 31 1.81237448605758 12 1.50885609734932 22 1.5 32 1.81237448605758 13 1.50885609734932 23 1.5 33 1.81237448605758 70 1 0 3DFACE 8 taser_b 10 1.71583333333333 20 3.0 30 1.72547110140021 11 1.70501413192602 21 1.5 31 1.73585049440402 12 1.70501413192602 22 3.0 32 1.73585049440402 13 1.70501413192602 23 3.0 33 1.73585049440402 70 1 0 3DFACE 8 taser_b 10 1.70501413192602 20 1.5 30 1.73585049440402 11 1.71583333333333 21 3.0 31 1.72547110140021 12 1.71583333333333 22 1.5 32 1.72547110140021 13 1.71583333333333 23 1.5 33 1.72547110140021 70 1 0 3DFACE 8 taser_b 10 1.70501413192602 20 3.0 30 1.73585049440402 11 1.68090954183794 21 1.5 31 1.7548097087475 12 1.68090954183794 22 3.0 32 1.7548097087475 13 1.68090954183794 23 3.0 33 1.7548097087475 70 1 0 3DFACE 8 taser_b 10 1.68090954183794 20 1.5 30 1.7548097087475 11 1.70501413192602 21 3.0 31 1.73585049440402 12 1.70501413192602 22 1.5 32 1.73585049440402 13 1.70501413192602 23 1.5 33 1.73585049440402 70 1 0 3DFACE 8 taser_b 10 1.68090954183794 20 3.0 30 1.7548097087475 11 1.65506269396675 21 1.5 31 1.77131496630259 12 1.65506269396675 22 3.0 32 1.77131496630259 13 1.65506269396675 23 3.0 33 1.77131496630259 70 1 0 3DFACE 8 taser_b 10 1.65506269396675 20 1.5 30 1.77131496630259 11 1.68090954183794 21 3.0 31 1.7548097087475 12 1.68090954183794 22 1.5 32 1.7548097087475 13 1.68090954183794 23 1.5 33 1.7548097087475 70 1 0 3DFACE 8 taser_b 10 1.65506269396675 20 3.0 30 1.77131496630259 11 1.62772250758676 21 1.5 31 1.78520731241634 12 1.62772250758676 22 3.0 32 1.78520731241634 13 1.62772250758676 23 3.0 33 1.78520731241634 70 1 0 3DFACE 8 taser_b 10 1.62772250758676 20 1.5 30 1.78520731241634 11 1.65506269396675 21 3.0 31 1.77131496630259 12 1.65506269396675 22 1.5 32 1.77131496630259 13 1.65506269396675 23 1.5 33 1.77131496630259 70 1 0 3DFACE 8 taser_b 10 1.62772250758676 20 3.0 30 1.78520731241634 11 1.59915228363849 21 1.5 31 1.79635295620134 12 1.59915228363849 22 3.0 32 1.79635295620134 13 1.59915228363849 23 3.0 33 1.79635295620134 70 1 0 3DFACE 8 taser_b 10 1.59915228363849 20 1.5 30 1.79635295620134 11 1.62772250758676 21 3.0 31 1.78520731241634 12 1.62772250758676 22 1.5 32 1.78520731241634 13 1.62772250758676 23 1.5 33 1.78520731241634 70 1 0 3DFACE 8 taser_b 10 1.59915228363849 20 3.0 30 1.79635295620134 11 1.56962716899663 21 1.5 31 1.80464455901512 12 1.56962716899663 22 3.0 32 1.80464455901512 13 1.56962716899663 23 3.0 33 1.80464455901512 70 1 0 3DFACE 8 taser_b 10 1.56962716899663 20 1.5 30 1.80464455901512 11 1.59915228363849 21 3.0 31 1.79635295620134 12 1.59915228363849 22 1.5 32 1.79635295620134 13 1.59915228363849 23 1.5 33 1.79635295620134 70 1 0 3DFACE 8 taser_b 10 1.56962716899663 20 3.0 30 1.80464455901512 11 1.53943150665524 21 1.5 31 1.81000226818992 12 1.53943150665524 22 3.0 32 1.81000226818992 13 1.53943150665524 23 3.0 33 1.81000226818992 70 1 0 3DFACE 8 taser_b 10 1.53943150665524 20 1.5 30 1.81000226818992 11 1.56962716899663 21 3.0 31 1.80464455901512 12 1.56962716899663 22 1.5 32 1.80464455901512 13 1.56962716899663 23 1.5 33 1.80464455901512 70 1 0 3DFACE 8 taser_b 10 1.53943150665524 20 3.0 30 1.81000226818992 11 1.50885609734932 21 1.5 31 1.81237448605758 12 1.50885609734932 22 3.0 32 1.81237448605758 13 1.50885609734932 23 3.0 33 1.81237448605758 70 1 0 3DFACE 8 taser_b 10 1.50885609734932 20 1.5 30 1.81237448605758 11 1.53943150665524 21 3.0 31 1.81000226818992 12 1.53943150665524 22 1.5 32 1.81000226818992 13 1.53943150665524 23 1.5 33 1.81000226818992 70 1 0 3DFACE 8 taser_b 10 1.036 20 3.0 30 3.0 11 1.20163144893051 21 3.0 31 3.0 12 0.878679656440356 22 3.0 32 3.0 13 0.878679656440356 23 3.0 33 3.0 70 2 0 3DFACE 8 taser_b 10 0.777 20 3.0 30 2.795 11 1.295 21 3.0 31 3.0 12 1.5 22 3.0 32 2.795 13 1.5 23 3.0 33 2.795 70 1 0 3DFACE 8 taser_b 10 1.295 20 3.0 30 3.0 11 0.777 21 3.0 31 2.795 12 0.777 22 3.0 32 3.0 13 0.777 23 3.0 33 3.0 70 13 0 3DFACE 8 taser_b 10 1.295 20 3.0 30 3.0 11 0.777 21 3.0 31 3.0 12 0.878679656440356 22 3.0 32 3.0 13 0.878679656440356 23 3.0 33 3.0 70 13 0 3DFACE 8 taser_b 10 1.295 20 3.0 30 3.0 11 0.878679656440356 21 3.0 31 3.0 12 1.20163144893051 22 3.0 32 3.0 13 1.20163144893051 23 3.0 33 3.0 70 3 0 3DFACE 8 taser_b 10 1.5 20 3.0 30 1.81219074811907 11 1.71583333333333 21 1.5 31 2.1475 12 1.5 22 1.5 32 1.81219074811907 13 1.5 23 1.5 33 1.81219074811907 70 1 0 3DFACE 8 taser_b 10 1.71583333333333 20 1.5 30 2.1475 11 1.5 21 3.0 31 1.81219074811907 12 1.71583333333333 22 3.0 32 2.1475 13 1.71583333333333 23 3.0 33 2.1475 70 3 0 3DFACE 8 taser_b 10 1.71583333333333 20 3.0 30 2.1475 11 1.5 21 3.0 31 1.81219074811907 12 1.60791666666667 22 3.0 32 1.97984537405954 13 1.60791666666667 23 3.0 33 1.97984537405954 70 1 0 3DFACE 8 taser_b 10 1.60791666666667 20 3.0 30 1.02015462594046 11 1.69132242027198 21 3.0 31 1.25291300823137 12 1.71461991087043 22 3.0 32 1.27285567614847 13 1.71461991087043 23 3.0 33 1.27285567614847 70 1 0 3DFACE 8 taser_b 10 1.69132242027198 20 3.0 30 1.25291300823137 11 1.60791666666667 21 3.0 31 1.02015462594046 12 1.66618239017884 22 3.0 32 1.23534992311649 13 1.66618239017884 23 3.0 33 1.23534992311649 70 3 0 3DFACE 8 taser_b 10 1.66618239017884 20 3.0 30 1.23534992311649 11 1.60791666666667 21 3.0 31 1.02015462594046 12 1.63944193282374 22 3.0 32 1.22033556291445 13 1.63944193282374 23 3.0 33 1.22033556291445 70 3 0 3DFACE 8 taser_b 10 1.63944193282374 20 3.0 30 1.22033556291445 11 1.60791666666667 21 3.0 31 1.02015462594046 12 1.61135857342883 22 3.0 32 1.20801452412167 13 1.61135857342883 23 3.0 33 1.20801452412167 70 3 0 3DFACE 8 taser_b 10 1.61135857342883 20 3.0 30 1.20801452412167 11 1.60791666666667 21 3.0 31 1.02015462594046 12 1.58220277009702 22 3.0 32 1.1985054650771 13 1.58220277009702 23 3.0 33 1.1985054650771 70 3 0 3DFACE 8 taser_b 10 1.58220277009702 20 3.0 30 1.1985054650771 11 1.60791666666667 21 3.0 31 1.02015462594046 12 1.55225530915257 22 3.0 32 1.19189996321751 13 1.55225530915257 23 3.0 33 1.19189996321751 70 3 0 3DFACE 8 taser_b 10 1.55225530915257 20 3.0 30 1.19189996321751 11 1.60791666666667 21 3.0 31 1.02015462594046 12 1.52180460101532 22 3.0 32 1.18826163313676 13 1.52180460101532 23 3.0 33 1.18826163313676 70 3 0 3DFACE 8 taser_b 10 1.52180460101532 20 3.0 30 1.18826163313676 11 1.60791666666667 21 3.0 31 1.02015462594046 12 1.5 22 3.0 32 1.18780925188093 13 1.5 23 3.0 33 1.18780925188093 70 1 0 3DFACE 8 taser_b 10 1.71583333333333 20 3.0 30 0.8525 11 1.5 21 1.5 31 1.18780925188093 12 1.71583333333333 22 1.5 32 0.8525 13 1.71583333333333 23 1.5 33 0.8525 70 1 0 3DFACE 8 taser_b 10 1.5 20 1.5 30 1.18780925188093 11 1.71583333333333 21 3.0 31 0.8525 12 1.5 22 3.0 32 1.18780925188093 13 1.5 23 3.0 33 1.18780925188093 70 3 0 3DFACE 8 taser_b 10 1.5 20 3.0 30 1.18780925188093 11 1.71583333333333 21 3.0 31 0.8525 12 1.60791666666667 22 3.0 32 1.02015462594046 13 1.60791666666667 23 3.0 33 1.02015462594046 70 1 0 3DFACE 8 taser_b 10 1.71583333333333 20 3.0 30 0.8525 11 1.71583333333333 21 1.5 31 1.27412051524007 12 1.71583333333333 22 1.5 32 0.8525 13 1.71583333333333 23 1.5 33 0.8525 70 1 0 3DFACE 8 taser_b 10 1.71583333333333 20 1.5 30 1.27412051524007 11 1.71583333333333 21 3.0 31 0.8525 12 1.71583333333333 22 3.0 32 1.27412051524007 13 1.71583333333333 23 3.0 33 1.27412051524007 70 1 0 3DFACE 8 taser_b 10 1.52180460101532 20 1.5 30 1.18826163313676 11 1.5 21 3.0 31 1.18780925188093 12 1.5 22 1.5 32 1.18780925188093 13 1.5 23 1.5 33 1.18780925188093 70 1 0 3DFACE 8 taser_b 10 1.5 20 3.0 30 1.18780925188093 11 1.52180460101532 21 1.5 31 1.18826163313676 12 1.52180460101532 22 3.0 32 1.18826163313676 13 1.52180460101532 23 3.0 33 1.18826163313676 70 1 0 3DFACE 8 taser_b 10 1.55225530915257 20 1.5 30 1.19189996321751 11 1.52180460101532 21 3.0 31 1.18826163313676 12 1.52180460101532 22 1.5 32 1.18826163313676 13 1.52180460101532 23 1.5 33 1.18826163313676 70 1 0 3DFACE 8 taser_b 10 1.52180460101532 20 3.0 30 1.18826163313676 11 1.55225530915257 21 1.5 31 1.19189996321751 12 1.55225530915257 22 3.0 32 1.19189996321751 13 1.55225530915257 23 3.0 33 1.19189996321751 70 1 0 3DFACE 8 taser_b 10 1.58220277009702 20 1.5 30 1.1985054650771 11 1.55225530915257 21 3.0 31 1.19189996321751 12 1.55225530915257 22 1.5 32 1.19189996321751 13 1.55225530915257 23 1.5 33 1.19189996321751 70 1 0 3DFACE 8 taser_b 10 1.55225530915257 20 3.0 30 1.19189996321751 11 1.58220277009702 21 1.5 31 1.1985054650771 12 1.58220277009702 22 3.0 32 1.1985054650771 13 1.58220277009702 23 3.0 33 1.1985054650771 70 1 0 3DFACE 8 taser_b 10 1.61135857342883 20 1.5 30 1.20801452412167 11 1.58220277009702 21 3.0 31 1.1985054650771 12 1.58220277009702 22 1.5 32 1.1985054650771 13 1.58220277009702 23 1.5 33 1.1985054650771 70 1 0 3DFACE 8 taser_b 10 1.58220277009702 20 3.0 30 1.1985054650771 11 1.61135857342883 21 1.5 31 1.20801452412167 12 1.61135857342883 22 3.0 32 1.20801452412167 13 1.61135857342883 23 3.0 33 1.20801452412167 70 1 0 3DFACE 8 taser_b 10 1.63944193282374 20 1.5 30 1.22033556291445 11 1.61135857342883 21 3.0 31 1.20801452412167 12 1.61135857342883 22 1.5 32 1.20801452412167 13 1.61135857342883 23 1.5 33 1.20801452412167 70 1 0 3DFACE 8 taser_b 10 1.61135857342883 20 3.0 30 1.20801452412167 11 1.63944193282374 21 1.5 31 1.22033556291445 12 1.63944193282374 22 3.0 32 1.22033556291445 13 1.63944193282374 23 3.0 33 1.22033556291445 70 1 0 3DFACE 8 taser_b 10 1.66618239017884 20 1.5 30 1.23534992311649 11 1.63944193282374 21 3.0 31 1.22033556291445 12 1.63944193282374 22 1.5 32 1.22033556291445 13 1.63944193282374 23 1.5 33 1.22033556291445 70 1 0 3DFACE 8 taser_b 10 1.63944193282374 20 3.0 30 1.22033556291445 11 1.66618239017884 21 1.5 31 1.23534992311649 12 1.66618239017884 22 3.0 32 1.23534992311649 13 1.66618239017884 23 3.0 33 1.23534992311649 70 1 0 3DFACE 8 taser_b 10 1.69132242027198 20 1.5 30 1.25291300823137 11 1.66618239017884 21 3.0 31 1.23534992311649 12 1.66618239017884 22 1.5 32 1.23534992311649 13 1.66618239017884 23 1.5 33 1.23534992311649 70 1 0 3DFACE 8 taser_b 10 1.66618239017884 20 3.0 30 1.23534992311649 11 1.69132242027198 21 1.5 31 1.25291300823137 12 1.69132242027198 22 3.0 32 1.25291300823137 13 1.69132242027198 23 3.0 33 1.25291300823137 70 1 0 3DFACE 8 taser_b 10 1.71461991087043 20 1.5 30 1.27285567614847 11 1.69132242027198 21 3.0 31 1.25291300823137 12 1.69132242027198 22 1.5 32 1.25291300823137 13 1.69132242027198 23 1.5 33 1.25291300823137 70 1 0 3DFACE 8 taser_b 10 1.69132242027198 20 3.0 30 1.25291300823137 11 1.71461991087043 21 1.5 31 1.27285567614847 12 1.71461991087043 22 3.0 32 1.27285567614847 13 1.71461991087043 23 3.0 33 1.27285567614847 70 1 0 3DFACE 8 taser_b 10 1.71583333333333 20 3.0 30 1.27412051524007 11 1.71461991087043 21 1.5 31 1.27285567614847 12 1.71583333333333 22 1.5 32 1.27412051524007 13 1.71583333333333 23 1.5 33 1.27412051524007 70 1 0 3DFACE 8 taser_b 10 1.71461991087043 20 1.5 30 1.27285567614847 11 1.71583333333333 21 3.0 31 1.27412051524007 12 1.71461991087043 22 3.0 32 1.27285567614847 13 1.71461991087043 23 3.0 33 1.27285567614847 70 1 0 3DFACE 8 taser_b 10 1.71583333333333 20 1.5 30 2.1475 11 1.70501413192602 21 1.5 31 1.73585049440402 12 1.71583333333333 22 1.5 32 1.72547110140021 13 1.71583333333333 23 1.5 33 1.72547110140021 70 1 0 3DFACE 8 taser_b 10 1.70501413192602 20 1.5 30 1.73585049440402 11 1.71583333333333 21 1.5 31 2.1475 12 1.68090954183794 22 1.5 32 1.7548097087475 13 1.68090954183794 23 1.5 33 1.7548097087475 70 3 0 3DFACE 8 taser_b 10 1.68090954183794 20 1.5 30 1.7548097087475 11 1.71583333333333 21 1.5 31 2.1475 12 1.65506269396675 22 1.5 32 1.77131496630259 13 1.65506269396675 23 1.5 33 1.77131496630259 70 3 0 3DFACE 8 taser_b 10 1.65506269396675 20 1.5 30 1.77131496630259 11 1.71583333333333 21 1.5 31 2.1475 12 1.62772250758676 22 1.5 32 1.78520731241634 13 1.62772250758676 23 1.5 33 1.78520731241634 70 3 0 3DFACE 8 taser_b 10 1.62772250758676 20 1.5 30 1.78520731241634 11 1.71583333333333 21 1.5 31 2.1475 12 1.59915228363849 22 1.5 32 1.79635295620134 13 1.59915228363849 23 1.5 33 1.79635295620134 70 3 0 3DFACE 8 taser_b 10 1.59915228363849 20 1.5 30 1.79635295620134 11 1.71583333333333 21 1.5 31 2.1475 12 1.56962716899663 22 1.5 32 1.80464455901512 13 1.56962716899663 23 1.5 33 1.80464455901512 70 3 0 3DFACE 8 taser_b 10 1.56962716899663 20 1.5 30 1.80464455901512 11 1.71583333333333 21 1.5 31 2.1475 12 1.53943150665524 22 1.5 32 1.81000226818992 13 1.53943150665524 23 1.5 33 1.81000226818992 70 3 0 3DFACE 8 taser_b 10 1.53943150665524 20 1.5 30 1.81000226818992 11 1.71583333333333 21 1.5 31 2.1475 12 1.50885609734932 22 1.5 32 1.81237448605758 13 1.50885609734932 23 1.5 33 1.81237448605758 70 3 0 3DFACE 8 taser_b 10 1.71583333333333 20 1.5 30 2.1475 11 1.5 21 1.5 31 1.81219074811907 12 1.50885609734932 22 1.5 32 1.81237448605758 13 1.50885609734932 23 1.5 33 1.81237448605758 70 12 0 3DFACE 8 taser_b 10 1.71583333333333 20 1.5 30 0.8525 11 1.52180460101532 21 1.5 31 1.18826163313676 12 1.5 22 1.5 32 1.18780925188093 13 1.5 23 1.5 33 1.18780925188093 70 1 0 3DFACE 8 taser_b 10 1.52180460101532 20 1.5 30 1.18826163313676 11 1.71583333333333 21 1.5 31 0.8525 12 1.55225530915257 22 1.5 32 1.19189996321751 13 1.55225530915257 23 1.5 33 1.19189996321751 70 3 0 3DFACE 8 taser_b 10 1.55225530915257 20 1.5 30 1.19189996321751 11 1.71583333333333 21 1.5 31 0.8525 12 1.58220277009702 22 1.5 32 1.1985054650771 13 1.58220277009702 23 1.5 33 1.1985054650771 70 3 0 3DFACE 8 taser_b 10 1.58220277009702 20 1.5 30 1.1985054650771 11 1.71583333333333 21 1.5 31 0.8525 12 1.61135857342883 22 1.5 32 1.20801452412167 13 1.61135857342883 23 1.5 33 1.20801452412167 70 3 0 3DFACE 8 taser_b 10 1.61135857342883 20 1.5 30 1.20801452412167 11 1.71583333333333 21 1.5 31 0.8525 12 1.63944193282374 22 1.5 32 1.22033556291445 13 1.63944193282374 23 1.5 33 1.22033556291445 70 3 0 3DFACE 8 taser_b 10 1.63944193282374 20 1.5 30 1.22033556291445 11 1.71583333333333 21 1.5 31 0.8525 12 1.66618239017884 22 1.5 32 1.23534992311649 13 1.66618239017884 23 1.5 33 1.23534992311649 70 3 0 3DFACE 8 taser_b 10 1.66618239017884 20 1.5 30 1.23534992311649 11 1.71583333333333 21 1.5 31 0.8525 12 1.69132242027198 22 1.5 32 1.25291300823137 13 1.69132242027198 23 1.5 33 1.25291300823137 70 3 0 3DFACE 8 taser_b 10 1.69132242027198 20 1.5 30 1.25291300823137 11 1.71583333333333 21 1.5 31 0.8525 12 1.71461991087043 22 1.5 32 1.27285567614847 13 1.71461991087043 23 1.5 33 1.27285567614847 70 3 0 3DFACE 8 taser_b 10 1.71461991087043 20 1.5 30 1.27285567614847 11 1.71583333333333 21 1.5 31 0.8525 12 1.71583333333333 22 1.5 32 1.27412051524007 13 1.71583333333333 23 1.5 33 1.27412051524007 70 1 0 3DFACE 8 taser_b 10 0.0 20 3.0 30 2.536 11 0.205000000000001 21 3.0 31 2.277 12 0.0 22 3.0 32 2.277 13 0.0 23 3.0 33 2.277 70 1 0 3DFACE 8 taser_b 10 0.205000000000001 20 3.0 30 2.277 11 0.0 21 3.0 31 2.536 12 0.205000000000001 22 3.0 32 2.795 13 0.205000000000001 23 3.0 33 2.795 70 3 0 3DFACE 8 taser_b 10 0.205000000000001 20 3.0 30 2.795 11 0.0 21 3.0 31 2.536 12 0.0 22 3.0 32 2.795 13 0.0 23 3.0 33 2.795 70 1 0 3DFACE 8 taser_b 10 0.0 20 3.0 30 0.464 11 0.205000000000001 21 3.0 31 0.205000000000001 12 0.0 22 3.0 32 0.205 13 0.0 23 3.0 33 0.205 70 1 0 3DFACE 8 taser_b 10 0.205000000000001 20 3.0 30 0.205000000000001 11 0.0 21 3.0 31 0.464 12 0.205 22 3.0 32 0.723 13 0.205 23 3.0 33 0.723 70 3 0 3DFACE 8 taser_b 10 0.205 20 3.0 30 0.723 11 0.0 21 3.0 31 0.464 12 0.0 22 3.0 32 0.723 13 0.0 23 3.0 33 0.723 70 1 0 3DFACE 8 taser_b 10 0.776999999999999 20 3.0 30 8.88178419700126e-17 11 1.20163144893051 21 3.0 31 0.0 12 0.878679656440356 22 3.0 32 0.0 13 0.878679656440356 23 3.0 33 0.0 70 1 0 3DFACE 8 taser_b 10 1.20163144893051 20 3.0 30 0.0 11 0.776999999999999 21 3.0 31 8.88178419700126e-17 12 1.295 22 3.0 32 0.0 13 1.295 23 3.0 33 0.0 70 3 0 3DFACE 8 taser_b 10 1.295 20 3.0 30 0.0 11 0.776999999999999 21 3.0 31 8.88178419700126e-17 12 1.5 22 3.0 32 0.205000000000001 13 1.5 23 3.0 33 0.205000000000001 70 3 0 3DFACE 8 taser_b 10 1.5 20 3.0 30 0.205000000000001 11 0.776999999999999 21 3.0 31 8.88178419700126e-17 12 0.776999999999999 22 3.0 32 0.205 13 0.776999999999999 23 3.0 33 0.205 70 1 0 3DFACE 8 taser_b 10 2.1475 20 3.0 30 2.1475 11 2.1475 21 3.0 31 1.71583333333333 12 1.71583333333333 22 3.0 32 2.1475 13 1.71583333333333 23 3.0 33 2.1475 70 0 0 3DFACE 8 taser_b 10 0.205000000000001 20 3.0 30 2.795 11 0.53125 21 3.0 31 2.277 12 0.205000000000001 22 3.0 32 2.277 13 0.205000000000001 23 3.0 33 2.277 70 1 0 3DFACE 8 taser_b 10 0.53125 20 3.0 30 2.277 11 0.205000000000001 21 3.0 31 2.795 12 0.777 22 3.0 32 2.795 13 0.777 23 3.0 33 2.795 70 1 0 3DFACE 8 taser_b 10 0.53125 20 3.0 30 0.723 11 1.5 21 3.0 31 0.205000000000001 12 0.776999999999999 22 3.0 32 0.205 13 0.776999999999999 23 3.0 33 0.205 70 1 0 3DFACE 8 taser_b 10 1.5 20 3.0 30 0.205000000000001 11 0.53125 21 3.0 31 0.723 12 0.723000000000001 22 3.0 32 0.982 13 0.723000000000001 23 3.0 33 0.982 70 3 0 3DFACE 8 taser_b 10 0.723000000000001 20 3.0 30 0.982 11 0.53125 21 3.0 31 0.723 12 0.53125 22 3.0 32 0.982 13 0.53125 23 3.0 33 0.982 70 1 0 3DFACE 8 taser_b 10 1.0625 20 3.0 30 1.241 11 1.5 21 3.0 31 1.5 12 1.5 22 3.0 32 1.18780925188093 13 1.5 23 3.0 33 1.18780925188093 70 1 0 3DFACE 8 taser_b 10 1.5 20 3.0 30 1.5 11 1.0625 21 3.0 31 1.241 12 1.0625 22 3.0 32 1.5 13 1.0625 23 3.0 33 1.5 70 1 0 3DFACE 8 taser_b 10 1.5 20 3.0 30 1.18780925188093 11 1.71583333333333 21 3.0 31 0.8525 12 1.5 22 3.0 32 0.205000000000001 13 1.5 23 3.0 33 0.205000000000001 70 1 0 3DFACE 8 taser_b 10 1.71583333333333 20 3.0 30 0.8525 11 1.5 21 3.0 31 1.18780925188093 12 1.60791666666667 22 3.0 32 1.02015462594046 13 1.60791666666667 23 3.0 33 1.02015462594046 70 1 0 3DFACE 8 taser_b 10 1.0625 20 3.0 30 1.5 11 1.5 21 3.0 31 1.81219074811907 12 1.5 22 3.0 32 1.5 13 1.5 23 3.0 33 1.5 70 1 0 3DFACE 8 taser_b 10 1.5 20 3.0 30 1.81219074811907 11 1.0625 21 3.0 31 1.5 12 1.0625 22 3.0 32 1.759 13 1.0625 23 3.0 33 1.759 70 1 0 3DFACE 8 taser_b 10 1.5 20 3.0 30 0.205000000000001 11 0.796875 21 3.0 31 0.982 12 0.796875 22 3.0 32 1.241 13 0.796875 23 3.0 33 1.241 70 1 0 3DFACE 8 taser_b 10 0.796875 20 3.0 30 0.982 11 1.5 21 3.0 31 0.205000000000001 12 0.723000000000001 22 3.0 32 0.982 13 0.723000000000001 23 3.0 33 0.982 70 1 0 3DFACE 8 taser_b 10 1.5 20 3.0 30 2.795 11 1.0625 21 3.0 31 1.759 12 0.796875 22 3.0 32 1.759 13 0.796875 23 3.0 33 1.759 70 1 0 3DFACE 8 taser_b 10 1.0625 20 3.0 30 1.759 11 1.5 21 3.0 31 2.795 12 1.5 22 3.0 32 1.81219074811907 13 1.5 23 3.0 33 1.81219074811907 70 1 0 3DFACE 8 taser_b 10 1.5 20 3.0 30 2.795 11 1.60791666666667 21 3.0 31 1.97984537405954 12 1.5 22 3.0 32 1.81219074811907 13 1.5 23 3.0 33 1.81219074811907 70 1 0 3DFACE 8 taser_b 10 1.60791666666667 20 3.0 30 1.97984537405954 11 1.5 21 3.0 31 2.795 12 1.71583333333333 22 3.0 32 2.1475 13 1.71583333333333 23 3.0 33 2.1475 70 1 0 3DFACE 8 taser_b 10 2.1475 20 3.0 30 0.8525 11 1.5 21 3.0 31 0.205000000000001 12 1.71583333333333 22 3.0 32 0.8525 13 1.71583333333333 23 3.0 33 0.8525 70 0 0 3DFACE 8 taser_b 10 2.1475 20 3.0 30 1.28416666666667 11 2.1475 21 3.0 31 0.8525 12 1.71583333333333 22 3.0 32 0.8525 13 1.71583333333333 23 3.0 33 0.8525 70 0 0 3DFACE 8 taser_b 10 2.1475 20 1.5 30 0.8525 11 1.71583333333333 21 3.0 31 0.8525 12 1.71583333333333 22 1.5 32 0.8525 13 1.71583333333333 23 1.5 33 0.8525 70 1 0 3DFACE 8 taser_b 10 1.71583333333333 20 3.0 30 0.8525 11 2.1475 21 1.5 31 0.8525 12 2.1475 22 3.0 32 0.8525 13 2.1475 23 3.0 33 0.8525 70 1 0 3DFACE 8 taser_b 10 1.5 20 3.0 30 2.795 11 2.1475 21 3.0 31 2.1475 12 1.71583333333333 22 3.0 32 2.1475 13 1.71583333333333 23 3.0 33 2.1475 70 0 0 3DFACE 8 taser_b 10 2.1475 20 3.0 30 2.1475 11 1.71583333333333 21 1.5 31 2.1475 12 1.71583333333333 22 3.0 32 2.1475 13 1.71583333333333 23 3.0 33 2.1475 70 1 0 3DFACE 8 taser_b 10 1.71583333333333 20 1.5 30 2.1475 11 2.1475 21 3.0 31 2.1475 12 2.1475 22 1.5 32 2.1475 13 2.1475 23 1.5 33 2.1475 70 1 0 3DFACE 8 taser_b 10 0.796875 20 3.0 30 1.241 11 1.5 21 3.0 31 1.18780925188093 12 1.5 22 3.0 32 0.205000000000001 13 1.5 23 3.0 33 0.205000000000001 70 1 0 3DFACE 8 taser_b 10 1.5 20 3.0 30 1.18780925188093 11 0.796875 21 3.0 31 1.241 12 1.0625 22 3.0 32 1.241 13 1.0625 23 3.0 33 1.241 70 1 0 3DFACE 8 taser_b 10 1.5 20 3.0 30 2.795 11 0.796875 21 3.0 31 2.018 12 0.723000000000001 22 3.0 32 2.018 13 0.723000000000001 23 3.0 33 2.018 70 1 0 3DFACE 8 taser_b 10 1.5 20 3.0 30 2.795 11 0.796875 21 3.0 31 1.759 12 0.796875 22 3.0 32 2.018 13 0.796875 23 3.0 33 2.018 70 12 0 3DFACE 8 taser_b 10 0.205000000000001 20 3.0 30 0.205000000000001 11 0.53125 21 3.0 31 0.723 12 0.776999999999999 22 3.0 32 0.205 13 0.776999999999999 23 3.0 33 0.205 70 1 0 3DFACE 8 taser_b 10 0.53125 20 3.0 30 0.723 11 0.205000000000001 21 3.0 31 0.205000000000001 12 0.205 22 3.0 32 0.723 13 0.205 23 3.0 33 0.723 70 1 0 3DFACE 8 taser_b 10 0.53125 20 3.0 30 0.723 11 0.776999999999999 21 1.5 31 0.205 12 0.53125 22 1.5 32 0.723 13 0.53125 23 1.5 33 0.723 70 1 0 3DFACE 8 taser_b 10 0.776999999999999 20 1.5 30 0.205 11 0.53125 21 3.0 31 0.723 12 0.776999999999999 22 3.0 32 0.205 13 0.776999999999999 23 3.0 33 0.205 70 1 0 3DFACE 8 taser_b 10 0.53125 20 3.0 30 2.277 11 0.723000000000001 21 3.0 31 2.018 12 0.53125 22 3.0 32 2.018 13 0.53125 23 3.0 33 2.018 70 1 0 3DFACE 8 taser_b 10 0.723000000000001 20 3.0 30 2.018 11 0.53125 21 3.0 31 2.277 12 1.5 22 3.0 32 2.795 13 1.5 23 3.0 33 2.795 70 3 0 3DFACE 8 taser_b 10 1.5 20 3.0 30 2.795 11 0.53125 21 3.0 31 2.277 12 0.777 22 3.0 32 2.795 13 0.777 23 3.0 33 2.795 70 1 0 3DFACE 8 taser_b 10 1.5 20 1.5 30 1.5 11 1.0625 21 1.5 31 1.241 12 1.5 22 1.5 32 1.18780925188093 13 1.5 23 1.5 33 1.18780925188093 70 1 0 3DFACE 8 taser_b 10 1.0625 20 1.5 30 1.241 11 1.5 21 1.5 31 1.5 12 1.0625 22 1.5 32 1.5 13 1.0625 23 1.5 33 1.5 70 1 0 3DFACE 8 taser_b 10 1.5 20 3.0 30 1.18780925188093 11 1.5 21 1.5 31 1.5 12 1.5 22 1.5 32 1.18780925188093 13 1.5 23 1.5 33 1.18780925188093 70 1 0 3DFACE 8 taser_b 10 1.5 20 1.5 30 1.5 11 1.5 21 3.0 31 1.18780925188093 12 1.5 22 3.0 32 1.5 13 1.5 23 3.0 33 1.5 70 1 0 3DFACE 8 taser_b 10 1.71583333333333 20 3.0 30 2.1475 11 1.71583333333333 21 3.0 31 1.72547110140021 12 1.60791666666667 22 3.0 32 1.97984537405954 13 1.60791666666667 23 3.0 33 1.97984537405954 70 0 0 3DFACE 8 taser_b 10 1.60791666666667 20 3.0 30 1.02015462594046 11 1.71583333333333 21 3.0 31 1.27412051524007 12 1.71583333333333 22 3.0 32 0.8525 13 1.71583333333333 23 3.0 33 0.8525 70 1 0 3DFACE 8 taser_b 10 1.71583333333333 20 3.0 30 1.27412051524007 11 1.60791666666667 21 3.0 31 1.02015462594046 12 1.71461991087043 22 3.0 32 1.27285567614847 13 1.71461991087043 23 3.0 33 1.27285567614847 70 1 0 3DFACE 8 taser_b 10 2.1475 20 3.0 30 1.28416666666667 11 1.71583333333333 21 1.5 31 0.8525 12 2.1475 22 1.5 32 1.28416666666667 13 2.1475 23 1.5 33 1.28416666666667 70 1 0 3DFACE 8 taser_b 10 1.71583333333333 20 1.5 30 0.8525 11 2.1475 21 3.0 31 1.28416666666667 12 1.71583333333333 22 3.0 32 0.8525 13 1.71583333333333 23 3.0 33 0.8525 70 1 0 3DFACE 8 pillar_base 10 3.0 20 0.205 30 0.205 11 3.0 21 0.0 31 0.0 12 3.0 22 0.205 32 0.0 13 3.0 23 0.205 33 0.0 70 0 0 3DFACE 8 pillar_base 10 0.74 20 1.5 30 3.0 11 0.0 21 1.79836855106949 31 3.0 12 0.0 22 1.5 32 3.0 13 0.0 23 1.5 33 3.0 70 1 0 3DFACE 8 pillar_base 10 0.0 20 1.79836855106949 30 3.0 11 0.74 21 1.5 31 3.0 12 0.743659607729131 22 1.57449302665047 32 3.0 13 0.743659607729131 23 1.57449302665047 33 3.0 70 13 0 3DFACE 8 pillar_base 10 0.0 20 1.79836855106949 30 3.0 11 0.743659607729131 21 1.57449302665047 31 3.0 12 0.754603186893545 22 1.64826864473226 32 3.0 13 0.754603186893545 23 1.64826864473226 33 3.0 70 1 0 3DFACE 8 pillar_base 10 0.0 20 3.0 30 3.0 11 0.0 21 2.795 31 2.795 12 0.0 22 2.795 32 3.0 13 0.0 23 2.795 33 3.0 70 0 0 3DFACE 8 pillar_base 10 2.795 20 0.0 30 0.205 11 3.0 21 0.0 31 0.0 12 3.0 22 0.0 32 0.205 13 3.0 23 0.0 33 0.205 70 0 0 3DFACE 8 pillar_base 10 0.205 20 3.0 30 0.205 11 0.497732043121052 21 3.0 31 0.0 12 0.205 22 3.0 32 0.0 13 0.205 23 3.0 33 0.0 70 1 0 3DFACE 8 pillar_base 10 0.497732043121052 20 3.0 30 0.0 11 0.205 21 3.0 31 0.205 12 0.878679656440357 22 3.0 32 0.0 13 0.878679656440357 23 3.0 33 0.0 70 3 0 3DFACE 8 pillar_base 10 0.878679656440357 20 3.0 30 0.0 11 0.205 21 3.0 31 0.205 12 1.20163144893051 22 3.0 32 0.0 13 1.20163144893051 23 3.0 33 0.0 70 3 0 3DFACE 8 pillar_base 10 1.20163144893051 20 3.0 30 0.0 11 0.205 21 3.0 31 0.205 12 1.5 22 3.0 32 0.0 13 1.5 23 3.0 33 0.0 70 3 0 3DFACE 8 pillar_base 10 1.5 20 3.0 30 0.0 11 0.205 21 3.0 31 0.205 12 1.5 22 3.0 32 0.205 13 1.5 23 3.0 33 0.205 70 1 0 3DFACE 8 pillar_base 10 1.01786110403563 20 0.91251205544432 30 3.0 11 1.0777666229051 21 0.868083094650066 31 0.0 12 1.01786110403563 22 0.91251205544432 32 0.0 13 1.01786110403563 23 0.91251205544432 33 0.0 70 1 0 3DFACE 8 pillar_base 10 1.0777666229051 20 0.868083094650066 30 0.0 11 1.01786110403563 21 0.91251205544432 31 3.0 12 1.0777666229051 22 0.868083094650066 32 3.0 13 1.0777666229051 23 0.868083094650066 33 3.0 70 1 0 3DFACE 8 pillar_base 10 1.85826151998776 20 2.17026016090475 30 3.0 11 1.79083940859747 21 2.20214844470858 31 0.0 12 1.85826151998776 22 2.17026016090475 32 0.0 13 1.85826151998776 23 2.17026016090475 33 0.0 70 1 0 3DFACE 8 pillar_base 10 1.79083940859747 20 2.20214844470858 30 0.0 11 1.85826151998776 21 2.17026016090475 31 3.0 12 1.79083940859747 22 2.20214844470858 32 3.0 13 1.79083940859747 23 2.20214844470858 33 3.0 70 1 0 3DFACE 8 pillar_base 10 0.743659607729131 20 1.42550697334953 30 0.0 11 0.754603186893545 21 1.35173135526774 31 3.0 12 0.754603186893545 22 1.35173135526774 32 0.0 13 0.754603186893545 23 1.35173135526774 33 0.0 70 1 0 3DFACE 8 pillar_base 10 0.754603186893545 20 1.35173135526774 30 3.0 11 0.743659607729131 21 1.42550697334953 31 0.0 12 0.743659607729131 22 1.42550697334953 32 3.0 13 0.743659607729131 23 1.42550697334953 33 3.0 70 1 0 3DFACE 8 pillar_base 10 0.754603186893545 20 1.35173135526774 30 0.0 11 0.772725344843522 21 1.27938364528661 31 3.0 12 0.772725344843522 22 1.27938364528661 32 0.0 13 0.772725344843522 23 1.27938364528661 33 0.0 70 1 0 3DFACE 8 pillar_base 10 0.772725344843522 20 1.27938364528661 30 3.0 11 0.754603186893545 21 1.35173135526774 31 0.0 12 0.754603186893545 22 1.35173135526774 32 3.0 13 0.754603186893545 23 1.35173135526774 33 3.0 70 1 0 3DFACE 8 pillar_base 10 0.772725344843522 20 1.27938364528661 30 0.0 11 0.797851555291422 21 1.20916059140253 31 3.0 12 0.797851555291422 22 1.20916059140253 32 0.0 13 0.797851555291422 23 1.20916059140253 33 0.0 70 1 0 3DFACE 8 pillar_base 10 0.797851555291422 20 1.20916059140253 30 3.0 11 0.772725344843522 21 1.27938364528661 31 0.0 12 0.772725344843522 22 1.27938364528661 32 3.0 13 0.772725344843522 23 1.27938364528661 33 3.0 70 1 0 3DFACE 8 pillar_base 10 0.797851555291422 20 1.20916059140253 30 0.0 11 0.82973983909525 21 1.14173848001224 31 3.0 12 0.82973983909525 22 1.14173848001224 32 0.0 13 0.82973983909525 23 1.14173848001224 33 0.0 70 1 0 3DFACE 8 pillar_base 10 0.82973983909525 20 1.14173848001224 30 3.0 11 0.797851555291422 21 1.20916059140253 31 0.0 12 0.797851555291422 22 1.20916059140253 32 3.0 13 0.797851555291422 23 1.20916059140253 33 3.0 70 1 0 3DFACE 8 pillar_base 10 2.17026016090475 20 1.14173848001224 30 3.0 11 2.13191690534993 21 1.0777666229051 31 0.0 12 2.13191690534993 22 1.0777666229051 32 3.0 13 2.13191690534993 23 1.0777666229051 33 3.0 70 1 0 3DFACE 8 pillar_base 10 2.13191690534993 20 1.0777666229051 30 0.0 11 2.17026016090475 21 1.14173848001224 31 3.0 12 2.17026016090475 22 1.14173848001224 32 0.0 13 2.17026016090475 23 1.14173848001224 33 0.0 70 1 0 3DFACE 8 pillar_base 10 2.20214844470858 20 1.20916059140253 30 3.0 11 2.17026016090475 21 1.14173848001224 31 0.0 12 2.17026016090475 22 1.14173848001224 32 3.0 13 2.17026016090475 23 1.14173848001224 33 3.0 70 1 0 3DFACE 8 pillar_base 10 2.17026016090475 20 1.14173848001224 30 0.0 11 2.20214844470858 21 1.20916059140253 31 3.0 12 2.20214844470858 22 1.20916059140253 32 0.0 13 2.20214844470858 23 1.20916059140253 33 0.0 70 1 0 3DFACE 8 pillar_base 10 0.82973983909525 20 1.14173848001224 30 0.0 11 0.868083094650066 21 1.0777666229051 31 3.0 12 0.868083094650066 22 1.0777666229051 32 0.0 13 0.868083094650066 23 1.0777666229051 33 0.0 70 1 0 3DFACE 8 pillar_base 10 0.868083094650066 20 1.0777666229051 30 3.0 11 0.82973983909525 21 1.14173848001224 31 0.0 12 0.82973983909525 22 1.14173848001224 32 3.0 13 0.82973983909525 23 1.14173848001224 33 3.0 70 1 0 3DFACE 8 pillar_base 10 0.74 20 1.5 30 0.0 11 0.743659607729131 21 1.42550697334953 31 3.0 12 0.743659607729131 22 1.42550697334953 32 0.0 13 0.743659607729131 23 1.42550697334953 33 0.0 70 1 0 3DFACE 8 pillar_base 10 0.743659607729131 20 1.42550697334953 30 3.0 11 0.74 21 1.5 31 0.0 12 0.74 22 1.5 32 3.0 13 0.74 23 1.5 33 3.0 70 1 0 3DFACE 8 pillar_base 10 1.14173848001224 20 0.82973983909525 30 3.0 11 1.20916059140253 21 0.797851555291422 31 0.0 12 1.14173848001224 22 0.82973983909525 32 0.0 13 1.14173848001224 23 0.82973983909525 33 0.0 70 1 0 3DFACE 8 pillar_base 10 1.20916059140253 20 0.797851555291422 30 0.0 11 1.14173848001224 21 0.82973983909525 31 3.0 12 1.20916059140253 22 0.797851555291422 32 3.0 13 1.20916059140253 23 0.797851555291422 33 3.0 70 1 0 3DFACE 8 pillar_base 10 0.743659607729131 20 1.57449302665047 30 0.0 11 0.74 21 1.5 31 3.0 12 0.74 22 1.5 32 0.0 13 0.74 23 1.5 33 0.0 70 1 0 3DFACE 8 pillar_base 10 0.74 20 1.5 30 3.0 11 0.743659607729131 21 1.57449302665047 31 0.0 12 0.743659607729131 22 1.57449302665047 32 3.0 13 0.743659607729131 23 1.57449302665047 33 3.0 70 1 0 3DFACE 8 pillar_base 10 0.754603186893545 20 1.64826864473226 30 0.0 11 0.743659607729131 21 1.57449302665047 31 3.0 12 0.743659607729131 22 1.57449302665047 32 0.0 13 0.743659607729131 23 1.57449302665047 33 0.0 70 1 0 3DFACE 8 pillar_base 10 0.743659607729131 20 1.57449302665047 30 3.0 11 0.754603186893545 21 1.64826864473226 31 0.0 12 0.754603186893545 22 1.64826864473226 32 3.0 13 0.754603186893545 23 1.64826864473226 33 3.0 70 1 0 3DFACE 8 pillar_base 10 0.772725344843521 20 1.72061635471339 30 0.0 11 0.754603186893545 21 1.64826864473226 31 3.0 12 0.754603186893545 22 1.64826864473226 32 0.0 13 0.754603186893545 23 1.64826864473226 33 0.0 70 1 0 3DFACE 8 pillar_base 10 0.754603186893545 20 1.64826864473226 30 3.0 11 0.772725344843521 21 1.72061635471339 31 0.0 12 0.772725344843521 22 1.72061635471339 32 3.0 13 0.772725344843521 23 1.72061635471339 33 3.0 70 1 0 3DFACE 8 pillar_base 10 0.797851555291422 20 1.79083940859747 30 0.0 11 0.772725344843521 21 1.72061635471339 31 3.0 12 0.772725344843521 22 1.72061635471339 32 0.0 13 0.772725344843521 23 1.72061635471339 33 0.0 70 1 0 3DFACE 8 pillar_base 10 0.772725344843521 20 1.72061635471339 30 3.0 11 0.797851555291422 21 1.79083940859747 31 0.0 12 0.797851555291422 22 1.79083940859747 32 3.0 13 0.797851555291422 23 1.79083940859747 33 3.0 70 1 0 3DFACE 8 pillar_base 10 0.82973983909525 20 1.85826151998776 30 0.0 11 0.797851555291422 21 1.79083940859747 31 3.0 12 0.797851555291422 22 1.79083940859747 32 0.0 13 0.797851555291422 23 1.79083940859747 33 0.0 70 1 0 3DFACE 8 pillar_base 10 0.797851555291422 20 1.79083940859747 30 3.0 11 0.82973983909525 21 1.85826151998776 31 0.0 12 0.82973983909525 22 1.85826151998776 32 3.0 13 0.82973983909525 23 1.85826151998776 33 3.0 70 1 0 3DFACE 8 pillar_base 10 0.868083094650066 20 1.9222333770949 30 0.0 11 0.82973983909525 21 1.85826151998776 31 3.0 12 0.82973983909525 22 1.85826151998776 32 0.0 13 0.82973983909525 23 1.85826151998776 33 0.0 70 1 0 3DFACE 8 pillar_base 10 0.82973983909525 20 1.85826151998776 30 3.0 11 0.868083094650066 21 1.9222333770949 31 0.0 12 0.868083094650066 22 1.9222333770949 32 3.0 13 0.868083094650066 23 1.9222333770949 33 3.0 70 1 0 3DFACE 8 pillar_base 10 0.91251205544432 20 1.98213889596437 30 0.0 11 0.868083094650066 21 1.9222333770949 31 3.0 12 0.868083094650066 22 1.9222333770949 32 0.0 13 0.868083094650066 23 1.9222333770949 33 0.0 70 1 0 3DFACE 8 pillar_base 10 0.868083094650066 20 1.9222333770949 30 3.0 11 0.91251205544432 21 1.98213889596437 31 0.0 12 0.91251205544432 22 1.98213889596437 32 3.0 13 0.91251205544432 23 1.98213889596437 33 3.0 70 1 0 3DFACE 8 pillar_base 10 0.962598846298224 20 2.03740115370178 30 0.0 11 0.91251205544432 21 1.98213889596437 31 3.0 12 0.91251205544432 22 1.98213889596437 32 0.0 13 0.91251205544432 23 1.98213889596437 33 0.0 70 1 0 3DFACE 8 pillar_base 10 0.91251205544432 20 1.98213889596437 30 3.0 11 0.962598846298224 21 2.03740115370178 31 0.0 12 0.962598846298224 22 2.03740115370178 32 3.0 13 0.962598846298224 23 2.03740115370178 33 3.0 70 1 0 3DFACE 8 pillar_base 10 1.5 20 2.26 30 3.0 11 1.42550697334953 21 2.25634039227087 31 0.0 12 1.5 22 2.26 32 0.0 13 1.5 23 2.26 33 0.0 70 1 0 3DFACE 8 pillar_base 10 1.42550697334953 20 2.25634039227087 30 0.0 11 1.5 21 2.26 31 3.0 12 1.42550697334953 22 2.25634039227087 32 3.0 13 1.42550697334953 23 2.25634039227087 33 3.0 70 1 0 3DFACE 8 pillar_base 10 1.42550697334953 20 2.25634039227087 30 3.0 11 1.35173135526774 21 2.24539681310645 31 0.0 12 1.42550697334953 22 2.25634039227087 32 0.0 13 1.42550697334953 23 2.25634039227087 33 0.0 70 1 0 3DFACE 8 pillar_base 10 1.35173135526774 20 2.24539681310645 30 0.0 11 1.42550697334953 21 2.25634039227087 31 3.0 12 1.35173135526774 22 2.24539681310645 32 3.0 13 1.35173135526774 23 2.24539681310645 33 3.0 70 1 0 3DFACE 8 pillar_base 10 1.35173135526774 20 2.24539681310645 30 3.0 11 1.27938364528661 21 2.22727465515648 31 0.0 12 1.35173135526774 22 2.24539681310645 32 0.0 13 1.35173135526774 23 2.24539681310645 33 0.0 70 1 0 3DFACE 8 pillar_base 10 1.27938364528661 20 2.22727465515648 30 0.0 11 1.35173135526774 21 2.24539681310645 31 3.0 12 1.27938364528661 22 2.22727465515648 32 3.0 13 1.27938364528661 23 2.22727465515648 33 3.0 70 1 0 3DFACE 8 pillar_base 10 1.27938364528661 20 2.22727465515648 30 3.0 11 1.20916059140253 21 2.20214844470858 31 0.0 12 1.27938364528661 22 2.22727465515648 32 0.0 13 1.27938364528661 23 2.22727465515648 33 0.0 70 1 0 3DFACE 8 pillar_base 10 1.20916059140253 20 2.20214844470858 30 0.0 11 1.27938364528661 21 2.22727465515648 31 3.0 12 1.20916059140253 22 2.20214844470858 32 3.0 13 1.20916059140253 23 2.20214844470858 33 3.0 70 1 0 3DFACE 8 pillar_base 10 0.91251205544432 20 1.01786110403563 30 0.0 11 0.962598846298224 21 0.962598846298224 31 3.0 12 0.962598846298224 22 0.962598846298224 32 0.0 13 0.962598846298224 23 0.962598846298224 33 0.0 70 1 0 3DFACE 8 pillar_base 10 0.962598846298224 20 0.962598846298224 30 3.0 11 0.91251205544432 21 1.01786110403563 31 0.0 12 0.91251205544432 22 1.01786110403563 32 3.0 13 0.91251205544432 23 1.01786110403563 33 3.0 70 1 0 3DFACE 8 pillar_base 10 1.20916059140253 20 2.20214844470858 30 3.0 11 1.14173848001224 21 2.17026016090475 31 0.0 12 1.20916059140253 22 2.20214844470858 32 0.0 13 1.20916059140253 23 2.20214844470858 33 0.0 70 1 0 3DFACE 8 pillar_base 10 1.14173848001224 20 2.17026016090475 30 0.0 11 1.20916059140253 21 2.20214844470858 31 3.0 12 1.14173848001224 22 2.17026016090475 32 3.0 13 1.14173848001224 23 2.17026016090475 33 3.0 70 1 0 3DFACE 8 pillar_base 10 1.14173848001224 20 2.17026016090475 30 3.0 11 1.0777666229051 21 2.13191690534993 31 0.0 12 1.14173848001224 22 2.17026016090475 32 0.0 13 1.14173848001224 23 2.17026016090475 33 0.0 70 1 0 3DFACE 8 pillar_base 10 1.0777666229051 20 2.13191690534993 30 0.0 11 1.14173848001224 21 2.17026016090475 31 3.0 12 1.0777666229051 22 2.13191690534993 32 3.0 13 1.0777666229051 23 2.13191690534993 33 3.0 70 1 0 3DFACE 8 pillar_base 10 1.0777666229051 20 2.13191690534993 30 3.0 11 1.01786110403563 21 2.08748794455568 31 0.0 12 1.0777666229051 22 2.13191690534993 32 0.0 13 1.0777666229051 23 2.13191690534993 33 0.0 70 1 0 3DFACE 8 pillar_base 10 1.01786110403563 20 2.08748794455568 30 0.0 11 1.0777666229051 21 2.13191690534993 31 3.0 12 1.01786110403563 22 2.08748794455568 32 3.0 13 1.01786110403563 23 2.08748794455568 33 3.0 70 1 0 3DFACE 8 pillar_base 10 1.01786110403563 20 2.08748794455568 30 3.0 11 0.962598846298224 21 2.03740115370178 31 0.0 12 1.01786110403563 22 2.08748794455568 32 0.0 13 1.01786110403563 23 2.08748794455568 33 0.0 70 1 0 3DFACE 8 pillar_base 10 0.962598846298224 20 2.03740115370178 30 0.0 11 1.01786110403563 21 2.08748794455568 31 3.0 12 0.962598846298224 22 2.03740115370178 32 3.0 13 0.962598846298224 23 2.03740115370178 33 3.0 70 1 0 3DFACE 8 pillar_base 10 1.79083940859747 20 2.20214844470858 30 3.0 11 1.72061635471339 21 2.22727465515648 31 0.0 12 1.79083940859747 22 2.20214844470858 32 0.0 13 1.79083940859747 23 2.20214844470858 33 0.0 70 1 0 3DFACE 8 pillar_base 10 1.72061635471339 20 2.22727465515648 30 0.0 11 1.79083940859747 21 2.20214844470858 31 3.0 12 1.72061635471339 22 2.22727465515648 32 3.0 13 1.72061635471339 23 2.22727465515648 33 3.0 70 1 0 3DFACE 8 pillar_base 10 1.72061635471339 20 2.22727465515648 30 3.0 11 1.64826864473226 21 2.24539681310646 31 0.0 12 1.72061635471339 22 2.22727465515648 32 0.0 13 1.72061635471339 23 2.22727465515648 33 0.0 70 1 0 3DFACE 8 pillar_base 10 1.64826864473226 20 2.24539681310646 30 0.0 11 1.72061635471339 21 2.22727465515648 31 3.0 12 1.64826864473226 22 2.24539681310646 32 3.0 13 1.64826864473226 23 2.24539681310646 33 3.0 70 1 0 3DFACE 8 pillar_base 10 1.64826864473226 20 2.24539681310646 30 3.0 11 1.57449302665047 21 2.25634039227087 31 0.0 12 1.64826864473226 22 2.24539681310646 32 0.0 13 1.64826864473226 23 2.24539681310646 33 0.0 70 1 0 3DFACE 8 pillar_base 10 1.57449302665047 20 2.25634039227087 30 0.0 11 1.64826864473226 21 2.24539681310646 31 3.0 12 1.57449302665047 22 2.25634039227087 32 3.0 13 1.57449302665047 23 2.25634039227087 33 3.0 70 1 0 3DFACE 8 pillar_base 10 1.57449302665047 20 2.25634039227087 30 3.0 11 1.5 21 2.26 31 0.0 12 1.57449302665047 22 2.25634039227087 32 0.0 13 1.57449302665047 23 2.25634039227087 33 0.0 70 1 0 3DFACE 8 pillar_base 10 1.5 20 2.26 30 0.0 11 1.57449302665047 21 2.25634039227087 31 3.0 12 1.5 22 2.26 32 3.0 13 1.5 23 2.26 33 3.0 70 1 0 3DFACE 8 pillar_base 10 1.98213889596437 20 2.08748794455568 30 3.0 11 1.9222333770949 21 2.13191690534993 31 0.0 12 1.98213889596437 22 2.08748794455568 32 0.0 13 1.98213889596437 23 2.08748794455568 33 0.0 70 1 0 3DFACE 8 pillar_base 10 1.9222333770949 20 2.13191690534993 30 0.0 11 1.98213889596437 21 2.08748794455568 31 3.0 12 1.9222333770949 22 2.13191690534993 32 3.0 13 1.9222333770949 23 2.13191690534993 33 3.0 70 1 0 3DFACE 8 pillar_base 10 1.9222333770949 20 2.13191690534993 30 3.0 11 1.85826151998776 21 2.17026016090475 31 0.0 12 1.9222333770949 22 2.13191690534993 32 0.0 13 1.9222333770949 23 2.13191690534993 33 0.0 70 1 0 3DFACE 8 pillar_base 10 1.85826151998776 20 2.17026016090475 30 0.0 11 1.9222333770949 21 2.13191690534993 31 3.0 12 1.85826151998776 22 2.17026016090475 32 3.0 13 1.85826151998776 23 2.17026016090475 33 3.0 70 1 0 3DFACE 8 pillar_base 10 2.03740115370178 20 2.03740115370178 30 3.0 11 1.98213889596437 21 2.08748794455568 31 0.0 12 2.03740115370178 22 2.03740115370178 32 0.0 13 2.03740115370178 23 2.03740115370178 33 0.0 70 1 0 3DFACE 8 pillar_base 10 1.98213889596437 20 2.08748794455568 30 0.0 11 2.03740115370178 21 2.03740115370178 31 3.0 12 1.98213889596437 22 2.08748794455568 32 3.0 13 1.98213889596437 23 2.08748794455568 33 3.0 70 1 0 3DFACE 8 pillar_base 10 2.03740115370178 20 2.03740115370178 30 3.0 11 2.08748794455568 21 1.98213889596437 31 0.0 12 2.08748794455568 22 1.98213889596437 32 3.0 13 2.08748794455568 23 1.98213889596437 33 3.0 70 1 0 3DFACE 8 pillar_base 10 2.08748794455568 20 1.98213889596437 30 0.0 11 2.03740115370178 21 2.03740115370178 31 3.0 12 2.03740115370178 22 2.03740115370178 32 0.0 13 2.03740115370178 23 2.03740115370178 33 0.0 70 1 0 3DFACE 8 pillar_base 10 2.20214844470858 20 1.79083940859747 30 3.0 11 2.22727465515648 21 1.72061635471339 31 0.0 12 2.22727465515648 22 1.72061635471339 32 3.0 13 2.22727465515648 23 1.72061635471339 33 3.0 70 1 0 3DFACE 8 pillar_base 10 2.22727465515648 20 1.72061635471339 30 0.0 11 2.20214844470858 21 1.79083940859747 31 3.0 12 2.20214844470858 22 1.79083940859747 32 0.0 13 2.20214844470858 23 1.79083940859747 33 0.0 70 1 0 3DFACE 8 pillar_base 10 2.17026016090475 20 1.85826151998776 30 3.0 11 2.20214844470858 21 1.79083940859747 31 0.0 12 2.20214844470858 22 1.79083940859747 32 3.0 13 2.20214844470858 23 1.79083940859747 33 3.0 70 1 0 3DFACE 8 pillar_base 10 2.20214844470858 20 1.79083940859747 30 0.0 11 2.17026016090475 21 1.85826151998776 31 3.0 12 2.17026016090475 22 1.85826151998776 32 0.0 13 2.17026016090475 23 1.85826151998776 33 0.0 70 1 0 3DFACE 8 pillar_base 10 2.13191690534993 20 1.9222333770949 30 3.0 11 2.17026016090475 21 1.85826151998776 31 0.0 12 2.17026016090475 22 1.85826151998776 32 3.0 13 2.17026016090475 23 1.85826151998776 33 3.0 70 1 0 3DFACE 8 pillar_base 10 2.17026016090475 20 1.85826151998776 30 0.0 11 2.13191690534993 21 1.9222333770949 31 3.0 12 2.13191690534993 22 1.9222333770949 32 0.0 13 2.13191690534993 23 1.9222333770949 33 0.0 70 1 0 3DFACE 8 pillar_base 10 2.08748794455568 20 1.98213889596437 30 3.0 11 2.13191690534993 21 1.9222333770949 31 0.0 12 2.13191690534993 22 1.9222333770949 32 3.0 13 2.13191690534993 23 1.9222333770949 33 3.0 70 1 0 3DFACE 8 pillar_base 10 2.13191690534993 20 1.9222333770949 30 0.0 11 2.08748794455568 21 1.98213889596437 31 3.0 12 2.08748794455568 22 1.98213889596437 32 0.0 13 2.08748794455568 23 1.98213889596437 33 0.0 70 1 0 3DFACE 8 pillar_base 10 2.22727465515648 20 1.72061635471339 30 3.0 11 2.24539681310645 21 1.64826864473226 31 0.0 12 2.24539681310645 22 1.64826864473226 32 3.0 13 2.24539681310645 23 1.64826864473226 33 3.0 70 1 0 3DFACE 8 pillar_base 10 2.24539681310645 20 1.64826864473226 30 0.0 11 2.22727465515648 21 1.72061635471339 31 3.0 12 2.22727465515648 22 1.72061635471339 32 0.0 13 2.22727465515648 23 1.72061635471339 33 0.0 70 1 0 3DFACE 8 pillar_base 10 1.64826864473226 20 0.754603186893545 30 3.0 11 1.72061635471339 21 0.772725344843521 31 0.0 12 1.64826864473226 22 0.754603186893545 32 0.0 13 1.64826864473226 23 0.754603186893545 33 0.0 70 1 0 3DFACE 8 pillar_base 10 1.72061635471339 20 0.772725344843521 30 0.0 11 1.64826864473226 21 0.754603186893545 31 3.0 12 1.72061635471339 22 0.772725344843521 32 3.0 13 1.72061635471339 23 0.772725344843521 33 3.0 70 1 0 3DFACE 8 pillar_base 10 1.57449302665047 20 0.743659607729131 30 3.0 11 1.64826864473226 21 0.754603186893545 31 0.0 12 1.57449302665047 22 0.743659607729131 32 0.0 13 1.57449302665047 23 0.743659607729131 33 0.0 70 1 0 3DFACE 8 pillar_base 10 1.64826864473226 20 0.754603186893545 30 0.0 11 1.57449302665047 21 0.743659607729131 31 3.0 12 1.64826864473226 22 0.754603186893545 32 3.0 13 1.64826864473226 23 0.754603186893545 33 3.0 70 1 0 3DFACE 8 pillar_base 10 2.25634039227087 20 1.42550697334953 30 3.0 11 2.24539681310646 21 1.35173135526774 31 0.0 12 2.24539681310646 22 1.35173135526774 32 3.0 13 2.24539681310646 23 1.35173135526774 33 3.0 70 1 0 3DFACE 8 pillar_base 10 2.24539681310646 20 1.35173135526774 30 0.0 11 2.25634039227087 21 1.42550697334953 31 3.0 12 2.25634039227087 22 1.42550697334953 32 0.0 13 2.25634039227087 23 1.42550697334953 33 0.0 70 1 0 3DFACE 8 pillar_base 10 2.26 20 1.5 30 3.0 11 2.25634039227087 21 1.42550697334953 31 0.0 12 2.25634039227087 22 1.42550697334953 32 3.0 13 2.25634039227087 23 1.42550697334953 33 3.0 70 1 0 3DFACE 8 pillar_base 10 2.25634039227087 20 1.42550697334953 30 0.0 11 2.26 21 1.5 31 3.0 12 2.26 22 1.5 32 0.0 13 2.26 23 1.5 33 0.0 70 1 0 3DFACE 8 pillar_base 10 2.25634039227087 20 1.57449302665047 30 3.0 11 2.26 21 1.5 31 0.0 12 2.26 22 1.5 32 3.0 13 2.26 23 1.5 33 3.0 70 1 0 3DFACE 8 pillar_base 10 2.26 20 1.5 30 0.0 11 2.25634039227087 21 1.57449302665047 31 3.0 12 2.25634039227087 22 1.57449302665047 32 0.0 13 2.25634039227087 23 1.57449302665047 33 0.0 70 1 0 3DFACE 8 pillar_base 10 2.24539681310645 20 1.64826864473226 30 3.0 11 2.25634039227087 21 1.57449302665047 31 0.0 12 2.25634039227087 22 1.57449302665047 32 3.0 13 2.25634039227087 23 1.57449302665047 33 3.0 70 1 0 3DFACE 8 pillar_base 10 2.25634039227087 20 1.57449302665047 30 0.0 11 2.24539681310645 21 1.64826864473226 31 3.0 12 2.24539681310645 22 1.64826864473226 32 0.0 13 2.24539681310645 23 1.64826864473226 33 0.0 70 1 0 3DFACE 8 pillar_base 10 0.868083094650066 20 1.0777666229051 30 0.0 11 0.91251205544432 21 1.01786110403563 31 3.0 12 0.91251205544432 22 1.01786110403563 32 0.0 13 0.91251205544432 23 1.01786110403563 33 0.0 70 1 0 3DFACE 8 pillar_base 10 0.91251205544432 20 1.01786110403563 30 3.0 11 0.868083094650066 21 1.0777666229051 31 0.0 12 0.868083094650066 22 1.0777666229051 32 3.0 13 0.868083094650066 23 1.0777666229051 33 3.0 70 1 0 3DFACE 8 pillar_base 10 0.962598846298224 20 0.962598846298224 30 3.0 11 1.01786110403563 21 0.91251205544432 31 0.0 12 0.962598846298224 22 0.962598846298224 32 0.0 13 0.962598846298224 23 0.962598846298224 33 0.0 70 1 0 3DFACE 8 pillar_base 10 1.01786110403563 20 0.91251205544432 30 0.0 11 0.962598846298224 21 0.962598846298224 31 3.0 12 1.01786110403563 22 0.91251205544432 32 3.0 13 1.01786110403563 23 0.91251205544432 33 3.0 70 1 0 3DFACE 8 pillar_base 10 2.24539681310646 20 1.35173135526774 30 3.0 11 2.22727465515648 21 1.27938364528661 31 0.0 12 2.22727465515648 22 1.27938364528661 32 3.0 13 2.22727465515648 23 1.27938364528661 33 3.0 70 1 0 3DFACE 8 pillar_base 10 2.22727465515648 20 1.27938364528661 30 0.0 11 2.24539681310646 21 1.35173135526774 31 3.0 12 2.24539681310646 22 1.35173135526774 32 0.0 13 2.24539681310646 23 1.35173135526774 33 0.0 70 1 0 3DFACE 8 pillar_base 10 1.0777666229051 20 0.868083094650066 30 3.0 11 1.14173848001224 21 0.82973983909525 31 0.0 12 1.0777666229051 22 0.868083094650066 32 0.0 13 1.0777666229051 23 0.868083094650066 33 0.0 70 1 0 3DFACE 8 pillar_base 10 1.14173848001224 20 0.82973983909525 30 0.0 11 1.0777666229051 21 0.868083094650066 31 3.0 12 1.14173848001224 22 0.82973983909525 32 3.0 13 1.14173848001224 23 0.82973983909525 33 3.0 70 1 0 3DFACE 8 pillar_base 10 1.9222333770949 20 0.868083094650066 30 3.0 11 1.98213889596437 21 0.91251205544432 31 0.0 12 1.9222333770949 22 0.868083094650066 32 0.0 13 1.9222333770949 23 0.868083094650066 33 0.0 70 1 0 3DFACE 8 pillar_base 10 1.98213889596437 20 0.91251205544432 30 0.0 11 1.9222333770949 21 0.868083094650066 31 3.0 12 1.98213889596437 22 0.91251205544432 32 3.0 13 1.98213889596437 23 0.91251205544432 33 3.0 70 1 0 3DFACE 8 pillar_base 10 1.98213889596437 20 0.91251205544432 30 3.0 11 2.03740115370178 21 0.962598846298224 31 0.0 12 1.98213889596437 22 0.91251205544432 32 0.0 13 1.98213889596437 23 0.91251205544432 33 0.0 70 1 0 3DFACE 8 pillar_base 10 2.03740115370178 20 0.962598846298224 30 0.0 11 1.98213889596437 21 0.91251205544432 31 3.0 12 2.03740115370178 22 0.962598846298224 32 3.0 13 2.03740115370178 23 0.962598846298224 33 3.0 70 1 0 3DFACE 8 pillar_base 10 2.22727465515648 20 1.27938364528661 30 3.0 11 2.20214844470858 21 1.20916059140253 31 0.0 12 2.20214844470858 22 1.20916059140253 32 3.0 13 2.20214844470858 23 1.20916059140253 33 3.0 70 1 0 3DFACE 8 pillar_base 10 2.20214844470858 20 1.20916059140253 30 0.0 11 2.22727465515648 21 1.27938364528661 31 3.0 12 2.22727465515648 22 1.27938364528661 32 0.0 13 2.22727465515648 23 1.27938364528661 33 0.0 70 1 0 3DFACE 8 pillar_base 10 1.85826151998776 20 0.82973983909525 30 3.0 11 1.9222333770949 21 0.868083094650066 31 0.0 12 1.85826151998776 22 0.82973983909525 32 0.0 13 1.85826151998776 23 0.82973983909525 33 0.0 70 1 0 3DFACE 8 pillar_base 10 1.9222333770949 20 0.868083094650066 30 0.0 11 1.85826151998776 21 0.82973983909525 31 3.0 12 1.9222333770949 22 0.868083094650066 32 3.0 13 1.9222333770949 23 0.868083094650066 33 3.0 70 1 0 3DFACE 8 pillar_base 10 1.79083940859747 20 0.797851555291422 30 3.0 11 1.85826151998776 21 0.82973983909525 31 0.0 12 1.79083940859747 22 0.797851555291422 32 0.0 13 1.79083940859747 23 0.797851555291422 33 0.0 70 1 0 3DFACE 8 pillar_base 10 1.85826151998776 20 0.82973983909525 30 0.0 11 1.79083940859747 21 0.797851555291422 31 3.0 12 1.85826151998776 22 0.82973983909525 32 3.0 13 1.85826151998776 23 0.82973983909525 33 3.0 70 1 0 3DFACE 8 pillar_base 10 1.35173135526774 20 0.754603186893545 30 3.0 11 1.42550697334953 21 0.743659607729131 31 0.0 12 1.35173135526774 22 0.754603186893545 32 0.0 13 1.35173135526774 23 0.754603186893545 33 0.0 70 1 0 3DFACE 8 pillar_base 10 1.42550697334953 20 0.743659607729131 30 0.0 11 1.35173135526774 21 0.754603186893545 31 3.0 12 1.42550697334953 22 0.743659607729131 32 3.0 13 1.42550697334953 23 0.743659607729131 33 3.0 70 1 0 3DFACE 8 pillar_base 10 1.42550697334953 20 0.743659607729131 30 3.0 11 1.5 21 0.74 31 0.0 12 1.42550697334953 22 0.743659607729131 32 0.0 13 1.42550697334953 23 0.743659607729131 33 0.0 70 1 0 3DFACE 8 pillar_base 10 1.5 20 0.74 30 0.0 11 1.42550697334953 21 0.743659607729131 31 3.0 12 1.5 22 0.74 32 3.0 13 1.5 23 0.74 33 3.0 70 1 0 3DFACE 8 pillar_base 10 2.13191690534993 20 1.0777666229051 30 3.0 11 2.08748794455568 21 1.01786110403563 31 0.0 12 2.08748794455568 22 1.01786110403563 32 3.0 13 2.08748794455568 23 1.01786110403563 33 3.0 70 1 0 3DFACE 8 pillar_base 10 2.08748794455568 20 1.01786110403563 30 0.0 11 2.13191690534993 21 1.0777666229051 31 3.0 12 2.13191690534993 22 1.0777666229051 32 0.0 13 2.13191690534993 23 1.0777666229051 33 0.0 70 1 0 3DFACE 8 pillar_base 10 1.20916059140253 20 0.797851555291422 30 3.0 11 1.27938364528661 21 0.772725344843521 31 0.0 12 1.20916059140253 22 0.797851555291422 32 0.0 13 1.20916059140253 23 0.797851555291422 33 0.0 70 1 0 3DFACE 8 pillar_base 10 1.27938364528661 20 0.772725344843521 30 0.0 11 1.20916059140253 21 0.797851555291422 31 3.0 12 1.27938364528661 22 0.772725344843521 32 3.0 13 1.27938364528661 23 0.772725344843521 33 3.0 70 1 0 3DFACE 8 pillar_base 10 1.27938364528661 20 0.772725344843521 30 3.0 11 1.35173135526774 21 0.754603186893545 31 0.0 12 1.27938364528661 22 0.772725344843521 32 0.0 13 1.27938364528661 23 0.772725344843521 33 0.0 70 1 0 3DFACE 8 pillar_base 10 1.35173135526774 20 0.754603186893545 30 0.0 11 1.27938364528661 21 0.772725344843521 31 3.0 12 1.35173135526774 22 0.754603186893545 32 3.0 13 1.35173135526774 23 0.754603186893545 33 3.0 70 1 0 3DFACE 8 pillar_base 10 1.72061635471339 20 0.772725344843521 30 3.0 11 1.79083940859747 21 0.797851555291422 31 0.0 12 1.72061635471339 22 0.772725344843521 32 0.0 13 1.72061635471339 23 0.772725344843521 33 0.0 70 1 0 3DFACE 8 pillar_base 10 1.79083940859747 20 0.797851555291422 30 0.0 11 1.72061635471339 21 0.772725344843521 31 3.0 12 1.79083940859747 22 0.797851555291422 32 3.0 13 1.79083940859747 23 0.797851555291422 33 3.0 70 1 0 3DFACE 8 pillar_base 10 2.08748794455568 20 1.01786110403563 30 3.0 11 2.03740115370178 21 0.962598846298224 31 0.0 12 2.03740115370178 22 0.962598846298224 32 3.0 13 2.03740115370178 23 0.962598846298224 33 3.0 70 1 0 3DFACE 8 pillar_base 10 2.03740115370178 20 0.962598846298224 30 0.0 11 2.08748794455568 21 1.01786110403563 31 3.0 12 2.08748794455568 22 1.01786110403563 32 0.0 13 2.08748794455568 23 1.01786110403563 33 0.0 70 1 0 3DFACE 8 pillar_base 10 1.5 20 0.74 30 3.0 11 1.57449302665047 21 0.743659607729131 31 0.0 12 1.5 22 0.74 32 0.0 13 1.5 23 0.74 33 0.0 70 1 0 3DFACE 8 pillar_base 10 1.57449302665047 20 0.743659607729131 30 0.0 11 1.5 21 0.74 31 3.0 12 1.57449302665047 22 0.743659607729131 32 3.0 13 1.57449302665047 23 0.743659607729131 33 3.0 70 1 0 3DFACE 8 pillar_base 10 2.08748794455568 20 1.01786110403563 30 0.0 11 3.0 21 0.0 31 0.0 12 2.03740115370178 22 0.962598846298224 32 0.0 13 2.03740115370178 23 0.962598846298224 33 0.0 70 1 0 3DFACE 8 pillar_base 10 3.0 20 0.0 30 0.0 11 2.08748794455568 21 1.01786110403563 31 0.0 12 2.13191690534993 22 1.0777666229051 32 0.0 13 2.13191690534993 23 1.0777666229051 33 0.0 70 13 0 3DFACE 8 pillar_base 10 3.0 20 0.0 30 0.0 11 2.13191690534993 21 1.0777666229051 31 0.0 12 3.0 22 0.497732043121051 32 0.0 13 3.0 23 0.497732043121051 33 0.0 70 13 0 3DFACE 8 pillar_base 10 3.0 20 0.0 30 0.0 11 3.0 21 0.497732043121051 31 0.0 12 3.0 22 0.205 32 0.0 13 3.0 23 0.205 33 0.0 70 1 0 3DFACE 8 pillar_base 10 2.50226795687895 20 3.0 30 0.0 11 1.98213889596437 21 2.08748794455568 31 0.0 12 1.9222333770949 22 2.13191690534993 32 0.0 13 1.9222333770949 23 2.13191690534993 33 0.0 70 1 0 3DFACE 8 pillar_base 10 1.98213889596437 20 2.08748794455568 30 0.0 11 2.50226795687895 21 3.0 31 0.0 12 2.03740115370178 22 2.03740115370178 32 0.0 13 2.03740115370178 23 2.03740115370178 33 0.0 70 3 0 3DFACE 8 pillar_base 10 2.03740115370178 20 2.03740115370178 30 0.0 11 2.50226795687895 21 3.0 31 0.0 12 3.0 22 3.0 32 0.0 13 3.0 23 3.0 33 0.0 70 3 0 3DFACE 8 pillar_base 10 3.0 20 3.0 30 0.0 11 2.50226795687895 21 3.0 31 0.0 12 2.795 22 3.0 32 0.0 13 2.795 23 3.0 33 0.0 70 1 0 3DFACE 8 pillar_base 10 1.57449302665047 20 0.743659607729131 30 0.0 11 1.5 21 0.0 31 0.0 12 1.5 22 0.74 32 0.0 13 1.5 23 0.74 33 0.0 70 1 0 3DFACE 8 pillar_base 10 1.5 20 0.0 30 0.0 11 1.57449302665047 21 0.743659607729131 31 0.0 12 1.79836855106949 22 0.0 32 0.0 13 1.79836855106949 23 0.0 33 0.0 70 3 0 3DFACE 8 pillar_base 10 1.79836855106949 20 0.0 30 0.0 11 1.57449302665047 21 0.743659607729131 31 0.0 12 1.64826864473226 22 0.754603186893545 32 0.0 13 1.64826864473226 23 0.754603186893545 33 0.0 70 1 0 3DFACE 8 pillar_base 10 0.74 20 1.5 30 0.0 11 2.77555756156289e-17 21 1.20163144893051 31 0.0 12 0.0 22 1.5 32 0.0 13 0.0 23 1.5 33 0.0 70 1 0 3DFACE 8 pillar_base 10 2.77555756156289e-17 20 1.20163144893051 30 0.0 11 0.74 21 1.5 31 0.0 12 0.743659607729131 22 1.42550697334953 32 0.0 13 0.743659607729131 23 1.42550697334953 33 0.0 70 13 0 3DFACE 8 pillar_base 10 2.77555756156289e-17 20 1.20163144893051 30 0.0 11 0.743659607729131 21 1.42550697334953 31 0.0 12 0.754603186893545 22 1.35173135526774 32 0.0 13 0.754603186893545 23 1.35173135526774 33 0.0 70 1 0 3DFACE 8 pillar_base 10 0.962598846298224 20 0.962598846298224 30 0.0 11 0.205 21 0.0 31 0.0 12 0.0 22 0.0 32 0.0 13 0.0 23 0.0 33 0.0 70 1 0 3DFACE 8 pillar_base 10 0.205 20 0.0 30 0.0 11 0.962598846298224 21 0.962598846298224 31 0.0 12 0.497732043121053 22 -5.55111512312578e-17 32 0.0 13 0.497732043121053 23 -5.55111512312578e-17 33 0.0 70 3 0 3DFACE 8 pillar_base 10 0.497732043121053 20 -5.55111512312578e-17 30 0.0 11 0.962598846298224 21 0.962598846298224 31 0.0 12 1.01786110403563 22 0.91251205544432 32 0.0 13 1.01786110403563 23 0.91251205544432 33 0.0 70 13 0 3DFACE 8 pillar_base 10 0.497732043121053 20 -5.55111512312578e-17 30 0.0 11 1.01786110403563 21 0.91251205544432 31 0.0 12 1.0777666229051 22 0.868083094650066 32 0.0 13 1.0777666229051 23 0.868083094650066 33 0.0 70 1 0 3DFACE 8 pillar_base 10 1.5 20 3.0 30 0.0 11 1.35173135526774 21 2.24539681310645 31 0.0 12 1.20163144893051 22 3.0 32 0.0 13 1.20163144893051 23 3.0 33 0.0 70 1 0 3DFACE 8 pillar_base 10 1.35173135526774 20 2.24539681310645 30 0.0 11 1.5 21 3.0 31 0.0 12 1.42550697334953 22 2.25634039227087 32 0.0 13 1.42550697334953 23 2.25634039227087 33 0.0 70 3 0 3DFACE 8 pillar_base 10 1.42550697334953 20 2.25634039227087 30 0.0 11 1.5 21 3.0 31 0.0 12 1.5 22 2.26 32 0.0 13 1.5 23 2.26 33 0.0 70 1 0 3DFACE 8 pillar_base 10 3.0 20 1.79836855106949 30 0.0 11 2.25634039227087 21 1.57449302665047 31 0.0 12 2.24539681310645 22 1.64826864473226 32 0.0 13 2.24539681310645 23 1.64826864473226 33 0.0 70 1 0 3DFACE 8 pillar_base 10 2.25634039227087 20 1.57449302665047 30 0.0 11 3.0 21 1.79836855106949 31 0.0 12 2.26 22 1.5 32 0.0 13 2.26 23 1.5 33 0.0 70 3 0 3DFACE 8 pillar_base 10 2.26 20 1.5 30 0.0 11 3.0 21 1.79836855106949 31 0.0 12 3.0 22 1.5 32 0.0 13 3.0 23 1.5 33 0.0 70 1 0 3DFACE 8 pillar_base 10 0.962598846298224 20 2.03740115370178 30 0.0 11 0.0 21 2.795 31 0.0 12 0.0 22 3.0 32 0.0 13 0.0 23 3.0 33 0.0 70 1 0 3DFACE 8 pillar_base 10 0.0 20 2.795 30 0.0 11 0.962598846298224 21 2.03740115370178 31 0.0 12 0.91251205544432 22 1.98213889596437 32 0.0 13 0.91251205544432 23 1.98213889596437 33 0.0 70 13 0 3DFACE 8 pillar_base 10 0.0 20 2.795 30 0.0 11 0.91251205544432 21 1.98213889596437 31 0.0 12 0.868083094650066 22 1.9222333770949 32 0.0 13 0.868083094650066 23 1.9222333770949 33 0.0 70 13 0 3DFACE 8 pillar_base 10 0.868083094650066 20 1.9222333770949 30 0.0 11 -1.11022302462516e-16 21 2.50226795687895 31 0.0 12 0.0 22 2.795 32 0.0 13 0.0 23 2.795 33 0.0 70 12 0 3DFACE 8 pillar_base 10 2.22727465515648 20 1.27938364528661 30 0.0 11 3.0 21 0.878679656440357 31 0.0 12 2.20214844470858 22 1.20916059140253 32 0.0 13 2.20214844470858 23 1.20916059140253 33 0.0 70 1 0 3DFACE 8 pillar_base 10 3.0 20 0.878679656440357 30 0.0 11 2.22727465515648 21 1.27938364528661 31 0.0 12 2.24539681310646 22 1.35173135526774 32 0.0 13 2.24539681310646 23 1.35173135526774 33 0.0 70 13 0 3DFACE 8 pillar_base 10 3.0 20 0.878679656440357 30 0.0 11 2.24539681310646 21 1.35173135526774 31 0.0 12 3.0 22 1.20163144893051 32 0.0 13 3.0 23 1.20163144893051 33 0.0 70 1 0 3DFACE 8 pillar_base 10 0.797851555291422 20 1.79083940859747 30 0.0 11 0.0 21 1.79836855106949 31 0.0 12 0.0 22 2.12132034355964 32 0.0 13 0.0 23 2.12132034355964 33 0.0 70 1 0 3DFACE 8 pillar_base 10 0.0 20 1.79836855106949 30 0.0 11 0.797851555291422 21 1.79083940859747 31 0.0 12 0.772725344843521 22 1.72061635471339 32 0.0 13 0.772725344843521 23 1.72061635471339 33 0.0 70 13 0 3DFACE 8 pillar_base 10 0.0 20 1.79836855106949 30 0.0 11 0.772725344843521 21 1.72061635471339 31 0.0 12 0.754603186893545 22 1.64826864473226 32 0.0 13 0.754603186893545 23 1.64826864473226 33 0.0 70 1 0 3DFACE 8 pillar_base 10 0.797851555291422 20 1.20916059140253 30 0.0 11 0.0 21 0.497732043121051 31 0.0 12 -1.11022302462516e-16 22 0.878679656440357 32 0.0 13 -1.11022302462516e-16 23 0.878679656440357 33 0.0 70 1 0 3DFACE 8 pillar_base 10 0.0 20 0.497732043121051 30 0.0 11 0.797851555291422 21 1.20916059140253 31 0.0 12 0.82973983909525 22 1.14173848001224 32 0.0 13 0.82973983909525 23 1.14173848001224 33 0.0 70 13 0 3DFACE 8 pillar_base 10 0.0 20 0.497732043121051 30 0.0 11 0.82973983909525 21 1.14173848001224 31 0.0 12 0.868083094650066 22 1.0777666229051 32 0.0 13 0.868083094650066 23 1.0777666229051 33 0.0 70 1 0 3DFACE 8 pillar_base 10 1.20916059140253 20 0.797851555291422 30 0.0 11 1.20163144893051 21 5.55111512312578e-17 31 0.0 12 0.878679656440358 22 1.11022302462516e-16 32 0.0 13 0.878679656440358 23 1.11022302462516e-16 33 0.0 70 1 0 3DFACE 8 pillar_base 10 1.20163144893051 20 5.55111512312578e-17 30 0.0 11 1.20916059140253 21 0.797851555291422 31 0.0 12 1.27938364528661 22 0.772725344843521 32 0.0 13 1.27938364528661 23 0.772725344843521 33 0.0 70 13 0 3DFACE 8 pillar_base 10 1.20163144893051 20 5.55111512312578e-17 30 0.0 11 1.27938364528661 21 0.772725344843521 31 0.0 12 1.35173135526774 22 0.754603186893545 32 0.0 13 1.35173135526774 23 0.754603186893545 33 0.0 70 1 0 3DFACE 8 pillar_base 10 1.85826151998776 20 0.82973983909525 30 0.0 11 2.12132034355964 21 -5.55111512312578e-17 31 0.0 12 1.79083940859747 22 0.797851555291422 32 0.0 13 1.79083940859747 23 0.797851555291422 33 0.0 70 1 0 3DFACE 8 pillar_base 10 2.12132034355964 20 -5.55111512312578e-17 30 0.0 11 1.85826151998776 21 0.82973983909525 31 0.0 12 1.9222333770949 22 0.868083094650066 32 0.0 13 1.9222333770949 23 0.868083094650066 33 0.0 70 13 0 3DFACE 8 pillar_base 10 2.12132034355964 20 -5.55111512312578e-17 30 0.0 11 1.9222333770949 21 0.868083094650066 31 0.0 12 2.50226795687895 22 -4.16333634234434e-17 32 0.0 13 2.50226795687895 23 -4.16333634234434e-17 33 0.0 70 1 0 3DFACE 8 pillar_base 10 3.0 20 2.50226795687895 30 0.0 11 2.17026016090475 21 1.85826151998776 31 0.0 12 2.13191690534993 22 1.9222333770949 32 0.0 13 2.13191690534993 23 1.9222333770949 33 0.0 70 1 0 3DFACE 8 pillar_base 10 2.17026016090475 20 1.85826151998776 30 0.0 11 3.0 21 2.50226795687895 31 0.0 12 2.20214844470858 22 1.79083940859747 32 0.0 13 2.20214844470858 23 1.79083940859747 33 0.0 70 3 0 3DFACE 8 pillar_base 10 2.20214844470858 20 1.79083940859747 30 0.0 11 3.0 21 2.50226795687895 31 0.0 12 3.0 22 2.12132034355964 32 0.0 13 3.0 23 2.12132034355964 33 0.0 70 1 0 3DFACE 8 pillar_base 10 1.79836855106949 20 3.0 30 0.0 11 1.72061635471339 21 2.22727465515648 31 0.0 12 1.64826864473226 22 2.24539681310646 32 0.0 13 1.64826864473226 23 2.24539681310646 33 0.0 70 1 0 3DFACE 8 pillar_base 10 1.72061635471339 20 2.22727465515648 30 0.0 11 1.79836855106949 21 3.0 31 0.0 12 1.79083940859747 22 2.20214844470858 32 0.0 13 1.79083940859747 23 2.20214844470858 33 0.0 70 3 0 3DFACE 8 pillar_base 10 1.79083940859747 20 2.20214844470858 30 0.0 11 1.79836855106949 21 3.0 31 0.0 12 2.12132034355964 22 3.0 32 0.0 13 2.12132034355964 23 3.0 33 0.0 70 1 0 3DFACE 8 pillar_base 10 0.878679656440357 20 3.0 30 0.0 11 1.0777666229051 21 2.13191690534993 31 0.0 12 0.497732043121052 22 3.0 32 0.0 13 0.497732043121052 23 3.0 33 0.0 70 1 0 3DFACE 8 pillar_base 10 1.0777666229051 20 2.13191690534993 30 0.0 11 0.878679656440357 21 3.0 31 0.0 12 1.14173848001224 22 2.17026016090475 32 0.0 13 1.14173848001224 23 2.17026016090475 33 0.0 70 3 0 3DFACE 8 pillar_base 10 1.14173848001224 20 2.17026016090475 30 0.0 11 0.878679656440357 21 3.0 31 0.0 12 1.20916059140253 22 2.20214844470858 32 0.0 13 1.20916059140253 23 2.20214844470858 33 0.0 70 1 0 3DFACE 8 pillar_base 10 0.205 20 3.0 30 0.0 11 0.962598846298224 21 2.03740115370178 31 0.0 12 0.0 22 3.0 32 0.0 13 0.0 23 3.0 33 0.0 70 1 0 3DFACE 8 pillar_base 10 0.962598846298224 20 2.03740115370178 30 0.0 11 0.205 21 3.0 31 0.0 12 0.497732043121052 22 3.0 32 0.0 13 0.497732043121052 23 3.0 33 0.0 70 13 0 3DFACE 8 pillar_base 10 0.962598846298224 20 2.03740115370178 30 0.0 11 0.497732043121052 21 3.0 31 0.0 12 1.01786110403563 22 2.08748794455568 32 0.0 13 1.01786110403563 23 2.08748794455568 33 0.0 70 3 0 3DFACE 8 pillar_base 10 1.01786110403563 20 2.08748794455568 30 0.0 11 0.497732043121052 21 3.0 31 0.0 12 1.0777666229051 22 2.13191690534993 32 0.0 13 1.0777666229051 23 2.13191690534993 33 0.0 70 1 0 3DFACE 8 pillar_base 10 1.20163144893051 20 3.0 30 0.0 11 1.20916059140253 21 2.20214844470858 31 0.0 12 0.878679656440357 22 3.0 32 0.0 13 0.878679656440357 23 3.0 33 0.0 70 1 0 3DFACE 8 pillar_base 10 1.20916059140253 20 2.20214844470858 30 0.0 11 1.20163144893051 21 3.0 31 0.0 12 1.27938364528661 22 2.22727465515648 32 0.0 13 1.27938364528661 23 2.22727465515648 33 0.0 70 3 0 3DFACE 8 pillar_base 10 1.27938364528661 20 2.22727465515648 30 0.0 11 1.20163144893051 21 3.0 31 0.0 12 1.35173135526774 22 2.24539681310645 32 0.0 13 1.35173135526774 23 2.24539681310645 33 0.0 70 1 0 3DFACE 8 pillar_base 10 1.5 20 3.0 30 0.0 11 1.57449302665047 21 2.25634039227087 31 0.0 12 1.5 22 2.26 32 0.0 13 1.5 23 2.26 33 0.0 70 1 0 3DFACE 8 pillar_base 10 1.57449302665047 20 2.25634039227087 30 0.0 11 1.5 21 3.0 31 0.0 12 1.79836855106949 22 3.0 32 0.0 13 1.79836855106949 23 3.0 33 0.0 70 13 0 3DFACE 8 pillar_base 10 1.57449302665047 20 2.25634039227087 30 0.0 11 1.79836855106949 21 3.0 31 0.0 12 1.64826864473226 22 2.24539681310646 32 0.0 13 1.64826864473226 23 2.24539681310646 33 0.0 70 1 0 3DFACE 8 pillar_base 10 2.12132034355964 20 3.0 30 0.0 11 1.85826151998776 21 2.17026016090475 31 0.0 12 1.79083940859747 22 2.20214844470858 32 0.0 13 1.79083940859747 23 2.20214844470858 33 0.0 70 1 0 3DFACE 8 pillar_base 10 1.85826151998776 20 2.17026016090475 30 0.0 11 2.12132034355964 21 3.0 31 0.0 12 1.9222333770949 22 2.13191690534993 32 0.0 13 1.9222333770949 23 2.13191690534993 33 0.0 70 3 0 3DFACE 8 pillar_base 10 1.9222333770949 20 2.13191690534993 30 0.0 11 2.12132034355964 21 3.0 31 0.0 12 2.50226795687895 22 3.0 32 0.0 13 2.50226795687895 23 3.0 33 0.0 70 1 0 3DFACE 8 pillar_base 10 3.0 20 3.0 30 0.0 11 2.08748794455568 21 1.98213889596437 31 0.0 12 2.03740115370178 22 2.03740115370178 32 0.0 13 2.03740115370178 23 2.03740115370178 33 0.0 70 1 0 3DFACE 8 pillar_base 10 2.08748794455568 20 1.98213889596437 30 0.0 11 3.0 21 3.0 31 0.0 12 2.13191690534993 22 1.9222333770949 32 0.0 13 2.13191690534993 23 1.9222333770949 33 0.0 70 3 0 3DFACE 8 pillar_base 10 2.13191690534993 20 1.9222333770949 30 0.0 11 3.0 21 3.0 31 0.0 12 3.0 22 2.50226795687895 32 0.0 13 3.0 23 2.50226795687895 33 0.0 70 3 0 3DFACE 8 pillar_base 10 3.0 20 2.50226795687895 30 0.0 11 3.0 21 3.0 31 0.0 12 3.0 22 2.795 32 0.0 13 3.0 23 2.795 33 0.0 70 1 0 3DFACE 8 pillar_base 10 3.0 20 2.12132034355964 30 0.0 11 2.22727465515648 21 1.72061635471339 31 0.0 12 2.20214844470858 22 1.79083940859747 32 0.0 13 2.20214844470858 23 1.79083940859747 33 0.0 70 1 0 3DFACE 8 pillar_base 10 2.22727465515648 20 1.72061635471339 30 0.0 11 3.0 21 2.12132034355964 31 0.0 12 2.24539681310645 22 1.64826864473226 32 0.0 13 2.24539681310645 23 1.64826864473226 33 0.0 70 3 0 3DFACE 8 pillar_base 10 2.24539681310645 20 1.64826864473226 30 0.0 11 3.0 21 2.12132034355964 31 0.0 12 3.0 22 1.79836855106949 32 0.0 13 3.0 23 1.79836855106949 33 0.0 70 1 0 3DFACE 8 pillar_base 10 2.25634039227087 20 1.42550697334953 30 0.0 11 3.0 21 1.20163144893051 31 0.0 12 2.24539681310646 22 1.35173135526774 32 0.0 13 2.24539681310646 23 1.35173135526774 33 0.0 70 1 0 3DFACE 8 pillar_base 10 3.0 20 1.20163144893051 30 0.0 11 2.25634039227087 21 1.42550697334953 31 0.0 12 2.26 22 1.5 32 0.0 13 2.26 23 1.5 33 0.0 70 13 0 3DFACE 8 pillar_base 10 3.0 20 1.20163144893051 30 0.0 11 2.26 21 1.5 31 0.0 12 3.0 22 1.5 32 0.0 13 3.0 23 1.5 33 0.0 70 1 0 3DFACE 8 pillar_base 10 2.17026016090475 20 1.14173848001224 30 0.0 11 3.0 21 0.497732043121051 31 0.0 12 2.13191690534993 22 1.0777666229051 32 0.0 13 2.13191690534993 23 1.0777666229051 33 0.0 70 1 0 3DFACE 8 pillar_base 10 3.0 20 0.497732043121051 30 0.0 11 2.17026016090475 21 1.14173848001224 31 0.0 12 2.20214844470858 22 1.20916059140253 32 0.0 13 2.20214844470858 23 1.20916059140253 33 0.0 70 13 0 3DFACE 8 pillar_base 10 3.0 20 0.497732043121051 30 0.0 11 2.20214844470858 21 1.20916059140253 31 0.0 12 3.0 22 0.878679656440357 32 0.0 13 3.0 23 0.878679656440357 33 0.0 70 1 0 3DFACE 8 pillar_base 10 1.98213889596437 20 0.91251205544432 30 0.0 11 2.50226795687895 21 -4.16333634234434e-17 31 0.0 12 1.9222333770949 22 0.868083094650066 32 0.0 13 1.9222333770949 23 0.868083094650066 33 0.0 70 1 0 3DFACE 8 pillar_base 10 2.50226795687895 20 -4.16333634234434e-17 30 0.0 11 1.98213889596437 21 0.91251205544432 31 0.0 12 2.03740115370178 22 0.962598846298224 32 0.0 13 2.03740115370178 23 0.962598846298224 33 0.0 70 13 0 3DFACE 8 pillar_base 10 2.50226795687895 20 -4.16333634234434e-17 30 0.0 11 2.03740115370178 21 0.962598846298224 31 0.0 12 2.795 22 0.0 32 0.0 13 2.795 23 0.0 33 0.0 70 3 0 3DFACE 8 pillar_base 10 2.795 20 0.0 30 0.0 11 2.03740115370178 21 0.962598846298224 31 0.0 12 3.0 22 0.0 32 0.0 13 3.0 23 0.0 33 0.0 70 1 0 3DFACE 8 pillar_base 10 1.72061635471339 20 0.772725344843521 30 0.0 11 1.79836855106949 21 0.0 31 0.0 12 1.64826864473226 22 0.754603186893545 32 0.0 13 1.64826864473226 23 0.754603186893545 33 0.0 70 1 0 3DFACE 8 pillar_base 10 1.79836855106949 20 0.0 30 0.0 11 1.72061635471339 21 0.772725344843521 31 0.0 12 1.79083940859747 22 0.797851555291422 32 0.0 13 1.79083940859747 23 0.797851555291422 33 0.0 70 13 0 3DFACE 8 pillar_base 10 1.79836855106949 20 0.0 30 0.0 11 1.79083940859747 21 0.797851555291422 31 0.0 12 2.12132034355964 22 -5.55111512312578e-17 32 0.0 13 2.12132034355964 23 -5.55111512312578e-17 33 0.0 70 1 0 3DFACE 8 pillar_base 10 1.35173135526774 20 0.754603186893545 30 0.0 11 1.5 21 0.0 31 0.0 12 1.20163144893051 22 5.55111512312578e-17 32 0.0 13 1.20163144893051 23 5.55111512312578e-17 33 0.0 70 1 0 3DFACE 8 pillar_base 10 1.5 20 0.0 30 0.0 11 1.35173135526774 21 0.754603186893545 31 0.0 12 1.42550697334953 22 0.743659607729131 32 0.0 13 1.42550697334953 23 0.743659607729131 33 0.0 70 13 0 3DFACE 8 pillar_base 10 1.5 20 0.0 30 0.0 11 1.42550697334953 21 0.743659607729131 31 0.0 12 1.5 22 0.74 32 0.0 13 1.5 23 0.74 33 0.0 70 1 0 3DFACE 8 pillar_base 10 1.0777666229051 20 0.868083094650066 30 0.0 11 0.878679656440358 21 1.11022302462516e-16 31 0.0 12 0.497732043121053 22 -5.55111512312578e-17 32 0.0 13 0.497732043121053 23 -5.55111512312578e-17 33 0.0 70 1 0 3DFACE 8 pillar_base 10 0.878679656440358 20 1.11022302462516e-16 30 0.0 11 1.0777666229051 21 0.868083094650066 31 0.0 12 1.14173848001224 22 0.82973983909525 32 0.0 13 1.14173848001224 23 0.82973983909525 33 0.0 70 13 0 3DFACE 8 pillar_base 10 0.878679656440358 20 1.11022302462516e-16 30 0.0 11 1.14173848001224 21 0.82973983909525 31 0.0 12 1.20916059140253 22 0.797851555291422 32 0.0 13 1.20916059140253 23 0.797851555291422 33 0.0 70 1 0 3DFACE 8 pillar_base 10 0.868083094650066 20 1.0777666229051 30 0.0 11 0.0 21 0.205 31 0.0 12 0.0 22 0.497732043121051 32 0.0 13 0.0 23 0.497732043121051 33 0.0 70 1 0 3DFACE 8 pillar_base 10 0.0 20 0.205 30 0.0 11 0.868083094650066 21 1.0777666229051 31 0.0 12 0.0 22 0.0 32 0.0 13 0.0 23 0.0 33 0.0 70 3 0 3DFACE 8 pillar_base 10 0.0 20 0.0 30 0.0 11 0.868083094650066 21 1.0777666229051 31 0.0 12 0.91251205544432 22 1.01786110403563 32 0.0 13 0.91251205544432 23 1.01786110403563 33 0.0 70 13 0 3DFACE 8 pillar_base 10 0.0 20 0.0 30 0.0 11 0.91251205544432 21 1.01786110403563 31 0.0 12 0.962598846298224 22 0.962598846298224 32 0.0 13 0.962598846298224 23 0.962598846298224 33 0.0 70 1 0 3DFACE 8 pillar_base 10 2.77555756156289e-17 20 1.20163144893051 30 0.0 11 0.797851555291422 21 1.20916059140253 31 0.0 12 -1.11022302462516e-16 22 0.878679656440357 32 0.0 13 -1.11022302462516e-16 23 0.878679656440357 33 0.0 70 1 0 3DFACE 8 pillar_base 10 0.797851555291422 20 1.20916059140253 30 0.0 11 2.77555756156289e-17 21 1.20163144893051 31 0.0 12 0.772725344843522 22 1.27938364528661 32 0.0 13 0.772725344843522 23 1.27938364528661 33 0.0 70 3 0 3DFACE 8 pillar_base 10 0.772725344843522 20 1.27938364528661 30 0.0 11 2.77555756156289e-17 21 1.20163144893051 31 0.0 12 0.754603186893545 22 1.35173135526774 32 0.0 13 0.754603186893545 23 1.35173135526774 33 0.0 70 1 0 3DFACE 8 pillar_base 10 0.754603186893545 20 1.64826864473226 30 0.0 11 0.0 21 1.5 31 0.0 12 0.0 22 1.79836855106949 32 0.0 13 0.0 23 1.79836855106949 33 0.0 70 1 0 3DFACE 8 pillar_base 10 0.0 20 1.5 30 0.0 11 0.754603186893545 21 1.64826864473226 31 0.0 12 0.743659607729131 22 1.57449302665047 32 0.0 13 0.743659607729131 23 1.57449302665047 33 0.0 70 13 0 3DFACE 8 pillar_base 10 0.0 20 1.5 30 0.0 11 0.743659607729131 21 1.57449302665047 31 0.0 12 0.74 22 1.5 32 0.0 13 0.74 23 1.5 33 0.0 70 1 0 3DFACE 8 pillar_base 10 0.868083094650066 20 1.9222333770949 30 0.0 11 0.0 21 2.12132034355964 31 0.0 12 -1.11022302462516e-16 22 2.50226795687895 32 0.0 13 -1.11022302462516e-16 23 2.50226795687895 33 0.0 70 1 0 3DFACE 8 pillar_base 10 0.0 20 2.12132034355964 30 0.0 11 0.868083094650066 21 1.9222333770949 31 0.0 12 0.82973983909525 22 1.85826151998776 32 0.0 13 0.82973983909525 23 1.85826151998776 33 0.0 70 13 0 3DFACE 8 pillar_base 10 0.0 20 2.12132034355964 30 0.0 11 0.82973983909525 21 1.85826151998776 31 0.0 12 0.797851555291422 22 1.79083940859747 32 0.0 13 0.797851555291422 23 1.79083940859747 33 0.0 70 1 0 3DFACE 8 pillar_base 10 0.868083094650066 20 1.9222333770949 30 3.0 11 0.0 21 2.795 31 3.0 12 0.0 22 2.50226795687895 32 3.0 13 0.0 23 2.50226795687895 33 3.0 70 1 0 3DFACE 8 pillar_base 10 0.0 20 2.795 30 3.0 11 0.868083094650066 21 1.9222333770949 31 3.0 12 0.0 22 3.0 32 3.0 13 0.0 23 3.0 33 3.0 70 3 0 3DFACE 8 pillar_base 10 0.0 20 3.0 30 3.0 11 0.868083094650066 21 1.9222333770949 31 3.0 12 0.91251205544432 22 1.98213889596437 32 3.0 13 0.91251205544432 23 1.98213889596437 33 3.0 70 13 0 3DFACE 8 pillar_base 10 0.0 20 3.0 30 3.0 11 0.91251205544432 21 1.98213889596437 31 3.0 12 0.962598846298224 22 2.03740115370178 32 3.0 13 0.962598846298224 23 2.03740115370178 33 3.0 70 1 0 3DFACE 8 pillar_base 10 2.17026016090475 20 1.85826151998776 30 3.0 11 3.0 21 2.50226795687895 31 3.0 12 2.13191690534993 22 1.9222333770949 32 3.0 13 2.13191690534993 23 1.9222333770949 33 3.0 70 1 0 3DFACE 8 pillar_base 10 3.0 20 2.50226795687895 30 3.0 11 2.17026016090475 21 1.85826151998776 31 3.0 12 2.20214844470858 22 1.79083940859747 32 3.0 13 2.20214844470858 23 1.79083940859747 33 3.0 70 13 0 3DFACE 8 pillar_base 10 3.0 20 2.50226795687895 30 3.0 11 2.20214844470858 21 1.79083940859747 31 3.0 12 3.0 22 2.12132034355964 32 3.0 13 3.0 23 2.12132034355964 33 3.0 70 1 0 3DFACE 8 pillar_base 10 0.754603186893545 20 1.35173135526774 30 3.0 11 0.0 21 1.5 31 3.0 12 0.0 22 1.20163144893051 32 3.0 13 0.0 23 1.20163144893051 33 3.0 70 1 0 3DFACE 8 pillar_base 10 0.0 20 1.5 30 3.0 11 0.754603186893545 21 1.35173135526774 31 3.0 12 0.743659607729131 22 1.42550697334953 32 3.0 13 0.743659607729131 23 1.42550697334953 33 3.0 70 13 0 3DFACE 8 pillar_base 10 0.0 20 1.5 30 3.0 11 0.743659607729131 21 1.42550697334953 31 3.0 12 0.74 22 1.5 32 3.0 13 0.74 23 1.5 33 3.0 70 1 0 3DFACE 8 pillar_base 10 3.0 20 1.20163144893051 30 3.0 11 2.25634039227087 21 1.42550697334953 31 3.0 12 2.24539681310646 22 1.35173135526774 32 3.0 13 2.24539681310646 23 1.35173135526774 33 3.0 70 1 0 3DFACE 8 pillar_base 10 2.25634039227087 20 1.42550697334953 30 3.0 11 3.0 21 1.20163144893051 31 3.0 12 2.26 22 1.5 32 3.0 13 2.26 23 1.5 33 3.0 70 3 0 3DFACE 8 pillar_base 10 2.26 20 1.5 30 3.0 11 3.0 21 1.20163144893051 31 3.0 12 3.0 22 1.5 32 3.0 13 3.0 23 1.5 33 3.0 70 1 0 3DFACE 8 pillar_base 10 1.5 20 5.55111512312578e-17 30 3.0 11 1.35173135526774 21 0.754603186893545 31 3.0 12 1.20163144893051 22 1.11022302462516e-16 32 3.0 13 1.20163144893051 23 1.11022302462516e-16 33 3.0 70 1 0 3DFACE 8 pillar_base 10 1.35173135526774 20 0.754603186893545 30 3.0 11 1.5 21 5.55111512312578e-17 31 3.0 12 1.42550697334953 22 0.743659607729131 32 3.0 13 1.42550697334953 23 0.743659607729131 33 3.0 70 3 0 3DFACE 8 pillar_base 10 1.42550697334953 20 0.743659607729131 30 3.0 11 1.5 21 5.55111512312578e-17 31 3.0 12 1.5 22 0.74 32 3.0 13 1.5 23 0.74 33 3.0 70 1 0 3DFACE 8 pillar_base 10 0.962598846298224 20 2.03740115370178 30 3.0 11 0.205 21 3.0 31 3.0 12 0.0 22 3.0 32 3.0 13 0.0 23 3.0 33 3.0 70 1 0 3DFACE 8 pillar_base 10 0.205 20 3.0 30 3.0 11 0.962598846298224 21 2.03740115370178 31 3.0 12 0.497732043121052 22 3.0 32 3.0 13 0.497732043121052 23 3.0 33 3.0 70 3 0 3DFACE 8 pillar_base 10 0.497732043121052 20 3.0 30 3.0 11 0.962598846298224 21 2.03740115370178 31 3.0 12 1.01786110403563 22 2.08748794455568 32 3.0 13 1.01786110403563 23 2.08748794455568 33 3.0 70 13 0 3DFACE 8 pillar_base 10 0.497732043121052 20 3.0 30 3.0 11 1.01786110403563 21 2.08748794455568 31 3.0 12 1.0777666229051 22 2.13191690534993 32 3.0 13 1.0777666229051 23 2.13191690534993 33 3.0 70 1 0 3DFACE 8 pillar_base 10 1.0777666229051 20 2.13191690534993 30 3.0 11 0.878679656440356 21 3.0 31 3.0 12 0.497732043121052 22 3.0 32 3.0 13 0.497732043121052 23 3.0 33 3.0 70 1 0 3DFACE 8 pillar_base 10 0.878679656440356 20 3.0 30 3.0 11 1.0777666229051 21 2.13191690534993 31 3.0 12 1.14173848001224 22 2.17026016090475 32 3.0 13 1.14173848001224 23 2.17026016090475 33 3.0 70 13 0 3DFACE 8 pillar_base 10 0.878679656440356 20 3.0 30 3.0 11 1.14173848001224 21 2.17026016090475 31 3.0 12 1.20916059140253 22 2.20214844470858 32 3.0 13 1.20916059140253 23 2.20214844470858 33 3.0 70 1 0 3DFACE 8 pillar_base 10 1.35173135526774 20 2.24539681310645 30 3.0 11 1.5 21 3.0 31 3.0 12 1.20163144893051 22 3.0 32 3.0 13 1.20163144893051 23 3.0 33 3.0 70 1 0 3DFACE 8 pillar_base 10 1.5 20 3.0 30 3.0 11 1.35173135526774 21 2.24539681310645 31 3.0 12 1.42550697334953 22 2.25634039227087 32 3.0 13 1.42550697334953 23 2.25634039227087 33 3.0 70 13 0 3DFACE 8 pillar_base 10 1.5 20 3.0 30 3.0 11 1.42550697334953 21 2.25634039227087 31 3.0 12 1.5 22 2.26 32 3.0 13 1.5 23 2.26 33 3.0 70 1 0 3DFACE 8 pillar_base 10 3.0 20 0.497732043121051 30 3.0 11 2.17026016090475 21 1.14173848001224 31 3.0 12 2.13191690534993 22 1.0777666229051 32 3.0 13 2.13191690534993 23 1.0777666229051 33 3.0 70 1 0 3DFACE 8 pillar_base 10 2.17026016090475 20 1.14173848001224 30 3.0 11 3.0 21 0.497732043121051 31 3.0 12 2.20214844470858 22 1.20916059140253 32 3.0 13 2.20214844470858 23 1.20916059140253 33 3.0 70 3 0 3DFACE 8 pillar_base 10 2.20214844470858 20 1.20916059140253 30 3.0 11 3.0 21 0.497732043121051 31 3.0 12 3.0 22 0.878679656440357 32 3.0 13 3.0 23 0.878679656440357 33 3.0 70 1 0 3DFACE 8 pillar_base 10 0.797851555291422 20 1.79083940859747 30 3.0 11 0.0 21 2.50226795687895 31 3.0 12 0.0 22 2.12132034355964 32 3.0 13 0.0 23 2.12132034355964 33 3.0 70 1 0 3DFACE 8 pillar_base 10 0.0 20 2.50226795687895 30 3.0 11 0.797851555291422 21 1.79083940859747 31 3.0 12 0.82973983909525 22 1.85826151998776 32 3.0 13 0.82973983909525 23 1.85826151998776 33 3.0 70 13 0 3DFACE 8 pillar_base 10 0.0 20 2.50226795687895 30 3.0 11 0.82973983909525 21 1.85826151998776 31 3.0 12 0.868083094650066 22 1.9222333770949 32 3.0 13 0.868083094650066 23 1.9222333770949 33 3.0 70 1 0 3DFACE 8 pillar_base 10 0.868083094650066 20 1.0777666229051 30 3.0 11 0.0 21 0.878679656440357 31 3.0 12 0.0 22 0.497732043121051 32 3.0 13 0.0 23 0.497732043121051 33 3.0 70 1 0 3DFACE 8 pillar_base 10 0.0 20 0.878679656440357 30 3.0 11 0.868083094650066 21 1.0777666229051 31 3.0 12 0.82973983909525 22 1.14173848001224 32 3.0 13 0.82973983909525 23 1.14173848001224 33 3.0 70 13 0 3DFACE 8 pillar_base 10 0.0 20 0.878679656440357 30 3.0 11 0.82973983909525 21 1.14173848001224 31 3.0 12 0.797851555291422 22 1.20916059140253 32 3.0 13 0.797851555291422 23 1.20916059140253 33 3.0 70 1 0 3DFACE 8 pillar_base 10 1.98213889596437 20 2.08748794455568 30 3.0 11 2.50226795687895 21 3.0 31 3.0 12 1.9222333770949 22 2.13191690534993 32 3.0 13 1.9222333770949 23 2.13191690534993 33 3.0 70 1 0 3DFACE 8 pillar_base 10 2.50226795687895 20 3.0 30 3.0 11 1.98213889596437 21 2.08748794455568 31 3.0 12 2.03740115370178 22 2.03740115370178 32 3.0 13 2.03740115370178 23 2.03740115370178 33 3.0 70 13 0 3DFACE 8 pillar_base 10 2.50226795687895 20 3.0 30 3.0 11 2.03740115370178 21 2.03740115370178 31 3.0 12 3.0 22 3.0 32 3.0 13 3.0 23 3.0 33 3.0 70 13 0 3DFACE 8 pillar_base 10 2.50226795687895 20 3.0 30 3.0 11 3.0 21 3.0 31 3.0 12 2.795 22 3.0 32 3.0 13 2.795 23 3.0 33 3.0 70 1 0 3DFACE 8 pillar_base 10 2.25634039227087 20 1.57449302665047 30 3.0 11 3.0 21 1.79836855106949 31 3.0 12 2.24539681310645 22 1.64826864473226 32 3.0 13 2.24539681310645 23 1.64826864473226 33 3.0 70 1 0 3DFACE 8 pillar_base 10 3.0 20 1.79836855106949 30 3.0 11 2.25634039227087 21 1.57449302665047 31 3.0 12 2.26 22 1.5 32 3.0 13 2.26 23 1.5 33 3.0 70 13 0 3DFACE 8 pillar_base 10 3.0 20 1.79836855106949 30 3.0 11 2.26 21 1.5 31 3.0 12 3.0 22 1.5 32 3.0 13 3.0 23 1.5 33 3.0 70 1 0 3DFACE 8 pillar_base 10 2.50226795687895 20 0.0 30 3.0 11 1.98213889596437 21 0.91251205544432 31 3.0 12 1.9222333770949 22 0.868083094650066 32 3.0 13 1.9222333770949 23 0.868083094650066 33 3.0 70 1 0 3DFACE 8 pillar_base 10 1.98213889596437 20 0.91251205544432 30 3.0 11 2.50226795687895 21 0.0 31 3.0 12 2.03740115370178 22 0.962598846298224 32 3.0 13 2.03740115370178 23 0.962598846298224 33 3.0 70 3 0 3DFACE 8 pillar_base 10 2.03740115370178 20 0.962598846298224 30 3.0 11 2.50226795687895 21 0.0 31 3.0 12 3.0 22 0.0 32 3.0 13 3.0 23 0.0 33 3.0 70 3 0 3DFACE 8 pillar_base 10 3.0 20 0.0 30 3.0 11 2.50226795687895 21 0.0 31 3.0 12 2.795 22 0.0 32 3.0 13 2.795 23 0.0 33 3.0 70 1 0 3DFACE 8 pillar_base 10 1.79836855106949 20 5.55111512312578e-17 30 3.0 11 1.72061635471339 21 0.772725344843521 31 3.0 12 1.64826864473226 22 0.754603186893545 32 3.0 13 1.64826864473226 23 0.754603186893545 33 3.0 70 1 0 3DFACE 8 pillar_base 10 1.72061635471339 20 0.772725344843521 30 3.0 11 1.79836855106949 21 5.55111512312578e-17 31 3.0 12 1.79083940859747 22 0.797851555291422 32 3.0 13 1.79083940859747 23 0.797851555291422 33 3.0 70 3 0 3DFACE 8 pillar_base 10 1.79083940859747 20 0.797851555291422 30 3.0 11 1.79836855106949 21 5.55111512312578e-17 31 3.0 12 2.12132034355964 22 0.0 32 3.0 13 2.12132034355964 23 0.0 33 3.0 70 1 0 3DFACE 8 pillar_base 10 1.20916059140253 20 2.20214844470858 30 3.0 11 1.20163144893051 21 3.0 31 3.0 12 0.878679656440356 22 3.0 32 3.0 13 0.878679656440356 23 3.0 33 3.0 70 1 0 3DFACE 8 pillar_base 10 1.20163144893051 20 3.0 30 3.0 11 1.20916059140253 21 2.20214844470858 31 3.0 12 1.27938364528661 22 2.22727465515648 32 3.0 13 1.27938364528661 23 2.22727465515648 33 3.0 70 13 0 3DFACE 8 pillar_base 10 1.20163144893051 20 3.0 30 3.0 11 1.27938364528661 21 2.22727465515648 31 3.0 12 1.35173135526774 22 2.24539681310645 32 3.0 13 1.35173135526774 23 2.24539681310645 33 3.0 70 1 0 3DFACE 8 pillar_base 10 1.57449302665047 20 2.25634039227087 30 3.0 11 1.5 21 3.0 31 3.0 12 1.5 22 2.26 32 3.0 13 1.5 23 2.26 33 3.0 70 1 0 3DFACE 8 pillar_base 10 1.5 20 3.0 30 3.0 11 1.57449302665047 21 2.25634039227087 31 3.0 12 1.79836855106949 22 3.0 32 3.0 13 1.79836855106949 23 3.0 33 3.0 70 3 0 3DFACE 8 pillar_base 10 1.79836855106949 20 3.0 30 3.0 11 1.57449302665047 21 2.25634039227087 31 3.0 12 1.64826864473226 22 2.24539681310646 32 3.0 13 1.64826864473226 23 2.24539681310646 33 3.0 70 1 0 3DFACE 8 pillar_base 10 2.12132034355964 20 0.0 30 3.0 11 1.85826151998776 21 0.82973983909525 31 3.0 12 1.79083940859747 22 0.797851555291422 32 3.0 13 1.79083940859747 23 0.797851555291422 33 3.0 70 1 0 3DFACE 8 pillar_base 10 1.85826151998776 20 0.82973983909525 30 3.0 11 2.12132034355964 21 0.0 31 3.0 12 1.9222333770949 22 0.868083094650066 32 3.0 13 1.9222333770949 23 0.868083094650066 33 3.0 70 3 0 3DFACE 8 pillar_base 10 1.9222333770949 20 0.868083094650066 30 3.0 11 2.12132034355964 21 0.0 31 3.0 12 2.50226795687895 22 0.0 32 3.0 13 2.50226795687895 23 0.0 33 3.0 70 1 0 3DFACE 8 pillar_base 10 1.72061635471339 20 2.22727465515648 30 3.0 11 1.79836855106949 21 3.0 31 3.0 12 1.64826864473226 22 2.24539681310646 32 3.0 13 1.64826864473226 23 2.24539681310646 33 3.0 70 1 0 3DFACE 8 pillar_base 10 1.79836855106949 20 3.0 30 3.0 11 1.72061635471339 21 2.22727465515648 31 3.0 12 1.79083940859747 22 2.20214844470858 32 3.0 13 1.79083940859747 23 2.20214844470858 33 3.0 70 13 0 3DFACE 8 pillar_base 10 1.79836855106949 20 3.0 30 3.0 11 1.79083940859747 21 2.20214844470858 31 3.0 12 2.12132034355964 22 3.0 32 3.0 13 2.12132034355964 23 3.0 33 3.0 70 1 0 3DFACE 8 pillar_base 10 3.0 20 0.878679656440357 30 3.0 11 2.22727465515648 21 1.27938364528661 31 3.0 12 2.20214844470858 22 1.20916059140253 32 3.0 13 2.20214844470858 23 1.20916059140253 33 3.0 70 1 0 3DFACE 8 pillar_base 10 2.22727465515648 20 1.27938364528661 30 3.0 11 3.0 21 0.878679656440357 31 3.0 12 2.24539681310646 22 1.35173135526774 32 3.0 13 2.24539681310646 23 1.35173135526774 33 3.0 70 3 0 3DFACE 8 pillar_base 10 2.24539681310646 20 1.35173135526774 30 3.0 11 3.0 21 0.878679656440357 31 3.0 12 3.0 22 1.20163144893051 32 3.0 13 3.0 23 1.20163144893051 33 3.0 70 1 0 3DFACE 8 pillar_base 10 3.0 20 0.0 30 3.0 11 2.08748794455568 21 1.01786110403563 31 3.0 12 2.03740115370178 22 0.962598846298224 32 3.0 13 2.03740115370178 23 0.962598846298224 33 3.0 70 1 0 3DFACE 8 pillar_base 10 2.08748794455568 20 1.01786110403563 30 3.0 11 3.0 21 0.0 31 3.0 12 2.13191690534993 22 1.0777666229051 32 3.0 13 2.13191690534993 23 1.0777666229051 33 3.0 70 3 0 3DFACE 8 pillar_base 10 2.13191690534993 20 1.0777666229051 30 3.0 11 3.0 21 0.0 31 3.0 12 3.0 22 0.497732043121051 32 3.0 13 3.0 23 0.497732043121051 33 3.0 70 3 0 3DFACE 8 pillar_base 10 3.0 20 0.497732043121051 30 3.0 11 3.0 21 0.0 31 3.0 12 3.0 22 0.205 32 3.0 13 3.0 23 0.205 33 3.0 70 1 0 3DFACE 8 pillar_base 10 0.754603186893545 20 1.64826864473226 30 3.0 11 0.0 21 2.12132034355964 31 3.0 12 0.0 22 1.79836855106949 32 3.0 13 0.0 23 1.79836855106949 33 3.0 70 1 0 3DFACE 8 pillar_base 10 0.0 20 2.12132034355964 30 3.0 11 0.754603186893545 21 1.64826864473226 31 3.0 12 0.772725344843521 22 1.72061635471339 32 3.0 13 0.772725344843521 23 1.72061635471339 33 3.0 70 13 0 3DFACE 8 pillar_base 10 0.0 20 2.12132034355964 30 3.0 11 0.772725344843521 21 1.72061635471339 31 3.0 12 0.797851555291422 22 1.79083940859747 32 3.0 13 0.797851555291422 23 1.79083940859747 33 3.0 70 1 0 3DFACE 8 pillar_base 10 2.08748794455568 20 1.98213889596437 30 3.0 11 3.0 21 3.0 31 3.0 12 2.03740115370178 22 2.03740115370178 32 3.0 13 2.03740115370178 23 2.03740115370178 33 3.0 70 1 0 3DFACE 8 pillar_base 10 3.0 20 3.0 30 3.0 11 2.08748794455568 21 1.98213889596437 31 3.0 12 2.13191690534993 22 1.9222333770949 32 3.0 13 2.13191690534993 23 1.9222333770949 33 3.0 70 13 0 3DFACE 8 pillar_base 10 3.0 20 3.0 30 3.0 11 2.13191690534993 21 1.9222333770949 31 3.0 12 3.0 22 2.50226795687895 32 3.0 13 3.0 23 2.50226795687895 33 3.0 70 13 0 3DFACE 8 pillar_base 10 3.0 20 3.0 30 3.0 11 3.0 21 2.50226795687895 31 3.0 12 3.0 22 2.795 32 3.0 13 3.0 23 2.795 33 3.0 70 1 0 3DFACE 8 pillar_base 10 1.20163144893051 20 1.11022302462516e-16 30 3.0 11 1.20916059140253 21 0.797851555291422 31 3.0 12 0.878679656440358 22 1.66533453693773e-16 32 3.0 13 0.878679656440358 23 1.66533453693773e-16 33 3.0 70 1 0 3DFACE 8 pillar_base 10 1.20916059140253 20 0.797851555291422 30 3.0 11 1.20163144893051 21 1.11022302462516e-16 31 3.0 12 1.27938364528661 22 0.772725344843521 32 3.0 13 1.27938364528661 23 0.772725344843521 33 3.0 70 3 0 3DFACE 8 pillar_base 10 1.27938364528661 20 0.772725344843521 30 3.0 11 1.20163144893051 21 1.11022302462516e-16 31 3.0 12 1.35173135526774 22 0.754603186893545 32 3.0 13 1.35173135526774 23 0.754603186893545 33 3.0 70 1 0 3DFACE 8 pillar_base 10 1.79836855106949 20 5.55111512312578e-17 30 3.0 11 1.5 21 0.74 31 3.0 12 1.5 22 5.55111512312578e-17 32 3.0 13 1.5 23 5.55111512312578e-17 33 3.0 70 1 0 3DFACE 8 pillar_base 10 1.5 20 0.74 30 3.0 11 1.79836855106949 21 5.55111512312578e-17 31 3.0 12 1.57449302665047 22 0.743659607729131 32 3.0 13 1.57449302665047 23 0.743659607729131 33 3.0 70 3 0 3DFACE 8 pillar_base 10 1.57449302665047 20 0.743659607729131 30 3.0 11 1.79836855106949 21 5.55111512312578e-17 31 3.0 12 1.64826864473226 22 0.754603186893545 32 3.0 13 1.64826864473226 23 0.754603186893545 33 3.0 70 1 0 3DFACE 8 pillar_base 10 0.962598846298224 20 0.962598846298224 30 3.0 11 0.0 21 0.205 31 3.0 12 0.0 22 0.0 32 3.0 13 0.0 23 0.0 33 3.0 70 1 0 3DFACE 8 pillar_base 10 0.0 20 0.205 30 3.0 11 0.962598846298224 21 0.962598846298224 31 3.0 12 0.0 22 0.497732043121051 32 3.0 13 0.0 23 0.497732043121051 33 3.0 70 3 0 3DFACE 8 pillar_base 10 0.0 20 0.497732043121051 30 3.0 11 0.962598846298224 21 0.962598846298224 31 3.0 12 0.91251205544432 22 1.01786110403563 32 3.0 13 0.91251205544432 23 1.01786110403563 33 3.0 70 13 0 3DFACE 8 pillar_base 10 0.0 20 0.497732043121051 30 3.0 11 0.91251205544432 21 1.01786110403563 31 3.0 12 0.868083094650066 22 1.0777666229051 32 3.0 13 0.868083094650066 23 1.0777666229051 33 3.0 70 1 0 3DFACE 8 pillar_base 10 0.878679656440358 20 1.66533453693773e-16 30 3.0 11 1.0777666229051 21 0.868083094650066 31 3.0 12 0.497732043121053 22 0.0 32 3.0 13 0.497732043121053 23 0.0 33 3.0 70 1 0 3DFACE 8 pillar_base 10 1.0777666229051 20 0.868083094650066 30 3.0 11 0.878679656440358 21 1.66533453693773e-16 31 3.0 12 1.14173848001224 22 0.82973983909525 32 3.0 13 1.14173848001224 23 0.82973983909525 33 3.0 70 3 0 3DFACE 8 pillar_base 10 1.14173848001224 20 0.82973983909525 30 3.0 11 0.878679656440358 21 1.66533453693773e-16 31 3.0 12 1.20916059140253 22 0.797851555291422 32 3.0 13 1.20916059140253 23 0.797851555291422 33 3.0 70 1 0 3DFACE 8 pillar_base 10 0.205 20 0.0 30 3.0 11 0.962598846298224 21 0.962598846298224 31 3.0 12 0.0 22 0.0 32 3.0 13 0.0 23 0.0 33 3.0 70 1 0 3DFACE 8 pillar_base 10 0.962598846298224 20 0.962598846298224 30 3.0 11 0.205 21 0.0 31 3.0 12 0.497732043121053 22 0.0 32 3.0 13 0.497732043121053 23 0.0 33 3.0 70 13 0 3DFACE 8 pillar_base 10 0.962598846298224 20 0.962598846298224 30 3.0 11 0.497732043121053 21 0.0 31 3.0 12 1.01786110403563 22 0.91251205544432 32 3.0 13 1.01786110403563 23 0.91251205544432 33 3.0 70 3 0 3DFACE 8 pillar_base 10 1.01786110403563 20 0.91251205544432 30 3.0 11 0.497732043121053 21 0.0 31 3.0 12 1.0777666229051 22 0.868083094650066 32 3.0 13 1.0777666229051 23 0.868083094650066 33 3.0 70 1 0 3DFACE 8 pillar_base 10 2.22727465515648 20 1.72061635471339 30 3.0 11 3.0 21 2.12132034355964 31 3.0 12 2.20214844470858 22 1.79083940859747 32 3.0 13 2.20214844470858 23 1.79083940859747 33 3.0 70 1 0 3DFACE 8 pillar_base 10 3.0 20 2.12132034355964 30 3.0 11 2.22727465515648 21 1.72061635471339 31 3.0 12 2.24539681310645 22 1.64826864473226 32 3.0 13 2.24539681310645 23 1.64826864473226 33 3.0 70 13 0 3DFACE 8 pillar_base 10 3.0 20 2.12132034355964 30 3.0 11 2.24539681310645 21 1.64826864473226 31 3.0 12 3.0 22 1.79836855106949 32 3.0 13 3.0 23 1.79836855106949 33 3.0 70 1 0 3DFACE 8 pillar_base 10 1.85826151998776 20 2.17026016090475 30 3.0 11 2.12132034355964 21 3.0 31 3.0 12 1.79083940859747 22 2.20214844470858 32 3.0 13 1.79083940859747 23 2.20214844470858 33 3.0 70 1 0 3DFACE 8 pillar_base 10 2.12132034355964 20 3.0 30 3.0 11 1.85826151998776 21 2.17026016090475 31 3.0 12 1.9222333770949 22 2.13191690534993 32 3.0 13 1.9222333770949 23 2.13191690534993 33 3.0 70 13 0 3DFACE 8 pillar_base 10 2.12132034355964 20 3.0 30 3.0 11 1.9222333770949 21 2.13191690534993 31 3.0 12 2.50226795687895 22 3.0 32 3.0 13 2.50226795687895 23 3.0 33 3.0 70 1 0 3DFACE 8 pillar_base 10 0.797851555291422 20 1.20916059140253 30 3.0 11 0.0 21 1.20163144893051 31 3.0 12 0.0 22 0.878679656440357 32 3.0 13 0.0 23 0.878679656440357 33 3.0 70 1 0 3DFACE 8 pillar_base 10 0.0 20 1.20163144893051 30 3.0 11 0.797851555291422 21 1.20916059140253 31 3.0 12 0.772725344843522 22 1.27938364528661 32 3.0 13 0.772725344843522 23 1.27938364528661 33 3.0 70 13 0 3DFACE 8 pillar_base 10 0.0 20 1.20163144893051 30 3.0 11 0.772725344843522 21 1.27938364528661 31 3.0 12 0.754603186893545 22 1.35173135526774 32 3.0 13 0.754603186893545 23 1.35173135526774 33 3.0 70 1 0 3DFACE 8 pillar_base 10 0.205 20 0.0 30 1.5 11 0.0 21 0.0 31 0.205 12 0.205 22 0.0 32 0.205 13 0.205 23 0.0 33 0.205 70 1 0 3DFACE 8 pillar_base 10 0.0 20 0.0 30 0.205 11 0.205 21 0.0 31 1.5 12 0.0 22 0.0 32 1.5 13 0.0 23 0.0 33 1.5 70 1 0 3DFACE 8 pillar_base 10 0.205 20 0.0 30 2.795 11 0.0 21 0.0 31 1.5 12 0.205 22 0.0 32 1.5 13 0.205 23 0.0 33 1.5 70 1 0 3DFACE 8 pillar_base 10 0.0 20 0.0 30 1.5 11 0.205 21 0.0 31 2.795 12 0.0 22 0.0 32 2.795 13 0.0 23 0.0 33 2.795 70 1 0 3DFACE 8 pillar_base 10 3.0 20 0.0 30 1.5 11 2.795 21 0.0 31 0.205 12 3.0 22 0.0 32 0.205 13 3.0 23 0.0 33 0.205 70 1 0 3DFACE 8 pillar_base 10 2.795 20 0.0 30 0.205 11 3.0 21 0.0 31 1.5 12 2.795 22 0.0 32 1.5 13 2.795 23 0.0 33 1.5 70 1 0 3DFACE 8 pillar_base 10 2.795 20 0.0 30 3.0 11 1.5 21 0.0 31 2.795 12 2.795 22 0.0 32 2.795 13 2.795 23 0.0 33 2.795 70 1 0 3DFACE 8 pillar_base 10 1.5 20 0.0 30 2.795 11 2.795 21 0.0 31 3.0 12 1.5 22 5.55111512312578e-17 32 3.0 13 1.5 23 5.55111512312578e-17 33 3.0 70 3 0 3DFACE 8 pillar_base 10 1.5 20 5.55111512312578e-17 30 3.0 11 2.795 21 0.0 31 3.0 12 2.50226795687895 22 0.0 32 3.0 13 2.50226795687895 23 0.0 33 3.0 70 13 0 3DFACE 8 pillar_base 10 1.5 20 5.55111512312578e-17 30 3.0 11 2.50226795687895 21 0.0 31 3.0 12 2.12132034355964 22 0.0 32 3.0 13 2.12132034355964 23 0.0 33 3.0 70 13 0 3DFACE 8 pillar_base 10 1.5 20 5.55111512312578e-17 30 3.0 11 2.12132034355964 21 0.0 31 3.0 12 1.79836855106949 22 5.55111512312578e-17 32 3.0 13 1.79836855106949 23 5.55111512312578e-17 33 3.0 70 1 0 3DFACE 8 pillar_base 10 2.795 20 0.0 30 3.0 11 2.795 21 0.0 31 2.795 12 3.0 22 0.0 32 3.0 13 3.0 23 0.0 33 3.0 70 0 0 3DFACE 8 pillar_base 10 1.5 20 0.0 30 0.205 11 1.20163144893051 21 5.55111512312578e-17 31 0.0 12 1.5 22 0.0 32 0.0 13 1.5 23 0.0 33 0.0 70 1 0 3DFACE 8 pillar_base 10 1.20163144893051 20 5.55111512312578e-17 30 0.0 11 1.5 21 0.0 31 0.205 12 0.878679656440358 22 1.11022302462516e-16 32 0.0 13 0.878679656440358 23 1.11022302462516e-16 33 0.0 70 3 0 3DFACE 8 pillar_base 10 0.878679656440358 20 1.11022302462516e-16 30 0.0 11 1.5 21 0.0 31 0.205 12 0.497732043121053 22 -5.55111512312578e-17 32 0.0 13 0.497732043121053 23 -5.55111512312578e-17 33 0.0 70 3 0 3DFACE 8 pillar_base 10 0.497732043121053 20 -5.55111512312578e-17 30 0.0 11 1.5 21 0.0 31 0.205 12 0.205 22 0.0 32 0.0 13 0.205 23 0.0 33 0.0 70 3 0 3DFACE 8 pillar_base 10 0.205 20 0.0 30 0.0 11 1.5 21 0.0 31 0.205 12 0.205 22 0.0 32 0.205 13 0.205 23 0.0 33 0.205 70 1 0 3DFACE 8 pillar_base 10 0.0 20 0.0 30 3.0 11 0.205 21 0.0 31 2.795 12 0.205 22 0.0 32 3.0 13 0.205 23 0.0 33 3.0 70 0 0 3DFACE 8 pillar_base 10 3.0 20 0.0 30 2.795 11 2.795 21 0.0 31 1.5 12 3.0 22 0.0 32 1.5 13 3.0 23 0.0 33 1.5 70 1 0 3DFACE 8 pillar_base 10 2.795 20 0.0 30 1.5 11 3.0 21 0.0 31 2.795 12 2.795 22 0.0 32 2.795 13 2.795 23 0.0 33 2.795 70 1 0 3DFACE 8 pillar_base 10 2.795 20 0.0 30 0.205 11 2.50226795687895 21 -4.16333634234434e-17 31 0.0 12 2.795 22 0.0 32 0.0 13 2.795 23 0.0 33 0.0 70 1 0 3DFACE 8 pillar_base 10 2.50226795687895 20 -4.16333634234434e-17 30 0.0 11 2.795 21 0.0 31 0.205 12 2.12132034355964 22 -5.55111512312578e-17 32 0.0 13 2.12132034355964 23 -5.55111512312578e-17 33 0.0 70 3 0 3DFACE 8 pillar_base 10 2.12132034355964 20 -5.55111512312578e-17 30 0.0 11 2.795 21 0.0 31 0.205 12 1.79836855106949 22 0.0 32 0.0 13 1.79836855106949 23 0.0 33 0.0 70 3 0 3DFACE 8 pillar_base 10 1.79836855106949 20 0.0 30 0.0 11 2.795 21 0.0 31 0.205 12 1.5 22 0.0 32 0.0 13 1.5 23 0.0 33 0.0 70 3 0 3DFACE 8 pillar_base 10 1.5 20 0.0 30 0.0 11 2.795 21 0.0 31 0.205 12 1.5 22 0.0 32 0.205 13 1.5 23 0.0 33 0.205 70 1 0 3DFACE 8 pillar_base 10 1.5 20 5.55111512312578e-17 30 3.0 11 0.205 21 0.0 31 2.795 12 1.5 22 0.0 32 2.795 13 1.5 23 0.0 33 2.795 70 1 0 3DFACE 8 pillar_base 10 0.205 20 0.0 30 2.795 11 1.5 21 5.55111512312578e-17 31 3.0 12 0.205 22 0.0 32 3.0 13 0.205 23 0.0 33 3.0 70 3 0 3DFACE 8 pillar_base 10 0.205 20 0.0 30 3.0 11 1.5 21 5.55111512312578e-17 31 3.0 12 1.20163144893051 22 1.11022302462516e-16 32 3.0 13 1.20163144893051 23 1.11022302462516e-16 33 3.0 70 13 0 3DFACE 8 pillar_base 10 0.205 20 0.0 30 3.0 11 1.20163144893051 21 1.11022302462516e-16 31 3.0 12 0.878679656440358 22 1.66533453693773e-16 32 3.0 13 0.878679656440358 23 1.66533453693773e-16 33 3.0 70 13 0 3DFACE 8 pillar_base 10 0.205 20 0.0 30 3.0 11 0.878679656440358 21 1.66533453693773e-16 31 3.0 12 0.497732043121053 22 0.0 32 3.0 13 0.497732043121053 23 0.0 33 3.0 70 1 0 3DFACE 8 pillar_base 10 1.5 20 0.0 30 2.795 11 0.8525 21 0.0 31 2.1475 12 1.5 22 0.0 32 1.5 13 1.5 23 0.0 33 1.5 70 0 0 3DFACE 8 pillar_base 10 2.795 20 3.0 30 2.795 11 3.0 21 3.0 31 1.5 12 2.795 22 3.0 32 1.5 13 2.795 23 3.0 33 1.5 70 1 0 3DFACE 8 pillar_base 10 3.0 20 3.0 30 1.5 11 2.795 21 3.0 31 2.795 12 3.0 22 3.0 32 2.795 13 3.0 23 3.0 33 2.795 70 1 0 3DFACE 8 pillar_base 10 2.795 20 3.0 30 1.5 11 3.0 21 3.0 31 0.205 12 2.795 22 3.0 32 0.205 13 2.795 23 3.0 33 0.205 70 1 0 3DFACE 8 pillar_base 10 3.0 20 3.0 30 0.205 11 2.795 21 3.0 31 1.5 12 3.0 22 3.0 32 1.5 13 3.0 23 3.0 33 1.5 70 1 0 3DFACE 8 pillar_base 10 2.795 20 3.0 30 0.205 11 3.0 21 3.0 31 0.0 12 2.795 22 3.0 32 0.0 13 2.795 23 3.0 33 0.0 70 0 0 3DFACE 8 pillar_base 10 3.0 20 3.0 30 3.0 11 3.0 21 3.0 31 2.795 12 2.795 22 3.0 32 2.795 13 2.795 23 3.0 33 2.795 70 0 0 3DFACE 8 pillar_base 10 1.5 20 3.0 30 0.205 11 1.79836855106949 21 3.0 31 0.0 12 1.5 22 3.0 32 0.0 13 1.5 23 3.0 33 0.0 70 1 0 3DFACE 8 pillar_base 10 1.79836855106949 20 3.0 30 0.0 11 1.5 21 3.0 31 0.205 12 2.12132034355964 22 3.0 32 0.0 13 2.12132034355964 23 3.0 33 0.0 70 3 0 3DFACE 8 pillar_base 10 2.12132034355964 20 3.0 30 0.0 11 1.5 21 3.0 31 0.205 12 2.50226795687895 22 3.0 32 0.0 13 2.50226795687895 23 3.0 33 0.0 70 3 0 3DFACE 8 pillar_base 10 2.50226795687895 20 3.0 30 0.0 11 1.5 21 3.0 31 0.205 12 2.795 22 3.0 32 0.0 13 2.795 23 3.0 33 0.0 70 3 0 3DFACE 8 pillar_base 10 2.795 20 3.0 30 0.0 11 1.5 21 3.0 31 0.205 12 2.795 22 3.0 32 0.205 13 2.795 23 3.0 33 0.205 70 1 0 3DFACE 8 pillar_base 10 0.0 20 3.0 30 3.0 11 0.205 21 3.0 31 2.795 12 0.0 22 3.0 32 2.795 13 0.0 23 3.0 33 2.795 70 0 0 3DFACE 8 pillar_base 10 0.205 20 3.0 30 0.205 11 0.205 21 3.0 31 0.0 12 0.0 22 3.0 32 0.0 13 0.0 23 3.0 33 0.0 70 0 0 3DFACE 8 pillar_base 10 0.0 20 3.0 30 2.795 11 0.205 21 3.0 31 1.5 12 0.0 22 3.0 32 1.5 13 0.0 23 3.0 33 1.5 70 1 0 3DFACE 8 pillar_base 10 0.205 20 3.0 30 1.5 11 0.0 21 3.0 31 2.795 12 0.205 22 3.0 32 2.795 13 0.205 23 3.0 33 2.795 70 1 0 3DFACE 8 pillar_base 10 0.0 20 3.0 30 1.5 11 0.205 21 3.0 31 0.205 12 0.0 22 3.0 32 0.205 13 0.0 23 3.0 33 0.205 70 1 0 3DFACE 8 pillar_base 10 0.205 20 3.0 30 0.205 11 0.0 21 3.0 31 1.5 12 0.205 22 3.0 32 1.5 13 0.205 23 3.0 33 1.5 70 1 0 3DFACE 8 pillar_base 10 1.5 20 3.0 30 1.5 11 1.5 21 3.0 31 0.205 12 0.8525 22 3.0 32 0.8525 13 0.8525 23 3.0 33 0.8525 70 0 0 3DFACE 8 pillar_base 10 0.205 20 3.0 30 3.0 11 1.5 21 3.0 31 2.795 12 0.205 22 3.0 32 2.795 13 0.205 23 3.0 33 2.795 70 1 0 3DFACE 8 pillar_base 10 1.5 20 3.0 30 2.795 11 0.205 21 3.0 31 3.0 12 1.5 22 3.0 32 3.0 13 1.5 23 3.0 33 3.0 70 3 0 3DFACE 8 pillar_base 10 1.5 20 3.0 30 3.0 11 0.205 21 3.0 31 3.0 12 0.497732043121052 22 3.0 32 3.0 13 0.497732043121052 23 3.0 33 3.0 70 13 0 3DFACE 8 pillar_base 10 1.5 20 3.0 30 3.0 11 0.497732043121052 21 3.0 31 3.0 12 0.878679656440356 22 3.0 32 3.0 13 0.878679656440356 23 3.0 33 3.0 70 13 0 3DFACE 8 pillar_base 10 1.5 20 3.0 30 3.0 11 0.878679656440356 21 3.0 31 3.0 12 1.20163144893051 22 3.0 32 3.0 13 1.20163144893051 23 3.0 33 3.0 70 1 0 3DFACE 8 pillar_base 10 1.5 20 3.0 30 3.0 11 2.795 21 3.0 31 2.795 12 1.5 22 3.0 32 2.795 13 1.5 23 3.0 33 2.795 70 1 0 3DFACE 8 pillar_base 10 2.795 20 3.0 30 2.795 11 1.5 21 3.0 31 3.0 12 2.795 22 3.0 32 3.0 13 2.795 23 3.0 33 3.0 70 3 0 3DFACE 8 pillar_base 10 2.795 20 3.0 30 3.0 11 1.5 21 3.0 31 3.0 12 1.79836855106949 22 3.0 32 3.0 13 1.79836855106949 23 3.0 33 3.0 70 13 0 3DFACE 8 pillar_base 10 2.795 20 3.0 30 3.0 11 1.79836855106949 21 3.0 31 3.0 12 2.12132034355964 22 3.0 32 3.0 13 2.12132034355964 23 3.0 33 3.0 70 13 0 3DFACE 8 pillar_base 10 2.795 20 3.0 30 3.0 11 2.12132034355964 21 3.0 31 3.0 12 2.50226795687895 22 3.0 32 3.0 13 2.50226795687895 23 3.0 33 3.0 70 1 0 LINE 8 pillar_base 10 0.0 20 2.795 30 1.5 11 0.0 21 1.5 31 1.5 0 LINE 8 pillar_base 10 0.0 20 2.795 30 2.795 11 0.0 21 1.5 31 1.5 0 LINE 8 pillar_base 10 0.0 20 1.5 30 1.5 11 0.0 21 1.5 31 0.205 0 LINE 8 pillar_base 10 0.0 20 1.5 30 2.795 11 0.0 21 1.5 31 1.5 0 LINE 8 pillar_base 10 0.0 20 1.5 30 1.5 11 0.0 21 0.205 31 0.205 0 LINE 8 pillar_base 10 0.0 20 1.5 30 1.5 11 0.0 21 2.795 31 0.205 0 LINE 8 pillar_base 10 0.0 20 1.5 30 1.5 11 0.0 21 0.205 31 1.5 0 LINE 8 pillar_base 10 0.0 20 0.205 30 2.795 11 0.0 21 1.5 31 1.5 0 3DFACE 8 pillar_base 10 0.0 20 3.0 30 0.0 11 0.0 21 2.795 31 0.205 12 0.0 22 3.0 32 0.205 13 0.0 23 3.0 33 0.205 70 0 0 3DFACE 8 pillar_base 10 0.0 20 3.0 30 1.5 11 0.0 21 2.795 31 0.205 12 0.0 22 2.795 32 1.5 13 0.0 23 2.795 33 1.5 70 1 0 3DFACE 8 pillar_base 10 0.0 20 2.795 30 0.205 11 0.0 21 3.0 31 1.5 12 0.0 22 3.0 32 0.205 13 0.0 23 3.0 33 0.205 70 1 0 3DFACE 8 pillar_base 10 0.0 20 0.205 30 0.205 11 0.0 21 0.497732043121051 31 0.0 12 0.0 22 0.205 32 0.0 13 0.0 23 0.205 33 0.0 70 1 0 3DFACE 8 pillar_base 10 0.0 20 0.497732043121051 30 0.0 11 0.0 21 0.205 31 0.205 12 0.0 22 1.5 32 0.205 13 0.0 23 1.5 33 0.205 70 13 0 3DFACE 8 pillar_base 10 0.0 20 0.497732043121051 30 0.0 11 0.0 21 1.5 31 0.205 12 -1.11022302462516e-16 22 0.878679656440357 32 0.0 13 -1.11022302462516e-16 23 0.878679656440357 33 0.0 70 3 0 3DFACE 8 pillar_base 10 -1.11022302462516e-16 20 0.878679656440357 30 0.0 11 0.0 21 1.5 31 0.205 12 2.77555756156289e-17 22 1.20163144893051 32 0.0 13 2.77555756156289e-17 23 1.20163144893051 33 0.0 70 3 0 3DFACE 8 pillar_base 10 2.77555756156289e-17 20 1.20163144893051 30 0.0 11 0.0 21 1.5 31 0.205 12 0.0 22 1.5 32 0.0 13 0.0 23 1.5 33 0.0 70 1 0 3DFACE 8 pillar_base 10 0.0 20 0.205 30 0.205 11 0.0 21 0.205 31 0.0 12 0.0 22 0.0 32 0.0 13 0.0 23 0.0 33 0.0 70 0 0 3DFACE 8 pillar_base 10 0.0 20 3.0 30 2.795 11 0.0 21 2.795 31 1.5 12 0.0 22 2.795 32 2.795 13 0.0 23 2.795 33 2.795 70 1 0 3DFACE 8 pillar_base 10 0.0 20 2.795 30 1.5 11 0.0 21 3.0 31 2.795 12 0.0 22 3.0 32 1.5 13 0.0 23 3.0 33 1.5 70 1 0 3DFACE 8 pillar_base 10 0.0 20 3.0 30 2.795 11 0.0 21 2.795 31 2.795 12 0.0 22 3.0 32 3.0 13 0.0 23 3.0 33 3.0 70 0 0 3DFACE 8 pillar_base 10 0.0 20 0.205 30 2.795 11 0.0 21 0.0 31 2.795 12 0.0 22 0.0 32 3.0 13 0.0 23 0.0 33 3.0 70 0 0 3DFACE 8 pillar_base 10 0.0 20 0.205 30 2.795 11 0.0 21 0.0 31 3.0 12 0.0 22 0.205 32 3.0 13 0.0 23 0.205 33 3.0 70 0 0 3DFACE 8 pillar_base 10 0.0 20 3.0 30 0.0 11 0.0 21 2.795 31 0.0 12 0.0 22 2.795 32 0.205 13 0.0 23 2.795 33 0.205 70 0 0 3DFACE 8 pillar_base 10 0.0 20 0.205 30 2.795 11 0.0 21 0.0 31 1.5 12 0.0 22 0.0 32 2.795 13 0.0 23 0.0 33 2.795 70 1 0 3DFACE 8 pillar_base 10 0.0 20 0.0 30 1.5 11 0.0 21 0.205 31 2.795 12 0.0 22 0.205 32 1.5 13 0.0 23 0.205 33 1.5 70 1 0 3DFACE 8 pillar_base 10 0.0 20 1.79836855106949 30 3.0 11 0.0 21 1.5 31 2.795 12 0.0 22 1.5 32 3.0 13 0.0 23 1.5 33 3.0 70 1 0 3DFACE 8 pillar_base 10 0.0 20 1.5 30 2.795 11 0.0 21 1.79836855106949 31 3.0 12 0.0 22 2.795 32 2.795 13 0.0 23 2.795 33 2.795 70 3 0 3DFACE 8 pillar_base 10 0.0 20 2.795 30 2.795 11 0.0 21 1.79836855106949 31 3.0 12 0.0 22 2.12132034355964 32 3.0 13 0.0 23 2.12132034355964 33 3.0 70 13 0 3DFACE 8 pillar_base 10 0.0 20 2.795 30 2.795 11 0.0 21 2.12132034355964 31 3.0 12 0.0 22 2.50226795687895 32 3.0 13 0.0 23 2.50226795687895 33 3.0 70 13 0 3DFACE 8 pillar_base 10 0.0 20 2.795 30 2.795 11 0.0 21 2.50226795687895 31 3.0 12 0.0 22 2.795 32 3.0 13 0.0 23 2.795 33 3.0 70 1 0 3DFACE 8 pillar_base 10 0.0 20 0.497732043121051 30 3.0 11 0.0 21 0.205 31 2.795 12 0.0 22 0.205 32 3.0 13 0.0 23 0.205 33 3.0 70 1 0 3DFACE 8 pillar_base 10 0.0 20 0.205 30 2.795 11 0.0 21 0.497732043121051 31 3.0 12 0.0 22 1.5 32 2.795 13 0.0 23 1.5 33 2.795 70 3 0 3DFACE 8 pillar_base 10 0.0 20 1.5 30 2.795 11 0.0 21 0.497732043121051 31 3.0 12 0.0 22 0.878679656440357 32 3.0 13 0.0 23 0.878679656440357 33 3.0 70 13 0 3DFACE 8 pillar_base 10 0.0 20 1.5 30 2.795 11 0.0 21 0.878679656440357 31 3.0 12 0.0 22 1.20163144893051 32 3.0 13 0.0 23 1.20163144893051 33 3.0 70 13 0 3DFACE 8 pillar_base 10 0.0 20 1.5 30 2.795 11 0.0 21 1.20163144893051 31 3.0 12 0.0 22 1.5 32 3.0 13 0.0 23 1.5 33 3.0 70 1 0 3DFACE 8 pillar_base 10 0.0 20 2.795 30 0.205 11 0.0 21 1.5 31 0.0 12 0.0 22 1.5 32 0.205 13 0.0 23 1.5 33 0.205 70 1 0 3DFACE 8 pillar_base 10 0.0 20 1.5 30 0.0 11 0.0 21 2.795 31 0.205 12 0.0 22 1.79836855106949 32 0.0 13 0.0 23 1.79836855106949 33 0.0 70 3 0 3DFACE 8 pillar_base 10 0.0 20 1.79836855106949 30 0.0 11 0.0 21 2.795 31 0.205 12 0.0 22 2.12132034355964 32 0.0 13 0.0 23 2.12132034355964 33 0.0 70 3 0 3DFACE 8 pillar_base 10 0.0 20 2.12132034355964 30 0.0 11 0.0 21 2.795 31 0.205 12 -1.11022302462516e-16 22 2.50226795687895 32 0.0 13 -1.11022302462516e-16 23 2.50226795687895 33 0.0 70 3 0 3DFACE 8 pillar_base 10 -1.11022302462516e-16 20 2.50226795687895 30 0.0 11 0.0 21 2.795 31 0.205 12 0.0 22 2.795 32 0.0 13 0.0 23 2.795 33 0.0 70 1 0 3DFACE 8 pillar_base 10 0.0 20 0.205 30 0.205 11 0.0 21 0.0 31 0.0 12 0.0 22 0.0 32 0.205 13 0.0 23 0.0 33 0.205 70 0 0 3DFACE 8 pillar_base 10 0.0 20 0.205 30 1.5 11 0.0 21 0.0 31 0.205 12 0.0 22 0.0 32 1.5 13 0.0 23 0.0 33 1.5 70 1 0 3DFACE 8 pillar_base 10 0.0 20 0.0 30 0.205 11 0.0 21 0.205 31 1.5 12 0.0 22 0.205 32 0.205 13 0.0 23 0.205 33 0.205 70 1 0 3DFACE 8 pillar_base 10 0.0 20 1.5 30 2.795 11 0.0 21 0.205 31 1.5 12 0.0 22 0.205 32 2.795 13 0.0 23 0.205 33 2.795 70 1 0 3DFACE 8 pillar_base 10 0.0 20 0.205 30 1.5 11 0.0 21 1.5 31 2.795 12 0.0 22 0.205 32 0.205 13 0.0 23 0.205 33 0.205 70 3 0 3DFACE 8 pillar_base 10 0.0 20 0.205 30 0.205 11 0.0 21 1.5 31 2.795 12 0.0 22 1.5 32 0.205 13 0.0 23 1.5 33 0.205 70 3 0 3DFACE 8 pillar_base 10 0.0 20 1.5 30 0.205 11 0.0 21 1.5 31 2.795 12 0.0 22 2.795 32 2.795 13 0.0 23 2.795 33 2.795 70 13 0 3DFACE 8 pillar_base 10 0.0 20 1.5 30 0.205 11 0.0 21 2.795 31 2.795 12 0.0 22 2.795 32 0.205 13 0.0 23 2.795 33 0.205 70 3 0 3DFACE 8 pillar_base 10 0.0 20 2.795 30 0.205 11 0.0 21 2.795 31 2.795 12 0.0 22 2.795 32 1.5 13 0.0 23 2.795 33 1.5 70 1 0 LINE 8 pillar_base 10 3.0 20 0.205 30 2.795 11 3.0 21 1.5 31 1.5 0 LINE 8 pillar_base 10 3.0 20 2.795 30 1.5 11 3.0 21 1.5 31 1.5 0 LINE 8 pillar_base 10 3.0 20 1.5 30 1.5 11 3.0 21 1.5 31 0.205 0 LINE 8 pillar_base 10 3.0 20 1.5 30 1.5 11 3.0 21 2.795 31 0.205 0 LINE 8 pillar_base 10 3.0 20 1.5 30 2.795 11 3.0 21 1.5 31 1.5 0 LINE 8 pillar_base 10 3.0 20 1.5 30 1.5 11 3.0 21 0.205 31 1.5 0 LINE 8 pillar_base 10 3.0 20 1.5 30 1.5 11 3.0 21 0.205 31 0.205 0 LINE 8 pillar_base 10 3.0 20 2.795 30 2.795 11 3.0 21 1.5 31 1.5 0 3DFACE 8 pillar_base 10 3.0 20 0.205 30 0.205 11 3.0 21 0.0 31 0.205 12 3.0 22 0.0 32 0.0 13 3.0 23 0.0 33 0.0 70 0 0 3DFACE 8 pillar_base 10 3.0 20 0.205 30 0.205 11 3.0 21 0.0 31 1.5 12 3.0 22 0.0 32 0.205 13 3.0 23 0.0 33 0.205 70 1 0 3DFACE 8 pillar_base 10 3.0 20 0.0 30 1.5 11 3.0 21 0.205 31 0.205 12 3.0 22 0.205 32 1.5 13 3.0 23 0.205 33 1.5 70 1 0 3DFACE 8 pillar_base 10 3.0 20 3.0 30 3.0 11 3.0 21 2.795 31 2.795 12 3.0 22 3.0 32 2.795 13 3.0 23 3.0 33 2.795 70 0 0 3DFACE 8 pillar_base 10 3.0 20 3.0 30 1.5 11 3.0 21 2.795 31 2.795 12 3.0 22 2.795 32 1.5 13 3.0 23 2.795 33 1.5 70 1 0 3DFACE 8 pillar_base 10 3.0 20 2.795 30 2.795 11 3.0 21 3.0 31 1.5 12 3.0 22 3.0 32 2.795 13 3.0 23 3.0 33 2.795 70 1 0 3DFACE 8 pillar_base 10 3.0 20 0.205 30 1.5 11 3.0 21 0.0 31 2.795 12 3.0 22 0.0 32 1.5 13 3.0 23 0.0 33 1.5 70 1 0 3DFACE 8 pillar_base 10 3.0 20 0.0 30 2.795 11 3.0 21 0.205 31 1.5 12 3.0 22 0.205 32 2.795 13 3.0 23 0.205 33 2.795 70 1 0 3DFACE 8 pillar_base 10 3.0 20 3.0 30 0.205 11 3.0 21 2.795 31 1.5 12 3.0 22 2.795 32 0.205 13 3.0 23 2.795 33 0.205 70 1 0 3DFACE 8 pillar_base 10 3.0 20 2.795 30 1.5 11 3.0 21 3.0 31 0.205 12 3.0 22 3.0 32 1.5 13 3.0 23 3.0 33 1.5 70 1 0 3DFACE 8 pillar_base 10 3.0 20 0.205 30 3.0 11 3.0 21 0.0 31 3.0 12 3.0 22 0.205 32 2.795 13 3.0 23 0.205 33 2.795 70 0 0 3DFACE 8 pillar_base 10 3.0 20 0.205 30 2.795 11 3.0 21 0.0 31 3.0 12 3.0 22 0.0 32 2.795 13 3.0 23 0.0 33 2.795 70 0 0 3DFACE 8 pillar_base 10 3.0 20 3.0 30 0.205 11 3.0 21 2.795 31 0.205 12 3.0 22 3.0 32 0.0 13 3.0 23 3.0 33 0.0 70 0 0 3DFACE 8 pillar_base 10 3.0 20 1.79836855106949 30 0.0 11 3.0 21 1.5 31 0.205 12 3.0 22 1.5 32 0.0 13 3.0 23 1.5 33 0.0 70 1 0 3DFACE 8 pillar_base 10 3.0 20 1.5 30 0.205 11 3.0 21 1.79836855106949 31 0.0 12 3.0 22 2.795 32 0.205 13 3.0 23 2.795 33 0.205 70 3 0 3DFACE 8 pillar_base 10 3.0 20 2.795 30 0.205 11 3.0 21 1.79836855106949 31 0.0 12 3.0 22 2.12132034355964 32 0.0 13 3.0 23 2.12132034355964 33 0.0 70 13 0 3DFACE 8 pillar_base 10 3.0 20 2.795 30 0.205 11 3.0 21 2.12132034355964 31 0.0 12 3.0 22 2.50226795687895 32 0.0 13 3.0 23 2.50226795687895 33 0.0 70 13 0 3DFACE 8 pillar_base 10 3.0 20 2.795 30 0.205 11 3.0 21 2.50226795687895 31 0.0 12 3.0 22 2.795 32 0.0 13 3.0 23 2.795 33 0.0 70 1 0 3DFACE 8 pillar_base 10 3.0 20 3.0 30 0.0 11 3.0 21 2.795 31 0.205 12 3.0 22 2.795 32 0.0 13 3.0 23 2.795 33 0.0 70 0 0 3DFACE 8 pillar_base 10 3.0 20 0.497732043121051 30 0.0 11 3.0 21 0.205 31 0.205 12 3.0 22 0.205 32 0.0 13 3.0 23 0.205 33 0.0 70 1 0 3DFACE 8 pillar_base 10 3.0 20 0.205 30 0.205 11 3.0 21 0.497732043121051 31 0.0 12 3.0 22 1.5 32 0.205 13 3.0 23 1.5 33 0.205 70 3 0 3DFACE 8 pillar_base 10 3.0 20 1.5 30 0.205 11 3.0 21 0.497732043121051 31 0.0 12 3.0 22 0.878679656440357 32 0.0 13 3.0 23 0.878679656440357 33 0.0 70 13 0 3DFACE 8 pillar_base 10 3.0 20 1.5 30 0.205 11 3.0 21 0.878679656440357 31 0.0 12 3.0 22 1.20163144893051 32 0.0 13 3.0 23 1.20163144893051 33 0.0 70 13 0 3DFACE 8 pillar_base 10 3.0 20 1.5 30 0.205 11 3.0 21 1.20163144893051 31 0.0 12 3.0 22 1.5 32 0.0 13 3.0 23 1.5 33 0.0 70 1 0 3DFACE 8 pillar_base 10 3.0 20 3.0 30 3.0 11 3.0 21 2.795 31 3.0 12 3.0 22 2.795 32 2.795 13 3.0 23 2.795 33 2.795 70 0 0 3DFACE 8 pillar_base 10 3.0 20 1.5 30 2.795 11 3.0 21 0.205 31 3.0 12 3.0 22 0.205 32 2.795 13 3.0 23 0.205 33 2.795 70 1 0 3DFACE 8 pillar_base 10 3.0 20 0.205 30 3.0 11 3.0 21 1.5 31 2.795 12 3.0 22 0.497732043121051 32 3.0 13 3.0 23 0.497732043121051 33 3.0 70 3 0 3DFACE 8 pillar_base 10 3.0 20 0.497732043121051 30 3.0 11 3.0 21 1.5 31 2.795 12 3.0 22 0.878679656440357 32 3.0 13 3.0 23 0.878679656440357 33 3.0 70 3 0 3DFACE 8 pillar_base 10 3.0 20 0.878679656440357 30 3.0 11 3.0 21 1.5 31 2.795 12 3.0 22 1.20163144893051 32 3.0 13 3.0 23 1.20163144893051 33 3.0 70 3 0 3DFACE 8 pillar_base 10 3.0 20 1.20163144893051 30 3.0 11 3.0 21 1.5 31 2.795 12 3.0 22 1.5 32 3.0 13 3.0 23 1.5 33 3.0 70 1 0 3DFACE 8 pillar_base 10 3.0 20 2.795 30 2.795 11 3.0 21 1.5 31 3.0 12 3.0 22 1.5 32 2.795 13 3.0 23 1.5 33 2.795 70 1 0 3DFACE 8 pillar_base 10 3.0 20 1.5 30 3.0 11 3.0 21 2.795 31 2.795 12 3.0 22 1.79836855106949 32 3.0 13 3.0 23 1.79836855106949 33 3.0 70 3 0 3DFACE 8 pillar_base 10 3.0 20 1.79836855106949 30 3.0 11 3.0 21 2.795 31 2.795 12 3.0 22 2.12132034355964 32 3.0 13 3.0 23 2.12132034355964 33 3.0 70 3 0 3DFACE 8 pillar_base 10 3.0 20 2.12132034355964 30 3.0 11 3.0 21 2.795 31 2.795 12 3.0 22 2.50226795687895 32 3.0 13 3.0 23 2.50226795687895 33 3.0 70 3 0 3DFACE 8 pillar_base 10 3.0 20 2.50226795687895 30 3.0 11 3.0 21 2.795 31 2.795 12 3.0 22 2.795 32 3.0 13 3.0 23 2.795 33 3.0 70 1 0 3DFACE 8 pillar_base 10 3.0 20 1.5 30 0.205 11 3.0 21 0.205 31 1.5 12 3.0 22 0.205 32 0.205 13 3.0 23 0.205 33 0.205 70 1 0 3DFACE 8 pillar_base 10 3.0 20 0.205 30 1.5 11 3.0 21 1.5 31 2.795 12 3.0 22 0.205 32 2.795 13 3.0 23 0.205 33 2.795 70 1 0 3DFACE 8 pillar_base 10 3.0 20 1.5 30 2.795 11 3.0 21 0.205 31 1.5 12 3.0 22 1.5 32 0.205 13 3.0 23 1.5 33 0.205 70 15 0 3DFACE 8 pillar_base 10 3.0 20 1.5 30 2.795 11 3.0 21 1.5 31 0.205 12 3.0 22 2.795 32 0.205 13 3.0 23 2.795 33 0.205 70 13 0 3DFACE 8 pillar_base 10 3.0 20 1.5 30 2.795 11 3.0 21 2.795 31 0.205 12 3.0 22 2.795 32 2.795 13 3.0 23 2.795 33 2.795 70 3 0 3DFACE 8 pillar_base 10 3.0 20 2.795 30 2.795 11 3.0 21 2.795 31 0.205 12 3.0 22 2.795 32 1.5 13 3.0 23 2.795 33 1.5 70 1 0 3DFACE 8 pillar_base 10 0.8525 20 3.0 30 2.1475 11 1.5 21 3.0 31 1.5 12 0.205 22 3.0 32 1.5 13 0.205 23 3.0 33 1.5 70 0 0 3DFACE 8 pillar_base 10 0.8525 20 3.0 30 0.8525 11 1.5 21 3.0 31 0.205 12 0.205 22 3.0 32 0.205 13 0.205 23 3.0 33 0.205 70 0 0 3DFACE 8 pillar_base 10 2.1475 20 3.0 30 0.8525 11 2.795 21 3.0 31 0.205 12 1.5 22 3.0 32 0.205 13 1.5 23 3.0 33 0.205 70 0 0 3DFACE 8 pillar_base 10 0.205 20 3.0 30 2.795 11 0.8525 21 3.0 31 2.1475 12 0.205 22 3.0 32 1.5 13 0.205 23 3.0 33 1.5 70 0 0 3DFACE 8 pillar_base 10 2.1475 20 3.0 30 2.1475 11 2.795 21 3.0 31 1.5 12 1.5 22 3.0 32 1.5 13 1.5 23 3.0 33 1.5 70 0 0 3DFACE 8 pillar_base 10 1.5 20 3.0 30 1.5 11 2.1475 21 3.0 31 0.8525 12 1.5 22 3.0 32 0.205 13 1.5 23 3.0 33 0.205 70 0 0 3DFACE 8 pillar_base 10 1.5 20 0.0 30 2.795 11 1.5 21 0.0 31 1.5 12 2.1475 22 0.0 32 2.1475 13 2.1475 23 0.0 33 2.1475 70 0 0 3DFACE 8 pillar_base 10 0.205 20 0.0 30 2.795 11 0.8525 21 0.0 31 2.1475 12 1.5 22 0.0 32 2.795 13 1.5 23 0.0 33 2.795 70 0 0 3DFACE 8 pillar_base 10 1.5 20 0.0 30 2.795 11 2.1475 21 0.0 31 2.1475 12 2.795 22 0.0 32 2.795 13 2.795 23 0.0 33 2.795 70 0 0 3DFACE 8 pillar_base 10 0.205 20 0.0 30 1.5 11 0.8525 21 0.0 31 0.8525 12 1.5 22 0.0 32 1.5 13 1.5 23 0.0 33 1.5 70 0 0 3DFACE 8 pillar_base 10 1.5 20 0.0 30 1.5 11 2.1475 21 0.0 31 0.8525 12 2.795 22 0.0 32 1.5 13 2.795 23 0.0 33 1.5 70 0 0 3DFACE 8 pillar_base 10 0.8525 20 0.0 30 0.8525 11 0.205 21 0.0 31 0.205 12 1.5 22 0.0 32 0.205 13 1.5 23 0.0 33 0.205 70 0 0 3DFACE 8 pillar_base 10 0.205 20 0.0 30 0.205 11 0.0 21 0.0 31 0.0 12 0.205 22 0.0 32 0.0 13 0.205 23 0.0 33 0.0 70 0 0 3DFACE 8 pillar_base 10 1.5 20 0.0 30 1.5 11 0.8525 21 0.0 31 0.8525 12 1.5 22 0.0 32 0.205 13 1.5 23 0.0 33 0.205 70 0 0 3DFACE 8 pillar_base 10 2.795 20 0.0 30 2.795 11 2.1475 21 0.0 31 2.1475 12 2.795 22 0.0 32 1.5 13 2.795 23 0.0 33 1.5 70 0 0 3DFACE 8 pillar_base 10 2.795 20 0.0 30 1.5 11 2.1475 21 0.0 31 0.8525 12 2.795 22 0.0 32 0.205 13 2.795 23 0.0 33 0.205 70 0 0 3DFACE 8 pillar_base 10 3.0 20 0.0 30 3.0 11 2.795 21 0.0 31 2.795 12 3.0 22 0.0 32 2.795 13 3.0 23 0.0 33 2.795 70 0 0 3DFACE 8 pillar_base 10 2.1475 20 0.0 30 2.1475 11 1.5 21 0.0 31 1.5 12 2.795 22 0.0 32 1.5 13 2.795 23 0.0 33 1.5 70 0 0 3DFACE 8 pillar_base 10 2.1475 20 0.0 30 0.8525 11 1.5 21 0.0 31 0.205 12 2.795 22 0.0 32 0.205 13 2.795 23 0.0 33 0.205 70 0 0 3DFACE 8 pillar_base 10 1.5 20 0.0 30 1.5 11 1.5 21 0.0 31 0.205 12 2.1475 22 0.0 32 0.8525 13 2.1475 23 0.0 33 0.8525 70 0 0 3DFACE 8 pillar_base 10 2.795 20 0.0 30 0.205 11 2.795 21 0.0 31 0.0 12 3.0 22 0.0 32 0.0 13 3.0 23 0.0 33 0.0 70 0 0 3DFACE 8 pillar_base 10 0.0 20 0.0 30 3.0 11 0.0 21 0.0 31 2.795 12 0.205 22 0.0 32 2.795 13 0.205 23 0.0 33 2.795 70 0 0 3DFACE 8 pillar_base 10 0.205 20 0.0 30 2.795 11 0.205 21 0.0 31 1.5 12 0.8525 22 0.0 32 2.1475 13 0.8525 23 0.0 33 2.1475 70 0 0 3DFACE 8 pillar_base 10 0.205 20 0.0 30 1.5 11 0.205 21 0.0 31 0.205 12 0.8525 22 0.0 32 0.8525 13 0.8525 23 0.0 33 0.8525 70 0 0 3DFACE 8 pillar_base 10 0.0 20 0.0 30 0.205 11 0.0 21 0.0 31 0.0 12 0.205 22 0.0 32 0.205 13 0.205 23 0.0 33 0.205 70 0 0 3DFACE 8 pillar_base 10 0.8525 20 0.0 30 2.1475 11 0.205 21 0.0 31 1.5 12 1.5 22 0.0 32 1.5 13 1.5 23 0.0 33 1.5 70 0 0 3DFACE 8 pillar_base 10 3.0 20 3.0 30 0.205 11 3.0 21 3.0 31 0.0 12 2.795 22 3.0 32 0.205 13 2.795 23 3.0 33 0.205 70 0 0 3DFACE 8 pillar_base 10 1.5 20 3.0 30 2.795 11 1.5 21 3.0 31 1.5 12 0.8525 22 3.0 32 2.1475 13 0.8525 23 3.0 33 2.1475 70 0 0 3DFACE 8 pillar_base 10 2.795 20 3.0 30 2.795 11 2.795 21 3.0 31 1.5 12 2.1475 22 3.0 32 2.1475 13 2.1475 23 3.0 33 2.1475 70 0 0 3DFACE 8 pillar_base 10 2.795 20 3.0 30 1.5 11 2.1475 21 3.0 31 0.8525 12 1.5 22 3.0 32 1.5 13 1.5 23 3.0 33 1.5 70 0 0 3DFACE 8 pillar_base 10 0.205 20 3.0 30 3.0 11 0.205 21 3.0 31 2.795 12 0.0 22 3.0 32 3.0 13 0.0 23 3.0 33 3.0 70 0 0 3DFACE 8 pillar_base 10 2.795 20 3.0 30 1.5 11 2.795 21 3.0 31 0.205 12 2.1475 22 3.0 32 0.8525 13 2.1475 23 3.0 33 0.8525 70 0 0 3DFACE 8 pillar_base 10 3.0 20 3.0 30 3.0 11 2.795 21 3.0 31 2.795 12 2.795 22 3.0 32 3.0 13 2.795 23 3.0 33 3.0 70 0 0 3DFACE 8 pillar_base 10 1.5 20 3.0 30 2.795 11 2.1475 21 3.0 31 2.1475 12 1.5 22 3.0 32 1.5 13 1.5 23 3.0 33 1.5 70 0 0 3DFACE 8 pillar_base 10 0.205 20 3.0 30 0.205 11 0.0 21 3.0 31 0.0 12 0.0 22 3.0 32 0.205 13 0.0 23 3.0 33 0.205 70 0 0 3DFACE 8 pillar_base 10 0.205 20 3.0 30 1.5 11 0.8525 21 3.0 31 0.8525 12 0.205 22 3.0 32 0.205 13 0.205 23 3.0 33 0.205 70 0 0 3DFACE 8 pillar_base 10 2.795 20 3.0 30 2.795 11 2.1475 21 3.0 31 2.1475 12 1.5 22 3.0 32 2.795 13 1.5 23 3.0 33 2.795 70 0 0 3DFACE 8 pillar_base 10 1.5 20 3.0 30 2.795 11 0.8525 21 3.0 31 2.1475 12 0.205 22 3.0 32 2.795 13 0.205 23 3.0 33 2.795 70 0 0 3DFACE 8 pillar_base 10 1.5 20 3.0 30 1.5 11 0.8525 21 3.0 31 0.8525 12 0.205 22 3.0 32 1.5 13 0.205 23 3.0 33 1.5 70 0 0 3DFACE 8 pillar_a 10 1.42550697334953 20 0.743659607729131 30 3.0 11 1.5 21 1.5 31 3.0 12 1.35173135526774 22 0.754603186893545 32 3.0 13 1.35173135526774 23 0.754603186893545 33 3.0 70 1 0 3DFACE 8 pillar_a 10 1.5 20 1.5 30 3.0 11 1.42550697334953 21 0.743659607729131 31 3.0 12 1.5 22 0.74 32 3.0 13 1.5 23 0.74 33 3.0 70 1 0 3DFACE 8 pillar_a 10 0.868083094650066 20 1.9222333770949 30 3.0 11 0.82973983909525 21 1.85826151998776 31 1.5 12 0.82973983909525 22 1.85826151998776 32 3.0 13 0.82973983909525 23 1.85826151998776 33 3.0 70 1 0 3DFACE 8 pillar_a 10 0.82973983909525 20 1.85826151998776 30 1.5 11 0.868083094650066 21 1.9222333770949 31 3.0 12 0.868083094650066 22 1.9222333770949 32 1.5 13 0.868083094650066 23 1.9222333770949 33 1.5 70 1 0 3DFACE 8 pillar_a 10 0.82973983909525 20 1.85826151998776 30 3.0 11 0.797851555291422 21 1.79083940859747 31 1.5 12 0.797851555291422 22 1.79083940859747 32 3.0 13 0.797851555291422 23 1.79083940859747 33 3.0 70 1 0 3DFACE 8 pillar_a 10 0.797851555291422 20 1.79083940859747 30 1.5 11 0.82973983909525 21 1.85826151998776 31 3.0 12 0.82973983909525 22 1.85826151998776 32 1.5 13 0.82973983909525 23 1.85826151998776 33 1.5 70 1 0 3DFACE 8 pillar_a 10 0.754603186893545 20 1.64826864473226 30 3.0 11 0.74365960772913 21 1.57449302665047 31 1.5 12 0.743659607729131 22 1.57449302665047 32 3.0 13 0.743659607729131 23 1.57449302665047 33 3.0 70 1 0 3DFACE 8 pillar_a 10 0.74365960772913 20 1.57449302665047 30 1.5 11 0.754603186893545 21 1.64826864473226 31 3.0 12 0.754603186893545 22 1.64826864473226 32 1.5 13 0.754603186893545 23 1.64826864473226 33 1.5 70 1 0 3DFACE 8 pillar_a 10 1.64826864473226 20 2.24539681310646 30 3.0 11 1.72061635471339 21 2.22727465515648 31 1.5 12 1.64826864473226 22 2.24539681310646 32 1.5 13 1.64826864473226 23 2.24539681310646 33 1.5 70 1 0 3DFACE 8 pillar_a 10 1.72061635471339 20 2.22727465515648 30 1.5 11 1.64826864473226 21 2.24539681310646 31 3.0 12 1.72061635471339 22 2.22727465515648 32 3.0 13 1.72061635471339 23 2.22727465515648 33 3.0 70 1 0 3DFACE 8 pillar_a 10 1.57449302665047 20 2.25634039227087 30 3.0 11 1.64826864473226 21 2.24539681310646 31 1.5 12 1.57449302665047 22 2.25634039227087 32 1.5 13 1.57449302665047 23 2.25634039227087 33 1.5 70 1 0 3DFACE 8 pillar_a 10 1.64826864473226 20 2.24539681310646 30 1.5 11 1.57449302665047 21 2.25634039227087 31 3.0 12 1.64826864473226 22 2.24539681310646 32 3.0 13 1.64826864473226 23 2.24539681310646 33 3.0 70 1 0 3DFACE 8 pillar_a 10 0.962598846298224 20 2.03740115370178 30 3.0 11 1.01786110403563 21 2.08748794455568 31 1.5 12 0.962598846298224 22 2.03740115370178 32 1.5 13 0.962598846298224 23 2.03740115370178 33 1.5 70 1 0 3DFACE 8 pillar_a 10 1.01786110403563 20 2.08748794455568 30 1.5 11 0.962598846298224 21 2.03740115370178 31 3.0 12 1.01786110403563 22 2.08748794455568 32 3.0 13 1.01786110403563 23 2.08748794455568 33 3.0 70 1 0 3DFACE 8 pillar_a 10 0.962598846298224 20 2.03740115370178 30 3.0 11 0.91251205544432 21 1.98213889596437 31 1.5 12 0.91251205544432 22 1.98213889596437 32 3.0 13 0.91251205544432 23 1.98213889596437 33 3.0 70 1 0 3DFACE 8 pillar_a 10 0.91251205544432 20 1.98213889596437 30 1.5 11 0.962598846298224 21 2.03740115370178 31 3.0 12 0.962598846298224 22 2.03740115370178 32 1.5 13 0.962598846298224 23 2.03740115370178 33 1.5 70 1 0 3DFACE 8 pillar_a 10 2.22727465515648 20 1.72061635471339 30 1.5 11 2.20214844470858 21 1.79083940859747 31 3.0 12 2.22727465515648 22 1.72061635471339 32 3.0 13 2.22727465515648 23 1.72061635471339 33 3.0 70 1 0 3DFACE 8 pillar_a 10 2.20214844470858 20 1.79083940859747 30 3.0 11 2.22727465515648 21 1.72061635471339 31 1.5 12 2.20214844470858 22 1.79083940859747 32 1.5 13 2.20214844470858 23 1.79083940859747 33 1.5 70 1 0 3DFACE 8 pillar_a 10 1.35173135526774 20 0.754603186893545 30 3.0 11 1.27938364528661 21 0.772725344843521 31 1.5 12 1.35173135526774 22 0.754603186893545 32 1.5 13 1.35173135526774 23 0.754603186893545 33 1.5 70 1 0 3DFACE 8 pillar_a 10 1.27938364528661 20 0.772725344843521 30 1.5 11 1.35173135526774 21 0.754603186893545 31 3.0 12 1.27938364528661 22 0.772725344843521 32 3.0 13 1.27938364528661 23 0.772725344843521 33 3.0 70 1 0 3DFACE 8 pillar_a 10 1.5 20 0.74 30 3.0 11 1.42550697334953 21 0.74365960772913 31 1.5 12 1.5 22 0.74 32 1.5 13 1.5 23 0.74 33 1.5 70 1 0 3DFACE 8 pillar_a 10 1.42550697334953 20 0.74365960772913 30 1.5 11 1.5 21 0.74 31 3.0 12 1.42550697334953 22 0.743659607729131 32 3.0 13 1.42550697334953 23 0.743659607729131 33 3.0 70 1 0 3DFACE 8 pillar_a 10 1.57449302665047 20 0.743659607729131 30 3.0 11 1.5 21 0.74 31 1.5 12 1.57449302665047 22 0.743659607729131 32 1.5 13 1.57449302665047 23 0.743659607729131 33 1.5 70 1 0 3DFACE 8 pillar_a 10 1.5 20 0.74 30 1.5 11 1.57449302665047 21 0.743659607729131 31 3.0 12 1.5 22 0.74 32 3.0 13 1.5 23 0.74 33 3.0 70 1 0 3DFACE 8 pillar_a 10 2.08748794455568 20 1.01786110403563 30 1.5 11 2.13191690534993 21 1.0777666229051 31 3.0 12 2.08748794455568 22 1.01786110403563 32 3.0 13 2.08748794455568 23 1.01786110403563 33 3.0 70 1 0 3DFACE 8 pillar_a 10 2.13191690534993 20 1.0777666229051 30 3.0 11 2.08748794455568 21 1.01786110403563 31 1.5 12 2.13191690534993 22 1.0777666229051 32 1.5 13 2.13191690534993 23 1.0777666229051 33 1.5 70 1 0 3DFACE 8 pillar_a 10 1.27938364528661 20 0.772725344843521 30 3.0 11 1.20916059140253 21 0.797851555291422 31 1.5 12 1.27938364528661 22 0.772725344843521 32 1.5 13 1.27938364528661 23 0.772725344843521 33 1.5 70 1 0 3DFACE 8 pillar_a 10 1.20916059140253 20 0.797851555291422 30 1.5 11 1.27938364528661 21 0.772725344843521 31 3.0 12 1.20916059140253 22 0.797851555291422 32 3.0 13 1.20916059140253 23 0.797851555291422 33 3.0 70 1 0 3DFACE 8 pillar_a 10 2.25634039227087 20 1.57449302665047 30 1.5 11 2.26 21 1.5 31 3.0 12 2.26 22 1.5 32 1.5 13 2.26 23 1.5 33 1.5 70 1 0 3DFACE 8 pillar_a 10 2.26 20 1.5 30 3.0 11 2.25634039227087 21 1.57449302665047 31 1.5 12 2.25634039227087 22 1.57449302665047 32 3.0 13 2.25634039227087 23 1.57449302665047 33 3.0 70 1 0 3DFACE 8 pillar_a 10 1.42550697334953 20 0.743659607729131 30 3.0 11 1.35173135526774 21 0.754603186893545 31 1.5 12 1.42550697334953 22 0.74365960772913 32 1.5 13 1.42550697334953 23 0.74365960772913 33 1.5 70 1 0 3DFACE 8 pillar_a 10 1.35173135526774 20 0.754603186893545 30 1.5 11 1.42550697334953 21 0.743659607729131 31 3.0 12 1.35173135526774 22 0.754603186893545 32 3.0 13 1.35173135526774 23 0.754603186893545 33 3.0 70 1 0 3DFACE 8 pillar_a 10 1.85826151998776 20 0.82973983909525 30 3.0 11 1.79083940859747 21 0.797851555291422 31 1.5 12 1.85826151998776 22 0.829739839095251 32 1.5 13 1.85826151998776 23 0.829739839095251 33 1.5 70 1 0 3DFACE 8 pillar_a 10 1.79083940859747 20 0.797851555291422 30 1.5 11 1.85826151998776 21 0.82973983909525 31 3.0 12 1.79083940859747 22 0.797851555291422 32 3.0 13 1.79083940859747 23 0.797851555291422 33 3.0 70 1 0 3DFACE 8 pillar_a 10 1.0777666229051 20 2.13191690534993 30 3.0 11 1.14173848001224 21 2.17026016090475 31 1.5 12 1.0777666229051 22 2.13191690534993 32 1.5 13 1.0777666229051 23 2.13191690534993 33 1.5 70 1 0 3DFACE 8 pillar_a 10 1.14173848001224 20 2.17026016090475 30 1.5 11 1.0777666229051 21 2.13191690534993 31 3.0 12 1.14173848001224 22 2.17026016090475 32 3.0 13 1.14173848001224 23 2.17026016090475 33 3.0 70 1 0 3DFACE 8 pillar_a 10 1.01786110403563 20 2.08748794455568 30 3.0 11 1.0777666229051 21 2.13191690534993 31 1.5 12 1.01786110403563 22 2.08748794455568 32 1.5 13 1.01786110403563 23 2.08748794455568 33 1.5 70 1 0 3DFACE 8 pillar_a 10 1.0777666229051 20 2.13191690534993 30 1.5 11 1.01786110403563 21 2.08748794455568 31 3.0 12 1.0777666229051 22 2.13191690534993 32 3.0 13 1.0777666229051 23 2.13191690534993 33 3.0 70 1 0 3DFACE 8 pillar_a 10 1.85826151998776 20 2.17026016090475 30 3.0 11 1.9222333770949 21 2.13191690534994 31 1.5 12 1.85826151998776 22 2.17026016090475 32 1.5 13 1.85826151998776 23 2.17026016090475 33 1.5 70 1 0 3DFACE 8 pillar_a 10 1.9222333770949 20 2.13191690534994 30 1.5 11 1.85826151998776 21 2.17026016090475 31 3.0 12 1.9222333770949 22 2.13191690534993 32 3.0 13 1.9222333770949 23 2.13191690534993 33 3.0 70 1 0 3DFACE 8 pillar_a 10 2.03740115370178 20 0.962598846298225 30 1.5 11 2.08748794455568 21 1.01786110403563 31 3.0 12 2.03740115370178 22 0.962598846298224 32 3.0 13 2.03740115370178 23 0.962598846298224 33 3.0 70 1 0 3DFACE 8 pillar_a 10 2.08748794455568 20 1.01786110403563 30 3.0 11 2.03740115370178 21 0.962598846298225 31 1.5 12 2.08748794455568 22 1.01786110403563 32 1.5 13 2.08748794455568 23 1.01786110403563 33 1.5 70 1 0 3DFACE 8 pillar_a 10 2.24539681310646 20 1.64826864473226 30 1.5 11 2.22727465515648 21 1.72061635471339 31 3.0 12 2.24539681310645 22 1.64826864473226 32 3.0 13 2.24539681310645 23 1.64826864473226 33 3.0 70 1 0 3DFACE 8 pillar_a 10 2.22727465515648 20 1.72061635471339 30 3.0 11 2.24539681310646 21 1.64826864473226 31 1.5 12 2.22727465515648 22 1.72061635471339 32 1.5 13 2.22727465515648 23 1.72061635471339 33 1.5 70 1 0 3DFACE 8 pillar_a 10 2.25634039227087 20 1.42550697334953 30 1.5 11 2.24539681310646 21 1.35173135526774 31 3.0 12 2.24539681310646 22 1.35173135526774 32 1.5 13 2.24539681310646 23 1.35173135526774 33 1.5 70 1 0 3DFACE 8 pillar_a 10 2.24539681310646 20 1.35173135526774 30 3.0 11 2.25634039227087 21 1.42550697334953 31 1.5 12 2.25634039227087 22 1.42550697334953 32 3.0 13 2.25634039227087 23 1.42550697334953 33 3.0 70 1 0 3DFACE 8 pillar_a 10 1.20916059140253 20 0.797851555291422 30 3.0 11 1.14173848001224 21 0.829739839095251 31 1.5 12 1.20916059140253 22 0.797851555291422 32 1.5 13 1.20916059140253 23 0.797851555291422 33 1.5 70 1 0 3DFACE 8 pillar_a 10 1.14173848001224 20 0.829739839095251 30 1.5 11 1.20916059140253 21 0.797851555291422 31 3.0 12 1.14173848001224 22 0.82973983909525 32 3.0 13 1.14173848001224 23 0.82973983909525 33 3.0 70 1 0 3DFACE 8 pillar_a 10 0.797851555291422 20 1.79083940859747 30 3.0 11 0.772725344843522 21 1.72061635471339 31 1.5 12 0.772725344843521 22 1.72061635471339 32 3.0 13 0.772725344843521 23 1.72061635471339 33 3.0 70 1 0 3DFACE 8 pillar_a 10 0.772725344843522 20 1.72061635471339 30 1.5 11 0.797851555291422 21 1.79083940859747 31 3.0 12 0.797851555291422 22 1.79083940859747 32 1.5 13 0.797851555291422 23 1.79083940859747 33 1.5 70 1 0 3DFACE 8 pillar_a 10 1.5 20 2.26 30 3.0 11 1.57449302665047 21 2.25634039227087 31 1.5 12 1.5 22 2.26 32 1.5 13 1.5 23 2.26 33 1.5 70 1 0 3DFACE 8 pillar_a 10 1.57449302665047 20 2.25634039227087 30 1.5 11 1.5 21 2.26 31 3.0 12 1.57449302665047 22 2.25634039227087 32 3.0 13 1.57449302665047 23 2.25634039227087 33 3.0 70 1 0 3DFACE 8 pillar_a 10 1.42550697334953 20 2.25634039227087 30 3.0 11 1.5 21 2.26 31 1.5 12 1.42550697334953 22 2.25634039227087 32 1.5 13 1.42550697334953 23 2.25634039227087 33 1.5 70 1 0 3DFACE 8 pillar_a 10 1.5 20 2.26 30 1.5 11 1.42550697334953 21 2.25634039227087 31 3.0 12 1.5 22 2.26 32 3.0 13 1.5 23 2.26 33 3.0 70 1 0 3DFACE 8 pillar_a 10 1.35173135526774 20 2.24539681310645 30 3.0 11 1.42550697334953 21 2.25634039227087 31 1.5 12 1.35173135526774 22 2.24539681310646 32 1.5 13 1.35173135526774 23 2.24539681310646 33 1.5 70 1 0 3DFACE 8 pillar_a 10 1.42550697334953 20 2.25634039227087 30 1.5 11 1.35173135526774 21 2.24539681310645 31 3.0 12 1.42550697334953 22 2.25634039227087 32 3.0 13 1.42550697334953 23 2.25634039227087 33 3.0 70 1 0 3DFACE 8 pillar_a 10 1.27938364528661 20 2.22727465515648 30 3.0 11 1.35173135526774 21 2.24539681310646 31 1.5 12 1.27938364528661 22 2.22727465515648 32 1.5 13 1.27938364528661 23 2.22727465515648 33 1.5 70 1 0 3DFACE 8 pillar_a 10 1.35173135526774 20 2.24539681310646 30 1.5 11 1.27938364528661 21 2.22727465515648 31 3.0 12 1.35173135526774 22 2.24539681310645 32 3.0 13 1.35173135526774 23 2.24539681310645 33 3.0 70 1 0 3DFACE 8 pillar_a 10 1.20916059140253 20 2.20214844470858 30 3.0 11 1.27938364528661 21 2.22727465515648 31 1.5 12 1.20916059140253 22 2.20214844470858 32 1.5 13 1.20916059140253 23 2.20214844470858 33 1.5 70 1 0 3DFACE 8 pillar_a 10 1.27938364528661 20 2.22727465515648 30 1.5 11 1.20916059140253 21 2.20214844470858 31 3.0 12 1.27938364528661 22 2.22727465515648 32 3.0 13 1.27938364528661 23 2.22727465515648 33 3.0 70 1 0 3DFACE 8 pillar_a 10 2.17026016090475 20 1.85826151998776 30 1.5 11 2.13191690534993 21 1.9222333770949 31 3.0 12 2.17026016090475 22 1.85826151998776 32 3.0 13 2.17026016090475 23 1.85826151998776 33 3.0 70 1 0 3DFACE 8 pillar_a 10 2.13191690534993 20 1.9222333770949 30 3.0 11 2.17026016090475 21 1.85826151998776 31 1.5 12 2.13191690534993 22 1.9222333770949 32 1.5 13 2.13191690534993 23 1.9222333770949 33 1.5 70 1 0 3DFACE 8 pillar_a 10 0.91251205544432 20 1.98213889596437 30 3.0 11 0.868083094650066 21 1.9222333770949 31 1.5 12 0.868083094650066 22 1.9222333770949 32 3.0 13 0.868083094650066 23 1.9222333770949 33 3.0 70 1 0 3DFACE 8 pillar_a 10 0.868083094650066 20 1.9222333770949 30 1.5 11 0.91251205544432 21 1.98213889596437 31 3.0 12 0.91251205544432 22 1.98213889596437 32 1.5 13 0.91251205544432 23 1.98213889596437 33 1.5 70 1 0 3DFACE 8 pillar_a 10 1.9222333770949 20 0.868083094650066 30 3.0 11 1.85826151998776 21 0.829739839095251 31 1.5 12 1.9222333770949 22 0.868083094650066 32 1.5 13 1.9222333770949 23 0.868083094650066 33 1.5 70 1 0 3DFACE 8 pillar_a 10 1.85826151998776 20 0.829739839095251 30 1.5 11 1.9222333770949 21 0.868083094650066 31 3.0 12 1.85826151998776 22 0.82973983909525 32 3.0 13 1.85826151998776 23 0.82973983909525 33 3.0 70 1 0 3DFACE 8 pillar_a 10 1.98213889596437 20 0.91251205544432 30 3.0 11 1.9222333770949 21 0.868083094650066 31 1.5 12 1.98213889596437 22 0.91251205544432 32 1.5 13 1.98213889596437 23 0.91251205544432 33 1.5 70 1 0 3DFACE 8 pillar_a 10 1.9222333770949 20 0.868083094650066 30 1.5 11 1.98213889596437 21 0.91251205544432 31 3.0 12 1.9222333770949 22 0.868083094650066 32 3.0 13 1.9222333770949 23 0.868083094650066 33 3.0 70 1 0 3DFACE 8 pillar_a 10 2.03740115370178 20 0.962598846298224 30 3.0 11 1.98213889596437 21 0.91251205544432 31 1.5 12 2.03740115370178 22 0.962598846298225 32 1.5 13 2.03740115370178 23 0.962598846298225 33 1.5 70 1 0 3DFACE 8 pillar_a 10 1.98213889596437 20 0.91251205544432 30 1.5 11 2.03740115370178 21 0.962598846298224 31 3.0 12 1.98213889596437 22 0.91251205544432 32 3.0 13 1.98213889596437 23 0.91251205544432 33 3.0 70 1 0 3DFACE 8 pillar_a 10 1.01786110403563 20 0.91251205544432 30 3.0 11 0.962598846298224 21 0.962598846298224 31 1.5 12 1.01786110403563 22 0.91251205544432 32 1.5 13 1.01786110403563 23 0.91251205544432 33 1.5 70 1 0 3DFACE 8 pillar_a 10 0.962598846298224 20 0.962598846298224 30 1.5 11 1.01786110403563 21 0.91251205544432 31 3.0 12 0.962598846298224 22 0.962598846298224 32 3.0 13 0.962598846298224 23 0.962598846298224 33 3.0 70 1 0 3DFACE 8 pillar_a 10 1.79083940859747 20 2.20214844470858 30 3.0 11 1.85826151998776 21 2.17026016090475 31 1.5 12 1.79083940859747 22 2.20214844470858 32 1.5 13 1.79083940859747 23 2.20214844470858 33 1.5 70 1 0 3DFACE 8 pillar_a 10 1.85826151998776 20 2.17026016090475 30 1.5 11 1.79083940859747 21 2.20214844470858 31 3.0 12 1.85826151998776 22 2.17026016090475 32 3.0 13 1.85826151998776 23 2.17026016090475 33 3.0 70 1 0 3DFACE 8 pillar_a 10 2.13191690534993 20 1.9222333770949 30 1.5 11 2.08748794455568 21 1.98213889596437 31 3.0 12 2.13191690534993 22 1.9222333770949 32 3.0 13 2.13191690534993 23 1.9222333770949 33 3.0 70 1 0 3DFACE 8 pillar_a 10 2.08748794455568 20 1.98213889596437 30 3.0 11 2.13191690534993 21 1.9222333770949 31 1.5 12 2.08748794455568 22 1.98213889596437 32 1.5 13 2.08748794455568 23 1.98213889596437 33 1.5 70 1 0 3DFACE 8 pillar_a 10 2.25634039227087 20 1.57449302665047 30 1.5 11 2.24539681310645 21 1.64826864473226 31 3.0 12 2.25634039227087 22 1.57449302665047 32 3.0 13 2.25634039227087 23 1.57449302665047 33 3.0 70 1 0 3DFACE 8 pillar_a 10 2.24539681310645 20 1.64826864473226 30 3.0 11 2.25634039227087 21 1.57449302665047 31 1.5 12 2.24539681310646 22 1.64826864473226 32 1.5 13 2.24539681310646 23 1.64826864473226 33 1.5 70 1 0 3DFACE 8 pillar_a 10 1.9222333770949 20 2.13191690534993 30 3.0 11 1.98213889596437 21 2.08748794455568 31 1.5 12 1.9222333770949 22 2.13191690534994 32 1.5 13 1.9222333770949 23 2.13191690534994 33 1.5 70 1 0 3DFACE 8 pillar_a 10 1.98213889596437 20 2.08748794455568 30 1.5 11 1.9222333770949 21 2.13191690534993 31 3.0 12 1.98213889596437 22 2.08748794455568 32 3.0 13 1.98213889596437 23 2.08748794455568 33 3.0 70 1 0 3DFACE 8 pillar_a 10 1.98213889596437 20 2.08748794455568 30 3.0 11 2.03740115370178 21 2.03740115370178 31 1.5 12 1.98213889596437 22 2.08748794455568 32 1.5 13 1.98213889596437 23 2.08748794455568 33 1.5 70 1 0 3DFACE 8 pillar_a 10 2.03740115370178 20 2.03740115370178 30 1.5 11 1.98213889596437 21 2.08748794455568 31 3.0 12 2.03740115370178 22 2.03740115370178 32 3.0 13 2.03740115370178 23 2.03740115370178 33 3.0 70 1 0 3DFACE 8 pillar_a 10 1.72061635471339 20 2.22727465515648 30 3.0 11 1.79083940859747 21 2.20214844470858 31 1.5 12 1.72061635471339 22 2.22727465515648 32 1.5 13 1.72061635471339 23 2.22727465515648 33 1.5 70 1 0 3DFACE 8 pillar_a 10 1.79083940859747 20 2.20214844470858 30 1.5 11 1.72061635471339 21 2.22727465515648 31 3.0 12 1.79083940859747 22 2.20214844470858 32 3.0 13 1.79083940859747 23 2.20214844470858 33 3.0 70 1 0 3DFACE 8 pillar_a 10 2.20214844470858 20 1.79083940859747 30 1.5 11 2.17026016090475 21 1.85826151998776 31 3.0 12 2.20214844470858 22 1.79083940859747 32 3.0 13 2.20214844470858 23 1.79083940859747 33 3.0 70 1 0 3DFACE 8 pillar_a 10 2.17026016090475 20 1.85826151998776 30 3.0 11 2.20214844470858 21 1.79083940859747 31 1.5 12 2.17026016090475 22 1.85826151998776 32 1.5 13 2.17026016090475 23 1.85826151998776 33 1.5 70 1 0 3DFACE 8 pillar_a 10 1.14173848001224 20 0.82973983909525 30 3.0 11 1.0777666229051 21 0.868083094650066 31 1.5 12 1.14173848001224 22 0.829739839095251 32 1.5 13 1.14173848001224 23 0.829739839095251 33 1.5 70 1 0 3DFACE 8 pillar_a 10 1.0777666229051 20 0.868083094650066 30 1.5 11 1.14173848001224 21 0.82973983909525 31 3.0 12 1.0777666229051 22 0.868083094650066 32 3.0 13 1.0777666229051 23 0.868083094650066 33 3.0 70 1 0 3DFACE 8 pillar_a 10 1.79083940859747 20 0.797851555291422 30 3.0 11 1.72061635471339 21 0.772725344843522 31 1.5 12 1.79083940859747 22 0.797851555291422 32 1.5 13 1.79083940859747 23 0.797851555291422 33 1.5 70 1 0 3DFACE 8 pillar_a 10 1.72061635471339 20 0.772725344843522 30 1.5 11 1.79083940859747 21 0.797851555291422 31 3.0 12 1.72061635471339 22 0.772725344843521 32 3.0 13 1.72061635471339 23 0.772725344843521 33 3.0 70 1 0 3DFACE 8 pillar_a 10 0.743659607729131 20 1.57449302665047 30 3.0 11 0.74 21 1.5 31 1.5 12 0.74 22 1.5 32 3.0 13 0.74 23 1.5 33 3.0 70 1 0 3DFACE 8 pillar_a 10 0.74 20 1.5 30 1.5 11 0.743659607729131 21 1.57449302665047 31 3.0 12 0.74365960772913 22 1.57449302665047 32 1.5 13 0.74365960772913 23 1.57449302665047 33 1.5 70 1 0 3DFACE 8 pillar_a 10 0.772725344843521 20 1.72061635471339 30 3.0 11 0.754603186893545 21 1.64826864473226 31 1.5 12 0.754603186893545 22 1.64826864473226 32 3.0 13 0.754603186893545 23 1.64826864473226 33 3.0 70 1 0 3DFACE 8 pillar_a 10 0.754603186893545 20 1.64826864473226 30 1.5 11 0.772725344843521 21 1.72061635471339 31 3.0 12 0.772725344843522 22 1.72061635471339 32 1.5 13 0.772725344843522 23 1.72061635471339 33 1.5 70 1 0 3DFACE 8 pillar_a 10 2.08748794455568 20 1.98213889596437 30 1.5 11 2.03740115370178 21 2.03740115370178 31 3.0 12 2.08748794455568 22 1.98213889596437 32 3.0 13 2.08748794455568 23 1.98213889596437 33 3.0 70 1 0 3DFACE 8 pillar_a 10 2.03740115370178 20 2.03740115370178 30 3.0 11 2.08748794455568 21 1.98213889596437 31 1.5 12 2.03740115370178 22 2.03740115370178 32 1.5 13 2.03740115370178 23 2.03740115370178 33 1.5 70 1 0 3DFACE 8 pillar_a 10 1.72061635471339 20 0.772725344843521 30 3.0 11 1.64826864473226 21 0.754603186893545 31 1.5 12 1.72061635471339 22 0.772725344843522 32 1.5 13 1.72061635471339 23 0.772725344843522 33 1.5 70 1 0 3DFACE 8 pillar_a 10 1.64826864473226 20 0.754603186893545 30 1.5 11 1.72061635471339 21 0.772725344843521 31 3.0 12 1.64826864473226 22 0.754603186893545 32 3.0 13 1.64826864473226 23 0.754603186893545 33 3.0 70 1 0 3DFACE 8 pillar_a 10 0.962598846298224 20 0.962598846298224 30 3.0 11 0.91251205544432 21 1.01786110403563 31 1.5 12 0.962598846298224 22 0.962598846298224 32 1.5 13 0.962598846298224 23 0.962598846298224 33 1.5 70 1 0 3DFACE 8 pillar_a 10 0.91251205544432 20 1.01786110403563 30 1.5 11 0.962598846298224 21 0.962598846298224 31 3.0 12 0.91251205544432 22 1.01786110403563 32 3.0 13 0.91251205544432 23 1.01786110403563 33 3.0 70 1 0 3DFACE 8 pillar_a 10 0.797851555291422 20 1.20916059140253 30 3.0 11 0.82973983909525 21 1.14173848001224 31 1.5 12 0.82973983909525 22 1.14173848001224 32 3.0 13 0.82973983909525 23 1.14173848001224 33 3.0 70 1 0 3DFACE 8 pillar_a 10 0.82973983909525 20 1.14173848001224 30 1.5 11 0.797851555291422 21 1.20916059140253 31 3.0 12 0.797851555291422 22 1.20916059140253 32 1.5 13 0.797851555291422 23 1.20916059140253 33 1.5 70 1 0 3DFACE 8 pillar_a 10 2.13191690534993 20 1.0777666229051 30 1.5 11 2.17026016090475 21 1.14173848001224 31 3.0 12 2.13191690534993 22 1.0777666229051 32 3.0 13 2.13191690534993 23 1.0777666229051 33 3.0 70 1 0 3DFACE 8 pillar_a 10 2.17026016090475 20 1.14173848001224 30 3.0 11 2.13191690534993 21 1.0777666229051 31 1.5 12 2.17026016090475 22 1.14173848001224 32 1.5 13 2.17026016090475 23 1.14173848001224 33 1.5 70 1 0 3DFACE 8 pillar_a 10 2.20214844470858 20 1.20916059140253 30 1.5 11 2.17026016090475 21 1.14173848001224 31 3.0 12 2.17026016090475 22 1.14173848001224 32 1.5 13 2.17026016090475 23 1.14173848001224 33 1.5 70 1 0 3DFACE 8 pillar_a 10 2.17026016090475 20 1.14173848001224 30 3.0 11 2.20214844470858 21 1.20916059140253 31 1.5 12 2.20214844470858 22 1.20916059140253 32 3.0 13 2.20214844470858 23 1.20916059140253 33 3.0 70 1 0 3DFACE 8 pillar_a 10 0.868083094650066 20 1.0777666229051 30 3.0 11 0.82973983909525 21 1.14173848001224 31 1.5 12 0.868083094650066 22 1.0777666229051 32 1.5 13 0.868083094650066 23 1.0777666229051 33 1.5 70 1 0 3DFACE 8 pillar_a 10 0.82973983909525 20 1.14173848001224 30 1.5 11 0.868083094650066 21 1.0777666229051 31 3.0 12 0.82973983909525 22 1.14173848001224 32 3.0 13 0.82973983909525 23 1.14173848001224 33 3.0 70 1 0 3DFACE 8 pillar_a 10 2.24539681310646 20 1.35173135526774 30 1.5 11 2.22727465515648 21 1.27938364528661 31 3.0 12 2.22727465515648 22 1.27938364528661 32 1.5 13 2.22727465515648 23 1.27938364528661 33 1.5 70 1 0 3DFACE 8 pillar_a 10 2.22727465515648 20 1.27938364528661 30 3.0 11 2.24539681310646 21 1.35173135526774 31 1.5 12 2.24539681310646 22 1.35173135526774 32 3.0 13 2.24539681310646 23 1.35173135526774 33 3.0 70 1 0 3DFACE 8 pillar_a 10 2.22727465515648 20 1.27938364528661 30 1.5 11 2.20214844470858 21 1.20916059140253 31 3.0 12 2.20214844470858 22 1.20916059140253 32 1.5 13 2.20214844470858 23 1.20916059140253 33 1.5 70 1 0 3DFACE 8 pillar_a 10 2.20214844470858 20 1.20916059140253 30 3.0 11 2.22727465515648 21 1.27938364528661 31 1.5 12 2.22727465515648 22 1.27938364528661 32 3.0 13 2.22727465515648 23 1.27938364528661 33 3.0 70 1 0 3DFACE 8 pillar_a 10 2.26 20 1.5 30 1.5 11 2.25634039227087 21 1.42550697334953 31 3.0 12 2.25634039227087 22 1.42550697334953 32 1.5 13 2.25634039227087 23 1.42550697334953 33 1.5 70 1 0 3DFACE 8 pillar_a 10 2.25634039227087 20 1.42550697334953 30 3.0 11 2.26 21 1.5 31 1.5 12 2.26 22 1.5 32 3.0 13 2.26 23 1.5 33 3.0 70 1 0 3DFACE 8 pillar_a 10 1.64826864473226 20 0.754603186893545 30 3.0 11 1.57449302665047 21 0.743659607729131 31 1.5 12 1.64826864473226 22 0.754603186893545 32 1.5 13 1.64826864473226 23 0.754603186893545 33 1.5 70 1 0 3DFACE 8 pillar_a 10 1.57449302665047 20 0.743659607729131 30 1.5 11 1.64826864473226 21 0.754603186893545 31 3.0 12 1.57449302665047 22 0.743659607729131 32 3.0 13 1.57449302665047 23 0.743659607729131 33 3.0 70 1 0 3DFACE 8 pillar_a 10 0.91251205544432 20 1.01786110403563 30 3.0 11 0.868083094650066 21 1.0777666229051 31 1.5 12 0.91251205544432 22 1.01786110403563 32 1.5 13 0.91251205544432 23 1.01786110403563 33 1.5 70 1 0 3DFACE 8 pillar_a 10 0.868083094650066 20 1.0777666229051 30 1.5 11 0.91251205544432 21 1.01786110403563 31 3.0 12 0.868083094650066 22 1.0777666229051 32 3.0 13 0.868083094650066 23 1.0777666229051 33 3.0 70 1 0 3DFACE 8 pillar_a 10 1.0777666229051 20 0.868083094650066 30 3.0 11 1.01786110403563 21 0.91251205544432 31 1.5 12 1.0777666229051 22 0.868083094650066 32 1.5 13 1.0777666229051 23 0.868083094650066 33 1.5 70 1 0 3DFACE 8 pillar_a 10 1.01786110403563 20 0.91251205544432 30 1.5 11 1.0777666229051 21 0.868083094650066 31 3.0 12 1.01786110403563 22 0.91251205544432 32 3.0 13 1.01786110403563 23 0.91251205544432 33 3.0 70 1 0 3DFACE 8 pillar_a 10 0.74 20 1.5 30 3.0 11 0.743659607729131 21 1.42550697334953 31 1.5 12 0.743659607729131 22 1.42550697334953 32 3.0 13 0.743659607729131 23 1.42550697334953 33 3.0 70 1 0 3DFACE 8 pillar_a 10 0.743659607729131 20 1.42550697334953 30 1.5 11 0.74 21 1.5 31 3.0 12 0.74 22 1.5 32 1.5 13 0.74 23 1.5 33 1.5 70 1 0 3DFACE 8 pillar_a 10 0.743659607729131 20 1.42550697334953 30 3.0 11 0.754603186893545 21 1.35173135526774 31 1.5 12 0.754603186893545 22 1.35173135526774 32 3.0 13 0.754603186893545 23 1.35173135526774 33 3.0 70 1 0 3DFACE 8 pillar_a 10 0.754603186893545 20 1.35173135526774 30 1.5 11 0.743659607729131 21 1.42550697334953 31 3.0 12 0.743659607729131 22 1.42550697334953 32 1.5 13 0.743659607729131 23 1.42550697334953 33 1.5 70 1 0 3DFACE 8 pillar_a 10 0.754603186893545 20 1.35173135526774 30 3.0 11 0.772725344843521 21 1.27938364528661 31 1.5 12 0.772725344843522 22 1.27938364528661 32 3.0 13 0.772725344843522 23 1.27938364528661 33 3.0 70 1 0 3DFACE 8 pillar_a 10 0.772725344843521 20 1.27938364528661 30 1.5 11 0.754603186893545 21 1.35173135526774 31 3.0 12 0.754603186893545 22 1.35173135526774 32 1.5 13 0.754603186893545 23 1.35173135526774 33 1.5 70 1 0 3DFACE 8 pillar_a 10 0.772725344843522 20 1.27938364528661 30 3.0 11 0.797851555291422 21 1.20916059140253 31 1.5 12 0.797851555291422 22 1.20916059140253 32 3.0 13 0.797851555291422 23 1.20916059140253 33 3.0 70 1 0 3DFACE 8 pillar_a 10 0.797851555291422 20 1.20916059140253 30 1.5 11 0.772725344843522 21 1.27938364528661 31 3.0 12 0.772725344843521 22 1.27938364528661 32 1.5 13 0.772725344843521 23 1.27938364528661 33 1.5 70 1 0 3DFACE 8 pillar_a 10 1.14173848001224 20 2.17026016090475 30 3.0 11 1.20916059140253 21 2.20214844470858 31 1.5 12 1.14173848001224 22 2.17026016090475 32 1.5 13 1.14173848001224 23 2.17026016090475 33 1.5 70 1 0 3DFACE 8 pillar_a 10 1.20916059140253 20 2.20214844470858 30 1.5 11 1.14173848001224 21 2.17026016090475 31 3.0 12 1.20916059140253 22 2.20214844470858 32 3.0 13 1.20916059140253 23 2.20214844470858 33 3.0 70 1 0 3DFACE 8 pillar_a 10 2.20214844470858 20 1.20916059140253 30 3.0 11 2.24539681310646 21 1.35173135526774 31 3.0 12 1.5 22 1.5 32 3.0 13 1.5 23 1.5 33 3.0 70 1 0 3DFACE 8 pillar_a 10 2.24539681310646 20 1.35173135526774 30 3.0 11 2.20214844470858 21 1.20916059140253 31 3.0 12 2.22727465515648 22 1.27938364528661 32 3.0 13 2.22727465515648 23 1.27938364528661 33 3.0 70 1 0 3DFACE 8 pillar_a 10 2.24539681310646 20 1.35173135526774 30 3.0 11 2.26 21 1.5 31 3.0 12 1.5 22 1.5 32 3.0 13 1.5 23 1.5 33 3.0 70 1 0 3DFACE 8 pillar_a 10 2.26 20 1.5 30 3.0 11 2.24539681310646 21 1.35173135526774 31 3.0 12 2.25634039227087 22 1.42550697334953 32 3.0 13 2.25634039227087 23 1.42550697334953 33 3.0 70 1 0 3DFACE 8 pillar_a 10 0.772725344843522 20 1.27938364528661 30 3.0 11 1.5 21 1.5 31 3.0 12 0.754603186893545 22 1.35173135526774 32 3.0 13 0.754603186893545 23 1.35173135526774 33 3.0 70 1 0 3DFACE 8 pillar_a 10 1.5 20 1.5 30 3.0 11 0.772725344843522 21 1.27938364528661 31 3.0 12 0.797851555291422 22 1.20916059140253 32 3.0 13 0.797851555291422 23 1.20916059140253 33 3.0 70 1 0 3DFACE 8 pillar_a 10 0.82973983909525 20 1.14173848001224 30 3.0 11 1.5 21 1.5 31 3.0 12 0.797851555291422 22 1.20916059140253 32 3.0 13 0.797851555291422 23 1.20916059140253 33 3.0 70 1 0 3DFACE 8 pillar_a 10 1.5 20 1.5 30 3.0 11 0.82973983909525 21 1.14173848001224 31 3.0 12 0.868083094650066 22 1.0777666229051 32 3.0 13 0.868083094650066 23 1.0777666229051 33 3.0 70 1 0 3DFACE 8 pillar_a 10 1.5 20 1.5 30 3.0 11 0.743659607729131 21 1.57449302665047 31 3.0 12 0.74 22 1.5 32 3.0 13 0.74 23 1.5 33 3.0 70 1 0 3DFACE 8 pillar_a 10 0.743659607729131 20 1.57449302665047 30 3.0 11 1.5 21 1.5 31 3.0 12 0.754603186893545 22 1.64826864473226 32 3.0 13 0.754603186893545 23 1.64826864473226 33 3.0 70 1 0 3DFACE 8 pillar_a 10 0.91251205544432 20 1.01786110403563 30 3.0 11 1.5 21 1.5 31 3.0 12 0.868083094650066 22 1.0777666229051 32 3.0 13 0.868083094650066 23 1.0777666229051 33 3.0 70 1 0 3DFACE 8 pillar_a 10 1.5 20 1.5 30 3.0 11 0.91251205544432 21 1.01786110403563 31 3.0 12 0.962598846298224 22 0.962598846298224 32 3.0 13 0.962598846298224 23 0.962598846298224 33 3.0 70 1 0 3DFACE 8 pillar_a 10 1.01786110403563 20 0.91251205544432 30 3.0 11 1.5 21 1.5 31 3.0 12 0.962598846298224 22 0.962598846298224 32 3.0 13 0.962598846298224 23 0.962598846298224 33 3.0 70 1 0 3DFACE 8 pillar_a 10 1.5 20 1.5 30 3.0 11 1.01786110403563 21 0.91251205544432 31 3.0 12 1.0777666229051 22 0.868083094650066 32 3.0 13 1.0777666229051 23 0.868083094650066 33 3.0 70 1 0 3DFACE 8 pillar_a 10 1.14173848001224 20 0.82973983909525 30 3.0 11 1.5 21 1.5 31 3.0 12 1.0777666229051 22 0.868083094650066 32 3.0 13 1.0777666229051 23 0.868083094650066 33 3.0 70 1 0 3DFACE 8 pillar_a 10 1.5 20 1.5 30 3.0 11 1.14173848001224 21 0.82973983909525 31 3.0 12 1.20916059140253 22 0.797851555291422 32 3.0 13 1.20916059140253 23 0.797851555291422 33 3.0 70 1 0 3DFACE 8 pillar_a 10 1.9222333770949 20 0.868083094650066 30 3.0 11 2.03740115370178 21 0.962598846298224 31 3.0 12 1.5 22 1.5 32 3.0 13 1.5 23 1.5 33 3.0 70 1 0 3DFACE 8 pillar_a 10 2.03740115370178 20 0.962598846298224 30 3.0 11 1.9222333770949 21 0.868083094650066 31 3.0 12 1.98213889596437 22 0.91251205544432 32 3.0 13 1.98213889596437 23 0.91251205544432 33 3.0 70 1 0 3DFACE 8 pillar_a 10 1.27938364528661 20 0.772725344843521 30 3.0 11 1.5 21 1.5 31 3.0 12 1.20916059140253 22 0.797851555291422 32 3.0 13 1.20916059140253 23 0.797851555291422 33 3.0 70 1 0 3DFACE 8 pillar_a 10 1.5 20 1.5 30 3.0 11 1.27938364528661 21 0.772725344843521 31 3.0 12 1.35173135526774 22 0.754603186893545 32 3.0 13 1.35173135526774 23 0.754603186893545 33 3.0 70 1 0 3DFACE 8 pillar_a 10 1.5 20 0.74 30 3.0 11 1.64826864473226 21 0.754603186893545 31 3.0 12 1.5 22 1.5 32 3.0 13 1.5 23 1.5 33 3.0 70 1 0 3DFACE 8 pillar_a 10 1.64826864473226 20 0.754603186893545 30 3.0 11 1.5 21 0.74 31 3.0 12 1.57449302665047 22 0.743659607729131 32 3.0 13 1.57449302665047 23 0.743659607729131 33 3.0 70 1 0 3DFACE 8 pillar_a 10 1.64826864473226 20 2.24539681310646 30 3.0 11 1.5 21 2.26 31 3.0 12 1.5 22 1.5 32 3.0 13 1.5 23 1.5 33 3.0 70 1 0 3DFACE 8 pillar_a 10 1.5 20 2.26 30 3.0 11 1.64826864473226 21 2.24539681310646 31 3.0 12 1.57449302665047 22 2.25634039227087 32 3.0 13 1.57449302665047 23 2.25634039227087 33 3.0 70 1 0 3DFACE 8 pillar_a 10 1.79083940859747 20 2.20214844470858 30 3.0 11 1.64826864473226 21 2.24539681310646 31 3.0 12 1.5 22 1.5 32 3.0 13 1.5 23 1.5 33 3.0 70 1 0 3DFACE 8 pillar_a 10 1.64826864473226 20 2.24539681310646 30 3.0 11 1.79083940859747 21 2.20214844470858 31 3.0 12 1.72061635471339 22 2.22727465515648 32 3.0 13 1.72061635471339 23 2.22727465515648 33 3.0 70 1 0 3DFACE 8 pillar_a 10 1.5 20 1.5 30 3.0 11 1.42550697334953 21 2.25634039227087 31 3.0 12 1.35173135526774 22 2.24539681310645 32 3.0 13 1.35173135526774 23 2.24539681310645 33 3.0 70 1 0 3DFACE 8 pillar_a 10 1.42550697334953 20 2.25634039227087 30 3.0 11 1.5 21 1.5 31 3.0 12 1.5 22 2.26 32 3.0 13 1.5 23 2.26 33 3.0 70 1 0 3DFACE 8 pillar_a 10 1.5 20 1.5 30 3.0 11 1.27938364528661 21 2.22727465515648 31 3.0 12 1.20916059140253 22 2.20214844470858 32 3.0 13 1.20916059140253 23 2.20214844470858 33 3.0 70 1 0 3DFACE 8 pillar_a 10 1.27938364528661 20 2.22727465515648 30 3.0 11 1.5 21 1.5 31 3.0 12 1.35173135526774 22 2.24539681310645 32 3.0 13 1.35173135526774 23 2.24539681310645 33 3.0 70 1 0 3DFACE 8 pillar_a 10 1.5 20 1.5 30 3.0 11 1.14173848001224 21 2.17026016090475 31 3.0 12 1.0777666229051 22 2.13191690534993 32 3.0 13 1.0777666229051 23 2.13191690534993 33 3.0 70 1 0 3DFACE 8 pillar_a 10 1.14173848001224 20 2.17026016090475 30 3.0 11 1.5 21 1.5 31 3.0 12 1.20916059140253 22 2.20214844470858 32 3.0 13 1.20916059140253 23 2.20214844470858 33 3.0 70 1 0 3DFACE 8 pillar_a 10 1.9222333770949 20 2.13191690534993 30 3.0 11 1.79083940859747 21 2.20214844470858 31 3.0 12 1.5 22 1.5 32 3.0 13 1.5 23 1.5 33 3.0 70 1 0 3DFACE 8 pillar_a 10 1.79083940859747 20 2.20214844470858 30 3.0 11 1.9222333770949 21 2.13191690534993 31 3.0 12 1.85826151998776 22 2.17026016090475 32 3.0 13 1.85826151998776 23 2.17026016090475 33 3.0 70 1 0 3DFACE 8 pillar_a 10 2.03740115370178 20 2.03740115370178 30 3.0 11 1.9222333770949 21 2.13191690534993 31 3.0 12 1.5 22 1.5 32 3.0 13 1.5 23 1.5 33 3.0 70 1 0 3DFACE 8 pillar_a 10 1.9222333770949 20 2.13191690534993 30 3.0 11 2.03740115370178 21 2.03740115370178 31 3.0 12 1.98213889596437 22 2.08748794455568 32 3.0 13 1.98213889596437 23 2.08748794455568 33 3.0 70 1 0 3DFACE 8 pillar_a 10 1.64826864473226 20 0.754603186893545 30 3.0 11 1.79083940859747 21 0.797851555291422 31 3.0 12 1.5 22 1.5 32 3.0 13 1.5 23 1.5 33 3.0 70 1 0 3DFACE 8 pillar_a 10 1.79083940859747 20 0.797851555291422 30 3.0 11 1.64826864473226 21 0.754603186893545 31 3.0 12 1.72061635471339 22 0.772725344843521 32 3.0 13 1.72061635471339 23 0.772725344843521 33 3.0 70 1 0 3DFACE 8 pillar_a 10 1.5 20 1.5 30 3.0 11 1.01786110403563 21 2.08748794455568 31 3.0 12 0.962598846298224 22 2.03740115370178 32 3.0 13 0.962598846298224 23 2.03740115370178 33 3.0 70 1 0 3DFACE 8 pillar_a 10 1.01786110403563 20 2.08748794455568 30 3.0 11 1.5 21 1.5 31 3.0 12 1.0777666229051 22 2.13191690534993 32 3.0 13 1.0777666229051 23 2.13191690534993 33 3.0 70 1 0 3DFACE 8 pillar_a 10 1.5 20 1.5 30 3.0 11 0.91251205544432 21 1.98213889596437 31 3.0 12 0.868083094650066 22 1.9222333770949 32 3.0 13 0.868083094650066 23 1.9222333770949 33 3.0 70 1 0 3DFACE 8 pillar_a 10 0.91251205544432 20 1.98213889596437 30 3.0 11 1.5 21 1.5 31 3.0 12 0.962598846298224 22 2.03740115370178 32 3.0 13 0.962598846298224 23 2.03740115370178 33 3.0 70 1 0 3DFACE 8 pillar_a 10 1.5 20 1.5 30 3.0 11 0.82973983909525 21 1.85826151998776 31 3.0 12 0.797851555291422 22 1.79083940859747 32 3.0 13 0.797851555291422 23 1.79083940859747 33 3.0 70 1 0 3DFACE 8 pillar_a 10 0.82973983909525 20 1.85826151998776 30 3.0 11 1.5 21 1.5 31 3.0 12 0.868083094650066 22 1.9222333770949 32 3.0 13 0.868083094650066 23 1.9222333770949 33 3.0 70 1 0 3DFACE 8 pillar_a 10 2.13191690534993 20 1.9222333770949 30 3.0 11 2.03740115370178 21 2.03740115370178 31 3.0 12 1.5 22 1.5 32 3.0 13 1.5 23 1.5 33 3.0 70 1 0 3DFACE 8 pillar_a 10 2.03740115370178 20 2.03740115370178 30 3.0 11 2.13191690534993 21 1.9222333770949 31 3.0 12 2.08748794455568 22 1.98213889596437 32 3.0 13 2.08748794455568 23 1.98213889596437 33 3.0 70 1 0 3DFACE 8 pillar_a 10 2.20214844470858 20 1.79083940859747 30 3.0 11 2.13191690534993 21 1.9222333770949 31 3.0 12 1.5 22 1.5 32 3.0 13 1.5 23 1.5 33 3.0 70 1 0 3DFACE 8 pillar_a 10 2.13191690534993 20 1.9222333770949 30 3.0 11 2.20214844470858 21 1.79083940859747 31 3.0 12 2.17026016090475 22 1.85826151998776 32 3.0 13 2.17026016090475 23 1.85826151998776 33 3.0 70 1 0 3DFACE 8 pillar_a 10 2.13191690534993 20 1.0777666229051 30 3.0 11 2.20214844470858 21 1.20916059140253 31 3.0 12 1.5 22 1.5 32 3.0 13 1.5 23 1.5 33 3.0 70 1 0 3DFACE 8 pillar_a 10 2.20214844470858 20 1.20916059140253 30 3.0 11 2.13191690534993 21 1.0777666229051 31 3.0 12 2.17026016090475 22 1.14173848001224 32 3.0 13 2.17026016090475 23 1.14173848001224 33 3.0 70 1 0 3DFACE 8 pillar_a 10 1.79083940859747 20 0.797851555291422 30 3.0 11 1.9222333770949 21 0.868083094650066 31 3.0 12 1.5 22 1.5 32 3.0 13 1.5 23 1.5 33 3.0 70 1 0 3DFACE 8 pillar_a 10 1.9222333770949 20 0.868083094650066 30 3.0 11 1.79083940859747 21 0.797851555291422 31 3.0 12 1.85826151998776 22 0.82973983909525 32 3.0 13 1.85826151998776 23 0.82973983909525 33 3.0 70 1 0 3DFACE 8 pillar_a 10 2.03740115370178 20 0.962598846298224 30 3.0 11 2.13191690534993 21 1.0777666229051 31 3.0 12 1.5 22 1.5 32 3.0 13 1.5 23 1.5 33 3.0 70 1 0 3DFACE 8 pillar_a 10 2.13191690534993 20 1.0777666229051 30 3.0 11 2.03740115370178 21 0.962598846298224 31 3.0 12 2.08748794455568 22 1.01786110403563 32 3.0 13 2.08748794455568 23 1.01786110403563 33 3.0 70 1 0 3DFACE 8 pillar_a 10 2.26 20 1.5 30 3.0 11 2.24539681310645 21 1.64826864473226 31 3.0 12 1.5 22 1.5 32 3.0 13 1.5 23 1.5 33 3.0 70 1 0 3DFACE 8 pillar_a 10 2.24539681310645 20 1.64826864473226 30 3.0 11 2.26 21 1.5 31 3.0 12 2.25634039227087 22 1.57449302665047 32 3.0 13 2.25634039227087 23 1.57449302665047 33 3.0 70 1 0 3DFACE 8 pillar_a 10 2.24539681310645 20 1.64826864473226 30 3.0 11 2.20214844470858 21 1.79083940859747 31 3.0 12 1.5 22 1.5 32 3.0 13 1.5 23 1.5 33 3.0 70 1 0 3DFACE 8 pillar_a 10 2.20214844470858 20 1.79083940859747 30 3.0 11 2.24539681310645 21 1.64826864473226 31 3.0 12 2.22727465515648 22 1.72061635471339 32 3.0 13 2.22727465515648 23 1.72061635471339 33 3.0 70 1 0 3DFACE 8 pillar_a 10 1.5 20 1.5 30 3.0 11 0.772725344843521 21 1.72061635471339 31 3.0 12 0.754603186893545 22 1.64826864473226 32 3.0 13 0.754603186893545 23 1.64826864473226 33 3.0 70 1 0 3DFACE 8 pillar_a 10 0.772725344843521 20 1.72061635471339 30 3.0 11 1.5 21 1.5 31 3.0 12 0.797851555291422 22 1.79083940859747 32 3.0 13 0.797851555291422 23 1.79083940859747 33 3.0 70 1 0 3DFACE 8 pillar_a 10 0.743659607729131 20 1.42550697334953 30 3.0 11 1.5 21 1.5 31 3.0 12 0.74 22 1.5 32 3.0 13 0.74 23 1.5 33 3.0 70 1 0 3DFACE 8 pillar_a 10 1.5 20 1.5 30 3.0 11 0.743659607729131 21 1.42550697334953 31 3.0 12 0.754603186893545 22 1.35173135526774 32 3.0 13 0.754603186893545 23 1.35173135526774 33 3.0 70 1 0 3DFACE 8 pillar_a 10 2.24539681310646 20 1.35173135526774 30 1.5 11 2.20214844470858 21 1.20916059140253 31 1.5 12 1.5 22 1.5 32 1.5 13 1.5 23 1.5 33 1.5 70 1 0 3DFACE 8 pillar_a 10 2.20214844470858 20 1.20916059140253 30 1.5 11 2.24539681310646 21 1.35173135526774 31 1.5 12 2.22727465515648 22 1.27938364528661 32 1.5 13 2.22727465515648 23 1.27938364528661 33 1.5 70 1 0 3DFACE 8 pillar_a 10 2.26 20 1.5 30 1.5 11 2.24539681310646 21 1.35173135526774 31 1.5 12 1.5 22 1.5 32 1.5 13 1.5 23 1.5 33 1.5 70 1 0 3DFACE 8 pillar_a 10 2.24539681310646 20 1.35173135526774 30 1.5 11 2.26 21 1.5 31 1.5 12 2.25634039227087 22 1.42550697334953 32 1.5 13 2.25634039227087 23 1.42550697334953 33 1.5 70 1 0 3DFACE 8 pillar_a 10 2.13191690534993 20 1.0777666229051 30 1.5 11 2.03740115370178 21 0.962598846298225 31 1.5 12 1.5 22 1.5 32 1.5 13 1.5 23 1.5 33 1.5 70 1 0 3DFACE 8 pillar_a 10 2.03740115370178 20 0.962598846298225 30 1.5 11 2.13191690534993 21 1.0777666229051 31 1.5 12 2.08748794455568 22 1.01786110403563 32 1.5 13 2.08748794455568 23 1.01786110403563 33 1.5 70 1 0 3DFACE 8 pillar_a 10 2.20214844470858 20 1.20916059140253 30 1.5 11 2.13191690534993 21 1.0777666229051 31 1.5 12 1.5 22 1.5 32 1.5 13 1.5 23 1.5 33 1.5 70 1 0 3DFACE 8 pillar_a 10 2.13191690534993 20 1.0777666229051 30 1.5 11 2.20214844470858 21 1.20916059140253 31 1.5 12 2.17026016090475 22 1.14173848001224 32 1.5 13 2.17026016090475 23 1.14173848001224 33 1.5 70 1 0 3DFACE 8 pillar_a 10 1.42550697334953 20 2.25634039227087 30 1.5 11 1.5 21 1.5 31 1.5 12 1.35173135526774 22 2.24539681310646 32 1.5 13 1.35173135526774 23 2.24539681310646 33 1.5 70 1 0 3DFACE 8 pillar_a 10 1.5 20 1.5 30 1.5 11 1.42550697334953 21 2.25634039227087 31 1.5 12 1.5 22 2.26 32 1.5 13 1.5 23 2.26 33 1.5 70 1 0 3DFACE 8 pillar_a 10 1.27938364528661 20 2.22727465515648 30 1.5 11 1.5 21 1.5 31 1.5 12 1.20916059140253 22 2.20214844470858 32 1.5 13 1.20916059140253 23 2.20214844470858 33 1.5 70 1 0 3DFACE 8 pillar_a 10 1.5 20 1.5 30 1.5 11 1.27938364528661 21 2.22727465515648 31 1.5 12 1.35173135526774 22 2.24539681310646 32 1.5 13 1.35173135526774 23 2.24539681310646 33 1.5 70 1 0 3DFACE 8 pillar_a 10 2.20214844470858 20 1.79083940859747 30 1.5 11 2.24539681310646 21 1.64826864473226 31 1.5 12 1.5 22 1.5 32 1.5 13 1.5 23 1.5 33 1.5 70 1 0 3DFACE 8 pillar_a 10 2.24539681310646 20 1.64826864473226 30 1.5 11 2.20214844470858 21 1.79083940859747 31 1.5 12 2.22727465515648 22 1.72061635471339 32 1.5 13 2.22727465515648 23 1.72061635471339 33 1.5 70 1 0 3DFACE 8 pillar_a 10 2.24539681310646 20 1.64826864473226 30 1.5 11 2.26 21 1.5 31 1.5 12 1.5 22 1.5 32 1.5 13 1.5 23 1.5 33 1.5 70 1 0 3DFACE 8 pillar_a 10 2.26 20 1.5 30 1.5 11 2.24539681310646 21 1.64826864473226 31 1.5 12 2.25634039227087 22 1.57449302665047 32 1.5 13 2.25634039227087 23 1.57449302665047 33 1.5 70 1 0 3DFACE 8 pillar_a 10 1.79083940859747 20 0.797851555291422 30 1.5 11 1.64826864473226 21 0.754603186893545 31 1.5 12 1.5 22 1.5 32 1.5 13 1.5 23 1.5 33 1.5 70 1 0 3DFACE 8 pillar_a 10 1.64826864473226 20 0.754603186893545 30 1.5 11 1.79083940859747 21 0.797851555291422 31 1.5 12 1.72061635471339 22 0.772725344843522 32 1.5 13 1.72061635471339 23 0.772725344843522 33 1.5 70 1 0 3DFACE 8 pillar_a 10 1.9222333770949 20 0.868083094650066 30 1.5 11 1.79083940859747 21 0.797851555291422 31 1.5 12 1.5 22 1.5 32 1.5 13 1.5 23 1.5 33 1.5 70 1 0 3DFACE 8 pillar_a 10 1.79083940859747 20 0.797851555291422 30 1.5 11 1.9222333770949 21 0.868083094650066 31 1.5 12 1.85826151998776 22 0.829739839095251 32 1.5 13 1.85826151998776 23 0.829739839095251 33 1.5 70 1 0 3DFACE 8 pillar_a 10 1.9222333770949 20 2.13191690534994 30 1.5 11 2.03740115370178 21 2.03740115370178 31 1.5 12 1.5 22 1.5 32 1.5 13 1.5 23 1.5 33 1.5 70 1 0 3DFACE 8 pillar_a 10 2.03740115370178 20 2.03740115370178 30 1.5 11 1.9222333770949 21 2.13191690534994 31 1.5 12 1.98213889596437 22 2.08748794455568 32 1.5 13 1.98213889596437 23 2.08748794455568 33 1.5 70 1 0 3DFACE 8 pillar_a 10 2.03740115370178 20 2.03740115370178 30 1.5 11 2.13191690534993 21 1.9222333770949 31 1.5 12 1.5 22 1.5 32 1.5 13 1.5 23 1.5 33 1.5 70 1 0 3DFACE 8 pillar_a 10 2.13191690534993 20 1.9222333770949 30 1.5 11 2.03740115370178 21 2.03740115370178 31 1.5 12 2.08748794455568 22 1.98213889596437 32 1.5 13 2.08748794455568 23 1.98213889596437 33 1.5 70 1 0 3DFACE 8 pillar_a 10 1.5 20 1.5 30 1.5 11 0.91251205544432 21 1.01786110403563 31 1.5 12 0.868083094650066 22 1.0777666229051 32 1.5 13 0.868083094650066 23 1.0777666229051 33 1.5 70 1 0 3DFACE 8 pillar_a 10 0.91251205544432 20 1.01786110403563 30 1.5 11 1.5 21 1.5 31 1.5 12 0.962598846298224 22 0.962598846298224 32 1.5 13 0.962598846298224 23 0.962598846298224 33 1.5 70 1 0 3DFACE 8 pillar_a 10 1.5 20 1.5 30 1.5 11 0.82973983909525 21 1.14173848001224 31 1.5 12 0.797851555291422 22 1.20916059140253 32 1.5 13 0.797851555291422 23 1.20916059140253 33 1.5 70 1 0 3DFACE 8 pillar_a 10 0.82973983909525 20 1.14173848001224 30 1.5 11 1.5 21 1.5 31 1.5 12 0.868083094650066 22 1.0777666229051 32 1.5 13 0.868083094650066 23 1.0777666229051 33 1.5 70 1 0 3DFACE 8 pillar_a 10 1.5 20 1.5 30 1.5 11 1.01786110403563 21 0.91251205544432 31 1.5 12 0.962598846298224 22 0.962598846298224 32 1.5 13 0.962598846298224 23 0.962598846298224 33 1.5 70 1 0 3DFACE 8 pillar_a 10 1.01786110403563 20 0.91251205544432 30 1.5 11 1.5 21 1.5 31 1.5 12 1.0777666229051 22 0.868083094650066 32 1.5 13 1.0777666229051 23 0.868083094650066 33 1.5 70 1 0 3DFACE 8 pillar_a 10 1.5 20 1.5 30 1.5 11 1.14173848001224 21 0.829739839095251 31 1.5 12 1.0777666229051 22 0.868083094650066 32 1.5 13 1.0777666229051 23 0.868083094650066 33 1.5 70 1 0 3DFACE 8 pillar_a 10 1.14173848001224 20 0.829739839095251 30 1.5 11 1.5 21 1.5 31 1.5 12 1.20916059140253 22 0.797851555291422 32 1.5 13 1.20916059140253 23 0.797851555291422 33 1.5 70 1 0 3DFACE 8 pillar_a 10 1.5 20 1.5 30 1.5 11 1.42550697334953 21 0.74365960772913 31 1.5 12 1.35173135526774 22 0.754603186893545 32 1.5 13 1.35173135526774 23 0.754603186893545 33 1.5 70 1 0 3DFACE 8 pillar_a 10 1.42550697334953 20 0.74365960772913 30 1.5 11 1.5 21 1.5 31 1.5 12 1.5 22 0.74 32 1.5 13 1.5 23 0.74 33 1.5 70 1 0 3DFACE 8 pillar_a 10 1.5 20 1.5 30 1.5 11 1.57449302665047 21 0.743659607729131 31 1.5 12 1.5 22 0.74 32 1.5 13 1.5 23 0.74 33 1.5 70 1 0 3DFACE 8 pillar_a 10 1.57449302665047 20 0.743659607729131 30 1.5 11 1.5 21 1.5 31 1.5 12 1.64826864473226 22 0.754603186893545 32 1.5 13 1.64826864473226 23 0.754603186893545 33 1.5 70 1 0 3DFACE 8 pillar_a 10 1.57449302665047 20 2.25634039227087 30 1.5 11 1.5 21 1.5 31 1.5 12 1.5 22 2.26 32 1.5 13 1.5 23 2.26 33 1.5 70 1 0 3DFACE 8 pillar_a 10 1.5 20 1.5 30 1.5 11 1.57449302665047 21 2.25634039227087 31 1.5 12 1.64826864473226 22 2.24539681310646 32 1.5 13 1.64826864473226 23 2.24539681310646 33 1.5 70 1 0 3DFACE 8 pillar_a 10 1.64826864473226 20 2.24539681310646 30 1.5 11 1.79083940859747 21 2.20214844470858 31 1.5 12 1.5 22 1.5 32 1.5 13 1.5 23 1.5 33 1.5 70 1 0 3DFACE 8 pillar_a 10 1.79083940859747 20 2.20214844470858 30 1.5 11 1.64826864473226 21 2.24539681310646 31 1.5 12 1.72061635471339 22 2.22727465515648 32 1.5 13 1.72061635471339 23 2.22727465515648 33 1.5 70 1 0 3DFACE 8 pillar_a 10 1.5 20 1.5 30 1.5 11 0.743659607729131 21 1.42550697334953 31 1.5 12 0.74 22 1.5 32 1.5 13 0.74 23 1.5 33 1.5 70 1 0 3DFACE 8 pillar_a 10 0.743659607729131 20 1.42550697334953 30 1.5 11 1.5 21 1.5 31 1.5 12 0.754603186893545 22 1.35173135526774 32 1.5 13 0.754603186893545 23 1.35173135526774 33 1.5 70 1 0 3DFACE 8 pillar_a 10 0.74365960772913 20 1.57449302665047 30 1.5 11 1.5 21 1.5 31 1.5 12 0.74 22 1.5 32 1.5 13 0.74 23 1.5 33 1.5 70 1 0 3DFACE 8 pillar_a 10 1.5 20 1.5 30 1.5 11 0.74365960772913 21 1.57449302665047 31 1.5 12 0.754603186893545 22 1.64826864473226 32 1.5 13 0.754603186893545 23 1.64826864473226 33 1.5 70 1 0 3DFACE 8 pillar_a 10 0.82973983909525 20 1.85826151998776 30 1.5 11 1.5 21 1.5 31 1.5 12 0.797851555291422 22 1.79083940859747 32 1.5 13 0.797851555291422 23 1.79083940859747 33 1.5 70 1 0 3DFACE 8 pillar_a 10 1.5 20 1.5 30 1.5 11 0.82973983909525 21 1.85826151998776 31 1.5 12 0.868083094650066 22 1.9222333770949 32 1.5 13 0.868083094650066 23 1.9222333770949 33 1.5 70 1 0 3DFACE 8 pillar_a 10 0.772725344843522 20 1.72061635471339 30 1.5 11 1.5 21 1.5 31 1.5 12 0.754603186893545 22 1.64826864473226 32 1.5 13 0.754603186893545 23 1.64826864473226 33 1.5 70 1 0 3DFACE 8 pillar_a 10 1.5 20 1.5 30 1.5 11 0.772725344843522 21 1.72061635471339 31 1.5 12 0.797851555291422 22 1.79083940859747 32 1.5 13 0.797851555291422 23 1.79083940859747 33 1.5 70 1 0 3DFACE 8 pillar_a 10 1.01786110403563 20 2.08748794455568 30 1.5 11 1.5 21 1.5 31 1.5 12 0.962598846298224 22 2.03740115370178 32 1.5 13 0.962598846298224 23 2.03740115370178 33 1.5 70 1 0 3DFACE 8 pillar_a 10 1.5 20 1.5 30 1.5 11 1.01786110403563 21 2.08748794455568 31 1.5 12 1.0777666229051 22 2.13191690534993 32 1.5 13 1.0777666229051 23 2.13191690534993 33 1.5 70 1 0 3DFACE 8 pillar_a 10 0.91251205544432 20 1.98213889596437 30 1.5 11 1.5 21 1.5 31 1.5 12 0.868083094650066 22 1.9222333770949 32 1.5 13 0.868083094650066 23 1.9222333770949 33 1.5 70 1 0 3DFACE 8 pillar_a 10 1.5 20 1.5 30 1.5 11 0.91251205544432 21 1.98213889596437 31 1.5 12 0.962598846298224 22 2.03740115370178 32 1.5 13 0.962598846298224 23 2.03740115370178 33 1.5 70 1 0 3DFACE 8 pillar_a 10 1.79083940859747 20 2.20214844470858 30 1.5 11 1.9222333770949 21 2.13191690534994 31 1.5 12 1.5 22 1.5 32 1.5 13 1.5 23 1.5 33 1.5 70 1 0 3DFACE 8 pillar_a 10 1.9222333770949 20 2.13191690534994 30 1.5 11 1.79083940859747 21 2.20214844470858 31 1.5 12 1.85826151998776 22 2.17026016090475 32 1.5 13 1.85826151998776 23 2.17026016090475 33 1.5 70 1 0 3DFACE 8 pillar_a 10 1.5 20 1.5 30 1.5 11 1.27938364528661 21 0.772725344843521 31 1.5 12 1.20916059140253 22 0.797851555291422 32 1.5 13 1.20916059140253 23 0.797851555291422 33 1.5 70 1 0 3DFACE 8 pillar_a 10 1.27938364528661 20 0.772725344843521 30 1.5 11 1.5 21 1.5 31 1.5 12 1.35173135526774 22 0.754603186893545 32 1.5 13 1.35173135526774 23 0.754603186893545 33 1.5 70 1 0 3DFACE 8 pillar_a 10 2.13191690534993 20 1.9222333770949 30 1.5 11 2.20214844470858 21 1.79083940859747 31 1.5 12 1.5 22 1.5 32 1.5 13 1.5 23 1.5 33 1.5 70 1 0 3DFACE 8 pillar_a 10 2.20214844470858 20 1.79083940859747 30 1.5 11 2.13191690534993 21 1.9222333770949 31 1.5 12 2.17026016090475 22 1.85826151998776 32 1.5 13 2.17026016090475 23 1.85826151998776 33 1.5 70 1 0 3DFACE 8 pillar_a 10 2.03740115370178 20 0.962598846298225 30 1.5 11 1.9222333770949 21 0.868083094650066 31 1.5 12 1.5 22 1.5 32 1.5 13 1.5 23 1.5 33 1.5 70 1 0 3DFACE 8 pillar_a 10 1.9222333770949 20 0.868083094650066 30 1.5 11 2.03740115370178 21 0.962598846298225 31 1.5 12 1.98213889596437 22 0.91251205544432 32 1.5 13 1.98213889596437 23 0.91251205544432 33 1.5 70 1 0 3DFACE 8 pillar_a 10 1.14173848001224 20 2.17026016090475 30 1.5 11 1.5 21 1.5 31 1.5 12 1.0777666229051 22 2.13191690534993 32 1.5 13 1.0777666229051 23 2.13191690534993 33 1.5 70 1 0 3DFACE 8 pillar_a 10 1.5 20 1.5 30 1.5 11 1.14173848001224 21 2.17026016090475 31 1.5 12 1.20916059140253 22 2.20214844470858 32 1.5 13 1.20916059140253 23 2.20214844470858 33 1.5 70 1 0 3DFACE 8 pillar_a 10 1.5 20 1.5 30 1.5 11 0.772725344843521 21 1.27938364528661 31 1.5 12 0.754603186893545 22 1.35173135526774 32 1.5 13 0.754603186893545 23 1.35173135526774 33 1.5 70 1 0 3DFACE 8 pillar_a 10 0.772725344843521 20 1.27938364528661 30 1.5 11 1.5 21 1.5 31 1.5 12 0.797851555291422 22 1.20916059140253 32 1.5 13 0.797851555291422 23 1.20916059140253 33 1.5 70 1 0 3DFACE 8 pillar_b 10 2.24539681310646 20 1.64826864473226 30 0.0 11 2.22727465515648 21 1.72061635471339 31 1.5 12 2.24539681310645 22 1.64826864473226 32 1.5 13 2.24539681310645 23 1.64826864473226 33 1.5 70 1 0 3DFACE 8 pillar_b 10 2.22727465515648 20 1.72061635471339 30 1.5 11 2.24539681310646 21 1.64826864473226 31 0.0 12 2.22727465515648 22 1.72061635471339 32 0.0 13 2.22727465515648 23 1.72061635471339 33 0.0 70 1 0 3DFACE 8 pillar_b 10 1.01786110403563 20 2.08748794455568 30 1.5 11 1.0777666229051 21 2.13191690534993 31 0.0 12 1.01786110403563 22 2.08748794455568 32 0.0 13 1.01786110403563 23 2.08748794455568 33 0.0 70 1 0 3DFACE 8 pillar_b 10 1.0777666229051 20 2.13191690534993 30 0.0 11 1.01786110403563 21 2.08748794455568 31 1.5 12 1.0777666229051 22 2.13191690534993 32 1.5 13 1.0777666229051 23 2.13191690534993 33 1.5 70 1 0 3DFACE 8 pillar_b 10 1.85826151998776 20 2.17026016090475 30 1.5 11 1.9222333770949 21 2.13191690534993 31 0.0 12 1.85826151998776 22 2.17026016090475 32 0.0 13 1.85826151998776 23 2.17026016090475 33 0.0 70 1 0 3DFACE 8 pillar_b 10 1.9222333770949 20 2.13191690534993 30 0.0 11 1.85826151998776 21 2.17026016090475 31 1.5 12 1.9222333770949 22 2.13191690534993 32 1.5 13 1.9222333770949 23 2.13191690534993 33 1.5 70 1 0 3DFACE 8 pillar_b 10 1.85826151998776 20 0.82973983909525 30 1.5 11 1.79083940859747 21 0.797851555291422 31 0.0 12 1.85826151998776 22 0.829739839095251 32 0.0 13 1.85826151998776 23 0.829739839095251 33 0.0 70 1 0 3DFACE 8 pillar_b 10 1.79083940859747 20 0.797851555291422 30 0.0 11 1.85826151998776 21 0.82973983909525 31 1.5 12 1.79083940859747 22 0.797851555291422 32 1.5 13 1.79083940859747 23 0.797851555291422 33 1.5 70 1 0 3DFACE 8 pillar_b 10 1.0777666229051 20 2.13191690534993 30 1.5 11 1.14173848001224 21 2.17026016090475 31 0.0 12 1.0777666229051 22 2.13191690534993 32 0.0 13 1.0777666229051 23 2.13191690534993 33 0.0 70 1 0 3DFACE 8 pillar_b 10 1.14173848001224 20 2.17026016090475 30 0.0 11 1.0777666229051 21 2.13191690534993 31 1.5 12 1.14173848001224 22 2.17026016090475 32 1.5 13 1.14173848001224 23 2.17026016090475 33 1.5 70 1 0 3DFACE 8 pillar_b 10 1.35173135526774 20 0.754603186893545 30 1.5 11 1.27938364528661 21 0.772725344843521 31 0.0 12 1.35173135526774 22 0.754603186893545 32 0.0 13 1.35173135526774 23 0.754603186893545 33 0.0 70 1 0 3DFACE 8 pillar_b 10 1.27938364528661 20 0.772725344843521 30 0.0 11 1.35173135526774 21 0.754603186893545 31 1.5 12 1.27938364528661 22 0.772725344843521 32 1.5 13 1.27938364528661 23 0.772725344843521 33 1.5 70 1 0 3DFACE 8 pillar_b 10 1.42550697334953 20 0.743659607729131 30 1.5 11 1.35173135526774 21 0.754603186893545 31 0.0 12 1.42550697334953 22 0.74365960772913 32 0.0 13 1.42550697334953 23 0.74365960772913 33 0.0 70 1 0 3DFACE 8 pillar_b 10 1.35173135526774 20 0.754603186893545 30 0.0 11 1.42550697334953 21 0.743659607729131 31 1.5 12 1.35173135526774 22 0.754603186893545 32 1.5 13 1.35173135526774 23 0.754603186893545 33 1.5 70 1 0 3DFACE 8 pillar_b 10 1.5 20 0.74 30 1.5 11 1.42550697334953 21 0.74365960772913 31 0.0 12 1.5 22 0.74 32 0.0 13 1.5 23 0.74 33 0.0 70 1 0 3DFACE 8 pillar_b 10 1.42550697334953 20 0.74365960772913 30 0.0 11 1.5 21 0.74 31 1.5 12 1.42550697334953 22 0.743659607729131 32 1.5 13 1.42550697334953 23 0.743659607729131 33 1.5 70 1 0 3DFACE 8 pillar_b 10 1.57449302665047 20 0.743659607729131 30 1.5 11 1.5 21 0.74 31 0.0 12 1.57449302665047 22 0.743659607729131 32 0.0 13 1.57449302665047 23 0.743659607729131 33 0.0 70 1 0 3DFACE 8 pillar_b 10 1.5 20 0.74 30 0.0 11 1.57449302665047 21 0.743659607729131 31 1.5 12 1.5 22 0.74 32 1.5 13 1.5 23 0.74 33 1.5 70 1 0 3DFACE 8 pillar_b 10 2.08748794455568 20 1.01786110403563 30 0.0 11 2.13191690534993 21 1.0777666229051 31 1.5 12 2.08748794455568 22 1.01786110403563 32 1.5 13 2.08748794455568 23 1.01786110403563 33 1.5 70 1 0 3DFACE 8 pillar_b 10 2.13191690534993 20 1.0777666229051 30 1.5 11 2.08748794455568 21 1.01786110403563 31 0.0 12 2.13191690534993 22 1.0777666229051 32 0.0 13 2.13191690534993 23 1.0777666229051 33 0.0 70 1 0 3DFACE 8 pillar_b 10 1.27938364528661 20 0.772725344843521 30 1.5 11 1.20916059140253 21 0.797851555291422 31 0.0 12 1.27938364528661 22 0.772725344843521 32 0.0 13 1.27938364528661 23 0.772725344843521 33 0.0 70 1 0 3DFACE 8 pillar_b 10 1.20916059140253 20 0.797851555291422 30 0.0 11 1.27938364528661 21 0.772725344843521 31 1.5 12 1.20916059140253 22 0.797851555291422 32 1.5 13 1.20916059140253 23 0.797851555291422 33 1.5 70 1 0 3DFACE 8 pillar_b 10 2.26 20 1.5 30 0.0 11 2.25634039227087 21 1.57449302665047 31 1.5 12 2.26 22 1.5 32 1.5 13 2.26 23 1.5 33 1.5 70 1 0 3DFACE 8 pillar_b 10 2.25634039227087 20 1.57449302665047 30 1.5 11 2.26 21 1.5 31 0.0 12 2.25634039227087 22 1.57449302665047 32 0.0 13 2.25634039227087 23 1.57449302665047 33 0.0 70 1 0 3DFACE 8 pillar_b 10 0.754603186893545 20 1.64826864473226 30 1.5 11 0.74365960772913 21 1.57449302665047 31 0.0 12 0.743659607729131 22 1.57449302665047 32 1.5 13 0.743659607729131 23 1.57449302665047 33 1.5 70 1 0 3DFACE 8 pillar_b 10 0.74365960772913 20 1.57449302665047 30 0.0 11 0.754603186893545 21 1.64826864473226 31 1.5 12 0.754603186893545 22 1.64826864473226 32 0.0 13 0.754603186893545 23 1.64826864473226 33 0.0 70 1 0 3DFACE 8 pillar_b 10 1.64826864473226 20 2.24539681310646 30 1.5 11 1.72061635471339 21 2.22727465515648 31 0.0 12 1.64826864473226 22 2.24539681310646 32 0.0 13 1.64826864473226 23 2.24539681310646 33 0.0 70 1 0 3DFACE 8 pillar_b 10 1.72061635471339 20 2.22727465515648 30 0.0 11 1.64826864473226 21 2.24539681310646 31 1.5 12 1.72061635471339 22 2.22727465515648 32 1.5 13 1.72061635471339 23 2.22727465515648 33 1.5 70 1 0 3DFACE 8 pillar_b 10 1.57449302665047 20 2.25634039227087 30 1.5 11 1.64826864473226 21 2.24539681310646 31 0.0 12 1.57449302665047 22 2.25634039227087 32 0.0 13 1.57449302665047 23 2.25634039227087 33 0.0 70 1 0 3DFACE 8 pillar_b 10 1.64826864473226 20 2.24539681310646 30 0.0 11 1.57449302665047 21 2.25634039227087 31 1.5 12 1.64826864473226 22 2.24539681310646 32 1.5 13 1.64826864473226 23 2.24539681310646 33 1.5 70 1 0 3DFACE 8 pillar_b 10 0.962598846298224 20 2.03740115370178 30 1.5 11 1.01786110403563 21 2.08748794455568 31 0.0 12 0.962598846298224 22 2.03740115370178 32 0.0 13 0.962598846298224 23 2.03740115370178 33 0.0 70 1 0 3DFACE 8 pillar_b 10 1.01786110403563 20 2.08748794455568 30 0.0 11 0.962598846298224 21 2.03740115370178 31 1.5 12 1.01786110403563 22 2.08748794455568 32 1.5 13 1.01786110403563 23 2.08748794455568 33 1.5 70 1 0 3DFACE 8 pillar_b 10 0.962598846298224 20 2.03740115370178 30 1.5 11 0.91251205544432 21 1.98213889596437 31 0.0 12 0.91251205544432 22 1.98213889596437 32 1.5 13 0.91251205544432 23 1.98213889596437 33 1.5 70 1 0 3DFACE 8 pillar_b 10 0.91251205544432 20 1.98213889596437 30 0.0 11 0.962598846298224 21 2.03740115370178 31 1.5 12 0.962598846298224 22 2.03740115370178 32 0.0 13 0.962598846298224 23 2.03740115370178 33 0.0 70 1 0 3DFACE 8 pillar_b 10 0.82973983909525 20 1.85826151998776 30 1.5 11 0.868083094650066 21 1.9222333770949 31 0.0 12 0.82973983909525 22 1.85826151998776 32 0.0 13 0.82973983909525 23 1.85826151998776 33 0.0 70 1 0 3DFACE 8 pillar_b 10 0.868083094650066 20 1.9222333770949 30 0.0 11 0.82973983909525 21 1.85826151998776 31 1.5 12 0.868083094650066 22 1.9222333770949 32 1.5 13 0.868083094650066 23 1.9222333770949 33 1.5 70 1 0 3DFACE 8 pillar_b 10 0.82973983909525 20 1.85826151998776 30 1.5 11 0.797851555291422 21 1.79083940859747 31 0.0 12 0.797851555291422 22 1.79083940859747 32 1.5 13 0.797851555291422 23 1.79083940859747 33 1.5 70 1 0 3DFACE 8 pillar_b 10 0.797851555291422 20 1.79083940859747 30 0.0 11 0.82973983909525 21 1.85826151998776 31 1.5 12 0.82973983909525 22 1.85826151998776 32 0.0 13 0.82973983909525 23 1.85826151998776 33 0.0 70 1 0 3DFACE 8 pillar_b 10 0.797851555291422 20 1.79083940859747 30 1.5 11 0.772725344843522 21 1.72061635471339 31 0.0 12 0.772725344843521 22 1.72061635471339 32 1.5 13 0.772725344843521 23 1.72061635471339 33 1.5 70 1 0 3DFACE 8 pillar_b 10 0.772725344843522 20 1.72061635471339 30 0.0 11 0.797851555291422 21 1.79083940859747 31 1.5 12 0.797851555291422 22 1.79083940859747 32 0.0 13 0.797851555291422 23 1.79083940859747 33 0.0 70 1 0 3DFACE 8 pillar_b 10 1.5 20 2.26 30 1.5 11 1.57449302665047 21 2.25634039227087 31 0.0 12 1.5 22 2.26 32 0.0 13 1.5 23 2.26 33 0.0 70 1 0 3DFACE 8 pillar_b 10 1.57449302665047 20 2.25634039227087 30 0.0 11 1.5 21 2.26 31 1.5 12 1.57449302665047 22 2.25634039227087 32 1.5 13 1.57449302665047 23 2.25634039227087 33 1.5 70 1 0 3DFACE 8 pillar_b 10 1.42550697334953 20 2.25634039227087 30 1.5 11 1.5 21 2.26 31 0.0 12 1.42550697334953 22 2.25634039227087 32 0.0 13 1.42550697334953 23 2.25634039227087 33 0.0 70 1 0 3DFACE 8 pillar_b 10 1.5 20 2.26 30 0.0 11 1.42550697334953 21 2.25634039227087 31 1.5 12 1.5 22 2.26 32 1.5 13 1.5 23 2.26 33 1.5 70 1 0 3DFACE 8 pillar_b 10 1.35173135526774 20 2.24539681310645 30 1.5 11 1.42550697334953 21 2.25634039227087 31 0.0 12 1.35173135526774 22 2.24539681310645 32 0.0 13 1.35173135526774 23 2.24539681310645 33 0.0 70 1 0 3DFACE 8 pillar_b 10 1.42550697334953 20 2.25634039227087 30 0.0 11 1.35173135526774 21 2.24539681310645 31 1.5 12 1.42550697334953 22 2.25634039227087 32 1.5 13 1.42550697334953 23 2.25634039227087 33 1.5 70 1 0 3DFACE 8 pillar_b 10 1.27938364528661 20 2.22727465515648 30 1.5 11 1.35173135526774 21 2.24539681310645 31 0.0 12 1.27938364528661 22 2.22727465515648 32 0.0 13 1.27938364528661 23 2.22727465515648 33 0.0 70 1 0 3DFACE 8 pillar_b 10 1.35173135526774 20 2.24539681310645 30 0.0 11 1.27938364528661 21 2.22727465515648 31 1.5 12 1.35173135526774 22 2.24539681310645 32 1.5 13 1.35173135526774 23 2.24539681310645 33 1.5 70 1 0 3DFACE 8 pillar_b 10 1.20916059140253 20 2.20214844470858 30 1.5 11 1.27938364528661 21 2.22727465515648 31 0.0 12 1.20916059140253 22 2.20214844470858 32 0.0 13 1.20916059140253 23 2.20214844470858 33 0.0 70 1 0 3DFACE 8 pillar_b 10 1.27938364528661 20 2.22727465515648 30 0.0 11 1.20916059140253 21 2.20214844470858 31 1.5 12 1.27938364528661 22 2.22727465515648 32 1.5 13 1.27938364528661 23 2.22727465515648 33 1.5 70 1 0 3DFACE 8 pillar_b 10 2.17026016090475 20 1.85826151998776 30 0.0 11 2.13191690534993 21 1.9222333770949 31 1.5 12 2.17026016090475 22 1.85826151998776 32 1.5 13 2.17026016090475 23 1.85826151998776 33 1.5 70 1 0 3DFACE 8 pillar_b 10 2.13191690534993 20 1.9222333770949 30 1.5 11 2.17026016090475 21 1.85826151998776 31 0.0 12 2.13191690534993 22 1.9222333770949 32 0.0 13 2.13191690534993 23 1.9222333770949 33 0.0 70 1 0 3DFACE 8 pillar_b 10 0.91251205544432 20 1.98213889596437 30 1.5 11 0.868083094650066 21 1.9222333770949 31 0.0 12 0.868083094650066 22 1.9222333770949 32 1.5 13 0.868083094650066 23 1.9222333770949 33 1.5 70 1 0 3DFACE 8 pillar_b 10 0.868083094650066 20 1.9222333770949 30 0.0 11 0.91251205544432 21 1.98213889596437 31 1.5 12 0.91251205544432 22 1.98213889596437 32 0.0 13 0.91251205544432 23 1.98213889596437 33 0.0 70 1 0 3DFACE 8 pillar_b 10 1.9222333770949 20 0.868083094650066 30 1.5 11 1.85826151998776 21 0.829739839095251 31 0.0 12 1.9222333770949 22 0.868083094650066 32 0.0 13 1.9222333770949 23 0.868083094650066 33 0.0 70 1 0 3DFACE 8 pillar_b 10 1.85826151998776 20 0.829739839095251 30 0.0 11 1.9222333770949 21 0.868083094650066 31 1.5 12 1.85826151998776 22 0.82973983909525 32 1.5 13 1.85826151998776 23 0.82973983909525 33 1.5 70 1 0 3DFACE 8 pillar_b 10 1.98213889596437 20 0.91251205544432 30 1.5 11 1.9222333770949 21 0.868083094650066 31 0.0 12 1.98213889596437 22 0.91251205544432 32 0.0 13 1.98213889596437 23 0.91251205544432 33 0.0 70 1 0 3DFACE 8 pillar_b 10 1.9222333770949 20 0.868083094650066 30 0.0 11 1.98213889596437 21 0.91251205544432 31 1.5 12 1.9222333770949 22 0.868083094650066 32 1.5 13 1.9222333770949 23 0.868083094650066 33 1.5 70 1 0 3DFACE 8 pillar_b 10 2.03740115370178 20 0.962598846298224 30 1.5 11 1.98213889596437 21 0.91251205544432 31 0.0 12 2.03740115370178 22 0.962598846298225 32 0.0 13 2.03740115370178 23 0.962598846298225 33 0.0 70 1 0 3DFACE 8 pillar_b 10 1.98213889596437 20 0.91251205544432 30 0.0 11 2.03740115370178 21 0.962598846298224 31 1.5 12 1.98213889596437 22 0.91251205544432 32 1.5 13 1.98213889596437 23 0.91251205544432 33 1.5 70 1 0 3DFACE 8 pillar_b 10 1.01786110403563 20 0.91251205544432 30 1.5 11 0.962598846298224 21 0.962598846298224 31 0.0 12 1.01786110403563 22 0.91251205544432 32 0.0 13 1.01786110403563 23 0.91251205544432 33 0.0 70 1 0 3DFACE 8 pillar_b 10 0.962598846298224 20 0.962598846298224 30 0.0 11 1.01786110403563 21 0.91251205544432 31 1.5 12 0.962598846298224 22 0.962598846298224 32 1.5 13 0.962598846298224 23 0.962598846298224 33 1.5 70 1 0 3DFACE 8 pillar_b 10 1.79083940859747 20 2.20214844470858 30 1.5 11 1.85826151998776 21 2.17026016090475 31 0.0 12 1.79083940859747 22 2.20214844470858 32 0.0 13 1.79083940859747 23 2.20214844470858 33 0.0 70 1 0 3DFACE 8 pillar_b 10 1.85826151998776 20 2.17026016090475 30 0.0 11 1.79083940859747 21 2.20214844470858 31 1.5 12 1.85826151998776 22 2.17026016090475 32 1.5 13 1.85826151998776 23 2.17026016090475 33 1.5 70 1 0 3DFACE 8 pillar_b 10 2.08748794455568 20 1.98213889596437 30 0.0 11 2.13191690534993 21 1.9222333770949 31 1.5 12 2.13191690534993 22 1.9222333770949 32 0.0 13 2.13191690534993 23 1.9222333770949 33 0.0 70 1 0 3DFACE 8 pillar_b 10 2.13191690534993 20 1.9222333770949 30 1.5 11 2.08748794455568 21 1.98213889596437 31 0.0 12 2.08748794455568 22 1.98213889596437 32 1.5 13 2.08748794455568 23 1.98213889596437 33 1.5 70 1 0 3DFACE 8 pillar_b 10 2.25634039227087 20 1.57449302665047 30 0.0 11 2.24539681310645 21 1.64826864473226 31 1.5 12 2.25634039227087 22 1.57449302665047 32 1.5 13 2.25634039227087 23 1.57449302665047 33 1.5 70 1 0 3DFACE 8 pillar_b 10 2.24539681310645 20 1.64826864473226 30 1.5 11 2.25634039227087 21 1.57449302665047 31 0.0 12 2.24539681310646 22 1.64826864473226 32 0.0 13 2.24539681310646 23 1.64826864473226 33 0.0 70 1 0 3DFACE 8 pillar_b 10 1.9222333770949 20 2.13191690534993 30 1.5 11 1.98213889596437 21 2.08748794455568 31 0.0 12 1.9222333770949 22 2.13191690534993 32 0.0 13 1.9222333770949 23 2.13191690534993 33 0.0 70 1 0 3DFACE 8 pillar_b 10 1.98213889596437 20 2.08748794455568 30 0.0 11 1.9222333770949 21 2.13191690534993 31 1.5 12 1.98213889596437 22 2.08748794455568 32 1.5 13 1.98213889596437 23 2.08748794455568 33 1.5 70 1 0 3DFACE 8 pillar_b 10 1.98213889596437 20 2.08748794455568 30 1.5 11 2.03740115370177 21 2.03740115370178 31 0.0 12 1.98213889596437 22 2.08748794455568 32 0.0 13 1.98213889596437 23 2.08748794455568 33 0.0 70 1 0 3DFACE 8 pillar_b 10 2.03740115370177 20 2.03740115370178 30 0.0 11 1.98213889596437 21 2.08748794455568 31 1.5 12 2.03740115370178 22 2.03740115370178 32 1.5 13 2.03740115370178 23 2.03740115370178 33 1.5 70 1 0 3DFACE 8 pillar_b 10 1.72061635471339 20 2.22727465515648 30 1.5 11 1.79083940859747 21 2.20214844470858 31 0.0 12 1.72061635471339 22 2.22727465515648 32 0.0 13 1.72061635471339 23 2.22727465515648 33 0.0 70 1 0 3DFACE 8 pillar_b 10 1.79083940859747 20 2.20214844470858 30 0.0 11 1.72061635471339 21 2.22727465515648 31 1.5 12 1.79083940859747 22 2.20214844470858 32 1.5 13 1.79083940859747 23 2.20214844470858 33 1.5 70 1 0 3DFACE 8 pillar_b 10 2.20214844470858 20 1.79083940859747 30 0.0 11 2.17026016090475 21 1.85826151998776 31 1.5 12 2.20214844470858 22 1.79083940859747 32 1.5 13 2.20214844470858 23 1.79083940859747 33 1.5 70 1 0 3DFACE 8 pillar_b 10 2.17026016090475 20 1.85826151998776 30 1.5 11 2.20214844470858 21 1.79083940859747 31 0.0 12 2.17026016090475 22 1.85826151998776 32 0.0 13 2.17026016090475 23 1.85826151998776 33 0.0 70 1 0 3DFACE 8 pillar_b 10 1.14173848001224 20 0.82973983909525 30 1.5 11 1.0777666229051 21 0.868083094650066 31 0.0 12 1.14173848001224 22 0.829739839095251 32 0.0 13 1.14173848001224 23 0.829739839095251 33 0.0 70 1 0 3DFACE 8 pillar_b 10 1.0777666229051 20 0.868083094650066 30 0.0 11 1.14173848001224 21 0.82973983909525 31 1.5 12 1.0777666229051 22 0.868083094650066 32 1.5 13 1.0777666229051 23 0.868083094650066 33 1.5 70 1 0 3DFACE 8 pillar_b 10 1.79083940859747 20 0.797851555291422 30 1.5 11 1.72061635471339 21 0.772725344843522 31 0.0 12 1.79083940859747 22 0.797851555291422 32 0.0 13 1.79083940859747 23 0.797851555291422 33 0.0 70 1 0 3DFACE 8 pillar_b 10 1.72061635471339 20 0.772725344843522 30 0.0 11 1.79083940859747 21 0.797851555291422 31 1.5 12 1.72061635471339 22 0.772725344843521 32 1.5 13 1.72061635471339 23 0.772725344843521 33 1.5 70 1 0 3DFACE 8 pillar_b 10 0.743659607729131 20 1.57449302665047 30 1.5 11 0.74 21 1.5 31 0.0 12 0.74 22 1.5 32 1.5 13 0.74 23 1.5 33 1.5 70 1 0 3DFACE 8 pillar_b 10 0.74 20 1.5 30 0.0 11 0.743659607729131 21 1.57449302665047 31 1.5 12 0.74365960772913 22 1.57449302665047 32 0.0 13 0.74365960772913 23 1.57449302665047 33 0.0 70 1 0 3DFACE 8 pillar_b 10 0.754603186893545 20 1.64826864473226 30 1.5 11 0.772725344843522 21 1.72061635471339 31 0.0 12 0.754603186893545 22 1.64826864473226 32 0.0 13 0.754603186893545 23 1.64826864473226 33 0.0 70 1 0 3DFACE 8 pillar_b 10 0.772725344843522 20 1.72061635471339 30 0.0 11 0.754603186893545 21 1.64826864473226 31 1.5 12 0.772725344843521 22 1.72061635471339 32 1.5 13 0.772725344843521 23 1.72061635471339 33 1.5 70 1 0 3DFACE 8 pillar_b 10 2.03740115370177 20 2.03740115370178 30 0.0 11 2.08748794455568 21 1.98213889596437 31 1.5 12 2.08748794455568 22 1.98213889596437 32 0.0 13 2.08748794455568 23 1.98213889596437 33 0.0 70 1 0 3DFACE 8 pillar_b 10 2.08748794455568 20 1.98213889596437 30 1.5 11 2.03740115370177 21 2.03740115370178 31 0.0 12 2.03740115370178 22 2.03740115370178 32 1.5 13 2.03740115370178 23 2.03740115370178 33 1.5 70 1 0 3DFACE 8 pillar_b 10 1.72061635471339 20 0.772725344843521 30 1.5 11 1.64826864473226 21 0.754603186893545 31 0.0 12 1.72061635471339 22 0.772725344843522 32 0.0 13 1.72061635471339 23 0.772725344843522 33 0.0 70 1 0 3DFACE 8 pillar_b 10 1.64826864473226 20 0.754603186893545 30 0.0 11 1.72061635471339 21 0.772725344843521 31 1.5 12 1.64826864473226 22 0.754603186893545 32 1.5 13 1.64826864473226 23 0.754603186893545 33 1.5 70 1 0 3DFACE 8 pillar_b 10 0.962598846298224 20 0.962598846298224 30 1.5 11 0.91251205544432 21 1.01786110403563 31 0.0 12 0.962598846298224 22 0.962598846298224 32 0.0 13 0.962598846298224 23 0.962598846298224 33 0.0 70 1 0 3DFACE 8 pillar_b 10 0.91251205544432 20 1.01786110403563 30 0.0 11 0.962598846298224 21 0.962598846298224 31 1.5 12 0.91251205544432 22 1.01786110403563 32 1.5 13 0.91251205544432 23 1.01786110403563 33 1.5 70 1 0 3DFACE 8 pillar_b 10 0.797851555291422 20 1.20916059140253 30 1.5 11 0.82973983909525 21 1.14173848001224 31 0.0 12 0.82973983909525 22 1.14173848001224 32 1.5 13 0.82973983909525 23 1.14173848001224 33 1.5 70 1 0 3DFACE 8 pillar_b 10 0.82973983909525 20 1.14173848001224 30 0.0 11 0.797851555291422 21 1.20916059140253 31 1.5 12 0.797851555291422 22 1.20916059140253 32 0.0 13 0.797851555291422 23 1.20916059140253 33 0.0 70 1 0 3DFACE 8 pillar_b 10 2.13191690534993 20 1.0777666229051 30 0.0 11 2.17026016090475 21 1.14173848001224 31 1.5 12 2.13191690534993 22 1.0777666229051 32 1.5 13 2.13191690534993 23 1.0777666229051 33 1.5 70 1 0 3DFACE 8 pillar_b 10 2.17026016090475 20 1.14173848001224 30 1.5 11 2.13191690534993 21 1.0777666229051 31 0.0 12 2.17026016090475 22 1.14173848001224 32 0.0 13 2.17026016090475 23 1.14173848001224 33 0.0 70 1 0 3DFACE 8 pillar_b 10 2.20214844470858 20 1.20916059140253 30 0.0 11 2.17026016090475 21 1.14173848001224 31 1.5 12 2.17026016090475 22 1.14173848001224 32 0.0 13 2.17026016090475 23 1.14173848001224 33 0.0 70 1 0 3DFACE 8 pillar_b 10 2.17026016090475 20 1.14173848001224 30 1.5 11 2.20214844470858 21 1.20916059140253 31 0.0 12 2.20214844470858 22 1.20916059140253 32 1.5 13 2.20214844470858 23 1.20916059140253 33 1.5 70 1 0 3DFACE 8 pillar_b 10 0.82973983909525 20 1.14173848001224 30 1.5 11 0.868083094650066 21 1.0777666229051 31 0.0 12 0.868083094650066 22 1.0777666229051 32 1.5 13 0.868083094650066 23 1.0777666229051 33 1.5 70 1 0 3DFACE 8 pillar_b 10 0.868083094650066 20 1.0777666229051 30 0.0 11 0.82973983909525 21 1.14173848001224 31 1.5 12 0.82973983909525 22 1.14173848001224 32 0.0 13 0.82973983909525 23 1.14173848001224 33 0.0 70 1 0 3DFACE 8 pillar_b 10 2.22727465515648 20 1.27938364528661 30 0.0 11 2.24539681310646 21 1.35173135526774 31 1.5 12 2.22727465515648 22 1.27938364528661 32 1.5 13 2.22727465515648 23 1.27938364528661 33 1.5 70 1 0 3DFACE 8 pillar_b 10 2.24539681310646 20 1.35173135526774 30 1.5 11 2.22727465515648 21 1.27938364528661 31 0.0 12 2.24539681310646 22 1.35173135526774 32 0.0 13 2.24539681310646 23 1.35173135526774 33 0.0 70 1 0 3DFACE 8 pillar_b 10 2.22727465515648 20 1.27938364528661 30 0.0 11 2.20214844470858 21 1.20916059140253 31 1.5 12 2.20214844470858 22 1.20916059140253 32 0.0 13 2.20214844470858 23 1.20916059140253 33 0.0 70 1 0 3DFACE 8 pillar_b 10 2.20214844470858 20 1.20916059140253 30 1.5 11 2.22727465515648 21 1.27938364528661 31 0.0 12 2.22727465515648 22 1.27938364528661 32 1.5 13 2.22727465515648 23 1.27938364528661 33 1.5 70 1 0 3DFACE 8 pillar_b 10 2.26 20 1.5 30 0.0 11 2.25634039227087 21 1.42550697334953 31 1.5 12 2.25634039227087 22 1.42550697334953 32 0.0 13 2.25634039227087 23 1.42550697334953 33 0.0 70 1 0 3DFACE 8 pillar_b 10 2.25634039227087 20 1.42550697334953 30 1.5 11 2.26 21 1.5 31 0.0 12 2.26 22 1.5 32 1.5 13 2.26 23 1.5 33 1.5 70 1 0 3DFACE 8 pillar_b 10 1.64826864473226 20 0.754603186893545 30 1.5 11 1.57449302665047 21 0.743659607729131 31 0.0 12 1.64826864473226 22 0.754603186893545 32 0.0 13 1.64826864473226 23 0.754603186893545 33 0.0 70 1 0 3DFACE 8 pillar_b 10 1.57449302665047 20 0.743659607729131 30 0.0 11 1.64826864473226 21 0.754603186893545 31 1.5 12 1.57449302665047 22 0.743659607729131 32 1.5 13 1.57449302665047 23 0.743659607729131 33 1.5 70 1 0 3DFACE 8 pillar_b 10 0.868083094650066 20 1.0777666229051 30 1.5 11 0.91251205544432 21 1.01786110403563 31 0.0 12 0.91251205544432 22 1.01786110403563 32 1.5 13 0.91251205544432 23 1.01786110403563 33 1.5 70 1 0 3DFACE 8 pillar_b 10 0.91251205544432 20 1.01786110403563 30 0.0 11 0.868083094650066 21 1.0777666229051 31 1.5 12 0.868083094650066 22 1.0777666229051 32 0.0 13 0.868083094650066 23 1.0777666229051 33 0.0 70 1 0 3DFACE 8 pillar_b 10 1.0777666229051 20 0.868083094650066 30 1.5 11 1.01786110403563 21 0.91251205544432 31 0.0 12 1.0777666229051 22 0.868083094650066 32 0.0 13 1.0777666229051 23 0.868083094650066 33 0.0 70 1 0 3DFACE 8 pillar_b 10 1.01786110403563 20 0.91251205544432 30 0.0 11 1.0777666229051 21 0.868083094650066 31 1.5 12 1.01786110403563 22 0.91251205544432 32 1.5 13 1.01786110403563 23 0.91251205544432 33 1.5 70 1 0 3DFACE 8 pillar_b 10 0.74 20 1.5 30 1.5 11 0.743659607729131 21 1.42550697334953 31 0.0 12 0.743659607729131 22 1.42550697334953 32 1.5 13 0.743659607729131 23 1.42550697334953 33 1.5 70 1 0 3DFACE 8 pillar_b 10 0.743659607729131 20 1.42550697334953 30 0.0 11 0.74 21 1.5 31 1.5 12 0.74 22 1.5 32 0.0 13 0.74 23 1.5 33 0.0 70 1 0 3DFACE 8 pillar_b 10 0.743659607729131 20 1.42550697334953 30 1.5 11 0.754603186893545 21 1.35173135526774 31 0.0 12 0.754603186893545 22 1.35173135526774 32 1.5 13 0.754603186893545 23 1.35173135526774 33 1.5 70 1 0 3DFACE 8 pillar_b 10 0.754603186893545 20 1.35173135526774 30 0.0 11 0.743659607729131 21 1.42550697334953 31 1.5 12 0.743659607729131 22 1.42550697334953 32 0.0 13 0.743659607729131 23 1.42550697334953 33 0.0 70 1 0 3DFACE 8 pillar_b 10 0.754603186893545 20 1.35173135526774 30 1.5 11 0.772725344843521 21 1.27938364528661 31 0.0 12 0.772725344843522 22 1.27938364528661 32 1.5 13 0.772725344843522 23 1.27938364528661 33 1.5 70 1 0 3DFACE 8 pillar_b 10 0.772725344843521 20 1.27938364528661 30 0.0 11 0.754603186893545 21 1.35173135526774 31 1.5 12 0.754603186893545 22 1.35173135526774 32 0.0 13 0.754603186893545 23 1.35173135526774 33 0.0 70 1 0 3DFACE 8 pillar_b 10 0.772725344843522 20 1.27938364528661 30 1.5 11 0.797851555291422 21 1.20916059140253 31 0.0 12 0.797851555291422 22 1.20916059140253 32 1.5 13 0.797851555291422 23 1.20916059140253 33 1.5 70 1 0 3DFACE 8 pillar_b 10 0.797851555291422 20 1.20916059140253 30 0.0 11 0.772725344843522 21 1.27938364528661 31 1.5 12 0.772725344843521 22 1.27938364528661 32 0.0 13 0.772725344843521 23 1.27938364528661 33 0.0 70 1 0 3DFACE 8 pillar_b 10 1.14173848001224 20 2.17026016090475 30 1.5 11 1.20916059140253 21 2.20214844470858 31 0.0 12 1.14173848001224 22 2.17026016090475 32 0.0 13 1.14173848001224 23 2.17026016090475 33 0.0 70 1 0 3DFACE 8 pillar_b 10 1.20916059140253 20 2.20214844470858 30 0.0 11 1.14173848001224 21 2.17026016090475 31 1.5 12 1.20916059140253 22 2.20214844470858 32 1.5 13 1.20916059140253 23 2.20214844470858 33 1.5 70 1 0 3DFACE 8 pillar_b 10 1.5 20 1.5 30 0.0 11 1.42550697334953 21 0.74365960772913 31 0.0 12 1.35173135526774 22 0.754603186893545 32 0.0 13 1.35173135526774 23 0.754603186893545 33 0.0 70 1 0 3DFACE 8 pillar_b 10 1.42550697334953 20 0.74365960772913 30 0.0 11 1.5 21 1.5 31 0.0 12 1.5 22 0.74 32 0.0 13 1.5 23 0.74 33 0.0 70 1 0 3DFACE 8 pillar_b 10 2.25634039227087 20 1.42550697334953 30 0.0 11 2.24539681310646 21 1.35173135526774 31 1.5 12 2.24539681310646 22 1.35173135526774 32 0.0 13 2.24539681310646 23 1.35173135526774 33 0.0 70 1 0 3DFACE 8 pillar_b 10 2.24539681310646 20 1.35173135526774 30 1.5 11 2.25634039227087 21 1.42550697334953 31 0.0 12 2.25634039227087 22 1.42550697334953 32 1.5 13 2.25634039227087 23 1.42550697334953 33 1.5 70 1 0 3DFACE 8 pillar_b 10 2.03740115370178 20 0.962598846298225 30 0.0 11 2.08748794455568 21 1.01786110403563 31 1.5 12 2.03740115370178 22 0.962598846298224 32 1.5 13 2.03740115370178 23 0.962598846298224 33 1.5 70 1 0 3DFACE 8 pillar_b 10 2.08748794455568 20 1.01786110403563 30 1.5 11 2.03740115370178 21 0.962598846298225 31 0.0 12 2.08748794455568 22 1.01786110403563 32 0.0 13 2.08748794455568 23 1.01786110403563 33 0.0 70 1 0 3DFACE 8 pillar_b 10 2.22727465515648 20 1.72061635471339 30 0.0 11 2.20214844470858 21 1.79083940859747 31 1.5 12 2.22727465515648 22 1.72061635471339 32 1.5 13 2.22727465515648 23 1.72061635471339 33 1.5 70 1 0 3DFACE 8 pillar_b 10 2.20214844470858 20 1.79083940859747 30 1.5 11 2.22727465515648 21 1.72061635471339 31 0.0 12 2.20214844470858 22 1.79083940859747 32 0.0 13 2.20214844470858 23 1.79083940859747 33 0.0 70 1 0 3DFACE 8 pillar_b 10 1.20916059140253 20 0.797851555291422 30 1.5 11 1.14173848001224 21 0.829739839095251 31 0.0 12 1.20916059140253 22 0.797851555291422 32 0.0 13 1.20916059140253 23 0.797851555291422 33 0.0 70 1 0 3DFACE 8 pillar_b 10 1.14173848001224 20 0.829739839095251 30 0.0 11 1.20916059140253 21 0.797851555291422 31 1.5 12 1.14173848001224 22 0.82973983909525 32 1.5 13 1.14173848001224 23 0.82973983909525 33 1.5 70 1 0 3DFACE 8 pillar_b 10 2.24539681310645 20 1.64826864473226 30 1.5 11 2.20214844470858 21 1.79083940859747 31 1.5 12 1.5 22 1.5 32 1.5 13 1.5 23 1.5 33 1.5 70 1 0 3DFACE 8 pillar_b 10 2.20214844470858 20 1.79083940859747 30 1.5 11 2.24539681310645 21 1.64826864473226 31 1.5 12 2.22727465515648 22 1.72061635471339 32 1.5 13 2.22727465515648 23 1.72061635471339 33 1.5 70 1 0 3DFACE 8 pillar_b 10 0.74365960772913 20 1.57449302665047 30 0.0 11 1.5 21 1.5 31 0.0 12 0.74 22 1.5 32 0.0 13 0.74 23 1.5 33 0.0 70 1 0 3DFACE 8 pillar_b 10 1.5 20 1.5 30 0.0 11 0.74365960772913 21 1.57449302665047 31 0.0 12 0.754603186893545 22 1.64826864473226 32 0.0 13 0.754603186893545 23 1.64826864473226 33 0.0 70 1 0 3DFACE 8 pillar_b 10 1.64826864473226 20 2.24539681310646 30 0.0 11 1.79083940859747 21 2.20214844470858 31 0.0 12 1.5 22 1.5 32 0.0 13 1.5 23 1.5 33 0.0 70 1 0 3DFACE 8 pillar_b 10 1.79083940859747 20 2.20214844470858 30 0.0 11 1.64826864473226 21 2.24539681310646 31 0.0 12 1.72061635471339 22 2.22727465515648 32 0.0 13 1.72061635471339 23 2.22727465515648 33 0.0 70 1 0 3DFACE 8 pillar_b 10 2.24539681310646 20 1.35173135526774 30 0.0 11 2.20214844470858 21 1.20916059140253 31 0.0 12 1.5 22 1.5 32 0.0 13 1.5 23 1.5 33 0.0 70 1 0 3DFACE 8 pillar_b 10 2.20214844470858 20 1.20916059140253 30 0.0 11 2.24539681310646 21 1.35173135526774 31 0.0 12 2.22727465515648 22 1.27938364528661 32 0.0 13 2.22727465515648 23 1.27938364528661 33 0.0 70 1 0 3DFACE 8 pillar_b 10 1.5 20 1.5 30 0.0 11 1.14173848001224 21 0.829739839095251 31 0.0 12 1.0777666229051 22 0.868083094650066 32 0.0 13 1.0777666229051 23 0.868083094650066 33 0.0 70 1 0 3DFACE 8 pillar_b 10 1.14173848001224 20 0.829739839095251 30 0.0 11 1.5 21 1.5 31 0.0 12 1.20916059140253 22 0.797851555291422 32 0.0 13 1.20916059140253 23 0.797851555291422 33 0.0 70 1 0 3DFACE 8 pillar_b 10 1.5 20 2.26 30 0.0 11 1.64826864473226 21 2.24539681310646 31 0.0 12 1.5 22 1.5 32 0.0 13 1.5 23 1.5 33 0.0 70 1 0 3DFACE 8 pillar_b 10 1.64826864473226 20 2.24539681310646 30 0.0 11 1.5 21 2.26 31 0.0 12 1.57449302665047 22 2.25634039227087 32 0.0 13 1.57449302665047 23 2.25634039227087 33 0.0 70 1 0 3DFACE 8 pillar_b 10 1.9222333770949 20 2.13191690534993 30 0.0 11 2.03740115370177 21 2.03740115370178 31 0.0 12 1.5 22 1.5 32 0.0 13 1.5 23 1.5 33 0.0 70 1 0 3DFACE 8 pillar_b 10 2.03740115370177 20 2.03740115370178 30 0.0 11 1.9222333770949 21 2.13191690534993 31 0.0 12 1.98213889596437 22 2.08748794455568 32 0.0 13 1.98213889596437 23 2.08748794455568 33 0.0 70 1 0 3DFACE 8 pillar_b 10 1.5 20 1.5 30 0.0 11 1.27938364528661 21 0.772725344843521 31 0.0 12 1.20916059140253 22 0.797851555291422 32 0.0 13 1.20916059140253 23 0.797851555291422 33 0.0 70 1 0 3DFACE 8 pillar_b 10 1.27938364528661 20 0.772725344843521 30 0.0 11 1.5 21 1.5 31 0.0 12 1.35173135526774 22 0.754603186893545 32 0.0 13 1.35173135526774 23 0.754603186893545 33 0.0 70 1 0 3DFACE 8 pillar_b 10 1.5 20 1.5 30 0.0 11 0.91251205544432 21 1.01786110403563 31 0.0 12 0.868083094650066 22 1.0777666229051 32 0.0 13 0.868083094650066 23 1.0777666229051 33 0.0 70 1 0 3DFACE 8 pillar_b 10 0.91251205544432 20 1.01786110403563 30 0.0 11 1.5 21 1.5 31 0.0 12 0.962598846298224 22 0.962598846298224 32 0.0 13 0.962598846298224 23 0.962598846298224 33 0.0 70 1 0 3DFACE 8 pillar_b 10 1.79083940859747 20 2.20214844470858 30 0.0 11 1.9222333770949 21 2.13191690534993 31 0.0 12 1.5 22 1.5 32 0.0 13 1.5 23 1.5 33 0.0 70 1 0 3DFACE 8 pillar_b 10 1.9222333770949 20 2.13191690534993 30 0.0 11 1.79083940859747 21 2.20214844470858 31 0.0 12 1.85826151998776 22 2.17026016090475 32 0.0 13 1.85826151998776 23 2.17026016090475 33 0.0 70 1 0 3DFACE 8 pillar_b 10 2.13191690534993 20 1.9222333770949 30 0.0 11 2.20214844470858 21 1.79083940859747 31 0.0 12 1.5 22 1.5 32 0.0 13 1.5 23 1.5 33 0.0 70 1 0 3DFACE 8 pillar_b 10 2.20214844470858 20 1.79083940859747 30 0.0 11 2.13191690534993 21 1.9222333770949 31 0.0 12 2.17026016090475 22 1.85826151998776 32 0.0 13 2.17026016090475 23 1.85826151998776 33 0.0 70 1 0 3DFACE 8 pillar_b 10 1.5 20 1.5 30 0.0 11 1.01786110403563 21 0.91251205544432 31 0.0 12 0.962598846298224 22 0.962598846298224 32 0.0 13 0.962598846298224 23 0.962598846298224 33 0.0 70 1 0 3DFACE 8 pillar_b 10 1.01786110403563 20 0.91251205544432 30 0.0 11 1.5 21 1.5 31 0.0 12 1.0777666229051 22 0.868083094650066 32 0.0 13 1.0777666229051 23 0.868083094650066 33 0.0 70 1 0 3DFACE 8 pillar_b 10 1.5 20 1.5 30 0.0 11 0.772725344843521 21 1.27938364528661 31 0.0 12 0.754603186893545 22 1.35173135526774 32 0.0 13 0.754603186893545 23 1.35173135526774 33 0.0 70 1 0 3DFACE 8 pillar_b 10 0.772725344843521 20 1.27938364528661 30 0.0 11 1.5 21 1.5 31 0.0 12 0.797851555291422 22 1.20916059140253 32 0.0 13 0.797851555291422 23 1.20916059140253 33 0.0 70 1 0 3DFACE 8 pillar_b 10 2.03740115370177 20 2.03740115370178 30 0.0 11 2.13191690534993 21 1.9222333770949 31 0.0 12 1.5 22 1.5 32 0.0 13 1.5 23 1.5 33 0.0 70 1 0 3DFACE 8 pillar_b 10 2.13191690534993 20 1.9222333770949 30 0.0 11 2.03740115370177 21 2.03740115370178 31 0.0 12 2.08748794455568 22 1.98213889596437 32 0.0 13 2.08748794455568 23 1.98213889596437 33 0.0 70 1 0 3DFACE 8 pillar_b 10 1.5 20 1.5 30 0.0 11 0.82973983909525 21 1.14173848001224 31 0.0 12 0.797851555291422 22 1.20916059140253 32 0.0 13 0.797851555291422 23 1.20916059140253 33 0.0 70 1 0 3DFACE 8 pillar_b 10 0.82973983909525 20 1.14173848001224 30 0.0 11 1.5 21 1.5 31 0.0 12 0.868083094650066 22 1.0777666229051 32 0.0 13 0.868083094650066 23 1.0777666229051 33 0.0 70 1 0 3DFACE 8 pillar_b 10 2.24539681310646 20 1.64826864473226 30 0.0 11 2.26 21 1.5 31 0.0 12 1.5 22 1.5 32 0.0 13 1.5 23 1.5 33 0.0 70 1 0 3DFACE 8 pillar_b 10 2.26 20 1.5 30 0.0 11 2.24539681310646 21 1.64826864473226 31 0.0 12 2.25634039227087 22 1.57449302665047 32 0.0 13 2.25634039227087 23 1.57449302665047 33 0.0 70 1 0 3DFACE 8 pillar_b 10 1.5 20 1.5 30 0.0 11 0.743659607729131 21 1.42550697334953 31 0.0 12 0.74 22 1.5 32 0.0 13 0.74 23 1.5 33 0.0 70 1 0 3DFACE 8 pillar_b 10 0.743659607729131 20 1.42550697334953 30 0.0 11 1.5 21 1.5 31 0.0 12 0.754603186893545 22 1.35173135526774 32 0.0 13 0.754603186893545 23 1.35173135526774 33 0.0 70 1 0 3DFACE 8 pillar_b 10 2.20214844470858 20 1.79083940859747 30 0.0 11 2.24539681310646 21 1.64826864473226 31 0.0 12 1.5 22 1.5 32 0.0 13 1.5 23 1.5 33 0.0 70 1 0 3DFACE 8 pillar_b 10 2.24539681310646 20 1.64826864473226 30 0.0 11 2.20214844470858 21 1.79083940859747 31 0.0 12 2.22727465515648 22 1.72061635471339 32 0.0 13 2.22727465515648 23 1.72061635471339 33 0.0 70 1 0 3DFACE 8 pillar_b 10 0.82973983909525 20 1.85826151998776 30 0.0 11 1.5 21 1.5 31 0.0 12 0.797851555291422 22 1.79083940859747 32 0.0 13 0.797851555291422 23 1.79083940859747 33 0.0 70 1 0 3DFACE 8 pillar_b 10 1.5 20 1.5 30 0.0 11 0.82973983909525 21 1.85826151998776 31 0.0 12 0.868083094650066 22 1.9222333770949 32 0.0 13 0.868083094650066 23 1.9222333770949 33 0.0 70 1 0 3DFACE 8 pillar_b 10 2.26 20 1.5 30 0.0 11 2.24539681310646 21 1.35173135526774 31 0.0 12 1.5 22 1.5 32 0.0 13 1.5 23 1.5 33 0.0 70 1 0 3DFACE 8 pillar_b 10 2.24539681310646 20 1.35173135526774 30 0.0 11 2.26 21 1.5 31 0.0 12 2.25634039227087 22 1.42550697334953 32 0.0 13 2.25634039227087 23 1.42550697334953 33 0.0 70 1 0 3DFACE 8 pillar_b 10 0.772725344843522 20 1.72061635471339 30 0.0 11 1.5 21 1.5 31 0.0 12 0.754603186893545 22 1.64826864473226 32 0.0 13 0.754603186893545 23 1.64826864473226 33 0.0 70 1 0 3DFACE 8 pillar_b 10 1.5 20 1.5 30 0.0 11 0.772725344843522 21 1.72061635471339 31 0.0 12 0.797851555291422 22 1.79083940859747 32 0.0 13 0.797851555291422 23 1.79083940859747 33 0.0 70 1 0 3DFACE 8 pillar_b 10 2.13191690534993 20 1.0777666229051 30 0.0 11 2.03740115370178 21 0.962598846298225 31 0.0 12 1.5 22 1.5 32 0.0 13 1.5 23 1.5 33 0.0 70 1 0 3DFACE 8 pillar_b 10 2.03740115370178 20 0.962598846298225 30 0.0 11 2.13191690534993 21 1.0777666229051 31 0.0 12 2.08748794455568 22 1.01786110403563 32 0.0 13 2.08748794455568 23 1.01786110403563 33 0.0 70 1 0 3DFACE 8 pillar_b 10 2.20214844470858 20 1.20916059140253 30 0.0 11 2.13191690534993 21 1.0777666229051 31 0.0 12 1.5 22 1.5 32 0.0 13 1.5 23 1.5 33 0.0 70 1 0 3DFACE 8 pillar_b 10 2.13191690534993 20 1.0777666229051 30 0.0 11 2.20214844470858 21 1.20916059140253 31 0.0 12 2.17026016090475 22 1.14173848001224 32 0.0 13 2.17026016090475 23 1.14173848001224 33 0.0 70 1 0 3DFACE 8 pillar_b 10 1.01786110403563 20 2.08748794455568 30 0.0 11 1.5 21 1.5 31 0.0 12 0.962598846298224 22 2.03740115370178 32 0.0 13 0.962598846298224 23 2.03740115370178 33 0.0 70 1 0 3DFACE 8 pillar_b 10 1.5 20 1.5 30 0.0 11 1.01786110403563 21 2.08748794455568 31 0.0 12 1.0777666229051 22 2.13191690534993 32 0.0 13 1.0777666229051 23 2.13191690534993 33 0.0 70 1 0 3DFACE 8 pillar_b 10 1.9222333770949 20 0.868083094650066 30 0.0 11 1.79083940859747 21 0.797851555291422 31 0.0 12 1.5 22 1.5 32 0.0 13 1.5 23 1.5 33 0.0 70 1 0 3DFACE 8 pillar_b 10 1.79083940859747 20 0.797851555291422 30 0.0 11 1.9222333770949 21 0.868083094650066 31 0.0 12 1.85826151998776 22 0.829739839095251 32 0.0 13 1.85826151998776 23 0.829739839095251 33 0.0 70 1 0 3DFACE 8 pillar_b 10 0.91251205544432 20 1.98213889596437 30 0.0 11 1.5 21 1.5 31 0.0 12 0.868083094650066 22 1.9222333770949 32 0.0 13 0.868083094650066 23 1.9222333770949 33 0.0 70 1 0 3DFACE 8 pillar_b 10 1.5 20 1.5 30 0.0 11 0.91251205544432 21 1.98213889596437 31 0.0 12 0.962598846298224 22 2.03740115370178 32 0.0 13 0.962598846298224 23 2.03740115370178 33 0.0 70 1 0 3DFACE 8 pillar_b 10 2.03740115370178 20 0.962598846298225 30 0.0 11 1.9222333770949 21 0.868083094650066 31 0.0 12 1.5 22 1.5 32 0.0 13 1.5 23 1.5 33 0.0 70 1 0 3DFACE 8 pillar_b 10 1.9222333770949 20 0.868083094650066 30 0.0 11 2.03740115370178 21 0.962598846298225 31 0.0 12 1.98213889596437 22 0.91251205544432 32 0.0 13 1.98213889596437 23 0.91251205544432 33 0.0 70 1 0 3DFACE 8 pillar_b 10 1.27938364528661 20 2.22727465515648 30 0.0 11 1.5 21 1.5 31 0.0 12 1.20916059140253 22 2.20214844470858 32 0.0 13 1.20916059140253 23 2.20214844470858 33 0.0 70 1 0 3DFACE 8 pillar_b 10 1.5 20 1.5 30 0.0 11 1.27938364528661 21 2.22727465515648 31 0.0 12 1.35173135526774 22 2.24539681310645 32 0.0 13 1.35173135526774 23 2.24539681310645 33 0.0 70 1 0 3DFACE 8 pillar_b 10 1.14173848001224 20 2.17026016090475 30 0.0 11 1.5 21 1.5 31 0.0 12 1.0777666229051 22 2.13191690534993 32 0.0 13 1.0777666229051 23 2.13191690534993 33 0.0 70 1 0 3DFACE 8 pillar_b 10 1.5 20 1.5 30 0.0 11 1.14173848001224 21 2.17026016090475 31 0.0 12 1.20916059140253 22 2.20214844470858 32 0.0 13 1.20916059140253 23 2.20214844470858 33 0.0 70 1 0 3DFACE 8 pillar_b 10 1.64826864473226 20 0.754603186893545 30 0.0 11 1.5 21 0.74 31 0.0 12 1.5 22 1.5 32 0.0 13 1.5 23 1.5 33 0.0 70 1 0 3DFACE 8 pillar_b 10 1.5 20 0.74 30 0.0 11 1.64826864473226 21 0.754603186893545 31 0.0 12 1.57449302665047 22 0.743659607729131 32 0.0 13 1.57449302665047 23 0.743659607729131 33 0.0 70 1 0 3DFACE 8 pillar_b 10 1.79083940859747 20 0.797851555291422 30 0.0 11 1.64826864473226 21 0.754603186893545 31 0.0 12 1.5 22 1.5 32 0.0 13 1.5 23 1.5 33 0.0 70 1 0 3DFACE 8 pillar_b 10 1.64826864473226 20 0.754603186893545 30 0.0 11 1.79083940859747 21 0.797851555291422 31 0.0 12 1.72061635471339 22 0.772725344843522 32 0.0 13 1.72061635471339 23 0.772725344843522 33 0.0 70 1 0 3DFACE 8 pillar_b 10 1.42550697334953 20 2.25634039227087 30 0.0 11 1.5 21 1.5 31 0.0 12 1.35173135526774 22 2.24539681310645 32 0.0 13 1.35173135526774 23 2.24539681310645 33 0.0 70 1 0 3DFACE 8 pillar_b 10 1.5 20 1.5 30 0.0 11 1.42550697334953 21 2.25634039227087 31 0.0 12 1.5 22 2.26 32 0.0 13 1.5 23 2.26 33 0.0 70 1 0 3DFACE 8 pillar_b 10 2.20214844470858 20 1.79083940859747 30 1.5 11 2.13191690534993 21 1.9222333770949 31 1.5 12 1.5 22 1.5 32 1.5 13 1.5 23 1.5 33 1.5 70 1 0 3DFACE 8 pillar_b 10 2.13191690534993 20 1.9222333770949 30 1.5 11 2.20214844470858 21 1.79083940859747 31 1.5 12 2.17026016090475 22 1.85826151998776 32 1.5 13 2.17026016090475 23 1.85826151998776 33 1.5 70 1 0 3DFACE 8 pillar_b 10 1.9222333770949 20 2.13191690534993 30 1.5 11 1.79083940859747 21 2.20214844470858 31 1.5 12 1.5 22 1.5 32 1.5 13 1.5 23 1.5 33 1.5 70 1 0 3DFACE 8 pillar_b 10 1.79083940859747 20 2.20214844470858 30 1.5 11 1.9222333770949 21 2.13191690534993 31 1.5 12 1.85826151998776 22 2.17026016090475 32 1.5 13 1.85826151998776 23 2.17026016090475 33 1.5 70 1 0 3DFACE 8 pillar_b 10 1.5 20 1.5 30 1.5 11 0.91251205544432 21 1.98213889596437 31 1.5 12 0.868083094650066 22 1.9222333770949 32 1.5 13 0.868083094650066 23 1.9222333770949 33 1.5 70 1 0 3DFACE 8 pillar_b 10 0.91251205544432 20 1.98213889596437 30 1.5 11 1.5 21 1.5 31 1.5 12 0.962598846298224 22 2.03740115370178 32 1.5 13 0.962598846298224 23 2.03740115370178 33 1.5 70 1 0 3DFACE 8 pillar_b 10 1.79083940859747 20 2.20214844470858 30 1.5 11 1.64826864473226 21 2.24539681310646 31 1.5 12 1.5 22 1.5 32 1.5 13 1.5 23 1.5 33 1.5 70 1 0 3DFACE 8 pillar_b 10 1.64826864473226 20 2.24539681310646 30 1.5 11 1.79083940859747 21 2.20214844470858 31 1.5 12 1.72061635471339 22 2.22727465515648 32 1.5 13 1.72061635471339 23 2.22727465515648 33 1.5 70 1 0 3DFACE 8 pillar_b 10 2.13191690534993 20 1.9222333770949 30 1.5 11 2.03740115370178 21 2.03740115370178 31 1.5 12 1.5 22 1.5 32 1.5 13 1.5 23 1.5 33 1.5 70 1 0 3DFACE 8 pillar_b 10 2.03740115370178 20 2.03740115370178 30 1.5 11 2.13191690534993 21 1.9222333770949 31 1.5 12 2.08748794455568 22 1.98213889596437 32 1.5 13 2.08748794455568 23 1.98213889596437 33 1.5 70 1 0 3DFACE 8 pillar_b 10 1.64826864473226 20 2.24539681310646 30 1.5 11 1.5 21 2.26 31 1.5 12 1.5 22 1.5 32 1.5 13 1.5 23 1.5 33 1.5 70 1 0 3DFACE 8 pillar_b 10 1.5 20 2.26 30 1.5 11 1.64826864473226 21 2.24539681310646 31 1.5 12 1.57449302665047 22 2.25634039227087 32 1.5 13 1.57449302665047 23 2.25634039227087 33 1.5 70 1 0 3DFACE 8 pillar_b 10 1.5 20 1.5 30 1.5 11 1.01786110403563 21 2.08748794455568 31 1.5 12 0.962598846298224 22 2.03740115370178 32 1.5 13 0.962598846298224 23 2.03740115370178 33 1.5 70 1 0 3DFACE 8 pillar_b 10 1.01786110403563 20 2.08748794455568 30 1.5 11 1.5 21 1.5 31 1.5 12 1.0777666229051 22 2.13191690534993 32 1.5 13 1.0777666229051 23 2.13191690534993 33 1.5 70 1 0 3DFACE 8 pillar_b 10 1.01786110403563 20 0.91251205544432 30 1.5 11 1.5 21 1.5 31 1.5 12 0.962598846298224 22 0.962598846298224 32 1.5 13 0.962598846298224 23 0.962598846298224 33 1.5 70 1 0 3DFACE 8 pillar_b 10 1.5 20 1.5 30 1.5 11 1.01786110403563 21 0.91251205544432 31 1.5 12 1.0777666229051 22 0.868083094650066 32 1.5 13 1.0777666229051 23 0.868083094650066 33 1.5 70 1 0 3DFACE 8 pillar_b 10 0.82973983909525 20 1.14173848001224 30 1.5 11 1.5 21 1.5 31 1.5 12 0.797851555291422 22 1.20916059140253 32 1.5 13 0.797851555291422 23 1.20916059140253 33 1.5 70 1 0 3DFACE 8 pillar_b 10 1.5 20 1.5 30 1.5 11 0.82973983909525 21 1.14173848001224 31 1.5 12 0.868083094650066 22 1.0777666229051 32 1.5 13 0.868083094650066 23 1.0777666229051 33 1.5 70 1 0 3DFACE 8 pillar_b 10 1.9222333770949 20 0.868083094650066 30 1.5 11 2.03740115370178 21 0.962598846298224 31 1.5 12 1.5 22 1.5 32 1.5 13 1.5 23 1.5 33 1.5 70 1 0 3DFACE 8 pillar_b 10 2.03740115370178 20 0.962598846298224 30 1.5 11 1.9222333770949 21 0.868083094650066 31 1.5 12 1.98213889596437 22 0.91251205544432 32 1.5 13 1.98213889596437 23 0.91251205544432 33 1.5 70 1 0 3DFACE 8 pillar_b 10 0.91251205544432 20 1.01786110403563 30 1.5 11 1.5 21 1.5 31 1.5 12 0.868083094650066 22 1.0777666229051 32 1.5 13 0.868083094650066 23 1.0777666229051 33 1.5 70 1 0 3DFACE 8 pillar_b 10 1.5 20 1.5 30 1.5 11 0.91251205544432 21 1.01786110403563 31 1.5 12 0.962598846298224 22 0.962598846298224 32 1.5 13 0.962598846298224 23 0.962598846298224 33 1.5 70 1 0 3DFACE 8 pillar_b 10 1.27938364528661 20 0.772725344843521 30 1.5 11 1.5 21 1.5 31 1.5 12 1.20916059140253 22 0.797851555291422 32 1.5 13 1.20916059140253 23 0.797851555291422 33 1.5 70 1 0 3DFACE 8 pillar_b 10 1.5 20 1.5 30 1.5 11 1.27938364528661 21 0.772725344843521 31 1.5 12 1.35173135526774 22 0.754603186893545 32 1.5 13 1.35173135526774 23 0.754603186893545 33 1.5 70 1 0 3DFACE 8 pillar_b 10 1.79083940859747 20 0.797851555291422 30 1.5 11 1.9222333770949 21 0.868083094650066 31 1.5 12 1.5 22 1.5 32 1.5 13 1.5 23 1.5 33 1.5 70 1 0 3DFACE 8 pillar_b 10 1.9222333770949 20 0.868083094650066 30 1.5 11 1.79083940859747 21 0.797851555291422 31 1.5 12 1.85826151998776 22 0.82973983909525 32 1.5 13 1.85826151998776 23 0.82973983909525 33 1.5 70 1 0 3DFACE 8 pillar_b 10 2.13191690534993 20 1.0777666229051 30 1.5 11 2.20214844470858 21 1.20916059140253 31 1.5 12 1.5 22 1.5 32 1.5 13 1.5 23 1.5 33 1.5 70 1 0 3DFACE 8 pillar_b 10 2.20214844470858 20 1.20916059140253 30 1.5 11 2.13191690534993 21 1.0777666229051 31 1.5 12 2.17026016090475 22 1.14173848001224 32 1.5 13 2.17026016090475 23 1.14173848001224 33 1.5 70 1 0 3DFACE 8 pillar_b 10 1.14173848001224 20 0.82973983909525 30 1.5 11 1.5 21 1.5 31 1.5 12 1.0777666229051 22 0.868083094650066 32 1.5 13 1.0777666229051 23 0.868083094650066 33 1.5 70 1 0 3DFACE 8 pillar_b 10 1.5 20 1.5 30 1.5 11 1.14173848001224 21 0.82973983909525 31 1.5 12 1.20916059140253 22 0.797851555291422 32 1.5 13 1.20916059140253 23 0.797851555291422 33 1.5 70 1 0 3DFACE 8 pillar_b 10 1.64826864473226 20 0.754603186893545 30 1.5 11 1.79083940859747 21 0.797851555291422 31 1.5 12 1.5 22 1.5 32 1.5 13 1.5 23 1.5 33 1.5 70 1 0 3DFACE 8 pillar_b 10 1.79083940859747 20 0.797851555291422 30 1.5 11 1.64826864473226 21 0.754603186893545 31 1.5 12 1.72061635471339 22 0.772725344843521 32 1.5 13 1.72061635471339 23 0.772725344843521 33 1.5 70 1 0 3DFACE 8 pillar_b 10 1.5 20 1.5 30 1.5 11 0.772725344843521 21 1.72061635471339 31 1.5 12 0.754603186893545 22 1.64826864473226 32 1.5 13 0.754603186893545 23 1.64826864473226 33 1.5 70 1 0 3DFACE 8 pillar_b 10 0.772725344843521 20 1.72061635471339 30 1.5 11 1.5 21 1.5 31 1.5 12 0.797851555291422 22 1.79083940859747 32 1.5 13 0.797851555291422 23 1.79083940859747 33 1.5 70 1 0 3DFACE 8 pillar_b 10 1.5 20 1.5 30 1.5 11 1.14173848001224 21 2.17026016090475 31 1.5 12 1.0777666229051 22 2.13191690534993 32 1.5 13 1.0777666229051 23 2.13191690534993 33 1.5 70 1 0 3DFACE 8 pillar_b 10 1.14173848001224 20 2.17026016090475 30 1.5 11 1.5 21 1.5 31 1.5 12 1.20916059140253 22 2.20214844470858 32 1.5 13 1.20916059140253 23 2.20214844470858 33 1.5 70 1 0 3DFACE 8 pillar_b 10 1.5 20 1.5 30 1.5 11 0.743659607729131 21 1.57449302665047 31 1.5 12 0.74 22 1.5 32 1.5 13 0.74 23 1.5 33 1.5 70 1 0 3DFACE 8 pillar_b 10 0.743659607729131 20 1.57449302665047 30 1.5 11 1.5 21 1.5 31 1.5 12 0.754603186893545 22 1.64826864473226 32 1.5 13 0.754603186893545 23 1.64826864473226 33 1.5 70 1 0 3DFACE 8 pillar_b 10 1.5 20 1.5 30 1.5 11 0.82973983909525 21 1.85826151998776 31 1.5 12 0.797851555291422 22 1.79083940859747 32 1.5 13 0.797851555291422 23 1.79083940859747 33 1.5 70 1 0 3DFACE 8 pillar_b 10 0.82973983909525 20 1.85826151998776 30 1.5 11 1.5 21 1.5 31 1.5 12 0.868083094650066 22 1.9222333770949 32 1.5 13 0.868083094650066 23 1.9222333770949 33 1.5 70 1 0 3DFACE 8 pillar_b 10 0.743659607729131 20 1.42550697334953 30 1.5 11 1.5 21 1.5 31 1.5 12 0.74 22 1.5 32 1.5 13 0.74 23 1.5 33 1.5 70 1 0 3DFACE 8 pillar_b 10 1.5 20 1.5 30 1.5 11 0.743659607729131 21 1.42550697334953 31 1.5 12 0.754603186893545 22 1.35173135526774 32 1.5 13 0.754603186893545 23 1.35173135526774 33 1.5 70 1 0 3DFACE 8 pillar_b 10 0.772725344843522 20 1.27938364528661 30 1.5 11 1.5 21 1.5 31 1.5 12 0.754603186893545 22 1.35173135526774 32 1.5 13 0.754603186893545 23 1.35173135526774 33 1.5 70 1 0 3DFACE 8 pillar_b 10 1.5 20 1.5 30 1.5 11 0.772725344843522 21 1.27938364528661 31 1.5 12 0.797851555291422 22 1.20916059140253 32 1.5 13 0.797851555291422 23 1.20916059140253 33 1.5 70 1 0 3DFACE 8 pillar_b 10 1.5 20 1.5 30 1.5 11 1.42550697334953 21 2.25634039227087 31 1.5 12 1.35173135526774 22 2.24539681310645 32 1.5 13 1.35173135526774 23 2.24539681310645 33 1.5 70 1 0 3DFACE 8 pillar_b 10 1.42550697334953 20 2.25634039227087 30 1.5 11 1.5 21 1.5 31 1.5 12 1.5 22 2.26 32 1.5 13 1.5 23 2.26 33 1.5 70 1 0 3DFACE 8 pillar_b 10 2.03740115370178 20 2.03740115370178 30 1.5 11 1.9222333770949 21 2.13191690534993 31 1.5 12 1.5 22 1.5 32 1.5 13 1.5 23 1.5 33 1.5 70 1 0 3DFACE 8 pillar_b 10 1.9222333770949 20 2.13191690534993 30 1.5 11 2.03740115370178 21 2.03740115370178 31 1.5 12 1.98213889596437 22 2.08748794455568 32 1.5 13 1.98213889596437 23 2.08748794455568 33 1.5 70 1 0 3DFACE 8 pillar_b 10 2.03740115370178 20 0.962598846298224 30 1.5 11 2.13191690534993 21 1.0777666229051 31 1.5 12 1.5 22 1.5 32 1.5 13 1.5 23 1.5 33 1.5 70 1 0 3DFACE 8 pillar_b 10 2.13191690534993 20 1.0777666229051 30 1.5 11 2.03740115370178 21 0.962598846298224 31 1.5 12 2.08748794455568 22 1.01786110403563 32 1.5 13 2.08748794455568 23 1.01786110403563 33 1.5 70 1 0 3DFACE 8 pillar_b 10 2.26 20 1.5 30 1.5 11 2.24539681310645 21 1.64826864473226 31 1.5 12 1.5 22 1.5 32 1.5 13 1.5 23 1.5 33 1.5 70 1 0 3DFACE 8 pillar_b 10 2.24539681310645 20 1.64826864473226 30 1.5 11 2.26 21 1.5 31 1.5 12 2.25634039227087 22 1.57449302665047 32 1.5 13 2.25634039227087 23 1.57449302665047 33 1.5 70 1 0 3DFACE 8 pillar_b 10 1.42550697334953 20 0.743659607729131 30 1.5 11 1.5 21 1.5 31 1.5 12 1.35173135526774 22 0.754603186893545 32 1.5 13 1.35173135526774 23 0.754603186893545 33 1.5 70 1 0 3DFACE 8 pillar_b 10 1.5 20 1.5 30 1.5 11 1.42550697334953 21 0.743659607729131 31 1.5 12 1.5 22 0.74 32 1.5 13 1.5 23 0.74 33 1.5 70 1 0 3DFACE 8 pillar_b 10 1.5 20 0.74 30 1.5 11 1.64826864473226 21 0.754603186893545 31 1.5 12 1.5 22 1.5 32 1.5 13 1.5 23 1.5 33 1.5 70 1 0 3DFACE 8 pillar_b 10 1.64826864473226 20 0.754603186893545 30 1.5 11 1.5 21 0.74 31 1.5 12 1.57449302665047 22 0.743659607729131 32 1.5 13 1.57449302665047 23 0.743659607729131 33 1.5 70 1 0 3DFACE 8 pillar_b 10 2.20214844470858 20 1.20916059140253 30 1.5 11 2.24539681310646 21 1.35173135526774 31 1.5 12 1.5 22 1.5 32 1.5 13 1.5 23 1.5 33 1.5 70 1 0 3DFACE 8 pillar_b 10 2.24539681310646 20 1.35173135526774 30 1.5 11 2.20214844470858 21 1.20916059140253 31 1.5 12 2.22727465515648 22 1.27938364528661 32 1.5 13 2.22727465515648 23 1.27938364528661 33 1.5 70 1 0 3DFACE 8 pillar_b 10 1.5 20 1.5 30 1.5 11 1.27938364528661 21 2.22727465515648 31 1.5 12 1.20916059140253 22 2.20214844470858 32 1.5 13 1.20916059140253 23 2.20214844470858 33 1.5 70 1 0 3DFACE 8 pillar_b 10 1.27938364528661 20 2.22727465515648 30 1.5 11 1.5 21 1.5 31 1.5 12 1.35173135526774 22 2.24539681310645 32 1.5 13 1.35173135526774 23 2.24539681310645 33 1.5 70 1 0 3DFACE 8 pillar_b 10 2.24539681310646 20 1.35173135526774 30 1.5 11 2.26 21 1.5 31 1.5 12 1.5 22 1.5 32 1.5 13 1.5 23 1.5 33 1.5 70 1 0 3DFACE 8 pillar_b 10 2.26 20 1.5 30 1.5 11 2.24539681310646 21 1.35173135526774 31 1.5 12 2.25634039227087 22 1.42550697334953 32 1.5 13 2.25634039227087 23 1.42550697334953 33 1.5 70 1 0 3DFACE 8 leviathan 10 2.25005874840729 20 3.0007189449114 30 2.25038878031282 11 6.83599400219787 21 -3.83207178618818 31 6.83197759827438 12 2.25309854396822 22 0.752182882434337 32 -0.00106460677458386 13 2.25309854396822 23 0.752182882434337 33 -0.00106460677458386 70 0 0 3DFACE 8 leviathan 10 2.25005874840729 20 3.0007189449114 30 2.25038878031282 11 2.25309854396822 21 0.752182882434337 31 -0.00106460677458386 12 -3.83269312832729 22 6.83333584417703 32 -3.83401461964133 13 -3.83269312832729 23 6.83333584417703 33 -3.83401461964133 70 0 0 3DFACE 8 leviathan 10 6.83599400219787 20 -3.83207178618818 30 6.83197759827438 11 0.00179401843026383 21 0.748994259637591 31 2.24762029441129 12 2.25309854396822 22 0.752182882434337 32 -0.00106460677458386 13 2.25309854396822 23 0.752182882434337 33 -0.00106460677458386 70 0 0 3DFACE 8 leviathan 10 6.83599400219787 20 -3.83207178618818 30 6.83197759827438 11 2.25005874840729 21 3.0007189449114 31 2.25038878031282 12 0.00179401843026383 22 0.748994259637591 32 2.24762029441129 13 0.00179401843026383 23 0.748994259637591 33 2.24762029441129 70 0 0 3DFACE 8 leviathan 10 0.00179401843026383 20 0.748994259637591 30 2.24762029441129 11 2.25005874840729 21 3.0007189449114 31 2.25038878031282 12 -3.83269312832729 22 6.83333584417703 32 -3.83401461964133 13 -3.83269312832729 23 6.83333584417703 33 -3.83401461964133 70 0 0 3DFACE 8 leviathan 10 0.00179401843026383 20 0.748994259637591 30 2.24762029441129 11 -3.83269312832729 21 6.83333584417703 31 -3.83401461964133 12 2.25309854396822 22 0.752182882434337 32 -0.00106460677458386 13 2.25309854396822 23 0.752182882434337 33 -0.00106460677458386 70 0 0 3DFACE 8 box 10 0.0 20 0.205 30 2.795 11 0.0 21 0.0 31 2.795 12 0.0 22 0.0 32 3.0 13 0.0 23 0.0 33 3.0 70 0 0 3DFACE 8 box 10 0.962598846298224 20 2.03740115370178 30 3.0 11 0.205 21 3.0 31 3.0 12 0.0 22 3.0 32 3.0 13 0.0 23 3.0 33 3.0 70 1 0 3DFACE 8 box 10 0.205 20 3.0 30 3.0 11 0.962598846298224 21 2.03740115370178 31 3.0 12 0.497732043121052 22 3.0 32 3.0 13 0.497732043121052 23 3.0 33 3.0 70 3 0 3DFACE 8 box 10 0.497732043121052 20 3.0 30 3.0 11 0.962598846298224 21 2.03740115370178 31 3.0 12 1.01786110403563 22 2.08748794455568 32 3.0 13 1.01786110403563 23 2.08748794455568 33 3.0 70 13 0 3DFACE 8 box 10 0.497732043121052 20 3.0 30 3.0 11 1.01786110403563 21 2.08748794455568 31 3.0 12 1.0777666229051 22 2.13191690534993 32 3.0 13 1.0777666229051 23 2.13191690534993 33 3.0 70 1 0 3DFACE 8 box 10 3.0 20 1.5 30 2.795 11 3.0 21 0.205 31 3.0 12 3.0 22 0.205 32 2.795 13 3.0 23 0.205 33 2.795 70 1 0 3DFACE 8 box 10 3.0 20 0.205 30 3.0 11 3.0 21 1.5 31 2.795 12 3.0 22 0.497732043121051 32 3.0 13 3.0 23 0.497732043121051 33 3.0 70 3 0 3DFACE 8 box 10 3.0 20 0.497732043121051 30 3.0 11 3.0 21 1.5 31 2.795 12 3.0 22 0.878679656440357 32 3.0 13 3.0 23 0.878679656440357 33 3.0 70 3 0 3DFACE 8 box 10 3.0 20 0.878679656440357 30 3.0 11 3.0 21 1.5 31 2.795 12 3.0 22 1.20163144893051 32 3.0 13 3.0 23 1.20163144893051 33 3.0 70 3 0 3DFACE 8 box 10 3.0 20 1.20163144893051 30 3.0 11 3.0 21 1.5 31 2.795 12 3.0 22 1.5 32 3.0 13 3.0 23 1.5 33 3.0 70 1 0 3DFACE 8 box 10 0.0 20 3.0 30 1.5 11 0.205 21 3.0 31 0.205 12 0.0 22 3.0 32 0.205 13 0.0 23 3.0 33 0.205 70 1 0 3DFACE 8 box 10 0.205 20 3.0 30 0.205 11 0.0 21 3.0 31 1.5 12 0.205 22 3.0 32 1.5 13 0.205 23 3.0 33 1.5 70 1 0 3DFACE 8 box 10 2.795 20 0.0 30 0.205 11 2.795 21 0.0 31 0.0 12 3.0 22 0.0 32 0.0 13 3.0 23 0.0 33 0.0 70 0 0 3DFACE 8 box 10 2.50226795687895 20 3.0 30 0.0 11 1.98213889596437 21 2.08748794455568 31 0.0 12 1.9222333770949 22 2.13191690534993 32 0.0 13 1.9222333770949 23 2.13191690534993 33 0.0 70 1 0 3DFACE 8 box 10 1.98213889596437 20 2.08748794455568 30 0.0 11 2.50226795687895 21 3.0 31 0.0 12 2.03740115370178 22 2.03740115370178 32 0.0 13 2.03740115370178 23 2.03740115370178 33 0.0 70 3 0 3DFACE 8 box 10 2.03740115370178 20 2.03740115370178 30 0.0 11 2.50226795687895 21 3.0 31 0.0 12 3.0 22 3.0 32 0.0 13 3.0 23 3.0 33 0.0 70 3 0 3DFACE 8 box 10 3.0 20 3.0 30 0.0 11 2.50226795687895 21 3.0 31 0.0 12 2.795 22 3.0 32 0.0 13 2.795 23 3.0 33 0.0 70 1 0 3DFACE 8 box 10 2.12132034355964 20 3.0 30 0.0 11 1.85826151998776 21 2.17026016090475 31 0.0 12 1.79083940859747 22 2.20214844470858 32 0.0 13 1.79083940859747 23 2.20214844470858 33 0.0 70 1 0 3DFACE 8 box 10 1.85826151998776 20 2.17026016090475 30 0.0 11 2.12132034355964 21 3.0 31 0.0 12 1.9222333770949 22 2.13191690534993 32 0.0 13 1.9222333770949 23 2.13191690534993 33 0.0 70 3 0 3DFACE 8 box 10 1.9222333770949 20 2.13191690534993 30 0.0 11 2.12132034355964 21 3.0 31 0.0 12 2.50226795687895 22 3.0 32 0.0 13 2.50226795687895 23 3.0 33 0.0 70 1 0 3DFACE 8 box 10 1.57449302665047 20 0.743659607729131 30 0.0 11 1.5 21 5.55111512312578e-17 31 0.0 12 1.5 22 0.74 32 0.0 13 1.5 23 0.74 33 0.0 70 1 0 3DFACE 8 box 10 1.5 20 5.55111512312578e-17 30 0.0 11 1.57449302665047 21 0.743659607729131 31 0.0 12 1.79836855106949 22 5.55111512312578e-17 32 0.0 13 1.79836855106949 23 5.55111512312578e-17 33 0.0 70 3 0 3DFACE 8 box 10 1.79836855106949 20 5.55111512312578e-17 30 0.0 11 1.57449302665047 21 0.743659607729131 31 0.0 12 1.64826864473226 22 0.754603186893545 32 0.0 13 1.64826864473226 23 0.754603186893545 33 0.0 70 1 0 3DFACE 8 box 10 1.98213889596437 20 0.91251205544432 30 0.0 11 2.50226795687895 21 0.0 31 0.0 12 1.9222333770949 22 0.868083094650066 32 0.0 13 1.9222333770949 23 0.868083094650066 33 0.0 70 1 0 3DFACE 8 box 10 2.50226795687895 20 0.0 30 0.0 11 1.98213889596437 21 0.91251205544432 31 0.0 12 2.03740115370178 22 0.962598846298224 32 0.0 13 2.03740115370178 23 0.962598846298224 33 0.0 70 13 0 3DFACE 8 box 10 2.50226795687895 20 0.0 30 0.0 11 2.03740115370178 21 0.962598846298224 31 0.0 12 3.0 22 0.0 32 0.0 13 3.0 23 0.0 33 0.0 70 13 0 3DFACE 8 box 10 2.50226795687895 20 0.0 30 0.0 11 3.0 21 0.0 31 0.0 12 2.795 22 0.0 32 0.0 13 2.795 23 0.0 33 0.0 70 1 0 3DFACE 8 box 10 2.08748794455568 20 1.01786110403563 30 0.0 11 3.0 21 0.0 31 0.0 12 2.03740115370178 22 0.962598846298224 32 0.0 13 2.03740115370178 23 0.962598846298224 33 0.0 70 1 0 3DFACE 8 box 10 3.0 20 0.0 30 0.0 11 2.08748794455568 21 1.01786110403563 31 0.0 12 2.13191690534993 22 1.0777666229051 32 0.0 13 2.13191690534993 23 1.0777666229051 33 0.0 70 13 0 3DFACE 8 box 10 3.0 20 0.0 30 0.0 11 2.13191690534993 21 1.0777666229051 31 0.0 12 3.0 22 0.497732043121051 32 0.0 13 3.0 23 0.497732043121051 33 0.0 70 13 0 3DFACE 8 box 10 3.0 20 0.0 30 0.0 11 3.0 21 0.497732043121051 31 0.0 12 3.0 22 0.205 32 0.0 13 3.0 23 0.205 33 0.0 70 1 0 3DFACE 8 box 10 3.0 20 2.50226795687895 30 0.0 11 2.17026016090475 21 1.85826151998776 31 0.0 12 2.13191690534993 22 1.9222333770949 32 0.0 13 2.13191690534993 23 1.9222333770949 33 0.0 70 1 0 3DFACE 8 box 10 2.17026016090475 20 1.85826151998776 30 0.0 11 3.0 21 2.50226795687895 31 0.0 12 2.20214844470858 22 1.79083940859747 32 0.0 13 2.20214844470858 23 1.79083940859747 33 0.0 70 3 0 3DFACE 8 box 10 2.20214844470858 20 1.79083940859747 30 0.0 11 3.0 21 2.50226795687895 31 0.0 12 3.0 22 2.12132034355964 32 0.0 13 3.0 23 2.12132034355964 33 0.0 70 1 0 3DFACE 8 box 10 3.0 20 2.12132034355964 30 0.0 11 2.22727465515648 21 1.72061635471339 31 0.0 12 2.20214844470858 22 1.79083940859747 32 0.0 13 2.20214844470858 23 1.79083940859747 33 0.0 70 1 0 3DFACE 8 box 10 2.22727465515648 20 1.72061635471339 30 0.0 11 3.0 21 2.12132034355964 31 0.0 12 2.24539681310645 22 1.64826864473226 32 0.0 13 2.24539681310645 23 1.64826864473226 33 0.0 70 3 0 3DFACE 8 box 10 2.24539681310645 20 1.64826864473226 30 0.0 11 3.0 21 2.12132034355964 31 0.0 12 3.0 22 1.79836855106949 32 0.0 13 3.0 23 1.79836855106949 33 0.0 70 1 0 3DFACE 8 box 10 0.868083094650066 20 1.0777666229051 30 0.0 11 0.0 21 0.205 31 0.0 12 0.0 22 0.497732043121051 32 0.0 13 0.0 23 0.497732043121051 33 0.0 70 1 0 3DFACE 8 box 10 0.0 20 0.205 30 0.0 11 0.868083094650066 21 1.0777666229051 31 0.0 12 0.0 22 0.0 32 0.0 13 0.0 23 0.0 33 0.0 70 3 0 3DFACE 8 box 10 0.0 20 0.0 30 0.0 11 0.868083094650066 21 1.0777666229051 31 0.0 12 0.91251205544432 22 1.01786110403563 32 0.0 13 0.91251205544432 23 1.01786110403563 33 0.0 70 13 0 3DFACE 8 box 10 0.0 20 0.0 30 0.0 11 0.91251205544432 21 1.01786110403563 31 0.0 12 0.962598846298224 22 0.962598846298224 32 0.0 13 0.962598846298224 23 0.962598846298224 33 0.0 70 1 0 3DFACE 8 box 10 0.797851555291422 20 1.20916059140253 30 0.0 11 0.0 21 0.497732043121051 31 0.0 12 0.0 22 0.878679656440357 32 0.0 13 0.0 23 0.878679656440357 33 0.0 70 1 0 3DFACE 8 box 10 0.0 20 0.497732043121051 30 0.0 11 0.797851555291422 21 1.20916059140253 31 0.0 12 0.82973983909525 22 1.14173848001224 32 0.0 13 0.82973983909525 23 1.14173848001224 33 0.0 70 13 0 3DFACE 8 box 10 0.0 20 0.497732043121051 30 0.0 11 0.82973983909525 21 1.14173848001224 31 0.0 12 0.868083094650066 22 1.0777666229051 32 0.0 13 0.868083094650066 23 1.0777666229051 33 0.0 70 1 0 3DFACE 8 box 10 3.0 20 1.79836855106949 30 0.0 11 2.25634039227087 21 1.57449302665047 31 0.0 12 2.24539681310645 22 1.64826864473226 32 0.0 13 2.24539681310645 23 1.64826864473226 33 0.0 70 1 0 3DFACE 8 box 10 2.25634039227087 20 1.57449302665047 30 0.0 11 3.0 21 1.79836855106949 31 0.0 12 2.26 22 1.5 32 0.0 13 2.26 23 1.5 33 0.0 70 3 0 3DFACE 8 box 10 2.26 20 1.5 30 0.0 11 3.0 21 1.79836855106949 31 0.0 12 3.0 22 1.5 32 0.0 13 3.0 23 1.5 33 0.0 70 1 0 3DFACE 8 box 10 1.35173135526774 20 0.754603186893545 30 0.0 11 1.5 21 5.55111512312578e-17 31 0.0 12 1.20163144893051 22 1.11022302462516e-16 32 0.0 13 1.20163144893051 23 1.11022302462516e-16 33 0.0 70 1 0 3DFACE 8 box 10 1.5 20 5.55111512312578e-17 30 0.0 11 1.35173135526774 21 0.754603186893545 31 0.0 12 1.42550697334953 22 0.743659607729131 32 0.0 13 1.42550697334953 23 0.743659607729131 33 0.0 70 13 0 3DFACE 8 box 10 1.5 20 5.55111512312578e-17 30 0.0 11 1.42550697334953 21 0.743659607729131 31 0.0 12 1.5 22 0.74 32 0.0 13 1.5 23 0.74 33 0.0 70 1 0 3DFACE 8 box 10 3.0 20 3.0 30 0.0 11 2.08748794455568 21 1.98213889596437 31 0.0 12 2.03740115370178 22 2.03740115370178 32 0.0 13 2.03740115370178 23 2.03740115370178 33 0.0 70 1 0 3DFACE 8 box 10 2.08748794455568 20 1.98213889596437 30 0.0 11 3.0 21 3.0 31 0.0 12 2.13191690534993 22 1.9222333770949 32 0.0 13 2.13191690534993 23 1.9222333770949 33 0.0 70 3 0 3DFACE 8 box 10 2.13191690534993 20 1.9222333770949 30 0.0 11 3.0 21 3.0 31 0.0 12 3.0 22 2.50226795687895 32 0.0 13 3.0 23 2.50226795687895 33 0.0 70 3 0 3DFACE 8 box 10 3.0 20 2.50226795687895 30 0.0 11 3.0 21 3.0 31 0.0 12 3.0 22 2.795 32 0.0 13 3.0 23 2.795 33 0.0 70 1 0 3DFACE 8 box 10 0.962598846298224 20 2.03740115370178 30 0.0 11 0.0 21 2.795 31 0.0 12 0.0 22 3.0 32 0.0 13 0.0 23 3.0 33 0.0 70 1 0 3DFACE 8 box 10 0.0 20 2.795 30 0.0 11 0.962598846298224 21 2.03740115370178 31 0.0 12 0.0 22 2.50226795687895 32 0.0 13 0.0 23 2.50226795687895 33 0.0 70 3 0 3DFACE 8 box 10 0.0 20 2.50226795687895 30 0.0 11 0.962598846298224 21 2.03740115370178 31 0.0 12 0.91251205544432 22 1.98213889596437 32 0.0 13 0.91251205544432 23 1.98213889596437 33 0.0 70 13 0 3DFACE 8 box 10 0.0 20 2.50226795687895 30 0.0 11 0.91251205544432 21 1.98213889596437 31 0.0 12 0.868083094650066 22 1.9222333770949 32 0.0 13 0.868083094650066 23 1.9222333770949 33 0.0 70 1 0 3DFACE 8 box 10 0.868083094650066 20 1.9222333770949 30 0.0 11 0.0 21 2.12132034355964 31 0.0 12 0.0 22 2.50226795687895 32 0.0 13 0.0 23 2.50226795687895 33 0.0 70 1 0 3DFACE 8 box 10 0.0 20 2.12132034355964 30 0.0 11 0.868083094650066 21 1.9222333770949 31 0.0 12 0.82973983909525 22 1.85826151998776 32 0.0 13 0.82973983909525 23 1.85826151998776 33 0.0 70 13 0 3DFACE 8 box 10 0.0 20 2.12132034355964 30 0.0 11 0.82973983909525 21 1.85826151998776 31 0.0 12 0.797851555291422 22 1.79083940859747 32 0.0 13 0.797851555291422 23 1.79083940859747 33 0.0 70 1 0 3DFACE 8 box 10 1.72061635471339 20 0.772725344843521 30 0.0 11 1.79836855106949 21 5.55111512312578e-17 31 0.0 12 1.64826864473226 22 0.754603186893545 32 0.0 13 1.64826864473226 23 0.754603186893545 33 0.0 70 1 0 3DFACE 8 box 10 1.79836855106949 20 5.55111512312578e-17 30 0.0 11 1.72061635471339 21 0.772725344843521 31 0.0 12 1.79083940859747 22 0.797851555291422 32 0.0 13 1.79083940859747 23 0.797851555291422 33 0.0 70 13 0 3DFACE 8 box 10 1.79836855106949 20 5.55111512312578e-17 30 0.0 11 1.79083940859747 21 0.797851555291422 31 0.0 12 2.12132034355964 22 0.0 32 0.0 13 2.12132034355964 23 0.0 33 0.0 70 1 0 3DFACE 8 box 10 1.85826151998776 20 0.82973983909525 30 0.0 11 2.12132034355964 21 0.0 31 0.0 12 1.79083940859747 22 0.797851555291422 32 0.0 13 1.79083940859747 23 0.797851555291422 33 0.0 70 1 0 3DFACE 8 box 10 2.12132034355964 20 0.0 30 0.0 11 1.85826151998776 21 0.82973983909525 31 0.0 12 1.9222333770949 22 0.868083094650066 32 0.0 13 1.9222333770949 23 0.868083094650066 33 0.0 70 13 0 3DFACE 8 box 10 2.12132034355964 20 0.0 30 0.0 11 1.9222333770949 21 0.868083094650066 31 0.0 12 2.50226795687895 22 0.0 32 0.0 13 2.50226795687895 23 0.0 33 0.0 70 1 0 3DFACE 8 box 10 1.5 20 3.0 30 0.0 11 1.35173135526774 21 2.24539681310645 31 0.0 12 1.20163144893051 22 3.0 32 0.0 13 1.20163144893051 23 3.0 33 0.0 70 1 0 3DFACE 8 box 10 1.35173135526774 20 2.24539681310645 30 0.0 11 1.5 21 3.0 31 0.0 12 1.42550697334953 22 2.25634039227087 32 0.0 13 1.42550697334953 23 2.25634039227087 33 0.0 70 3 0 3DFACE 8 box 10 1.42550697334953 20 2.25634039227087 30 0.0 11 1.5 21 3.0 31 0.0 12 1.5 22 2.26 32 0.0 13 1.5 23 2.26 33 0.0 70 1 0 3DFACE 8 box 10 1.20163144893051 20 3.0 30 0.0 11 1.20916059140253 21 2.20214844470858 31 0.0 12 0.878679656440356 22 3.0 32 0.0 13 0.878679656440356 23 3.0 33 0.0 70 1 0 3DFACE 8 box 10 1.20916059140253 20 2.20214844470858 30 0.0 11 1.20163144893051 21 3.0 31 0.0 12 1.27938364528661 22 2.22727465515648 32 0.0 13 1.27938364528661 23 2.22727465515648 33 0.0 70 3 0 3DFACE 8 box 10 1.27938364528661 20 2.22727465515648 30 0.0 11 1.20163144893051 21 3.0 31 0.0 12 1.35173135526774 22 2.24539681310645 32 0.0 13 1.35173135526774 23 2.24539681310645 33 0.0 70 1 0 3DFACE 8 box 10 0.74 20 1.5 30 0.0 11 0.0 21 1.20163144893051 31 0.0 12 0.0 22 1.5 32 0.0 13 0.0 23 1.5 33 0.0 70 1 0 3DFACE 8 box 10 0.0 20 1.20163144893051 30 0.0 11 0.74 21 1.5 31 0.0 12 0.743659607729131 22 1.42550697334953 32 0.0 13 0.743659607729131 23 1.42550697334953 33 0.0 70 13 0 3DFACE 8 box 10 0.0 20 1.20163144893051 30 0.0 11 0.743659607729131 21 1.42550697334953 31 0.0 12 0.754603186893545 22 1.35173135526774 32 0.0 13 0.754603186893545 23 1.35173135526774 33 0.0 70 1 0 3DFACE 8 box 10 2.25634039227087 20 1.42550697334953 30 0.0 11 3.0 21 1.20163144893051 31 0.0 12 2.24539681310646 22 1.35173135526774 32 0.0 13 2.24539681310646 23 1.35173135526774 33 0.0 70 1 0 3DFACE 8 box 10 3.0 20 1.20163144893051 30 0.0 11 2.25634039227087 21 1.42550697334953 31 0.0 12 2.26 22 1.5 32 0.0 13 2.26 23 1.5 33 0.0 70 13 0 3DFACE 8 box 10 3.0 20 1.20163144893051 30 0.0 11 2.26 21 1.5 31 0.0 12 3.0 22 1.5 32 0.0 13 3.0 23 1.5 33 0.0 70 1 0 3DFACE 8 box 10 2.22727465515648 20 1.27938364528661 30 0.0 11 3.0 21 0.878679656440357 31 0.0 12 2.20214844470858 22 1.20916059140253 32 0.0 13 2.20214844470858 23 1.20916059140253 33 0.0 70 1 0 3DFACE 8 box 10 3.0 20 0.878679656440357 30 0.0 11 2.22727465515648 21 1.27938364528661 31 0.0 12 2.24539681310646 22 1.35173135526774 32 0.0 13 2.24539681310646 23 1.35173135526774 33 0.0 70 13 0 3DFACE 8 box 10 3.0 20 0.878679656440357 30 0.0 11 2.24539681310646 21 1.35173135526774 31 0.0 12 3.0 22 1.20163144893051 32 0.0 13 3.0 23 1.20163144893051 33 0.0 70 1 0 3DFACE 8 box 10 0.754603186893545 20 1.64826864473226 30 0.0 11 0.0 21 1.5 31 0.0 12 0.0 22 1.79836855106949 32 0.0 13 0.0 23 1.79836855106949 33 0.0 70 1 0 3DFACE 8 box 10 0.0 20 1.5 30 0.0 11 0.754603186893545 21 1.64826864473226 31 0.0 12 0.743659607729131 22 1.57449302665047 32 0.0 13 0.743659607729131 23 1.57449302665047 33 0.0 70 13 0 3DFACE 8 box 10 0.0 20 1.5 30 0.0 11 0.743659607729131 21 1.57449302665047 31 0.0 12 0.74 22 1.5 32 0.0 13 0.74 23 1.5 33 0.0 70 1 0 3DFACE 8 box 10 1.0777666229051 20 0.868083094650066 30 0.0 11 0.878679656440358 21 1.66533453693773e-16 31 0.0 12 0.497732043121053 22 0.0 32 0.0 13 0.497732043121053 23 0.0 33 0.0 70 1 0 3DFACE 8 box 10 0.878679656440358 20 1.66533453693773e-16 30 0.0 11 1.0777666229051 21 0.868083094650066 31 0.0 12 1.14173848001224 22 0.82973983909525 32 0.0 13 1.14173848001224 23 0.82973983909525 33 0.0 70 13 0 3DFACE 8 box 10 0.878679656440358 20 1.66533453693773e-16 30 0.0 11 1.14173848001224 21 0.82973983909525 31 0.0 12 1.20916059140253 22 0.797851555291422 32 0.0 13 1.20916059140253 23 0.797851555291422 33 0.0 70 1 0 3DFACE 8 box 10 1.20916059140253 20 0.797851555291422 30 0.0 11 1.20163144893051 21 1.11022302462516e-16 31 0.0 12 0.878679656440358 22 1.66533453693773e-16 32 0.0 13 0.878679656440358 23 1.66533453693773e-16 33 0.0 70 1 0 3DFACE 8 box 10 1.20163144893051 20 1.11022302462516e-16 30 0.0 11 1.20916059140253 21 0.797851555291422 31 0.0 12 1.27938364528661 22 0.772725344843521 32 0.0 13 1.27938364528661 23 0.772725344843521 33 0.0 70 13 0 3DFACE 8 box 10 1.20163144893051 20 1.11022302462516e-16 30 0.0 11 1.27938364528661 21 0.772725344843521 31 0.0 12 1.35173135526774 22 0.754603186893545 32 0.0 13 1.35173135526774 23 0.754603186893545 33 0.0 70 1 0 3DFACE 8 box 10 0.754603186893545 20 1.35173135526774 30 0.0 11 0.0 21 0.878679656440357 31 0.0 12 0.0 22 1.20163144893051 32 0.0 13 0.0 23 1.20163144893051 33 0.0 70 1 0 3DFACE 8 box 10 0.0 20 0.878679656440357 30 0.0 11 0.754603186893545 21 1.35173135526774 31 0.0 12 0.772725344843521 22 1.27938364528661 32 0.0 13 0.772725344843521 23 1.27938364528661 33 0.0 70 13 0 3DFACE 8 box 10 0.0 20 0.878679656440357 30 0.0 11 0.772725344843521 21 1.27938364528661 31 0.0 12 0.797851555291422 22 1.20916059140253 32 0.0 13 0.797851555291422 23 1.20916059140253 33 0.0 70 1 0 3DFACE 8 box 10 0.962598846298224 20 0.962598846298224 30 0.0 11 0.205 21 0.0 31 0.0 12 0.0 22 0.0 32 0.0 13 0.0 23 0.0 33 0.0 70 1 0 3DFACE 8 box 10 0.205 20 0.0 30 0.0 11 0.962598846298224 21 0.962598846298224 31 0.0 12 0.497732043121053 22 0.0 32 0.0 13 0.497732043121053 23 0.0 33 0.0 70 3 0 3DFACE 8 box 10 0.497732043121053 20 0.0 30 0.0 11 0.962598846298224 21 0.962598846298224 31 0.0 12 1.01786110403563 22 0.91251205544432 32 0.0 13 1.01786110403563 23 0.91251205544432 33 0.0 70 13 0 3DFACE 8 box 10 0.497732043121053 20 0.0 30 0.0 11 1.01786110403563 21 0.91251205544432 31 0.0 12 1.0777666229051 22 0.868083094650066 32 0.0 13 1.0777666229051 23 0.868083094650066 33 0.0 70 1 0 3DFACE 8 box 10 2.17026016090475 20 1.14173848001224 30 0.0 11 3.0 21 0.497732043121051 31 0.0 12 2.13191690534993 22 1.0777666229051 32 0.0 13 2.13191690534993 23 1.0777666229051 33 0.0 70 1 0 3DFACE 8 box 10 3.0 20 0.497732043121051 30 0.0 11 2.17026016090475 21 1.14173848001224 31 0.0 12 2.20214844470858 22 1.20916059140253 32 0.0 13 2.20214844470858 23 1.20916059140253 33 0.0 70 13 0 3DFACE 8 box 10 3.0 20 0.497732043121051 30 0.0 11 2.20214844470858 21 1.20916059140253 31 0.0 12 3.0 22 0.878679656440357 32 0.0 13 3.0 23 0.878679656440357 33 0.0 70 1 0 3DFACE 8 box 10 0.878679656440356 20 3.0 30 0.0 11 1.0777666229051 21 2.13191690534993 31 0.0 12 0.497732043121052 22 3.0 32 0.0 13 0.497732043121052 23 3.0 33 0.0 70 1 0 3DFACE 8 box 10 1.0777666229051 20 2.13191690534993 30 0.0 11 0.878679656440356 21 3.0 31 0.0 12 1.14173848001224 22 2.17026016090475 32 0.0 13 1.14173848001224 23 2.17026016090475 33 0.0 70 3 0 3DFACE 8 box 10 1.14173848001224 20 2.17026016090475 30 0.0 11 0.878679656440356 21 3.0 31 0.0 12 1.20916059140253 22 2.20214844470858 32 0.0 13 1.20916059140253 23 2.20214844470858 33 0.0 70 1 0 3DFACE 8 box 10 0.205 20 3.0 30 0.0 11 0.962598846298224 21 2.03740115370178 31 0.0 12 0.0 22 3.0 32 0.0 13 0.0 23 3.0 33 0.0 70 1 0 3DFACE 8 box 10 0.962598846298224 20 2.03740115370178 30 0.0 11 0.205 21 3.0 31 0.0 12 0.497732043121052 22 3.0 32 0.0 13 0.497732043121052 23 3.0 33 0.0 70 13 0 3DFACE 8 box 10 0.962598846298224 20 2.03740115370178 30 0.0 11 0.497732043121052 21 3.0 31 0.0 12 1.01786110403563 22 2.08748794455568 32 0.0 13 1.01786110403563 23 2.08748794455568 33 0.0 70 3 0 3DFACE 8 box 10 1.01786110403563 20 2.08748794455568 30 0.0 11 0.497732043121052 21 3.0 31 0.0 12 1.0777666229051 22 2.13191690534993 32 0.0 13 1.0777666229051 23 2.13191690534993 33 0.0 70 1 0 3DFACE 8 box 10 1.79836855106949 20 3.0 30 0.0 11 1.5 21 2.26 31 0.0 12 1.5 22 3.0 32 0.0 13 1.5 23 3.0 33 0.0 70 1 0 3DFACE 8 box 10 1.5 20 2.26 30 0.0 11 1.79836855106949 21 3.0 31 0.0 12 1.57449302665047 22 2.25634039227087 32 0.0 13 1.57449302665047 23 2.25634039227087 33 0.0 70 3 0 3DFACE 8 box 10 1.57449302665047 20 2.25634039227087 30 0.0 11 1.79836855106949 21 3.0 31 0.0 12 1.64826864473226 22 2.24539681310645 32 0.0 13 1.64826864473226 23 2.24539681310645 33 0.0 70 1 0 3DFACE 8 box 10 1.79836855106949 20 3.0 30 0.0 11 1.72061635471339 21 2.22727465515648 31 0.0 12 1.64826864473226 22 2.24539681310645 32 0.0 13 1.64826864473226 23 2.24539681310645 33 0.0 70 1 0 3DFACE 8 box 10 1.72061635471339 20 2.22727465515648 30 0.0 11 1.79836855106949 21 3.0 31 0.0 12 1.79083940859747 22 2.20214844470858 32 0.0 13 1.79083940859747 23 2.20214844470858 33 0.0 70 3 0 3DFACE 8 box 10 1.79083940859747 20 2.20214844470858 30 0.0 11 1.79836855106949 21 3.0 31 0.0 12 2.12132034355964 22 3.0 32 0.0 13 2.12132034355964 23 3.0 33 0.0 70 1 0 3DFACE 8 box 10 0.797851555291422 20 1.79083940859747 30 0.0 11 0.0 21 1.79836855106949 31 0.0 12 0.0 22 2.12132034355964 32 0.0 13 0.0 23 2.12132034355964 33 0.0 70 1 0 3DFACE 8 box 10 0.0 20 1.79836855106949 30 0.0 11 0.797851555291422 21 1.79083940859747 31 0.0 12 0.772725344843521 22 1.72061635471339 32 0.0 13 0.772725344843521 23 1.72061635471339 33 0.0 70 13 0 3DFACE 8 box 10 0.0 20 1.79836855106949 30 0.0 11 0.772725344843521 21 1.72061635471339 31 0.0 12 0.754603186893545 22 1.64826864473226 32 0.0 13 0.754603186893545 23 1.64826864473226 33 0.0 70 1 0 3DFACE 8 box 10 2.20214844470858 20 1.20916059140253 30 0.0 11 2.13191690534993 21 1.0777666229051 31 0.0 12 1.5 22 1.5 32 0.0 13 1.5 23 1.5 33 0.0 70 1 0 3DFACE 8 box 10 2.13191690534993 20 1.0777666229051 30 0.0 11 2.20214844470858 21 1.20916059140253 31 0.0 12 2.17026016090475 22 1.14173848001224 32 0.0 13 2.17026016090475 23 1.14173848001224 33 0.0 70 1 0 3DFACE 8 box 10 1.79836855106949 20 5.55111512312578e-17 30 3.0 11 1.5 21 0.74 31 3.0 12 1.5 22 5.55111512312578e-17 32 3.0 13 1.5 23 5.55111512312578e-17 33 3.0 70 1 0 3DFACE 8 box 10 1.5 20 0.74 30 3.0 11 1.79836855106949 21 5.55111512312578e-17 31 3.0 12 1.57449302665047 22 0.743659607729131 32 3.0 13 1.57449302665047 23 0.743659607729131 33 3.0 70 3 0 3DFACE 8 box 10 1.57449302665047 20 0.743659607729131 30 3.0 11 1.79836855106949 21 5.55111512312578e-17 31 3.0 12 1.64826864473226 22 0.754603186893545 32 3.0 13 1.64826864473226 23 0.754603186893545 33 3.0 70 1 0 3DFACE 8 box 10 1.79836855106949 20 5.55111512312578e-17 30 3.0 11 1.72061635471339 21 0.772725344843521 31 3.0 12 1.64826864473226 22 0.754603186893545 32 3.0 13 1.64826864473226 23 0.754603186893545 33 3.0 70 1 0 3DFACE 8 box 10 1.72061635471339 20 0.772725344843521 30 3.0 11 1.79836855106949 21 5.55111512312578e-17 31 3.0 12 1.79083940859747 22 0.797851555291422 32 3.0 13 1.79083940859747 23 0.797851555291422 33 3.0 70 3 0 3DFACE 8 box 10 1.79083940859747 20 0.797851555291422 30 3.0 11 1.79836855106949 21 5.55111512312578e-17 31 3.0 12 2.12132034355964 22 0.0 32 3.0 13 2.12132034355964 23 0.0 33 3.0 70 1 0 3DFACE 8 box 10 1.0777666229051 20 2.13191690534993 30 3.0 11 0.878679656440356 21 3.0 31 3.0 12 0.497732043121052 22 3.0 32 3.0 13 0.497732043121052 23 3.0 33 3.0 70 1 0 3DFACE 8 box 10 0.878679656440356 20 3.0 30 3.0 11 1.0777666229051 21 2.13191690534993 31 3.0 12 1.14173848001224 22 2.17026016090475 32 3.0 13 1.14173848001224 23 2.17026016090475 33 3.0 70 13 0 3DFACE 8 box 10 0.878679656440356 20 3.0 30 3.0 11 1.14173848001224 21 2.17026016090475 31 3.0 12 1.20916059140253 22 2.20214844470858 32 3.0 13 1.20916059140253 23 2.20214844470858 33 3.0 70 1 0 3DFACE 8 box 10 1.20916059140253 20 2.20214844470858 30 3.0 11 1.20163144893051 21 3.0 31 3.0 12 0.878679656440356 22 3.0 32 3.0 13 0.878679656440356 23 3.0 33 3.0 70 1 0 3DFACE 8 box 10 1.20163144893051 20 3.0 30 3.0 11 1.20916059140253 21 2.20214844470858 31 3.0 12 1.34882660079146 22 2.26 32 3.0 13 1.34882660079146 23 2.26 33 3.0 70 3 0 3DFACE 8 box 10 1.34882660079146 20 2.26 30 3.0 11 1.20916059140253 21 2.20214844470858 31 3.0 12 1.27938364528661 22 2.22727465515648 32 3.0 13 1.27938364528661 23 2.22727465515648 33 3.0 70 13 0 3DFACE 8 box 10 1.34882660079146 20 2.26 30 3.0 11 1.27938364528661 21 2.22727465515648 31 3.0 12 1.35173135526774 22 2.24539681310645 32 3.0 13 1.35173135526774 23 2.24539681310645 33 3.0 70 1 0 3DFACE 8 box 10 2.50226795687895 20 0.0 30 3.0 11 1.98213889596437 21 0.91251205544432 31 3.0 12 1.9222333770949 22 0.868083094650066 32 3.0 13 1.9222333770949 23 0.868083094650066 33 3.0 70 1 0 3DFACE 8 box 10 1.98213889596437 20 0.91251205544432 30 3.0 11 2.50226795687895 21 0.0 31 3.0 12 2.03740115370178 22 0.962598846298224 32 3.0 13 2.03740115370178 23 0.962598846298224 33 3.0 70 3 0 3DFACE 8 box 10 2.03740115370178 20 0.962598846298224 30 3.0 11 2.50226795687895 21 0.0 31 3.0 12 3.0 22 0.0 32 3.0 13 3.0 23 0.0 33 3.0 70 3 0 3DFACE 8 box 10 3.0 20 0.0 30 3.0 11 2.50226795687895 21 0.0 31 3.0 12 2.795 22 0.0 32 3.0 13 2.795 23 0.0 33 3.0 70 1 0 3DFACE 8 box 10 1.57449302665047 20 2.25634039227087 30 3.0 11 1.5 21 3.0 31 3.0 12 1.5 22 2.26 32 3.0 13 1.5 23 2.26 33 3.0 70 1 0 3DFACE 8 box 10 1.5 20 3.0 30 3.0 11 1.57449302665047 21 2.25634039227087 31 3.0 12 1.79836855106949 22 3.0 32 3.0 13 1.79836855106949 23 3.0 33 3.0 70 3 0 3DFACE 8 box 10 1.79836855106949 20 3.0 30 3.0 11 1.57449302665047 21 2.25634039227087 31 3.0 12 1.64826864473226 22 2.24539681310645 32 3.0 13 1.64826864473226 23 2.24539681310645 33 3.0 70 1 0 3DFACE 8 box 10 1.34882660079146 20 2.26 30 3.0 11 1.5 21 3.0 31 3.0 12 1.20163144893051 22 3.0 32 3.0 13 1.20163144893051 23 3.0 33 3.0 70 1 0 3DFACE 8 box 10 1.5 20 3.0 30 3.0 11 1.34882660079146 21 2.26 31 3.0 12 1.35173135526774 22 2.24539681310645 32 3.0 13 1.35173135526774 23 2.24539681310645 33 3.0 70 13 0 3DFACE 8 box 10 1.5 20 3.0 30 3.0 11 1.35173135526774 21 2.24539681310645 31 3.0 12 1.42550697334953 22 2.25634039227087 32 3.0 13 1.42550697334953 23 2.25634039227087 33 3.0 70 13 0 3DFACE 8 box 10 1.5 20 3.0 30 3.0 11 1.42550697334953 21 2.25634039227087 31 3.0 12 1.5 22 2.26 32 3.0 13 1.5 23 2.26 33 3.0 70 1 0 3DFACE 8 box 10 2.12132034355964 20 0.0 30 3.0 11 1.85826151998776 21 0.82973983909525 31 3.0 12 1.79083940859747 22 0.797851555291422 32 3.0 13 1.79083940859747 23 0.797851555291422 33 3.0 70 1 0 3DFACE 8 box 10 1.85826151998776 20 0.82973983909525 30 3.0 11 2.12132034355964 21 0.0 31 3.0 12 1.9222333770949 22 0.868083094650066 32 3.0 13 1.9222333770949 23 0.868083094650066 33 3.0 70 3 0 3DFACE 8 box 10 1.9222333770949 20 0.868083094650066 30 3.0 11 2.12132034355964 21 0.0 31 3.0 12 2.50226795687895 22 0.0 32 3.0 13 2.50226795687895 23 0.0 33 3.0 70 1 0 3DFACE 8 box 10 1.98213889596437 20 2.08748794455568 30 3.0 11 2.50226795687895 21 3.0 31 3.0 12 1.9222333770949 22 2.13191690534993 32 3.0 13 1.9222333770949 23 2.13191690534993 33 3.0 70 1 0 3DFACE 8 box 10 2.50226795687895 20 3.0 30 3.0 11 1.98213889596437 21 2.08748794455568 31 3.0 12 2.03740115370178 22 2.03740115370178 32 3.0 13 2.03740115370178 23 2.03740115370178 33 3.0 70 13 0 3DFACE 8 box 10 2.50226795687895 20 3.0 30 3.0 11 2.03740115370178 21 2.03740115370178 31 3.0 12 3.0 22 3.0 32 3.0 13 3.0 23 3.0 33 3.0 70 13 0 3DFACE 8 box 10 2.50226795687895 20 3.0 30 3.0 11 3.0 21 3.0 31 3.0 12 2.795 22 3.0 32 3.0 13 2.795 23 3.0 33 3.0 70 1 0 3DFACE 8 box 10 0.205 20 0.0 30 3.0 11 0.962598846298224 21 0.962598846298224 31 3.0 12 0.0 22 0.0 32 3.0 13 0.0 23 0.0 33 3.0 70 1 0 3DFACE 8 box 10 0.962598846298224 20 0.962598846298224 30 3.0 11 0.205 21 0.0 31 3.0 12 0.497732043121053 22 0.0 32 3.0 13 0.497732043121053 23 0.0 33 3.0 70 13 0 3DFACE 8 box 10 0.962598846298224 20 0.962598846298224 30 3.0 11 0.497732043121053 21 0.0 31 3.0 12 1.01786110403563 22 0.91251205544432 32 3.0 13 1.01786110403563 23 0.91251205544432 33 3.0 70 3 0 3DFACE 8 box 10 1.01786110403563 20 0.91251205544432 30 3.0 11 0.497732043121053 21 0.0 31 3.0 12 1.0777666229051 22 0.868083094650066 32 3.0 13 1.0777666229051 23 0.868083094650066 33 3.0 70 1 0 3DFACE 8 box 10 0.878679656440358 20 1.66533453693773e-16 30 3.0 11 1.0777666229051 21 0.868083094650066 31 3.0 12 0.497732043121053 22 0.0 32 3.0 13 0.497732043121053 23 0.0 33 3.0 70 1 0 3DFACE 8 box 10 1.0777666229051 20 0.868083094650066 30 3.0 11 0.878679656440358 21 1.66533453693773e-16 31 3.0 12 1.14173848001224 22 0.82973983909525 32 3.0 13 1.14173848001224 23 0.82973983909525 33 3.0 70 3 0 3DFACE 8 box 10 1.14173848001224 20 0.82973983909525 30 3.0 11 0.878679656440358 21 1.66533453693773e-16 31 3.0 12 1.20916059140253 22 0.797851555291422 32 3.0 13 1.20916059140253 23 0.797851555291422 33 3.0 70 1 0 3DFACE 8 box 10 2.08748794455568 20 1.98213889596437 30 3.0 11 3.0 21 3.0 31 3.0 12 2.03740115370178 22 2.03740115370178 32 3.0 13 2.03740115370178 23 2.03740115370178 33 3.0 70 1 0 3DFACE 8 box 10 3.0 20 3.0 30 3.0 11 2.08748794455568 21 1.98213889596437 31 3.0 12 2.13191690534993 22 1.9222333770949 32 3.0 13 2.13191690534993 23 1.9222333770949 33 3.0 70 13 0 3DFACE 8 box 10 3.0 20 3.0 30 3.0 11 2.13191690534993 21 1.9222333770949 31 3.0 12 3.0 22 2.50226795687895 32 3.0 13 3.0 23 2.50226795687895 33 3.0 70 13 0 3DFACE 8 box 10 3.0 20 3.0 30 3.0 11 3.0 21 2.50226795687895 31 3.0 12 3.0 22 2.795 32 3.0 13 3.0 23 2.795 33 3.0 70 1 0 3DFACE 8 box 10 0.962598846298224 20 0.962598846298224 30 3.0 11 0.0 21 0.205 31 3.0 12 0.0 22 0.0 32 3.0 13 0.0 23 0.0 33 3.0 70 1 0 3DFACE 8 box 10 0.0 20 0.205 30 3.0 11 0.962598846298224 21 0.962598846298224 31 3.0 12 0.0 22 0.497732043121051 32 3.0 13 0.0 23 0.497732043121051 33 3.0 70 3 0 3DFACE 8 box 10 0.0 20 0.497732043121051 30 3.0 11 0.962598846298224 21 0.962598846298224 31 3.0 12 0.91251205544432 22 1.01786110403563 32 3.0 13 0.91251205544432 23 1.01786110403563 33 3.0 70 13 0 3DFACE 8 box 10 0.0 20 0.497732043121051 30 3.0 11 0.91251205544432 21 1.01786110403563 31 3.0 12 0.868083094650066 22 1.0777666229051 32 3.0 13 0.868083094650066 23 1.0777666229051 33 3.0 70 1 0 3DFACE 8 box 10 1.20163144893051 20 1.11022302462516e-16 30 3.0 11 1.20916059140253 21 0.797851555291422 31 3.0 12 0.878679656440358 22 1.66533453693773e-16 32 3.0 13 0.878679656440358 23 1.66533453693773e-16 33 3.0 70 1 0 3DFACE 8 box 10 1.20916059140253 20 0.797851555291422 30 3.0 11 1.20163144893051 21 1.11022302462516e-16 31 3.0 12 1.27938364528661 22 0.772725344843521 32 3.0 13 1.27938364528661 23 0.772725344843521 33 3.0 70 3 0 3DFACE 8 box 10 1.27938364528661 20 0.772725344843521 30 3.0 11 1.20163144893051 21 1.11022302462516e-16 31 3.0 12 1.35173135526774 22 0.754603186893545 32 3.0 13 1.35173135526774 23 0.754603186893545 33 3.0 70 1 0 3DFACE 8 box 10 1.5 20 5.55111512312578e-17 30 3.0 11 1.35173135526774 21 0.754603186893545 31 3.0 12 1.20163144893051 22 1.11022302462516e-16 32 3.0 13 1.20163144893051 23 1.11022302462516e-16 33 3.0 70 1 0 3DFACE 8 box 10 1.35173135526774 20 0.754603186893545 30 3.0 11 1.5 21 5.55111512312578e-17 31 3.0 12 1.42550697334953 22 0.743659607729131 32 3.0 13 1.42550697334953 23 0.743659607729131 33 3.0 70 3 0 3DFACE 8 box 10 1.42550697334953 20 0.743659607729131 30 3.0 11 1.5 21 5.55111512312578e-17 31 3.0 12 1.5 22 0.74 32 3.0 13 1.5 23 0.74 33 3.0 70 1 0 3DFACE 8 box 10 2.17026016090475 20 1.85826151998776 30 3.0 11 3.0 21 2.50226795687895 31 3.0 12 2.13191690534993 22 1.9222333770949 32 3.0 13 2.13191690534993 23 1.9222333770949 33 3.0 70 1 0 3DFACE 8 box 10 3.0 20 2.50226795687895 30 3.0 11 2.17026016090475 21 1.85826151998776 31 3.0 12 2.20214844470858 22 1.79083940859747 32 3.0 13 2.20214844470858 23 1.79083940859747 33 3.0 70 13 0 3DFACE 8 box 10 3.0 20 2.50226795687895 30 3.0 11 2.20214844470858 21 1.79083940859747 31 3.0 12 3.0 22 2.12132034355964 32 3.0 13 3.0 23 2.12132034355964 33 3.0 70 1 0 3DFACE 8 box 10 2.22727465515648 20 1.72061635471339 30 3.0 11 3.0 21 2.12132034355964 31 3.0 12 2.20214844470858 22 1.79083940859747 32 3.0 13 2.20214844470858 23 1.79083940859747 33 3.0 70 1 0 3DFACE 8 box 10 3.0 20 2.12132034355964 30 3.0 11 2.22727465515648 21 1.72061635471339 31 3.0 12 2.24539681310645 22 1.64826864473226 32 3.0 13 2.24539681310645 23 1.64826864473226 33 3.0 70 13 0 3DFACE 8 box 10 3.0 20 2.12132034355964 30 3.0 11 2.24539681310645 21 1.64826864473226 31 3.0 12 3.0 22 1.79836855106949 32 3.0 13 3.0 23 1.79836855106949 33 3.0 70 1 0 3DFACE 8 box 10 0.754603186893545 20 1.64826864473226 30 3.0 11 0.0 21 2.12132034355964 31 3.0 12 0.0 22 1.79836855106949 32 3.0 13 0.0 23 1.79836855106949 33 3.0 70 1 0 3DFACE 8 box 10 0.0 20 2.12132034355964 30 3.0 11 0.754603186893545 21 1.64826864473226 31 3.0 12 0.772725344843521 22 1.72061635471339 32 3.0 13 0.772725344843521 23 1.72061635471339 33 3.0 70 13 0 3DFACE 8 box 10 0.0 20 2.12132034355964 30 3.0 11 0.772725344843521 21 1.72061635471339 31 3.0 12 0.797851555291422 22 1.79083940859747 32 3.0 13 0.797851555291422 23 1.79083940859747 33 3.0 70 1 0 3DFACE 8 box 10 0.797851555291422 20 1.20916059140253 30 3.0 11 0.0 21 1.20163144893051 31 3.0 12 0.0 22 0.878679656440357 32 3.0 13 0.0 23 0.878679656440357 33 3.0 70 1 0 3DFACE 8 box 10 0.0 20 1.20163144893051 30 3.0 11 0.797851555291422 21 1.20916059140253 31 3.0 12 0.772725344843521 22 1.27938364528661 32 3.0 13 0.772725344843521 23 1.27938364528661 33 3.0 70 13 0 3DFACE 8 box 10 0.0 20 1.20163144893051 30 3.0 11 0.772725344843521 21 1.27938364528661 31 3.0 12 0.754603186893545 22 1.35173135526774 32 3.0 13 0.754603186893545 23 1.35173135526774 33 3.0 70 1 0 3DFACE 8 box 10 0.868083094650066 20 1.0777666229051 30 3.0 11 0.0 21 0.878679656440357 31 3.0 12 0.0 22 0.497732043121051 32 3.0 13 0.0 23 0.497732043121051 33 3.0 70 1 0 3DFACE 8 box 10 0.0 20 0.878679656440357 30 3.0 11 0.868083094650066 21 1.0777666229051 31 3.0 12 0.82973983909525 22 1.14173848001224 32 3.0 13 0.82973983909525 23 1.14173848001224 33 3.0 70 13 0 3DFACE 8 box 10 0.0 20 0.878679656440357 30 3.0 11 0.82973983909525 21 1.14173848001224 31 3.0 12 0.797851555291422 22 1.20916059140253 32 3.0 13 0.797851555291422 23 1.20916059140253 33 3.0 70 1 0 3DFACE 8 box 10 3.0 20 0.878679656440357 30 3.0 11 2.22727465515648 21 1.27938364528661 31 3.0 12 2.20214844470858 22 1.20916059140253 32 3.0 13 2.20214844470858 23 1.20916059140253 33 3.0 70 1 0 3DFACE 8 box 10 2.22727465515648 20 1.27938364528661 30 3.0 11 3.0 21 0.878679656440357 31 3.0 12 2.24539681310646 22 1.35173135526774 32 3.0 13 2.24539681310646 23 1.35173135526774 33 3.0 70 3 0 3DFACE 8 box 10 2.24539681310646 20 1.35173135526774 30 3.0 11 3.0 21 0.878679656440357 31 3.0 12 3.0 22 1.20163144893051 32 3.0 13 3.0 23 1.20163144893051 33 3.0 70 1 0 3DFACE 8 box 10 3.0 20 1.20163144893051 30 3.0 11 2.25634039227087 21 1.42550697334953 31 3.0 12 2.24539681310646 22 1.35173135526774 32 3.0 13 2.24539681310646 23 1.35173135526774 33 3.0 70 1 0 3DFACE 8 box 10 2.25634039227087 20 1.42550697334953 30 3.0 11 3.0 21 1.20163144893051 31 3.0 12 2.26 22 1.5 32 3.0 13 2.26 23 1.5 33 3.0 70 3 0 3DFACE 8 box 10 2.26 20 1.5 30 3.0 11 3.0 21 1.20163144893051 31 3.0 12 3.0 22 1.5 32 3.0 13 3.0 23 1.5 33 3.0 70 1 0 3DFACE 8 box 10 0.797851555291422 20 1.79083940859747 30 3.0 11 0.0 21 2.50226795687895 31 3.0 12 0.0 22 2.12132034355964 32 3.0 13 0.0 23 2.12132034355964 33 3.0 70 1 0 3DFACE 8 box 10 0.0 20 2.50226795687895 30 3.0 11 0.797851555291422 21 1.79083940859747 31 3.0 12 0.82973983909525 22 1.85826151998776 32 3.0 13 0.82973983909525 23 1.85826151998776 33 3.0 70 13 0 3DFACE 8 box 10 0.0 20 2.50226795687895 30 3.0 11 0.82973983909525 21 1.85826151998776 31 3.0 12 0.868083094650066 22 1.9222333770949 32 3.0 13 0.868083094650066 23 1.9222333770949 33 3.0 70 1 0 3DFACE 8 box 10 1.72061635471339 20 2.22727465515648 30 3.0 11 1.79836855106949 21 3.0 31 3.0 12 1.64826864473226 22 2.24539681310645 32 3.0 13 1.64826864473226 23 2.24539681310645 33 3.0 70 1 0 3DFACE 8 box 10 1.79836855106949 20 3.0 30 3.0 11 1.72061635471339 21 2.22727465515648 31 3.0 12 1.79083940859747 22 2.20214844470858 32 3.0 13 1.79083940859747 23 2.20214844470858 33 3.0 70 13 0 3DFACE 8 box 10 1.79836855106949 20 3.0 30 3.0 11 1.79083940859747 21 2.20214844470858 31 3.0 12 2.12132034355964 22 3.0 32 3.0 13 2.12132034355964 23 3.0 33 3.0 70 1 0 3DFACE 8 box 10 1.85826151998776 20 2.17026016090475 30 3.0 11 2.12132034355964 21 3.0 31 3.0 12 1.79083940859747 22 2.20214844470858 32 3.0 13 1.79083940859747 23 2.20214844470858 33 3.0 70 1 0 3DFACE 8 box 10 2.12132034355964 20 3.0 30 3.0 11 1.85826151998776 21 2.17026016090475 31 3.0 12 1.9222333770949 22 2.13191690534993 32 3.0 13 1.9222333770949 23 2.13191690534993 33 3.0 70 13 0 3DFACE 8 box 10 2.12132034355964 20 3.0 30 3.0 11 1.9222333770949 21 2.13191690534993 31 3.0 12 2.50226795687895 22 3.0 32 3.0 13 2.50226795687895 23 3.0 33 3.0 70 1 0 3DFACE 8 box 10 2.25634039227087 20 1.57449302665047 30 3.0 11 3.0 21 1.79836855106949 31 3.0 12 2.24539681310645 22 1.64826864473226 32 3.0 13 2.24539681310645 23 1.64826864473226 33 3.0 70 1 0 3DFACE 8 box 10 3.0 20 1.79836855106949 30 3.0 11 2.25634039227087 21 1.57449302665047 31 3.0 12 2.26 22 1.5 32 3.0 13 2.26 23 1.5 33 3.0 70 13 0 3DFACE 8 box 10 3.0 20 1.79836855106949 30 3.0 11 2.26 21 1.5 31 3.0 12 3.0 22 1.5 32 3.0 13 3.0 23 1.5 33 3.0 70 1 0 3DFACE 8 box 10 1.57449302665047 20 0.743659607729131 30 3.0 11 1.5 21 1.5 31 3.0 12 1.5 22 0.74 32 3.0 13 1.5 23 0.74 33 3.0 70 1 0 3DFACE 8 box 10 1.5 20 1.5 30 3.0 11 1.57449302665047 21 0.743659607729131 31 3.0 12 1.64826864473226 22 0.754603186893545 32 3.0 13 1.64826864473226 23 0.754603186893545 33 3.0 70 1 0 3DFACE 8 box 10 0.868083094650066 20 1.9222333770949 30 3.0 11 0.0 21 2.795 31 3.0 12 0.0 22 2.50226795687895 32 3.0 13 0.0 23 2.50226795687895 33 3.0 70 1 0 3DFACE 8 box 10 0.0 20 2.795 30 3.0 11 0.868083094650066 21 1.9222333770949 31 3.0 12 0.0 22 3.0 32 3.0 13 0.0 23 3.0 33 3.0 70 3 0 3DFACE 8 box 10 0.0 20 3.0 30 3.0 11 0.868083094650066 21 1.9222333770949 31 3.0 12 0.91251205544432 22 1.98213889596437 32 3.0 13 0.91251205544432 23 1.98213889596437 33 3.0 70 13 0 3DFACE 8 box 10 0.0 20 3.0 30 3.0 11 0.91251205544432 21 1.98213889596437 31 3.0 12 0.962598846298224 22 2.03740115370178 32 3.0 13 0.962598846298224 23 2.03740115370178 33 3.0 70 1 0 3DFACE 8 box 10 0.754603186893545 20 1.35173135526774 30 3.0 11 0.0 21 1.5 31 3.0 12 0.0 22 1.20163144893051 32 3.0 13 0.0 23 1.20163144893051 33 3.0 70 1 0 3DFACE 8 box 10 0.0 20 1.5 30 3.0 11 0.754603186893545 21 1.35173135526774 31 3.0 12 0.743659607729131 22 1.42550697334953 32 3.0 13 0.743659607729131 23 1.42550697334953 33 3.0 70 13 0 3DFACE 8 box 10 0.0 20 1.5 30 3.0 11 0.743659607729131 21 1.42550697334953 31 3.0 12 0.74 22 1.5 32 3.0 13 0.74 23 1.5 33 3.0 70 1 0 3DFACE 8 box 10 0.74 20 1.5 30 3.0 11 0.0 21 1.79836855106949 31 3.0 12 0.0 22 1.5 32 3.0 13 0.0 23 1.5 33 3.0 70 1 0 3DFACE 8 box 10 0.0 20 1.79836855106949 30 3.0 11 0.74 21 1.5 31 3.0 12 0.743659607729131 22 1.57449302665047 32 3.0 13 0.743659607729131 23 1.57449302665047 33 3.0 70 13 0 3DFACE 8 box 10 0.0 20 1.79836855106949 30 3.0 11 0.743659607729131 21 1.57449302665047 31 3.0 12 0.754603186893545 22 1.64826864473226 32 3.0 13 0.754603186893545 23 1.64826864473226 33 3.0 70 1 0 3DFACE 8 box 10 3.0 20 0.0 30 3.0 11 2.08748794455568 21 1.01786110403563 31 3.0 12 2.03740115370178 22 0.962598846298224 32 3.0 13 2.03740115370178 23 0.962598846298224 33 3.0 70 1 0 3DFACE 8 box 10 2.08748794455568 20 1.01786110403563 30 3.0 11 3.0 21 0.0 31 3.0 12 2.13191690534993 22 1.0777666229051 32 3.0 13 2.13191690534993 23 1.0777666229051 33 3.0 70 3 0 3DFACE 8 box 10 2.13191690534993 20 1.0777666229051 30 3.0 11 3.0 21 0.0 31 3.0 12 3.0 22 0.497732043121051 32 3.0 13 3.0 23 0.497732043121051 33 3.0 70 3 0 3DFACE 8 box 10 3.0 20 0.497732043121051 30 3.0 11 3.0 21 0.0 31 3.0 12 3.0 22 0.205 32 3.0 13 3.0 23 0.205 33 3.0 70 1 0 3DFACE 8 box 10 3.0 20 0.497732043121051 30 3.0 11 2.17026016090475 21 1.14173848001224 31 3.0 12 2.13191690534993 22 1.0777666229051 32 3.0 13 2.13191690534993 23 1.0777666229051 33 3.0 70 1 0 3DFACE 8 box 10 2.17026016090475 20 1.14173848001224 30 3.0 11 3.0 21 0.497732043121051 31 3.0 12 2.20214844470858 22 1.20916059140253 32 3.0 13 2.20214844470858 23 1.20916059140253 33 3.0 70 3 0 3DFACE 8 box 10 2.20214844470858 20 1.20916059140253 30 3.0 11 3.0 21 0.497732043121051 31 3.0 12 3.0 22 0.878679656440357 32 3.0 13 3.0 23 0.878679656440357 33 3.0 70 1 0 3DFACE 8 box 10 3.0 20 0.0 30 1.5 11 2.795 21 0.0 31 0.205 12 3.0 22 0.0 32 0.205 13 3.0 23 0.0 33 0.205 70 1 0 3DFACE 8 box 10 2.795 20 0.0 30 0.205 11 3.0 21 0.0 31 1.5 12 2.795 22 0.0 32 1.5 13 2.795 23 0.0 33 1.5 70 1 0 3DFACE 8 box 10 2.795 20 0.0 30 3.0 11 1.5 21 0.0 31 2.795 12 2.795 22 0.0 32 2.795 13 2.795 23 0.0 33 2.795 70 1 0 3DFACE 8 box 10 1.5 20 0.0 30 2.795 11 2.795 21 0.0 31 3.0 12 1.5 22 5.55111512312578e-17 32 3.0 13 1.5 23 5.55111512312578e-17 33 3.0 70 3 0 3DFACE 8 box 10 1.5 20 5.55111512312578e-17 30 3.0 11 2.795 21 0.0 31 3.0 12 2.50226795687895 22 0.0 32 3.0 13 2.50226795687895 23 0.0 33 3.0 70 13 0 3DFACE 8 box 10 1.5 20 5.55111512312578e-17 30 3.0 11 2.50226795687895 21 0.0 31 3.0 12 2.12132034355964 22 0.0 32 3.0 13 2.12132034355964 23 0.0 33 3.0 70 13 0 3DFACE 8 box 10 1.5 20 5.55111512312578e-17 30 3.0 11 2.12132034355964 21 0.0 31 3.0 12 1.79836855106949 22 5.55111512312578e-17 32 3.0 13 1.79836855106949 23 5.55111512312578e-17 33 3.0 70 1 0 3DFACE 8 box 10 0.205 20 0.0 30 1.5 11 0.0 21 0.0 31 0.205 12 0.205 22 0.0 32 0.205 13 0.205 23 0.0 33 0.205 70 1 0 3DFACE 8 box 10 0.0 20 0.0 30 0.205 11 0.205 21 0.0 31 1.5 12 0.0 22 0.0 32 1.5 13 0.0 23 0.0 33 1.5 70 1 0 3DFACE 8 box 10 0.205 20 0.0 30 2.795 11 0.0 21 0.0 31 1.5 12 0.205 22 0.0 32 1.5 13 0.205 23 0.0 33 1.5 70 1 0 3DFACE 8 box 10 0.0 20 0.0 30 1.5 11 0.205 21 0.0 31 2.795 12 0.0 22 0.0 32 2.795 13 0.0 23 0.0 33 2.795 70 1 0 3DFACE 8 box 10 2.795 20 0.0 30 3.0 11 2.795 21 0.0 31 2.795 12 3.0 22 0.0 32 3.0 13 3.0 23 0.0 33 3.0 70 0 0 3DFACE 8 box 10 2.795 20 0.0 30 0.205 11 2.50226795687895 21 0.0 31 0.0 12 2.795 22 0.0 32 0.0 13 2.795 23 0.0 33 0.0 70 1 0 3DFACE 8 box 10 2.50226795687895 20 0.0 30 0.0 11 2.795 21 0.0 31 0.205 12 2.12132034355964 22 0.0 32 0.0 13 2.12132034355964 23 0.0 33 0.0 70 3 0 3DFACE 8 box 10 2.12132034355964 20 0.0 30 0.0 11 2.795 21 0.0 31 0.205 12 1.79836855106949 22 5.55111512312578e-17 32 0.0 13 1.79836855106949 23 5.55111512312578e-17 33 0.0 70 3 0 3DFACE 8 box 10 1.79836855106949 20 5.55111512312578e-17 30 0.0 11 2.795 21 0.0 31 0.205 12 1.5 22 5.55111512312578e-17 32 0.0 13 1.5 23 5.55111512312578e-17 33 0.0 70 3 0 3DFACE 8 box 10 1.5 20 5.55111512312578e-17 30 0.0 11 2.795 21 0.0 31 0.205 12 1.5 22 0.0 32 0.205 13 1.5 23 0.0 33 0.205 70 1 0 3DFACE 8 box 10 1.5 20 0.0 30 0.205 11 1.20163144893051 21 1.11022302462516e-16 31 0.0 12 1.5 22 5.55111512312578e-17 32 0.0 13 1.5 23 5.55111512312578e-17 33 0.0 70 1 0 3DFACE 8 box 10 1.20163144893051 20 1.11022302462516e-16 30 0.0 11 1.5 21 0.0 31 0.205 12 0.878679656440358 22 1.66533453693773e-16 32 0.0 13 0.878679656440358 23 1.66533453693773e-16 33 0.0 70 3 0 3DFACE 8 box 10 0.878679656440358 20 1.66533453693773e-16 30 0.0 11 1.5 21 0.0 31 0.205 12 0.497732043121053 22 0.0 32 0.0 13 0.497732043121053 23 0.0 33 0.0 70 3 0 3DFACE 8 box 10 0.497732043121053 20 0.0 30 0.0 11 1.5 21 0.0 31 0.205 12 0.205 22 0.0 32 0.0 13 0.205 23 0.0 33 0.0 70 3 0 3DFACE 8 box 10 0.205 20 0.0 30 0.0 11 1.5 21 0.0 31 0.205 12 0.205 22 0.0 32 0.205 13 0.205 23 0.0 33 0.205 70 1 0 3DFACE 8 box 10 0.205 20 0.0 30 1.5 11 0.8525 21 0.0 31 0.8525 12 1.5 22 0.0 32 1.5 13 1.5 23 0.0 33 1.5 70 0 0 3DFACE 8 box 10 1.5 20 5.55111512312578e-17 30 3.0 11 0.205 21 0.0 31 2.795 12 1.5 22 0.0 32 2.795 13 1.5 23 0.0 33 2.795 70 1 0 3DFACE 8 box 10 0.205 20 0.0 30 2.795 11 1.5 21 5.55111512312578e-17 31 3.0 12 0.205 22 0.0 32 3.0 13 0.205 23 0.0 33 3.0 70 3 0 3DFACE 8 box 10 0.205 20 0.0 30 3.0 11 1.5 21 5.55111512312578e-17 31 3.0 12 1.20163144893051 22 1.11022302462516e-16 32 3.0 13 1.20163144893051 23 1.11022302462516e-16 33 3.0 70 13 0 3DFACE 8 box 10 0.205 20 0.0 30 3.0 11 1.20163144893051 21 1.11022302462516e-16 31 3.0 12 0.878679656440358 22 1.66533453693773e-16 32 3.0 13 0.878679656440358 23 1.66533453693773e-16 33 3.0 70 13 0 3DFACE 8 box 10 0.205 20 0.0 30 3.0 11 0.878679656440358 21 1.66533453693773e-16 31 3.0 12 0.497732043121053 22 0.0 32 3.0 13 0.497732043121053 23 0.0 33 3.0 70 1 0 3DFACE 8 box 10 3.0 20 0.0 30 2.795 11 2.795 21 0.0 31 1.5 12 3.0 22 0.0 32 1.5 13 3.0 23 0.0 33 1.5 70 1 0 3DFACE 8 box 10 2.795 20 0.0 30 1.5 11 3.0 21 0.0 31 2.795 12 2.795 22 0.0 32 2.795 13 2.795 23 0.0 33 2.795 70 1 0 3DFACE 8 box 10 0.0 20 3.0 30 2.795 11 0.205 21 3.0 31 1.5 12 0.0 22 3.0 32 1.5 13 0.0 23 3.0 33 1.5 70 1 0 3DFACE 8 box 10 0.205 20 3.0 30 1.5 11 0.0 21 3.0 31 2.795 12 0.205 22 3.0 32 2.795 13 0.205 23 3.0 33 2.795 70 1 0 3DFACE 8 box 10 3.0 20 3.0 30 3.0 11 3.0 21 3.0 31 2.795 12 2.795 22 3.0 32 2.795 13 2.795 23 3.0 33 2.795 70 0 0 3DFACE 8 box 10 1.5 20 3.0 30 3.0 11 2.795 21 3.0 31 2.795 12 1.5 22 3.0 32 2.795 13 1.5 23 3.0 33 2.795 70 1 0 3DFACE 8 box 10 2.795 20 3.0 30 2.795 11 1.5 21 3.0 31 3.0 12 2.795 22 3.0 32 3.0 13 2.795 23 3.0 33 3.0 70 3 0 3DFACE 8 box 10 2.795 20 3.0 30 3.0 11 1.5 21 3.0 31 3.0 12 1.79836855106949 22 3.0 32 3.0 13 1.79836855106949 23 3.0 33 3.0 70 13 0 3DFACE 8 box 10 2.795 20 3.0 30 3.0 11 1.79836855106949 21 3.0 31 3.0 12 2.12132034355964 22 3.0 32 3.0 13 2.12132034355964 23 3.0 33 3.0 70 13 0 3DFACE 8 box 10 2.795 20 3.0 30 3.0 11 2.12132034355964 21 3.0 31 3.0 12 2.50226795687895 22 3.0 32 3.0 13 2.50226795687895 23 3.0 33 3.0 70 1 0 3DFACE 8 box 10 0.205 20 3.0 30 3.0 11 1.5 21 3.0 31 2.795 12 0.205 22 3.0 32 2.795 13 0.205 23 3.0 33 2.795 70 1 0 3DFACE 8 box 10 1.5 20 3.0 30 2.795 11 0.205 21 3.0 31 3.0 12 1.5 22 3.0 32 3.0 13 1.5 23 3.0 33 3.0 70 3 0 3DFACE 8 box 10 1.5 20 3.0 30 3.0 11 0.205 21 3.0 31 3.0 12 0.497732043121052 22 3.0 32 3.0 13 0.497732043121052 23 3.0 33 3.0 70 13 0 3DFACE 8 box 10 1.5 20 3.0 30 3.0 11 0.497732043121052 21 3.0 31 3.0 12 0.878679656440356 22 3.0 32 3.0 13 0.878679656440356 23 3.0 33 3.0 70 13 0 3DFACE 8 box 10 1.5 20 3.0 30 3.0 11 0.878679656440356 21 3.0 31 3.0 12 1.20163144893051 22 3.0 32 3.0 13 1.20163144893051 23 3.0 33 3.0 70 1 0 3DFACE 8 box 10 0.205 20 3.0 30 0.205 11 0.205 21 3.0 31 0.0 12 0.0 22 3.0 32 0.0 13 0.0 23 3.0 33 0.0 70 0 0 3DFACE 8 box 10 2.795 20 3.0 30 2.795 11 3.0 21 3.0 31 1.5 12 2.795 22 3.0 32 1.5 13 2.795 23 3.0 33 1.5 70 1 0 3DFACE 8 box 10 3.0 20 3.0 30 1.5 11 2.795 21 3.0 31 2.795 12 3.0 22 3.0 32 2.795 13 3.0 23 3.0 33 2.795 70 1 0 3DFACE 8 box 10 2.795 20 3.0 30 1.5 11 3.0 21 3.0 31 0.205 12 2.795 22 3.0 32 0.205 13 2.795 23 3.0 33 0.205 70 1 0 3DFACE 8 box 10 3.0 20 3.0 30 0.205 11 2.795 21 3.0 31 1.5 12 3.0 22 3.0 32 1.5 13 3.0 23 3.0 33 1.5 70 1 0 3DFACE 8 box 10 3.0 20 3.0 30 0.205 11 3.0 21 3.0 31 0.0 12 2.795 22 3.0 32 0.205 13 2.795 23 3.0 33 0.205 70 0 0 3DFACE 8 box 10 0.205 20 3.0 30 0.205 11 0.497732043121052 21 3.0 31 0.0 12 0.205 22 3.0 32 0.0 13 0.205 23 3.0 33 0.0 70 1 0 3DFACE 8 box 10 0.497732043121052 20 3.0 30 0.0 11 0.205 21 3.0 31 0.205 12 0.878679656440356 22 3.0 32 0.0 13 0.878679656440356 23 3.0 33 0.0 70 3 0 3DFACE 8 box 10 0.878679656440356 20 3.0 30 0.0 11 0.205 21 3.0 31 0.205 12 1.20163144893051 22 3.0 32 0.0 13 1.20163144893051 23 3.0 33 0.0 70 3 0 3DFACE 8 box 10 1.20163144893051 20 3.0 30 0.0 11 0.205 21 3.0 31 0.205 12 1.5 22 3.0 32 0.0 13 1.5 23 3.0 33 0.0 70 3 0 3DFACE 8 box 10 1.5 20 3.0 30 0.0 11 0.205 21 3.0 31 0.205 12 1.5 22 3.0 32 0.205 13 1.5 23 3.0 33 0.205 70 1 0 3DFACE 8 box 10 0.205 20 3.0 30 3.0 11 0.205 21 3.0 31 2.795 12 0.0 22 3.0 32 3.0 13 0.0 23 3.0 33 3.0 70 0 0 3DFACE 8 box 10 1.5 20 3.0 30 0.205 11 1.79836855106949 21 3.0 31 0.0 12 1.5 22 3.0 32 0.0 13 1.5 23 3.0 33 0.0 70 1 0 3DFACE 8 box 10 1.79836855106949 20 3.0 30 0.0 11 1.5 21 3.0 31 0.205 12 2.12132034355964 22 3.0 32 0.0 13 2.12132034355964 23 3.0 33 0.0 70 3 0 3DFACE 8 box 10 2.12132034355964 20 3.0 30 0.0 11 1.5 21 3.0 31 0.205 12 2.50226795687895 22 3.0 32 0.0 13 2.50226795687895 23 3.0 33 0.0 70 3 0 3DFACE 8 box 10 2.50226795687895 20 3.0 30 0.0 11 1.5 21 3.0 31 0.205 12 2.795 22 3.0 32 0.0 13 2.795 23 3.0 33 0.0 70 3 0 3DFACE 8 box 10 2.795 20 3.0 30 0.0 11 1.5 21 3.0 31 0.205 12 2.795 22 3.0 32 0.205 13 2.795 23 3.0 33 0.205 70 1 0 3DFACE 8 box 10 0.0 20 0.205 30 2.795 11 0.0 21 0.0 31 3.0 12 0.0 22 0.205 32 3.0 13 0.0 23 0.205 33 3.0 70 0 0 3DFACE 8 box 10 0.0 20 3.0 30 2.795 11 0.0 21 2.795 31 2.795 12 0.0 22 3.0 32 3.0 13 0.0 23 3.0 33 3.0 70 0 0 3DFACE 8 box 10 0.0 20 0.205 30 0.205 11 0.0 21 0.205 31 0.0 12 0.0 22 0.0 32 0.0 13 0.0 23 0.0 33 0.0 70 0 0 3DFACE 8 box 10 0.0 20 3.0 30 3.0 11 0.0 21 2.795 31 2.795 12 0.0 22 2.795 32 3.0 13 0.0 23 2.795 33 3.0 70 0 0 3DFACE 8 box 10 0.0 20 1.5 30 0.205 11 0.0 21 0.205 31 0.205 12 0.0 22 1.5 32 1.5 13 0.0 23 1.5 33 1.5 70 0 0 3DFACE 8 box 10 0.0 20 1.5 30 1.5 11 0.0 21 0.205 31 1.5 12 0.0 22 0.205 32 2.795 13 0.0 23 0.205 33 2.795 70 0 0 3DFACE 8 box 10 0.0 20 3.0 30 0.0 11 0.0 21 2.795 31 0.205 12 0.0 22 3.0 32 0.205 13 0.0 23 3.0 33 0.205 70 0 0 3DFACE 8 box 10 0.0 20 0.205 30 0.205 11 0.0 21 0.0 31 0.0 12 0.0 22 0.0 32 0.205 13 0.0 23 0.0 33 0.205 70 0 0 3DFACE 8 box 10 0.0 20 3.0 30 0.0 11 0.0 21 2.795 31 0.0 12 0.0 22 2.795 32 0.205 13 0.0 23 2.795 33 0.205 70 0 0 3DFACE 8 box 10 0.0 20 2.795 30 1.5 11 0.0 21 1.5 31 1.5 12 0.0 22 2.795 32 2.795 13 0.0 23 2.795 33 2.795 70 0 0 3DFACE 8 box 10 0.0 20 0.497732043121051 30 3.0 11 0.0 21 0.205 31 2.795 12 0.0 22 0.205 32 3.0 13 0.0 23 0.205 33 3.0 70 1 0 3DFACE 8 box 10 0.0 20 0.205 30 2.795 11 0.0 21 0.497732043121051 31 3.0 12 0.0 22 1.5 32 2.795 13 0.0 23 1.5 33 2.795 70 3 0 3DFACE 8 box 10 0.0 20 1.5 30 2.795 11 0.0 21 0.497732043121051 31 3.0 12 0.0 22 0.878679656440357 32 3.0 13 0.0 23 0.878679656440357 33 3.0 70 13 0 3DFACE 8 box 10 0.0 20 1.5 30 2.795 11 0.0 21 0.878679656440357 31 3.0 12 0.0 22 1.20163144893051 32 3.0 13 0.0 23 1.20163144893051 33 3.0 70 13 0 3DFACE 8 box 10 0.0 20 1.5 30 2.795 11 0.0 21 1.20163144893051 31 3.0 12 0.0 22 1.5 32 3.0 13 0.0 23 1.5 33 3.0 70 1 0 3DFACE 8 box 10 0.0 20 0.205 30 0.205 11 0.0 21 0.497732043121051 31 0.0 12 0.0 22 0.205 32 0.0 13 0.0 23 0.205 33 0.0 70 1 0 3DFACE 8 box 10 0.0 20 0.497732043121051 30 0.0 11 0.0 21 0.205 31 0.205 12 0.0 22 1.5 32 0.205 13 0.0 23 1.5 33 0.205 70 13 0 3DFACE 8 box 10 0.0 20 0.497732043121051 30 0.0 11 0.0 21 1.5 31 0.205 12 0.0 22 0.878679656440357 32 0.0 13 0.0 23 0.878679656440357 33 0.0 70 3 0 3DFACE 8 box 10 0.0 20 0.878679656440357 30 0.0 11 0.0 21 1.5 31 0.205 12 0.0 22 1.20163144893051 32 0.0 13 0.0 23 1.20163144893051 33 0.0 70 3 0 3DFACE 8 box 10 0.0 20 1.20163144893051 30 0.0 11 0.0 21 1.5 31 0.205 12 0.0 22 1.5 32 0.0 13 0.0 23 1.5 33 0.0 70 1 0 3DFACE 8 box 10 0.0 20 0.205 30 2.795 11 0.0 21 0.0 31 1.5 12 0.0 22 0.0 32 2.795 13 0.0 23 0.0 33 2.795 70 1 0 3DFACE 8 box 10 0.0 20 0.0 30 1.5 11 0.0 21 0.205 31 2.795 12 0.0 22 0.205 32 1.5 13 0.0 23 0.205 33 1.5 70 1 0 3DFACE 8 box 10 0.0 20 1.5 30 1.5 11 0.0 21 0.205 31 2.795 12 0.0 22 1.5 32 2.795 13 0.0 23 1.5 33 2.795 70 0 0 3DFACE 8 box 10 0.0 20 3.0 30 2.795 11 0.0 21 2.795 31 1.5 12 0.0 22 2.795 32 2.795 13 0.0 23 2.795 33 2.795 70 1 0 3DFACE 8 box 10 0.0 20 2.795 30 1.5 11 0.0 21 3.0 31 2.795 12 0.0 22 3.0 32 1.5 13 0.0 23 3.0 33 1.5 70 1 0 3DFACE 8 box 10 0.0 20 2.795 30 0.205 11 0.0 21 1.5 31 0.0 12 0.0 22 1.5 32 0.205 13 0.0 23 1.5 33 0.205 70 1 0 3DFACE 8 box 10 0.0 20 1.5 30 0.0 11 0.0 21 2.795 31 0.205 12 0.0 22 1.79836855106949 32 0.0 13 0.0 23 1.79836855106949 33 0.0 70 3 0 3DFACE 8 box 10 0.0 20 1.79836855106949 30 0.0 11 0.0 21 2.795 31 0.205 12 0.0 22 2.12132034355964 32 0.0 13 0.0 23 2.12132034355964 33 0.0 70 3 0 3DFACE 8 box 10 0.0 20 2.12132034355964 30 0.0 11 0.0 21 2.795 31 0.205 12 0.0 22 2.50226795687895 32 0.0 13 0.0 23 2.50226795687895 33 0.0 70 3 0 3DFACE 8 box 10 0.0 20 2.50226795687895 30 0.0 11 0.0 21 2.795 31 0.205 12 0.0 22 2.795 32 0.0 13 0.0 23 2.795 33 0.0 70 1 0 3DFACE 8 box 10 0.0 20 2.795 30 0.205 11 0.0 21 1.5 31 0.205 12 0.0 22 1.5 32 1.5 13 0.0 23 1.5 33 1.5 70 0 0 3DFACE 8 box 10 0.0 20 2.795 30 2.795 11 0.0 21 1.5 31 1.5 12 0.0 22 1.5 32 2.795 13 0.0 23 1.5 33 2.795 70 0 0 3DFACE 8 box 10 0.0 20 1.79836855106949 30 3.0 11 0.0 21 1.5 31 2.795 12 0.0 22 1.5 32 3.0 13 0.0 23 1.5 33 3.0 70 1 0 3DFACE 8 box 10 0.0 20 1.5 30 2.795 11 0.0 21 1.79836855106949 31 3.0 12 0.0 22 2.795 32 2.795 13 0.0 23 2.795 33 2.795 70 3 0 3DFACE 8 box 10 0.0 20 2.795 30 2.795 11 0.0 21 1.79836855106949 31 3.0 12 0.0 22 2.12132034355964 32 3.0 13 0.0 23 2.12132034355964 33 3.0 70 13 0 3DFACE 8 box 10 0.0 20 2.795 30 2.795 11 0.0 21 2.12132034355964 31 3.0 12 0.0 22 2.50226795687895 32 3.0 13 0.0 23 2.50226795687895 33 3.0 70 13 0 3DFACE 8 box 10 0.0 20 2.795 30 2.795 11 0.0 21 2.50226795687895 31 3.0 12 0.0 22 2.795 32 3.0 13 0.0 23 2.795 33 3.0 70 1 0 3DFACE 8 box 10 0.0 20 3.0 30 1.5 11 0.0 21 2.795 31 0.205 12 0.0 22 2.795 32 1.5 13 0.0 23 2.795 33 1.5 70 1 0 3DFACE 8 box 10 0.0 20 2.795 30 0.205 11 0.0 21 3.0 31 1.5 12 0.0 22 3.0 32 0.205 13 0.0 23 3.0 33 0.205 70 1 0 3DFACE 8 box 10 0.0 20 1.5 30 1.5 11 0.0 21 0.205 31 0.205 12 0.0 22 0.205 32 1.5 13 0.0 23 0.205 33 1.5 70 0 0 3DFACE 8 box 10 0.0 20 2.795 30 0.205 11 0.0 21 1.5 31 1.5 12 0.0 22 2.795 32 1.5 13 0.0 23 2.795 33 1.5 70 0 0 3DFACE 8 box 10 0.0 20 0.205 30 1.5 11 0.0 21 0.0 31 0.205 12 0.0 22 0.0 32 1.5 13 0.0 23 0.0 33 1.5 70 1 0 3DFACE 8 box 10 0.0 20 0.0 30 0.205 11 0.0 21 0.205 31 1.5 12 0.0 22 0.205 32 0.205 13 0.0 23 0.205 33 0.205 70 1 0 LINE 8 box 10 3.0 20 1.5 30 1.5 11 3.0 21 1.5 31 0.205 0 LINE 8 box 10 3.0 20 1.5 30 1.5 11 3.0 21 0.205 31 1.5 0 LINE 8 box 10 3.0 20 0.205 30 2.795 11 3.0 21 1.5 31 1.5 0 LINE 8 box 10 3.0 20 2.795 30 1.5 11 3.0 21 1.5 31 1.5 0 LINE 8 box 10 3.0 20 2.795 30 2.795 11 3.0 21 1.5 31 1.5 0 LINE 8 box 10 3.0 20 1.5 30 1.5 11 3.0 21 2.795 31 0.205 0 LINE 8 box 10 3.0 20 1.5 30 1.5 11 3.0 21 0.205 31 0.205 0 3DFACE 8 box 10 3.0 20 0.205 30 3.0 11 3.0 21 0.0 31 3.0 12 3.0 22 0.205 32 2.795 13 3.0 23 0.205 33 2.795 70 0 0 3DFACE 8 box 10 3.0 20 3.0 30 0.205 11 3.0 21 2.795 31 1.5 12 3.0 22 2.795 32 0.205 13 3.0 23 2.795 33 0.205 70 1 0 3DFACE 8 box 10 3.0 20 2.795 30 1.5 11 3.0 21 3.0 31 0.205 12 3.0 22 3.0 32 1.5 13 3.0 23 3.0 33 1.5 70 1 0 3DFACE 8 box 10 3.0 20 0.205 30 0.205 11 3.0 21 0.0 31 0.205 12 3.0 22 0.0 32 0.0 13 3.0 23 0.0 33 0.0 70 0 0 3DFACE 8 box 10 3.0 20 0.205 30 0.205 11 3.0 21 0.0 31 0.0 12 3.0 22 0.205 32 0.0 13 3.0 23 0.205 33 0.0 70 0 0 3DFACE 8 box 10 3.0 20 3.0 30 1.5 11 3.0 21 2.795 31 2.795 12 3.0 22 2.795 32 1.5 13 3.0 23 2.795 33 1.5 70 1 0 3DFACE 8 box 10 3.0 20 2.795 30 2.795 11 3.0 21 3.0 31 1.5 12 3.0 22 3.0 32 2.795 13 3.0 23 3.0 33 2.795 70 1 0 3DFACE 8 box 10 3.0 20 3.0 30 3.0 11 3.0 21 2.795 31 2.795 12 3.0 22 3.0 32 2.795 13 3.0 23 3.0 33 2.795 70 0 0 3DFACE 8 box 10 3.0 20 3.0 30 0.205 11 3.0 21 2.795 31 0.205 12 3.0 22 3.0 32 0.0 13 3.0 23 3.0 33 0.0 70 0 0 3DFACE 8 box 10 3.0 20 3.0 30 3.0 11 3.0 21 2.795 31 3.0 12 3.0 22 2.795 32 2.795 13 3.0 23 2.795 33 2.795 70 0 0 3DFACE 8 box 10 3.0 20 0.205 30 2.795 11 3.0 21 0.0 31 3.0 12 3.0 22 0.0 32 2.795 13 3.0 23 0.0 33 2.795 70 0 0 3DFACE 8 box 10 3.0 20 0.205 30 1.5 11 3.0 21 0.0 31 2.795 12 3.0 22 0.0 32 1.5 13 3.0 23 0.0 33 1.5 70 1 0 3DFACE 8 box 10 3.0 20 0.0 30 2.795 11 3.0 21 0.205 31 1.5 12 3.0 22 0.205 32 2.795 13 3.0 23 0.205 33 2.795 70 1 0 3DFACE 8 box 10 3.0 20 1.5 30 0.205 11 3.0 21 0.205 31 1.5 12 3.0 22 0.205 32 0.205 13 3.0 23 0.205 33 0.205 70 1 0 3DFACE 8 box 10 3.0 20 0.205 30 1.5 11 3.0 21 1.5 31 2.795 12 3.0 22 0.205 32 2.795 13 3.0 23 0.205 33 2.795 70 1 0 3DFACE 8 box 10 3.0 20 1.5 30 2.795 11 3.0 21 0.205 31 1.5 12 3.0 22 1.5 32 0.205 13 3.0 23 1.5 33 0.205 70 15 0 3DFACE 8 box 10 3.0 20 1.5 30 2.795 11 3.0 21 1.5 31 0.205 12 3.0 22 2.795 32 0.205 13 3.0 23 2.795 33 0.205 70 13 0 3DFACE 8 box 10 3.0 20 1.5 30 2.795 11 3.0 21 2.795 31 0.205 12 3.0 22 2.795 32 2.795 13 3.0 23 2.795 33 2.795 70 3 0 3DFACE 8 box 10 3.0 20 2.795 30 2.795 11 3.0 21 2.795 31 0.205 12 3.0 22 2.795 32 1.5 13 3.0 23 2.795 33 1.5 70 1 0 3DFACE 8 box 10 3.0 20 3.0 30 0.0 11 3.0 21 2.795 31 0.205 12 3.0 22 2.795 32 0.0 13 3.0 23 2.795 33 0.0 70 0 0 3DFACE 8 box 10 3.0 20 0.497732043121051 30 0.0 11 3.0 21 0.205 31 0.205 12 3.0 22 0.205 32 0.0 13 3.0 23 0.205 33 0.0 70 1 0 3DFACE 8 box 10 3.0 20 0.205 30 0.205 11 3.0 21 0.497732043121051 31 0.0 12 3.0 22 1.5 32 0.205 13 3.0 23 1.5 33 0.205 70 3 0 3DFACE 8 box 10 3.0 20 1.5 30 0.205 11 3.0 21 0.497732043121051 31 0.0 12 3.0 22 0.878679656440357 32 0.0 13 3.0 23 0.878679656440357 33 0.0 70 13 0 3DFACE 8 box 10 3.0 20 1.5 30 0.205 11 3.0 21 0.878679656440357 31 0.0 12 3.0 22 1.20163144893051 32 0.0 13 3.0 23 1.20163144893051 33 0.0 70 13 0 3DFACE 8 box 10 3.0 20 1.5 30 0.205 11 3.0 21 1.20163144893051 31 0.0 12 3.0 22 1.5 32 0.0 13 3.0 23 1.5 33 0.0 70 1 0 3DFACE 8 box 10 3.0 20 1.79836855106949 30 0.0 11 3.0 21 1.5 31 0.205 12 3.0 22 1.5 32 0.0 13 3.0 23 1.5 33 0.0 70 1 0 3DFACE 8 box 10 3.0 20 1.5 30 0.205 11 3.0 21 1.79836855106949 31 0.0 12 3.0 22 2.795 32 0.205 13 3.0 23 2.795 33 0.205 70 3 0 3DFACE 8 box 10 3.0 20 2.795 30 0.205 11 3.0 21 1.79836855106949 31 0.0 12 3.0 22 2.12132034355964 32 0.0 13 3.0 23 2.12132034355964 33 0.0 70 13 0 3DFACE 8 box 10 3.0 20 2.795 30 0.205 11 3.0 21 2.12132034355964 31 0.0 12 3.0 22 2.50226795687895 32 0.0 13 3.0 23 2.50226795687895 33 0.0 70 13 0 3DFACE 8 box 10 3.0 20 2.795 30 0.205 11 3.0 21 2.50226795687895 31 0.0 12 3.0 22 2.795 32 0.0 13 3.0 23 2.795 33 0.0 70 1 0 3DFACE 8 box 10 3.0 20 0.205 30 0.205 11 3.0 21 0.0 31 1.5 12 3.0 22 0.0 32 0.205 13 3.0 23 0.0 33 0.205 70 1 0 3DFACE 8 box 10 3.0 20 0.0 30 1.5 11 3.0 21 0.205 31 0.205 12 3.0 22 0.205 32 1.5 13 3.0 23 0.205 33 1.5 70 1 0 3DFACE 8 box 10 3.0 20 2.795 30 2.795 11 3.0 21 1.5 31 3.0 12 3.0 22 1.5 32 2.795 13 3.0 23 1.5 33 2.795 70 1 0 3DFACE 8 box 10 3.0 20 1.5 30 3.0 11 3.0 21 2.795 31 2.795 12 3.0 22 1.79836855106949 32 3.0 13 3.0 23 1.79836855106949 33 3.0 70 3 0 3DFACE 8 box 10 3.0 20 1.79836855106949 30 3.0 11 3.0 21 2.795 31 2.795 12 3.0 22 2.12132034355964 32 3.0 13 3.0 23 2.12132034355964 33 3.0 70 3 0 3DFACE 8 box 10 3.0 20 2.12132034355964 30 3.0 11 3.0 21 2.795 31 2.795 12 3.0 22 2.50226795687895 32 3.0 13 3.0 23 2.50226795687895 33 3.0 70 3 0 3DFACE 8 box 10 3.0 20 2.50226795687895 30 3.0 11 3.0 21 2.795 31 2.795 12 3.0 22 2.795 32 3.0 13 3.0 23 2.795 33 3.0 70 1 0 3DFACE 8 box 10 1.5 20 0.0 30 1.5 11 1.5 21 0.0 31 0.205 12 2.1475 22 0.0 32 0.8525 13 2.1475 23 0.0 33 0.8525 70 0 0 3DFACE 8 box 10 0.0 20 0.0 30 0.205 11 0.0 21 0.0 31 0.0 12 0.205 22 0.0 32 0.205 13 0.205 23 0.0 33 0.205 70 0 0 3DFACE 8 box 10 2.1475 20 0.0 30 0.8525 11 1.5 21 0.0 31 0.205 12 2.795 22 0.0 32 0.205 13 2.795 23 0.0 33 0.205 70 0 0 3DFACE 8 box 10 0.8525 20 0.0 30 2.1475 11 0.205 21 0.0 31 1.5 12 1.5 22 0.0 32 1.5 13 1.5 23 0.0 33 1.5 70 0 0 3DFACE 8 box 10 1.5 20 0.0 30 2.795 11 1.5 21 0.0 31 1.5 12 2.1475 22 0.0 32 2.1475 13 2.1475 23 0.0 33 2.1475 70 0 0 3DFACE 8 box 10 1.5 20 0.0 30 2.795 11 0.8525 21 0.0 31 2.1475 12 1.5 22 0.0 32 1.5 13 1.5 23 0.0 33 1.5 70 0 0 3DFACE 8 box 10 0.205 20 0.0 30 2.795 11 0.8525 21 0.0 31 2.1475 12 1.5 22 0.0 32 2.795 13 1.5 23 0.0 33 2.795 70 0 0 3DFACE 8 box 10 1.5 20 0.0 30 1.5 11 2.1475 21 0.0 31 0.8525 12 2.795 22 0.0 32 1.5 13 2.795 23 0.0 33 1.5 70 0 0 3DFACE 8 box 10 0.0 20 0.0 30 3.0 11 0.205 21 0.0 31 2.795 12 0.205 22 0.0 32 3.0 13 0.205 23 0.0 33 3.0 70 0 0 3DFACE 8 box 10 1.5 20 0.0 30 2.795 11 2.1475 21 0.0 31 2.1475 12 2.795 22 0.0 32 2.795 13 2.795 23 0.0 33 2.795 70 0 0 3DFACE 8 box 10 2.795 20 0.0 30 0.205 11 3.0 21 0.0 31 0.0 12 3.0 22 0.0 32 0.205 13 3.0 23 0.0 33 0.205 70 0 0 3DFACE 8 box 10 2.1475 20 0.0 30 2.1475 11 1.5 21 0.0 31 1.5 12 2.795 22 0.0 32 1.5 13 2.795 23 0.0 33 1.5 70 0 0 3DFACE 8 box 10 1.5 20 0.0 30 1.5 11 0.8525 21 0.0 31 0.8525 12 1.5 22 0.0 32 0.205 13 1.5 23 0.0 33 0.205 70 0 0 3DFACE 8 box 10 2.795 20 0.0 30 2.795 11 2.1475 21 0.0 31 2.1475 12 2.795 22 0.0 32 1.5 13 2.795 23 0.0 33 1.5 70 0 0 3DFACE 8 box 10 2.795 20 0.0 30 1.5 11 2.1475 21 0.0 31 0.8525 12 2.795 22 0.0 32 0.205 13 2.795 23 0.0 33 0.205 70 0 0 3DFACE 8 box 10 3.0 20 0.0 30 3.0 11 2.795 21 0.0 31 2.795 12 3.0 22 0.0 32 2.795 13 3.0 23 0.0 33 2.795 70 0 0 3DFACE 8 box 10 0.0 20 0.0 30 3.0 11 0.0 21 0.0 31 2.795 12 0.205 22 0.0 32 2.795 13 0.205 23 0.0 33 2.795 70 0 0 3DFACE 8 box 10 0.205 20 0.0 30 2.795 11 0.205 21 0.0 31 1.5 12 0.8525 22 0.0 32 2.1475 13 0.8525 23 0.0 33 2.1475 70 0 0 3DFACE 8 box 10 0.205 20 0.0 30 1.5 11 0.205 21 0.0 31 0.205 12 0.8525 22 0.0 32 0.8525 13 0.8525 23 0.0 33 0.8525 70 0 0 3DFACE 8 box 10 0.8525 20 0.0 30 0.8525 11 0.205 21 0.0 31 0.205 12 1.5 22 0.0 32 0.205 13 1.5 23 0.0 33 0.205 70 0 0 3DFACE 8 box 10 0.205 20 0.0 30 0.205 11 0.0 21 0.0 31 0.0 12 0.205 22 0.0 32 0.0 13 0.205 23 0.0 33 0.0 70 0 0 3DFACE 8 box 10 0.8525 20 3.0 30 0.8525 11 1.5 21 3.0 31 0.205 12 0.205 22 3.0 32 0.205 13 0.205 23 3.0 33 0.205 70 0 0 3DFACE 8 box 10 2.1475 20 3.0 30 2.1475 11 2.795 21 3.0 31 1.5 12 1.5 22 3.0 32 1.5 13 1.5 23 3.0 33 1.5 70 0 0 3DFACE 8 box 10 2.795 20 3.0 30 2.795 11 2.795 21 3.0 31 1.5 12 2.1475 22 3.0 32 2.1475 13 2.1475 23 3.0 33 2.1475 70 0 0 3DFACE 8 box 10 2.795 20 3.0 30 1.5 11 2.795 21 3.0 31 0.205 12 2.1475 22 3.0 32 0.8525 13 2.1475 23 3.0 33 0.8525 70 0 0 3DFACE 8 box 10 2.795 20 3.0 30 1.5 11 2.1475 21 3.0 31 0.8525 12 1.5 22 3.0 32 1.5 13 1.5 23 3.0 33 1.5 70 0 0 3DFACE 8 box 10 1.5 20 3.0 30 1.5 11 1.5 21 3.0 31 0.205 12 0.8525 22 3.0 32 0.8525 13 0.8525 23 3.0 33 0.8525 70 0 0 3DFACE 8 box 10 1.5 20 3.0 30 2.795 11 1.5 21 3.0 31 1.5 12 0.8525 22 3.0 32 2.1475 13 0.8525 23 3.0 33 2.1475 70 0 0 3DFACE 8 box 10 0.205 20 3.0 30 1.5 11 0.8525 21 3.0 31 0.8525 12 0.205 22 3.0 32 0.205 13 0.205 23 3.0 33 0.205 70 0 0 3DFACE 8 box 10 1.5 20 3.0 30 1.5 11 0.8525 21 3.0 31 0.8525 12 0.205 22 3.0 32 1.5 13 0.205 23 3.0 33 1.5 70 0 0 3DFACE 8 box 10 1.5 20 3.0 30 2.795 11 2.1475 21 3.0 31 2.1475 12 1.5 22 3.0 32 1.5 13 1.5 23 3.0 33 1.5 70 0 0 3DFACE 8 box 10 2.795 20 3.0 30 2.795 11 2.1475 21 3.0 31 2.1475 12 1.5 22 3.0 32 2.795 13 1.5 23 3.0 33 2.795 70 0 0 3DFACE 8 box 10 0.205 20 3.0 30 0.205 11 0.0 21 3.0 31 0.0 12 0.0 22 3.0 32 0.205 13 0.0 23 3.0 33 0.205 70 0 0 3DFACE 8 box 10 3.0 20 3.0 30 3.0 11 2.795 21 3.0 31 2.795 12 2.795 22 3.0 32 3.0 13 2.795 23 3.0 33 3.0 70 0 0 3DFACE 8 box 10 1.5 20 3.0 30 2.795 11 0.8525 21 3.0 31 2.1475 12 0.205 22 3.0 32 2.795 13 0.205 23 3.0 33 2.795 70 0 0 3DFACE 8 box 10 0.8525 20 3.0 30 2.1475 11 1.5 21 3.0 31 1.5 12 0.205 22 3.0 32 1.5 13 0.205 23 3.0 33 1.5 70 0 0 3DFACE 8 box 10 1.5 20 3.0 30 1.5 11 2.1475 21 3.0 31 0.8525 12 1.5 22 3.0 32 0.205 13 1.5 23 3.0 33 0.205 70 0 0 3DFACE 8 box 10 2.795 20 3.0 30 0.205 11 3.0 21 3.0 31 0.0 12 2.795 22 3.0 32 0.0 13 2.795 23 3.0 33 0.0 70 0 0 3DFACE 8 box 10 0.0 20 3.0 30 3.0 11 0.205 21 3.0 31 2.795 12 0.0 22 3.0 32 2.795 13 0.0 23 3.0 33 2.795 70 0 0 3DFACE 8 box 10 0.205 20 3.0 30 2.795 11 0.8525 21 3.0 31 2.1475 12 0.205 22 3.0 32 1.5 13 0.205 23 3.0 33 1.5 70 0 0 3DFACE 8 box 10 2.1475 20 3.0 30 0.8525 11 2.795 21 3.0 31 0.205 12 1.5 22 3.0 32 0.205 13 1.5 23 3.0 33 0.205 70 0 0 LINE 8 box 10 3.0 20 1.5 30 2.795 11 3.0 21 1.5 31 1.5 0 3DFACE 8 box 10 1.5 20 1.5 30 0.0 11 1.14173848001224 21 0.82973983909525 31 0.0 12 1.0777666229051 22 0.868083094650066 32 0.0 13 1.0777666229051 23 0.868083094650066 33 0.0 70 1 0 3DFACE 8 box 10 1.14173848001224 20 0.82973983909525 30 0.0 11 1.5 21 1.5 31 0.0 12 1.20916059140253 22 0.797851555291422 32 0.0 13 1.20916059140253 23 0.797851555291422 33 0.0 70 1 0 3DFACE 8 box 10 1.27938364528661 20 2.22727465515648 30 0.0 11 1.5 21 1.5 31 0.0 12 1.20916059140253 22 2.20214844470858 32 0.0 13 1.20916059140253 23 2.20214844470858 33 0.0 70 1 0 3DFACE 8 box 10 1.5 20 1.5 30 0.0 11 1.27938364528661 21 2.22727465515648 31 0.0 12 1.35173135526774 22 2.24539681310645 32 0.0 13 1.35173135526774 23 2.24539681310645 33 0.0 70 1 0 3DFACE 8 box 10 2.24539681310645 20 1.64826864473226 30 0.0 11 2.26 21 1.5 31 0.0 12 1.5 22 1.5 32 0.0 13 1.5 23 1.5 33 0.0 70 1 0 3DFACE 8 box 10 2.26 20 1.5 30 0.0 11 2.24539681310645 21 1.64826864473226 31 0.0 12 2.25634039227087 22 1.57449302665047 32 0.0 13 2.25634039227087 23 1.57449302665047 33 0.0 70 1 0 3DFACE 8 box 10 0.772725344843521 20 1.72061635471339 30 0.0 11 1.5 21 1.5 31 0.0 12 0.754603186893545 22 1.64826864473226 32 0.0 13 0.754603186893545 23 1.64826864473226 33 0.0 70 1 0 3DFACE 8 box 10 1.5 20 1.5 30 0.0 11 0.772725344843521 21 1.72061635471339 31 0.0 12 0.797851555291422 22 1.79083940859747 32 0.0 13 0.797851555291422 23 1.79083940859747 33 0.0 70 1 0 3DFACE 8 box 10 1.64826864473226 20 0.754603186893545 30 0.0 11 1.5 21 0.74 31 0.0 12 1.5 22 1.5 32 0.0 13 1.5 23 1.5 33 0.0 70 1 0 3DFACE 8 box 10 1.5 20 0.74 30 0.0 11 1.64826864473226 21 0.754603186893545 31 0.0 12 1.57449302665047 22 0.743659607729131 32 0.0 13 1.57449302665047 23 0.743659607729131 33 0.0 70 1 0 3DFACE 8 box 10 1.5 20 1.5 30 0.0 11 0.772725344843521 21 1.27938364528661 31 0.0 12 0.754603186893545 22 1.35173135526774 32 0.0 13 0.754603186893545 23 1.35173135526774 33 0.0 70 1 0 3DFACE 8 box 10 0.772725344843521 20 1.27938364528661 30 0.0 11 1.5 21 1.5 31 0.0 12 0.797851555291422 22 1.20916059140253 32 0.0 13 0.797851555291422 23 1.20916059140253 33 0.0 70 1 0 3DFACE 8 box 10 1.64826864473226 20 2.24539681310645 30 0.0 11 1.79083940859747 21 2.20214844470858 31 0.0 12 1.5 22 1.5 32 0.0 13 1.5 23 1.5 33 0.0 70 1 0 3DFACE 8 box 10 1.79083940859747 20 2.20214844470858 30 0.0 11 1.64826864473226 21 2.24539681310645 31 0.0 12 1.72061635471339 22 2.22727465515648 32 0.0 13 1.72061635471339 23 2.22727465515648 33 0.0 70 1 0 3DFACE 8 box 10 1.9222333770949 20 2.13191690534993 30 0.0 11 2.03740115370178 21 2.03740115370178 31 0.0 12 1.5 22 1.5 32 0.0 13 1.5 23 1.5 33 0.0 70 1 0 3DFACE 8 box 10 2.03740115370178 20 2.03740115370178 30 0.0 11 1.9222333770949 21 2.13191690534993 31 0.0 12 1.98213889596437 22 2.08748794455568 32 0.0 13 1.98213889596437 23 2.08748794455568 33 0.0 70 1 0 3DFACE 8 box 10 1.5 20 1.5 30 0.0 11 1.42550697334953 21 0.743659607729131 31 0.0 12 1.35173135526774 22 0.754603186893545 32 0.0 13 1.35173135526774 23 0.754603186893545 33 0.0 70 1 0 3DFACE 8 box 10 1.42550697334953 20 0.743659607729131 30 0.0 11 1.5 21 1.5 31 0.0 12 1.5 22 0.74 32 0.0 13 1.5 23 0.74 33 0.0 70 1 0 3DFACE 8 box 10 1.5 20 1.5 30 0.0 11 1.01786110403563 21 0.91251205544432 31 0.0 12 0.962598846298224 22 0.962598846298224 32 0.0 13 0.962598846298224 23 0.962598846298224 33 0.0 70 1 0 3DFACE 8 box 10 1.01786110403563 20 0.91251205544432 30 0.0 11 1.5 21 1.5 31 0.0 12 1.0777666229051 22 0.868083094650066 32 0.0 13 1.0777666229051 23 0.868083094650066 33 0.0 70 1 0 3DFACE 8 box 10 1.79083940859747 20 2.20214844470858 30 0.0 11 1.9222333770949 21 2.13191690534993 31 0.0 12 1.5 22 1.5 32 0.0 13 1.5 23 1.5 33 0.0 70 1 0 3DFACE 8 box 10 1.9222333770949 20 2.13191690534993 30 0.0 11 1.79083940859747 21 2.20214844470858 31 0.0 12 1.85826151998776 22 2.17026016090475 32 0.0 13 1.85826151998776 23 2.17026016090475 33 0.0 70 1 0 3DFACE 8 box 10 1.57449302665047 20 2.25634039227087 30 0.0 11 1.5 21 1.5 31 0.0 12 1.5 22 2.26 32 0.0 13 1.5 23 2.26 33 0.0 70 1 0 3DFACE 8 box 10 1.5 20 1.5 30 0.0 11 1.57449302665047 21 2.25634039227087 31 0.0 12 1.64826864473226 22 2.24539681310645 32 0.0 13 1.64826864473226 23 2.24539681310645 33 0.0 70 1 0 3DFACE 8 box 10 1.5 20 1.5 30 0.0 11 1.27938364528661 21 0.772725344843521 31 0.0 12 1.20916059140253 22 0.797851555291422 32 0.0 13 1.20916059140253 23 0.797851555291422 33 0.0 70 1 0 3DFACE 8 box 10 1.27938364528661 20 0.772725344843521 30 0.0 11 1.5 21 1.5 31 0.0 12 1.35173135526774 22 0.754603186893545 32 0.0 13 1.35173135526774 23 0.754603186893545 33 0.0 70 1 0 3DFACE 8 box 10 1.9222333770949 20 0.868083094650066 30 0.0 11 1.79083940859747 21 0.797851555291422 31 0.0 12 1.5 22 1.5 32 0.0 13 1.5 23 1.5 33 0.0 70 1 0 3DFACE 8 box 10 1.79083940859747 20 0.797851555291422 30 0.0 11 1.9222333770949 21 0.868083094650066 31 0.0 12 1.85826151998776 22 0.82973983909525 32 0.0 13 1.85826151998776 23 0.82973983909525 33 0.0 70 1 0 3DFACE 8 box 10 1.42550697334953 20 2.25634039227087 30 0.0 11 1.5 21 1.5 31 0.0 12 1.35173135526774 22 2.24539681310645 32 0.0 13 1.35173135526774 23 2.24539681310645 33 0.0 70 1 0 3DFACE 8 box 10 1.5 20 1.5 30 0.0 11 1.42550697334953 21 2.25634039227087 31 0.0 12 1.5 22 2.26 32 0.0 13 1.5 23 2.26 33 0.0 70 1 0 3DFACE 8 box 10 1.01786110403563 20 2.08748794455568 30 0.0 11 1.5 21 1.5 31 0.0 12 0.962598846298224 22 2.03740115370178 32 0.0 13 0.962598846298224 23 2.03740115370178 33 0.0 70 1 0 3DFACE 8 box 10 1.5 20 1.5 30 0.0 11 1.01786110403563 21 2.08748794455568 31 0.0 12 1.0777666229051 22 2.13191690534993 32 0.0 13 1.0777666229051 23 2.13191690534993 33 0.0 70 1 0 3DFACE 8 box 10 1.79083940859747 20 0.797851555291422 30 0.0 11 1.64826864473226 21 0.754603186893545 31 0.0 12 1.5 22 1.5 32 0.0 13 1.5 23 1.5 33 0.0 70 1 0 3DFACE 8 box 10 1.64826864473226 20 0.754603186893545 30 0.0 11 1.79083940859747 21 0.797851555291422 31 0.0 12 1.72061635471339 22 0.772725344843521 32 0.0 13 1.72061635471339 23 0.772725344843521 33 0.0 70 1 0 3DFACE 8 box 10 1.14173848001224 20 2.17026016090475 30 0.0 11 1.5 21 1.5 31 0.0 12 1.0777666229051 22 2.13191690534993 32 0.0 13 1.0777666229051 23 2.13191690534993 33 0.0 70 1 0 3DFACE 8 box 10 1.5 20 1.5 30 0.0 11 1.14173848001224 21 2.17026016090475 31 0.0 12 1.20916059140253 22 2.20214844470858 32 0.0 13 1.20916059140253 23 2.20214844470858 33 0.0 70 1 0 3DFACE 8 box 10 2.13191690534993 20 1.0777666229051 30 0.0 11 2.03740115370178 21 0.962598846298224 31 0.0 12 1.5 22 1.5 32 0.0 13 1.5 23 1.5 33 0.0 70 1 0 3DFACE 8 box 10 2.03740115370178 20 0.962598846298224 30 0.0 11 2.13191690534993 21 1.0777666229051 31 0.0 12 2.08748794455568 22 1.01786110403563 32 0.0 13 2.08748794455568 23 1.01786110403563 33 0.0 70 1 0 3DFACE 8 box 10 0.91251205544432 20 1.98213889596437 30 0.0 11 1.5 21 1.5 31 0.0 12 0.868083094650066 22 1.9222333770949 32 0.0 13 0.868083094650066 23 1.9222333770949 33 0.0 70 1 0 3DFACE 8 box 10 1.5 20 1.5 30 0.0 11 0.91251205544432 21 1.98213889596437 31 0.0 12 0.962598846298224 22 2.03740115370178 32 0.0 13 0.962598846298224 23 2.03740115370178 33 0.0 70 1 0 3DFACE 8 box 10 2.03740115370178 20 0.962598846298224 30 0.0 11 1.9222333770949 21 0.868083094650066 31 0.0 12 1.5 22 1.5 32 0.0 13 1.5 23 1.5 33 0.0 70 1 0 3DFACE 8 box 10 1.9222333770949 20 0.868083094650066 30 0.0 11 2.03740115370178 21 0.962598846298224 31 0.0 12 1.98213889596437 22 0.91251205544432 32 0.0 13 1.98213889596437 23 0.91251205544432 33 0.0 70 1 0 3DFACE 8 box 10 2.26 20 1.5 30 0.0 11 2.24539681310646 21 1.35173135526774 31 0.0 12 1.5 22 1.5 32 0.0 13 1.5 23 1.5 33 0.0 70 1 0 3DFACE 8 box 10 2.24539681310646 20 1.35173135526774 30 0.0 11 2.26 21 1.5 31 0.0 12 2.25634039227087 22 1.42550697334953 32 0.0 13 2.25634039227087 23 1.42550697334953 33 0.0 70 1 0 3DFACE 8 box 10 0.82973983909525 20 1.85826151998776 30 0.0 11 1.5 21 1.5 31 0.0 12 0.797851555291422 22 1.79083940859747 32 0.0 13 0.797851555291422 23 1.79083940859747 33 0.0 70 1 0 3DFACE 8 box 10 1.5 20 1.5 30 0.0 11 0.82973983909525 21 1.85826151998776 31 0.0 12 0.868083094650066 22 1.9222333770949 32 0.0 13 0.868083094650066 23 1.9222333770949 33 0.0 70 1 0 3DFACE 8 box 10 2.24539681310646 20 1.35173135526774 30 0.0 11 2.20214844470858 21 1.20916059140253 31 0.0 12 1.5 22 1.5 32 0.0 13 1.5 23 1.5 33 0.0 70 1 0 3DFACE 8 box 10 2.20214844470858 20 1.20916059140253 30 0.0 11 2.24539681310646 21 1.35173135526774 31 0.0 12 2.22727465515648 22 1.27938364528661 32 0.0 13 2.22727465515648 23 1.27938364528661 33 0.0 70 1 0 3DFACE 8 box 10 0.743659607729131 20 1.57449302665047 30 0.0 11 1.5 21 1.5 31 0.0 12 0.74 22 1.5 32 0.0 13 0.74 23 1.5 33 0.0 70 1 0 3DFACE 8 box 10 1.5 20 1.5 30 0.0 11 0.743659607729131 21 1.57449302665047 31 0.0 12 0.754603186893545 22 1.64826864473226 32 0.0 13 0.754603186893545 23 1.64826864473226 33 0.0 70 1 0 3DFACE 8 box 10 2.13191690534993 20 1.9222333770949 30 0.0 11 2.20214844470858 21 1.79083940859747 31 0.0 12 1.5 22 1.5 32 0.0 13 1.5 23 1.5 33 0.0 70 1 0 3DFACE 8 box 10 2.20214844470858 20 1.79083940859747 30 0.0 11 2.13191690534993 21 1.9222333770949 31 0.0 12 2.17026016090475 22 1.85826151998776 32 0.0 13 2.17026016090475 23 1.85826151998776 33 0.0 70 1 0 3DFACE 8 box 10 1.5 20 1.5 30 0.0 11 0.743659607729131 21 1.42550697334953 31 0.0 12 0.74 22 1.5 32 0.0 13 0.74 23 1.5 33 0.0 70 1 0 3DFACE 8 box 10 0.743659607729131 20 1.42550697334953 30 0.0 11 1.5 21 1.5 31 0.0 12 0.754603186893545 22 1.35173135526774 32 0.0 13 0.754603186893545 23 1.35173135526774 33 0.0 70 1 0 3DFACE 8 box 10 1.5 20 1.5 30 0.0 11 0.91251205544432 21 1.01786110403563 31 0.0 12 0.868083094650066 22 1.0777666229051 32 0.0 13 0.868083094650066 23 1.0777666229051 33 0.0 70 1 0 3DFACE 8 box 10 0.91251205544432 20 1.01786110403563 30 0.0 11 1.5 21 1.5 31 0.0 12 0.962598846298224 22 0.962598846298224 32 0.0 13 0.962598846298224 23 0.962598846298224 33 0.0 70 1 0 3DFACE 8 box 10 2.20214844470858 20 1.79083940859747 30 0.0 11 2.24539681310645 21 1.64826864473226 31 0.0 12 1.5 22 1.5 32 0.0 13 1.5 23 1.5 33 0.0 70 1 0 3DFACE 8 box 10 2.24539681310645 20 1.64826864473226 30 0.0 11 2.20214844470858 21 1.79083940859747 31 0.0 12 2.22727465515648 22 1.72061635471339 32 0.0 13 2.22727465515648 23 1.72061635471339 33 0.0 70 1 0 3DFACE 8 box 10 1.5 20 1.5 30 0.0 11 0.82973983909525 21 1.14173848001224 31 0.0 12 0.797851555291422 22 1.20916059140253 32 0.0 13 0.797851555291422 23 1.20916059140253 33 0.0 70 1 0 3DFACE 8 box 10 0.82973983909525 20 1.14173848001224 30 0.0 11 1.5 21 1.5 31 0.0 12 0.868083094650066 22 1.0777666229051 32 0.0 13 0.868083094650066 23 1.0777666229051 33 0.0 70 1 0 3DFACE 8 box 10 2.03740115370178 20 2.03740115370178 30 0.0 11 2.13191690534993 21 1.9222333770949 31 0.0 12 1.5 22 1.5 32 0.0 13 1.5 23 1.5 33 0.0 70 1 0 3DFACE 8 box 10 2.13191690534993 20 1.9222333770949 30 0.0 11 2.03740115370178 21 2.03740115370178 31 0.0 12 2.08748794455568 22 1.98213889596437 32 0.0 13 2.08748794455568 23 1.98213889596437 33 0.0 70 1 0 3DFACE 8 box 10 1.5 20 1.5 30 3.0 11 1.14173848001224 21 2.17026016090475 31 3.0 12 1.0777666229051 22 2.13191690534993 32 3.0 13 1.0777666229051 23 2.13191690534993 33 3.0 70 1 0 3DFACE 8 box 10 1.14173848001224 20 2.17026016090475 30 3.0 11 1.5 21 1.5 31 3.0 12 1.20916059140253 22 2.20214844470858 32 3.0 13 1.20916059140253 23 2.20214844470858 33 3.0 70 1 0 3DFACE 8 box 10 1.5 20 1.5 30 3.0 11 1.42550697334953 21 2.25634039227087 31 3.0 12 1.35173135526774 22 2.24539681310645 32 3.0 13 1.35173135526774 23 2.24539681310645 33 3.0 70 1 0 3DFACE 8 box 10 1.42550697334953 20 2.25634039227087 30 3.0 11 1.5 21 1.5 31 3.0 12 1.5 22 2.26 32 3.0 13 1.5 23 2.26 33 3.0 70 1 0 3DFACE 8 box 10 1.64826864473226 20 0.754603186893545 30 3.0 11 1.79083940859747 21 0.797851555291422 31 3.0 12 1.5 22 1.5 32 3.0 13 1.5 23 1.5 33 3.0 70 1 0 3DFACE 8 box 10 1.79083940859747 20 0.797851555291422 30 3.0 11 1.64826864473226 21 0.754603186893545 31 3.0 12 1.72061635471339 22 0.772725344843521 32 3.0 13 1.72061635471339 23 0.772725344843521 33 3.0 70 1 0 3DFACE 8 box 10 1.9222333770949 20 0.868083094650066 30 3.0 11 2.03740115370178 21 0.962598846298224 31 3.0 12 1.5 22 1.5 32 3.0 13 1.5 23 1.5 33 3.0 70 1 0 3DFACE 8 box 10 2.03740115370178 20 0.962598846298224 30 3.0 11 1.9222333770949 21 0.868083094650066 31 3.0 12 1.98213889596437 22 0.91251205544432 32 3.0 13 1.98213889596437 23 0.91251205544432 33 3.0 70 1 0 3DFACE 8 box 10 1.5 20 1.5 30 3.0 11 1.27938364528661 21 2.22727465515648 31 3.0 12 1.20916059140253 22 2.20214844470858 32 3.0 13 1.20916059140253 23 2.20214844470858 33 3.0 70 1 0 3DFACE 8 box 10 1.27938364528661 20 2.22727465515648 30 3.0 11 1.5 21 1.5 31 3.0 12 1.35173135526774 22 2.24539681310645 32 3.0 13 1.35173135526774 23 2.24539681310645 33 3.0 70 1 0 3DFACE 8 box 10 1.5 20 1.5 30 3.0 11 0.91251205544432 21 1.98213889596437 31 3.0 12 0.868083094650066 22 1.9222333770949 32 3.0 13 0.868083094650066 23 1.9222333770949 33 3.0 70 1 0 3DFACE 8 box 10 0.91251205544432 20 1.98213889596437 30 3.0 11 1.5 21 1.5 31 3.0 12 0.962598846298224 22 2.03740115370178 32 3.0 13 0.962598846298224 23 2.03740115370178 33 3.0 70 1 0 3DFACE 8 box 10 1.79083940859747 20 0.797851555291422 30 3.0 11 1.9222333770949 21 0.868083094650066 31 3.0 12 1.5 22 1.5 32 3.0 13 1.5 23 1.5 33 3.0 70 1 0 3DFACE 8 box 10 1.9222333770949 20 0.868083094650066 30 3.0 11 1.79083940859747 21 0.797851555291422 31 3.0 12 1.85826151998776 22 0.82973983909525 32 3.0 13 1.85826151998776 23 0.82973983909525 33 3.0 70 1 0 3DFACE 8 box 10 2.13191690534993 20 1.0777666229051 30 3.0 11 2.20214844470858 21 1.20916059140253 31 3.0 12 1.5 22 1.5 32 3.0 13 1.5 23 1.5 33 3.0 70 1 0 3DFACE 8 box 10 2.20214844470858 20 1.20916059140253 30 3.0 11 2.13191690534993 21 1.0777666229051 31 3.0 12 2.17026016090475 22 1.14173848001224 32 3.0 13 2.17026016090475 23 1.14173848001224 33 3.0 70 1 0 3DFACE 8 box 10 1.5 20 1.5 30 3.0 11 1.01786110403563 21 2.08748794455568 31 3.0 12 0.962598846298224 22 2.03740115370178 32 3.0 13 0.962598846298224 23 2.03740115370178 33 3.0 70 1 0 3DFACE 8 box 10 1.01786110403563 20 2.08748794455568 30 3.0 11 1.5 21 1.5 31 3.0 12 1.0777666229051 22 2.13191690534993 32 3.0 13 1.0777666229051 23 2.13191690534993 33 3.0 70 1 0 3DFACE 8 box 10 2.03740115370178 20 0.962598846298224 30 3.0 11 2.13191690534993 21 1.0777666229051 31 3.0 12 1.5 22 1.5 32 3.0 13 1.5 23 1.5 33 3.0 70 1 0 3DFACE 8 box 10 2.13191690534993 20 1.0777666229051 30 3.0 11 2.03740115370178 21 0.962598846298224 31 3.0 12 2.08748794455568 22 1.01786110403563 32 3.0 13 2.08748794455568 23 1.01786110403563 33 3.0 70 1 0 3DFACE 8 box 10 1.5 20 1.5 30 3.0 11 0.772725344843521 21 1.72061635471339 31 3.0 12 0.754603186893545 22 1.64826864473226 32 3.0 13 0.754603186893545 23 1.64826864473226 33 3.0 70 1 0 3DFACE 8 box 10 0.772725344843521 20 1.72061635471339 30 3.0 11 1.5 21 1.5 31 3.0 12 0.797851555291422 22 1.79083940859747 32 3.0 13 0.797851555291422 23 1.79083940859747 33 3.0 70 1 0 3DFACE 8 box 10 1.5 20 1.5 30 3.0 11 0.82973983909525 21 1.85826151998776 31 3.0 12 0.797851555291422 22 1.79083940859747 32 3.0 13 0.797851555291422 23 1.79083940859747 33 3.0 70 1 0 3DFACE 8 box 10 0.82973983909525 20 1.85826151998776 30 3.0 11 1.5 21 1.5 31 3.0 12 0.868083094650066 22 1.9222333770949 32 3.0 13 0.868083094650066 23 1.9222333770949 33 3.0 70 1 0 3DFACE 8 box 10 2.24539681310646 20 1.35173135526774 30 3.0 11 2.26 21 1.5 31 3.0 12 1.5 22 1.5 32 3.0 13 1.5 23 1.5 33 3.0 70 1 0 3DFACE 8 box 10 2.26 20 1.5 30 3.0 11 2.24539681310646 21 1.35173135526774 31 3.0 12 2.25634039227087 22 1.42550697334953 32 3.0 13 2.25634039227087 23 1.42550697334953 33 3.0 70 1 0 3DFACE 8 box 10 0.743659607729131 20 1.42550697334953 30 3.0 11 1.5 21 1.5 31 3.0 12 0.74 22 1.5 32 3.0 13 0.74 23 1.5 33 3.0 70 1 0 3DFACE 8 box 10 1.5 20 1.5 30 3.0 11 0.743659607729131 21 1.42550697334953 31 3.0 12 0.754603186893545 22 1.35173135526774 32 3.0 13 0.754603186893545 23 1.35173135526774 33 3.0 70 1 0 3DFACE 8 box 10 2.20214844470858 20 1.20916059140253 30 3.0 11 2.24539681310646 21 1.35173135526774 31 3.0 12 1.5 22 1.5 32 3.0 13 1.5 23 1.5 33 3.0 70 1 0 3DFACE 8 box 10 2.24539681310646 20 1.35173135526774 30 3.0 11 2.20214844470858 21 1.20916059140253 31 3.0 12 2.22727465515648 22 1.27938364528661 32 3.0 13 2.22727465515648 23 1.27938364528661 33 3.0 70 1 0 3DFACE 8 box 10 2.24539681310645 20 1.64826864473226 30 3.0 11 2.20214844470858 21 1.79083940859747 31 3.0 12 1.5 22 1.5 32 3.0 13 1.5 23 1.5 33 3.0 70 1 0 3DFACE 8 box 10 2.20214844470858 20 1.79083940859747 30 3.0 11 2.24539681310645 21 1.64826864473226 31 3.0 12 2.22727465515648 22 1.72061635471339 32 3.0 13 2.22727465515648 23 1.72061635471339 33 3.0 70 1 0 3DFACE 8 box 10 1.5 20 1.5 30 3.0 11 0.743659607729131 21 1.57449302665047 31 3.0 12 0.74 22 1.5 32 3.0 13 0.74 23 1.5 33 3.0 70 1 0 3DFACE 8 box 10 0.743659607729131 20 1.57449302665047 30 3.0 11 1.5 21 1.5 31 3.0 12 0.754603186893545 22 1.64826864473226 32 3.0 13 0.754603186893545 23 1.64826864473226 33 3.0 70 1 0 3DFACE 8 box 10 2.26 20 1.5 30 3.0 11 2.24539681310645 21 1.64826864473226 31 3.0 12 1.5 22 1.5 32 3.0 13 1.5 23 1.5 33 3.0 70 1 0 3DFACE 8 box 10 2.24539681310645 20 1.64826864473226 30 3.0 11 2.26 21 1.5 31 3.0 12 2.25634039227087 22 1.57449302665047 32 3.0 13 2.25634039227087 23 1.57449302665047 33 3.0 70 1 0 3DFACE 8 box 10 0.82973983909525 20 1.14173848001224 30 3.0 11 1.5 21 1.5 31 3.0 12 0.797851555291422 22 1.20916059140253 32 3.0 13 0.797851555291422 23 1.20916059140253 33 3.0 70 1 0 3DFACE 8 box 10 1.5 20 1.5 30 3.0 11 0.82973983909525 21 1.14173848001224 31 3.0 12 0.868083094650066 22 1.0777666229051 32 3.0 13 0.868083094650066 23 1.0777666229051 33 3.0 70 1 0 3DFACE 8 box 10 2.13191690534993 20 1.9222333770949 30 3.0 11 2.03740115370178 21 2.03740115370178 31 3.0 12 1.5 22 1.5 32 3.0 13 1.5 23 1.5 33 3.0 70 1 0 3DFACE 8 box 10 2.03740115370178 20 2.03740115370178 30 3.0 11 2.13191690534993 21 1.9222333770949 31 3.0 12 2.08748794455568 22 1.98213889596437 32 3.0 13 2.08748794455568 23 1.98213889596437 33 3.0 70 1 0 3DFACE 8 box 10 0.772725344843521 20 1.27938364528661 30 3.0 11 1.5 21 1.5 31 3.0 12 0.754603186893545 22 1.35173135526774 32 3.0 13 0.754603186893545 23 1.35173135526774 33 3.0 70 1 0 3DFACE 8 box 10 1.5 20 1.5 30 3.0 11 0.772725344843521 21 1.27938364528661 31 3.0 12 0.797851555291422 22 1.20916059140253 32 3.0 13 0.797851555291422 23 1.20916059140253 33 3.0 70 1 0 3DFACE 8 box 10 1.01786110403563 20 0.91251205544432 30 3.0 11 1.5 21 1.5 31 3.0 12 0.962598846298224 22 0.962598846298224 32 3.0 13 0.962598846298224 23 0.962598846298224 33 3.0 70 1 0 3DFACE 8 box 10 1.5 20 1.5 30 3.0 11 1.01786110403563 21 0.91251205544432 31 3.0 12 1.0777666229051 22 0.868083094650066 32 3.0 13 1.0777666229051 23 0.868083094650066 33 3.0 70 1 0 3DFACE 8 box 10 2.20214844470858 20 1.79083940859747 30 3.0 11 2.13191690534993 21 1.9222333770949 31 3.0 12 1.5 22 1.5 32 3.0 13 1.5 23 1.5 33 3.0 70 1 0 3DFACE 8 box 10 2.13191690534993 20 1.9222333770949 30 3.0 11 2.20214844470858 21 1.79083940859747 31 3.0 12 2.17026016090475 22 1.85826151998776 32 3.0 13 2.17026016090475 23 1.85826151998776 33 3.0 70 1 0 3DFACE 8 box 10 0.91251205544432 20 1.01786110403563 30 3.0 11 1.5 21 1.5 31 3.0 12 0.868083094650066 22 1.0777666229051 32 3.0 13 0.868083094650066 23 1.0777666229051 33 3.0 70 1 0 3DFACE 8 box 10 1.5 20 1.5 30 3.0 11 0.91251205544432 21 1.01786110403563 31 3.0 12 0.962598846298224 22 0.962598846298224 32 3.0 13 0.962598846298224 23 0.962598846298224 33 3.0 70 1 0 3DFACE 8 box 10 1.9222333770949 20 2.13191690534993 30 3.0 11 1.79083940859747 21 2.20214844470858 31 3.0 12 1.5 22 1.5 32 3.0 13 1.5 23 1.5 33 3.0 70 1 0 3DFACE 8 box 10 1.79083940859747 20 2.20214844470858 30 3.0 11 1.9222333770949 21 2.13191690534993 31 3.0 12 1.85826151998776 22 2.17026016090475 32 3.0 13 1.85826151998776 23 2.17026016090475 33 3.0 70 1 0 3DFACE 8 box 10 1.27938364528661 20 0.772725344843521 30 3.0 11 1.5 21 1.5 31 3.0 12 1.20916059140253 22 0.797851555291422 32 3.0 13 1.20916059140253 23 0.797851555291422 33 3.0 70 1 0 3DFACE 8 box 10 1.5 20 1.5 30 3.0 11 1.27938364528661 21 0.772725344843521 31 3.0 12 1.35173135526774 22 0.754603186893545 32 3.0 13 1.35173135526774 23 0.754603186893545 33 3.0 70 1 0 3DFACE 8 box 10 2.03740115370178 20 2.03740115370178 30 3.0 11 1.9222333770949 21 2.13191690534993 31 3.0 12 1.5 22 1.5 32 3.0 13 1.5 23 1.5 33 3.0 70 1 0 3DFACE 8 box 10 1.9222333770949 20 2.13191690534993 30 3.0 11 2.03740115370178 21 2.03740115370178 31 3.0 12 1.98213889596437 22 2.08748794455568 32 3.0 13 1.98213889596437 23 2.08748794455568 33 3.0 70 1 0 3DFACE 8 box 10 1.64826864473226 20 2.24539681310645 30 3.0 11 1.5 21 2.26 31 3.0 12 1.5 22 1.5 32 3.0 13 1.5 23 1.5 33 3.0 70 1 0 3DFACE 8 box 10 1.5 20 2.26 30 3.0 11 1.64826864473226 21 2.24539681310645 31 3.0 12 1.57449302665047 22 2.25634039227087 32 3.0 13 1.57449302665047 23 2.25634039227087 33 3.0 70 1 0 3DFACE 8 box 10 1.14173848001224 20 0.82973983909525 30 3.0 11 1.5 21 1.5 31 3.0 12 1.0777666229051 22 0.868083094650066 32 3.0 13 1.0777666229051 23 0.868083094650066 33 3.0 70 1 0 3DFACE 8 box 10 1.5 20 1.5 30 3.0 11 1.14173848001224 21 0.82973983909525 31 3.0 12 1.20916059140253 22 0.797851555291422 32 3.0 13 1.20916059140253 23 0.797851555291422 33 3.0 70 1 0 3DFACE 8 box 10 1.42550697334953 20 0.743659607729131 30 3.0 11 1.5 21 1.5 31 3.0 12 1.35173135526774 22 0.754603186893545 32 3.0 13 1.35173135526774 23 0.754603186893545 33 3.0 70 1 0 3DFACE 8 box 10 1.5 20 1.5 30 3.0 11 1.42550697334953 21 0.743659607729131 31 3.0 12 1.5 22 0.74 32 3.0 13 1.5 23 0.74 33 3.0 70 1 0 3DFACE 8 box 10 1.79083940859747 20 2.20214844470858 30 3.0 11 1.64826864473226 21 2.24539681310645 31 3.0 12 1.5 22 1.5 32 3.0 13 1.5 23 1.5 33 3.0 70 1 0 3DFACE 8 box 10 1.64826864473226 20 2.24539681310645 30 3.0 11 1.79083940859747 21 2.20214844470858 31 3.0 12 1.72061635471339 22 2.22727465515648 32 3.0 13 1.72061635471339 23 2.22727465515648 33 3.0 70 1 0 3DFACE 8 iso_dwn 10 0.0 20 3.0 30 0.7275 11 0.205 21 3.0 31 0.205 12 0.0 22 3.0 32 0.205 13 0.0 23 3.0 33 0.205 70 1 0 3DFACE 8 iso_dwn 10 0.205 20 3.0 30 0.205 11 0.0 21 3.0 31 0.7275 12 0.205 22 3.0 32 0.6475 13 0.205 23 3.0 33 0.6475 70 3 0 3DFACE 8 iso_dwn 10 0.205 20 3.0 30 0.6475 11 0.0 21 3.0 31 0.7275 12 0.0 22 3.0 32 0.8525 13 0.0 23 3.0 33 0.8525 70 1 0 3DFACE 8 iso_dwn 10 0.205 20 3.0 30 0.205 11 0.497732043121052 21 3.0 31 0.0 12 0.205 22 3.0 32 0.0 13 0.205 23 3.0 33 0.0 70 1 0 3DFACE 8 iso_dwn 10 0.497732043121052 20 3.0 30 0.0 11 0.205 21 3.0 31 0.205 12 0.8525 22 3.0 32 3.33066907387547e-16 13 0.8525 23 3.0 33 3.33066907387547e-16 70 3 0 3DFACE 8 iso_dwn 10 0.8525 20 3.0 30 3.33066907387547e-16 11 0.205 21 3.0 31 0.205 12 0.6475 22 3.0 32 0.205 13 0.6475 23 3.0 33 0.205 70 1 0 3DFACE 8 iso_dwn 10 0.42625 20 3.0 30 0.42625 11 0.6475 21 3.0 31 0.205 12 0.205 22 3.0 32 0.205 13 0.205 23 3.0 33 0.205 70 0 0 3DFACE 8 iso_dwn 10 0.8525 20 3.0 30 3.33066907387547e-16 11 0.639832154473908 21 2.78733215447391 31 2.22163676695763e-16 12 0.497732043121052 22 3.0 32 0.0 13 0.497732043121052 23 3.0 33 0.0 70 0 0 3DFACE 8 iso_dwn 10 0.212667845526092 20 2.36016784552609 30 1.10903230691784e-16 11 0.0 21 2.2725 31 0.0 12 0.0 22 2.50226795687895 32 0.0 13 0.0 23 2.50226795687895 33 0.0 70 1 0 3DFACE 8 iso_dwn 10 0.0 20 2.2725 30 0.0 11 0.212667845526092 21 2.36016784552609 31 1.10903230691784e-16 12 0.0 22 2.1475 32 0.0 13 0.0 23 2.1475 33 0.0 70 1 0 3DFACE 8 iso_dwn 10 0.0 20 3.0 30 0.0 11 0.0 21 2.795 31 0.0 12 0.0 22 2.795 32 0.205 13 0.0 23 2.795 33 0.205 70 0 0 3DFACE 8 iso_dwn 10 0.0 20 3.0 30 0.0 11 0.0 21 2.795 31 0.205 12 0.0 22 3.0 32 0.205 13 0.0 23 3.0 33 0.205 70 0 0 3DFACE 8 iso_dwn 10 0.205 20 3.0 30 0.205 11 0.0 21 3.0 31 0.0 12 0.0 22 3.0 32 0.205 13 0.0 23 3.0 33 0.205 70 0 0 3DFACE 8 iso_dwn 10 0.0 20 2.795 30 0.205 11 0.0 21 2.57375 31 0.42625 12 0.0 22 2.795 32 0.6475 13 0.0 23 2.795 33 0.6475 70 0 0 3DFACE 8 iso_dwn 10 0.205 20 3.0 30 0.0 11 0.42625 21 2.57375 31 1.66533453693774e-16 12 0.0 22 3.0 32 0.0 13 0.0 23 3.0 33 0.0 70 1 0 3DFACE 8 iso_dwn 10 0.42625 20 2.57375 30 1.66533453693774e-16 11 0.205 21 3.0 31 0.0 12 0.497732043121052 22 3.0 32 0.0 13 0.497732043121052 23 3.0 33 0.0 70 13 0 3DFACE 8 iso_dwn 10 0.42625 20 2.57375 30 1.66533453693774e-16 11 0.497732043121052 21 3.0 31 0.0 12 0.639832154473908 22 2.78733215447391 32 2.22163676695763e-16 13 0.639832154473908 23 2.78733215447391 33 2.22163676695763e-16 70 1 0 3DFACE 8 iso_dwn 10 0.42625 20 2.57375 30 1.66533453693774e-16 11 0.0 21 2.795 31 0.0 12 0.0 22 3.0 32 0.0 13 0.0 23 3.0 33 0.0 70 1 0 3DFACE 8 iso_dwn 10 0.0 20 2.795 30 0.0 11 0.42625 21 2.57375 31 1.66533453693774e-16 12 0.0 22 2.50226795687895 32 0.0 13 0.0 23 2.50226795687895 33 0.0 70 3 0 3DFACE 8 iso_dwn 10 0.0 20 2.50226795687895 30 0.0 11 0.42625 21 2.57375 31 1.66533453693774e-16 12 0.212667845526092 22 2.36016784552609 32 1.10903230691784e-16 13 0.212667845526092 23 2.36016784552609 33 1.10903230691784e-16 70 1 0 3DFACE 8 iso_dwn 10 0.0 20 2.3525 30 0.205 11 0.0 21 2.2725 31 0.0 12 0.0 22 2.1475 32 0.0 13 0.0 23 2.1475 33 0.0 70 1 0 3DFACE 8 iso_dwn 10 0.0 20 2.2725 30 0.0 11 0.0 21 2.3525 31 0.205 12 0.0 22 2.50226795687895 32 0.0 13 0.0 23 2.50226795687895 33 0.0 70 3 0 3DFACE 8 iso_dwn 10 0.0 20 2.50226795687895 30 0.0 11 0.0 21 2.3525 31 0.205 12 0.0 22 2.795 32 0.205 13 0.0 23 2.795 33 0.205 70 13 0 3DFACE 8 iso_dwn 10 0.0 20 2.50226795687895 30 0.0 11 0.0 21 2.795 31 0.205 12 0.0 22 2.795 32 0.0 13 0.0 23 2.795 33 0.0 70 1 0 3DFACE 8 iso_dwn 10 0.205 20 3.0 30 0.205 11 0.205 21 3.0 31 0.0 12 0.0 22 3.0 32 0.0 13 0.0 23 3.0 33 0.0 70 0 0 3DFACE 8 iso_dwn 10 0.0 20 2.795 30 0.205 11 0.0 21 2.3525 31 0.205 12 0.0 22 2.57375 32 0.42625 13 0.0 23 2.57375 33 0.42625 70 0 0 3DFACE 8 iso_dwn 10 0.205 20 3.0 30 0.6475 11 0.42625 21 3.0 31 0.42625 12 0.205 22 3.0 32 0.205 13 0.205 23 3.0 33 0.205 70 0 0 3DFACE 8 iso_dwn 10 0.0 20 3.0 30 0.8525 11 0.0 21 2.795 31 0.205 12 0.0 22 2.795 32 0.6475 13 0.0 23 2.795 33 0.6475 70 1 0 3DFACE 8 iso_dwn 10 0.0 20 2.795 30 0.205 11 0.0 21 3.0 31 0.8525 12 0.0 22 3.0 32 0.205 13 0.0 23 3.0 33 0.205 70 3 0 3DFACE 8 iso_dwn 10 0.0 20 3.0 30 0.205 11 0.0 21 3.0 31 0.8525 12 0.0 22 3.0 32 0.7275 13 0.0 23 3.0 33 0.7275 70 1 0 3DFACE 8 iso_dwn 10 0.212667845526092 20 2.36016784552609 30 1.10903230691784e-16 11 0.0 21 2.3525 31 0.205 12 0.0 22 2.1475 32 0.0 13 0.0 23 2.1475 33 0.0 70 1 0 3DFACE 8 iso_dwn 10 0.0 20 2.3525 30 0.205 11 0.212667845526092 21 2.36016784552609 31 1.10903230691784e-16 12 0.42625 22 2.57375 32 1.66533453693774e-16 13 0.42625 23 2.57375 33 1.66533453693774e-16 70 13 0 3DFACE 8 iso_dwn 10 0.0 20 2.3525 30 0.205 11 0.42625 21 2.57375 31 1.66533453693774e-16 12 0.639832154473908 22 2.78733215447391 32 2.22163676695763e-16 13 0.639832154473908 23 2.78733215447391 33 2.22163676695763e-16 70 13 0 3DFACE 8 iso_dwn 10 0.0 20 2.3525 30 0.205 11 0.639832154473908 21 2.78733215447391 31 2.22163676695763e-16 12 0.8525 22 3.0 32 3.33066907387547e-16 13 0.8525 23 3.0 33 3.33066907387547e-16 70 13 0 3DFACE 8 iso_dwn 10 0.0 20 2.3525 30 0.205 11 0.8525 21 3.0 31 3.33066907387547e-16 12 0.6475 22 3.0 32 0.205 13 0.6475 23 3.0 33 0.205 70 13 0 3DFACE 8 iso_dwn 10 0.0 20 2.3525 30 0.205 11 0.6475 21 3.0 31 0.205 12 0.42625 22 3.0 32 0.42625 13 0.42625 23 3.0 33 0.42625 70 13 0 3DFACE 8 iso_dwn 10 0.0 20 2.3525 30 0.205 11 0.42625 21 3.0 31 0.42625 12 0.0 22 2.57375 32 0.42625 13 0.0 23 2.57375 33 0.42625 70 3 0 3DFACE 8 iso_dwn 10 0.0 20 2.57375 30 0.42625 11 0.42625 21 3.0 31 0.42625 12 0.205 22 3.0 32 0.6475 13 0.205 23 3.0 33 0.6475 70 13 0 3DFACE 8 iso_dwn 10 0.0 20 2.57375 30 0.42625 11 0.205 21 3.0 31 0.6475 12 0.0 22 2.795 32 0.6475 13 0.0 23 2.795 33 0.6475 70 3 0 3DFACE 8 iso_dwn 10 0.0 20 2.795 30 0.6475 11 0.205 21 3.0 31 0.6475 12 0.0 22 3.0 32 0.8525 13 0.0 23 3.0 33 0.8525 70 1 0 3DFACE 8 iso_swd 10 1.5 20 5.55111512312578e-17 30 0.0 11 1.20163144893051 21 1.11022302462516e-16 31 0.0 12 1.26776612947519 22 0.332481491301359 32 -1.32155935006511e-16 13 1.26776612947519 23 0.332481491301359 33 -1.32155935006511e-16 70 0 0 3DFACE 8 iso_swd 10 0.0 20 0.205 30 0.205 11 0.0 21 0.0 31 0.0 12 0.0 22 0.0 32 0.205 13 0.0 23 0.0 33 0.205 70 0 0 3DFACE 8 iso_swd 10 0.0 20 0.205 30 0.205 11 0.0 21 0.205 31 0.0 12 0.0 22 0.0 32 0.0 13 0.0 23 0.0 33 0.0 70 0 0 3DFACE 8 iso_swd 10 0.0 20 0.205 30 0.205 11 0.0 21 0.497732043121051 31 0.0 12 0.0 22 0.205 32 0.0 13 0.0 23 0.205 33 0.0 70 1 0 3DFACE 8 iso_swd 10 0.0 20 0.497732043121051 30 0.0 11 0.0 21 0.205 31 0.205 12 0.0 22 1.5 32 0.205 13 0.0 23 1.5 33 0.205 70 13 0 3DFACE 8 iso_swd 10 0.0 20 0.497732043121051 30 0.0 11 0.0 21 1.5 31 0.205 12 0.0 22 0.878679656440357 32 0.0 13 0.0 23 0.878679656440357 33 0.0 70 3 0 3DFACE 8 iso_swd 10 0.0 20 0.878679656440357 30 0.0 11 0.0 21 1.5 31 0.205 12 0.0 22 1.20163144893051 32 0.0 13 0.0 23 1.20163144893051 33 0.0 70 3 0 3DFACE 8 iso_swd 10 0.0 20 1.20163144893051 30 0.0 11 0.0 21 1.5 31 0.205 12 0.0 22 1.5 32 0.0 13 0.0 23 1.5 33 0.0 70 1 0 3DFACE 8 iso_swd 10 0.283212517800539 20 1.74203407868223 30 1.35872768146951e-17 11 0.0 21 1.5 31 0.0 12 0.0 22 1.79836855106949 32 0.0 13 0.0 23 1.79836855106949 33 0.0 70 1 0 3DFACE 8 iso_swd 10 0.0 20 1.5 30 0.0 11 0.283212517800539 21 1.74203407868223 31 1.35872768146951e-17 12 0.452270081490105 22 1.5 32 -1.14382698113301e-17 13 0.452270081490105 23 1.5 33 -1.14382698113301e-17 70 1 0 3DFACE 8 iso_swd 10 0.452270081490105 20 1.5 30 -1.14382698113301e-17 11 0.0 21 1.20163144893051 31 0.0 12 0.0 22 1.5 32 0.0 13 0.0 23 1.5 33 0.0 70 1 0 3DFACE 8 iso_swd 10 0.0 20 1.20163144893051 30 0.0 11 0.452270081490105 21 1.5 31 -1.14382698113301e-17 12 0.580081389077038 22 1.31701681130471 32 -3.03581440100583e-17 13 0.580081389077038 23 1.31701681130471 33 -3.03581440100583e-17 70 1 0 3DFACE 8 iso_swd 10 0.580081389077038 20 1.31701681130471 30 -3.03581440100583e-17 11 0.0 21 0.878679656440357 31 0.0 12 0.0 22 1.20163144893051 32 0.0 13 0.0 23 1.20163144893051 33 0.0 70 1 0 3DFACE 8 iso_swd 10 0.0 20 0.878679656440357 30 0.0 11 0.580081389077038 21 1.31701681130471 31 -3.03581440100583e-17 12 0.687379562118009 22 1.16340159356772 32 -4.6241464304765e-17 13 0.687379562118009 23 1.16340159356772 33 -4.6241464304765e-17 70 1 0 3DFACE 8 iso_swd 10 0.0257305779793495 20 2.1106623891929 30 5.17022605499795e-17 11 0.0 21 1.79836855106949 31 0.0 12 0.0 22 2.12132034355964 32 0.0 13 0.0 23 2.12132034355964 33 0.0 70 1 0 3DFACE 8 iso_swd 10 0.0 20 1.79836855106949 30 0.0 11 0.0257305779793495 21 2.1106623891929 31 5.17022605499795e-17 12 0.283212517800539 22 1.74203407868223 32 1.35872768146951e-17 13 0.283212517800539 23 1.74203407868223 33 1.35872768146951e-17 70 1 0 3DFACE 8 iso_swd 10 0.785661664350193 20 1.02269438387197 30 -6.07901380123296e-17 11 0.0 21 0.205 31 0.0 12 0.0 22 0.497732043121051 32 0.0 13 0.0 23 0.497732043121051 33 0.0 70 1 0 3DFACE 8 iso_swd 10 0.0 20 0.205 30 0.0 11 0.785661664350193 21 1.02269438387197 31 -6.07901380123296e-17 12 0.0 22 0.0 32 0.0 13 0.0 23 0.0 33 0.0 70 3 0 3DFACE 8 iso_swd 10 0.0 20 0.0 30 0.0 11 0.785661664350193 21 1.02269438387197 31 -6.07901380123296e-17 12 0.883139136394791 22 0.883139136394791 32 -7.52197025251519e-17 13 0.883139136394791 23 0.883139136394791 33 -7.52197025251519e-17 70 1 0 3DFACE 8 iso_swd 10 0.987752578969539 20 0.733367557775276 30 -9.07056028760568e-17 11 0.878679656440358 21 1.66533453693773e-16 31 0.0 12 0.497732043121053 22 0.0 32 0.0 13 0.497732043121053 23 0.0 33 0.0 70 1 0 3DFACE 8 iso_swd 10 0.878679656440358 20 1.66533453693773e-16 30 0.0 11 0.987752578969539 21 0.733367557775276 31 -9.07056028760568e-17 12 1.10997225325072 22 0.558389724096058 32 -1.08797749069277e-16 13 1.10997225325072 23 0.558389724096058 33 -1.08797749069277e-16 70 1 0 3DFACE 8 iso_swd 10 1.10997225325072 20 0.558389724096058 30 -1.08797749069277e-16 11 1.20163144893051 21 1.11022302462516e-16 31 0.0 12 0.878679656440358 22 1.66533453693773e-16 32 0.0 13 0.878679656440358 23 1.66533453693773e-16 33 0.0 70 1 0 3DFACE 8 iso_swd 10 1.20163144893051 20 1.11022302462516e-16 30 0.0 11 1.10997225325072 21 0.558389724096058 31 -1.08797749069277e-16 12 1.26776612947519 22 0.332481491301359 32 -1.32155935006511e-16 13 1.26776612947519 23 0.332481491301359 33 -1.32155935006511e-16 70 1 0 3DFACE 8 iso_swd 10 0.0 20 0.883139136394791 30 0.883139136394791 11 0.0 21 1.5 31 0.205 12 0.0 22 0.205 32 0.205 13 0.0 23 0.205 33 0.205 70 1 0 3DFACE 8 iso_swd 10 0.0 20 1.5 30 0.205 11 0.0 21 0.883139136394791 31 0.883139136394791 12 0.0 22 1.5 32 0.452270081490105 13 0.0 23 1.5 33 0.452270081490105 70 1 0 3DFACE 8 iso_swd 10 0.0 20 0.883139136394791 30 0.883139136394791 11 0.0 21 0.205 31 0.205 12 0.0 22 0.205 32 1.35681024447031 13 0.0 23 0.205 33 1.35681024447031 70 0 0 3DFACE 8 iso_swd 10 0.0 20 1.85400833333333 30 0.205 11 0.0 21 1.5 31 0.0 12 0.0 22 1.5 32 0.205 13 0.0 23 1.5 33 0.205 70 1 0 3DFACE 8 iso_swd 10 0.0 20 1.5 30 0.0 11 0.0 21 1.85400833333333 31 0.205 12 0.0 22 1.79836855106949 32 0.0 13 0.0 23 1.79836855106949 33 0.0 70 3 0 3DFACE 8 iso_swd 10 0.0 20 1.79836855106949 30 0.0 11 0.0 21 1.85400833333333 31 0.205 12 0.0 22 2.12132034355964 32 0.0 13 0.0 23 2.12132034355964 33 0.0 70 3 0 3DFACE 8 iso_swd 10 0.0 20 2.12132034355964 30 0.0 11 0.0 21 1.85400833333333 31 0.205 12 0.0 22 2.1475 32 0.0 13 0.0 23 2.1475 33 0.0 70 1 0 3DFACE 8 iso_swd 10 0.0 20 1.85400833333333 30 0.205 11 0.0 21 1.5 31 0.205 12 0.0 22 1.5 32 0.452270081490105 13 0.0 23 1.5 33 0.452270081490105 70 0 0 3DFACE 8 iso_swd 10 0.0 20 0.205 30 1.35681024447031 11 0.0 21 0.0 31 0.205 12 0.0 22 0.0 32 1.5 13 0.0 23 0.0 33 1.5 70 1 0 3DFACE 8 iso_swd 10 0.0 20 0.0 30 0.205 11 0.0 21 0.205 31 1.35681024447031 12 0.0 22 0.205 32 0.205 13 0.0 23 0.205 33 0.205 70 1 0 3DFACE 8 iso_swd 10 0.687379562118009 20 1.16340159356772 30 -4.6241464304765e-17 11 0.0 21 0.497732043121051 31 0.0 12 0.0 22 0.878679656440357 32 0.0 13 0.0 23 0.878679656440357 33 0.0 70 1 0 3DFACE 8 iso_swd 10 0.0 20 0.497732043121051 30 0.0 11 0.687379562118009 21 1.16340159356772 31 -4.6241464304765e-17 12 0.785661664350193 22 1.02269438387197 32 -6.07901380123296e-17 13 0.785661664350193 23 1.02269438387197 33 -6.07901380123296e-17 70 1 0 3DFACE 8 iso_swd 10 0.883139136394791 20 0.883139136394791 30 -7.52197025251519e-17 11 0.205 21 0.0 31 0.0 12 0.0 22 0.0 32 0.0 13 0.0 23 0.0 33 0.0 70 1 0 3DFACE 8 iso_swd 10 0.205 20 0.0 30 0.0 11 0.883139136394791 21 0.883139136394791 31 -7.52197025251519e-17 12 0.497732043121053 22 0.0 32 0.0 13 0.497732043121053 23 0.0 33 0.0 70 3 0 3DFACE 8 iso_swd 10 0.497732043121053 20 0.0 30 0.0 11 0.883139136394791 21 0.883139136394791 31 -7.52197025251519e-17 12 0.987752578969539 22 0.733367557775276 32 -9.07056028760568e-17 13 0.987752578969539 23 0.733367557775276 33 -9.07056028760568e-17 70 1 0 3DFACE 8 iso_swd 10 0.75 20 1.38777878078145e-17 30 0.75 11 0.205 21 0.0 31 0.205 12 1.295 22 2.39623136148263e-17 32 0.205 13 1.295 23 2.39623136148263e-17 33 0.205 70 0 0 3DFACE 8 iso_swd 10 0.205 20 0.0 30 0.205 11 0.0 21 0.0 31 0.0 12 0.205 22 0.0 32 0.0 13 0.205 23 0.0 33 0.0 70 0 0 3DFACE 8 iso_swd 10 0.205 20 3.79326200080262e-18 30 1.295 11 0.0 21 0.0 31 0.205 12 0.205 22 0.0 32 0.205 13 0.205 23 0.0 33 0.205 70 1 0 3DFACE 8 iso_swd 10 0.0 20 0.0 30 0.205 11 0.205 21 3.79326200080262e-18 31 1.295 12 0.0 22 0.0 32 1.5 13 0.0 23 0.0 33 1.5 70 1 0 3DFACE 8 iso_swd 10 1.295 20 2.39623136148263e-17 30 0.205 11 1.20163144893051 21 1.11022302462516e-16 31 0.0 12 1.5 22 5.55111512312578e-17 32 0.0 13 1.5 23 5.55111512312578e-17 33 0.0 70 1 0 3DFACE 8 iso_swd 10 1.20163144893051 20 1.11022302462516e-16 30 0.0 11 1.295 21 2.39623136148263e-17 31 0.205 12 0.878679656440358 22 1.66533453693773e-16 32 0.0 13 0.878679656440358 23 1.66533453693773e-16 33 0.0 70 3 0 3DFACE 8 iso_swd 10 0.878679656440358 20 1.66533453693773e-16 30 0.0 11 1.295 21 2.39623136148263e-17 31 0.205 12 0.497732043121053 22 0.0 32 0.0 13 0.497732043121053 23 0.0 33 0.0 70 3 0 3DFACE 8 iso_swd 10 0.497732043121053 20 0.0 30 0.0 11 1.295 21 2.39623136148263e-17 31 0.205 12 0.205 22 0.0 32 0.0 13 0.205 23 0.0 33 0.0 70 3 0 3DFACE 8 iso_swd 10 0.205 20 0.0 30 0.0 11 1.295 21 2.39623136148263e-17 31 0.205 12 0.205 22 0.0 32 0.205 13 0.205 23 0.0 33 0.205 70 1 0 3DFACE 8 iso_swd 10 0.205 20 3.79326200080262e-18 30 1.295 11 0.205 21 0.0 31 0.205 12 0.75 22 1.38777878078145e-17 32 0.75 13 0.75 23 1.38777878078145e-17 33 0.75 70 0 0 3DFACE 8 iso_swd 10 0.0 20 0.0 30 0.205 11 0.0 21 0.0 31 0.0 12 0.205 22 0.0 32 0.205 13 0.205 23 0.0 33 0.205 70 0 0 3DFACE 8 iso_swd 10 0.0257305779793495 20 2.1106623891929 30 5.17022605499795e-17 11 0.0 21 2.12132034355964 31 0.0 12 0.0 22 2.1475 32 0.0 13 0.0 23 2.1475 33 0.0 70 0 0 3DFACE 8 iso_swd 10 0.205 20 3.79326200080262e-18 30 1.295 11 0.0 21 0.205 31 1.35681024447031 12 0.0 22 0.0 32 1.5 13 0.0 23 0.0 33 1.5 70 1 0 3DFACE 8 iso_swd 10 0.0 20 0.205 30 1.35681024447031 11 0.205 21 3.79326200080262e-18 31 1.295 12 0.75 22 1.38777878078145e-17 32 0.75 13 0.75 23 1.38777878078145e-17 33 0.75 70 13 0 3DFACE 8 iso_swd 10 0.0 20 0.205 30 1.35681024447031 11 0.75 21 1.38777878078145e-17 31 0.75 12 1.295 22 2.39623136148263e-17 32 0.205 13 1.295 23 2.39623136148263e-17 33 0.205 70 13 0 3DFACE 8 iso_swd 10 0.0 20 0.205 30 1.35681024447031 11 1.295 21 2.39623136148263e-17 31 0.205 12 1.5 22 5.55111512312578e-17 32 0.0 13 1.5 23 5.55111512312578e-17 33 0.0 70 13 0 3DFACE 8 iso_swd 10 0.0 20 0.205 30 1.35681024447031 11 1.5 21 5.55111512312578e-17 31 0.0 12 1.26776612947519 22 0.332481491301359 32 -1.32155935006511e-16 13 1.26776612947519 23 0.332481491301359 33 -1.32155935006511e-16 70 13 0 3DFACE 8 iso_swd 10 0.0 20 0.205 30 1.35681024447031 11 1.26776612947519 21 0.332481491301359 31 -1.32155935006511e-16 12 0.0 22 0.883139136394791 32 0.883139136394791 13 0.0 23 0.883139136394791 33 0.883139136394791 70 3 0 3DFACE 8 iso_swd 10 0.0 20 0.883139136394791 30 0.883139136394791 11 1.26776612947519 21 0.332481491301359 31 -1.32155935006511e-16 12 1.10997225325072 22 0.558389724096058 32 -1.08797749069277e-16 13 1.10997225325072 23 0.558389724096058 33 -1.08797749069277e-16 70 13 0 3DFACE 8 iso_swd 10 0.0 20 0.883139136394791 30 0.883139136394791 11 1.10997225325072 21 0.558389724096058 31 -1.08797749069277e-16 12 0.987752578969539 22 0.733367557775276 32 -9.07056028760568e-17 13 0.987752578969539 23 0.733367557775276 33 -9.07056028760568e-17 70 13 0 3DFACE 8 iso_swd 10 0.0 20 0.883139136394791 30 0.883139136394791 11 0.987752578969539 21 0.733367557775276 31 -9.07056028760568e-17 12 0.883139136394791 22 0.883139136394791 32 -7.52197025251519e-17 13 0.883139136394791 23 0.883139136394791 33 -7.52197025251519e-17 70 13 0 3DFACE 8 iso_swd 10 0.0 20 0.883139136394791 30 0.883139136394791 11 0.883139136394791 21 0.883139136394791 31 -7.52197025251519e-17 12 0.785661664350193 22 1.02269438387197 32 -6.07901380123296e-17 13 0.785661664350193 23 1.02269438387197 33 -6.07901380123296e-17 70 13 0 3DFACE 8 iso_swd 10 0.0 20 0.883139136394791 30 0.883139136394791 11 0.785661664350193 21 1.02269438387197 31 -6.07901380123296e-17 12 0.0 22 1.5 32 0.452270081490105 13 0.0 23 1.5 33 0.452270081490105 70 3 0 3DFACE 8 iso_swd 10 0.0 20 1.5 30 0.452270081490105 11 0.785661664350193 21 1.02269438387197 31 -6.07901380123296e-17 12 0.687379562118009 22 1.16340159356772 32 -4.6241464304765e-17 13 0.687379562118009 23 1.16340159356772 33 -4.6241464304765e-17 70 13 0 3DFACE 8 iso_swd 10 0.0 20 1.5 30 0.452270081490105 11 0.687379562118009 21 1.16340159356772 31 -4.6241464304765e-17 12 0.580081389077038 22 1.31701681130471 32 -3.03581440100583e-17 13 0.580081389077038 23 1.31701681130471 33 -3.03581440100583e-17 70 13 0 3DFACE 8 iso_swd 10 0.0 20 1.5 30 0.452270081490105 11 0.580081389077038 21 1.31701681130471 31 -3.03581440100583e-17 12 0.452270081490105 22 1.5 32 -1.14382698113301e-17 13 0.452270081490105 23 1.5 33 -1.14382698113301e-17 70 13 0 3DFACE 8 iso_swd 10 0.0 20 1.5 30 0.452270081490105 11 0.452270081490105 21 1.5 31 -1.14382698113301e-17 12 0.283212517800539 22 1.74203407868223 32 1.35872768146951e-17 13 0.283212517800539 23 1.74203407868223 33 1.35872768146951e-17 70 13 0 3DFACE 8 iso_swd 10 0.0 20 1.5 30 0.452270081490105 11 0.283212517800539 21 1.74203407868223 31 1.35872768146951e-17 12 0.0 22 1.85400833333333 32 0.205 13 0.0 23 1.85400833333333 33 0.205 70 3 0 3DFACE 8 iso_swd 10 0.0 20 1.85400833333333 30 0.205 11 0.283212517800539 21 1.74203407868223 31 1.35872768146951e-17 12 0.0257305779793495 22 2.1106623891929 32 5.17022605499795e-17 13 0.0257305779793495 23 2.1106623891929 33 5.17022605499795e-17 70 13 0 3DFACE 8 iso_swd 10 0.0 20 1.85400833333333 30 0.205 11 0.0257305779793495 21 2.1106623891929 31 5.17022605499795e-17 12 0.0 22 2.1475 32 0.0 13 0.0 23 2.1475 33 0.0 70 1 0 3DFACE 8 iso_den 10 1.5 20 3.0 30 0.452270081490105 11 2.1475 21 3.0 31 0.8525 12 1.5 22 3.0 32 0.205 13 1.5 23 3.0 33 0.205 70 1 0 3DFACE 8 iso_den 10 2.1475 20 3.0 30 0.8525 11 1.5 21 3.0 31 0.452270081490105 12 2.11686086360521 22 3.0 32 0.883139136394791 13 2.11686086360521 23 3.0 33 0.883139136394791 70 1 0 3DFACE 8 iso_den 10 1.79836855106949 20 3.0 30 0.0 11 1.83659840643228 21 2.31262043788199 31 1.75803140620266e-16 12 1.68298318869529 22 2.41991861092296 32 1.91686460914973e-16 13 1.68298318869529 23 2.41991861092296 33 1.91686460914973e-16 70 1 0 3DFACE 8 iso_den 10 1.83659840643228 20 2.31262043788199 30 1.75803140620266e-16 11 1.79836855106949 21 3.0 31 0.0 12 2.12132034355964 22 3.0 32 0.0 13 2.12132034355964 23 3.0 33 0.0 70 1 0 3DFACE 8 iso_den 10 2.12132034355964 20 3.0 30 0.0 11 1.97730561612803 21 2.2143383356498 31 1.61254466912702e-16 12 1.83659840643228 22 2.31262043788199 32 1.75803140620266e-16 13 1.83659840643228 23 2.31262043788199 33 1.75803140620266e-16 70 1 0 3DFACE 8 iso_den 10 1.97730561612803 20 2.2143383356498 30 1.61254466912702e-16 11 2.12132034355964 21 3.0 31 0.0 12 2.50226795687895 22 3.0 32 0.0 13 2.50226795687895 23 3.0 33 0.0 70 1 0 3DFACE 8 iso_den 10 2.50226795687895 20 3.0 30 0.0 11 2.11686086360521 21 2.11686086360521 31 1.46824902399879e-16 12 1.97730561612803 22 2.2143383356498 32 1.61254466912702e-16 13 1.97730561612803 23 2.2143383356498 33 1.61254466912702e-16 70 1 0 3DFACE 8 iso_den 10 2.11686086360521 20 2.11686086360521 30 1.46824902399879e-16 11 2.50226795687895 21 3.0 31 0.0 12 3.0 22 3.0 32 0.0 13 3.0 23 3.0 33 0.0 70 3 0 3DFACE 8 iso_den 10 3.0 20 3.0 30 0.0 11 2.50226795687895 21 3.0 31 0.0 12 2.795 22 3.0 32 0.0 13 2.795 23 3.0 33 0.0 70 1 0 3DFACE 8 iso_den 10 1.5 20 3.0 30 0.452270081490105 11 1.5 21 3.0 31 0.205 12 1.35441740918437 22 3.0 32 0.350582590815627 13 1.35441740918437 23 3.0 33 0.350582590815627 70 0 0 3DFACE 8 iso_den 10 2.1475 20 3.0 30 0.8525 11 2.795 21 3.0 31 1.35681024447031 12 2.795 22 3.0 32 0.205 13 2.795 23 3.0 33 0.205 70 1 0 3DFACE 8 iso_den 10 2.795 20 3.0 30 1.35681024447031 11 2.1475 21 3.0 31 0.8525 12 2.32009652509653 22 3.0 32 1.02509652509653 13 2.32009652509653 23 3.0 33 1.02509652509653 70 1 0 3DFACE 8 iso_den 10 2.1475 20 3.0 30 0.8525 11 2.795 21 3.0 31 0.205 12 1.5 22 3.0 32 0.205 13 1.5 23 3.0 33 0.205 70 0 0 3DFACE 8 iso_den 10 1.35441740918437 20 3.0 30 0.350582590815627 11 1.5 21 3.0 31 0.205 12 1.14599166666667 22 3.0 32 0.205 13 1.14599166666667 23 3.0 33 0.205 70 0 0 3DFACE 8 iso_den 10 3.0 20 2.50226795687895 30 0.0 11 2.44161027590394 21 1.89002774674928 31 1.13246855855755e-16 12 2.26663244222472 22 2.01224742103046 32 1.31339002048974e-16 13 2.26663244222472 23 2.01224742103046 33 1.31339002048974e-16 70 1 0 3DFACE 8 iso_den 10 2.44161027590394 20 1.89002774674928 30 1.13246855855755e-16 11 3.0 21 2.50226795687895 31 0.0 12 3.0 22 2.12132034355964 32 0.0 13 3.0 23 2.12132034355964 33 0.0 70 1 0 3DFACE 8 iso_den 10 2.795 20 3.0 30 1.35681024447031 11 3.0 21 3.0 31 0.205 12 2.795 22 3.0 32 0.205 13 2.795 23 3.0 33 0.205 70 1 0 3DFACE 8 iso_den 10 3.0 20 3.0 30 0.205 11 2.795 21 3.0 31 1.35681024447031 12 3.0 22 3.0 32 1.5 13 3.0 23 3.0 33 1.5 70 1 0 3DFACE 8 iso_den 10 1.79836855106949 20 3.0 30 0.0 11 1.5 21 2.54772991850989 31 2.10606335113701e-16 12 1.5 22 3.0 32 0.0 13 1.5 23 3.0 33 0.0 70 1 0 3DFACE 8 iso_den 10 1.5 20 2.54772991850989 30 2.10606335113701e-16 11 1.79836855106949 21 3.0 31 0.0 12 1.68298318869529 22 2.41991861092296 32 1.91686460914973e-16 13 1.68298318869529 23 2.41991861092296 33 1.91686460914973e-16 70 1 0 3DFACE 8 iso_den 10 3.0 20 1.5 30 0.0 11 2.66751850869864 21 1.73223387052481 31 8.98886699185201e-17 12 3.0 22 1.79836855106949 32 0.0 13 3.0 23 1.79836855106949 33 0.0 70 0 0 3DFACE 8 iso_den 10 3.0 20 3.0 30 0.0 11 2.26663244222472 21 2.01224742103046 31 1.31339002048974e-16 12 2.11686086360521 22 2.11686086360521 32 1.46824902399879e-16 13 2.11686086360521 23 2.11686086360521 33 1.46824902399879e-16 70 1 0 3DFACE 8 iso_den 10 2.26663244222472 20 2.01224742103046 30 1.31339002048974e-16 11 3.0 21 3.0 31 0.0 12 3.0 22 2.50226795687895 32 0.0 13 3.0 23 2.50226795687895 33 0.0 70 3 0 3DFACE 8 iso_den 10 3.0 20 2.50226795687895 30 0.0 11 3.0 21 3.0 31 0.0 12 3.0 22 2.795 32 0.0 13 3.0 23 2.795 33 0.0 70 1 0 3DFACE 8 iso_den 10 1.20163144893051 20 3.0 30 0.0 11 0.889337610807103 21 2.97426942202065 31 2.73746865475011e-16 12 0.878679656440356 22 3.0 32 0.0 13 0.878679656440356 23 3.0 33 0.0 70 1 0 3DFACE 8 iso_den 10 0.889337610807103 20 2.97426942202065 30 2.73746865475011e-16 11 1.20163144893051 21 3.0 31 0.0 12 1.25796592131777 22 2.71678748219946 32 2.35631881739726e-16 13 1.25796592131777 23 2.71678748219946 33 2.35631881739726e-16 70 1 0 3DFACE 8 iso_den 10 2.795 20 3.0 30 0.205 11 3.0 21 3.0 31 0.0 12 2.795 22 3.0 32 0.0 13 2.795 23 3.0 33 0.0 70 0 0 3DFACE 8 iso_den 10 3.0 20 1.79836855106949 30 0.0 11 3.0 21 1.705 31 0.205 12 3.0 22 1.5 32 0.0 13 3.0 23 1.5 33 0.0 70 1 0 3DFACE 8 iso_den 10 3.0 20 1.705 30 0.205 11 3.0 21 1.79836855106949 31 0.0 12 3.0 22 2.795 32 0.205 13 3.0 23 2.795 33 0.205 70 3 0 3DFACE 8 iso_den 10 3.0 20 2.795 30 0.205 11 3.0 21 1.79836855106949 31 0.0 12 3.0 22 2.12132034355964 32 0.0 13 3.0 23 2.12132034355964 33 0.0 70 13 0 3DFACE 8 iso_den 10 3.0 20 2.795 30 0.205 11 3.0 21 2.12132034355964 31 0.0 12 3.0 22 2.50226795687895 32 0.0 13 3.0 23 2.50226795687895 33 0.0 70 13 0 3DFACE 8 iso_den 10 3.0 20 2.795 30 0.205 11 3.0 21 2.50226795687895 31 0.0 12 3.0 22 2.795 32 0.0 13 3.0 23 2.795 33 0.0 70 1 0 3DFACE 8 iso_den 10 0.8525 20 3.0 30 3.33066907387547e-16 11 1.20163144893051 21 3.0 31 0.0 12 0.878679656440356 22 3.0 32 0.0 13 0.878679656440356 23 3.0 33 0.0 70 1 0 3DFACE 8 iso_den 10 1.20163144893051 20 3.0 30 0.0 11 0.8525 21 3.0 31 3.33066907387547e-16 12 1.5 22 3.0 32 0.0 13 1.5 23 3.0 33 0.0 70 3 0 3DFACE 8 iso_den 10 1.5 20 3.0 30 0.0 11 0.8525 21 3.0 31 3.33066907387547e-16 12 1.5 22 3.0 32 0.205 13 1.5 23 3.0 33 0.205 70 3 0 3DFACE 8 iso_den 10 1.5 20 3.0 30 0.205 11 0.8525 21 3.0 31 3.33066907387547e-16 12 1.14599166666667 22 3.0 32 0.205 13 1.14599166666667 23 3.0 33 0.205 70 1 0 3DFACE 8 iso_den 10 1.5 20 3.0 30 0.0 11 1.25796592131777 21 2.71678748219946 31 2.35631881739726e-16 12 1.20163144893051 22 3.0 32 0.0 13 1.20163144893051 23 3.0 33 0.0 70 1 0 3DFACE 8 iso_den 10 1.25796592131777 20 2.71678748219946 30 2.35631881739726e-16 11 1.5 21 3.0 31 0.0 12 1.5 22 2.54772991850989 32 2.10606335113701e-16 13 1.5 23 2.54772991850989 33 2.10606335113701e-16 70 1 0 3DFACE 8 iso_den 10 3.0 20 2.12132034355964 30 0.0 11 2.66751850869864 21 1.73223387052481 31 8.98886699185201e-17 12 2.44161027590394 22 1.89002774674928 32 1.13246855855755e-16 13 2.44161027590394 23 1.89002774674928 33 1.13246855855755e-16 70 1 0 3DFACE 8 iso_den 10 2.66751850869864 20 1.73223387052481 30 8.98886699185201e-17 11 3.0 21 2.12132034355964 31 0.0 12 3.0 22 1.79836855106949 32 0.0 13 3.0 23 1.79836855106949 33 0.0 70 1 0 3DFACE 8 iso_den 10 3.0 20 2.795 30 0.205 11 3.0 21 2.25 31 0.75 12 3.0 22 1.705 32 0.205 13 3.0 23 1.705 33 0.205 70 0 0 3DFACE 8 iso_den 10 3.0 20 3.0 30 0.205 11 3.0 21 2.795 31 0.205 12 3.0 22 3.0 32 0.0 13 3.0 23 3.0 33 0.0 70 0 0 3DFACE 8 iso_den 10 3.0 20 3.0 30 0.205 11 3.0 21 3.0 31 0.0 12 2.795 22 3.0 32 0.205 13 2.795 23 3.0 33 0.205 70 0 0 3DFACE 8 iso_den 10 3.0 20 3.0 30 0.0 11 3.0 21 2.795 31 0.205 12 3.0 22 2.795 32 0.0 13 3.0 23 2.795 33 0.0 70 0 0 3DFACE 8 iso_den 10 3.0 20 2.795 30 1.295 11 3.0 21 2.25 31 0.75 12 3.0 22 2.795 32 0.205 13 3.0 23 2.795 33 0.205 70 0 0 3DFACE 8 iso_den 10 1.5 20 3.0 30 0.205 11 1.79836855106949 21 3.0 31 0.0 12 1.5 22 3.0 32 0.0 13 1.5 23 3.0 33 0.0 70 1 0 3DFACE 8 iso_den 10 1.79836855106949 20 3.0 30 0.0 11 1.5 21 3.0 31 0.205 12 2.12132034355964 22 3.0 32 0.0 13 2.12132034355964 23 3.0 33 0.0 70 3 0 3DFACE 8 iso_den 10 2.12132034355964 20 3.0 30 0.0 11 1.5 21 3.0 31 0.205 12 2.50226795687895 22 3.0 32 0.0 13 2.50226795687895 23 3.0 33 0.0 70 3 0 3DFACE 8 iso_den 10 2.50226795687895 20 3.0 30 0.0 11 1.5 21 3.0 31 0.205 12 2.795 22 3.0 32 0.0 13 2.795 23 3.0 33 0.0 70 3 0 3DFACE 8 iso_den 10 2.795 20 3.0 30 0.0 11 1.5 21 3.0 31 0.205 12 2.795 22 3.0 32 0.205 13 2.795 23 3.0 33 0.205 70 1 0 3DFACE 8 iso_den 10 3.0 20 3.0 30 0.205 11 3.0 21 2.795 31 1.295 12 3.0 22 2.795 32 0.205 13 3.0 23 2.795 33 0.205 70 1 0 3DFACE 8 iso_den 10 3.0 20 2.795 30 1.295 11 3.0 21 3.0 31 0.205 12 3.0 22 3.0 32 1.5 13 3.0 23 3.0 33 1.5 70 1 0 3DFACE 8 iso_den 10 2.32009652509653 20 3.0 30 1.02509652509653 11 2.1475 21 3.0 31 0.8525 12 2.11686086360521 22 3.0 32 0.883139136394791 13 2.11686086360521 23 3.0 33 0.883139136394791 70 0 0 3DFACE 8 iso_den 10 0.889337610807103 20 2.97426942202065 30 2.73746865475011e-16 11 0.8525 21 3.0 31 3.33066907387547e-16 12 0.878679656440356 22 3.0 32 0.0 13 0.878679656440356 23 3.0 33 0.0 70 0 0 3DFACE 8 iso_den 10 0.889337610807103 20 2.97426942202065 30 2.73746865475011e-16 11 1.14599166666667 21 3.0 31 0.205 12 0.8525 22 3.0 32 3.33066907387547e-16 13 0.8525 23 3.0 33 3.33066907387547e-16 70 1 0 3DFACE 8 iso_den 10 1.14599166666667 20 3.0 30 0.205 11 0.889337610807103 21 2.97426942202065 31 2.73746865475011e-16 12 1.25796592131777 22 2.71678748219946 32 2.35631881739726e-16 13 1.25796592131777 23 2.71678748219946 33 2.35631881739726e-16 70 13 0 3DFACE 8 iso_den 10 1.14599166666667 20 3.0 30 0.205 11 1.25796592131777 21 2.71678748219946 31 2.35631881739726e-16 12 1.35441740918437 22 3.0 32 0.350582590815627 13 1.35441740918437 23 3.0 33 0.350582590815627 70 3 0 3DFACE 8 iso_den 10 1.35441740918437 20 3.0 30 0.350582590815627 11 1.25796592131777 21 2.71678748219946 31 2.35631881739726e-16 12 1.5 22 2.54772991850989 32 2.10606335113701e-16 13 1.5 23 2.54772991850989 33 2.10606335113701e-16 70 13 0 3DFACE 8 iso_den 10 1.35441740918437 20 3.0 30 0.350582590815627 11 1.5 21 2.54772991850989 31 2.10606335113701e-16 12 1.5 22 3.0 32 0.452270081490105 13 1.5 23 3.0 33 0.452270081490105 70 3 0 3DFACE 8 iso_den 10 1.5 20 3.0 30 0.452270081490105 11 1.5 21 2.54772991850989 31 2.10606335113701e-16 12 1.68298318869529 22 2.41991861092296 32 1.91686460914973e-16 13 1.68298318869529 23 2.41991861092296 33 1.91686460914973e-16 70 13 0 3DFACE 8 iso_den 10 1.5 20 3.0 30 0.452270081490105 11 1.68298318869529 21 2.41991861092296 31 1.91686460914973e-16 12 2.11686086360521 22 3.0 32 0.883139136394791 13 2.11686086360521 23 3.0 33 0.883139136394791 70 3 0 3DFACE 8 iso_den 10 2.11686086360521 20 3.0 30 0.883139136394791 11 1.68298318869529 21 2.41991861092296 31 1.91686460914973e-16 12 1.83659840643228 22 2.31262043788199 32 1.75803140620266e-16 13 1.83659840643228 23 2.31262043788199 33 1.75803140620266e-16 70 13 0 3DFACE 8 iso_den 10 2.11686086360521 20 3.0 30 0.883139136394791 11 1.83659840643228 21 2.31262043788199 31 1.75803140620266e-16 12 1.97730561612803 22 2.2143383356498 32 1.61254466912702e-16 13 1.97730561612803 23 2.2143383356498 33 1.61254466912702e-16 70 13 0 3DFACE 8 iso_den 10 2.11686086360521 20 3.0 30 0.883139136394791 11 1.97730561612803 21 2.2143383356498 31 1.61254466912702e-16 12 2.11686086360521 22 2.11686086360521 32 1.46824902399879e-16 13 2.11686086360521 23 2.11686086360521 33 1.46824902399879e-16 70 13 0 3DFACE 8 iso_den 10 2.11686086360521 20 3.0 30 0.883139136394791 11 2.11686086360521 21 2.11686086360521 31 1.46824902399879e-16 12 2.26663244222472 22 2.01224742103046 32 1.31339002048974e-16 13 2.26663244222472 23 2.01224742103046 33 1.31339002048974e-16 70 13 0 3DFACE 8 iso_den 10 2.11686086360521 20 3.0 30 0.883139136394791 11 2.26663244222472 21 2.01224742103046 31 1.31339002048974e-16 12 2.32009652509653 22 3.0 32 1.02509652509653 13 2.32009652509653 23 3.0 33 1.02509652509653 70 3 0 3DFACE 8 iso_den 10 2.32009652509653 20 3.0 30 1.02509652509653 11 2.26663244222472 21 2.01224742103046 31 1.31339002048974e-16 12 2.44161027590394 22 1.89002774674928 32 1.13246855855755e-16 13 2.44161027590394 23 1.89002774674928 33 1.13246855855755e-16 70 13 0 3DFACE 8 iso_den 10 2.32009652509653 20 3.0 30 1.02509652509653 11 2.44161027590394 21 1.89002774674928 31 1.13246855855755e-16 12 2.795 22 3.0 32 1.35681024447031 13 2.795 23 3.0 33 1.35681024447031 70 3 0 3DFACE 8 iso_den 10 2.795 20 3.0 30 1.35681024447031 11 2.44161027590394 21 1.89002774674928 31 1.13246855855755e-16 12 2.66751850869864 22 1.73223387052481 32 8.98886699185201e-17 13 2.66751850869864 23 1.73223387052481 33 8.98886699185201e-17 70 13 0 3DFACE 8 iso_den 10 2.795 20 3.0 30 1.35681024447031 11 2.66751850869864 21 1.73223387052481 31 8.98886699185201e-17 12 3.0 22 1.5 32 0.0 13 3.0 23 1.5 33 0.0 70 13 0 3DFACE 8 iso_den 10 2.795 20 3.0 30 1.35681024447031 11 3.0 21 1.5 31 0.0 12 3.0 22 3.0 32 1.5 13 3.0 23 3.0 33 1.5 70 3 0 3DFACE 8 iso_den 10 3.0 20 3.0 30 1.5 11 3.0 21 1.5 31 0.0 12 3.0 22 1.705 32 0.205 13 3.0 23 1.705 33 0.205 70 13 0 3DFACE 8 iso_den 10 3.0 20 3.0 30 1.5 11 3.0 21 1.705 31 0.205 12 3.0 22 2.25 32 0.75 13 3.0 23 2.25 33 0.75 70 13 0 3DFACE 8 iso_den 10 3.0 20 3.0 30 1.5 11 3.0 21 2.25 31 0.75 12 3.0 22 2.795 32 1.295 13 3.0 23 2.795 33 1.295 70 1 0 3DFACE 8 iso_unw 10 0.205 20 3.0 30 1.5 11 0.350582590815627 21 3.0 31 1.35441740918437 12 0.205 22 3.0 32 1.14599166666667 13 0.205 23 3.0 33 1.14599166666667 70 0 0 3DFACE 8 iso_unw 10 0.8525 20 3.0 30 2.1475 11 0.452270081490105 21 3.0 31 1.5 12 0.205 22 3.0 32 1.5 13 0.205 23 3.0 33 1.5 70 1 0 3DFACE 8 iso_unw 10 0.452270081490105 20 3.0 30 1.5 11 0.8525 21 3.0 31 2.1475 12 0.883139136394791 22 3.0 32 2.11686086360521 13 0.883139136394791 23 3.0 33 2.11686086360521 70 1 0 3DFACE 8 iso_unw 10 0.0 20 3.0 30 1.5 11 0.205 21 3.0 31 1.14599166666667 12 0.0 22 3.0 32 0.8525 13 0.0 23 3.0 33 0.8525 70 1 0 3DFACE 8 iso_unw 10 0.205 20 3.0 30 1.14599166666667 11 0.0 21 3.0 31 1.5 12 0.205 22 3.0 32 1.5 13 0.205 23 3.0 33 1.5 70 1 0 3DFACE 8 iso_unw 10 0.75 20 2.25 30 3.0 11 0.205 21 3.0 31 3.0 12 0.0 22 3.0 32 3.0 13 0.0 23 3.0 33 3.0 70 1 0 3DFACE 8 iso_unw 10 0.205 20 3.0 30 3.0 11 0.75 21 2.25 31 3.0 12 0.497732043121052 22 3.0 32 3.0 13 0.497732043121052 23 3.0 33 3.0 70 3 0 3DFACE 8 iso_unw 10 0.497732043121052 20 3.0 30 3.0 11 0.75 21 2.25 31 3.0 12 0.899184275534744 22 2.39918427553474 32 3.0 13 0.899184275534744 23 2.39918427553474 33 3.0 70 1 0 3DFACE 8 iso_unw 10 0.600815724465256 20 2.10081572446526 30 3.0 11 0.0 21 2.795 31 3.0 12 0.0 22 2.50226795687895 32 3.0 13 0.0 23 2.50226795687895 33 3.0 70 1 0 3DFACE 8 iso_unw 10 0.0 20 2.795 30 3.0 11 0.600815724465256 21 2.10081572446526 31 3.0 12 0.0 22 3.0 32 3.0 13 0.0 23 3.0 33 3.0 70 3 0 3DFACE 8 iso_unw 10 0.0 20 3.0 30 3.0 11 0.600815724465256 21 2.10081572446526 31 3.0 12 0.75 22 2.25 32 3.0 13 0.75 23 2.25 33 3.0 70 1 0 3DFACE 8 iso_unw 10 0.899184275534744 20 2.39918427553474 30 3.0 11 0.878679656440356 21 3.0 31 3.0 12 0.497732043121052 22 3.0 32 3.0 13 0.497732043121052 23 3.0 33 3.0 70 1 0 3DFACE 8 iso_unw 10 0.878679656440356 20 3.0 30 3.0 11 0.899184275534744 21 2.39918427553474 31 3.0 12 1.06066017177982 22 2.56066017177982 32 3.0 13 1.06066017177982 23 2.56066017177982 33 3.0 70 1 0 3DFACE 8 iso_unw 10 0.248866021560526 20 1.74886602156053 30 3.0 11 0.0 21 1.79836855106949 31 3.0 12 0.0 22 1.5 32 3.0 13 0.0 23 1.5 33 3.0 70 0 0 3DFACE 8 iso_unw 10 0.439339828220179 20 1.93933982822018 30 3.0 11 0.0 21 2.50226795687895 31 3.0 12 0.0 22 2.12132034355964 32 3.0 13 0.0 23 2.12132034355964 33 3.0 70 1 0 3DFACE 8 iso_unw 10 0.0 20 2.50226795687895 30 3.0 11 0.439339828220179 21 1.93933982822018 31 3.0 12 0.600815724465256 22 2.10081572446526 32 3.0 13 0.600815724465256 23 2.10081572446526 33 3.0 70 1 0 3DFACE 8 iso_unw 10 0.0 20 3.0 30 3.0 11 0.205 21 3.0 31 2.795 12 0.0 22 3.0 32 2.795 13 0.0 23 3.0 33 2.795 70 0 0 3DFACE 8 iso_unw 10 0.205 20 3.0 30 2.795 11 0.8525 21 3.0 31 2.1475 12 0.205 22 3.0 32 1.5 13 0.205 23 3.0 33 1.5 70 0 0 3DFACE 8 iso_unw 10 0.0 20 2.795 30 2.795 11 0.0 21 2.5477299185099 31 1.5 12 0.0 22 2.11686086360521 32 2.11686086360521 13 0.0 23 2.11686086360521 33 2.11686086360521 70 1 0 3DFACE 8 iso_unw 10 0.0 20 2.5477299185099 30 1.5 11 0.0 21 2.795 31 2.795 12 0.0 22 2.795 32 1.5 13 0.0 23 2.795 33 1.5 70 1 0 3DFACE 8 iso_unw 10 0.0 20 3.0 30 3.0 11 0.0 21 2.795 31 2.795 12 0.0 22 2.795 32 3.0 13 0.0 23 2.795 33 3.0 70 0 0 3DFACE 8 iso_unw 10 0.0 20 3.0 30 2.795 11 0.0 21 2.795 31 1.5 12 0.0 22 2.795 32 2.795 13 0.0 23 2.795 33 2.795 70 1 0 3DFACE 8 iso_unw 10 0.0 20 2.795 30 1.5 11 0.0 21 3.0 31 2.795 12 0.0 22 3.0 32 1.5 13 0.0 23 3.0 33 1.5 70 1 0 3DFACE 8 iso_unw 10 0.0 20 2.795 30 2.795 11 0.0 21 2.11686086360521 31 2.11686086360521 12 0.0 22 1.64318975552969 32 2.795 13 0.0 23 1.64318975552969 33 2.795 70 0 0 3DFACE 8 iso_unw 10 0.0 20 3.0 30 1.5 11 0.0 21 2.795 31 1.14599166666667 12 0.0 22 2.795 32 1.5 13 0.0 23 2.795 33 1.5 70 1 0 3DFACE 8 iso_unw 10 0.0 20 2.795 30 1.14599166666667 11 0.0 21 3.0 31 1.5 12 0.0 22 3.0 32 0.8525 13 0.0 23 3.0 33 0.8525 70 1 0 3DFACE 8 iso_unw 10 0.205 20 3.0 30 2.795 11 1.02509652509652 21 3.0 31 2.32009652509652 12 0.8525 22 3.0 32 2.1475 13 0.8525 23 3.0 33 2.1475 70 1 0 3DFACE 8 iso_unw 10 1.02509652509652 20 3.0 30 2.32009652509652 11 0.205 21 3.0 31 2.795 12 1.35681024447031 22 3.0 32 2.795 13 1.35681024447031 23 3.0 33 2.795 70 1 0 3DFACE 8 iso_unw 10 1.06066017177982 20 2.56066017177982 30 3.0 11 1.20163144893051 21 3.0 31 3.0 12 0.878679656440356 22 3.0 32 3.0 13 0.878679656440356 23 3.0 33 3.0 70 1 0 3DFACE 8 iso_unw 10 1.20163144893051 20 3.0 30 3.0 11 1.06066017177982 21 2.56066017177982 31 3.0 12 1.25113397843947 22 2.75113397843947 32 3.0 13 1.25113397843947 23 2.75113397843947 33 3.0 70 1 0 3DFACE 8 iso_unw 10 0.452270081490105 20 3.0 30 1.5 11 0.350582590815627 21 3.0 31 1.35441740918437 12 0.205 22 3.0 32 1.5 13 0.205 23 3.0 33 1.5 70 0 0 3DFACE 8 iso_unw 10 0.205 20 3.0 30 3.0 11 1.35681024447031 21 3.0 31 2.795 12 0.205 22 3.0 32 2.795 13 0.205 23 3.0 33 2.795 70 1 0 3DFACE 8 iso_unw 10 1.35681024447031 20 3.0 30 2.795 11 0.205 21 3.0 31 3.0 12 1.5 22 3.0 32 3.0 13 1.5 23 3.0 33 3.0 70 3 0 3DFACE 8 iso_unw 10 1.5 20 3.0 30 3.0 11 0.205 21 3.0 31 3.0 12 0.497732043121052 22 3.0 32 3.0 13 0.497732043121052 23 3.0 33 3.0 70 13 0 3DFACE 8 iso_unw 10 1.5 20 3.0 30 3.0 11 0.497732043121052 21 3.0 31 3.0 12 0.878679656440356 22 3.0 32 3.0 13 0.878679656440356 23 3.0 33 3.0 70 13 0 3DFACE 8 iso_unw 10 1.5 20 3.0 30 3.0 11 0.878679656440356 21 3.0 31 3.0 12 1.20163144893051 22 3.0 32 3.0 13 1.20163144893051 23 3.0 33 3.0 70 1 0 3DFACE 8 iso_unw 10 0.248866021560526 20 1.74886602156053 30 3.0 11 0.0 21 2.12132034355964 31 3.0 12 0.0 22 1.79836855106949 32 3.0 13 0.0 23 1.79836855106949 33 3.0 70 1 0 3DFACE 8 iso_unw 10 0.0 20 2.12132034355964 30 3.0 11 0.248866021560526 21 1.74886602156053 31 3.0 12 0.439339828220179 22 1.93933982822018 32 3.0 13 0.439339828220179 23 1.93933982822018 33 3.0 70 1 0 3DFACE 8 iso_unw 10 0.0 20 2.795 30 1.14599166666667 11 0.0 21 2.5477299185099 31 1.5 12 0.0 22 2.795 32 1.5 13 0.0 23 2.795 33 1.5 70 0 0 3DFACE 8 iso_unw 10 0.0 20 3.0 30 2.795 11 0.0 21 2.795 31 2.795 12 0.0 22 3.0 32 3.0 13 0.0 23 3.0 33 3.0 70 0 0 3DFACE 8 iso_unw 10 0.0 20 1.79836855106949 30 3.0 11 0.0 21 1.64318975552969 31 2.795 12 0.0 22 1.5 32 3.0 13 0.0 23 1.5 33 3.0 70 1 0 3DFACE 8 iso_unw 10 0.0 20 1.64318975552969 30 2.795 11 0.0 21 1.79836855106949 31 3.0 12 0.0 22 2.795 32 2.795 13 0.0 23 2.795 33 2.795 70 3 0 3DFACE 8 iso_unw 10 0.0 20 2.795 30 2.795 11 0.0 21 1.79836855106949 31 3.0 12 0.0 22 2.12132034355964 32 3.0 13 0.0 23 2.12132034355964 33 3.0 70 13 0 3DFACE 8 iso_unw 10 0.0 20 2.795 30 2.795 11 0.0 21 2.12132034355964 31 3.0 12 0.0 22 2.50226795687895 32 3.0 13 0.0 23 2.50226795687895 33 3.0 70 13 0 3DFACE 8 iso_unw 10 0.0 20 2.795 30 2.795 11 0.0 21 2.50226795687895 31 3.0 12 0.0 22 2.795 32 3.0 13 0.0 23 2.795 33 3.0 70 1 0 3DFACE 8 iso_unw 10 0.205 20 3.0 30 3.0 11 0.205 21 3.0 31 2.795 12 0.0 22 3.0 32 3.0 13 0.0 23 3.0 33 3.0 70 0 0 3DFACE 8 iso_unw 10 1.5 20 3.0 30 3.0 11 1.20163144893051 21 3.0 31 3.0 12 1.25113397843947 22 2.75113397843947 32 3.0 13 1.25113397843947 23 2.75113397843947 33 3.0 70 0 0 3DFACE 8 iso_unw 10 0.0 20 3.0 30 2.795 11 0.205 21 3.0 31 1.5 12 0.0 22 3.0 32 1.5 13 0.0 23 3.0 33 1.5 70 1 0 3DFACE 8 iso_unw 10 0.205 20 3.0 30 1.5 11 0.0 21 3.0 31 2.795 12 0.205 22 3.0 32 2.795 13 0.205 23 3.0 33 2.795 70 1 0 3DFACE 8 iso_unw 10 1.02509652509652 20 3.0 30 2.32009652509652 11 0.883139136394791 21 3.0 31 2.11686086360521 12 0.8525 22 3.0 32 2.1475 13 0.8525 23 3.0 33 2.1475 70 0 0 3DFACE 8 iso_unw 10 0.0 20 3.0 30 0.8525 11 1.35681024447031 21 3.0 31 2.795 12 0.0 22 2.795 32 1.14599166666667 13 0.0 23 2.795 33 1.14599166666667 70 3 0 3DFACE 8 iso_unw 10 1.35681024447031 20 3.0 30 2.795 11 0.0 21 3.0 31 0.8525 12 1.02509652509652 22 3.0 32 2.32009652509652 13 1.02509652509652 23 3.0 33 2.32009652509652 70 3 0 3DFACE 8 iso_unw 10 1.02509652509652 20 3.0 30 2.32009652509652 11 0.0 21 3.0 31 0.8525 12 0.205 22 3.0 32 1.14599166666667 13 0.205 23 3.0 33 1.14599166666667 70 13 0 3DFACE 8 iso_unw 10 1.02509652509652 20 3.0 30 2.32009652509652 11 0.205 21 3.0 31 1.14599166666667 12 0.350582590815627 22 3.0 32 1.35441740918437 13 0.350582590815627 23 3.0 33 1.35441740918437 70 13 0 3DFACE 8 iso_unw 10 1.02509652509652 20 3.0 30 2.32009652509652 11 0.350582590815627 21 3.0 31 1.35441740918437 12 0.452270081490105 22 3.0 32 1.5 13 0.452270081490105 23 3.0 33 1.5 70 13 0 3DFACE 8 iso_unw 10 1.02509652509652 20 3.0 30 2.32009652509652 11 0.452270081490105 21 3.0 31 1.5 12 0.883139136394791 22 3.0 32 2.11686086360521 13 0.883139136394791 23 3.0 33 2.11686086360521 70 1 0 3DFACE 8 iso_unw 10 0.0 20 1.64318975552969 30 2.795 11 0.248866021560526 21 1.74886602156053 31 3.0 12 0.0 22 1.5 32 3.0 13 0.0 23 1.5 33 3.0 70 1 0 3DFACE 8 iso_unw 10 0.248866021560526 20 1.74886602156053 30 3.0 11 0.0 21 1.64318975552969 31 2.795 12 0.0 22 2.11686086360521 32 2.11686086360521 13 0.0 23 2.11686086360521 33 2.11686086360521 70 13 0 3DFACE 8 iso_unw 10 0.248866021560526 20 1.74886602156053 30 3.0 11 0.0 21 2.11686086360521 31 2.11686086360521 12 0.439339828220179 22 1.93933982822018 32 3.0 13 0.439339828220179 23 1.93933982822018 33 3.0 70 3 0 3DFACE 8 iso_unw 10 0.439339828220179 20 1.93933982822018 30 3.0 11 0.0 21 2.11686086360521 31 2.11686086360521 12 0.600815724465256 22 2.10081572446526 32 3.0 13 0.600815724465256 23 2.10081572446526 33 3.0 70 3 0 3DFACE 8 iso_unw 10 0.600815724465256 20 2.10081572446526 30 3.0 11 0.0 21 2.11686086360521 31 2.11686086360521 12 0.75 22 2.25 32 3.0 13 0.75 23 2.25 33 3.0 70 3 0 3DFACE 8 iso_unw 10 0.75 20 2.25 30 3.0 11 0.0 21 2.11686086360521 31 2.11686086360521 12 0.0 22 2.5477299185099 32 1.5 13 0.0 23 2.5477299185099 33 1.5 70 13 0 3DFACE 8 iso_unw 10 0.75 20 2.25 30 3.0 11 0.0 21 2.5477299185099 31 1.5 12 0.899184275534744 22 2.39918427553474 32 3.0 13 0.899184275534744 23 2.39918427553474 33 3.0 70 3 0 3DFACE 8 iso_unw 10 0.899184275534744 20 2.39918427553474 30 3.0 11 0.0 21 2.5477299185099 31 1.5 12 1.06066017177982 22 2.56066017177982 32 3.0 13 1.06066017177982 23 2.56066017177982 33 3.0 70 3 0 3DFACE 8 iso_unw 10 1.06066017177982 20 2.56066017177982 30 3.0 11 0.0 21 2.5477299185099 31 1.5 12 0.0 22 2.795 32 1.14599166666667 13 0.0 23 2.795 33 1.14599166666667 70 13 0 3DFACE 8 iso_unw 10 1.06066017177982 20 2.56066017177982 30 3.0 11 0.0 21 2.795 31 1.14599166666667 12 1.25113397843947 22 2.75113397843947 32 3.0 13 1.25113397843947 23 2.75113397843947 33 3.0 70 3 0 3DFACE 8 iso_unw 10 1.25113397843947 20 2.75113397843947 30 3.0 11 0.0 21 2.795 31 1.14599166666667 12 1.5 22 3.0 32 3.0 13 1.5 23 3.0 33 3.0 70 3 0 3DFACE 8 iso_unw 10 1.5 20 3.0 30 3.0 11 0.0 21 2.795 31 1.14599166666667 12 1.35681024447031 22 3.0 32 2.795 13 1.35681024447031 23 3.0 33 2.795 70 3 0 3DFACE 8 iso_use 10 2.50226795687895 20 0.0 30 3.0 11 2.57375 21 0.426250000000001 31 3.0 12 2.36016784552609 22 0.212667845526093 32 3.0 13 2.36016784552609 23 0.212667845526093 33 3.0 70 1 0 3DFACE 8 iso_use 10 2.57375 20 0.426250000000001 30 3.0 11 2.50226795687895 21 0.0 31 3.0 12 2.795 22 0.0 32 3.0 13 2.795 23 0.0 33 3.0 70 13 0 3DFACE 8 iso_use 10 2.57375 20 0.426250000000001 30 3.0 11 2.795 21 0.0 31 3.0 12 3.0 22 0.0 32 3.0 13 3.0 23 0.0 33 3.0 70 1 0 3DFACE 8 iso_use 10 3.0 20 0.497732043121051 30 3.0 11 2.99999999999999 21 0.852499999999996 31 3.0 12 2.7873321544739 22 0.639832154473909 32 3.0 13 2.7873321544739 23 0.639832154473909 33 3.0 70 0 0 3DFACE 8 iso_use 10 3.0 20 0.0 30 2.795 11 2.795 21 1.79190321753102e-16 31 2.35249999999999 12 2.99999999999999 22 4.71844785465692e-16 32 2.1475 13 2.99999999999999 23 4.71844785465692e-16 33 2.1475 70 1 0 3DFACE 8 iso_use 10 2.795 20 1.79190321753102e-16 30 2.35249999999999 11 3.0 21 0.0 31 2.795 12 2.795 22 0.0 32 2.795 13 2.795 23 0.0 33 2.795 70 1 0 3DFACE 8 iso_use 10 2.795 20 0.0 30 3.0 11 2.3525 21 5.67320709797468e-17 31 2.795 12 2.795 22 0.0 32 2.795 13 2.795 23 0.0 33 2.795 70 1 0 3DFACE 8 iso_use 10 2.3525 20 5.67320709797468e-17 30 2.795 11 2.795 21 0.0 31 3.0 12 2.50226795687895 22 0.0 32 3.0 13 2.50226795687895 23 0.0 33 3.0 70 13 0 3DFACE 8 iso_use 10 2.3525 20 5.67320709797468e-17 30 2.795 11 2.50226795687895 21 0.0 31 3.0 12 2.14749999999999 22 0.0 32 3.0 13 2.14749999999999 23 0.0 33 3.0 70 1 0 3DFACE 8 iso_use 10 3.0 20 0.0 30 3.0 11 2.795 21 0.0 31 2.795 12 3.0 22 0.0 32 2.795 13 3.0 23 0.0 33 2.795 70 0 0 3DFACE 8 iso_use 10 2.795 20 0.0 30 2.795 11 2.57375 21 1.17961196366424e-16 31 2.57375 12 2.795 22 1.79190321753102e-16 32 2.35249999999999 13 2.795 23 1.79190321753102e-16 33 2.35249999999999 70 0 0 3DFACE 8 iso_use 10 2.795 20 0.0 30 3.0 11 2.795 21 0.0 31 2.795 12 3.0 22 0.0 32 3.0 13 3.0 23 0.0 33 3.0 70 0 0 3DFACE 8 iso_use 10 3.0 20 0.205 30 2.795 11 3.0 21 0.0 31 3.0 12 3.0 22 0.0 32 2.795 13 3.0 23 0.0 33 2.795 70 0 0 3DFACE 8 iso_use 10 2.99999999999999 20 4.71844785465692e-16 30 2.1475 11 3.0 21 0.205 31 2.795 12 3.0 22 0.0 32 2.795 13 3.0 23 0.0 33 2.795 70 1 0 3DFACE 8 iso_use 10 3.0 20 0.205 30 2.795 11 2.99999999999999 21 4.71844785465692e-16 31 2.1475 12 3.0 22 0.205 32 2.3525 13 3.0 23 0.205 33 2.3525 70 1 0 3DFACE 8 iso_use 10 3.0 20 0.205 30 3.0 11 3.0 21 0.0 31 3.0 12 3.0 22 0.205 32 2.795 13 3.0 23 0.205 33 2.795 70 0 0 3DFACE 8 iso_use 10 2.99999999999999 20 0.647499999999997 30 2.795 11 3.0 21 0.205 31 3.0 12 3.0 22 0.205 32 2.795 13 3.0 23 0.205 33 2.795 70 1 0 3DFACE 8 iso_use 10 3.0 20 0.205 30 3.0 11 2.99999999999999 21 0.647499999999997 31 2.795 12 3.0 22 0.497732043121051 32 3.0 13 3.0 23 0.497732043121051 33 3.0 70 3 0 3DFACE 8 iso_use 10 3.0 20 0.497732043121051 30 3.0 11 2.99999999999999 21 0.647499999999997 31 2.795 12 2.99999999999999 22 0.852499999999996 32 3.0 13 2.99999999999999 23 0.852499999999996 33 3.0 70 1 0 3DFACE 8 iso_use 10 2.99999999999999 20 0.647499999999997 30 2.795 11 3.0 21 0.205 31 2.795 12 3.0 22 0.426249999999999 32 2.57375 13 3.0 23 0.426249999999999 33 2.57375 70 0 0 3DFACE 8 iso_use 10 2.50226795687895 20 0.0 30 3.0 11 2.36016784552609 21 0.212667845526093 31 3.0 12 2.14749999999999 22 0.0 32 3.0 13 2.14749999999999 23 0.0 33 3.0 70 0 0 3DFACE 8 iso_use 10 3.0 20 0.426249999999999 30 2.57375 11 3.0 21 0.205 31 2.795 12 3.0 22 0.205 32 2.3525 13 3.0 23 0.205 33 2.3525 70 0 0 3DFACE 8 iso_use 10 3.0 20 0.0 30 3.0 11 2.7873321544739 21 0.639832154473909 31 3.0 12 2.57375 22 0.426250000000001 32 3.0 13 2.57375 23 0.426250000000001 33 3.0 70 1 0 3DFACE 8 iso_use 10 2.7873321544739 20 0.639832154473909 30 3.0 11 3.0 21 0.0 31 3.0 12 3.0 22 0.497732043121051 32 3.0 13 3.0 23 0.497732043121051 33 3.0 70 3 0 3DFACE 8 iso_use 10 3.0 20 0.497732043121051 30 3.0 11 3.0 21 0.0 31 3.0 12 3.0 22 0.205 32 3.0 13 3.0 23 0.205 33 3.0 70 1 0 3DFACE 8 iso_use 10 2.3525 20 5.67320709797468e-17 30 2.795 11 2.57375 21 1.17961196366424e-16 31 2.57375 12 2.795 22 0.0 32 2.795 13 2.795 23 0.0 33 2.795 70 0 0 3DFACE 8 iso_use 10 2.795 20 1.79190321753102e-16 30 2.35249999999999 11 3.0 21 0.205 31 2.3525 12 2.99999999999999 22 4.71844785465692e-16 32 2.1475 13 2.99999999999999 23 4.71844785465692e-16 33 2.1475 70 1 0 3DFACE 8 iso_use 10 3.0 20 0.205 30 2.3525 11 2.795 21 1.79190321753102e-16 31 2.35249999999999 12 2.57375 22 1.17961196366424e-16 32 2.57375 13 2.57375 23 1.17961196366424e-16 33 2.57375 70 13 0 3DFACE 8 iso_use 10 3.0 20 0.205 30 2.3525 11 2.57375 21 1.17961196366424e-16 31 2.57375 12 3.0 22 0.426249999999999 32 2.57375 13 3.0 23 0.426249999999999 33 2.57375 70 3 0 3DFACE 8 iso_use 10 3.0 20 0.426249999999999 30 2.57375 11 2.57375 21 1.17961196366424e-16 31 2.57375 12 2.3525 22 5.67320709797468e-17 32 2.795 13 2.3525 23 5.67320709797468e-17 33 2.795 70 13 0 3DFACE 8 iso_use 10 3.0 20 0.426249999999999 30 2.57375 11 2.3525 21 5.67320709797468e-17 31 2.795 12 2.99999999999999 22 0.647499999999997 32 2.795 13 2.99999999999999 23 0.647499999999997 33 2.795 70 3 0 3DFACE 8 iso_use 10 2.99999999999999 20 0.647499999999997 30 2.795 11 2.3525 21 5.67320709797468e-17 31 2.795 12 2.14749999999999 22 0.0 32 3.0 13 2.14749999999999 23 0.0 33 3.0 70 13 0 3DFACE 8 iso_use 10 2.99999999999999 20 0.647499999999997 30 2.795 11 2.14749999999999 21 0.0 31 3.0 12 2.36016784552609 22 0.212667845526093 32 3.0 13 2.36016784552609 23 0.212667845526093 33 3.0 70 13 0 3DFACE 8 iso_use 10 2.36016784552609 20 0.212667845526093 30 3.0 11 2.99999999999999 21 0.852499999999996 31 3.0 12 2.99999999999999 22 0.647499999999997 32 2.795 13 2.99999999999999 23 0.647499999999997 33 2.795 70 13 0 3DFACE 8 iso_use 10 2.99999999999999 20 0.852499999999996 30 3.0 11 2.36016784552609 21 0.212667845526093 31 3.0 12 2.57375 22 0.426250000000001 32 3.0 13 2.57375 23 0.426250000000001 33 3.0 70 13 0 3DFACE 8 iso_use 10 2.99999999999999 20 0.852499999999996 30 3.0 11 2.57375 21 0.426250000000001 31 3.0 12 2.7873321544739 22 0.639832154473909 32 3.0 13 2.7873321544739 23 0.639832154473909 33 3.0 70 1 0 3DFACE 8 iso_usw 10 0.332481491301358 20 1.26776612947518 30 3.0 11 0.0 21 1.5 31 3.0 12 0.0 22 1.20163144893051 32 3.0 13 0.0 23 1.20163144893051 33 3.0 70 0 0 3DFACE 8 iso_usw 10 0.883139136394789 20 0.883139136394789 30 3.0 11 0.0 21 0.205 31 3.0 12 0.0 22 0.0 32 3.0 13 0.0 23 0.0 33 3.0 70 1 0 3DFACE 8 iso_usw 10 0.0 20 0.205 30 3.0 11 0.883139136394789 21 0.883139136394789 31 3.0 12 0.0 22 0.497732043121051 32 3.0 13 0.0 23 0.497732043121051 33 3.0 70 3 0 3DFACE 8 iso_usw 10 0.0 20 0.497732043121051 30 3.0 11 0.883139136394789 21 0.883139136394789 31 3.0 12 0.733367557775275 22 0.987752578969537 32 3.0 13 0.733367557775275 23 0.987752578969537 33 3.0 70 1 0 3DFACE 8 iso_usw 10 1.5 20 5.55111512312578e-17 30 3.0 11 1.31701681130471 21 0.580081389077034 31 3.0 12 1.20163144893051 22 1.11022302462516e-16 32 3.0 13 1.20163144893051 23 1.11022302462516e-16 33 3.0 70 1 0 3DFACE 8 iso_usw 10 1.31701681130471 20 0.580081389077034 30 3.0 11 1.5 21 5.55111512312578e-17 31 3.0 12 1.5 22 0.452270081490099 32 3.0 13 1.5 23 0.452270081490099 33 3.0 70 1 0 3DFACE 8 iso_usw 10 0.878679656440358 20 1.66533453693773e-16 30 3.0 11 1.02269438387197 21 0.78566166435019 31 3.0 12 0.497732043121053 22 0.0 32 3.0 13 0.497732043121053 23 0.0 33 3.0 70 1 0 3DFACE 8 iso_usw 10 1.02269438387197 20 0.78566166435019 30 3.0 11 0.878679656440358 21 1.66533453693773e-16 31 3.0 12 1.16340159356772 22 0.687379562118006 32 3.0 13 1.16340159356772 23 0.687379562118006 33 3.0 70 1 0 3DFACE 8 iso_usw 10 1.5 20 0.0 30 2.795 11 1.64558259081562 21 1.06434958002245e-16 31 2.64941740918438 12 1.85400833333332 22 6.2236879303386e-17 32 2.795 13 1.85400833333332 23 6.2236879303386e-17 33 2.795 70 0 0 3DFACE 8 iso_usw 10 0.0 20 0.205 30 2.795 11 0.0 21 0.0 31 3.0 12 0.0 22 0.205 32 3.0 13 0.0 23 0.205 33 3.0 70 0 0 3DFACE 8 iso_usw 10 0.0 20 0.0 30 3.0 11 0.0 21 0.0 31 2.795 12 0.205 22 0.0 32 2.795 13 0.205 23 0.0 33 2.795 70 0 0 3DFACE 8 iso_usw 10 0.679903474903479 20 3.11213701008545e-16 30 1.97490347490348 11 0.205 21 0.0 31 2.795 12 0.205 22 4.11920172793637e-16 32 1.64318975552968 13 0.205 23 4.11920172793637e-16 33 1.64318975552968 70 1 0 3DFACE 8 iso_usw 10 0.205 20 0.0 30 2.795 11 0.679903474903479 21 3.11213701008545e-16 31 1.97490347490348 12 0.8525 22 0.0 32 2.1475 13 0.8525 23 0.0 33 2.1475 70 1 0 3DFACE 8 iso_usw 10 0.0 20 0.497732043121051 30 3.0 11 0.0 21 0.205 31 2.795 12 0.0 22 0.205 32 3.0 13 0.0 23 0.205 33 3.0 70 1 0 3DFACE 8 iso_usw 10 0.0 20 0.205 30 2.795 11 0.0 21 0.497732043121051 31 3.0 12 0.0 22 1.295 32 2.795 13 0.0 23 1.295 33 2.795 70 3 0 3DFACE 8 iso_usw 10 0.0 20 1.295 30 2.795 11 0.0 21 0.497732043121051 31 3.0 12 0.0 22 0.878679656440357 32 3.0 13 0.0 23 0.878679656440357 33 3.0 70 13 0 3DFACE 8 iso_usw 10 0.0 20 1.295 30 2.795 11 0.0 21 0.878679656440357 31 3.0 12 0.0 22 1.20163144893051 32 3.0 13 0.0 23 1.20163144893051 33 3.0 70 13 0 3DFACE 8 iso_usw 10 0.0 20 1.295 30 2.795 11 0.0 21 1.20163144893051 31 3.0 12 0.0 22 1.5 32 3.0 13 0.0 23 1.5 33 3.0 70 1 0 3DFACE 8 iso_usw 10 0.0 20 0.0 30 3.0 11 0.205 21 0.0 31 2.795 12 0.205 22 0.0 32 3.0 13 0.205 23 0.0 33 3.0 70 0 0 3DFACE 8 iso_usw 10 0.0 20 0.75 30 2.25 11 0.0 21 0.205 31 1.705 12 0.0 22 0.205 32 2.795 13 0.0 23 0.205 33 2.795 70 0 0 3DFACE 8 iso_usw 10 0.0 20 0.205 30 2.795 11 0.0 21 0.0 31 2.795 12 0.0 22 0.0 32 3.0 13 0.0 23 0.0 33 3.0 70 0 0 3DFACE 8 iso_usw 10 0.0 20 0.205 30 2.795 11 0.0 21 0.0 31 1.5 12 0.0 22 0.0 32 2.795 13 0.0 23 0.0 33 2.795 70 1 0 3DFACE 8 iso_usw 10 0.0 20 0.0 30 1.5 11 0.0 21 0.205 31 2.795 12 0.0 22 0.205 32 1.705 13 0.0 23 0.205 33 1.705 70 1 0 3DFACE 8 iso_usw 10 0.0 20 1.295 30 2.795 11 0.0 21 0.75 31 2.25 12 0.0 22 0.205 32 2.795 13 0.0 23 0.205 33 2.795 70 0 0 3DFACE 8 iso_usw 10 0.205 20 0.0 30 2.795 11 0.8525 21 0.0 31 2.1475 12 1.5 22 0.0 32 2.795 13 1.5 23 0.0 33 2.795 70 0 0 3DFACE 8 iso_usw 10 2.14749999999999 20 0.0 30 3.0 11 1.5 21 0.0 31 2.795 12 1.85400833333332 22 6.2236879303386e-17 32 2.795 13 1.85400833333332 23 6.2236879303386e-17 33 2.795 70 1 0 3DFACE 8 iso_usw 10 1.5 20 0.0 30 2.795 11 2.14749999999999 21 0.0 31 3.0 12 2.12132034355964 22 0.0 32 3.0 13 2.12132034355964 23 0.0 33 3.0 70 13 0 3DFACE 8 iso_usw 10 2.12132034355964 20 0.0 30 3.0 11 1.5 21 5.55111512312578e-17 31 3.0 12 1.5 22 0.0 32 2.795 13 1.5 23 0.0 33 2.795 70 13 0 3DFACE 8 iso_usw 10 1.5 20 5.55111512312578e-17 30 3.0 11 2.12132034355964 21 0.0 31 3.0 12 1.79836855106949 22 5.55111512312578e-17 32 3.0 13 1.79836855106949 23 5.55111512312578e-17 33 3.0 70 1 0 3DFACE 8 iso_usw 10 0.205 20 0.0 30 3.0 11 0.883139136394789 21 0.883139136394789 31 3.0 12 0.0 22 0.0 32 3.0 13 0.0 23 0.0 33 3.0 70 1 0 3DFACE 8 iso_usw 10 0.883139136394789 20 0.883139136394789 30 3.0 11 0.205 21 0.0 31 3.0 12 0.497732043121053 22 0.0 32 3.0 13 0.497732043121053 23 0.0 33 3.0 70 13 0 3DFACE 8 iso_usw 10 0.883139136394789 20 0.883139136394789 30 3.0 11 0.497732043121053 21 0.0 31 3.0 12 1.02269438387197 22 0.78566166435019 32 3.0 13 1.02269438387197 23 0.78566166435019 33 3.0 70 1 0 3DFACE 8 iso_usw 10 1.20163144893051 20 1.11022302462516e-16 30 3.0 11 1.16340159356772 21 0.687379562118006 31 3.0 12 0.878679656440358 22 1.66533453693773e-16 32 3.0 13 0.878679656440358 23 1.66533453693773e-16 33 3.0 70 1 0 3DFACE 8 iso_usw 10 1.16340159356772 20 0.687379562118006 30 3.0 11 1.20163144893051 21 1.11022302462516e-16 31 3.0 12 1.31701681130471 22 0.580081389077034 32 3.0 13 1.31701681130471 23 0.580081389077034 33 3.0 70 1 0 3DFACE 8 iso_usw 10 1.79836855106949 20 5.55111512312578e-17 30 3.0 11 1.5 21 0.452270081490099 31 3.0 12 1.5 22 5.55111512312578e-17 32 3.0 13 1.5 23 5.55111512312578e-17 33 3.0 70 1 0 3DFACE 8 iso_usw 10 1.5 20 0.452270081490099 30 3.0 11 1.79836855106949 21 5.55111512312578e-17 31 3.0 12 1.74203407868223 22 0.283212517800531 32 3.0 13 1.74203407868223 23 0.283212517800531 33 3.0 70 1 0 3DFACE 8 iso_usw 10 1.79836855106949 20 5.55111512312578e-17 30 3.0 11 2.1106623891929 21 0.0257305779793383 31 3.0 12 1.74203407868223 22 0.283212517800531 32 3.0 13 1.74203407868223 23 0.283212517800531 33 3.0 70 1 0 3DFACE 8 iso_usw 10 2.1106623891929 20 0.0257305779793383 30 3.0 11 1.79836855106949 21 5.55111512312578e-17 31 3.0 12 2.12132034355964 22 0.0 32 3.0 13 2.12132034355964 23 0.0 33 3.0 70 1 0 3DFACE 8 iso_usw 10 0.733367557775275 20 0.987752578969537 30 3.0 11 0.0 21 0.878679656440357 31 3.0 12 0.0 22 0.497732043121051 32 3.0 13 0.0 23 0.497732043121051 33 3.0 70 1 0 3DFACE 8 iso_usw 10 0.0 20 0.878679656440357 30 3.0 11 0.733367557775275 21 0.987752578969537 31 3.0 12 0.558389724096057 22 1.10997225325071 32 3.0 13 0.558389724096057 23 1.10997225325071 33 3.0 70 1 0 3DFACE 8 iso_usw 10 0.558389724096057 20 1.10997225325071 30 3.0 11 0.0 21 1.20163144893051 31 3.0 12 0.0 22 0.878679656440357 32 3.0 13 0.0 23 0.878679656440357 33 3.0 70 1 0 3DFACE 8 iso_usw 10 0.0 20 1.20163144893051 30 3.0 11 0.558389724096057 21 1.10997225325071 31 3.0 12 0.332481491301358 22 1.26776612947518 32 3.0 13 0.332481491301358 23 1.26776612947518 33 3.0 70 1 0 3DFACE 8 iso_usw 10 0.205 20 4.11920172793637e-16 30 1.64318975552968 11 0.0 21 0.0 31 2.795 12 0.0 22 0.0 32 1.5 13 0.0 23 0.0 33 1.5 70 1 0 3DFACE 8 iso_usw 10 0.0 20 0.0 30 2.795 11 0.205 21 4.11920172793637e-16 31 1.64318975552968 12 0.205 22 0.0 32 2.795 13 0.205 23 0.0 33 2.795 70 1 0 3DFACE 8 iso_usw 10 1.5 20 5.55111512312578e-17 30 3.0 11 0.205 21 0.0 31 2.795 12 1.5 22 0.0 32 2.795 13 1.5 23 0.0 33 2.795 70 1 0 3DFACE 8 iso_usw 10 0.205 20 0.0 30 2.795 11 1.5 21 5.55111512312578e-17 31 3.0 12 0.205 22 0.0 32 3.0 13 0.205 23 0.0 33 3.0 70 3 0 3DFACE 8 iso_usw 10 0.205 20 0.0 30 3.0 11 1.5 21 5.55111512312578e-17 31 3.0 12 1.20163144893051 22 1.11022302462516e-16 32 3.0 13 1.20163144893051 23 1.11022302462516e-16 33 3.0 70 13 0 3DFACE 8 iso_usw 10 0.205 20 0.0 30 3.0 11 1.20163144893051 21 1.11022302462516e-16 31 3.0 12 0.878679656440358 22 1.66533453693773e-16 32 3.0 13 0.878679656440358 23 1.66533453693773e-16 33 3.0 70 13 0 3DFACE 8 iso_usw 10 0.205 20 0.0 30 3.0 11 0.878679656440358 21 1.66533453693773e-16 31 3.0 12 0.497732043121053 22 0.0 32 3.0 13 0.497732043121053 23 0.0 33 3.0 70 1 0 3DFACE 8 iso_usw 10 1.5 20 0.0 30 2.795 11 1.5 21 1.37306724264545e-16 31 2.5477299185099 12 1.64558259081562 22 1.06434958002245e-16 32 2.64941740918438 13 1.64558259081562 23 1.06434958002245e-16 33 2.64941740918438 70 0 0 3DFACE 8 iso_usw 10 1.5 20 1.37306724264545e-16 30 2.5477299185099 11 0.8525 21 0.0 31 2.1475 12 0.88313913639479 22 2.68116213853163e-16 32 2.11686086360521 13 0.88313913639479 23 2.68116213853163e-16 33 2.11686086360521 70 1 0 3DFACE 8 iso_usw 10 0.8525 20 0.0 30 2.1475 11 1.5 21 1.37306724264545e-16 31 2.5477299185099 12 1.5 22 0.0 32 2.795 13 1.5 23 0.0 33 2.795 70 1 0 3DFACE 8 iso_usw 10 0.8525 20 0.0 30 2.1475 11 0.679903474903479 21 3.11213701008545e-16 31 1.97490347490348 12 0.88313913639479 22 2.68116213853163e-16 32 2.11686086360521 13 0.88313913639479 23 2.68116213853163e-16 33 2.11686086360521 70 0 0 3DFACE 8 iso_usw 10 2.14749999999999 20 0.0 30 3.0 11 2.1106623891929 21 0.0257305779793383 31 3.0 12 2.12132034355964 22 0.0 32 3.0 13 2.12132034355964 23 0.0 33 3.0 70 0 0 3DFACE 8 iso_usw 10 0.0 20 0.205 30 1.705 11 0.205 21 4.11920172793637e-16 31 1.64318975552968 12 0.0 22 0.0 32 1.5 13 0.0 23 0.0 33 1.5 70 1 0 3DFACE 8 iso_usw 10 0.205 20 4.11920172793637e-16 30 1.64318975552968 11 0.0 21 0.205 31 1.705 12 0.679903474903479 22 3.11213701008545e-16 32 1.97490347490348 13 0.679903474903479 23 3.11213701008545e-16 33 1.97490347490348 70 3 0 3DFACE 8 iso_usw 10 0.679903474903479 20 3.11213701008545e-16 30 1.97490347490348 11 0.0 21 0.205 31 1.705 12 0.0 22 0.75 32 2.25 13 0.0 23 0.75 33 2.25 70 13 0 3DFACE 8 iso_usw 10 0.679903474903479 20 3.11213701008545e-16 30 1.97490347490348 11 0.0 21 0.75 31 2.25 12 0.88313913639479 22 2.68116213853163e-16 32 2.11686086360521 13 0.88313913639479 23 2.68116213853163e-16 33 2.11686086360521 70 3 0 3DFACE 8 iso_usw 10 0.88313913639479 20 2.68116213853163e-16 30 2.11686086360521 11 0.0 21 0.75 31 2.25 12 1.5 22 1.37306724264545e-16 32 2.5477299185099 13 1.5 23 1.37306724264545e-16 33 2.5477299185099 70 3 0 3DFACE 8 iso_usw 10 1.5 20 1.37306724264545e-16 30 2.5477299185099 11 0.0 21 0.75 31 2.25 12 0.0 22 1.295 32 2.795 13 0.0 23 1.295 33 2.795 70 13 0 3DFACE 8 iso_usw 10 1.5 20 1.37306724264545e-16 30 2.5477299185099 11 0.0 21 1.295 31 2.795 12 1.64558259081562 22 1.06434958002245e-16 32 2.64941740918438 13 1.64558259081562 23 1.06434958002245e-16 33 2.64941740918438 70 3 0 3DFACE 8 iso_usw 10 1.64558259081562 20 1.06434958002245e-16 30 2.64941740918438 11 0.0 21 1.295 31 2.795 12 1.85400833333332 22 6.2236879303386e-17 32 2.795 13 1.85400833333332 23 6.2236879303386e-17 33 2.795 70 3 0 3DFACE 8 iso_usw 10 1.85400833333332 20 6.2236879303386e-17 30 2.795 11 0.0 21 1.295 31 2.795 12 0.0 22 1.5 32 3.0 13 0.0 23 1.5 33 3.0 70 13 0 3DFACE 8 iso_usw 10 1.85400833333332 20 6.2236879303386e-17 30 2.795 11 0.0 21 1.5 31 3.0 12 2.1106623891929 22 0.0257305779793383 32 3.0 13 2.1106623891929 23 0.0257305779793383 33 3.0 70 15 0 3DFACE 8 iso_usw 10 1.85400833333332 20 6.2236879303386e-17 30 2.795 11 2.1106623891929 21 0.0257305779793383 31 3.0 12 2.14749999999999 22 0.0 32 3.0 13 2.14749999999999 23 0.0 33 3.0 70 1 0 3DFACE 8 iso_usw 10 2.1106623891929 20 0.0257305779793383 30 3.0 11 0.0 21 1.5 31 3.0 12 0.332481491301358 22 1.26776612947518 32 3.0 13 0.332481491301358 23 1.26776612947518 33 3.0 70 13 0 3DFACE 8 iso_usw 10 2.1106623891929 20 0.0257305779793383 30 3.0 11 0.332481491301358 21 1.26776612947518 31 3.0 12 0.558389724096057 22 1.10997225325071 32 3.0 13 0.558389724096057 23 1.10997225325071 33 3.0 70 13 0 3DFACE 8 iso_usw 10 2.1106623891929 20 0.0257305779793383 30 3.0 11 0.558389724096057 21 1.10997225325071 31 3.0 12 0.733367557775275 22 0.987752578969537 32 3.0 13 0.733367557775275 23 0.987752578969537 33 3.0 70 13 0 3DFACE 8 iso_usw 10 2.1106623891929 20 0.0257305779793383 30 3.0 11 0.733367557775275 21 0.987752578969537 31 3.0 12 0.883139136394789 22 0.883139136394789 32 3.0 13 0.883139136394789 23 0.883139136394789 33 3.0 70 13 0 3DFACE 8 iso_usw 10 2.1106623891929 20 0.0257305779793383 30 3.0 11 0.883139136394789 21 0.883139136394789 31 3.0 12 1.02269438387197 22 0.78566166435019 32 3.0 13 1.02269438387197 23 0.78566166435019 33 3.0 70 13 0 3DFACE 8 iso_usw 10 2.1106623891929 20 0.0257305779793383 30 3.0 11 1.02269438387197 21 0.78566166435019 31 3.0 12 1.16340159356772 22 0.687379562118006 32 3.0 13 1.16340159356772 23 0.687379562118006 33 3.0 70 13 0 3DFACE 8 iso_usw 10 2.1106623891929 20 0.0257305779793383 30 3.0 11 1.16340159356772 21 0.687379562118006 31 3.0 12 1.31701681130471 22 0.580081389077034 32 3.0 13 1.31701681130471 23 0.580081389077034 33 3.0 70 13 0 3DFACE 8 iso_usw 10 2.1106623891929 20 0.0257305779793383 30 3.0 11 1.31701681130471 21 0.580081389077034 31 3.0 12 1.5 22 0.452270081490099 32 3.0 13 1.5 23 0.452270081490099 33 3.0 70 13 0 3DFACE 8 iso_usw 10 2.1106623891929 20 0.0257305779793383 30 3.0 11 1.5 21 0.452270081490099 31 3.0 12 1.74203407868223 22 0.283212517800531 32 3.0 13 1.74203407868223 23 0.283212517800531 33 3.0 70 1 0 3DFACE 8 iso_dse 10 1.79836855106949 20 5.55111512312578e-17 30 0.0 11 1.5 21 5.55111512312578e-17 31 0.0 12 1.74886602156053 22 0.248866021560525 32 -1.29693882069326e-16 13 1.74886602156053 23 0.248866021560525 33 -1.29693882069326e-16 70 0 0 3DFACE 8 iso_dse 10 2.10081572446526 20 0.600815724465256 30 -7.75948602460171e-17 11 2.12132034355964 21 0.0 31 0.0 12 1.93933982822018 22 0.439339828220178 32 -1.0149809463712e-16 13 1.93933982822018 23 0.439339828220178 33 -1.0149809463712e-16 70 1 0 3DFACE 8 iso_dse 10 2.12132034355964 20 0.0 30 0.0 11 2.10081572446526 21 0.600815724465256 31 -7.75948602460171e-17 12 2.50226795687895 22 0.0 32 0.0 13 2.50226795687895 23 0.0 33 0.0 70 1 0 3DFACE 8 iso_dse 10 1.93933982822018 20 0.439339828220178 30 -1.0149809463712e-16 11 1.79836855106949 21 5.55111512312578e-17 31 0.0 12 1.74886602156053 22 0.248866021560525 32 -1.29693882069326e-16 13 1.74886602156053 23 0.248866021560525 33 -1.29693882069326e-16 70 1 0 3DFACE 8 iso_dse 10 1.79836855106949 20 5.55111512312578e-17 30 0.0 11 1.93933982822018 21 0.439339828220178 31 -1.0149809463712e-16 12 2.12132034355964 22 0.0 32 0.0 13 2.12132034355964 23 0.0 33 0.0 70 1 0 3DFACE 8 iso_dse 10 2.64941740918437 20 1.80782203615711e-16 30 1.64558259081563 11 2.54772991850989 21 1.64788632875096e-16 31 1.5 12 2.795 22 0.0 32 1.5 13 2.795 23 0.0 33 1.5 70 0 0 3DFACE 8 iso_dse 10 2.1475 20 0.0 30 0.8525 11 1.64318975552969 21 2.25211131595965e-17 31 0.205 12 2.795 22 0.0 32 0.205 13 2.795 23 0.0 33 0.205 70 1 0 3DFACE 8 iso_dse 10 1.64318975552969 20 2.25211131595965e-17 30 0.205 11 2.1475 21 0.0 31 0.8525 12 1.97490347490348 22 7.46935760775808e-17 32 0.679903474903477 13 1.97490347490348 23 7.46935760775808e-17 33 0.679903474903477 70 1 0 3DFACE 8 iso_dse 10 2.795 20 0.0 30 1.5 11 2.11686086360521 21 9.70208606166603e-17 31 0.883139136394791 12 2.1475 22 0.0 32 0.8525 13 2.1475 23 0.0 33 0.8525 70 1 0 3DFACE 8 iso_dse 10 2.11686086360521 20 9.70208606166603e-17 30 0.883139136394791 11 2.795 21 0.0 31 1.5 12 2.54772991850989 22 1.64788632875096e-16 32 1.5 13 2.54772991850989 23 1.64788632875096e-16 33 1.5 70 1 0 3DFACE 8 iso_dse 10 2.795 20 0.0 30 0.205 11 2.50226795687895 21 0.0 31 0.0 12 2.795 22 0.0 32 0.0 13 2.795 23 0.0 33 0.0 70 1 0 3DFACE 8 iso_dse 10 2.50226795687895 20 0.0 30 0.0 11 2.795 21 0.0 31 0.205 12 2.12132034355964 22 0.0 32 0.0 13 2.12132034355964 23 0.0 33 0.0 70 3 0 3DFACE 8 iso_dse 10 2.12132034355964 20 0.0 30 0.0 11 2.795 21 0.0 31 0.205 12 1.79836855106949 22 5.55111512312578e-17 32 0.0 13 1.79836855106949 23 5.55111512312578e-17 33 0.0 70 3 0 3DFACE 8 iso_dse 10 1.79836855106949 20 5.55111512312578e-17 30 0.0 11 2.795 21 0.0 31 0.205 12 1.5 22 5.55111512312578e-17 32 0.0 13 1.5 23 5.55111512312578e-17 33 0.0 70 3 0 3DFACE 8 iso_dse 10 1.5 20 5.55111512312578e-17 30 0.0 11 2.795 21 0.0 31 0.205 12 1.64318975552969 22 2.25211131595965e-17 32 0.205 13 1.64318975552969 23 2.25211131595965e-17 33 0.205 70 1 0 3DFACE 8 iso_dse 10 3.0 20 0.0 30 1.5 11 2.795 21 0.0 31 0.205 12 3.0 22 0.0 32 0.205 13 3.0 23 0.0 33 0.205 70 1 0 3DFACE 8 iso_dse 10 2.795 20 0.0 30 0.205 11 3.0 21 0.0 31 1.5 12 2.795 22 0.0 32 1.5 13 2.795 23 0.0 33 1.5 70 1 0 3DFACE 8 iso_dse 10 3.0 20 0.883139136394791 30 0.883139136394791 11 3.0 21 0.205 31 1.5 12 3.0 22 0.205 32 0.205 13 3.0 23 0.205 33 0.205 70 1 0 3DFACE 8 iso_dse 10 3.0 20 0.205 30 1.5 11 3.0 21 0.883139136394791 31 0.883139136394791 12 3.0 22 0.452270081490106 32 1.5 13 3.0 23 0.452270081490106 33 1.5 70 1 0 3DFACE 8 iso_dse 10 2.795 20 0.0 30 0.205 11 3.0 21 0.0 31 0.0 12 3.0 22 0.0 32 0.205 13 3.0 23 0.0 33 0.205 70 0 0 3DFACE 8 iso_dse 10 2.56066017177982 20 1.06066017177982 30 -9.52420782539579e-18 11 3.0 21 0.497732043121051 31 0.0 12 2.39918427553474 22 0.899184275534743 32 -3.34274422164983e-17 13 2.39918427553474 23 0.899184275534743 33 -3.34274422164983e-17 70 1 0 3DFACE 8 iso_dse 10 3.0 20 0.497732043121051 30 0.0 11 2.56066017177982 21 1.06066017177982 31 -9.52420782539579e-18 12 3.0 22 0.878679656440357 32 0.0 13 3.0 23 0.878679656440357 33 0.0 70 1 0 3DFACE 8 iso_dse 10 2.25 20 0.75 30 -5.55111512312576e-17 11 2.50226795687895 21 0.0 31 0.0 12 2.10081572446526 22 0.600815724465256 32 -7.75948602460171e-17 13 2.10081572446526 23 0.600815724465256 33 -7.75948602460171e-17 70 1 0 3DFACE 8 iso_dse 10 2.50226795687895 20 0.0 30 0.0 11 2.25 21 0.75 31 -5.55111512312576e-17 12 3.0 22 0.0 32 0.0 13 3.0 23 0.0 33 0.0 70 13 0 3DFACE 8 iso_dse 10 2.50226795687895 20 0.0 30 0.0 11 3.0 21 0.0 31 0.0 12 2.795 22 0.0 32 0.0 13 2.795 23 0.0 33 0.0 70 1 0 3DFACE 8 iso_dse 10 3.0 20 1.20163144893051 30 0.0 11 2.75113397843947 21 1.25113397843947 31 1.86715796068105e-17 12 3.0 22 1.5 32 0.0 13 3.0 23 1.5 33 0.0 70 0 0 3DFACE 8 iso_dse 10 2.39918427553474 20 0.899184275534743 30 -3.34274422164983e-17 11 3.0 21 0.0 31 0.0 12 2.25 22 0.75 32 -5.55111512312576e-17 13 2.25 23 0.75 33 -5.55111512312576e-17 70 1 0 3DFACE 8 iso_dse 10 3.0 20 0.0 30 0.0 11 2.39918427553474 21 0.899184275534743 31 -3.34274422164983e-17 12 3.0 22 0.497732043121051 32 0.0 13 3.0 23 0.497732043121051 33 0.0 70 13 0 3DFACE 8 iso_dse 10 3.0 20 0.0 30 0.0 11 3.0 21 0.497732043121051 31 0.0 12 3.0 22 0.205 32 0.0 13 3.0 23 0.205 33 0.0 70 1 0 3DFACE 8 iso_dse 10 2.75113397843947 20 1.25113397843947 30 1.86715796068105e-17 11 3.0 21 0.878679656440357 31 0.0 12 2.56066017177982 22 1.06066017177982 32 -9.52420782539579e-18 13 2.56066017177982 23 1.06066017177982 33 -9.52420782539579e-18 70 1 0 3DFACE 8 iso_dse 10 3.0 20 0.878679656440357 30 0.0 11 2.75113397843947 21 1.25113397843947 31 1.86715796068105e-17 12 3.0 22 1.20163144893051 32 0.0 13 3.0 23 1.20163144893051 33 0.0 70 1 0 3DFACE 8 iso_dse 10 1.97490347490348 20 7.46935760775808e-17 30 0.679903474903477 11 1.5 21 5.55111512312578e-17 31 0.0 12 1.64318975552969 22 2.25211131595965e-17 32 0.205 13 1.64318975552969 23 2.25211131595965e-17 33 0.205 70 1 0 3DFACE 8 iso_dse 10 1.5 20 5.55111512312578e-17 30 0.0 11 1.97490347490348 21 7.46935760775808e-17 31 0.679903474903477 12 1.74886602156053 22 0.248866021560525 32 -1.29693882069326e-16 13 1.74886602156053 23 0.248866021560525 33 -1.29693882069326e-16 70 3 0 3DFACE 8 iso_dse 10 1.74886602156053 20 0.248866021560525 30 -1.29693882069326e-16 11 1.97490347490348 21 7.46935760775808e-17 31 0.679903474903477 12 2.11686086360521 22 9.70208606166603e-17 32 0.883139136394791 13 2.11686086360521 23 9.70208606166603e-17 33 0.883139136394791 70 13 0 3DFACE 8 iso_dse 10 1.74886602156053 20 0.248866021560525 30 -1.29693882069326e-16 11 2.11686086360521 21 9.70208606166603e-17 31 0.883139136394791 12 2.54772991850989 22 1.64788632875096e-16 32 1.5 13 2.54772991850989 23 1.64788632875096e-16 33 1.5 70 13 0 3DFACE 8 iso_dse 10 1.74886602156053 20 0.248866021560525 30 -1.29693882069326e-16 11 2.54772991850989 21 1.64788632875096e-16 31 1.5 12 2.64941740918437 22 1.80782203615711e-16 32 1.64558259081563 13 2.64941740918437 23 1.80782203615711e-16 33 1.64558259081563 70 13 0 3DFACE 8 iso_dse 10 1.74886602156053 20 0.248866021560525 30 -1.29693882069326e-16 11 2.64941740918437 21 1.80782203615711e-16 31 1.64558259081563 12 2.795 22 2.03679665726025e-16 32 1.85400833333335 13 2.795 23 2.03679665726025e-16 33 1.85400833333335 70 13 0 3DFACE 8 iso_dse 10 1.74886602156053 20 0.248866021560525 30 -1.29693882069326e-16 11 2.795 21 2.03679665726025e-16 31 1.85400833333335 12 2.99999999999999 22 4.71844785465692e-16 32 2.1475 13 2.99999999999999 23 4.71844785465692e-16 33 2.1475 70 13 0 3DFACE 8 iso_dse 10 1.74886602156053 20 0.248866021560525 30 -1.29693882069326e-16 11 2.99999999999999 21 4.71844785465692e-16 31 2.1475 12 3.0 22 0.205 32 1.85400833333334 13 3.0 23 0.205 33 1.85400833333334 70 13 0 3DFACE 8 iso_dse 10 1.74886602156053 20 0.248866021560525 30 -1.29693882069326e-16 11 3.0 21 0.205 31 1.85400833333334 12 3.0 22 0.452270081490106 32 1.5 13 3.0 23 0.452270081490106 33 1.5 70 13 0 3DFACE 8 iso_dse 10 1.74886602156053 20 0.248866021560525 30 -1.29693882069326e-16 11 3.0 21 0.452270081490106 31 1.5 12 1.93933982822018 22 0.439339828220178 32 -1.0149809463712e-16 13 1.93933982822018 23 0.439339828220178 33 -1.0149809463712e-16 70 3 0 3DFACE 8 iso_dse 10 1.93933982822018 20 0.439339828220178 30 -1.0149809463712e-16 11 3.0 21 0.452270081490106 31 1.5 12 2.10081572446526 22 0.600815724465256 32 -7.75948602460171e-17 13 2.10081572446526 23 0.600815724465256 33 -7.75948602460171e-17 70 3 0 3DFACE 8 iso_dse 10 2.10081572446526 20 0.600815724465256 30 -7.75948602460171e-17 11 3.0 21 0.452270081490106 31 1.5 12 3.0 22 0.883139136394791 32 0.883139136394791 13 3.0 23 0.883139136394791 33 0.883139136394791 70 13 0 3DFACE 8 iso_dse 10 2.10081572446526 20 0.600815724465256 30 -7.75948602460171e-17 11 3.0 21 0.883139136394791 31 0.883139136394791 12 2.25 22 0.75 32 -5.55111512312576e-17 13 2.25 23 0.75 33 -5.55111512312576e-17 70 3 0 3DFACE 8 iso_dse 10 2.25 20 0.75 30 -5.55111512312576e-17 11 3.0 21 0.883139136394791 31 0.883139136394791 12 2.39918427553474 22 0.899184275534743 32 -3.34274422164983e-17 13 2.39918427553474 23 0.899184275534743 33 -3.34274422164983e-17 70 3 0 3DFACE 8 iso_dse 10 2.39918427553474 20 0.899184275534743 30 -3.34274422164983e-17 11 3.0 21 0.883139136394791 31 0.883139136394791 12 3.0 22 1.35681024447031 32 0.205 13 3.0 23 1.35681024447031 33 0.205 70 13 0 3DFACE 8 iso_dse 10 2.39918427553474 20 0.899184275534743 30 -3.34274422164983e-17 11 3.0 21 1.35681024447031 31 0.205 12 2.56066017177982 22 1.06066017177982 32 -9.52420782539579e-18 13 2.56066017177982 23 1.06066017177982 33 -9.52420782539579e-18 70 3 0 3DFACE 8 iso_dse 10 2.56066017177982 20 1.06066017177982 30 -9.52420782539579e-18 11 3.0 21 1.35681024447031 31 0.205 12 2.75113397843947 22 1.25113397843947 32 1.86715796068105e-17 13 2.75113397843947 23 1.25113397843947 33 1.86715796068105e-17 70 3 0 3DFACE 8 iso_dse 10 2.75113397843947 20 1.25113397843947 30 1.86715796068105e-17 11 3.0 21 1.35681024447031 31 0.205 12 3.0 22 1.5 32 0.0 13 3.0 23 1.5 33 0.0 70 1 0 3DFACE 8 iso_dse 10 3.0 20 0.205 30 0.205 11 3.0 21 0.0 31 0.205 12 3.0 22 0.0 32 0.0 13 3.0 23 0.0 33 0.0 70 0 0 3DFACE 8 iso_dse 10 3.0 20 0.452270081490106 30 1.5 11 3.0 21 0.205 31 1.85400833333334 12 3.0 22 0.205 32 1.5 13 3.0 23 0.205 33 1.5 70 0 0 3DFACE 8 iso_dse 10 2.795 20 0.0 30 0.205 11 2.795 21 0.0 31 0.0 12 3.0 22 0.0 32 0.0 13 3.0 23 0.0 33 0.0 70 0 0 3DFACE 8 iso_dse 10 3.0 20 0.205 30 0.205 11 3.0 21 0.0 31 1.5 12 3.0 22 0.0 32 0.205 13 3.0 23 0.0 33 0.205 70 1 0 3DFACE 8 iso_dse 10 3.0 20 0.0 30 1.5 11 3.0 21 0.205 31 0.205 12 3.0 22 0.205 32 1.5 13 3.0 23 0.205 33 1.5 70 1 0 3DFACE 8 iso_dse 10 2.795 20 2.03679665726025e-16 30 1.85400833333335 11 2.64941740918437 21 1.80782203615711e-16 31 1.64558259081563 12 2.795 22 0.0 32 1.5 13 2.795 23 0.0 33 1.5 70 0 0 3DFACE 8 iso_dse 10 2.795 20 0.0 30 1.5 11 2.1475 21 0.0 31 0.8525 12 2.795 22 0.0 32 0.205 13 2.795 23 0.0 33 0.205 70 0 0 3DFACE 8 iso_dse 10 3.0 20 1.35681024447031 30 0.205 11 3.0 21 0.883139136394791 31 0.883139136394791 12 3.0 22 0.205 32 0.205 13 3.0 23 0.205 33 0.205 70 0 0 3DFACE 8 iso_dse 10 3.0 20 0.497732043121051 30 0.0 11 3.0 21 0.205 31 0.205 12 3.0 22 0.205 32 0.0 13 3.0 23 0.205 33 0.0 70 1 0 3DFACE 8 iso_dse 10 3.0 20 0.205 30 0.205 11 3.0 21 0.497732043121051 31 0.0 12 3.0 22 1.35681024447031 32 0.205 13 3.0 23 1.35681024447031 33 0.205 70 3 0 3DFACE 8 iso_dse 10 3.0 20 1.35681024447031 30 0.205 11 3.0 21 0.497732043121051 31 0.0 12 3.0 22 0.878679656440357 32 0.0 13 3.0 23 0.878679656440357 33 0.0 70 13 0 3DFACE 8 iso_dse 10 3.0 20 1.35681024447031 30 0.205 11 3.0 21 0.878679656440357 31 0.0 12 3.0 22 1.20163144893051 32 0.0 13 3.0 23 1.20163144893051 33 0.0 70 13 0 3DFACE 8 iso_dse 10 3.0 20 1.35681024447031 30 0.205 11 3.0 21 1.20163144893051 31 0.0 12 3.0 22 1.5 32 0.0 13 3.0 23 1.5 33 0.0 70 1 0 3DFACE 8 iso_dse 10 3.0 20 0.205 30 1.5 11 2.99999999999999 21 4.71844785465692e-16 31 2.1475 12 3.0 22 0.0 32 1.5 13 3.0 23 0.0 33 1.5 70 1 0 3DFACE 8 iso_dse 10 2.99999999999999 20 4.71844785465692e-16 30 2.1475 11 3.0 21 0.205 31 1.5 12 3.0 22 0.205 32 1.85400833333334 13 3.0 23 0.205 33 1.85400833333334 70 1 0 3DFACE 8 iso_dse 10 3.0 20 0.205 30 0.205 11 3.0 21 0.0 31 0.0 12 3.0 22 0.205 32 0.0 13 3.0 23 0.205 33 0.0 70 0 0 3DFACE 8 iso_dse 10 2.99999999999999 20 4.71844785465692e-16 30 2.1475 11 2.795 21 0.0 31 1.5 12 3.0 22 0.0 32 1.5 13 3.0 23 0.0 33 1.5 70 1 0 3DFACE 8 iso_dse 10 2.795 20 0.0 30 1.5 11 2.99999999999999 21 4.71844785465692e-16 31 2.1475 12 2.795 22 2.03679665726025e-16 32 1.85400833333335 13 2.795 23 2.03679665726025e-16 33 1.85400833333335 70 1 0 3DFACE 8 iso_dse 10 2.11686086360521 20 9.70208606166603e-17 30 0.883139136394791 11 1.97490347490348 21 7.46935760775808e-17 31 0.679903474903477 12 2.1475 22 0.0 32 0.8525 13 2.1475 23 0.0 33 0.8525 70 0 0 3DFACE 8 iso_une 10 2.41991861092296 20 1.68298318869529 30 3.0 11 3.0 21 2.12132034355964 31 3.0 12 2.31262043788199 22 1.83659840643228 32 3.0 13 2.31262043788199 23 1.83659840643228 33 3.0 70 1 0 3DFACE 8 iso_une 10 3.0 20 2.12132034355964 30 3.0 11 2.41991861092296 21 1.68298318869529 31 3.0 12 3.0 22 1.79836855106949 32 3.0 13 3.0 23 1.79836855106949 33 3.0 70 1 0 3DFACE 8 iso_une 10 2.54772991850989 20 1.5 30 3.0 11 3.0 21 1.79836855106949 31 3.0 12 2.41991861092296 22 1.68298318869529 32 3.0 13 2.41991861092296 23 1.68298318869529 33 3.0 70 1 0 3DFACE 8 iso_une 10 3.0 20 1.79836855106949 30 3.0 11 2.54772991850989 21 1.5 31 3.0 12 3.0 22 1.5 32 3.0 13 3.0 23 1.5 33 3.0 70 1 0 3DFACE 8 iso_une 10 2.97426942202063 20 0.889337610807109 30 3.0 11 3.0 21 1.20163144893051 31 3.0 12 2.71678748219945 22 1.25796592131777 32 3.0 13 2.71678748219945 23 1.25796592131777 33 3.0 70 1 0 3DFACE 8 iso_une 10 3.0 20 1.20163144893051 30 3.0 11 2.97426942202063 21 0.889337610807109 31 3.0 12 3.0 22 0.878679656440357 32 3.0 13 3.0 23 0.878679656440357 33 3.0 70 1 0 3DFACE 8 iso_une 10 2.71678748219945 20 1.25796592131777 30 3.0 11 3.0 21 1.5 31 3.0 12 2.54772991850989 22 1.5 32 3.0 13 2.54772991850989 23 1.5 33 3.0 70 1 0 3DFACE 8 iso_une 10 3.0 20 1.5 30 3.0 11 2.71678748219945 21 1.25796592131777 31 3.0 12 3.0 22 1.20163144893051 32 3.0 13 3.0 23 1.20163144893051 33 3.0 70 1 0 3DFACE 8 iso_une 10 1.5 20 3.0 30 3.0 11 2.795 21 3.0 31 2.795 12 1.705 22 3.0 32 2.795 13 1.705 23 3.0 33 2.795 70 1 0 3DFACE 8 iso_une 10 2.795 20 3.0 30 2.795 11 1.5 21 3.0 31 3.0 12 2.795 22 3.0 32 3.0 13 2.795 23 3.0 33 3.0 70 3 0 3DFACE 8 iso_une 10 2.795 20 3.0 30 3.0 11 1.5 21 3.0 31 3.0 12 1.79836855106949 22 3.0 32 3.0 13 1.79836855106949 23 3.0 33 3.0 70 13 0 3DFACE 8 iso_une 10 2.795 20 3.0 30 3.0 11 1.79836855106949 21 3.0 31 3.0 12 2.12132034355964 22 3.0 32 3.0 13 2.12132034355964 23 3.0 33 3.0 70 13 0 3DFACE 8 iso_une 10 2.795 20 3.0 30 3.0 11 2.12132034355964 21 3.0 31 3.0 12 2.50226795687895 22 3.0 32 3.0 13 2.50226795687895 23 3.0 33 3.0 70 1 0 3DFACE 8 iso_une 10 3.0 20 3.0 30 3.0 11 2.795 21 3.0 31 2.795 12 2.795 22 3.0 32 3.0 13 2.795 23 3.0 33 3.0 70 0 0 3DFACE 8 iso_une 10 3.0 20 1.14599166666666 30 2.795 11 3.0 21 0.878679656440357 31 3.0 12 2.99999999999999 22 0.852499999999996 32 3.0 13 2.99999999999999 23 0.852499999999996 33 3.0 70 1 0 3DFACE 8 iso_une 10 3.0 20 0.878679656440357 30 3.0 11 3.0 21 1.14599166666666 31 2.795 12 3.0 22 1.20163144893051 32 3.0 13 3.0 23 1.20163144893051 33 3.0 70 3 0 3DFACE 8 iso_une 10 3.0 20 1.20163144893051 30 3.0 11 3.0 21 1.14599166666666 31 2.795 12 3.0 22 1.5 32 2.795 13 3.0 23 1.5 33 2.795 70 13 0 3DFACE 8 iso_une 10 3.0 20 1.20163144893051 30 3.0 11 3.0 21 1.5 31 2.795 12 3.0 22 1.5 32 3.0 13 3.0 23 1.5 33 3.0 70 1 0 3DFACE 8 iso_une 10 3.0 20 3.0 30 3.0 11 3.0 21 2.795 31 2.795 12 3.0 22 3.0 32 2.795 13 3.0 23 3.0 33 2.795 70 0 0 3DFACE 8 iso_une 10 3.0 20 2.795 30 2.795 11 3.0 21 1.5 31 3.0 12 3.0 22 1.5 32 2.795 13 3.0 23 1.5 33 2.795 70 1 0 3DFACE 8 iso_une 10 3.0 20 1.5 30 3.0 11 3.0 21 2.795 31 2.795 12 3.0 22 1.79836855106949 32 3.0 13 3.0 23 1.79836855106949 33 3.0 70 3 0 3DFACE 8 iso_une 10 3.0 20 1.79836855106949 30 3.0 11 3.0 21 2.795 31 2.795 12 3.0 22 2.12132034355964 32 3.0 13 3.0 23 2.12132034355964 33 3.0 70 3 0 3DFACE 8 iso_une 10 3.0 20 2.12132034355964 30 3.0 11 3.0 21 2.795 31 2.795 12 3.0 22 2.50226795687895 32 3.0 13 3.0 23 2.50226795687895 33 3.0 70 3 0 3DFACE 8 iso_une 10 3.0 20 2.50226795687895 30 3.0 11 3.0 21 2.795 31 2.795 12 3.0 22 2.795 32 3.0 13 3.0 23 2.795 33 3.0 70 1 0 3DFACE 8 iso_une 10 2.795 20 3.0 30 2.795 11 2.25 21 3.0 31 2.25 12 1.705 22 3.0 32 2.795 13 1.705 23 3.0 33 2.795 70 0 0 3DFACE 8 iso_une 10 2.795 20 3.0 30 1.705 11 3.0 21 3.0 31 2.795 12 3.0 22 3.0 32 1.5 13 3.0 23 3.0 33 1.5 70 1 0 3DFACE 8 iso_une 10 3.0 20 3.0 30 2.795 11 2.795 21 3.0 31 1.705 12 2.795 22 3.0 32 2.795 13 2.795 23 3.0 33 2.795 70 1 0 3DFACE 8 iso_une 10 3.0 20 2.11686086360521 30 2.11686086360521 11 3.0 21 1.5 31 2.795 12 3.0 22 1.5 32 2.54772991850989 13 3.0 23 1.5 33 2.54772991850989 70 1 0 3DFACE 8 iso_une 10 3.0 20 1.5 30 2.795 11 3.0 21 2.11686086360521 31 2.11686086360521 12 3.0 22 2.795 32 2.795 13 3.0 23 2.795 33 2.795 70 1 0 3DFACE 8 iso_une 10 3.0 20 3.0 30 1.5 11 3.0 21 2.795 31 2.795 12 3.0 22 2.795 32 1.64318975552969 13 3.0 23 2.795 33 1.64318975552969 70 1 0 3DFACE 8 iso_une 10 3.0 20 2.795 30 2.795 11 3.0 21 3.0 31 1.5 12 3.0 22 3.0 32 2.795 13 3.0 23 3.0 33 2.795 70 1 0 3DFACE 8 iso_une 10 3.0 20 3.0 30 3.0 11 3.0 21 3.0 31 2.795 12 2.795 22 3.0 32 2.795 13 2.795 23 3.0 33 2.795 70 0 0 3DFACE 8 iso_une 10 2.795 20 3.0 30 2.795 11 2.795 21 3.0 31 1.705 12 2.25 22 3.0 32 2.25 13 2.25 23 3.0 33 2.25 70 0 0 3DFACE 8 iso_une 10 3.0 20 2.795 30 2.795 11 3.0 21 2.11686086360521 31 2.11686086360521 12 3.0 22 2.795 32 1.64318975552969 13 3.0 23 2.795 33 1.64318975552969 70 0 0 3DFACE 8 iso_une 10 2.31262043788199 20 1.83659840643228 30 3.0 11 3.0 21 2.50226795687895 31 3.0 12 2.2143383356498 22 1.97730561612803 32 3.0 13 2.2143383356498 23 1.97730561612803 33 3.0 70 1 0 3DFACE 8 iso_une 10 3.0 20 2.50226795687895 30 3.0 11 2.31262043788199 21 1.83659840643228 31 3.0 12 3.0 22 2.12132034355964 32 3.0 13 3.0 23 2.12132034355964 33 3.0 70 1 0 3DFACE 8 iso_une 10 2.01224742103046 20 2.26663244222472 30 3.0 11 2.12132034355964 21 3.0 31 3.0 12 1.89002774674928 22 2.44161027590394 32 3.0 13 1.89002774674928 23 2.44161027590394 33 3.0 70 1 0 3DFACE 8 iso_une 10 2.12132034355964 20 3.0 30 3.0 11 2.01224742103046 21 2.26663244222472 31 3.0 12 2.50226795687895 22 3.0 32 3.0 13 2.50226795687895 23 3.0 33 3.0 70 1 0 3DFACE 8 iso_une 10 1.89002774674928 20 2.44161027590394 30 3.0 11 1.79836855106949 21 3.0 31 3.0 12 1.73223387052482 22 2.66751850869864 32 3.0 13 1.73223387052482 23 2.66751850869864 33 3.0 70 1 0 3DFACE 8 iso_une 10 1.79836855106949 20 3.0 30 3.0 11 1.89002774674928 21 2.44161027590394 31 3.0 12 2.12132034355964 22 3.0 32 3.0 13 2.12132034355964 23 3.0 33 3.0 70 1 0 3DFACE 8 iso_une 10 2.11686086360521 20 2.11686086360521 30 3.0 11 2.50226795687895 21 3.0 31 3.0 12 2.01224742103046 22 2.26663244222472 32 3.0 13 2.01224742103046 23 2.26663244222472 33 3.0 70 1 0 3DFACE 8 iso_une 10 2.50226795687895 20 3.0 30 3.0 11 2.11686086360521 21 2.11686086360521 31 3.0 12 3.0 22 3.0 32 3.0 13 3.0 23 3.0 33 3.0 70 13 0 3DFACE 8 iso_une 10 2.50226795687895 20 3.0 30 3.0 11 3.0 21 3.0 31 3.0 12 2.795 22 3.0 32 3.0 13 2.795 23 3.0 33 3.0 70 1 0 3DFACE 8 iso_une 10 2.2143383356498 20 1.97730561612803 30 3.0 11 3.0 21 3.0 31 3.0 12 2.11686086360521 22 2.11686086360521 32 3.0 13 2.11686086360521 23 2.11686086360521 33 3.0 70 1 0 3DFACE 8 iso_une 10 3.0 20 3.0 30 3.0 11 2.2143383356498 21 1.97730561612803 31 3.0 12 3.0 22 2.50226795687895 32 3.0 13 3.0 23 2.50226795687895 33 3.0 70 13 0 3DFACE 8 iso_une 10 3.0 20 3.0 30 3.0 11 3.0 21 2.50226795687895 31 3.0 12 3.0 22 2.795 32 3.0 13 3.0 23 2.795 33 3.0 70 1 0 3DFACE 8 iso_une 10 3.0 20 1.5 30 2.795 11 3.0 21 1.14599166666666 31 2.795 12 3.0 22 1.5 32 2.54772991850989 13 3.0 23 1.5 33 2.54772991850989 70 0 0 3DFACE 8 iso_une 10 1.79836855106949 20 3.0 30 3.0 11 1.5 21 3.0 31 3.0 12 1.73223387052482 22 2.66751850869864 32 3.0 13 1.73223387052482 23 2.66751850869864 33 3.0 70 0 0 3DFACE 8 iso_une 10 3.0 20 3.0 30 3.0 11 3.0 21 2.795 31 3.0 12 3.0 22 2.795 32 2.795 13 3.0 23 2.795 33 2.795 70 0 0 3DFACE 8 iso_une 10 3.0 20 0.878679656440357 30 3.0 11 2.97426942202063 21 0.889337610807109 31 3.0 12 2.99999999999999 22 0.852499999999996 32 3.0 13 2.99999999999999 23 0.852499999999996 33 3.0 70 0 0 3DFACE 8 iso_une 10 2.97426942202063 20 0.889337610807109 30 3.0 11 3.0 21 1.14599166666666 31 2.795 12 2.99999999999999 22 0.852499999999996 32 3.0 13 2.99999999999999 23 0.852499999999996 33 3.0 70 1 0 3DFACE 8 iso_une 10 3.0 20 1.14599166666666 30 2.795 11 2.97426942202063 21 0.889337610807109 31 3.0 12 2.71678748219945 22 1.25796592131777 32 3.0 13 2.71678748219945 23 1.25796592131777 33 3.0 70 13 0 3DFACE 8 iso_une 10 3.0 20 1.14599166666666 30 2.795 11 2.71678748219945 21 1.25796592131777 31 3.0 12 3.0 22 1.5 32 2.54772991850989 13 3.0 23 1.5 33 2.54772991850989 70 3 0 3DFACE 8 iso_une 10 3.0 20 1.5 30 2.54772991850989 11 2.71678748219945 21 1.25796592131777 31 3.0 12 2.54772991850989 22 1.5 32 3.0 13 2.54772991850989 23 1.5 33 3.0 70 13 0 3DFACE 8 iso_une 10 3.0 20 1.5 30 2.54772991850989 11 2.54772991850989 21 1.5 31 3.0 12 2.41991861092296 22 1.68298318869529 32 3.0 13 2.41991861092296 23 1.68298318869529 33 3.0 70 13 0 3DFACE 8 iso_une 10 3.0 20 1.5 30 2.54772991850989 11 2.41991861092296 21 1.68298318869529 31 3.0 12 3.0 22 2.11686086360521 32 2.11686086360521 13 3.0 23 2.11686086360521 33 2.11686086360521 70 3 0 3DFACE 8 iso_une 10 3.0 20 2.11686086360521 30 2.11686086360521 11 2.41991861092296 21 1.68298318869529 31 3.0 12 2.31262043788199 22 1.83659840643228 32 3.0 13 2.31262043788199 23 1.83659840643228 33 3.0 70 13 0 3DFACE 8 iso_une 10 3.0 20 2.11686086360521 30 2.11686086360521 11 2.31262043788199 21 1.83659840643228 31 3.0 12 2.2143383356498 22 1.97730561612803 32 3.0 13 2.2143383356498 23 1.97730561612803 33 3.0 70 13 0 3DFACE 8 iso_une 10 3.0 20 2.11686086360521 30 2.11686086360521 11 2.2143383356498 21 1.97730561612803 31 3.0 12 2.11686086360521 22 2.11686086360521 32 3.0 13 2.11686086360521 23 2.11686086360521 33 3.0 70 13 0 3DFACE 8 iso_une 10 3.0 20 2.11686086360521 30 2.11686086360521 11 2.11686086360521 21 2.11686086360521 31 3.0 12 2.01224742103046 22 2.26663244222472 32 3.0 13 2.01224742103046 23 2.26663244222472 33 3.0 70 13 0 3DFACE 8 iso_une 10 3.0 20 2.11686086360521 30 2.11686086360521 11 2.01224742103046 21 2.26663244222472 31 3.0 12 3.0 22 2.795 32 1.64318975552969 13 3.0 23 2.795 33 1.64318975552969 70 3 0 3DFACE 8 iso_une 10 3.0 20 2.795 30 1.64318975552969 11 2.01224742103046 21 2.26663244222472 31 3.0 12 1.89002774674928 22 2.44161027590394 32 3.0 13 1.89002774674928 23 2.44161027590394 33 3.0 70 13 0 3DFACE 8 iso_une 10 3.0 20 2.795 30 1.64318975552969 11 1.89002774674928 21 2.44161027590394 31 3.0 12 1.73223387052482 22 2.66751850869864 32 3.0 13 1.73223387052482 23 2.66751850869864 33 3.0 70 13 0 3DFACE 8 iso_une 10 3.0 20 2.795 30 1.64318975552969 11 1.73223387052482 21 2.66751850869864 31 3.0 12 1.5 22 3.0 32 3.0 13 1.5 23 3.0 33 3.0 70 13 0 3DFACE 8 iso_une 10 3.0 20 2.795 30 1.64318975552969 11 1.5 21 3.0 31 3.0 12 1.705 22 3.0 32 2.795 13 1.705 23 3.0 33 2.795 70 13 0 3DFACE 8 iso_une 10 1.705 20 3.0 30 2.795 11 3.0 21 3.0 31 1.5 12 3.0 22 2.795 32 1.64318975552969 13 3.0 23 2.795 33 1.64318975552969 70 13 0 3DFACE 8 iso_une 10 3.0 20 3.0 30 1.5 11 1.705 21 3.0 31 2.795 12 2.25 22 3.0 32 2.25 13 2.25 23 3.0 33 2.25 70 13 0 3DFACE 8 iso_une 10 3.0 20 3.0 30 1.5 11 2.25 21 3.0 31 2.25 12 2.795 22 3.0 32 1.705 13 2.795 23 3.0 33 1.705 70 1 0 3DFACE 8 iso_base_a 10 0.88313913639479 20 2.68116213853163e-16 30 2.11686086360521 11 0.205 21 0.0 31 1.5 12 1.5 22 0.0 32 1.5 13 1.5 23 0.0 33 1.5 70 1 0 3DFACE 8 iso_base_a 10 0.205 20 0.0 30 1.5 11 0.88313913639479 21 2.68116213853163e-16 31 2.11686086360521 12 0.679903474903479 22 3.11213701008545e-16 32 1.97490347490348 13 0.679903474903479 23 3.11213701008545e-16 33 1.97490347490348 70 1 0 3DFACE 8 iso_base_a 10 3.0 20 1.5 30 1.5 11 2.99999999999999 21 0.647499999999997 31 2.795 12 3.0 22 0.426249999999999 32 2.57375 13 3.0 23 0.426249999999999 33 2.57375 70 1 0 3DFACE 8 iso_base_a 10 2.99999999999999 20 0.647499999999997 30 2.795 11 3.0 21 1.5 31 1.5 12 3.0 22 1.14599166666666 32 2.795 13 3.0 23 1.14599166666666 33 2.795 70 3 0 3DFACE 8 iso_base_a 10 3.0 20 1.14599166666666 30 2.795 11 3.0 21 1.5 31 1.5 12 3.0 22 1.5 32 2.54772991850989 13 3.0 23 1.5 33 2.54772991850989 70 1 0 3DFACE 8 iso_base_a 10 3.0 20 1.705 30 0.205 11 3.0 21 1.5 31 1.5 12 3.0 22 1.5 32 0.205 13 3.0 23 1.5 33 0.205 70 1 0 3DFACE 8 iso_base_a 10 3.0 20 1.5 30 1.5 11 3.0 21 1.705 31 0.205 12 3.0 22 2.25 32 0.75 13 3.0 23 2.25 33 0.75 70 1 0 3DFACE 8 iso_base_a 10 2.64941740918437 20 1.80782203615711e-16 30 1.64558259081563 11 1.5 21 0.0 31 1.5 12 2.54772991850989 22 1.64788632875096e-16 32 1.5 13 2.54772991850989 23 1.64788632875096e-16 33 1.5 70 1 0 3DFACE 8 iso_base_a 10 1.5 20 0.0 30 1.5 11 2.64941740918437 21 1.80782203615711e-16 31 1.64558259081563 12 2.1475 22 0.0 32 2.1475 13 2.1475 23 0.0 33 2.1475 70 1 0 3DFACE 8 iso_base_a 10 2.1475 20 0.0 30 2.1475 11 1.5 21 1.37306724264545e-16 31 2.5477299185099 12 1.5 22 0.0 32 1.5 13 1.5 23 0.0 33 1.5 70 1 0 3DFACE 8 iso_base_a 10 1.5 20 1.37306724264545e-16 30 2.5477299185099 11 2.1475 21 0.0 31 2.1475 12 1.64558259081562 22 1.06434958002245e-16 32 2.64941740918438 13 1.64558259081562 23 1.06434958002245e-16 33 2.64941740918438 70 1 0 3DFACE 8 iso_base_a 10 2.57375 20 1.17961196366424e-16 30 2.57375 11 1.64558259081562 21 1.06434958002245e-16 31 2.64941740918438 12 2.1475 22 0.0 32 2.1475 13 2.1475 23 0.0 33 2.1475 70 1 0 3DFACE 8 iso_base_a 10 1.64558259081562 20 1.06434958002245e-16 30 2.64941740918438 11 2.57375 21 1.17961196366424e-16 31 2.57375 12 2.3525 22 5.67320709797468e-17 32 2.795 13 2.3525 23 5.67320709797468e-17 33 2.795 70 13 0 3DFACE 8 iso_base_a 10 1.64558259081562 20 1.06434958002245e-16 30 2.64941740918438 11 2.3525 21 5.67320709797468e-17 31 2.795 12 1.85400833333332 22 6.2236879303386e-17 32 2.795 13 1.85400833333332 23 6.2236879303386e-17 33 2.795 70 1 0 3DFACE 8 iso_base_a 10 1.97490347490348 20 7.46935760775808e-17 30 0.679903474903477 11 1.5 21 0.0 31 0.205 12 1.64318975552969 22 2.25211131595965e-17 32 0.205 13 1.64318975552969 23 2.25211131595965e-17 33 0.205 70 0 0 3DFACE 8 iso_base_a 10 3.0 20 0.452270081490106 30 1.5 11 3.0 21 0.205 31 2.3525 12 3.0 22 0.205 32 1.85400833333334 13 3.0 23 0.205 33 1.85400833333334 70 1 0 3DFACE 8 iso_base_a 10 3.0 20 0.205 30 2.3525 11 3.0 21 0.452270081490106 31 1.5 12 3.0 22 0.426249999999999 32 2.57375 13 3.0 23 0.426249999999999 33 2.57375 70 3 0 3DFACE 8 iso_base_a 10 3.0 20 0.426249999999999 30 2.57375 11 3.0 21 0.452270081490106 31 1.5 12 3.0 22 1.5 32 1.5 13 3.0 23 1.5 33 1.5 70 1 0 3DFACE 8 iso_base_a 10 3.0 20 1.14599166666666 30 2.795 11 2.99999999999999 21 0.852499999999996 31 3.0 12 2.99999999999999 22 0.647499999999997 32 2.795 13 2.99999999999999 23 0.647499999999997 33 2.795 70 0 0 3DFACE 8 iso_base_a 10 3.0 20 1.5 30 1.5 11 3.0 21 0.452270081490106 31 1.5 12 3.0 22 0.883139136394791 32 0.883139136394791 13 3.0 23 0.883139136394791 33 0.883139136394791 70 0 0 3DFACE 8 iso_base_a 10 3.0 20 1.35681024447031 30 0.205 11 3.0 21 1.5 31 1.5 12 3.0 22 0.883139136394791 32 0.883139136394791 13 3.0 23 0.883139136394791 33 0.883139136394791 70 1 0 3DFACE 8 iso_base_a 10 3.0 20 1.5 30 1.5 11 3.0 21 1.35681024447031 31 0.205 12 3.0 22 1.5 32 0.205 13 3.0 23 1.5 33 0.205 70 1 0 3DFACE 8 iso_base_a 10 1.5 20 1.5 30 3.0 11 0.772725344843521 21 1.72061635471339 31 3.0 12 0.754603186893545 22 1.64826864473226 32 3.0 13 0.754603186893545 23 1.64826864473226 33 3.0 70 1 0 3DFACE 8 iso_base_a 10 0.772725344843521 20 1.72061635471339 30 3.0 11 1.5 21 1.5 31 3.0 12 0.797851555291422 22 1.79083940859747 32 3.0 13 0.797851555291422 23 1.79083940859747 33 3.0 70 1 0 3DFACE 8 iso_base_a 10 1.01786110403563 20 0.91251205544432 30 3.0 11 1.5 21 1.5 31 3.0 12 0.962598846298224 22 0.962598846298224 32 3.0 13 0.962598846298224 23 0.962598846298224 33 3.0 70 1 0 3DFACE 8 iso_base_a 10 1.5 20 1.5 30 3.0 11 1.01786110403563 21 0.91251205544432 31 3.0 12 1.0777666229051 22 0.868083094650066 32 3.0 13 1.0777666229051 23 0.868083094650066 33 3.0 70 1 0 3DFACE 8 iso_base_a 10 0.205 20 0.0 30 1.5 11 0.8525 21 0.0 31 0.8525 12 1.5 22 0.0 32 1.5 13 1.5 23 0.0 33 1.5 70 0 0 3DFACE 8 iso_base_a 10 1.5 20 1.5 30 3.0 11 1.42550697334953 21 2.25634039227087 31 3.0 12 1.35173135526774 22 2.24539681310645 32 3.0 13 1.35173135526774 23 2.24539681310645 33 3.0 70 1 0 3DFACE 8 iso_base_a 10 1.42550697334953 20 2.25634039227087 30 3.0 11 1.5 21 1.5 31 3.0 12 1.5 22 2.26 32 3.0 13 1.5 23 2.26 33 3.0 70 1 0 3DFACE 8 iso_base_a 10 1.42550697334953 20 0.743659607729131 30 3.0 11 1.5 21 1.5 31 3.0 12 1.35173135526774 22 0.754603186893545 32 3.0 13 1.35173135526774 23 0.754603186893545 33 3.0 70 1 0 3DFACE 8 iso_base_a 10 1.5 20 1.5 30 3.0 11 1.42550697334953 21 0.743659607729131 31 3.0 12 1.5 22 0.74 32 3.0 13 1.5 23 0.74 33 3.0 70 1 0 3DFACE 8 iso_base_a 10 1.79083940859747 20 2.20214844470858 30 3.0 11 1.64826864473226 21 2.24539681310645 31 3.0 12 1.5 22 1.5 32 3.0 13 1.5 23 1.5 33 3.0 70 1 0 3DFACE 8 iso_base_a 10 1.64826864473226 20 2.24539681310645 30 3.0 11 1.79083940859747 21 2.20214844470858 31 3.0 12 1.72061635471339 22 2.22727465515648 32 3.0 13 1.72061635471339 23 2.22727465515648 33 3.0 70 1 0 3DFACE 8 iso_base_a 10 1.5 20 0.0 30 1.5 11 0.8525 21 0.0 31 0.8525 12 1.5 22 0.0 32 0.205 13 1.5 23 0.0 33 0.205 70 0 0 3DFACE 8 iso_base_a 10 0.8525 20 0.0 30 0.8525 11 1.295 21 2.39623136148263e-17 31 0.205 12 1.5 22 0.0 32 0.205 13 1.5 23 0.0 33 0.205 70 1 0 3DFACE 8 iso_base_a 10 1.295 20 2.39623136148263e-17 30 0.205 11 0.8525 21 0.0 31 0.8525 12 0.75 22 1.38777878078145e-17 32 0.75 13 0.75 23 1.38777878078145e-17 33 0.75 70 1 0 3DFACE 8 iso_base_a 10 1.5 20 1.5 30 3.0 11 0.91251205544432 21 1.98213889596437 31 3.0 12 0.868083094650066 22 1.9222333770949 32 3.0 13 0.868083094650066 23 1.9222333770949 33 3.0 70 1 0 3DFACE 8 iso_base_a 10 0.91251205544432 20 1.98213889596437 30 3.0 11 1.5 21 1.5 31 3.0 12 0.962598846298224 22 2.03740115370178 32 3.0 13 0.962598846298224 23 2.03740115370178 33 3.0 70 1 0 3DFACE 8 iso_base_a 10 1.79083940859747 20 0.797851555291422 30 3.0 11 1.9222333770949 21 0.868083094650066 31 3.0 12 1.5 22 1.5 32 3.0 13 1.5 23 1.5 33 3.0 70 1 0 3DFACE 8 iso_base_a 10 1.9222333770949 20 0.868083094650066 30 3.0 11 1.79083940859747 21 0.797851555291422 31 3.0 12 1.85826151998776 22 0.82973983909525 32 3.0 13 1.85826151998776 23 0.82973983909525 33 3.0 70 1 0 3DFACE 8 iso_base_a 10 2.20214844470858 20 1.20916059140253 30 3.0 11 2.24539681310646 21 1.35173135526774 31 3.0 12 1.5 22 1.5 32 3.0 13 1.5 23 1.5 33 3.0 70 1 0 3DFACE 8 iso_base_a 10 2.24539681310646 20 1.35173135526774 30 3.0 11 2.20214844470858 21 1.20916059140253 31 3.0 12 2.22727465515648 22 1.27938364528661 32 3.0 13 2.22727465515648 23 1.27938364528661 33 3.0 70 1 0 3DFACE 8 iso_base_a 10 0.743659607729131 20 1.42550697334953 30 3.0 11 1.5 21 1.5 31 3.0 12 0.74 22 1.5 32 3.0 13 0.74 23 1.5 33 3.0 70 1 0 3DFACE 8 iso_base_a 10 1.5 20 1.5 30 3.0 11 0.743659607729131 21 1.42550697334953 31 3.0 12 0.754603186893545 22 1.35173135526774 32 3.0 13 0.754603186893545 23 1.35173135526774 33 3.0 70 1 0 3DFACE 8 iso_base_a 10 2.26 20 1.5 30 3.0 11 2.24539681310645 21 1.64826864473226 31 3.0 12 1.5 22 1.5 32 3.0 13 1.5 23 1.5 33 3.0 70 1 0 3DFACE 8 iso_base_a 10 2.24539681310645 20 1.64826864473226 30 3.0 11 2.26 21 1.5 31 3.0 12 2.25634039227087 22 1.57449302665047 32 3.0 13 2.25634039227087 23 1.57449302665047 33 3.0 70 1 0 3DFACE 8 iso_base_a 10 0.82973983909525 20 1.14173848001224 30 3.0 11 1.5 21 1.5 31 3.0 12 0.797851555291422 22 1.20916059140253 32 3.0 13 0.797851555291422 23 1.20916059140253 33 3.0 70 1 0 3DFACE 8 iso_base_a 10 1.5 20 1.5 30 3.0 11 0.82973983909525 21 1.14173848001224 31 3.0 12 0.868083094650066 22 1.0777666229051 32 3.0 13 0.868083094650066 23 1.0777666229051 33 3.0 70 1 0 3DFACE 8 iso_base_a 10 0.91251205544432 20 1.01786110403563 30 3.0 11 1.5 21 1.5 31 3.0 12 0.868083094650066 22 1.0777666229051 32 3.0 13 0.868083094650066 23 1.0777666229051 33 3.0 70 1 0 3DFACE 8 iso_base_a 10 1.5 20 1.5 30 3.0 11 0.91251205544432 21 1.01786110403563 31 3.0 12 0.962598846298224 22 0.962598846298224 32 3.0 13 0.962598846298224 23 0.962598846298224 33 3.0 70 1 0 3DFACE 8 iso_base_a 10 1.85826151998776 20 2.17026016090475 30 3.0 11 1.89002774674928 21 2.44161027590394 31 3.0 12 1.79083940859747 22 2.20214844470858 32 3.0 13 1.79083940859747 23 2.20214844470858 33 3.0 70 1 0 3DFACE 8 iso_base_a 10 1.89002774674928 20 2.44161027590394 30 3.0 11 1.85826151998776 21 2.17026016090475 31 3.0 12 1.9222333770949 22 2.13191690534993 32 3.0 13 1.9222333770949 23 2.13191690534993 33 3.0 70 13 0 3DFACE 8 iso_base_a 10 1.89002774674928 20 2.44161027590394 30 3.0 11 1.9222333770949 21 2.13191690534993 31 3.0 12 2.01224742103046 22 2.26663244222472 32 3.0 13 2.01224742103046 23 2.26663244222472 33 3.0 70 1 0 3DFACE 8 iso_base_a 10 2.13191690534993 20 1.9222333770949 30 3.0 11 2.03740115370178 21 2.03740115370178 31 3.0 12 1.5 22 1.5 32 3.0 13 1.5 23 1.5 33 3.0 70 1 0 3DFACE 8 iso_base_a 10 2.03740115370178 20 2.03740115370178 30 3.0 11 2.13191690534993 21 1.9222333770949 31 3.0 12 2.08748794455568 22 1.98213889596437 32 3.0 13 2.08748794455568 23 1.98213889596437 33 3.0 70 1 0 3DFACE 8 iso_base_a 10 2.17026016090475 20 1.85826151998776 30 3.0 11 2.2143383356498 21 1.97730561612803 31 3.0 12 2.13191690534993 22 1.9222333770949 32 3.0 13 2.13191690534993 23 1.9222333770949 33 3.0 70 1 0 3DFACE 8 iso_base_a 10 2.2143383356498 20 1.97730561612803 30 3.0 11 2.17026016090475 21 1.85826151998776 31 3.0 12 2.20214844470858 22 1.79083940859747 32 3.0 13 2.20214844470858 23 1.79083940859747 33 3.0 70 13 0 3DFACE 8 iso_base_a 10 2.2143383356498 20 1.97730561612803 30 3.0 11 2.20214844470858 21 1.79083940859747 31 3.0 12 2.31262043788199 22 1.83659840643228 32 3.0 13 2.31262043788199 23 1.83659840643228 33 3.0 70 1 0 3DFACE 8 iso_base_a 10 1.31701681130471 20 0.580081389077034 30 3.0 11 1.20916059140253 21 0.797851555291422 31 3.0 12 1.16340159356772 22 0.687379562118006 32 3.0 13 1.16340159356772 23 0.687379562118006 33 3.0 70 1 0 3DFACE 8 iso_base_a 10 1.20916059140253 20 0.797851555291422 30 3.0 11 1.31701681130471 21 0.580081389077034 31 3.0 12 1.27938364528661 22 0.772725344843521 32 3.0 13 1.27938364528661 23 0.772725344843521 33 3.0 70 3 0 3DFACE 8 iso_base_a 10 1.27938364528661 20 0.772725344843521 30 3.0 11 1.31701681130471 21 0.580081389077034 31 3.0 12 1.35173135526774 22 0.754603186893545 32 3.0 13 1.35173135526774 23 0.754603186893545 33 3.0 70 1 0 3DFACE 8 iso_base_a 10 2.36016784552609 20 0.212667845526093 30 3.0 11 1.98213889596437 21 0.91251205544432 31 3.0 12 1.9222333770949 22 0.868083094650066 32 3.0 13 1.9222333770949 23 0.868083094650066 33 3.0 70 1 0 3DFACE 8 iso_base_a 10 1.98213889596437 20 0.91251205544432 30 3.0 11 2.36016784552609 21 0.212667845526093 31 3.0 12 2.03740115370178 22 0.962598846298224 32 3.0 13 2.03740115370178 23 0.962598846298224 33 3.0 70 3 0 3DFACE 8 iso_base_a 10 2.03740115370178 20 0.962598846298224 30 3.0 11 2.36016784552609 21 0.212667845526093 31 3.0 12 2.57375 22 0.426250000000001 32 3.0 13 2.57375 23 0.426250000000001 33 3.0 70 1 0 3DFACE 8 iso_base_a 10 1.57449302665047 20 2.25634039227087 30 3.0 11 1.5 21 3.0 31 3.0 12 1.5 22 2.26 32 3.0 13 1.5 23 2.26 33 3.0 70 1 0 3DFACE 8 iso_base_a 10 1.5 20 3.0 30 3.0 11 1.57449302665047 21 2.25634039227087 31 3.0 12 1.73223387052482 22 2.66751850869864 32 3.0 13 1.73223387052482 23 2.66751850869864 33 3.0 70 3 0 3DFACE 8 iso_base_a 10 1.73223387052482 20 2.66751850869864 30 3.0 11 1.57449302665047 21 2.25634039227087 31 3.0 12 1.64826864473226 22 2.24539681310645 32 3.0 13 1.64826864473226 23 2.24539681310645 33 3.0 70 1 0 3DFACE 8 iso_base_a 10 2.24539681310646 20 1.35173135526774 30 3.0 11 2.26 21 1.5 31 3.0 12 1.5 22 1.5 32 3.0 13 1.5 23 1.5 33 3.0 70 1 0 3DFACE 8 iso_base_a 10 2.26 20 1.5 30 3.0 11 2.24539681310646 21 1.35173135526774 31 3.0 12 2.25634039227087 22 1.42550697334953 32 3.0 13 2.25634039227087 23 1.42550697334953 33 3.0 70 1 0 3DFACE 8 iso_base_a 10 1.27938364528661 20 0.772725344843521 30 3.0 11 1.5 21 1.5 31 3.0 12 1.20916059140253 22 0.797851555291422 32 3.0 13 1.20916059140253 23 0.797851555291422 33 3.0 70 1 0 3DFACE 8 iso_base_a 10 1.5 20 1.5 30 3.0 11 1.27938364528661 21 0.772725344843521 31 3.0 12 1.35173135526774 22 0.754603186893545 32 3.0 13 1.35173135526774 23 0.754603186893545 33 3.0 70 1 0 3DFACE 8 iso_base_a 10 0.0 20 0.0 30 1.5 11 0.205 21 3.79326200080262e-18 31 1.295 12 0.205 22 0.0 32 1.5 13 0.205 23 0.0 33 1.5 70 0 0 3DFACE 8 iso_base_a 10 2.13191690534993 20 1.0777666229051 30 3.0 11 2.20214844470858 21 1.20916059140253 31 3.0 12 1.5 22 1.5 32 3.0 13 1.5 23 1.5 33 3.0 70 1 0 3DFACE 8 iso_base_a 10 2.20214844470858 20 1.20916059140253 30 3.0 11 2.13191690534993 21 1.0777666229051 31 3.0 12 2.17026016090475 22 1.14173848001224 32 3.0 13 2.17026016090475 23 1.14173848001224 33 3.0 70 1 0 3DFACE 8 iso_base_a 10 1.16340159356772 20 0.687379562118006 30 3.0 11 1.0777666229051 21 0.868083094650066 31 3.0 12 1.02269438387197 22 0.78566166435019 32 3.0 13 1.02269438387197 23 0.78566166435019 33 3.0 70 1 0 3DFACE 8 iso_base_a 10 1.0777666229051 20 0.868083094650066 30 3.0 11 1.16340159356772 21 0.687379562118006 31 3.0 12 1.14173848001224 22 0.82973983909525 32 3.0 13 1.14173848001224 23 0.82973983909525 33 3.0 70 3 0 3DFACE 8 iso_base_a 10 1.14173848001224 20 0.82973983909525 30 3.0 11 1.16340159356772 21 0.687379562118006 31 3.0 12 1.20916059140253 22 0.797851555291422 32 3.0 13 1.20916059140253 23 0.797851555291422 33 3.0 70 1 0 3DFACE 8 iso_base_a 10 2.08748794455568 20 1.98213889596437 30 3.0 11 2.11686086360521 21 2.11686086360521 31 3.0 12 2.03740115370178 22 2.03740115370178 32 3.0 13 2.03740115370178 23 2.03740115370178 33 3.0 70 1 0 3DFACE 8 iso_base_a 10 2.11686086360521 20 2.11686086360521 30 3.0 11 2.08748794455568 21 1.98213889596437 31 3.0 12 2.13191690534993 22 1.9222333770949 32 3.0 13 2.13191690534993 23 1.9222333770949 33 3.0 70 13 0 3DFACE 8 iso_base_a 10 2.11686086360521 20 2.11686086360521 30 3.0 11 2.13191690534993 21 1.9222333770949 31 3.0 12 2.2143383356498 22 1.97730561612803 32 3.0 13 2.2143383356498 23 1.97730561612803 33 3.0 70 1 0 3DFACE 8 iso_base_a 10 2.71678748219945 20 1.25796592131777 30 3.0 11 2.25634039227087 21 1.42550697334953 31 3.0 12 2.24539681310646 22 1.35173135526774 32 3.0 13 2.24539681310646 23 1.35173135526774 33 3.0 70 1 0 3DFACE 8 iso_base_a 10 2.25634039227087 20 1.42550697334953 30 3.0 11 2.71678748219945 21 1.25796592131777 31 3.0 12 2.26 22 1.5 32 3.0 13 2.26 23 1.5 33 3.0 70 3 0 3DFACE 8 iso_base_a 10 2.26 20 1.5 30 3.0 11 2.71678748219945 21 1.25796592131777 31 3.0 12 2.54772991850989 22 1.5 32 3.0 13 2.54772991850989 23 1.5 33 3.0 70 1 0 3DFACE 8 iso_base_a 10 0.772725344843521 20 1.27938364528661 30 3.0 11 1.5 21 1.5 31 3.0 12 0.754603186893545 22 1.35173135526774 32 3.0 13 0.754603186893545 23 1.35173135526774 33 3.0 70 1 0 3DFACE 8 iso_base_a 10 1.5 20 1.5 30 3.0 11 0.772725344843521 21 1.27938364528661 31 3.0 12 0.797851555291422 22 1.20916059140253 32 3.0 13 0.797851555291422 23 1.20916059140253 33 3.0 70 1 0 3DFACE 8 iso_base_a 10 0.797851555291422 20 1.79083940859747 30 3.0 11 0.600815724465256 21 2.10081572446526 31 3.0 12 0.439339828220179 22 1.93933982822018 32 3.0 13 0.439339828220179 23 1.93933982822018 33 3.0 70 1 0 3DFACE 8 iso_base_a 10 0.600815724465256 20 2.10081572446526 30 3.0 11 0.797851555291422 21 1.79083940859747 31 3.0 12 0.82973983909525 22 1.85826151998776 32 3.0 13 0.82973983909525 23 1.85826151998776 33 3.0 70 13 0 3DFACE 8 iso_base_a 10 0.600815724465256 20 2.10081572446526 30 3.0 11 0.82973983909525 21 1.85826151998776 31 3.0 12 0.868083094650066 22 1.9222333770949 32 3.0 13 0.868083094650066 23 1.9222333770949 33 3.0 70 1 0 3DFACE 8 iso_base_a 10 0.558389724096057 20 1.10997225325071 30 3.0 11 0.754603186893545 21 1.35173135526774 31 3.0 12 0.332481491301358 22 1.26776612947518 32 3.0 13 0.332481491301358 23 1.26776612947518 33 3.0 70 1 0 3DFACE 8 iso_base_a 10 0.754603186893545 20 1.35173135526774 30 3.0 11 0.558389724096057 21 1.10997225325071 31 3.0 12 0.772725344843521 22 1.27938364528661 32 3.0 13 0.772725344843521 23 1.27938364528661 33 3.0 70 3 0 3DFACE 8 iso_base_a 10 0.772725344843521 20 1.27938364528661 30 3.0 11 0.558389724096057 21 1.10997225325071 31 3.0 12 0.797851555291422 22 1.20916059140253 32 3.0 13 0.797851555291422 23 1.20916059140253 33 3.0 70 1 0 3DFACE 8 iso_base_a 10 0.733367557775275 20 0.987752578969537 30 3.0 11 0.797851555291422 21 1.20916059140253 31 3.0 12 0.558389724096057 22 1.10997225325071 32 3.0 13 0.558389724096057 23 1.10997225325071 33 3.0 70 1 0 3DFACE 8 iso_base_a 10 0.797851555291422 20 1.20916059140253 30 3.0 11 0.733367557775275 21 0.987752578969537 31 3.0 12 0.82973983909525 22 1.14173848001224 32 3.0 13 0.82973983909525 23 1.14173848001224 33 3.0 70 3 0 3DFACE 8 iso_base_a 10 0.82973983909525 20 1.14173848001224 30 3.0 11 0.733367557775275 21 0.987752578969537 31 3.0 12 0.868083094650066 22 1.0777666229051 32 3.0 13 0.868083094650066 23 1.0777666229051 33 3.0 70 1 0 3DFACE 8 iso_base_a 10 2.97426942202063 20 0.889337610807109 30 3.0 11 2.22727465515648 21 1.27938364528661 31 3.0 12 2.20214844470858 22 1.20916059140253 32 3.0 13 2.20214844470858 23 1.20916059140253 33 3.0 70 1 0 3DFACE 8 iso_base_a 10 2.22727465515648 20 1.27938364528661 30 3.0 11 2.97426942202063 21 0.889337610807109 31 3.0 12 2.24539681310646 22 1.35173135526774 32 3.0 13 2.24539681310646 23 1.35173135526774 33 3.0 70 3 0 3DFACE 8 iso_base_a 10 2.24539681310646 20 1.35173135526774 30 3.0 11 2.97426942202063 21 0.889337610807109 31 3.0 12 2.71678748219945 22 1.25796592131777 32 3.0 13 2.71678748219945 23 1.25796592131777 33 3.0 70 1 0 3DFACE 8 iso_base_a 10 1.57449302665047 20 0.743659607729131 30 3.0 11 1.5 21 1.5 31 3.0 12 1.5 22 0.74 32 3.0 13 1.5 23 0.74 33 3.0 70 1 0 3DFACE 8 iso_base_a 10 1.5 20 1.5 30 3.0 11 1.57449302665047 21 0.743659607729131 31 3.0 12 1.64826864473226 22 0.754603186893545 32 3.0 13 1.64826864473226 23 0.754603186893545 33 3.0 70 1 0 3DFACE 8 iso_base_a 10 0.868083094650066 20 1.9222333770949 30 3.0 11 0.75 21 2.25 31 3.0 12 0.600815724465256 22 2.10081572446526 32 3.0 13 0.600815724465256 23 2.10081572446526 33 3.0 70 1 0 3DFACE 8 iso_base_a 10 0.75 20 2.25 30 3.0 11 0.868083094650066 21 1.9222333770949 31 3.0 12 0.91251205544432 22 1.98213889596437 32 3.0 13 0.91251205544432 23 1.98213889596437 33 3.0 70 13 0 3DFACE 8 iso_base_a 10 0.75 20 2.25 30 3.0 11 0.91251205544432 21 1.98213889596437 31 3.0 12 0.962598846298224 22 2.03740115370178 32 3.0 13 0.962598846298224 23 2.03740115370178 33 3.0 70 1 0 3DFACE 8 iso_base_a 10 0.332481491301358 20 1.26776612947518 30 3.0 11 0.74 21 1.5 31 3.0 12 0.0 22 1.5 32 3.0 13 0.0 23 1.5 33 3.0 70 1 0 3DFACE 8 iso_base_a 10 0.74 20 1.5 30 3.0 11 0.332481491301358 21 1.26776612947518 31 3.0 12 0.743659607729131 22 1.42550697334953 32 3.0 13 0.743659607729131 23 1.42550697334953 33 3.0 70 3 0 3DFACE 8 iso_base_a 10 0.743659607729131 20 1.42550697334953 30 3.0 11 0.332481491301358 21 1.26776612947518 31 3.0 12 0.754603186893545 22 1.35173135526774 32 3.0 13 0.754603186893545 23 1.35173135526774 33 3.0 70 1 0 3DFACE 8 iso_base_a 10 2.57375 20 0.426250000000001 30 3.0 11 2.08748794455568 21 1.01786110403563 31 3.0 12 2.03740115370178 22 0.962598846298224 32 3.0 13 2.03740115370178 23 0.962598846298224 33 3.0 70 1 0 3DFACE 8 iso_base_a 10 2.08748794455568 20 1.01786110403563 30 3.0 11 2.57375 21 0.426250000000001 31 3.0 12 2.13191690534993 22 1.0777666229051 32 3.0 13 2.13191690534993 23 1.0777666229051 33 3.0 70 3 0 3DFACE 8 iso_base_a 10 2.13191690534993 20 1.0777666229051 30 3.0 11 2.57375 21 0.426250000000001 31 3.0 12 2.7873321544739 22 0.639832154473909 32 3.0 13 2.7873321544739 23 0.639832154473909 33 3.0 70 1 0 3DFACE 8 iso_base_a 10 2.7873321544739 20 0.639832154473909 30 3.0 11 2.17026016090475 21 1.14173848001224 31 3.0 12 2.13191690534993 22 1.0777666229051 32 3.0 13 2.13191690534993 23 1.0777666229051 33 3.0 70 1 0 3DFACE 8 iso_base_a 10 2.17026016090475 20 1.14173848001224 30 3.0 11 2.7873321544739 21 0.639832154473909 31 3.0 12 2.20214844470858 22 1.20916059140253 32 3.0 13 2.20214844470858 23 1.20916059140253 33 3.0 70 3 0 3DFACE 8 iso_base_a 10 2.20214844470858 20 1.20916059140253 30 3.0 11 2.7873321544739 21 0.639832154473909 31 3.0 12 2.97426942202063 22 0.889337610807109 32 3.0 13 2.97426942202063 23 0.889337610807109 33 3.0 70 3 0 3DFACE 8 iso_base_a 10 2.97426942202063 20 0.889337610807109 30 3.0 11 2.7873321544739 21 0.639832154473909 31 3.0 12 2.99999999999999 22 0.852499999999996 32 3.0 13 2.99999999999999 23 0.852499999999996 33 3.0 70 1 0 3DFACE 8 iso_base_a 10 0.74 20 1.5 30 3.0 11 0.248866021560526 21 1.74886602156053 31 3.0 12 0.0 22 1.5 32 3.0 13 0.0 23 1.5 33 3.0 70 1 0 3DFACE 8 iso_base_a 10 0.248866021560526 20 1.74886602156053 30 3.0 11 0.74 21 1.5 31 3.0 12 0.743659607729131 22 1.57449302665047 32 3.0 13 0.743659607729131 23 1.57449302665047 33 3.0 70 13 0 3DFACE 8 iso_base_a 10 0.248866021560526 20 1.74886602156053 30 3.0 11 0.743659607729131 21 1.57449302665047 31 3.0 12 0.754603186893545 22 1.64826864473226 32 3.0 13 0.754603186893545 23 1.64826864473226 33 3.0 70 1 0 3DFACE 8 iso_base_a 10 1.5 20 0.452270081490099 30 3.0 11 1.35173135526774 21 0.754603186893545 31 3.0 12 1.31701681130471 22 0.580081389077034 32 3.0 13 1.31701681130471 23 0.580081389077034 33 3.0 70 1 0 3DFACE 8 iso_base_a 10 1.35173135526774 20 0.754603186893545 30 3.0 11 1.5 21 0.452270081490099 31 3.0 12 1.42550697334953 22 0.743659607729131 32 3.0 13 1.42550697334953 23 0.743659607729131 33 3.0 70 3 0 3DFACE 8 iso_base_a 10 1.42550697334953 20 0.743659607729131 30 3.0 11 1.5 21 0.452270081490099 31 3.0 12 1.5 22 0.74 32 3.0 13 1.5 23 0.74 33 3.0 70 1 0 3DFACE 8 iso_base_a 10 3.0 20 1.5 30 0.205 11 3.0 21 1.35681024447031 31 0.205 12 3.0 22 1.5 32 0.0 13 3.0 23 1.5 33 0.0 70 0 0 3DFACE 8 iso_base_a 10 1.5 20 1.5 30 3.0 11 1.01786110403563 21 2.08748794455568 31 3.0 12 0.962598846298224 22 2.03740115370178 32 3.0 13 0.962598846298224 23 2.03740115370178 33 3.0 70 1 0 3DFACE 8 iso_base_a 10 1.01786110403563 20 2.08748794455568 30 3.0 11 1.5 21 1.5 31 3.0 12 1.0777666229051 22 2.13191690534993 32 3.0 13 1.0777666229051 23 2.13191690534993 33 3.0 70 1 0 3DFACE 8 iso_base_a 10 2.1106623891929 20 0.0257305779793383 30 3.0 11 1.85826151998776 21 0.82973983909525 31 3.0 12 1.79083940859747 22 0.797851555291422 32 3.0 13 1.79083940859747 23 0.797851555291422 33 3.0 70 1 0 3DFACE 8 iso_base_a 10 1.85826151998776 20 0.82973983909525 30 3.0 11 2.1106623891929 21 0.0257305779793383 31 3.0 12 1.9222333770949 22 0.868083094650066 32 3.0 13 1.9222333770949 23 0.868083094650066 33 3.0 70 3 0 3DFACE 8 iso_base_a 10 1.9222333770949 20 0.868083094650066 30 3.0 11 2.1106623891929 21 0.0257305779793383 31 3.0 12 2.36016784552609 22 0.212667845526093 32 3.0 13 2.36016784552609 23 0.212667845526093 33 3.0 70 3 0 3DFACE 8 iso_base_a 10 2.36016784552609 20 0.212667845526093 30 3.0 11 2.1106623891929 21 0.0257305779793383 31 3.0 12 2.14749999999999 22 0.0 32 3.0 13 2.14749999999999 23 0.0 33 3.0 70 1 0 3DFACE 8 iso_base_a 10 1.74203407868223 20 0.283212517800531 30 3.0 11 1.72061635471339 21 0.772725344843521 31 3.0 12 1.64826864473226 22 0.754603186893545 32 3.0 13 1.64826864473226 23 0.754603186893545 33 3.0 70 1 0 3DFACE 8 iso_base_a 10 1.72061635471339 20 0.772725344843521 30 3.0 11 1.74203407868223 21 0.283212517800531 31 3.0 12 1.79083940859747 22 0.797851555291422 32 3.0 13 1.79083940859747 23 0.797851555291422 33 3.0 70 3 0 3DFACE 8 iso_base_a 10 1.79083940859747 20 0.797851555291422 30 3.0 11 1.74203407868223 21 0.283212517800531 31 3.0 12 2.1106623891929 22 0.0257305779793383 32 3.0 13 2.1106623891929 23 0.0257305779793383 33 3.0 70 1 0 3DFACE 8 iso_base_a 10 1.0777666229051 20 2.13191690534993 30 3.0 11 1.06066017177982 21 2.56066017177982 31 3.0 12 0.899184275534744 22 2.39918427553474 32 3.0 13 0.899184275534744 23 2.39918427553474 33 3.0 70 1 0 3DFACE 8 iso_base_a 10 1.06066017177982 20 2.56066017177982 30 3.0 11 1.0777666229051 21 2.13191690534993 31 3.0 12 1.14173848001224 22 2.17026016090475 32 3.0 13 1.14173848001224 23 2.17026016090475 33 3.0 70 13 0 3DFACE 8 iso_base_a 10 1.06066017177982 20 2.56066017177982 30 3.0 11 1.14173848001224 21 2.17026016090475 31 3.0 12 1.20916059140253 22 2.20214844470858 32 3.0 13 1.20916059140253 23 2.20214844470858 33 3.0 70 1 0 3DFACE 8 iso_base_a 10 1.20916059140253 20 2.20214844470858 30 3.0 11 1.25113397843947 21 2.75113397843947 31 3.0 12 1.06066017177982 22 2.56066017177982 32 3.0 13 1.06066017177982 23 2.56066017177982 33 3.0 70 1 0 3DFACE 8 iso_base_a 10 1.25113397843947 20 2.75113397843947 30 3.0 11 1.20916059140253 21 2.20214844470858 31 3.0 12 1.27938364528661 22 2.22727465515648 32 3.0 13 1.27938364528661 23 2.22727465515648 33 3.0 70 13 0 3DFACE 8 iso_base_a 10 1.25113397843947 20 2.75113397843947 30 3.0 11 1.27938364528661 21 2.22727465515648 31 3.0 12 1.34882660079146 22 2.26 32 3.0 13 1.34882660079146 23 2.26 33 3.0 70 3 0 3DFACE 8 iso_base_a 10 1.34882660079146 20 2.26 30 3.0 11 1.27938364528661 21 2.22727465515648 31 3.0 12 1.35173135526774 22 2.24539681310645 32 3.0 13 1.35173135526774 23 2.24539681310645 33 3.0 70 1 0 3DFACE 8 iso_base_a 10 3.0 20 3.0 30 1.5 11 3.0 21 2.795 31 1.5 12 3.0 22 2.795 32 1.295 13 3.0 23 2.795 33 1.295 70 0 0 3DFACE 8 iso_base_a 10 3.0 20 1.705 30 0.205 11 3.0 21 1.5 31 0.205 12 3.0 22 1.5 32 0.0 13 3.0 23 1.5 33 0.0 70 0 0 3DFACE 8 iso_base_a 10 3.0 20 2.25 30 0.75 11 3.0 21 2.795 31 1.5 12 3.0 22 1.5 32 1.5 13 3.0 23 1.5 33 1.5 70 1 0 3DFACE 8 iso_base_a 10 3.0 20 2.795 30 1.5 11 3.0 21 2.25 31 0.75 12 3.0 22 2.795 32 1.295 13 3.0 23 2.795 33 1.295 70 1 0 3DFACE 8 iso_base_a 10 1.74203407868223 20 0.283212517800531 30 3.0 11 1.5 21 0.74 31 3.0 12 1.5 22 0.452270081490099 32 3.0 13 1.5 23 0.452270081490099 33 3.0 70 1 0 3DFACE 8 iso_base_a 10 1.5 20 0.74 30 3.0 11 1.74203407868223 21 0.283212517800531 31 3.0 12 1.57449302665047 22 0.743659607729131 32 3.0 13 1.57449302665047 23 0.743659607729131 33 3.0 70 3 0 3DFACE 8 iso_base_a 10 1.57449302665047 20 0.743659607729131 30 3.0 11 1.74203407868223 21 0.283212517800531 31 3.0 12 1.64826864473226 22 0.754603186893545 32 3.0 13 1.64826864473226 23 0.754603186893545 33 3.0 70 1 0 3DFACE 8 iso_base_a 10 1.72061635471339 20 2.22727465515648 30 3.0 11 1.73223387052482 21 2.66751850869864 31 3.0 12 1.64826864473226 22 2.24539681310645 32 3.0 13 1.64826864473226 23 2.24539681310645 33 3.0 70 1 0 3DFACE 8 iso_base_a 10 1.73223387052482 20 2.66751850869864 30 3.0 11 1.72061635471339 21 2.22727465515648 31 3.0 12 1.79083940859747 22 2.20214844470858 32 3.0 13 1.79083940859747 23 2.20214844470858 33 3.0 70 13 0 3DFACE 8 iso_base_a 10 1.73223387052482 20 2.66751850869864 30 3.0 11 1.79083940859747 21 2.20214844470858 31 3.0 12 1.89002774674928 22 2.44161027590394 32 3.0 13 1.89002774674928 23 2.44161027590394 33 3.0 70 1 0 3DFACE 8 iso_base_a 10 1.02269438387197 20 0.78566166435019 30 3.0 11 0.962598846298224 21 0.962598846298224 31 3.0 12 0.883139136394789 22 0.883139136394789 32 3.0 13 0.883139136394789 23 0.883139136394789 33 3.0 70 1 0 3DFACE 8 iso_base_a 10 0.962598846298224 20 0.962598846298224 30 3.0 11 1.02269438387197 21 0.78566166435019 31 3.0 12 1.01786110403563 22 0.91251205544432 32 3.0 13 1.01786110403563 23 0.91251205544432 33 3.0 70 3 0 3DFACE 8 iso_base_a 10 1.01786110403563 20 0.91251205544432 30 3.0 11 1.02269438387197 21 0.78566166435019 31 3.0 12 1.0777666229051 22 0.868083094650066 32 3.0 13 1.0777666229051 23 0.868083094650066 33 3.0 70 1 0 3DFACE 8 iso_base_a 10 1.5 20 1.5 30 3.0 11 1.14173848001224 21 2.17026016090475 31 3.0 12 1.0777666229051 22 2.13191690534993 32 3.0 13 1.0777666229051 23 2.13191690534993 33 3.0 70 1 0 3DFACE 8 iso_base_a 10 1.14173848001224 20 2.17026016090475 30 3.0 11 1.5 21 1.5 31 3.0 12 1.20916059140253 22 2.20214844470858 32 3.0 13 1.20916059140253 23 2.20214844470858 33 3.0 70 1 0 3DFACE 8 iso_base_a 10 1.9222333770949 20 2.13191690534993 30 3.0 11 1.79083940859747 21 2.20214844470858 31 3.0 12 1.5 22 1.5 32 3.0 13 1.5 23 1.5 33 3.0 70 1 0 3DFACE 8 iso_base_a 10 1.79083940859747 20 2.20214844470858 30 3.0 11 1.9222333770949 21 2.13191690534993 31 3.0 12 1.85826151998776 22 2.17026016090475 32 3.0 13 1.85826151998776 23 2.17026016090475 33 3.0 70 1 0 3DFACE 8 iso_base_a 10 2.20214844470858 20 1.79083940859747 30 3.0 11 2.13191690534993 21 1.9222333770949 31 3.0 12 1.5 22 1.5 32 3.0 13 1.5 23 1.5 33 3.0 70 1 0 3DFACE 8 iso_base_a 10 2.13191690534993 20 1.9222333770949 30 3.0 11 2.20214844470858 21 1.79083940859747 31 3.0 12 2.17026016090475 22 1.85826151998776 32 3.0 13 2.17026016090475 23 1.85826151998776 33 3.0 70 1 0 3DFACE 8 iso_base_a 10 1.34882660079146 20 2.26 30 3.0 11 1.5 21 3.0 31 3.0 12 1.25113397843947 22 2.75113397843947 32 3.0 13 1.25113397843947 23 2.75113397843947 33 3.0 70 1 0 3DFACE 8 iso_base_a 10 1.5 20 3.0 30 3.0 11 1.34882660079146 21 2.26 31 3.0 12 1.35173135526774 22 2.24539681310645 32 3.0 13 1.35173135526774 23 2.24539681310645 33 3.0 70 13 0 3DFACE 8 iso_base_a 10 1.5 20 3.0 30 3.0 11 1.35173135526774 21 2.24539681310645 31 3.0 12 1.42550697334953 22 2.25634039227087 32 3.0 13 1.42550697334953 23 2.25634039227087 33 3.0 70 13 0 3DFACE 8 iso_base_a 10 1.5 20 3.0 30 3.0 11 1.42550697334953 21 2.25634039227087 31 3.0 12 1.5 22 2.26 32 3.0 13 1.5 23 2.26 33 3.0 70 1 0 3DFACE 8 iso_base_a 10 1.64826864473226 20 0.754603186893545 30 3.0 11 1.79083940859747 21 0.797851555291422 31 3.0 12 1.5 22 1.5 32 3.0 13 1.5 23 1.5 33 3.0 70 1 0 3DFACE 8 iso_base_a 10 1.79083940859747 20 0.797851555291422 30 3.0 11 1.64826864473226 21 0.754603186893545 31 3.0 12 1.72061635471339 22 0.772725344843521 32 3.0 13 1.72061635471339 23 0.772725344843521 33 3.0 70 1 0 3DFACE 8 iso_base_a 10 1.5 20 1.5 30 3.0 11 1.27938364528661 21 2.22727465515648 31 3.0 12 1.20916059140253 22 2.20214844470858 32 3.0 13 1.20916059140253 23 2.20214844470858 33 3.0 70 1 0 3DFACE 8 iso_base_a 10 1.27938364528661 20 2.22727465515648 30 3.0 11 1.5 21 1.5 31 3.0 12 1.35173135526774 22 2.24539681310645 32 3.0 13 1.35173135526774 23 2.24539681310645 33 3.0 70 1 0 3DFACE 8 iso_base_a 10 2.24539681310645 20 1.64826864473226 30 3.0 11 2.20214844470858 21 1.79083940859747 31 3.0 12 1.5 22 1.5 32 3.0 13 1.5 23 1.5 33 3.0 70 1 0 3DFACE 8 iso_base_a 10 2.20214844470858 20 1.79083940859747 30 3.0 11 2.24539681310645 21 1.64826864473226 31 3.0 12 2.22727465515648 22 1.72061635471339 32 3.0 13 2.22727465515648 23 1.72061635471339 33 3.0 70 1 0 3DFACE 8 iso_base_a 10 3.0 20 2.11686086360521 30 2.11686086360521 11 3.0 21 1.5 31 2.54772991850989 12 3.0 22 1.5 32 1.5 13 3.0 23 1.5 33 1.5 70 0 0 3DFACE 8 iso_base_a 10 3.0 20 2.795 30 1.5 11 3.0 21 2.11686086360521 31 2.11686086360521 12 3.0 22 1.5 32 1.5 13 3.0 23 1.5 33 1.5 70 1 0 3DFACE 8 iso_base_a 10 3.0 20 2.11686086360521 30 2.11686086360521 11 3.0 21 2.795 31 1.5 12 3.0 22 2.795 32 1.64318975552969 13 3.0 23 2.795 33 1.64318975552969 70 1 0 3DFACE 8 iso_base_a 10 3.0 20 3.0 30 1.5 11 3.0 21 2.795 31 1.64318975552969 12 3.0 22 2.795 32 1.5 13 3.0 23 2.795 33 1.5 70 0 0 3DFACE 8 iso_base_a 10 0.205 20 4.11920172793637e-16 30 1.64318975552968 11 0.0 21 0.0 31 1.5 12 0.205 22 0.0 32 1.5 13 0.205 23 0.0 33 1.5 70 0 0 3DFACE 8 iso_base_a 10 1.5 20 1.37306724264545e-16 30 2.5477299185099 11 0.88313913639479 21 2.68116213853163e-16 31 2.11686086360521 12 1.5 22 0.0 32 1.5 13 1.5 23 0.0 33 1.5 70 0 0 3DFACE 8 iso_base_a 10 3.0 20 0.205 30 2.3525 11 2.99999999999999 21 4.71844785465692e-16 31 2.1475 12 3.0 22 0.205 32 1.85400833333334 13 3.0 23 0.205 33 1.85400833333334 70 0 0 3DFACE 8 iso_base_a 10 1.64318975552969 20 2.25211131595965e-17 30 0.205 11 1.5 21 0.0 31 0.205 12 1.5 22 5.55111512312578e-17 32 0.0 13 1.5 23 5.55111512312578e-17 33 0.0 70 0 0 3DFACE 8 iso_base_a 10 0.679903474903479 20 3.11213701008545e-16 30 1.97490347490348 11 0.205 21 4.11920172793637e-16 31 1.64318975552968 12 0.205 22 0.0 32 1.5 13 0.205 23 0.0 33 1.5 70 0 0 3DFACE 8 iso_base_a 10 0.8525 20 0.0 30 0.8525 11 0.205 21 3.79326200080262e-18 31 1.295 12 0.75 22 1.38777878078145e-17 32 0.75 13 0.75 23 1.38777878078145e-17 33 0.75 70 1 0 3DFACE 8 iso_base_a 10 0.205 20 3.79326200080262e-18 30 1.295 11 0.8525 21 0.0 31 0.8525 12 0.205 22 0.0 32 1.5 13 0.205 23 0.0 33 1.5 70 1 0 3DFACE 8 iso_base_a 10 1.97490347490348 20 7.46935760775808e-17 30 0.679903474903477 11 1.5 21 0.0 31 1.5 12 1.5 22 0.0 32 0.205 13 1.5 23 0.0 33 0.205 70 1 0 3DFACE 8 iso_base_a 10 1.5 20 0.0 30 1.5 11 1.97490347490348 21 7.46935760775808e-17 31 0.679903474903477 12 2.11686086360521 22 9.70208606166603e-17 32 0.883139136394791 13 2.11686086360521 23 9.70208606166603e-17 33 0.883139136394791 70 1 0 3DFACE 8 iso_base_a 10 2.795 20 1.79190321753102e-16 30 2.35249999999999 11 2.795 21 2.03679665726025e-16 31 1.85400833333335 12 2.99999999999999 22 4.71844785465692e-16 32 2.1475 13 2.99999999999999 23 4.71844785465692e-16 33 2.1475 70 0 0 3DFACE 8 iso_base_a 10 1.5 20 0.0 30 1.5 11 2.11686086360521 21 9.70208606166603e-17 31 0.883139136394791 12 2.54772991850989 22 1.64788632875096e-16 32 1.5 13 2.54772991850989 23 1.64788632875096e-16 33 1.5 70 0 0 3DFACE 8 iso_base_a 10 2.795 20 2.03679665726025e-16 30 1.85400833333335 11 2.1475 21 0.0 31 2.1475 12 2.64941740918437 22 1.80782203615711e-16 32 1.64558259081563 13 2.64941740918437 23 1.80782203615711e-16 33 1.64558259081563 70 1 0 3DFACE 8 iso_base_a 10 2.1475 20 0.0 30 2.1475 11 2.795 21 2.03679665726025e-16 31 1.85400833333335 12 2.795 22 1.79190321753102e-16 32 2.35249999999999 13 2.795 23 1.79190321753102e-16 33 2.35249999999999 70 13 0 3DFACE 8 iso_base_a 10 2.1475 20 0.0 30 2.1475 11 2.795 21 1.79190321753102e-16 31 2.35249999999999 12 2.57375 22 1.17961196366424e-16 32 2.57375 13 2.57375 23 1.17961196366424e-16 33 2.57375 70 1 0 3DFACE 8 iso_base_a 10 2.14749999999999 20 0.0 30 3.0 11 1.85400833333332 21 6.2236879303386e-17 31 2.795 12 2.3525 22 5.67320709797468e-17 32 2.795 13 2.3525 23 5.67320709797468e-17 33 2.795 70 0 0 3DFACE 8 iso_base_a 10 1.5 20 1.5 30 3.0 11 0.743659607729131 21 1.57449302665047 31 3.0 12 0.74 22 1.5 32 3.0 13 0.74 23 1.5 33 3.0 70 1 0 3DFACE 8 iso_base_a 10 0.743659607729131 20 1.57449302665047 30 3.0 11 1.5 21 1.5 31 3.0 12 0.754603186893545 22 1.64826864473226 32 3.0 13 0.754603186893545 23 1.64826864473226 33 3.0 70 1 0 3DFACE 8 iso_base_a 10 2.03740115370178 20 0.962598846298224 30 3.0 11 2.13191690534993 21 1.0777666229051 31 3.0 12 1.5 22 1.5 32 3.0 13 1.5 23 1.5 33 3.0 70 1 0 3DFACE 8 iso_base_a 10 2.13191690534993 20 1.0777666229051 30 3.0 11 2.03740115370178 21 0.962598846298224 31 3.0 12 2.08748794455568 22 1.01786110403563 32 3.0 13 2.08748794455568 23 1.01786110403563 33 3.0 70 1 0 3DFACE 8 iso_base_a 10 1.98213889596437 20 2.08748794455568 30 3.0 11 2.01224742103046 21 2.26663244222472 31 3.0 12 1.9222333770949 22 2.13191690534993 32 3.0 13 1.9222333770949 23 2.13191690534993 33 3.0 70 1 0 3DFACE 8 iso_base_a 10 2.01224742103046 20 2.26663244222472 30 3.0 11 1.98213889596437 21 2.08748794455568 31 3.0 12 2.03740115370178 22 2.03740115370178 32 3.0 13 2.03740115370178 23 2.03740115370178 33 3.0 70 13 0 3DFACE 8 iso_base_a 10 2.01224742103046 20 2.26663244222472 30 3.0 11 2.03740115370178 21 2.03740115370178 31 3.0 12 2.11686086360521 22 2.11686086360521 32 3.0 13 2.11686086360521 23 2.11686086360521 33 3.0 70 1 0 3DFACE 8 iso_base_a 10 2.03740115370178 20 2.03740115370178 30 3.0 11 1.9222333770949 21 2.13191690534993 31 3.0 12 1.5 22 1.5 32 3.0 13 1.5 23 1.5 33 3.0 70 1 0 3DFACE 8 iso_base_a 10 1.9222333770949 20 2.13191690534993 30 3.0 11 2.03740115370178 21 2.03740115370178 31 3.0 12 1.98213889596437 22 2.08748794455568 32 3.0 13 1.98213889596437 23 2.08748794455568 33 3.0 70 1 0 3DFACE 8 iso_base_a 10 2.25634039227087 20 1.57449302665047 30 3.0 11 2.41991861092296 21 1.68298318869529 31 3.0 12 2.24539681310645 22 1.64826864473226 32 3.0 13 2.24539681310645 23 1.64826864473226 33 3.0 70 1 0 3DFACE 8 iso_base_a 10 2.41991861092296 20 1.68298318869529 30 3.0 11 2.25634039227087 21 1.57449302665047 31 3.0 12 2.26 22 1.5 32 3.0 13 2.26 23 1.5 33 3.0 70 13 0 3DFACE 8 iso_base_a 10 2.41991861092296 20 1.68298318869529 30 3.0 11 2.26 21 1.5 31 3.0 12 2.54772991850989 22 1.5 32 3.0 13 2.54772991850989 23 1.5 33 3.0 70 1 0 3DFACE 8 iso_base_a 10 2.22727465515648 20 1.72061635471339 30 3.0 11 2.31262043788199 21 1.83659840643228 31 3.0 12 2.20214844470858 22 1.79083940859747 32 3.0 13 2.20214844470858 23 1.79083940859747 33 3.0 70 1 0 3DFACE 8 iso_base_a 10 2.31262043788199 20 1.83659840643228 30 3.0 11 2.22727465515648 21 1.72061635471339 31 3.0 12 2.24539681310645 22 1.64826864473226 32 3.0 13 2.24539681310645 23 1.64826864473226 33 3.0 70 13 0 3DFACE 8 iso_base_a 10 2.31262043788199 20 1.83659840643228 30 3.0 11 2.24539681310645 21 1.64826864473226 31 3.0 12 2.41991861092296 22 1.68298318869529 32 3.0 13 2.41991861092296 23 1.68298318869529 33 3.0 70 1 0 3DFACE 8 iso_base_a 10 1.64826864473226 20 2.24539681310645 30 3.0 11 1.5 21 2.26 31 3.0 12 1.5 22 1.5 32 3.0 13 1.5 23 1.5 33 3.0 70 1 0 3DFACE 8 iso_base_a 10 1.5 20 2.26 30 3.0 11 1.64826864473226 21 2.24539681310645 31 3.0 12 1.57449302665047 22 2.25634039227087 32 3.0 13 1.57449302665047 23 2.25634039227087 33 3.0 70 1 0 3DFACE 8 iso_base_a 10 1.5 20 1.5 30 3.0 11 0.82973983909525 21 1.85826151998776 31 3.0 12 0.797851555291422 22 1.79083940859747 32 3.0 13 0.797851555291422 23 1.79083940859747 33 3.0 70 1 0 3DFACE 8 iso_base_a 10 0.82973983909525 20 1.85826151998776 30 3.0 11 1.5 21 1.5 31 3.0 12 0.868083094650066 22 1.9222333770949 32 3.0 13 0.868083094650066 23 1.9222333770949 33 3.0 70 1 0 3DFACE 8 iso_base_a 10 0.754603186893545 20 1.64826864473226 30 3.0 11 0.439339828220179 21 1.93933982822018 31 3.0 12 0.248866021560526 22 1.74886602156053 32 3.0 13 0.248866021560526 23 1.74886602156053 33 3.0 70 1 0 3DFACE 8 iso_base_a 10 0.439339828220179 20 1.93933982822018 30 3.0 11 0.754603186893545 21 1.64826864473226 31 3.0 12 0.772725344843521 22 1.72061635471339 32 3.0 13 0.772725344843521 23 1.72061635471339 33 3.0 70 13 0 3DFACE 8 iso_base_a 10 0.439339828220179 20 1.93933982822018 30 3.0 11 0.772725344843521 21 1.72061635471339 31 3.0 12 0.797851555291422 22 1.79083940859747 32 3.0 13 0.797851555291422 23 1.79083940859747 33 3.0 70 1 0 3DFACE 8 iso_base_a 10 1.14173848001224 20 0.82973983909525 30 3.0 11 1.5 21 1.5 31 3.0 12 1.0777666229051 22 0.868083094650066 32 3.0 13 1.0777666229051 23 0.868083094650066 33 3.0 70 1 0 3DFACE 8 iso_base_a 10 1.5 20 1.5 30 3.0 11 1.14173848001224 21 0.82973983909525 31 3.0 12 1.20916059140253 22 0.797851555291422 32 3.0 13 1.20916059140253 23 0.797851555291422 33 3.0 70 1 0 3DFACE 8 iso_base_a 10 1.295 20 2.39623136148263e-17 30 0.205 11 1.5 21 5.55111512312578e-17 31 0.0 12 1.5 22 0.0 32 0.205 13 1.5 23 0.0 33 0.205 70 0 0 3DFACE 8 iso_base_a 10 0.883139136394789 20 0.883139136394789 30 3.0 11 0.868083094650066 21 1.0777666229051 31 3.0 12 0.733367557775275 22 0.987752578969537 32 3.0 13 0.733367557775275 23 0.987752578969537 33 3.0 70 1 0 3DFACE 8 iso_base_a 10 0.868083094650066 20 1.0777666229051 30 3.0 11 0.883139136394789 21 0.883139136394789 31 3.0 12 0.91251205544432 22 1.01786110403563 32 3.0 13 0.91251205544432 23 1.01786110403563 33 3.0 70 3 0 3DFACE 8 iso_base_a 10 0.91251205544432 20 1.01786110403563 30 3.0 11 0.883139136394789 21 0.883139136394789 31 3.0 12 0.962598846298224 22 0.962598846298224 32 3.0 13 0.962598846298224 23 0.962598846298224 33 3.0 70 1 0 3DFACE 8 iso_base_a 10 1.9222333770949 20 0.868083094650066 30 3.0 11 2.03740115370178 21 0.962598846298224 31 3.0 12 1.5 22 1.5 32 3.0 13 1.5 23 1.5 33 3.0 70 1 0 3DFACE 8 iso_base_a 10 2.03740115370178 20 0.962598846298224 30 3.0 11 1.9222333770949 21 0.868083094650066 31 3.0 12 1.98213889596437 22 0.91251205544432 32 3.0 13 1.98213889596437 23 0.91251205544432 33 3.0 70 1 0 3DFACE 8 iso_base_a 10 0.962598846298224 20 2.03740115370178 30 3.0 11 0.899184275534744 21 2.39918427553474 31 3.0 12 0.75 22 2.25 32 3.0 13 0.75 23 2.25 33 3.0 70 1 0 3DFACE 8 iso_base_a 10 0.899184275534744 20 2.39918427553474 30 3.0 11 0.962598846298224 21 2.03740115370178 31 3.0 12 1.01786110403563 22 2.08748794455568 32 3.0 13 1.01786110403563 23 2.08748794455568 33 3.0 70 13 0 3DFACE 8 iso_base_a 10 0.899184275534744 20 2.39918427553474 30 3.0 11 1.01786110403563 21 2.08748794455568 31 3.0 12 1.0777666229051 22 2.13191690534993 32 3.0 13 1.0777666229051 23 2.13191690534993 33 3.0 70 1 0 3DFACE 8 iso_base_a 10 2.14749999999999 20 0.0 30 3.0 11 2.1106623891929 21 0.0257305779793383 31 3.0 12 1.85400833333332 22 6.2236879303386e-17 32 2.795 13 1.85400833333332 23 6.2236879303386e-17 33 2.795 70 2 0 3DFACE 8 iso_base_a 10 0.205 20 4.11920172793637e-16 30 1.64318975552968 11 0.0 21 1.5 31 3.0 12 0.0 22 0.0 32 1.5 13 0.0 23 0.0 33 1.5 70 1 0 3DFACE 8 iso_base_a 10 0.0 20 1.5 30 3.0 11 0.205 21 4.11920172793637e-16 31 1.64318975552968 12 0.679903474903479 22 3.11213701008545e-16 32 1.97490347490348 13 0.679903474903479 23 3.11213701008545e-16 33 1.97490347490348 70 13 0 3DFACE 8 iso_base_a 10 0.0 20 1.5 30 3.0 11 0.679903474903479 21 3.11213701008545e-16 31 1.97490347490348 12 0.88313913639479 22 2.68116213853163e-16 32 2.11686086360521 13 0.88313913639479 23 2.68116213853163e-16 33 2.11686086360521 70 13 0 3DFACE 8 iso_base_a 10 0.0 20 1.5 30 3.0 11 0.88313913639479 21 2.68116213853163e-16 31 2.11686086360521 12 1.5 22 1.37306724264545e-16 32 2.5477299185099 13 1.5 23 1.37306724264545e-16 33 2.5477299185099 70 13 0 3DFACE 8 iso_base_a 10 0.0 20 1.5 30 3.0 11 1.5 21 1.37306724264545e-16 31 2.5477299185099 12 1.64558259081562 22 1.06434958002245e-16 32 2.64941740918438 13 1.64558259081562 23 1.06434958002245e-16 33 2.64941740918438 70 13 0 3DFACE 8 iso_base_a 10 0.0 20 1.5 30 3.0 11 1.64558259081562 21 1.06434958002245e-16 31 2.64941740918438 12 1.85400833333332 22 6.2236879303386e-17 32 2.795 13 1.85400833333332 23 6.2236879303386e-17 33 2.795 70 13 0 3DFACE 8 iso_base_a 10 0.0 20 1.5 30 3.0 11 1.85400833333332 21 6.2236879303386e-17 31 2.795 12 2.1106623891929 22 0.0257305779793383 32 3.0 13 2.1106623891929 23 0.0257305779793383 33 3.0 70 15 0 3DFACE 8 iso_base_a 10 0.0 20 1.5 30 3.0 11 2.1106623891929 21 0.0257305779793383 31 3.0 12 1.74203407868223 22 0.283212517800531 32 3.0 13 1.74203407868223 23 0.283212517800531 33 3.0 70 13 0 3DFACE 8 iso_base_a 10 0.0 20 1.5 30 3.0 11 1.74203407868223 21 0.283212517800531 31 3.0 12 1.5 22 0.452270081490099 32 3.0 13 1.5 23 0.452270081490099 33 3.0 70 13 0 3DFACE 8 iso_base_a 10 0.0 20 1.5 30 3.0 11 1.5 21 0.452270081490099 31 3.0 12 1.31701681130471 22 0.580081389077034 32 3.0 13 1.31701681130471 23 0.580081389077034 33 3.0 70 13 0 3DFACE 8 iso_base_a 10 0.0 20 1.5 30 3.0 11 1.31701681130471 21 0.580081389077034 31 3.0 12 1.16340159356772 22 0.687379562118006 32 3.0 13 1.16340159356772 23 0.687379562118006 33 3.0 70 13 0 3DFACE 8 iso_base_a 10 0.0 20 1.5 30 3.0 11 1.16340159356772 21 0.687379562118006 31 3.0 12 1.02269438387197 22 0.78566166435019 32 3.0 13 1.02269438387197 23 0.78566166435019 33 3.0 70 13 0 3DFACE 8 iso_base_a 10 0.0 20 1.5 30 3.0 11 1.02269438387197 21 0.78566166435019 31 3.0 12 0.883139136394789 22 0.883139136394789 32 3.0 13 0.883139136394789 23 0.883139136394789 33 3.0 70 13 0 3DFACE 8 iso_base_a 10 0.0 20 1.5 30 3.0 11 0.883139136394789 21 0.883139136394789 31 3.0 12 0.733367557775275 22 0.987752578969537 32 3.0 13 0.733367557775275 23 0.987752578969537 33 3.0 70 13 0 3DFACE 8 iso_base_a 10 0.0 20 1.5 30 3.0 11 0.733367557775275 21 0.987752578969537 31 3.0 12 0.558389724096057 22 1.10997225325071 32 3.0 13 0.558389724096057 23 1.10997225325071 33 3.0 70 13 0 3DFACE 8 iso_base_a 10 0.0 20 1.5 30 3.0 11 0.558389724096057 21 1.10997225325071 31 3.0 12 0.332481491301358 22 1.26776612947518 32 3.0 13 0.332481491301358 23 1.26776612947518 33 3.0 70 1 0 3DFACE 8 iso_base_a 10 3.0 20 1.14599166666666 30 2.795 11 2.97426942202063 21 0.889337610807109 31 3.0 12 2.99999999999999 22 0.852499999999996 32 3.0 13 2.99999999999999 23 0.852499999999996 33 3.0 70 1 0 3DFACE 8 iso_base_a 10 2.97426942202063 20 0.889337610807109 30 3.0 11 3.0 21 1.14599166666666 31 2.795 12 2.71678748219945 22 1.25796592131777 32 3.0 13 2.71678748219945 23 1.25796592131777 33 3.0 70 3 0 3DFACE 8 iso_base_a 10 2.71678748219945 20 1.25796592131777 30 3.0 11 3.0 21 1.14599166666666 31 2.795 12 3.0 22 1.5 32 2.54772991850989 13 3.0 23 1.5 33 2.54772991850989 70 13 0 3DFACE 8 iso_base_a 10 2.71678748219945 20 1.25796592131777 30 3.0 11 3.0 21 1.5 31 2.54772991850989 12 2.54772991850989 22 1.5 32 3.0 13 2.54772991850989 23 1.5 33 3.0 70 3 0 3DFACE 8 iso_base_a 10 2.54772991850989 20 1.5 30 3.0 11 3.0 21 1.5 31 2.54772991850989 12 3.0 22 2.11686086360521 32 2.11686086360521 13 3.0 23 2.11686086360521 33 2.11686086360521 70 13 0 3DFACE 8 iso_base_a 10 2.54772991850989 20 1.5 30 3.0 11 3.0 21 2.11686086360521 31 2.11686086360521 12 2.41991861092296 22 1.68298318869529 32 3.0 13 2.41991861092296 23 1.68298318869529 33 3.0 70 3 0 3DFACE 8 iso_base_a 10 2.41991861092296 20 1.68298318869529 30 3.0 11 3.0 21 2.11686086360521 31 2.11686086360521 12 2.31262043788199 22 1.83659840643228 32 3.0 13 2.31262043788199 23 1.83659840643228 33 3.0 70 3 0 3DFACE 8 iso_base_a 10 2.31262043788199 20 1.83659840643228 30 3.0 11 3.0 21 2.11686086360521 31 2.11686086360521 12 2.2143383356498 22 1.97730561612803 32 3.0 13 2.2143383356498 23 1.97730561612803 33 3.0 70 3 0 3DFACE 8 iso_base_a 10 2.2143383356498 20 1.97730561612803 30 3.0 11 3.0 21 2.11686086360521 31 2.11686086360521 12 2.11686086360521 22 2.11686086360521 32 3.0 13 2.11686086360521 23 2.11686086360521 33 3.0 70 3 0 3DFACE 8 iso_base_a 10 2.11686086360521 20 2.11686086360521 30 3.0 11 3.0 21 2.11686086360521 31 2.11686086360521 12 2.01224742103046 22 2.26663244222472 32 3.0 13 2.01224742103046 23 2.26663244222472 33 3.0 70 3 0 3DFACE 8 iso_base_a 10 2.01224742103046 20 2.26663244222472 30 3.0 11 3.0 21 2.11686086360521 31 2.11686086360521 12 3.0 22 2.795 32 1.64318975552969 13 3.0 23 2.795 33 1.64318975552969 70 13 0 3DFACE 8 iso_base_a 10 2.01224742103046 20 2.26663244222472 30 3.0 11 3.0 21 2.795 31 1.64318975552969 12 1.89002774674928 22 2.44161027590394 32 3.0 13 1.89002774674928 23 2.44161027590394 33 3.0 70 3 0 3DFACE 8 iso_base_a 10 1.89002774674928 20 2.44161027590394 30 3.0 11 3.0 21 2.795 31 1.64318975552969 12 1.73223387052482 22 2.66751850869864 32 3.0 13 1.73223387052482 23 2.66751850869864 33 3.0 70 3 0 3DFACE 8 iso_base_a 10 1.73223387052482 20 2.66751850869864 30 3.0 11 3.0 21 2.795 31 1.64318975552969 12 1.5 22 3.0 32 3.0 13 1.5 23 3.0 33 3.0 70 3 0 3DFACE 8 iso_base_a 10 1.5 20 3.0 30 3.0 11 3.0 21 2.795 31 1.64318975552969 12 3.0 22 3.0 32 1.5 13 3.0 23 3.0 33 1.5 70 1 0 3DFACE 8 iso_base_a 10 1.295 20 2.39623136148263e-17 30 0.205 11 3.0 21 1.5 31 0.0 12 1.5 22 5.55111512312578e-17 32 0.0 13 1.5 23 5.55111512312578e-17 33 0.0 70 1 0 3DFACE 8 iso_base_a 10 3.0 20 1.5 30 0.0 11 1.295 21 2.39623136148263e-17 31 0.205 12 3.0 22 1.705 32 0.205 13 3.0 23 1.705 33 0.205 70 3 0 3DFACE 8 iso_base_a 10 3.0 20 1.705 30 0.205 11 1.295 21 2.39623136148263e-17 31 0.205 12 0.75 22 1.38777878078145e-17 32 0.75 13 0.75 23 1.38777878078145e-17 33 0.75 70 13 0 3DFACE 8 iso_base_a 10 3.0 20 1.705 30 0.205 11 0.75 21 1.38777878078145e-17 31 0.75 12 3.0 22 2.25 32 0.75 13 3.0 23 2.25 33 0.75 70 3 0 3DFACE 8 iso_base_a 10 3.0 20 2.25 30 0.75 11 0.75 21 1.38777878078145e-17 31 0.75 12 0.205 22 3.79326200080262e-18 32 1.295 13 0.205 23 3.79326200080262e-18 33 1.295 70 13 0 3DFACE 8 iso_base_a 10 3.0 20 2.25 30 0.75 11 0.205 21 3.79326200080262e-18 31 1.295 12 3.0 22 2.795 32 1.295 13 3.0 23 2.795 33 1.295 70 3 0 3DFACE 8 iso_base_a 10 3.0 20 2.795 30 1.295 11 0.205 21 3.79326200080262e-18 31 1.295 12 0.0 22 0.0 32 1.5 13 0.0 23 0.0 33 1.5 70 13 0 3DFACE 8 iso_base_a 10 3.0 20 2.795 30 1.295 11 0.0 21 0.0 31 1.5 12 3.0 22 3.0 32 1.5 13 3.0 23 3.0 33 1.5 70 3 0 3DFACE 8 iso_base_a 10 3.0 20 3.0 30 1.5 11 0.0 21 0.0 31 1.5 12 0.0 22 1.5 32 3.0 13 0.0 23 1.5 33 3.0 70 13 0 3DFACE 8 iso_base_a 10 3.0 20 3.0 30 1.5 11 0.0 21 1.5 31 3.0 12 1.5 22 3.0 32 3.0 13 1.5 23 3.0 33 3.0 70 3 0 3DFACE 8 iso_base_a 10 1.5 20 3.0 30 3.0 11 0.0 21 1.5 31 3.0 12 0.248866021560526 22 1.74886602156053 32 3.0 13 0.248866021560526 23 1.74886602156053 33 3.0 70 13 0 3DFACE 8 iso_base_a 10 1.5 20 3.0 30 3.0 11 0.248866021560526 21 1.74886602156053 31 3.0 12 0.439339828220179 22 1.93933982822018 32 3.0 13 0.439339828220179 23 1.93933982822018 33 3.0 70 13 0 3DFACE 8 iso_base_a 10 1.5 20 3.0 30 3.0 11 0.439339828220179 21 1.93933982822018 31 3.0 12 0.600815724465256 22 2.10081572446526 32 3.0 13 0.600815724465256 23 2.10081572446526 33 3.0 70 13 0 3DFACE 8 iso_base_a 10 1.5 20 3.0 30 3.0 11 0.600815724465256 21 2.10081572446526 31 3.0 12 0.75 22 2.25 32 3.0 13 0.75 23 2.25 33 3.0 70 13 0 3DFACE 8 iso_base_a 10 1.5 20 3.0 30 3.0 11 0.75 21 2.25 31 3.0 12 0.899184275534744 22 2.39918427553474 32 3.0 13 0.899184275534744 23 2.39918427553474 33 3.0 70 13 0 3DFACE 8 iso_base_a 10 1.5 20 3.0 30 3.0 11 0.899184275534744 21 2.39918427553474 31 3.0 12 1.06066017177982 22 2.56066017177982 32 3.0 13 1.06066017177982 23 2.56066017177982 33 3.0 70 13 0 3DFACE 8 iso_base_a 10 1.5 20 3.0 30 3.0 11 1.06066017177982 21 2.56066017177982 31 3.0 12 1.25113397843947 22 2.75113397843947 32 3.0 13 1.25113397843947 23 2.75113397843947 33 3.0 70 1 0 3DFACE 8 iso_base_a 10 1.5 20 5.55111512312578e-17 30 0.0 11 1.97490347490348 21 7.46935760775808e-17 31 0.679903474903477 12 1.64318975552969 22 2.25211131595965e-17 32 0.205 13 1.64318975552969 23 2.25211131595965e-17 33 0.205 70 1 0 3DFACE 8 iso_base_a 10 1.97490347490348 20 7.46935760775808e-17 30 0.679903474903477 11 1.5 21 5.55111512312578e-17 31 0.0 12 3.0 22 1.5 32 0.0 13 3.0 23 1.5 33 0.0 70 13 0 3DFACE 8 iso_base_a 10 1.97490347490348 20 7.46935760775808e-17 30 0.679903474903477 11 3.0 21 1.5 31 0.0 12 2.11686086360521 22 9.70208606166603e-17 32 0.883139136394791 13 2.11686086360521 23 9.70208606166603e-17 33 0.883139136394791 70 3 0 3DFACE 8 iso_base_a 10 2.11686086360521 20 9.70208606166603e-17 30 0.883139136394791 11 3.0 21 1.5 31 0.0 12 2.54772991850989 22 1.64788632875096e-16 32 1.5 13 2.54772991850989 23 1.64788632875096e-16 33 1.5 70 3 0 3DFACE 8 iso_base_a 10 2.54772991850989 20 1.64788632875096e-16 30 1.5 11 3.0 21 1.5 31 0.0 12 2.64941740918437 22 1.80782203615711e-16 32 1.64558259081563 13 2.64941740918437 23 1.80782203615711e-16 33 1.64558259081563 70 3 0 3DFACE 8 iso_base_a 10 2.64941740918437 20 1.80782203615711e-16 30 1.64558259081563 11 3.0 21 1.5 31 0.0 12 2.795 22 2.03679665726025e-16 32 1.85400833333335 13 2.795 23 2.03679665726025e-16 33 1.85400833333335 70 3 0 3DFACE 8 iso_base_a 10 2.795 20 2.03679665726025e-16 30 1.85400833333335 11 3.0 21 1.5 31 0.0 12 3.0 22 0.205 32 1.85400833333334 13 3.0 23 0.205 33 1.85400833333334 70 15 0 3DFACE 8 iso_base_a 10 2.795 20 2.03679665726025e-16 30 1.85400833333335 11 3.0 21 0.205 31 1.85400833333334 12 2.99999999999999 22 4.71844785465692e-16 32 2.1475 13 2.99999999999999 23 4.71844785465692e-16 33 2.1475 70 1 0 3DFACE 8 iso_base_a 10 3.0 20 0.205 30 1.85400833333334 11 3.0 21 1.5 31 0.0 12 3.0 22 0.883139136394791 32 0.883139136394791 13 3.0 23 0.883139136394791 33 0.883139136394791 70 15 0 3DFACE 8 iso_base_a 10 3.0 20 0.205 30 1.85400833333334 11 3.0 21 0.883139136394791 31 0.883139136394791 12 3.0 22 0.452270081490106 32 1.5 13 3.0 23 0.452270081490106 33 1.5 70 1 0 3DFACE 8 iso_base_a 10 3.0 20 0.883139136394791 30 0.883139136394791 11 3.0 21 1.5 31 0.0 12 3.0 22 1.35681024447031 32 0.205 13 3.0 23 1.35681024447031 33 0.205 70 1 0 3DFACE 8 iso_base_a 10 2.3525 20 5.67320709797468e-17 30 2.795 11 2.36016784552609 21 0.212667845526093 31 3.0 12 2.14749999999999 22 0.0 32 3.0 13 2.14749999999999 23 0.0 33 3.0 70 1 0 3DFACE 8 iso_base_a 10 2.36016784552609 20 0.212667845526093 30 3.0 11 2.3525 21 5.67320709797468e-17 31 2.795 12 2.57375 22 1.17961196366424e-16 32 2.57375 13 2.57375 23 1.17961196366424e-16 33 2.57375 70 13 0 3DFACE 8 iso_base_a 10 2.36016784552609 20 0.212667845526093 30 3.0 11 2.57375 21 1.17961196366424e-16 31 2.57375 12 2.795 22 1.79190321753102e-16 32 2.35249999999999 13 2.795 23 1.79190321753102e-16 33 2.35249999999999 70 13 0 3DFACE 8 iso_base_a 10 2.36016784552609 20 0.212667845526093 30 3.0 11 2.795 21 1.79190321753102e-16 31 2.35249999999999 12 2.99999999999999 22 4.71844785465692e-16 32 2.1475 13 2.99999999999999 23 4.71844785465692e-16 33 2.1475 70 13 0 3DFACE 8 iso_base_a 10 2.36016784552609 20 0.212667845526093 30 3.0 11 2.99999999999999 21 4.71844785465692e-16 31 2.1475 12 3.0 22 0.205 32 2.3525 13 3.0 23 0.205 33 2.3525 70 13 0 3DFACE 8 iso_base_a 10 2.36016784552609 20 0.212667845526093 30 3.0 11 3.0 21 0.205 31 2.3525 12 3.0 22 0.426249999999999 32 2.57375 13 3.0 23 0.426249999999999 33 2.57375 70 13 0 3DFACE 8 iso_base_a 10 2.36016784552609 20 0.212667845526093 30 3.0 11 3.0 21 0.426249999999999 31 2.57375 12 2.57375 22 0.426250000000001 32 3.0 13 2.57375 23 0.426250000000001 33 3.0 70 3 0 3DFACE 8 iso_base_a 10 2.57375 20 0.426250000000001 30 3.0 11 3.0 21 0.426249999999999 31 2.57375 12 2.99999999999999 22 0.647499999999997 32 2.795 13 2.99999999999999 23 0.647499999999997 33 2.795 70 13 0 3DFACE 8 iso_base_a 10 2.57375 20 0.426250000000001 30 3.0 11 2.99999999999999 21 0.647499999999997 31 2.795 12 2.7873321544739 22 0.639832154473909 32 3.0 13 2.7873321544739 23 0.639832154473909 33 3.0 70 3 0 3DFACE 8 iso_base_a 10 2.7873321544739 20 0.639832154473909 30 3.0 11 2.99999999999999 21 0.647499999999997 31 2.795 12 2.99999999999999 22 0.852499999999996 32 3.0 13 2.99999999999999 23 0.852499999999996 33 3.0 70 1 0 3DFACE 8 iso_base_b 10 1.14599166666667 20 3.0 30 0.205 11 0.889337610807103 21 2.97426942202065 31 2.73746865475011e-16 12 0.8525 22 3.0 32 3.33066907387547e-16 13 0.8525 23 3.0 33 3.33066907387547e-16 70 1 0 3DFACE 8 iso_base_b 10 0.889337610807103 20 2.97426942202065 30 2.73746865475011e-16 11 1.14599166666667 21 3.0 31 0.205 12 1.25796592131777 22 2.71678748219946 32 2.35631881739726e-16 13 1.25796592131777 23 2.71678748219946 33 2.35631881739726e-16 70 3 0 3DFACE 8 iso_base_b 10 1.25796592131777 20 2.71678748219946 30 2.35631881739726e-16 11 1.14599166666667 21 3.0 31 0.205 12 1.35441740918437 22 3.0 32 0.350582590815627 13 1.35441740918437 23 3.0 33 0.350582590815627 70 13 0 3DFACE 8 iso_base_b 10 1.25796592131777 20 2.71678748219946 30 2.35631881739726e-16 11 1.35441740918437 21 3.0 31 0.350582590815627 12 1.5 22 2.54772991850989 32 2.10606335113701e-16 13 1.5 23 2.54772991850989 33 2.10606335113701e-16 70 3 0 3DFACE 8 iso_base_b 10 1.5 20 2.54772991850989 30 2.10606335113701e-16 11 1.35441740918437 21 3.0 31 0.350582590815627 12 1.5 22 3.0 32 0.452270081490105 13 1.5 23 3.0 33 0.452270081490105 70 13 0 3DFACE 8 iso_base_b 10 1.5 20 2.54772991850989 30 2.10606335113701e-16 11 1.5 21 3.0 31 0.452270081490105 12 2.11686086360521 22 3.0 32 0.883139136394791 13 2.11686086360521 23 3.0 33 0.883139136394791 70 13 0 3DFACE 8 iso_base_b 10 1.5 20 2.54772991850989 30 2.10606335113701e-16 11 2.11686086360521 21 3.0 31 0.883139136394791 12 1.68298318869529 22 2.41991861092296 32 1.91686460914973e-16 13 1.68298318869529 23 2.41991861092296 33 1.91686460914973e-16 70 3 0 3DFACE 8 iso_base_b 10 1.68298318869529 20 2.41991861092296 30 1.91686460914973e-16 11 2.11686086360521 21 3.0 31 0.883139136394791 12 1.83659840643228 22 2.31262043788199 32 1.75803140620266e-16 13 1.83659840643228 23 2.31262043788199 33 1.75803140620266e-16 70 3 0 3DFACE 8 iso_base_b 10 1.83659840643228 20 2.31262043788199 30 1.75803140620266e-16 11 2.11686086360521 21 3.0 31 0.883139136394791 12 1.97730561612803 22 2.2143383356498 32 1.61254466912702e-16 13 1.97730561612803 23 2.2143383356498 33 1.61254466912702e-16 70 3 0 3DFACE 8 iso_base_b 10 1.97730561612803 20 2.2143383356498 30 1.61254466912702e-16 11 2.11686086360521 21 3.0 31 0.883139136394791 12 2.11686086360521 22 2.11686086360521 32 1.46824902399879e-16 13 2.11686086360521 23 2.11686086360521 33 1.46824902399879e-16 70 3 0 3DFACE 8 iso_base_b 10 2.11686086360521 20 2.11686086360521 30 1.46824902399879e-16 11 2.11686086360521 21 3.0 31 0.883139136394791 12 2.26663244222472 22 2.01224742103046 32 1.31339002048974e-16 13 2.26663244222472 23 2.01224742103046 33 1.31339002048974e-16 70 3 0 3DFACE 8 iso_base_b 10 2.26663244222472 20 2.01224742103046 30 1.31339002048974e-16 11 2.11686086360521 21 3.0 31 0.883139136394791 12 2.32009652509653 22 3.0 32 1.02509652509653 13 2.32009652509653 23 3.0 33 1.02509652509653 70 13 0 3DFACE 8 iso_base_b 10 2.26663244222472 20 2.01224742103046 30 1.31339002048974e-16 11 2.32009652509653 21 3.0 31 1.02509652509653 12 2.44161027590394 22 1.89002774674928 32 1.13246855855755e-16 13 2.44161027590394 23 1.89002774674928 33 1.13246855855755e-16 70 3 0 3DFACE 8 iso_base_b 10 2.44161027590394 20 1.89002774674928 30 1.13246855855755e-16 11 2.32009652509653 21 3.0 31 1.02509652509653 12 2.795 22 3.0 32 1.35681024447031 13 2.795 23 3.0 33 1.35681024447031 70 13 0 3DFACE 8 iso_base_b 10 2.44161027590394 20 1.89002774674928 30 1.13246855855755e-16 11 2.795 21 3.0 31 1.35681024447031 12 2.66751850869864 22 1.73223387052481 32 8.98886699185201e-17 13 2.66751850869864 23 1.73223387052481 33 8.98886699185201e-17 70 3 0 3DFACE 8 iso_base_b 10 2.66751850869864 20 1.73223387052481 30 8.98886699185201e-17 11 2.795 21 3.0 31 1.35681024447031 12 3.0 22 1.5 32 0.0 13 3.0 23 1.5 33 0.0 70 3 0 3DFACE 8 iso_base_b 10 3.0 20 1.5 30 0.0 11 2.795 21 3.0 31 1.35681024447031 12 3.0 22 3.0 32 1.5 13 3.0 23 3.0 33 1.5 70 1 0 3DFACE 8 iso_base_b 10 1.57449302665047 20 0.743659607729131 30 0.0 11 1.5 21 5.55111512312578e-17 31 0.0 12 1.5 22 0.74 32 0.0 13 1.5 23 0.74 33 0.0 70 1 0 3DFACE 8 iso_base_b 10 1.5 20 5.55111512312578e-17 30 0.0 11 1.57449302665047 21 0.743659607729131 31 0.0 12 1.74886602156053 22 0.248866021560525 32 -1.29693882069326e-16 13 1.74886602156053 23 0.248866021560525 33 -1.29693882069326e-16 70 3 0 3DFACE 8 iso_base_b 10 1.74886602156053 20 0.248866021560525 30 -1.29693882069326e-16 11 1.57449302665047 21 0.743659607729131 31 0.0 12 1.64826864473226 22 0.754603186893545 32 0.0 13 1.64826864473226 23 0.754603186893545 33 0.0 70 1 0 3DFACE 8 iso_base_b 10 1.5 20 3.0 30 1.5 11 2.11686086360521 21 3.0 31 0.883139136394791 12 1.5 22 3.0 32 0.452270081490105 13 1.5 23 3.0 33 0.452270081490105 70 0 0 3DFACE 8 iso_base_b 10 1.79083940859747 20 0.797851555291422 30 0.0 11 1.64826864473226 21 0.754603186893545 31 0.0 12 1.5 22 1.5 32 0.0 13 1.5 23 1.5 33 0.0 70 1 0 3DFACE 8 iso_base_b 10 1.64826864473226 20 0.754603186893545 30 0.0 11 1.79083940859747 21 0.797851555291422 31 0.0 12 1.72061635471339 22 0.772725344843521 32 0.0 13 1.72061635471339 23 0.772725344843521 33 0.0 70 1 0 3DFACE 8 iso_base_b 10 1.5 20 3.0 30 2.795 11 1.02509652509652 21 3.0 31 2.32009652509652 12 1.35681024447031 22 3.0 32 2.795 13 1.35681024447031 23 3.0 33 2.795 70 0 0 3DFACE 8 iso_base_b 10 0.883139136394791 20 3.0 30 2.11686086360521 11 1.5 21 3.0 31 2.795 12 1.5 22 3.0 32 1.5 13 1.5 23 3.0 33 1.5 70 1 0 3DFACE 8 iso_base_b 10 1.5 20 3.0 30 2.795 11 0.883139136394791 21 3.0 31 2.11686086360521 12 1.02509652509652 22 3.0 32 2.32009652509652 13 1.02509652509652 23 3.0 33 2.32009652509652 70 1 0 3DFACE 8 iso_base_b 10 1.68298318869529 20 2.41991861092296 30 1.91686460914973e-16 11 1.5 21 2.26 31 0.0 12 1.5 22 2.54772991850989 32 2.10606335113701e-16 13 1.5 23 2.54772991850989 33 2.10606335113701e-16 70 1 0 3DFACE 8 iso_base_b 10 1.5 20 2.26 30 0.0 11 1.68298318869529 21 2.41991861092296 31 1.91686460914973e-16 12 1.57449302665047 22 2.25634039227087 32 0.0 13 1.57449302665047 23 2.25634039227087 33 0.0 70 3 0 3DFACE 8 iso_base_b 10 1.57449302665047 20 2.25634039227087 30 0.0 11 1.68298318869529 21 2.41991861092296 31 1.91686460914973e-16 12 1.64826864473226 22 2.24539681310645 32 0.0 13 1.64826864473226 23 2.24539681310645 33 0.0 70 1 0 3DFACE 8 iso_base_b 10 0.212667845526092 20 2.36016784552609 30 1.10903230691784e-16 11 0.0257305779793495 21 2.1106623891929 31 5.17022605499795e-17 12 0.0 22 2.1475 32 0.0 13 0.0 23 2.1475 33 0.0 70 1 0 3DFACE 8 iso_base_b 10 0.0257305779793495 20 2.1106623891929 30 5.17022605499795e-17 11 0.212667845526092 21 2.36016784552609 31 1.10903230691784e-16 12 0.797851555291422 22 1.79083940859747 32 0.0 13 0.797851555291422 23 1.79083940859747 33 0.0 70 3 0 3DFACE 8 iso_base_b 10 0.797851555291422 20 1.79083940859747 30 0.0 11 0.212667845526092 21 2.36016784552609 31 1.10903230691784e-16 12 0.82973983909525 22 1.85826151998776 32 0.0 13 0.82973983909525 23 1.85826151998776 33 0.0 70 3 0 3DFACE 8 iso_base_b 10 0.82973983909525 20 1.85826151998776 30 0.0 11 0.212667845526092 21 2.36016784552609 31 1.10903230691784e-16 12 0.868083094650066 22 1.9222333770949 32 0.0 13 0.868083094650066 23 1.9222333770949 33 0.0 70 1 0 3DFACE 8 iso_base_b 10 0.74 20 1.5 30 0.0 11 0.580081389077038 21 1.31701681130471 31 -3.03581440100583e-17 12 0.452270081490105 22 1.5 32 -1.14382698113301e-17 13 0.452270081490105 23 1.5 33 -1.14382698113301e-17 70 1 0 3DFACE 8 iso_base_b 10 0.580081389077038 20 1.31701681130471 30 -3.03581440100583e-17 11 0.74 21 1.5 31 0.0 12 0.743659607729131 22 1.42550697334953 32 0.0 13 0.743659607729131 23 1.42550697334953 33 0.0 70 13 0 3DFACE 8 iso_base_b 10 0.580081389077038 20 1.31701681130471 30 -3.03581440100583e-17 11 0.743659607729131 21 1.42550697334953 31 0.0 12 0.754603186893545 22 1.35173135526774 32 0.0 13 0.754603186893545 23 1.35173135526774 33 0.0 70 1 0 3DFACE 8 iso_base_b 10 2.03740115370178 20 2.03740115370178 30 0.0 11 2.13191690534993 21 1.9222333770949 31 0.0 12 1.5 22 1.5 32 0.0 13 1.5 23 1.5 33 0.0 70 1 0 3DFACE 8 iso_base_b 10 2.13191690534993 20 1.9222333770949 30 0.0 11 2.03740115370178 21 2.03740115370178 31 0.0 12 2.08748794455568 22 1.98213889596437 32 0.0 13 2.08748794455568 23 1.98213889596437 33 0.0 70 1 0 3DFACE 8 iso_base_b 10 1.72061635471339 20 0.772725344843521 30 0.0 11 1.74886602156053 21 0.248866021560525 31 -1.29693882069326e-16 12 1.64826864473226 22 0.754603186893545 32 0.0 13 1.64826864473226 23 0.754603186893545 33 0.0 70 1 0 3DFACE 8 iso_base_b 10 1.74886602156053 20 0.248866021560525 30 -1.29693882069326e-16 11 1.72061635471339 21 0.772725344843521 31 0.0 12 1.79083940859747 22 0.797851555291422 32 0.0 13 1.79083940859747 23 0.797851555291422 33 0.0 70 13 0 3DFACE 8 iso_base_b 10 1.74886602156053 20 0.248866021560525 30 -1.29693882069326e-16 11 1.79083940859747 21 0.797851555291422 31 0.0 12 1.93933982822018 22 0.439339828220178 32 -1.0149809463712e-16 13 1.93933982822018 23 0.439339828220178 33 -1.0149809463712e-16 70 1 0 3DFACE 8 iso_base_b 10 2.17026016090475 20 1.14173848001224 30 0.0 11 2.39918427553474 21 0.899184275534743 31 -3.34274422164983e-17 12 2.13191690534993 22 1.0777666229051 32 0.0 13 2.13191690534993 23 1.0777666229051 33 0.0 70 1 0 3DFACE 8 iso_base_b 10 2.39918427553474 20 0.899184275534743 30 -3.34274422164983e-17 11 2.17026016090475 21 1.14173848001224 31 0.0 12 2.20214844470858 22 1.20916059140253 32 0.0 13 2.20214844470858 23 1.20916059140253 33 0.0 70 13 0 3DFACE 8 iso_base_b 10 2.39918427553474 20 0.899184275534743 30 -3.34274422164983e-17 11 2.20214844470858 21 1.20916059140253 31 0.0 12 2.56066017177982 22 1.06066017177982 32 -9.52420782539579e-18 13 2.56066017177982 23 1.06066017177982 33 -9.52420782539579e-18 70 1 0 3DFACE 8 iso_base_b 10 2.25634039227087 20 1.42550697334953 30 0.0 11 2.75113397843947 21 1.25113397843947 31 1.86715796068105e-17 12 2.24539681310646 22 1.35173135526774 32 0.0 13 2.24539681310646 23 1.35173135526774 33 0.0 70 1 0 3DFACE 8 iso_base_b 10 2.75113397843947 20 1.25113397843947 30 1.86715796068105e-17 11 2.25634039227087 21 1.42550697334953 31 0.0 12 2.26 22 1.5 32 0.0 13 2.26 23 1.5 33 0.0 70 13 0 3DFACE 8 iso_base_b 10 2.75113397843947 20 1.25113397843947 30 1.86715796068105e-17 11 2.26 21 1.5 31 0.0 12 3.0 22 1.5 32 0.0 13 3.0 23 1.5 33 0.0 70 1 0 3DFACE 8 iso_base_b 10 0.42625 20 2.57375 30 1.66533453693774e-16 11 0.868083094650066 21 1.9222333770949 31 0.0 12 0.212667845526092 22 2.36016784552609 32 1.10903230691784e-16 13 0.212667845526092 23 2.36016784552609 33 1.10903230691784e-16 70 1 0 3DFACE 8 iso_base_b 10 0.868083094650066 20 1.9222333770949 30 0.0 11 0.42625 21 2.57375 31 1.66533453693774e-16 12 0.91251205544432 22 1.98213889596437 32 0.0 13 0.91251205544432 23 1.98213889596437 33 0.0 70 3 0 3DFACE 8 iso_base_b 10 0.91251205544432 20 1.98213889596437 30 0.0 11 0.42625 21 2.57375 31 1.66533453693774e-16 12 0.962598846298224 22 2.03740115370178 32 0.0 13 0.962598846298224 23 2.03740115370178 33 0.0 70 1 0 3DFACE 8 iso_base_b 10 0.0 20 2.1475 30 0.0 11 0.0 21 1.85400833333333 31 0.205 12 0.0 22 2.1475 32 0.205 13 0.0 23 2.1475 33 0.205 70 0 0 3DFACE 8 iso_base_b 10 2.24539681310646 20 1.35173135526774 30 0.0 11 2.20214844470858 21 1.20916059140253 31 0.0 12 1.5 22 1.5 32 0.0 13 1.5 23 1.5 33 0.0 70 1 0 3DFACE 8 iso_base_b 10 2.20214844470858 20 1.20916059140253 30 0.0 11 2.24539681310646 21 1.35173135526774 31 0.0 12 2.22727465515648 22 1.27938364528661 32 0.0 13 2.22727465515648 23 1.27938364528661 33 0.0 70 1 0 3DFACE 8 iso_base_b 10 1.14173848001224 20 2.17026016090475 30 0.0 11 1.5 21 1.5 31 0.0 12 1.0777666229051 22 2.13191690534993 32 0.0 13 1.0777666229051 23 2.13191690534993 33 0.0 70 1 0 3DFACE 8 iso_base_b 10 1.5 20 1.5 30 0.0 11 1.14173848001224 21 2.17026016090475 31 0.0 12 1.20916059140253 22 2.20214844470858 32 0.0 13 1.20916059140253 23 2.20214844470858 33 0.0 70 1 0 3DFACE 8 iso_base_b 10 2.13191690534993 20 1.0777666229051 30 0.0 11 2.03740115370178 21 0.962598846298224 31 0.0 12 1.5 22 1.5 32 0.0 13 1.5 23 1.5 33 0.0 70 1 0 3DFACE 8 iso_base_b 10 2.03740115370178 20 0.962598846298224 30 0.0 11 2.13191690534993 21 1.0777666229051 31 0.0 12 2.08748794455568 22 1.01786110403563 32 0.0 13 2.08748794455568 23 1.01786110403563 33 0.0 70 1 0 3DFACE 8 iso_base_b 10 2.03740115370178 20 0.962598846298224 30 0.0 11 1.9222333770949 21 0.868083094650066 31 0.0 12 1.5 22 1.5 32 0.0 13 1.5 23 1.5 33 0.0 70 1 0 3DFACE 8 iso_base_b 10 1.9222333770949 20 0.868083094650066 30 0.0 11 2.03740115370178 21 0.962598846298224 31 0.0 12 1.98213889596437 22 0.91251205544432 32 0.0 13 1.98213889596437 23 0.91251205544432 33 0.0 70 1 0 3DFACE 8 iso_base_b 10 0.91251205544432 20 1.98213889596437 30 0.0 11 1.5 21 1.5 31 0.0 12 0.868083094650066 22 1.9222333770949 32 0.0 13 0.868083094650066 23 1.9222333770949 33 0.0 70 1 0 3DFACE 8 iso_base_b 10 1.5 20 1.5 30 0.0 11 0.91251205544432 21 1.98213889596437 31 0.0 12 0.962598846298224 22 2.03740115370178 32 0.0 13 0.962598846298224 23 2.03740115370178 33 0.0 70 1 0 3DFACE 8 iso_base_b 10 0.772725344843521 20 1.72061635471339 30 0.0 11 1.5 21 1.5 31 0.0 12 0.754603186893545 22 1.64826864473226 32 0.0 13 0.754603186893545 23 1.64826864473226 33 0.0 70 1 0 3DFACE 8 iso_base_b 10 1.5 20 1.5 30 0.0 11 0.772725344843521 21 1.72061635471339 31 0.0 12 0.797851555291422 22 1.79083940859747 32 0.0 13 0.797851555291422 23 1.79083940859747 33 0.0 70 1 0 3DFACE 8 iso_base_b 10 0.350582590815627 20 3.0 30 1.35441740918437 11 1.5 21 3.0 31 1.5 12 0.8525 22 3.0 32 0.8525 13 0.8525 23 3.0 33 0.8525 70 1 0 3DFACE 8 iso_base_b 10 1.5 20 3.0 30 1.5 11 0.350582590815627 21 3.0 31 1.35441740918437 12 0.452270081490105 22 3.0 32 1.5 13 0.452270081490105 23 3.0 33 1.5 70 1 0 3DFACE 8 iso_base_b 10 1.5 20 1.5 30 0.0 11 0.772725344843521 21 1.27938364528661 31 0.0 12 0.754603186893545 22 1.35173135526774 32 0.0 13 0.754603186893545 23 1.35173135526774 33 0.0 70 1 0 3DFACE 8 iso_base_b 10 0.772725344843521 20 1.27938364528661 30 0.0 11 1.5 21 1.5 31 0.0 12 0.797851555291422 22 1.20916059140253 32 0.0 13 0.797851555291422 23 1.20916059140253 33 0.0 70 1 0 3DFACE 8 iso_base_b 10 1.64826864473226 20 2.24539681310645 30 0.0 11 1.79083940859747 21 2.20214844470858 31 0.0 12 1.5 22 1.5 32 0.0 13 1.5 23 1.5 33 0.0 70 1 0 3DFACE 8 iso_base_b 10 1.79083940859747 20 2.20214844470858 30 0.0 11 1.64826864473226 21 2.24539681310645 31 0.0 12 1.72061635471339 22 2.22727465515648 32 0.0 13 1.72061635471339 23 2.22727465515648 33 0.0 70 1 0 3DFACE 8 iso_base_b 10 1.5 20 3.0 30 2.795 11 2.1475 21 3.0 31 2.1475 12 1.5 22 3.0 32 1.5 13 1.5 23 3.0 33 1.5 70 0 0 3DFACE 8 iso_base_b 10 1.5 20 3.0 30 2.795 11 2.25 21 3.0 31 2.25 12 2.1475 22 3.0 32 2.1475 13 2.1475 23 3.0 33 2.1475 70 1 0 3DFACE 8 iso_base_b 10 2.25 20 3.0 30 2.25 11 1.5 21 3.0 31 2.795 12 1.705 22 3.0 32 2.795 13 1.705 23 3.0 33 2.795 70 1 0 3DFACE 8 iso_base_b 10 0.6475 20 3.0 30 0.205 11 1.35441740918437 21 3.0 31 0.350582590815627 12 1.14599166666667 22 3.0 32 0.205 13 1.14599166666667 23 3.0 33 0.205 70 1 0 3DFACE 8 iso_base_b 10 1.35441740918437 20 3.0 30 0.350582590815627 11 0.6475 21 3.0 31 0.205 12 0.42625 22 3.0 32 0.42625 13 0.42625 23 3.0 33 0.42625 70 13 0 3DFACE 8 iso_base_b 10 1.35441740918437 20 3.0 30 0.350582590815627 11 0.42625 21 3.0 31 0.42625 12 0.8525 22 3.0 32 0.8525 13 0.8525 23 3.0 33 0.8525 70 1 0 3DFACE 8 iso_base_b 10 2.1475 20 3.0 30 2.1475 11 2.795 21 3.0 31 1.5 12 1.5 22 3.0 32 1.5 13 1.5 23 3.0 33 1.5 70 0 0 3DFACE 8 iso_base_b 10 1.5 20 3.0 30 1.5 11 2.32009652509653 21 3.0 31 1.02509652509653 12 2.11686086360521 22 3.0 32 0.883139136394791 13 2.11686086360521 23 3.0 33 0.883139136394791 70 1 0 3DFACE 8 iso_base_b 10 2.32009652509653 20 3.0 30 1.02509652509653 11 1.5 21 3.0 31 1.5 12 2.795 22 3.0 32 1.5 13 2.795 23 3.0 33 1.5 70 1 0 3DFACE 8 iso_base_b 10 1.9222333770949 20 2.13191690534993 30 0.0 11 2.03740115370178 21 2.03740115370178 31 0.0 12 1.5 22 1.5 32 0.0 13 1.5 23 1.5 33 0.0 70 1 0 3DFACE 8 iso_base_b 10 2.03740115370178 20 2.03740115370178 30 0.0 11 1.9222333770949 21 2.13191690534993 31 0.0 12 1.98213889596437 22 2.08748794455568 32 0.0 13 1.98213889596437 23 2.08748794455568 33 0.0 70 1 0 3DFACE 8 iso_base_b 10 1.64826864473226 20 0.754603186893545 30 0.0 11 1.5 21 0.74 31 0.0 12 1.5 22 1.5 32 0.0 13 1.5 23 1.5 33 0.0 70 1 0 3DFACE 8 iso_base_b 10 1.5 20 0.74 30 0.0 11 1.64826864473226 21 0.754603186893545 31 0.0 12 1.57449302665047 22 0.743659607729131 32 0.0 13 1.57449302665047 23 0.743659607729131 33 0.0 70 1 0 3DFACE 8 iso_base_b 10 0.205 20 3.0 30 0.6475 11 0.8525 21 3.0 31 0.8525 12 0.42625 22 3.0 32 0.42625 13 0.42625 23 3.0 33 0.42625 70 1 0 3DFACE 8 iso_base_b 10 0.8525 20 3.0 30 0.8525 11 0.205 21 3.0 31 0.6475 12 0.205 22 3.0 32 1.14599166666667 13 0.205 23 3.0 33 1.14599166666667 70 13 0 3DFACE 8 iso_base_b 10 0.8525 20 3.0 30 0.8525 11 0.205 21 3.0 31 1.14599166666667 12 0.350582590815627 22 3.0 32 1.35441740918437 13 0.350582590815627 23 3.0 33 1.35441740918437 70 1 0 3DFACE 8 iso_base_b 10 1.5 20 1.5 30 0.0 11 1.42550697334953 21 0.743659607729131 31 0.0 12 1.35173135526774 22 0.754603186893545 32 0.0 13 1.35173135526774 23 0.754603186893545 33 0.0 70 1 0 3DFACE 8 iso_base_b 10 1.42550697334953 20 0.743659607729131 30 0.0 11 1.5 21 1.5 31 0.0 12 1.5 22 0.74 32 0.0 13 1.5 23 0.74 33 0.0 70 1 0 3DFACE 8 iso_base_b 10 2.1475 20 3.0 30 2.1475 11 2.795 21 3.0 31 1.705 12 2.795 22 3.0 32 1.5 13 2.795 23 3.0 33 1.5 70 1 0 3DFACE 8 iso_base_b 10 2.795 20 3.0 30 1.705 11 2.1475 21 3.0 31 2.1475 12 2.25 22 3.0 32 2.25 13 2.25 23 3.0 33 2.25 70 1 0 3DFACE 8 iso_base_b 10 2.795 20 3.0 30 1.5 11 2.795 21 3.0 31 1.35681024447031 12 2.32009652509653 22 3.0 32 1.02509652509653 13 2.32009652509653 23 3.0 33 1.02509652509653 70 0 0 3DFACE 8 iso_base_b 10 1.5 20 1.5 30 0.0 11 1.14173848001224 21 0.82973983909525 31 0.0 12 1.0777666229051 22 0.868083094650066 32 0.0 13 1.0777666229051 23 0.868083094650066 33 0.0 70 1 0 3DFACE 8 iso_base_b 10 1.14173848001224 20 0.82973983909525 30 0.0 11 1.5 21 1.5 31 0.0 12 1.20916059140253 22 0.797851555291422 32 0.0 13 1.20916059140253 23 0.797851555291422 33 0.0 70 1 0 3DFACE 8 iso_base_b 10 0.8525 20 3.0 30 0.8525 11 1.5 21 3.0 31 0.452270081490105 12 1.35441740918437 22 3.0 32 0.350582590815627 13 1.35441740918437 23 3.0 33 0.350582590815627 70 1 0 3DFACE 8 iso_base_b 10 1.5 20 3.0 30 0.452270081490105 11 0.8525 21 3.0 31 0.8525 12 1.5 22 3.0 32 1.5 13 1.5 23 3.0 33 1.5 70 1 0 3DFACE 8 iso_base_b 10 1.01786110403563 20 2.08748794455568 30 0.0 11 1.5 21 1.5 31 0.0 12 0.962598846298224 22 2.03740115370178 32 0.0 13 0.962598846298224 23 2.03740115370178 33 0.0 70 1 0 3DFACE 8 iso_base_b 10 1.5 20 1.5 30 0.0 11 1.01786110403563 21 2.08748794455568 31 0.0 12 1.0777666229051 22 2.13191690534993 32 0.0 13 1.0777666229051 23 2.13191690534993 33 0.0 70 1 0 3DFACE 8 iso_base_b 10 0.883139136394791 20 3.0 30 2.11686086360521 11 1.5 21 3.0 31 1.5 12 0.452270081490105 22 3.0 32 1.5 13 0.452270081490105 23 3.0 33 1.5 70 0 0 3DFACE 8 iso_base_b 10 0.205 20 3.0 30 1.14599166666667 11 0.205 21 3.0 31 0.6475 12 0.0 22 3.0 32 0.8525 13 0.0 23 3.0 33 0.8525 70 0 0 3DFACE 8 iso_base_b 10 1.5 20 1.5 30 0.0 11 0.743659607729131 21 1.42550697334953 31 0.0 12 0.74 22 1.5 32 0.0 13 0.74 23 1.5 33 0.0 70 1 0 3DFACE 8 iso_base_b 10 0.743659607729131 20 1.42550697334953 30 0.0 11 1.5 21 1.5 31 0.0 12 0.754603186893545 22 1.35173135526774 32 0.0 13 0.754603186893545 23 1.35173135526774 33 0.0 70 1 0 3DFACE 8 iso_base_b 10 1.27938364528661 20 2.22727465515648 30 0.0 11 1.5 21 1.5 31 0.0 12 1.20916059140253 22 2.20214844470858 32 0.0 13 1.20916059140253 23 2.20214844470858 33 0.0 70 1 0 3DFACE 8 iso_base_b 10 1.5 20 1.5 30 0.0 11 1.27938364528661 21 2.22727465515648 31 0.0 12 1.35173135526774 22 2.24539681310645 32 0.0 13 1.35173135526774 23 2.24539681310645 33 0.0 70 1 0 3DFACE 8 iso_base_b 10 0.0 20 1.5 30 0.452270081490105 11 0.0 21 0.883139136394791 31 0.883139136394791 12 0.0 22 1.5 32 1.5 13 0.0 23 1.5 33 1.5 70 0 0 3DFACE 8 iso_base_b 10 1.79083940859747 20 2.20214844470858 30 0.0 11 1.9222333770949 21 2.13191690534993 31 0.0 12 1.5 22 1.5 32 0.0 13 1.5 23 1.5 33 0.0 70 1 0 3DFACE 8 iso_base_b 10 1.9222333770949 20 2.13191690534993 30 0.0 11 1.79083940859747 21 2.20214844470858 31 0.0 12 1.85826151998776 22 2.17026016090475 32 0.0 13 1.85826151998776 23 2.17026016090475 33 0.0 70 1 0 3DFACE 8 iso_base_b 10 0.0 20 0.205 30 1.35681024447031 11 1.5 21 5.55111512312578e-17 31 0.0 12 0.0 22 0.0 32 1.5 13 0.0 23 0.0 33 1.5 70 1 0 3DFACE 8 iso_base_b 10 1.5 20 5.55111512312578e-17 30 0.0 11 0.0 21 0.205 31 1.35681024447031 12 1.26776612947519 22 0.332481491301359 32 -1.32155935006511e-16 13 1.26776612947519 23 0.332481491301359 33 -1.32155935006511e-16 70 3 0 3DFACE 8 iso_base_b 10 1.26776612947519 20 0.332481491301359 30 -1.32155935006511e-16 11 0.0 21 0.205 31 1.35681024447031 12 0.0 22 0.883139136394791 32 0.883139136394791 13 0.0 23 0.883139136394791 33 0.883139136394791 70 13 0 3DFACE 8 iso_base_b 10 1.26776612947519 20 0.332481491301359 30 -1.32155935006511e-16 11 0.0 21 0.883139136394791 31 0.883139136394791 12 1.10997225325072 22 0.558389724096058 32 -1.08797749069277e-16 13 1.10997225325072 23 0.558389724096058 33 -1.08797749069277e-16 70 3 0 3DFACE 8 iso_base_b 10 1.10997225325072 20 0.558389724096058 30 -1.08797749069277e-16 11 0.0 21 0.883139136394791 31 0.883139136394791 12 0.987752578969539 22 0.733367557775276 32 -9.07056028760568e-17 13 0.987752578969539 23 0.733367557775276 33 -9.07056028760568e-17 70 3 0 3DFACE 8 iso_base_b 10 0.987752578969539 20 0.733367557775276 30 -9.07056028760568e-17 11 0.0 21 0.883139136394791 31 0.883139136394791 12 0.883139136394791 22 0.883139136394791 32 -7.52197025251519e-17 13 0.883139136394791 23 0.883139136394791 33 -7.52197025251519e-17 70 3 0 3DFACE 8 iso_base_b 10 0.883139136394791 20 0.883139136394791 30 -7.52197025251519e-17 11 0.0 21 0.883139136394791 31 0.883139136394791 12 0.785661664350193 22 1.02269438387197 32 -6.07901380123296e-17 13 0.785661664350193 23 1.02269438387197 33 -6.07901380123296e-17 70 3 0 3DFACE 8 iso_base_b 10 0.785661664350193 20 1.02269438387197 30 -6.07901380123296e-17 11 0.0 21 0.883139136394791 31 0.883139136394791 12 0.0 22 1.5 32 0.452270081490105 13 0.0 23 1.5 33 0.452270081490105 70 13 0 3DFACE 8 iso_base_b 10 0.785661664350193 20 1.02269438387197 30 -6.07901380123296e-17 11 0.0 21 1.5 31 0.452270081490105 12 0.687379562118009 22 1.16340159356772 32 -4.6241464304765e-17 13 0.687379562118009 23 1.16340159356772 33 -4.6241464304765e-17 70 3 0 3DFACE 8 iso_base_b 10 0.687379562118009 20 1.16340159356772 30 -4.6241464304765e-17 11 0.0 21 1.5 31 0.452270081490105 12 0.580081389077038 22 1.31701681130471 32 -3.03581440100583e-17 13 0.580081389077038 23 1.31701681130471 33 -3.03581440100583e-17 70 3 0 3DFACE 8 iso_base_b 10 0.580081389077038 20 1.31701681130471 30 -3.03581440100583e-17 11 0.0 21 1.5 31 0.452270081490105 12 0.452270081490105 22 1.5 32 -1.14382698113301e-17 13 0.452270081490105 23 1.5 33 -1.14382698113301e-17 70 3 0 3DFACE 8 iso_base_b 10 0.452270081490105 20 1.5 30 -1.14382698113301e-17 11 0.0 21 1.5 31 0.452270081490105 12 0.0 22 1.85400833333333 32 0.205 13 0.0 23 1.85400833333333 33 0.205 70 13 0 3DFACE 8 iso_base_b 10 0.452270081490105 20 1.5 30 -1.14382698113301e-17 11 0.0 21 1.85400833333333 31 0.205 12 0.283212517800539 22 1.74203407868223 32 1.35872768146951e-17 13 0.283212517800539 23 1.74203407868223 33 1.35872768146951e-17 70 3 0 3DFACE 8 iso_base_b 10 0.283212517800539 20 1.74203407868223 30 1.35872768146951e-17 11 0.0 21 1.85400833333333 31 0.205 12 0.0257305779793495 22 2.1106623891929 32 5.17022605499795e-17 13 0.0257305779793495 23 2.1106623891929 33 5.17022605499795e-17 70 3 0 3DFACE 8 iso_base_b 10 0.0257305779793495 20 2.1106623891929 30 5.17022605499795e-17 11 0.0 21 1.85400833333333 31 0.205 12 0.0 22 2.1475 32 0.0 13 0.0 23 2.1475 33 0.0 70 1 0 3DFACE 8 iso_base_b 10 1.83659840643228 20 2.31262043788199 30 1.75803140620266e-16 11 1.85826151998776 21 2.17026016090475 31 0.0 12 1.79083940859747 22 2.20214844470858 32 0.0 13 1.79083940859747 23 2.20214844470858 33 0.0 70 1 0 3DFACE 8 iso_base_b 10 1.85826151998776 20 2.17026016090475 30 0.0 11 1.83659840643228 21 2.31262043788199 31 1.75803140620266e-16 12 1.97730561612803 22 2.2143383356498 32 1.61254466912702e-16 13 1.97730561612803 23 2.2143383356498 33 1.61254466912702e-16 70 13 0 3DFACE 8 iso_base_b 10 1.85826151998776 20 2.17026016090475 30 0.0 11 1.97730561612803 21 2.2143383356498 31 1.61254466912702e-16 12 1.9222333770949 22 2.13191690534993 32 0.0 13 1.9222333770949 23 2.13191690534993 33 0.0 70 1 0 3DFACE 8 iso_base_b 10 1.98213889596437 20 0.91251205544432 30 0.0 11 2.10081572446526 21 0.600815724465256 31 -7.75948602460171e-17 12 1.9222333770949 22 0.868083094650066 32 0.0 13 1.9222333770949 23 0.868083094650066 33 0.0 70 1 0 3DFACE 8 iso_base_b 10 2.10081572446526 20 0.600815724465256 30 -7.75948602460171e-17 11 1.98213889596437 21 0.91251205544432 31 0.0 12 2.03740115370178 22 0.962598846298224 32 0.0 13 2.03740115370178 23 0.962598846298224 33 0.0 70 13 0 3DFACE 8 iso_base_b 10 2.10081572446526 20 0.600815724465256 30 -7.75948602460171e-17 11 2.03740115370178 21 0.962598846298224 31 0.0 12 2.25 22 0.75 32 -5.55111512312576e-17 13 2.25 23 0.75 33 -5.55111512312576e-17 70 1 0 3DFACE 8 iso_base_b 10 2.08748794455568 20 1.01786110403563 30 0.0 11 2.25 21 0.75 31 -5.55111512312576e-17 12 2.03740115370178 22 0.962598846298224 32 0.0 13 2.03740115370178 23 0.962598846298224 33 0.0 70 1 0 3DFACE 8 iso_base_b 10 2.25 20 0.75 30 -5.55111512312576e-17 11 2.08748794455568 21 1.01786110403563 31 0.0 12 2.13191690534993 22 1.0777666229051 32 0.0 13 2.13191690534993 23 1.0777666229051 33 0.0 70 13 0 3DFACE 8 iso_base_b 10 2.25 20 0.75 30 -5.55111512312576e-17 11 2.13191690534993 21 1.0777666229051 31 0.0 12 2.39918427553474 22 0.899184275534743 32 -3.34274422164983e-17 13 2.39918427553474 23 0.899184275534743 33 -3.34274422164983e-17 70 1 0 3DFACE 8 iso_base_b 10 2.26663244222472 20 2.01224742103046 30 1.31339002048974e-16 11 2.17026016090475 21 1.85826151998776 31 0.0 12 2.13191690534993 22 1.9222333770949 32 0.0 13 2.13191690534993 23 1.9222333770949 33 0.0 70 1 0 3DFACE 8 iso_base_b 10 2.17026016090475 20 1.85826151998776 30 0.0 11 2.26663244222472 21 2.01224742103046 31 1.31339002048974e-16 12 2.20214844470858 22 1.79083940859747 32 0.0 13 2.20214844470858 23 1.79083940859747 33 0.0 70 3 0 3DFACE 8 iso_base_b 10 2.20214844470858 20 1.79083940859747 30 0.0 11 2.26663244222472 21 2.01224742103046 31 1.31339002048974e-16 12 2.44161027590394 22 1.89002774674928 32 1.13246855855755e-16 13 2.44161027590394 23 1.89002774674928 33 1.13246855855755e-16 70 1 0 3DFACE 8 iso_base_b 10 2.44161027590394 20 1.89002774674928 30 1.13246855855755e-16 11 2.22727465515648 21 1.72061635471339 31 0.0 12 2.20214844470858 22 1.79083940859747 32 0.0 13 2.20214844470858 23 1.79083940859747 33 0.0 70 1 0 3DFACE 8 iso_base_b 10 2.22727465515648 20 1.72061635471339 30 0.0 11 2.44161027590394 21 1.89002774674928 31 1.13246855855755e-16 12 2.24539681310645 22 1.64826864473226 32 0.0 13 2.24539681310645 23 1.64826864473226 33 0.0 70 3 0 3DFACE 8 iso_base_b 10 2.24539681310645 20 1.64826864473226 30 0.0 11 2.44161027590394 21 1.89002774674928 31 1.13246855855755e-16 12 2.66751850869864 22 1.73223387052481 32 8.98886699185201e-17 13 2.66751850869864 23 1.73223387052481 33 8.98886699185201e-17 70 1 0 3DFACE 8 iso_base_b 10 0.868083094650066 20 1.0777666229051 30 0.0 11 0.883139136394791 21 0.883139136394791 31 -7.52197025251519e-17 12 0.785661664350193 22 1.02269438387197 32 -6.07901380123296e-17 13 0.785661664350193 23 1.02269438387197 33 -6.07901380123296e-17 70 1 0 3DFACE 8 iso_base_b 10 0.883139136394791 20 0.883139136394791 30 -7.52197025251519e-17 11 0.868083094650066 21 1.0777666229051 31 0.0 12 0.91251205544432 22 1.01786110403563 32 0.0 13 0.91251205544432 23 1.01786110403563 33 0.0 70 13 0 3DFACE 8 iso_base_b 10 0.883139136394791 20 0.883139136394791 30 -7.52197025251519e-17 11 0.91251205544432 21 1.01786110403563 31 0.0 12 0.962598846298224 22 0.962598846298224 32 0.0 13 0.962598846298224 23 0.962598846298224 33 0.0 70 1 0 3DFACE 8 iso_base_b 10 0.962598846298224 20 0.962598846298224 30 0.0 11 0.987752578969539 21 0.733367557775276 31 -9.07056028760568e-17 12 0.883139136394791 22 0.883139136394791 32 -7.52197025251519e-17 13 0.883139136394791 23 0.883139136394791 33 -7.52197025251519e-17 70 1 0 3DFACE 8 iso_base_b 10 0.987752578969539 20 0.733367557775276 30 -9.07056028760568e-17 11 0.962598846298224 21 0.962598846298224 31 0.0 12 1.01786110403563 22 0.91251205544432 32 0.0 13 1.01786110403563 23 0.91251205544432 33 0.0 70 13 0 3DFACE 8 iso_base_b 10 0.987752578969539 20 0.733367557775276 30 -9.07056028760568e-17 11 1.01786110403563 21 0.91251205544432 31 0.0 12 1.0777666229051 22 0.868083094650066 32 0.0 13 1.0777666229051 23 0.868083094650066 33 0.0 70 1 0 3DFACE 8 iso_base_b 10 1.5 20 2.54772991850989 30 2.10606335113701e-16 11 1.35173135526774 21 2.24539681310645 31 0.0 12 1.25796592131777 22 2.71678748219946 32 2.35631881739726e-16 13 1.25796592131777 23 2.71678748219946 33 2.35631881739726e-16 70 1 0 3DFACE 8 iso_base_b 10 1.35173135526774 20 2.24539681310645 30 0.0 11 1.5 21 2.54772991850989 31 2.10606335113701e-16 12 1.42550697334953 22 2.25634039227087 32 0.0 13 1.42550697334953 23 2.25634039227087 33 0.0 70 3 0 3DFACE 8 iso_base_b 10 1.42550697334953 20 2.25634039227087 30 0.0 11 1.5 21 2.54772991850989 31 2.10606335113701e-16 12 1.5 22 2.26 32 0.0 13 1.5 23 2.26 33 0.0 70 1 0 3DFACE 8 iso_base_b 10 1.0777666229051 20 0.868083094650066 30 0.0 11 1.10997225325072 21 0.558389724096058 31 -1.08797749069277e-16 12 0.987752578969539 22 0.733367557775276 32 -9.07056028760568e-17 13 0.987752578969539 23 0.733367557775276 33 -9.07056028760568e-17 70 1 0 3DFACE 8 iso_base_b 10 1.10997225325072 20 0.558389724096058 30 -1.08797749069277e-16 11 1.0777666229051 21 0.868083094650066 31 0.0 12 1.14173848001224 22 0.82973983909525 32 0.0 13 1.14173848001224 23 0.82973983909525 33 0.0 70 13 0 3DFACE 8 iso_base_b 10 1.10997225325072 20 0.558389724096058 30 -1.08797749069277e-16 11 1.14173848001224 21 0.82973983909525 31 0.0 12 1.20916059140253 22 0.797851555291422 32 0.0 13 1.20916059140253 23 0.797851555291422 33 0.0 70 1 0 3DFACE 8 iso_base_b 10 2.66751850869864 20 1.73223387052481 30 8.98886699185201e-17 11 2.25634039227087 21 1.57449302665047 31 0.0 12 2.24539681310645 22 1.64826864473226 32 0.0 13 2.24539681310645 23 1.64826864473226 33 0.0 70 1 0 3DFACE 8 iso_base_b 10 2.25634039227087 20 1.57449302665047 30 0.0 11 2.66751850869864 21 1.73223387052481 31 8.98886699185201e-17 12 2.26 22 1.5 32 0.0 13 2.26 23 1.5 33 0.0 70 3 0 3DFACE 8 iso_base_b 10 2.26 20 1.5 30 0.0 11 2.66751850869864 21 1.73223387052481 31 8.98886699185201e-17 12 3.0 22 1.5 32 0.0 13 3.0 23 1.5 33 0.0 70 1 0 3DFACE 8 iso_base_b 10 2.24539681310645 20 1.64826864473226 30 0.0 11 2.26 21 1.5 31 0.0 12 1.5 22 1.5 32 0.0 13 1.5 23 1.5 33 0.0 70 1 0 3DFACE 8 iso_base_b 10 2.26 20 1.5 30 0.0 11 2.24539681310645 21 1.64826864473226 31 0.0 12 2.25634039227087 22 1.57449302665047 32 0.0 13 2.25634039227087 23 1.57449302665047 33 0.0 70 1 0 3DFACE 8 iso_base_b 10 1.85826151998776 20 0.82973983909525 30 0.0 11 1.93933982822018 21 0.439339828220178 31 -1.0149809463712e-16 12 1.79083940859747 22 0.797851555291422 32 0.0 13 1.79083940859747 23 0.797851555291422 33 0.0 70 1 0 3DFACE 8 iso_base_b 10 1.93933982822018 20 0.439339828220178 30 -1.0149809463712e-16 11 1.85826151998776 21 0.82973983909525 31 0.0 12 1.9222333770949 22 0.868083094650066 32 0.0 13 1.9222333770949 23 0.868083094650066 33 0.0 70 13 0 3DFACE 8 iso_base_b 10 1.93933982822018 20 0.439339828220178 30 -1.0149809463712e-16 11 1.9222333770949 21 0.868083094650066 31 0.0 12 2.10081572446526 22 0.600815724465256 32 -7.75948602460171e-17 13 2.10081572446526 23 0.600815724465256 33 -7.75948602460171e-17 70 1 0 3DFACE 8 iso_base_b 10 1.68298318869529 20 2.41991861092296 30 1.91686460914973e-16 11 1.72061635471339 21 2.22727465515648 31 0.0 12 1.64826864473226 22 2.24539681310645 32 0.0 13 1.64826864473226 23 2.24539681310645 33 0.0 70 1 0 3DFACE 8 iso_base_b 10 1.72061635471339 20 2.22727465515648 30 0.0 11 1.68298318869529 21 2.41991861092296 31 1.91686460914973e-16 12 1.83659840643228 22 2.31262043788199 32 1.75803140620266e-16 13 1.83659840643228 23 2.31262043788199 33 1.75803140620266e-16 70 13 0 3DFACE 8 iso_base_b 10 1.72061635471339 20 2.22727465515648 30 0.0 11 1.83659840643228 21 2.31262043788199 31 1.75803140620266e-16 12 1.79083940859747 22 2.20214844470858 32 0.0 13 1.79083940859747 23 2.20214844470858 33 0.0 70 1 0 3DFACE 8 iso_base_b 10 1.9222333770949 20 0.868083094650066 30 0.0 11 1.79083940859747 21 0.797851555291422 31 0.0 12 1.5 22 1.5 32 0.0 13 1.5 23 1.5 33 0.0 70 1 0 3DFACE 8 iso_base_b 10 1.79083940859747 20 0.797851555291422 30 0.0 11 1.9222333770949 21 0.868083094650066 31 0.0 12 1.85826151998776 22 0.82973983909525 32 0.0 13 1.85826151998776 23 0.82973983909525 33 0.0 70 1 0 3DFACE 8 iso_base_b 10 0.743659607729131 20 1.57449302665047 30 0.0 11 1.5 21 1.5 31 0.0 12 0.74 22 1.5 32 0.0 13 0.74 23 1.5 33 0.0 70 1 0 3DFACE 8 iso_base_b 10 1.5 20 1.5 30 0.0 11 0.743659607729131 21 1.57449302665047 31 0.0 12 0.754603186893545 22 1.64826864473226 32 0.0 13 0.754603186893545 23 1.64826864473226 33 0.0 70 1 0 3DFACE 8 iso_base_b 10 1.35173135526774 20 0.754603186893545 30 0.0 11 1.5 21 5.55111512312578e-17 31 0.0 12 1.26776612947519 22 0.332481491301359 32 -1.32155935006511e-16 13 1.26776612947519 23 0.332481491301359 33 -1.32155935006511e-16 70 1 0 3DFACE 8 iso_base_b 10 1.5 20 5.55111512312578e-17 30 0.0 11 1.35173135526774 21 0.754603186893545 31 0.0 12 1.42550697334953 22 0.743659607729131 32 0.0 13 1.42550697334953 23 0.743659607729131 33 0.0 70 13 0 3DFACE 8 iso_base_b 10 1.5 20 5.55111512312578e-17 30 0.0 11 1.42550697334953 21 0.743659607729131 31 0.0 12 1.5 22 0.74 32 0.0 13 1.5 23 0.74 33 0.0 70 1 0 3DFACE 8 iso_base_b 10 1.5 20 5.55111512312578e-17 30 0.0 11 0.0 21 0.205 31 1.705 12 0.0 22 0.0 32 1.5 13 0.0 23 0.0 33 1.5 70 1 0 3DFACE 8 iso_base_b 10 0.0 20 0.205 30 1.705 11 1.5 21 5.55111512312578e-17 31 0.0 12 1.74886602156053 22 0.248866021560525 32 -1.29693882069326e-16 13 1.74886602156053 23 0.248866021560525 33 -1.29693882069326e-16 70 13 0 3DFACE 8 iso_base_b 10 0.0 20 0.205 30 1.705 11 1.74886602156053 21 0.248866021560525 31 -1.29693882069326e-16 12 0.0 22 0.75 32 2.25 13 0.0 23 0.75 33 2.25 70 3 0 3DFACE 8 iso_base_b 10 0.0 20 0.75 30 2.25 11 1.74886602156053 21 0.248866021560525 31 -1.29693882069326e-16 12 1.93933982822018 22 0.439339828220178 32 -1.0149809463712e-16 13 1.93933982822018 23 0.439339828220178 33 -1.0149809463712e-16 70 13 0 3DFACE 8 iso_base_b 10 0.0 20 0.75 30 2.25 11 1.93933982822018 21 0.439339828220178 31 -1.0149809463712e-16 12 2.10081572446526 22 0.600815724465256 32 -7.75948602460171e-17 13 2.10081572446526 23 0.600815724465256 33 -7.75948602460171e-17 70 13 0 3DFACE 8 iso_base_b 10 0.0 20 0.75 30 2.25 11 2.10081572446526 21 0.600815724465256 31 -7.75948602460171e-17 12 2.25 22 0.75 32 -5.55111512312576e-17 13 2.25 23 0.75 33 -5.55111512312576e-17 70 13 0 3DFACE 8 iso_base_b 10 0.0 20 0.75 30 2.25 11 2.25 21 0.75 31 -5.55111512312576e-17 12 2.39918427553474 22 0.899184275534743 32 -3.34274422164983e-17 13 2.39918427553474 23 0.899184275534743 33 -3.34274422164983e-17 70 13 0 3DFACE 8 iso_base_b 10 0.0 20 0.75 30 2.25 11 2.39918427553474 21 0.899184275534743 31 -3.34274422164983e-17 12 0.0 22 1.295 32 2.795 13 0.0 23 1.295 33 2.795 70 3 0 3DFACE 8 iso_base_b 10 0.0 20 1.295 30 2.795 11 2.39918427553474 21 0.899184275534743 31 -3.34274422164983e-17 12 2.56066017177982 22 1.06066017177982 32 -9.52420782539579e-18 13 2.56066017177982 23 1.06066017177982 33 -9.52420782539579e-18 70 13 0 3DFACE 8 iso_base_b 10 0.0 20 1.295 30 2.795 11 2.56066017177982 21 1.06066017177982 31 -9.52420782539579e-18 12 2.75113397843947 22 1.25113397843947 32 1.86715796068105e-17 13 2.75113397843947 23 1.25113397843947 33 1.86715796068105e-17 70 13 0 3DFACE 8 iso_base_b 10 0.0 20 1.295 30 2.795 11 2.75113397843947 21 1.25113397843947 31 1.86715796068105e-17 12 3.0 22 1.5 32 0.0 13 3.0 23 1.5 33 0.0 70 13 0 3DFACE 8 iso_base_b 10 0.0 20 1.295 30 2.795 11 3.0 21 1.5 31 0.0 12 0.0 22 1.5 32 3.0 13 0.0 23 1.5 33 3.0 70 3 0 3DFACE 8 iso_base_b 10 0.0 20 1.5 30 3.0 11 3.0 21 1.5 31 0.0 12 3.0 22 3.0 32 1.5 13 3.0 23 3.0 33 1.5 70 13 0 3DFACE 8 iso_base_b 10 0.0 20 1.5 30 3.0 11 3.0 21 3.0 31 1.5 12 1.705 22 3.0 32 2.795 13 1.705 23 3.0 33 2.795 70 15 0 3DFACE 8 iso_base_b 10 1.705 20 3.0 30 2.795 11 3.0 21 3.0 31 1.5 12 2.25 22 3.0 32 2.25 13 2.25 23 3.0 33 2.25 70 3 0 3DFACE 8 iso_base_b 10 2.25 20 3.0 30 2.25 11 3.0 21 3.0 31 1.5 12 2.795 22 3.0 32 1.705 13 2.795 23 3.0 33 1.705 70 1 0 3DFACE 8 iso_base_b 10 1.5 20 3.0 30 3.0 11 0.0 21 1.5 31 3.0 12 1.705 22 3.0 32 2.795 13 1.705 23 3.0 33 2.795 70 2 0 3DFACE 8 iso_base_b 10 1.5 20 3.0 30 3.0 11 0.0 21 1.64318975552969 31 2.795 12 0.0 22 1.5 32 3.0 13 0.0 23 1.5 33 3.0 70 1 0 3DFACE 8 iso_base_b 10 0.0 20 1.64318975552969 30 2.795 11 1.5 21 3.0 31 3.0 12 0.0 22 2.11686086360521 32 2.11686086360521 13 0.0 23 2.11686086360521 33 2.11686086360521 70 3 0 3DFACE 8 iso_base_b 10 0.0 20 2.11686086360521 30 2.11686086360521 11 1.5 21 3.0 31 3.0 12 0.0 22 2.5477299185099 32 1.5 13 0.0 23 2.5477299185099 33 1.5 70 3 0 3DFACE 8 iso_base_b 10 0.0 20 2.5477299185099 30 1.5 11 1.5 21 3.0 31 3.0 12 0.0 22 2.795 32 1.14599166666667 13 0.0 23 2.795 33 1.14599166666667 70 3 0 3DFACE 8 iso_base_b 10 0.0 20 2.795 30 1.14599166666667 11 1.5 21 3.0 31 3.0 12 1.35681024447031 22 3.0 32 2.795 13 1.35681024447031 23 3.0 33 2.795 70 13 0 3DFACE 8 iso_base_b 10 1.35681024447031 20 3.0 30 2.795 11 0.0 21 3.0 31 0.8525 12 0.0 22 2.795 32 1.14599166666667 13 0.0 23 2.795 33 1.14599166666667 70 13 0 3DFACE 8 iso_base_b 10 0.0 20 3.0 30 0.8525 11 1.35681024447031 21 3.0 31 2.795 12 1.02509652509652 22 3.0 32 2.32009652509652 13 1.02509652509652 23 3.0 33 2.32009652509652 70 13 0 3DFACE 8 iso_base_b 10 0.0 20 3.0 30 0.8525 11 1.02509652509652 21 3.0 31 2.32009652509652 12 0.883139136394791 22 3.0 32 2.11686086360521 13 0.883139136394791 23 3.0 33 2.11686086360521 70 13 0 3DFACE 8 iso_base_b 10 0.0 20 3.0 30 0.8525 11 0.883139136394791 21 3.0 31 2.11686086360521 12 0.452270081490105 22 3.0 32 1.5 13 0.452270081490105 23 3.0 33 1.5 70 13 0 3DFACE 8 iso_base_b 10 0.0 20 3.0 30 0.8525 11 0.452270081490105 21 3.0 31 1.5 12 0.350582590815627 22 3.0 32 1.35441740918437 13 0.350582590815627 23 3.0 33 1.35441740918437 70 13 0 3DFACE 8 iso_base_b 10 0.0 20 3.0 30 0.8525 11 0.350582590815627 21 3.0 31 1.35441740918437 12 0.205 22 3.0 32 1.14599166666667 13 0.205 23 3.0 33 1.14599166666667 70 1 0 3DFACE 8 iso_base_b 10 0.0 20 1.5 30 2.795 11 0.0 21 1.295 31 2.795 12 0.0 22 1.5 32 3.0 13 0.0 23 1.5 33 3.0 70 0 0 3DFACE 8 iso_base_b 10 0.0 20 2.5477299185099 30 1.5 11 0.0 21 2.57375 31 0.42625 12 0.0 22 1.5 32 1.5 13 0.0 23 1.5 33 1.5 70 1 0 3DFACE 8 iso_base_b 10 0.0 20 2.57375 30 0.42625 11 0.0 21 2.5477299185099 31 1.5 12 0.0 22 2.795 32 1.14599166666667 13 0.0 23 2.795 33 1.14599166666667 70 13 0 3DFACE 8 iso_base_b 10 0.0 20 2.57375 30 0.42625 11 0.0 21 2.795 31 1.14599166666667 12 0.0 22 2.795 32 0.6475 13 0.0 23 2.795 33 0.6475 70 3 0 3DFACE 8 iso_base_b 10 0.0 20 2.795 30 0.6475 11 0.0 21 2.795 31 1.14599166666667 12 0.0 22 2.795 32 0.8525 13 0.0 23 2.795 33 0.8525 70 1 0 3DFACE 8 iso_base_b 10 0.0 20 1.64318975552969 30 2.795 11 0.0 21 1.5 31 2.795 12 0.0 22 1.5 32 3.0 13 0.0 23 1.5 33 3.0 70 0 0 3DFACE 8 iso_base_b 10 0.0 20 3.0 30 0.8525 11 0.0 21 2.795 31 0.8525 12 0.0 22 2.795 32 1.14599166666667 13 0.0 23 2.795 33 1.14599166666667 70 0 0 3DFACE 8 iso_base_b 10 0.0 20 1.64318975552969 30 2.795 11 0.0 21 1.5 31 1.5 12 0.0 22 1.5 32 2.795 13 0.0 23 1.5 33 2.795 70 1 0 3DFACE 8 iso_base_b 10 0.0 20 1.5 30 1.5 11 0.0 21 1.64318975552969 31 2.795 12 0.0 22 2.11686086360521 32 2.11686086360521 13 0.0 23 2.11686086360521 33 2.11686086360521 70 1 0 3DFACE 8 iso_base_b 10 0.0 20 2.57375 30 0.42625 11 0.0 21 1.5 31 0.452270081490105 12 0.0 22 1.5 32 1.5 13 0.0 23 1.5 33 1.5 70 1 0 3DFACE 8 iso_base_b 10 0.0 20 1.5 30 0.452270081490105 11 0.0 21 2.57375 31 0.42625 12 0.0 22 1.85400833333333 32 0.205 13 0.0 23 1.85400833333333 33 0.205 70 3 0 3DFACE 8 iso_base_b 10 0.0 20 1.85400833333333 30 0.205 11 0.0 21 2.57375 31 0.42625 12 0.0 22 2.1475 32 0.205 13 0.0 23 2.1475 33 0.205 70 3 0 3DFACE 8 iso_base_b 10 0.0 20 2.1475 30 0.205 11 0.0 21 2.57375 31 0.42625 12 0.0 22 2.3525 32 0.205 13 0.0 23 2.3525 33 0.205 70 1 0 3DFACE 8 iso_base_b 10 0.0 20 0.205 30 1.705 11 0.0 21 0.205 31 1.5 12 0.0 22 0.0 32 1.5 13 0.0 23 0.0 33 1.5 70 0 0 3DFACE 8 iso_base_b 10 0.0 20 3.0 30 0.8525 11 0.0 21 2.795 31 0.6475 12 0.0 22 2.795 32 0.8525 13 0.0 23 2.795 33 0.8525 70 0 0 3DFACE 8 iso_base_b 10 1.20916059140253 20 0.797851555291422 30 0.0 11 1.26776612947519 21 0.332481491301359 31 -1.32155935006511e-16 12 1.10997225325072 22 0.558389724096058 32 -1.08797749069277e-16 13 1.10997225325072 23 0.558389724096058 33 -1.08797749069277e-16 70 1 0 3DFACE 8 iso_base_b 10 1.26776612947519 20 0.332481491301359 30 -1.32155935006511e-16 11 1.20916059140253 21 0.797851555291422 31 0.0 12 1.27938364528661 22 0.772725344843521 32 0.0 13 1.27938364528661 23 0.772725344843521 33 0.0 70 13 0 3DFACE 8 iso_base_b 10 1.26776612947519 20 0.332481491301359 30 -1.32155935006511e-16 11 1.27938364528661 21 0.772725344843521 31 0.0 12 1.35173135526774 22 0.754603186893545 32 0.0 13 1.35173135526774 23 0.754603186893545 33 0.0 70 1 0 3DFACE 8 iso_base_b 10 1.25796592131777 20 2.71678748219946 30 2.35631881739726e-16 11 1.20916059140253 21 2.20214844470858 31 0.0 12 0.889337610807103 22 2.97426942202065 32 2.73746865475011e-16 13 0.889337610807103 23 2.97426942202065 33 2.73746865475011e-16 70 1 0 3DFACE 8 iso_base_b 10 1.20916059140253 20 2.20214844470858 30 0.0 11 1.25796592131777 21 2.71678748219946 31 2.35631881739726e-16 12 1.27938364528661 22 2.22727465515648 32 0.0 13 1.27938364528661 23 2.22727465515648 33 0.0 70 3 0 3DFACE 8 iso_base_b 10 1.27938364528661 20 2.22727465515648 30 0.0 11 1.25796592131777 21 2.71678748219946 31 2.35631881739726e-16 12 1.35173135526774 22 2.24539681310645 32 0.0 13 1.35173135526774 23 2.24539681310645 33 0.0 70 1 0 3DFACE 8 iso_base_b 10 1.5 20 1.5 30 0.0 11 1.01786110403563 21 0.91251205544432 31 0.0 12 0.962598846298224 22 0.962598846298224 32 0.0 13 0.962598846298224 23 0.962598846298224 33 0.0 70 1 0 3DFACE 8 iso_base_b 10 1.01786110403563 20 0.91251205544432 30 0.0 11 1.5 21 1.5 31 0.0 12 1.0777666229051 22 0.868083094650066 32 0.0 13 1.0777666229051 23 0.868083094650066 33 0.0 70 1 0 3DFACE 8 iso_base_b 10 1.5 20 1.5 30 0.0 11 0.91251205544432 21 1.01786110403563 31 0.0 12 0.868083094650066 22 1.0777666229051 32 0.0 13 0.868083094650066 23 1.0777666229051 33 0.0 70 1 0 3DFACE 8 iso_base_b 10 0.91251205544432 20 1.01786110403563 30 0.0 11 1.5 21 1.5 31 0.0 12 0.962598846298224 22 0.962598846298224 32 0.0 13 0.962598846298224 23 0.962598846298224 33 0.0 70 1 0 3DFACE 8 iso_base_b 10 2.11686086360521 20 2.11686086360521 30 1.46824902399879e-16 11 2.08748794455568 21 1.98213889596437 31 0.0 12 2.03740115370178 22 2.03740115370178 32 0.0 13 2.03740115370178 23 2.03740115370178 33 0.0 70 1 0 3DFACE 8 iso_base_b 10 2.08748794455568 20 1.98213889596437 30 0.0 11 2.11686086360521 21 2.11686086360521 31 1.46824902399879e-16 12 2.13191690534993 22 1.9222333770949 32 0.0 13 2.13191690534993 23 1.9222333770949 33 0.0 70 3 0 3DFACE 8 iso_base_b 10 2.13191690534993 20 1.9222333770949 30 0.0 11 2.11686086360521 21 2.11686086360521 31 1.46824902399879e-16 12 2.26663244222472 22 2.01224742103046 32 1.31339002048974e-16 13 2.26663244222472 23 2.01224742103046 33 1.31339002048974e-16 70 1 0 3DFACE 8 iso_base_b 10 2.795 20 3.0 30 1.705 11 3.0 21 3.0 31 1.5 12 2.795 22 3.0 32 1.5 13 2.795 23 3.0 33 1.5 70 0 0 3DFACE 8 iso_base_b 10 0.754603186893545 20 1.35173135526774 30 0.0 11 0.687379562118009 21 1.16340159356772 31 -4.6241464304765e-17 12 0.580081389077038 22 1.31701681130471 32 -3.03581440100583e-17 13 0.580081389077038 23 1.31701681130471 33 -3.03581440100583e-17 70 1 0 3DFACE 8 iso_base_b 10 0.687379562118009 20 1.16340159356772 30 -4.6241464304765e-17 11 0.754603186893545 21 1.35173135526774 31 0.0 12 0.772725344843521 22 1.27938364528661 32 0.0 13 0.772725344843521 23 1.27938364528661 33 0.0 70 13 0 3DFACE 8 iso_base_b 10 0.687379562118009 20 1.16340159356772 30 -4.6241464304765e-17 11 0.772725344843521 21 1.27938364528661 31 0.0 12 0.797851555291422 22 1.20916059140253 32 0.0 13 0.797851555291422 23 1.20916059140253 33 0.0 70 1 0 3DFACE 8 iso_base_b 10 0.754603186893545 20 1.64826864473226 30 0.0 11 0.452270081490105 21 1.5 31 -1.14382698113301e-17 12 0.283212517800539 22 1.74203407868223 32 1.35872768146951e-17 13 0.283212517800539 23 1.74203407868223 33 1.35872768146951e-17 70 1 0 3DFACE 8 iso_base_b 10 0.452270081490105 20 1.5 30 -1.14382698113301e-17 11 0.754603186893545 21 1.64826864473226 31 0.0 12 0.743659607729131 22 1.57449302665047 32 0.0 13 0.743659607729131 23 1.57449302665047 33 0.0 70 13 0 3DFACE 8 iso_base_b 10 0.452270081490105 20 1.5 30 -1.14382698113301e-17 11 0.743659607729131 21 1.57449302665047 31 0.0 12 0.74 22 1.5 32 0.0 13 0.74 23 1.5 33 0.0 70 1 0 3DFACE 8 iso_base_b 10 2.22727465515648 20 1.27938364528661 30 0.0 11 2.56066017177982 21 1.06066017177982 31 -9.52420782539579e-18 12 2.20214844470858 22 1.20916059140253 32 0.0 13 2.20214844470858 23 1.20916059140253 33 0.0 70 1 0 3DFACE 8 iso_base_b 10 2.56066017177982 20 1.06066017177982 30 -9.52420782539579e-18 11 2.22727465515648 21 1.27938364528661 31 0.0 12 2.24539681310646 22 1.35173135526774 32 0.0 13 2.24539681310646 23 1.35173135526774 33 0.0 70 13 0 3DFACE 8 iso_base_b 10 2.56066017177982 20 1.06066017177982 30 -9.52420782539579e-18 11 2.24539681310646 21 1.35173135526774 31 0.0 12 2.75113397843947 22 1.25113397843947 32 1.86715796068105e-17 13 2.75113397843947 23 1.25113397843947 33 1.86715796068105e-17 70 1 0 3DFACE 8 iso_base_b 10 2.26 20 1.5 30 0.0 11 2.24539681310646 21 1.35173135526774 31 0.0 12 1.5 22 1.5 32 0.0 13 1.5 23 1.5 33 0.0 70 1 0 3DFACE 8 iso_base_b 10 2.24539681310646 20 1.35173135526774 30 0.0 11 2.26 21 1.5 31 0.0 12 2.25634039227087 22 1.42550697334953 32 0.0 13 2.25634039227087 23 1.42550697334953 33 0.0 70 1 0 3DFACE 8 iso_base_b 10 1.5 20 1.5 30 0.0 11 0.82973983909525 21 1.14173848001224 31 0.0 12 0.797851555291422 22 1.20916059140253 32 0.0 13 0.797851555291422 23 1.20916059140253 33 0.0 70 1 0 3DFACE 8 iso_base_b 10 0.82973983909525 20 1.14173848001224 30 0.0 11 1.5 21 1.5 31 0.0 12 0.868083094650066 22 1.0777666229051 32 0.0 13 0.868083094650066 23 1.0777666229051 33 0.0 70 1 0 3DFACE 8 iso_base_b 10 2.13191690534993 20 1.9222333770949 30 0.0 11 2.20214844470858 21 1.79083940859747 31 0.0 12 1.5 22 1.5 32 0.0 13 1.5 23 1.5 33 0.0 70 1 0 3DFACE 8 iso_base_b 10 2.20214844470858 20 1.79083940859747 30 0.0 11 2.13191690534993 21 1.9222333770949 31 0.0 12 2.17026016090475 22 1.85826151998776 32 0.0 13 2.17026016090475 23 1.85826151998776 33 0.0 70 1 0 3DFACE 8 iso_base_b 10 0.8525 20 3.0 30 3.33066907387547e-16 11 1.0777666229051 21 2.13191690534993 31 0.0 12 0.639832154473908 22 2.78733215447391 32 2.22163676695763e-16 13 0.639832154473908 23 2.78733215447391 33 2.22163676695763e-16 70 1 0 3DFACE 8 iso_base_b 10 1.0777666229051 20 2.13191690534993 30 0.0 11 0.8525 21 3.0 31 3.33066907387547e-16 12 0.889337610807103 22 2.97426942202065 32 2.73746865475011e-16 13 0.889337610807103 23 2.97426942202065 33 2.73746865475011e-16 70 13 0 3DFACE 8 iso_base_b 10 1.0777666229051 20 2.13191690534993 30 0.0 11 0.889337610807103 21 2.97426942202065 31 2.73746865475011e-16 12 1.14173848001224 22 2.17026016090475 32 0.0 13 1.14173848001224 23 2.17026016090475 33 0.0 70 3 0 3DFACE 8 iso_base_b 10 1.14173848001224 20 2.17026016090475 30 0.0 11 0.889337610807103 21 2.97426942202065 31 2.73746865475011e-16 12 1.20916059140253 22 2.20214844470858 32 0.0 13 1.20916059140253 23 2.20214844470858 33 0.0 70 1 0 3DFACE 8 iso_base_b 10 2.20214844470858 20 1.79083940859747 30 0.0 11 2.24539681310645 21 1.64826864473226 31 0.0 12 1.5 22 1.5 32 0.0 13 1.5 23 1.5 33 0.0 70 1 0 3DFACE 8 iso_base_b 10 2.24539681310645 20 1.64826864473226 30 0.0 11 2.20214844470858 21 1.79083940859747 31 0.0 12 2.22727465515648 22 1.72061635471339 32 0.0 13 2.22727465515648 23 1.72061635471339 33 0.0 70 1 0 3DFACE 8 iso_base_b 10 1.42550697334953 20 2.25634039227087 30 0.0 11 1.5 21 1.5 31 0.0 12 1.35173135526774 22 2.24539681310645 32 0.0 13 1.35173135526774 23 2.24539681310645 33 0.0 70 1 0 3DFACE 8 iso_base_b 10 1.5 20 1.5 30 0.0 11 1.42550697334953 21 2.25634039227087 31 0.0 12 1.5 22 2.26 32 0.0 13 1.5 23 2.26 33 0.0 70 1 0 3DFACE 8 iso_base_b 10 3.0 20 3.0 30 1.5 11 2.795 21 3.0 31 1.35681024447031 12 2.795 22 3.0 32 1.5 13 2.795 23 3.0 33 1.5 70 0 0 3DFACE 8 iso_base_b 10 0.0 20 2.3525 30 0.205 11 0.212667845526092 21 2.36016784552609 31 1.10903230691784e-16 12 0.0 22 2.1475 32 0.0 13 0.0 23 2.1475 33 0.0 70 1 0 3DFACE 8 iso_base_b 10 0.212667845526092 20 2.36016784552609 30 1.10903230691784e-16 11 0.0 21 2.3525 31 0.205 12 0.42625 22 2.57375 32 1.66533453693774e-16 13 0.42625 23 2.57375 33 1.66533453693774e-16 70 3 0 3DFACE 8 iso_base_b 10 0.42625 20 2.57375 30 1.66533453693774e-16 11 0.0 21 2.3525 31 0.205 12 0.639832154473908 22 2.78733215447391 32 2.22163676695763e-16 13 0.639832154473908 23 2.78733215447391 33 2.22163676695763e-16 70 3 0 3DFACE 8 iso_base_b 10 0.639832154473908 20 2.78733215447391 30 2.22163676695763e-16 11 0.0 21 2.3525 31 0.205 12 0.8525 22 3.0 32 3.33066907387547e-16 13 0.8525 23 3.0 33 3.33066907387547e-16 70 3 0 3DFACE 8 iso_base_b 10 0.8525 20 3.0 30 3.33066907387547e-16 11 0.0 21 2.3525 31 0.205 12 0.6475 22 3.0 32 0.205 13 0.6475 23 3.0 33 0.205 70 3 0 3DFACE 8 iso_base_b 10 0.6475 20 3.0 30 0.205 11 0.0 21 2.3525 31 0.205 12 0.0 22 2.57375 32 0.42625 13 0.0 23 2.57375 33 0.42625 70 13 0 3DFACE 8 iso_base_b 10 0.6475 20 3.0 30 0.205 11 0.0 21 2.57375 31 0.42625 12 0.42625 22 3.0 32 0.42625 13 0.42625 23 3.0 33 0.42625 70 3 0 3DFACE 8 iso_base_b 10 0.42625 20 3.0 30 0.42625 11 0.0 21 2.57375 31 0.42625 12 0.0 22 2.795 32 0.6475 13 0.0 23 2.795 33 0.6475 70 13 0 3DFACE 8 iso_base_b 10 0.42625 20 3.0 30 0.42625 11 0.0 21 2.795 31 0.6475 12 0.205 22 3.0 32 0.6475 13 0.205 23 3.0 33 0.6475 70 3 0 3DFACE 8 iso_base_b 10 0.205 20 3.0 30 0.6475 11 0.0 21 2.795 31 0.6475 12 0.0 22 3.0 32 0.8525 13 0.0 23 3.0 33 0.8525 70 1 0 3DFACE 8 iso_base_b 10 1.5 20 1.5 30 0.0 11 1.27938364528661 21 0.772725344843521 31 0.0 12 1.20916059140253 22 0.797851555291422 32 0.0 13 1.20916059140253 23 0.797851555291422 33 0.0 70 1 0 3DFACE 8 iso_base_b 10 1.27938364528661 20 0.772725344843521 30 0.0 11 1.5 21 1.5 31 0.0 12 1.35173135526774 22 0.754603186893545 32 0.0 13 1.35173135526774 23 0.754603186893545 33 0.0 70 1 0 3DFACE 8 iso_base_b 10 0.82973983909525 20 1.85826151998776 30 0.0 11 1.5 21 1.5 31 0.0 12 0.797851555291422 22 1.79083940859747 32 0.0 13 0.797851555291422 23 1.79083940859747 33 0.0 70 1 0 3DFACE 8 iso_base_b 10 1.5 20 1.5 30 0.0 11 0.82973983909525 21 1.85826151998776 31 0.0 12 0.868083094650066 22 1.9222333770949 32 0.0 13 0.868083094650066 23 1.9222333770949 33 0.0 70 1 0 3DFACE 8 iso_base_b 10 0.797851555291422 20 1.79083940859747 30 0.0 11 0.283212517800539 21 1.74203407868223 31 1.35872768146951e-17 12 0.0257305779793495 22 2.1106623891929 32 5.17022605499795e-17 13 0.0257305779793495 23 2.1106623891929 33 5.17022605499795e-17 70 1 0 3DFACE 8 iso_base_b 10 0.283212517800539 20 1.74203407868223 30 1.35872768146951e-17 11 0.797851555291422 21 1.79083940859747 31 0.0 12 0.772725344843521 22 1.72061635471339 32 0.0 13 0.772725344843521 23 1.72061635471339 33 0.0 70 13 0 3DFACE 8 iso_base_b 10 0.283212517800539 20 1.74203407868223 30 1.35872768146951e-17 11 0.772725344843521 21 1.72061635471339 31 0.0 12 0.754603186893545 22 1.64826864473226 32 0.0 13 0.754603186893545 23 1.64826864473226 33 0.0 70 1 0 3DFACE 8 iso_base_b 10 1.97730561612803 20 2.2143383356498 30 1.61254466912702e-16 11 1.98213889596437 21 2.08748794455568 31 0.0 12 1.9222333770949 22 2.13191690534993 32 0.0 13 1.9222333770949 23 2.13191690534993 33 0.0 70 1 0 3DFACE 8 iso_base_b 10 1.98213889596437 20 2.08748794455568 30 0.0 11 1.97730561612803 21 2.2143383356498 31 1.61254466912702e-16 12 2.11686086360521 22 2.11686086360521 32 1.46824902399879e-16 13 2.11686086360521 23 2.11686086360521 33 1.46824902399879e-16 70 13 0 3DFACE 8 iso_base_b 10 1.98213889596437 20 2.08748794455568 30 0.0 11 2.11686086360521 21 2.11686086360521 31 1.46824902399879e-16 12 2.03740115370178 22 2.03740115370178 32 0.0 13 2.03740115370178 23 2.03740115370178 33 0.0 70 1 0 3DFACE 8 iso_base_b 10 0.639832154473908 20 2.78733215447391 30 2.22163676695763e-16 11 0.962598846298224 21 2.03740115370178 31 0.0 12 0.42625 22 2.57375 32 1.66533453693774e-16 13 0.42625 23 2.57375 33 1.66533453693774e-16 70 1 0 3DFACE 8 iso_base_b 10 0.962598846298224 20 2.03740115370178 30 0.0 11 0.639832154473908 21 2.78733215447391 31 2.22163676695763e-16 12 1.01786110403563 22 2.08748794455568 32 0.0 13 1.01786110403563 23 2.08748794455568 33 0.0 70 3 0 3DFACE 8 iso_base_b 10 1.01786110403563 20 2.08748794455568 30 0.0 11 0.639832154473908 21 2.78733215447391 31 2.22163676695763e-16 12 1.0777666229051 22 2.13191690534993 32 0.0 13 1.0777666229051 23 2.13191690534993 33 0.0 70 1 0 3DFACE 8 iso_base_b 10 0.6475 20 3.0 30 0.205 11 1.14599166666667 21 3.0 31 0.205 12 0.8525 22 3.0 32 3.33066907387547e-16 13 0.8525 23 3.0 33 3.33066907387547e-16 70 0 0 3DFACE 8 iso_base_b 10 1.57449302665047 20 2.25634039227087 30 0.0 11 1.5 21 1.5 31 0.0 12 1.5 22 2.26 32 0.0 13 1.5 23 2.26 33 0.0 70 1 0 3DFACE 8 iso_base_b 10 1.5 20 1.5 30 0.0 11 1.57449302665047 21 2.25634039227087 31 0.0 12 1.64826864473226 22 2.24539681310645 32 0.0 13 1.64826864473226 23 2.24539681310645 33 0.0 70 1 0 3DFACE 8 iso_base_b 10 0.0 20 0.205 30 1.5 11 0.0 21 0.205 31 1.35681024447031 12 0.0 22 0.0 32 1.5 13 0.0 23 0.0 33 1.5 70 0 0 3DFACE 8 iso_base_b 10 0.797851555291422 20 1.20916059140253 30 0.0 11 0.785661664350193 21 1.02269438387197 31 -6.07901380123296e-17 12 0.687379562118009 22 1.16340159356772 32 -4.6241464304765e-17 13 0.687379562118009 23 1.16340159356772 33 -4.6241464304765e-17 70 1 0 3DFACE 8 iso_base_b 10 0.785661664350193 20 1.02269438387197 30 -6.07901380123296e-17 11 0.797851555291422 21 1.20916059140253 31 0.0 12 0.82973983909525 22 1.14173848001224 32 0.0 13 0.82973983909525 23 1.14173848001224 33 0.0 70 13 0 3DFACE 8 iso_base_b 10 0.785661664350193 20 1.02269438387197 30 -6.07901380123296e-17 11 0.82973983909525 21 1.14173848001224 31 0.0 12 0.868083094650066 22 1.0777666229051 32 0.0 13 0.868083094650066 23 1.0777666229051 33 0.0 70 1 0 3DFACE 8 iso_base_b 10 2.20214844470858 20 1.20916059140253 30 0.0 11 2.13191690534993 21 1.0777666229051 31 0.0 12 1.5 22 1.5 32 0.0 13 1.5 23 1.5 33 0.0 70 1 0 3DFACE 8 iso_base_b 10 2.13191690534993 20 1.0777666229051 30 0.0 11 2.20214844470858 21 1.20916059140253 31 0.0 12 2.17026016090475 22 1.14173848001224 32 0.0 13 2.17026016090475 23 1.14173848001224 33 0.0 70 1 0 3DFACE 8 iso_base_b 10 1.5 20 3.0 30 3.0 11 1.5 21 3.0 31 2.795 12 1.35681024447031 22 3.0 32 2.795 13 1.35681024447031 23 3.0 33 2.795 70 0 0 3DFACE 8 iso_base_b 10 0.0 20 0.205 30 1.5 11 0.0 21 0.883139136394791 31 0.883139136394791 12 0.0 22 0.205 32 1.35681024447031 13 0.0 23 0.205 33 1.35681024447031 70 1 0 3DFACE 8 iso_base_b 10 0.0 20 0.883139136394791 30 0.883139136394791 11 0.0 21 0.205 31 1.5 12 0.0 22 1.5 32 1.5 13 0.0 23 1.5 33 1.5 70 1 0 3DFACE 8 iso_base_b 10 1.5 20 3.0 30 3.0 11 1.705 21 3.0 31 2.795 12 1.5 22 3.0 32 2.795 13 1.5 23 3.0 33 2.795 70 0 0 3DFACE 8 iso_base_b 10 0.0 20 2.5477299185099 30 1.5 11 0.0 21 1.5 31 1.5 12 0.0 22 2.11686086360521 32 2.11686086360521 13 0.0 23 2.11686086360521 33 2.11686086360521 70 0 0 3DFACE 8 iso_base_b 10 0.0 20 2.3525 30 0.205 11 0.0 21 2.1475 31 0.0 12 0.0 22 2.1475 32 0.205 13 0.0 23 2.1475 33 0.205 70 0 0 3DFACE 8 iso_base_b 10 0.0 20 0.205 30 1.705 11 0.0 21 1.5 31 1.5 12 0.0 22 0.205 32 1.5 13 0.0 23 0.205 33 1.5 70 1 0 3DFACE 8 iso_base_b 10 0.0 20 1.5 30 1.5 11 0.0 21 0.205 31 1.705 12 0.0 22 0.75 32 2.25 13 0.0 23 0.75 33 2.25 70 1 0 3DFACE 8 iso_base_b 10 0.0 20 1.295 30 2.795 11 0.0 21 1.5 31 1.5 12 0.0 22 0.75 32 2.25 13 0.0 23 0.75 33 2.25 70 1 0 3DFACE 8 iso_base_b 10 0.0 20 1.5 30 1.5 11 0.0 21 1.295 31 2.795 12 0.0 22 1.5 32 2.795 13 0.0 23 1.5 33 2.795 70 1 0 ENDSEC 0 EOF xscreensaver-5.36/hacks/glx/robot-wireframe.dxf000644 000767 000024 00000023257 12366344670 021654 0ustar00jwzstaff000000 000000 0 SECTION 2 ENTITIES 0 LINE 8 Layer0 10 729.885787538951 20 421.399755913295 30 2459.25669423824 11 959.278462610949 21 553.839678616242 31 1921.43623303429 0 LINE 8 Layer0 10 729.885787538951 20 421.399755913295 30 2824.24221446634 11 -1.80477854883065e-13 21 842.79951182659 31 2824.24221446634 0 LINE 8 Layer0 10 -1.80477854883065e-13 20 842.79951182659 30 2824.24221446634 11 -1.80477854883065e-13 21 842.79951182659 31 2459.25669423824 0 LINE 8 Layer0 10 -1.80477854883065e-13 20 842.79951182659 30 2459.25669423824 11 729.885787538951 21 421.399755913295 31 2459.25669423824 0 LINE 8 Layer0 10 1.80477854883065e-13 20 1.40989300234651e-13 30 3212.28264895843 11 -1.80477854883065e-13 21 842.79951182659 31 2824.24221446634 0 LINE 8 Layer0 10 665.532008182011 20 384.245084078196 30 587.016306884026 11 -1.80477854883065e-13 21 768.490168156393 31 587.016306884026 0 LINE 8 Layer0 10 750.739667090951 20 433.43974888629 30 887.912962275779 11 0.0 21 866.879497772581 31 887.912962275779 0 LINE 8 Layer0 10 690.700936565691 20 398.776371655728 30 934.321154257257 11 750.739667090951 21 433.43974888629 31 887.912962275779 0 LINE 8 Layer0 10 959.278462610949 20 -553.839678616242 30 1921.43623303429 11 959.278462610949 21 553.839678616242 31 1921.43623303429 0 LINE 8 Layer0 10 959.278462610949 20 553.839678616242 30 1921.43623303429 11 690.700936565691 21 398.776371655728 31 934.321154257257 0 LINE 8 Layer0 10 690.700936565691 20 -398.776371655728 30 934.321154257257 11 690.700936565691 21 398.776371655728 31 934.321154257257 0 LINE 8 Layer0 10 665.532008182011 20 -384.245084078196 30 587.016306884026 11 665.532008182011 21 384.245084078196 31 587.016306884026 0 LINE 8 Layer0 10 750.739667090951 20 -433.43974888629 30 887.912962275779 11 750.739667090951 21 433.43974888629 31 887.912962275779 0 LINE 8 Layer0 10 750.739667090951 20 433.43974888629 30 887.912962275779 11 665.532008182011 21 384.245084078196 31 587.016306884026 0 LINE 8 Layer0 10 -1.80477854883065e-13 20 -797.552743311456 30 934.321154257257 11 690.700936565691 21 -398.776371655728 31 934.321154257257 0 LINE 8 Layer0 10 -1.80477854883065e-13 20 -1107.67935723248 30 1921.43623303429 11 959.278462610949 21 -553.839678616242 31 1921.43623303429 0 LINE 8 Layer0 10 959.278462610949 20 -553.839678616242 30 1921.43623303429 11 690.700936565691 21 -398.776371655728 31 934.321154257257 0 LINE 8 Layer0 10 0.0 20 -866.87949777258 30 887.912962275779 11 -1.80477854883065e-13 21 -797.552743311456 31 934.321154257257 0 LINE 8 Layer0 10 -1.80477854883065e-13 20 -797.552743311456 30 934.321154257257 11 -1.80477854883065e-13 21 -1107.67935723248 31 1921.43623303429 0 LINE 8 Layer0 10 690.700936565691 20 -398.776371655728 30 934.321154257257 11 750.739667090951 21 -433.43974888629 31 887.912962275779 0 LINE 8 Layer0 10 750.739667090951 20 -433.43974888629 30 887.912962275779 11 665.532008182011 21 -384.245084078196 31 587.016306884026 0 LINE 8 Layer0 10 729.885787538951 20 421.399755913295 30 2824.24221446634 11 729.885787538951 21 421.399755913295 31 2459.25669423824 0 LINE 8 Layer0 10 729.885787538951 20 421.399755913295 30 2459.25669423824 11 729.885787538951 21 -421.399755913295 31 2459.25669423824 0 LINE 8 Layer0 10 729.885787538951 20 -421.399755913295 30 2824.24221446634 11 729.885787538951 21 421.399755913295 31 2824.24221446634 0 LINE 8 Layer0 10 0.0 20 -866.87949777258 30 887.912962275779 11 750.739667090951 21 -433.43974888629 31 887.912962275779 0 LINE 8 Layer0 10 0.0 20 -768.490168156392 30 587.016306884026 11 0.0 21 -866.87949777258 31 887.912962275779 0 LINE 8 Layer0 10 0.0 20 -768.490168156392 30 587.016306884026 11 665.532008182011 21 -384.245084078196 31 587.016306884026 0 LINE 8 Layer0 10 1.80477854883065e-13 20 1.40989300234651e-13 30 3212.28264895843 11 729.885787538951 21 -421.399755913295 31 2824.24221446634 0 LINE 8 Layer0 10 -1.80477854883065e-13 20 -1107.67935723248 30 1921.43623303429 11 0.0 21 -842.79951182659 31 2459.25669423824 0 LINE 8 Layer0 10 729.885787538951 20 -421.399755913295 30 2459.25669423824 11 959.278462610949 21 -553.839678616242 31 1921.43623303429 0 LINE 8 Layer0 10 0.0 20 -842.79951182659 30 2824.24221446634 11 1.80477854883065e-13 21 1.40989300234651e-13 31 3212.28264895843 0 LINE 8 Layer0 10 1.80477854883065e-13 20 1.40989300234651e-13 30 3212.28264895843 11 729.885787538951 21 421.399755913295 31 2824.24221446634 0 LINE 8 Layer0 10 0.0 20 866.879497772581 30 887.912962275779 11 -1.80477854883065e-13 21 768.490168156393 31 587.016306884026 0 LINE 8 Layer0 10 690.700936565691 20 398.776371655728 30 934.321154257257 11 0.0 21 797.552743311456 31 934.321154257257 0 LINE 8 Layer0 10 0.0 20 797.552743311456 30 934.321154257257 11 0.0 21 866.879497772581 31 887.912962275779 0 LINE 8 Layer0 10 959.278462610949 20 553.839678616242 30 1921.43623303429 11 0.0 21 1107.67935723248 31 1921.43623303429 0 LINE 8 Layer0 10 0.0 20 1107.67935723248 30 1921.43623303429 11 0.0 21 797.552743311456 31 934.321154257257 0 LINE 8 Layer0 10 -1.80477854883065e-13 20 842.79951182659 30 2459.25669423824 11 0.0 21 1107.67935723248 31 1921.43623303429 0 LINE 8 Layer0 10 -1.80477854883065e-13 20 842.79951182659 30 2824.24221446634 11 -729.88578753895 21 421.399755913295 31 2824.24221446634 0 LINE 8 Layer0 10 -729.88578753895 20 421.399755913295 30 2824.24221446634 11 -729.88578753895 21 421.399755913295 31 2459.25669423824 0 LINE 8 Layer0 10 -729.88578753895 20 421.399755913295 30 2459.25669423824 11 -1.80477854883065e-13 21 842.79951182659 31 2459.25669423824 0 LINE 8 Layer0 10 1.80477854883065e-13 20 1.40989300234651e-13 30 3212.28264895843 11 -729.88578753895 21 421.399755913295 31 2824.24221446634 0 LINE 8 Layer0 10 -1.80477854883065e-13 20 768.490168156393 30 587.016306884026 11 -665.532008182011 21 384.245084078197 31 587.016306884026 0 LINE 8 Layer0 10 0.0 20 866.879497772581 30 887.912962275779 11 -750.739667090951 21 433.439748886291 31 887.912962275779 0 LINE 8 Layer0 10 -750.739667090951 20 433.439748886291 30 887.912962275779 11 -665.532008182011 21 384.245084078197 31 587.016306884026 0 LINE 8 Layer0 10 0.0 20 797.552743311456 30 934.321154257257 11 -690.700936565691 21 398.776371655728 31 934.321154257257 0 LINE 8 Layer0 10 -690.700936565691 20 398.776371655728 30 934.321154257257 11 -750.739667090951 21 433.439748886291 31 887.912962275779 0 LINE 8 Layer0 10 0.0 20 1107.67935723248 30 1921.43623303429 11 -959.278462610949 21 553.839678616243 31 1921.43623303429 0 LINE 8 Layer0 10 -959.278462610949 20 553.839678616243 30 1921.43623303429 11 -690.700936565691 21 398.776371655728 31 934.321154257257 0 LINE 8 Layer0 10 -729.88578753895 20 421.399755913295 30 2459.25669423824 11 -959.278462610949 21 553.839678616243 31 1921.43623303429 0 LINE 8 Layer0 10 -729.88578753895 20 421.399755913295 30 2824.24221446634 11 -729.88578753895 21 -421.399755913294 31 2824.24221446634 0 LINE 8 Layer0 10 -729.88578753895 20 -421.399755913294 30 2824.24221446634 11 -729.88578753895 21 -421.399755913294 31 2459.25669423824 0 LINE 8 Layer0 10 -729.88578753895 20 -421.399755913294 30 2459.25669423824 11 -729.88578753895 21 421.399755913295 31 2459.25669423824 0 LINE 8 Layer0 10 1.80477854883065e-13 20 1.40989300234651e-13 30 3212.28264895843 11 -729.88578753895 21 -421.399755913294 31 2824.24221446634 0 LINE 8 Layer0 10 -665.532008182011 20 384.245084078197 30 587.016306884026 11 -665.532008182012 21 -384.245084078196 31 587.016306884026 0 LINE 8 Layer0 10 -750.739667090951 20 433.439748886291 30 887.912962275779 11 -750.739667090951 21 -433.43974888629 31 887.912962275779 0 LINE 8 Layer0 10 -750.739667090951 20 -433.43974888629 30 887.912962275779 11 -665.532008182012 21 -384.245084078196 31 587.016306884026 0 LINE 8 Layer0 10 -690.700936565691 20 398.776371655728 30 934.321154257257 11 -690.700936565691 21 -398.776371655727 31 934.321154257257 0 LINE 8 Layer0 10 -690.700936565691 20 -398.776371655727 30 934.321154257257 11 -750.739667090951 21 -433.43974888629 31 887.912962275779 0 LINE 8 Layer0 10 -959.278462610949 20 553.839678616243 30 1921.43623303429 11 -959.27846261095 21 -553.839678616242 31 1921.43623303429 0 LINE 8 Layer0 10 -959.27846261095 20 -553.839678616242 30 1921.43623303429 11 -690.700936565691 21 -398.776371655727 31 934.321154257257 0 LINE 8 Layer0 10 -729.88578753895 20 -421.399755913294 30 2459.25669423824 11 -959.27846261095 21 -553.839678616242 31 1921.43623303429 0 LINE 8 Layer0 10 -729.88578753895 20 -421.399755913294 30 2824.24221446634 11 0.0 21 -842.79951182659 31 2824.24221446634 0 LINE 8 Layer0 10 0.0 20 -842.79951182659 30 2459.25669423824 11 -729.88578753895 21 -421.399755913294 31 2459.25669423824 0 LINE 8 Layer0 10 -665.532008182012 20 -384.245084078196 30 587.016306884026 11 0.0 21 -768.490168156392 31 587.016306884026 0 LINE 8 Layer0 10 -750.739667090951 20 -433.43974888629 30 887.912962275779 11 0.0 21 -866.87949777258 31 887.912962275779 0 LINE 8 Layer0 10 -690.700936565691 20 -398.776371655727 30 934.321154257257 11 -1.80477854883065e-13 21 -797.552743311456 31 934.321154257257 0 LINE 8 Layer0 10 -959.27846261095 20 -553.839678616242 30 1921.43623303429 11 -1.80477854883065e-13 21 -1107.67935723248 31 1921.43623303429 0 LINE 8 Layer0 10 0.0 20 -842.79951182659 30 2459.25669423824 11 0.0 21 -842.79951182659 31 2824.24221446634 0 LINE 8 Layer0 10 0.0 20 -842.79951182659 30 2824.24221446634 11 729.885787538951 21 -421.399755913295 31 2824.24221446634 0 LINE 8 Layer0 10 729.885787538951 20 -421.399755913295 30 2824.24221446634 11 729.885787538951 21 -421.399755913295 31 2459.25669423824 0 LINE 8 Layer0 10 729.885787538951 20 -421.399755913295 30 2459.25669423824 11 0.0 21 -842.79951182659 31 2459.25669423824 0 ENDSEC 0 EOF xscreensaver-5.36/hacks/glx/robot.dxf000644 000767 000024 00006357027 12375706545 017713 0ustar00jwzstaff000000 000000 0 SECTION 2 ENTITIES 0 LINE 8 body_half_outside 10 49.3833285852636 20 -973.755695339679 30 2091.49823824434 11 -1.46818399649623 21 -975.178141079999 31 2078.18338184642 0 LINE 8 body_half_outside 10 49.3833285852636 20 -973.755695339679 30 2091.49823824434 11 104.493582702864 21 -954.855979397759 31 2142.57132329634 0 LINE 8 body_half_outside 10 49.3833285852636 20 -973.755695339678 30 1978.90616179826 11 104.493582702864 21 -970.431454266559 31 2000.14082085794 0 LINE 8 body_half_outside 10 47.4423855126237 20 -935.483454058559 30 2215.03930219042 11 104.493582702864 21 -941.451475609919 31 2182.48702219986 0 LINE 8 body_half_outside 10 49.3833285852636 20 -973.755695339678 30 1978.90616179826 11 7.02533393134383 21 -975.148943779999 31 1991.94707744866 0 LINE 8 body_half_outside 10 104.493582702864 20 -954.855979397759 30 2142.57132329634 11 48.5792115854235 21 -957.900066537919 31 2152.7213325213 0 LINE 8 body_half_outside 10 48.5792115854235 20 -957.900066537919 30 2152.7213325213 11 104.493582702864 21 -941.451475609919 31 2182.48702219986 0 3DFACE 8 body_half_outside 10 104.493609641047 20 -876.169915138752 30 2001.23529816273 11 180.675224578544 21 -881.220764951522 31 2017.88600937388 12 180.675224578544 22 -876.169825263419 32 2001.23529268221 13 180.675224578544 23 -876.169825263419 33 2001.23529268221 70 1 0 3DFACE 8 body_half_outside 10 180.675224578544 20 -881.220764951522 30 2017.88600937388 11 104.493609641047 21 -876.169915138752 31 2001.23529816273 12 104.493608114757 22 -881.220857485245 32 2017.88602361794 13 104.493608114757 23 -881.220857485245 33 2017.88602361794 70 1 0 3DFACE 8 body_half_outside 10 180.675224578544 20 -731.403895497386 30 1972.43955887653 11 104.493591159588 21 -720.365490157703 31 1985.88990169709 12 104.493594381798 22 -731.40390918009 32 1972.4395492014 13 104.493594381798 23 -731.40390918009 33 1972.4395492014 70 1 0 3DFACE 8 body_half_outside 10 104.493591159588 20 -720.365490157703 30 1985.88990169709 11 180.675224578544 21 -731.403895497386 31 1972.43955887653 12 180.675224578544 22 -720.365482284693 32 1985.88990429309 13 180.675224578544 23 -720.365482284693 33 1985.88990429309 70 1 0 3DFACE 8 body_half_outside 10 104.493610580936 20 -843.478858324204 30 1961.40113017901 11 180.675224578544 21 -828.133397265575 31 1953.19886468436 12 104.493609641054 22 -828.133461858565 32 1953.19884488255 13 104.493609641054 23 -828.133461858565 33 1953.19884488255 70 1 0 3DFACE 8 body_half_outside 10 180.675224578544 20 -828.133397265575 30 1953.19886468436 11 104.493610580936 21 -843.478858324204 31 1961.40113017901 12 180.675224578544 22 -843.478785654691 32 1961.40114566384 13 180.675224578544 23 -843.478785654691 33 1961.40114566384 70 1 0 3DFACE 8 body_half_outside 10 -778.906875772646 20 -154.93421062823 30 1614.7610800213 11 -878.79625075709 21 -89.3648841254364 31 1427.8983600213 12 -870.542978388701 22 -173.161764737035 32 1427.8983600213 13 -870.542978388701 23 -173.161764737035 33 1427.8983600213 70 1 0 3DFACE 8 body_half_outside 10 -878.79625075709 20 -89.3648841254364 30 1427.8983600213 11 -778.906875772646 21 -154.93421062823 31 1614.7610800213 12 -794.166563605455 22 1.80477854883065e-13 32 1614.7610800213 13 -794.166563605455 23 1.80477854883065e-13 33 1614.7610800213 70 13 0 3DFACE 8 body_half_outside 10 -878.79625075709 20 -89.3648841254364 30 1427.8983600213 11 -794.166563605455 21 1.80477854883065e-13 31 1614.7610800213 12 -887.597923605455 22 3.60955709766131e-13 32 1427.8983600213 13 -887.597923605455 23 3.60955709766131e-13 33 1427.8983600213 70 1 0 3DFACE 8 body_half_outside 10 978.352295145615 20 -194.606371158736 30 2361.46489814399 11 863.207469797099 21 -357.552241131722 31 2455.6433200213 12 921.587710511789 22 -381.734128610352 32 2361.46489814399 13 921.587710511789 23 -381.734128610352 33 2361.46489814399 70 1 0 3DFACE 8 body_half_outside 10 863.207469797099 20 -357.552241131722 30 2455.6433200213 11 978.352295145615 21 -194.606371158736 31 2361.46489814399 12 887.227326571027 22 -278.369385106107 32 2455.6433200213 13 887.227326571027 23 -278.369385106107 33 2455.6433200213 70 3 0 3DFACE 8 body_half_outside 10 887.227326571027 20 -278.369385106107 30 2455.6433200213 11 978.352295145615 21 -194.606371158736 31 2361.46489814399 12 914.651020883606 22 -187.965580500561 32 2455.6433200213 13 914.651020883606 23 -187.965580500561 33 2455.6433200213 70 3 0 3DFACE 8 body_half_outside 10 914.651020883606 20 -187.965580500561 30 2455.6433200213 11 978.352295145615 21 -194.606371158736 31 2361.46489814399 12 916.376162171087 22 -182.278551827737 32 2455.6433200213 13 916.376162171087 23 -182.278551827737 33 2455.6433200213 70 1 0 3DFACE 8 body_half_outside 10 415.26146157539 20 -621.482696406623 30 1427.8983600213 11 321.791703197793 21 -776.873894119249 31 1241.03564002131 12 467.169144021928 22 -699.168033082722 32 1241.03564002131 13 467.169144021928 23 -699.168033082722 33 1241.03564002131 70 1 0 3DFACE 8 body_half_outside 10 321.791703197793 20 -776.873894119249 30 1241.03564002131 11 415.26146157539 21 -621.482696406623 31 1427.8983600213 12 286.037069662455 22 -690.554572920556 32 1427.8983600213 13 286.037069662455 23 -690.554572920556 33 1427.8983600213 70 1 0 3DFACE 8 body_half_outside 10 -470.848959476119 20 -704.67526609701 30 796.153149972084 11 -590.997993226901 21 -590.997993226901 31 738.078199114136 12 -464.344143695271 22 -694.940121314314 32 738.078199114136 13 -464.344143695271 23 -694.940121314314 33 738.078199114136 70 1 0 3DFACE 8 body_half_outside 10 -590.997993226901 20 -590.997993226901 30 738.078199114136 11 -470.848959476119 21 -704.67526609701 31 796.153149972084 12 -599.277053327022 22 -599.277053327022 32 796.153149972084 13 -599.277053327022 23 -599.277053327022 33 796.153149972084 70 1 0 3DFACE 8 body_half_outside 10 164.047987682633 20 -824.724927080674 30 2549.0746800213 11 0.0 21 -840.882243605455 31 2455.6433200213 12 164.047987682633 22 -824.724927080674 32 2455.6433200213 13 164.047987682633 23 -824.724927080674 33 2455.6433200213 70 1 0 3DFACE 8 body_half_outside 10 0.0 20 -840.882243605455 30 2455.6433200213 11 164.047987682633 21 -824.724927080674 31 2549.0746800213 12 0.0 22 -840.882243605455 32 2549.0746800213 13 0.0 23 -840.882243605455 33 2549.0746800213 70 3 0 3DFACE 8 body_half_outside 10 0.0 20 -840.882243605455 30 2549.0746800213 11 164.047987682633 21 -824.724927080674 31 2549.0746800213 12 126.903660366379 22 -828.38332400481 32 2549.0746800213 13 126.903660366379 23 -828.38332400481 33 2549.0746800213 70 13 0 3DFACE 8 body_half_outside 10 0.0 20 -840.882243605455 30 2549.0746800213 11 126.903660366379 21 -828.38332400481 31 2549.0746800213 12 42.4327751671525 22 -836.702980030903 32 2549.0746800213 13 42.4327751671525 23 -836.702980030903 33 2549.0746800213 70 1 0 3DFACE 8 body_half_outside 10 594.593536632776 20 -594.593536632776 30 2549.0746800213 11 467.169144021928 21 -699.168033082722 31 2455.6433200213 12 594.593536632776 22 -594.593536632776 32 2455.6433200213 13 594.593536632776 23 -594.593536632776 33 2455.6433200213 70 1 0 3DFACE 8 body_half_outside 10 467.169144021928 20 -699.168033082722 30 2455.6433200213 11 594.593536632776 21 -594.593536632776 31 2549.0746800213 12 467.169144021928 22 -699.168033082722 32 2549.0746800213 13 467.169144021928 23 -699.168033082722 33 2549.0746800213 70 3 0 3DFACE 8 body_half_outside 10 467.169144021928 20 -699.168033082722 30 2549.0746800213 11 594.593536632776 21 -594.593536632776 31 2549.0746800213 12 578.083233221301 22 -608.143192472719 32 2549.0746800213 13 578.083233221301 23 -608.143192472719 33 2549.0746800213 70 13 0 3DFACE 8 body_half_outside 10 467.169144021928 20 -699.168033082722 30 2549.0746800213 11 578.083233221301 21 -608.143192472719 31 2549.0746800213 12 512.438726622327 22 -662.016246772909 32 2549.0746800213 13 512.438726622327 23 -662.016246772909 33 2549.0746800213 70 1 0 3DFACE 8 body_half_outside 10 -814.429823327873 20 1.80477854883065e-13 30 682.822310520627 11 -768.954752250597 21 -152.954610178005 31 631.979456702016 12 -798.780782641381 22 -158.887376492573 32 682.822310520627 13 -798.780782641381 23 -158.887376492573 33 682.822310520627 70 1 0 3DFACE 8 body_half_outside 10 -768.954752250597 20 -152.954610178005 30 631.979456702016 11 -814.429823327873 21 1.80477854883065e-13 31 682.822310520627 12 -784.019466456977 22 1.80477854883065e-13 32 631.979456702016 13 -784.019466456977 23 1.80477854883065e-13 33 631.979456702016 70 1 0 3DFACE 8 body_half_outside 10 381.734128610352 20 -921.587710511788 30 2361.46489814399 11 203.671280618918 21 -1023.92467246733 31 2258.00680432354 12 399.51558814382 22 -964.515951276275 32 2258.00680432354 13 399.51558814382 23 -964.515951276275 33 2258.00680432354 70 1 0 3DFACE 8 body_half_outside 10 203.671280618918 20 -1023.92467246733 30 2258.00680432354 11 381.734128610352 21 -921.587710511788 31 2361.46489814399 12 194.606371158736 22 -978.352295145615 32 2361.46489814399 13 194.606371158736 23 -978.352295145615 33 2361.46489814399 70 1 0 3DFACE 8 body_half_outside 10 357.552241131722 20 -863.2074697971 30 2455.6433200213 11 194.606371158736 21 -978.352295145615 31 2361.46489814399 12 381.734128610352 22 -921.587710511788 32 2361.46489814399 13 381.734128610352 23 -921.587710511788 33 2361.46489814399 70 1 0 3DFACE 8 body_half_outside 10 194.606371158736 20 -978.352295145615 30 2361.46489814399 11 357.552241131722 21 -863.2074697971 31 2455.6433200213 12 182.278551827736 22 -916.376162171087 32 2455.6433200213 13 182.278551827736 23 -916.376162171087 33 2455.6433200213 70 3 0 3DFACE 8 body_half_outside 10 182.278551827736 20 -916.376162171087 30 2455.6433200213 11 357.552241131722 21 -863.2074697971 31 2455.6433200213 12 323.520353242804 22 -873.5309301251 32 2455.6433200213 13 323.520353242804 23 -873.5309301251 33 2455.6433200213 70 13 0 3DFACE 8 body_half_outside 10 182.278551827736 20 -916.376162171087 30 2455.6433200213 11 323.520353242804 21 -873.5309301251 31 2455.6433200213 12 233.261899594599 22 -900.91053270681 32 2455.6433200213 13 233.261899594599 23 -900.91053270681 33 2455.6433200213 70 1 0 3DFACE 8 body_half_outside 10 798.780782641381 20 -158.887376492573 30 682.822310520627 11 835.797377356766 21 1.80477854883065e-13 31 738.078199114136 12 819.73776511114 22 -163.055979488767 32 738.078199114136 13 819.73776511114 23 -163.055979488767 33 738.078199114136 70 1 0 3DFACE 8 body_half_outside 10 835.797377356766 20 1.80477854883065e-13 30 738.078199114136 11 798.780782641381 21 -158.887376492573 31 682.822310520627 12 814.429823327873 22 1.80477854883065e-13 32 682.822310520627 13 814.429823327873 23 1.80477854883065e-13 33 682.822310520627 70 1 0 3DFACE 8 body_half_outside 10 -723.84293286299 20 -790.84270017674 30 2109.1268343449 11 -768.602809842621 21 -861.72900857618 31 2086.28270221439 12 -783.644995364665 22 -846.504456965985 32 2095.12279472996 13 -783.644995364665 23 -846.504456965985 33 2095.12279472996 70 1 0 3DFACE 8 body_half_outside 10 -768.602809842621 20 -861.72900857618 30 2086.28270221439 11 -723.84293286299 21 -790.84270017674 31 2109.1268343449 12 -703.270205185374 22 -808.916878172158 32 2098.19892992261 13 -703.270205185374 23 -808.916878172158 33 2098.19892992261 70 1 0 3DFACE 8 body_half_outside 10 -1023.92467246733 20 -203.671280618918 30 2258.00680432354 11 -1072.40303302985 21 3.60955709766131e-13 31 2148.21162800104 12 -1051.79710945546 22 -209.215453044867 32 2148.21162800104 13 -1051.79710945546 23 -209.215453044867 33 2148.21162800104 70 1 0 3DFACE 8 body_half_outside 10 -1072.40303302985 20 3.60955709766131e-13 30 2148.21162800104 11 -1023.92467246733 21 -203.671280618918 31 2258.00680432354 12 -1043.98454271904 22 3.60955709766131e-13 32 2258.00680432354 13 -1043.98454271904 23 3.60955709766131e-13 33 2258.00680432354 70 1 0 3DFACE 8 body_half_outside 10 279.792110043812 20 -1038.25578712258 30 2035.20217666346 11 210.691411720441 21 -1059.21725479392 31 2011.5925230317 12 287.457754814725 22 -1035.93043920361 32 2011.5925230317 13 287.457754814725 23 -1035.93043920361 33 2011.5925230317 70 1 0 3DFACE 8 body_half_outside 10 210.691411720441 20 -1059.21725479392 30 2011.5925230317 11 279.792110043812 21 -1038.25578712258 31 2035.20217666346 12 210.691411720441 22 -1059.21725479392 32 2058.8118770109 13 210.691411720441 23 -1059.21725479392 33 2058.8118770109 70 3 0 3DFACE 8 body_half_outside 10 210.691411720441 20 -1059.21725479392 30 2058.8118770109 11 279.792110043812 21 -1038.25578712258 31 2035.20217666346 12 287.457769982496 22 -1035.93043460251 32 2058.8118770109 13 287.457769982496 23 -1035.93043460251 33 2058.8118770109 70 1 0 3DFACE 8 body_half_outside 10 806.222012671193 20 -670.885845335315 30 1850.69961858573 11 180.675224578544 21 -637.259985333474 31 1878.29564871262 12 180.675224578544 22 -670.885845335315 32 1850.69961858573 13 180.675224578544 23 -670.885845335315 33 1850.69961858573 70 1 0 3DFACE 8 body_half_outside 10 180.675224578544 20 -637.259985333474 30 1878.29564871262 11 806.222012671193 21 -670.885845335315 31 1850.69961858573 12 843.01369820043 22 -637.259985333474 32 1878.29564871262 13 843.01369820043 23 -637.259985333474 33 1878.29564871262 70 1 0 3DFACE 8 body_half_outside 10 806.222028237971 20 -670.885845335315 30 2219.70473474119 11 180.675224578544 21 -709.249312269842 31 2240.21043503138 12 180.675224578544 22 -670.885845335315 32 2219.70473474119 13 180.675224578544 23 -670.885845335315 33 2219.70473474119 70 1 0 3DFACE 8 body_half_outside 10 180.675224578544 20 -709.249312269842 30 2240.21043503138 11 806.222028237971 21 -670.885845335315 31 2219.70473474119 12 767.904956185432 22 -709.249312269841 32 2240.21043503138 13 767.904956185432 23 -709.249312269841 33 2240.21043503138 70 1 0 3DFACE 8 body_half_outside 10 767.904956185432 20 -709.249312269841 30 2240.21043503138 11 180.675224578544 21 -750.87609961724 31 2252.83778292244 12 180.675224578544 22 -709.249312269842 32 2240.21043503138 13 180.675224578544 23 -709.249312269842 33 2240.21043503138 70 1 0 3DFACE 8 body_half_outside 10 180.675224578544 20 -750.87609961724 30 2252.83778292244 11 767.904956185432 21 -709.249312269841 31 2240.21043503138 12 724.871895956044 22 -750.87609961724 32 2252.83778292244 13 724.871895956044 23 -750.87609961724 33 2252.83778292244 70 3 0 3DFACE 8 body_half_outside 10 724.871895956044 20 -750.87609961724 30 2252.83778292244 11 767.904956185432 21 -709.249312269841 31 2240.21043503138 12 739.771130343929 22 -739.771130343928 32 2249.46912732182 13 739.771130343929 23 -739.771130343928 33 2249.46912732182 70 1 0 3DFACE 8 body_half_outside 10 -399.515588143821 20 -964.515951276276 30 1812.39759571907 11 -554.192057578438 21 -829.407026995335 31 1708.93950189862 12 -381.734128610353 22 -921.587710511788 32 1708.93950189862 13 -381.734128610353 23 -921.587710511788 33 1708.93950189862 70 1 0 3DFACE 8 body_half_outside 10 -554.192057578438 20 -829.407026995335 30 1708.93950189862 11 -399.515588143821 21 -964.515951276276 31 1812.39759571907 12 -580.006735667279 22 -868.04142298445 32 1812.39759571907 13 -580.006735667279 23 -868.04142298445 33 1812.39759571907 70 1 0 3DFACE 8 body_half_outside 10 -644.282480658799 20 -861.555930289753 30 2059.38164426315 11 -740.177565197592 21 -890.060339871748 31 2085.82110165668 12 -731.284144746345 22 -899.775643285913 32 2054.14511148709 13 -731.284144746345 23 -899.775643285913 33 2054.14511148709 70 1 0 3DFACE 8 body_half_outside 10 -740.177565197592 20 -890.060339871748 30 2085.82110165668 11 -644.282480658799 21 -861.555930289753 31 2059.38164426315 12 -655.637457605706 22 -847.372595440649 32 2104.03168141582 13 -655.637457605706 23 -847.372595440649 33 2104.03168141582 70 1 0 3DFACE 8 body_half_outside 10 599.277053327022 20 -599.277053327022 30 796.153149972084 11 706.098253038493 21 -471.799768952456 31 855.37186879426 12 600.487204246519 22 -600.48720424652 32 855.37186879426 13 600.487204246519 23 -600.48720424652 33 855.37186879426 70 1 0 3DFACE 8 body_half_outside 10 706.098253038493 20 -471.799768952456 30 855.37186879426 11 599.277053327022 21 -599.277053327022 31 796.153149972084 12 704.67526609701 22 -470.84895947612 32 796.153149972084 13 704.67526609701 23 -470.84895947612 33 796.153149972084 70 1 0 3DFACE 8 body_half_outside 10 389.307620352121 20 -582.640028068573 30 1241.03564002131 11 303.914386430124 21 -733.714233519903 31 1054.1729200213 12 441.215302798659 22 -660.325364744672 32 1054.1729200213 13 441.215302798659 23 -660.325364744672 33 1054.1729200213 70 1 0 3DFACE 8 body_half_outside 10 303.914386430124 20 -733.714233519903 30 1054.1729200213 11 389.307620352121 21 -582.640028068573 31 1241.03564002131 12 268.159752894785 22 -647.394912321209 32 1241.03564002131 13 268.159752894785 23 -647.394912321209 33 1241.03564002131 70 1 0 3DFACE 8 body_half_outside 10 916.376162171087 20 -182.278551827737 30 1614.7610800213 11 997.519349743285 21 1.80477854883065e-13 31 1708.93950189862 12 978.352295145615 22 -194.606371158736 32 1708.93950189862 13 978.352295145615 23 -194.606371158736 33 1708.93950189862 70 1 0 3DFACE 8 body_half_outside 10 997.519349743285 20 1.80477854883065e-13 30 1708.93950189862 11 916.376162171087 21 -182.278551827737 31 1614.7610800213 12 925.063958273825 22 -94.0698777038381 32 1614.7610800213 13 925.063958273825 23 -94.0698777038381 33 1614.7610800213 70 13 0 3DFACE 8 body_half_outside 10 997.519349743285 20 1.80477854883065e-13 30 1708.93950189862 11 925.063958273825 21 -94.0698777038381 31 1614.7610800213 12 934.329032542513 22 1.80477854883065e-13 32 1614.7610800213 13 934.329032542513 23 1.80477854883065e-13 33 1614.7610800213 70 1 0 3DFACE 8 body_half_outside 10 -594.593536632776 20 -594.593536632776 30 914.026066884025 11 -706.098253038492 21 -471.799768952456 31 855.37186879426 12 -600.487204246519 22 -600.487204246519 32 855.37186879426 13 -600.487204246519 23 -600.487204246519 33 855.37186879426 70 1 0 3DFACE 8 body_half_outside 10 -706.098253038492 20 -471.799768952456 30 855.37186879426 11 -594.593536632776 21 -594.593536632776 31 914.026066884025 12 -699.168033082722 22 -467.169144021929 32 914.026066884025 13 -699.168033082722 23 -467.169144021929 33 914.026066884025 70 1 0 3DFACE 8 body_half_outside 10 921.587710511789 20 -381.734128610352 30 1708.93950189862 11 1023.92467246733 21 -203.671280618918 31 1812.39759571907 12 964.515951276275 22 -399.515588143821 32 1812.39759571907 13 964.515951276275 23 -399.515588143821 33 1812.39759571907 70 1 0 3DFACE 8 body_half_outside 10 1023.92467246733 20 -203.671280618918 30 1812.39759571907 11 921.587710511789 21 -381.734128610352 31 1708.93950189862 12 978.352295145615 22 -194.606371158736 32 1708.93950189862 13 978.352295145615 23 -194.606371158736 33 1708.93950189862 70 1 0 3DFACE 8 body_half_outside 10 -781.183382327347 20 -739.911027417745 30 2076.74494872451 11 -815.319529832985 21 -815.188756027286 31 2086.22194499561 12 -827.129718036832 22 -803.86513828916 32 2069.83607643134 13 -827.129718036832 23 -803.86513828916 33 2069.83607643134 70 1 0 3DFACE 8 body_half_outside 10 -815.319529832985 20 -815.188756027286 30 2086.22194499561 11 -781.183382327347 21 -739.911027417745 31 2076.74494872451 12 -766.822004083969 22 -754.694855069672 32 2097.20410948883 13 -766.822004083969 23 -754.694855069672 33 2097.20410948883 70 1 0 3DFACE 8 body_half_outside 10 -746.579505030633 20 -772.239793008819 30 2108.60809856919 11 -783.644995364665 21 -846.504456965985 31 2095.12279472996 12 -800.049725864573 22 -830.16169359091 32 2095.10145963194 13 -800.049725864573 23 -830.16169359091 33 2095.10145963194 70 1 0 3DFACE 8 body_half_outside 10 -783.644995364665 20 -846.504456965985 30 2095.12279472996 11 -746.579505030633 21 -772.239793008819 31 2108.60809856919 12 -723.84293286299 22 -790.84270017674 32 2109.1268343449 13 -723.84293286299 23 -790.84270017674 33 2109.1268343449 70 1 0 3DFACE 8 body_half_outside 10 -703.270205185374 20 -808.916878172158 30 2098.19892992261 11 -757.213205686422 21 -873.517548449742 31 2069.9270060351 12 -768.602809842621 22 -861.72900857618 32 2086.28270221439 13 -768.602809842621 23 -861.72900857618 33 2086.28270221439 70 1 0 3DFACE 8 body_half_outside 10 -757.213205686422 20 -873.517548449742 30 2069.9270060351 11 -703.270205185374 21 -808.916878172158 31 2098.19892992261 12 -688.216174174222 22 -823.534449985187 32 2077.42717273413 13 -688.216174174222 23 -823.534449985187 33 2077.42717273413 70 1 0 3DFACE 8 body_half_outside 10 -766.822004083969 20 -754.694855069672 30 2097.20410948883 11 -800.049725864573 21 -830.16169359091 31 2095.10145963194 12 -815.319529832985 22 -815.188756027286 32 2086.22194499561 13 -815.319529832985 23 -815.188756027286 33 2086.22194499561 70 1 0 3DFACE 8 body_half_outside 10 -800.049725864573 20 -830.16169359091 30 2095.10145963194 11 -766.822004083969 21 -754.694855069672 31 2097.20410948883 12 -761.149821895316 22 -761.14982219046 32 2100.64485501639 13 -761.149821895316 23 -761.14982219046 33 2100.64485501639 70 13 0 3DFACE 8 body_half_outside 10 -800.049725864573 20 -830.16169359091 30 2095.10145963194 11 -761.149821895316 21 -761.14982219046 31 2100.64485501639 12 -746.579505030633 22 -772.239793008819 32 2108.60809856919 13 -746.579505030633 23 -772.239793008819 33 2108.60809856919 70 1 0 3DFACE 8 body_half_outside 10 -801.544845731016 20 -831.814429411314 30 1978.70958937363 11 -766.91292419702 21 -754.581509059306 31 1973.17973333127 12 -816.587031253059 22 -816.589877801121 32 1987.54968188919 13 -816.587031253059 23 -816.589877801121 33 1987.54968188919 70 1 0 3DFACE 8 body_half_outside 10 -766.91292419702 20 -754.581509059306 30 1973.17973333127 11 -801.544845731016 21 -831.814429411314 31 1978.70958937363 12 -761.145931803741 22 -761.14593180374 32 1969.69450846846 13 -761.145931803741 23 -761.14593180374 33 1969.69450846846 70 3 0 3DFACE 8 body_half_outside 10 -761.145931803741 20 -761.14593180374 30 1969.69450846846 11 -801.544845731016 21 -831.814429411314 31 1978.70958937363 12 -746.546206077474 22 -772.245716838241 32 1961.59984211439 13 -746.546206077474 23 -772.245716838241 33 1961.59984211439 70 1 0 3DFACE 8 body_half_outside 10 -203.671280618918 20 -1023.92467246733 30 1812.39759571907 11 -381.734128610353 21 -921.587710511788 31 1708.93950189862 12 -194.606371158736 22 -978.352295145615 32 1708.93950189862 13 -194.606371158736 23 -978.352295145615 33 1708.93950189862 70 1 0 3DFACE 8 body_half_outside 10 -381.734128610353 20 -921.587710511788 30 1708.93950189862 11 -203.671280618918 21 -1023.92467246733 31 1812.39759571907 12 -399.515588143821 22 -964.515951276276 32 1812.39759571907 13 -399.515588143821 23 -964.515951276276 33 1812.39759571907 70 1 0 3DFACE 8 body_half_outside 10 699.168033082722 20 -467.169144021928 30 1241.03564002131 11 528.527588401294 21 -528.527588401294 31 1427.8983600213 12 594.593536632776 22 -594.593536632775 32 1241.03564002131 13 594.593536632776 23 -594.593536632775 33 1241.03564002131 70 1 0 3DFACE 8 body_half_outside 10 528.527588401294 20 -528.527588401294 30 1427.8983600213 11 699.168033082722 21 -467.169144021928 31 1241.03564002131 12 621.482696406623 22 -415.26146157539 32 1427.8983600213 13 621.482696406623 23 -415.26146157539 33 1427.8983600213 70 1 0 3DFACE 8 body_half_outside 10 738.010701420772 20 -493.122985245198 30 1427.8983600213 11 561.560562517035 21 -561.560562517035 31 1614.7610800213 12 627.626510748516 22 -627.626510748516 32 1427.8983600213 13 627.626510748516 23 -627.626510748516 33 1427.8983600213 70 1 0 3DFACE 8 body_half_outside 10 561.560562517035 20 -561.560562517035 30 1614.7610800213 11 738.010701420772 21 -493.122985245198 31 1427.8983600213 12 660.325364744673 22 -441.215302798659 32 1614.7610800213 13 660.325364744673 23 -441.215302798659 33 1614.7610800213 70 1 0 3DFACE 8 body_half_outside 10 660.670394770277 20 -660.670394770277 30 1614.7610800213 11 829.407026995336 21 -554.192057578438 31 1708.93950189862 12 705.352696568272 22 -705.352696568272 32 1708.93950189862 13 705.352696568272 23 -705.352696568272 33 1708.93950189862 70 1 0 3DFACE 8 body_half_outside 10 829.407026995336 20 -554.192057578438 30 1708.93950189862 11 660.670394770277 21 -660.670394770277 31 1614.7610800213 12 705.689442544718 22 -605.814526338507 32 1614.7610800213 13 705.689442544718 23 -605.814526338507 33 1614.7610800213 70 13 0 3DFACE 8 body_half_outside 10 829.407026995336 20 -554.192057578438 30 1708.93950189862 11 705.689442544718 21 -605.814526338507 31 1614.7610800213 12 765.568628348261 22 -532.851527327553 32 1614.7610800213 13 765.568628348261 23 -532.851527327553 33 1614.7610800213 70 13 0 3DFACE 8 body_half_outside 10 829.407026995336 20 -554.192057578438 30 1708.93950189862 11 765.568628348261 21 -532.851527327553 31 1614.7610800213 12 776.866198451135 22 -519.085398326623 32 1614.7610800213 13 776.866198451135 23 -519.085398326623 33 1614.7610800213 70 1 0 3DFACE 8 body_half_outside 10 705.352696568272 20 -705.352696568272 30 1708.93950189862 11 868.04142298445 21 -580.006735667279 31 1812.39759571907 12 738.20854961057 22 -738.20854961057 32 1812.39759571907 13 738.20854961057 23 -738.20854961057 33 1812.39759571907 70 1 0 3DFACE 8 body_half_outside 10 868.04142298445 20 -580.006735667279 30 1812.39759571907 11 705.352696568272 21 -705.352696568272 31 1708.93950189862 12 829.407026995336 22 -554.192057578438 32 1708.93950189862 13 829.407026995336 23 -554.192057578438 33 1708.93950189862 70 1 0 3DFACE 8 body_half_outside 10 776.87389411925 20 -321.791703197793 30 2455.6433200213 11 798.491402853314 21 -250.528327323719 31 2549.0746800213 12 776.87389411925 22 -321.791703197793 32 2549.0746800213 13 776.87389411925 23 -321.791703197793 33 2549.0746800213 70 1 0 3DFACE 8 body_half_outside 10 798.491402853314 20 -250.528327323719 30 2549.0746800213 11 776.87389411925 21 -321.791703197793 31 2455.6433200213 12 824.724927080674 22 -164.047987682633 32 2455.6433200213 13 824.724927080674 23 -164.047987682633 33 2455.6433200213 70 13 0 3DFACE 8 body_half_outside 10 798.491402853314 20 -250.528327323719 30 2549.0746800213 11 824.724927080674 21 -164.047987682633 31 2455.6433200213 12 823.17232140581 22 -169.166242665351 32 2549.0746800213 13 823.17232140581 23 -169.166242665351 33 2549.0746800213 70 3 0 3DFACE 8 body_half_outside 10 823.17232140581 20 -169.166242665351 30 2549.0746800213 11 824.724927080674 21 -164.047987682633 31 2455.6433200213 12 824.724927080674 22 -164.047987682633 32 2549.0746800213 13 824.724927080674 23 -164.047987682633 33 2549.0746800213 70 1 0 3DFACE 8 body_half_outside 10 724.871895956044 20 -750.87609961724 30 2252.83778292244 11 180.675224578544 21 -794.16651328432 31 2257.10151651642 12 180.675224578544 22 -750.87609961724 32 2252.83778292244 13 180.675224578544 23 -750.87609961724 33 2252.83778292244 70 1 0 3DFACE 8 body_half_outside 10 180.675224578544 20 -794.16651328432 30 2257.10151651642 11 724.871895956044 21 -750.87609961724 31 2252.83778292244 12 670.391151613542 22 -794.16651328432 32 2257.10151651642 13 670.391151613542 23 -794.16651328432 33 2257.10151651642 70 1 0 3DFACE 8 body_half_outside 10 892.684338449561 20 -596.472605357118 30 2133.80356487023 11 180.675224578544 21 -589.158254916404 31 2120.11937767794 12 897.900697882446 22 -589.158254916404 32 2120.11937767794 13 897.900697882446 23 -589.158254916404 33 2120.11937767794 70 1 0 3DFACE 8 body_half_outside 10 180.675224578544 20 -589.158254916404 30 2120.11937767794 11 892.684338449561 21 -596.472605357118 31 2133.80356487023 12 180.675224578544 22 -609.663955206589 32 2158.48284461247 13 180.675224578544 23 -609.663955206589 33 2158.48284461247 70 3 0 3DFACE 8 body_half_outside 10 180.675224578544 20 -609.663955206589 30 2158.48284461247 11 892.684338449561 21 -596.472605357118 31 2133.80356487023 12 884.794335210004 22 -604.173875548016 32 2148.21162800104 13 884.794335210004 23 -604.173875548016 33 2148.21162800104 70 13 0 3DFACE 8 body_half_outside 10 180.675224578544 20 -609.663955206589 30 2158.48284461247 11 884.794335210004 21 -604.173875548016 31 2148.21162800104 12 876.866128931272 22 -609.663955206588 32 2158.48284461247 13 876.866128931272 23 -609.663955206588 33 2158.48284461247 70 1 0 3DFACE 8 body_half_outside 10 653.750224578544 20 -879.083714298799 30 1830.19391829555 11 180.675224578544 21 -837.4569269514 31 1817.56657040449 12 180.675224578544 22 -879.083714298798 32 1830.19391829555 13 180.675224578544 23 -879.083714298798 33 1830.19391829555 70 1 0 3DFACE 8 body_half_outside 10 180.675224578544 20 -837.4569269514 30 1817.56657040449 11 653.750224578544 21 -879.083714298799 31 1830.19391829555 12 653.750224578544 22 -837.4569269514 32 1817.56657040449 13 653.750224578544 23 -837.4569269514 33 1817.56657040449 70 1 0 3DFACE 8 body_half_outside 10 575.888850875701 20 -575.888850875701 30 682.822310520627 11 694.940121314314 21 -464.344143695271 31 738.078199114136 12 590.997993226901 22 -590.997993226901 32 738.078199114136 13 590.997993226901 23 -590.997993226901 33 738.078199114136 70 1 0 3DFACE 8 body_half_outside 10 694.940121314314 20 -464.344143695271 30 738.078199114136 11 575.888850875701 21 -575.888850875701 31 682.822310520627 12 677.173649450057 22 -452.47296672438 32 682.822310520627 13 677.173649450057 23 -452.47296672438 33 682.822310520627 70 1 0 3DFACE 8 body_half_outside 10 406.150722558891 20 -980.534582769308 30 1879.38487239655 11 203.671280618918 21 -1023.92467246733 31 1812.39759571907 12 399.51558814382 22 -964.515951276276 32 1812.39759571907 13 399.51558814382 23 -964.515951276276 33 1812.39759571907 70 1 0 3DFACE 8 body_half_outside 10 203.671280618918 20 -1023.92467246733 30 1812.39759571907 11 406.150722558891 21 -980.534582769308 31 1879.38487239655 12 209.215453044867 22 -1051.79710945546 32 1922.19277204157 13 209.215453044867 23 -1051.79710945546 33 1922.19277204157 70 3 0 3DFACE 8 body_half_outside 10 209.215453044867 20 -1051.79710945546 30 1922.19277204157 11 406.150722558891 21 -980.534582769308 31 1879.38487239655 12 369.41031965462 22 -997.119327169824 32 1899.59344191956 13 369.41031965462 23 -997.119327169824 33 1899.59344191956 70 13 0 3DFACE 8 body_half_outside 10 209.215453044867 20 -1051.79710945546 30 1922.19277204157 11 369.41031965462 21 -997.119327169824 31 1899.59344191956 12 349.642861592144 22 -1009.19892078507 32 1922.19277204157 13 349.642861592144 23 -1009.19892078507 33 1922.19277204157 70 1 0 3DFACE 8 body_half_outside 10 -921.587710511788 20 -381.734128610352 30 2361.46489814399 11 -1023.92467246733 21 -203.671280618918 31 2258.00680432354 12 -964.515951276275 22 -399.515588143821 32 2258.00680432354 13 -964.515951276275 23 -399.515588143821 33 2258.00680432354 70 1 0 3DFACE 8 body_half_outside 10 -1023.92467246733 20 -203.671280618918 30 2258.00680432354 11 -921.587710511788 21 -381.734128610352 31 2361.46489814399 12 -978.352295145615 22 -194.606371158736 32 2361.46489814399 13 -978.352295145615 23 -194.606371158736 33 2361.46489814399 70 1 0 3DFACE 8 body_half_outside 10 1059.21725479392 20 -210.691411720441 30 2058.8118770109 11 990.771212819308 21 -410.390873558597 31 2148.21162800104 12 997.760836892423 22 -413.286070645571 32 2058.8118770109 13 997.760836892423 23 -413.286070645571 33 2058.8118770109 70 1 0 3DFACE 8 body_half_outside 10 990.771212819308 20 -410.390873558597 30 2148.21162800104 11 1059.21725479392 21 -210.691411720441 31 2058.8118770109 12 1051.79710945546 22 -209.215453044867 32 2148.21162800104 13 1051.79710945546 23 -209.215453044867 33 2148.21162800104 70 1 0 3DFACE 8 body_half_outside 10 -868.041422984449 20 -580.006735667279 30 2258.00680432354 11 -990.771212819307 21 -410.390873558597 31 2148.21162800104 12 -891.670534105406 22 -595.795202951324 32 2148.21162800104 13 -891.670534105406 23 -595.795202951324 33 2148.21162800104 70 1 0 3DFACE 8 body_half_outside 10 -990.771212819307 20 -410.390873558597 30 2148.21162800104 11 -868.041422984449 21 -580.006735667279 31 2258.00680432354 12 -964.515951276275 22 -399.515588143821 32 2258.00680432354 13 -964.515951276275 23 -399.515588143821 33 2258.00680432354 70 1 0 3DFACE 8 body_half_outside 10 -829.407026995335 20 -554.192057578438 30 2361.46489814399 11 -964.515951276275 21 -399.515588143821 31 2258.00680432354 12 -868.041422984449 22 -580.006735667279 32 2258.00680432354 13 -868.041422984449 23 -580.006735667279 33 2258.00680432354 70 1 0 3DFACE 8 body_half_outside 10 -964.515951276275 20 -399.515588143821 30 2258.00680432354 11 -829.407026995335 21 -554.192057578438 31 2361.46489814399 12 -921.587710511788 22 -381.734128610352 32 2361.46489814399 13 -921.587710511788 23 -381.734128610352 33 2361.46489814399 70 1 0 3DFACE 8 body_half_outside 10 -776.866198451135 20 -519.085398326623 30 2455.6433200213 11 -921.587710511788 21 -381.734128610352 31 2361.46489814399 12 -829.407026995335 22 -554.192057578438 32 2361.46489814399 13 -829.407026995335 23 -554.192057578438 33 2361.46489814399 70 1 0 3DFACE 8 body_half_outside 10 -921.587710511788 20 -381.734128610352 30 2361.46489814399 11 -776.866198451135 21 -519.085398326623 31 2455.6433200213 12 -813.095615905849 22 -451.304925633068 32 2455.6433200213 13 -813.095615905849 23 -451.304925633068 33 2455.6433200213 70 13 0 3DFACE 8 body_half_outside 10 -921.587710511788 20 -381.734128610352 30 2361.46489814399 11 -813.095615905849 21 -451.304925633068 31 2455.6433200213 12 -857.607798059122 22 -368.028490102694 32 2455.6433200213 13 -857.607798059122 23 -368.028490102694 33 2455.6433200213 70 13 0 3DFACE 8 body_half_outside 10 -921.587710511788 20 -381.734128610352 30 2361.46489814399 11 -857.607798059122 21 -368.028490102694 31 2455.6433200213 12 -863.207469797099 22 -357.552241131722 32 2455.6433200213 13 -863.207469797099 23 -357.552241131722 33 2455.6433200213 70 1 0 3DFACE 8 body_half_outside 10 -758.060123058849 20 -874.453748088142 30 2003.99630767223 11 -683.329149560927 21 -829.573232448602 31 2011.5925230317 12 -687.957452549297 22 -823.760435027841 32 1993.10258668608 13 -687.957452549297 23 -823.760435027841 33 1993.10258668608 70 1 0 3DFACE 8 body_half_outside 10 -683.329149560927 20 -829.573232448602 30 2011.5925230317 11 -758.060123058849 21 -874.453748088142 31 2003.99630767223 12 -751.507544713982 22 -880.404127848991 32 2025.39393021379 13 -751.507544713982 23 -880.404127848991 33 2025.39393021379 70 13 0 3DFACE 8 body_half_outside 10 -683.329149560927 20 -829.573232448602 30 2011.5925230317 11 -751.507544713982 21 -880.404127848991 31 2025.39393021379 12 -680.414811030127 22 -831.964968270127 32 2020.57508939225 13 -680.414811030127 23 -831.964968270127 33 2020.57508939225 70 1 0 3DFACE 8 body_half_outside 10 -785.140115231108 20 -848.157192786392 30 1978.73092447164 11 -746.546206077474 21 -772.245716838241 31 1961.59984211439 12 -801.544845731016 22 -831.814429411314 32 1978.70958937363 13 -801.544845731016 23 -831.814429411314 33 1978.70958937363 70 1 0 3DFACE 8 body_half_outside 10 -746.546206077474 20 -772.245716838241 30 1961.59984211439 11 -785.140115231108 21 -848.157192786392 31 1978.73092447164 12 -723.636295253065 22 -790.983771266745 32 1961.01586348506 13 -723.636295253065 23 -790.983771266745 33 1961.01586348506 70 1 0 3DFACE 8 body_half_outside 10 -757.213205686422 20 -873.517548449742 30 2069.9270060351 11 -680.521947020029 21 -831.877044035484 31 2050.14904337117 12 -751.210146881832 22 -880.075378254302 32 2048.54571267062 13 -751.210146881832 23 -880.075378254302 33 2048.54571267062 70 1 0 3DFACE 8 body_half_outside 10 -680.521947020029 20 -831.877044035484 30 2050.14904337117 11 -757.213205686422 21 -873.517548449742 31 2069.9270060351 12 -683.397324988288 22 -829.51728232132 32 2058.8118770109 13 -683.397324988288 23 -829.51728232132 33 2058.8118770109 70 3 0 3DFACE 8 body_half_outside 10 -683.397324988288 20 -829.51728232132 30 2058.8118770109 11 -757.213205686422 21 -873.517548449742 31 2069.9270060351 12 -688.216174174222 22 -823.534449985187 32 2077.42717273413 13 -688.216174174222 23 -823.534449985187 33 2077.42717273413 70 1 0 3DFACE 8 body_half_outside 10 -816.587031253059 20 -816.589877801121 30 1987.54968188919 11 -781.308061641118 21 -739.778791807586 31 1993.80290570042 12 -827.976635409257 22 -804.801337927561 32 2003.90537806848 13 -827.976635409257 23 -804.801337927561 33 2003.90537806848 70 1 0 3DFACE 8 body_half_outside 10 -781.308061641118 20 -739.778791807586 30 1993.80290570042 11 -816.587031253059 21 -816.589877801121 31 1987.54968188919 12 -766.91292419702 22 -754.581509059306 32 1973.17973333127 13 -766.91292419702 23 -754.581509059306 33 1973.17973333127 70 1 0 3DFACE 8 body_half_outside 10 -464.344143695271 20 -694.940121314314 30 738.078199114136 11 -575.888850875701 21 -575.888850875701 31 682.822310520627 12 -452.472966724379 22 -677.173649450057 32 682.822310520627 13 -452.472966724379 23 -677.173649450057 33 682.822310520627 70 1 0 3DFACE 8 body_half_outside 10 -575.888850875701 20 -575.888850875701 30 682.822310520627 11 -464.344143695271 21 -694.940121314314 31 738.078199114136 12 -590.997993226901 22 -590.997993226901 32 738.078199114136 13 -590.997993226901 23 -590.997993226901 33 738.078199114136 70 1 0 3DFACE 8 body_half_outside 10 577.57828073944 20 -864.406983345072 30 1802.66501966685 11 381.734128610352 21 -921.587710511788 31 1708.93950189862 12 554.192057578438 22 -829.407026995336 32 1708.93950189862 13 554.192057578438 23 -829.407026995336 33 1708.93950189862 70 1 0 3DFACE 8 body_half_outside 10 381.734128610352 20 -921.587710511788 30 1708.93950189862 11 577.57828073944 21 -864.406983345072 31 1802.66501966685 12 399.51558814382 22 -964.515951276276 32 1812.39759571907 13 399.51558814382 23 -964.515951276276 33 1812.39759571907 70 3 0 3DFACE 8 body_half_outside 10 399.51558814382 20 -964.515951276276 30 1812.39759571907 11 577.57828073944 21 -864.406983345072 31 1802.66501966685 12 540.896876185886 22 -887.575434400246 32 1809.69309245876 13 540.896876185886 23 -887.575434400246 33 1809.69309245876 70 13 0 3DFACE 8 body_half_outside 10 399.51558814382 20 -964.515951276276 30 1812.39759571907 11 540.896876185886 21 -887.575434400246 31 1809.69309245876 12 533.995007415167 22 -892.635204119545 32 1812.39759571907 13 533.995007415167 23 -892.635204119545 33 1812.39759571907 70 1 0 3DFACE 8 body_half_outside 10 -781.35466353334 20 -731.718944065101 30 1933.51796332002 11 -891.670534105406 21 -595.795202951324 31 1922.19277204157 12 -761.987076679027 22 -753.814953035805 32 1922.19277204157 13 -761.987076679027 23 -753.814953035805 33 1922.19277204157 70 1 0 3DFACE 8 body_half_outside 10 -891.670534105406 20 -595.795202951324 30 1922.19277204157 11 -781.35466353334 21 -731.718944065101 31 1933.51796332002 12 -804.883917627287 22 -707.527532613081 32 1967.25758629213 13 -804.883917627287 23 -707.527532613081 33 1967.25758629213 70 13 0 3DFACE 8 body_half_outside 10 -891.670534105406 20 -595.795202951324 30 1922.19277204157 11 -804.883917627287 21 -707.527532613081 31 1967.25758629213 12 -818.480102290147 22 -696.846172894875 32 2011.59249120966 13 -818.480102290147 23 -696.846172894875 33 2011.59249120966 70 13 0 3DFACE 8 body_half_outside 10 -891.670534105406 20 -595.795202951324 30 1922.19277204157 11 -818.480102290147 21 -696.846172894875 31 2011.59249120966 12 -897.961029579872 22 -599.99837764929 32 2011.5925230317 13 -897.961029579872 23 -599.99837764929 33 2011.5925230317 70 1 0 3DFACE 8 body_half_outside 10 -1051.79710945546 20 -209.215453044867 30 2148.21162800104 11 -1079.96854760957 21 3.60955709766131e-13 31 2058.8118770109 12 -1059.21725479392 22 -210.691411720441 32 2058.8118770109 13 -1059.21725479392 23 -210.691411720441 33 2058.8118770109 70 1 0 3DFACE 8 body_half_outside 10 -1079.96854760957 20 3.60955709766131e-13 30 2058.8118770109 11 -1051.79710945546 21 -209.215453044867 31 2148.21162800104 12 -1072.40303302985 22 3.60955709766131e-13 32 2148.21162800104 13 -1072.40303302985 23 3.60955709766131e-13 33 2148.21162800104 70 1 0 3DFACE 8 body_half_outside 10 -832.543811724793 20 -84.6615196498334 30 2549.0746800213 11 -747.450883605455 21 1.80477854883065e-13 31 2549.0746800213 12 -840.882243605455 22 1.80477854883065e-13 32 2549.0746800213 13 -840.882243605455 23 1.80477854883065e-13 33 2549.0746800213 70 1 0 3DFACE 8 body_half_outside 10 -747.450883605455 20 1.80477854883065e-13 30 2549.0746800213 11 -832.543811724793 21 -84.6615196498334 31 2549.0746800213 12 -824.724927080674 22 -164.047987682633 32 2549.0746800213 13 -824.724927080674 23 -164.047987682633 33 2549.0746800213 70 13 0 3DFACE 8 body_half_outside 10 -747.450883605455 20 1.80477854883065e-13 30 2549.0746800213 11 -824.724927080674 21 -164.047987682633 31 2549.0746800213 12 -823.172319072743 22 -169.166250356441 32 2549.0746800213 13 -823.172319072743 23 -169.166250356441 33 2549.0746800213 70 13 0 3DFACE 8 body_half_outside 10 -747.450883605455 20 1.80477854883065e-13 30 2549.0746800213 11 -823.172319072743 21 -169.166250356441 31 2549.0746800213 12 -798.491399420167 22 -250.528338641286 32 2549.0746800213 13 -798.491399420167 23 -250.528338641286 33 2549.0746800213 70 13 0 3DFACE 8 body_half_outside 10 -747.450883605455 20 1.80477854883065e-13 30 2549.0746800213 11 -798.491399420167 21 -250.528338641286 31 2549.0746800213 12 -776.87389411925 22 -321.791703197793 32 2549.0746800213 13 -776.87389411925 23 -321.791703197793 33 2549.0746800213 70 13 0 3DFACE 8 body_half_outside 10 -747.450883605455 20 1.80477854883065e-13 30 2549.0746800213 11 -776.87389411925 21 -321.791703197793 31 2549.0746800213 12 -771.834238188426 22 -331.220236285058 32 2549.0746800213 13 -771.834238188426 23 -331.220236285058 33 2549.0746800213 70 13 0 3DFACE 8 body_half_outside 10 -747.450883605455 20 1.80477854883065e-13 30 2549.0746800213 11 -771.834238188426 21 -331.220236285058 31 2549.0746800213 12 -731.773964383885 22 -406.167737113607 32 2549.0746800213 13 -731.773964383885 23 -406.167737113607 33 2549.0746800213 70 13 0 3DFACE 8 body_half_outside 10 -747.450883605455 20 1.80477854883065e-13 30 2549.0746800213 11 -731.773964383885 21 -406.167737113607 31 2549.0746800213 12 -733.088824464619 22 -145.820433573828 32 2549.0746800213 13 -733.088824464619 23 -145.820433573828 33 2549.0746800213 70 3 0 3DFACE 8 body_half_outside 10 -733.088824464619 20 -145.820433573828 30 2549.0746800213 11 -731.773964383885 21 -406.167737113607 31 2549.0746800213 12 -690.554572920556 22 -286.037069662455 32 2549.0746800213 13 -690.554572920556 23 -286.037069662455 33 2549.0746800213 70 3 0 3DFACE 8 body_half_outside 10 -690.554572920556 20 -286.037069662455 30 2549.0746800213 11 -731.773964383885 21 -406.167737113607 31 2549.0746800213 12 -699.168033082722 22 -467.169144021929 32 2549.0746800213 13 -699.168033082722 23 -467.169144021929 33 2549.0746800213 70 13 0 3DFACE 8 body_half_outside 10 -690.554572920556 20 -286.037069662455 30 2549.0746800213 11 -699.168033082722 21 -467.169144021929 31 2549.0746800213 12 -689.000369065216 22 -479.558478474255 32 2549.0746800213 13 -689.000369065216 23 -479.558478474255 33 2549.0746800213 70 13 0 3DFACE 8 body_half_outside 10 -690.554572920556 20 -286.037069662455 30 2549.0746800213 11 -689.000369065216 21 -479.558478474255 31 2549.0746800213 12 -621.482696406623 22 -415.26146157539 32 2549.0746800213 13 -621.482696406623 23 -415.26146157539 33 2549.0746800213 70 3 0 3DFACE 8 body_half_outside 10 -621.482696406623 20 -415.26146157539 30 2549.0746800213 11 -689.000369065216 21 -479.558478474255 31 2549.0746800213 12 -635.110018052195 22 -545.224061178794 32 2549.0746800213 13 -635.110018052195 23 -545.224061178794 33 2549.0746800213 70 13 0 3DFACE 8 body_half_outside 10 -621.482696406623 20 -415.26146157539 30 2549.0746800213 11 -635.110018052195 21 -545.224061178794 31 2549.0746800213 12 -594.593536632776 22 -594.593536632776 32 2549.0746800213 13 -594.593536632776 23 -594.593536632776 33 2549.0746800213 70 13 0 3DFACE 8 body_half_outside 10 -621.482696406623 20 -415.26146157539 30 2549.0746800213 11 -594.593536632776 21 -594.593536632776 31 2549.0746800213 12 -528.527588401294 22 -528.527588401294 32 2549.0746800213 13 -528.527588401294 23 -528.527588401294 33 2549.0746800213 70 3 0 3DFACE 8 body_half_outside 10 -528.527588401294 20 -528.527588401294 30 2549.0746800213 11 -594.593536632776 21 -594.593536632776 31 2549.0746800213 12 -578.08321102903 22 -608.143210685445 32 2549.0746800213 13 -578.08321102903 23 -608.143210685445 33 2549.0746800213 70 13 0 3DFACE 8 body_half_outside 10 -528.527588401294 20 -528.527588401294 30 2549.0746800213 11 -578.08321102903 21 -608.143210685445 31 2549.0746800213 12 -512.438676164039 22 -662.016288182956 32 2549.0746800213 13 -512.438676164039 23 -662.016288182956 33 2549.0746800213 70 13 0 3DFACE 8 body_half_outside 10 -528.527588401294 20 -528.527588401294 30 2549.0746800213 11 -512.438676164039 21 -662.016288182956 31 2549.0746800213 12 -415.26146157539 22 -621.482696406623 32 2549.0746800213 13 -415.26146157539 23 -621.482696406623 33 2549.0746800213 70 3 0 3DFACE 8 body_half_outside 10 -415.26146157539 20 -621.482696406623 30 2549.0746800213 11 -512.438676164039 21 -662.016288182956 31 2549.0746800213 12 -467.169144021929 22 -699.168033082722 32 2549.0746800213 13 -467.169144021929 23 -699.168033082722 33 2549.0746800213 70 13 0 3DFACE 8 body_half_outside 10 -415.26146157539 20 -621.482696406623 30 2549.0746800213 11 -467.169144021929 21 -699.168033082722 31 2549.0746800213 12 -443.635339973588 22 -711.747113417844 32 2549.0746800213 13 -443.635339973588 23 -711.747113417844 33 2549.0746800213 70 13 0 3DFACE 8 body_half_outside 10 -415.26146157539 20 -621.482696406623 30 2549.0746800213 11 -443.635339973588 21 -711.747113417844 31 2549.0746800213 12 -368.760188696337 22 -751.768715581535 32 2549.0746800213 13 -368.760188696337 23 -751.768715581535 33 2549.0746800213 70 13 0 3DFACE 8 body_half_outside 10 -415.26146157539 20 -621.482696406623 30 2549.0746800213 11 -368.760188696337 21 -751.768715581535 31 2549.0746800213 12 -286.037069662455 22 -690.554572920556 32 2549.0746800213 13 -286.037069662455 23 -690.554572920556 33 2549.0746800213 70 3 0 3DFACE 8 body_half_outside 10 -286.037069662455 20 -690.554572920556 30 2549.0746800213 11 -368.760188696337 21 -751.768715581535 31 2549.0746800213 12 -321.791703197793 22 -776.87389411925 32 2549.0746800213 13 -321.791703197793 23 -776.87389411925 33 2549.0746800213 70 13 0 3DFACE 8 body_half_outside 10 -286.037069662455 20 -690.554572920556 30 2549.0746800213 11 -321.791703197793 21 -776.87389411925 31 2549.0746800213 12 -291.163466606751 22 -786.164868113883 32 2549.0746800213 13 -291.163466606751 23 -786.164868113883 33 2549.0746800213 70 13 0 3DFACE 8 body_half_outside 10 -286.037069662455 20 -690.554572920556 30 2549.0746800213 11 -291.163466606751 21 -786.164868113883 31 2549.0746800213 12 -209.932194866118 22 -810.806105001612 32 2549.0746800213 13 -209.932194866118 23 -810.806105001612 33 2549.0746800213 70 13 0 3DFACE 8 body_half_outside 10 -286.037069662455 20 -690.554572920556 30 2549.0746800213 11 -209.932194866118 21 -810.806105001612 31 2549.0746800213 12 -145.820433573828 22 -733.088824464619 32 2549.0746800213 13 -145.820433573828 23 -733.088824464619 33 2549.0746800213 70 3 0 3DFACE 8 body_half_outside 10 -145.820433573828 20 -733.088824464619 30 2549.0746800213 11 -209.932194866118 21 -810.806105001612 31 2549.0746800213 12 -164.047987682633 22 -824.724927080674 32 2549.0746800213 13 -164.047987682633 23 -824.724927080674 33 2549.0746800213 70 13 0 3DFACE 8 body_half_outside 10 -145.820433573828 20 -733.088824464619 30 2549.0746800213 11 -164.047987682633 21 -824.724927080674 31 2549.0746800213 12 -126.903621448811 22 -828.383327837855 32 2549.0746800213 13 -126.903621448811 23 -828.383327837855 33 2549.0746800213 70 13 0 3DFACE 8 body_half_outside 10 -145.820433573828 20 -733.088824464619 30 2549.0746800213 11 -126.903621448811 21 -828.383327837855 31 2549.0746800213 12 0.0 22 -747.450883605455 32 2549.0746800213 13 0.0 23 -747.450883605455 33 2549.0746800213 70 3 0 3DFACE 8 body_half_outside 10 0.0 20 -747.450883605455 30 2549.0746800213 11 -126.903621448811 21 -828.383327837855 31 2549.0746800213 12 -42.4327807980229 22 -836.702979476311 32 2549.0746800213 13 -42.4327807980229 23 -836.702979476311 33 2549.0746800213 70 13 0 3DFACE 8 body_half_outside 10 0.0 20 -747.450883605455 30 2549.0746800213 11 -42.4327807980229 21 -836.702979476311 31 2549.0746800213 12 0.0 22 -840.882243605455 32 2549.0746800213 13 0.0 23 -840.882243605455 33 2549.0746800213 70 13 0 3DFACE 8 body_half_outside 10 0.0 20 -747.450883605455 30 2549.0746800213 11 0.0 21 -840.882243605455 31 2549.0746800213 12 42.4327751671525 22 -836.702980030903 32 2549.0746800213 13 42.4327751671525 23 -836.702980030903 33 2549.0746800213 70 13 0 3DFACE 8 body_half_outside 10 0.0 20 -747.450883605455 30 2549.0746800213 11 42.4327751671525 21 -836.702980030903 31 2549.0746800213 12 145.820433573828 22 -733.088824464618 32 2549.0746800213 13 145.820433573828 23 -733.088824464618 33 2549.0746800213 70 3 0 3DFACE 8 body_half_outside 10 145.820433573828 20 -733.088824464618 30 2549.0746800213 11 42.4327751671525 21 -836.702980030903 31 2549.0746800213 12 126.903660366379 22 -828.38332400481 32 2549.0746800213 13 126.903660366379 23 -828.38332400481 33 2549.0746800213 70 13 0 3DFACE 8 body_half_outside 10 145.820433573828 20 -733.088824464618 30 2549.0746800213 11 126.903660366379 21 -828.38332400481 31 2549.0746800213 12 164.047987682633 22 -824.724927080674 32 2549.0746800213 13 164.047987682633 23 -824.724927080674 33 2549.0746800213 70 13 0 3DFACE 8 body_half_outside 10 145.820433573828 20 -733.088824464618 30 2549.0746800213 11 164.047987682633 21 -824.724927080674 31 2549.0746800213 12 286.037069662455 22 -690.554572920556 32 2549.0746800213 13 286.037069662455 23 -690.554572920556 33 2549.0746800213 70 3 0 3DFACE 8 body_half_outside 10 286.037069662455 20 -690.554572920556 30 2549.0746800213 11 164.047987682633 21 -824.724927080674 31 2549.0746800213 12 209.932273259994 22 -810.806081221089 32 2549.0746800213 13 209.932273259994 23 -810.806081221089 33 2549.0746800213 70 13 0 3DFACE 8 body_half_outside 10 286.037069662455 20 -690.554572920556 30 2549.0746800213 11 209.932273259994 21 -810.806081221089 31 2549.0746800213 12 291.163503259545 22 -786.16485699538 32 2549.0746800213 13 291.163503259545 23 -786.16485699538 33 2549.0746800213 70 13 0 3DFACE 8 body_half_outside 10 286.037069662455 20 -690.554572920556 30 2549.0746800213 11 291.163503259545 21 -786.16485699538 31 2549.0746800213 12 415.26146157539 22 -621.482696406623 32 2549.0746800213 13 415.26146157539 23 -621.482696406623 33 2549.0746800213 70 3 0 3DFACE 8 body_half_outside 10 415.26146157539 20 -621.482696406623 30 2549.0746800213 11 291.163503259545 21 -786.16485699538 31 2549.0746800213 12 321.791703197793 22 -776.87389411925 32 2549.0746800213 13 321.791703197793 23 -776.87389411925 33 2549.0746800213 70 13 0 3DFACE 8 body_half_outside 10 415.26146157539 20 -621.482696406623 30 2549.0746800213 11 321.791703197793 21 -776.87389411925 31 2549.0746800213 12 368.760184385968 22 -751.768717885475 32 2549.0746800213 13 368.760184385968 23 -751.768717885475 33 2549.0746800213 70 13 0 3DFACE 8 body_half_outside 10 415.26146157539 20 -621.482696406623 30 2549.0746800213 11 368.760184385968 21 -751.768717885475 31 2549.0746800213 12 443.635403824213 22 -711.747079288974 32 2549.0746800213 13 443.635403824213 23 -711.747079288974 33 2549.0746800213 70 13 0 3DFACE 8 body_half_outside 10 415.26146157539 20 -621.482696406623 30 2549.0746800213 11 443.635403824213 21 -711.747079288974 31 2549.0746800213 12 528.527588401294 22 -528.527588401294 32 2549.0746800213 13 528.527588401294 23 -528.527588401294 33 2549.0746800213 70 3 0 3DFACE 8 body_half_outside 10 528.527588401294 20 -528.527588401294 30 2549.0746800213 11 443.635403824213 21 -711.747079288974 31 2549.0746800213 12 467.169144021928 22 -699.168033082722 32 2549.0746800213 13 467.169144021928 23 -699.168033082722 33 2549.0746800213 70 13 0 3DFACE 8 body_half_outside 10 528.527588401294 20 -528.527588401294 30 2549.0746800213 11 467.169144021928 21 -699.168033082722 31 2549.0746800213 12 512.438726622327 22 -662.016246772909 32 2549.0746800213 13 512.438726622327 23 -662.016246772909 33 2549.0746800213 70 13 0 3DFACE 8 body_half_outside 10 528.527588401294 20 -528.527588401294 30 2549.0746800213 11 512.438726622327 21 -662.016246772909 31 2549.0746800213 12 578.083233221301 22 -608.143192472719 32 2549.0746800213 13 578.083233221301 23 -608.143192472719 33 2549.0746800213 70 13 0 3DFACE 8 body_half_outside 10 528.527588401294 20 -528.527588401294 30 2549.0746800213 11 578.083233221301 21 -608.143192472719 31 2549.0746800213 12 621.482696406623 22 -415.26146157539 32 2549.0746800213 13 621.482696406623 23 -415.26146157539 33 2549.0746800213 70 3 0 3DFACE 8 body_half_outside 10 621.482696406623 20 -415.26146157539 30 2549.0746800213 11 578.083233221301 21 -608.143192472719 31 2549.0746800213 12 594.593536632776 22 -594.593536632776 32 2549.0746800213 13 594.593536632776 23 -594.593536632776 33 2549.0746800213 70 13 0 3DFACE 8 body_half_outside 10 621.482696406623 20 -415.26146157539 30 2549.0746800213 11 594.593536632776 21 -594.593536632776 31 2549.0746800213 12 635.110015865962 22 -545.224063842726 32 2549.0746800213 13 635.110015865962 23 -545.224063842726 33 2549.0746800213 70 13 0 3DFACE 8 body_half_outside 10 621.482696406623 20 -415.26146157539 30 2549.0746800213 11 635.110015865962 21 -545.224063842726 31 2549.0746800213 12 690.554572920556 22 -286.037069662455 32 2549.0746800213 13 690.554572920556 23 -286.037069662455 33 2549.0746800213 70 3 0 3DFACE 8 body_half_outside 10 690.554572920556 20 -286.037069662455 30 2549.0746800213 11 635.110015865962 21 -545.224063842726 31 2549.0746800213 12 689.000383427084 22 -479.558460974267 32 2549.0746800213 13 689.000383427084 23 -479.558460974267 33 2549.0746800213 70 13 0 3DFACE 8 body_half_outside 10 690.554572920556 20 -286.037069662455 30 2549.0746800213 11 689.000383427084 21 -479.558460974267 31 2549.0746800213 12 699.168033082722 22 -467.169144021929 32 2549.0746800213 13 699.168033082722 23 -467.169144021929 33 2549.0746800213 70 13 0 3DFACE 8 body_half_outside 10 690.554572920556 20 -286.037069662455 30 2549.0746800213 11 699.168033082722 21 -467.169144021929 31 2549.0746800213 12 733.088824464618 22 -145.820433573828 32 2549.0746800213 13 733.088824464618 23 -145.820433573828 33 2549.0746800213 70 3 0 3DFACE 8 body_half_outside 10 733.088824464618 20 -145.820433573828 30 2549.0746800213 11 699.168033082722 21 -467.169144021929 31 2549.0746800213 12 731.773963185201 22 -406.167739356189 32 2549.0746800213 13 731.773963185201 23 -406.167739356189 33 2549.0746800213 70 13 0 3DFACE 8 body_half_outside 10 733.088824464618 20 -145.820433573828 30 2549.0746800213 11 731.773963185201 21 -406.167739356189 31 2549.0746800213 12 771.834245650684 22 -331.220222324155 32 2549.0746800213 13 771.834245650684 23 -331.220222324155 33 2549.0746800213 70 13 0 3DFACE 8 body_half_outside 10 733.088824464618 20 -145.820433573828 30 2549.0746800213 11 771.834245650684 21 -331.220222324155 31 2549.0746800213 12 747.450883605455 22 1.80477854883065e-13 32 2549.0746800213 13 747.450883605455 23 1.80477854883065e-13 33 2549.0746800213 70 3 0 3DFACE 8 body_half_outside 10 747.450883605455 20 1.80477854883065e-13 30 2549.0746800213 11 771.834245650684 21 -331.220222324155 31 2549.0746800213 12 840.882243605455 22 1.80477854883065e-13 32 2549.0746800213 13 840.882243605455 23 1.80477854883065e-13 33 2549.0746800213 70 3 0 3DFACE 8 body_half_outside 10 840.882243605455 20 1.80477854883065e-13 30 2549.0746800213 11 771.834245650684 21 -331.220222324155 31 2549.0746800213 12 776.87389411925 22 -321.791703197793 32 2549.0746800213 13 776.87389411925 23 -321.791703197793 33 2549.0746800213 70 13 0 3DFACE 8 body_half_outside 10 840.882243605455 20 1.80477854883065e-13 30 2549.0746800213 11 776.87389411925 21 -321.791703197793 31 2549.0746800213 12 798.491402853314 22 -250.528327323719 32 2549.0746800213 13 798.491402853314 23 -250.528327323719 33 2549.0746800213 70 13 0 3DFACE 8 body_half_outside 10 840.882243605455 20 1.80477854883065e-13 30 2549.0746800213 11 798.491402853314 21 -250.528327323719 31 2549.0746800213 12 823.17232140581 22 -169.166242665351 32 2549.0746800213 13 823.17232140581 23 -169.166242665351 33 2549.0746800213 70 13 0 3DFACE 8 body_half_outside 10 840.882243605455 20 1.80477854883065e-13 30 2549.0746800213 11 823.17232140581 21 -169.166242665351 31 2549.0746800213 12 824.724927080674 22 -164.047987682633 32 2549.0746800213 13 824.724927080674 23 -164.047987682633 33 2549.0746800213 70 13 0 3DFACE 8 body_half_outside 10 840.882243605455 20 1.80477854883065e-13 30 2549.0746800213 11 824.724927080674 21 -164.047987682633 31 2549.0746800213 12 832.543812136584 22 -84.6615154688545 32 2549.0746800213 13 832.543812136584 23 -84.6615154688545 33 2549.0746800213 70 1 0 3DFACE 8 body_half_outside 10 891.670534105407 20 -595.795202951324 30 1922.19277204157 11 892.68433542823 21 -596.472603338329 31 1936.60079223358 12 884.794355702396 22 -604.173850577965 32 1922.19277204157 13 884.794355702396 23 -604.173850577965 33 1922.19277204157 70 0 0 3DFACE 8 body_half_outside 10 891.670534105407 20 -595.795202951324 30 1922.19277204157 11 897.90069342138 21 -589.158254916404 31 1950.28497564898 12 892.68433542823 22 -596.472603338329 32 1936.60079223358 13 892.68433542823 23 -596.472603338329 33 1936.60079223358 70 1 0 3DFACE 8 body_half_outside 10 897.90069342138 20 -589.158254916404 30 1950.28497564898 11 891.670534105407 21 -595.795202951324 31 1922.19277204157 12 990.771212819308 22 -410.390873558597 32 1922.19277204157 13 990.771212819308 23 -410.390873558597 33 1922.19277204157 70 13 0 3DFACE 8 body_half_outside 10 897.90069342138 20 -589.158254916404 30 1950.28497564898 11 990.771212819308 21 -410.390873558597 31 1922.19277204157 12 908.625259608371 22 -576.530907025343 32 1991.91176299638 13 908.625259608371 23 -576.530907025343 33 1991.91176299638 70 3 0 3DFACE 8 body_half_outside 10 908.625259608371 20 -576.530907025343 30 1991.91176299638 11 990.771212819308 21 -410.390873558597 31 1922.19277204157 12 911.540741979581 22 -574.59252267949 32 2011.5925230317 13 911.540741979581 23 -574.59252267949 33 2011.5925230317 70 3 0 3DFACE 8 body_half_outside 10 911.540741979581 20 -574.59252267949 30 2011.5925230317 11 990.771212819308 21 -410.390873558597 31 1922.19277204157 12 997.760836892423 22 -413.286070645571 32 2011.5925230317 13 997.760836892423 23 -413.286070645571 33 2011.5925230317 70 1 0 3DFACE 8 body_half_outside 10 599.277053327022 20 -599.277053327022 30 796.153149972084 11 464.344143695271 21 -694.940121314314 31 738.078199114136 12 590.997993226901 22 -590.997993226901 32 738.078199114136 13 590.997993226901 23 -590.997993226901 33 738.078199114136 70 1 0 3DFACE 8 body_half_outside 10 464.344143695271 20 -694.940121314314 30 738.078199114136 11 599.277053327022 21 -599.277053327022 31 796.153149972084 12 470.84895947612 22 -704.67526609701 32 796.153149972084 13 470.84895947612 23 -704.67526609701 33 796.153149972084 70 1 0 3DFACE 8 body_half_outside 10 180.675224578544 20 -720.365482284693 30 1985.88990429309 11 104.493588061205 21 -712.163204861239 31 2001.23529816273 12 104.493591159588 22 -720.365490157703 32 1985.88990169709 13 104.493591159588 23 -720.365490157703 33 1985.88990169709 70 1 0 3DFACE 8 body_half_outside 10 104.493588061205 20 -712.163204861239 30 2001.23529816273 11 180.675224578544 21 -720.365482284693 31 1985.88990429309 12 180.675224578544 22 -712.163201305221 32 2001.23529268221 13 180.675224578544 23 -712.163201305221 33 2001.23529268221 70 1 0 3DFACE 8 body_half_outside 10 -677.173649450057 20 -452.47296672438 30 682.822310520627 11 -554.385481313987 21 -554.385481313987 31 631.979456702016 12 -575.888850875701 22 -575.888850875701 32 682.822310520627 13 -575.888850875701 23 -575.888850875701 33 682.822310520627 70 1 0 3DFACE 8 body_half_outside 10 -554.385481313987 20 -554.385481313987 30 631.979456702016 11 -677.173649450057 21 -452.47296672438 31 682.822310520627 12 -651.888361812631 22 -435.577877671407 32 631.979456702016 13 -651.888361812631 23 -435.577877671407 33 631.979456702016 70 1 0 3DFACE 8 body_half_outside 10 -694.940121314314 20 -464.344143695271 30 738.078199114136 11 -575.888850875701 21 -575.888850875701 31 682.822310520627 12 -590.997993226901 22 -590.997993226901 32 738.078199114136 13 -590.997993226901 23 -590.997993226901 33 738.078199114136 70 1 0 3DFACE 8 body_half_outside 10 -575.888850875701 20 -575.888850875701 30 682.822310520627 11 -694.940121314314 21 -464.344143695271 31 738.078199114136 12 -677.173649450057 22 -452.47296672438 32 682.822310520627 13 -677.173649450057 23 -452.47296672438 33 682.822310520627 70 1 0 3DFACE 8 body_half_outside 10 -43.0469725205787 20 -1075.72879087574 30 2051.86944523768 11 -38.8881027186488 21 -1076.06746493881 31 2059.65014337885 12 -39.3361654272124 22 -1076.09427347395 32 2058.8118770109 13 -39.3361654272124 23 -1076.09427347395 33 2058.8118770109 70 1 0 3DFACE 8 body_half_outside 10 -38.8881027186488 20 -1076.06746493881 30 2059.65014337885 11 -43.0469725205787 21 -1075.72879087574 31 2051.86944523768 12 -38.8881027186484 22 -975.735675994198 32 2059.65014337885 13 -38.8881027186484 23 -975.735675994198 33 2059.65014337885 70 3 0 3DFACE 8 body_half_outside 10 -38.8881027186484 20 -975.735675994198 30 2059.65014337885 11 -43.0469725205787 21 -1075.72879087574 31 2051.86944523768 12 -43.0469725205787 22 -975.791818816059 32 2051.86944523768 13 -43.0469725205787 23 -975.791818816059 33 2051.86944523768 70 1 0 3DFACE 8 body_half_outside 10 -891.670534105406 20 -595.795202951324 30 2148.21162800104 11 -780.975408992987 21 -732.34720289276 31 2135.63378054399 12 -759.379832416841 22 -756.991889361348 32 2148.21162800104 13 -759.379832416841 23 -756.991889361348 33 2148.21162800104 70 1 0 3DFACE 8 body_half_outside 10 -780.975408992987 20 -732.34720289276 30 2135.63378054399 11 -891.670534105406 21 -595.795202951324 31 2148.21162800104 12 -804.422958470166 22 -708.167767562713 32 2102.55187642937 13 -804.422958470166 23 -708.167767562713 33 2102.55187642937 70 3 0 3DFACE 8 body_half_outside 10 -804.422958470166 20 -708.167767562713 30 2102.55187642937 11 -891.670534105406 21 -595.795202951324 31 2148.21162800104 12 -818.273878310588 22 -697.096462294947 32 2058.80160712022 13 -818.273878310588 23 -697.096462294947 33 2058.80160712022 70 3 0 3DFACE 8 body_half_outside 10 -818.273878310588 20 -697.096462294947 30 2058.80160712022 11 -891.670534105406 21 -595.795202951324 31 2148.21162800104 12 -897.961029579872 22 -599.99837764929 32 2058.8118770109 13 -897.961029579872 23 -599.99837764929 33 2058.8118770109 70 1 0 3DFACE 8 body_half_outside 10 -595.795202951324 20 -891.670534105406 30 1922.19277204157 11 -738.20854961057 21 -738.20854961057 31 1812.39759571907 12 -580.006735667279 22 -868.04142298445 32 1812.39759571907 13 -580.006735667279 23 -868.04142298445 33 1812.39759571907 70 1 0 3DFACE 8 body_half_outside 10 -738.20854961057 20 -738.20854961057 30 1812.39759571907 11 -595.795202951324 21 -891.670534105406 31 1922.19277204157 12 -712.200510303116 22 -793.069743896677 32 1912.98147661467 13 -712.200510303116 23 -793.069743896677 33 1912.98147661467 70 15 0 3DFACE 8 body_half_outside 10 -712.200510303116 20 -793.069743896677 30 1912.98147661467 11 -595.795202951324 21 -891.670534105406 31 1922.19277204157 12 -697.04031921187 22 -808.580814515394 32 1922.19277204157 13 -697.04031921187 23 -808.580814515394 33 1922.19277204157 70 1 0 3DFACE 8 body_half_outside 10 -738.20854961057 20 -738.20854961057 30 1812.39759571907 11 -750.032010089465 21 -762.726244296354 31 1915.09420023775 12 -757.858868059522 22 -757.858868059522 32 1919.76361420147 13 -757.858868059522 23 -757.858868059522 33 1919.76361420147 70 1 0 3DFACE 8 body_half_outside 10 -750.032010089465 20 -762.726244296354 30 1915.09420023775 11 -738.20854961057 21 -738.20854961057 31 1812.39759571907 12 -712.200510303116 22 -793.069743896677 32 1912.98147661467 13 -712.200510303116 23 -793.069743896677 33 1912.98147661467 70 3 0 3DFACE 8 body_half_outside 10 -595.795202951324 20 -891.670534105406 30 1922.19277204157 11 -679.407718084958 21 -824.046894149155 31 1931.32901160226 12 -697.04031921187 22 -808.580814515394 32 1922.19277204157 13 -697.04031921187 23 -808.580814515394 33 1922.19277204157 70 1 0 3DFACE 8 body_half_outside 10 -679.407718084958 20 -824.046894149155 30 1931.32901160226 11 -595.795202951324 21 -891.670534105406 31 1922.19277204157 12 -599.99837764929 22 -897.961029579872 32 2011.5925230317 13 -599.99837764929 23 -897.961029579872 33 2011.5925230317 70 13 0 3DFACE 8 body_half_outside 10 -679.407718084958 20 -824.046894149155 30 1931.32901160226 11 -599.99837764929 21 -897.961029579872 31 2011.5925230317 12 -654.791104458432 22 -848.015122202593 32 1965.89490198638 13 -654.791104458432 23 -848.015122202593 33 1965.89490198638 70 3 0 3DFACE 8 body_half_outside 10 -654.791104458432 20 -848.015122202593 30 1965.89490198638 11 -599.99837764929 21 -897.961029579872 31 2011.5925230317 12 -643.970452120392 22 -861.831591212861 32 2011.20252653019 13 -643.970452120392 23 -861.831591212861 33 2011.20252653019 70 3 0 3DFACE 8 body_half_outside 10 -643.970452120392 20 -861.831591212861 30 2011.20252653019 11 -599.99837764929 21 -897.961029579872 31 2011.5925230317 12 -644.006839982028 22 -861.844217926399 32 2011.59252303171 13 -644.006839982028 23 -861.844217926399 33 2011.59252303171 70 1 0 3DFACE 8 body_half_outside 10 594.593536632776 20 -594.593536632776 30 914.026066884025 11 471.799768952456 21 -706.098253038493 31 855.37186879426 12 600.487204246519 22 -600.48720424652 32 855.37186879426 13 600.487204246519 23 -600.48720424652 33 855.37186879426 70 1 0 3DFACE 8 body_half_outside 10 471.799768952456 20 -706.098253038493 30 855.37186879426 11 594.593536632776 21 -594.593536632776 31 914.026066884025 12 467.169144021928 22 -699.168033082722 32 914.026066884025 13 467.169144021928 23 -699.168033082722 33 914.026066884025 70 1 0 3DFACE 8 body_half_outside 10 467.169144021928 20 -699.168033082722 30 914.026066884025 11 462.461640169813 21 -462.461640169813 31 1054.1729200213 12 363.353779128852 22 -543.797359730523 32 1054.1729200213 13 363.353779128852 23 -543.797359730523 33 1054.1729200213 70 1 0 3DFACE 8 body_half_outside 10 462.461640169813 20 -462.461640169813 30 1054.1729200213 11 467.169144021928 21 -699.168033082722 31 914.026066884025 12 594.593536632776 22 -594.593536632776 32 914.026066884025 13 594.593536632776 23 -594.593536632776 33 914.026066884025 70 1 0 3DFACE 8 body_half_outside 10 495.494614285553 20 -495.494614285553 30 1241.03564002131 11 441.215302798659 21 -660.325364744672 31 1054.1729200213 12 561.560562517035 22 -561.560562517035 32 1054.1729200213 13 561.560562517035 23 -561.560562517035 33 1054.1729200213 70 1 0 3DFACE 8 body_half_outside 10 441.215302798659 20 -660.325364744672 30 1054.1729200213 11 495.494614285553 21 -495.494614285553 31 1241.03564002131 12 389.307620352121 22 -582.640028068573 32 1241.03564002131 13 389.307620352121 23 -582.640028068573 33 1241.03564002131 70 1 0 3DFACE 8 body_half_outside 10 528.527588401294 20 -528.527588401294 30 1427.8983600213 11 467.169144021928 21 -699.168033082722 31 1241.03564002131 12 594.593536632776 22 -594.593536632775 32 1241.03564002131 13 594.593536632776 23 -594.593536632775 33 1241.03564002131 70 1 0 3DFACE 8 body_half_outside 10 467.169144021928 20 -699.168033082722 30 1241.03564002131 11 528.527588401294 21 -528.527588401294 31 1427.8983600213 12 415.26146157539 22 -621.482696406623 32 1427.8983600213 13 415.26146157539 23 -621.482696406623 33 1427.8983600213 70 1 0 3DFACE 8 body_half_outside 10 -916.376162171087 20 -182.278551827736 30 2455.6433200213 11 -997.519349743285 21 3.60955709766131e-13 31 2361.46489814399 12 -978.352295145615 22 -194.606371158736 32 2361.46489814399 13 -978.352295145615 23 -194.606371158736 33 2361.46489814399 70 1 0 3DFACE 8 body_half_outside 10 -997.519349743285 20 3.60955709766131e-13 30 2361.46489814399 11 -916.376162171087 21 -182.278551827736 31 2455.6433200213 12 -925.06395772174 22 -94.0698833092507 32 2455.6433200213 13 -925.06395772174 23 -94.0698833092507 33 2455.6433200213 70 13 0 3DFACE 8 body_half_outside 10 -997.519349743285 20 3.60955709766131e-13 30 2361.46489814399 11 -925.06395772174 21 -94.0698833092507 31 2455.6433200213 12 -934.329032542513 22 3.60955709766131e-13 32 2455.6433200213 13 -934.329032542513 23 3.60955709766131e-13 33 2455.6433200213 70 1 0 3DFACE 8 body_half_outside 10 -561.560562517035 20 -561.560562517035 30 1614.7610800213 11 -670.393897307106 21 -575.514299446691 31 1427.8983600213 12 -627.626510748516 22 -627.626510748516 32 1427.8983600213 13 -627.626510748516 23 -627.626510748516 33 1427.8983600213 70 1 0 3DFACE 8 body_half_outside 10 -670.393897307106 20 -575.514299446691 30 1427.8983600213 11 -561.560562517035 21 -561.560562517035 31 1614.7610800213 12 -727.278190985583 22 -506.200587048885 32 1427.8983600213 13 -727.278190985583 23 -506.200587048885 33 1427.8983600213 70 3 0 3DFACE 8 body_half_outside 10 -727.278190985583 20 -506.200587048885 30 1427.8983600213 11 -561.560562517035 21 -561.560562517035 31 1614.7610800213 12 -660.325364744672 22 -441.215302798659 32 1614.7610800213 13 -660.325364744672 23 -441.215302798659 33 1614.7610800213 70 13 0 3DFACE 8 body_half_outside 10 -727.278190985583 20 -506.200587048885 30 1427.8983600213 11 -660.325364744672 21 -441.215302798659 31 1614.7610800213 12 -738.010701420772 22 -493.122985245198 32 1427.8983600213 13 -738.010701420772 23 -493.122985245198 33 1427.8983600213 70 1 0 3DFACE 8 body_half_outside 10 997.519349743285 20 1.80477854883065e-13 30 2361.46489814399 11 916.376162171087 21 -182.278551827737 31 2455.6433200213 12 978.352295145615 22 -194.606371158736 32 2361.46489814399 13 978.352295145615 23 -194.606371158736 33 2361.46489814399 70 1 0 3DFACE 8 body_half_outside 10 916.376162171087 20 -182.278551827737 30 2455.6433200213 11 997.519349743285 21 1.80477854883065e-13 31 2361.46489814399 12 925.063958382437 22 -94.0698766010765 32 2455.6433200213 13 925.063958382437 23 -94.0698766010765 33 2455.6433200213 70 3 0 3DFACE 8 body_half_outside 10 925.063958382437 20 -94.0698766010765 30 2455.6433200213 11 997.519349743285 21 1.80477854883065e-13 31 2361.46489814399 12 934.329032542513 22 1.80477854883065e-13 32 2455.6433200213 13 934.329032542513 23 1.80477854883065e-13 33 2455.6433200213 70 1 0 3DFACE 8 body_half_outside 10 -757.051052836406 20 -872.59583635536 30 2110.05176266305 11 -713.051374182295 21 -793.031288591004 31 2155.44278114838 12 -779.335772128321 22 -850.040945080999 32 2123.14819601944 13 -779.335772128321 23 -850.040945080999 33 2123.14819601944 70 1 0 3DFACE 8 body_half_outside 10 -713.051374182295 20 -793.031288591004 30 2155.44278114838 11 -757.051052836406 21 -872.59583635536 31 2110.05176266305 12 -700.811796716974 22 -805.485642916867 32 2148.21162800104 13 -700.811796716974 23 -805.485642916867 33 2148.21162800104 70 3 0 3DFACE 8 body_half_outside 10 -700.811796716974 20 -805.485642916867 30 2148.21162800104 11 -757.051052836406 21 -872.59583635536 31 2110.05176266305 12 -680.351354626835 22 -823.413171149779 32 2137.7839549476 13 -680.351354626835 23 -823.413171149779 33 2137.7839549476 70 1 0 3DFACE 8 body_half_outside 10 -803.639076572628 20 -825.829443784589 30 2123.11658846682 11 -780.975408992987 21 -732.34720289276 31 2135.63378054399 12 -826.261008377686 22 -803.647314060702 32 2109.96175196855 13 -826.261008377686 23 -803.647314060702 33 2109.96175196855 70 1 0 3DFACE 8 body_half_outside 10 -780.975408992987 20 -732.34720289276 30 2135.63378054399 11 -803.639076572628 21 -825.829443784589 31 2123.11658846682 12 -759.379832416841 22 -756.991889361348 32 2148.21162800104 13 -759.379832416841 23 -756.991889361348 33 2148.21162800104 70 3 0 3DFACE 8 body_half_outside 10 -759.379832416841 20 -756.991889361348 30 2148.21162800104 11 -803.639076572628 21 -825.829443784589 31 2123.11658846682 12 -758.175252738136 22 -758.175252738136 32 2148.91211343617 13 -758.175252738136 23 -758.175252738136 33 2148.91211343617 70 3 0 3DFACE 8 body_half_outside 10 -758.175252738136 20 -758.175252738136 30 2148.91211343617 11 -803.639076572628 21 -825.829443784589 31 2123.11658846682 12 -750.226480623555 22 -763.163737563064 32 2153.51833793914 13 -750.226480623555 23 -763.163737563064 33 2153.51833793914 70 1 0 3DFACE 8 body_half_outside 10 -471.799768952456 20 -706.098253038492 30 855.37186879426 11 -599.277053327022 21 -599.277053327022 31 796.153149972084 12 -470.848959476119 22 -704.67526609701 32 796.153149972084 13 -470.848959476119 23 -704.67526609701 33 796.153149972084 70 1 0 3DFACE 8 body_half_outside 10 -599.277053327022 20 -599.277053327022 30 796.153149972084 11 -471.799768952456 21 -706.098253038492 31 855.37186879426 12 -600.487204246519 22 -600.487204246519 32 855.37186879426 13 -600.487204246519 23 -600.487204246519 33 855.37186879426 70 1 0 3DFACE 8 body_half_outside 10 194.606371158736 20 -978.352295145615 30 2361.46489814399 11 1.80477854883065e-13 21 -1043.98454271904 31 2258.00680432354 12 203.671280618918 22 -1023.92467246733 32 2258.00680432354 13 203.671280618918 23 -1023.92467246733 33 2258.00680432354 70 1 0 3DFACE 8 body_half_outside 10 1.80477854883065e-13 20 -1043.98454271904 30 2258.00680432354 11 194.606371158736 21 -978.352295145615 31 2361.46489814399 12 1.80477854883065e-13 22 -997.519349743284 32 2361.46489814399 13 1.80477854883065e-13 23 -997.519349743284 33 2361.46489814399 70 1 0 3DFACE 8 body_half_outside 10 -780.975408992987 20 -732.34720289276 30 2135.63378054399 11 -843.757583494495 21 -786.871584078293 31 2085.68639113261 12 -826.261008377686 22 -803.647314060702 32 2109.96175196855 13 -826.261008377686 23 -803.647314060702 33 2109.96175196855 70 1 0 3DFACE 8 body_half_outside 10 -843.757583494495 20 -786.871584078293 30 2085.68639113261 11 -780.975408992987 21 -732.34720289276 31 2135.63378054399 12 -804.422958470166 22 -708.167767562713 32 2102.55187642937 13 -804.422958470166 23 -708.167767562713 33 2102.55187642937 70 1 0 3DFACE 8 body_half_outside 10 -786.927339360508 20 -735.2933223192 30 2011.59250954971 11 -761.145931803741 21 -761.14593180374 31 1969.69450846846 12 -763.653083482914 22 -763.653083482914 32 2011.5925230317 13 -763.653083482914 23 -763.653083482914 33 2011.5925230317 70 1 0 3DFACE 8 body_half_outside 10 -761.145931803741 20 -761.14593180374 30 1969.69450846846 11 -786.927339360508 21 -735.2933223192 31 2011.59250954971 12 -766.91292419702 22 -754.581509059306 32 1973.17973333127 13 -766.91292419702 23 -754.581509059306 33 1973.17973333127 70 3 0 3DFACE 8 body_half_outside 10 -766.91292419702 20 -754.581509059306 30 1973.17973333127 11 -786.927339360508 21 -735.2933223192 31 2011.59250954971 12 -781.308061641118 22 -739.778791807586 32 1993.80290570042 13 -781.308061641118 23 -739.778791807586 33 1993.80290570042 70 1 0 3DFACE 8 body_half_outside 10 -441.215302798659 20 -660.325364744672 30 1614.7610800213 11 -540.907488126092 21 -698.794973376131 31 1427.8983600213 12 -493.122985245198 22 -738.010701420772 32 1427.8983600213 13 -493.122985245198 23 -738.010701420772 33 1427.8983600213 70 1 0 3DFACE 8 body_half_outside 10 -540.907488126092 20 -698.794973376131 30 1427.8983600213 11 -441.215302798659 21 -660.325364744672 31 1614.7610800213 12 -610.198917737466 22 -641.92896670788 32 1427.8983600213 13 -610.198917737466 23 -641.92896670788 33 1427.8983600213 70 3 0 3DFACE 8 body_half_outside 10 -610.198917737466 20 -641.92896670788 30 1427.8983600213 11 -561.560562517035 21 -561.560562517035 31 1614.7610800213 12 -627.626510748516 22 -627.626510748516 32 1427.8983600213 13 -627.626510748516 23 -627.626510748516 33 1427.8983600213 70 1 0 3DFACE 8 body_half_outside 10 -561.560562517035 20 -561.560562517035 30 1614.7610800213 11 -610.198917737466 21 -641.92896670788 31 1427.8983600213 12 -441.215302798659 22 -660.325364744672 32 1614.7610800213 13 -441.215302798659 23 -660.325364744672 33 1614.7610800213 70 3 0 3DFACE 8 body_half_outside 10 -410.390873558597 20 -990.771212819307 30 1922.19277204157 11 -580.006735667279 21 -868.04142298445 31 1812.39759571907 12 -399.515588143821 22 -964.515951276276 32 1812.39759571907 13 -399.515588143821 23 -964.515951276276 33 1812.39759571907 70 1 0 3DFACE 8 body_half_outside 10 -580.006735667279 20 -868.04142298445 30 1812.39759571907 11 -410.390873558597 21 -990.771212819307 31 1922.19277204157 12 -595.795202951324 22 -891.670534105406 32 1922.19277204157 13 -595.795202951324 23 -891.670534105406 33 1922.19277204157 70 1 0 3DFACE 8 body_half_outside 10 -413.286070645571 20 -997.760836892423 30 2011.5925230317 11 -595.795202951324 21 -891.670534105406 31 1922.19277204157 12 -410.390873558597 22 -990.771212819307 32 1922.19277204157 13 -410.390873558597 23 -990.771212819307 33 1922.19277204157 70 1 0 3DFACE 8 body_half_outside 10 -595.795202951324 20 -891.670534105406 30 1922.19277204157 11 -413.286070645571 21 -997.760836892423 31 2011.5925230317 12 -599.99837764929 22 -897.961029579872 32 2011.5925230317 13 -599.99837764929 23 -897.961029579872 33 2011.5925230317 70 1 0 3DFACE 8 body_half_outside 10 -210.691411720441 20 -1059.21725479392 30 2011.5925230317 11 -410.390873558597 21 -990.771212819307 31 1922.19277204157 12 -209.215453044867 22 -1051.79710945546 32 1922.19277204157 13 -209.215453044867 23 -1051.79710945546 33 1922.19277204157 70 1 0 3DFACE 8 body_half_outside 10 -410.390873558597 20 -990.771212819307 30 1922.19277204157 11 -210.691411720441 21 -1059.21725479392 31 2011.5925230317 12 -413.286070645571 22 -997.760836892423 32 2011.5925230317 13 -413.286070645571 23 -997.760836892423 33 2011.5925230317 70 1 0 3DFACE 8 body_half_outside 10 -194.606371158736 20 -978.352295145615 30 2361.46489814399 11 -399.515588143821 21 -964.515951276275 31 2258.00680432354 12 -203.671280618918 22 -1023.92467246733 32 2258.00680432354 13 -203.671280618918 23 -1023.92467246733 33 2258.00680432354 70 1 0 3DFACE 8 body_half_outside 10 -399.515588143821 20 -964.515951276275 30 2258.00680432354 11 -194.606371158736 21 -978.352295145615 31 2361.46489814399 12 -381.734128610353 22 -921.587710511788 32 2361.46489814399 13 -381.734128610353 23 -921.587710511788 33 2361.46489814399 70 1 0 3DFACE 8 body_half_outside 10 -731.773964383885 20 -406.167737113607 30 2549.0746800213 11 -699.168033082722 21 -467.169144021928 31 2455.6433200213 12 -699.168033082722 22 -467.169144021929 32 2549.0746800213 13 -699.168033082722 23 -467.169144021929 33 2549.0746800213 70 1 0 3DFACE 8 body_half_outside 10 -699.168033082722 20 -467.169144021928 30 2455.6433200213 11 -731.773964383885 21 -406.167737113607 31 2549.0746800213 12 -776.873894119249 22 -321.791703197793 32 2455.6433200213 13 -776.873894119249 23 -321.791703197793 33 2455.6433200213 70 3 0 3DFACE 8 body_half_outside 10 -776.873894119249 20 -321.791703197793 30 2455.6433200213 11 -731.773964383885 21 -406.167737113607 31 2549.0746800213 12 -771.834238188426 22 -331.220236285058 32 2549.0746800213 13 -771.834238188426 23 -331.220236285058 33 2549.0746800213 70 13 0 3DFACE 8 body_half_outside 10 -776.873894119249 20 -321.791703197793 30 2455.6433200213 11 -771.834238188426 21 -331.220236285058 31 2549.0746800213 12 -776.87389411925 22 -321.791703197793 32 2549.0746800213 13 -776.87389411925 23 -321.791703197793 33 2549.0746800213 70 1 0 3DFACE 8 body_half_outside 10 -832.899678896021 20 -165.674046918964 30 855.37186879426 11 -782.993203577332 21 -324.326404167689 31 796.153149972084 12 -784.574341950659 22 -324.981333125909 32 855.37186879426 13 -784.574341950659 23 -324.981333125909 33 855.37186879426 70 1 0 3DFACE 8 body_half_outside 10 -782.993203577332 20 -324.326404167689 30 796.153149972084 11 -832.899678896021 21 -165.674046918964 31 855.37186879426 12 -831.221151351825 22 -165.340167031437 32 796.153149972084 13 -831.221151351825 23 -165.340167031437 33 796.153149972084 70 1 0 3DFACE 8 body_half_outside 10 320.792432759964 20 -1019.67559748903 30 1941.79325554754 11 209.215453044867 21 -1051.79710945546 31 1922.19277204157 12 349.642861592144 22 -1009.19892078507 32 1922.19277204157 13 349.642861592144 23 -1009.19892078507 33 1922.19277204157 70 1 0 3DFACE 8 body_half_outside 10 209.215453044867 20 -1051.79710945546 30 1922.19277204157 11 320.792432759964 21 -1019.67559748903 31 1941.79325554754 12 210.691411720441 22 -1059.21725479392 32 2011.5925230317 13 210.691411720441 23 -1059.21725479392 33 2011.5925230317 70 3 0 3DFACE 8 body_half_outside 10 210.691411720441 20 -1059.21725479392 30 2011.5925230317 11 320.792432759964 21 -1019.67559748903 31 1941.79325554754 12 288.287531523413 22 -1033.5656801692 32 1987.58272162968 13 288.287531523413 23 -1033.5656801692 33 1987.58272162968 70 13 0 3DFACE 8 body_half_outside 10 210.691411720441 20 -1059.21725479392 30 2011.5925230317 11 288.287531523413 21 -1033.5656801692 31 1987.58272162968 12 287.457754814725 22 -1035.93043920361 32 2011.5925230317 13 287.457754814725 23 -1035.93043920361 33 2011.5925230317 70 1 0 3DFACE 8 body_half_outside 10 705.352696568272 20 -705.352696568272 30 2361.46489814399 11 653.750224578544 21 -807.521705673266 31 2258.00680432354 12 738.20854961057 22 -738.208549610569 32 2258.00680432354 13 738.20854961057 23 -738.208549610569 33 2258.00680432354 70 1 0 3DFACE 8 body_half_outside 10 653.750224578544 20 -807.521705673266 30 2258.00680432354 11 705.352696568272 21 -705.352696568272 31 2361.46489814399 12 653.750224578543 22 -795.278127928135 32 2279.18196601546 13 653.750224578543 23 -795.278127928135 33 2279.18196601546 70 3 0 3DFACE 8 body_half_outside 10 600.307509232711 20 -841.785968318108 30 2274.60134354834 11 554.192057578438 21 -829.407026995336 31 2361.46489814399 12 577.578293884962 22 -864.407003018736 32 2267.73932769213 13 577.578293884962 23 -864.407003018736 33 2267.73932769213 70 1 0 3DFACE 8 body_half_outside 10 554.192057578438 20 -829.407026995336 30 2361.46489814399 11 600.307509232711 21 -841.785968318108 31 2274.60134354834 12 653.750224578543 22 -795.278127928135 32 2279.18196601546 13 653.750224578543 23 -795.278127928135 33 2279.18196601546 70 13 0 3DFACE 8 body_half_outside 10 554.192057578438 20 -829.407026995336 30 2361.46489814399 11 653.750224578543 21 -795.278127928135 31 2279.18196601546 12 705.352696568272 22 -705.352696568272 32 2361.46489814399 13 705.352696568272 23 -705.352696568272 33 2361.46489814399 70 3 0 3DFACE 8 body_half_outside 10 -781.308061641118 20 -739.778791807586 30 1993.80290570042 11 -833.979694213849 21 -798.243508123 31 2025.28667143296 12 -827.976635409257 22 -804.801337927561 32 2003.90537806848 13 -827.976635409257 23 -804.801337927561 33 2003.90537806848 70 1 0 3DFACE 8 body_half_outside 10 -833.979694213849 20 -798.243508123 30 2025.28667143296 11 -781.308061641118 21 -739.778791807586 31 1993.80290570042 12 -786.927339360508 22 -735.2933223192 32 2011.59250954971 13 -786.927339360508 23 -735.2933223192 33 2011.59250954971 70 13 0 3DFACE 8 body_half_outside 10 -833.979694213849 20 -798.243508123 30 2025.28667143296 11 -786.927339360508 21 -735.2933223192 31 2011.59250954971 12 -789.394716623343 22 -732.286733093936 32 2020.79944934296 13 -789.394716623343 23 -732.286733093936 33 2020.79944934296 70 1 0 3DFACE 8 body_half_outside 10 -1.46816063865592 20 -978.223928142328 30 2079.65151912724 11 1.80477854883065e-13 21 -1078.21721573187 31 2079.50691792559 12 -1.4681606386561 22 -1078.06037755542 32 2079.65151912724 13 -1.4681606386561 23 -1078.06037755542 33 2079.65151912724 70 1 0 3DFACE 8 body_half_outside 10 1.80477854883065e-13 20 -1078.21721573187 30 2079.50691792559 11 -1.46816063865592 21 -978.223928142328 31 2079.65151912724 12 0.0 22 -978.377185230535 32 2079.50691792559 13 0.0 23 -978.377185230535 33 2079.50691792559 70 13 0 3DFACE 8 body_half_outside 10 1.80477854883065e-13 20 -1078.21721573187 30 2079.50691792559 11 0.0 21 -978.377185230535 31 2079.50691792559 12 7.31179769318775 22 -977.70014443868 32 2078.78676870972 13 7.31179769318775 23 -977.70014443868 33 2078.78676870972 70 13 0 3DFACE 8 body_half_outside 10 1.80477854883065e-13 20 -1078.21721573187 30 2079.50691792559 11 7.31179769318775 21 -977.70014443868 31 2078.78676870972 12 7.31179769318775 22 -1077.55800963197 32 2078.78676870972 13 7.31179769318775 23 -1077.55800963197 33 2078.78676870972 70 1 0 3DFACE 8 body_half_outside 10 738.20854961057 20 -738.20854961057 30 1812.39759571907 11 767.904940618653 21 -709.249312269841 31 1830.19391829555 12 739.771122243662 22 -739.771122243661 32 1820.9352284623 13 739.771122243662 23 -739.771122243661 33 1820.9352284623 70 1 0 3DFACE 8 body_half_outside 10 767.904940618653 20 -709.249312269841 30 1830.19391829555 11 738.20854961057 21 -738.20854961057 31 1812.39759571907 12 868.04142298445 22 -580.006735667279 32 1812.39759571907 13 868.04142298445 23 -580.006735667279 33 1812.39759571907 70 13 0 3DFACE 8 body_half_outside 10 767.904940618653 20 -709.249312269841 30 1830.19391829555 11 868.04142298445 21 -580.006735667279 31 1812.39759571907 12 806.222012671193 22 -670.885845335315 32 1850.69961858573 13 806.222012671193 23 -670.885845335315 33 1850.69961858573 70 3 0 3DFACE 8 body_half_outside 10 806.222012671193 20 -670.885845335315 30 1850.69961858573 11 868.04142298445 21 -580.006735667279 31 1812.39759571907 12 843.01369820043 22 -637.259985333474 32 1878.29564871262 13 843.01369820043 23 -637.259985333474 33 1878.29564871262 70 3 0 3DFACE 8 body_half_outside 10 843.01369820043 20 -637.259985333474 30 1878.29564871262 11 868.04142298445 21 -580.006735667279 31 1812.39759571907 12 876.866113364493 22 -609.663955206589 32 1911.92150871446 13 876.866113364493 23 -609.663955206589 33 1911.92150871446 70 3 0 3DFACE 8 body_half_outside 10 876.866113364493 20 -609.663955206589 30 1911.92150871446 11 868.04142298445 21 -580.006735667279 31 1812.39759571907 12 884.794355702396 22 -604.173850577965 32 1922.19277204157 13 884.794355702396 23 -604.173850577965 33 1922.19277204157 70 3 0 3DFACE 8 body_half_outside 10 884.794355702396 20 -604.173850577965 30 1922.19277204157 11 868.04142298445 21 -580.006735667279 31 1812.39759571907 12 891.670534105407 22 -595.795202951324 32 1922.19277204157 13 891.670534105407 23 -595.795202951324 33 1922.19277204157 70 1 0 3DFACE 8 body_half_outside 10 -824.724927080674 20 -164.047987682633 30 914.026066884025 11 -654.019523605455 21 1.80477854883065e-13 31 1054.1729200213 12 -840.882243605455 22 1.80477854883065e-13 32 914.026066884025 13 -840.882243605455 23 1.80477854883065e-13 33 914.026066884025 70 1 0 3DFACE 8 body_half_outside 10 -654.019523605455 20 1.80477854883065e-13 30 1054.1729200213 11 -824.724927080674 21 -164.047987682633 31 914.026066884025 12 -641.452721848564 22 -127.592879465023 32 1054.1729200213 13 -641.452721848564 23 -127.592879465023 33 1054.1729200213 70 1 0 3DFACE 8 body_half_outside 10 -1072.40303302985 20 3.60955709766131e-13 30 1922.19277204157 11 -1023.92467246733 21 -203.671280618918 31 1812.39759571907 12 -1051.79710945546 22 -209.215453044867 32 1922.19277204157 13 -1051.79710945546 23 -209.215453044867 33 1922.19277204157 70 1 0 3DFACE 8 body_half_outside 10 -1023.92467246733 20 -203.671280618918 30 1812.39759571907 11 -1072.40303302985 21 3.60955709766131e-13 31 1922.19277204157 12 -1043.98454271904 22 3.60955709766131e-13 32 1812.39759571907 13 -1043.98454271904 23 3.60955709766131e-13 33 1812.39759571907 70 1 0 3DFACE 8 body_half_outside 10 -824.724927080674 20 -164.047987682633 30 914.026066884025 11 -849.217148276931 21 3.60955709766131e-13 31 855.37186879426 12 -832.899678896021 22 -165.674046918964 32 855.37186879426 13 -832.899678896021 23 -165.674046918964 33 855.37186879426 70 1 0 3DFACE 8 body_half_outside 10 -849.217148276931 20 3.60955709766131e-13 30 855.37186879426 11 -824.724927080674 21 -164.047987682633 31 914.026066884025 12 -840.882243605455 22 1.80477854883065e-13 32 914.026066884025 13 -840.882243605455 23 1.80477854883065e-13 33 914.026066884025 70 1 0 3DFACE 8 body_half_outside 10 203.671280618918 20 -1023.92467246733 30 2258.00680432354 11 1.80477854883065e-13 21 -1072.40303302985 31 2148.21162800104 12 209.215453044867 22 -1051.79710945546 32 2148.21162800104 13 209.215453044867 23 -1051.79710945546 33 2148.21162800104 70 1 0 3DFACE 8 body_half_outside 10 1.80477854883065e-13 20 -1072.40303302985 30 2148.21162800104 11 203.671280618918 21 -1023.92467246733 31 2258.00680432354 12 1.80477854883065e-13 22 -1043.98454271904 32 2258.00680432354 13 1.80477854883065e-13 23 -1043.98454271904 33 2258.00680432354 70 1 0 3DFACE 8 body_half_outside 10 321.791703197793 20 -776.87389411925 30 2549.0746800213 11 164.047987682633 21 -824.724927080674 31 2455.6433200213 12 321.791703197793 22 -776.87389411925 32 2455.6433200213 13 321.791703197793 23 -776.87389411925 33 2455.6433200213 70 1 0 3DFACE 8 body_half_outside 10 164.047987682633 20 -824.724927080674 30 2455.6433200213 11 321.791703197793 21 -776.87389411925 31 2549.0746800213 12 164.047987682633 22 -824.724927080674 32 2549.0746800213 13 164.047987682633 23 -824.724927080674 33 2549.0746800213 70 3 0 3DFACE 8 body_half_outside 10 164.047987682633 20 -824.724927080674 30 2549.0746800213 11 321.791703197793 21 -776.87389411925 31 2549.0746800213 12 291.163503259545 22 -786.16485699538 32 2549.0746800213 13 291.163503259545 23 -786.16485699538 33 2549.0746800213 70 13 0 3DFACE 8 body_half_outside 10 164.047987682633 20 -824.724927080674 30 2549.0746800213 11 291.163503259545 21 -786.16485699538 31 2549.0746800213 12 209.932273259994 22 -810.806081221089 32 2549.0746800213 13 209.932273259994 23 -810.806081221089 33 2549.0746800213 70 1 0 3DFACE 8 body_half_outside 10 653.750224578544 20 -837.4569269514 30 1817.56657040449 11 180.675224578544 21 -794.16651328432 31 1813.3028368105 12 180.675224578544 22 -837.4569269514 32 1817.56657040449 13 180.675224578544 23 -837.4569269514 33 1817.56657040449 70 1 0 3DFACE 8 body_half_outside 10 180.675224578544 20 -794.16651328432 30 1813.3028368105 11 653.750224578544 21 -837.4569269514 31 1817.56657040449 12 653.750224578543 22 -808.286776169451 32 1814.69356131783 13 653.750224578543 23 -808.286776169451 33 1814.69356131783 70 13 0 3DFACE 8 body_half_outside 10 670.391132645368 20 -794.16651328432 30 1813.3028368105 11 180.675224578544 21 -794.16651328432 31 1813.3028368105 12 653.750224578543 22 -808.286776169451 32 1814.69356131783 13 653.750224578543 23 -808.286776169451 33 1814.69356131783 70 2 0 3DFACE 8 body_half_outside 10 876.866113364493 20 -609.663955206589 30 1911.92150871446 11 180.675224578544 21 -637.259985333474 31 1878.29564871262 12 843.01369820043 22 -637.259985333474 32 1878.29564871262 13 843.01369820043 23 -637.259985333474 33 1878.29564871262 70 1 0 3DFACE 8 body_half_outside 10 180.675224578544 20 -637.259985333474 30 1878.29564871262 11 876.866113364493 21 -609.663955206589 31 1911.92150871446 12 180.675224578544 22 -609.663955206589 32 1911.92150871446 13 180.675224578544 23 -609.663955206589 33 1911.92150871446 70 1 0 3DFACE 8 body_half_outside 10 -594.593536632776 20 -594.593536632776 30 914.026066884025 11 -543.797359730523 21 -363.353779128852 31 1054.1729200213 12 -699.168033082722 22 -467.169144021929 32 914.026066884025 13 -699.168033082722 23 -467.169144021929 33 914.026066884025 70 1 0 3DFACE 8 body_half_outside 10 -543.797359730523 20 -363.353779128852 30 1054.1729200213 11 -594.593536632776 21 -594.593536632776 31 914.026066884025 12 -462.461640169813 22 -462.461640169813 32 1054.1729200213 13 -462.461640169813 23 -462.461640169813 33 1054.1729200213 70 1 0 3DFACE 8 body_half_outside 10 -10.2481189704998 20 -977.41094203537 30 2078.78676870972 11 -18.690668427508 21 -1076.65401668716 31 2076.22574933075 12 -18.690668427508 22 -976.732727149702 32 2076.22574933075 13 -18.690668427508 23 -976.732727149702 33 2076.22574933075 70 1 0 3DFACE 8 body_half_outside 10 -18.690668427508 20 -1076.65401668716 30 2076.22574933075 11 -10.2481189704998 21 -977.41094203537 31 2078.78676870972 12 -10.2481189705 22 -1077.26880722866 32 2078.78676870972 13 -10.2481189705 23 -1077.26880722866 33 2078.78676870972 70 1 0 3DFACE 8 body_half_outside 10 908.625264240696 20 -576.530906699202 30 2078.49259036266 11 180.675224578544 21 -589.158254916404 31 2120.11937767794 12 180.675224578544 22 -576.530907025343 32 2078.49259033054 13 180.675224578544 23 -576.530907025343 33 2078.49259033054 70 1 0 3DFACE 8 body_half_outside 10 180.675224578544 20 -589.158254916404 30 2120.11937767794 11 908.625264240696 21 -576.530906699202 31 2078.49259036266 12 897.900697882446 22 -589.158254916404 32 2120.11937767794 13 897.900697882446 23 -589.158254916404 33 2120.11937767794 70 1 0 3DFACE 8 body_half_outside 10 590.997993226901 20 -590.997993226901 30 738.078199114136 11 704.67526609701 21 -470.84895947612 31 796.153149972084 12 599.277053327022 22 -599.277053327022 32 796.153149972084 13 599.277053327022 23 -599.277053327022 33 796.153149972084 70 1 0 3DFACE 8 body_half_outside 10 704.67526609701 20 -470.84895947612 30 796.153149972084 11 590.997993226901 21 -590.997993226901 31 738.078199114136 12 694.940121314314 22 -464.344143695271 32 738.078199114136 13 694.940121314314 23 -464.344143695271 33 738.078199114136 70 1 0 3DFACE 8 body_half_outside 10 -733.088824464619 20 -145.820433573828 30 1427.8983600213 11 -840.882243605455 21 1.80477854883065e-13 31 1241.03564002131 12 -824.724927080674 22 -164.047987682633 32 1241.03564002131 13 -824.724927080674 23 -164.047987682633 33 1241.03564002131 70 1 0 3DFACE 8 body_half_outside 10 -840.882243605455 20 1.80477854883065e-13 30 1241.03564002131 11 -733.088824464619 21 -145.820433573828 31 1427.8983600213 12 -747.450883605455 22 1.80477854883065e-13 32 1427.8983600213 13 -747.450883605455 23 1.80477854883065e-13 33 1427.8983600213 70 1 0 3DFACE 8 body_half_outside 10 908.625259608371 20 -576.530907025343 30 1991.91176299638 11 180.675224578544 21 -589.158254916404 31 1950.28497564898 12 897.90069342138 22 -589.158254916404 32 1950.28497564898 13 897.90069342138 23 -589.158254916404 33 1950.28497564898 70 1 0 3DFACE 8 body_half_outside 10 180.675224578544 20 -589.158254916404 30 1950.28497564898 11 908.625259608371 21 -576.530907025343 31 1991.91176299638 12 180.675224578544 22 -576.530907025343 32 1991.91176299638 13 180.675224578544 23 -576.530907025343 33 1991.91176299638 70 1 0 3DFACE 8 body_half_outside 10 -467.169144021929 20 -699.168033082722 30 914.026066884025 11 -462.461640169813 21 -462.461640169813 31 1054.1729200213 12 -594.593536632776 22 -594.593536632776 32 914.026066884025 13 -594.593536632776 23 -594.593536632776 33 914.026066884025 70 1 0 3DFACE 8 body_half_outside 10 -462.461640169813 20 -462.461640169813 30 1054.1729200213 11 -467.169144021929 21 -699.168033082722 31 914.026066884025 12 -363.353779128852 22 -543.797359730523 32 1054.1729200213 13 -363.353779128852 23 -543.797359730523 33 1054.1729200213 70 1 0 3DFACE 8 body_half_outside 10 180.675224578544 20 -705.406767999999 30 2035.20217666346 11 104.493585205719 21 -707.112262514746 31 2017.88602361794 12 180.675224578544 22 -707.112261617118 32 2017.88600937388 13 180.675224578544 23 -707.112261617118 33 2017.88600937388 70 1 0 3DFACE 8 body_half_outside 10 104.493585205719 20 -707.112262514746 30 2017.88602361794 11 180.675224578544 21 -705.406767999999 31 2035.20217666346 12 104.493582702864 22 -705.406767999999 32 2035.2022000213 13 104.493582702864 23 -705.406767999999 33 2035.2022000213 70 1 0 3DFACE 8 body_half_outside 10 -781.35466353334 20 -731.718944065101 30 1933.51796332002 11 -805.85406896736 21 -828.277941296301 31 1950.68418808414 12 -828.138788259274 22 -805.723050021943 32 1963.78062144053 13 -828.138788259274 23 -805.723050021943 33 1963.78062144053 70 1 0 3DFACE 8 body_half_outside 10 -805.85406896736 20 -828.277941296301 30 1950.68418808414 11 -781.35466353334 21 -731.718944065101 31 1933.51796332002 12 -761.987076679027 22 -753.814953035805 32 1922.19277204157 13 -761.987076679027 23 -753.814953035805 33 1922.19277204157 70 13 0 3DFACE 8 body_half_outside 10 -805.85406896736 20 -828.277941296301 30 1950.68418808414 11 -761.987076679027 21 -753.814953035805 31 1922.19277204157 12 -757.858868059522 22 -757.858868059522 32 1919.76361420147 13 -757.858868059522 23 -757.858868059522 33 1919.76361420147 70 13 0 3DFACE 8 body_half_outside 10 -805.85406896736 20 -828.277941296301 30 1950.68418808414 11 -757.858868059522 21 -757.858868059522 31 1919.76361420147 12 -750.032010089465 22 -762.726244296354 32 1915.09420023775 13 -750.032010089465 23 -762.726244296354 33 1915.09420023775 70 1 0 3DFACE 8 body_half_outside 10 731.120068617964 20 -145.428823687577 30 587.016306884026 11 784.019466456977 21 1.80477854883065e-13 31 631.979456702016 12 768.954752250597 22 -152.954610178005 32 631.979456702016 13 768.954752250597 23 -152.954610178005 33 631.979456702016 70 1 0 3DFACE 8 body_half_outside 10 784.019466456977 20 1.80477854883065e-13 30 631.979456702016 11 731.120068617964 21 -145.428823687577 31 587.016306884026 12 745.443557551535 22 1.80477854883065e-13 32 587.016306884026 13 745.443557551535 23 1.80477854883065e-13 33 587.016306884026 70 1 0 3DFACE 8 body_half_outside 10 180.675224578544 20 -1011.8021195433 30 1991.91176299638 11 180.675224578544 21 -1011.8021195433 31 2078.49259033054 12 180.675224578544 22 -1016.06585313728 32 2035.20217666346 13 180.675224578544 23 -1016.06585313728 33 2035.20217666346 70 1 0 3DFACE 8 body_half_outside 10 180.675224578544 20 -1011.8021195433 30 2078.49259033054 11 180.675224578544 21 -1011.8021195433 31 1991.91176299638 12 180.675224578544 22 -999.174771652236 32 1950.28497564898 13 180.675224578544 23 -999.174771652236 33 1950.28497564898 70 13 0 3DFACE 8 body_half_outside 10 180.675224578544 20 -1011.8021195433 30 2078.49259033054 11 180.675224578544 21 -999.174771652236 31 1950.28497564898 12 180.675224578544 22 -999.174771652236 32 2120.11937767794 13 180.675224578544 23 -999.174771652236 33 2120.11937767794 70 3 0 3DFACE 8 body_half_outside 10 180.675224578544 20 -999.174771652236 30 2120.11937767794 11 180.675224578544 21 -999.174771652236 31 1950.28497564898 12 180.675224578544 22 -978.669071362051 32 1911.92150871446 13 180.675224578544 23 -978.669071362051 33 1911.92150871446 70 13 0 3DFACE 8 body_half_outside 10 180.675224578544 20 -999.174771652236 30 2120.11937767794 11 180.675224578544 21 -978.669071362051 31 1911.92150871446 12 180.675224578544 22 -978.669071362051 32 2158.48284461247 13 180.675224578544 23 -978.669071362051 33 2158.48284461247 70 3 0 3DFACE 8 body_half_outside 10 180.675224578544 20 -978.669071362051 30 2158.48284461247 11 180.675224578544 21 -978.669071362051 31 1911.92150871446 12 180.675224578544 22 -951.073041235166 32 1878.29564871262 13 180.675224578544 23 -951.073041235166 33 1878.29564871262 70 13 0 3DFACE 8 body_half_outside 10 180.675224578544 20 -978.669071362051 30 2158.48284461247 11 180.675224578544 21 -951.073041235166 31 1878.29564871262 12 180.675224578544 22 -951.073041235166 32 2192.10870461431 13 180.675224578544 23 -951.073041235166 33 2192.10870461431 70 3 0 3DFACE 8 body_half_outside 10 180.675224578544 20 -951.073041235166 30 2192.10870461431 11 180.675224578544 21 -951.073041235166 31 1878.29564871262 12 180.675224578544 22 -917.447181233325 32 1850.69961858573 13 180.675224578544 23 -917.447181233325 33 1850.69961858573 70 13 0 3DFACE 8 body_half_outside 10 180.675224578544 20 -951.073041235166 30 2192.10870461431 11 180.675224578544 21 -917.447181233325 31 1850.69961858573 12 180.675224578544 22 -917.447181233325 32 2219.70473474119 13 180.675224578544 23 -917.447181233325 33 2219.70473474119 70 3 0 3DFACE 8 body_half_outside 10 180.675224578544 20 -917.447181233325 30 2219.70473474119 11 180.675224578544 21 -917.447181233325 31 1850.69961858573 12 180.675224578544 22 -879.083714298798 32 1830.19391829555 13 180.675224578544 23 -879.083714298798 33 1830.19391829555 70 13 0 3DFACE 8 body_half_outside 10 180.675224578544 20 -917.447181233325 30 2219.70473474119 11 180.675224578544 21 -879.083714298798 31 1830.19391829555 12 180.675224578544 22 -882.926258568641 32 2035.20217666346 13 180.675224578544 23 -882.926258568641 33 2035.20217666346 70 15 0 3DFACE 8 body_half_outside 10 180.675224578544 20 -882.926258568641 30 2035.20217666346 11 180.675224578544 21 -879.083714298798 31 1830.19391829555 12 180.675224578544 22 -881.220764951522 32 2017.88600937388 13 180.675224578544 23 -881.220764951522 33 2017.88600937388 70 3 0 3DFACE 8 body_half_outside 10 180.675224578544 20 -881.220764951522 30 2017.88600937388 11 180.675224578544 21 -879.083714298798 31 1830.19391829555 12 180.675224578544 22 -876.169825263419 32 2001.23529268221 13 180.675224578544 23 -876.169825263419 33 2001.23529268221 70 3 0 3DFACE 8 body_half_outside 10 180.675224578544 20 -876.169825263419 30 2001.23529268221 11 180.675224578544 21 -879.083714298798 31 1830.19391829555 12 180.675224578544 22 -837.4569269514 32 1817.56657040449 13 180.675224578544 23 -837.4569269514 33 1817.56657040449 70 13 0 3DFACE 8 body_half_outside 10 180.675224578544 20 -876.169825263419 30 2001.23529268221 11 180.675224578544 21 -837.4569269514 31 1817.56657040449 12 180.675224578544 22 -867.967544283947 32 1985.88990429309 13 180.675224578544 23 -867.967544283947 33 1985.88990429309 70 3 0 3DFACE 8 body_half_outside 10 180.675224578544 20 -867.967544283947 30 1985.88990429309 11 180.675224578544 21 -837.4569269514 31 1817.56657040449 12 180.675224578544 22 -856.929131071254 32 1972.43955887653 13 180.675224578544 23 -856.929131071254 33 1972.43955887653 70 3 0 3DFACE 8 body_half_outside 10 180.675224578544 20 -856.929131071254 30 1972.43955887653 11 180.675224578544 21 -837.4569269514 31 1817.56657040449 12 180.675224578544 22 -843.478785654691 32 1961.40114566384 13 180.675224578544 23 -843.478785654691 33 1961.40114566384 70 3 0 3DFACE 8 body_half_outside 10 180.675224578544 20 -843.478785654691 30 1961.40114566384 11 180.675224578544 21 -837.4569269514 31 1817.56657040449 12 180.675224578544 22 -828.133397265575 32 1953.19886468436 13 180.675224578544 23 -828.133397265575 33 1953.19886468436 70 3 0 3DFACE 8 body_half_outside 10 180.675224578544 20 -828.133397265575 30 1953.19886468436 11 180.675224578544 21 -837.4569269514 31 1817.56657040449 12 180.675224578544 22 -794.16651328432 32 1813.3028368105 13 180.675224578544 23 -794.16651328432 33 1813.3028368105 70 13 0 3DFACE 8 body_half_outside 10 180.675224578544 20 -828.133397265575 30 1953.19886468436 11 180.675224578544 21 -794.16651328432 31 1813.3028368105 12 180.675224578544 22 -811.482680573908 32 1948.14792499626 13 180.675224578544 23 -811.482680573908 33 1948.14792499626 70 3 0 3DFACE 8 body_half_outside 10 180.675224578544 20 -811.482680573908 30 1948.14792499626 11 180.675224578544 21 -794.16651328432 31 1813.3028368105 12 180.675224578544 22 -794.16651328432 32 1946.44243137914 13 180.675224578544 23 -794.16651328432 33 1946.44243137914 70 3 0 3DFACE 8 body_half_outside 10 180.675224578544 20 -794.16651328432 30 1946.44243137914 11 180.675224578544 21 -794.16651328432 31 1813.3028368105 12 180.675224578544 22 -750.87609961724 32 1817.56657040449 13 180.675224578544 23 -750.87609961724 33 1817.56657040449 70 13 0 3DFACE 8 body_half_outside 10 180.675224578544 20 -794.16651328432 30 1946.44243137914 11 180.675224578544 21 -750.87609961724 31 1817.56657040449 12 180.675224578544 22 -776.850345994732 32 1948.14792499626 13 180.675224578544 23 -776.850345994732 33 1948.14792499626 70 3 0 3DFACE 8 body_half_outside 10 180.675224578544 20 -776.850345994732 30 1948.14792499626 11 180.675224578544 21 -750.87609961724 31 1817.56657040449 12 180.675224578544 22 -760.199629303065 32 1953.19886468436 13 180.675224578544 23 -760.199629303065 33 1953.19886468436 70 3 0 3DFACE 8 body_half_outside 10 180.675224578544 20 -760.199629303065 30 1953.19886468436 11 180.675224578544 21 -750.87609961724 31 1817.56657040449 12 180.675224578544 22 -744.854240913949 32 1961.40114566384 13 180.675224578544 23 -744.854240913949 33 1961.40114566384 70 3 0 3DFACE 8 body_half_outside 10 180.675224578544 20 -744.854240913949 30 1961.40114566384 11 180.675224578544 21 -750.87609961724 31 1817.56657040449 12 180.675224578544 22 -709.249312269842 32 1830.19391829555 13 180.675224578544 23 -709.249312269842 33 1830.19391829555 70 13 0 3DFACE 8 body_half_outside 10 180.675224578544 20 -744.854240913949 30 1961.40114566384 11 180.675224578544 21 -709.249312269842 31 1830.19391829555 12 180.675224578544 22 -731.403895497386 32 1972.43955887653 13 180.675224578544 23 -731.403895497386 33 1972.43955887653 70 3 0 3DFACE 8 body_half_outside 10 180.675224578544 20 -731.403895497386 30 1972.43955887653 11 180.675224578544 21 -709.249312269842 31 1830.19391829555 12 180.675224578544 22 -720.365482284693 32 1985.88990429309 13 180.675224578544 23 -720.365482284693 33 1985.88990429309 70 3 0 3DFACE 8 body_half_outside 10 180.675224578544 20 -720.365482284693 30 1985.88990429309 11 180.675224578544 21 -709.249312269842 31 1830.19391829555 12 180.675224578544 22 -712.163201305221 32 2001.23529268221 13 180.675224578544 23 -712.163201305221 33 2001.23529268221 70 3 0 3DFACE 8 body_half_outside 10 180.675224578544 20 -712.163201305221 30 2001.23529268221 11 180.675224578544 21 -709.249312269842 31 1830.19391829555 12 180.675224578544 22 -707.112261617118 32 2017.88600937388 13 180.675224578544 23 -707.112261617118 33 2017.88600937388 70 3 0 3DFACE 8 body_half_outside 10 180.675224578544 20 -707.112261617118 30 2017.88600937388 11 180.675224578544 21 -709.249312269842 31 1830.19391829555 12 180.675224578544 22 -670.885845335315 32 1850.69961858573 13 180.675224578544 23 -670.885845335315 33 1850.69961858573 70 13 0 3DFACE 8 body_half_outside 10 180.675224578544 20 -707.112261617118 30 2017.88600937388 11 180.675224578544 21 -670.885845335315 31 1850.69961858573 12 180.675224578544 22 -705.406767999999 32 2035.20217666346 13 180.675224578544 23 -705.406767999999 33 2035.20217666346 70 3 0 3DFACE 8 body_half_outside 10 180.675224578544 20 -882.926258568641 30 2035.20217666346 11 180.675224578544 21 -879.083714298798 31 2240.21043503138 12 180.675224578544 22 -917.447181233325 32 2219.70473474119 13 180.675224578544 23 -917.447181233325 33 2219.70473474119 70 13 0 3DFACE 8 body_half_outside 10 180.675224578544 20 -879.083714298798 30 2240.21043503138 11 180.675224578544 21 -882.926258568641 31 2035.20217666346 12 180.675224578544 22 -881.220764951522 32 2052.51834395305 13 180.675224578544 23 -881.220764951522 33 2052.51834395305 70 13 0 3DFACE 8 body_half_outside 10 180.675224578544 20 -879.083714298798 30 2240.21043503138 11 180.675224578544 21 -881.220764951522 31 2052.51834395305 12 180.675224578544 22 -876.169825263419 32 2069.16906064472 13 180.675224578544 23 -876.169825263419 33 2069.16906064472 70 13 0 3DFACE 8 body_half_outside 10 180.675224578544 20 -879.083714298798 30 2240.21043503138 11 180.675224578544 21 -876.169825263419 31 2069.16906064472 12 180.675224578544 22 -837.4569269514 32 2252.83778292244 13 180.675224578544 23 -837.4569269514 33 2252.83778292244 70 3 0 3DFACE 8 body_half_outside 10 180.675224578544 20 -837.4569269514 30 2252.83778292244 11 180.675224578544 21 -876.169825263419 31 2069.16906064472 12 180.675224578544 22 -867.967544283947 32 2084.51444903383 13 180.675224578544 23 -867.967544283947 33 2084.51444903383 70 13 0 3DFACE 8 body_half_outside 10 180.675224578544 20 -837.4569269514 30 2252.83778292244 11 180.675224578544 21 -867.967544283947 31 2084.51444903383 12 180.675224578544 22 -856.929131071254 32 2097.9647944504 13 180.675224578544 23 -856.929131071254 33 2097.9647944504 70 13 0 3DFACE 8 body_half_outside 10 180.675224578544 20 -837.4569269514 30 2252.83778292244 11 180.675224578544 21 -856.929131071254 31 2097.9647944504 12 180.675224578544 22 -843.478785654691 32 2109.00320766309 13 180.675224578544 23 -843.478785654691 33 2109.00320766309 70 13 0 3DFACE 8 body_half_outside 10 180.675224578544 20 -837.4569269514 30 2252.83778292244 11 180.675224578544 21 -843.478785654691 31 2109.00320766309 12 180.675224578544 22 -828.133397265575 32 2117.20548864256 13 180.675224578544 23 -828.133397265575 33 2117.20548864256 70 13 0 3DFACE 8 body_half_outside 10 180.675224578544 20 -837.4569269514 30 2252.83778292244 11 180.675224578544 21 -828.133397265575 31 2117.20548864256 12 180.675224578544 22 -794.16651328432 32 2257.10151651642 13 180.675224578544 23 -794.16651328432 33 2257.10151651642 70 3 0 3DFACE 8 body_half_outside 10 180.675224578544 20 -794.16651328432 30 2257.10151651642 11 180.675224578544 21 -828.133397265575 31 2117.20548864256 12 180.675224578544 22 -811.482680573908 32 2122.25642833066 13 180.675224578544 23 -811.482680573908 33 2122.25642833066 70 13 0 3DFACE 8 body_half_outside 10 180.675224578544 20 -794.16651328432 30 2257.10151651642 11 180.675224578544 21 -811.482680573908 31 2122.25642833066 12 180.675224578544 22 -794.16651328432 32 2123.96192194778 13 180.675224578544 23 -794.16651328432 33 2123.96192194778 70 13 0 3DFACE 8 body_half_outside 10 180.675224578544 20 -794.16651328432 30 2257.10151651642 11 180.675224578544 21 -794.16651328432 31 2123.96192194778 12 180.675224578544 22 -776.850345994732 32 2122.25642833066 13 180.675224578544 23 -776.850345994732 33 2122.25642833066 70 13 0 3DFACE 8 body_half_outside 10 180.675224578544 20 -794.16651328432 30 2257.10151651642 11 180.675224578544 21 -776.850345994732 31 2122.25642833066 12 180.675224578544 22 -750.87609961724 32 2252.83778292244 13 180.675224578544 23 -750.87609961724 33 2252.83778292244 70 3 0 3DFACE 8 body_half_outside 10 180.675224578544 20 -750.87609961724 30 2252.83778292244 11 180.675224578544 21 -776.850345994732 31 2122.25642833066 12 180.675224578544 22 -760.199629303065 32 2117.20548864256 13 180.675224578544 23 -760.199629303065 33 2117.20548864256 70 13 0 3DFACE 8 body_half_outside 10 180.675224578544 20 -750.87609961724 30 2252.83778292244 11 180.675224578544 21 -760.199629303065 31 2117.20548864256 12 180.675224578544 22 -744.854240913949 32 2109.00320766309 13 180.675224578544 23 -744.854240913949 33 2109.00320766309 70 13 0 3DFACE 8 body_half_outside 10 180.675224578544 20 -750.87609961724 30 2252.83778292244 11 180.675224578544 21 -744.854240913949 31 2109.00320766309 12 180.675224578544 22 -709.249312269842 32 2240.21043503138 13 180.675224578544 23 -709.249312269842 33 2240.21043503138 70 3 0 3DFACE 8 body_half_outside 10 180.675224578544 20 -709.249312269842 30 2240.21043503138 11 180.675224578544 21 -744.854240913949 31 2109.00320766309 12 180.675224578544 22 -731.403895497386 32 2097.9647944504 13 180.675224578544 23 -731.403895497386 33 2097.9647944504 70 13 0 3DFACE 8 body_half_outside 10 180.675224578544 20 -709.249312269842 30 2240.21043503138 11 180.675224578544 21 -731.403895497386 31 2097.9647944504 12 180.675224578544 22 -720.365482284693 32 2084.51444903383 13 180.675224578544 23 -720.365482284693 33 2084.51444903383 70 13 0 3DFACE 8 body_half_outside 10 180.675224578544 20 -709.249312269842 30 2240.21043503138 11 180.675224578544 21 -720.365482284693 31 2084.51444903383 12 180.675224578544 22 -712.163201305221 32 2069.16906064472 13 180.675224578544 23 -712.163201305221 33 2069.16906064472 70 13 0 3DFACE 8 body_half_outside 10 180.675224578544 20 -709.249312269842 30 2240.21043503138 11 180.675224578544 21 -712.163201305221 31 2069.16906064472 12 180.675224578544 22 -707.112261617118 32 2052.51834395305 13 180.675224578544 23 -707.112261617118 33 2052.51834395305 70 13 0 3DFACE 8 body_half_outside 10 180.675224578544 20 -709.249312269842 30 2240.21043503138 11 180.675224578544 21 -707.112261617118 31 2052.51834395305 12 180.675224578544 22 -670.885845335315 32 2219.70473474119 13 180.675224578544 23 -670.885845335315 33 2219.70473474119 70 3 0 3DFACE 8 body_half_outside 10 180.675224578544 20 -670.885845335315 30 2219.70473474119 11 180.675224578544 21 -707.112261617118 31 2052.51834395305 12 180.675224578544 22 -705.406767999999 32 2035.20217666346 13 180.675224578544 23 -705.406767999999 33 2035.20217666346 70 13 0 3DFACE 8 body_half_outside 10 180.675224578544 20 -670.885845335315 30 2219.70473474119 11 180.675224578544 21 -705.406767999999 31 2035.20217666346 12 180.675224578544 22 -670.885845335315 32 1850.69961858573 13 180.675224578544 23 -670.885845335315 33 1850.69961858573 70 15 0 3DFACE 8 body_half_outside 10 180.675224578544 20 -670.885845335315 30 2219.70473474119 11 180.675224578544 21 -670.885845335315 31 1850.69961858573 12 180.675224578544 22 -637.259985333474 32 1878.29564871262 13 180.675224578544 23 -637.259985333474 33 1878.29564871262 70 13 0 3DFACE 8 body_half_outside 10 180.675224578544 20 -670.885845335315 30 2219.70473474119 11 180.675224578544 21 -637.259985333474 31 1878.29564871262 12 180.675224578544 22 -637.259985333474 32 2192.10870461431 13 180.675224578544 23 -637.259985333474 33 2192.10870461431 70 3 0 3DFACE 8 body_half_outside 10 180.675224578544 20 -637.259985333474 30 2192.10870461431 11 180.675224578544 21 -637.259985333474 31 1878.29564871262 12 180.675224578544 22 -609.663955206589 32 1911.92150871446 13 180.675224578544 23 -609.663955206589 33 1911.92150871446 70 13 0 3DFACE 8 body_half_outside 10 180.675224578544 20 -637.259985333474 30 2192.10870461431 11 180.675224578544 21 -609.663955206589 31 1911.92150871446 12 180.675224578544 22 -609.663955206589 32 2158.48284461247 13 180.675224578544 23 -609.663955206589 33 2158.48284461247 70 3 0 3DFACE 8 body_half_outside 10 180.675224578544 20 -609.663955206589 30 2158.48284461247 11 180.675224578544 21 -609.663955206589 31 1911.92150871446 12 180.675224578544 22 -589.158254916404 32 1950.28497564898 13 180.675224578544 23 -589.158254916404 33 1950.28497564898 70 13 0 3DFACE 8 body_half_outside 10 180.675224578544 20 -609.663955206589 30 2158.48284461247 11 180.675224578544 21 -589.158254916404 31 1950.28497564898 12 180.675224578544 22 -589.158254916404 32 2120.11937767794 13 180.675224578544 23 -589.158254916404 33 2120.11937767794 70 3 0 3DFACE 8 body_half_outside 10 180.675224578544 20 -589.158254916404 30 2120.11937767794 11 180.675224578544 21 -589.158254916404 31 1950.28497564898 12 180.675224578544 22 -576.530907025343 32 1991.91176299638 13 180.675224578544 23 -576.530907025343 33 1991.91176299638 70 13 0 3DFACE 8 body_half_outside 10 180.675224578544 20 -589.158254916404 30 2120.11937767794 11 180.675224578544 21 -576.530907025343 31 1991.91176299638 12 180.675224578544 22 -576.530907025343 32 2078.49259033054 13 180.675224578544 23 -576.530907025343 33 2078.49259033054 70 3 0 3DFACE 8 body_half_outside 10 180.675224578544 20 -576.530907025343 30 2078.49259033054 11 180.675224578544 21 -576.530907025343 31 1991.91176299638 12 180.675224578544 22 -572.26717343136 32 2035.20217666346 13 180.675224578544 23 -572.26717343136 33 2035.20217666346 70 1 0 3DFACE 8 body_half_outside 10 -768.954752250597 20 -152.954610178005 30 631.979456702016 11 -688.700045464263 21 -285.268899238265 31 587.016306884026 12 -724.33953815002 22 -300.031260464802 32 631.979456702016 13 -724.33953815002 23 -300.031260464802 33 631.979456702016 70 1 0 3DFACE 8 body_half_outside 10 -688.700045464263 20 -285.268899238265 30 587.016306884026 11 -768.954752250597 21 -152.954610178005 31 631.979456702016 12 -731.120068617964 22 -145.428823687577 32 587.016306884026 13 -731.120068617964 23 -145.428823687577 33 587.016306884026 70 1 0 3DFACE 8 body_half_outside 10 -798.780782641381 20 -158.887376492573 30 682.822310520627 11 -724.33953815002 21 -300.031260464802 31 631.979456702016 12 -752.435044439405 22 -311.668800211604 32 682.822310520627 13 -752.435044439405 23 -311.668800211604 33 682.822310520627 70 1 0 3DFACE 8 body_half_outside 10 -724.33953815002 20 -300.031260464802 30 631.979456702016 11 -798.780782641381 21 -158.887376492573 31 682.822310520627 12 -768.954752250597 22 -152.954610178005 32 631.979456702016 13 -768.954752250597 23 -152.954610178005 33 631.979456702016 70 1 0 3DFACE 8 body_half_outside 10 -819.73776511114 20 -163.055979488767 30 738.078199114136 11 -752.435044439405 21 -311.668800211604 31 682.822310520627 12 -772.176090266528 22 -319.845809128627 32 738.078199114136 13 -772.176090266528 23 -319.845809128627 33 738.078199114136 70 1 0 3DFACE 8 body_half_outside 10 -752.435044439405 20 -311.668800211604 30 682.822310520627 11 -819.73776511114 21 -163.055979488767 31 738.078199114136 12 -798.780782641381 22 -158.887376492573 32 682.822310520627 13 -798.780782641381 23 -158.887376492573 33 682.822310520627 70 1 0 3DFACE 8 body_half_outside 10 990.771212819308 20 -410.390873558597 30 1922.19277204157 11 1059.21725479392 21 -210.691411720441 31 2011.5925230317 12 997.760836892423 22 -413.286070645571 32 2011.5925230317 13 997.760836892423 23 -413.286070645571 33 2011.5925230317 70 1 0 3DFACE 8 body_half_outside 10 1059.21725479392 20 -210.691411720441 30 2011.5925230317 11 990.771212819308 21 -410.390873558597 31 1922.19277204157 12 1051.79710945546 22 -209.215453044867 32 1922.19277204157 13 1051.79710945546 23 -209.215453044867 33 1922.19277204157 70 1 0 3DFACE 8 body_half_outside 10 -203.671280618918 20 -1023.92467246733 30 2258.00680432354 11 -410.390873558597 21 -990.771212819307 31 2148.21162800104 12 -209.215453044867 22 -1051.79710945546 32 2148.21162800104 13 -209.215453044867 23 -1051.79710945546 33 2148.21162800104 70 1 0 3DFACE 8 body_half_outside 10 -410.390873558597 20 -990.771212819307 30 2148.21162800104 11 -203.671280618918 21 -1023.92467246733 31 2258.00680432354 12 -399.515588143821 22 -964.515951276275 32 2258.00680432354 13 -399.515588143821 23 -964.515951276275 33 2258.00680432354 70 1 0 3DFACE 8 body_half_outside 10 -165.674046918965 20 -832.899678896021 30 855.37186879426 11 -324.326404167689 21 -782.993203577332 31 796.153149972084 12 -165.340167031437 22 -831.221151351825 32 796.153149972084 13 -165.340167031437 23 -831.221151351825 33 796.153149972084 70 1 0 3DFACE 8 body_half_outside 10 -324.326404167689 20 -782.993203577332 30 796.153149972084 11 -165.674046918965 21 -832.899678896021 31 855.37186879426 12 -324.981333125909 22 -784.574341950658 32 855.37186879426 13 -324.981333125909 23 -784.574341950658 33 855.37186879426 70 1 0 3DFACE 8 body_half_outside 10 -1059.21725479392 20 -210.691411720441 30 2058.8118770109 11 -997.760836892423 21 -413.286070645571 31 2011.5925230317 12 -997.760836892423 22 -413.286070645571 32 2058.8118770109 13 -997.760836892423 23 -413.286070645571 33 2058.8118770109 70 1 0 3DFACE 8 body_half_outside 10 -997.760836892423 20 -413.286070645571 30 2011.5925230317 11 -1059.21725479392 21 -210.691411720441 31 2058.8118770109 12 -1059.21725479392 22 -210.691411720441 32 2011.5925230317 13 -1059.21725479392 23 -210.691411720441 33 2011.5925230317 70 1 0 3DFACE 8 body_half_outside 10 -1059.21725479392 20 -210.691411720441 30 2011.5925230317 11 -990.771212819307 21 -410.390873558597 31 1922.19277204157 12 -997.760836892423 22 -413.286070645571 32 2011.5925230317 13 -997.760836892423 23 -413.286070645571 33 2011.5925230317 70 1 0 3DFACE 8 body_half_outside 10 -990.771212819307 20 -410.390873558597 30 1922.19277204157 11 -1059.21725479392 21 -210.691411720441 31 2011.5925230317 12 -1051.79710945546 22 -209.215453044867 32 1922.19277204157 13 -1051.79710945546 23 -209.215453044867 33 1922.19277204157 70 1 0 3DFACE 8 body_half_outside 10 978.352295145615 20 -194.606371158736 30 1708.93950189862 11 1043.98454271904 21 1.80477854883065e-13 31 1812.39759571907 12 1023.92467246733 22 -203.671280618918 32 1812.39759571907 13 1023.92467246733 23 -203.671280618918 33 1812.39759571907 70 1 0 3DFACE 8 body_half_outside 10 1043.98454271904 20 1.80477854883065e-13 30 1812.39759571907 11 978.352295145615 21 -194.606371158736 31 1708.93950189862 12 997.519349743285 22 1.80477854883065e-13 32 1708.93950189862 13 997.519349743285 23 1.80477854883065e-13 33 1708.93950189862 70 1 0 3DFACE 8 body_half_outside 10 -209.215453044867 20 -1051.79710945546 30 1922.19277204157 11 -399.515588143821 21 -964.515951276276 31 1812.39759571907 12 -203.671280618918 22 -1023.92467246733 32 1812.39759571907 13 -203.671280618918 23 -1023.92467246733 33 1812.39759571907 70 1 0 3DFACE 8 body_half_outside 10 -399.515588143821 20 -964.515951276276 30 1812.39759571907 11 -209.215453044867 21 -1051.79710945546 31 1922.19277204157 12 -410.390873558597 22 -990.771212819307 32 1922.19277204157 13 -410.390873558597 23 -990.771212819307 33 1922.19277204157 70 1 0 3DFACE 8 body_half_outside 10 1023.92467246733 20 -203.671280618918 30 2258.00680432354 11 921.587710511789 21 -381.734128610352 31 2361.46489814399 12 964.515951276275 22 -399.51558814382 32 2258.00680432354 13 964.515951276275 23 -399.51558814382 33 2258.00680432354 70 1 0 3DFACE 8 body_half_outside 10 921.587710511789 20 -381.734128610352 30 2361.46489814399 11 1023.92467246733 21 -203.671280618918 31 2258.00680432354 12 978.352295145615 22 -194.606371158736 32 2361.46489814399 13 978.352295145615 23 -194.606371158736 33 2361.46489814399 70 1 0 3DFACE 8 body_half_outside 10 -853.905696349335 20 -778.54324309139 30 2019.68727261649 11 -804.883917627287 21 -707.527532613081 31 1967.25758629213 12 -845.012275898089 22 -788.258546505553 32 1988.01128244689 13 -845.012275898089 23 -788.258546505553 33 1988.01128244689 70 1 0 3DFACE 8 body_half_outside 10 -804.883917627287 20 -707.527532613081 30 1967.25758629213 11 -853.905696349335 21 -778.54324309139 31 2019.68727261649 12 -818.480102290147 22 -696.846172894875 32 2011.59249120966 13 -818.480102290147 23 -696.846172894875 33 2011.59249120966 70 1 0 3DFACE 8 body_half_outside 10 -776.87389411925 20 -321.791703197793 30 914.026066884025 11 -641.452721848564 21 -127.592879465023 31 1054.1729200213 12 -824.724927080674 22 -164.047987682633 32 914.026066884025 13 -824.724927080674 23 -164.047987682633 33 914.026066884025 70 1 0 3DFACE 8 body_half_outside 10 -641.452721848564 20 -127.592879465023 30 1054.1729200213 11 -776.87389411925 21 -321.791703197793 31 914.026066884025 12 -604.235251721862 22 -250.282436127116 32 1054.1729200213 13 -604.235251721862 23 -250.282436127116 33 1054.1729200213 70 1 0 3DFACE 8 body_half_outside 10 1.80477854883065e-13 20 -1072.40303302985 30 1922.19277204157 11 -203.671280618918 21 -1023.92467246733 31 1812.39759571907 12 1.80477854883065e-13 22 -1043.98454271904 32 1812.39759571907 13 1.80477854883065e-13 23 -1043.98454271904 33 1812.39759571907 70 1 0 3DFACE 8 body_half_outside 10 -203.671280618918 20 -1023.92467246733 30 1812.39759571907 11 1.80477854883065e-13 21 -1072.40303302985 31 1922.19277204157 12 -209.215453044867 22 -1051.79710945546 32 1922.19277204157 13 -209.215453044867 23 -1051.79710945546 33 1922.19277204157 70 1 0 3DFACE 8 body_half_outside 10 653.750224578544 20 -1019.67559748903 30 1941.79325554754 11 369.41031965462 21 -997.119327169824 31 1899.59344191956 12 653.750224578544 22 -997.119327169824 32 1899.59344191956 13 653.750224578544 23 -997.119327169824 33 1899.59344191956 70 1 0 3DFACE 8 body_half_outside 10 369.41031965462 20 -997.119327169824 30 1899.59344191956 11 653.750224578544 21 -1019.67559748903 31 1941.79325554754 12 349.642861592144 22 -1009.19892078507 32 1922.19277204157 13 349.642861592144 23 -1009.19892078507 33 1922.19277204157 70 3 0 3DFACE 8 body_half_outside 10 349.642861592144 20 -1009.19892078507 30 1922.19277204157 11 653.750224578544 21 -1019.67559748903 31 1941.79325554754 12 320.792432759964 22 -1019.67559748903 32 1941.79325554754 13 320.792432759964 23 -1019.67559748903 33 1941.79325554754 70 1 0 3DFACE 8 body_half_outside 10 1059.21725479392 20 -210.691411720441 30 2011.5925230317 11 997.760836892423 21 -413.286070645571 31 2058.8118770109 12 997.760836892423 22 -413.286070645571 32 2011.5925230317 13 997.760836892423 23 -413.286070645571 33 2011.5925230317 70 1 0 3DFACE 8 body_half_outside 10 997.760836892423 20 -413.286070645571 30 2058.8118770109 11 1059.21725479392 21 -210.691411720441 31 2011.5925230317 12 1059.21725479392 22 -210.691411720441 32 2058.8118770109 13 1059.21725479392 23 -210.691411720441 33 2058.8118770109 70 1 0 3DFACE 8 body_half_outside 10 -847.505736434059 20 1.80477854883065e-13 30 796.153149972084 11 -819.73776511114 21 -163.055979488767 31 738.078199114136 12 -831.221151351825 22 -165.340167031437 32 796.153149972084 13 -831.221151351825 23 -165.340167031437 33 796.153149972084 70 1 0 3DFACE 8 body_half_outside 10 -819.73776511114 20 -163.055979488767 30 738.078199114136 11 -847.505736434059 21 1.80477854883065e-13 31 796.153149972084 12 -835.797377356766 22 1.80477854883065e-13 32 738.078199114136 13 -835.797377356766 23 1.80477854883065e-13 33 738.078199114136 70 1 0 3DFACE 8 body_half_outside 10 182.278551827736 20 -916.376162171087 30 2455.6433200213 11 1.80477854883065e-13 21 -997.519349743284 31 2361.46489814399 12 194.606371158736 22 -978.352295145615 32 2361.46489814399 13 194.606371158736 23 -978.352295145615 33 2361.46489814399 70 1 0 3DFACE 8 body_half_outside 10 1.80477854883065e-13 20 -997.519349743284 30 2361.46489814399 11 182.278551827736 21 -916.376162171087 31 2455.6433200213 12 1.80477854883065e-13 22 -934.329032542513 32 2455.6433200213 13 1.80477854883065e-13 23 -934.329032542513 33 2455.6433200213 70 3 0 3DFACE 8 body_half_outside 10 1.80477854883065e-13 20 -934.329032542513 30 2455.6433200213 11 182.278551827736 21 -916.376162171087 31 2455.6433200213 12 141.00638791784 22 -920.44111551416 32 2455.6433200213 13 141.00638791784 23 -920.44111551416 33 2455.6433200213 70 13 0 3DFACE 8 body_half_outside 10 1.80477854883065e-13 20 -934.329032542513 30 2455.6433200213 11 141.00638791784 21 -920.44111551416 31 2455.6433200213 12 47.148335412588 22 -929.685326821772 32 2455.6433200213 13 47.148335412588 23 -929.685326821772 33 2455.6433200213 70 1 0 3DFACE 8 body_half_outside 10 35.9517814413365 20 -1076.35666734212 30 2059.65014337885 11 40.1106512432663 21 -1076.01799327905 31 2051.86944523768 12 36.3998441498995 22 -1076.38347587727 32 2058.8118770109 13 36.3998441498995 23 -1076.38347587727 33 2058.8118770109 70 1 0 3DFACE 8 body_half_outside 10 40.1106512432663 20 -1076.01799327905 30 2051.86944523768 11 35.9517814413365 21 -1076.35666734212 31 2059.65014337885 12 35.9517814413358 22 -976.024878397508 32 2059.65014337886 13 35.9517814413358 23 -976.024878397508 33 2059.65014337886 70 13 0 3DFACE 8 body_half_outside 10 40.1106512432663 20 -1076.01799327905 30 2051.86944523768 11 35.9517814413358 21 -976.024878397508 31 2059.65014337886 12 40.1106512432667 22 -976.081021219369 32 2051.86944523768 13 40.1106512432667 23 -976.081021219369 33 2051.86944523768 70 1 0 3DFACE 8 body_half_outside 10 -10.2481189704998 20 -977.41094203537 30 2078.78676870972 11 -1.4681606386561 21 -1078.06037755542 31 2079.65151912724 12 -10.2481189705 22 -1077.26880722866 32 2078.78676870972 13 -10.2481189705 23 -1077.26880722866 33 2078.78676870972 70 1 0 3DFACE 8 body_half_outside 10 -1.4681606386561 20 -1078.06037755542 30 2079.65151912724 11 -10.2481189704998 21 -977.41094203537 31 2078.78676870972 12 -1.46816063865592 22 -978.223928142328 32 2079.65151912724 13 -1.46816063865592 23 -978.223928142328 33 2079.65151912724 70 1 0 3DFACE 8 body_half_outside 10 884.794355702396 20 -604.173850577965 30 1922.19277204157 11 180.675224578544 21 -609.663955206589 31 1911.92150871446 12 876.866113364493 22 -609.663955206589 32 1911.92150871446 13 876.866113364493 23 -609.663955206589 33 1911.92150871446 70 1 0 3DFACE 8 body_half_outside 10 180.675224578544 20 -609.663955206589 30 1911.92150871446 11 884.794355702396 21 -604.173850577965 31 1922.19277204157 12 180.675224578544 22 -589.158254916404 32 1950.28497564898 13 180.675224578544 23 -589.158254916404 33 1950.28497564898 70 3 0 3DFACE 8 body_half_outside 10 180.675224578544 20 -589.158254916404 30 1950.28497564898 11 884.794355702396 21 -604.173850577965 31 1922.19277204157 12 892.68433542823 22 -596.472603338329 32 1936.60079223358 13 892.68433542823 23 -596.472603338329 33 1936.60079223358 70 13 0 3DFACE 8 body_half_outside 10 180.675224578544 20 -589.158254916404 30 1950.28497564898 11 892.68433542823 21 -596.472603338329 31 1936.60079223358 12 897.90069342138 22 -589.158254916404 32 1950.28497564898 13 897.90069342138 23 -589.158254916404 33 1950.28497564898 70 1 0 3DFACE 8 body_half_outside 10 -758.060123058849 20 -874.453748088142 30 2003.99630767223 11 -702.965588161926 21 -809.153241506708 31 1972.08037046597 12 -769.870311262695 22 -863.130130350016 32 1987.61043910797 13 -769.870311262695 23 -863.130130350016 33 1987.61043910797 70 1 0 3DFACE 8 body_half_outside 10 -702.965588161926 20 -809.153241506708 30 1972.08037046597 11 -758.060123058849 21 -874.453748088142 31 2003.99630767223 12 -687.957452549297 22 -823.760435027841 32 1993.10258668608 13 -687.957452549297 23 -823.760435027841 33 1993.10258668608 70 1 0 3DFACE 8 body_half_outside 10 -643.970452120392 20 -861.831591212861 30 2011.20252653019 11 -741.432257601186 21 -891.447302299009 31 1988.14599297097 12 -654.791104458432 22 -848.015122202593 32 1965.89490198638 13 -654.791104458432 23 -848.015122202593 33 1965.89490198638 70 1 0 3DFACE 8 body_half_outside 10 -741.432257601186 20 -891.447302299009 30 1988.14599297097 11 -643.970452120392 21 -861.831591212861 31 2011.20252653019 12 -731.724734127308 22 -900.26267972249 32 2019.84617451401 13 -731.724734127308 23 -900.26267972249 33 2019.84617451401 70 1 0 3DFACE 8 body_half_outside 10 180.675224578544 20 -1016.06585313728 30 2035.20217666346 11 653.750224578544 21 -1011.8021195433 31 1991.91176299638 12 180.675224578544 22 -1011.8021195433 32 1991.91176299638 13 180.675224578544 23 -1011.8021195433 33 1991.91176299638 70 1 0 3DFACE 8 body_half_outside 10 653.750224578544 20 -1011.8021195433 30 1991.91176299638 11 180.675224578544 21 -1016.06585313728 31 2035.20217666346 12 653.750224578544 22 -1016.06585313728 32 2035.20217666346 13 653.750224578544 23 -1016.06585313728 33 2035.20217666346 70 1 0 3DFACE 8 body_half_outside 10 590.997993226901 20 -590.997993226901 30 738.078199114136 11 452.472966724379 21 -677.173649450057 31 682.822310520627 12 575.888850875701 22 -575.888850875701 32 682.822310520627 13 575.888850875701 23 -575.888850875701 33 682.822310520627 70 1 0 3DFACE 8 body_half_outside 10 452.472966724379 20 -677.173649450057 30 682.822310520627 11 590.997993226901 21 -590.997993226901 31 738.078199114136 12 464.344143695271 22 -694.940121314314 32 738.078199114136 13 464.344143695271 23 -694.940121314314 33 738.078199114136 70 1 0 3DFACE 8 body_half_outside 10 1051.79710945546 20 -209.215453044867 30 2148.21162800104 11 964.515951276275 21 -399.51558814382 31 2258.00680432354 12 990.771212819308 22 -410.390873558597 32 2148.21162800104 13 990.771212819308 23 -410.390873558597 33 2148.21162800104 70 1 0 3DFACE 8 body_half_outside 10 964.515951276275 20 -399.51558814382 30 2258.00680432354 11 1051.79710945546 21 -209.215453044867 31 2148.21162800104 12 1023.92467246733 22 -203.671280618918 32 2258.00680432354 13 1023.92467246733 23 -203.671280618918 33 2258.00680432354 70 1 0 3DFACE 8 body_half_outside 10 -747.450883605455 20 1.80477854883065e-13 30 1427.8983600213 11 -878.79625075709 21 -89.3648841254364 31 1427.8983600213 12 -887.597923605455 22 3.60955709766131e-13 32 1427.8983600213 13 -887.597923605455 23 3.60955709766131e-13 33 1427.8983600213 70 1 0 3DFACE 8 body_half_outside 10 -878.79625075709 20 -89.3648841254364 30 1427.8983600213 11 -747.450883605455 21 1.80477854883065e-13 31 1427.8983600213 12 -870.542978388701 22 -173.161764737035 32 1427.8983600213 13 -870.542978388701 23 -173.161764737035 33 1427.8983600213 70 3 0 3DFACE 8 body_half_outside 10 -870.542978388701 20 -173.161764737035 30 1427.8983600213 11 -747.450883605455 21 1.80477854883065e-13 31 1427.8983600213 12 -868.904108801094 22 -178.564393729439 32 1427.8983600213 13 -868.904108801094 23 -178.564393729439 33 1427.8983600213 70 3 0 3DFACE 8 body_half_outside 10 -868.904108801094 20 -178.564393729439 30 1427.8983600213 11 -747.450883605455 21 1.80477854883065e-13 31 1427.8983600213 12 -842.852042179446 22 -264.446547810842 32 1427.8983600213 13 -842.852042179446 23 -264.446547810842 33 1427.8983600213 70 3 0 3DFACE 8 body_half_outside 10 -842.852042179446 20 -264.446547810842 30 1427.8983600213 11 -747.450883605455 21 1.80477854883065e-13 31 1427.8983600213 12 -820.033554718597 22 -339.669019965462 32 1427.8983600213 13 -820.033554718597 23 -339.669019965462 33 1427.8983600213 70 3 0 3DFACE 8 body_half_outside 10 -820.033554718597 20 -339.669019965462 30 1427.8983600213 11 -747.450883605455 21 1.80477854883065e-13 31 1427.8983600213 12 -814.713927134819 22 -349.621343174435 32 1427.8983600213 13 -814.713927134819 23 -349.621343174435 33 1427.8983600213 70 3 0 3DFACE 8 body_half_outside 10 -814.713927134819 20 -349.621343174435 30 1427.8983600213 11 -747.450883605455 21 1.80477854883065e-13 31 1427.8983600213 12 -772.428086079136 22 -428.73258747146 32 1427.8983600213 13 -772.428086079136 23 -428.73258747146 33 1427.8983600213 70 3 0 3DFACE 8 body_half_outside 10 -772.428086079136 20 -428.73258747146 30 1427.8983600213 11 -747.450883605455 21 1.80477854883065e-13 31 1427.8983600213 12 -738.010701420772 22 -493.122985245198 32 1427.8983600213 13 -738.010701420772 23 -493.122985245198 33 1427.8983600213 70 3 0 3DFACE 8 body_half_outside 10 -738.010701420772 20 -493.122985245198 30 1427.8983600213 11 -747.450883605455 21 1.80477854883065e-13 31 1427.8983600213 12 -733.088824464619 22 -145.820433573828 32 1427.8983600213 13 -733.088824464619 23 -145.820433573828 33 1427.8983600213 70 13 0 3DFACE 8 body_half_outside 10 -738.010701420772 20 -493.122985245198 30 1427.8983600213 11 -733.088824464619 21 -145.820433573828 31 1427.8983600213 12 -727.278190985583 22 -506.200587048885 32 1427.8983600213 13 -727.278190985583 23 -506.200587048885 33 1427.8983600213 70 3 0 3DFACE 8 body_half_outside 10 -727.278190985583 20 -506.200587048885 30 1427.8983600213 11 -733.088824464619 21 -145.820433573828 31 1427.8983600213 12 -690.554572920556 22 -286.037069662455 32 1427.8983600213 13 -690.554572920556 23 -286.037069662455 33 1427.8983600213 70 13 0 3DFACE 8 body_half_outside 10 -727.278190985583 20 -506.200587048885 30 1427.8983600213 11 -690.554572920556 21 -286.037069662455 31 1427.8983600213 12 -670.393897307106 22 -575.514299446691 32 1427.8983600213 13 -670.393897307106 23 -575.514299446691 33 1427.8983600213 70 3 0 3DFACE 8 body_half_outside 10 -670.393897307106 20 -575.514299446691 30 1427.8983600213 11 -690.554572920556 21 -286.037069662455 31 1427.8983600213 12 -621.482696406623 22 -415.26146157539 32 1427.8983600213 13 -621.482696406623 23 -415.26146157539 33 1427.8983600213 70 13 0 3DFACE 8 body_half_outside 10 -670.393897307106 20 -575.514299446691 30 1427.8983600213 11 -621.482696406623 21 -415.26146157539 31 1427.8983600213 12 -627.626510748516 22 -627.626510748516 32 1427.8983600213 13 -627.626510748516 23 -627.626510748516 33 1427.8983600213 70 3 0 3DFACE 8 body_half_outside 10 -627.626510748516 20 -627.626510748516 30 1427.8983600213 11 -621.482696406623 21 -415.26146157539 31 1427.8983600213 12 -610.198917737466 22 -641.92896670788 32 1427.8983600213 13 -610.198917737466 23 -641.92896670788 33 1427.8983600213 70 3 0 3DFACE 8 body_half_outside 10 -610.198917737466 20 -641.92896670788 30 1427.8983600213 11 -621.482696406623 21 -415.26146157539 31 1427.8983600213 12 -528.527588401294 22 -528.527588401294 32 1427.8983600213 13 -528.527588401294 23 -528.527588401294 33 1427.8983600213 70 13 0 3DFACE 8 body_half_outside 10 -610.198917737466 20 -641.92896670788 30 1427.8983600213 11 -528.527588401294 21 -528.527588401294 31 1427.8983600213 12 -540.907488126092 22 -698.794973376131 32 1427.8983600213 13 -540.907488126092 23 -698.794973376131 33 1427.8983600213 70 3 0 3DFACE 8 body_half_outside 10 -540.907488126092 20 -698.794973376131 30 1427.8983600213 11 -528.527588401294 21 -528.527588401294 31 1427.8983600213 12 -493.122985245198 22 -738.010701420772 32 1427.8983600213 13 -493.122985245198 23 -738.010701420772 33 1427.8983600213 70 3 0 3DFACE 8 body_half_outside 10 -493.122985245198 20 -738.010701420772 30 1427.8983600213 11 -528.527588401294 21 -528.527588401294 31 1427.8983600213 12 -415.26146157539 22 -621.482696406623 32 1427.8983600213 13 -415.26146157539 23 -621.482696406623 33 1427.8983600213 70 13 0 3DFACE 8 body_half_outside 10 -493.122985245198 20 -738.010701420772 30 1427.8983600213 11 -415.26146157539 21 -621.482696406623 31 1427.8983600213 12 -468.281766857471 22 -751.288609279597 32 1427.8983600213 13 -468.281766857471 23 -751.288609279597 33 1427.8983600213 70 3 0 3DFACE 8 body_half_outside 10 -468.281766857471 20 -751.288609279597 30 1427.8983600213 11 -415.26146157539 21 -621.482696406623 31 1427.8983600213 12 -389.246833055444 22 -793.533661525914 32 1427.8983600213 13 -389.246833055444 23 -793.533661525914 33 1427.8983600213 70 3 0 3DFACE 8 body_half_outside 10 -389.246833055444 20 -793.533661525914 30 1427.8983600213 11 -415.26146157539 21 -621.482696406623 31 1427.8983600213 12 -286.037069662455 22 -690.554572920556 32 1427.8983600213 13 -286.037069662455 23 -690.554572920556 33 1427.8983600213 70 13 0 3DFACE 8 body_half_outside 10 -389.246833055444 20 -793.533661525914 30 1427.8983600213 11 -286.037069662455 21 -690.554572920556 31 1427.8983600213 12 -339.669019965462 22 -820.033554718597 32 1427.8983600213 13 -339.669019965462 23 -820.033554718597 33 1427.8983600213 70 3 0 3DFACE 8 body_half_outside 10 -339.669019965462 20 -820.033554718597 30 1427.8983600213 11 -286.037069662455 21 -690.554572920556 31 1427.8983600213 12 -307.339192645458 22 -829.840700617718 32 1427.8983600213 13 -307.339192645458 23 -829.840700617718 33 1427.8983600213 70 3 0 3DFACE 8 body_half_outside 10 -307.339192645458 20 -829.840700617718 30 1427.8983600213 11 -286.037069662455 21 -690.554572920556 31 1427.8983600213 12 -221.595075742173 22 -855.85089411917 32 1427.8983600213 13 -221.595075742173 23 -855.85089411917 33 1427.8983600213 70 3 0 3DFACE 8 body_half_outside 10 -221.595075742173 20 -855.85089411917 30 1427.8983600213 11 -286.037069662455 21 -690.554572920556 31 1427.8983600213 12 -145.820433573828 22 -733.088824464619 32 1427.8983600213 13 -145.820433573828 23 -733.088824464619 33 1427.8983600213 70 13 0 3DFACE 8 body_half_outside 10 -221.595075742173 20 -855.85089411917 30 1427.8983600213 11 -145.820433573828 21 -733.088824464619 31 1427.8983600213 12 -173.161764737035 22 -870.542978388701 32 1427.8983600213 13 -173.161764737035 23 -870.542978388701 33 1427.8983600213 70 3 0 3DFACE 8 body_half_outside 10 -173.161764737035 20 -870.542978388701 30 1427.8983600213 11 -145.820433573828 21 -733.088824464619 31 1427.8983600213 12 -44.7901031548271 22 -883.186483489224 32 1427.8983600213 13 -44.7901031548271 23 -883.186483489224 33 1427.8983600213 70 3 0 3DFACE 8 body_half_outside 10 -44.7901031548271 20 -883.186483489224 30 1427.8983600213 11 -145.820433573828 21 -733.088824464619 31 1427.8983600213 12 0.0 22 -747.450883605455 32 1427.8983600213 13 0.0 23 -747.450883605455 33 1427.8983600213 70 13 0 3DFACE 8 body_half_outside 10 -44.7901031548271 20 -883.186483489224 30 1427.8983600213 11 0.0 21 -747.450883605455 31 1427.8983600213 12 1.80477854883065e-13 22 -887.597923605455 32 1427.8983600213 13 1.80477854883065e-13 23 -887.597923605455 33 1427.8983600213 70 3 0 3DFACE 8 body_half_outside 10 1.80477854883065e-13 20 -887.597923605455 30 1427.8983600213 11 0.0 21 -747.450883605455 31 1427.8983600213 12 145.820433573828 22 -733.088824464618 32 1427.8983600213 13 145.820433573828 23 -733.088824464618 33 1427.8983600213 70 13 0 3DFACE 8 body_half_outside 10 1.80477854883065e-13 20 -887.597923605455 30 1427.8983600213 11 145.820433573828 21 -733.088824464618 31 1427.8983600213 12 44.7901424632535 22 -883.186479617682 32 1427.8983600213 13 44.7901424632535 23 -883.186479617682 33 1427.8983600213 70 3 0 3DFACE 8 body_half_outside 10 44.7901424632535 20 -883.186479617682 30 1427.8983600213 11 145.820433573828 21 -733.088824464618 31 1427.8983600213 12 133.953889402395 22 -874.404617053063 32 1427.8983600213 13 133.953889402395 23 -874.404617053063 33 1427.8983600213 70 3 0 3DFACE 8 body_half_outside 10 133.953889402395 20 -874.404617053063 30 1427.8983600213 11 145.820433573828 21 -733.088824464618 31 1427.8983600213 12 173.161764737035 22 -870.542978388701 32 1427.8983600213 13 173.161764737035 23 -870.542978388701 33 1427.8983600213 70 3 0 3DFACE 8 body_half_outside 10 173.161764737035 20 -870.542978388701 30 1427.8983600213 11 145.820433573828 21 -733.088824464618 31 1427.8983600213 12 286.037069662455 22 -690.554572920556 32 1427.8983600213 13 286.037069662455 23 -690.554572920556 33 1427.8983600213 70 13 0 3DFACE 8 body_half_outside 10 173.161764737035 20 -870.542978388701 30 1427.8983600213 11 286.037069662455 21 -690.554572920556 31 1427.8983600213 12 221.595154594654 22 -855.850870199531 32 1427.8983600213 13 221.595154594654 23 -855.850870199531 33 1427.8983600213 70 3 0 3DFACE 8 body_half_outside 10 221.595154594654 20 -855.850870199531 30 1427.8983600213 11 286.037069662455 21 -690.554572920556 31 1427.8983600213 12 307.339228961076 22 -829.840689601495 32 1427.8983600213 13 307.339228961076 23 -829.840689601495 33 1427.8983600213 70 3 0 3DFACE 8 body_half_outside 10 307.339228961076 20 -829.840689601495 30 1427.8983600213 11 286.037069662455 21 -690.554572920556 31 1427.8983600213 12 415.26146157539 22 -621.482696406623 32 1427.8983600213 13 415.26146157539 23 -621.482696406623 33 1427.8983600213 70 13 0 3DFACE 8 body_half_outside 10 307.339228961076 20 -829.840689601495 30 1427.8983600213 11 415.26146157539 21 -621.482696406623 31 1427.8983600213 12 339.669019965462 22 -820.033554718597 32 1427.8983600213 13 339.669019965462 23 -820.033554718597 33 1427.8983600213 70 3 0 3DFACE 8 body_half_outside 10 339.669019965462 20 -820.033554718597 30 1427.8983600213 11 415.26146157539 21 -621.482696406623 31 1427.8983600213 12 389.246864354028 22 -793.533644796473 32 1427.8983600213 13 389.246864354028 23 -793.533644796473 33 1427.8983600213 70 3 0 3DFACE 8 body_half_outside 10 389.246864354028 20 -793.533644796473 30 1427.8983600213 11 415.26146157539 21 -621.482696406623 31 1427.8983600213 12 468.281762027731 22 -751.288611861147 32 1427.8983600213 13 468.281762027731 23 -751.288611861147 33 1427.8983600213 70 3 0 3DFACE 8 body_half_outside 10 468.281762027731 20 -751.288611861147 30 1427.8983600213 11 415.26146157539 21 -621.482696406623 31 1427.8983600213 12 528.527588401294 22 -528.527588401294 32 1427.8983600213 13 528.527588401294 23 -528.527588401294 33 1427.8983600213 70 13 0 3DFACE 8 body_half_outside 10 468.281762027731 20 -751.288611861147 30 1427.8983600213 11 528.527588401294 21 -528.527588401294 31 1427.8983600213 12 493.122985245198 22 -738.010701420772 32 1427.8983600213 13 493.122985245198 23 -738.010701420772 33 1427.8983600213 70 3 0 3DFACE 8 body_half_outside 10 493.122985245198 20 -738.010701420772 30 1427.8983600213 11 528.527588401294 21 -528.527588401294 31 1427.8983600213 12 540.907511486368 22 -698.794954204847 32 1427.8983600213 13 540.907511486368 23 -698.794954204847 33 1427.8983600213 70 3 0 3DFACE 8 body_half_outside 10 540.907511486368 20 -698.794954204847 30 1427.8983600213 11 528.527588401294 21 -528.527588401294 31 1427.8983600213 12 621.482696406623 22 -415.26146157539 32 1427.8983600213 13 621.482696406623 23 -415.26146157539 33 1427.8983600213 70 13 0 3DFACE 8 body_half_outside 10 540.907511486368 20 -698.794954204847 30 1427.8983600213 11 621.482696406623 21 -415.26146157539 31 1427.8983600213 12 627.626510748516 22 -627.626510748516 32 1427.8983600213 13 627.626510748516 23 -627.626510748516 33 1427.8983600213 70 3 0 3DFACE 8 body_half_outside 10 627.626510748516 20 -627.626510748516 30 1427.8983600213 11 621.482696406623 21 -415.26146157539 31 1427.8983600213 12 690.554572920556 22 -286.037069662455 32 1427.8983600213 13 690.554572920556 23 -286.037069662455 33 1427.8983600213 70 13 0 3DFACE 8 body_half_outside 10 627.626510748516 20 -627.626510748516 30 1427.8983600213 11 690.554572920556 21 -286.037069662455 31 1427.8983600213 12 738.010701420772 22 -493.122985245198 32 1427.8983600213 13 738.010701420772 23 -493.122985245198 33 1427.8983600213 70 3 0 3DFACE 8 body_half_outside 10 738.010701420772 20 -493.122985245198 30 1427.8983600213 11 690.554572920556 21 -286.037069662455 31 1427.8983600213 12 733.088824464618 22 -145.820433573828 32 1427.8983600213 13 733.088824464618 23 -145.820433573828 33 1427.8983600213 70 13 0 3DFACE 8 body_half_outside 10 738.010701420772 20 -493.122985245198 30 1427.8983600213 11 733.088824464618 21 -145.820433573828 31 1427.8983600213 12 747.450883605455 22 1.80477854883065e-13 32 1427.8983600213 13 747.450883605455 23 1.80477854883065e-13 33 1427.8983600213 70 13 0 3DFACE 8 body_half_outside 10 738.010701420772 20 -493.122985245198 30 1427.8983600213 11 747.450883605455 21 1.80477854883065e-13 31 1427.8983600213 12 820.033554718597 22 -339.669019965462 32 1427.8983600213 13 820.033554718597 23 -339.669019965462 33 1427.8983600213 70 3 0 3DFACE 8 body_half_outside 10 820.033554718597 20 -339.669019965462 30 1427.8983600213 11 747.450883605455 21 1.80477854883065e-13 31 1427.8983600213 12 887.597923605455 22 1.80477854883065e-13 32 1427.8983600213 13 887.597923605455 23 1.80477854883065e-13 33 1427.8983600213 70 13 0 3DFACE 8 body_half_outside 10 820.033554718597 20 -339.669019965462 30 1427.8983600213 11 887.597923605455 21 1.80477854883065e-13 31 1427.8983600213 12 870.542978388702 22 -173.161764737035 32 1427.8983600213 13 870.542978388702 23 -173.161764737035 33 1427.8983600213 70 1 0 3DFACE 8 body_half_outside 10 435.577877671407 20 -651.888361812631 30 631.979456702016 11 285.268899238265 21 -688.700045464263 31 587.016306884026 12 414.146250971868 22 -619.813665790805 32 587.016306884026 13 414.146250971868 23 -619.813665790805 33 587.016306884026 70 1 0 3DFACE 8 body_half_outside 10 285.268899238265 20 -688.700045464263 30 587.016306884026 11 435.577877671407 21 -651.888361812631 31 631.979456702016 12 300.031260464802 22 -724.33953815002 32 631.979456702016 13 300.031260464802 23 -724.33953815002 33 631.979456702016 70 1 0 3DFACE 8 body_half_outside 10 -829.407026995335 20 -554.192057578438 30 1708.93950189862 11 -660.670394770277 21 -660.670394770277 31 1614.7610800213 12 -705.352696568271 22 -705.352696568271 32 1708.93950189862 13 -705.352696568271 23 -705.352696568271 33 1708.93950189862 70 1 0 3DFACE 8 body_half_outside 10 -660.670394770277 20 -660.670394770277 30 1614.7610800213 11 -829.407026995335 21 -554.192057578438 31 1708.93950189862 12 -705.689426216297 22 -605.814546234746 32 1614.7610800213 13 -705.689426216297 23 -605.814546234746 33 1614.7610800213 70 3 0 3DFACE 8 body_half_outside 10 -705.689426216297 20 -605.814546234746 30 1614.7610800213 11 -829.407026995335 21 -554.192057578438 31 1708.93950189862 12 -765.568613986399 22 -532.851544827532 32 1614.7610800213 13 -765.568613986399 23 -532.851544827532 33 1614.7610800213 70 3 0 3DFACE 8 body_half_outside 10 -765.568613986399 20 -532.851544827532 30 1614.7610800213 11 -829.407026995335 21 -554.192057578438 31 1708.93950189862 12 -776.866198451135 22 -519.085398326623 32 1614.7610800213 13 -776.866198451135 23 -519.085398326623 33 1614.7610800213 70 1 0 3DFACE 8 body_half_outside 10 311.668800211604 20 -752.435044439405 30 682.822310520627 11 152.954610178005 21 -768.954752250597 31 631.979456702016 12 300.031260464802 22 -724.33953815002 32 631.979456702016 13 300.031260464802 23 -724.33953815002 33 631.979456702016 70 1 0 3DFACE 8 body_half_outside 10 152.954610178005 20 -768.954752250597 30 631.979456702016 11 311.668800211604 21 -752.435044439405 31 682.822310520627 12 158.887376492573 22 -798.780782641381 32 682.822310520627 13 158.887376492573 23 -798.780782641381 33 682.822310520627 70 1 0 3DFACE 8 body_half_outside 10 319.845809128627 20 -772.176090266528 30 738.078199114136 11 158.887376492573 21 -798.780782641381 31 682.822310520627 12 311.668800211604 22 -752.435044439405 32 682.822310520627 13 311.668800211604 23 -752.435044439405 33 682.822310520627 70 1 0 3DFACE 8 body_half_outside 10 158.887376492573 20 -798.780782641381 30 682.822310520627 11 319.845809128627 21 -772.176090266528 31 738.078199114136 12 163.055979488767 22 -819.73776511114 32 738.078199114136 13 163.055979488767 23 -819.73776511114 33 738.078199114136 70 1 0 3DFACE 8 body_half_outside 10 660.325364744673 20 -441.215302798659 30 1054.1729200213 11 495.494614285553 21 -495.494614285553 31 1241.03564002131 12 561.560562517035 22 -561.560562517035 32 1054.1729200213 13 561.560562517035 23 -561.560562517035 33 1054.1729200213 70 1 0 3DFACE 8 body_half_outside 10 495.494614285553 20 -495.494614285553 30 1241.03564002131 11 660.325364744673 21 -441.215302798659 31 1054.1729200213 12 582.640028068573 22 -389.307620352121 32 1241.03564002131 13 582.640028068573 23 -389.307620352121 33 1241.03564002131 70 1 0 3DFACE 8 body_half_outside 10 575.888850875701 20 -575.888850875701 30 682.822310520627 11 435.577877671407 21 -651.888361812631 31 631.979456702016 12 554.385481313987 22 -554.385481313987 32 631.979456702016 13 554.385481313987 23 -554.385481313987 33 631.979456702016 70 1 0 3DFACE 8 body_half_outside 10 435.577877671407 20 -651.888361812631 30 631.979456702016 11 575.888850875701 21 -575.888850875701 31 682.822310520627 12 452.472966724379 22 -677.173649450057 32 682.822310520627 13 452.472966724379 23 -677.173649450057 33 682.822310520627 70 1 0 3DFACE 8 body_half_outside 10 43.536421039762 20 -1075.68058440422 30 2034.64693744883 11 42.6716706222411 21 -976.267680774437 31 2025.86697911698 12 42.6716706222413 22 -1075.76575488639 32 2025.86697911698 13 42.6716706222413 23 -1075.76575488639 33 2025.86697911698 70 1 0 3DFACE 8 body_half_outside 10 42.6716706222411 20 -976.267680774437 30 2025.86697911698 11 43.536421039762 21 -1075.68058440422 31 2034.64693744883 12 43.5364210397618 22 -976.708082157409 32 2034.64693744883 13 43.5364210397618 23 -976.708082157409 33 2034.64693744883 70 1 0 3DFACE 8 body_half_outside 10 653.750224578544 20 -837.4569269514 30 2252.83778292244 11 180.675224578544 21 -879.083714298798 31 2240.21043503138 12 180.675224578544 22 -837.4569269514 32 2252.83778292244 13 180.675224578544 23 -837.4569269514 33 2252.83778292244 70 1 0 3DFACE 8 body_half_outside 10 180.675224578544 20 -879.083714298798 30 2240.21043503138 11 653.750224578544 21 -837.4569269514 31 2252.83778292244 12 653.750224578544 22 -879.083714298799 32 2240.21043503138 13 653.750224578544 23 -879.083714298799 33 2240.21043503138 70 1 0 3DFACE 8 body_half_outside 10 -804.422958470166 20 -708.167767562713 30 2102.55187642937 11 -853.465106968372 21 -778.056206654812 31 2053.98620958956 12 -843.757583494495 22 -786.871584078293 32 2085.68639113261 13 -843.757583494495 23 -786.871584078293 33 2085.68639113261 70 1 0 3DFACE 8 body_half_outside 10 -853.465106968372 20 -778.056206654812 30 2053.98620958956 11 -804.422958470166 21 -708.167767562713 31 2102.55187642937 12 -818.273878310588 22 -697.096462294947 32 2058.80160712022 13 -818.273878310588 23 -697.096462294947 33 2058.80160712022 70 1 0 3DFACE 8 body_half_outside 10 911.54074094115 20 -574.592524622259 30 2058.8118770109 11 907.767925107023 21 -572.267173431359 31 2035.20224673698 12 912.783669278017 22 -572.267169258698 32 2035.20224467364 13 912.783669278017 23 -572.267169258698 33 2035.20224467364 70 1 0 3DFACE 8 body_half_outside 10 907.767925107023 20 -572.267173431359 30 2035.20224673698 11 180.675224578544 21 -576.530907025343 31 2078.49259033054 12 180.675224578544 22 -572.26717343136 32 2035.20217666346 13 180.675224578544 23 -572.26717343136 33 2035.20217666346 70 1 0 3DFACE 8 body_half_outside 10 180.675224578544 20 -576.530907025343 30 2078.49259033054 11 907.767925107023 21 -572.267173431359 31 2035.20224673698 12 911.54074094115 22 -574.592524622259 32 2058.8118770109 13 911.54074094115 23 -574.592524622259 33 2058.8118770109 70 15 0 3DFACE 8 body_half_outside 10 180.675224578544 20 -576.530907025343 30 2078.49259033054 11 911.54074094115 21 -574.592524622259 31 2058.8118770109 12 908.625264240696 22 -576.530906699202 32 2078.49259036266 13 908.625264240696 23 -576.530906699202 33 2078.49259036266 70 1 0 3DFACE 8 body_half_outside 10 527.108194536515 20 -527.108194536515 30 587.016306884026 11 435.577877671407 21 -651.888361812631 31 631.979456702016 12 414.146250971868 22 -619.813665790805 32 587.016306884026 13 414.146250971868 23 -619.813665790805 33 587.016306884026 70 1 0 3DFACE 8 body_half_outside 10 435.577877671407 20 -651.888361812631 30 631.979456702016 11 527.108194536515 21 -527.108194536515 31 587.016306884026 12 554.385481313987 22 -554.385481313987 32 631.979456702016 13 554.385481313987 23 -554.385481313987 33 631.979456702016 70 1 0 3DFACE 8 body_half_outside 10 369.410361108008 20 -997.119327169824 30 2170.81091140737 11 209.215453044867 21 -1051.79710945546 31 2148.21162800104 12 349.642943907379 22 -1009.19889581502 32 2148.21162800104 13 349.642943907379 23 -1009.19889581502 33 2148.21162800104 70 1 0 3DFACE 8 body_half_outside 10 209.215453044867 20 -1051.79710945546 30 2148.21162800104 11 369.410361108008 21 -997.119327169824 31 2170.81091140737 12 203.671280618918 22 -1023.92467246733 32 2258.00680432354 13 203.671280618918 23 -1023.92467246733 33 2258.00680432354 70 3 0 3DFACE 8 body_half_outside 10 203.671280618918 20 -1023.92467246733 30 2258.00680432354 11 369.410361108008 21 -997.119327169824 31 2170.81091140737 12 406.150729088795 22 -980.53459853389 32 2191.01946172118 13 406.150729088795 23 -980.53459853389 33 2191.01946172118 70 13 0 3DFACE 8 body_half_outside 10 203.671280618918 20 -1023.92467246733 30 2258.00680432354 11 406.150729088795 21 -980.53459853389 31 2191.01946172118 12 399.51558814382 22 -964.515951276275 32 2258.00680432354 13 399.51558814382 23 -964.515951276275 33 2258.00680432354 70 1 0 3DFACE 8 body_half_outside 10 -647.394912321209 20 -268.159752894786 30 1241.03564002131 11 -778.906875772646 21 -154.93421062823 31 1054.1729200213 12 -733.714233519903 22 -303.914386430124 32 1054.1729200213 13 -733.714233519903 23 -303.914386430124 33 1054.1729200213 70 1 0 3DFACE 8 body_half_outside 10 -778.906875772646 20 -154.93421062823 30 1054.1729200213 11 -647.394912321209 21 -268.159752894786 31 1241.03564002131 12 -687.270773156591 22 -136.706656519425 32 1241.03564002131 13 -687.270773156591 23 -136.706656519425 33 1241.03564002131 70 1 0 3DFACE 8 body_half_outside 10 -831.221151351825 20 -165.340167031437 30 796.153149972084 11 -772.176090266528 21 -319.845809128627 31 738.078199114136 12 -782.993203577332 22 -324.326404167689 32 796.153149972084 13 -782.993203577332 23 -324.326404167689 33 796.153149972084 70 1 0 3DFACE 8 body_half_outside 10 -772.176090266528 20 -319.845809128627 30 738.078199114136 11 -831.221151351825 21 -165.340167031437 31 796.153149972084 12 -819.73776511114 22 -163.055979488767 32 738.078199114136 13 -819.73776511114 23 -163.055979488767 33 738.078199114136 70 1 0 3DFACE 8 body_half_outside 10 -752.435044439405 20 -311.668800211604 30 682.822310520627 11 -651.888361812631 21 -435.577877671407 31 631.979456702016 12 -677.173649450057 22 -452.47296672438 32 682.822310520627 13 -677.173649450057 23 -452.47296672438 33 682.822310520627 70 1 0 3DFACE 8 body_half_outside 10 -651.888361812631 20 -435.577877671407 30 631.979456702016 11 -752.435044439405 21 -311.668800211604 31 682.822310520627 12 -724.33953815002 22 -300.031260464802 32 631.979456702016 13 -724.33953815002 23 -300.031260464802 33 631.979456702016 70 1 0 3DFACE 8 body_half_outside 10 -772.176090266528 20 -319.845809128627 30 738.078199114136 11 -677.173649450057 21 -452.47296672438 31 682.822310520627 12 -694.940121314314 22 -464.344143695271 32 738.078199114136 13 -694.940121314314 23 -464.344143695271 33 738.078199114136 70 1 0 3DFACE 8 body_half_outside 10 -677.173649450057 20 -452.47296672438 30 682.822310520627 11 -772.176090266528 21 -319.845809128627 31 738.078199114136 12 -752.435044439405 22 -311.668800211604 32 682.822310520627 13 -752.435044439405 23 -311.668800211604 33 682.822310520627 70 1 0 3DFACE 8 body_half_outside 10 -389.307620352121 20 -582.640028068573 30 1241.03564002131 11 -561.560562517035 21 -561.560562517035 31 1054.1729200213 12 -441.215302798659 22 -660.325364744672 32 1054.1729200213 13 -441.215302798659 23 -660.325364744672 33 1054.1729200213 70 1 0 3DFACE 8 body_half_outside 10 -561.560562517035 20 -561.560562517035 30 1054.1729200213 11 -389.307620352121 21 -582.640028068573 31 1241.03564002131 12 -495.494614285553 22 -495.494614285553 32 1241.03564002131 13 -495.494614285553 23 -495.494614285553 33 1241.03564002131 70 1 0 3DFACE 8 body_half_outside 10 -415.26146157539 20 -621.482696406623 30 1427.8983600213 11 -594.593536632775 21 -594.593536632776 31 1241.03564002131 12 -467.169144021928 22 -699.168033082722 32 1241.03564002131 13 -467.169144021928 23 -699.168033082722 33 1241.03564002131 70 1 0 3DFACE 8 body_half_outside 10 -594.593536632775 20 -594.593536632776 30 1241.03564002131 11 -415.26146157539 21 -621.482696406623 31 1427.8983600213 12 -528.527588401294 22 -528.527588401294 32 1427.8983600213 13 -528.527588401294 23 -528.527588401294 33 1427.8983600213 70 1 0 3DFACE 8 body_half_outside 10 -997.519349743285 20 3.60955709766131e-13 30 1708.93950189862 11 -916.376162171087 21 -182.278551827736 31 1614.7610800213 12 -978.352295145615 22 -194.606371158736 32 1708.93950189862 13 -978.352295145615 23 -194.606371158736 33 1708.93950189862 70 1 0 3DFACE 8 body_half_outside 10 -916.376162171087 20 -182.278551827736 30 1614.7610800213 11 -997.519349743285 21 3.60955709766131e-13 31 1708.93950189862 12 -925.063957882084 22 -94.0698816812515 32 1614.7610800213 13 -925.063957882084 23 -94.0698816812515 33 1614.7610800213 70 3 0 3DFACE 8 body_half_outside 10 -925.063957882084 20 -94.0698816812515 30 1614.7610800213 11 -997.519349743285 21 3.60955709766131e-13 31 1708.93950189862 12 -934.329032542513 22 3.60955709766131e-13 32 1614.7610800213 13 -934.329032542513 23 3.60955709766131e-13 33 1614.7610800213 70 1 0 3DFACE 8 body_half_outside 10 -978.352295145615 20 -194.606371158736 30 2361.46489814399 11 -1043.98454271904 21 3.60955709766131e-13 31 2258.00680432354 12 -1023.92467246733 22 -203.671280618918 32 2258.00680432354 13 -1023.92467246733 23 -203.671280618918 33 2258.00680432354 70 1 0 3DFACE 8 body_half_outside 10 -1043.98454271904 20 3.60955709766131e-13 30 2258.00680432354 11 -978.352295145615 21 -194.606371158736 31 2361.46489814399 12 -997.519349743285 22 3.60955709766131e-13 32 2361.46489814399 13 -997.519349743285 23 3.60955709766131e-13 33 2361.46489814399 70 1 0 3DFACE 8 body_half_outside 10 794.166563605455 20 1.80477854883065e-13 30 1054.1729200213 11 687.270773156591 21 -136.706656519426 31 1241.03564002131 12 778.906875772646 22 -154.93421062823 32 1054.1729200213 13 778.906875772646 23 -154.93421062823 33 1054.1729200213 70 1 0 3DFACE 8 body_half_outside 10 687.270773156591 20 -136.706656519426 30 1241.03564002131 11 794.166563605455 21 1.80477854883065e-13 31 1054.1729200213 12 700.735203605455 22 0.0 32 1241.03564002131 13 700.735203605455 23 0.0 33 1241.03564002131 70 1 0 3DFACE 8 body_half_outside 10 -832.543811724793 20 -84.6615196498334 30 2549.0746800213 11 -824.724927080674 21 -164.047987682633 31 2455.6433200213 12 -824.724927080674 22 -164.047987682633 32 2549.0746800213 13 -824.724927080674 23 -164.047987682633 33 2549.0746800213 70 1 0 3DFACE 8 body_half_outside 10 -824.724927080674 20 -164.047987682633 30 2455.6433200213 11 -832.543811724793 21 -84.6615196498334 31 2549.0746800213 12 -840.882243605455 22 1.80477854883065e-13 32 2455.6433200213 13 -840.882243605455 23 1.80477854883065e-13 33 2455.6433200213 70 3 0 3DFACE 8 body_half_outside 10 -840.882243605455 20 1.80477854883065e-13 30 2455.6433200213 11 -832.543811724793 21 -84.6615196498334 31 2549.0746800213 12 -840.882243605455 22 1.80477854883065e-13 32 2549.0746800213 13 -840.882243605455 23 1.80477854883065e-13 33 2549.0746800213 70 1 0 3DFACE 8 body_half_outside 10 -621.482696406623 20 -415.26146157539 30 1427.8983600213 11 -776.873894119249 21 -321.791703197793 31 1241.03564002131 12 -699.168033082722 22 -467.169144021928 32 1241.03564002131 13 -699.168033082722 23 -467.169144021928 33 1241.03564002131 70 1 0 3DFACE 8 body_half_outside 10 -776.873894119249 20 -321.791703197793 30 1241.03564002131 11 -621.482696406623 21 -415.26146157539 31 1427.8983600213 12 -690.554572920556 22 -286.037069662455 32 1427.8983600213 13 -690.554572920556 23 -286.037069662455 33 1427.8983600213 70 1 0 3DFACE 8 body_half_outside 10 464.344143695271 20 -694.940121314314 30 738.078199114136 11 311.668800211604 21 -752.435044439405 31 682.822310520627 12 452.472966724379 22 -677.173649450057 32 682.822310520627 13 452.472966724379 23 -677.173649450057 33 682.822310520627 70 1 0 3DFACE 8 body_half_outside 10 311.668800211604 20 -752.435044439405 30 682.822310520627 11 464.344143695271 21 -694.940121314314 31 738.078199114136 12 319.845809128627 22 -772.176090266528 32 738.078199114136 13 319.845809128627 23 -772.176090266528 33 738.078199114136 70 1 0 3DFACE 8 body_half_outside 10 470.84895947612 20 -704.67526609701 30 796.153149972084 11 319.845809128627 21 -772.176090266528 31 738.078199114136 12 464.344143695271 22 -694.940121314314 32 738.078199114136 13 464.344143695271 23 -694.940121314314 33 738.078199114136 70 1 0 3DFACE 8 body_half_outside 10 319.845809128627 20 -772.176090266528 30 738.078199114136 11 470.84895947612 21 -704.67526609701 31 796.153149972084 12 324.326404167689 22 -782.993203577332 32 796.153149972084 13 324.326404167689 23 -782.993203577332 33 796.153149972084 70 1 0 3DFACE 8 body_half_outside 10 964.515951276275 20 -399.51558814382 30 2258.00680432354 11 829.407026995336 21 -554.192057578438 31 2361.46489814399 12 868.04142298445 22 -580.006735667279 32 2258.00680432354 13 868.04142298445 23 -580.006735667279 33 2258.00680432354 70 1 0 3DFACE 8 body_half_outside 10 829.407026995336 20 -554.192057578438 30 2361.46489814399 11 964.515951276275 21 -399.51558814382 31 2258.00680432354 12 921.587710511789 22 -381.734128610352 32 2361.46489814399 13 921.587710511789 23 -381.734128610352 33 2361.46489814399 70 1 0 3DFACE 8 body_half_outside 10 -413.286070645571 20 -997.760836892423 30 2058.8118770109 11 -599.99837764929 21 -897.961029579872 31 2011.5925230317 12 -413.286070645571 22 -997.760836892423 32 2011.5925230317 13 -413.286070645571 23 -997.760836892423 33 2011.5925230317 70 1 0 3DFACE 8 body_half_outside 10 -599.99837764929 20 -897.961029579872 30 2011.5925230317 11 -413.286070645571 21 -997.760836892423 31 2058.8118770109 12 -599.99837764929 22 -897.961029579872 32 2058.8118770109 13 -599.99837764929 23 -897.961029579872 33 2058.8118770109 70 1 0 3DFACE 8 body_half_outside 10 -784.574341950659 20 -324.981333125909 30 855.37186879426 11 -704.67526609701 21 -470.84895947612 31 796.153149972084 12 -706.098253038492 22 -471.799768952456 32 855.37186879426 13 -706.098253038492 23 -471.799768952456 33 855.37186879426 70 1 0 3DFACE 8 body_half_outside 10 -704.67526609701 20 -470.84895947612 30 796.153149972084 11 -784.574341950659 21 -324.981333125909 31 855.37186879426 12 -782.993203577332 22 -324.326404167689 32 796.153149972084 13 -782.993203577332 23 -324.326404167689 33 796.153149972084 70 1 0 3DFACE 8 body_half_outside 10 -26.4713665686843 20 -1076.14565304285 30 1997.22699536883 11 -33.2912055279291 21 -975.812207442705 31 2002.82389255955 12 -33.2912055279292 22 -1075.947598755 32 2002.82389255955 13 -33.2912055279292 23 -1075.947598755 33 2002.82389255955 70 1 0 3DFACE 8 body_half_outside 10 -33.2912055279291 20 -975.812207442705 30 2002.82389255955 11 -26.4713665686843 21 -1076.14565304285 31 1997.22699536883 12 -26.4713665686843 22 -976.148870417647 32 1997.22699536883 13 -26.4713665686843 23 -976.148870417647 33 1997.22699536883 70 1 0 3DFACE 8 body_half_outside 10 -38.8881027186484 20 -975.735675994198 30 2059.65014337885 11 -33.2912055279292 21 -1076.04157769881 31 2066.4699823381 12 -38.8881027186488 22 -1076.06746493881 32 2059.65014337885 13 -38.8881027186488 23 -1076.06746493881 33 2059.65014337885 70 1 0 3DFACE 8 body_half_outside 10 -33.2912055279292 20 -1076.04157769881 30 2066.4699823381 11 -38.8881027186484 21 -975.735675994198 31 2059.65014337885 12 -33.2912055279292 22 -975.878683928089 32 2066.4699823381 13 -33.2912055279292 23 -975.878683928089 33 2066.4699823381 70 1 0 3DFACE 8 body_half_outside 10 23.5350452913723 20 -1076.43485544616 30 1997.22699536883 11 15.754347150196 21 -976.955453067628 31 1993.0681255669 12 15.754347150196 22 -1076.84924014666 32 1993.0681255669 13 15.754347150196 23 -1076.84924014666 33 1993.0681255669 70 1 0 3DFACE 8 body_half_outside 10 15.754347150196 20 -976.955453067628 30 1993.0681255669 11 23.5350452913723 21 -1076.43485544616 31 1997.22699536883 12 23.5350452913723 22 -976.438072820957 32 1997.22699536883 13 23.5350452913723 23 -976.438072820957 33 1997.22699536883 70 1 0 3DFACE 8 body_half_outside 10 7.31179769318775 20 -1077.46403068815 30 1990.50710618793 11 15.754347150196 21 -976.955453067628 31 1993.0681255669 12 7.31179769318757 22 -977.633667953296 32 1990.50710618793 13 7.31179769318757 23 -977.633667953296 33 1990.50710618793 70 1 0 3DFACE 8 body_half_outside 10 15.754347150196 20 -976.955453067628 30 1993.0681255669 11 7.31179769318775 21 -1077.46403068815 31 1990.50710618793 12 15.754347150196 22 -1076.84924014666 32 1993.0681255669 13 15.754347150196 23 -1076.84924014666 33 1993.0681255669 70 1 0 3DFACE 8 body_half_outside 10 40.1106512432667 20 -976.081021219369 30 2051.86944523768 11 42.6716706222413 21 -1075.76575488639 31 2043.42689578067 12 40.1106512432663 22 -1076.01799327905 32 2051.86944523768 13 40.1106512432663 23 -1076.01799327905 33 2051.86944523768 70 1 0 3DFACE 8 body_half_outside 10 42.6716706222413 20 -1075.76575488639 30 2043.42689578067 11 40.1106512432667 21 -976.081021219369 31 2051.86944523768 12 42.6716706222411 22 -976.334157259822 32 2043.42689578067 13 42.6716706222411 23 -976.334157259822 33 2043.42689578067 70 1 0 3DFACE 8 body_half_outside 10 -410.390873558597 20 -990.771212819307 30 2148.21162800104 11 -599.99837764929 21 -897.961029579872 31 2058.8118770109 12 -413.286070645571 22 -997.760836892423 32 2058.8118770109 13 -413.286070645571 23 -997.760836892423 33 2058.8118770109 70 1 0 3DFACE 8 body_half_outside 10 -599.99837764929 20 -897.961029579872 30 2058.8118770109 11 -410.390873558597 21 -990.771212819307 31 2148.21162800104 12 -595.795202951324 22 -891.670534105406 32 2148.21162800104 13 -595.795202951324 23 -891.670534105406 33 2148.21162800104 70 1 0 3DFACE 8 body_half_outside 10 -582.640028068573 20 -389.307620352121 30 1241.03564002131 11 -733.714233519903 21 -303.914386430124 31 1054.1729200213 12 -660.325364744672 22 -441.215302798659 32 1054.1729200213 13 -660.325364744672 23 -441.215302798659 33 1054.1729200213 70 1 0 3DFACE 8 body_half_outside 10 -733.714233519903 20 -303.914386430124 30 1054.1729200213 11 -582.640028068573 21 -389.307620352121 31 1241.03564002131 12 -647.394912321209 22 -268.159752894786 32 1241.03564002131 13 -647.394912321209 23 -268.159752894786 33 1241.03564002131 70 1 0 3DFACE 8 body_half_outside 10 -1079.96854760957 20 3.60955709766131e-13 30 2011.5925230317 11 -1051.79710945546 21 -209.215453044867 31 1922.19277204157 12 -1059.21725479392 22 -210.691411720441 32 2011.5925230317 13 -1059.21725479392 23 -210.691411720441 33 2011.5925230317 70 1 0 3DFACE 8 body_half_outside 10 -1051.79710945546 20 -209.215453044867 30 1922.19277204157 11 -1079.96854760957 21 3.60955709766131e-13 31 2011.5925230317 12 -1072.40303302985 22 3.60955709766131e-13 32 1922.19277204157 13 -1072.40303302985 23 3.60955709766131e-13 33 1922.19277204157 70 1 0 3DFACE 8 body_half_outside 10 600.487204246519 20 -600.48720424652 30 855.37186879426 11 470.84895947612 21 -704.67526609701 31 796.153149972084 12 599.277053327022 22 -599.277053327022 32 796.153149972084 13 599.277053327022 23 -599.277053327022 33 796.153149972084 70 1 0 3DFACE 8 body_half_outside 10 470.84895947612 20 -704.67526609701 30 796.153149972084 11 600.487204246519 21 -600.48720424652 31 855.37186879426 12 471.799768952456 22 -706.098253038493 32 855.37186879426 13 471.799768952456 23 -706.098253038493 33 855.37186879426 70 1 0 3DFACE 8 body_half_outside 10 104.493597603992 20 -867.967629842289 30 2084.51449834551 11 180.675224578544 21 -856.929131071254 31 2097.9647944504 12 180.675224578544 22 -867.967544283947 32 2084.51444903383 13 180.675224578544 23 -867.967544283947 33 2084.51444903383 70 1 0 3DFACE 8 body_half_outside 10 180.675224578544 20 -856.929131071254 30 2097.9647944504 11 104.493597603992 21 -867.967629842289 31 2084.51449834551 12 104.493594381781 22 -856.929210819903 32 2097.96485084121 13 104.493594381781 23 -856.929210819903 33 2097.96485084121 70 1 0 3DFACE 8 body_half_outside 10 180.675224578544 20 -843.478785654691 30 2109.00320766309 11 104.493594381781 21 -856.929210819903 31 2097.96485084121 12 104.493591159571 22 -843.478858324207 32 2109.0032698636 13 104.493591159571 23 -843.478858324207 33 2109.0032698636 70 1 0 3DFACE 8 body_half_outside 10 104.493594381781 20 -856.929210819903 30 2097.96485084121 11 180.675224578544 21 -843.478785654691 31 2109.00320766309 12 180.675224578544 22 -856.929131071254 32 2097.9647944504 13 180.675224578544 23 -856.929131071254 33 2097.9647944504 70 1 0 3DFACE 8 body_half_outside 10 180.675224578544 20 -828.133397265575 30 2117.20548864256 11 104.493591159571 21 -843.478858324207 31 2109.0032698636 12 104.493588061189 22 -828.133461858568 32 2117.20555516006 13 104.493588061189 23 -828.133461858568 33 2117.20555516006 70 1 0 3DFACE 8 body_half_outside 10 104.493591159571 20 -843.478858324207 30 2109.0032698636 11 180.675224578544 21 -828.133397265575 31 2117.20548864256 12 180.675224578544 22 -843.478785654691 32 2109.00320766309 13 180.675224578544 23 -843.478785654691 33 2109.00320766309 70 1 0 3DFACE 8 body_half_outside 10 180.675224578544 20 -811.482680573908 30 2122.25642833066 11 104.493588061189 21 -828.133461858568 31 2117.20555516006 12 104.493585205705 22 -811.482736403362 32 2122.25649750655 13 104.493585205705 23 -811.482736403362 33 2122.25649750655 70 1 0 3DFACE 8 body_half_outside 10 104.493588061189 20 -828.133461858568 30 2117.20555516006 11 180.675224578544 21 -811.482680573908 31 2122.25642833066 12 180.675224578544 22 -828.133397265575 32 2117.20548864256 13 180.675224578544 23 -828.133397265575 33 2117.20548864256 70 1 0 3DFACE 8 body_half_outside 10 180.675224578544 20 -794.16651328432 30 2123.96192194778 11 104.493585205705 21 -811.482736403362 31 2122.25649750655 12 104.493582702852 22 -794.166559999998 32 2123.9619920213 13 104.493582702852 23 -794.166559999998 33 2123.9619920213 70 1 0 3DFACE 8 body_half_outside 10 104.493585205705 20 -811.482736403362 30 2122.25649750655 11 180.675224578544 21 -794.16651328432 31 2123.96192194778 12 180.675224578544 22 -811.482680573908 32 2122.25642833066 13 180.675224578544 23 -811.482680573908 33 2122.25642833066 70 1 0 3DFACE 8 body_half_outside 10 180.675224578544 20 -776.850345994732 30 2122.25642833066 11 104.493582702852 21 -794.166559999998 31 2123.9619920213 12 104.493580648814 22 -776.850383596634 32 2122.25649750655 13 104.493580648814 23 -776.850383596634 33 2122.25649750655 70 1 0 3DFACE 8 body_half_outside 10 104.493582702852 20 -794.166559999998 30 2123.9619920213 11 180.675224578544 21 -776.850345994732 31 2122.25642833066 12 180.675224578544 22 -794.16651328432 32 2123.96192194778 13 180.675224578544 23 -794.16651328432 33 2123.96192194778 70 1 0 3DFACE 8 body_half_outside 10 180.675224578544 20 -760.199629303065 30 2117.20548864256 11 104.493580648814 21 -776.850383596634 31 2122.25649750655 12 104.493579122526 22 -760.199658141427 32 2117.20555516006 13 104.493579122526 23 -760.199658141427 33 2117.20555516006 70 1 0 3DFACE 8 body_half_outside 10 104.493580648814 20 -776.850383596634 30 2122.25649750655 11 180.675224578544 21 -760.199629303065 31 2117.20548864256 12 180.675224578544 22 -776.850345994732 32 2122.25642833066 13 180.675224578544 23 -776.850345994732 33 2122.25642833066 70 1 0 3DFACE 8 body_half_outside 10 180.675224578544 20 -744.854240913949 30 2109.00320766309 11 104.493579122526 21 -760.199658141427 31 2117.20555516006 12 104.493578182644 22 -744.854261675788 32 2109.0032698636 13 104.493578182644 23 -744.854261675788 33 2109.0032698636 70 1 0 3DFACE 8 body_half_outside 10 104.493579122526 20 -760.199658141427 30 2117.20555516006 11 180.675224578544 21 -744.854240913949 31 2109.00320766309 12 180.675224578544 22 -760.199629303065 32 2117.20548864256 13 180.675224578544 23 -760.199629303065 33 2117.20548864256 70 1 0 3DFACE 8 body_half_outside 10 180.675224578544 20 -731.403895497386 30 2097.9647944504 11 104.493578182644 21 -744.854261675788 31 2109.0032698636 12 104.493577865285 22 -731.403909180092 32 2097.96485084121 13 104.493577865285 23 -731.403909180092 33 2097.96485084121 70 1 0 3DFACE 8 body_half_outside 10 104.493578182644 20 -744.854261675788 30 2109.0032698636 11 180.675224578544 21 -731.403895497386 31 2097.9647944504 12 180.675224578544 22 -744.854240913949 32 2109.00320766309 13 180.675224578544 23 -744.854240913949 33 2109.00320766309 70 1 0 3DFACE 8 body_half_outside 10 180.675224578544 20 -731.403895497386 30 2097.9647944504 11 104.493578182647 21 -720.365490157705 31 2084.51449834551 12 180.675224578544 22 -720.365482284693 32 2084.51444903383 13 180.675224578544 23 -720.365482284693 33 2084.51444903383 70 1 0 3DFACE 8 body_half_outside 10 104.493578182647 20 -720.365490157705 30 2084.51449834551 11 180.675224578544 21 -731.403895497386 31 2097.9647944504 12 104.493577865285 22 -731.403909180092 32 2097.96485084121 13 104.493577865285 23 -731.403909180092 33 2097.96485084121 70 1 0 3DFACE 8 body_half_outside 10 180.675224578544 20 -720.365482284693 30 2084.51444903383 11 104.493579122533 21 -712.163204861241 31 2069.16910187987 12 180.675224578544 22 -712.163201305221 32 2069.16906064472 13 180.675224578544 23 -712.163201305221 33 2069.16906064472 70 1 0 3DFACE 8 body_half_outside 10 104.493579122533 20 -712.163204861241 30 2069.16910187987 11 180.675224578544 21 -720.365482284693 31 2084.51444903383 12 104.493578182647 22 -720.365490157705 32 2084.51449834551 13 104.493578182647 23 -720.365490157705 33 2084.51449834551 70 1 0 3DFACE 8 body_half_outside 10 180.675224578544 20 -712.163201305221 30 2069.16906064472 11 104.493580648823 21 -707.112262514747 31 2052.51837642467 12 180.675224578544 22 -707.112261617118 32 2052.51834395305 13 180.675224578544 23 -707.112261617118 33 2052.51834395305 70 1 0 3DFACE 8 body_half_outside 10 104.493580648823 20 -707.112262514747 30 2052.51837642467 11 180.675224578544 21 -712.163201305221 31 2069.16906064472 12 104.493579122533 22 -712.163204861241 32 2069.16910187987 13 104.493579122533 23 -712.163204861241 33 2069.16910187987 70 1 0 3DFACE 8 body_half_outside 10 180.675224578544 20 -707.112261617118 30 2052.51834395305 11 104.493582702864 21 -705.406767999999 31 2035.2022000213 12 180.675224578544 22 -705.406767999999 32 2035.20217666346 13 180.675224578544 23 -705.406767999999 33 2035.20217666346 70 1 0 3DFACE 8 body_half_outside 10 104.493582702864 20 -705.406767999999 30 2035.2022000213 11 180.675224578544 21 -707.112261617118 31 2052.51834395305 12 104.493580648823 22 -707.112262514747 32 2052.51837642467 13 104.493580648823 23 -707.112262514747 33 2052.51837642467 70 1 0 3DFACE 8 body_half_outside 10 519.085398326623 20 -776.866198451135 30 2455.6433200213 11 381.734128610352 21 -921.587710511788 31 2361.46489814399 12 554.192057578438 22 -829.407026995336 32 2361.46489814399 13 554.192057578438 23 -829.407026995336 33 2361.46489814399 70 1 0 3DFACE 8 body_half_outside 10 381.734128610352 20 -921.587710511788 30 2361.46489814399 11 519.085398326623 21 -776.866198451135 31 2455.6433200213 12 357.552241131722 22 -863.2074697971 32 2455.6433200213 13 357.552241131722 23 -863.2074697971 33 2455.6433200213 70 3 0 3DFACE 8 body_half_outside 10 357.552241131722 20 -863.2074697971 30 2455.6433200213 11 519.085398326623 21 -776.866198451135 31 2455.6433200213 12 492.936359391337 22 -790.843150956456 32 2455.6433200213 13 492.936359391337 23 -790.843150956456 33 2455.6433200213 70 13 0 3DFACE 8 body_half_outside 10 357.552241131722 20 -863.2074697971 30 2455.6433200213 11 492.936359391337 21 -790.843150956456 31 2455.6433200213 12 409.740310523406 22 -835.312365543472 32 2455.6433200213 13 409.740310523406 23 -835.312365543472 33 2455.6433200213 70 1 0 3DFACE 8 body_half_outside 10 -835.797377356766 20 1.80477854883065e-13 30 738.078199114136 11 -798.780782641381 21 -158.887376492573 31 682.822310520627 12 -819.73776511114 22 -163.055979488767 32 738.078199114136 13 -819.73776511114 23 -163.055979488767 33 738.078199114136 70 1 0 3DFACE 8 body_half_outside 10 -798.780782641381 20 -158.887376492573 30 682.822310520627 11 -835.797377356766 21 1.80477854883065e-13 31 738.078199114136 12 -814.429823327873 22 1.80477854883065e-13 32 682.822310520627 13 -814.429823327873 23 1.80477854883065e-13 33 682.822310520627 70 1 0 3DFACE 8 body_half_outside 10 -580.006735667279 20 -868.041422984449 30 2258.00680432354 11 -700.811796716974 21 -805.485642916867 31 2148.21162800104 12 -595.795202951324 22 -891.670534105406 32 2148.21162800104 13 -595.795202951324 23 -891.670534105406 33 2148.21162800104 70 1 0 3DFACE 8 body_half_outside 10 -700.811796716974 20 -805.485642916867 30 2148.21162800104 11 -580.006735667279 21 -868.041422984449 31 2258.00680432354 12 -713.051374182295 22 -793.031288591004 32 2155.44278114838 13 -713.051374182295 23 -793.031288591004 33 2155.44278114838 70 3 0 3DFACE 8 body_half_outside 10 -750.226480623555 20 -763.163737563064 30 2153.51833793914 11 -738.208549610569 21 -738.20854961057 31 2258.00680432354 12 -758.175252738136 22 -758.175252738136 32 2148.91211343617 13 -758.175252738136 23 -758.175252738136 33 2148.91211343617 70 1 0 3DFACE 8 body_half_outside 10 -738.208549610569 20 -738.20854961057 30 2258.00680432354 11 -750.226480623555 21 -763.163737563064 31 2153.51833793914 12 -713.051374182295 22 -793.031288591004 32 2155.44278114838 13 -713.051374182295 23 -793.031288591004 33 2155.44278114838 70 13 0 3DFACE 8 body_half_outside 10 -738.208549610569 20 -738.20854961057 30 2258.00680432354 11 -713.051374182295 21 -793.031288591004 31 2155.44278114838 12 -580.006735667279 22 -868.041422984449 32 2258.00680432354 13 -580.006735667279 23 -868.041422984449 33 2258.00680432354 70 3 0 3DFACE 8 body_half_outside 10 -654.791104458432 20 -848.015122202593 30 1965.89490198638 11 -758.928832717995 21 -874.671572316599 31 1963.87063213502 12 -679.407718084958 22 -824.046894149155 32 1931.32901160226 13 -679.407718084958 23 -824.046894149155 33 1931.32901160226 70 1 0 3DFACE 8 body_half_outside 10 -758.928832717995 20 -874.671572316599 30 1963.87063213502 11 -654.791104458432 21 -848.015122202593 31 1965.89490198638 12 -741.432257601186 22 -891.447302299009 32 1988.14599297097 13 -741.432257601186 23 -891.447302299009 33 1988.14599297097 70 1 0 3DFACE 8 body_half_outside 10 -1.4681606386561 20 -1077.9663986116 30 1989.64235577041 11 -10.2481189704998 21 -977.344465549986 31 1990.50710618793 12 -10.2481189704998 22 -1077.17482828484 32 1990.50710618793 13 -10.2481189704998 23 -1077.17482828484 33 1990.50710618793 70 1 0 3DFACE 8 body_half_outside 10 -10.2481189704998 20 -977.344465549986 30 1990.50710618793 11 -1.4681606386561 21 -1077.9663986116 31 1989.64235577041 12 -1.4681606386561 22 -978.157451656943 32 1989.64235577041 13 -1.4681606386561 23 -978.157451656943 33 1989.64235577041 70 1 0 3DFACE 8 body_half_outside 10 471.799768952456 20 -706.098253038493 30 855.37186879426 11 324.326404167689 21 -782.993203577332 31 796.153149972084 12 470.84895947612 22 -704.67526609701 32 796.153149972084 13 470.84895947612 23 -704.67526609701 33 796.153149972084 70 1 0 3DFACE 8 body_half_outside 10 324.326404167689 20 -782.993203577332 30 796.153149972084 11 471.799768952456 21 -706.098253038493 31 855.37186879426 12 324.981333125909 22 -784.574341950659 32 855.37186879426 13 324.981333125909 23 -784.574341950659 33 855.37186879426 70 1 0 3DFACE 8 body_half_outside 10 441.215302798659 20 -660.325364744672 30 1614.7610800213 11 468.281762027731 21 -751.288611861147 31 1427.8983600213 12 493.122985245198 22 -738.010701420772 32 1427.8983600213 13 493.122985245198 23 -738.010701420772 33 1427.8983600213 70 1 0 3DFACE 8 body_half_outside 10 468.281762027731 20 -751.288611861147 30 1427.8983600213 11 441.215302798659 21 -660.325364744672 31 1614.7610800213 12 389.246864354028 22 -793.533644796473 32 1427.8983600213 13 389.246864354028 23 -793.533644796473 33 1427.8983600213 70 3 0 3DFACE 8 body_half_outside 10 389.246864354028 20 -793.533644796473 30 1427.8983600213 11 303.914386430124 21 -733.714233519903 31 1614.7610800213 12 339.669019965462 22 -820.033554718597 32 1427.8983600213 13 339.669019965462 23 -820.033554718597 33 1427.8983600213 70 1 0 3DFACE 8 body_half_outside 10 303.914386430124 20 -733.714233519903 30 1614.7610800213 11 389.246864354028 21 -793.533644796473 31 1427.8983600213 12 441.215302798659 22 -660.325364744672 32 1614.7610800213 13 441.215302798659 23 -660.325364744672 33 1614.7610800213 70 3 0 3DFACE 8 body_half_outside 10 897.900697882446 20 -589.158254916404 30 2120.11937767794 11 891.670534105407 21 -595.795202951324 31 2148.21162800104 12 892.684338449561 22 -596.472605357118 32 2133.80356487023 13 892.684338449561 23 -596.472605357118 33 2133.80356487023 70 1 0 3DFACE 8 body_half_outside 10 891.670534105407 20 -595.795202951324 30 2148.21162800104 11 897.900697882446 21 -589.158254916404 31 2120.11937767794 12 990.771212819308 22 -410.390873558597 32 2148.21162800104 13 990.771212819308 23 -410.390873558597 33 2148.21162800104 70 3 0 3DFACE 8 body_half_outside 10 990.771212819308 20 -410.390873558597 30 2148.21162800104 11 897.900697882446 21 -589.158254916404 31 2120.11937767794 12 908.625264240696 22 -576.530906699202 32 2078.49259036266 13 908.625264240696 23 -576.530906699202 33 2078.49259036266 70 13 0 3DFACE 8 body_half_outside 10 990.771212819308 20 -410.390873558597 30 2148.21162800104 11 908.625264240696 21 -576.530906699202 31 2078.49259036266 12 911.54074094115 22 -574.592524622259 32 2058.8118770109 13 911.54074094115 23 -574.592524622259 33 2058.8118770109 70 13 0 3DFACE 8 body_half_outside 10 990.771212819308 20 -410.390873558597 30 2148.21162800104 11 911.54074094115 21 -574.592524622259 31 2058.8118770109 12 997.760836892423 22 -413.286070645571 32 2058.8118770109 13 997.760836892423 23 -413.286070645571 33 2058.8118770109 70 1 0 3DFACE 8 body_half_outside 10 104.493609641054 20 -828.133461858565 30 1953.19884488255 11 180.675224578544 21 -811.482680573908 31 1948.14792499626 12 104.493608114766 22 -811.482736403359 32 1948.14790253605 13 104.493608114766 23 -811.482736403359 33 1948.14790253605 70 1 0 3DFACE 8 body_half_outside 10 180.675224578544 20 -811.482680573908 30 1948.14792499626 11 104.493609641054 21 -828.133461858565 31 1953.19884488255 12 180.675224578544 22 -828.133397265575 32 1953.19886468436 13 180.675224578544 23 -828.133397265575 33 1953.19886468436 70 1 0 3DFACE 8 body_half_outside 10 554.192057578438 20 -829.407026995336 30 1708.93950189862 11 492.936358899678 21 -790.843151219254 31 1614.7610800213 12 519.085398326623 22 -776.866198451135 32 1614.7610800213 13 519.085398326623 23 -776.866198451135 33 1614.7610800213 70 1 0 3DFACE 8 body_half_outside 10 492.936358899678 20 -790.843151219254 30 1614.7610800213 11 554.192057578438 21 -829.407026995336 31 1708.93950189862 12 409.740310523407 22 -835.312365543471 32 1614.7610800213 13 409.740310523407 23 -835.312365543471 33 1614.7610800213 70 3 0 3DFACE 8 body_half_outside 10 409.740310523407 20 -835.312365543471 30 1614.7610800213 11 381.734128610352 21 -921.587710511788 31 1708.93950189862 12 357.552241131722 22 -863.2074697971 32 1614.7610800213 13 357.552241131722 23 -863.2074697971 33 1614.7610800213 70 1 0 3DFACE 8 body_half_outside 10 381.734128610352 20 -921.587710511788 30 1708.93950189862 11 409.740310523407 21 -835.312365543471 31 1614.7610800213 12 554.192057578438 22 -829.407026995336 32 1708.93950189862 13 554.192057578438 23 -829.407026995336 33 1708.93950189862 70 3 0 3DFACE 8 body_half_outside 10 104.493597604008 20 -744.854261675785 30 1961.40113017901 11 180.675224578544 21 -731.403895497386 31 1972.43955887653 12 104.493594381798 22 -731.40390918009 32 1972.4395492014 13 104.493594381798 23 -731.40390918009 33 1972.4395492014 70 1 0 3DFACE 8 body_half_outside 10 180.675224578544 20 -731.403895497386 30 1972.43955887653 11 104.493597604008 21 -744.854261675785 31 1961.40113017901 12 180.675224578544 22 -744.854240913949 32 1961.40114566384 13 180.675224578544 23 -744.854240913949 33 1961.40114566384 70 1 0 3DFACE 8 body_half_outside 10 104.493603557861 20 -881.220857485246 30 2052.51837642467 11 180.675224578544 21 -876.169825263419 31 2069.16906064472 12 180.675224578544 22 -881.220764951522 32 2052.51834395305 13 180.675224578544 23 -881.220764951522 33 2052.51834395305 70 1 0 3DFACE 8 body_half_outside 10 180.675224578544 20 -876.169825263419 30 2069.16906064472 11 104.493603557861 21 -881.220857485246 31 2052.51837642467 12 104.493600702375 22 -876.169915138753 32 2069.16910187987 13 104.493600702375 23 -876.169915138753 33 2069.16910187987 70 1 0 3DFACE 8 body_half_outside 10 104.493600702375 20 -876.169915138753 30 2069.16910187987 11 180.675224578544 21 -867.967544283947 31 2084.51444903383 12 180.675224578544 22 -876.169825263419 32 2069.16906064472 13 180.675224578544 23 -876.169825263419 33 2069.16906064472 70 1 0 3DFACE 8 body_half_outside 10 180.675224578544 20 -867.967544283947 30 2084.51444903383 11 104.493600702375 21 -876.169915138753 31 2069.16910187987 12 104.493597603992 22 -867.967629842289 32 2084.51449834551 13 104.493597603992 23 -867.967629842289 33 2084.51449834551 70 1 0 3DFACE 8 body_half_outside 10 104.493606060716 20 -882.926351999993 30 2035.2022000213 11 180.675224578544 21 -881.220764951522 31 2052.51834395305 12 180.675224578544 22 -882.926258568641 32 2035.20217666346 13 180.675224578544 23 -882.926258568641 33 2035.20217666346 70 1 0 3DFACE 8 body_half_outside 10 180.675224578544 20 -881.220764951522 30 2052.51834395305 11 104.493606060716 21 -882.926351999993 31 2035.2022000213 12 104.493603557861 22 -881.220857485246 32 2052.51837642467 13 104.493603557861 23 -881.220857485246 33 2052.51837642467 70 1 0 3DFACE 8 body_half_outside 10 104.493603557875 20 -776.850383596631 30 1948.14790253605 11 180.675224578544 21 -760.199629303065 31 1953.19886468436 12 104.49360070239 22 -760.199658141424 32 1953.19884488255 13 104.49360070239 23 -760.199658141424 33 1953.19884488255 70 1 0 3DFACE 8 body_half_outside 10 180.675224578544 20 -760.199629303065 30 1953.19886468436 11 104.493603557875 21 -776.850383596631 31 1948.14790253605 12 180.675224578544 22 -776.850345994732 32 1948.14792499626 13 180.675224578544 23 -776.850345994732 33 1948.14792499626 70 1 0 3DFACE 8 body_half_outside 10 653.750224578544 20 -887.575434400246 30 2260.71126086817 11 577.578293884962 21 -864.407003018736 31 2267.73932769213 12 540.896920479706 22 -887.575434400246 32 2260.71126086817 13 540.896920479706 23 -887.575434400246 33 2260.71126086817 70 1 0 3DFACE 8 body_half_outside 10 577.578293884962 20 -864.407003018736 30 2267.73932769213 11 653.750224578544 21 -887.575434400246 31 2260.71126086817 12 600.307509232711 22 -841.785968318108 32 2274.60134354834 13 600.307509232711 23 -841.785968318108 33 2274.60134354834 70 3 0 3DFACE 8 body_half_outside 10 600.307509232711 20 -841.785968318108 30 2274.60134354834 11 653.750224578544 21 -887.575434400246 31 2260.71126086817 12 653.750224578544 22 -841.785968318108 32 2274.60134354834 13 653.750224578544 23 -841.785968318108 33 2274.60134354834 70 1 0 3DFACE 8 body_half_outside 10 -381.734128610353 20 -921.587710511788 30 1708.93950189862 11 -409.740279224824 21 -835.312382272912 31 1614.7610800213 12 -357.552241131723 22 -863.207469797099 32 1614.7610800213 13 -357.552241131723 23 -863.207469797099 33 1614.7610800213 70 1 0 3DFACE 8 body_half_outside 10 -409.740279224824 20 -835.312382272912 30 1614.7610800213 11 -381.734128610353 21 -921.587710511788 31 1708.93950189862 12 -492.936329267328 22 -790.843167058075 32 1614.7610800213 13 -492.936329267328 23 -790.843167058075 33 1614.7610800213 70 3 0 3DFACE 8 body_half_outside 10 -492.936329267328 20 -790.843167058075 30 1614.7610800213 11 -554.192057578438 21 -829.407026995335 31 1708.93950189862 12 -519.085398326623 22 -776.866198451135 32 1614.7610800213 13 -519.085398326623 23 -776.866198451135 33 1614.7610800213 70 1 0 3DFACE 8 body_half_outside 10 -554.192057578438 20 -829.407026995335 30 1708.93950189862 11 -492.936329267328 21 -790.843167058075 31 1614.7610800213 12 -381.734128610353 22 -921.587710511788 32 1708.93950189862 13 -381.734128610353 23 -921.587710511788 33 1708.93950189862 70 3 0 3DFACE 8 body_half_outside 10 782.993203577332 20 -324.326404167689 30 796.153149972084 11 832.899678896021 21 -165.674046918965 31 855.37186879426 12 784.574341950659 22 -324.981333125909 32 855.37186879426 13 784.574341950659 23 -324.981333125909 33 855.37186879426 70 1 0 3DFACE 8 body_half_outside 10 832.899678896021 20 -165.674046918965 30 855.37186879426 11 782.993203577332 21 -324.326404167689 31 796.153149972084 12 831.221151351825 22 -165.340167031437 32 796.153149972084 13 831.221151351825 23 -165.340167031437 33 796.153149972084 70 1 0 3DFACE 8 body_half_outside 10 -789.394716623343 20 -732.286733093936 30 2020.79944934296 11 -833.682296381699 21 -797.91475852831 31 2048.43845388979 12 -833.979694213849 22 -798.243508123 32 2025.28667143296 13 -833.979694213849 23 -798.243508123 33 2025.28667143296 70 1 0 3DFACE 8 body_half_outside 10 -833.682296381699 20 -797.91475852831 30 2048.43845388979 11 -789.394716623343 21 -732.286733093936 31 2020.79944934296 12 -789.34285913936 22 -732.349614898499 32 2049.89434090933 13 -789.34285913936 23 -732.349614898499 33 2049.89434090933 70 1 0 3DFACE 8 body_half_outside 10 1.80477854883065e-13 20 -849.217148276931 30 855.37186879426 11 -165.340167031437 21 -831.221151351825 31 796.153149972084 12 1.80477854883065e-13 22 -847.505736434059 32 796.153149972084 13 1.80477854883065e-13 23 -847.505736434059 33 796.153149972084 70 1 0 3DFACE 8 body_half_outside 10 -165.340167031437 20 -831.221151351825 30 796.153149972084 11 1.80477854883065e-13 21 -849.217148276931 31 855.37186879426 12 -165.674046918965 22 -832.899678896021 32 855.37186879426 13 -165.674046918965 23 -832.899678896021 33 855.37186879426 70 1 0 3DFACE 8 body_half_outside 10 724.33953815002 20 -300.031260464802 30 631.979456702016 11 798.780782641381 21 -158.887376492573 31 682.822310520627 12 752.435044439405 22 -311.668800211604 32 682.822310520627 13 752.435044439405 23 -311.668800211604 33 682.822310520627 70 1 0 3DFACE 8 body_half_outside 10 798.780782641381 20 -158.887376492573 30 682.822310520627 11 724.33953815002 21 -300.031260464802 31 631.979456702016 12 768.954752250597 22 -152.954610178005 32 631.979456702016 13 768.954752250597 23 -152.954610178005 33 631.979456702016 70 1 0 3DFACE 8 body_half_outside 10 452.472966724379 20 -677.173649450057 30 682.822310520627 11 300.031260464802 21 -724.33953815002 31 631.979456702016 12 435.577877671407 22 -651.888361812631 32 631.979456702016 13 435.577877671407 23 -651.888361812631 33 631.979456702016 70 1 0 3DFACE 8 body_half_outside 10 300.031260464802 20 -724.33953815002 30 631.979456702016 11 452.472966724379 21 -677.173649450057 31 682.822310520627 12 311.668800211604 22 -752.435044439405 32 682.822310520627 13 311.668800211604 23 -752.435044439405 33 682.822310520627 70 1 0 3DFACE 8 body_half_outside 10 -724.33953815002 20 -300.031260464802 30 631.979456702016 11 -619.813665790805 21 -414.146250971868 31 587.016306884026 12 -651.888361812631 22 -435.577877671407 32 631.979456702016 13 -651.888361812631 23 -435.577877671407 33 631.979456702016 70 1 0 3DFACE 8 body_half_outside 10 -619.813665790805 20 -414.146250971868 30 587.016306884026 11 -724.33953815002 21 -300.031260464802 31 631.979456702016 12 -688.700045464263 22 -285.268899238265 32 587.016306884026 13 -688.700045464263 23 -285.268899238265 33 587.016306884026 70 1 0 3DFACE 8 body_half_outside 10 -10.2481189704998 20 -1077.17482828484 30 1990.50710618793 11 -18.6906684275082 21 -976.666250664317 31 1993.0681255669 12 -18.6906684275082 22 -1076.56003774335 32 1993.0681255669 13 -18.6906684275082 23 -1076.56003774335 33 1993.0681255669 70 1 0 3DFACE 8 body_half_outside 10 -18.6906684275082 20 -976.666250664317 30 1993.0681255669 11 -10.2481189704998 21 -1077.17482828484 31 1990.50710618793 12 -10.2481189704998 22 -977.344465549986 32 1990.50710618793 13 -10.2481189704998 23 -977.344465549986 33 1990.50710618793 70 1 0 3DFACE 8 body_half_outside 10 300.031260464802 20 -724.33953815002 30 631.979456702016 11 145.428823687577 21 -731.120068617964 31 587.016306884026 12 285.268899238265 22 -688.700045464263 32 587.016306884026 13 285.268899238265 23 -688.700045464263 33 587.016306884026 70 1 0 3DFACE 8 body_half_outside 10 145.428823687577 20 -731.120068617964 30 587.016306884026 11 300.031260464802 21 -724.33953815002 31 631.979456702016 12 152.954610178005 22 -768.954752250597 32 631.979456702016 13 152.954610178005 23 -768.954752250597 33 631.979456702016 70 1 0 3DFACE 8 body_half_outside 10 -495.494614285553 20 -495.494614285553 30 1241.03564002131 11 -660.325364744672 21 -441.215302798659 31 1054.1729200213 12 -561.560562517035 22 -561.560562517035 32 1054.1729200213 13 -561.560562517035 23 -561.560562517035 33 1054.1729200213 70 1 0 3DFACE 8 body_half_outside 10 -660.325364744672 20 -441.215302798659 30 1054.1729200213 11 -495.494614285553 21 -495.494614285553 31 1241.03564002131 12 -582.640028068573 22 -389.307620352121 32 1241.03564002131 13 -582.640028068573 23 -389.307620352121 33 1241.03564002131 70 1 0 3DFACE 8 body_half_outside 10 -528.527588401294 20 -528.527588401294 30 1427.8983600213 11 -699.168033082722 21 -467.169144021928 31 1241.03564002131 12 -594.593536632775 22 -594.593536632776 32 1241.03564002131 13 -594.593536632775 23 -594.593536632776 33 1241.03564002131 70 1 0 3DFACE 8 body_half_outside 10 -699.168033082722 20 -467.169144021928 30 1241.03564002131 11 -528.527588401294 21 -528.527588401294 31 1427.8983600213 12 -621.482696406623 22 -415.26146157539 32 1427.8983600213 13 -621.482696406623 23 -415.26146157539 33 1427.8983600213 70 1 0 3DFACE 8 body_half_outside 10 -863.207469797099 20 -357.552241131722 30 2455.6433200213 11 -978.352295145615 21 -194.606371158736 31 2361.46489814399 12 -921.587710511788 22 -381.734128610352 32 2361.46489814399 13 -921.587710511788 23 -381.734128610352 33 2361.46489814399 70 1 0 3DFACE 8 body_half_outside 10 -978.352295145615 20 -194.606371158736 30 2361.46489814399 11 -863.207469797099 21 -357.552241131722 31 2455.6433200213 12 -887.22732313789 22 -278.369396423646 32 2455.6433200213 13 -887.22732313789 23 -278.369396423646 33 2455.6433200213 70 13 0 3DFACE 8 body_half_outside 10 -978.352295145615 20 -194.606371158736 30 2361.46489814399 11 -887.22732313789 21 -278.369396423646 31 2455.6433200213 12 -914.651018565421 22 -187.965588142593 32 2455.6433200213 13 -914.651018565421 23 -187.965588142593 33 2455.6433200213 70 13 0 3DFACE 8 body_half_outside 10 -978.352295145615 20 -194.606371158736 30 2361.46489814399 11 -914.651018565421 21 -187.965588142593 31 2455.6433200213 12 -916.376162171087 22 -182.278551827736 32 2455.6433200213 13 -916.376162171087 23 -182.278551827736 33 2455.6433200213 70 1 0 3DFACE 8 body_half_outside 10 -650.663001997456 20 1.80477854883065e-13 30 587.016306884026 11 -731.120068617964 21 -145.428823687577 31 587.016306884026 12 -745.443557551536 22 1.80477854883065e-13 32 587.016306884026 13 -745.443557551536 23 1.80477854883065e-13 33 587.016306884026 70 1 0 3DFACE 8 body_half_outside 10 -731.120068617964 20 -145.428823687577 30 587.016306884026 11 -650.663001997456 21 1.80477854883065e-13 31 587.016306884026 12 -688.700045464263 22 -285.268899238265 32 587.016306884026 13 -688.700045464263 23 -285.268899238265 33 587.016306884026 70 3 0 3DFACE 8 body_half_outside 10 -688.700045464263 20 -285.268899238265 30 587.016306884026 11 -650.663001997456 21 1.80477854883065e-13 31 587.016306884026 12 -619.813665790805 22 -414.146250971868 32 587.016306884026 13 -619.813665790805 23 -414.146250971868 33 587.016306884026 70 3 0 3DFACE 8 body_half_outside 10 -619.813665790805 20 -414.146250971868 30 587.016306884026 11 -650.663001997456 21 1.80477854883065e-13 31 587.016306884026 12 -638.160694862082 22 -126.938054583664 32 587.016306884026 13 -638.160694862082 23 -126.938054583664 33 587.016306884026 70 13 0 3DFACE 8 body_half_outside 10 -619.813665790805 20 -414.146250971868 30 587.016306884026 11 -638.160694862082 21 -126.938054583664 31 587.016306884026 12 -601.1342301078 22 -248.997950917359 32 587.016306884026 13 -601.1342301078 23 -248.997950917359 33 587.016306884026 70 13 0 3DFACE 8 body_half_outside 10 -619.813665790805 20 -414.146250971868 30 587.016306884026 11 -601.1342301078 21 -248.997950917359 31 587.016306884026 12 -527.108194536515 22 -527.108194536515 32 587.016306884026 13 -527.108194536515 23 -527.108194536515 33 587.016306884026 70 3 0 3DFACE 8 body_half_outside 10 -527.108194536515 20 -527.108194536515 30 587.016306884026 11 -601.1342301078 21 -248.997950917359 31 587.016306884026 12 -541.006514010435 22 -361.48899563696 32 587.016306884026 13 -541.006514010435 23 -361.48899563696 33 587.016306884026 70 13 0 3DFACE 8 body_half_outside 10 -527.108194536515 20 -527.108194536515 30 587.016306884026 11 -541.006514010435 21 -361.48899563696 31 587.016306884026 12 -460.088220979597 22 -460.088220979597 32 587.016306884026 13 -460.088220979597 23 -460.088220979597 33 587.016306884026 70 13 0 3DFACE 8 body_half_outside 10 -527.108194536515 20 -527.108194536515 30 587.016306884026 11 -460.088220979597 21 -460.088220979597 31 587.016306884026 12 -414.146250971868 22 -619.813665790805 32 587.016306884026 13 -414.146250971868 23 -619.813665790805 33 587.016306884026 70 3 0 3DFACE 8 body_half_outside 10 -414.146250971868 20 -619.813665790805 30 587.016306884026 11 -460.088220979597 21 -460.088220979597 31 587.016306884026 12 -361.48899563696 22 -541.006514010435 32 587.016306884026 13 -361.48899563696 23 -541.006514010435 33 587.016306884026 70 13 0 3DFACE 8 body_half_outside 10 -414.146250971868 20 -619.813665790805 30 587.016306884026 11 -361.48899563696 21 -541.006514010435 31 587.016306884026 12 -285.268899238265 22 -688.700045464263 32 587.016306884026 13 -285.268899238265 23 -688.700045464263 33 587.016306884026 70 3 0 3DFACE 8 body_half_outside 10 -285.268899238265 20 -688.700045464263 30 587.016306884026 11 -361.48899563696 21 -541.006514010435 31 587.016306884026 12 -248.99795091736 22 -601.1342301078 32 587.016306884026 13 -248.99795091736 23 -601.1342301078 33 587.016306884026 70 13 0 3DFACE 8 body_half_outside 10 -285.268899238265 20 -688.700045464263 30 587.016306884026 11 -248.99795091736 21 -601.1342301078 31 587.016306884026 12 -145.428823687577 22 -731.120068617964 32 587.016306884026 13 -145.428823687577 23 -731.120068617964 33 587.016306884026 70 3 0 3DFACE 8 body_half_outside 10 -145.428823687577 20 -731.120068617964 30 587.016306884026 11 -248.99795091736 21 -601.1342301078 31 587.016306884026 12 -126.938054583664 22 -638.160694862082 32 587.016306884026 13 -126.938054583664 23 -638.160694862082 33 587.016306884026 70 13 0 3DFACE 8 body_half_outside 10 -145.428823687577 20 -731.120068617964 30 587.016306884026 11 -126.938054583664 21 -638.160694862082 31 587.016306884026 12 0.0 22 -745.443557551535 32 587.016306884026 13 0.0 23 -745.443557551535 33 587.016306884026 70 3 0 3DFACE 8 body_half_outside 10 0.0 20 -745.443557551535 30 587.016306884026 11 -126.938054583664 21 -638.160694862082 31 587.016306884026 12 0.0 22 -650.663001997455 32 587.016306884026 13 0.0 23 -650.663001997455 33 587.016306884026 70 13 0 3DFACE 8 body_half_outside 10 0.0 20 -745.443557551535 30 587.016306884026 11 0.0 21 -650.663001997455 31 587.016306884026 12 126.938054583664 22 -638.160694862082 32 587.016306884026 13 126.938054583664 23 -638.160694862082 33 587.016306884026 70 13 0 3DFACE 8 body_half_outside 10 0.0 20 -745.443557551535 30 587.016306884026 11 126.938054583664 21 -638.160694862082 31 587.016306884026 12 145.428823687577 22 -731.120068617964 32 587.016306884026 13 145.428823687577 23 -731.120068617964 33 587.016306884026 70 3 0 3DFACE 8 body_half_outside 10 145.428823687577 20 -731.120068617964 30 587.016306884026 11 126.938054583664 21 -638.160694862082 31 587.016306884026 12 248.997950917359 22 -601.1342301078 32 587.016306884026 13 248.997950917359 23 -601.1342301078 33 587.016306884026 70 13 0 3DFACE 8 body_half_outside 10 145.428823687577 20 -731.120068617964 30 587.016306884026 11 248.997950917359 21 -601.1342301078 31 587.016306884026 12 285.268899238265 22 -688.700045464263 32 587.016306884026 13 285.268899238265 23 -688.700045464263 33 587.016306884026 70 3 0 3DFACE 8 body_half_outside 10 285.268899238265 20 -688.700045464263 30 587.016306884026 11 248.997950917359 21 -601.1342301078 31 587.016306884026 12 361.48899563696 22 -541.006514010435 32 587.016306884026 13 361.48899563696 23 -541.006514010435 33 587.016306884026 70 13 0 3DFACE 8 body_half_outside 10 285.268899238265 20 -688.700045464263 30 587.016306884026 11 361.48899563696 21 -541.006514010435 31 587.016306884026 12 414.146250971868 22 -619.813665790805 32 587.016306884026 13 414.146250971868 23 -619.813665790805 33 587.016306884026 70 3 0 3DFACE 8 body_half_outside 10 414.146250971868 20 -619.813665790805 30 587.016306884026 11 361.48899563696 21 -541.006514010435 31 587.016306884026 12 460.088220979597 22 -460.088220979597 32 587.016306884026 13 460.088220979597 23 -460.088220979597 33 587.016306884026 70 13 0 3DFACE 8 body_half_outside 10 414.146250971868 20 -619.813665790805 30 587.016306884026 11 460.088220979597 21 -460.088220979597 31 587.016306884026 12 527.108194536515 22 -527.108194536515 32 587.016306884026 13 527.108194536515 23 -527.108194536515 33 587.016306884026 70 3 0 3DFACE 8 body_half_outside 10 527.108194536515 20 -527.108194536515 30 587.016306884026 11 460.088220979597 21 -460.088220979597 31 587.016306884026 12 541.006514010435 22 -361.48899563696 32 587.016306884026 13 541.006514010435 23 -361.48899563696 33 587.016306884026 70 13 0 3DFACE 8 body_half_outside 10 527.108194536515 20 -527.108194536515 30 587.016306884026 11 541.006514010435 21 -361.48899563696 31 587.016306884026 12 610.800045742856 22 -425.129378778605 32 587.016306884026 13 610.800045742856 23 -425.129378778605 33 587.016306884026 70 3 0 3DFACE 8 body_half_outside 10 610.800045742856 20 -425.129378778605 30 587.016306884026 11 541.006514010435 21 -361.48899563696 31 587.016306884026 12 601.1342301078 22 -248.997950917359 32 587.016306884026 13 601.1342301078 23 -248.997950917359 33 587.016306884026 70 13 0 3DFACE 8 body_half_outside 10 610.800045742856 20 -425.129378778605 30 587.016306884026 11 601.1342301078 21 -248.997950917359 31 587.016306884026 12 638.160694862082 22 -126.938054583664 32 587.016306884026 13 638.160694862082 23 -126.938054583664 33 587.016306884026 70 13 0 3DFACE 8 body_half_outside 10 610.800045742856 20 -425.129378778605 30 587.016306884026 11 638.160694862082 21 -126.938054583664 31 587.016306884026 12 619.813665790805 22 -414.146250971868 32 587.016306884026 13 619.813665790805 23 -414.146250971868 33 587.016306884026 70 3 0 3DFACE 8 body_half_outside 10 619.813665790805 20 -414.146250971868 30 587.016306884026 11 638.160694862082 21 -126.938054583664 31 587.016306884026 12 648.718890655847 22 -360.068378836192 32 587.016306884026 13 648.718890655847 23 -360.068378836192 33 587.016306884026 70 3 0 3DFACE 8 body_half_outside 10 648.718890655847 20 -360.068378836192 30 587.016306884026 11 638.160694862082 21 -126.938054583664 31 587.016306884026 12 650.663001997456 22 0.0 32 587.016306884026 13 650.663001997456 23 0.0 33 587.016306884026 70 13 0 3DFACE 8 body_half_outside 10 648.718890655847 20 -360.068378836192 30 587.016306884026 11 650.663001997456 21 0.0 31 587.016306884026 12 684.232404647772 22 -293.627267317059 32 587.016306884026 13 684.232404647772 23 -293.627267317059 33 587.016306884026 70 3 0 3DFACE 8 body_half_outside 10 684.232404647772 20 -293.627267317059 30 587.016306884026 11 650.663001997456 21 0.0 31 587.016306884026 12 745.443557551535 22 1.80477854883065e-13 32 587.016306884026 13 745.443557551535 23 1.80477854883065e-13 33 587.016306884026 70 13 0 3DFACE 8 body_half_outside 10 684.232404647772 20 -293.627267317059 30 587.016306884026 11 745.443557551535 21 1.80477854883065e-13 31 587.016306884026 12 688.700045464263 22 -285.268899238265 32 587.016306884026 13 688.700045464263 23 -285.268899238265 33 587.016306884026 70 3 0 3DFACE 8 body_half_outside 10 688.700045464263 20 -285.268899238265 30 587.016306884026 11 745.443557551535 21 1.80477854883065e-13 31 587.016306884026 12 707.864018296911 22 -222.093747280928 32 587.016306884026 13 707.864018296911 23 -222.093747280928 33 587.016306884026 70 3 0 3DFACE 8 body_half_outside 10 707.864018296911 20 -222.093747280928 30 587.016306884026 11 745.443557551535 21 1.80477854883065e-13 31 587.016306884026 12 731.120068617964 22 -145.428823687577 32 587.016306884026 13 731.120068617964 23 -145.428823687577 33 587.016306884026 70 1 0 3DFACE 8 body_half_outside 10 -782.993203577332 20 -324.326404167689 30 796.153149972084 11 -694.940121314314 21 -464.344143695271 31 738.078199114136 12 -704.67526609701 22 -470.84895947612 32 796.153149972084 13 -704.67526609701 23 -470.84895947612 33 796.153149972084 70 1 0 3DFACE 8 body_half_outside 10 -694.940121314314 20 -464.344143695271 30 738.078199114136 11 -782.993203577332 21 -324.326404167689 31 796.153149972084 12 -772.176090266528 22 -319.845809128627 32 738.078199114136 13 -772.176090266528 23 -319.845809128627 33 738.078199114136 70 1 0 3DFACE 8 body_half_outside 10 1051.79710945546 20 -209.215453044867 30 1922.19277204157 11 1079.96854760957 21 1.80477854883065e-13 31 2011.5925230317 12 1059.21725479392 22 -210.691411720441 32 2011.5925230317 13 1059.21725479392 23 -210.691411720441 33 2011.5925230317 70 1 0 3DFACE 8 body_half_outside 10 1079.96854760957 20 1.80477854883065e-13 30 2011.5925230317 11 1051.79710945546 21 -209.215453044867 31 1922.19277204157 12 1072.40303302985 22 1.80477854883065e-13 32 1922.19277204157 13 1072.40303302985 23 1.80477854883065e-13 33 1922.19277204157 70 1 0 3DFACE 8 body_half_outside 10 1.80477854883065e-13 20 -1078.12323678805 30 1989.78695697206 11 -209.215453044867 21 -1051.79710945546 31 1922.19277204157 12 1.80477854883065e-13 22 -1072.40303302985 32 1922.19277204157 13 1.80477854883065e-13 23 -1072.40303302985 33 1922.19277204157 70 1 0 3DFACE 8 body_half_outside 10 -209.215453044867 20 -1051.79710945546 30 1922.19277204157 11 1.80477854883065e-13 21 -1078.12323678805 31 1989.78695697206 12 -1.4681606386561 22 -1077.9663986116 32 1989.64235577041 13 -1.4681606386561 23 -1077.9663986116 33 1989.64235577041 70 13 0 3DFACE 8 body_half_outside 10 -209.215453044867 20 -1051.79710945546 30 1922.19277204157 11 -10.2481189704998 21 -1077.17482828484 31 1990.50710618793 12 -210.691411720441 22 -1059.21725479392 32 2011.5925230317 13 -210.691411720441 23 -1059.21725479392 33 2011.5925230317 70 3 0 3DFACE 8 body_half_outside 10 -10.2481189704998 20 -1077.17482828484 30 1990.50710618793 11 -209.215453044867 21 -1051.79710945546 31 1922.19277204157 12 -1.4681606386561 22 -1077.9663986116 32 1989.64235577041 13 -1.4681606386561 23 -1077.9663986116 33 1989.64235577041 70 3 0 3DFACE 8 body_half_outside 10 -210.691411720441 20 -1059.21725479392 30 2011.5925230317 11 -10.2481189704998 21 -1077.17482828484 31 1990.50710618793 12 -18.6906684275082 22 -1076.56003774335 32 1993.0681255669 13 -18.6906684275082 23 -1076.56003774335 33 1993.0681255669 70 13 0 3DFACE 8 body_half_outside 10 -210.691411720441 20 -1059.21725479392 30 2011.5925230317 11 -18.6906684275082 21 -1076.56003774335 31 1993.0681255669 12 -26.4713665686843 22 -1076.14565304285 32 1997.22699536883 13 -26.4713665686843 23 -1076.14565304285 33 1997.22699536883 70 13 0 3DFACE 8 body_half_outside 10 -210.691411720441 20 -1059.21725479392 30 2011.5925230317 11 -26.4713665686843 21 -1076.14565304285 31 1997.22699536883 12 -33.2912055279292 22 -1075.947598755 32 2002.82389255955 13 -33.2912055279292 23 -1075.947598755 33 2002.82389255955 70 13 0 3DFACE 8 body_half_outside 10 -210.691411720441 20 -1059.21725479392 30 2011.5925230317 11 -33.2912055279292 21 -1075.947598755 31 2002.82389255955 12 -38.8881027186482 22 -1075.973485995 32 2009.6437315188 13 -38.8881027186482 23 -1075.973485995 33 2009.6437315188 70 13 0 3DFACE 8 body_half_outside 10 -210.691411720441 20 -1059.21725479392 30 2011.5925230317 11 -38.8881027186482 21 -1075.973485995 31 2009.6437315188 12 -39.9297534839436 22 -1076.03581015323 32 2011.5925230317 13 -39.9297534839436 23 -1076.03581015323 33 2011.5925230317 70 1 0 3DFACE 8 body_half_outside 10 42.6716706222413 20 -1075.76575488639 30 2025.86697911698 11 40.110651243267 21 -976.014544733984 31 2017.42442965997 12 40.1106512432667 22 -1076.01799327905 32 2017.42442965997 13 40.1106512432667 23 -1076.01799327905 33 2017.42442965997 70 1 0 3DFACE 8 body_half_outside 10 40.110651243267 20 -976.014544733984 30 2017.42442965997 11 42.6716706222413 21 -1075.76575488639 31 2025.86697911698 12 42.6716706222411 22 -976.267680774437 32 2025.86697911698 13 42.6716706222411 23 -976.267680774437 33 2025.86697911698 70 1 0 3DFACE 8 body_half_outside 10 784.574341950659 20 -324.981333125909 30 855.37186879426 11 699.168033082722 21 -467.169144021929 31 914.026066884025 12 706.098253038493 22 -471.799768952456 32 855.37186879426 13 706.098253038493 23 -471.799768952456 33 855.37186879426 70 1 0 3DFACE 8 body_half_outside 10 699.168033082722 20 -467.169144021929 30 914.026066884025 11 784.574341950659 21 -324.981333125909 31 855.37186879426 12 776.87389411925 22 -321.791703197793 32 914.026066884025 13 776.87389411925 23 -321.791703197793 33 914.026066884025 70 1 0 3DFACE 8 body_half_outside 10 -794.166563605455 20 1.80477854883065e-13 30 1614.7610800213 11 -925.063957882084 21 -94.0698816812515 31 1614.7610800213 12 -934.329032542513 22 3.60955709766131e-13 32 1614.7610800213 13 -934.329032542513 23 3.60955709766131e-13 33 1614.7610800213 70 1 0 3DFACE 8 body_half_outside 10 -925.063957882084 20 -94.0698816812515 30 1614.7610800213 11 -794.166563605455 21 1.80477854883065e-13 31 1614.7610800213 12 -916.376162171087 22 -182.278551827736 32 1614.7610800213 13 -916.376162171087 23 -182.278551827736 33 1614.7610800213 70 3 0 3DFACE 8 body_half_outside 10 -916.376162171087 20 -182.278551827736 30 1614.7610800213 11 -794.166563605455 21 1.80477854883065e-13 31 1614.7610800213 12 -914.651018607606 22 -187.965588003526 32 1614.7610800213 13 -914.651018607606 23 -187.965588003526 33 1614.7610800213 70 3 0 3DFACE 8 body_half_outside 10 -914.651018607606 20 -187.965588003526 30 1614.7610800213 11 -794.166563605455 21 1.80477854883065e-13 31 1614.7610800213 12 -887.227323624272 22 -278.369394820258 32 1614.7610800213 13 -887.227323624272 23 -278.369394820258 33 1614.7610800213 70 3 0 3DFACE 8 body_half_outside 10 -887.227323624272 20 -278.369394820258 30 1614.7610800213 11 -794.166563605455 21 1.80477854883065e-13 31 1614.7610800213 12 -863.207469797099 22 -357.552241131722 32 1614.7610800213 13 -863.207469797099 23 -357.552241131722 33 1614.7610800213 70 3 0 3DFACE 8 body_half_outside 10 -863.207469797099 20 -357.552241131722 30 1614.7610800213 11 -794.166563605455 21 1.80477854883065e-13 31 1614.7610800213 12 -857.607798337338 22 -368.028489582189 32 1614.7610800213 13 -857.607798337338 23 -368.028489582189 33 1614.7610800213 70 3 0 3DFACE 8 body_half_outside 10 -857.607798337338 20 -368.028489582189 30 1614.7610800213 11 -794.166563605455 21 1.80477854883065e-13 31 1614.7610800213 12 -813.095615539802 22 -451.304926317894 32 1614.7610800213 13 -813.095615539802 23 -451.304926317894 33 1614.7610800213 70 3 0 3DFACE 8 body_half_outside 10 -813.095615539802 20 -451.304926317894 30 1614.7610800213 11 -794.166563605455 21 1.80477854883065e-13 31 1614.7610800213 12 -776.866198451135 22 -519.085398326623 32 1614.7610800213 13 -776.866198451135 23 -519.085398326623 33 1614.7610800213 70 3 0 3DFACE 8 body_half_outside 10 -776.866198451135 20 -519.085398326623 30 1614.7610800213 11 -794.166563605455 21 1.80477854883065e-13 31 1614.7610800213 12 -778.906875772646 22 -154.93421062823 32 1614.7610800213 13 -778.906875772646 23 -154.93421062823 33 1614.7610800213 70 13 0 3DFACE 8 body_half_outside 10 -776.866198451135 20 -519.085398326623 30 1614.7610800213 11 -778.906875772646 21 -154.93421062823 31 1614.7610800213 12 -733.714233519903 22 -303.914386430124 32 1614.7610800213 13 -733.714233519903 23 -303.914386430124 33 1614.7610800213 70 13 0 3DFACE 8 body_half_outside 10 -776.866198451135 20 -519.085398326623 30 1614.7610800213 11 -733.714233519903 21 -303.914386430124 31 1614.7610800213 12 -765.568613986399 22 -532.851544827532 32 1614.7610800213 13 -765.568613986399 23 -532.851544827532 33 1614.7610800213 70 3 0 3DFACE 8 body_half_outside 10 -765.568613986399 20 -532.851544827532 30 1614.7610800213 11 -733.714233519903 21 -303.914386430124 31 1614.7610800213 12 -705.689426216297 22 -605.814546234746 32 1614.7610800213 13 -705.689426216297 23 -605.814546234746 33 1614.7610800213 70 3 0 3DFACE 8 body_half_outside 10 -705.689426216297 20 -605.814546234746 30 1614.7610800213 11 -733.714233519903 21 -303.914386430124 31 1614.7610800213 12 -660.325364744672 22 -441.215302798659 32 1614.7610800213 13 -660.325364744672 23 -441.215302798659 33 1614.7610800213 70 13 0 3DFACE 8 body_half_outside 10 -705.689426216297 20 -605.814546234746 30 1614.7610800213 11 -660.325364744672 21 -441.215302798659 31 1614.7610800213 12 -660.670394770277 22 -660.670394770277 32 1614.7610800213 13 -660.670394770277 23 -660.670394770277 33 1614.7610800213 70 3 0 3DFACE 8 body_half_outside 10 -660.670394770277 20 -660.670394770277 30 1614.7610800213 11 -660.325364744672 21 -441.215302798659 31 1614.7610800213 12 -642.32525459148 22 -675.725862229795 32 1614.7610800213 13 -642.32525459148 23 -675.725862229795 33 1614.7610800213 70 3 0 3DFACE 8 body_half_outside 10 -642.32525459148 20 -675.725862229795 30 1614.7610800213 11 -660.325364744672 21 -441.215302798659 31 1614.7610800213 12 -561.560562517035 22 -561.560562517035 32 1614.7610800213 13 -561.560562517035 23 -561.560562517035 33 1614.7610800213 70 13 0 3DFACE 8 body_half_outside 10 -642.32525459148 20 -675.725862229795 30 1614.7610800213 11 -561.560562517035 21 -561.560562517035 31 1614.7610800213 12 -569.385752125536 22 -735.58576491719 32 1614.7610800213 13 -569.385752125536 23 -735.58576491719 33 1614.7610800213 70 3 0 3DFACE 8 body_half_outside 10 -569.385752125536 20 -735.58576491719 30 1614.7610800213 11 -561.560562517035 21 -561.560562517035 31 1614.7610800213 12 -519.085398326623 22 -776.866198451135 32 1614.7610800213 13 -519.085398326623 23 -776.866198451135 33 1614.7610800213 70 3 0 3DFACE 8 body_half_outside 10 -519.085398326623 20 -776.866198451135 30 1614.7610800213 11 -561.560562517035 21 -561.560562517035 31 1614.7610800213 12 -441.215302798659 22 -660.325364744672 32 1614.7610800213 13 -441.215302798659 23 -660.325364744672 33 1614.7610800213 70 13 0 3DFACE 8 body_half_outside 10 -519.085398326623 20 -776.866198451135 30 1614.7610800213 11 -441.215302798659 21 -660.325364744672 31 1614.7610800213 12 -492.936329267328 22 -790.843167058075 32 1614.7610800213 13 -492.936329267328 23 -790.843167058075 33 1614.7610800213 70 3 0 3DFACE 8 body_half_outside 10 -492.936329267328 20 -790.843167058075 30 1614.7610800213 11 -441.215302798659 21 -660.325364744672 31 1614.7610800213 12 -409.740279224824 22 -835.312382272912 32 1614.7610800213 13 -409.740279224824 23 -835.312382272912 33 1614.7610800213 70 3 0 3DFACE 8 body_half_outside 10 -409.740279224824 20 -835.312382272912 30 1614.7610800213 11 -441.215302798659 21 -660.325364744672 31 1614.7610800213 12 -303.914386430124 22 -733.714233519903 32 1614.7610800213 13 -303.914386430124 23 -733.714233519903 33 1614.7610800213 70 13 0 3DFACE 8 body_half_outside 10 -409.740279224824 20 -835.312382272912 30 1614.7610800213 11 -303.914386430124 21 -733.714233519903 31 1614.7610800213 12 -357.552241131723 22 -863.207469797099 32 1614.7610800213 13 -357.552241131723 23 -863.207469797099 33 1614.7610800213 70 3 0 3DFACE 8 body_half_outside 10 -357.552241131723 20 -863.207469797099 30 1614.7610800213 11 -303.914386430124 21 -733.714233519903 31 1614.7610800213 12 -323.520317681463 22 -873.530940912515 32 1614.7610800213 13 -323.520317681463 23 -873.530940912515 33 1614.7610800213 70 3 0 3DFACE 8 body_half_outside 10 -323.520317681463 20 -873.530940912515 30 1614.7610800213 11 -303.914386430124 21 -733.714233519903 31 1614.7610800213 12 -233.261861972698 22 -900.910544119288 32 1614.7610800213 13 -233.261861972698 23 -900.910544119288 33 1614.7610800213 70 3 0 3DFACE 8 body_half_outside 10 -233.261861972698 20 -900.910544119288 30 1614.7610800213 11 -303.914386430124 21 -733.714233519903 31 1614.7610800213 12 -154.93421062823 22 -778.906875772646 32 1614.7610800213 13 -154.93421062823 23 -778.906875772646 33 1614.7610800213 70 13 0 3DFACE 8 body_half_outside 10 -233.261861972698 20 -900.910544119288 30 1614.7610800213 11 -154.93421062823 21 -778.906875772646 31 1614.7610800213 12 -182.278551827737 22 -916.376162171087 32 1614.7610800213 13 -182.278551827737 23 -916.376162171087 33 1614.7610800213 70 3 0 3DFACE 8 body_half_outside 10 -182.278551827737 20 -916.376162171087 30 1614.7610800213 11 -154.93421062823 21 -778.906875772646 31 1614.7610800213 12 -141.006394822338 22 -920.441114834126 32 1614.7610800213 13 -141.006394822338 23 -920.441114834126 33 1614.7610800213 70 3 0 3DFACE 8 body_half_outside 10 -141.006394822338 20 -920.441114834126 30 1614.7610800213 11 -154.93421062823 21 -778.906875772646 31 1614.7610800213 12 0.0 22 -794.166563605455 32 1614.7610800213 13 0.0 23 -794.166563605455 33 1614.7610800213 70 13 0 3DFACE 8 body_half_outside 10 -141.006394822338 20 -920.441114834126 30 1614.7610800213 11 0.0 21 -794.166563605455 31 1614.7610800213 12 -47.1482966446679 22 -929.685330640079 32 1614.7610800213 13 -47.1482966446679 23 -929.685330640079 33 1614.7610800213 70 3 0 3DFACE 8 body_half_outside 10 -47.1482966446679 20 -929.685330640079 30 1614.7610800213 11 0.0 21 -794.166563605455 31 1614.7610800213 12 1.80477854883065e-13 22 -934.329032542513 32 1614.7610800213 13 1.80477854883065e-13 23 -934.329032542513 33 1614.7610800213 70 3 0 3DFACE 8 body_half_outside 10 1.80477854883065e-13 20 -934.329032542513 30 1614.7610800213 11 0.0 21 -794.166563605455 31 1614.7610800213 12 154.93421062823 22 -778.906875772646 32 1614.7610800213 13 154.93421062823 23 -778.906875772646 33 1614.7610800213 70 13 0 3DFACE 8 body_half_outside 10 1.80477854883065e-13 20 -934.329032542513 30 1614.7610800213 11 154.93421062823 21 -778.906875772646 31 1614.7610800213 12 47.1483359530928 22 -929.685326768537 32 1614.7610800213 13 47.1483359530928 23 -929.685326768537 33 1614.7610800213 70 3 0 3DFACE 8 body_half_outside 10 47.1483359530928 20 -929.685326768537 30 1614.7610800213 11 154.93421062823 21 -778.906875772646 31 1614.7610800213 12 141.006388747634 22 -920.441115432432 32 1614.7610800213 13 141.006388747634 23 -920.441115432432 33 1614.7610800213 70 3 0 3DFACE 8 body_half_outside 10 141.006388747634 20 -920.441115432432 30 1614.7610800213 11 154.93421062823 21 -778.906875772646 31 1614.7610800213 12 182.278551827736 22 -916.376162171087 32 1614.7610800213 13 182.278551827736 23 -916.376162171087 33 1614.7610800213 70 3 0 3DFACE 8 body_half_outside 10 182.278551827736 20 -916.376162171087 30 1614.7610800213 11 154.93421062823 21 -778.906875772646 31 1614.7610800213 12 303.914386430124 22 -733.714233519903 32 1614.7610800213 13 303.914386430124 23 -733.714233519903 33 1614.7610800213 70 13 0 3DFACE 8 body_half_outside 10 182.278551827736 20 -916.376162171087 30 1614.7610800213 11 303.914386430124 21 -733.714233519903 31 1614.7610800213 12 233.261898600639 22 -900.910533008324 32 1614.7610800213 13 233.261898600639 23 -900.910533008324 33 1614.7610800213 70 3 0 3DFACE 8 body_half_outside 10 233.261898600639 20 -900.910533008324 30 1614.7610800213 11 303.914386430124 21 -733.714233519903 31 1614.7610800213 12 323.520353196241 22 -873.530930139225 32 1614.7610800213 13 323.520353196241 23 -873.530930139225 33 1614.7610800213 70 3 0 3DFACE 8 body_half_outside 10 323.520353196241 20 -873.530930139225 30 1614.7610800213 11 303.914386430124 21 -733.714233519903 31 1614.7610800213 12 441.215302798659 22 -660.325364744672 32 1614.7610800213 13 441.215302798659 23 -660.325364744672 33 1614.7610800213 70 13 0 3DFACE 8 body_half_outside 10 323.520353196241 20 -873.530930139225 30 1614.7610800213 11 441.215302798659 21 -660.325364744672 31 1614.7610800213 12 357.552241131722 22 -863.2074697971 32 1614.7610800213 13 357.552241131722 23 -863.2074697971 33 1614.7610800213 70 3 0 3DFACE 8 body_half_outside 10 357.552241131722 20 -863.2074697971 30 1614.7610800213 11 441.215302798659 21 -660.325364744672 31 1614.7610800213 12 409.740310523407 22 -835.312365543471 32 1614.7610800213 13 409.740310523407 23 -835.312365543471 33 1614.7610800213 70 3 0 3DFACE 8 body_half_outside 10 409.740310523407 20 -835.312365543471 30 1614.7610800213 11 441.215302798659 21 -660.325364744672 31 1614.7610800213 12 492.936358899678 22 -790.843151219254 32 1614.7610800213 13 492.936358899678 23 -790.843151219254 33 1614.7610800213 70 3 0 3DFACE 8 body_half_outside 10 492.936358899678 20 -790.843151219254 30 1614.7610800213 11 441.215302798659 21 -660.325364744672 31 1614.7610800213 12 561.560562517035 22 -561.560562517035 32 1614.7610800213 13 561.560562517035 23 -561.560562517035 33 1614.7610800213 70 13 0 3DFACE 8 body_half_outside 10 492.936358899678 20 -790.843151219254 30 1614.7610800213 11 561.560562517035 21 -561.560562517035 31 1614.7610800213 12 519.085398326623 22 -776.866198451135 32 1614.7610800213 13 519.085398326623 23 -776.866198451135 33 1614.7610800213 70 3 0 3DFACE 8 body_half_outside 10 519.085398326623 20 -776.866198451135 30 1614.7610800213 11 561.560562517035 21 -561.560562517035 31 1614.7610800213 12 569.38577628374 22 -735.585745091064 32 1614.7610800213 13 569.38577628374 23 -735.585745091064 33 1614.7610800213 70 3 0 3DFACE 8 body_half_outside 10 569.38577628374 20 -735.585745091064 30 1614.7610800213 11 561.560562517035 21 -561.560562517035 31 1614.7610800213 12 660.325364744673 22 -441.215302798659 32 1614.7610800213 13 660.325364744673 23 -441.215302798659 33 1614.7610800213 70 13 0 3DFACE 8 body_half_outside 10 569.38577628374 20 -735.585745091064 30 1614.7610800213 11 660.325364744673 21 -441.215302798659 31 1614.7610800213 12 642.325276783758 22 -675.725844017062 32 1614.7610800213 13 642.325276783758 23 -675.725844017062 33 1614.7610800213 70 3 0 3DFACE 8 body_half_outside 10 642.325276783758 20 -675.725844017062 30 1614.7610800213 11 660.325364744673 21 -441.215302798659 31 1614.7610800213 12 660.670394770277 22 -660.670394770277 32 1614.7610800213 13 660.670394770277 23 -660.670394770277 33 1614.7610800213 70 3 0 3DFACE 8 body_half_outside 10 660.670394770277 20 -660.670394770277 30 1614.7610800213 11 660.325364744673 21 -441.215302798659 31 1614.7610800213 12 733.714233519903 22 -303.914386430124 32 1614.7610800213 13 733.714233519903 23 -303.914386430124 33 1614.7610800213 70 13 0 3DFACE 8 body_half_outside 10 660.670394770277 20 -660.670394770277 30 1614.7610800213 11 733.714233519903 21 -303.914386430124 31 1614.7610800213 12 705.689442544718 22 -605.814526338507 32 1614.7610800213 13 705.689442544718 23 -605.814526338507 33 1614.7610800213 70 3 0 3DFACE 8 body_half_outside 10 705.689442544718 20 -605.814526338507 30 1614.7610800213 11 733.714233519903 21 -303.914386430124 31 1614.7610800213 12 765.568628348261 22 -532.851527327553 32 1614.7610800213 13 765.568628348261 23 -532.851527327553 33 1614.7610800213 70 3 0 3DFACE 8 body_half_outside 10 765.568628348261 20 -532.851527327553 30 1614.7610800213 11 733.714233519903 21 -303.914386430124 31 1614.7610800213 12 778.906875772646 22 -154.93421062823 32 1614.7610800213 13 778.906875772646 23 -154.93421062823 33 1614.7610800213 70 13 0 3DFACE 8 body_half_outside 10 765.568628348261 20 -532.851527327553 30 1614.7610800213 11 778.906875772646 21 -154.93421062823 31 1614.7610800213 12 776.866198451135 22 -519.085398326623 32 1614.7610800213 13 776.866198451135 23 -519.085398326623 33 1614.7610800213 70 3 0 3DFACE 8 body_half_outside 10 776.866198451135 20 -519.085398326623 30 1614.7610800213 11 778.906875772646 21 -154.93421062823 31 1614.7610800213 12 813.09562491145 22 -451.304908784773 32 1614.7610800213 13 813.09562491145 23 -451.304908784773 33 1614.7610800213 70 3 0 3DFACE 8 body_half_outside 10 813.09562491145 20 -451.304908784773 30 1614.7610800213 11 778.906875772646 21 -154.93421062823 31 1614.7610800213 12 794.166563605455 22 1.80477854883065e-13 32 1614.7610800213 13 794.166563605455 23 1.80477854883065e-13 33 1614.7610800213 70 13 0 3DFACE 8 body_half_outside 10 813.09562491145 20 -451.304908784773 30 1614.7610800213 11 794.166563605455 21 1.80477854883065e-13 31 1614.7610800213 12 934.329032542513 22 1.80477854883065e-13 32 1614.7610800213 13 934.329032542513 23 1.80477854883065e-13 33 1614.7610800213 70 13 0 3DFACE 8 body_half_outside 10 813.09562491145 20 -451.304908784773 30 1614.7610800213 11 934.329032542513 21 1.80477854883065e-13 31 1614.7610800213 12 857.607805708123 22 -368.02847579242 32 1614.7610800213 13 857.607805708123 23 -368.02847579242 33 1614.7610800213 70 3 0 3DFACE 8 body_half_outside 10 857.607805708123 20 -368.02847579242 30 1614.7610800213 11 934.329032542513 21 1.80477854883065e-13 31 1614.7610800213 12 863.207469797099 22 -357.552241131722 32 1614.7610800213 13 863.207469797099 23 -357.552241131722 33 1614.7610800213 70 3 0 3DFACE 8 body_half_outside 10 863.207469797099 20 -357.552241131722 30 1614.7610800213 11 934.329032542513 21 1.80477854883065e-13 31 1614.7610800213 12 887.227327057414 22 -278.369383502706 32 1614.7610800213 13 887.227327057414 23 -278.369383502706 33 1614.7610800213 70 3 0 3DFACE 8 body_half_outside 10 887.227327057414 20 -278.369383502706 30 1614.7610800213 11 934.329032542513 21 1.80477854883065e-13 31 1614.7610800213 12 914.651020925795 22 -187.965580361484 32 1614.7610800213 13 914.651020925795 23 -187.965580361484 33 1614.7610800213 70 3 0 3DFACE 8 body_half_outside 10 914.651020925795 20 -187.965580361484 30 1614.7610800213 11 934.329032542513 21 1.80477854883065e-13 31 1614.7610800213 12 925.063958273825 22 -94.0698777038381 32 1614.7610800213 13 925.063958273825 23 -94.0698777038381 33 1614.7610800213 70 13 0 3DFACE 8 body_half_outside 10 914.651020925795 20 -187.965580361484 30 1614.7610800213 11 925.063958273825 21 -94.0698777038381 31 1614.7610800213 12 916.376162171087 22 -182.278551827737 32 1614.7610800213 13 916.376162171087 23 -182.278551827737 33 1614.7610800213 70 1 0 3DFACE 8 body_half_outside 10 694.940121314314 20 -464.344143695271 30 738.078199114136 11 782.993203577332 21 -324.326404167689 31 796.153149972084 12 704.67526609701 22 -470.84895947612 32 796.153149972084 13 704.67526609701 23 -470.84895947612 33 796.153149972084 70 1 0 3DFACE 8 body_half_outside 10 782.993203577332 20 -324.326404167689 30 796.153149972084 11 694.940121314314 21 -464.344143695271 31 738.078199114136 12 772.176090266528 22 -319.845809128627 32 738.078199114136 13 772.176090266528 23 -319.845809128627 33 738.078199114136 70 1 0 3DFACE 8 body_half_outside 10 -303.914386430124 20 -733.714233519903 30 1614.7610800213 11 -389.246833055444 21 -793.533661525914 31 1427.8983600213 12 -339.669019965462 22 -820.033554718597 32 1427.8983600213 13 -339.669019965462 23 -820.033554718597 33 1427.8983600213 70 1 0 3DFACE 8 body_half_outside 10 -389.246833055444 20 -793.533661525914 30 1427.8983600213 11 -303.914386430124 21 -733.714233519903 31 1614.7610800213 12 -468.281766857471 22 -751.288609279597 32 1427.8983600213 13 -468.281766857471 23 -751.288609279597 33 1427.8983600213 70 3 0 3DFACE 8 body_half_outside 10 -468.281766857471 20 -751.288609279597 30 1427.8983600213 11 -441.215302798659 21 -660.325364744672 31 1614.7610800213 12 -493.122985245198 22 -738.010701420772 32 1427.8983600213 13 -493.122985245198 23 -738.010701420772 33 1427.8983600213 70 1 0 3DFACE 8 body_half_outside 10 -441.215302798659 20 -660.325364744672 30 1614.7610800213 11 -468.281766857471 21 -751.288609279597 31 1427.8983600213 12 -303.914386430124 22 -733.714233519903 32 1614.7610800213 13 -303.914386430124 23 -733.714233519903 33 1614.7610800213 70 3 0 3DFACE 8 body_half_outside 10 30.354884250617 20 -1076.33078010212 30 2066.4699823381 11 35.9517814413358 21 -976.024878397508 31 2059.65014337886 12 35.9517814413365 22 -1076.35666734212 32 2059.65014337885 13 35.9517814413365 23 -1076.35666734212 33 2059.65014337885 70 1 0 3DFACE 8 body_half_outside 10 35.9517814413358 20 -976.024878397508 30 2059.65014337886 11 30.354884250617 21 -1076.33078010212 31 2066.4699823381 12 30.354884250617 22 -976.1678863314 32 2066.4699823381 13 30.354884250617 23 -976.1678863314 33 2066.4699823381 70 1 0 3DFACE 8 body_half_outside 10 23.5350452913725 20 -976.504549306342 30 2072.06687952882 11 30.354884250617 21 -1076.33078010212 31 2066.4699823381 12 23.5350452913723 22 -1076.52883438997 32 2072.06687952882 13 23.5350452913723 23 -1076.52883438997 33 2072.06687952882 70 1 0 3DFACE 8 body_half_outside 10 30.354884250617 20 -1076.33078010212 30 2066.4699823381 11 23.5350452913725 21 -976.504549306342 31 2072.06687952882 12 30.354884250617 22 -976.1678863314 32 2066.4699823381 13 30.354884250617 23 -976.1678863314 33 2066.4699823381 70 1 0 3DFACE 8 body_half_outside 10 -758.928832717995 20 -874.671572316599 30 1963.87063213502 11 -785.140115231108 21 -848.157192786392 31 1978.73092447164 12 -801.544845731016 22 -831.814429411314 32 1978.70958937363 13 -801.544845731016 23 -831.814429411314 33 1978.70958937363 70 13 0 3DFACE 8 body_half_outside 10 -785.140115231108 20 -848.157192786392 30 1978.73092447164 11 -758.928832717995 21 -874.671572316599 31 1963.87063213502 12 -741.432257601186 22 -891.447302299009 32 1988.14599297097 13 -741.432257601186 23 -891.447302299009 33 1988.14599297097 70 13 0 3DFACE 8 body_half_outside 10 -785.140115231108 20 -848.157192786392 30 1978.73092447164 11 -741.432257601186 21 -891.447302299009 31 1988.14599297097 12 -769.870311262695 22 -863.130130350016 32 1987.61043910797 13 -769.870311262695 23 -863.130130350016 33 1987.61043910797 70 3 0 3DFACE 8 body_half_outside 10 -769.870311262695 20 -863.130130350016 30 1987.61043910797 11 -741.432257601186 21 -891.447302299009 31 1988.14599297097 12 -758.060123058849 22 -874.453748088142 32 2003.99630767223 13 -758.060123058849 23 -874.453748088142 33 2003.99630767223 70 3 0 3DFACE 8 body_half_outside 10 -758.060123058849 20 -874.453748088142 30 2003.99630767223 11 -741.432257601186 21 -891.447302299009 31 1988.14599297097 12 -731.724734127308 22 -900.26267972249 32 2019.84617451401 13 -731.724734127308 23 -900.26267972249 33 2019.84617451401 70 13 0 3DFACE 8 body_half_outside 10 -758.060123058849 20 -874.453748088142 30 2003.99630767223 11 -731.724734127308 21 -900.26267972249 31 2019.84617451401 12 -751.507544713982 22 -880.404127848991 32 2025.39393021379 13 -751.507544713982 23 -880.404127848991 33 2025.39393021379 70 3 0 3DFACE 8 body_half_outside 10 -751.507544713982 20 -880.404127848991 30 2025.39393021379 11 -731.724734127308 21 -900.26267972249 31 2019.84617451401 12 -731.284144746345 22 -899.775643285913 32 2054.14511148709 13 -731.284144746345 23 -899.775643285913 33 2054.14511148709 70 13 0 3DFACE 8 body_half_outside 10 -751.507544713982 20 -880.404127848991 30 2025.39393021379 11 -731.284144746345 21 -899.775643285913 31 2054.14511148709 12 -751.210146881832 22 -880.075378254302 32 2048.54571267062 13 -751.210146881832 23 -880.075378254302 33 2048.54571267062 70 3 0 3DFACE 8 body_half_outside 10 -751.210146881832 20 -880.075378254302 30 2048.54571267062 11 -731.284144746345 21 -899.775643285913 31 2054.14511148709 12 -757.213205686422 22 -873.517548449742 32 2069.9270060351 13 -757.213205686422 23 -873.517548449742 33 2069.9270060351 70 3 0 3DFACE 8 body_half_outside 10 -757.213205686422 20 -873.517548449742 30 2069.9270060351 11 -731.284144746345 21 -899.775643285913 31 2054.14511148709 12 -740.177565197592 22 -890.060339871748 32 2085.82110165668 13 -740.177565197592 23 -890.060339871748 33 2085.82110165668 70 13 0 3DFACE 8 body_half_outside 10 -757.213205686422 20 -873.517548449742 30 2069.9270060351 11 -740.177565197592 21 -890.060339871748 31 2085.82110165668 12 -768.602809842621 22 -861.72900857618 32 2086.28270221439 13 -768.602809842621 23 -861.72900857618 33 2086.28270221439 70 3 0 3DFACE 8 body_half_outside 10 -768.602809842621 20 -861.72900857618 30 2086.28270221439 11 -740.177565197592 21 -890.060339871748 31 2085.82110165668 12 -757.051052836406 22 -872.59583635536 32 2110.05176266305 13 -757.051052836406 23 -872.59583635536 33 2110.05176266305 70 13 0 3DFACE 8 body_half_outside 10 -768.602809842621 20 -861.72900857618 30 2086.28270221439 11 -757.051052836406 21 -872.59583635536 31 2110.05176266305 12 -783.644995364665 22 -846.504456965985 32 2095.12279472996 13 -783.644995364665 23 -846.504456965985 33 2095.12279472996 70 3 0 3DFACE 8 body_half_outside 10 -783.644995364665 20 -846.504456965985 30 2095.12279472996 11 -757.051052836406 21 -872.59583635536 31 2110.05176266305 12 -826.261008377686 22 -803.647314060702 32 2109.96175196855 13 -826.261008377686 23 -803.647314060702 33 2109.96175196855 70 15 0 3DFACE 8 body_half_outside 10 -826.261008377686 20 -803.647314060702 30 2109.96175196855 11 -757.051052836406 21 -872.59583635536 31 2110.05176266305 12 -803.639076572628 22 -825.829443784589 32 2123.11658846682 13 -803.639076572628 23 -825.829443784589 33 2123.11658846682 70 3 0 3DFACE 8 body_half_outside 10 -803.639076572628 20 -825.829443784589 30 2123.11658846682 11 -757.051052836406 21 -872.59583635536 31 2110.05176266305 12 -779.335772128321 22 -850.040945080999 32 2123.14819601944 13 -779.335772128321 23 -850.040945080999 33 2123.14819601944 70 1 0 3DFACE 8 body_half_outside 10 -781.550764523053 20 -852.489442592712 30 1950.71579563676 11 -828.138788259274 21 -805.723050021943 31 1963.78062144053 12 -805.85406896736 22 -828.277941296301 32 1950.68418808414 13 -805.85406896736 23 -828.277941296301 33 1950.68418808414 70 1 0 3DFACE 8 body_half_outside 10 -828.138788259274 20 -805.723050021943 30 1963.78062144053 11 -781.550764523053 21 -852.489442592712 31 1950.71579563676 12 -758.928832717995 22 -874.671572316599 32 1963.87063213502 13 -758.928832717995 23 -874.671572316599 33 1963.87063213502 70 13 0 3DFACE 8 body_half_outside 10 -828.138788259274 20 -805.723050021943 30 1963.78062144053 11 -758.928832717995 21 -874.671572316599 31 1963.87063213502 12 -845.012275898089 22 -788.258546505553 32 1988.01128244689 13 -845.012275898089 23 -788.258546505553 33 1988.01128244689 70 3 0 3DFACE 8 body_half_outside 10 -845.012275898089 20 -788.258546505553 30 1988.01128244689 11 -758.928832717995 21 -874.671572316599 31 1963.87063213502 12 -801.544845731016 22 -831.814429411314 32 1978.70958937363 13 -801.544845731016 23 -831.814429411314 33 1978.70958937363 70 15 0 3DFACE 8 body_half_outside 10 -845.012275898089 20 -788.258546505553 30 1988.01128244689 11 -801.544845731016 21 -831.814429411314 31 1978.70958937363 12 -816.587031253059 22 -816.589877801121 32 1987.54968188919 13 -816.587031253059 23 -816.589877801121 33 1987.54968188919 70 13 0 3DFACE 8 body_half_outside 10 -845.012275898089 20 -788.258546505553 30 1988.01128244689 11 -816.587031253059 21 -816.589877801121 31 1987.54968188919 12 -827.976635409257 22 -804.801337927561 32 2003.90537806848 13 -827.976635409257 23 -804.801337927561 33 2003.90537806848 70 13 0 3DFACE 8 body_half_outside 10 -845.012275898089 20 -788.258546505553 30 1988.01128244689 11 -827.976635409257 21 -804.801337927561 31 2003.90537806848 12 -853.905696349335 22 -778.54324309139 32 2019.68727261649 13 -853.905696349335 23 -778.54324309139 33 2019.68727261649 70 3 0 3DFACE 8 body_half_outside 10 -853.905696349335 20 -778.54324309139 30 2019.68727261649 11 -827.976635409257 21 -804.801337927561 31 2003.90537806848 12 -833.979694213849 22 -798.243508123 32 2025.28667143296 13 -833.979694213849 23 -798.243508123 33 2025.28667143296 70 13 0 3DFACE 8 body_half_outside 10 -853.905696349335 20 -778.54324309139 30 2019.68727261649 11 -833.979694213849 21 -798.243508123 31 2025.28667143296 12 -853.465106968372 22 -778.056206654812 32 2053.98620958956 13 -853.465106968372 23 -778.056206654812 33 2053.98620958956 70 3 0 3DFACE 8 body_half_outside 10 -853.465106968372 20 -778.056206654812 30 2053.98620958956 11 -833.979694213849 21 -798.243508123 31 2025.28667143296 12 -833.682296381699 22 -797.91475852831 32 2048.43845388979 13 -833.682296381699 23 -797.91475852831 33 2048.43845388979 70 13 0 3DFACE 8 body_half_outside 10 -853.465106968372 20 -778.056206654812 30 2053.98620958956 11 -833.682296381699 21 -797.91475852831 31 2048.43845388979 12 -827.129718036832 22 -803.86513828916 32 2069.83607643134 13 -827.129718036832 23 -803.86513828916 33 2069.83607643134 70 13 0 3DFACE 8 body_half_outside 10 -853.465106968372 20 -778.056206654812 30 2053.98620958956 11 -827.129718036832 21 -803.86513828916 31 2069.83607643134 12 -843.757583494495 22 -786.871584078293 32 2085.68639113261 13 -843.757583494495 23 -786.871584078293 33 2085.68639113261 70 3 0 3DFACE 8 body_half_outside 10 -843.757583494495 20 -786.871584078293 30 2085.68639113261 11 -827.129718036832 21 -803.86513828916 31 2069.83607643134 12 -815.319529832985 22 -815.188756027286 32 2086.22194499561 13 -815.319529832985 23 -815.188756027286 33 2086.22194499561 70 13 0 3DFACE 8 body_half_outside 10 -843.757583494495 20 -786.871584078293 30 2085.68639113261 11 -815.319529832985 21 -815.188756027286 31 2086.22194499561 12 -826.261008377686 22 -803.647314060702 32 2109.96175196855 13 -826.261008377686 23 -803.647314060702 33 2109.96175196855 70 3 0 3DFACE 8 body_half_outside 10 -826.261008377686 20 -803.647314060702 30 2109.96175196855 11 -815.319529832985 21 -815.188756027286 31 2086.22194499561 12 -800.049725864573 22 -830.16169359091 32 2095.10145963194 13 -800.049725864573 23 -830.16169359091 33 2095.10145963194 70 13 0 3DFACE 8 body_half_outside 10 -826.261008377686 20 -803.647314060702 30 2109.96175196855 11 -800.049725864573 21 -830.16169359091 31 2095.10145963194 12 -783.644995364665 22 -846.504456965985 32 2095.12279472996 13 -783.644995364665 23 -846.504456965985 33 2095.12279472996 70 13 0 3DFACE 8 body_half_outside 10 -45.6079918995534 20 -975.978478371127 30 2025.86697911698 11 -46.4727423170739 21 -1075.39138200091 31 2034.64693744883 12 -45.6079918995535 22 -1075.47655248308 32 2025.86697911698 13 -45.6079918995535 23 -1075.47655248308 33 2025.86697911698 70 1 0 3DFACE 8 body_half_outside 10 -46.4727423170739 20 -1075.39138200091 30 2034.64693744883 11 -45.6079918995534 21 -975.978478371127 31 2025.86697911698 12 -46.4727423170739 22 -976.418879754098 32 2034.64693744883 13 -46.4727423170739 23 -976.418879754098 33 2034.64693744883 70 1 0 3DFACE 8 body_half_outside 10 180.675224578544 20 -1011.8021195433 30 2078.49259033054 11 653.750224578544 21 -1016.06585313728 31 2035.20217666346 12 180.675224578544 22 -1016.06585313728 32 2035.20217666346 13 180.675224578544 23 -1016.06585313728 33 2035.20217666346 70 1 0 3DFACE 8 body_half_outside 10 653.750224578544 20 -1016.06585313728 30 2035.20217666346 11 180.675224578544 21 -1011.8021195433 31 2078.49259033054 12 653.750224578544 22 -1011.8021195433 32 2078.49259033054 13 653.750224578544 23 -1011.8021195433 33 2078.49259033054 70 1 0 3DFACE 8 body_half_outside 10 653.750224578544 20 -966.763694030251 30 1862.60499591753 11 406.150722558891 21 -980.534582769308 31 1879.38487239655 12 422.745208264425 22 -966.763694030251 32 1862.60499591753 13 422.745208264425 23 -966.763694030251 33 1862.60499591753 70 1 0 3DFACE 8 body_half_outside 10 406.150722558891 20 -980.534582769308 30 1879.38487239655 11 653.750224578544 21 -966.763694030251 31 1862.60499591753 12 653.750224578544 22 -997.119327169824 32 1899.59344191956 13 653.750224578544 23 -997.119327169824 33 1899.59344191956 70 13 0 3DFACE 8 body_half_outside 10 406.150722558891 20 -980.534582769308 30 1879.38487239655 11 653.750224578544 21 -997.119327169824 31 1899.59344191956 12 369.41031965462 22 -997.119327169824 32 1899.59344191956 13 369.41031965462 23 -997.119327169824 33 1899.59344191956 70 1 0 3DFACE 8 body_half_outside 10 653.750224578544 20 -841.785968318108 30 1795.80300977859 11 600.307476319437 21 -841.785968318108 31 1795.80300977859 12 653.750224578543 22 -795.278099285779 32 1791.22238449044 13 653.750224578543 23 -795.278099285779 33 1791.22238449044 70 0 0 3DFACE 8 body_half_outside 10 15.754347150196 20 -977.021929553012 30 2076.22574933075 11 7.31179769318775 21 -1077.55800963197 31 2078.78676870972 12 7.31179769318775 22 -977.70014443868 32 2078.78676870972 13 7.31179769318775 23 -977.70014443868 33 2078.78676870972 70 1 0 3DFACE 8 body_half_outside 10 7.31179769318775 20 -1077.55800963197 30 2078.78676870972 11 15.754347150196 21 -977.021929553012 31 2076.22574933075 12 15.754347150196 22 -1076.94321909047 32 2076.22574933075 13 15.754347150196 23 -1076.94321909047 33 2076.22574933075 70 1 0 3DFACE 8 body_half_outside 10 1.80477854883065e-13 20 -1072.40303302985 30 2148.21162800104 11 -1.4681606386561 21 -1078.06037755542 31 2079.65151912724 12 1.80477854883065e-13 22 -1078.21721573187 32 2079.50691792559 13 1.80477854883065e-13 23 -1078.21721573187 33 2079.50691792559 70 1 0 3DFACE 8 body_half_outside 10 -38.8881027186488 20 -1076.06746493881 30 2059.65014337885 11 -210.691411720441 21 -1059.21725479392 31 2058.8118770109 12 -39.3361654272124 22 -1076.09427347395 32 2058.8118770109 13 -39.3361654272124 23 -1076.09427347395 33 2058.8118770109 70 1 0 3DFACE 8 body_half_outside 10 -210.691411720441 20 -1059.21725479392 30 2058.8118770109 11 -38.8881027186488 21 -1076.06746493881 31 2059.65014337885 12 -209.215453044867 22 -1051.79710945546 32 2148.21162800104 13 -209.215453044867 23 -1051.79710945546 33 2148.21162800104 70 3 0 3DFACE 8 body_half_outside 10 -209.215453044867 20 -1051.79710945546 30 2148.21162800104 11 -38.8881027186488 21 -1076.06746493881 31 2059.65014337885 12 -33.2912055279292 22 -1076.04157769881 32 2066.4699823381 13 -33.2912055279292 23 -1076.04157769881 33 2066.4699823381 70 13 0 3DFACE 8 body_half_outside 10 -209.215453044867 20 -1051.79710945546 30 2148.21162800104 11 -33.2912055279292 21 -1076.04157769881 31 2066.4699823381 12 -26.4713665686845 22 -1076.23963198666 32 2072.06687952882 13 -26.4713665686845 23 -1076.23963198666 33 2072.06687952882 70 13 0 3DFACE 8 body_half_outside 10 -209.215453044867 20 -1051.79710945546 30 2148.21162800104 11 -26.4713665686845 21 -1076.23963198666 31 2072.06687952882 12 -18.690668427508 22 -1076.65401668716 32 2076.22574933075 13 -18.690668427508 23 -1076.65401668716 33 2076.22574933075 70 13 0 3DFACE 8 body_half_outside 10 -209.215453044867 20 -1051.79710945546 30 2148.21162800104 11 -18.690668427508 21 -1076.65401668716 31 2076.22574933075 12 -10.2481189705 22 -1077.26880722866 32 2078.78676870972 13 -10.2481189705 23 -1077.26880722866 33 2078.78676870972 70 13 0 3DFACE 8 body_half_outside 10 -209.215453044867 20 -1051.79710945546 30 2148.21162800104 11 -10.2481189705 21 -1077.26880722866 31 2078.78676870972 12 -1.4681606386561 22 -1078.06037755542 32 2079.65151912724 13 -1.4681606386561 23 -1078.06037755542 33 2079.65151912724 70 13 0 3DFACE 8 body_half_outside 10 -209.215453044867 20 -1051.79710945546 30 2148.21162800104 11 -1.4681606386561 21 -1078.06037755542 31 2079.65151912724 12 1.80477854883065e-13 22 -1072.40303302985 32 2148.21162800104 13 1.80477854883065e-13 23 -1072.40303302985 33 2148.21162800104 70 3 0 3DFACE 8 body_half_outside 10 -761.987076679027 20 -753.814953035805 30 1922.19277204157 11 -738.20854961057 21 -738.20854961057 31 1812.39759571907 12 -757.858868059522 22 -757.858868059522 32 1919.76361420147 13 -757.858868059522 23 -757.858868059522 33 1919.76361420147 70 1 0 3DFACE 8 body_half_outside 10 -738.20854961057 20 -738.20854961057 30 1812.39759571907 11 -761.987076679027 21 -753.814953035805 31 1922.19277204157 12 -891.670534105406 22 -595.795202951324 32 1922.19277204157 13 -891.670534105406 23 -595.795202951324 33 1922.19277204157 70 13 0 3DFACE 8 body_half_outside 10 -738.20854961057 20 -738.20854961057 30 1812.39759571907 11 -891.670534105406 21 -595.795202951324 31 1922.19277204157 12 -868.04142298445 22 -580.00673566728 32 1812.39759571907 13 -868.04142298445 23 -580.00673566728 33 1812.39759571907 70 1 0 3DFACE 8 body_half_outside 10 0.0 20 -794.166563605455 30 1614.7610800213 11 -44.7901031548271 21 -883.186483489224 31 1427.8983600213 12 1.80477854883065e-13 22 -887.597923605455 32 1427.8983600213 13 1.80477854883065e-13 23 -887.597923605455 33 1427.8983600213 70 1 0 3DFACE 8 body_half_outside 10 -44.7901031548271 20 -883.186483489224 30 1427.8983600213 11 -154.93421062823 21 -778.906875772646 31 1614.7610800213 12 -173.161764737035 22 -870.542978388701 32 1427.8983600213 13 -173.161764737035 23 -870.542978388701 33 1427.8983600213 70 1 0 3DFACE 8 body_half_outside 10 -154.93421062823 20 -778.906875772646 30 1614.7610800213 11 -44.7901031548271 21 -883.186483489224 31 1427.8983600213 12 0.0 22 -794.166563605455 32 1614.7610800213 13 0.0 23 -794.166563605455 33 1614.7610800213 70 3 0 3DFACE 8 body_half_outside 10 0.0 20 -747.450883605455 30 1427.8983600213 11 -164.047987682633 21 -824.724927080674 31 1241.03564002131 12 0.0 22 -840.882243605455 32 1241.03564002131 13 0.0 23 -840.882243605455 33 1241.03564002131 70 1 0 3DFACE 8 body_half_outside 10 -164.047987682633 20 -824.724927080674 30 1241.03564002131 11 0.0 21 -747.450883605455 31 1427.8983600213 12 -145.820433573828 22 -733.088824464619 32 1427.8983600213 13 -145.820433573828 23 -733.088824464619 33 1427.8983600213 70 1 0 3DFACE 8 body_half_outside 10 -702.965588161926 20 -809.153241506708 30 1972.08037046597 11 -746.546206077474 21 -772.245716838241 31 1961.59984211439 12 -723.636295253065 22 -790.983771266745 32 1961.01586348506 13 -723.636295253065 23 -790.983771266745 33 1961.01586348506 70 1 0 3DFACE 8 body_half_outside 10 -746.546206077474 20 -772.245716838241 30 1961.59984211439 11 -702.965588161926 21 -809.153241506708 31 1972.08037046597 12 -761.145931803741 22 -761.14593180374 32 1969.69450846846 13 -761.145931803741 23 -761.14593180374 33 1969.69450846846 70 3 0 3DFACE 8 body_half_outside 10 -761.145931803741 20 -761.14593180374 30 1969.69450846846 11 -702.965588161926 21 -809.153241506708 31 1972.08037046597 12 -763.653083482914 22 -763.653083482914 32 2011.5925230317 13 -763.653083482914 23 -763.653083482914 33 2011.5925230317 70 3 0 3DFACE 8 body_half_outside 10 -763.653083482914 20 -763.653083482914 30 2011.5925230317 11 -702.965588161926 21 -809.153241506708 31 1972.08037046597 12 -687.957452549297 22 -823.760435027841 32 1993.10258668608 13 -687.957452549297 23 -823.760435027841 33 1993.10258668608 70 13 0 3DFACE 8 body_half_outside 10 -763.653083482914 20 -763.653083482914 30 2011.5925230317 11 -687.957452549297 21 -823.760435027841 31 1993.10258668608 12 -683.329149560927 22 -829.573232448602 32 2011.5925230317 13 -683.329149560927 23 -829.573232448602 33 2011.5925230317 70 1 0 3DFACE 8 body_half_outside 10 1.80477854883065e-13 20 -1043.98454271904 30 2258.00680432354 11 -209.215453044867 21 -1051.79710945546 31 2148.21162800104 12 1.80477854883065e-13 22 -1072.40303302985 32 2148.21162800104 13 1.80477854883065e-13 23 -1072.40303302985 33 2148.21162800104 70 1 0 3DFACE 8 body_half_outside 10 -209.215453044867 20 -1051.79710945546 30 2148.21162800104 11 1.80477854883065e-13 21 -1043.98454271904 31 2258.00680432354 12 -203.671280618918 22 -1023.92467246733 32 2258.00680432354 13 -203.671280618918 23 -1023.92467246733 33 2258.00680432354 70 1 0 3DFACE 8 body_half_outside 10 -712.200510303116 20 -793.069743896677 30 1912.98147661467 11 -758.928832717995 21 -874.671572316599 31 1963.87063213502 12 -781.550764523053 22 -852.489442592712 32 1950.71579563676 13 -781.550764523053 23 -852.489442592712 33 1950.71579563676 70 1 0 3DFACE 8 body_half_outside 10 -758.928832717995 20 -874.671572316599 30 1963.87063213502 11 -712.200510303116 21 -793.069743896677 31 1912.98147661467 12 -697.04031921187 22 -808.580814515394 32 1922.19277204157 13 -697.04031921187 23 -808.580814515394 33 1922.19277204157 70 13 0 3DFACE 8 body_half_outside 10 -758.928832717995 20 -874.671572316599 30 1963.87063213502 11 -697.04031921187 21 -808.580814515394 31 1922.19277204157 12 -679.407718084958 22 -824.046894149155 32 1931.32901160226 13 -679.407718084958 23 -824.046894149155 33 1931.32901160226 70 1 0 3DFACE 8 body_half_outside 10 1.80477854883065e-13 20 -1078.12323678805 30 1989.78695697206 11 -1.4681606386561 21 -978.157451656943 31 1989.64235577041 12 -1.4681606386561 22 -1077.9663986116 32 1989.64235577041 13 -1.4681606386561 23 -1077.9663986116 33 1989.64235577041 70 1 0 3DFACE 8 body_half_outside 10 -1.4681606386561 20 -978.157451656943 30 1989.64235577041 11 1.80477854883065e-13 21 -1078.12323678805 31 1989.78695697206 12 0.0 22 -978.310708745151 32 1989.78695697206 13 0.0 23 -978.310708745151 33 1989.78695697206 70 3 0 3DFACE 8 body_half_outside 10 0.0 20 -978.310708745151 30 1989.78695697206 11 1.80477854883065e-13 21 -1078.12323678805 31 1989.78695697206 12 7.31179769318757 22 -977.633667953296 32 1990.50710618793 13 7.31179769318757 23 -977.633667953296 33 1990.50710618793 70 3 0 3DFACE 8 body_half_outside 10 7.31179769318757 20 -977.633667953296 30 1990.50710618793 11 1.80477854883065e-13 21 -1078.12323678805 31 1989.78695697206 12 7.31179769318775 22 -1077.46403068815 32 1990.50710618793 13 7.31179769318775 23 -1077.46403068815 33 1990.50710618793 70 1 0 3DFACE 8 body_half_outside 10 660.670394770277 20 -660.670394770277 30 2455.6433200213 11 554.192057578438 21 -829.407026995336 31 2361.46489814399 12 705.352696568272 22 -705.352696568272 32 2361.46489814399 13 705.352696568272 23 -705.352696568272 33 2361.46489814399 70 1 0 3DFACE 8 body_half_outside 10 554.192057578438 20 -829.407026995336 30 2361.46489814399 11 660.670394770277 21 -660.670394770277 31 2455.6433200213 12 519.085398326623 22 -776.866198451135 32 2455.6433200213 13 519.085398326623 23 -776.866198451135 33 2455.6433200213 70 3 0 3DFACE 8 body_half_outside 10 519.085398326623 20 -776.866198451135 30 2455.6433200213 11 660.670394770277 21 -660.670394770277 31 2455.6433200213 12 642.325277330117 22 -675.725843568677 32 2455.6433200213 13 642.325277330117 23 -675.725843568677 33 2455.6433200213 70 13 0 3DFACE 8 body_half_outside 10 519.085398326623 20 -776.866198451135 30 2455.6433200213 11 642.325277330117 21 -675.725843568677 31 2455.6433200213 12 569.3857757708 22 -735.585745512023 32 2455.6433200213 13 569.3857757708 23 -735.585745512023 33 2455.6433200213 70 1 0 3DFACE 8 body_half_outside 10 891.670534105407 20 -595.795202951324 30 2148.21162800104 11 884.794335210004 21 -604.173875548016 31 2148.21162800104 12 892.684338449561 22 -596.472605357118 32 2133.80356487023 13 892.684338449561 23 -596.472605357118 33 2133.80356487023 70 0 0 3DFACE 8 body_half_outside 10 738.20854961057 20 -738.208549610569 30 2258.00680432354 11 724.871895956044 21 -750.87609961724 31 2252.83778292244 12 739.771130343929 22 -739.771130343928 32 2249.46912732182 13 739.771130343929 23 -739.771130343928 33 2249.46912732182 70 1 0 3DFACE 8 body_half_outside 10 724.871895956044 20 -750.87609961724 30 2252.83778292244 11 738.20854961057 21 -738.208549610569 31 2258.00680432354 12 670.391151613542 22 -794.16651328432 32 2257.10151651642 13 670.391151613542 23 -794.16651328432 33 2257.10151651642 70 3 0 3DFACE 8 body_half_outside 10 670.391151613542 20 -794.16651328432 30 2257.10151651642 11 653.750224578544 21 -807.521705673266 31 2258.00680432354 12 653.750224578544 22 -808.286792264463 32 2255.71079042387 13 653.750224578544 23 -808.286792264463 33 2255.71079042387 70 1 0 3DFACE 8 body_half_outside 10 653.750224578544 20 -807.521705673266 30 2258.00680432354 11 670.391151613542 21 -794.16651328432 31 2257.10151651642 12 738.20854961057 22 -738.208549610569 32 2258.00680432354 13 738.20854961057 23 -738.208549610569 33 2258.00680432354 70 3 0 3DFACE 8 body_half_outside 10 -644.006839982028 20 -861.844217926399 30 2011.59252303171 11 -731.724734127308 21 -900.26267972249 31 2019.84617451401 12 -643.970452120392 22 -861.831591212861 32 2011.20252653019 13 -643.970452120392 23 -861.831591212861 33 2011.20252653019 70 1 0 3DFACE 8 body_half_outside 10 -731.724734127308 20 -900.26267972249 30 2019.84617451401 11 -644.006839982028 21 -861.844217926399 31 2011.59252303171 12 -644.327893757466 22 -861.580735902195 32 2058.8118770109 13 -644.327893757466 23 -861.580735902195 33 2058.8118770109 70 13 0 3DFACE 8 body_half_outside 10 -731.724734127308 20 -900.26267972249 30 2019.84617451401 11 -644.327893757466 21 -861.580735902195 31 2058.8118770109 12 -731.284144746345 22 -899.775643285913 32 2054.14511148709 13 -731.284144746345 23 -899.775643285913 33 2054.14511148709 70 3 0 3DFACE 8 body_half_outside 10 -731.284144746345 20 -899.775643285913 30 2054.14511148709 11 -644.327893757466 21 -861.580735902195 31 2058.8118770109 12 -644.282480658799 22 -861.555930289753 32 2059.38164426315 13 -644.282480658799 23 -861.555930289753 33 2059.38164426315 70 1 0 3DFACE 8 body_half_outside 10 -399.515588143821 20 -964.515951276275 30 2258.00680432354 11 -595.795202951324 21 -891.670534105406 31 2148.21162800104 12 -410.390873558597 22 -990.771212819307 32 2148.21162800104 13 -410.390873558597 23 -990.771212819307 33 2148.21162800104 70 1 0 3DFACE 8 body_half_outside 10 -595.795202951324 20 -891.670534105406 30 2148.21162800104 11 -399.515588143821 21 -964.515951276275 31 2258.00680432354 12 -580.006735667279 22 -868.041422984449 32 2258.00680432354 13 -580.006735667279 23 -868.041422984449 33 2258.00680432354 70 1 0 3DFACE 8 body_half_outside 10 704.67526609701 20 -470.84895947612 30 796.153149972084 11 784.574341950659 21 -324.981333125909 31 855.37186879426 12 706.098253038493 22 -471.799768952456 32 855.37186879426 13 706.098253038493 23 -471.799768952456 33 855.37186879426 70 1 0 3DFACE 8 body_half_outside 10 784.574341950659 20 -324.981333125909 30 855.37186879426 11 704.67526609701 21 -470.84895947612 31 796.153149972084 12 782.993203577332 22 -324.326404167689 32 796.153149972084 13 782.993203577332 23 -324.326404167689 33 796.153149972084 70 1 0 3DFACE 8 body_half_outside 10 772.176090266528 20 -319.845809128627 30 738.078199114136 11 831.221151351825 21 -165.340167031437 31 796.153149972084 12 782.993203577332 22 -324.326404167689 32 796.153149972084 13 782.993203577332 23 -324.326404167689 33 796.153149972084 70 1 0 3DFACE 8 body_half_outside 10 831.221151351825 20 -165.340167031437 30 796.153149972084 11 772.176090266528 21 -319.845809128627 31 738.078199114136 12 819.73776511114 22 -163.055979488767 32 738.078199114136 13 819.73776511114 23 -163.055979488767 33 738.078199114136 70 1 0 3DFACE 8 body_half_outside 10 210.691411720441 20 -1059.21725479392 30 2011.5925230317 11 40.1106512432667 21 -1076.01799327905 31 2017.42442965997 12 36.9934322066314 22 -1076.32501255654 32 2011.5925230317 13 36.9934322066314 23 -1076.32501255654 33 2011.5925230317 70 1 0 3DFACE 8 body_half_outside 10 40.1106512432667 20 -1076.01799327905 30 2017.42442965997 11 210.691411720441 21 -1059.21725479392 31 2011.5925230317 12 210.691411720441 22 -1059.21725479392 32 2058.8118770109 13 210.691411720441 23 -1059.21725479392 33 2058.8118770109 70 13 0 3DFACE 8 body_half_outside 10 40.1106512432667 20 -1076.01799327905 30 2017.42442965997 11 210.691411720441 21 -1059.21725479392 31 2058.8118770109 12 42.6716706222413 22 -1075.76575488639 32 2025.86697911698 13 42.6716706222413 23 -1075.76575488639 33 2025.86697911698 70 3 0 3DFACE 8 body_half_outside 10 42.6716706222413 20 -1075.76575488639 30 2025.86697911698 11 210.691411720441 21 -1059.21725479392 31 2058.8118770109 12 43.536421039762 22 -1075.68058440422 32 2034.64693744883 13 43.536421039762 23 -1075.68058440422 33 2034.64693744883 70 3 0 3DFACE 8 body_half_outside 10 43.536421039762 20 -1075.68058440422 30 2034.64693744883 11 210.691411720441 21 -1059.21725479392 31 2058.8118770109 12 42.6716706222413 22 -1075.76575488639 32 2043.42689578067 13 42.6716706222413 23 -1075.76575488639 33 2043.42689578067 70 3 0 3DFACE 8 body_half_outside 10 42.6716706222413 20 -1075.76575488639 30 2043.42689578067 11 210.691411720441 21 -1059.21725479392 31 2058.8118770109 12 40.1106512432663 22 -1076.01799327905 32 2051.86944523768 13 40.1106512432663 23 -1076.01799327905 33 2051.86944523768 70 3 0 3DFACE 8 body_half_outside 10 40.1106512432663 20 -1076.01799327905 30 2051.86944523768 11 210.691411720441 21 -1059.21725479392 31 2058.8118770109 12 36.3998441498995 22 -1076.38347587727 32 2058.8118770109 13 36.3998441498995 23 -1076.38347587727 33 2058.8118770109 70 1 0 3DFACE 8 body_half_outside 10 -833.682296381699 20 -797.91475852831 30 2048.43845388979 11 -781.183382327347 21 -739.911027417745 31 2076.74494872451 12 -827.129718036832 22 -803.86513828916 32 2069.83607643134 13 -827.129718036832 23 -803.86513828916 33 2069.83607643134 70 1 0 3DFACE 8 body_half_outside 10 -781.183382327347 20 -739.911027417745 30 2076.74494872451 11 -833.682296381699 21 -797.91475852831 31 2048.43845388979 12 -786.92474167715 22 -735.296194513125 32 2058.80750841657 13 -786.92474167715 23 -735.296194513125 33 2058.80750841657 70 3 0 3DFACE 8 body_half_outside 10 -786.92474167715 20 -735.296194513125 30 2058.80750841657 11 -833.682296381699 21 -797.91475852831 31 2048.43845388979 12 -789.34285913936 22 -732.349614898499 32 2049.89434090933 13 -789.34285913936 23 -732.349614898499 33 2049.89434090933 70 1 0 3DFACE 8 body_half_outside 10 210.691411720441 20 -1059.21725479392 30 2011.5925230317 11 1.80477854883065e-13 21 -1072.40303302985 31 1922.19277204157 12 209.215453044867 22 -1051.79710945546 32 1922.19277204157 13 209.215453044867 23 -1051.79710945546 33 1922.19277204157 70 1 0 3DFACE 8 body_half_outside 10 1.80477854883065e-13 20 -1072.40303302985 30 1922.19277204157 11 210.691411720441 21 -1059.21725479392 31 2011.5925230317 12 7.31179769318775 22 -1077.46403068815 32 1990.50710618793 13 7.31179769318775 23 -1077.46403068815 33 1990.50710618793 70 15 0 3DFACE 8 body_half_outside 10 1.80477854883065e-13 20 -1072.40303302985 30 1922.19277204157 11 7.31179769318775 21 -1077.46403068815 31 1990.50710618793 12 1.80477854883065e-13 22 -1078.12323678805 32 1989.78695697206 13 1.80477854883065e-13 23 -1078.12323678805 33 1989.78695697206 70 1 0 3DFACE 8 body_half_outside 10 7.31179769318775 20 -1077.46403068815 30 1990.50710618793 11 210.691411720441 21 -1059.21725479392 31 2011.5925230317 12 15.754347150196 22 -1076.84924014666 32 1993.0681255669 13 15.754347150196 23 -1076.84924014666 33 1993.0681255669 70 3 0 3DFACE 8 body_half_outside 10 15.754347150196 20 -1076.84924014666 30 1993.0681255669 11 210.691411720441 21 -1059.21725479392 31 2011.5925230317 12 23.5350452913723 22 -1076.43485544616 32 1997.22699536883 13 23.5350452913723 23 -1076.43485544616 33 1997.22699536883 70 3 0 3DFACE 8 body_half_outside 10 23.5350452913723 20 -1076.43485544616 30 1997.22699536883 11 210.691411720441 21 -1059.21725479392 31 2011.5925230317 12 30.3548842506176 22 -1076.23680115831 32 2002.82389255955 13 30.3548842506176 23 -1076.23680115831 33 2002.82389255955 70 3 0 3DFACE 8 body_half_outside 10 30.3548842506176 20 -1076.23680115831 30 2002.82389255955 11 210.691411720441 21 -1059.21725479392 31 2011.5925230317 12 35.9517814413362 22 -1076.26268839831 32 2009.6437315188 13 35.9517814413362 23 -1076.26268839831 33 2009.6437315188 70 3 0 3DFACE 8 body_half_outside 10 35.9517814413362 20 -1076.26268839831 30 2009.6437315188 11 210.691411720441 21 -1059.21725479392 31 2011.5925230317 12 36.9934322066314 22 -1076.32501255654 32 2011.5925230317 13 36.9934322066314 23 -1076.32501255654 33 2011.5925230317 70 1 0 3DFACE 8 body_half_outside 10 -209.215453044867 20 -1051.79710945546 30 2148.21162800104 11 -413.286070645571 21 -997.760836892423 31 2058.8118770109 12 -210.691411720441 22 -1059.21725479392 32 2058.8118770109 13 -210.691411720441 23 -1059.21725479392 33 2058.8118770109 70 1 0 3DFACE 8 body_half_outside 10 -413.286070645571 20 -997.760836892423 30 2058.8118770109 11 -209.215453044867 21 -1051.79710945546 31 2148.21162800104 12 -410.390873558597 22 -990.771212819307 32 2148.21162800104 13 -410.390873558597 23 -990.771212819307 33 2148.21162800104 70 1 0 3DFACE 8 body_half_outside 10 -268.159752894786 20 -647.394912321209 30 1241.03564002131 11 -441.215302798659 21 -660.325364744672 31 1054.1729200213 12 -303.914386430124 22 -733.714233519903 32 1054.1729200213 13 -303.914386430124 23 -733.714233519903 33 1054.1729200213 70 1 0 3DFACE 8 body_half_outside 10 -441.215302798659 20 -660.325364744672 30 1054.1729200213 11 -268.159752894786 21 -647.394912321209 31 1241.03564002131 12 -389.307620352121 22 -582.640028068573 32 1241.03564002131 13 -389.307620352121 23 -582.640028068573 33 1241.03564002131 70 1 0 3DFACE 8 body_half_outside 10 819.73776511114 20 -163.055979488767 30 738.078199114136 11 847.505736434059 21 1.80477854883065e-13 31 796.153149972084 12 831.221151351825 22 -165.340167031437 32 796.153149972084 13 831.221151351825 23 -165.340167031437 33 796.153149972084 70 1 0 3DFACE 8 body_half_outside 10 847.505736434059 20 1.80477854883065e-13 30 796.153149972084 11 819.73776511114 21 -163.055979488767 31 738.078199114136 12 835.797377356766 22 1.80477854883065e-13 32 738.078199114136 13 835.797377356766 23 1.80477854883065e-13 33 738.078199114136 70 1 0 3DFACE 8 body_half_outside 10 0.0 20 -840.882243605455 30 914.026066884025 11 -127.592879465023 21 -641.452721848564 31 1054.1729200213 12 -164.047987682633 22 -824.724927080674 32 914.026066884025 13 -164.047987682633 23 -824.724927080674 33 914.026066884025 70 1 0 3DFACE 8 body_half_outside 10 -127.592879465023 20 -641.452721848564 30 1054.1729200213 11 0.0 21 -840.882243605455 31 914.026066884025 12 0.0 22 -654.019523605455 32 1054.1729200213 13 0.0 23 -654.019523605455 33 1054.1729200213 70 1 0 3DFACE 8 body_half_outside 10 653.750224578544 20 -1033.56568016919 30 1987.58272162967 11 653.750224578544 21 -1033.56568016919 31 2082.82163169725 12 653.750224578544 22 -1038.25578712258 32 2035.20217666346 13 653.750224578544 23 -1038.25578712258 33 2035.20217666346 70 1 0 3DFACE 8 body_half_outside 10 653.750224578544 20 -1033.56568016919 30 2082.82163169725 11 653.750224578544 21 -1033.56568016919 31 1987.58272162967 12 653.750224578544 22 -1019.67559748903 32 1941.79325554754 13 653.750224578544 23 -1019.67559748903 33 1941.79325554754 70 13 0 3DFACE 8 body_half_outside 10 653.750224578544 20 -1033.56568016919 30 2082.82163169725 11 653.750224578544 21 -1019.67559748903 31 1941.79325554754 12 653.750224578544 22 -1019.67559748903 32 2128.61109777939 13 653.750224578544 23 -1019.67559748903 33 2128.61109777939 70 3 0 3DFACE 8 body_half_outside 10 653.750224578544 20 -1019.67559748903 30 2128.61109777939 11 653.750224578544 21 -1019.67559748903 31 1941.79325554754 12 653.750224578544 22 -1016.06585313728 32 2035.20217666346 13 653.750224578544 23 -1016.06585313728 33 2035.20217666346 70 15 0 3DFACE 8 body_half_outside 10 653.750224578544 20 -1016.06585313728 30 2035.20217666346 11 653.750224578544 21 -1019.67559748903 31 1941.79325554754 12 653.750224578544 22 -1011.8021195433 32 1991.91176299638 13 653.750224578544 23 -1011.8021195433 33 1991.91176299638 70 3 0 3DFACE 8 body_half_outside 10 653.750224578544 20 -1011.8021195433 30 1991.91176299638 11 653.750224578544 21 -1019.67559748903 31 1941.79325554754 12 653.750224578544 22 -997.119327169824 32 1899.59344191956 13 653.750224578544 23 -997.119327169824 33 1899.59344191956 70 13 0 3DFACE 8 body_half_outside 10 653.750224578544 20 -1011.8021195433 30 1991.91176299638 11 653.750224578544 21 -997.119327169824 31 1899.59344191956 12 653.750224578544 22 -999.174771652236 32 1950.28497564898 13 653.750224578544 23 -999.174771652236 33 1950.28497564898 70 3 0 3DFACE 8 body_half_outside 10 653.750224578544 20 -999.174771652236 30 1950.28497564898 11 653.750224578544 21 -997.119327169824 31 1899.59344191956 12 653.750224578544 22 -978.669071362052 32 1911.92150871446 13 653.750224578544 23 -978.669071362052 33 1911.92150871446 70 3 0 3DFACE 8 body_half_outside 10 653.750224578544 20 -978.669071362052 30 1911.92150871446 11 653.750224578544 21 -997.119327169824 31 1899.59344191956 12 653.750224578544 22 -966.763694030251 32 1862.60499591753 13 653.750224578544 23 -966.763694030251 33 1862.60499591753 70 13 0 3DFACE 8 body_half_outside 10 653.750224578544 20 -978.669071362052 30 1911.92150871446 11 653.750224578544 21 -966.763694030251 31 1862.60499591753 12 653.750224578544 22 -951.073041235167 32 1878.29564871262 13 653.750224578544 23 -951.073041235167 33 1878.29564871262 70 3 0 3DFACE 8 body_half_outside 10 653.750224578544 20 -951.073041235167 30 1878.29564871262 11 653.750224578544 21 -966.763694030251 31 1862.60499591753 12 653.750224578544 22 -929.775248028225 32 1832.24936277796 13 653.750224578544 23 -929.775248028225 33 1832.24936277796 70 13 0 3DFACE 8 body_half_outside 10 653.750224578544 20 -951.073041235167 30 1878.29564871262 11 653.750224578544 21 -929.775248028225 31 1832.24936277796 12 653.750224578544 22 -917.447181233325 32 1850.69961858573 13 653.750224578544 23 -917.447181233325 33 1850.69961858573 70 3 0 3DFACE 8 body_half_outside 10 653.750224578544 20 -917.447181233325 30 1850.69961858573 11 653.750224578544 21 -929.775248028225 31 1832.24936277796 12 653.750224578544 22 -887.575434400246 32 1809.69309245876 13 653.750224578544 23 -887.575434400246 33 1809.69309245876 70 13 0 3DFACE 8 body_half_outside 10 653.750224578544 20 -917.447181233325 30 1850.69961858573 11 653.750224578544 21 -887.575434400246 31 1809.69309245876 12 653.750224578544 22 -879.083714298799 32 1830.19391829555 13 653.750224578544 23 -879.083714298799 33 1830.19391829555 70 3 0 3DFACE 8 body_half_outside 10 653.750224578544 20 -879.083714298799 30 1830.19391829555 11 653.750224578544 21 -887.575434400246 31 1809.69309245876 12 653.750224578544 22 -841.785968318108 32 1795.80300977859 13 653.750224578544 23 -841.785968318108 33 1795.80300977859 70 13 0 3DFACE 8 body_half_outside 10 653.750224578544 20 -879.083714298799 30 1830.19391829555 11 653.750224578544 21 -841.785968318108 31 1795.80300977859 12 653.750224578544 22 -837.4569269514 32 1817.56657040449 13 653.750224578544 23 -837.4569269514 33 1817.56657040449 70 3 0 3DFACE 8 body_half_outside 10 653.750224578544 20 -837.4569269514 30 1817.56657040449 11 653.750224578544 21 -841.785968318108 31 1795.80300977859 12 653.750224578543 22 -795.278099285779 32 1791.22238449044 13 653.750224578543 23 -795.278099285779 33 1791.22238449044 70 13 0 3DFACE 8 body_half_outside 10 653.750224578544 20 -837.4569269514 30 1817.56657040449 11 653.750224578543 21 -795.278099285779 31 1791.22238449044 12 653.750224578544 22 -807.521705673267 32 1812.39759571907 13 653.750224578544 23 -807.521705673267 33 1812.39759571907 70 13 0 3DFACE 8 body_half_outside 10 653.750224578544 20 -837.4569269514 30 1817.56657040449 11 653.750224578544 21 -807.521705673267 31 1812.39759571907 12 653.750224578543 22 -808.286776169451 32 1814.69356131783 13 653.750224578543 23 -808.286776169451 33 1814.69356131783 70 1 0 3DFACE 8 body_half_outside 10 653.750224578544 20 -1019.67559748903 30 2128.61109777939 11 653.750224578544 21 -1011.8021195433 31 2078.49259033054 12 653.750224578544 22 -997.119327169824 32 2170.81091140737 13 653.750224578544 23 -997.119327169824 33 2170.81091140737 70 3 0 3DFACE 8 body_half_outside 10 653.750224578544 20 -1011.8021195433 30 2078.49259033054 11 653.750224578544 21 -1019.67559748903 31 2128.61109777939 12 653.750224578544 22 -1016.06585313728 32 2035.20217666346 13 653.750224578544 23 -1016.06585313728 33 2035.20217666346 70 3 0 3DFACE 8 body_half_outside 10 653.750224578544 20 -997.119327169824 30 2170.81091140737 11 653.750224578544 21 -1011.8021195433 31 2078.49259033054 12 653.750224578544 22 -999.174771652236 32 2120.11937767794 13 653.750224578544 23 -999.174771652236 33 2120.11937767794 70 13 0 3DFACE 8 body_half_outside 10 653.750224578544 20 -997.119327169824 30 2170.81091140737 11 653.750224578544 21 -999.174771652236 31 2120.11937767794 12 653.750224578544 22 -978.669071362051 32 2158.48284461247 13 653.750224578544 23 -978.669071362051 33 2158.48284461247 70 13 0 3DFACE 8 body_half_outside 10 653.750224578544 20 -997.119327169824 30 2170.81091140737 11 653.750224578544 21 -978.669071362051 31 2158.48284461247 12 653.750224578544 22 -966.763694030251 32 2207.79935740939 13 653.750224578544 23 -966.763694030251 33 2207.79935740939 70 3 0 3DFACE 8 body_half_outside 10 653.750224578544 20 -966.763694030251 30 2207.79935740939 11 653.750224578544 21 -978.669071362051 31 2158.48284461247 12 653.750224578544 22 -951.073041235167 32 2192.10870461431 13 653.750224578544 23 -951.073041235167 33 2192.10870461431 70 13 0 3DFACE 8 body_half_outside 10 653.750224578544 20 -966.763694030251 30 2207.79935740939 11 653.750224578544 21 -951.073041235167 31 2192.10870461431 12 653.750224578544 22 -929.775248028225 32 2238.15499054897 13 653.750224578544 23 -929.775248028225 33 2238.15499054897 70 3 0 3DFACE 8 body_half_outside 10 653.750224578544 20 -929.775248028225 30 2238.15499054897 11 653.750224578544 21 -951.073041235167 31 2192.10870461431 12 653.750224578544 22 -917.447181233325 32 2219.70473474119 13 653.750224578544 23 -917.447181233325 33 2219.70473474119 70 13 0 3DFACE 8 body_half_outside 10 653.750224578544 20 -929.775248028225 30 2238.15499054897 11 653.750224578544 21 -917.447181233325 31 2219.70473474119 12 653.750224578544 22 -887.575434400246 32 2260.71126086817 13 653.750224578544 23 -887.575434400246 33 2260.71126086817 70 3 0 3DFACE 8 body_half_outside 10 653.750224578544 20 -887.575434400246 30 2260.71126086817 11 653.750224578544 21 -917.447181233325 31 2219.70473474119 12 653.750224578544 22 -879.083714298799 32 2240.21043503138 13 653.750224578544 23 -879.083714298799 33 2240.21043503138 70 13 0 3DFACE 8 body_half_outside 10 653.750224578544 20 -887.575434400246 30 2260.71126086817 11 653.750224578544 21 -879.083714298799 31 2240.21043503138 12 653.750224578544 22 -841.785968318108 32 2274.60134354834 13 653.750224578544 23 -841.785968318108 33 2274.60134354834 70 3 0 3DFACE 8 body_half_outside 10 653.750224578544 20 -841.785968318108 30 2274.60134354834 11 653.750224578544 21 -879.083714298799 31 2240.21043503138 12 653.750224578544 22 -837.4569269514 32 2252.83778292244 13 653.750224578544 23 -837.4569269514 33 2252.83778292244 70 13 0 3DFACE 8 body_half_outside 10 653.750224578544 20 -841.785968318108 30 2274.60134354834 11 653.750224578544 21 -837.4569269514 31 2252.83778292244 12 653.750224578543 22 -795.278127928135 32 2279.18196601546 13 653.750224578543 23 -795.278127928135 33 2279.18196601546 70 3 0 3DFACE 8 body_half_outside 10 653.750224578543 20 -795.278127928135 30 2279.18196601546 11 653.750224578544 21 -837.4569269514 31 2252.83778292244 12 653.750224578544 22 -807.521705673266 32 2258.00680432354 13 653.750224578544 23 -807.521705673266 33 2258.00680432354 70 3 0 3DFACE 8 body_half_outside 10 653.750224578544 20 -807.521705673266 30 2258.00680432354 11 653.750224578544 21 -837.4569269514 31 2252.83778292244 12 653.750224578544 22 -808.286792264463 32 2255.71079042387 13 653.750224578544 23 -808.286792264463 33 2255.71079042387 70 1 0 3DFACE 8 body_half_outside 10 -152.954610178005 20 -768.954752250597 30 631.979456702016 11 -285.268899238265 21 -688.700045464263 31 587.016306884026 12 -145.428823687577 22 -731.120068617964 32 587.016306884026 13 -145.428823687577 23 -731.120068617964 33 587.016306884026 70 1 0 3DFACE 8 body_half_outside 10 -285.268899238265 20 -688.700045464263 30 587.016306884026 11 -152.954610178005 21 -768.954752250597 31 631.979456702016 12 -300.031260464802 22 -724.33953815002 32 631.979456702016 13 -300.031260464802 23 -724.33953815002 33 631.979456702016 70 1 0 3DFACE 8 body_half_outside 10 594.593536632776 20 -594.593536632776 30 2455.6433200213 11 635.110015865962 21 -545.224063842726 31 2549.0746800213 12 594.593536632776 22 -594.593536632776 32 2549.0746800213 13 594.593536632776 23 -594.593536632776 33 2549.0746800213 70 1 0 3DFACE 8 body_half_outside 10 635.110015865962 20 -545.224063842726 30 2549.0746800213 11 594.593536632776 21 -594.593536632776 31 2455.6433200213 12 699.168033082722 22 -467.169144021928 32 2455.6433200213 13 699.168033082722 23 -467.169144021928 33 2455.6433200213 70 13 0 3DFACE 8 body_half_outside 10 635.110015865962 20 -545.224063842726 30 2549.0746800213 11 699.168033082722 21 -467.169144021928 31 2455.6433200213 12 689.000383427084 22 -479.558460974267 32 2549.0746800213 13 689.000383427084 23 -479.558460974267 33 2549.0746800213 70 3 0 3DFACE 8 body_half_outside 10 689.000383427084 20 -479.558460974267 30 2549.0746800213 11 699.168033082722 21 -467.169144021928 31 2455.6433200213 12 699.168033082722 22 -467.169144021929 32 2549.0746800213 13 699.168033082722 23 -467.169144021929 33 2549.0746800213 70 1 0 3DFACE 8 body_half_outside 10 -182.278551827737 20 -916.376162171087 30 2455.6433200213 11 -381.734128610353 21 -921.587710511788 31 2361.46489814399 12 -194.606371158736 22 -978.352295145615 32 2361.46489814399 13 -194.606371158736 23 -978.352295145615 33 2361.46489814399 70 1 0 3DFACE 8 body_half_outside 10 -381.734128610353 20 -921.587710511788 30 2361.46489814399 11 -182.278551827737 21 -916.376162171087 31 2455.6433200213 12 -357.552241131723 22 -863.207469797099 32 2455.6433200213 13 -357.552241131723 23 -863.207469797099 33 2455.6433200213 70 3 0 3DFACE 8 body_half_outside 10 -357.552241131723 20 -863.207469797099 30 2455.6433200213 11 -182.278551827737 21 -916.376162171087 31 2455.6433200213 12 -233.261861254001 22 -900.910544337303 32 2455.6433200213 13 -233.261861254001 23 -900.910544337303 33 2455.6433200213 70 13 0 3DFACE 8 body_half_outside 10 -357.552241131723 20 -863.207469797099 30 2455.6433200213 11 -233.261861254001 21 -900.910544337303 31 2455.6433200213 12 -323.520317728025 22 -873.53094089839 32 2455.6433200213 13 -323.520317728025 23 -873.53094089839 33 2455.6433200213 70 1 0 3DFACE 8 body_half_outside 10 -164.047987682633 20 -824.724927080674 30 2549.0746800213 11 -321.791703197793 21 -776.873894119249 31 2455.6433200213 12 -164.047987682633 22 -824.724927080674 32 2455.6433200213 13 -164.047987682633 23 -824.724927080674 33 2455.6433200213 70 1 0 3DFACE 8 body_half_outside 10 -321.791703197793 20 -776.873894119249 30 2455.6433200213 11 -164.047987682633 21 -824.724927080674 31 2549.0746800213 12 -321.791703197793 22 -776.87389411925 32 2549.0746800213 13 -321.791703197793 23 -776.87389411925 33 2549.0746800213 70 3 0 3DFACE 8 body_half_outside 10 -321.791703197793 20 -776.87389411925 30 2549.0746800213 11 -164.047987682633 21 -824.724927080674 31 2549.0746800213 12 -209.932194866118 22 -810.806105001612 32 2549.0746800213 13 -209.932194866118 23 -810.806105001612 33 2549.0746800213 70 13 0 3DFACE 8 body_half_outside 10 -321.791703197793 20 -776.87389411925 30 2549.0746800213 11 -209.932194866118 21 -810.806105001612 31 2549.0746800213 12 -291.163466606751 22 -786.164868113883 32 2549.0746800213 13 -291.163466606751 23 -786.164868113883 33 2549.0746800213 70 1 0 3DFACE 8 body_half_outside 10 -158.887376492573 20 -798.780782641381 30 682.822310520627 11 -300.031260464802 21 -724.33953815002 31 631.979456702016 12 -152.954610178005 22 -768.954752250597 32 631.979456702016 13 -152.954610178005 23 -768.954752250597 33 631.979456702016 70 1 0 3DFACE 8 body_half_outside 10 -300.031260464802 20 -724.33953815002 30 631.979456702016 11 -158.887376492573 21 -798.780782641381 31 682.822310520627 12 -311.668800211604 22 -752.435044439405 32 682.822310520627 13 -311.668800211604 23 -752.435044439405 33 682.822310520627 70 1 0 3DFACE 8 body_half_outside 10 -163.055979488767 20 -819.73776511114 30 738.078199114136 11 -311.668800211604 21 -752.435044439405 31 682.822310520627 12 -158.887376492573 22 -798.780782641381 32 682.822310520627 13 -158.887376492573 23 -798.780782641381 33 682.822310520627 70 1 0 3DFACE 8 body_half_outside 10 -311.668800211604 20 -752.435044439405 30 682.822310520627 11 -163.055979488767 21 -819.73776511114 31 738.078199114136 12 -319.845809128627 22 -772.176090266528 32 738.078199114136 13 -319.845809128627 23 -772.176090266528 33 738.078199114136 70 1 0 3DFACE 8 body_half_outside 10 -165.340167031437 20 -831.221151351825 30 796.153149972084 11 -319.845809128627 21 -772.176090266528 31 738.078199114136 12 -163.055979488767 22 -819.73776511114 32 738.078199114136 13 -163.055979488767 23 -819.73776511114 33 738.078199114136 70 1 0 3DFACE 8 body_half_outside 10 -319.845809128627 20 -772.176090266528 30 738.078199114136 11 -165.340167031437 21 -831.221151351825 31 796.153149972084 12 -324.326404167689 22 -782.993203577332 32 796.153149972084 13 -324.326404167689 23 -782.993203577332 33 796.153149972084 70 1 0 3DFACE 8 body_half_outside 10 533.995170927003 20 -892.63511672065 30 2258.00680432354 11 381.734128610352 21 -921.587710511788 31 2361.46489814399 12 399.51558814382 22 -964.515951276275 32 2258.00680432354 13 399.51558814382 23 -964.515951276275 33 2258.00680432354 70 1 0 3DFACE 8 body_half_outside 10 381.734128610352 20 -921.587710511788 30 2361.46489814399 11 533.995170927003 21 -892.63511672065 31 2258.00680432354 12 540.896920479706 22 -887.575434400246 32 2260.71126086817 13 540.896920479706 23 -887.575434400246 33 2260.71126086817 70 13 0 3DFACE 8 body_half_outside 10 381.734128610352 20 -921.587710511788 30 2361.46489814399 11 540.896920479706 21 -887.575434400246 31 2260.71126086817 12 577.578293884962 22 -864.407003018736 32 2267.73932769213 13 577.578293884962 23 -864.407003018736 33 2267.73932769213 70 13 0 3DFACE 8 body_half_outside 10 381.734128610352 20 -921.587710511788 30 2361.46489814399 11 577.578293884962 21 -864.407003018736 31 2267.73932769213 12 554.192057578438 22 -829.407026995336 32 2361.46489814399 13 554.192057578438 23 -829.407026995336 33 2361.46489814399 70 1 0 3DFACE 8 body_half_outside 10 165.340167031437 20 -831.221151351825 30 796.153149972084 11 1.80477854883065e-13 21 -835.797377356766 31 738.078199114136 12 163.055979488767 22 -819.73776511114 32 738.078199114136 13 163.055979488767 23 -819.73776511114 33 738.078199114136 70 1 0 3DFACE 8 body_half_outside 10 1.80477854883065e-13 20 -835.797377356766 30 738.078199114136 11 165.340167031437 21 -831.221151351825 31 796.153149972084 12 1.80477854883065e-13 22 -847.505736434059 32 796.153149972084 13 1.80477854883065e-13 23 -847.505736434059 33 796.153149972084 70 1 0 3DFACE 8 body_half_outside 10 -990.771212819307 20 -410.390873558597 30 2148.21162800104 11 -1059.21725479392 21 -210.691411720441 31 2058.8118770109 12 -997.760836892423 22 -413.286070645571 32 2058.8118770109 13 -997.760836892423 23 -413.286070645571 33 2058.8118770109 70 1 0 3DFACE 8 body_half_outside 10 -1059.21725479392 20 -210.691411720441 30 2058.8118770109 11 -990.771212819307 21 -410.390873558597 31 2148.21162800104 12 -1051.79710945546 22 -209.215453044867 32 2148.21162800104 13 -1051.79710945546 23 -209.215453044867 33 2148.21162800104 70 1 0 3DFACE 8 body_half_outside 10 180.675224578544 20 -951.073041235166 30 2192.10870461431 11 653.750224578544 21 -978.669071362051 31 2158.48284461247 12 180.675224578544 22 -978.669071362051 32 2158.48284461247 13 180.675224578544 23 -978.669071362051 33 2158.48284461247 70 1 0 3DFACE 8 body_half_outside 10 653.750224578544 20 -978.669071362051 30 2158.48284461247 11 180.675224578544 21 -951.073041235166 31 2192.10870461431 12 653.750224578544 22 -951.073041235167 32 2192.10870461431 13 653.750224578544 23 -951.073041235167 33 2192.10870461431 70 1 0 3DFACE 8 body_half_outside 10 180.675224578544 20 -999.174771652236 30 2120.11937767794 11 653.750224578544 21 -1011.8021195433 31 2078.49259033054 12 180.675224578544 22 -1011.8021195433 32 2078.49259033054 13 180.675224578544 23 -1011.8021195433 33 2078.49259033054 70 1 0 3DFACE 8 body_half_outside 10 653.750224578544 20 -1011.8021195433 30 2078.49259033054 11 180.675224578544 21 -999.174771652236 31 2120.11937767794 12 653.750224578544 22 -999.174771652236 32 2120.11937767794 13 653.750224578544 23 -999.174771652236 33 2120.11937767794 70 1 0 3DFACE 8 body_half_outside 10 610.800045742856 20 -425.129378778605 30 587.016306884026 11 554.385481313987 21 -554.385481313987 31 631.979456702016 12 527.108194536515 22 -527.108194536515 32 587.016306884026 13 527.108194536515 23 -527.108194536515 33 587.016306884026 70 1 0 3DFACE 8 body_half_outside 10 554.385481313987 20 -554.385481313987 30 631.979456702016 11 610.800045742856 21 -425.129378778605 31 587.016306884026 12 651.888361812631 22 -435.577877671407 32 631.979456702016 13 651.888361812631 23 -435.577877671407 33 631.979456702016 70 3 0 3DFACE 8 body_half_outside 10 651.888361812631 20 -435.577877671407 30 631.979456702016 11 610.800045742856 21 -425.129378778605 31 587.016306884026 12 619.813665790805 22 -414.146250971868 32 587.016306884026 13 619.813665790805 23 -414.146250971868 33 587.016306884026 70 1 0 3DFACE 8 body_half_outside 10 653.750224578544 20 -966.763694030251 30 2207.79935740939 11 369.410361108008 21 -997.119327169824 31 2170.81091140737 12 653.750224578544 22 -997.119327169824 32 2170.81091140737 13 653.750224578544 23 -997.119327169824 33 2170.81091140737 70 1 0 3DFACE 8 body_half_outside 10 369.410361108008 20 -997.119327169824 30 2170.81091140737 11 653.750224578544 21 -966.763694030251 31 2207.79935740939 12 406.150729088795 22 -980.53459853389 32 2191.01946172118 13 406.150729088795 23 -980.53459853389 33 2191.01946172118 70 3 0 3DFACE 8 body_half_outside 10 406.150729088795 20 -980.53459853389 30 2191.01946172118 11 653.750224578544 21 -966.763694030251 31 2207.79935740939 12 422.745233791294 22 -966.763694030251 32 2207.79935740939 13 422.745233791294 23 -966.763694030251 33 2207.79935740939 70 1 0 3DFACE 8 body_half_outside 10 688.700045464263 20 -285.268899238265 30 587.016306884026 11 768.954752250597 21 -152.954610178005 31 631.979456702016 12 724.33953815002 22 -300.031260464802 32 631.979456702016 13 724.33953815002 23 -300.031260464802 33 631.979456702016 70 1 0 3DFACE 8 body_half_outside 10 768.954752250597 20 -152.954610178005 30 631.979456702016 11 688.700045464263 21 -285.268899238265 31 587.016306884026 12 707.864018296911 22 -222.093747280928 32 587.016306884026 13 707.864018296911 23 -222.093747280928 33 587.016306884026 70 13 0 3DFACE 8 body_half_outside 10 768.954752250597 20 -152.954610178005 30 631.979456702016 11 707.864018296911 21 -222.093747280928 31 587.016306884026 12 731.120068617964 22 -145.428823687577 32 587.016306884026 13 731.120068617964 23 -145.428823687577 33 587.016306884026 70 1 0 3DFACE 8 body_half_outside 10 778.906875772646 20 -154.93421062823 30 1054.1729200213 11 647.394912321209 21 -268.159752894786 31 1241.03564002131 12 733.714233519903 22 -303.914386430124 32 1054.1729200213 13 733.714233519903 23 -303.914386430124 33 1054.1729200213 70 1 0 3DFACE 8 body_half_outside 10 647.394912321209 20 -268.159752894786 30 1241.03564002131 11 778.906875772646 21 -154.93421062823 31 1054.1729200213 12 687.270773156591 22 -136.706656519426 32 1241.03564002131 13 687.270773156591 23 -136.706656519426 33 1241.03564002131 70 1 0 3DFACE 8 body_half_outside 10 -154.93421062823 20 -778.906875772646 30 1614.7610800213 11 -221.595075742173 21 -855.85089411917 31 1427.8983600213 12 -173.161764737035 22 -870.542978388701 32 1427.8983600213 13 -173.161764737035 23 -870.542978388701 33 1427.8983600213 70 1 0 3DFACE 8 body_half_outside 10 -221.595075742173 20 -855.85089411917 30 1427.8983600213 11 -154.93421062823 21 -778.906875772646 31 1614.7610800213 12 -307.339192645458 22 -829.840700617718 32 1427.8983600213 13 -307.339192645458 23 -829.840700617718 33 1427.8983600213 70 3 0 3DFACE 8 body_half_outside 10 -307.339192645458 20 -829.840700617718 30 1427.8983600213 11 -303.914386430124 21 -733.714233519903 31 1614.7610800213 12 -339.669019965462 22 -820.033554718597 32 1427.8983600213 13 -339.669019965462 23 -820.033554718597 33 1427.8983600213 70 1 0 3DFACE 8 body_half_outside 10 -303.914386430124 20 -733.714233519903 30 1614.7610800213 11 -307.339192645458 21 -829.840700617718 31 1427.8983600213 12 -154.93421062823 22 -778.906875772646 32 1614.7610800213 13 -154.93421062823 23 -778.906875772646 33 1614.7610800213 70 3 0 3DFACE 8 body_half_outside 10 -194.606371158736 20 -978.352295145615 30 1708.93950189862 11 -233.261861972698 21 -900.910544119288 31 1614.7610800213 12 -182.278551827737 22 -916.376162171087 32 1614.7610800213 13 -182.278551827737 23 -916.376162171087 33 1614.7610800213 70 1 0 3DFACE 8 body_half_outside 10 -233.261861972698 20 -900.910544119288 30 1614.7610800213 11 -194.606371158736 21 -978.352295145615 31 1708.93950189862 12 -323.520317681463 22 -873.530940912515 32 1614.7610800213 13 -323.520317681463 23 -873.530940912515 33 1614.7610800213 70 3 0 3DFACE 8 body_half_outside 10 -323.520317681463 20 -873.530940912515 30 1614.7610800213 11 -381.734128610353 21 -921.587710511788 31 1708.93950189862 12 -357.552241131723 22 -863.207469797099 32 1614.7610800213 13 -357.552241131723 23 -863.207469797099 33 1614.7610800213 70 1 0 3DFACE 8 body_half_outside 10 -381.734128610353 20 -921.587710511788 30 1708.93950189862 11 -323.520317681463 21 -873.530940912515 31 1614.7610800213 12 -194.606371158736 22 -978.352295145615 32 1708.93950189862 13 -194.606371158736 23 -978.352295145615 33 1708.93950189862 70 3 0 3DFACE 8 body_half_outside 10 -897.961029579872 20 -599.99837764929 30 2058.8118770109 11 -818.480102290147 21 -696.846172894875 31 2011.59249120966 12 -818.273878310588 22 -697.096462294947 32 2058.80160712022 13 -818.273878310588 23 -697.096462294947 33 2058.80160712022 70 1 0 3DFACE 8 body_half_outside 10 -818.480102290147 20 -696.846172894875 30 2011.59249120966 11 -897.961029579872 21 -599.99837764929 31 2058.8118770109 12 -897.961029579872 22 -599.99837764929 32 2011.5925230317 13 -897.961029579872 23 -599.99837764929 33 2011.5925230317 70 1 0 3DFACE 8 body_half_outside 10 164.047987682633 20 -824.724927080674 30 914.026066884025 11 0.0 21 -654.019523605455 31 1054.1729200213 12 0.0 22 -840.882243605455 32 914.026066884025 13 0.0 23 -840.882243605455 33 914.026066884025 70 1 0 3DFACE 8 body_half_outside 10 0.0 20 -654.019523605455 30 1054.1729200213 11 164.047987682633 21 -824.724927080674 31 914.026066884025 12 127.592879465023 22 -641.452721848564 32 1054.1729200213 13 127.592879465023 23 -641.452721848564 33 1054.1729200213 70 1 0 3DFACE 8 body_half_outside 10 180.675224578544 20 -999.174771652236 30 1950.28497564898 11 653.750224578544 21 -978.669071362052 31 1911.92150871446 12 180.675224578544 22 -978.669071362051 32 1911.92150871446 13 180.675224578544 23 -978.669071362051 33 1911.92150871446 70 1 0 3DFACE 8 body_half_outside 10 653.750224578544 20 -978.669071362052 30 1911.92150871446 11 180.675224578544 21 -999.174771652236 31 1950.28497564898 12 653.750224578544 22 -999.174771652236 32 1950.28497564898 13 653.750224578544 23 -999.174771652236 33 1950.28497564898 70 1 0 3DFACE 8 body_half_outside 10 1023.92467246733 20 -203.671280618918 30 1812.39759571907 11 1072.40303302985 21 1.80477854883065e-13 31 1922.19277204157 12 1051.79710945546 22 -209.215453044867 32 1922.19277204157 13 1051.79710945546 23 -209.215453044867 33 1922.19277204157 70 1 0 3DFACE 8 body_half_outside 10 1072.40303302985 20 1.80477854883065e-13 30 1922.19277204157 11 1023.92467246733 21 -203.671280618918 31 1812.39759571907 12 1043.98454271904 22 1.80477854883065e-13 32 1812.39759571907 13 1043.98454271904 23 1.80477854883065e-13 33 1812.39759571907 70 1 0 3DFACE 8 body_half_outside 10 670.391151613542 20 -794.16651328432 30 2257.10151651642 11 180.675224578544 21 -837.4569269514 31 2252.83778292244 12 180.675224578544 22 -794.16651328432 32 2257.10151651642 13 180.675224578544 23 -794.16651328432 33 2257.10151651642 70 1 0 3DFACE 8 body_half_outside 10 180.675224578544 20 -837.4569269514 30 2252.83778292244 11 670.391151613542 21 -794.16651328432 31 2257.10151651642 12 653.750224578544 22 -808.286792264463 32 2255.71079042387 13 653.750224578544 23 -808.286792264463 33 2255.71079042387 70 13 0 3DFACE 8 body_half_outside 10 653.750224578544 20 -837.4569269514 30 2252.83778292244 11 180.675224578544 21 -837.4569269514 31 2252.83778292244 12 653.750224578544 22 -808.286792264463 32 2255.71079042387 13 653.750224578544 23 -808.286792264463 33 2255.71079042387 70 2 0 3DFACE 8 body_half_outside 10 422.745233791294 20 -966.763694030251 30 2207.79935740939 11 399.51558814382 21 -964.515951276275 31 2258.00680432354 12 406.150729088795 22 -980.53459853389 32 2191.01946172118 13 406.150729088795 23 -980.53459853389 33 2191.01946172118 70 1 0 3DFACE 8 body_half_outside 10 399.51558814382 20 -964.515951276275 30 2258.00680432354 11 422.745233791294 21 -966.763694030251 31 2207.79935740939 12 475.358507495069 22 -929.775248028225 32 2238.15499054897 13 475.358507495069 23 -929.775248028225 33 2238.15499054897 70 13 0 3DFACE 8 body_half_outside 10 399.51558814382 20 -964.515951276275 30 2258.00680432354 11 475.358507495069 21 -929.775248028225 31 2238.15499054897 12 533.995170927003 22 -892.63511672065 32 2258.00680432354 13 533.995170927003 23 -892.63511672065 33 2258.00680432354 70 1 0 3DFACE 8 body_half_outside 10 -43.0469725205787 20 -1075.72879087574 30 2017.42442965997 11 -210.691411720441 21 -1059.21725479392 31 2011.5925230317 12 -39.9297534839436 22 -1076.03581015323 32 2011.5925230317 13 -39.9297534839436 23 -1076.03581015323 33 2011.5925230317 70 1 0 3DFACE 8 body_half_outside 10 -210.691411720441 20 -1059.21725479392 30 2011.5925230317 11 -43.0469725205787 21 -1075.72879087574 31 2017.42442965997 12 -210.691411720441 22 -1059.21725479392 32 2058.8118770109 13 -210.691411720441 23 -1059.21725479392 33 2058.8118770109 70 3 0 3DFACE 8 body_half_outside 10 -210.691411720441 20 -1059.21725479392 30 2058.8118770109 11 -43.0469725205787 21 -1075.72879087574 31 2017.42442965997 12 -45.6079918995535 22 -1075.47655248308 32 2025.86697911698 13 -45.6079918995535 23 -1075.47655248308 33 2025.86697911698 70 13 0 3DFACE 8 body_half_outside 10 -210.691411720441 20 -1059.21725479392 30 2058.8118770109 11 -45.6079918995535 21 -1075.47655248308 31 2025.86697911698 12 -46.4727423170739 22 -1075.39138200091 32 2034.64693744883 13 -46.4727423170739 23 -1075.39138200091 33 2034.64693744883 70 13 0 3DFACE 8 body_half_outside 10 -210.691411720441 20 -1059.21725479392 30 2058.8118770109 11 -46.4727423170739 21 -1075.39138200091 31 2034.64693744883 12 -45.6079918995532 22 -1075.47655248308 32 2043.42689578067 13 -45.6079918995532 23 -1075.47655248308 33 2043.42689578067 70 13 0 3DFACE 8 body_half_outside 10 -210.691411720441 20 -1059.21725479392 30 2058.8118770109 11 -45.6079918995532 21 -1075.47655248308 31 2043.42689578067 12 -43.0469725205787 22 -1075.72879087574 32 2051.86944523768 13 -43.0469725205787 23 -1075.72879087574 33 2051.86944523768 70 13 0 3DFACE 8 body_half_outside 10 -210.691411720441 20 -1059.21725479392 30 2058.8118770109 11 -43.0469725205787 21 -1075.72879087574 31 2051.86944523768 12 -39.3361654272124 22 -1076.09427347395 32 2058.8118770109 13 -39.3361654272124 23 -1076.09427347395 33 2058.8118770109 70 1 0 3DFACE 8 body_half_outside 10 -1023.92467246733 20 -203.671280618918 30 1812.39759571907 11 -921.587710511788 21 -381.734128610352 31 1708.93950189862 12 -964.515951276276 22 -399.515588143821 32 1812.39759571907 13 -964.515951276276 23 -399.515588143821 33 1812.39759571907 70 1 0 3DFACE 8 body_half_outside 10 -921.587710511788 20 -381.734128610352 30 1708.93950189862 11 -1023.92467246733 21 -203.671280618918 31 1812.39759571907 12 -978.352295145615 22 -194.606371158736 32 1708.93950189862 13 -978.352295145615 23 -194.606371158736 33 1708.93950189862 70 1 0 3DFACE 8 body_half_outside 10 -1051.79710945546 20 -209.215453044867 30 1922.19277204157 11 -964.515951276276 21 -399.515588143821 31 1812.39759571907 12 -990.771212819307 22 -410.390873558597 32 1922.19277204157 13 -990.771212819307 23 -410.390873558597 33 1922.19277204157 70 1 0 3DFACE 8 body_half_outside 10 -964.515951276276 20 -399.515588143821 30 1812.39759571907 11 -1051.79710945546 21 -209.215453044867 31 1922.19277204157 12 -1023.92467246733 22 -203.671280618918 32 1812.39759571907 13 -1023.92467246733 23 -203.671280618918 33 1812.39759571907 70 1 0 3DFACE 8 body_half_outside 10 -680.414811030127 20 -831.964968270127 30 2020.57508939225 11 -763.653083482914 21 -763.653083482914 31 2011.5925230317 12 -683.329149560927 22 -829.573232448602 32 2011.5925230317 13 -683.329149560927 23 -829.573232448602 33 2011.5925230317 70 1 0 3DFACE 8 body_half_outside 10 -763.653083482914 20 -763.653083482914 30 2011.5925230317 11 -680.414811030127 21 -831.964968270127 31 2020.57508939225 12 -763.653083482914 22 -763.653083482914 32 2058.8118770109 13 -763.653083482914 23 -763.653083482914 33 2058.8118770109 70 3 0 3DFACE 8 body_half_outside 10 -763.653083482914 20 -763.653083482914 30 2058.8118770109 11 -680.414811030127 21 -831.964968270127 31 2020.57508939225 12 -680.521947020029 22 -831.877044035484 32 2050.14904337117 13 -680.521947020029 23 -831.877044035484 33 2050.14904337117 70 13 0 3DFACE 8 body_half_outside 10 -763.653083482914 20 -763.653083482914 30 2058.8118770109 11 -680.521947020029 21 -831.877044035484 31 2050.14904337117 12 -683.397324988288 22 -829.51728232132 32 2058.8118770109 13 -683.397324988288 23 -829.51728232132 33 2058.8118770109 70 1 0 3DFACE 8 body_half_outside 10 733.714233519903 20 -303.914386430124 30 1054.1729200213 11 582.640028068573 21 -389.307620352121 31 1241.03564002131 12 660.325364744673 22 -441.215302798659 32 1054.1729200213 13 660.325364744673 23 -441.215302798659 33 1054.1729200213 70 1 0 3DFACE 8 body_half_outside 10 582.640028068573 20 -389.307620352121 30 1241.03564002131 11 733.714233519903 21 -303.914386430124 31 1054.1729200213 12 647.394912321209 22 -268.159752894786 32 1241.03564002131 13 647.394912321209 23 -268.159752894786 33 1241.03564002131 70 1 0 3DFACE 8 body_half_outside 10 -733.714233519903 20 -303.914386430124 30 1614.7610800213 11 -842.852042179446 21 -264.446547810842 31 1427.8983600213 12 -820.033554718597 22 -339.669019965462 32 1427.8983600213 13 -820.033554718597 23 -339.669019965462 33 1427.8983600213 70 1 0 3DFACE 8 body_half_outside 10 -842.852042179446 20 -264.446547810842 30 1427.8983600213 11 -733.714233519903 21 -303.914386430124 31 1614.7610800213 12 -778.906875772646 22 -154.93421062823 32 1614.7610800213 13 -778.906875772646 23 -154.93421062823 33 1614.7610800213 70 13 0 3DFACE 8 body_half_outside 10 -842.852042179446 20 -264.446547810842 30 1427.8983600213 11 -778.906875772646 21 -154.93421062823 31 1614.7610800213 12 -868.904108801094 22 -178.564393729439 32 1427.8983600213 13 -868.904108801094 23 -178.564393729439 33 1427.8983600213 70 3 0 3DFACE 8 body_half_outside 10 -868.904108801094 20 -178.564393729439 30 1427.8983600213 11 -778.906875772646 21 -154.93421062823 31 1614.7610800213 12 -870.542978388701 22 -173.161764737035 32 1427.8983600213 13 -870.542978388701 23 -173.161764737035 33 1427.8983600213 70 1 0 3DFACE 8 body_half_outside 10 -978.352295145615 20 -194.606371158736 30 1708.93950189862 11 -863.207469797099 21 -357.552241131722 31 1614.7610800213 12 -921.587710511788 22 -381.734128610352 32 1708.93950189862 13 -921.587710511788 23 -381.734128610352 33 1708.93950189862 70 1 0 3DFACE 8 body_half_outside 10 -863.207469797099 20 -357.552241131722 30 1614.7610800213 11 -978.352295145615 21 -194.606371158736 31 1708.93950189862 12 -887.227323624272 22 -278.369394820258 32 1614.7610800213 13 -887.227323624272 23 -278.369394820258 33 1614.7610800213 70 3 0 3DFACE 8 body_half_outside 10 -887.227323624272 20 -278.369394820258 30 1614.7610800213 11 -978.352295145615 21 -194.606371158736 31 1708.93950189862 12 -914.651018607606 22 -187.965588003526 32 1614.7610800213 13 -914.651018607606 23 -187.965588003526 33 1614.7610800213 70 3 0 3DFACE 8 body_half_outside 10 -914.651018607606 20 -187.965588003526 30 1614.7610800213 11 -978.352295145615 21 -194.606371158736 31 1708.93950189862 12 -916.376162171087 22 -182.278551827736 32 1614.7610800213 13 -916.376162171087 23 -182.278551827736 33 1614.7610800213 70 1 0 3DFACE 8 body_half_outside 10 677.173649450057 20 -452.47296672438 30 682.822310520627 11 772.176090266528 21 -319.845809128627 31 738.078199114136 12 694.940121314314 22 -464.344143695271 32 738.078199114136 13 694.940121314314 23 -464.344143695271 33 738.078199114136 70 1 0 3DFACE 8 body_half_outside 10 772.176090266528 20 -319.845809128627 30 738.078199114136 11 677.173649450057 21 -452.47296672438 31 682.822310520627 12 752.435044439405 22 -311.668800211604 32 682.822310520627 13 752.435044439405 23 -311.668800211604 33 682.822310520627 70 1 0 3DFACE 8 body_half_outside 10 -311.668800211604 20 -752.435044439405 30 682.822310520627 11 -435.577877671407 21 -651.888361812631 31 631.979456702016 12 -300.031260464802 22 -724.33953815002 32 631.979456702016 13 -300.031260464802 23 -724.33953815002 33 631.979456702016 70 1 0 3DFACE 8 body_half_outside 10 -435.577877671407 20 -651.888361812631 30 631.979456702016 11 -311.668800211604 21 -752.435044439405 31 682.822310520627 12 -452.472966724379 22 -677.173649450057 32 682.822310520627 13 -452.472966724379 23 -677.173649450057 33 682.822310520627 70 1 0 3DFACE 8 body_half_outside 10 -319.845809128627 20 -772.176090266528 30 738.078199114136 11 -452.472966724379 21 -677.173649450057 31 682.822310520627 12 -311.668800211604 22 -752.435044439405 32 682.822310520627 13 -311.668800211604 23 -752.435044439405 33 682.822310520627 70 1 0 3DFACE 8 body_half_outside 10 -452.472966724379 20 -677.173649450057 30 682.822310520627 11 -319.845809128627 21 -772.176090266528 31 738.078199114136 12 -464.344143695271 22 -694.940121314314 32 738.078199114136 13 -464.344143695271 23 -694.940121314314 33 738.078199114136 70 1 0 3DFACE 8 body_half_outside 10 42.6716706222411 20 -976.334157259822 30 2043.42689578067 11 43.536421039762 21 -1075.68058440422 31 2034.64693744883 12 42.6716706222413 22 -1075.76575488639 32 2043.42689578067 13 42.6716706222413 23 -1075.76575488639 33 2043.42689578067 70 1 0 3DFACE 8 body_half_outside 10 43.536421039762 20 -1075.68058440422 30 2034.64693744883 11 42.6716706222411 21 -976.334157259822 31 2043.42689578067 12 43.4817324497669 22 -976.746706756077 32 2035.2022000213 13 43.4817324497669 23 -976.746706756077 33 2035.2022000213 70 13 0 3DFACE 8 body_half_outside 10 43.5364210397618 20 -976.708082157409 30 2034.64693744883 11 43.536421039762 21 -1075.68058440422 31 2034.64693744883 12 43.4817324497669 22 -976.746706756077 32 2035.2022000213 13 43.4817324497669 23 -976.746706756077 33 2035.2022000213 70 2 0 3DFACE 8 body_half_outside 10 -33.2912055279292 20 -1075.947598755 30 2002.82389255955 11 -38.8881027186488 21 -975.669199508814 31 2009.6437315188 12 -38.8881027186482 22 -1075.973485995 32 2009.6437315188 13 -38.8881027186482 23 -1075.973485995 33 2009.6437315188 70 1 0 3DFACE 8 body_half_outside 10 -38.8881027186488 20 -975.669199508814 30 2009.6437315188 11 -33.2912055279292 21 -1075.947598755 31 2002.82389255955 12 -33.2912055279291 22 -975.812207442705 32 2002.82389255955 13 -33.2912055279291 23 -975.812207442705 33 2002.82389255955 70 1 0 3DFACE 8 body_half_outside 10 -690.554572920556 20 -286.037069662455 30 1427.8983600213 11 -824.724927080674 21 -164.047987682633 31 1241.03564002131 12 -776.873894119249 22 -321.791703197793 32 1241.03564002131 13 -776.873894119249 23 -321.791703197793 33 1241.03564002131 70 1 0 3DFACE 8 body_half_outside 10 -824.724927080674 20 -164.047987682633 30 1241.03564002131 11 -690.554572920556 21 -286.037069662455 31 1427.8983600213 12 -733.088824464619 22 -145.820433573828 32 1427.8983600213 13 -733.088824464619 23 -145.820433573828 33 1427.8983600213 70 1 0 3DFACE 8 body_half_outside 10 651.888361812631 20 -435.577877671407 30 631.979456702016 11 752.435044439405 21 -311.668800211604 31 682.822310520627 12 677.173649450057 22 -452.47296672438 32 682.822310520627 13 677.173649450057 23 -452.47296672438 33 682.822310520627 70 1 0 3DFACE 8 body_half_outside 10 752.435044439405 20 -311.668800211604 30 682.822310520627 11 651.888361812631 21 -435.577877671407 31 631.979456702016 12 724.33953815002 22 -300.031260464802 32 631.979456702016 13 724.33953815002 23 -300.031260464802 33 631.979456702016 70 1 0 3DFACE 8 body_half_outside 10 0.0 20 -840.882243605455 30 2549.0746800213 11 -164.047987682633 21 -824.724927080674 31 2455.6433200213 12 0.0 22 -840.882243605455 32 2455.6433200213 13 0.0 23 -840.882243605455 33 2455.6433200213 70 1 0 3DFACE 8 body_half_outside 10 -164.047987682633 20 -824.724927080674 30 2455.6433200213 11 0.0 21 -840.882243605455 31 2549.0746800213 12 -164.047987682633 22 -824.724927080674 32 2549.0746800213 13 -164.047987682633 23 -824.724927080674 33 2549.0746800213 70 3 0 3DFACE 8 body_half_outside 10 -164.047987682633 20 -824.724927080674 30 2549.0746800213 11 0.0 21 -840.882243605455 31 2549.0746800213 12 -42.4327807980229 22 -836.702979476311 32 2549.0746800213 13 -42.4327807980229 23 -836.702979476311 33 2549.0746800213 70 13 0 3DFACE 8 body_half_outside 10 -164.047987682633 20 -824.724927080674 30 2549.0746800213 11 -42.4327807980229 21 -836.702979476311 31 2549.0746800213 12 -126.903621448811 22 -828.383327837855 32 2549.0746800213 13 -126.903621448811 23 -828.383327837855 33 2549.0746800213 70 1 0 3DFACE 8 body_half_outside 10 -706.098253038492 20 -471.799768952456 30 855.37186879426 11 -599.277053327022 21 -599.277053327022 31 796.153149972084 12 -600.487204246519 22 -600.487204246519 32 855.37186879426 13 -600.487204246519 23 -600.487204246519 33 855.37186879426 70 1 0 3DFACE 8 body_half_outside 10 -599.277053327022 20 -599.277053327022 30 796.153149972084 11 -706.098253038492 21 -471.799768952456 31 855.37186879426 12 -704.67526609701 22 -470.84895947612 32 796.153149972084 13 -704.67526609701 23 -470.84895947612 33 796.153149972084 70 1 0 3DFACE 8 body_half_outside 10 -26.4713665686843 20 -976.215346903032 30 2072.06687952882 11 -18.690668427508 21 -1076.65401668716 31 2076.22574933075 12 -26.4713665686845 22 -1076.23963198666 32 2072.06687952882 13 -26.4713665686845 23 -1076.23963198666 33 2072.06687952882 70 1 0 3DFACE 8 body_half_outside 10 -18.690668427508 20 -1076.65401668716 30 2076.22574933075 11 -26.4713665686843 21 -976.215346903032 31 2072.06687952882 12 -18.690668427508 22 -976.732727149702 32 2076.22574933075 13 -18.690668427508 23 -976.732727149702 33 2076.22574933075 70 1 0 3DFACE 8 body_half_outside 10 -321.791703197793 20 -776.87389411925 30 2549.0746800213 11 -467.169144021928 21 -699.168033082722 31 2455.6433200213 12 -321.791703197793 22 -776.873894119249 32 2455.6433200213 13 -321.791703197793 23 -776.873894119249 33 2455.6433200213 70 1 0 3DFACE 8 body_half_outside 10 -467.169144021928 20 -699.168033082722 30 2455.6433200213 11 -321.791703197793 21 -776.87389411925 31 2549.0746800213 12 -467.169144021929 22 -699.168033082722 32 2549.0746800213 13 -467.169144021929 23 -699.168033082722 33 2549.0746800213 70 3 0 3DFACE 8 body_half_outside 10 -467.169144021929 20 -699.168033082722 30 2549.0746800213 11 -321.791703197793 21 -776.87389411925 31 2549.0746800213 12 -368.760188696337 22 -751.768715581535 32 2549.0746800213 13 -368.760188696337 23 -751.768715581535 33 2549.0746800213 70 13 0 3DFACE 8 body_half_outside 10 -467.169144021929 20 -699.168033082722 30 2549.0746800213 11 -368.760188696337 21 -751.768715581535 31 2549.0746800213 12 -443.635339973588 22 -711.747113417844 32 2549.0746800213 13 -443.635339973588 23 -711.747113417844 33 2549.0746800213 70 1 0 3DFACE 8 body_half_outside 10 -300.031260464802 20 -724.33953815002 30 631.979456702016 11 -414.146250971868 21 -619.813665790805 31 587.016306884026 12 -285.268899238265 22 -688.700045464263 32 587.016306884026 13 -285.268899238265 23 -688.700045464263 33 587.016306884026 70 1 0 3DFACE 8 body_half_outside 10 -414.146250971868 20 -619.813665790805 30 587.016306884026 11 -300.031260464802 21 -724.33953815002 31 631.979456702016 12 -435.577877671407 22 -651.888361812631 32 631.979456702016 13 -435.577877671407 23 -651.888361812631 33 631.979456702016 70 1 0 3DFACE 8 body_half_outside 10 776.87389411925 20 -321.791703197793 30 914.026066884025 11 641.452721848564 21 -127.592879465023 31 1054.1729200213 12 604.235251721863 22 -250.282436127116 32 1054.1729200213 13 604.235251721863 23 -250.282436127116 33 1054.1729200213 70 1 0 3DFACE 8 body_half_outside 10 641.452721848564 20 -127.592879465023 30 1054.1729200213 11 776.87389411925 21 -321.791703197793 31 914.026066884025 12 824.724927080674 22 -164.047987682633 32 914.026066884025 13 824.724927080674 23 -164.047987682633 33 914.026066884025 70 1 0 3DFACE 8 body_half_outside 10 -26.4713665686843 20 -976.215346903032 30 2072.06687952882 11 -33.2912055279292 21 -1076.04157769881 31 2066.4699823381 12 -33.2912055279292 22 -975.878683928089 32 2066.4699823381 13 -33.2912055279292 23 -975.878683928089 33 2066.4699823381 70 1 0 3DFACE 8 body_half_outside 10 -33.2912055279292 20 -1076.04157769881 30 2066.4699823381 11 -26.4713665686843 21 -976.215346903032 31 2072.06687952882 12 -26.4713665686845 22 -1076.23963198666 32 2072.06687952882 13 -26.4713665686845 23 -1076.23963198666 33 2072.06687952882 70 1 0 3DFACE 8 body_half_outside 10 653.750224578544 20 -966.763694030251 30 2207.79935740939 11 475.358507495069 21 -929.775248028225 31 2238.15499054897 12 422.745233791294 22 -966.763694030251 32 2207.79935740939 13 422.745233791294 23 -966.763694030251 33 2207.79935740939 70 1 0 3DFACE 8 body_half_outside 10 475.358507495069 20 -929.775248028225 30 2238.15499054897 11 653.750224578544 21 -966.763694030251 31 2207.79935740939 12 653.750224578544 22 -929.775248028225 32 2238.15499054897 13 653.750224578544 23 -929.775248028225 33 2238.15499054897 70 1 0 3DFACE 8 body_half_outside 10 533.995007415167 20 -892.635204119545 30 1812.39759571907 11 653.750224578544 21 -929.775248028225 31 1832.24936277796 12 475.358481968201 22 -929.775248028225 32 1832.24936277796 13 475.358481968201 23 -929.775248028225 33 1832.24936277796 70 1 0 3DFACE 8 body_half_outside 10 653.750224578544 20 -929.775248028225 30 1832.24936277796 11 533.995007415167 21 -892.635204119545 31 1812.39759571907 12 540.896876185886 22 -887.575434400246 32 1809.69309245876 13 540.896876185886 23 -887.575434400246 33 1809.69309245876 70 13 0 3DFACE 8 body_half_outside 10 653.750224578544 20 -929.775248028225 30 1832.24936277796 11 540.896876185886 21 -887.575434400246 31 1809.69309245876 12 653.750224578544 22 -887.575434400246 32 1809.69309245876 13 653.750224578544 23 -887.575434400246 33 1809.69309245876 70 1 0 3DFACE 8 body_half_outside 10 990.771212819308 20 -410.390873558597 30 2148.21162800104 11 868.04142298445 21 -580.006735667279 31 2258.00680432354 12 891.670534105407 22 -595.795202951324 32 2148.21162800104 13 891.670534105407 23 -595.795202951324 33 2148.21162800104 70 1 0 3DFACE 8 body_half_outside 10 868.04142298445 20 -580.006735667279 30 2258.00680432354 11 990.771212819308 21 -410.390873558597 31 2148.21162800104 12 964.515951276275 22 -399.51558814382 32 2258.00680432354 13 964.515951276275 23 -399.51558814382 33 2258.00680432354 70 1 0 3DFACE 8 body_half_outside 10 -845.012275898089 20 -788.258546505553 30 1988.01128244689 11 -781.35466353334 21 -731.718944065101 31 1933.51796332002 12 -828.138788259274 22 -805.723050021943 32 1963.78062144053 13 -828.138788259274 23 -805.723050021943 33 1963.78062144053 70 1 0 3DFACE 8 body_half_outside 10 -781.35466353334 20 -731.718944065101 30 1933.51796332002 11 -845.012275898089 21 -788.258546505553 31 1988.01128244689 12 -804.883917627287 22 -707.527532613081 32 1967.25758629213 13 -804.883917627287 23 -707.527532613081 33 1967.25758629213 70 1 0 3DFACE 8 body_half_outside 10 -210.691411720441 20 -1059.21725479392 30 2058.8118770109 11 -413.286070645571 21 -997.760836892423 31 2011.5925230317 12 -210.691411720441 22 -1059.21725479392 32 2011.5925230317 13 -210.691411720441 23 -1059.21725479392 33 2011.5925230317 70 1 0 3DFACE 8 body_half_outside 10 -413.286070645571 20 -997.760836892423 30 2011.5925230317 11 -210.691411720441 21 -1059.21725479392 31 2058.8118770109 12 -413.286070645571 22 -997.760836892423 32 2058.8118770109 13 -413.286070645571 23 -997.760836892423 33 2058.8118770109 70 1 0 3DFACE 8 body_half_outside 10 619.813665790805 20 -414.146250971868 30 587.016306884026 11 724.33953815002 21 -300.031260464802 31 631.979456702016 12 651.888361812631 22 -435.577877671407 32 631.979456702016 13 651.888361812631 23 -435.577877671407 33 631.979456702016 70 1 0 3DFACE 8 body_half_outside 10 724.33953815002 20 -300.031260464802 30 631.979456702016 11 619.813665790805 21 -414.146250971868 31 587.016306884026 12 648.718890655847 22 -360.068378836192 32 587.016306884026 13 648.718890655847 23 -360.068378836192 33 587.016306884026 70 13 0 3DFACE 8 body_half_outside 10 724.33953815002 20 -300.031260464802 30 631.979456702016 11 648.718890655847 21 -360.068378836192 31 587.016306884026 12 684.232404647772 22 -293.627267317059 32 587.016306884026 13 684.232404647772 23 -293.627267317059 33 587.016306884026 70 13 0 3DFACE 8 body_half_outside 10 724.33953815002 20 -300.031260464802 30 631.979456702016 11 684.232404647772 21 -293.627267317059 31 587.016306884026 12 688.700045464263 22 -285.268899238265 32 587.016306884026 13 688.700045464263 23 -285.268899238265 33 587.016306884026 70 1 0 3DFACE 8 body_half_outside 10 1.80477854883065e-13 20 -1043.98454271904 30 1812.39759571907 11 -194.606371158736 21 -978.352295145615 31 1708.93950189862 12 1.80477854883065e-13 22 -997.519349743284 32 1708.93950189862 13 1.80477854883065e-13 23 -997.519349743284 33 1708.93950189862 70 1 0 3DFACE 8 body_half_outside 10 -194.606371158736 20 -978.352295145615 30 1708.93950189862 11 1.80477854883065e-13 21 -1043.98454271904 31 1812.39759571907 12 -203.671280618918 22 -1023.92467246733 32 1812.39759571907 13 -203.671280618918 23 -1023.92467246733 33 1812.39759571907 70 1 0 3DFACE 8 body_half_outside 10 -286.037069662455 20 -690.554572920556 30 1427.8983600213 11 -467.169144021928 21 -699.168033082722 31 1241.03564002131 12 -321.791703197793 22 -776.873894119249 32 1241.03564002131 13 -321.791703197793 23 -776.873894119249 33 1241.03564002131 70 1 0 3DFACE 8 body_half_outside 10 -467.169144021928 20 -699.168033082722 30 1241.03564002131 11 -286.037069662455 21 -690.554572920556 31 1427.8983600213 12 -415.26146157539 22 -621.482696406623 32 1427.8983600213 13 -415.26146157539 23 -621.482696406623 33 1427.8983600213 70 1 0 3DFACE 8 body_half_outside 10 -925.06395772174 20 -94.0698833092507 30 2455.6433200213 11 -840.882243605455 21 1.80477854883065e-13 31 2455.6433200213 12 -934.329032542513 22 3.60955709766131e-13 32 2455.6433200213 13 -934.329032542513 23 3.60955709766131e-13 33 2455.6433200213 70 1 0 3DFACE 8 body_half_outside 10 -840.882243605455 20 1.80477854883065e-13 30 2455.6433200213 11 -925.06395772174 21 -94.0698833092507 31 2455.6433200213 12 -916.376162171087 22 -182.278551827736 32 2455.6433200213 13 -916.376162171087 23 -182.278551827736 33 2455.6433200213 70 13 0 3DFACE 8 body_half_outside 10 -840.882243605455 20 1.80477854883065e-13 30 2455.6433200213 11 -916.376162171087 21 -182.278551827736 31 2455.6433200213 12 -914.651018565421 22 -187.965588142593 32 2455.6433200213 13 -914.651018565421 23 -187.965588142593 33 2455.6433200213 70 13 0 3DFACE 8 body_half_outside 10 -840.882243605455 20 1.80477854883065e-13 30 2455.6433200213 11 -914.651018565421 21 -187.965588142593 31 2455.6433200213 12 -887.22732313789 22 -278.369396423646 32 2455.6433200213 13 -887.22732313789 23 -278.369396423646 33 2455.6433200213 70 13 0 3DFACE 8 body_half_outside 10 -840.882243605455 20 1.80477854883065e-13 30 2455.6433200213 11 -887.22732313789 21 -278.369396423646 31 2455.6433200213 12 -863.207469797099 22 -357.552241131722 32 2455.6433200213 13 -863.207469797099 23 -357.552241131722 33 2455.6433200213 70 13 0 3DFACE 8 body_half_outside 10 -840.882243605455 20 1.80477854883065e-13 30 2455.6433200213 11 -863.207469797099 21 -357.552241131722 31 2455.6433200213 12 -857.607798059122 22 -368.028490102694 32 2455.6433200213 13 -857.607798059122 23 -368.028490102694 33 2455.6433200213 70 13 0 3DFACE 8 body_half_outside 10 -840.882243605455 20 1.80477854883065e-13 30 2455.6433200213 11 -857.607798059122 21 -368.028490102694 31 2455.6433200213 12 -813.095615905849 22 -451.304925633068 32 2455.6433200213 13 -813.095615905849 23 -451.304925633068 33 2455.6433200213 70 13 0 3DFACE 8 body_half_outside 10 -840.882243605455 20 1.80477854883065e-13 30 2455.6433200213 11 -813.095615905849 21 -451.304925633068 31 2455.6433200213 12 -824.724927080674 22 -164.047987682633 32 2455.6433200213 13 -824.724927080674 23 -164.047987682633 33 2455.6433200213 70 3 0 3DFACE 8 body_half_outside 10 -824.724927080674 20 -164.047987682633 30 2455.6433200213 11 -813.095615905849 21 -451.304925633068 31 2455.6433200213 12 -776.873894119249 22 -321.791703197793 32 2455.6433200213 13 -776.873894119249 23 -321.791703197793 33 2455.6433200213 70 3 0 3DFACE 8 body_half_outside 10 -776.873894119249 20 -321.791703197793 30 2455.6433200213 11 -813.095615905849 21 -451.304925633068 31 2455.6433200213 12 -776.866198451135 22 -519.085398326623 32 2455.6433200213 13 -776.866198451135 23 -519.085398326623 33 2455.6433200213 70 13 0 3DFACE 8 body_half_outside 10 -776.873894119249 20 -321.791703197793 30 2455.6433200213 11 -776.866198451135 21 -519.085398326623 31 2455.6433200213 12 -699.168033082722 22 -467.169144021928 32 2455.6433200213 13 -699.168033082722 23 -467.169144021928 33 2455.6433200213 70 3 0 3DFACE 8 body_half_outside 10 -699.168033082722 20 -467.169144021928 30 2455.6433200213 11 -776.866198451135 21 -519.085398326623 31 2455.6433200213 12 -765.568613945096 22 -532.851544877859 32 2455.6433200213 13 -765.568613945096 23 -532.851544877859 33 2455.6433200213 70 13 0 3DFACE 8 body_half_outside 10 -699.168033082722 20 -467.169144021928 30 2455.6433200213 11 -765.568613945096 21 -532.851544877859 31 2455.6433200213 12 -705.689427437034 22 -605.814544747273 32 2455.6433200213 13 -705.689427437034 23 -605.814544747273 33 2455.6433200213 70 13 0 3DFACE 8 body_half_outside 10 -699.168033082722 20 -467.169144021928 30 2455.6433200213 11 -705.689427437034 21 -605.814544747273 31 2455.6433200213 12 -660.670394770277 22 -660.670394770277 32 2455.6433200213 13 -660.670394770277 23 -660.670394770277 33 2455.6433200213 70 13 0 3DFACE 8 body_half_outside 10 -699.168033082722 20 -467.169144021928 30 2455.6433200213 11 -660.670394770277 21 -660.670394770277 31 2455.6433200213 12 -594.593536632775 22 -594.593536632776 32 2455.6433200213 13 -594.593536632775 23 -594.593536632776 33 2455.6433200213 70 3 0 3DFACE 8 body_half_outside 10 -594.593536632775 20 -594.593536632776 30 2455.6433200213 11 -660.670394770277 21 -660.670394770277 31 2455.6433200213 12 -642.325255137832 22 -675.725861781415 32 2455.6433200213 13 -642.325255137832 23 -675.725861781415 33 2455.6433200213 70 13 0 3DFACE 8 body_half_outside 10 -594.593536632775 20 -594.593536632776 30 2455.6433200213 11 -642.325255137832 21 -675.725861781415 31 2455.6433200213 12 -569.385750357394 22 -735.585766368266 32 2455.6433200213 13 -569.385750357394 23 -735.585766368266 33 2455.6433200213 70 13 0 3DFACE 8 body_half_outside 10 -594.593536632775 20 -594.593536632776 30 2455.6433200213 11 -569.385750357394 21 -735.585766368266 31 2455.6433200213 12 -467.169144021928 22 -699.168033082722 32 2455.6433200213 13 -467.169144021928 23 -699.168033082722 33 2455.6433200213 70 3 0 3DFACE 8 body_half_outside 10 -467.169144021928 20 -699.168033082722 30 2455.6433200213 11 -569.385750357394 21 -735.585766368266 31 2455.6433200213 12 -519.085398326623 22 -776.866198451135 32 2455.6433200213 13 -519.085398326623 23 -776.866198451135 33 2455.6433200213 70 13 0 3DFACE 8 body_half_outside 10 -467.169144021928 20 -699.168033082722 30 2455.6433200213 11 -519.085398326623 21 -776.866198451135 31 2455.6433200213 12 -492.93632885036 22 -790.843167280949 32 2455.6433200213 13 -492.93632885036 23 -790.843167280949 33 2455.6433200213 70 13 0 3DFACE 8 body_half_outside 10 -467.169144021928 20 -699.168033082722 30 2455.6433200213 11 -492.93632885036 21 -790.843167280949 31 2455.6433200213 12 -409.740280777215 22 -835.312381443142 32 2455.6433200213 13 -409.740280777215 23 -835.312381443142 33 2455.6433200213 70 13 0 3DFACE 8 body_half_outside 10 -467.169144021928 20 -699.168033082722 30 2455.6433200213 11 -409.740280777215 21 -835.312381443142 31 2455.6433200213 12 -321.791703197793 22 -776.873894119249 32 2455.6433200213 13 -321.791703197793 23 -776.873894119249 33 2455.6433200213 70 3 0 3DFACE 8 body_half_outside 10 -321.791703197793 20 -776.873894119249 30 2455.6433200213 11 -409.740280777215 21 -835.312381443142 31 2455.6433200213 12 -357.552241131723 22 -863.207469797099 32 2455.6433200213 13 -357.552241131723 23 -863.207469797099 33 2455.6433200213 70 13 0 3DFACE 8 body_half_outside 10 -321.791703197793 20 -776.873894119249 30 2455.6433200213 11 -357.552241131723 21 -863.207469797099 31 2455.6433200213 12 -323.520317728025 22 -873.53094089839 32 2455.6433200213 13 -323.520317728025 23 -873.53094089839 33 2455.6433200213 70 13 0 3DFACE 8 body_half_outside 10 -321.791703197793 20 -776.873894119249 30 2455.6433200213 11 -323.520317728025 21 -873.53094089839 31 2455.6433200213 12 -233.261861254001 22 -900.910544337303 32 2455.6433200213 13 -233.261861254001 23 -900.910544337303 33 2455.6433200213 70 13 0 3DFACE 8 body_half_outside 10 -321.791703197793 20 -776.873894119249 30 2455.6433200213 11 -233.261861254001 21 -900.910544337303 31 2455.6433200213 12 -164.047987682633 22 -824.724927080674 32 2455.6433200213 13 -164.047987682633 23 -824.724927080674 33 2455.6433200213 70 3 0 3DFACE 8 body_half_outside 10 -164.047987682633 20 -824.724927080674 30 2455.6433200213 11 -233.261861254001 21 -900.910544337303 31 2455.6433200213 12 -182.278551827737 22 -916.376162171087 32 2455.6433200213 13 -182.278551827737 23 -916.376162171087 33 2455.6433200213 70 13 0 3DFACE 8 body_half_outside 10 -164.047987682633 20 -824.724927080674 30 2455.6433200213 11 -182.278551827737 21 -916.376162171087 31 2455.6433200213 12 -141.006393478031 22 -920.441114966529 32 2455.6433200213 13 -141.006393478031 23 -920.441114966529 33 2455.6433200213 70 13 0 3DFACE 8 body_half_outside 10 -164.047987682633 20 -824.724927080674 30 2455.6433200213 11 -141.006393478031 21 -920.441114966529 31 2455.6433200213 12 0.0 22 -840.882243605455 32 2455.6433200213 13 0.0 23 -840.882243605455 33 2455.6433200213 70 3 0 3DFACE 8 body_half_outside 10 0.0 20 -840.882243605455 30 2455.6433200213 11 -141.006393478031 21 -920.441114966529 31 2455.6433200213 12 -47.1482978123039 22 -929.685330525077 32 2455.6433200213 13 -47.1482978123039 23 -929.685330525077 33 2455.6433200213 70 13 0 3DFACE 8 body_half_outside 10 0.0 20 -840.882243605455 30 2455.6433200213 11 -47.1482978123039 21 -929.685330525077 31 2455.6433200213 12 1.80477854883065e-13 22 -934.329032542513 32 2455.6433200213 13 1.80477854883065e-13 23 -934.329032542513 33 2455.6433200213 70 13 0 3DFACE 8 body_half_outside 10 0.0 20 -840.882243605455 30 2455.6433200213 11 1.80477854883065e-13 21 -934.329032542513 31 2455.6433200213 12 164.047987682633 22 -824.724927080674 32 2455.6433200213 13 164.047987682633 23 -824.724927080674 33 2455.6433200213 70 3 0 3DFACE 8 body_half_outside 10 164.047987682633 20 -824.724927080674 30 2455.6433200213 11 1.80477854883065e-13 21 -934.329032542513 31 2455.6433200213 12 47.148335412588 22 -929.685326821772 32 2455.6433200213 13 47.148335412588 23 -929.685326821772 33 2455.6433200213 70 13 0 3DFACE 8 body_half_outside 10 164.047987682633 20 -824.724927080674 30 2455.6433200213 11 47.148335412588 21 -929.685326821772 31 2455.6433200213 12 141.00638791784 22 -920.44111551416 32 2455.6433200213 13 141.00638791784 23 -920.44111551416 33 2455.6433200213 70 13 0 3DFACE 8 body_half_outside 10 164.047987682633 20 -824.724927080674 30 2455.6433200213 11 141.00638791784 21 -920.44111551416 31 2455.6433200213 12 182.278551827736 22 -916.376162171087 32 2455.6433200213 13 182.278551827736 23 -916.376162171087 33 2455.6433200213 70 13 0 3DFACE 8 body_half_outside 10 164.047987682633 20 -824.724927080674 30 2455.6433200213 11 182.278551827736 21 -916.376162171087 31 2455.6433200213 12 321.791703197793 22 -776.87389411925 32 2455.6433200213 13 321.791703197793 23 -776.87389411925 33 2455.6433200213 70 3 0 3DFACE 8 body_half_outside 10 321.791703197793 20 -776.87389411925 30 2455.6433200213 11 182.278551827736 21 -916.376162171087 31 2455.6433200213 12 233.261899594599 22 -900.91053270681 32 2455.6433200213 13 233.261899594599 23 -900.91053270681 33 2455.6433200213 70 13 0 3DFACE 8 body_half_outside 10 321.791703197793 20 -776.87389411925 30 2455.6433200213 11 233.261899594599 21 -900.91053270681 31 2455.6433200213 12 323.520353242804 22 -873.5309301251 32 2455.6433200213 13 323.520353242804 23 -873.5309301251 33 2455.6433200213 70 13 0 3DFACE 8 body_half_outside 10 321.791703197793 20 -776.87389411925 30 2455.6433200213 11 323.520353242804 21 -873.5309301251 31 2455.6433200213 12 467.169144021928 22 -699.168033082722 32 2455.6433200213 13 467.169144021928 23 -699.168033082722 33 2455.6433200213 70 3 0 3DFACE 8 body_half_outside 10 467.169144021928 20 -699.168033082722 30 2455.6433200213 11 323.520353242804 21 -873.5309301251 31 2455.6433200213 12 357.552241131722 22 -863.2074697971 32 2455.6433200213 13 357.552241131722 23 -863.2074697971 33 2455.6433200213 70 13 0 3DFACE 8 body_half_outside 10 467.169144021928 20 -699.168033082722 30 2455.6433200213 11 357.552241131722 21 -863.2074697971 31 2455.6433200213 12 409.740310523406 22 -835.312365543472 32 2455.6433200213 13 409.740310523406 23 -835.312365543472 33 2455.6433200213 70 13 0 3DFACE 8 body_half_outside 10 467.169144021928 20 -699.168033082722 30 2455.6433200213 11 409.740310523406 21 -835.312365543472 31 2455.6433200213 12 492.936359391337 22 -790.843150956456 32 2455.6433200213 13 492.936359391337 23 -790.843150956456 33 2455.6433200213 70 13 0 3DFACE 8 body_half_outside 10 467.169144021928 20 -699.168033082722 30 2455.6433200213 11 492.936359391337 21 -790.843150956456 31 2455.6433200213 12 594.593536632776 22 -594.593536632776 32 2455.6433200213 13 594.593536632776 23 -594.593536632776 33 2455.6433200213 70 3 0 3DFACE 8 body_half_outside 10 594.593536632776 20 -594.593536632776 30 2455.6433200213 11 492.936359391337 21 -790.843150956456 31 2455.6433200213 12 519.085398326623 22 -776.866198451135 32 2455.6433200213 13 519.085398326623 23 -776.866198451135 33 2455.6433200213 70 13 0 3DFACE 8 body_half_outside 10 594.593536632776 20 -594.593536632776 30 2455.6433200213 11 519.085398326623 21 -776.866198451135 31 2455.6433200213 12 569.3857757708 22 -735.585745512023 32 2455.6433200213 13 569.3857757708 23 -735.585745512023 33 2455.6433200213 70 13 0 3DFACE 8 body_half_outside 10 594.593536632776 20 -594.593536632776 30 2455.6433200213 11 569.3857757708 21 -735.585745512023 31 2455.6433200213 12 642.325277330117 22 -675.725843568677 32 2455.6433200213 13 642.325277330117 23 -675.725843568677 33 2455.6433200213 70 13 0 3DFACE 8 body_half_outside 10 594.593536632776 20 -594.593536632776 30 2455.6433200213 11 642.325277330117 21 -675.725843568677 31 2455.6433200213 12 699.168033082722 22 -467.169144021928 32 2455.6433200213 13 699.168033082722 23 -467.169144021928 33 2455.6433200213 70 3 0 3DFACE 8 body_half_outside 10 699.168033082722 20 -467.169144021928 30 2455.6433200213 11 642.325277330117 21 -675.725843568677 31 2455.6433200213 12 660.670394770277 22 -660.670394770277 32 2455.6433200213 13 660.670394770277 23 -660.670394770277 33 2455.6433200213 70 13 0 3DFACE 8 body_half_outside 10 699.168033082722 20 -467.169144021928 30 2455.6433200213 11 660.670394770277 21 -660.670394770277 31 2455.6433200213 12 705.689442886146 22 -605.814525922476 32 2455.6433200213 13 705.689442886146 23 -605.814525922476 33 2455.6433200213 70 13 0 3DFACE 8 body_half_outside 10 699.168033082722 20 -467.169144021928 30 2455.6433200213 11 705.689442886146 21 -605.814525922476 31 2455.6433200213 12 776.87389411925 22 -321.791703197793 32 2455.6433200213 13 776.87389411925 23 -321.791703197793 33 2455.6433200213 70 3 0 3DFACE 8 body_half_outside 10 776.87389411925 20 -321.791703197793 30 2455.6433200213 11 705.689442886146 21 -605.814525922476 31 2455.6433200213 12 765.568628306957 22 -532.851527377882 32 2455.6433200213 13 765.568628306957 23 -532.851527377882 33 2455.6433200213 70 13 0 3DFACE 8 body_half_outside 10 776.87389411925 20 -321.791703197793 30 2455.6433200213 11 765.568628306957 21 -532.851527377882 31 2455.6433200213 12 776.866198451135 22 -519.085398326623 32 2455.6433200213 13 776.866198451135 23 -519.085398326623 33 2455.6433200213 70 13 0 3DFACE 8 body_half_outside 10 776.87389411925 20 -321.791703197793 30 2455.6433200213 11 776.866198451135 21 -519.085398326623 31 2455.6433200213 12 813.095624444942 22 -451.304909657549 32 2455.6433200213 13 813.095624444942 23 -451.304909657549 33 2455.6433200213 70 13 0 3DFACE 8 body_half_outside 10 776.87389411925 20 -321.791703197793 30 2455.6433200213 11 813.095624444942 21 -451.304909657549 31 2455.6433200213 12 824.724927080674 22 -164.047987682633 32 2455.6433200213 13 824.724927080674 23 -164.047987682633 33 2455.6433200213 70 3 0 3DFACE 8 body_half_outside 10 824.724927080674 20 -164.047987682633 30 2455.6433200213 11 813.095624444942 21 -451.304909657549 31 2455.6433200213 12 857.607805429898 22 -368.028476312943 32 2455.6433200213 13 857.607805429898 23 -368.028476312943 33 2455.6433200213 70 13 0 3DFACE 8 body_half_outside 10 824.724927080674 20 -164.047987682633 30 2455.6433200213 11 857.607805429898 21 -368.028476312943 31 2455.6433200213 12 840.882243605455 22 1.80477854883065e-13 32 2455.6433200213 13 840.882243605455 23 1.80477854883065e-13 33 2455.6433200213 70 3 0 3DFACE 8 body_half_outside 10 840.882243605455 20 1.80477854883065e-13 30 2455.6433200213 11 857.607805429898 21 -368.028476312943 31 2455.6433200213 12 934.329032542513 22 1.80477854883065e-13 32 2455.6433200213 13 934.329032542513 23 1.80477854883065e-13 33 2455.6433200213 70 3 0 3DFACE 8 body_half_outside 10 934.329032542513 20 1.80477854883065e-13 30 2455.6433200213 11 857.607805429898 21 -368.028476312943 31 2455.6433200213 12 863.207469797099 22 -357.552241131722 32 2455.6433200213 13 863.207469797099 23 -357.552241131722 33 2455.6433200213 70 13 0 3DFACE 8 body_half_outside 10 934.329032542513 20 1.80477854883065e-13 30 2455.6433200213 11 863.207469797099 21 -357.552241131722 31 2455.6433200213 12 887.227326571027 22 -278.369385106107 32 2455.6433200213 13 887.227326571027 23 -278.369385106107 33 2455.6433200213 70 13 0 3DFACE 8 body_half_outside 10 934.329032542513 20 1.80477854883065e-13 30 2455.6433200213 11 887.227326571027 21 -278.369385106107 31 2455.6433200213 12 914.651020883606 22 -187.965580500561 32 2455.6433200213 13 914.651020883606 23 -187.965580500561 33 2455.6433200213 70 13 0 3DFACE 8 body_half_outside 10 934.329032542513 20 1.80477854883065e-13 30 2455.6433200213 11 914.651020883606 21 -187.965580500561 31 2455.6433200213 12 925.063958382437 22 -94.0698766010765 32 2455.6433200213 13 925.063958382437 23 -94.0698766010765 33 2455.6433200213 70 3 0 3DFACE 8 body_half_outside 10 925.063958382437 20 -94.0698766010765 30 2455.6433200213 11 914.651020883606 21 -187.965580500561 31 2455.6433200213 12 916.376162171087 22 -182.278551827737 32 2455.6433200213 13 916.376162171087 23 -182.278551827737 33 2455.6433200213 70 1 0 3DFACE 8 body_half_outside 10 288.287545076695 20 -1033.5656801692 30 2082.82163169725 11 210.691411720441 21 -1059.21725479392 31 2058.8118770109 12 287.457769982496 22 -1035.93043460251 32 2058.8118770109 13 287.457769982496 23 -1035.93043460251 33 2058.8118770109 70 1 0 3DFACE 8 body_half_outside 10 210.691411720441 20 -1059.21725479392 30 2058.8118770109 11 288.287545076695 21 -1033.5656801692 31 2082.82163169725 12 209.215453044867 22 -1051.79710945546 32 2148.21162800104 13 209.215453044867 23 -1051.79710945546 33 2148.21162800104 70 3 0 3DFACE 8 body_half_outside 10 209.215453044867 20 -1051.79710945546 30 2148.21162800104 11 288.287545076695 21 -1033.5656801692 31 2082.82163169725 12 320.792446313246 22 -1019.67559748903 32 2128.61109777939 13 320.792446313246 23 -1019.67559748903 33 2128.61109777939 70 13 0 3DFACE 8 body_half_outside 10 209.215453044867 20 -1051.79710945546 30 2148.21162800104 11 320.792446313246 21 -1019.67559748903 31 2128.61109777939 12 349.642943907379 22 -1009.19889581502 32 2148.21162800104 13 349.642943907379 23 -1009.19889581502 33 2148.21162800104 70 1 0 3DFACE 8 body_half_outside 10 1.80477854883065e-13 20 -997.519349743284 30 1708.93950189862 11 -47.1482966446679 21 -929.685330640079 31 1614.7610800213 12 1.80477854883065e-13 22 -934.329032542513 32 1614.7610800213 13 1.80477854883065e-13 23 -934.329032542513 33 1614.7610800213 70 1 0 3DFACE 8 body_half_outside 10 -47.1482966446679 20 -929.685330640079 30 1614.7610800213 11 1.80477854883065e-13 21 -997.519349743284 31 1708.93950189862 12 -141.006394822338 22 -920.441114834126 32 1614.7610800213 13 -141.006394822338 23 -920.441114834126 33 1614.7610800213 70 3 0 3DFACE 8 body_half_outside 10 -141.006394822338 20 -920.441114834126 30 1614.7610800213 11 -194.606371158736 21 -978.352295145615 31 1708.93950189862 12 -182.278551827737 22 -916.376162171087 32 1614.7610800213 13 -182.278551827737 23 -916.376162171087 33 1614.7610800213 70 1 0 3DFACE 8 body_half_outside 10 -194.606371158736 20 -978.352295145615 30 1708.93950189862 11 -141.006394822338 21 -920.441114834126 31 1614.7610800213 12 1.80477854883065e-13 22 -997.519349743284 32 1708.93950189862 13 1.80477854883065e-13 23 -997.519349743284 33 1708.93950189862 70 3 0 3DFACE 8 body_half_outside 10 -751.507544713982 20 -880.404127848991 30 2025.39393021379 11 -680.521947020029 21 -831.877044035484 31 2050.14904337117 12 -680.414811030127 22 -831.964968270127 32 2020.57508939225 13 -680.414811030127 23 -831.964968270127 33 2020.57508939225 70 1 0 3DFACE 8 body_half_outside 10 -680.521947020029 20 -831.877044035484 30 2050.14904337117 11 -751.507544713982 21 -880.404127848991 31 2025.39393021379 12 -751.210146881832 22 -880.075378254302 32 2048.54571267062 13 -751.210146881832 23 -880.075378254302 33 2048.54571267062 70 1 0 3DFACE 8 body_half_outside 10 30.3548842506176 20 -1076.23680115831 30 2002.82389255955 11 23.5350452913723 21 -976.438072820957 31 1997.22699536883 12 23.5350452913723 22 -1076.43485544616 32 1997.22699536883 13 23.5350452913723 23 -1076.43485544616 33 1997.22699536883 70 1 0 3DFACE 8 body_half_outside 10 23.5350452913723 20 -976.438072820957 30 1997.22699536883 11 30.3548842506176 21 -1076.23680115831 31 2002.82389255955 12 30.3548842506176 22 -976.101409846015 32 2002.82389255955 13 30.3548842506176 23 -976.101409846015 33 2002.82389255955 70 1 0 3DFACE 8 body_half_outside 10 164.047987682633 20 -824.724927080674 30 914.026066884025 11 1.80477854883065e-13 21 -849.217148276931 31 855.37186879426 12 165.674046918965 22 -832.899678896021 32 855.37186879426 13 165.674046918965 23 -832.899678896021 33 855.37186879426 70 1 0 3DFACE 8 body_half_outside 10 1.80477854883065e-13 20 -849.217148276931 30 855.37186879426 11 164.047987682633 21 -824.724927080674 31 914.026066884025 12 0.0 22 -840.882243605455 32 914.026066884025 13 0.0 23 -840.882243605455 33 914.026066884025 70 1 0 3DFACE 8 body_half_outside 10 165.674046918965 20 -832.899678896021 30 855.37186879426 11 1.80477854883065e-13 21 -847.505736434059 31 796.153149972084 12 165.340167031437 22 -831.221151351825 32 796.153149972084 13 165.340167031437 23 -831.221151351825 33 796.153149972084 70 1 0 3DFACE 8 body_half_outside 10 1.80477854883065e-13 20 -847.505736434059 30 796.153149972084 11 165.674046918965 21 -832.899678896021 31 855.37186879426 12 1.80477854883065e-13 22 -849.217148276931 32 855.37186879426 13 1.80477854883065e-13 23 -849.217148276931 33 855.37186879426 70 1 0 3DFACE 8 body_half_outside 10 829.407026995336 20 -554.192057578438 30 1708.93950189862 11 964.515951276275 21 -399.515588143821 31 1812.39759571907 12 868.04142298445 22 -580.006735667279 32 1812.39759571907 13 868.04142298445 23 -580.006735667279 33 1812.39759571907 70 1 0 3DFACE 8 body_half_outside 10 964.515951276275 20 -399.515588143821 30 1812.39759571907 11 829.407026995336 21 -554.192057578438 31 1708.93950189862 12 921.587710511789 22 -381.734128610352 32 1708.93950189862 13 921.587710511789 23 -381.734128610352 33 1708.93950189862 70 1 0 3DFACE 8 body_half_outside 10 868.04142298445 20 -580.006735667279 30 1812.39759571907 11 990.771212819308 21 -410.390873558597 31 1922.19277204157 12 891.670534105407 22 -595.795202951324 32 1922.19277204157 13 891.670534105407 23 -595.795202951324 33 1922.19277204157 70 1 0 3DFACE 8 body_half_outside 10 990.771212819308 20 -410.390873558597 30 1922.19277204157 11 868.04142298445 21 -580.006735667279 31 1812.39759571907 12 964.515951276275 22 -399.515588143821 32 1812.39759571907 13 964.515951276275 23 -399.515588143821 33 1812.39759571907 70 1 0 3DFACE 8 body_half_outside 10 868.04142298445 20 -580.006735667279 30 2258.00680432354 11 705.352696568272 21 -705.352696568272 31 2361.46489814399 12 738.20854961057 22 -738.208549610569 32 2258.00680432354 13 738.20854961057 23 -738.208549610569 33 2258.00680432354 70 1 0 3DFACE 8 body_half_outside 10 705.352696568272 20 -705.352696568272 30 2361.46489814399 11 868.04142298445 21 -580.006735667279 31 2258.00680432354 12 829.407026995336 22 -554.192057578438 32 2361.46489814399 13 829.407026995336 23 -554.192057578438 33 2361.46489814399 70 1 0 3DFACE 8 body_half_outside 10 829.407026995336 20 -554.192057578438 30 2361.46489814399 11 660.670394770277 21 -660.670394770277 31 2455.6433200213 12 705.352696568272 22 -705.352696568272 32 2361.46489814399 13 705.352696568272 23 -705.352696568272 33 2361.46489814399 70 1 0 3DFACE 8 body_half_outside 10 660.670394770277 20 -660.670394770277 30 2455.6433200213 11 829.407026995336 21 -554.192057578438 31 2361.46489814399 12 705.689442886146 22 -605.814525922476 32 2455.6433200213 13 705.689442886146 23 -605.814525922476 33 2455.6433200213 70 3 0 3DFACE 8 body_half_outside 10 705.689442886146 20 -605.814525922476 30 2455.6433200213 11 829.407026995336 21 -554.192057578438 31 2361.46489814399 12 765.568628306957 22 -532.851527377882 32 2455.6433200213 13 765.568628306957 23 -532.851527377882 33 2455.6433200213 70 3 0 3DFACE 8 body_half_outside 10 765.568628306957 20 -532.851527377882 30 2455.6433200213 11 829.407026995336 21 -554.192057578438 31 2361.46489814399 12 776.866198451135 22 -519.085398326623 32 2455.6433200213 13 776.866198451135 23 -519.085398326623 33 2455.6433200213 70 1 0 3DFACE 8 body_half_outside 10 776.866198451135 20 -519.085398326623 30 1614.7610800213 11 921.587710511789 21 -381.734128610352 31 1708.93950189862 12 829.407026995336 22 -554.192057578438 32 1708.93950189862 13 829.407026995336 23 -554.192057578438 33 1708.93950189862 70 1 0 3DFACE 8 body_half_outside 10 921.587710511789 20 -381.734128610352 30 1708.93950189862 11 776.866198451135 21 -519.085398326623 31 1614.7610800213 12 813.09562491145 22 -451.304908784773 32 1614.7610800213 13 813.09562491145 23 -451.304908784773 33 1614.7610800213 70 13 0 3DFACE 8 body_half_outside 10 921.587710511789 20 -381.734128610352 30 1708.93950189862 11 813.09562491145 21 -451.304908784773 31 1614.7610800213 12 857.607805708123 22 -368.02847579242 32 1614.7610800213 13 857.607805708123 23 -368.02847579242 33 1614.7610800213 70 13 0 3DFACE 8 body_half_outside 10 921.587710511789 20 -381.734128610352 30 1708.93950189862 11 857.607805708123 21 -368.02847579242 31 1614.7610800213 12 863.207469797099 22 -357.552241131722 32 1614.7610800213 13 863.207469797099 23 -357.552241131722 33 1614.7610800213 70 1 0 3DFACE 8 body_half_outside 10 776.87389411925 20 -321.791703197793 30 1241.03564002131 11 621.482696406623 21 -415.26146157539 31 1427.8983600213 12 699.168033082722 22 -467.169144021928 32 1241.03564002131 13 699.168033082722 23 -467.169144021928 33 1241.03564002131 70 1 0 3DFACE 8 body_half_outside 10 621.482696406623 20 -415.26146157539 30 1427.8983600213 11 776.87389411925 21 -321.791703197793 31 1241.03564002131 12 690.554572920556 22 -286.037069662455 32 1427.8983600213 13 690.554572920556 23 -286.037069662455 33 1427.8983600213 70 1 0 3DFACE 8 body_half_outside 10 820.033554718597 20 -339.669019965462 30 1427.8983600213 11 660.325364744673 21 -441.215302798659 31 1614.7610800213 12 738.010701420772 22 -493.122985245198 32 1427.8983600213 13 738.010701420772 23 -493.122985245198 33 1427.8983600213 70 1 0 3DFACE 8 body_half_outside 10 660.325364744673 20 -441.215302798659 30 1614.7610800213 11 820.033554718597 21 -339.669019965462 31 1427.8983600213 12 733.714233519903 22 -303.914386430124 32 1614.7610800213 13 733.714233519903 23 -303.914386430124 33 1614.7610800213 70 1 0 3DFACE 8 body_half_outside 10 0.0 20 -784.019466456977 30 631.979456702016 11 -145.428823687577 21 -731.120068617964 31 587.016306884026 12 0.0 22 -745.443557551535 32 587.016306884026 13 0.0 23 -745.443557551535 33 587.016306884026 70 1 0 3DFACE 8 body_half_outside 10 -145.428823687577 20 -731.120068617964 30 587.016306884026 11 0.0 21 -784.019466456977 31 631.979456702016 12 -152.954610178005 22 -768.954752250597 32 631.979456702016 13 -152.954610178005 23 -768.954752250597 33 631.979456702016 70 1 0 3DFACE 8 body_half_outside 10 -357.552241131723 20 -863.207469797099 30 2455.6433200213 11 -554.192057578438 21 -829.407026995335 31 2361.46489814399 12 -381.734128610353 22 -921.587710511788 32 2361.46489814399 13 -381.734128610353 23 -921.587710511788 33 2361.46489814399 70 1 0 3DFACE 8 body_half_outside 10 -554.192057578438 20 -829.407026995335 30 2361.46489814399 11 -357.552241131723 21 -863.207469797099 31 2455.6433200213 12 -519.085398326623 22 -776.866198451135 32 2455.6433200213 13 -519.085398326623 23 -776.866198451135 33 2455.6433200213 70 3 0 3DFACE 8 body_half_outside 10 -519.085398326623 20 -776.866198451135 30 2455.6433200213 11 -357.552241131723 21 -863.207469797099 31 2455.6433200213 12 -409.740280777215 22 -835.312381443142 32 2455.6433200213 13 -409.740280777215 23 -835.312381443142 33 2455.6433200213 70 13 0 3DFACE 8 body_half_outside 10 -519.085398326623 20 -776.866198451135 30 2455.6433200213 11 -409.740280777215 21 -835.312381443142 31 2455.6433200213 12 -492.93632885036 22 -790.843167280949 32 2455.6433200213 13 -492.93632885036 23 -790.843167280949 33 2455.6433200213 70 1 0 3DFACE 8 body_half_outside 10 849.217148276931 20 1.80477854883065e-13 30 855.37186879426 11 824.724927080674 21 -164.047987682633 31 914.026066884025 12 832.899678896021 22 -165.674046918965 32 855.37186879426 13 832.899678896021 23 -165.674046918965 33 855.37186879426 70 1 0 3DFACE 8 body_half_outside 10 824.724927080674 20 -164.047987682633 30 914.026066884025 11 849.217148276931 21 1.80477854883065e-13 31 855.37186879426 12 840.882243605455 22 1.80477854883065e-13 32 914.026066884025 13 840.882243605455 23 1.80477854883065e-13 33 914.026066884025 70 1 0 3DFACE 8 body_half_outside 10 1072.40303302985 20 1.80477854883065e-13 30 2148.21162800104 11 1023.92467246733 21 -203.671280618918 31 2258.00680432354 12 1051.79710945546 22 -209.215453044867 32 2148.21162800104 13 1051.79710945546 23 -209.215453044867 33 2148.21162800104 70 1 0 3DFACE 8 body_half_outside 10 1023.92467246733 20 -203.671280618918 30 2258.00680432354 11 1072.40303302985 21 1.80477854883065e-13 31 2148.21162800104 12 1043.98454271904 22 1.80477854883065e-13 32 2258.00680432354 13 1043.98454271904 23 1.80477854883065e-13 33 2258.00680432354 70 1 0 3DFACE 8 body_half_outside 10 653.750224578544 20 -951.073041235167 30 1878.29564871262 11 180.675224578544 21 -917.447181233325 31 1850.69961858573 12 180.675224578544 22 -951.073041235166 32 1878.29564871262 13 180.675224578544 23 -951.073041235166 33 1878.29564871262 70 1 0 3DFACE 8 body_half_outside 10 180.675224578544 20 -917.447181233325 30 1850.69961858573 11 653.750224578544 21 -951.073041235167 31 1878.29564871262 12 653.750224578544 22 -917.447181233325 32 1850.69961858573 13 653.750224578544 23 -917.447181233325 33 1850.69961858573 70 1 0 3DFACE 8 body_half_outside 10 -324.326404167689 20 -782.993203577332 30 796.153149972084 11 -464.344143695271 21 -694.940121314314 31 738.078199114136 12 -319.845809128627 22 -772.176090266528 32 738.078199114136 13 -319.845809128627 23 -772.176090266528 33 738.078199114136 70 1 0 3DFACE 8 body_half_outside 10 -464.344143695271 20 -694.940121314314 30 738.078199114136 11 -324.326404167689 21 -782.993203577332 31 796.153149972084 12 -470.848959476119 22 -704.67526609701 32 796.153149972084 13 -470.848959476119 23 -704.67526609701 33 796.153149972084 70 1 0 3DFACE 8 body_half_outside 10 -324.981333125909 20 -784.574341950658 30 855.37186879426 11 -470.848959476119 21 -704.67526609701 31 796.153149972084 12 -324.326404167689 22 -782.993203577332 32 796.153149972084 13 -324.326404167689 23 -782.993203577332 33 796.153149972084 70 1 0 3DFACE 8 body_half_outside 10 -470.848959476119 20 -704.67526609701 30 796.153149972084 11 -324.981333125909 21 -784.574341950658 31 855.37186879426 12 -471.799768952456 22 -706.098253038492 32 855.37186879426 13 -471.799768952456 23 -706.098253038492 33 855.37186879426 70 1 0 3DFACE 8 body_half_outside 10 -321.791703197793 20 -776.87389411925 30 914.026066884025 11 -471.799768952456 21 -706.098253038492 31 855.37186879426 12 -324.981333125909 22 -784.574341950658 32 855.37186879426 13 -324.981333125909 23 -784.574341950658 33 855.37186879426 70 1 0 3DFACE 8 body_half_outside 10 -471.799768952456 20 -706.098253038492 30 855.37186879426 11 -321.791703197793 21 -776.87389411925 31 914.026066884025 12 -467.169144021929 22 -699.168033082722 32 914.026066884025 13 -467.169144021929 23 -699.168033082722 33 914.026066884025 70 1 0 3DFACE 8 body_half_outside 10 -164.047987682633 20 -824.724927080674 30 914.026066884025 11 -324.981333125909 21 -784.574341950658 31 855.37186879426 12 -165.674046918965 22 -832.899678896021 32 855.37186879426 13 -165.674046918965 23 -832.899678896021 33 855.37186879426 70 1 0 3DFACE 8 body_half_outside 10 -324.981333125909 20 -784.574341950658 30 855.37186879426 11 -164.047987682633 21 -824.724927080674 31 914.026066884025 12 -321.791703197793 22 -776.87389411925 32 914.026066884025 13 -321.791703197793 23 -776.87389411925 33 914.026066884025 70 1 0 3DFACE 8 body_half_outside 10 180.675224578544 20 -1011.8021195433 30 1991.91176299638 11 653.750224578544 21 -999.174771652236 31 1950.28497564898 12 180.675224578544 22 -999.174771652236 32 1950.28497564898 13 180.675224578544 23 -999.174771652236 33 1950.28497564898 70 1 0 3DFACE 8 body_half_outside 10 653.750224578544 20 -999.174771652236 30 1950.28497564898 11 180.675224578544 21 -1011.8021195433 31 1991.91176299638 12 653.750224578544 22 -1011.8021195433 32 1991.91176299638 13 653.750224578544 23 -1011.8021195433 33 1991.91176299638 70 1 0 3DFACE 8 body_half_outside 10 -595.795202951324 20 -891.670534105406 30 2148.21162800104 11 -644.327893757466 21 -861.580735902195 31 2058.8118770109 12 -599.99837764929 22 -897.961029579872 32 2058.8118770109 13 -599.99837764929 23 -897.961029579872 33 2058.8118770109 70 1 0 3DFACE 8 body_half_outside 10 -644.327893757466 20 -861.580735902195 30 2058.8118770109 11 -595.795202951324 21 -891.670534105406 31 2148.21162800104 12 -644.282480658799 22 -861.555930289753 32 2059.38164426315 13 -644.282480658799 23 -861.555930289753 33 2059.38164426315 70 3 0 3DFACE 8 body_half_outside 10 -644.282480658799 20 -861.555930289753 30 2059.38164426315 11 -595.795202951324 21 -891.670534105406 31 2148.21162800104 12 -655.637457605706 22 -847.372595440649 32 2104.03168141582 13 -655.637457605706 23 -847.372595440649 33 2104.03168141582 70 3 0 3DFACE 8 body_half_outside 10 -655.637457605706 20 -847.372595440649 30 2104.03168141582 11 -595.795202951324 21 -891.670534105406 31 2148.21162800104 12 -680.351354626835 22 -823.413171149779 32 2137.7839549476 13 -680.351354626835 23 -823.413171149779 33 2137.7839549476 70 3 0 3DFACE 8 body_half_outside 10 -680.351354626835 20 -823.413171149779 30 2137.7839549476 11 -595.795202951324 21 -891.670534105406 31 2148.21162800104 12 -700.811796716974 22 -805.485642916867 32 2148.21162800104 13 -700.811796716974 23 -805.485642916867 33 2148.21162800104 70 1 0 3DFACE 8 body_half_outside 10 194.606371158736 20 -978.352295145615 30 1708.93950189862 11 141.006388747634 21 -920.441115432432 31 1614.7610800213 12 182.278551827736 22 -916.376162171087 32 1614.7610800213 13 182.278551827736 23 -916.376162171087 33 1614.7610800213 70 1 0 3DFACE 8 body_half_outside 10 141.006388747634 20 -920.441115432432 30 1614.7610800213 11 194.606371158736 21 -978.352295145615 31 1708.93950189862 12 47.1483359530928 22 -929.685326768537 32 1614.7610800213 13 47.1483359530928 23 -929.685326768537 33 1614.7610800213 70 3 0 3DFACE 8 body_half_outside 10 47.1483359530928 20 -929.685326768537 30 1614.7610800213 11 1.80477854883065e-13 21 -997.519349743284 31 1708.93950189862 12 1.80477854883065e-13 22 -934.329032542513 32 1614.7610800213 13 1.80477854883065e-13 23 -934.329032542513 33 1614.7610800213 70 1 0 3DFACE 8 body_half_outside 10 1.80477854883065e-13 20 -997.519349743284 30 1708.93950189862 11 47.1483359530928 21 -929.685326768537 31 1614.7610800213 12 194.606371158736 22 -978.352295145615 32 1708.93950189862 13 194.606371158736 23 -978.352295145615 33 1708.93950189862 70 3 0 3DFACE 8 body_half_outside 10 -43.0469725205791 20 -975.725342330674 30 2017.42442965997 11 -45.6079918995535 21 -1075.47655248308 31 2025.86697911698 12 -43.0469725205787 22 -1075.72879087574 32 2017.42442965997 13 -43.0469725205787 23 -1075.72879087574 33 2017.42442965997 70 1 0 3DFACE 8 body_half_outside 10 -45.6079918995535 20 -1075.47655248308 30 2025.86697911698 11 -43.0469725205791 21 -975.725342330674 31 2017.42442965997 12 -45.6079918995534 22 -975.978478371127 32 2025.86697911698 13 -45.6079918995534 23 -975.978478371127 33 2025.86697911698 70 1 0 3DFACE 8 body_half_outside 10 921.587710511789 20 -381.734128610352 30 2361.46489814399 11 776.866198451135 21 -519.085398326623 31 2455.6433200213 12 829.407026995336 22 -554.192057578438 32 2361.46489814399 13 829.407026995336 23 -554.192057578438 33 2361.46489814399 70 1 0 3DFACE 8 body_half_outside 10 776.866198451135 20 -519.085398326623 30 2455.6433200213 11 921.587710511789 21 -381.734128610352 31 2361.46489814399 12 813.095624444942 22 -451.304909657549 32 2455.6433200213 13 813.095624444942 23 -451.304909657549 33 2455.6433200213 70 3 0 3DFACE 8 body_half_outside 10 813.095624444942 20 -451.304909657549 30 2455.6433200213 11 921.587710511789 21 -381.734128610352 31 2361.46489814399 12 857.607805429898 22 -368.028476312943 32 2455.6433200213 13 857.607805429898 23 -368.028476312943 33 2455.6433200213 70 3 0 3DFACE 8 body_half_outside 10 857.607805429898 20 -368.028476312943 30 2455.6433200213 11 921.587710511789 21 -381.734128610352 31 2361.46489814399 12 863.207469797099 22 -357.552241131722 32 2455.6433200213 13 863.207469797099 23 -357.552241131722 33 2455.6433200213 70 1 0 3DFACE 8 body_half_outside 10 -798.491399420167 20 -250.528338641286 30 2549.0746800213 11 -776.873894119249 21 -321.791703197793 31 2455.6433200213 12 -776.87389411925 22 -321.791703197793 32 2549.0746800213 13 -776.87389411925 23 -321.791703197793 33 2549.0746800213 70 1 0 3DFACE 8 body_half_outside 10 -776.873894119249 20 -321.791703197793 30 2455.6433200213 11 -798.491399420167 21 -250.528338641286 31 2549.0746800213 12 -824.724927080674 22 -164.047987682633 32 2455.6433200213 13 -824.724927080674 23 -164.047987682633 33 2455.6433200213 70 3 0 3DFACE 8 body_half_outside 10 -824.724927080674 20 -164.047987682633 30 2455.6433200213 11 -798.491399420167 21 -250.528338641286 31 2549.0746800213 12 -823.172319072743 22 -169.166250356441 32 2549.0746800213 13 -823.172319072743 23 -169.166250356441 33 2549.0746800213 70 13 0 3DFACE 8 body_half_outside 10 -824.724927080674 20 -164.047987682633 30 2455.6433200213 11 -823.172319072743 21 -169.166250356441 31 2549.0746800213 12 -824.724927080674 22 -164.047987682633 32 2549.0746800213 13 -824.724927080674 23 -164.047987682633 33 2549.0746800213 70 1 0 3DFACE 8 body_half_outside 10 653.750224578544 20 -997.119327169824 30 2170.81091140737 11 320.792446313246 21 -1019.67559748903 31 2128.61109777939 12 653.750224578544 22 -1019.67559748903 32 2128.61109777939 13 653.750224578544 23 -1019.67559748903 33 2128.61109777939 70 1 0 3DFACE 8 body_half_outside 10 320.792446313246 20 -1019.67559748903 30 2128.61109777939 11 653.750224578544 21 -997.119327169824 31 2170.81091140737 12 349.642943907379 22 -1009.19889581502 32 2148.21162800104 13 349.642943907379 23 -1009.19889581502 33 2148.21162800104 70 3 0 3DFACE 8 body_half_outside 10 349.642943907379 20 -1009.19889581502 30 2148.21162800104 11 653.750224578544 21 -997.119327169824 31 2170.81091140737 12 369.410361108008 22 -997.119327169824 32 2170.81091140737 13 369.410361108008 23 -997.119327169824 33 2170.81091140737 70 1 0 3DFACE 8 body_half_outside 10 0.0 20 -700.735203605455 30 1241.03564002131 11 -154.93421062823 21 -778.906875772646 31 1054.1729200213 12 0.0 22 -794.166563605455 32 1054.1729200213 13 0.0 23 -794.166563605455 33 1054.1729200213 70 1 0 3DFACE 8 body_half_outside 10 -154.93421062823 20 -778.906875772646 30 1054.1729200213 11 0.0 21 -700.735203605455 31 1241.03564002131 12 -136.706656519425 22 -687.270773156591 32 1241.03564002131 13 -136.706656519425 23 -687.270773156591 33 1241.03564002131 70 1 0 3DFACE 8 body_half_outside 10 -164.047987682633 20 -824.724927080674 30 914.026066884025 11 -250.282436127117 21 -604.235251721862 31 1054.1729200213 12 -321.791703197793 22 -776.87389411925 32 914.026066884025 13 -321.791703197793 23 -776.87389411925 33 914.026066884025 70 1 0 3DFACE 8 body_half_outside 10 -250.282436127117 20 -604.235251721862 30 1054.1729200213 11 -164.047987682633 21 -824.724927080674 31 914.026066884025 12 -127.592879465023 22 -641.452721848564 32 1054.1729200213 13 -127.592879465023 23 -641.452721848564 33 1054.1729200213 70 1 0 3DFACE 8 body_half_outside 10 -136.706656519425 20 -687.270773156591 30 1241.03564002131 11 -303.914386430124 21 -733.714233519903 31 1054.1729200213 12 -154.93421062823 22 -778.906875772646 32 1054.1729200213 13 -154.93421062823 23 -778.906875772646 33 1054.1729200213 70 1 0 3DFACE 8 body_half_outside 10 -303.914386430124 20 -733.714233519903 30 1054.1729200213 11 -136.706656519425 21 -687.270773156591 31 1241.03564002131 12 -268.159752894786 22 -647.394912321209 32 1241.03564002131 13 -268.159752894786 23 -647.394912321209 33 1241.03564002131 70 1 0 3DFACE 8 body_half_outside 10 -145.820433573828 20 -733.088824464619 30 1427.8983600213 11 -321.791703197793 21 -776.873894119249 31 1241.03564002131 12 -164.047987682633 22 -824.724927080674 32 1241.03564002131 13 -164.047987682633 23 -824.724927080674 33 1241.03564002131 70 1 0 3DFACE 8 body_half_outside 10 -321.791703197793 20 -776.873894119249 30 1241.03564002131 11 -145.820433573828 21 -733.088824464619 31 1427.8983600213 12 -286.037069662455 22 -690.554572920556 32 1427.8983600213 13 -286.037069662455 23 -690.554572920556 33 1427.8983600213 70 1 0 3DFACE 8 body_half_outside 10 699.168033082722 20 -467.169144021928 30 2455.6433200213 11 731.773963185201 21 -406.167739356189 31 2549.0746800213 12 699.168033082722 22 -467.169144021929 32 2549.0746800213 13 699.168033082722 23 -467.169144021929 33 2549.0746800213 70 1 0 3DFACE 8 body_half_outside 10 731.773963185201 20 -406.167739356189 30 2549.0746800213 11 699.168033082722 21 -467.169144021928 31 2455.6433200213 12 776.87389411925 22 -321.791703197793 32 2455.6433200213 13 776.87389411925 23 -321.791703197793 33 2455.6433200213 70 13 0 3DFACE 8 body_half_outside 10 731.773963185201 20 -406.167739356189 30 2549.0746800213 11 776.87389411925 21 -321.791703197793 31 2455.6433200213 12 771.834245650684 22 -331.220222324155 32 2549.0746800213 13 771.834245650684 23 -331.220222324155 33 2549.0746800213 70 3 0 3DFACE 8 body_half_outside 10 771.834245650684 20 -331.220222324155 30 2549.0746800213 11 776.87389411925 21 -321.791703197793 31 2455.6433200213 12 776.87389411925 22 -321.791703197793 32 2549.0746800213 13 776.87389411925 23 -321.791703197793 33 2549.0746800213 70 1 0 3DFACE 8 body_half_outside 10 1.80477854883065e-13 20 -847.505736434059 30 796.153149972084 11 -163.055979488767 21 -819.73776511114 31 738.078199114136 12 1.80477854883065e-13 22 -835.797377356766 32 738.078199114136 13 1.80477854883065e-13 23 -835.797377356766 33 738.078199114136 70 1 0 3DFACE 8 body_half_outside 10 -163.055979488767 20 -819.73776511114 30 738.078199114136 11 1.80477854883065e-13 21 -847.505736434059 31 796.153149972084 12 -165.340167031437 22 -831.221151351825 32 796.153149972084 13 -165.340167031437 23 -831.221151351825 33 796.153149972084 70 1 0 3DFACE 8 body_half_outside 10 -46.4727423170739 20 -976.418879754098 30 2034.64693744883 11 -46.4180537270787 21 -976.457504352767 31 2035.20220002131 12 -46.4727423170739 22 -1075.39138200091 32 2034.64693744883 13 -46.4727423170739 23 -1075.39138200091 33 2034.64693744883 70 2 0 3DFACE 8 body_half_outside 10 -46.4727423170739 20 -1075.39138200091 30 2034.64693744883 11 -45.6079918995534 21 -976.044954856512 31 2043.42689578067 12 -45.6079918995532 22 -1075.47655248308 32 2043.42689578067 13 -45.6079918995532 23 -1075.47655248308 33 2043.42689578067 70 1 0 3DFACE 8 body_half_outside 10 -45.6079918995534 20 -976.044954856512 30 2043.42689578067 11 -46.4727423170739 21 -1075.39138200091 31 2034.64693744883 12 -46.4180537270787 22 -976.457504352767 32 2035.20220002131 13 -46.4180537270787 23 -976.457504352767 33 2035.20220002131 70 3 0 3DFACE 8 body_half_outside 10 0.0 20 -814.429823327873 30 682.822310520627 11 -152.954610178005 21 -768.954752250597 31 631.979456702016 12 0.0 22 -784.019466456977 32 631.979456702016 13 0.0 23 -784.019466456977 33 631.979456702016 70 1 0 3DFACE 8 body_half_outside 10 -152.954610178005 20 -768.954752250597 30 631.979456702016 11 0.0 21 -814.429823327873 31 682.822310520627 12 -158.887376492573 22 -798.780782641381 32 682.822310520627 13 -158.887376492573 23 -798.780782641381 33 682.822310520627 70 1 0 3DFACE 8 body_half_outside 10 1.80477854883065e-13 20 -835.797377356766 30 738.078199114136 11 -158.887376492573 21 -798.780782641381 31 682.822310520627 12 0.0 22 -814.429823327873 32 682.822310520627 13 0.0 23 -814.429823327873 33 682.822310520627 70 1 0 3DFACE 8 body_half_outside 10 -158.887376492573 20 -798.780782641381 30 682.822310520627 11 1.80477854883065e-13 21 -835.797377356766 31 738.078199114136 12 -163.055979488767 22 -819.73776511114 32 738.078199114136 13 -163.055979488767 23 -819.73776511114 33 738.078199114136 70 1 0 3DFACE 8 body_half_outside 10 -868.04142298445 20 -580.00673566728 30 1812.39759571907 11 -705.352696568271 21 -705.352696568271 31 1708.93950189862 12 -738.20854961057 22 -738.20854961057 32 1812.39759571907 13 -738.20854961057 23 -738.20854961057 33 1812.39759571907 70 1 0 3DFACE 8 body_half_outside 10 -705.352696568271 20 -705.352696568271 30 1708.93950189862 11 -868.04142298445 21 -580.00673566728 31 1812.39759571907 12 -829.407026995335 22 -554.192057578438 32 1708.93950189862 13 -829.407026995335 23 -554.192057578438 33 1708.93950189862 70 1 0 3DFACE 8 body_half_outside 10 653.750224578544 20 -1038.25578712258 30 2035.20217666346 11 288.287531523413 21 -1033.5656801692 31 1987.58272162968 12 653.750224578544 22 -1033.56568016919 32 1987.58272162967 13 653.750224578544 23 -1033.56568016919 33 1987.58272162967 70 1 0 3DFACE 8 body_half_outside 10 288.287531523413 20 -1033.5656801692 30 1987.58272162968 11 653.750224578544 21 -1038.25578712258 31 2035.20217666346 12 287.457754814725 22 -1035.93043920361 32 2011.5925230317 13 287.457754814725 23 -1035.93043920361 33 2011.5925230317 70 3 0 3DFACE 8 body_half_outside 10 287.457754814725 20 -1035.93043920361 30 2011.5925230317 11 653.750224578544 21 -1038.25578712258 31 2035.20217666346 12 279.792110043812 22 -1038.25578712258 32 2035.20217666346 13 279.792110043812 23 -1038.25578712258 33 2035.20217666346 70 1 0 3DFACE 8 body_half_outside 10 831.221151351825 20 -165.340167031437 30 796.153149972084 11 849.217148276931 21 1.80477854883065e-13 31 855.37186879426 12 832.899678896021 22 -165.674046918965 32 855.37186879426 13 832.899678896021 23 -165.674046918965 33 855.37186879426 70 1 0 3DFACE 8 body_half_outside 10 849.217148276931 20 1.80477854883065e-13 30 855.37186879426 11 831.221151351825 21 -165.340167031437 31 796.153149972084 12 847.505736434059 22 1.80477854883065e-13 32 796.153149972084 13 847.505736434059 23 1.80477854883065e-13 33 796.153149972084 70 1 0 3DFACE 8 body_half_outside 10 475.358481968201 20 -929.775248028225 30 1832.24936277796 11 653.750224578544 21 -966.763694030251 31 1862.60499591753 12 422.745208264425 22 -966.763694030251 32 1862.60499591753 13 422.745208264425 23 -966.763694030251 33 1862.60499591753 70 1 0 3DFACE 8 body_half_outside 10 653.750224578544 20 -966.763694030251 30 1862.60499591753 11 475.358481968201 21 -929.775248028225 31 1832.24936277796 12 653.750224578544 22 -929.775248028225 32 1832.24936277796 13 653.750224578544 23 -929.775248028225 33 1832.24936277796 70 1 0 3DFACE 8 body_half_outside 10 653.750224578544 20 -1038.25578712258 30 2035.20217666346 11 287.457769982496 21 -1035.93043460251 31 2058.8118770109 12 279.792110043812 22 -1038.25578712258 32 2035.20217666346 13 279.792110043812 23 -1038.25578712258 33 2035.20217666346 70 1 0 3DFACE 8 body_half_outside 10 287.457769982496 20 -1035.93043460251 30 2058.8118770109 11 653.750224578544 21 -1038.25578712258 31 2035.20217666346 12 653.750224578544 22 -1033.56568016919 32 2082.82163169725 13 653.750224578544 23 -1033.56568016919 33 2082.82163169725 70 13 0 3DFACE 8 body_half_outside 10 287.457769982496 20 -1035.93043460251 30 2058.8118770109 11 653.750224578544 21 -1033.56568016919 31 2082.82163169725 12 288.287545076695 22 -1033.5656801692 32 2082.82163169725 13 288.287545076695 23 -1033.5656801692 33 2082.82163169725 70 1 0 3DFACE 8 body_half_outside 10 653.750224578544 20 -917.447181233325 30 2219.70473474119 11 180.675224578544 21 -951.073041235166 31 2192.10870461431 12 180.675224578544 22 -917.447181233325 32 2219.70473474119 13 180.675224578544 23 -917.447181233325 33 2219.70473474119 70 1 0 3DFACE 8 body_half_outside 10 180.675224578544 20 -951.073041235166 30 2192.10870461431 11 653.750224578544 21 -917.447181233325 31 2219.70473474119 12 653.750224578544 22 -951.073041235167 32 2192.10870461431 13 653.750224578544 23 -951.073041235167 33 2192.10870461431 70 1 0 3DFACE 8 body_half_outside 10 286.037069662455 20 -690.554572920556 30 1427.8983600213 11 164.047987682633 21 -824.724927080674 31 1241.03564002131 12 321.791703197793 22 -776.873894119249 32 1241.03564002131 13 321.791703197793 23 -776.873894119249 33 1241.03564002131 70 1 0 3DFACE 8 body_half_outside 10 164.047987682633 20 -824.724927080674 30 1241.03564002131 11 286.037069662455 21 -690.554572920556 31 1427.8983600213 12 145.820433573828 22 -733.088824464618 32 1427.8983600213 13 145.820433573828 23 -733.088824464618 33 1427.8983600213 70 1 0 3DFACE 8 body_half_outside 10 840.882243605455 20 1.80477854883065e-13 30 1241.03564002131 11 733.088824464618 21 -145.820433573828 31 1427.8983600213 12 824.724927080674 22 -164.047987682633 32 1241.03564002131 13 824.724927080674 23 -164.047987682633 33 1241.03564002131 70 1 0 3DFACE 8 body_half_outside 10 733.088824464618 20 -145.820433573828 30 1427.8983600213 11 840.882243605455 21 1.80477854883065e-13 31 1241.03564002131 12 747.450883605455 22 1.80477854883065e-13 32 1427.8983600213 13 747.450883605455 23 1.80477854883065e-13 33 1427.8983600213 70 1 0 3DFACE 8 body_half_outside 10 752.435044439405 20 -311.668800211604 30 682.822310520627 11 819.73776511114 21 -163.055979488767 31 738.078199114136 12 772.176090266528 22 -319.845809128627 32 738.078199114136 13 772.176090266528 23 -319.845809128627 33 738.078199114136 70 1 0 3DFACE 8 body_half_outside 10 819.73776511114 20 -163.055979488767 30 738.078199114136 11 752.435044439405 21 -311.668800211604 31 682.822310520627 12 798.780782641381 22 -158.887376492573 32 682.822310520627 13 798.780782641381 23 -158.887376492573 33 682.822310520627 70 1 0 3DFACE 8 body_half_outside 10 -849.217148276931 20 3.60955709766131e-13 30 855.37186879426 11 -831.221151351825 21 -165.340167031437 31 796.153149972084 12 -832.899678896021 22 -165.674046918964 32 855.37186879426 13 -832.899678896021 23 -165.674046918964 33 855.37186879426 70 1 0 3DFACE 8 body_half_outside 10 -831.221151351825 20 -165.340167031437 30 796.153149972084 11 -849.217148276931 21 3.60955709766131e-13 31 855.37186879426 12 -847.505736434059 22 1.80477854883065e-13 32 796.153149972084 13 -847.505736434059 23 1.80477854883065e-13 33 796.153149972084 70 1 0 3DFACE 8 body_half_outside 10 209.215453044867 20 -1051.79710945546 30 1922.19277204157 11 1.80477854883065e-13 21 -1043.98454271904 31 1812.39759571907 12 203.671280618918 22 -1023.92467246733 32 1812.39759571907 13 203.671280618918 23 -1023.92467246733 33 1812.39759571907 70 1 0 3DFACE 8 body_half_outside 10 1.80477854883065e-13 20 -1043.98454271904 30 1812.39759571907 11 209.215453044867 21 -1051.79710945546 31 1922.19277204157 12 1.80477854883065e-13 22 -1072.40303302985 32 1922.19277204157 13 1.80477854883065e-13 23 -1072.40303302985 33 1922.19277204157 70 1 0 3DFACE 8 body_half_outside 10 653.750224578544 20 -917.447181233325 30 1850.69961858573 11 180.675224578544 21 -879.083714298798 31 1830.19391829555 12 180.675224578544 22 -917.447181233325 32 1850.69961858573 13 180.675224578544 23 -917.447181233325 33 1850.69961858573 70 1 0 3DFACE 8 body_half_outside 10 180.675224578544 20 -879.083714298798 30 1830.19391829555 11 653.750224578544 21 -917.447181233325 31 1850.69961858573 12 653.750224578544 22 -879.083714298799 32 1830.19391829555 13 653.750224578544 23 -879.083714298799 33 1830.19391829555 70 1 0 3DFACE 8 body_half_outside 10 467.169144021928 20 -699.168033082722 30 2549.0746800213 11 321.791703197793 21 -776.87389411925 31 2455.6433200213 12 467.169144021928 22 -699.168033082722 32 2455.6433200213 13 467.169144021928 23 -699.168033082722 33 2455.6433200213 70 1 0 3DFACE 8 body_half_outside 10 321.791703197793 20 -776.87389411925 30 2455.6433200213 11 467.169144021928 21 -699.168033082722 31 2549.0746800213 12 321.791703197793 22 -776.87389411925 32 2549.0746800213 13 321.791703197793 23 -776.87389411925 33 2549.0746800213 70 3 0 3DFACE 8 body_half_outside 10 321.791703197793 20 -776.87389411925 30 2549.0746800213 11 467.169144021928 21 -699.168033082722 31 2549.0746800213 12 443.635403824213 22 -711.747079288974 32 2549.0746800213 13 443.635403824213 23 -711.747079288974 33 2549.0746800213 70 13 0 3DFACE 8 body_half_outside 10 321.791703197793 20 -776.87389411925 30 2549.0746800213 11 443.635403824213 21 -711.747079288974 31 2549.0746800213 12 368.760184385968 22 -751.768717885475 32 2549.0746800213 13 368.760184385968 23 -751.768717885475 33 2549.0746800213 70 1 0 3DFACE 8 body_half_outside 10 1079.96854760957 20 1.80477854883065e-13 30 2011.5925230317 11 1059.21725479392 21 -210.691411720441 31 2058.8118770109 12 1059.21725479392 22 -210.691411720441 32 2011.5925230317 13 1059.21725479392 23 -210.691411720441 33 2011.5925230317 70 1 0 3DFACE 8 body_half_outside 10 1059.21725479392 20 -210.691411720441 30 2058.8118770109 11 1079.96854760957 21 1.80477854883065e-13 31 2011.5925230317 12 1079.96854760957 22 1.80477854883065e-13 32 2058.8118770109 13 1079.96854760957 23 1.80477854883065e-13 33 2058.8118770109 70 1 0 3DFACE 8 body_half_outside 10 705.352696568272 20 -705.352696568272 30 1708.93950189862 11 642.325276783758 21 -675.725844017062 31 1614.7610800213 12 660.670394770277 22 -660.670394770277 32 1614.7610800213 13 660.670394770277 23 -660.670394770277 33 1614.7610800213 70 1 0 3DFACE 8 body_half_outside 10 642.325276783758 20 -675.725844017062 30 1614.7610800213 11 705.352696568272 21 -705.352696568272 31 1708.93950189862 12 569.38577628374 22 -735.585745091064 32 1614.7610800213 13 569.38577628374 23 -735.585745091064 33 1614.7610800213 70 3 0 3DFACE 8 body_half_outside 10 569.38577628374 20 -735.585745091064 30 1614.7610800213 11 554.192057578438 21 -829.407026995336 31 1708.93950189862 12 519.085398326623 22 -776.866198451135 32 1614.7610800213 13 519.085398326623 23 -776.866198451135 33 1614.7610800213 70 1 0 3DFACE 8 body_half_outside 10 554.192057578438 20 -829.407026995336 30 1708.93950189862 11 569.38577628374 21 -735.585745091064 31 1614.7610800213 12 705.352696568272 22 -705.352696568272 32 1708.93950189862 13 705.352696568272 23 -705.352696568272 33 1708.93950189862 70 3 0 3DFACE 8 body_half_outside 10 738.20854961057 20 -738.20854961057 30 1812.39759571907 11 554.192057578438 21 -829.407026995336 31 1708.93950189862 12 705.352696568272 22 -705.352696568272 32 1708.93950189862 13 705.352696568272 23 -705.352696568272 33 1708.93950189862 70 1 0 3DFACE 8 body_half_outside 10 554.192057578438 20 -829.407026995336 30 1708.93950189862 11 738.20854961057 21 -738.20854961057 31 1812.39759571907 12 653.750224578543 22 -795.278099285779 32 1791.22238449044 13 653.750224578543 23 -795.278099285779 33 1791.22238449044 70 15 0 3DFACE 8 body_half_outside 10 653.750224578543 20 -795.278099285779 30 1791.22238449044 11 738.20854961057 21 -738.20854961057 31 1812.39759571907 12 653.750224578544 22 -807.521705673267 32 1812.39759571907 13 653.750224578544 23 -807.521705673267 33 1812.39759571907 70 1 0 3DFACE 8 body_half_outside 10 554.192057578438 20 -829.407026995336 30 1708.93950189862 11 600.307476319437 21 -841.785968318108 31 1795.80300977859 12 577.57828073944 22 -864.406983345072 32 1802.66501966685 13 577.57828073944 23 -864.406983345072 33 1802.66501966685 70 1 0 3DFACE 8 body_half_outside 10 600.307476319437 20 -841.785968318108 30 1795.80300977859 11 554.192057578438 21 -829.407026995336 31 1708.93950189862 12 653.750224578543 22 -795.278099285779 32 1791.22238449044 13 653.750224578543 23 -795.278099285779 33 1791.22238449044 70 3 0 3DFACE 8 body_half_outside 10 554.385481313987 20 -554.385481313987 30 631.979456702016 11 677.173649450057 21 -452.47296672438 31 682.822310520627 12 575.888850875701 22 -575.888850875701 32 682.822310520627 13 575.888850875701 23 -575.888850875701 33 682.822310520627 70 1 0 3DFACE 8 body_half_outside 10 677.173649450057 20 -452.47296672438 30 682.822310520627 11 554.385481313987 21 -554.385481313987 31 631.979456702016 12 651.888361812631 22 -435.577877671407 32 631.979456702016 13 651.888361812631 23 -435.577877671407 33 631.979456702016 70 1 0 3DFACE 8 body_half_outside 10 -38.8881027186482 20 -1075.973485995 30 2009.6437315188 11 -43.0469725205787 21 -1075.72879087574 31 2017.42442965997 12 -39.9297534839436 22 -1076.03581015323 32 2011.5925230317 13 -39.9297534839436 23 -1076.03581015323 33 2011.5925230317 70 1 0 3DFACE 8 body_half_outside 10 -43.0469725205787 20 -1075.72879087574 30 2017.42442965997 11 -38.8881027186482 21 -1075.973485995 31 2009.6437315188 12 -38.8881027186488 22 -975.669199508814 32 2009.6437315188 13 -38.8881027186488 23 -975.669199508814 33 2009.6437315188 70 13 0 3DFACE 8 body_half_outside 10 -43.0469725205787 20 -1075.72879087574 30 2017.42442965997 11 -38.8881027186488 21 -975.669199508814 31 2009.6437315188 12 -43.0469725205791 22 -975.725342330674 32 2017.42442965997 13 -43.0469725205791 23 -975.725342330674 33 2017.42442965997 70 1 0 3DFACE 8 body_half_outside 10 653.750224578544 20 -841.785968318108 30 2274.60134354834 11 653.750224578543 21 -795.278127928135 31 2279.18196601546 12 600.307509232711 22 -841.785968318108 32 2274.60134354834 13 600.307509232711 23 -841.785968318108 33 2274.60134354834 70 0 0 3DFACE 8 body_half_outside 10 180.675224578544 20 -978.669071362051 30 1911.92150871446 11 653.750224578544 21 -951.073041235167 31 1878.29564871262 12 180.675224578544 22 -951.073041235166 32 1878.29564871262 13 180.675224578544 23 -951.073041235166 33 1878.29564871262 70 1 0 3DFACE 8 body_half_outside 10 653.750224578544 20 -951.073041235167 30 1878.29564871262 11 180.675224578544 21 -978.669071362051 31 1911.92150871446 12 653.750224578544 22 -978.669071362052 32 1911.92150871446 13 653.750224578544 23 -978.669071362052 33 1911.92150871446 70 1 0 3DFACE 8 body_half_outside 10 1.80477854883065e-13 20 -997.519349743284 30 2361.46489814399 11 -203.671280618918 21 -1023.92467246733 31 2258.00680432354 12 1.80477854883065e-13 22 -1043.98454271904 32 2258.00680432354 13 1.80477854883065e-13 23 -1043.98454271904 33 2258.00680432354 70 1 0 3DFACE 8 body_half_outside 10 -203.671280618918 20 -1023.92467246733 30 2258.00680432354 11 1.80477854883065e-13 21 -997.519349743284 31 2361.46489814399 12 -194.606371158736 22 -978.352295145615 32 2361.46489814399 13 -194.606371158736 23 -978.352295145615 33 2361.46489814399 70 1 0 3DFACE 8 body_half_outside 10 -381.734128610353 20 -921.587710511788 30 2361.46489814399 11 -580.006735667279 21 -868.041422984449 31 2258.00680432354 12 -399.515588143821 22 -964.515951276275 32 2258.00680432354 13 -399.515588143821 23 -964.515951276275 33 2258.00680432354 70 1 0 3DFACE 8 body_half_outside 10 -580.006735667279 20 -868.041422984449 30 2258.00680432354 11 -381.734128610353 21 -921.587710511788 31 2361.46489814399 12 -554.192057578438 22 -829.407026995335 32 2361.46489814399 13 -554.192057578438 23 -829.407026995335 33 2361.46489814399 70 1 0 3DFACE 8 body_half_outside 10 653.750224578544 20 -929.775248028225 30 2238.15499054897 11 533.995170927003 21 -892.63511672065 31 2258.00680432354 12 475.358507495069 22 -929.775248028225 32 2238.15499054897 13 475.358507495069 23 -929.775248028225 33 2238.15499054897 70 1 0 3DFACE 8 body_half_outside 10 533.995170927003 20 -892.63511672065 30 2258.00680432354 11 653.750224578544 21 -929.775248028225 31 2238.15499054897 12 540.896920479706 22 -887.575434400246 32 2260.71126086817 13 540.896920479706 23 -887.575434400246 33 2260.71126086817 70 3 0 3DFACE 8 body_half_outside 10 540.896920479706 20 -887.575434400246 30 2260.71126086817 11 653.750224578544 21 -929.775248028225 31 2238.15499054897 12 653.750224578544 22 -887.575434400246 32 2260.71126086817 13 653.750224578544 23 -887.575434400246 33 2260.71126086817 70 1 0 3DFACE 8 body_half_outside 10 -18.6906684275082 20 -1076.56003774335 30 1993.0681255669 11 -26.4713665686843 21 -976.148870417647 31 1997.22699536883 12 -26.4713665686843 22 -1076.14565304285 32 1997.22699536883 13 -26.4713665686843 23 -1076.14565304285 33 1997.22699536883 70 1 0 3DFACE 8 body_half_outside 10 -26.4713665686843 20 -976.148870417647 30 1997.22699536883 11 -18.6906684275082 21 -1076.56003774335 31 1993.0681255669 12 -18.6906684275082 22 -976.666250664317 32 1993.0681255669 13 -18.6906684275082 23 -976.666250664317 33 1993.0681255669 70 1 0 3DFACE 8 body_half_outside 10 699.168033082722 20 -467.169144021929 30 914.026066884025 11 604.235251721863 21 -250.282436127116 31 1054.1729200213 12 543.797359730523 22 -363.353779128852 32 1054.1729200213 13 543.797359730523 23 -363.353779128852 33 1054.1729200213 70 1 0 3DFACE 8 body_half_outside 10 604.235251721863 20 -250.282436127116 30 1054.1729200213 11 699.168033082722 21 -467.169144021929 31 914.026066884025 12 776.87389411925 22 -321.791703197793 32 914.026066884025 13 776.87389411925 23 -321.791703197793 33 914.026066884025 70 1 0 3DFACE 8 body_half_outside 10 35.9517814413364 20 -975.958401912124 30 2009.6437315188 11 30.3548842506176 21 -1076.23680115831 31 2002.82389255955 12 35.9517814413362 22 -1076.26268839831 32 2009.6437315188 13 35.9517814413362 23 -1076.26268839831 33 2009.6437315188 70 1 0 3DFACE 8 body_half_outside 10 30.3548842506176 20 -1076.23680115831 30 2002.82389255955 11 35.9517814413364 21 -975.958401912124 31 2009.6437315188 12 30.3548842506176 22 -976.101409846015 32 2002.82389255955 13 30.3548842506176 23 -976.101409846015 33 2002.82389255955 70 1 0 3DFACE 8 body_half_outside 10 -45.6079918995532 20 -1075.47655248308 30 2043.42689578067 11 -43.0469725205787 21 -975.791818816059 31 2051.86944523768 12 -43.0469725205787 22 -1075.72879087574 32 2051.86944523768 13 -43.0469725205787 23 -1075.72879087574 33 2051.86944523768 70 1 0 3DFACE 8 body_half_outside 10 -43.0469725205787 20 -975.791818816059 30 2051.86944523768 11 -45.6079918995532 21 -1075.47655248308 31 2043.42689578067 12 -45.6079918995534 22 -976.044954856512 32 2043.42689578067 13 -45.6079918995534 23 -976.044954856512 33 2043.42689578067 70 1 0 3DFACE 8 body_half_outside 10 843.013713767209 20 -637.259985333474 30 2192.10870461431 11 180.675224578544 21 -609.663955206589 31 2158.48284461247 12 876.866128931272 22 -609.663955206588 32 2158.48284461247 13 876.866128931272 23 -609.663955206588 33 2158.48284461247 70 1 0 3DFACE 8 body_half_outside 10 180.675224578544 20 -609.663955206589 30 2158.48284461247 11 843.013713767209 21 -637.259985333474 31 2192.10870461431 12 180.675224578544 22 -637.259985333474 32 2192.10870461431 13 180.675224578544 23 -637.259985333474 33 2192.10870461431 70 1 0 3DFACE 8 body_half_outside 10 -554.192057578438 20 -829.407026995335 30 1708.93950189862 11 -569.385752125536 21 -735.58576491719 31 1614.7610800213 12 -519.085398326623 22 -776.866198451135 32 1614.7610800213 13 -519.085398326623 23 -776.866198451135 33 1614.7610800213 70 1 0 3DFACE 8 body_half_outside 10 -569.385752125536 20 -735.58576491719 30 1614.7610800213 11 -554.192057578438 21 -829.407026995335 31 1708.93950189862 12 -642.32525459148 22 -675.725862229795 32 1614.7610800213 13 -642.32525459148 23 -675.725862229795 33 1614.7610800213 70 3 0 3DFACE 8 body_half_outside 10 -642.32525459148 20 -675.725862229795 30 1614.7610800213 11 -705.352696568271 21 -705.352696568271 31 1708.93950189862 12 -660.670394770277 22 -660.670394770277 32 1614.7610800213 13 -660.670394770277 23 -660.670394770277 33 1614.7610800213 70 1 0 3DFACE 8 body_half_outside 10 -705.352696568271 20 -705.352696568271 30 1708.93950189862 11 -642.32525459148 21 -675.725862229795 31 1614.7610800213 12 -554.192057578438 22 -829.407026995335 32 1708.93950189862 13 -554.192057578438 23 -829.407026995335 33 1708.93950189862 70 3 0 3DFACE 8 body_half_outside 10 -1079.96854760957 20 3.60955709766131e-13 30 2058.8118770109 11 -1059.21725479392 21 -210.691411720441 31 2011.5925230317 12 -1059.21725479392 22 -210.691411720441 32 2058.8118770109 13 -1059.21725479392 23 -210.691411720441 33 2058.8118770109 70 1 0 3DFACE 8 body_half_outside 10 -1059.21725479392 20 -210.691411720441 30 2011.5925230317 11 -1079.96854760957 21 3.60955709766131e-13 31 2058.8118770109 12 -1079.96854760957 22 3.60955709766131e-13 32 2011.5925230317 13 -1079.96854760957 23 3.60955709766131e-13 33 2011.5925230317 70 1 0 3DFACE 8 body_half_outside 10 -687.270773156591 20 -136.706656519425 30 1241.03564002131 11 -794.166563605455 21 1.80477854883065e-13 31 1054.1729200213 12 -778.906875772646 22 -154.93421062823 32 1054.1729200213 13 -778.906875772646 23 -154.93421062823 33 1054.1729200213 70 1 0 3DFACE 8 body_half_outside 10 -794.166563605455 20 1.80477854883065e-13 30 1054.1729200213 11 -687.270773156591 21 -136.706656519425 31 1241.03564002131 12 -700.735203605455 22 1.80477854883065e-13 32 1241.03564002131 13 -700.735203605455 23 1.80477854883065e-13 33 1241.03564002131 70 1 0 3DFACE 8 body_half_outside 10 653.750224578543 20 -808.286776169451 30 1814.69356131783 11 653.750224578544 21 -807.521705673267 31 1812.39759571907 12 670.391132645368 22 -794.16651328432 32 1813.3028368105 13 670.391132645368 23 -794.16651328432 33 1813.3028368105 70 2 0 3DFACE 8 body_half_outside 10 738.20854961057 20 -738.20854961057 30 1812.39759571907 11 670.391132645368 21 -794.16651328432 31 1813.3028368105 12 653.750224578544 22 -807.521705673267 32 1812.39759571907 13 653.750224578544 23 -807.521705673267 33 1812.39759571907 70 3 0 3DFACE 8 body_half_outside 10 670.391132645368 20 -794.16651328432 30 1813.3028368105 11 738.20854961057 21 -738.20854961057 31 1812.39759571907 12 724.87187698787 22 -750.87609961724 32 1817.56657040449 13 724.87187698787 23 -750.87609961724 33 1817.56657040449 70 3 0 3DFACE 8 body_half_outside 10 724.87187698787 20 -750.87609961724 30 1817.56657040449 11 738.20854961057 21 -738.20854961057 31 1812.39759571907 12 739.771122243662 22 -739.771122243661 32 1820.9352284623 13 739.771122243662 23 -739.771122243661 33 1820.9352284623 70 1 0 3DFACE 8 body_half_outside 10 324.981333125909 20 -784.574341950659 30 855.37186879426 11 165.340167031437 21 -831.221151351825 31 796.153149972084 12 324.326404167689 22 -782.993203577332 32 796.153149972084 13 324.326404167689 23 -782.993203577332 33 796.153149972084 70 1 0 3DFACE 8 body_half_outside 10 165.340167031437 20 -831.221151351825 30 796.153149972084 11 324.981333125909 21 -784.574341950659 31 855.37186879426 12 165.674046918965 22 -832.899678896021 32 855.37186879426 13 165.674046918965 23 -832.899678896021 33 855.37186879426 70 1 0 3DFACE 8 body_half_outside 10 768.954752250597 20 -152.954610178005 30 631.979456702016 11 814.429823327873 21 1.80477854883065e-13 31 682.822310520627 12 798.780782641381 22 -158.887376492573 32 682.822310520627 13 798.780782641381 23 -158.887376492573 33 682.822310520627 70 1 0 3DFACE 8 body_half_outside 10 814.429823327873 20 1.80477854883065e-13 30 682.822310520627 11 768.954752250597 21 -152.954610178005 31 631.979456702016 12 784.019466456977 22 1.80477854883065e-13 32 631.979456702016 13 784.019466456977 23 1.80477854883065e-13 33 631.979456702016 70 1 0 3DFACE 8 body_half_outside 10 381.734128610352 20 -921.587710511788 30 1708.93950189862 11 323.520353196241 21 -873.530930139225 31 1614.7610800213 12 357.552241131722 22 -863.2074697971 32 1614.7610800213 13 357.552241131722 23 -863.2074697971 33 1614.7610800213 70 1 0 3DFACE 8 body_half_outside 10 323.520353196241 20 -873.530930139225 30 1614.7610800213 11 381.734128610352 21 -921.587710511788 31 1708.93950189862 12 233.261898600639 22 -900.910533008324 32 1614.7610800213 13 233.261898600639 23 -900.910533008324 33 1614.7610800213 70 3 0 3DFACE 8 body_half_outside 10 233.261898600639 20 -900.910533008324 30 1614.7610800213 11 194.606371158736 21 -978.352295145615 31 1708.93950189862 12 182.278551827736 22 -916.376162171087 32 1614.7610800213 13 182.278551827736 23 -916.376162171087 33 1614.7610800213 70 1 0 3DFACE 8 body_half_outside 10 194.606371158736 20 -978.352295145615 30 1708.93950189862 11 233.261898600639 21 -900.910533008324 31 1614.7610800213 12 381.734128610352 22 -921.587710511788 32 1708.93950189862 13 381.734128610352 23 -921.587710511788 33 1708.93950189862 70 3 0 3DFACE 8 body_half_outside 10 399.51558814382 20 -964.515951276276 30 1812.39759571907 11 194.606371158736 21 -978.352295145615 31 1708.93950189862 12 381.734128610352 22 -921.587710511788 32 1708.93950189862 13 381.734128610352 23 -921.587710511788 33 1708.93950189862 70 1 0 3DFACE 8 body_half_outside 10 194.606371158736 20 -978.352295145615 30 1708.93950189862 11 399.51558814382 21 -964.515951276276 31 1812.39759571907 12 203.671280618918 22 -1023.92467246733 32 1812.39759571907 13 203.671280618918 23 -1023.92467246733 33 1812.39759571907 70 1 0 3DFACE 8 body_half_outside 10 -654.019523605455 20 1.80477854883065e-13 30 1054.1729200213 11 -778.906875772646 21 -154.93421062823 31 1054.1729200213 12 -794.166563605455 22 1.80477854883065e-13 32 1054.1729200213 13 -794.166563605455 23 1.80477854883065e-13 33 1054.1729200213 70 1 0 3DFACE 8 body_half_outside 10 -778.906875772646 20 -154.93421062823 30 1054.1729200213 11 -654.019523605455 21 1.80477854883065e-13 31 1054.1729200213 12 -733.714233519903 22 -303.914386430124 32 1054.1729200213 13 -733.714233519903 23 -303.914386430124 33 1054.1729200213 70 3 0 3DFACE 8 body_half_outside 10 -733.714233519903 20 -303.914386430124 30 1054.1729200213 11 -654.019523605455 21 1.80477854883065e-13 31 1054.1729200213 12 -660.325364744672 22 -441.215302798659 32 1054.1729200213 13 -660.325364744672 23 -441.215302798659 33 1054.1729200213 70 3 0 3DFACE 8 body_half_outside 10 -660.325364744672 20 -441.215302798659 30 1054.1729200213 11 -654.019523605455 21 1.80477854883065e-13 31 1054.1729200213 12 -641.452721848564 22 -127.592879465023 32 1054.1729200213 13 -641.452721848564 23 -127.592879465023 33 1054.1729200213 70 13 0 3DFACE 8 body_half_outside 10 -660.325364744672 20 -441.215302798659 30 1054.1729200213 11 -641.452721848564 21 -127.592879465023 31 1054.1729200213 12 -561.560562517035 22 -561.560562517035 32 1054.1729200213 13 -561.560562517035 23 -561.560562517035 33 1054.1729200213 70 3 0 3DFACE 8 body_half_outside 10 -561.560562517035 20 -561.560562517035 30 1054.1729200213 11 -641.452721848564 21 -127.592879465023 31 1054.1729200213 12 -604.235251721862 22 -250.282436127116 32 1054.1729200213 13 -604.235251721862 23 -250.282436127116 33 1054.1729200213 70 13 0 3DFACE 8 body_half_outside 10 -561.560562517035 20 -561.560562517035 30 1054.1729200213 11 -604.235251721862 21 -250.282436127116 31 1054.1729200213 12 -543.797359730523 22 -363.353779128852 32 1054.1729200213 13 -543.797359730523 23 -363.353779128852 33 1054.1729200213 70 13 0 3DFACE 8 body_half_outside 10 -561.560562517035 20 -561.560562517035 30 1054.1729200213 11 -543.797359730523 21 -363.353779128852 31 1054.1729200213 12 -441.215302798659 22 -660.325364744672 32 1054.1729200213 13 -441.215302798659 23 -660.325364744672 33 1054.1729200213 70 3 0 3DFACE 8 body_half_outside 10 -441.215302798659 20 -660.325364744672 30 1054.1729200213 11 -543.797359730523 21 -363.353779128852 31 1054.1729200213 12 -462.461640169813 22 -462.461640169813 32 1054.1729200213 13 -462.461640169813 23 -462.461640169813 33 1054.1729200213 70 13 0 3DFACE 8 body_half_outside 10 -441.215302798659 20 -660.325364744672 30 1054.1729200213 11 -462.461640169813 21 -462.461640169813 31 1054.1729200213 12 -363.353779128852 22 -543.797359730523 32 1054.1729200213 13 -363.353779128852 23 -543.797359730523 33 1054.1729200213 70 13 0 3DFACE 8 body_half_outside 10 -441.215302798659 20 -660.325364744672 30 1054.1729200213 11 -363.353779128852 21 -543.797359730523 31 1054.1729200213 12 -303.914386430124 22 -733.714233519903 32 1054.1729200213 13 -303.914386430124 23 -733.714233519903 33 1054.1729200213 70 3 0 3DFACE 8 body_half_outside 10 -303.914386430124 20 -733.714233519903 30 1054.1729200213 11 -363.353779128852 21 -543.797359730523 31 1054.1729200213 12 -250.282436127117 22 -604.235251721862 32 1054.1729200213 13 -250.282436127117 23 -604.235251721862 33 1054.1729200213 70 13 0 3DFACE 8 body_half_outside 10 -303.914386430124 20 -733.714233519903 30 1054.1729200213 11 -250.282436127117 21 -604.235251721862 31 1054.1729200213 12 -154.93421062823 22 -778.906875772646 32 1054.1729200213 13 -154.93421062823 23 -778.906875772646 33 1054.1729200213 70 3 0 3DFACE 8 body_half_outside 10 -154.93421062823 20 -778.906875772646 30 1054.1729200213 11 -250.282436127117 21 -604.235251721862 31 1054.1729200213 12 -127.592879465023 22 -641.452721848564 32 1054.1729200213 13 -127.592879465023 23 -641.452721848564 33 1054.1729200213 70 13 0 3DFACE 8 body_half_outside 10 -154.93421062823 20 -778.906875772646 30 1054.1729200213 11 -127.592879465023 21 -641.452721848564 31 1054.1729200213 12 0.0 22 -794.166563605455 32 1054.1729200213 13 0.0 23 -794.166563605455 33 1054.1729200213 70 3 0 3DFACE 8 body_half_outside 10 0.0 20 -794.166563605455 30 1054.1729200213 11 -127.592879465023 21 -641.452721848564 31 1054.1729200213 12 0.0 22 -654.019523605455 32 1054.1729200213 13 0.0 23 -654.019523605455 33 1054.1729200213 70 13 0 3DFACE 8 body_half_outside 10 0.0 20 -794.166563605455 30 1054.1729200213 11 0.0 21 -654.019523605455 31 1054.1729200213 12 127.592879465023 22 -641.452721848564 32 1054.1729200213 13 127.592879465023 23 -641.452721848564 33 1054.1729200213 70 13 0 3DFACE 8 body_half_outside 10 0.0 20 -794.166563605455 30 1054.1729200213 11 127.592879465023 21 -641.452721848564 31 1054.1729200213 12 154.93421062823 22 -778.906875772646 32 1054.1729200213 13 154.93421062823 23 -778.906875772646 33 1054.1729200213 70 3 0 3DFACE 8 body_half_outside 10 154.93421062823 20 -778.906875772646 30 1054.1729200213 11 127.592879465023 21 -641.452721848564 31 1054.1729200213 12 250.282436127116 22 -604.235251721862 32 1054.1729200213 13 250.282436127116 23 -604.235251721862 33 1054.1729200213 70 13 0 3DFACE 8 body_half_outside 10 154.93421062823 20 -778.906875772646 30 1054.1729200213 11 250.282436127116 21 -604.235251721862 31 1054.1729200213 12 303.914386430124 22 -733.714233519903 32 1054.1729200213 13 303.914386430124 23 -733.714233519903 33 1054.1729200213 70 3 0 3DFACE 8 body_half_outside 10 303.914386430124 20 -733.714233519903 30 1054.1729200213 11 250.282436127116 21 -604.235251721862 31 1054.1729200213 12 363.353779128852 22 -543.797359730523 32 1054.1729200213 13 363.353779128852 23 -543.797359730523 33 1054.1729200213 70 13 0 3DFACE 8 body_half_outside 10 303.914386430124 20 -733.714233519903 30 1054.1729200213 11 363.353779128852 21 -543.797359730523 31 1054.1729200213 12 441.215302798659 22 -660.325364744672 32 1054.1729200213 13 441.215302798659 23 -660.325364744672 33 1054.1729200213 70 3 0 3DFACE 8 body_half_outside 10 441.215302798659 20 -660.325364744672 30 1054.1729200213 11 363.353779128852 21 -543.797359730523 31 1054.1729200213 12 462.461640169813 22 -462.461640169813 32 1054.1729200213 13 462.461640169813 23 -462.461640169813 33 1054.1729200213 70 13 0 3DFACE 8 body_half_outside 10 441.215302798659 20 -660.325364744672 30 1054.1729200213 11 462.461640169813 21 -462.461640169813 31 1054.1729200213 12 561.560562517035 22 -561.560562517035 32 1054.1729200213 13 561.560562517035 23 -561.560562517035 33 1054.1729200213 70 3 0 3DFACE 8 body_half_outside 10 561.560562517035 20 -561.560562517035 30 1054.1729200213 11 462.461640169813 21 -462.461640169813 31 1054.1729200213 12 543.797359730523 22 -363.353779128852 32 1054.1729200213 13 543.797359730523 23 -363.353779128852 33 1054.1729200213 70 13 0 3DFACE 8 body_half_outside 10 561.560562517035 20 -561.560562517035 30 1054.1729200213 11 543.797359730523 21 -363.353779128852 31 1054.1729200213 12 604.235251721863 22 -250.282436127116 32 1054.1729200213 13 604.235251721863 23 -250.282436127116 33 1054.1729200213 70 13 0 3DFACE 8 body_half_outside 10 561.560562517035 20 -561.560562517035 30 1054.1729200213 11 604.235251721863 21 -250.282436127116 31 1054.1729200213 12 660.325364744673 22 -441.215302798659 32 1054.1729200213 13 660.325364744673 23 -441.215302798659 33 1054.1729200213 70 3 0 3DFACE 8 body_half_outside 10 660.325364744673 20 -441.215302798659 30 1054.1729200213 11 604.235251721863 21 -250.282436127116 31 1054.1729200213 12 641.452721848564 22 -127.592879465023 32 1054.1729200213 13 641.452721848564 23 -127.592879465023 33 1054.1729200213 70 13 0 3DFACE 8 body_half_outside 10 660.325364744673 20 -441.215302798659 30 1054.1729200213 11 641.452721848564 21 -127.592879465023 31 1054.1729200213 12 654.019523605455 22 0.0 32 1054.1729200213 13 654.019523605455 23 0.0 33 1054.1729200213 70 13 0 3DFACE 8 body_half_outside 10 660.325364744673 20 -441.215302798659 30 1054.1729200213 11 654.019523605455 21 0.0 31 1054.1729200213 12 794.166563605455 22 1.80477854883065e-13 32 1054.1729200213 13 794.166563605455 23 1.80477854883065e-13 33 1054.1729200213 70 13 0 3DFACE 8 body_half_outside 10 660.325364744673 20 -441.215302798659 30 1054.1729200213 11 794.166563605455 21 1.80477854883065e-13 31 1054.1729200213 12 733.714233519903 22 -303.914386430124 32 1054.1729200213 13 733.714233519903 23 -303.914386430124 33 1054.1729200213 70 3 0 3DFACE 8 body_half_outside 10 733.714233519903 20 -303.914386430124 30 1054.1729200213 11 794.166563605455 21 1.80477854883065e-13 31 1054.1729200213 12 778.906875772646 22 -154.93421062823 32 1054.1729200213 13 778.906875772646 23 -154.93421062823 33 1054.1729200213 70 1 0 3DFACE 8 body_half_outside 10 1.80477854883065e-13 20 -934.329032542513 30 2455.6433200213 11 -194.606371158736 21 -978.352295145615 31 2361.46489814399 12 1.80477854883065e-13 22 -997.519349743284 32 2361.46489814399 13 1.80477854883065e-13 23 -997.519349743284 33 2361.46489814399 70 1 0 3DFACE 8 body_half_outside 10 -194.606371158736 20 -978.352295145615 30 2361.46489814399 11 1.80477854883065e-13 21 -934.329032542513 31 2455.6433200213 12 -182.278551827737 22 -916.376162171087 32 2455.6433200213 13 -182.278551827737 23 -916.376162171087 33 2455.6433200213 70 3 0 3DFACE 8 body_half_outside 10 -182.278551827737 20 -916.376162171087 30 2455.6433200213 11 1.80477854883065e-13 21 -934.329032542513 31 2455.6433200213 12 -47.1482978123039 22 -929.685330525077 32 2455.6433200213 13 -47.1482978123039 23 -929.685330525077 33 2455.6433200213 70 13 0 3DFACE 8 body_half_outside 10 -182.278551827737 20 -916.376162171087 30 2455.6433200213 11 -47.1482978123039 21 -929.685330525077 31 2455.6433200213 12 -141.006393478031 22 -920.441114966529 32 2455.6433200213 13 -141.006393478031 23 -920.441114966529 33 2455.6433200213 70 1 0 3DFACE 8 body_half_outside 10 843.013713767209 20 -637.259985333474 30 2192.10870461431 11 180.675224578544 21 -670.885845335315 31 2219.70473474119 12 180.675224578544 22 -637.259985333474 32 2192.10870461431 13 180.675224578544 23 -637.259985333474 33 2192.10870461431 70 1 0 3DFACE 8 body_half_outside 10 180.675224578544 20 -670.885845335315 30 2219.70473474119 11 843.013713767209 21 -637.259985333474 31 2192.10870461431 12 806.222028237971 22 -670.885845335315 32 2219.70473474119 13 806.222028237971 23 -670.885845335315 33 2219.70473474119 70 1 0 3DFACE 8 body_half_outside 10 -635.110018052195 20 -545.224061178794 30 2549.0746800213 11 -594.593536632775 21 -594.593536632776 31 2455.6433200213 12 -594.593536632776 22 -594.593536632776 32 2549.0746800213 13 -594.593536632776 23 -594.593536632776 33 2549.0746800213 70 1 0 3DFACE 8 body_half_outside 10 -594.593536632775 20 -594.593536632776 30 2455.6433200213 11 -635.110018052195 21 -545.224061178794 31 2549.0746800213 12 -699.168033082722 22 -467.169144021928 32 2455.6433200213 13 -699.168033082722 23 -467.169144021928 33 2455.6433200213 70 3 0 3DFACE 8 body_half_outside 10 -699.168033082722 20 -467.169144021928 30 2455.6433200213 11 -635.110018052195 21 -545.224061178794 31 2549.0746800213 12 -689.000369065216 22 -479.558478474255 32 2549.0746800213 13 -689.000369065216 23 -479.558478474255 33 2549.0746800213 70 13 0 3DFACE 8 body_half_outside 10 -699.168033082722 20 -467.169144021928 30 2455.6433200213 11 -689.000369065216 21 -479.558478474255 31 2549.0746800213 12 -699.168033082722 22 -467.169144021929 32 2549.0746800213 13 -699.168033082722 23 -467.169144021929 33 2549.0746800213 70 1 0 3DFACE 8 body_half_outside 10 863.207469797099 20 -357.552241131722 30 1614.7610800213 11 978.352295145615 21 -194.606371158736 31 1708.93950189862 12 921.587710511789 22 -381.734128610352 32 1708.93950189862 13 921.587710511789 23 -381.734128610352 33 1708.93950189862 70 1 0 3DFACE 8 body_half_outside 10 978.352295145615 20 -194.606371158736 30 1708.93950189862 11 863.207469797099 21 -357.552241131722 31 1614.7610800213 12 887.227327057414 22 -278.369383502706 32 1614.7610800213 13 887.227327057414 23 -278.369383502706 33 1614.7610800213 70 13 0 3DFACE 8 body_half_outside 10 978.352295145615 20 -194.606371158736 30 1708.93950189862 11 887.227327057414 21 -278.369383502706 31 1614.7610800213 12 914.651020925795 22 -187.965580361484 32 1614.7610800213 13 914.651020925795 23 -187.965580361484 33 1614.7610800213 70 13 0 3DFACE 8 body_half_outside 10 978.352295145615 20 -194.606371158736 30 1708.93950189862 11 914.651020925795 21 -187.965580361484 31 1614.7610800213 12 916.376162171087 22 -182.278551827737 32 1614.7610800213 13 916.376162171087 23 -182.278551827737 33 1614.7610800213 70 1 0 3DFACE 8 body_half_outside 10 158.887376492573 20 -798.780782641381 30 682.822310520627 11 0.0 21 -784.019466456977 31 631.979456702016 12 152.954610178005 22 -768.954752250597 32 631.979456702016 13 152.954610178005 23 -768.954752250597 33 631.979456702016 70 1 0 3DFACE 8 body_half_outside 10 0.0 20 -784.019466456977 30 631.979456702016 11 158.887376492573 21 -798.780782641381 31 682.822310520627 12 0.0 22 -814.429823327873 32 682.822310520627 13 0.0 23 -814.429823327873 33 682.822310520627 70 1 0 3DFACE 8 body_half_outside 10 -580.006735667279 20 -868.04142298445 30 1812.39759571907 11 -705.352696568271 21 -705.352696568271 31 1708.93950189862 12 -554.192057578438 22 -829.407026995335 32 1708.93950189862 13 -554.192057578438 23 -829.407026995335 33 1708.93950189862 70 1 0 3DFACE 8 body_half_outside 10 -705.352696568271 20 -705.352696568271 30 1708.93950189862 11 -580.006735667279 21 -868.04142298445 31 1812.39759571907 12 -738.20854961057 22 -738.20854961057 32 1812.39759571907 13 -738.20854961057 23 -738.20854961057 33 1812.39759571907 70 1 0 3DFACE 8 body_half_outside 10 -997.760836892423 20 -413.286070645571 30 2058.8118770109 11 -897.961029579872 21 -599.99837764929 31 2011.5925230317 12 -897.961029579872 22 -599.99837764929 32 2058.8118770109 13 -897.961029579872 23 -599.99837764929 33 2058.8118770109 70 1 0 3DFACE 8 body_half_outside 10 -897.961029579872 20 -599.99837764929 30 2011.5925230317 11 -997.760836892423 21 -413.286070645571 31 2058.8118770109 12 -997.760836892423 22 -413.286070645571 32 2011.5925230317 13 -997.760836892423 23 -413.286070645571 33 2011.5925230317 70 1 0 3DFACE 8 body_half_outside 10 -891.670534105406 20 -595.795202951324 30 2148.21162800104 11 -997.760836892423 21 -413.286070645571 31 2058.8118770109 12 -897.961029579872 22 -599.99837764929 32 2058.8118770109 13 -897.961029579872 23 -599.99837764929 33 2058.8118770109 70 1 0 3DFACE 8 body_half_outside 10 -997.760836892423 20 -413.286070645571 30 2058.8118770109 11 -891.670534105406 21 -595.795202951324 31 2148.21162800104 12 -990.771212819307 22 -410.390873558597 32 2148.21162800104 13 -990.771212819307 23 -410.390873558597 33 2148.21162800104 70 1 0 3DFACE 8 body_half_outside 10 -467.169144021929 20 -699.168033082722 30 914.026066884025 11 -600.487204246519 21 -600.487204246519 31 855.37186879426 12 -471.799768952456 22 -706.098253038492 32 855.37186879426 13 -471.799768952456 23 -706.098253038492 33 855.37186879426 70 1 0 3DFACE 8 body_half_outside 10 -600.487204246519 20 -600.487204246519 30 855.37186879426 11 -467.169144021929 21 -699.168033082722 31 914.026066884025 12 -594.593536632776 22 -594.593536632776 32 914.026066884025 13 -594.593536632776 23 -594.593536632776 33 914.026066884025 70 1 0 3DFACE 8 body_half_outside 10 152.954610178005 20 -768.954752250597 30 631.979456702016 11 0.0 21 -745.443557551535 31 587.016306884026 12 145.428823687577 22 -731.120068617964 32 587.016306884026 13 145.428823687577 23 -731.120068617964 33 587.016306884026 70 1 0 3DFACE 8 body_half_outside 10 0.0 20 -745.443557551535 30 587.016306884026 11 152.954610178005 21 -768.954752250597 31 631.979456702016 12 0.0 22 -784.019466456977 32 631.979456702016 13 0.0 23 -784.019466456977 33 631.979456702016 70 1 0 3DFACE 8 body_half_outside 10 -619.813665790805 20 -414.146250971868 30 587.016306884026 11 -554.385481313987 21 -554.385481313987 31 631.979456702016 12 -651.888361812631 22 -435.577877671407 32 631.979456702016 13 -651.888361812631 23 -435.577877671407 33 631.979456702016 70 1 0 3DFACE 8 body_half_outside 10 -554.385481313987 20 -554.385481313987 30 631.979456702016 11 -619.813665790805 21 -414.146250971868 31 587.016306884026 12 -527.108194536515 22 -527.108194536515 32 587.016306884026 13 -527.108194536515 23 -527.108194536515 33 587.016306884026 70 1 0 3DFACE 8 body_half_outside 10 475.358481968201 20 -929.775248028225 30 1832.24936277796 11 399.51558814382 21 -964.515951276276 31 1812.39759571907 12 533.995007415167 22 -892.635204119545 32 1812.39759571907 13 533.995007415167 23 -892.635204119545 33 1812.39759571907 70 1 0 3DFACE 8 body_half_outside 10 399.51558814382 20 -964.515951276276 30 1812.39759571907 11 475.358481968201 21 -929.775248028225 31 1832.24936277796 12 422.745208264425 22 -966.763694030251 32 1862.60499591753 13 422.745208264425 23 -966.763694030251 33 1862.60499591753 70 13 0 3DFACE 8 body_half_outside 10 399.51558814382 20 -964.515951276276 30 1812.39759571907 11 422.745208264425 21 -966.763694030251 31 1862.60499591753 12 406.150722558891 22 -980.534582769308 32 1879.38487239655 13 406.150722558891 23 -980.534582769308 33 1879.38487239655 70 1 0 3DFACE 8 body_half_outside 10 -519.085398326623 20 -776.866198451135 30 2455.6433200213 11 -705.352696568271 21 -705.352696568271 31 2361.46489814399 12 -554.192057578438 22 -829.407026995335 32 2361.46489814399 13 -554.192057578438 23 -829.407026995335 33 2361.46489814399 70 1 0 3DFACE 8 body_half_outside 10 -705.352696568271 20 -705.352696568271 30 2361.46489814399 11 -519.085398326623 21 -776.866198451135 31 2455.6433200213 12 -660.670394770277 22 -660.670394770277 32 2455.6433200213 13 -660.670394770277 23 -660.670394770277 33 2455.6433200213 70 3 0 3DFACE 8 body_half_outside 10 -660.670394770277 20 -660.670394770277 30 2455.6433200213 11 -519.085398326623 21 -776.866198451135 31 2455.6433200213 12 -569.385750357394 22 -735.585766368266 32 2455.6433200213 13 -569.385750357394 23 -735.585766368266 33 2455.6433200213 70 13 0 3DFACE 8 body_half_outside 10 -660.670394770277 20 -660.670394770277 30 2455.6433200213 11 -569.385750357394 21 -735.585766368266 31 2455.6433200213 12 -642.325255137832 22 -675.725861781415 32 2455.6433200213 13 -642.325255137832 23 -675.725861781415 33 2455.6433200213 70 1 0 3DFACE 8 body_half_outside 10 324.326404167689 20 -782.993203577332 30 796.153149972084 11 163.055979488767 21 -819.73776511114 31 738.078199114136 12 319.845809128627 22 -772.176090266528 32 738.078199114136 13 319.845809128627 23 -772.176090266528 33 738.078199114136 70 1 0 3DFACE 8 body_half_outside 10 163.055979488767 20 -819.73776511114 30 738.078199114136 11 324.326404167689 21 -782.993203577332 31 796.153149972084 12 165.340167031437 22 -831.221151351825 32 796.153149972084 13 165.340167031437 23 -831.221151351825 33 796.153149972084 70 1 0 3DFACE 8 body_half_outside 10 824.724927080674 20 -164.047987682633 30 2455.6433200213 11 832.543812136584 21 -84.6615154688545 31 2549.0746800213 12 824.724927080674 22 -164.047987682633 32 2549.0746800213 13 824.724927080674 23 -164.047987682633 33 2549.0746800213 70 1 0 3DFACE 8 body_half_outside 10 832.543812136584 20 -84.6615154688545 30 2549.0746800213 11 824.724927080674 21 -164.047987682633 31 2455.6433200213 12 840.882243605455 22 1.80477854883065e-13 32 2455.6433200213 13 840.882243605455 23 1.80477854883065e-13 33 2455.6433200213 70 13 0 3DFACE 8 body_half_outside 10 832.543812136584 20 -84.6615154688545 30 2549.0746800213 11 840.882243605455 21 1.80477854883065e-13 31 2455.6433200213 12 840.882243605455 22 1.80477854883065e-13 32 2549.0746800213 13 840.882243605455 23 1.80477854883065e-13 33 2549.0746800213 70 1 0 3DFACE 8 body_half_outside 10 -1043.98454271904 20 3.60955709766131e-13 30 1812.39759571907 11 -978.352295145615 21 -194.606371158736 31 1708.93950189862 12 -1023.92467246733 22 -203.671280618918 32 1812.39759571907 13 -1023.92467246733 23 -203.671280618918 33 1812.39759571907 70 1 0 3DFACE 8 body_half_outside 10 -978.352295145615 20 -194.606371158736 30 1708.93950189862 11 -1043.98454271904 21 3.60955709766131e-13 31 1812.39759571907 12 -997.519349743285 22 3.60955709766131e-13 32 1708.93950189862 13 -997.519349743285 23 3.60955709766131e-13 33 1708.93950189862 70 1 0 3DFACE 8 body_half_outside 10 -527.108194536515 20 -527.108194536515 30 587.016306884026 11 -435.577877671407 21 -651.888361812631 31 631.979456702016 12 -554.385481313987 22 -554.385481313987 32 631.979456702016 13 -554.385481313987 23 -554.385481313987 33 631.979456702016 70 1 0 3DFACE 8 body_half_outside 10 -435.577877671407 20 -651.888361812631 30 631.979456702016 11 -527.108194536515 21 -527.108194536515 31 587.016306884026 12 -414.146250971868 22 -619.813665790805 32 587.016306884026 13 -414.146250971868 23 -619.813665790805 33 587.016306884026 70 1 0 3DFACE 8 body_half_outside 10 -452.472966724379 20 -677.173649450057 30 682.822310520627 11 -554.385481313987 21 -554.385481313987 31 631.979456702016 12 -435.577877671407 22 -651.888361812631 32 631.979456702016 13 -435.577877671407 23 -651.888361812631 33 631.979456702016 70 1 0 3DFACE 8 body_half_outside 10 -554.385481313987 20 -554.385481313987 30 631.979456702016 11 -452.472966724379 21 -677.173649450057 31 682.822310520627 12 -575.888850875701 22 -575.888850875701 32 682.822310520627 13 -575.888850875701 23 -575.888850875701 33 682.822310520627 70 1 0 3DFACE 8 body_half_outside 10 997.760836892423 20 -413.286070645571 30 2011.5925230317 11 912.783669278017 21 -572.267169258698 31 2035.20224467364 12 911.540741979581 22 -574.59252267949 32 2011.5925230317 13 911.540741979581 23 -574.59252267949 33 2011.5925230317 70 1 0 3DFACE 8 body_half_outside 10 912.783669278017 20 -572.267169258698 30 2035.20224467364 11 997.760836892423 21 -413.286070645571 31 2058.8118770109 12 911.54074094115 22 -574.592524622259 32 2058.8118770109 13 911.54074094115 23 -574.592524622259 33 2058.8118770109 70 1 0 3DFACE 8 body_half_outside 10 997.760836892423 20 -413.286070645571 30 2058.8118770109 11 912.783669278017 21 -572.267169258698 31 2035.20224467364 12 997.760836892423 22 -413.286070645571 32 2011.5925230317 13 997.760836892423 23 -413.286070645571 33 2011.5925230317 70 3 0 3DFACE 8 body_half_outside 10 203.671280618918 20 -1023.92467246733 30 1812.39759571907 11 1.80477854883065e-13 21 -997.519349743284 31 1708.93950189862 12 194.606371158736 22 -978.352295145615 32 1708.93950189862 13 194.606371158736 23 -978.352295145615 33 1708.93950189862 70 1 0 3DFACE 8 body_half_outside 10 1.80477854883065e-13 20 -997.519349743284 30 1708.93950189862 11 203.671280618918 21 -1023.92467246733 31 1812.39759571907 12 1.80477854883065e-13 22 -1043.98454271904 32 1812.39759571907 13 1.80477854883065e-13 23 -1043.98454271904 33 1812.39759571907 70 1 0 3DFACE 8 body_half_outside 10 209.215453044867 20 -1051.79710945546 30 2148.21162800104 11 36.3998441498995 21 -1076.38347587727 31 2058.8118770109 12 210.691411720441 22 -1059.21725479392 32 2058.8118770109 13 210.691411720441 23 -1059.21725479392 33 2058.8118770109 70 1 0 3DFACE 8 body_half_outside 10 36.3998441498995 20 -1076.38347587727 30 2058.8118770109 11 209.215453044867 21 -1051.79710945546 31 2148.21162800104 12 35.9517814413365 22 -1076.35666734212 32 2059.65014337885 13 35.9517814413365 23 -1076.35666734212 33 2059.65014337885 70 3 0 3DFACE 8 body_half_outside 10 35.9517814413365 20 -1076.35666734212 30 2059.65014337885 11 209.215453044867 21 -1051.79710945546 31 2148.21162800104 12 30.354884250617 22 -1076.33078010212 32 2066.4699823381 13 30.354884250617 23 -1076.33078010212 33 2066.4699823381 70 3 0 3DFACE 8 body_half_outside 10 30.354884250617 20 -1076.33078010212 30 2066.4699823381 11 209.215453044867 21 -1051.79710945546 31 2148.21162800104 12 23.5350452913723 22 -1076.52883438997 32 2072.06687952882 13 23.5350452913723 23 -1076.52883438997 33 2072.06687952882 70 3 0 3DFACE 8 body_half_outside 10 23.5350452913723 20 -1076.52883438997 30 2072.06687952882 11 209.215453044867 21 -1051.79710945546 31 2148.21162800104 12 15.754347150196 22 -1076.94321909047 32 2076.22574933075 13 15.754347150196 23 -1076.94321909047 33 2076.22574933075 70 3 0 3DFACE 8 body_half_outside 10 15.754347150196 20 -1076.94321909047 30 2076.22574933075 11 209.215453044867 21 -1051.79710945546 31 2148.21162800104 12 7.31179769318775 22 -1077.55800963197 32 2078.78676870972 13 7.31179769318775 23 -1077.55800963197 33 2078.78676870972 70 3 0 3DFACE 8 body_half_outside 10 7.31179769318775 20 -1077.55800963197 30 2078.78676870972 11 209.215453044867 21 -1051.79710945546 31 2148.21162800104 12 1.80477854883065e-13 22 -1078.21721573187 32 2079.50691792559 13 1.80477854883065e-13 23 -1078.21721573187 33 2079.50691792559 70 3 0 3DFACE 8 body_half_outside 10 1.80477854883065e-13 20 -1078.21721573187 30 2079.50691792559 11 209.215453044867 21 -1051.79710945546 31 2148.21162800104 12 1.80477854883065e-13 22 -1072.40303302985 32 2148.21162800104 13 1.80477854883065e-13 23 -1072.40303302985 33 2148.21162800104 70 1 0 3DFACE 8 body_half_outside 10 824.724927080674 20 -164.047987682633 30 914.026066884025 11 654.019523605455 21 0.0 31 1054.1729200213 12 641.452721848564 22 -127.592879465023 32 1054.1729200213 13 641.452721848564 23 -127.592879465023 33 1054.1729200213 70 1 0 3DFACE 8 body_half_outside 10 654.019523605455 20 0.0 30 1054.1729200213 11 824.724927080674 21 -164.047987682633 31 914.026066884025 12 840.882243605455 22 1.80477854883065e-13 32 914.026066884025 13 840.882243605455 23 1.80477854883065e-13 33 914.026066884025 70 1 0 3DFACE 8 body_half_outside 10 653.750224578544 20 -879.083714298799 30 2240.21043503138 11 180.675224578544 21 -917.447181233325 31 2219.70473474119 12 180.675224578544 22 -879.083714298798 32 2240.21043503138 13 180.675224578544 23 -879.083714298798 33 2240.21043503138 70 1 0 3DFACE 8 body_half_outside 10 180.675224578544 20 -917.447181233325 30 2219.70473474119 11 653.750224578544 21 -879.083714298799 31 2240.21043503138 12 653.750224578544 22 -917.447181233325 32 2219.70473474119 13 653.750224578544 23 -917.447181233325 33 2219.70473474119 70 1 0 3DFACE 8 body_half_outside 10 145.820433573828 20 -733.088824464618 30 1427.8983600213 11 0.0 21 -840.882243605455 31 1241.03564002131 12 164.047987682633 22 -824.724927080674 32 1241.03564002131 13 164.047987682633 23 -824.724927080674 33 1241.03564002131 70 1 0 3DFACE 8 body_half_outside 10 0.0 20 -840.882243605455 30 1241.03564002131 11 145.820433573828 21 -733.088824464618 31 1427.8983600213 12 0.0 22 -747.450883605455 32 1427.8983600213 13 0.0 23 -747.450883605455 33 1427.8983600213 70 1 0 3DFACE 8 body_half_outside 10 -321.791703197793 20 -776.87389411925 30 914.026066884025 11 -363.353779128852 21 -543.797359730523 31 1054.1729200213 12 -467.169144021929 22 -699.168033082722 32 914.026066884025 13 -467.169144021929 23 -699.168033082722 33 914.026066884025 70 1 0 3DFACE 8 body_half_outside 10 -363.353779128852 20 -543.797359730523 30 1054.1729200213 11 -321.791703197793 21 -776.87389411925 31 914.026066884025 12 -250.282436127117 22 -604.235251721862 32 1054.1729200213 13 -250.282436127117 23 -604.235251721862 33 1054.1729200213 70 1 0 3DFACE 8 body_half_outside 10 577.57828073944 20 -864.406983345072 30 1802.66501966685 11 653.750224578544 21 -887.575434400246 31 1809.69309245876 12 540.896876185886 22 -887.575434400246 32 1809.69309245876 13 540.896876185886 23 -887.575434400246 33 1809.69309245876 70 1 0 3DFACE 8 body_half_outside 10 653.750224578544 20 -887.575434400246 30 1809.69309245876 11 577.57828073944 21 -864.406983345072 31 1802.66501966685 12 600.307476319437 22 -841.785968318108 32 1795.80300977859 13 600.307476319437 23 -841.785968318108 33 1795.80300977859 70 13 0 3DFACE 8 body_half_outside 10 653.750224578544 20 -887.575434400246 30 1809.69309245876 11 600.307476319437 21 -841.785968318108 31 1795.80300977859 12 653.750224578544 22 -841.785968318108 32 1795.80300977859 13 653.750224578544 23 -841.785968318108 33 1795.80300977859 70 1 0 3DFACE 8 body_half_outside 10 653.750224578544 20 -1033.56568016919 30 1987.58272162967 11 320.792432759964 21 -1019.67559748903 31 1941.79325554754 12 653.750224578544 22 -1019.67559748903 32 1941.79325554754 13 653.750224578544 23 -1019.67559748903 33 1941.79325554754 70 1 0 3DFACE 8 body_half_outside 10 320.792432759964 20 -1019.67559748903 30 1941.79325554754 11 653.750224578544 21 -1033.56568016919 31 1987.58272162967 12 288.287531523413 22 -1033.5656801692 32 1987.58272162968 13 288.287531523413 23 -1033.5656801692 33 1987.58272162968 70 1 0 3DFACE 8 body_half_outside 10 136.706656519425 20 -687.270773156591 30 1241.03564002131 11 0.0 21 -794.166563605455 31 1054.1729200213 12 154.93421062823 22 -778.906875772646 32 1054.1729200213 13 154.93421062823 23 -778.906875772646 33 1054.1729200213 70 1 0 3DFACE 8 body_half_outside 10 0.0 20 -794.166563605455 30 1054.1729200213 11 136.706656519425 21 -687.270773156591 31 1241.03564002131 12 0.0 22 -700.735203605455 32 1241.03564002131 13 0.0 23 -700.735203605455 33 1241.03564002131 70 1 0 3DFACE 8 body_half_outside 10 -599.99837764929 20 -897.961029579872 30 2058.8118770109 11 -644.006839982028 21 -861.844217926399 31 2011.59252303171 12 -599.99837764929 22 -897.961029579872 32 2011.5925230317 13 -599.99837764929 23 -897.961029579872 33 2011.5925230317 70 1 0 3DFACE 8 body_half_outside 10 -644.006839982028 20 -861.844217926399 30 2011.59252303171 11 -599.99837764929 21 -897.961029579872 31 2058.8118770109 12 -644.327893757466 22 -861.580735902195 32 2058.8118770109 13 -644.327893757466 23 -861.580735902195 33 2058.8118770109 70 1 0 3DFACE 8 body_half_outside 10 0.0 20 -840.882243605455 30 914.026066884025 11 -165.674046918965 21 -832.899678896021 31 855.37186879426 12 1.80477854883065e-13 22 -849.217148276931 32 855.37186879426 13 1.80477854883065e-13 23 -849.217148276931 33 855.37186879426 70 1 0 3DFACE 8 body_half_outside 10 -165.674046918965 20 -832.899678896021 30 855.37186879426 11 0.0 21 -840.882243605455 31 914.026066884025 12 -164.047987682633 22 -824.724927080674 32 914.026066884025 13 -164.047987682633 23 -824.724927080674 33 914.026066884025 70 1 0 3DFACE 8 body_half_outside 10 1079.96854760957 20 1.80477854883065e-13 30 2058.8118770109 11 1051.79710945546 21 -209.215453044867 31 2148.21162800104 12 1059.21725479392 22 -210.691411720441 32 2058.8118770109 13 1059.21725479392 23 -210.691411720441 33 2058.8118770109 70 1 0 3DFACE 8 body_half_outside 10 1051.79710945546 20 -209.215453044867 30 2148.21162800104 11 1079.96854760957 21 1.80477854883065e-13 31 2058.8118770109 12 1072.40303302985 22 1.80477854883065e-13 32 2148.21162800104 13 1072.40303302985 23 1.80477854883065e-13 33 2148.21162800104 70 1 0 3DFACE 8 body_half_outside 10 23.5350452913725 20 -976.504549306342 30 2072.06687952882 11 15.754347150196 21 -1076.94321909047 31 2076.22574933075 12 15.754347150196 22 -977.021929553012 32 2076.22574933075 13 15.754347150196 23 -977.021929553012 33 2076.22574933075 70 1 0 3DFACE 8 body_half_outside 10 15.754347150196 20 -1076.94321909047 30 2076.22574933075 11 23.5350452913725 21 -976.504549306342 31 2072.06687952882 12 23.5350452913723 22 -1076.52883438997 32 2072.06687952882 13 23.5350452913723 23 -1076.52883438997 33 2072.06687952882 70 1 0 3DFACE 8 body_half_outside 10 -699.168033082722 20 -467.169144021929 30 914.026066884025 11 -604.235251721862 21 -250.282436127116 31 1054.1729200213 12 -776.87389411925 22 -321.791703197793 32 914.026066884025 13 -776.87389411925 23 -321.791703197793 33 914.026066884025 70 1 0 3DFACE 8 body_half_outside 10 -604.235251721862 20 -250.282436127116 30 1054.1729200213 11 -699.168033082722 21 -467.169144021929 31 914.026066884025 12 -543.797359730523 22 -363.353779128852 32 1054.1729200213 13 -543.797359730523 23 -363.353779128852 33 1054.1729200213 70 1 0 3DFACE 8 body_half_outside 10 163.055979488767 20 -819.73776511114 30 738.078199114136 11 0.0 21 -814.429823327873 31 682.822310520627 12 158.887376492573 22 -798.780782641381 32 682.822310520627 13 158.887376492573 23 -798.780782641381 33 682.822310520627 70 1 0 3DFACE 8 body_half_outside 10 0.0 20 -814.429823327873 30 682.822310520627 11 163.055979488767 21 -819.73776511114 31 738.078199114136 12 1.80477854883065e-13 22 -835.797377356766 32 738.078199114136 13 1.80477854883065e-13 23 -835.797377356766 33 738.078199114136 70 1 0 3DFACE 8 body_half_outside 10 -776.87389411925 20 -321.791703197793 30 914.026066884025 11 -832.899678896021 21 -165.674046918964 31 855.37186879426 12 -784.574341950659 22 -324.981333125909 32 855.37186879426 13 -784.574341950659 23 -324.981333125909 33 855.37186879426 70 1 0 3DFACE 8 body_half_outside 10 -832.899678896021 20 -165.674046918964 30 855.37186879426 11 -776.87389411925 21 -321.791703197793 31 914.026066884025 12 -824.724927080674 22 -164.047987682633 32 914.026066884025 13 -824.724927080674 23 -164.047987682633 33 914.026066884025 70 1 0 3DFACE 8 body_half_outside 10 -660.325364744672 20 -441.215302798659 30 1614.7610800213 11 -772.428086079136 21 -428.73258747146 31 1427.8983600213 12 -738.010701420772 22 -493.122985245198 32 1427.8983600213 13 -738.010701420772 23 -493.122985245198 33 1427.8983600213 70 1 0 3DFACE 8 body_half_outside 10 -772.428086079136 20 -428.73258747146 30 1427.8983600213 11 -660.325364744672 21 -441.215302798659 31 1614.7610800213 12 -733.714233519903 22 -303.914386430124 32 1614.7610800213 13 -733.714233519903 23 -303.914386430124 33 1614.7610800213 70 13 0 3DFACE 8 body_half_outside 10 -772.428086079136 20 -428.73258747146 30 1427.8983600213 11 -733.714233519903 21 -303.914386430124 31 1614.7610800213 12 -814.713927134819 22 -349.621343174435 32 1427.8983600213 13 -814.713927134819 23 -349.621343174435 33 1427.8983600213 70 3 0 3DFACE 8 body_half_outside 10 -814.713927134819 20 -349.621343174435 30 1427.8983600213 11 -733.714233519903 21 -303.914386430124 31 1614.7610800213 12 -820.033554718597 22 -339.669019965462 32 1427.8983600213 13 -820.033554718597 23 -339.669019965462 33 1427.8983600213 70 1 0 3DFACE 8 body_half_outside 10 -921.587710511788 20 -381.734128610352 30 1708.93950189862 11 -776.866198451135 21 -519.085398326623 31 1614.7610800213 12 -829.407026995335 22 -554.192057578438 32 1708.93950189862 13 -829.407026995335 23 -554.192057578438 33 1708.93950189862 70 1 0 3DFACE 8 body_half_outside 10 -776.866198451135 20 -519.085398326623 30 1614.7610800213 11 -921.587710511788 21 -381.734128610352 31 1708.93950189862 12 -813.095615539802 22 -451.304926317894 32 1614.7610800213 13 -813.095615539802 23 -451.304926317894 33 1614.7610800213 70 3 0 3DFACE 8 body_half_outside 10 -813.095615539802 20 -451.304926317894 30 1614.7610800213 11 -921.587710511788 21 -381.734128610352 31 1708.93950189862 12 -857.607798337338 22 -368.028489582189 32 1614.7610800213 13 -857.607798337338 23 -368.028489582189 33 1614.7610800213 70 3 0 3DFACE 8 body_half_outside 10 -857.607798337338 20 -368.028489582189 30 1614.7610800213 11 -921.587710511788 21 -381.734128610352 31 1708.93950189862 12 -863.207469797099 22 -357.552241131722 32 1614.7610800213 13 -863.207469797099 23 -357.552241131722 33 1614.7610800213 70 1 0 3DFACE 8 body_half_outside 10 824.724927080674 20 -164.047987682633 30 1241.03564002131 11 690.554572920556 21 -286.037069662455 31 1427.8983600213 12 776.87389411925 22 -321.791703197793 32 1241.03564002131 13 776.87389411925 23 -321.791703197793 33 1241.03564002131 70 1 0 3DFACE 8 body_half_outside 10 690.554572920556 20 -286.037069662455 30 1427.8983600213 11 824.724927080674 21 -164.047987682633 31 1241.03564002131 12 733.088824464618 22 -145.820433573828 32 1427.8983600213 13 733.088824464618 23 -145.820433573828 33 1427.8983600213 70 1 0 3DFACE 8 body_half_outside 10 -700.735203605455 20 1.80477854883065e-13 30 1241.03564002131 11 -824.724927080674 21 -164.047987682633 31 1241.03564002131 12 -840.882243605455 22 1.80477854883065e-13 32 1241.03564002131 13 -840.882243605455 23 1.80477854883065e-13 33 1241.03564002131 70 1 0 3DFACE 8 body_half_outside 10 -824.724927080674 20 -164.047987682633 30 1241.03564002131 11 -700.735203605455 21 1.80477854883065e-13 31 1241.03564002131 12 -776.873894119249 22 -321.791703197793 32 1241.03564002131 13 -776.873894119249 23 -321.791703197793 33 1241.03564002131 70 3 0 3DFACE 8 body_half_outside 10 -776.873894119249 20 -321.791703197793 30 1241.03564002131 11 -700.735203605455 21 1.80477854883065e-13 31 1241.03564002131 12 -699.168033082722 22 -467.169144021928 32 1241.03564002131 13 -699.168033082722 23 -467.169144021928 33 1241.03564002131 70 3 0 3DFACE 8 body_half_outside 10 -699.168033082722 20 -467.169144021928 30 1241.03564002131 11 -700.735203605455 21 1.80477854883065e-13 31 1241.03564002131 12 -687.270773156591 22 -136.706656519425 32 1241.03564002131 13 -687.270773156591 23 -136.706656519425 33 1241.03564002131 70 13 0 3DFACE 8 body_half_outside 10 -699.168033082722 20 -467.169144021928 30 1241.03564002131 11 -687.270773156591 21 -136.706656519425 31 1241.03564002131 12 -594.593536632775 22 -594.593536632776 32 1241.03564002131 13 -594.593536632775 23 -594.593536632776 33 1241.03564002131 70 3 0 3DFACE 8 body_half_outside 10 -594.593536632775 20 -594.593536632776 30 1241.03564002131 11 -687.270773156591 21 -136.706656519425 31 1241.03564002131 12 -647.394912321209 22 -268.159752894786 32 1241.03564002131 13 -647.394912321209 23 -268.159752894786 33 1241.03564002131 70 13 0 3DFACE 8 body_half_outside 10 -594.593536632775 20 -594.593536632776 30 1241.03564002131 11 -647.394912321209 21 -268.159752894786 31 1241.03564002131 12 -582.640028068573 22 -389.307620352121 32 1241.03564002131 13 -582.640028068573 23 -389.307620352121 33 1241.03564002131 70 13 0 3DFACE 8 body_half_outside 10 -594.593536632775 20 -594.593536632776 30 1241.03564002131 11 -582.640028068573 21 -389.307620352121 31 1241.03564002131 12 -467.169144021928 22 -699.168033082722 32 1241.03564002131 13 -467.169144021928 23 -699.168033082722 33 1241.03564002131 70 3 0 3DFACE 8 body_half_outside 10 -467.169144021928 20 -699.168033082722 30 1241.03564002131 11 -582.640028068573 21 -389.307620352121 31 1241.03564002131 12 -495.494614285553 22 -495.494614285553 32 1241.03564002131 13 -495.494614285553 23 -495.494614285553 33 1241.03564002131 70 13 0 3DFACE 8 body_half_outside 10 -467.169144021928 20 -699.168033082722 30 1241.03564002131 11 -495.494614285553 21 -495.494614285553 31 1241.03564002131 12 -389.307620352121 22 -582.640028068573 32 1241.03564002131 13 -389.307620352121 23 -582.640028068573 33 1241.03564002131 70 13 0 3DFACE 8 body_half_outside 10 -467.169144021928 20 -699.168033082722 30 1241.03564002131 11 -389.307620352121 21 -582.640028068573 31 1241.03564002131 12 -321.791703197793 22 -776.873894119249 32 1241.03564002131 13 -321.791703197793 23 -776.873894119249 33 1241.03564002131 70 3 0 3DFACE 8 body_half_outside 10 -321.791703197793 20 -776.873894119249 30 1241.03564002131 11 -389.307620352121 21 -582.640028068573 31 1241.03564002131 12 -268.159752894786 22 -647.394912321209 32 1241.03564002131 13 -268.159752894786 23 -647.394912321209 33 1241.03564002131 70 13 0 3DFACE 8 body_half_outside 10 -321.791703197793 20 -776.873894119249 30 1241.03564002131 11 -268.159752894786 21 -647.394912321209 31 1241.03564002131 12 -164.047987682633 22 -824.724927080674 32 1241.03564002131 13 -164.047987682633 23 -824.724927080674 33 1241.03564002131 70 3 0 3DFACE 8 body_half_outside 10 -164.047987682633 20 -824.724927080674 30 1241.03564002131 11 -268.159752894786 21 -647.394912321209 31 1241.03564002131 12 -136.706656519425 22 -687.270773156591 32 1241.03564002131 13 -136.706656519425 23 -687.270773156591 33 1241.03564002131 70 13 0 3DFACE 8 body_half_outside 10 -164.047987682633 20 -824.724927080674 30 1241.03564002131 11 -136.706656519425 21 -687.270773156591 31 1241.03564002131 12 0.0 22 -840.882243605455 32 1241.03564002131 13 0.0 23 -840.882243605455 33 1241.03564002131 70 3 0 3DFACE 8 body_half_outside 10 0.0 20 -840.882243605455 30 1241.03564002131 11 -136.706656519425 21 -687.270773156591 31 1241.03564002131 12 0.0 22 -700.735203605455 32 1241.03564002131 13 0.0 23 -700.735203605455 33 1241.03564002131 70 13 0 3DFACE 8 body_half_outside 10 0.0 20 -840.882243605455 30 1241.03564002131 11 0.0 21 -700.735203605455 31 1241.03564002131 12 136.706656519425 22 -687.270773156591 32 1241.03564002131 13 136.706656519425 23 -687.270773156591 33 1241.03564002131 70 13 0 3DFACE 8 body_half_outside 10 0.0 20 -840.882243605455 30 1241.03564002131 11 136.706656519425 21 -687.270773156591 31 1241.03564002131 12 164.047987682633 22 -824.724927080674 32 1241.03564002131 13 164.047987682633 23 -824.724927080674 33 1241.03564002131 70 3 0 3DFACE 8 body_half_outside 10 164.047987682633 20 -824.724927080674 30 1241.03564002131 11 136.706656519425 21 -687.270773156591 31 1241.03564002131 12 268.159752894785 22 -647.394912321209 32 1241.03564002131 13 268.159752894785 23 -647.394912321209 33 1241.03564002131 70 13 0 3DFACE 8 body_half_outside 10 164.047987682633 20 -824.724927080674 30 1241.03564002131 11 268.159752894785 21 -647.394912321209 31 1241.03564002131 12 321.791703197793 22 -776.873894119249 32 1241.03564002131 13 321.791703197793 23 -776.873894119249 33 1241.03564002131 70 3 0 3DFACE 8 body_half_outside 10 321.791703197793 20 -776.873894119249 30 1241.03564002131 11 268.159752894785 21 -647.394912321209 31 1241.03564002131 12 389.307620352121 22 -582.640028068573 32 1241.03564002131 13 389.307620352121 23 -582.640028068573 33 1241.03564002131 70 13 0 3DFACE 8 body_half_outside 10 321.791703197793 20 -776.873894119249 30 1241.03564002131 11 389.307620352121 21 -582.640028068573 31 1241.03564002131 12 467.169144021928 22 -699.168033082722 32 1241.03564002131 13 467.169144021928 23 -699.168033082722 33 1241.03564002131 70 3 0 3DFACE 8 body_half_outside 10 467.169144021928 20 -699.168033082722 30 1241.03564002131 11 389.307620352121 21 -582.640028068573 31 1241.03564002131 12 495.494614285553 22 -495.494614285553 32 1241.03564002131 13 495.494614285553 23 -495.494614285553 33 1241.03564002131 70 13 0 3DFACE 8 body_half_outside 10 467.169144021928 20 -699.168033082722 30 1241.03564002131 11 495.494614285553 21 -495.494614285553 31 1241.03564002131 12 594.593536632776 22 -594.593536632775 32 1241.03564002131 13 594.593536632776 23 -594.593536632775 33 1241.03564002131 70 3 0 3DFACE 8 body_half_outside 10 594.593536632776 20 -594.593536632775 30 1241.03564002131 11 495.494614285553 21 -495.494614285553 31 1241.03564002131 12 582.640028068573 22 -389.307620352121 32 1241.03564002131 13 582.640028068573 23 -389.307620352121 33 1241.03564002131 70 13 0 3DFACE 8 body_half_outside 10 594.593536632776 20 -594.593536632775 30 1241.03564002131 11 582.640028068573 21 -389.307620352121 31 1241.03564002131 12 647.394912321209 22 -268.159752894786 32 1241.03564002131 13 647.394912321209 23 -268.159752894786 33 1241.03564002131 70 13 0 3DFACE 8 body_half_outside 10 594.593536632776 20 -594.593536632775 30 1241.03564002131 11 647.394912321209 21 -268.159752894786 31 1241.03564002131 12 699.168033082722 22 -467.169144021928 32 1241.03564002131 13 699.168033082722 23 -467.169144021928 33 1241.03564002131 70 3 0 3DFACE 8 body_half_outside 10 699.168033082722 20 -467.169144021928 30 1241.03564002131 11 647.394912321209 21 -268.159752894786 31 1241.03564002131 12 687.270773156591 22 -136.706656519426 32 1241.03564002131 13 687.270773156591 23 -136.706656519426 33 1241.03564002131 70 13 0 3DFACE 8 body_half_outside 10 699.168033082722 20 -467.169144021928 30 1241.03564002131 11 687.270773156591 21 -136.706656519426 31 1241.03564002131 12 700.735203605455 22 0.0 32 1241.03564002131 13 700.735203605455 23 0.0 33 1241.03564002131 70 13 0 3DFACE 8 body_half_outside 10 699.168033082722 20 -467.169144021928 30 1241.03564002131 11 700.735203605455 21 0.0 31 1241.03564002131 12 776.87389411925 22 -321.791703197793 32 1241.03564002131 13 776.87389411925 23 -321.791703197793 33 1241.03564002131 70 3 0 3DFACE 8 body_half_outside 10 776.87389411925 20 -321.791703197793 30 1241.03564002131 11 700.735203605455 21 0.0 31 1241.03564002131 12 840.882243605455 22 1.80477854883065e-13 32 1241.03564002131 13 840.882243605455 23 1.80477854883065e-13 33 1241.03564002131 70 13 0 3DFACE 8 body_half_outside 10 776.87389411925 20 -321.791703197793 30 1241.03564002131 11 840.882243605455 21 1.80477854883065e-13 31 1241.03564002131 12 824.724927080674 22 -164.047987682633 32 1241.03564002131 13 824.724927080674 23 -164.047987682633 33 1241.03564002131 70 1 0 3DFACE 8 body_half_outside 10 154.93421062823 20 -778.906875772646 30 1614.7610800213 11 133.953889402395 21 -874.404617053063 31 1427.8983600213 12 173.161764737035 22 -870.542978388701 32 1427.8983600213 13 173.161764737035 23 -870.542978388701 33 1427.8983600213 70 1 0 3DFACE 8 body_half_outside 10 133.953889402395 20 -874.404617053063 30 1427.8983600213 11 154.93421062823 21 -778.906875772646 31 1614.7610800213 12 44.7901424632535 22 -883.186479617682 32 1427.8983600213 13 44.7901424632535 23 -883.186479617682 33 1427.8983600213 70 3 0 3DFACE 8 body_half_outside 10 44.7901424632535 20 -883.186479617682 30 1427.8983600213 11 0.0 21 -794.166563605455 31 1614.7610800213 12 1.80477854883065e-13 22 -887.597923605455 32 1427.8983600213 13 1.80477854883065e-13 23 -887.597923605455 33 1427.8983600213 70 1 0 3DFACE 8 body_half_outside 10 0.0 20 -794.166563605455 30 1614.7610800213 11 44.7901424632535 21 -883.186479617682 31 1427.8983600213 12 154.93421062823 22 -778.906875772646 32 1614.7610800213 13 154.93421062823 23 -778.906875772646 33 1614.7610800213 70 3 0 3DFACE 8 body_half_outside 10 653.750224578544 20 -1019.67559748903 30 2128.61109777939 11 288.287545076695 21 -1033.5656801692 31 2082.82163169725 12 653.750224578544 22 -1033.56568016919 32 2082.82163169725 13 653.750224578544 23 -1033.56568016919 33 2082.82163169725 70 1 0 3DFACE 8 body_half_outside 10 288.287545076695 20 -1033.5656801692 30 2082.82163169725 11 653.750224578544 21 -1019.67559748903 31 2128.61109777939 12 320.792446313246 22 -1019.67559748903 32 2128.61109777939 13 320.792446313246 23 -1019.67559748903 33 2128.61109777939 70 1 0 3DFACE 8 body_half_outside 10 -467.169144021929 20 -699.168033082722 30 2549.0746800213 11 -594.593536632775 21 -594.593536632776 31 2455.6433200213 12 -467.169144021928 22 -699.168033082722 32 2455.6433200213 13 -467.169144021928 23 -699.168033082722 33 2455.6433200213 70 1 0 3DFACE 8 body_half_outside 10 -594.593536632775 20 -594.593536632776 30 2455.6433200213 11 -467.169144021929 21 -699.168033082722 31 2549.0746800213 12 -594.593536632776 22 -594.593536632776 32 2549.0746800213 13 -594.593536632776 23 -594.593536632776 33 2549.0746800213 70 3 0 3DFACE 8 body_half_outside 10 -594.593536632776 20 -594.593536632776 30 2549.0746800213 11 -467.169144021929 21 -699.168033082722 31 2549.0746800213 12 -512.438676164039 22 -662.016288182956 32 2549.0746800213 13 -512.438676164039 23 -662.016288182956 33 2549.0746800213 70 13 0 3DFACE 8 body_half_outside 10 -594.593536632776 20 -594.593536632776 30 2549.0746800213 11 -512.438676164039 21 -662.016288182956 31 2549.0746800213 12 -578.08321102903 22 -608.143210685445 32 2549.0746800213 13 -578.08321102903 23 -608.143210685445 33 2549.0746800213 70 1 0 3DFACE 8 body_half_outside 10 -699.168033082722 20 -467.169144021929 30 914.026066884025 11 -784.574341950659 21 -324.981333125909 31 855.37186879426 12 -706.098253038492 22 -471.799768952456 32 855.37186879426 13 -706.098253038492 23 -471.799768952456 33 855.37186879426 70 1 0 3DFACE 8 body_half_outside 10 -784.574341950659 20 -324.981333125909 30 855.37186879426 11 -699.168033082722 21 -467.169144021929 31 914.026066884025 12 -776.87389411925 22 -321.791703197793 32 914.026066884025 13 -776.87389411925 23 -321.791703197793 33 914.026066884025 70 1 0 3DFACE 8 body_half_outside 10 -997.760836892423 20 -413.286070645571 30 2011.5925230317 11 -891.670534105406 21 -595.795202951324 31 1922.19277204157 12 -897.961029579872 22 -599.99837764929 32 2011.5925230317 13 -897.961029579872 23 -599.99837764929 33 2011.5925230317 70 1 0 3DFACE 8 body_half_outside 10 -891.670534105406 20 -595.795202951324 30 1922.19277204157 11 -997.760836892423 21 -413.286070645571 31 2011.5925230317 12 -990.771212819307 22 -410.390873558597 32 1922.19277204157 13 -990.771212819307 23 -410.390873558597 33 1922.19277204157 70 1 0 3DFACE 8 body_half_outside 10 -990.771212819307 20 -410.390873558597 30 1922.19277204157 11 -868.04142298445 21 -580.00673566728 31 1812.39759571907 12 -891.670534105406 22 -595.795202951324 32 1922.19277204157 13 -891.670534105406 23 -595.795202951324 33 1922.19277204157 70 1 0 3DFACE 8 body_half_outside 10 -868.04142298445 20 -580.00673566728 30 1812.39759571907 11 -990.771212819307 21 -410.390873558597 31 1922.19277204157 12 -964.515951276276 22 -399.515588143821 32 1812.39759571907 13 -964.515951276276 23 -399.515588143821 33 1812.39759571907 70 1 0 3DFACE 8 body_half_outside 10 -964.515951276276 20 -399.515588143821 30 1812.39759571907 11 -829.407026995335 21 -554.192057578438 31 1708.93950189862 12 -868.04142298445 22 -580.00673566728 32 1812.39759571907 13 -868.04142298445 23 -580.00673566728 33 1812.39759571907 70 1 0 3DFACE 8 body_half_outside 10 -829.407026995335 20 -554.192057578438 30 1708.93950189862 11 -964.515951276276 21 -399.515588143821 31 1812.39759571907 12 -921.587710511788 22 -381.734128610352 32 1708.93950189862 13 -921.587710511788 23 -381.734128610352 33 1708.93950189862 70 1 0 3DFACE 8 body_half_outside 10 -761.149821895316 20 -761.14982219046 30 2100.64485501639 11 -786.92474167715 21 -735.296194513125 31 2058.80750841657 12 -763.653083482914 22 -763.653083482914 32 2058.8118770109 13 -763.653083482914 23 -763.653083482914 33 2058.8118770109 70 1 0 3DFACE 8 body_half_outside 10 -786.92474167715 20 -735.296194513125 30 2058.80750841657 11 -761.149821895316 21 -761.14982219046 31 2100.64485501639 12 -766.822004083969 22 -754.694855069672 32 2097.20410948883 13 -766.822004083969 23 -754.694855069672 33 2097.20410948883 70 13 0 3DFACE 8 body_half_outside 10 -786.92474167715 20 -735.296194513125 30 2058.80750841657 11 -766.822004083969 21 -754.694855069672 31 2097.20410948883 12 -781.183382327347 22 -739.911027417745 32 2076.74494872451 13 -781.183382327347 23 -739.911027417745 33 2076.74494872451 70 1 0 3DFACE 8 body_half_outside 10 887.597923605455 20 1.80477854883065e-13 30 1427.8983600213 11 778.906875772646 21 -154.93421062823 31 1614.7610800213 12 870.542978388702 22 -173.161764737035 32 1427.8983600213 13 870.542978388702 23 -173.161764737035 33 1427.8983600213 70 1 0 3DFACE 8 body_half_outside 10 778.906875772646 20 -154.93421062823 30 1614.7610800213 11 887.597923605455 21 1.80477854883065e-13 31 1427.8983600213 12 794.166563605455 22 1.80477854883065e-13 32 1614.7610800213 13 794.166563605455 23 1.80477854883065e-13 33 1614.7610800213 70 1 0 3DFACE 8 body_half_outside 10 -964.515951276275 20 -399.515588143821 30 2258.00680432354 11 -1051.79710945546 21 -209.215453044867 31 2148.21162800104 12 -990.771212819307 22 -410.390873558597 32 2148.21162800104 13 -990.771212819307 23 -410.390873558597 33 2148.21162800104 70 1 0 3DFACE 8 body_half_outside 10 -1051.79710945546 20 -209.215453044867 30 2148.21162800104 11 -964.515951276275 21 -399.515588143821 31 2258.00680432354 12 -1023.92467246733 22 -203.671280618918 32 2258.00680432354 13 -1023.92467246733 23 -203.671280618918 33 2258.00680432354 70 1 0 3DFACE 8 body_half_outside 10 467.169144021928 20 -699.168033082722 30 914.026066884025 11 324.981333125909 21 -784.574341950659 31 855.37186879426 12 471.799768952456 22 -706.098253038493 32 855.37186879426 13 471.799768952456 23 -706.098253038493 33 855.37186879426 70 1 0 3DFACE 8 body_half_outside 10 324.981333125909 20 -784.574341950659 30 855.37186879426 11 467.169144021928 21 -699.168033082722 31 914.026066884025 12 321.791703197793 22 -776.87389411925 32 914.026066884025 13 321.791703197793 23 -776.87389411925 33 914.026066884025 70 1 0 3DFACE 8 body_half_outside 10 321.791703197793 20 -776.87389411925 30 914.026066884025 11 363.353779128852 21 -543.797359730523 31 1054.1729200213 12 250.282436127116 22 -604.235251721862 32 1054.1729200213 13 250.282436127116 23 -604.235251721862 33 1054.1729200213 70 1 0 3DFACE 8 body_half_outside 10 363.353779128852 20 -543.797359730523 30 1054.1729200213 11 321.791703197793 21 -776.87389411925 31 914.026066884025 12 467.169144021928 22 -699.168033082722 32 914.026066884025 13 467.169144021928 23 -699.168033082722 33 914.026066884025 70 1 0 3DFACE 8 body_half_outside 10 964.515951276275 20 -399.515588143821 30 1812.39759571907 11 1051.79710945546 21 -209.215453044867 31 1922.19277204157 12 990.771212819308 22 -410.390873558597 32 1922.19277204157 13 990.771212819308 23 -410.390873558597 33 1922.19277204157 70 1 0 3DFACE 8 body_half_outside 10 1051.79710945546 20 -209.215453044867 30 1922.19277204157 11 964.515951276275 21 -399.515588143821 31 1812.39759571907 12 1023.92467246733 22 -203.671280618918 32 1812.39759571907 13 1023.92467246733 23 -203.671280618918 33 1812.39759571907 70 1 0 3DFACE 8 body_half_outside 10 1043.98454271904 20 1.80477854883065e-13 30 2258.00680432354 11 978.352295145615 21 -194.606371158736 31 2361.46489814399 12 1023.92467246733 22 -203.671280618918 32 2258.00680432354 13 1023.92467246733 23 -203.671280618918 33 2258.00680432354 70 1 0 3DFACE 8 body_half_outside 10 978.352295145615 20 -194.606371158736 30 2361.46489814399 11 1043.98454271904 21 1.80477854883065e-13 31 2258.00680432354 12 997.519349743285 22 1.80477854883065e-13 32 2361.46489814399 13 997.519349743285 23 1.80477854883065e-13 33 2361.46489814399 70 1 0 3DFACE 8 body_half_outside 10 767.904956185432 20 -709.249312269841 30 2240.21043503138 11 738.20854961057 21 -738.208549610569 31 2258.00680432354 12 739.771130343929 22 -739.771130343928 32 2249.46912732182 13 739.771130343929 23 -739.771130343928 33 2249.46912732182 70 1 0 3DFACE 8 body_half_outside 10 738.20854961057 20 -738.208549610569 30 2258.00680432354 11 767.904956185432 21 -709.249312269841 31 2240.21043503138 12 868.04142298445 22 -580.006735667279 32 2258.00680432354 13 868.04142298445 23 -580.006735667279 33 2258.00680432354 70 3 0 3DFACE 8 body_half_outside 10 868.04142298445 20 -580.006735667279 30 2258.00680432354 11 767.904956185432 21 -709.249312269841 31 2240.21043503138 12 806.222028237971 22 -670.885845335315 32 2219.70473474119 13 806.222028237971 23 -670.885845335315 33 2219.70473474119 70 13 0 3DFACE 8 body_half_outside 10 868.04142298445 20 -580.006735667279 30 2258.00680432354 11 806.222028237971 21 -670.885845335315 31 2219.70473474119 12 843.013713767209 22 -637.259985333474 32 2192.10870461431 13 843.013713767209 23 -637.259985333474 33 2192.10870461431 70 13 0 3DFACE 8 body_half_outside 10 868.04142298445 20 -580.006735667279 30 2258.00680432354 11 843.013713767209 21 -637.259985333474 31 2192.10870461431 12 876.866128931272 22 -609.663955206588 32 2158.48284461247 13 876.866128931272 23 -609.663955206588 33 2158.48284461247 70 13 0 3DFACE 8 body_half_outside 10 868.04142298445 20 -580.006735667279 30 2258.00680432354 11 876.866128931272 21 -609.663955206588 31 2158.48284461247 12 884.794335210004 22 -604.173875548016 32 2148.21162800104 13 884.794335210004 23 -604.173875548016 33 2148.21162800104 70 13 0 3DFACE 8 body_half_outside 10 868.04142298445 20 -580.006735667279 30 2258.00680432354 11 884.794335210004 21 -604.173875548016 31 2148.21162800104 12 891.670534105407 22 -595.795202951324 32 2148.21162800104 13 891.670534105407 23 -595.795202951324 33 2148.21162800104 70 1 0 3DFACE 8 body_half_outside 10 -705.352696568271 20 -705.352696568271 30 2361.46489814399 11 -868.041422984449 21 -580.006735667279 31 2258.00680432354 12 -738.208549610569 22 -738.20854961057 32 2258.00680432354 13 -738.208549610569 23 -738.20854961057 33 2258.00680432354 70 1 0 3DFACE 8 body_half_outside 10 -868.041422984449 20 -580.006735667279 30 2258.00680432354 11 -705.352696568271 21 -705.352696568271 31 2361.46489814399 12 -829.407026995335 22 -554.192057578438 32 2361.46489814399 13 -829.407026995335 23 -554.192057578438 33 2361.46489814399 70 1 0 3DFACE 8 body_half_outside 10 911.540741979581 20 -574.59252267949 30 2011.5925230317 11 180.675224578544 21 -576.530907025343 31 1991.91176299638 12 908.625259608371 22 -576.530907025343 32 1991.91176299638 13 908.625259608371 23 -576.530907025343 33 1991.91176299638 70 1 0 3DFACE 8 body_half_outside 10 180.675224578544 20 -576.530907025343 30 1991.91176299638 11 911.540741979581 21 -574.59252267949 31 2011.5925230317 12 180.675224578544 22 -572.26717343136 32 2035.20217666346 13 180.675224578544 23 -572.26717343136 33 2035.20217666346 70 3 0 3DFACE 8 body_half_outside 10 180.675224578544 20 -572.26717343136 30 2035.20217666346 11 911.540741979581 21 -574.59252267949 31 2011.5925230317 12 912.783669278017 22 -572.267169258698 32 2035.20224467364 13 912.783669278017 23 -572.267169258698 33 2035.20224467364 70 13 0 3DFACE 8 body_half_outside 10 180.675224578544 20 -572.26717343136 30 2035.20217666346 11 912.783669278017 21 -572.267169258698 31 2035.20224467364 12 907.767925107023 22 -572.267173431359 32 2035.20224673698 13 907.767925107023 23 -572.267173431359 33 2035.20224673698 70 1 0 3DFACE 8 body_half_outside 10 767.904940618653 20 -709.249312269841 30 1830.19391829555 11 180.675224578544 21 -670.885845335315 31 1850.69961858573 12 180.675224578544 22 -709.249312269842 32 1830.19391829555 13 180.675224578544 23 -709.249312269842 33 1830.19391829555 70 1 0 3DFACE 8 body_half_outside 10 180.675224578544 20 -670.885845335315 30 1850.69961858573 11 767.904940618653 21 -709.249312269841 31 1830.19391829555 12 806.222012671193 22 -670.885845335315 32 1850.69961858573 13 806.222012671193 23 -670.885845335315 33 1850.69961858573 70 1 0 3DFACE 8 body_half_outside 10 303.914386430124 20 -733.714233519903 30 1614.7610800213 11 307.339228961076 21 -829.840689601495 31 1427.8983600213 12 339.669019965462 22 -820.033554718597 32 1427.8983600213 13 339.669019965462 23 -820.033554718597 33 1427.8983600213 70 1 0 3DFACE 8 body_half_outside 10 307.339228961076 20 -829.840689601495 30 1427.8983600213 11 303.914386430124 21 -733.714233519903 31 1614.7610800213 12 221.595154594654 22 -855.850870199531 32 1427.8983600213 13 221.595154594654 23 -855.850870199531 33 1427.8983600213 70 3 0 3DFACE 8 body_half_outside 10 221.595154594654 20 -855.850870199531 30 1427.8983600213 11 154.93421062823 21 -778.906875772646 31 1614.7610800213 12 173.161764737035 22 -870.542978388701 32 1427.8983600213 13 173.161764737035 23 -870.542978388701 33 1427.8983600213 70 1 0 3DFACE 8 body_half_outside 10 154.93421062823 20 -778.906875772646 30 1614.7610800213 11 221.595154594654 21 -855.850870199531 31 1427.8983600213 12 303.914386430124 22 -733.714233519903 32 1614.7610800213 13 303.914386430124 23 -733.714233519903 33 1614.7610800213 70 3 0 3DFACE 8 body_half_outside 10 40.1106512432667 20 -1076.01799327905 30 2017.42442965997 11 35.9517814413362 21 -1076.26268839831 31 2009.6437315188 12 36.9934322066314 22 -1076.32501255654 32 2011.5925230317 13 36.9934322066314 23 -1076.32501255654 33 2011.5925230317 70 1 0 3DFACE 8 body_half_outside 10 35.9517814413362 20 -1076.26268839831 30 2009.6437315188 11 40.1106512432667 21 -1076.01799327905 31 2017.42442965997 12 35.9517814413364 22 -975.958401912124 32 2009.6437315188 13 35.9517814413364 23 -975.958401912124 33 2009.6437315188 70 3 0 3DFACE 8 body_half_outside 10 35.9517814413364 20 -975.958401912124 30 2009.6437315188 11 40.1106512432667 21 -1076.01799327905 31 2017.42442965997 12 40.110651243267 22 -976.014544733984 32 2017.42442965997 13 40.110651243267 23 -976.014544733984 33 2017.42442965997 70 1 0 3DFACE 8 body_half_outside 10 -853.465106968372 20 -778.056206654812 30 2053.98620958956 11 -818.480102290147 21 -696.846172894875 31 2011.59249120966 12 -853.905696349335 22 -778.54324309139 32 2019.68727261649 13 -853.905696349335 23 -778.54324309139 33 2019.68727261649 70 1 0 3DFACE 8 body_half_outside 10 -818.480102290147 20 -696.846172894875 30 2011.59249120966 11 -853.465106968372 21 -778.056206654812 31 2053.98620958956 12 -818.273878310588 22 -697.096462294947 32 2058.80160712022 13 -818.273878310588 23 -697.096462294947 33 2058.80160712022 70 1 0 3DFACE 8 body_half_outside 10 164.047987682633 20 -824.724927080674 30 914.026066884025 11 250.282436127116 21 -604.235251721862 31 1054.1729200213 12 127.592879465023 22 -641.452721848564 32 1054.1729200213 13 127.592879465023 23 -641.452721848564 33 1054.1729200213 70 1 0 3DFACE 8 body_half_outside 10 250.282436127116 20 -604.235251721862 30 1054.1729200213 11 164.047987682633 21 -824.724927080674 31 914.026066884025 12 321.791703197793 22 -776.87389411925 32 914.026066884025 13 321.791703197793 23 -776.87389411925 33 914.026066884025 70 1 0 3DFACE 8 body_half_outside 10 268.159752894785 20 -647.394912321209 30 1241.03564002131 11 154.93421062823 21 -778.906875772646 31 1054.1729200213 12 303.914386430124 22 -733.714233519903 32 1054.1729200213 13 303.914386430124 23 -733.714233519903 33 1054.1729200213 70 1 0 3DFACE 8 body_half_outside 10 154.93421062823 20 -778.906875772646 30 1054.1729200213 11 268.159752894785 21 -647.394912321209 31 1241.03564002131 12 136.706656519425 22 -687.270773156591 32 1241.03564002131 13 136.706656519425 23 -687.270773156591 33 1241.03564002131 70 1 0 3DFACE 8 body_half_outside 10 -784.019466456977 20 1.80477854883065e-13 30 631.979456702016 11 -731.120068617964 21 -145.428823687577 31 587.016306884026 12 -768.954752250597 22 -152.954610178005 32 631.979456702016 13 -768.954752250597 23 -152.954610178005 33 631.979456702016 70 1 0 3DFACE 8 body_half_outside 10 -731.120068617964 20 -145.428823687577 30 587.016306884026 11 -784.019466456977 21 1.80477854883065e-13 31 631.979456702016 12 -745.443557551536 22 1.80477854883065e-13 32 587.016306884026 13 -745.443557551536 23 1.80477854883065e-13 33 587.016306884026 70 1 0 3DFACE 8 body_half_outside 10 -660.670394770277 20 -660.670394770277 30 2455.6433200213 11 -829.407026995335 21 -554.192057578438 31 2361.46489814399 12 -705.352696568271 22 -705.352696568271 32 2361.46489814399 13 -705.352696568271 23 -705.352696568271 33 2361.46489814399 70 1 0 3DFACE 8 body_half_outside 10 -829.407026995335 20 -554.192057578438 30 2361.46489814399 11 -660.670394770277 21 -660.670394770277 31 2455.6433200213 12 -705.689427437034 22 -605.814544747273 32 2455.6433200213 13 -705.689427437034 23 -605.814544747273 33 2455.6433200213 70 13 0 3DFACE 8 body_half_outside 10 -829.407026995335 20 -554.192057578438 30 2361.46489814399 11 -705.689427437034 21 -605.814544747273 31 2455.6433200213 12 -765.568613945096 22 -532.851544877859 32 2455.6433200213 13 -765.568613945096 23 -532.851544877859 33 2455.6433200213 70 13 0 3DFACE 8 body_half_outside 10 -829.407026995335 20 -554.192057578438 30 2361.46489814399 11 -765.568613945096 21 -532.851544877859 31 2455.6433200213 12 -776.866198451135 22 -519.085398326623 32 2455.6433200213 13 -776.866198451135 23 -519.085398326623 33 2455.6433200213 70 1 0 3DFACE 8 body_half_outside 10 706.098253038493 20 -471.799768952456 30 855.37186879426 11 594.593536632776 21 -594.593536632776 31 914.026066884025 12 600.487204246519 22 -600.48720424652 32 855.37186879426 13 600.487204246519 23 -600.48720424652 33 855.37186879426 70 1 0 3DFACE 8 body_half_outside 10 594.593536632776 20 -594.593536632776 30 914.026066884025 11 706.098253038493 21 -471.799768952456 31 855.37186879426 12 699.168033082722 22 -467.169144021929 32 914.026066884025 13 699.168033082722 23 -467.169144021929 33 914.026066884025 70 1 0 3DFACE 8 body_half_outside 10 321.791703197793 20 -776.87389411925 30 914.026066884025 11 165.674046918965 21 -832.899678896021 31 855.37186879426 12 324.981333125909 22 -784.574341950659 32 855.37186879426 13 324.981333125909 23 -784.574341950659 33 855.37186879426 70 1 0 3DFACE 8 body_half_outside 10 165.674046918965 20 -832.899678896021 30 855.37186879426 11 321.791703197793 21 -776.87389411925 31 914.026066884025 12 164.047987682633 22 -824.724927080674 32 914.026066884025 13 164.047987682633 23 -824.724927080674 33 914.026066884025 70 1 0 3DFACE 8 body_half_outside 10 670.391132645368 20 -794.16651328432 30 1813.3028368105 11 180.675224578544 21 -750.87609961724 31 1817.56657040449 12 180.675224578544 22 -794.16651328432 32 1813.3028368105 13 180.675224578544 23 -794.16651328432 33 1813.3028368105 70 1 0 3DFACE 8 body_half_outside 10 180.675224578544 20 -750.87609961724 30 1817.56657040449 11 670.391132645368 21 -794.16651328432 31 1813.3028368105 12 724.87187698787 22 -750.87609961724 32 1817.56657040449 13 724.87187698787 23 -750.87609961724 33 1817.56657040449 70 1 0 3DFACE 8 body_half_outside 10 180.675224578544 20 -978.669071362051 30 2158.48284461247 11 653.750224578544 21 -999.174771652236 31 2120.11937767794 12 180.675224578544 22 -999.174771652236 32 2120.11937767794 13 180.675224578544 23 -999.174771652236 33 2120.11937767794 70 1 0 3DFACE 8 body_half_outside 10 653.750224578544 20 -999.174771652236 30 2120.11937767794 11 180.675224578544 21 -978.669071362051 31 2158.48284461247 12 653.750224578544 22 -978.669071362051 32 2158.48284461247 13 653.750224578544 23 -978.669071362051 33 2158.48284461247 70 1 0 3DFACE 8 body_half_outside 10 180.675224578544 20 -707.112261617118 30 2017.88600937388 11 104.493588061205 21 -712.163204861239 31 2001.23529816273 12 180.675224578544 22 -712.163201305221 32 2001.23529268221 13 180.675224578544 23 -712.163201305221 33 2001.23529268221 70 1 0 3DFACE 8 body_half_outside 10 104.493588061205 20 -712.163204861239 30 2001.23529816273 11 180.675224578544 21 -707.112261617118 31 2017.88600937388 12 104.493585205719 22 -707.112262514746 32 2017.88602361794 13 104.493585205719 23 -707.112262514746 33 2017.88602361794 70 1 0 3DFACE 8 body_half_outside 10 561.560562517035 20 -561.560562517035 30 1614.7610800213 11 540.907511486368 21 -698.794954204847 31 1427.8983600213 12 627.626510748516 22 -627.626510748516 32 1427.8983600213 13 627.626510748516 23 -627.626510748516 33 1427.8983600213 70 1 0 3DFACE 8 body_half_outside 10 540.907511486368 20 -698.794954204847 30 1427.8983600213 11 441.215302798659 21 -660.325364744672 31 1614.7610800213 12 493.122985245198 22 -738.010701420772 32 1427.8983600213 13 493.122985245198 23 -738.010701420772 33 1427.8983600213 70 1 0 3DFACE 8 body_half_outside 10 441.215302798659 20 -660.325364744672 30 1614.7610800213 11 540.907511486368 21 -698.794954204847 31 1427.8983600213 12 561.560562517035 22 -561.560562517035 32 1614.7610800213 13 561.560562517035 23 -561.560562517035 33 1614.7610800213 70 3 0 3DFACE 8 body_half_outside 10 -750.032010089465 20 -762.726244296354 30 1915.09420023775 11 -781.550764523053 21 -852.489442592712 31 1950.71579563676 12 -805.85406896736 22 -828.277941296301 32 1950.68418808414 13 -805.85406896736 23 -828.277941296301 33 1950.68418808414 70 1 0 3DFACE 8 body_half_outside 10 -781.550764523053 20 -852.489442592712 30 1950.71579563676 11 -750.032010089465 21 -762.726244296354 31 1915.09420023775 12 -712.200510303116 22 -793.069743896677 32 1912.98147661467 13 -712.200510303116 23 -793.069743896677 33 1912.98147661467 70 1 0 3DFACE 8 body_half_outside 10 594.593536632776 20 -594.593536632776 30 914.026066884025 11 543.797359730523 21 -363.353779128852 31 1054.1729200213 12 462.461640169813 22 -462.461640169813 32 1054.1729200213 13 462.461640169813 23 -462.461640169813 33 1054.1729200213 70 1 0 3DFACE 8 body_half_outside 10 543.797359730523 20 -363.353779128852 30 1054.1729200213 11 594.593536632776 21 -594.593536632776 31 914.026066884025 12 699.168033082722 22 -467.169144021929 32 914.026066884025 13 699.168033082722 23 -467.169144021929 33 914.026066884025 70 1 0 3DFACE 8 body_half_outside 10 -683.397324988288 20 -829.51728232132 30 2058.8118770109 11 -761.149821895316 21 -761.14982219046 31 2100.64485501639 12 -763.653083482914 22 -763.653083482914 32 2058.8118770109 13 -763.653083482914 23 -763.653083482914 33 2058.8118770109 70 1 0 3DFACE 8 body_half_outside 10 -761.149821895316 20 -761.14982219046 30 2100.64485501639 11 -683.397324988288 21 -829.51728232132 31 2058.8118770109 12 -688.216174174222 22 -823.534449985187 32 2077.42717273413 13 -688.216174174222 23 -823.534449985187 33 2077.42717273413 70 13 0 3DFACE 8 body_half_outside 10 -761.149821895316 20 -761.14982219046 30 2100.64485501639 11 -688.216174174222 21 -823.534449985187 31 2077.42717273413 12 -703.270205185374 22 -808.916878172158 32 2098.19892992261 13 -703.270205185374 23 -808.916878172158 33 2098.19892992261 70 13 0 3DFACE 8 body_half_outside 10 -761.149821895316 20 -761.14982219046 30 2100.64485501639 11 -703.270205185374 21 -808.916878172158 31 2098.19892992261 12 -723.84293286299 22 -790.84270017674 32 2109.1268343449 13 -723.84293286299 23 -790.84270017674 33 2109.1268343449 70 13 0 3DFACE 8 body_half_outside 10 -761.149821895316 20 -761.14982219046 30 2100.64485501639 11 -723.84293286299 21 -790.84270017674 31 2109.1268343449 12 -746.579505030633 22 -772.239793008819 32 2108.60809856919 13 -746.579505030633 23 -772.239793008819 33 2108.60809856919 70 1 0 3DFACE 8 body_half_outside 10 -704.67526609701 20 -470.84895947612 30 796.153149972084 11 -590.997993226901 21 -590.997993226901 31 738.078199114136 12 -599.277053327022 22 -599.277053327022 32 796.153149972084 13 -599.277053327022 23 -599.277053327022 33 796.153149972084 70 1 0 3DFACE 8 body_half_outside 10 -590.997993226901 20 -590.997993226901 30 738.078199114136 11 -704.67526609701 21 -470.84895947612 31 796.153149972084 12 -694.940121314314 22 -464.344143695271 32 738.078199114136 13 -694.940121314314 23 -464.344143695271 33 738.078199114136 70 1 0 3DFACE 8 body_half_outside 10 -779.335772128321 20 -850.040945080999 30 2123.14819601944 11 -750.226480623555 21 -763.163737563064 31 2153.51833793914 12 -803.639076572628 22 -825.829443784589 32 2123.11658846682 13 -803.639076572628 23 -825.829443784589 33 2123.11658846682 70 1 0 3DFACE 8 body_half_outside 10 -750.226480623555 20 -763.163737563064 30 2153.51833793914 11 -779.335772128321 21 -850.040945080999 31 2123.14819601944 12 -713.051374182295 22 -793.031288591004 32 2155.44278114838 13 -713.051374182295 23 -793.031288591004 33 2155.44278114838 70 1 0 3DFACE 8 body_half_outside 10 724.87187698787 20 -750.87609961724 30 1817.56657040449 11 180.675224578544 21 -709.249312269842 31 1830.19391829555 12 180.675224578544 22 -750.87609961724 32 1817.56657040449 13 180.675224578544 23 -750.87609961724 33 1817.56657040449 70 1 0 3DFACE 8 body_half_outside 10 180.675224578544 20 -709.249312269842 30 1830.19391829555 11 724.87187698787 21 -750.87609961724 31 1817.56657040449 12 767.904940618653 22 -709.249312269841 32 1830.19391829555 13 767.904940618653 23 -709.249312269841 33 1830.19391829555 70 3 0 3DFACE 8 body_half_outside 10 767.904940618653 20 -709.249312269841 30 1830.19391829555 11 724.87187698787 21 -750.87609961724 31 1817.56657040449 12 739.771122243662 22 -739.771122243661 32 1820.9352284623 13 739.771122243662 23 -739.771122243661 33 1820.9352284623 70 1 0 3DFACE 8 body_half_outside 10 -738.208549610569 20 -738.20854961057 30 2258.00680432354 11 -759.379832416841 21 -756.991889361348 31 2148.21162800104 12 -758.175252738136 22 -758.175252738136 32 2148.91211343617 13 -758.175252738136 23 -758.175252738136 33 2148.91211343617 70 1 0 3DFACE 8 body_half_outside 10 -759.379832416841 20 -756.991889361348 30 2148.21162800104 11 -738.208549610569 21 -738.20854961057 31 2258.00680432354 12 -891.670534105406 22 -595.795202951324 32 2148.21162800104 13 -891.670534105406 23 -595.795202951324 33 2148.21162800104 70 3 0 3DFACE 8 body_half_outside 10 -891.670534105406 20 -595.795202951324 30 2148.21162800104 11 -738.208549610569 21 -738.20854961057 31 2258.00680432354 12 -868.041422984449 22 -580.006735667279 32 2258.00680432354 13 -868.041422984449 23 -580.006735667279 33 2258.00680432354 70 1 0 3DFACE 8 body_half_outside 10 -769.870311262695 20 -863.130130350016 30 1987.61043910797 11 -723.636295253065 21 -790.983771266745 31 1961.01586348506 12 -785.140115231108 22 -848.157192786392 32 1978.73092447164 13 -785.140115231108 23 -848.157192786392 33 1978.73092447164 70 1 0 3DFACE 8 body_half_outside 10 -723.636295253065 20 -790.983771266745 30 1961.01586348506 11 -769.870311262695 21 -863.130130350016 31 1987.61043910797 12 -702.965588161926 22 -809.153241506708 32 1972.08037046597 13 -702.965588161926 23 -809.153241506708 33 1972.08037046597 70 1 0 3DFACE 8 body_half_outside 10 -655.637457605706 20 -847.372595440649 30 2104.03168141582 11 -757.051052836406 21 -872.59583635536 31 2110.05176266305 12 -740.177565197592 22 -890.060339871748 32 2085.82110165668 13 -740.177565197592 23 -890.060339871748 33 2085.82110165668 70 1 0 3DFACE 8 body_half_outside 10 -757.051052836406 20 -872.59583635536 30 2110.05176266305 11 -655.637457605706 21 -847.372595440649 31 2104.03168141582 12 -680.351354626835 22 -823.413171149779 32 2137.7839549476 13 -680.351354626835 23 -823.413171149779 33 2137.7839549476 70 1 0 3DFACE 8 body_half_outside 10 -786.92474167715 20 -735.296194513125 30 2058.80750841657 11 -763.653083482914 21 -763.653083482914 31 2011.5925230317 12 -763.653083482914 22 -763.653083482914 32 2058.8118770109 13 -763.653083482914 23 -763.653083482914 33 2058.8118770109 70 1 0 3DFACE 8 body_half_outside 10 -763.653083482914 20 -763.653083482914 30 2011.5925230317 11 -786.92474167715 21 -735.296194513125 31 2058.80750841657 12 -786.927339360508 22 -735.2933223192 32 2011.59250954971 13 -786.927339360508 23 -735.2933223192 33 2011.59250954971 70 3 0 3DFACE 8 body_half_outside 10 -786.927339360508 20 -735.2933223192 30 2011.59250954971 11 -786.92474167715 21 -735.296194513125 31 2058.80750841657 12 -789.34285913936 22 -732.349614898499 32 2049.89434090933 13 -789.34285913936 23 -732.349614898499 33 2049.89434090933 70 13 0 3DFACE 8 body_half_outside 10 -786.927339360508 20 -735.2933223192 30 2011.59250954971 11 -789.34285913936 21 -732.349614898499 31 2049.89434090933 12 -789.394716623343 22 -732.286733093936 32 2020.79944934296 13 -789.394716623343 23 -732.286733093936 33 2020.79944934296 70 1 0 3DFACE 8 body_half_outside 10 104.493610898294 20 -856.9292108199 30 1972.4395492014 11 180.675224578544 21 -843.478785654691 31 1961.40114566384 12 104.493610580936 22 -843.478858324204 32 1961.40113017901 13 104.493610580936 23 -843.478858324204 33 1961.40113017901 70 1 0 3DFACE 8 body_half_outside 10 180.675224578544 20 -843.478785654691 30 1961.40114566384 11 104.493610898294 21 -856.9292108199 31 1972.4395492014 12 180.675224578544 22 -856.929131071254 32 1972.43955887653 13 180.675224578544 23 -856.929131071254 33 1972.43955887653 70 1 0 3DFACE 8 body_half_outside 10 104.49360070239 20 -760.199658141424 30 1953.19884488255 11 180.675224578544 21 -744.854240913949 31 1961.40114566384 12 104.493597604008 22 -744.854261675785 32 1961.40113017901 13 104.493597604008 23 -744.854261675785 33 1961.40113017901 70 1 0 3DFACE 8 body_half_outside 10 180.675224578544 20 -744.854240913949 30 1961.40114566384 11 104.49360070239 21 -760.199658141424 31 1953.19884488255 12 180.675224578544 22 -760.199629303065 32 1953.19886468436 13 180.675224578544 23 -760.199629303065 33 1953.19886468436 70 1 0 3DFACE 8 body_half_outside 10 104.493608114757 20 -881.220857485245 30 2017.88602361794 11 180.675224578544 21 -882.926258568641 31 2035.20217666346 12 180.675224578544 22 -881.220764951522 32 2017.88600937388 13 180.675224578544 23 -881.220764951522 33 2017.88600937388 70 1 0 3DFACE 8 body_half_outside 10 180.675224578544 20 -882.926258568641 30 2035.20217666346 11 104.493608114757 21 -881.220857485245 31 2017.88602361794 12 104.493606060716 22 -882.926351999993 32 2035.2022000213 13 104.493606060716 23 -882.926351999993 33 2035.2022000213 70 1 0 3DFACE 8 body_half_outside 10 832.899678896021 20 -165.674046918965 30 855.37186879426 11 776.87389411925 21 -321.791703197793 31 914.026066884025 12 784.574341950659 22 -324.981333125909 32 855.37186879426 13 784.574341950659 23 -324.981333125909 33 855.37186879426 70 1 0 3DFACE 8 body_half_outside 10 776.87389411925 20 -321.791703197793 30 914.026066884025 11 832.899678896021 21 -165.674046918965 31 855.37186879426 12 824.724927080674 22 -164.047987682633 32 914.026066884025 13 824.724927080674 23 -164.047987682633 33 914.026066884025 70 1 0 3DFACE 8 body_half_outside 10 -554.192057578438 20 -829.407026995335 30 2361.46489814399 11 -738.208549610569 21 -738.20854961057 31 2258.00680432354 12 -580.006735667279 22 -868.041422984449 32 2258.00680432354 13 -580.006735667279 23 -868.041422984449 33 2258.00680432354 70 1 0 3DFACE 8 body_half_outside 10 -738.208549610569 20 -738.20854961057 30 2258.00680432354 11 -554.192057578438 21 -829.407026995335 31 2361.46489814399 12 -705.352696568271 22 -705.352696568271 32 2361.46489814399 13 -705.352696568271 23 -705.352696568271 33 2361.46489814399 70 1 0 3DFACE 8 body_half_outside 10 104.493608114766 20 -811.482736403359 30 1948.14790253605 11 180.675224578544 21 -794.16651328432 31 1946.44243137914 12 104.493606060728 22 -794.166559999995 32 1946.44240802131 13 104.493606060728 23 -794.166559999995 33 1946.44240802131 70 1 0 3DFACE 8 body_half_outside 10 180.675224578544 20 -794.16651328432 30 1946.44243137914 11 104.493608114766 21 -811.482736403359 31 1948.14790253605 12 180.675224578544 22 -811.482680573908 32 1948.14792499626 13 180.675224578544 23 -811.482680573908 33 1948.14792499626 70 1 0 3DFACE 8 body_half_outside 10 104.493609641047 20 -876.169915138752 30 2001.23529816273 11 180.675224578544 21 -867.967544283947 31 1985.88990429309 12 104.493610580933 22 -867.967629842287 32 1985.88990169709 13 104.493610580933 23 -867.967629842287 33 1985.88990169709 70 1 0 3DFACE 8 body_half_outside 10 180.675224578544 20 -867.967544283947 30 1985.88990429309 11 104.493609641047 21 -876.169915138752 31 2001.23529816273 12 180.675224578544 22 -876.169825263419 32 2001.23529268221 13 180.675224578544 23 -876.169825263419 33 2001.23529268221 70 1 0 3DFACE 8 body_half_outside 10 870.542978388702 20 -173.161764737035 30 1427.8983600213 11 733.714233519903 21 -303.914386430124 31 1614.7610800213 12 820.033554718597 22 -339.669019965462 32 1427.8983600213 13 820.033554718597 23 -339.669019965462 33 1427.8983600213 70 1 0 3DFACE 8 body_half_outside 10 733.714233519903 20 -303.914386430124 30 1614.7610800213 11 870.542978388702 21 -173.161764737035 31 1427.8983600213 12 778.906875772646 22 -154.93421062823 32 1614.7610800213 13 778.906875772646 23 -154.93421062823 33 1614.7610800213 70 1 0 3DFACE 8 body_half_outside 10 104.493606060728 20 -794.166559999995 30 1946.44240802131 11 180.675224578544 21 -776.850345994732 31 1948.14792499626 12 104.493603557875 22 -776.850383596631 32 1948.14790253605 13 104.493603557875 23 -776.850383596631 33 1948.14790253605 70 1 0 3DFACE 8 body_half_outside 10 180.675224578544 20 -776.850345994732 30 1948.14792499626 11 104.493606060728 21 -794.166559999995 31 1946.44240802131 12 180.675224578544 22 -794.16651328432 32 1946.44243137914 13 180.675224578544 23 -794.16651328432 33 1946.44243137914 70 1 0 3DFACE 8 body_half_outside 10 104.493610580933 20 -867.967629842287 30 1985.88990169709 11 180.675224578544 21 -856.929131071254 31 1972.43955887653 12 104.493610898294 22 -856.9292108199 32 1972.4395492014 13 104.493610898294 23 -856.9292108199 33 1972.4395492014 70 1 0 3DFACE 8 body_half_outside 10 180.675224578544 20 -856.929131071254 30 1972.43955887653 11 104.493610580933 21 -867.967629842287 31 1985.88990169709 12 180.675224578544 22 -867.967544283947 32 1985.88990429309 13 180.675224578544 23 -867.967544283947 33 1985.88990429309 70 1 0 LINE 8 gearbox_half 10 30.4100782304564 20 -746.49013258163 30 2453.45715065631 11 24.34322336653 21 -746.490281375615 31 2458.93184091804 0 LINE 8 gearbox_half 10 2.7574625836424e-05 20 -746.482315034391 30 2425.81166985652 11 40.5223071141985 21 -746.489826768683 31 2418.48410781754 0 LINE 8 gearbox_half 10 38.1044882661712 20 -746.472597450548 30 2441.59510408829 11 2.7574625836424e-05 21 -746.482315034391 31 2425.81166985652 0 LINE 8 gearbox_half 10 -8.51065249376504e-06 20 -839.802827497933 30 2407.23923490746 11 28.6886074277319 21 -845.586914684007 31 2396.25770684411 0 LINE 8 gearbox_half 10 -8.80083252567691 20 -746.490516835407 30 2466.03430060887 11 2.7574625836424e-05 21 -746.482315034391 31 2425.81166985652 0 LINE 8 gearbox_half 10 2.7574625836424e-05 20 -746.482315034391 30 2425.81166985652 11 24.34322336653 21 -746.490281375615 31 2458.93184091804 0 LINE 8 gearbox_half 10 2.7574625836424e-05 20 -746.482315034391 30 2425.81166985652 11 -38.4950902517974 21 -746.468944067437 31 2440.30734482534 0 LINE 8 gearbox_half 10 2.7574625836424e-05 20 -746.482315034391 30 2425.81166985652 11 1.97523338443695e-05 21 -746.466300328333 31 2408.44996985759 0 LINE 8 gearbox_half 10 -8.51065249376504e-06 20 -839.802827497933 30 2407.23923490746 11 -33.4678737118522 21 -842.638323863285 31 2401.89221007289 0 LINE 8 gearbox_half 10 1.97523338443695e-05 20 -746.466300328333 30 2408.44996985759 11 -8.51065249376504e-06 21 -839.802827497933 31 2407.23923490746 0 LINE 8 gearbox_half 10 -8.51065249376504e-06 20 -839.802827497933 30 2407.23923490746 11 -28.6885754589981 21 -845.586914071948 31 2396.25770800615 0 LINE 8 gearbox_half 10 -15.9204113486204 20 -849.898361163922 30 2387.78046547824 11 -8.51065249376504e-06 21 -839.802827497933 31 2407.23923490746 0 LINE 8 gearbox_half 10 -8.51065249376504e-06 20 -839.802827497933 30 2407.23923490746 11 8.20040795902847 21 -851.106221594429 31 2385.4069325561 0 LINE 8 gearbox_half 10 2.7574625836424e-05 20 -746.482315034391 30 2425.81166985652 11 40.5223036225517 21 -746.489826768019 31 2433.13926654555 0 LINE 8 gearbox_half 10 -8.51065249376504e-06 20 -839.802827497933 30 2407.23923490746 11 22.8299783182512 21 -848.019743175159 31 2391.47368489106 0 LINE 8 gearbox_half 10 -8.51065249376504e-06 20 -839.802827497933 30 2407.23923490746 11 -8.20037490092574 21 -851.106218203592 31 2385.40693910603 0 LINE 8 gearbox_half 10 2.12757738010438e-05 20 -746.490561947348 30 2467.05568035128 11 2.7574625836424e-05 21 -746.482315034391 31 2425.81166985652 0 LINE 8 gearbox_half 10 38.4951388369074 20 -746.468944065183 30 2440.307304368 11 2.7574625836424e-05 21 -746.482315034391 31 2425.81166985652 0 LINE 8 gearbox_half 10 -40.5222597845463 20 -746.489826767721 30 2433.13935135064 11 2.7574625836424e-05 21 -746.482315034391 31 2425.81166985652 0 LINE 8 gearbox_half 10 -8.51065249376504e-06 20 -839.802827497933 30 2407.23923490746 11 15.9204143676902 21 -849.898373872036 31 2387.78044098382 0 LINE 8 gearbox_half 10 -8.51065249376504e-06 20 -839.802827497933 30 2407.23923490746 11 33.4679083982488 21 -842.638324380738 31 2401.8922090971 0 LINE 8 gearbox_half 10 2.7574625836424e-05 20 -746.482315034391 30 2425.81166985652 11 -40.5222636135967 21 -746.489826768433 31 2418.48410805367 0 LINE 8 gearbox_half 10 -8.51065249376504e-06 20 -839.802827497933 30 2407.23923490746 11 1.72997611565862e-05 21 -851.533505856544 31 2384.56770196969 0 LINE 8 gearbox_half 10 30.4100782304564 20 -746.49013258163 30 2453.45715065631 11 2.7574625836424e-05 21 -746.482315034391 31 2425.81166985652 0 LINE 8 gearbox_half 10 -8.51065249376504e-06 20 -839.802827497933 30 2407.23923490746 11 -22.8299485734197 21 -848.019743098533 31 2391.47368503808 0 LINE 8 gearbox_half 10 2.7574625836424e-05 20 -746.482315034391 30 2425.81166985652 11 -38.4950971525309 21 -746.468944065041 31 2411.31607076746 0 LINE 8 gearbox_half 10 2.7574625836424e-05 20 -746.482315034391 30 2425.81166985652 11 35.1336643413592 21 -746.489997426872 31 2447.15311715482 0 LINE 8 gearbox_half 10 -35.1336147072826 20 -746.489997435648 30 2447.15314153492 11 2.7574625836424e-05 21 -746.482315034391 31 2425.81166985652 0 LINE 8 gearbox_half 10 -41.243969438466 20 -746.489812236375 30 2425.81166701568 11 2.7574625836424e-05 21 -746.482315034391 31 2425.81166985652 0 LINE 8 gearbox_half 10 2.7574625836424e-05 20 -746.482315034391 30 2425.81166985652 11 41.2440089431315 21 -746.489812235881 31 2425.81169037352 0 LINE 8 gearbox_half 10 2.7574625836424e-05 20 -746.482315034391 30 2425.81166985652 11 -17.0525826131802 21 -746.490415123346 31 2463.2377628621 0 LINE 8 gearbox_half 10 -24.3431841465257 20 -746.490281376331 30 2458.9318438987 11 2.7574625836424e-05 21 -746.482315034391 31 2425.81166985652 0 LINE 8 gearbox_half 10 17.0526628275986 20 -746.490415117915 30 2463.23773775863 11 2.7574625836424e-05 21 -746.482315034391 31 2425.81166985652 0 LINE 8 gearbox_half 10 2.7574625836424e-05 20 -746.482315034391 30 2425.81166985652 11 8.80087264672179 21 -746.490516834585 31 2466.03429657022 0 LINE 8 gearbox_half 10 2.7574625836424e-05 20 -746.482315034391 30 2425.81166985652 11 38.4951397868556 21 -746.468944064851 31 2411.31607056148 0 LINE 8 gearbox_half 10 2.7574625836424e-05 20 -746.482315034391 30 2425.81166985652 11 -30.4100395457505 21 -746.490132582396 31 2453.45715336784 0 3DFACE 8 gearbox_half 10 -16.4089950656911 20 -70.0735200000139 30 1719.8874193002 11 -23.8222131580276 21 -116.789200000014 31 1715.92498725262 12 -23.8222131580276 22 -70.0735200000139 32 1715.92498725262 13 -23.8222131580276 23 -70.0735200000139 33 1715.92498725262 70 1 0 3DFACE 8 gearbox_half 10 -23.8222131580276 20 -116.789200000014 30 1715.92498725262 11 -16.4089950656911 21 -70.0735200000139 31 1719.8874193002 12 -16.4089950656911 22 -116.789200000014 32 1719.8874193002 13 -16.4089950656911 23 -116.789200000014 33 1719.8874193002 70 1 0 3DFACE 8 gearbox_half 10 712.934349429914 20 -116.789200000014 30 1614.07300396247 11 -758.547422188618 21 -116.789200000014 31 1522.84685844505 12 758.547422188619 22 -116.789200000014 32 1522.84685844505 13 758.547422188619 23 -116.789200000014 33 1522.84685844505 70 1 0 3DFACE 8 gearbox_half 10 -758.547422188618 20 -116.789200000014 30 1522.84685844505 11 712.934349429914 21 -116.789200000014 31 1614.07300396247 12 -712.59031140046 22 -116.789200000014 32 1614.76108002137 13 -712.59031140046 23 -116.789200000014 33 1614.76108002137 70 3 0 3DFACE 8 gearbox_half 10 -712.59031140046 20 -116.789200000014 30 1614.76108002137 11 712.934349429914 21 -116.789200000014 31 1614.07300396247 12 93.4322738363532 22 -116.789200000014 32 1614.76107890595 13 93.4322738363532 23 -116.789200000014 33 1614.76107890595 70 13 0 3DFACE 8 gearbox_half 10 -712.59031140046 20 -116.789200000014 30 1614.76108002137 11 93.4322738363532 21 -116.789200000014 31 1614.76107890595 12 -93.4313636055058 22 -116.789200000014 32 1614.76108002137 13 -93.4313636055058 23 -116.789200000014 33 1614.76108002137 70 3 0 3DFACE 8 gearbox_half 10 -93.4313636055058 20 -116.789200000014 30 1614.76108002137 11 93.4322738363532 21 -116.789200000014 31 1614.76107890595 12 8.36522724084684 22 -116.789200000014 32 1638.21727291857 13 8.36522724084684 23 -116.789200000014 33 1638.21727291857 70 15 0 3DFACE 8 gearbox_half 10 8.36522724084684 20 -116.789200000014 30 1638.21727291857 11 93.4322738363532 21 -116.789200000014 31 1614.76107890595 12 16.4090345703586 22 -116.789200000014 32 1640.65732084063 13 16.4090345703586 23 -116.789200000014 33 1640.65732084063 70 3 0 3DFACE 8 gearbox_half 10 16.4090345703586 20 -116.789200000014 30 1640.65732084063 11 93.4322738363532 21 -116.789200000014 31 1614.76107890595 12 23.8222526626951 22 -116.789200000014 32 1644.61975288821 13 23.8222526626951 23 -116.789200000014 33 1644.61975288821 70 3 0 3DFACE 8 gearbox_half 10 23.8222526626951 20 -116.789200000014 30 1644.61975288821 11 93.4322738363532 21 -116.789200000014 31 1614.76107890595 12 30.3199957039486 22 -116.789200000014 32 1649.95229501988 13 30.3199957039486 23 -116.789200000014 33 1649.95229501988 70 3 0 3DFACE 8 gearbox_half 10 30.3199957039486 20 -116.789200000014 30 1649.95229501988 11 93.4322738363532 21 -116.789200000014 31 1614.76107890595 12 35.65255907302 22 -116.789200000014 32 1656.45002063205 13 35.65255907302 23 -116.789200000014 33 1656.45002063205 70 3 0 3DFACE 8 gearbox_half 10 35.65255907302 20 -116.789200000014 30 1656.45002063205 11 93.4322738363532 21 -116.789200000014 31 1614.76107890595 12 39.6150153501718 22 -116.789200000014 32 1663.86322577341 13 39.6150153501718 23 -116.789200000014 33 1663.86322577341 70 3 0 3DFACE 8 gearbox_half 10 39.6150153501718 20 -116.789200000014 30 1663.86322577341 11 93.4322738363532 21 -116.789200000014 31 1614.76107890595 12 42.0550895628442 22 -116.789200000014 32 1671.90702512775 13 42.0550895628442 23 -116.789200000014 33 1671.90702512775 70 3 0 3DFACE 8 gearbox_half 10 42.0550895628442 20 -116.789200000014 30 1671.90702512775 11 93.4322738363532 21 -116.789200000014 31 1614.76107890595 12 42.8790110274535 22 -116.789200000014 32 1680.2722999969 13 42.8790110274535 23 -116.789200000014 33 1680.2722999969 70 3 0 3DFACE 8 gearbox_half 10 42.8790110274535 20 -116.789200000014 30 1680.2722999969 11 93.4322738363532 21 -116.789200000014 31 1614.76107890595 12 93.4313563944944 22 -116.789200000014 32 2549.07468002137 13 93.4313563944944 23 -116.789200000014 33 2549.07468002137 70 13 0 3DFACE 8 gearbox_half 10 -93.4313636055058 20 -116.789200000014 30 1614.76108002137 11 8.36522724084684 21 -116.789200000014 31 1638.21727291857 12 -5.03211860767294e-05 22 -116.789200000014 32 1637.3933787953 13 -5.03211860767294e-05 23 -116.789200000014 33 1637.3933787953 70 13 0 3DFACE 8 gearbox_half 10 42.8790110274535 20 -116.789200000014 30 1680.2722999969 11 93.4313563944944 21 -116.789200000014 31 2549.07468002137 12 42.0551169041753 22 -116.789200000014 32 1688.63757755893 13 42.0551169041753 23 -116.789200000014 33 1688.63757755893 70 3 0 3DFACE 8 gearbox_half 10 42.0551169041753 20 -116.789200000014 30 1688.63757755893 11 93.4313563944944 21 -116.789200000014 31 2549.07468002137 12 39.615068982122 22 -116.789200000014 32 1696.68138488844 13 39.615068982122 23 -116.789200000014 33 1696.68138488844 70 3 0 3DFACE 8 gearbox_half 10 39.615068982122 20 -116.789200000014 30 1696.68138488844 11 93.4313563944944 21 -116.789200000014 31 2549.07468002137 12 35.6526369345435 22 -116.789200000014 32 1704.09460298078 13 35.6526369345435 23 -116.789200000014 33 1704.09460298078 70 3 0 3DFACE 8 gearbox_half 10 35.6526369345435 20 -116.789200000014 30 1704.09460298078 11 93.4313563944944 21 -116.789200000014 31 2549.07468002137 12 30.3200948028707 22 -116.789200000014 32 1710.59234602203 13 30.3200948028707 23 -116.789200000014 33 1710.59234602203 70 3 0 3DFACE 8 gearbox_half 10 30.3200948028707 20 -116.789200000014 30 1710.59234602203 11 93.4313563944944 21 -116.789200000014 31 2549.07468002137 12 23.8223691906999 22 -116.789200000014 32 1715.9249093911 13 23.8223691906999 23 -116.789200000014 33 1715.9249093911 70 3 0 3DFACE 8 gearbox_half 10 23.8223691906999 20 -116.789200000014 30 1715.9249093911 11 93.4313563944944 21 -116.789200000014 31 2549.07468002137 12 16.4091640493401 22 -116.789200000014 32 1719.88736566825 13 16.4091640493401 23 -116.789200000014 33 1719.88736566825 70 3 0 3DFACE 8 gearbox_half 10 16.4091640493401 20 -116.789200000014 30 1719.88736566825 11 93.4313563944944 21 -116.789200000014 31 2549.07468002137 12 42.8790110274535 22 -116.789200000014 32 2035.20210659002 13 42.8790110274535 23 -116.789200000014 33 2035.20210659002 70 15 0 3DFACE 8 gearbox_half 10 16.4091640493401 20 -116.789200000014 30 1719.88736566825 11 42.8790110274535 21 -116.789200000014 31 2035.20210659002 12 42.0550941197328 22 -116.789200000014 32 2026.83683127205 13 42.0550941197328 23 -116.789200000014 33 2026.83683127205 70 13 0 3DFACE 8 gearbox_half 10 16.4091640493401 20 -116.789200000014 30 1719.88736566825 11 42.0550941197328 21 -116.789200000014 31 2026.83683127205 12 8.36536469500046 22 -116.789200000014 32 1722.32743988093 13 8.36536469500046 23 -116.789200000014 33 1722.32743988093 70 3 0 3DFACE 8 gearbox_half 10 8.36536469500046 20 -116.789200000014 30 1722.32743988093 11 42.0550941197328 21 -116.789200000014 31 2026.83683127205 12 8.98258536075502e-05 22 -116.789200000014 32 1723.15136134553 13 8.98258536075502e-05 23 -116.789200000014 33 1723.15136134553 70 3 0 3DFACE 8 gearbox_half 10 8.98258536075502e-05 20 -116.789200000014 30 1723.15136134553 11 42.0550941197328 21 -116.789200000014 31 2026.83683127205 12 39.6150242888304 22 -116.789200000014 32 2018.79303058852 13 39.6150242888304 23 -116.789200000014 33 2018.79303058852 70 13 0 3DFACE 8 gearbox_half 10 8.98258536075502e-05 20 -116.789200000014 30 1723.15136134553 11 39.6150242888304 21 -116.789200000014 31 2018.79303058852 12 35.652572049941 22 -116.789200000014 32 2011.37982328866 13 35.652572049941 23 -116.789200000014 33 2011.37982328866 70 13 0 3DFACE 8 gearbox_half 10 8.98258536075502e-05 20 -116.789200000014 30 1723.15136134553 11 35.652572049941 21 -116.789200000014 31 2011.37982328866 12 30.3200122204362 22 -116.789200000014 32 2004.88209477165 13 30.3200122204362 23 -116.789200000014 33 2004.88209477165 70 13 0 3DFACE 8 gearbox_half 10 8.98258536075502e-05 20 -116.789200000014 30 1723.15136134553 11 30.3200122204362 21 -116.789200000014 31 2004.88209477165 12 23.8222720840299 22 -116.789200000014 32 1999.54954910041 13 23.8222720840299 23 -116.789200000014 33 1999.54954910041 70 13 0 3DFACE 8 gearbox_half 10 8.98258536075502e-05 20 -116.789200000014 30 1723.15136134553 11 23.8222720840299 21 -116.789200000014 31 1999.54954910041 12 16.4090561501895 22 -116.789200000014 32 1995.58711301456 13 16.4090561501895 23 -116.789200000014 33 1995.58711301456 70 13 0 3DFACE 8 gearbox_half 10 8.98258536075502e-05 20 -116.789200000014 30 1723.15136134553 11 16.4090561501895 21 -116.789200000014 31 1995.58711301456 12 8.36525014987311 22 -116.789200000014 32 1993.14706071074 13 8.36525014987311 23 -116.789200000014 33 1993.14706071074 70 13 0 3DFACE 8 gearbox_half 10 8.98258536075502e-05 20 -116.789200000014 30 1723.15136134553 11 8.36525014987311 21 -116.789200000014 31 1993.14706071074 12 -2.69633454074381e-05 22 -116.789200000014 32 1992.32316203057 13 -2.69633454074381e-05 23 -116.789200000014 33 1992.32316203057 70 13 0 3DFACE 8 gearbox_half 10 42.8790110274535 20 -116.789200000014 30 2035.20210659002 11 93.4313563944944 21 -116.789200000014 31 2549.07468002137 12 42.0551123472866 22 -116.789200000014 32 2043.56738370323 13 42.0551123472866 23 -116.789200000014 33 2043.56738370323 70 3 0 3DFACE 8 gearbox_half 10 42.0551123472866 20 -116.789200000014 30 2043.56738370323 11 93.4313563944944 21 -116.789200000014 31 2549.07468002137 12 39.6150600434633 22 -116.789200000014 32 2051.61118970355 13 39.6150600434633 23 -116.789200000014 33 2051.61118970355 70 3 0 3DFACE 8 gearbox_half 10 39.6150600434633 20 -116.789200000014 30 2051.61118970355 11 93.4313563944944 21 -116.789200000014 31 2549.07468002137 12 35.6526239576226 22 -116.789200000014 32 2059.02440563739 13 35.6526239576226 23 -116.789200000014 33 2059.02440563739 70 3 0 3DFACE 8 gearbox_half 10 35.6526239576226 20 -116.789200000014 30 2059.02440563739 11 93.4313563944944 21 -116.789200000014 31 2549.07468002137 12 30.3200782863833 22 -116.789200000014 32 2065.5221457738 13 30.3200782863833 23 -116.789200000014 33 2065.5221457738 70 3 0 3DFACE 8 gearbox_half 10 30.3200782863833 20 -116.789200000014 30 2065.5221457738 11 93.4313563944944 21 -116.789200000014 31 2549.07468002137 12 23.8223497693652 22 -116.789200000014 32 2070.8547056033 13 23.8223497693652 23 -116.789200000014 33 2070.8547056033 70 3 0 3DFACE 8 gearbox_half 10 23.8223497693652 20 -116.789200000014 30 2070.8547056033 11 93.4313563944944 21 -116.789200000014 31 2549.07468002137 12 16.4091424695092 22 -116.789200000014 32 2074.81715784219 13 16.4091424695092 23 -116.789200000014 33 2074.81715784219 70 3 0 3DFACE 8 gearbox_half 10 16.4091424695092 20 -116.789200000014 30 2074.81715784219 11 93.4313563944944 21 -116.789200000014 31 2549.07468002137 12 8.3653417859741 22 -116.789200000014 32 2077.25722767309 13 8.3653417859741 23 -116.789200000014 33 2077.25722767309 70 3 0 3DFACE 8 gearbox_half 10 8.3653417859741 20 -116.789200000014 30 2077.25722767309 11 93.4313563944944 21 -116.789200000014 31 2549.07468002137 12 6.64680129382589e-05 22 -116.789200000014 32 2078.08114458081 13 6.64680129382589e-05 23 -116.789200000014 33 2078.08114458081 70 3 0 3DFACE 8 gearbox_half 10 6.64680129382589e-05 20 -116.789200000014 30 2078.08114458081 11 93.4313563944944 21 -116.789200000014 31 2549.07468002137 12 39.6150423666468 22 -116.789200000014 32 2409.40261154673 13 39.6150423666468 23 -116.789200000014 33 2409.40261154673 70 15 0 3DFACE 8 gearbox_half 10 6.64680129382589e-05 20 -116.789200000014 30 2078.08114458081 11 39.6150423666468 21 -116.789200000014 31 2409.40261154673 12 35.652598194651 22 -116.789200000014 32 2401.98939991186 13 35.652598194651 23 -116.789200000014 33 2401.98939991186 70 13 0 3DFACE 8 gearbox_half 10 6.64680129382589e-05 20 -116.789200000014 30 2078.08114458081 11 35.652598194651 21 -116.789200000014 31 2401.98939991186 12 30.3200454313183 22 -116.789200000014 32 2395.49166556936 13 30.3200454313183 23 -116.789200000014 33 2395.49166556936 70 13 0 3DFACE 8 gearbox_half 10 6.64680129382589e-05 20 -116.789200000014 30 2078.08114458081 11 30.3200454313183 21 -116.789200000014 31 2395.49166556936 12 23.8223110888135 22 -116.789200000014 32 2390.15911280603 13 23.8223110888135 23 -116.789200000014 33 2390.15911280603 70 13 0 3DFACE 8 gearbox_half 10 6.64680129382589e-05 20 -116.789200000014 30 2078.08114458081 11 23.8223110888135 21 -116.789200000014 31 2390.15911280603 12 16.4090994539476 22 -116.789200000014 32 2386.19666863403 13 16.4090994539476 23 -116.789200000014 33 2386.19666863403 70 13 0 3DFACE 8 gearbox_half 10 6.64680129382589e-05 20 -116.789200000014 30 2078.08114458081 11 16.4090994539476 21 -116.789200000014 31 2386.19666863403 12 8.36529609247169 22 -116.789200000014 32 2383.75660756074 13 8.36529609247169 23 -116.789200000014 33 2383.75660756074 70 13 0 3DFACE 8 gearbox_half 10 6.64680129382589e-05 20 -116.789200000014 30 2078.08114458081 11 8.36529609247169 21 -116.789200000014 31 2383.75660756074 12 1.98565501612791e-05 22 -116.789200000014 32 2382.93269976479 13 1.98565501612791e-05 23 -116.789200000014 33 2382.93269976479 70 13 0 3DFACE 8 gearbox_half 10 39.6150423666468 20 -116.789200000014 30 2409.40261154673 11 93.4313563944944 21 -116.789200000014 31 2549.07468002137 12 42.05510343994 22 -116.789200000014 32 2417.44641490821 13 42.05510343994 23 -116.789200000014 33 2417.44641490821 70 3 0 3DFACE 8 gearbox_half 10 42.05510343994 20 -116.789200000014 30 2417.44641490821 11 93.4313563944944 21 -116.789200000014 31 2549.07468002137 12 42.8790112358864 22 -116.789200000014 32 2425.81169114413 13 42.8790112358864 23 -116.789200000014 33 2425.81169114413 70 3 0 3DFACE 8 gearbox_half 10 42.8790112358864 20 -116.789200000014 30 2425.81169114413 11 93.4313563944944 21 -116.789200000014 31 2549.07468002137 12 42.05510343994 22 -116.789200000014 32 2434.17696738005 13 42.05510343994 23 -116.789200000014 33 2434.17696738005 70 3 0 3DFACE 8 gearbox_half 10 42.05510343994 20 -116.789200000014 30 2434.17696738005 11 93.4313563944944 21 -116.789200000014 31 2549.07468002137 12 39.6150423666468 22 -116.789200000014 32 2442.22077074152 13 39.6150423666468 23 -116.789200000014 33 2442.22077074152 70 3 0 3DFACE 8 gearbox_half 10 39.6150423666468 20 -116.789200000014 30 2442.22077074152 11 93.4313563944944 21 -116.789200000014 31 2549.07468002137 12 35.652598194651 22 -116.789200000014 32 2449.63398237639 13 35.652598194651 23 -116.789200000014 33 2449.63398237639 70 3 0 3DFACE 8 gearbox_half 10 35.652598194651 20 -116.789200000014 30 2449.63398237639 11 93.4313563944944 21 -116.789200000014 31 2549.07468002137 12 30.3200454313183 22 -116.789200000014 32 2456.13171671889 13 30.3200454313183 23 -116.789200000014 33 2456.13171671889 70 3 0 3DFACE 8 gearbox_half 10 30.3200454313183 20 -116.789200000014 30 2456.13171671889 11 93.4313563944944 21 -116.789200000014 31 2549.07468002137 12 23.8223110888135 22 -116.789200000014 32 2461.46426948223 13 23.8223110888135 23 -116.789200000014 33 2461.46426948223 70 3 0 3DFACE 8 gearbox_half 10 23.8223110888135 20 -116.789200000014 30 2461.46426948223 11 93.4313563944944 21 -116.789200000014 31 2549.07468002137 12 16.4090994539477 22 -116.789200000014 32 2465.42671365422 13 16.4090994539477 23 -116.789200000014 33 2465.42671365422 70 3 0 3DFACE 8 gearbox_half 10 16.4090994539477 20 -116.789200000014 30 2465.42671365422 11 93.4313563944944 21 -116.789200000014 31 2549.07468002137 12 8.36529609247169 22 -116.789200000014 32 2467.86677472752 13 8.36529609247169 23 -116.789200000014 33 2467.86677472752 70 3 0 3DFACE 8 gearbox_half 10 8.36529609247169 20 -116.789200000014 30 2467.86677472752 11 93.4313563944944 21 -116.789200000014 31 2549.07468002137 12 1.98565501612791e-05 22 -116.789200000014 32 2468.69068252346 13 1.98565501612791e-05 23 -116.789200000014 33 2468.69068252346 70 3 0 3DFACE 8 gearbox_half 10 -93.4313636055058 20 -116.789200000014 30 1614.76108002137 11 -42.878971522786 21 -116.789200000014 31 1680.27244014393 12 -93.4313636055058 22 -116.789200000014 32 2549.07468002137 13 -93.4313636055058 23 -116.789200000014 33 2549.07468002137 70 3 0 3DFACE 8 gearbox_half 10 -42.878971522786 20 -116.789200000014 30 1680.27244014393 11 -93.4313636055058 21 -116.789200000014 31 1614.76108002137 12 -42.0550773995078 22 -116.789200000014 32 1671.9071625819 13 -42.0550773995078 23 -116.789200000014 33 1671.9071625819 70 3 0 3DFACE 8 gearbox_half 10 -42.0550773995078 20 -116.789200000014 30 1671.9071625819 11 -93.4313636055058 21 -116.789200000014 31 1614.76108002137 12 -39.6150294774544 22 -116.789200000014 32 1663.86335525239 13 -39.6150294774544 23 -116.789200000014 33 1663.86335525239 70 3 0 3DFACE 8 gearbox_half 10 -39.6150294774544 20 -116.789200000014 30 1663.86335525239 11 -93.4313636055058 21 -116.789200000014 31 1614.76108002137 12 -35.652597429876 22 -116.789200000014 32 1656.45013716005 13 -35.652597429876 23 -116.789200000014 33 1656.45013716005 70 3 0 3DFACE 8 gearbox_half 10 -35.652597429876 20 -116.789200000014 30 1656.45013716005 11 -93.4313636055058 21 -116.789200000014 31 1614.76108002137 12 -30.3200552982032 22 -116.789200000014 32 1649.9523941188 13 -30.3200552982032 23 -116.789200000014 33 1649.9523941188 70 3 0 3DFACE 8 gearbox_half 10 -30.3200552982032 20 -116.789200000014 30 1649.9523941188 11 -93.4313636055058 21 -116.789200000014 31 1614.76108002137 12 -23.8223296860324 22 -116.789200000014 32 1644.61983074973 13 -23.8223296860324 23 -116.789200000014 33 1644.61983074973 70 3 0 3DFACE 8 gearbox_half 10 -23.8223296860324 20 -116.789200000014 30 1644.61983074973 11 -93.4313636055058 21 -116.789200000014 31 1614.76108002137 12 -16.4091245446726 22 -116.789200000014 32 1640.65737447258 13 -16.4091245446726 23 -116.789200000014 33 1640.65737447258 70 3 0 3DFACE 8 gearbox_half 10 -16.4091245446726 20 -116.789200000014 30 1640.65737447258 11 -93.4313636055058 21 -116.789200000014 31 1614.76108002137 12 -8.36532519033293 22 -116.789200000014 32 1638.2173002599 13 -8.36532519033293 23 -116.789200000014 33 1638.2173002599 70 3 0 3DFACE 8 gearbox_half 10 -8.36532519033293 20 -116.789200000014 30 1638.2173002599 11 -93.4313636055058 21 -116.789200000014 31 1614.76108002137 12 -5.03211860767294e-05 22 -116.789200000014 32 1637.3933787953 13 -5.03211860767294e-05 23 -116.789200000014 33 1637.3933787953 70 3 0 3DFACE 8 gearbox_half 10 -93.4313636055058 20 -116.789200000014 30 2549.07468002137 11 -42.878971522786 21 -116.789200000014 31 1680.27244014393 12 -42.0550500581767 22 -116.789200000014 32 1688.63771501308 13 -42.0550500581767 23 -116.789200000014 33 1688.63771501308 70 13 0 3DFACE 8 gearbox_half 10 -93.4313636055058 20 -116.789200000014 30 2549.07468002137 11 -42.0550500581767 21 -116.789200000014 31 1688.63771501308 12 -39.6149758455043 22 -116.789200000014 32 1696.68151436742 13 -39.6149758455043 23 -116.789200000014 33 1696.68151436742 70 13 0 3DFACE 8 gearbox_half 10 -93.4313636055058 20 -116.789200000014 30 2549.07468002137 11 -39.6149758455043 21 -116.789200000014 31 1696.68151436742 12 -35.6525195683525 22 -116.789200000014 32 1704.09471950878 13 -35.6525195683525 23 -116.789200000014 33 1704.09471950878 70 13 0 3DFACE 8 gearbox_half 10 -93.4313636055058 20 -116.789200000014 30 2549.07468002137 11 -35.6525195683525 21 -116.789200000014 31 1704.09471950878 12 -30.3199561992811 22 -116.789200000014 32 1710.59244512095 13 -30.3199561992811 23 -116.789200000014 33 1710.59244512095 70 13 0 3DFACE 8 gearbox_half 10 -93.4313636055058 20 -116.789200000014 30 2549.07468002137 11 -30.3199561992811 21 -116.789200000014 31 1710.59244512095 12 -23.8222131580276 22 -116.789200000014 32 1715.92498725262 13 -23.8222131580276 23 -116.789200000014 33 1715.92498725262 70 13 0 3DFACE 8 gearbox_half 10 -93.4313636055058 20 -116.789200000014 30 2549.07468002137 11 -23.8222131580276 21 -116.789200000014 31 1715.92498725262 12 -16.4089950656911 22 -116.789200000014 32 1719.8874193002 13 -16.4089950656911 23 -116.789200000014 33 1719.8874193002 70 13 0 3DFACE 8 gearbox_half 10 -93.4313636055058 20 -116.789200000014 30 2549.07468002137 11 -16.4089950656911 21 -116.789200000014 31 1719.8874193002 12 -42.878971522786 22 -116.789200000014 32 2035.20220002137 13 -42.878971522786 23 -116.789200000014 33 2035.20220002137 70 15 0 3DFACE 8 gearbox_half 10 -42.878971522786 20 -116.789200000014 30 2035.20220002137 11 -16.4089950656911 21 -116.789200000014 31 1719.8874193002 12 -42.0550728426191 22 -116.789200000014 32 2026.83692290816 13 -42.0550728426191 23 -116.789200000014 33 2026.83692290816 70 3 0 3DFACE 8 gearbox_half 10 -42.0550728426191 20 -116.789200000014 30 2026.83692290816 11 -16.4089950656911 21 -116.789200000014 31 1719.8874193002 12 -8.36518773617931 22 -116.789200000014 32 1722.32746722226 13 -8.36518773617931 23 -116.789200000014 33 1722.32746722226 70 13 0 3DFACE 8 gearbox_half 10 -42.0550728426191 20 -116.789200000014 30 2026.83692290816 11 -8.36518773617931 21 -116.789200000014 31 1722.32746722226 12 8.98258536075502e-05 22 -116.789200000014 32 1723.15136134553 13 8.98258536075502e-05 23 -116.789200000014 33 1723.15136134553 70 13 0 3DFACE 8 gearbox_half 10 -42.0550728426191 20 -116.789200000014 30 2026.83692290816 11 8.98258536075502e-05 21 -116.789200000014 31 1723.15136134553 12 -39.6150205387958 22 -116.789200000014 32 2018.79311690784 13 -39.6150205387958 23 -116.789200000014 33 2018.79311690784 70 3 0 3DFACE 8 gearbox_half 10 -39.6150205387958 20 -116.789200000014 30 2018.79311690784 11 8.98258536075502e-05 21 -116.789200000014 31 1723.15136134553 12 -35.652584452955 22 -116.789200000014 32 2011.379900974 13 -35.652584452955 23 -116.789200000014 33 2011.379900974 70 3 0 3DFACE 8 gearbox_half 10 -35.652584452955 20 -116.789200000014 30 2011.379900974 11 8.98258536075502e-05 21 -116.789200000014 31 1723.15136134553 12 -30.3200387817157 22 -116.789200000014 32 2004.88216083759 13 -30.3200387817157 23 -116.789200000014 33 2004.88216083759 70 3 0 3DFACE 8 gearbox_half 10 -30.3200387817157 20 -116.789200000014 30 2004.88216083759 11 8.98258536075502e-05 21 -116.789200000014 31 1723.15136134553 12 -23.8223102646976 22 -116.789200000014 32 1999.54960100809 13 -23.8223102646976 23 -116.789200000014 33 1999.54960100809 70 3 0 3DFACE 8 gearbox_half 10 -23.8223102646976 20 -116.789200000014 30 1999.54960100809 11 8.98258536075502e-05 21 -116.789200000014 31 1723.15136134553 12 -16.4091029648416 22 -116.789200000014 32 1995.5871487692 13 -16.4091029648416 23 -116.789200000014 33 1995.5871487692 70 3 0 3DFACE 8 gearbox_half 10 -16.4091029648416 20 -116.789200000014 30 1995.5871487692 11 8.98258536075502e-05 21 -116.789200000014 31 1723.15136134553 12 -8.36530228130657 22 -116.789200000014 32 1993.1470789383 13 -8.36530228130657 23 -116.789200000014 33 1993.1470789383 70 3 0 3DFACE 8 gearbox_half 10 -8.36530228130657 20 -116.789200000014 30 1993.1470789383 11 8.98258536075502e-05 21 -116.789200000014 31 1723.15136134553 12 -2.69633454074381e-05 22 -116.789200000014 32 1992.32316203057 13 -2.69633454074381e-05 23 -116.789200000014 33 1992.32316203057 70 3 0 3DFACE 8 gearbox_half 10 -93.4313636055058 20 -116.789200000014 30 2549.07468002137 11 -42.878971522786 21 -116.789200000014 31 2035.20220002137 12 -42.0550546150653 22 -116.789200000014 32 2043.56747533934 13 -42.0550546150653 23 -116.789200000014 33 2043.56747533934 70 13 0 3DFACE 8 gearbox_half 10 -93.4313636055058 20 -116.789200000014 30 2549.07468002137 11 -42.0550546150653 21 -116.789200000014 31 2043.56747533934 12 -39.6149847841629 22 -116.789200000014 32 2051.61127602287 13 -39.6149847841629 23 -116.789200000014 33 2051.61127602287 70 13 0 3DFACE 8 gearbox_half 10 -93.4313636055058 20 -116.789200000014 30 2549.07468002137 11 -39.6149847841629 21 -116.789200000014 31 2051.61127602287 12 -35.6525325452735 22 -116.789200000014 32 2059.02448332273 13 -35.6525325452735 23 -116.789200000014 33 2059.02448332273 70 13 0 3DFACE 8 gearbox_half 10 -93.4313636055058 20 -116.789200000014 30 2549.07468002137 11 -35.6525325452735 21 -116.789200000014 31 2059.02448332273 12 -30.3199727157687 22 -116.789200000014 32 2065.52221183974 13 -30.3199727157687 23 -116.789200000014 33 2065.52221183974 70 13 0 3DFACE 8 gearbox_half 10 -93.4313636055058 20 -116.789200000014 30 2549.07468002137 11 -30.3199727157687 21 -116.789200000014 31 2065.52221183974 12 -23.8222325793624 22 -116.789200000014 32 2070.85475751098 13 -23.8222325793624 23 -116.789200000014 33 2070.85475751098 70 13 0 3DFACE 8 gearbox_half 10 -93.4313636055058 20 -116.789200000014 30 2549.07468002137 11 -23.8222325793624 21 -116.789200000014 31 2070.85475751098 12 -16.4090166455219 22 -116.789200000014 32 2074.81719359682 13 -16.4090166455219 23 -116.789200000014 33 2074.81719359682 70 13 0 3DFACE 8 gearbox_half 10 -93.4313636055058 20 -116.789200000014 30 2549.07468002137 11 -16.4090166455219 21 -116.789200000014 31 2074.81719359682 12 -8.36521064520558 22 -116.789200000014 32 2077.25724590065 13 -8.36521064520558 23 -116.789200000014 33 2077.25724590065 70 13 0 3DFACE 8 gearbox_half 10 -93.4313636055058 20 -116.789200000014 30 2549.07468002137 11 -8.36521064520558 21 -116.789200000014 31 2077.25724590065 12 6.64680129382589e-05 22 -116.789200000014 32 2078.08114458081 13 6.64680129382589e-05 23 -116.789200000014 33 2078.08114458081 70 13 0 3DFACE 8 gearbox_half 10 -93.4313636055058 20 -116.789200000014 30 2549.07468002137 11 6.64680129382589e-05 21 -116.789200000014 31 2078.08114458081 12 -39.6150026535464 22 -116.789200000014 32 2409.40261154673 13 -39.6150026535464 23 -116.789200000014 33 2409.40261154673 70 15 0 3DFACE 8 gearbox_half 10 -39.6150026535464 20 -116.789200000014 30 2409.40261154673 11 6.64680129382589e-05 21 -116.789200000014 31 2078.08114458081 12 -35.6525584815506 22 -116.789200000014 32 2401.98939991186 13 -35.6525584815506 23 -116.789200000014 33 2401.98939991186 70 3 0 3DFACE 8 gearbox_half 10 -35.6525584815506 20 -116.789200000014 30 2401.98939991186 11 6.64680129382589e-05 21 -116.789200000014 31 2078.08114458081 12 -30.3200057182179 22 -116.789200000014 32 2395.49166556936 13 -30.3200057182179 23 -116.789200000014 33 2395.49166556936 70 3 0 3DFACE 8 gearbox_half 10 -30.3200057182179 20 -116.789200000014 30 2395.49166556936 11 6.64680129382589e-05 21 -116.789200000014 31 2078.08114458081 12 -23.8222713757131 22 -116.789200000014 32 2390.15911280603 13 -23.8222713757131 23 -116.789200000014 33 2390.15911280603 70 3 0 3DFACE 8 gearbox_half 10 -23.8222713757131 20 -116.789200000014 30 2390.15911280603 11 6.64680129382589e-05 21 -116.789200000014 31 2078.08114458081 12 -16.4090597408473 22 -116.789200000014 32 2386.19666863403 13 -16.4090597408473 23 -116.789200000014 33 2386.19666863403 70 3 0 3DFACE 8 gearbox_half 10 -16.4090597408473 20 -116.789200000014 30 2386.19666863403 11 6.64680129382589e-05 21 -116.789200000014 31 2078.08114458081 12 -8.36525637937127 22 -116.789200000014 32 2383.75660756074 13 -8.36525637937127 23 -116.789200000014 33 2383.75660756074 70 3 0 3DFACE 8 gearbox_half 10 -8.36525637937127 20 -116.789200000014 30 2383.75660756074 11 6.64680129382589e-05 21 -116.789200000014 31 2078.08114458081 12 1.98565501612791e-05 22 -116.789200000014 32 2382.93269976479 13 1.98565501612791e-05 23 -116.789200000014 33 2382.93269976479 70 3 0 3DFACE 8 gearbox_half 10 -93.4313636055058 20 -116.789200000014 30 2549.07468002137 11 -39.6150026535464 21 -116.789200000014 31 2409.40261154673 12 -42.0550637268397 22 -116.789200000014 32 2417.44641490821 13 -42.0550637268397 23 -116.789200000014 33 2417.44641490821 70 13 0 3DFACE 8 gearbox_half 10 -93.4313636055058 20 -116.789200000014 30 2549.07468002137 11 -42.0550637268397 21 -116.789200000014 31 2417.44641490821 12 -42.878971522786 22 -116.789200000014 32 2425.81169114413 13 -42.878971522786 23 -116.789200000014 33 2425.81169114413 70 13 0 3DFACE 8 gearbox_half 10 -93.4313636055058 20 -116.789200000014 30 2549.07468002137 11 -42.878971522786 21 -116.789200000014 31 2425.81169114413 12 -42.0550637268397 22 -116.789200000014 32 2434.17696738005 13 -42.0550637268397 23 -116.789200000014 33 2434.17696738005 70 13 0 3DFACE 8 gearbox_half 10 -93.4313636055058 20 -116.789200000014 30 2549.07468002137 11 -42.0550637268397 21 -116.789200000014 31 2434.17696738005 12 -39.6150026535464 22 -116.789200000014 32 2442.22077074152 13 -39.6150026535464 23 -116.789200000014 33 2442.22077074152 70 13 0 3DFACE 8 gearbox_half 10 -93.4313636055058 20 -116.789200000014 30 2549.07468002137 11 -39.6150026535464 21 -116.789200000014 31 2442.22077074152 12 -35.6525584815506 22 -116.789200000014 32 2449.63398237639 13 -35.6525584815506 23 -116.789200000014 33 2449.63398237639 70 13 0 3DFACE 8 gearbox_half 10 -93.4313636055058 20 -116.789200000014 30 2549.07468002137 11 -35.6525584815506 21 -116.789200000014 31 2449.63398237639 12 -30.3200057182179 22 -116.789200000014 32 2456.13171671889 13 -30.3200057182179 23 -116.789200000014 33 2456.13171671889 70 13 0 3DFACE 8 gearbox_half 10 -93.4313636055058 20 -116.789200000014 30 2549.07468002137 11 -30.3200057182179 21 -116.789200000014 31 2456.13171671889 12 -23.8222713757131 22 -116.789200000014 32 2461.46426948223 13 -23.8222713757131 23 -116.789200000014 33 2461.46426948223 70 13 0 3DFACE 8 gearbox_half 10 -93.4313636055058 20 -116.789200000014 30 2549.07468002137 11 -23.8222713757131 21 -116.789200000014 31 2461.46426948223 12 -16.4090597408473 22 -116.789200000014 32 2465.42671365422 13 -16.4090597408473 23 -116.789200000014 33 2465.42671365422 70 13 0 3DFACE 8 gearbox_half 10 -93.4313636055058 20 -116.789200000014 30 2549.07468002137 11 -16.4090597408473 21 -116.789200000014 31 2465.42671365422 12 -8.36525637937127 22 -116.789200000014 32 2467.86677472752 13 -8.36525637937127 23 -116.789200000014 33 2467.86677472752 70 13 0 3DFACE 8 gearbox_half 10 -93.4313636055058 20 -116.789200000014 30 2549.07468002137 11 -8.36525637937127 21 -116.789200000014 31 2467.86677472752 12 1.98565501612791e-05 22 -116.789200000014 32 2468.69068252346 13 1.98565501612791e-05 23 -116.789200000014 33 2468.69068252346 70 13 0 3DFACE 8 gearbox_half 10 -93.4313636055058 20 -116.789200000014 30 2549.07468002137 11 1.98565501612791e-05 21 -116.789200000014 31 2468.69068252346 12 93.4313563944944 22 -116.789200000014 32 2549.07468002137 13 93.4313563944944 23 -116.789200000014 33 2549.07468002137 70 3 0 3DFACE 8 gearbox_half 10 -23.8222131580276 20 -70.0735200000139 30 1715.92498725262 11 -30.3199561992811 21 -116.789200000014 31 1710.59244512095 12 -30.3199561992811 22 -70.0735200000139 32 1710.59244512095 13 -30.3199561992811 23 -70.0735200000139 33 1710.59244512095 70 1 0 3DFACE 8 gearbox_half 10 -30.3199561992811 20 -116.789200000014 30 1710.59244512095 11 -23.8222131580276 21 -70.0735200000139 31 1715.92498725262 12 -23.8222131580276 22 -116.789200000014 32 1715.92498725262 13 -23.8222131580276 23 -116.789200000014 33 1715.92498725262 70 1 0 3DFACE 8 gearbox_half 10 -42.0550637268397 20 -116.789200000014 30 2417.44641490821 11 -39.615002653547 21 -741.887719751186 31 2409.40261154673 12 -42.0550637268399 22 -741.902149593115 32 2417.44641490821 13 -42.0550637268399 23 -741.902149593115 33 2417.44641490821 70 1 0 3DFACE 8 gearbox_half 10 -39.615002653547 20 -741.887719751186 30 2409.40261154673 11 -42.0550637268397 21 -116.789200000014 31 2417.44641490821 12 -39.6150026535464 22 -116.789200000014 32 2409.40261154673 13 -39.6150026535464 23 -116.789200000014 33 2409.40261154673 70 1 0 3DFACE 8 gearbox_half 10 -39.3611250839466 20 -835.428664280087 30 2408.9276400213 11 39.3611647970476 21 -741.420676682108 31 2408.9276400213 12 -39.3611250839469 22 -741.886218389914 32 2408.9276400213 13 -39.3611250839469 23 -741.886218389914 33 2408.9276400213 70 1 0 3DFACE 8 gearbox_half 10 39.3611647970476 20 -741.420676682108 30 2408.9276400213 11 -39.3611250839466 21 -835.428664280087 31 2408.9276400213 12 39.3611647970471 22 -835.428664280087 32 2408.9276400213 13 39.3611647970471 23 -835.428664280087 33 2408.9276400213 70 1 0 3DFACE 8 gearbox_half 10 8.36529609247169 20 -116.789200000014 30 2383.75660756074 11 1.98565501612791e-05 21 -858.151437401893 31 2382.93269976479 12 1.98565501612791e-05 22 -116.789200000014 32 2382.93269976479 13 1.98565501612791e-05 23 -116.789200000014 33 2382.93269976479 70 1 0 3DFACE 8 gearbox_half 10 1.98565501612791e-05 20 -858.151437401893 30 2382.93269976479 11 8.36529609247169 21 -116.789200000014 31 2383.75660756074 12 8.36529609247169 22 -857.431240712237 32 2383.75660756074 13 8.36529609247169 23 -857.431240712237 33 2383.75660756074 70 1 0 3DFACE 8 gearbox_half 10 -717.191404282444 20 -70.0735200000139 30 1614.76108002137 11 -758.547422188618 21 -116.789200000014 31 1522.84685844505 12 -712.59031140046 22 -116.789200000014 32 1614.76108002137 13 -712.59031140046 23 -116.789200000014 33 1614.76108002137 70 1 0 3DFACE 8 gearbox_half 10 -758.547422188618 20 -116.789200000014 30 1522.84685844505 11 -717.191404282444 21 -70.0735200000139 31 1614.76108002137 12 -763.148515070603 22 -70.0735200000139 32 1522.84685844505 13 -763.148515070603 23 -70.0735200000139 33 1522.84685844505 70 1 0 3DFACE 8 gearbox_half 10 -93.4313636055058 20 -70.0735200000139 30 1614.76108002137 11 -8.36532519033293 21 -70.0735200000139 31 1638.2173002599 12 -5.03211860767294e-05 22 -70.0735200000139 32 1637.3933787953 13 -5.03211860767294e-05 23 -70.0735200000139 33 1637.3933787953 70 13 0 3DFACE 8 gearbox_half 10 -8.36532519033293 20 -70.0735200000139 30 1638.2173002599 11 -93.4313636055058 21 -70.0735200000139 31 1614.76108002137 12 -16.4091245446726 22 -70.0735200000139 32 1640.65737447258 13 -16.4091245446726 23 -70.0735200000139 33 1640.65737447258 70 3 0 3DFACE 8 gearbox_half 10 -16.4091245446726 20 -70.0735200000139 30 1640.65737447258 11 -93.4313636055058 21 -70.0735200000139 31 1614.76108002137 12 -23.8223296860324 22 -70.0735200000139 32 1644.61983074973 13 -23.8223296860324 23 -70.0735200000139 33 1644.61983074973 70 3 0 3DFACE 8 gearbox_half 10 -23.8223296860324 20 -70.0735200000139 30 1644.61983074973 11 -93.4313636055058 21 -70.0735200000139 31 1614.76108002137 12 -30.3200552982032 22 -70.0735200000139 32 1649.9523941188 13 -30.3200552982032 23 -70.0735200000139 33 1649.9523941188 70 3 0 3DFACE 8 gearbox_half 10 -30.3200552982032 20 -70.0735200000139 30 1649.9523941188 11 -93.4313636055058 21 -70.0735200000139 31 1614.76108002137 12 -35.652597429876 22 -70.0735200000139 32 1656.45013716005 13 -35.652597429876 23 -70.0735200000139 33 1656.45013716005 70 3 0 3DFACE 8 gearbox_half 10 -35.652597429876 20 -70.0735200000139 30 1656.45013716005 11 -93.4313636055058 21 -70.0735200000139 31 1614.76108002137 12 -39.6150294774544 22 -70.0735200000139 32 1663.86335525239 13 -39.6150294774544 23 -70.0735200000139 33 1663.86335525239 70 3 0 3DFACE 8 gearbox_half 10 -39.6150294774544 20 -70.0735200000139 30 1663.86335525239 11 -93.4313636055058 21 -70.0735200000139 31 1614.76108002137 12 -42.0550773995078 22 -70.0735200000139 32 1671.9071625819 13 -42.0550773995078 23 -70.0735200000139 33 1671.9071625819 70 3 0 3DFACE 8 gearbox_half 10 -42.0550773995078 20 -70.0735200000139 30 1671.9071625819 11 -93.4313636055058 21 -70.0735200000139 31 1614.76108002137 12 -42.878971522786 22 -70.0735200000139 32 1680.27244014393 13 -42.878971522786 23 -70.0735200000139 33 1680.27244014393 70 3 0 3DFACE 8 gearbox_half 10 -42.878971522786 20 -70.0735200000139 30 1680.27244014393 11 -93.4313636055058 21 -70.0735200000139 31 1614.76108002137 12 -93.4313636055058 22 -70.0735200000139 32 2549.07468002137 13 -93.4313636055058 23 -70.0735200000139 33 2549.07468002137 70 13 0 3DFACE 8 gearbox_half 10 -42.878971522786 20 -70.0735200000139 30 1680.27244014393 11 -93.4313636055058 21 -70.0735200000139 31 2549.07468002137 12 -42.0550500581767 22 -70.0735200000139 32 1688.63771501308 13 -42.0550500581767 23 -70.0735200000139 33 1688.63771501308 70 3 0 3DFACE 8 gearbox_half 10 -42.0550500581767 20 -70.0735200000139 30 1688.63771501308 11 -93.4313636055058 21 -70.0735200000139 31 2549.07468002137 12 -39.6149758455043 22 -70.0735200000139 32 1696.68151436742 13 -39.6149758455043 23 -70.0735200000139 33 1696.68151436742 70 3 0 3DFACE 8 gearbox_half 10 -39.6149758455043 20 -70.0735200000139 30 1696.68151436742 11 -93.4313636055058 21 -70.0735200000139 31 2549.07468002137 12 -35.6525195683525 22 -70.0735200000139 32 1704.09471950878 13 -35.6525195683525 23 -70.0735200000139 33 1704.09471950878 70 3 0 3DFACE 8 gearbox_half 10 -35.6525195683525 20 -70.0735200000139 30 1704.09471950878 11 -93.4313636055058 21 -70.0735200000139 31 2549.07468002137 12 -30.3199561992811 22 -70.0735200000139 32 1710.59244512095 13 -30.3199561992811 23 -70.0735200000139 33 1710.59244512095 70 3 0 3DFACE 8 gearbox_half 10 -30.3199561992811 20 -70.0735200000139 30 1710.59244512095 11 -93.4313636055058 21 -70.0735200000139 31 2549.07468002137 12 -23.8222131580276 22 -70.0735200000139 32 1715.92498725262 13 -23.8222131580276 23 -70.0735200000139 33 1715.92498725262 70 3 0 3DFACE 8 gearbox_half 10 -23.8222131580276 20 -70.0735200000139 30 1715.92498725262 11 -93.4313636055058 21 -70.0735200000139 31 2549.07468002137 12 -16.4089950656911 22 -70.0735200000139 32 1719.8874193002 13 -16.4089950656911 23 -70.0735200000139 33 1719.8874193002 70 3 0 3DFACE 8 gearbox_half 10 -16.4089950656911 20 -70.0735200000139 30 1719.8874193002 11 -93.4313636055058 21 -70.0735200000139 31 2549.07468002137 12 -42.878971522786 22 -70.0735200000139 32 2035.20220002137 13 -42.878971522786 23 -70.0735200000139 33 2035.20220002137 70 15 0 3DFACE 8 gearbox_half 10 -16.4089950656911 20 -70.0735200000139 30 1719.8874193002 11 -42.878971522786 21 -70.0735200000139 31 2035.20220002137 12 -42.0550728426191 22 -70.0735200000139 32 2026.83692290816 13 -42.0550728426191 23 -70.0735200000139 33 2026.83692290816 70 13 0 3DFACE 8 gearbox_half 10 -16.4089950656911 20 -70.0735200000139 30 1719.8874193002 11 -42.0550728426191 21 -70.0735200000139 31 2026.83692290816 12 -8.36518773617931 22 -70.0735200000139 32 1722.32746722226 13 -8.36518773617931 23 -70.0735200000139 33 1722.32746722226 70 3 0 3DFACE 8 gearbox_half 10 -8.36518773617931 20 -70.0735200000139 30 1722.32746722226 11 -42.0550728426191 21 -70.0735200000139 31 2026.83692290816 12 8.98258536075502e-05 22 -70.0735200000139 32 1723.15136134553 13 8.98258536075502e-05 23 -70.0735200000139 33 1723.15136134553 70 3 0 3DFACE 8 gearbox_half 10 8.98258536075502e-05 20 -70.0735200000139 30 1723.15136134553 11 -42.0550728426191 21 -70.0735200000139 31 2026.83692290816 12 -39.6150205387958 22 -70.0735200000139 32 2018.79311690784 13 -39.6150205387958 23 -70.0735200000139 33 2018.79311690784 70 13 0 3DFACE 8 gearbox_half 10 8.98258536075502e-05 20 -70.0735200000139 30 1723.15136134553 11 -39.6150205387958 21 -70.0735200000139 31 2018.79311690784 12 -35.652584452955 22 -70.0735200000139 32 2011.379900974 13 -35.652584452955 23 -70.0735200000139 33 2011.379900974 70 13 0 3DFACE 8 gearbox_half 10 8.98258536075502e-05 20 -70.0735200000139 30 1723.15136134553 11 -35.652584452955 21 -70.0735200000139 31 2011.379900974 12 -30.3200387817157 22 -70.0735200000139 32 2004.88216083759 13 -30.3200387817157 23 -70.0735200000139 33 2004.88216083759 70 13 0 3DFACE 8 gearbox_half 10 8.98258536075502e-05 20 -70.0735200000139 30 1723.15136134553 11 -30.3200387817157 21 -70.0735200000139 31 2004.88216083759 12 -23.8223102646976 22 -70.0735200000139 32 1999.54960100809 13 -23.8223102646976 23 -70.0735200000139 33 1999.54960100809 70 13 0 3DFACE 8 gearbox_half 10 8.98258536075502e-05 20 -70.0735200000139 30 1723.15136134553 11 -23.8223102646976 21 -70.0735200000139 31 1999.54960100809 12 -16.4091029648416 22 -70.0735200000139 32 1995.5871487692 13 -16.4091029648416 23 -70.0735200000139 33 1995.5871487692 70 13 0 3DFACE 8 gearbox_half 10 8.98258536075502e-05 20 -70.0735200000139 30 1723.15136134553 11 -16.4091029648416 21 -70.0735200000139 31 1995.5871487692 12 -8.36530228130657 22 -70.0735200000139 32 1993.1470789383 13 -8.36530228130657 23 -70.0735200000139 33 1993.1470789383 70 13 0 3DFACE 8 gearbox_half 10 8.98258536075502e-05 20 -70.0735200000139 30 1723.15136134553 11 -8.36530228130657 21 -70.0735200000139 31 1993.1470789383 12 -2.69633454074381e-05 22 -70.0735200000139 32 1992.32316203057 13 -2.69633454074381e-05 23 -70.0735200000139 33 1992.32316203057 70 13 0 3DFACE 8 gearbox_half 10 -42.878971522786 20 -70.0735200000139 30 2035.20220002137 11 -93.4313636055058 21 -70.0735200000139 31 2549.07468002137 12 -42.0550546150653 22 -70.0735200000139 32 2043.56747533934 13 -42.0550546150653 23 -70.0735200000139 33 2043.56747533934 70 3 0 3DFACE 8 gearbox_half 10 -42.0550546150653 20 -70.0735200000139 30 2043.56747533934 11 -93.4313636055058 21 -70.0735200000139 31 2549.07468002137 12 -39.6149847841629 22 -70.0735200000139 32 2051.61127602287 13 -39.6149847841629 23 -70.0735200000139 33 2051.61127602287 70 3 0 3DFACE 8 gearbox_half 10 -39.6149847841629 20 -70.0735200000139 30 2051.61127602287 11 -93.4313636055058 21 -70.0735200000139 31 2549.07468002137 12 -35.6525325452735 22 -70.0735200000139 32 2059.02448332273 13 -35.6525325452735 23 -70.0735200000139 33 2059.02448332273 70 3 0 3DFACE 8 gearbox_half 10 -35.6525325452735 20 -70.0735200000139 30 2059.02448332273 11 -93.4313636055058 21 -70.0735200000139 31 2549.07468002137 12 -30.3199727157687 22 -70.0735200000139 32 2065.52221183974 13 -30.3199727157687 23 -70.0735200000139 33 2065.52221183974 70 3 0 3DFACE 8 gearbox_half 10 -30.3199727157687 20 -70.0735200000139 30 2065.52221183974 11 -93.4313636055058 21 -70.0735200000139 31 2549.07468002137 12 -23.8222325793624 22 -70.0735200000139 32 2070.85475751098 13 -23.8222325793624 23 -70.0735200000139 33 2070.85475751098 70 3 0 3DFACE 8 gearbox_half 10 -23.8222325793624 20 -70.0735200000139 30 2070.85475751098 11 -93.4313636055058 21 -70.0735200000139 31 2549.07468002137 12 -16.4090166455219 22 -70.0735200000139 32 2074.81719359682 13 -16.4090166455219 23 -70.0735200000139 33 2074.81719359682 70 3 0 3DFACE 8 gearbox_half 10 -16.4090166455219 20 -70.0735200000139 30 2074.81719359682 11 -93.4313636055058 21 -70.0735200000139 31 2549.07468002137 12 -8.36521064520558 22 -70.0735200000139 32 2077.25724590065 13 -8.36521064520558 23 -70.0735200000139 33 2077.25724590065 70 3 0 3DFACE 8 gearbox_half 10 -8.36521064520558 20 -70.0735200000139 30 2077.25724590065 11 -93.4313636055058 21 -70.0735200000139 31 2549.07468002137 12 6.64680129382589e-05 22 -70.0735200000139 32 2078.08114458081 13 6.64680129382589e-05 23 -70.0735200000139 33 2078.08114458081 70 3 0 3DFACE 8 gearbox_half 10 6.64680129382589e-05 20 -70.0735200000139 30 2078.08114458081 11 -93.4313636055058 21 -70.0735200000139 31 2549.07468002137 12 -39.6150026535464 22 -70.0735200000139 32 2409.40261154673 13 -39.6150026535464 23 -70.0735200000139 33 2409.40261154673 70 15 0 3DFACE 8 gearbox_half 10 6.64680129382589e-05 20 -70.0735200000139 30 2078.08114458081 11 -39.6150026535464 21 -70.0735200000139 31 2409.40261154673 12 -35.6525584815506 22 -70.0735200000139 32 2401.98939991186 13 -35.6525584815506 23 -70.0735200000139 33 2401.98939991186 70 13 0 3DFACE 8 gearbox_half 10 6.64680129382589e-05 20 -70.0735200000139 30 2078.08114458081 11 -35.6525584815506 21 -70.0735200000139 31 2401.98939991186 12 -30.3200057182179 22 -70.0735200000139 32 2395.49166556936 13 -30.3200057182179 23 -70.0735200000139 33 2395.49166556936 70 13 0 3DFACE 8 gearbox_half 10 6.64680129382589e-05 20 -70.0735200000139 30 2078.08114458081 11 -30.3200057182179 21 -70.0735200000139 31 2395.49166556936 12 -23.8222713757131 22 -70.0735200000139 32 2390.15911280603 13 -23.8222713757131 23 -70.0735200000139 33 2390.15911280603 70 13 0 3DFACE 8 gearbox_half 10 6.64680129382589e-05 20 -70.0735200000139 30 2078.08114458081 11 -23.8222713757131 21 -70.0735200000139 31 2390.15911280603 12 -16.4090597408473 22 -70.0735200000139 32 2386.19666863403 13 -16.4090597408473 23 -70.0735200000139 33 2386.19666863403 70 13 0 3DFACE 8 gearbox_half 10 6.64680129382589e-05 20 -70.0735200000139 30 2078.08114458081 11 -16.4090597408473 21 -70.0735200000139 31 2386.19666863403 12 -8.36525637937127 22 -70.0735200000139 32 2383.75660756074 13 -8.36525637937127 23 -70.0735200000139 33 2383.75660756074 70 13 0 3DFACE 8 gearbox_half 10 6.64680129382589e-05 20 -70.0735200000139 30 2078.08114458081 11 -8.36525637937127 21 -70.0735200000139 31 2383.75660756074 12 1.98565501612791e-05 22 -70.0735200000139 32 2382.93269976479 13 1.98565501612791e-05 23 -70.0735200000139 33 2382.93269976479 70 13 0 3DFACE 8 gearbox_half 10 -39.6150026535464 20 -70.0735200000139 30 2409.40261154673 11 -93.4313636055058 21 -70.0735200000139 31 2549.07468002137 12 -42.0550637268397 22 -70.0735200000139 32 2417.44641490821 13 -42.0550637268397 23 -70.0735200000139 33 2417.44641490821 70 3 0 3DFACE 8 gearbox_half 10 -42.0550637268397 20 -70.0735200000139 30 2417.44641490821 11 -93.4313636055058 21 -70.0735200000139 31 2549.07468002137 12 -42.878971522786 22 -70.0735200000139 32 2425.81169114413 13 -42.878971522786 23 -70.0735200000139 33 2425.81169114413 70 3 0 3DFACE 8 gearbox_half 10 -42.878971522786 20 -70.0735200000139 30 2425.81169114413 11 -93.4313636055058 21 -70.0735200000139 31 2549.07468002137 12 -42.0550637268397 22 -70.0735200000139 32 2434.17696738005 13 -42.0550637268397 23 -70.0735200000139 33 2434.17696738005 70 3 0 3DFACE 8 gearbox_half 10 -42.0550637268397 20 -70.0735200000139 30 2434.17696738005 11 -93.4313636055058 21 -70.0735200000139 31 2549.07468002137 12 -39.6150026535464 22 -70.0735200000139 32 2442.22077074152 13 -39.6150026535464 23 -70.0735200000139 33 2442.22077074152 70 3 0 3DFACE 8 gearbox_half 10 -39.6150026535464 20 -70.0735200000139 30 2442.22077074152 11 -93.4313636055058 21 -70.0735200000139 31 2549.07468002137 12 -35.6525584815506 22 -70.0735200000139 32 2449.63398237639 13 -35.6525584815506 23 -70.0735200000139 33 2449.63398237639 70 3 0 3DFACE 8 gearbox_half 10 -35.6525584815506 20 -70.0735200000139 30 2449.63398237639 11 -93.4313636055058 21 -70.0735200000139 31 2549.07468002137 12 -30.3200057182179 22 -70.0735200000139 32 2456.13171671889 13 -30.3200057182179 23 -70.0735200000139 33 2456.13171671889 70 3 0 3DFACE 8 gearbox_half 10 -30.3200057182179 20 -70.0735200000139 30 2456.13171671889 11 -93.4313636055058 21 -70.0735200000139 31 2549.07468002137 12 -23.8222713757131 22 -70.0735200000139 32 2461.46426948223 13 -23.8222713757131 23 -70.0735200000139 33 2461.46426948223 70 3 0 3DFACE 8 gearbox_half 10 -23.8222713757131 20 -70.0735200000139 30 2461.46426948223 11 -93.4313636055058 21 -70.0735200000139 31 2549.07468002137 12 -16.4090597408473 22 -70.0735200000139 32 2465.42671365422 13 -16.4090597408473 23 -70.0735200000139 33 2465.42671365422 70 3 0 3DFACE 8 gearbox_half 10 -16.4090597408473 20 -70.0735200000139 30 2465.42671365422 11 -93.4313636055058 21 -70.0735200000139 31 2549.07468002137 12 -8.36525637937127 22 -70.0735200000139 32 2467.86677472752 13 -8.36525637937127 23 -70.0735200000139 33 2467.86677472752 70 3 0 3DFACE 8 gearbox_half 10 -8.36525637937127 20 -70.0735200000139 30 2467.86677472752 11 -93.4313636055058 21 -70.0735200000139 31 2549.07468002137 12 1.98565501612791e-05 22 -70.0735200000139 32 2468.69068252346 13 1.98565501612791e-05 23 -70.0735200000139 33 2468.69068252346 70 3 0 3DFACE 8 gearbox_half 10 -717.191404282444 20 -70.0735200000139 30 1614.76108002137 11 763.148515070603 21 -70.0735200000139 31 1522.84685844505 12 -763.148515070603 22 -70.0735200000139 32 1522.84685844505 13 -763.148515070603 23 -70.0735200000139 33 1522.84685844505 70 1 0 3DFACE 8 gearbox_half 10 763.148515070603 20 -70.0735200000139 30 1522.84685844505 11 -717.191404282444 21 -70.0735200000139 31 1614.76108002137 12 717.537998926308 22 -70.0735200000139 32 1614.06789073365 13 717.537998926308 23 -70.0735200000139 33 1614.06789073365 70 3 0 3DFACE 8 gearbox_half 10 717.537998926308 20 -70.0735200000139 30 1614.06789073365 11 -717.191404282444 21 -70.0735200000139 31 1614.76108002137 12 93.4322738363532 22 -70.0735200000139 32 1614.76107890595 13 93.4322738363532 23 -70.0735200000139 33 1614.76107890595 70 3 0 3DFACE 8 gearbox_half 10 93.4322738363532 20 -70.0735200000139 30 1614.76107890595 11 -717.191404282444 21 -70.0735200000139 31 1614.76108002137 12 -93.4313636055058 22 -70.0735200000139 32 1614.76108002137 13 -93.4313636055058 23 -70.0735200000139 33 1614.76108002137 70 13 0 3DFACE 8 gearbox_half 10 93.4322738363532 20 -70.0735200000139 30 1614.76107890595 11 -93.4313636055058 21 -70.0735200000139 31 1614.76108002137 12 8.36522724084684 22 -70.0735200000139 32 1638.21727291857 13 8.36522724084684 23 -70.0735200000139 33 1638.21727291857 70 15 0 3DFACE 8 gearbox_half 10 93.4322738363532 20 -70.0735200000139 30 1614.76107890595 11 8.36522724084684 21 -70.0735200000139 31 1638.21727291857 12 16.4090345703586 22 -70.0735200000139 32 1640.65732084063 13 16.4090345703586 23 -70.0735200000139 33 1640.65732084063 70 13 0 3DFACE 8 gearbox_half 10 93.4322738363532 20 -70.0735200000139 30 1614.76107890595 11 16.4090345703586 21 -70.0735200000139 31 1640.65732084063 12 23.8222526626951 22 -70.0735200000139 32 1644.61975288821 13 23.8222526626951 23 -70.0735200000139 33 1644.61975288821 70 13 0 3DFACE 8 gearbox_half 10 93.4322738363532 20 -70.0735200000139 30 1614.76107890595 11 23.8222526626951 21 -70.0735200000139 31 1644.61975288821 12 30.3199957039486 22 -70.0735200000139 32 1649.95229501988 13 30.3199957039486 23 -70.0735200000139 33 1649.95229501988 70 13 0 3DFACE 8 gearbox_half 10 93.4322738363532 20 -70.0735200000139 30 1614.76107890595 11 30.3199957039486 21 -70.0735200000139 31 1649.95229501988 12 35.65255907302 22 -70.0735200000139 32 1656.45002063205 13 35.65255907302 23 -70.0735200000139 33 1656.45002063205 70 13 0 3DFACE 8 gearbox_half 10 93.4322738363532 20 -70.0735200000139 30 1614.76107890595 11 35.65255907302 21 -70.0735200000139 31 1656.45002063205 12 39.6150153501718 22 -70.0735200000139 32 1663.86322577341 13 39.6150153501718 23 -70.0735200000139 33 1663.86322577341 70 13 0 3DFACE 8 gearbox_half 10 93.4322738363532 20 -70.0735200000139 30 1614.76107890595 11 39.6150153501718 21 -70.0735200000139 31 1663.86322577341 12 42.0550895628442 22 -70.0735200000139 32 1671.90702512775 13 42.0550895628442 23 -70.0735200000139 33 1671.90702512775 70 13 0 3DFACE 8 gearbox_half 10 93.4322738363532 20 -70.0735200000139 30 1614.76107890595 11 42.0550895628442 21 -70.0735200000139 31 1671.90702512775 12 42.8790110274535 22 -70.0735200000139 32 1680.2722999969 13 42.8790110274535 23 -70.0735200000139 33 1680.2722999969 70 13 0 3DFACE 8 gearbox_half 10 93.4322738363532 20 -70.0735200000139 30 1614.76107890595 11 42.8790110274535 21 -70.0735200000139 31 1680.2722999969 12 93.4313563944944 22 -70.0735200000139 32 2549.07468002137 13 93.4313563944944 23 -70.0735200000139 33 2549.07468002137 70 3 0 3DFACE 8 gearbox_half 10 8.36522724084684 20 -70.0735200000139 30 1638.21727291857 11 -93.4313636055058 21 -70.0735200000139 31 1614.76108002137 12 -5.03211860767294e-05 22 -70.0735200000139 32 1637.3933787953 13 -5.03211860767294e-05 23 -70.0735200000139 33 1637.3933787953 70 3 0 3DFACE 8 gearbox_half 10 93.4313563944944 20 -70.0735200000139 30 2549.07468002137 11 42.8790110274535 21 -70.0735200000139 31 1680.2722999969 12 42.0551169041753 22 -70.0735200000139 32 1688.63757755893 13 42.0551169041753 23 -70.0735200000139 33 1688.63757755893 70 13 0 3DFACE 8 gearbox_half 10 93.4313563944944 20 -70.0735200000139 30 2549.07468002137 11 42.0551169041753 21 -70.0735200000139 31 1688.63757755893 12 39.615068982122 22 -70.0735200000139 32 1696.68138488844 13 39.615068982122 23 -70.0735200000139 33 1696.68138488844 70 13 0 3DFACE 8 gearbox_half 10 93.4313563944944 20 -70.0735200000139 30 2549.07468002137 11 39.615068982122 21 -70.0735200000139 31 1696.68138488844 12 35.6526369345435 22 -70.0735200000139 32 1704.09460298078 13 35.6526369345435 23 -70.0735200000139 33 1704.09460298078 70 13 0 3DFACE 8 gearbox_half 10 93.4313563944944 20 -70.0735200000139 30 2549.07468002137 11 35.6526369345435 21 -70.0735200000139 31 1704.09460298078 12 30.3200948028707 22 -70.0735200000139 32 1710.59234602203 13 30.3200948028707 23 -70.0735200000139 33 1710.59234602203 70 13 0 3DFACE 8 gearbox_half 10 93.4313563944944 20 -70.0735200000139 30 2549.07468002137 11 30.3200948028707 21 -70.0735200000139 31 1710.59234602203 12 23.8223691906999 22 -70.0735200000139 32 1715.9249093911 13 23.8223691906999 23 -70.0735200000139 33 1715.9249093911 70 13 0 3DFACE 8 gearbox_half 10 93.4313563944944 20 -70.0735200000139 30 2549.07468002137 11 23.8223691906999 21 -70.0735200000139 31 1715.9249093911 12 16.4091640493401 22 -70.0735200000139 32 1719.88736566825 13 16.4091640493401 23 -70.0735200000139 33 1719.88736566825 70 13 0 3DFACE 8 gearbox_half 10 93.4313563944944 20 -70.0735200000139 30 2549.07468002137 11 16.4091640493401 21 -70.0735200000139 31 1719.88736566825 12 42.8790110274535 22 -70.0735200000139 32 2035.20210659002 13 42.8790110274535 23 -70.0735200000139 33 2035.20210659002 70 15 0 3DFACE 8 gearbox_half 10 42.8790110274535 20 -70.0735200000139 30 2035.20210659002 11 16.4091640493401 21 -70.0735200000139 31 1719.88736566825 12 42.0550941197328 22 -70.0735200000139 32 2026.83683127205 13 42.0550941197328 23 -70.0735200000139 33 2026.83683127205 70 3 0 3DFACE 8 gearbox_half 10 42.0550941197328 20 -70.0735200000139 30 2026.83683127205 11 16.4091640493401 21 -70.0735200000139 31 1719.88736566825 12 8.36536469500046 22 -70.0735200000139 32 1722.32743988093 13 8.36536469500046 23 -70.0735200000139 33 1722.32743988093 70 13 0 3DFACE 8 gearbox_half 10 42.0550941197328 20 -70.0735200000139 30 2026.83683127205 11 8.36536469500046 21 -70.0735200000139 31 1722.32743988093 12 8.98258536075502e-05 22 -70.0735200000139 32 1723.15136134553 13 8.98258536075502e-05 23 -70.0735200000139 33 1723.15136134553 70 13 0 3DFACE 8 gearbox_half 10 42.0550941197328 20 -70.0735200000139 30 2026.83683127205 11 8.98258536075502e-05 21 -70.0735200000139 31 1723.15136134553 12 39.6150242888304 22 -70.0735200000139 32 2018.79303058852 13 39.6150242888304 23 -70.0735200000139 33 2018.79303058852 70 3 0 3DFACE 8 gearbox_half 10 39.6150242888304 20 -70.0735200000139 30 2018.79303058852 11 8.98258536075502e-05 21 -70.0735200000139 31 1723.15136134553 12 35.652572049941 22 -70.0735200000139 32 2011.37982328866 13 35.652572049941 23 -70.0735200000139 33 2011.37982328866 70 3 0 3DFACE 8 gearbox_half 10 35.652572049941 20 -70.0735200000139 30 2011.37982328866 11 8.98258536075502e-05 21 -70.0735200000139 31 1723.15136134553 12 30.3200122204362 22 -70.0735200000139 32 2004.88209477165 13 30.3200122204362 23 -70.0735200000139 33 2004.88209477165 70 3 0 3DFACE 8 gearbox_half 10 30.3200122204362 20 -70.0735200000139 30 2004.88209477165 11 8.98258536075502e-05 21 -70.0735200000139 31 1723.15136134553 12 23.8222720840299 22 -70.0735200000139 32 1999.54954910041 13 23.8222720840299 23 -70.0735200000139 33 1999.54954910041 70 3 0 3DFACE 8 gearbox_half 10 23.8222720840299 20 -70.0735200000139 30 1999.54954910041 11 8.98258536075502e-05 21 -70.0735200000139 31 1723.15136134553 12 16.4090561501895 22 -70.0735200000139 32 1995.58711301456 13 16.4090561501895 23 -70.0735200000139 33 1995.58711301456 70 3 0 3DFACE 8 gearbox_half 10 16.4090561501895 20 -70.0735200000139 30 1995.58711301456 11 8.98258536075502e-05 21 -70.0735200000139 31 1723.15136134553 12 8.36525014987311 22 -70.0735200000139 32 1993.14706071074 13 8.36525014987311 23 -70.0735200000139 33 1993.14706071074 70 3 0 3DFACE 8 gearbox_half 10 8.36525014987311 20 -70.0735200000139 30 1993.14706071074 11 8.98258536075502e-05 21 -70.0735200000139 31 1723.15136134553 12 -2.69633454074381e-05 22 -70.0735200000139 32 1992.32316203057 13 -2.69633454074381e-05 23 -70.0735200000139 33 1992.32316203057 70 3 0 3DFACE 8 gearbox_half 10 93.4313563944944 20 -70.0735200000139 30 2549.07468002137 11 42.8790110274535 21 -70.0735200000139 31 2035.20210659002 12 42.0551123472866 22 -70.0735200000139 32 2043.56738370323 13 42.0551123472866 23 -70.0735200000139 33 2043.56738370323 70 13 0 3DFACE 8 gearbox_half 10 93.4313563944944 20 -70.0735200000139 30 2549.07468002137 11 42.0551123472866 21 -70.0735200000139 31 2043.56738370323 12 39.6150600434633 22 -70.0735200000139 32 2051.61118970355 13 39.6150600434633 23 -70.0735200000139 33 2051.61118970355 70 13 0 3DFACE 8 gearbox_half 10 93.4313563944944 20 -70.0735200000139 30 2549.07468002137 11 39.6150600434633 21 -70.0735200000139 31 2051.61118970355 12 35.6526239576226 22 -70.0735200000139 32 2059.02440563739 13 35.6526239576226 23 -70.0735200000139 33 2059.02440563739 70 13 0 3DFACE 8 gearbox_half 10 93.4313563944944 20 -70.0735200000139 30 2549.07468002137 11 35.6526239576226 21 -70.0735200000139 31 2059.02440563739 12 30.3200782863833 22 -70.0735200000139 32 2065.5221457738 13 30.3200782863833 23 -70.0735200000139 33 2065.5221457738 70 13 0 3DFACE 8 gearbox_half 10 93.4313563944944 20 -70.0735200000139 30 2549.07468002137 11 30.3200782863833 21 -70.0735200000139 31 2065.5221457738 12 23.8223497693652 22 -70.0735200000139 32 2070.8547056033 13 23.8223497693652 23 -70.0735200000139 33 2070.8547056033 70 13 0 3DFACE 8 gearbox_half 10 93.4313563944944 20 -70.0735200000139 30 2549.07468002137 11 23.8223497693652 21 -70.0735200000139 31 2070.8547056033 12 16.4091424695092 22 -70.0735200000139 32 2074.81715784219 13 16.4091424695092 23 -70.0735200000139 33 2074.81715784219 70 13 0 3DFACE 8 gearbox_half 10 93.4313563944944 20 -70.0735200000139 30 2549.07468002137 11 16.4091424695092 21 -70.0735200000139 31 2074.81715784219 12 8.3653417859741 22 -70.0735200000139 32 2077.25722767309 13 8.3653417859741 23 -70.0735200000139 33 2077.25722767309 70 13 0 3DFACE 8 gearbox_half 10 93.4313563944944 20 -70.0735200000139 30 2549.07468002137 11 8.3653417859741 21 -70.0735200000139 31 2077.25722767309 12 6.64680129382589e-05 22 -70.0735200000139 32 2078.08114458081 13 6.64680129382589e-05 23 -70.0735200000139 33 2078.08114458081 70 13 0 3DFACE 8 gearbox_half 10 93.4313563944944 20 -70.0735200000139 30 2549.07468002137 11 6.64680129382589e-05 21 -70.0735200000139 31 2078.08114458081 12 39.6150423666467 22 -70.0735200000139 32 2409.40261154673 13 39.6150423666467 23 -70.0735200000139 33 2409.40261154673 70 15 0 3DFACE 8 gearbox_half 10 39.6150423666467 20 -70.0735200000139 30 2409.40261154673 11 6.64680129382589e-05 21 -70.0735200000139 31 2078.08114458081 12 35.652598194651 22 -70.0735200000139 32 2401.98939991186 13 35.652598194651 23 -70.0735200000139 33 2401.98939991186 70 3 0 3DFACE 8 gearbox_half 10 35.652598194651 20 -70.0735200000139 30 2401.98939991186 11 6.64680129382589e-05 21 -70.0735200000139 31 2078.08114458081 12 30.3200454313183 22 -70.0735200000139 32 2395.49166556936 13 30.3200454313183 23 -70.0735200000139 33 2395.49166556936 70 3 0 3DFACE 8 gearbox_half 10 30.3200454313183 20 -70.0735200000139 30 2395.49166556936 11 6.64680129382589e-05 21 -70.0735200000139 31 2078.08114458081 12 23.8223110888135 22 -70.0735200000139 32 2390.15911280603 13 23.8223110888135 23 -70.0735200000139 33 2390.15911280603 70 3 0 3DFACE 8 gearbox_half 10 23.8223110888135 20 -70.0735200000139 30 2390.15911280603 11 6.64680129382589e-05 21 -70.0735200000139 31 2078.08114458081 12 16.4090994539476 22 -70.0735200000139 32 2386.19666863403 13 16.4090994539476 23 -70.0735200000139 33 2386.19666863403 70 3 0 3DFACE 8 gearbox_half 10 16.4090994539476 20 -70.0735200000139 30 2386.19666863403 11 6.64680129382589e-05 21 -70.0735200000139 31 2078.08114458081 12 8.36529609247169 22 -70.0735200000139 32 2383.75660756074 13 8.36529609247169 23 -70.0735200000139 33 2383.75660756074 70 3 0 3DFACE 8 gearbox_half 10 8.36529609247169 20 -70.0735200000139 30 2383.75660756074 11 6.64680129382589e-05 21 -70.0735200000139 31 2078.08114458081 12 1.98565501612791e-05 22 -70.0735200000139 32 2382.93269976479 13 1.98565501612791e-05 23 -70.0735200000139 33 2382.93269976479 70 3 0 3DFACE 8 gearbox_half 10 93.4313563944944 20 -70.0735200000139 30 2549.07468002137 11 39.6150423666467 21 -70.0735200000139 31 2409.40261154673 12 42.05510343994 22 -70.0735200000139 32 2417.44641490821 13 42.05510343994 23 -70.0735200000139 33 2417.44641490821 70 13 0 3DFACE 8 gearbox_half 10 93.4313563944944 20 -70.0735200000139 30 2549.07468002137 11 42.05510343994 21 -70.0735200000139 31 2417.44641490821 12 42.8790112358864 22 -70.0735200000139 32 2425.81169114413 13 42.8790112358864 23 -70.0735200000139 33 2425.81169114413 70 13 0 3DFACE 8 gearbox_half 10 93.4313563944944 20 -70.0735200000139 30 2549.07468002137 11 42.8790112358864 21 -70.0735200000139 31 2425.81169114413 12 42.05510343994 22 -70.0735200000139 32 2434.17696738005 13 42.05510343994 23 -70.0735200000139 33 2434.17696738005 70 13 0 3DFACE 8 gearbox_half 10 93.4313563944944 20 -70.0735200000139 30 2549.07468002137 11 42.05510343994 21 -70.0735200000139 31 2434.17696738005 12 39.6150423666467 22 -70.0735200000139 32 2442.22077074152 13 39.6150423666467 23 -70.0735200000139 33 2442.22077074152 70 13 0 3DFACE 8 gearbox_half 10 93.4313563944944 20 -70.0735200000139 30 2549.07468002137 11 39.6150423666467 21 -70.0735200000139 31 2442.22077074152 12 35.652598194651 22 -70.0735200000139 32 2449.63398237639 13 35.652598194651 23 -70.0735200000139 33 2449.63398237639 70 13 0 3DFACE 8 gearbox_half 10 93.4313563944944 20 -70.0735200000139 30 2549.07468002137 11 35.652598194651 21 -70.0735200000139 31 2449.63398237639 12 30.3200454313183 22 -70.0735200000139 32 2456.13171671889 13 30.3200454313183 23 -70.0735200000139 33 2456.13171671889 70 13 0 3DFACE 8 gearbox_half 10 93.4313563944944 20 -70.0735200000139 30 2549.07468002137 11 30.3200454313183 21 -70.0735200000139 31 2456.13171671889 12 23.8223110888135 22 -70.0735200000139 32 2461.46426948223 13 23.8223110888135 23 -70.0735200000139 33 2461.46426948223 70 13 0 3DFACE 8 gearbox_half 10 93.4313563944944 20 -70.0735200000139 30 2549.07468002137 11 23.8223110888135 21 -70.0735200000139 31 2461.46426948223 12 16.4090994539477 22 -70.0735200000139 32 2465.42671365422 13 16.4090994539477 23 -70.0735200000139 33 2465.42671365422 70 13 0 3DFACE 8 gearbox_half 10 93.4313563944944 20 -70.0735200000139 30 2549.07468002137 11 16.4090994539477 21 -70.0735200000139 31 2465.42671365422 12 8.36529609247169 22 -70.0735200000139 32 2467.86677472752 13 8.36529609247169 23 -70.0735200000139 33 2467.86677472752 70 13 0 3DFACE 8 gearbox_half 10 93.4313563944944 20 -70.0735200000139 30 2549.07468002137 11 8.36529609247169 21 -70.0735200000139 31 2467.86677472752 12 1.98565501612791e-05 22 -70.0735200000139 32 2468.69068252346 13 1.98565501612791e-05 23 -70.0735200000139 33 2468.69068252346 70 13 0 3DFACE 8 gearbox_half 10 93.4313563944944 20 -70.0735200000139 30 2549.07468002137 11 1.98565501612791e-05 21 -70.0735200000139 31 2468.69068252346 12 -93.4313636055058 22 -70.0735200000139 32 2549.07468002137 13 -93.4313636055058 23 -70.0735200000139 33 2549.07468002137 70 3 0 3DFACE 8 gearbox_half 10 763.148515070603 20 -70.0735200000139 30 1522.84685844505 11 712.934349429914 21 -116.789200000014 31 1614.07300396247 12 758.547422188619 22 -116.789200000014 32 1522.84685844505 13 758.547422188619 23 -116.789200000014 33 1522.84685844505 70 1 0 3DFACE 8 gearbox_half 10 712.934349429914 20 -116.789200000014 30 1614.07300396247 11 763.148515070603 21 -70.0735200000139 31 1522.84685844505 12 717.537998926308 22 -70.0735200000139 32 1614.06789073365 13 717.537998926308 23 -70.0735200000139 33 1614.06789073365 70 1 0 3DFACE 8 gearbox_half 10 -42.878971522786 20 -116.789200000014 30 2425.81169114413 11 -42.0550637268399 21 -741.902149593115 31 2417.44641490821 12 -42.878971522786 22 -741.907021954462 32 2425.81169114413 13 -42.878971522786 23 -741.907021954462 33 2425.81169114413 70 1 0 3DFACE 8 gearbox_half 10 -42.0550637268399 20 -741.902149593115 30 2417.44641490821 11 -42.878971522786 21 -116.789200000014 31 2425.81169114413 12 -42.0550637268397 22 -116.789200000014 32 2417.44641490821 13 -42.0550637268397 23 -116.789200000014 33 2417.44641490821 70 1 0 3DFACE 8 gearbox_half 10 -16.4090597408471 20 -741.750486264824 30 2465.42671365422 11 -8.36525637937127 21 -116.789200000014 31 2467.86677472752 12 -16.4090597408473 22 -116.789200000014 32 2465.42671365422 13 -16.4090597408473 23 -116.789200000014 33 2465.42671365422 70 1 0 3DFACE 8 gearbox_half 10 -8.36525637937127 20 -116.789200000014 30 2467.86677472752 11 -16.4090597408471 21 -741.750486264824 31 2465.42671365422 12 -8.36525637937127 22 -741.702917450962 32 2467.86677472752 13 -8.36525637937127 23 -741.702917450962 33 2467.86677472752 70 1 0 3DFACE 8 gearbox_half 10 763.148515070603 20 -70.0735200000139 30 1522.84685844505 11 -758.547422188618 21 -116.789200000014 31 1522.84685844505 12 -763.148515070603 22 -70.0735200000139 32 1522.84685844505 13 -763.148515070603 23 -70.0735200000139 33 1522.84685844505 70 1 0 3DFACE 8 gearbox_half 10 -758.547422188618 20 -116.789200000014 30 1522.84685844505 11 763.148515070603 21 -70.0735200000139 31 1522.84685844505 12 758.547422188619 22 -116.789200000014 32 1522.84685844505 13 758.547422188619 23 -116.789200000014 33 1522.84685844505 70 1 0 3DFACE 8 gearbox_half 10 -23.8222713757131 20 -116.789200000014 30 2390.15911280603 11 -30.3200057182178 21 -847.173357521512 31 2395.49166556936 12 -30.3200057182179 22 -116.789200000014 32 2395.49166556936 13 -30.3200057182179 23 -116.789200000014 33 2395.49166556936 70 1 0 3DFACE 8 gearbox_half 10 -30.3200057182178 20 -847.173357521512 30 2395.49166556936 11 -23.8222713757131 21 -116.789200000014 31 2390.15911280603 12 -23.822271375713 22 -851.834664122165 32 2390.15911280603 13 -23.822271375713 23 -851.834664122165 33 2390.15911280603 70 1 0 3DFACE 8 gearbox_half 10 35.652598194651 20 -116.789200000014 30 2401.98939991186 11 39.3611647970471 21 -835.428664280087 31 2408.9276400213 12 35.6525981946511 22 -841.49353899477 32 2401.98939991186 13 35.6525981946511 23 -841.49353899477 33 2401.98939991186 70 1 0 3DFACE 8 gearbox_half 10 39.3611647970471 20 -835.428664280087 30 2408.9276400213 11 35.652598194651 21 -116.789200000014 31 2401.98939991186 12 39.3611647970476 22 -741.420676682108 32 2408.9276400213 13 39.3611647970476 23 -741.420676682108 33 2408.9276400213 70 3 0 3DFACE 8 gearbox_half 10 39.3611647970476 20 -741.420676682108 30 2408.9276400213 11 35.652598194651 21 -116.789200000014 31 2401.98939991186 12 39.6150423666477 22 -741.419175320836 32 2409.40261154673 13 39.6150423666477 23 -741.419175320836 33 2409.40261154673 70 3 0 3DFACE 8 gearbox_half 10 39.6150423666477 20 -741.419175320836 30 2409.40261154673 11 35.652598194651 21 -116.789200000014 31 2401.98939991186 12 39.6150423666468 22 -116.789200000014 32 2409.40261154673 13 39.6150423666468 23 -116.789200000014 33 2409.40261154673 70 1 0 3DFACE 8 gearbox_half 10 -16.4090597408473 20 -116.789200000014 30 2386.19666863403 11 -23.822271375713 21 -851.834664122165 31 2390.15911280603 12 -23.8222713757131 22 -116.789200000014 32 2390.15911280603 13 -23.8222713757131 23 -116.789200000014 33 2390.15911280603 70 1 0 3DFACE 8 gearbox_half 10 -23.822271375713 20 -851.834664122165 30 2390.15911280603 11 -16.4090597408473 21 -116.789200000014 31 2386.19666863403 12 -16.4090597408471 22 -855.298327398157 32 2386.19666863403 13 -16.4090597408471 23 -855.298327398157 33 2386.19666863403 70 1 0 3DFACE 8 gearbox_half 10 712.934349429914 20 -116.789200000014 30 1614.07300396247 11 93.4322738363532 21 -70.0735200000139 31 1614.76107890595 12 93.4322738363532 22 -116.789200000014 32 1614.76107890595 13 93.4322738363532 23 -116.789200000014 33 1614.76107890595 70 1 0 3DFACE 8 gearbox_half 10 93.4322738363532 20 -70.0735200000139 30 1614.76107890595 11 712.934349429914 21 -116.789200000014 31 1614.07300396247 12 717.537998926308 22 -70.0735200000139 32 1614.06789073365 13 717.537998926308 23 -70.0735200000139 33 1614.06789073365 70 1 0 3DFACE 8 gearbox_half 10 35.6525981946522 20 -741.442608112612 30 2449.63398237639 11 30.3200454313183 21 -116.789200000014 31 2456.13171671889 12 30.3200454313182 22 -741.474143345189 32 2456.13171671889 13 30.3200454313182 23 -741.474143345189 33 2456.13171671889 70 1 0 3DFACE 8 gearbox_half 10 30.3200454313183 20 -116.789200000014 30 2456.13171671889 11 35.6525981946522 21 -741.442608112612 31 2449.63398237639 12 35.652598194651 22 -116.789200000014 32 2449.63398237639 13 35.652598194651 23 -116.789200000014 33 2449.63398237639 70 1 0 3DFACE 8 gearbox_half 10 23.8223691906999 20 -70.0735200000139 30 1715.9249093911 11 16.4091640493401 21 -116.789200000014 31 1719.88736566825 12 16.4091640493401 22 -70.0735200000139 32 1719.88736566825 13 16.4091640493401 23 -70.0735200000139 33 1719.88736566825 70 1 0 3DFACE 8 gearbox_half 10 16.4091640493401 20 -116.789200000014 30 1719.88736566825 11 23.8223691906999 21 -70.0735200000139 31 1715.9249093911 12 23.8223691906999 22 -116.789200000014 32 1715.9249093911 13 23.8223691906999 23 -116.789200000014 33 1715.9249093911 70 1 0 3DFACE 8 gearbox_half 10 39.6150153501718 20 -70.0735200000139 30 1663.86322577341 11 35.65255907302 21 -116.789200000014 31 1656.45002063205 12 39.6150153501718 22 -116.789200000014 32 1663.86322577341 13 39.6150153501718 23 -116.789200000014 33 1663.86322577341 70 1 0 3DFACE 8 gearbox_half 10 35.65255907302 20 -116.789200000014 30 1656.45002063205 11 39.6150153501718 21 -70.0735200000139 31 1663.86322577341 12 35.65255907302 22 -70.0735200000139 32 1656.45002063205 13 35.65255907302 23 -70.0735200000139 33 1656.45002063205 70 1 0 3DFACE 8 gearbox_half 10 16.4091640493401 20 -70.0735200000139 30 1719.88736566825 11 8.36536469500046 21 -116.789200000014 31 1722.32743988093 12 8.36536469500046 22 -70.0735200000139 32 1722.32743988093 13 8.36536469500046 23 -70.0735200000139 33 1722.32743988093 70 1 0 3DFACE 8 gearbox_half 10 8.36536469500046 20 -116.789200000014 30 1722.32743988093 11 16.4091640493401 21 -70.0735200000139 31 1719.88736566825 12 16.4091640493401 22 -116.789200000014 32 1719.88736566825 13 16.4091640493401 23 -116.789200000014 33 1719.88736566825 70 1 0 3DFACE 8 gearbox_half 10 -39.6150294774544 20 -70.0735200000139 30 1663.86335525239 11 -42.0550773995078 21 -116.789200000014 31 1671.9071625819 12 -39.6150294774544 22 -116.789200000014 32 1663.86335525239 13 -39.6150294774544 23 -116.789200000014 33 1663.86335525239 70 1 0 3DFACE 8 gearbox_half 10 -42.0550773995078 20 -116.789200000014 30 1671.9071625819 11 -39.6150294774544 21 -70.0735200000139 31 1663.86335525239 12 -42.0550773995078 22 -70.0735200000139 32 1671.9071625819 13 -42.0550773995078 23 -70.0735200000139 33 1671.9071625819 70 1 0 3DFACE 8 gearbox_half 10 -42.0550637268397 20 0.0 30 2417.44641490821 11 -39.6150026535464 21 -70.0735200000139 31 2409.40261154673 12 -42.0550637268397 22 -70.0735200000139 32 2417.44641490821 13 -42.0550637268397 23 -70.0735200000139 33 2417.44641490821 70 1 0 3DFACE 8 gearbox_half 10 -39.6150026535464 20 -70.0735200000139 30 2409.40261154673 11 -42.0550637268397 21 0.0 31 2417.44641490821 12 -39.6150026535464 22 0.0 32 2409.40261154673 13 -39.6150026535464 23 0.0 33 2409.40261154673 70 1 0 3DFACE 8 gearbox_half 10 -42.878971522786 20 0.0 30 2425.81169114413 11 -42.0550637268397 21 -70.0735200000139 31 2417.44641490821 12 -42.878971522786 22 -70.0735200000139 32 2425.81169114413 13 -42.878971522786 23 -70.0735200000139 33 2425.81169114413 70 1 0 3DFACE 8 gearbox_half 10 -42.0550637268397 20 -70.0735200000139 30 2417.44641490821 11 -42.878971522786 21 0.0 31 2425.81169114413 12 -42.0550637268397 22 0.0 32 2417.44641490821 13 -42.0550637268397 23 0.0 33 2417.44641490821 70 1 0 3DFACE 8 gearbox_half 10 -16.4090597408473 20 0.0 30 2386.19666863403 11 -23.8222713757131 21 -70.0735200000139 31 2390.15911280603 12 -23.8222713757131 22 0.0 32 2390.15911280603 13 -23.8222713757131 23 0.0 33 2390.15911280603 70 1 0 3DFACE 8 gearbox_half 10 -23.8222713757131 20 -70.0735200000139 30 2390.15911280603 11 -16.4090597408473 21 0.0 31 2386.19666863403 12 -16.4090597408473 22 -70.0735200000139 32 2386.19666863403 13 -16.4090597408473 23 -70.0735200000139 33 2386.19666863403 70 1 0 3DFACE 8 gearbox_half 10 16.4090994539476 20 0.0 30 2386.19666863403 11 8.36529609247169 21 -70.0735200000139 31 2383.75660756074 12 8.36529609247169 22 0.0 32 2383.75660756074 13 8.36529609247169 23 0.0 33 2383.75660756074 70 1 0 3DFACE 8 gearbox_half 10 8.36529609247169 20 -70.0735200000139 30 2383.75660756074 11 16.4090994539476 21 0.0 31 2386.19666863403 12 16.4090994539476 22 -70.0735200000139 32 2386.19666863403 13 16.4090994539476 23 -70.0735200000139 33 2386.19666863403 70 1 0 3DFACE 8 gearbox_half 10 23.8223110888135 20 -70.0735200000139 30 2461.46426948223 11 16.4090994539477 21 0.0 31 2465.42671365422 12 16.4090994539477 22 -70.0735200000139 32 2465.42671365422 13 16.4090994539477 23 -70.0735200000139 33 2465.42671365422 70 1 0 3DFACE 8 gearbox_half 10 16.4090994539477 20 0.0 30 2465.42671365422 11 23.8223110888135 21 -70.0735200000139 31 2461.46426948223 12 23.8223110888135 22 0.0 32 2461.46426948223 13 23.8223110888135 23 0.0 33 2461.46426948223 70 1 0 3DFACE 8 gearbox_half 10 -23.8223296860324 20 -116.789200000014 30 1644.61983074973 11 -30.3200552982032 21 -70.0735200000139 31 1649.9523941188 12 -30.3200552982032 22 -116.789200000014 32 1649.9523941188 13 -30.3200552982032 23 -116.789200000014 33 1649.9523941188 70 1 0 3DFACE 8 gearbox_half 10 -30.3200552982032 20 -70.0735200000139 30 1649.9523941188 11 -23.8223296860324 21 -116.789200000014 31 1644.61983074973 12 -23.8223296860324 22 -70.0735200000139 32 1644.61983074973 13 -23.8223296860324 23 -70.0735200000139 33 1644.61983074973 70 1 0 3DFACE 8 gearbox_half 10 -35.6525195683525 20 -70.0735200000139 30 1704.09471950878 11 -30.3199561992811 21 -116.789200000014 31 1710.59244512095 12 -35.6525195683525 22 -116.789200000014 32 1704.09471950878 13 -35.6525195683525 23 -116.789200000014 33 1704.09471950878 70 1 0 3DFACE 8 gearbox_half 10 -30.3199561992811 20 -116.789200000014 30 1710.59244512095 11 -35.6525195683525 21 -70.0735200000139 31 1704.09471950878 12 -30.3199561992811 22 -70.0735200000139 32 1710.59244512095 13 -30.3199561992811 23 -70.0735200000139 33 1710.59244512095 70 1 0 3DFACE 8 gearbox_half 10 -8.36518773617931 20 -70.0735200000139 30 1722.32746722226 11 -16.4089950656911 21 -116.789200000014 31 1719.8874193002 12 -16.4089950656911 22 -70.0735200000139 32 1719.8874193002 13 -16.4089950656911 23 -70.0735200000139 33 1719.8874193002 70 1 0 3DFACE 8 gearbox_half 10 -16.4089950656911 20 -116.789200000014 30 1719.8874193002 11 -8.36518773617931 21 -70.0735200000139 31 1722.32746722226 12 -8.36518773617931 22 -116.789200000014 32 1722.32746722226 13 -8.36518773617931 23 -116.789200000014 33 1722.32746722226 70 1 0 3DFACE 8 gearbox_half 10 23.8222526626951 20 -116.789200000014 30 1644.61975288821 11 16.4090345703586 21 -70.0735200000139 31 1640.65732084063 12 16.4090345703586 22 -116.789200000014 32 1640.65732084063 13 16.4090345703586 23 -116.789200000014 33 1640.65732084063 70 1 0 3DFACE 8 gearbox_half 10 16.4090345703586 20 -70.0735200000139 30 1640.65732084063 11 23.8222526626951 21 -116.789200000014 31 1644.61975288821 12 23.8222526626951 22 -70.0735200000139 32 1644.61975288821 13 23.8222526626951 23 -70.0735200000139 33 1644.61975288821 70 1 0 3DFACE 8 gearbox_half 10 -42.0550773995078 20 -70.0735200000139 30 1671.9071625819 11 -42.878971522786 21 -116.789200000014 31 1680.27244014393 12 -42.0550773995078 22 -116.789200000014 32 1671.9071625819 13 -42.0550773995078 23 -116.789200000014 33 1671.9071625819 70 1 0 3DFACE 8 gearbox_half 10 -42.878971522786 20 -116.789200000014 30 1680.27244014393 11 -42.0550773995078 21 -70.0735200000139 31 1671.9071625819 12 -42.878971522786 22 -70.0735200000139 32 1680.27244014393 13 -42.878971522786 23 -70.0735200000139 33 1680.27244014393 70 1 0 3DFACE 8 gearbox_half 10 35.6526369345435 20 -70.0735200000139 30 1704.09460298078 11 39.615068982122 21 -116.789200000014 31 1696.68138488844 12 35.6526369345435 22 -116.789200000014 32 1704.09460298078 13 35.6526369345435 23 -116.789200000014 33 1704.09460298078 70 1 0 3DFACE 8 gearbox_half 10 39.615068982122 20 -116.789200000014 30 1696.68138488844 11 35.6526369345435 21 -70.0735200000139 31 1704.09460298078 12 39.615068982122 22 -70.0735200000139 32 1696.68138488844 13 39.615068982122 23 -70.0735200000139 33 1696.68138488844 70 1 0 3DFACE 8 gearbox_half 10 42.0551169041753 20 -70.0735200000139 30 1688.63757755893 11 42.8790110274535 21 -116.789200000014 31 1680.2722999969 12 42.0551169041753 22 -116.789200000014 32 1688.63757755893 13 42.0551169041753 23 -116.789200000014 33 1688.63757755893 70 1 0 3DFACE 8 gearbox_half 10 42.8790110274535 20 -116.789200000014 30 1680.2722999969 11 42.0551169041753 21 -70.0735200000139 31 1688.63757755893 12 42.8790110274535 22 -70.0735200000139 32 1680.2722999969 13 42.8790110274535 23 -70.0735200000139 33 1680.2722999969 70 1 0 3DFACE 8 gearbox_half 10 -42.0550637268397 20 -741.902149593115 30 2434.17696738005 11 -42.878971522786 21 -116.789200000014 31 2425.81169114413 12 -42.878971522786 22 -741.907021954462 32 2425.81169114413 13 -42.878971522786 23 -741.907021954462 33 2425.81169114413 70 1 0 3DFACE 8 gearbox_half 10 -42.878971522786 20 -116.789200000014 30 2425.81169114413 11 -42.0550637268397 21 -741.902149593115 31 2434.17696738005 12 -42.0550637268397 22 -116.789200000014 32 2434.17696738005 13 -42.0550637268397 23 -116.789200000014 33 2434.17696738005 70 1 0 3DFACE 8 gearbox_half 10 42.8790112358864 20 -741.39987311756 30 2425.81169114413 11 42.05510343994 21 -116.789200000014 31 2434.17696738005 12 42.0551034399401 22 -741.404745478907 32 2434.17696738005 13 42.0551034399401 23 -741.404745478907 33 2434.17696738005 70 1 0 3DFACE 8 gearbox_half 10 42.05510343994 20 -116.789200000014 30 2434.17696738005 11 42.8790112358864 21 -741.39987311756 31 2425.81169114413 12 42.8790112358864 22 -116.789200000014 32 2425.81169114413 13 42.8790112358864 23 -116.789200000014 33 2425.81169114413 70 1 0 3DFACE 8 gearbox_half 10 1.9856550251518e-05 20 -741.653447536011 30 2468.69068252346 11 -8.36525637937127 21 -116.789200000014 31 2467.86677472752 12 -8.36525637937127 22 -741.702917450962 32 2467.86677472752 13 -8.36525637937127 23 -741.702917450962 33 2467.86677472752 70 1 0 3DFACE 8 gearbox_half 10 -8.36525637937127 20 -116.789200000014 30 2467.86677472752 11 1.9856550251518e-05 21 -741.653447536011 31 2468.69068252346 12 1.98565501612791e-05 22 -116.789200000014 32 2468.69068252346 13 1.98565501612791e-05 23 -116.789200000014 33 2468.69068252346 70 1 0 3DFACE 8 gearbox_half 10 -23.822271375713 20 -741.794325934758 30 2461.46426948223 11 -16.4090597408473 21 -116.789200000014 31 2465.42671365422 12 -23.8222713757131 22 -116.789200000014 32 2461.46426948223 13 -23.8222713757131 23 -116.789200000014 33 2461.46426948223 70 1 0 3DFACE 8 gearbox_half 10 -16.4090597408473 20 -116.789200000014 30 2465.42671365422 11 -23.822271375713 21 -741.794325934758 31 2461.46426948223 12 -16.4090597408471 22 -741.750486264824 32 2465.42671365422 13 -16.4090597408471 23 -741.750486264824 33 2465.42671365422 70 1 0 3DFACE 8 gearbox_half 10 -23.8222713757131 20 0.0 30 2390.15911280603 11 -30.3200057182179 21 -70.0735200000139 31 2395.49166556936 12 -30.3200057182179 22 0.0 32 2395.49166556936 13 -30.3200057182179 23 0.0 33 2395.49166556936 70 1 0 3DFACE 8 gearbox_half 10 -30.3200057182179 20 -70.0735200000139 30 2395.49166556936 11 -23.8222713757131 21 0.0 31 2390.15911280603 12 -23.8222713757131 22 -70.0735200000139 32 2390.15911280603 13 -23.8222713757131 23 -70.0735200000139 33 2390.15911280603 70 1 0 3DFACE 8 gearbox_half 10 -42.0550637268397 20 0.0 30 2434.17696738005 11 -42.878971522786 21 -70.0735200000139 31 2425.81169114413 12 -42.0550637268397 22 -70.0735200000139 32 2434.17696738005 13 -42.0550637268397 23 -70.0735200000139 33 2434.17696738005 70 1 0 3DFACE 8 gearbox_half 10 -42.878971522786 20 -70.0735200000139 30 2425.81169114413 11 -42.0550637268397 21 0.0 31 2434.17696738005 12 -42.878971522786 22 0.0 32 2425.81169114413 13 -42.878971522786 23 0.0 33 2425.81169114413 70 1 0 3DFACE 8 gearbox_half 10 42.05510343994 20 0.0 30 2417.44641490821 11 42.8790112358864 21 -70.0735200000139 31 2425.81169114413 12 42.05510343994 22 -70.0735200000139 32 2417.44641490821 13 42.05510343994 23 -70.0735200000139 33 2417.44641490821 70 1 0 3DFACE 8 gearbox_half 10 42.8790112358864 20 -70.0735200000139 30 2425.81169114413 11 42.05510343994 21 0.0 31 2417.44641490821 12 42.8790112358864 22 0.0 32 2425.81169114413 13 42.8790112358864 23 0.0 33 2425.81169114413 70 1 0 3DFACE 8 gearbox_half 10 1.98565501612791e-05 20 0.0 30 2382.93269976479 11 -8.36525637937127 21 -70.0735200000139 31 2383.75660756074 12 -8.36525637937127 22 0.0 32 2383.75660756074 13 -8.36525637937127 23 0.0 33 2383.75660756074 70 1 0 3DFACE 8 gearbox_half 10 -8.36525637937127 20 -70.0735200000139 30 2383.75660756074 11 1.98565501612791e-05 21 0.0 31 2382.93269976479 12 1.98565501612791e-05 22 -70.0735200000139 32 2382.93269976479 13 1.98565501612791e-05 23 -70.0735200000139 33 2382.93269976479 70 1 0 3DFACE 8 gearbox_half 10 -23.8222713757131 20 -70.0735200000139 30 2461.46426948223 11 -30.3200057182179 21 0.0 31 2456.13171671889 12 -30.3200057182179 22 -70.0735200000139 32 2456.13171671889 13 -30.3200057182179 23 -70.0735200000139 33 2456.13171671889 70 1 0 3DFACE 8 gearbox_half 10 -30.3200057182179 20 0.0 30 2456.13171671889 11 -23.8222713757131 21 -70.0735200000139 31 2461.46426948223 12 -23.8222713757131 22 0.0 32 2461.46426948223 13 -23.8222713757131 23 0.0 33 2461.46426948223 70 1 0 3DFACE 8 gearbox_half 10 16.4090994539477 20 -70.0735200000139 30 2465.42671365422 11 8.36529609247169 21 0.0 31 2467.86677472752 12 8.36529609247169 22 -70.0735200000139 32 2467.86677472752 13 8.36529609247169 23 -70.0735200000139 33 2467.86677472752 70 1 0 3DFACE 8 gearbox_half 10 8.36529609247169 20 0.0 30 2467.86677472752 11 16.4090994539477 21 -70.0735200000139 31 2465.42671365422 12 16.4090994539477 22 0.0 32 2465.42671365422 13 16.4090994539477 23 0.0 33 2465.42671365422 70 1 0 3DFACE 8 gearbox_half 10 -35.6525584815506 20 -741.864286959411 30 2449.63398237639 11 -39.6150026535464 21 -116.789200000014 31 2442.22077074152 12 -39.6150026535458 22 -741.887719751186 32 2442.22077074152 13 -39.6150026535458 23 -741.887719751186 33 2442.22077074152 70 1 0 3DFACE 8 gearbox_half 10 -39.6150026535464 20 -116.789200000014 30 2442.22077074152 11 -35.6525584815506 21 -741.864286959411 31 2449.63398237639 12 -35.6525584815506 22 -116.789200000014 32 2449.63398237639 13 -35.6525584815506 23 -116.789200000014 33 2449.63398237639 70 1 0 3DFACE 8 gearbox_half 10 42.8790110274535 20 -70.0735200000139 30 2035.20210659002 11 42.0550941197328 21 -116.789200000014 31 2026.83683127205 12 42.8790110274535 22 -116.789200000014 32 2035.20210659002 13 42.8790110274535 23 -116.789200000014 33 2035.20210659002 70 1 0 3DFACE 8 gearbox_half 10 42.0550941197328 20 -116.789200000014 30 2026.83683127205 11 42.8790110274535 21 -70.0735200000139 31 2035.20210659002 12 42.0550941197328 22 -70.0735200000139 32 2026.83683127205 13 42.0550941197328 23 -70.0735200000139 33 2026.83683127205 70 1 0 3DFACE 8 gearbox_half 10 42.05510343994 20 -116.789200000014 30 2417.44641490821 11 42.8790112358864 21 -741.39987311756 31 2425.81169114413 12 42.0551034399399 22 -741.404745478908 32 2417.44641490821 13 42.0551034399399 23 -741.404745478908 33 2417.44641490821 70 1 0 3DFACE 8 gearbox_half 10 42.8790112358864 20 -741.39987311756 30 2425.81169114413 11 42.05510343994 21 -116.789200000014 31 2417.44641490821 12 42.8790112358864 22 -116.789200000014 32 2425.81169114413 13 42.8790112358864 23 -116.789200000014 33 2425.81169114413 70 1 0 3DFACE 8 gearbox_half 10 -23.8223102646976 20 -116.789200000014 30 1999.54960100809 11 -30.3200387817157 21 -70.0735200000139 31 2004.88216083759 12 -30.3200387817157 22 -116.789200000014 32 2004.88216083759 13 -30.3200387817157 23 -116.789200000014 33 2004.88216083759 70 1 0 3DFACE 8 gearbox_half 10 -30.3200387817157 20 -70.0735200000139 30 2004.88216083759 11 -23.8223102646976 21 -116.789200000014 31 1999.54960100809 12 -23.8223102646976 22 -70.0735200000139 32 1999.54960100809 13 -23.8223102646976 23 -70.0735200000139 33 1999.54960100809 70 1 0 3DFACE 8 gearbox_half 10 30.3200454313183 20 0.0 30 2395.49166556936 11 23.8223110888135 21 -70.0735200000139 31 2390.15911280603 12 23.8223110888135 22 0.0 32 2390.15911280603 13 23.8223110888135 23 0.0 33 2390.15911280603 70 1 0 3DFACE 8 gearbox_half 10 23.8223110888135 20 -70.0735200000139 30 2390.15911280603 11 30.3200454313183 21 0.0 31 2395.49166556936 12 30.3200454313183 22 -70.0735200000139 32 2395.49166556936 13 30.3200454313183 23 -70.0735200000139 33 2395.49166556936 70 1 0 3DFACE 8 gearbox_half 10 35.652598194651 20 0.0 30 2401.98939991186 11 39.6150423666467 21 -70.0735200000139 31 2409.40261154673 12 35.652598194651 22 -70.0735200000139 32 2401.98939991186 13 35.652598194651 23 -70.0735200000139 33 2401.98939991186 70 1 0 3DFACE 8 gearbox_half 10 39.6150423666467 20 -70.0735200000139 30 2409.40261154673 11 35.652598194651 21 0.0 31 2401.98939991186 12 39.6150423666467 22 0.0 32 2409.40261154673 13 39.6150423666467 23 0.0 33 2409.40261154673 70 1 0 3DFACE 8 gearbox_half 10 8.3653417859741 20 -70.0735200000139 30 2077.25722767309 11 6.64680129382589e-05 21 -116.789200000014 31 2078.08114458081 12 6.64680129382589e-05 22 -70.0735200000139 32 2078.08114458081 13 6.64680129382589e-05 23 -70.0735200000139 33 2078.08114458081 70 1 0 3DFACE 8 gearbox_half 10 6.64680129382589e-05 20 -116.789200000014 30 2078.08114458081 11 8.3653417859741 21 -70.0735200000139 31 2077.25722767309 12 8.3653417859741 22 -116.789200000014 32 2077.25722767309 13 8.3653417859741 23 -116.789200000014 33 2077.25722767309 70 1 0 3DFACE 8 gearbox_half 10 42.0550941197328 20 -70.0735200000139 30 2026.83683127205 11 39.6150242888304 21 -116.789200000014 31 2018.79303058852 12 42.0550941197328 22 -116.789200000014 32 2026.83683127205 13 42.0550941197328 23 -116.789200000014 33 2026.83683127205 70 1 0 3DFACE 8 gearbox_half 10 39.6150242888304 20 -116.789200000014 30 2018.79303058852 11 42.0550941197328 21 -70.0735200000139 31 2026.83683127205 12 39.6150242888304 22 -70.0735200000139 32 2018.79303058852 13 39.6150242888304 23 -70.0735200000139 33 2018.79303058852 70 1 0 3DFACE 8 gearbox_half 10 30.3200948028707 20 -70.0735200000139 30 1710.59234602203 11 23.8223691906999 21 -116.789200000014 31 1715.9249093911 12 23.8223691906999 22 -70.0735200000139 32 1715.9249093911 13 23.8223691906999 23 -70.0735200000139 33 1715.9249093911 70 1 0 3DFACE 8 gearbox_half 10 23.8223691906999 20 -116.789200000014 30 1715.9249093911 11 30.3200948028707 21 -70.0735200000139 31 1710.59234602203 12 30.3200948028707 22 -116.789200000014 32 1710.59234602203 13 30.3200948028707 23 -116.789200000014 33 1710.59234602203 70 1 0 3DFACE 8 gearbox_half 10 -16.4091029648416 20 -116.789200000014 30 1995.5871487692 11 -23.8223102646976 21 -70.0735200000139 31 1999.54960100809 12 -23.8223102646976 22 -116.789200000014 32 1999.54960100809 13 -23.8223102646976 23 -116.789200000014 33 1999.54960100809 70 1 0 3DFACE 8 gearbox_half 10 -23.8223102646976 20 -70.0735200000139 30 1999.54960100809 11 -16.4091029648416 21 -116.789200000014 31 1995.5871487692 12 -16.4091029648416 22 -70.0735200000139 32 1995.5871487692 13 -16.4091029648416 23 -70.0735200000139 33 1995.5871487692 70 1 0 3DFACE 8 gearbox_half 10 -35.6525584815511 20 -841.493538994769 30 2401.98939991186 11 -30.3200057182179 21 -116.789200000014 31 2395.49166556936 12 -30.3200057182178 22 -847.173357521512 32 2395.49166556936 13 -30.3200057182178 23 -847.173357521512 33 2395.49166556936 70 1 0 3DFACE 8 gearbox_half 10 -30.3200057182179 20 -116.789200000014 30 2395.49166556936 11 -35.6525584815511 21 -841.493538994769 31 2401.98939991186 12 -35.6525584815506 22 -116.789200000014 32 2401.98939991186 13 -35.6525584815506 23 -116.789200000014 33 2401.98939991186 70 1 0 3DFACE 8 gearbox_half 10 -712.59031140046 20 -116.789200000014 30 1614.76108002137 11 -93.4313636055058 21 -70.0735200000139 31 1614.76108002137 12 -717.191404282444 22 -70.0735200000139 32 1614.76108002137 13 -717.191404282444 23 -70.0735200000139 33 1614.76108002137 70 1 0 3DFACE 8 gearbox_half 10 -93.4313636055058 20 -70.0735200000139 30 1614.76108002137 11 -712.59031140046 21 -116.789200000014 31 1614.76108002137 12 -93.4313636055058 22 -116.789200000014 32 1614.76108002137 13 -93.4313636055058 23 -116.789200000014 33 1614.76108002137 70 1 0 3DFACE 8 gearbox_half 10 8.36529609247178 20 -741.60397762106 30 2467.86677472752 11 16.4090994539477 21 -116.789200000014 31 2465.42671365422 12 8.36529609247169 22 -116.789200000014 32 2467.86677472752 13 8.36529609247169 23 -116.789200000014 33 2467.86677472752 70 1 0 3DFACE 8 gearbox_half 10 16.4090994539477 20 -116.789200000014 30 2465.42671365422 11 8.36529609247178 21 -741.60397762106 31 2467.86677472752 12 16.4090994539477 22 -741.556408807198 32 2465.42671365422 13 16.4090994539477 23 -741.556408807198 33 2465.42671365422 70 1 0 3DFACE 8 gearbox_half 10 -42.0550500581767 20 -70.0735200000139 30 1688.63771501308 11 -39.6149758455043 21 -116.789200000014 31 1696.68151436742 12 -42.0550500581767 22 -116.789200000014 32 1688.63771501308 13 -42.0550500581767 23 -116.789200000014 33 1688.63771501308 70 1 0 3DFACE 8 gearbox_half 10 -39.6149758455043 20 -116.789200000014 30 1696.68151436742 11 -42.0550500581767 21 -70.0735200000139 31 1688.63771501308 12 -39.6149758455043 22 -70.0735200000139 32 1696.68151436742 13 -39.6149758455043 23 -70.0735200000139 33 1696.68151436742 70 1 0 3DFACE 8 gearbox_half 10 42.0550895628442 20 -70.0735200000139 30 1671.90702512775 11 39.6150153501718 21 -116.789200000014 31 1663.86322577341 12 42.0550895628442 22 -116.789200000014 32 1671.90702512775 13 42.0550895628442 23 -116.789200000014 33 1671.90702512775 70 1 0 3DFACE 8 gearbox_half 10 39.6150153501718 20 -116.789200000014 30 1663.86322577341 11 42.0550895628442 21 -70.0735200000139 31 1671.90702512775 12 39.6150153501718 22 -70.0735200000139 32 1663.86322577341 13 39.6150153501718 23 -70.0735200000139 33 1663.86322577341 70 1 0 3DFACE 8 gearbox_half 10 -35.6525584815506 20 0.0 30 2449.63398237639 11 -39.6150026535464 21 -70.0735200000139 31 2442.22077074152 12 -35.6525584815506 22 -70.0735200000139 32 2449.63398237639 13 -35.6525584815506 23 -70.0735200000139 33 2449.63398237639 70 1 0 3DFACE 8 gearbox_half 10 -39.6150026535464 20 -70.0735200000139 30 2442.22077074152 11 -35.6525584815506 21 0.0 31 2449.63398237639 12 -39.6150026535464 22 0.0 32 2442.22077074152 13 -39.6150026535464 23 0.0 33 2442.22077074152 70 1 0 3DFACE 8 gearbox_half 10 -93.4313636055058 20 -70.0735200000139 30 2549.07468002137 11 -93.4313636055058 21 -116.789200000014 31 1614.76108002137 12 -93.4313636055058 22 -116.789200000014 32 2549.07468002137 13 -93.4313636055058 23 -116.789200000014 33 2549.07468002137 70 1 0 3DFACE 8 gearbox_half 10 -93.4313636055058 20 -116.789200000014 30 1614.76108002137 11 -93.4313636055058 21 -70.0735200000139 31 2549.07468002137 12 -93.4313636055058 22 -70.0735200000139 32 1614.76108002137 13 -93.4313636055058 23 -70.0735200000139 33 1614.76108002137 70 1 0 3DFACE 8 gearbox_half 10 6.64680129382589e-05 20 -70.0735200000139 30 2078.08114458081 11 -8.36521064520558 21 -116.789200000014 31 2077.25724590065 12 -8.36521064520558 22 -70.0735200000139 32 2077.25724590065 13 -8.36521064520558 23 -70.0735200000139 33 2077.25724590065 70 1 0 3DFACE 8 gearbox_half 10 -8.36521064520558 20 -116.789200000014 30 2077.25724590065 11 6.64680129382589e-05 21 -70.0735200000139 31 2078.08114458081 12 6.64680129382589e-05 22 -116.789200000014 32 2078.08114458081 13 6.64680129382589e-05 23 -116.789200000014 33 2078.08114458081 70 1 0 3DFACE 8 gearbox_half 10 30.3200782863833 20 -70.0735200000139 30 2065.5221457738 11 23.8223497693652 21 -116.789200000014 31 2070.8547056033 12 23.8223497693652 22 -70.0735200000139 32 2070.8547056033 13 23.8223497693652 23 -70.0735200000139 33 2070.8547056033 70 1 0 3DFACE 8 gearbox_half 10 23.8223497693652 20 -116.789200000014 30 2070.8547056033 11 30.3200782863833 21 -70.0735200000139 31 2065.5221457738 12 30.3200782863833 22 -116.789200000014 32 2065.5221457738 13 30.3200782863833 23 -116.789200000014 33 2065.5221457738 70 1 0 3DFACE 8 gearbox_half 10 -16.4090166455219 20 -70.0735200000139 30 2074.81719359682 11 -23.8222325793624 21 -116.789200000014 31 2070.85475751098 12 -23.8222325793624 22 -70.0735200000139 32 2070.85475751098 13 -23.8222325793624 23 -70.0735200000139 33 2070.85475751098 70 1 0 3DFACE 8 gearbox_half 10 -23.8222325793624 20 -116.789200000014 30 2070.85475751098 11 -16.4090166455219 21 -70.0735200000139 31 2074.81719359682 12 -16.4090166455219 22 -116.789200000014 32 2074.81719359682 13 -16.4090166455219 23 -116.789200000014 33 2074.81719359682 70 1 0 3DFACE 8 gearbox_half 10 1.9856550251518e-05 20 -741.653447536011 30 2468.69068252346 11 8.36529609247169 21 -116.789200000014 31 2467.86677472752 12 1.98565501612791e-05 22 -116.789200000014 32 2468.69068252346 13 1.98565501612791e-05 23 -116.789200000014 33 2468.69068252346 70 1 0 3DFACE 8 gearbox_half 10 8.36529609247169 20 -116.789200000014 30 2467.86677472752 11 1.9856550251518e-05 21 -741.653447536011 31 2468.69068252346 12 8.36529609247178 22 -741.60397762106 32 2467.86677472752 13 8.36529609247178 23 -741.60397762106 33 2467.86677472752 70 1 0 3DFACE 8 gearbox_half 10 -8.36525637937127 20 0.0 30 2383.75660756074 11 -16.4090597408473 21 -70.0735200000139 31 2386.19666863403 12 -16.4090597408473 22 0.0 32 2386.19666863403 13 -16.4090597408473 23 0.0 33 2386.19666863403 70 1 0 3DFACE 8 gearbox_half 10 -16.4090597408473 20 -70.0735200000139 30 2386.19666863403 11 -8.36525637937127 21 0.0 31 2383.75660756074 12 -8.36525637937127 22 -70.0735200000139 32 2383.75660756074 13 -8.36525637937127 23 -70.0735200000139 33 2383.75660756074 70 1 0 3DFACE 8 gearbox_half 10 30.3200454313183 20 -116.789200000014 30 2395.49166556936 11 35.6525981946511 21 -841.49353899477 31 2401.98939991186 12 30.3200454313184 22 -847.173357521512 32 2395.49166556936 13 30.3200454313184 23 -847.173357521512 33 2395.49166556936 70 1 0 3DFACE 8 gearbox_half 10 35.6525981946511 20 -841.49353899477 30 2401.98939991186 11 30.3200454313183 21 -116.789200000014 31 2395.49166556936 12 35.652598194651 22 -116.789200000014 32 2401.98939991186 13 35.652598194651 23 -116.789200000014 33 2401.98939991186 70 1 0 3DFACE 8 gearbox_half 10 35.652572049941 20 -70.0735200000139 30 2011.37982328866 11 30.3200122204362 21 -116.789200000014 31 2004.88209477165 12 35.652572049941 22 -116.789200000014 32 2011.37982328866 13 35.652572049941 23 -116.789200000014 33 2011.37982328866 70 1 0 3DFACE 8 gearbox_half 10 30.3200122204362 20 -116.789200000014 30 2004.88209477165 11 35.652572049941 21 -70.0735200000139 31 2011.37982328866 12 30.3200122204362 22 -70.0735200000139 32 2004.88209477165 13 30.3200122204362 23 -70.0735200000139 33 2004.88209477165 70 1 0 3DFACE 8 gearbox_half 10 -16.4091245446726 20 -116.789200000014 30 1640.65737447258 11 -23.8223296860324 21 -70.0735200000139 31 1644.61983074973 12 -23.8223296860324 22 -116.789200000014 32 1644.61983074973 13 -23.8223296860324 23 -116.789200000014 33 1644.61983074973 70 1 0 3DFACE 8 gearbox_half 10 -23.8223296860324 20 -70.0735200000139 30 1644.61983074973 11 -16.4091245446726 21 -116.789200000014 31 1640.65737447258 12 -16.4091245446726 22 -70.0735200000139 32 1640.65737447258 13 -16.4091245446726 23 -70.0735200000139 33 1640.65737447258 70 1 0 3DFACE 8 gearbox_half 10 35.652598194651 20 0.0 30 2449.63398237639 11 30.3200454313183 21 -70.0735200000139 31 2456.13171671889 12 35.652598194651 22 -70.0735200000139 32 2449.63398237639 13 35.652598194651 23 -70.0735200000139 33 2449.63398237639 70 1 0 3DFACE 8 gearbox_half 10 30.3200454313183 20 -70.0735200000139 30 2456.13171671889 11 35.652598194651 21 0.0 31 2449.63398237639 12 30.3200454313183 22 0.0 32 2456.13171671889 13 30.3200454313183 23 0.0 33 2456.13171671889 70 1 0 3DFACE 8 gearbox_half 10 -2.69633454074381e-05 20 -116.789200000014 30 1992.32316203057 11 -8.36530228130657 21 -70.0735200000139 31 1993.1470789383 12 -8.36530228130657 22 -116.789200000014 32 1993.1470789383 13 -8.36530228130657 23 -116.789200000014 33 1993.1470789383 70 1 0 3DFACE 8 gearbox_half 10 -8.36530228130657 20 -70.0735200000139 30 1993.1470789383 11 -2.69633454074381e-05 21 -116.789200000014 31 1992.32316203057 12 -2.69633454074381e-05 22 -70.0735200000139 32 1992.32316203057 13 -2.69633454074381e-05 23 -70.0735200000139 33 1992.32316203057 70 1 0 3DFACE 8 gearbox_half 10 42.0551123472866 20 -70.0735200000139 30 2043.56738370323 11 42.8790110274535 21 -116.789200000014 31 2035.20210659002 12 42.0551123472866 22 -116.789200000014 32 2043.56738370323 13 42.0551123472866 23 -116.789200000014 33 2043.56738370323 70 1 0 3DFACE 8 gearbox_half 10 42.8790110274535 20 -116.789200000014 30 2035.20210659002 11 42.0551123472866 21 -70.0735200000139 31 2043.56738370323 12 42.8790110274535 22 -70.0735200000139 32 2035.20210659002 13 42.8790110274535 23 -70.0735200000139 33 2035.20210659002 70 1 0 3DFACE 8 gearbox_half 10 8.36536469500046 20 -70.0735200000139 30 1722.32743988093 11 8.98258536075502e-05 21 -116.789200000014 31 1723.15136134553 12 8.98258536075502e-05 22 -70.0735200000139 32 1723.15136134553 13 8.98258536075502e-05 23 -70.0735200000139 33 1723.15136134553 70 1 0 3DFACE 8 gearbox_half 10 8.98258536075502e-05 20 -116.789200000014 30 1723.15136134553 11 8.36536469500046 21 -70.0735200000139 31 1722.32743988093 12 8.36536469500046 22 -116.789200000014 32 1722.32743988093 13 8.36536469500046 23 -116.789200000014 33 1722.32743988093 70 1 0 3DFACE 8 gearbox_half 10 1.98565501612791e-05 20 -70.0735200000139 30 2468.69068252346 11 -8.36525637937127 21 0.0 31 2467.86677472752 12 -8.36525637937127 22 -70.0735200000139 32 2467.86677472752 13 -8.36525637937127 23 -70.0735200000139 33 2467.86677472752 70 1 0 3DFACE 8 gearbox_half 10 -8.36525637937127 20 0.0 30 2467.86677472752 11 1.98565501612791e-05 21 -70.0735200000139 31 2468.69068252346 12 1.98565501612791e-05 22 0.0 32 2468.69068252346 13 1.98565501612791e-05 23 0.0 33 2468.69068252346 70 1 0 3DFACE 8 gearbox_half 10 -39.6150026535458 20 -741.887719751186 30 2442.22077074152 11 -42.0550637268397 21 -116.789200000014 31 2434.17696738005 12 -42.0550637268397 22 -741.902149593115 32 2434.17696738005 13 -42.0550637268397 23 -741.902149593115 33 2434.17696738005 70 1 0 3DFACE 8 gearbox_half 10 -42.0550637268397 20 -116.789200000014 30 2434.17696738005 11 -39.6150026535458 21 -741.887719751186 31 2442.22077074152 12 -39.6150026535464 22 -116.789200000014 32 2442.22077074152 13 -39.6150026535464 23 -116.789200000014 33 2442.22077074152 70 1 0 3DFACE 8 gearbox_half 10 8.98258536075502e-05 20 -70.0735200000139 30 1723.15136134553 11 -8.36518773617931 21 -116.789200000014 31 1722.32746722226 12 -8.36518773617931 22 -70.0735200000139 32 1722.32746722226 13 -8.36518773617931 23 -70.0735200000139 33 1722.32746722226 70 1 0 3DFACE 8 gearbox_half 10 -8.36518773617931 20 -116.789200000014 30 1722.32746722226 11 8.98258536075502e-05 21 -70.0735200000139 31 1723.15136134553 12 8.98258536075502e-05 22 -116.789200000014 32 1723.15136134553 13 8.98258536075502e-05 23 -116.789200000014 33 1723.15136134553 70 1 0 3DFACE 8 gearbox_half 10 -8.36532519033293 20 -116.789200000014 30 1638.2173002599 11 -16.4091245446726 21 -70.0735200000139 31 1640.65737447258 12 -16.4091245446726 22 -116.789200000014 32 1640.65737447258 13 -16.4091245446726 23 -116.789200000014 33 1640.65737447258 70 1 0 3DFACE 8 gearbox_half 10 -16.4091245446726 20 -70.0735200000139 30 1640.65737447258 11 -8.36532519033293 21 -116.789200000014 31 1638.2173002599 12 -8.36532519033293 22 -70.0735200000139 32 1638.2173002599 13 -8.36532519033293 23 -70.0735200000139 33 1638.2173002599 70 1 0 3DFACE 8 gearbox_half 10 93.4313563944944 20 -116.789200000014 30 2549.07468002137 11 -93.4313636055058 21 -70.0735200000139 31 2549.07468002137 12 -93.4313636055058 22 -116.789200000014 32 2549.07468002137 13 -93.4313636055058 23 -116.789200000014 33 2549.07468002137 70 1 0 3DFACE 8 gearbox_half 10 -93.4313636055058 20 -70.0735200000139 30 2549.07468002137 11 93.4313563944944 21 -116.789200000014 31 2549.07468002137 12 93.4313563944944 22 -70.0735200000139 32 2549.07468002137 13 93.4313563944944 23 -70.0735200000139 33 2549.07468002137 70 1 0 3DFACE 8 gearbox_half 10 42.0551034399401 20 -741.404745478907 30 2434.17696738005 11 39.6150423666468 21 -116.789200000014 31 2442.22077074152 12 39.6150423666469 22 -741.419175320836 32 2442.22077074152 13 39.6150423666469 23 -741.419175320836 33 2442.22077074152 70 1 0 3DFACE 8 gearbox_half 10 39.6150423666468 20 -116.789200000014 30 2442.22077074152 11 42.0551034399401 21 -741.404745478907 31 2434.17696738005 12 42.05510343994 22 -116.789200000014 32 2434.17696738005 13 42.05510343994 23 -116.789200000014 33 2434.17696738005 70 1 0 3DFACE 8 gearbox_half 10 -8.36525637937127 20 -116.789200000014 30 2383.75660756074 11 -16.4090597408471 21 -855.298327398157 31 2386.19666863403 12 -16.4090597408473 22 -116.789200000014 32 2386.19666863403 13 -16.4090597408473 23 -116.789200000014 33 2386.19666863403 70 1 0 3DFACE 8 gearbox_half 10 -16.4090597408471 20 -855.298327398157 30 2386.19666863403 11 -8.36525637937127 21 -116.789200000014 31 2383.75660756074 12 -8.36525637937127 22 -857.431240712236 32 2383.75660756074 13 -8.36525637937127 23 -857.431240712236 33 2383.75660756074 70 1 0 3DFACE 8 gearbox_half 10 16.4090561501895 20 -116.789200000014 30 1995.58711301456 11 8.36525014987311 21 -70.0735200000139 31 1993.14706071074 12 8.36525014987311 22 -116.789200000014 32 1993.14706071074 13 8.36525014987311 23 -116.789200000014 33 1993.14706071074 70 1 0 3DFACE 8 gearbox_half 10 8.36525014987311 20 -70.0735200000139 30 1993.14706071074 11 16.4090561501895 21 -116.789200000014 31 1995.58711301456 12 16.4090561501895 22 -70.0735200000139 32 1995.58711301456 13 16.4090561501895 23 -70.0735200000139 33 1995.58711301456 70 1 0 3DFACE 8 gearbox_half 10 42.8790110274535 20 -70.0735200000139 30 1680.2722999969 11 42.0550895628442 21 -116.789200000014 31 1671.90702512775 12 42.8790110274535 22 -116.789200000014 32 1680.2722999969 13 42.8790110274535 23 -116.789200000014 33 1680.2722999969 70 1 0 3DFACE 8 gearbox_half 10 42.0550895628442 20 -116.789200000014 30 1671.90702512775 11 42.8790110274535 21 -70.0735200000139 31 1680.2722999969 12 42.0550895628442 22 -70.0735200000139 32 1671.90702512775 13 42.0550895628442 23 -70.0735200000139 33 1671.90702512775 70 1 0 3DFACE 8 gearbox_half 10 39.615068982122 20 -70.0735200000139 30 1696.68138488844 11 42.0551169041753 21 -116.789200000014 31 1688.63757755893 12 39.615068982122 22 -116.789200000014 32 1696.68138488844 13 39.615068982122 23 -116.789200000014 33 1696.68138488844 70 1 0 3DFACE 8 gearbox_half 10 42.0551169041753 20 -116.789200000014 30 1688.63757755893 11 39.615068982122 21 -70.0735200000139 31 1696.68138488844 12 42.0551169041753 22 -70.0735200000139 32 1688.63757755893 13 42.0551169041753 23 -70.0735200000139 33 1688.63757755893 70 1 0 3DFACE 8 gearbox_half 10 -35.652597429876 20 -70.0735200000139 30 1656.45013716005 11 -39.6150294774544 21 -116.789200000014 31 1663.86335525239 12 -35.652597429876 22 -116.789200000014 32 1656.45013716005 13 -35.652597429876 23 -116.789200000014 33 1656.45013716005 70 1 0 3DFACE 8 gearbox_half 10 -39.6150294774544 20 -116.789200000014 30 1663.86335525239 11 -35.652597429876 21 -70.0735200000139 31 1656.45013716005 12 -39.6150294774544 22 -70.0735200000139 32 1663.86335525239 13 -39.6150294774544 23 -70.0735200000139 33 1663.86335525239 70 1 0 3DFACE 8 gearbox_half 10 39.6150600434633 20 -70.0735200000139 30 2051.61118970355 11 42.0551123472866 21 -116.789200000014 31 2043.56738370323 12 39.6150600434633 22 -116.789200000014 32 2051.61118970355 13 39.6150600434633 23 -116.789200000014 33 2051.61118970355 70 1 0 3DFACE 8 gearbox_half 10 42.0551123472866 20 -116.789200000014 30 2043.56738370323 11 39.6150600434633 21 -70.0735200000139 31 2051.61118970355 12 42.0551123472866 22 -70.0735200000139 32 2043.56738370323 13 42.0551123472866 23 -70.0735200000139 33 2043.56738370323 70 1 0 3DFACE 8 gearbox_half 10 8.36529609247169 20 -857.431240712237 30 2383.75660756074 11 -8.36525637937127 21 -857.431240712236 31 2383.75660756074 12 1.98565501612791e-05 22 -858.151437401893 32 2382.93269976479 13 1.98565501612791e-05 23 -858.151437401893 33 2382.93269976479 70 1 0 3DFACE 8 gearbox_half 10 -8.36525637937127 20 -857.431240712236 30 2383.75660756074 11 8.36529609247169 21 -857.431240712237 31 2383.75660756074 12 16.4090994539476 22 -855.298327398158 32 2386.19666863403 13 16.4090994539476 23 -855.298327398158 33 2386.19666863403 70 13 0 3DFACE 8 gearbox_half 10 -8.36525637937127 20 -857.431240712236 30 2383.75660756074 11 16.4090994539476 21 -855.298327398158 31 2386.19666863403 12 -16.4090597408471 22 -855.298327398157 32 2386.19666863403 13 -16.4090597408471 23 -855.298327398157 33 2386.19666863403 70 3 0 3DFACE 8 gearbox_half 10 -16.4090597408471 20 -855.298327398157 30 2386.19666863403 11 16.4090994539476 21 -855.298327398158 31 2386.19666863403 12 23.8223110888136 22 -851.834664122165 32 2390.15911280603 13 23.8223110888136 23 -851.834664122165 33 2390.15911280603 70 13 0 3DFACE 8 gearbox_half 10 -16.4090597408471 20 -855.298327398157 30 2386.19666863403 11 23.8223110888136 21 -851.834664122165 31 2390.15911280603 12 -23.822271375713 22 -851.834664122165 32 2390.15911280603 13 -23.822271375713 23 -851.834664122165 33 2390.15911280603 70 3 0 3DFACE 8 gearbox_half 10 -23.822271375713 20 -851.834664122165 30 2390.15911280603 11 23.8223110888136 21 -851.834664122165 31 2390.15911280603 12 30.3200454313184 22 -847.173357521512 32 2395.49166556936 13 30.3200454313184 23 -847.173357521512 33 2395.49166556936 70 13 0 3DFACE 8 gearbox_half 10 -23.822271375713 20 -851.834664122165 30 2390.15911280603 11 30.3200454313184 21 -847.173357521512 31 2395.49166556936 12 -30.3200057182178 22 -847.173357521512 32 2395.49166556936 13 -30.3200057182178 23 -847.173357521512 33 2395.49166556936 70 3 0 3DFACE 8 gearbox_half 10 -30.3200057182178 20 -847.173357521512 30 2395.49166556936 11 30.3200454313184 21 -847.173357521512 31 2395.49166556936 12 35.6525981946511 22 -841.49353899477 32 2401.98939991186 13 35.6525981946511 23 -841.49353899477 33 2401.98939991186 70 13 0 3DFACE 8 gearbox_half 10 -30.3200057182178 20 -847.173357521512 30 2395.49166556936 11 35.6525981946511 21 -841.49353899477 31 2401.98939991186 12 -35.6525584815511 22 -841.493538994769 32 2401.98939991186 13 -35.6525584815511 23 -841.493538994769 33 2401.98939991186 70 3 0 3DFACE 8 gearbox_half 10 -35.6525584815511 20 -841.493538994769 30 2401.98939991186 11 35.6525981946511 21 -841.49353899477 31 2401.98939991186 12 39.3611647970471 22 -835.428664280087 32 2408.9276400213 13 39.3611647970471 23 -835.428664280087 33 2408.9276400213 70 13 0 3DFACE 8 gearbox_half 10 -35.6525584815511 20 -841.493538994769 30 2401.98939991186 11 39.3611647970471 21 -835.428664280087 31 2408.9276400213 12 -39.3611250839466 22 -835.428664280087 32 2408.9276400213 13 -39.3611250839466 23 -835.428664280087 33 2408.9276400213 70 1 0 3DFACE 8 gearbox_half 10 16.4090994539476 20 -116.789200000014 30 2386.19666863403 11 8.36529609247169 21 -857.431240712237 31 2383.75660756074 12 8.36529609247169 22 -116.789200000014 32 2383.75660756074 13 8.36529609247169 23 -116.789200000014 33 2383.75660756074 70 1 0 3DFACE 8 gearbox_half 10 8.36529609247169 20 -857.431240712237 30 2383.75660756074 11 16.4090994539476 21 -116.789200000014 31 2386.19666863403 12 16.4090994539476 22 -855.298327398158 32 2386.19666863403 13 16.4090994539476 23 -855.298327398158 33 2386.19666863403 70 1 0 3DFACE 8 gearbox_half 10 -30.3200057182176 20 -741.832751726833 30 2456.13171671889 11 -23.8222713757131 21 -116.789200000014 31 2461.46426948223 12 -30.3200057182179 22 -116.789200000014 32 2456.13171671889 13 -30.3200057182179 23 -116.789200000014 33 2456.13171671889 70 1 0 3DFACE 8 gearbox_half 10 -23.8222713757131 20 -116.789200000014 30 2461.46426948223 11 -30.3200057182176 21 -741.832751726833 31 2456.13171671889 12 -23.822271375713 22 -741.794325934758 32 2461.46426948223 13 -23.822271375713 23 -741.794325934758 33 2461.46426948223 70 1 0 3DFACE 8 gearbox_half 10 93.4322738363532 20 -70.0735200000139 30 1614.76107890595 11 93.4313563944944 21 -116.789200000014 31 2549.07468002137 12 93.4322738363532 22 -116.789200000014 32 1614.76107890595 13 93.4322738363532 23 -116.789200000014 33 1614.76107890595 70 1 0 3DFACE 8 gearbox_half 10 93.4313563944944 20 -116.789200000014 30 2549.07468002137 11 93.4322738363532 21 -70.0735200000139 31 1614.76107890595 12 93.4313563944944 22 -70.0735200000139 32 2549.07468002137 13 93.4313563944944 23 -70.0735200000139 33 2549.07468002137 70 1 0 3DFACE 8 gearbox_half 10 -30.3200057182176 20 -741.832751726833 30 2456.13171671889 11 -35.6525584815506 21 -116.789200000014 31 2449.63398237639 12 -35.6525584815506 22 -741.864286959411 32 2449.63398237639 13 -35.6525584815506 23 -741.864286959411 33 2449.63398237639 70 1 0 3DFACE 8 gearbox_half 10 -35.6525584815506 20 -116.789200000014 30 2449.63398237639 11 -30.3200057182176 21 -741.832751726833 31 2456.13171671889 12 -30.3200057182179 22 -116.789200000014 32 2456.13171671889 13 -30.3200057182179 23 -116.789200000014 33 2456.13171671889 70 1 0 3DFACE 8 gearbox_half 10 23.8223110888135 20 -116.789200000014 30 2390.15911280603 11 16.4090994539476 21 -855.298327398158 31 2386.19666863403 12 16.4090994539476 22 -116.789200000014 32 2386.19666863403 13 16.4090994539476 23 -116.789200000014 33 2386.19666863403 70 1 0 3DFACE 8 gearbox_half 10 16.4090994539476 20 -855.298327398158 30 2386.19666863403 11 23.8223110888135 21 -116.789200000014 31 2390.15911280603 12 23.8223110888136 22 -851.834664122165 32 2390.15911280603 13 23.8223110888136 23 -851.834664122165 33 2390.15911280603 70 1 0 3DFACE 8 gearbox_half 10 30.3200782863833 20 -70.0735200000139 30 2065.5221457738 11 35.6526239576226 21 -116.789200000014 31 2059.02440563739 12 30.3200782863833 22 -116.789200000014 32 2065.5221457738 13 30.3200782863833 23 -116.789200000014 33 2065.5221457738 70 1 0 3DFACE 8 gearbox_half 10 35.6526239576226 20 -116.789200000014 30 2059.02440563739 11 30.3200782863833 21 -70.0735200000139 31 2065.5221457738 12 35.6526239576226 22 -70.0735200000139 32 2059.02440563739 13 35.6526239576226 23 -70.0735200000139 33 2059.02440563739 70 1 0 3DFACE 8 gearbox_half 10 16.4090345703586 20 -116.789200000014 30 1640.65732084063 11 8.36522724084684 21 -70.0735200000139 31 1638.21727291857 12 8.36522724084684 22 -116.789200000014 32 1638.21727291857 13 8.36522724084684 23 -116.789200000014 33 1638.21727291857 70 1 0 3DFACE 8 gearbox_half 10 8.36522724084684 20 -70.0735200000139 30 1638.21727291857 11 16.4090345703586 21 -116.789200000014 31 1640.65732084063 12 16.4090345703586 22 -70.0735200000139 32 1640.65732084063 13 16.4090345703586 23 -70.0735200000139 33 1640.65732084063 70 1 0 3DFACE 8 gearbox_half 10 39.6150423666467 20 0.0 30 2409.40261154673 11 42.05510343994 21 -70.0735200000139 31 2417.44641490821 12 39.6150423666467 22 -70.0735200000139 32 2409.40261154673 13 39.6150423666467 23 -70.0735200000139 33 2409.40261154673 70 1 0 3DFACE 8 gearbox_half 10 42.05510343994 20 -70.0735200000139 30 2417.44641490821 11 39.6150423666467 21 0.0 31 2409.40261154673 12 42.05510343994 22 0.0 32 2417.44641490821 13 42.05510343994 23 0.0 33 2417.44641490821 70 1 0 3DFACE 8 gearbox_half 10 39.3611647970476 20 -741.420676682108 30 2408.9276400213 11 -39.615002653547 21 -741.887719751186 31 2409.40261154673 12 -39.3611250839469 22 -741.886218389914 32 2408.9276400213 13 -39.3611250839469 23 -741.886218389914 33 2408.9276400213 70 1 0 3DFACE 8 gearbox_half 10 -39.615002653547 20 -741.887719751186 30 2409.40261154673 11 39.3611647970476 21 -741.420676682108 31 2408.9276400213 12 39.6150423666477 22 -741.419175320836 32 2409.40261154673 13 39.6150423666477 23 -741.419175320836 33 2409.40261154673 70 13 0 3DFACE 8 gearbox_half 10 -39.615002653547 20 -741.887719751186 30 2409.40261154673 11 39.6150423666477 21 -741.419175320836 31 2409.40261154673 12 -42.0550637268399 22 -741.902149593115 32 2417.44641490821 13 -42.0550637268399 23 -741.902149593115 33 2417.44641490821 70 3 0 3DFACE 8 gearbox_half 10 -42.0550637268399 20 -741.902149593115 30 2417.44641490821 11 39.6150423666477 21 -741.419175320836 31 2409.40261154673 12 42.0551034399399 22 -741.404745478908 32 2417.44641490821 13 42.0551034399399 23 -741.404745478908 33 2417.44641490821 70 13 0 3DFACE 8 gearbox_half 10 -42.0550637268399 20 -741.902149593115 30 2417.44641490821 11 42.0551034399399 21 -741.404745478908 31 2417.44641490821 12 42.8790112358864 22 -741.39987311756 32 2425.81169114413 13 42.8790112358864 23 -741.39987311756 33 2425.81169114413 70 13 0 3DFACE 8 gearbox_half 10 -42.0550637268399 20 -741.902149593115 30 2417.44641490821 11 42.8790112358864 21 -741.39987311756 31 2425.81169114413 12 -42.878971522786 22 -741.907021954462 32 2425.81169114413 13 -42.878971522786 23 -741.907021954462 33 2425.81169114413 70 3 0 3DFACE 8 gearbox_half 10 -42.878971522786 20 -741.907021954462 30 2425.81169114413 11 42.8790112358864 21 -741.39987311756 31 2425.81169114413 12 42.0551034399401 22 -741.404745478907 32 2434.17696738005 13 42.0551034399401 23 -741.404745478907 33 2434.17696738005 70 13 0 3DFACE 8 gearbox_half 10 -42.878971522786 20 -741.907021954462 30 2425.81169114413 11 42.0551034399401 21 -741.404745478907 31 2434.17696738005 12 -42.0550637268397 22 -741.902149593115 32 2434.17696738005 13 -42.0550637268397 23 -741.902149593115 33 2434.17696738005 70 3 0 3DFACE 8 gearbox_half 10 -42.0550637268397 20 -741.902149593115 30 2434.17696738005 11 42.0551034399401 21 -741.404745478907 31 2434.17696738005 12 39.6150423666469 22 -741.419175320836 32 2442.22077074152 13 39.6150423666469 23 -741.419175320836 33 2442.22077074152 70 13 0 3DFACE 8 gearbox_half 10 -42.0550637268397 20 -741.902149593115 30 2434.17696738005 11 39.6150423666469 21 -741.419175320836 31 2442.22077074152 12 -39.6150026535458 22 -741.887719751186 32 2442.22077074152 13 -39.6150026535458 23 -741.887719751186 33 2442.22077074152 70 3 0 3DFACE 8 gearbox_half 10 -39.6150026535458 20 -741.887719751186 30 2442.22077074152 11 39.6150423666469 21 -741.419175320836 31 2442.22077074152 12 35.6525981946522 22 -741.442608112612 32 2449.63398237639 13 35.6525981946522 23 -741.442608112612 33 2449.63398237639 70 13 0 3DFACE 8 gearbox_half 10 -39.6150026535458 20 -741.887719751186 30 2442.22077074152 11 35.6525981946522 21 -741.442608112612 31 2449.63398237639 12 -35.6525584815506 22 -741.864286959411 32 2449.63398237639 13 -35.6525584815506 23 -741.864286959411 33 2449.63398237639 70 3 0 3DFACE 8 gearbox_half 10 -35.6525584815506 20 -741.864286959411 30 2449.63398237639 11 35.6525981946522 21 -741.442608112612 31 2449.63398237639 12 30.3200454313182 22 -741.474143345189 32 2456.13171671889 13 30.3200454313182 23 -741.474143345189 33 2456.13171671889 70 13 0 3DFACE 8 gearbox_half 10 -35.6525584815506 20 -741.864286959411 30 2449.63398237639 11 30.3200454313182 21 -741.474143345189 31 2456.13171671889 12 -30.3200057182176 22 -741.832751726833 32 2456.13171671889 13 -30.3200057182176 23 -741.832751726833 33 2456.13171671889 70 3 0 3DFACE 8 gearbox_half 10 -30.3200057182176 20 -741.832751726833 30 2456.13171671889 11 30.3200454313182 21 -741.474143345189 31 2456.13171671889 12 23.8223110888134 22 -741.512569137265 32 2461.46426948223 13 23.8223110888134 23 -741.512569137265 33 2461.46426948223 70 13 0 3DFACE 8 gearbox_half 10 -30.3200057182176 20 -741.832751726833 30 2456.13171671889 11 23.8223110888134 21 -741.512569137265 31 2461.46426948223 12 -23.822271375713 22 -741.794325934758 32 2461.46426948223 13 -23.822271375713 23 -741.794325934758 33 2461.46426948223 70 3 0 3DFACE 8 gearbox_half 10 -23.822271375713 20 -741.794325934758 30 2461.46426948223 11 23.8223110888134 21 -741.512569137265 31 2461.46426948223 12 -16.4090597408471 22 -741.750486264824 32 2465.42671365422 13 -16.4090597408471 23 -741.750486264824 33 2465.42671365422 70 3 0 3DFACE 8 gearbox_half 10 -16.4090597408471 20 -741.750486264824 30 2465.42671365422 11 23.8223110888134 21 -741.512569137265 31 2461.46426948223 12 16.4090994539477 22 -741.556408807198 32 2465.42671365422 13 16.4090994539477 23 -741.556408807198 33 2465.42671365422 70 13 0 3DFACE 8 gearbox_half 10 -16.4090597408471 20 -741.750486264824 30 2465.42671365422 11 16.4090994539477 21 -741.556408807198 31 2465.42671365422 12 -8.36525637937127 22 -741.702917450962 32 2467.86677472752 13 -8.36525637937127 23 -741.702917450962 33 2467.86677472752 70 3 0 3DFACE 8 gearbox_half 10 -8.36525637937127 20 -741.702917450962 30 2467.86677472752 11 16.4090994539477 21 -741.556408807198 31 2465.42671365422 12 8.36529609247178 22 -741.60397762106 32 2467.86677472752 13 8.36529609247178 23 -741.60397762106 33 2467.86677472752 70 13 0 3DFACE 8 gearbox_half 10 -8.36525637937127 20 -741.702917450962 30 2467.86677472752 11 8.36529609247178 21 -741.60397762106 31 2467.86677472752 12 1.9856550251518e-05 22 -741.653447536011 32 2468.69068252346 13 1.9856550251518e-05 23 -741.653447536011 33 2468.69068252346 70 1 0 3DFACE 8 gearbox_half 10 8.36529609247169 20 -70.0735200000139 30 2467.86677472752 11 1.98565501612791e-05 21 0.0 31 2468.69068252346 12 1.98565501612791e-05 22 -70.0735200000139 32 2468.69068252346 13 1.98565501612791e-05 23 -70.0735200000139 33 2468.69068252346 70 1 0 3DFACE 8 gearbox_half 10 1.98565501612791e-05 20 0.0 30 2468.69068252346 11 8.36529609247169 21 -70.0735200000139 31 2467.86677472752 12 8.36529609247169 22 0.0 32 2467.86677472752 13 8.36529609247169 23 0.0 33 2467.86677472752 70 1 0 3DFACE 8 gearbox_half 10 39.6150242888304 20 -70.0735200000139 30 2018.79303058852 11 35.652572049941 21 -116.789200000014 31 2011.37982328866 12 39.6150242888304 22 -116.789200000014 32 2018.79303058852 13 39.6150242888304 23 -116.789200000014 33 2018.79303058852 70 1 0 3DFACE 8 gearbox_half 10 35.652572049941 20 -116.789200000014 30 2011.37982328866 11 39.6150242888304 21 -70.0735200000139 31 2018.79303058852 12 35.652572049941 22 -70.0735200000139 32 2011.37982328866 13 35.652572049941 23 -70.0735200000139 33 2011.37982328866 70 1 0 3DFACE 8 gearbox_half 10 23.8222720840299 20 -116.789200000014 30 1999.54954910041 11 16.4090561501895 21 -70.0735200000139 31 1995.58711301456 12 16.4090561501895 22 -116.789200000014 32 1995.58711301456 13 16.4090561501895 23 -116.789200000014 33 1995.58711301456 70 1 0 3DFACE 8 gearbox_half 10 16.4090561501895 20 -70.0735200000139 30 1995.58711301456 11 23.8222720840299 21 -116.789200000014 31 1999.54954910041 12 23.8222720840299 22 -70.0735200000139 32 1999.54954910041 13 23.8222720840299 23 -70.0735200000139 33 1999.54954910041 70 1 0 3DFACE 8 gearbox_half 10 -42.878971522786 20 -70.0735200000139 30 1680.27244014393 11 -42.0550500581767 21 -116.789200000014 31 1688.63771501308 12 -42.878971522786 22 -116.789200000014 32 1680.27244014393 13 -42.878971522786 23 -116.789200000014 33 1680.27244014393 70 1 0 3DFACE 8 gearbox_half 10 -42.0550500581767 20 -116.789200000014 30 1688.63771501308 11 -42.878971522786 21 -70.0735200000139 31 1680.27244014393 12 -42.0550500581767 22 -70.0735200000139 32 1688.63771501308 13 -42.0550500581767 23 -70.0735200000139 33 1688.63771501308 70 1 0 3DFACE 8 gearbox_half 10 -35.6525584815506 20 0.0 30 2401.98939991186 11 -30.3200057182179 21 -70.0735200000139 31 2395.49166556936 12 -35.6525584815506 22 -70.0735200000139 32 2401.98939991186 13 -35.6525584815506 23 -70.0735200000139 33 2401.98939991186 70 1 0 3DFACE 8 gearbox_half 10 -30.3200057182179 20 -70.0735200000139 30 2395.49166556936 11 -35.6525584815506 21 0.0 31 2401.98939991186 12 -30.3200057182179 22 0.0 32 2395.49166556936 13 -30.3200057182179 23 0.0 33 2395.49166556936 70 1 0 3DFACE 8 gearbox_half 10 30.3200454313183 20 -116.789200000014 30 2395.49166556936 11 23.8223110888136 21 -851.834664122165 31 2390.15911280603 12 23.8223110888135 22 -116.789200000014 32 2390.15911280603 13 23.8223110888135 23 -116.789200000014 33 2390.15911280603 70 1 0 3DFACE 8 gearbox_half 10 23.8223110888136 20 -851.834664122165 30 2390.15911280603 11 30.3200454313183 21 -116.789200000014 31 2395.49166556936 12 30.3200454313184 22 -847.173357521512 32 2395.49166556936 13 30.3200454313184 23 -847.173357521512 33 2395.49166556936 70 1 0 3DFACE 8 gearbox_half 10 -39.6150026535464 20 -116.789200000014 30 2409.40261154673 11 -39.3611250839469 21 -741.886218389914 31 2408.9276400213 12 -39.615002653547 22 -741.887719751186 32 2409.40261154673 13 -39.615002653547 23 -741.887719751186 33 2409.40261154673 70 1 0 3DFACE 8 gearbox_half 10 -39.3611250839466 20 -835.428664280087 30 2408.9276400213 11 -35.6525584815506 21 -116.789200000014 31 2401.98939991186 12 -35.6525584815511 22 -841.493538994769 32 2401.98939991186 13 -35.6525584815511 23 -841.493538994769 33 2401.98939991186 70 1 0 3DFACE 8 gearbox_half 10 -35.6525584815506 20 -116.789200000014 30 2401.98939991186 11 -39.3611250839466 21 -835.428664280087 31 2408.9276400213 12 -39.3611250839469 22 -741.886218389914 32 2408.9276400213 13 -39.3611250839469 23 -741.886218389914 33 2408.9276400213 70 13 0 3DFACE 8 gearbox_half 10 -35.6525584815506 20 -116.789200000014 30 2401.98939991186 11 -39.3611250839469 21 -741.886218389914 31 2408.9276400213 12 -39.6150026535464 22 -116.789200000014 32 2409.40261154673 13 -39.6150026535464 23 -116.789200000014 33 2409.40261154673 70 3 0 3DFACE 8 gearbox_half 10 8.36529609247169 20 0.0 30 2383.75660756074 11 1.98565501612791e-05 21 -70.0735200000139 31 2382.93269976479 12 1.98565501612791e-05 22 0.0 32 2382.93269976479 13 1.98565501612791e-05 23 0.0 33 2382.93269976479 70 1 0 3DFACE 8 gearbox_half 10 1.98565501612791e-05 20 -70.0735200000139 30 2382.93269976479 11 8.36529609247169 21 0.0 31 2383.75660756074 12 8.36529609247169 22 -70.0735200000139 32 2383.75660756074 13 8.36529609247169 23 -70.0735200000139 33 2383.75660756074 70 1 0 3DFACE 8 gearbox_half 10 -5.03211860767294e-05 20 -116.789200000014 30 1637.3933787953 11 -8.36532519033293 21 -70.0735200000139 31 1638.2173002599 12 -8.36532519033293 22 -116.789200000014 32 1638.2173002599 13 -8.36532519033293 23 -116.789200000014 33 1638.2173002599 70 1 0 3DFACE 8 gearbox_half 10 -8.36532519033293 20 -70.0735200000139 30 1638.2173002599 11 -5.03211860767294e-05 21 -116.789200000014 31 1637.3933787953 12 -5.03211860767294e-05 22 -70.0735200000139 32 1637.3933787953 13 -5.03211860767294e-05 23 -70.0735200000139 33 1637.3933787953 70 1 0 3DFACE 8 gearbox_half 10 -8.36530228130657 20 -116.789200000014 30 1993.1470789383 11 -16.4091029648416 21 -70.0735200000139 31 1995.5871487692 12 -16.4091029648416 22 -116.789200000014 32 1995.5871487692 13 -16.4091029648416 23 -116.789200000014 33 1995.5871487692 70 1 0 3DFACE 8 gearbox_half 10 -16.4091029648416 20 -70.0735200000139 30 1995.5871487692 11 -8.36530228130657 21 -116.789200000014 31 1993.1470789383 12 -8.36530228130657 22 -70.0735200000139 32 1993.1470789383 13 -8.36530228130657 23 -70.0735200000139 33 1993.1470789383 70 1 0 3DFACE 8 gearbox_half 10 16.4091424695092 20 -70.0735200000139 30 2074.81715784219 11 8.3653417859741 21 -116.789200000014 31 2077.25722767309 12 8.3653417859741 22 -70.0735200000139 32 2077.25722767309 13 8.3653417859741 23 -70.0735200000139 33 2077.25722767309 70 1 0 3DFACE 8 gearbox_half 10 8.3653417859741 20 -116.789200000014 30 2077.25722767309 11 16.4091424695092 21 -70.0735200000139 31 2074.81715784219 12 16.4091424695092 22 -116.789200000014 32 2074.81715784219 13 16.4091424695092 23 -116.789200000014 33 2074.81715784219 70 1 0 3DFACE 8 gearbox_half 10 30.3200454313183 20 0.0 30 2395.49166556936 11 35.652598194651 21 -70.0735200000139 31 2401.98939991186 12 30.3200454313183 22 -70.0735200000139 32 2395.49166556936 13 30.3200454313183 23 -70.0735200000139 33 2395.49166556936 70 1 0 3DFACE 8 gearbox_half 10 35.652598194651 20 -70.0735200000139 30 2401.98939991186 11 30.3200454313183 21 0.0 31 2395.49166556936 12 35.652598194651 22 0.0 32 2401.98939991186 13 35.652598194651 23 0.0 33 2401.98939991186 70 1 0 3DFACE 8 gearbox_half 10 -8.36525637937127 20 -70.0735200000139 30 2467.86677472752 11 -16.4090597408473 21 0.0 31 2465.42671365422 12 -16.4090597408473 22 -70.0735200000139 32 2465.42671365422 13 -16.4090597408473 23 -70.0735200000139 33 2465.42671365422 70 1 0 3DFACE 8 gearbox_half 10 -16.4090597408473 20 0.0 30 2465.42671365422 11 -8.36525637937127 21 -70.0735200000139 31 2467.86677472752 12 -8.36525637937127 22 0.0 32 2467.86677472752 13 -8.36525637937127 23 0.0 33 2467.86677472752 70 1 0 3DFACE 8 gearbox_half 10 23.8223497693652 20 -70.0735200000139 30 2070.8547056033 11 16.4091424695092 21 -116.789200000014 31 2074.81715784219 12 16.4091424695092 22 -70.0735200000139 32 2074.81715784219 13 16.4091424695092 23 -70.0735200000139 33 2074.81715784219 70 1 0 3DFACE 8 gearbox_half 10 16.4091424695092 20 -116.789200000014 30 2074.81715784219 11 23.8223497693652 21 -70.0735200000139 31 2070.8547056033 12 23.8223497693652 22 -116.789200000014 32 2070.8547056033 13 23.8223497693652 23 -116.789200000014 33 2070.8547056033 70 1 0 3DFACE 8 gearbox_half 10 30.3200122204362 20 -116.789200000014 30 2004.88209477165 11 23.8222720840299 21 -70.0735200000139 31 1999.54954910041 12 23.8222720840299 22 -116.789200000014 32 1999.54954910041 13 23.8222720840299 23 -116.789200000014 33 1999.54954910041 70 1 0 3DFACE 8 gearbox_half 10 23.8222720840299 20 -70.0735200000139 30 1999.54954910041 11 30.3200122204362 21 -116.789200000014 31 2004.88209477165 12 30.3200122204362 22 -70.0735200000139 32 2004.88209477165 13 30.3200122204362 23 -70.0735200000139 33 2004.88209477165 70 1 0 3DFACE 8 gearbox_half 10 30.3200454313183 20 -70.0735200000139 30 2456.13171671889 11 23.8223110888135 21 0.0 31 2461.46426948223 12 23.8223110888135 22 -70.0735200000139 32 2461.46426948223 13 23.8223110888135 23 -70.0735200000139 33 2461.46426948223 70 1 0 3DFACE 8 gearbox_half 10 23.8223110888135 20 0.0 30 2461.46426948223 11 30.3200454313183 21 -70.0735200000139 31 2456.13171671889 12 30.3200454313183 22 0.0 32 2456.13171671889 13 30.3200454313183 23 0.0 33 2456.13171671889 70 1 0 3DFACE 8 gearbox_half 10 -16.4090597408473 20 -70.0735200000139 30 2465.42671365422 11 -23.8222713757131 21 0.0 31 2461.46426948223 12 -23.8222713757131 22 -70.0735200000139 32 2461.46426948223 13 -23.8222713757131 23 -70.0735200000139 33 2461.46426948223 70 1 0 3DFACE 8 gearbox_half 10 -23.8222713757131 20 0.0 30 2461.46426948223 11 -16.4090597408473 21 -70.0735200000139 31 2465.42671365422 12 -16.4090597408473 22 0.0 32 2465.42671365422 13 -16.4090597408473 23 0.0 33 2465.42671365422 70 1 0 3DFACE 8 gearbox_half 10 8.36525014987311 20 -116.789200000014 30 1993.14706071074 11 -2.69633454074381e-05 21 -70.0735200000139 31 1992.32316203057 12 -2.69633454074381e-05 22 -116.789200000014 32 1992.32316203057 13 -2.69633454074381e-05 23 -116.789200000014 33 1992.32316203057 70 1 0 3DFACE 8 gearbox_half 10 -2.69633454074381e-05 20 -70.0735200000139 30 1992.32316203057 11 8.36525014987311 21 -116.789200000014 31 1993.14706071074 12 8.36525014987311 22 -70.0735200000139 32 1993.14706071074 13 8.36525014987311 23 -70.0735200000139 33 1993.14706071074 70 1 0 3DFACE 8 gearbox_half 10 23.8223110888135 20 0.0 30 2390.15911280603 11 16.4090994539476 21 -70.0735200000139 31 2386.19666863403 12 16.4090994539476 22 0.0 32 2386.19666863403 13 16.4090994539476 23 0.0 33 2386.19666863403 70 1 0 3DFACE 8 gearbox_half 10 16.4090994539476 20 -70.0735200000139 30 2386.19666863403 11 23.8223110888135 21 0.0 31 2390.15911280603 12 23.8223110888135 22 -70.0735200000139 32 2390.15911280603 13 23.8223110888135 23 -70.0735200000139 33 2390.15911280603 70 1 0 3DFACE 8 gearbox_half 10 35.65255907302 20 -70.0735200000139 30 1656.45002063205 11 30.3199957039486 21 -116.789200000014 31 1649.95229501988 12 35.65255907302 22 -116.789200000014 32 1656.45002063205 13 35.65255907302 23 -116.789200000014 33 1656.45002063205 70 1 0 3DFACE 8 gearbox_half 10 30.3199957039486 20 -116.789200000014 30 1649.95229501988 11 35.65255907302 21 -70.0735200000139 31 1656.45002063205 12 30.3199957039486 22 -70.0735200000139 32 1649.95229501988 13 30.3199957039486 23 -70.0735200000139 33 1649.95229501988 70 1 0 3DFACE 8 gearbox_half 10 -39.6149758455043 20 -70.0735200000139 30 1696.68151436742 11 -35.6525195683525 21 -116.789200000014 31 1704.09471950878 12 -39.6149758455043 22 -116.789200000014 32 1696.68151436742 13 -39.6149758455043 23 -116.789200000014 33 1696.68151436742 70 1 0 3DFACE 8 gearbox_half 10 -35.6525195683525 20 -116.789200000014 30 1704.09471950878 11 -39.6149758455043 21 -70.0735200000139 31 1696.68151436742 12 -35.6525195683525 22 -70.0735200000139 32 1704.09471950878 13 -35.6525195683525 23 -70.0735200000139 33 1704.09471950878 70 1 0 3DFACE 8 gearbox_half 10 39.6150423666468 20 -116.789200000014 30 2409.40261154673 11 42.0551034399399 21 -741.404745478908 31 2417.44641490821 12 39.6150423666477 22 -741.419175320836 32 2409.40261154673 13 39.6150423666477 23 -741.419175320836 33 2409.40261154673 70 1 0 3DFACE 8 gearbox_half 10 42.0551034399399 20 -741.404745478908 30 2417.44641490821 11 39.6150423666468 21 -116.789200000014 31 2409.40261154673 12 42.05510343994 22 -116.789200000014 32 2417.44641490821 13 42.05510343994 23 -116.789200000014 33 2417.44641490821 70 1 0 3DFACE 8 gearbox_half 10 -30.3200057182179 20 0.0 30 2456.13171671889 11 -35.6525584815506 21 -70.0735200000139 31 2449.63398237639 12 -30.3200057182179 22 -70.0735200000139 32 2456.13171671889 13 -30.3200057182179 23 -70.0735200000139 33 2456.13171671889 70 1 0 3DFACE 8 gearbox_half 10 -35.6525584815506 20 -70.0735200000139 30 2449.63398237639 11 -30.3200057182179 21 0.0 31 2456.13171671889 12 -35.6525584815506 22 0.0 32 2449.63398237639 13 -35.6525584815506 23 0.0 33 2449.63398237639 70 1 0 3DFACE 8 gearbox_half 10 39.6150423666467 20 0.0 30 2442.22077074152 11 35.652598194651 21 -70.0735200000139 31 2449.63398237639 12 39.6150423666467 22 -70.0735200000139 32 2442.22077074152 13 39.6150423666467 23 -70.0735200000139 33 2442.22077074152 70 1 0 3DFACE 8 gearbox_half 10 35.652598194651 20 -70.0735200000139 30 2449.63398237639 11 39.6150423666467 21 0.0 31 2442.22077074152 12 35.652598194651 22 0.0 32 2449.63398237639 13 35.652598194651 23 0.0 33 2449.63398237639 70 1 0 3DFACE 8 gearbox_half 10 23.8223110888134 20 -741.512569137265 30 2461.46426948223 11 16.4090994539477 21 -116.789200000014 31 2465.42671365422 12 16.4090994539477 22 -741.556408807198 32 2465.42671365422 13 16.4090994539477 23 -741.556408807198 33 2465.42671365422 70 1 0 3DFACE 8 gearbox_half 10 16.4090994539477 20 -116.789200000014 30 2465.42671365422 11 23.8223110888134 21 -741.512569137265 31 2461.46426948223 12 23.8223110888135 22 -116.789200000014 32 2461.46426948223 13 23.8223110888135 23 -116.789200000014 33 2461.46426948223 70 1 0 3DFACE 8 gearbox_half 10 39.6150423666469 20 -741.419175320836 30 2442.22077074152 11 35.652598194651 21 -116.789200000014 31 2449.63398237639 12 35.6525981946522 22 -741.442608112612 32 2449.63398237639 13 35.6525981946522 23 -741.442608112612 33 2449.63398237639 70 1 0 3DFACE 8 gearbox_half 10 35.652598194651 20 -116.789200000014 30 2449.63398237639 11 39.6150423666469 21 -741.419175320836 31 2442.22077074152 12 39.6150423666468 22 -116.789200000014 32 2442.22077074152 13 39.6150423666468 23 -116.789200000014 33 2442.22077074152 70 1 0 3DFACE 8 gearbox_half 10 -42.0550546150653 20 -70.0735200000139 30 2043.56747533934 11 -39.6149847841629 21 -116.789200000014 31 2051.61127602287 12 -42.0550546150653 22 -116.789200000014 32 2043.56747533934 13 -42.0550546150653 23 -116.789200000014 33 2043.56747533934 70 1 0 3DFACE 8 gearbox_half 10 -39.6149847841629 20 -116.789200000014 30 2051.61127602287 11 -42.0550546150653 21 -70.0735200000139 31 2043.56747533934 12 -39.6149847841629 22 -70.0735200000139 32 2051.61127602287 13 -39.6149847841629 23 -70.0735200000139 33 2051.61127602287 70 1 0 3DFACE 8 gearbox_half 10 -39.6150026535464 20 0.0 30 2409.40261154673 11 -35.6525584815506 21 -70.0735200000139 31 2401.98939991186 12 -39.6150026535464 22 -70.0735200000139 32 2409.40261154673 13 -39.6150026535464 23 -70.0735200000139 33 2409.40261154673 70 1 0 3DFACE 8 gearbox_half 10 -35.6525584815506 20 -70.0735200000139 30 2401.98939991186 11 -39.6150026535464 21 0.0 31 2409.40261154673 12 -35.6525584815506 22 0.0 32 2401.98939991186 13 -35.6525584815506 23 0.0 33 2401.98939991186 70 1 0 3DFACE 8 gearbox_half 10 -8.36521064520558 20 -70.0735200000139 30 2077.25724590065 11 -16.4090166455219 21 -116.789200000014 31 2074.81719359682 12 -16.4090166455219 22 -70.0735200000139 32 2074.81719359682 13 -16.4090166455219 23 -70.0735200000139 33 2074.81719359682 70 1 0 3DFACE 8 gearbox_half 10 -16.4090166455219 20 -116.789200000014 30 2074.81719359682 11 -8.36521064520558 21 -70.0735200000139 31 2077.25724590065 12 -8.36521064520558 22 -116.789200000014 32 2077.25724590065 13 -8.36521064520558 23 -116.789200000014 33 2077.25724590065 70 1 0 3DFACE 8 gearbox_half 10 35.6526239576226 20 -70.0735200000139 30 2059.02440563739 11 39.6150600434633 21 -116.789200000014 31 2051.61118970355 12 35.6526239576226 22 -116.789200000014 32 2059.02440563739 13 35.6526239576226 23 -116.789200000014 33 2059.02440563739 70 1 0 3DFACE 8 gearbox_half 10 39.6150600434633 20 -116.789200000014 30 2051.61118970355 11 35.6526239576226 21 -70.0735200000139 31 2059.02440563739 12 39.6150600434633 22 -70.0735200000139 32 2051.61118970355 13 39.6150600434633 23 -70.0735200000139 33 2051.61118970355 70 1 0 3DFACE 8 gearbox_half 10 -35.6525325452735 20 -70.0735200000139 30 2059.02448332273 11 -30.3199727157687 21 -116.789200000014 31 2065.52221183974 12 -35.6525325452735 22 -116.789200000014 32 2059.02448332273 13 -35.6525325452735 23 -116.789200000014 33 2059.02448332273 70 1 0 3DFACE 8 gearbox_half 10 -30.3199727157687 20 -116.789200000014 30 2065.52221183974 11 -35.6525325452735 21 -70.0735200000139 31 2059.02448332273 12 -30.3199727157687 22 -70.0735200000139 32 2065.52221183974 13 -30.3199727157687 23 -70.0735200000139 33 2065.52221183974 70 1 0 3DFACE 8 gearbox_half 10 30.3200948028707 20 -70.0735200000139 30 1710.59234602203 11 35.6526369345435 21 -116.789200000014 31 1704.09460298078 12 30.3200948028707 22 -116.789200000014 32 1710.59234602203 13 30.3200948028707 23 -116.789200000014 33 1710.59234602203 70 1 0 3DFACE 8 gearbox_half 10 35.6526369345435 20 -116.789200000014 30 1704.09460298078 11 30.3200948028707 21 -70.0735200000139 31 1710.59234602203 12 35.6526369345435 22 -70.0735200000139 32 1704.09460298078 13 35.6526369345435 23 -70.0735200000139 33 1704.09460298078 70 1 0 3DFACE 8 gearbox_half 10 -39.6149847841629 20 -70.0735200000139 30 2051.61127602287 11 -35.6525325452735 21 -116.789200000014 31 2059.02448332273 12 -39.6149847841629 22 -116.789200000014 32 2051.61127602287 13 -39.6149847841629 23 -116.789200000014 33 2051.61127602287 70 1 0 3DFACE 8 gearbox_half 10 -35.6525325452735 20 -116.789200000014 30 2059.02448332273 11 -39.6149847841629 21 -70.0735200000139 31 2051.61127602287 12 -35.6525325452735 22 -70.0735200000139 32 2059.02448332273 13 -35.6525325452735 23 -70.0735200000139 33 2059.02448332273 70 1 0 3DFACE 8 gearbox_half 10 -23.8222325793624 20 -70.0735200000139 30 2070.85475751098 11 -30.3199727157687 21 -116.789200000014 31 2065.52221183974 12 -30.3199727157687 22 -70.0735200000139 32 2065.52221183974 13 -30.3199727157687 23 -70.0735200000139 33 2065.52221183974 70 1 0 3DFACE 8 gearbox_half 10 -30.3199727157687 20 -116.789200000014 30 2065.52221183974 11 -23.8222325793624 21 -70.0735200000139 31 2070.85475751098 12 -23.8222325793624 22 -116.789200000014 32 2070.85475751098 13 -23.8222325793624 23 -116.789200000014 33 2070.85475751098 70 1 0 3DFACE 8 gearbox_half 10 -30.3200387817157 20 -70.0735200000139 30 2004.88216083759 11 -35.652584452955 21 -116.789200000014 31 2011.379900974 12 -30.3200387817157 22 -116.789200000014 32 2004.88216083759 13 -30.3200387817157 23 -116.789200000014 33 2004.88216083759 70 1 0 3DFACE 8 gearbox_half 10 -35.652584452955 20 -116.789200000014 30 2011.379900974 11 -30.3200387817157 21 -70.0735200000139 31 2004.88216083759 12 -35.652584452955 22 -70.0735200000139 32 2011.379900974 13 -35.652584452955 23 -70.0735200000139 33 2011.379900974 70 1 0 3DFACE 8 gearbox_half 10 -39.6150205387958 20 -70.0735200000139 30 2018.79311690784 11 -42.0550728426191 21 -116.789200000014 31 2026.83692290816 12 -39.6150205387958 22 -116.789200000014 32 2018.79311690784 13 -39.6150205387958 23 -116.789200000014 33 2018.79311690784 70 1 0 3DFACE 8 gearbox_half 10 -42.0550728426191 20 -116.789200000014 30 2026.83692290816 11 -39.6150205387958 21 -70.0735200000139 31 2018.79311690784 12 -42.0550728426191 22 -70.0735200000139 32 2026.83692290816 13 -42.0550728426191 23 -70.0735200000139 33 2026.83692290816 70 1 0 3DFACE 8 gearbox_half 10 -42.0550728426191 20 -70.0735200000139 30 2026.83692290816 11 -42.878971522786 21 -116.789200000014 31 2035.20220002137 12 -42.0550728426191 22 -116.789200000014 32 2026.83692290816 13 -42.0550728426191 23 -116.789200000014 33 2026.83692290816 70 1 0 3DFACE 8 gearbox_half 10 -42.878971522786 20 -116.789200000014 30 2035.20220002137 11 -42.0550728426191 21 -70.0735200000139 31 2026.83692290816 12 -42.878971522786 22 -70.0735200000139 32 2035.20220002137 13 -42.878971522786 23 -70.0735200000139 33 2035.20220002137 70 1 0 3DFACE 8 gearbox_half 10 -30.3200552982032 20 -70.0735200000139 30 1649.9523941188 11 -35.652597429876 21 -116.789200000014 31 1656.45013716005 12 -30.3200552982032 22 -116.789200000014 32 1649.9523941188 13 -30.3200552982032 23 -116.789200000014 33 1649.9523941188 70 1 0 3DFACE 8 gearbox_half 10 -35.652597429876 20 -116.789200000014 30 1656.45013716005 11 -30.3200552982032 21 -70.0735200000139 31 1649.9523941188 12 -35.652597429876 22 -70.0735200000139 32 1656.45013716005 13 -35.652597429876 23 -70.0735200000139 33 1656.45013716005 70 1 0 3DFACE 8 gearbox_half 10 30.3200454313182 20 -741.474143345189 30 2456.13171671889 11 23.8223110888135 21 -116.789200000014 31 2461.46426948223 12 23.8223110888134 22 -741.512569137265 32 2461.46426948223 13 23.8223110888134 23 -741.512569137265 33 2461.46426948223 70 1 0 3DFACE 8 gearbox_half 10 23.8223110888135 20 -116.789200000014 30 2461.46426948223 11 30.3200454313182 21 -741.474143345189 31 2456.13171671889 12 30.3200454313183 22 -116.789200000014 32 2456.13171671889 13 30.3200454313183 23 -116.789200000014 33 2456.13171671889 70 1 0 3DFACE 8 gearbox_half 10 8.36522724084684 20 -116.789200000014 30 1638.21727291857 11 -5.03211860767294e-05 21 -70.0735200000139 31 1637.3933787953 12 -5.03211860767294e-05 22 -116.789200000014 32 1637.3933787953 13 -5.03211860767294e-05 23 -116.789200000014 33 1637.3933787953 70 1 0 3DFACE 8 gearbox_half 10 -5.03211860767294e-05 20 -70.0735200000139 30 1637.3933787953 11 8.36522724084684 21 -116.789200000014 31 1638.21727291857 12 8.36522724084684 22 -70.0735200000139 32 1638.21727291857 13 8.36522724084684 23 -70.0735200000139 33 1638.21727291857 70 1 0 3DFACE 8 gearbox_half 10 -39.6150026535464 20 0.0 30 2442.22077074152 11 -42.0550637268397 21 -70.0735200000139 31 2434.17696738005 12 -39.6150026535464 22 -70.0735200000139 32 2442.22077074152 13 -39.6150026535464 23 -70.0735200000139 33 2442.22077074152 70 1 0 3DFACE 8 gearbox_half 10 -42.0550637268397 20 -70.0735200000139 30 2434.17696738005 11 -39.6150026535464 21 0.0 31 2442.22077074152 12 -42.0550637268397 22 0.0 32 2434.17696738005 13 -42.0550637268397 23 0.0 33 2434.17696738005 70 1 0 3DFACE 8 gearbox_half 10 30.3199957039486 20 -116.789200000014 30 1649.95229501988 11 23.8222526626951 21 -70.0735200000139 31 1644.61975288821 12 23.8222526626951 22 -116.789200000014 32 1644.61975288821 13 23.8222526626951 23 -116.789200000014 33 1644.61975288821 70 1 0 3DFACE 8 gearbox_half 10 23.8222526626951 20 -70.0735200000139 30 1644.61975288821 11 30.3199957039486 21 -116.789200000014 31 1649.95229501988 12 30.3199957039486 22 -70.0735200000139 32 1649.95229501988 13 30.3199957039486 23 -70.0735200000139 33 1649.95229501988 70 1 0 3DFACE 8 gearbox_half 10 1.98565501612791e-05 20 -116.789200000014 30 2382.93269976479 11 -8.36525637937127 21 -857.431240712236 31 2383.75660756074 12 -8.36525637937127 22 -116.789200000014 32 2383.75660756074 13 -8.36525637937127 23 -116.789200000014 33 2383.75660756074 70 1 0 3DFACE 8 gearbox_half 10 -8.36525637937127 20 -857.431240712236 30 2383.75660756074 11 1.98565501612791e-05 21 -116.789200000014 31 2382.93269976479 12 1.98565501612791e-05 22 -858.151437401893 32 2382.93269976479 13 1.98565501612791e-05 23 -858.151437401893 33 2382.93269976479 70 1 0 3DFACE 8 gearbox_half 10 42.8790112358864 20 0.0 30 2425.81169114413 11 42.05510343994 21 -70.0735200000139 31 2434.17696738005 12 42.8790112358864 22 -70.0735200000139 32 2425.81169114413 13 42.8790112358864 23 -70.0735200000139 33 2425.81169114413 70 1 0 3DFACE 8 gearbox_half 10 42.05510343994 20 -70.0735200000139 30 2434.17696738005 11 42.8790112358864 21 0.0 31 2425.81169114413 12 42.05510343994 22 0.0 32 2434.17696738005 13 42.05510343994 23 0.0 33 2434.17696738005 70 1 0 3DFACE 8 gearbox_half 10 42.05510343994 20 0.0 30 2434.17696738005 11 39.6150423666467 21 -70.0735200000139 31 2442.22077074152 12 42.05510343994 22 -70.0735200000139 32 2434.17696738005 13 42.05510343994 23 -70.0735200000139 33 2434.17696738005 70 1 0 3DFACE 8 gearbox_half 10 39.6150423666467 20 -70.0735200000139 30 2442.22077074152 11 42.05510343994 21 0.0 31 2434.17696738005 12 39.6150423666467 22 0.0 32 2442.22077074152 13 39.6150423666467 23 0.0 33 2442.22077074152 70 1 0 3DFACE 8 gearbox_half 10 -35.652584452955 20 -70.0735200000139 30 2011.379900974 11 -39.6150205387958 21 -116.789200000014 31 2018.79311690784 12 -35.652584452955 22 -116.789200000014 32 2011.379900974 13 -35.652584452955 23 -116.789200000014 33 2011.379900974 70 1 0 3DFACE 8 gearbox_half 10 -39.6150205387958 20 -116.789200000014 30 2018.79311690784 11 -35.652584452955 21 -70.0735200000139 31 2011.379900974 12 -39.6150205387958 22 -70.0735200000139 32 2018.79311690784 13 -39.6150205387958 23 -70.0735200000139 33 2018.79311690784 70 1 0 3DFACE 8 gearbox_half 10 -42.878971522786 20 -70.0735200000139 30 2035.20220002137 11 -42.0550546150653 21 -116.789200000014 31 2043.56747533934 12 -42.878971522786 22 -116.789200000014 32 2035.20220002137 13 -42.878971522786 23 -116.789200000014 33 2035.20220002137 70 1 0 3DFACE 8 gearbox_half 10 -42.0550546150653 20 -116.789200000014 30 2043.56747533934 11 -42.878971522786 21 -70.0735200000139 31 2035.20220002137 12 -42.0550546150653 22 -70.0735200000139 32 2043.56747533934 13 -42.0550546150653 23 -70.0735200000139 33 2043.56747533934 70 1 0 3DFACE 8 body_half_inside 10 -899.612557411553 20 -178.944063519201 30 1773.56823006635 11 -944.844671731792 21 0.0 31 1835.6354447734 12 -926.689746301964 22 -184.330051263378 32 1835.6354447734 13 -926.689746301964 23 -184.330051263378 33 1835.6354447734 70 1 0 3DFACE 8 body_half_inside 10 -944.844671731792 20 0.0 30 1835.6354447734 11 -899.612557411553 21 -178.944063519201 31 1773.56823006635 12 -917.237009349992 22 0.0 32 1773.56823006635 13 -917.237009349992 23 0.0 33 1773.56823006635 70 1 0 3DFACE 8 body_half_inside 10 -964.850983209364 20 0.0 30 2169.85154878419 11 -926.689746301964 21 -184.330051263378 31 2234.76895526921 12 -946.311642114328 22 -188.233089011893 32 2169.85154878419 13 -946.311642114328 23 -188.233089011893 33 2169.85154878419 70 1 0 3DFACE 8 body_half_inside 10 -926.689746301964 20 -184.330051263378 30 2234.76895526921 11 -964.850983209364 21 0.0 31 2169.85154878419 12 -944.844671731792 22 0.0 32 2234.76895526921 13 -944.844671731792 23 0.0 33 2234.76895526921 70 1 0 3DFACE 8 body_half_inside 10 -958.198006960111 20 -190.597433982906 30 1967.39330582966 11 -981.029283605455 21 -1.80477854883065e-13 31 2035.2022000213 12 -962.179081004757 22 -191.38931884584 32 2035.2022000213 13 -962.179081004757 23 -191.38931884584 33 2035.2022000213 70 1 0 3DFACE 8 body_half_inside 10 -981.029283605455 20 -1.80477854883065e-13 30 2035.2022000213 11 -958.198006960111 21 -190.597433982906 31 1967.39330582966 12 -976.970215709362 22 -1.80477854883065e-13 32 1967.39330582966 13 -976.970215709362 23 -1.80477854883065e-13 33 1967.39330582966 70 1 0 3DFACE 8 body_half_inside 10 -776.88819383121 20 -321.797626332425 30 1661.47676002131 11 -865.466789057043 21 -172.152047899808 31 1715.23764468454 12 -815.251888924487 22 -337.688389142806 32 1715.23764468454 13 -815.251888924487 23 -337.688389142806 33 1715.23764468454 70 1 0 3DFACE 8 body_half_inside 10 -865.466789057043 20 -172.152047899808 30 1715.23764468454 11 -776.88819383121 21 -321.797626332425 31 1661.47676002131 12 -824.740107573921 22 -164.051007270482 32 1661.47676002131 13 -824.740107573921 23 -164.051007270482 33 1661.47676002131 70 1 0 3DFACE 8 body_half_inside 10 -668.106074549528 20 -668.106074549528 30 1835.6354447734 11 -802.244272938819 21 -536.042485570818 31 1900.55285125842 12 -682.252673061849 22 -682.252673061849 32 1900.55285125842 13 -682.252673061849 23 -682.252673061849 33 1900.55285125842 70 1 0 3DFACE 8 body_half_inside 10 -802.244272938819 20 -536.042485570818 30 1900.55285125842 11 -668.106074549528 21 -668.106074549528 31 1835.6354447734 12 -785.609632890959 22 -524.927574441361 32 1835.6354447734 13 -785.609632890959 23 -524.927574441361 33 1835.6354447734 70 1 0 3DFACE 8 body_half_inside 10 -721.176029454062 20 -143.450831316169 30 680.911023534629 11 -756.121025443459 21 0.0 31 741.194313252463 12 -741.592371958341 22 -147.511894336929 32 741.194313252463 13 -741.592371958341 23 -147.511894336929 33 741.194313252463 70 1 0 3DFACE 8 body_half_inside 10 -756.121025443459 20 0.0 30 741.194313252463 11 -721.176029454062 21 -143.450831316169 31 680.911023534629 12 -735.304703143143 22 0.0 32 680.911023534629 13 -735.304703143143 23 0.0 33 680.911023534629 70 1 0 3DFACE 8 body_half_inside 10 -926.689746301964 20 -184.330051263378 30 2234.76895526921 11 -847.416499400322 21 -351.011407030345 31 2296.83616997626 12 -872.922653615348 22 -361.576402030189 32 2234.76895526921 13 -872.922653615348 23 -361.576402030189 33 2234.76895526921 70 1 0 3DFACE 8 body_half_inside 10 -847.416499400322 20 -351.011407030345 30 2296.83616997626 11 -926.689746301964 21 -184.330051263378 31 2234.76895526921 12 -899.612557411553 22 -178.9440635192 32 2296.83616997626 13 -899.612557411553 23 -178.9440635192 33 2296.83616997626 70 1 0 3DFACE 8 body_half_inside 10 -172.152047899808 20 -865.466789057043 30 2355.16675535807 11 0.0 21 -917.237009349992 31 2296.83616997626 12 -178.9440635192 22 -899.612557411553 32 2296.83616997626 13 -178.9440635192 23 -899.612557411553 33 2296.83616997626 70 1 0 3DFACE 8 body_half_inside 10 0.0 20 -917.237009349992 30 2296.83616997626 11 -172.152047899808 21 -865.466789057043 31 2355.16675535807 12 0.0 22 -882.422285845505 32 2355.16675535807 13 0.0 23 -882.422285845505 33 2355.16675535807 70 1 0 3DFACE 8 body_half_inside 10 -429.428666054072 20 -429.428666054072 30 1287.75132002131 11 -389.307620352121 21 -582.640028068573 31 1100.8886000213 12 -495.494614285554 22 -495.494614285554 32 1100.8886000213 13 -495.494614285554 23 -495.494614285554 33 1100.8886000213 70 1 0 3DFACE 8 body_half_inside 10 -389.307620352121 20 -582.640028068573 30 1100.8886000213 11 -429.428666054072 21 -429.428666054072 31 1287.75132002131 12 -337.399937905583 22 -504.954691392473 32 1287.75132002131 13 -337.399937905583 23 -504.954691392473 33 1287.75132002131 70 1 0 3DFACE 8 body_half_inside 10 -188.233089011893 20 -946.311642114328 30 2169.85154878419 11 0.0 21 -976.970215709361 31 2103.01109421295 12 -190.597433982906 22 -958.19800696011 32 2103.01109421295 13 -190.597433982906 23 -958.19800696011 33 2103.01109421295 70 1 0 3DFACE 8 body_half_inside 10 0.0 20 -976.970215709361 30 2103.01109421295 11 -188.233089011893 21 -946.311642114328 31 2169.85154878419 12 0.0 22 -964.850983209363 32 2169.85154878419 13 0.0 23 -964.850983209363 33 2169.85154878419 70 1 0 3DFACE 8 body_half_inside 10 -184.330051263378 20 -926.689746301964 30 2234.76895526921 11 0.0 21 -964.850983209363 31 2169.85154878419 12 -188.233089011893 22 -946.311642114328 32 2169.85154878419 13 -188.233089011893 23 -946.311642114328 33 2169.85154878419 70 1 0 3DFACE 8 body_half_inside 10 0.0 20 -964.850983209363 30 2169.85154878419 11 -184.330051263378 21 -926.689746301964 31 2234.76895526921 12 0.0 22 -944.844671731792 32 2234.76895526921 13 0.0 23 -944.844671731792 33 2234.76895526921 70 1 0 3DFACE 8 body_half_inside 10 -178.9440635192 20 -899.612557411553 30 2296.83616997626 11 0.0 21 -944.844671731792 31 2234.76895526921 12 -184.330051263378 22 -926.689746301964 32 2234.76895526921 13 -184.330051263378 23 -926.689746301964 33 2234.76895526921 70 1 0 3DFACE 8 body_half_inside 10 0.0 20 -944.844671731792 30 2234.76895526921 11 -178.9440635192 21 -899.612557411553 31 2296.83616997626 12 0.0 22 -917.237009349992 32 2296.83616997626 13 0.0 23 -917.237009349992 33 2296.83616997626 70 1 0 3DFACE 8 body_half_inside 10 -178.9440635192 20 -899.612557411553 30 1773.56823006635 11 0.0 21 -882.422285845505 31 1715.23764468454 12 -172.152047899808 22 -865.466789057044 32 1715.23764468454 13 -172.152047899808 23 -865.466789057044 33 1715.23764468454 70 1 0 3DFACE 8 body_half_inside 10 0.0 20 -882.422285845505 30 1715.23764468454 11 -178.9440635192 21 -899.612557411553 31 1773.56823006635 12 0.0 22 -917.237009349992 32 1773.56823006635 13 0.0 23 -917.237009349992 33 1773.56823006635 70 1 0 3DFACE 8 body_half_inside 10 -682.252673061849 20 -682.252673061849 30 1900.55285125842 11 -524.927574441361 21 -785.609632890959 31 1835.6354447734 12 -668.106074549528 22 -668.106074549528 32 1835.6354447734 13 -668.106074549528 23 -668.106074549528 33 1835.6354447734 70 1 0 3DFACE 8 body_half_inside 10 -524.927574441361 20 -785.609632890959 30 1835.6354447734 11 -682.252673061849 21 -682.252673061849 31 1900.55285125842 12 -536.042485570819 22 -802.244272938819 32 1900.55285125842 13 -536.042485570819 23 -802.244272938819 33 1900.55285125842 70 1 0 3DFACE 8 body_half_inside 10 -693.692458979998 20 -693.692458979998 30 2035.2022000213 11 -542.775570394861 21 -812.321046486997 31 1967.39330582966 12 -690.822264545374 22 -690.822264545374 32 1967.39330582966 13 -690.822264545374 23 -690.822264545374 33 1967.39330582966 70 1 0 3DFACE 8 body_half_inside 10 -542.775570394861 20 -812.321046486997 30 1967.39330582966 11 -693.692458979998 21 -693.692458979998 31 2035.2022000213 12 -545.030667691736 22 -815.696038096871 32 2035.2022000213 13 -545.030667691736 23 -815.696038096871 33 2035.2022000213 70 1 0 3DFACE 8 body_half_inside 10 -690.554572920556 20 -286.037069662455 30 1287.75132002131 11 -543.797359730523 21 -363.353779128852 31 1474.6140400213 12 -621.482696406623 22 -415.26146157539 32 1287.75132002131 13 -621.482696406623 23 -415.26146157539 33 1287.75132002131 70 1 0 3DFACE 8 body_half_inside 10 -543.797359730523 20 -363.353779128852 30 1474.6140400213 11 -690.554572920556 21 -286.037069662455 31 1287.75132002131 12 -604.235251721863 22 -250.282436127117 32 1474.6140400213 13 -604.235251721863 23 -250.282436127117 33 1474.6140400213 70 1 0 3DFACE 8 body_half_inside 10 -747.450883605455 20 0.0 30 2408.9276400213 11 -824.740107573921 21 -164.051007270482 31 2408.9276400213 12 -840.897721502147 22 0.0 32 2408.9276400213 13 -840.897721502147 23 0.0 33 2408.9276400213 70 1 0 3DFACE 8 body_half_inside 10 -824.740107573921 20 -164.051007270482 30 2408.9276400213 11 -747.450883605455 21 0.0 31 2408.9276400213 12 -776.88819383121 22 -321.797626332425 32 2408.9276400213 13 -776.88819383121 23 -321.797626332425 33 2408.9276400213 70 3 0 3DFACE 8 body_half_inside 10 -776.88819383121 20 -321.797626332425 30 2408.9276400213 11 -747.450883605455 21 0.0 31 2408.9276400213 12 -733.088824464619 22 -145.820433573828 32 2408.9276400213 13 -733.088824464619 23 -145.820433573828 33 2408.9276400213 70 13 0 3DFACE 8 body_half_inside 10 -776.88819383121 20 -321.797626332425 30 2408.9276400213 11 -733.088824464619 21 -145.820433573828 31 2408.9276400213 12 -699.180902483484 22 -467.1777430806 32 2408.9276400213 13 -699.180902483484 23 -467.1777430806 33 2408.9276400213 70 3 0 3DFACE 8 body_half_inside 10 -699.180902483484 20 -467.1777430806 30 2408.9276400213 11 -733.088824464619 21 -145.820433573828 31 2408.9276400213 12 -690.554572920556 22 -286.037069662455 32 2408.9276400213 13 -690.554572920556 23 -286.037069662455 33 2408.9276400213 70 13 0 3DFACE 8 body_half_inside 10 -699.180902483484 20 -467.1777430806 30 2408.9276400213 11 -690.554572920556 21 -286.037069662455 31 2408.9276400213 12 -594.604481158485 22 -594.604481158485 32 2408.9276400213 13 -594.604481158485 23 -594.604481158485 33 2408.9276400213 70 3 0 3DFACE 8 body_half_inside 10 -594.604481158485 20 -594.604481158485 30 2408.9276400213 11 -690.554572920556 21 -286.037069662455 31 2408.9276400213 12 -621.482696406623 22 -415.26146157539 32 2408.9276400213 13 -621.482696406623 23 -415.26146157539 33 2408.9276400213 70 13 0 3DFACE 8 body_half_inside 10 -594.604481158485 20 -594.604481158485 30 2408.9276400213 11 -621.482696406623 21 -415.26146157539 31 2408.9276400213 12 -528.527588401294 22 -528.527588401294 32 2408.9276400213 13 -528.527588401294 23 -528.527588401294 33 2408.9276400213 70 13 0 3DFACE 8 body_half_inside 10 -594.604481158485 20 -594.604481158485 30 2408.9276400213 11 -528.527588401294 21 -528.527588401294 31 2408.9276400213 12 -467.1777430806 22 -699.180902483483 32 2408.9276400213 13 -467.1777430806 23 -699.180902483483 33 2408.9276400213 70 3 0 3DFACE 8 body_half_inside 10 -467.1777430806 20 -699.180902483483 30 2408.9276400213 11 -528.527588401294 21 -528.527588401294 31 2408.9276400213 12 -415.26146157539 22 -621.482696406623 32 2408.9276400213 13 -415.26146157539 23 -621.482696406623 33 2408.9276400213 70 13 0 3DFACE 8 body_half_inside 10 -467.1777430806 20 -699.180902483483 30 2408.9276400213 11 -415.26146157539 21 -621.482696406623 31 2408.9276400213 12 -321.797626332425 22 -776.88819383121 32 2408.9276400213 13 -321.797626332425 23 -776.88819383121 33 2408.9276400213 70 3 0 3DFACE 8 body_half_inside 10 -321.797626332425 20 -776.88819383121 30 2408.9276400213 11 -415.26146157539 21 -621.482696406623 31 2408.9276400213 12 -286.037069662455 22 -690.554572920556 32 2408.9276400213 13 -286.037069662455 23 -690.554572920556 33 2408.9276400213 70 13 0 3DFACE 8 body_half_inside 10 -321.797626332425 20 -776.88819383121 30 2408.9276400213 11 -286.037069662455 21 -690.554572920556 31 2408.9276400213 12 -164.051007270482 22 -824.740107573921 32 2408.9276400213 13 -164.051007270482 23 -824.740107573921 33 2408.9276400213 70 3 0 3DFACE 8 body_half_inside 10 -164.051007270482 20 -824.740107573921 30 2408.9276400213 11 -286.037069662455 21 -690.554572920556 31 2408.9276400213 12 -145.820433573828 22 -733.088824464619 32 2408.9276400213 13 -145.820433573828 23 -733.088824464619 33 2408.9276400213 70 13 0 3DFACE 8 body_half_inside 10 -164.051007270482 20 -824.740107573921 30 2408.9276400213 11 -145.820433573828 21 -733.088824464619 31 2408.9276400213 12 0.0 22 -840.897721502147 32 2408.9276400213 13 0.0 23 -840.897721502147 33 2408.9276400213 70 3 0 3DFACE 8 body_half_inside 10 0.0 20 -840.897721502147 30 2408.9276400213 11 -145.820433573828 21 -733.088824464619 31 2408.9276400213 12 0.0 22 -747.450883605455 32 2408.9276400213 13 0.0 23 -747.450883605455 33 2408.9276400213 70 13 0 3DFACE 8 body_half_inside 10 0.0 20 -840.897721502147 30 2408.9276400213 11 0.0 21 -747.450883605455 31 2408.9276400213 12 145.820433573828 22 -733.088824464619 32 2408.9276400213 13 145.820433573828 23 -733.088824464619 33 2408.9276400213 70 13 0 3DFACE 8 body_half_inside 10 0.0 20 -840.897721502147 30 2408.9276400213 11 145.820433573828 21 -733.088824464619 31 2408.9276400213 12 164.051007270482 22 -824.740107573921 32 2408.9276400213 13 164.051007270482 23 -824.740107573921 33 2408.9276400213 70 3 0 3DFACE 8 body_half_inside 10 164.051007270482 20 -824.740107573921 30 2408.9276400213 11 145.820433573828 21 -733.088824464619 31 2408.9276400213 12 286.037069662455 22 -690.554572920556 32 2408.9276400213 13 286.037069662455 23 -690.554572920556 33 2408.9276400213 70 13 0 3DFACE 8 body_half_inside 10 164.051007270482 20 -824.740107573921 30 2408.9276400213 11 286.037069662455 21 -690.554572920556 31 2408.9276400213 12 321.797626332425 22 -776.88819383121 32 2408.9276400213 13 321.797626332425 23 -776.88819383121 33 2408.9276400213 70 3 0 3DFACE 8 body_half_inside 10 321.797626332425 20 -776.88819383121 30 2408.9276400213 11 286.037069662455 21 -690.554572920556 31 2408.9276400213 12 415.26146157539 22 -621.482696406623 32 2408.9276400213 13 415.26146157539 23 -621.482696406623 33 2408.9276400213 70 13 0 3DFACE 8 body_half_inside 10 321.797626332425 20 -776.88819383121 30 2408.9276400213 11 415.26146157539 21 -621.482696406623 31 2408.9276400213 12 467.1777430806 22 -699.180902483484 32 2408.9276400213 13 467.1777430806 23 -699.180902483484 33 2408.9276400213 70 3 0 3DFACE 8 body_half_inside 10 467.1777430806 20 -699.180902483484 30 2408.9276400213 11 415.26146157539 21 -621.482696406623 31 2408.9276400213 12 528.527588401294 22 -528.527588401294 32 2408.9276400213 13 528.527588401294 23 -528.527588401294 33 2408.9276400213 70 13 0 3DFACE 8 body_half_inside 10 467.1777430806 20 -699.180902483484 30 2408.9276400213 11 528.527588401294 21 -528.527588401294 31 2408.9276400213 12 594.604481158485 22 -594.604481158485 32 2408.9276400213 13 594.604481158485 23 -594.604481158485 33 2408.9276400213 70 3 0 3DFACE 8 body_half_inside 10 594.604481158485 20 -594.604481158485 30 2408.9276400213 11 528.527588401294 21 -528.527588401294 31 2408.9276400213 12 621.482696406623 22 -415.26146157539 32 2408.9276400213 13 621.482696406623 23 -415.26146157539 33 2408.9276400213 70 13 0 3DFACE 8 body_half_inside 10 594.604481158485 20 -594.604481158485 30 2408.9276400213 11 621.482696406623 21 -415.26146157539 31 2408.9276400213 12 699.180902483483 22 -467.1777430806 32 2408.9276400213 13 699.180902483483 23 -467.1777430806 33 2408.9276400213 70 3 0 3DFACE 8 body_half_inside 10 699.180902483483 20 -467.1777430806 30 2408.9276400213 11 621.482696406623 21 -415.26146157539 31 2408.9276400213 12 690.554572920556 22 -286.037069662455 32 2408.9276400213 13 690.554572920556 23 -286.037069662455 33 2408.9276400213 70 13 0 3DFACE 8 body_half_inside 10 699.180902483483 20 -467.1777430806 30 2408.9276400213 11 690.554572920556 21 -286.037069662455 31 2408.9276400213 12 733.088824464619 22 -145.820433573828 32 2408.9276400213 13 733.088824464619 23 -145.820433573828 33 2408.9276400213 70 13 0 3DFACE 8 body_half_inside 10 699.180902483483 20 -467.1777430806 30 2408.9276400213 11 733.088824464619 21 -145.820433573828 31 2408.9276400213 12 776.88819383121 22 -321.797626332425 32 2408.9276400213 13 776.88819383121 23 -321.797626332425 33 2408.9276400213 70 3 0 3DFACE 8 body_half_inside 10 776.88819383121 20 -321.797626332425 30 2408.9276400213 11 733.088824464619 21 -145.820433573828 31 2408.9276400213 12 747.450883605455 22 -1.80477854883065e-13 32 2408.9276400213 13 747.450883605455 23 -1.80477854883065e-13 33 2408.9276400213 70 13 0 3DFACE 8 body_half_inside 10 776.88819383121 20 -321.797626332425 30 2408.9276400213 11 747.450883605455 21 -1.80477854883065e-13 31 2408.9276400213 12 840.897721502147 22 -1.80477854883065e-13 32 2408.9276400213 13 840.897721502147 23 -1.80477854883065e-13 33 2408.9276400213 70 13 0 3DFACE 8 body_half_inside 10 776.88819383121 20 -321.797626332425 30 2408.9276400213 11 840.897721502147 21 -1.80477854883065e-13 31 2408.9276400213 12 824.740107573921 22 -164.051007270483 32 2408.9276400213 13 824.740107573921 23 -164.051007270483 33 2408.9276400213 70 1 0 3DFACE 8 body_half_inside 10 -824.740107573921 20 -164.051007270482 30 1661.47676002131 11 -700.735203605456 21 0.0 31 1661.47676002131 12 -840.897721502147 22 0.0 32 1661.47676002131 13 -840.897721502147 23 0.0 33 1661.47676002131 70 1 0 3DFACE 8 body_half_inside 10 -700.735203605456 20 0.0 30 1661.47676002131 11 -824.740107573921 21 -164.051007270482 31 1661.47676002131 12 -776.88819383121 22 -321.797626332425 32 1661.47676002131 13 -776.88819383121 23 -321.797626332425 33 1661.47676002131 70 13 0 3DFACE 8 body_half_inside 10 -700.735203605456 20 0.0 30 1661.47676002131 11 -776.88819383121 21 -321.797626332425 31 1661.47676002131 12 -699.180902483484 22 -467.1777430806 32 1661.47676002131 13 -699.180902483484 23 -467.1777430806 33 1661.47676002131 70 13 0 3DFACE 8 body_half_inside 10 -700.735203605456 20 0.0 30 1661.47676002131 11 -699.180902483484 21 -467.1777430806 31 1661.47676002131 12 -687.270773156591 22 -136.706656519425 32 1661.47676002131 13 -687.270773156591 23 -136.706656519425 33 1661.47676002131 70 3 0 3DFACE 8 body_half_inside 10 -687.270773156591 20 -136.706656519425 30 1661.47676002131 11 -699.180902483484 21 -467.1777430806 31 1661.47676002131 12 -594.604481158485 22 -594.604481158485 32 1661.47676002131 13 -594.604481158485 23 -594.604481158485 33 1661.47676002131 70 13 0 3DFACE 8 body_half_inside 10 -687.270773156591 20 -136.706656519425 30 1661.47676002131 11 -594.604481158485 21 -594.604481158485 31 1661.47676002131 12 -647.39491232121 22 -268.159752894786 32 1661.47676002131 13 -647.39491232121 23 -268.159752894786 33 1661.47676002131 70 3 0 3DFACE 8 body_half_inside 10 -647.39491232121 20 -268.159752894786 30 1661.47676002131 11 -594.604481158485 21 -594.604481158485 31 1661.47676002131 12 -582.640028068573 22 -389.307620352121 32 1661.47676002131 13 -582.640028068573 23 -389.307620352121 33 1661.47676002131 70 3 0 3DFACE 8 body_half_inside 10 -582.640028068573 20 -389.307620352121 30 1661.47676002131 11 -594.604481158485 21 -594.604481158485 31 1661.47676002131 12 -467.1777430806 22 -699.180902483483 32 1661.47676002131 13 -467.1777430806 23 -699.180902483483 33 1661.47676002131 70 13 0 3DFACE 8 body_half_inside 10 -582.640028068573 20 -389.307620352121 30 1661.47676002131 11 -467.1777430806 21 -699.180902483483 31 1661.47676002131 12 -495.494614285554 22 -495.494614285554 32 1661.47676002131 13 -495.494614285554 23 -495.494614285554 33 1661.47676002131 70 3 0 3DFACE 8 body_half_inside 10 -495.494614285554 20 -495.494614285554 30 1661.47676002131 11 -467.1777430806 21 -699.180902483483 31 1661.47676002131 12 -389.307620352121 22 -582.640028068573 32 1661.47676002131 13 -389.307620352121 23 -582.640028068573 33 1661.47676002131 70 3 0 3DFACE 8 body_half_inside 10 -389.307620352121 20 -582.640028068573 30 1661.47676002131 11 -467.1777430806 21 -699.180902483483 31 1661.47676002131 12 -321.797626332425 22 -776.88819383121 32 1661.47676002131 13 -321.797626332425 23 -776.88819383121 33 1661.47676002131 70 13 0 3DFACE 8 body_half_inside 10 -389.307620352121 20 -582.640028068573 30 1661.47676002131 11 -321.797626332425 21 -776.88819383121 31 1661.47676002131 12 -268.159752894786 22 -647.39491232121 32 1661.47676002131 13 -268.159752894786 23 -647.39491232121 33 1661.47676002131 70 3 0 3DFACE 8 body_half_inside 10 -268.159752894786 20 -647.39491232121 30 1661.47676002131 11 -321.797626332425 21 -776.88819383121 31 1661.47676002131 12 -164.051007270482 22 -824.740107573921 32 1661.47676002131 13 -164.051007270482 23 -824.740107573921 33 1661.47676002131 70 13 0 3DFACE 8 body_half_inside 10 -268.159752894786 20 -647.39491232121 30 1661.47676002131 11 -164.051007270482 21 -824.740107573921 31 1661.47676002131 12 -136.706656519425 22 -687.270773156591 32 1661.47676002131 13 -136.706656519425 23 -687.270773156591 33 1661.47676002131 70 3 0 3DFACE 8 body_half_inside 10 -136.706656519425 20 -687.270773156591 30 1661.47676002131 11 -164.051007270482 21 -824.740107573921 31 1661.47676002131 12 0.0 22 -840.897721502147 32 1661.47676002131 13 0.0 23 -840.897721502147 33 1661.47676002131 70 13 0 3DFACE 8 body_half_inside 10 -136.706656519425 20 -687.270773156591 30 1661.47676002131 11 0.0 21 -840.897721502147 31 1661.47676002131 12 0.0 22 -700.735203605455 32 1661.47676002131 13 0.0 23 -700.735203605455 33 1661.47676002131 70 3 0 3DFACE 8 body_half_inside 10 0.0 20 -700.735203605455 30 1661.47676002131 11 0.0 21 -840.897721502147 31 1661.47676002131 12 164.051007270482 22 -824.740107573921 32 1661.47676002131 13 164.051007270482 23 -824.740107573921 33 1661.47676002131 70 13 0 3DFACE 8 body_half_inside 10 0.0 20 -700.735203605455 30 1661.47676002131 11 164.051007270482 21 -824.740107573921 31 1661.47676002131 12 136.706656519425 22 -687.270773156591 32 1661.47676002131 13 136.706656519425 23 -687.270773156591 33 1661.47676002131 70 3 0 3DFACE 8 body_half_inside 10 136.706656519425 20 -687.270773156591 30 1661.47676002131 11 164.051007270482 21 -824.740107573921 31 1661.47676002131 12 268.159752894786 22 -647.39491232121 32 1661.47676002131 13 268.159752894786 23 -647.39491232121 33 1661.47676002131 70 3 0 3DFACE 8 body_half_inside 10 268.159752894786 20 -647.39491232121 30 1661.47676002131 11 164.051007270482 21 -824.740107573921 31 1661.47676002131 12 321.797626332425 22 -776.88819383121 32 1661.47676002131 13 321.797626332425 23 -776.88819383121 33 1661.47676002131 70 13 0 3DFACE 8 body_half_inside 10 268.159752894786 20 -647.39491232121 30 1661.47676002131 11 321.797626332425 21 -776.88819383121 31 1661.47676002131 12 389.307620352121 22 -582.640028068573 32 1661.47676002131 13 389.307620352121 23 -582.640028068573 33 1661.47676002131 70 3 0 3DFACE 8 body_half_inside 10 389.307620352121 20 -582.640028068573 30 1661.47676002131 11 321.797626332425 21 -776.88819383121 31 1661.47676002131 12 467.1777430806 22 -699.180902483484 32 1661.47676002131 13 467.1777430806 23 -699.180902483484 33 1661.47676002131 70 13 0 3DFACE 8 body_half_inside 10 389.307620352121 20 -582.640028068573 30 1661.47676002131 11 467.1777430806 21 -699.180902483484 31 1661.47676002131 12 495.494614285554 22 -495.494614285554 32 1661.47676002131 13 495.494614285554 23 -495.494614285554 33 1661.47676002131 70 3 0 3DFACE 8 body_half_inside 10 495.494614285554 20 -495.494614285554 30 1661.47676002131 11 467.1777430806 21 -699.180902483484 31 1661.47676002131 12 594.604481158485 22 -594.604481158485 32 1661.47676002131 13 594.604481158485 23 -594.604481158485 33 1661.47676002131 70 13 0 3DFACE 8 body_half_inside 10 495.494614285554 20 -495.494614285554 30 1661.47676002131 11 594.604481158485 21 -594.604481158485 31 1661.47676002131 12 582.640028068573 22 -389.307620352121 32 1661.47676002131 13 582.640028068573 23 -389.307620352121 33 1661.47676002131 70 3 0 3DFACE 8 body_half_inside 10 582.640028068573 20 -389.307620352121 30 1661.47676002131 11 594.604481158485 21 -594.604481158485 31 1661.47676002131 12 647.39491232121 22 -268.159752894786 32 1661.47676002131 13 647.39491232121 23 -268.159752894786 33 1661.47676002131 70 3 0 3DFACE 8 body_half_inside 10 647.39491232121 20 -268.159752894786 30 1661.47676002131 11 594.604481158485 21 -594.604481158485 31 1661.47676002131 12 699.180902483483 22 -467.1777430806 32 1661.47676002131 13 699.180902483483 23 -467.1777430806 33 1661.47676002131 70 13 0 3DFACE 8 body_half_inside 10 647.39491232121 20 -268.159752894786 30 1661.47676002131 11 699.180902483483 21 -467.1777430806 31 1661.47676002131 12 687.270773156591 22 -136.706656519426 32 1661.47676002131 13 687.270773156591 23 -136.706656519426 33 1661.47676002131 70 3 0 3DFACE 8 body_half_inside 10 687.270773156591 20 -136.706656519426 30 1661.47676002131 11 699.180902483483 21 -467.1777430806 31 1661.47676002131 12 700.735203605455 22 -1.80477854883065e-13 32 1661.47676002131 13 700.735203605455 23 -1.80477854883065e-13 33 1661.47676002131 70 3 0 3DFACE 8 body_half_inside 10 700.735203605455 20 -1.80477854883065e-13 30 1661.47676002131 11 699.180902483483 21 -467.1777430806 31 1661.47676002131 12 776.88819383121 22 -321.797626332425 32 1661.47676002131 13 776.88819383121 23 -321.797626332425 33 1661.47676002131 70 13 0 3DFACE 8 body_half_inside 10 700.735203605455 20 -1.80477854883065e-13 30 1661.47676002131 11 776.88819383121 21 -321.797626332425 31 1661.47676002131 12 840.897721502147 22 -1.80477854883065e-13 32 1661.47676002131 13 840.897721502147 23 -1.80477854883065e-13 33 1661.47676002131 70 3 0 3DFACE 8 body_half_inside 10 840.897721502147 20 -1.80477854883065e-13 30 1661.47676002131 11 776.88819383121 21 -321.797626332425 31 1661.47676002131 12 824.740107573921 22 -164.051007270483 32 1661.47676002131 13 824.740107573921 23 -164.051007270483 33 1661.47676002131 70 1 0 3DFACE 8 body_half_inside 10 -778.906875772646 20 -154.93421062823 30 1474.6140400213 11 -654.019523605455 21 0.0 31 1474.6140400213 12 -794.166563605455 22 0.0 32 1474.6140400213 13 -794.166563605455 23 0.0 33 1474.6140400213 70 1 0 3DFACE 8 body_half_inside 10 -654.019523605455 20 0.0 30 1474.6140400213 11 -778.906875772646 21 -154.93421062823 31 1474.6140400213 12 -733.714233519903 22 -303.914386430124 32 1474.6140400213 13 -733.714233519903 23 -303.914386430124 33 1474.6140400213 70 13 0 3DFACE 8 body_half_inside 10 -654.019523605455 20 0.0 30 1474.6140400213 11 -733.714233519903 21 -303.914386430124 31 1474.6140400213 12 -660.325364744673 22 -441.215302798659 32 1474.6140400213 13 -660.325364744673 23 -441.215302798659 33 1474.6140400213 70 13 0 3DFACE 8 body_half_inside 10 -654.019523605455 20 0.0 30 1474.6140400213 11 -660.325364744673 21 -441.215302798659 31 1474.6140400213 12 -641.452721848564 22 -127.592879465023 32 1474.6140400213 13 -641.452721848564 23 -127.592879465023 33 1474.6140400213 70 3 0 3DFACE 8 body_half_inside 10 -641.452721848564 20 -127.592879465023 30 1474.6140400213 11 -660.325364744673 21 -441.215302798659 31 1474.6140400213 12 -561.560562517035 22 -561.560562517035 32 1474.6140400213 13 -561.560562517035 23 -561.560562517035 33 1474.6140400213 70 13 0 3DFACE 8 body_half_inside 10 -641.452721848564 20 -127.592879465023 30 1474.6140400213 11 -561.560562517035 21 -561.560562517035 31 1474.6140400213 12 -604.235251721863 22 -250.282436127117 32 1474.6140400213 13 -604.235251721863 23 -250.282436127117 33 1474.6140400213 70 3 0 3DFACE 8 body_half_inside 10 -604.235251721863 20 -250.282436127117 30 1474.6140400213 11 -561.560562517035 21 -561.560562517035 31 1474.6140400213 12 -543.797359730523 22 -363.353779128852 32 1474.6140400213 13 -543.797359730523 23 -363.353779128852 33 1474.6140400213 70 3 0 3DFACE 8 body_half_inside 10 -543.797359730523 20 -363.353779128852 30 1474.6140400213 11 -561.560562517035 21 -561.560562517035 31 1474.6140400213 12 -441.21530279866 22 -660.325364744672 32 1474.6140400213 13 -441.21530279866 23 -660.325364744672 33 1474.6140400213 70 13 0 3DFACE 8 body_half_inside 10 -543.797359730523 20 -363.353779128852 30 1474.6140400213 11 -441.21530279866 21 -660.325364744672 31 1474.6140400213 12 -462.461640169813 22 -462.461640169813 32 1474.6140400213 13 -462.461640169813 23 -462.461640169813 33 1474.6140400213 70 3 0 3DFACE 8 body_half_inside 10 -462.461640169813 20 -462.461640169813 30 1474.6140400213 11 -441.21530279866 21 -660.325364744672 31 1474.6140400213 12 -363.353779128852 22 -543.797359730523 32 1474.6140400213 13 -363.353779128852 23 -543.797359730523 33 1474.6140400213 70 3 0 3DFACE 8 body_half_inside 10 -363.353779128852 20 -543.797359730523 30 1474.6140400213 11 -441.21530279866 21 -660.325364744672 31 1474.6140400213 12 -303.914386430124 22 -733.714233519903 32 1474.6140400213 13 -303.914386430124 23 -733.714233519903 33 1474.6140400213 70 13 0 3DFACE 8 body_half_inside 10 -363.353779128852 20 -543.797359730523 30 1474.6140400213 11 -303.914386430124 21 -733.714233519903 31 1474.6140400213 12 -250.282436127117 22 -604.235251721863 32 1474.6140400213 13 -250.282436127117 23 -604.235251721863 33 1474.6140400213 70 3 0 3DFACE 8 body_half_inside 10 -250.282436127117 20 -604.235251721863 30 1474.6140400213 11 -303.914386430124 21 -733.714233519903 31 1474.6140400213 12 -154.93421062823 22 -778.906875772646 32 1474.6140400213 13 -154.93421062823 23 -778.906875772646 33 1474.6140400213 70 13 0 3DFACE 8 body_half_inside 10 -250.282436127117 20 -604.235251721863 30 1474.6140400213 11 -154.93421062823 21 -778.906875772646 31 1474.6140400213 12 -127.592879465023 22 -641.452721848564 32 1474.6140400213 13 -127.592879465023 23 -641.452721848564 33 1474.6140400213 70 3 0 3DFACE 8 body_half_inside 10 -127.592879465023 20 -641.452721848564 30 1474.6140400213 11 -154.93421062823 21 -778.906875772646 31 1474.6140400213 12 0.0 22 -794.166563605455 32 1474.6140400213 13 0.0 23 -794.166563605455 33 1474.6140400213 70 13 0 3DFACE 8 body_half_inside 10 -127.592879465023 20 -641.452721848564 30 1474.6140400213 11 0.0 21 -794.166563605455 31 1474.6140400213 12 0.0 22 -654.019523605455 32 1474.6140400213 13 0.0 23 -654.019523605455 33 1474.6140400213 70 3 0 3DFACE 8 body_half_inside 10 0.0 20 -654.019523605455 30 1474.6140400213 11 0.0 21 -794.166563605455 31 1474.6140400213 12 154.93421062823 22 -778.906875772646 32 1474.6140400213 13 154.93421062823 23 -778.906875772646 33 1474.6140400213 70 13 0 3DFACE 8 body_half_inside 10 0.0 20 -654.019523605455 30 1474.6140400213 11 154.93421062823 21 -778.906875772646 31 1474.6140400213 12 127.592879465023 22 -641.452721848564 32 1474.6140400213 13 127.592879465023 23 -641.452721848564 33 1474.6140400213 70 3 0 3DFACE 8 body_half_inside 10 127.592879465023 20 -641.452721848564 30 1474.6140400213 11 154.93421062823 21 -778.906875772646 31 1474.6140400213 12 250.282436127116 22 -604.235251721863 32 1474.6140400213 13 250.282436127116 23 -604.235251721863 33 1474.6140400213 70 3 0 3DFACE 8 body_half_inside 10 250.282436127116 20 -604.235251721863 30 1474.6140400213 11 154.93421062823 21 -778.906875772646 31 1474.6140400213 12 303.914386430124 22 -733.714233519903 32 1474.6140400213 13 303.914386430124 23 -733.714233519903 33 1474.6140400213 70 13 0 3DFACE 8 body_half_inside 10 250.282436127116 20 -604.235251721863 30 1474.6140400213 11 303.914386430124 21 -733.714233519903 31 1474.6140400213 12 363.353779128852 22 -543.797359730523 32 1474.6140400213 13 363.353779128852 23 -543.797359730523 33 1474.6140400213 70 3 0 3DFACE 8 body_half_inside 10 363.353779128852 20 -543.797359730523 30 1474.6140400213 11 303.914386430124 21 -733.714233519903 31 1474.6140400213 12 441.215302798659 22 -660.325364744673 32 1474.6140400213 13 441.215302798659 23 -660.325364744673 33 1474.6140400213 70 13 0 3DFACE 8 body_half_inside 10 363.353779128852 20 -543.797359730523 30 1474.6140400213 11 441.215302798659 21 -660.325364744673 31 1474.6140400213 12 462.461640169813 22 -462.461640169813 32 1474.6140400213 13 462.461640169813 23 -462.461640169813 33 1474.6140400213 70 3 0 3DFACE 8 body_half_inside 10 462.461640169813 20 -462.461640169813 30 1474.6140400213 11 441.215302798659 21 -660.325364744673 31 1474.6140400213 12 561.560562517035 22 -561.560562517035 32 1474.6140400213 13 561.560562517035 23 -561.560562517035 33 1474.6140400213 70 13 0 3DFACE 8 body_half_inside 10 462.461640169813 20 -462.461640169813 30 1474.6140400213 11 561.560562517035 21 -561.560562517035 31 1474.6140400213 12 543.797359730523 22 -363.353779128852 32 1474.6140400213 13 543.797359730523 23 -363.353779128852 33 1474.6140400213 70 3 0 3DFACE 8 body_half_inside 10 543.797359730523 20 -363.353779128852 30 1474.6140400213 11 561.560562517035 21 -561.560562517035 31 1474.6140400213 12 604.235251721863 22 -250.282436127116 32 1474.6140400213 13 604.235251721863 23 -250.282436127116 33 1474.6140400213 70 3 0 3DFACE 8 body_half_inside 10 604.235251721863 20 -250.282436127116 30 1474.6140400213 11 561.560562517035 21 -561.560562517035 31 1474.6140400213 12 660.325364744673 22 -441.21530279866 32 1474.6140400213 13 660.325364744673 23 -441.21530279866 33 1474.6140400213 70 13 0 3DFACE 8 body_half_inside 10 604.235251721863 20 -250.282436127116 30 1474.6140400213 11 660.325364744673 21 -441.21530279866 31 1474.6140400213 12 641.452721848564 22 -127.592879465023 32 1474.6140400213 13 641.452721848564 23 -127.592879465023 33 1474.6140400213 70 3 0 3DFACE 8 body_half_inside 10 641.452721848564 20 -127.592879465023 30 1474.6140400213 11 660.325364744673 21 -441.21530279866 31 1474.6140400213 12 654.019523605455 22 -1.80477854883065e-13 32 1474.6140400213 13 654.019523605455 23 -1.80477854883065e-13 33 1474.6140400213 70 3 0 3DFACE 8 body_half_inside 10 654.019523605455 20 -1.80477854883065e-13 30 1474.6140400213 11 660.325364744673 21 -441.21530279866 31 1474.6140400213 12 794.166563605455 22 -1.80477854883065e-13 32 1474.6140400213 13 794.166563605455 23 -1.80477854883065e-13 33 1474.6140400213 70 3 0 3DFACE 8 body_half_inside 10 794.166563605455 20 -1.80477854883065e-13 30 1474.6140400213 11 660.325364744673 21 -441.21530279866 31 1474.6140400213 12 733.714233519903 22 -303.914386430124 32 1474.6140400213 13 733.714233519903 23 -303.914386430124 33 1474.6140400213 70 13 0 3DFACE 8 body_half_inside 10 794.166563605455 20 -1.80477854883065e-13 30 1474.6140400213 11 733.714233519903 21 -303.914386430124 31 1474.6140400213 12 778.906875772646 22 -154.934210628231 32 1474.6140400213 13 778.906875772646 23 -154.934210628231 33 1474.6140400213 70 1 0 3DFACE 8 body_half_inside 10 -687.270773156591 20 -136.706656519425 30 1100.8886000213 11 -467.156803605456 21 0.0 31 1100.8886000213 12 -700.735203605456 22 0.0 32 1100.8886000213 13 -700.735203605456 23 0.0 33 1100.8886000213 70 1 0 3DFACE 8 body_half_inside 10 -467.156803605456 20 0.0 30 1100.8886000213 11 -687.270773156591 21 -136.706656519425 31 1100.8886000213 12 -647.39491232121 22 -268.159752894786 32 1100.8886000213 13 -647.39491232121 23 -268.159752894786 33 1100.8886000213 70 13 0 3DFACE 8 body_half_inside 10 -467.156803605456 20 0.0 30 1100.8886000213 11 -647.39491232121 21 -268.159752894786 31 1100.8886000213 12 -582.640028068573 22 -389.307620352121 32 1100.8886000213 13 -582.640028068573 23 -389.307620352121 33 1100.8886000213 70 13 0 3DFACE 8 body_half_inside 10 -467.156803605456 20 0.0 30 1100.8886000213 11 -582.640028068573 21 -389.307620352121 31 1100.8886000213 12 -495.494614285554 22 -495.494614285554 32 1100.8886000213 13 -495.494614285554 23 -495.494614285554 33 1100.8886000213 70 13 0 3DFACE 8 body_half_inside 10 -467.156803605456 20 0.0 30 1100.8886000213 11 -495.494614285554 21 -495.494614285554 31 1100.8886000213 12 -458.180516616454 22 -91.1377712474136 32 1100.8886000213 13 -458.180516616454 23 -91.1377712474136 33 1100.8886000213 70 3 0 3DFACE 8 body_half_inside 10 -458.180516616454 20 -91.1377712474136 30 1100.8886000213 11 -495.494614285554 21 -495.494614285554 31 1100.8886000213 12 -389.307620352121 22 -582.640028068573 32 1100.8886000213 13 -389.307620352121 23 -582.640028068573 33 1100.8886000213 70 13 0 3DFACE 8 body_half_inside 10 -458.180516616454 20 -91.1377712474136 30 1100.8886000213 11 -389.307620352121 21 -582.640028068573 31 1100.8886000213 12 -431.596609324475 22 -178.77316905644 32 1100.8886000213 13 -431.596609324475 23 -178.77316905644 33 1100.8886000213 70 3 0 3DFACE 8 body_half_inside 10 -431.596609324475 20 -178.77316905644 30 1100.8886000213 11 -389.307620352121 21 -582.640028068573 31 1100.8886000213 12 -388.426686378325 22 -259.538414235776 32 1100.8886000213 13 -388.426686378325 23 -259.538414235776 33 1100.8886000213 70 3 0 3DFACE 8 body_half_inside 10 -388.426686378325 20 -259.538414235776 30 1100.8886000213 11 -389.307620352121 21 -582.640028068573 31 1100.8886000213 12 -268.159752894786 22 -647.39491232121 32 1100.8886000213 13 -268.159752894786 23 -647.39491232121 33 1100.8886000213 70 13 0 3DFACE 8 body_half_inside 10 -388.426686378325 20 -259.538414235776 30 1100.8886000213 11 -268.159752894786 21 -647.39491232121 31 1100.8886000213 12 -330.32974370685 22 -330.32974370685 32 1100.8886000213 13 -330.32974370685 23 -330.32974370685 33 1100.8886000213 70 3 0 3DFACE 8 body_half_inside 10 -330.32974370685 20 -330.32974370685 30 1100.8886000213 11 -268.159752894786 21 -647.39491232121 31 1100.8886000213 12 -259.538414235776 22 -388.426686378324 32 1100.8886000213 13 -259.538414235776 23 -388.426686378324 33 1100.8886000213 70 3 0 3DFACE 8 body_half_inside 10 -259.538414235776 20 -388.426686378324 30 1100.8886000213 11 -268.159752894786 21 -647.39491232121 31 1100.8886000213 12 -136.706656519425 22 -687.270773156591 32 1100.8886000213 13 -136.706656519425 23 -687.270773156591 33 1100.8886000213 70 13 0 3DFACE 8 body_half_inside 10 -259.538414235776 20 -388.426686378324 30 1100.8886000213 11 -136.706656519425 21 -687.270773156591 31 1100.8886000213 12 -178.77316905644 22 -431.596609324475 32 1100.8886000213 13 -178.77316905644 23 -431.596609324475 33 1100.8886000213 70 3 0 3DFACE 8 body_half_inside 10 -178.77316905644 20 -431.596609324475 30 1100.8886000213 11 -136.706656519425 21 -687.270773156591 31 1100.8886000213 12 -91.1377712474136 22 -458.180516616454 32 1100.8886000213 13 -91.1377712474136 23 -458.180516616454 33 1100.8886000213 70 3 0 3DFACE 8 body_half_inside 10 -91.1377712474136 20 -458.180516616454 30 1100.8886000213 11 -136.706656519425 21 -687.270773156591 31 1100.8886000213 12 0.0 22 -700.735203605455 32 1100.8886000213 13 0.0 23 -700.735203605455 33 1100.8886000213 70 13 0 3DFACE 8 body_half_inside 10 -91.1377712474136 20 -458.180516616454 30 1100.8886000213 11 0.0 21 -700.735203605455 31 1100.8886000213 12 0.0 22 -467.156803605456 32 1100.8886000213 13 0.0 23 -467.156803605456 33 1100.8886000213 70 3 0 3DFACE 8 body_half_inside 10 0.0 20 -467.156803605456 30 1100.8886000213 11 0.0 21 -700.735203605455 31 1100.8886000213 12 136.706656519425 22 -687.270773156591 32 1100.8886000213 13 136.706656519425 23 -687.270773156591 33 1100.8886000213 70 13 0 3DFACE 8 body_half_inside 10 0.0 20 -467.156803605456 30 1100.8886000213 11 136.706656519425 21 -687.270773156591 31 1100.8886000213 12 91.1377712474136 22 -458.180516616454 32 1100.8886000213 13 91.1377712474136 23 -458.180516616454 33 1100.8886000213 70 3 0 3DFACE 8 body_half_inside 10 91.1377712474136 20 -458.180516616454 30 1100.8886000213 11 136.706656519425 21 -687.270773156591 31 1100.8886000213 12 178.77316905644 22 -431.596609324475 32 1100.8886000213 13 178.77316905644 23 -431.596609324475 33 1100.8886000213 70 3 0 3DFACE 8 body_half_inside 10 178.77316905644 20 -431.596609324475 30 1100.8886000213 11 136.706656519425 21 -687.270773156591 31 1100.8886000213 12 268.159752894786 22 -647.39491232121 32 1100.8886000213 13 268.159752894786 23 -647.39491232121 33 1100.8886000213 70 13 0 3DFACE 8 body_half_inside 10 178.77316905644 20 -431.596609324475 30 1100.8886000213 11 268.159752894786 21 -647.39491232121 31 1100.8886000213 12 259.538414235775 22 -388.426686378325 32 1100.8886000213 13 259.538414235775 23 -388.426686378325 33 1100.8886000213 70 3 0 3DFACE 8 body_half_inside 10 259.538414235775 20 -388.426686378325 30 1100.8886000213 11 268.159752894786 21 -647.39491232121 31 1100.8886000213 12 330.32974370685 22 -330.32974370685 32 1100.8886000213 13 330.32974370685 23 -330.32974370685 33 1100.8886000213 70 3 0 3DFACE 8 body_half_inside 10 330.32974370685 20 -330.32974370685 30 1100.8886000213 11 268.159752894786 21 -647.39491232121 31 1100.8886000213 12 389.307620352121 22 -582.640028068573 32 1100.8886000213 13 389.307620352121 23 -582.640028068573 33 1100.8886000213 70 13 0 3DFACE 8 body_half_inside 10 330.32974370685 20 -330.32974370685 30 1100.8886000213 11 389.307620352121 21 -582.640028068573 31 1100.8886000213 12 388.426686378325 22 -259.538414235776 32 1100.8886000213 13 388.426686378325 23 -259.538414235776 33 1100.8886000213 70 3 0 3DFACE 8 body_half_inside 10 388.426686378325 20 -259.538414235776 30 1100.8886000213 11 389.307620352121 21 -582.640028068573 31 1100.8886000213 12 431.596609324475 22 -178.77316905644 32 1100.8886000213 13 431.596609324475 23 -178.77316905644 33 1100.8886000213 70 3 0 3DFACE 8 body_half_inside 10 431.596609324475 20 -178.77316905644 30 1100.8886000213 11 389.307620352121 21 -582.640028068573 31 1100.8886000213 12 495.494614285554 22 -495.494614285554 32 1100.8886000213 13 495.494614285554 23 -495.494614285554 33 1100.8886000213 70 13 0 3DFACE 8 body_half_inside 10 431.596609324475 20 -178.77316905644 30 1100.8886000213 11 495.494614285554 21 -495.494614285554 31 1100.8886000213 12 458.180516616454 22 -91.1377712474138 32 1100.8886000213 13 458.180516616454 23 -91.1377712474138 33 1100.8886000213 70 3 0 3DFACE 8 body_half_inside 10 458.180516616454 20 -91.1377712474138 30 1100.8886000213 11 495.494614285554 21 -495.494614285554 31 1100.8886000213 12 467.156803605456 22 0.0 32 1100.8886000213 13 467.156803605456 23 0.0 33 1100.8886000213 70 3 0 3DFACE 8 body_half_inside 10 467.156803605456 20 0.0 30 1100.8886000213 11 495.494614285554 21 -495.494614285554 31 1100.8886000213 12 700.735203605455 22 -1.80477854883065e-13 32 1100.8886000213 13 700.735203605455 23 -1.80477854883065e-13 33 1100.8886000213 70 3 0 3DFACE 8 body_half_inside 10 700.735203605455 20 -1.80477854883065e-13 30 1100.8886000213 11 495.494614285554 21 -495.494614285554 31 1100.8886000213 12 582.640028068573 22 -389.307620352121 32 1100.8886000213 13 582.640028068573 23 -389.307620352121 33 1100.8886000213 70 13 0 3DFACE 8 body_half_inside 10 700.735203605455 20 -1.80477854883065e-13 30 1100.8886000213 11 582.640028068573 21 -389.307620352121 31 1100.8886000213 12 647.39491232121 22 -268.159752894786 32 1100.8886000213 13 647.39491232121 23 -268.159752894786 33 1100.8886000213 70 13 0 3DFACE 8 body_half_inside 10 700.735203605455 20 -1.80477854883065e-13 30 1100.8886000213 11 647.39491232121 21 -268.159752894786 31 1100.8886000213 12 687.270773156591 22 -136.706656519426 32 1100.8886000213 13 687.270773156591 23 -136.706656519426 33 1100.8886000213 70 1 0 3DFACE 8 body_half_inside 10 -733.088824464619 20 -145.820433573828 30 1287.75132002131 11 -607.303843605455 21 0.0 31 1287.75132002131 12 -747.450883605455 22 0.0 32 1287.75132002131 13 -747.450883605455 23 0.0 33 1287.75132002131 70 1 0 3DFACE 8 body_half_inside 10 -607.303843605455 20 0.0 30 1287.75132002131 11 -733.088824464619 21 -145.820433573828 31 1287.75132002131 12 -690.554572920556 22 -286.037069662455 32 1287.75132002131 13 -690.554572920556 23 -286.037069662455 33 1287.75132002131 70 13 0 3DFACE 8 body_half_inside 10 -607.303843605455 20 0.0 30 1287.75132002131 11 -690.554572920556 21 -286.037069662455 31 1287.75132002131 12 -621.482696406623 22 -415.26146157539 32 1287.75132002131 13 -621.482696406623 23 -415.26146157539 33 1287.75132002131 70 13 0 3DFACE 8 body_half_inside 10 -607.303843605455 20 0.0 30 1287.75132002131 11 -621.482696406623 21 -415.26146157539 31 1287.75132002131 12 -595.634670540536 22 -118.479102410621 32 1287.75132002131 13 -595.634670540536 23 -118.479102410621 33 1287.75132002131 70 3 0 3DFACE 8 body_half_inside 10 -595.634670540536 20 -118.479102410621 30 1287.75132002131 11 -621.482696406623 21 -415.26146157539 31 1287.75132002131 12 -528.527588401294 22 -528.527588401294 32 1287.75132002131 13 -528.527588401294 23 -528.527588401294 33 1287.75132002131 70 13 0 3DFACE 8 body_half_inside 10 -595.634670540536 20 -118.479102410621 30 1287.75132002131 11 -528.527588401294 21 -528.527588401294 31 1287.75132002131 12 -561.075591122516 22 -232.405119359447 32 1287.75132002131 13 -561.075591122516 23 -232.405119359447 33 1287.75132002131 70 3 0 3DFACE 8 body_half_inside 10 -561.075591122516 20 -232.405119359447 30 1287.75132002131 11 -528.527588401294 21 -528.527588401294 31 1287.75132002131 12 -504.954691392474 22 -337.399937905583 32 1287.75132002131 13 -504.954691392474 23 -337.399937905583 33 1287.75132002131 70 3 0 3DFACE 8 body_half_inside 10 -504.954691392474 20 -337.399937905583 30 1287.75132002131 11 -528.527588401294 21 -528.527588401294 31 1287.75132002131 12 -415.26146157539 22 -621.482696406623 32 1287.75132002131 13 -415.26146157539 23 -621.482696406623 33 1287.75132002131 70 13 0 3DFACE 8 body_half_inside 10 -504.954691392474 20 -337.399937905583 30 1287.75132002131 11 -415.26146157539 21 -621.482696406623 31 1287.75132002131 12 -429.428666054072 22 -429.428666054072 32 1287.75132002131 13 -429.428666054072 23 -429.428666054072 33 1287.75132002131 70 3 0 3DFACE 8 body_half_inside 10 -429.428666054072 20 -429.428666054072 30 1287.75132002131 11 -415.26146157539 21 -621.482696406623 31 1287.75132002131 12 -337.399937905583 22 -504.954691392473 32 1287.75132002131 13 -337.399937905583 23 -504.954691392473 33 1287.75132002131 70 3 0 3DFACE 8 body_half_inside 10 -337.399937905583 20 -504.954691392473 30 1287.75132002131 11 -415.26146157539 21 -621.482696406623 31 1287.75132002131 12 -286.037069662455 22 -690.554572920556 32 1287.75132002131 13 -286.037069662455 23 -690.554572920556 33 1287.75132002131 70 13 0 3DFACE 8 body_half_inside 10 -337.399937905583 20 -504.954691392473 30 1287.75132002131 11 -286.037069662455 21 -690.554572920556 31 1287.75132002131 12 -232.405119359447 22 -561.075591122516 32 1287.75132002131 13 -232.405119359447 23 -561.075591122516 33 1287.75132002131 70 3 0 3DFACE 8 body_half_inside 10 -232.405119359447 20 -561.075591122516 30 1287.75132002131 11 -286.037069662455 21 -690.554572920556 31 1287.75132002131 12 -145.820433573828 22 -733.088824464619 32 1287.75132002131 13 -145.820433573828 23 -733.088824464619 33 1287.75132002131 70 13 0 3DFACE 8 body_half_inside 10 -232.405119359447 20 -561.075591122516 30 1287.75132002131 11 -145.820433573828 21 -733.088824464619 31 1287.75132002131 12 -118.479102410621 22 -595.634670540536 32 1287.75132002131 13 -118.479102410621 23 -595.634670540536 33 1287.75132002131 70 3 0 3DFACE 8 body_half_inside 10 -118.479102410621 20 -595.634670540536 30 1287.75132002131 11 -145.820433573828 21 -733.088824464619 31 1287.75132002131 12 0.0 22 -747.450883605455 32 1287.75132002131 13 0.0 23 -747.450883605455 33 1287.75132002131 70 13 0 3DFACE 8 body_half_inside 10 -118.479102410621 20 -595.634670540536 30 1287.75132002131 11 0.0 21 -747.450883605455 31 1287.75132002131 12 0.0 22 -607.303843605455 32 1287.75132002131 13 0.0 23 -607.303843605455 33 1287.75132002131 70 3 0 3DFACE 8 body_half_inside 10 0.0 20 -607.303843605455 30 1287.75132002131 11 0.0 21 -747.450883605455 31 1287.75132002131 12 145.820433573828 22 -733.088824464619 32 1287.75132002131 13 145.820433573828 23 -733.088824464619 33 1287.75132002131 70 13 0 3DFACE 8 body_half_inside 10 0.0 20 -607.303843605455 30 1287.75132002131 11 145.820433573828 21 -733.088824464619 31 1287.75132002131 12 118.479102410621 22 -595.634670540536 32 1287.75132002131 13 118.479102410621 23 -595.634670540536 33 1287.75132002131 70 3 0 3DFACE 8 body_half_inside 10 118.479102410621 20 -595.634670540536 30 1287.75132002131 11 145.820433573828 21 -733.088824464619 31 1287.75132002131 12 232.405119359447 22 -561.075591122516 32 1287.75132002131 13 232.405119359447 23 -561.075591122516 33 1287.75132002131 70 3 0 3DFACE 8 body_half_inside 10 232.405119359447 20 -561.075591122516 30 1287.75132002131 11 145.820433573828 21 -733.088824464619 31 1287.75132002131 12 286.037069662455 22 -690.554572920556 32 1287.75132002131 13 286.037069662455 23 -690.554572920556 33 1287.75132002131 70 13 0 3DFACE 8 body_half_inside 10 232.405119359447 20 -561.075591122516 30 1287.75132002131 11 286.037069662455 21 -690.554572920556 31 1287.75132002131 12 337.399937905583 22 -504.954691392474 32 1287.75132002131 13 337.399937905583 23 -504.954691392474 33 1287.75132002131 70 3 0 3DFACE 8 body_half_inside 10 337.399937905583 20 -504.954691392474 30 1287.75132002131 11 286.037069662455 21 -690.554572920556 31 1287.75132002131 12 415.26146157539 22 -621.482696406623 32 1287.75132002131 13 415.26146157539 23 -621.482696406623 33 1287.75132002131 70 13 0 3DFACE 8 body_half_inside 10 337.399937905583 20 -504.954691392474 30 1287.75132002131 11 415.26146157539 21 -621.482696406623 31 1287.75132002131 12 429.428666054072 22 -429.428666054072 32 1287.75132002131 13 429.428666054072 23 -429.428666054072 33 1287.75132002131 70 3 0 3DFACE 8 body_half_inside 10 429.428666054072 20 -429.428666054072 30 1287.75132002131 11 415.26146157539 21 -621.482696406623 31 1287.75132002131 12 528.527588401294 22 -528.527588401294 32 1287.75132002131 13 528.527588401294 23 -528.527588401294 33 1287.75132002131 70 13 0 3DFACE 8 body_half_inside 10 429.428666054072 20 -429.428666054072 30 1287.75132002131 11 528.527588401294 21 -528.527588401294 31 1287.75132002131 12 504.954691392474 22 -337.399937905583 32 1287.75132002131 13 504.954691392474 23 -337.399937905583 33 1287.75132002131 70 3 0 3DFACE 8 body_half_inside 10 504.954691392474 20 -337.399937905583 30 1287.75132002131 11 528.527588401294 21 -528.527588401294 31 1287.75132002131 12 561.075591122516 22 -232.405119359447 32 1287.75132002131 13 561.075591122516 23 -232.405119359447 33 1287.75132002131 70 3 0 3DFACE 8 body_half_inside 10 561.075591122516 20 -232.405119359447 30 1287.75132002131 11 528.527588401294 21 -528.527588401294 31 1287.75132002131 12 621.482696406623 22 -415.26146157539 32 1287.75132002131 13 621.482696406623 23 -415.26146157539 33 1287.75132002131 70 13 0 3DFACE 8 body_half_inside 10 561.075591122516 20 -232.405119359447 30 1287.75132002131 11 621.482696406623 21 -415.26146157539 31 1287.75132002131 12 595.634670540536 22 -118.479102410621 32 1287.75132002131 13 595.634670540536 23 -118.479102410621 33 1287.75132002131 70 3 0 3DFACE 8 body_half_inside 10 595.634670540536 20 -118.479102410621 30 1287.75132002131 11 621.482696406623 21 -415.26146157539 31 1287.75132002131 12 607.303843605455 22 -1.80477854883065e-13 32 1287.75132002131 13 607.303843605455 23 -1.80477854883065e-13 33 1287.75132002131 70 3 0 3DFACE 8 body_half_inside 10 607.303843605455 20 -1.80477854883065e-13 30 1287.75132002131 11 621.482696406623 21 -415.26146157539 31 1287.75132002131 12 747.450883605455 22 -1.80477854883065e-13 32 1287.75132002131 13 747.450883605455 23 -1.80477854883065e-13 33 1287.75132002131 70 3 0 3DFACE 8 body_half_inside 10 747.450883605455 20 -1.80477854883065e-13 30 1287.75132002131 11 621.482696406623 21 -415.26146157539 31 1287.75132002131 12 690.554572920556 22 -286.037069662455 32 1287.75132002131 13 690.554572920556 23 -286.037069662455 33 1287.75132002131 70 13 0 3DFACE 8 body_half_inside 10 747.450883605455 20 -1.80477854883065e-13 30 1287.75132002131 11 690.554572920556 21 -286.037069662455 31 1287.75132002131 12 733.088824464619 22 -145.820433573828 32 1287.75132002131 13 733.088824464619 23 -145.820433573828 33 1287.75132002131 70 1 0 3DFACE 8 body_half_inside 10 0.0 20 -699.298837021391 30 628.271001705821 11 -126.938054583664 21 -638.160694862082 31 587.016306884026 12 -136.426435300007 22 -685.862005953678 32 628.271001705821 13 -136.426435300007 23 -685.862005953678 33 628.271001705821 70 1 0 3DFACE 8 body_half_inside 10 -126.938054583664 20 -638.160694862082 30 587.016306884026 11 0.0 21 -699.298837021391 31 628.271001705821 12 0.0 22 -650.663001997455 32 587.016306884026 13 0.0 23 -650.663001997455 33 587.016306884026 70 1 0 3DFACE 8 body_half_inside 10 -373.870315466121 20 -902.602786167016 30 1967.39330582966 11 -188.233089011893 21 -946.311642114328 31 1900.55285125842 12 -369.232485975391 22 -891.406075310522 32 1900.55285125842 13 -369.232485975391 23 -891.406075310522 33 1900.55285125842 70 1 0 3DFACE 8 body_half_inside 10 -188.233089011893 20 -946.311642114328 30 1900.55285125842 11 -373.870315466121 21 -902.602786167016 31 1967.39330582966 12 -190.597433982906 22 -958.19800696011 32 1967.39330582966 13 -190.597433982906 23 -958.19800696011 33 1967.39330582966 70 1 0 3DFACE 8 body_half_inside 10 -462.461640169813 20 -462.461640169813 30 1474.6140400213 11 -415.26146157539 21 -621.482696406623 31 1287.75132002131 12 -528.527588401294 22 -528.527588401294 32 1287.75132002131 13 -528.527588401294 23 -528.527588401294 33 1287.75132002131 70 1 0 3DFACE 8 body_half_inside 10 -415.26146157539 20 -621.482696406623 30 1287.75132002131 11 -462.461640169813 21 -462.461640169813 31 1474.6140400213 12 -363.353779128852 22 -543.797359730523 32 1474.6140400213 13 -363.353779128852 23 -543.797359730523 33 1474.6140400213 70 1 0 3DFACE 8 body_half_inside 10 -902.602786167016 20 -373.87031546612 30 2103.01109421295 11 -802.244272938819 21 -536.042485570818 31 2169.85154878419 12 -812.321046486997 22 -542.775570394861 32 2103.01109421295 13 -812.321046486997 23 -542.775570394861 33 2103.01109421295 70 1 0 3DFACE 8 body_half_inside 10 -802.244272938819 20 -536.042485570818 30 2169.85154878419 11 -902.602786167016 21 -373.87031546612 31 2103.01109421295 12 -891.406075310522 22 -369.232485975391 32 2169.85154878419 13 -891.406075310522 23 -369.232485975391 33 2169.85154878419 70 1 0 3DFACE 8 body_half_inside 10 -815.696038096872 20 -545.030667691736 30 2035.2022000213 11 -690.822264545374 21 -690.822264545373 31 2103.01109421295 12 -693.692458979998 22 -693.692458979998 32 2035.2022000213 13 -693.692458979998 23 -693.692458979998 33 2035.2022000213 70 1 0 3DFACE 8 body_half_inside 10 -690.822264545374 20 -690.822264545373 30 2103.01109421295 11 -815.696038096872 21 -545.030667691736 31 2035.2022000213 12 -812.321046486997 22 -542.775570394861 32 2103.01109421295 13 -812.321046486997 23 -542.775570394861 33 2103.01109421295 70 1 0 3DFACE 8 body_half_inside 10 -812.321046486997 20 -542.775570394861 30 2103.01109421295 11 -682.252673061849 21 -682.252673061848 31 2169.85154878419 12 -690.822264545374 22 -690.822264545373 32 2103.01109421295 13 -690.822264545374 23 -690.822264545373 33 2103.01109421295 70 1 0 3DFACE 8 body_half_inside 10 -682.252673061849 20 -682.252673061848 30 2169.85154878419 11 -812.321046486997 21 -542.775570394861 31 2103.01109421295 12 -802.244272938819 22 -536.042485570818 32 2169.85154878419 13 -802.244272938819 23 -536.042485570818 33 2169.85154878419 70 1 0 3DFACE 8 body_half_inside 10 -802.244272938819 20 -536.042485570818 30 2169.85154878419 11 -668.106074549528 21 -668.106074549528 31 2234.76895526921 12 -682.252673061849 22 -682.252673061848 32 2169.85154878419 13 -682.252673061849 23 -682.252673061848 33 2169.85154878419 70 1 0 3DFACE 8 body_half_inside 10 -668.106074549528 20 -668.106074549528 30 2234.76895526921 11 -802.244272938819 21 -536.042485570818 31 2169.85154878419 12 -785.609632890959 22 -524.927574441361 32 2234.76895526921 13 -785.609632890959 23 -524.927574441361 33 2234.76895526921 70 1 0 3DFACE 8 body_half_inside 10 -785.609632890959 20 -524.927574441361 30 2234.76895526921 11 -648.584509266648 21 -648.584509266648 31 2296.83616997626 12 -668.106074549528 22 -668.106074549528 32 2234.76895526921 13 -668.106074549528 23 -668.106074549528 33 2234.76895526921 70 1 0 3DFACE 8 body_half_inside 10 -648.584509266648 20 -648.584509266648 30 2296.83616997626 11 -785.609632890959 21 -524.927574441361 31 2234.76895526921 12 -762.654700553784 22 -509.589579018778 32 2296.83616997626 13 -762.654700553784 23 -509.589579018778 33 2296.83616997626 70 1 0 3DFACE 8 body_half_inside 10 646.067882633009 20 -267.610079200261 30 628.271001705821 11 638.160694862082 21 -126.938054583664 31 587.016306884026 12 601.1342301078 22 -248.997950917359 32 587.016306884026 13 601.1342301078 23 -248.997950917359 33 587.016306884026 70 1 0 3DFACE 8 body_half_inside 10 638.160694862082 20 -126.938054583664 30 587.016306884026 11 646.067882633009 21 -267.610079200261 31 628.271001705821 12 685.862005953678 22 -136.426435300007 32 628.271001705821 13 685.862005953678 23 -136.426435300007 33 628.271001705821 70 1 0 3DFACE 8 body_half_inside 10 735.304703143143 20 -1.80477854883065e-13 30 680.911023534629 11 685.862005953678 21 -136.426435300007 31 628.271001705821 12 721.176029454062 22 -143.45083131617 32 680.911023534629 13 721.176029454062 23 -143.45083131617 33 680.911023534629 70 1 0 3DFACE 8 body_half_inside 10 685.862005953678 20 -136.426435300007 30 628.271001705821 11 735.304703143143 21 -1.80477854883065e-13 31 680.911023534629 12 699.298837021391 22 -1.80477854883065e-13 32 628.271001705821 13 699.298837021391 23 -1.80477854883065e-13 33 628.271001705821 70 1 0 3DFACE 8 body_half_inside 10 756.121025443459 20 -1.80477854883065e-13 30 741.194313252463 11 721.176029454062 21 -143.45083131617 31 680.911023534629 12 741.592371958341 22 -147.51189433693 32 741.194313252463 13 741.592371958341 23 -147.51189433693 33 741.194313252463 70 1 0 3DFACE 8 body_half_inside 10 721.176029454062 20 -143.45083131617 30 680.911023534629 11 756.121025443459 21 -1.80477854883065e-13 31 741.194313252463 12 735.304703143143 22 -1.80477854883065e-13 32 680.911023534629 13 735.304703143143 23 -1.80477854883065e-13 33 680.911023534629 70 1 0 3DFACE 8 body_half_inside 10 -733.707315899088 20 -490.247554968877 30 1715.23764468454 11 -847.416499400322 21 -351.011407030345 31 1773.56823006635 12 -762.654700553784 22 -509.589579018778 32 1773.56823006635 13 -762.654700553784 23 -509.589579018778 33 1773.56823006635 70 1 0 3DFACE 8 body_half_inside 10 -847.416499400322 20 -351.011407030345 30 1773.56823006635 11 -733.707315899088 21 -490.247554968877 31 1715.23764468454 12 -815.251888924487 22 -337.688389142806 32 1715.23764468454 13 -815.251888924487 23 -337.688389142806 33 1715.23764468454 70 1 0 3DFACE 8 body_half_inside 10 760.268019036986 20 -1.80477854883065e-13 30 804.835469255871 11 741.592371958341 21 -147.51189433693 31 741.194313252463 12 745.659682232799 22 -148.32093265249 32 804.835469255871 13 745.659682232799 23 -148.32093265249 33 804.835469255871 70 1 0 3DFACE 8 body_half_inside 10 741.592371958341 20 -147.51189433693 30 741.194313252463 11 760.268019036986 21 -1.80477854883065e-13 31 804.835469255871 12 756.121025443459 22 -1.80477854883065e-13 32 741.194313252463 13 756.121025443459 23 -1.80477854883065e-13 33 741.194313252463 70 1 0 3DFACE 8 body_half_inside 10 733.088824464618 20 -145.820433573828 30 867.310386884026 11 760.268019036986 21 -1.80477854883065e-13 31 804.835469255871 12 745.659682232799 22 -148.32093265249 32 804.835469255871 13 745.659682232799 23 -148.32093265249 33 804.835469255871 70 1 0 3DFACE 8 body_half_inside 10 760.268019036986 20 -1.80477854883065e-13 30 804.835469255871 11 733.088824464618 21 -145.820433573828 31 867.310386884026 12 747.450883605455 22 -1.80477854883065e-13 32 867.310386884026 13 747.450883605455 23 -1.80477854883065e-13 33 867.310386884026 70 1 0 3DFACE 8 body_half_inside 10 467.156803605456 20 0.0 30 1100.8886000213 11 733.088824464618 21 -145.820433573828 31 867.310386884026 12 458.180516616454 22 -91.1377712474138 32 1100.8886000213 13 458.180516616454 23 -91.1377712474138 33 1100.8886000213 70 1 0 3DFACE 8 body_half_inside 10 733.088824464618 20 -145.820433573828 30 867.310386884026 11 467.156803605456 21 0.0 31 1100.8886000213 12 747.450883605455 22 -1.80477854883065e-13 32 867.310386884026 13 747.450883605455 23 -1.80477854883065e-13 33 867.310386884026 70 1 0 3DFACE 8 body_half_inside 10 -733.714233519903 20 -303.914386430124 30 1474.6140400213 11 -582.640028068573 21 -389.307620352121 31 1661.47676002131 12 -660.325364744673 22 -441.215302798659 32 1474.6140400213 13 -660.325364744673 23 -441.215302798659 33 1474.6140400213 70 1 0 3DFACE 8 body_half_inside 10 -582.640028068573 20 -389.307620352121 30 1661.47676002131 11 -733.714233519903 21 -303.914386430124 31 1474.6140400213 12 -647.39491232121 22 -268.159752894786 32 1661.47676002131 13 -647.39491232121 23 -268.159752894786 33 1661.47676002131 70 1 0 3DFACE 8 body_half_inside 10 -815.251888924486 20 -337.688389142806 30 2355.16675535807 11 -699.180902483484 21 -467.1777430806 31 2408.9276400213 12 -733.707315899088 22 -490.247554968877 32 2355.16675535807 13 -733.707315899088 23 -490.247554968877 33 2355.16675535807 70 1 0 3DFACE 8 body_half_inside 10 -699.180902483484 20 -467.1777430806 30 2408.9276400213 11 -815.251888924486 21 -337.688389142806 31 2355.16675535807 12 -776.88819383121 22 -321.797626332425 32 2408.9276400213 13 -776.88819383121 23 -321.797626332425 33 2408.9276400213 70 1 0 3DFACE 8 body_half_inside 10 -847.416499400322 20 -351.011407030345 30 2296.83616997626 11 -733.707315899088 21 -490.247554968877 31 2355.16675535807 12 -762.654700553784 22 -509.589579018778 32 2296.83616997626 13 -762.654700553784 23 -509.589579018778 33 2296.83616997626 70 1 0 3DFACE 8 body_half_inside 10 -733.707315899088 20 -490.247554968877 30 2355.16675535807 11 -847.416499400322 21 -351.011407030345 31 2296.83616997626 12 -815.251888924486 22 -337.688389142806 32 2355.16675535807 13 -815.251888924486 23 -337.688389142806 33 2355.16675535807 70 1 0 3DFACE 8 body_half_inside 10 -824.740107573921 20 -164.051007270482 30 1661.47676002131 11 -882.422285845505 21 0.0 31 1715.23764468454 12 -865.466789057043 22 -172.152047899808 32 1715.23764468454 13 -865.466789057043 23 -172.152047899808 33 1715.23764468454 70 1 0 3DFACE 8 body_half_inside 10 -882.422285845505 20 0.0 30 1715.23764468454 11 -824.740107573921 21 -164.051007270482 31 1661.47676002131 12 -840.897721502147 22 0.0 32 1661.47676002131 13 -840.897721502147 23 0.0 33 1661.47676002131 70 1 0 3DFACE 8 body_half_inside 10 -458.180516616454 20 -91.1377712474136 30 1100.8886000213 11 -690.554572920556 21 -286.037069662455 31 867.310386884026 12 -733.088824464618 22 -145.820433573828 32 867.310386884026 13 -733.088824464618 23 -145.820433573828 33 867.310386884026 70 1 0 3DFACE 8 body_half_inside 10 -690.554572920556 20 -286.037069662455 30 867.310386884026 11 -458.180516616454 21 -91.1377712474136 31 1100.8886000213 12 -431.596609324475 22 -178.77316905644 32 1100.8886000213 13 -431.596609324475 23 -178.77316905644 33 1100.8886000213 70 1 0 3DFACE 8 body_half_inside 10 -865.466789057043 20 -172.152047899808 30 2355.16675535807 11 -776.88819383121 21 -321.797626332425 31 2408.9276400213 12 -815.251888924486 22 -337.688389142806 32 2355.16675535807 13 -815.251888924486 23 -337.688389142806 33 2355.16675535807 70 1 0 3DFACE 8 body_half_inside 10 -776.88819383121 20 -321.797626332425 30 2408.9276400213 11 -865.466789057043 21 -172.152047899808 31 2355.16675535807 12 -824.740107573921 22 -164.051007270482 32 2408.9276400213 13 -824.740107573921 23 -164.051007270482 33 2408.9276400213 70 1 0 3DFACE 8 body_half_inside 10 -733.088824464619 20 -145.820433573828 30 1287.75132002131 11 -604.235251721863 21 -250.282436127117 31 1474.6140400213 12 -690.554572920556 22 -286.037069662455 32 1287.75132002131 13 -690.554572920556 23 -286.037069662455 33 1287.75132002131 70 1 0 3DFACE 8 body_half_inside 10 -604.235251721863 20 -250.282436127117 30 1474.6140400213 11 -733.088824464619 21 -145.820433573828 31 1287.75132002131 12 -641.452721848564 22 -127.592879465023 32 1474.6140400213 13 -641.452721848564 23 -127.592879465023 33 1474.6140400213 70 1 0 3DFACE 8 body_half_inside 10 -962.179081004757 20 -191.38931884584 30 2035.2022000213 11 -902.602786167016 21 -373.87031546612 31 2103.01109421295 12 -906.352875917291 22 -375.423653500801 32 2035.2022000213 13 -906.352875917291 23 -375.423653500801 33 2035.2022000213 70 1 0 3DFACE 8 body_half_inside 10 -902.602786167016 20 -373.87031546612 30 2103.01109421295 11 -962.179081004757 21 -191.38931884584 31 2035.2022000213 12 -958.19800696011 22 -190.597433982906 32 2103.01109421295 13 -958.19800696011 23 -190.597433982906 33 2103.01109421295 70 1 0 3DFACE 8 body_half_inside 10 -733.088824464619 20 -145.820433573828 30 2408.9276400213 11 -690.554572920556 21 -286.037069662455 31 2549.0746800213 12 -690.554572920556 22 -286.037069662455 32 2408.9276400213 13 -690.554572920556 23 -286.037069662455 33 2408.9276400213 70 1 0 3DFACE 8 body_half_inside 10 -690.554572920556 20 -286.037069662455 30 2549.0746800213 11 -733.088824464619 21 -145.820433573828 31 2408.9276400213 12 -733.088824464618 22 -145.820433573828 32 2549.0746800213 13 -733.088824464618 23 -145.820433573828 33 2549.0746800213 70 1 0 3DFACE 8 body_half_inside 10 -741.592371958341 20 -147.511894336929 30 741.194313252463 11 -760.268019036986 21 0.0 31 804.835469255871 12 -745.659682232799 22 -148.32093265249 32 804.835469255871 13 -745.659682232799 23 -148.32093265249 33 804.835469255871 70 1 0 3DFACE 8 body_half_inside 10 -760.268019036986 20 0.0 30 804.835469255871 11 -741.592371958341 21 -147.511894336929 31 741.194313252463 12 -756.121025443459 22 0.0 32 741.194313252463 13 -756.121025443459 23 0.0 33 741.194313252463 70 1 0 3DFACE 8 body_half_inside 10 0.0 20 -882.422285845505 30 2355.16675535807 11 178.9440635192 21 -899.612557411553 31 2296.83616997626 12 0.0 22 -917.237009349992 32 2296.83616997626 13 0.0 23 -917.237009349992 33 2296.83616997626 70 1 0 3DFACE 8 body_half_inside 10 178.9440635192 20 -899.612557411553 30 2296.83616997626 11 0.0 21 -882.422285845505 31 2355.16675535807 12 172.152047899807 22 -865.466789057043 32 2355.16675535807 13 172.152047899807 23 -865.466789057043 33 2355.16675535807 70 1 0 3DFACE 8 body_half_inside 10 0.0 20 -840.897721502147 30 2408.9276400213 11 172.152047899807 21 -865.466789057043 31 2355.16675535807 12 0.0 22 -882.422285845505 32 2355.16675535807 13 0.0 23 -882.422285845505 33 2355.16675535807 70 1 0 3DFACE 8 body_half_inside 10 172.152047899807 20 -865.466789057043 30 2355.16675535807 11 0.0 21 -840.897721502147 31 2408.9276400213 12 164.051007270482 22 -824.740107573921 32 2408.9276400213 13 164.051007270482 23 -824.740107573921 33 2408.9276400213 70 1 0 3DFACE 8 body_half_inside 10 -815.251888924487 20 -337.688389142806 30 1715.23764468454 11 -899.612557411553 21 -178.944063519201 31 1773.56823006635 12 -847.416499400322 22 -351.011407030345 32 1773.56823006635 13 -847.416499400322 23 -351.011407030345 33 1773.56823006635 70 1 0 3DFACE 8 body_half_inside 10 -899.612557411553 20 -178.944063519201 30 1773.56823006635 11 -815.251888924487 21 -337.688389142806 31 1715.23764468454 12 -865.466789057043 22 -172.152047899808 32 1715.23764468454 13 -865.466789057043 23 -172.152047899808 33 1715.23764468454 70 1 0 3DFACE 8 body_half_inside 10 -733.707315899088 20 -490.247554968877 30 2355.16675535807 11 -594.604481158485 21 -594.604481158485 31 2408.9276400213 12 -623.966782191491 22 -623.96678219149 32 2355.16675535807 13 -623.966782191491 23 -623.96678219149 33 2355.16675535807 70 1 0 3DFACE 8 body_half_inside 10 -594.604481158485 20 -594.604481158485 30 2408.9276400213 11 -733.707315899088 21 -490.247554968877 31 2355.16675535807 12 -699.180902483484 22 -467.1777430806 32 2408.9276400213 13 -699.180902483484 23 -467.1777430806 33 2408.9276400213 70 1 0 3DFACE 8 body_half_inside 10 -534.658304488796 20 -534.658304488796 30 741.194313252463 11 -408.513405265646 21 -611.383516446667 31 680.911023534629 12 -519.938941830878 22 -519.938941830878 32 680.911023534629 13 -519.938941830878 23 -519.938941830878 33 680.911023534629 70 1 0 3DFACE 8 body_half_inside 10 -408.513405265646 20 -611.383516446667 30 680.911023534629 11 -534.658304488796 21 -534.658304488796 31 741.194313252463 12 -420.078334296643 22 -628.691655879275 32 741.194313252463 13 -420.078334296643 23 -628.691655879275 33 741.194313252463 70 1 0 3DFACE 8 body_half_inside 10 -537.590671780316 20 -537.590671780316 30 804.835469255871 11 -420.078334296643 21 -628.691655879275 31 741.194313252463 12 -534.658304488796 22 -534.658304488796 32 741.194313252463 13 -534.658304488796 23 -534.658304488796 33 741.194313252463 70 1 0 3DFACE 8 body_half_inside 10 -420.078334296643 20 -628.691655879275 30 741.194313252463 11 -537.590671780316 21 -537.590671780316 31 804.835469255871 12 -422.38228049373 22 -632.139755034707 32 804.835469255871 13 -422.38228049373 23 -632.139755034707 33 804.835469255871 70 1 0 3DFACE 8 body_half_inside 10 -528.527588401294 20 -528.527588401294 30 867.310386884026 11 -422.38228049373 21 -632.139755034707 31 804.835469255871 12 -537.590671780316 22 -537.590671780316 32 804.835469255871 13 -537.590671780316 23 -537.590671780316 33 804.835469255871 70 1 0 3DFACE 8 body_half_inside 10 -422.38228049373 20 -632.139755034707 30 804.835469255871 11 -528.527588401294 21 -528.527588401294 31 867.310386884026 12 -415.26146157539 22 -621.482696406622 32 867.310386884026 13 -415.26146157539 23 -621.482696406622 33 867.310386884026 70 1 0 3DFACE 8 body_half_inside 10 -330.32974370685 20 -330.32974370685 30 1100.8886000213 11 -415.26146157539 21 -621.482696406622 31 867.310386884026 12 -528.527588401294 22 -528.527588401294 32 867.310386884026 13 -528.527588401294 23 -528.527588401294 33 867.310386884026 70 1 0 3DFACE 8 body_half_inside 10 -415.26146157539 20 -621.482696406622 30 867.310386884026 11 -330.32974370685 21 -330.32974370685 31 1100.8886000213 12 -259.538414235776 22 -388.426686378324 32 1100.8886000213 13 -259.538414235776 23 -388.426686378324 33 1100.8886000213 70 1 0 3DFACE 8 body_half_inside 10 -702.396062011173 20 -290.941975042481 30 804.835469255871 11 -621.482696406623 21 -415.26146157539 31 867.310386884026 12 -632.139755034707 22 -422.38228049373 32 804.835469255871 13 -632.139755034707 23 -422.38228049373 33 804.835469255871 70 1 0 3DFACE 8 body_half_inside 10 -621.482696406623 20 -415.26146157539 30 867.310386884026 11 -702.396062011173 21 -290.941975042481 31 804.835469255871 12 -690.554572920556 22 -286.037069662455 32 867.310386884026 13 -690.554572920556 23 -286.037069662455 33 867.310386884026 70 1 0 3DFACE 8 body_half_inside 10 -762.654700553784 20 -509.589579018778 30 2296.83616997626 11 -623.966782191491 21 -623.96678219149 31 2355.16675535807 12 -648.584509266648 22 -648.584509266648 32 2296.83616997626 13 -648.584509266648 23 -648.584509266648 33 2296.83616997626 70 1 0 3DFACE 8 body_half_inside 10 -623.966782191491 20 -623.96678219149 30 2355.16675535807 11 -762.654700553784 21 -509.589579018778 31 2296.83616997626 12 -733.707315899088 22 -490.247554968877 32 2355.16675535807 13 -733.707315899088 23 -490.247554968877 33 2355.16675535807 70 1 0 3DFACE 8 body_half_inside 10 0.0 20 -944.844671731792 30 1835.6354447734 11 178.9440635192 21 -899.612557411553 31 1773.56823006635 12 0.0 22 -917.237009349992 32 1773.56823006635 13 0.0 23 -917.237009349992 33 1773.56823006635 70 1 0 3DFACE 8 body_half_inside 10 178.9440635192 20 -899.612557411553 30 1773.56823006635 11 0.0 21 -944.844671731792 31 1835.6354447734 12 184.330051263378 22 -926.689746301964 32 1835.6354447734 13 184.330051263378 23 -926.689746301964 33 1835.6354447734 70 1 0 3DFACE 8 body_half_inside 10 -363.353779128852 20 -543.797359730523 30 1474.6140400213 11 -286.037069662455 21 -690.554572920556 31 1287.75132002131 12 -415.26146157539 22 -621.482696406623 32 1287.75132002131 13 -415.26146157539 23 -621.482696406623 33 1287.75132002131 70 1 0 3DFACE 8 body_half_inside 10 -286.037069662455 20 -690.554572920556 30 1287.75132002131 11 -363.353779128852 21 -543.797359730523 31 1474.6140400213 12 -250.282436127117 22 -604.235251721863 32 1474.6140400213 13 -250.282436127117 23 -604.235251721863 33 1474.6140400213 70 1 0 3DFACE 8 body_half_inside 10 -582.640028068573 20 -389.307620352121 30 1100.8886000213 11 -429.428666054072 21 -429.428666054072 31 1287.75132002131 12 -495.494614285554 22 -495.494614285554 32 1100.8886000213 13 -495.494614285554 23 -495.494614285554 33 1100.8886000213 70 1 0 3DFACE 8 body_half_inside 10 -429.428666054072 20 -429.428666054072 30 1287.75132002131 11 -582.640028068573 21 -389.307620352121 31 1100.8886000213 12 -504.954691392474 22 -337.399937905583 32 1287.75132002131 13 -504.954691392474 23 -337.399937905583 33 1287.75132002131 70 1 0 3DFACE 8 body_half_inside 10 0.0 20 -747.450883605455 30 2549.0746800213 11 145.820433573828 21 -733.088824464619 31 2408.9276400213 12 0.0 22 -747.450883605455 32 2408.9276400213 13 0.0 23 -747.450883605455 33 2408.9276400213 70 1 0 3DFACE 8 body_half_inside 10 145.820433573828 20 -733.088824464619 30 2408.9276400213 11 0.0 21 -747.450883605455 31 2549.0746800213 12 145.820433573828 22 -733.088824464618 32 2549.0746800213 13 145.820433573828 23 -733.088824464618 33 2549.0746800213 70 1 0 3DFACE 8 body_half_inside 10 -699.180902483484 20 -467.1777430806 30 1661.47676002131 11 -815.251888924487 21 -337.688389142806 31 1715.23764468454 12 -733.707315899088 22 -490.247554968877 32 1715.23764468454 13 -733.707315899088 23 -490.247554968877 33 1715.23764468454 70 1 0 3DFACE 8 body_half_inside 10 -815.251888924487 20 -337.688389142806 30 1715.23764468454 11 -699.180902483484 21 -467.1777430806 31 1661.47676002131 12 -776.88819383121 22 -321.797626332425 32 1661.47676002131 13 -776.88819383121 23 -321.797626332425 33 1661.47676002131 70 1 0 3DFACE 8 body_half_inside 10 -902.602786167016 20 -373.87031546612 30 1967.39330582966 11 -962.179081004757 21 -191.38931884584 31 2035.2022000213 12 -906.352875917291 22 -375.423653500801 32 2035.2022000213 13 -906.352875917291 23 -375.423653500801 33 2035.2022000213 70 1 0 3DFACE 8 body_half_inside 10 -962.179081004757 20 -191.38931884584 30 2035.2022000213 11 -902.602786167016 21 -373.87031546612 31 1967.39330582966 12 -958.198006960111 22 -190.597433982906 32 1967.39330582966 13 -958.198006960111 23 -190.597433982906 33 1967.39330582966 70 1 0 3DFACE 8 body_half_inside 10 -647.39491232121 20 -268.159752894786 30 1100.8886000213 11 -504.954691392474 21 -337.399937905583 31 1287.75132002131 12 -582.640028068573 22 -389.307620352121 32 1100.8886000213 13 -582.640028068573 23 -389.307620352121 33 1100.8886000213 70 1 0 3DFACE 8 body_half_inside 10 -504.954691392474 20 -337.399937905583 30 1287.75132002131 11 -647.39491232121 21 -268.159752894786 31 1100.8886000213 12 -561.075591122516 22 -232.405119359447 32 1287.75132002131 13 -561.075591122516 23 -232.405119359447 33 1287.75132002131 70 1 0 3DFACE 8 body_half_inside 10 -747.450883605455 20 0.0 30 2408.9276400213 11 -733.088824464618 21 -145.820433573828 31 2549.0746800213 12 -733.088824464619 22 -145.820433573828 32 2408.9276400213 13 -733.088824464619 23 -145.820433573828 33 2408.9276400213 70 1 0 3DFACE 8 body_half_inside 10 -733.088824464618 20 -145.820433573828 30 2549.0746800213 11 -747.450883605455 21 0.0 31 2408.9276400213 12 -747.450883605455 22 0.0 32 2549.0746800213 13 -747.450883605455 23 0.0 33 2549.0746800213 70 1 0 3DFACE 8 body_half_inside 10 -581.445732901797 20 -388.509617834311 30 628.271001705821 11 -601.134230107799 21 -248.997950917359 31 587.016306884026 12 -646.067882633009 22 -267.610079200261 32 628.271001705821 13 -646.067882633009 23 -267.610079200261 33 628.271001705821 70 1 0 3DFACE 8 body_half_inside 10 -601.134230107799 20 -248.997950917359 30 587.016306884026 11 -581.445732901797 21 -388.509617834311 31 628.271001705821 12 -541.006514010434 22 -361.48899563696 32 587.016306884026 13 -541.006514010434 23 -361.48899563696 33 587.016306884026 70 1 0 3DFACE 8 body_half_inside 10 -494.478949733692 20 -494.478949733692 30 628.271001705821 11 -611.383516446667 21 -408.513405265645 31 680.911023534629 12 -519.938941830878 22 -519.938941830878 32 680.911023534629 13 -519.938941830878 23 -519.938941830878 33 680.911023534629 70 1 0 3DFACE 8 body_half_inside 10 -611.383516446667 20 -408.513405265645 30 680.911023534629 11 -494.478949733692 21 -494.478949733692 31 628.271001705821 12 -581.445732901797 22 -388.509617834311 32 628.271001705821 13 -581.445732901797 23 -388.509617834311 33 628.271001705821 70 1 0 3DFACE 8 body_half_inside 10 -534.658304488796 20 -534.658304488796 30 741.194313252463 11 -632.139755034707 21 -422.38228049373 31 804.835469255871 12 -537.590671780316 22 -537.590671780316 32 804.835469255871 13 -537.590671780316 23 -537.590671780316 33 804.835469255871 70 1 0 3DFACE 8 body_half_inside 10 -632.139755034707 20 -422.38228049373 30 804.835469255871 11 -534.658304488796 21 -534.658304488796 31 741.194313252463 12 -628.691655879276 22 -420.078334296643 32 741.194313252463 13 -628.691655879276 23 -420.078334296643 33 741.194313252463 70 1 0 3DFACE 8 body_half_inside 10 -632.139755034707 20 -422.38228049373 30 804.835469255871 11 -528.527588401294 21 -528.527588401294 31 867.310386884026 12 -537.590671780316 22 -537.590671780316 32 804.835469255871 13 -537.590671780316 23 -537.590671780316 33 804.835469255871 70 1 0 3DFACE 8 body_half_inside 10 -528.527588401294 20 -528.527588401294 30 867.310386884026 11 -632.139755034707 21 -422.38228049373 31 804.835469255871 12 -621.482696406623 22 -415.26146157539 32 867.310386884026 13 -621.482696406623 23 -415.26146157539 33 867.310386884026 70 1 0 3DFACE 8 body_half_inside 10 -388.426686378325 20 -259.538414235776 30 1100.8886000213 11 -528.527588401294 21 -528.527588401294 31 867.310386884026 12 -621.482696406623 22 -415.26146157539 32 867.310386884026 13 -621.482696406623 23 -415.26146157539 33 867.310386884026 70 1 0 3DFACE 8 body_half_inside 10 -528.527588401294 20 -528.527588401294 30 867.310386884026 11 -388.426686378325 21 -259.538414235776 31 1100.8886000213 12 -330.32974370685 22 -330.32974370685 32 1100.8886000213 13 -330.32974370685 23 -330.32974370685 33 1100.8886000213 70 1 0 3DFACE 8 body_half_inside 10 -164.051007270482 20 -824.740107573921 30 2408.9276400213 11 0.0 21 -882.422285845505 31 2355.16675535807 12 -172.152047899808 22 -865.466789057043 32 2355.16675535807 13 -172.152047899808 23 -865.466789057043 33 2355.16675535807 70 1 0 3DFACE 8 body_half_inside 10 0.0 20 -882.422285845505 30 2355.16675535807 11 -164.051007270482 21 -824.740107573921 31 2408.9276400213 12 0.0 22 -840.897721502147 32 2408.9276400213 13 0.0 23 -840.897721502147 33 2408.9276400213 70 1 0 3DFACE 8 body_half_inside 10 -690.822264545374 20 -690.822264545374 30 1967.39330582966 11 -536.042485570819 21 -802.244272938819 31 1900.55285125842 12 -682.252673061849 22 -682.252673061849 32 1900.55285125842 13 -682.252673061849 23 -682.252673061849 33 1900.55285125842 70 1 0 3DFACE 8 body_half_inside 10 -536.042485570819 20 -802.244272938819 30 1900.55285125842 11 -690.822264545374 21 -690.822264545374 31 1967.39330582966 12 -542.775570394861 22 -812.321046486997 32 1967.39330582966 13 -542.775570394861 23 -812.321046486997 33 1967.39330582966 70 1 0 3DFACE 8 body_half_inside 10 595.634670540536 20 -118.479102410621 30 1287.75132002131 11 700.735203605455 21 -1.80477854883065e-13 31 1100.8886000213 12 687.270773156591 22 -136.706656519426 32 1100.8886000213 13 687.270773156591 23 -136.706656519426 33 1100.8886000213 70 1 0 3DFACE 8 body_half_inside 10 700.735203605455 20 -1.80477854883065e-13 30 1100.8886000213 11 595.634670540536 21 -118.479102410621 31 1287.75132002131 12 607.303843605455 22 -1.80477854883065e-13 32 1287.75132002131 13 607.303843605455 23 -1.80477854883065e-13 33 1287.75132002131 70 1 0 3DFACE 8 body_half_inside 10 0.0 20 -735.304703143143 30 680.911023534629 11 136.426435300007 21 -685.862005953678 31 628.271001705821 12 0.0 22 -699.298837021391 32 628.271001705821 13 0.0 23 -699.298837021391 33 628.271001705821 70 1 0 3DFACE 8 body_half_inside 10 136.426435300007 20 -685.862005953678 30 628.271001705821 11 0.0 21 -735.304703143143 31 680.911023534629 12 143.450831316169 22 -721.176029454062 32 680.911023534629 13 143.450831316169 23 -721.176029454062 33 680.911023534629 70 1 0 3DFACE 8 body_half_inside 10 -785.609632890959 20 -524.927574441361 30 1835.6354447734 11 -891.406075310523 21 -369.232485975391 31 1900.55285125842 12 -802.244272938819 22 -536.042485570818 32 1900.55285125842 13 -802.244272938819 23 -536.042485570818 33 1900.55285125842 70 1 0 3DFACE 8 body_half_inside 10 -891.406075310523 20 -369.232485975391 30 1900.55285125842 11 -785.609632890959 21 -524.927574441361 31 1835.6354447734 12 -872.922653615348 22 -361.576402030189 32 1835.6354447734 13 -872.922653615348 23 -361.576402030189 33 1835.6354447734 70 1 0 3DFACE 8 body_half_inside 10 -917.237009349992 20 0.0 30 2296.83616997626 11 -865.466789057043 21 -172.152047899808 31 2355.16675535807 12 -899.612557411553 22 -178.9440635192 32 2296.83616997626 13 -899.612557411553 23 -178.9440635192 33 2296.83616997626 70 1 0 3DFACE 8 body_half_inside 10 -865.466789057043 20 -172.152047899808 30 2355.16675535807 11 -917.237009349992 21 0.0 31 2296.83616997626 12 -882.422285845505 22 0.0 32 2355.16675535807 13 -882.422285845505 23 0.0 33 2355.16675535807 70 1 0 3DFACE 8 body_half_inside 10 -337.688389142806 20 -815.251888924486 30 2355.16675535807 11 -178.9440635192 21 -899.612557411553 31 2296.83616997626 12 -351.011407030345 22 -847.416499400322 32 2296.83616997626 13 -351.011407030345 23 -847.416499400322 33 2296.83616997626 70 1 0 3DFACE 8 body_half_inside 10 -178.9440635192 20 -899.612557411553 30 2296.83616997626 11 -337.688389142806 21 -815.251888924486 31 2355.16675535807 12 -172.152047899808 22 -865.466789057043 32 2355.16675535807 13 -172.152047899808 23 -865.466789057043 33 2355.16675535807 70 1 0 3DFACE 8 body_half_inside 10 -321.797626332425 20 -776.88819383121 30 2408.9276400213 11 -172.152047899808 21 -865.466789057043 31 2355.16675535807 12 -337.688389142806 22 -815.251888924486 32 2355.16675535807 13 -337.688389142806 23 -815.251888924486 33 2355.16675535807 70 1 0 3DFACE 8 body_half_inside 10 -172.152047899808 20 -865.466789057043 30 2355.16675535807 11 -321.797626332425 21 -776.88819383121 31 2408.9276400213 12 -164.051007270482 22 -824.740107573921 32 2408.9276400213 13 -164.051007270482 23 -824.740107573921 33 2408.9276400213 70 1 0 3DFACE 8 body_half_inside 10 -747.450883605455 20 0.0 30 1287.75132002131 11 -641.452721848564 21 -127.592879465023 31 1474.6140400213 12 -733.088824464619 22 -145.820433573828 32 1287.75132002131 13 -733.088824464619 23 -145.820433573828 33 1287.75132002131 70 1 0 3DFACE 8 body_half_inside 10 -641.452721848564 20 -127.592879465023 30 1474.6140400213 11 -747.450883605455 21 0.0 31 1287.75132002131 12 -654.019523605455 22 0.0 32 1474.6140400213 13 -654.019523605455 23 0.0 33 1474.6140400213 70 1 0 3DFACE 8 body_half_inside 10 -623.966782191491 20 -623.966782191491 30 1715.23764468454 11 -467.1777430806 21 -699.180902483483 31 1661.47676002131 12 -594.604481158485 22 -594.604481158485 32 1661.47676002131 13 -594.604481158485 23 -594.604481158485 33 1661.47676002131 70 1 0 3DFACE 8 body_half_inside 10 -467.1777430806 20 -699.180902483483 30 1661.47676002131 11 -623.966782191491 21 -623.966782191491 31 1715.23764468454 12 -490.247554968878 22 -733.707315899088 32 1715.23764468454 13 -490.247554968878 23 -733.707315899088 33 1715.23764468454 70 1 0 3DFACE 8 body_half_inside 10 -369.232485975391 20 -891.406075310522 30 2169.85154878419 11 -190.597433982906 21 -958.19800696011 31 2103.01109421295 12 -373.87031546612 22 -902.602786167016 32 2103.01109421295 13 -373.87031546612 23 -902.602786167016 33 2103.01109421295 70 1 0 3DFACE 8 body_half_inside 10 -190.597433982906 20 -958.19800696011 30 2103.01109421295 11 -369.232485975391 21 -891.406075310522 31 2169.85154878419 12 -188.233089011893 22 -946.311642114328 32 2169.85154878419 13 -188.233089011893 23 -946.311642114328 33 2169.85154878419 70 1 0 3DFACE 8 body_half_inside 10 -690.554572920556 20 -286.037069662455 30 2408.9276400213 11 -621.482696406623 21 -415.26146157539 31 2549.0746800213 12 -621.482696406623 22 -415.26146157539 32 2408.9276400213 13 -621.482696406623 23 -415.26146157539 33 2408.9276400213 70 1 0 3DFACE 8 body_half_inside 10 -621.482696406623 20 -415.26146157539 30 2549.0746800213 11 -690.554572920556 21 -286.037069662455 31 2408.9276400213 12 -690.554572920556 22 -286.037069662455 32 2549.0746800213 13 -690.554572920556 23 -286.037069662455 33 2549.0746800213 70 1 0 3DFACE 8 body_half_inside 10 -388.509617834311 20 -581.445732901797 30 628.271001705821 11 -460.088220979597 21 -460.088220979597 31 587.016306884026 12 -494.478949733692 22 -494.478949733692 32 628.271001705821 13 -494.478949733692 23 -494.478949733692 33 628.271001705821 70 1 0 3DFACE 8 body_half_inside 10 -460.088220979597 20 -460.088220979597 30 587.016306884026 11 -388.509617834311 21 -581.445732901797 31 628.271001705821 12 -361.48899563696 22 -541.006514010434 32 587.016306884026 13 -361.48899563696 23 -541.006514010434 33 587.016306884026 70 1 0 3DFACE 8 body_half_inside 10 -542.775570394861 20 -812.321046486997 30 1967.39330582966 11 -369.232485975391 21 -891.406075310522 31 1900.55285125842 12 -536.042485570819 22 -802.244272938819 32 1900.55285125842 13 -536.042485570819 23 -802.244272938819 33 1900.55285125842 70 1 0 3DFACE 8 body_half_inside 10 -369.232485975391 20 -891.406075310522 30 1900.55285125842 11 -542.775570394861 21 -812.321046486997 31 1967.39330582966 12 -373.870315466121 22 -902.602786167016 32 1967.39330582966 13 -373.870315466121 23 -902.602786167016 33 1967.39330582966 70 1 0 3DFACE 8 body_half_inside 10 -778.906875772646 20 -154.93421062823 30 1474.6140400213 11 -647.39491232121 21 -268.159752894786 31 1661.47676002131 12 -733.714233519903 22 -303.914386430124 32 1474.6140400213 13 -733.714233519903 23 -303.914386430124 33 1474.6140400213 70 1 0 3DFACE 8 body_half_inside 10 -647.39491232121 20 -268.159752894786 30 1661.47676002131 11 -778.906875772646 21 -154.93421062823 31 1474.6140400213 12 -687.270773156591 22 -136.706656519425 32 1661.47676002131 13 -687.270773156591 23 -136.706656519425 33 1661.47676002131 70 1 0 3DFACE 8 body_half_inside 10 -369.232485975391 20 -891.406075310522 30 1900.55285125842 11 -184.330051263378 21 -926.689746301964 31 1835.6354447734 12 -361.576402030189 22 -872.922653615348 32 1835.6354447734 13 -361.576402030189 23 -872.922653615348 33 1835.6354447734 70 1 0 3DFACE 8 body_half_inside 10 -184.330051263378 20 -926.689746301964 30 1835.6354447734 11 -369.232485975391 21 -891.406075310522 31 1900.55285125842 12 -188.233089011893 22 -946.311642114328 32 1900.55285125842 13 -188.233089011893 23 -946.311642114328 33 1900.55285125842 70 1 0 3DFACE 8 body_half_inside 10 -698.564739508658 20 -289.354989300114 30 741.194313252463 11 -745.659682232799 21 -148.32093265249 31 804.835469255871 12 -702.396062011173 22 -290.941975042481 32 804.835469255871 13 -702.396062011173 23 -290.941975042481 33 804.835469255871 70 1 0 3DFACE 8 body_half_inside 10 -745.659682232799 20 -148.32093265249 30 804.835469255871 11 -698.564739508658 21 -289.354989300114 31 741.194313252463 12 -741.592371958341 22 -147.511894336929 32 741.194313252463 13 -741.592371958341 23 -147.511894336929 33 741.194313252463 70 1 0 3DFACE 8 body_half_inside 10 -127.592879465023 20 -641.452721848564 30 1474.6140400213 11 0.0 21 -747.450883605455 31 1287.75132002131 12 -145.820433573828 22 -733.088824464619 32 1287.75132002131 13 -145.820433573828 23 -733.088824464619 33 1287.75132002131 70 1 0 3DFACE 8 body_half_inside 10 0.0 20 -747.450883605455 30 1287.75132002131 11 -127.592879465023 21 -641.452721848564 31 1474.6140400213 12 0.0 22 -654.019523605455 32 1474.6140400213 13 0.0 23 -654.019523605455 33 1474.6140400213 70 1 0 3DFACE 8 body_half_inside 10 -981.029283605455 20 -1.80477854883065e-13 30 2035.2022000213 11 -958.19800696011 21 -190.597433982906 31 2103.01109421295 12 -962.179081004757 22 -191.38931884584 32 2035.2022000213 13 -962.179081004757 23 -191.38931884584 33 2035.2022000213 70 1 0 3DFACE 8 body_half_inside 10 -958.19800696011 20 -190.597433982906 30 2103.01109421295 11 -981.029283605455 21 -1.80477854883065e-13 31 2035.2022000213 12 -976.970215709361 22 0.0 32 2103.01109421295 13 -976.970215709361 23 0.0 33 2103.01109421295 70 1 0 3DFACE 8 body_half_inside 10 -865.466789057043 20 -172.152047899808 30 1715.23764468454 11 -917.237009349992 21 0.0 31 1773.56823006635 12 -899.612557411553 22 -178.944063519201 32 1773.56823006635 13 -899.612557411553 23 -178.944063519201 33 1773.56823006635 70 1 0 3DFACE 8 body_half_inside 10 -917.237009349992 20 0.0 30 1773.56823006635 11 -865.466789057043 21 -172.152047899808 31 1715.23764468454 12 -882.422285845505 22 0.0 32 1715.23764468454 13 -882.422285845505 23 0.0 33 1715.23764468454 70 1 0 3DFACE 8 body_half_inside 10 -944.844671731792 20 0.0 30 2234.76895526921 11 -899.612557411553 21 -178.9440635192 31 2296.83616997626 12 -926.689746301964 22 -184.330051263378 32 2234.76895526921 13 -926.689746301964 23 -184.330051263378 33 2234.76895526921 70 1 0 3DFACE 8 body_half_inside 10 -899.612557411553 20 -178.9440635192 30 2296.83616997626 11 -944.844671731792 21 0.0 31 2234.76895526921 12 -917.237009349992 22 0.0 32 2296.83616997626 13 -917.237009349992 23 0.0 33 2296.83616997626 70 1 0 3DFACE 8 body_half_inside 10 -762.654700553784 20 -509.589579018778 30 1773.56823006635 11 -872.922653615348 21 -361.576402030189 31 1835.6354447734 12 -785.609632890959 22 -524.927574441361 32 1835.6354447734 13 -785.609632890959 23 -524.927574441361 33 1835.6354447734 70 1 0 3DFACE 8 body_half_inside 10 -872.922653615348 20 -361.576402030189 30 1835.6354447734 11 -762.654700553784 21 -509.589579018778 31 1773.56823006635 12 -847.416499400322 22 -351.011407030345 32 1773.56823006635 13 -847.416499400322 23 -351.011407030345 33 1773.56823006635 70 1 0 3DFACE 8 body_half_inside 10 -679.332965393238 20 -281.388927633011 30 680.911023534629 11 -741.592371958341 21 -147.511894336929 31 741.194313252463 12 -698.564739508658 22 -289.354989300114 32 741.194313252463 13 -698.564739508658 23 -289.354989300114 33 741.194313252463 70 1 0 3DFACE 8 body_half_inside 10 -741.592371958341 20 -147.511894336929 30 741.194313252463 11 -679.332965393238 21 -281.388927633011 31 680.911023534629 12 -721.176029454062 22 -143.450831316169 32 680.911023534629 13 -721.176029454062 23 -143.450831316169 33 680.911023534629 70 1 0 3DFACE 8 body_half_inside 10 -389.307620352121 20 -582.640028068573 30 1661.47676002131 11 -303.914386430124 21 -733.714233519903 31 1474.6140400213 12 -441.21530279866 22 -660.325364744672 32 1474.6140400213 13 -441.21530279866 23 -660.325364744672 33 1474.6140400213 70 1 0 3DFACE 8 body_half_inside 10 -303.914386430124 20 -733.714233519903 30 1474.6140400213 11 -389.307620352121 21 -582.640028068573 31 1661.47676002131 12 -268.159752894786 22 -647.39491232121 32 1661.47676002131 13 -268.159752894786 23 -647.39491232121 33 1661.47676002131 70 1 0 3DFACE 8 body_half_inside 10 -594.604481158485 20 -594.604481158485 30 1661.47676002131 11 -733.707315899088 21 -490.247554968877 31 1715.23764468454 12 -623.966782191491 22 -623.966782191491 32 1715.23764468454 13 -623.966782191491 23 -623.966782191491 33 1715.23764468454 70 1 0 3DFACE 8 body_half_inside 10 -733.707315899088 20 -490.247554968877 30 1715.23764468454 11 -594.604481158485 21 -594.604481158485 31 1661.47676002131 12 -699.180902483484 22 -467.1777430806 32 1661.47676002131 13 -699.180902483484 23 -467.1777430806 33 1661.47676002131 70 1 0 3DFACE 8 body_half_inside 10 -623.966782191491 20 -623.966782191491 30 1715.23764468454 11 -762.654700553784 21 -509.589579018778 31 1773.56823006635 12 -648.584509266648 22 -648.584509266648 32 1773.56823006635 13 -648.584509266648 23 -648.584509266648 33 1773.56823006635 70 1 0 3DFACE 8 body_half_inside 10 -762.654700553784 20 -509.589579018778 30 1773.56823006635 11 -623.966782191491 21 -623.966782191491 31 1715.23764468454 12 -733.707315899088 22 -490.247554968877 32 1715.23764468454 13 -733.707315899088 23 -490.247554968877 33 1715.23764468454 70 1 0 3DFACE 8 body_half_inside 10 -519.938941830878 20 -519.938941830878 30 680.911023534629 11 -628.691655879276 21 -420.078334296643 31 741.194313252463 12 -534.658304488796 22 -534.658304488796 32 741.194313252463 13 -534.658304488796 23 -534.658304488796 33 741.194313252463 70 1 0 3DFACE 8 body_half_inside 10 -628.691655879276 20 -420.078334296643 30 741.194313252463 11 -519.938941830878 21 -519.938941830878 31 680.911023534629 12 -611.383516446667 22 -408.513405265645 32 680.911023534629 13 -611.383516446667 23 -408.513405265645 33 680.911023534629 70 1 0 3DFACE 8 body_half_inside 10 -685.862005953678 20 -136.426435300007 30 628.271001705821 11 -650.663001997455 21 0.0 31 587.016306884026 12 -699.298837021391 22 0.0 32 628.271001705821 13 -699.298837021391 23 0.0 33 628.271001705821 70 1 0 3DFACE 8 body_half_inside 10 -650.663001997455 20 0.0 30 587.016306884026 11 -685.862005953678 21 -136.426435300007 31 628.271001705821 12 -638.160694862082 22 -126.938054583664 32 587.016306884026 13 -638.160694862082 23 -126.938054583664 33 587.016306884026 70 1 0 3DFACE 8 body_half_inside 10 -690.822264545374 20 -690.822264545373 30 2103.01109421295 11 -545.030667691736 21 -815.696038096871 31 2035.2022000213 12 -693.692458979998 22 -693.692458979998 32 2035.2022000213 13 -693.692458979998 23 -693.692458979998 33 2035.2022000213 70 1 0 3DFACE 8 body_half_inside 10 -545.030667691736 20 -815.696038096871 30 2035.2022000213 11 -690.822264545374 21 -690.822264545373 31 2103.01109421295 12 -542.775570394861 22 -812.321046486996 32 2103.01109421295 13 -542.775570394861 23 -812.321046486996 33 2103.01109421295 70 1 0 3DFACE 8 body_half_inside 10 -682.252673061849 20 -682.252673061848 30 2169.85154878419 11 -542.775570394861 21 -812.321046486996 31 2103.01109421295 12 -690.822264545374 22 -690.822264545373 32 2103.01109421295 13 -690.822264545374 23 -690.822264545373 33 2103.01109421295 70 1 0 3DFACE 8 body_half_inside 10 -542.775570394861 20 -812.321046486996 30 2103.01109421295 11 -682.252673061849 21 -682.252673061848 31 2169.85154878419 12 -536.042485570818 22 -802.244272938819 32 2169.85154878419 13 -536.042485570818 23 -802.244272938819 33 2169.85154878419 70 1 0 3DFACE 8 body_half_inside 10 0.0 20 -747.450883605455 30 867.310386884026 11 148.32093265249 21 -745.659682232799 31 804.835469255871 12 0.0 22 -760.268019036986 32 804.835469255871 13 0.0 23 -760.268019036986 33 804.835469255871 70 1 0 3DFACE 8 body_half_inside 10 148.32093265249 20 -745.659682232799 30 804.835469255871 11 0.0 21 -747.450883605455 31 867.310386884026 12 145.820433573828 22 -733.088824464618 32 867.310386884026 13 145.820433573828 23 -733.088824464618 33 867.310386884026 70 1 0 3DFACE 8 body_half_inside 10 91.1377712474136 20 -458.180516616454 30 1100.8886000213 11 0.0 21 -747.450883605455 31 867.310386884026 12 0.0 22 -467.156803605456 32 1100.8886000213 13 0.0 23 -467.156803605456 33 1100.8886000213 70 1 0 3DFACE 8 body_half_inside 10 0.0 20 -747.450883605455 30 867.310386884026 11 91.1377712474136 21 -458.180516616454 31 1100.8886000213 12 145.820433573828 22 -733.088824464618 32 867.310386884026 13 145.820433573828 23 -733.088824464618 33 867.310386884026 70 1 0 3DFACE 8 body_half_inside 10 -847.416499400322 20 -351.011407030345 30 1773.56823006635 11 -926.689746301964 21 -184.330051263378 31 1835.6354447734 12 -872.922653615348 22 -361.576402030189 32 1835.6354447734 13 -872.922653615348 23 -361.576402030189 33 1835.6354447734 70 1 0 3DFACE 8 body_half_inside 10 -926.689746301964 20 -184.330051263378 30 1835.6354447734 11 -847.416499400322 21 -351.011407030345 31 1773.56823006635 12 -899.612557411553 22 -178.944063519201 32 1773.56823006635 13 -899.612557411553 23 -178.944063519201 33 1773.56823006635 70 1 0 3DFACE 8 body_half_inside 10 -190.597433982906 20 -958.19800696011 30 1967.39330582966 11 0.0 21 -964.850983209364 31 1900.55285125842 12 -188.233089011893 22 -946.311642114328 32 1900.55285125842 13 -188.233089011893 23 -946.311642114328 33 1900.55285125842 70 1 0 3DFACE 8 body_half_inside 10 0.0 20 -964.850983209364 30 1900.55285125842 11 -190.597433982906 21 -958.19800696011 31 1967.39330582966 12 0.0 22 -976.970215709361 32 1967.39330582966 13 0.0 23 -976.970215709361 33 1967.39330582966 70 1 0 3DFACE 8 body_half_inside 10 0.0 20 -756.121025443459 30 741.194313252463 11 143.450831316169 21 -721.176029454062 31 680.911023534629 12 0.0 22 -735.304703143143 32 680.911023534629 13 0.0 23 -735.304703143143 33 680.911023534629 70 1 0 3DFACE 8 body_half_inside 10 143.450831316169 20 -721.176029454062 30 680.911023534629 11 0.0 21 -756.121025443459 31 741.194313252463 12 147.511894336929 22 -741.592371958341 32 741.194313252463 13 147.511894336929 23 -741.592371958341 33 741.194313252463 70 1 0 3DFACE 8 body_half_inside 10 0.0 20 -760.268019036986 30 804.835469255871 11 147.511894336929 21 -741.592371958341 31 741.194313252463 12 0.0 22 -756.121025443459 32 741.194313252463 13 0.0 23 -756.121025443459 33 741.194313252463 70 1 0 3DFACE 8 body_half_inside 10 147.511894336929 20 -741.592371958341 30 741.194313252463 11 0.0 21 -760.268019036986 31 804.835469255871 12 148.32093265249 22 -745.659682232799 32 804.835469255871 13 148.32093265249 23 -745.659682232799 33 804.835469255871 70 1 0 3DFACE 8 body_half_inside 10 -760.268019036986 20 0.0 30 804.835469255871 11 -733.088824464618 21 -145.820433573828 31 867.310386884026 12 -745.659682232799 22 -148.32093265249 32 804.835469255871 13 -745.659682232799 23 -148.32093265249 33 804.835469255871 70 1 0 3DFACE 8 body_half_inside 10 -733.088824464618 20 -145.820433573828 30 867.310386884026 11 -760.268019036986 21 0.0 31 804.835469255871 12 -747.450883605455 22 0.0 32 867.310386884026 13 -747.450883605455 23 0.0 33 867.310386884026 70 1 0 3DFACE 8 body_half_inside 10 -872.922653615348 20 -361.576402030189 30 1835.6354447734 11 -946.311642114328 21 -188.233089011893 31 1900.55285125842 12 -891.406075310523 22 -369.232485975391 32 1900.55285125842 13 -891.406075310523 23 -369.232485975391 33 1900.55285125842 70 1 0 3DFACE 8 body_half_inside 10 -946.311642114328 20 -188.233089011893 30 1900.55285125842 11 -872.922653615348 21 -361.576402030189 31 1835.6354447734 12 -926.689746301964 22 -184.330051263378 32 1835.6354447734 13 -926.689746301964 23 -184.330051263378 33 1835.6354447734 70 1 0 3DFACE 8 body_half_inside 10 641.452721848564 20 -127.592879465023 30 1474.6140400213 11 747.450883605455 21 -1.80477854883065e-13 31 1287.75132002131 12 733.088824464619 22 -145.820433573828 32 1287.75132002131 13 733.088824464619 23 -145.820433573828 33 1287.75132002131 70 1 0 3DFACE 8 body_half_inside 10 747.450883605455 20 -1.80477854883065e-13 30 1287.75132002131 11 641.452721848564 21 -127.592879465023 31 1474.6140400213 12 654.019523605455 22 -1.80477854883065e-13 32 1474.6140400213 13 654.019523605455 23 -1.80477854883065e-13 33 1474.6140400213 70 1 0 3DFACE 8 body_half_inside 10 -745.659682232799 20 -148.32093265249 30 804.835469255871 11 -690.554572920556 21 -286.037069662455 31 867.310386884026 12 -702.396062011173 22 -290.941975042481 32 804.835469255871 13 -702.396062011173 23 -290.941975042481 33 804.835469255871 70 1 0 3DFACE 8 body_half_inside 10 -690.554572920556 20 -286.037069662455 30 867.310386884026 11 -745.659682232799 21 -148.32093265249 31 804.835469255871 12 -733.088824464618 22 -145.820433573828 32 867.310386884026 13 -733.088824464618 23 -145.820433573828 33 867.310386884026 70 1 0 3DFACE 8 body_half_inside 10 -373.87031546612 20 -902.602786167016 30 2103.01109421295 11 -191.38931884584 21 -962.179081004757 31 2035.2022000213 12 -375.423653500801 22 -906.352875917291 32 2035.2022000213 13 -375.423653500801 23 -906.352875917291 33 2035.2022000213 70 1 0 3DFACE 8 body_half_inside 10 -191.38931884584 20 -962.179081004757 30 2035.2022000213 11 -373.87031546612 21 -902.602786167016 31 2103.01109421295 12 -190.597433982906 22 -958.19800696011 32 2103.01109421295 13 -190.597433982906 23 -958.19800696011 33 2103.01109421295 70 1 0 3DFACE 8 body_half_inside 10 -259.538414235776 20 -388.426686378324 30 1100.8886000213 11 -286.037069662455 21 -690.554572920556 31 867.310386884026 12 -415.26146157539 22 -621.482696406622 32 867.310386884026 13 -415.26146157539 23 -621.482696406622 33 867.310386884026 70 1 0 3DFACE 8 body_half_inside 10 -286.037069662455 20 -690.554572920556 30 867.310386884026 11 -259.538414235776 21 -388.426686378324 31 1100.8886000213 12 -178.77316905644 22 -431.596609324475 32 1100.8886000213 13 -178.77316905644 23 -431.596609324475 33 1100.8886000213 70 1 0 3DFACE 8 body_half_inside 10 -628.691655879276 20 -420.078334296643 30 741.194313252463 11 -702.396062011173 21 -290.941975042481 31 804.835469255871 12 -632.139755034707 22 -422.38228049373 32 804.835469255871 13 -632.139755034707 23 -422.38228049373 33 804.835469255871 70 1 0 3DFACE 8 body_half_inside 10 -702.396062011173 20 -290.941975042481 30 804.835469255871 11 -628.691655879276 21 -420.078334296643 31 741.194313252463 12 -698.564739508658 22 -289.354989300114 32 741.194313252463 13 -698.564739508658 23 -289.354989300114 33 741.194313252463 70 1 0 3DFACE 8 body_half_inside 10 -794.166563605455 20 0.0 30 1474.6140400213 11 -687.270773156591 21 -136.706656519425 31 1661.47676002131 12 -778.906875772646 22 -154.93421062823 32 1474.6140400213 13 -778.906875772646 23 -154.93421062823 33 1474.6140400213 70 1 0 3DFACE 8 body_half_inside 10 -687.270773156591 20 -136.706656519425 30 1661.47676002131 11 -794.166563605455 21 0.0 31 1474.6140400213 12 -700.735203605456 22 0.0 32 1661.47676002131 13 -700.735203605456 23 0.0 33 1661.47676002131 70 1 0 3DFACE 8 body_half_inside 10 -337.399937905583 20 -504.954691392473 30 1287.75132002131 11 -268.159752894786 21 -647.39491232121 31 1100.8886000213 12 -389.307620352121 22 -582.640028068573 32 1100.8886000213 13 -389.307620352121 23 -582.640028068573 33 1100.8886000213 70 1 0 3DFACE 8 body_half_inside 10 -268.159752894786 20 -647.39491232121 30 1100.8886000213 11 -337.399937905583 21 -504.954691392473 31 1287.75132002131 12 -232.405119359447 22 -561.075591122516 32 1287.75132002131 13 -232.405119359447 23 -561.075591122516 33 1287.75132002131 70 1 0 3DFACE 8 body_half_inside 10 -976.970215709361 20 0.0 30 2103.01109421295 11 -946.311642114328 21 -188.233089011893 31 2169.85154878419 12 -958.19800696011 22 -190.597433982906 32 2103.01109421295 13 -958.19800696011 23 -190.597433982906 33 2103.01109421295 70 1 0 3DFACE 8 body_half_inside 10 -946.311642114328 20 -188.233089011893 30 2169.85154878419 11 -976.970215709361 21 0.0 31 2103.01109421295 12 -964.850983209364 22 0.0 32 2169.85154878419 13 -964.850983209364 23 0.0 33 2169.85154878419 70 1 0 3DFACE 8 body_half_inside 10 679.332965393237 20 -281.388927633011 30 680.911023534629 11 581.445732901797 21 -388.509617834311 31 628.271001705821 12 611.383516446667 22 -408.513405265645 32 680.911023534629 13 611.383516446667 23 -408.513405265645 33 680.911023534629 70 1 0 3DFACE 8 body_half_inside 10 581.445732901797 20 -388.509617834311 30 628.271001705821 11 679.332965393237 21 -281.388927633011 31 680.911023534629 12 646.067882633009 22 -267.610079200261 32 628.271001705821 13 646.067882633009 23 -267.610079200261 33 628.271001705821 70 1 0 3DFACE 8 body_half_inside 10 -145.820433573828 20 -733.088824464618 30 2549.0746800213 11 0.0 21 -747.450883605455 31 2408.9276400213 12 -145.820433573828 22 -733.088824464619 32 2408.9276400213 13 -145.820433573828 23 -733.088824464619 33 2408.9276400213 70 1 0 3DFACE 8 body_half_inside 10 0.0 20 -747.450883605455 30 2408.9276400213 11 -145.820433573828 21 -733.088824464618 31 2549.0746800213 12 0.0 22 -747.450883605455 32 2549.0746800213 13 0.0 23 -747.450883605455 33 2549.0746800213 70 1 0 3DFACE 8 body_half_inside 10 -621.482696406623 20 -415.26146157539 30 1287.75132002131 11 -462.461640169813 21 -462.461640169813 31 1474.6140400213 12 -528.527588401294 22 -528.527588401294 32 1287.75132002131 13 -528.527588401294 23 -528.527588401294 33 1287.75132002131 70 1 0 3DFACE 8 body_half_inside 10 -462.461640169813 20 -462.461640169813 30 1474.6140400213 11 -621.482696406623 21 -415.26146157539 31 1287.75132002131 12 -543.797359730523 22 -363.353779128852 32 1474.6140400213 13 -543.797359730523 23 -363.353779128852 33 1474.6140400213 70 1 0 3DFACE 8 body_half_inside 10 -668.106074549528 20 -668.106074549528 30 2234.76895526921 11 -536.042485570818 21 -802.244272938819 31 2169.85154878419 12 -682.252673061849 22 -682.252673061848 32 2169.85154878419 13 -682.252673061849 23 -682.252673061848 33 2169.85154878419 70 1 0 3DFACE 8 body_half_inside 10 -536.042485570818 20 -802.244272938819 30 2169.85154878419 11 -668.106074549528 21 -668.106074549528 31 2234.76895526921 12 -524.927574441361 22 -785.609632890959 32 2234.76895526921 13 -524.927574441361 23 -785.609632890959 33 2234.76895526921 70 1 0 3DFACE 8 body_half_inside 10 -646.067882633009 20 -267.610079200261 30 628.271001705821 11 -638.160694862082 21 -126.938054583664 31 587.016306884026 12 -685.862005953678 22 -136.426435300007 32 628.271001705821 13 -685.862005953678 23 -136.426435300007 33 628.271001705821 70 1 0 3DFACE 8 body_half_inside 10 -638.160694862082 20 -126.938054583664 30 587.016306884026 11 -646.067882633009 21 -267.610079200261 31 628.271001705821 12 -601.134230107799 22 -248.997950917359 32 587.016306884026 13 -601.134230107799 23 -248.997950917359 33 587.016306884026 70 1 0 3DFACE 8 body_half_inside 10 -467.156803605456 20 0.0 30 1100.8886000213 11 -733.088824464618 21 -145.820433573828 31 867.310386884026 12 -747.450883605455 22 0.0 32 867.310386884026 13 -747.450883605455 23 0.0 33 867.310386884026 70 1 0 3DFACE 8 body_half_inside 10 -733.088824464618 20 -145.820433573828 30 867.310386884026 11 -467.156803605456 21 0.0 31 1100.8886000213 12 -458.180516616454 22 -91.1377712474136 32 1100.8886000213 13 -458.180516616454 23 -91.1377712474136 33 1100.8886000213 70 1 0 3DFACE 8 body_half_inside 10 -891.406075310523 20 -369.232485975391 30 1900.55285125842 11 -958.198006960111 21 -190.597433982906 31 1967.39330582966 12 -902.602786167016 22 -373.87031546612 32 1967.39330582966 13 -902.602786167016 23 -373.87031546612 33 1967.39330582966 70 1 0 3DFACE 8 body_half_inside 10 -958.198006960111 20 -190.597433982906 30 1967.39330582966 11 -891.406075310523 21 -369.232485975391 31 1900.55285125842 12 -946.311642114328 22 -188.233089011893 32 1900.55285125842 13 -946.311642114328 23 -188.233089011893 33 1900.55285125842 70 1 0 3DFACE 8 body_half_inside 10 -648.584509266648 20 -648.584509266648 30 1773.56823006635 11 -490.247554968878 21 -733.707315899088 31 1715.23764468454 12 -623.966782191491 22 -623.966782191491 32 1715.23764468454 13 -623.966782191491 23 -623.966782191491 33 1715.23764468454 70 1 0 3DFACE 8 body_half_inside 10 -490.247554968878 20 -733.707315899088 30 1715.23764468454 11 -648.584509266648 21 -648.584509266648 31 1773.56823006635 12 -509.589579018779 22 -762.654700553784 32 1773.56823006635 13 -509.589579018779 23 -762.654700553784 33 1773.56823006635 70 1 0 3DFACE 8 body_half_inside 10 -668.106074549528 20 -668.106074549528 30 1835.6354447734 11 -509.589579018779 21 -762.654700553784 31 1773.56823006635 12 -648.584509266648 22 -648.584509266648 32 1773.56823006635 13 -648.584509266648 23 -648.584509266648 33 1773.56823006635 70 1 0 3DFACE 8 body_half_inside 10 -509.589579018779 20 -762.654700553784 30 1773.56823006635 11 -668.106074549528 21 -668.106074549528 31 1835.6354447734 12 -524.927574441361 22 -785.609632890959 32 1835.6354447734 13 -524.927574441361 23 -785.609632890959 33 1835.6354447734 70 1 0 3DFACE 8 body_half_inside 10 -415.26146157539 20 -621.482696406622 30 867.310386884026 11 -290.941975042481 21 -702.396062011173 31 804.835469255871 12 -422.38228049373 22 -632.139755034707 32 804.835469255871 13 -422.38228049373 23 -632.139755034707 33 804.835469255871 70 1 0 3DFACE 8 body_half_inside 10 -290.941975042481 20 -702.396062011173 30 804.835469255871 11 -415.26146157539 21 -621.482696406622 31 867.310386884026 12 -286.037069662455 22 -690.554572920556 32 867.310386884026 13 -286.037069662455 23 -690.554572920556 33 867.310386884026 70 1 0 3DFACE 8 body_half_inside 10 -648.584509266648 20 -648.584509266648 30 1773.56823006635 11 -785.609632890959 21 -524.927574441361 31 1835.6354447734 12 -668.106074549528 22 -668.106074549528 32 1835.6354447734 13 -668.106074549528 23 -668.106074549528 33 1835.6354447734 70 1 0 3DFACE 8 body_half_inside 10 -785.609632890959 20 -524.927574441361 30 1835.6354447734 11 -648.584509266648 21 -648.584509266648 31 1773.56823006635 12 -762.654700553784 22 -509.589579018778 32 1773.56823006635 13 -762.654700553784 23 -509.589579018778 33 1773.56823006635 70 1 0 3DFACE 8 body_half_inside 10 -660.325364744673 20 -441.215302798659 30 1474.6140400213 11 -495.494614285554 21 -495.494614285554 31 1661.47676002131 12 -561.560562517035 22 -561.560562517035 32 1474.6140400213 13 -561.560562517035 23 -561.560562517035 33 1474.6140400213 70 1 0 3DFACE 8 body_half_inside 10 -495.494614285554 20 -495.494614285554 30 1661.47676002131 11 -660.325364744673 21 -441.215302798659 31 1474.6140400213 12 -582.640028068573 22 -389.307620352121 32 1661.47676002131 13 -582.640028068573 23 -389.307620352121 33 1661.47676002131 70 1 0 3DFACE 8 body_half_inside 10 -682.252673061849 20 -682.252673061849 30 1900.55285125842 11 -812.321046486997 21 -542.775570394861 31 1967.39330582966 12 -690.822264545374 22 -690.822264545374 32 1967.39330582966 13 -690.822264545374 23 -690.822264545374 33 1967.39330582966 70 1 0 3DFACE 8 body_half_inside 10 -812.321046486997 20 -542.775570394861 30 1967.39330582966 11 -682.252673061849 21 -682.252673061849 31 1900.55285125842 12 -802.244272938819 22 -536.042485570818 32 1900.55285125842 13 -802.244272938819 23 -536.042485570818 33 1900.55285125842 70 1 0 3DFACE 8 body_half_inside 10 -690.822264545374 20 -690.822264545374 30 1967.39330582966 11 -815.696038096872 21 -545.030667691736 31 2035.2022000213 12 -693.692458979998 22 -693.692458979998 32 2035.2022000213 13 -693.692458979998 23 -693.692458979998 33 2035.2022000213 70 1 0 3DFACE 8 body_half_inside 10 -815.696038096872 20 -545.030667691736 30 2035.2022000213 11 -690.822264545374 21 -690.822264545374 31 1967.39330582966 12 -812.321046486997 22 -542.775570394861 32 1967.39330582966 13 -812.321046486997 23 -542.775570394861 33 1967.39330582966 70 1 0 3DFACE 8 body_half_inside 10 -648.584509266648 20 -648.584509266648 30 2296.83616997626 11 -524.927574441361 21 -785.609632890959 31 2234.76895526921 12 -668.106074549528 22 -668.106074549528 32 2234.76895526921 13 -668.106074549528 23 -668.106074549528 33 2234.76895526921 70 1 0 3DFACE 8 body_half_inside 10 -524.927574441361 20 -785.609632890959 30 2234.76895526921 11 -648.584509266648 21 -648.584509266648 31 2296.83616997626 12 -509.589579018778 22 -762.654700553784 32 2296.83616997626 13 -509.589579018778 23 -762.654700553784 33 2296.83616997626 70 1 0 3DFACE 8 body_half_inside 10 -623.966782191491 20 -623.96678219149 30 2355.16675535807 11 -509.589579018778 21 -762.654700553784 31 2296.83616997626 12 -648.584509266648 22 -648.584509266648 32 2296.83616997626 13 -648.584509266648 23 -648.584509266648 33 2296.83616997626 70 1 0 3DFACE 8 body_half_inside 10 -509.589579018778 20 -762.654700553784 30 2296.83616997626 11 -623.966782191491 21 -623.96678219149 31 2355.16675535807 12 -490.247554968877 22 -733.707315899088 32 2355.16675535807 13 -490.247554968877 23 -733.707315899088 33 2355.16675535807 70 1 0 3DFACE 8 body_half_inside 10 -495.494614285554 20 -495.494614285554 30 1661.47676002131 11 -441.21530279866 21 -660.325364744672 31 1474.6140400213 12 -561.560562517035 22 -561.560562517035 32 1474.6140400213 13 -561.560562517035 23 -561.560562517035 33 1474.6140400213 70 1 0 3DFACE 8 body_half_inside 10 -441.21530279866 20 -660.325364744672 30 1474.6140400213 11 -495.494614285554 21 -495.494614285554 31 1661.47676002131 12 -389.307620352121 22 -582.640028068573 32 1661.47676002131 13 -389.307620352121 23 -582.640028068573 33 1661.47676002131 70 1 0 3DFACE 8 body_half_inside 10 -431.596609324475 20 -178.77316905644 30 1100.8886000213 11 -621.482696406623 21 -415.26146157539 31 867.310386884026 12 -690.554572920556 22 -286.037069662455 32 867.310386884026 13 -690.554572920556 23 -286.037069662455 33 867.310386884026 70 1 0 3DFACE 8 body_half_inside 10 -621.482696406623 20 -415.26146157539 30 867.310386884026 11 -431.596609324475 21 -178.77316905644 31 1100.8886000213 12 -388.426686378325 22 -259.538414235776 32 1100.8886000213 13 -388.426686378325 23 -259.538414235776 33 1100.8886000213 70 1 0 3DFACE 8 body_half_inside 10 -408.513405265646 20 -611.383516446667 30 680.911023534629 11 -267.610079200261 21 -646.067882633009 31 628.271001705821 12 -388.509617834311 22 -581.445732901797 32 628.271001705821 13 -388.509617834311 23 -581.445732901797 33 628.271001705821 70 1 0 3DFACE 8 body_half_inside 10 -267.610079200261 20 -646.067882633009 30 628.271001705821 11 -408.513405265646 21 -611.383516446667 31 680.911023534629 12 -281.388927633011 22 -679.332965393238 32 680.911023534629 13 -281.388927633011 23 -679.332965393238 33 680.911023534629 70 1 0 3DFACE 8 body_half_inside 10 -420.078334296643 20 -628.691655879275 30 741.194313252463 11 -281.388927633011 21 -679.332965393238 31 680.911023534629 12 -408.513405265646 22 -611.383516446667 32 680.911023534629 13 -408.513405265646 23 -611.383516446667 33 680.911023534629 70 1 0 3DFACE 8 body_half_inside 10 -281.388927633011 20 -679.332965393238 30 680.911023534629 11 -420.078334296643 21 -628.691655879275 31 741.194313252463 12 -289.354989300114 22 -698.564739508657 32 741.194313252463 13 -289.354989300114 23 -698.564739508657 33 741.194313252463 70 1 0 3DFACE 8 body_half_inside 10 -422.38228049373 20 -632.139755034707 30 804.835469255871 11 -289.354989300114 21 -698.564739508657 31 741.194313252463 12 -420.078334296643 22 -628.691655879275 32 741.194313252463 13 -420.078334296643 23 -628.691655879275 33 741.194313252463 70 1 0 3DFACE 8 body_half_inside 10 -289.354989300114 20 -698.564739508657 30 741.194313252463 11 -422.38228049373 21 -632.139755034707 31 804.835469255871 12 -290.941975042481 22 -702.396062011173 32 804.835469255871 13 -290.941975042481 23 -702.396062011173 33 804.835469255871 70 1 0 3DFACE 8 body_half_inside 10 0.0 20 -917.237009349992 30 1773.56823006635 11 172.152047899807 21 -865.466789057044 31 1715.23764468454 12 0.0 22 -882.422285845505 32 1715.23764468454 13 0.0 23 -882.422285845505 33 1715.23764468454 70 1 0 3DFACE 8 body_half_inside 10 172.152047899807 20 -865.466789057044 30 1715.23764468454 11 0.0 21 -917.237009349992 31 1773.56823006635 12 178.9440635192 22 -899.612557411553 32 1773.56823006635 13 178.9440635192 23 -899.612557411553 33 1773.56823006635 70 1 0 3DFACE 8 body_half_inside 10 -594.604481158485 20 -594.604481158485 30 2408.9276400213 11 -490.247554968877 21 -733.707315899088 31 2355.16675535807 12 -623.966782191491 22 -623.96678219149 32 2355.16675535807 13 -623.966782191491 23 -623.96678219149 33 2355.16675535807 70 1 0 3DFACE 8 body_half_inside 10 -490.247554968877 20 -733.707315899088 30 2355.16675535807 11 -594.604481158485 21 -594.604481158485 31 2408.9276400213 12 -467.1777430806 22 -699.180902483483 32 2408.9276400213 13 -467.1777430806 23 -699.180902483483 33 2408.9276400213 70 1 0 3DFACE 8 body_half_inside 10 -528.527588401294 20 -528.527588401294 30 2549.0746800213 11 -415.26146157539 21 -621.482696406623 31 2408.9276400213 12 -528.527588401294 22 -528.527588401294 32 2408.9276400213 13 -528.527588401294 23 -528.527588401294 33 2408.9276400213 70 1 0 3DFACE 8 body_half_inside 10 -415.26146157539 20 -621.482696406623 30 2408.9276400213 11 -528.527588401294 21 -528.527588401294 31 2549.0746800213 12 -415.26146157539 22 -621.482696406622 32 2549.0746800213 13 -415.26146157539 23 -621.482696406622 33 2549.0746800213 70 1 0 3DFACE 8 body_half_inside 10 -621.482696406623 20 -415.26146157539 30 2408.9276400213 11 -528.527588401294 21 -528.527588401294 31 2549.0746800213 12 -528.527588401294 22 -528.527588401294 32 2408.9276400213 13 -528.527588401294 23 -528.527588401294 33 2408.9276400213 70 1 0 3DFACE 8 body_half_inside 10 -528.527588401294 20 -528.527588401294 30 2549.0746800213 11 -621.482696406623 21 -415.26146157539 31 2408.9276400213 12 -621.482696406623 22 -415.26146157539 32 2549.0746800213 13 -621.482696406623 23 -415.26146157539 33 2549.0746800213 70 1 0 3DFACE 8 body_half_inside 10 687.270773156591 20 -136.706656519426 30 1661.47676002131 11 794.166563605455 21 -1.80477854883065e-13 31 1474.6140400213 12 778.906875772646 22 -154.934210628231 32 1474.6140400213 13 778.906875772646 23 -154.934210628231 33 1474.6140400213 70 1 0 3DFACE 8 body_half_inside 10 794.166563605455 20 -1.80477854883065e-13 30 1474.6140400213 11 687.270773156591 21 -136.706656519426 31 1661.47676002131 12 700.735203605455 22 -1.80477854883065e-13 32 1661.47676002131 13 700.735203605455 23 -1.80477854883065e-13 33 1661.47676002131 70 1 0 3DFACE 8 body_half_inside 10 882.422285845505 20 -1.80477854883065e-13 30 1715.23764468454 11 824.740107573921 21 -164.051007270483 31 1661.47676002131 12 865.466789057043 22 -172.152047899808 32 1715.23764468454 13 865.466789057043 23 -172.152047899808 33 1715.23764468454 70 1 0 3DFACE 8 body_half_inside 10 824.740107573921 20 -164.051007270483 30 1661.47676002131 11 882.422285845505 21 -1.80477854883065e-13 31 1715.23764468454 12 840.897721502147 22 -1.80477854883065e-13 32 1661.47676002131 13 840.897721502147 23 -1.80477854883065e-13 33 1661.47676002131 70 1 0 3DFACE 8 body_half_inside 10 -524.927574441361 20 -785.609632890959 30 2234.76895526921 11 -369.232485975391 21 -891.406075310522 31 2169.85154878419 12 -536.042485570818 22 -802.244272938819 32 2169.85154878419 13 -536.042485570818 23 -802.244272938819 33 2169.85154878419 70 1 0 3DFACE 8 body_half_inside 10 -369.232485975391 20 -891.406075310522 30 2169.85154878419 11 -524.927574441361 21 -785.609632890959 31 2234.76895526921 12 -361.576402030189 22 -872.922653615348 32 2234.76895526921 13 -361.576402030189 23 -872.922653615348 33 2234.76895526921 70 1 0 3DFACE 8 body_half_inside 10 -509.589579018778 20 -762.654700553784 30 2296.83616997626 11 -361.576402030189 21 -872.922653615348 31 2234.76895526921 12 -524.927574441361 22 -785.609632890959 32 2234.76895526921 13 -524.927574441361 23 -785.609632890959 33 2234.76895526921 70 1 0 3DFACE 8 body_half_inside 10 -361.576402030189 20 -872.922653615348 30 2234.76895526921 11 -509.589579018778 21 -762.654700553784 31 2296.83616997626 12 -351.011407030345 22 -847.416499400322 32 2296.83616997626 13 -351.011407030345 23 -847.416499400322 33 2296.83616997626 70 1 0 3DFACE 8 body_half_inside 10 -490.247554968878 20 -733.707315899088 30 1715.23764468454 11 -321.797626332425 21 -776.88819383121 31 1661.47676002131 12 -467.1777430806 22 -699.180902483483 32 1661.47676002131 13 -467.1777430806 23 -699.180902483483 33 1661.47676002131 70 1 0 3DFACE 8 body_half_inside 10 -321.797626332425 20 -776.88819383121 30 1661.47676002131 11 -490.247554968878 21 -733.707315899088 31 1715.23764468454 12 -337.688389142806 22 -815.251888924487 32 1715.23764468454 13 -337.688389142806 23 -815.251888924487 33 1715.23764468454 70 1 0 3DFACE 8 body_half_inside 10 -494.478949733692 20 -494.478949733692 30 628.271001705821 11 -541.006514010434 21 -361.48899563696 31 587.016306884026 12 -581.445732901797 22 -388.509617834311 32 628.271001705821 13 -581.445732901797 23 -388.509617834311 33 628.271001705821 70 1 0 3DFACE 8 body_half_inside 10 -541.006514010434 20 -361.48899563696 30 587.016306884026 11 -494.478949733692 21 -494.478949733692 31 628.271001705821 12 -460.088220979597 22 -460.088220979597 32 587.016306884026 13 -460.088220979597 23 -460.088220979597 33 587.016306884026 70 1 0 3DFACE 8 body_half_inside 10 -509.589579018779 20 -762.654700553784 30 1773.56823006635 11 -337.688389142806 21 -815.251888924487 31 1715.23764468454 12 -490.247554968878 22 -733.707315899088 32 1715.23764468454 13 -490.247554968878 23 -733.707315899088 33 1715.23764468454 70 1 0 3DFACE 8 body_half_inside 10 -337.688389142806 20 -815.251888924487 30 1715.23764468454 11 -509.589579018779 21 -762.654700553784 31 1773.56823006635 12 -351.011407030345 22 -847.416499400322 32 1773.56823006635 13 -351.011407030345 23 -847.416499400322 33 1773.56823006635 70 1 0 3DFACE 8 body_half_inside 10 -524.927574441361 20 -785.609632890959 30 1835.6354447734 11 -351.011407030345 21 -847.416499400322 31 1773.56823006635 12 -509.589579018779 22 -762.654700553784 32 1773.56823006635 13 -509.589579018779 23 -762.654700553784 33 1773.56823006635 70 1 0 3DFACE 8 body_half_inside 10 -351.011407030345 20 -847.416499400322 30 1773.56823006635 11 -524.927574441361 21 -785.609632890959 31 1835.6354447734 12 -361.576402030189 22 -872.922653615348 32 1835.6354447734 13 -361.576402030189 23 -872.922653615348 33 1835.6354447734 70 1 0 3DFACE 8 body_half_inside 10 -536.042485570819 20 -802.244272938819 30 1900.55285125842 11 -361.576402030189 21 -872.922653615348 31 1835.6354447734 12 -524.927574441361 22 -785.609632890959 32 1835.6354447734 13 -524.927574441361 23 -785.609632890959 33 1835.6354447734 70 1 0 3DFACE 8 body_half_inside 10 -361.576402030189 20 -872.922653615348 30 1835.6354447734 11 -536.042485570819 21 -802.244272938819 31 1900.55285125842 12 -369.232485975391 22 -891.406075310522 32 1900.55285125842 13 -369.232485975391 23 -891.406075310522 33 1900.55285125842 70 1 0 3DFACE 8 body_half_inside 10 0.0 20 -700.735203605455 30 1661.47676002131 11 154.93421062823 21 -778.906875772646 31 1474.6140400213 12 0.0 22 -794.166563605455 32 1474.6140400213 13 0.0 23 -794.166563605455 33 1474.6140400213 70 1 0 3DFACE 8 body_half_inside 10 154.93421062823 20 -778.906875772646 30 1474.6140400213 11 0.0 21 -700.735203605455 31 1661.47676002131 12 136.706656519425 22 -687.270773156591 32 1661.47676002131 13 136.706656519425 23 -687.270773156591 33 1661.47676002131 70 1 0 3DFACE 8 body_half_inside 10 -542.775570394861 20 -812.321046486996 30 2103.01109421295 11 -375.423653500801 21 -906.352875917291 31 2035.2022000213 12 -545.030667691736 22 -815.696038096871 32 2035.2022000213 13 -545.030667691736 23 -815.696038096871 33 2035.2022000213 70 1 0 3DFACE 8 body_half_inside 10 -375.423653500801 20 -906.352875917291 30 2035.2022000213 11 -542.775570394861 21 -812.321046486996 31 2103.01109421295 12 -373.87031546612 22 -902.602786167016 32 2103.01109421295 13 -373.87031546612 23 -902.602786167016 33 2103.01109421295 70 1 0 3DFACE 8 body_half_inside 10 -536.042485570818 20 -802.244272938819 30 2169.85154878419 11 -373.87031546612 21 -902.602786167016 31 2103.01109421295 12 -542.775570394861 22 -812.321046486996 32 2103.01109421295 13 -542.775570394861 23 -812.321046486996 33 2103.01109421295 70 1 0 3DFACE 8 body_half_inside 10 -373.87031546612 20 -902.602786167016 30 2103.01109421295 11 -536.042485570818 21 -802.244272938819 31 2169.85154878419 12 -369.232485975391 22 -891.406075310522 32 2169.85154878419 13 -369.232485975391 23 -891.406075310522 33 2169.85154878419 70 1 0 3DFACE 8 body_half_inside 10 -891.406075310522 20 -369.232485975391 30 2169.85154878419 11 -785.609632890959 21 -524.927574441361 31 2234.76895526921 12 -802.244272938819 22 -536.042485570818 32 2169.85154878419 13 -802.244272938819 23 -536.042485570818 33 2169.85154878419 70 1 0 3DFACE 8 body_half_inside 10 -785.609632890959 20 -524.927574441361 30 2234.76895526921 11 -891.406075310522 21 -369.232485975391 31 2169.85154878419 12 -872.922653615348 22 -361.576402030189 32 2234.76895526921 13 -872.922653615348 23 -361.576402030189 33 2234.76895526921 70 1 0 3DFACE 8 body_half_inside 10 -872.922653615348 20 -361.576402030189 30 2234.76895526921 11 -762.654700553784 21 -509.589579018778 31 2296.83616997626 12 -785.609632890959 22 -524.927574441361 32 2234.76895526921 13 -785.609632890959 23 -524.927574441361 33 2234.76895526921 70 1 0 3DFACE 8 body_half_inside 10 -762.654700553784 20 -509.589579018778 30 2296.83616997626 11 -872.922653615348 21 -361.576402030189 31 2234.76895526921 12 -847.416499400322 22 -351.011407030345 32 2296.83616997626 13 -847.416499400322 23 -351.011407030345 33 2296.83616997626 70 1 0 3DFACE 8 body_half_inside 10 -611.383516446667 20 -408.513405265645 30 680.911023534629 11 -698.564739508658 21 -289.354989300114 31 741.194313252463 12 -628.691655879276 22 -420.078334296643 32 741.194313252463 13 -628.691655879276 23 -420.078334296643 33 741.194313252463 70 1 0 3DFACE 8 body_half_inside 10 -698.564739508658 20 -289.354989300114 30 741.194313252463 11 -611.383516446667 21 -408.513405265645 31 680.911023534629 12 -679.332965393238 22 -281.388927633011 32 680.911023534629 13 -679.332965393238 23 -281.388927633011 33 680.911023534629 70 1 0 3DFACE 8 body_half_inside 10 -545.030667691736 20 -815.696038096871 30 2035.2022000213 11 -373.870315466121 21 -902.602786167016 31 1967.39330582966 12 -542.775570394861 22 -812.321046486997 32 1967.39330582966 13 -542.775570394861 23 -812.321046486997 33 1967.39330582966 70 1 0 3DFACE 8 body_half_inside 10 -373.870315466121 20 -902.602786167016 30 1967.39330582966 11 -545.030667691736 21 -815.696038096871 31 2035.2022000213 12 -375.423653500801 22 -906.352875917291 32 2035.2022000213 13 -375.423653500801 23 -906.352875917291 33 2035.2022000213 70 1 0 3DFACE 8 body_half_inside 10 -490.247554968877 20 -733.707315899088 30 2355.16675535807 11 -351.011407030345 21 -847.416499400322 31 2296.83616997626 12 -509.589579018778 22 -762.654700553784 32 2296.83616997626 13 -509.589579018778 23 -762.654700553784 33 2296.83616997626 70 1 0 3DFACE 8 body_half_inside 10 -351.011407030345 20 -847.416499400322 30 2296.83616997626 11 -490.247554968877 21 -733.707315899088 31 2355.16675535807 12 -337.688389142806 22 -815.251888924486 32 2355.16675535807 13 -337.688389142806 23 -815.251888924486 33 2355.16675535807 70 1 0 3DFACE 8 body_half_inside 10 -467.1777430806 20 -699.180902483483 30 2408.9276400213 11 -337.688389142806 21 -815.251888924486 31 2355.16675535807 12 -490.247554968877 22 -733.707315899088 32 2355.16675535807 13 -490.247554968877 23 -733.707315899088 33 2355.16675535807 70 1 0 3DFACE 8 body_half_inside 10 -337.688389142806 20 -815.251888924486 30 2355.16675535807 11 -467.1777430806 21 -699.180902483483 31 2408.9276400213 12 -321.797626332425 22 -776.88819383121 32 2408.9276400213 13 -321.797626332425 23 -776.88819383121 33 2408.9276400213 70 1 0 3DFACE 8 body_half_inside 10 -267.610079200261 20 -646.067882633009 30 628.271001705821 11 -361.48899563696 21 -541.006514010434 31 587.016306884026 12 -388.509617834311 22 -581.445732901797 32 628.271001705821 13 -388.509617834311 23 -581.445732901797 33 628.271001705821 70 1 0 3DFACE 8 body_half_inside 10 -361.48899563696 20 -541.006514010434 30 587.016306884026 11 -267.610079200261 21 -646.067882633009 31 628.271001705821 12 -248.997950917359 22 -601.134230107799 32 587.016306884026 13 -248.997950917359 23 -601.134230107799 33 587.016306884026 70 1 0 3DFACE 8 body_half_inside 10 -415.26146157539 20 -621.482696406622 30 2549.0746800213 11 -286.037069662455 21 -690.554572920556 31 2408.9276400213 12 -415.26146157539 22 -621.482696406623 32 2408.9276400213 13 -415.26146157539 23 -621.482696406623 33 2408.9276400213 70 1 0 3DFACE 8 body_half_inside 10 -286.037069662455 20 -690.554572920556 30 2408.9276400213 11 -415.26146157539 21 -621.482696406622 31 2549.0746800213 12 -286.037069662455 22 -690.554572920556 32 2549.0746800213 13 -286.037069662455 23 -690.554572920556 33 2549.0746800213 70 1 0 3DFACE 8 body_half_inside 10 -281.388927633011 20 -679.332965393238 30 680.911023534629 11 -136.426435300007 21 -685.862005953678 31 628.271001705821 12 -267.610079200261 22 -646.067882633009 32 628.271001705821 13 -267.610079200261 23 -646.067882633009 33 628.271001705821 70 1 0 3DFACE 8 body_half_inside 10 -136.426435300007 20 -685.862005953678 30 628.271001705821 11 -281.388927633011 21 -679.332965393238 31 680.911023534629 12 -143.450831316169 22 -721.176029454062 32 680.911023534629 13 -143.450831316169 23 -721.176029454062 33 680.911023534629 70 1 0 3DFACE 8 body_half_inside 10 -290.941975042481 20 -702.396062011173 30 804.835469255871 11 -147.511894336929 21 -741.592371958341 31 741.194313252463 12 -289.354989300114 22 -698.564739508657 32 741.194313252463 13 -289.354989300114 23 -698.564739508657 33 741.194313252463 70 1 0 3DFACE 8 body_half_inside 10 -147.511894336929 20 -741.592371958341 30 741.194313252463 11 -290.941975042481 21 -702.396062011173 31 804.835469255871 12 -148.32093265249 22 -745.659682232799 32 804.835469255871 13 -148.32093265249 23 -745.659682232799 33 804.835469255871 70 1 0 3DFACE 8 body_half_inside 10 0.0 20 -882.422285845505 30 1715.23764468454 11 164.051007270482 21 -824.740107573921 31 1661.47676002131 12 0.0 22 -840.897721502147 32 1661.47676002131 13 0.0 23 -840.897721502147 33 1661.47676002131 70 1 0 3DFACE 8 body_half_inside 10 164.051007270482 20 -824.740107573921 30 1661.47676002131 11 0.0 21 -882.422285845505 31 1715.23764468454 12 172.152047899807 22 -865.466789057044 32 1715.23764468454 13 172.152047899807 23 -865.466789057044 33 1715.23764468454 70 1 0 3DFACE 8 body_half_inside 10 -289.354989300114 20 -698.564739508657 30 741.194313252463 11 -143.450831316169 21 -721.176029454062 31 680.911023534629 12 -281.388927633011 22 -679.332965393238 32 680.911023534629 13 -281.388927633011 23 -679.332965393238 33 680.911023534629 70 1 0 3DFACE 8 body_half_inside 10 -143.450831316169 20 -721.176029454062 30 680.911023534629 11 -289.354989300114 21 -698.564739508657 31 741.194313252463 12 -147.511894336929 22 -741.592371958341 32 741.194313252463 13 -147.511894336929 23 -741.592371958341 33 741.194313252463 70 1 0 3DFACE 8 body_half_inside 10 -172.152047899808 20 -865.466789057044 30 1715.23764468454 11 0.0 21 -840.897721502147 31 1661.47676002131 12 -164.051007270482 22 -824.740107573921 32 1661.47676002131 13 -164.051007270482 23 -824.740107573921 33 1661.47676002131 70 1 0 3DFACE 8 body_half_inside 10 0.0 20 -840.897721502147 30 1661.47676002131 11 -172.152047899808 21 -865.466789057044 31 1715.23764468454 12 0.0 22 -882.422285845505 32 1715.23764468454 13 0.0 23 -882.422285845505 33 1715.23764468454 70 1 0 3DFACE 8 body_half_inside 10 -286.037069662455 20 -690.554572920556 30 867.310386884026 11 -148.32093265249 21 -745.659682232799 31 804.835469255871 12 -290.941975042481 22 -702.396062011173 32 804.835469255871 13 -290.941975042481 23 -702.396062011173 33 804.835469255871 70 1 0 3DFACE 8 body_half_inside 10 -148.32093265249 20 -745.659682232799 30 804.835469255871 11 -286.037069662455 21 -690.554572920556 31 867.310386884026 12 -145.820433573828 22 -733.088824464618 32 867.310386884026 13 -145.820433573828 23 -733.088824464618 33 867.310386884026 70 1 0 3DFACE 8 body_half_inside 10 -178.77316905644 20 -431.596609324475 30 1100.8886000213 11 -145.820433573828 21 -733.088824464618 31 867.310386884026 12 -286.037069662455 22 -690.554572920556 32 867.310386884026 13 -286.037069662455 23 -690.554572920556 33 867.310386884026 70 1 0 3DFACE 8 body_half_inside 10 -145.820433573828 20 -733.088824464618 30 867.310386884026 11 -178.77316905644 21 -431.596609324475 31 1100.8886000213 12 -91.1377712474136 22 -458.180516616454 32 1100.8886000213 13 -91.1377712474136 23 -458.180516616454 33 1100.8886000213 70 1 0 3DFACE 8 body_half_inside 10 -232.405119359447 20 -561.075591122516 30 1287.75132002131 11 -136.706656519425 21 -687.270773156591 31 1100.8886000213 12 -268.159752894786 22 -647.39491232121 32 1100.8886000213 13 -268.159752894786 23 -647.39491232121 33 1100.8886000213 70 1 0 3DFACE 8 body_half_inside 10 -136.706656519425 20 -687.270773156591 30 1100.8886000213 11 -232.405119359447 21 -561.075591122516 31 1287.75132002131 12 -118.479102410621 22 -595.634670540536 32 1287.75132002131 13 -118.479102410621 23 -595.634670540536 33 1287.75132002131 70 1 0 3DFACE 8 body_half_inside 10 -250.282436127117 20 -604.235251721863 30 1474.6140400213 11 -145.820433573828 21 -733.088824464619 31 1287.75132002131 12 -286.037069662455 22 -690.554572920556 32 1287.75132002131 13 -286.037069662455 23 -690.554572920556 33 1287.75132002131 70 1 0 3DFACE 8 body_half_inside 10 -145.820433573828 20 -733.088824464619 30 1287.75132002131 11 -250.282436127117 21 -604.235251721863 31 1474.6140400213 12 -127.592879465023 22 -641.452721848564 32 1474.6140400213 13 -127.592879465023 23 -641.452721848564 33 1474.6140400213 70 1 0 3DFACE 8 body_half_inside 10 -268.159752894786 20 -647.39491232121 30 1661.47676002131 11 -154.93421062823 21 -778.906875772646 31 1474.6140400213 12 -303.914386430124 22 -733.714233519903 32 1474.6140400213 13 -303.914386430124 23 -733.714233519903 33 1474.6140400213 70 1 0 3DFACE 8 body_half_inside 10 -154.93421062823 20 -778.906875772646 30 1474.6140400213 11 -268.159752894786 21 -647.39491232121 31 1661.47676002131 12 -136.706656519425 22 -687.270773156591 32 1661.47676002131 13 -136.706656519425 23 -687.270773156591 33 1661.47676002131 70 1 0 3DFACE 8 body_half_inside 10 -337.688389142806 20 -815.251888924487 30 1715.23764468454 11 -164.051007270482 21 -824.740107573921 31 1661.47676002131 12 -321.797626332425 22 -776.88819383121 32 1661.47676002131 13 -321.797626332425 23 -776.88819383121 33 1661.47676002131 70 1 0 3DFACE 8 body_half_inside 10 -164.051007270482 20 -824.740107573921 30 1661.47676002131 11 -337.688389142806 21 -815.251888924487 31 1715.23764468454 12 -172.152047899808 22 -865.466789057044 32 1715.23764468454 13 -172.152047899808 23 -865.466789057044 33 1715.23764468454 70 1 0 3DFACE 8 body_half_inside 10 -351.011407030345 20 -847.416499400322 30 1773.56823006635 11 -172.152047899808 21 -865.466789057044 31 1715.23764468454 12 -337.688389142806 22 -815.251888924487 32 1715.23764468454 13 -337.688389142806 23 -815.251888924487 33 1715.23764468454 70 1 0 3DFACE 8 body_half_inside 10 -172.152047899808 20 -865.466789057044 30 1715.23764468454 11 -351.011407030345 21 -847.416499400322 31 1773.56823006635 12 -178.9440635192 22 -899.612557411553 32 1773.56823006635 13 -178.9440635192 23 -899.612557411553 33 1773.56823006635 70 1 0 3DFACE 8 body_half_inside 10 -361.576402030189 20 -872.922653615348 30 1835.6354447734 11 -178.9440635192 21 -899.612557411553 31 1773.56823006635 12 -351.011407030345 22 -847.416499400322 32 1773.56823006635 13 -351.011407030345 23 -847.416499400322 33 1773.56823006635 70 1 0 3DFACE 8 body_half_inside 10 -178.9440635192 20 -899.612557411553 30 1773.56823006635 11 -361.576402030189 21 -872.922653615348 31 1835.6354447734 12 -184.330051263378 22 -926.689746301964 32 1835.6354447734 13 -184.330051263378 23 -926.689746301964 33 1835.6354447734 70 1 0 3DFACE 8 body_half_inside 10 -375.423653500801 20 -906.352875917291 30 2035.2022000213 11 -190.597433982906 21 -958.19800696011 31 1967.39330582966 12 -373.870315466121 22 -902.602786167016 32 1967.39330582966 13 -373.870315466121 23 -902.602786167016 33 1967.39330582966 70 1 0 3DFACE 8 body_half_inside 10 -190.597433982906 20 -958.19800696011 30 1967.39330582966 11 -375.423653500801 21 -906.352875917291 31 2035.2022000213 12 -191.38931884584 22 -962.179081004757 32 2035.2022000213 13 -191.38931884584 23 -962.179081004757 33 2035.2022000213 70 1 0 3DFACE 8 body_half_inside 10 -351.011407030345 20 -847.416499400322 30 2296.83616997626 11 -184.330051263378 21 -926.689746301964 31 2234.76895526921 12 -361.576402030189 22 -872.922653615348 32 2234.76895526921 13 -361.576402030189 23 -872.922653615348 33 2234.76895526921 70 1 0 3DFACE 8 body_half_inside 10 -184.330051263378 20 -926.689746301964 30 2234.76895526921 11 -351.011407030345 21 -847.416499400322 31 2296.83616997626 12 -178.9440635192 22 -899.612557411553 32 2296.83616997626 13 -178.9440635192 23 -899.612557411553 33 2296.83616997626 70 1 0 3DFACE 8 body_half_inside 10 -361.576402030189 20 -872.922653615348 30 2234.76895526921 11 -188.233089011893 21 -946.311642114328 31 2169.85154878419 12 -369.232485975391 22 -891.406075310522 32 2169.85154878419 13 -369.232485975391 23 -891.406075310522 33 2169.85154878419 70 1 0 3DFACE 8 body_half_inside 10 -188.233089011893 20 -946.311642114328 30 2169.85154878419 11 -361.576402030189 21 -872.922653615348 31 2234.76895526921 12 -184.330051263378 22 -926.689746301964 32 2234.76895526921 13 -184.330051263378 23 -926.689746301964 33 2234.76895526921 70 1 0 3DFACE 8 body_half_inside 10 -286.037069662455 20 -690.554572920556 30 2549.0746800213 11 -145.820433573828 21 -733.088824464619 31 2408.9276400213 12 -286.037069662455 22 -690.554572920556 32 2408.9276400213 13 -286.037069662455 23 -690.554572920556 33 2408.9276400213 70 1 0 3DFACE 8 body_half_inside 10 -145.820433573828 20 -733.088824464619 30 2408.9276400213 11 -286.037069662455 21 -690.554572920556 31 2549.0746800213 12 -145.820433573828 22 -733.088824464618 32 2549.0746800213 13 -145.820433573828 23 -733.088824464618 33 2549.0746800213 70 1 0 3DFACE 8 body_half_inside 10 -136.426435300007 20 -685.862005953678 30 628.271001705821 11 -248.997950917359 21 -601.134230107799 31 587.016306884026 12 -267.610079200261 22 -646.067882633009 32 628.271001705821 13 -267.610079200261 23 -646.067882633009 33 628.271001705821 70 1 0 3DFACE 8 body_half_inside 10 -248.997950917359 20 -601.134230107799 30 587.016306884026 11 -136.426435300007 21 -685.862005953678 31 628.271001705821 12 -126.938054583664 22 -638.160694862082 32 587.016306884026 13 -126.938054583664 23 -638.160694862082 33 587.016306884026 70 1 0 3DFACE 8 body_half_inside 10 -143.450831316169 20 -721.176029454062 30 680.911023534629 11 0.0 21 -699.298837021391 31 628.271001705821 12 -136.426435300007 22 -685.862005953678 32 628.271001705821 13 -136.426435300007 23 -685.862005953678 33 628.271001705821 70 1 0 3DFACE 8 body_half_inside 10 0.0 20 -699.298837021391 30 628.271001705821 11 -143.450831316169 21 -721.176029454062 31 680.911023534629 12 0.0 22 -735.304703143143 32 680.911023534629 13 0.0 23 -735.304703143143 33 680.911023534629 70 1 0 3DFACE 8 body_half_inside 10 -147.511894336929 20 -741.592371958341 30 741.194313252463 11 0.0 21 -735.304703143143 31 680.911023534629 12 -143.450831316169 22 -721.176029454062 32 680.911023534629 13 -143.450831316169 23 -721.176029454062 33 680.911023534629 70 1 0 3DFACE 8 body_half_inside 10 0.0 20 -735.304703143143 30 680.911023534629 11 -147.511894336929 21 -741.592371958341 31 741.194313252463 12 0.0 22 -756.121025443459 32 741.194313252463 13 0.0 23 -756.121025443459 33 741.194313252463 70 1 0 3DFACE 8 body_half_inside 10 -148.32093265249 20 -745.659682232799 30 804.835469255871 11 0.0 21 -756.121025443459 31 741.194313252463 12 -147.511894336929 22 -741.592371958341 32 741.194313252463 13 -147.511894336929 23 -741.592371958341 33 741.194313252463 70 1 0 3DFACE 8 body_half_inside 10 0.0 20 -756.121025443459 30 741.194313252463 11 -148.32093265249 21 -745.659682232799 31 804.835469255871 12 0.0 22 -760.268019036986 32 804.835469255871 13 0.0 23 -760.268019036986 33 804.835469255871 70 1 0 3DFACE 8 body_half_inside 10 -145.820433573828 20 -733.088824464618 30 867.310386884026 11 0.0 21 -760.268019036986 31 804.835469255871 12 -148.32093265249 22 -745.659682232799 32 804.835469255871 13 -148.32093265249 23 -745.659682232799 33 804.835469255871 70 1 0 3DFACE 8 body_half_inside 10 0.0 20 -760.268019036986 30 804.835469255871 11 -145.820433573828 21 -733.088824464618 31 867.310386884026 12 0.0 22 -747.450883605455 32 867.310386884026 13 0.0 23 -747.450883605455 33 867.310386884026 70 1 0 3DFACE 8 body_half_inside 10 -91.1377712474136 20 -458.180516616454 30 1100.8886000213 11 0.0 21 -747.450883605455 31 867.310386884026 12 -145.820433573828 22 -733.088824464618 32 867.310386884026 13 -145.820433573828 23 -733.088824464618 33 867.310386884026 70 1 0 3DFACE 8 body_half_inside 10 0.0 20 -747.450883605455 30 867.310386884026 11 -91.1377712474136 21 -458.180516616454 31 1100.8886000213 12 0.0 22 -467.156803605456 32 1100.8886000213 13 0.0 23 -467.156803605456 33 1100.8886000213 70 1 0 3DFACE 8 body_half_inside 10 -118.479102410621 20 -595.634670540536 30 1287.75132002131 11 0.0 21 -700.735203605455 31 1100.8886000213 12 -136.706656519425 22 -687.270773156591 32 1100.8886000213 13 -136.706656519425 23 -687.270773156591 33 1100.8886000213 70 1 0 3DFACE 8 body_half_inside 10 0.0 20 -700.735203605455 30 1100.8886000213 11 -118.479102410621 21 -595.634670540536 31 1287.75132002131 12 0.0 22 -607.303843605455 32 1287.75132002131 13 0.0 23 -607.303843605455 33 1287.75132002131 70 1 0 3DFACE 8 body_half_inside 10 -685.862005953678 20 -136.426435300007 30 628.271001705821 11 -735.304703143143 21 0.0 31 680.911023534629 12 -721.176029454062 22 -143.450831316169 32 680.911023534629 13 -721.176029454062 23 -143.450831316169 33 680.911023534629 70 1 0 3DFACE 8 body_half_inside 10 -735.304703143143 20 0.0 30 680.911023534629 11 -685.862005953678 21 -136.426435300007 31 628.271001705821 12 -699.298837021391 22 0.0 32 628.271001705821 13 -699.298837021391 23 0.0 33 628.271001705821 70 1 0 3DFACE 8 body_half_inside 10 917.237009349992 20 -1.80477854883065e-13 30 1773.56823006635 11 865.466789057043 21 -172.152047899808 31 1715.23764468454 12 899.612557411552 22 -178.944063519201 32 1773.56823006635 13 899.612557411552 23 -178.944063519201 33 1773.56823006635 70 1 0 3DFACE 8 body_half_inside 10 865.466789057043 20 -172.152047899808 30 1715.23764468454 11 917.237009349992 21 -1.80477854883065e-13 31 1773.56823006635 12 882.422285845505 22 -1.80477854883065e-13 32 1715.23764468454 13 882.422285845505 23 -1.80477854883065e-13 33 1715.23764468454 70 1 0 3DFACE 8 body_half_inside 10 0.0 20 -654.019523605455 30 1474.6140400213 11 145.820433573828 21 -733.088824464619 31 1287.75132002131 12 0.0 22 -747.450883605455 32 1287.75132002131 13 0.0 23 -747.450883605455 33 1287.75132002131 70 1 0 3DFACE 8 body_half_inside 10 145.820433573828 20 -733.088824464619 30 1287.75132002131 11 0.0 21 -654.019523605455 31 1474.6140400213 12 127.592879465023 22 -641.452721848564 32 1474.6140400213 13 127.592879465023 23 -641.452721848564 33 1474.6140400213 70 1 0 3DFACE 8 body_half_inside 10 -136.706656519425 20 -687.270773156591 30 1661.47676002131 11 0.0 21 -794.166563605455 31 1474.6140400213 12 -154.93421062823 22 -778.906875772646 32 1474.6140400213 13 -154.93421062823 23 -778.906875772646 33 1474.6140400213 70 1 0 3DFACE 8 body_half_inside 10 0.0 20 -794.166563605455 30 1474.6140400213 11 -136.706656519425 21 -687.270773156591 31 1661.47676002131 12 0.0 22 -700.735203605455 32 1661.47676002131 13 0.0 23 -700.735203605455 33 1661.47676002131 70 1 0 3DFACE 8 body_half_inside 10 944.844671731792 20 -1.80477854883065e-13 30 1835.6354447734 11 899.612557411552 21 -178.944063519201 31 1773.56823006635 12 926.689746301964 22 -184.330051263379 32 1835.6354447734 13 926.689746301964 23 -184.330051263379 33 1835.6354447734 70 1 0 3DFACE 8 body_half_inside 10 899.612557411552 20 -178.944063519201 30 1773.56823006635 11 944.844671731792 21 -1.80477854883065e-13 31 1835.6354447734 12 917.237009349992 22 -1.80477854883065e-13 32 1773.56823006635 13 917.237009349992 23 -1.80477854883065e-13 33 1773.56823006635 70 1 0 3DFACE 8 body_half_inside 10 0.0 20 -917.237009349992 30 2296.83616997626 11 184.330051263378 21 -926.689746301964 31 2234.76895526921 12 0.0 22 -944.844671731792 32 2234.76895526921 13 0.0 23 -944.844671731792 33 2234.76895526921 70 1 0 3DFACE 8 body_half_inside 10 184.330051263378 20 -926.689746301964 30 2234.76895526921 11 0.0 21 -917.237009349992 31 2296.83616997626 12 178.9440635192 22 -899.612557411553 32 2296.83616997626 13 178.9440635192 23 -899.612557411553 33 2296.83616997626 70 1 0 3DFACE 8 body_half_inside 10 -184.330051263378 20 -926.689746301964 30 1835.6354447734 11 0.0 21 -917.237009349992 31 1773.56823006635 12 -178.9440635192 22 -899.612557411553 32 1773.56823006635 13 -178.9440635192 23 -899.612557411553 33 1773.56823006635 70 1 0 3DFACE 8 body_half_inside 10 0.0 20 -917.237009349992 30 1773.56823006635 11 -184.330051263378 21 -926.689746301964 31 1835.6354447734 12 0.0 22 -944.844671731792 32 1835.6354447734 13 0.0 23 -944.844671731792 33 1835.6354447734 70 1 0 3DFACE 8 body_half_inside 10 -188.233089011893 20 -946.311642114328 30 1900.55285125842 11 0.0 21 -944.844671731792 31 1835.6354447734 12 -184.330051263378 22 -926.689746301964 32 1835.6354447734 13 -184.330051263378 23 -926.689746301964 33 1835.6354447734 70 1 0 3DFACE 8 body_half_inside 10 0.0 20 -944.844671731792 30 1835.6354447734 11 -188.233089011893 21 -946.311642114328 31 1900.55285125842 12 0.0 22 -964.850983209364 32 1900.55285125842 13 0.0 23 -964.850983209364 33 1900.55285125842 70 1 0 3DFACE 8 body_half_inside 10 143.450831316169 20 -721.176029454062 30 680.911023534629 11 267.610079200261 21 -646.067882633009 31 628.271001705821 12 136.426435300007 22 -685.862005953678 32 628.271001705821 13 136.426435300007 23 -685.862005953678 33 628.271001705821 70 1 0 3DFACE 8 body_half_inside 10 267.610079200261 20 -646.067882633009 30 628.271001705821 11 143.450831316169 21 -721.176029454062 31 680.911023534629 12 281.388927633011 22 -679.332965393237 32 680.911023534629 13 281.388927633011 23 -679.332965393237 33 680.911023534629 70 1 0 3DFACE 8 body_half_inside 10 147.511894336929 20 -741.592371958341 30 741.194313252463 11 281.388927633011 21 -679.332965393237 31 680.911023534629 12 143.450831316169 22 -721.176029454062 32 680.911023534629 13 143.450831316169 23 -721.176029454062 33 680.911023534629 70 1 0 3DFACE 8 body_half_inside 10 281.388927633011 20 -679.332965393237 30 680.911023534629 11 147.511894336929 21 -741.592371958341 31 741.194313252463 12 289.354989300114 22 -698.564739508657 32 741.194313252463 13 289.354989300114 23 -698.564739508657 33 741.194313252463 70 1 0 3DFACE 8 body_half_inside 10 148.32093265249 20 -745.659682232799 30 804.835469255871 11 289.354989300114 21 -698.564739508657 31 741.194313252463 12 147.511894336929 22 -741.592371958341 32 741.194313252463 13 147.511894336929 23 -741.592371958341 33 741.194313252463 70 1 0 3DFACE 8 body_half_inside 10 289.354989300114 20 -698.564739508657 30 741.194313252463 11 148.32093265249 21 -745.659682232799 31 804.835469255871 12 290.941975042481 22 -702.396062011173 32 804.835469255871 13 290.941975042481 23 -702.396062011173 33 804.835469255871 70 1 0 3DFACE 8 body_half_inside 10 145.820433573828 20 -733.088824464618 30 867.310386884026 11 290.941975042481 21 -702.396062011173 31 804.835469255871 12 148.32093265249 22 -745.659682232799 32 804.835469255871 13 148.32093265249 23 -745.659682232799 33 804.835469255871 70 1 0 3DFACE 8 body_half_inside 10 290.941975042481 20 -702.396062011173 30 804.835469255871 11 145.820433573828 21 -733.088824464618 31 867.310386884026 12 286.037069662455 22 -690.554572920556 32 867.310386884026 13 286.037069662455 23 -690.554572920556 33 867.310386884026 70 1 0 3DFACE 8 body_half_inside 10 178.77316905644 20 -431.596609324475 30 1100.8886000213 11 145.820433573828 21 -733.088824464618 31 867.310386884026 12 91.1377712474136 22 -458.180516616454 32 1100.8886000213 13 91.1377712474136 23 -458.180516616454 33 1100.8886000213 70 1 0 3DFACE 8 body_half_inside 10 145.820433573828 20 -733.088824464618 30 867.310386884026 11 178.77316905644 21 -431.596609324475 31 1100.8886000213 12 286.037069662455 22 -690.554572920556 32 867.310386884026 13 286.037069662455 23 -690.554572920556 33 867.310386884026 70 1 0 3DFACE 8 body_half_inside 10 118.479102410621 20 -595.634670540536 30 1287.75132002131 11 268.159752894786 21 -647.39491232121 31 1100.8886000213 12 136.706656519425 22 -687.270773156591 32 1100.8886000213 13 136.706656519425 23 -687.270773156591 33 1100.8886000213 70 1 0 3DFACE 8 body_half_inside 10 268.159752894786 20 -647.39491232121 30 1100.8886000213 11 118.479102410621 21 -595.634670540536 31 1287.75132002131 12 232.405119359447 22 -561.075591122516 32 1287.75132002131 13 232.405119359447 23 -561.075591122516 33 1287.75132002131 70 1 0 3DFACE 8 body_half_inside 10 127.592879465023 20 -641.452721848564 30 1474.6140400213 11 286.037069662455 21 -690.554572920556 31 1287.75132002131 12 145.820433573828 22 -733.088824464619 32 1287.75132002131 13 145.820433573828 23 -733.088824464619 33 1287.75132002131 70 1 0 3DFACE 8 body_half_inside 10 286.037069662455 20 -690.554572920556 30 1287.75132002131 11 127.592879465023 21 -641.452721848564 31 1474.6140400213 12 250.282436127116 22 -604.235251721863 32 1474.6140400213 13 250.282436127116 23 -604.235251721863 33 1474.6140400213 70 1 0 3DFACE 8 body_half_inside 10 136.706656519425 20 -687.270773156591 30 1661.47676002131 11 303.914386430124 21 -733.714233519903 31 1474.6140400213 12 154.93421062823 22 -778.906875772646 32 1474.6140400213 13 154.93421062823 23 -778.906875772646 33 1474.6140400213 70 1 0 3DFACE 8 body_half_inside 10 303.914386430124 20 -733.714233519903 30 1474.6140400213 11 136.706656519425 21 -687.270773156591 31 1661.47676002131 12 268.159752894786 22 -647.39491232121 32 1661.47676002131 13 268.159752894786 23 -647.39491232121 33 1661.47676002131 70 1 0 3DFACE 8 body_half_inside 10 172.152047899807 20 -865.466789057044 30 1715.23764468454 11 321.797626332425 21 -776.88819383121 31 1661.47676002131 12 164.051007270482 22 -824.740107573921 32 1661.47676002131 13 164.051007270482 23 -824.740107573921 33 1661.47676002131 70 1 0 3DFACE 8 body_half_inside 10 321.797626332425 20 -776.88819383121 30 1661.47676002131 11 172.152047899807 21 -865.466789057044 31 1715.23764468454 12 337.688389142806 22 -815.251888924487 32 1715.23764468454 13 337.688389142806 23 -815.251888924487 33 1715.23764468454 70 1 0 3DFACE 8 body_half_inside 10 964.850983209364 20 -1.80477854883065e-13 30 1900.55285125842 11 926.689746301964 21 -184.330051263379 31 1835.6354447734 12 946.311642114328 22 -188.233089011893 32 1900.55285125842 13 946.311642114328 23 -188.233089011893 33 1900.55285125842 70 1 0 3DFACE 8 body_half_inside 10 926.689746301964 20 -184.330051263379 30 1835.6354447734 11 964.850983209364 21 -1.80477854883065e-13 31 1900.55285125842 12 944.844671731792 22 -1.80477854883065e-13 32 1835.6354447734 13 944.844671731792 23 -1.80477854883065e-13 33 1835.6354447734 70 1 0 3DFACE 8 body_half_inside 10 -882.422285845505 20 0.0 30 2355.16675535807 11 -824.740107573921 21 -164.051007270482 31 2408.9276400213 12 -865.466789057043 22 -172.152047899808 32 2355.16675535807 13 -865.466789057043 23 -172.152047899808 33 2355.16675535807 70 1 0 3DFACE 8 body_half_inside 10 -824.740107573921 20 -164.051007270482 30 2408.9276400213 11 -882.422285845505 21 0.0 31 2355.16675535807 12 -840.897721502147 22 0.0 32 2408.9276400213 13 -840.897721502147 23 0.0 33 2408.9276400213 70 1 0 3DFACE 8 body_half_inside 10 178.9440635192 20 -899.612557411553 30 1773.56823006635 11 337.688389142806 21 -815.251888924487 31 1715.23764468454 12 172.152047899807 22 -865.466789057044 32 1715.23764468454 13 172.152047899807 23 -865.466789057044 33 1715.23764468454 70 1 0 3DFACE 8 body_half_inside 10 337.688389142806 20 -815.251888924487 30 1715.23764468454 11 178.9440635192 21 -899.612557411553 31 1773.56823006635 12 351.011407030345 22 -847.416499400322 32 1773.56823006635 13 351.011407030345 23 -847.416499400322 33 1773.56823006635 70 1 0 3DFACE 8 body_half_inside 10 -687.270773156591 20 -136.706656519425 30 1100.8886000213 11 -561.075591122516 21 -232.405119359447 31 1287.75132002131 12 -647.39491232121 22 -268.159752894786 32 1100.8886000213 13 -647.39491232121 23 -268.159752894786 33 1100.8886000213 70 1 0 3DFACE 8 body_half_inside 10 -561.075591122516 20 -232.405119359447 30 1287.75132002131 11 -687.270773156591 21 -136.706656519425 31 1100.8886000213 12 -595.634670540536 22 -118.479102410621 32 1287.75132002131 13 -595.634670540536 23 -118.479102410621 33 1287.75132002131 70 1 0 3DFACE 8 body_half_inside 10 976.970215709362 20 -1.80477854883065e-13 30 1967.39330582966 11 946.311642114328 21 -188.233089011893 31 1900.55285125842 12 958.198006960111 22 -190.597433982906 32 1967.39330582966 13 958.198006960111 23 -190.597433982906 33 1967.39330582966 70 1 0 3DFACE 8 body_half_inside 10 946.311642114328 20 -188.233089011893 30 1900.55285125842 11 976.970215709362 21 -1.80477854883065e-13 31 1967.39330582966 12 964.850983209364 22 -1.80477854883065e-13 32 1900.55285125842 13 964.850983209364 23 -1.80477854883065e-13 33 1900.55285125842 70 1 0 3DFACE 8 body_half_inside 10 172.152047899807 20 -865.466789057043 30 2355.16675535807 11 351.011407030345 21 -847.416499400322 31 2296.83616997626 12 178.9440635192 22 -899.612557411553 32 2296.83616997626 13 178.9440635192 23 -899.612557411553 33 2296.83616997626 70 1 0 3DFACE 8 body_half_inside 10 351.011407030345 20 -847.416499400322 30 2296.83616997626 11 172.152047899807 21 -865.466789057043 31 2355.16675535807 12 337.688389142806 22 -815.251888924486 32 2355.16675535807 13 337.688389142806 23 -815.251888924486 33 2355.16675535807 70 1 0 3DFACE 8 body_half_inside 10 981.029283605455 20 -1.80477854883065e-13 30 2035.2022000213 11 958.198006960111 21 -190.597433982906 31 1967.39330582966 12 962.179081004756 22 -191.38931884584 32 2035.2022000213 13 962.179081004756 23 -191.38931884584 33 2035.2022000213 70 1 0 3DFACE 8 body_half_inside 10 958.198006960111 20 -190.597433982906 30 1967.39330582966 11 981.029283605455 21 -1.80477854883065e-13 31 2035.2022000213 12 976.970215709362 22 -1.80477854883065e-13 32 1967.39330582966 13 976.970215709362 23 -1.80477854883065e-13 33 1967.39330582966 70 1 0 3DFACE 8 body_half_inside 10 164.051007270482 20 -824.740107573921 30 2408.9276400213 11 337.688389142806 21 -815.251888924486 31 2355.16675535807 12 172.152047899807 22 -865.466789057043 32 2355.16675535807 13 172.152047899807 23 -865.466789057043 33 2355.16675535807 70 1 0 3DFACE 8 body_half_inside 10 337.688389142806 20 -815.251888924486 30 2355.16675535807 11 164.051007270482 21 -824.740107573921 31 2408.9276400213 12 321.797626332425 22 -776.88819383121 32 2408.9276400213 13 321.797626332425 23 -776.88819383121 33 2408.9276400213 70 1 0 3DFACE 8 body_half_inside 10 145.820433573828 20 -733.088824464618 30 2549.0746800213 11 286.037069662455 21 -690.554572920556 31 2408.9276400213 12 145.820433573828 22 -733.088824464619 32 2408.9276400213 13 145.820433573828 23 -733.088824464619 33 2408.9276400213 70 1 0 3DFACE 8 body_half_inside 10 286.037069662455 20 -690.554572920556 30 2408.9276400213 11 145.820433573828 21 -733.088824464618 31 2549.0746800213 12 286.037069662455 22 -690.554572920556 32 2549.0746800213 13 286.037069662455 23 -690.554572920556 33 2549.0746800213 70 1 0 3DFACE 8 body_half_inside 10 136.426435300007 20 -685.862005953678 30 628.271001705821 11 248.997950917359 21 -601.1342301078 31 587.016306884026 12 126.938054583664 22 -638.160694862082 32 587.016306884026 13 126.938054583664 23 -638.160694862082 33 587.016306884026 70 1 0 3DFACE 8 body_half_inside 10 248.997950917359 20 -601.1342301078 30 587.016306884026 11 136.426435300007 21 -685.862005953678 31 628.271001705821 12 267.610079200261 22 -646.067882633009 32 628.271001705821 13 267.610079200261 23 -646.067882633009 33 628.271001705821 70 1 0 3DFACE 8 body_half_inside 10 281.388927633011 20 -679.332965393237 30 680.911023534629 11 388.509617834311 21 -581.445732901797 31 628.271001705821 12 267.610079200261 22 -646.067882633009 32 628.271001705821 13 267.610079200261 23 -646.067882633009 33 628.271001705821 70 1 0 3DFACE 8 body_half_inside 10 388.509617834311 20 -581.445732901797 30 628.271001705821 11 281.388927633011 21 -679.332965393237 31 680.911023534629 12 408.513405265645 22 -611.383516446667 32 680.911023534629 13 408.513405265645 23 -611.383516446667 33 680.911023534629 70 1 0 3DFACE 8 body_half_inside 10 289.354989300114 20 -698.564739508657 30 741.194313252463 11 408.513405265645 21 -611.383516446667 31 680.911023534629 12 281.388927633011 22 -679.332965393237 32 680.911023534629 13 281.388927633011 23 -679.332965393237 33 680.911023534629 70 1 0 3DFACE 8 body_half_inside 10 408.513405265645 20 -611.383516446667 30 680.911023534629 11 289.354989300114 21 -698.564739508657 31 741.194313252463 12 420.078334296643 22 -628.691655879276 32 741.194313252463 13 420.078334296643 23 -628.691655879276 33 741.194313252463 70 1 0 3DFACE 8 body_half_inside 10 290.941975042481 20 -702.396062011173 30 804.835469255871 11 420.078334296643 21 -628.691655879276 31 741.194313252463 12 289.354989300114 22 -698.564739508657 32 741.194313252463 13 289.354989300114 23 -698.564739508657 33 741.194313252463 70 1 0 3DFACE 8 body_half_inside 10 420.078334296643 20 -628.691655879276 30 741.194313252463 11 290.941975042481 21 -702.396062011173 31 804.835469255871 12 422.38228049373 22 -632.139755034707 32 804.835469255871 13 422.38228049373 23 -632.139755034707 33 804.835469255871 70 1 0 3DFACE 8 body_half_inside 10 286.037069662455 20 -690.554572920556 30 867.310386884026 11 422.38228049373 21 -632.139755034707 31 804.835469255871 12 290.941975042481 22 -702.396062011173 32 804.835469255871 13 290.941975042481 23 -702.396062011173 33 804.835469255871 70 1 0 3DFACE 8 body_half_inside 10 422.38228049373 20 -632.139755034707 30 804.835469255871 11 286.037069662455 21 -690.554572920556 31 867.310386884026 12 415.26146157539 22 -621.482696406622 32 867.310386884026 13 415.26146157539 23 -621.482696406622 33 867.310386884026 70 1 0 3DFACE 8 body_half_inside 10 958.19800696011 20 -190.597433982906 30 2103.01109421295 11 981.029283605455 21 -1.80477854883065e-13 31 2035.2022000213 12 962.179081004756 22 -191.38931884584 32 2035.2022000213 13 962.179081004756 23 -191.38931884584 33 2035.2022000213 70 1 0 3DFACE 8 body_half_inside 10 981.029283605455 20 -1.80477854883065e-13 30 2035.2022000213 11 958.19800696011 21 -190.597433982906 31 2103.01109421295 12 976.970215709361 22 -1.80477854883065e-13 32 2103.01109421295 13 976.970215709361 23 -1.80477854883065e-13 33 2103.01109421295 70 1 0 3DFACE 8 body_half_inside 10 946.311642114328 20 -188.233089011893 30 2169.85154878419 11 976.970215709361 21 -1.80477854883065e-13 31 2103.01109421295 12 958.19800696011 22 -190.597433982906 32 2103.01109421295 13 958.19800696011 23 -190.597433982906 33 2103.01109421295 70 1 0 3DFACE 8 body_half_inside 10 976.970215709361 20 -1.80477854883065e-13 30 2103.01109421295 11 946.311642114328 21 -188.233089011893 31 2169.85154878419 12 964.850983209363 22 -1.80477854883065e-13 32 2169.85154878419 13 964.850983209363 23 -1.80477854883065e-13 33 2169.85154878419 70 1 0 3DFACE 8 body_half_inside 10 259.538414235775 20 -388.426686378325 30 1100.8886000213 11 286.037069662455 21 -690.554572920556 31 867.310386884026 12 178.77316905644 22 -431.596609324475 32 1100.8886000213 13 178.77316905644 23 -431.596609324475 33 1100.8886000213 70 1 0 3DFACE 8 body_half_inside 10 286.037069662455 20 -690.554572920556 30 867.310386884026 11 259.538414235775 21 -388.426686378325 31 1100.8886000213 12 415.26146157539 22 -621.482696406622 32 867.310386884026 13 415.26146157539 23 -621.482696406622 33 867.310386884026 70 1 0 3DFACE 8 body_half_inside 10 232.405119359447 20 -561.075591122516 30 1287.75132002131 11 389.307620352121 21 -582.640028068573 31 1100.8886000213 12 268.159752894786 22 -647.39491232121 32 1100.8886000213 13 268.159752894786 23 -647.39491232121 33 1100.8886000213 70 1 0 3DFACE 8 body_half_inside 10 389.307620352121 20 -582.640028068573 30 1100.8886000213 11 232.405119359447 21 -561.075591122516 31 1287.75132002131 12 337.399937905583 22 -504.954691392474 32 1287.75132002131 13 337.399937905583 23 -504.954691392474 33 1287.75132002131 70 1 0 3DFACE 8 body_half_inside 10 -899.612557411553 20 -178.9440635192 30 2296.83616997626 11 -815.251888924486 21 -337.688389142806 31 2355.16675535807 12 -847.416499400322 22 -351.011407030345 32 2296.83616997626 13 -847.416499400322 23 -351.011407030345 33 2296.83616997626 70 1 0 3DFACE 8 body_half_inside 10 -815.251888924486 20 -337.688389142806 30 2355.16675535807 11 -899.612557411553 21 -178.9440635192 31 2296.83616997626 12 -865.466789057043 22 -172.152047899808 32 2355.16675535807 13 -865.466789057043 23 -172.152047899808 33 2355.16675535807 70 1 0 3DFACE 8 body_half_inside 10 -958.19800696011 20 -190.597433982906 30 2103.01109421295 11 -891.406075310522 21 -369.232485975391 31 2169.85154878419 12 -902.602786167016 22 -373.87031546612 32 2103.01109421295 13 -902.602786167016 23 -373.87031546612 33 2103.01109421295 70 1 0 3DFACE 8 body_half_inside 10 -891.406075310522 20 -369.232485975391 30 2169.85154878419 11 -958.19800696011 21 -190.597433982906 31 2103.01109421295 12 -946.311642114328 22 -188.233089011893 32 2169.85154878419 13 -946.311642114328 23 -188.233089011893 33 2169.85154878419 70 1 0 3DFACE 8 body_half_inside 10 250.282436127116 20 -604.235251721863 30 1474.6140400213 11 415.26146157539 21 -621.482696406623 31 1287.75132002131 12 286.037069662455 22 -690.554572920556 32 1287.75132002131 13 286.037069662455 23 -690.554572920556 33 1287.75132002131 70 1 0 3DFACE 8 body_half_inside 10 415.26146157539 20 -621.482696406623 30 1287.75132002131 11 250.282436127116 21 -604.235251721863 31 1474.6140400213 12 363.353779128852 22 -543.797359730523 32 1474.6140400213 13 363.353779128852 23 -543.797359730523 33 1474.6140400213 70 1 0 3DFACE 8 body_half_inside 10 268.159752894786 20 -647.39491232121 30 1661.47676002131 11 441.215302798659 21 -660.325364744673 31 1474.6140400213 12 303.914386430124 22 -733.714233519903 32 1474.6140400213 13 303.914386430124 23 -733.714233519903 33 1474.6140400213 70 1 0 3DFACE 8 body_half_inside 10 441.215302798659 20 -660.325364744673 30 1474.6140400213 11 268.159752894786 21 -647.39491232121 31 1661.47676002131 12 389.307620352121 22 -582.640028068573 32 1661.47676002131 13 389.307620352121 23 -582.640028068573 33 1661.47676002131 70 1 0 3DFACE 8 body_half_inside 10 337.688389142806 20 -815.251888924487 30 1715.23764468454 11 467.1777430806 21 -699.180902483484 31 1661.47676002131 12 321.797626332425 22 -776.88819383121 32 1661.47676002131 13 321.797626332425 23 -776.88819383121 33 1661.47676002131 70 1 0 3DFACE 8 body_half_inside 10 467.1777430806 20 -699.180902483484 30 1661.47676002131 11 337.688389142806 21 -815.251888924487 31 1715.23764468454 12 490.247554968877 22 -733.707315899088 32 1715.23764468454 13 490.247554968877 23 -733.707315899088 33 1715.23764468454 70 1 0 3DFACE 8 body_half_inside 10 351.011407030345 20 -847.416499400322 30 1773.56823006635 11 490.247554968877 21 -733.707315899088 31 1715.23764468454 12 337.688389142806 22 -815.251888924487 32 1715.23764468454 13 337.688389142806 23 -815.251888924487 33 1715.23764468454 70 1 0 3DFACE 8 body_half_inside 10 490.247554968877 20 -733.707315899088 30 1715.23764468454 11 351.011407030345 21 -847.416499400322 31 1773.56823006635 12 509.589579018778 22 -762.654700553784 32 1773.56823006635 13 509.589579018778 23 -762.654700553784 33 1773.56823006635 70 1 0 3DFACE 8 body_half_inside 10 -802.244272938819 20 -536.042485570818 30 1900.55285125842 11 -902.602786167016 21 -373.87031546612 31 1967.39330582966 12 -812.321046486997 22 -542.775570394861 32 1967.39330582966 13 -812.321046486997 23 -542.775570394861 33 1967.39330582966 70 1 0 3DFACE 8 body_half_inside 10 -902.602786167016 20 -373.87031546612 30 1967.39330582966 11 -802.244272938819 21 -536.042485570818 31 1900.55285125842 12 -891.406075310523 22 -369.232485975391 32 1900.55285125842 13 -891.406075310523 23 -369.232485975391 33 1900.55285125842 70 1 0 3DFACE 8 body_half_inside 10 -812.321046486997 20 -542.775570394861 30 1967.39330582966 11 -906.352875917291 21 -375.423653500801 31 2035.2022000213 12 -815.696038096872 22 -545.030667691736 32 2035.2022000213 13 -815.696038096872 23 -545.030667691736 33 2035.2022000213 70 1 0 3DFACE 8 body_half_inside 10 -906.352875917291 20 -375.423653500801 30 2035.2022000213 11 -812.321046486997 21 -542.775570394861 31 1967.39330582966 12 -902.602786167016 22 -373.87031546612 32 1967.39330582966 13 -902.602786167016 23 -373.87031546612 33 1967.39330582966 70 1 0 3DFACE 8 body_half_inside 10 -906.352875917291 20 -375.423653500801 30 2035.2022000213 11 -812.321046486997 21 -542.775570394861 31 2103.01109421295 12 -815.696038096872 22 -545.030667691736 32 2035.2022000213 13 -815.696038096872 23 -545.030667691736 33 2035.2022000213 70 1 0 3DFACE 8 body_half_inside 10 -812.321046486997 20 -542.775570394861 30 2103.01109421295 11 -906.352875917291 21 -375.423653500801 31 2035.2022000213 12 -902.602786167016 22 -373.87031546612 32 2103.01109421295 13 -902.602786167016 23 -373.87031546612 33 2103.01109421295 70 1 0 3DFACE 8 body_half_inside 10 -581.445732901797 20 -388.509617834311 30 628.271001705821 11 -679.332965393238 21 -281.388927633011 31 680.911023534629 12 -611.383516446667 22 -408.513405265645 32 680.911023534629 13 -611.383516446667 23 -408.513405265645 33 680.911023534629 70 1 0 3DFACE 8 body_half_inside 10 -679.332965393238 20 -281.388927633011 30 680.911023534629 11 -581.445732901797 21 -388.509617834311 31 628.271001705821 12 -646.067882633009 22 -267.610079200261 32 628.271001705821 13 -646.067882633009 23 -267.610079200261 33 628.271001705821 70 1 0 3DFACE 8 body_half_inside 10 337.688389142806 20 -815.251888924486 30 2355.16675535807 11 509.589579018778 21 -762.654700553784 31 2296.83616997626 12 351.011407030345 22 -847.416499400322 32 2296.83616997626 13 351.011407030345 23 -847.416499400322 33 2296.83616997626 70 1 0 3DFACE 8 body_half_inside 10 509.589579018778 20 -762.654700553784 30 2296.83616997626 11 337.688389142806 21 -815.251888924486 31 2355.16675535807 12 490.247554968877 22 -733.707315899088 32 2355.16675535807 13 490.247554968877 23 -733.707315899088 33 2355.16675535807 70 1 0 3DFACE 8 body_half_inside 10 321.797626332425 20 -776.88819383121 30 2408.9276400213 11 490.247554968877 21 -733.707315899088 31 2355.16675535807 12 337.688389142806 22 -815.251888924486 32 2355.16675535807 13 337.688389142806 23 -815.251888924486 33 2355.16675535807 70 1 0 3DFACE 8 body_half_inside 10 490.247554968877 20 -733.707315899088 30 2355.16675535807 11 321.797626332425 21 -776.88819383121 31 2408.9276400213 12 467.1777430806 22 -699.180902483484 32 2408.9276400213 13 467.1777430806 23 -699.180902483484 33 2408.9276400213 70 1 0 3DFACE 8 body_half_inside 10 286.037069662455 20 -690.554572920556 30 2549.0746800213 11 415.26146157539 21 -621.482696406623 31 2408.9276400213 12 286.037069662455 22 -690.554572920556 32 2408.9276400213 13 286.037069662455 23 -690.554572920556 33 2408.9276400213 70 1 0 3DFACE 8 body_half_inside 10 415.26146157539 20 -621.482696406623 30 2408.9276400213 11 286.037069662455 21 -690.554572920556 31 2549.0746800213 12 415.26146157539 22 -621.482696406622 32 2549.0746800213 13 415.26146157539 23 -621.482696406622 33 2549.0746800213 70 1 0 3DFACE 8 body_half_inside 10 267.610079200261 20 -646.067882633009 30 628.271001705821 11 361.48899563696 21 -541.006514010435 31 587.016306884026 12 248.997950917359 22 -601.1342301078 32 587.016306884026 13 248.997950917359 23 -601.1342301078 33 587.016306884026 70 1 0 3DFACE 8 body_half_inside 10 361.48899563696 20 -541.006514010435 30 587.016306884026 11 267.610079200261 21 -646.067882633009 31 628.271001705821 12 388.509617834311 22 -581.445732901797 32 628.271001705821 13 388.509617834311 23 -581.445732901797 33 628.271001705821 70 1 0 3DFACE 8 body_half_inside 10 408.513405265645 20 -611.383516446667 30 680.911023534629 11 494.478949733692 21 -494.478949733692 31 628.271001705821 12 388.509617834311 22 -581.445732901797 32 628.271001705821 13 388.509617834311 23 -581.445732901797 33 628.271001705821 70 1 0 3DFACE 8 body_half_inside 10 494.478949733692 20 -494.478949733692 30 628.271001705821 11 408.513405265645 21 -611.383516446667 31 680.911023534629 12 519.938941830878 22 -519.938941830878 32 680.911023534629 13 519.938941830878 23 -519.938941830878 33 680.911023534629 70 1 0 3DFACE 8 body_half_inside 10 420.078334296643 20 -628.691655879276 30 741.194313252463 11 519.938941830878 21 -519.938941830878 31 680.911023534629 12 408.513405265645 22 -611.383516446667 32 680.911023534629 13 408.513405265645 23 -611.383516446667 33 680.911023534629 70 1 0 3DFACE 8 body_half_inside 10 519.938941830878 20 -519.938941830878 30 680.911023534629 11 420.078334296643 21 -628.691655879276 31 741.194313252463 12 534.658304488796 22 -534.658304488796 32 741.194313252463 13 534.658304488796 23 -534.658304488796 33 741.194313252463 70 1 0 3DFACE 8 body_half_inside 10 422.38228049373 20 -632.139755034707 30 804.835469255871 11 534.658304488796 21 -534.658304488796 31 741.194313252463 12 420.078334296643 22 -628.691655879276 32 741.194313252463 13 420.078334296643 23 -628.691655879276 33 741.194313252463 70 1 0 3DFACE 8 body_half_inside 10 534.658304488796 20 -534.658304488796 30 741.194313252463 11 422.38228049373 21 -632.139755034707 31 804.835469255871 12 537.590671780316 22 -537.590671780316 32 804.835469255871 13 537.590671780316 23 -537.590671780316 33 804.835469255871 70 1 0 3DFACE 8 body_half_inside 10 415.26146157539 20 -621.482696406622 30 867.310386884026 11 537.590671780316 21 -537.590671780316 31 804.835469255871 12 422.38228049373 22 -632.139755034707 32 804.835469255871 13 422.38228049373 23 -632.139755034707 33 804.835469255871 70 1 0 3DFACE 8 body_half_inside 10 537.590671780316 20 -537.590671780316 30 804.835469255871 11 415.26146157539 21 -621.482696406622 31 867.310386884026 12 528.527588401294 22 -528.527588401294 32 867.310386884026 13 528.527588401294 23 -528.527588401294 33 867.310386884026 70 1 0 3DFACE 8 body_half_inside 10 330.32974370685 20 -330.32974370685 30 1100.8886000213 11 415.26146157539 21 -621.482696406622 31 867.310386884026 12 259.538414235775 22 -388.426686378325 32 1100.8886000213 13 259.538414235775 23 -388.426686378325 33 1100.8886000213 70 1 0 3DFACE 8 body_half_inside 10 415.26146157539 20 -621.482696406622 30 867.310386884026 11 330.32974370685 21 -330.32974370685 31 1100.8886000213 12 528.527588401294 22 -528.527588401294 32 867.310386884026 13 528.527588401294 23 -528.527588401294 33 867.310386884026 70 1 0 3DFACE 8 body_half_inside 10 337.399937905583 20 -504.954691392474 30 1287.75132002131 11 495.494614285554 21 -495.494614285554 31 1100.8886000213 12 389.307620352121 22 -582.640028068573 32 1100.8886000213 13 389.307620352121 23 -582.640028068573 33 1100.8886000213 70 1 0 3DFACE 8 body_half_inside 10 495.494614285554 20 -495.494614285554 30 1100.8886000213 11 337.399937905583 21 -504.954691392474 31 1287.75132002131 12 429.428666054072 22 -429.428666054072 32 1287.75132002131 13 429.428666054072 23 -429.428666054072 33 1287.75132002131 70 1 0 3DFACE 8 body_half_inside 10 363.353779128852 20 -543.797359730523 30 1474.6140400213 11 528.527588401294 21 -528.527588401294 31 1287.75132002131 12 415.26146157539 22 -621.482696406623 32 1287.75132002131 13 415.26146157539 23 -621.482696406623 33 1287.75132002131 70 1 0 3DFACE 8 body_half_inside 10 528.527588401294 20 -528.527588401294 30 1287.75132002131 11 363.353779128852 21 -543.797359730523 31 1474.6140400213 12 462.461640169813 22 -462.461640169813 32 1474.6140400213 13 462.461640169813 23 -462.461640169813 33 1474.6140400213 70 1 0 3DFACE 8 body_half_inside 10 0.0 20 -607.303843605455 30 1287.75132002131 11 136.706656519425 21 -687.270773156591 31 1100.8886000213 12 0.0 22 -700.735203605455 32 1100.8886000213 13 0.0 23 -700.735203605455 33 1100.8886000213 70 1 0 3DFACE 8 body_half_inside 10 136.706656519425 20 -687.270773156591 30 1100.8886000213 11 0.0 21 -607.303843605455 31 1287.75132002131 12 118.479102410621 22 -595.634670540536 32 1287.75132002131 13 118.479102410621 23 -595.634670540536 33 1287.75132002131 70 1 0 3DFACE 8 body_half_inside 10 389.307620352121 20 -582.640028068573 30 1661.47676002131 11 561.560562517035 21 -561.560562517035 31 1474.6140400213 12 441.215302798659 22 -660.325364744673 32 1474.6140400213 13 441.215302798659 23 -660.325364744673 33 1474.6140400213 70 1 0 3DFACE 8 body_half_inside 10 561.560562517035 20 -561.560562517035 30 1474.6140400213 11 389.307620352121 21 -582.640028068573 31 1661.47676002131 12 495.494614285554 22 -495.494614285554 32 1661.47676002131 13 495.494614285554 23 -495.494614285554 33 1661.47676002131 70 1 0 3DFACE 8 body_half_inside 10 926.689746301964 20 -184.330051263379 30 2234.76895526921 11 964.850983209363 21 -1.80477854883065e-13 31 2169.85154878419 12 946.311642114328 22 -188.233089011893 32 2169.85154878419 13 946.311642114328 23 -188.233089011893 33 2169.85154878419 70 1 0 3DFACE 8 body_half_inside 10 964.850983209363 20 -1.80477854883065e-13 30 2169.85154878419 11 926.689746301964 21 -184.330051263379 31 2234.76895526921 12 944.844671731792 22 -1.80477854883065e-13 32 2234.76895526921 13 944.844671731792 23 -1.80477854883065e-13 33 2234.76895526921 70 1 0 3DFACE 8 body_half_inside 10 490.247554968877 20 -733.707315899088 30 1715.23764468454 11 594.604481158485 21 -594.604481158485 31 1661.47676002131 12 467.1777430806 22 -699.180902483484 32 1661.47676002131 13 467.1777430806 23 -699.180902483484 33 1661.47676002131 70 1 0 3DFACE 8 body_half_inside 10 594.604481158485 20 -594.604481158485 30 1661.47676002131 11 490.247554968877 21 -733.707315899088 31 1715.23764468454 12 623.966782191491 22 -623.966782191491 32 1715.23764468454 13 623.966782191491 23 -623.966782191491 33 1715.23764468454 70 1 0 3DFACE 8 body_half_inside 10 509.589579018778 20 -762.654700553784 30 1773.56823006635 11 623.966782191491 21 -623.966782191491 31 1715.23764468454 12 490.247554968877 22 -733.707315899088 32 1715.23764468454 13 490.247554968877 23 -733.707315899088 33 1715.23764468454 70 1 0 3DFACE 8 body_half_inside 10 623.966782191491 20 -623.966782191491 30 1715.23764468454 11 509.589579018778 21 -762.654700553784 31 1773.56823006635 12 648.584509266648 22 -648.584509266648 32 1773.56823006635 13 648.584509266648 23 -648.584509266648 33 1773.56823006635 70 1 0 3DFACE 8 body_half_inside 10 490.247554968877 20 -733.707315899088 30 2355.16675535807 11 648.584509266648 21 -648.584509266648 31 2296.83616997626 12 509.589579018778 22 -762.654700553784 32 2296.83616997626 13 509.589579018778 23 -762.654700553784 33 2296.83616997626 70 1 0 3DFACE 8 body_half_inside 10 648.584509266648 20 -648.584509266648 30 2296.83616997626 11 490.247554968877 21 -733.707315899088 31 2355.16675535807 12 623.96678219149 22 -623.966782191491 32 2355.16675535807 13 623.96678219149 23 -623.966782191491 33 2355.16675535807 70 1 0 3DFACE 8 body_half_inside 10 899.612557411552 20 -178.944063519201 30 2296.83616997626 11 944.844671731792 21 -1.80477854883065e-13 31 2234.76895526921 12 926.689746301964 22 -184.330051263379 32 2234.76895526921 13 926.689746301964 23 -184.330051263379 33 2234.76895526921 70 1 0 3DFACE 8 body_half_inside 10 944.844671731792 20 -1.80477854883065e-13 30 2234.76895526921 11 899.612557411552 21 -178.944063519201 31 2296.83616997626 12 917.237009349992 22 -1.80477854883065e-13 32 2296.83616997626 13 917.237009349992 23 -1.80477854883065e-13 33 2296.83616997626 70 1 0 3DFACE 8 body_half_inside 10 865.466789057043 20 -172.152047899808 30 2355.16675535807 11 917.237009349992 21 -1.80477854883065e-13 31 2296.83616997626 12 899.612557411552 22 -178.944063519201 32 2296.83616997626 13 899.612557411552 23 -178.944063519201 33 2296.83616997626 70 1 0 3DFACE 8 body_half_inside 10 917.237009349992 20 -1.80477854883065e-13 30 2296.83616997626 11 865.466789057043 21 -172.152047899808 31 2355.16675535807 12 882.422285845505 22 -1.80477854883065e-13 32 2355.16675535807 13 882.422285845505 23 -1.80477854883065e-13 33 2355.16675535807 70 1 0 3DFACE 8 body_half_inside 10 824.740107573921 20 -164.051007270483 30 2408.9276400213 11 882.422285845505 21 -1.80477854883065e-13 31 2355.16675535807 12 865.466789057043 22 -172.152047899808 32 2355.16675535807 13 865.466789057043 23 -172.152047899808 33 2355.16675535807 70 1 0 3DFACE 8 body_half_inside 10 882.422285845505 20 -1.80477854883065e-13 30 2355.16675535807 11 824.740107573921 21 -164.051007270483 31 2408.9276400213 12 840.897721502147 22 -1.80477854883065e-13 32 2408.9276400213 13 840.897721502147 23 -1.80477854883065e-13 33 2408.9276400213 70 1 0 3DFACE 8 body_half_inside 10 747.450883605455 20 -1.80477854883065e-13 30 2549.0746800213 11 733.088824464619 21 -145.820433573828 31 2408.9276400213 12 733.088824464618 22 -145.820433573828 32 2549.0746800213 13 733.088824464618 23 -145.820433573828 33 2549.0746800213 70 1 0 3DFACE 8 body_half_inside 10 733.088824464619 20 -145.820433573828 30 2408.9276400213 11 747.450883605455 21 -1.80477854883065e-13 31 2549.0746800213 12 747.450883605455 22 -1.80477854883065e-13 32 2408.9276400213 13 747.450883605455 23 -1.80477854883065e-13 33 2408.9276400213 70 1 0 3DFACE 8 body_half_inside 10 467.1777430806 20 -699.180902483484 30 2408.9276400213 11 623.96678219149 21 -623.966782191491 31 2355.16675535807 12 490.247554968877 22 -733.707315899088 32 2355.16675535807 13 490.247554968877 23 -733.707315899088 33 2355.16675535807 70 1 0 3DFACE 8 body_half_inside 10 623.96678219149 20 -623.966782191491 30 2355.16675535807 11 467.1777430806 21 -699.180902483484 31 2408.9276400213 12 594.604481158485 22 -594.604481158485 32 2408.9276400213 13 594.604481158485 23 -594.604481158485 33 2408.9276400213 70 1 0 3DFACE 8 body_half_inside 10 415.26146157539 20 -621.482696406622 30 2549.0746800213 11 528.527588401294 21 -528.527588401294 31 2408.9276400213 12 415.26146157539 22 -621.482696406623 32 2408.9276400213 13 415.26146157539 23 -621.482696406623 33 2408.9276400213 70 1 0 3DFACE 8 body_half_inside 10 528.527588401294 20 -528.527588401294 30 2408.9276400213 11 415.26146157539 21 -621.482696406622 31 2549.0746800213 12 528.527588401294 22 -528.527588401294 32 2549.0746800213 13 528.527588401294 23 -528.527588401294 33 2549.0746800213 70 1 0 3DFACE 8 body_half_inside 10 388.509617834311 20 -581.445732901797 30 628.271001705821 11 460.088220979597 21 -460.088220979597 31 587.016306884026 12 361.48899563696 22 -541.006514010435 32 587.016306884026 13 361.48899563696 23 -541.006514010435 33 587.016306884026 70 1 0 3DFACE 8 body_half_inside 10 460.088220979597 20 -460.088220979597 30 587.016306884026 11 388.509617834311 21 -581.445732901797 31 628.271001705821 12 494.478949733692 22 -494.478949733692 32 628.271001705821 13 494.478949733692 23 -494.478949733692 33 628.271001705821 70 1 0 3DFACE 8 body_half_inside 10 611.383516446667 20 -408.513405265645 30 680.911023534629 11 494.478949733692 21 -494.478949733692 31 628.271001705821 12 519.938941830878 22 -519.938941830878 32 680.911023534629 13 519.938941830878 23 -519.938941830878 33 680.911023534629 70 1 0 3DFACE 8 body_half_inside 10 494.478949733692 20 -494.478949733692 30 628.271001705821 11 611.383516446667 21 -408.513405265645 31 680.911023534629 12 581.445732901797 22 -388.509617834311 32 628.271001705821 13 581.445732901797 23 -388.509617834311 33 628.271001705821 70 1 0 3DFACE 8 body_half_inside 10 628.691655879276 20 -420.078334296643 30 741.194313252463 11 519.938941830878 21 -519.938941830878 31 680.911023534629 12 534.658304488796 22 -534.658304488796 32 741.194313252463 13 534.658304488796 23 -534.658304488796 33 741.194313252463 70 1 0 3DFACE 8 body_half_inside 10 519.938941830878 20 -519.938941830878 30 680.911023534629 11 628.691655879276 21 -420.078334296643 31 741.194313252463 12 611.383516446667 22 -408.513405265645 32 680.911023534629 13 611.383516446667 23 -408.513405265645 33 680.911023534629 70 1 0 3DFACE 8 body_half_inside 10 632.139755034707 20 -422.38228049373 30 804.835469255871 11 534.658304488796 21 -534.658304488796 31 741.194313252463 12 537.590671780316 22 -537.590671780316 32 804.835469255871 13 537.590671780316 23 -537.590671780316 33 804.835469255871 70 1 0 3DFACE 8 body_half_inside 10 534.658304488796 20 -534.658304488796 30 741.194313252463 11 632.139755034707 21 -422.38228049373 31 804.835469255871 12 628.691655879276 22 -420.078334296643 32 741.194313252463 13 628.691655879276 23 -420.078334296643 33 741.194313252463 70 1 0 3DFACE 8 body_half_inside 10 528.527588401294 20 -528.527588401294 30 867.310386884026 11 632.139755034707 21 -422.38228049373 31 804.835469255871 12 537.590671780316 22 -537.590671780316 32 804.835469255871 13 537.590671780316 23 -537.590671780316 33 804.835469255871 70 1 0 3DFACE 8 body_half_inside 10 632.139755034707 20 -422.38228049373 30 804.835469255871 11 528.527588401294 21 -528.527588401294 31 867.310386884026 12 621.482696406622 22 -415.26146157539 32 867.310386884026 13 621.482696406622 23 -415.26146157539 33 867.310386884026 70 1 0 3DFACE 8 body_half_inside 10 388.426686378325 20 -259.538414235776 30 1100.8886000213 11 528.527588401294 21 -528.527588401294 31 867.310386884026 12 330.32974370685 22 -330.32974370685 32 1100.8886000213 13 330.32974370685 23 -330.32974370685 33 1100.8886000213 70 1 0 3DFACE 8 body_half_inside 10 528.527588401294 20 -528.527588401294 30 867.310386884026 11 388.426686378325 21 -259.538414235776 31 1100.8886000213 12 621.482696406622 22 -415.26146157539 32 867.310386884026 13 621.482696406622 23 -415.26146157539 33 867.310386884026 70 1 0 3DFACE 8 body_half_inside 10 -946.311642114328 20 -188.233089011893 30 2169.85154878419 11 -872.922653615348 21 -361.576402030189 31 2234.76895526921 12 -891.406075310522 22 -369.232485975391 32 2169.85154878419 13 -891.406075310522 23 -369.232485975391 33 2169.85154878419 70 1 0 3DFACE 8 body_half_inside 10 -872.922653615348 20 -361.576402030189 30 2234.76895526921 11 -946.311642114328 21 -188.233089011893 31 2169.85154878419 12 -926.689746301964 22 -184.330051263378 32 2234.76895526921 13 -926.689746301964 23 -184.330051263378 33 2234.76895526921 70 1 0 3DFACE 8 body_half_inside 10 429.428666054072 20 -429.428666054072 30 1287.75132002131 11 582.640028068573 21 -389.307620352121 31 1100.8886000213 12 495.494614285554 22 -495.494614285554 32 1100.8886000213 13 495.494614285554 23 -495.494614285554 33 1100.8886000213 70 1 0 3DFACE 8 body_half_inside 10 582.640028068573 20 -389.307620352121 30 1100.8886000213 11 429.428666054072 21 -429.428666054072 31 1287.75132002131 12 504.954691392474 22 -337.399937905583 32 1287.75132002131 13 504.954691392474 23 -337.399937905583 33 1287.75132002131 70 1 0 3DFACE 8 body_half_inside 10 462.461640169813 20 -462.461640169813 30 1474.6140400213 11 621.482696406623 21 -415.26146157539 31 1287.75132002131 12 528.527588401294 22 -528.527588401294 32 1287.75132002131 13 528.527588401294 23 -528.527588401294 33 1287.75132002131 70 1 0 3DFACE 8 body_half_inside 10 621.482696406623 20 -415.26146157539 30 1287.75132002131 11 462.461640169813 21 -462.461640169813 31 1474.6140400213 12 543.797359730523 22 -363.353779128852 32 1474.6140400213 13 543.797359730523 23 -363.353779128852 33 1474.6140400213 70 1 0 3DFACE 8 body_half_inside 10 495.494614285554 20 -495.494614285554 30 1661.47676002131 11 660.325364744673 21 -441.21530279866 31 1474.6140400213 12 561.560562517035 22 -561.560562517035 32 1474.6140400213 13 561.560562517035 23 -561.560562517035 33 1474.6140400213 70 1 0 3DFACE 8 body_half_inside 10 660.325364744673 20 -441.21530279866 30 1474.6140400213 11 495.494614285554 21 -495.494614285554 31 1661.47676002131 12 582.640028068573 22 -389.307620352121 32 1661.47676002131 13 582.640028068573 23 -389.307620352121 33 1661.47676002131 70 1 0 3DFACE 8 body_half_inside 10 685.862005953678 20 -136.426435300007 30 628.271001705821 11 650.663001997455 21 -1.80477854883065e-13 31 587.016306884026 12 638.160694862082 22 -126.938054583664 32 587.016306884026 13 638.160694862082 23 -126.938054583664 33 587.016306884026 70 1 0 3DFACE 8 body_half_inside 10 650.663001997455 20 -1.80477854883065e-13 30 587.016306884026 11 685.862005953678 21 -136.426435300007 31 628.271001705821 12 699.298837021391 22 -1.80477854883065e-13 32 628.271001705821 13 699.298837021391 23 -1.80477854883065e-13 33 628.271001705821 70 1 0 3DFACE 8 body_half_inside 10 733.707315899088 20 -490.247554968878 30 1715.23764468454 11 594.604481158485 21 -594.604481158485 31 1661.47676002131 12 623.966782191491 22 -623.966782191491 32 1715.23764468454 13 623.966782191491 23 -623.966782191491 33 1715.23764468454 70 1 0 3DFACE 8 body_half_inside 10 594.604481158485 20 -594.604481158485 30 1661.47676002131 11 733.707315899088 21 -490.247554968878 31 1715.23764468454 12 699.180902483483 22 -467.1777430806 32 1661.47676002131 13 699.180902483483 23 -467.1777430806 33 1661.47676002131 70 1 0 3DFACE 8 body_half_inside 10 762.654700553784 20 -509.589579018778 30 1773.56823006635 11 623.966782191491 21 -623.966782191491 31 1715.23764468454 12 648.584509266648 22 -648.584509266648 32 1773.56823006635 13 648.584509266648 23 -648.584509266648 33 1773.56823006635 70 1 0 3DFACE 8 body_half_inside 10 623.966782191491 20 -623.966782191491 30 1715.23764468454 11 762.654700553784 21 -509.589579018778 31 1773.56823006635 12 733.707315899088 22 -490.247554968878 32 1715.23764468454 13 733.707315899088 23 -490.247554968878 33 1715.23764468454 70 1 0 3DFACE 8 body_half_inside 10 785.609632890959 20 -524.927574441361 30 1835.6354447734 11 648.584509266648 21 -648.584509266648 31 1773.56823006635 12 668.106074549527 22 -668.106074549528 32 1835.6354447734 13 668.106074549527 23 -668.106074549528 33 1835.6354447734 70 1 0 3DFACE 8 body_half_inside 10 648.584509266648 20 -648.584509266648 30 1773.56823006635 11 785.609632890959 21 -524.927574441361 31 1835.6354447734 12 762.654700553784 22 -509.589579018778 32 1773.56823006635 13 762.654700553784 23 -509.589579018778 33 1773.56823006635 70 1 0 3DFACE 8 body_half_inside 10 136.426435300007 20 -685.862005953678 30 628.271001705821 11 0.0 21 -650.663001997455 31 587.016306884026 12 0.0 22 -699.298837021391 32 628.271001705821 13 0.0 23 -699.298837021391 33 628.271001705821 70 1 0 3DFACE 8 body_half_inside 10 0.0 20 -650.663001997455 30 587.016306884026 11 136.426435300007 21 -685.862005953678 31 628.271001705821 12 126.938054583664 22 -638.160694862082 32 587.016306884026 13 126.938054583664 23 -638.160694862082 33 587.016306884026 70 1 0 3DFACE 8 body_half_inside 10 648.584509266648 20 -648.584509266648 30 2296.83616997626 11 785.609632890959 21 -524.927574441361 31 2234.76895526921 12 668.106074549527 22 -668.106074549528 32 2234.76895526921 13 668.106074549527 23 -668.106074549528 33 2234.76895526921 70 1 0 3DFACE 8 body_half_inside 10 785.609632890959 20 -524.927574441361 30 2234.76895526921 11 648.584509266648 21 -648.584509266648 31 2296.83616997626 12 762.654700553784 22 -509.589579018778 32 2296.83616997626 13 762.654700553784 23 -509.589579018778 33 2296.83616997626 70 1 0 3DFACE 8 body_half_inside 10 623.96678219149 20 -623.966782191491 30 2355.16675535807 11 762.654700553784 21 -509.589579018778 31 2296.83616997626 12 648.584509266648 22 -648.584509266648 32 2296.83616997626 13 648.584509266648 23 -648.584509266648 33 2296.83616997626 70 1 0 3DFACE 8 body_half_inside 10 762.654700553784 20 -509.589579018778 30 2296.83616997626 11 623.96678219149 21 -623.966782191491 31 2355.16675535807 12 733.707315899088 22 -490.247554968877 32 2355.16675535807 13 733.707315899088 23 -490.247554968877 33 2355.16675535807 70 1 0 3DFACE 8 body_half_inside 10 594.604481158485 20 -594.604481158485 30 2408.9276400213 11 733.707315899088 21 -490.247554968877 31 2355.16675535807 12 623.96678219149 22 -623.966782191491 32 2355.16675535807 13 623.96678219149 23 -623.966782191491 33 2355.16675535807 70 1 0 3DFACE 8 body_half_inside 10 733.707315899088 20 -490.247554968877 30 2355.16675535807 11 594.604481158485 21 -594.604481158485 31 2408.9276400213 12 699.180902483483 22 -467.1777430806 32 2408.9276400213 13 699.180902483483 23 -467.1777430806 33 2408.9276400213 70 1 0 3DFACE 8 body_half_inside 10 528.527588401294 20 -528.527588401294 30 2549.0746800213 11 621.482696406623 21 -415.26146157539 31 2408.9276400213 12 528.527588401294 22 -528.527588401294 32 2408.9276400213 13 528.527588401294 23 -528.527588401294 33 2408.9276400213 70 1 0 3DFACE 8 body_half_inside 10 621.482696406623 20 -415.26146157539 30 2408.9276400213 11 528.527588401294 21 -528.527588401294 31 2549.0746800213 12 621.482696406622 22 -415.26146157539 32 2549.0746800213 13 621.482696406622 23 -415.26146157539 33 2549.0746800213 70 1 0 3DFACE 8 body_half_inside 10 494.478949733692 20 -494.478949733692 30 628.271001705821 11 541.006514010434 21 -361.48899563696 31 587.016306884026 12 460.088220979597 22 -460.088220979597 32 587.016306884026 13 460.088220979597 23 -460.088220979597 33 587.016306884026 70 1 0 3DFACE 8 body_half_inside 10 541.006514010434 20 -361.48899563696 30 587.016306884026 11 494.478949733692 21 -494.478949733692 31 628.271001705821 12 581.445732901797 22 -388.509617834311 32 628.271001705821 13 581.445732901797 23 -388.509617834311 33 628.271001705821 70 1 0 3DFACE 8 body_half_inside 10 698.564739508658 20 -289.354989300114 30 741.194313252463 11 611.383516446667 21 -408.513405265645 31 680.911023534629 12 628.691655879276 22 -420.078334296643 32 741.194313252463 13 628.691655879276 23 -420.078334296643 33 741.194313252463 70 1 0 3DFACE 8 body_half_inside 10 611.383516446667 20 -408.513405265645 30 680.911023534629 11 698.564739508658 21 -289.354989300114 31 741.194313252463 12 679.332965393237 22 -281.388927633011 32 680.911023534629 13 679.332965393237 23 -281.388927633011 33 680.911023534629 70 1 0 3DFACE 8 body_half_inside 10 702.396062011173 20 -290.941975042481 30 804.835469255871 11 628.691655879276 21 -420.078334296643 31 741.194313252463 12 632.139755034707 22 -422.38228049373 32 804.835469255871 13 632.139755034707 23 -422.38228049373 33 804.835469255871 70 1 0 3DFACE 8 body_half_inside 10 628.691655879276 20 -420.078334296643 30 741.194313252463 11 702.396062011173 21 -290.941975042481 31 804.835469255871 12 698.564739508658 22 -289.354989300114 32 741.194313252463 13 698.564739508658 23 -289.354989300114 33 741.194313252463 70 1 0 3DFACE 8 body_half_inside 10 621.482696406622 20 -415.26146157539 30 867.310386884026 11 702.396062011173 21 -290.941975042481 31 804.835469255871 12 632.139755034707 22 -422.38228049373 32 804.835469255871 13 632.139755034707 23 -422.38228049373 33 804.835469255871 70 1 0 3DFACE 8 body_half_inside 10 702.396062011173 20 -290.941975042481 30 804.835469255871 11 621.482696406622 21 -415.26146157539 31 867.310386884026 12 690.554572920556 22 -286.037069662455 32 867.310386884026 13 690.554572920556 23 -286.037069662455 33 867.310386884026 70 1 0 3DFACE 8 body_half_inside 10 543.797359730523 20 -363.353779128852 30 1474.6140400213 11 690.554572920556 21 -286.037069662455 31 1287.75132002131 12 621.482696406623 22 -415.26146157539 32 1287.75132002131 13 621.482696406623 23 -415.26146157539 33 1287.75132002131 70 1 0 3DFACE 8 body_half_inside 10 690.554572920556 20 -286.037069662455 30 1287.75132002131 11 543.797359730523 21 -363.353779128852 31 1474.6140400213 12 604.235251721863 22 -250.282436127116 32 1474.6140400213 13 604.235251721863 23 -250.282436127116 33 1474.6140400213 70 1 0 3DFACE 8 body_half_inside 10 431.596609324475 20 -178.77316905644 30 1100.8886000213 11 621.482696406622 21 -415.26146157539 31 867.310386884026 12 388.426686378325 22 -259.538414235776 32 1100.8886000213 13 388.426686378325 23 -259.538414235776 33 1100.8886000213 70 1 0 3DFACE 8 body_half_inside 10 621.482696406622 20 -415.26146157539 30 867.310386884026 11 431.596609324475 21 -178.77316905644 31 1100.8886000213 12 690.554572920556 22 -286.037069662455 32 867.310386884026 13 690.554572920556 23 -286.037069662455 33 867.310386884026 70 1 0 3DFACE 8 body_half_inside 10 504.954691392474 20 -337.399937905583 30 1287.75132002131 11 647.39491232121 21 -268.159752894786 31 1100.8886000213 12 582.640028068573 22 -389.307620352121 32 1100.8886000213 13 582.640028068573 23 -389.307620352121 33 1100.8886000213 70 1 0 3DFACE 8 body_half_inside 10 647.39491232121 20 -268.159752894786 30 1100.8886000213 11 504.954691392474 21 -337.399937905583 31 1287.75132002131 12 561.075591122516 22 -232.405119359447 32 1287.75132002131 13 561.075591122516 23 -232.405119359447 33 1287.75132002131 70 1 0 3DFACE 8 body_half_inside 10 -946.311642114328 20 -188.233089011893 30 1900.55285125842 11 -976.970215709362 21 -1.80477854883065e-13 31 1967.39330582966 12 -958.198006960111 22 -190.597433982906 32 1967.39330582966 13 -958.198006960111 23 -190.597433982906 33 1967.39330582966 70 1 0 3DFACE 8 body_half_inside 10 -976.970215709362 20 -1.80477854883065e-13 30 1967.39330582966 11 -946.311642114328 21 -188.233089011893 31 1900.55285125842 12 -964.850983209364 22 -1.80477854883065e-13 32 1900.55285125842 13 -964.850983209364 23 -1.80477854883065e-13 33 1900.55285125842 70 1 0 3DFACE 8 body_half_inside 10 582.640028068573 20 -389.307620352121 30 1661.47676002131 11 733.714233519903 21 -303.914386430124 31 1474.6140400213 12 660.325364744673 22 -441.21530279866 32 1474.6140400213 13 660.325364744673 23 -441.21530279866 33 1474.6140400213 70 1 0 3DFACE 8 body_half_inside 10 733.714233519903 20 -303.914386430124 30 1474.6140400213 11 582.640028068573 21 -389.307620352121 31 1661.47676002131 12 647.39491232121 22 -268.159752894786 32 1661.47676002131 13 647.39491232121 23 -268.159752894786 33 1661.47676002131 70 1 0 3DFACE 8 body_half_inside 10 815.251888924487 20 -337.688389142806 30 1715.23764468454 11 699.180902483483 21 -467.1777430806 31 1661.47676002131 12 733.707315899088 22 -490.247554968878 32 1715.23764468454 13 733.707315899088 23 -490.247554968878 33 1715.23764468454 70 1 0 3DFACE 8 body_half_inside 10 699.180902483483 20 -467.1777430806 30 1661.47676002131 11 815.251888924487 21 -337.688389142806 31 1715.23764468454 12 776.88819383121 22 -321.797626332425 32 1661.47676002131 13 776.88819383121 23 -321.797626332425 33 1661.47676002131 70 1 0 3DFACE 8 body_half_inside 10 847.416499400322 20 -351.011407030345 30 1773.56823006635 11 733.707315899088 21 -490.247554968878 31 1715.23764468454 12 762.654700553784 22 -509.589579018778 32 1773.56823006635 13 762.654700553784 23 -509.589579018778 33 1773.56823006635 70 1 0 3DFACE 8 body_half_inside 10 733.707315899088 20 -490.247554968878 30 1715.23764468454 11 847.416499400322 21 -351.011407030345 31 1773.56823006635 12 815.251888924487 22 -337.688389142806 32 1715.23764468454 13 815.251888924487 23 -337.688389142806 33 1715.23764468454 70 1 0 3DFACE 8 body_half_inside 10 872.922653615349 20 -361.576402030189 30 1835.6354447734 11 762.654700553784 21 -509.589579018778 31 1773.56823006635 12 785.609632890959 22 -524.927574441361 32 1835.6354447734 13 785.609632890959 23 -524.927574441361 33 1835.6354447734 70 1 0 3DFACE 8 body_half_inside 10 762.654700553784 20 -509.589579018778 30 1773.56823006635 11 872.922653615349 21 -361.576402030189 31 1835.6354447734 12 847.416499400322 22 -351.011407030345 32 1773.56823006635 13 847.416499400322 23 -351.011407030345 33 1773.56823006635 70 1 0 3DFACE 8 body_half_inside 10 891.406075310522 20 -369.232485975391 30 1900.55285125842 11 785.609632890959 21 -524.927574441361 31 1835.6354447734 12 802.244272938819 22 -536.042485570819 32 1900.55285125842 13 802.244272938819 23 -536.042485570819 33 1900.55285125842 70 1 0 3DFACE 8 body_half_inside 10 785.609632890959 20 -524.927574441361 30 1835.6354447734 11 891.406075310522 21 -369.232485975391 31 1900.55285125842 12 872.922653615349 22 -361.576402030189 32 1835.6354447734 13 872.922653615349 23 -361.576402030189 33 1835.6354447734 70 1 0 3DFACE 8 body_half_inside 10 906.35287591729 20 -375.423653500801 30 2035.2022000213 11 812.321046486997 21 -542.775570394861 31 1967.39330582966 12 815.696038096871 22 -545.030667691736 32 2035.2022000213 13 815.696038096871 23 -545.030667691736 33 2035.2022000213 70 1 0 3DFACE 8 body_half_inside 10 812.321046486997 20 -542.775570394861 30 1967.39330582966 11 906.35287591729 21 -375.423653500801 31 2035.2022000213 12 902.602786167016 22 -373.87031546612 32 1967.39330582966 13 902.602786167016 23 -373.87031546612 33 1967.39330582966 70 1 0 3DFACE 8 body_half_inside 10 902.602786167016 20 -373.87031546612 30 1967.39330582966 11 802.244272938819 21 -536.042485570819 31 1900.55285125842 12 812.321046486997 22 -542.775570394861 32 1967.39330582966 13 812.321046486997 23 -542.775570394861 33 1967.39330582966 70 1 0 3DFACE 8 body_half_inside 10 802.244272938819 20 -536.042485570819 30 1900.55285125842 11 902.602786167016 21 -373.87031546612 31 1967.39330582966 12 891.406075310522 22 -369.232485975391 32 1900.55285125842 13 891.406075310522 23 -369.232485975391 33 1900.55285125842 70 1 0 3DFACE 8 body_half_inside 10 812.321046486996 20 -542.775570394861 30 2103.01109421295 11 906.35287591729 21 -375.423653500801 31 2035.2022000213 12 815.696038096871 22 -545.030667691736 32 2035.2022000213 13 815.696038096871 23 -545.030667691736 33 2035.2022000213 70 1 0 3DFACE 8 body_half_inside 10 906.35287591729 20 -375.423653500801 30 2035.2022000213 11 812.321046486996 21 -542.775570394861 31 2103.01109421295 12 902.602786167016 22 -373.87031546612 32 2103.01109421295 13 902.602786167016 23 -373.87031546612 33 2103.01109421295 70 1 0 3DFACE 8 body_half_inside 10 -926.689746301964 20 -184.330051263378 30 1835.6354447734 11 -964.850983209364 21 -1.80477854883065e-13 31 1900.55285125842 12 -946.311642114328 22 -188.233089011893 32 1900.55285125842 13 -946.311642114328 23 -188.233089011893 33 1900.55285125842 70 1 0 3DFACE 8 body_half_inside 10 -964.850983209364 20 -1.80477854883065e-13 30 1900.55285125842 11 -926.689746301964 21 -184.330051263378 31 1835.6354447734 12 -944.844671731792 22 0.0 32 1835.6354447734 13 -944.844671731792 23 0.0 33 1835.6354447734 70 1 0 3DFACE 8 body_half_inside 10 802.244272938819 20 -536.042485570818 30 2169.85154878419 11 902.602786167016 21 -373.87031546612 31 2103.01109421295 12 812.321046486996 22 -542.775570394861 32 2103.01109421295 13 812.321046486996 23 -542.775570394861 33 2103.01109421295 70 1 0 3DFACE 8 body_half_inside 10 902.602786167016 20 -373.87031546612 30 2103.01109421295 11 802.244272938819 21 -536.042485570818 31 2169.85154878419 12 891.406075310522 22 -369.232485975391 32 2169.85154878419 13 891.406075310522 23 -369.232485975391 33 2169.85154878419 70 1 0 3DFACE 8 body_half_inside 10 785.609632890959 20 -524.927574441361 30 2234.76895526921 11 891.406075310522 21 -369.232485975391 31 2169.85154878419 12 802.244272938819 22 -536.042485570818 32 2169.85154878419 13 802.244272938819 23 -536.042485570818 33 2169.85154878419 70 1 0 3DFACE 8 body_half_inside 10 891.406075310522 20 -369.232485975391 30 2169.85154878419 11 785.609632890959 21 -524.927574441361 31 2234.76895526921 12 872.922653615349 22 -361.576402030189 32 2234.76895526921 13 872.922653615349 23 -361.576402030189 33 2234.76895526921 70 1 0 3DFACE 8 body_half_inside 10 -519.938941830878 20 -519.938941830878 30 680.911023534629 11 -388.509617834311 21 -581.445732901797 31 628.271001705821 12 -494.478949733692 22 -494.478949733692 32 628.271001705821 13 -494.478949733692 23 -494.478949733692 33 628.271001705821 70 1 0 3DFACE 8 body_half_inside 10 -388.509617834311 20 -581.445732901797 30 628.271001705821 11 -519.938941830878 21 -519.938941830878 31 680.911023534629 12 -408.513405265646 22 -611.383516446667 32 680.911023534629 13 -408.513405265646 23 -611.383516446667 33 680.911023534629 70 1 0 3DFACE 8 body_half_inside 10 762.654700553784 20 -509.589579018778 30 2296.83616997626 11 872.922653615349 21 -361.576402030189 31 2234.76895526921 12 785.609632890959 22 -524.927574441361 32 2234.76895526921 13 785.609632890959 23 -524.927574441361 33 2234.76895526921 70 1 0 3DFACE 8 body_half_inside 10 872.922653615349 20 -361.576402030189 30 2234.76895526921 11 762.654700553784 21 -509.589579018778 31 2296.83616997626 12 847.416499400322 22 -351.011407030345 32 2296.83616997626 13 847.416499400322 23 -351.011407030345 33 2296.83616997626 70 1 0 3DFACE 8 body_half_inside 10 733.707315899088 20 -490.247554968877 30 2355.16675535807 11 847.416499400322 21 -351.011407030345 31 2296.83616997626 12 762.654700553784 22 -509.589579018778 32 2296.83616997626 13 762.654700553784 23 -509.589579018778 33 2296.83616997626 70 1 0 3DFACE 8 body_half_inside 10 847.416499400322 20 -351.011407030345 30 2296.83616997626 11 733.707315899088 21 -490.247554968877 31 2355.16675535807 12 815.251888924486 22 -337.688389142806 32 2355.16675535807 13 815.251888924486 23 -337.688389142806 33 2355.16675535807 70 1 0 3DFACE 8 body_half_inside 10 699.180902483483 20 -467.1777430806 30 2408.9276400213 11 815.251888924486 21 -337.688389142806 31 2355.16675535807 12 733.707315899088 22 -490.247554968877 32 2355.16675535807 13 733.707315899088 23 -490.247554968877 33 2355.16675535807 70 1 0 3DFACE 8 body_half_inside 10 815.251888924486 20 -337.688389142806 30 2355.16675535807 11 699.180902483483 21 -467.1777430806 31 2408.9276400213 12 776.88819383121 22 -321.797626332425 32 2408.9276400213 13 776.88819383121 23 -321.797626332425 33 2408.9276400213 70 1 0 3DFACE 8 body_half_inside 10 621.482696406622 20 -415.26146157539 30 2549.0746800213 11 690.554572920556 21 -286.037069662455 31 2408.9276400213 12 621.482696406623 22 -415.26146157539 32 2408.9276400213 13 621.482696406623 23 -415.26146157539 33 2408.9276400213 70 1 0 3DFACE 8 body_half_inside 10 690.554572920556 20 -286.037069662455 30 2408.9276400213 11 621.482696406622 21 -415.26146157539 31 2549.0746800213 12 690.554572920556 22 -286.037069662455 32 2549.0746800213 13 690.554572920556 23 -286.037069662455 33 2549.0746800213 70 1 0 3DFACE 8 body_half_inside 10 581.445732901797 20 -388.509617834311 30 628.271001705821 11 601.1342301078 21 -248.997950917359 31 587.016306884026 12 541.006514010434 22 -361.48899563696 32 587.016306884026 13 541.006514010434 23 -361.48899563696 33 587.016306884026 70 1 0 3DFACE 8 body_half_inside 10 601.1342301078 20 -248.997950917359 30 587.016306884026 11 581.445732901797 21 -388.509617834311 31 628.271001705821 12 646.067882633009 22 -267.610079200261 32 628.271001705821 13 646.067882633009 23 -267.610079200261 33 628.271001705821 70 1 0 3DFACE 8 body_half_inside 10 721.176029454062 20 -143.45083131617 30 680.911023534629 11 646.067882633009 21 -267.610079200261 31 628.271001705821 12 679.332965393237 22 -281.388927633011 32 680.911023534629 13 679.332965393237 23 -281.388927633011 33 680.911023534629 70 1 0 3DFACE 8 body_half_inside 10 646.067882633009 20 -267.610079200261 30 628.271001705821 11 721.176029454062 21 -143.45083131617 31 680.911023534629 12 685.862005953678 22 -136.426435300007 32 628.271001705821 13 685.862005953678 23 -136.426435300007 33 628.271001705821 70 1 0 3DFACE 8 body_half_inside 10 741.592371958341 20 -147.51189433693 30 741.194313252463 11 679.332965393237 21 -281.388927633011 31 680.911023534629 12 698.564739508658 22 -289.354989300114 32 741.194313252463 13 698.564739508658 23 -289.354989300114 33 741.194313252463 70 1 0 3DFACE 8 body_half_inside 10 679.332965393237 20 -281.388927633011 30 680.911023534629 11 741.592371958341 21 -147.51189433693 31 741.194313252463 12 721.176029454062 22 -143.45083131617 32 680.911023534629 13 721.176029454062 23 -143.45083131617 33 680.911023534629 70 1 0 3DFACE 8 body_half_inside 10 745.659682232799 20 -148.32093265249 30 804.835469255871 11 698.564739508658 21 -289.354989300114 31 741.194313252463 12 702.396062011173 22 -290.941975042481 32 804.835469255871 13 702.396062011173 23 -290.941975042481 33 804.835469255871 70 1 0 3DFACE 8 body_half_inside 10 698.564739508658 20 -289.354989300114 30 741.194313252463 11 745.659682232799 21 -148.32093265249 31 804.835469255871 12 741.592371958341 22 -147.51189433693 32 741.194313252463 13 741.592371958341 23 -147.51189433693 33 741.194313252463 70 1 0 3DFACE 8 body_half_inside 10 690.554572920556 20 -286.037069662455 30 867.310386884026 11 745.659682232799 21 -148.32093265249 31 804.835469255871 12 702.396062011173 22 -290.941975042481 32 804.835469255871 13 702.396062011173 23 -290.941975042481 33 804.835469255871 70 1 0 3DFACE 8 body_half_inside 10 745.659682232799 20 -148.32093265249 30 804.835469255871 11 690.554572920556 21 -286.037069662455 31 867.310386884026 12 733.088824464618 22 -145.820433573828 32 867.310386884026 13 733.088824464618 23 -145.820433573828 33 867.310386884026 70 1 0 3DFACE 8 body_half_inside 10 458.180516616454 20 -91.1377712474138 30 1100.8886000213 11 690.554572920556 21 -286.037069662455 31 867.310386884026 12 431.596609324475 22 -178.77316905644 32 1100.8886000213 13 431.596609324475 23 -178.77316905644 33 1100.8886000213 70 1 0 3DFACE 8 body_half_inside 10 690.554572920556 20 -286.037069662455 30 867.310386884026 11 458.180516616454 21 -91.1377712474138 31 1100.8886000213 12 733.088824464618 22 -145.820433573828 32 867.310386884026 13 733.088824464618 23 -145.820433573828 33 867.310386884026 70 1 0 3DFACE 8 body_half_inside 10 561.075591122516 20 -232.405119359447 30 1287.75132002131 11 687.270773156591 21 -136.706656519426 31 1100.8886000213 12 647.39491232121 22 -268.159752894786 32 1100.8886000213 13 647.39491232121 23 -268.159752894786 33 1100.8886000213 70 1 0 3DFACE 8 body_half_inside 10 687.270773156591 20 -136.706656519426 30 1100.8886000213 11 561.075591122516 21 -232.405119359447 31 1287.75132002131 12 595.634670540536 22 -118.479102410621 32 1287.75132002131 13 595.634670540536 23 -118.479102410621 33 1287.75132002131 70 1 0 3DFACE 8 body_half_inside 10 604.235251721863 20 -250.282436127116 30 1474.6140400213 11 733.088824464619 21 -145.820433573828 31 1287.75132002131 12 690.554572920556 22 -286.037069662455 32 1287.75132002131 13 690.554572920556 23 -286.037069662455 33 1287.75132002131 70 1 0 3DFACE 8 body_half_inside 10 733.088824464619 20 -145.820433573828 30 1287.75132002131 11 604.235251721863 21 -250.282436127116 31 1474.6140400213 12 641.452721848564 22 -127.592879465023 32 1474.6140400213 13 641.452721848564 23 -127.592879465023 33 1474.6140400213 70 1 0 3DFACE 8 body_half_inside 10 647.39491232121 20 -268.159752894786 30 1661.47676002131 11 778.906875772646 21 -154.934210628231 31 1474.6140400213 12 733.714233519903 22 -303.914386430124 32 1474.6140400213 13 733.714233519903 23 -303.914386430124 33 1474.6140400213 70 1 0 3DFACE 8 body_half_inside 10 778.906875772646 20 -154.934210628231 30 1474.6140400213 11 647.39491232121 21 -268.159752894786 31 1661.47676002131 12 687.270773156591 22 -136.706656519426 32 1661.47676002131 13 687.270773156591 23 -136.706656519426 33 1661.47676002131 70 1 0 3DFACE 8 body_half_inside 10 865.466789057043 20 -172.152047899808 30 1715.23764468454 11 776.88819383121 21 -321.797626332425 31 1661.47676002131 12 815.251888924487 22 -337.688389142806 32 1715.23764468454 13 815.251888924487 23 -337.688389142806 33 1715.23764468454 70 1 0 3DFACE 8 body_half_inside 10 776.88819383121 20 -321.797626332425 30 1661.47676002131 11 865.466789057043 21 -172.152047899808 31 1715.23764468454 12 824.740107573921 22 -164.051007270483 32 1661.47676002131 13 824.740107573921 23 -164.051007270483 33 1661.47676002131 70 1 0 3DFACE 8 body_half_inside 10 899.612557411552 20 -178.944063519201 30 1773.56823006635 11 815.251888924487 21 -337.688389142806 31 1715.23764468454 12 847.416499400322 22 -351.011407030345 32 1773.56823006635 13 847.416499400322 23 -351.011407030345 33 1773.56823006635 70 1 0 3DFACE 8 body_half_inside 10 815.251888924487 20 -337.688389142806 30 1715.23764468454 11 899.612557411552 21 -178.944063519201 31 1773.56823006635 12 865.466789057043 22 -172.152047899808 32 1715.23764468454 13 865.466789057043 23 -172.152047899808 33 1715.23764468454 70 1 0 3DFACE 8 body_half_inside 10 926.689746301964 20 -184.330051263379 30 1835.6354447734 11 847.416499400322 21 -351.011407030345 31 1773.56823006635 12 872.922653615349 22 -361.576402030189 32 1835.6354447734 13 872.922653615349 23 -361.576402030189 33 1835.6354447734 70 1 0 3DFACE 8 body_half_inside 10 847.416499400322 20 -351.011407030345 30 1773.56823006635 11 926.689746301964 21 -184.330051263379 31 1835.6354447734 12 899.612557411552 22 -178.944063519201 32 1773.56823006635 13 899.612557411552 23 -178.944063519201 33 1773.56823006635 70 1 0 3DFACE 8 body_half_inside 10 946.311642114328 20 -188.233089011893 30 1900.55285125842 11 872.922653615349 21 -361.576402030189 31 1835.6354447734 12 891.406075310522 22 -369.232485975391 32 1900.55285125842 13 891.406075310522 23 -369.232485975391 33 1900.55285125842 70 1 0 3DFACE 8 body_half_inside 10 872.922653615349 20 -361.576402030189 30 1835.6354447734 11 946.311642114328 21 -188.233089011893 31 1900.55285125842 12 926.689746301964 22 -184.330051263379 32 1835.6354447734 13 926.689746301964 23 -184.330051263379 33 1835.6354447734 70 1 0 3DFACE 8 body_half_inside 10 958.198006960111 20 -190.597433982906 30 1967.39330582966 11 891.406075310522 21 -369.232485975391 31 1900.55285125842 12 902.602786167016 22 -373.87031546612 32 1967.39330582966 13 902.602786167016 23 -373.87031546612 33 1967.39330582966 70 1 0 3DFACE 8 body_half_inside 10 891.406075310522 20 -369.232485975391 30 1900.55285125842 11 958.198006960111 21 -190.597433982906 31 1967.39330582966 12 946.311642114328 22 -188.233089011893 32 1900.55285125842 13 946.311642114328 23 -188.233089011893 33 1900.55285125842 70 1 0 3DFACE 8 body_half_inside 10 962.179081004756 20 -191.38931884584 30 2035.2022000213 11 902.602786167016 21 -373.87031546612 31 1967.39330582966 12 906.35287591729 22 -375.423653500801 32 2035.2022000213 13 906.35287591729 23 -375.423653500801 33 2035.2022000213 70 1 0 3DFACE 8 body_half_inside 10 902.602786167016 20 -373.87031546612 30 1967.39330582966 11 962.179081004756 21 -191.38931884584 31 2035.2022000213 12 958.198006960111 22 -190.597433982906 32 1967.39330582966 13 958.198006960111 23 -190.597433982906 33 1967.39330582966 70 1 0 3DFACE 8 body_half_inside 10 902.602786167016 20 -373.87031546612 30 2103.01109421295 11 962.179081004756 21 -191.38931884584 31 2035.2022000213 12 906.35287591729 22 -375.423653500801 32 2035.2022000213 13 906.35287591729 23 -375.423653500801 33 2035.2022000213 70 1 0 3DFACE 8 body_half_inside 10 962.179081004756 20 -191.38931884584 30 2035.2022000213 11 902.602786167016 21 -373.87031546612 31 2103.01109421295 12 958.19800696011 22 -190.597433982906 32 2103.01109421295 13 958.19800696011 23 -190.597433982906 33 2103.01109421295 70 1 0 3DFACE 8 body_half_inside 10 891.406075310522 20 -369.232485975391 30 2169.85154878419 11 958.19800696011 21 -190.597433982906 31 2103.01109421295 12 902.602786167016 22 -373.87031546612 32 2103.01109421295 13 902.602786167016 23 -373.87031546612 33 2103.01109421295 70 1 0 3DFACE 8 body_half_inside 10 958.19800696011 20 -190.597433982906 30 2103.01109421295 11 891.406075310522 21 -369.232485975391 31 2169.85154878419 12 946.311642114328 22 -188.233089011893 32 2169.85154878419 13 946.311642114328 23 -188.233089011893 33 2169.85154878419 70 1 0 3DFACE 8 body_half_inside 10 872.922653615349 20 -361.576402030189 30 2234.76895526921 11 946.311642114328 21 -188.233089011893 31 2169.85154878419 12 891.406075310522 22 -369.232485975391 32 2169.85154878419 13 891.406075310522 23 -369.232485975391 33 2169.85154878419 70 1 0 3DFACE 8 body_half_inside 10 946.311642114328 20 -188.233089011893 30 2169.85154878419 11 872.922653615349 21 -361.576402030189 31 2234.76895526921 12 926.689746301964 22 -184.330051263379 32 2234.76895526921 13 926.689746301964 23 -184.330051263379 33 2234.76895526921 70 1 0 3DFACE 8 body_half_inside 10 776.88819383121 20 -321.797626332425 30 2408.9276400213 11 865.466789057043 21 -172.152047899808 31 2355.16675535807 12 815.251888924486 22 -337.688389142806 32 2355.16675535807 13 815.251888924486 23 -337.688389142806 33 2355.16675535807 70 1 0 3DFACE 8 body_half_inside 10 865.466789057043 20 -172.152047899808 30 2355.16675535807 11 776.88819383121 21 -321.797626332425 31 2408.9276400213 12 824.740107573921 22 -164.051007270483 32 2408.9276400213 13 824.740107573921 23 -164.051007270483 33 2408.9276400213 70 1 0 3DFACE 8 body_half_inside 10 847.416499400322 20 -351.011407030345 30 2296.83616997626 11 926.689746301964 21 -184.330051263379 31 2234.76895526921 12 872.922653615349 22 -361.576402030189 32 2234.76895526921 13 872.922653615349 23 -361.576402030189 33 2234.76895526921 70 1 0 3DFACE 8 body_half_inside 10 926.689746301964 20 -184.330051263379 30 2234.76895526921 11 847.416499400322 21 -351.011407030345 31 2296.83616997626 12 899.612557411552 22 -178.944063519201 32 2296.83616997626 13 899.612557411552 23 -178.944063519201 33 2296.83616997626 70 1 0 3DFACE 8 body_half_inside 10 815.251888924486 20 -337.688389142806 30 2355.16675535807 11 899.612557411552 21 -178.944063519201 31 2296.83616997626 12 847.416499400322 22 -351.011407030345 32 2296.83616997626 13 847.416499400322 23 -351.011407030345 33 2296.83616997626 70 1 0 3DFACE 8 body_half_inside 10 899.612557411552 20 -178.944063519201 30 2296.83616997626 11 815.251888924486 21 -337.688389142806 31 2355.16675535807 12 865.466789057043 22 -172.152047899808 32 2355.16675535807 13 865.466789057043 23 -172.152047899808 33 2355.16675535807 70 1 0 3DFACE 8 body_half_inside 10 690.554572920556 20 -286.037069662455 30 2549.0746800213 11 733.088824464619 21 -145.820433573828 31 2408.9276400213 12 690.554572920556 22 -286.037069662455 32 2408.9276400213 13 690.554572920556 23 -286.037069662455 33 2408.9276400213 70 1 0 3DFACE 8 body_half_inside 10 733.088824464619 20 -145.820433573828 30 2408.9276400213 11 690.554572920556 21 -286.037069662455 31 2549.0746800213 12 733.088824464618 22 -145.820433573828 32 2549.0746800213 13 733.088824464618 23 -145.820433573828 33 2549.0746800213 70 1 0 3DFACE 8 body_half_inside 10 -700.735203605456 20 0.0 30 1100.8886000213 11 -595.634670540536 21 -118.479102410621 31 1287.75132002131 12 -687.270773156591 22 -136.706656519425 32 1100.8886000213 13 -687.270773156591 23 -136.706656519425 33 1100.8886000213 70 1 0 3DFACE 8 body_half_inside 10 -595.634670540536 20 -118.479102410621 30 1287.75132002131 11 -700.735203605456 21 0.0 31 1100.8886000213 12 -607.303843605455 22 0.0 32 1287.75132002131 13 -607.303843605455 23 0.0 33 1287.75132002131 70 1 0 3DFACE 8 body_half_inside 10 -646.067882633009 20 -267.610079200261 30 628.271001705821 11 -721.176029454062 21 -143.450831316169 31 680.911023534629 12 -679.332965393238 22 -281.388927633011 32 680.911023534629 13 -679.332965393238 23 -281.388927633011 33 680.911023534629 70 1 0 3DFACE 8 body_half_inside 10 -721.176029454062 20 -143.450831316169 30 680.911023534629 11 -646.067882633009 21 -267.610079200261 31 628.271001705821 12 -685.862005953678 22 -136.426435300007 32 628.271001705821 13 -685.862005953678 23 -136.426435300007 33 628.271001705821 70 1 0 3DFACE 8 body_half_inside 10 357.792969218307 20 -863.788638808576 30 1813.40854010679 11 509.589579018778 21 -762.654700553784 31 1773.56823006635 12 351.011407030345 22 -847.416499400322 32 1773.56823006635 13 351.011407030345 23 -847.416499400322 33 1773.56823006635 70 1 0 3DFACE 8 body_half_inside 10 509.589579018778 20 -762.654700553784 30 1773.56823006635 11 357.792969218307 21 -863.788638808576 31 1813.40854010679 12 395.941831606783 22 -839.735342877931 32 1806.11206435201 13 395.941831606783 23 -839.735342877931 33 1806.11206435201 70 13 0 3DFACE 8 body_half_inside 10 509.589579018778 20 -762.654700553784 30 1773.56823006635 11 395.941831606783 21 -839.735342877931 31 1806.11206435201 12 476.980677127978 22 -794.166464272834 32 1801.6239424642 13 476.980677127978 23 -794.166464272834 33 1801.6239424642 70 13 0 3DFACE 8 body_half_inside 10 517.019026944331 20 -773.773655132591 30 1803.63246772228 11 509.589579018778 21 -762.654700553784 31 1773.56823006635 12 476.980677127978 22 -794.166464272834 32 1801.6239424642 13 476.980677127978 23 -794.166464272834 33 1801.6239424642 70 2 0 3DFACE 8 body_half_inside 10 517.019026944331 20 -773.773655132591 30 1803.63246772228 11 648.584509266648 21 -648.584509266648 31 1773.56823006635 12 509.589579018778 22 -762.654700553784 32 1773.56823006635 13 509.589579018778 23 -762.654700553784 33 1773.56823006635 70 1 0 3DFACE 8 body_half_inside 10 648.584509266648 20 -648.584509266648 30 1773.56823006635 11 517.019026944331 21 -773.773655132591 31 1803.63246772228 12 549.426368572047 22 -748.597588593672 32 1806.11210277493 13 549.426368572047 23 -748.597588593672 33 1806.11210277493 70 13 0 3DFACE 8 body_half_inside 10 648.584509266648 20 -648.584509266648 30 1773.56823006635 11 549.426368572047 21 -748.597588593672 31 1806.11210277493 12 612.093113289132 22 -704.779901967179 32 1819.40406801073 13 612.093113289132 23 -704.779901967179 33 1819.40406801073 70 13 0 3DFACE 8 body_half_inside 10 648.584509266648 20 -648.584509266648 30 1773.56823006635 11 612.093113289132 21 -704.779901967179 31 1819.40406801073 12 668.106074549527 22 -668.106074549528 32 1835.6354447734 13 668.106074549527 23 -668.106074549528 33 1835.6354447734 70 3 0 3DFACE 8 body_half_inside 10 668.106074549527 20 -668.106074549528 30 1835.6354447734 11 612.093113289132 21 -704.779901967179 31 1819.40406801073 12 660.420878380816 22 -674.413152048547 32 1835.6354447734 13 660.420878380816 23 -674.413152048547 33 1835.6354447734 70 1 0 3DFACE 8 body_half_inside 10 184.330051263378 20 -926.689746301964 30 1835.6354447734 11 351.011407030345 21 -847.416499400322 31 1773.56823006635 12 178.9440635192 22 -899.612557411553 32 1773.56823006635 13 178.9440635192 23 -899.612557411553 33 1773.56823006635 70 1 0 3DFACE 8 body_half_inside 10 351.011407030345 20 -847.416499400322 30 1773.56823006635 11 184.330051263378 21 -926.689746301964 31 1835.6354447734 12 301.781055330838 22 -883.553038965158 32 1819.40399142549 13 301.781055330838 23 -883.553038965158 33 1819.40399142549 70 15 0 3DFACE 8 body_half_inside 10 351.011407030345 20 -847.416499400322 30 1773.56823006635 11 301.781055330838 21 -883.553038965158 31 1819.40399142549 12 357.792969218307 22 -863.788638808576 32 1813.40854010679 13 357.792969218307 23 -863.788638808576 33 1813.40854010679 70 1 0 3DFACE 8 body_half_inside 10 301.781055330838 20 -883.553038965158 30 1819.40399142549 11 184.330051263378 21 -926.689746301964 31 1835.6354447734 12 226.426278474808 22 -913.919995384996 32 1835.6354447734 13 226.426278474808 23 -913.919995384996 33 1835.6354447734 70 1 0 3DFACE 8 body_half_inside 10 184.330051263378 20 -926.689746301964 30 1835.6354447734 11 199.0652044353 21 -923.935662922352 31 1840.9889225062 12 226.426278474808 22 -913.919995384996 32 1835.6354447734 13 226.426278474808 23 -913.919995384996 33 1835.6354447734 70 1 0 3DFACE 8 body_half_inside 10 199.0652044353 20 -923.935662922352 30 1840.9889225062 11 184.330051263378 21 -926.689746301964 31 1835.6354447734 12 184.938820049334 22 -929.750233661175 32 1845.76081205901 13 184.938820049334 23 -929.750233661175 33 1845.76081205901 70 1 0 3DFACE 8 body_half_inside 10 0.0 20 -944.844671731792 30 1835.6354447734 11 104.493637398531 21 -940.355693033463 31 1854.46446481146 12 184.330051263378 22 -926.689746301964 32 1835.6354447734 13 184.330051263378 23 -926.689746301964 33 1835.6354447734 70 3 0 3DFACE 8 body_half_inside 10 104.493637398531 20 -940.355693033463 30 1854.46446481146 11 0.0 21 -944.844671731792 31 1835.6354447734 12 0.0 22 -964.850983209364 32 1900.55285125842 13 0.0 23 -964.850983209364 33 1900.55285125842 70 13 0 3DFACE 8 body_half_inside 10 184.330051263378 20 -926.689746301964 30 1835.6354447734 11 104.493637398531 21 -940.355693033463 31 1854.46446481146 12 184.938820049334 22 -929.750233661175 32 1845.76081205901 13 184.938820049334 23 -929.750233661175 33 1845.76081205901 70 1 0 3DFACE 8 body_half_inside 10 104.493637398531 20 -940.355693033463 30 1854.46446481146 11 0.0 21 -964.850983209364 31 1900.55285125842 12 104.493633203151 22 -954.559258633297 32 1900.55285125842 13 104.493633203151 23 -954.559258633297 33 1900.55285125842 70 1 0 3DFACE 8 body_half_inside 10 750.933323308422 20 -599.953184983341 30 1905.4331697133 11 802.244272938819 21 -536.042485570819 31 1900.55285125842 12 746.507157447799 22 -603.958357302731 32 1900.55285125842 13 746.507157447799 23 -603.958357302731 33 1900.55285125842 70 1 0 3DFACE 8 body_half_inside 10 802.244272938819 20 -536.042485570819 30 1900.55285125842 11 750.933323308422 21 -599.953184983341 31 1905.4331697133 12 778.074089358318 22 -578.368236816208 32 1945.81578372641 13 778.074089358318 23 -578.368236816208 33 1945.81578372641 70 13 0 3DFACE 8 body_half_inside 10 802.244272938819 20 -536.042485570819 30 1900.55285125842 11 778.074089358318 21 -578.368236816208 31 1945.81578372641 12 788.482625178071 22 -571.822770804239 32 1967.39330582966 13 788.482625178071 23 -571.822770804239 33 1967.39330582966 70 13 0 3DFACE 8 body_half_inside 10 802.244272938819 20 -536.042485570819 30 1900.55285125842 11 788.482625178071 21 -571.822770804239 31 1967.39330582966 12 812.321046486997 22 -542.775570394861 32 1967.39330582966 13 812.321046486997 23 -542.775570394861 33 1967.39330582966 70 1 0 3DFACE 8 body_half_inside 10 673.273866809931 20 -664.397292109118 30 1840.98903680986 11 668.106074549527 21 -668.106074549528 31 1835.6354447734 12 668.764073934129 22 -668.76407393413 32 1838.65494189703 13 668.764073934129 23 -668.76407393413 33 1838.65494189703 70 1 0 3DFACE 8 body_half_inside 10 668.106074549527 20 -668.106074549528 30 1835.6354447734 11 673.273866809931 21 -664.397292109118 31 1840.98903680986 12 785.609632890959 22 -524.927574441361 32 1835.6354447734 13 785.609632890959 23 -524.927574441361 33 1835.6354447734 70 3 0 3DFACE 8 body_half_inside 10 785.609632890959 20 -524.927574441361 30 1835.6354447734 11 673.273866809931 21 -664.397292109118 31 1840.98903680986 12 713.847499937789 22 -629.001642276081 32 1870.0375087198 13 713.847499937789 23 -629.001642276081 33 1870.0375087198 70 13 0 3DFACE 8 body_half_inside 10 785.609632890959 20 -524.927574441361 30 1835.6354447734 11 713.847499937789 21 -629.001642276081 31 1870.0375087198 12 746.507157447799 22 -603.958357302731 32 1900.55285125842 13 746.507157447799 23 -603.958357302731 33 1900.55285125842 70 13 0 3DFACE 8 body_half_inside 10 785.609632890959 20 -524.927574441361 30 1835.6354447734 11 746.507157447799 21 -603.958357302731 31 1900.55285125842 12 802.244272938819 22 -536.042485570819 32 1900.55285125842 13 802.244272938819 23 -536.042485570819 33 1900.55285125842 70 1 0 3DFACE 8 body_half_inside 10 668.764073934129 20 -668.76407393413 30 1838.65494189703 11 668.106074549527 21 -668.106074549528 31 1835.6354447734 12 660.420878380816 22 -674.413152048547 32 1835.6354447734 13 660.420878380816 23 -674.413152048547 33 1835.6354447734 70 0 0 3DFACE 8 body_half_inside 10 812.321046486996 20 -542.775570394861 30 2103.01109421295 11 795.733220134071 21 -565.076313257107 31 2080.77120383654 12 788.482669869741 22 -571.822716347281 32 2103.01109421295 13 788.482669869741 23 -571.822716347281 33 2103.01109421295 70 1 0 3DFACE 8 body_half_inside 10 795.733220134071 20 -565.076313257107 30 2080.77120383654 11 812.321046486996 21 -542.775570394861 31 2103.01109421295 12 802.928322181323 22 -560.588161532002 32 2035.20233863644 13 802.928322181323 23 -560.588161532002 33 2035.20233863644 70 3 0 3DFACE 8 body_half_inside 10 802.928322181323 20 -560.588161532002 30 2035.20233863644 11 812.321046486996 21 -542.775570394861 31 2103.01109421295 12 815.696038096871 22 -545.030667691736 32 2035.2022000213 13 815.696038096871 23 -545.030667691736 33 2035.2022000213 70 1 0 3DFACE 8 body_half_inside 10 795.73325617356 20 -565.07629502955 30 1989.63346974763 11 812.321046486997 21 -542.775570394861 31 1967.39330582966 12 788.482625178071 22 -571.822770804239 32 1967.39330582966 13 788.482625178071 23 -571.822770804239 33 1967.39330582966 70 1 0 3DFACE 8 body_half_inside 10 812.321046486997 20 -542.775570394861 30 1967.39330582966 11 795.73325617356 21 -565.07629502955 31 1989.63346974763 12 802.928322181323 22 -560.588161532002 32 2035.20233863644 13 802.928322181323 23 -560.588161532002 33 2035.20233863644 70 13 0 3DFACE 8 body_half_inside 10 812.321046486997 20 -542.775570394861 30 1967.39330582966 11 802.928322181323 21 -560.588161532002 31 2035.20233863644 12 815.696038096871 22 -545.030667691736 32 2035.2022000213 13 815.696038096871 23 -545.030667691736 33 2035.2022000213 70 1 0 3DFACE 8 body_half_inside 10 0.0 20 -976.970215709361 30 2103.01109421295 11 104.493597769057 21 -954.55926212325 31 2169.85154878419 12 104.493608158504 22 -966.678493599977 32 2103.01109421295 13 104.493608158504 23 -966.678493599977 33 2103.01109421295 70 1 0 3DFACE 8 body_half_inside 10 104.493597769057 20 -954.55926212325 30 2169.85154878419 11 0.0 21 -976.970215709361 31 2103.01109421295 12 0.0 22 -964.850983209363 32 2169.85154878419 13 0.0 23 -964.850983209363 33 2169.85154878419 70 1 0 3DFACE 8 body_half_inside 10 0.0 20 -964.850983209363 30 2169.85154878419 11 104.493589835895 21 -940.355698951006 31 2215.93993123015 12 104.493597769057 22 -954.55926212325 32 2169.85154878419 13 104.493597769057 23 -954.55926212325 33 2169.85154878419 70 1 0 3DFACE 8 body_half_inside 10 104.493589835895 20 -940.355698951006 30 2215.93993123015 11 0.0 21 -964.850983209363 31 2169.85154878419 12 0.0 22 -944.844671731792 32 2234.76895526921 13 0.0 23 -944.844671731792 33 2234.76895526921 70 13 0 3DFACE 8 body_half_inside 10 104.493589835895 20 -940.355698951006 30 2215.93993123015 11 0.0 21 -944.844671731792 31 2234.76895526921 12 184.938817720617 22 -929.750221953924 32 2224.64362671606 13 184.938817720617 23 -929.750221953924 33 2224.64362671606 70 3 0 3DFACE 8 body_half_inside 10 184.938817720617 20 -929.750221953924 30 2224.64362671606 11 0.0 21 -944.844671731792 31 2234.76895526921 12 184.330051263378 22 -926.689746301964 32 2234.76895526921 13 184.330051263378 23 -926.689746301964 33 2234.76895526921 70 1 0 3DFACE 8 body_half_inside 10 184.330051263378 20 -926.689746301964 30 2234.76895526921 11 199.064976889088 21 -923.935740607716 31 2229.41545051599 12 184.938817720617 22 -929.750221953924 32 2224.64362671606 13 184.938817720617 23 -929.750221953924 33 2224.64362671606 70 1 0 3DFACE 8 body_half_inside 10 199.064976889088 20 -923.935740607716 30 2229.41545051599 11 184.330051263378 21 -926.689746301964 31 2234.76895526921 12 226.426112851944 22 -913.920045626142 32 2234.76895526921 13 226.426112851944 23 -913.920045626142 33 2234.76895526921 70 1 0 3DFACE 8 body_half_inside 10 178.9440635192 20 -899.612557411553 30 2296.83616997626 11 226.426112851944 21 -913.920045626142 31 2234.76895526921 12 184.330051263378 22 -926.689746301964 32 2234.76895526921 13 184.330051263378 23 -926.689746301964 33 2234.76895526921 70 1 0 3DFACE 8 body_half_inside 10 226.426112851944 20 -913.920045626142 30 2234.76895526921 11 178.9440635192 21 -899.612557411553 31 2296.83616997626 12 301.780746126529 22 -883.553125284517 32 2251.00042478027 13 301.780746126529 23 -883.553125284517 33 2251.00042478027 70 3 0 3DFACE 8 body_half_inside 10 301.780746126529 20 -883.553125284517 30 2251.00042478027 11 178.9440635192 21 -899.612557411553 31 2296.83616997626 12 357.792956438195 22 -863.788607954656 32 2256.9959350164 13 357.792956438195 23 -863.788607954656 33 2256.9959350164 70 3 0 3DFACE 8 body_half_inside 10 357.792956438195 20 -863.788607954656 30 2256.9959350164 11 178.9440635192 21 -899.612557411553 31 2296.83616997626 12 351.011407030345 22 -847.416499400322 32 2296.83616997626 13 351.011407030345 23 -847.416499400322 33 2296.83616997626 70 1 0 3DFACE 8 body_half_inside 10 351.011407030345 20 -847.416499400322 30 2296.83616997626 11 395.941605262448 21 -839.735434514061 31 2264.29239416004 12 357.792956438195 22 -863.788607954656 32 2256.9959350164 13 357.792956438195 23 -863.788607954656 33 2256.9959350164 70 1 0 3DFACE 8 body_half_inside 10 395.941605262448 20 -839.735434514061 30 2264.29239416004 11 351.011407030345 21 -847.416499400322 31 2296.83616997626 12 476.980410282499 22 -794.166557704225 32 2268.78055560144 13 476.980410282499 23 -794.166557704225 33 2268.78055560144 70 3 0 3DFACE 8 body_half_inside 10 476.980410282499 20 -794.166557704225 30 2268.78055560144 11 509.589579018778 21 -762.654700553784 31 2296.83616997626 12 517.019001290372 22 -773.773616738727 32 2266.77203613245 13 517.019001290372 23 -773.773616738727 33 2266.77203613245 70 1 0 3DFACE 8 body_half_inside 10 509.589579018778 20 -762.654700553784 30 2296.83616997626 11 476.980410282499 21 -794.166557704225 31 2268.78055560144 12 351.011407030345 22 -847.416499400322 32 2296.83616997626 13 351.011407030345 23 -847.416499400322 33 2296.83616997626 70 3 0 3DFACE 8 body_half_inside 10 612.092889952714 20 -704.779988286527 30 2251.00050136552 11 668.106074549527 21 -668.106074549528 31 2234.76895526921 12 660.421223817861 22 -674.412868555691 32 2234.76895526921 13 660.421223817861 23 -674.412868555691 33 2234.76895526921 70 1 0 3DFACE 8 body_half_inside 10 668.106074549527 20 -668.106074549528 30 2234.76895526921 11 612.092889952714 21 -704.779988286527 31 2251.00050136552 12 648.584509266648 22 -648.584509266648 32 2296.83616997626 13 648.584509266648 23 -648.584509266648 33 2296.83616997626 70 3 0 3DFACE 8 body_half_inside 10 648.584509266648 20 -648.584509266648 30 2296.83616997626 11 612.092889952714 21 -704.779988286527 31 2251.00050136552 12 549.426162494113 22 -748.597680229798 32 2264.29243258297 13 549.426162494113 23 -748.597680229798 33 2264.29243258297 70 13 0 3DFACE 8 body_half_inside 10 648.584509266648 20 -648.584509266648 30 2296.83616997626 11 549.426162494113 21 -748.597680229798 31 2264.29243258297 12 517.019001290372 22 -773.773616738727 32 2266.77203613245 13 517.019001290372 23 -773.773616738727 33 2266.77203613245 70 13 0 3DFACE 8 body_half_inside 10 648.584509266648 20 -648.584509266648 30 2296.83616997626 11 517.019001290372 21 -773.773616738727 31 2266.77203613245 12 509.589579018778 22 -762.654700553784 32 2296.83616997626 13 509.589579018778 23 -762.654700553784 33 2296.83616997626 70 1 0 3DFACE 8 body_half_inside 10 668.106074549527 20 -668.106074549528 30 2234.76895526921 11 673.273723074262 21 -664.397369794469 31 2229.41556481967 12 668.764043362589 22 -668.76404336259 32 2231.74959843549 13 668.764043362589 23 -668.76404336259 33 2231.74959843549 70 1 0 3DFACE 8 body_half_inside 10 673.273723074262 20 -664.397369794469 30 2229.41556481967 11 668.106074549527 21 -668.106074549528 31 2234.76895526921 12 785.609632890959 22 -524.927574441361 32 2234.76895526921 13 785.609632890959 23 -524.927574441361 33 2234.76895526921 70 13 0 3DFACE 8 body_half_inside 10 673.273723074262 20 -664.397369794469 30 2229.41556481967 11 785.609632890959 21 -524.927574441361 31 2234.76895526921 12 713.847355884234 22 -629.001708342044 32 2200.36711774529 13 713.847355884234 23 -629.001708342044 33 2200.36711774529 70 3 0 3DFACE 8 body_half_inside 10 713.847355884234 20 -629.001708342044 30 2200.36711774529 11 785.609632890959 21 -524.927574441361 31 2234.76895526921 12 746.507278280356 22 -603.958210067833 32 2169.85154878419 13 746.507278280356 23 -603.958210067833 33 2169.85154878419 70 3 0 3DFACE 8 body_half_inside 10 746.507278280356 20 -603.958210067833 30 2169.85154878419 11 785.609632890959 21 -524.927574441361 31 2234.76895526921 12 802.244272938819 22 -536.042485570818 32 2169.85154878419 13 802.244272938819 23 -536.042485570818 33 2169.85154878419 70 1 0 3DFACE 8 body_half_inside 10 668.106074549527 20 -668.106074549528 30 2234.76895526921 11 668.764043362589 21 -668.76404336259 31 2231.74959843549 12 660.421223817861 22 -674.412868555691 32 2234.76895526921 13 660.421223817861 23 -674.412868555691 33 2234.76895526921 70 0 0 3DFACE 8 body_half_inside 10 802.244272938819 20 -536.042485570818 30 2169.85154878419 11 750.933222864967 21 -599.953236891033 31 2164.97147813062 12 746.507278280356 22 -603.958210067833 32 2169.85154878419 13 746.507278280356 23 -603.958210067833 33 2169.85154878419 70 1 0 3DFACE 8 body_half_inside 10 750.933222864967 20 -599.953236891033 30 2164.97147813062 11 802.244272938819 21 -536.042485570818 31 2169.85154878419 12 778.073998488686 22 -578.368272570852 32 2124.58887989382 13 778.073998488686 23 -578.368272570852 33 2124.58887989382 70 3 0 3DFACE 8 body_half_inside 10 778.073998488686 20 -578.368272570852 30 2124.58887989382 11 802.244272938819 21 -536.042485570818 31 2169.85154878419 12 788.482669869741 22 -571.822716347281 32 2103.01109421295 13 788.482669869741 23 -571.822716347281 33 2103.01109421295 70 3 0 3DFACE 8 body_half_inside 10 788.482669869741 20 -571.822716347281 30 2103.01109421295 11 802.244272938819 21 -536.042485570818 31 2169.85154878419 12 812.321046486996 22 -542.775570394861 32 2103.01109421295 13 812.321046486996 23 -542.775570394861 33 2103.01109421295 70 1 0 3DFACE 8 body_half_inside 10 0.0 20 -976.970215709361 30 1967.39330582966 11 104.493633203151 21 -954.559258633297 31 1900.55285125842 12 0.0 22 -964.850983209364 32 1900.55285125842 13 0.0 23 -964.850983209364 33 1900.55285125842 70 1 0 3DFACE 8 body_half_inside 10 104.493633203151 20 -954.559258633297 30 1900.55285125842 11 0.0 21 -976.970215709361 31 1967.39330582966 12 104.493626002977 22 -966.678491842449 32 1967.39330582966 13 104.493626002977 23 -966.678491842449 33 1967.39330582966 70 1 0 3DFACE 8 body_half_inside 10 104.493585902306 20 -599.953270041246 30 1905.43308465531 11 713.847499937789 21 -629.001642276081 31 1870.0375087198 12 104.493594381804 22 -629.001722454268 32 1870.03742854153 13 104.493594381804 23 -629.001722454268 33 1870.03742854153 70 1 0 3DFACE 8 body_half_inside 10 713.847499937789 20 -629.001642276081 30 1870.0375087198 11 104.493585902306 21 -599.953270041246 31 1905.43308465531 12 746.507157447799 22 -603.958357302731 32 1900.55285125842 13 746.507157447799 23 -603.958357302731 33 1900.55285125842 70 3 0 3DFACE 8 body_half_inside 10 746.507157447799 20 -603.958357302731 30 1900.55285125842 11 104.493585902306 21 -599.953270041246 31 1905.43308465531 12 750.933323308422 22 -599.953184983341 32 1905.4331697133 13 750.933323308422 23 -599.953184983341 33 1905.4331697133 70 1 0 3DFACE 8 body_half_inside 10 104.493577748671 20 -578.36832544527 30 1945.81569509725 11 750.933323308422 21 -599.953184983341 31 1905.4331697133 12 104.493585902306 22 -599.953270041246 32 1905.43308465531 13 104.493585902306 23 -599.953270041246 33 1905.43308465531 70 1 0 3DFACE 8 body_half_inside 10 750.933323308422 20 -599.953184983341 30 1905.4331697133 11 104.493577748671 21 -578.36832544527 31 1945.81569509725 12 778.074089358318 22 -578.368236816208 32 1945.81578372641 13 778.074089358318 23 -578.368236816208 33 1945.81578372641 70 1 0 3DFACE 8 body_half_inside 10 104.493551752477 20 -664.397444634006 30 2229.41548998005 11 713.847355884234 21 -629.001708342044 31 2200.36711774529 12 104.493550917322 22 -629.00178852022 32 2200.36703756703 13 104.493550917322 23 -629.00178852022 33 2200.36703756703 70 1 0 3DFACE 8 body_half_inside 10 713.847355884234 20 -629.001708342044 30 2200.36711774529 11 104.493551752477 21 -664.397444634006 31 2229.41548998005 12 673.273723074262 22 -664.397369794469 32 2229.41556481967 13 673.273723074262 23 -664.397369794469 33 2229.41556481967 70 1 0 3DFACE 8 body_half_inside 10 104.493585902279 20 -923.935753051327 30 2229.41543807237 11 301.780746126529 21 -883.553125284517 31 2251.00042478027 12 104.493577748645 22 -883.553151243369 32 2251.0003988214 13 104.493577748645 23 -883.553151243369 33 2251.0003988214 70 1 0 3DFACE 8 body_half_inside 10 301.780746126529 20 -883.553125284517 30 2251.00042478027 11 104.493585902279 21 -923.935753051327 31 2229.41543807237 12 199.064976889088 22 -923.935740607716 32 2229.41545051599 13 199.064976889088 23 -923.935740607716 33 2229.41545051599 70 13 0 3DFACE 8 body_half_inside 10 301.780746126529 20 -883.553125284517 30 2251.00042478027 11 199.064976889088 21 -923.935740607716 31 2229.41545051599 12 226.426112851944 22 -913.920045626142 32 2234.76895526921 13 226.426112851944 23 -913.920045626142 33 2234.76895526921 70 1 0 3DFACE 8 body_half_inside 10 476.980677127978 20 -794.166464272834 30 1801.6239424642 11 104.493630521182 21 -839.735381226399 31 1806.1120260035 12 104.49362511582 22 -794.166513284314 32 1801.62389345267 13 104.49362511582 23 -794.166513284314 33 1801.62389345267 70 1 0 3DFACE 8 body_half_inside 10 104.493630521182 20 -839.735381226399 30 1806.1120260035 11 476.980677127978 21 -794.166464272834 31 1801.6239424642 12 395.941831606783 22 -839.735342877931 32 1806.11206435201 13 395.941831606783 23 -839.735342877931 33 1806.11206435201 70 1 0 3DFACE 8 body_half_inside 10 395.941831606783 20 -839.735342877931 30 1806.11206435201 11 104.493634537727 21 -883.553064924044 31 1819.40396546658 12 104.493630521182 22 -839.735381226399 32 1806.1120260035 13 104.493630521182 23 -839.735381226399 33 1806.1120260035 70 1 0 3DFACE 8 body_half_inside 10 104.493634537727 20 -883.553064924044 30 1819.40396546658 11 395.941831606783 21 -839.735342877931 31 1806.11206435201 12 301.781055330838 22 -883.553038965158 32 1819.40399142549 13 301.781055330838 23 -883.553038965158 33 1819.40399142549 70 3 0 3DFACE 8 body_half_inside 10 301.781055330838 20 -883.553038965158 30 1819.40399142549 11 395.941831606783 21 -839.735342877931 31 1806.11206435201 12 357.792969218307 22 -863.788638808576 32 1813.40854010679 13 357.792969218307 23 -863.788638808576 33 1813.40854010679 70 1 0 3DFACE 8 body_half_inside 10 301.781055330838 20 -883.553038965158 30 1819.40399142549 11 104.493637011103 21 -923.935675365986 31 1840.98891006256 12 104.493634537727 22 -883.553064924044 32 1819.40396546658 13 104.493634537727 23 -883.553064924044 33 1819.40396546658 70 1 0 3DFACE 8 body_half_inside 10 104.493637011103 20 -923.935675365986 30 1840.98891006256 11 301.781055330838 21 -883.553038965158 31 1819.40399142549 12 199.0652044353 22 -923.935662922352 32 1840.9889225062 13 199.0652044353 23 -923.935662922352 33 1840.9889225062 70 3 0 3DFACE 8 body_half_inside 10 199.0652044353 20 -923.935662922352 30 1840.9889225062 11 301.781055330838 21 -883.553038965158 31 1819.40399142549 12 226.426278474808 22 -913.919995384996 32 1835.6354447734 13 226.426278474808 23 -913.919995384996 33 1835.6354447734 70 1 0 3DFACE 8 body_half_inside 10 713.847499937789 20 -629.001642276081 30 1870.0375087198 11 104.4936028613 21 -664.397366948665 31 1840.98896197024 12 104.493594381804 22 -629.001722454268 32 1870.03742854153 13 104.493594381804 23 -629.001722454268 33 1870.03742854153 70 1 0 3DFACE 8 body_half_inside 10 104.4936028613 20 -664.397366948665 30 1840.98896197024 11 713.847499937789 21 -629.001642276081 31 1870.0375087198 12 673.273866809931 22 -664.397292109118 32 1840.98903680986 13 673.273866809931 23 -664.397292109118 33 1840.98903680986 70 1 0 3DFACE 8 body_half_inside 10 673.273866809931 20 -664.397292109118 30 1840.98903680986 11 104.493611014934 21 -704.779968756623 31 1819.40400122121 12 104.4936028613 22 -664.397366948665 32 1840.98896197024 13 104.4936028613 23 -664.397366948665 33 1840.98896197024 70 1 0 3DFACE 8 body_half_inside 10 104.493611014934 20 -704.779968756623 30 1819.40400122121 11 673.273866809931 21 -664.397292109118 31 1840.98903680986 12 612.093113289132 22 -704.779901967179 32 1819.40406801073 13 612.093113289132 23 -704.779901967179 33 1819.40406801073 70 3 0 3DFACE 8 body_half_inside 10 612.093113289132 20 -704.779901967179 30 1819.40406801073 11 673.273866809931 21 -664.397292109118 31 1840.98903680986 12 660.420878380816 22 -674.413152048547 32 1835.6354447734 13 660.420878380816 23 -674.413152048547 33 1835.6354447734 70 3 0 3DFACE 8 body_half_inside 10 660.420878380816 20 -674.413152048547 30 1835.6354447734 11 673.273866809931 21 -664.397292109118 31 1840.98903680986 12 668.764073934129 22 -668.76407393413 32 1838.65494189703 13 668.764073934129 23 -668.76407393413 33 1838.65494189703 70 1 0 3DFACE 8 body_half_inside 10 612.093113289132 20 -704.779901967179 30 1819.40406801073 11 104.493618529366 21 -748.597647137485 31 1806.11204423105 12 104.493611014934 22 -704.779968756623 32 1819.40400122121 13 104.493611014934 23 -704.779968756623 33 1819.40400122121 70 1 0 3DFACE 8 body_half_inside 10 104.493618529366 20 -748.597647137485 30 1806.11204423105 11 612.093113289132 21 -704.779901967179 31 1819.40406801073 12 549.426368572047 22 -748.597588593672 32 1806.11210277493 13 549.426368572047 23 -748.597588593672 33 1806.11210277493 70 1 0 3DFACE 8 body_half_inside 10 104.493558242398 20 -748.597738773593 30 2264.29237403911 11 612.092889952714 21 -704.779988286527 31 2251.00050136552 12 104.493554225852 22 -704.780055075949 32 2251.00043457603 13 104.493554225852 23 -704.780055075949 33 2251.00043457603 70 1 0 3DFACE 8 body_half_inside 10 612.092889952714 20 -704.779988286527 30 2251.00050136552 11 104.493558242398 21 -748.597738773593 31 2264.29237403911 12 549.426162494113 22 -748.597680229798 32 2264.29243258297 13 549.426162494113 23 -748.597680229798 33 2264.29243258297 70 1 0 3DFACE 8 body_half_inside 10 104.493550917322 20 -629.00178852022 30 2200.36703756703 11 750.933222864967 21 -599.953236891033 31 2164.97147813062 12 104.493551752482 22 -599.953321948931 32 2164.97139307263 13 104.493551752482 23 -599.953321948931 33 2164.97139307263 70 1 0 3DFACE 8 body_half_inside 10 750.933222864967 20 -599.953236891033 30 2164.97147813062 11 104.493550917322 21 -629.00178852022 31 2200.36703756703 12 746.507278280356 22 -603.958210067833 32 2169.85154878419 13 746.507278280356 23 -603.958210067833 33 2169.85154878419 70 3 0 3DFACE 8 body_half_inside 10 746.507278280356 20 -603.958210067833 30 2169.85154878419 11 104.493550917322 21 -629.00178852022 31 2200.36703756703 12 713.847355884234 22 -629.001708342044 32 2200.36711774529 13 713.847355884234 23 -629.001708342044 33 2200.36711774529 70 1 0 3DFACE 8 body_half_inside 10 104.493551752482 20 -599.953321948931 30 2164.97139307263 11 778.073998488686 21 -578.368272570852 31 2124.58887989382 12 104.493554225863 22 -578.368361199906 32 2124.58879126467 13 104.493554225863 23 -578.368361199906 33 2124.58879126467 70 1 0 3DFACE 8 body_half_inside 10 778.073998488686 20 -578.368272570852 30 2124.58887989382 11 104.493551752482 21 -599.953321948931 31 2164.97139307263 12 750.933222864967 22 -599.953236891033 32 2164.97147813062 13 750.933222864967 23 -599.953236891033 33 2164.97147813062 70 1 0 3DFACE 8 body_half_inside 10 104.493554225863 20 -578.368361199906 30 2124.58879126467 11 795.733220134071 21 -565.076313257107 31 2080.77120383654 12 104.493558242413 22 -565.076404209743 32 2080.77111288381 13 104.493558242413 23 -565.076404209743 33 2080.77111288381 70 1 0 3DFACE 8 body_half_inside 10 795.733220134071 20 -565.076313257107 30 2080.77120383654 11 104.493554225863 21 -578.368361199906 31 2124.58879126467 12 788.482669869741 22 -571.822716347281 32 2103.01109421295 13 788.482669869741 23 -571.822716347281 33 2103.01109421295 70 3 0 3DFACE 8 body_half_inside 10 788.482669869741 20 -571.822716347281 30 2103.01109421295 11 104.493554225863 21 -578.368361199906 31 2124.58879126467 12 778.073998488686 22 -578.368272570852 32 2124.58887989382 13 778.073998488686 23 -578.368272570852 33 2124.58887989382 70 1 0 3DFACE 8 body_half_inside 10 104.493558242413 20 -565.076404209743 30 2080.77111288381 11 802.928322181323 21 -560.588161532002 31 2035.20233863644 12 104.49356364778 22 -560.588253431361 32 2035.20224673698 13 104.49356364778 23 -560.588253431361 33 2035.20224673698 70 1 0 3DFACE 8 body_half_inside 10 802.928322181323 20 -560.588161532002 30 2035.20233863644 11 104.493558242413 21 -565.076404209743 31 2080.77111288381 12 795.733220134071 22 -565.076313257107 32 2080.77120383654 13 795.733220134071 23 -565.076313257107 33 2080.77120383654 70 1 0 3DFACE 8 body_half_inside 10 104.49356364778 20 -560.588253431361 30 2035.20224673698 11 795.73325617356 21 -565.07629502955 31 1989.63346974763 12 104.493570234237 22 -565.076385982188 32 1989.6333787949 13 104.493570234237 23 -565.076385982188 33 1989.6333787949 70 1 0 3DFACE 8 body_half_inside 10 795.73325617356 20 -565.07629502955 30 1989.63346974763 11 104.49356364778 21 -560.588253431361 31 2035.20224673698 12 802.928322181323 22 -560.588161532002 32 2035.20233863644 13 802.928322181323 23 -560.588161532002 33 2035.20233863644 70 1 0 3DFACE 8 body_half_inside 10 104.493570234237 20 -565.076385982188 30 1989.6333787949 11 778.074089358318 21 -578.368236816208 31 1945.81578372641 12 104.493577748671 22 -578.36832544527 32 1945.81569509725 13 104.493577748671 23 -578.36832544527 33 1945.81569509725 70 1 0 3DFACE 8 body_half_inside 10 778.074089358318 20 -578.368236816208 30 1945.81578372641 11 104.493570234237 21 -565.076385982188 31 1989.6333787949 12 788.482625178071 22 -571.822770804239 32 1967.39330582966 13 788.482625178071 23 -571.822770804239 33 1967.39330582966 70 3 0 3DFACE 8 body_half_inside 10 788.482625178071 20 -571.822770804239 30 1967.39330582966 11 104.493570234237 21 -565.076385982188 31 1989.6333787949 12 795.73325617356 22 -565.07629502955 32 1989.63346974763 13 795.73325617356 23 -565.07629502955 33 1989.63346974763 70 1 0 3DFACE 8 body_half_inside 10 104.493570234214 20 -839.735472862507 30 2264.29235581156 11 476.980410282499 21 -794.166557704225 31 2268.78055560144 12 104.49356364776 22 -794.166606715679 32 2268.78050658994 13 104.49356364776 23 -794.166606715679 33 2268.78050658994 70 1 0 3DFACE 8 body_half_inside 10 476.980410282499 20 -794.166557704225 30 2268.78055560144 11 104.493570234214 21 -839.735472862507 31 2264.29235581156 12 395.941605262448 22 -839.735434514061 32 2264.29239416004 13 395.941605262448 23 -839.735434514061 33 2264.29239416004 70 1 0 3DFACE 8 body_half_inside 10 104.49356364776 20 -794.166606715679 30 2268.78050658994 11 549.426162494113 21 -748.597680229798 31 2264.29243258297 12 104.493558242398 22 -748.597738773593 32 2264.29237403911 13 104.493558242398 23 -748.597738773593 33 2264.29237403911 70 1 0 3DFACE 8 body_half_inside 10 549.426162494113 20 -748.597680229798 30 2264.29243258297 11 104.49356364776 21 -794.166606715679 31 2268.78050658994 12 476.980410282499 22 -794.166557704225 32 2268.78055560144 13 476.980410282499 23 -794.166557704225 33 2268.78055560144 70 13 0 3DFACE 8 body_half_inside 10 549.426162494113 20 -748.597680229798 30 2264.29243258297 11 476.980410282499 21 -794.166557704225 31 2268.78055560144 12 517.019001290372 22 -773.773616738727 32 2266.77203613245 13 517.019001290372 23 -773.773616738727 33 2266.77203613245 70 1 0 3DFACE 8 body_half_inside 10 104.493589835895 20 -940.355698951006 30 2215.93993123015 11 199.064976889088 21 -923.935740607716 31 2229.41545051599 12 104.493585902279 22 -923.935753051327 32 2229.41543807237 13 104.493585902279 23 -923.935753051327 33 2229.41543807237 70 1 0 3DFACE 8 body_half_inside 10 199.064976889088 20 -923.935740607716 30 2229.41545051599 11 104.493589835895 21 -940.355698951006 31 2215.93993123015 12 184.938817720617 22 -929.750221953924 32 2224.64362671606 13 184.938817720617 23 -929.750221953924 33 2224.64362671606 70 1 0 3DFACE 8 body_half_inside 10 104.493608158504 20 -966.678493599977 30 2103.01109421295 11 104.493626002977 21 -966.678491842449 31 1967.39330582966 12 104.493617614829 22 -970.737560564704 32 2035.2022000213 13 104.493617614829 23 -970.737560564704 33 2035.2022000213 70 1 0 3DFACE 8 body_half_inside 10 104.493626002977 20 -966.678491842449 30 1967.39330582966 11 104.493608158504 21 -966.678493599977 31 2103.01109421295 12 104.493597769057 22 -954.55926212325 32 2169.85154878419 13 104.493597769057 23 -954.55926212325 33 2169.85154878419 70 13 0 3DFACE 8 body_half_inside 10 104.493626002977 20 -966.678491842449 30 1967.39330582966 11 104.493597769057 21 -954.55926212325 31 2169.85154878419 12 104.493633203151 22 -954.559258633297 32 1900.55285125842 13 104.493633203151 23 -954.559258633297 33 1900.55285125842 70 3 0 3DFACE 8 body_half_inside 10 104.493633203151 20 -954.559258633297 30 1900.55285125842 11 104.493597769057 21 -954.55926212325 31 2169.85154878419 12 104.493589835895 22 -940.355698951006 32 2215.93993123015 13 104.493589835895 23 -940.355698951006 33 2215.93993123015 70 13 0 3DFACE 8 body_half_inside 10 104.493633203151 20 -954.559258633297 30 1900.55285125842 11 104.493589835895 21 -940.355698951006 31 2215.93993123015 12 104.493637398531 22 -940.355693033463 32 1854.46446481146 13 104.493637398531 23 -940.355693033463 33 1854.46446481146 70 3 0 3DFACE 8 body_half_inside 10 104.493637398531 20 -940.355693033463 30 1854.46446481146 11 104.493589835895 21 -940.355698951006 31 2215.93993123015 12 104.493585902279 22 -923.935753051327 32 2229.41543807237 13 104.493585902279 23 -923.935753051327 33 2229.41543807237 70 13 0 3DFACE 8 body_half_inside 10 104.493637398531 20 -940.355693033463 30 1854.46446481146 11 104.493585902279 21 -923.935753051327 31 2229.41543807237 12 104.493637011103 22 -923.935675365986 32 1840.98891006256 13 104.493637011103 23 -923.935675365986 33 1840.98891006256 70 3 0 3DFACE 8 body_half_inside 10 104.493637011103 20 -923.935675365986 30 1840.98891006256 11 104.493585902279 21 -923.935753051327 31 2229.41543807237 12 104.493577748645 22 -883.553151243369 32 2251.0003988214 13 104.493577748645 23 -883.553151243369 33 2251.0003988214 70 13 0 3DFACE 8 body_half_inside 10 104.493637011103 20 -923.935675365986 30 1840.98891006256 11 104.493577748645 21 -883.553151243369 31 2251.0003988214 12 104.493634537727 22 -883.553064924044 32 1819.40396546658 13 104.493634537727 23 -883.553064924044 33 1819.40396546658 70 3 0 3DFACE 8 body_half_inside 10 104.493634537727 20 -883.553064924044 30 1819.40396546658 11 104.493577748645 21 -883.553151243369 31 2251.0003988214 12 104.493606060716 22 -882.926351999993 32 2035.2022000213 13 104.493606060716 23 -882.926351999993 33 2035.2022000213 70 15 0 3DFACE 8 body_half_inside 10 104.493606060716 20 -882.926351999993 30 2035.2022000213 11 104.493577748645 21 -883.553151243369 31 2251.0003988214 12 104.493603557861 22 -881.220857485246 32 2052.51837642467 13 104.493603557861 23 -881.220857485246 33 2052.51837642467 70 3 0 3DFACE 8 body_half_inside 10 104.493603557861 20 -881.220857485246 30 2052.51837642467 11 104.493577748645 21 -883.553151243369 31 2251.0003988214 12 104.493570234214 22 -839.735472862507 32 2264.29235581156 13 104.493570234214 23 -839.735472862507 33 2264.29235581156 70 13 0 3DFACE 8 body_half_inside 10 104.493603557861 20 -881.220857485246 30 2052.51837642467 11 104.493570234214 21 -839.735472862507 31 2264.29235581156 12 104.493600702375 22 -876.169915138753 32 2069.16910187987 13 104.493600702375 23 -876.169915138753 33 2069.16910187987 70 3 0 3DFACE 8 body_half_inside 10 104.493600702375 20 -876.169915138753 30 2069.16910187987 11 104.493570234214 21 -839.735472862507 31 2264.29235581156 12 104.493597603992 22 -867.967629842289 32 2084.51449834551 13 104.493597603992 23 -867.967629842289 33 2084.51449834551 70 3 0 3DFACE 8 body_half_inside 10 104.493597603992 20 -867.967629842289 30 2084.51449834551 11 104.493570234214 21 -839.735472862507 31 2264.29235581156 12 104.493594381781 22 -856.929210819903 32 2097.96485084121 13 104.493594381781 23 -856.929210819903 33 2097.96485084121 70 3 0 3DFACE 8 body_half_inside 10 104.493594381781 20 -856.929210819903 30 2097.96485084121 11 104.493570234214 21 -839.735472862507 31 2264.29235581156 12 104.493591159571 22 -843.478858324207 32 2109.0032698636 13 104.493591159571 23 -843.478858324207 33 2109.0032698636 70 3 0 3DFACE 8 body_half_inside 10 104.493591159571 20 -843.478858324207 30 2109.0032698636 11 104.493570234214 21 -839.735472862507 31 2264.29235581156 12 104.493588061189 22 -828.133461858568 32 2117.20555516006 13 104.493588061189 23 -828.133461858568 33 2117.20555516006 70 3 0 3DFACE 8 body_half_inside 10 104.493588061189 20 -828.133461858568 30 2117.20555516006 11 104.493570234214 21 -839.735472862507 31 2264.29235581156 12 104.49356364776 22 -794.166606715679 32 2268.78050658994 13 104.49356364776 23 -794.166606715679 33 2268.78050658994 70 13 0 3DFACE 8 body_half_inside 10 104.493588061189 20 -828.133461858568 30 2117.20555516006 11 104.49356364776 21 -794.166606715679 31 2268.78050658994 12 104.493585205705 22 -811.482736403362 32 2122.25649750655 13 104.493585205705 23 -811.482736403362 33 2122.25649750655 70 3 0 3DFACE 8 body_half_inside 10 104.493585205705 20 -811.482736403362 30 2122.25649750655 11 104.49356364776 21 -794.166606715679 31 2268.78050658994 12 104.493582702852 22 -794.166559999998 32 2123.9619920213 13 104.493582702852 23 -794.166559999998 33 2123.9619920213 70 3 0 3DFACE 8 body_half_inside 10 104.493582702852 20 -794.166559999998 30 2123.9619920213 11 104.49356364776 21 -794.166606715679 31 2268.78050658994 12 104.493558242398 22 -748.597738773593 32 2264.29237403911 13 104.493558242398 23 -748.597738773593 33 2264.29237403911 70 13 0 3DFACE 8 body_half_inside 10 104.493582702852 20 -794.166559999998 30 2123.9619920213 11 104.493558242398 21 -748.597738773593 31 2264.29237403911 12 104.493580648814 22 -776.850383596634 32 2122.25649750655 13 104.493580648814 23 -776.850383596634 33 2122.25649750655 70 3 0 3DFACE 8 body_half_inside 10 104.493580648814 20 -776.850383596634 30 2122.25649750655 11 104.493558242398 21 -748.597738773593 31 2264.29237403911 12 104.493579122526 22 -760.199658141427 32 2117.20555516006 13 104.493579122526 23 -760.199658141427 33 2117.20555516006 70 3 0 3DFACE 8 body_half_inside 10 104.493579122526 20 -760.199658141427 30 2117.20555516006 11 104.493558242398 21 -748.597738773593 31 2264.29237403911 12 104.493578182644 22 -744.854261675788 32 2109.0032698636 13 104.493578182644 23 -744.854261675788 33 2109.0032698636 70 3 0 3DFACE 8 body_half_inside 10 104.493578182644 20 -744.854261675788 30 2109.0032698636 11 104.493558242398 21 -748.597738773593 31 2264.29237403911 12 104.493554225852 22 -704.780055075949 32 2251.00043457603 13 104.493554225852 23 -704.780055075949 33 2251.00043457603 70 13 0 3DFACE 8 body_half_inside 10 104.493578182644 20 -744.854261675788 30 2109.0032698636 11 104.493554225852 21 -704.780055075949 31 2251.00043457603 12 104.493577865285 22 -731.403909180092 32 2097.96485084121 13 104.493577865285 23 -731.403909180092 33 2097.96485084121 70 3 0 3DFACE 8 body_half_inside 10 104.493577865285 20 -731.403909180092 30 2097.96485084121 11 104.493554225852 21 -704.780055075949 31 2251.00043457603 12 104.493578182647 22 -720.365490157705 32 2084.51449834551 13 104.493578182647 23 -720.365490157705 33 2084.51449834551 70 3 0 3DFACE 8 body_half_inside 10 104.493578182647 20 -720.365490157705 30 2084.51449834551 11 104.493554225852 21 -704.780055075949 31 2251.00043457603 12 104.493579122533 22 -712.163204861241 32 2069.16910187987 13 104.493579122533 23 -712.163204861241 33 2069.16910187987 70 3 0 3DFACE 8 body_half_inside 10 104.493579122533 20 -712.163204861241 30 2069.16910187987 11 104.493554225852 21 -704.780055075949 31 2251.00043457603 12 104.493580648823 22 -707.112262514747 32 2052.51837642467 13 104.493580648823 23 -707.112262514747 33 2052.51837642467 70 3 0 3DFACE 8 body_half_inside 10 104.493580648823 20 -707.112262514747 30 2052.51837642467 11 104.493554225852 21 -704.780055075949 31 2251.00043457603 12 104.493582702864 22 -705.406767999999 32 2035.2022000213 13 104.493582702864 23 -705.406767999999 33 2035.2022000213 70 3 0 3DFACE 8 body_half_inside 10 104.493634537727 20 -883.553064924044 30 1819.40396546658 11 104.493608114757 21 -881.220857485245 31 2017.88602361794 12 104.493630521182 22 -839.735381226399 32 1806.1120260035 13 104.493630521182 23 -839.735381226399 33 1806.1120260035 70 3 0 3DFACE 8 body_half_inside 10 104.493608114757 20 -881.220857485245 30 2017.88602361794 11 104.493634537727 21 -883.553064924044 31 1819.40396546658 12 104.493606060716 22 -882.926351999993 32 2035.2022000213 13 104.493606060716 23 -882.926351999993 33 2035.2022000213 70 3 0 3DFACE 8 body_half_inside 10 104.493630521182 20 -839.735381226399 30 1806.1120260035 11 104.493608114757 21 -881.220857485245 31 2017.88602361794 12 104.493609641047 22 -876.169915138752 32 2001.23529816273 13 104.493609641047 23 -876.169915138752 33 2001.23529816273 70 13 0 3DFACE 8 body_half_inside 10 104.493630521182 20 -839.735381226399 30 1806.1120260035 11 104.493609641047 21 -876.169915138752 31 2001.23529816273 12 104.493610580933 22 -867.967629842287 32 1985.88990169709 13 104.493610580933 23 -867.967629842287 33 1985.88990169709 70 13 0 3DFACE 8 body_half_inside 10 104.493630521182 20 -839.735381226399 30 1806.1120260035 11 104.493610580933 21 -867.967629842287 31 1985.88990169709 12 104.493610898294 22 -856.9292108199 32 1972.4395492014 13 104.493610898294 23 -856.9292108199 33 1972.4395492014 70 13 0 3DFACE 8 body_half_inside 10 104.493630521182 20 -839.735381226399 30 1806.1120260035 11 104.493610898294 21 -856.9292108199 31 1972.4395492014 12 104.493610580936 22 -843.478858324204 32 1961.40113017901 13 104.493610580936 23 -843.478858324204 33 1961.40113017901 70 13 0 3DFACE 8 body_half_inside 10 104.493630521182 20 -839.735381226399 30 1806.1120260035 11 104.493610580936 21 -843.478858324204 31 1961.40113017901 12 104.493609641054 22 -828.133461858565 32 1953.19884488255 13 104.493609641054 23 -828.133461858565 33 1953.19884488255 70 13 0 3DFACE 8 body_half_inside 10 104.493630521182 20 -839.735381226399 30 1806.1120260035 11 104.493609641054 21 -828.133461858565 31 1953.19884488255 12 104.49362511582 22 -794.166513284314 32 1801.62389345267 13 104.49362511582 23 -794.166513284314 33 1801.62389345267 70 3 0 3DFACE 8 body_half_inside 10 104.49362511582 20 -794.166513284314 30 1801.62389345267 11 104.493609641054 21 -828.133461858565 31 1953.19884488255 12 104.493608114766 22 -811.482736403359 32 1948.14790253605 13 104.493608114766 23 -811.482736403359 33 1948.14790253605 70 13 0 3DFACE 8 body_half_inside 10 104.49362511582 20 -794.166513284314 30 1801.62389345267 11 104.493608114766 21 -811.482736403359 31 1948.14790253605 12 104.493606060728 22 -794.166559999995 32 1946.44240802131 13 104.493606060728 23 -794.166559999995 33 1946.44240802131 70 13 0 3DFACE 8 body_half_inside 10 104.49362511582 20 -794.166513284314 30 1801.62389345267 11 104.493606060728 21 -794.166559999995 31 1946.44240802131 12 104.493603557875 22 -776.850383596631 32 1948.14790253605 13 104.493603557875 23 -776.850383596631 33 1948.14790253605 70 13 0 3DFACE 8 body_half_inside 10 104.49362511582 20 -794.166513284314 30 1801.62389345267 11 104.493603557875 21 -776.850383596631 31 1948.14790253605 12 104.493618529366 22 -748.597647137485 32 1806.11204423105 13 104.493618529366 23 -748.597647137485 33 1806.11204423105 70 3 0 3DFACE 8 body_half_inside 10 104.493618529366 20 -748.597647137485 30 1806.11204423105 11 104.493603557875 21 -776.850383596631 31 1948.14790253605 12 104.49360070239 22 -760.199658141424 32 1953.19884488255 13 104.49360070239 23 -760.199658141424 33 1953.19884488255 70 13 0 3DFACE 8 body_half_inside 10 104.493618529366 20 -748.597647137485 30 1806.11204423105 11 104.49360070239 21 -760.199658141424 31 1953.19884488255 12 104.493597604008 22 -744.854261675785 32 1961.40113017901 13 104.493597604008 23 -744.854261675785 33 1961.40113017901 70 13 0 3DFACE 8 body_half_inside 10 104.493618529366 20 -748.597647137485 30 1806.11204423105 11 104.493597604008 21 -744.854261675785 31 1961.40113017901 12 104.493611014934 22 -704.779968756623 32 1819.40400122121 13 104.493611014934 23 -704.779968756623 33 1819.40400122121 70 3 0 3DFACE 8 body_half_inside 10 104.493611014934 20 -704.779968756623 30 1819.40400122121 11 104.493597604008 21 -744.854261675785 31 1961.40113017901 12 104.493594381798 22 -731.40390918009 32 1972.4395492014 13 104.493594381798 23 -731.40390918009 33 1972.4395492014 70 13 0 3DFACE 8 body_half_inside 10 104.493611014934 20 -704.779968756623 30 1819.40400122121 11 104.493594381798 21 -731.40390918009 31 1972.4395492014 12 104.493591159588 22 -720.365490157703 32 1985.88990169709 13 104.493591159588 23 -720.365490157703 33 1985.88990169709 70 13 0 3DFACE 8 body_half_inside 10 104.493611014934 20 -704.779968756623 30 1819.40400122121 11 104.493591159588 21 -720.365490157703 31 1985.88990169709 12 104.493588061205 22 -712.163204861239 32 2001.23529816273 13 104.493588061205 23 -712.163204861239 33 2001.23529816273 70 13 0 3DFACE 8 body_half_inside 10 104.493611014934 20 -704.779968756623 30 1819.40400122121 11 104.493588061205 21 -712.163204861239 31 2001.23529816273 12 104.493585205719 22 -707.112262514746 32 2017.88602361794 13 104.493585205719 23 -707.112262514746 33 2017.88602361794 70 13 0 3DFACE 8 body_half_inside 10 104.493611014934 20 -704.779968756623 30 1819.40400122121 11 104.493585205719 21 -707.112262514746 31 2017.88602361794 12 104.493582702864 22 -705.406767999999 32 2035.2022000213 13 104.493582702864 23 -705.406767999999 33 2035.2022000213 70 13 0 3DFACE 8 body_half_inside 10 104.493611014934 20 -704.779968756623 30 1819.40400122121 11 104.493582702864 21 -705.406767999999 31 2035.2022000213 12 104.493554225852 22 -704.780055075949 32 2251.00043457603 13 104.493554225852 23 -704.780055075949 33 2251.00043457603 70 15 0 3DFACE 8 body_half_inside 10 104.493611014934 20 -704.779968756623 30 1819.40400122121 11 104.493554225852 21 -704.780055075949 31 2251.00043457603 12 104.493551752477 22 -664.397444634006 32 2229.41548998005 13 104.493551752477 23 -664.397444634006 33 2229.41548998005 70 13 0 3DFACE 8 body_half_inside 10 104.493611014934 20 -704.779968756623 30 1819.40400122121 11 104.493551752477 21 -664.397444634006 31 2229.41548998005 12 104.4936028613 22 -664.397366948665 32 1840.98896197024 13 104.4936028613 23 -664.397366948665 33 1840.98896197024 70 3 0 3DFACE 8 body_half_inside 10 104.4936028613 20 -664.397366948665 30 1840.98896197024 11 104.493551752477 21 -664.397444634006 31 2229.41548998005 12 104.493550917322 22 -629.00178852022 32 2200.36703756703 13 104.493550917322 23 -629.00178852022 33 2200.36703756703 70 13 0 3DFACE 8 body_half_inside 10 104.4936028613 20 -664.397366948665 30 1840.98896197024 11 104.493550917322 21 -629.00178852022 31 2200.36703756703 12 104.493594381804 22 -629.001722454268 32 1870.03742854153 13 104.493594381804 23 -629.001722454268 33 1870.03742854153 70 3 0 3DFACE 8 body_half_inside 10 104.493594381804 20 -629.001722454268 30 1870.03742854153 11 104.493550917322 21 -629.00178852022 31 2200.36703756703 12 104.493551752482 22 -599.953321948931 32 2164.97139307263 13 104.493551752482 23 -599.953321948931 33 2164.97139307263 70 13 0 3DFACE 8 body_half_inside 10 104.493594381804 20 -629.001722454268 30 1870.03742854153 11 104.493551752482 21 -599.953321948931 31 2164.97139307263 12 104.493585902306 22 -599.953270041246 32 1905.43308465531 13 104.493585902306 23 -599.953270041246 33 1905.43308465531 70 3 0 3DFACE 8 body_half_inside 10 104.493585902306 20 -599.953270041246 30 1905.43308465531 11 104.493551752482 21 -599.953321948931 31 2164.97139307263 12 104.493554225863 22 -578.368361199906 32 2124.58879126467 13 104.493554225863 23 -578.368361199906 33 2124.58879126467 70 13 0 3DFACE 8 body_half_inside 10 104.493585902306 20 -599.953270041246 30 1905.43308465531 11 104.493554225863 21 -578.368361199906 31 2124.58879126467 12 104.493577748671 22 -578.36832544527 32 1945.81569509725 13 104.493577748671 23 -578.36832544527 33 1945.81569509725 70 3 0 3DFACE 8 body_half_inside 10 104.493577748671 20 -578.36832544527 30 1945.81569509725 11 104.493554225863 21 -578.368361199906 31 2124.58879126467 12 104.493558242413 22 -565.076404209743 32 2080.77111288381 13 104.493558242413 23 -565.076404209743 33 2080.77111288381 70 13 0 3DFACE 8 body_half_inside 10 104.493577748671 20 -578.36832544527 30 1945.81569509725 11 104.493558242413 21 -565.076404209743 31 2080.77111288381 12 104.493570234237 22 -565.076385982188 32 1989.6333787949 13 104.493570234237 23 -565.076385982188 33 1989.6333787949 70 3 0 3DFACE 8 body_half_inside 10 104.493570234237 20 -565.076385982188 30 1989.6333787949 11 104.493558242413 21 -565.076404209743 31 2080.77111288381 12 104.49356364778 22 -560.588253431361 32 2035.20224673698 13 104.49356364778 23 -560.588253431361 33 2035.20224673698 70 1 0 3DFACE 8 body_half_inside 10 199.0652044353 20 -923.935662922352 30 1840.9889225062 11 104.493637398531 21 -940.355693033463 31 1854.46446481146 12 104.493637011103 22 -923.935675365986 32 1840.98891006256 13 104.493637011103 23 -923.935675365986 33 1840.98891006256 70 1 0 3DFACE 8 body_half_inside 10 104.493637398531 20 -940.355693033463 30 1854.46446481146 11 199.0652044353 21 -923.935662922352 31 1840.9889225062 12 184.938820049334 22 -929.750233661175 32 1845.76081205901 13 184.938820049334 23 -929.750233661175 33 1845.76081205901 70 1 0 3DFACE 8 body_half_inside 10 104.493577748645 20 -883.553151243369 30 2251.0003988214 11 395.941605262448 21 -839.735434514061 31 2264.29239416004 12 104.493570234214 22 -839.735472862507 32 2264.29235581156 13 104.493570234214 23 -839.735472862507 33 2264.29235581156 70 1 0 3DFACE 8 body_half_inside 10 395.941605262448 20 -839.735434514061 30 2264.29239416004 11 104.493577748645 21 -883.553151243369 31 2251.0003988214 12 301.780746126529 22 -883.553125284517 32 2251.00042478027 13 301.780746126529 23 -883.553125284517 33 2251.00042478027 70 13 0 3DFACE 8 body_half_inside 10 395.941605262448 20 -839.735434514061 30 2264.29239416004 11 301.780746126529 21 -883.553125284517 31 2251.00042478027 12 357.792956438195 22 -863.788607954656 32 2256.9959350164 13 357.792956438195 23 -863.788607954656 33 2256.9959350164 70 1 0 3DFACE 8 body_half_inside 10 104.493554225852 20 -704.780055075949 30 2251.00043457603 11 673.273723074262 21 -664.397369794469 31 2229.41556481967 12 104.493551752477 22 -664.397444634006 32 2229.41548998005 13 104.493551752477 23 -664.397444634006 33 2229.41548998005 70 1 0 3DFACE 8 body_half_inside 10 673.273723074262 20 -664.397369794469 30 2229.41556481967 11 104.493554225852 21 -704.780055075949 31 2251.00043457603 12 612.092889952714 22 -704.779988286527 32 2251.00050136552 13 612.092889952714 23 -704.779988286527 33 2251.00050136552 70 13 0 3DFACE 8 body_half_inside 10 673.273723074262 20 -664.397369794469 30 2229.41556481967 11 612.092889952714 21 -704.779988286527 31 2251.00050136552 12 660.421223817861 22 -674.412868555691 32 2234.76895526921 13 660.421223817861 23 -674.412868555691 33 2234.76895526921 70 13 0 3DFACE 8 body_half_inside 10 673.273723074262 20 -664.397369794469 30 2229.41556481967 11 660.421223817861 21 -674.412868555691 31 2234.76895526921 12 668.764043362589 22 -668.76404336259 32 2231.74959843549 13 668.764043362589 23 -668.76404336259 33 2231.74959843549 70 1 0 3DFACE 8 body_half_inside 10 549.426368572047 20 -748.597588593672 30 1806.11210277493 11 104.49362511582 21 -794.166513284314 31 1801.62389345267 12 104.493618529366 22 -748.597647137485 32 1806.11204423105 13 104.493618529366 23 -748.597647137485 33 1806.11204423105 70 1 0 3DFACE 8 body_half_inside 10 104.49362511582 20 -794.166513284314 30 1801.62389345267 11 549.426368572047 21 -748.597588593672 31 1806.11210277493 12 476.980677127978 22 -794.166464272834 32 1801.6239424642 13 476.980677127978 23 -794.166464272834 33 1801.6239424642 70 3 0 3DFACE 8 body_half_inside 10 476.980677127978 20 -794.166464272834 30 1801.6239424642 11 549.426368572047 21 -748.597588593672 31 1806.11210277493 12 517.019026944331 22 -773.773655132591 32 1803.63246772228 13 517.019026944331 23 -773.773655132591 33 1803.63246772228 70 1 0 3DFACE 8 body_half_inside 10 -191.38931884584 20 -962.179081004757 30 2035.2022000213 11 0.0 21 -976.970215709361 31 1967.39330582966 12 -190.597433982906 22 -958.19800696011 32 1967.39330582966 13 -190.597433982906 23 -958.19800696011 33 1967.39330582966 70 1 0 3DFACE 8 body_half_inside 10 0.0 20 -976.970215709361 30 1967.39330582966 11 -191.38931884584 21 -962.179081004757 31 2035.2022000213 12 -10.2481189704998 22 -977.344465549986 32 1990.50710618793 13 -10.2481189704998 23 -977.344465549986 33 1990.50710618793 70 15 0 3DFACE 8 body_half_inside 10 0.0 20 -976.970215709361 30 1967.39330582966 11 -10.2481189704998 21 -977.344465549986 31 1990.50710618793 12 -1.4681606386561 22 -978.157451656943 32 1989.64235577041 13 -1.4681606386561 23 -978.157451656943 33 1989.64235577041 70 13 0 3DFACE 8 body_half_inside 10 -10.2481189704998 20 -977.344465549986 30 1990.50710618793 11 -191.38931884584 21 -962.179081004757 31 2035.2022000213 12 -18.6906684275082 22 -976.666250664317 32 1993.0681255669 13 -18.6906684275082 23 -976.666250664317 33 1993.0681255669 70 3 0 3DFACE 8 body_half_inside 10 -18.6906684275082 20 -976.666250664317 30 1993.0681255669 11 -191.38931884584 21 -962.179081004757 31 2035.2022000213 12 -26.4713665686843 22 -976.148870417647 32 1997.22699536883 13 -26.4713665686843 23 -976.148870417647 33 1997.22699536883 70 3 0 3DFACE 8 body_half_inside 10 -26.4713665686843 20 -976.148870417647 30 1997.22699536883 11 -191.38931884584 21 -962.179081004757 31 2035.2022000213 12 -33.2912055279291 22 -975.812207442705 32 2002.82389255955 13 -33.2912055279291 23 -975.812207442705 33 2002.82389255955 70 3 0 3DFACE 8 body_half_inside 10 -33.2912055279291 20 -975.812207442705 30 2002.82389255955 11 -191.38931884584 21 -962.179081004757 31 2035.2022000213 12 -38.8881027186488 22 -975.669199508814 32 2009.6437315188 13 -38.8881027186488 23 -975.669199508814 33 2009.6437315188 70 3 0 3DFACE 8 body_half_inside 10 -38.8881027186488 20 -975.669199508814 30 2009.6437315188 11 -191.38931884584 21 -962.179081004757 31 2035.2022000213 12 -43.0469725205791 22 -975.725342330674 32 2017.42442965997 13 -43.0469725205791 23 -975.725342330674 33 2017.42442965997 70 3 0 3DFACE 8 body_half_inside 10 -43.0469725205791 20 -975.725342330674 30 2017.42442965997 11 -191.38931884584 21 -962.179081004757 31 2035.2022000213 12 -45.6079918995534 22 -975.978478371127 32 2025.86697911698 13 -45.6079918995534 23 -975.978478371127 33 2025.86697911698 70 3 0 3DFACE 8 body_half_inside 10 -45.6079918995534 20 -975.978478371127 30 2025.86697911698 11 -191.38931884584 21 -962.179081004757 31 2035.2022000213 12 -46.4727423170739 22 -976.418879754098 32 2034.64693744883 13 -46.4727423170739 23 -976.418879754098 33 2034.64693744883 70 3 0 3DFACE 8 body_half_inside 10 -46.4727423170739 20 -976.418879754098 30 2034.64693744883 11 -191.38931884584 21 -962.179081004757 31 2035.2022000213 12 -46.4180537270787 22 -976.457504352767 32 2035.20220002131 13 -46.4180537270787 23 -976.457504352767 33 2035.20220002131 70 1 0 3DFACE 8 body_half_inside 10 0.0 20 -978.310708745151 30 1989.78695697206 11 0.0 21 -976.970215709361 31 1967.39330582966 12 -1.4681606386561 22 -978.157451656943 32 1989.64235577041 13 -1.4681606386561 23 -978.157451656943 33 1989.64235577041 70 2 0 3DFACE 8 body_half_inside 10 43.4817324497669 20 -976.746706756077 30 2035.2022000213 11 104.493608158504 21 -966.678493599977 31 2103.01109421295 12 104.493617614829 22 -970.737560564704 32 2035.2022000213 13 104.493617614829 23 -970.737560564704 33 2035.2022000213 70 1 0 3DFACE 8 body_half_inside 10 104.493608158504 20 -966.678493599977 30 2103.01109421295 11 43.4817324497669 21 -976.746706756077 31 2035.2022000213 12 42.6716706222411 22 -976.334157259822 32 2043.42689578067 13 42.6716706222411 23 -976.334157259822 33 2043.42689578067 70 13 0 3DFACE 8 body_half_inside 10 104.493608158504 20 -966.678493599977 30 2103.01109421295 11 42.6716706222411 21 -976.334157259822 31 2043.42689578067 12 40.1106512432667 22 -976.081021219369 32 2051.86944523768 13 40.1106512432667 23 -976.081021219369 33 2051.86944523768 70 13 0 3DFACE 8 body_half_inside 10 104.493608158504 20 -966.678493599977 30 2103.01109421295 11 40.1106512432667 21 -976.081021219369 31 2051.86944523768 12 35.9517814413358 22 -976.024878397508 32 2059.65014337886 13 35.9517814413358 23 -976.024878397508 33 2059.65014337886 70 13 0 3DFACE 8 body_half_inside 10 104.493608158504 20 -966.678493599977 30 2103.01109421295 11 35.9517814413358 21 -976.024878397508 31 2059.65014337886 12 30.354884250617 22 -976.1678863314 32 2066.4699823381 13 30.354884250617 23 -976.1678863314 33 2066.4699823381 70 13 0 3DFACE 8 body_half_inside 10 104.493608158504 20 -966.678493599977 30 2103.01109421295 11 30.354884250617 21 -976.1678863314 31 2066.4699823381 12 23.5350452913725 22 -976.504549306342 32 2072.06687952882 13 23.5350452913725 23 -976.504549306342 33 2072.06687952882 70 13 0 3DFACE 8 body_half_inside 10 104.493608158504 20 -966.678493599977 30 2103.01109421295 11 23.5350452913725 21 -976.504549306342 31 2072.06687952882 12 15.754347150196 22 -977.021929553012 32 2076.22574933075 13 15.754347150196 23 -977.021929553012 33 2076.22574933075 70 13 0 3DFACE 8 body_half_inside 10 104.493608158504 20 -966.678493599977 30 2103.01109421295 11 15.754347150196 21 -977.021929553012 31 2076.22574933075 12 7.31179769318775 22 -977.70014443868 32 2078.78676870972 13 7.31179769318775 23 -977.70014443868 33 2078.78676870972 70 13 0 3DFACE 8 body_half_inside 10 104.493608158504 20 -966.678493599977 30 2103.01109421295 11 7.31179769318775 21 -977.70014443868 31 2078.78676870972 12 0.0 22 -978.377185230535 32 2079.50691792559 13 0.0 23 -978.377185230535 33 2079.50691792559 70 13 0 3DFACE 8 body_half_inside 10 104.493608158504 20 -966.678493599977 30 2103.01109421295 11 0.0 21 -978.377185230535 31 2079.50691792559 12 0.0 22 -976.970215709361 32 2103.01109421295 13 0.0 23 -976.970215709361 33 2103.01109421295 70 1 0 3DFACE 8 body_half_inside 10 -190.597433982906 20 -958.19800696011 30 2103.01109421295 11 -46.4180537270787 21 -976.457504352767 31 2035.20220002131 12 -191.38931884584 22 -962.179081004757 32 2035.2022000213 13 -191.38931884584 23 -962.179081004757 33 2035.2022000213 70 1 0 3DFACE 8 body_half_inside 10 -46.4180537270787 20 -976.457504352767 30 2035.20220002131 11 -190.597433982906 21 -958.19800696011 31 2103.01109421295 12 -45.6079918995534 22 -976.044954856512 32 2043.42689578067 13 -45.6079918995534 23 -976.044954856512 33 2043.42689578067 70 3 0 3DFACE 8 body_half_inside 10 -45.6079918995534 20 -976.044954856512 30 2043.42689578067 11 -190.597433982906 21 -958.19800696011 31 2103.01109421295 12 -43.0469725205787 22 -975.791818816059 32 2051.86944523768 13 -43.0469725205787 23 -975.791818816059 33 2051.86944523768 70 3 0 3DFACE 8 body_half_inside 10 -43.0469725205787 20 -975.791818816059 30 2051.86944523768 11 -190.597433982906 21 -958.19800696011 31 2103.01109421295 12 -38.8881027186484 22 -975.735675994198 32 2059.65014337885 13 -38.8881027186484 23 -975.735675994198 33 2059.65014337885 70 3 0 3DFACE 8 body_half_inside 10 -38.8881027186484 20 -975.735675994198 30 2059.65014337885 11 -190.597433982906 21 -958.19800696011 31 2103.01109421295 12 -33.2912055279292 22 -975.878683928089 32 2066.4699823381 13 -33.2912055279292 23 -975.878683928089 33 2066.4699823381 70 3 0 3DFACE 8 body_half_inside 10 -33.2912055279292 20 -975.878683928089 30 2066.4699823381 11 -190.597433982906 21 -958.19800696011 31 2103.01109421295 12 -26.4713665686843 22 -976.215346903032 32 2072.06687952882 13 -26.4713665686843 23 -976.215346903032 33 2072.06687952882 70 3 0 3DFACE 8 body_half_inside 10 -26.4713665686843 20 -976.215346903032 30 2072.06687952882 11 -190.597433982906 21 -958.19800696011 31 2103.01109421295 12 -18.690668427508 22 -976.732727149702 32 2076.22574933075 13 -18.690668427508 23 -976.732727149702 33 2076.22574933075 70 3 0 3DFACE 8 body_half_inside 10 -18.690668427508 20 -976.732727149702 30 2076.22574933075 11 -190.597433982906 21 -958.19800696011 31 2103.01109421295 12 -10.2481189704998 22 -977.41094203537 32 2078.78676870972 13 -10.2481189704998 23 -977.41094203537 33 2078.78676870972 70 3 0 3DFACE 8 body_half_inside 10 -10.2481189704998 20 -977.41094203537 30 2078.78676870972 11 -190.597433982906 21 -958.19800696011 31 2103.01109421295 12 -1.46816063865592 22 -978.223928142328 32 2079.65151912724 13 -1.46816063865592 23 -978.223928142328 33 2079.65151912724 70 3 0 3DFACE 8 body_half_inside 10 -1.46816063865592 20 -978.223928142328 30 2079.65151912724 11 0.0 21 -976.970215709361 31 2103.01109421295 12 0.0 22 -978.377185230535 32 2079.50691792559 13 0.0 23 -978.377185230535 33 2079.50691792559 70 1 0 3DFACE 8 body_half_inside 10 0.0 20 -976.970215709361 30 2103.01109421295 11 -1.46816063865592 21 -978.223928142328 31 2079.65151912724 12 -190.597433982906 22 -958.19800696011 32 2103.01109421295 13 -190.597433982906 23 -958.19800696011 33 2103.01109421295 70 3 0 3DFACE 8 body_half_inside 10 0.0 20 -978.310708745151 30 1989.78695697206 11 104.493626002977 21 -966.678491842449 31 1967.39330582966 12 0.0 22 -976.970215709361 32 1967.39330582966 13 0.0 23 -976.970215709361 33 1967.39330582966 70 1 0 3DFACE 8 body_half_inside 10 104.493626002977 20 -966.678491842449 30 1967.39330582966 11 0.0 21 -978.310708745151 31 1989.78695697206 12 7.31179769318757 22 -977.633667953296 32 1990.50710618793 13 7.31179769318757 23 -977.633667953296 33 1990.50710618793 70 13 0 3DFACE 8 body_half_inside 10 104.493626002977 20 -966.678491842449 30 1967.39330582966 11 7.31179769318757 21 -977.633667953296 31 1990.50710618793 12 15.754347150196 22 -976.955453067628 32 1993.0681255669 13 15.754347150196 23 -976.955453067628 33 1993.0681255669 70 13 0 3DFACE 8 body_half_inside 10 104.493626002977 20 -966.678491842449 30 1967.39330582966 11 15.754347150196 21 -976.955453067628 31 1993.0681255669 12 104.493617614829 22 -970.737560564704 32 2035.2022000213 13 104.493617614829 23 -970.737560564704 33 2035.2022000213 70 3 0 3DFACE 8 body_half_inside 10 104.493617614829 20 -970.737560564704 30 2035.2022000213 11 15.754347150196 21 -976.955453067628 31 1993.0681255669 12 23.5350452913723 22 -976.438072820957 32 1997.22699536883 13 23.5350452913723 23 -976.438072820957 33 1997.22699536883 70 13 0 3DFACE 8 body_half_inside 10 104.493617614829 20 -970.737560564704 30 2035.2022000213 11 23.5350452913723 21 -976.438072820957 31 1997.22699536883 12 30.3548842506176 22 -976.101409846015 32 2002.82389255955 13 30.3548842506176 23 -976.101409846015 33 2002.82389255955 70 13 0 3DFACE 8 body_half_inside 10 104.493617614829 20 -970.737560564704 30 2035.2022000213 11 30.3548842506176 21 -976.101409846015 31 2002.82389255955 12 35.9517814413364 22 -975.958401912124 32 2009.6437315188 13 35.9517814413364 23 -975.958401912124 33 2009.6437315188 70 13 0 3DFACE 8 body_half_inside 10 104.493617614829 20 -970.737560564704 30 2035.2022000213 11 35.9517814413364 21 -975.958401912124 31 2009.6437315188 12 40.110651243267 22 -976.014544733984 32 2017.42442965997 13 40.110651243267 23 -976.014544733984 33 2017.42442965997 70 13 0 3DFACE 8 body_half_inside 10 104.493617614829 20 -970.737560564704 30 2035.2022000213 11 40.110651243267 21 -976.014544733984 31 2017.42442965997 12 42.6716706222411 22 -976.267680774437 32 2025.86697911698 13 42.6716706222411 23 -976.267680774437 33 2025.86697911698 70 13 0 3DFACE 8 body_half_inside 10 104.493617614829 20 -970.737560564704 30 2035.2022000213 11 42.6716706222411 21 -976.267680774437 31 2025.86697911698 12 43.5364210397618 22 -976.708082157409 32 2034.64693744883 13 43.5364210397618 23 -976.708082157409 33 2034.64693744883 70 13 0 3DFACE 8 body_half_inside 10 104.493617614829 20 -970.737560564704 30 2035.2022000213 11 43.5364210397618 21 -976.708082157409 31 2034.64693744883 12 43.4817324497669 22 -976.746706756077 32 2035.2022000213 13 43.4817324497669 23 -976.746706756077 33 2035.2022000213 70 1 0 3DFACE 8 leg_half 10 166.455212576234 20 -280.29408 30 1639.76100453833 11 176.700983922342 21 -186.86272 31 1605.98522290042 12 176.700983922341 22 -280.29408 32 1605.98522290042 13 176.700983922341 23 -280.29408 33 1605.98522290042 70 1 0 3DFACE 8 leg_half 10 176.700983922342 20 -186.86272 30 1605.98522290042 11 166.455212576234 21 -280.29408 31 1639.76100453833 12 166.455212576235 22 -186.86272 32 1639.76100453833 13 166.455212576235 23 -186.86272 33 1639.76100453833 70 1 0 3DFACE 8 leg_half 10 149.816982737509 20 -280.29408 30 1670.8889431717 11 166.455212576235 21 -186.86272 31 1639.76100453833 12 166.455212576234 22 -280.29408 32 1639.76100453833 13 166.455212576234 23 -280.29408 33 1639.76100453833 70 1 0 3DFACE 8 leg_half 10 166.455212576235 20 -186.86272 30 1639.76100453833 11 149.816982737509 21 -280.29408 31 1670.8889431717 12 149.816982737509 22 -186.86272 32 1670.8889431717 13 149.816982737509 23 -186.86272 33 1670.8889431717 70 1 0 3DFACE 8 leg_half 10 93.530885442671 20 -186.862719999999 30 242.726639240051 11 93.5308854426706 21 -280.294079999998 31 1315.22236639941 12 93.5308854426706 22 -280.294079999998 32 242.726639192693 13 93.5308854426706 23 -280.294079999998 33 242.726639192693 70 1 0 3DFACE 8 leg_half 10 93.5308854426706 20 -280.294079999998 30 1315.22236639941 11 93.530885442671 21 -186.862719999999 31 242.726639240051 12 93.530885442671 22 -186.862719999998 32 1315.22236639941 13 93.530885442671 23 -186.862719999998 33 1315.22236639941 70 1 0 3DFACE 8 leg_half 10 100.141825844156 20 -280.29408 30 1421.1550651442 11 127.42569224804 21 -186.86272 31 1443.54635563367 12 100.141825844157 22 -186.86272 32 1421.1550651442 13 100.141825844157 23 -186.86272 33 1421.1550651442 70 1 0 3DFACE 8 leg_half 10 127.42569224804 20 -186.86272 30 1443.54635563367 11 100.141825844156 21 -280.29408 31 1421.1550651442 12 127.425692248039 22 -280.29408 32 1443.54635563367 13 127.425692248039 23 -280.29408 33 1443.54635563367 70 1 0 3DFACE 8 leg_half 10 653.29151769208 20 -646.340639254846 30 5.83945951983237 11 642.023925698404 21 -654.528573978645 31 -3.60955709766131e-12 12 642.023925698403 22 -654.528573978644 32 5.83945951983345 13 642.023925698403 23 -654.528573978644 33 5.83945951983345 70 1 0 3DFACE 8 leg_half 10 642.023925698404 20 -654.528573978645 30 -3.60955709766131e-12 11 653.29151769208 21 -646.340639254846 31 5.83945951983237 12 653.29151769208 22 -646.340639254847 32 -4.51194637207664e-12 13 653.29151769208 23 -646.340639254847 33 -4.51194637207664e-12 70 1 0 3DFACE 8 leg_half 10 149.816982737509 20 -280.29408 30 1670.8889431717 11 127.425692248039 21 -186.862719999999 31 1698.17280957558 12 149.816982737509 22 -186.86272 32 1670.8889431717 13 149.816982737509 23 -186.86272 33 1670.8889431717 70 1 0 3DFACE 8 leg_half 10 127.425692248039 20 -186.862719999999 30 1698.17280957558 11 149.816982737509 21 -280.29408 31 1670.8889431717 12 127.425692248039 22 -280.29408 32 1698.17280957558 13 127.425692248039 23 -280.29408 33 1698.17280957558 70 1 0 3DFACE 8 leg_half 10 806.270901222105 20 56.1856515497994 30 23.3578380793657 11 847.545902396362 21 56.1856515498016 31 1.46187062455283e-11 12 806.270901222104 22 56.1856515498016 32 1.46187062455283e-11 13 806.270901222104 23 56.1856515498016 33 1.46187062455283e-11 70 1 0 3DFACE 8 leg_half 10 847.545902396362 20 56.1856515498016 30 1.46187062455283e-11 11 806.270901222105 21 56.1856515497994 31 23.3578380793657 12 847.545902396365 22 56.1856515497976 32 23.3578380793863 13 847.545902396365 23 56.1856515497976 33 23.3578380793863 70 1 0 3DFACE 8 leg_half 10 461.269999782869 20 -697.7398487668 30 192.761586394987 11 464.090791712392 21 -720.287768351753 31 170.665180957976 12 464.090789844927 22 -696.627200742591 32 191.294034464012 13 464.090789844927 23 -696.627200742591 33 191.294034464012 70 1 0 3DFACE 8 leg_half 10 464.090791712392 20 -720.287768351753 30 170.665180957976 11 461.269999782869 21 -697.7398487668 31 192.761586394987 12 461.270001665299 22 -721.590015329221 32 171.967427935313 13 461.270001665299 23 -721.590015329221 33 171.967427935313 70 1 0 3DFACE 8 leg_half 10 793.410423174187 20 -566.321374409616 30 23.357838010706 11 792.007218281129 21 -582.09079684746 31 40.22369700007 12 793.309565768095 22 -569.303680096418 32 23.3578380100164 13 793.309565768095 23 -569.303680096418 33 23.3578380100164 70 1 0 3DFACE 8 leg_half 10 792.007218281129 20 -582.09079684746 30 40.22369700007 11 793.410423174187 21 -566.321374409616 31 23.357838010706 12 792.007217306199 22 -577.494024343961 32 43.2377297488181 13 792.007217306199 23 -577.494024343961 33 43.2377297488181 70 1 0 3DFACE 8 leg_half 10 624.955341833487 20 -738.830110282484 30 109.907610082888 11 599.602155913773 21 -724.524747581215 31 134.576835581469 12 599.602150844536 22 -740.196470143783 32 110.675521501907 13 599.602150844536 23 -740.196470143783 33 110.675521501907 70 1 0 3DFACE 8 leg_half 10 599.602155913773 20 -724.524747581215 30 134.576835581469 11 624.955341833487 21 -738.830110282484 31 109.907610082888 12 624.955346864755 22 -723.275770827742 32 133.629900413365 13 624.955346864755 23 -723.275770827742 33 133.629900413365 70 1 0 3DFACE 8 leg_half 10 436.335612575248 20 -749.104396759147 30 83.5375802413299 11 439.690596528004 21 -756.366969281262 31 56.4649968373303 12 436.335601310833 22 -757.591910929275 32 56.7629871862785 13 436.335601310833 23 -757.591910929275 33 56.7629871862785 70 1 0 3DFACE 8 leg_half 10 439.690596528004 20 -756.366969281262 30 56.4649968373303 11 436.335612575248 21 -749.104396759147 31 83.5375802413299 12 439.690607723364 22 -747.931486742049 32 83.0754516399063 13 439.690607723364 23 -747.931486742049 33 83.0754516399063 70 1 0 3DFACE 8 leg_half 10 439.690607723364 20 -747.931486742049 30 83.0754516399063 11 442.839466299903 21 -754.702000509797 31 56.0599621810555 12 439.690596528004 22 -756.366969281262 32 56.4649968373303 13 439.690596528004 23 -756.366969281262 33 56.4649968373303 70 1 0 3DFACE 8 leg_half 10 442.839466299903 20 -754.702000509797 30 56.0599621810555 11 439.690607723364 21 -747.931486742049 31 83.0754516399063 12 442.839477401402 22 -746.337240593148 32 82.4473163912804 13 442.839477401402 23 -746.337240593148 33 82.4473163912804 70 1 0 3DFACE 8 leg_half 10 458.222214863865 20 -789.666464186592 30 31.8757394304439 11 455.006085098156 21 -785.239686816274 31 63.4887904110616 12 455.006069025402 22 -790.658170470477 32 31.9771884161607 13 455.006069025402 23 -790.658170470477 33 31.9771884161607 70 1 0 3DFACE 8 leg_half 10 455.006085098156 20 -785.239686816274 30 63.4887904110616 11 458.222214863865 21 -789.666464186592 31 31.8757394304439 12 458.222230868175 22 -784.271054681722 32 63.2531519626526 13 458.222230868175 23 -784.271054681722 33 63.2531519626526 70 1 0 3DFACE 8 leg_half 10 764.995900047839 20 -186.86272 30 23.3578380793295 11 0.00176534768975319 21 -186.86272 31 5.83945951983706 12 0.00176534768970384 22 -186.86272 32 23.3578380793295 13 0.00176534768970384 23 -186.86272 33 23.3578380793295 70 1 0 3DFACE 8 leg_half 10 0.00176534768975319 20 -186.86272 30 5.83945951983706 11 764.995900047839 21 -186.86272 31 23.3578380793295 12 764.995900047839 22 -186.86272 32 5.83945951983706 13 764.995900047839 23 -186.86272 33 5.83945951983706 70 1 0 3DFACE 8 leg_half 10 472.10720415349 20 -665.162054034067 30 199.228411696097 11 470.677523524142 21 -692.042929592268 31 185.247506781241 12 472.107209463225 22 -690.197307940468 32 182.813182295542 13 472.107209463225 23 -690.197307940468 33 182.813182295542 70 1 0 3DFACE 8 leg_half 10 470.677523524142 20 -692.042929592268 30 185.247506781241 11 472.10720415349 21 -665.162054034067 31 199.228411696097 12 470.677518140403 22 -666.658744301589 32 201.891525102388 13 470.677518140403 23 -666.658744301589 33 201.891525102388 70 1 0 3DFACE 8 leg_half 10 602.133251163261 20 -548.67314817835 30 186.220486963908 11 454.66772029492 21 -186.86272 31 186.220486963908 12 602.133251163261 22 -186.86272 32 186.220486963908 13 602.133251163261 23 -186.86272 33 186.220486963908 70 1 0 3DFACE 8 leg_half 10 454.66772029492 20 -186.86272 30 186.220486963908 11 602.133251163261 21 -548.67314817835 31 186.220486963908 12 454.66772029492 22 -548.673192057237 32 186.220486963908 13 454.66772029492 23 -548.673192057237 33 186.220486963908 70 1 0 3DFACE 8 leg_half 10 673.957358037872 20 -603.792752711355 30 197.311473394829 11 696.758793128571 21 -625.025897634329 31 178.836736613072 12 696.758783079627 22 -601.140380260496 32 186.408417229293 13 696.758783079627 23 -601.140380260496 33 186.408417229293 70 1 0 3DFACE 8 leg_half 10 696.758793128571 20 -625.025897634329 30 178.836736613072 11 673.957358037872 21 -603.792752711355 31 197.311473394829 12 673.957368701467 22 -629.139245228331 32 189.276665394806 13 673.957368701467 23 -629.139245228331 33 189.276665394806 70 1 0 3DFACE 8 leg_half 10 473.71772029492 20 -549.195745909472 30 217.326639240051 11 599.602098887118 21 -186.86272 31 217.326639240051 12 473.71772029492 22 -186.86272 32 217.326639240051 13 473.71772029492 23 -186.86272 33 217.326639240051 70 1 0 3DFACE 8 leg_half 10 599.602098887118 20 -186.86272 30 217.326639240051 11 473.71772029492 21 -549.195745909472 31 217.326639240051 12 599.602098887118 22 -549.195708452133 32 217.326639240051 13 599.602098887118 23 -549.195708452133 33 217.326639240051 70 1 0 3DFACE 8 leg_half 10 93.5308854426706 20 -280.294079999998 30 242.726639192693 11 0.112465277083136 21 -280.29408 31 1390.81149035281 12 0.000487681863777811 22 -280.294079999998 32 242.726639192693 13 0.000487681863777811 23 -280.294079999998 33 242.726639192693 70 1 0 3DFACE 8 leg_half 10 0.112465277083136 20 -280.29408 30 1390.81149035281 11 93.5308854426706 21 -280.294079999998 31 242.726639192693 12 35.2381055728783 22 -280.29408 32 1394.27106395937 13 35.2381055728783 23 -280.29408 33 1394.27106395937 70 3 0 3DFACE 8 leg_half 10 35.2381055728783 20 -280.29408 30 1394.27106395937 11 93.5308854426706 21 -280.294079999998 31 242.726639192693 12 69.0138872107921 22 -280.29408 32 1404.51683530547 13 69.0138872107921 23 -280.29408 33 1404.51683530547 70 3 0 3DFACE 8 leg_half 10 69.0138872107921 20 -280.29408 30 1404.51683530547 11 93.5308854426706 21 -280.294079999998 31 242.726639192693 12 93.5308854426706 22 -280.294079999998 32 1315.22236639941 13 93.5308854426706 23 -280.294079999998 33 1315.22236639941 70 13 0 3DFACE 8 leg_half 10 69.0138872107921 20 -280.29408 30 1404.51683530547 11 93.5308854426706 21 -280.294079999998 31 1315.22236639941 12 100.141825844156 22 -280.29408 32 1421.1550651442 13 100.141825844156 23 -280.29408 33 1421.1550651442 70 3 0 3DFACE 8 leg_half 10 100.141825844156 20 -280.29408 30 1421.1550651442 11 93.5308854426706 21 -280.294079999998 31 1315.22236639941 12 221.73980966547 22 -280.29408 32 1435.59863370269 13 221.73980966547 23 -280.29408 33 1435.59863370269 70 13 0 3DFACE 8 leg_half 10 100.141825844156 20 -280.29408 30 1421.1550651442 11 221.73980966547 21 -280.29408 31 1435.59863370269 12 127.425692248039 22 -280.29408 32 1443.54635563367 13 127.425692248039 23 -280.29408 33 1443.54635563367 70 3 0 3DFACE 8 leg_half 10 127.425692248039 20 -280.29408 30 1443.54635563367 11 221.73980966547 21 -280.29408 31 1435.59863370269 12 149.816982737509 22 -280.29408 32 1470.83022203755 13 149.816982737509 23 -280.29408 33 1470.83022203755 70 3 0 3DFACE 8 leg_half 10 149.816982737509 20 -280.29408 30 1470.83022203755 11 221.73980966547 21 -280.29408 31 1435.59863370269 12 166.455212576234 22 -280.29408 32 1501.95816067091 13 166.455212576234 23 -280.29408 33 1501.95816067091 70 3 0 3DFACE 8 leg_half 10 166.455212576234 20 -280.29408 30 1501.95816067091 11 221.73980966547 21 -280.29408 31 1435.59863370269 12 176.700983922341 22 -280.29408 32 1535.73394230883 13 176.700983922341 23 -280.29408 33 1535.73394230883 70 3 0 3DFACE 8 leg_half 10 176.700983922341 20 -280.29408 30 1535.73394230883 11 221.73980966547 21 -280.29408 31 1435.59863370269 12 180.160557528893 22 -280.29408 32 1570.85958260462 13 180.160557528893 23 -280.29408 33 1570.85958260462 70 3 0 3DFACE 8 leg_half 10 180.160557528893 20 -280.29408 30 1570.85958260462 11 221.73980966547 21 -280.29408 31 1435.59863370269 12 180.185723589149 22 -280.29408 32 1903.25211107687 13 180.185723589149 23 -280.29408 33 1903.25211107687 70 15 0 3DFACE 8 leg_half 10 35.2430152276776 20 -280.294079999999 30 2079.8653122236 11 0.179983602711226 21 -280.294079999999 31 2125.50255258978 12 0.112465277083137 22 -280.294079999999 32 2083.32536938894 13 0.112465277083137 23 -280.294079999999 33 2083.32536938894 70 1 0 3DFACE 8 leg_half 10 0.179983602711226 20 -280.294079999999 30 2125.50255258978 11 35.2430152276776 21 -280.294079999999 31 2079.8653122236 12 46.8683973136999 22 -280.294079999999 32 2125.50255258978 13 46.8683973136999 23 -280.294079999999 33 2125.50255258978 70 3 0 3DFACE 8 leg_half 10 46.8683973136999 20 -280.294079999999 30 2125.50255258978 11 35.2430152276776 21 -280.294079999999 31 2079.8653122236 12 69.0235178451101 22 -280.294079999999 32 2069.61810878401 13 69.0235178451101 23 -280.294079999999 33 2069.61810878401 70 13 0 3DFACE 8 leg_half 10 46.8683973136999 20 -280.294079999999 30 2125.50255258978 11 69.0235178451101 21 -280.294079999999 31 2069.61810878401 12 46.8683973136999 22 -280.294079999999 32 2499.20806403607 13 46.8683973136999 23 -280.294079999999 33 2499.20806403607 70 3 0 3DFACE 8 leg_half 10 46.8683973136999 20 -280.294079999999 30 2499.20806403607 11 69.0235178451101 21 -280.294079999999 31 2069.61810878401 12 93.6524710483026 22 -280.294079999999 32 2499.20806403607 13 93.6524710483026 23 -280.294079999999 33 2499.20806403607 70 3 0 3DFACE 8 leg_half 10 93.6524710483026 20 -280.294079999999 30 2499.20806403607 11 69.0235178451101 21 -280.294079999999 31 2069.61810878401 12 100.155807358117 22 -280.294079999999 32 2052.97755335166 13 100.155807358117 23 -280.294079999999 33 2052.97755335166 70 13 0 3DFACE 8 leg_half 10 93.6524710483026 20 -280.294079999999 30 2499.20806403607 11 100.155807358117 21 -280.294079999999 31 2052.97755335166 12 123.089851596878 22 -280.294079999999 32 2224.76609686633 13 123.089851596878 23 -280.294079999999 33 2224.76609686633 70 3 0 3DFACE 8 leg_half 10 123.089851596878 20 -280.294079999999 30 2224.76609686633 11 100.155807358117 21 -280.294079999999 31 2052.97755335166 12 127.443487339902 22 -280.29408 32 2030.58313313969 13 127.443487339902 23 -280.29408 33 2030.58313313969 70 13 0 3DFACE 8 leg_half 10 123.089851596878 20 -280.294079999999 30 2224.76609686633 11 127.443487339902 21 -280.29408 31 2030.58313313969 12 221.73980966547 22 -280.29408 32 2013.4439613934 13 221.73980966547 23 -280.29408 33 2013.4439613934 70 3 0 3DFACE 8 leg_half 10 221.73980966547 20 -280.29408 30 2013.4439613934 11 127.443487339902 21 -280.29408 31 2030.58313313969 12 149.837907551873 22 -280.29408 32 2003.29545315791 13 149.837907551873 23 -280.29408 33 2003.29545315791 70 13 0 3DFACE 8 leg_half 10 221.73980966547 20 -280.29408 30 2013.4439613934 11 149.837907551873 21 -280.29408 31 2003.29545315791 12 166.478462984219 22 -280.29408 32 1972.1631636449 13 166.478462984219 23 -280.29408 33 1972.1631636449 70 13 0 3DFACE 8 leg_half 10 221.73980966547 20 -280.29408 30 2013.4439613934 11 166.478462984219 21 -280.29408 31 1972.1631636449 12 176.725666423806 22 -280.29408 32 1938.38266102747 13 176.725666423806 23 -280.29408 33 1938.38266102747 70 13 0 3DFACE 8 leg_half 10 221.73980966547 20 -280.29408 30 2013.4439613934 11 176.725666423806 21 -280.29408 31 1938.38266102747 12 180.185723589149 22 -280.29408 32 1903.25211107687 13 180.185723589149 23 -280.29408 33 1903.25211107687 70 13 0 3DFACE 8 leg_half 10 221.73980966547 20 -280.29408 30 2013.4439613934 11 180.185723589149 21 -280.29408 31 1903.25211107687 12 221.73980966547 22 -280.29408 32 1435.59863370269 13 221.73980966547 23 -280.29408 33 1435.59863370269 70 3 0 3DFACE 8 leg_half 10 100.141825844156 20 -280.29408 30 1720.56410006505 11 100.155807358117 21 -280.29408 31 1753.52666880208 12 69.3272894690769 22 -280.29408 32 1737.04848268553 13 69.3272894690769 23 -280.29408 33 1737.04848268553 70 1 0 3DFACE 8 leg_half 10 100.155807358117 20 -280.29408 30 1753.52666880208 11 100.141825844156 21 -280.29408 31 1720.56410006505 12 127.425692248039 22 -280.29408 32 1698.17280957558 13 127.425692248039 23 -280.29408 33 1698.17280957558 70 13 0 3DFACE 8 leg_half 10 100.155807358117 20 -280.29408 30 1753.52666880208 11 127.425692248039 21 -280.29408 31 1698.17280957558 12 127.443487339902 22 -280.29408 32 1775.92108901406 13 127.443487339902 23 -280.29408 33 1775.92108901406 70 3 0 3DFACE 8 leg_half 10 127.443487339902 20 -280.29408 30 1775.92108901406 11 127.425692248039 21 -280.29408 31 1698.17280957558 12 149.816982737509 22 -280.29408 32 1670.8889431717 13 149.816982737509 23 -280.29408 33 1670.8889431717 70 13 0 3DFACE 8 leg_half 10 127.443487339902 20 -280.29408 30 1775.92108901406 11 149.816982737509 21 -280.29408 31 1670.8889431717 12 149.837907551873 22 -280.29408 32 1803.20876899584 13 149.837907551873 23 -280.29408 33 1803.20876899584 70 3 0 3DFACE 8 leg_half 10 149.837907551873 20 -280.29408 30 1803.20876899584 11 149.816982737509 21 -280.29408 31 1670.8889431717 12 166.455212576234 22 -280.29408 32 1639.76100453833 13 166.455212576234 23 -280.29408 33 1639.76100453833 70 13 0 3DFACE 8 leg_half 10 149.837907551873 20 -280.29408 30 1803.20876899584 11 166.455212576234 21 -280.29408 31 1639.76100453833 12 166.478462984219 22 -280.29408 32 1834.34105850885 13 166.478462984219 23 -280.29408 33 1834.34105850885 70 3 0 3DFACE 8 leg_half 10 166.478462984219 20 -280.29408 30 1834.34105850885 11 166.455212576234 21 -280.29408 31 1639.76100453833 12 176.700983922341 22 -280.29408 32 1605.98522290042 13 176.700983922341 23 -280.29408 33 1605.98522290042 70 13 0 3DFACE 8 leg_half 10 166.478462984219 20 -280.29408 30 1834.34105850885 11 176.700983922341 21 -280.29408 31 1605.98522290042 12 176.725666423806 22 -280.29408 32 1868.12156112628 13 176.725666423806 23 -280.29408 33 1868.12156112628 70 3 0 3DFACE 8 leg_half 10 176.725666423806 20 -280.29408 30 1868.12156112628 11 176.700983922341 21 -280.29408 31 1605.98522290042 12 180.160557528893 22 -280.29408 32 1570.85958260462 13 180.160557528893 23 -280.29408 33 1570.85958260462 70 13 0 3DFACE 8 leg_half 10 176.725666423806 20 -280.29408 30 1868.12156112628 11 180.160557528893 21 -280.29408 31 1570.85958260462 12 180.185723589149 22 -280.29408 32 1903.25211107687 13 180.185723589149 23 -280.29408 33 1903.25211107687 70 3 0 3DFACE 8 leg_half 10 453.575559198051 20 -733.364267924859 30 77.3359522782304 11 454.431270729568 21 -719.25912090813 31 98.9086120013344 12 454.431263343628 22 -730.119576764422 32 76.0575414220674 13 454.431263343628 23 -730.119576764422 33 76.0575414220674 70 1 0 3DFACE 8 leg_half 10 454.431270729568 20 -719.25912090813 30 98.9086120013344 11 453.575559198051 21 -733.364267924859 31 77.3359522782304 12 453.575566723046 22 -722.299342389133 32 100.617239704551 13 453.575566723046 23 -722.299342389133 33 100.617239704551 70 1 0 3DFACE 8 leg_half 10 813.09098561462 20 -692.336726612815 30 -1.92750349015114e-10 11 794.401547685759 21 -720.307447118137 31 23.3578380791593 12 794.401547685756 22 -720.307447118133 32 -2.12061479487602e-10 13 794.401547685756 23 -720.307447118133 33 -2.12061479487602e-10 70 1 0 3DFACE 8 leg_half 10 794.401547685759 20 -720.307447118137 30 23.3578380791593 11 813.09098561462 21 -692.336726612815 31 -1.92750349015114e-10 12 813.090985614623 22 -692.336726612819 32 23.3578380791782 13 813.090985614623 23 -692.336726612819 33 23.3578380791782 70 1 0 3DFACE 8 leg_half 10 473.642038802113 20 -579.415028713919 30 219.67849237548 11 473.10173725466 21 -608.824016722648 31 217.993091128508 12 473.642053400866 22 -608.036762247305 32 214.756927441262 13 473.642053400866 23 -608.036762247305 33 214.756927441262 70 1 0 3DFACE 8 leg_half 10 473.10173725466 20 -608.824016722648 30 217.993091128508 11 473.642038802113 21 -579.415028713919 31 219.67849237548 12 473.101722427237 22 -579.753960348852 32 222.99174608133 13 473.101722427237 23 -579.753960348852 33 222.99174608133 70 1 0 3DFACE 8 leg_half 10 779.024166993188 20 -635.678245979518 30 51.9354404084483 11 767.829328484993 21 -662.181333229905 31 49.2897100106075 12 779.024163430099 22 -640.917494008958 32 40.9117386331972 13 779.024163430099 23 -640.917494008958 33 40.9117386331972 70 1 0 3DFACE 8 leg_half 10 767.829328484993 20 -662.181333229905 30 49.2897100106075 11 779.024166993188 21 -635.678245979518 31 51.9354404084483 12 767.829332959368 22 -655.602108768076 32 63.1328050448759 13 767.829332959368 23 -655.602108768076 33 63.1328050448759 70 1 0 3DFACE 8 leg_half 10 779.024169157982 20 -611.764971197169 30 79.3631234201936 11 767.829336589646 21 -637.125515922866 31 87.5029285374647 12 779.024169884095 22 -620.964740882273 32 71.3421534984996 13 779.024169884095 23 -620.964740882273 33 71.3421534984996 70 1 0 3DFACE 8 leg_half 10 767.829336589646 20 -637.125515922866 30 87.5029285374647 11 779.024169157982 21 -611.764971197169 31 79.3631234201936 12 767.829335677824 22 -625.572837100386 32 97.5753208387769 13 767.829335677824 23 -625.572837100386 33 97.5753208387769 70 1 0 3DFACE 8 leg_half 10 450.471125884842 20 -695.789522350054 30 146.166934958744 11 452.247013852634 21 -673.811261880626 31 161.200429262907 12 452.247015413237 22 -693.583909707096 32 143.961322316008 13 452.247015413237 23 -693.583909707096 33 143.961322316008 70 1 0 3DFACE 8 leg_half 10 452.247013852634 20 -673.811261880626 30 161.200429262907 11 450.471125884842 21 -695.789522350054 31 146.166934958744 12 450.471124298894 22 -675.695750953173 32 163.686018751541 13 450.471124298894 23 -675.695750953173 33 163.686018751541 70 1 0 3DFACE 8 leg_half 10 847.545902396357 20 -186.86272 30 3.60955709766131e-13 11 806.270901222104 21 56.1856515498016 31 1.46187062455283e-11 12 847.545902396362 22 56.1856515498016 32 1.46187062455283e-11 13 847.545902396362 23 56.1856515498016 33 1.46187062455283e-11 70 1 0 3DFACE 8 leg_half 10 806.270901222104 20 56.1856515498016 30 1.46187062455283e-11 11 847.545902396357 21 -186.86272 31 3.60955709766131e-13 12 700.992216732393 22 -563.749226612815 32 -1.11896270027501e-11 13 700.992216732393 23 -563.749226612815 33 -1.11896270027501e-11 70 3 0 3DFACE 8 leg_half 10 700.992216732393 20 -563.749226612815 30 -1.11896270027501e-11 11 847.545902396357 21 -186.86272 31 3.60955709766131e-13 12 847.545902396357 22 -563.749226612815 32 1.80477854883065e-13 13 847.545902396357 23 -563.749226612815 33 1.80477854883065e-13 70 13 0 3DFACE 8 leg_half 10 700.992216732393 20 -563.749226612815 30 -1.11896270027501e-11 11 847.545902396357 21 -563.749226612815 31 1.80477854883065e-13 12 843.130722681614 22 -608.45291709122 32 -4.11489509133389e-11 13 843.130722681614 23 -608.45291709122 33 -4.11489509133389e-11 70 13 0 3DFACE 8 leg_half 10 700.992216732393 20 -563.749226612815 30 -1.11896270027501e-11 11 843.130722681614 21 -608.45291709122 31 -4.11489509133389e-11 12 698.091838084213 22 -577.37232127131 32 -1.01067598734517e-11 13 698.091838084213 23 -577.37232127131 33 -1.01067598734517e-11 70 3 0 3DFACE 8 leg_half 10 698.091838084213 20 -577.37232127131 30 -1.01067598734517e-11 11 843.130722681614 21 -608.45291709122 31 -4.11489509133389e-11 12 693.784141830299 22 -590.617873632807 32 -9.20437059903634e-12 13 693.784141830299 23 -590.617873632807 33 -9.20437059903634e-12 70 3 0 3DFACE 8 leg_half 10 693.784141830299 20 -590.617873632807 30 -9.20437059903634e-12 11 843.130722681614 21 -608.45291709122 31 -4.11489509133389e-11 12 688.116269958089 22 -603.340928801176 32 -8.48245917950408e-12 13 688.116269958089 23 -603.340928801176 33 -8.48245917950408e-12 70 3 0 3DFACE 8 leg_half 10 688.116269958089 20 -603.340928801176 30 -8.48245917950408e-12 11 843.130722681614 21 -608.45291709122 31 -4.11489509133389e-11 12 681.150249762187 22 -615.402249914861 32 -7.58006990508875e-12 13 681.150249762187 23 -615.402249914861 33 -7.58006990508875e-12 70 3 0 3DFACE 8 leg_half 10 681.150249762187 20 -615.402249914861 30 -7.58006990508875e-12 11 843.130722681614 21 -608.45291709122 31 -4.11489509133389e-11 12 838.782876772249 22 -630.311014537056 32 -1.18393472803291e-10 13 838.782876772249 23 -630.311014537056 33 -1.18393472803291e-10 70 13 0 3DFACE 8 leg_half 10 681.150249762187 20 -615.402249914861 30 -7.58006990508875e-12 11 838.782876772249 21 -630.311014537056 31 -1.18393472803291e-10 12 672.962315038389 22 -626.669841908538 32 -6.49720277579036e-12 13 672.962315038389 23 -626.669841908538 33 -6.49720277579036e-12 70 3 0 3DFACE 8 leg_half 10 672.962315038389 20 -626.669841908538 30 -6.49720277579036e-12 11 838.782876772249 21 -630.311014537056 31 -1.18393472803291e-10 12 663.642071806514 22 -637.020396022971 32 -5.59481350137503e-12 13 663.642071806514 23 -637.020396022971 33 -5.59481350137503e-12 70 3 0 3DFACE 8 leg_half 10 663.642071806514 20 -637.020396022971 30 -5.59481350137503e-12 11 838.782876772249 21 -630.311014537056 31 -1.18393472803291e-10 12 827.969621169947 22 -662.165838331307 32 -1.61527680120344e-10 13 827.969621169947 23 -662.165838331307 33 -1.61527680120344e-10 70 13 0 3DFACE 8 leg_half 10 663.642071806514 20 -637.020396022971 30 -5.59481350137503e-12 11 827.969621169947 21 -662.165838331307 31 -1.61527680120344e-10 12 653.29151769208 22 -646.340639254847 32 -4.51194637207664e-12 13 653.29151769208 23 -646.340639254847 33 -4.51194637207664e-12 70 3 0 3DFACE 8 leg_half 10 653.29151769208 20 -646.340639254847 30 -4.51194637207664e-12 11 827.969621169947 21 -662.165838331307 31 -1.61527680120344e-10 12 642.023925698404 22 -654.528573978645 32 -3.60955709766131e-12 13 642.023925698404 23 -654.528573978645 33 -3.60955709766131e-12 70 3 0 3DFACE 8 leg_half 10 642.023925698404 20 -654.528573978645 30 -3.60955709766131e-12 11 827.969621169947 21 -662.165838331307 31 -1.61527680120344e-10 12 629.962604584718 22 -661.494594174547 32 -2.52668996836292e-12 13 629.962604584718 23 -661.494594174547 33 -2.52668996836292e-12 70 3 0 3DFACE 8 leg_half 10 629.962604584718 20 -661.494594174547 30 -2.52668996836292e-12 11 827.969621169947 21 -662.165838331307 31 -1.61527680120344e-10 12 617.23954941635 22 -667.162466046757 32 -1.62430069394759e-12 13 617.23954941635 23 -667.162466046757 33 -1.62430069394759e-12 70 3 0 3DFACE 8 leg_half 10 617.23954941635 20 -667.162466046757 30 -1.62430069394759e-12 11 827.969621169947 21 -662.165838331307 31 -1.61527680120344e-10 12 813.09098561462 22 -692.336726612815 32 -1.92750349015114e-10 13 813.09098561462 23 -692.336726612815 33 -1.92750349015114e-10 70 13 0 3DFACE 8 leg_half 10 617.23954941635 20 -667.162466046757 30 -1.62430069394759e-12 11 813.09098561462 21 -692.336726612815 31 -1.92750349015114e-10 12 603.993997054853 22 -671.470162300671 32 -5.41433564649196e-13 13 603.993997054853 23 -671.470162300671 33 -5.41433564649196e-13 70 3 0 3DFACE 8 leg_half 10 603.993997054853 20 -671.470162300671 30 -5.41433564649196e-13 11 813.09098561462 21 -692.336726612815 31 -1.92750349015114e-10 12 590.370902396357 22 -674.370540948851 32 1.80477854883065e-13 13 590.370902396357 23 -674.370540948851 33 1.80477854883065e-13 70 3 0 3DFACE 8 leg_half 10 590.370902396357 20 -674.370540948851 30 1.80477854883065e-13 11 813.09098561462 21 -692.336726612815 31 -1.92750349015114e-10 12 0.000467548731318024 22 -674.370540948851 32 1.80477854883065e-13 13 0.000467548731318024 23 -674.370540948851 33 1.80477854883065e-13 70 3 0 3DFACE 8 leg_half 10 0.000467548731318024 20 -674.370540948851 30 1.80477854883065e-13 11 813.09098561462 21 -692.336726612815 31 -1.92750349015114e-10 12 0.000467548731319434 22 -820.924226612815 32 1.80477854883065e-13 13 0.000467548731319434 23 -820.924226612815 33 1.80477854883065e-13 70 3 0 3DFACE 8 leg_half 10 0.000467548731319434 20 -820.924226612815 30 1.80477854883065e-13 11 813.09098561462 21 -692.336726612815 31 -1.92750349015114e-10 12 794.401547685756 22 -720.307447118133 32 -2.12061479487602e-10 13 794.401547685756 23 -720.307447118133 33 -2.12061479487602e-10 70 13 0 3DFACE 8 leg_half 10 0.000467548731319434 20 -820.924226612815 30 1.80477854883065e-13 11 794.401547685756 21 -720.307447118133 31 -2.12061479487602e-10 12 772.221088848008 22 -745.599413064465 32 -2.18378204408509e-10 13 772.221088848008 23 -745.599413064465 33 -2.18378204408509e-10 70 13 0 3DFACE 8 leg_half 10 0.000467548731319434 20 -820.924226612815 30 1.80477854883065e-13 11 772.221088848008 21 -745.599413064465 31 -2.18378204408509e-10 12 746.929122901675 22 -767.779871902213 32 -2.12061479487602e-10 13 746.929122901675 23 -767.779871902213 33 -2.12061479487602e-10 70 13 0 3DFACE 8 leg_half 10 0.000467548731319434 20 -820.924226612815 30 1.80477854883065e-13 11 746.929122901675 21 -767.779871902213 31 -2.12061479487602e-10 12 718.958402396357 22 -786.469309831078 32 -1.92750349015114e-10 13 718.958402396357 23 -786.469309831078 33 -1.92750349015114e-10 70 13 0 3DFACE 8 leg_half 10 0.000467548731319434 20 -820.924226612815 30 1.80477854883065e-13 11 718.958402396357 21 -786.469309831078 31 -1.92750349015114e-10 12 688.787514114849 22 -801.347945386405 32 -1.61527680120344e-10 13 688.787514114849 23 -801.347945386405 33 -1.61527680120344e-10 70 13 0 3DFACE 8 leg_half 10 0.000467548731319434 20 -820.924226612815 30 1.80477854883065e-13 11 688.787514114849 21 -801.347945386405 31 -1.61527680120344e-10 12 656.932690320598 22 -812.161200988706 32 -1.18393472803291e-10 13 656.932690320598 23 -812.161200988706 33 -1.18393472803291e-10 70 13 0 3DFACE 8 leg_half 10 0.000467548731319434 20 -820.924226612815 30 1.80477854883065e-13 11 656.932690320598 21 -812.161200988706 31 -1.18393472803291e-10 12 623.938975880549 22 -818.724058836624 32 -6.38891606286052e-11 13 623.938975880549 23 -818.724058836624 33 -6.38891606286052e-11 70 13 0 3DFACE 8 leg_half 10 0.000467548731319434 20 -820.924226612815 30 1.80477854883065e-13 11 623.938975880549 21 -818.724058836624 31 -6.38891606286052e-11 12 590.370902396357 22 -820.924226612815 32 1.80477854883065e-13 13 590.370902396357 23 -820.924226612815 33 1.80477854883065e-13 70 1 0 3DFACE 8 leg_half 10 69.0138872107921 20 -280.29408 30 1404.51683530547 11 100.141825844157 21 -186.86272 31 1421.1550651442 12 69.0138872107926 22 -186.86272 32 1404.51683530547 13 69.0138872107926 23 -186.86272 33 1404.51683530547 70 1 0 3DFACE 8 leg_half 10 100.141825844157 20 -186.86272 30 1421.1550651442 11 69.0138872107921 21 -280.29408 31 1404.51683530547 12 100.141825844156 22 -280.29408 32 1421.1550651442 13 100.141825844156 23 -280.29408 33 1421.1550651442 70 1 0 3DFACE 8 leg_half 10 623.546345594915 20 -599.640891643383 30 180.244333371467 11 602.133267369982 21 -575.898750159264 31 185.30549023988 12 623.546333434853 22 -575.80035767001 32 184.343761377095 13 623.546333434853 23 -575.80035767001 33 184.343761377095 70 1 0 3DFACE 8 leg_half 10 602.133267369982 20 -575.898750159264 30 185.30549023988 11 623.546345594915 21 -599.640891643383 31 180.244333371467 12 602.133279596418 22 -599.869415774734 32 181.183685835358 13 602.133279596418 23 -599.869415774734 33 181.183685835358 70 1 0 3DFACE 8 leg_half 10 445.721732248607 20 -744.352283565408 30 81.6652408886482 11 448.282012434797 21 -730.404696521621 31 105.17251147419 12 448.282004539076 22 -742.014746414944 32 80.7442486966709 13 448.282004539076 23 -742.014746414944 33 80.7442486966709 70 1 0 3DFACE 8 leg_half 10 448.282012434797 20 -730.404696521621 30 105.17251147419 11 445.721732248607 21 -744.352283565408 31 81.6652408886482 12 445.721740244506 22 -732.59492990622 32 106.403439896738 13 445.721740244506 23 -732.59492990622 33 106.403439896738 70 1 0 3DFACE 8 leg_half 10 470.677481847252 20 -580.392895076207 30 229.237696767784 11 468.840142428527 21 -610.976425980055 31 226.840985547634 12 470.677497105752 22 -610.308103138718 32 224.093716273781 13 470.677497105752 23 -610.308103138718 33 224.093716273781 70 1 0 3DFACE 8 leg_half 10 468.840142428527 20 -610.976425980055 30 226.840985547634 11 470.677481847252 21 -580.392895076207 31 229.237696767784 12 468.840126975903 22 -580.680624318909 32 232.050409880217 13 468.840126975903 23 -580.680624318909 33 232.050409880217 70 1 0 3DFACE 8 leg_half 10 792.00721584731 20 -595.005500745675 30 23.3578380039372 11 787.130186503031 21 -618.467587074047 31 32.066456918151 12 791.767077835926 22 -596.364536149864 32 23.3578380035618 13 791.767077835926 23 -596.364536149864 33 23.3578380035618 70 1 0 3DFACE 8 leg_half 10 787.130186503031 20 -618.467587074047 30 32.066456918151 11 792.00721584731 21 -595.005500745675 31 23.3578380039372 12 792.007217306199 22 -592.860317128213 32 27.8714369630177 13 792.007217306199 23 -592.860317128213 33 27.8714369630177 70 13 0 3DFACE 8 leg_half 10 787.130186503031 20 -618.467587074047 30 32.066456918151 11 792.007217306199 21 -592.860317128213 31 27.8714369630177 12 787.130189104003 22 -614.643057664062 32 40.1135032517926 13 787.130189104003 23 -614.643057664062 33 40.1135032517926 70 1 0 3DFACE 8 leg_half 10 458.222195872847 20 -549.595394709904 30 241.116069017578 11 461.269937419119 21 -186.86272 31 239.686382351025 12 458.222195872847 22 -186.86272 32 241.116069017578 13 458.222195872847 23 -186.86272 33 241.116069017578 70 1 0 3DFACE 8 leg_half 10 461.269937419119 20 -186.86272 30 239.686382351025 11 458.222195872847 21 -549.595394709904 31 241.116069017578 12 461.269937419119 22 -549.571376162653 32 239.686382351024 13 461.269937419119 23 -549.571376162653 33 239.686382351024 70 1 0 3DFACE 8 leg_half 10 736.997695535365 20 -679.337949441333 30 100.317732616843 11 717.894073612081 21 -705.391608581792 31 91.1148940822994 12 736.997691839832 22 -690.762816990611 32 82.8933973835911 13 736.997691839832 23 -690.762816990611 33 82.8933973835911 70 1 0 3DFACE 8 leg_half 10 717.894073612081 20 -705.391608581792 30 91.1148940822994 11 736.997695535365 21 -679.337949441333 31 100.317732616843 12 717.894077714131 22 -692.709977485149 32 110.455949073024 13 717.894077714131 23 -692.709977485149 33 110.455949073024 70 1 0 3DFACE 8 leg_half 10 753.576412075941 20 -604.820821451585 30 70.2039737536023 11 760.201826420081 21 -585.915972100795 31 58.2231849183613 12 760.20182781144 22 -592.476194788978 32 53.921748202446 13 760.20182781144 23 -592.476194788978 33 53.921748202446 70 1 0 3DFACE 8 leg_half 10 760.201826420081 20 -585.915972100795 30 58.2231849183613 11 753.576412075941 21 -604.820821451585 31 70.2039737536023 12 753.576410189591 22 -595.926735646398 32 76.0356884766169 13 753.576410189591 23 -595.926735646398 33 76.0356884766169 70 1 0 3DFACE 8 leg_half 10 454.431240478811 20 -576.627625779333 30 192.429880890276 11 454.797637205561 21 -548.733344026199 31 189.801126938624 12 454.797653593913 22 -576.264066422956 32 188.875875742312 13 454.797653593913 23 -576.264066422956 33 188.875875742312 70 1 0 3DFACE 8 leg_half 10 454.797637205561 20 -548.733344026199 30 189.801126938624 11 454.431240478811 21 -576.627625779333 31 192.429880890276 12 454.431223909685 22 -548.793220154026 32 193.36533825795 13 454.431223909685 23 -548.793220154026 33 193.36533825795 70 1 0 3DFACE 8 leg_half 10 439.690596528004 20 -606.087584234742 30 206.744381898986 11 436.335587191701 21 -578.704166932226 31 212.72919754513 12 439.690582495428 22 -578.575873947693 32 211.475076092305 13 439.690582495428 23 -578.575873947693 33 211.475076092305 70 1 0 3DFACE 8 leg_half 10 436.335587191701 20 -578.704166932226 30 212.72919754513 11 439.690596528004 21 -606.087584234742 31 206.744381898986 12 436.335601310833 22 -606.385574583813 32 207.969323546969 13 436.335601310833 23 -606.385574583813 33 207.969323546969 70 1 0 3DFACE 8 leg_half 10 442.839452384975 20 -578.401495960111 30 209.770445440443 11 439.690564957562 21 -549.114088023756 31 212.46522637891 12 442.839434933817 22 -549.08536836124 32 210.755700449054 13 442.839434933817 23 -549.08536836124 33 210.755700449054 70 1 0 3DFACE 8 leg_half 10 439.690564957562 20 -549.114088023756 30 212.46522637891 11 442.839452384975 21 -578.401495960111 31 209.770445440443 12 439.690582495428 22 -578.575873947693 32 211.475076092305 13 439.690582495428 23 -578.575873947693 33 211.475076092305 70 1 0 3DFACE 8 leg_half 10 696.758783079627 20 -601.140380260496 30 186.408417229293 11 717.894066860413 21 -619.848757614325 31 165.696830164561 12 717.894057585081 22 -597.802053886837 32 172.685609040578 13 717.894057585081 23 -597.802053886837 33 172.685609040578 70 1 0 3DFACE 8 leg_half 10 717.894066860413 20 -619.848757614325 30 165.696830164561 11 696.758783079627 21 -601.140380260496 31 186.408417229293 12 696.758793128571 22 -625.025897634329 32 178.836736613072 13 696.758793128571 23 -625.025897634329 33 178.836736613072 70 1 0 3DFACE 8 leg_half 10 473.64207352602 20 -743.137302565856 30 112.328325554405 11 473.101749084159 21 -758.702384848233 31 87.3191803898169 12 473.642065047928 22 -755.603683334388 32 86.0982896720056 13 473.642065047928 23 -755.603683334388 33 86.0982896720056 70 1 0 3DFACE 8 leg_half 10 473.101749084159 20 -758.702384848233 30 87.3191803898169 11 473.64207352602 21 -743.137302565856 31 112.328325554405 12 473.101757695049 22 -746.04073417303 32 113.960076228591 13 473.101757695049 23 -746.04073417303 33 113.960076228591 70 1 0 3DFACE 8 leg_half 10 656.932690320598 20 -812.161200988706 30 -1.18393472803291e-10 11 623.938975880552 21 -818.724058836629 31 23.3578380793071 12 623.938975880549 22 -818.724058836624 32 -6.38891606286052e-11 13 623.938975880549 23 -818.724058836624 33 -6.38891606286052e-11 70 1 0 3DFACE 8 leg_half 10 623.938975880552 20 -818.724058836629 30 23.3578380793071 11 656.932690320598 21 -812.161200988706 31 -1.18393472803291e-10 12 656.932690320601 22 -812.16120098871 32 23.3578380792528 13 656.932690320601 23 -812.16120098871 33 23.3578380792528 70 1 0 3DFACE 8 leg_half 10 472.107168359226 20 -580.08201644067 30 226.198682483658 11 470.677497105752 21 -610.308103138718 31 224.093716273781 12 472.107183407982 22 -609.586009613252 32 221.125411221167 13 472.107183407982 23 -609.586009613252 33 221.125411221167 70 1 0 3DFACE 8 leg_half 10 470.677497105752 20 -610.308103138718 30 224.093716273781 11 472.107168359226 21 -580.08201644067 31 226.198682483658 12 470.677481847252 22 -580.392895076207 32 229.237696767784 13 470.677481847252 23 -580.392895076207 33 229.237696767784 70 1 0 3DFACE 8 leg_half 10 429.267737950976 20 -578.813572557816 30 213.798663854844 11 0.0162469754877819 21 -549.153365442471 31 214.795486963908 12 429.26772029492 22 -549.153237717187 32 214.795486963908 13 429.26772029492 23 -549.153237717187 33 214.795486963908 70 1 0 3DFACE 8 leg_half 10 0.0162469754877819 20 -549.153365442471 30 214.795486963908 11 429.267737950976 21 -578.813572557816 31 213.798663854844 12 0.0162646316092562 22 -578.813809543233 32 213.798660182835 13 0.0162646316092562 23 -578.813809543233 33 213.798660182835 70 1 0 3DFACE 8 leg_half 10 466.630414711229 20 -778.937031754263 30 61.9555523461604 11 464.090775113584 21 -771.603559996758 31 92.4022555870175 12 464.090762524528 22 -781.089165318495 32 62.4790981961044 13 464.090762524528 23 -781.089165318495 33 62.4790981961044 70 1 0 3DFACE 8 leg_half 10 464.090775113584 20 -771.603559996758 30 92.4022555870175 11 466.630414711229 21 -778.937031754263 31 61.9555523461604 12 466.630427178961 22 -769.542842319152 32 91.5903304644009 13 466.630427178961 23 -769.542842319152 33 91.5903304644009 70 1 0 3DFACE 8 leg_half 10 454.797666066761 20 -600.71783565349 30 184.671000694682 11 454.667736501664 21 -575.898831573499 31 185.305488978394 12 454.667748728094 22 -599.869484727166 32 181.183686716704 13 454.667748728094 23 -599.869484727166 33 181.183686716704 70 1 0 3DFACE 8 leg_half 10 454.667736501664 20 -575.898831573499 30 185.305488978394 11 454.797666066761 21 -600.71783565349 31 184.671000694682 12 454.797653593913 22 -576.264066422956 32 188.875875742312 13 454.797653593913 23 -576.264066422956 33 188.875875742312 70 1 0 3DFACE 8 leg_half 10 787.130189104003 20 -614.643057664062 30 40.1135032517926 11 779.024163430099 21 -640.917494008958 31 40.9117386331972 12 787.130186503031 22 -618.467587074047 32 32.066456918151 13 787.130186503031 23 -618.467587074047 33 32.066456918151 70 1 0 3DFACE 8 leg_half 10 779.024163430099 20 -640.917494008958 30 40.9117386331972 11 787.130189104003 21 -614.643057664062 31 40.1135032517926 12 779.024166993188 22 -635.678245979518 32 51.9354404084483 13 779.024166993188 23 -635.678245979518 33 51.9354404084483 70 1 0 3DFACE 8 leg_half 10 736.997677401125 20 -706.00295242646 30 44.2129177479029 11 717.894066860413 21 -715.319417548222 31 70.2261702210487 12 717.894057585081 22 -722.308196422019 32 48.1794664928565 13 717.894057585081 23 -722.308196422019 33 48.1794664928565 70 1 0 3DFACE 8 leg_half 10 717.894066860413 20 -715.319417548222 30 70.2261702210487 11 736.997677401125 21 -706.00295242646 31 44.2129177479029 12 736.997685757261 22 -699.706769202407 32 64.0747689619352 13 736.997685757261 23 -699.706769202407 33 64.0747689619352 70 1 0 3DFACE 8 leg_half 10 732.466031085639 20 -547.618544534505 30 123.445905477124 11 744.275027999012 21 -186.86272 31 105.557438942816 12 744.275027999012 22 -547.318028491407 32 105.557438942816 13 744.275027999012 23 -547.318028491407 33 105.557438942816 70 1 0 3DFACE 8 leg_half 10 744.275027999012 20 -186.86272 30 105.557438942816 11 732.466031085639 21 -547.618544534505 31 123.445905477124 12 732.466031085639 22 -186.86272 32 123.445905477124 13 732.466031085639 23 -186.86272 33 123.445905477124 70 1 0 3DFACE 8 leg_half 10 451.683316658874 20 -785.765920539638 30 63.616807647956 11 448.317768339636 21 -776.152256350036 31 94.1944509495159 12 448.317755482775 22 -785.839646973143 32 63.6347444795237 13 448.317755482775 23 -785.839646973143 33 63.6347444795237 70 1 0 3DFACE 8 leg_half 10 448.317768339636 20 -776.152256350036 30 94.1944509495159 11 451.683316658874 21 -785.765920539638 31 63.616807647956 12 451.683329511579 22 -776.081661498503 32 94.1666352734205 13 451.683329511579 23 -776.081661498503 33 94.1666352734205 70 1 0 3DFACE 8 leg_half 10 684.332897960916 20 -669.009252539392 30 119.38666515078 11 702.221360398304 21 -673.696700650341 31 96.0407362022104 12 684.332896682708 22 -683.128909470703 32 103.191916498769 13 684.332896682708 23 -683.128909470703 33 103.191916498769 70 1 0 3DFACE 8 leg_half 10 702.221360398304 20 -673.696700650341 30 96.0407362022104 11 684.332897960916 21 -669.009252539392 31 119.38666515078 12 702.221361580333 22 -660.639487120937 32 111.016899733167 13 702.221361580333 23 -660.639487120937 33 111.016899733167 70 1 0 3DFACE 8 leg_half 10 644.636242951136 20 -598.733544865996 30 176.514545976725 11 623.546333434853 21 -575.80035767001 31 184.343761377095 12 644.636231054623 22 -575.409716284687 32 180.525125445771 13 644.636231054623 23 -575.409716284687 33 180.525125445771 70 1 0 3DFACE 8 leg_half 10 623.546333434853 20 -575.80035767001 30 184.343761377095 11 644.636242951136 21 -598.733544865996 31 176.514545976725 12 623.546345594915 22 -599.640891643383 32 180.244333371467 13 623.546345594915 23 -599.640891643383 33 180.244333371467 70 1 0 3DFACE 8 leg_half 10 470.677497105752 20 -610.308103138718 30 224.093716273781 11 468.84015475682 21 -640.279768170507 31 217.551860904389 12 470.677509279169 22 -639.24331958749 32 214.92128705308 13 470.677509279169 23 -639.24331958749 33 214.92128705308 70 1 0 3DFACE 8 leg_half 10 468.84015475682 20 -640.279768170507 30 217.551860904389 11 470.677497105752 21 -610.308103138718 31 224.093716273781 12 468.840142428527 22 -610.976425980055 32 226.840985547634 13 468.840142428527 23 -610.976425980055 33 226.840985547634 70 1 0 3DFACE 8 leg_half 10 221.739809665471 20 -186.86272 30 2013.4439613934 11 221.73980966547 21 -280.29408 31 1435.59863370269 12 221.739809665471 22 -186.86272 32 1435.59863370269 13 221.739809665471 23 -186.86272 33 1435.59863370269 70 1 0 3DFACE 8 leg_half 10 221.73980966547 20 -280.29408 30 1435.59863370269 11 221.739809665471 21 -186.86272 31 2013.4439613934 12 221.73980966547 22 -280.29408 32 2013.4439613934 13 221.73980966547 23 -280.29408 33 2013.4439613934 70 1 0 3DFACE 8 leg_half 10 688.787514114849 20 -801.347945386405 30 -1.61527680120344e-10 11 656.932690320601 21 -812.16120098871 31 23.3578380792528 12 656.932690320598 22 -812.161200988706 32 -1.18393472803291e-10 13 656.932690320598 23 -812.161200988706 33 -1.18393472803291e-10 70 1 0 3DFACE 8 leg_half 10 656.932690320601 20 -812.16120098871 30 23.3578380792528 11 688.787514114849 21 -801.347945386405 31 -1.61527680120344e-10 12 688.787514114852 22 -801.347945386409 32 23.3578380792096 13 688.787514114852 23 -801.347945386409 33 23.3578380792096 70 1 0 3DFACE 8 leg_half 10 176.725666423806 20 -280.29408 30 1938.38266102747 11 180.18572358915 21 -186.86272 31 1903.25211107687 12 180.185723589149 22 -280.29408 32 1903.25211107687 13 180.185723589149 23 -280.29408 33 1903.25211107687 70 1 0 3DFACE 8 leg_half 10 180.18572358915 20 -186.86272 30 1903.25211107687 11 176.725666423806 21 -280.29408 31 1938.38266102747 12 176.725666423807 22 -186.86272 32 1938.38266102747 13 176.725666423807 23 -186.86272 33 1938.38266102747 70 1 0 3DFACE 8 leg_half 10 718.363090933403 20 -588.820775333035 30 135.766293848309 11 732.466044108445 21 -569.495501821011 31 122.710665747149 12 732.466052014781 22 -584.996349297051 32 120.045263691758 13 732.466052014781 23 -584.996349297051 33 120.045263691758 70 1 0 3DFACE 8 leg_half 10 732.466044108445 20 -569.495501821011 30 122.710665747149 11 718.363090933403 21 -588.820775333035 31 135.766293848309 12 718.363081916203 22 -571.142011532184 32 138.806193017976 13 718.363081916203 23 -571.142011532184 33 138.806193017976 70 1 0 3DFACE 8 leg_half 10 665.021391353748 20 -675.601700530057 30 125.979113140781 11 644.636263548619 21 -662.459295238253 31 146.227531781659 12 665.021389999784 22 -658.447133448378 32 140.935603497775 13 665.021389999784 23 -658.447133448378 33 140.935603497775 70 1 0 3DFACE 8 leg_half 10 644.636263548619 20 -662.459295238253 30 146.227531781659 11 665.021391353748 21 -675.601700530057 31 125.979113140781 12 644.636264956545 22 -680.297547066858 32 130.674959677109 13 644.636264956545 23 -680.297547066858 33 130.674959677109 70 1 0 3DFACE 8 leg_half 10 718.363090933403 20 -685.388881228845 30 39.1981879427727 11 732.466058322552 21 -664.91507027919 31 50.366817478493 12 732.466052014781 22 -669.667851071909 32 35.3737619083722 13 732.466052014781 23 -669.667851071909 33 35.3737619083722 70 1 0 3DFACE 8 leg_half 10 732.466058322552 20 -664.91507027919 30 50.366817478493 11 718.363090933403 21 -685.388881228845 31 39.1981879427727 12 718.363098127435 22 -679.968320245868 32 56.297813526916 13 718.363098127435 23 -679.968320245868 33 56.297813526916 70 1 0 3DFACE 8 leg_half 10 649.884111397057 20 -746.458660352302 30 82.4950785735168 11 624.955341833487 21 -738.830110282484 31 109.907610082888 12 624.955333552396 22 -751.006817642042 32 84.2870649622931 13 624.955333552396 23 -751.006817642042 33 84.2870649622931 70 1 0 3DFACE 8 leg_half 10 624.955341833487 20 -738.830110282484 30 109.907610082888 11 649.884111397057 21 -746.458660352302 31 82.4950785735168 12 649.884119483233 22 -734.56856186502 32 107.512580906988 13 649.884119483233 23 -734.56856186502 33 107.512580906988 70 1 0 3DFACE 8 leg_half 10 673.957358037872 20 -746.934060776874 30 54.170165314894 11 649.884111397057 21 -746.458660352302 31 82.4950785735168 12 649.884100288402 22 -754.828812255533 32 56.0907148781112 13 649.884100288402 23 -754.828812255533 33 56.0907148781112 70 1 0 3DFACE 8 leg_half 10 649.884111397057 20 -746.458660352302 30 82.4950785735168 11 673.957358037872 21 -746.934060776874 31 54.170165314894 12 673.957368701467 22 -738.899252779403 32 79.5166578326792 13 673.957368701467 23 -738.899252779403 33 79.5166578326792 70 1 0 3DFACE 8 leg_half 10 429.267771709642 20 -737.984763689194 30 109.432571697368 11 432.838940960221 21 -749.833439201604 31 83.824824767603 12 429.267763467221 22 -750.104609262675 32 83.9316672902124 13 429.267763467221 23 -750.104609262675 33 83.9316672902124 70 1 0 3DFACE 8 leg_half 10 432.838940960221 20 -749.833439201604 30 83.824824767603 11 429.267771709642 21 -737.984763689194 31 109.432571697368 12 432.838949191021 22 -737.730681730485 32 109.289774750901 13 432.838949191021 23 -737.730681730485 33 109.289774750901 70 1 0 3DFACE 8 leg_half 10 753.576407084801 20 -630.223630997654 30 36.698358790781 11 760.201826420081 21 -607.845772298605 31 36.2933847183422 12 760.201824130007 22 -611.213150017197 32 29.2082138072124 13 760.201824130007 23 -611.213150017197 33 29.2082138072124 70 1 0 3DFACE 8 leg_half 10 760.201826420081 20 -607.845772298605 30 36.2933847183422 11 753.576407084801 21 -630.223630997654 31 36.698358790781 12 753.576410189591 22 -625.658275857869 32 46.3041482621511 13 753.576410189591 23 -625.658275857869 33 46.3041482621511 70 1 0 3DFACE 8 leg_half 10 624.955304385432 20 -764.585289351978 30 23.3578379140486 11 599.602116671527 21 -765.945156978237 31 29.4490754688794 12 599.602113045565 22 -766.149870997149 32 23.3578379057383 13 599.602113045565 23 -766.149870997149 33 23.3578379057383 70 1 0 3DFACE 8 leg_half 10 599.602116671527 20 -765.945156978237 30 29.4490754688794 11 624.955304385432 21 -764.585289351978 31 23.3578379140486 12 624.955307916438 22 -764.38593632126 32 29.2895600085649 13 624.955307916438 23 -764.38593632126 33 29.2895600085649 70 1 0 3DFACE 8 leg_half 10 464.090775113584 20 -642.024842985963 30 221.980972610863 11 466.630436254431 21 -669.291160506739 31 206.575474706326 12 466.630427178961 22 -641.212917863139 32 219.920254933339 13 466.630427178961 23 -641.212917863139 33 219.920254933339 70 1 0 3DFACE 8 leg_half 10 466.630436254431 20 -669.291160506739 30 206.575474706326 11 464.090775113584 21 -642.024842985963 31 221.980972610863 12 464.090784277369 22 -670.376318084996 32 208.5063328654 13 464.090784277369 23 -670.376318084996 33 208.5063328654 70 1 0 3DFACE 8 leg_half 10 767.829335677824 20 -647.197908223015 30 75.9502497139702 11 753.73928554472 21 -674.070091498716 31 73.5119548557674 12 767.829332959368 22 -655.602108768076 32 63.1328050448759 13 767.829332959368 23 -655.602108768076 33 63.1328050448759 70 1 0 3DFACE 8 leg_half 10 753.73928554472 20 -674.070091498716 30 73.5119548557674 11 767.829335677824 21 -647.197908223015 31 75.9502497139702 12 753.73928877638 22 -664.079300898903 32 88.749145475747 13 753.73928877638 23 -664.079300898903 33 88.749145475747 70 1 0 3DFACE 8 leg_half 10 473.717772252345 20 -740.196478791399 30 110.675560324675 11 473.642065047928 21 -755.603683334388 31 86.0982896720056 12 473.717763908762 22 -752.465074828487 32 84.861675745457 13 473.717763908762 23 -752.465074828487 33 84.861675745457 70 1 0 3DFACE 8 leg_half 10 473.642065047928 20 -755.603683334388 30 86.0982896720056 11 473.717772252345 21 -740.196478791399 31 110.675560324675 12 473.64207352602 22 -743.137302565856 32 112.328325554405 13 473.64207352602 23 -743.137302565856 33 112.328325554405 70 1 0 3DFACE 8 leg_half 10 455.00604998394 20 -549.612103415805 30 242.110623248711 11 458.222195872847 21 -186.86272 31 241.116069017578 12 455.00604998394 22 -186.86272 32 242.110623248711 13 455.00604998394 23 -186.86272 33 242.110623248711 70 1 0 3DFACE 8 leg_half 10 458.222195872847 20 -186.86272 30 241.116069017578 11 455.00604998394 21 -549.612103415805 31 242.110623248711 12 458.222195872847 22 -549.595394709904 32 241.116069017578 13 458.222195872847 23 -549.595394709904 33 241.116069017578 70 1 0 3DFACE 8 leg_half 10 473.71772029492 20 -549.195745909472 30 217.326639240051 11 473.642038802113 21 -579.415028713919 31 219.67849237548 12 473.717738079349 22 -579.071732366754 32 216.322568521811 13 473.717738079349 23 -579.071732366754 33 216.322568521811 70 1 0 3DFACE 8 leg_half 10 473.642038802113 20 -579.415028713919 30 219.67849237548 11 473.71772029492 21 -549.195745909472 31 217.326639240051 12 473.642020846985 22 -549.252284780773 32 220.6922004252 13 473.642020846985 23 -549.252284780773 33 220.6922004252 70 1 0 3DFACE 8 leg_half 10 732.466052014781 20 -584.996349297051 30 120.045263691758 11 744.275040114523 21 -567.670823535761 31 104.873423184286 12 744.275046789786 22 -580.758079568763 32 102.623043056121 13 744.275046789786 23 -580.758079568763 33 102.623043056121 70 1 0 3DFACE 8 leg_half 10 744.275040114523 20 -567.670823535761 30 104.873423184286 11 732.466052014781 21 -584.996349297051 31 120.045263691758 12 732.466044108445 22 -569.495501821011 32 122.710665747149 13 732.466044108445 23 -569.495501821011 33 122.710665747149 70 1 0 3DFACE 8 leg_half 10 472.107183407982 20 -770.747998603796 30 59.9634222143927 11 470.677481847252 21 -778.860284147472 31 30.7703076765303 12 472.107168359226 22 -775.821269863314 32 30.4594290412997 13 472.107168359226 23 -775.821269863314 33 30.4594290412997 70 1 0 3DFACE 8 leg_half 10 470.677481847252 20 -778.860284147472 30 30.7703076765303 11 472.107183407982 21 -770.747998603796 31 59.9634222143927 12 470.677497105752 22 -773.716303656482 32 60.6855157395589 13 470.677497105752 23 -773.716303656482 33 60.6855157395589 70 1 0 3DFACE 8 leg_half 10 445.721721263973 20 -605.178251275471 30 203.006401057676 11 442.839452384975 21 -578.401495960111 31 209.770445440443 12 445.721707495526 22 -578.184382747044 32 207.648051313885 13 445.721707495526 23 -578.184382747044 33 207.648051313885 70 1 0 3DFACE 8 leg_half 10 442.839452384975 20 -578.401495960111 30 209.770445440443 11 445.721721263973 21 -605.178251275471 31 203.006401057676 12 442.839466299903 22 -605.682549578299 32 205.079413127562 13 442.839466299903 23 -605.682549578299 33 205.079413127562 70 1 0 3DFACE 8 leg_half 10 473.71777732158 20 -684.199452771651 30 174.902174757415 11 473.642080404707 21 -708.127668368109 31 158.505080975556 12 473.717779021898 22 -705.742288168363 32 156.11970077605 13 473.717779021898 23 -705.742288168363 33 156.11970077605 70 1 0 3DFACE 8 leg_half 10 473.642080404707 20 -708.127668368109 30 158.505080975556 11 473.71777732158 21 -684.199452771651 31 174.902174757415 12 473.642078676977 22 -686.237536190199 32 177.590351345444 13 473.642078676977 23 -686.237536190199 33 177.590351345444 70 1 0 3DFACE 8 leg_half 10 442.839466299903 20 -605.682549578299 30 205.079413127562 11 439.690582495428 21 -578.575873947693 31 211.475076092305 12 442.839452384975 22 -578.401495960111 32 209.770445440443 13 442.839452384975 23 -578.401495960111 33 209.770445440443 70 1 0 3DFACE 8 leg_half 10 439.690582495428 20 -578.575873947693 30 211.475076092305 11 442.839466299903 21 -605.682549578299 31 205.079413127562 12 439.690596528004 22 -606.087584234742 32 206.744381898986 13 439.690596528004 23 -606.087584234742 33 206.744381898986 70 1 0 3DFACE 8 leg_half 10 473.101722427237 20 -579.753960348852 30 222.99174608133 11 472.107183407982 21 -609.586009613252 31 221.125411221167 12 473.10173725466 22 -608.824016722648 32 217.993091128508 13 473.10173725466 23 -608.824016722648 33 217.993091128508 70 1 0 3DFACE 8 leg_half 10 472.107183407982 20 -609.586009613252 30 221.125411221167 11 473.101722427237 21 -579.753960348852 31 222.99174608133 12 472.107168359226 22 -580.08201644067 32 226.198682483658 13 472.107168359226 23 -580.08201644067 33 226.198682483658 70 1 0 3DFACE 8 leg_half 10 468.840142428527 20 -610.976425980055 30 226.840985547634 11 466.630427178961 21 -641.212917863139 31 219.920254933339 12 468.84015475682 22 -640.279768170507 32 217.551860904389 13 468.84015475682 23 -640.279768170507 33 217.551860904389 70 1 0 3DFACE 8 leg_half 10 466.630427178961 20 -641.212917863139 30 219.920254933339 11 468.840142428527 21 -610.976425980055 31 226.840985547634 12 466.630414711229 22 -611.578139745845 32 229.314444371434 13 466.630414711229 23 -611.578139745845 33 229.314444371434 70 1 0 3DFACE 8 leg_half 10 472.107150072447 20 -549.362133988305 30 227.231114817978 11 470.677481847252 21 -580.392895076207 31 229.237696767784 12 472.107168359226 22 -580.08201644067 32 226.198682483658 13 472.107168359226 23 -580.08201644067 33 226.198682483658 70 1 0 3DFACE 8 leg_half 10 470.677481847252 20 -580.392895076207 30 229.237696767784 11 472.107150072447 21 -549.362133988305 31 227.231114817978 12 470.677463405893 22 -549.413334136112 32 230.27885636425 13 470.677463405893 23 -549.413334136112 33 230.27885636425 70 1 0 3DFACE 8 leg_half 10 792.007218281129 20 -589.846284379929 30 32.4682094668199 11 787.130189104003 21 -614.643057664062 31 40.1135032517926 12 792.007217306199 22 -592.860317128213 32 27.8714369630177 13 792.007217306199 23 -592.860317128213 33 27.8714369630177 70 1 0 3DFACE 8 leg_half 10 787.130189104003 20 -614.643057664062 30 40.1135032517926 11 792.007218281129 21 -589.846284379929 31 32.4682094668199 12 787.130190684252 22 -609.757662381006 32 47.5643349390529 13 787.130190684252 23 -609.757662381006 33 47.5643349390529 70 1 0 3DFACE 8 leg_half 10 787.130186503031 20 -618.467587074047 30 32.066456918151 11 779.024158535186 21 -644.605714246329 31 29.2769308468913 12 787.130182929858 22 -621.15990220955 32 23.5733173858747 13 787.130182929858 23 -621.15990220955 33 23.5733173858747 70 1 0 3DFACE 8 leg_half 10 779.024158535186 20 -644.605714246329 30 29.2769308468913 11 787.130186503031 21 -618.467587074047 31 32.066456918151 12 779.024163430099 22 -640.917494008958 32 40.9117386331972 13 779.024163430099 23 -640.917494008958 33 40.9117386331972 70 1 0 3DFACE 8 leg_half 10 838.782876772249 20 -630.311014537056 30 -1.18393472803291e-10 11 827.96962116995 21 -662.165838331311 31 23.3578380792096 12 827.969621169947 22 -662.165838331307 32 -1.61527680120344e-10 13 827.969621169947 23 -662.165838331307 33 -1.61527680120344e-10 70 1 0 3DFACE 8 leg_half 10 827.96962116995 20 -662.165838331311 30 23.3578380792096 11 838.782876772249 21 -630.311014537056 31 -1.18393472803291e-10 12 838.782876772251 22 -630.31101453706 32 23.3578380792528 13 838.782876772251 23 -630.31101453706 33 23.3578380792528 70 1 0 3DFACE 8 leg_half 10 127.443487339902 20 -280.29408 30 2030.58313313969 11 149.837907551873 21 -186.86272 31 2003.29545315791 12 149.837907551873 22 -280.29408 32 2003.29545315791 13 149.837907551873 23 -280.29408 33 2003.29545315791 70 1 0 3DFACE 8 leg_half 10 149.837907551873 20 -186.86272 30 2003.29545315791 11 127.443487339902 21 -280.29408 31 2030.58313313969 12 127.443487339903 22 -186.86272 32 2030.58313313969 13 127.443487339903 23 -186.86272 33 2030.58313313969 70 1 0 3DFACE 8 leg_half 10 123.089851596878 20 -186.862719999999 30 2224.76609686633 11 221.73980966547 21 -280.29408 31 2013.4439613934 12 221.739809665471 22 -186.86272 32 2013.4439613934 13 221.739809665471 23 -186.86272 33 2013.4439613934 70 1 0 3DFACE 8 leg_half 10 221.73980966547 20 -280.29408 30 2013.4439613934 11 123.089851596878 21 -186.862719999999 31 2224.76609686633 12 123.089851596878 22 -280.294079999999 32 2224.76609686633 13 123.089851596878 23 -280.294079999999 33 2224.76609686633 70 1 0 3DFACE 8 leg_half 10 472.10720415349 20 -748.850999084323 30 115.539466637413 11 470.677509279169 21 -764.543874438695 31 89.6207321892548 12 472.107195414063 22 -761.701653732916 32 88.5008947532808 13 472.107195414063 23 -761.701653732916 33 88.5008947532808 70 1 0 3DFACE 8 leg_half 10 470.677509279169 20 -764.543874438695 30 89.6207321892548 11 472.10720415349 21 -748.850999084323 31 115.539466637413 12 470.677518140403 22 -751.514112490764 32 117.036156904666 13 470.677518140403 23 -751.514112490764 33 117.036156904666 70 1 0 3DFACE 8 leg_half 10 454.431270729568 20 -719.25912090813 30 98.9086120013344 11 454.797687662105 21 -702.539296405596 31 117.908241171874 12 454.797683261242 22 -716.144716838612 32 97.1582932541697 13 454.797683261242 23 -716.144716838612 33 97.1582932541697 70 1 0 3DFACE 8 leg_half 10 454.797687662105 20 -702.539296405596 30 117.908241171874 11 454.431270729568 21 -719.25912090813 31 98.9086120013344 12 454.431275216977 22 -705.386140960936 32 120.066621251022 13 454.431275216977 23 -705.386140960936 33 120.066621251022 70 1 0 3DFACE 8 leg_half 10 458.222230868175 20 -612.875739362874 30 234.648467298763 11 461.26998493348 21 -642.699946567149 31 223.694427829008 12 461.269972243544 22 -612.537006285544 32 233.256044045395 13 461.269972243544 23 -612.537006285544 33 233.256044045395 70 1 0 3DFACE 8 leg_half 10 461.26998493348 20 -642.699946567149 30 223.694427829008 11 458.222230868175 21 -612.875739362874 31 234.648467298763 12 458.222243636608 22 -643.225259958184 32 225.027705344708 13 458.222243636608 23 -643.225259958184 33 225.027705344708 70 1 0 3DFACE 8 leg_half 10 760.201824130007 20 -578.830801190005 30 61.5905626376661 11 764.031420693374 21 -566.35608713258 31 43.4208517516957 12 764.031422681501 22 -571.081702518113 32 41.9228372915384 13 764.031422681501 23 -571.081702518113 33 41.9228372915384 70 1 0 3DFACE 8 leg_half 10 764.031420693374 20 -566.35608713258 30 43.4208517516957 11 760.201824130007 21 -578.830801190005 31 61.5905626376661 12 760.20182098394 22 -571.352859264312 32 63.961061339529 13 760.20182098394 23 -571.352859264312 33 63.961061339529 70 1 0 3DFACE 8 leg_half 10 429.267763467221 20 -750.104609262675 30 83.9316672902124 11 432.838929652884 21 -758.353294490404 31 56.9482088735863 12 429.267752143919 22 -758.636493889386 32 57.017103815686 13 429.267752143919 23 -758.636493889386 33 57.017103815686 70 1 0 3DFACE 8 leg_half 10 432.838929652884 20 -758.353294490404 30 56.9482088735863 11 429.267763467221 21 -750.104609262675 31 83.9316672902124 12 432.838940960221 22 -749.833439201604 32 83.824824767603 13 432.838940960221 23 -749.833439201604 33 83.824824767603 70 1 0 3DFACE 8 leg_half 10 454.431263343628 20 -625.680128816835 30 180.496989380173 11 454.797666066761 21 -600.71783565349 31 184.671000694682 12 454.797676017751 22 -624.370524419528 32 177.173126470384 13 454.797676017751 23 -624.370524419528 33 177.173126470384 70 1 0 3DFACE 8 leg_half 10 454.797666066761 20 -600.71783565349 30 184.671000694682 11 454.431263343628 21 -625.680128816835 31 180.496989380173 12 454.431253196946 22 -601.562294416642 32 188.142314217608 13 454.431253196946 23 -601.562294416642 33 188.142314217608 70 1 0 3DFACE 8 leg_half 10 470.677509279169 20 -764.543874438695 30 89.6207321892548 11 468.840142428527 21 -776.463572930403 31 61.353838580619 12 470.677497105752 22 -773.716303656482 32 60.6855157395589 13 470.677497105752 23 -773.716303656482 33 60.6855157395589 70 1 0 3DFACE 8 leg_half 10 468.840142428527 20 -776.463572930403 30 61.353838580619 11 470.677509279169 21 -764.543874438695 31 89.6207321892548 12 468.84015475682 22 -767.174448290109 32 90.6571807720069 13 468.84015475682 23 -767.174448290109 33 90.6571807720069 70 1 0 3DFACE 8 leg_half 10 684.332886599671 20 -704.132938548301 30 65.8187023707334 11 702.221343105619 21 -699.12426393804 31 42.5395709625037 12 684.332877982946 22 -710.625470617764 32 45.3374518452758 13 684.332877982946 23 -710.625470617764 33 45.3374518452758 70 1 0 3DFACE 8 leg_half 10 702.221343105619 20 -699.12426393804 30 42.5395709625037 11 684.332886599671 21 -704.132938548301 31 65.8187023707334 12 702.221351073972 22 -693.120266957808 32 61.4796955534277 13 702.221351073972 23 -693.120266957808 33 61.4796955534277 70 1 0 3DFACE 8 leg_half 10 461.269937419119 20 -549.571376162653 30 239.686382351024 11 464.090727919739 21 -186.86272 31 237.849027336606 12 461.269937419119 22 -186.86272 32 239.686382351025 13 461.269937419119 23 -186.86272 33 239.686382351025 70 1 0 3DFACE 8 leg_half 10 464.090727919739 20 -186.86272 30 237.849027336606 11 461.269937419119 21 -549.571376162653 31 239.686382351024 12 464.090727919739 22 -549.540509167097 32 237.849027336606 13 464.090727919739 23 -549.540509167097 33 237.849027336606 70 1 0 3DFACE 8 leg_half 10 599.602131038669 20 -761.101673056328 30 57.616722979916 11 473.717763908762 21 -752.465074828487 31 84.861675745457 12 473.717752446486 22 -761.101673808691 32 57.6167818413605 13 473.717752446486 23 -761.101673808691 33 57.6167818413605 70 1 0 3DFACE 8 leg_half 10 473.717763908762 20 -752.465074828487 30 84.861675745457 11 599.602131038669 21 -761.101673056328 31 57.616722979916 12 599.60214250095 22 -752.465070814344 32 84.8616271735756 13 599.60214250095 23 -752.465070814344 33 84.8616271735756 70 1 0 3DFACE 8 leg_half 10 753.576402819491 20 -633.437457700021 30 26.5600661905556 11 760.201821668678 21 -613.067712196625 31 23.3578379899606 12 757.969157364208 22 -620.27407578666 32 23.3578379876696 13 757.969157364208 23 -620.27407578666 33 23.3578379876696 70 1 0 3DFACE 8 leg_half 10 760.201821668678 20 -613.067712196625 30 23.3578379899606 11 753.576402819491 21 -633.437457700021 31 26.5600661905556 12 760.201824130007 22 -611.213150017197 32 29.2082138072124 13 760.201824130007 23 -611.213150017197 33 29.2082138072124 70 3 0 3DFACE 8 leg_half 10 760.201824130007 20 -611.213150017197 30 29.2082138072124 11 753.576402819491 21 -633.437457700021 31 26.5600661905556 12 753.576407084801 22 -630.223630997654 32 36.698358790781 13 753.576407084801 23 -630.223630997654 33 36.698358790781 70 1 0 3DFACE 8 leg_half 10 448.317739367628 20 -791.272422434329 30 32.0400273988949 11 3.51879034228841e-05 21 -785.839649652569 31 63.6349541054433 12 1.90727753096809e-05 22 -791.272418599218 32 32.0402749105959 13 1.90727753096809e-05 23 -791.272418599218 33 32.0402749105959 70 1 0 3DFACE 8 leg_half 10 3.51879034228841e-05 20 -785.839649652569 30 63.6349541054433 11 448.317739367628 21 -791.272422434329 31 32.0400273988949 12 448.317755482775 22 -785.839646973143 32 63.6347444795237 13 448.317755482775 23 -785.839646973143 33 63.6347444795237 70 1 0 3DFACE 8 leg_half 10 453.575548860337 20 -602.386639077964 30 191.530943822063 11 454.431240478811 21 -576.627625779333 31 192.429880890276 12 454.431253196946 22 -601.562294416642 32 188.142314217608 13 454.431253196946 23 -601.562294416642 33 188.142314217608 70 1 0 3DFACE 8 leg_half 10 454.431240478811 20 -576.627625779333 30 192.429880890276 11 453.575548860337 21 -602.386639077964 31 191.530943822063 12 453.575535902759 22 -576.982525716554 32 195.89923246393 13 453.575535902759 23 -576.982525716554 33 195.89923246393 70 1 0 3DFACE 8 leg_half 10 791.767077835926 20 -596.364536149864 30 23.3578380035618 11 787.130182929858 21 -621.15990220955 31 23.5733173858747 12 787.308111270966 22 -620.27413204142 32 23.3578379968868 13 787.308111270966 23 -620.27413204142 33 23.3578379968868 70 1 0 3DFACE 8 leg_half 10 787.130182929858 20 -621.15990220955 30 23.5733173858747 11 791.767077835926 21 -596.364536149864 31 23.3578380035618 12 787.130186503031 22 -618.467587074047 32 32.066456918151 13 787.130186503031 23 -618.467587074047 33 32.066456918151 70 1 0 3DFACE 8 leg_half 10 779.024169157982 20 -628.985710803041 30 62.1423838125873 11 767.829332959368 21 -655.602108768076 31 63.1328050448759 12 779.024166993188 22 -635.678245979518 32 51.9354404084483 13 779.024166993188 23 -635.678245979518 33 51.9354404084483 70 1 0 3DFACE 8 leg_half 10 767.829332959368 20 -655.602108768076 30 63.1328050448759 11 779.024169157982 21 -628.985710803041 31 62.1423838125873 12 767.829335677824 22 -647.197908223015 32 75.9502497139702 13 767.829335677824 23 -647.197908223015 33 75.9502497139702 70 1 0 3DFACE 8 leg_half 10 466.630427178961 20 -769.542842319152 30 91.5903304644009 11 464.090784277369 21 -758.12892025415 31 120.753730687408 12 464.090775113584 22 -771.603559996758 32 92.4022555870175 13 464.090775113584 23 -771.603559996758 33 92.4022555870175 70 1 0 3DFACE 8 leg_half 10 464.090784277369 20 -758.12892025415 30 120.753730687408 11 466.630427178961 21 -769.542842319152 31 91.5903304644009 12 466.630436254431 22 -756.198062094967 32 119.668573109345 13 466.630436254431 23 -756.198062094967 33 119.668573109345 70 1 0 3DFACE 8 leg_half 10 453.575566723046 20 -722.299342389133 30 100.617239704551 11 454.431275216977 21 -705.386140960936 31 120.066621251022 12 454.431270729568 22 -719.25912090813 32 98.9086120013344 13 454.431270729568 23 -719.25912090813 33 98.9086120013344 70 1 0 3DFACE 8 leg_half 10 454.431275216977 20 -705.386140960936 30 120.066621251022 11 453.575566723046 21 -722.299342389133 31 100.617239704551 12 453.575571294939 22 -708.165176005556 32 122.173590554812 13 453.575571294939 23 -708.165176005556 33 122.173590554812 70 1 0 3DFACE 8 leg_half 10 0.0 20 -549.622587401036 30 242.726639240051 11 93.5308854426706 21 -280.294079999998 31 242.726639192693 12 0.000487681863777811 22 -280.294079999998 32 242.726639192693 13 0.000487681863777811 23 -280.294079999998 33 242.726639192693 70 1 0 3DFACE 8 leg_half 10 93.5308854426706 20 -280.294079999998 30 242.726639192693 11 0.0 21 -549.622587401036 31 242.726639240051 12 448.31772029492 22 -549.622454002523 32 242.726639240051 13 448.31772029492 23 -549.622454002523 33 242.726639240051 70 13 0 3DFACE 8 leg_half 10 93.5308854426706 20 -280.294079999998 30 242.726639192693 11 448.31772029492 21 -186.86272 31 242.726639240051 12 93.530885442671 22 -186.862719999999 32 242.726639240051 13 93.530885442671 23 -186.862719999999 33 242.726639240051 70 1 0 3DFACE 8 leg_half 10 448.31772029492 20 -186.86272 30 242.726639240051 11 93.5308854426706 21 -280.294079999998 31 242.726639192693 12 448.31772029492 22 -549.622454002523 32 242.726639240051 13 448.31772029492 23 -549.622454002523 33 242.726639240051 70 3 0 3DFACE 8 leg_half 10 649.884068906774 20 -549.087494127121 30 210.885907146698 11 673.957327625231 21 -186.86272 31 202.779879874335 12 649.884068906774 22 -186.86272 32 210.885907146698 13 649.884068906774 23 -186.86272 33 210.885907146698 70 1 0 3DFACE 8 leg_half 10 673.957327625231 20 -186.86272 30 202.779879874335 11 649.884068906774 21 -549.087494127121 31 210.885907146698 12 673.957327625231 22 -548.951311917762 32 202.779879874335 13 673.957327625231 23 -548.951311917762 33 202.779879874335 70 1 0 3DFACE 8 leg_half 10 696.758800443365 20 -717.703482376537 30 98.03426599948 11 673.957381179691 21 -712.905797682657 31 125.767734693656 12 673.957376463676 22 -727.485522237732 32 103.531852556699 13 673.957376463676 23 -727.485522237732 33 103.531852556699 70 1 0 3DFACE 8 leg_half 10 673.957381179691 20 -712.905797682657 30 125.767734693656 11 696.758800443365 21 -717.703482376537 31 98.03426599948 12 696.758804887548 22 -703.964135051352 32 118.98846898236 13 696.758804887548 23 -703.964135051352 33 118.98846898236 70 1 0 3DFACE 8 leg_half 10 0.0162901478210909 20 -750.104622950446 30 83.93183291483 11 429.267752143919 21 -758.636493889386 31 57.017103815686 12 0.0162788245333154 22 -758.636496454861 32 57.0173045265452 13 0.0162788245333154 23 -758.636496454861 33 57.0173045265452 70 1 0 3DFACE 8 leg_half 10 429.267752143919 20 -758.636493889386 30 57.017103815686 11 0.0162901478210909 21 -750.104622950446 31 83.93183291483 12 429.267763467221 22 -750.104609262675 32 83.9316672902124 13 429.267763467221 23 -750.104609262675 33 83.9316672902124 70 1 0 3DFACE 8 leg_half 10 454.797676017751 20 -726.7957138545 30 74.7479370250946 11 454.667765582876 21 -713.015957461653 31 95.3999068495287 12 454.667758482489 22 -723.456530152174 32 73.4322964107047 13 454.667758482489 23 -723.456530152174 33 73.4322964107047 70 1 0 3DFACE 8 leg_half 10 454.667765582876 20 -713.015957461653 30 95.3999068495287 11 454.797676017751 21 -726.7957138545 31 74.7479370250946 12 454.797683261242 22 -716.144716838612 32 97.1582932541697 13 454.797683261242 23 -716.144716838612 33 97.1582932541697 70 1 0 3DFACE 8 leg_half 10 649.884100288402 20 -605.713302275367 30 205.206224873295 11 673.957368701467 21 -629.139245228331 31 189.276665394806 12 673.957358037872 22 -603.792752711355 32 197.311473394829 13 673.957358037872 23 -603.792752711355 33 197.311473394829 70 1 0 3DFACE 8 leg_half 10 673.957368701467 20 -629.139245228331 30 189.276665394806 11 649.884100288402 21 -605.713302275367 31 205.206224873295 12 649.884111397057 22 -632.11766596993 32 196.836072967405 13 649.884111397057 23 -632.11766596993 33 196.836072967405 70 1 0 3DFACE 8 leg_half 10 665.021379319153 20 -712.807071282992 30 69.2363238103713 11 684.332877982946 21 -710.625470617764 31 45.3374518452758 12 665.021370191738 22 -719.684397959595 32 47.5412056189011 13 665.021370191738 23 -719.684397959595 33 47.5412056189011 70 1 0 3DFACE 8 leg_half 10 684.332877982946 20 -710.625470617764 30 45.3374518452758 11 665.021379319153 21 -712.807071282992 31 69.2363238103713 12 684.332886599671 22 -704.132938548301 32 65.8187023707334 13 684.332886599671 23 -704.132938548301 33 65.8187023707334 70 1 0 3DFACE 8 leg_half 10 718.363068074693 20 -547.889717752797 30 139.587654990762 11 732.466031085639 21 -186.86272 31 123.445905477124 12 732.466031085639 22 -547.618544534505 32 123.445905477124 13 732.466031085639 23 -547.618544534505 33 123.445905477124 70 1 0 3DFACE 8 leg_half 10 732.466031085639 20 -186.86272 30 123.445905477124 11 718.363068074693 21 -547.889717752797 31 139.587654990762 12 718.363068074693 22 -186.86272 32 139.587654990762 13 718.363068074693 23 -186.86272 33 139.587654990762 70 1 0 3DFACE 8 leg_half 10 665.02138596315 20 -703.037584126794 30 89.7919287945006 11 684.332886599671 21 -704.132938548301 31 65.8187023707334 12 665.021379319153 22 -712.807071282992 32 69.2363238103713 13 665.021379319153 23 -712.807071282992 33 69.2363238103713 70 1 0 3DFACE 8 leg_half 10 684.332886599671 20 -704.132938548301 30 65.8187023707334 11 665.02138596315 21 -703.037584126794 31 89.7919287945006 12 684.332892871929 22 -694.910065817882 32 85.2241968080869 13 684.332892871929 23 -694.910065817882 33 85.2241968080869 70 1 0 3DFACE 8 leg_half 10 787.130190684252 20 -609.757662381006 30 47.5643349390529 11 779.024166993188 21 -635.678245979518 31 51.9354404084483 12 787.130189104003 22 -614.643057664062 32 40.1135032517926 13 787.130189104003 23 -614.643057664062 33 40.1135032517926 70 1 0 3DFACE 8 leg_half 10 779.024166993188 20 -635.678245979518 30 51.9354404084483 11 787.130190684252 21 -609.757662381006 31 47.5643349390529 12 779.024169157982 22 -628.985710803041 32 62.1423838125873 13 779.024169157982 23 -628.985710803041 33 62.1423838125873 70 1 0 3DFACE 8 leg_half 10 753.739272918395 20 -589.30932977233 30 137.774660970991 11 736.997685757261 21 -613.69735635364 31 150.084181819366 12 753.739280225648 22 -606.678073483521 32 132.268789859729 13 753.739280225648 23 -606.678073483521 33 132.268789859729 70 1 0 3DFACE 8 leg_half 10 736.997685757261 20 -613.69735635364 30 150.084181819366 11 753.739272918395 21 -589.30932977233 31 137.774660970991 12 736.997677401125 22 -593.835505140242 32 156.380365045419 13 736.997677401125 23 -593.835505140242 33 156.380365045419 70 1 0 3DFACE 8 leg_half 10 461.269956337624 20 -581.352493258009 30 238.618284093782 11 464.090762524528 21 -612.101685596006 31 231.466577935614 12 464.090746745054 22 -581.165076540648 32 236.786190394896 13 464.090746745054 23 -581.165076540648 33 236.786190394896 70 1 0 3DFACE 8 leg_half 10 464.090762524528 20 -612.101685596006 30 231.466577935614 11 461.269956337624 21 -581.352493258009 31 238.618284093782 12 461.269972243544 22 -612.537006285544 32 233.256044045395 13 461.269972243544 23 -612.537006285544 33 233.256044045395 70 1 0 3DFACE 8 leg_half 10 702.221351073972 20 -693.120266957808 30 61.4796955534277 11 718.363090933403 21 -685.388881228845 31 39.1981879427727 12 702.221343105619 22 -699.12426393804 32 42.5395709625037 13 702.221343105619 23 -699.12426393804 33 42.5395709625037 70 1 0 3DFACE 8 leg_half 10 718.363090933403 20 -685.388881228845 30 39.1981879427727 11 702.221351073972 21 -693.120266957808 31 61.4796955534277 12 718.363098127435 22 -679.968320245868 32 56.297813526916 13 718.363098127435 23 -679.968320245868 33 56.297813526916 70 1 0 3DFACE 8 leg_half 10 432.838940960221 20 -749.833439201604 30 83.824824767603 11 436.335601310833 21 -757.591910929275 31 56.7629871862785 12 432.838929652884 22 -758.353294490404 32 56.9482088735863 13 432.838929652884 23 -758.353294490404 33 56.9482088735863 70 1 0 3DFACE 8 leg_half 10 436.335601310833 20 -757.591910929275 30 56.7629871862785 11 432.838940960221 21 -749.833439201604 31 83.824824767603 12 436.335612575248 22 -749.104396759147 32 83.5375802413299 13 436.335612575248 23 -749.104396759147 33 83.5375802413299 70 1 0 3DFACE 8 leg_half 10 448.317755482775 20 -785.839646973143 30 63.6347444795237 11 4.80447490185498e-05 21 -776.152270645783 31 94.1946239307526 12 3.51879034228841e-05 22 -785.839649652569 32 63.6349541054433 13 3.51879034228841e-05 23 -785.839649652569 33 63.6349541054433 70 1 0 3DFACE 8 leg_half 10 4.80447490185498e-05 20 -776.152270645783 30 94.1946239307526 11 448.317755482775 21 -785.839646973143 31 63.6347444795237 12 448.317768339636 22 -776.152256350036 32 94.1944509495159 13 448.317768339636 23 -776.152256350036 33 94.1944509495159 70 1 0 3DFACE 8 leg_half 10 452.247009199941 20 -725.20697903804 30 102.251353856666 11 453.575571294939 21 -708.165176005556 31 122.173590554812 12 453.575566723046 22 -722.299342389133 32 100.617239704551 13 453.575566723046 23 -722.299342389133 33 100.617239704551 70 1 0 3DFACE 8 leg_half 10 453.575571294939 20 -708.165176005556 30 122.173590554812 11 452.247009199941 21 -725.20697903804 31 102.251353856666 12 452.247013852634 22 -710.823016652003 32 124.188674487802 13 452.247013852634 23 -710.823016652003 33 124.188674487802 70 1 0 3DFACE 8 leg_half 10 760.201826420081 20 -607.845772298605 30 36.2933847183422 11 764.031425007948 21 -586.699189190326 31 30.0821938636906 12 764.031424128692 22 -589.417441849078 32 25.9365225576139 13 764.031424128692 23 -589.417441849078 33 25.9365225576139 70 1 0 3DFACE 8 leg_half 10 764.031425007948 20 -586.699189190326 30 30.0821938636906 11 760.201826420081 21 -607.845772298605 31 36.2933847183422 12 760.20182781144 22 -603.54433558335 32 42.8536074069585 13 760.20182781144 23 -603.54433558335 33 42.8536074069585 70 1 0 3DFACE 8 leg_half 10 442.839490392048 20 -719.276356082042 30 130.597708279963 11 445.721740244506 21 -732.59492990622 31 106.403439896738 12 442.839485482368 22 -734.454801614587 32 107.448702644845 13 442.839485482368 23 -734.454801614587 33 107.448702644845 70 1 0 3DFACE 8 leg_half 10 445.721740244506 20 -732.59492990622 30 106.403439896738 11 442.839490392048 21 -719.276356082042 31 130.597708279963 12 445.721745102502 22 -717.576266444547 32 129.308758123214 13 445.721745102502 23 -717.576266444547 33 129.308758123214 70 1 0 3DFACE 8 leg_half 10 718.363081916203 20 -571.142011532184 30 138.806193017976 11 702.221318561055 21 -548.126641526877 31 153.690618001708 12 718.363068074693 22 -547.889717752797 32 139.587654990762 13 718.363068074693 23 -547.889717752797 33 139.587654990762 70 1 0 3DFACE 8 leg_half 10 702.221318561055 20 -548.126641526877 30 153.690618001708 11 718.363081916203 21 -571.142011532184 31 138.806193017976 12 702.221333117862 22 -572.580560654599 32 152.868771861916 13 702.221333117862 23 -572.580560654599 33 152.868771861916 70 1 0 3DFACE 8 leg_half 10 436.335625756533 20 -721.646389233184 30 132.394587199654 11 439.690615872653 21 -735.948583762681 31 108.288220362449 12 436.335620774804 22 -737.047580997407 32 108.905866027708 13 436.335620774804 23 -737.047580997407 33 108.905866027708 70 1 0 3DFACE 8 leg_half 10 439.690615872653 20 -735.948583762681 30 108.288220362449 11 436.335625756533 21 -721.646389233184 31 132.394587199654 12 439.690620823844 22 -720.64180705444 32 131.632946903436 13 439.690620823844 23 -720.64180705444 33 131.632946903436 70 1 0 3DFACE 8 leg_half 10 718.363068074693 20 -186.86272 30 139.587654990762 11 702.221318561055 21 -548.126641526877 31 153.690618001708 12 702.221318561055 22 -186.86272 32 153.690618001708 13 702.221318561055 23 -186.86272 33 153.690618001708 70 1 0 3DFACE 8 leg_half 10 702.221318561055 20 -548.126641526877 30 153.690618001708 11 718.363068074693 21 -186.86272 31 139.587654990762 12 718.363068074693 22 -547.889717752797 32 139.587654990762 13 718.363068074693 23 -547.889717752797 33 139.587654990762 70 1 0 3DFACE 8 leg_half 10 473.717763908762 20 -752.465074828487 30 84.861675745457 11 473.642053400866 21 -764.379514823734 31 58.4141748490874 12 473.717752446486 22 -761.101673808691 32 57.6167818413605 13 473.717752446486 23 -761.101673808691 33 57.6167818413605 70 1 0 3DFACE 8 leg_half 10 473.642053400866 20 -764.379514823734 30 58.4141748490874 11 473.717763908762 21 -752.465074828487 31 84.861675745457 12 473.642065047928 22 -755.603683334388 32 86.0982896720056 13 473.642065047928 23 -755.603683334388 33 86.0982896720056 70 1 0 3DFACE 8 leg_half 10 629.962604584718 20 -661.494594174546 30 5.83945951983435 11 617.23954941635 21 -667.162466046757 31 -1.62430069394759e-12 12 617.239549416349 22 -667.162466046756 32 5.83945951983507 13 617.239549416349 23 -667.162466046756 33 5.83945951983507 70 1 0 3DFACE 8 leg_half 10 617.23954941635 20 -667.162466046757 30 -1.62430069394759e-12 11 629.962604584718 21 -661.494594174546 31 5.83945951983435 12 629.962604584718 22 -661.494594174547 32 -2.52668996836292e-12 13 629.962604584718 23 -661.494594174547 33 -2.52668996836292e-12 70 1 0 3DFACE 8 leg_half 10 602.133279596418 20 -599.869415774734 30 181.183685835358 11 454.667736501664 21 -575.898831573499 31 185.305488978394 12 602.133267369982 22 -575.898750159264 32 185.30549023988 13 602.133267369982 23 -575.898750159264 33 185.30549023988 70 1 0 3DFACE 8 leg_half 10 454.667736501664 20 -575.898831573499 30 185.305488978394 11 602.133279596418 21 -599.869415774734 31 181.183685835358 12 454.667748728094 22 -599.869484727166 32 181.183686716704 13 454.667748728094 23 -599.869484727166 33 181.183686716704 70 1 0 3DFACE 8 leg_half 10 744.275046789786 20 -652.245630435845 30 31.1354921818382 11 753.576407084801 21 -630.223630997654 31 36.698358790781 12 753.576402819491 22 -633.437457700021 32 26.5600661905556 13 753.576402819491 23 -633.437457700021 33 26.5600661905556 70 1 0 3DFACE 8 leg_half 10 753.576407084801 20 -630.223630997654 30 36.698358790781 11 744.275046789786 21 -652.245630435845 31 31.1354921818382 12 744.275052115393 22 -648.23289118406 32 43.7940230954864 13 744.275052115393 23 -648.23289118406 33 43.7940230954864 70 1 0 3DFACE 8 leg_half 10 468.840126975903 20 -580.680624318909 30 232.050409880217 11 466.630414711229 21 -611.578139745845 31 229.314444371434 12 468.840142428527 22 -610.976425980055 32 226.840985547634 13 468.840142428527 23 -610.976425980055 33 226.840985547634 70 1 0 3DFACE 8 leg_half 10 466.630414711229 20 -611.578139745845 30 229.314444371434 11 468.840126975903 21 -580.680624318909 31 232.050409880217 12 466.630399083827 22 -580.939676928926 32 234.582789982374 13 466.630399083827 23 -580.939676928926 33 234.582789982374 70 1 0 3DFACE 8 leg_half 10 448.282004539076 20 -742.014746414944 30 80.7442486966709 11 450.471119570638 21 -727.926175547966 31 103.779563345764 12 450.471111788281 22 -739.369532914357 32 79.7020319508277 13 450.471111788281 23 -739.369532914357 33 79.7020319508277 70 1 0 3DFACE 8 leg_half 10 450.471119570638 20 -727.926175547966 30 103.779563345764 11 448.282004539076 21 -742.014746414944 31 80.7442486966709 12 448.282012434797 22 -730.404696521621 32 105.17251147419 13 448.282012434797 23 -730.404696521621 33 105.17251147419 70 1 0 3DFACE 8 leg_half 10 464.090746745054 20 -581.165076540648 30 236.786190394896 11 466.630414711229 21 -611.578139745845 31 229.314444371434 12 466.630399083827 22 -580.939676928926 32 234.582789982374 13 466.630399083827 23 -580.939676928926 33 234.582789982374 70 1 0 3DFACE 8 leg_half 10 466.630414711229 20 -611.578139745845 30 229.314444371434 11 464.090746745054 21 -581.165076540648 31 236.786190394896 12 464.090762524528 22 -612.101685596006 32 231.466577935614 13 464.090762524528 23 -612.101685596006 33 231.466577935614 70 1 0 3DFACE 8 leg_half 10 458.222214863865 20 -581.498326831209 30 240.043876806793 11 461.269972243544 21 -612.537006285544 31 233.256044045395 12 461.269956337624 22 -581.352493258009 32 238.618284093782 13 461.269956337624 23 -581.352493258009 33 238.618284093782 70 1 0 3DFACE 8 leg_half 10 461.269972243544 20 -612.537006285544 30 233.256044045395 11 458.222214863865 21 -581.498326831209 31 240.043876806793 12 458.222230868175 22 -612.875739362874 32 234.648467298763 13 458.222230868175 23 -612.875739362874 33 234.648467298763 70 1 0 3DFACE 8 leg_half 10 127.443487339903 20 -186.86272 30 2030.58313313969 11 100.155807358117 21 -280.294079999999 31 2052.97755335166 12 100.155807358117 22 -186.862719999999 32 2052.97755335166 13 100.155807358117 23 -186.862719999999 33 2052.97755335166 70 1 0 3DFACE 8 leg_half 10 100.155807358117 20 -280.294079999999 30 2052.97755335166 11 127.443487339903 21 -186.86272 31 2030.58313313969 12 127.443487339902 22 -280.29408 32 2030.58313313969 13 127.443487339902 23 -280.29408 33 2030.58313313969 70 1 0 3DFACE 8 leg_half 10 35.2381055728783 20 -280.29408 30 1394.27106395937 11 69.0138872107926 21 -186.86272 31 1404.51683530547 12 35.2381055728787 22 -186.86272 32 1394.27106395937 13 35.2381055728787 23 -186.86272 33 1394.27106395937 70 1 0 3DFACE 8 leg_half 10 69.0138872107926 20 -186.86272 30 1404.51683530547 11 35.2381055728783 21 -280.29408 31 1394.27106395937 12 69.0138872107921 22 -280.29408 32 1404.51683530547 13 69.0138872107921 23 -280.29408 33 1404.51683530547 70 1 0 3DFACE 8 leg_half 10 439.690615872653 20 -735.948583762681 30 108.288220362449 11 442.839477401402 21 -746.337240593148 31 82.4473163912804 12 439.690607723364 22 -747.931486742049 32 83.0754516399063 13 439.690607723364 23 -747.931486742049 33 83.0754516399063 70 1 0 3DFACE 8 leg_half 10 442.839477401402 20 -746.337240593148 30 82.4473163912804 11 439.690615872653 21 -735.948583762681 31 108.288220362449 12 442.839485482368 22 -734.454801614587 32 107.448702644845 13 442.839485482368 23 -734.454801614587 33 107.448702644845 70 1 0 3DFACE 8 leg_half 10 599.602098887118 20 -549.195708452133 30 217.326639240051 11 624.955307916438 21 -578.912147406784 31 214.763348941721 12 624.955290211342 22 -549.169431970937 32 215.762940693873 13 624.955290211342 23 -549.169431970937 33 215.762940693873 70 1 0 3DFACE 8 leg_half 10 624.955307916438 20 -578.912147406784 30 214.763348941721 11 599.602098887118 21 -549.195708452133 31 217.326639240051 12 599.602116671527 22 -579.071662867255 32 216.322569598682 13 599.602116671527 23 -579.071662867255 33 216.322569598682 70 1 0 3DFACE 8 leg_half 10 3.51879034228841e-05 20 -613.257541505822 30 236.217062269571 11 448.317768339636 21 -643.81703834892 31 226.52966896396 12 448.317755482775 22 -613.257331879904 32 236.217059590145 13 448.317755482775 23 -613.257331879904 33 236.217059590145 70 1 0 3DFACE 8 leg_half 10 448.317768339636 20 -643.81703834892 30 226.52966896396 11 3.51879034228841e-05 21 -613.257541505822 31 236.217062269571 12 4.80447490185498e-05 22 -643.817211330157 32 226.529683259707 13 4.80447490185498e-05 23 -643.817211330157 33 226.529683259707 70 1 0 3DFACE 8 leg_half 10 473.717738079349 20 -579.071732366754 30 216.322568521811 11 599.602131038669 21 -607.239310377804 31 211.479085673936 12 599.602116671527 22 -579.071662867255 32 216.322569598682 13 599.602116671527 23 -579.071662867255 33 216.322569598682 70 1 0 3DFACE 8 leg_half 10 599.602131038669 20 -607.239310377804 30 211.479085673936 11 473.717738079349 21 -579.071732366754 31 216.322568521811 12 473.717752446486 22 -607.239369239249 32 211.479086426299 13 473.717752446486 23 -607.239369239249 33 211.479086426299 70 1 0 3DFACE 8 leg_half 10 779.024163430099 20 -640.917494008958 30 40.9117386331972 11 767.82932233817 21 -666.812843070624 31 34.6792140832892 12 779.024158535186 22 -644.605714246329 32 29.2769308468913 13 779.024158535186 23 -644.605714246329 33 29.2769308468913 70 1 0 3DFACE 8 leg_half 10 767.82932233817 20 -666.812843070624 30 34.6792140832892 11 779.024163430099 21 -640.917494008958 31 40.9117386331972 12 767.829328484993 22 -662.181333229905 32 49.2897100106075 13 767.829328484993 23 -662.181333229905 33 49.2897100106075 70 1 0 3DFACE 8 leg_half 10 473.717738079349 20 -579.071732366754 30 216.322568521811 11 473.642053400866 21 -608.036762247305 31 214.756927441262 12 473.717752446486 22 -607.239369239249 32 211.479086426299 13 473.717752446486 23 -607.239369239249 33 211.479086426299 70 1 0 3DFACE 8 leg_half 10 473.642053400866 20 -608.036762247305 30 214.756927441262 11 473.717738079349 21 -579.071732366754 31 216.322568521811 12 473.642038802113 22 -579.415028713919 32 219.67849237548 13 473.642038802113 23 -579.415028713919 33 219.67849237548 70 1 0 3DFACE 8 leg_half 10 665.021391353748 20 -675.601700530057 30 125.979113140781 11 684.332896682708 21 -683.128909470703 31 103.191916498769 12 665.021389999784 22 -690.558190885324 32 108.824546057595 13 665.021389999784 23 -690.558190885324 33 108.824546057595 70 1 0 3DFACE 8 leg_half 10 684.332896682708 20 -683.128909470703 30 103.191916498769 11 665.021391353748 21 -675.601700530057 31 125.979113140781 12 684.332897960916 22 -669.009252539392 32 119.38666515078 13 684.332897960916 23 -669.009252539392 33 119.38666515078 70 1 0 3DFACE 8 leg_half 10 760.201817040574 20 -563.621650860098 30 65.2904582517363 11 764.031409168954 21 -546.296855411639 31 44.7709041931231 12 764.0314182014 22 -561.470422367227 32 44.2609516834995 13 764.0314182014 23 -561.470422367227 33 44.2609516834995 70 1 0 3DFACE 8 leg_half 10 764.031409168954 20 -546.296855411639 30 44.7709041931231 11 760.201817040574 21 -563.621650860098 31 65.2904582517363 12 760.201806938459 22 -546.651150672583 32 65.8608020071314 13 760.201806938459 23 -546.651150672583 33 65.8608020071314 70 1 0 3DFACE 8 leg_half 10 455.006069025402 20 -581.599775817026 30 241.035583090668 11 458.222230868175 21 -612.875739362874 31 234.648467298763 12 458.222214863865 22 -581.498326831209 32 240.043876806793 13 458.222214863865 23 -581.498326831209 33 240.043876806793 70 1 0 3DFACE 8 leg_half 10 458.222230868175 20 -612.875739362874 30 234.648467298763 11 455.006069025402 21 -581.599775817026 31 241.035583090668 12 455.006085098156 22 -613.111377811381 32 235.617099433291 13 455.006085098156 23 -613.111377811381 33 235.617099433291 70 1 0 3DFACE 8 leg_half 10 454.431253196946 20 -601.562294416642 30 188.142314217608 11 454.797653593913 21 -576.264066422956 31 188.875875742312 12 454.797666066761 22 -600.71783565349 32 184.671000694682 13 454.797666066761 23 -600.71783565349 33 184.671000694682 70 1 0 3DFACE 8 leg_half 10 454.797653593913 20 -576.264066422956 30 188.875875742312 11 454.431253196946 21 -601.562294416642 31 188.142314217608 12 454.431240478811 22 -576.627625779333 32 192.429880890276 13 454.431240478811 23 -576.627625779333 33 192.429880890276 70 1 0 3DFACE 8 leg_half 10 760.20182098394 20 -571.352859264312 30 63.961061339529 11 764.0314182014 21 -561.470422367227 31 44.2609516834995 12 764.031420693374 22 -566.35608713258 32 43.4208517516957 13 764.031420693374 23 -566.35608713258 33 43.4208517516957 70 1 0 3DFACE 8 leg_half 10 764.0314182014 20 -561.470422367227 30 44.2609516834995 11 760.20182098394 21 -571.352859264312 31 63.961061339529 12 760.201817040574 22 -563.621650860098 32 65.2904582517363 13 760.201817040574 23 -563.621650860098 33 65.2904582517363 70 1 0 3DFACE 8 leg_half 10 473.10173725466 20 -608.824016722648 30 217.993091128508 11 472.107195414063 21 -638.12348215123 31 212.079066347413 12 473.101749084159 22 -636.941767787464 32 209.079797462849 13 473.101749084159 23 -636.941767787464 33 209.079797462849 70 1 0 3DFACE 8 leg_half 10 472.107195414063 20 -638.12348215123 30 212.079066347413 11 473.10173725466 21 -608.824016722648 31 217.993091128508 12 472.107183407982 22 -609.586009613252 32 221.125411221167 13 472.107183407982 23 -609.586009613252 33 221.125411221167 70 1 0 3DFACE 8 leg_half 10 473.717763908762 20 -634.484263142475 30 202.842487443351 11 473.64207352602 21 -661.950912950484 31 193.514715177954 12 473.717772252345 22 -660.298147720458 32 190.573891403664 13 473.717772252345 23 -660.298147720458 33 190.573891403664 70 1 0 3DFACE 8 leg_half 10 473.64207352602 20 -661.950912950484 30 193.514715177954 11 473.717763908762 21 -634.484263142475 31 202.842487443351 12 473.642065047928 22 -635.720877069339 32 205.981095949127 13 473.642065047928 23 -635.720877069339 33 205.981095949127 70 1 0 3DFACE 8 leg_half 10 644.636259351108 20 -708.826870972768 30 93.0455572990973 11 665.021379319153 21 -712.807071282992 31 69.2363238103713 12 644.636252442318 22 -718.985715046116 32 71.6707212889357 13 644.636252442318 23 -718.985715046116 33 71.6707212889357 70 1 0 3DFACE 8 leg_half 10 665.021379319153 20 -712.807071282992 30 69.2363238103713 11 644.636259351108 21 -708.826870972768 31 93.0455572990973 12 665.02138596315 22 -703.037584126794 32 89.7919287945006 13 665.02138596315 23 -703.037584126794 33 89.7919287945006 70 1 0 3DFACE 8 leg_half 10 760.201824130007 20 -611.213150017197 30 29.2082138072124 11 764.031423295207 21 -590.643016368677 31 23.3578379961104 12 763.093075318335 22 -596.364508960869 32 23.3578379945534 13 763.093075318335 23 -596.364508960869 33 23.3578379945534 70 1 0 3DFACE 8 leg_half 10 764.031423295207 20 -590.643016368677 30 23.3578379961104 11 760.201824130007 21 -611.213150017197 31 29.2082138072124 12 764.031424128692 22 -589.417441849078 32 25.9365225576139 13 764.031424128692 23 -589.417441849078 33 25.9365225576139 70 3 0 3DFACE 8 leg_half 10 764.031424128692 20 -589.417441849078 30 25.9365225576139 11 760.201824130007 21 -611.213150017197 31 29.2082138072124 12 760.201826420081 22 -607.845772298605 32 36.2933847183422 13 760.201826420081 23 -607.845772298605 33 36.2933847183422 70 1 0 3DFACE 8 leg_half 10 448.282017231929 20 -715.574196634022 30 127.790856991425 11 450.471125884842 21 -695.789522350054 31 146.166934958744 12 450.471124298894 22 -713.308606140826 32 126.073163560098 13 450.471124298894 23 -713.308606140826 33 126.073163560098 70 1 0 3DFACE 8 leg_half 10 450.471125884842 20 -695.789522350054 30 146.166934958744 11 448.282017231929 21 -715.574196634022 31 127.790856991425 12 448.282018840978 22 -697.799916727886 32 148.177329336375 13 448.282018840978 23 -697.799916727886 33 148.177329336375 70 1 0 3DFACE 8 leg_half 10 696.758793128571 20 -728.459323997255 30 75.4033102397292 11 673.957376463676 21 -727.485522237732 31 103.531852556699 12 673.957368701467 22 -738.899252779403 32 79.5166578326792 13 673.957368701467 23 -738.899252779403 33 79.5166578326792 70 1 0 3DFACE 8 leg_half 10 673.957376463676 20 -727.485522237732 30 103.531852556699 11 696.758793128571 21 -728.459323997255 31 75.4033102397292 12 696.758800443365 22 -717.703482376537 32 98.03426599948 13 696.758800443365 23 -717.703482376537 33 98.03426599948 70 1 0 3DFACE 8 leg_half 10 649.884119483233 20 -734.56856186502 30 107.512580906988 11 624.955346864755 21 -723.275770827742 31 133.629900413365 12 624.955341833487 22 -738.830110282484 32 109.907610082888 13 624.955341833487 23 -738.830110282484 33 109.907610082888 70 1 0 3DFACE 8 leg_half 10 624.955346864755 20 -723.275770827742 30 133.629900413365 11 649.884119483233 21 -734.56856186502 31 107.512580906988 12 649.884124396077 22 -719.380332193364 32 130.67650856366 13 649.884124396077 23 -719.380332193364 33 130.67650856366 70 1 0 3DFACE 8 leg_half 10 472.107195414063 20 -761.701653732916 30 88.5008947532808 11 470.677497105752 21 -773.716303656482 31 60.6855157395589 12 472.107183407982 22 -770.747998603796 32 59.9634222143927 13 472.107183407982 23 -770.747998603796 33 59.9634222143927 70 1 0 3DFACE 8 leg_half 10 470.677497105752 20 -773.716303656482 30 60.6855157395589 11 472.107195414063 21 -761.701653732916 31 88.5008947532808 12 470.677509279169 22 -764.543874438695 32 89.6207321892548 13 470.677509279169 23 -764.543874438695 33 89.6207321892548 70 1 0 3DFACE 8 leg_half 10 429.267752143919 20 -758.636493889386 30 57.017103815686 11 432.838915479952 21 -763.131305674907 31 29.1613230247316 12 429.267737950976 22 -763.421251234373 32 29.1909851596944 13 429.267737950976 23 -763.421251234373 33 29.1909851596944 70 1 0 3DFACE 8 leg_half 10 432.838915479952 20 -763.131305674907 30 29.1613230247316 11 429.267752143919 21 -758.636493889386 31 57.017103815686 12 432.838929652884 22 -758.353294490404 32 56.9482088735863 13 432.838929652884 23 -758.353294490404 33 56.9482088735863 70 1 0 3DFACE 8 leg_half 10 429.267778397118 20 -703.948312537967 30 154.325725145835 11 432.838954191733 21 -722.270804730449 31 132.867998161508 12 429.267776717416 22 -722.503058608961 32 133.044085628428 13 429.267776717416 23 -722.503058608961 33 133.044085628428 70 1 0 3DFACE 8 leg_half 10 432.838954191733 20 -722.270804730449 30 132.867998161508 11 429.267778397118 21 -703.948312537967 31 154.325725145835 12 432.838955869068 22 -703.742219504346 32 154.119632112235 13 432.838955869068 23 -703.742219504346 33 154.119632112235 70 1 0 3DFACE 8 leg_half 10 445.721721263973 20 -752.62898843986 30 55.5556638784362 11 448.281980096118 21 -754.771251996272 31 28.306117626709 12 445.721707495526 22 -757.270638693351 32 28.5617953495419 13 445.721707495526 23 -757.270638693351 33 28.5617953495419 70 1 0 3DFACE 8 leg_half 10 448.281980096118 20 -754.771251996272 30 28.306117626709 11 445.721721263973 21 -752.62898843986 31 55.5556638784362 12 448.281993692064 22 -750.187755353023 32 54.9617894316777 13 448.281993692064 23 -750.187755353023 33 54.9617894316777 70 1 0 3DFACE 8 leg_half 10 458.222258577851 20 -743.526108574926 30 148.983037664963 11 455.006114828511 21 -723.308225016813 31 173.685637622731 12 455.006112926336 22 -744.320489807817 32 149.585310783685 13 455.006112926336 23 -744.320489807817 33 149.585310783685 70 1 0 3DFACE 8 leg_half 10 455.006114828511 20 -723.308225016813 30 173.685637622731 11 458.222258577851 21 -743.526108574926 31 148.983037664963 12 458.222260471925 22 -722.603322716877 32 172.980735322867 13 458.222260471925 23 -722.603322716877 33 172.980735322867 70 1 0 3DFACE 8 leg_half 10 448.282018840978 20 -697.799916727886 30 148.177329336375 11 450.471124298894 21 -675.695750953173 31 163.686018751541 12 450.471125884842 22 -695.789522350054 32 146.166934958744 13 450.471125884842 23 -695.789522350054 33 146.166934958744 70 1 0 3DFACE 8 leg_half 10 450.471124298894 20 -675.695750953173 30 163.686018751541 11 448.282018840978 21 -697.799916727886 31 148.177329336375 12 448.282017231929 22 -677.413444384727 32 165.951609244563 13 448.282017231929 23 -677.413444384727 33 165.951609244563 70 1 0 3DFACE 8 leg_half 10 472.107211244211 20 -712.762199391597 30 163.139611998578 11 470.677523524142 21 -734.870094172174 31 142.420342197022 12 472.107209463225 22 -732.435769686289 32 140.574720545467 13 472.107209463225 23 -732.435769686289 33 140.574720545467 70 1 0 3DFACE 8 leg_half 10 470.677523524142 20 -734.870094172174 30 142.420342197022 11 472.107211244211 21 -712.762199391597 31 163.139611998578 12 470.677525329952 22 -714.922321501014 32 165.299734107777 13 470.677525329952 23 -714.922321501014 33 165.299734107777 70 1 0 3DFACE 8 leg_half 10 470.677525329952 20 -714.922321501014 30 165.299734107777 11 468.840169183023 21 -737.123145968814 31 144.128529165728 12 470.677523524142 22 -734.870094172174 32 142.420342197022 13 470.677523524142 23 -734.870094172174 33 142.420342197022 70 1 0 3DFACE 8 leg_half 10 468.840169183023 20 -737.123145968814 30 144.128529165728 11 470.677525329952 21 -714.922321501014 31 165.299734107777 12 468.840171011807 22 -716.921589517517 32 167.299002124079 13 468.840171011807 23 -716.921589517517 33 167.299002124079 70 1 0 3DFACE 8 leg_half 10 448.317768339636 20 -776.152256350036 30 94.1944509495159 11 5.74034615733243e-05 21 -762.391004206896 31 123.149179321074 12 4.80447490185498e-05 22 -776.152270645783 32 94.1946239307526 13 4.80447490185498e-05 23 -776.152270645783 33 94.1946239307526 70 1 0 3DFACE 8 leg_half 10 5.74034615733243e-05 20 -762.391004206896 30 123.149179321074 11 448.317768339636 21 -776.152256350036 31 94.1944509495159 12 448.31777769836 22 -762.390973409752 32 123.149041059795 13 448.31777769836 23 -762.390973409752 33 123.149041059795 70 1 0 3DFACE 8 leg_half 10 454.797689138238 20 -686.233268095701 30 136.610680705353 11 454.667769896794 21 -665.362499898554 31 150.056742450276 12 454.667771343765 22 -683.695448366281 32 134.072860976189 13 454.667771343765 23 -683.695448366281 33 134.072860976189 70 1 0 3DFACE 8 leg_half 10 454.667769896794 20 -665.362499898554 30 150.056742450276 11 454.797689138238 21 -686.233268095701 31 136.610680705353 12 454.797687662105 22 -667.530828563864 32 152.916709017132 13 454.797687662105 23 -667.530828563864 33 152.916709017132 70 1 0 3DFACE 8 leg_half 10 442.839477401402 20 -632.069903787681 30 196.714653208256 11 439.690596528004 21 -606.087584234742 31 206.744381898986 12 442.839466299903 22 -605.682549578299 32 205.079413127562 13 442.839466299903 23 -605.682549578299 33 205.079413127562 70 1 0 3DFACE 8 leg_half 10 439.690596528004 20 -606.087584234742 30 206.744381898986 11 442.839477401402 21 -632.069903787681 31 196.714653208256 12 439.690607723364 22 -632.698039036468 32 198.308899357094 13 439.690607723364 23 -632.698039036468 33 198.308899357094 70 1 0 3DFACE 8 leg_half 10 448.282012434797 20 -730.404696521621 30 105.17251147419 11 450.471124298894 21 -713.308606140826 31 126.073163560098 12 450.471119570638 22 -727.926175547966 32 103.779563345764 13 450.471119570638 23 -727.926175547966 33 103.779563345764 70 1 0 3DFACE 8 leg_half 10 450.471124298894 20 -713.308606140826 30 126.073163560098 11 448.282012434797 21 -730.404696521621 31 105.17251147419 12 448.282017231929 22 -715.574196634022 32 127.790856991425 13 448.282017231929 23 -715.574196634022 33 127.790856991425 70 1 0 3DFACE 8 leg_half 10 439.690582495428 20 -578.575873947693 30 211.475076092305 11 436.335569590044 21 -549.135217804424 31 213.722949367545 12 439.690564957562 22 -549.114088023756 32 212.46522637891 13 439.690564957562 23 -549.114088023756 33 212.46522637891 70 1 0 3DFACE 8 leg_half 10 436.335569590044 20 -549.135217804424 30 213.722949367545 11 439.690582495428 21 -578.575873947693 31 211.475076092305 12 436.335587191701 22 -578.704166932226 32 212.72919754513 13 436.335587191701 23 -578.704166932226 33 212.72919754513 70 1 0 3DFACE 8 leg_half 10 450.471111788281 20 -629.324619346527 30 189.746945529741 11 452.246991021541 21 -603.175034087969 31 194.771794391524 12 452.247001541956 22 -628.181198889296 32 186.844869872835 13 452.247001541956 23 -628.181198889296 33 186.844869872835 70 1 0 3DFACE 8 leg_half 10 452.246991021541 20 -603.175034087969 30 194.771794391524 11 450.471111788281 21 -629.324619346527 31 189.746945529741 12 450.471101097006 22 -603.912334485117 32 197.802609624747 13 450.471101097006 23 -603.912334485117 33 197.802609624747 70 1 0 3DFACE 8 leg_half 10 673.957344671825 20 -751.440053094339 30 27.9652257853831 11 649.884100288402 21 -754.828812255533 31 56.0907148781112 12 649.884086364505 22 -759.522868440055 32 28.7920756889693 13 649.884086364505 23 -759.522868440055 33 28.7920756889693 70 1 0 3DFACE 8 leg_half 10 649.884100288402 20 -754.828812255533 30 56.0907148781112 11 673.957344671825 21 -751.440053094339 31 27.9652257853831 12 673.957358037872 22 -746.934060776874 32 54.170165314894 13 673.957358037872 23 -746.934060776874 33 54.170165314894 70 1 0 3DFACE 8 leg_half 10 717.894030194972 20 -548.526532054241 30 177.494989005398 11 736.99765201229 21 -186.86272 31 160.753391204502 12 717.894030194972 22 -186.86272 32 177.494989005399 13 717.894030194972 23 -186.86272 33 177.494989005399 70 1 0 3DFACE 8 leg_half 10 736.99765201229 20 -186.86272 30 160.753391204502 11 717.894030194972 21 -548.526532054241 31 177.494989005398 12 736.99765201229 22 -548.245280356442 32 160.753391204502 13 736.99765201229 23 -548.245280356442 33 160.753391204502 70 1 0 3DFACE 8 leg_half 10 602.133289350819 20 -623.054826905935 30 173.833938065877 11 454.667748728094 21 -599.869484727166 31 181.183686716704 12 602.133279596418 22 -599.869415774734 32 181.183685835358 13 602.133279596418 23 -599.869415774734 33 181.183685835358 70 1 0 3DFACE 8 leg_half 10 454.667748728094 20 -599.869484727166 30 181.183686716704 11 602.133289350819 21 -623.054826905935 31 173.833938065877 12 454.667758482489 22 -623.054883804802 32 173.83394276819 13 454.667758482489 23 -623.054883804802 33 173.83394276819 70 1 0 3DFACE 8 leg_half 10 696.758804887548 20 -703.964135051352 30 118.98846898236 11 673.957382761532 21 -695.432070757716 31 145.809483366442 12 673.957381179691 22 -712.905797682657 32 125.767734693656 13 673.957381179691 23 -712.905797682657 33 125.767734693656 70 1 0 3DFACE 8 leg_half 10 673.957382761532 20 -695.432070757716 30 145.809483366442 11 696.758804887548 21 -703.964135051352 31 118.98846898236 12 696.758806378212 22 -687.497596031337 32 137.875008640862 13 696.758806378212 23 -687.497596031337 33 137.875008640862 70 1 0 3DFACE 8 leg_half 10 452.247001541956 20 -736.467457257336 30 78.5586114938894 11 453.575566723046 21 -722.299342389133 31 100.617239704551 12 453.575559198051 22 -733.364267924859 32 77.3359522782304 13 453.575559198051 23 -733.364267924859 33 77.3359522782304 70 1 0 3DFACE 8 leg_half 10 453.575566723046 20 -722.299342389133 30 100.617239704551 11 452.247001541956 21 -736.467457257336 31 78.5586114938894 12 452.247009199941 22 -725.20697903804 32 102.251353856666 13 452.247009199941 23 -725.20697903804 33 102.251353856666 70 1 0 3DFACE 8 leg_half 10 673.957376463676 20 -727.485522237732 30 103.531852556699 11 649.884124396077 21 -719.380332193364 31 130.67650856366 12 649.884119483233 22 -734.56856186502 32 107.512580906988 13 649.884119483233 23 -734.56856186502 33 107.512580906988 70 1 0 3DFACE 8 leg_half 10 649.884124396077 20 -719.380332193364 30 130.67650856366 11 673.957376463676 21 -727.485522237732 31 103.531852556699 12 673.957381179691 22 -712.905797682657 32 125.767734693656 13 673.957381179691 23 -712.905797682657 33 125.767734693656 70 1 0 3DFACE 8 leg_half 10 702.221360398304 20 -645.663323591295 30 124.074113264079 11 684.332892871929 21 -634.846784199308 31 145.28747843271 12 702.22135687427 22 -629.047597461153 32 134.968788313225 13 702.22135687427 23 -629.047597461153 33 134.968788313225 70 1 0 3DFACE 8 leg_half 10 684.332892871929 20 -634.846784199308 30 145.28747843271 11 702.221360398304 21 -645.663323591295 31 124.074113264079 12 684.332896682708 22 -652.814503888805 32 133.506322083721 13 684.332896682708 23 -652.814503888805 33 133.506322083721 70 1 0 3DFACE 8 leg_half 10 644.636263548619 20 -662.459295238253 30 146.227531781659 11 623.546362358205 21 -644.548798426367 31 162.550587374486 12 644.636259351108 22 -642.668144691721 32 159.204283586808 13 644.636259351108 23 -642.668144691721 33 159.204283586808 70 1 0 3DFACE 8 leg_half 10 623.546362358205 20 -644.548798426367 30 162.550587374486 11 644.636263548619 21 -662.459295238253 31 146.227531781659 12 623.546366648706 22 -664.778393037384 32 149.286354566558 13 623.546366648706 23 -664.778393037384 33 149.286354566558 70 1 0 3DFACE 8 leg_half 10 599.602150844536 20 -740.196470143783 30 110.675521501907 11 473.71777732158 21 -724.524762147558 31 134.576865377446 12 473.717772252345 22 -740.196478791399 32 110.675560324675 13 473.717772252345 23 -740.196478791399 33 110.675560324675 70 1 0 3DFACE 8 leg_half 10 473.71777732158 20 -724.524762147558 30 134.576865377446 11 599.602150844536 21 -740.196470143783 31 110.675521501907 12 599.602155913773 22 -724.524747581215 32 134.576835581469 13 599.602155913773 23 -724.524747581215 33 134.576835581469 70 1 0 3DFACE 8 leg_half 10 473.642034971754 20 -769.517333598178 30 23.3578378654237 11 473.101722427237 21 -772.614333460954 31 30.1313729498036 12 473.101718395121 22 -772.841978102158 32 23.3578378645206 13 473.101718395121 23 -772.841978102158 33 23.3578378645206 70 1 0 3DFACE 8 leg_half 10 473.101722427237 20 -772.614333460954 30 30.1313729498036 11 473.642034971754 21 -769.517333598178 31 23.3578378654237 12 473.642038802113 22 -769.301079755069 32 29.7924413152051 13 473.642038802113 23 -769.301079755069 33 29.7924413152051 70 1 0 3DFACE 8 leg_half 10 429.267776717416 20 -682.666673022429 30 172.880471218973 11 0.016298390231306 21 -659.055291474171 31 188.362205788973 12 429.267771709642 22 -659.055159092928 32 188.362176301584 13 429.267771709642 23 -659.055159092928 33 188.362176301584 70 1 0 3DFACE 8 leg_half 10 0.016298390231306 20 -659.055291474171 30 188.362205788973 11 429.267776717416 21 -682.666673022429 31 172.880471218973 12 0.016303397997907 22 -682.666774623337 32 172.880520888553 13 0.016303397997907 23 -682.666774623337 33 172.880520888553 70 1 0 3DFACE 8 leg_half 10 432.838954191733 20 -682.490585555484 30 172.648217340479 11 429.267771709642 21 -659.055159092928 31 188.362176301584 12 432.838949191021 22 -658.912362146436 32 188.108094342889 13 432.838949191021 23 -658.912362146436 33 188.108094342889 70 1 0 3DFACE 8 leg_half 10 429.267771709642 20 -659.055159092928 30 188.362176301584 11 432.838954191733 21 -682.490585555484 31 172.648217340479 12 429.267776717416 22 -682.666673022429 32 172.880471218973 13 429.267776717416 23 -682.666673022429 33 172.880471218973 70 1 0 3DFACE 8 leg_half 10 466.630441768332 20 -695.289054806558 30 189.529056864572 11 464.090791712392 21 -720.287768351753 31 170.665180957976 12 466.6304436178 22 -718.721597772832 32 169.099010379212 13 466.6304436178 23 -718.721597772832 33 169.099010379212 70 1 0 3DFACE 8 leg_half 10 464.090791712392 20 -720.287768351753 30 170.665180957976 11 466.630441768332 21 -695.289054806558 31 189.529056864572 12 464.090789844927 22 -696.627200742591 32 191.294034464012 13 464.090789844927 23 -696.627200742591 33 191.294034464012 70 1 0 3DFACE 8 leg_half 10 448.317783384355 20 -699.580940660874 30 195.189933989489 11 451.68334645801 21 -723.691181151156 31 174.068593757036 12 451.683344551435 22 -699.535098538027 32 195.129470137406 13 451.683344551435 23 -699.535098538027 33 195.129470137406 70 1 0 3DFACE 8 leg_half 10 451.68334645801 20 -723.691181151156 30 174.068593757036 11 448.317783384355 21 -699.580940660874 31 195.189933989489 12 448.317785291547 22 -723.744834584347 32 174.122247190222 13 448.317785291547 23 -723.744834584347 33 174.122247190222 70 1 0 3DFACE 8 leg_half 10 432.838940960221 20 -633.447412164356 30 200.210851816573 11 429.267752143919 21 -606.639691213326 31 209.013906507055 12 432.838929652884 22 -606.570796271198 32 208.73070710808 13 432.838929652884 23 -606.570796271198 33 208.73070710808 70 1 0 3DFACE 8 leg_half 10 429.267752143919 20 -606.639691213326 30 209.013906507055 11 432.838940960221 21 -633.447412164356 31 200.210851816573 12 429.267763467221 22 -633.554254686993 32 200.482021877632 13 429.267763467221 23 -633.554254686993 33 200.482021877632 70 1 0 3DFACE 8 leg_half 10 451.683316658874 20 -613.239395048328 30 236.143333156642 11 455.006097921195 21 -643.590691959854 31 225.95519307716 12 455.006085098156 22 -613.111377811381 32 235.617099433291 13 455.006085098156 23 -613.111377811381 33 235.617099433291 70 1 0 3DFACE 8 leg_half 10 455.006097921195 20 -643.590691959854 30 225.95519307716 11 451.683316658874 21 -613.239395048328 31 236.143333156642 12 451.683329511579 22 -643.789222672817 32 226.45907411243 13 451.683329511579 23 -643.789222672817 33 226.45907411243 70 1 0 3DFACE 8 leg_half 10 0.179983602711226 20 -280.294079999999 30 2125.50255258978 11 46.8683973137003 21 -186.862719999999 31 2125.50255258978 12 0.179983602711646 22 -186.862719999999 32 2125.50255258978 13 0.179983602711646 23 -186.862719999999 33 2125.50255258978 70 1 0 3DFACE 8 leg_half 10 46.8683973137003 20 -186.862719999999 30 2125.50255258978 11 0.179983602711226 21 -280.294079999999 31 2125.50255258978 12 46.8683973136999 22 -280.294079999999 32 2125.50255258978 13 46.8683973136999 23 -280.294079999999 33 2125.50255258978 70 1 0 3DFACE 8 leg_half 10 702.221360398304 20 -645.663323591295 30 124.074113264079 11 718.363103364091 21 -622.121886696301 31 122.645633187677 12 718.363106545679 22 -637.12298630735 32 112.809643814588 13 718.363106545679 23 -637.12298630735 33 112.809643814588 70 1 0 3DFACE 8 leg_half 10 718.363103364091 20 -622.121886696301 30 122.645633187677 11 702.221360398304 21 -645.663323591295 31 124.074113264079 12 702.22135687427 22 -629.047597461153 32 134.968788313225 13 702.22135687427 23 -629.047597461153 33 134.968788313225 70 1 0 3DFACE 8 leg_half 10 468.840122392167 20 -781.931785179335 30 23.3578378611765 11 466.630399083827 21 -784.205377362117 31 31.3170895287116 12 466.630394345883 22 -784.472871509203 32 23.3578378599218 13 466.630394345883 23 -784.472871509203 33 23.3578378599218 70 1 0 3DFACE 8 leg_half 10 466.630399083827 20 -784.205377362117 30 31.3170895287116 11 468.840122392167 21 -781.931785179335 31 23.3578378611765 12 468.840126975903 22 -781.672997259934 32 31.0580369189494 13 468.840126975903 23 -781.672997259934 33 31.0580369189494 70 1 0 3DFACE 8 leg_half 10 453.575572828439 20 -691.225448319662 30 141.602860928812 11 454.431275216977 21 -669.689208643299 31 155.763553572255 12 454.431276722139 22 -688.759443912117 32 139.136856521515 13 454.431276722139 23 -688.759443912117 33 139.136856521515 70 1 0 3DFACE 8 leg_half 10 454.431275216977 20 -669.689208643299 30 155.763553572255 11 453.575572828439 21 -691.225448319662 31 141.602860928812 12 453.575571294939 22 -671.796177947369 32 158.542588616663 13 453.575571294939 23 -671.796177947369 33 158.542588616663 70 1 0 3DFACE 8 leg_half 10 455.006069025402 20 -790.658170470477 30 31.9771884161607 11 451.683316658874 21 -785.765920539638 31 63.616807647956 12 451.683300548936 22 -791.196939781596 32 32.0323039932388 13 451.683300548936 23 -791.196939781596 33 32.0323039932388 70 1 0 3DFACE 8 leg_half 10 451.683316658874 20 -785.765920539638 30 63.616807647956 11 455.006069025402 21 -790.658170470477 31 31.9771884161607 12 455.006085098156 22 -785.239686816274 32 63.4887904110616 13 455.006085098156 23 -785.239686816274 33 63.4887904110616 70 1 0 3DFACE 8 leg_half 10 732.466065703719 20 -627.348021252322 30 99.9167335104564 11 744.27505599199 21 -605.41026540619 31 92.9100649699753 12 744.27505834726 22 -616.515297047424 32 85.6286672029373 13 744.27505834726 23 -616.515297047424 33 85.6286672029373 70 1 0 3DFACE 8 leg_half 10 744.27505599199 20 -605.41026540619 30 92.9100649699753 11 732.466065703719 21 -627.348021252322 31 99.9167335104564 12 732.466062914084 22 -614.194966001222 32 108.540988733599 13 732.466062914084 23 -614.194966001222 33 108.540988733599 70 1 0 3DFACE 8 leg_half 10 461.269972243544 20 -612.537006285544 30 233.256044045395 11 464.090775113584 21 -642.024842985963 31 221.980972610863 12 464.090762524528 22 -612.101685596006 32 231.466577935614 13 464.090762524528 23 -612.101685596006 33 231.466577935614 70 1 0 3DFACE 8 leg_half 10 464.090775113584 20 -642.024842985963 30 221.980972610863 11 461.269972243544 21 -612.537006285544 31 233.256044045395 12 461.26998493348 22 -642.699946567149 32 223.694427829008 13 461.26998493348 23 -642.699946567149 33 223.694427829008 70 1 0 3DFACE 8 leg_half 10 623.546366648706 20 -664.778393037384 30 149.286354566558 11 602.13329645121 21 -645.022448764174 31 163.393359945326 12 623.546362358205 22 -644.548798426367 32 162.550587374486 13 623.546362358205 23 -644.548798426367 33 162.550587374486 70 1 0 3DFACE 8 leg_half 10 602.13329645121 20 -645.022448764174 30 163.393359945326 11 623.546366648706 21 -664.778393037384 31 149.286354566558 12 602.13330076513 22 -665.362464994464 32 150.056725386733 13 602.13330076513 23 -665.362464994464 33 150.056725386733 70 1 0 3DFACE 8 leg_half 10 0.0163050776986444 20 -703.948386395801 30 154.325799003669 11 429.267776717416 21 -722.503058608961 31 133.044085628428 12 0.016303397997907 22 -722.503108278541 32 133.044187229337 13 0.016303397997907 23 -722.503108278541 33 133.044187229337 70 1 0 3DFACE 8 leg_half 10 429.267776717416 20 -722.503058608961 30 133.044085628428 11 0.0163050776986444 21 -703.948386395801 31 154.325799003669 12 429.267778397118 22 -703.948312537967 32 154.325725145835 13 429.267778397118 23 -703.948312537967 33 154.325725145835 70 1 0 3DFACE 8 leg_half 10 445.721745102502 20 -678.931345516719 30 167.953679054935 11 442.839485482368 21 -657.071290040049 31 184.832214227177 12 445.721740244506 22 -656.026027291755 32 182.972342518915 13 445.721740244506 23 -656.026027291755 33 182.972342518915 70 1 0 3DFACE 8 leg_half 10 442.839485482368 20 -657.071290040049 30 184.832214227177 11 445.721745102502 21 -678.931345516719 31 167.953679054935 12 442.839490392048 22 -680.220295673638 32 169.6537686923 13 442.839490392048 23 -680.220295673638 33 169.6537686923 70 1 0 3DFACE 8 leg_half 10 464.090789844927 20 -740.916621855406 30 147.004613346736 11 461.270001665299 21 -721.590015329221 31 171.967427935313 12 461.269999782869 22 -742.384173786494 32 148.117261370797 13 461.269999782869 23 -742.384173786494 33 148.117261370797 70 1 0 3DFACE 8 leg_half 10 461.270001665299 20 -721.590015329221 30 171.967427935313 11 464.090789844927 21 -740.916621855406 31 147.004613346736 12 464.090791712392 22 -720.287768351753 32 170.665180957976 13 464.090791712392 23 -720.287768351753 33 170.665180957976 70 1 0 3DFACE 8 leg_half 10 461.269999782869 20 -742.384173786494 30 148.117261370797 11 458.222260471925 21 -722.603322716877 31 172.980735322867 12 458.222258577851 22 -743.526108574926 32 148.983037664963 13 458.222258577851 23 -743.526108574926 33 148.983037664963 70 1 0 3DFACE 8 leg_half 10 458.222260471925 20 -722.603322716877 30 172.980735322867 11 461.269999782869 21 -742.384173786494 31 148.117261370797 12 461.270001665299 22 -721.590015329221 32 171.967427935313 13 461.270001665299 23 -721.590015329221 33 171.967427935313 70 1 0 3DFACE 8 leg_half 10 451.683281480069 20 -549.621181308374 30 242.650939792116 11 455.00604998394 21 -186.86272 31 242.110623248711 12 451.683281480069 22 -186.86272 32 242.650939792116 13 451.683281480069 23 -186.86272 33 242.650939792116 70 1 0 3DFACE 8 leg_half 10 455.00604998394 20 -186.86272 30 242.110623248711 11 451.683281480069 21 -549.621181308374 31 242.650939792116 12 455.00604998394 22 -549.612103415805 32 242.110623248711 13 455.00604998394 23 -549.612103415805 33 242.110623248711 70 1 0 3DFACE 8 leg_half 10 736.997696774917 20 -665.645302851503 30 116.022715463229 11 717.894077714131 21 -692.709977485149 31 110.455949073024 12 736.997695535365 22 -679.337949441333 32 100.317732616843 13 736.997695535365 23 -679.337949441333 33 100.317732616843 70 1 0 3DFACE 8 leg_half 10 717.894077714131 20 -692.709977485149 30 110.455949073024 11 736.997696774917 21 -665.645302851503 31 116.022715463229 12 717.894079090038 22 -677.51110607242 32 127.888518682951 13 717.894079090038 23 -677.51110607242 33 127.888518682951 70 1 0 3DFACE 8 leg_half 10 717.894077714131 20 -692.709977485149 30 110.455949073024 11 696.758806378212 21 -687.497596031337 31 137.875008640862 12 696.758804887548 22 -703.964135051352 32 118.98846898236 13 696.758804887548 23 -703.964135051352 33 118.98846898236 70 1 0 3DFACE 8 leg_half 10 696.758806378212 20 -687.497596031337 30 137.875008640862 11 717.894077714131 21 -692.709977485149 31 110.455949073024 12 717.894079090038 22 -677.51110607242 32 127.888518682951 13 717.894079090038 23 -677.51110607242 33 127.888518682951 70 1 0 3DFACE 8 leg_half 10 767.829316563608 20 -668.759576574313 30 23.3578379800722 11 753.739272918395 21 -687.397248351576 31 39.6867423818656 12 753.739264589701 22 -690.205036468984 32 23.3578379709152 13 753.739264589701 23 -690.205036468984 33 23.3578379709152 70 1 0 3DFACE 8 leg_half 10 753.739272918395 20 -687.397248351576 30 39.6867423818656 11 767.829316563608 21 -668.759576574313 31 23.3578379800722 12 767.82932233817 22 -666.812843070624 32 34.6792140832892 13 767.82932233817 23 -666.812843070624 33 34.6792140832892 70 1 0 3DFACE 8 leg_half 10 442.839492038848 20 -701.085065061495 30 151.462477669651 11 439.690620823844 21 -681.255534297249 31 171.019219664594 12 442.839490392048 22 -680.220295673638 32 169.6537686923 13 442.839490392048 23 -680.220295673638 33 169.6537686923 70 1 0 3DFACE 8 leg_half 10 439.690620823844 20 -681.255534297249 30 171.019219664594 11 442.839492038848 21 -701.085065061495 31 151.462477669651 12 439.690622484567 22 -702.296711761968 32 152.674124370004 13 439.690622484567 23 -702.296711761968 33 152.674124370004 70 1 0 3DFACE 8 leg_half 10 458.222230868175 20 -784.271054681722 30 63.2531519626526 11 455.006097921195 21 -775.577780463213 31 93.968104560508 12 455.006085098156 22 -785.239686816274 32 63.4887904110616 13 455.006085098156 23 -785.239686816274 33 63.4887904110616 70 1 0 3DFACE 8 leg_half 10 455.006097921195 20 -775.577780463213 30 93.968104560508 11 458.222230868175 21 -784.271054681722 31 63.2531519626526 12 458.222243636608 22 -774.650292730724 32 93.6026725589312 13 458.222243636608 23 -774.650292730724 33 93.6026725589312 70 1 0 3DFACE 8 leg_half 10 455.006085098156 20 -785.239686816274 30 63.4887904110616 11 451.683329511579 21 -776.081661498503 31 94.1666352734205 12 451.683316658874 22 -785.765920539638 32 63.616807647956 13 451.683316658874 23 -785.765920539638 33 63.616807647956 70 1 0 3DFACE 8 leg_half 10 451.683329511579 20 -776.081661498503 30 94.1666352734205 11 455.006085098156 21 -785.239686816274 31 63.4887904110616 12 455.006097921195 22 -775.577780463213 32 93.968104560508 13 455.006097921195 23 -775.577780463213 33 93.968104560508 70 1 0 3DFACE 8 leg_half 10 843.130722681614 20 -608.45291709122 30 -4.11489509133389e-11 11 838.782876772251 21 -630.31101453706 31 23.3578380792528 12 838.782876772249 22 -630.311014537056 32 -1.18393472803291e-10 13 838.782876772249 23 -630.311014537056 33 -1.18393472803291e-10 70 1 0 3DFACE 8 leg_half 10 838.782876772251 20 -630.31101453706 30 23.3578380792528 11 843.130722681614 21 -608.45291709122 31 -4.11489509133389e-11 12 843.130722681617 22 -608.452917091224 32 23.3578380793307 13 843.130722681617 23 -608.452917091224 33 23.3578380793307 70 1 0 3DFACE 8 leg_half 10 772.221088848008 20 -745.599413064465 30 -2.18378204408509e-10 11 746.929122901678 21 -767.779871902217 31 23.3578380791593 12 746.929122901675 22 -767.779871902213 32 -2.12061479487602e-10 13 746.929122901675 23 -767.779871902213 33 -2.12061479487602e-10 70 1 0 3DFACE 8 leg_half 10 746.929122901678 20 -767.779871902217 30 23.3578380791593 11 772.221088848008 21 -745.599413064465 31 -2.18378204408509e-10 12 772.221088848011 22 -745.599413064469 32 23.3578380791531 13 772.221088848011 23 -745.599413064469 33 23.3578380791531 70 1 0 3DFACE 8 leg_half 10 702.22135687427 20 -684.591375697813 30 79.4250100709702 11 718.363106545679 21 -662.432231199989 31 87.5003989193992 12 718.363103364091 22 -672.268220571567 32 72.49929930736 13 718.363103364091 23 -672.268220571567 33 72.49929930736 70 1 0 3DFACE 8 leg_half 10 718.363106545679 20 -662.432231199989 30 87.5003989193992 11 702.22135687427 21 -684.591375697813 31 79.4250100709702 12 702.221360398304 22 -673.696700650341 32 96.0407362022104 13 702.221360398304 23 -673.696700650341 33 96.0407362022104 70 1 0 3DFACE 8 leg_half 10 442.839466299903 20 -754.702000509797 30 56.0599621810555 11 445.721707495526 21 -757.270638693351 31 28.5617953495419 12 442.839452384975 22 -759.393032819931 32 28.7789085623947 13 442.839452384975 23 -759.393032819931 33 28.7789085623947 70 1 0 3DFACE 8 leg_half 10 445.721707495526 20 -757.270638693351 30 28.5617953495419 11 442.839466299903 21 -754.702000509797 31 56.0599621810555 12 445.721721263973 22 -752.62898843986 32 55.5556638784362 13 445.721721263973 23 -752.62898843986 33 55.5556638784362 70 1 0 3DFACE 8 leg_half 10 847.545902396357 20 -186.86272 30 3.60955709766131e-13 11 847.54590239636 21 -563.749226612819 31 23.3578380793719 12 847.545902396357 22 -563.749226612815 32 1.80477854883065e-13 13 847.545902396357 23 -563.749226612815 33 1.80477854883065e-13 70 1 0 3DFACE 8 leg_half 10 847.54590239636 20 -563.749226612819 30 23.3578380793719 11 847.545902396357 21 -186.86272 31 3.60955709766131e-13 12 847.545902396362 22 56.1856515498016 32 1.46187062455283e-11 13 847.545902396362 23 56.1856515498016 33 1.46187062455283e-11 70 13 0 3DFACE 8 leg_half 10 847.54590239636 20 -563.749226612819 30 23.3578380793719 11 847.545902396362 21 56.1856515498016 31 1.46187062455283e-11 12 847.545902396365 22 56.1856515497976 32 23.3578380793863 13 847.545902396365 23 56.1856515497976 33 23.3578380793863 70 1 0 3DFACE 8 leg_half 10 448.281980096118 20 -754.771251996272 30 28.306117626709 11 450.471084922909 21 -752.099463345238 31 23.3578378619863 12 448.28197715053 22 -754.937553544539 32 23.3578378606726 13 448.28197715053 23 -754.937553544539 33 23.3578378606726 70 1 0 3DFACE 8 leg_half 10 450.471084922909 20 -752.099463345238 30 23.3578378619863 11 448.281980096118 21 -754.771251996272 31 28.306117626709 12 450.471087696265 22 -751.942885609203 32 28.0167869283821 13 450.471087696265 23 -751.942885609203 33 28.0167869283821 70 1 0 3DFACE 8 leg_half 10 753.739249813186 20 -186.86272 30 141.649769387185 11 736.99765201229 21 -548.245280356442 31 160.753391204502 12 753.739249813186 22 -547.924349168088 32 141.649769387184 13 753.739249813186 23 -547.924349168088 33 141.649769387184 70 1 0 3DFACE 8 leg_half 10 736.99765201229 20 -548.245280356442 30 160.753391204502 11 753.739249813186 21 -186.86272 31 141.649769387185 12 736.99765201229 22 -186.86272 32 160.753391204502 13 736.99765201229 23 -186.86272 33 160.753391204502 70 1 0 3DFACE 8 leg_half 10 454.797687662105 20 -667.530828563864 30 152.916709017132 11 454.667765582876 21 -645.022494242574 31 163.393370075456 12 454.667769896794 22 -665.362499898554 32 150.056742450276 13 454.667769896794 23 -665.362499898554 33 150.056742450276 70 1 0 3DFACE 8 leg_half 10 454.667765582876 20 -645.022494242574 30 163.393370075456 11 454.797687662105 21 -667.530828563864 31 152.916709017132 12 454.797683261242 22 -646.78088064753 32 166.522129452237 13 454.797683261242 23 -646.78088064753 33 166.522129452237 70 1 0 3DFACE 8 leg_half 10 702.221318561055 20 -548.126641526877 30 153.690618001708 11 684.332852026746 21 -186.86272 31 165.499614915081 12 702.221318561055 22 -186.86272 32 153.690618001708 13 702.221318561055 23 -186.86272 33 153.690618001708 70 1 0 3DFACE 8 leg_half 10 684.332852026746 20 -186.86272 30 165.499614915081 11 702.221318561055 21 -548.126641526877 31 153.690618001708 12 684.332852026746 22 -548.325028948197 32 165.499614915081 13 684.332852026746 23 -548.325028948197 33 165.499614915081 70 1 0 3DFACE 8 leg_half 10 432.838954191733 20 -722.270804730449 30 132.867998161508 11 436.335620774804 21 -737.047580997407 31 108.905866027708 12 432.838949191021 22 -737.730681730485 32 109.289774750901 13 432.838949191021 23 -737.730681730485 33 109.289774750901 70 1 0 3DFACE 8 leg_half 10 436.335620774804 20 -737.047580997407 30 108.905866027708 11 432.838954191733 21 -722.270804730449 31 132.867998161508 12 436.335625756533 22 -721.646389233184 32 132.394587199654 13 436.335625756533 23 -721.646389233184 33 132.394587199654 70 1 0 3DFACE 8 leg_half 10 429.26772029492 20 -549.153237717187 30 214.795486963908 11 0.0162469754877819 21 -186.86272 31 214.795486963908 12 429.26772029492 22 -186.86272 32 214.795486963908 13 429.26772029492 23 -186.86272 33 214.795486963908 70 1 0 3DFACE 8 leg_half 10 0.0162469754877819 20 -186.86272 30 214.795486963908 11 429.26772029492 21 -549.153237717187 31 214.795486963908 12 0.0162469754877819 22 -549.153365442471 32 214.795486963908 13 0.0162469754877819 23 -549.153365442471 33 214.795486963908 70 1 0 3DFACE 8 leg_half 10 439.690622484567 20 -702.296711761968 30 152.674124370004 11 436.335625756533 21 -682.017174593568 31 172.023801843262 12 439.690620823844 22 -681.255534297249 32 171.019219664594 13 439.690620823844 23 -681.255534297249 33 171.019219664594 70 1 0 3DFACE 8 leg_half 10 436.335625756533 20 -682.017174593568 30 172.023801843262 11 439.690622484567 21 -702.296711761968 31 152.674124370004 12 436.335627427501 22 -703.188137968552 32 153.565550576497 13 436.335627427501 23 -703.188137968552 33 153.565550576497 70 1 0 3DFACE 8 leg_half 10 673.957368701467 20 -738.899252779403 30 79.5166578326792 11 649.884119483233 21 -734.56856186502 31 107.512580906988 12 649.884111397057 22 -746.458660352302 32 82.4950785735168 13 649.884111397057 23 -746.458660352302 33 82.4950785735168 70 1 0 3DFACE 8 leg_half 10 649.884119483233 20 -734.56856186502 30 107.512580906988 11 673.957368701467 21 -738.899252779403 31 79.5166578326792 12 673.957376463676 22 -727.485522237732 32 103.531852556699 13 673.957376463676 23 -727.485522237732 33 103.531852556699 70 1 0 3DFACE 8 leg_half 10 744.275052115393 20 -648.23289118406 30 43.7940230954864 11 753.576410189591 21 -625.658275857869 31 46.3041482621511 12 753.576407084801 22 -630.223630997654 32 36.698358790781 13 753.576407084801 23 -630.223630997654 33 36.698358790781 70 1 0 3DFACE 8 leg_half 10 753.576410189591 20 -625.658275857869 30 46.3041482621511 11 744.275052115393 21 -648.23289118406 31 43.7940230954864 12 744.27505599199 22 -642.532652352182 32 55.7876780202442 13 744.27505599199 23 -642.532652352182 33 55.7876780202442 70 1 0 3DFACE 8 leg_half 10 461.269956337624 20 -788.240871473567 30 31.7299058573872 11 458.222230868175 21 -784.271054681722 31 63.2531519626526 12 458.222214863865 22 -789.666464186592 32 31.8757394304439 13 458.222214863865 23 -789.666464186592 33 31.8757394304439 70 1 0 3DFACE 8 leg_half 10 458.222230868175 20 -784.271054681722 30 63.2531519626526 11 461.269956337624 21 -788.240871473567 31 31.7299058573872 12 461.269972243544 22 -782.87863142832 32 62.9144188854628 13 461.269972243544 23 -782.87863142832 33 62.9144188854628 70 1 0 3DFACE 8 leg_half 10 787.130182819951 20 -621.196954326058 30 23.3578379966277 11 779.024158535186 21 -644.605714246329 31 29.2769308468913 12 779.024155516104 22 -645.623514226953 32 23.3578379886926 13 779.024155516104 23 -645.623514226953 33 23.3578379886926 70 1 0 3DFACE 8 leg_half 10 779.024158535186 20 -644.605714246329 30 29.2769308468913 11 787.130182819951 21 -621.196954326058 31 23.3578379966277 12 787.130182929858 22 -621.15990220955 32 23.5733173858747 13 787.130182929858 23 -621.15990220955 33 23.5733173858747 70 1 0 3DFACE 8 leg_half 10 779.024155516104 20 -645.623514226953 30 23.3578379886926 11 767.82932233817 21 -666.812843070624 31 34.6792140832892 12 767.829316563608 22 -668.759576574313 32 23.3578379800722 13 767.829316563608 23 -668.759576574313 33 23.3578379800722 70 1 0 3DFACE 8 leg_half 10 767.82932233817 20 -666.812843070624 30 34.6792140832892 11 779.024155516104 21 -645.623514226953 31 23.3578379886926 12 779.024158535186 22 -644.605714246329 32 29.2769308468913 13 779.024158535186 23 -644.605714246329 33 29.2769308468913 70 1 0 3DFACE 8 leg_half 10 461.26998493348 20 -773.317015214971 30 93.0773591680305 11 458.222252930963 21 -760.983658189012 31 122.358116586891 12 458.222243636608 22 -774.650292730724 32 93.6026725589312 13 458.222243636608 23 -774.650292730724 33 93.6026725589312 70 1 0 3DFACE 8 leg_half 10 458.222252930963 20 -760.983658189012 30 122.358116586891 11 461.26998493348 21 -773.317015214971 31 93.0773591680305 12 461.269994170696 22 -759.734399297279 32 121.656022816523 13 461.269994170696 23 -759.734399297279 33 121.656022816523 70 1 0 3DFACE 8 leg_half 10 473.101764681482 20 -710.482718842918 30 160.860131450129 11 472.107209463225 21 -732.435769686289 31 140.574720545467 12 473.101762926689 22 -729.866935555387 32 138.627118353444 13 473.101762926689 23 -729.866935555387 33 138.627118353444 70 1 0 3DFACE 8 leg_half 10 472.107209463225 20 -732.435769686289 30 140.574720545467 11 473.101764681482 21 -710.482718842918 31 160.860131450129 12 472.107211244211 22 -712.762199391597 32 163.139611998578 13 472.107211244211 23 -712.762199391597 33 163.139611998578 70 1 0 3DFACE 8 leg_half 10 451.683300548936 20 -791.196939781596 30 32.0323039932388 11 448.317755482775 21 -785.839646973143 31 63.6347444795237 12 448.317739367628 22 -791.272422434329 32 32.0400273988949 13 448.317739367628 23 -791.272422434329 33 32.0400273988949 70 1 0 3DFACE 8 leg_half 10 448.317755482775 20 -785.839646973143 30 63.6347444795237 11 451.683300548936 21 -791.196939781596 31 32.0323039932388 12 451.683316658874 22 -785.765920539638 32 63.616807647956 13 451.683316658874 23 -785.765920539638 33 63.616807647956 70 1 0 3DFACE 8 leg_half 10 455.006112926336 20 -744.320489807817 30 149.585310783685 11 451.68334645801 21 -723.691181151156 31 174.068593757036 12 451.683344551435 22 -744.752057529093 32 149.912511141786 13 451.683344551435 23 -744.752057529093 33 149.912511141786 70 1 0 3DFACE 8 leg_half 10 451.68334645801 20 -723.691181151156 30 174.068593757036 11 455.006112926336 21 -744.320489807817 31 149.585310783685 12 455.006114828511 22 -723.308225016813 32 173.685637622731 13 455.006114828511 23 -723.308225016813 33 173.685637622731 70 1 0 3DFACE 8 leg_half 10 451.683344551435 20 -744.752057529093 30 149.912511141786 11 448.317785291547 21 -723.744834584347 31 174.122247190222 12 448.317783384355 22 -744.812521381181 32 149.958353264626 13 448.317783384355 23 -744.812521381181 33 149.958353264626 70 1 0 3DFACE 8 leg_half 10 448.317785291547 20 -723.744834584347 30 174.122247190222 11 451.683344551435 21 -744.752057529093 31 149.912511141786 12 451.68334645801 22 -723.691181151156 32 174.068593757036 13 451.68334645801 23 -723.691181151156 33 174.068593757036 70 1 0 3DFACE 8 leg_half 10 448.317783384355 20 -744.812521381181 30 149.958353264626 11 6.49966391634282e-05 21 -723.744911722756 31 174.12232432863 12 6.30894498883872e-05 22 -744.812573256956 32 149.958459378386 13 6.30894498883872e-05 23 -744.812573256956 33 149.958459378386 70 1 0 3DFACE 8 leg_half 10 6.49966391634282e-05 20 -723.744911722756 30 174.12232432863 11 448.317783384355 21 -744.812521381181 31 149.958353264626 12 448.317785291547 22 -723.744834584347 32 174.122247190222 13 448.317785291547 23 -723.744834584347 33 174.122247190222 70 1 0 3DFACE 8 leg_half 10 649.884111397057 20 -632.11766596993 30 196.836072967405 11 673.957376463676 21 -653.154439951202 31 177.862934850716 12 673.957368701467 22 -629.139245228331 32 189.276665394806 13 673.957368701467 23 -629.139245228331 33 189.276665394806 70 1 0 3DFACE 8 leg_half 10 673.957376463676 20 -653.154439951202 30 177.862934850716 11 649.884111397057 21 -632.11766596993 31 196.836072967405 12 649.884119483233 22 -657.135168302204 32 184.945974477603 13 649.884119483233 23 -657.135168302204 33 184.945974477603 70 1 0 3DFACE 8 leg_half 10 794.401547685756 20 -720.307447118133 30 -2.12061479487602e-10 11 772.221088848011 21 -745.599413064469 31 23.3578380791531 12 772.221088848008 22 -745.599413064465 32 -2.18378204408509e-10 13 772.221088848008 23 -745.599413064465 33 -2.18378204408509e-10 70 1 0 3DFACE 8 leg_half 10 772.221088848011 20 -745.599413064469 30 23.3578380791531 11 794.401547685756 21 -720.307447118133 31 -2.12061479487602e-10 12 794.401547685759 22 -720.307447118137 32 23.3578380791593 13 794.401547685759 23 -720.307447118137 33 23.3578380791593 70 1 0 3DFACE 8 leg_half 10 464.090727919739 20 -549.540509167097 30 237.849027336606 11 466.630380370588 21 -186.86272 31 235.63929931572 12 464.090727919739 22 -186.86272 32 237.849027336606 13 464.090727919739 23 -186.86272 33 237.849027336606 70 1 0 3DFACE 8 leg_half 10 466.630380370588 20 -186.86272 30 235.63929931572 11 464.090727919739 21 -549.540509167097 31 237.849027336606 12 466.630380370588 22 -549.503386674047 32 235.63929931572 13 466.630380370588 23 -549.503386674047 33 235.63929931572 70 1 0 3DFACE 8 leg_half 10 753.739249813186 20 -547.924349168088 30 141.649769387184 11 736.997666927312 21 -573.300963343833 31 159.911321013811 12 753.73926375928 22 -571.352333223692 32 140.862402824032 13 753.73926375928 23 -571.352333223692 33 140.862402824032 70 1 0 3DFACE 8 leg_half 10 736.997666927312 20 -573.300963343833 30 159.911321013811 11 753.739249813186 21 -547.924349168088 31 141.649769387184 12 736.99765201229 22 -548.245280356442 32 160.753391204502 13 736.99765201229 23 -548.245280356442 33 160.753391204502 70 1 0 3DFACE 8 leg_half 10 717.894030194972 20 -548.526532054241 30 177.494989005398 11 736.997666927312 21 -573.300963343833 31 159.911321013811 12 736.99765201229 22 -548.245280356442 32 160.753391204502 13 736.99765201229 23 -548.245280356442 33 160.753391204502 70 1 0 3DFACE 8 leg_half 10 736.997666927312 20 -573.300963343833 30 159.911321013811 11 717.894030194972 21 -548.526532054241 31 177.494989005398 12 717.894045959123 22 -575.008661956696 32 176.604978855282 13 717.894045959123 23 -575.008661956696 33 176.604978855282 70 1 0 3DFACE 8 leg_half 10 696.758800443365 20 -647.656853392997 30 168.080894990074 11 717.894077714131 21 -660.078536464024 31 143.087390097436 12 717.894073612081 22 -640.737481474577 32 155.769021196026 13 717.894073612081 23 -640.737481474577 33 155.769021196026 70 1 0 3DFACE 8 leg_half 10 717.894077714131 20 -660.078536464024 30 143.087390097436 11 696.758800443365 21 -647.656853392997 31 168.080894990074 12 696.758804887548 22 -668.611056374494 32 154.341547662779 13 696.758804887548 23 -668.611056374494 33 154.341547662779 70 1 0 3DFACE 8 leg_half 10 760.201824130007 20 -611.213150017197 30 29.2082138072124 11 763.093075318335 21 -596.364508960869 31 23.3578379945534 12 760.201821668678 22 -613.067712196625 32 23.3578379899606 13 760.201821668678 23 -613.067712196625 33 23.3578379899606 70 0 0 3DFACE 8 leg_half 10 442.839477401402 20 -746.337240593148 30 82.4473163912804 11 445.721721263973 21 -752.62898843986 31 55.5556638784362 12 442.839466299903 22 -754.702000509797 32 56.0599621810555 13 442.839466299903 23 -754.702000509797 33 56.0599621810555 70 1 0 3DFACE 8 leg_half 10 445.721721263973 20 -752.62898843986 30 55.5556638784362 11 442.839477401402 21 -746.337240593148 31 82.4473163912804 12 445.721732248607 22 -744.352283565408 32 81.6652408886482 13 445.721732248607 23 -744.352283565408 33 81.6652408886482 70 1 0 3DFACE 8 leg_half 10 473.642053400866 20 -764.379514823734 30 58.4141748490874 11 473.101722427237 21 -772.614333460954 31 30.1313729498036 12 473.642038802113 22 -769.301079755069 32 29.7924413152051 13 473.642038802113 23 -769.301079755069 33 29.7924413152051 70 1 0 3DFACE 8 leg_half 10 473.101722427237 20 -772.614333460954 30 30.1313729498036 11 473.642053400866 21 -764.379514823734 31 58.4141748490874 12 473.10173725466 22 -767.61567851106 32 59.2014293241045 13 473.10173725466 23 -767.61567851106 33 59.2014293241045 70 1 0 3DFACE 8 leg_half 10 473.10173725466 20 -767.61567851106 30 59.2014293241045 11 472.107168359226 21 -775.821269863314 31 30.4594290412997 12 473.101722427237 22 -772.614333460954 32 30.1313729498036 13 473.101722427237 23 -772.614333460954 33 30.1313729498036 70 1 0 3DFACE 8 leg_half 10 472.107168359226 20 -775.821269863314 30 30.4594290412997 11 473.10173725466 21 -767.61567851106 31 59.2014293241045 12 472.107183407982 22 -770.747998603796 32 59.9634222143927 13 472.107183407982 23 -770.747998603796 33 59.9634222143927 70 1 0 3DFACE 8 leg_half 10 448.281993692064 20 -750.187755353023 30 54.9617894316777 11 450.471111788281 21 -739.369532914357 31 79.7020319508277 12 450.471101097006 22 -747.425197006803 32 54.2897470886059 13 450.471101097006 23 -747.425197006803 33 54.2897470886059 70 1 0 3DFACE 8 leg_half 10 450.471111788281 20 -739.369532914357 30 79.7020319508277 11 448.281993692064 21 -750.187755353023 31 54.9617894316777 12 448.282004539076 22 -742.014746414944 32 80.7442486966709 13 448.282004539076 23 -742.014746414944 33 80.7442486966709 70 1 0 3DFACE 8 leg_half 10 736.997691839832 20 -632.515984774395 30 141.140229605674 11 717.894077714131 21 -660.078536464024 31 143.087390097436 12 736.997695535365 22 -649.940320006495 32 129.715362054641 13 736.997695535365 23 -649.940320006495 33 129.715362054641 70 1 0 3DFACE 8 leg_half 10 717.894077714131 20 -660.078536464024 30 143.087390097436 11 736.997691839832 21 -632.515984774395 31 141.140229605674 12 717.894073612081 22 -640.737481474577 32 155.769021196026 13 717.894073612081 23 -640.737481474577 33 155.769021196026 70 1 0 3DFACE 8 leg_half 10 445.721721263973 20 -752.62898843986 30 55.5556638784362 11 448.282004539076 21 -742.014746414944 31 80.7442486966709 12 448.281993692064 22 -750.187755353023 32 54.9617894316777 13 448.281993692064 23 -750.187755353023 33 54.9617894316777 70 1 0 3DFACE 8 leg_half 10 448.282004539076 20 -742.014746414944 30 80.7442486966709 11 445.721721263973 21 -752.62898843986 31 55.5556638784362 12 445.721732248607 22 -744.352283565408 32 81.6652408886482 13 445.721732248607 23 -744.352283565408 33 81.6652408886482 70 1 0 3DFACE 8 leg_half 10 454.431276722139 20 -688.759443912117 30 139.136856521515 11 454.797687662105 21 -667.530828563864 31 152.916709017132 12 454.797689138238 22 -686.233268095701 32 136.610680705353 13 454.797689138238 23 -686.233268095701 33 136.610680705353 70 1 0 3DFACE 8 leg_half 10 454.797687662105 20 -667.530828563864 30 152.916709017132 11 454.431276722139 21 -688.759443912117 31 139.136856521515 12 454.431275216977 22 -669.689208643299 32 155.763553572255 13 454.431275216977 23 -669.689208643299 33 155.763553572255 70 1 0 3DFACE 8 leg_half 10 458.222243636608 20 -774.650292730724 30 93.6026725589312 11 455.006107255299 21 -761.852698834952 31 122.846524872111 12 455.006097921195 22 -775.577780463213 32 93.968104560508 13 455.006097921195 23 -775.577780463213 33 93.968104560508 70 1 0 3DFACE 8 leg_half 10 455.006107255299 20 -761.852698834952 30 122.846524872111 11 458.222243636608 21 -774.650292730724 31 93.6026725589312 12 458.222252930963 22 -760.983658189012 32 122.358116586891 13 458.222252930963 23 -760.983658189012 33 122.358116586891 70 1 0 3DFACE 8 leg_half 10 472.107183407982 20 -609.586009613252 30 221.125411221167 11 470.677509279169 21 -639.24331958749 31 214.92128705308 12 472.107195414063 22 -638.12348215123 32 212.079066347413 13 472.107195414063 23 -638.12348215123 33 212.079066347413 70 1 0 3DFACE 8 leg_half 10 470.677509279169 20 -639.24331958749 30 214.92128705308 11 472.107183407982 21 -609.586009613252 31 221.125411221167 12 470.677497105752 22 -610.308103138718 32 224.093716273781 13 470.677497105752 23 -610.308103138718 33 224.093716273781 70 1 0 3DFACE 8 leg_half 10 432.838929652884 20 -758.353294490404 30 56.9482088735863 11 436.335587191701 21 -762.351784924648 31 29.0815795342117 12 432.838915479952 22 -763.131305674907 32 29.1613230247316 13 432.838915479952 23 -763.131305674907 33 29.1613230247316 70 1 0 3DFACE 8 leg_half 10 436.335587191701 20 -762.351784924648 30 29.0815795342117 11 432.838929652884 21 -758.353294490404 31 56.9482088735863 12 436.335601310833 22 -757.591910929275 32 56.7629871862785 13 436.335601310833 23 -757.591910929275 33 56.7629871862785 70 1 0 3DFACE 8 leg_half 10 693.784141830299 20 -590.617873632807 30 -9.20437059903634e-12 11 698.091838084213 21 -577.37232127131 31 5.83945951982641 12 698.091838084213 22 -577.37232127131 32 -1.01067598734517e-11 13 698.091838084213 23 -577.37232127131 33 -1.01067598734517e-11 70 1 0 3DFACE 8 leg_half 10 698.091838084213 20 -577.37232127131 30 5.83945951982641 11 693.784141830299 21 -590.617873632807 31 -9.20437059903634e-12 12 693.784141830299 22 -590.617873632807 32 5.83945951982749 13 693.784141830299 23 -590.617873632807 33 5.83945951982749 70 1 0 3DFACE 8 leg_half 10 0.000467548731367373 20 -674.37054094885 30 5.83945951983706 11 590.370902396357 21 -674.370540948851 31 1.80477854883065e-13 12 0.000467548731318024 22 -674.370540948851 32 1.80477854883065e-13 13 0.000467548731318024 23 -674.370540948851 33 1.80477854883065e-13 70 1 0 3DFACE 8 leg_half 10 590.370902396357 20 -674.370540948851 30 1.80477854883065e-13 11 0.000467548731367373 21 -674.37054094885 31 5.83945951983706 12 590.370902396357 22 -674.37054094885 32 5.83945951983706 13 590.370902396357 23 -674.37054094885 33 5.83945951983706 70 1 0 3DFACE 8 leg_half 10 603.993997054852 20 -671.47016230067 30 5.83945951983598 11 590.370902396357 21 -674.370540948851 31 1.80477854883065e-13 12 590.370902396357 22 -674.37054094885 32 5.83945951983706 13 590.370902396357 23 -674.37054094885 33 5.83945951983706 70 1 0 3DFACE 8 leg_half 10 590.370902396357 20 -674.370540948851 30 1.80477854883065e-13 11 603.993997054852 21 -671.47016230067 31 5.83945951983598 12 603.993997054853 22 -671.470162300671 32 -5.41433564649196e-13 13 603.993997054853 23 -671.470162300671 33 -5.41433564649196e-13 70 1 0 3DFACE 8 leg_half 10 617.239549416349 20 -667.162466046756 30 5.83945951983507 11 603.993997054853 21 -671.470162300671 31 -5.41433564649196e-13 12 603.993997054852 22 -671.47016230067 32 5.83945951983598 13 603.993997054852 23 -671.47016230067 33 5.83945951983598 70 1 0 3DFACE 8 leg_half 10 603.993997054853 20 -671.470162300671 30 -5.41433564649196e-13 11 617.239549416349 21 -667.162466046756 31 5.83945951983507 12 617.23954941635 22 -667.162466046757 32 -1.62430069394759e-12 13 617.23954941635 23 -667.162466046757 33 -1.62430069394759e-12 70 1 0 3DFACE 8 leg_half 10 718.958402396357 20 -786.469309831078 30 -1.92750349015114e-10 11 688.787514114852 21 -801.347945386409 31 23.3578380792096 12 688.787514114849 22 -801.347945386405 32 -1.61527680120344e-10 13 688.787514114849 23 -801.347945386405 33 -1.61527680120344e-10 70 1 0 3DFACE 8 leg_half 10 688.787514114852 20 -801.347945386409 30 23.3578380792096 11 718.958402396357 21 -786.469309831078 31 -1.92750349015114e-10 12 718.95840239636 22 -786.469309831082 32 23.3578380791782 13 718.95840239636 23 -786.469309831082 33 23.3578380791782 70 1 0 3DFACE 8 leg_half 10 702.221361580333 20 -660.639487120937 30 111.016899733167 11 718.363106545679 21 -637.12298630735 31 112.809643814588 12 718.363107612844 22 -650.643847155672 32 101.021259768909 13 718.363107612844 23 -650.643847155672 33 101.021259768909 70 1 0 3DFACE 8 leg_half 10 718.363106545679 20 -637.12298630735 30 112.809643814588 11 702.221361580333 21 -660.639487120937 31 111.016899733167 12 702.221360398304 22 -645.663323591295 32 124.074113264079 13 702.221360398304 23 -645.663323591295 33 124.074113264079 70 1 0 3DFACE 8 leg_half 10 792.00720150166 20 -186.86272 30 48.7110294035543 11 793.570900047839 21 -545.937123520845 31 23.3578380793295 12 793.570900047839 22 -186.86272 32 23.3578380793295 13 793.570900047839 23 -186.86272 33 23.3578380793295 70 1 0 3DFACE 8 leg_half 10 793.570900047839 20 -545.937123520845 30 23.3578380793295 11 792.00720150166 21 -186.86272 31 48.7110294035543 12 792.00720150166 22 -546.363038171439 32 48.7110294035543 13 792.00720150166 23 -546.363038171439 33 48.7110294035543 70 1 0 3DFACE 8 leg_half 10 466.630399083827 20 -784.205377362117 30 31.3170895287116 11 464.090762524528 21 -781.089165318495 31 62.4790981961044 12 464.090746745054 22 -786.408777774662 32 31.5424891402109 13 464.090746745054 23 -786.408777774662 33 31.5424891402109 70 1 0 3DFACE 8 leg_half 10 464.090762524528 20 -781.089165318495 30 62.4790981961044 11 466.630399083827 21 -784.205377362117 31 31.3170895287116 12 466.630414711229 22 -778.937031754263 32 61.9555523461604 13 466.630414711229 23 -778.937031754263 33 61.9555523461604 70 1 0 3DFACE 8 leg_half 10 767.829301759449 20 -186.86272 30 120.51449319742 11 753.739249813186 21 -547.924349168088 31 141.649769387184 12 767.829301759449 22 -547.569288532173 32 120.514493197419 13 767.829301759449 23 -547.569288532173 33 120.514493197419 70 1 0 3DFACE 8 leg_half 10 753.739249813186 20 -547.924349168088 30 141.649769387184 11 767.829301759449 21 -186.86272 31 120.51449319742 12 753.739249813186 22 -186.86272 32 141.649769387185 13 753.739249813186 23 -186.86272 33 141.649769387185 70 1 0 3DFACE 8 leg_half 10 468.840169183023 20 -693.751116561201 30 187.500558577709 11 466.6304436178 21 -718.721597772832 31 169.099010379212 12 468.840171011807 22 -716.921589517517 32 167.299002124079 13 468.840171011807 23 -716.921589517517 33 167.299002124079 70 1 0 3DFACE 8 leg_half 10 466.6304436178 20 -718.721597772832 30 169.099010379212 11 468.840169183023 21 -693.751116561201 31 187.500558577709 12 466.630441768332 22 -695.289054806558 32 189.529056864572 13 466.630441768332 23 -695.289054806558 33 189.529056864572 70 1 0 3DFACE 8 leg_half 10 684.332896682708 20 -652.814503888805 30 133.506322083721 11 665.02138596315 21 -639.414516186541 31 153.414996741162 12 684.332892871929 22 -634.846784199308 32 145.28747843271 13 684.332892871929 23 -634.846784199308 33 145.28747843271 70 1 0 3DFACE 8 leg_half 10 665.02138596315 20 -639.414516186541 30 153.414996741162 11 684.332896682708 21 -652.814503888805 31 133.506322083721 12 665.021389999784 22 -658.447133448378 32 140.935603497775 13 665.021389999784 23 -658.447133448378 33 140.935603497775 70 1 0 3DFACE 8 leg_half 10 473.101757695049 20 -663.582663624963 30 196.418146784964 11 472.107209463225 21 -690.197307940468 31 182.813182295542 12 473.101762926689 22 -688.249705748186 32 180.244348164837 13 473.101762926689 23 -688.249705748186 33 180.244348164837 70 1 0 3DFACE 8 leg_half 10 472.107209463225 20 -690.197307940468 30 182.813182295542 11 473.101757695049 21 -663.582663624963 31 196.418146784964 12 472.10720415349 22 -665.162054034067 32 199.228411696097 13 472.10720415349 23 -665.162054034067 33 199.228411696097 70 1 0 3DFACE 8 leg_half 10 602.13329645121 20 -713.015947331523 30 95.3998613711292 11 623.546355296361 21 -722.557073202373 31 73.0778467179566 12 602.133289350819 22 -723.456525449862 32 73.4322395118387 13 602.133289350819 23 -723.456525449862 33 73.4322395118387 70 1 0 3DFACE 8 leg_half 10 623.546355296361 20 -722.557073202373 30 73.0778467179566 11 602.13329645121 21 -713.015947331523 31 95.3998613711292 12 623.546362358205 22 -712.173174760634 32 94.9262110334071 13 623.546362358205 23 -712.173174760634 33 94.9262110334071 70 1 0 3DFACE 8 leg_half 10 623.546362358205 20 -712.173174760634 30 94.9262110334071 11 644.636252442318 21 -718.985715046116 31 71.6707212889357 12 623.546355296361 22 -722.557073202373 32 73.0778467179566 13 623.546355296361 23 -722.557073202373 33 73.0778467179566 70 1 0 3DFACE 8 leg_half 10 644.636252442318 20 -718.985715046116 30 71.6707212889357 11 623.546362358205 21 -712.173174760634 31 94.9262110334071 12 644.636259351108 22 -708.826870972768 32 93.0455572990973 13 644.636259351108 23 -708.826870972768 33 93.0455572990973 70 1 0 3DFACE 8 leg_half 10 696.758783079627 20 -736.03100461107 30 51.5177928651329 11 673.957368701467 21 -738.899252779403 31 79.5166578326792 12 673.957358037872 22 -746.934060776874 32 54.170165314894 13 673.957358037872 23 -746.934060776874 33 54.170165314894 70 1 0 3DFACE 8 leg_half 10 673.957368701467 20 -738.899252779403 30 79.5166578326792 11 696.758783079627 21 -736.03100461107 31 51.5177928651329 12 696.758793128571 22 -728.459323997255 32 75.4033102397292 13 696.758793128571 23 -728.459323997255 33 75.4033102397292 70 1 0 3DFACE 8 leg_half 10 590.370902396357 20 -820.924226612815 30 1.80477854883065e-13 11 0.000796879066902634 21 -820.924226610164 31 17.0475267240553 12 0.000467548731319434 22 -820.924226612815 32 1.80477854883065e-13 13 0.000467548731319434 23 -820.924226612815 33 1.80477854883065e-13 70 1 0 3DFACE 8 leg_half 10 0.000796879066902634 20 -820.924226610164 30 17.0475267240553 11 590.37090239636 21 -820.924226612819 31 23.3578380793719 12 0.000467548734387557 22 -820.924226612819 32 23.3578380793719 13 0.000467548734387557 23 -820.924226612819 33 23.3578380793719 70 1 0 3DFACE 8 leg_half 10 590.37090239636 20 -820.924226612819 30 23.3578380793719 11 0.000796879066902634 21 -820.924226610164 31 17.0475267240553 12 590.370902396357 22 -820.924226612815 32 1.80477854883065e-13 13 590.370902396357 23 -820.924226612815 33 1.80477854883065e-13 70 3 0 3DFACE 8 leg_half 10 673.957327625231 20 -548.951311917762 30 202.779879874335 11 696.758754005207 21 -186.86272 31 191.585040951661 12 673.957327625231 22 -186.86272 32 202.779879874335 13 673.957327625231 23 -186.86272 33 202.779879874335 70 1 0 3DFACE 8 leg_half 10 696.758754005207 20 -186.86272 30 191.585040951661 11 673.957327625231 21 -548.951311917762 31 202.779879874335 12 696.758754005207 22 -548.76324041817 32 191.585040951661 13 696.758754005207 23 -548.76324041817 33 191.585040951661 70 1 0 3DFACE 8 leg_half 10 448.281962880048 20 -549.007501396503 30 206.120647039576 11 445.721690152324 21 -186.86272 31 208.627211339945 12 448.281962880048 22 -186.86272 32 206.120647039576 13 448.281962880048 23 -186.86272 33 206.120647039576 70 1 0 3DFACE 8 leg_half 10 445.721690152324 20 -186.86272 30 208.627211339945 11 448.281962880048 21 -549.007501396503 31 206.120647039576 12 445.721690152324 22 -549.049610517709 32 208.627211339945 13 445.721690152324 23 -549.049610517709 33 208.627211339945 70 1 0 3DFACE 8 leg_half 10 450.471119570638 20 -653.402150740311 30 178.303588160926 11 452.247001541956 21 -628.181198889296 31 186.844869872835 12 452.247009199941 22 -651.873941250939 32 175.584391651154 13 452.247009199941 23 -651.873941250939 33 175.584391651154 70 1 0 3DFACE 8 leg_half 10 452.247001541956 20 -628.181198889296 30 186.844869872835 11 450.471119570638 21 -653.402150740311 31 178.303588160926 12 450.471111788281 22 -629.324619346527 32 189.746945529741 13 450.471111788281 23 -629.324619346527 33 189.746945529741 70 1 0 3DFACE 8 leg_half 10 448.281993692064 20 -604.584376828467 30 200.565167970899 11 450.471087696265 21 -577.639374325348 31 202.320298229792 12 450.471101097006 22 -603.912334485117 32 197.802609624747 13 450.471101097006 23 -603.912334485117 33 197.802609624747 70 1 0 3DFACE 8 leg_half 10 450.471087696265 20 -577.639374325348 30 202.320298229792 11 448.281993692064 21 -604.584376828467 31 200.565167970899 12 448.281980096118 22 -577.92870502396 32 205.148664616833 13 448.281980096118 23 -577.92870502396 33 205.148664616833 70 1 0 3DFACE 8 leg_half 10 696.758770484001 20 -740.277270942125 30 26.8233094768247 11 673.957358037872 21 -746.934060776874 31 54.170165314894 12 673.957344671825 22 -751.440053094339 32 27.9652257853831 13 673.957344671825 23 -751.440053094339 33 27.9652257853831 70 1 0 3DFACE 8 leg_half 10 673.957358037872 20 -746.934060776874 30 54.170165314894 11 696.758770484001 21 -740.277270942125 31 26.8233094768247 12 696.758783079627 22 -736.03100461107 32 51.5177928651329 13 696.758783079627 23 -736.03100461107 33 51.5177928651329 70 1 0 3DFACE 8 leg_half 10 464.090746745054 20 -786.408777774662 30 31.5424891402109 11 461.269972243544 21 -782.87863142832 31 62.9144188854628 12 461.269956337624 22 -788.240871473567 32 31.7299058573872 13 461.269956337624 23 -788.240871473567 33 31.7299058573872 70 1 0 3DFACE 8 leg_half 10 461.269972243544 20 -782.87863142832 30 62.9144188854628 11 464.090746745054 21 -786.408777774662 31 31.5424891402109 12 464.090762524528 22 -781.089165318495 32 62.4790981961044 13 464.090762524528 23 -781.089165318495 33 62.4790981961044 70 1 0 3DFACE 8 leg_half 10 665.021389999784 20 -658.447133448378 30 140.935603497775 11 644.636259351108 21 -642.668144691721 31 159.204283586808 12 665.02138596315 22 -639.414516186541 32 153.414996741162 13 665.02138596315 23 -639.414516186541 33 153.414996741162 70 1 0 3DFACE 8 leg_half 10 644.636259351108 20 -642.668144691721 30 159.204283586808 11 665.021389999784 21 -658.447133448378 31 140.935603497775 12 644.636263548619 22 -662.459295238253 32 146.227531781659 13 644.636263548619 23 -662.459295238253 33 146.227531781659 70 1 0 3DFACE 8 leg_half 10 779.024140682123 20 -186.86272 30 97.713066817443 11 787.130167954486 21 -546.781824001004 31 73.639808098986 12 787.130167954486 22 -186.86272 32 73.639808098986 13 787.130167954486 23 -186.86272 33 73.639808098986 70 1 0 3DFACE 8 leg_half 10 787.130167954486 20 -546.781824001004 30 73.639808098986 11 779.024140682123 21 -186.86272 31 97.713066817443 12 779.024140682123 22 -547.186238711366 32 97.7130668174428 13 779.024140682123 23 -547.186238711366 33 97.7130668174428 70 1 0 3DFACE 8 leg_half 10 753.739289860341 20 -652.105388357143 30 102.482800970232 11 736.997695535365 21 -679.337949441333 31 100.317732616843 12 753.73928877638 22 -664.079300898903 32 88.749145475747 13 753.73928877638 23 -664.079300898903 33 88.749145475747 70 1 0 3DFACE 8 leg_half 10 736.997695535365 20 -679.337949441333 30 100.317732616843 11 753.739289860341 21 -652.105388357143 31 102.482800970232 12 736.997696774917 22 -665.645302851503 32 116.022715463229 13 736.997696774917 23 -665.645302851503 33 116.022715463229 70 1 0 3DFACE 8 leg_half 10 764.031425007948 20 -579.704781244013 30 37.0766018107078 11 764.878707491771 21 -566.32138210224 31 23.3578380017417 12 764.805052044838 22 -569.303684335783 32 23.3578380010606 13 764.805052044838 23 -569.303684335783 33 23.3578380010606 70 1 0 3DFACE 8 leg_half 10 764.878707491771 20 -566.32138210224 30 23.3578380017417 11 764.031425007948 21 -579.704781244013 31 37.0766018107078 12 764.031424128692 22 -575.559109938211 32 39.7948544698768 13 764.031424128692 23 -575.559109938211 33 39.7948544698768 70 1 0 3DFACE 8 leg_half 10 602.133279596418 20 -730.806273217008 30 50.2468283798967 11 623.546333434853 21 -733.96634875632 31 26.1777702748551 12 602.133267369982 22 -734.928077619115 32 26.2761627640122 13 602.133267369982 23 -734.928077619115 33 26.2761627640122 70 1 0 3DFACE 8 leg_half 10 623.546333434853 20 -733.96634875632 30 26.1777702748551 11 602.133279596418 21 -730.806273217008 31 50.2468283798967 12 623.546345594915 22 -729.866920753093 32 50.0183042486409 13 623.546345594915 23 -729.866920753093 33 50.0183042486409 70 1 0 3DFACE 8 leg_half 10 454.667765582876 20 -713.015957461653 30 95.3999068495287 11 602.133289350819 21 -723.456525449862 31 73.4322395118387 12 454.667758482489 22 -723.456530152174 32 73.4322964107047 13 454.667758482489 23 -723.456530152174 33 73.4322964107047 70 1 0 3DFACE 8 leg_half 10 602.133289350819 20 -723.456525449862 30 73.4322395118387 11 454.667765582876 21 -713.015957461653 31 95.3999068495287 12 602.13329645121 22 -713.015947331523 32 95.3998613711292 13 602.13329645121 23 -713.015947331523 33 95.3998613711292 70 1 0 3DFACE 8 leg_half 10 470.677518140403 20 -751.514112490764 30 117.036156904666 11 468.84015475682 21 -767.174448290109 31 90.6571807720069 12 470.677509279169 22 -764.543874438695 32 89.6207321892548 13 470.677509279169 23 -764.543874438695 33 89.6207321892548 70 1 0 3DFACE 8 leg_half 10 468.84015475682 20 -767.174448290109 30 90.6571807720069 11 470.677518140403 21 -751.514112490764 31 117.036156904666 12 468.84016373079 22 -753.978916343896 32 118.421395812685 13 468.84016373079 23 -753.978916343896 33 118.421395812685 70 1 0 3DFACE 8 leg_half 10 623.938975880549 20 -818.724058836624 30 -6.38891606286052e-11 11 590.37090239636 21 -820.924226612819 31 23.3578380793719 12 590.370902396357 22 -820.924226612815 32 1.80477854883065e-13 13 590.370902396357 23 -820.924226612815 33 1.80477854883065e-13 70 1 0 3DFACE 8 leg_half 10 590.37090239636 20 -820.924226612819 30 23.3578380793719 11 623.938975880549 21 -818.724058836624 31 -6.38891606286052e-11 12 623.938975880552 22 -818.724058836629 32 23.3578380793071 13 623.938975880552 23 -818.724058836629 33 23.3578380793071 70 1 0 3DFACE 8 leg_half 10 468.840142428527 20 -776.463572930403 30 61.353838580619 11 466.630399083827 21 -784.205377362117 31 31.3170895287116 12 468.840126975903 22 -781.672997259934 32 31.0580369189494 13 468.840126975903 23 -781.672997259934 33 31.0580369189494 70 1 0 3DFACE 8 leg_half 10 466.630399083827 20 -784.205377362117 30 31.3170895287116 11 468.840142428527 21 -776.463572930403 31 61.353838580619 12 466.630414711229 22 -778.937031754263 32 61.9555523461604 13 466.630414711229 23 -778.937031754263 33 61.9555523461604 70 1 0 3DFACE 8 leg_half 10 767.829301759449 20 -547.569288532173 30 120.514493197419 11 753.73926375928 21 -571.352333223692 31 140.862402824032 12 767.82931463357 22 -569.196470349584 32 119.787647909415 13 767.82931463357 23 -569.196470349584 33 119.787647909415 70 1 0 3DFACE 8 leg_half 10 753.73926375928 20 -571.352333223692 30 140.862402824032 11 767.829301759449 21 -547.569288532173 31 120.514493197419 12 753.739249813186 22 -547.924349168088 32 141.649769387184 13 753.739249813186 23 -547.924349168088 33 141.649769387184 70 1 0 3DFACE 8 leg_half 10 454.797653593913 20 -738.498463121584 30 26.6414790273437 11 454.667748728094 21 -730.806274098353 31 50.2468973323294 12 454.667736501664 22 -734.928076357629 32 26.2762441782473 13 454.667736501664 23 -734.928076357629 33 26.2762441782473 70 1 0 3DFACE 8 leg_half 10 454.667748728094 20 -730.806274098353 30 50.2468973323294 11 454.797653593913 21 -738.498463121584 31 26.6414790273437 12 454.797666066761 22 -734.293588076417 32 51.0952482583018 13 454.797666066761 23 -734.293588076417 33 51.0952482583018 70 1 0 3DFACE 8 leg_half 10 448.281980096118 20 -754.771251996272 30 28.306117626709 11 450.471101097006 21 -747.425197006803 31 54.2897470886059 12 450.471087696265 22 -751.942885609203 32 28.0167869283821 13 450.471087696265 23 -751.942885609203 33 28.0167869283821 70 1 0 3DFACE 8 leg_half 10 450.471101097006 20 -747.425197006803 30 54.2897470886059 11 448.281980096118 21 -754.771251996272 31 28.306117626709 12 448.281993692064 22 -750.187755353023 32 54.9617894316777 13 448.281993692064 23 -750.187755353023 33 54.9617894316777 70 1 0 3DFACE 8 leg_half 10 744.275046789786 20 -580.758079568763 30 102.623043056121 11 753.576397473233 21 -565.700992480648 31 85.6172131326287 12 753.576402819491 22 -576.182653575586 32 83.8148703207571 13 753.576402819491 23 -576.182653575586 33 83.8148703207571 70 1 0 3DFACE 8 leg_half 10 753.576397473233 20 -565.700992480648 30 85.6172131326287 11 744.275046789786 21 -580.758079568763 31 102.623043056121 12 744.275040114523 22 -567.670823535761 32 104.873423184286 13 744.275040114523 23 -567.670823535761 33 104.873423184286 70 1 0 3DFACE 8 leg_half 10 432.838897838644 20 -549.148351803013 30 214.504708726405 11 429.26772029492 21 -186.86272 31 214.795486963908 12 432.838897838644 22 -186.86272 32 214.504708726405 13 432.838897838644 23 -186.86272 33 214.504708726405 70 1 0 3DFACE 8 leg_half 10 429.26772029492 20 -186.86272 30 214.795486963908 11 432.838897838644 21 -549.148351803013 31 214.504708726405 12 429.26772029492 22 -549.153237717187 32 214.795486963908 13 429.26772029492 23 -549.153237717187 33 214.795486963908 70 1 0 3DFACE 8 leg_half 10 454.667769896794 20 -699.679329838522 30 115.739912506852 11 602.13329645121 21 -713.015947331523 31 95.3998613711292 12 454.667765582876 22 -713.015957461653 32 95.3999068495287 13 454.667765582876 23 -713.015957461653 33 95.3999068495287 70 1 0 3DFACE 8 leg_half 10 602.13329645121 20 -713.015947331523 30 95.3998613711292 11 454.667769896794 21 -699.679329838522 31 115.739912506852 12 602.13330076513 22 -699.679312774979 32 115.739877602763 13 602.13330076513 23 -699.679312774979 33 115.739877602763 70 1 0 3DFACE 8 leg_half 10 468.84016373079 20 -753.978916343896 30 118.421395812685 11 466.630427178961 21 -769.542842319152 31 91.5903304644009 12 468.84015475682 22 -767.174448290109 32 90.6571807720069 13 468.84015475682 23 -767.174448290109 33 90.6571807720069 70 1 0 3DFACE 8 leg_half 10 466.630427178961 20 -769.542842319152 30 91.5903304644009 11 468.84016373079 21 -753.978916343896 31 118.421395812685 12 466.630436254431 22 -756.198062094967 32 119.668573109345 13 466.630436254431 23 -756.198062094967 33 119.668573109345 70 1 0 3DFACE 8 leg_half 10 452.247009199941 20 -651.873941250939 30 175.584391651154 11 453.575559198051 21 -626.958539673324 31 183.741680540481 12 453.575566723046 22 -650.239827098532 32 172.676755002411 13 453.575566723046 23 -650.239827098532 33 172.676755002411 70 1 0 3DFACE 8 leg_half 10 453.575559198051 20 -626.958539673324 30 183.741680540481 11 452.247009199941 21 -651.873941250939 31 175.584391651154 12 452.247001541956 22 -628.181198889296 32 186.844869872835 13 452.247001541956 23 -628.181198889296 33 186.844869872835 70 1 0 3DFACE 8 leg_half 10 702.221343105619 20 -699.12426393804 30 42.5395709625037 11 718.363082853901 21 -688.112661424818 31 23.3578379602634 12 702.221333321817 22 -702.422601699266 32 23.3578379520354 13 702.221333321817 23 -702.422601699266 33 23.3578379520354 70 1 0 3DFACE 8 leg_half 10 718.363082853901 20 -688.112661424818 30 23.3578379602634 11 702.221343105619 21 -699.12426393804 31 42.5395709625037 12 718.363090933403 22 -685.388881228845 32 39.1981879427727 13 718.363090933403 23 -685.388881228845 33 39.1981879427727 70 1 0 3DFACE 8 leg_half 10 0.0 20 -549.622587401036 30 242.726639240051 11 448.317739367628 21 -581.662614799822 31 241.649835054513 12 448.31772029492 22 -549.622454002523 32 242.726639240051 13 448.31772029492 23 -549.622454002523 33 242.726639240051 70 1 0 3DFACE 8 leg_half 10 448.317739367628 20 -581.662614799822 30 241.649835054513 11 0.0 21 -549.622587401036 31 242.726639240051 12 1.90727753096809e-05 22 -581.662862311522 32 241.649831219402 13 1.90727753096809e-05 23 -581.662862311522 33 241.649831219402 70 1 0 3DFACE 8 leg_half 10 445.721746731967 20 -699.576473436421 30 149.95388604473 11 442.839490392048 21 -680.220295673638 31 169.6537686923 12 445.721745102502 22 -678.931345516719 32 167.953679054935 13 445.721745102502 23 -678.931345516719 33 167.953679054935 70 1 0 3DFACE 8 leg_half 10 442.839490392048 20 -680.220295673638 30 169.6537686923 11 445.721746731967 21 -699.576473436421 31 149.95388604473 12 442.839492038848 22 -701.085065061495 32 151.462477669651 13 442.839492038848 23 -701.085065061495 33 151.462477669651 70 1 0 3DFACE 8 leg_half 10 448.31772029492 20 -549.622454002523 30 242.726639240051 11 451.683300548936 21 -581.654891394158 31 241.574352401781 12 451.683281480069 22 -549.621181308374 32 242.650939792116 13 451.683281480069 23 -549.621181308374 33 242.650939792116 70 1 0 3DFACE 8 leg_half 10 451.683300548936 20 -581.654891394158 30 241.574352401781 11 448.31772029492 21 -549.622454002523 31 242.726639240051 12 448.317739367628 22 -581.662614799822 32 241.649835054513 13 448.317739367628 23 -581.662614799822 33 241.649835054513 70 1 0 3DFACE 8 leg_half 10 452.247001541956 20 -628.181198889296 30 186.844869872835 11 453.575548860337 21 -602.386639077964 31 191.530943822063 12 453.575559198051 22 -626.958539673324 32 183.741680540481 13 453.575559198051 23 -626.958539673324 33 183.741680540481 70 1 0 3DFACE 8 leg_half 10 453.575548860337 20 -602.386639077964 30 191.530943822063 11 452.247001541956 21 -628.181198889296 31 186.844869872835 12 452.246991021541 22 -603.175034087969 32 194.771794391524 13 452.246991021541 23 -603.175034087969 33 194.771794391524 70 1 0 3DFACE 8 leg_half 10 439.690620823844 20 -720.64180705444 30 131.632946903436 11 442.839485482368 21 -734.454801614587 31 107.448702644845 12 439.690615872653 22 -735.948583762681 32 108.288220362449 13 439.690615872653 23 -735.948583762681 33 108.288220362449 70 1 0 3DFACE 8 leg_half 10 442.839485482368 20 -734.454801614587 30 107.448702644845 11 439.690620823844 21 -720.64180705444 31 131.632946903436 12 442.839490392048 22 -719.276356082042 32 130.597708279963 13 442.839490392048 23 -719.276356082042 33 130.597708279963 70 1 0 3DFACE 8 leg_half 10 787.130190684252 20 -597.186922321698 30 60.1350749996264 11 779.024169884095 21 -620.964740882273 31 71.3421534984996 12 787.130191214298 22 -603.902540579901 32 54.279953197846 13 787.130191214298 23 -603.902540579901 33 54.279953197846 70 1 0 3DFACE 8 leg_half 10 779.024169884095 20 -620.964740882273 30 71.3421534984996 11 787.130190684252 21 -597.186922321698 31 60.1350749996264 12 779.024169157982 22 -611.764971197169 32 79.3631234201936 13 779.024169157982 23 -611.764971197169 33 79.3631234201936 70 1 0 3DFACE 8 leg_half 10 464.090762524528 20 -612.101685596006 30 231.466577935614 11 466.630427178961 21 -641.212917863139 31 219.920254933339 12 466.630414711229 22 -611.578139745845 32 229.314444371434 13 466.630414711229 23 -611.578139745845 33 229.314444371434 70 1 0 3DFACE 8 leg_half 10 466.630427178961 20 -641.212917863139 30 219.920254933339 11 464.090762524528 21 -612.101685596006 31 231.466577935614 12 464.090775113584 22 -642.024842985963 32 221.980972610863 13 464.090775113584 23 -642.024842985963 33 221.980972610863 70 1 0 3DFACE 8 leg_half 10 642.023925698403 20 -654.528573978644 30 5.83945951983345 11 629.962604584718 21 -661.494594174547 31 -2.52668996836292e-12 12 629.962604584718 22 -661.494594174546 32 5.83945951983435 13 629.962604584718 23 -661.494594174546 33 5.83945951983435 70 1 0 3DFACE 8 leg_half 10 629.962604584718 20 -661.494594174547 30 -2.52668996836292e-12 11 642.023925698403 21 -654.528573978644 31 5.83945951983345 12 642.023925698404 22 -654.528573978645 32 -3.60955709766131e-12 13 642.023925698404 23 -654.528573978645 33 -3.60955709766131e-12 70 1 0 3DFACE 8 leg_half 10 681.150249762187 20 -615.402249914861 30 -7.58006990508875e-12 11 688.116269958089 21 -603.340928801175 31 5.8394595198284 12 688.116269958089 22 -603.340928801176 32 -8.48245917950408e-12 13 688.116269958089 23 -603.340928801176 33 -8.48245917950408e-12 70 1 0 3DFACE 8 leg_half 10 688.116269958089 20 -603.340928801175 30 5.8394595198284 11 681.150249762187 21 -615.402249914861 31 -7.58006990508875e-12 12 681.150249762187 22 -615.402249914861 32 5.83945951982948 13 681.150249762187 23 -615.402249914861 33 5.83945951982948 70 1 0 3DFACE 8 leg_half 10 700.992216732393 20 -563.749226612814 30 5.83945951982569 11 806.270901222104 21 56.1856515498016 31 1.46187062455283e-11 12 700.992216732393 22 -563.749226612815 32 -1.11896270027501e-11 13 700.992216732393 23 -563.749226612815 33 -1.11896270027501e-11 70 1 0 3DFACE 8 leg_half 10 806.270901222104 20 56.1856515498016 30 1.46187062455283e-11 11 700.992216732393 21 -563.749226612814 31 5.83945951982569 12 764.995900047839 22 -186.86272 32 5.83945951983706 13 764.995900047839 23 -186.86272 33 5.83945951983706 70 13 0 3DFACE 8 leg_half 10 806.270901222104 20 56.1856515498016 30 1.46187062455283e-11 11 764.995900047839 21 -186.86272 31 5.83945951983706 12 806.270901222105 22 56.1856515497994 32 23.3578380793657 13 806.270901222105 23 56.1856515497994 33 23.3578380793657 70 3 0 3DFACE 8 leg_half 10 806.270901222105 20 56.1856515497994 30 23.3578380793657 11 764.995900047839 21 -186.86272 31 5.83945951983706 12 764.995900047839 22 -186.86272 32 23.3578380793295 13 764.995900047839 23 -186.86272 33 23.3578380793295 70 1 0 3DFACE 8 leg_half 10 473.642020846985 20 -549.252284780773 30 220.6922004252 11 473.101722427237 21 -579.753960348852 31 222.99174608133 12 473.642038802113 22 -579.415028713919 32 219.67849237548 13 473.642038802113 23 -579.415028713919 33 219.67849237548 70 1 0 3DFACE 8 leg_half 10 473.101722427237 20 -579.753960348852 30 222.99174608133 11 473.642020846985 21 -549.252284780773 31 220.6922004252 12 473.10170430358 22 -549.308104906071 32 224.014968929071 13 473.10170430358 23 -549.308104906071 33 224.014968929071 70 1 0 3DFACE 8 leg_half 10 793.570900047839 20 -545.937123520845 30 23.3578380793295 11 792.007210733943 21 -561.872310305502 31 48.1897945304127 12 793.543158239603 22 -559.33210911257 32 23.3578380122893 13 793.543158239603 23 -559.33210911257 33 23.3578380122893 70 1 0 3DFACE 8 leg_half 10 792.007210733943 20 -561.872310305502 30 48.1897945304127 11 793.570900047839 21 -545.937123520845 31 23.3578380793295 12 792.00720150166 22 -546.363038171439 32 48.7110294035543 13 792.00720150166 23 -546.363038171439 33 48.7110294035543 70 1 0 3DFACE 8 leg_half 10 673.957381179691 20 -712.905797682657 30 125.767734693656 11 649.884126043939 21 -701.17731493105 31 151.554727539197 12 649.884124396077 22 -719.380332193364 32 130.67650856366 13 649.884124396077 23 -719.380332193364 33 130.67650856366 70 1 0 3DFACE 8 leg_half 10 649.884126043939 20 -701.17731493105 30 151.554727539197 11 673.957381179691 21 -712.905797682657 31 125.767734693656 12 673.957382761532 22 -695.432070757716 32 145.809483366442 13 673.957382761532 23 -695.432070757716 33 145.809483366442 70 1 0 3DFACE 8 leg_half 10 649.884124396077 20 -719.380332193364 30 130.67650856366 11 624.955348552338 21 -704.633972822346 31 155.011385430145 12 624.955346864755 22 -723.275770827742 32 133.629900413365 13 624.955346864755 23 -723.275770827742 33 133.629900413365 70 1 0 3DFACE 8 leg_half 10 624.955348552338 20 -704.633972822346 30 155.011385430145 11 649.884124396077 21 -719.380332193364 31 130.67650856366 12 649.884126043939 22 -701.17731493105 32 151.554727539197 13 649.884126043939 23 -701.17731493105 33 151.554727539197 70 1 0 3DFACE 8 leg_half 10 624.955346864755 20 -723.275770827742 30 133.629900413365 11 599.602157614092 21 -705.742266508454 31 156.119679116142 12 599.602155913773 22 -724.524747581215 32 134.576835581469 13 599.602155913773 23 -724.524747581215 33 134.576835581469 70 1 0 3DFACE 8 leg_half 10 599.602157614092 20 -705.742266508454 30 156.119679116142 11 624.955346864755 21 -723.275770827742 31 133.629900413365 12 624.955348552338 22 -704.633972822346 32 155.011385430145 13 624.955348552338 23 -704.633972822346 33 155.011385430145 70 1 0 3DFACE 8 leg_half 10 599.602155913773 20 -724.524747581215 30 134.576835581469 11 473.717779021898 21 -705.742288168363 31 156.11970077605 12 473.71777732158 22 -724.524762147558 32 134.576865377446 13 473.71777732158 23 -724.524762147558 33 134.576865377446 70 1 0 3DFACE 8 leg_half 10 473.717779021898 20 -705.742288168363 30 156.11970077605 11 599.602155913773 21 -724.524747581215 31 134.576835581469 12 599.602157614092 22 -705.742266508454 32 156.119679116142 13 599.602157614092 23 -705.742266508454 33 156.119679116142 70 1 0 3DFACE 8 leg_half 10 473.717779021898 20 -705.742288168363 30 156.11970077605 11 473.642078676977 21 -727.212938735792 31 136.614948795724 12 473.71777732158 22 -724.524762147558 32 134.576865377446 13 473.71777732158 23 -724.524762147558 33 134.576865377446 70 1 0 3DFACE 8 leg_half 10 473.642078676977 20 -727.212938735792 30 136.614948795724 11 473.717779021898 21 -705.742288168363 31 156.11970077605 12 473.642080404707 22 -708.127668368109 32 158.505080975556 13 473.642080404707 23 -708.127668368109 33 158.505080975556 70 1 0 3DFACE 8 leg_half 10 0.000889626013624645 20 -791.564217518411 30 23.3578380798509 11 448.317739367628 21 -791.272422434329 31 32.0400273988949 12 1.90727753096809e-05 22 -791.272418599218 32 32.0402749105959 13 1.90727753096809e-05 23 -791.272418599218 33 32.0402749105959 70 1 0 3DFACE 8 leg_half 10 448.317739367628 20 -791.272422434329 30 32.0400273988949 11 0.000889626013624645 21 -791.564217518411 31 23.3578380798509 12 448.317734199337 22 -791.564213042815 32 23.3578378526045 13 448.317734199337 23 -791.564213042815 33 23.3578378526045 70 1 0 3DFACE 8 leg_half 10 698.091838084213 20 -577.37232127131 30 -1.01067598734517e-11 11 700.992216732393 21 -563.749226612814 31 5.83945951982569 12 700.992216732393 22 -563.749226612815 32 -1.11896270027501e-11 13 700.992216732393 23 -563.749226612815 33 -1.11896270027501e-11 70 1 0 3DFACE 8 leg_half 10 700.992216732393 20 -563.749226612814 30 5.83945951982569 11 698.091838084213 21 -577.37232127131 31 -1.01067598734517e-11 12 698.091838084213 22 -577.37232127131 32 5.83945951982641 13 698.091838084213 23 -577.37232127131 33 5.83945951982641 70 1 0 3DFACE 8 leg_half 10 0.00828976046904545 20 -763.617295762417 30 23.3578364570492 11 764.995900047839 21 -186.86272 31 23.3578380793295 12 0.00176534768970384 22 -186.86272 32 23.3578380793295 13 0.00176534768970384 23 -186.86272 33 23.3578380793295 70 1 0 3DFACE 8 leg_half 10 764.995900047839 20 -186.86272 30 23.3578380793295 11 0.00828976046904545 21 -763.617295762417 31 23.3578364570492 12 764.995900047839 22 -545.937132023437 32 23.3578380793295 13 764.995900047839 23 -545.937132023437 33 23.3578380793295 70 3 0 3DFACE 8 leg_half 10 764.995900047839 20 -545.937132023437 30 23.3578380793295 11 0.00828976046904545 21 -763.617295762417 31 23.3578364570492 12 764.975642457445 22 -559.332124908489 32 23.3578380033138 13 764.975642457445 23 -559.332124908489 33 23.3578380033138 70 3 0 3DFACE 8 leg_half 10 764.975642457445 20 -559.332124908489 30 23.3578380033138 11 0.00828976046904545 21 -763.617295762417 31 23.3578364570492 12 764.959283764737 22 -561.475402706277 32 23.3578380028359 13 764.959283764737 23 -561.475402706277 33 23.3578380028359 70 3 0 3DFACE 8 leg_half 10 764.959283764737 20 -561.475402706277 30 23.3578380028359 11 0.00828976046904545 21 -763.617295762417 31 23.3578364570492 12 764.92809314571 22 -563.7670797619 32 23.357838002321 13 764.92809314571 23 -563.7670797619 33 23.357838002321 70 3 0 3DFACE 8 leg_half 10 764.92809314571 20 -563.7670797619 30 23.357838002321 11 0.00828976046904545 21 -763.617295762417 31 23.3578364570492 12 764.878707491771 22 -566.32138210224 32 23.3578380017417 13 764.878707491771 23 -566.32138210224 33 23.3578380017417 70 3 0 3DFACE 8 leg_half 10 764.878707491771 20 -566.32138210224 30 23.3578380017417 11 0.00828976046904545 21 -763.617295762417 31 23.3578364570492 12 764.805052044838 22 -569.303684335783 32 23.3578380010606 13 764.805052044838 23 -569.303684335783 33 23.3578380010606 70 3 0 3DFACE 8 leg_half 10 764.805052044838 20 -569.303684335783 30 23.3578380010606 11 0.00828976046904545 21 -763.617295762417 31 23.3578364570492 12 764.696220629469 22 -572.980425379156 32 23.3578380002154 13 764.696220629469 23 -572.980425379156 33 23.3578380002154 70 3 0 3DFACE 8 leg_half 10 764.696220629469 20 -572.980425379156 30 23.3578380002154 11 0.00828976046904545 21 -763.617295762417 31 23.3578364570492 12 764.531578361879 22 -577.829946771796 32 23.3578379990944 13 764.531578361879 23 -577.829946771796 33 23.3578379990944 70 3 0 3DFACE 8 leg_half 10 764.531578361879 20 -577.829946771796 30 23.3578379990944 11 0.00828976046904545 21 -763.617295762417 31 23.3578364570492 12 764.267940787943 22 -584.829097037034 32 23.3578379974678 13 764.267940787943 23 -584.829097037034 33 23.3578379974678 70 3 0 3DFACE 8 leg_half 10 764.267940787943 20 -584.829097037034 30 23.3578379974678 11 0.00828976046904545 21 -763.617295762417 31 23.3578364570492 12 764.031423295207 22 -590.643016368677 32 23.3578379961104 13 764.031423295207 23 -590.643016368677 33 23.3578379961104 70 3 0 3DFACE 8 leg_half 10 764.031423295207 20 -590.643016368677 30 23.3578379961104 11 0.00828976046904545 21 -763.617295762417 31 23.3578364570492 12 763.093075318335 22 -596.364508960869 32 23.3578379945534 13 763.093075318335 23 -596.364508960869 33 23.3578379945534 70 3 0 3DFACE 8 leg_half 10 763.093075318335 20 -596.364508960869 30 23.3578379945534 11 0.00828976046904545 21 -763.617295762417 31 23.3578364570492 12 760.201821668678 22 -613.067712196625 32 23.3578379899606 13 760.201821668678 23 -613.067712196625 33 23.3578379899606 70 3 0 3DFACE 8 leg_half 10 760.201821668678 20 -613.067712196625 30 23.3578379899606 11 0.00828976046904545 21 -763.617295762417 31 23.3578364570492 12 757.969157364208 22 -620.27407578666 32 23.3578379876696 13 757.969157364208 23 -620.27407578666 33 23.3578379876696 70 3 0 3DFACE 8 leg_half 10 757.969157364208 20 -620.27407578666 30 23.3578379876696 11 0.00828976046904545 21 -763.617295762417 31 23.3578364570492 12 753.576401186168 22 -633.988087312601 32 23.3578379832645 13 753.576401186168 23 -633.988087312601 33 23.3578379832645 70 3 0 3DFACE 8 leg_half 10 753.576401186168 20 -633.988087312601 30 23.3578379832645 11 0.00828976046904545 21 -763.617295762417 31 23.3578364570492 12 744.275042822729 22 -653.583013796713 32 23.35783797602 13 744.275042822729 23 -653.583013796713 33 23.35783797602 70 3 0 3DFACE 8 leg_half 10 744.275042822729 20 -653.583013796713 30 23.35783797602 11 0.00828976046904545 21 -763.617295762417 31 23.3578364570492 12 732.466045885959 22 -671.734013479962 32 23.3578379683062 13 732.466045885959 23 -671.734013479962 33 23.3578379683062 70 3 0 3DFACE 8 leg_half 10 732.466045885959 20 -671.734013479962 30 23.3578379683062 11 0.00828976046904545 21 -763.617295762417 31 23.3578364570492 12 718.363082853901 22 -688.112661424818 32 23.3578379602634 13 718.363082853901 23 -688.112661424818 33 23.3578379602634 70 3 0 3DFACE 8 leg_half 10 718.363082853901 20 -688.112661424818 30 23.3578379602634 11 0.00828976046904545 21 -763.617295762417 31 23.3578364570492 12 702.221333321817 22 -702.422601699266 32 23.3578379520354 13 702.221333321817 23 -702.422601699266 33 23.3578379520354 70 3 0 3DFACE 8 leg_half 10 702.221333321817 20 -702.422601699266 30 23.3578379520354 11 0.00828976046904545 21 -763.617295762417 31 23.3578364570492 12 696.283090443709 22 -706.400240289655 32 23.3578379492919 13 696.283090443709 23 -706.400240289655 33 23.3578379492919 70 3 0 3DFACE 8 leg_half 10 696.283090443709 20 -706.400240289655 30 23.3578379492919 11 0.00828976046904545 21 -763.617295762417 31 23.3578364570492 12 684.332866703488 22 -714.293584916115 32 23.3578379437967 13 684.332866703488 23 -714.293584916115 33 23.3578379437967 70 3 0 3DFACE 8 leg_half 10 684.332866703488 20 -714.293584916115 30 23.3578379437967 11 0.00828976046904545 21 -763.617295762417 31 23.3578364570492 12 454.667734764409 22 -735.026158016502 32 23.3578378670709 13 454.667734764409 23 -735.026158016502 33 23.3578378670709 70 15 0 3DFACE 8 leg_half 10 684.332866703488 20 -714.293584916115 30 23.3578379437967 11 454.667734764409 21 -735.026158016502 31 23.3578378670709 12 665.021357707386 22 -723.600194881456 32 23.3578379356765 13 665.021357707386 23 -723.600194881456 33 23.3578379356765 70 3 0 3DFACE 8 leg_half 10 665.021357707386 20 -723.600194881456 30 23.3578379356765 11 454.667734764409 21 -735.026158016502 31 23.3578378670709 12 644.636229608527 22 -730.229356318714 32 23.35783792781 13 644.636229608527 23 -730.229356318714 33 23.35783792781 70 3 0 3DFACE 8 leg_half 10 644.636229608527 20 -730.229356318714 30 23.35783792781 11 454.667734764409 21 -735.026158016502 31 23.3578378670709 12 623.546331756218 22 -734.061120907196 32 23.3578379203391 13 623.546331756218 23 -734.061120907196 33 23.3578379203391 70 3 0 3DFACE 8 leg_half 10 623.546331756218 20 -734.061120907196 30 23.3578379203391 11 454.667734764409 21 -735.026158016502 31 23.3578378670709 12 602.133265632776 22 -735.026156540265 32 23.357837913399 13 602.133265632776 23 -735.026156540265 33 23.357837913399 70 1 0 3DFACE 8 leg_half 10 454.667734764409 20 -735.026158016502 30 23.3578378670709 11 0.00828976046904545 21 -763.617295762417 31 23.3578364570492 12 454.797651639243 22 -738.608819575715 32 23.3578378663214 13 454.797651639243 23 -738.608819575715 33 23.3578378663214 70 3 0 3DFACE 8 leg_half 10 454.797651639243 20 -738.608819575715 30 23.3578378663214 11 0.00828976046904545 21 -763.617295762417 31 23.3578364570492 12 454.431238307724 22 -742.175043209088 32 23.3578378654204 13 454.431238307724 23 -742.175043209088 33 23.3578378654204 70 3 0 3DFACE 8 leg_half 10 454.431238307724 20 -742.175043209088 30 23.3578378654204 11 0.00828976046904545 21 -763.617295762417 31 23.3578364570492 12 453.575533520408 22 -745.656322242814 32 23.3578378643829 13 453.575533520408 23 -745.656322242814 33 23.3578378643829 70 3 0 3DFACE 8 leg_half 10 453.575533520408 20 -745.656322242814 30 23.3578378643829 11 0.00828976046904545 21 -763.617295762417 31 23.3578364570492 12 452.24697525056 22 -748.985781777358 32 23.3578378632311 13 452.24697525056 23 -748.985781777358 33 23.3578378632311 70 3 0 3DFACE 8 leg_half 10 452.24697525056 20 -748.985781777358 30 23.3578378632311 11 0.00828976046904545 21 -763.617295762417 31 23.3578364570492 12 450.471084922909 22 -752.099463345238 32 23.3578378619863 13 450.471084922909 23 -752.099463345238 33 23.3578378619863 70 3 0 3DFACE 8 leg_half 10 450.471084922909 20 -752.099463345238 30 23.3578378619863 11 0.00828976046904545 21 -763.617295762417 31 23.3578364570492 12 448.28197715053 22 -754.937553544539 32 23.3578378606726 13 448.28197715053 23 -754.937553544539 33 23.3578378606726 70 3 0 3DFACE 8 leg_half 10 448.28197715053 20 -754.937553544539 30 23.3578378606726 11 0.00828976046904545 21 -763.617295762417 31 23.3578364570492 12 445.72170439774 22 -757.445533046268 32 23.3578378593151 13 445.72170439774 23 -757.445533046268 33 23.3578378593151 70 3 0 3DFACE 8 leg_half 10 445.72170439774 20 -757.445533046268 30 23.3578378593151 11 0.00828976046904545 21 -763.617295762417 31 23.3578364570492 12 442.839449157947 22 -759.575223903305 32 23.3578378579396 13 442.839449157947 23 -759.575223903305 33 23.3578378579396 70 3 0 3DFACE 8 leg_half 10 442.839449157947 20 -759.575223903305 30 23.3578378579396 11 0.00828976046904545 21 -763.617295762417 31 23.3578364570492 12 439.690579164597 22 -761.285715042239 32 23.357837856573 13 439.690579164597 23 -761.285715042239 33 23.357837856573 70 3 0 3DFACE 8 leg_half 10 439.690579164597 20 -761.285715042239 30 23.357837856573 11 0.00828976046904545 21 -763.617295762417 31 23.3578364570492 12 436.335583784501 22 -762.544148159569 32 23.3578378552417 13 436.335583784501 23 -762.544148159569 33 23.3578378552417 70 3 0 3DFACE 8 leg_half 10 436.335583784501 20 -762.544148159569 30 23.3578378552417 11 0.00828976046904545 21 -763.617295762417 31 23.3578364570492 12 432.838912025282 22 -763.326348925263 32 23.3578378539704 13 432.838912025282 23 -763.326348925263 33 23.3578378539704 70 3 0 3DFACE 8 leg_half 10 432.838912025282 20 -763.326348925263 30 23.3578378539704 11 0.00828976046904545 21 -763.617295762417 31 23.3578364570492 12 429.267734478649 22 -763.617291372796 32 23.3578378527852 13 429.267734478649 23 -763.617291372796 33 23.3578378527852 70 1 0 3DFACE 8 leg_half 10 473.71777732158 20 -724.524762147558 30 134.576865377446 11 473.64207352602 21 -743.137302565856 31 112.328325554405 12 473.717772252345 22 -740.196478791399 32 110.675560324675 13 473.717772252345 23 -740.196478791399 33 110.675560324675 70 1 0 3DFACE 8 leg_half 10 473.64207352602 20 -743.137302565856 30 112.328325554405 11 473.71777732158 21 -724.524762147558 31 134.576865377446 12 473.642078676977 22 -727.212938735792 32 136.614948795724 13 473.642078676977 23 -727.212938735792 33 136.614948795724 70 1 0 3DFACE 8 leg_half 10 717.894066860413 20 -715.319417548222 30 70.2261702210487 11 696.758800443365 21 -717.703482376537 31 98.03426599948 12 696.758793128571 22 -728.459323997255 32 75.4033102397292 13 696.758793128571 23 -728.459323997255 33 75.4033102397292 70 1 0 3DFACE 8 leg_half 10 696.758800443365 20 -717.703482376537 30 98.03426599948 11 717.894066860413 21 -715.319417548222 31 70.2261702210487 12 717.894073612081 22 -705.391608581792 32 91.1148940822994 13 717.894073612081 23 -705.391608581792 33 91.1148940822994 70 1 0 3DFACE 8 leg_half 10 702.22135687427 20 -684.591375697813 30 79.4250100709702 11 718.363098127435 21 -679.968320245868 31 56.297813526916 12 702.221351073972 22 -693.120266957808 32 61.4796955534277 13 702.221351073972 23 -693.120266957808 33 61.4796955534277 70 1 0 3DFACE 8 leg_half 10 718.363098127435 20 -679.968320245868 30 56.297813526916 11 702.22135687427 21 -684.591375697813 31 79.4250100709702 12 718.363103364091 22 -672.268220571567 32 72.49929930736 13 718.363103364091 23 -672.268220571567 33 72.49929930736 70 1 0 3DFACE 8 leg_half 10 470.677497105752 20 -773.716303656482 30 60.6855157395589 11 468.840126975903 21 -781.672997259934 31 31.0580369189494 12 470.677481847252 22 -778.860284147472 32 30.7703076765303 13 470.677481847252 23 -778.860284147472 33 30.7703076765303 70 1 0 3DFACE 8 leg_half 10 468.840126975903 20 -781.672997259934 30 31.0580369189494 11 470.677497105752 21 -773.716303656482 31 60.6855157395589 12 468.840142428527 22 -776.463572930403 32 61.353838580619 13 468.840142428527 23 -776.463572930403 33 61.353838580619 70 1 0 3DFACE 8 leg_half 10 767.829328484993 20 -662.181333229905 30 49.2897100106075 11 753.739272918395 21 -687.397248351576 31 39.6867423818656 12 767.82932233817 22 -666.812843070624 32 34.6792140832892 13 767.82932233817 23 -666.812843070624 33 34.6792140832892 70 1 0 3DFACE 8 leg_half 10 753.739272918395 20 -687.397248351576 30 39.6867423818656 11 767.829328484993 21 -662.181333229905 31 49.2897100106075 12 753.739280225648 22 -681.891377242064 32 57.0554860936115 13 753.739280225648 23 -681.891377242064 33 57.0554860936115 70 1 0 3DFACE 8 leg_half 10 450.471119570638 20 -727.926175547966 30 103.779563345764 11 452.247013852634 21 -710.823016652003 31 124.188674487802 12 452.247009199941 22 -725.20697903804 32 102.251353856666 13 452.247009199941 23 -725.20697903804 33 102.251353856666 70 1 0 3DFACE 8 leg_half 10 452.247013852634 20 -710.823016652003 30 124.188674487802 11 450.471119570638 21 -727.926175547966 31 103.779563345764 12 450.471124298894 22 -713.308606140826 32 126.073163560098 13 450.471124298894 23 -713.308606140826 33 126.073163560098 70 1 0 3DFACE 8 leg_half 10 450.471111788281 20 -739.369532914357 30 79.7020319508277 11 452.247009199941 21 -725.20697903804 31 102.251353856666 12 452.247001541956 22 -736.467457257336 32 78.5586114938894 13 452.247001541956 23 -736.467457257336 33 78.5586114938894 70 1 0 3DFACE 8 leg_half 10 452.247009199941 20 -725.20697903804 30 102.251353856666 11 450.471111788281 21 -739.369532914357 31 79.7020319508277 12 450.471119570638 22 -727.926175547966 32 103.779563345764 13 450.471119570638 23 -727.926175547966 33 103.779563345764 70 1 0 3DFACE 8 leg_half 10 624.955290211342 20 -549.169431970937 30 215.762940693873 11 649.884068906774 21 -186.86272 31 210.885907146698 12 624.955290211342 22 -186.86272 32 215.762940693873 13 624.955290211342 23 -186.86272 33 215.762940693873 70 1 0 3DFACE 8 leg_half 10 649.884068906774 20 -186.86272 30 210.885907146698 11 624.955290211342 21 -549.169431970937 31 215.762940693873 12 649.884068906774 22 -549.087494127121 32 210.885907146698 13 649.884068906774 23 -549.087494127121 33 210.885907146698 70 1 0 3DFACE 8 leg_half 10 764.031409168954 20 -546.296855411639 30 44.7709041931231 11 764.995900047839 21 -186.86272 31 23.3578380793295 12 764.995900047839 22 -545.937132023437 32 23.3578380793295 13 764.995900047839 23 -545.937132023437 33 23.3578380793295 70 1 0 3DFACE 8 leg_half 10 764.995900047839 20 -186.86272 30 23.3578380793295 11 764.031409168954 21 -546.296855411639 31 44.7709041931231 12 764.031409168954 22 -186.86272 32 44.7709041931231 13 764.031409168954 23 -186.86272 33 44.7709041931231 70 1 0 3DFACE 8 leg_half 10 623.546362358205 20 -644.548798426367 30 162.550587374486 11 602.133289350819 21 -623.054826905935 31 173.833938065877 12 623.546355296361 22 -622.700434111963 32 172.934485818424 13 623.546355296361 23 -622.700434111963 33 172.934485818424 70 1 0 3DFACE 8 leg_half 10 602.133289350819 20 -623.054826905935 30 173.833938065877 11 623.546362358205 21 -644.548798426367 31 162.550587374486 12 602.13329645121 22 -645.022448764174 32 163.393359945326 13 602.13329645121 23 -645.022448764174 33 163.393359945326 70 1 0 3DFACE 8 leg_half 10 445.721740244506 20 -656.026027291755 30 182.972342518915 11 448.282004539076 21 -630.366836092636 31 192.392159030223 12 448.282012434797 22 -654.795098868987 32 180.78210913444 13 448.282012434797 23 -654.795098868987 33 180.78210913444 70 1 0 3DFACE 8 leg_half 10 448.282004539076 20 -630.366836092636 30 192.392159030223 11 445.721740244506 21 -656.026027291755 31 182.972342518915 12 445.721732248607 22 -631.28782828485 32 194.729696180594 13 445.721732248607 23 -631.28782828485 33 194.729696180594 70 1 0 3DFACE 8 leg_half 10 455.006085098156 20 -613.111377811381 30 235.617099433291 11 458.222243636608 21 -643.225259958184 31 225.027705344708 12 458.222230868175 22 -612.875739362874 32 234.648467298763 13 458.222230868175 23 -612.875739362874 33 234.648467298763 70 1 0 3DFACE 8 leg_half 10 458.222243636608 20 -643.225259958184 30 225.027705344708 11 455.006085098156 21 -613.111377811381 31 235.617099433291 12 455.006097921195 22 -643.590691959854 32 225.95519307716 13 455.006097921195 23 -643.590691959854 33 225.95519307716 70 1 0 3DFACE 8 leg_half 10 0.016303397997907 20 -722.503108278541 30 133.044187229337 11 429.267771709642 21 -737.984763689194 31 109.432571697368 12 0.016298390231306 22 -737.984793176583 32 109.432704078611 13 0.016298390231306 23 -737.984793176583 33 109.432704078611 70 1 0 3DFACE 8 leg_half 10 429.267771709642 20 -737.984763689194 30 109.432571697368 11 0.016303397997907 21 -722.503108278541 31 133.044187229337 12 429.267776717416 22 -722.503058608961 32 133.044085628428 13 429.267776717416 23 -722.503058608961 33 133.044085628428 70 1 0 3DFACE 8 leg_half 10 429.267776717416 20 -722.503058608961 30 133.044085628428 11 432.838949191021 21 -737.730681730485 31 109.289774750901 12 429.267771709642 22 -737.984763689194 32 109.432571697368 13 429.267771709642 23 -737.984763689194 33 109.432571697368 70 1 0 3DFACE 8 leg_half 10 432.838949191021 20 -737.730681730485 30 109.289774750901 11 429.267776717416 21 -722.503058608961 31 133.044085628428 12 432.838954191733 22 -722.270804730449 32 132.867998161508 13 432.838954191733 23 -722.270804730449 33 132.867998161508 70 1 0 3DFACE 8 leg_half 10 624.955307916438 20 -764.38593632126 30 29.2895600085649 11 599.602131038669 21 -761.101673056328 31 57.616722979916 12 599.602116671527 22 -765.945156978237 32 29.4490754688794 13 599.602116671527 23 -765.945156978237 33 29.4490754688794 70 1 0 3DFACE 8 leg_half 10 599.602131038669 20 -761.101673056328 30 57.616722979916 11 624.955307916438 21 -764.38593632126 31 29.2895600085649 12 624.955322175969 22 -759.578730682939 32 57.2462284142879 13 624.955322175969 23 -759.578730682939 33 57.2462284142879 70 1 0 3DFACE 8 leg_half 10 753.576386337194 20 -546.993607173192 30 86.2459300397311 11 760.201806938459 21 -186.86272 31 65.8608020071314 12 760.201806938459 22 -546.651150672583 32 65.8608020071314 13 760.201806938459 23 -546.651150672583 33 65.8608020071314 70 1 0 3DFACE 8 leg_half 10 760.201806938459 20 -186.86272 30 65.8608020071314 11 753.576386337194 21 -546.993607173192 31 86.2459300397311 12 753.576386337194 22 -186.86272 32 86.2459300397311 13 753.576386337194 23 -186.86272 33 86.2459300397311 70 1 0 3DFACE 8 leg_half 10 760.201806938459 20 -546.651150672583 30 65.8608020071314 11 764.031409168954 21 -186.86272 31 44.7709041931231 12 764.031409168954 22 -546.296855411639 32 44.7709041931231 13 764.031409168954 23 -546.296855411639 33 44.7709041931231 70 1 0 3DFACE 8 leg_half 10 764.031409168954 20 -186.86272 30 44.7709041931231 11 760.201806938459 21 -546.651150672583 31 65.8608020071314 12 760.201806938459 22 -186.86272 32 65.8608020071314 13 760.201806938459 23 -186.86272 33 65.8608020071314 70 1 0 3DFACE 8 leg_half 10 684.332892871929 20 -694.910065817882 30 85.2241968080869 11 702.221351073972 21 -693.120266957808 31 61.4796955534277 12 684.332886599671 22 -704.132938548301 32 65.8187023707334 13 684.332886599671 23 -704.132938548301 33 65.8187023707334 70 1 0 3DFACE 8 leg_half 10 702.221351073972 20 -693.120266957808 30 61.4796955534277 11 684.332892871929 21 -694.910065817882 31 85.2241968080869 12 702.22135687427 22 -684.591375697813 32 79.4250100709702 13 702.22135687427 23 -684.591375697813 33 79.4250100709702 70 1 0 3DFACE 8 leg_half 10 445.721745102502 20 -717.576266444547 30 129.308758123214 11 448.282018840978 21 -697.799916727886 31 148.177329336375 12 448.282017231929 22 -715.574196634022 32 127.790856991425 13 448.282017231929 23 -715.574196634022 33 127.790856991425 70 1 0 3DFACE 8 leg_half 10 448.282018840978 20 -697.799916727886 30 148.177329336375 11 445.721745102502 21 -717.576266444547 31 129.308758123214 12 445.721746731967 22 -699.576473436421 32 149.95388604473 13 445.721746731967 23 -699.576473436421 33 149.95388604473 70 1 0 3DFACE 8 leg_half 10 602.13330076513 20 -665.362464994464 30 150.056725386733 11 454.667765582876 21 -645.022494242574 31 163.393370075456 12 602.13329645121 22 -645.022448764174 32 163.393359945326 13 602.13329645121 23 -645.022448764174 33 163.393359945326 70 1 0 3DFACE 8 leg_half 10 454.667765582876 20 -645.022494242574 30 163.393370075456 11 602.13330076513 21 -665.362464994464 31 150.056725386733 12 454.667769896794 22 -665.362499898554 32 150.056742450276 13 454.667769896794 23 -665.362499898554 33 150.056742450276 70 1 0 3DFACE 8 leg_half 10 624.955322175969 20 -759.578730682939 30 57.2462284142879 11 599.60214250095 21 -752.465070814344 31 84.8616271735756 12 599.602131038669 22 -761.101673056328 32 57.616722979916 13 599.602131038669 23 -761.101673056328 33 57.616722979916 70 1 0 3DFACE 8 leg_half 10 599.60214250095 20 -752.465070814344 30 84.8616271735756 11 624.955322175969 21 -759.578730682939 31 57.2462284142879 12 624.955333552396 22 -751.006817642042 32 84.2870649622931 13 624.955333552396 23 -751.006817642042 33 84.2870649622931 70 1 0 3DFACE 8 leg_half 10 0.016298390231306 20 -737.984793176583 30 109.432704078611 11 429.267763467221 21 -750.104609262675 31 83.9316672902124 12 0.0162901478210909 22 -750.104622950446 32 83.93183291483 13 0.0162901478210909 23 -750.104622950446 33 83.93183291483 70 1 0 3DFACE 8 leg_half 10 429.267763467221 20 -750.104609262675 30 83.9316672902124 11 0.016298390231306 21 -737.984793176583 31 109.432704078611 12 429.267771709642 22 -737.984763689194 32 109.432571697368 13 429.267771709642 23 -737.984763689194 33 109.432571697368 70 1 0 3DFACE 8 leg_half 10 473.717752446486 20 -761.101673808691 30 57.6167818413605 11 473.642038802113 21 -769.301079755069 31 29.7924413152051 12 473.717738079349 22 -765.945155901366 32 29.449144968378 13 473.717738079349 23 -765.945155901366 33 29.449144968378 70 1 0 3DFACE 8 leg_half 10 473.642038802113 20 -769.301079755069 30 29.7924413152051 11 473.717752446486 21 -761.101673808691 31 57.6167818413605 12 473.642053400866 22 -764.379514823734 32 58.4141748490874 13 473.642053400866 23 -764.379514823734 33 58.4141748490874 70 1 0 3DFACE 8 leg_half 10 451.683344551435 20 -699.535098538027 30 195.129470137406 11 455.006114828511 21 -723.308225016813 31 173.685637622731 12 455.006112926336 22 -699.207898179883 32 194.697902416163 13 455.006112926336 23 -699.207898179883 33 194.697902416163 70 1 0 3DFACE 8 leg_half 10 455.006114828511 20 -723.308225016813 30 173.685637622731 11 451.683344551435 21 -699.535098538027 31 195.129470137406 12 451.68334645801 22 -723.691181151156 32 174.068593757036 13 451.68334645801 23 -723.691181151156 33 174.068593757036 70 1 0 3DFACE 8 leg_half 10 473.642065047928 20 -635.720877069339 30 205.981095949127 11 473.101757695049 21 -663.582663624963 31 196.418146784964 12 473.64207352602 22 -661.950912950484 32 193.514715177954 13 473.64207352602 23 -661.950912950484 33 193.514715177954 70 1 0 3DFACE 8 leg_half 10 473.101757695049 20 -663.582663624963 30 196.418146784964 11 473.642065047928 21 -635.720877069339 31 205.981095949127 12 473.101749084159 22 -636.941767787464 32 209.079797462849 13 473.101749084159 23 -636.941767787464 33 209.079797462849 70 1 0 3DFACE 8 leg_half 10 717.894057585081 20 -722.308196422019 30 48.1794664928565 11 696.758793128571 21 -728.459323997255 31 75.4033102397292 12 696.758783079627 22 -736.03100461107 32 51.5177928651329 13 696.758783079627 23 -736.03100461107 33 51.5177928651329 70 1 0 3DFACE 8 leg_half 10 696.758793128571 20 -728.459323997255 30 75.4033102397292 11 717.894057585081 21 -722.308196422019 31 48.1794664928565 12 717.894066860413 22 -715.319417548222 32 70.2261702210487 13 717.894066860413 23 -715.319417548222 33 70.2261702210487 70 1 0 3DFACE 8 leg_half 10 442.839485482368 20 -734.454801614587 30 107.448702644845 11 445.721732248607 21 -744.352283565408 31 81.6652408886482 12 442.839477401402 22 -746.337240593148 32 82.4473163912804 13 442.839477401402 23 -746.337240593148 33 82.4473163912804 70 1 0 3DFACE 8 leg_half 10 445.721732248607 20 -744.352283565408 30 81.6652408886482 11 442.839485482368 21 -734.454801614587 31 107.448702644845 12 445.721740244506 22 -732.59492990622 32 106.403439896738 13 445.721740244506 23 -732.59492990622 33 106.403439896738 70 1 0 3DFACE 8 leg_half 10 673.957376463676 20 -653.154439951202 30 177.862934850716 11 696.758804887548 21 -668.611056374494 31 154.341547662779 12 696.758800443365 22 -647.656853392997 32 168.080894990074 13 696.758800443365 23 -647.656853392997 33 168.080894990074 70 1 0 3DFACE 8 leg_half 10 696.758804887548 20 -668.611056374494 30 154.341547662779 11 673.957376463676 21 -653.154439951202 31 177.862934850716 12 673.957381179691 22 -675.39032208669 32 163.283210293402 13 673.957381179691 23 -675.39032208669 33 163.283210293402 70 1 0 3DFACE 8 leg_half 10 649.884119483233 20 -657.135168302204 30 184.945974477603 11 673.957381179691 21 -675.39032208669 31 163.283210293402 12 673.957376463676 22 -653.154439951202 32 177.862934850716 13 673.957376463676 23 -653.154439951202 33 177.862934850716 70 1 0 3DFACE 8 leg_half 10 673.957381179691 20 -675.39032208669 30 163.283210293402 11 649.884119483233 21 -657.135168302204 31 184.945974477603 12 649.884124396077 22 -680.299095957346 32 169.757744803614 13 649.884124396077 23 -680.299095957346 33 169.757744803614 70 1 0 3DFACE 8 leg_half 10 624.955341833487 20 -659.530197478533 30 189.207522894826 11 649.884124396077 21 -680.299095957346 31 169.757744803614 12 649.884119483233 22 -657.135168302204 32 184.945974477603 13 649.884119483233 23 -657.135168302204 33 184.945974477603 70 1 0 3DFACE 8 leg_half 10 649.884124396077 20 -680.299095957346 30 169.757744803614 11 624.955341833487 21 -659.530197478533 31 189.207522894826 12 624.955346864755 22 -683.252487807443 32 173.653183437694 13 624.955346864755 23 -683.252487807443 33 173.653183437694 70 1 0 3DFACE 8 leg_half 10 599.602150844536 20 -660.298108897689 30 190.573882756048 11 624.955346864755 21 -683.252487807443 31 173.653183437694 12 624.955341833487 22 -659.530197478533 32 189.207522894826 13 624.955341833487 23 -659.530197478533 33 189.207522894826 70 1 0 3DFACE 8 leg_half 10 624.955346864755 20 -683.252487807443 30 173.653183437694 11 599.602150844536 21 -660.298108897689 31 190.573882756048 12 599.602155913773 22 -684.199422975673 32 174.902160191072 13 599.602155913773 23 -684.199422975673 33 174.902160191072 70 1 0 3DFACE 8 leg_half 10 473.717772252345 20 -660.298147720458 30 190.573891403664 11 599.602155913773 21 -684.199422975673 31 174.902160191072 12 599.602150844536 22 -660.298108897689 32 190.573882756048 13 599.602150844536 23 -660.298108897689 33 190.573882756048 70 1 0 3DFACE 8 leg_half 10 599.602155913773 20 -684.199422975673 30 174.902160191072 11 473.717772252345 21 -660.298147720458 31 190.573891403664 12 473.71777732158 22 -684.199452771651 32 174.902174757415 13 473.71777732158 23 -684.199452771651 33 174.902174757415 70 1 0 3DFACE 8 leg_half 10 473.717772252345 20 -660.298147720458 30 190.573891403664 11 473.642078676977 21 -686.237536190199 31 177.590351345444 12 473.71777732158 22 -684.199452771651 32 174.902174757415 13 473.71777732158 23 -684.199452771651 33 174.902174757415 70 1 0 3DFACE 8 leg_half 10 473.642078676977 20 -686.237536190199 30 177.590351345444 11 473.717772252345 21 -660.298147720458 31 190.573891403664 12 473.64207352602 22 -661.950912950484 32 193.514715177954 13 473.64207352602 23 -661.950912950484 33 193.514715177954 70 1 0 3DFACE 8 leg_half 10 473.64207352602 20 -661.950912950484 30 193.514715177954 11 473.101762926689 21 -688.249705748186 31 180.244348164837 12 473.642078676977 22 -686.237536190199 32 177.590351345444 13 473.642078676977 23 -686.237536190199 33 177.590351345444 70 1 0 3DFACE 8 leg_half 10 473.101762926689 20 -688.249705748186 30 180.244348164837 11 473.64207352602 21 -661.950912950484 31 193.514715177954 12 473.101757695049 22 -663.582663624963 32 196.418146784964 13 473.101757695049 23 -663.582663624963 33 196.418146784964 70 1 0 3DFACE 8 leg_half 10 436.335627427501 20 -703.188137968552 30 153.565550576497 11 439.690620823844 21 -720.64180705444 31 131.632946903436 12 436.335625756533 22 -721.646389233184 32 132.394587199654 13 436.335625756533 23 -721.646389233184 33 132.394587199654 70 1 0 3DFACE 8 leg_half 10 439.690620823844 20 -720.64180705444 30 131.632946903436 11 436.335627427501 21 -703.188137968552 31 153.565550576497 12 439.690622484567 22 -702.296711761968 32 152.674124370004 13 439.690622484567 23 -702.296711761968 33 152.674124370004 70 1 0 3DFACE 8 leg_half 10 847.545902396357 20 -563.749226612815 30 1.80477854883065e-13 11 843.130722681617 21 -608.452917091224 31 23.3578380793307 12 843.130722681614 22 -608.45291709122 32 -4.11489509133389e-11 13 843.130722681614 23 -608.45291709122 33 -4.11489509133389e-11 70 1 0 3DFACE 8 leg_half 10 843.130722681617 20 -608.452917091224 30 23.3578380793307 11 847.545902396357 21 -563.749226612815 31 1.80477854883065e-13 12 847.54590239636 22 -563.749226612819 32 23.3578380793719 13 847.54590239636 23 -563.749226612819 33 23.3578380793719 70 1 0 3DFACE 8 leg_half 10 448.31772029492 20 -549.622454002523 30 242.726639240051 11 451.683281480069 21 -186.86272 31 242.650939792116 12 448.31772029492 22 -186.86272 32 242.726639240051 13 448.31772029492 23 -186.86272 33 242.726639240051 70 1 0 3DFACE 8 leg_half 10 451.683281480069 20 -186.86272 30 242.650939792116 11 448.31772029492 21 -549.622454002523 31 242.726639240051 12 451.683281480069 22 -549.621181308374 32 242.650939792116 13 451.683281480069 23 -549.621181308374 33 242.650939792116 70 1 0 3DFACE 8 leg_half 10 470.677523524142 20 -692.042929592268 30 185.247506781241 11 468.840171011807 21 -716.921589517517 31 167.299002124079 12 470.677525329952 22 -714.922321501014 32 165.299734107777 13 470.677525329952 23 -714.922321501014 33 165.299734107777 70 1 0 3DFACE 8 leg_half 10 468.840171011807 20 -716.921589517517 30 167.299002124079 11 470.677523524142 21 -692.042929592268 31 185.247506781241 12 468.840169183023 22 -693.751116561201 32 187.500558577709 13 468.840169183023 23 -693.751116561201 33 187.500558577709 70 1 0 3DFACE 8 leg_half 10 473.71777732158 20 -684.199452771651 30 174.902174757415 11 599.602157614092 21 -705.742266508454 31 156.119679116142 12 599.602155913773 22 -684.199422975673 32 174.902160191072 13 599.602155913773 23 -684.199422975673 33 174.902160191072 70 1 0 3DFACE 8 leg_half 10 599.602157614092 20 -705.742266508454 30 156.119679116142 11 473.71777732158 21 -684.199452771651 31 174.902174757415 12 473.717779021898 22 -705.742288168363 32 156.11970077605 13 473.717779021898 23 -705.742288168363 33 156.11970077605 70 1 0 3DFACE 8 leg_half 10 473.101762926689 20 -729.866935555387 30 138.627118353444 11 472.10720415349 21 -748.850999084323 31 115.539466637413 12 473.101757695049 22 -746.04073417303 32 113.960076228591 13 473.101757695049 23 -746.04073417303 33 113.960076228591 70 1 0 3DFACE 8 leg_half 10 472.10720415349 20 -748.850999084323 30 115.539466637413 11 473.101762926689 21 -729.866935555387 31 138.627118353444 12 472.107209463225 22 -732.435769686289 32 140.574720545467 13 472.107209463225 23 -732.435769686289 33 140.574720545467 70 1 0 3DFACE 8 leg_half 10 472.107209463225 20 -732.435769686289 30 140.574720545467 11 470.677518140403 21 -751.514112490764 31 117.036156904666 12 472.10720415349 22 -748.850999084323 32 115.539466637413 13 472.10720415349 23 -748.850999084323 33 115.539466637413 70 1 0 3DFACE 8 leg_half 10 470.677518140403 20 -751.514112490764 30 117.036156904666 11 472.107209463225 21 -732.435769686289 31 140.574720545467 12 470.677523524142 22 -734.870094172174 32 142.420342197022 13 470.677523524142 23 -734.870094172174 33 142.420342197022 70 1 0 3DFACE 8 leg_half 10 470.677523524142 20 -734.870094172174 30 142.420342197022 11 468.84016373079 21 -753.978916343896 31 118.421395812685 12 470.677518140403 22 -751.514112490764 32 117.036156904666 13 470.677518140403 23 -751.514112490764 33 117.036156904666 70 1 0 3DFACE 8 leg_half 10 468.84016373079 20 -753.978916343896 30 118.421395812685 11 470.677523524142 21 -734.870094172174 31 142.420342197022 12 468.840169183023 22 -737.123145968814 32 144.128529165728 13 468.840169183023 23 -737.123145968814 33 144.128529165728 70 1 0 3DFACE 8 leg_half 10 452.247015413237 20 -693.583909707096 30 143.961322316008 11 453.575571294939 21 -671.796177947369 31 158.542588616663 12 453.575572828439 22 -691.225448319662 32 141.602860928812 13 453.575572828439 23 -691.225448319662 33 141.602860928812 70 1 0 3DFACE 8 leg_half 10 453.575571294939 20 -671.796177947369 30 158.542588616663 11 452.247015413237 21 -693.583909707096 31 143.961322316008 12 452.247013852634 22 -673.811261880626 32 161.200429262907 13 452.247013852634 23 -673.811261880626 33 161.200429262907 70 1 0 3DFACE 8 leg_half 10 455.006063894518 20 -790.94784918938 30 23.3578378548415 11 451.683300548936 21 -791.196939781596 31 32.0323039932388 12 451.683295385243 22 -791.4884708222 32 23.3578378536789 13 451.683295385243 23 -791.4884708222 33 23.3578378536789 70 1 0 3DFACE 8 leg_half 10 451.683300548936 20 -791.196939781596 30 32.0323039932388 11 455.006063894518 21 -790.94784918938 31 23.3578378548415 12 455.006069025402 22 -790.658170470477 32 31.9771884161607 13 455.006069025402 23 -790.658170470477 33 31.9771884161607 70 1 0 3DFACE 8 leg_half 10 787.130167954486 20 -186.86272 30 73.639808098986 11 792.00720150166 21 -546.363038171439 31 48.7110294035543 12 792.00720150166 22 -186.86272 32 48.7110294035543 13 792.00720150166 23 -186.86272 33 48.7110294035543 70 1 0 3DFACE 8 leg_half 10 792.00720150166 20 -546.363038171439 30 48.7110294035543 11 787.130167954486 21 -186.86272 31 73.639808098986 12 787.130167954486 22 -546.781824001004 32 73.639808098986 13 787.130167954486 23 -546.781824001004 33 73.639808098986 70 1 0 3DFACE 8 leg_half 10 454.667748728094 20 -730.806274098353 30 50.2468973323294 11 602.133267369982 21 -734.928077619115 31 26.2761627640122 12 454.667736501664 22 -734.928076357629 32 26.2762441782473 13 454.667736501664 23 -734.928076357629 33 26.2762441782473 70 1 0 3DFACE 8 leg_half 10 602.133267369982 20 -734.928077619115 30 26.2761627640122 11 454.667748728094 21 -730.806274098353 31 50.2468973323294 12 602.133279596418 22 -730.806273217008 32 50.2468283798967 13 602.133279596418 23 -730.806273217008 33 50.2468283798967 70 1 0 3DFACE 8 leg_half 10 468.840169183023 20 -737.123145968814 30 144.128529165728 11 466.630436254431 21 -756.198062094967 31 119.668573109345 12 468.84016373079 22 -753.978916343896 32 118.421395812685 13 468.84016373079 23 -753.978916343896 33 118.421395812685 70 1 0 3DFACE 8 leg_half 10 466.630436254431 20 -756.198062094967 30 119.668573109345 11 468.840169183023 21 -737.123145968814 31 144.128529165728 12 466.630441768332 22 -739.151644255831 32 145.666467410881 13 466.630441768332 23 -739.151644255831 33 145.666467410881 70 1 0 3DFACE 8 leg_half 10 644.636252442318 20 -621.293308682581 30 169.363127662308 11 623.546345594915 21 -599.640891643383 31 180.244333371467 12 644.636242951136 22 -598.733544865996 32 176.514545976725 13 644.636242951136 23 -598.733544865996 33 176.514545976725 70 1 0 3DFACE 8 leg_half 10 623.546345594915 20 -599.640891643383 30 180.244333371467 11 644.636252442318 21 -621.293308682581 31 169.363127662308 12 623.546355296361 22 -622.700434111963 32 172.934485818424 13 623.546355296361 23 -622.700434111963 33 172.934485818424 70 1 0 3DFACE 8 leg_half 10 473.717752446486 20 -607.239369239249 30 211.479086426299 11 599.60214250095 21 -634.484214570593 31 202.842483429208 12 599.602131038669 22 -607.239310377804 32 211.479085673936 13 599.602131038669 23 -607.239310377804 33 211.479085673936 70 1 0 3DFACE 8 leg_half 10 599.60214250095 20 -634.484214570593 30 202.842483429208 11 473.717752446486 21 -607.239369239249 31 211.479086426299 12 473.717763908762 22 -634.484263142475 32 202.842487443351 13 473.717763908762 23 -634.484263142475 33 202.842487443351 70 1 0 3DFACE 8 leg_half 10 753.739280225648 20 -681.891377242064 30 57.0554860936115 11 736.997677401125 21 -706.00295242646 31 44.2129177479029 12 753.739272918395 22 -687.397248351576 32 39.6867423818656 13 753.739272918395 23 -687.397248351576 33 39.6867423818656 70 1 0 3DFACE 8 leg_half 10 736.997677401125 20 -706.00295242646 30 44.2129177479029 11 753.739280225648 21 -681.891377242064 31 57.0554860936115 12 736.997685757261 22 -699.706769202407 32 64.0747689619352 13 736.997685757261 23 -699.706769202407 33 64.0747689619352 70 1 0 3DFACE 8 leg_half 10 717.894073612081 20 -705.391608581792 30 91.1148940822994 11 696.758804887548 21 -703.964135051352 31 118.98846898236 12 696.758800443365 22 -717.703482376537 32 98.03426599948 13 696.758800443365 23 -717.703482376537 33 98.03426599948 70 1 0 3DFACE 8 leg_half 10 696.758804887548 20 -703.964135051352 30 118.98846898236 11 717.894073612081 21 -705.391608581792 31 91.1148940822994 12 717.894077714131 22 -692.709977485149 32 110.455949073024 13 717.894077714131 23 -692.709977485149 33 110.455949073024 70 1 0 3DFACE 8 leg_half 10 473.642020846985 20 -186.86272 30 220.692200425201 11 473.71772029492 21 -549.195745909472 31 217.326639240051 12 473.71772029492 22 -186.86272 32 217.326639240051 13 473.71772029492 23 -186.86272 33 217.326639240051 70 1 0 3DFACE 8 leg_half 10 473.71772029492 20 -549.195745909472 30 217.326639240051 11 473.642020846985 21 -186.86272 31 220.692200425201 12 473.642020846985 22 -549.252284780773 32 220.6922004252 13 473.642020846985 23 -549.252284780773 33 220.6922004252 70 1 0 3DFACE 8 leg_half 10 458.222243636608 20 -643.225259958184 30 225.027705344708 11 461.269994170696 21 -671.278610214274 31 210.111811908437 12 461.26998493348 22 -642.699946567149 32 223.694427829008 13 461.26998493348 23 -642.699946567149 33 223.694427829008 70 1 0 3DFACE 8 leg_half 10 461.269994170696 20 -671.278610214274 30 210.111811908437 11 458.222243636608 21 -643.225259958184 31 225.027705344708 12 458.222252930963 22 -671.980703984767 32 211.3610708001 13 458.222252930963 23 -671.980703984767 33 211.3610708001 70 1 0 3DFACE 8 leg_half 10 454.431270729568 20 -648.531199395009 30 169.63653352158 11 454.797676017751 21 -624.370524419528 31 177.173126470384 12 454.797683261242 22 -646.78088064753 32 166.522129452237 13 454.797683261242 23 -646.78088064753 33 166.522129452237 70 1 0 3DFACE 8 leg_half 10 454.797676017751 20 -624.370524419528 30 177.173126470384 11 454.431270729568 21 -648.531199395009 31 169.63653352158 12 454.431263343628 22 -625.680128816835 32 180.496989380173 13 454.431263343628 23 -625.680128816835 33 180.496989380173 70 1 0 3DFACE 8 leg_half 10 0.0162788245333154 20 -758.636496454861 30 57.0173045265452 11 429.267737950976 21 -763.421251234373 31 29.1909851596944 12 0.0162646316092562 22 -763.421247562364 32 29.1912221451116 13 0.0162646316092562 23 -763.421247562364 33 29.1912221451116 70 1 0 3DFACE 8 leg_half 10 429.267737950976 20 -763.421251234373 30 29.1909851596944 11 0.0162788245333154 21 -758.636496454861 31 57.0173045265452 12 429.267752143919 22 -758.636493889386 32 57.017103815686 13 429.267752143919 23 -758.636493889386 33 57.017103815686 70 1 0 3DFACE 8 leg_half 10 450.471070624061 20 -548.959849908146 30 203.284158309243 11 452.246960920592 21 -186.86272 31 200.172233713933 12 452.246960920592 22 -548.907571431286 32 200.172233713933 13 452.246960920592 23 -548.907571431286 33 200.172233713933 70 1 0 3DFACE 8 leg_half 10 452.246960920592 20 -186.86272 30 200.172233713933 11 450.471070624061 21 -548.959849908146 31 203.284158309243 12 450.471070624061 22 -186.86272 32 203.284158309244 13 450.471070624061 23 -186.86272 33 203.284158309244 70 1 0 3DFACE 8 leg_half 10 455.006097921195 20 -643.590691959854 30 225.95519307716 11 458.222252930963 21 -671.980703984767 31 211.3610708001 12 458.222243636608 22 -643.225259958184 32 225.027705344708 13 458.222243636608 23 -643.225259958184 33 225.027705344708 70 1 0 3DFACE 8 leg_half 10 458.222252930963 20 -671.980703984767 30 211.3610708001 11 455.006097921195 21 -643.590691959854 31 225.95519307716 12 455.006107255299 22 -672.469112270075 32 212.230111445991 13 455.006107255299 23 -672.469112270075 33 212.230111445991 70 1 0 3DFACE 8 leg_half 10 764.031424128692 20 -589.417441849078 30 25.9365225576139 11 764.267940787943 21 -584.829097037034 31 23.3578379974678 12 764.031423295207 22 -590.643016368677 32 23.3578379961104 13 764.031423295207 23 -590.643016368677 33 23.3578379961104 70 0 0 3DFACE 8 leg_half 10 432.838949191021 20 -737.730681730485 30 109.289774750901 11 436.335612575248 21 -749.104396759147 31 83.5375802413299 12 432.838940960221 22 -749.833439201604 32 83.824824767603 13 432.838940960221 23 -749.833439201604 33 83.824824767603 70 1 0 3DFACE 8 leg_half 10 436.335612575248 20 -749.104396759147 30 83.5375802413299 11 432.838949191021 21 -737.730681730485 31 109.289774750901 12 436.335620774804 22 -737.047580997407 32 108.905866027708 13 436.335620774804 23 -737.047580997407 33 108.905866027708 70 1 0 3DFACE 8 leg_half 10 473.642078676977 20 -727.212938735792 30 136.614948795724 11 473.101757695049 21 -746.04073417303 31 113.960076228591 12 473.64207352602 22 -743.137302565856 32 112.328325554405 13 473.64207352602 23 -743.137302565856 33 112.328325554405 70 1 0 3DFACE 8 leg_half 10 473.101757695049 20 -746.04073417303 30 113.960076228591 11 473.642078676977 21 -727.212938735792 31 136.614948795724 12 473.101762926689 22 -729.866935555387 32 138.627118353444 13 473.101762926689 23 -729.866935555387 33 138.627118353444 70 1 0 3DFACE 8 leg_half 10 736.997695535365 20 -649.940320006495 30 129.715362054641 11 717.894079090038 21 -677.51110607242 31 127.888518682951 12 736.997696774917 22 -665.645302851503 32 116.022715463229 13 736.997696774917 23 -665.645302851503 33 116.022715463229 70 1 0 3DFACE 8 leg_half 10 717.894079090038 20 -677.51110607242 30 127.888518682951 11 736.997695535365 21 -649.940320006495 31 129.715362054641 12 717.894077714131 22 -660.078536464024 32 143.087390097436 13 717.894077714131 23 -660.078536464024 33 143.087390097436 70 1 0 3DFACE 8 leg_half 10 696.758804887548 20 -668.611056374494 30 154.341547662779 11 717.894079090038 21 -677.51110607242 31 127.888518682951 12 717.894077714131 22 -660.078536464024 32 143.087390097436 13 717.894077714131 23 -660.078536464024 33 143.087390097436 70 1 0 3DFACE 8 leg_half 10 717.894079090038 20 -677.51110607242 30 127.888518682951 11 696.758804887548 21 -668.611056374494 31 154.341547662779 12 696.758806378212 22 -687.497596031337 32 137.875008640862 13 696.758806378212 23 -687.497596031337 33 137.875008640862 70 1 0 3DFACE 8 leg_half 10 673.957381179691 20 -675.39032208669 30 163.283210293402 11 696.758806378212 21 -687.497596031337 31 137.875008640862 12 696.758804887548 22 -668.611056374494 32 154.341547662779 13 696.758804887548 23 -668.611056374494 33 154.341547662779 70 1 0 3DFACE 8 leg_half 10 696.758806378212 20 -687.497596031337 30 137.875008640862 11 673.957381179691 21 -675.39032208669 31 163.283210293402 12 673.957382761532 22 -695.432070757716 32 145.809483366442 13 673.957382761532 23 -695.432070757716 33 145.809483366442 70 1 0 3DFACE 8 leg_half 10 649.884124396077 20 -680.299095957346 30 169.757744803614 11 673.957382761532 21 -695.432070757716 31 145.809483366442 12 673.957381179691 22 -675.39032208669 32 163.283210293402 13 673.957381179691 23 -675.39032208669 33 163.283210293402 70 1 0 3DFACE 8 leg_half 10 673.957382761532 20 -695.432070757716 30 145.809483366442 11 649.884124396077 21 -680.299095957346 31 169.757744803614 12 649.884126043939 22 -701.17731493105 32 151.554727539197 13 649.884126043939 23 -701.17731493105 33 151.554727539197 70 1 0 3DFACE 8 leg_half 10 624.955346864755 20 -683.252487807443 30 173.653183437694 11 649.884126043939 21 -701.17731493105 31 151.554727539197 12 649.884124396077 22 -680.299095957346 32 169.757744803614 13 649.884124396077 23 -680.299095957346 33 169.757744803614 70 1 0 3DFACE 8 leg_half 10 649.884126043939 20 -701.17731493105 30 151.554727539197 11 624.955346864755 21 -683.252487807443 31 173.653183437694 12 624.955348552338 22 -704.633972822346 32 155.011385430145 13 624.955348552338 23 -704.633972822346 33 155.011385430145 70 1 0 3DFACE 8 leg_half 10 767.829332959368 20 -655.602108768076 30 63.1328050448759 11 753.739280225648 21 -681.891377242064 31 57.0554860936115 12 767.829328484993 22 -662.181333229905 32 49.2897100106075 13 767.829328484993 23 -662.181333229905 33 49.2897100106075 70 1 0 3DFACE 8 leg_half 10 753.739280225648 20 -681.891377242064 30 57.0554860936115 11 767.829332959368 21 -655.602108768076 31 63.1328050448759 12 753.73928554472 22 -674.070091498716 32 73.5119548557674 13 753.73928554472 23 -674.070091498716 33 73.5119548557674 70 1 0 3DFACE 8 leg_half 10 753.73928554472 20 -674.070091498716 30 73.5119548557674 11 736.997685757261 21 -699.706769202407 31 64.0747689619352 12 753.739280225648 22 -681.891377242064 32 57.0554860936115 13 753.739280225648 23 -681.891377242064 33 57.0554860936115 70 1 0 3DFACE 8 leg_half 10 736.997685757261 20 -699.706769202407 30 64.0747689619352 11 753.73928554472 21 -674.070091498716 31 73.5119548557674 12 736.997691839832 22 -690.762816990611 32 82.8933973835911 13 736.997691839832 23 -690.762816990611 33 82.8933973835911 70 1 0 3DFACE 8 leg_half 10 736.997685757261 20 -699.706769202407 30 64.0747689619352 11 717.894073612081 21 -705.391608581792 31 91.1148940822994 12 717.894066860413 22 -715.319417548222 32 70.2261702210487 13 717.894066860413 23 -715.319417548222 33 70.2261702210487 70 1 0 3DFACE 8 leg_half 10 717.894073612081 20 -705.391608581792 30 91.1148940822994 11 736.997685757261 21 -699.706769202407 31 64.0747689619352 12 736.997691839832 22 -690.762816990611 32 82.8933973835911 13 736.997691839832 23 -690.762816990611 33 82.8933973835911 70 1 0 3DFACE 8 leg_half 10 461.26998493348 20 -642.699946567149 30 223.694427829008 11 464.090784277369 21 -670.376318084996 31 208.5063328654 12 464.090775113584 22 -642.024842985963 32 221.980972610863 13 464.090775113584 23 -642.024842985963 33 221.980972610863 70 1 0 3DFACE 8 leg_half 10 464.090784277369 20 -670.376318084996 30 208.5063328654 11 461.26998493348 21 -642.699946567149 31 223.694427829008 12 461.269994170696 22 -671.278610214274 32 210.111811908437 13 461.269994170696 23 -671.278610214274 33 210.111811908437 70 1 0 3DFACE 8 leg_half 10 464.090762524528 20 -781.089165318495 30 62.4790981961044 11 461.26998493348 21 -773.317015214971 31 93.0773591680305 12 461.269972243544 22 -782.87863142832 32 62.9144188854628 13 461.269972243544 23 -782.87863142832 33 62.9144188854628 70 1 0 3DFACE 8 leg_half 10 461.26998493348 20 -773.317015214971 30 93.0773591680305 11 464.090762524528 21 -781.089165318495 31 62.4790981961044 12 464.090775113584 22 -771.603559996758 32 92.4022555870175 13 464.090775113584 23 -771.603559996758 33 92.4022555870175 70 1 0 3DFACE 8 leg_half 10 450.471101097006 20 -747.425197006803 30 54.2897470886059 11 452.247001541956 21 -736.467457257336 31 78.5586114938894 12 452.246991021541 22 -744.394381773506 32 53.5524466917642 13 452.246991021541 23 -744.394381773506 33 53.5524466917642 70 1 0 3DFACE 8 leg_half 10 452.247001541956 20 -736.467457257336 30 78.5586114938894 11 450.471101097006 21 -747.425197006803 31 54.2897470886059 12 450.471111788281 22 -739.369532914357 32 79.7020319508277 13 450.471111788281 23 -739.369532914357 33 79.7020319508277 70 1 0 3DFACE 8 leg_half 10 452.246991021541 20 -744.394381773506 30 53.5524466917642 11 453.575559198051 21 -733.364267924859 31 77.3359522782304 12 453.575548860337 22 -741.153531203966 32 52.7640516820845 13 453.575548860337 23 -741.153531203966 33 52.7640516820845 70 1 0 3DFACE 8 leg_half 10 453.575559198051 20 -733.364267924859 30 77.3359522782304 11 452.246991021541 21 -744.394381773506 31 53.5524466917642 12 452.247001541956 22 -736.467457257336 32 78.5586114938894 13 452.247001541956 23 -736.467457257336 33 78.5586114938894 70 1 0 3DFACE 8 leg_half 10 453.575548860337 20 -741.153531203966 30 52.7640516820845 11 454.431263343628 21 -730.119576764422 31 76.0575414220674 12 454.431253196946 22 -737.764901599428 32 51.9397070211046 13 454.431253196946 23 -737.764901599428 33 51.9397070211046 70 1 0 3DFACE 8 leg_half 10 454.431263343628 20 -730.119576764422 30 76.0575414220674 11 453.575548860337 21 -741.153531203966 31 52.7640516820845 12 453.575559198051 22 -733.364267924859 32 77.3359522782304 13 453.575559198051 23 -733.364267924859 33 77.3359522782304 70 1 0 3DFACE 8 leg_half 10 454.431253196946 20 -737.764901599428 30 51.9397070211046 11 454.797676017751 21 -726.7957138545 31 74.7479370250946 12 454.797666066761 22 -734.293588076417 32 51.0952482583018 13 454.797666066761 23 -734.293588076417 33 51.0952482583018 70 1 0 3DFACE 8 leg_half 10 454.797676017751 20 -726.7957138545 30 74.7479370250946 11 454.431253196946 21 -737.764901599428 31 51.9397070211046 12 454.431263343628 22 -730.119576764422 32 76.0575414220674 13 454.431263343628 23 -730.119576764422 33 76.0575414220674 70 1 0 3DFACE 8 leg_half 10 454.797666066761 20 -734.293588076417 30 51.0952482583018 11 454.667758482489 21 -723.456530152174 31 73.4322964107047 12 454.667748728094 22 -730.806274098353 32 50.2468973323294 13 454.667748728094 23 -730.806274098353 33 50.2468973323294 70 1 0 3DFACE 8 leg_half 10 454.667758482489 20 -723.456530152174 30 73.4322964107047 11 454.797666066761 21 -734.293588076417 31 51.0952482583018 12 454.797676017751 22 -726.7957138545 32 74.7479370250946 13 454.797676017751 23 -726.7957138545 33 74.7479370250946 70 1 0 3DFACE 8 leg_half 10 454.667758482489 20 -723.456530152174 30 73.4322964107047 11 602.133279596418 21 -730.806273217008 31 50.2468283798967 12 454.667748728094 22 -730.806274098353 32 50.2468973323294 13 454.667748728094 23 -730.806274098353 33 50.2468973323294 70 1 0 3DFACE 8 leg_half 10 602.133279596418 20 -730.806273217008 30 50.2468283798967 11 454.667758482489 21 -723.456530152174 31 73.4322964107047 12 602.133289350819 22 -723.456525449862 32 73.4322395118387 13 602.133289350819 23 -723.456525449862 33 73.4322395118387 70 1 0 3DFACE 8 leg_half 10 602.133289350819 20 -723.456525449862 30 73.4322395118387 11 623.546345594915 21 -729.866920753093 31 50.0183042486409 12 602.133279596418 22 -730.806273217008 32 50.2468283798967 13 602.133279596418 23 -730.806273217008 33 50.2468283798967 70 1 0 3DFACE 8 leg_half 10 623.546345594915 20 -729.866920753093 30 50.0183042486409 11 602.133289350819 21 -723.456525449862 31 73.4322395118387 12 623.546355296361 22 -722.557073202373 32 73.0778467179566 13 623.546355296361 23 -722.557073202373 33 73.0778467179566 70 1 0 3DFACE 8 leg_half 10 623.546355296361 20 -722.557073202373 30 73.0778467179566 11 644.636242951136 21 -726.13713335826 31 49.1109574716297 12 623.546345594915 22 -729.866920753093 32 50.0183042486409 13 623.546345594915 23 -729.866920753093 33 50.0183042486409 70 1 0 3DFACE 8 leg_half 10 644.636242951136 20 -726.13713335826 30 49.1109574716297 11 623.546355296361 21 -722.557073202373 31 73.0778467179566 12 644.636252442318 22 -718.985715046116 32 71.6707212889357 13 644.636252442318 23 -718.985715046116 33 71.6707212889357 70 1 0 3DFACE 8 leg_half 10 644.636252442318 20 -718.985715046116 30 71.6707212889357 11 665.021370191738 21 -719.684397959595 31 47.5412056189011 12 644.636242951136 22 -726.13713335826 32 49.1109574716297 13 644.636242951136 23 -726.13713335826 33 49.1109574716297 70 1 0 3DFACE 8 leg_half 10 665.021370191738 20 -719.684397959595 30 47.5412056189011 11 644.636252442318 21 -718.985715046116 31 71.6707212889357 12 665.021379319153 22 -712.807071282992 32 69.2363238103713 13 665.021379319153 23 -712.807071282992 33 69.2363238103713 70 1 0 3DFACE 8 leg_half 10 672.962315038389 20 -626.669841908538 30 -6.49720277579036e-12 11 681.150249762187 21 -615.402249914861 31 5.83945951982948 12 681.150249762187 22 -615.402249914861 32 -7.58006990508875e-12 13 681.150249762187 23 -615.402249914861 33 -7.58006990508875e-12 70 1 0 3DFACE 8 leg_half 10 681.150249762187 20 -615.402249914861 30 5.83945951982948 11 672.962315038389 21 -626.669841908538 31 -6.49720277579036e-12 12 672.962315038389 22 -626.669841908537 32 5.83945951983038 13 672.962315038389 23 -626.669841908537 33 5.83945951983038 70 1 0 3DFACE 8 leg_half 10 700.992216732393 20 -563.749226612814 30 5.83945951982569 11 0.00176534768975319 21 -186.86272 31 5.83945951983706 12 764.995900047839 22 -186.86272 32 5.83945951983706 13 764.995900047839 23 -186.86272 33 5.83945951983706 70 1 0 3DFACE 8 leg_half 10 0.00176534768975319 20 -186.86272 30 5.83945951983706 11 700.992216732393 21 -563.749226612814 31 5.83945951982569 12 0.000467548731367373 22 -674.37054094885 32 5.83945951983706 13 0.000467548731367373 23 -674.37054094885 33 5.83945951983706 70 3 0 3DFACE 8 leg_half 10 0.000467548731367373 20 -674.37054094885 30 5.83945951983706 11 700.992216732393 21 -563.749226612814 31 5.83945951982569 12 698.091838084213 22 -577.37232127131 32 5.83945951982641 13 698.091838084213 23 -577.37232127131 33 5.83945951982641 70 13 0 3DFACE 8 leg_half 10 0.000467548731367373 20 -674.37054094885 30 5.83945951983706 11 698.091838084213 21 -577.37232127131 31 5.83945951982641 12 693.784141830299 22 -590.617873632807 32 5.83945951982749 13 693.784141830299 23 -590.617873632807 33 5.83945951982749 70 13 0 3DFACE 8 leg_half 10 0.000467548731367373 20 -674.37054094885 30 5.83945951983706 11 693.784141830299 21 -590.617873632807 31 5.83945951982749 12 688.116269958089 22 -603.340928801175 32 5.8394595198284 13 688.116269958089 23 -603.340928801175 33 5.8394595198284 70 13 0 3DFACE 8 leg_half 10 0.000467548731367373 20 -674.37054094885 30 5.83945951983706 11 688.116269958089 21 -603.340928801175 31 5.8394595198284 12 681.150249762187 22 -615.402249914861 32 5.83945951982948 13 681.150249762187 23 -615.402249914861 33 5.83945951982948 70 13 0 3DFACE 8 leg_half 10 0.000467548731367373 20 -674.37054094885 30 5.83945951983706 11 681.150249762187 21 -615.402249914861 31 5.83945951982948 12 672.962315038389 22 -626.669841908537 32 5.83945951983038 13 672.962315038389 23 -626.669841908537 33 5.83945951983038 70 13 0 3DFACE 8 leg_half 10 0.000467548731367373 20 -674.37054094885 30 5.83945951983706 11 672.962315038389 21 -626.669841908537 31 5.83945951983038 12 663.642071806513 22 -637.020396022971 32 5.83945951983146 13 663.642071806513 23 -637.020396022971 33 5.83945951983146 70 13 0 3DFACE 8 leg_half 10 0.000467548731367373 20 -674.37054094885 30 5.83945951983706 11 663.642071806513 21 -637.020396022971 31 5.83945951983146 12 653.29151769208 22 -646.340639254846 32 5.83945951983237 13 653.29151769208 23 -646.340639254846 33 5.83945951983237 70 13 0 3DFACE 8 leg_half 10 0.000467548731367373 20 -674.37054094885 30 5.83945951983706 11 653.29151769208 21 -646.340639254846 31 5.83945951983237 12 642.023925698403 22 -654.528573978644 32 5.83945951983345 13 642.023925698403 23 -654.528573978644 33 5.83945951983345 70 13 0 3DFACE 8 leg_half 10 0.000467548731367373 20 -674.37054094885 30 5.83945951983706 11 642.023925698403 21 -654.528573978644 31 5.83945951983345 12 629.962604584718 22 -661.494594174546 32 5.83945951983435 13 629.962604584718 23 -661.494594174546 33 5.83945951983435 70 13 0 3DFACE 8 leg_half 10 0.000467548731367373 20 -674.37054094885 30 5.83945951983706 11 629.962604584718 21 -661.494594174546 31 5.83945951983435 12 617.239549416349 22 -667.162466046756 32 5.83945951983507 13 617.239549416349 23 -667.162466046756 33 5.83945951983507 70 13 0 3DFACE 8 leg_half 10 0.000467548731367373 20 -674.37054094885 30 5.83945951983706 11 617.239549416349 21 -667.162466046756 31 5.83945951983507 12 603.993997054852 22 -671.47016230067 32 5.83945951983598 13 603.993997054852 23 -671.47016230067 33 5.83945951983598 70 13 0 3DFACE 8 leg_half 10 0.000467548731367373 20 -674.37054094885 30 5.83945951983706 11 603.993997054852 21 -671.47016230067 31 5.83945951983598 12 590.370902396357 22 -674.37054094885 32 5.83945951983706 13 590.370902396357 23 -674.37054094885 33 5.83945951983706 70 1 0 3DFACE 8 leg_half 10 688.116269958089 20 -603.340928801176 30 -8.48245917950408e-12 11 693.784141830299 21 -590.617873632807 31 5.83945951982749 12 693.784141830299 22 -590.617873632807 32 -9.20437059903634e-12 13 693.784141830299 23 -590.617873632807 33 -9.20437059903634e-12 70 1 0 3DFACE 8 leg_half 10 693.784141830299 20 -590.617873632807 30 5.83945951982749 11 688.116269958089 21 -603.340928801176 31 -8.48245917950408e-12 12 688.116269958089 22 -603.340928801175 32 5.8394595198284 13 688.116269958089 23 -603.340928801175 33 5.8394595198284 70 1 0 3DFACE 8 leg_half 10 663.642071806514 20 -637.020396022971 30 -5.59481350137503e-12 11 672.962315038389 21 -626.669841908537 31 5.83945951983038 12 672.962315038389 22 -626.669841908538 32 -6.49720277579036e-12 13 672.962315038389 23 -626.669841908538 33 -6.49720277579036e-12 70 1 0 3DFACE 8 leg_half 10 672.962315038389 20 -626.669841908537 30 5.83945951983038 11 663.642071806514 21 -637.020396022971 31 -5.59481350137503e-12 12 663.642071806513 22 -637.020396022971 32 5.83945951983146 13 663.642071806513 23 -637.020396022971 33 5.83945951983146 70 1 0 3DFACE 8 leg_half 10 663.642071806513 20 -637.020396022971 30 5.83945951983146 11 653.29151769208 21 -646.340639254847 31 -4.51194637207664e-12 12 653.29151769208 22 -646.340639254846 32 5.83945951983237 13 653.29151769208 23 -646.340639254846 33 5.83945951983237 70 1 0 3DFACE 8 leg_half 10 653.29151769208 20 -646.340639254847 30 -4.51194637207664e-12 11 663.642071806513 21 -637.020396022971 31 5.83945951983146 12 663.642071806514 22 -637.020396022971 32 -5.59481350137503e-12 13 663.642071806514 23 -637.020396022971 33 -5.59481350137503e-12 70 1 0 3DFACE 8 leg_half 10 454.431263343628 20 -730.119576764422 30 76.0575414220674 11 454.797683261242 21 -716.144716838612 31 97.1582932541697 12 454.797676017751 22 -726.7957138545 32 74.7479370250946 13 454.797676017751 23 -726.7957138545 33 74.7479370250946 70 1 0 3DFACE 8 leg_half 10 454.797683261242 20 -716.144716838612 30 97.1582932541697 11 454.431263343628 21 -730.119576764422 31 76.0575414220674 12 454.431270729568 22 -719.25912090813 32 98.9086120013344 13 454.431270729568 23 -719.25912090813 33 98.9086120013344 70 1 0 3DFACE 8 leg_half 10 429.267771709642 20 -659.055159092928 30 188.362176301584 11 0.0162901478210909 21 -633.55442031161 31 200.482035565403 12 429.267763467221 22 -633.554254686993 32 200.482021877632 13 429.267763467221 23 -633.554254686993 33 200.482021877632 70 1 0 3DFACE 8 leg_half 10 0.0162901478210909 20 -633.55442031161 30 200.482035565403 11 429.267771709642 21 -659.055159092928 31 188.362176301584 12 0.016298390231306 22 -659.055291474171 32 188.362205788973 13 0.016298390231306 23 -659.055291474171 33 188.362205788973 70 1 0 3DFACE 8 leg_half 10 451.683329511579 20 -643.789222672817 30 226.45907411243 11 455.006107255299 21 -672.469112270075 31 212.230111445991 12 455.006097921195 22 -643.590691959854 32 225.95519307716 13 455.006097921195 23 -643.590691959854 33 225.95519307716 70 1 0 3DFACE 8 leg_half 10 455.006107255299 20 -672.469112270075 30 212.230111445991 11 451.683329511579 21 -643.789222672817 31 226.45907411243 12 451.683338867278 22 -672.734452813075 32 212.702239692806 13 451.683338867278 23 -672.734452813075 33 212.702239692806 70 1 0 3DFACE 8 leg_half 10 644.636264956545 20 -680.297547066858 30 130.674959677109 11 665.021389999784 21 -690.558190885324 31 108.824546057595 12 644.636263548619 22 -695.850119169612 32 112.836707846937 13 644.636263548619 23 -695.850119169612 33 112.836707846937 70 1 0 3DFACE 8 leg_half 10 665.021389999784 20 -690.558190885324 30 108.824546057595 11 644.636264956545 21 -680.297547066858 31 130.674959677109 12 665.021391353748 22 -675.601700530057 32 125.979113140781 13 665.021391353748 23 -675.601700530057 33 125.979113140781 70 1 0 3DFACE 8 leg_half 10 461.269972243544 20 -782.87863142832 30 62.9144188854628 11 458.222243636608 21 -774.650292730724 31 93.6026725589312 12 458.222230868175 22 -784.271054681722 32 63.2531519626526 13 458.222230868175 23 -784.271054681722 33 63.2531519626526 70 1 0 3DFACE 8 leg_half 10 458.222243636608 20 -774.650292730724 30 93.6026725589312 11 461.269972243544 21 -782.87863142832 31 62.9144188854628 12 461.26998493348 22 -773.317015214971 32 93.0773591680305 13 461.26998493348 23 -773.317015214971 33 93.0773591680305 70 1 0 3DFACE 8 leg_half 10 448.282004539076 20 -630.366836092636 30 192.392159030223 11 450.471101097006 21 -603.912334485117 31 197.802609624747 12 450.471111788281 22 -629.324619346527 32 189.746945529741 13 450.471111788281 23 -629.324619346527 33 189.746945529741 70 1 0 3DFACE 8 leg_half 10 450.471101097006 20 -603.912334485117 30 197.802609624747 11 448.282004539076 21 -630.366836092636 31 192.392159030223 12 448.281993692064 22 -604.584376828467 32 200.565167970899 13 448.281993692064 23 -604.584376828467 33 200.565167970899 70 1 0 3DFACE 8 leg_half 10 468.84015475682 20 -640.279768170507 30 217.551860904389 11 466.630436254431 21 -669.291160506739 31 206.575474706326 12 468.84016373079 22 -668.043983209856 32 204.35632895538 13 468.84016373079 23 -668.043983209856 33 204.35632895538 70 1 0 3DFACE 8 leg_half 10 466.630436254431 20 -669.291160506739 30 206.575474706326 11 468.84015475682 21 -640.279768170507 31 217.551860904389 12 466.630427178961 22 -641.212917863139 32 219.920254933339 13 466.630427178961 23 -641.212917863139 33 219.920254933339 70 1 0 3DFACE 8 leg_half 10 454.797683261242 20 -646.78088064753 30 166.522129452237 11 454.667758482489 21 -623.054883804802 31 173.83394276819 12 454.667765582876 22 -645.022494242574 32 163.393370075456 13 454.667765582876 23 -645.022494242574 33 163.393370075456 70 1 0 3DFACE 8 leg_half 10 454.667758482489 20 -623.054883804802 30 173.83394276819 11 454.797683261242 21 -646.78088064753 31 166.522129452237 12 454.797676017751 22 -624.370524419528 32 177.173126470384 13 454.797676017751 23 -624.370524419528 33 177.173126470384 70 1 0 3DFACE 8 leg_half 10 602.13329645121 20 -645.022448764174 30 163.393359945326 11 454.667758482489 21 -623.054883804802 31 173.83394276819 12 602.133289350819 22 -623.054826905935 32 173.833938065877 13 602.133289350819 23 -623.054826905935 33 173.833938065877 70 1 0 3DFACE 8 leg_half 10 454.667758482489 20 -623.054883804802 30 173.83394276819 11 602.13329645121 21 -645.022448764174 31 163.393359945326 12 454.667765582876 22 -645.022494242574 32 163.393370075456 13 454.667765582876 23 -645.022494242574 33 163.393370075456 70 1 0 3DFACE 8 leg_half 10 464.090775113584 20 -771.603559996758 30 92.4022555870175 11 461.269994170696 21 -759.734399297279 31 121.656022816523 12 461.26998493348 22 -773.317015214971 32 93.0773591680305 13 461.26998493348 23 -773.317015214971 33 93.0773591680305 70 1 0 3DFACE 8 leg_half 10 461.269994170696 20 -759.734399297279 30 121.656022816523 11 464.090775113584 21 -771.603559996758 31 92.4022555870175 12 464.090784277369 22 -758.12892025415 32 120.753730687408 13 464.090784277369 23 -758.12892025415 33 120.753730687408 70 1 0 3DFACE 8 leg_half 10 455.006107255299 20 -672.469112270075 30 212.230111445991 11 458.222258577851 21 -698.605625061081 31 193.903521183332 12 458.222252930963 22 -671.980703984767 32 211.3610708001 13 458.222252930963 23 -671.980703984767 33 211.3610708001 70 1 0 3DFACE 8 leg_half 10 458.222258577851 20 -698.605625061081 30 193.903521183332 11 455.006107255299 21 -672.469112270075 31 212.230111445991 12 455.006112926336 22 -699.207898179883 32 194.697902416163 13 455.006112926336 23 -699.207898179883 33 194.697902416163 70 1 0 3DFACE 8 leg_half 10 100.155807358117 20 -186.862719999999 30 2052.97755335166 11 69.0235178451101 21 -280.294079999999 31 2069.61810878401 12 69.0235178451106 22 -186.862719999999 32 2069.61810878401 13 69.0235178451106 23 -186.862719999999 33 2069.61810878401 70 1 0 3DFACE 8 leg_half 10 69.0235178451101 20 -280.294079999999 30 2069.61810878401 11 100.155807358117 21 -186.862719999999 31 2052.97755335166 12 100.155807358117 22 -280.294079999999 32 2052.97755335166 13 100.155807358117 23 -280.294079999999 33 2052.97755335166 70 1 0 3DFACE 8 leg_half 10 100.155807358117 20 -280.29408 30 1753.52666880208 11 127.443487339903 21 -186.86272 31 1775.92108901406 12 100.155807358117 22 -186.86272 32 1753.52666880208 13 100.155807358117 23 -186.86272 33 1753.52666880208 70 1 0 3DFACE 8 leg_half 10 127.443487339903 20 -186.86272 30 1775.92108901406 11 100.155807358117 21 -280.29408 31 1753.52666880208 12 127.443487339902 22 -280.29408 32 1775.92108901406 13 127.443487339902 23 -280.29408 33 1775.92108901406 70 1 0 3DFACE 8 leg_half 10 149.837907551873 20 -280.29408 30 1803.20876899584 11 127.443487339903 21 -186.86272 31 1775.92108901406 12 127.443487339902 22 -280.29408 32 1775.92108901406 13 127.443487339902 23 -280.29408 33 1775.92108901406 70 1 0 3DFACE 8 leg_half 10 127.443487339903 20 -186.86272 30 1775.92108901406 11 149.837907551873 21 -280.29408 31 1803.20876899584 12 149.837907551873 22 -186.86272 32 1803.20876899584 13 149.837907551873 23 -186.86272 33 1803.20876899584 70 1 0 3DFACE 8 leg_half 10 149.837907551873 20 -280.29408 30 2003.29545315791 11 166.47846298422 21 -186.86272 31 1972.1631636449 12 166.478462984219 22 -280.29408 32 1972.1631636449 13 166.478462984219 23 -280.29408 33 1972.1631636449 70 1 0 3DFACE 8 leg_half 10 166.47846298422 20 -186.86272 30 1972.1631636449 11 149.837907551873 21 -280.29408 31 2003.29545315791 12 149.837907551873 22 -186.86272 32 2003.29545315791 13 149.837907551873 23 -186.86272 33 2003.29545315791 70 1 0 3DFACE 8 leg_half 10 744.27505834726 20 -616.515297047424 30 85.6286672029373 11 753.576410189591 21 -595.926735646398 31 76.0356884766169 12 753.576412075941 22 -604.820821451585 32 70.2039737536023 13 753.576412075941 23 -604.820821451585 33 70.2039737536023 70 1 0 3DFACE 8 leg_half 10 753.576410189591 20 -595.926735646398 30 76.0356884766169 11 744.27505834726 21 -616.515297047424 31 85.6286672029373 12 744.27505599199 22 -605.41026540619 32 92.9100649699753 13 744.27505599199 23 -605.41026540619 33 92.9100649699753 70 1 0 3DFACE 8 leg_half 10 473.101749084159 20 -636.941767787464 30 209.079797462849 11 472.10720415349 21 -665.162054034067 31 199.228411696097 12 473.101757695049 22 -663.582663624963 32 196.418146784964 13 473.101757695049 23 -663.582663624963 33 196.418146784964 70 1 0 3DFACE 8 leg_half 10 472.10720415349 20 -665.162054034067 30 199.228411696097 11 473.101749084159 21 -636.941767787464 31 209.079797462849 12 472.107195414063 22 -638.12348215123 32 212.079066347413 13 472.107195414063 23 -638.12348215123 33 212.079066347413 70 1 0 3DFACE 8 leg_half 10 623.546355296361 20 -622.700434111963 30 172.934485818424 11 602.133279596418 21 -599.869415774734 31 181.183685835358 12 623.546345594915 22 -599.640891643383 32 180.244333371467 13 623.546345594915 23 -599.640891643383 33 180.244333371467 70 1 0 3DFACE 8 leg_half 10 602.133279596418 20 -599.869415774734 30 181.183685835358 11 623.546355296361 21 -622.700434111963 31 172.934485818424 12 602.133289350819 22 -623.054826905935 32 173.833938065877 13 602.133289350819 23 -623.054826905935 33 173.833938065877 70 1 0 3DFACE 8 leg_half 10 6.30894498883872e-05 20 -699.581046774633 30 195.189985865263 11 448.317785291547 21 -723.744834584347 31 174.122247190222 12 448.317783384355 22 -699.580940660874 32 195.189933989489 13 448.317783384355 23 -699.580940660874 33 195.189933989489 70 1 0 3DFACE 8 leg_half 10 448.317785291547 20 -723.744834584347 30 174.122247190222 11 6.30894498883872e-05 21 -699.581046774633 31 195.189985865263 12 6.49966391634282e-05 22 -723.744911722756 32 174.12232432863 13 6.49966391634282e-05 23 -723.744911722756 33 174.12232432863 70 1 0 3DFACE 8 leg_half 10 454.797687662105 20 -702.539296405596 30 117.908241171874 11 454.667771343765 21 -683.695448366281 31 134.072860976189 12 454.667769896794 22 -699.679329838522 32 115.739912506852 13 454.667769896794 23 -699.679329838522 33 115.739912506852 70 1 0 3DFACE 8 leg_half 10 454.667771343765 20 -683.695448366281 30 134.072860976189 11 454.797687662105 21 -702.539296405596 31 117.908241171874 12 454.797689138238 22 -686.233268095701 32 136.610680705353 13 454.797689138238 23 -686.233268095701 33 136.610680705353 70 1 0 3DFACE 8 leg_half 10 454.667771343765 20 -683.695448366281 30 134.072860976189 11 602.13330076513 21 -699.679312774979 31 115.739877602763 12 454.667769896794 22 -699.679329838522 32 115.739912506852 13 454.667769896794 23 -699.679329838522 33 115.739912506852 70 1 0 3DFACE 8 leg_half 10 602.13330076513 20 -699.679312774979 30 115.739877602763 11 454.667771343765 21 -683.695448366281 31 134.072860976189 12 602.133302212101 22 -683.695422993079 32 134.072835602987 13 602.133302212101 23 -683.695422993079 33 134.072835602987 70 1 0 3DFACE 8 leg_half 10 458.222252930963 20 -671.980703984767 30 211.3610708001 11 461.269999782869 21 -697.7398487668 31 192.761586394987 12 461.269994170696 22 -671.278610214274 32 210.111811908437 13 461.269994170696 23 -671.278610214274 33 210.111811908437 70 1 0 3DFACE 8 leg_half 10 461.269999782869 20 -697.7398487668 30 192.761586394987 11 458.222252930963 21 -671.980703984767 31 211.3610708001 12 458.222258577851 22 -698.605625061081 32 193.903521183332 13 458.222258577851 23 -698.605625061081 33 193.903521183332 70 1 0 3DFACE 8 leg_half 10 599.602116671527 20 -579.071662867255 30 216.322569598682 11 624.955322175969 21 -606.868815812022 31 209.956143300585 12 624.955307916438 22 -578.912147406784 32 214.763348941721 13 624.955307916438 23 -578.912147406784 33 214.763348941721 70 1 0 3DFACE 8 leg_half 10 624.955322175969 20 -606.868815812022 30 209.956143300585 11 599.602116671527 21 -579.071662867255 31 216.322569598682 12 599.602131038669 22 -607.239310377804 32 211.479085673936 13 599.602131038669 23 -607.239310377804 33 211.479085673936 70 1 0 3DFACE 8 leg_half 10 451.683329511579 20 -776.081661498503 30 94.1666352734205 11 448.31777769836 21 -762.390973409752 31 123.149041059795 12 448.317768339636 22 -776.152256350036 32 94.1944509495159 13 448.317768339636 23 -776.152256350036 33 94.1944509495159 70 1 0 3DFACE 8 leg_half 10 448.31777769836 20 -762.390973409752 30 123.149041059795 11 451.683329511579 21 -776.081661498503 31 94.1666352734205 12 451.683338867278 22 -762.324827081794 32 123.111865415064 13 451.683338867278 23 -762.324827081794 33 123.111865415064 70 1 0 3DFACE 8 leg_half 10 732.466058322552 20 -664.91507027919 30 50.366817478493 11 744.27505599199 21 -642.532652352182 31 55.7876780202442 12 744.275052115393 22 -648.23289118406 32 43.7940230954864 13 744.275052115393 23 -648.23289118406 33 43.7940230954864 70 1 0 3DFACE 8 leg_half 10 744.27505599199 20 -642.532652352182 30 55.7876780202442 11 732.466058322552 21 -664.91507027919 31 50.366817478493 12 732.466062914084 22 -658.163576116691 32 64.5723786137012 13 732.466062914084 23 -658.163576116691 33 64.5723786137012 70 1 0 3DFACE 8 leg_half 10 455.006097921195 20 -775.577780463213 30 93.968104560508 11 451.683338867278 21 -762.324827081794 31 123.111865415064 12 451.683329511579 22 -776.081661498503 32 94.1666352734205 13 451.683329511579 23 -776.081661498503 33 94.1666352734205 70 1 0 3DFACE 8 leg_half 10 451.683338867278 20 -762.324827081794 30 123.111865415064 11 455.006097921195 21 -775.577780463213 31 93.968104560508 12 455.006107255299 22 -761.852698834952 32 122.846524872111 13 455.006107255299 23 -761.852698834952 33 122.846524872111 70 1 0 3DFACE 8 leg_half 10 623.546317277054 20 -548.656939099171 30 185.255996085023 11 602.133251163261 21 -186.86272 31 186.220486963908 12 623.546317277054 22 -186.86272 32 185.255996085023 13 623.546317277054 23 -186.86272 33 185.255996085023 70 1 0 3DFACE 8 leg_half 10 602.133251163261 20 -186.86272 30 186.220486963908 11 623.546317277054 21 -548.656939099171 31 185.255996085023 12 602.133251163261 22 -548.67314817835 32 186.220486963908 13 602.133251163261 23 -548.67314817835 33 186.220486963908 70 1 0 3DFACE 8 leg_half 10 767.82931463357 20 -569.196470349584 30 119.787647909415 11 753.739272918395 21 -589.30932977233 31 137.774660970991 12 767.82932233817 22 -584.301801471681 32 117.190255690543 13 767.82932233817 23 -584.301801471681 33 117.190255690543 70 1 0 3DFACE 8 leg_half 10 753.739272918395 20 -589.30932977233 30 137.774660970991 11 767.82931463357 21 -569.196470349584 31 119.787647909415 12 753.73926375928 22 -571.352333223692 32 140.862402824032 13 753.73926375928 23 -571.352333223692 33 140.862402824032 70 1 0 3DFACE 8 leg_half 10 753.73926375928 20 -571.352333223692 30 140.862402824032 11 736.997677401125 21 -593.835505140242 31 156.380365045419 12 753.739272918395 22 -589.30932977233 32 137.774660970991 13 753.739272918395 23 -589.30932977233 33 137.774660970991 70 1 0 3DFACE 8 leg_half 10 736.997677401125 20 -593.835505140242 30 156.380365045419 11 753.73926375928 21 -571.352333223692 31 140.862402824032 12 736.997666927312 22 -573.300963343833 32 159.911321013811 13 736.997666927312 23 -573.300963343833 33 159.911321013811 70 1 0 3DFACE 8 leg_half 10 473.642078676977 20 -686.237536190199 30 177.590351345444 11 473.101764681482 21 -710.482718842918 31 160.860131450129 12 473.642080404707 22 -708.127668368109 32 158.505080975556 13 473.642080404707 23 -708.127668368109 33 158.505080975556 70 1 0 3DFACE 8 leg_half 10 473.101764681482 20 -710.482718842918 30 160.860131450129 11 473.642078676977 21 -686.237536190199 31 177.590351345444 12 473.101762926689 22 -688.249705748186 32 180.244348164837 13 473.101762926689 23 -688.249705748186 33 180.244348164837 70 1 0 3DFACE 8 leg_half 10 760.201828278129 20 -598.389085203732 30 48.7664978222319 11 764.031425007948 21 -579.704781244013 31 37.0766018107078 12 764.031425302868 22 -583.441376980459 32 33.8187896004645 13 764.031425302868 23 -583.441376980459 33 33.8187896004645 70 1 0 3DFACE 8 leg_half 10 764.031425007948 20 -579.704781244013 30 37.0766018107078 11 760.201828278129 21 -598.389085203732 31 48.7664978222319 12 760.20182781144 22 -592.476194788978 32 53.921748202446 13 760.20182781144 23 -592.476194788978 33 53.921748202446 70 1 0 3DFACE 8 leg_half 10 445.721740244506 20 -732.59492990622 30 106.403439896738 11 448.282017231929 21 -715.574196634022 31 127.790856991425 12 448.282012434797 22 -730.404696521621 32 105.17251147419 13 448.282012434797 23 -730.404696521621 33 105.17251147419 70 1 0 3DFACE 8 leg_half 10 448.282017231929 20 -715.574196634022 30 127.790856991425 11 445.721740244506 21 -732.59492990622 31 106.403439896738 12 445.721745102502 22 -717.576266444547 32 129.308758123214 13 445.721745102502 23 -717.576266444547 33 129.308758123214 70 1 0 3DFACE 8 leg_half 10 602.13330076513 20 -699.679312774979 30 115.739877602763 11 623.546362358205 21 -712.173174760634 31 94.9262110334071 12 602.13329645121 22 -713.015947331523 32 95.3998613711292 13 602.13329645121 23 -713.015947331523 33 95.3998613711292 70 1 0 3DFACE 8 leg_half 10 623.546362358205 20 -712.173174760634 30 94.9262110334071 11 602.13330076513 21 -699.679312774979 31 115.739877602763 12 623.546366648706 22 -698.908941954744 32 115.155805645761 13 623.546366648706 23 -698.908941954744 33 115.155805645761 70 1 0 3DFACE 8 leg_half 10 466.630441768332 20 -739.151644255831 30 145.666467410881 11 464.090784277369 21 -758.12892025415 31 120.753730687408 12 466.630436254431 22 -756.198062094967 32 119.668573109345 13 466.630436254431 23 -756.198062094967 33 119.668573109345 70 1 0 3DFACE 8 leg_half 10 464.090784277369 20 -758.12892025415 30 120.753730687408 11 466.630441768332 21 -739.151644255831 31 145.666467410881 12 464.090789844927 22 -740.916621855406 32 147.004613346736 13 464.090789844927 23 -740.916621855406 33 147.004613346736 70 1 0 3DFACE 8 leg_half 10 464.090784277369 20 -758.12892025415 30 120.753730687408 11 461.269999782869 21 -742.384173786494 31 148.117261370797 12 461.269994170696 22 -759.734399297279 32 121.656022816523 13 461.269994170696 23 -759.734399297279 33 121.656022816523 70 1 0 3DFACE 8 leg_half 10 461.269999782869 20 -742.384173786494 30 148.117261370797 11 464.090784277369 21 -758.12892025415 31 120.753730687408 12 464.090789844927 22 -740.916621855406 32 147.004613346736 13 464.090789844927 23 -740.916621855406 33 147.004613346736 70 1 0 3DFACE 8 leg_half 10 461.269994170696 20 -759.734399297279 30 121.656022816523 11 458.222258577851 21 -743.526108574926 31 148.983037664963 12 458.222252930963 22 -760.983658189012 32 122.358116586891 13 458.222252930963 23 -760.983658189012 33 122.358116586891 70 1 0 3DFACE 8 leg_half 10 458.222258577851 20 -743.526108574926 30 148.983037664963 11 461.269994170696 21 -759.734399297279 31 121.656022816523 12 461.269999782869 22 -742.384173786494 32 148.117261370797 13 461.269999782869 23 -742.384173786494 33 148.117261370797 70 1 0 3DFACE 8 leg_half 10 718.363103364091 20 -672.268220571567 30 72.49929930736 11 732.466065703719 21 -649.539320894872 31 77.7254338656707 12 732.466062914084 22 -658.163576116691 32 64.5723786137012 13 732.466062914084 23 -658.163576116691 33 64.5723786137012 70 1 0 3DFACE 8 leg_half 10 732.466065703719 20 -649.539320894872 30 77.7254338656707 11 718.363103364091 21 -672.268220571567 31 72.49929930736 12 718.363106545679 22 -662.432231199989 32 87.5003989193992 13 718.363106545679 23 -662.432231199989 33 87.5003989193992 70 1 0 3DFACE 8 leg_half 10 732.466062914084 20 -658.163576116691 30 64.5723786137012 11 744.27505834726 21 -635.251254586263 31 66.8927096622113 12 744.27505599199 22 -642.532652352182 32 55.7876780202442 13 744.27505599199 23 -642.532652352182 33 55.7876780202442 70 1 0 3DFACE 8 leg_half 10 744.27505834726 20 -635.251254586263 30 66.8927096622113 11 732.466062914084 21 -658.163576116691 31 64.5723786137012 12 732.466065703719 22 -649.539320894872 32 77.7254338656707 13 732.466065703719 23 -649.539320894872 33 77.7254338656707 70 1 0 3DFACE 8 leg_half 10 744.27505599199 20 -642.532652352182 30 55.7876780202442 11 753.576412075941 21 -619.82656113575 31 55.1982340679256 12 753.576410189591 22 -625.658275857869 32 46.3041482621511 13 753.576410189591 23 -625.658275857869 33 46.3041482621511 70 1 0 3DFACE 8 leg_half 10 753.576412075941 20 -619.82656113575 30 55.1982340679256 11 744.27505599199 21 -642.532652352182 31 55.7876780202442 12 744.27505834726 22 -635.251254586263 32 66.8927096622113 13 744.27505834726 23 -635.251254586263 33 66.8927096622113 70 1 0 3DFACE 8 leg_half 10 753.576410189591 20 -625.658275857869 30 46.3041482621511 11 760.20182781144 21 -603.54433558335 31 42.8536074069585 12 760.201826420081 22 -607.845772298605 32 36.2933847183422 13 760.201826420081 23 -607.845772298605 33 36.2933847183422 70 1 0 3DFACE 8 leg_half 10 760.20182781144 20 -603.54433558335 30 42.8536074069585 11 753.576410189591 21 -625.658275857869 31 46.3041482621511 12 753.576412075941 22 -619.82656113575 32 55.1982340679256 13 753.576412075941 23 -619.82656113575 33 55.1982340679256 70 1 0 3DFACE 8 leg_half 10 792.00721860814 20 -586.233981212786 30 36.6113938325108 11 787.130190684252 21 -609.757662381006 31 47.5643349390529 12 792.007218281129 22 -589.846284379929 32 32.4682094668199 13 792.007218281129 23 -589.846284379929 33 32.4682094668199 70 1 0 3DFACE 8 leg_half 10 787.130190684252 20 -609.757662381006 30 47.5643349390529 11 792.00721860814 21 -586.233981212786 31 36.6113938325108 12 787.130191214298 22 -603.902540579901 32 54.279953197846 13 787.130191214298 23 -603.902540579901 33 54.279953197846 70 1 0 3DFACE 8 leg_half 10 787.130191214298 20 -603.902540579901 30 54.279953197846 11 779.024169157982 21 -628.985710803041 31 62.1423838125873 12 787.130190684252 22 -609.757662381006 32 47.5643349390529 13 787.130190684252 23 -609.757662381006 33 47.5643349390529 70 1 0 3DFACE 8 leg_half 10 779.024169157982 20 -628.985710803041 30 62.1423838125873 11 787.130191214298 21 -603.902540579901 31 54.279953197846 12 779.024169884095 22 -620.964740882273 32 71.3421534984996 13 779.024169884095 23 -620.964740882273 33 71.3421534984996 70 1 0 3DFACE 8 leg_half 10 779.024169884095 20 -620.964740882273 30 71.3421534984996 11 767.829335677824 21 -647.197908223015 31 75.9502497139702 12 779.024169157982 22 -628.985710803041 32 62.1423838125873 13 779.024169157982 23 -628.985710803041 33 62.1423838125873 70 1 0 3DFACE 8 leg_half 10 767.829335677824 20 -647.197908223015 30 75.9502497139702 11 779.024169884095 21 -620.964740882273 31 71.3421534984996 12 767.829336589646 22 -637.125515922866 32 87.5029285374647 13 767.829336589646 23 -637.125515922866 33 87.5029285374647 70 1 0 3DFACE 8 leg_half 10 767.829336589646 20 -637.125515922866 30 87.5029285374647 11 753.73928877638 21 -664.079300898903 31 88.749145475747 12 767.829335677824 22 -647.197908223015 32 75.9502497139702 13 767.829335677824 23 -647.197908223015 33 75.9502497139702 70 1 0 3DFACE 8 leg_half 10 753.73928877638 20 -664.079300898903 30 88.749145475747 11 767.829336589646 21 -637.125515922866 31 87.5029285374647 12 753.739289860341 22 -652.105388357143 32 102.482800970232 13 753.739289860341 23 -652.105388357143 33 102.482800970232 70 1 0 3DFACE 8 leg_half 10 753.576412075941 20 -619.82656113575 30 55.1982340679256 11 760.201828278129 21 -598.389085203732 31 48.7664978222319 12 760.20182781144 22 -603.54433558335 32 42.8536074069585 13 760.20182781144 23 -603.54433558335 33 42.8536074069585 70 1 0 3DFACE 8 leg_half 10 760.201828278129 20 -598.389085203732 30 48.7664978222319 11 753.576412075941 21 -619.82656113575 31 55.1982340679256 12 753.576412708658 22 -612.837280222141 32 63.214692839186 13 753.576412708658 23 -612.837280222141 33 63.214692839186 70 1 0 3DFACE 8 leg_half 10 753.739264589701 20 -690.205036468984 30 23.3578379709152 11 736.997666927312 21 -709.533908392784 31 23.6783759511398 12 739.751559375878 22 -706.400475394532 32 23.357837962948 13 739.751559375878 23 -706.400475394532 33 23.357837962948 70 1 0 3DFACE 8 leg_half 10 736.997666927312 20 -709.533908392784 30 23.6783759511398 11 753.739264589701 21 -690.205036468984 31 23.3578379709152 12 753.739272918395 22 -687.397248351576 32 39.6867423818656 13 753.739272918395 23 -687.397248351576 33 39.6867423818656 70 13 0 3DFACE 8 leg_half 10 736.997666927312 20 -709.533908392784 30 23.6783759511398 11 753.739272918395 21 -687.397248351576 31 39.6867423818656 12 736.997677401125 22 -706.00295242646 32 44.2129177479029 13 736.997677401125 23 -706.00295242646 33 44.2129177479029 70 1 0 3DFACE 8 leg_half 10 736.997666927312 20 -709.533908392784 30 23.6783759511398 11 717.894057585081 21 -722.308196422019 31 48.1794664928565 12 717.894045959123 22 -726.227566234427 32 25.3860745623198 13 717.894045959123 23 -726.227566234427 33 25.3860745623198 70 1 0 3DFACE 8 leg_half 10 717.894057585081 20 -722.308196422019 30 48.1794664928565 11 736.997666927312 21 -709.533908392784 31 23.6783759511398 12 736.997677401125 22 -706.00295242646 32 44.2129177479029 13 736.997677401125 23 -706.00295242646 33 44.2129177479029 70 1 0 3DFACE 8 leg_half 10 717.894045959123 20 -726.227566234427 30 25.3860745623198 11 696.758783079627 21 -736.03100461107 31 51.5177928651329 12 696.758770484001 22 -740.277270942125 32 26.8233094768247 13 696.758770484001 23 -740.277270942125 33 26.8233094768247 70 1 0 3DFACE 8 leg_half 10 696.758783079627 20 -736.03100461107 30 51.5177928651329 11 717.894045959123 21 -726.227566234427 31 25.3860745623198 12 717.894057585081 22 -722.308196422019 32 48.1794664928565 13 717.894057585081 23 -722.308196422019 33 48.1794664928565 70 1 0 3DFACE 8 leg_half 10 702.221361580333 20 -660.639487120937 30 111.016899733167 11 684.332896682708 21 -652.814503888805 31 133.506322083721 12 702.221360398304 22 -645.663323591295 32 124.074113264079 13 702.221360398304 23 -645.663323591295 33 124.074113264079 70 1 0 3DFACE 8 leg_half 10 684.332896682708 20 -652.814503888805 30 133.506322083721 11 702.221361580333 21 -660.639487120937 31 111.016899733167 12 684.332897960916 22 -669.009252539392 32 119.38666515078 13 684.332897960916 23 -669.009252539392 33 119.38666515078 70 1 0 3DFACE 8 leg_half 10 432.838915479952 20 -578.783910422824 30 213.508718295381 11 429.26772029492 21 -549.153237717187 31 214.795486963908 12 432.838897838644 22 -549.148351803013 32 214.504708726405 13 432.838897838644 23 -549.148351803013 33 214.504708726405 70 1 0 3DFACE 8 leg_half 10 429.26772029492 20 -549.153237717187 30 214.795486963908 11 432.838915479952 21 -578.783910422824 31 213.508718295381 12 429.267737950976 22 -578.813572557816 32 213.798663854844 13 429.267737950976 23 -578.813572557816 33 213.798663854844 70 1 0 3DFACE 8 leg_half 10 448.282017231929 20 -677.413444384727 30 165.951609244563 11 450.471119570638 21 -653.402150740311 31 178.303588160926 12 450.471124298894 22 -675.695750953173 32 163.686018751541 13 450.471124298894 23 -675.695750953173 33 163.686018751541 70 1 0 3DFACE 8 leg_half 10 450.471119570638 20 -653.402150740311 30 178.303588160926 11 448.282017231929 21 -677.413444384727 31 165.951609244563 12 448.282012434797 22 -654.795098868987 32 180.78210913444 13 448.282012434797 23 -654.795098868987 33 180.78210913444 70 1 0 3DFACE 8 leg_half 10 450.471124298894 20 -675.695750953173 30 163.686018751541 11 452.247009199941 21 -651.873941250939 31 175.584391651154 12 452.247013852634 22 -673.811261880626 32 161.200429262907 13 452.247013852634 23 -673.811261880626 33 161.200429262907 70 1 0 3DFACE 8 leg_half 10 452.247009199941 20 -651.873941250939 30 175.584391651154 11 450.471124298894 21 -675.695750953173 31 163.686018751541 12 450.471119570638 22 -653.402150740311 32 178.303588160926 13 450.471119570638 23 -653.402150740311 33 178.303588160926 70 1 0 3DFACE 8 leg_half 10 452.247013852634 20 -673.811261880626 30 161.200429262907 11 453.575566723046 21 -650.239827098532 31 172.676755002411 12 453.575571294939 22 -671.796177947369 32 158.542588616663 13 453.575571294939 23 -671.796177947369 33 158.542588616663 70 1 0 3DFACE 8 leg_half 10 453.575566723046 20 -650.239827098532 30 172.676755002411 11 452.247013852634 21 -673.811261880626 31 161.200429262907 12 452.247009199941 22 -651.873941250939 32 175.584391651154 13 452.247009199941 23 -651.873941250939 33 175.584391651154 70 1 0 3DFACE 8 leg_half 10 453.575571294939 20 -671.796177947369 30 158.542588616663 11 454.431270729568 21 -648.531199395009 31 169.63653352158 12 454.431275216977 22 -669.689208643299 32 155.763553572255 13 454.431275216977 23 -669.689208643299 33 155.763553572255 70 1 0 3DFACE 8 leg_half 10 454.431270729568 20 -648.531199395009 30 169.63653352158 11 453.575571294939 21 -671.796177947369 31 158.542588616663 12 453.575566723046 22 -650.239827098532 32 172.676755002411 13 453.575566723046 23 -650.239827098532 33 172.676755002411 70 1 0 3DFACE 8 leg_half 10 787.130167954486 20 -546.781824001004 30 73.639808098986 11 779.024152399766 21 -566.87065726704 31 97.0515138238504 12 787.130178451143 22 -564.415115565838 32 73.0471892828083 13 787.130178451143 23 -564.415115565838 33 73.0471892828083 70 1 0 3DFACE 8 leg_half 10 779.024152399766 20 -566.87065726704 30 97.0515138238504 11 787.130167954486 21 -546.781824001004 31 73.639808098986 12 779.024140682123 22 -547.186238711366 32 97.7130668174428 13 779.024140682123 23 -547.186238711366 33 97.7130668174428 70 1 0 3DFACE 8 leg_half 10 779.024140682123 20 -547.186238711366 30 97.7130668174428 11 767.82931463357 21 -569.196470349584 31 119.787647909415 12 779.024152399766 22 -566.87065726704 32 97.0515138238504 13 779.024152399766 23 -566.87065726704 33 97.0515138238504 70 1 0 3DFACE 8 leg_half 10 767.82931463357 20 -569.196470349584 30 119.787647909415 11 779.024140682123 21 -547.186238711366 31 97.7130668174428 12 767.829301759449 22 -547.569288532173 32 120.514493197419 13 767.829301759449 23 -547.569288532173 33 120.514493197419 70 1 0 3DFACE 8 leg_half 10 746.929122901675 20 -767.779871902213 30 -2.12061479487602e-10 11 718.95840239636 21 -786.469309831082 31 23.3578380791782 12 718.958402396357 22 -786.469309831078 32 -1.92750349015114e-10 13 718.958402396357 23 -786.469309831078 33 -1.92750349015114e-10 70 1 0 3DFACE 8 leg_half 10 718.95840239636 20 -786.469309831082 30 23.3578380791782 11 746.929122901675 21 -767.779871902213 31 -2.12061479487602e-10 12 746.929122901678 22 -767.779871902217 32 23.3578380791593 13 746.929122901678 23 -767.779871902217 33 23.3578380791593 70 1 0 3DFACE 8 leg_half 10 827.969621169947 20 -662.165838331307 30 -1.61527680120344e-10 11 813.090985614623 21 -692.336726612819 31 23.3578380791782 12 813.09098561462 22 -692.336726612815 32 -1.92750349015114e-10 13 813.09098561462 23 -692.336726612815 33 -1.92750349015114e-10 70 1 0 3DFACE 8 leg_half 10 813.090985614623 20 -692.336726612819 30 23.3578380791782 11 827.969621169947 21 -662.165838331307 31 -1.61527680120344e-10 12 827.96962116995 22 -662.165838331311 32 23.3578380792096 13 827.96962116995 23 -662.165838331311 33 23.3578380792096 70 1 0 3DFACE 8 leg_half 10 473.101757695049 20 -746.04073417303 30 113.960076228591 11 472.107195414063 21 -761.701653732916 31 88.5008947532808 12 473.101749084159 22 -758.702384848233 32 87.3191803898169 13 473.101749084159 23 -758.702384848233 33 87.3191803898169 70 1 0 3DFACE 8 leg_half 10 472.107195414063 20 -761.701653732916 30 88.5008947532808 11 473.101757695049 21 -746.04073417303 31 113.960076228591 12 472.10720415349 22 -748.850999084323 32 115.539466637413 13 472.10720415349 23 -748.850999084323 33 115.539466637413 70 1 0 3DFACE 8 leg_half 10 744.275052115393 20 -593.416610482006 30 98.6103038030606 11 753.576402819491 21 -576.182653575586 31 83.8148703207571 12 753.576407084801 22 -586.320946175488 32 80.6010436173693 13 753.576407084801 23 -586.320946175488 33 80.6010436173693 70 1 0 3DFACE 8 leg_half 10 753.576402819491 20 -576.182653575586 30 83.8148703207571 11 744.275052115393 21 -593.416610482006 31 98.6103038030606 12 744.275046789786 22 -580.758079568763 32 102.623043056121 13 744.275046789786 23 -580.758079568763 33 102.623043056121 70 1 0 3DFACE 8 leg_half 10 760.20182781144 20 -603.54433558335 30 42.8536074069585 11 764.031425302868 21 -583.441376980459 31 33.8187896004645 12 764.031425007948 22 -586.699189190326 32 30.0821938636906 13 764.031425007948 23 -586.699189190326 33 30.0821938636906 70 1 0 3DFACE 8 leg_half 10 764.031425302868 20 -583.441376980459 30 33.8187896004645 11 760.20182781144 21 -603.54433558335 31 42.8536074069585 12 760.201828278129 22 -598.389085203732 32 48.7664978222319 13 760.201828278129 23 -598.389085203732 33 48.7664978222319 70 1 0 3DFACE 8 leg_half 10 753.73928877638 20 -664.079300898903 30 88.749145475747 11 736.997691839832 21 -690.762816990611 31 82.8933973835911 12 753.73928554472 22 -674.070091498716 32 73.5119548557674 13 753.73928554472 23 -674.070091498716 33 73.5119548557674 70 1 0 3DFACE 8 leg_half 10 736.997691839832 20 -690.762816990611 30 82.8933973835911 11 753.73928877638 21 -664.079300898903 31 88.749145475747 12 736.997695535365 22 -679.337949441333 32 100.317732616843 13 736.997695535365 23 -679.337949441333 33 100.317732616843 70 1 0 3DFACE 8 leg_half 10 468.840171011807 20 -716.921589517517 30 167.299002124079 11 466.630441768332 21 -739.151644255831 31 145.666467410881 12 468.840169183023 22 -737.123145968814 32 144.128529165728 13 468.840169183023 23 -737.123145968814 33 144.128529165728 70 1 0 3DFACE 8 leg_half 10 466.630441768332 20 -739.151644255831 30 145.666467410881 11 468.840171011807 21 -716.921589517517 31 167.299002124079 12 466.6304436178 22 -718.721597772832 32 169.099010379212 13 466.6304436178 23 -718.721597772832 33 169.099010379212 70 1 0 3DFACE 8 leg_half 10 466.6304436178 20 -718.721597772832 30 169.099010379212 11 464.090789844927 21 -740.916621855406 31 147.004613346736 12 466.630441768332 22 -739.151644255831 32 145.666467410881 13 466.630441768332 23 -739.151644255831 33 145.666467410881 70 1 0 3DFACE 8 leg_half 10 464.090789844927 20 -740.916621855406 30 147.004613346736 11 466.6304436178 21 -718.721597772832 31 169.099010379212 12 464.090791712392 22 -720.287768351753 32 170.665180957976 13 464.090791712392 23 -720.287768351753 33 170.665180957976 70 1 0 3DFACE 8 leg_half 10 718.363098127435 20 -679.968320245868 30 56.297813526916 11 732.466062914084 21 -658.163576116691 31 64.5723786137012 12 732.466058322552 22 -664.91507027919 32 50.366817478493 13 732.466058322552 23 -664.91507027919 33 50.366817478493 70 1 0 3DFACE 8 leg_half 10 732.466062914084 20 -658.163576116691 30 64.5723786137012 11 718.363098127435 21 -679.968320245868 31 56.297813526916 12 718.363103364091 22 -672.268220571567 32 72.49929930736 13 718.363103364091 23 -672.268220571567 33 72.49929930736 70 1 0 3DFACE 8 leg_half 10 448.317768339636 20 -643.81703834892 30 226.52966896396 11 451.683338867278 21 -672.734452813075 31 212.702239692806 12 451.683329511579 22 -643.789222672817 32 226.45907411243 13 451.683329511579 23 -643.789222672817 33 226.45907411243 70 1 0 3DFACE 8 leg_half 10 451.683338867278 20 -672.734452813075 30 212.702239692806 11 448.317768339636 21 -643.81703834892 31 226.52966896396 12 448.31777769836 22 -672.771628457813 32 212.76838602076 13 448.31777769836 23 -672.771628457813 33 212.76838602076 70 1 0 3DFACE 8 leg_half 10 470.677509279169 20 -639.24331958749 30 214.92128705308 11 468.84016373079 21 -668.043983209856 31 204.35632895538 12 470.677518140403 22 -666.658744301589 32 201.891525102388 13 470.677518140403 23 -666.658744301589 33 201.891525102388 70 1 0 3DFACE 8 leg_half 10 468.84016373079 20 -668.043983209856 30 204.35632895538 11 470.677509279169 21 -639.24331958749 31 214.92128705308 12 468.84015475682 22 -640.279768170507 32 217.551860904389 13 468.84015475682 23 -640.279768170507 33 217.551860904389 70 1 0 3DFACE 8 leg_half 10 470.677518140403 20 -666.658744301589 30 201.891525102388 11 468.840169183023 21 -693.751116561201 31 187.500558577709 12 470.677523524142 22 -692.042929592268 32 185.247506781241 13 470.677523524142 23 -692.042929592268 33 185.247506781241 70 1 0 3DFACE 8 leg_half 10 468.840169183023 20 -693.751116561201 30 187.500558577709 11 470.677518140403 21 -666.658744301589 31 201.891525102388 12 468.84016373079 22 -668.043983209856 32 204.35632895538 13 468.84016373079 23 -668.043983209856 33 204.35632895538 70 1 0 3DFACE 8 leg_half 10 468.84016373079 20 -668.043983209856 30 204.35632895538 11 466.630441768332 21 -695.289054806558 31 189.529056864572 12 468.840169183023 22 -693.751116561201 32 187.500558577709 13 468.840169183023 23 -693.751116561201 33 187.500558577709 70 1 0 3DFACE 8 leg_half 10 466.630441768332 20 -695.289054806558 30 189.529056864572 11 468.84016373079 21 -668.043983209856 31 204.35632895538 12 466.630436254431 22 -669.291160506739 32 206.575474706326 13 466.630436254431 23 -669.291160506739 33 206.575474706326 70 1 0 3DFACE 8 leg_half 10 466.630436254431 20 -669.291160506739 30 206.575474706326 11 464.090789844927 21 -696.627200742591 31 191.294034464012 12 466.630441768332 22 -695.289054806558 32 189.529056864572 13 466.630441768332 23 -695.289054806558 33 189.529056864572 70 1 0 3DFACE 8 leg_half 10 464.090789844927 20 -696.627200742591 30 191.294034464012 11 466.630436254431 21 -669.291160506739 31 206.575474706326 12 464.090784277369 22 -670.376318084996 32 208.5063328654 13 464.090784277369 23 -670.376318084996 33 208.5063328654 70 1 0 3DFACE 8 leg_half 10 461.269994170696 20 -671.278610214274 30 210.111811908437 11 464.090789844927 21 -696.627200742591 31 191.294034464012 12 464.090784277369 22 -670.376318084996 32 208.5063328654 13 464.090784277369 23 -670.376318084996 33 208.5063328654 70 1 0 3DFACE 8 leg_half 10 464.090789844927 20 -696.627200742591 30 191.294034464012 11 461.269994170696 21 -671.278610214274 31 210.111811908437 12 461.269999782869 22 -697.7398487668 32 192.761586394987 13 461.269999782869 23 -697.7398487668 33 192.761586394987 70 1 0 3DFACE 8 leg_half 10 0.0162646316092562 20 -763.421247562364 30 29.1912221451116 11 429.267734478649 21 -763.617291372796 31 23.3578378527852 12 0.00828976046904545 22 -763.617295762417 32 23.3578364570492 13 0.00828976046904545 23 -763.617295762417 33 23.3578364570492 70 1 0 3DFACE 8 leg_half 10 429.267734478649 20 -763.617291372796 30 23.3578378527852 11 0.0162646316092562 21 -763.421247562364 31 29.1912221451116 12 429.267737950976 22 -763.421251234373 32 29.1909851596944 13 429.267737950976 23 -763.421251234373 33 29.1909851596944 70 1 0 3DFACE 8 leg_half 10 439.690582495428 20 -761.097663471809 30 28.9532865498045 11 442.839449157947 21 -759.575223903305 31 23.3578378579396 12 439.690579164597 22 -761.285715042239 32 23.357837856573 13 439.690579164597 23 -761.285715042239 33 23.357837856573 70 1 0 3DFACE 8 leg_half 10 442.839449157947 20 -759.575223903305 30 23.3578378579396 11 439.690582495428 21 -761.097663471809 31 28.9532865498045 12 442.839452384975 22 -759.393032819931 32 28.7789085623947 13 442.839452384975 23 -759.393032819931 33 28.7789085623947 70 1 0 3DFACE 8 leg_half 10 732.466052014781 20 -669.667851071909 30 35.3737619083722 11 744.275042822729 21 -653.583013796713 31 23.35783797602 12 732.466045885959 22 -671.734013479962 32 23.3578379683062 13 732.466045885959 23 -671.734013479962 33 23.3578379683062 70 1 0 3DFACE 8 leg_half 10 744.275042822729 20 -653.583013796713 30 23.35783797602 11 732.466052014781 21 -669.667851071909 31 35.3737619083722 12 744.275046789786 22 -652.245630435845 32 31.1354921818382 13 744.275046789786 23 -652.245630435845 33 31.1354921818382 70 1 0 3DFACE 8 leg_half 10 665.021370191738 20 -719.684397959595 30 47.5412056189011 11 684.332867182503 21 -714.266540775895 31 24.1625326278822 12 665.021358751182 22 -723.541264381198 32 25.1113068905408 13 665.021358751182 23 -723.541264381198 33 25.1113068905408 70 1 0 3DFACE 8 leg_half 10 684.332867182503 20 -714.266540775895 30 24.1625326278822 11 665.021370191738 21 -719.684397959595 31 47.5412056189011 12 684.332877982946 22 -710.625470617764 32 45.3374518452758 13 684.332877982946 23 -710.625470617764 33 45.3374518452758 70 1 0 3DFACE 8 leg_half 10 464.090741872935 20 -786.683847141088 30 23.3578378586363 11 461.269956337624 21 -788.240871473567 31 31.7299058573872 12 461.269951353941 22 -788.522239532049 32 23.3578378573451 13 461.269951353941 23 -788.522239532049 33 23.3578378573451 70 1 0 3DFACE 8 leg_half 10 461.269956337624 20 -788.240871473567 30 31.7299058573872 11 464.090741872935 21 -786.683847141088 31 23.3578378586363 12 464.090746745054 22 -786.408777774662 32 31.5424891402109 13 464.090746745054 23 -786.408777774662 33 31.5424891402109 70 1 0 3DFACE 8 leg_half 10 644.636242951136 20 -726.13713335826 30 49.1109574716297 11 665.021358751182 21 -723.541264381198 31 25.1113068905408 12 644.636231054623 22 -730.147712824956 32 25.7871288899166 13 644.636231054623 23 -730.147712824956 33 25.7871288899166 70 1 0 3DFACE 8 leg_half 10 665.021358751182 20 -723.541264381198 30 25.1113068905408 11 644.636242951136 21 -726.13713335826 31 49.1109574716297 12 665.021370191738 22 -719.684397959595 32 47.5412056189011 13 665.021370191738 23 -719.684397959595 33 47.5412056189011 70 1 0 3DFACE 8 leg_half 10 180.160557528893 20 -280.29408 30 1570.85958260462 11 176.700983922342 21 -186.86272 31 1535.73394230883 12 176.700983922341 22 -280.29408 32 1535.73394230883 13 176.700983922341 23 -280.29408 33 1535.73394230883 70 1 0 3DFACE 8 leg_half 10 176.700983922342 20 -186.86272 30 1535.73394230883 11 180.160557528893 21 -280.29408 31 1570.85958260462 12 180.160557528894 22 -186.86272 32 1570.85958260462 13 180.160557528894 23 -186.86272 33 1570.85958260462 70 1 0 3DFACE 8 leg_half 10 176.700983922341 20 -280.29408 30 1535.73394230883 11 166.455212576235 21 -186.86272 31 1501.95816067091 12 166.455212576234 22 -280.29408 32 1501.95816067091 13 166.455212576234 23 -280.29408 33 1501.95816067091 70 1 0 3DFACE 8 leg_half 10 166.455212576235 20 -186.86272 30 1501.95816067091 11 176.700983922341 21 -280.29408 31 1535.73394230883 12 176.700983922342 22 -186.86272 32 1535.73394230883 13 176.700983922342 23 -186.86272 33 1535.73394230883 70 1 0 3DFACE 8 leg_half 10 166.455212576234 20 -280.29408 30 1501.95816067091 11 149.816982737509 21 -186.86272 31 1470.83022203755 12 149.816982737509 22 -280.29408 32 1470.83022203755 13 149.816982737509 23 -280.29408 33 1470.83022203755 70 1 0 3DFACE 8 leg_half 10 149.816982737509 20 -186.86272 30 1470.83022203755 11 166.455212576234 21 -280.29408 31 1501.95816067091 12 166.455212576235 22 -186.86272 32 1501.95816067091 13 166.455212576235 23 -186.86272 33 1501.95816067091 70 1 0 3DFACE 8 leg_half 10 149.816982737509 20 -280.29408 30 1470.83022203755 11 127.42569224804 21 -186.86272 31 1443.54635563367 12 127.425692248039 22 -280.29408 32 1443.54635563367 13 127.425692248039 23 -280.29408 33 1443.54635563367 70 1 0 3DFACE 8 leg_half 10 127.42569224804 20 -186.86272 30 1443.54635563367 11 149.816982737509 21 -280.29408 31 1470.83022203755 12 149.816982737509 22 -186.86272 32 1470.83022203755 13 149.816982737509 23 -186.86272 33 1470.83022203755 70 1 0 3DFACE 8 leg_half 10 473.717763908762 20 -634.484263142475 30 202.842487443351 11 599.602150844536 21 -660.298108897689 31 190.573882756048 12 599.60214250095 22 -634.484214570593 32 202.842483429208 13 599.60214250095 23 -634.484214570593 33 202.842483429208 70 1 0 3DFACE 8 leg_half 10 599.602150844536 20 -660.298108897689 30 190.573882756048 11 473.717763908762 21 -634.484263142475 31 202.842487443351 12 473.717772252345 22 -660.298147720458 32 190.573891403664 13 473.717772252345 23 -660.298147720458 33 190.573891403664 70 1 0 3DFACE 8 leg_half 10 445.721732248607 20 -631.28782828485 30 194.729696180594 11 442.839466299903 21 -605.682549578299 31 205.079413127562 12 445.721721263973 22 -605.178251275471 32 203.006401057676 13 445.721721263973 23 -605.178251275471 33 203.006401057676 70 1 0 3DFACE 8 leg_half 10 442.839466299903 20 -605.682549578299 30 205.079413127562 11 445.721732248607 21 -631.28782828485 31 194.729696180594 12 442.839477401402 22 -632.069903787681 32 196.714653208256 13 442.839477401402 23 -632.069903787681 33 196.714653208256 70 1 0 3DFACE 8 leg_half 10 623.546345594915 20 -729.866920753093 30 50.0183042486409 11 644.636231054623 21 -730.147712824956 31 25.7871288899166 12 623.546333434853 22 -733.96634875632 32 26.1777702748551 13 623.546333434853 23 -733.96634875632 33 26.1777702748551 70 1 0 3DFACE 8 leg_half 10 644.636231054623 20 -730.147712824956 30 25.7871288899166 11 623.546345594915 21 -729.866920753093 31 50.0183042486409 12 644.636242951136 22 -726.13713335826 32 49.1109574716297 13 644.636242951136 23 -726.13713335826 33 49.1109574716297 70 1 0 3DFACE 8 leg_half 10 454.431240478811 20 -742.052468269584 30 27.0050383833634 11 454.797666066761 21 -734.293588076417 31 51.0952482583018 12 454.797653593913 22 -738.498463121584 32 26.6414790273437 13 454.797653593913 23 -738.498463121584 33 26.6414790273437 70 1 0 3DFACE 8 leg_half 10 454.797666066761 20 -734.293588076417 30 51.0952482583018 11 454.431240478811 21 -742.052468269584 31 27.0050383833634 12 454.431253196946 22 -737.764901599428 32 51.9397070211046 13 454.431253196946 23 -737.764901599428 33 51.9397070211046 70 1 0 3DFACE 8 leg_half 10 744.275046789786 20 -652.245630435845 30 31.1354921818382 11 753.576401186168 21 -633.988087312601 31 23.3578379832645 12 744.275042822729 22 -653.583013796713 32 23.35783797602 13 744.275042822729 23 -653.583013796713 33 23.35783797602 70 1 0 3DFACE 8 leg_half 10 753.576401186168 20 -633.988087312601 30 23.3578379832645 11 744.275046789786 21 -652.245630435845 31 31.1354921818382 12 753.576402819491 22 -633.437457700021 32 26.5600661905556 13 753.576402819491 23 -633.437457700021 33 26.5600661905556 70 1 0 3DFACE 8 leg_half 10 450.471087696265 20 -751.942885609203 30 28.0167869283821 11 452.246991021541 21 -744.394381773506 31 53.5524466917642 12 452.246977834961 22 -748.839872068014 32 27.6993612581553 13 452.246977834961 23 -748.839872068014 33 27.6993612581553 70 1 0 3DFACE 8 leg_half 10 452.246991021541 20 -744.394381773506 30 53.5524466917642 11 450.471087696265 21 -751.942885609203 31 28.0167869283821 12 450.471101097006 22 -747.425197006803 32 54.2897470886059 13 450.471101097006 23 -747.425197006803 33 54.2897470886059 70 1 0 3DFACE 8 leg_half 10 451.683281480069 20 -549.621181308374 30 242.650939792116 11 455.006069025402 21 -581.599775817026 31 241.035583090668 12 455.00604998394 22 -549.612103415805 32 242.110623248711 13 455.00604998394 23 -549.612103415805 33 242.110623248711 70 1 0 3DFACE 8 leg_half 10 455.006069025402 20 -581.599775817026 30 241.035583090668 11 451.683281480069 21 -549.621181308374 31 242.650939792116 12 451.683300548936 22 -581.654891394158 32 241.574352401781 13 451.683300548936 23 -581.654891394158 33 241.574352401781 70 1 0 3DFACE 8 leg_half 10 793.309565768095 20 -569.303680096418 30 23.3578380100164 11 792.00721860814 21 -586.233981212786 31 36.6113938325108 12 793.160541596036 22 -572.980425388099 32 23.3578380091579 13 793.160541596036 23 -572.980425388099 33 23.3578380091579 70 1 0 3DFACE 8 leg_half 10 792.00721860814 20 -586.233981212786 30 36.6113938325108 11 793.309565768095 21 -569.303680096418 31 23.3578380100164 12 792.007218281129 22 -582.09079684746 32 40.22369700007 13 792.007218281129 23 -582.09079684746 33 40.22369700007 70 1 0 3DFACE 8 leg_half 10 429.267763467221 20 -633.554254686993 30 200.482021877632 11 0.0162788245333154 21 -606.639891924184 31 209.013909072529 12 429.267752143919 22 -606.639691213326 32 209.013906507055 13 429.267752143919 23 -606.639691213326 33 209.013906507055 70 1 0 3DFACE 8 leg_half 10 0.0162788245333154 20 -606.639891924184 30 209.013909072529 11 429.267763467221 21 -633.554254686993 31 200.482021877632 12 0.0162901478210909 22 -633.55442031161 32 200.482035565403 13 0.0162901478210909 23 -633.55442031161 33 200.482035565403 70 1 0 3DFACE 8 leg_half 10 718.363098127435 20 -605.920400916633 30 130.345732863609 11 702.221343105619 21 -592.16215835415 31 149.501676557166 12 718.363090933403 22 -588.820775333035 32 135.766293848309 13 718.363090933403 23 -588.820775333035 33 135.766293848309 70 1 0 3DFACE 8 leg_half 10 702.221343105619 20 -592.16215835415 30 149.501676557166 11 718.363098127435 21 -605.920400916633 31 130.345732863609 12 702.221351073972 22 -611.102282944468 32 143.497679575028 13 702.221351073972 23 -611.102282944468 33 143.497679575028 70 1 0 3DFACE 8 leg_half 10 779.024158535186 20 -578.899518233046 30 94.9831268667919 11 767.829328484993 21 -598.912297398533 31 112.558745848353 12 779.024163430099 22 -590.534326018981 32 91.2949066282494 13 779.024163430099 23 -590.534326018981 33 91.2949066282494 70 1 0 3DFACE 8 leg_half 10 767.829328484993 20 -598.912297398533 30 112.558745848353 11 779.024158535186 21 -578.899518233046 31 94.9831268667919 12 767.82932233817 22 -584.301801471681 32 117.190255690543 13 767.82932233817 23 -584.301801471681 33 117.190255690543 70 1 0 3DFACE 8 leg_half 10 93.652471048303 20 -186.862719999999 30 2499.20806403607 11 123.089851596878 21 -280.294079999999 31 2224.76609686633 12 123.089851596878 22 -186.862719999999 32 2224.76609686633 13 123.089851596878 23 -186.862719999999 33 2224.76609686633 70 1 0 3DFACE 8 leg_half 10 123.089851596878 20 -280.294079999999 30 2224.76609686633 11 93.652471048303 21 -186.862719999999 31 2499.20806403607 12 93.6524710483026 22 -280.294079999999 32 2499.20806403607 13 93.6524710483026 23 -280.294079999999 33 2499.20806403607 70 1 0 3DFACE 8 leg_half 10 461.269951353941 20 -788.522239532049 30 23.3578378573451 11 458.222214863865 21 -789.666464186592 31 31.8757394304439 12 458.222209793371 22 -789.952733412824 32 23.3578378560715 13 458.222209793371 23 -789.952733412824 33 23.3578378560715 70 1 0 3DFACE 8 leg_half 10 458.222214863865 20 -789.666464186592 30 31.8757394304439 11 461.269951353941 21 -788.522239532049 31 23.3578378573451 12 461.269956337624 22 -788.240871473567 32 31.7299058573872 13 461.269956337624 23 -788.240871473567 33 31.7299058573872 70 1 0 3DFACE 8 leg_half 10 452.246977834961 20 -748.839872068014 30 27.6993612581553 11 453.575548860337 21 -741.153531203966 31 52.7640516820845 12 453.575535902759 22 -745.521819843274 32 27.3599383202345 13 453.575535902759 23 -745.521819843274 33 27.3599383202345 70 1 0 3DFACE 8 leg_half 10 453.575548860337 20 -741.153531203966 30 52.7640516820845 11 452.246977834961 21 -748.839872068014 31 27.6993612581553 12 452.246991021541 22 -744.394381773506 32 53.5524466917642 13 452.246991021541 23 -744.394381773506 33 53.5524466917642 70 1 0 3DFACE 8 leg_half 10 445.721707495526 20 -757.270638693351 30 28.5617953495419 11 448.28197715053 21 -754.937553544539 31 23.3578378606726 12 445.72170439774 22 -757.445533046268 32 23.3578378593151 13 445.72170439774 23 -757.445533046268 33 23.3578378593151 70 1 0 3DFACE 8 leg_half 10 448.28197715053 20 -754.937553544539 30 23.3578378606726 11 445.721707495526 21 -757.270638693351 31 28.5617953495419 12 448.281980096118 22 -754.771251996272 32 28.306117626709 13 448.281980096118 23 -754.771251996272 33 28.306117626709 70 1 0 3DFACE 8 leg_half 10 432.838915479952 20 -763.131305674907 30 29.1613230247316 11 436.335583784501 21 -762.544148159569 31 23.3578378552417 12 432.838912025282 22 -763.326348925263 32 23.3578378539704 13 432.838912025282 23 -763.326348925263 33 23.3578378539704 70 1 0 3DFACE 8 leg_half 10 436.335583784501 20 -762.544148159569 30 23.3578378552417 11 432.838915479952 21 -763.131305674907 31 29.1613230247316 12 436.335587191701 22 -762.351784924648 32 29.0815795342117 13 436.335587191701 23 -762.351784924648 33 29.0815795342117 70 1 0 3DFACE 8 leg_half 10 454.667736501664 20 -734.928076357629 30 26.2762441782473 11 602.133265632776 21 -735.026156540265 31 23.357837913399 12 454.667734764409 22 -735.026158016502 32 23.3578378670709 13 454.667734764409 23 -735.026158016502 33 23.3578378670709 70 1 0 3DFACE 8 leg_half 10 602.133265632776 20 -735.026156540265 30 23.357837913399 11 454.667736501664 21 -734.928076357629 31 26.2762441782473 12 602.133267369982 22 -734.928077619115 32 26.2761627640122 13 602.133267369982 23 -734.928077619115 33 26.2761627640122 70 1 0 3DFACE 8 leg_half 10 753.73928554472 20 -623.13454224489 30 124.447504114724 11 736.997695535365 21 -649.940320006495 31 129.715362054641 12 753.73928877638 22 -638.371732863863 32 114.456713513376 13 753.73928877638 23 -638.371732863863 33 114.456713513376 70 1 0 3DFACE 8 leg_half 10 736.997695535365 20 -649.940320006495 30 129.715362054641 11 753.73928554472 21 -623.13454224489 31 124.447504114724 12 736.997691839832 22 -632.515984774395 32 141.140229605674 13 736.997691839832 23 -632.515984774395 33 141.140229605674 70 1 0 3DFACE 8 leg_half 10 702.221360398304 20 -673.696700650341 30 96.0407362022104 11 718.363107612844 21 -650.643847155672 31 101.021259768909 12 718.363106545679 22 -662.432231199989 32 87.5003989193992 13 718.363106545679 23 -662.432231199989 33 87.5003989193992 70 1 0 3DFACE 8 leg_half 10 718.363107612844 20 -650.643847155672 30 101.021259768909 11 702.221360398304 21 -673.696700650341 31 96.0407362022104 12 702.221361580333 22 -660.639487120937 32 111.016899733167 13 702.221361580333 23 -660.639487120937 33 111.016899733167 70 1 0 3DFACE 8 leg_half 10 718.363106545679 20 -662.432231199989 30 87.5003989193992 11 732.466066639417 21 -639.203194165743 31 89.5806067801329 12 732.466065703719 22 -649.539320894872 32 77.7254338656707 13 732.466065703719 23 -649.539320894872 33 77.7254338656707 70 1 0 3DFACE 8 leg_half 10 732.466066639417 20 -639.203194165743 30 89.5806067801329 11 718.363106545679 21 -662.432231199989 31 87.5003989193992 12 718.363107612844 22 -650.643847155672 32 101.021259768909 13 718.363107612844 23 -650.643847155672 33 101.021259768909 70 1 0 3DFACE 8 leg_half 10 732.466065703719 20 -649.539320894872 30 77.7254338656707 11 744.275059137262 21 -626.524535798612 31 76.9019484142785 12 744.27505834726 22 -635.251254586263 32 66.8927096622113 13 744.27505834726 23 -635.251254586263 33 66.8927096622113 70 1 0 3DFACE 8 leg_half 10 744.275059137262 20 -626.524535798612 30 76.9019484142785 11 732.466065703719 21 -649.539320894872 31 77.7254338656707 12 732.466066639417 22 -639.203194165743 32 89.5806067801329 13 732.466066639417 23 -639.203194165743 33 89.5806067801329 70 1 0 3DFACE 8 leg_half 10 599.60214250095 20 -752.465070814344 30 84.8616271735756 11 473.717772252345 21 -740.196478791399 31 110.675560324675 12 473.717763908762 22 -752.465074828487 32 84.861675745457 13 473.717763908762 23 -752.465074828487 33 84.861675745457 70 1 0 3DFACE 8 leg_half 10 473.717772252345 20 -740.196478791399 30 110.675560324675 11 599.60214250095 21 -752.465070814344 31 84.8616271735756 12 599.602150844536 22 -740.196470143783 32 110.675521501907 13 599.602150844536 23 -740.196470143783 33 110.675521501907 70 1 0 3DFACE 8 leg_half 10 454.797653593913 20 -576.264066422956 30 188.875875742312 11 454.66772029492 21 -548.673192057237 31 186.220486963908 12 454.667736501664 22 -575.898831573499 32 185.305488978394 13 454.667736501664 23 -575.898831573499 33 185.305488978394 70 1 0 3DFACE 8 leg_half 10 454.66772029492 20 -548.673192057237 30 186.220486963908 11 454.797653593913 21 -576.264066422956 31 188.875875742312 12 454.797637205561 22 -548.733344026199 32 189.801126938624 13 454.797637205561 23 -548.733344026199 33 189.801126938624 70 1 0 3DFACE 8 leg_half 10 767.82932233817 20 -584.301801471681 30 117.190255690543 11 753.739280225648 21 -606.678073483521 31 132.268789859729 12 767.829328484993 22 -598.912297398533 32 112.558745848353 13 767.829328484993 23 -598.912297398533 33 112.558745848353 70 1 0 3DFACE 8 leg_half 10 753.739280225648 20 -606.678073483521 30 132.268789859729 11 767.82932233817 21 -584.301801471681 31 117.190255690543 12 753.739272918395 22 -589.30932977233 32 137.774660970991 13 753.739272918395 23 -589.30932977233 33 137.774660970991 70 1 0 3DFACE 8 leg_half 10 602.133267369982 20 -575.898750159264 30 185.30549023988 11 454.66772029492 21 -548.673192057237 31 186.220486963908 12 602.133251163261 22 -548.67314817835 32 186.220486963908 13 602.133251163261 23 -548.67314817835 33 186.220486963908 70 1 0 3DFACE 8 leg_half 10 454.66772029492 20 -548.673192057237 30 186.220486963908 11 602.133267369982 21 -575.898750159264 31 185.30549023988 12 454.667736501664 22 -575.898831573499 32 185.305488978394 13 454.667736501664 23 -575.898831573499 33 185.305488978394 70 1 0 3DFACE 8 leg_half 10 623.546333434853 20 -575.80035767001 30 184.343761377095 11 602.133251163261 21 -548.67314817835 31 186.220486963908 12 623.546317277054 22 -548.656939099171 32 185.255996085023 13 623.546317277054 23 -548.656939099171 33 185.255996085023 70 1 0 3DFACE 8 leg_half 10 602.133251163261 20 -548.67314817835 30 186.220486963908 11 623.546333434853 21 -575.80035767001 31 184.343761377095 12 602.133267369982 22 -575.898750159264 32 185.30549023988 13 602.133267369982 23 -575.898750159264 33 185.30549023988 70 1 0 3DFACE 8 leg_half 10 718.363106545679 20 -637.12298630735 30 112.809643814588 11 732.466062914084 21 -614.194966001222 31 108.540988733599 12 732.466065703719 22 -627.348021252322 32 99.9167335104564 13 732.466065703719 23 -627.348021252322 33 99.9167335104564 70 1 0 3DFACE 8 leg_half 10 732.466062914084 20 -614.194966001222 30 108.540988733599 11 718.363106545679 21 -637.12298630735 31 112.809643814588 12 718.363103364091 22 -622.121886696301 32 122.645633187677 13 718.363103364091 23 -622.121886696301 33 122.645633187677 70 1 0 3DFACE 8 leg_half 10 454.797676017751 20 -624.370524419528 30 177.173126470384 11 454.667748728094 21 -599.869484727166 31 181.183686716704 12 454.667758482489 22 -623.054883804802 32 173.83394276819 13 454.667758482489 23 -623.054883804802 33 173.83394276819 70 1 0 3DFACE 8 leg_half 10 454.667748728094 20 -599.869484727166 30 181.183686716704 11 454.797676017751 21 -624.370524419528 31 177.173126470384 12 454.797666066761 22 -600.71783565349 32 184.671000694682 13 454.797666066761 23 -600.71783565349 33 184.671000694682 70 1 0 3DFACE 8 leg_half 10 702.221351073972 20 -611.102282944468 30 143.497679575028 11 684.332877982946 21 -594.96003923808 31 161.00288323661 12 702.221343105619 22 -592.16215835415 32 149.501676557166 13 702.221343105619 23 -592.16215835415 33 149.501676557166 70 1 0 3DFACE 8 leg_half 10 684.332877982946 20 -594.96003923808 30 161.00288323661 11 702.221351073972 21 -611.102282944468 31 143.497679575028 12 684.332886599671 22 -615.441289762884 32 154.510351165083 13 684.332886599671 23 -615.441289762884 33 154.510351165083 70 1 0 3DFACE 8 leg_half 10 792.00720150166 20 -546.363038171439 30 48.7110294035543 11 787.130178451143 21 -564.415115565838 31 73.0471892828083 12 792.007210733943 22 -561.872310305502 32 48.1897945304127 13 792.007210733943 23 -561.872310305502 33 48.1897945304127 70 1 0 3DFACE 8 leg_half 10 787.130178451143 20 -564.415115565838 30 73.0471892828083 11 792.00720150166 21 -546.363038171439 31 48.7110294035543 12 787.130167954486 22 -546.781824001004 32 73.639808098986 13 787.130167954486 23 -546.781824001004 33 73.639808098986 70 1 0 3DFACE 8 leg_half 10 753.576412708658 20 -612.837280222141 30 63.214692839186 11 760.20182781144 21 -592.476194788978 31 53.921748202446 12 760.201828278129 22 -598.389085203732 32 48.7664978222319 13 760.201828278129 23 -598.389085203732 33 48.7664978222319 70 1 0 3DFACE 8 leg_half 10 760.20182781144 20 -592.476194788978 30 53.921748202446 11 753.576412708658 21 -612.837280222141 31 63.214692839186 12 753.576412075941 22 -604.820821451585 32 70.2039737536023 13 753.576412075941 23 -604.820821451585 33 70.2039737536023 70 1 0 3DFACE 8 leg_half 10 599.602098887118 20 -549.195708452133 30 217.326639240051 11 624.955290211342 21 -186.86272 31 215.762940693873 12 599.602098887118 22 -186.86272 32 217.326639240051 13 599.602098887118 23 -186.86272 33 217.326639240051 70 1 0 3DFACE 8 leg_half 10 624.955290211342 20 -186.86272 30 215.762940693873 11 599.602098887118 21 -549.195708452133 31 217.326639240051 12 624.955290211342 22 -549.169431970937 32 215.762940693873 13 624.955290211342 23 -549.169431970937 33 215.762940693873 70 1 0 3DFACE 8 leg_half 10 702.221333117862 20 -572.580560654599 30 152.868771861916 11 684.332852026746 21 -548.325028948197 31 165.499614915081 12 702.221318561055 22 -548.126641526877 32 153.690618001708 13 702.221318561055 23 -548.126641526877 33 153.690618001708 70 1 0 3DFACE 8 leg_half 10 684.332852026746 20 -548.325028948197 30 165.499614915081 11 702.221333117862 21 -572.580560654599 31 152.868771861916 12 684.332867182503 22 -573.785120021053 32 164.643953396873 13 684.332867182503 23 -573.785120021053 33 164.643953396873 70 1 0 3DFACE 8 leg_half 10 623.546366648706 20 -698.908941954744 30 115.155805645761 11 644.636259351108 21 -708.826870972768 31 93.0455572990973 12 623.546362358205 22 -712.173174760634 32 94.9262110334071 13 623.546362358205 23 -712.173174760634 33 94.9262110334071 70 1 0 3DFACE 8 leg_half 10 644.636259351108 20 -708.826870972768 30 93.0455572990973 11 623.546366648706 21 -698.908941954744 31 115.155805645761 12 644.636263548619 22 -695.850119169612 32 112.836707846937 13 644.636263548619 23 -695.850119169612 33 112.836707846937 70 1 0 3DFACE 8 leg_half 10 644.636263548619 20 -695.850119169612 30 112.836707846937 11 665.02138596315 21 -703.037584126794 31 89.7919287945006 12 644.636259351108 22 -708.826870972768 32 93.0455572990973 13 644.636259351108 23 -708.826870972768 33 93.0455572990973 70 1 0 3DFACE 8 leg_half 10 665.02138596315 20 -703.037584126794 30 89.7919287945006 11 644.636263548619 21 -695.850119169612 31 112.836707846937 12 665.021389999784 22 -690.558190885324 32 108.824546057595 13 665.021389999784 23 -690.558190885324 33 108.824546057595 70 1 0 3DFACE 8 leg_half 10 442.839434933817 20 -549.08536836124 30 210.755700449054 11 439.690564957562 21 -186.86272 31 212.46522637891 12 442.839434933817 22 -186.86272 32 210.755700449054 13 442.839434933817 23 -186.86272 33 210.755700449054 70 1 0 3DFACE 8 leg_half 10 439.690564957562 20 -186.86272 30 212.46522637891 11 442.839434933817 21 -549.08536836124 31 210.755700449054 12 439.690564957562 22 -549.114088023756 32 212.46522637891 13 439.690564957562 23 -549.114088023756 33 212.46522637891 70 1 0 3DFACE 8 leg_half 10 46.8683973136999 20 -280.294079999999 30 2499.20806403607 11 93.652471048303 21 -186.862719999999 31 2499.20806403607 12 46.8683973137003 22 -186.862719999999 32 2499.20806403607 13 46.8683973137003 23 -186.862719999999 33 2499.20806403607 70 1 0 3DFACE 8 leg_half 10 93.652471048303 20 -186.862719999999 30 2499.20806403607 11 46.8683973136999 21 -280.294079999999 31 2499.20806403607 12 93.6524710483026 22 -280.294079999999 32 2499.20806403607 13 93.6524710483026 23 -280.294079999999 33 2499.20806403607 70 1 0 3DFACE 8 leg_half 10 665.021389999784 20 -690.558190885324 30 108.824546057595 11 684.332892871929 21 -694.910065817882 31 85.2241968080869 12 665.02138596315 22 -703.037584126794 32 89.7919287945006 13 665.02138596315 23 -703.037584126794 33 89.7919287945006 70 1 0 3DFACE 8 leg_half 10 684.332892871929 20 -694.910065817882 30 85.2241968080869 11 665.021389999784 21 -690.558190885324 31 108.824546057595 12 684.332896682708 22 -683.128909470703 32 103.191916498769 13 684.332896682708 23 -683.128909470703 33 103.191916498769 70 1 0 3DFACE 8 leg_half 10 599.60214250095 20 -634.484214570593 30 202.842483429208 11 624.955341833487 21 -659.530197478533 31 189.207522894826 12 624.955333552396 22 -633.909652359165 32 201.384230256964 13 624.955333552396 23 -633.909652359165 33 201.384230256964 70 1 0 3DFACE 8 leg_half 10 624.955341833487 20 -659.530197478533 30 189.207522894826 11 599.60214250095 21 -634.484214570593 31 202.842483429208 12 599.602150844536 22 -660.298108897689 32 190.573882756048 13 599.602150844536 23 -660.298108897689 33 190.573882756048 70 1 0 3DFACE 8 leg_half 10 718.363090933403 20 -685.388881228845 30 39.1981879427727 11 732.466045885959 21 -671.734013479962 31 23.3578379683062 12 718.363082853901 22 -688.112661424818 32 23.3578379602634 13 718.363082853901 23 -688.112661424818 33 23.3578379602634 70 1 0 3DFACE 8 leg_half 10 732.466045885959 20 -671.734013479962 30 23.3578379683062 11 718.363090933403 21 -685.388881228845 31 39.1981879427727 12 732.466052014781 22 -669.667851071909 32 35.3737619083722 13 732.466052014781 23 -669.667851071909 33 35.3737619083722 70 1 0 3DFACE 8 leg_half 10 649.884083129639 20 -759.7055020414 30 23.3578379229566 11 624.955307916438 21 -764.38593632126 31 29.2895600085649 12 624.955304385432 22 -764.585289351978 32 23.3578379140486 13 624.955304385432 23 -764.585289351978 33 23.3578379140486 70 1 0 3DFACE 8 leg_half 10 624.955307916438 20 -764.38593632126 30 29.2895600085649 11 649.884083129639 21 -759.7055020414 31 23.3578379229566 12 649.884086364505 22 -759.522868440055 32 28.7920756889693 13 649.884086364505 23 -759.522868440055 33 28.7920756889693 70 1 0 3DFACE 8 leg_half 10 764.031420693374 20 -566.35608713258 30 43.4208517516957 11 764.975642457445 21 -559.332124908489 31 23.3578380033138 12 764.959283764737 22 -561.475402706277 32 23.3578380028359 13 764.959283764737 23 -561.475402706277 33 23.3578380028359 70 1 0 3DFACE 8 leg_half 10 764.975642457445 20 -559.332124908489 30 23.3578380033138 11 764.031420693374 21 -566.35608713258 31 43.4208517516957 12 764.0314182014 22 -561.470422367227 32 44.2609516834995 13 764.0314182014 23 -561.470422367227 33 44.2609516834995 70 1 0 3DFACE 8 leg_half 10 432.838949191021 20 -658.912362146436 30 188.108094342889 11 429.267763467221 21 -633.554254686993 31 200.482021877632 12 432.838940960221 22 -633.447412164356 32 200.210851816573 13 432.838940960221 23 -633.447412164356 33 200.210851816573 70 1 0 3DFACE 8 leg_half 10 429.267763467221 20 -633.554254686993 30 200.482021877632 11 432.838949191021 21 -658.912362146436 31 188.108094342889 12 429.267771709642 22 -659.055159092928 32 188.362176301584 13 429.267771709642 23 -659.055159092928 33 188.362176301584 70 1 0 3DFACE 8 leg_half 10 644.636215091063 20 -548.592598441069 30 181.426393854527 11 623.546317277054 21 -186.86272 31 185.255996085023 12 644.636215091063 22 -186.86272 32 181.426393854527 13 644.636215091063 23 -186.86272 33 181.426393854527 70 1 0 3DFACE 8 leg_half 10 623.546317277054 20 -186.86272 30 185.255996085023 11 644.636215091063 21 -548.592598441069 31 181.426393854527 12 623.546317277054 22 -548.656939099171 32 185.255996085023 13 623.546317277054 23 -548.656939099171 33 185.255996085023 70 1 0 3DFACE 8 leg_half 10 454.797683261242 20 -716.144716838612 30 97.1582932541697 11 454.667769896794 21 -699.679329838522 31 115.739912506852 12 454.667765582876 22 -713.015957461653 32 95.3999068495287 13 454.667765582876 23 -713.015957461653 33 95.3999068495287 70 1 0 3DFACE 8 leg_half 10 454.667769896794 20 -699.679329838522 30 115.739912506852 11 454.797683261242 21 -716.144716838612 31 97.1582932541697 12 454.797687662105 22 -702.539296405596 32 117.908241171874 13 454.797687662105 23 -702.539296405596 33 117.908241171874 70 1 0 3DFACE 8 leg_half 10 744.27505834726 20 -635.251254586263 30 66.8927096622113 11 753.576412708658 21 -612.837280222141 31 63.214692839186 12 753.576412075941 22 -619.82656113575 32 55.1982340679256 13 753.576412075941 23 -619.82656113575 33 55.1982340679256 70 1 0 3DFACE 8 leg_half 10 753.576412708658 20 -612.837280222141 30 63.214692839186 11 744.27505834726 21 -635.251254586263 31 66.8927096622113 12 744.275059137262 22 -626.524535798612 32 76.9019484142785 13 744.275059137262 23 -626.524535798612 33 76.9019484142785 70 1 0 3DFACE 8 leg_half 10 753.576402819491 20 -576.182653575586 30 83.8148703207571 11 760.201817040574 21 -563.621650860098 31 65.2904582517363 12 760.20182098394 22 -571.352859264312 32 63.961061339529 13 760.20182098394 23 -571.352859264312 33 63.961061339529 70 1 0 3DFACE 8 leg_half 10 760.201817040574 20 -563.621650860098 30 65.2904582517363 11 753.576402819491 21 -576.182653575586 31 83.8148703207571 12 753.576397473233 22 -565.700992480648 32 85.6172131326287 13 753.576397473233 23 -565.700992480648 33 85.6172131326287 70 1 0 3DFACE 8 leg_half 10 684.332896682708 20 -683.128909470703 30 103.191916498769 11 702.22135687427 21 -684.591375697813 31 79.4250100709702 12 684.332892871929 22 -694.910065817882 32 85.2241968080869 13 684.332892871929 23 -694.910065817882 33 85.2241968080869 70 1 0 3DFACE 8 leg_half 10 702.22135687427 20 -684.591375697813 30 79.4250100709702 11 684.332896682708 21 -683.128909470703 31 103.191916498769 12 702.221360398304 22 -673.696700650341 32 96.0407362022104 13 702.221360398304 23 -673.696700650341 33 96.0407362022104 70 1 0 3DFACE 8 leg_half 10 665.021379319153 20 -618.858911203396 30 163.184483899429 11 644.636242951136 21 -598.733544865996 31 176.514545976725 12 665.021370191738 22 -597.163793012617 32 170.061810578218 13 665.021370191738 23 -597.163793012617 33 170.061810578218 70 1 0 3DFACE 8 leg_half 10 644.636242951136 20 -598.733544865996 30 176.514545976725 11 665.021379319153 21 -618.858911203396 31 163.184483899429 12 644.636252442318 22 -621.293308682581 32 169.363127662308 13 644.636252442318 23 -621.293308682581 33 169.363127662308 70 1 0 3DFACE 8 leg_half 10 453.575535902759 20 -745.521819843274 30 27.3599383202345 11 454.431253196946 21 -737.764901599428 31 51.9397070211046 12 454.431240478811 22 -742.052468269584 32 27.0050383833634 13 454.431240478811 23 -742.052468269584 33 27.0050383833634 70 1 0 3DFACE 8 leg_half 10 454.431253196946 20 -737.764901599428 30 51.9397070211046 11 453.575535902759 21 -745.521819843274 31 27.3599383202345 12 453.575548860337 22 -741.153531203966 32 52.7640516820845 13 453.575548860337 23 -741.153531203966 33 52.7640516820845 70 1 0 3DFACE 8 leg_half 10 454.431275216977 20 -669.689208643299 30 155.763553572255 11 454.797683261242 21 -646.78088064753 31 166.522129452237 12 454.797687662105 22 -667.530828563864 32 152.916709017132 13 454.797687662105 23 -667.530828563864 33 152.916709017132 70 1 0 3DFACE 8 leg_half 10 454.797683261242 20 -646.78088064753 30 166.522129452237 11 454.431275216977 21 -669.689208643299 31 155.763553572255 12 454.431270729568 22 -648.531199395009 32 169.63653352158 13 454.431270729568 23 -648.531199395009 33 169.63653352158 70 1 0 3DFACE 8 leg_half 10 470.677463405893 20 -549.413334136112 30 230.27885636425 11 468.840126975903 21 -580.680624318909 31 232.050409880217 12 470.677481847252 22 -580.392895076207 32 229.237696767784 13 470.677481847252 23 -580.392895076207 33 229.237696767784 70 1 0 3DFACE 8 leg_half 10 468.840126975903 20 -580.680624318909 30 232.050409880217 11 470.677463405893 21 -549.413334136112 31 230.27885636425 12 468.840108391474 22 -549.460721801574 32 233.09964686487 13 468.840108391474 23 -549.460721801574 33 233.09964686487 70 1 0 3DFACE 8 leg_half 10 445.721690152324 20 -549.049610517709 30 208.627211339945 11 442.839434933817 21 -186.86272 31 210.755700449054 12 445.721690152324 22 -186.86272 32 208.627211339945 13 445.721690152324 23 -186.86272 33 208.627211339945 70 1 0 3DFACE 8 leg_half 10 442.839434933817 20 -186.86272 30 210.755700449054 11 445.721690152324 21 -549.049610517709 31 208.627211339945 12 442.839434933817 22 -549.08536836124 32 210.755700449054 13 442.839434933817 23 -549.08536836124 33 210.755700449054 70 1 0 3DFACE 8 leg_half 10 673.957368701467 20 -629.139245228331 30 189.276665394806 11 696.758800443365 21 -647.656853392997 31 168.080894990074 12 696.758793128571 22 -625.025897634329 32 178.836736613072 13 696.758793128571 23 -625.025897634329 33 178.836736613072 70 1 0 3DFACE 8 leg_half 10 696.758800443365 20 -647.656853392997 30 168.080894990074 11 673.957368701467 21 -629.139245228331 31 189.276665394806 12 673.957376463676 22 -653.154439951202 32 177.862934850716 13 673.957376463676 23 -653.154439951202 33 177.862934850716 70 1 0 3DFACE 8 leg_half 10 717.894045959123 20 -575.008661956696 30 176.604978855282 11 736.997677401125 21 -593.835505140242 31 156.380365045419 12 736.997666927312 22 -573.300963343833 32 159.911321013811 13 736.997666927312 23 -573.300963343833 33 159.911321013811 70 1 0 3DFACE 8 leg_half 10 736.997677401125 20 -593.835505140242 30 156.380365045419 11 717.894045959123 21 -575.008661956696 31 176.604978855282 12 717.894057585081 22 -597.802053886837 32 172.685609040578 13 717.894057585081 23 -597.802053886837 33 172.685609040578 70 1 0 3DFACE 8 leg_half 10 445.721707495526 20 -578.184382747044 30 207.648051313885 11 442.839434933817 21 -549.08536836124 31 210.755700449054 12 445.721690152324 22 -549.049610517709 32 208.627211339945 13 445.721690152324 23 -549.049610517709 33 208.627211339945 70 1 0 3DFACE 8 leg_half 10 442.839434933817 20 -549.08536836124 30 210.755700449054 11 445.721707495526 21 -578.184382747044 31 207.648051313885 12 442.839452384975 22 -578.401495960111 32 209.770445440443 13 442.839452384975 23 -578.401495960111 33 209.770445440443 70 1 0 3DFACE 8 leg_half 10 442.839452384975 20 -759.393032819931 30 28.7789085623947 11 445.72170439774 21 -757.445533046268 31 23.3578378593151 12 442.839449157947 22 -759.575223903305 32 23.3578378579396 13 442.839449157947 23 -759.575223903305 33 23.3578378579396 70 1 0 3DFACE 8 leg_half 10 445.72170439774 20 -757.445533046268 30 23.3578378593151 11 442.839452384975 21 -759.393032819931 31 28.7789085623947 12 445.721707495526 22 -757.270638693351 32 28.5617953495419 13 445.721707495526 23 -757.270638693351 33 28.5617953495419 70 1 0 3DFACE 8 leg_half 10 717.894044751764 20 -726.295731112839 30 23.3578379516926 11 696.758770484001 21 -740.277270942125 31 26.8233094768247 12 696.758768421093 22 -740.393738342711 32 23.357837941943 13 696.758768421093 23 -740.393738342711 33 23.357837941943 70 1 0 3DFACE 8 leg_half 10 696.758770484001 20 -740.277270942125 30 26.8233094768247 11 717.894044751764 21 -726.295731112839 31 23.3578379516926 12 717.894045959123 22 -726.227566234427 32 25.3860745623198 13 717.894045959123 23 -726.227566234427 33 25.3860745623198 70 1 0 3DFACE 8 leg_half 10 455.00604998394 20 -549.612103415805 30 242.110623248711 11 458.222214863865 21 -581.498326831209 31 240.043876806793 12 458.222195872847 22 -549.595394709904 32 241.116069017578 13 458.222195872847 23 -549.595394709904 33 241.116069017578 70 1 0 3DFACE 8 leg_half 10 458.222214863865 20 -581.498326831209 30 240.043876806793 11 455.00604998394 21 -549.612103415805 31 242.110623248711 12 455.006069025402 22 -581.599775817026 32 241.035583090668 13 455.006069025402 23 -581.599775817026 33 241.035583090668 70 1 0 3DFACE 8 leg_half 10 779.024163430099 20 -590.534326018981 30 91.2949066282494 11 767.829332959368 21 -612.755392432138 31 105.979521385129 12 779.024166993188 22 -601.558027793705 32 86.0556585976989 13 779.024166993188 23 -601.558027793705 33 86.0556585976989 70 1 0 3DFACE 8 leg_half 10 767.829332959368 20 -612.755392432138 30 105.979521385129 11 779.024163430099 21 -590.534326018981 31 91.2949066282494 12 767.829328484993 22 -598.912297398533 32 112.558745848353 13 767.829328484993 23 -598.912297398533 33 112.558745848353 70 1 0 3DFACE 8 leg_half 10 767.829328484993 20 -598.912297398533 30 112.558745848353 11 753.73928554472 21 -623.13454224489 31 124.447504114724 12 767.829332959368 22 -612.755392432138 32 105.979521385129 13 767.829332959368 23 -612.755392432138 33 105.979521385129 70 1 0 3DFACE 8 leg_half 10 753.73928554472 20 -623.13454224489 30 124.447504114724 11 767.829328484993 21 -598.912297398533 31 112.558745848353 12 753.739280225648 22 -606.678073483521 32 132.268789859729 13 753.739280225648 23 -606.678073483521 33 132.268789859729 70 1 0 3DFACE 8 leg_half 10 753.739280225648 20 -606.678073483521 30 132.268789859729 11 736.997691839832 21 -632.515984774395 31 141.140229605674 12 753.73928554472 22 -623.13454224489 32 124.447504114724 13 753.73928554472 23 -623.13454224489 33 124.447504114724 70 1 0 3DFACE 8 leg_half 10 736.997691839832 20 -632.515984774395 30 141.140229605674 11 753.739280225648 21 -606.678073483521 31 132.268789859729 12 736.997685757261 22 -613.69735635364 32 150.084181819366 13 736.997685757261 23 -613.69735635364 33 150.084181819366 70 1 0 3DFACE 8 leg_half 10 717.894066860413 20 -619.848757614325 30 165.696830164561 11 736.997691839832 21 -632.515984774395 31 141.140229605674 12 736.997685757261 22 -613.69735635364 32 150.084181819366 13 736.997685757261 23 -613.69735635364 33 150.084181819366 70 1 0 3DFACE 8 leg_half 10 736.997691839832 20 -632.515984774395 30 141.140229605674 11 717.894066860413 21 -619.848757614325 31 165.696830164561 12 717.894073612081 22 -640.737481474577 32 155.769021196026 13 717.894073612081 23 -640.737481474577 33 155.769021196026 70 1 0 3DFACE 8 leg_half 10 696.758793128571 20 -625.025897634329 30 178.836736613072 11 717.894073612081 21 -640.737481474577 31 155.769021196026 12 717.894066860413 22 -619.848757614325 32 165.696830164561 13 717.894066860413 23 -619.848757614325 33 165.696830164561 70 1 0 3DFACE 8 leg_half 10 717.894073612081 20 -640.737481474577 30 155.769021196026 11 696.758793128571 21 -625.025897634329 31 178.836736613072 12 696.758800443365 22 -647.656853392997 32 168.080894990074 13 696.758800443365 23 -647.656853392997 33 168.080894990074 70 1 0 3DFACE 8 leg_half 10 732.466066639417 20 -639.203194165743 30 89.5806067801329 11 744.27505834726 21 -616.515297047424 31 85.6286672029373 12 744.275059137262 22 -626.524535798612 32 76.9019484142785 13 744.275059137262 23 -626.524535798612 33 76.9019484142785 70 1 0 3DFACE 8 leg_half 10 744.27505834726 20 -616.515297047424 30 85.6286672029373 11 732.466066639417 21 -639.203194165743 31 89.5806067801329 12 732.466065703719 22 -627.348021252322 32 99.9167335104564 13 732.466065703719 23 -627.348021252322 33 99.9167335104564 70 1 0 3DFACE 8 leg_half 10 649.884100288402 20 -754.828812255533 30 56.0907148781112 11 624.955333552396 21 -751.006817642042 31 84.2870649622931 12 624.955322175969 22 -759.578730682939 32 57.2462284142879 13 624.955322175969 23 -759.578730682939 33 57.2462284142879 70 1 0 3DFACE 8 leg_half 10 624.955333552396 20 -751.006817642042 30 84.2870649622931 11 649.884100288402 21 -754.828812255533 31 56.0907148781112 12 649.884111397057 22 -746.458660352302 32 82.4950785735168 13 649.884111397057 23 -746.458660352302 33 82.4950785735168 70 1 0 3DFACE 8 leg_half 10 468.84015475682 20 -767.174448290109 30 90.6571807720069 11 466.630414711229 21 -778.937031754263 31 61.9555523461604 12 468.840142428527 22 -776.463572930403 32 61.353838580619 13 468.840142428527 23 -776.463572930403 33 61.353838580619 70 1 0 3DFACE 8 leg_half 10 466.630414711229 20 -778.937031754263 30 61.9555523461604 11 468.84015475682 21 -767.174448290109 31 90.6571807720069 12 466.630427178961 22 -769.542842319152 32 91.5903304644009 13 466.630427178961 23 -769.542842319152 33 91.5903304644009 70 1 0 3DFACE 8 leg_half 10 473.10170430358 20 -549.308104906071 30 224.014968929071 11 472.107168359226 21 -580.08201644067 31 226.198682483658 12 473.101722427237 22 -579.753960348852 32 222.99174608133 13 473.101722427237 23 -579.753960348852 33 222.99174608133 70 1 0 3DFACE 8 leg_half 10 472.107168359226 20 -580.08201644067 30 226.198682483658 11 473.10170430358 21 -549.308104906071 31 224.014968929071 12 472.107150072447 22 -549.362133988305 32 227.231114817978 13 472.107150072447 23 -549.362133988305 33 227.231114817978 70 1 0 3DFACE 8 leg_half 10 624.955333552396 20 -751.006817642042 30 84.2870649622931 11 599.602150844536 21 -740.196470143783 31 110.675521501907 12 599.60214250095 22 -752.465070814344 32 84.8616271735756 13 599.60214250095 23 -752.465070814344 33 84.8616271735756 70 1 0 3DFACE 8 leg_half 10 599.602150844536 20 -740.196470143783 30 110.675521501907 11 624.955333552396 21 -751.006817642042 31 84.2870649622931 12 624.955341833487 22 -738.830110282484 32 109.907610082888 13 624.955341833487 23 -738.830110282484 33 109.907610082888 70 1 0 3DFACE 8 leg_half 10 176.700983922341 20 -280.29408 30 1605.98522290042 11 180.160557528894 21 -186.86272 31 1570.85958260462 12 180.160557528893 22 -280.29408 32 1570.85958260462 13 180.160557528893 23 -280.29408 33 1570.85958260462 70 1 0 3DFACE 8 leg_half 10 180.160557528894 20 -186.86272 30 1570.85958260462 11 176.700983922341 21 -280.29408 31 1605.98522290042 12 176.700983922342 22 -186.86272 32 1605.98522290042 13 176.700983922342 23 -186.86272 33 1605.98522290042 70 1 0 3DFACE 8 leg_half 10 732.466052014781 20 -669.667851071909 30 35.3737619083722 11 744.275052115393 21 -648.23289118406 31 43.7940230954864 12 744.275046789786 22 -652.245630435845 32 31.1354921818382 13 744.275046789786 23 -652.245630435845 33 31.1354921818382 70 1 0 3DFACE 8 leg_half 10 744.275052115393 20 -648.23289118406 30 43.7940230954864 11 732.466052014781 21 -669.667851071909 31 35.3737619083722 12 732.466058322552 22 -664.91507027919 32 50.366817478493 13 732.466058322552 23 -664.91507027919 33 50.366817478493 70 1 0 3DFACE 8 leg_half 10 436.335587191701 20 -578.704166932226 30 212.72919754513 11 432.838897838644 21 -549.148351803013 31 214.504708726405 12 436.335569590044 22 -549.135217804424 32 213.722949367545 13 436.335569590044 23 -549.135217804424 33 213.722949367545 70 1 0 3DFACE 8 leg_half 10 432.838897838644 20 -549.148351803013 30 214.504708726405 11 436.335587191701 21 -578.704166932226 31 212.72919754513 12 432.838915479952 22 -578.783910422824 32 213.508718295381 13 432.838915479952 23 -578.783910422824 33 213.508718295381 70 1 0 3DFACE 8 leg_half 10 473.642065047928 20 -755.603683334388 30 86.0982896720056 11 473.10173725466 21 -767.61567851106 31 59.2014293241045 12 473.642053400866 22 -764.379514823734 32 58.4141748490874 13 473.642053400866 23 -764.379514823734 33 58.4141748490874 70 1 0 3DFACE 8 leg_half 10 473.10173725466 20 -767.61567851106 30 59.2014293241045 11 473.642065047928 21 -755.603683334388 31 86.0982896720056 12 473.101749084159 22 -758.702384848233 32 87.3191803898169 13 473.101749084159 23 -758.702384848233 33 87.3191803898169 70 1 0 3DFACE 8 leg_half 10 436.335620774804 20 -737.047580997407 30 108.905866027708 11 439.690607723364 21 -747.931486742049 31 83.0754516399063 12 436.335612575248 22 -749.104396759147 32 83.5375802413299 13 436.335612575248 23 -749.104396759147 33 83.5375802413299 70 1 0 3DFACE 8 leg_half 10 439.690607723364 20 -747.931486742049 30 83.0754516399063 11 436.335620774804 21 -737.047580997407 31 108.905866027708 12 439.690615872653 22 -735.948583762681 32 108.288220362449 13 439.690615872653 23 -735.948583762681 33 108.288220362449 70 1 0 3DFACE 8 leg_half 10 473.71772029492 20 -549.195745909472 30 217.326639240051 11 599.602116671527 21 -579.071662867255 31 216.322569598682 12 599.602098887118 22 -549.195708452133 32 217.326639240051 13 599.602098887118 23 -549.195708452133 33 217.326639240051 70 1 0 3DFACE 8 leg_half 10 599.602116671527 20 -579.071662867255 30 216.322569598682 11 473.71772029492 21 -549.195745909472 31 217.326639240051 12 473.717738079349 22 -579.071732366754 32 216.322568521811 13 473.717738079349 23 -579.071732366754 33 216.322568521811 70 1 0 3DFACE 8 leg_half 10 696.758768421093 20 -740.393738342711 30 23.357837941943 11 673.957344671825 21 -751.440053094339 31 27.9652257853831 12 673.957341929162 22 -751.594897963598 32 23.3578379323091 13 673.957341929162 23 -751.594897963598 33 23.3578379323091 70 1 0 3DFACE 8 leg_half 10 673.957344671825 20 -751.440053094339 30 27.9652257853831 11 696.758768421093 21 -740.393738342711 31 23.357837941943 12 696.758770484001 22 -740.277270942125 32 26.8233094768247 13 696.758770484001 23 -740.277270942125 33 26.8233094768247 70 1 0 3DFACE 8 leg_half 10 718.363107612844 20 -650.643847155672 30 101.021259768909 11 732.466065703719 21 -627.348021252322 31 99.9167335104564 12 732.466066639417 22 -639.203194165743 32 89.5806067801329 13 732.466066639417 23 -639.203194165743 33 89.5806067801329 70 1 0 3DFACE 8 leg_half 10 732.466065703719 20 -627.348021252322 30 99.9167335104564 11 718.363107612844 21 -650.643847155672 31 101.021259768909 12 718.363106545679 22 -637.12298630735 32 112.809643814588 13 718.363106545679 23 -637.12298630735 33 112.809643814588 70 1 0 3DFACE 8 leg_half 10 787.130182929858 20 -573.195904769668 30 71.5373148305873 11 779.024163430099 21 -590.534326018981 31 91.2949066282494 12 787.130186503031 22 -581.689044301674 32 68.844999694228 13 787.130186503031 23 -581.689044301674 33 68.844999694228 70 1 0 3DFACE 8 leg_half 10 779.024163430099 20 -590.534326018981 30 91.2949066282494 11 787.130182929858 21 -573.195904769668 31 71.5373148305873 12 779.024158535186 22 -578.899518233046 32 94.9831268667919 13 779.024158535186 23 -578.899518233046 33 94.9831268667919 70 1 0 3DFACE 8 leg_half 10 436.335612575248 20 -633.16016763801 30 199.481809374145 11 432.838929652884 21 -606.570796271198 31 208.73070710808 12 436.335601310833 22 -606.385574583813 32 207.969323546969 13 436.335601310833 23 -606.385574583813 33 207.969323546969 70 1 0 3DFACE 8 leg_half 10 432.838929652884 20 -606.570796271198 30 208.73070710808 11 436.335612575248 21 -633.16016763801 31 199.481809374145 12 432.838940960221 22 -633.447412164356 32 200.210851816573 13 432.838940960221 23 -633.447412164356 33 200.210851816573 70 1 0 3DFACE 8 leg_half 10 793.478047748674 20 -563.767069108265 30 23.3578380112902 11 792.007217306199 21 -577.494024343961 31 43.2377297488181 12 793.410423174187 22 -566.321374409616 32 23.357838010706 13 793.410423174187 23 -566.321374409616 33 23.357838010706 70 1 0 3DFACE 8 leg_half 10 792.007217306199 20 -577.494024343961 30 43.2377297488181 11 793.478047748674 21 -563.767069108265 31 23.3578380112902 12 792.007215701535 22 -572.529418663124 32 45.597263875134 13 792.007215701535 23 -572.529418663124 33 45.597263875134 70 1 0 3DFACE 8 leg_half 10 624.955333552396 20 -633.909652359165 30 201.384230256964 11 649.884119483233 21 -657.135168302204 31 184.945974477603 12 649.884111397057 22 -632.11766596993 32 196.836072967405 13 649.884111397057 23 -632.11766596993 33 196.836072967405 70 1 0 3DFACE 8 leg_half 10 649.884119483233 20 -657.135168302204 30 184.945974477603 11 624.955333552396 21 -633.909652359165 31 201.384230256964 12 624.955341833487 22 -659.530197478533 32 189.207522894826 13 624.955341833487 23 -659.530197478533 33 189.207522894826 70 1 0 3DFACE 8 leg_half 10 452.246977834961 20 -748.839872068014 30 27.6993612581553 11 453.575533520408 21 -745.656322242814 31 23.3578378643829 12 452.24697525056 22 -748.985781777358 32 23.3578378632311 13 452.24697525056 23 -748.985781777358 33 23.3578378632311 70 1 0 3DFACE 8 leg_half 10 453.575533520408 20 -745.656322242814 30 23.3578378643829 11 452.246977834961 21 -748.839872068014 31 27.6993612581553 12 453.575535902759 22 -745.521819843274 32 27.3599383202345 13 453.575535902759 23 -745.521819843274 33 27.3599383202345 70 1 0 3DFACE 8 leg_half 10 454.797653593913 20 -738.498463121584 30 26.6414790273437 11 454.667734764409 21 -735.026158016502 31 23.3578378670709 12 454.797651639243 22 -738.608819575715 32 23.3578378663214 13 454.797651639243 23 -738.608819575715 33 23.3578378663214 70 1 0 3DFACE 8 leg_half 10 454.667734764409 20 -735.026158016502 30 23.3578378670709 11 454.797653593913 21 -738.498463121584 31 26.6414790273437 12 454.667736501664 22 -734.928076357629 32 26.2762441782473 13 454.667736501664 23 -734.928076357629 33 26.2762441782473 70 1 0 3DFACE 8 leg_half 10 439.690596528004 20 -756.366969281262 30 56.4649968373303 11 442.839452384975 21 -759.393032819931 31 28.7789085623947 12 439.690582495428 22 -761.097663471809 32 28.9532865498045 13 439.690582495428 23 -761.097663471809 33 28.9532865498045 70 1 0 3DFACE 8 leg_half 10 442.839452384975 20 -759.393032819931 30 28.7789085623947 11 439.690596528004 21 -756.366969281262 31 56.4649968373303 12 442.839466299903 22 -754.702000509797 32 56.0599621810555 13 442.839466299903 23 -754.702000509797 33 56.0599621810555 70 1 0 3DFACE 8 leg_half 10 599.602155913773 20 -684.199422975673 30 174.902160191072 11 624.955348552338 21 -704.633972822346 31 155.011385430145 12 624.955346864755 22 -683.252487807443 32 173.653183437694 13 624.955346864755 23 -683.252487807443 33 173.653183437694 70 1 0 3DFACE 8 leg_half 10 624.955348552338 20 -704.633972822346 30 155.011385430145 11 599.602155913773 21 -684.199422975673 31 174.902160191072 12 599.602157614092 22 -705.742266508454 32 156.119679116142 13 599.602157614092 23 -705.742266508454 33 156.119679116142 70 1 0 3DFACE 8 leg_half 10 442.839490392048 20 -680.220295673638 30 169.6537686923 11 439.690615872653 21 -657.910807757804 31 186.325996375185 12 442.839485482368 22 -657.071290040049 32 184.832214227177 13 442.839485482368 23 -657.071290040049 33 184.832214227177 70 1 0 3DFACE 8 leg_half 10 439.690615872653 20 -657.910807757804 30 186.325996375185 11 442.839490392048 21 -680.220295673638 31 169.6537686923 12 439.690620823844 22 -681.255534297249 32 171.019219664594 13 439.690620823844 23 -681.255534297249 33 171.019219664594 70 1 0 3DFACE 8 leg_half 10 644.636259351108 20 -642.668144691721 30 159.204283586808 11 623.546355296361 21 -622.700434111963 31 172.934485818424 12 644.636252442318 22 -621.293308682581 32 169.363127662308 13 644.636252442318 23 -621.293308682581 33 169.363127662308 70 1 0 3DFACE 8 leg_half 10 623.546355296361 20 -622.700434111963 30 172.934485818424 11 644.636259351108 21 -642.668144691721 31 159.204283586808 12 623.546362358205 22 -644.548798426367 32 162.550587374486 13 623.546362358205 23 -644.548798426367 33 162.550587374486 70 1 0 3DFACE 8 leg_half 10 665.02138596315 20 -639.414516186541 30 153.414996741162 11 644.636252442318 21 -621.293308682581 31 169.363127662308 12 665.021379319153 22 -618.858911203396 32 163.184483899429 13 665.021379319153 23 -618.858911203396 33 163.184483899429 70 1 0 3DFACE 8 leg_half 10 644.636252442318 20 -621.293308682581 30 169.363127662308 11 665.02138596315 21 -639.414516186541 31 153.414996741162 12 644.636259351108 22 -642.668144691721 32 159.204283586808 13 644.636259351108 23 -642.668144691721 33 159.204283586808 70 1 0 3DFACE 8 leg_half 10 684.332892871929 20 -634.846784199308 30 145.28747843271 11 665.021379319153 21 -618.858911203396 31 163.184483899429 12 684.332886599671 22 -615.441289762884 32 154.510351165083 13 684.332886599671 23 -615.441289762884 33 154.510351165083 70 1 0 3DFACE 8 leg_half 10 665.021379319153 20 -618.858911203396 30 163.184483899429 11 684.332892871929 21 -634.846784199308 31 145.28747843271 12 665.02138596315 22 -639.414516186541 32 153.414996741162 13 665.02138596315 23 -639.414516186541 33 153.414996741162 70 1 0 3DFACE 8 leg_half 10 702.22135687427 20 -629.047597461153 30 134.968788313225 11 684.332886599671 21 -615.441289762884 31 154.510351165083 12 702.221351073972 22 -611.102282944468 32 143.497679575028 13 702.221351073972 23 -611.102282944468 33 143.497679575028 70 1 0 3DFACE 8 leg_half 10 684.332886599671 20 -615.441289762884 30 154.510351165083 11 702.22135687427 21 -629.047597461153 31 134.968788313225 12 684.332892871929 22 -634.846784199308 32 145.28747843271 13 684.332892871929 23 -634.846784199308 33 145.28747843271 70 1 0 3DFACE 8 leg_half 10 718.363103364091 20 -622.121886696301 30 122.645633187677 11 702.221351073972 21 -611.102282944468 31 143.497679575028 12 718.363098127435 22 -605.920400916633 32 130.345732863609 13 718.363098127435 23 -605.920400916633 33 130.345732863609 70 1 0 3DFACE 8 leg_half 10 702.221351073972 20 -611.102282944468 30 143.497679575028 11 718.363103364091 21 -622.121886696301 31 122.645633187677 12 702.22135687427 22 -629.047597461153 32 134.968788313225 13 702.22135687427 23 -629.047597461153 33 134.968788313225 70 1 0 3DFACE 8 leg_half 10 718.363103364091 20 -622.121886696301 30 122.645633187677 11 732.466058322552 21 -599.989404866694 31 115.292482897529 12 732.466062914084 22 -614.194966001222 32 108.540988733599 13 732.466062914084 23 -614.194966001222 33 108.540988733599 70 1 0 3DFACE 8 leg_half 10 732.466058322552 20 -599.989404866694 30 115.292482897529 11 718.363103364091 21 -622.121886696301 31 122.645633187677 12 718.363098127435 22 -605.920400916633 32 130.345732863609 13 718.363098127435 23 -605.920400916633 33 130.345732863609 70 1 0 3DFACE 8 leg_half 10 764.031425007948 20 -586.699189190326 30 30.0821938636906 11 764.696220629469 21 -572.980425379156 31 23.3578380002154 12 764.531578361879 22 -577.829946771796 32 23.3578379990944 13 764.531578361879 23 -577.829946771796 33 23.3578379990944 70 1 0 3DFACE 8 leg_half 10 764.696220629469 20 -572.980425379156 30 23.3578380002154 11 764.031425007948 21 -586.699189190326 31 30.0821938636906 12 764.031425302868 22 -583.441376980459 32 33.8187896004645 13 764.031425302868 23 -583.441376980459 33 33.8187896004645 70 1 0 3DFACE 8 leg_half 10 792.935095112731 20 -577.829952364284 30 23.3578380080173 11 792.007217306199 21 -592.860317128213 31 27.8714369630177 12 792.574093434967 22 -584.829110641297 32 23.3578380063606 13 792.574093434967 23 -584.829110641297 33 23.3578380063606 70 1 0 3DFACE 8 leg_half 10 792.007217306199 20 -592.860317128213 30 27.8714369630177 11 792.935095112731 21 -577.829952364284 31 23.3578380080173 12 792.007218281129 22 -589.846284379929 32 32.4682094668199 13 792.007218281129 23 -589.846284379929 33 32.4682094668199 70 1 0 3DFACE 8 leg_half 10 764.0314182014 20 -561.470422367227 30 44.2609516834995 11 764.995900047839 21 -545.937132023437 31 23.3578380793295 12 764.975642457445 22 -559.332124908489 32 23.3578380033138 13 764.975642457445 23 -559.332124908489 33 23.3578380033138 70 1 0 3DFACE 8 leg_half 10 764.995900047839 20 -545.937132023437 30 23.3578380793295 11 764.0314182014 21 -561.470422367227 31 44.2609516834995 12 764.031409168954 22 -546.296855411639 32 44.7709041931231 13 764.031409168954 23 -546.296855411639 33 44.7709041931231 70 1 0 3DFACE 8 leg_half 10 779.024140682123 20 -186.86272 30 97.713066817443 11 767.829301759449 21 -547.569288532173 31 120.514493197419 12 779.024140682123 22 -547.186238711366 32 97.7130668174428 13 779.024140682123 23 -547.186238711366 33 97.7130668174428 70 1 0 3DFACE 8 leg_half 10 767.829301759449 20 -547.569288532173 30 120.514493197419 11 779.024140682123 21 -186.86272 31 97.713066817443 12 767.829301759449 22 -186.86272 32 120.51449319742 13 767.829301759449 23 -186.86272 33 120.51449319742 70 1 0 3DFACE 8 leg_half 10 452.247013852634 20 -710.823016652003 30 124.188674487802 11 453.575572828439 21 -691.225448319662 31 141.602860928812 12 453.575571294939 22 -708.165176005556 32 122.173590554812 13 453.575571294939 23 -708.165176005556 33 122.173590554812 70 1 0 3DFACE 8 leg_half 10 453.575572828439 20 -691.225448319662 30 141.602860928812 11 452.247013852634 21 -710.823016652003 31 124.188674487802 12 452.247015413237 22 -693.583909707096 32 143.961322316008 13 452.247015413237 23 -693.583909707096 33 143.961322316008 70 1 0 3DFACE 8 leg_half 10 453.575571294939 20 -708.165176005556 30 122.173590554812 11 454.431276722139 21 -688.759443912117 31 139.136856521515 12 454.431275216977 22 -705.386140960936 32 120.066621251022 13 454.431275216977 23 -705.386140960936 33 120.066621251022 70 1 0 3DFACE 8 leg_half 10 454.431276722139 20 -688.759443912117 30 139.136856521515 11 453.575571294939 21 -708.165176005556 31 122.173590554812 12 453.575572828439 22 -691.225448319662 32 141.602860928812 13 453.575572828439 23 -691.225448319662 33 141.602860928812 70 1 0 3DFACE 8 leg_half 10 436.335601310833 20 -757.591910929275 30 56.7629871862785 11 439.690582495428 21 -761.097663471809 31 28.9532865498045 12 436.335587191701 22 -762.351784924648 32 29.0815795342117 13 436.335587191701 23 -762.351784924648 33 29.0815795342117 70 1 0 3DFACE 8 leg_half 10 439.690582495428 20 -761.097663471809 30 28.9532865498045 11 436.335601310833 21 -757.591910929275 31 56.7629871862785 12 439.690596528004 22 -756.366969281262 32 56.4649968373303 13 439.690596528004 23 -756.366969281262 33 56.4649968373303 70 1 0 3DFACE 8 leg_half 10 455.006112926336 20 -699.207898179883 30 194.697902416163 11 458.222260471925 21 -722.603322716877 31 172.980735322867 12 458.222258577851 22 -698.605625061081 32 193.903521183332 13 458.222258577851 23 -698.605625061081 33 193.903521183332 70 1 0 3DFACE 8 leg_half 10 458.222260471925 20 -722.603322716877 30 172.980735322867 11 455.006112926336 21 -699.207898179883 31 194.697902416163 12 455.006114828511 22 -723.308225016813 32 173.685637622731 13 455.006114828511 23 -723.308225016813 33 173.685637622731 70 1 0 3DFACE 8 leg_half 10 458.222258577851 20 -698.605625061081 30 193.903521183332 11 461.270001665299 21 -721.590015329221 31 171.967427935313 12 461.269999782869 22 -697.7398487668 32 192.761586394987 13 461.269999782869 23 -697.7398487668 33 192.761586394987 70 1 0 3DFACE 8 leg_half 10 461.270001665299 20 -721.590015329221 30 171.967427935313 11 458.222258577851 21 -698.605625061081 31 193.903521183332 12 458.222260471925 22 -722.603322716877 32 172.980735322867 13 458.222260471925 23 -722.603322716877 33 172.980735322867 70 1 0 3DFACE 8 leg_half 10 450.471087696265 20 -751.942885609203 30 28.0167869283821 11 452.24697525056 21 -748.985781777358 31 23.3578378632311 12 450.471084922909 22 -752.099463345238 32 23.3578378619863 13 450.471084922909 23 -752.099463345238 33 23.3578378619863 70 1 0 3DFACE 8 leg_half 10 452.24697525056 20 -748.985781777358 30 23.3578378632311 11 450.471087696265 21 -751.942885609203 31 28.0167869283821 12 452.246977834961 22 -748.839872068014 32 27.6993612581553 13 452.246977834961 23 -748.839872068014 33 27.6993612581553 70 1 0 3DFACE 8 leg_half 10 684.332877982946 20 -710.625470617764 30 45.3374518452758 11 696.283090443709 21 -706.400240289655 31 23.3578379492919 12 684.332867182503 22 -714.266540775895 32 24.1625326278822 13 684.332867182503 23 -714.266540775895 33 24.1625326278822 70 1 0 3DFACE 8 leg_half 10 696.283090443709 20 -706.400240289655 30 23.3578379492919 11 684.332877982946 21 -710.625470617764 31 45.3374518452758 12 702.221343105619 22 -699.12426393804 32 42.5395709625037 13 702.221343105619 23 -699.12426393804 33 42.5395709625037 70 13 0 3DFACE 8 leg_half 10 696.283090443709 20 -706.400240289655 30 23.3578379492919 11 702.221343105619 21 -699.12426393804 31 42.5395709625037 12 702.221333321817 22 -702.422601699266 32 23.3578379520354 13 702.221333321817 23 -702.422601699266 33 23.3578379520354 70 1 0 3DFACE 8 leg_half 10 732.466062914084 20 -614.194966001222 30 108.540988733599 11 744.275052115393 21 -593.416610482006 31 98.6103038030606 12 744.27505599199 22 -605.41026540619 32 92.9100649699753 13 744.27505599199 23 -605.41026540619 33 92.9100649699753 70 1 0 3DFACE 8 leg_half 10 744.275052115393 20 -593.416610482006 30 98.6103038030606 11 732.466062914084 21 -614.194966001222 31 108.540988733599 12 732.466058322552 22 -599.989404866694 32 115.292482897529 13 732.466058322552 23 -599.989404866694 33 115.292482897529 70 1 0 3DFACE 8 leg_half 10 744.27505599199 20 -605.41026540619 30 92.9100649699753 11 753.576407084801 21 -586.320946175488 31 80.6010436173693 12 753.576410189591 22 -595.926735646398 32 76.0356884766169 13 753.576410189591 23 -595.926735646398 33 76.0356884766169 70 1 0 3DFACE 8 leg_half 10 753.576407084801 20 -586.320946175488 30 80.6010436173693 11 744.27505599199 21 -605.41026540619 31 92.9100649699753 12 744.275052115393 22 -593.416610482006 32 98.6103038030606 13 744.275052115393 23 -593.416610482006 33 98.6103038030606 70 1 0 3DFACE 8 leg_half 10 753.576410189591 20 -595.926735646398 30 76.0356884766169 11 760.201824130007 21 -578.830801190005 31 61.5905626376661 12 760.201826420081 22 -585.915972100795 32 58.2231849183613 13 760.201826420081 23 -585.915972100795 33 58.2231849183613 70 1 0 3DFACE 8 leg_half 10 760.201824130007 20 -578.830801190005 30 61.5905626376661 11 753.576410189591 21 -595.926735646398 31 76.0356884766169 12 753.576407084801 22 -586.320946175488 32 80.6010436173693 13 753.576407084801 23 -586.320946175488 33 80.6010436173693 70 1 0 3DFACE 8 leg_half 10 760.201826420081 20 -585.915972100795 30 58.2231849183613 11 764.031422681501 21 -571.081702518113 31 41.9228372915384 12 764.031424128692 22 -575.559109938211 32 39.7948544698768 13 764.031424128692 23 -575.559109938211 33 39.7948544698768 70 1 0 3DFACE 8 leg_half 10 764.031422681501 20 -571.081702518113 30 41.9228372915384 11 760.201826420081 21 -585.915972100795 31 58.2231849183613 12 760.201824130007 22 -578.830801190005 32 61.5905626376661 13 760.201824130007 23 -578.830801190005 33 61.5905626376661 70 1 0 3DFACE 8 leg_half 10 764.031424128692 20 -575.559109938211 30 39.7948544698768 11 764.92809314571 21 -563.7670797619 31 23.357838002321 12 764.878707491771 22 -566.32138210224 32 23.3578380017417 13 764.878707491771 23 -566.32138210224 33 23.3578380017417 70 1 0 3DFACE 8 leg_half 10 764.92809314571 20 -563.7670797619 30 23.357838002321 11 764.031424128692 21 -575.559109938211 31 39.7948544698768 12 764.031422681501 22 -571.081702518113 32 41.9228372915384 13 764.031422681501 23 -571.081702518113 33 41.9228372915384 70 1 0 3DFACE 8 leg_half 10 792.007217306199 20 -577.494024343961 30 43.2377297488181 11 787.130190684252 21 -597.186922321698 31 60.1350749996264 12 792.007218281129 22 -582.09079684746 32 40.22369700007 13 792.007218281129 23 -582.09079684746 33 40.22369700007 70 1 0 3DFACE 8 leg_half 10 787.130190684252 20 -597.186922321698 30 60.1350749996264 11 792.007217306199 21 -577.494024343961 31 43.2377297488181 12 787.130189104003 22 -589.736090634929 32 65.0204702834338 13 787.130189104003 23 -589.736090634929 33 65.0204702834338 70 1 0 3DFACE 8 leg_half 10 787.130189104003 20 -589.736090634929 30 65.0204702834338 11 779.024169157982 21 -611.764971197169 31 79.3631234201936 12 787.130190684252 22 -597.186922321698 32 60.1350749996264 13 787.130190684252 23 -597.186922321698 33 60.1350749996264 70 1 0 3DFACE 8 leg_half 10 779.024169157982 20 -611.764971197169 30 79.3631234201936 11 787.130189104003 21 -589.736090634929 31 65.0204702834338 12 779.024166993188 22 -601.558027793705 32 86.0556585976989 13 779.024166993188 23 -601.558027793705 33 86.0556585976989 70 1 0 3DFACE 8 leg_half 10 779.024166993188 20 -601.558027793705 30 86.0556585976989 11 767.829335677824 21 -625.572837100386 31 97.5753208387769 12 779.024169157982 22 -611.764971197169 32 79.3631234201936 13 779.024169157982 23 -611.764971197169 33 79.3631234201936 70 1 0 3DFACE 8 leg_half 10 767.829335677824 20 -625.572837100386 30 97.5753208387769 11 779.024166993188 21 -601.558027793705 31 86.0556585976989 12 767.829332959368 22 -612.755392432138 32 105.979521385129 13 767.829332959368 23 -612.755392432138 33 105.979521385129 70 1 0 3DFACE 8 leg_half 10 767.829332959368 20 -612.755392432138 30 105.979521385129 11 753.73928877638 21 -638.371732863863 31 114.456713513376 12 767.829335677824 22 -625.572837100386 32 97.5753208387769 13 767.829335677824 23 -625.572837100386 33 97.5753208387769 70 1 0 3DFACE 8 leg_half 10 753.73928877638 20 -638.371732863863 30 114.456713513376 11 767.829332959368 21 -612.755392432138 31 105.979521385129 12 753.73928554472 22 -623.13454224489 32 124.447504114724 13 753.73928554472 23 -623.13454224489 33 124.447504114724 70 1 0 3DFACE 8 leg_half 10 644.636231054623 20 -575.409716284687 30 180.525125445771 11 623.546317277054 21 -548.656939099171 31 185.255996085023 12 644.636215091063 22 -548.592598441069 32 181.426393854527 13 644.636215091063 23 -548.592598441069 33 181.426393854527 70 1 0 3DFACE 8 leg_half 10 623.546317277054 20 -548.656939099171 30 185.255996085023 11 644.636231054623 21 -575.409716284687 31 180.525125445771 12 623.546333434853 22 -575.80035767001 32 184.343761377095 13 623.546333434853 23 -575.80035767001 33 184.343761377095 70 1 0 3DFACE 8 leg_half 10 665.021358751182 20 -574.733894284646 30 173.91867700208 11 644.636215091063 21 -548.592598441069 31 181.426393854527 12 665.021343123663 22 -548.481290386566 32 174.800973253262 13 665.021343123663 23 -548.481290386566 33 174.800973253262 70 1 0 3DFACE 8 leg_half 10 644.636215091063 20 -548.592598441069 30 181.426393854527 11 665.021358751182 21 -574.733894284646 31 173.91867700208 12 644.636231054623 22 -575.409716284687 32 180.525125445771 13 644.636231054623 23 -575.409716284687 33 180.525125445771 70 1 0 3DFACE 8 leg_half 10 472.107164131826 20 -776.05993979789 30 23.3578378634987 11 470.677481847252 21 -778.860284147472 31 30.7703076765303 12 470.677477434794 22 -779.109402076299 32 23.3578378623763 13 470.677477434794 23 -779.109402076299 33 23.3578378623763 70 1 0 3DFACE 8 leg_half 10 470.677481847252 20 -778.860284147472 30 30.7703076765303 11 472.107164131826 21 -776.05993979789 31 23.3578378634987 12 472.107168359226 22 -775.821269863314 32 30.4594290412997 13 472.107168359226 23 -775.821269863314 33 30.4594290412997 70 1 0 3DFACE 8 leg_half 10 429.267737950976 20 -763.421251234373 30 29.1909851596944 11 432.838912025282 21 -763.326348925263 31 23.3578378539704 12 429.267734478649 22 -763.617291372796 32 23.3578378527852 13 429.267734478649 23 -763.617291372796 33 23.3578378527852 70 1 0 3DFACE 8 leg_half 10 432.838912025282 20 -763.326348925263 30 23.3578378539704 11 429.267737950976 21 -763.421251234373 31 29.1909851596944 12 432.838915479952 22 -763.131305674907 32 29.1613230247316 13 432.838915479952 23 -763.131305674907 33 29.1613230247316 70 1 0 3DFACE 8 leg_half 10 453.575535902759 20 -745.521819843274 30 27.3599383202345 11 454.431238307724 21 -742.175043209088 31 23.3578378654204 12 453.575533520408 22 -745.656322242814 32 23.3578378643829 13 453.575533520408 23 -745.656322242814 33 23.3578378643829 70 1 0 3DFACE 8 leg_half 10 454.431238307724 20 -742.175043209088 30 23.3578378654204 11 453.575535902759 21 -745.521819843274 31 27.3599383202345 12 454.431240478811 22 -742.052468269584 32 27.0050383833634 13 454.431240478811 23 -742.052468269584 33 27.0050383833634 70 1 0 3DFACE 8 leg_half 10 793.160541596036 20 -572.980425388099 30 23.3578380091579 11 792.007218281129 21 -589.846284379929 31 32.4682094668199 12 792.935095112731 22 -577.829952364284 32 23.3578380080173 13 792.935095112731 23 -577.829952364284 33 23.3578380080173 70 1 0 3DFACE 8 leg_half 10 792.007218281129 20 -589.846284379929 30 32.4682094668199 11 793.160541596036 21 -572.980425388099 31 23.3578380091579 12 792.00721860814 22 -586.233981212786 32 36.6113938325108 13 792.00721860814 23 -586.233981212786 33 36.6113938325108 70 1 0 3DFACE 8 leg_half 10 466.630394345883 20 -784.472871509203 30 23.3578378599218 11 464.090746745054 21 -786.408777774662 31 31.5424891402109 12 464.090741872935 22 -786.683847141088 32 23.3578378586363 13 464.090741872935 23 -786.683847141088 33 23.3578378586363 70 1 0 3DFACE 8 leg_half 10 464.090746745054 20 -786.408777774662 30 31.5424891402109 11 466.630394345883 21 -784.472871509203 31 23.3578378599218 12 466.630399083827 22 -784.205377362117 32 31.3170895287116 13 466.630399083827 23 -784.205377362117 33 31.3170895287116 70 1 0 3DFACE 8 leg_half 10 696.283090443709 20 -706.400240289655 30 23.3578379492919 11 684.332866703488 21 -714.293584916115 31 23.3578379437967 12 684.332867182503 22 -714.266540775895 32 24.1625326278822 13 684.332867182503 23 -714.266540775895 33 24.1625326278822 70 0 0 3DFACE 8 leg_half 10 454.431240478811 20 -742.052468269584 30 27.0050383833634 11 454.797651639243 21 -738.608819575715 31 23.3578378663214 12 454.431238307724 22 -742.175043209088 32 23.3578378654204 13 454.431238307724 23 -742.175043209088 33 23.3578378654204 70 1 0 3DFACE 8 leg_half 10 454.797651639243 20 -738.608819575715 30 23.3578378663214 11 454.431240478811 21 -742.052468269584 31 27.0050383833634 12 454.797653593913 22 -738.498463121584 32 26.6414790273437 13 454.797653593913 23 -738.498463121584 33 26.6414790273437 70 1 0 3DFACE 8 leg_half 10 470.677477434794 20 -779.109402076299 30 23.3578378623763 11 468.840126975903 21 -781.672997259934 31 31.0580369189494 12 468.840122392167 22 -781.931785179335 32 23.3578378611765 13 468.840122392167 23 -781.931785179335 33 23.3578378611765 70 1 0 3DFACE 8 leg_half 10 468.840126975903 20 -781.672997259934 30 31.0580369189494 11 470.677477434794 21 -779.109402076299 31 23.3578378623763 12 470.677481847252 22 -778.860284147472 32 30.7703076765303 13 470.677481847252 23 -778.860284147472 33 30.7703076765303 70 1 0 3DFACE 8 leg_half 10 764.031425302868 20 -583.441376980459 30 33.8187896004645 11 764.805052044838 21 -569.303684335783 31 23.3578380010606 12 764.696220629469 22 -572.980425379156 32 23.3578380002154 13 764.696220629469 23 -572.980425379156 33 23.3578380002154 70 1 0 3DFACE 8 leg_half 10 764.805052044838 20 -569.303684335783 30 23.3578380010606 11 764.031425302868 21 -583.441376980459 31 33.8187896004645 12 764.031425007948 22 -579.704781244013 32 37.0766018107078 13 764.031425007948 23 -579.704781244013 33 37.0766018107078 70 1 0 3DFACE 8 leg_half 10 599.602113045565 20 -766.149870997149 30 23.3578379057383 11 473.717738079349 21 -765.945155901366 31 29.449144968378 12 473.717734453346 22 -766.149872257343 32 23.3578378661905 13 473.717734453346 23 -766.149872257343 33 23.3578378661905 70 1 0 3DFACE 8 leg_half 10 473.717738079349 20 -765.945155901366 30 29.449144968378 11 599.602113045565 21 -766.149870997149 31 23.3578379057383 12 599.602116671527 22 -765.945156978237 32 29.4490754688794 13 599.602116671527 23 -765.945156978237 33 29.4490754688794 70 1 0 3DFACE 8 leg_half 10 127.425692248039 20 -280.29408 30 1698.17280957558 11 100.141825844156 21 -186.862719999999 31 1720.56410006505 12 127.425692248039 22 -186.862719999999 32 1698.17280957558 13 127.425692248039 23 -186.862719999999 33 1698.17280957558 70 1 0 3DFACE 8 leg_half 10 100.141825844156 20 -186.862719999999 30 1720.56410006505 11 127.425692248039 21 -280.29408 31 1698.17280957558 12 100.141825844156 22 -280.29408 32 1720.56410006505 13 100.141825844156 23 -280.29408 33 1720.56410006505 70 1 0 3DFACE 8 leg_half 10 450.471124298894 20 -713.308606140826 30 126.073163560098 11 452.247015413237 21 -693.583909707096 31 143.961322316008 12 452.247013852634 22 -710.823016652003 32 124.188674487802 13 452.247013852634 23 -710.823016652003 33 124.188674487802 70 1 0 3DFACE 8 leg_half 10 452.247015413237 20 -693.583909707096 30 143.961322316008 11 450.471124298894 21 -713.308606140826 31 126.073163560098 12 450.471125884842 22 -695.789522350054 32 146.166934958744 13 450.471125884842 23 -695.789522350054 33 146.166934958744 70 1 0 3DFACE 8 leg_half 10 445.721745102502 20 -678.931345516719 30 167.953679054935 11 448.282012434797 21 -654.795098868987 31 180.78210913444 12 448.282017231929 22 -677.413444384727 32 165.951609244563 13 448.282017231929 23 -677.413444384727 33 165.951609244563 70 1 0 3DFACE 8 leg_half 10 448.282012434797 20 -654.795098868987 30 180.78210913444 11 445.721745102502 21 -678.931345516719 31 167.953679054935 12 445.721740244506 22 -656.026027291755 32 182.972342518915 13 445.721740244506 23 -656.026027291755 33 182.972342518915 70 1 0 3DFACE 8 leg_half 10 665.021343123663 20 -548.481290386566 30 174.800973253262 11 644.636215091063 21 -186.86272 31 181.426393854527 12 665.021343123663 22 -186.86272 32 174.800973253263 13 665.021343123663 23 -186.86272 33 174.800973253263 70 1 0 3DFACE 8 leg_half 10 644.636215091063 20 -186.86272 30 181.426393854527 11 665.021343123663 21 -548.481290386566 31 174.800973253262 12 644.636215091063 22 -548.592598441069 32 181.426393854527 13 644.636215091063 23 -548.592598441069 33 181.426393854527 70 1 0 3DFACE 8 leg_half 10 468.840108391474 20 -549.460721801574 30 233.09964686487 11 466.630399083827 21 -580.939676928926 31 234.582789982374 12 468.840126975903 22 -580.680624318909 32 232.050409880217 13 468.840126975903 23 -580.680624318909 33 232.050409880217 70 1 0 3DFACE 8 leg_half 10 466.630399083827 20 -580.939676928926 30 234.582789982374 11 468.840108391474 21 -549.460721801574 31 233.09964686487 12 466.630380370588 22 -549.503386674047 32 235.63929931572 13 466.630380370588 23 -549.503386674047 33 235.63929931572 70 1 0 3DFACE 8 leg_half 10 696.758754005207 20 -548.76324041817 30 191.585040951661 11 717.894045959123 21 -575.008661956696 31 176.604978855282 12 717.894030194972 22 -548.526532054241 32 177.494989005398 13 717.894030194972 23 -548.526532054241 33 177.494989005398 70 1 0 3DFACE 8 leg_half 10 717.894045959123 20 -575.008661956696 30 176.604978855282 11 696.758754005207 21 -548.76324041817 31 191.585040951661 12 696.758770484001 22 -576.445896872616 32 190.654683562835 13 696.758770484001 23 -576.445896872616 33 190.654683562835 70 1 0 3DFACE 8 leg_half 10 696.758770484001 20 -576.445896872616 30 190.654683562835 11 717.894057585081 21 -597.802053886837 31 172.685609040578 12 717.894045959123 22 -575.008661956696 32 176.604978855282 13 717.894045959123 23 -575.008661956696 33 176.604978855282 70 1 0 3DFACE 8 leg_half 10 717.894057585081 20 -597.802053886837 30 172.685609040578 11 696.758770484001 21 -576.445896872616 31 190.654683562835 12 696.758783079627 22 -601.140380260496 32 186.408417229293 13 696.758783079627 23 -601.140380260496 33 186.408417229293 70 1 0 3DFACE 8 leg_half 10 673.957344671825 20 -577.587813182298 30 201.817465714933 11 696.758783079627 21 -601.140380260496 31 186.408417229293 12 696.758770484001 22 -576.445896872616 32 190.654683562835 13 696.758770484001 23 -576.445896872616 33 190.654683562835 70 1 0 3DFACE 8 leg_half 10 696.758783079627 20 -601.140380260496 30 186.408417229293 11 673.957344671825 21 -577.587813182298 31 201.817465714933 12 673.957358037872 22 -603.792752711355 32 197.311473394829 13 673.957358037872 23 -603.792752711355 33 197.311473394829 70 1 0 3DFACE 8 leg_half 10 649.884086364505 20 -578.414663086699 30 209.900281060566 11 673.957358037872 21 -603.792752711355 31 197.311473394829 12 673.957344671825 22 -577.587813182298 32 201.817465714933 13 673.957344671825 23 -577.587813182298 33 201.817465714933 70 1 0 3DFACE 8 leg_half 10 673.957358037872 20 -603.792752711355 30 197.311473394829 11 649.884086364505 21 -578.414663086699 31 209.900281060566 12 649.884100288402 22 -605.713302275367 32 205.206224873295 13 649.884100288402 23 -605.713302275367 33 205.206224873295 70 1 0 3DFACE 8 leg_half 10 624.955307916438 20 -578.912147406784 30 214.763348941721 11 649.884100288402 21 -605.713302275367 31 205.206224873295 12 649.884086364505 22 -578.414663086699 32 209.900281060566 13 649.884086364505 23 -578.414663086699 33 209.900281060566 70 1 0 3DFACE 8 leg_half 10 649.884100288402 20 -605.713302275367 30 205.206224873295 11 624.955307916438 21 -578.912147406784 31 214.763348941721 12 624.955322175969 22 -606.868815812022 32 209.956143300585 13 624.955322175969 23 -606.868815812022 33 209.956143300585 70 1 0 3DFACE 8 leg_half 10 764.031422681501 20 -571.081702518113 30 41.9228372915384 11 764.959283764737 21 -561.475402706277 31 23.3578380028359 12 764.92809314571 22 -563.7670797619 32 23.357838002321 13 764.92809314571 23 -563.7670797619 33 23.357838002321 70 1 0 3DFACE 8 leg_half 10 764.959283764737 20 -561.475402706277 30 23.3578380028359 11 764.031422681501 21 -571.081702518113 31 41.9228372915384 12 764.031420693374 22 -566.35608713258 32 43.4208517516957 13 764.031420693374 23 -566.35608713258 33 43.4208517516957 70 1 0 3DFACE 8 leg_half 10 684.332897960916 20 -669.009252539392 30 119.38666515078 11 665.021389999784 21 -658.447133448378 31 140.935603497775 12 684.332896682708 22 -652.814503888805 32 133.506322083721 13 684.332896682708 23 -652.814503888805 33 133.506322083721 70 1 0 3DFACE 8 leg_half 10 665.021389999784 20 -658.447133448378 30 140.935603497775 11 684.332897960916 21 -669.009252539392 31 119.38666515078 12 665.021391353748 22 -675.601700530057 32 125.979113140781 13 665.021391353748 23 -675.601700530057 33 125.979113140781 70 1 0 3DFACE 8 leg_half 10 696.758754005207 20 -548.76324041817 30 191.585040951661 11 717.894030194972 21 -186.86272 31 177.494989005399 12 696.758754005207 22 -186.86272 32 191.585040951661 13 696.758754005207 23 -186.86272 33 191.585040951661 70 1 0 3DFACE 8 leg_half 10 717.894030194972 20 -186.86272 30 177.494989005399 11 696.758754005207 21 -548.76324041817 31 191.585040951661 12 717.894030194972 22 -548.526532054241 32 177.494989005398 13 717.894030194972 23 -548.526532054241 33 177.494989005398 70 1 0 3DFACE 8 leg_half 10 753.576407084801 20 -586.320946175488 30 80.6010436173693 11 760.20182098394 21 -571.352859264312 31 63.961061339529 12 760.201824130007 22 -578.830801190005 32 61.5905626376661 13 760.201824130007 23 -578.830801190005 33 61.5905626376661 70 1 0 3DFACE 8 leg_half 10 760.20182098394 20 -571.352859264312 30 63.961061339529 11 753.576407084801 21 -586.320946175488 31 80.6010436173693 12 753.576402819491 22 -576.182653575586 32 83.8148703207571 13 753.576402819491 23 -576.182653575586 33 83.8148703207571 70 1 0 3DFACE 8 leg_half 10 684.332886599671 20 -615.441289762884 30 154.510351165083 11 665.021370191738 21 -597.163793012617 31 170.061810578218 12 684.332877982946 22 -594.96003923808 32 161.00288323661 13 684.332877982946 23 -594.96003923808 33 161.00288323661 70 1 0 3DFACE 8 leg_half 10 665.021370191738 20 -597.163793012617 30 170.061810578218 11 684.332886599671 21 -615.441289762884 31 154.510351165083 12 665.021379319153 22 -618.858911203396 32 163.184483899429 13 665.021379319153 23 -618.858911203396 33 163.184483899429 70 1 0 3DFACE 8 leg_half 10 624.955322175969 20 -606.868815812022 30 209.956143300585 11 649.884111397057 21 -632.11766596993 31 196.836072967405 12 649.884100288402 22 -605.713302275367 32 205.206224873295 13 649.884100288402 23 -605.713302275367 33 205.206224873295 70 1 0 3DFACE 8 leg_half 10 649.884111397057 20 -632.11766596993 30 196.836072967405 11 624.955322175969 21 -606.868815812022 31 209.956143300585 12 624.955333552396 22 -633.909652359165 32 201.384230256964 13 624.955333552396 23 -633.909652359165 33 201.384230256964 70 1 0 3DFACE 8 leg_half 10 436.335587191701 20 -762.351784924648 30 29.0815795342117 11 439.690579164597 21 -761.285715042239 31 23.357837856573 12 436.335583784501 22 -762.544148159569 32 23.3578378552417 13 436.335583784501 23 -762.544148159569 33 23.3578378552417 70 1 0 3DFACE 8 leg_half 10 439.690579164597 20 -761.285715042239 30 23.357837856573 11 436.335587191701 21 -762.351784924648 31 29.0815795342117 12 439.690582495428 22 -761.097663471809 32 28.9532865498045 13 439.690582495428 23 -761.097663471809 33 28.9532865498045 70 1 0 3DFACE 8 leg_half 10 473.717734453346 20 -766.149872257343 30 23.3578378661905 11 473.642038802113 21 -769.301079755069 31 29.7924413152051 12 473.642034971754 22 -769.517333598178 32 23.3578378654237 13 473.642034971754 23 -769.517333598178 33 23.3578378654237 70 1 0 3DFACE 8 leg_half 10 473.642038802113 20 -769.301079755069 30 29.7924413152051 11 473.717734453346 21 -766.149872257343 31 23.3578378661905 12 473.717738079349 22 -765.945155901366 32 29.449144968378 13 473.717738079349 23 -765.945155901366 33 29.449144968378 70 1 0 3DFACE 8 leg_half 10 665.021358751182 20 -723.541264381198 30 25.1113068905408 11 684.332866703488 21 -714.293584916115 31 23.3578379437967 12 665.021357707386 22 -723.600194881456 32 23.3578379356765 13 665.021357707386 23 -723.600194881456 33 23.3578379356765 70 1 0 3DFACE 8 leg_half 10 684.332866703488 20 -714.293584916115 30 23.3578379437967 11 665.021358751182 21 -723.541264381198 31 25.1113068905408 12 684.332867182503 22 -714.266540775895 32 24.1625326278822 13 684.332867182503 23 -714.266540775895 33 24.1625326278822 70 1 0 3DFACE 8 leg_half 10 644.636231054623 20 -730.147712824956 30 25.7871288899166 11 665.021357707386 21 -723.600194881456 31 23.3578379356765 12 644.636229608527 22 -730.229356318714 32 23.35783792781 13 644.636229608527 23 -730.229356318714 33 23.35783792781 70 1 0 3DFACE 8 leg_half 10 665.021357707386 20 -723.600194881456 30 23.3578379356765 11 644.636231054623 21 -730.147712824956 31 25.7871288899166 12 665.021358751182 22 -723.541264381198 32 25.1113068905408 13 665.021358751182 23 -723.541264381198 33 25.1113068905408 70 1 0 3DFACE 8 leg_half 10 602.133267369982 20 -734.928077619115 30 26.2761627640122 11 623.546331756218 21 -734.061120907196 31 23.3578379203391 12 602.133265632776 22 -735.026156540265 32 23.357837913399 13 602.133265632776 23 -735.026156540265 33 23.357837913399 70 1 0 3DFACE 8 leg_half 10 623.546331756218 20 -734.061120907196 30 23.3578379203391 11 602.133267369982 21 -734.928077619115 31 26.2761627640122 12 623.546333434853 22 -733.96634875632 32 26.1777702748551 13 623.546333434853 23 -733.96634875632 33 26.1777702748551 70 1 0 3DFACE 8 leg_half 10 736.997666736503 20 -709.544681018119 30 23.3578379613892 11 717.894045959123 21 -726.227566234427 31 25.3860745623198 12 717.894044751764 22 -726.295731112839 32 23.3578379516926 13 717.894044751764 23 -726.295731112839 33 23.3578379516926 70 1 0 3DFACE 8 leg_half 10 717.894045959123 20 -726.227566234427 30 25.3860745623198 11 736.997666736503 21 -709.544681018119 31 23.3578379613892 12 736.997666927312 22 -709.533908392784 32 23.6783759511398 13 736.997666927312 23 -709.533908392784 33 23.6783759511398 70 1 0 3DFACE 8 leg_half 10 753.576402819491 20 -633.437457700021 30 26.5600661905556 11 757.969157364208 21 -620.27407578666 31 23.3578379876696 12 753.576401186168 22 -633.988087312601 32 23.3578379832645 13 753.576401186168 23 -633.988087312601 33 23.3578379832645 70 0 0 3DFACE 8 leg_half 10 473.101718395121 20 -772.841978102158 30 23.3578378645206 11 472.107168359226 21 -775.821269863314 31 30.4594290412997 12 472.107164131826 22 -776.05993979789 32 23.3578378634987 13 472.107164131826 23 -776.05993979789 33 23.3578378634987 70 1 0 3DFACE 8 leg_half 10 472.107168359226 20 -775.821269863314 30 30.4594290412997 11 473.101718395121 21 -772.841978102158 31 23.3578378645206 12 473.101722427237 22 -772.614333460954 32 30.1313729498036 13 473.101722427237 23 -772.614333460954 33 30.1313729498036 70 1 0 3DFACE 8 leg_half 10 673.957341929162 20 -751.594897963598 30 23.3578379323091 11 649.884086364505 21 -759.522868440055 31 28.7920756889693 12 649.884083129639 22 -759.7055020414 32 23.3578379229566 13 649.884083129639 23 -759.7055020414 33 23.3578379229566 70 1 0 3DFACE 8 leg_half 10 649.884086364505 20 -759.522868440055 30 28.7920756889693 11 673.957341929162 21 -751.594897963598 31 23.3578379323091 12 673.957344671825 22 -751.440053094339 32 27.9652257853831 13 673.957344671825 23 -751.440053094339 33 27.9652257853831 70 1 0 3DFACE 8 leg_half 10 451.683295385243 20 -791.4884708222 30 23.3578378536789 11 448.317739367628 21 -791.272422434329 31 32.0400273988949 12 448.317734199337 22 -791.564213042815 32 23.3578378526045 13 448.317734199337 23 -791.564213042815 33 23.3578378526045 70 1 0 3DFACE 8 leg_half 10 448.317739367628 20 -791.272422434329 30 32.0400273988949 11 451.683295385243 21 -791.4884708222 31 23.3578378536789 12 451.683300548936 22 -791.196939781596 32 32.0323039932388 13 451.683300548936 23 -791.196939781596 33 32.0323039932388 70 1 0 3DFACE 8 leg_half 10 736.997666927312 20 -709.533908392784 30 23.6783759511398 11 736.997666736503 21 -709.544681018119 31 23.3578379613892 12 739.751559375878 22 -706.400475394532 32 23.357837962948 13 739.751559375878 23 -706.400475394532 33 23.357837962948 70 0 0 3DFACE 8 leg_half 10 623.546333434853 20 -733.96634875632 30 26.1777702748551 11 644.636229608527 21 -730.229356318714 31 23.35783792781 12 623.546331756218 22 -734.061120907196 32 23.3578379203391 13 623.546331756218 23 -734.061120907196 33 23.3578379203391 70 1 0 3DFACE 8 leg_half 10 644.636229608527 20 -730.229356318714 30 23.35783792781 11 623.546333434853 21 -733.96634875632 31 26.1777702748551 12 644.636231054623 22 -730.147712824956 32 25.7871288899166 13 644.636231054623 23 -730.147712824956 33 25.7871288899166 70 1 0 3DFACE 8 leg_half 10 473.717752446486 20 -607.239369239249 30 211.479086426299 11 473.642065047928 21 -635.720877069339 31 205.981095949127 12 473.717763908762 22 -634.484263142475 32 202.842487443351 13 473.717763908762 23 -634.484263142475 33 202.842487443351 70 1 0 3DFACE 8 leg_half 10 473.642065047928 20 -635.720877069339 30 205.981095949127 11 473.717752446486 21 -607.239369239249 31 211.479086426299 12 473.642053400866 22 -608.036762247305 32 214.756927441262 13 473.642053400866 23 -608.036762247305 33 214.756927441262 70 1 0 3DFACE 8 leg_half 10 451.683338867278 20 -672.734452813075 30 212.702239692806 11 455.006112926336 21 -699.207898179883 31 194.697902416163 12 455.006107255299 22 -672.469112270075 32 212.230111445991 13 455.006107255299 23 -672.469112270075 33 212.230111445991 70 1 0 3DFACE 8 leg_half 10 455.006112926336 20 -699.207898179883 30 194.697902416163 11 451.683338867278 21 -672.734452813075 31 212.702239692806 12 451.683344551435 22 -699.535098538027 32 195.129470137406 13 451.683344551435 23 -699.535098538027 33 195.129470137406 70 1 0 3DFACE 8 leg_half 10 448.31777769836 20 -672.771628457813 30 212.76838602076 11 451.683344551435 21 -699.535098538027 31 195.129470137406 12 451.683338867278 22 -672.734452813075 32 212.702239692806 13 451.683338867278 23 -672.734452813075 33 212.702239692806 70 1 0 3DFACE 8 leg_half 10 451.683344551435 20 -699.535098538027 30 195.129470137406 11 448.31777769836 21 -672.771628457813 31 212.76838602076 12 448.317783384355 22 -699.580940660874 32 195.189933989489 13 448.317783384355 23 -699.580940660874 33 195.189933989489 70 1 0 3DFACE 8 leg_half 10 439.690622484567 20 -702.296711761968 30 152.674124370004 11 442.839490392048 21 -719.276356082042 31 130.597708279963 12 439.690620823844 22 -720.64180705444 32 131.632946903436 13 439.690620823844 23 -720.64180705444 33 131.632946903436 70 1 0 3DFACE 8 leg_half 10 442.839490392048 20 -719.276356082042 30 130.597708279963 11 439.690622484567 21 -702.296711761968 31 152.674124370004 12 442.839492038848 22 -701.085065061495 32 151.462477669651 13 442.839492038848 23 -701.085065061495 33 151.462477669651 70 1 0 3DFACE 8 leg_half 10 442.839492038848 20 -701.085065061495 30 151.462477669651 11 445.721745102502 21 -717.576266444547 31 129.308758123214 12 442.839490392048 22 -719.276356082042 32 130.597708279963 13 442.839490392048 23 -719.276356082042 33 130.597708279963 70 1 0 3DFACE 8 leg_half 10 445.721745102502 20 -717.576266444547 30 129.308758123214 11 442.839492038848 21 -701.085065061495 31 151.462477669651 12 445.721746731967 22 -699.576473436421 32 149.95388604473 13 445.721746731967 23 -699.576473436421 33 149.95388604473 70 1 0 3DFACE 8 leg_half 10 432.838955869068 20 -703.742219504346 30 154.119632112235 11 436.335625756533 21 -721.646389233184 31 132.394587199654 12 432.838954191733 22 -722.270804730449 32 132.867998161508 13 432.838954191733 23 -722.270804730449 33 132.867998161508 70 1 0 3DFACE 8 leg_half 10 436.335625756533 20 -721.646389233184 30 132.394587199654 11 432.838955869068 21 -703.742219504346 31 154.119632112235 12 436.335627427501 22 -703.188137968552 32 153.565550576497 13 436.335627427501 23 -703.188137968552 33 153.565550576497 70 1 0 3DFACE 8 leg_half 10 623.546368087822 20 -683.011825308716 30 133.389237918693 11 644.636263548619 21 -695.850119169612 31 112.836707846937 12 623.546366648706 22 -698.908941954744 32 115.155805645761 13 623.546366648706 23 -698.908941954744 33 115.155805645761 70 1 0 3DFACE 8 leg_half 10 644.636263548619 20 -695.850119169612 30 112.836707846937 11 623.546368087822 21 -683.011825308716 31 133.389237918693 12 644.636264956545 22 -680.297547066858 32 130.674959677109 13 644.636264956545 23 -680.297547066858 33 130.674959677109 70 1 0 3DFACE 8 leg_half 10 458.222195872847 20 -549.595394709904 30 241.116069017578 11 461.269956337624 21 -581.352493258009 31 238.618284093782 12 461.269937419119 22 -549.571376162653 32 239.686382351024 13 461.269937419119 23 -549.571376162653 33 239.686382351024 70 1 0 3DFACE 8 leg_half 10 461.269956337624 20 -581.352493258009 30 238.618284093782 11 458.222195872847 21 -549.595394709904 31 241.116069017578 12 458.222214863865 22 -581.498326831209 32 240.043876806793 13 458.222214863865 23 -581.498326831209 33 240.043876806793 70 1 0 3DFACE 8 leg_half 10 35.243015227678 20 -186.862719999999 30 2079.8653122236 11 0.112465277083137 21 -280.294079999999 31 2083.32536938894 12 0.112465277083556 22 -186.862719999999 32 2083.32536938894 13 0.112465277083556 23 -186.862719999999 33 2083.32536938894 70 1 0 3DFACE 8 leg_half 10 0.112465277083137 20 -280.294079999999 30 2083.32536938894 11 35.243015227678 21 -186.862719999999 31 2079.8653122236 12 35.2430152276776 22 -280.294079999999 32 2079.8653122236 13 35.2430152276776 23 -280.294079999999 33 2079.8653122236 70 1 0 3DFACE 8 leg_half 10 69.0235178451101 20 -280.294079999999 30 2069.61810878401 11 35.243015227678 21 -186.862719999999 31 2079.8653122236 12 69.0235178451106 22 -186.862719999999 32 2069.61810878401 13 69.0235178451106 23 -186.862719999999 33 2069.61810878401 70 1 0 3DFACE 8 leg_half 10 35.243015227678 20 -186.862719999999 30 2079.8653122236 11 69.0235178451101 21 -280.294079999999 31 2069.61810878401 12 35.2430152276776 22 -280.294079999999 32 2079.8653122236 13 35.2430152276776 23 -280.294079999999 33 2079.8653122236 70 1 0 3DFACE 8 leg_half 10 221.739809665471 20 -186.86272 30 1435.59863370269 11 93.5308854426706 21 -280.294079999998 31 1315.22236639941 12 93.530885442671 22 -186.862719999998 32 1315.22236639941 13 93.530885442671 23 -186.862719999998 33 1315.22236639941 70 1 0 3DFACE 8 leg_half 10 93.5308854426706 20 -280.294079999998 30 1315.22236639941 11 221.739809665471 21 -186.86272 31 1435.59863370269 12 221.73980966547 22 -280.29408 32 1435.59863370269 13 221.73980966547 23 -280.29408 33 1435.59863370269 70 1 0 3DFACE 8 leg_half 10 684.332867182503 20 -573.785120021053 30 164.643953396873 11 665.021343123663 21 -548.481290386566 31 174.800973253262 12 684.332852026746 22 -548.325028948197 32 165.499614915081 13 684.332852026746 23 -548.325028948197 33 165.499614915081 70 1 0 3DFACE 8 leg_half 10 665.021343123663 20 -548.481290386566 30 174.800973253262 11 684.332867182503 21 -573.785120021053 31 164.643953396873 12 665.021358751182 22 -574.733894284646 32 173.91867700208 13 665.021358751182 23 -574.733894284646 33 173.91867700208 70 1 0 3DFACE 8 leg_half 10 454.431275216977 20 -705.386140960936 30 120.066621251022 11 454.797689138238 21 -686.233268095701 31 136.610680705353 12 454.797687662105 22 -702.539296405596 32 117.908241171874 13 454.797687662105 23 -702.539296405596 33 117.908241171874 70 1 0 3DFACE 8 leg_half 10 454.797689138238 20 -686.233268095701 30 136.610680705353 11 454.431275216977 21 -705.386140960936 31 120.066621251022 12 454.431276722139 22 -688.759443912117 32 139.136856521515 13 454.431276722139 23 -688.759443912117 33 139.136856521515 70 1 0 3DFACE 8 leg_half 10 602.133302212101 20 -683.695422993079 30 134.072835602987 11 623.546366648706 21 -698.908941954744 31 115.155805645761 12 602.13330076513 22 -699.679312774979 32 115.739877602763 13 602.13330076513 23 -699.679312774979 33 115.739877602763 70 1 0 3DFACE 8 leg_half 10 623.546366648706 20 -698.908941954744 30 115.155805645761 11 602.133302212101 21 -683.695422993079 31 134.072835602987 12 623.546368087822 22 -683.011825308716 32 133.389237918693 13 623.546368087822 23 -683.011825308716 33 133.389237918693 70 1 0 3DFACE 8 leg_half 10 448.281993692064 20 -604.584376828467 30 200.565167970899 11 445.721707495526 21 -578.184382747044 31 207.648051313885 12 448.281980096118 22 -577.92870502396 32 205.148664616833 13 448.281980096118 23 -577.92870502396 33 205.148664616833 70 1 0 3DFACE 8 leg_half 10 445.721707495526 20 -578.184382747044 30 207.648051313885 11 448.281993692064 21 -604.584376828467 31 200.565167970899 12 445.721721263973 22 -605.178251275471 32 203.006401057676 13 445.721721263973 23 -605.178251275471 33 203.006401057676 70 1 0 3DFACE 8 leg_half 10 599.602131038669 20 -607.239310377804 30 211.479085673936 11 624.955333552396 21 -633.909652359165 31 201.384230256964 12 624.955322175969 22 -606.868815812022 32 209.956143300585 13 624.955322175969 23 -606.868815812022 33 209.956143300585 70 1 0 3DFACE 8 leg_half 10 624.955333552396 20 -633.909652359165 30 201.384230256964 11 599.602131038669 21 -607.239310377804 31 211.479085673936 12 599.60214250095 22 -634.484214570593 32 202.842483429208 13 599.60214250095 23 -634.484214570593 33 202.842483429208 70 1 0 3DFACE 8 leg_half 10 792.007215701535 20 -572.529418663124 30 45.597263875134 11 787.130189104003 21 -589.736090634929 31 65.0204702834338 12 792.007217306199 22 -577.494024343961 32 43.2377297488181 13 792.007217306199 23 -577.494024343961 33 43.2377297488181 70 1 0 3DFACE 8 leg_half 10 787.130189104003 20 -589.736090634929 30 65.0204702834338 11 792.007215701535 21 -572.529418663124 31 45.597263875134 12 787.130186503031 22 -581.689044301674 32 68.844999694228 13 787.130186503031 23 -581.689044301674 33 68.844999694228 70 1 0 3DFACE 8 leg_half 10 787.130186503031 20 -581.689044301674 30 68.844999694228 11 779.024166993188 21 -601.558027793705 31 86.0556585976989 12 787.130189104003 22 -589.736090634929 32 65.0204702834338 13 787.130189104003 23 -589.736090634929 33 65.0204702834338 70 1 0 3DFACE 8 leg_half 10 779.024166993188 20 -601.558027793705 30 86.0556585976989 11 787.130186503031 21 -581.689044301674 31 68.844999694228 12 779.024163430099 22 -590.534326018981 32 91.2949066282494 13 779.024163430099 23 -590.534326018981 33 91.2949066282494 70 1 0 3DFACE 8 leg_half 10 718.363081916203 20 -571.142011532184 30 138.806193017976 11 732.466031085639 21 -547.618544534505 31 123.445905477124 12 732.466044108445 22 -569.495501821011 32 122.710665747149 13 732.466044108445 23 -569.495501821011 33 122.710665747149 70 1 0 3DFACE 8 leg_half 10 732.466031085639 20 -547.618544534505 30 123.445905477124 11 718.363081916203 21 -571.142011532184 31 138.806193017976 12 718.363068074693 22 -547.889717752797 32 139.587654990762 13 718.363068074693 23 -547.889717752797 33 139.587654990762 70 1 0 3DFACE 8 leg_half 10 732.466044108445 20 -569.495501821011 30 122.710665747149 11 744.275027999012 21 -547.318028491407 31 105.557438942816 12 744.275040114523 22 -567.670823535761 32 104.873423184286 13 744.275040114523 23 -567.670823535761 33 104.873423184286 70 1 0 3DFACE 8 leg_half 10 744.275027999012 20 -547.318028491407 30 105.557438942816 11 732.466044108445 21 -569.495501821011 31 122.710665747149 12 732.466031085639 22 -547.618544534505 32 123.445905477124 13 732.466031085639 23 -547.618544534505 33 123.445905477124 70 1 0 3DFACE 8 leg_half 10 744.275040114523 20 -567.670823535761 30 104.873423184286 11 753.576386337194 21 -546.993607173192 31 86.2459300397311 12 753.576397473233 22 -565.700992480648 32 85.6172131326287 13 753.576397473233 23 -565.700992480648 33 85.6172131326287 70 1 0 3DFACE 8 leg_half 10 753.576386337194 20 -546.993607173192 30 86.2459300397311 11 744.275040114523 21 -567.670823535761 31 104.873423184286 12 744.275027999012 22 -547.318028491407 32 105.557438942816 13 744.275027999012 23 -547.318028491407 33 105.557438942816 70 1 0 3DFACE 8 leg_half 10 753.576397473233 20 -565.700992480648 30 85.6172131326287 11 760.201806938459 21 -546.651150672583 31 65.8608020071314 12 760.201817040574 22 -563.621650860098 32 65.2904582517363 13 760.201817040574 23 -563.621650860098 33 65.2904582517363 70 1 0 3DFACE 8 leg_half 10 760.201806938459 20 -546.651150672583 30 65.8608020071314 11 753.576397473233 21 -565.700992480648 31 85.6172131326287 12 753.576386337194 22 -546.993607173192 32 86.2459300397311 13 753.576386337194 23 -546.993607173192 33 86.2459300397311 70 1 0 3DFACE 8 leg_half 10 792.007218281129 20 -582.09079684746 30 40.22369700007 11 787.130191214298 21 -603.902540579901 31 54.279953197846 12 792.00721860814 22 -586.233981212786 32 36.6113938325108 13 792.00721860814 23 -586.233981212786 33 36.6113938325108 70 1 0 3DFACE 8 leg_half 10 787.130191214298 20 -603.902540579901 30 54.279953197846 11 792.007218281129 21 -582.09079684746 31 40.22369700007 12 787.130190684252 22 -597.186922321698 32 60.1350749996264 13 787.130190684252 23 -597.186922321698 33 60.1350749996264 70 1 0 3DFACE 8 leg_half 10 429.267778397118 20 -703.948312537967 30 154.325725145835 11 0.016303397997907 21 -682.666774623337 31 172.880520888553 12 429.267776717416 22 -682.666673022429 32 172.880471218973 13 429.267776717416 23 -682.666673022429 33 172.880471218973 70 1 0 3DFACE 8 leg_half 10 0.016303397997907 20 -682.666774623337 30 172.880520888553 11 429.267778397118 21 -703.948312537967 31 154.325725145835 12 0.0163050776986444 22 -703.948386395801 32 154.325799003669 13 0.0163050776986444 23 -703.948386395801 33 154.325799003669 70 1 0 3DFACE 8 leg_half 10 432.838955869068 20 -703.742219504346 30 154.119632112235 11 429.267776717416 21 -682.666673022429 31 172.880471218973 12 432.838954191733 22 -682.490585555484 32 172.648217340479 13 432.838954191733 23 -682.490585555484 33 172.648217340479 70 1 0 3DFACE 8 leg_half 10 429.267776717416 20 -682.666673022429 30 172.880471218973 11 432.838955869068 21 -703.742219504346 31 154.119632112235 12 429.267778397118 22 -703.948312537967 32 154.325725145835 13 429.267778397118 23 -703.948312537967 33 154.325725145835 70 1 0 3DFACE 8 leg_half 10 436.335627427501 20 -703.188137968552 30 153.565550576497 11 432.838954191733 21 -682.490585555484 31 172.648217340479 12 436.335625756533 22 -682.017174593568 32 172.023801843262 13 436.335625756533 23 -682.017174593568 33 172.023801843262 70 1 0 3DFACE 8 leg_half 10 432.838954191733 20 -682.490585555484 30 172.648217340479 11 436.335627427501 21 -703.188137968552 31 153.565550576497 12 432.838955869068 22 -703.742219504346 32 154.119632112235 13 432.838955869068 23 -703.742219504346 33 154.119632112235 70 1 0 3DFACE 8 leg_half 10 464.090727919739 20 -549.540509167097 30 237.849027336606 11 466.630399083827 21 -580.939676928926 31 234.582789982374 12 466.630380370588 22 -549.503386674047 32 235.63929931572 13 466.630380370588 23 -549.503386674047 33 235.63929931572 70 1 0 3DFACE 8 leg_half 10 466.630399083827 20 -580.939676928926 30 234.582789982374 11 464.090727919739 21 -549.540509167097 31 237.849027336606 12 464.090746745054 22 -581.165076540648 32 236.786190394896 13 464.090746745054 23 -581.165076540648 33 236.786190394896 70 1 0 3DFACE 8 leg_half 10 448.281980096118 20 -577.92870502396 30 205.148664616833 11 445.721690152324 21 -549.049610517709 31 208.627211339945 12 448.281962880048 22 -549.007501396503 32 206.120647039576 13 448.281962880048 23 -549.007501396503 33 206.120647039576 70 1 0 3DFACE 8 leg_half 10 445.721690152324 20 -549.049610517709 30 208.627211339945 11 448.281980096118 21 -577.92870502396 31 205.148664616833 12 445.721707495526 22 -578.184382747044 32 207.648051313885 13 445.721707495526 23 -578.184382747044 33 207.648051313885 70 1 0 3DFACE 8 leg_half 10 448.281980096118 20 -577.92870502396 30 205.148664616833 11 450.471070624061 21 -548.959849908146 31 203.284158309243 12 450.471087696265 22 -577.639374325348 32 202.320298229792 13 450.471087696265 23 -577.639374325348 33 202.320298229792 70 1 0 3DFACE 8 leg_half 10 450.471070624061 20 -548.959849908146 30 203.284158309243 11 448.281980096118 21 -577.92870502396 31 205.148664616833 12 448.281962880048 22 -549.007501396503 32 206.120647039576 13 448.281962880048 23 -549.007501396503 33 206.120647039576 70 1 0 3DFACE 8 leg_half 10 450.471087696265 20 -577.639374325348 30 202.320298229792 11 452.246960920592 21 -548.907571431286 31 200.172233713933 12 452.246977834961 22 -577.321948654809 32 199.217284688636 13 452.246977834961 23 -577.321948654809 33 199.217284688636 70 1 0 3DFACE 8 leg_half 10 452.246960920592 20 -548.907571431286 30 200.172233713933 11 450.471087696265 21 -577.639374325348 31 202.320298229792 12 450.471070624061 22 -548.959849908146 32 203.284158309243 13 450.471070624061 23 -548.959849908146 33 203.284158309243 70 1 0 3DFACE 8 leg_half 10 452.246977834961 20 -577.321948654809 30 199.217284688636 11 453.575519157163 21 -548.851670228397 31 196.84465290436 12 453.575535902759 22 -576.982525716554 32 195.89923246393 13 453.575535902759 23 -576.982525716554 33 195.89923246393 70 1 0 3DFACE 8 leg_half 10 453.575519157163 20 -548.851670228397 30 196.84465290436 11 452.246977834961 21 -577.321948654809 31 199.217284688636 12 452.246960920592 22 -548.907571431286 32 200.172233713933 13 452.246960920592 23 -548.907571431286 33 200.172233713933 70 1 0 3DFACE 8 leg_half 10 453.575535902759 20 -576.982525716554 30 195.89923246393 11 454.431223909685 21 -548.793220154026 31 193.36533825795 12 454.431240478811 22 -576.627625779333 32 192.429880890276 13 454.431240478811 23 -576.627625779333 33 192.429880890276 70 1 0 3DFACE 8 leg_half 10 454.431223909685 20 -548.793220154026 30 193.36533825795 11 453.575535902759 21 -576.982525716554 31 195.89923246393 12 453.575519157163 22 -548.851670228397 32 196.84465290436 13 453.575519157163 23 -548.851670228397 33 196.84465290436 70 1 0 3DFACE 8 leg_half 10 753.73928877638 20 -638.371732863863 30 114.456713513376 11 736.997696774917 21 -665.645302851503 31 116.022715463229 12 753.739289860341 22 -652.105388357143 32 102.482800970232 13 753.739289860341 23 -652.105388357143 33 102.482800970232 70 1 0 3DFACE 8 leg_half 10 736.997696774917 20 -665.645302851503 30 116.022715463229 11 753.73928877638 21 -638.371732863863 31 114.456713513376 12 736.997695535365 22 -649.940320006495 32 129.715362054641 13 736.997695535365 23 -649.940320006495 33 129.715362054641 70 1 0 3DFACE 8 leg_half 10 473.10170430358 20 -186.86272 30 224.014968929072 11 472.107150072447 21 -549.362133988305 31 227.231114817978 12 473.10170430358 22 -549.308104906071 32 224.014968929071 13 473.10170430358 23 -549.308104906071 33 224.014968929071 70 1 0 3DFACE 8 leg_half 10 472.107150072447 20 -549.362133988305 30 227.231114817978 11 473.10170430358 21 -186.86272 31 224.014968929072 12 472.107150072447 22 -186.86272 32 227.231114817978 13 472.107150072447 23 -186.86272 33 227.231114817978 70 1 0 3DFACE 8 leg_half 10 452.246991021541 20 -603.175034087969 30 194.771794391524 11 453.575535902759 21 -576.982525716554 31 195.89923246393 12 453.575548860337 22 -602.386639077964 32 191.530943822063 13 453.575548860337 23 -602.386639077964 33 191.530943822063 70 1 0 3DFACE 8 leg_half 10 453.575535902759 20 -576.982525716554 30 195.89923246393 11 452.246991021541 21 -603.175034087969 31 194.771794391524 12 452.246977834961 22 -577.321948654809 32 199.217284688636 13 452.246977834961 23 -577.321948654809 33 199.217284688636 70 1 0 3DFACE 8 leg_half 10 436.335569590044 20 -549.135217804424 30 213.722949367545 11 432.838897838644 21 -186.86272 31 214.504708726405 12 436.335569590044 22 -186.86272 32 213.722949367545 13 436.335569590044 23 -186.86272 33 213.722949367545 70 1 0 3DFACE 8 leg_half 10 432.838897838644 20 -186.86272 30 214.504708726405 11 436.335569590044 21 -549.135217804424 31 213.722949367545 12 432.838897838644 22 -549.148351803013 32 214.504708726405 13 432.838897838644 23 -549.148351803013 33 214.504708726405 70 1 0 3DFACE 8 leg_half 10 793.543158239603 20 -559.33210911257 30 23.3578380122893 11 792.007213497075 21 -567.289596867332 31 47.2582811561368 12 793.520757722035 22 -561.475389395115 32 23.3578380118087 13 793.520757722035 23 -561.475389395115 33 23.3578380118087 70 1 0 3DFACE 8 leg_half 10 792.007213497075 20 -567.289596867332 30 47.2582811561368 11 793.543158239603 21 -559.33210911257 31 23.3578380122893 12 792.007210733943 22 -561.872310305502 32 48.1897945304127 13 792.007210733943 23 -561.872310305502 33 48.1897945304127 70 1 0 3DFACE 8 leg_half 10 792.007210733943 20 -561.872310305502 30 48.1897945304127 11 787.130182929858 21 -573.195904769668 31 71.5373148305873 12 792.007213497075 22 -567.289596867332 32 47.2582811561368 13 792.007213497075 23 -567.289596867332 33 47.2582811561368 70 1 0 3DFACE 8 leg_half 10 787.130182929858 20 -573.195904769668 30 71.5373148305873 11 792.007210733943 21 -561.872310305502 31 48.1897945304127 12 787.130178451143 22 -564.415115565838 32 73.0471892828083 13 787.130178451143 23 -564.415115565838 33 73.0471892828083 70 1 0 3DFACE 8 leg_half 10 787.130178451143 20 -564.415115565838 30 73.0471892828083 11 779.024158535186 21 -578.899518233046 31 94.9831268667919 12 787.130182929858 22 -573.195904769668 32 71.5373148305873 13 787.130182929858 23 -573.195904769668 33 71.5373148305873 70 1 0 3DFACE 8 leg_half 10 779.024158535186 20 -578.899518233046 30 94.9831268667919 11 787.130178451143 21 -564.415115565838 31 73.0471892828083 12 779.024152399766 22 -566.87065726704 32 97.0515138238504 13 779.024152399766 23 -566.87065726704 33 97.0515138238504 70 1 0 3DFACE 8 leg_half 10 779.024152399766 20 -566.87065726704 30 97.0515138238504 11 767.82932233817 21 -584.301801471681 31 117.190255690543 12 779.024158535186 22 -578.899518233046 32 94.9831268667919 13 779.024158535186 23 -578.899518233046 33 94.9831268667919 70 1 0 3DFACE 8 leg_half 10 767.82932233817 20 -584.301801471681 30 117.190255690543 11 779.024152399766 21 -566.87065726704 31 97.0515138238504 12 767.82931463357 22 -569.196470349584 32 119.787647909415 13 767.82931463357 23 -569.196470349584 33 119.787647909415 70 1 0 3DFACE 8 leg_half 10 649.884068906774 20 -549.087494127121 30 210.885907146698 11 673.957344671825 21 -577.587813182298 31 201.817465714933 12 673.957327625231 22 -548.951311917762 32 202.779879874335 13 673.957327625231 23 -548.951311917762 33 202.779879874335 70 1 0 3DFACE 8 leg_half 10 673.957344671825 20 -577.587813182298 30 201.817465714933 11 649.884068906774 21 -549.087494127121 31 210.885907146698 12 649.884086364505 22 -578.414663086699 32 209.900281060566 13 649.884086364505 23 -578.414663086699 33 209.900281060566 70 1 0 3DFACE 8 leg_half 10 624.955290211342 20 -549.169431970937 30 215.762940693873 11 649.884086364505 21 -578.414663086699 31 209.900281060566 12 649.884068906774 22 -549.087494127121 32 210.885907146698 13 649.884068906774 23 -549.087494127121 33 210.885907146698 70 1 0 3DFACE 8 leg_half 10 649.884086364505 20 -578.414663086699 30 209.900281060566 11 624.955290211342 21 -549.169431970937 31 215.762940693873 12 624.955307916438 22 -578.912147406784 32 214.763348941721 13 624.955307916438 23 -578.912147406784 33 214.763348941721 70 1 0 3DFACE 8 leg_half 10 767.829335677824 20 -625.572837100386 30 97.5753208387769 11 753.739289860341 21 -652.105388357143 31 102.482800970232 12 767.829336589646 22 -637.125515922866 32 87.5029285374647 13 767.829336589646 23 -637.125515922866 33 87.5029285374647 70 1 0 3DFACE 8 leg_half 10 753.739289860341 20 -652.105388357143 30 102.482800970232 11 767.829335677824 21 -625.572837100386 31 97.5753208387769 12 753.73928877638 22 -638.371732863863 32 114.456713513376 13 753.73928877638 23 -638.371732863863 33 114.456713513376 70 1 0 3DFACE 8 leg_half 10 439.690564957562 20 -549.114088023756 30 212.46522637891 11 436.335569590044 21 -186.86272 31 213.722949367545 12 439.690564957562 22 -186.86272 32 212.46522637891 13 439.690564957562 23 -186.86272 33 212.46522637891 70 1 0 3DFACE 8 leg_half 10 436.335569590044 20 -186.86272 30 213.722949367545 11 439.690564957562 21 -549.114088023756 31 212.46522637891 12 436.335569590044 22 -549.135217804424 32 213.722949367545 13 436.335569590044 23 -549.135217804424 33 213.722949367545 70 1 0 3DFACE 8 leg_half 10 793.520757722035 20 -561.475389395115 30 23.3578380118087 11 792.007215701535 21 -572.529418663124 31 45.597263875134 12 793.478047748674 22 -563.767069108265 32 23.3578380112902 13 793.478047748674 23 -563.767069108265 33 23.3578380112902 70 1 0 3DFACE 8 leg_half 10 792.007215701535 20 -572.529418663124 30 45.597263875134 11 793.520757722035 21 -561.475389395115 31 23.3578380118087 12 792.007213497075 22 -567.289596867332 32 47.2582811561368 13 792.007213497075 23 -567.289596867332 33 47.2582811561368 70 1 0 3DFACE 8 leg_half 10 35.2381055728787 20 -186.86272 30 1394.27106395937 11 18.7226850109544 21 -186.862719999999 31 1315.22236639941 12 0.112465277083555 22 -186.86272 32 1390.81149035281 13 0.112465277083555 23 -186.86272 33 1390.81149035281 70 3 0 3DFACE 8 leg_half 10 18.7226850109544 20 -186.862719999999 30 1315.22236639941 11 35.2381055728787 21 -186.86272 31 1394.27106395937 12 56.1267852268127 22 -186.862719999999 32 1315.22236639941 13 56.1267852268127 23 -186.862719999999 33 1315.22236639941 70 3 0 3DFACE 8 leg_half 10 56.1267852268127 20 -186.862719999999 30 1315.22236639941 11 35.2381055728787 21 -186.86272 31 1394.27106395937 12 69.0138872107926 22 -186.86272 32 1404.51683530547 13 69.0138872107926 23 -186.86272 33 1404.51683530547 70 13 0 3DFACE 8 leg_half 10 56.1267852268127 20 -186.862719999999 30 1315.22236639941 11 69.0138872107926 21 -186.86272 31 1404.51683530547 12 56.1267852268127 22 -186.862719999999 32 268.426375476513 13 56.1267852268127 23 -186.862719999999 33 268.426375476513 70 3 0 3DFACE 8 leg_half 10 100.155807358117 20 -186.86272 30 1753.52666880208 11 100.141825844156 21 -186.862719999999 31 1720.56410006505 12 69.3272894690774 22 -186.86272 32 1737.04848268553 13 69.3272894690774 23 -186.86272 33 1737.04848268553 70 1 0 3DFACE 8 leg_half 10 100.141825844156 20 -186.862719999999 30 1720.56410006505 11 100.155807358117 21 -186.86272 31 1753.52666880208 12 127.425692248039 22 -186.862719999999 32 1698.17280957558 13 127.425692248039 23 -186.862719999999 33 1698.17280957558 70 3 0 3DFACE 8 leg_half 10 127.425692248039 20 -186.862719999999 30 1698.17280957558 11 100.155807358117 21 -186.86272 31 1753.52666880208 12 127.443487339903 22 -186.86272 32 1775.92108901406 13 127.443487339903 23 -186.86272 33 1775.92108901406 70 13 0 3DFACE 8 leg_half 10 127.425692248039 20 -186.862719999999 30 1698.17280957558 11 127.443487339903 21 -186.86272 31 1775.92108901406 12 149.816982737509 22 -186.86272 32 1670.8889431717 13 149.816982737509 23 -186.86272 33 1670.8889431717 70 3 0 3DFACE 8 leg_half 10 149.816982737509 20 -186.86272 30 1670.8889431717 11 127.443487339903 21 -186.86272 31 1775.92108901406 12 149.837907551873 22 -186.86272 32 1803.20876899584 13 149.837907551873 23 -186.86272 33 1803.20876899584 70 13 0 3DFACE 8 leg_half 10 149.816982737509 20 -186.86272 30 1670.8889431717 11 149.837907551873 21 -186.86272 31 1803.20876899584 12 166.455212576235 22 -186.86272 32 1639.76100453833 13 166.455212576235 23 -186.86272 33 1639.76100453833 70 3 0 3DFACE 8 leg_half 10 166.455212576235 20 -186.86272 30 1639.76100453833 11 149.837907551873 21 -186.86272 31 1803.20876899584 12 166.47846298422 22 -186.86272 32 1834.34105850885 13 166.47846298422 23 -186.86272 33 1834.34105850885 70 13 0 3DFACE 8 leg_half 10 166.455212576235 20 -186.86272 30 1639.76100453833 11 166.47846298422 21 -186.86272 31 1834.34105850885 12 176.700983922342 22 -186.86272 32 1605.98522290042 13 176.700983922342 23 -186.86272 33 1605.98522290042 70 3 0 3DFACE 8 leg_half 10 176.700983922342 20 -186.86272 30 1605.98522290042 11 166.47846298422 21 -186.86272 31 1834.34105850885 12 176.725666423807 22 -186.86272 32 1868.12156112628 13 176.725666423807 23 -186.86272 33 1868.12156112628 70 13 0 3DFACE 8 leg_half 10 176.700983922342 20 -186.86272 30 1605.98522290042 11 176.725666423807 21 -186.86272 31 1868.12156112628 12 180.160557528894 22 -186.86272 32 1570.85958260462 13 180.160557528894 23 -186.86272 33 1570.85958260462 70 3 0 3DFACE 8 leg_half 10 180.160557528894 20 -186.86272 30 1570.85958260462 11 176.725666423807 21 -186.86272 31 1868.12156112628 12 180.18572358915 22 -186.86272 32 1903.25211107687 13 180.18572358915 23 -186.86272 33 1903.25211107687 70 13 0 3DFACE 8 leg_half 10 93.652471048303 20 -186.862719999999 30 2499.20806403607 11 46.8683973137003 21 -186.862719999999 31 2125.50255258978 12 46.8683973137003 22 -186.862719999999 32 2499.20806403607 13 46.8683973137003 23 -186.862719999999 33 2499.20806403607 70 1 0 3DFACE 8 leg_half 10 46.8683973137003 20 -186.862719999999 30 2125.50255258978 11 93.652471048303 21 -186.862719999999 31 2499.20806403607 12 69.0235178451106 22 -186.862719999999 32 2069.61810878401 13 69.0235178451106 23 -186.862719999999 33 2069.61810878401 70 15 0 3DFACE 8 leg_half 10 69.0235178451106 20 -186.862719999999 30 2069.61810878401 11 93.652471048303 21 -186.862719999999 31 2499.20806403607 12 100.155807358117 22 -186.862719999999 32 2052.97755335166 13 100.155807358117 23 -186.862719999999 33 2052.97755335166 70 3 0 3DFACE 8 leg_half 10 100.155807358117 20 -186.862719999999 30 2052.97755335166 11 93.652471048303 21 -186.862719999999 31 2499.20806403607 12 123.089851596878 22 -186.862719999999 32 2224.76609686633 13 123.089851596878 23 -186.862719999999 33 2224.76609686633 70 13 0 3DFACE 8 leg_half 10 100.155807358117 20 -186.862719999999 30 2052.97755335166 11 123.089851596878 21 -186.862719999999 31 2224.76609686633 12 127.443487339903 22 -186.86272 32 2030.58313313969 13 127.443487339903 23 -186.86272 33 2030.58313313969 70 3 0 3DFACE 8 leg_half 10 127.443487339903 20 -186.86272 30 2030.58313313969 11 123.089851596878 21 -186.862719999999 31 2224.76609686633 12 221.739809665471 22 -186.86272 32 2013.4439613934 13 221.739809665471 23 -186.86272 33 2013.4439613934 70 13 0 3DFACE 8 leg_half 10 127.443487339903 20 -186.86272 30 2030.58313313969 11 221.739809665471 21 -186.86272 31 2013.4439613934 12 149.837907551873 22 -186.86272 32 2003.29545315791 13 149.837907551873 23 -186.86272 33 2003.29545315791 70 3 0 3DFACE 8 leg_half 10 149.837907551873 20 -186.86272 30 2003.29545315791 11 221.739809665471 21 -186.86272 31 2013.4439613934 12 166.47846298422 22 -186.86272 32 1972.1631636449 13 166.47846298422 23 -186.86272 33 1972.1631636449 70 3 0 3DFACE 8 leg_half 10 166.47846298422 20 -186.86272 30 1972.1631636449 11 221.739809665471 21 -186.86272 31 2013.4439613934 12 176.725666423807 22 -186.86272 32 1938.38266102747 13 176.725666423807 23 -186.86272 33 1938.38266102747 70 3 0 3DFACE 8 leg_half 10 176.725666423807 20 -186.86272 30 1938.38266102747 11 221.739809665471 21 -186.86272 31 2013.4439613934 12 180.18572358915 22 -186.86272 32 1903.25211107687 13 180.18572358915 23 -186.86272 33 1903.25211107687 70 3 0 3DFACE 8 leg_half 10 100.141825844157 20 -186.86272 30 1421.1550651442 11 93.530885442671 21 -186.862719999998 31 1315.22236639941 12 69.0138872107926 22 -186.86272 32 1404.51683530547 13 69.0138872107926 23 -186.86272 33 1404.51683530547 70 3 0 3DFACE 8 leg_half 10 93.530885442671 20 -186.862719999998 30 1315.22236639941 11 100.141825844157 21 -186.86272 31 1421.1550651442 12 221.739809665471 22 -186.86272 32 1435.59863370269 13 221.739809665471 23 -186.86272 33 1435.59863370269 70 3 0 3DFACE 8 leg_half 10 221.739809665471 20 -186.86272 30 1435.59863370269 11 100.141825844157 21 -186.86272 31 1421.1550651442 12 127.42569224804 22 -186.86272 32 1443.54635563367 13 127.42569224804 23 -186.86272 33 1443.54635563367 70 13 0 3DFACE 8 leg_half 10 221.739809665471 20 -186.86272 30 1435.59863370269 11 127.42569224804 21 -186.86272 31 1443.54635563367 12 149.816982737509 22 -186.86272 32 1470.83022203755 13 149.816982737509 23 -186.86272 33 1470.83022203755 70 13 0 3DFACE 8 leg_half 10 221.739809665471 20 -186.86272 30 1435.59863370269 11 149.816982737509 21 -186.86272 31 1470.83022203755 12 166.455212576235 22 -186.86272 32 1501.95816067091 13 166.455212576235 23 -186.86272 33 1501.95816067091 70 13 0 3DFACE 8 leg_half 10 221.739809665471 20 -186.86272 30 1435.59863370269 11 166.455212576235 21 -186.86272 31 1501.95816067091 12 176.700983922342 22 -186.86272 32 1535.73394230883 13 176.700983922342 23 -186.86272 33 1535.73394230883 70 13 0 3DFACE 8 leg_half 10 221.739809665471 20 -186.86272 30 1435.59863370269 11 176.700983922342 21 -186.86272 31 1535.73394230883 12 180.160557528894 22 -186.86272 32 1570.85958260462 13 180.160557528894 23 -186.86272 33 1570.85958260462 70 13 0 3DFACE 8 leg_half 10 221.739809665471 20 -186.86272 30 1435.59863370269 11 180.160557528894 21 -186.86272 31 1570.85958260462 12 180.18572358915 22 -186.86272 32 1903.25211107687 13 180.18572358915 23 -186.86272 33 1903.25211107687 70 15 0 3DFACE 8 leg_half 10 221.739809665471 20 -186.86272 30 1435.59863370269 11 180.18572358915 21 -186.86272 31 1903.25211107687 12 221.739809665471 22 -186.86272 32 2013.4439613934 13 221.739809665471 23 -186.86272 33 2013.4439613934 70 3 0 3DFACE 8 leg_half 10 0.0162469754877819 20 -186.86272 30 214.795486963908 11 93.530885442671 21 -186.862719999999 31 242.726639240051 12 429.26772029492 22 -186.86272 32 214.795486963908 13 429.26772029492 23 -186.86272 33 214.795486963908 70 3 0 3DFACE 8 leg_half 10 93.530885442671 20 -186.862719999999 30 242.726639240051 11 0.0162469754877819 21 -186.86272 31 214.795486963908 12 18.7226850109544 22 -186.862719999999 32 268.426375476513 13 18.7226850109544 23 -186.862719999999 33 268.426375476513 70 15 0 3DFACE 8 leg_half 10 18.7226850109544 20 -186.862719999999 30 268.426375476513 11 0.0162469754877819 21 -186.86272 31 214.795486963908 12 0.112465277083555 22 -186.86272 32 1390.81149035281 13 0.112465277083555 23 -186.86272 33 1390.81149035281 70 13 0 3DFACE 8 leg_half 10 18.7226850109544 20 -186.862719999999 30 268.426375476513 11 0.112465277083555 21 -186.86272 31 1390.81149035281 12 18.7226850109544 22 -186.862719999999 32 1315.22236639941 13 18.7226850109544 23 -186.862719999999 33 1315.22236639941 70 3 0 3DFACE 8 leg_half 10 93.530885442671 20 -186.862719999999 30 242.726639240051 11 18.7226850109544 21 -186.862719999999 31 268.426375476513 12 56.1267852268127 22 -186.862719999999 32 268.426375476513 13 56.1267852268127 23 -186.862719999999 33 268.426375476513 70 13 0 3DFACE 8 leg_half 10 93.530885442671 20 -186.862719999999 30 242.726639240051 11 56.1267852268127 21 -186.862719999999 31 268.426375476513 12 69.0138872107926 22 -186.86272 32 1404.51683530547 13 69.0138872107926 23 -186.86272 33 1404.51683530547 70 15 0 3DFACE 8 leg_half 10 93.530885442671 20 -186.862719999999 30 242.726639240051 11 69.0138872107926 21 -186.86272 31 1404.51683530547 12 93.530885442671 22 -186.862719999998 32 1315.22236639941 13 93.530885442671 23 -186.862719999998 33 1315.22236639941 70 3 0 3DFACE 8 leg_half 10 429.26772029492 20 -186.86272 30 214.795486963908 11 93.530885442671 21 -186.862719999999 31 242.726639240051 12 448.31772029492 22 -186.86272 32 242.726639240051 13 448.31772029492 23 -186.86272 33 242.726639240051 70 13 0 3DFACE 8 leg_half 10 429.26772029492 20 -186.86272 30 214.795486963908 11 448.31772029492 21 -186.86272 31 242.726639240051 12 432.838897838644 22 -186.86272 32 214.504708726405 13 432.838897838644 23 -186.86272 33 214.504708726405 70 3 0 3DFACE 8 leg_half 10 432.838897838644 20 -186.86272 30 214.504708726405 11 448.31772029492 21 -186.86272 31 242.726639240051 12 436.335569590044 22 -186.86272 32 213.722949367545 13 436.335569590044 23 -186.86272 33 213.722949367545 70 3 0 3DFACE 8 leg_half 10 436.335569590044 20 -186.86272 30 213.722949367545 11 448.31772029492 21 -186.86272 31 242.726639240051 12 439.690564957562 22 -186.86272 32 212.46522637891 13 439.690564957562 23 -186.86272 33 212.46522637891 70 3 0 3DFACE 8 leg_half 10 439.690564957562 20 -186.86272 30 212.46522637891 11 448.31772029492 21 -186.86272 31 242.726639240051 12 442.839434933817 22 -186.86272 32 210.755700449054 13 442.839434933817 23 -186.86272 33 210.755700449054 70 3 0 3DFACE 8 leg_half 10 442.839434933817 20 -186.86272 30 210.755700449054 11 448.31772029492 21 -186.86272 31 242.726639240051 12 445.721690152324 22 -186.86272 32 208.627211339945 13 445.721690152324 23 -186.86272 33 208.627211339945 70 3 0 3DFACE 8 leg_half 10 445.721690152324 20 -186.86272 30 208.627211339945 11 448.31772029492 21 -186.86272 31 242.726639240051 12 448.281962880048 22 -186.86272 32 206.120647039576 13 448.281962880048 23 -186.86272 33 206.120647039576 70 3 0 3DFACE 8 leg_half 10 448.281962880048 20 -186.86272 30 206.120647039576 11 448.31772029492 21 -186.86272 31 242.726639240051 12 450.471070624061 22 -186.86272 32 203.284158309244 13 450.471070624061 23 -186.86272 33 203.284158309244 70 3 0 3DFACE 8 leg_half 10 450.471070624061 20 -186.86272 30 203.284158309244 11 448.31772029492 21 -186.86272 31 242.726639240051 12 451.683281480069 22 -186.86272 32 242.650939792116 13 451.683281480069 23 -186.86272 33 242.650939792116 70 13 0 3DFACE 8 leg_half 10 450.471070624061 20 -186.86272 30 203.284158309244 11 451.683281480069 21 -186.86272 31 242.650939792116 12 452.246960920592 22 -186.86272 32 200.172233713933 13 452.246960920592 23 -186.86272 33 200.172233713933 70 3 0 3DFACE 8 leg_half 10 452.246960920592 20 -186.86272 30 200.172233713933 11 451.683281480069 21 -186.86272 31 242.650939792116 12 455.00604998394 22 -186.86272 32 242.110623248711 13 455.00604998394 23 -186.86272 33 242.110623248711 70 13 0 3DFACE 8 leg_half 10 452.246960920592 20 -186.86272 30 200.172233713933 11 455.00604998394 21 -186.86272 31 242.110623248711 12 453.575519157163 22 -186.86272 32 196.84465290436 13 453.575519157163 23 -186.86272 33 196.84465290436 70 3 0 3DFACE 8 leg_half 10 453.575519157163 20 -186.86272 30 196.84465290436 11 455.00604998394 21 -186.86272 31 242.110623248711 12 454.431223909685 22 -186.86272 32 193.36533825795 13 454.431223909685 23 -186.86272 33 193.36533825795 70 3 0 3DFACE 8 leg_half 10 454.431223909685 20 -186.86272 30 193.36533825795 11 455.00604998394 21 -186.86272 31 242.110623248711 12 454.797637205561 22 -186.86272 32 189.801126938625 13 454.797637205561 23 -186.86272 33 189.801126938625 70 3 0 3DFACE 8 leg_half 10 454.797637205561 20 -186.86272 30 189.801126938625 11 602.133251163261 21 -186.86272 31 186.220486963908 12 454.66772029492 22 -186.86272 32 186.220486963908 13 454.66772029492 23 -186.86272 33 186.220486963908 70 1 0 3DFACE 8 leg_half 10 602.133251163261 20 -186.86272 30 186.220486963908 11 454.797637205561 21 -186.86272 31 189.801126938625 12 473.71772029492 22 -186.86272 32 217.326639240051 13 473.71772029492 23 -186.86272 33 217.326639240051 70 15 0 3DFACE 8 leg_half 10 473.71772029492 20 -186.86272 30 217.326639240051 11 454.797637205561 21 -186.86272 31 189.801126938625 12 455.00604998394 22 -186.86272 32 242.110623248711 13 455.00604998394 23 -186.86272 33 242.110623248711 70 15 0 3DFACE 8 leg_half 10 473.71772029492 20 -186.86272 30 217.326639240051 11 455.00604998394 21 -186.86272 31 242.110623248711 12 458.222195872847 22 -186.86272 32 241.116069017578 13 458.222195872847 23 -186.86272 33 241.116069017578 70 13 0 3DFACE 8 leg_half 10 473.71772029492 20 -186.86272 30 217.326639240051 11 458.222195872847 21 -186.86272 31 241.116069017578 12 461.269937419119 22 -186.86272 32 239.686382351025 13 461.269937419119 23 -186.86272 33 239.686382351025 70 13 0 3DFACE 8 leg_half 10 473.71772029492 20 -186.86272 30 217.326639240051 11 461.269937419119 21 -186.86272 31 239.686382351025 12 464.090727919739 22 -186.86272 32 237.849027336606 13 464.090727919739 23 -186.86272 33 237.849027336606 70 13 0 3DFACE 8 leg_half 10 473.71772029492 20 -186.86272 30 217.326639240051 11 464.090727919739 21 -186.86272 31 237.849027336606 12 466.630380370588 22 -186.86272 32 235.63929931572 13 466.630380370588 23 -186.86272 33 235.63929931572 70 13 0 3DFACE 8 leg_half 10 473.71772029492 20 -186.86272 30 217.326639240051 11 466.630380370588 21 -186.86272 31 235.63929931572 12 468.840108391474 22 -186.86272 32 233.09964686487 13 468.840108391474 23 -186.86272 33 233.09964686487 70 13 0 3DFACE 8 leg_half 10 473.71772029492 20 -186.86272 30 217.326639240051 11 468.840108391474 21 -186.86272 31 233.09964686487 12 470.677463405893 22 -186.86272 32 230.27885636425 13 470.677463405893 23 -186.86272 33 230.27885636425 70 13 0 3DFACE 8 leg_half 10 473.71772029492 20 -186.86272 30 217.326639240051 11 470.677463405893 21 -186.86272 31 230.27885636425 12 472.107150072447 22 -186.86272 32 227.231114817978 13 472.107150072447 23 -186.86272 33 227.231114817978 70 13 0 3DFACE 8 leg_half 10 473.71772029492 20 -186.86272 30 217.326639240051 11 472.107150072447 21 -186.86272 31 227.231114817978 12 473.10170430358 22 -186.86272 32 224.014968929072 13 473.10170430358 23 -186.86272 33 224.014968929072 70 13 0 3DFACE 8 leg_half 10 473.71772029492 20 -186.86272 30 217.326639240051 11 473.10170430358 21 -186.86272 31 224.014968929072 12 473.642020846985 22 -186.86272 32 220.692200425201 13 473.642020846985 23 -186.86272 33 220.692200425201 70 1 0 3DFACE 8 leg_half 10 602.133251163261 20 -186.86272 30 186.220486963908 11 473.71772029492 21 -186.86272 31 217.326639240051 12 599.602098887118 22 -186.86272 32 217.326639240051 13 599.602098887118 23 -186.86272 33 217.326639240051 70 13 0 3DFACE 8 leg_half 10 602.133251163261 20 -186.86272 30 186.220486963908 11 599.602098887118 21 -186.86272 31 217.326639240051 12 624.955290211342 22 -186.86272 32 215.762940693873 13 624.955290211342 23 -186.86272 33 215.762940693873 70 13 0 3DFACE 8 leg_half 10 602.133251163261 20 -186.86272 30 186.220486963908 11 624.955290211342 21 -186.86272 31 215.762940693873 12 623.546317277054 22 -186.86272 32 185.255996085023 13 623.546317277054 23 -186.86272 33 185.255996085023 70 3 0 3DFACE 8 leg_half 10 623.546317277054 20 -186.86272 30 185.255996085023 11 624.955290211342 21 -186.86272 31 215.762940693873 12 644.636215091063 22 -186.86272 32 181.426393854527 13 644.636215091063 23 -186.86272 33 181.426393854527 70 3 0 3DFACE 8 leg_half 10 644.636215091063 20 -186.86272 30 181.426393854527 11 624.955290211342 21 -186.86272 31 215.762940693873 12 649.884068906774 22 -186.86272 32 210.885907146698 13 649.884068906774 23 -186.86272 33 210.885907146698 70 13 0 3DFACE 8 leg_half 10 644.636215091063 20 -186.86272 30 181.426393854527 11 649.884068906774 21 -186.86272 31 210.885907146698 12 665.021343123663 22 -186.86272 32 174.800973253263 13 665.021343123663 23 -186.86272 33 174.800973253263 70 3 0 3DFACE 8 leg_half 10 665.021343123663 20 -186.86272 30 174.800973253263 11 649.884068906774 21 -186.86272 31 210.885907146698 12 673.957327625231 22 -186.86272 32 202.779879874335 13 673.957327625231 23 -186.86272 33 202.779879874335 70 13 0 3DFACE 8 leg_half 10 665.021343123663 20 -186.86272 30 174.800973253263 11 673.957327625231 21 -186.86272 31 202.779879874335 12 684.332852026746 22 -186.86272 32 165.499614915081 13 684.332852026746 23 -186.86272 33 165.499614915081 70 3 0 3DFACE 8 leg_half 10 684.332852026746 20 -186.86272 30 165.499614915081 11 673.957327625231 21 -186.86272 31 202.779879874335 12 696.758754005207 22 -186.86272 32 191.585040951661 13 696.758754005207 23 -186.86272 33 191.585040951661 70 13 0 3DFACE 8 leg_half 10 684.332852026746 20 -186.86272 30 165.499614915081 11 696.758754005207 21 -186.86272 31 191.585040951661 12 702.221318561055 22 -186.86272 32 153.690618001708 13 702.221318561055 23 -186.86272 33 153.690618001708 70 3 0 3DFACE 8 leg_half 10 702.221318561055 20 -186.86272 30 153.690618001708 11 696.758754005207 21 -186.86272 31 191.585040951661 12 717.894030194972 22 -186.86272 32 177.494989005399 13 717.894030194972 23 -186.86272 33 177.494989005399 70 13 0 3DFACE 8 leg_half 10 702.221318561055 20 -186.86272 30 153.690618001708 11 717.894030194972 21 -186.86272 31 177.494989005399 12 718.363068074693 22 -186.86272 32 139.587654990762 13 718.363068074693 23 -186.86272 33 139.587654990762 70 3 0 3DFACE 8 leg_half 10 718.363068074693 20 -186.86272 30 139.587654990762 11 717.894030194972 21 -186.86272 31 177.494989005399 12 736.99765201229 22 -186.86272 32 160.753391204502 13 736.99765201229 23 -186.86272 33 160.753391204502 70 13 0 3DFACE 8 leg_half 10 718.363068074693 20 -186.86272 30 139.587654990762 11 736.99765201229 21 -186.86272 31 160.753391204502 12 732.466031085639 22 -186.86272 32 123.445905477124 13 732.466031085639 23 -186.86272 33 123.445905477124 70 3 0 3DFACE 8 leg_half 10 732.466031085639 20 -186.86272 30 123.445905477124 11 736.99765201229 21 -186.86272 31 160.753391204502 12 744.275027999012 22 -186.86272 32 105.557438942816 13 744.275027999012 23 -186.86272 33 105.557438942816 70 3 0 3DFACE 8 leg_half 10 744.275027999012 20 -186.86272 30 105.557438942816 11 736.99765201229 21 -186.86272 31 160.753391204502 12 753.739249813186 22 -186.86272 32 141.649769387185 13 753.739249813186 23 -186.86272 33 141.649769387185 70 13 0 3DFACE 8 leg_half 10 744.275027999012 20 -186.86272 30 105.557438942816 11 753.739249813186 21 -186.86272 31 141.649769387185 12 753.576386337194 22 -186.86272 32 86.2459300397311 13 753.576386337194 23 -186.86272 33 86.2459300397311 70 3 0 3DFACE 8 leg_half 10 753.576386337194 20 -186.86272 30 86.2459300397311 11 753.739249813186 21 -186.86272 31 141.649769387185 12 760.201806938459 22 -186.86272 32 65.8608020071314 13 760.201806938459 23 -186.86272 33 65.8608020071314 70 3 0 3DFACE 8 leg_half 10 760.201806938459 20 -186.86272 30 65.8608020071314 11 753.739249813186 21 -186.86272 31 141.649769387185 12 767.829301759449 22 -186.86272 32 120.51449319742 13 767.829301759449 23 -186.86272 33 120.51449319742 70 13 0 3DFACE 8 leg_half 10 760.201806938459 20 -186.86272 30 65.8608020071314 11 767.829301759449 21 -186.86272 31 120.51449319742 12 764.031409168954 22 -186.86272 32 44.7709041931231 13 764.031409168954 23 -186.86272 33 44.7709041931231 70 3 0 3DFACE 8 leg_half 10 764.031409168954 20 -186.86272 30 44.7709041931231 11 767.829301759449 21 -186.86272 31 120.51449319742 12 764.995900047839 22 -186.86272 32 23.3578380793295 13 764.995900047839 23 -186.86272 33 23.3578380793295 70 3 0 3DFACE 8 leg_half 10 764.995900047839 20 -186.86272 30 23.3578380793295 11 767.829301759449 21 -186.86272 31 120.51449319742 12 793.570900047839 22 -186.86272 32 23.3578380793295 13 793.570900047839 23 -186.86272 33 23.3578380793295 70 3 0 3DFACE 8 leg_half 10 793.570900047839 20 -186.86272 30 23.3578380793295 11 767.829301759449 21 -186.86272 31 120.51449319742 12 779.024140682123 22 -186.86272 32 97.713066817443 13 779.024140682123 23 -186.86272 33 97.713066817443 70 13 0 3DFACE 8 leg_half 10 793.570900047839 20 -186.86272 30 23.3578380793295 11 779.024140682123 21 -186.86272 31 97.713066817443 12 787.130167954486 22 -186.86272 32 73.639808098986 13 787.130167954486 23 -186.86272 33 73.639808098986 70 13 0 3DFACE 8 leg_half 10 793.570900047839 20 -186.86272 30 23.3578380793295 11 787.130167954486 21 -186.86272 31 73.639808098986 12 792.00720150166 22 -186.86272 32 48.7110294035543 13 792.00720150166 23 -186.86272 33 48.7110294035543 70 1 0 3DFACE 8 leg_half 10 0.179983602711646 20 -186.862719999999 30 2125.50255258978 11 35.243015227678 21 -186.862719999999 31 2079.8653122236 12 0.112465277083556 22 -186.862719999999 32 2083.32536938894 13 0.112465277083556 23 -186.862719999999 33 2083.32536938894 70 1 0 3DFACE 8 leg_half 10 35.243015227678 20 -186.862719999999 30 2079.8653122236 11 0.179983602711646 21 -186.862719999999 31 2125.50255258978 12 46.8683973137003 22 -186.862719999999 32 2125.50255258978 13 46.8683973137003 23 -186.862719999999 33 2125.50255258978 70 13 0 3DFACE 8 leg_half 10 35.243015227678 20 -186.862719999999 30 2079.8653122236 11 46.8683973137003 21 -186.862719999999 31 2125.50255258978 12 69.0235178451106 22 -186.862719999999 32 2069.61810878401 13 69.0235178451106 23 -186.862719999999 33 2069.61810878401 70 3 0 3DFACE 8 leg_half 10 166.478462984219 20 -280.29408 30 1972.1631636449 11 176.725666423807 21 -186.86272 31 1938.38266102747 12 176.725666423806 22 -280.29408 32 1938.38266102747 13 176.725666423806 23 -280.29408 33 1938.38266102747 70 1 0 3DFACE 8 leg_half 10 176.725666423807 20 -186.86272 30 1938.38266102747 11 166.478462984219 21 -280.29408 31 1972.1631636449 12 166.47846298422 22 -186.86272 32 1972.1631636449 13 166.47846298422 23 -186.86272 33 1972.1631636449 70 1 0 3DFACE 8 leg_half 10 0.112465277083136 20 -280.29408 30 1390.81149035281 11 35.2381055728787 21 -186.86272 31 1394.27106395937 12 0.112465277083555 22 -186.86272 32 1390.81149035281 13 0.112465277083555 23 -186.86272 33 1390.81149035281 70 1 0 3DFACE 8 leg_half 10 35.2381055728787 20 -186.86272 30 1394.27106395937 11 0.112465277083136 21 -280.29408 31 1390.81149035281 12 35.2381055728783 22 -280.29408 32 1394.27106395937 13 35.2381055728783 23 -280.29408 33 1394.27106395937 70 1 0 3DFACE 8 leg_half 10 69.3272894690769 20 -280.29408 30 1737.04848268553 11 100.155807358117 21 -186.86272 31 1753.52666880208 12 69.3272894690774 22 -186.86272 32 1737.04848268553 13 69.3272894690774 23 -186.86272 33 1737.04848268553 70 1 0 3DFACE 8 leg_half 10 100.155807358117 20 -186.86272 30 1753.52666880208 11 69.3272894690769 21 -280.29408 31 1737.04848268553 12 100.155807358117 22 -280.29408 32 1753.52666880208 13 100.155807358117 23 -280.29408 33 1753.52666880208 70 1 0 3DFACE 8 leg_half 10 100.141825844156 20 -280.29408 30 1720.56410006505 11 69.3272894690774 21 -186.86272 31 1737.04848268553 12 100.141825844156 22 -186.862719999999 32 1720.56410006505 13 100.141825844156 23 -186.862719999999 33 1720.56410006505 70 1 0 3DFACE 8 leg_half 10 69.3272894690774 20 -186.86272 30 1737.04848268553 11 100.141825844156 21 -280.29408 31 1720.56410006505 12 69.3272894690769 22 -280.29408 32 1737.04848268553 13 69.3272894690769 23 -280.29408 33 1737.04848268553 70 1 0 3DFACE 8 leg_half 10 180.185723589149 20 -280.29408 30 1903.25211107687 11 176.725666423807 21 -186.86272 31 1868.12156112628 12 176.725666423806 22 -280.29408 32 1868.12156112628 13 176.725666423806 23 -280.29408 33 1868.12156112628 70 1 0 3DFACE 8 leg_half 10 176.725666423807 20 -186.86272 30 1868.12156112628 11 180.185723589149 21 -280.29408 31 1903.25211107687 12 180.18572358915 22 -186.86272 32 1903.25211107687 13 180.18572358915 23 -186.86272 33 1903.25211107687 70 1 0 3DFACE 8 leg_half 10 176.725666423806 20 -280.29408 30 1868.12156112628 11 166.47846298422 21 -186.86272 31 1834.34105850885 12 166.478462984219 22 -280.29408 32 1834.34105850885 13 166.478462984219 23 -280.29408 33 1834.34105850885 70 1 0 3DFACE 8 leg_half 10 166.47846298422 20 -186.86272 30 1834.34105850885 11 176.725666423806 21 -280.29408 31 1868.12156112628 12 176.725666423807 22 -186.86272 32 1868.12156112628 13 176.725666423807 23 -186.86272 33 1868.12156112628 70 1 0 3DFACE 8 leg_half 10 166.478462984219 20 -280.29408 30 1834.34105850885 11 149.837907551873 21 -186.86272 31 1803.20876899584 12 149.837907551873 22 -280.29408 32 1803.20876899584 13 149.837907551873 23 -280.29408 33 1803.20876899584 70 1 0 3DFACE 8 leg_half 10 149.837907551873 20 -186.86272 30 1803.20876899584 11 166.478462984219 21 -280.29408 31 1834.34105850885 12 166.47846298422 22 -186.86272 32 1834.34105850885 13 166.47846298422 23 -186.86272 33 1834.34105850885 70 1 0 3DFACE 8 leg_half 10 448.282012434797 20 -654.795098868987 30 180.78210913444 11 450.471111788281 21 -629.324619346527 31 189.746945529741 12 450.471119570638 22 -653.402150740311 32 178.303588160926 13 450.471119570638 23 -653.402150740311 33 178.303588160926 70 1 0 3DFACE 8 leg_half 10 450.471111788281 20 -629.324619346527 30 189.746945529741 11 448.282012434797 21 -654.795098868987 31 180.78210913444 12 448.282004539076 22 -630.366836092636 32 192.392159030223 13 448.282004539076 23 -630.366836092636 33 192.392159030223 70 1 0 3DFACE 8 leg_half 10 649.884086364505 20 -759.522868440055 30 28.7920756889693 11 624.955322175969 21 -759.578730682939 31 57.2462284142879 12 624.955307916438 22 -764.38593632126 32 29.2895600085649 13 624.955307916438 23 -764.38593632126 33 29.2895600085649 70 1 0 3DFACE 8 leg_half 10 624.955322175969 20 -759.578730682939 30 57.2462284142879 11 649.884086364505 21 -759.522868440055 31 28.7920756889693 12 649.884100288402 22 -754.828812255533 32 56.0907148781112 13 649.884100288402 23 -754.828812255533 33 56.0907148781112 70 1 0 3DFACE 8 leg_half 10 448.281962880048 20 -549.007501396503 30 206.120647039576 11 450.471070624061 21 -186.86272 31 203.284158309244 12 450.471070624061 22 -548.959849908146 32 203.284158309243 13 450.471070624061 23 -548.959849908146 33 203.284158309243 70 1 0 3DFACE 8 leg_half 10 450.471070624061 20 -186.86272 30 203.284158309244 11 448.281962880048 21 -549.007501396503 31 206.120647039576 12 448.281962880048 22 -186.86272 32 206.120647039576 13 448.281962880048 23 -186.86272 33 206.120647039576 70 1 0 3DFACE 8 leg_half 10 684.332852026746 20 -548.325028948197 30 165.499614915081 11 665.021343123663 21 -186.86272 31 174.800973253263 12 684.332852026746 22 -186.86272 32 165.499614915081 13 684.332852026746 23 -186.86272 33 165.499614915081 70 1 0 3DFACE 8 leg_half 10 665.021343123663 20 -186.86272 30 174.800973253263 11 684.332852026746 21 -548.325028948197 31 165.499614915081 12 665.021343123663 22 -548.481290386566 32 174.800973253262 13 665.021343123663 23 -548.481290386566 33 174.800973253262 70 1 0 3DFACE 8 leg_half 10 599.602116671527 20 -765.945156978237 30 29.4490754688794 11 473.717752446486 21 -761.101673808691 31 57.6167818413605 12 473.717738079349 22 -765.945155901366 32 29.449144968378 13 473.717738079349 23 -765.945155901366 33 29.449144968378 70 1 0 3DFACE 8 leg_half 10 473.717752446486 20 -761.101673808691 30 57.6167818413605 11 599.602116671527 21 -765.945156978237 31 29.4490754688794 12 599.602131038669 22 -761.101673056328 32 57.616722979916 13 599.602131038669 23 -761.101673056328 33 57.616722979916 70 1 0 3DFACE 8 leg_half 10 718.363098127435 20 -605.920400916633 30 130.345732863609 11 732.466052014781 21 -584.996349297051 31 120.045263691758 12 732.466058322552 22 -599.989404866694 32 115.292482897529 13 732.466058322552 23 -599.989404866694 33 115.292482897529 70 1 0 3DFACE 8 leg_half 10 732.466052014781 20 -584.996349297051 30 120.045263691758 11 718.363098127435 21 -605.920400916633 31 130.345732863609 12 718.363090933403 22 -588.820775333035 32 135.766293848309 13 718.363090933403 23 -588.820775333035 33 135.766293848309 70 1 0 3DFACE 8 leg_half 10 46.8683973136999 20 -280.294079999999 30 2499.20806403607 11 46.8683973137003 21 -186.862719999999 31 2125.50255258978 12 46.8683973136999 22 -280.294079999999 32 2125.50255258978 13 46.8683973136999 23 -280.294079999999 33 2125.50255258978 70 1 0 3DFACE 8 leg_half 10 46.8683973137003 20 -186.862719999999 30 2125.50255258978 11 46.8683973136999 21 -280.294079999999 31 2499.20806403607 12 46.8683973137003 22 -186.862719999999 32 2499.20806403607 13 46.8683973137003 23 -186.862719999999 33 2499.20806403607 70 1 0 3DFACE 8 leg_half 10 673.957327625231 20 -548.951311917762 30 202.779879874335 11 696.758770484001 21 -576.445896872616 31 190.654683562835 12 696.758754005207 22 -548.76324041817 32 191.585040951661 13 696.758754005207 23 -548.76324041817 33 191.585040951661 70 1 0 3DFACE 8 leg_half 10 696.758770484001 20 -576.445896872616 30 190.654683562835 11 673.957327625231 21 -548.951311917762 31 202.779879874335 12 673.957344671825 22 -577.587813182298 32 201.817465714933 13 673.957344671825 23 -577.587813182298 33 201.817465714933 70 1 0 3DFACE 8 leg_half 10 436.335625756533 20 -682.017174593568 30 172.023801843262 11 432.838949191021 21 -658.912362146436 31 188.108094342889 12 436.335620774804 22 -658.528453423172 32 187.424993609851 13 436.335620774804 23 -658.528453423172 33 187.424993609851 70 1 0 3DFACE 8 leg_half 10 432.838949191021 20 -658.912362146436 30 188.108094342889 11 436.335625756533 21 -682.017174593568 31 172.023801843262 12 432.838954191733 22 -682.490585555484 32 172.648217340479 13 432.838954191733 23 -682.490585555484 33 172.648217340479 70 1 0 3DFACE 8 leg_half 10 458.222209793371 20 -789.952733412824 30 23.3578378560715 11 455.006069025402 21 -790.658170470477 31 31.9771884161607 12 455.006063894518 22 -790.94784918938 32 23.3578378548415 13 455.006063894518 23 -790.94784918938 33 23.3578378548415 70 1 0 3DFACE 8 leg_half 10 455.006069025402 20 -790.658170470477 30 31.9771884161607 11 458.222209793371 21 -789.952733412824 31 23.3578378560715 12 458.222214863865 22 -789.666464186592 32 31.8757394304439 13 458.222214863865 23 -789.666464186592 33 31.8757394304439 70 1 0 3DFACE 8 leg_half 10 764.995900047839 20 -186.86272 30 23.3578380793295 11 847.545902396365 21 56.1856515497976 31 23.3578380793863 12 806.270901222105 22 56.1856515497994 32 23.3578380793657 13 806.270901222105 23 56.1856515497994 33 23.3578380793657 70 1 0 3DFACE 8 leg_half 10 847.545902396365 20 56.1856515497976 30 23.3578380793863 11 764.995900047839 21 -186.86272 31 23.3578380793295 12 793.570900047839 22 -186.86272 32 23.3578380793295 13 793.570900047839 23 -186.86272 33 23.3578380793295 70 13 0 3DFACE 8 leg_half 10 793.570900047839 20 -186.86272 30 23.3578380793295 11 847.54590239636 21 -563.749226612819 31 23.3578380793719 12 847.545902396365 22 56.1856515497976 32 23.3578380793863 13 847.545902396365 23 56.1856515497976 33 23.3578380793863 70 13 0 3DFACE 8 leg_half 10 847.54590239636 20 -563.749226612819 30 23.3578380793719 11 793.570900047839 21 -186.86272 31 23.3578380793295 12 793.570900047839 22 -545.937123520845 32 23.3578380793295 13 793.570900047839 23 -545.937123520845 33 23.3578380793295 70 13 0 3DFACE 8 leg_half 10 847.54590239636 20 -563.749226612819 30 23.3578380793719 11 793.570900047839 21 -545.937123520845 31 23.3578380793295 12 793.543158239603 22 -559.33210911257 32 23.3578380122893 13 793.543158239603 23 -559.33210911257 33 23.3578380122893 70 13 0 3DFACE 8 leg_half 10 847.54590239636 20 -563.749226612819 30 23.3578380793719 11 793.543158239603 21 -559.33210911257 31 23.3578380122893 12 793.520757722035 22 -561.475389395115 32 23.3578380118087 13 793.520757722035 23 -561.475389395115 33 23.3578380118087 70 13 0 3DFACE 8 leg_half 10 847.54590239636 20 -563.749226612819 30 23.3578380793719 11 793.520757722035 21 -561.475389395115 31 23.3578380118087 12 793.478047748674 22 -563.767069108265 32 23.3578380112902 13 793.478047748674 23 -563.767069108265 33 23.3578380112902 70 13 0 3DFACE 8 leg_half 10 847.54590239636 20 -563.749226612819 30 23.3578380793719 11 793.478047748674 21 -563.767069108265 31 23.3578380112902 12 843.130722681617 22 -608.452917091224 32 23.3578380793307 13 843.130722681617 23 -608.452917091224 33 23.3578380793307 70 3 0 3DFACE 8 leg_half 10 843.130722681617 20 -608.452917091224 30 23.3578380793307 11 793.478047748674 21 -563.767069108265 31 23.3578380112902 12 793.410423174187 22 -566.321374409616 32 23.357838010706 13 793.410423174187 23 -566.321374409616 33 23.357838010706 70 13 0 3DFACE 8 leg_half 10 843.130722681617 20 -608.452917091224 30 23.3578380793307 11 793.410423174187 21 -566.321374409616 31 23.357838010706 12 793.309565768095 22 -569.303680096418 32 23.3578380100164 13 793.309565768095 23 -569.303680096418 33 23.3578380100164 70 13 0 3DFACE 8 leg_half 10 843.130722681617 20 -608.452917091224 30 23.3578380793307 11 793.309565768095 21 -569.303680096418 31 23.3578380100164 12 793.160541596036 22 -572.980425388099 32 23.3578380091579 13 793.160541596036 23 -572.980425388099 33 23.3578380091579 70 13 0 3DFACE 8 leg_half 10 843.130722681617 20 -608.452917091224 30 23.3578380793307 11 793.160541596036 21 -572.980425388099 31 23.3578380091579 12 792.935095112731 22 -577.829952364284 32 23.3578380080173 13 792.935095112731 23 -577.829952364284 33 23.3578380080173 70 13 0 3DFACE 8 leg_half 10 843.130722681617 20 -608.452917091224 30 23.3578380793307 11 792.935095112731 21 -577.829952364284 31 23.3578380080173 12 792.574093434967 22 -584.829110641297 32 23.3578380063606 13 792.574093434967 23 -584.829110641297 33 23.3578380063606 70 13 0 3DFACE 8 leg_half 10 843.130722681617 20 -608.452917091224 30 23.3578380793307 11 792.574093434967 21 -584.829110641297 31 23.3578380063606 12 792.00721584731 22 -595.005500745675 32 23.3578380039372 13 792.00721584731 23 -595.005500745675 33 23.3578380039372 70 13 0 3DFACE 8 leg_half 10 843.130722681617 20 -608.452917091224 30 23.3578380793307 11 792.00721584731 21 -595.005500745675 31 23.3578380039372 12 791.767077835926 22 -596.364536149864 32 23.3578380035618 13 791.767077835926 23 -596.364536149864 33 23.3578380035618 70 13 0 3DFACE 8 leg_half 10 843.130722681617 20 -608.452917091224 30 23.3578380793307 11 791.767077835926 21 -596.364536149864 31 23.3578380035618 12 787.308111270966 22 -620.27413204142 32 23.3578379968868 13 787.308111270966 23 -620.27413204142 33 23.3578379968868 70 13 0 3DFACE 8 leg_half 10 843.130722681617 20 -608.452917091224 30 23.3578380793307 11 787.308111270966 21 -620.27413204142 31 23.3578379968868 12 838.782876772251 22 -630.31101453706 32 23.3578380792528 13 838.782876772251 23 -630.31101453706 33 23.3578380792528 70 3 0 3DFACE 8 leg_half 10 838.782876772251 20 -630.31101453706 30 23.3578380792528 11 787.308111270966 21 -620.27413204142 31 23.3578379968868 12 787.130182819951 22 -621.196954326058 32 23.3578379966277 13 787.130182819951 23 -621.196954326058 33 23.3578379966277 70 13 0 3DFACE 8 leg_half 10 838.782876772251 20 -630.31101453706 30 23.3578380792528 11 787.130182819951 21 -621.196954326058 31 23.3578379966277 12 779.024155516104 22 -645.623514226953 32 23.3578379886926 13 779.024155516104 23 -645.623514226953 33 23.3578379886926 70 13 0 3DFACE 8 leg_half 10 838.782876772251 20 -630.31101453706 30 23.3578380792528 11 779.024155516104 21 -645.623514226953 31 23.3578379886926 12 827.96962116995 22 -662.165838331311 32 23.3578380792096 13 827.96962116995 23 -662.165838331311 33 23.3578380792096 70 3 0 3DFACE 8 leg_half 10 827.96962116995 20 -662.165838331311 30 23.3578380792096 11 779.024155516104 21 -645.623514226953 31 23.3578379886926 12 767.829316563608 22 -668.759576574313 32 23.3578379800722 13 767.829316563608 23 -668.759576574313 33 23.3578379800722 70 13 0 3DFACE 8 leg_half 10 827.96962116995 20 -662.165838331311 30 23.3578380792096 11 767.829316563608 21 -668.759576574313 31 23.3578379800722 12 813.090985614623 22 -692.336726612819 32 23.3578380791782 13 813.090985614623 23 -692.336726612819 33 23.3578380791782 70 3 0 3DFACE 8 leg_half 10 813.090985614623 20 -692.336726612819 30 23.3578380791782 11 767.829316563608 21 -668.759576574313 31 23.3578379800722 12 753.739264589701 22 -690.205036468984 32 23.3578379709152 13 753.739264589701 23 -690.205036468984 33 23.3578379709152 70 13 0 3DFACE 8 leg_half 10 813.090985614623 20 -692.336726612819 30 23.3578380791782 11 753.739264589701 21 -690.205036468984 31 23.3578379709152 12 739.751559375878 22 -706.400475394532 32 23.357837962948 13 739.751559375878 23 -706.400475394532 33 23.357837962948 70 13 0 3DFACE 8 leg_half 10 813.090985614623 20 -692.336726612819 30 23.3578380791782 11 739.751559375878 21 -706.400475394532 31 23.357837962948 12 794.401547685759 22 -720.307447118137 32 23.3578380791593 13 794.401547685759 23 -720.307447118137 33 23.3578380791593 70 3 0 3DFACE 8 leg_half 10 794.401547685759 20 -720.307447118137 30 23.3578380791593 11 739.751559375878 21 -706.400475394532 31 23.357837962948 12 736.997666736503 22 -709.544681018119 32 23.3578379613892 13 736.997666736503 23 -709.544681018119 33 23.3578379613892 70 13 0 3DFACE 8 leg_half 10 794.401547685759 20 -720.307447118137 30 23.3578380791593 11 736.997666736503 21 -709.544681018119 31 23.3578379613892 12 717.894044751764 22 -726.295731112839 32 23.3578379516926 13 717.894044751764 23 -726.295731112839 33 23.3578379516926 70 13 0 3DFACE 8 leg_half 10 794.401547685759 20 -720.307447118137 30 23.3578380791593 11 717.894044751764 21 -726.295731112839 31 23.3578379516926 12 772.221088848011 22 -745.599413064469 32 23.3578380791531 13 772.221088848011 23 -745.599413064469 33 23.3578380791531 70 3 0 3DFACE 8 leg_half 10 772.221088848011 20 -745.599413064469 30 23.3578380791531 11 717.894044751764 21 -726.295731112839 31 23.3578379516926 12 696.758768421093 22 -740.393738342711 32 23.357837941943 13 696.758768421093 23 -740.393738342711 33 23.357837941943 70 13 0 3DFACE 8 leg_half 10 772.221088848011 20 -745.599413064469 30 23.3578380791531 11 696.758768421093 21 -740.393738342711 31 23.357837941943 12 673.957341929162 22 -751.594897963598 32 23.3578379323091 13 673.957341929162 23 -751.594897963598 33 23.3578379323091 70 13 0 3DFACE 8 leg_half 10 772.221088848011 20 -745.599413064469 30 23.3578380791531 11 673.957341929162 21 -751.594897963598 31 23.3578379323091 12 746.929122901678 22 -767.779871902217 32 23.3578380791593 13 746.929122901678 23 -767.779871902217 33 23.3578380791593 70 3 0 3DFACE 8 leg_half 10 746.929122901678 20 -767.779871902217 30 23.3578380791593 11 673.957341929162 21 -751.594897963598 31 23.3578379323091 12 649.884083129639 22 -759.7055020414 32 23.3578379229566 13 649.884083129639 23 -759.7055020414 33 23.3578379229566 70 13 0 3DFACE 8 leg_half 10 746.929122901678 20 -767.779871902217 30 23.3578380791593 11 649.884083129639 21 -759.7055020414 31 23.3578379229566 12 624.955304385432 22 -764.585289351978 32 23.3578379140486 13 624.955304385432 23 -764.585289351978 33 23.3578379140486 70 13 0 3DFACE 8 leg_half 10 746.929122901678 20 -767.779871902217 30 23.3578380791593 11 624.955304385432 21 -764.585289351978 31 23.3578379140486 12 599.602113045565 22 -766.149870997149 32 23.3578379057383 13 599.602113045565 23 -766.149870997149 33 23.3578379057383 70 13 0 3DFACE 8 leg_half 10 746.929122901678 20 -767.779871902217 30 23.3578380791593 11 599.602113045565 21 -766.149870997149 31 23.3578379057383 12 473.717734453346 22 -766.149872257343 32 23.3578378661905 13 473.717734453346 23 -766.149872257343 33 23.3578378661905 70 13 0 3DFACE 8 leg_half 10 746.929122901678 20 -767.779871902217 30 23.3578380791593 11 473.717734453346 21 -766.149872257343 31 23.3578378661905 12 473.642034971754 22 -769.517333598178 32 23.3578378654237 13 473.642034971754 23 -769.517333598178 33 23.3578378654237 70 13 0 3DFACE 8 leg_half 10 746.929122901678 20 -767.779871902217 30 23.3578380791593 11 473.642034971754 21 -769.517333598178 31 23.3578378654237 12 718.95840239636 22 -786.469309831082 32 23.3578380791782 13 718.95840239636 23 -786.469309831082 33 23.3578380791782 70 3 0 3DFACE 8 leg_half 10 718.95840239636 20 -786.469309831082 30 23.3578380791782 11 473.642034971754 21 -769.517333598178 31 23.3578378654237 12 473.101718395121 22 -772.841978102158 32 23.3578378645206 13 473.101718395121 23 -772.841978102158 33 23.3578378645206 70 13 0 3DFACE 8 leg_half 10 718.95840239636 20 -786.469309831082 30 23.3578380791782 11 473.101718395121 21 -772.841978102158 31 23.3578378645206 12 472.107164131826 22 -776.05993979789 32 23.3578378634987 13 472.107164131826 23 -776.05993979789 33 23.3578378634987 70 13 0 3DFACE 8 leg_half 10 718.95840239636 20 -786.469309831082 30 23.3578380791782 11 472.107164131826 21 -776.05993979789 31 23.3578378634987 12 470.677477434794 22 -779.109402076299 32 23.3578378623763 13 470.677477434794 23 -779.109402076299 33 23.3578378623763 70 13 0 3DFACE 8 leg_half 10 718.95840239636 20 -786.469309831082 30 23.3578380791782 11 470.677477434794 21 -779.109402076299 31 23.3578378623763 12 468.840122392167 22 -781.931785179335 32 23.3578378611765 13 468.840122392167 23 -781.931785179335 33 23.3578378611765 70 13 0 3DFACE 8 leg_half 10 718.95840239636 20 -786.469309831082 30 23.3578380791782 11 468.840122392167 21 -781.931785179335 31 23.3578378611765 12 466.630394345883 22 -784.472871509203 32 23.3578378599218 13 466.630394345883 23 -784.472871509203 33 23.3578378599218 70 13 0 3DFACE 8 leg_half 10 718.95840239636 20 -786.469309831082 30 23.3578380791782 11 466.630394345883 21 -784.472871509203 31 23.3578378599218 12 464.090741872935 22 -786.683847141088 32 23.3578378586363 13 464.090741872935 23 -786.683847141088 33 23.3578378586363 70 13 0 3DFACE 8 leg_half 10 718.95840239636 20 -786.469309831082 30 23.3578380791782 11 464.090741872935 21 -786.683847141088 31 23.3578378586363 12 688.787514114852 22 -801.347945386409 32 23.3578380792096 13 688.787514114852 23 -801.347945386409 33 23.3578380792096 70 3 0 3DFACE 8 leg_half 10 688.787514114852 20 -801.347945386409 30 23.3578380792096 11 464.090741872935 21 -786.683847141088 31 23.3578378586363 12 461.269951353941 22 -788.522239532049 32 23.3578378573451 13 461.269951353941 23 -788.522239532049 33 23.3578378573451 70 13 0 3DFACE 8 leg_half 10 688.787514114852 20 -801.347945386409 30 23.3578380792096 11 461.269951353941 21 -788.522239532049 31 23.3578378573451 12 458.222209793371 22 -789.952733412824 32 23.3578378560715 13 458.222209793371 23 -789.952733412824 33 23.3578378560715 70 13 0 3DFACE 8 leg_half 10 688.787514114852 20 -801.347945386409 30 23.3578380792096 11 458.222209793371 21 -789.952733412824 31 23.3578378560715 12 455.006063894518 22 -790.94784918938 32 23.3578378548415 13 455.006063894518 23 -790.94784918938 33 23.3578378548415 70 13 0 3DFACE 8 leg_half 10 688.787514114852 20 -801.347945386409 30 23.3578380792096 11 455.006063894518 21 -790.94784918938 31 23.3578378548415 12 451.683295385243 22 -791.4884708222 32 23.3578378536789 13 451.683295385243 23 -791.4884708222 33 23.3578378536789 70 13 0 3DFACE 8 leg_half 10 688.787514114852 20 -801.347945386409 30 23.3578380792096 11 451.683295385243 21 -791.4884708222 31 23.3578378536789 12 448.317734199337 22 -791.564213042815 32 23.3578378526045 13 448.317734199337 23 -791.564213042815 33 23.3578378526045 70 13 0 3DFACE 8 leg_half 10 688.787514114852 20 -801.347945386409 30 23.3578380792096 11 448.317734199337 21 -791.564213042815 31 23.3578378526045 12 0.000889626013624645 22 -791.564217518411 32 23.3578380798509 13 0.000889626013624645 23 -791.564217518411 33 23.3578380798509 70 13 0 3DFACE 8 leg_half 10 688.787514114852 20 -801.347945386409 30 23.3578380792096 11 0.000889626013624645 21 -791.564217518411 31 23.3578380798509 12 0.000467548734387557 22 -820.924226612819 32 23.3578380793719 13 0.000467548734387557 23 -820.924226612819 33 23.3578380793719 70 13 0 3DFACE 8 leg_half 10 688.787514114852 20 -801.347945386409 30 23.3578380792096 11 0.000467548734387557 21 -820.924226612819 31 23.3578380793719 12 656.932690320601 22 -812.16120098871 32 23.3578380792528 13 656.932690320601 23 -812.16120098871 33 23.3578380792528 70 3 0 3DFACE 8 leg_half 10 656.932690320601 20 -812.16120098871 30 23.3578380792528 11 0.000467548734387557 21 -820.924226612819 31 23.3578380793719 12 623.938975880552 22 -818.724058836629 32 23.3578380793071 13 623.938975880552 23 -818.724058836629 33 23.3578380793071 70 3 0 3DFACE 8 leg_half 10 623.938975880552 20 -818.724058836629 30 23.3578380793071 11 0.000467548734387557 21 -820.924226612819 31 23.3578380793719 12 590.37090239636 22 -820.924226612819 32 23.3578380793719 13 590.37090239636 23 -820.924226612819 33 23.3578380793719 70 1 0 3DFACE 8 leg_half 10 5.74034615733243e-05 20 -672.771766719091 30 212.768416817903 11 448.317783384355 21 -699.580940660874 31 195.189933989489 12 448.31777769836 22 -672.771628457813 32 212.76838602076 13 448.31777769836 23 -672.771628457813 33 212.76838602076 70 1 0 3DFACE 8 leg_half 10 448.317783384355 20 -699.580940660874 30 195.189933989489 11 5.74034615733243e-05 21 -672.771766719091 31 212.768416817903 12 6.30894498883872e-05 22 -699.581046774633 32 195.189985865263 13 6.30894498883872e-05 23 -699.581046774633 33 195.189985865263 70 1 0 3DFACE 8 leg_half 10 445.721732248607 20 -631.28782828485 30 194.729696180594 11 448.281993692064 21 -604.584376828467 31 200.565167970899 12 448.282004539076 22 -630.366836092636 32 192.392159030223 13 448.282004539076 23 -630.366836092636 33 192.392159030223 70 1 0 3DFACE 8 leg_half 10 448.281993692064 20 -604.584376828467 30 200.565167970899 11 445.721732248607 21 -631.28782828485 31 194.729696180594 12 445.721721263973 22 -605.178251275471 32 203.006401057676 13 445.721721263973 23 -605.178251275471 33 203.006401057676 70 1 0 3DFACE 8 leg_half 10 439.690620823844 20 -681.255534297249 30 171.019219664594 11 436.335620774804 21 -658.528453423172 31 187.424993609851 12 439.690615872653 22 -657.910807757804 32 186.325996375185 13 439.690615872653 23 -657.910807757804 33 186.325996375185 70 1 0 3DFACE 8 leg_half 10 436.335620774804 20 -658.528453423172 30 187.424993609851 11 439.690620823844 21 -681.255534297249 31 171.019219664594 12 436.335625756533 22 -682.017174593568 32 172.023801843262 13 436.335625756533 23 -682.017174593568 33 172.023801843262 70 1 0 3DFACE 8 leg_half 10 473.101749084159 20 -758.702384848233 30 87.3191803898169 11 472.107183407982 21 -770.747998603796 31 59.9634222143927 12 473.10173725466 22 -767.61567851106 32 59.2014293241045 13 473.10173725466 23 -767.61567851106 33 59.2014293241045 70 1 0 3DFACE 8 leg_half 10 472.107183407982 20 -770.747998603796 30 59.9634222143927 11 473.101749084159 21 -758.702384848233 31 87.3191803898169 12 472.107195414063 22 -761.701653732916 32 88.5008947532808 13 472.107195414063 23 -761.701653732916 33 88.5008947532808 70 1 0 3DFACE 8 leg_half 10 445.721746731967 20 -699.576473436421 30 149.95388604473 11 448.282017231929 21 -677.413444384727 31 165.951609244563 12 448.282018840978 22 -697.799916727886 32 148.177329336375 13 448.282018840978 23 -697.799916727886 33 148.177329336375 70 1 0 3DFACE 8 leg_half 10 448.282017231929 20 -677.413444384727 30 165.951609244563 11 445.721746731967 21 -699.576473436421 31 149.95388604473 12 445.721745102502 22 -678.931345516719 32 167.953679054935 13 445.721745102502 23 -678.931345516719 33 167.953679054935 70 1 0 3DFACE 8 leg_half 10 473.642080404707 20 -708.127668368109 30 158.505080975556 11 473.101762926689 21 -729.866935555387 31 138.627118353444 12 473.642078676977 22 -727.212938735792 32 136.614948795724 13 473.642078676977 23 -727.212938735792 33 136.614948795724 70 1 0 3DFACE 8 leg_half 10 473.101762926689 20 -729.866935555387 30 138.627118353444 11 473.642080404707 21 -708.127668368109 31 158.505080975556 12 473.101764681482 22 -710.482718842918 32 160.860131450129 13 473.101764681482 23 -710.482718842918 33 160.860131450129 70 1 0 3DFACE 8 leg_half 10 760.20182781144 20 -592.476194788978 30 53.921748202446 11 764.031424128692 21 -575.559109938211 31 39.7948544698768 12 764.031425007948 22 -579.704781244013 32 37.0766018107078 13 764.031425007948 23 -579.704781244013 33 37.0766018107078 70 1 0 3DFACE 8 leg_half 10 764.031424128692 20 -575.559109938211 30 39.7948544698768 11 760.20182781144 21 -592.476194788978 31 53.921748202446 12 760.201826420081 22 -585.915972100795 32 58.2231849183613 13 760.201826420081 23 -585.915972100795 33 58.2231849183613 70 1 0 3DFACE 8 leg_half 10 744.275059137262 20 -626.524535798612 30 76.9019484142785 11 753.576412075941 21 -604.820821451585 31 70.2039737536023 12 753.576412708658 22 -612.837280222141 32 63.214692839186 13 753.576412708658 23 -612.837280222141 33 63.214692839186 70 1 0 3DFACE 8 leg_half 10 753.576412075941 20 -604.820821451585 30 70.2039737536023 11 744.275059137262 21 -626.524535798612 31 76.9019484142785 12 744.27505834726 22 -616.515297047424 32 85.6286672029373 13 744.27505834726 23 -616.515297047424 33 85.6286672029373 70 1 0 3DFACE 8 leg_half 10 744.275027999012 20 -547.318028491407 30 105.557438942816 11 753.576386337194 21 -186.86272 31 86.2459300397311 12 753.576386337194 22 -546.993607173192 32 86.2459300397311 13 753.576386337194 23 -546.993607173192 33 86.2459300397311 70 1 0 3DFACE 8 leg_half 10 753.576386337194 20 -186.86272 30 86.2459300397311 11 744.275027999012 21 -547.318028491407 31 105.557438942816 12 744.275027999012 22 -186.86272 32 105.557438942816 13 744.275027999012 23 -186.86272 33 105.557438942816 70 1 0 3DFACE 8 leg_half 10 665.021370191738 20 -597.163793012617 30 170.061810578218 11 644.636231054623 21 -575.409716284687 31 180.525125445771 12 665.021358751182 22 -574.733894284646 32 173.91867700208 13 665.021358751182 23 -574.733894284646 33 173.91867700208 70 1 0 3DFACE 8 leg_half 10 644.636231054623 20 -575.409716284687 30 180.525125445771 11 665.021370191738 21 -597.163793012617 31 170.061810578218 12 644.636242951136 22 -598.733544865996 32 176.514545976725 13 644.636242951136 23 -598.733544865996 33 176.514545976725 70 1 0 3DFACE 8 leg_half 10 792.007213497075 20 -567.289596867332 30 47.2582811561368 11 787.130186503031 21 -581.689044301674 31 68.844999694228 12 792.007215701535 22 -572.529418663124 32 45.597263875134 13 792.007215701535 23 -572.529418663124 33 45.597263875134 70 1 0 3DFACE 8 leg_half 10 787.130186503031 20 -581.689044301674 30 68.844999694228 11 792.007213497075 21 -567.289596867332 31 47.2582811561368 12 787.130182929858 22 -573.195904769668 32 71.5373148305873 13 787.130182929858 23 -573.195904769668 33 71.5373148305873 70 1 0 3DFACE 8 leg_half 10 451.683300548936 20 -581.654891394158 30 241.574352401781 11 455.006085098156 21 -613.111377811381 31 235.617099433291 12 455.006069025402 22 -581.599775817026 32 241.035583090668 13 455.006069025402 23 -581.599775817026 33 241.035583090668 70 1 0 3DFACE 8 leg_half 10 455.006085098156 20 -613.111377811381 30 235.617099433291 11 451.683300548936 21 -581.654891394158 31 241.574352401781 12 451.683316658874 22 -613.239395048328 32 236.143333156642 13 451.683316658874 23 -613.239395048328 33 236.143333156642 70 1 0 3DFACE 8 leg_half 10 448.317739367628 20 -581.662614799822 30 241.649835054513 11 451.683316658874 21 -613.239395048328 31 236.143333156642 12 451.683300548936 22 -581.654891394158 32 241.574352401781 13 451.683300548936 23 -581.654891394158 33 241.574352401781 70 1 0 3DFACE 8 leg_half 10 451.683316658874 20 -613.239395048328 30 236.143333156642 11 448.317739367628 21 -581.662614799822 31 241.649835054513 12 448.317755482775 22 -613.257331879904 32 236.217059590145 13 448.317755482775 23 -613.257331879904 33 236.217059590145 70 1 0 3DFACE 8 leg_half 10 684.332877982946 20 -594.96003923808 30 161.00288323661 11 665.021358751182 21 -574.733894284646 31 173.91867700208 12 684.332867182503 22 -573.785120021053 32 164.643953396873 13 684.332867182503 23 -573.785120021053 33 164.643953396873 70 1 0 3DFACE 8 leg_half 10 665.021358751182 20 -574.733894284646 30 173.91867700208 11 684.332877982946 21 -594.96003923808 31 161.00288323661 12 665.021370191738 22 -597.163793012617 32 170.061810578218 13 665.021370191738 23 -597.163793012617 33 170.061810578218 70 1 0 3DFACE 8 leg_half 10 1.90727753096809e-05 20 -581.662862311522 30 241.649831219402 11 448.317755482775 21 -613.257331879904 31 236.217059590145 12 448.317739367628 22 -581.662614799822 32 241.649835054513 13 448.317739367628 23 -581.662614799822 33 241.649835054513 70 1 0 3DFACE 8 leg_half 10 448.317755482775 20 -613.257331879904 30 236.217059590145 11 1.90727753096809e-05 21 -581.662862311522 31 241.649831219402 12 3.51879034228841e-05 22 -613.257541505822 32 236.217062269571 13 3.51879034228841e-05 23 -613.257541505822 33 236.217062269571 70 1 0 3DFACE 8 leg_half 10 473.642053400866 20 -608.036762247305 30 214.756927441262 11 473.101749084159 21 -636.941767787464 31 209.079797462849 12 473.642065047928 22 -635.720877069339 32 205.981095949127 13 473.642065047928 23 -635.720877069339 33 205.981095949127 70 1 0 3DFACE 8 leg_half 10 473.101749084159 20 -636.941767787464 30 209.079797462849 11 473.642053400866 21 -608.036762247305 31 214.756927441262 12 473.10173725466 22 -608.824016722648 32 217.993091128508 13 473.10173725466 23 -608.824016722648 33 217.993091128508 70 1 0 3DFACE 8 leg_half 10 473.101762926689 20 -688.249705748186 30 180.244348164837 11 472.107211244211 21 -712.762199391597 31 163.139611998578 12 473.101764681482 22 -710.482718842918 32 160.860131450129 13 473.101764681482 23 -710.482718842918 33 160.860131450129 70 1 0 3DFACE 8 leg_half 10 472.107211244211 20 -712.762199391597 30 163.139611998578 11 473.101762926689 21 -688.249705748186 31 180.244348164837 12 472.107209463225 22 -690.197307940468 32 182.813182295542 13 472.107209463225 23 -690.197307940468 33 182.813182295542 70 1 0 3DFACE 8 leg_half 10 472.107209463225 20 -690.197307940468 30 182.813182295542 11 470.677525329952 21 -714.922321501014 31 165.299734107777 12 472.107211244211 22 -712.762199391597 32 163.139611998578 13 472.107211244211 23 -712.762199391597 33 163.139611998578 70 1 0 3DFACE 8 leg_half 10 470.677525329952 20 -714.922321501014 30 165.299734107777 11 472.107209463225 21 -690.197307940468 31 182.813182295542 12 470.677523524142 22 -692.042929592268 32 185.247506781241 13 470.677523524142 23 -692.042929592268 33 185.247506781241 70 1 0 3DFACE 8 leg_half 10 453.575559198051 20 -626.958539673324 30 183.741680540481 11 454.431253196946 21 -601.562294416642 31 188.142314217608 12 454.431263343628 22 -625.680128816835 32 180.496989380173 13 454.431263343628 23 -625.680128816835 33 180.496989380173 70 1 0 3DFACE 8 leg_half 10 454.431253196946 20 -601.562294416642 30 188.142314217608 11 453.575559198051 21 -626.958539673324 31 183.741680540481 12 453.575548860337 22 -602.386639077964 32 191.530943822063 13 453.575548860337 23 -602.386639077964 33 191.530943822063 70 1 0 3DFACE 8 leg_half 10 448.317755482775 20 -613.257331879904 30 236.217059590145 11 451.683329511579 21 -643.789222672817 31 226.45907411243 12 451.683316658874 22 -613.239395048328 32 236.143333156642 13 451.683316658874 23 -613.239395048328 33 236.143333156642 70 1 0 3DFACE 8 leg_half 10 451.683329511579 20 -643.789222672817 30 226.45907411243 11 448.317755482775 21 -613.257331879904 31 236.217059590145 12 448.317768339636 22 -643.81703834892 32 226.52966896396 13 448.317768339636 23 -643.81703834892 33 226.52966896396 70 1 0 3DFACE 8 leg_half 10 717.894057585081 20 -597.802053886837 30 172.685609040578 11 736.997685757261 21 -613.69735635364 31 150.084181819366 12 736.997677401125 22 -593.835505140242 32 156.380365045419 13 736.997677401125 23 -593.835505140242 33 156.380365045419 70 1 0 3DFACE 8 leg_half 10 736.997685757261 20 -613.69735635364 30 150.084181819366 11 717.894057585081 21 -597.802053886837 31 172.685609040578 12 717.894066860413 22 -619.848757614325 32 165.696830164561 13 717.894066860413 23 -619.848757614325 33 165.696830164561 70 1 0 3DFACE 8 leg_half 10 429.267752143919 20 -606.639691213326 30 209.013906507055 11 0.0162646316092562 21 -578.813809543233 31 213.798660182835 12 429.267737950976 22 -578.813572557816 32 213.798663854844 13 429.267737950976 23 -578.813572557816 33 213.798663854844 70 1 0 3DFACE 8 leg_half 10 0.0162646316092562 20 -578.813809543233 30 213.798660182835 11 429.267752143919 21 -606.639691213326 31 209.013906507055 12 0.0162788245333154 22 -606.639891924184 32 209.013909072529 13 0.0162788245333154 23 -606.639891924184 33 209.013909072529 70 1 0 3DFACE 8 leg_half 10 702.221343105619 20 -592.16215835415 30 149.501676557166 11 684.332867182503 21 -573.785120021053 31 164.643953396873 12 702.221333117862 22 -572.580560654599 32 152.868771861916 13 702.221333117862 23 -572.580560654599 33 152.868771861916 70 1 0 3DFACE 8 leg_half 10 684.332867182503 20 -573.785120021053 30 164.643953396873 11 702.221343105619 21 -592.16215835415 31 149.501676557166 12 684.332877982946 22 -594.96003923808 32 161.00288323661 13 684.332877982946 23 -594.96003923808 33 161.00288323661 70 1 0 3DFACE 8 leg_half 10 432.838929652884 20 -606.570796271198 30 208.73070710808 11 429.267737950976 21 -578.813572557816 31 213.798663854844 12 432.838915479952 22 -578.783910422824 32 213.508718295381 13 432.838915479952 23 -578.783910422824 33 213.508718295381 70 1 0 3DFACE 8 leg_half 10 429.267737950976 20 -578.813572557816 30 213.798663854844 11 432.838929652884 21 -606.570796271198 31 208.73070710808 12 429.267752143919 22 -606.639691213326 32 209.013906507055 13 429.267752143919 23 -606.639691213326 33 209.013906507055 70 1 0 3DFACE 8 leg_half 10 436.335601310833 20 -606.385574583813 30 207.969323546969 11 432.838915479952 21 -578.783910422824 31 213.508718295381 12 436.335587191701 22 -578.704166932226 32 212.72919754513 13 436.335587191701 23 -578.704166932226 33 212.72919754513 70 1 0 3DFACE 8 leg_half 10 432.838915479952 20 -578.783910422824 30 213.508718295381 11 436.335601310833 21 -606.385574583813 31 207.969323546969 12 432.838929652884 22 -606.570796271198 32 208.73070710808 13 432.838929652884 23 -606.570796271198 33 208.73070710808 70 1 0 3DFACE 8 leg_half 10 718.363090933403 20 -588.820775333035 30 135.766293848309 11 702.221333117862 21 -572.580560654599 31 152.868771861916 12 718.363081916203 22 -571.142011532184 32 138.806193017976 13 718.363081916203 23 -571.142011532184 33 138.806193017976 70 1 0 3DFACE 8 leg_half 10 702.221333117862 20 -572.580560654599 30 152.868771861916 11 718.363090933403 21 -588.820775333035 31 135.766293848309 12 702.221343105619 22 -592.16215835415 32 149.501676557166 13 702.221343105619 23 -592.16215835415 33 149.501676557166 70 1 0 3DFACE 8 leg_half 10 764.031424128692 20 -589.417441849078 30 25.9365225576139 11 764.531578361879 21 -577.829946771796 31 23.3578379990944 12 764.267940787943 22 -584.829097037034 32 23.3578379974678 13 764.267940787943 23 -584.829097037034 33 23.3578379974678 70 1 0 3DFACE 8 leg_half 10 764.531578361879 20 -577.829946771796 30 23.3578379990944 11 764.031424128692 21 -589.417441849078 31 25.9365225576139 12 764.031425007948 22 -586.699189190326 32 30.0821938636906 13 764.031425007948 23 -586.699189190326 33 30.0821938636906 70 1 0 3DFACE 8 leg_half 10 792.007217306199 20 -592.860317128213 30 27.8714369630177 11 792.00721584731 21 -595.005500745675 31 23.3578380039372 12 792.574093434967 22 -584.829110641297 32 23.3578380063606 13 792.574093434967 23 -584.829110641297 33 23.3578380063606 70 0 0 3DFACE 8 leg_half 10 458.222252930963 20 -760.983658189012 30 122.358116586891 11 455.006112926336 21 -744.320489807817 31 149.585310783685 12 455.006107255299 22 -761.852698834952 32 122.846524872111 13 455.006107255299 23 -761.852698834952 33 122.846524872111 70 1 0 3DFACE 8 leg_half 10 455.006112926336 20 -744.320489807817 30 149.585310783685 11 458.222252930963 21 -760.983658189012 31 122.358116586891 12 458.222258577851 22 -743.526108574926 32 148.983037664963 13 458.222258577851 23 -743.526108574926 33 148.983037664963 70 1 0 3DFACE 8 leg_half 10 455.006107255299 20 -761.852698834952 30 122.846524872111 11 451.683344551435 21 -744.752057529093 31 149.912511141786 12 451.683338867278 22 -762.324827081794 32 123.111865415064 13 451.683338867278 23 -762.324827081794 33 123.111865415064 70 1 0 3DFACE 8 leg_half 10 451.683344551435 20 -744.752057529093 30 149.912511141786 11 455.006107255299 21 -761.852698834952 31 122.846524872111 12 455.006112926336 22 -744.320489807817 32 149.585310783685 13 455.006112926336 23 -744.320489807817 33 149.585310783685 70 1 0 3DFACE 8 leg_half 10 451.683338867278 20 -762.324827081794 30 123.111865415064 11 448.317783384355 21 -744.812521381181 31 149.958353264626 12 448.31777769836 22 -762.390973409752 32 123.149041059795 13 448.31777769836 23 -762.390973409752 33 123.149041059795 70 1 0 3DFACE 8 leg_half 10 448.317783384355 20 -744.812521381181 30 149.958353264626 11 451.683338867278 21 -762.324827081794 31 123.111865415064 12 451.683344551435 22 -744.752057529093 32 149.912511141786 13 451.683344551435 23 -744.752057529093 33 149.912511141786 70 1 0 3DFACE 8 leg_half 10 448.31777769836 20 -762.390973409752 30 123.149041059795 11 6.30894498883872e-05 21 -744.812573256956 31 149.958459378386 12 5.74034615733243e-05 22 -762.391004206896 32 123.149179321074 13 5.74034615733243e-05 23 -762.391004206896 33 123.149179321074 70 1 0 3DFACE 8 leg_half 10 6.30894498883872e-05 20 -744.812573256956 30 149.958459378386 11 448.31777769836 21 -762.390973409752 31 123.149041059795 12 448.317783384355 22 -744.812521381181 32 149.958353264626 13 448.317783384355 23 -744.812521381181 33 149.958353264626 70 1 0 3DFACE 8 leg_half 10 461.269937419119 20 -549.571376162653 30 239.686382351024 11 464.090746745054 21 -581.165076540648 31 236.786190394896 12 464.090727919739 22 -549.540509167097 32 237.849027336606 13 464.090727919739 23 -549.540509167097 33 237.849027336606 70 1 0 3DFACE 8 leg_half 10 464.090746745054 20 -581.165076540648 30 236.786190394896 11 461.269937419119 21 -549.571376162653 31 239.686382351024 12 461.269956337624 22 -581.352493258009 32 238.618284093782 13 461.269956337624 23 -581.352493258009 33 238.618284093782 70 1 0 3DFACE 8 leg_half 10 602.133302212101 20 -683.695422993079 30 134.072835602987 11 454.667769896794 21 -665.362499898554 31 150.056742450276 12 602.13330076513 22 -665.362464994464 32 150.056725386733 13 602.13330076513 23 -665.362464994464 33 150.056725386733 70 1 0 3DFACE 8 leg_half 10 454.667769896794 20 -665.362499898554 30 150.056742450276 11 602.133302212101 21 -683.695422993079 31 134.072835602987 12 454.667771343765 22 -683.695448366281 32 134.072860976189 13 454.667771343765 23 -683.695448366281 33 134.072860976189 70 1 0 3DFACE 8 leg_half 10 623.546368087822 20 -683.011825308716 30 133.389237918693 11 602.13330076513 21 -665.362464994464 31 150.056725386733 12 623.546366648706 22 -664.778393037384 32 149.286354566558 13 623.546366648706 23 -664.778393037384 33 149.286354566558 70 1 0 3DFACE 8 leg_half 10 602.13330076513 20 -665.362464994464 30 150.056725386733 11 623.546368087822 21 -683.011825308716 31 133.389237918693 12 602.133302212101 22 -683.695422993079 32 134.072835602987 13 602.133302212101 23 -683.695422993079 33 134.072835602987 70 1 0 3DFACE 8 leg_half 10 644.636264956545 20 -680.297547066858 30 130.674959677109 11 623.546366648706 21 -664.778393037384 31 149.286354566558 12 644.636263548619 22 -662.459295238253 32 146.227531781659 13 644.636263548619 23 -662.459295238253 33 146.227531781659 70 1 0 3DFACE 8 leg_half 10 623.546366648706 20 -664.778393037384 30 149.286354566558 11 644.636264956545 21 -680.297547066858 31 130.674959677109 12 623.546368087822 22 -683.011825308716 32 133.389237918693 13 623.546368087822 23 -683.011825308716 33 133.389237918693 70 1 0 3DFACE 8 leg_half 10 450.471101097006 20 -603.912334485117 30 197.802609624747 11 452.246977834961 21 -577.321948654809 31 199.217284688636 12 452.246991021541 22 -603.175034087969 32 194.771794391524 13 452.246991021541 23 -603.175034087969 33 194.771794391524 70 1 0 3DFACE 8 leg_half 10 452.246977834961 20 -577.321948654809 30 199.217284688636 11 450.471101097006 21 -603.912334485117 31 197.802609624747 12 450.471087696265 22 -577.639374325348 32 202.320298229792 13 450.471087696265 23 -577.639374325348 33 202.320298229792 70 1 0 3DFACE 8 leg_half 10 473.642020846985 20 -186.86272 30 220.692200425201 11 473.10170430358 21 -549.308104906071 31 224.014968929071 12 473.642020846985 22 -549.252284780773 32 220.6922004252 13 473.642020846985 23 -549.252284780773 33 220.6922004252 70 1 0 3DFACE 8 leg_half 10 473.10170430358 20 -549.308104906071 30 224.014968929071 11 473.642020846985 21 -186.86272 31 220.692200425201 12 473.10170430358 22 -186.86272 32 224.014968929072 13 473.10170430358 23 -186.86272 33 224.014968929072 70 1 0 3DFACE 8 leg_half 10 470.677463405893 20 -186.86272 30 230.27885636425 11 472.107150072447 21 -549.362133988305 31 227.231114817978 12 472.107150072447 22 -186.86272 32 227.231114817978 13 472.107150072447 23 -186.86272 33 227.231114817978 70 1 0 3DFACE 8 leg_half 10 472.107150072447 20 -549.362133988305 30 227.231114817978 11 470.677463405893 21 -186.86272 31 230.27885636425 12 470.677463405893 22 -549.413334136112 32 230.27885636425 13 470.677463405893 23 -549.413334136112 33 230.27885636425 70 1 0 3DFACE 8 leg_half 10 470.677463405893 20 -186.86272 30 230.27885636425 11 468.840108391474 21 -549.460721801574 31 233.09964686487 12 470.677463405893 22 -549.413334136112 32 230.27885636425 13 470.677463405893 23 -549.413334136112 33 230.27885636425 70 1 0 3DFACE 8 leg_half 10 468.840108391474 20 -549.460721801574 30 233.09964686487 11 470.677463405893 21 -186.86272 31 230.27885636425 12 468.840108391474 22 -186.86272 32 233.09964686487 13 468.840108391474 23 -186.86272 33 233.09964686487 70 1 0 3DFACE 8 leg_half 10 466.630380370588 20 -186.86272 30 235.63929931572 11 468.840108391474 21 -549.460721801574 31 233.09964686487 12 468.840108391474 22 -186.86272 32 233.09964686487 13 468.840108391474 23 -186.86272 33 233.09964686487 70 1 0 3DFACE 8 leg_half 10 468.840108391474 20 -549.460721801574 30 233.09964686487 11 466.630380370588 21 -186.86272 31 235.63929931572 12 466.630380370588 22 -549.503386674047 32 235.63929931572 13 466.630380370588 23 -549.503386674047 33 235.63929931572 70 1 0 3DFACE 8 leg_half 10 439.690607723364 20 -632.698039036468 30 198.308899357094 11 436.335601310833 21 -606.385574583813 31 207.969323546969 12 439.690596528004 22 -606.087584234742 32 206.744381898986 13 439.690596528004 23 -606.087584234742 33 206.744381898986 70 1 0 3DFACE 8 leg_half 10 436.335601310833 20 -606.385574583813 30 207.969323546969 11 439.690607723364 21 -632.698039036468 31 198.308899357094 12 436.335612575248 22 -633.16016763801 32 199.481809374145 13 436.335612575248 23 -633.16016763801 33 199.481809374145 70 1 0 3DFACE 8 leg_half 10 732.466058322552 20 -599.989404866694 30 115.292482897529 11 744.275046789786 21 -580.758079568763 31 102.623043056121 12 744.275052115393 22 -593.416610482006 32 98.6103038030606 13 744.275052115393 23 -593.416610482006 33 98.6103038030606 70 1 0 3DFACE 8 leg_half 10 744.275046789786 20 -580.758079568763 30 102.623043056121 11 732.466058322552 21 -599.989404866694 31 115.292482897529 12 732.466052014781 22 -584.996349297051 32 120.045263691758 13 732.466052014781 23 -584.996349297051 33 120.045263691758 70 1 0 3DFACE 8 leg_half 10 472.107195414063 20 -638.12348215123 30 212.079066347413 11 470.677518140403 21 -666.658744301589 31 201.891525102388 12 472.10720415349 22 -665.162054034067 32 199.228411696097 13 472.10720415349 23 -665.162054034067 33 199.228411696097 70 1 0 3DFACE 8 leg_half 10 470.677518140403 20 -666.658744301589 30 201.891525102388 11 472.107195414063 21 -638.12348215123 31 212.079066347413 12 470.677509279169 22 -639.24331958749 32 214.92128705308 13 470.677509279169 23 -639.24331958749 33 214.92128705308 70 1 0 3DFACE 8 leg_half 10 4.80447490185498e-05 20 -643.817211330157 30 226.529683259707 11 448.31777769836 21 -672.771628457813 31 212.76838602076 12 448.317768339636 22 -643.81703834892 32 226.52966896396 13 448.317768339636 23 -643.81703834892 33 226.52966896396 70 1 0 3DFACE 8 leg_half 10 448.31777769836 20 -672.771628457813 30 212.76838602076 11 4.80447490185498e-05 21 -643.817211330157 31 226.529683259707 12 5.74034615733243e-05 22 -672.771766719091 32 212.768416817903 13 5.74034615733243e-05 23 -672.771766719091 33 212.768416817903 70 1 0 3DFACE 8 leg_half 10 436.335620774804 20 -658.528453423172 30 187.424993609851 11 432.838940960221 21 -633.447412164356 31 200.210851816573 12 436.335612575248 22 -633.16016763801 32 199.481809374145 13 436.335612575248 23 -633.16016763801 33 199.481809374145 70 1 0 3DFACE 8 leg_half 10 432.838940960221 20 -633.447412164356 30 200.210851816573 11 436.335620774804 21 -658.528453423172 31 187.424993609851 12 432.838949191021 22 -658.912362146436 32 188.108094342889 13 432.838949191021 23 -658.912362146436 33 188.108094342889 70 1 0 3DFACE 8 leg_half 10 439.690615872653 20 -657.910807757804 30 186.325996375185 11 436.335612575248 21 -633.16016763801 31 199.481809374145 12 439.690607723364 22 -632.698039036468 32 198.308899357094 13 439.690607723364 23 -632.698039036468 33 198.308899357094 70 1 0 3DFACE 8 leg_half 10 436.335612575248 20 -633.16016763801 30 199.481809374145 11 439.690615872653 21 -657.910807757804 31 186.325996375185 12 436.335620774804 22 -658.528453423172 32 187.424993609851 13 436.335620774804 23 -658.528453423172 33 187.424993609851 70 1 0 3DFACE 8 leg_half 10 442.839485482368 20 -657.071290040049 30 184.832214227177 11 439.690607723364 21 -632.698039036468 31 198.308899357094 12 442.839477401402 22 -632.069903787681 32 196.714653208256 13 442.839477401402 23 -632.069903787681 33 196.714653208256 70 1 0 3DFACE 8 leg_half 10 439.690607723364 20 -632.698039036468 30 198.308899357094 11 442.839485482368 21 -657.071290040049 31 184.832214227177 12 439.690615872653 22 -657.910807757804 32 186.325996375185 13 439.690615872653 23 -657.910807757804 33 186.325996375185 70 1 0 3DFACE 8 leg_half 10 445.721740244506 20 -656.026027291755 30 182.972342518915 11 442.839477401402 21 -632.069903787681 31 196.714653208256 12 445.721732248607 22 -631.28782828485 32 194.729696180594 13 445.721732248607 23 -631.28782828485 33 194.729696180594 70 1 0 3DFACE 8 leg_half 10 442.839477401402 20 -632.069903787681 30 196.714653208256 11 445.721740244506 21 -656.026027291755 31 182.972342518915 12 442.839485482368 22 -657.071290040049 32 184.832214227177 13 442.839485482368 23 -657.071290040049 33 184.832214227177 70 1 0 3DFACE 8 leg_half 10 453.575566723046 20 -650.239827098532 30 172.676755002411 11 454.431263343628 21 -625.680128816835 31 180.496989380173 12 454.431270729568 22 -648.531199395009 32 169.63653352158 13 454.431270729568 23 -648.531199395009 33 169.63653352158 70 1 0 3DFACE 8 leg_half 10 454.431263343628 20 -625.680128816835 30 180.496989380173 11 453.575566723046 21 -650.239827098532 31 172.676755002411 12 453.575559198051 22 -626.958539673324 32 183.741680540481 13 453.575559198051 23 -626.958539673324 33 183.741680540481 70 1 0 3DFACE 8 leg_half 10 452.246960920592 20 -548.907571431286 30 200.172233713933 11 453.575519157163 21 -186.86272 31 196.84465290436 12 453.575519157163 22 -548.851670228397 32 196.84465290436 13 453.575519157163 23 -548.851670228397 33 196.84465290436 70 1 0 3DFACE 8 leg_half 10 453.575519157163 20 -186.86272 30 196.84465290436 11 452.246960920592 21 -548.907571431286 31 200.172233713933 12 452.246960920592 22 -186.86272 32 200.172233713933 13 452.246960920592 23 -186.86272 33 200.172233713933 70 1 0 3DFACE 8 leg_half 10 453.575519157163 20 -548.851670228397 30 196.84465290436 11 454.431223909685 21 -186.86272 31 193.36533825795 12 454.431223909685 22 -548.793220154026 32 193.36533825795 13 454.431223909685 23 -548.793220154026 33 193.36533825795 70 1 0 3DFACE 8 leg_half 10 454.431223909685 20 -186.86272 30 193.36533825795 11 453.575519157163 21 -548.851670228397 31 196.84465290436 12 453.575519157163 22 -186.86272 32 196.84465290436 13 453.575519157163 23 -186.86272 33 196.84465290436 70 1 0 3DFACE 8 leg_half 10 454.431223909685 20 -548.793220154026 30 193.36533825795 11 454.797637205561 21 -186.86272 31 189.801126938625 12 454.797637205561 22 -548.733344026199 32 189.801126938624 13 454.797637205561 23 -548.733344026199 33 189.801126938624 70 1 0 3DFACE 8 leg_half 10 454.797637205561 20 -186.86272 30 189.801126938625 11 454.431223909685 21 -548.793220154026 31 193.36533825795 12 454.431223909685 22 -186.86272 32 193.36533825795 13 454.431223909685 23 -186.86272 33 193.36533825795 70 1 0 3DFACE 8 leg_half 10 454.797637205561 20 -548.733344026199 30 189.801126938624 11 454.66772029492 21 -186.86272 31 186.220486963908 12 454.66772029492 22 -548.673192057237 32 186.220486963908 13 454.66772029492 23 -548.673192057237 33 186.220486963908 70 1 0 3DFACE 8 leg_half 10 454.66772029492 20 -186.86272 30 186.220486963908 11 454.797637205561 21 -548.733344026199 31 189.801126938624 12 454.797637205561 22 -186.86272 32 189.801126938625 13 454.797637205561 23 -186.86272 33 189.801126938625 70 1 0 3DFACE 8 leg_half 10 56.126785226813 20 -233.578399999998 30 1315.22236639941 11 18.7226850109546 21 -233.578399999999 31 268.426375476513 12 18.7226850109546 22 -233.578399999998 32 1315.22236639941 13 18.7226850109546 23 -233.578399999998 33 1315.22236639941 70 1 0 3DFACE 8 leg_half 10 18.7226850109546 20 -233.578399999999 30 268.426375476513 11 56.126785226813 21 -233.578399999998 31 1315.22236639941 12 56.126785226813 22 -233.578399999998 32 268.426375476513 13 56.126785226813 23 -233.578399999998 33 268.426375476513 70 1 0 3DFACE 8 leg_half 10 18.7226850109544 20 -186.862719999999 30 268.426375476513 11 56.126785226813 21 -233.578399999998 31 268.426375476513 12 56.1267852268127 22 -186.862719999999 32 268.426375476513 13 56.1267852268127 23 -186.862719999999 33 268.426375476513 70 1 0 3DFACE 8 leg_half 10 56.126785226813 20 -233.578399999998 30 268.426375476513 11 18.7226850109544 21 -186.862719999999 31 268.426375476513 12 18.7226850109546 22 -233.578399999999 32 268.426375476513 13 18.7226850109546 23 -233.578399999999 33 268.426375476513 70 1 0 3DFACE 8 leg_half 10 18.7226850109544 20 -186.862719999999 30 1315.22236639941 11 18.7226850109546 21 -233.578399999999 31 268.426375476513 12 18.7226850109544 22 -186.862719999999 32 268.426375476513 13 18.7226850109544 23 -186.862719999999 33 268.426375476513 70 1 0 3DFACE 8 leg_half 10 18.7226850109546 20 -233.578399999999 30 268.426375476513 11 18.7226850109544 21 -186.862719999999 31 1315.22236639941 12 18.7226850109546 22 -233.578399999998 32 1315.22236639941 13 18.7226850109546 23 -233.578399999998 33 1315.22236639941 70 1 0 3DFACE 8 leg_half 10 56.126785226813 20 -233.578399999998 30 1315.22236639941 11 18.7226850109544 21 -186.862719999999 31 1315.22236639941 12 56.1267852268127 22 -186.862719999999 32 1315.22236639941 13 56.1267852268127 23 -186.862719999999 33 1315.22236639941 70 1 0 3DFACE 8 leg_half 10 18.7226850109544 20 -186.862719999999 30 1315.22236639941 11 56.126785226813 21 -233.578399999998 31 1315.22236639941 12 18.7226850109546 22 -233.578399999998 32 1315.22236639941 13 18.7226850109546 23 -233.578399999998 33 1315.22236639941 70 1 0 3DFACE 8 leg_half 10 56.126785226813 20 -233.578399999998 30 1315.22236639941 11 56.1267852268127 21 -186.862719999999 31 268.426375476513 12 56.126785226813 22 -233.578399999998 32 268.426375476513 13 56.126785226813 23 -233.578399999998 33 268.426375476513 70 1 0 3DFACE 8 leg_half 10 56.1267852268127 20 -186.862719999999 30 268.426375476513 11 56.126785226813 21 -233.578399999998 31 1315.22236639941 12 56.1267852268127 22 -186.862719999999 32 1315.22236639941 13 56.1267852268127 23 -186.862719999999 33 1315.22236639941 70 1 0 3DFACE 8 arm_half 10 1080.07459980683 20 -794.16656 30 2070.08261515828 11 1071.44060782234 21 -804.053109826237 31 2084.86773745469 12 1080.07459980683 22 -800.976532807249 32 2069.41239686438 13 1080.07459980683 23 -800.976532807249 33 2069.41239686438 70 1 0 3DFACE 8 arm_half 10 1071.44060782234 20 -804.053109826237 30 2084.86773745469 11 1080.07459980683 21 -794.16656 31 2070.08261515828 12 1071.44060782234 22 -794.16656 32 2085.84074377127 13 1071.44060782234 23 -794.16656 33 2085.84074377127 70 1 0 3DFACE 8 arm_half 10 1071.44060782234 20 -794.16656 30 2085.84074377127 11 1059.82120360007 21 -806.749751362303 31 2098.41445288964 12 1071.44060782234 22 -804.053109826237 32 2084.86773745469 13 1071.44060782234 23 -804.053109826237 33 2084.86773745469 70 1 0 3DFACE 8 arm_half 10 1059.82120360007 20 -806.749751362303 30 2098.41445288964 11 1071.44060782234 21 -794.16656 31 2085.84074377127 12 1059.82120360007 22 -794.16656 32 2099.6528550515 13 1059.82120360007 23 -794.16656 33 2099.6528550515 70 1 0 3DFACE 8 arm_half 10 1045.6629890274 20 -808.96283299496 30 2109.5319806407 11 1059.82120360007 21 -794.16656 31 2099.6528550515 12 1045.6629890274 22 -794.16656 32 2110.98818804762 13 1045.6629890274 23 -794.16656 33 2110.98818804762 70 1 0 3DFACE 8 arm_half 10 1059.82120360007 20 -794.16656 30 2099.6528550515 11 1045.6629890274 21 -808.96283299496 31 2109.5319806407 12 1059.82120360007 22 -806.749751362303 32 2098.41445288964 13 1059.82120360007 23 -806.749751362303 33 2098.41445288964 70 1 0 3DFACE 8 arm_half 10 1029.5099682249 20 -810.607297088473 30 2117.79302936366 11 1045.6629890274 21 -794.16656 31 2110.98818804762 12 1029.5099682249 22 -794.16656 32 2119.41108028308 13 1029.5099682249 23 -794.16656 33 2119.41108028308 70 1 0 3DFACE 8 arm_half 10 1045.6629890274 20 -794.16656 30 2110.98818804762 11 1029.5099682249 21 -810.607297088473 31 2117.79302936366 12 1045.6629890274 22 -808.96283299496 32 2109.5319806407 13 1045.6629890274 23 -808.96283299496 33 2109.5319806407 70 1 0 3DFACE 8 arm_half 10 1011.98285238754 20 -811.619948505454 30 2122.88013508281 11 1029.5099682249 21 -794.16656 31 2119.41108028308 12 1011.98285238754 22 -794.16656 32 2124.59784829519 13 1011.98285238754 23 -794.16656 33 2124.59784829519 70 1 0 3DFACE 8 arm_half 10 1029.5099682249 20 -794.16656 30 2119.41108028308 11 1011.98285238754 21 -811.619948505454 31 2122.88013508281 12 1029.5099682249 22 -810.607297088473 32 2117.79302936366 13 1029.5099682249 23 -810.607297088473 33 2117.79302936366 70 1 0 3DFACE 8 arm_half 10 993.755281646067 20 -811.961287013471 30 2124.59486637848 11 1011.98285238754 21 -794.16656 31 2124.59784829519 12 993.755281646067 22 -794.16656 32 2126.34617316296 13 993.755281646067 23 -794.16656 33 2126.34617316296 70 1 0 3DFACE 8 arm_half 10 1011.98285238754 20 -794.16656 30 2124.59784829519 11 993.755281646067 21 -811.961287013471 31 2124.59486637848 12 1011.98285238754 22 -811.619948505454 32 2122.88013508281 13 1011.98285238754 23 -811.619948505454 33 2122.88013508281 70 1 0 3DFACE 8 arm_half 10 947.039601646067 20 -835.292444325637 30 2241.80011766922 11 993.755281646067 21 -794.16656 31 2245.84761107459 12 947.039601646067 22 -794.16656 32 2245.84761107459 13 947.039601646067 23 -794.16656 33 2245.84761107459 70 1 0 3DFACE 8 arm_half 10 993.755281646067 20 -794.16656 30 2245.84761107459 11 947.039601646067 21 -835.292444325637 31 2241.80011766922 12 993.755281646067 22 -835.292444325637 32 2241.80011766922 13 993.755281646067 23 -835.292444325637 33 2241.80011766922 70 1 0 3DFACE 8 arm_half 10 947.039601646067 20 -835.292444325637 30 2241.80011766922 11 900.323921646066 21 -794.16656 31 2200.28420494853 12 900.323921646066 22 -826.396760603478 32 2197.11219961575 13 900.323921646066 23 -826.396760603478 33 2197.11219961575 70 1 0 3DFACE 8 arm_half 10 900.323921646066 20 -794.16656 30 2200.28420494853 11 947.039601646067 21 -835.292444325637 31 2241.80011766922 12 947.039601646067 22 -794.16656 32 2245.84761107459 13 947.039601646067 23 -794.16656 33 2245.84761107459 70 1 0 3DFACE 8 arm_half 10 900.323921646066 20 -794.16656 30 2200.28420494853 11 853.608241646067 21 -835.292444325637 31 2241.80011766922 12 900.323921646066 22 -826.396760603478 32 2197.11219961575 13 900.323921646066 23 -826.396760603478 33 2197.11219961575 70 1 0 3DFACE 8 arm_half 10 853.608241646067 20 -835.292444325637 30 2241.80011766922 11 900.323921646066 21 -794.16656 31 2200.28420494853 12 853.608241646067 22 -794.16656 32 2245.84761107459 13 853.608241646067 23 -794.16656 33 2245.84761107459 70 1 0 3DFACE 8 arm_half 10 853.608241646067 20 -835.292444325637 30 2241.80011766922 11 806.892561646067 21 -794.16656 31 2200.28420494853 12 806.892561646067 22 -826.396760603478 32 2197.11219961575 13 806.892561646067 23 -826.396760603478 33 2197.11219961575 70 1 0 3DFACE 8 arm_half 10 806.892561646067 20 -794.16656 30 2200.28420494853 11 853.608241646067 21 -835.292444325637 31 2241.80011766922 12 853.608241646067 22 -794.16656 32 2245.84761107459 13 853.608241646067 23 -794.16656 33 2245.84761107459 70 1 0 3DFACE 8 arm_half 10 806.892561646067 20 -794.16656 30 2200.28420494853 11 760.176881646066 21 -835.292444325637 31 2241.80011766922 12 806.892561646067 22 -826.396760603478 32 2197.11219961575 13 806.892561646067 23 -826.396760603478 33 2197.11219961575 70 1 0 3DFACE 8 arm_half 10 760.176881646066 20 -835.292444325637 30 2241.80011766922 11 806.892561646067 21 -794.16656 31 2200.28420494853 12 760.176881646066 22 -794.16656 32 2245.84761107459 13 760.176881646066 23 -794.16656 33 2245.84761107459 70 1 0 3DFACE 8 arm_half 10 760.176881646066 20 -835.292444325637 30 2241.80011766922 11 713.461201646067 21 -794.16656 31 2200.28420494853 12 713.461201646067 22 -826.396760603478 32 2197.11219961575 13 713.461201646067 23 -826.396760603478 33 2197.11219961575 70 1 0 3DFACE 8 arm_half 10 713.461201646067 20 -794.16656 30 2200.28420494853 11 760.176881646066 21 -835.292444325637 31 2241.80011766922 12 760.176881646066 22 -794.16656 32 2245.84761107459 13 760.176881646066 23 -794.16656 33 2245.84761107459 70 1 0 3DFACE 8 arm_half 10 713.461201646067 20 -794.16656 30 2200.28420494853 11 666.745521646067 21 -835.292444325637 31 2241.80011766922 12 713.461201646067 22 -826.396760603478 32 2197.11219961575 13 713.461201646067 23 -826.396760603478 33 2197.11219961575 70 1 0 3DFACE 8 arm_half 10 666.745521646067 20 -835.292444325637 30 2241.80011766922 11 713.461201646067 21 -794.16656 31 2200.28420494853 12 666.745521646067 22 -794.16656 32 2245.84761107459 13 666.745521646067 23 -794.16656 33 2245.84761107459 70 1 0 3DFACE 8 arm_half 10 635.537064906387 20 -835.292444325637 30 2241.80011766922 11 666.745521646067 21 -794.16656 31 2245.84761107459 12 635.537064906387 22 -794.16656 32 2245.84761107459 13 635.537064906387 23 -794.16656 33 2245.84761107459 70 1 0 3DFACE 8 arm_half 10 666.745521646067 20 -794.16656 30 2245.84761107459 11 635.537064906387 21 -835.292444325637 31 2241.80011766922 12 666.745521646067 22 -835.292444325637 32 2241.80011766922 13 666.745521646067 23 -835.292444325637 33 2241.80011766922 70 1 0 3DFACE 8 arm_half 10 200.646177778547 20 -826.396760603478 30 2197.11219961575 11 635.537064906387 21 -794.16656 31 2200.28420494853 12 200.646177778547 22 -794.16656 32 2200.28420494853 13 200.646177778547 23 -794.16656 33 2200.28420494853 70 1 0 3DFACE 8 arm_half 10 635.537064906387 20 -794.16656 30 2200.28420494853 11 200.646177778547 21 -826.396760603478 31 2197.11219961575 12 635.537064906387 22 -826.396760603478 32 2197.11219961575 13 635.537064906387 23 -826.396760603478 33 2197.11219961575 70 1 0 3DFACE 8 arm_half 10 97.3015169041444 20 -810.693774595514 30 2118.22745350336 11 200.646177778547 21 -794.16656 31 2119.85401529483 12 97.3015169041444 22 -794.16656 32 2119.85401529483 13 97.3015169041444 23 -794.16656 33 2119.85401529483 70 1 0 3DFACE 8 arm_half 10 200.646177778547 20 -794.16656 30 2119.85401529483 11 97.3015169041444 21 -810.693774595514 31 2118.22745350336 12 200.646177778547 22 -810.693774595514 32 2118.22745350336 13 200.646177778547 23 -810.693774595514 33 2118.22745350336 70 1 0 3DFACE 8 arm_half 10 45.3075256523042 20 -820.853629053581 30 2169.2659973228 11 97.3015169041444 21 -794.16656 31 2171.89246330095 12 45.3075256523042 22 -794.16656 32 2171.89246330095 13 45.3075256523042 23 -794.16656 33 2171.89246330095 70 1 0 3DFACE 8 arm_half 10 97.3015169041444 20 -794.16656 30 2171.89246330095 11 45.3075256523042 21 -820.853629053581 31 2169.2659973228 12 97.3015169041444 22 -820.853629053581 32 2169.2659973228 13 97.3015169041444 23 -820.853629053581 33 2169.2659973228 70 1 0 3DFACE 8 arm_half 10 1085.39140477935 20 -794.16656 30 2052.98408188445 11 1080.07459980683 21 -800.976532807249 31 2069.41239686438 12 1085.39140477935 22 -797.638258585694 32 2052.64240711292 13 1085.39140477935 23 -797.638258585694 33 2052.64240711292 70 1 0 3DFACE 8 arm_half 10 1080.07459980683 20 -800.976532807249 30 2069.41239686438 11 1085.39140477935 21 -794.16656 31 2052.98408188445 12 1080.07459980683 22 -794.16656 32 2070.08261515828 13 1080.07459980683 23 -794.16656 33 2070.08261515828 70 1 0 3DFACE 8 arm_half 10 1080.07459980683 20 -800.976532807249 30 2069.41239686438 11 1071.44060782234 21 -813.559725087093 31 2081.98611059205 12 1080.07459980683 22 -807.524802178593 32 2067.42749809583 13 1080.07459980683 23 -807.524802178593 33 2067.42749809583 70 1 0 3DFACE 8 arm_half 10 1071.44060782234 20 -813.559725087093 30 2081.98611059205 11 1080.07459980683 21 -800.976532807249 31 2069.41239686438 12 1071.44060782234 22 -804.053109826237 32 2084.86773745469 13 1071.44060782234 23 -804.053109826237 33 2084.86773745469 70 1 0 3DFACE 8 arm_half 10 1071.44060782234 20 -804.053109826237 30 2084.86773745469 11 1059.82120360007 21 -818.84937773729 31 2094.74683750463 12 1071.44060782234 22 -813.559725087093 32 2081.98611059205 13 1071.44060782234 23 -813.559725087093 33 2081.98611059205 70 1 0 3DFACE 8 arm_half 10 1059.82120360007 20 -818.84937773729 30 2094.74683750463 11 1071.44060782234 21 -804.053109826237 31 2084.86773745469 12 1059.82120360007 22 -806.749751362303 32 2098.41445288964 13 1059.82120360007 23 -806.749751362303 33 2098.41445288964 70 1 0 3DFACE 8 arm_half 10 1045.6629890274 20 -808.96283299496 30 2109.5319806407 11 1059.82120360007 21 -818.84937773729 31 2094.74683750463 12 1059.82120360007 22 -806.749751362303 32 2098.41445288964 13 1059.82120360007 23 -806.749751362303 33 2098.41445288964 70 1 0 3DFACE 8 arm_half 10 1059.82120360007 20 -818.84937773729 30 2094.74683750463 11 1045.6629890274 21 -808.96283299496 31 2109.5319806407 12 1045.6629890274 22 -823.19049351657 32 2105.21931965394 13 1045.6629890274 23 -823.19049351657 33 2105.21931965394 70 1 0 3DFACE 8 arm_half 10 1029.5099682249 20 -810.607297088473 30 2117.79302936366 11 1045.6629890274 21 -823.19049351657 31 2105.21931965394 12 1045.6629890274 22 -808.96283299496 32 2109.5319806407 13 1045.6629890274 23 -808.96283299496 33 2109.5319806407 70 1 0 3DFACE 8 arm_half 10 1045.6629890274 20 -823.19049351657 30 2105.21931965394 11 1029.5099682249 21 -810.607297088473 31 2117.79302936366 12 1029.5099682249 22 -826.416225870708 32 2113.00105739483 13 1029.5099682249 23 -826.416225870708 33 2113.00105739483 70 1 0 3DFACE 8 arm_half 10 1011.98285238754 20 -811.619948505454 30 2122.88013508281 11 1029.5099682249 21 -826.416225870708 31 2113.00105739483 12 1029.5099682249 22 -810.607297088473 32 2117.79302936366 13 1029.5099682249 23 -810.607297088473 33 2117.79302936366 70 1 0 3DFACE 8 arm_half 10 1029.5099682249 20 -826.416225870708 30 2113.00105739483 11 1011.98285238754 21 -811.619948505454 31 2122.88013508281 12 1011.98285238754 22 -828.402613078617 32 2117.79300620111 13 1011.98285238754 23 -828.402613078617 33 2117.79300620111 70 1 0 3DFACE 8 arm_half 10 993.755281646067 20 -811.961287013471 30 2124.59486637848 11 1011.98285238754 21 -828.402613078617 31 2117.79300620111 12 1011.98285238754 22 -811.619948505454 32 2122.88013508281 13 1011.98285238754 23 -811.619948505454 33 2122.88013508281 70 1 0 3DFACE 8 arm_half 10 1011.98285238754 20 -828.402613078617 30 2117.79300620111 11 993.755281646067 21 -811.961287013471 31 2124.59486637848 12 993.755281646067 22 -829.072172647213 32 2119.40824776262 13 993.755281646067 23 -829.072172647213 33 2119.40824776262 70 1 0 3DFACE 8 arm_half 10 947.039601646067 20 -874.837883980304 30 2229.81318035484 11 993.755281646067 21 -835.292444325637 31 2241.80011766922 12 947.039601646067 22 -835.292444325637 32 2241.80011766922 13 947.039601646067 23 -835.292444325637 33 2241.80011766922 70 1 0 3DFACE 8 arm_half 10 993.755281646067 20 -835.292444325637 30 2241.80011766922 11 947.039601646067 21 -874.837883980304 31 2229.81318035484 12 993.755281646067 22 -874.837883980304 32 2229.81318035484 13 993.755281646067 23 -874.837883980304 33 2229.81318035484 70 1 0 3DFACE 8 arm_half 10 947.039601646067 20 -874.837883980304 30 2229.81318035484 11 900.323921646066 21 -826.396760603478 31 2197.11219961575 12 900.323921646066 22 -857.388372672667 32 2187.71808200347 13 900.323921646066 23 -857.388372672667 33 2187.71808200347 70 1 0 3DFACE 8 arm_half 10 900.323921646066 20 -826.396760603478 30 2197.11219961575 11 947.039601646067 21 -874.837883980304 31 2229.81318035484 12 947.039601646067 22 -835.292444325637 32 2241.80011766922 13 947.039601646067 23 -835.292444325637 33 2241.80011766922 70 1 0 3DFACE 8 arm_half 10 900.323921646066 20 -826.396760603478 30 2197.11219961575 11 853.608241646067 21 -874.837883980304 31 2229.81318035484 12 900.323921646066 22 -857.388372672667 32 2187.71808200347 13 900.323921646066 23 -857.388372672667 33 2187.71808200347 70 1 0 3DFACE 8 arm_half 10 853.608241646067 20 -874.837883980304 30 2229.81318035484 11 900.323921646066 21 -826.396760603478 31 2197.11219961575 12 853.608241646067 22 -835.292444325637 32 2241.80011766922 13 853.608241646067 23 -835.292444325637 33 2241.80011766922 70 1 0 3DFACE 8 arm_half 10 853.608241646067 20 -874.837883980304 30 2229.81318035484 11 806.892561646067 21 -826.396760603478 31 2197.11219961575 12 806.892561646067 22 -857.388372672667 32 2187.71808200347 13 806.892561646067 23 -857.388372672667 33 2187.71808200347 70 1 0 3DFACE 8 arm_half 10 806.892561646067 20 -826.396760603478 30 2197.11219961575 11 853.608241646067 21 -874.837883980304 31 2229.81318035484 12 853.608241646067 22 -835.292444325637 32 2241.80011766922 13 853.608241646067 23 -835.292444325637 33 2241.80011766922 70 1 0 3DFACE 8 arm_half 10 806.892561646067 20 -826.396760603478 30 2197.11219961575 11 760.176881646066 21 -874.837883980304 31 2229.81318035484 12 806.892561646067 22 -857.388372672667 32 2187.71808200347 13 806.892561646067 23 -857.388372672667 33 2187.71808200347 70 1 0 3DFACE 8 arm_half 10 760.176881646066 20 -874.837883980304 30 2229.81318035484 11 806.892561646067 21 -826.396760603478 31 2197.11219961575 12 760.176881646066 22 -835.292444325637 32 2241.80011766922 13 760.176881646066 23 -835.292444325637 33 2241.80011766922 70 1 0 3DFACE 8 arm_half 10 760.176881646066 20 -874.837883980304 30 2229.81318035484 11 713.461201646067 21 -826.396760603478 31 2197.11219961575 12 713.461201646067 22 -857.388372672667 32 2187.71808200347 13 713.461201646067 23 -857.388372672667 33 2187.71808200347 70 1 0 3DFACE 8 arm_half 10 713.461201646067 20 -826.396760603478 30 2197.11219961575 11 760.176881646066 21 -874.837883980304 31 2229.81318035484 12 760.176881646066 22 -835.292444325637 32 2241.80011766922 13 760.176881646066 23 -835.292444325637 33 2241.80011766922 70 1 0 3DFACE 8 arm_half 10 713.461201646067 20 -826.396760603478 30 2197.11219961575 11 666.745521646067 21 -874.837883980304 31 2229.81318035484 12 713.461201646067 22 -857.388372672667 32 2187.71808200347 13 713.461201646067 23 -857.388372672667 33 2187.71808200347 70 1 0 3DFACE 8 arm_half 10 666.745521646067 20 -874.837883980304 30 2229.81318035484 11 713.461201646067 21 -826.396760603478 31 2197.11219961575 12 666.745521646067 22 -835.292444325637 32 2241.80011766922 13 666.745521646067 23 -835.292444325637 33 2241.80011766922 70 1 0 3DFACE 8 arm_half 10 635.537064906387 20 -874.837883980304 30 2229.81318035484 11 666.745521646067 21 -835.292444325637 31 2241.80011766922 12 635.537064906387 22 -835.292444325637 32 2241.80011766922 13 635.537064906387 23 -835.292444325637 33 2241.80011766922 70 1 0 3DFACE 8 arm_half 10 666.745521646067 20 -835.292444325637 30 2241.80011766922 11 635.537064906387 21 -874.837883980304 31 2229.81318035484 12 666.745521646067 22 -874.837883980304 32 2229.81318035484 13 666.745521646067 23 -874.837883980304 33 2229.81318035484 70 1 0 3DFACE 8 arm_half 10 200.646177778547 20 -857.388372672667 30 2187.71808200347 11 635.537064906387 21 -826.396760603478 31 2197.11219961575 12 200.646177778547 22 -826.396760603478 32 2197.11219961575 13 200.646177778547 23 -826.396760603478 33 2197.11219961575 70 1 0 3DFACE 8 arm_half 10 635.537064906387 20 -826.396760603478 30 2197.11219961575 11 200.646177778547 21 -857.388372672667 31 2187.71808200347 12 635.537064906387 22 -857.388372672667 32 2187.71808200347 13 635.537064906387 23 -857.388372672667 33 2187.71808200347 70 1 0 3DFACE 8 arm_half 10 97.3015169041444 20 -826.585857602691 30 2113.41027598642 11 200.646177778547 21 -810.693774595514 31 2118.22745350336 12 97.3015169041444 22 -810.693774595514 32 2118.22745350336 13 97.3015169041444 23 -810.693774595514 33 2118.22745350336 70 1 0 3DFACE 8 arm_half 10 200.646177778547 20 -810.693774595514 30 2118.22745350336 11 97.3015169041444 21 -826.585857602691 31 2113.41027598642 12 200.646177778547 22 -826.585857602691 32 2113.41027598642 13 200.646177778547 23 -826.585857602691 33 2113.41027598642 70 1 0 3DFACE 8 arm_half 10 45.3075256523042 20 -846.515129009712 30 2161.48753300293 11 97.3015169041444 21 -820.853629053581 31 2169.2659973228 12 45.3075256523042 22 -820.853629053581 32 2169.2659973228 13 45.3075256523042 23 -820.853629053581 33 2169.2659973228 70 1 0 3DFACE 8 arm_half 10 97.3015169041444 20 -820.853629053581 30 2169.2659973228 11 45.3075256523042 21 -846.515129009712 31 2161.48753300293 12 97.3015169041444 22 -846.515129009712 32 2161.48753300293 13 97.3015169041444 23 -846.515129009712 33 2161.48753300293 70 1 0 3DFACE 8 arm_half 10 1085.39140477935 20 -797.638258585694 30 2052.64240711292 11 1080.07459980683 21 -807.524802178593 31 2067.42749809583 12 1085.39140477935 22 -800.976541741692 32 2051.63051316818 13 1085.39140477935 23 -800.976541741692 33 2051.63051316818 70 1 0 3DFACE 8 arm_half 10 1080.07459980683 20 -807.524802178593 30 2067.42749809583 11 1085.39140477935 21 -797.638258585694 31 2052.64240711292 12 1080.07459980683 22 -800.976532807249 32 2069.41239686438 13 1080.07459980683 23 -800.976532807249 33 2069.41239686438 70 1 0 3DFACE 8 arm_half 10 1080.07459980683 20 -807.524802178593 30 2067.42749809583 11 1071.44060782234 21 -822.321071889464 31 2077.30660248764 12 1080.07459980683 22 -813.559721794402 32 2064.20419739918 13 1080.07459980683 23 -813.559721794402 33 2064.20419739918 70 1 0 3DFACE 8 arm_half 10 1071.44060782234 20 -822.321071889464 30 2077.30660248764 11 1080.07459980683 21 -807.524802178593 31 2067.42749809583 12 1071.44060782234 22 -813.559725087093 32 2081.98611059205 13 1071.44060782234 23 -813.559725087093 33 2081.98611059205 70 1 0 3DFACE 8 arm_half 10 1071.44060782234 20 -813.559725087093 30 2081.98611059205 11 1059.82120360007 21 -830.000457268917 31 2088.79095329889 12 1071.44060782234 22 -822.321071889464 32 2077.30660248764 13 1071.44060782234 23 -822.321071889464 33 2077.30660248764 70 1 0 3DFACE 8 arm_half 10 1059.82120360007 20 -830.000457268917 30 2088.79095329889 11 1071.44060782234 21 -813.559725087093 31 2081.98611059205 12 1059.82120360007 22 -818.84937773729 32 2094.74683750463 13 1059.82120360007 23 -818.84937773729 33 2094.74683750463 70 1 0 3DFACE 8 arm_half 10 1045.6629890274 20 -823.19049351657 30 2105.21931965394 11 1059.82120360007 21 -830.000457268917 31 2088.79095329889 12 1059.82120360007 22 -818.84937773729 32 2094.74683750463 13 1059.82120360007 23 -818.84937773729 33 2094.74683750463 70 1 0 3DFACE 8 arm_half 10 1059.82120360007 20 -830.000457268917 30 2088.79095329889 11 1045.6629890274 21 -823.19049351657 31 2105.21931965394 12 1045.6629890274 22 -836.302780549948 32 2098.2159382305 13 1045.6629890274 23 -836.302780549948 33 2098.2159382305 70 1 0 3DFACE 8 arm_half 10 1029.5099682249 20 -826.416225870708 30 2113.00105739483 11 1045.6629890274 21 -836.302780549948 31 2098.2159382305 12 1045.6629890274 22 -823.19049351657 32 2105.21931965394 13 1045.6629890274 23 -823.19049351657 33 2105.21931965394 70 1 0 3DFACE 8 arm_half 10 1045.6629890274 20 -836.302780549948 30 2098.2159382305 11 1029.5099682249 21 -826.416225870708 31 2113.00105739483 12 1029.5099682249 22 -840.985818079353 32 2105.21931717198 13 1029.5099682249 23 -840.985818079353 33 2105.21931717198 70 1 0 3DFACE 8 arm_half 10 1011.98285238754 20 -828.402613078617 30 2117.79300620111 11 1029.5099682249 21 -840.985818079353 31 2105.21931717198 12 1029.5099682249 22 -826.416225870708 32 2113.00105739483 13 1029.5099682249 23 -826.416225870708 33 2113.00105739483 70 1 0 3DFACE 8 arm_half 10 1029.5099682249 20 -840.985818079353 30 2105.21931717198 11 1011.98285238754 21 -828.402613078617 31 2117.79300620111 12 1011.98285238754 22 -843.869605331769 32 2109.53195716012 13 1011.98285238754 23 -843.869605331769 33 2109.53195716012 70 1 0 3DFACE 8 arm_half 10 993.755281646067 20 -829.072172647213 30 2119.40824776262 11 1011.98285238754 21 -843.869605331769 31 2109.53195716012 12 1011.98285238754 22 -828.402613078617 32 2117.79300620111 13 1011.98285238754 23 -828.402613078617 33 2117.79300620111 70 1 0 3DFACE 8 arm_half 10 1011.98285238754 20 -843.869605331769 30 2109.53195716012 11 993.755281646067 21 -829.072172647213 31 2119.40824776262 12 993.755281646067 22 -844.841655162215 32 2110.9856361601 13 993.755281646067 23 -844.841655162215 33 2110.9856361601 70 1 0 3DFACE 8 arm_half 10 947.039601646067 20 -911.283169895404 30 2210.34745041008 11 993.755281646067 21 -874.837883980304 31 2229.81318035484 12 947.039601646067 22 -874.837883980304 32 2229.81318035484 13 947.039601646067 23 -874.837883980304 33 2229.81318035484 70 1 0 3DFACE 8 arm_half 10 993.755281646067 20 -874.837883980304 30 2229.81318035484 11 947.039601646067 21 -911.283169895404 31 2210.34745041008 12 993.755281646067 22 -911.283169895404 32 2210.34745041008 13 993.755281646067 23 -911.283169895404 33 2210.34745041008 70 1 0 3DFACE 8 arm_half 10 947.039601646067 20 -911.283169895404 30 2210.34745041008 11 900.323921646066 21 -857.388372672667 31 2187.71808200347 12 900.323921646066 22 -885.950405936049 32 2172.46286278326 13 900.323921646066 23 -885.950405936049 33 2172.46286278326 70 1 0 3DFACE 8 arm_half 10 900.323921646066 20 -857.388372672667 30 2187.71808200347 11 947.039601646067 21 -911.283169895404 31 2210.34745041008 12 947.039601646067 22 -874.837883980304 32 2229.81318035484 13 947.039601646067 23 -874.837883980304 33 2229.81318035484 70 1 0 3DFACE 8 arm_half 10 900.323921646066 20 -857.388372672667 30 2187.71808200347 11 853.608241646067 21 -911.283169895404 31 2210.34745041008 12 900.323921646066 22 -885.950405936049 32 2172.46286278326 13 900.323921646066 23 -885.950405936049 33 2172.46286278326 70 1 0 3DFACE 8 arm_half 10 853.608241646067 20 -911.283169895404 30 2210.34745041008 11 900.323921646066 21 -857.388372672667 31 2187.71808200347 12 853.608241646067 22 -874.837883980304 32 2229.81318035484 13 853.608241646067 23 -874.837883980304 33 2229.81318035484 70 1 0 3DFACE 8 arm_half 10 853.608241646067 20 -911.283169895404 30 2210.34745041008 11 806.892561646067 21 -857.388372672667 31 2187.71808200347 12 806.892561646067 22 -885.950405936049 32 2172.46286278326 13 806.892561646067 23 -885.950405936049 33 2172.46286278326 70 1 0 3DFACE 8 arm_half 10 806.892561646067 20 -857.388372672667 30 2187.71808200347 11 853.608241646067 21 -911.283169895404 31 2210.34745041008 12 853.608241646067 22 -874.837883980304 32 2229.81318035484 13 853.608241646067 23 -874.837883980304 33 2229.81318035484 70 1 0 3DFACE 8 arm_half 10 806.892561646067 20 -857.388372672667 30 2187.71808200347 11 760.176881646066 21 -911.283169895404 31 2210.34745041008 12 806.892561646067 22 -885.950405936049 32 2172.46286278326 13 806.892561646067 23 -885.950405936049 33 2172.46286278326 70 1 0 3DFACE 8 arm_half 10 760.176881646066 20 -911.283169895404 30 2210.34745041008 11 806.892561646067 21 -857.388372672667 31 2187.71808200347 12 760.176881646066 22 -874.837883980304 32 2229.81318035484 13 760.176881646066 23 -874.837883980304 33 2229.81318035484 70 1 0 3DFACE 8 arm_half 10 760.176881646066 20 -911.283169895404 30 2210.34745041008 11 713.461201646067 21 -857.388372672667 31 2187.71808200347 12 713.461201646067 22 -885.950405936049 32 2172.46286278326 13 713.461201646067 23 -885.950405936049 33 2172.46286278326 70 1 0 3DFACE 8 arm_half 10 713.461201646067 20 -857.388372672667 30 2187.71808200347 11 760.176881646066 21 -911.283169895404 31 2210.34745041008 12 760.176881646066 22 -874.837883980304 32 2229.81318035484 13 760.176881646066 23 -874.837883980304 33 2229.81318035484 70 1 0 3DFACE 8 arm_half 10 713.461201646067 20 -857.388372672667 30 2187.71808200347 11 666.745521646067 21 -911.283169895404 31 2210.34745041008 12 713.461201646067 22 -885.950405936049 32 2172.46286278326 13 713.461201646067 23 -885.950405936049 33 2172.46286278326 70 1 0 3DFACE 8 arm_half 10 666.745521646067 20 -911.283169895404 30 2210.34745041008 11 713.461201646067 21 -857.388372672667 31 2187.71808200347 12 666.745521646067 22 -874.837883980304 32 2229.81318035484 13 666.745521646067 23 -874.837883980304 33 2229.81318035484 70 1 0 3DFACE 8 arm_half 10 635.537064906387 20 -911.283169895404 30 2210.34745041008 11 666.745521646067 21 -874.837883980304 31 2229.81318035484 12 635.537064906387 22 -874.837883980304 32 2229.81318035484 13 635.537064906387 23 -874.837883980304 33 2229.81318035484 70 1 0 3DFACE 8 arm_half 10 666.745521646067 20 -874.837883980304 30 2229.81318035484 11 635.537064906387 21 -911.283169895404 31 2210.34745041008 12 666.745521646067 22 -911.283169895404 32 2210.34745041008 13 666.745521646067 23 -911.283169895404 33 2210.34745041008 70 1 0 3DFACE 8 arm_half 10 200.646177778547 20 -885.950405936048 30 2172.46286278326 11 635.537064906387 21 -857.388372672667 31 2187.71808200347 12 200.646177778547 22 -857.388372672667 32 2187.71808200347 13 200.646177778547 23 -857.388372672667 33 2187.71808200347 70 1 0 3DFACE 8 arm_half 10 635.537064906387 20 -857.388372672667 30 2187.71808200347 11 200.646177778547 21 -885.950405936048 31 2172.46286278326 12 635.537064906387 22 -885.950405936048 32 2172.46286278326 13 635.537064906387 23 -885.950405936048 33 2172.46286278326 70 1 0 3DFACE 8 arm_half 10 97.3015169041444 20 -841.232085183949 30 2105.58760417448 11 200.646177778547 21 -826.585857602691 31 2113.41027598642 12 97.3015169041444 22 -826.585857602691 32 2113.41027598642 13 97.3015169041444 23 -826.585857602691 33 2113.41027598642 70 1 0 3DFACE 8 arm_half 10 200.646177778547 20 -826.585857602691 30 2113.41027598642 11 97.3015169041444 21 -841.232085183949 31 2105.58760417448 12 200.646177778547 22 -841.232085183949 32 2105.58760417448 13 200.646177778547 23 -841.232085183949 33 2105.58760417448 70 1 0 3DFACE 8 arm_half 10 45.3075256523042 20 -870.164902816216 30 2148.85599236295 11 97.3015169041444 21 -846.515129009712 31 2161.48753300293 12 45.3075256523042 22 -846.515129009712 32 2161.48753300293 13 45.3075256523042 23 -846.515129009712 33 2161.48753300293 70 1 0 3DFACE 8 arm_half 10 97.3015169041444 20 -846.515129009712 30 2161.48753300293 11 45.3075256523042 21 -870.164902816216 31 2148.85599236295 12 97.3015169041444 22 -870.164902816216 32 2148.85599236295 13 97.3015169041444 23 -870.164902816216 33 2148.85599236295 70 1 0 3DFACE 8 arm_half 10 1085.39140477935 20 -800.976541741692 30 2051.63051316818 11 1080.07459980683 21 -813.559721794402 31 2064.20419739918 12 1085.39140477935 22 -804.053121118439 32 2049.98728656705 13 1085.39140477935 23 -804.053121118439 33 2049.98728656705 70 1 0 3DFACE 8 arm_half 10 1080.07459980683 20 -813.559721794402 30 2064.20419739918 11 1085.39140477935 21 -800.976541741692 31 2051.63051316818 12 1080.07459980683 22 -807.524802178593 32 2067.42749809583 13 1080.07459980683 23 -807.524802178593 33 2067.42749809583 70 1 0 3DFACE 8 arm_half 10 1080.07459980683 20 -813.559721794402 30 2064.20419739918 11 1071.44060782234 21 -830.000456589156 31 2071.00904401361 12 1080.07459980683 22 -818.849373078262 32 2059.86636441255 13 1080.07459980683 23 -818.849373078262 33 2059.86636441255 70 1 0 3DFACE 8 arm_half 10 1071.44060782234 20 -830.000456589156 30 2071.00904401361 11 1080.07459980683 21 -813.559721794402 31 2064.20419739918 12 1071.44060782234 22 -822.321071889464 32 2077.30660248764 13 1071.44060782234 23 -822.321071889464 33 2077.30660248764 70 1 0 3DFACE 8 arm_half 10 1071.44060782234 20 -822.321071889464 30 2077.30660248764 11 1059.82120360007 21 -839.774460224379 31 2080.77568156236 12 1071.44060782234 22 -830.000456589156 32 2071.00904401361 13 1071.44060782234 23 -830.000456589156 33 2071.00904401361 70 1 0 3DFACE 8 arm_half 10 1059.82120360007 20 -839.774460224379 30 2080.77568156236 11 1071.44060782234 21 -822.321071889464 31 2077.30660248764 12 1059.82120360007 22 -830.000457268917 32 2088.79095329889 13 1059.82120360007 23 -830.000457268917 33 2088.79095329889 70 1 0 3DFACE 8 arm_half 10 1059.82120360007 20 -830.000457268917 30 2088.79095329889 11 1045.6629890274 21 -847.795796257855 31 2088.79097239093 12 1059.82120360007 22 -839.774460224379 32 2080.77568156236 13 1059.82120360007 23 -839.774460224379 33 2080.77568156236 70 1 0 3DFACE 8 arm_half 10 1045.6629890274 20 -847.795796257855 30 2088.79097239093 11 1059.82120360007 21 -830.000457268917 31 2088.79095329889 12 1045.6629890274 22 -836.302780549948 32 2098.2159382305 13 1045.6629890274 23 -836.302780549948 33 2098.2159382305 70 1 0 3DFACE 8 arm_half 10 1029.5099682249 20 -840.985818079353 30 2105.21931717198 11 1045.6629890274 21 -847.795796257855 31 2088.79097239093 12 1045.6629890274 22 -836.302780549948 32 2098.2159382305 13 1045.6629890274 23 -836.302780549948 33 2098.2159382305 70 1 0 3DFACE 8 arm_half 10 1045.6629890274 20 -847.795796257855 30 2088.79097239093 11 1029.5099682249 21 -840.985818079353 31 2105.21931717198 12 1029.5099682249 22 -853.75617245655 32 2094.74685660782 13 1029.5099682249 23 -853.75617245655 33 2094.74685660782 70 1 0 3DFACE 8 arm_half 10 1011.98285238754 20 -843.869605331769 30 2109.53195716012 11 1029.5099682249 21 -853.75617245655 31 2094.74685660782 12 1029.5099682249 22 -840.985818079353 32 2105.21931717198 13 1029.5099682249 23 -840.985818079353 33 2105.21931717198 70 1 0 3DFACE 8 arm_half 10 1029.5099682249 20 -853.75617245655 30 2094.74685660782 11 1011.98285238754 21 -843.869605331769 31 2109.53195716012 12 1011.98285238754 22 -857.426537426609 32 2098.41445544163 13 1011.98285238754 23 -857.426537426609 33 2098.41445544163 70 1 0 3DFACE 8 arm_half 10 993.755281646067 20 -844.841655162215 30 2110.9856361601 11 1011.98285238754 21 -857.426537426609 31 2098.41445544163 12 1011.98285238754 22 -843.869605331769 32 2109.53195716012 13 1011.98285238754 23 -843.869605331769 33 2109.53195716012 70 1 0 3DFACE 8 arm_half 10 1011.98285238754 20 -857.426537426609 30 2098.41445544163 11 993.755281646067 21 -844.841655162215 31 2110.9856361601 12 993.755281646067 22 -858.663722189056 32 2099.65070781135 13 993.755281646067 23 -858.663722189056 33 2099.65070781135 70 1 0 3DFACE 8 arm_half 10 947.039601646067 20 -943.227730171979 30 2184.1509849202 11 993.755281646067 21 -911.283169895404 31 2210.34745041008 12 947.039601646067 22 -911.283169895404 32 2210.34745041008 13 947.039601646067 23 -911.283169895404 33 2210.34745041008 70 1 0 3DFACE 8 arm_half 10 993.755281646067 20 -911.283169895404 30 2210.34745041008 11 947.039601646067 21 -943.227730171979 31 2184.1509849202 12 993.755281646067 22 -943.227730171979 32 2184.1509849202 13 993.755281646067 23 -943.227730171979 33 2184.1509849202 70 1 0 3DFACE 8 arm_half 10 947.039601646067 20 -943.227730171979 30 2184.1509849202 11 900.323921646066 21 -885.950405936049 31 2172.46286278326 12 900.323921646066 22 -910.985237473082 32 2151.93279147451 13 900.323921646066 23 -910.985237473082 33 2151.93279147451 70 1 0 3DFACE 8 arm_half 10 900.323921646066 20 -885.950405936049 30 2172.46286278326 11 947.039601646067 21 -943.227730171979 31 2184.1509849202 12 947.039601646067 22 -911.283169895404 32 2210.34745041008 13 947.039601646067 23 -911.283169895404 33 2210.34745041008 70 1 0 3DFACE 8 arm_half 10 900.323921646066 20 -885.950405936049 30 2172.46286278326 11 853.608241646067 21 -943.227730171979 31 2184.1509849202 12 900.323921646066 22 -910.985237473082 32 2151.93279147451 13 900.323921646066 23 -910.985237473082 33 2151.93279147451 70 1 0 3DFACE 8 arm_half 10 853.608241646067 20 -943.227730171979 30 2184.1509849202 11 900.323921646066 21 -885.950405936049 31 2172.46286278326 12 853.608241646067 22 -911.283169895404 32 2210.34745041008 13 853.608241646067 23 -911.283169895404 33 2210.34745041008 70 1 0 3DFACE 8 arm_half 10 853.608241646067 20 -943.227730171979 30 2184.1509849202 11 806.892561646067 21 -885.950405936049 31 2172.46286278326 12 806.892561646067 22 -910.985237473082 32 2151.93279147451 13 806.892561646067 23 -910.985237473082 33 2151.93279147451 70 1 0 3DFACE 8 arm_half 10 806.892561646067 20 -885.950405936049 30 2172.46286278326 11 853.608241646067 21 -943.227730171979 31 2184.1509849202 12 853.608241646067 22 -911.283169895404 32 2210.34745041008 13 853.608241646067 23 -911.283169895404 33 2210.34745041008 70 1 0 3DFACE 8 arm_half 10 806.892561646067 20 -885.950405936049 30 2172.46286278326 11 760.176881646066 21 -943.227730171979 31 2184.1509849202 12 806.892561646067 22 -910.985237473082 32 2151.93279147451 13 806.892561646067 23 -910.985237473082 33 2151.93279147451 70 1 0 3DFACE 8 arm_half 10 760.176881646066 20 -943.227730171979 30 2184.1509849202 11 806.892561646067 21 -885.950405936049 31 2172.46286278326 12 760.176881646066 22 -911.283169895404 32 2210.34745041008 13 760.176881646066 23 -911.283169895404 33 2210.34745041008 70 1 0 3DFACE 8 arm_half 10 760.176881646066 20 -943.227730171979 30 2184.1509849202 11 713.461201646067 21 -885.950405936049 31 2172.46286278326 12 713.461201646067 22 -910.985237473082 32 2151.93279147451 13 713.461201646067 23 -910.985237473082 33 2151.93279147451 70 1 0 3DFACE 8 arm_half 10 713.461201646067 20 -885.950405936049 30 2172.46286278326 11 760.176881646066 21 -943.227730171979 31 2184.1509849202 12 760.176881646066 22 -911.283169895404 32 2210.34745041008 13 760.176881646066 23 -911.283169895404 33 2210.34745041008 70 1 0 3DFACE 8 arm_half 10 713.461201646067 20 -885.950405936049 30 2172.46286278326 11 666.745521646067 21 -943.227730171979 31 2184.1509849202 12 713.461201646067 22 -910.985237473082 32 2151.93279147451 13 713.461201646067 23 -910.985237473082 33 2151.93279147451 70 1 0 3DFACE 8 arm_half 10 666.745521646067 20 -943.227730171979 30 2184.1509849202 11 713.461201646067 21 -885.950405936049 31 2172.46286278326 12 666.745521646067 22 -911.283169895404 32 2210.34745041008 13 666.745521646067 23 -911.283169895404 33 2210.34745041008 70 1 0 3DFACE 8 arm_half 10 635.537064906387 20 -943.227730171979 30 2184.1509849202 11 666.745521646067 21 -911.283169895404 31 2210.34745041008 12 635.537064906387 22 -911.283169895404 32 2210.34745041008 13 635.537064906387 23 -911.283169895404 33 2210.34745041008 70 1 0 3DFACE 8 arm_half 10 666.745521646067 20 -911.283169895404 30 2210.34745041008 11 635.537064906387 21 -943.227730171979 31 2184.1509849202 12 666.745521646067 22 -943.227730171979 32 2184.1509849202 13 666.745521646067 23 -943.227730171979 33 2184.1509849202 70 1 0 3DFACE 8 arm_half 10 200.646177778547 20 -910.985237473081 30 2151.93279147451 11 635.537064906387 21 -885.950405936048 31 2172.46286278326 12 200.646177778547 22 -885.950405936048 32 2172.46286278326 13 200.646177778547 23 -885.950405936048 33 2172.46286278326 70 1 0 3DFACE 8 arm_half 10 635.537064906387 20 -885.950405936048 30 2172.46286278326 11 200.646177778547 21 -910.985237473081 31 2151.93279147451 12 635.537064906387 22 -910.985237473081 32 2151.93279147451 13 635.537064906387 23 -910.985237473081 33 2151.93279147451 70 1 0 3DFACE 8 arm_half 10 97.3015169041444 20 -854.069611027039 30 2095.06005895826 11 200.646177778547 21 -841.232085183949 31 2105.58760417448 12 97.3015169041444 22 -841.232085183949 32 2105.58760417448 13 97.3015169041444 23 -841.232085183949 33 2105.58760417448 70 1 0 3DFACE 8 arm_half 10 200.646177778547 20 -841.232085183949 30 2105.58760417448 11 97.3015169041444 21 -854.069611027039 31 2095.06005895826 12 200.646177778547 22 -854.069611027035 32 2095.06005895826 13 200.646177778547 23 -854.069611027035 33 2095.06005895826 70 1 0 3DFACE 8 arm_half 10 45.3075256523042 20 -890.894102928655 30 2131.85679842581 11 97.3015169041444 21 -870.164902816216 31 2148.85599236295 12 45.3075256523042 22 -870.164902816216 32 2148.85599236295 13 45.3075256523042 23 -870.164902816216 33 2148.85599236295 70 1 0 3DFACE 8 arm_half 10 97.3015169041444 20 -870.164902816216 30 2148.85599236295 11 45.3075256523042 21 -890.894102928655 31 2131.85679842581 12 97.3015169041444 22 -890.894102928655 32 2131.85679842581 13 97.3015169041444 23 -890.894102928655 33 2131.85679842581 70 1 0 3DFACE 8 arm_half 10 1085.39140477935 20 -804.053121118439 30 2049.98728656705 11 1080.07459980683 21 -818.849373078262 31 2059.86636441255 12 1085.39140477935 22 -806.74976549585 32 2047.77587558629 13 1085.39140477935 23 -806.74976549585 33 2047.77587558629 70 1 0 3DFACE 8 arm_half 10 1080.07459980683 20 -818.849373078262 30 2059.86636441255 11 1085.39140477935 21 -804.053121118439 31 2049.98728656705 12 1080.07459980683 22 -813.559721794402 32 2064.20419739918 13 1080.07459980683 23 -813.559721794402 33 2064.20419739918 70 1 0 3DFACE 8 arm_half 10 1080.07459980683 20 -818.849373078262 30 2059.86636441255 11 1071.44060782234 21 -836.302764738808 31 2063.3354468104 12 1080.07459980683 22 -823.190477697806 32 2054.58069962494 13 1080.07459980683 23 -823.190477697806 33 2054.58069962494 70 1 0 3DFACE 8 arm_half 10 1071.44060782234 20 -836.302764738808 30 2063.3354468104 11 1080.07459980683 21 -818.849373078262 31 2059.86636441255 12 1071.44060782234 22 -830.000456589156 32 2071.00904401361 13 1071.44060782234 23 -830.000456589156 33 2071.00904401361 70 1 0 3DFACE 8 arm_half 10 1071.44060782234 20 -830.000456589156 30 2071.00904401361 11 1059.82120360007 21 -847.795777151423 31 2071.00904469286 12 1071.44060782234 22 -836.302764738808 32 2063.3354468104 13 1071.44060782234 23 -836.302764738808 33 2063.3354468104 70 1 0 3DFACE 8 arm_half 10 1059.82120360007 20 -847.795777151423 30 2071.00904469286 11 1071.44060782234 21 -830.000456589156 31 2071.00904401361 12 1059.82120360007 22 -839.774460224379 32 2080.77568156236 13 1059.82120360007 23 -839.774460224379 33 2080.77568156236 70 1 0 3DFACE 8 arm_half 10 1059.82120360007 20 -839.774460224379 30 2080.77568156236 11 1045.6629890274 21 -857.227870491995 31 2077.30661828686 12 1059.82120360007 22 -847.795777151423 32 2071.00904469286 13 1059.82120360007 23 -847.795777151423 33 2071.00904469286 70 1 0 3DFACE 8 arm_half 10 1045.6629890274 20 -857.227870491995 30 2077.30661828686 11 1059.82120360007 21 -839.774460224379 31 2080.77568156236 12 1045.6629890274 22 -847.795796257855 32 2088.79097239093 13 1045.6629890274 23 -847.795796257855 33 2088.79097239093 70 1 0 3DFACE 8 arm_half 10 1045.6629890274 20 -857.227870491995 30 2077.30661828686 11 1029.5099682249 21 -853.75617245655 31 2094.74685660782 12 1029.5099682249 22 -864.236531445284 32 2081.98612648882 13 1029.5099682249 23 -864.236531445284 33 2081.98612648882 70 1 0 3DFACE 8 arm_half 10 1029.5099682249 20 -853.75617245655 30 2094.74685660782 11 1045.6629890274 21 -857.227870491995 31 2077.30661828686 12 1045.6629890274 22 -847.795796257855 32 2088.79097239093 13 1045.6629890274 23 -847.795796257855 33 2088.79097239093 70 1 0 3DFACE 8 arm_half 10 1029.5099682249 20 -864.236531445284 30 2081.98612648882 11 1011.98285238754 21 -857.426537426609 31 2098.41445544163 12 1011.98285238754 22 -868.552424065547 32 2084.86774040193 13 1011.98285238754 23 -868.552424065547 33 2084.86774040193 70 1 0 3DFACE 8 arm_half 10 1011.98285238754 20 -857.426537426609 30 2098.41445544163 11 1029.5099682249 21 -864.236531445284 31 2081.98612648882 12 1029.5099682249 22 -853.75617245655 32 2094.74685660782 13 1029.5099682249 23 -853.75617245655 33 2094.74685660782 70 1 0 3DFACE 8 arm_half 10 1011.98285238754 20 -868.552424065547 30 2084.86774040193 11 993.755281646067 21 -858.663722189056 31 2099.65070781135 12 993.755281646067 22 -870.007199443395 32 2085.83905765611 13 993.755281646067 23 -870.007199443395 33 2085.83905765611 70 1 0 3DFACE 8 arm_half 10 993.755281646067 20 -858.663722189056 30 2099.65070781135 11 1011.98285238754 21 -868.552424065547 31 2084.86774040193 12 1011.98285238754 22 -857.426537426609 32 2098.41445544163 13 1011.98285238754 23 -857.426537426609 33 2098.41445544163 70 1 0 3DFACE 8 arm_half 10 993.755281646067 20 -969.443953273309 30 2152.23049936285 11 947.039601646067 21 -943.227730171979 31 2184.1509849202 12 947.039601646067 22 -969.443953273309 32 2152.23049936285 13 947.039601646067 23 -969.443953273309 33 2152.23049936285 70 1 0 3DFACE 8 arm_half 10 947.039601646067 20 -943.227730171979 30 2184.1509849202 11 993.755281646067 21 -969.443953273309 31 2152.23049936285 12 993.755281646067 22 -943.227730171979 32 2184.1509849202 13 993.755281646067 23 -943.227730171979 33 2184.1509849202 70 1 0 3DFACE 8 arm_half 10 947.039601646067 20 -969.443953273309 30 2152.23049936285 11 900.323921646066 21 -910.985237473082 31 2151.93279147451 12 900.323921646066 22 -931.530792747493 32 2126.91682720423 13 900.323921646066 23 -931.530792747493 33 2126.91682720423 70 1 0 3DFACE 8 arm_half 10 900.323921646066 20 -910.985237473082 30 2151.93279147451 11 947.039601646067 21 -969.443953273309 31 2152.23049936285 12 947.039601646067 22 -943.227730171979 32 2184.1509849202 13 947.039601646067 23 -943.227730171979 33 2184.1509849202 70 1 0 3DFACE 8 arm_half 10 900.323921646066 20 -910.985237473082 30 2151.93279147451 11 853.608241646067 21 -969.443953273309 31 2152.23049936285 12 900.323921646066 22 -931.530792747493 32 2126.91682720423 13 900.323921646066 23 -931.530792747493 33 2126.91682720423 70 1 0 3DFACE 8 arm_half 10 853.608241646067 20 -969.443953273309 30 2152.23049936285 11 900.323921646066 21 -910.985237473082 31 2151.93279147451 12 853.608241646067 22 -943.227730171979 32 2184.1509849202 13 853.608241646067 23 -943.227730171979 33 2184.1509849202 70 1 0 3DFACE 8 arm_half 10 853.608241646067 20 -969.443953273309 30 2152.23049936285 11 806.892561646067 21 -910.985237473082 31 2151.93279147451 12 806.892561646067 22 -931.530792747493 32 2126.91682720423 13 806.892561646067 23 -931.530792747493 33 2126.91682720423 70 1 0 3DFACE 8 arm_half 10 806.892561646067 20 -910.985237473082 30 2151.93279147451 11 853.608241646067 21 -969.443953273309 31 2152.23049936285 12 853.608241646067 22 -943.227730171979 32 2184.1509849202 13 853.608241646067 23 -943.227730171979 33 2184.1509849202 70 1 0 3DFACE 8 arm_half 10 806.892561646067 20 -910.985237473082 30 2151.93279147451 11 760.176881646066 21 -969.443953273309 31 2152.23049936285 12 806.892561646067 22 -931.530792747493 32 2126.91682720423 13 806.892561646067 23 -931.530792747493 33 2126.91682720423 70 1 0 3DFACE 8 arm_half 10 760.176881646066 20 -969.443953273309 30 2152.23049936285 11 806.892561646067 21 -910.985237473082 31 2151.93279147451 12 760.176881646066 22 -943.227730171979 32 2184.1509849202 13 760.176881646066 23 -943.227730171979 33 2184.1509849202 70 1 0 3DFACE 8 arm_half 10 760.176881646066 20 -969.443953273309 30 2152.23049936285 11 713.461201646067 21 -910.985237473082 31 2151.93279147451 12 713.461201646067 22 -931.530792747493 32 2126.91682720423 13 713.461201646067 23 -931.530792747493 33 2126.91682720423 70 1 0 3DFACE 8 arm_half 10 713.461201646067 20 -910.985237473082 30 2151.93279147451 11 760.176881646066 21 -969.443953273309 31 2152.23049936285 12 760.176881646066 22 -943.227730171979 32 2184.1509849202 13 760.176881646066 23 -943.227730171979 33 2184.1509849202 70 1 0 3DFACE 8 arm_half 10 713.461201646067 20 -910.985237473082 30 2151.93279147451 11 666.745521646067 21 -969.443953273309 31 2152.23049936285 12 713.461201646067 22 -931.530792747493 32 2126.91682720423 13 713.461201646067 23 -931.530792747493 33 2126.91682720423 70 1 0 3DFACE 8 arm_half 10 666.745521646067 20 -969.443953273309 30 2152.23049936285 11 713.461201646067 21 -910.985237473082 31 2151.93279147451 12 666.745521646067 22 -943.227730171979 32 2184.1509849202 13 666.745521646067 23 -943.227730171979 33 2184.1509849202 70 1 0 3DFACE 8 arm_half 10 666.745521646067 20 -969.443953273309 30 2152.23049936285 11 635.537064906387 21 -943.227730171979 31 2184.1509849202 12 635.537064906387 22 -969.443953273309 32 2152.23049936285 13 635.537064906387 23 -969.443953273309 33 2152.23049936285 70 1 0 3DFACE 8 arm_half 10 635.537064906387 20 -943.227730171979 30 2184.1509849202 11 666.745521646067 21 -969.443953273309 31 2152.23049936285 12 666.745521646067 22 -943.227730171979 32 2184.1509849202 13 666.745521646067 23 -943.227730171979 33 2184.1509849202 70 1 0 3DFACE 8 arm_half 10 635.537064906387 20 -931.530792747491 30 2126.91682720422 11 200.646177778547 21 -910.985237473081 31 2151.93279147451 12 200.646177778547 22 -931.530792747491 32 2126.91682720422 13 200.646177778547 23 -931.530792747491 33 2126.91682720422 70 1 0 3DFACE 8 arm_half 10 200.646177778547 20 -910.985237473081 30 2151.93279147451 11 635.537064906387 21 -931.530792747491 31 2126.91682720422 12 635.537064906387 22 -910.985237473081 32 2151.93279147451 13 635.537064906387 23 -910.985237473081 33 2151.93279147451 70 1 0 3DFACE 8 arm_half 10 200.646177778547 20 -864.605096213174 30 2082.23220799651 11 97.3015169041444 21 -854.069611027039 31 2095.06005895826 12 97.3015169041444 22 -864.605096213174 32 2082.23220799651 13 97.3015169041444 23 -864.605096213174 33 2082.23220799651 70 1 0 3DFACE 8 arm_half 10 97.3015169041444 20 -854.069611027039 30 2095.06005895826 11 200.646177778547 21 -864.605096213174 31 2082.23220799651 12 200.646177778547 22 -854.069611027035 32 2095.06005895826 13 200.646177778547 23 -854.069611027035 33 2095.06005895826 70 1 0 3DFACE 8 arm_half 10 97.3015169041444 20 -907.906117811778 30 2111.14322068125 11 45.3075256523042 21 -890.894102928655 31 2131.85679842581 12 45.3075256523042 22 -907.906117811778 32 2111.14322068125 13 45.3075256523042 23 -907.906117811778 33 2111.14322068125 70 1 0 3DFACE 8 arm_half 10 45.3075256523042 20 -890.894102928655 30 2131.85679842581 11 97.3015169041444 21 -907.906117811778 31 2111.14322068125 12 97.3015169041444 22 -890.894102928655 32 2131.85679842581 13 97.3015169041444 23 -890.894102928655 33 2131.85679842581 70 1 0 3DFACE 8 arm_half 10 1085.39140477935 20 -806.74976549585 30 2047.77587558629 11 1080.07459980683 21 -823.190477697806 31 2054.58069962494 12 1085.39140477935 22 -808.9628443428 32 2045.0812635097 13 1085.39140477935 23 -808.9628443428 33 2045.0812635097 70 1 0 3DFACE 8 arm_half 10 1080.07459980683 20 -823.190477697806 30 2054.58069962494 11 1085.39140477935 21 -806.74976549585 31 2047.77587558629 12 1080.07459980683 22 -818.849373078262 32 2059.86636441255 13 1080.07459980683 23 -818.849373078262 33 2059.86636441255 70 1 0 3DFACE 8 arm_half 10 1080.07459980683 20 -823.190477697806 30 2054.58069962494 11 1071.44060782234 21 -840.985802170601 31 2054.58070291515 12 1080.07459980683 22 -826.416209437024 32 2048.55032816988 13 1080.07459980683 23 -826.416209437024 33 2048.55032816988 70 1 0 3DFACE 8 arm_half 10 1071.44060782234 20 -840.985802170601 30 2054.58070291515 11 1080.07459980683 21 -823.190477697806 31 2054.58069962494 12 1071.44060782234 22 -836.302764738808 32 2063.3354468104 13 1071.44060782234 23 -836.302764738808 33 2063.3354468104 70 1 0 3DFACE 8 arm_half 10 1071.44060782234 20 -836.302764738808 30 2063.3354468104 11 1059.82120360007 21 -853.75615333895 31 2059.86636906807 12 1071.44060782234 22 -840.985802170601 32 2054.58070291515 13 1071.44060782234 23 -840.985802170601 33 2054.58070291515 70 1 0 3DFACE 8 arm_half 10 1059.82120360007 20 -853.75615333895 30 2059.86636906807 11 1071.44060782234 21 -836.302764738808 31 2063.3354468104 12 1059.82120360007 22 -847.795777151423 32 2071.00904469286 13 1059.82120360007 23 -847.795777151423 33 2071.00904469286 70 1 0 3DFACE 8 arm_half 10 1059.82120360007 20 -853.75615333895 30 2059.86636906807 11 1045.6629890274 21 -857.227870491995 31 2077.30661828686 12 1045.6629890274 22 -864.23653392912 32 2064.20421320603 13 1045.6629890274 23 -864.23653392912 33 2064.20421320603 70 1 0 3DFACE 8 arm_half 10 1045.6629890274 20 -857.227870491995 30 2077.30661828686 11 1059.82120360007 21 -853.75615333895 31 2059.86636906807 12 1059.82120360007 22 -847.795777151423 32 2071.00904469286 13 1059.82120360007 23 -847.795777151423 33 2071.00904469286 70 1 0 3DFACE 8 arm_half 10 1045.6629890274 20 -864.23653392912 30 2064.20421320603 11 1029.5099682249 21 -864.236531445284 31 2081.98612648882 12 1029.5099682249 22 -872.024140727066 32 2067.42751451714 13 1029.5099682249 23 -872.024140727066 33 2067.42751451714 70 1 0 3DFACE 8 arm_half 10 1029.5099682249 20 -864.236531445284 30 2081.98612648882 11 1045.6629890274 21 -864.23653392912 31 2064.20421320603 12 1045.6629890274 22 -857.227870491995 32 2077.30661828686 13 1045.6629890274 23 -857.227870491995 33 2077.30661828686 70 1 0 3DFACE 8 arm_half 10 1029.5099682249 20 -872.024140727066 30 2067.42751451714 11 1011.98285238754 21 -868.552424065547 31 2084.86774040193 12 1011.98285238754 22 -876.819703664523 32 2069.41240470289 13 1011.98285238754 23 -876.819703664523 33 2069.41240470289 70 1 0 3DFACE 8 arm_half 10 1011.98285238754 20 -868.552424065547 30 2084.86774040193 11 1029.5099682249 21 -872.024140727066 31 2067.42751451714 12 1029.5099682249 22 -864.236531445284 32 2081.98612648882 13 1029.5099682249 23 -864.236531445284 33 2081.98612648882 70 1 0 3DFACE 8 arm_half 10 1011.98285238754 20 -876.819703664523 30 2069.41240470289 11 993.755281646067 21 -870.007199443395 31 2085.83905765611 12 993.755281646067 22 -878.436163455843 32 2070.08145966418 13 993.755281646067 23 -878.436163455843 33 2070.08145966418 70 1 0 3DFACE 8 arm_half 10 993.755281646067 20 -870.007199443395 30 2085.83905765611 11 1011.98285238754 21 -876.819703664523 31 2069.41240470289 12 1011.98285238754 22 -868.552424065547 32 2084.86774040193 13 1011.98285238754 23 -868.552424065547 33 2084.86774040193 70 1 0 3DFACE 8 arm_half 10 993.755281646067 20 -988.924364447842 30 2115.81268009677 11 947.039601646067 21 -969.443953273309 31 2152.23049936285 12 947.039601646067 22 -988.924364447842 32 2115.81268009677 13 947.039601646067 23 -988.924364447842 33 2115.81268009677 70 1 0 3DFACE 8 arm_half 10 947.039601646067 20 -969.443953273309 30 2152.23049936285 11 993.755281646067 21 -988.924364447842 31 2115.81268009677 12 993.755281646067 22 -969.443953273309 32 2152.23049936285 13 993.755281646067 23 -969.443953273309 33 2152.23049936285 70 1 0 3DFACE 8 arm_half 10 947.039601646067 20 -988.924364447842 30 2115.81268009677 11 900.323921646066 21 -931.530792747493 31 2126.91682720423 12 900.323921646066 22 -946.797517592165 32 2098.3763194502 13 900.323921646066 23 -946.797517592165 33 2098.3763194502 70 1 0 3DFACE 8 arm_half 10 900.323921646066 20 -931.530792747493 30 2126.91682720423 11 947.039601646067 21 -988.924364447842 31 2115.81268009677 12 947.039601646067 22 -969.443953273309 32 2152.23049936285 13 947.039601646067 23 -969.443953273309 33 2152.23049936285 70 1 0 3DFACE 8 arm_half 10 900.323921646066 20 -931.530792747493 30 2126.91682720423 11 853.608241646067 21 -988.924364447842 31 2115.81268009677 12 900.323921646066 22 -946.797517592165 32 2098.3763194502 13 900.323921646066 23 -946.797517592165 33 2098.3763194502 70 1 0 3DFACE 8 arm_half 10 853.608241646067 20 -988.924364447842 30 2115.81268009677 11 900.323921646066 21 -931.530792747493 31 2126.91682720423 12 853.608241646067 22 -969.443953273309 32 2152.23049936285 13 853.608241646067 23 -969.443953273309 33 2152.23049936285 70 1 0 3DFACE 8 arm_half 10 853.608241646067 20 -988.924364447842 30 2115.81268009677 11 806.892561646067 21 -931.530792747493 31 2126.91682720423 12 806.892561646067 22 -946.797517592165 32 2098.3763194502 13 806.892561646067 23 -946.797517592165 33 2098.3763194502 70 1 0 3DFACE 8 arm_half 10 806.892561646067 20 -931.530792747493 30 2126.91682720423 11 853.608241646067 21 -988.924364447842 31 2115.81268009677 12 853.608241646067 22 -969.443953273309 32 2152.23049936285 13 853.608241646067 23 -969.443953273309 33 2152.23049936285 70 1 0 3DFACE 8 arm_half 10 806.892561646067 20 -931.530792747493 30 2126.91682720423 11 760.176881646066 21 -988.924364447842 31 2115.81268009677 12 806.892561646067 22 -946.797517592165 32 2098.3763194502 13 806.892561646067 23 -946.797517592165 33 2098.3763194502 70 1 0 3DFACE 8 arm_half 10 760.176881646066 20 -988.924364447842 30 2115.81268009677 11 806.892561646067 21 -931.530792747493 31 2126.91682720423 12 760.176881646066 22 -969.443953273309 32 2152.23049936285 13 760.176881646066 23 -969.443953273309 33 2152.23049936285 70 1 0 3DFACE 8 arm_half 10 760.176881646066 20 -988.924364447842 30 2115.81268009677 11 713.461201646067 21 -931.530792747493 31 2126.91682720423 12 713.461201646067 22 -946.797517592165 32 2098.3763194502 13 713.461201646067 23 -946.797517592165 33 2098.3763194502 70 1 0 3DFACE 8 arm_half 10 713.461201646067 20 -931.530792747493 30 2126.91682720423 11 760.176881646066 21 -988.924364447842 31 2115.81268009677 12 760.176881646066 22 -969.443953273309 32 2152.23049936285 13 760.176881646066 23 -969.443953273309 33 2152.23049936285 70 1 0 3DFACE 8 arm_half 10 713.461201646067 20 -931.530792747493 30 2126.91682720423 11 666.745521646067 21 -988.924364447842 31 2115.81268009677 12 713.461201646067 22 -946.797517592165 32 2098.3763194502 13 713.461201646067 23 -946.797517592165 33 2098.3763194502 70 1 0 3DFACE 8 arm_half 10 666.745521646067 20 -988.924364447842 30 2115.81268009677 11 713.461201646067 21 -931.530792747493 31 2126.91682720423 12 666.745521646067 22 -969.443953273309 32 2152.23049936285 13 666.745521646067 23 -969.443953273309 33 2152.23049936285 70 1 0 3DFACE 8 arm_half 10 666.745521646067 20 -988.924364447842 30 2115.81268009677 11 635.537064906387 21 -969.443953273309 31 2152.23049936285 12 635.537064906387 22 -988.924364447842 32 2115.81268009677 13 635.537064906387 23 -988.924364447842 33 2115.81268009677 70 1 0 3DFACE 8 arm_half 10 635.537064906387 20 -969.443953273309 30 2152.23049936285 11 666.745521646067 21 -988.924364447842 31 2115.81268009677 12 666.745521646067 22 -969.443953273309 32 2152.23049936285 13 666.745521646067 23 -969.443953273309 33 2152.23049936285 70 1 0 3DFACE 8 arm_half 10 635.537064906387 20 -946.797517592165 30 2098.3763194502 11 200.646177778547 21 -931.530792747491 31 2126.91682720422 12 200.646177778547 22 -946.797517592165 32 2098.3763194502 13 200.646177778547 23 -946.797517592165 33 2098.3763194502 70 1 0 3DFACE 8 arm_half 10 200.646177778547 20 -931.530792747491 30 2126.91682720422 11 635.537064906387 21 -946.797517592165 31 2098.3763194502 12 635.537064906387 22 -931.530792747491 32 2126.91682720422 13 635.537064906387 23 -931.530792747491 33 2126.91682720422 70 1 0 3DFACE 8 arm_half 10 200.646177778547 20 -872.433667955026 30 2067.59701840775 11 97.3015169041444 21 -864.605096213174 31 2082.23220799651 12 97.3015169041444 22 -872.433667955028 32 2067.59701840775 13 97.3015169041444 23 -872.433667955028 33 2067.59701840775 70 1 0 3DFACE 8 arm_half 10 97.3015169041444 20 -864.605096213174 30 2082.23220799651 11 200.646177778547 21 -872.433667955026 31 2067.59701840775 12 200.646177778547 22 -864.605096213174 32 2082.23220799651 13 200.646177778547 23 -864.605096213174 33 2082.23220799651 70 1 0 3DFACE 8 arm_half 10 97.3015169041444 20 -920.547185274073 30 2087.51127030568 11 45.3075256523042 21 -907.906117811778 31 2111.14322068125 12 45.3075256523042 22 -920.547185274073 32 2087.51127030568 13 45.3075256523042 23 -920.547185274073 33 2087.51127030568 70 1 0 3DFACE 8 arm_half 10 45.3075256523042 20 -907.906117811778 30 2111.14322068125 11 97.3015169041444 21 -920.547185274073 31 2087.51127030568 12 97.3015169041444 22 -907.906117811778 32 2111.14322068125 13 97.3015169041444 23 -907.906117811778 33 2111.14322068125 70 1 0 3DFACE 8 arm_half 10 1085.39140477935 20 -808.9628443428 30 2045.0812635097 11 1080.07459980683 21 -826.416209437024 31 2048.55032816988 12 1085.39140477935 22 -810.607310280307 32 2042.00700276824 13 1085.39140477935 23 -810.607310280307 33 2042.00700276824 70 1 0 3DFACE 8 arm_half 10 1080.07459980683 20 -826.416209437024 30 2048.55032816988 11 1085.39140477935 21 -808.9628443428 31 2045.0812635097 12 1080.07459980683 22 -823.190477697806 32 2054.58069962494 13 1080.07459980683 23 -823.190477697806 33 2054.58069962494 70 1 0 3DFACE 8 arm_half 10 1080.07459980683 20 -826.416209437024 30 2048.55032816988 11 1071.44060782234 21 -843.869602382313 31 2045.08125222601 12 1080.07459980683 22 -828.402605234187 32 2042.00699384053 13 1080.07459980683 23 -828.402605234187 33 2042.00699384053 70 1 0 3DFACE 8 arm_half 10 1071.44060782234 20 -843.869602382313 30 2045.08125222601 11 1080.07459980683 21 -826.416209437024 31 2048.55032816988 12 1071.44060782234 22 -840.985802170601 32 2054.58070291515 13 1071.44060782234 23 -840.985802170601 33 2054.58070291515 70 1 0 3DFACE 8 arm_half 10 1071.44060782234 20 -840.985802170601 30 2054.58070291515 11 1059.82120360007 21 -857.426534872689 31 2047.77586146339 12 1071.44060782234 22 -843.869602382313 32 2045.08125222601 13 1071.44060782234 23 -843.869602382313 33 2045.08125222601 70 1 0 3DFACE 8 arm_half 10 1059.82120360007 20 -857.426534872689 30 2047.77586146339 11 1071.44060782234 21 -840.985802170601 31 2054.58070291515 12 1059.82120360007 22 -853.75615333895 32 2059.86636906807 13 1059.82120360007 23 -853.75615333895 33 2059.86636906807 70 1 0 3DFACE 8 arm_half 10 1059.82120360007 20 -857.426534872689 30 2047.77586146339 11 1045.6629890274 21 -864.23653392912 31 2064.20421320603 12 1045.6629890274 22 -868.552447563839 32 2049.98727522776 13 1045.6629890274 23 -868.552447563839 33 2049.98727522776 70 1 0 3DFACE 8 arm_half 10 1045.6629890274 20 -864.23653392912 30 2064.20421320603 11 1059.82120360007 21 -857.426534872689 31 2047.77586146339 12 1059.82120360007 22 -853.75615333895 32 2059.86636906807 13 1059.82120360007 23 -853.75615333895 33 2059.86636906807 70 1 0 3DFACE 8 arm_half 10 1045.6629890274 20 -868.552447563839 30 2049.98727522776 11 1029.5099682249 21 -872.024140727066 31 2067.42751451714 12 1029.5099682249 22 -876.819726844542 32 2051.63049998629 13 1029.5099682249 23 -876.819726844542 33 2051.63049998629 70 1 0 3DFACE 8 arm_half 10 1029.5099682249 20 -872.024140727066 30 2067.42751451714 11 1045.6629890274 21 -868.552447563839 31 2049.98727522776 12 1045.6629890274 22 -864.23653392912 32 2064.20421320603 13 1045.6629890274 23 -864.23653392912 33 2064.20421320603 70 1 0 3DFACE 8 arm_half 10 1029.5099682249 20 -876.819726844542 30 2051.63049998629 11 1011.98285238754 21 -876.819703664523 31 2069.41240470289 12 1011.98285238754 22 -881.910669304885 32 2052.64238822799 13 1011.98285238754 23 -881.910669304885 33 2052.64238822799 70 1 0 3DFACE 8 arm_half 10 1011.98285238754 20 -876.819703664523 30 2069.41240470289 11 1029.5099682249 21 -876.819726844542 31 2051.63049998629 12 1029.5099682249 22 -872.024140727066 32 2067.42751451714 13 1029.5099682249 23 -872.024140727066 33 2067.42751451714 70 1 0 3DFACE 8 arm_half 10 1011.98285238754 20 -881.910669304885 30 2052.64238822799 11 993.755281646067 21 -878.436163455843 31 2070.08145966418 12 993.755281646067 22 -883.626693866424 32 2052.98346948944 13 993.755281646067 23 -883.626693866424 33 2052.98346948944 70 1 0 3DFACE 8 arm_half 10 993.755281646067 20 -878.436163455843 30 2070.08145966418 11 1011.98285238754 21 -881.910669304885 31 2052.64238822799 12 1011.98285238754 22 -876.819703664523 32 2069.41240470289 13 1011.98285238754 23 -876.819703664523 33 2069.41240470289 70 1 0 3DFACE 8 arm_half 10 993.755281646067 20 -1000.92034241888 30 2076.297043493 11 947.039601646067 21 -988.924364447842 31 2115.81268009677 12 947.039601646067 22 -1000.92034241888 32 2076.297043493 13 947.039601646067 23 -1000.92034241888 33 2076.297043493 70 1 0 3DFACE 8 arm_half 10 947.039601646067 20 -988.924364447842 30 2115.81268009677 11 993.755281646067 21 -1000.92034241888 31 2076.297043493 12 993.755281646067 22 -988.924364447842 32 2115.81268009677 13 993.755281646067 23 -988.924364447842 33 2115.81268009677 70 1 0 3DFACE 8 arm_half 10 947.039601646067 20 -1000.92034241888 30 2076.297043493 11 900.323921646066 21 -946.797517592165 31 2098.3763194502 12 900.323921646066 22 -956.198720333 32 2067.40806391972 13 900.323921646066 23 -956.198720333 33 2067.40806391972 70 1 0 3DFACE 8 arm_half 10 900.323921646066 20 -946.797517592165 30 2098.3763194502 11 947.039601646067 21 -1000.92034241888 31 2076.297043493 12 947.039601646067 22 -988.924364447842 32 2115.81268009677 13 947.039601646067 23 -988.924364447842 33 2115.81268009677 70 1 0 3DFACE 8 arm_half 10 900.323921646066 20 -946.797517592165 30 2098.3763194502 11 853.608241646067 21 -1000.92034241888 31 2076.297043493 12 900.323921646066 22 -956.198720333 32 2067.40806391972 13 900.323921646066 23 -956.198720333 33 2067.40806391972 70 1 0 3DFACE 8 arm_half 10 853.608241646067 20 -1000.92034241888 30 2076.297043493 11 900.323921646066 21 -946.797517592165 31 2098.3763194502 12 853.608241646067 22 -988.924364447842 32 2115.81268009677 13 853.608241646067 23 -988.924364447842 33 2115.81268009677 70 1 0 3DFACE 8 arm_half 10 853.608241646067 20 -1000.92034241888 30 2076.297043493 11 806.892561646067 21 -946.797517592165 31 2098.3763194502 12 806.892561646067 22 -956.198720333 32 2067.40806391972 13 806.892561646067 23 -956.198720333 33 2067.40806391972 70 1 0 3DFACE 8 arm_half 10 806.892561646067 20 -946.797517592165 30 2098.3763194502 11 853.608241646067 21 -1000.92034241888 31 2076.297043493 12 853.608241646067 22 -988.924364447842 32 2115.81268009677 13 853.608241646067 23 -988.924364447842 33 2115.81268009677 70 1 0 3DFACE 8 arm_half 10 806.892561646067 20 -946.797517592165 30 2098.3763194502 11 760.176881646066 21 -1000.92034241888 31 2076.297043493 12 806.892561646067 22 -956.198720333 32 2067.40806391972 13 806.892561646067 23 -956.198720333 33 2067.40806391972 70 1 0 3DFACE 8 arm_half 10 760.176881646066 20 -1000.92034241888 30 2076.297043493 11 806.892561646067 21 -946.797517592165 31 2098.3763194502 12 760.176881646066 22 -988.924364447842 32 2115.81268009677 13 760.176881646066 23 -988.924364447842 33 2115.81268009677 70 1 0 3DFACE 8 arm_half 10 760.176881646066 20 -1000.92034241888 30 2076.297043493 11 713.461201646067 21 -946.797517592165 31 2098.3763194502 12 713.461201646067 22 -956.198720333 32 2067.40806391972 13 713.461201646067 23 -956.198720333 33 2067.40806391972 70 1 0 3DFACE 8 arm_half 10 713.461201646067 20 -946.797517592165 30 2098.3763194502 11 760.176881646066 21 -1000.92034241888 31 2076.297043493 12 760.176881646066 22 -988.924364447842 32 2115.81268009677 13 760.176881646066 23 -988.924364447842 33 2115.81268009677 70 1 0 3DFACE 8 arm_half 10 713.461201646067 20 -946.797517592165 30 2098.3763194502 11 666.745521646067 21 -1000.92034241888 31 2076.297043493 12 713.461201646067 22 -956.198720333 32 2067.40806391972 13 713.461201646067 23 -956.198720333 33 2067.40806391972 70 1 0 3DFACE 8 arm_half 10 666.745521646067 20 -1000.92034241888 30 2076.297043493 11 713.461201646067 21 -946.797517592165 31 2098.3763194502 12 666.745521646067 22 -988.924364447842 32 2115.81268009677 13 666.745521646067 23 -988.924364447842 33 2115.81268009677 70 1 0 3DFACE 8 arm_half 10 666.745521646067 20 -1000.92034241888 30 2076.297043493 11 635.537064906387 21 -988.924364447842 31 2115.81268009677 12 635.537064906387 22 -1000.92034241888 32 2076.297043493 13 635.537064906387 23 -1000.92034241888 33 2076.297043493 70 1 0 3DFACE 8 arm_half 10 635.537064906387 20 -988.924364447842 30 2115.81268009677 11 666.745521646067 21 -1000.92034241888 31 2076.297043493 12 666.745521646067 22 -988.924364447842 32 2115.81268009677 13 666.745521646067 23 -988.924364447842 33 2115.81268009677 70 1 0 3DFACE 8 arm_half 10 635.537064906387 20 -956.198720333 30 2067.40806391972 11 200.646177778547 21 -946.797517592165 31 2098.3763194502 12 200.646177778547 22 -956.198720333 32 2067.40806391972 13 200.646177778547 23 -956.198720333 33 2067.40806391972 70 1 0 3DFACE 8 arm_half 10 200.646177778547 20 -946.797517592165 30 2098.3763194502 11 635.537064906387 21 -956.198720333 31 2067.40806391972 12 635.537064906387 22 -946.797517592165 32 2098.3763194502 13 635.537064906387 23 -946.797517592165 33 2098.3763194502 70 1 0 3DFACE 8 arm_half 10 200.646177778547 20 -877.254478630867 30 2051.71691232036 11 97.3015169041444 21 -872.433667955028 31 2067.59701840775 12 97.3015169041444 22 -877.254478630867 32 2051.71691232036 13 97.3015169041444 23 -877.254478630867 33 2051.71691232036 70 1 0 3DFACE 8 arm_half 10 97.3015169041444 20 -872.433667955028 30 2067.59701840775 11 200.646177778547 21 -877.254478630867 31 2051.71691232036 12 200.646177778547 22 -872.433667955026 32 2067.59701840775 13 200.646177778547 23 -872.433667955026 33 2067.59701840775 70 1 0 3DFACE 8 arm_half 10 97.3015169041444 20 -928.331516182155 30 2061.8691098991 11 45.3075256523042 21 -920.547185274073 31 2087.51127030568 12 45.3075256523042 22 -928.331516182155 32 2061.8691098991 13 45.3075256523042 23 -928.331516182155 33 2061.8691098991 70 1 0 3DFACE 8 arm_half 10 45.3075256523042 20 -920.547185274073 30 2087.51127030568 11 97.3015169041444 21 -928.331516182155 31 2061.8691098991 12 97.3015169041444 22 -920.547185274073 32 2087.51127030568 13 97.3015169041444 23 -920.547185274073 33 2087.51127030568 70 1 0 3DFACE 8 arm_half 10 1085.39140477935 20 -810.607310280307 30 2042.00700276824 11 1080.07459980683 21 -828.402605234187 31 2042.00699384053 12 1085.39140477935 22 -811.619967404623 32 2038.67123547813 13 1085.39140477935 23 -811.619967404623 33 2038.67123547813 70 1 0 3DFACE 8 arm_half 10 1080.07459980683 20 -828.402605234187 30 2042.00699384053 11 1085.39140477935 21 -810.607310280307 31 2042.00700276824 12 1080.07459980683 22 -826.416209437024 32 2048.55032816988 13 1080.07459980683 23 -826.416209437024 33 2048.55032816988 70 1 0 3DFACE 8 arm_half 10 1080.07459980683 20 -828.402605234187 30 2042.00699384053 11 1071.44060782234 21 -844.843342549059 31 2035.20215330562 12 1080.07459980683 22 -829.073329012799 32 2035.20215330562 13 1080.07459980683 23 -829.073329012799 33 2035.20215330562 70 1 0 3DFACE 8 arm_half 10 1071.44060782234 20 -844.843342549059 30 2035.20215330562 11 1080.07459980683 21 -828.402605234187 31 2042.00699384053 12 1071.44060782234 22 -843.869602382313 32 2045.08125222601 13 1071.44060782234 23 -843.869602382313 33 2045.08125222601 70 1 0 3DFACE 8 arm_half 10 1071.44060782234 20 -843.869602382313 30 2045.08125222601 11 1059.82120360007 21 -858.665871048675 31 2035.20215330562 12 1071.44060782234 22 -844.843342549059 32 2035.20215330562 13 1071.44060782234 23 -844.843342549059 33 2035.20215330562 70 1 0 3DFACE 8 arm_half 10 1059.82120360007 20 -858.665871048675 30 2035.20215330562 11 1071.44060782234 21 -843.869602382313 31 2045.08125222601 12 1059.82120360007 22 -857.426534872689 32 2047.77586146339 13 1059.82120360007 23 -857.426534872689 33 2047.77586146339 70 1 0 3DFACE 8 arm_half 10 1059.82120360007 20 -858.665871048675 30 2035.20215330562 11 1045.6629890274 21 -868.552447563839 31 2049.98727522776 12 1045.6629890274 22 -870.009753255569 32 2035.20215330562 13 1045.6629890274 23 -870.009753255569 33 2035.20215330562 70 1 0 3DFACE 8 arm_half 10 1045.6629890274 20 -868.552447563839 30 2049.98727522776 11 1059.82120360007 21 -858.665871048675 31 2035.20215330562 12 1059.82120360007 22 -857.426534872689 32 2047.77586146339 13 1059.82120360007 23 -857.426534872689 33 2047.77586146339 70 1 0 3DFACE 8 arm_half 10 1045.6629890274 20 -870.009753255569 30 2035.20215330562 11 1029.5099682249 21 -876.819726844542 31 2051.63049998629 12 1029.5099682249 22 -878.438998112613 32 2035.20215330562 13 1029.5099682249 23 -878.438998112613 33 2035.20215330562 70 1 0 3DFACE 8 arm_half 10 1029.5099682249 20 -876.819726844542 30 2051.63049998629 11 1045.6629890274 21 -870.009753255569 31 2035.20215330562 12 1045.6629890274 22 -868.552447563839 32 2049.98727522776 13 1045.6629890274 23 -868.552447563839 33 2049.98727522776 70 1 0 3DFACE 8 arm_half 10 1029.5099682249 20 -878.438998112613 30 2035.20215330562 11 1011.98285238754 21 -881.910669304885 31 2052.64238822799 12 1011.98285238754 22 -883.629678032126 32 2035.20215330562 13 1011.98285238754 23 -883.629678032126 33 2035.20215330562 70 1 0 3DFACE 8 arm_half 10 1011.98285238754 20 -881.910669304885 30 2052.64238822799 11 1029.5099682249 21 -878.438998112613 31 2035.20215330562 12 1029.5099682249 22 -876.819726844542 32 2051.63049998629 13 1029.5099682249 23 -876.819726844542 33 2051.63049998629 70 1 0 3DFACE 8 arm_half 10 1011.98285238754 20 -883.629678032126 30 2035.20215330562 11 993.755281646067 21 -883.626693866424 31 2052.98346948944 12 993.755281646067 22 -885.379321502337 32 2035.20215330562 13 993.755281646067 23 -885.379321502337 33 2035.20215330562 70 1 0 3DFACE 8 arm_half 10 993.755281646067 20 -883.626693866424 30 2052.98346948944 11 1011.98285238754 21 -883.629678032126 31 2035.20215330562 12 1011.98285238754 22 -881.910669304885 32 2052.64238822799 13 1011.98285238754 23 -881.910669304885 33 2052.64238822799 70 1 0 3DFACE 8 arm_half 10 993.755281646067 20 -1004.97088848041 30 2035.20215330562 11 947.039601646067 21 -1000.92034241888 31 2076.297043493 12 947.039601646067 22 -1004.97088848041 32 2035.20215330562 13 947.039601646067 23 -1004.97088848041 33 2035.20215330562 70 1 0 3DFACE 8 arm_half 10 947.039601646067 20 -1000.92034241888 30 2076.297043493 11 993.755281646067 21 -1004.97088848041 31 2035.20215330562 12 993.755281646067 22 -1000.92034241888 32 2076.297043493 13 993.755281646067 23 -1000.92034241888 33 2076.297043493 70 1 0 3DFACE 8 arm_half 10 947.039601646067 20 -1000.92034241888 30 2076.297043493 11 900.323921646066 21 -959.37311802092 31 2035.20215330562 12 947.039601646067 22 -1004.97088848041 32 2035.20215330562 13 947.039601646067 23 -1004.97088848041 33 2035.20215330562 70 1 0 3DFACE 8 arm_half 10 900.323921646066 20 -959.37311802092 30 2035.20215330562 11 947.039601646067 21 -1000.92034241888 31 2076.297043493 12 900.323921646066 22 -956.198720333 32 2067.40806391972 13 900.323921646066 23 -956.198720333 33 2067.40806391972 70 1 0 3DFACE 8 arm_half 10 900.323921646066 20 -956.198720333 30 2067.40806391972 11 853.608241646067 21 -1004.97088848041 31 2035.20215330562 12 900.323921646066 22 -959.37311802092 32 2035.20215330562 13 900.323921646066 23 -959.37311802092 33 2035.20215330562 70 1 0 3DFACE 8 arm_half 10 853.608241646067 20 -1004.97088848041 30 2035.20215330562 11 900.323921646066 21 -956.198720333 31 2067.40806391972 12 853.608241646067 22 -1000.92034241888 32 2076.297043493 13 853.608241646067 23 -1000.92034241888 33 2076.297043493 70 1 0 3DFACE 8 arm_half 10 853.608241646067 20 -1000.92034241888 30 2076.297043493 11 806.892561646067 21 -959.37311802092 31 2035.20215330562 12 853.608241646067 22 -1004.97088848041 32 2035.20215330562 13 853.608241646067 23 -1004.97088848041 33 2035.20215330562 70 1 0 3DFACE 8 arm_half 10 806.892561646067 20 -959.37311802092 30 2035.20215330562 11 853.608241646067 21 -1000.92034241888 31 2076.297043493 12 806.892561646067 22 -956.198720333 32 2067.40806391972 13 806.892561646067 23 -956.198720333 33 2067.40806391972 70 1 0 3DFACE 8 arm_half 10 806.892561646067 20 -956.198720333 30 2067.40806391972 11 760.176881646066 21 -1004.97088848041 31 2035.20215330562 12 806.892561646067 22 -959.37311802092 32 2035.20215330562 13 806.892561646067 23 -959.37311802092 33 2035.20215330562 70 1 0 3DFACE 8 arm_half 10 760.176881646066 20 -1004.97088848041 30 2035.20215330562 11 806.892561646067 21 -956.198720333 31 2067.40806391972 12 760.176881646066 22 -1000.92034241888 32 2076.297043493 13 760.176881646066 23 -1000.92034241888 33 2076.297043493 70 1 0 3DFACE 8 arm_half 10 760.176881646066 20 -1000.92034241888 30 2076.297043493 11 713.461201646067 21 -959.37311802092 31 2035.20215330562 12 760.176881646066 22 -1004.97088848041 32 2035.20215330562 13 760.176881646066 23 -1004.97088848041 33 2035.20215330562 70 1 0 3DFACE 8 arm_half 10 713.461201646067 20 -959.37311802092 30 2035.20215330562 11 760.176881646066 21 -1000.92034241888 31 2076.297043493 12 713.461201646067 22 -956.198720333 32 2067.40806391972 13 713.461201646067 23 -956.198720333 33 2067.40806391972 70 1 0 3DFACE 8 arm_half 10 713.461201646067 20 -956.198720333 30 2067.40806391972 11 666.745521646067 21 -1004.97088848041 31 2035.20215330562 12 713.461201646067 22 -959.37311802092 32 2035.20215330562 13 713.461201646067 23 -959.37311802092 33 2035.20215330562 70 1 0 3DFACE 8 arm_half 10 666.745521646067 20 -1004.97088848041 30 2035.20215330562 11 713.461201646067 21 -956.198720333 31 2067.40806391972 12 666.745521646067 22 -1000.92034241888 32 2076.297043493 13 666.745521646067 23 -1000.92034241888 33 2076.297043493 70 1 0 3DFACE 8 arm_half 10 666.745521646067 20 -1004.97088848041 30 2035.20215330562 11 635.537064906387 21 -1000.92034241888 31 2076.297043493 12 635.537064906387 22 -1004.97088848041 32 2035.20215330562 13 635.537064906387 23 -1004.97088848041 33 2035.20215330562 70 1 0 3DFACE 8 arm_half 10 635.537064906387 20 -1000.92034241888 30 2076.297043493 11 666.745521646067 21 -1004.97088848041 31 2035.20215330562 12 666.745521646067 22 -1000.92034241888 32 2076.297043493 13 666.745521646067 23 -1000.92034241888 33 2076.297043493 70 1 0 3DFACE 8 arm_half 10 635.537064906387 20 -959.37311802092 30 2035.20215330562 11 200.646177778547 21 -956.198720333 31 2067.40806391972 12 200.646177778547 22 -959.37311802092 32 2035.20215330562 13 200.646177778547 23 -959.37311802092 33 2035.20215330562 70 1 0 3DFACE 8 arm_half 10 200.646177778547 20 -956.198720333 30 2067.40806391972 11 635.537064906387 21 -959.37311802092 31 2035.20215330562 12 635.537064906387 22 -956.198720333 32 2067.40806391972 13 635.537064906387 23 -956.198720333 33 2067.40806391972 70 1 0 3DFACE 8 arm_half 10 200.646177778547 20 -878.882267189965 30 2035.20215330562 11 97.3015169041444 21 -877.254478630867 31 2051.71691232036 12 97.3015169041444 22 -878.882267189966 32 2035.20215330562 13 97.3015169041444 23 -878.882267189966 33 2035.20215330562 70 1 0 3DFACE 8 arm_half 10 97.3015169041444 20 -877.254478630867 30 2051.71691232036 11 200.646177778547 21 -878.882267189965 31 2035.20215330562 12 200.646177778547 22 -877.254478630867 32 2051.71691232036 13 200.646177778547 23 -877.254478630867 33 2051.71691232036 70 1 0 3DFACE 8 arm_half 10 97.3015169041444 20 -930.959963064732 30 2035.20215330562 11 45.3075256523042 21 -928.331516182155 31 2061.8691098991 12 45.3075256523042 22 -930.959963064732 32 2035.20215330562 13 45.3075256523042 23 -930.959963064732 33 2035.20215330562 70 1 0 3DFACE 8 arm_half 10 45.3075256523042 20 -928.331516182155 30 2061.8691098991 11 97.3015169041444 21 -930.959963064732 31 2035.20215330562 12 97.3015169041444 22 -928.331516182155 32 2061.8691098991 13 97.3015169041444 23 -928.331516182155 33 2061.8691098991 70 1 0 3DFACE 8 arm_half 10 1085.39140477935 20 -811.619967404623 30 2038.67123547813 11 1080.07459980683 21 -829.073329012799 31 2035.20215330562 12 1085.39140477935 22 -811.96189987036 32 2035.20215330562 13 1085.39140477935 23 -811.96189987036 33 2035.20215330562 70 1 0 3DFACE 8 arm_half 10 1080.07459980683 20 -829.073329012799 30 2035.20215330562 11 1085.39140477935 21 -811.619967404623 31 2038.67123547813 12 1080.07459980683 22 -828.402605234187 32 2042.00699384053 13 1080.07459980683 23 -828.402605234187 33 2042.00699384053 70 1 0 3DFACE 8 arm_half 10 635.537064906387 20 -835.292444325637 30 2241.80011766922 11 635.537064906387 21 -794.16656 31 2200.28420494853 12 635.537064906387 22 -826.396760603478 32 2197.11219961575 13 635.537064906387 23 -826.396760603478 33 2197.11219961575 70 1 0 3DFACE 8 arm_half 10 635.537064906387 20 -794.16656 30 2200.28420494853 11 635.537064906387 21 -835.292444325637 31 2241.80011766922 12 635.537064906387 22 -794.16656 32 2245.84761107459 13 635.537064906387 23 -794.16656 33 2245.84761107459 70 1 0 3DFACE 8 arm_half 10 1085.39140477935 20 -794.16656 30 2052.98408188445 11 1085.39140477935 21 -797.638258585694 31 2052.64240711292 12 1087.18664164607 22 -794.16656 32 2035.20215330562 13 1087.18664164607 23 -794.16656 33 2035.20215330562 70 0 0 3DFACE 8 arm_half 10 1085.39140477935 20 -797.638258585694 30 2052.64240711292 11 1085.39140477935 21 -800.976541741692 31 2051.63051316818 12 1087.18664164607 22 -794.16656 32 2035.20215330562 13 1087.18664164607 23 -794.16656 33 2035.20215330562 70 0 0 3DFACE 8 arm_half 10 1085.39140477935 20 -800.976541741692 30 2051.63051316818 11 1085.39140477935 21 -804.053121118439 31 2049.98728656705 12 1087.18664164607 22 -794.16656 32 2035.20215330562 13 1087.18664164607 23 -794.16656 33 2035.20215330562 70 0 0 3DFACE 8 arm_half 10 1085.39140477935 20 -804.053121118439 30 2049.98728656705 11 1085.39140477935 21 -806.74976549585 31 2047.77587558629 12 1087.18664164607 22 -794.16656 32 2035.20215330562 13 1087.18664164607 23 -794.16656 33 2035.20215330562 70 0 0 3DFACE 8 arm_half 10 1085.39140477935 20 -806.74976549585 30 2047.77587558629 11 1085.39140477935 21 -808.9628443428 31 2045.0812635097 12 1087.18664164607 22 -794.16656 32 2035.20215330562 13 1087.18664164607 23 -794.16656 33 2035.20215330562 70 0 0 3DFACE 8 arm_half 10 1085.39140477935 20 -808.9628443428 30 2045.0812635097 11 1085.39140477935 21 -810.607310280307 31 2042.00700276824 12 1087.18664164607 22 -794.16656 32 2035.20215330562 13 1087.18664164607 23 -794.16656 33 2035.20215330562 70 0 0 3DFACE 8 arm_half 10 1085.39140477935 20 -810.607310280307 30 2042.00700276824 11 1085.39140477935 21 -811.619967404623 31 2038.67123547813 12 1087.18664164607 22 -794.16656 32 2035.20215330562 13 1087.18664164607 23 -794.16656 33 2035.20215330562 70 0 0 3DFACE 8 arm_half 10 1085.39140477935 20 -811.619967404623 30 2038.67123547813 11 1085.39140477935 21 -811.96189987036 31 2035.20215330562 12 1087.18664164607 22 -794.16656 32 2035.20215330562 13 1087.18664164607 23 -794.16656 33 2035.20215330562 70 0 0 3DFACE 8 arm_half 10 993.755281646067 20 -883.626693866424 30 2052.98346948944 11 993.755281646067 21 -1004.97088848041 31 2035.20215330562 12 993.755281646067 22 -885.379321502337 32 2035.20215330562 13 993.755281646067 23 -885.379321502337 33 2035.20215330562 70 1 0 3DFACE 8 arm_half 10 993.755281646067 20 -1004.97088848041 30 2035.20215330562 11 993.755281646067 21 -883.626693866424 31 2052.98346948944 12 993.755281646067 22 -1000.92034241888 32 2076.297043493 13 993.755281646067 23 -1000.92034241888 33 2076.297043493 70 1 0 3DFACE 8 arm_half 10 97.3015169041444 20 -872.433667955028 30 2067.59701840775 11 97.3015169041444 21 -928.331516182155 31 2061.8691098991 12 97.3015169041444 22 -877.254478630867 32 2051.71691232036 13 97.3015169041444 23 -877.254478630867 33 2051.71691232036 70 1 0 3DFACE 8 arm_half 10 97.3015169041444 20 -928.331516182155 30 2061.8691098991 11 97.3015169041444 21 -872.433667955028 31 2067.59701840775 12 97.3015169041444 22 -920.547185274073 32 2087.51127030568 13 97.3015169041444 23 -920.547185274073 33 2087.51127030568 70 1 0 3DFACE 8 arm_half 10 45.3075256523042 20 -920.547185274073 30 2087.51127030568 11 45.3075256523042 21 -794.16656 31 2035.20215330562 12 45.3075256523042 22 -928.331516182155 32 2061.8691098991 13 45.3075256523042 23 -928.331516182155 33 2061.8691098991 70 0 0 3DFACE 8 arm_half 10 200.646177778547 20 -826.396760603478 30 2197.11219961575 11 200.646177778547 21 -794.16656 31 2119.85401529483 12 200.646177778547 22 -810.693774595514 32 2118.22745350336 13 200.646177778547 23 -810.693774595514 33 2118.22745350336 70 1 0 3DFACE 8 arm_half 10 200.646177778547 20 -794.16656 30 2119.85401529483 11 200.646177778547 21 -826.396760603478 31 2197.11219961575 12 200.646177778547 22 -794.16656 32 2200.28420494853 13 200.646177778547 23 -794.16656 33 2200.28420494853 70 1 0 3DFACE 8 arm_half 10 45.3075256523042 20 -928.331516182155 30 2061.8691098991 11 45.3075256523042 21 -794.16656 31 2035.20215330562 12 45.3075256523042 22 -930.959963064732 32 2035.20215330562 13 45.3075256523042 23 -930.959963064732 33 2035.20215330562 70 0 0 3DFACE 8 arm_half 10 45.3075256523042 20 -794.16656 30 2171.89246330095 11 45.3075256523042 21 -794.16656 31 2035.20215330562 12 45.3075256523042 22 -820.853629053581 32 2169.2659973228 13 45.3075256523042 23 -820.853629053581 33 2169.2659973228 70 0 0 3DFACE 8 arm_half 10 45.3075256523042 20 -907.906117811778 30 2111.14322068125 11 45.3075256523042 21 -794.16656 31 2035.20215330562 12 45.3075256523042 22 -920.547185274073 32 2087.51127030568 13 45.3075256523042 23 -920.547185274073 33 2087.51127030568 70 0 0 3DFACE 8 arm_half 10 45.3075256523042 20 -890.894102928655 30 2131.85679842581 11 45.3075256523042 21 -794.16656 31 2035.20215330562 12 45.3075256523042 22 -907.906117811778 32 2111.14322068125 13 45.3075256523042 23 -907.906117811778 33 2111.14322068125 70 0 0 3DFACE 8 arm_half 10 45.3075256523042 20 -870.164902816216 30 2148.85599236295 11 45.3075256523042 21 -794.16656 31 2035.20215330562 12 45.3075256523042 22 -890.894102928655 32 2131.85679842581 13 45.3075256523042 23 -890.894102928655 33 2131.85679842581 70 0 0 3DFACE 8 arm_half 10 45.3075256523042 20 -846.515129009712 30 2161.48753300293 11 45.3075256523042 21 -794.16656 31 2035.20215330562 12 45.3075256523042 22 -870.164902816216 32 2148.85599236295 13 45.3075256523042 23 -870.164902816216 33 2148.85599236295 70 0 0 3DFACE 8 arm_half 10 45.3075256523042 20 -820.853629053581 30 2169.2659973228 11 45.3075256523042 21 -794.16656 31 2035.20215330562 12 45.3075256523042 22 -846.515129009712 32 2161.48753300293 13 45.3075256523042 23 -846.515129009712 33 2161.48753300293 70 0 0 3DFACE 8 arm_half 10 200.646177778547 20 -956.198720333 30 2067.40806391972 11 200.646177778547 21 -878.882267189965 31 2035.20215330562 12 200.646177778547 22 -959.37311802092 32 2035.20215330562 13 200.646177778547 23 -959.37311802092 33 2035.20215330562 70 1 0 3DFACE 8 arm_half 10 200.646177778547 20 -878.882267189965 30 2035.20215330562 11 200.646177778547 21 -956.198720333 31 2067.40806391972 12 200.646177778547 22 -877.254478630867 32 2051.71691232036 13 200.646177778547 23 -877.254478630867 33 2051.71691232036 70 1 0 3DFACE 8 arm_half 10 200.646177778547 20 -956.198720333 30 2067.40806391972 11 200.646177778547 21 -872.433667955026 31 2067.59701840775 12 200.646177778547 22 -877.254478630867 32 2051.71691232036 13 200.646177778547 23 -877.254478630867 33 2051.71691232036 70 1 0 3DFACE 8 arm_half 10 200.646177778547 20 -872.433667955026 30 2067.59701840775 11 200.646177778547 21 -956.198720333 31 2067.40806391972 12 200.646177778547 22 -946.797517592165 32 2098.3763194502 13 200.646177778547 23 -946.797517592165 33 2098.3763194502 70 1 0 3DFACE 8 arm_half 10 200.646177778547 20 -946.797517592165 30 2098.3763194502 11 200.646177778547 21 -864.605096213174 31 2082.23220799651 12 200.646177778547 22 -872.433667955026 32 2067.59701840775 13 200.646177778547 23 -872.433667955026 33 2067.59701840775 70 1 0 3DFACE 8 arm_half 10 200.646177778547 20 -864.605096213174 30 2082.23220799651 11 200.646177778547 21 -946.797517592165 31 2098.3763194502 12 200.646177778547 22 -931.530792747491 32 2126.91682720422 13 200.646177778547 23 -931.530792747491 33 2126.91682720422 70 1 0 3DFACE 8 arm_half 10 200.646177778547 20 -931.530792747491 30 2126.91682720422 11 200.646177778547 21 -854.069611027035 31 2095.06005895826 12 200.646177778547 22 -864.605096213174 32 2082.23220799651 13 200.646177778547 23 -864.605096213174 33 2082.23220799651 70 1 0 3DFACE 8 arm_half 10 200.646177778547 20 -854.069611027035 30 2095.06005895826 11 200.646177778547 21 -931.530792747491 31 2126.91682720422 12 200.646177778547 22 -910.985237473081 32 2151.93279147451 13 200.646177778547 23 -910.985237473081 33 2151.93279147451 70 1 0 3DFACE 8 arm_half 10 200.646177778547 20 -910.985237473081 30 2151.93279147451 11 200.646177778547 21 -841.232085183949 31 2105.58760417448 12 200.646177778547 22 -854.069611027035 32 2095.06005895826 13 200.646177778547 23 -854.069611027035 33 2095.06005895826 70 1 0 3DFACE 8 arm_half 10 200.646177778547 20 -841.232085183949 30 2105.58760417448 11 200.646177778547 21 -910.985237473081 31 2151.93279147451 12 200.646177778547 22 -885.950405936048 32 2172.46286278326 13 200.646177778547 23 -885.950405936048 33 2172.46286278326 70 1 0 3DFACE 8 arm_half 10 200.646177778547 20 -885.950405936048 30 2172.46286278326 11 200.646177778547 21 -826.585857602691 31 2113.41027598642 12 200.646177778547 22 -841.232085183949 32 2105.58760417448 13 200.646177778547 23 -841.232085183949 33 2105.58760417448 70 1 0 3DFACE 8 arm_half 10 200.646177778547 20 -826.585857602691 30 2113.41027598642 11 200.646177778547 21 -885.950405936048 31 2172.46286278326 12 200.646177778547 22 -857.388372672667 32 2187.71808200347 13 200.646177778547 23 -857.388372672667 33 2187.71808200347 70 1 0 3DFACE 8 arm_half 10 200.646177778547 20 -857.388372672667 30 2187.71808200347 11 200.646177778547 21 -810.693774595514 31 2118.22745350336 12 200.646177778547 22 -826.585857602691 32 2113.41027598642 13 200.646177778547 23 -826.585857602691 33 2113.41027598642 70 1 0 3DFACE 8 arm_half 10 200.646177778547 20 -810.693774595514 30 2118.22745350336 11 200.646177778547 21 -857.388372672667 31 2187.71808200347 12 200.646177778547 22 -826.396760603478 32 2197.11219961575 13 200.646177778547 23 -826.396760603478 33 2197.11219961575 70 1 0 3DFACE 8 arm_half 10 635.537064906387 20 -1000.92034241888 30 2076.297043493 11 635.537064906387 21 -959.37311802092 31 2035.20215330562 12 635.537064906387 22 -1004.97088848041 32 2035.20215330562 13 635.537064906387 23 -1004.97088848041 33 2035.20215330562 70 1 0 3DFACE 8 arm_half 10 635.537064906387 20 -959.37311802092 30 2035.20215330562 11 635.537064906387 21 -1000.92034241888 31 2076.297043493 12 635.537064906387 22 -956.198720333 32 2067.40806391972 13 635.537064906387 23 -956.198720333 33 2067.40806391972 70 1 0 3DFACE 8 arm_half 10 635.537064906387 20 -1000.92034241888 30 2076.297043493 11 635.537064906387 21 -946.797517592165 31 2098.3763194502 12 635.537064906387 22 -956.198720333 32 2067.40806391972 13 635.537064906387 23 -956.198720333 33 2067.40806391972 70 1 0 3DFACE 8 arm_half 10 635.537064906387 20 -946.797517592165 30 2098.3763194502 11 635.537064906387 21 -1000.92034241888 31 2076.297043493 12 635.537064906387 22 -988.924364447842 32 2115.81268009677 13 635.537064906387 23 -988.924364447842 33 2115.81268009677 70 1 0 3DFACE 8 arm_half 10 635.537064906387 20 -988.924364447842 30 2115.81268009677 11 635.537064906387 21 -931.530792747491 31 2126.91682720422 12 635.537064906387 22 -946.797517592165 32 2098.3763194502 13 635.537064906387 23 -946.797517592165 33 2098.3763194502 70 1 0 3DFACE 8 arm_half 10 635.537064906387 20 -931.530792747491 30 2126.91682720422 11 635.537064906387 21 -988.924364447842 31 2115.81268009677 12 635.537064906387 22 -969.443953273309 32 2152.23049936285 13 635.537064906387 23 -969.443953273309 33 2152.23049936285 70 1 0 3DFACE 8 arm_half 10 635.537064906387 20 -969.443953273309 30 2152.23049936285 11 635.537064906387 21 -910.985237473081 31 2151.93279147451 12 635.537064906387 22 -931.530792747491 32 2126.91682720422 13 635.537064906387 23 -931.530792747491 33 2126.91682720422 70 1 0 3DFACE 8 arm_half 10 635.537064906387 20 -910.985237473081 30 2151.93279147451 11 635.537064906387 21 -969.443953273309 31 2152.23049936285 12 635.537064906387 22 -943.227730171979 32 2184.1509849202 13 635.537064906387 23 -943.227730171979 33 2184.1509849202 70 1 0 3DFACE 8 arm_half 10 635.537064906387 20 -943.227730171979 30 2184.1509849202 11 635.537064906387 21 -885.950405936048 31 2172.46286278326 12 635.537064906387 22 -910.985237473081 32 2151.93279147451 13 635.537064906387 23 -910.985237473081 33 2151.93279147451 70 1 0 3DFACE 8 arm_half 10 635.537064906387 20 -885.950405936048 30 2172.46286278326 11 635.537064906387 21 -943.227730171979 31 2184.1509849202 12 635.537064906387 22 -911.283169895404 32 2210.34745041008 13 635.537064906387 23 -911.283169895404 33 2210.34745041008 70 1 0 3DFACE 8 arm_half 10 635.537064906387 20 -911.283169895404 30 2210.34745041008 11 635.537064906387 21 -857.388372672667 31 2187.71808200347 12 635.537064906387 22 -885.950405936048 32 2172.46286278326 13 635.537064906387 23 -885.950405936048 33 2172.46286278326 70 1 0 3DFACE 8 arm_half 10 635.537064906387 20 -857.388372672667 30 2187.71808200347 11 635.537064906387 21 -911.283169895404 31 2210.34745041008 12 635.537064906387 22 -874.837883980304 32 2229.81318035484 13 635.537064906387 23 -874.837883980304 33 2229.81318035484 70 1 0 3DFACE 8 arm_half 10 635.537064906387 20 -874.837883980304 30 2229.81318035484 11 635.537064906387 21 -826.396760603478 31 2197.11219961575 12 635.537064906387 22 -857.388372672667 32 2187.71808200347 13 635.537064906387 23 -857.388372672667 33 2187.71808200347 70 1 0 3DFACE 8 arm_half 10 635.537064906387 20 -826.396760603478 30 2197.11219961575 11 635.537064906387 21 -874.837883980304 31 2229.81318035484 12 635.537064906387 22 -835.292444325637 32 2241.80011766922 13 635.537064906387 23 -835.292444325637 33 2241.80011766922 70 1 0 3DFACE 8 arm_half 10 993.755281646067 20 -794.16656 30 2126.34617316296 11 993.755281646067 21 -835.292444325637 31 2241.80011766922 12 993.755281646067 22 -811.961287013471 32 2124.59486637848 13 993.755281646067 23 -811.961287013471 33 2124.59486637848 70 1 0 3DFACE 8 arm_half 10 993.755281646067 20 -835.292444325637 30 2241.80011766922 11 993.755281646067 21 -794.16656 31 2126.34617316296 12 993.755281646067 22 -794.16656 32 2245.84761107459 13 993.755281646067 23 -794.16656 33 2245.84761107459 70 1 0 3DFACE 8 arm_half 10 993.755281646067 20 -878.436163455843 30 2070.08145966418 11 993.755281646067 21 -1000.92034241888 31 2076.297043493 12 993.755281646067 22 -883.626693866424 32 2052.98346948944 13 993.755281646067 23 -883.626693866424 33 2052.98346948944 70 1 0 3DFACE 8 arm_half 10 993.755281646067 20 -1000.92034241888 30 2076.297043493 11 993.755281646067 21 -878.436163455843 31 2070.08145966418 12 993.755281646067 22 -988.924364447842 32 2115.81268009677 13 993.755281646067 23 -988.924364447842 33 2115.81268009677 70 1 0 3DFACE 8 arm_half 10 993.755281646067 20 -870.007199443395 30 2085.83905765611 11 993.755281646067 21 -988.924364447842 31 2115.81268009677 12 993.755281646067 22 -878.436163455843 32 2070.08145966418 13 993.755281646067 23 -878.436163455843 33 2070.08145966418 70 1 0 3DFACE 8 arm_half 10 993.755281646067 20 -988.924364447842 30 2115.81268009677 11 993.755281646067 21 -870.007199443395 31 2085.83905765611 12 993.755281646067 22 -969.443953273309 32 2152.23049936285 13 993.755281646067 23 -969.443953273309 33 2152.23049936285 70 1 0 3DFACE 8 arm_half 10 993.755281646067 20 -858.663722189056 30 2099.65070781135 11 993.755281646067 21 -969.443953273309 31 2152.23049936285 12 993.755281646067 22 -870.007199443395 32 2085.83905765611 13 993.755281646067 23 -870.007199443395 33 2085.83905765611 70 1 0 3DFACE 8 arm_half 10 993.755281646067 20 -969.443953273309 30 2152.23049936285 11 993.755281646067 21 -858.663722189056 31 2099.65070781135 12 993.755281646067 22 -943.227730171979 32 2184.1509849202 13 993.755281646067 23 -943.227730171979 33 2184.1509849202 70 1 0 3DFACE 8 arm_half 10 993.755281646067 20 -844.841655162215 30 2110.9856361601 11 993.755281646067 21 -943.227730171979 31 2184.1509849202 12 993.755281646067 22 -858.663722189056 32 2099.65070781135 13 993.755281646067 23 -858.663722189056 33 2099.65070781135 70 1 0 3DFACE 8 arm_half 10 993.755281646067 20 -943.227730171979 30 2184.1509849202 11 993.755281646067 21 -844.841655162215 31 2110.9856361601 12 993.755281646067 22 -911.283169895404 32 2210.34745041008 13 993.755281646067 23 -911.283169895404 33 2210.34745041008 70 1 0 3DFACE 8 arm_half 10 993.755281646067 20 -829.072172647213 30 2119.40824776262 11 993.755281646067 21 -911.283169895404 31 2210.34745041008 12 993.755281646067 22 -844.841655162215 32 2110.9856361601 13 993.755281646067 23 -844.841655162215 33 2110.9856361601 70 1 0 3DFACE 8 arm_half 10 993.755281646067 20 -911.283169895404 30 2210.34745041008 11 993.755281646067 21 -829.072172647213 31 2119.40824776262 12 993.755281646067 22 -874.837883980304 32 2229.81318035484 13 993.755281646067 23 -874.837883980304 33 2229.81318035484 70 1 0 3DFACE 8 arm_half 10 993.755281646067 20 -811.961287013471 30 2124.59486637848 11 993.755281646067 21 -874.837883980304 31 2229.81318035484 12 993.755281646067 22 -829.072172647213 32 2119.40824776262 13 993.755281646067 23 -829.072172647213 33 2119.40824776262 70 1 0 3DFACE 8 arm_half 10 993.755281646067 20 -874.837883980304 30 2229.81318035484 11 993.755281646067 21 -811.961287013471 31 2124.59486637848 12 993.755281646067 22 -835.292444325637 32 2241.80011766922 13 993.755281646067 23 -835.292444325637 33 2241.80011766922 70 1 0 3DFACE 8 arm_half 10 97.3015169041444 20 -877.254478630867 30 2051.71691232036 11 97.3015169041444 21 -930.959963064732 31 2035.20215330562 12 97.3015169041444 22 -878.882267189966 32 2035.20215330562 13 97.3015169041444 23 -878.882267189966 33 2035.20215330562 70 1 0 3DFACE 8 arm_half 10 97.3015169041444 20 -930.959963064732 30 2035.20215330562 11 97.3015169041444 21 -877.254478630867 31 2051.71691232036 12 97.3015169041444 22 -928.331516182155 32 2061.8691098991 13 97.3015169041444 23 -928.331516182155 33 2061.8691098991 70 1 0 3DFACE 8 arm_half 10 97.3015169041444 20 -854.069611027039 30 2095.06005895826 11 97.3015169041444 21 -907.906117811778 31 2111.14322068125 12 97.3015169041444 22 -864.605096213174 32 2082.23220799651 13 97.3015169041444 23 -864.605096213174 33 2082.23220799651 70 1 0 3DFACE 8 arm_half 10 97.3015169041444 20 -907.906117811778 30 2111.14322068125 11 97.3015169041444 21 -854.069611027039 31 2095.06005895826 12 97.3015169041444 22 -890.894102928655 32 2131.85679842581 13 97.3015169041444 23 -890.894102928655 33 2131.85679842581 70 1 0 3DFACE 8 arm_half 10 97.3015169041444 20 -864.605096213174 30 2082.23220799651 11 97.3015169041444 21 -920.547185274073 31 2087.51127030568 12 97.3015169041444 22 -872.433667955028 32 2067.59701840775 13 97.3015169041444 23 -872.433667955028 33 2067.59701840775 70 1 0 3DFACE 8 arm_half 10 97.3015169041444 20 -920.547185274073 30 2087.51127030568 11 97.3015169041444 21 -864.605096213174 31 2082.23220799651 12 97.3015169041444 22 -907.906117811778 32 2111.14322068125 13 97.3015169041444 23 -907.906117811778 33 2111.14322068125 70 1 0 3DFACE 8 arm_half 10 97.3015169041444 20 -826.585857602691 30 2113.41027598642 11 97.3015169041444 21 -870.164902816216 31 2148.85599236295 12 97.3015169041444 22 -841.232085183949 32 2105.58760417448 13 97.3015169041444 23 -841.232085183949 33 2105.58760417448 70 1 0 3DFACE 8 arm_half 10 97.3015169041444 20 -870.164902816216 30 2148.85599236295 11 97.3015169041444 21 -826.585857602691 31 2113.41027598642 12 97.3015169041444 22 -846.515129009712 32 2161.48753300293 13 97.3015169041444 23 -846.515129009712 33 2161.48753300293 70 1 0 3DFACE 8 arm_half 10 97.3015169041444 20 -841.232085183949 30 2105.58760417448 11 97.3015169041444 21 -890.894102928655 31 2131.85679842581 12 97.3015169041444 22 -854.069611027039 32 2095.06005895826 13 97.3015169041444 23 -854.069611027039 33 2095.06005895826 70 1 0 3DFACE 8 arm_half 10 97.3015169041444 20 -890.894102928655 30 2131.85679842581 11 97.3015169041444 21 -841.232085183949 31 2105.58760417448 12 97.3015169041444 22 -870.164902816216 32 2148.85599236295 13 97.3015169041444 23 -870.164902816216 33 2148.85599236295 70 1 0 3DFACE 8 arm_half 10 97.3015169041444 20 -794.16656 30 2119.85401529483 11 97.3015169041444 21 -820.853629053581 31 2169.2659973228 12 97.3015169041444 22 -810.693774595514 32 2118.22745350336 13 97.3015169041444 23 -810.693774595514 33 2118.22745350336 70 1 0 3DFACE 8 arm_half 10 97.3015169041444 20 -820.853629053581 30 2169.2659973228 11 97.3015169041444 21 -794.16656 31 2119.85401529483 12 97.3015169041444 22 -794.16656 32 2171.89246330095 13 97.3015169041444 23 -794.16656 33 2171.89246330095 70 1 0 3DFACE 8 arm_half 10 97.3015169041444 20 -810.693774595514 30 2118.22745350336 11 97.3015169041444 21 -846.515129009712 31 2161.48753300293 12 97.3015169041444 22 -826.585857602691 32 2113.41027598642 13 97.3015169041444 23 -826.585857602691 33 2113.41027598642 70 1 0 3DFACE 8 arm_half 10 97.3015169041444 20 -846.515129009712 30 2161.48753300293 11 97.3015169041444 21 -810.693774595514 31 2118.22745350336 12 97.3015169041444 22 -820.853629053581 32 2169.2659973228 13 97.3015169041444 23 -820.853629053581 33 2169.2659973228 70 1 0 3DFACE 8 crank_full 10 21.0791386559896 20 -1635.02461467787 30 2001.52587998687 11 7.98221268585839 21 -1575.77551414673 31 1996.02904198905 12 22.365520181431 22 -1575.77540103232 32 2002.06558825272 13 22.365520181431 23 -1575.77540103232 33 2002.06558825272 70 1 0 3DFACE 8 crank_full 10 7.98221268585839 20 -1575.77551414673 30 1996.02904198905 11 21.0791386559896 21 -1635.02461467787 31 2001.52587998687 12 7.98254654484851 22 -1635.02471767319 32 1996.02935672895 13 7.98254654484851 23 -1635.02471767319 33 1996.02935672895 70 1 0 3DFACE 8 crank_full 10 -67.6768495427695 20 -1260.03677189865 30 1941.04407925614 11 -7.61761898721182 21 -1175.36447372759 31 1995.95502646913 12 -26.4930734323873 22 -1260.03663933705 32 1922.31304179217 13 -26.4930734323873 23 -1260.03663933705 33 1922.31304179217 70 0 0 3DFACE 8 crank_full 10 18.7238320955074 20 -1260.0363927542 30 1920.768168456 11 7.98091066173456 21 -1175.36456200926 31 1996.02781452793 12 61.0900030665619 22 -1260.03606969012 32 1936.64465220875 13 61.0900030665619 23 -1260.03606969012 33 1936.64465220875 70 0 0 3DFACE 8 crank_full 10 39.1734746098794 20 -1635.02429142183 30 2043.18474472703 11 33.1369283457947 21 -1635.02424903062 31 2057.56805222281 12 0.000316577896367365 22 -1635.02455455848 32 2035.20251476124 13 0.000316577896367365 23 -1635.02455455848 33 2035.20251476124 70 0 0 3DFACE 8 crank_full 10 98.5563030683821 20 -1491.10230115877 30 2096.29352239028 11 33.1365944868046 21 -1575.77504550416 31 2057.56773748292 12 114.432786822367 22 -1491.10243675244 32 2053.92735141868 13 114.432786822367 23 -1491.10243675244 33 2053.92735141868 70 0 0 3DFACE 8 crank_full 10 22.1249957769614 20 -1479.42362718516 30 2131.05362422024 11 26.4904348219512 21 -1260.03514143184 31 2148.08890332828 12 22.1236937528375 22 -1271.71644897083 32 2131.05239675912 13 22.1236937528375 23 -1271.71644897083 33 2131.05239675912 70 1 0 3DFACE 8 crank_full 10 26.4904348219512 20 -1260.03514143184 30 2148.08890332828 11 22.1249957769614 21 -1479.42362718516 31 2131.05362422024 12 26.491736846075 22 -1491.10243207942 32 2148.0901307894 13 26.491736846075 23 -1491.10243207942 33 2148.0901307894 70 1 0 3DFACE 8 crank_full 10 -39.2459633723545 20 -1575.77553171729 30 2042.81849970453 11 -112.887948049741 21 -1491.10367640812 31 2061.69395415194 12 -95.851569329198 22 -1479.42468360743 32 2057.32721685097 13 -95.851569329198 23 -1479.42468360743 33 2057.32721685097 70 0 0 3DFACE 8 crank_full 10 -83.4234143215687 20 -1271.71506812026 30 1983.06846791687 11 -98.5563376305701 21 -1491.10406090528 31 1974.11087765241 12 -98.5576396546941 22 -1260.0367702577 32 1974.10965019129 13 -98.5576396546941 23 -1260.0367702577 33 1974.10965019129 70 1 0 3DFACE 8 crank_full 10 -98.5563376305701 20 -1491.10406090528 30 1974.11087765241 11 -83.4234143215687 21 -1271.71506812026 31 1983.06846791687 12 -83.4221122974449 22 -1479.42500803573 32 1983.06969537799 13 -83.4221122974449 23 -1479.42500803573 33 1983.06969537799 70 1 0 3DFACE 8 crank_full 10 -33.1366290489928 20 -1575.77565655989 30 2012.83666255977 11 -98.5563376305701 21 -1491.10406090528 31 1974.11087765241 12 -83.4221122974449 22 -1479.42500803573 32 1983.06969537799 13 -83.4221122974449 23 -1479.42500803573 33 1983.06969537799 70 0 0 3DFACE 8 crank_full 10 7.98254654484851 20 -1635.02471767319 30 1996.02935672895 11 -7.61631696308793 21 -1575.7756024284 31 1995.95625393024 12 7.98221268585839 22 -1575.77551414673 32 1996.02904198905 13 7.98221268585839 23 -1575.77551414673 33 1996.02904198905 70 1 0 3DFACE 8 crank_full 10 -7.61631696308793 20 -1575.7756024284 30 1995.95625393024 11 7.98254654484851 21 -1635.02471767319 31 1996.02935672895 12 -7.61598310409778 22 -1635.02480595485 32 1995.95656867013 13 -7.61598310409778 23 -1635.02480595485 33 1995.95656867013 70 1 0 3DFACE 8 crank_full 10 -7.61631696308793 20 -1575.7756024284 30 1995.95625393024 11 -26.4917714082634 21 -1491.10392998463 31 1922.31426925329 12 -22.1251619565284 22 -1479.42489487959 32 1939.3506517424 13 -22.1251619565284 23 -1479.42489487959 33 1939.3506517424 70 0 0 3DFACE 8 crank_full 10 7.98221268585839 20 -1575.77551414673 30 1996.02904198905 11 16.2397851414271 21 -1479.42468491837 31 1938.18001056121 12 18.7251341196313 22 -1491.10368340178 32 1920.76939591712 13 18.7251341196313 23 -1491.10368340178 33 1920.76939591712 70 0 0 3DFACE 8 crank_full 10 22.365520181431 20 -1575.77540103232 30 2002.06558825272 11 61.0913050906858 21 -1491.1033603377 31 1936.64587966987 12 52.132359515953 22 -1479.42441042435 32 1951.78010877195 13 52.132359515953 23 -1479.42441042435 33 1951.78010877195 70 0 0 3DFACE 8 crank_full 10 94.1568760248532 20 -1491.10300997595 30 1967.52666978086 11 80.0869400614005 21 -1271.71596296923 31 1978.07922724613 12 94.1555740007292 22 -1260.03571932837 32 1967.52544231974 13 94.1555740007292 23 -1260.03571932837 33 1967.52544231974 70 1 0 3DFACE 8 crank_full 10 80.0869400614005 20 -1271.71596296923 30 1978.07922724613 11 94.1568760248532 21 -1491.10300997595 31 1967.52666978086 12 80.0882420855246 22 -1479.42411318676 32 1978.08045470725 13 80.0882420855246 23 -1479.42411318676 33 1978.08045470725 70 1 0 3DFACE 8 crank_full 10 33.3438773424362 20 -1575.77528030582 30 2013.14688327402 11 80.0882420855246 21 -1479.42411318676 31 1978.08045470725 12 94.1568760248532 22 -1491.10300997595 32 1967.52666978086 13 94.1568760248532 23 -1491.10300997595 33 1967.52666978086 70 0 0 3DFACE 8 crank_full 10 16.2384831173033 20 -1271.71539123762 30 1938.17878310009 11 -7.61761898721182 21 -1175.36447372759 31 1995.95502646913 12 7.98091066173456 22 -1175.36456200926 32 1996.02781452793 13 7.98091066173456 23 -1175.36456200926 33 1996.02781452793 70 0 0 3DFACE 8 crank_full 10 -22.1264639806523 20 -1271.7151812764 30 1939.34942428128 11 -7.61761898721182 21 -1175.36447372759 31 1995.95502646913 12 16.2384831173033 22 -1271.71539123762 32 1938.17878310009 13 16.2384831173033 23 -1271.71539123762 33 1938.17878310009 70 0 0 3DFACE 8 crank_full 10 33.3425753183123 20 -1175.36479585016 30 2013.1456558129 11 80.0869400614005 21 -1271.71596296923 31 1978.07922724613 12 22.3642181573071 22 -1175.36467512367 32 2002.0643607916 13 22.3642181573071 23 -1175.36467512367 33 2002.0643607916 70 0 0 3DFACE 8 crank_full 10 52.1310574918292 20 -1271.71566573164 30 1951.77888131083 11 22.3642181573071 21 -1175.36467512367 31 2002.0643607916 12 80.0869400614005 22 -1271.71596296923 32 1978.07922724613 13 80.0869400614005 23 -1271.71596296923 33 1978.07922724613 70 0 0 3DFACE 8 crank_full 10 22.1236937528375 20 -1271.71644897083 30 2131.05239675912 11 7.61498037677585 21 -1175.36497652034 31 2074.44691865133 12 -7.9835492721704 22 -1175.36488823867 32 2074.37413059252 13 -7.9835492721704 23 -1175.36488823867 33 2074.37413059252 70 0 0 3DFACE 8 crank_full 10 -16.241253345118 20 -1271.71623900961 30 2132.22303794032 11 22.1236937528375 21 -1271.71644897083 31 2131.05239675912 12 -7.9835492721704 22 -1175.36488823867 32 2074.37413059252 13 -7.9835492721704 23 -1175.36488823867 33 2074.37413059252 70 0 0 3DFACE 8 crank_full 10 -52.1338277196439 20 -1271.71596451559 30 2118.62293972957 11 -22.366856767743 21 -1175.36477512426 31 2068.33758432885 12 -33.3452139287482 22 -1175.36465439776 32 2057.25628930755 13 -33.3452139287482 23 -1175.36465439776 33 2057.25628930755 70 0 0 3DFACE 8 crank_full 10 -80.0897102892153 20 -1271.715667278 30 2092.32259379428 11 -52.1338277196439 21 -1271.71596451559 31 2118.62293972957 12 -33.3452139287482 22 -1175.36465439776 32 2057.25628930755 13 -33.3452139287482 23 -1175.36465439776 33 2057.25628930755 70 0 0 3DFACE 8 crank_full 10 -95.8528713533217 20 -1271.71539254856 30 2057.32598938986 11 -39.1744773372013 21 -1175.36446198731 31 2027.21874259443 12 -97.0235125333639 22 -1271.71518215234 32 2018.96104229187 13 -97.0235125333639 23 -1271.71518215234 33 2018.96104229187 70 0 0 3DFACE 8 crank_full 10 -95.8528713533217 20 -1271.71539254856 30 2057.32598938986 11 -39.2472653964783 21 -1175.36454443869 31 2042.81727224341 12 -39.1744773372013 22 -1175.36446198731 32 2027.21874259443 13 -39.1744773372013 23 -1175.36446198731 33 2027.21874259443 70 0 0 3DFACE 8 crank_full 10 39.1845368645104 20 1078.14493048035 30 2043.19517347961 11 33.1352924626808 21 -1175.36503065183 31 2057.5665100218 12 39.1718387267654 22 -1175.36498826062 32 2043.18320252602 13 39.1718387267654 23 -1175.36498826062 33 2043.18320252602 70 1 0 3DFACE 8 crank_full 10 33.1352924626808 20 -1175.36503065183 30 2057.5665100218 11 39.1845368645104 21 1078.14493048035 31 2043.19517347961 12 33.1479906004257 22 1078.14488808915 32 2057.57848097538 13 33.1479906004257 23 1078.14488808915 33 2057.57848097538 70 1 0 3DFACE 8 crank_full 10 60.4504242229264 20 1076.22873878012 30 1995.97422483951 11 39.2573249237874 21 1078.14501293173 31 2027.59664383063 12 33.3552734560573 22 1078.14512289081 32 2013.15762676649 13 33.3552734560573 23 1078.14512289081 33 2013.15762676649 70 1 0 3DFACE 8 crank_full 10 39.2573249237874 20 1078.14501293173 30 2027.59664383063 11 60.4504242229264 21 1076.22873878012 31 1995.97422483951 12 70.8657786588185 22 1076.22854136019 32 2022.0901191445 13 70.8657786588185 23 1076.22854136019 33 2022.0901191445 70 1 0 3DFACE 8 crank_full 10 39.2462626691564 20 -1635.02437387321 30 2027.58621507805 11 0.000316577896367365 21 -1635.02455455848 31 2035.20251476124 12 33.3442112014263 22 -1635.02448383228 32 2013.14719801391 13 33.3442112014263 23 -1635.02448383228 33 2013.14719801391 70 0 0 3DFACE 8 crank_full 10 -80.0897102892153 20 -1271.715667278 30 2092.32259379428 11 -33.3452139287482 21 -1175.36465439776 31 2057.25628930755 12 -94.1582126111653 22 -1260.03606144053 32 2102.87650280072 13 -94.1582126111653 23 -1260.03606144053 33 2102.87650280072 70 0 0 3DFACE 8 crank_full 10 67.6742109323337 20 -1260.03500887024 30 2129.35786586431 11 57.1202981576705 21 -1271.71656243456 31 2115.28923569394 12 22.0539974410672 22 -1175.36502652919 32 2068.54486718316 13 22.0539974410672 23 -1175.36502652919 33 2068.54486718316 70 0 0 3DFACE 8 crank_full 10 97.0220443296732 20 -1479.4236280611 30 2051.44200620966 11 97.0207423055492 21 -1271.71644809489 31 2051.44077874854 12 114.431484798243 22 -1260.03514610487 32 2053.92612395756 13 114.431484798243 23 -1260.03514610487 33 2053.92612395756 70 0 0 3DFACE 8 crank_full 10 97.0207423055492 20 -1271.71644809489 30 2051.44077874854 11 80.5104813608606 21 -1244.21642404447 31 2049.07971498233 12 114.431484798243 22 -1260.03514610487 32 2053.92612395756 13 114.431484798243 23 -1260.03514610487 33 2053.92612395756 70 0 0 3DFACE 8 crank_full 10 114.431484798243 20 -1260.03514610487 30 2053.92612395756 11 80.5104813608606 21 -1244.21642404447 31 2049.07971498233 12 39.1718387267654 22 -1175.36498826062 32 2043.18320252602 13 39.1718387267654 23 -1175.36498826062 33 2043.18320252602 70 0 0 3DFACE 8 crank_full 10 7.61628240089973 20 -1575.77509963565 30 2074.44814611245 11 67.6755129564576 21 -1491.10229951782 31 2129.35909332543 12 26.491736846075 22 -1491.10243207942 32 2148.0901307894 13 26.491736846075 23 -1491.10243207942 33 2148.0901307894 70 0 0 3DFACE 8 crank_full 10 6.62400451714528 20 1105.46121754713 30 2070.64019948415 11 0.0625974234421623 21 1105.4614427137 31 2035.21299417206 12 -7.43285738619353 22 1105.46129774208 32 2070.45440584214 13 -7.43285738619353 23 1105.46129774208 33 2070.45440584214 70 0 0 3DFACE 8 crank_full 10 0.0625974234421623 20 1105.4614427137 30 2035.21299417206 11 -30.1569306708265 21 1105.4615087748 31 2054.83234841933 12 -20.3486042412317 22 1105.46140000763 32 2064.90342673756 13 -20.3486042412317 23 1105.46140000763 33 2064.90342673756 70 0 0 3DFACE 8 crank_full 10 0.0625974234421623 20 1105.4614427137 30 2035.21299417206 11 -35.3646078887726 21 1105.46160748476 31 2041.77440126683 12 -30.1569306708265 22 1105.4615087748 32 2054.83234841933 13 -30.1569306708265 23 1105.4615087748 33 2054.83234841933 70 0 0 3DFACE 8 crank_full 10 0.0625974234421623 20 1105.4614427137 30 2035.21299417206 11 -35.1788142463492 21 1105.46168110983 31 2027.71753936346 12 -35.3646078887726 22 1105.46160748476 32 2041.77440126683 13 -35.3646078887726 23 1105.46160748476 33 2041.77440126683 70 0 0 3DFACE 8 crank_full 10 0.0625974234421623 20 1105.4614427137 30 2035.21299417206 11 -29.6278351413918 21 1105.46171844124 31 2014.80179250824 12 -35.1788142463492 22 1105.46168110983 32 2027.71753936346 13 -35.1788142463492 23 1105.46168110983 33 2027.71753936346 70 0 0 3DFACE 8 crank_full 10 0.0625974234421623 20 1105.4614427137 30 2035.21299417206 11 -6.49880967025258 21 1105.46166788026 31 1999.78578885998 12 -19.5567568228792 22 1105.46171379563 32 2004.99346607832 13 -19.5567568228792 23 1105.46171379563 33 2004.99346607832 70 0 0 3DFACE 8 crank_full 10 7.55805223308622 20 1105.46158768532 30 1999.97158250198 11 -6.49880967025258 21 1105.46166788026 31 1999.78578885998 12 0.0625974234421623 22 1105.4614427137 32 2035.21299417206 13 0.0625974234421623 23 1105.4614427137 33 2035.21299417206 70 0 0 3DFACE 8 crank_full 10 20.4737990881245 20 1105.46148541976 30 2005.52256160656 11 7.55805223308622 21 1105.46158768532 31 1999.97158250198 12 0.0625974234421623 22 1105.4614427137 32 2035.21299417206 13 0.0625974234421623 23 1105.4614427137 33 2035.21299417206 70 0 0 3DFACE 8 crank_full 10 30.2821255177192 20 1105.46137665259 30 2015.5936399248 11 20.4737990881245 21 1105.46148541976 31 2005.52256160656 12 0.0625974234421623 22 1105.4614427137 32 2035.21299417206 13 0.0625974234421623 23 1105.4614427137 33 2035.21299417206 70 0 0 3DFACE 8 crank_full 10 35.4898027356652 20 1105.46127794263 30 2028.65158707729 11 30.2821255177192 21 1105.46137665259 31 2015.5936399248 12 0.0625974234421623 22 1105.4614427137 32 2035.21299417206 13 0.0625974234421623 23 1105.4614427137 33 2035.21299417206 70 0 0 3DFACE 8 crank_full 10 35.4898027356652 20 1105.46127794263 30 2028.65158707729 11 0.0625974234421623 21 1105.4614427137 31 2035.21299417206 12 35.3040090932419 22 1105.46120431757 32 2042.70844898066 13 35.3040090932419 23 1105.46120431757 33 2042.70844898066 70 0 0 3DFACE 8 crank_full 10 35.3040090932419 20 1105.46120431757 30 2042.70844898066 11 0.0625974234421623 21 1105.4614427137 31 2035.21299417206 12 29.7530299882844 22 1105.46116698616 32 2055.62419583589 13 29.7530299882844 23 1105.46116698616 33 2055.62419583589 70 0 0 3DFACE 8 crank_full 10 29.7530299882844 20 1105.46116698616 30 2055.62419583589 11 0.0625974234421623 21 1105.4614427137 31 2035.21299417206 12 19.6819516697718 22 1105.46117163176 32 2065.4325222658 13 19.6819516697718 23 1105.46117163176 33 2065.4325222658 70 0 0 3DFACE 8 crank_full 10 19.6819516697718 20 1105.46117163176 30 2065.4325222658 11 0.0625974234421623 21 1105.4614427137 31 2035.21299417206 12 6.62400451714528 22 1105.46121754713 32 2070.64019948415 13 6.62400451714528 23 1105.46121754713 33 2070.64019948415 70 0 0 3DFACE 8 crank_full 10 -35.1788142463492 20 1105.46168110983 30 2027.71753936346 11 -59.3694325616239 21 1087.68206778655 31 1994.39059084441 12 -70.4713907715387 22 1087.68199312372 32 2020.22208455487 13 -70.4713907715387 23 1087.68199312372 33 2020.22208455487 70 1 0 3DFACE 8 crank_full 10 -59.3694325616239 20 1087.68206778655 30 1994.39059084441 11 -35.1788142463492 21 1105.46168110983 31 2027.71753936346 12 -29.6278351413918 22 1105.46171844124 32 2014.80179250824 13 -29.6278351413918 23 1105.46171844124 33 2014.80179250824 70 1 0 3DFACE 8 crank_full 10 59.3922976977286 20 1087.68096487638 30 2076.03539749972 11 35.3040090932419 21 1105.46120431757 31 2042.70844898066 12 29.7530299882844 22 1105.46116698616 32 2055.62419583589 13 29.7530299882844 23 1105.46116698616 33 2055.62419583589 70 1 0 3DFACE 8 crank_full 10 35.3040090932419 20 1105.46120431757 30 2042.70844898066 11 59.3922976977286 21 1087.68096487638 31 2076.03539749972 12 70.4942559076435 22 1087.68103953921 32 2050.20390378926 13 70.4942559076435 23 1087.68103953921 33 2050.20390378926 70 1 0 3DFACE 8 crank_full 10 13.1342467554502 20 1087.68106599834 30 2106.06740479624 11 19.6819516697718 21 1105.46117163176 31 2065.4325222658 12 6.62400451714528 22 1105.46121754713 32 2070.64019948415 13 6.62400451714528 23 1105.46121754713 33 2070.64019948415 70 1 0 3DFACE 8 crank_full 10 19.6819516697718 20 1105.46117163176 30 2065.4325222658 11 13.1342467554502 21 1087.68106599834 31 2106.06740479624 12 39.2501410607034 22 1087.68097416759 32 2095.65205035954 13 39.2501410607034 23 1087.68097416759 33 2095.65205035954 70 1 0 3DFACE 8 crank_full 10 70.4942559076435 20 1087.68103953921 30 2050.20390378926 11 35.4898027356652 21 1105.46127794263 31 2028.65158707729 12 35.3040090932419 22 1105.46120431757 32 2042.70844898066 13 35.3040090932419 23 1105.46120431757 33 2042.70844898066 70 1 0 3DFACE 8 crank_full 10 35.4898027356652 20 1105.46127794263 30 2028.65158707729 11 70.4942559076435 21 1087.68103953921 31 2050.20390378926 12 70.8658431924901 22 1087.68118678933 32 2022.09017998252 13 70.8658431924901 23 1087.68118678933 33 2022.09017998252 70 1 0 3DFACE 8 crank_full 10 -60.4276236204933 20 1087.68164845367 30 2074.45170266659 11 -35.3646078887726 21 1105.46160748476 31 2041.77440126683 12 -70.8429780563856 22 1087.6818458736 32 2048.3358083616 13 -70.8429780563856 23 1087.6818458736 33 2048.3358083616 70 1 0 3DFACE 8 crank_full 10 -35.3646078887726 20 1105.46160748476 30 2041.77440126683 11 -60.4276236204933 21 1087.68164845367 31 2074.45170266659 12 -30.1569306708265 22 1105.4615087748 32 2054.83234841933 13 -30.1569306708265 23 1105.4615087748 33 2054.83234841933 70 1 0 3DFACE 8 crank_full 10 -29.6278351413918 20 1105.46171844124 30 2014.80179250824 11 -39.2272759245986 21 1087.68205849534 31 1974.77393798458 12 -59.3694325616239 22 1087.68206778655 32 1994.39059084441 13 -59.3694325616239 23 1087.68206778655 33 1994.39059084441 70 1 0 3DFACE 8 crank_full 10 -39.2272759245986 20 1087.68205849534 30 1974.77393798458 11 -29.6278351413918 21 1105.46171844124 31 2014.80179250824 12 -19.5567568228792 22 1105.46171379563 32 2004.99346607832 13 -19.5567568228792 23 1105.46171379563 33 2004.99346607832 70 1 0 3DFACE 8 crank_full 10 20.4737990881245 20 1105.46148541976 30 2005.52256160656 11 15.0023421873321 21 1087.68180627471 31 1964.7301708319 12 7.55805223308622 22 1105.46158768532 32 1999.97158250198 13 7.55805223308622 23 1105.46158768532 33 1999.97158250198 70 1 0 3DFACE 8 crank_full 10 15.0023421873321 20 1087.68180627471 30 1964.7301708319 11 20.4737990881245 21 1105.46148541976 31 2005.52256160656 12 40.8338358974086 22 1087.68160174359 32 1975.83212904106 13 40.8338358974086 23 1087.68160174359 33 1975.83212904106 70 1 0 3DFACE 8 crank_full 10 -35.3646078887726 20 1105.46160748476 30 2041.77440126683 11 -70.4713907715387 21 1087.68199312372 31 2020.22208455487 12 -70.8429780563856 22 1087.6818458736 32 2048.3358083616 13 -70.8429780563856 23 1087.6818458736 33 2048.3358083616 70 1 0 3DFACE 8 crank_full 10 -70.4713907715387 20 1087.68199312372 30 2020.22208455487 11 -35.3646078887726 21 1105.46160748476 31 2041.77440126683 12 -35.1788142463492 22 1105.46168110983 32 2027.71753936346 13 -35.1788142463492 23 1105.46168110983 33 2027.71753936346 70 1 0 3DFACE 8 crank_full 10 35.4898027356652 20 1105.46127794263 30 2028.65158707729 11 60.4504887565981 21 1087.68138420926 31 1995.97428567753 12 30.2821255177192 22 1105.46137665259 32 2015.5936399248 13 30.2821255177192 23 1105.46137665259 33 2015.5936399248 70 1 0 3DFACE 8 crank_full 10 60.4504887565981 20 1087.68138420926 30 1995.97428567753 11 35.4898027356652 21 1105.46127794263 31 2028.65158707729 12 70.8658431924901 22 1087.68118678933 32 2022.09017998252 13 70.8658431924901 23 1087.68118678933 33 2022.09017998252 70 1 0 3DFACE 8 crank_full 10 -14.9794770512274 20 1087.68122638822 30 2105.69581751223 11 -20.3486042412317 21 1105.46140000763 31 2064.90342673756 12 -40.8109707613038 22 1087.68143091934 32 2094.59385930307 13 -40.8109707613038 23 1087.68143091934 33 2094.59385930307 70 1 0 3DFACE 8 crank_full 10 -20.3486042412317 20 1105.46140000763 30 2064.90342673756 11 -14.9794770512274 21 1087.68122638822 31 2105.69581751223 12 -7.43285738619353 22 1105.46129774208 32 2070.45440584214 13 -7.43285738619353 23 1105.46129774208 33 2070.45440584214 70 1 0 3DFACE 8 crank_full 10 -40.8109707613038 20 1087.68143091934 30 2094.59385930307 11 -30.1569306708265 21 1105.4615087748 31 2054.83234841933 12 -60.4276236204933 22 1087.68164845367 32 2074.45170266659 13 -60.4276236204933 23 1087.68164845367 33 2074.45170266659 70 1 0 3DFACE 8 crank_full 10 -30.1569306708265 20 1105.4615087748 30 2054.83234841933 11 -40.8109707613038 21 1087.68143091934 31 2094.59385930307 12 -20.3486042412317 22 1105.46140000763 32 2064.90342673756 13 -20.3486042412317 23 1105.46140000763 33 2064.90342673756 70 1 0 3DFACE 8 crank_full 10 -19.5567568228792 20 1105.46171379563 30 2004.99346607832 11 -13.1113816193455 21 1087.68196666459 31 1964.35858354789 12 -39.2272759245986 22 1087.68205849534 32 1974.77393798458 13 -39.2272759245986 23 1087.68205849534 33 1974.77393798458 70 1 0 3DFACE 8 crank_full 10 -13.1113816193455 20 1087.68196666459 30 1964.35858354789 11 -19.5567568228792 21 1105.46171379563 31 2004.99346607832 12 -6.49880967025258 22 1105.46166788026 32 1999.78578885998 13 -6.49880967025258 23 1105.46166788026 33 1999.78578885998 70 1 0 3DFACE 8 crank_full 10 30.2821255177192 20 1105.46137665259 30 2015.5936399248 11 40.8338358974086 21 1087.68160174359 31 1975.83212904106 12 20.4737990881245 22 1105.46148541976 32 2005.52256160656 13 20.4737990881245 23 1105.46148541976 33 2005.52256160656 70 1 0 3DFACE 8 crank_full 10 40.8338358974086 20 1087.68160174359 30 1975.83212904106 11 30.2821255177192 21 1105.46137665259 31 2015.5936399248 12 60.4504887565981 22 1087.68138420926 32 1995.97428567753 13 60.4504887565981 23 1087.68138420926 33 1995.97428567753 70 1 0 3DFACE 8 crank_full 10 13.1342467554502 20 1087.68106599834 30 2106.06740479624 11 -7.43285738619353 21 1105.46129774208 31 2070.45440584214 12 -14.9794770512274 22 1087.68122638822 32 2105.69581751223 13 -14.9794770512274 23 1087.68122638822 33 2105.69581751223 70 1 0 3DFACE 8 crank_full 10 -7.43285738619353 20 1105.46129774208 30 2070.45440584214 11 13.1342467554502 21 1087.68106599834 31 2106.06740479624 12 6.62400451714528 22 1105.46121754713 32 2070.64019948415 13 6.62400451714528 23 1105.46121754713 33 2070.64019948415 70 1 0 3DFACE 8 crank_full 10 -6.49880967025258 20 1105.46166788026 30 1999.78578885998 11 15.0023421873321 21 1087.68180627471 31 1964.7301708319 12 -13.1113816193455 22 1087.68196666459 32 1964.35858354789 13 -13.1113816193455 23 1087.68196666459 33 1964.35858354789 70 1 0 3DFACE 8 crank_full 10 15.0023421873321 20 1087.68180627471 30 1964.7301708319 11 -6.49880967025258 21 1105.46166788026 31 1999.78578885998 12 7.55805223308622 22 1105.46158768532 32 1999.97158250198 13 7.55805223308622 23 1105.46158768532 33 1999.97158250198 70 1 0 3DFACE 8 crank_full 10 39.2501410607034 20 1087.68097416759 30 2095.65205035954 11 29.7530299882844 21 1105.46116698616 31 2055.62419583589 12 19.6819516697718 22 1105.46117163176 32 2065.4325222658 13 19.6819516697718 23 1105.46117163176 33 2065.4325222658 70 1 0 3DFACE 8 crank_full 10 29.7530299882844 20 1105.46116698616 30 2055.62419583589 11 39.2501410607034 21 1087.68097416759 31 2095.65205035954 12 59.3922976977286 22 1087.68096487638 32 2076.03539749972 13 59.3922976977286 23 1087.68096487638 33 2076.03539749972 70 1 0 3DFACE 8 crank_full 10 -33.1379310731166 20 -1175.3644195961 30 2012.83543509865 11 -33.1295365918798 21 314.385267310674 31 2012.8433488532 12 -22.056636051503 22 -1175.36442371874 32 2001.8570779373 13 -22.056636051503 23 -1175.36442371874 33 2001.8570779373 70 0 0 3DFACE 8 crank_full 10 -33.3452139287482 20 -1175.36465439776 30 2057.25628930755 11 -39.1744773372013 21 -1175.36446198731 31 2027.21874259443 12 -39.2472653964783 22 -1175.36454443869 32 2042.81727224341 13 -39.2472653964783 23 -1175.36454443869 33 2042.81727224341 70 1 0 3DFACE 8 crank_full 10 -39.1744773372013 20 -1175.36446198731 30 2027.21874259443 11 -33.3452139287482 21 -1175.36465439776 31 2057.25628930755 12 -33.1379310731166 22 -1175.3644195961 32 2012.83543509865 13 -33.1379310731166 23 -1175.3644195961 33 2012.83543509865 70 3 0 3DFACE 8 crank_full 10 -33.1379310731166 20 -1175.3644195961 30 2012.83543509865 11 -33.3452139287482 21 -1175.36465439776 31 2057.25628930755 12 -22.366856767743 22 -1175.36477512426 32 2068.33758432885 13 -22.366856767743 23 -1175.36477512426 33 2068.33758432885 70 13 0 3DFACE 8 crank_full 10 -33.1379310731166 20 -1175.3644195961 30 2012.83543509865 11 -22.366856767743 21 -1175.36477512426 31 2068.33758432885 12 -22.056636051503 22 -1175.36442371874 32 2001.8570779373 13 -22.056636051503 23 -1175.36442371874 33 2001.8570779373 70 3 0 3DFACE 8 crank_full 10 -22.056636051503 20 -1175.36442371874 30 2001.8570779373 11 -22.366856767743 21 -1175.36477512426 31 2068.33758432885 12 -7.9835492721704 22 -1175.36488823867 32 2074.37413059252 13 -7.9835492721704 23 -1175.36488823867 33 2074.37413059252 70 13 0 3DFACE 8 crank_full 10 -22.056636051503 20 -1175.36442371874 30 2001.8570779373 11 -7.9835492721704 21 -1175.36488823867 31 2074.37413059252 12 -7.61761898721182 22 -1175.36447372759 32 1995.95502646913 13 -7.61761898721182 23 -1175.36447372759 33 1995.95502646913 70 3 0 3DFACE 8 crank_full 10 -7.61761898721182 20 -1175.36447372759 30 1995.95502646913 11 -7.9835492721704 21 -1175.36488823867 31 2074.37413059252 12 7.61498037677585 22 -1175.36497652034 32 2074.44691865133 13 7.61498037677585 23 -1175.36497652034 33 2074.44691865133 70 13 0 3DFACE 8 crank_full 10 -7.61761898721182 20 -1175.36447372759 30 1995.95502646913 11 7.61498037677585 21 -1175.36497652034 31 2074.44691865133 12 7.98091066173456 22 -1175.36456200926 32 1996.02781452793 13 7.98091066173456 23 -1175.36456200926 33 1996.02781452793 70 3 0 3DFACE 8 crank_full 10 7.98091066173456 20 -1175.36456200926 30 1996.02781452793 11 7.61498037677585 21 -1175.36497652034 31 2074.44691865133 12 22.0539974410672 22 -1175.36502652919 32 2068.54486718316 13 22.0539974410672 23 -1175.36502652919 33 2068.54486718316 70 13 0 3DFACE 8 crank_full 10 7.98091066173456 20 -1175.36456200926 30 1996.02781452793 11 22.0539974410672 21 -1175.36502652919 31 2068.54486718316 12 22.3642181573071 22 -1175.36467512367 32 2002.0643607916 13 22.3642181573071 23 -1175.36467512367 33 2002.0643607916 70 3 0 3DFACE 8 crank_full 10 22.3642181573071 20 -1175.36467512367 30 2002.0643607916 11 22.0539974410672 21 -1175.36502652919 31 2068.54486718316 12 33.1352924626808 22 -1175.36503065183 32 2057.5665100218 13 33.1352924626808 23 -1175.36503065183 33 2057.5665100218 70 13 0 3DFACE 8 crank_full 10 22.3642181573071 20 -1175.36467512367 30 2002.0643607916 11 33.1352924626808 21 -1175.36503065183 31 2057.5665100218 12 33.3425753183123 22 -1175.36479585016 32 2013.1456558129 13 33.3425753183123 23 -1175.36479585016 33 2013.1456558129 70 3 0 3DFACE 8 crank_full 10 33.3425753183123 20 -1175.36479585016 30 2013.1456558129 11 33.1352924626808 21 -1175.36503065183 31 2057.5665100218 12 39.1718387267654 22 -1175.36498826062 32 2043.18320252602 13 39.1718387267654 23 -1175.36498826062 33 2043.18320252602 70 13 0 3DFACE 8 crank_full 10 33.3425753183123 20 -1175.36479585016 30 2013.1456558129 11 39.1718387267654 21 -1175.36498826062 31 2043.18320252602 12 39.2446267860425 22 -1175.36490580924 32 2027.58467287705 13 39.2446267860425 23 -1175.36490580924 33 2027.58467287705 70 1 0 3DFACE 8 crank_full 10 26.4904348219512 20 -1260.03514143184 30 2148.08890332828 11 7.61498037677585 21 -1175.36497652034 31 2074.44691865133 12 22.1236937528375 22 -1271.71644897083 32 2131.05239675912 13 22.1236937528375 23 -1271.71644897083 33 2131.05239675912 70 0 0 3DFACE 8 crank_full 10 83.4206440937541 20 -1271.71656212697 30 2087.33335312354 11 33.1352924626808 21 -1175.36503065183 31 2057.5665100218 12 22.0539974410672 22 -1175.36502652919 32 2068.54486718316 13 22.0539974410672 23 -1175.36502652919 33 2068.54486718316 70 0 0 3DFACE 8 crank_full 10 57.1202981576705 20 -1271.71656243456 30 2115.28923569394 11 83.4206440937541 21 -1271.71656212697 31 2087.33335312354 12 22.0539974410672 22 -1175.36502652919 32 2068.54486718316 13 22.0539974410672 23 -1175.36502652919 33 2068.54486718316 70 0 0 3DFACE 8 crank_full 10 97.0207423055492 20 -1271.71644809489 30 2051.44077874854 11 95.8501011255072 21 -1271.71623769867 31 2013.07583165055 12 39.2446267860425 22 -1175.36490580924 32 2027.58467287705 13 39.2446267860425 23 -1175.36490580924 33 2027.58467287705 70 0 0 3DFACE 8 crank_full 10 97.0207423055492 20 -1271.71644809489 30 2051.44077874854 11 39.2446267860425 21 -1175.36490580924 31 2027.58467287705 12 80.5104813608606 22 -1244.21642404447 32 2049.07971498233 13 80.5104813608606 23 -1244.21642404447 33 2049.07971498233 70 0 0 3DFACE 8 crank_full 10 80.5104813608606 20 -1244.21642404447 30 2049.07971498233 11 39.2446267860425 21 -1175.36490580924 31 2027.58467287705 12 39.1718387267654 22 -1175.36498826062 32 2043.18320252602 13 39.1718387267654 23 -1175.36498826062 33 2043.18320252602 70 0 0 3DFACE 8 crank_full 10 33.1365944868046 20 -1575.77504550416 30 2057.56773748292 11 39.1731407508892 21 -1575.77508789537 31 2043.18442998714 12 114.432786822367 22 -1491.10243675244 32 2053.92735141868 13 114.432786822367 23 -1491.10243675244 33 2053.92735141868 70 0 0 3DFACE 8 crank_full 10 -40.8109707613038 20 1087.68143091934 30 2094.59385930307 11 -14.9795415848991 21 1076.22858095908 31 2105.69575667421 12 -14.9794770512274 22 1087.68122638822 32 2105.69581751223 13 -14.9794770512274 23 1087.68122638822 33 2105.69581751223 70 1 0 3DFACE 8 crank_full 10 -14.9795415848991 20 1076.22858095908 30 2105.69575667421 11 -40.8109707613038 21 1087.68143091934 31 2094.59385930307 12 -40.8110352949755 22 1076.22878549019 32 2094.59379846504 13 -40.8110352949755 23 1076.22878549019 33 2094.59379846504 70 1 0 3DFACE 8 crank_full 10 13.1342467554502 20 1087.68106599834 30 2106.06740479624 11 39.2500765270318 21 1076.22832873845 31 2095.65198952152 12 39.2501410607034 22 1087.68097416759 32 2095.65205035954 13 39.2501410607034 23 1087.68097416759 33 2095.65205035954 70 1 0 3DFACE 8 crank_full 10 39.2500765270318 20 1076.22832873845 30 2095.65198952152 11 13.1342467554502 21 1087.68106599834 31 2106.06740479624 12 13.1341822217786 22 1076.2284205692 32 2106.06734395821 13 13.1341822217786 23 1076.2284205692 33 2106.06734395821 70 1 0 3DFACE 8 crank_full 10 -13.1114461530171 20 1076.22932123545 30 1964.35852270987 11 -39.2272759245986 21 1087.68205849534 31 1974.77393798458 12 -13.1113816193455 22 1087.68196666459 32 1964.35858354789 13 -13.1113816193455 23 1087.68196666459 33 1964.35858354789 70 1 0 3DFACE 8 crank_full 10 -39.2272759245986 20 1087.68205849534 30 1974.77393798458 11 -13.1114461530171 21 1076.22932123545 31 1964.35852270987 12 -39.2273404582702 22 1076.22941306619 32 1974.77387714657 13 -39.2273404582702 23 1076.22941306619 33 1974.77387714657 70 1 0 3DFACE 8 crank_full 10 60.4504887565981 20 1087.68138420926 30 1995.97428567753 11 70.8657786588185 21 1076.22854136019 31 2022.0901191445 12 60.4504242229264 22 1076.22873878012 32 1995.97422483951 13 60.4504242229264 23 1076.22873878012 33 1995.97422483951 70 1 0 3DFACE 8 crank_full 10 70.8657786588185 20 1076.22854136019 30 2022.0901191445 11 60.4504887565981 21 1087.68138420926 31 1995.97428567753 12 70.8658431924901 22 1087.68118678933 32 2022.09017998252 13 70.8658431924901 23 1087.68118678933 33 2022.09017998252 70 1 0 3DFACE 8 crank_full 10 -22.056636051503 20 -1175.36442371874 30 2001.8570779373 11 -33.1252329353715 21 1078.14549914487 31 2012.84740605224 12 -22.0439379137581 22 1078.14549502223 32 2001.86904889088 13 -22.0439379137581 23 1078.14549502223 33 2001.86904889088 70 1 0 3DFACE 8 crank_full 10 -33.1252329353715 20 1078.14549914487 30 2012.84740605224 11 -22.056636051503 21 -1175.36442371874 31 2001.8570779373 12 -33.1295365918798 22 314.385267310674 32 2012.8433488532 13 -33.1295365918798 23 314.385267310674 33 2012.8433488532 70 1 0 3DFACE 8 crank_full 10 22.3769162950522 20 1078.1452436173 30 2002.07633174518 11 33.3425753183123 21 -1175.36479585016 31 2013.1456558129 12 22.3642181573071 22 -1175.36467512367 32 2002.0643607916 13 22.3642181573071 23 -1175.36467512367 33 2002.0643607916 70 1 0 3DFACE 8 crank_full 10 33.3425753183123 20 -1175.36479585016 30 2013.1456558129 11 22.3769162950522 21 1078.1452436173 31 2002.07633174518 12 33.3552734560573 22 1078.14512289081 32 2013.15762676649 13 33.3552734560573 23 1078.14512289081 33 2013.15762676649 70 1 0 3DFACE 8 crank_full 10 22.0666955788121 20 1078.14489221178 30 2068.55683813674 11 13.1341822217786 21 1076.2284205692 31 2106.06734395821 12 7.62767851452085 22 1078.14494222063 32 2074.45888960491 13 7.62767851452085 23 1078.14494222063 33 2074.45888960491 70 1 0 3DFACE 8 crank_full 10 13.1341822217786 20 1076.2284205692 30 2106.06734395821 11 22.0666955788121 21 1078.14489221178 31 2068.55683813674 12 39.2500765270318 22 1076.22832873845 32 2095.65198952152 13 39.2500765270318 23 1076.22832873845 33 2095.65198952152 70 1 0 3DFACE 8 crank_full 10 -22.354158629998 20 1078.14514361671 30 2068.34955528244 11 -14.9795415848991 21 1076.22858095908 31 2105.69575667421 12 -40.8110352949755 22 1076.22878549019 32 2094.59379846504 13 -40.8110352949755 23 1076.22878549019 33 2094.59379846504 70 1 0 3DFACE 8 crank_full 10 -14.9795415848991 20 1076.22858095908 30 2105.69575667421 11 -22.354158629998 21 1078.14514361671 31 2068.34955528244 12 -7.97085113442526 22 1078.14503050231 32 2074.3861015461 13 -7.97085113442526 23 1078.14503050231 33 2074.3861015461 70 1 0 3DFACE 8 crank_full 10 15.0022776536605 20 1076.22916084557 30 1964.73010999387 11 22.3769162950522 21 1078.1452436173 31 2002.07633174518 12 7.99360879947956 22 1078.14535673171 32 1996.03978548152 13 7.99360879947956 23 1078.14535673171 33 1996.03978548152 70 1 0 3DFACE 8 crank_full 10 22.3769162950522 20 1078.1452436173 30 2002.07633174518 11 15.0022776536605 21 1076.22916084557 31 1964.73010999387 12 40.8337713637369 22 1076.22895631445 32 1975.83206820304 13 40.8337713637369 23 1076.22895631445 33 1975.83206820304 70 1 0 3DFACE 8 crank_full 10 15.0022776536605 20 1076.22916084557 30 1964.73010999387 11 -7.60492084946682 21 1078.14544501338 31 1995.96699742271 12 -13.1114461530171 22 1076.22932123545 32 1964.35852270987 13 -13.1114461530171 23 1076.22932123545 33 1964.35852270987 70 1 0 3DFACE 8 crank_full 10 -7.60492084946682 20 1078.14544501338 30 1995.96699742271 11 15.0022776536605 21 1076.22916084557 31 1964.73010999387 12 7.99360879947956 22 1078.14535673171 32 1996.03978548152 13 7.99360879947956 23 1078.14535673171 33 1996.03978548152 70 1 0 3DFACE 8 crank_full 10 -7.61761898721182 20 -1175.36447372759 30 1995.95502646913 11 -22.1264639806523 21 -1271.7151812764 31 1939.34942428128 12 -26.4930734323873 22 -1260.03663933705 32 1922.31304179217 13 -26.4930734323873 23 -1260.03663933705 33 1922.31304179217 70 0 0 3DFACE 8 crank_full 10 7.98091066173456 20 -1175.36456200926 30 1996.02781452793 11 18.7238320955074 21 -1260.0363927542 31 1920.768168456 12 16.2384831173033 22 -1271.71539123762 32 1938.17878310009 13 16.2384831173033 23 -1271.71539123762 33 1938.17878310009 70 0 0 3DFACE 8 crank_full 10 0.000316577896367365 20 -1635.02455455848 30 2035.20251476124 11 -22.055000168389 21 -1635.02485596371 31 2001.85862013831 12 -7.61598310409778 22 -1635.02480595485 32 1995.95656867013 13 -7.61598310409778 23 -1635.02480595485 33 1995.95656867013 70 0 0 3DFACE 8 crank_full 10 33.1369283457947 20 -1635.02424903062 30 2057.56805222281 11 22.0556333241812 21 -1635.02425315326 31 2068.54640938416 12 0.000316577896367365 22 -1635.02455455848 32 2035.20251476124 13 0.000316577896367365 23 -1635.02455455848 33 2035.20251476124 70 0 0 3DFACE 8 crank_full 10 0.000316577896367365 20 -1635.02455455848 30 2035.20251476124 11 -39.1728414540873 21 -1635.02481769514 31 2027.22028479544 12 -33.1362951900026 22 -1635.02486008634 32 2012.83697729966 13 -33.1362951900026 23 -1635.02486008634 33 2012.83697729966 70 0 0 3DFACE 8 crank_full 10 7.61661625988982 20 -1635.02430316211 30 2074.44846085234 11 -7.98191338905644 21 -1635.02439144378 31 2074.37567279353 12 0.000316577896367365 22 -1635.02455455848 32 2035.20251476124 13 0.000316577896367365 23 -1635.02455455848 33 2035.20251476124 70 0 0 3DFACE 8 crank_full 10 83.4206440937541 20 -1271.71656212697 30 2087.33335312354 11 98.5563030683821 21 -1491.10230115877 31 2096.29352239028 12 98.5550010442582 22 -1260.03501051119 32 2096.29229492916 13 98.5550010442582 23 -1260.03501051119 33 2096.29229492916 70 1 0 3DFACE 8 crank_full 10 98.5563030683821 20 -1491.10230115877 30 2096.29352239028 11 83.4206440937541 21 -1271.71656212697 31 2087.33335312354 12 83.421946117878 22 -1479.42351402902 32 2087.33458058465 13 83.421946117878 23 -1479.42351402902 33 2087.33458058465 70 1 0 3DFACE 8 crank_full 10 114.432786822367 20 -1491.10243675244 30 2053.92735141868 11 97.0220443296732 21 -1479.4236280611 31 2051.44200620966 12 114.431484798243 22 -1260.03514610487 32 2053.92612395756 13 114.431484798243 23 -1260.03514610487 33 2053.92612395756 70 0 0 3DFACE 8 crank_full 10 -7.97085113442526 20 1078.14503050231 30 2074.3861015461 11 7.61498037677585 21 -1175.36497652034 31 2074.44691865133 12 7.62767851452085 22 1078.14494222063 32 2074.45888960491 13 7.62767851452085 23 1078.14494222063 33 2074.45888960491 70 1 0 3DFACE 8 crank_full 10 7.61498037677585 20 -1175.36497652034 30 2074.44691865133 11 -7.97085113442526 21 1078.14503050231 31 2074.3861015461 12 -7.9835492721704 22 -1175.36488823867 32 2074.37413059252 13 -7.9835492721704 23 -1175.36488823867 33 2074.37413059252 70 1 0 3DFACE 8 crank_full 10 -98.5563376305701 20 -1491.10406090528 30 1974.11087765241 11 -114.43412340868 21 -1260.03663466403 31 2016.47582116289 12 -98.5576396546941 22 -1260.0367702577 32 1974.10965019129 13 -98.5576396546941 23 -1260.0367702577 33 1974.10965019129 70 1 0 3DFACE 8 crank_full 10 -114.43412340868 20 -1260.03663466403 30 2016.47582116289 11 -98.5563376305701 21 -1491.10406090528 31 1974.11087765241 12 -114.432821384555 22 -1491.10392531161 32 2016.47704862401 13 -114.432821384555 23 -1491.10392531161 33 2016.47704862401 70 1 0 3DFACE 8 crank_full 10 -7.98224724804656 20 -1575.77518791732 30 2074.37535805364 11 -18.7251686818196 21 -1491.10267866227 31 2149.63500412557 12 -61.0913396528737 22 -1491.10300172636 32 2133.75852037282 13 -61.0913396528737 23 -1491.10300172636 33 2133.75852037282 70 0 0 3DFACE 8 crank_full 10 22.0556333241812 20 -1635.02425315326 30 2068.54640938416 11 7.61661625988982 21 -1635.02430316211 31 2074.44846085234 12 0.000316577896367365 22 -1635.02455455848 32 2035.20251476124 13 0.000316577896367365 23 -1635.02455455848 33 2035.20251476124 70 0 0 3DFACE 8 crank_full 10 21.0791386559896 20 -1635.02461467787 30 2001.52587998687 11 0.000316577896367365 21 -1635.02455455848 31 2035.20251476124 12 7.98254654484851 22 -1635.02471767319 32 1996.02935672895 13 7.98254654484851 23 -1635.02471767319 33 1996.02935672895 70 0 0 3DFACE 8 crank_full 10 67.6755129564576 20 -1491.10229951782 30 2129.35909332543 11 22.055299465191 21 -1575.7750496268 31 2068.54609464427 12 57.1216001817944 22 -1479.42351372144 32 2115.29046315506 13 57.1216001817944 23 -1479.42351372144 33 2115.29046315506 70 0 0 3DFACE 8 crank_full 10 -61.0926416769977 20 -1260.03571107878 30 2133.75729291171 11 -7.9835492721704 21 -1175.36488823867 31 2074.37413059252 12 -22.366856767743 22 -1175.36477512426 32 2068.33758432885 13 -22.366856767743 23 -1175.36477512426 33 2068.33758432885 70 0 0 3DFACE 8 crank_full 10 -61.0926416769977 20 -1260.03571107878 30 2133.75729291171 11 -18.7264707059435 21 -1260.03538801469 31 2149.63377666445 12 -7.9835492721704 22 -1175.36488823867 32 2074.37413059252 13 -7.9835492721704 23 -1175.36488823867 33 2074.37413059252 70 0 0 3DFACE 8 crank_full 10 67.6742109323337 20 -1260.03500887024 30 2129.35786586431 11 22.0539974410672 21 -1175.36502652919 31 2068.54486718316 12 7.61498037677585 22 -1175.36497652034 32 2074.44691865133 13 7.61498037677585 23 -1175.36497652034 33 2074.44691865133 70 0 0 3DFACE 8 crank_full 10 -114.432821384555 20 -1491.10392531161 30 2016.47704862401 11 -97.0222105092401 21 -1479.42489400365 31 2018.96226975299 12 -97.0235125333639 22 -1271.71518215234 32 2018.96104229187 13 -97.0235125333639 23 -1271.71518215234 33 2018.96104229187 70 0 0 3DFACE 8 crank_full 10 -39.1731753130775 20 -1575.77561416868 30 2027.21997005555 11 -97.0222105092401 21 -1479.42489400365 31 2018.96226975299 12 -114.432821384555 22 -1491.10392531161 32 2016.47704862401 13 -114.432821384555 23 -1491.10392531161 33 2016.47704862401 70 0 0 3DFACE 8 crank_full 10 -97.0235125333639 20 -1271.71518215234 30 2018.96104229187 11 -39.1744773372013 21 -1175.36446198731 31 2027.21874259443 12 -114.43412340868 22 -1260.03663466403 32 2016.47582116289 13 -114.43412340868 23 -1260.03663466403 33 2016.47582116289 70 0 0 3DFACE 8 crank_full 10 -114.432821384555 20 -1491.10392531161 30 2016.47704862401 11 -97.0235125333639 21 -1271.71518215234 31 2018.96104229187 12 -114.43412340868 22 -1260.03663466403 32 2016.47582116289 13 -114.43412340868 23 -1260.03663466403 33 2016.47582116289 70 0 0 3DFACE 8 crank_full 10 -22.3655547436192 20 -1575.77530103172 30 2068.33881178997 11 -33.3439119046243 21 -1575.77542175822 31 2057.25751676867 12 -33.3435780456342 22 -1635.02462528468 32 2057.25783150856 13 -33.3435780456342 23 -1635.02462528468 33 2057.25783150856 70 0 0 3DFACE 8 crank_full 10 -33.3435780456342 20 -1635.02462528468 30 2057.25783150856 11 -21.0785055001976 21 -1635.02449443909 31 2068.87914953561 12 -22.3655547436192 22 -1575.77530103172 32 2068.33881178997 13 -22.3655547436192 23 -1575.77530103172 33 2068.33881178997 70 0 0 3DFACE 8 crank_full 10 21.0791386559896 20 -1635.02461467787 30 2001.52587998687 11 22.365520181431 21 -1575.77540103232 31 2002.06558825272 12 33.3442112014263 22 -1635.02448383228 32 2013.14719801391 13 33.3442112014263 23 -1635.02448383228 33 2013.14719801391 70 0 0 3DFACE 8 crank_full 10 33.3442112014263 20 -1635.02448383228 30 2013.14719801391 11 22.365520181431 21 -1575.77540103232 31 2002.06558825272 12 33.3438773424362 22 -1575.77528030582 32 2013.14688327402 13 33.3438773424362 23 -1575.77528030582 33 2013.14688327402 70 0 0 3DFACE 8 crank_full 10 70.4942559076435 20 1087.68103953921 30 2050.20390378926 11 59.3922331640569 21 1076.22831944724 31 2076.0353366617 12 70.4941913739718 22 1076.22839411006 32 2050.20384295124 13 70.4941913739718 23 1076.22839411006 33 2050.20384295124 70 1 0 3DFACE 8 crank_full 10 59.3922331640569 20 1076.22831944724 30 2076.0353366617 11 70.4942559076435 21 1087.68103953921 31 2050.20390378926 12 59.3922976977286 22 1087.68096487638 32 2076.03539749972 13 59.3922976977286 23 1087.68096487638 33 2076.03539749972 70 1 0 3DFACE 8 crank_full 10 40.8337713637369 20 1076.22895631445 30 1975.83206820304 11 15.0023421873321 21 1087.68180627471 31 1964.7301708319 12 40.8338358974086 22 1087.68160174359 32 1975.83212904106 13 40.8338358974086 23 1087.68160174359 33 1975.83212904106 70 1 0 3DFACE 8 crank_full 10 15.0023421873321 20 1087.68180627471 30 1964.7301708319 11 40.8337713637369 21 1076.22895631445 31 1975.83206820304 12 15.0022776536605 22 1076.22916084557 32 1964.73010999387 13 15.0022776536605 23 1076.22916084557 33 1964.73010999387 70 1 0 3DFACE 8 crank_full 10 -70.4714553052104 20 1076.22934769458 30 2020.22202371684 11 -59.3694325616239 21 1087.68206778655 31 1994.39059084441 12 -59.3694970952955 22 1076.22942235741 32 1994.39053000639 13 -59.3694970952955 23 1076.22942235741 33 1994.39053000639 70 1 0 3DFACE 8 crank_full 10 -59.3694325616239 20 1087.68206778655 30 1994.39059084441 11 -70.4714553052104 21 1076.22934769458 31 2020.22202371684 12 -70.4713907715387 22 1087.68199312372 32 2020.22208455487 13 -70.4713907715387 23 1087.68199312372 33 2020.22208455487 70 1 0 3DFACE 8 crank_full 10 -60.4276881541649 20 1076.22900302453 30 2074.45164182857 11 -70.8429780563856 21 1087.6818458736 31 2048.3358083616 12 -70.8430425900572 22 1076.22920044446 32 2048.33574752358 13 -70.8430425900572 23 1076.22920044446 33 2048.33574752358 70 1 0 3DFACE 8 crank_full 10 -70.8429780563856 20 1087.6818458736 30 2048.3358083616 11 -60.4276881541649 21 1076.22900302453 31 2074.45164182857 12 -60.4276236204933 22 1087.68164845367 32 2074.45170266659 13 -60.4276236204933 23 1087.68164845367 33 2074.45170266659 70 1 0 3DFACE 8 crank_full 10 112.886611463429 20 -1260.03539500836 30 2008.70921842963 11 94.1568760248532 21 -1491.10300997595 31 1967.52666978086 12 94.1555740007292 22 -1260.03571932837 32 1967.52544231974 13 94.1555740007292 23 -1260.03571932837 33 1967.52544231974 70 1 0 3DFACE 8 crank_full 10 94.1568760248532 20 -1491.10300997595 30 1967.52666978086 11 112.886611463429 21 -1260.03539500836 31 2008.70921842963 12 112.887913487553 22 -1491.10268565594 32 2008.71044589075 13 112.887913487553 23 -1491.10268565594 33 2008.71044589075 70 1 0 3DFACE 8 crank_full 10 -112.887948049741 20 -1491.10367640812 30 2061.69395415194 11 -39.2459633723545 21 -1575.77553171729 31 2042.81849970453 12 -33.3439119046243 22 -1575.77542175822 32 2057.25751676867 13 -33.3439119046243 23 -1575.77542175822 33 2057.25751676867 70 0 0 3DFACE 8 crank_full 10 -22.3655547436192 20 -1575.77530103172 30 2068.33881178997 11 -7.98191338905644 21 -1635.02439144378 31 2074.37567279353 12 -7.98224724804656 22 -1575.77518791732 32 2074.37535805364 13 -7.98224724804656 23 -1575.77518791732 33 2074.37535805364 70 1 0 3DFACE 8 crank_full 10 -7.98191338905644 20 -1635.02439144378 30 2074.37567279353 11 -22.3655547436192 21 -1575.77530103172 31 2068.33881178997 12 -21.0785055001976 22 -1635.02449443909 32 2068.87914953561 13 -21.0785055001976 23 -1635.02449443909 33 2068.87914953561 70 1 0 3DFACE 8 crank_full 10 22.0539974410672 20 -1175.36502652919 30 2068.54486718316 11 33.1352924626808 21 -1175.36503065183 31 2057.5665100218 12 22.062391922304 22 314.384660377585 32 2068.5527809377 13 22.062391922304 23 314.384660377585 33 2068.5527809377 70 0 0 3DFACE 8 crank_full 10 7.98221268585839 20 -1575.77551414673 30 1996.02904198905 11 61.0913050906858 21 -1491.1033603377 31 1936.64587966987 12 22.365520181431 22 -1575.77540103232 32 2002.06558825272 13 22.365520181431 23 -1575.77540103232 33 2002.06558825272 70 0 0 3DFACE 8 crank_full 10 -67.6768495427695 20 -1260.03677189865 30 1941.04407925614 11 -22.056636051503 21 -1175.36442371874 31 2001.8570779373 12 -7.61761898721182 22 -1175.36447372759 32 1995.95502646913 13 -7.61761898721182 23 -1175.36447372759 33 1995.95502646913 70 0 0 3DFACE 8 crank_full 10 33.3438773424362 20 -1575.77528030582 30 2013.14688327402 11 52.132359515953 21 -1479.42441042435 31 1951.78010877195 12 80.0882420855246 22 -1479.42411318676 32 1978.08045470725 13 80.0882420855246 23 -1479.42411318676 33 1978.08045470725 70 0 0 3DFACE 8 crank_full 10 -33.3325157910026 20 1078.14526434321 30 2057.26826026113 11 -40.8110352949755 21 1076.22878549019 31 2094.59379846504 12 -60.4276881541649 22 1076.22900302453 32 2074.45164182857 13 -60.4276881541649 23 1076.22900302453 33 2074.45164182857 70 1 0 3DFACE 8 crank_full 10 -40.8110352949755 20 1076.22878549019 30 2094.59379846504 11 -33.3325157910026 21 1078.14526434321 31 2057.26826026113 12 -22.354158629998 22 1078.14514361671 32 2068.34955528244 13 -22.354158629998 23 1078.14514361671 33 2068.34955528244 70 1 0 3DFACE 8 crank_full 10 -95.8528713533217 20 -1271.71539254856 30 2057.32598938986 11 -112.887948049741 21 -1491.10367640812 31 2061.69395415194 12 -112.889250073865 22 -1260.03638576054 32 2061.69272669082 13 -112.889250073865 23 -1260.03638576054 33 2061.69272669082 70 1 0 3DFACE 8 crank_full 10 -112.887948049741 20 -1491.10367640812 30 2061.69395415194 11 -95.8528713533217 21 -1271.71539254856 31 2057.32598938986 12 -95.851569329198 22 -1479.42468360743 32 2057.32721685097 13 -95.851569329198 23 -1479.42468360743 33 2057.32721685097 70 1 0 3DFACE 8 crank_full 10 -22.3655547436192 20 -1575.77530103172 30 2068.33881178997 11 -7.98224724804656 21 -1575.77518791732 31 2074.37535805364 12 -61.0913396528737 22 -1491.10300172636 32 2133.75852037282 13 -61.0913396528737 23 -1491.10300172636 33 2133.75852037282 70 0 0 3DFACE 8 crank_full 10 39.2573249237874 20 1078.14501293173 30 2027.59664383063 11 39.1718387267654 21 -1175.36498826062 31 2043.18320252602 12 39.2446267860425 22 -1175.36490580924 32 2027.58467287705 13 39.2446267860425 23 -1175.36490580924 33 2027.58467287705 70 1 0 3DFACE 8 crank_full 10 39.1718387267654 20 -1175.36498826062 30 2043.18320252602 11 39.2573249237874 21 1078.14501293173 31 2027.59664383063 12 39.1845368645104 22 1078.14493048035 32 2043.19517347961 13 39.1845368645104 23 1078.14493048035 33 2043.19517347961 70 1 0 3DFACE 8 crank_full 10 7.98091066173456 20 -1175.36456200926 30 1996.02781452793 11 -7.60492084946682 21 1078.14544501338 31 1995.96699742271 12 7.99360879947956 22 1078.14535673171 32 1996.03978548152 13 7.99360879947956 23 1078.14535673171 33 1996.03978548152 70 1 0 3DFACE 8 crank_full 10 -7.60492084946682 20 1078.14544501338 30 1995.96699742271 11 7.98091066173456 21 -1175.36456200926 31 1996.02781452793 12 -7.60922450597496 22 314.385213179183 32 1995.96294022367 13 -7.60922450597496 23 314.385213179183 33 1995.96294022367 70 1 0 3DFACE 8 crank_full 10 39.2573249237874 20 1078.14501293173 30 2027.59664383063 11 70.4941913739718 21 1076.22839411006 31 2050.20384295124 12 39.1845368645104 22 1078.14493048035 32 2043.19517347961 13 39.1845368645104 23 1078.14493048035 33 2043.19517347961 70 1 0 3DFACE 8 crank_full 10 70.4941913739718 20 1076.22839411006 30 2050.20384295124 11 39.2573249237874 21 1078.14501293173 31 2027.59664383063 12 70.8657786588185 22 1076.22854136019 32 2022.0901191445 13 70.8657786588185 23 1076.22854136019 33 2022.0901191445 70 1 0 3DFACE 8 crank_full 10 -26.4917714082634 20 -1491.10392998463 30 1922.31426925329 11 -67.6768495427695 21 -1260.03677189865 31 1941.04407925614 12 -26.4930734323873 22 -1260.03663933705 32 1922.31304179217 13 -26.4930734323873 23 -1260.03663933705 33 1922.31304179217 70 1 0 3DFACE 8 crank_full 10 -67.6768495427695 20 -1260.03677189865 30 1941.04407925614 11 -26.4917714082634 21 -1491.10392998463 31 1922.31426925329 12 -67.6755475186457 22 -1491.10406254623 32 1941.04530671726 13 -67.6755475186457 23 -1491.10406254623 33 1941.04530671726 70 1 0 3DFACE 8 crank_full 10 33.1479906004257 20 1078.14488808915 30 2057.57848097538 11 39.2500765270318 21 1076.22832873845 31 2095.65198952152 12 22.0666955788121 22 1078.14489221178 32 2068.55683813674 13 22.0666955788121 23 1078.14489221178 33 2068.55683813674 70 1 0 3DFACE 8 crank_full 10 39.2500765270318 20 1076.22832873845 30 2095.65198952152 11 33.1479906004257 21 1078.14488808915 31 2057.57848097538 12 59.3922331640569 22 1076.22831944724 32 2076.0353366617 13 59.3922331640569 23 1076.22831944724 33 2076.0353366617 70 1 0 3DFACE 8 crank_full 10 -61.0926416769977 20 -1260.03571107878 30 2133.75729291171 11 -18.7251686818196 21 -1491.10267866227 31 2149.63500412557 12 -18.7264707059435 22 -1260.03538801469 32 2149.63377666445 13 -18.7264707059435 23 -1260.03538801469 33 2149.63377666445 70 1 0 3DFACE 8 crank_full 10 -18.7251686818196 20 -1491.10267866227 30 2149.63500412557 11 -61.0926416769977 21 -1260.03571107878 31 2133.75729291171 12 -61.0913396528737 22 -1491.10300172636 32 2133.75852037282 13 -61.0913396528737 23 -1491.10300172636 33 2133.75852037282 70 1 0 3DFACE 8 crank_full 10 -22.0553340273792 20 -1575.77565243725 30 2001.85830539842 11 -57.1217663613614 21 -1479.42500834332 31 1955.11381280758 12 -67.6755475186457 22 -1491.10406254623 32 1941.04530671726 13 -67.6755475186457 23 -1491.10406254623 33 1941.04530671726 70 0 0 3DFACE 8 crank_full 10 -52.13252569552 20 -1479.4241116404 30 2118.62416719069 11 -61.0926416769977 21 -1260.03571107878 31 2133.75729291171 12 -52.1338277196439 22 -1271.71596451559 32 2118.62293972957 13 -52.1338277196439 23 -1271.71596451559 33 2118.62293972957 70 1 0 3DFACE 8 crank_full 10 -61.0926416769977 20 -1260.03571107878 30 2133.75729291171 11 -52.13252569552 21 -1479.4241116404 31 2118.62416719069 12 -61.0913396528737 22 -1491.10300172636 32 2133.75852037282 13 -61.0913396528737 23 -1491.10300172636 33 2133.75852037282 70 1 0 3DFACE 8 crank_full 10 -39.2345672587327 20 1078.14537430228 30 2042.82924319699 11 -60.4276881541649 21 1076.22900302453 31 2074.45164182857 12 -70.8430425900572 22 1076.22920044446 32 2048.33574752358 13 -70.8430425900572 23 1076.22920044446 33 2048.33574752358 70 1 0 3DFACE 8 crank_full 10 -60.4276881541649 20 1076.22900302453 30 2074.45164182857 11 -39.2345672587327 21 1078.14537430228 31 2042.82924319699 12 -33.3325157910026 22 1078.14526434321 32 2057.26826026113 13 -33.3325157910026 23 1078.14526434321 33 2057.26826026113 70 1 0 3DFACE 8 crank_full 10 26.491736846075 20 -1491.10243207942 30 2148.0901307894 11 22.1249957769614 21 -1479.42362718516 31 2131.05362422024 12 7.61628240089973 22 -1575.77509963565 32 2074.44814611245 13 7.61628240089973 23 -1575.77509963565 33 2074.44814611245 70 0 0 3DFACE 8 crank_full 10 -7.98224724804656 20 -1575.77518791732 30 2074.37535805364 11 7.61661625988982 21 -1635.02430316211 31 2074.44846085234 12 7.61628240089973 22 -1575.77509963565 32 2074.44814611245 13 7.61628240089973 23 -1575.77509963565 33 2074.44814611245 70 1 0 3DFACE 8 crank_full 10 7.61661625988982 20 -1635.02430316211 30 2074.44846085234 11 -7.98224724804656 21 -1575.77518791732 31 2074.37535805364 12 -7.98191338905644 22 -1635.02439144378 32 2074.37567279353 13 -7.98191338905644 23 -1635.02439144378 33 2074.37567279353 70 1 0 3DFACE 8 crank_full 10 80.0869400614005 20 -1271.71596296923 30 1978.07922724613 11 33.3425753183123 21 -1175.36479585016 31 2013.1456558129 12 94.1555740007292 22 -1260.03571932837 32 1967.52544231974 13 94.1555740007292 23 -1260.03571932837 33 1967.52544231974 70 0 0 3DFACE 8 crank_full 10 0.000316577896367365 20 -1635.02455455848 30 2035.20251476124 11 -7.98191338905644 21 -1635.02439144378 31 2074.37567279353 12 -21.0785055001976 22 -1635.02449443909 32 2068.87914953561 13 -21.0785055001976 23 -1635.02449443909 33 2068.87914953561 70 0 0 3DFACE 8 crank_full 10 0.000316577896367365 20 -1635.02455455848 30 2035.20251476124 11 -39.2456295133644 21 -1635.02473524376 31 2042.81881444442 12 -39.1728414540873 22 -1635.02481769514 32 2027.22028479544 13 -39.1728414540873 23 -1635.02481769514 33 2027.22028479544 70 0 0 3DFACE 8 crank_full 10 33.3442112014263 20 -1635.02448383228 30 2013.14719801391 11 0.000316577896367365 21 -1635.02455455848 31 2035.20251476124 12 21.0791386559896 22 -1635.02461467787 32 2001.52587998687 13 21.0791386559896 23 -1635.02461467787 33 2001.52587998687 70 0 0 3DFACE 8 crank_full 10 39.2462626691564 20 -1635.02437387321 30 2027.58621507805 11 39.1734746098794 21 -1635.02429142183 31 2043.18474472703 12 0.000316577896367365 22 -1635.02455455848 32 2035.20251476124 13 0.000316577896367365 23 -1635.02455455848 33 2035.20251476124 70 0 0 3DFACE 8 crank_full 10 0.000316577896367365 20 -1635.02455455848 30 2035.20251476124 11 -33.3435780456342 21 -1635.02462528468 31 2057.25783150856 12 -39.2456295133644 22 -1635.02473524376 32 2042.81881444442 13 -39.2456295133644 23 -1635.02473524376 33 2042.81881444442 70 0 0 3DFACE 8 crank_full 10 -18.7264707059435 20 -1260.03538801469 30 2149.63377666445 11 -16.241253345118 21 -1271.71623900961 31 2132.22303794032 12 -7.9835492721704 22 -1175.36488823867 32 2074.37413059252 13 -7.9835492721704 23 -1175.36488823867 33 2074.37413059252 70 0 0 3DFACE 8 crank_full 10 -61.0926416769977 20 -1260.03571107878 30 2133.75729291171 11 -22.366856767743 21 -1175.36477512426 31 2068.33758432885 12 -52.1338277196439 22 -1271.71596451559 32 2118.62293972957 13 -52.1338277196439 23 -1271.71596451559 33 2118.62293972957 70 0 0 3DFACE 8 crank_full 10 -13.1114461530171 20 1076.22932123545 30 1964.35852270987 11 -22.0439379137581 21 1078.14549502223 31 2001.86904889088 12 -39.2273404582702 22 1076.22941306619 32 1974.77387714657 13 -39.2273404582702 23 1076.22941306619 33 1974.77387714657 70 1 0 3DFACE 8 crank_full 10 -22.0439379137581 20 1078.14549502223 30 2001.86904889088 11 -13.1114461530171 21 1076.22932123545 31 1964.35852270987 12 -7.60492084946682 22 1078.14544501338 32 1995.96699742271 13 -7.60492084946682 23 1078.14544501338 33 1995.96699742271 70 1 0 3DFACE 8 crank_full 10 -22.354158629998 20 1078.14514361671 30 2068.34955528244 11 -7.9835492721704 21 -1175.36488823867 31 2074.37413059252 12 -7.97085113442526 22 1078.14503050231 32 2074.3861015461 13 -7.97085113442526 23 1078.14503050231 33 2074.3861015461 70 1 0 3DFACE 8 crank_full 10 -7.9835492721704 20 -1175.36488823867 30 2074.37413059252 11 -22.354158629998 21 1078.14514361671 31 2068.34955528244 12 -22.366856767743 22 -1175.36477512426 32 2068.33758432885 13 -22.366856767743 23 -1175.36477512426 33 2068.33758432885 70 1 0 3DFACE 8 crank_full 10 0.000316577896367365 20 -1635.02455455848 30 2035.20251476124 11 -33.1362951900026 21 -1635.02486008634 31 2012.83697729966 12 -22.055000168389 22 -1635.02485596371 32 2001.85862013831 13 -22.055000168389 23 -1635.02485596371 33 2001.85862013831 70 0 0 3DFACE 8 crank_full 10 -95.8528713533217 20 -1271.71539254856 30 2057.32598938986 11 -112.889250073865 21 -1260.03638576054 31 2061.69272669082 12 -39.2472653964783 22 -1175.36454443869 32 2042.81727224341 13 -39.2472653964783 23 -1175.36454443869 33 2042.81727224341 70 0 0 3DFACE 8 crank_full 10 33.1365944868046 20 -1575.77504550416 30 2057.56773748292 11 39.1734746098794 21 -1635.02429142183 31 2043.18474472703 12 39.1731407508892 22 -1575.77508789537 32 2043.18442998714 13 39.1731407508892 23 -1575.77508789537 33 2043.18442998714 70 1 0 3DFACE 8 crank_full 10 39.1734746098794 20 -1635.02429142183 30 2043.18474472703 11 33.1365944868046 21 -1575.77504550416 31 2057.56773748292 12 33.1369283457947 22 -1635.02424903062 32 2057.56805222281 13 33.1369283457947 23 -1635.02424903062 33 2057.56805222281 70 1 0 3DFACE 8 crank_full 10 39.1731407508892 20 -1575.77508789537 30 2043.18442998714 11 97.0220443296732 21 -1479.4236280611 31 2051.44200620966 12 114.432786822367 22 -1491.10243675244 32 2053.92735141868 13 114.432786822367 23 -1491.10243675244 33 2053.92735141868 70 0 0 3DFACE 8 crank_full 10 -39.2273404582702 20 1076.22941306619 30 1974.77387714657 11 -59.3694325616239 21 1087.68206778655 31 1994.39059084441 12 -39.2272759245986 22 1087.68205849534 32 1974.77393798458 13 -39.2272759245986 23 1087.68205849534 33 1974.77393798458 70 1 0 3DFACE 8 crank_full 10 -59.3694325616239 20 1087.68206778655 30 1994.39059084441 11 -39.2273404582702 21 1076.22941306619 31 1974.77387714657 12 -59.3694970952955 22 1076.22942235741 32 1994.39053000639 13 -59.3694970952955 23 1076.22942235741 33 1994.39053000639 70 1 0 3DFACE 8 crank_full 10 -39.2273404582702 20 1076.22941306619 30 1974.77387714657 11 -33.1252329353715 21 1078.14549914487 31 2012.84740605224 12 -59.3694970952955 22 1076.22942235741 32 1994.39053000639 13 -59.3694970952955 23 1076.22942235741 33 1994.39053000639 70 1 0 3DFACE 8 crank_full 10 -33.1252329353715 20 1078.14549914487 30 2012.84740605224 11 -39.2273404582702 21 1076.22941306619 31 1974.77387714657 12 -22.0439379137581 22 1078.14549502223 32 2001.86904889088 13 -22.0439379137581 23 1078.14549502223 33 2001.86904889088 70 1 0 3DFACE 8 crank_full 10 -59.3694970952955 20 1076.22942235741 30 1994.39053000639 11 -39.1617791994563 21 1078.14545675366 31 2027.23071354802 12 -70.4714553052104 22 1076.22934769458 32 2020.22202371684 13 -70.4714553052104 23 1076.22934769458 33 2020.22202371684 70 1 0 3DFACE 8 crank_full 10 -39.1617791994563 20 1078.14545675366 30 2027.23071354802 11 -59.3694970952955 21 1076.22942235741 31 1994.39053000639 12 -33.1252329353715 22 1078.14549914487 32 2012.84740605224 13 -33.1252329353715 23 1078.14549914487 33 2012.84740605224 70 1 0 3DFACE 8 crank_full 10 -18.7251686818196 20 -1491.10267866227 30 2149.63500412557 11 -7.98224724804656 21 -1575.77518791732 31 2074.37535805364 12 -16.2399513209942 22 -1479.42383714638 32 2132.22426540144 13 -16.2399513209942 23 -1479.42383714638 33 2132.22426540144 70 0 0 3DFACE 8 crank_full 10 -33.3439119046243 20 -1575.77542175822 30 2057.25751676867 11 -80.0884082650914 21 -1479.42440887799 31 2092.3238212554 12 -94.1569105870414 22 -1491.10335208811 32 2102.87773026184 13 -94.1569105870414 23 -1491.10335208811 33 2102.87773026184 70 0 0 3DFACE 8 crank_full 10 -33.1362951900026 20 -1635.02486008634 30 2012.83697729966 11 -39.1731753130775 21 -1575.77561416868 31 2027.21997005555 12 -33.1366290489928 22 -1575.77565655989 32 2012.83666255977 13 -33.1366290489928 23 -1575.77565655989 33 2012.83666255977 70 1 0 3DFACE 8 crank_full 10 -39.1731753130775 20 -1575.77561416868 30 2027.21997005555 11 -33.1362951900026 21 -1635.02486008634 31 2012.83697729966 12 -39.1728414540873 22 -1635.02481769514 32 2027.22028479544 13 -39.1728414540873 23 -1635.02481769514 33 2027.22028479544 70 1 0 3DFACE 8 crank_full 10 -7.97085113442526 20 1078.14503050231 30 2074.3861015461 11 13.1341822217786 21 1076.2284205692 31 2106.06734395821 12 -14.9795415848991 22 1076.22858095908 32 2105.69575667421 13 -14.9795415848991 23 1076.22858095908 33 2105.69575667421 70 1 0 3DFACE 8 crank_full 10 13.1341822217786 20 1076.2284205692 30 2106.06734395821 11 -7.97085113442526 21 1078.14503050231 31 2074.3861015461 12 7.62767851452085 22 1078.14494222063 32 2074.45888960491 13 7.62767851452085 23 1078.14494222063 33 2074.45888960491 70 1 0 3DFACE 8 crank_full 10 39.1845368645104 20 1078.14493048035 30 2043.19517347961 11 59.3922331640569 21 1076.22831944724 31 2076.0353366617 12 33.1479906004257 22 1078.14488808915 32 2057.57848097538 13 33.1479906004257 23 1078.14488808915 33 2057.57848097538 70 1 0 3DFACE 8 crank_full 10 59.3922331640569 20 1076.22831944724 30 2076.0353366617 11 39.1845368645104 21 1078.14493048035 31 2043.19517347961 12 70.4941913739718 22 1076.22839411006 32 2050.20384295124 13 70.4941913739718 23 1076.22839411006 33 2050.20384295124 70 1 0 3DFACE 8 crank_full 10 0.0625974234421623 20 1105.4614427137 30 2035.21299417206 11 -20.3486042412317 21 1105.46140000763 31 2064.90342673756 12 -7.43285738619353 22 1105.46129774208 32 2070.45440584214 13 -7.43285738619353 23 1105.46129774208 33 2070.45440584214 70 0 0 3DFACE 8 crank_full 10 -40.8110352949755 20 1076.22878549019 30 2094.59379846504 11 -60.4276236204933 21 1087.68164845367 31 2074.45170266659 12 -60.4276881541649 22 1076.22900302453 32 2074.45164182857 13 -60.4276881541649 23 1076.22900302453 33 2074.45164182857 70 1 0 3DFACE 8 crank_full 10 -60.4276236204933 20 1087.68164845367 30 2074.45170266659 11 -40.8110352949755 21 1076.22878549019 31 2094.59379846504 12 -40.8109707613038 22 1087.68143091934 32 2094.59385930307 13 -40.8109707613038 23 1087.68143091934 33 2094.59385930307 70 1 0 3DFACE 8 crank_full 10 -61.0913396528737 20 -1491.10300172636 30 2133.75852037282 11 -52.13252569552 21 -1479.4241116404 31 2118.62416719069 12 -22.3655547436192 22 -1575.77530103172 32 2068.33881178997 13 -22.3655547436192 23 -1575.77530103172 33 2068.33881178997 70 0 0 3DFACE 8 crank_full 10 -95.851569329198 20 -1479.42468360743 30 2057.32721685097 11 -39.1731753130775 21 -1575.77561416868 31 2027.21997005555 12 -39.2459633723545 22 -1575.77553171729 32 2042.81849970453 13 -39.2459633723545 23 -1575.77553171729 33 2042.81849970453 70 0 0 3DFACE 8 crank_full 10 -114.43412340868 20 -1260.03663466403 30 2016.47582116289 11 -33.1379310731166 21 -1175.3644195961 31 2012.83543509865 12 -98.5576396546941 22 -1260.0367702577 32 1974.10965019129 13 -98.5576396546941 23 -1260.0367702577 33 1974.10965019129 70 0 0 3DFACE 8 crank_full 10 -22.1264639806523 20 -1271.7151812764 30 1939.34942428128 11 -26.4917714082634 21 -1491.10392998463 31 1922.31426925329 12 -26.4930734323873 22 -1260.03663933705 32 1922.31304179217 13 -26.4930734323873 23 -1260.03663933705 33 1922.31304179217 70 1 0 3DFACE 8 crank_full 10 -26.4917714082634 20 -1491.10392998463 30 1922.31426925329 11 -22.1264639806523 21 -1271.7151812764 31 1939.34942428128 12 -22.1251619565284 22 -1479.42489487959 32 1939.3506517424 13 -22.1251619565284 23 -1479.42489487959 33 1939.3506517424 70 1 0 3DFACE 8 crank_full 10 22.3642181573071 20 -1175.36467512367 30 2002.0643607916 11 52.1310574918292 21 -1271.71566573164 31 1951.77888131083 12 61.0900030665619 22 -1260.03606969012 32 1936.64465220875 13 61.0900030665619 23 -1260.03606969012 33 1936.64465220875 70 0 0 3DFACE 8 crank_full 10 -80.0884082650914 20 -1479.42440887799 30 2092.3238212554 11 -33.3439119046243 21 -1575.77542175822 31 2057.25751676867 12 -22.3655547436192 22 -1575.77530103172 32 2068.33881178997 13 -22.3655547436192 23 -1575.77530103172 33 2068.33881178997 70 0 0 3DFACE 8 crank_full 10 26.4904348219512 20 -1260.03514143184 30 2148.08890332828 11 67.6755129564576 21 -1491.10229951782 31 2129.35909332543 12 67.6742109323337 22 -1260.03500887024 32 2129.35786586431 13 67.6742109323337 23 -1260.03500887024 33 2129.35786586431 70 1 0 3DFACE 8 crank_full 10 67.6755129564576 20 -1491.10229951782 30 2129.35909332543 11 26.4904348219512 21 -1260.03514143184 31 2148.08890332828 12 26.491736846075 22 -1491.10243207942 32 2148.0901307894 13 26.491736846075 23 -1491.10243207942 33 2148.0901307894 70 1 0 3DFACE 8 crank_full 10 39.1731407508892 20 -1575.77508789537 30 2043.18442998714 11 39.2462626691564 21 -1635.02437387321 31 2027.58621507805 12 39.2459288101664 22 -1575.77517034675 32 2027.58590033816 13 39.2459288101664 23 -1575.77517034675 33 2027.58590033816 70 1 0 3DFACE 8 crank_full 10 39.2462626691564 20 -1635.02437387321 30 2027.58621507805 11 39.1731407508892 21 -1575.77508789537 31 2043.18442998714 12 39.1734746098794 22 -1635.02429142183 32 2043.18474472703 13 39.1734746098794 23 -1635.02429142183 33 2043.18474472703 70 1 0 3DFACE 8 crank_full 10 -39.1728414540873 20 -1635.02481769514 30 2027.22028479544 11 -39.2459633723545 21 -1575.77553171729 31 2042.81849970453 12 -39.1731753130775 22 -1575.77561416868 32 2027.21997005555 13 -39.1731753130775 23 -1575.77561416868 33 2027.21997005555 70 1 0 3DFACE 8 crank_full 10 -39.2459633723545 20 -1575.77553171729 30 2042.81849970453 11 -39.1728414540873 21 -1635.02481769514 31 2027.22028479544 12 -39.2456295133644 22 -1635.02473524376 32 2042.81881444442 13 -39.2456295133644 23 -1635.02473524376 33 2042.81881444442 70 1 0 3DFACE 8 crank_full 10 -7.61761898721182 20 -1175.36447372759 30 1995.95502646913 11 -7.60922450597496 21 314.385213179183 31 1995.96294022367 12 7.98091066173456 22 -1175.36456200926 32 1996.02781452793 13 7.98091066173456 23 -1175.36456200926 33 1996.02781452793 70 0 0 3DFACE 8 crank_full 10 80.0882420855246 20 -1479.42411318676 30 1978.08045470725 11 52.1310574918292 21 -1271.71566573164 31 1951.77888131083 12 80.0869400614005 22 -1271.71596296923 32 1978.07922724613 13 80.0869400614005 23 -1271.71596296923 33 1978.07922724613 70 1 0 3DFACE 8 crank_full 10 52.1310574918292 20 -1271.71566573164 30 1951.77888131083 11 80.0882420855246 21 -1479.42411318676 31 1978.08045470725 12 52.132359515953 22 -1479.42441042435 32 1951.78010877195 13 52.132359515953 23 -1479.42441042435 33 1951.78010877195 70 1 0 3DFACE 8 crank_full 10 7.61628240089973 20 -1575.77509963565 30 2074.44814611245 11 22.1249957769614 21 -1479.42362718516 31 2131.05362422024 12 -16.2399513209942 22 -1479.42383714638 32 2132.22426540144 13 -16.2399513209942 23 -1479.42383714638 33 2132.22426540144 70 0 0 3DFACE 8 crank_full 10 -7.60922450597496 20 314.385213179183 30 1995.96294022367 11 -22.0439379137581 21 1078.14549502223 31 2001.86904889088 12 -7.60492084946682 22 1078.14544501338 32 1995.96699742271 13 -7.60492084946682 23 1078.14544501338 33 1995.96699742271 70 1 0 3DFACE 8 crank_full 10 -22.0439379137581 20 1078.14549502223 30 2001.86904889088 11 -7.60922450597496 21 314.385213179183 31 1995.96294022367 12 -22.056636051503 22 -1175.36442371874 32 2001.8570779373 13 -22.056636051503 23 -1175.36442371874 33 2001.8570779373 70 3 0 3DFACE 8 crank_full 10 -22.056636051503 20 -1175.36442371874 30 2001.8570779373 11 -7.60922450597496 21 314.385213179183 31 1995.96294022367 12 -7.61761898721182 22 -1175.36447372759 32 1995.95502646913 13 -7.61761898721182 23 -1175.36447372759 33 1995.95502646913 70 1 0 3DFACE 8 crank_full 10 -70.8430425900572 20 1076.22920044446 30 2048.33574752358 11 -70.4713907715387 21 1087.68199312372 31 2020.22208455487 12 -70.4714553052104 22 1076.22934769458 32 2020.22202371684 13 -70.4714553052104 23 1076.22934769458 33 2020.22202371684 70 1 0 3DFACE 8 crank_full 10 -70.4713907715387 20 1087.68199312372 30 2020.22208455487 11 -70.8430425900572 21 1076.22920044446 31 2048.33574752358 12 -70.8429780563856 22 1087.6818458736 32 2048.3358083616 13 -70.8429780563856 23 1087.6818458736 33 2048.3358083616 70 1 0 3DFACE 8 crank_full 10 7.61628240089973 20 -1575.77509963565 30 2074.44814611245 11 22.055299465191 21 -1575.7750496268 31 2068.54609464427 12 67.6755129564576 22 -1491.10229951782 32 2129.35909332543 13 67.6755129564576 23 -1491.10229951782 33 2129.35909332543 70 0 0 3DFACE 8 crank_full 10 57.1202981576705 20 -1271.71656243456 30 2115.28923569394 11 83.421946117878 21 -1479.42351402902 31 2087.33458058465 12 83.4206440937541 22 -1271.71656212697 32 2087.33335312354 13 83.4206440937541 23 -1271.71656212697 33 2087.33335312354 70 1 0 3DFACE 8 crank_full 10 83.421946117878 20 -1479.42351402902 30 2087.33458058465 11 57.1202981576705 21 -1271.71656243456 31 2115.28923569394 12 57.1216001817944 22 -1479.42351372144 32 2115.29046315506 13 57.1216001817944 23 -1479.42351372144 33 2115.29046315506 70 1 0 3DFACE 8 crank_full 10 18.7251341196313 20 -1491.10368340178 30 1920.76939591712 11 16.2384831173033 21 -1271.71539123762 31 1938.17878310009 12 18.7238320955074 22 -1260.0363927542 32 1920.768168456 13 18.7238320955074 23 -1260.0363927542 33 1920.768168456 70 1 0 3DFACE 8 crank_full 10 16.2384831173033 20 -1271.71539123762 30 1938.17878310009 11 18.7251341196313 21 -1491.10368340178 31 1920.76939591712 12 16.2397851414271 22 -1479.42468491837 32 1938.18001056121 13 16.2397851414271 23 -1479.42468491837 33 1938.18001056121 70 1 0 3DFACE 8 crank_full 10 26.4904348219512 20 -1260.03514143184 30 2148.08890332828 11 67.6742109323337 21 -1260.03500887024 31 2129.35786586431 12 7.61498037677585 22 -1175.36497652034 32 2074.44691865133 13 7.61498037677585 23 -1175.36497652034 33 2074.44691865133 70 0 0 3DFACE 8 crank_full 10 98.5550010442582 20 -1260.03501051119 30 2096.29229492916 11 114.431484798243 21 -1260.03514610487 31 2053.92612395756 12 33.1352924626808 22 -1175.36503065183 32 2057.5665100218 13 33.1352924626808 23 -1175.36503065183 33 2057.5665100218 70 0 0 3DFACE 8 crank_full 10 33.3425753183123 20 -1175.36479585016 30 2013.1456558129 11 112.886611463429 21 -1260.03539500836 31 2008.70921842963 12 94.1555740007292 22 -1260.03571932837 32 1967.52544231974 13 94.1555740007292 23 -1260.03571932837 33 1967.52544231974 70 0 0 3DFACE 8 crank_full 10 33.1352924626808 20 -1175.36503065183 30 2057.5665100218 11 114.431484798243 21 -1260.03514610487 31 2053.92612395756 12 39.1718387267654 22 -1175.36498826062 32 2043.18320252602 13 39.1718387267654 23 -1175.36498826062 33 2043.18320252602 70 0 0 3DFACE 8 crank_full 10 -18.7264707059435 20 -1260.03538801469 30 2149.63377666445 11 -16.2399513209942 21 -1479.42383714638 31 2132.22426540144 12 -16.241253345118 22 -1271.71623900961 32 2132.22303794032 13 -16.241253345118 23 -1271.71623900961 33 2132.22303794032 70 1 0 3DFACE 8 crank_full 10 -16.2399513209942 20 -1479.42383714638 30 2132.22426540144 11 -18.7264707059435 21 -1260.03538801469 31 2149.63377666445 12 -18.7251686818196 22 -1491.10267866227 32 2149.63500412557 13 -18.7251686818196 23 -1491.10267866227 33 2149.63500412557 70 1 0 3DFACE 8 crank_full 10 -33.3439119046243 20 -1575.77542175822 30 2057.25751676867 11 -39.1731753130775 21 -1575.77561416868 31 2027.21997005555 12 -39.2459633723545 22 -1575.77553171729 32 2042.81849970453 13 -39.2459633723545 23 -1575.77553171729 33 2042.81849970453 70 1 0 3DFACE 8 crank_full 10 -39.1731753130775 20 -1575.77561416868 30 2027.21997005555 11 -33.3439119046243 21 -1575.77542175822 31 2057.25751676867 12 -33.1366290489928 22 -1575.77565655989 32 2012.83666255977 13 -33.1366290489928 23 -1575.77565655989 33 2012.83666255977 70 3 0 3DFACE 8 crank_full 10 -33.1366290489928 20 -1575.77565655989 30 2012.83666255977 11 -33.3439119046243 21 -1575.77542175822 31 2057.25751676867 12 -22.3655547436192 22 -1575.77530103172 32 2068.33881178997 13 -22.3655547436192 23 -1575.77530103172 33 2068.33881178997 70 13 0 3DFACE 8 crank_full 10 -33.1366290489928 20 -1575.77565655989 30 2012.83666255977 11 -22.3655547436192 21 -1575.77530103172 31 2068.33881178997 12 -22.0553340273792 22 -1575.77565243725 32 2001.85830539842 13 -22.0553340273792 23 -1575.77565243725 33 2001.85830539842 70 3 0 3DFACE 8 crank_full 10 -22.0553340273792 20 -1575.77565243725 30 2001.85830539842 11 -22.3655547436192 21 -1575.77530103172 31 2068.33881178997 12 -7.98224724804656 22 -1575.77518791732 32 2074.37535805364 13 -7.98224724804656 23 -1575.77518791732 33 2074.37535805364 70 13 0 3DFACE 8 crank_full 10 -22.0553340273792 20 -1575.77565243725 30 2001.85830539842 11 -7.98224724804656 21 -1575.77518791732 31 2074.37535805364 12 -7.61631696308793 22 -1575.7756024284 32 1995.95625393024 13 -7.61631696308793 23 -1575.7756024284 33 1995.95625393024 70 3 0 3DFACE 8 crank_full 10 -7.61631696308793 20 -1575.7756024284 30 1995.95625393024 11 -7.98224724804656 21 -1575.77518791732 31 2074.37535805364 12 7.61628240089973 22 -1575.77509963565 32 2074.44814611245 13 7.61628240089973 23 -1575.77509963565 33 2074.44814611245 70 13 0 3DFACE 8 crank_full 10 -7.61631696308793 20 -1575.7756024284 30 1995.95625393024 11 7.61628240089973 21 -1575.77509963565 31 2074.44814611245 12 7.98221268585839 22 -1575.77551414673 32 1996.02904198905 13 7.98221268585839 23 -1575.77551414673 33 1996.02904198905 70 3 0 3DFACE 8 crank_full 10 7.98221268585839 20 -1575.77551414673 30 1996.02904198905 11 7.61628240089973 21 -1575.77509963565 31 2074.44814611245 12 22.055299465191 22 -1575.7750496268 32 2068.54609464427 13 22.055299465191 23 -1575.7750496268 33 2068.54609464427 70 13 0 3DFACE 8 crank_full 10 7.98221268585839 20 -1575.77551414673 30 1996.02904198905 11 22.055299465191 21 -1575.7750496268 31 2068.54609464427 12 22.365520181431 22 -1575.77540103232 32 2002.06558825272 13 22.365520181431 23 -1575.77540103232 33 2002.06558825272 70 3 0 3DFACE 8 crank_full 10 22.365520181431 20 -1575.77540103232 30 2002.06558825272 11 22.055299465191 21 -1575.7750496268 31 2068.54609464427 12 33.1365944868046 22 -1575.77504550416 32 2057.56773748292 13 33.1365944868046 23 -1575.77504550416 33 2057.56773748292 70 13 0 3DFACE 8 crank_full 10 22.365520181431 20 -1575.77540103232 30 2002.06558825272 11 33.1365944868046 21 -1575.77504550416 31 2057.56773748292 12 33.3438773424362 22 -1575.77528030582 32 2013.14688327402 13 33.3438773424362 23 -1575.77528030582 33 2013.14688327402 70 3 0 3DFACE 8 crank_full 10 33.3438773424362 20 -1575.77528030582 30 2013.14688327402 11 33.1365944868046 21 -1575.77504550416 31 2057.56773748292 12 39.1731407508892 22 -1575.77508789537 32 2043.18442998714 13 39.1731407508892 23 -1575.77508789537 33 2043.18442998714 70 13 0 3DFACE 8 crank_full 10 33.3438773424362 20 -1575.77528030582 30 2013.14688327402 11 39.1731407508892 21 -1575.77508789537 31 2043.18442998714 12 39.2459288101664 22 -1575.77517034675 32 2027.58590033816 13 39.2459288101664 23 -1575.77517034675 33 2027.58590033816 70 1 0 3DFACE 8 crank_full 10 22.055299465191 20 -1575.7750496268 30 2068.54609464427 11 33.1369283457947 21 -1635.02424903062 31 2057.56805222281 12 33.1365944868046 22 -1575.77504550416 32 2057.56773748292 13 33.1365944868046 23 -1575.77504550416 33 2057.56773748292 70 1 0 3DFACE 8 crank_full 10 33.1369283457947 20 -1635.02424903062 30 2057.56805222281 11 22.055299465191 21 -1575.7750496268 31 2068.54609464427 12 22.0556333241812 22 -1635.02425315326 32 2068.54640938416 13 22.0556333241812 23 -1635.02425315326 33 2068.54640938416 70 1 0 3DFACE 8 crank_full 10 -33.3452139287482 20 -1175.36465439776 30 2057.25628930755 11 -39.2345672587327 21 1078.14537430228 31 2042.82924319699 12 -39.2472653964783 22 -1175.36454443869 32 2042.81727224341 13 -39.2472653964783 23 -1175.36454443869 33 2042.81727224341 70 1 0 3DFACE 8 crank_full 10 -39.2345672587327 20 1078.14537430228 30 2042.82924319699 11 -33.3452139287482 21 -1175.36465439776 31 2057.25628930755 12 -33.3325157910026 22 1078.14526434321 32 2057.26826026113 13 -33.3325157910026 23 1078.14526434321 33 2057.26826026113 70 1 0 3DFACE 8 crank_full 10 22.3642181573071 20 -1175.36467512367 30 2002.0643607916 11 7.99360879947956 21 1078.14535673171 31 1996.03978548152 12 22.3769162950522 22 1078.1452436173 32 2002.07633174518 13 22.3769162950522 23 1078.1452436173 33 2002.07633174518 70 1 0 3DFACE 8 crank_full 10 7.99360879947956 20 1078.14535673171 30 1996.03978548152 11 22.3642181573071 21 -1175.36467512367 31 2002.0643607916 12 7.98091066173456 22 -1175.36456200926 32 1996.02781452793 13 7.98091066173456 23 -1175.36456200926 33 1996.02781452793 70 1 0 3DFACE 8 crank_full 10 33.3552734560573 20 1078.14512289081 30 2013.15762676649 11 39.2446267860425 21 -1175.36490580924 31 2027.58467287705 12 33.3425753183123 22 -1175.36479585016 32 2013.1456558129 13 33.3425753183123 23 -1175.36479585016 33 2013.1456558129 70 1 0 3DFACE 8 crank_full 10 39.2446267860425 20 -1175.36490580924 30 2027.58467287705 11 33.3552734560573 21 1078.14512289081 31 2013.15762676649 12 39.2573249237874 22 1078.14501293173 32 2027.59664383063 13 39.2573249237874 23 1078.14501293173 33 2027.59664383063 70 1 0 3DFACE 8 crank_full 10 -94.1569105870414 20 -1491.10335208811 30 2102.87773026184 11 -112.887948049741 21 -1491.10367640812 31 2061.69395415194 12 -33.3439119046243 22 -1575.77542175822 32 2057.25751676867 13 -33.3439119046243 23 -1575.77542175822 33 2057.25751676867 70 0 0 3DFACE 8 crank_full 10 -14.9794770512274 20 1087.68122638822 30 2105.69581751223 11 13.1341822217786 21 1076.2284205692 31 2106.06734395821 12 13.1342467554502 22 1087.68106599834 32 2106.06740479624 13 13.1342467554502 23 1087.68106599834 33 2106.06740479624 70 1 0 3DFACE 8 crank_full 10 13.1341822217786 20 1076.2284205692 30 2106.06734395821 11 -14.9794770512274 21 1087.68122638822 31 2105.69581751223 12 -14.9795415848991 22 1076.22858095908 32 2105.69575667421 13 -14.9795415848991 23 1076.22858095908 33 2105.69575667421 70 1 0 3DFACE 8 crank_full 10 7.62767851452085 20 1078.14494222063 30 2074.45888960491 11 22.062391922304 21 314.384660377585 31 2068.5527809377 12 22.0666955788121 22 1078.14489221178 32 2068.55683813674 13 22.0666955788121 23 1078.14489221178 33 2068.55683813674 70 1 0 3DFACE 8 crank_full 10 22.062391922304 20 314.384660377585 30 2068.5527809377 11 7.62767851452085 21 1078.14494222063 31 2074.45888960491 12 7.61498037677585 22 -1175.36497652034 32 2074.44691865133 13 7.61498037677585 23 -1175.36497652034 33 2074.44691865133 70 13 0 3DFACE 8 crank_full 10 22.062391922304 20 314.384660377585 30 2068.5527809377 11 7.61498037677585 21 -1175.36497652034 31 2074.44691865133 12 22.0539974410672 22 -1175.36502652919 32 2068.54486718316 13 22.0539974410672 23 -1175.36502652919 33 2068.54486718316 70 1 0 3DFACE 8 crank_full 10 -7.98224724804656 20 -1575.77518791732 30 2074.37535805364 11 7.61628240089973 21 -1575.77509963565 31 2074.44814611245 12 -16.2399513209942 22 -1479.42383714638 32 2132.22426540144 13 -16.2399513209942 23 -1479.42383714638 33 2132.22426540144 70 0 0 3DFACE 8 crank_full 10 22.055299465191 20 -1575.7750496268 30 2068.54609464427 11 33.1365944868046 21 -1575.77504550416 31 2057.56773748292 12 83.421946117878 22 -1479.42351402902 32 2087.33458058465 13 83.421946117878 23 -1479.42351402902 33 2087.33458058465 70 0 0 3DFACE 8 crank_full 10 -80.0897102892153 20 -1271.715667278 30 2092.32259379428 11 -52.13252569552 21 -1479.4241116404 31 2118.62416719069 12 -52.1338277196439 22 -1271.71596451559 32 2118.62293972957 13 -52.1338277196439 23 -1271.71596451559 33 2118.62293972957 70 1 0 3DFACE 8 crank_full 10 -52.13252569552 20 -1479.4241116404 30 2118.62416719069 11 -80.0897102892153 21 -1271.715667278 31 2092.32259379428 12 -80.0884082650914 22 -1479.42440887799 32 2092.3238212554 13 -80.0884082650914 23 -1479.42440887799 33 2092.3238212554 70 1 0 3DFACE 8 crank_full 10 -67.6755475186457 20 -1491.10406254623 30 1941.04530671726 11 -57.1230683854853 21 -1271.71506781267 31 1955.11258534646 12 -67.6768495427695 22 -1260.03677189865 32 1941.04407925614 13 -67.6768495427695 23 -1260.03677189865 33 1941.04407925614 70 1 0 3DFACE 8 crank_full 10 -57.1230683854853 20 -1271.71506781267 30 1955.11258534646 11 -67.6755475186457 21 -1491.10406254623 31 1941.04530671726 12 -57.1217663613614 22 -1479.42500834332 32 1955.11381280758 13 -57.1217663613614 23 -1479.42500834332 33 1955.11381280758 70 1 0 3DFACE 8 crank_full 10 -22.366856767743 20 -1175.36477512426 30 2068.33758432885 11 -33.3325157910026 21 1078.14526434321 31 2057.26826026113 12 -33.3452139287482 22 -1175.36465439776 32 2057.25628930755 13 -33.3452139287482 23 -1175.36465439776 33 2057.25628930755 70 1 0 3DFACE 8 crank_full 10 -33.3325157910026 20 1078.14526434321 30 2057.26826026113 11 -22.366856767743 21 -1175.36477512426 31 2068.33758432885 12 -22.354158629998 22 1078.14514361671 32 2068.34955528244 13 -22.354158629998 23 1078.14514361671 33 2068.34955528244 70 1 0 3DFACE 8 crank_full 10 22.0666955788121 20 1078.14489221178 30 2068.55683813674 11 33.1352924626808 21 -1175.36503065183 31 2057.5665100218 12 33.1479906004257 22 1078.14488808915 32 2057.57848097538 13 33.1479906004257 23 1078.14488808915 33 2057.57848097538 70 1 0 3DFACE 8 crank_full 10 33.1352924626808 20 -1175.36503065183 30 2057.5665100218 11 22.0666955788121 21 1078.14489221178 31 2068.55683813674 12 22.062391922304 22 314.384660377585 32 2068.5527809377 13 22.062391922304 23 314.384660377585 33 2068.5527809377 70 1 0 3DFACE 8 crank_full 10 -70.4714553052104 20 1076.22934769458 30 2020.22202371684 11 -39.2345672587327 21 1078.14537430228 31 2042.82924319699 12 -70.8430425900572 22 1076.22920044446 32 2048.33574752358 13 -70.8430425900572 23 1076.22920044446 33 2048.33574752358 70 1 0 3DFACE 8 crank_full 10 -39.2345672587327 20 1078.14537430228 30 2042.82924319699 11 -70.4714553052104 21 1076.22934769458 31 2020.22202371684 12 -39.1617791994563 22 1078.14545675366 32 2027.23071354802 13 -39.1617791994563 23 1078.14545675366 33 2027.23071354802 70 1 0 3DFACE 8 crank_full 10 40.8337713637369 20 1076.22895631445 30 1975.83206820304 11 33.3552734560573 21 1078.14512289081 31 2013.15762676649 12 22.3769162950522 22 1078.1452436173 32 2002.07633174518 13 22.3769162950522 23 1078.1452436173 33 2002.07633174518 70 1 0 3DFACE 8 crank_full 10 33.3552734560573 20 1078.14512289081 30 2013.15762676649 11 40.8337713637369 21 1076.22895631445 31 1975.83206820304 12 60.4504242229264 22 1076.22873878012 32 1995.97422483951 13 60.4504242229264 23 1076.22873878012 33 1995.97422483951 70 1 0 3DFACE 8 crank_full 10 33.3438773424362 20 -1575.77528030582 30 2013.14688327402 11 22.365520181431 21 -1575.77540103232 31 2002.06558825272 12 52.132359515953 22 -1479.42441042435 32 1951.78010877195 13 52.132359515953 23 -1479.42441042435 33 1951.78010877195 70 0 0 3DFACE 8 crank_full 10 -39.1731753130775 20 -1575.77561416868 30 2027.21997005555 11 -114.432821384555 21 -1491.10392531161 31 2016.47704862401 12 -33.1366290489928 22 -1575.77565655989 32 2012.83666255977 13 -33.1366290489928 23 -1575.77565655989 33 2012.83666255977 70 0 0 3DFACE 8 crank_full 10 39.2501410607034 20 1087.68097416759 30 2095.65205035954 11 59.3922331640569 21 1076.22831944724 31 2076.0353366617 12 59.3922976977286 22 1087.68096487638 32 2076.03539749972 13 59.3922976977286 23 1087.68096487638 33 2076.03539749972 70 1 0 3DFACE 8 crank_full 10 59.3922331640569 20 1076.22831944724 30 2076.0353366617 11 39.2501410607034 21 1087.68097416759 31 2095.65205035954 12 39.2500765270318 22 1076.22832873845 32 2095.65198952152 13 39.2500765270318 23 1076.22832873845 33 2095.65198952152 70 1 0 3DFACE 8 crank_full 10 -22.0553340273792 20 -1575.77565243725 30 2001.85830539842 11 -83.4221122974449 21 -1479.42500803573 31 1983.06969537799 12 -57.1217663613614 22 -1479.42500834332 32 1955.11381280758 13 -57.1217663613614 23 -1479.42500834332 33 1955.11381280758 70 0 0 3DFACE 8 crank_full 10 97.0220443296732 20 -1479.4236280611 30 2051.44200620966 11 39.1731407508892 21 -1575.77508789537 31 2043.18442998714 12 39.2459288101664 22 -1575.77517034675 32 2027.58590033816 13 39.2459288101664 23 -1575.77517034675 33 2027.58590033816 70 0 0 3DFACE 8 crank_full 10 0.000316577896367365 20 -1635.02455455848 30 2035.20251476124 11 -21.0785055001976 21 -1635.02449443909 31 2068.87914953561 12 -33.3435780456342 22 -1635.02462528468 32 2057.25783150856 13 -33.3435780456342 23 -1635.02462528468 33 2057.25783150856 70 0 0 3DFACE 8 crank_full 10 7.98254654484851 20 -1635.02471767319 30 1996.02935672895 11 0.000316577896367365 21 -1635.02455455848 31 2035.20251476124 12 -7.61598310409778 22 -1635.02480595485 32 1995.95656867013 13 -7.61598310409778 23 -1635.02480595485 33 1995.95656867013 70 0 0 3DFACE 8 crank_full 10 -22.056636051503 20 -1175.36442371874 30 2001.8570779373 11 -57.1230683854853 21 -1271.71506781267 31 1955.11258534646 12 -83.4234143215687 22 -1271.71506812026 32 1983.06846791687 13 -83.4234143215687 23 -1271.71506812026 33 1983.06846791687 70 0 0 3DFACE 8 crank_full 10 -97.0222105092401 20 -1479.42489400365 30 2018.96226975299 11 -95.8528713533217 21 -1271.71539254856 31 2057.32598938986 12 -97.0235125333639 22 -1271.71518215234 32 2018.96104229187 13 -97.0235125333639 23 -1271.71518215234 33 2018.96104229187 70 1 0 3DFACE 8 crank_full 10 -95.8528713533217 20 -1271.71539254856 30 2057.32598938986 11 -97.0222105092401 21 -1479.42489400365 31 2018.96226975299 12 -95.851569329198 22 -1479.42468360743 32 2057.32721685097 13 -95.851569329198 23 -1479.42468360743 33 2057.32721685097 70 1 0 3DFACE 8 crank_full 10 0.0625974234421623 20 1105.4614427137 30 2035.21299417206 11 -19.5567568228792 21 1105.46171379563 31 2004.99346607832 12 -29.6278351413918 22 1105.46171844124 32 2014.80179250824 13 -29.6278351413918 23 1105.46171844124 33 2014.80179250824 70 0 0 3DFACE 8 crank_full 10 -7.61598310409778 20 -1635.02480595485 30 1995.95656867013 11 -22.0553340273792 21 -1575.77565243725 31 2001.85830539842 12 -7.61631696308793 22 -1575.7756024284 32 1995.95625393024 13 -7.61631696308793 23 -1575.7756024284 33 1995.95625393024 70 1 0 3DFACE 8 crank_full 10 -22.0553340273792 20 -1575.77565243725 30 2001.85830539842 11 -7.61598310409778 21 -1635.02480595485 31 1995.95656867013 12 -22.055000168389 22 -1635.02485596371 32 2001.85862013831 13 -22.055000168389 23 -1635.02485596371 33 2001.85862013831 70 1 0 3DFACE 8 crank_full 10 -112.889250073865 20 -1260.03638576054 30 2061.69272669082 11 -33.3452139287482 21 -1175.36465439776 31 2057.25628930755 12 -39.2472653964783 22 -1175.36454443869 32 2042.81727224341 13 -39.2472653964783 23 -1175.36454443869 33 2042.81727224341 70 0 0 3DFACE 8 crank_full 10 67.6742109323337 20 -1260.03500887024 30 2129.35786586431 11 57.1216001817944 21 -1479.42351372144 31 2115.29046315506 12 57.1202981576705 22 -1271.71656243456 32 2115.28923569394 13 57.1202981576705 23 -1271.71656243456 33 2115.28923569394 70 1 0 3DFACE 8 crank_full 10 57.1216001817944 20 -1479.42351372144 30 2115.29046315506 11 67.6742109323337 21 -1260.03500887024 31 2129.35786586431 12 67.6755129564576 22 -1491.10229951782 32 2129.35909332543 13 67.6755129564576 23 -1491.10229951782 33 2129.35909332543 70 1 0 3DFACE 8 crank_full 10 7.98221268585839 20 -1575.77551414673 30 1996.02904198905 11 18.7251341196313 21 -1491.10368340178 31 1920.76939591712 12 61.0913050906858 22 -1491.1033603377 32 1936.64587966987 13 61.0913050906858 23 -1491.1033603377 33 1936.64587966987 70 0 0 3DFACE 8 crank_full 10 57.1216001817944 20 -1479.42351372144 30 2115.29046315506 11 22.055299465191 21 -1575.7750496268 31 2068.54609464427 12 83.421946117878 22 -1479.42351402902 32 2087.33458058465 13 83.421946117878 23 -1479.42351402902 33 2087.33458058465 70 0 0 3DFACE 8 crank_full 10 95.8501011255072 20 -1271.71623769867 30 2013.07583165055 11 112.886611463429 21 -1260.03539500836 31 2008.70921842963 12 39.2446267860425 22 -1175.36490580924 32 2027.58467287705 13 39.2446267860425 23 -1175.36490580924 33 2027.58467287705 70 0 0 3DFACE 8 crank_full 10 83.4206440937541 20 -1271.71656212697 30 2087.33335312354 11 98.5550010442582 21 -1260.03501051119 31 2096.29229492916 12 33.1352924626808 22 -1175.36503065183 32 2057.5665100218 13 33.1352924626808 23 -1175.36503065183 33 2057.5665100218 70 0 0 3DFACE 8 crank_full 10 39.2459288101664 20 -1575.77517034675 30 2027.58590033816 11 112.887913487553 21 -1491.10268565594 31 2008.71044589075 12 95.8514031496311 22 -1479.42383845732 32 2013.07705911167 13 95.8514031496311 23 -1479.42383845732 33 2013.07705911167 70 0 0 3DFACE 8 crank_full 10 33.1365944868046 20 -1575.77504550416 30 2057.56773748292 11 98.5563030683821 21 -1491.10230115877 31 2096.29352239028 12 83.421946117878 22 -1479.42351402902 32 2087.33458058465 13 83.421946117878 23 -1479.42351402902 33 2087.33458058465 70 0 0 3DFACE 8 crank_full 10 70.8658431924901 20 1087.68118678933 30 2022.09017998252 11 70.4941913739718 21 1076.22839411006 31 2050.20384295124 12 70.8657786588185 22 1076.22854136019 32 2022.0901191445 13 70.8657786588185 23 1076.22854136019 33 2022.0901191445 70 1 0 3DFACE 8 crank_full 10 70.4941913739718 20 1076.22839411006 30 2050.20384295124 11 70.8658431924901 21 1087.68118678933 31 2022.09017998252 12 70.4942559076435 22 1087.68103953921 32 2050.20390378926 13 70.4942559076435 23 1087.68103953921 33 2050.20390378926 70 1 0 3DFACE 8 crank_full 10 -22.0553340273792 20 -1575.77565243725 30 2001.85830539842 11 -67.6755475186457 21 -1491.10406254623 31 1941.04530671726 12 -7.61631696308793 22 -1575.7756024284 32 1995.95625393024 13 -7.61631696308793 23 -1575.7756024284 33 1995.95625393024 70 0 0 3DFACE 8 crank_full 10 33.3438773424362 20 -1575.77528030582 30 2013.14688327402 11 94.1568760248532 21 -1491.10300997595 31 1967.52666978086 12 112.887913487553 22 -1491.10268565594 32 2008.71044589075 13 112.887913487553 23 -1491.10268565594 33 2008.71044589075 70 0 0 3DFACE 8 crank_full 10 -39.1744773372013 20 -1175.36446198731 30 2027.21874259443 11 -33.1295365918798 21 314.385267310674 31 2012.8433488532 12 -33.1379310731166 22 -1175.3644195961 32 2012.83543509865 13 -33.1379310731166 23 -1175.3644195961 33 2012.83543509865 70 1 0 3DFACE 8 crank_full 10 -33.1295365918798 20 314.385267310674 30 2012.8433488532 11 -39.1744773372013 21 -1175.36446198731 31 2027.21874259443 12 -33.1252329353715 22 1078.14549914487 32 2012.84740605224 13 -33.1252329353715 23 1078.14549914487 33 2012.84740605224 70 3 0 3DFACE 8 crank_full 10 -33.1252329353715 20 1078.14549914487 30 2012.84740605224 11 -39.1744773372013 21 -1175.36446198731 31 2027.21874259443 12 -39.1617791994563 22 1078.14545675366 32 2027.23071354802 13 -39.1617791994563 23 1078.14545675366 33 2027.23071354802 70 1 0 3DFACE 8 crank_full 10 -7.61631696308793 20 -1575.7756024284 30 1995.95625393024 11 -67.6755475186457 21 -1491.10406254623 31 1941.04530671726 12 -26.4917714082634 22 -1491.10392998463 32 1922.31426925329 13 -26.4917714082634 23 -1491.10392998463 33 1922.31426925329 70 0 0 3DFACE 8 crank_full 10 7.61628240089973 20 -1575.77509963565 30 2074.44814611245 11 22.0556333241812 21 -1635.02425315326 31 2068.54640938416 12 22.055299465191 22 -1575.7750496268 32 2068.54609464427 13 22.055299465191 23 -1575.7750496268 33 2068.54609464427 70 1 0 3DFACE 8 crank_full 10 22.0556333241812 20 -1635.02425315326 30 2068.54640938416 11 7.61628240089973 21 -1575.77509963565 31 2074.44814611245 12 7.61661625988982 22 -1635.02430316211 32 2074.44846085234 13 7.61661625988982 23 -1635.02430316211 33 2074.44846085234 70 1 0 3DFACE 8 crank_full 10 -39.2456295133644 20 -1635.02473524376 30 2042.81881444442 11 -33.3439119046243 21 -1575.77542175822 31 2057.25751676867 12 -39.2459633723545 22 -1575.77553171729 32 2042.81849970453 13 -39.2459633723545 23 -1575.77553171729 33 2042.81849970453 70 1 0 3DFACE 8 crank_full 10 -33.3439119046243 20 -1575.77542175822 30 2057.25751676867 11 -39.2456295133644 21 -1635.02473524376 31 2042.81881444442 12 -33.3435780456342 22 -1635.02462528468 32 2057.25783150856 13 -33.3435780456342 23 -1635.02462528468 33 2057.25783150856 70 1 0 3DFACE 8 crank_full 10 -39.1744773372013 20 -1175.36446198731 30 2027.21874259443 11 -33.1379310731166 21 -1175.3644195961 31 2012.83543509865 12 -114.43412340868 22 -1260.03663466403 32 2016.47582116289 13 -114.43412340868 23 -1260.03663466403 33 2016.47582116289 70 0 0 3DFACE 8 crank_full 10 -94.1582126111653 20 -1260.03606144053 30 2102.87650280072 11 -33.3452139287482 21 -1175.36465439776 31 2057.25628930755 12 -112.889250073865 22 -1260.03638576054 32 2061.69272669082 13 -112.889250073865 23 -1260.03638576054 33 2061.69272669082 70 0 0 3DFACE 8 crank_full 10 -16.241253345118 20 -1271.71623900961 30 2132.22303794032 11 22.1249957769614 21 -1479.42362718516 31 2131.05362422024 12 22.1236937528375 22 -1271.71644897083 32 2131.05239675912 13 22.1236937528375 23 -1271.71644897083 33 2131.05239675912 70 1 0 3DFACE 8 crank_full 10 22.1249957769614 20 -1479.42362718516 30 2131.05362422024 11 -16.241253345118 21 -1271.71623900961 31 2132.22303794032 12 -16.2399513209942 22 -1479.42383714638 32 2132.22426540144 13 -16.2399513209942 23 -1479.42383714638 33 2132.22426540144 70 1 0 3DFACE 8 crank_full 10 -22.055000168389 20 -1635.02485596371 30 2001.85862013831 11 -33.1366290489928 21 -1575.77565655989 31 2012.83666255977 12 -22.0553340273792 22 -1575.77565243725 32 2001.85830539842 13 -22.0553340273792 23 -1575.77565243725 33 2001.85830539842 70 1 0 3DFACE 8 crank_full 10 -33.1366290489928 20 -1575.77565655989 30 2012.83666255977 11 -22.055000168389 21 -1635.02485596371 31 2001.85862013831 12 -33.1362951900026 22 -1635.02486008634 32 2012.83697729966 13 -33.1362951900026 23 -1635.02486008634 33 2012.83697729966 70 1 0 3DFACE 8 crank_full 10 97.0207423055492 20 -1271.71644809489 30 2051.44077874854 11 95.8514031496311 21 -1479.42383845732 31 2013.07705911167 12 95.8501011255072 22 -1271.71623769867 32 2013.07583165055 13 95.8501011255072 23 -1271.71623769867 33 2013.07583165055 70 1 0 3DFACE 8 crank_full 10 95.8514031496311 20 -1479.42383845732 30 2013.07705911167 11 97.0207423055492 21 -1271.71644809489 31 2051.44077874854 12 97.0220443296732 22 -1479.4236280611 32 2051.44200620966 13 97.0220443296732 23 -1479.4236280611 33 2051.44200620966 70 1 0 3DFACE 8 crank_full 10 -114.432821384555 20 -1491.10392531161 30 2016.47704862401 11 -98.5563376305701 21 -1491.10406090528 31 1974.11087765241 12 -33.1366290489928 22 -1575.77565655989 32 2012.83666255977 13 -33.1366290489928 23 -1575.77565655989 33 2012.83666255977 70 0 0 3DFACE 8 crank_full 10 39.2446267860425 20 -1175.36490580924 30 2027.58467287705 11 112.886611463429 21 -1260.03539500836 31 2008.70921842963 12 33.3425753183123 22 -1175.36479585016 32 2013.1456558129 13 33.3425753183123 23 -1175.36479585016 33 2013.1456558129 70 0 0 3DFACE 8 crank_full 10 -83.4234143215687 20 -1271.71506812026 30 1983.06846791687 11 -98.5576396546941 21 -1260.0367702577 31 1974.10965019129 12 -33.1379310731166 22 -1175.3644195961 32 2012.83543509865 13 -33.1379310731166 23 -1175.3644195961 33 2012.83543509865 70 0 0 3DFACE 8 crank_full 10 -22.056636051503 20 -1175.36442371874 30 2001.8570779373 11 -67.6768495427695 21 -1260.03677189865 31 1941.04407925614 12 -57.1230683854853 22 -1271.71506781267 32 1955.11258534646 13 -57.1230683854853 23 -1271.71506781267 33 1955.11258534646 70 0 0 3DFACE 8 crank_full 10 15.0022776536605 20 1076.22916084557 30 1964.73010999387 11 -13.1113816193455 21 1087.68196666459 31 1964.35858354789 12 15.0023421873321 22 1087.68180627471 32 1964.7301708319 13 15.0023421873321 23 1087.68180627471 33 1964.7301708319 70 1 0 3DFACE 8 crank_full 10 -13.1113816193455 20 1087.68196666459 30 1964.35858354789 11 15.0022776536605 21 1076.22916084557 31 1964.73010999387 12 -13.1114461530171 22 1076.22932123545 32 1964.35852270987 13 -13.1114461530171 23 1076.22932123545 33 1964.35852270987 70 1 0 3DFACE 8 crank_full 10 -39.2472653964783 20 -1175.36454443869 30 2042.81727224341 11 -39.1617791994563 21 1078.14545675366 31 2027.23071354802 12 -39.1744773372013 22 -1175.36446198731 32 2027.21874259443 13 -39.1744773372013 23 -1175.36446198731 33 2027.21874259443 70 1 0 3DFACE 8 crank_full 10 -39.1617791994563 20 1078.14545675366 30 2027.23071354802 11 -39.2472653964783 21 -1175.36454443869 31 2042.81727224341 12 -39.2345672587327 22 1078.14537430228 32 2042.82924319699 13 -39.2345672587327 23 1078.14537430228 33 2042.82924319699 70 1 0 3DFACE 8 crank_full 10 -83.4234143215687 20 -1271.71506812026 30 1983.06846791687 11 -33.1379310731166 21 -1175.3644195961 31 2012.83543509865 12 -22.056636051503 22 -1175.36442371874 32 2001.8570779373 13 -22.056636051503 23 -1175.36442371874 33 2001.8570779373 70 0 0 3DFACE 8 crank_full 10 7.98221268585839 20 -1575.77551414673 30 1996.02904198905 11 -22.1251619565284 21 -1479.42489487959 31 1939.3506517424 12 16.2397851414271 22 -1479.42468491837 32 1938.18001056121 13 16.2397851414271 23 -1479.42468491837 33 1938.18001056121 70 0 0 3DFACE 8 crank_full 10 -7.61631696308793 20 -1575.7756024284 30 1995.95625393024 11 -22.1251619565284 21 -1479.42489487959 31 1939.3506517424 12 7.98221268585839 22 -1575.77551414673 32 1996.02904198905 13 7.98221268585839 23 -1575.77551414673 33 1996.02904198905 70 0 0 3DFACE 8 crank_full 10 98.5550010442582 20 -1260.03501051119 30 2096.29229492916 11 114.432786822367 21 -1491.10243675244 31 2053.92735141868 12 114.431484798243 22 -1260.03514610487 32 2053.92612395756 13 114.431484798243 23 -1260.03514610487 33 2053.92612395756 70 1 0 3DFACE 8 crank_full 10 114.432786822367 20 -1491.10243675244 30 2053.92735141868 11 98.5550010442582 21 -1260.03501051119 31 2096.29229492916 12 98.5563030683821 22 -1491.10230115877 32 2096.29352239028 13 98.5563030683821 23 -1491.10230115877 33 2096.29352239028 70 1 0 3DFACE 8 crank_full 10 -57.1217663613614 20 -1479.42500834332 30 1955.11381280758 11 -83.4234143215687 21 -1271.71506812026 31 1983.06846791687 12 -57.1230683854853 22 -1271.71506781267 32 1955.11258534646 13 -57.1230683854853 23 -1271.71506781267 33 1955.11258534646 70 1 0 3DFACE 8 crank_full 10 -83.4234143215687 20 -1271.71506812026 30 1983.06846791687 11 -57.1217663613614 21 -1479.42500834332 31 1955.11381280758 12 -83.4221122974449 22 -1479.42500803573 32 1983.06969537799 13 -83.4221122974449 23 -1479.42500803573 33 1983.06969537799 70 1 0 3DFACE 8 crank_full 10 16.2397851414271 20 -1479.42468491837 30 1938.18001056121 11 -22.1264639806523 21 -1271.7151812764 31 1939.34942428128 12 16.2384831173033 22 -1271.71539123762 32 1938.17878310009 13 16.2384831173033 23 -1271.71539123762 33 1938.17878310009 70 1 0 3DFACE 8 crank_full 10 -22.1264639806523 20 -1271.7151812764 30 1939.34942428128 11 16.2397851414271 21 -1479.42468491837 31 1938.18001056121 12 -22.1251619565284 22 -1479.42489487959 32 1939.3506517424 13 -22.1251619565284 23 -1479.42489487959 33 1939.3506517424 70 1 0 3DFACE 8 crank_full 10 -22.3655547436192 20 -1575.77530103172 30 2068.33881178997 11 -52.13252569552 21 -1479.4241116404 31 2118.62416719069 12 -80.0884082650914 22 -1479.42440887799 32 2092.3238212554 13 -80.0884082650914 23 -1479.42440887799 33 2092.3238212554 70 0 0 3DFACE 8 crank_full 10 97.0220443296732 20 -1479.4236280611 30 2051.44200620966 11 39.2459288101664 21 -1575.77517034675 31 2027.58590033816 12 95.8514031496311 22 -1479.42383845732 32 2013.07705911167 13 95.8514031496311 23 -1479.42383845732 33 2013.07705911167 70 0 0 3DFACE 8 crank_full 10 61.0900030665619 20 -1260.03606969012 30 1936.64465220875 11 7.98091066173456 21 -1175.36456200926 31 1996.02781452793 12 22.3642181573071 22 -1175.36467512367 32 2002.0643607916 13 22.3642181573071 23 -1175.36467512367 33 2002.0643607916 70 0 0 3DFACE 8 crank_full 10 39.2459288101664 20 -1575.77517034675 30 2027.58590033816 11 33.3438773424362 21 -1575.77528030582 31 2013.14688327402 12 112.887913487553 22 -1491.10268565594 32 2008.71044589075 13 112.887913487553 23 -1491.10268565594 33 2008.71044589075 70 0 0 3DFACE 8 crank_full 10 -33.1366290489928 20 -1575.77565655989 30 2012.83666255977 11 -83.4221122974449 21 -1479.42500803573 31 1983.06969537799 12 -22.0553340273792 22 -1575.77565243725 32 2001.85830539842 13 -22.0553340273792 23 -1575.77565243725 33 2001.85830539842 70 0 0 3DFACE 8 crank_full 10 52.1310574918292 20 -1271.71566573164 30 1951.77888131083 11 61.0913050906858 21 -1491.1033603377 31 1936.64587966987 12 61.0900030665619 22 -1260.03606969012 32 1936.64465220875 13 61.0900030665619 23 -1260.03606969012 33 1936.64465220875 70 1 0 3DFACE 8 crank_full 10 61.0913050906858 20 -1491.1033603377 30 1936.64587966987 11 52.1310574918292 21 -1271.71566573164 31 1951.77888131083 12 52.132359515953 22 -1479.42441042435 32 1951.78010877195 13 52.132359515953 23 -1479.42441042435 33 1951.78010877195 70 1 0 3DFACE 8 crank_full 10 61.0913050906858 20 -1491.1033603377 30 1936.64587966987 11 18.7238320955074 21 -1260.0363927542 31 1920.768168456 12 61.0900030665619 22 -1260.03606969012 32 1936.64465220875 13 61.0900030665619 23 -1260.03606969012 33 1936.64465220875 70 1 0 3DFACE 8 crank_full 10 18.7238320955074 20 -1260.0363927542 30 1920.768168456 11 61.0913050906858 21 -1491.1033603377 31 1936.64587966987 12 18.7251341196313 22 -1491.10368340178 32 1920.76939591712 13 18.7251341196313 23 -1491.10368340178 33 1920.76939591712 70 1 0 3DFACE 8 crank_full 10 -94.1569105870414 20 -1491.10335208811 30 2102.87773026184 11 -80.0897102892153 21 -1271.715667278 31 2092.32259379428 12 -94.1582126111653 22 -1260.03606144053 32 2102.87650280072 13 -94.1582126111653 23 -1260.03606144053 33 2102.87650280072 70 1 0 3DFACE 8 crank_full 10 -80.0897102892153 20 -1271.715667278 30 2092.32259379428 11 -94.1569105870414 21 -1491.10335208811 31 2102.87773026184 12 -80.0884082650914 22 -1479.42440887799 32 2092.3238212554 13 -80.0884082650914 23 -1479.42440887799 33 2092.3238212554 70 1 0 3DFACE 8 crank_full 10 95.8501011255072 20 -1271.71623769867 30 2013.07583165055 11 112.887913487553 21 -1491.10268565594 31 2008.71044589075 12 112.886611463429 22 -1260.03539500836 32 2008.70921842963 13 112.886611463429 23 -1260.03539500836 33 2008.70921842963 70 1 0 3DFACE 8 crank_full 10 112.887913487553 20 -1491.10268565594 30 2008.71044589075 11 95.8501011255072 21 -1271.71623769867 31 2013.07583165055 12 95.8514031496311 22 -1479.42383845732 32 2013.07705911167 13 95.8514031496311 23 -1479.42383845732 33 2013.07705911167 70 1 0 3DFACE 8 crank_full 10 -95.851569329198 20 -1479.42468360743 30 2057.32721685097 11 -97.0222105092401 21 -1479.42489400365 31 2018.96226975299 12 -39.1731753130775 22 -1575.77561416868 32 2027.21997005555 13 -39.1731753130775 23 -1575.77561416868 33 2027.21997005555 70 0 0 3DFACE 8 crank_full 10 39.2459288101664 20 -1575.77517034675 30 2027.58590033816 11 33.3442112014263 21 -1635.02448383228 31 2013.14719801391 12 33.3438773424362 22 -1575.77528030582 32 2013.14688327402 13 33.3438773424362 23 -1575.77528030582 33 2013.14688327402 70 1 0 3DFACE 8 crank_full 10 33.3442112014263 20 -1635.02448383228 30 2013.14719801391 11 39.2459288101664 21 -1575.77517034675 31 2027.58590033816 12 39.2462626691564 22 -1635.02437387321 32 2027.58621507805 13 39.2462626691564 23 -1635.02437387321 33 2027.58621507805 70 1 0 3DFACE 8 crank_full 10 40.8338358974086 20 1087.68160174359 30 1975.83212904106 11 60.4504242229264 21 1076.22873878012 31 1995.97422483951 12 40.8337713637369 22 1076.22895631445 32 1975.83206820304 13 40.8337713637369 23 1076.22895631445 33 1975.83206820304 70 1 0 3DFACE 8 crank_full 10 60.4504242229264 20 1076.22873878012 30 1995.97422483951 11 40.8338358974086 21 1087.68160174359 31 1975.83212904106 12 60.4504887565981 22 1087.68138420926 32 1995.97428567753 13 60.4504887565981 23 1087.68138420926 33 1995.97428567753 70 1 0 3DFACE 8 crank_full 10 -112.887948049741 20 -1491.10367640812 30 2061.69395415194 11 -94.1582126111653 21 -1260.03606144053 31 2102.87650280072 12 -112.889250073865 22 -1260.03638576054 32 2061.69272669082 13 -112.889250073865 23 -1260.03638576054 33 2061.69272669082 70 1 0 3DFACE 8 crank_full 10 -94.1582126111653 20 -1260.03606144053 30 2102.87650280072 11 -112.887948049741 21 -1491.10367640812 31 2061.69395415194 12 -94.1569105870414 22 -1491.10335208811 32 2102.87773026184 13 -94.1569105870414 23 -1491.10335208811 33 2102.87773026184 70 1 0 3DFACE 8 hand_half 10 1034.12663189037 20 -1016.89523242239 30 2093.59675330562 11 993.755281646064 21 -994.988599868068 31 1976.80755330562 12 1034.12663189037 22 -1016.89523242239 32 1976.80755330562 13 1034.12663189037 23 -1016.89523242239 33 1976.80755330562 70 1 0 3DFACE 8 hand_half 10 993.755281646064 20 -994.988599868068 30 1976.80755330562 11 1034.12663189037 21 -1016.89523242239 31 2093.59675330562 12 993.755281646064 22 -994.988599868068 32 2093.59675330562 13 993.755281646064 23 -994.988599868068 33 2093.59675330562 70 1 0 3DFACE 8 hand_half 10 1351.75896842588 20 -887.662995228551 30 1976.80755330562 11 1329.08826166069 21 -929.442444481353 31 2093.59675330562 12 1329.08826166069 22 -929.442444481353 32 1976.80755330562 13 1329.08826166069 23 -929.442444481353 33 1976.80755330562 70 1 0 3DFACE 8 hand_half 10 1329.08826166069 20 -929.442444481353 30 2093.59675330562 11 1351.75896842588 21 -887.662995228551 31 1976.80755330562 12 1351.75896842588 22 -887.662995228551 32 2093.59675330562 13 1351.75896842588 23 -887.662995228551 33 2093.59675330562 70 1 0 3DFACE 8 hand_half 10 1298.70239996067 20 -965.996277848705 30 2093.59675330562 11 1261.76909495036 21 -995.919752013918 31 1976.80755330562 12 1298.70239996067 22 -965.996277848705 32 1976.80755330562 13 1298.70239996067 23 -965.996277848705 33 1976.80755330562 70 1 0 3DFACE 8 hand_half 10 1261.76909495036 20 -995.919752013918 30 1976.80755330562 11 1298.70239996067 21 -965.996277848705 31 2093.59675330562 12 1261.76909495036 22 -995.919752013918 32 2093.59675330562 13 1261.76909495036 23 -995.919752013918 33 2093.59675330562 70 1 0 3DFACE 8 hand_half 10 993.755281646067 20 -887.662995228552 30 1976.80755330562 11 1034.12663189037 21 -1016.89523242239 31 1976.80755330562 12 993.755281646064 22 -994.988599868068 32 1976.80755330562 13 993.755281646064 23 -994.988599868068 33 1976.80755330562 70 1 0 3DFACE 8 hand_half 10 1034.12663189037 20 -1016.89523242239 30 1976.80755330562 11 993.755281646067 21 -887.662995228552 31 1976.80755330562 12 1351.75896842588 22 -887.662995228551 32 1976.80755330562 13 1351.75896842588 23 -887.662995228551 33 1976.80755330562 70 13 0 3DFACE 8 hand_half 10 1034.12663189037 20 -1016.89523242239 30 1976.80755330562 11 1351.75896842588 21 -887.662995228551 31 1976.80755330562 12 1079.52613622403 22 -1030.97956170564 32 1976.80755330562 13 1079.52613622403 23 -1030.97956170564 33 1976.80755330562 70 3 0 3DFACE 8 hand_half 10 1079.52613622403 20 -1030.97956170564 30 1976.80755330562 11 1351.75896842588 21 -887.662995228551 31 1976.80755330562 12 1126.80101814733 22 -1035.93626063118 32 1976.80755330562 13 1126.80101814733 23 -1035.93626063118 33 1976.80755330562 70 3 0 3DFACE 8 hand_half 10 1126.80101814733 20 -1035.93626063118 30 1976.80755330562 11 1351.75896842588 21 -887.662995228551 31 1976.80755330562 12 1174.13453046003 22 -1031.57484603905 32 1976.80755330562 13 1174.13453046003 23 -1031.57484603905 33 1976.80755330562 70 3 0 3DFACE 8 hand_half 10 1174.13453046003 20 -1031.57484603905 30 1976.80755330562 11 1351.75896842588 21 -887.662995228551 31 1976.80755330562 12 1219.70767282888 22 -1018.0629246461 32 1976.80755330562 13 1219.70767282888 23 -1018.0629246461 33 1976.80755330562 70 3 0 3DFACE 8 hand_half 10 1219.70767282888 20 -1018.0629246461 30 1976.80755330562 11 1351.75896842588 21 -887.662995228551 31 1976.80755330562 12 1261.76909495036 22 -995.919752013918 32 1976.80755330562 13 1261.76909495036 23 -995.919752013918 33 1976.80755330562 70 3 0 3DFACE 8 hand_half 10 1261.76909495036 20 -995.919752013918 30 1976.80755330562 11 1351.75896842588 21 -887.662995228551 31 1976.80755330562 12 1298.70239996067 22 -965.996277848705 32 1976.80755330562 13 1298.70239996067 23 -965.996277848705 33 1976.80755330562 70 3 0 3DFACE 8 hand_half 10 1298.70239996067 20 -965.996277848705 30 1976.80755330562 11 1351.75896842588 21 -887.662995228551 31 1976.80755330562 12 1329.08826166069 22 -929.442444481353 32 1976.80755330562 13 1329.08826166069 23 -929.442444481353 33 1976.80755330562 70 1 0 3DFACE 8 hand_half 10 1034.12663189037 20 -1016.89523242239 30 2093.59675330562 11 993.755281646067 21 -887.662995228552 31 2093.59675330562 12 993.755281646064 22 -994.988599868068 32 2093.59675330562 13 993.755281646064 23 -994.988599868068 33 2093.59675330562 70 1 0 3DFACE 8 hand_half 10 993.755281646067 20 -887.662995228552 30 2093.59675330562 11 1034.12663189037 21 -1016.89523242239 31 2093.59675330562 12 1351.75896842588 22 -887.662995228551 32 2093.59675330562 13 1351.75896842588 23 -887.662995228551 33 2093.59675330562 70 3 0 3DFACE 8 hand_half 10 1351.75896842588 20 -887.662995228551 30 2093.59675330562 11 1034.12663189037 21 -1016.89523242239 31 2093.59675330562 12 1079.52613622403 22 -1030.97956170564 32 2093.59675330562 13 1079.52613622403 23 -1030.97956170564 33 2093.59675330562 70 13 0 3DFACE 8 hand_half 10 1351.75896842588 20 -887.662995228551 30 2093.59675330562 11 1079.52613622403 21 -1030.97956170564 31 2093.59675330562 12 1126.80101814733 22 -1035.93626063118 32 2093.59675330562 13 1126.80101814733 23 -1035.93626063118 33 2093.59675330562 70 13 0 3DFACE 8 hand_half 10 1351.75896842588 20 -887.662995228551 30 2093.59675330562 11 1126.80101814733 21 -1035.93626063118 31 2093.59675330562 12 1174.13453046003 22 -1031.57484603905 32 2093.59675330562 13 1174.13453046003 23 -1031.57484603905 33 2093.59675330562 70 13 0 3DFACE 8 hand_half 10 1351.75896842588 20 -887.662995228551 30 2093.59675330562 11 1174.13453046003 21 -1031.57484603905 31 2093.59675330562 12 1219.70767282888 22 -1018.0629246461 32 2093.59675330562 13 1219.70767282888 23 -1018.0629246461 33 2093.59675330562 70 13 0 3DFACE 8 hand_half 10 1351.75896842588 20 -887.662995228551 30 2093.59675330562 11 1219.70767282888 21 -1018.0629246461 31 2093.59675330562 12 1261.76909495036 22 -995.919752013918 32 2093.59675330562 13 1261.76909495036 23 -995.919752013918 33 2093.59675330562 70 13 0 3DFACE 8 hand_half 10 1351.75896842588 20 -887.662995228551 30 2093.59675330562 11 1261.76909495036 21 -995.919752013918 31 2093.59675330562 12 1298.70239996067 22 -965.996277848705 32 2093.59675330562 13 1298.70239996067 23 -965.996277848705 33 2093.59675330562 70 13 0 3DFACE 8 hand_half 10 1351.75896842588 20 -887.662995228551 30 2093.59675330562 11 1298.70239996067 21 -965.996277848705 31 2093.59675330562 12 1329.08826166069 22 -929.442444481353 32 2093.59675330562 13 1329.08826166069 23 -929.442444481353 33 2093.59675330562 70 1 0 3DFACE 8 hand_half 10 993.755281646067 20 -887.662995228552 30 2093.59675330562 11 1351.75896842588 21 -887.662995228551 31 1976.80755330562 12 993.755281646067 22 -887.662995228552 32 1976.80755330562 13 993.755281646067 23 -887.662995228552 33 1976.80755330562 70 1 0 3DFACE 8 hand_half 10 1351.75896842588 20 -887.662995228551 30 1976.80755330562 11 993.755281646067 21 -887.662995228552 31 2093.59675330562 12 1351.75896842588 22 -887.662995228551 32 2093.59675330562 13 1351.75896842588 23 -887.662995228551 33 2093.59675330562 70 1 0 3DFACE 8 hand_half 10 1329.08826166069 20 -929.442444481353 30 1976.80755330562 11 1298.70239996067 21 -965.996277848705 31 2093.59675330562 12 1298.70239996067 22 -965.996277848705 32 1976.80755330562 13 1298.70239996067 23 -965.996277848705 33 1976.80755330562 70 1 0 3DFACE 8 hand_half 10 1298.70239996067 20 -965.996277848705 30 2093.59675330562 11 1329.08826166069 21 -929.442444481353 31 1976.80755330562 12 1329.08826166069 22 -929.442444481353 32 2093.59675330562 13 1329.08826166069 23 -929.442444481353 33 2093.59675330562 70 1 0 3DFACE 8 hand_half 10 1126.80101814733 20 -1035.93626063118 30 2093.59675330562 11 1079.52613622403 21 -1030.97956170564 31 1976.80755330562 12 1126.80101814733 22 -1035.93626063118 32 1976.80755330562 13 1126.80101814733 23 -1035.93626063118 33 1976.80755330562 70 1 0 3DFACE 8 hand_half 10 1079.52613622403 20 -1030.97956170564 30 1976.80755330562 11 1126.80101814733 21 -1035.93626063118 31 2093.59675330562 12 1079.52613622403 22 -1030.97956170564 32 2093.59675330562 13 1079.52613622403 23 -1030.97956170564 33 2093.59675330562 70 1 0 3DFACE 8 hand_half 10 1174.13453046003 20 -1031.57484603905 30 2093.59675330562 11 1126.80101814733 21 -1035.93626063118 31 1976.80755330562 12 1174.13453046003 22 -1031.57484603905 32 1976.80755330562 13 1174.13453046003 23 -1031.57484603905 33 1976.80755330562 70 1 0 3DFACE 8 hand_half 10 1126.80101814733 20 -1035.93626063118 30 1976.80755330562 11 1174.13453046003 21 -1031.57484603905 31 2093.59675330562 12 1126.80101814733 22 -1035.93626063118 32 2093.59675330562 13 1126.80101814733 23 -1035.93626063118 33 2093.59675330562 70 1 0 3DFACE 8 hand_half 10 1079.52613622403 20 -1030.97956170564 30 2093.59675330562 11 1034.12663189037 21 -1016.89523242239 31 1976.80755330562 12 1079.52613622403 22 -1030.97956170564 32 1976.80755330562 13 1079.52613622403 23 -1030.97956170564 33 1976.80755330562 70 1 0 3DFACE 8 hand_half 10 1034.12663189037 20 -1016.89523242239 30 1976.80755330562 11 1079.52613622403 21 -1030.97956170564 31 2093.59675330562 12 1034.12663189037 22 -1016.89523242239 32 2093.59675330562 13 1034.12663189037 23 -1016.89523242239 33 2093.59675330562 70 1 0 3DFACE 8 hand_half 10 1219.70767282888 20 -1018.0629246461 30 2093.59675330562 11 1174.13453046003 21 -1031.57484603905 31 1976.80755330562 12 1219.70767282888 22 -1018.0629246461 32 1976.80755330562 13 1219.70767282888 23 -1018.0629246461 33 1976.80755330562 70 1 0 3DFACE 8 hand_half 10 1174.13453046003 20 -1031.57484603905 30 1976.80755330562 11 1219.70767282888 21 -1018.0629246461 31 2093.59675330562 12 1174.13453046003 22 -1031.57484603905 32 2093.59675330562 13 1174.13453046003 23 -1031.57484603905 33 2093.59675330562 70 1 0 3DFACE 8 hand_half 10 1261.76909495036 20 -995.919752013918 30 2093.59675330562 11 1219.70767282888 21 -1018.0629246461 31 1976.80755330562 12 1261.76909495036 22 -995.919752013918 32 1976.80755330562 13 1261.76909495036 23 -995.919752013918 33 1976.80755330562 70 1 0 3DFACE 8 hand_half 10 1219.70767282888 20 -1018.0629246461 30 1976.80755330562 11 1261.76909495036 21 -995.919752013918 31 2093.59675330562 12 1219.70767282888 22 -1018.0629246461 32 2093.59675330562 13 1219.70767282888 23 -1018.0629246461 33 2093.59675330562 70 1 0 3DFACE 8 rotator_half 10 123.957534796371 20 -140.147039999996 30 1438.61018379565 11 145.758594958837 21 -327.009759999997 31 1465.17488447662 12 123.957534796373 22 -327.009759999997 32 1438.61018379565 13 123.957534796373 23 -327.009759999997 33 1438.61018379565 70 1 0 3DFACE 8 rotator_half 10 145.758594958837 20 -327.009759999997 30 1465.17488447662 11 123.957534796371 21 -140.147039999996 31 1438.61018379565 12 145.758594958835 22 -140.147039999996 32 1465.17488447662 13 145.758594958835 23 -140.147039999996 33 1465.17488447662 70 1 0 3DFACE 8 rotator_half 10 -145.758282406557 20 -327.009759999999 30 1465.17471220716 11 -123.957190847735 21 -140.147039999998 31 1438.61003729252 12 -123.957190847734 22 -327.009759999999 32 1438.61003729252 13 -123.957190847734 23 -327.009759999999 33 1438.61003729252 70 1 0 3DFACE 8 rotator_half 10 -123.957190847735 20 -140.147039999998 30 1438.61003729252 11 -145.758282406557 21 -327.009759999999 31 1465.17471220716 12 -145.758282406558 22 -140.147039999998 32 1465.17471220716 13 -145.758282406558 23 -140.147039999998 33 1465.17471220716 70 1 0 3DFACE 8 rotator_half 10 34.1997565800718 20 -140.14704 30 1734.50129493144 11 67.0852443586779 21 -327.009760000001 31 1724.52561249664 12 67.0852443586765 22 -140.14704 32 1724.52561249664 13 67.0852443586765 23 -140.14704 33 1724.52561249664 70 1 0 3DFACE 8 rotator_half 10 67.0852443586779 20 -327.009760000001 30 1724.52561249664 11 34.1997565800718 21 -140.14704 31 1734.50129493144 12 34.1997565800732 22 -327.009760000001 32 1734.50129493144 13 34.1997565800732 23 -327.009760000001 33 1734.50129493144 70 1 0 3DFACE 8 rotator_half 10 -34.1995591345617 20 -327.009759999998 30 1390.63365180083 11 -67.0850469131678 21 -140.147039999997 31 1400.60933423564 12 -34.1995591345631 22 -140.147039999997 32 1390.63365180084 13 -34.1995591345631 23 -140.147039999997 33 1390.63365180084 70 1 0 3DFACE 8 rotator_half 10 -67.0850469131678 20 -140.147039999997 30 1400.60933423564 11 -34.1995591345617 21 -327.009759999998 31 1390.63365180083 12 -67.0850469131664 22 -327.009759999998 32 1400.60933423564 13 -67.0850469131664 23 -327.009759999998 33 1400.60933423564 70 1 0 3DFACE 8 rotator_half 10 145.758594958835 20 -140.147039999996 30 1465.17488447662 11 161.958237853255 21 -327.009759999997 31 1495.48232773022 12 145.758594958837 22 -327.009759999997 32 1465.17488447662 13 145.758594958837 23 -327.009759999997 33 1465.17488447662 70 1 0 3DFACE 8 rotator_half 10 161.958237853255 20 -327.009759999997 30 1495.48232773022 11 145.758594958835 21 -140.147039999996 31 1465.17488447662 12 161.958237853253 22 -140.147039999996 32 1495.48232773022 13 161.958237853253 23 -140.147039999996 33 1495.48232773022 70 1 0 3DFACE 8 rotator_half 10 -4.87060060567757e-06 20 -140.14704 30 1737.86965702509 11 34.1997565800732 21 -327.009760000001 31 1734.50129493144 12 34.1997565800718 22 -140.14704 32 1734.50129493144 13 34.1997565800718 23 -140.14704 33 1734.50129493144 70 1 0 3DFACE 8 rotator_half 10 34.1997565800732 20 -327.009760000001 30 1734.50129493144 11 -4.87060060567757e-06 21 -140.14704 31 1737.86965702509 12 -4.87059913788501e-06 22 -327.009760000001 32 1737.86965702509 13 -4.87059913788501e-06 23 -327.009760000001 33 1737.86965702509 70 1 0 3DFACE 8 rotator_half 10 171.933879867935 20 -140.147039999998 30 1596.76733442913 11 161.958158566334 21 -327.009759999999 31 1629.65281041762 12 171.933879867937 22 -327.009759999998 32 1596.76733442913 13 171.933879867937 23 -327.009759999998 33 1596.76733442913 70 1 0 3DFACE 8 rotator_half 10 161.958158566334 20 -327.009759999999 30 1629.65281041762 11 171.933879867935 21 -140.147039999998 31 1596.76733442913 12 161.958158566332 22 -140.147039999998 32 1629.65281041762 13 161.958158566332 23 -140.147039999998 33 1629.65281041762 70 1 0 3DFACE 8 rotator_half 10 -67.0850469131664 20 -327.009759999998 30 1400.60933423564 11 -97.3924901667671 21 -140.147039999998 31 1416.80897713006 12 -67.0850469131678 22 -140.147039999997 32 1400.60933423564 13 -67.0850469131678 23 -140.147039999997 33 1400.60933423564 70 1 0 3DFACE 8 rotator_half 10 -97.3924901667671 20 -140.147039999998 30 1416.80897713006 11 -67.0850469131664 21 -327.009759999998 31 1400.60933423564 12 -97.3924901667657 22 -327.009759999998 32 1416.80897713006 13 -97.3924901667657 23 -327.009759999998 33 1416.80897713006 70 1 0 3DFACE 8 rotator_half 10 175.302282381704 20 -140.147039999997 30 1562.56757695949 11 171.933879867937 21 -327.009759999998 31 1596.76733442913 12 175.302282381706 22 -327.009759999998 32 1562.56757695949 13 175.302282381706 23 -327.009759999998 33 1562.56757695949 70 1 0 3DFACE 8 rotator_half 10 171.933879867937 20 -327.009759999998 30 1596.76733442913 11 175.302282381704 21 -140.147039999997 31 1562.56757695949 12 171.933879867935 22 -140.147039999998 32 1596.76733442913 13 171.933879867935 23 -140.147039999998 33 1596.76733442913 70 1 0 3DFACE 8 rotator_half 10 -123.957337350861 20 -327.009760000002 30 1686.52476293663 11 -145.758397513327 21 -140.147040000001 31 1659.96006225566 12 -145.758397513325 22 -327.009760000002 32 1659.96006225566 13 -145.758397513325 23 -327.009760000002 33 1659.96006225566 70 1 0 3DFACE 8 rotator_half 10 -145.758397513327 20 -140.147040000001 30 1659.96006225566 11 -123.957337350861 21 -327.009760000002 31 1686.52476293663 12 -123.957337350863 22 -140.147040000001 32 1686.52476293663 13 -123.957337350863 23 -140.147040000001 33 1686.52476293663 70 1 0 3DFACE 8 rotator_half 10 161.958158566332 20 -140.147039999998 30 1629.65281041762 11 145.758479852068 21 -327.009759999999 31 1659.96023452511 12 161.958158566334 22 -327.009759999999 32 1629.65281041762 13 161.958158566334 23 -327.009759999999 33 1629.65281041762 70 1 0 3DFACE 8 rotator_half 10 145.758479852068 20 -327.009759999999 30 1659.96023452511 11 161.958158566332 21 -140.147039999998 31 1629.65281041762 12 145.758479852067 22 -140.147039999998 32 1659.96023452511 13 145.758479852067 23 -140.147039999998 33 1659.96023452511 70 1 0 3DFACE 8 rotator_half 10 -97.3924901667657 20 -327.009759999998 30 1416.80897713006 11 -123.957190847735 21 -140.147039999998 31 1438.61003729252 12 -97.3924901667671 22 -140.147039999998 32 1416.80897713006 13 -97.3924901667671 23 -140.147039999998 33 1416.80897713006 70 1 0 3DFACE 8 rotator_half 10 -123.957190847735 20 -140.147039999998 30 1438.61003729252 11 -97.3924901667657 21 -327.009759999998 31 1416.80897713006 12 -123.957190847734 22 -327.009759999999 32 1438.61003729252 13 -123.957190847734 23 -327.009759999999 33 1438.61003729252 70 1 0 3DFACE 8 rotator_half 10 -161.958040407743 20 -327.009760000001 30 1629.65261900206 11 -171.933722842549 21 -140.14704 31 1596.76713122346 12 -171.933722842547 22 -327.009760000001 32 1596.76713122345 13 -171.933722842547 23 -327.009760000001 33 1596.76713122345 70 1 0 3DFACE 8 rotator_half 10 -171.933722842549 20 -140.14704 30 1596.76713122346 11 -161.958040407743 21 -327.009760000001 31 1629.65261900206 12 -161.958040407745 22 -140.14704 32 1629.65261900206 13 -161.958040407745 23 -140.14704 33 1629.65261900206 70 1 0 3DFACE 8 rotator_half 10 67.0852443586765 20 -140.14704 30 1724.52561249664 11 97.3926876122771 21 -327.00976 31 1708.32596960222 12 97.3926876122757 22 -140.147039999999 32 1708.32596960222 13 97.3926876122757 23 -140.147039999999 33 1708.32596960222 70 1 0 3DFACE 8 rotator_half 10 97.3926876122771 20 -327.00976 30 1708.32596960222 11 67.0852443586765 21 -140.14704 31 1724.52561249664 12 67.0852443586779 22 -327.009760000001 32 1724.52561249664 13 67.0852443586779 23 -327.009760000001 33 1724.52561249664 70 1 0 3DFACE 8 rotator_half 10 -67.0852383287284 20 -140.147040000001 30 1724.52553320972 11 -34.199762340237 21 -327.009760000002 31 1734.50125451132 12 -34.1997623402384 22 -140.147040000001 32 1734.50125451132 13 -34.1997623402384 23 -140.147040000001 33 1734.50125451132 70 1 0 3DFACE 8 rotator_half 10 -34.199762340237 20 -327.009760000002 30 1734.50125451132 11 -67.0852383287284 21 -140.147040000001 31 1724.52553320972 12 -67.085238328727 22 -327.009760000002 32 1724.52553320972 13 -67.085238328727 23 -327.009760000002 33 1724.52553320972 70 1 0 3DFACE 8 rotator_half 10 34.1999597857484 20 -327.009759999997 30 1390.63369222096 11 0.00020231610917012 21 -140.147039999996 31 1387.26528970719 12 34.199959785747 22 -140.147039999996 32 1390.63369222096 13 34.199959785747 23 -140.147039999996 33 1390.63369222096 70 1 0 3DFACE 8 rotator_half 10 0.00020231610917012 20 -140.147039999996 30 1387.26528970719 11 34.1999597857484 21 -327.009759999997 31 1390.63369222096 12 0.000202316110637912 22 -327.009759999997 32 1387.26528970719 13 0.000202316110637912 23 -327.009759999997 33 1387.26528970719 70 1 0 3DFACE 8 rotator_half 10 0.000202316110637912 20 -327.009759999997 30 1387.26528970719 11 -34.1995591345631 21 -140.147039999997 31 1390.63365180084 12 0.00020231610917012 22 -140.147039999996 32 1387.26528970719 13 0.00020231610917012 23 -140.147039999996 33 1387.26528970719 70 1 0 3DFACE 8 rotator_half 10 -34.1995591345631 20 -140.147039999997 30 1390.63365180084 11 0.000202316110637912 21 -327.009759999997 31 1387.26528970719 12 -34.1995591345617 22 -327.009759999998 32 1390.63365180083 13 -34.1995591345617 23 -327.009759999998 33 1390.63365180083 70 1 0 3DFACE 8 rotator_half 10 21.0097297891043 20 -2.03037586743449e-12 30 1702.4261702469 11 27.4505428589692 21 -140.14704 31 1692.78683069265 12 27.4505428589688 22 -2.03037586743449e-12 32 1692.78683069265 13 27.4505428589688 23 -2.03037586743449e-12 33 1692.78683069265 70 1 0 3DFACE 8 rotator_half 10 27.4505428589692 20 -140.14704 30 1692.78683069265 11 21.0097297891043 21 -2.03037586743449e-12 31 1702.4261702469 12 21.0097297891047 22 -140.14704 32 1702.4261702469 13 21.0097297891047 23 -140.14704 33 1702.4261702469 70 1 0 3DFACE 8 rotator_half 10 67.0854357742384 20 -327.009759999997 30 1400.60941352256 11 34.199959785747 21 -140.147039999996 31 1390.63369222096 12 67.085435774237 22 -140.147039999996 32 1400.60941352256 13 67.085435774237 23 -140.147039999996 33 1400.60941352256 70 1 0 3DFACE 8 rotator_half 10 34.199959785747 20 -140.147039999996 30 1390.63369222096 11 67.0854357742384 21 -327.009759999997 31 1400.60941352256 12 34.1999597857484 22 -327.009759999997 32 1390.63369222096 13 34.1999597857484 23 -327.009759999997 33 1390.63369222096 70 1 0 3DFACE 8 rotator_half 10 97.3926876122757 20 -140.147039999999 30 1708.32596960222 11 123.957388293245 21 -327.00976 31 1686.52490943975 12 123.957388293244 22 -140.147039999999 32 1686.52490943976 13 123.957388293244 23 -140.147039999999 33 1686.52490943976 70 1 0 3DFACE 8 rotator_half 10 123.957388293245 20 -327.00976 30 1686.52490943975 11 97.3926876122757 21 -140.147039999999 31 1708.32596960222 12 97.3926876122771 22 -327.00976 32 1708.32596960222 13 97.3926876122771 23 -327.00976 33 1708.32596960222 70 1 0 3DFACE 8 rotator_half 10 161.958237853253 20 -140.147039999996 30 1495.48232773022 11 171.933920288059 21 -327.009759999998 31 1528.36781550882 12 161.958237853255 22 -327.009759999997 32 1495.48232773022 13 161.958237853255 23 -327.009759999997 33 1495.48232773022 70 1 0 3DFACE 8 rotator_half 10 171.933920288059 20 -327.009759999998 30 1528.36781550882 11 161.958237853253 21 -140.147039999996 31 1495.48232773022 12 171.933920288057 22 -140.147039999997 32 1528.36781550882 13 171.933920288057 23 -140.147039999997 33 1528.36781550882 70 1 0 3DFACE 8 rotator_half 10 171.933920288057 20 -140.147039999997 30 1528.36781550882 11 175.302282381706 21 -327.009759999998 31 1562.56757695949 12 171.933920288059 22 -327.009759999998 32 1528.36781550882 13 171.933920288059 23 -327.009759999998 33 1528.36781550882 70 1 0 3DFACE 8 rotator_half 10 175.302282381706 20 -327.009759999998 30 1562.56757695949 11 171.933920288057 21 -140.147039999997 31 1528.36781550882 12 175.302282381704 22 -140.147039999997 32 1562.56757695949 13 175.302282381704 23 -140.147039999997 33 1562.56757695949 70 1 0 3DFACE 8 rotator_half 10 97.3928598817304 20 -327.009759999997 30 1416.80909223683 11 67.085435774237 21 -140.147039999996 31 1400.60941352256 12 97.3928598817289 22 -140.147039999996 32 1416.80909223683 13 97.3928598817289 23 -140.147039999996 33 1416.80909223683 70 1 0 3DFACE 8 rotator_half 10 67.085435774237 20 -140.147039999996 30 1400.60941352256 11 97.3928598817304 21 -327.009759999997 31 1416.80909223683 12 67.0854357742384 22 -327.009759999997 32 1400.60941352256 13 67.0854357742384 23 -327.009759999997 33 1400.60941352256 70 1 0 3DFACE 8 rotator_half 10 -145.758397513325 20 -327.009760000002 30 1659.96006225566 11 -161.958040407745 21 -140.14704 31 1629.65261900206 12 -161.958040407743 22 -327.009760000001 32 1629.65261900206 13 -161.958040407743 23 -327.009760000001 33 1629.65261900206 70 1 0 3DFACE 8 rotator_half 10 -161.958040407745 20 -140.14704 30 1629.65261900206 11 -145.758397513325 21 -327.009760000002 31 1659.96006225566 12 -145.758397513327 22 -140.147040000001 32 1659.96006225566 13 -145.758397513327 23 -140.147040000001 33 1659.96006225566 70 1 0 3DFACE 8 rotator_half 10 123.957534796371 20 -140.147039999996 30 1438.61018379565 11 97.3928598817304 21 -327.009759999997 31 1416.80909223683 12 97.3928598817289 22 -140.147039999996 32 1416.80909223683 13 97.3928598817289 23 -140.147039999996 33 1416.80909223683 70 1 0 3DFACE 8 rotator_half 10 97.3928598817304 20 -327.009759999997 30 1416.80909223683 11 123.957534796371 21 -140.147039999996 31 1438.61018379565 12 123.957534796373 22 -327.009759999997 32 1438.61018379565 13 123.957534796373 23 -327.009759999997 33 1438.61018379565 70 1 0 3DFACE 8 rotator_half 10 -171.933722842547 20 -327.009760000001 30 1596.76713122345 11 -175.302084936196 21 -140.14704 31 1562.56736977278 12 -175.302084936194 22 -327.009760000001 32 1562.56736977278 13 -175.302084936194 23 -327.009760000001 33 1562.56736977278 70 1 0 3DFACE 8 rotator_half 10 -175.302084936196 20 -140.14704 30 1562.56736977278 11 -171.933722842547 21 -327.009760000001 31 1596.76713122345 12 -171.933722842549 22 -140.14704 32 1596.76713122346 13 -171.933722842549 23 -140.14704 33 1596.76713122346 70 1 0 3DFACE 8 rotator_half 10 -175.302084936194 20 -327.009760000001 30 1562.56736977278 11 -171.933682422427 21 -140.147039999999 31 1528.36761230315 12 -171.933682422425 22 -327.00976 32 1528.36761230315 13 -171.933682422425 23 -327.00976 33 1528.36761230315 70 1 0 3DFACE 8 rotator_half 10 -171.933682422427 20 -140.147039999999 30 1528.36761230315 11 -175.302084936194 21 -327.009760000001 31 1562.56736977278 12 -175.302084936196 22 -140.14704 32 1562.56736977278 13 -175.302084936196 23 -140.14704 33 1562.56736977278 70 1 0 3DFACE 8 rotator_half 10 -171.933682422425 20 -327.00976 30 1528.36761230315 11 -161.957961120824 21 -140.147039999999 31 1495.48213631466 12 -161.957961120822 22 -327.00976 32 1495.48213631465 13 -161.957961120822 23 -327.00976 33 1495.48213631465 70 1 0 3DFACE 8 rotator_half 10 -161.957961120824 20 -140.147039999999 30 1495.48213631466 11 -171.933682422425 21 -327.00976 31 1528.36761230315 12 -171.933682422427 22 -140.147039999999 32 1528.36761230315 13 -171.933682422427 23 -140.147039999999 33 1528.36761230315 70 1 0 3DFACE 8 rotator_half 10 -161.957961120822 20 -327.00976 30 1495.48213631465 11 -145.758282406558 21 -140.147039999998 31 1465.17471220716 12 -145.758282406557 22 -327.009759999999 32 1465.17471220716 13 -145.758282406557 23 -327.009759999999 33 1465.17471220716 70 1 0 3DFACE 8 rotator_half 10 -145.758282406558 20 -140.147039999998 30 1465.17471220716 11 -161.957961120822 21 -327.00976 31 1495.48213631465 12 -161.957961120824 22 -140.147039999999 32 1495.48213631466 13 -161.957961120824 23 -140.147039999999 33 1495.48213631466 70 1 0 3DFACE 8 rotator_half 10 145.758479852067 20 -140.147039999998 30 1659.96023452511 11 123.957388293245 21 -327.00976 31 1686.52490943975 12 145.758479852068 22 -327.009759999999 32 1659.96023452511 13 145.758479852068 23 -327.009759999999 33 1659.96023452511 70 1 0 3DFACE 8 rotator_half 10 123.957388293245 20 -327.00976 30 1686.52490943975 11 145.758479852067 21 -140.147039999998 31 1659.96023452511 12 123.957388293244 22 -140.147039999999 32 1686.52490943976 13 123.957388293244 23 -140.147039999999 33 1686.52490943976 70 1 0 3DFACE 8 rotator_half 10 -97.3926624362203 20 -140.147040000001 30 1708.32585449545 11 -67.085238328727 21 -327.009760000002 31 1724.52553320972 12 -67.0852383287284 22 -140.147040000001 32 1724.52553320972 13 -67.0852383287284 23 -140.147040000001 33 1724.52553320972 70 1 0 3DFACE 8 rotator_half 10 -67.085238328727 20 -327.009760000002 30 1724.52553320972 11 -97.3926624362203 21 -140.147040000001 31 1708.32585449545 12 -97.3926624362189 22 -327.009760000002 32 1708.32585449545 13 -97.3926624362189 23 -327.009760000002 33 1708.32585449545 70 1 0 3DFACE 8 rotator_half 10 -123.957337350861 20 -327.009760000002 30 1686.52476293663 11 -97.3926624362203 21 -140.147040000001 31 1708.32585449545 12 -123.957337350863 22 -140.147040000001 32 1686.52476293663 13 -123.957337350863 23 -140.147040000001 33 1686.52476293663 70 1 0 3DFACE 8 rotator_half 10 -97.3926624362203 20 -140.147040000001 30 1708.32585449545 11 -123.957337350861 21 -327.009760000002 31 1686.52476293663 12 -97.3926624362189 22 -327.009760000002 32 1708.32585449545 13 -97.3926624362189 23 -327.009760000002 33 1708.32585449545 70 1 0 3DFACE 8 rotator_half 10 21.0097668453905 20 -140.14704 30 1660.40671384141 11 11.3704272911448 21 -2.03037586743449e-12 31 1653.96590077154 12 21.0097668453901 22 -1.98525640371372e-12 32 1660.40671384141 13 21.0097668453901 23 -1.98525640371372e-12 33 1660.40671384141 70 1 0 3DFACE 8 rotator_half 10 11.3704272911448 20 -2.03037586743449e-12 30 1653.96590077154 11 21.0097668453905 21 -140.14704 31 1660.40671384141 12 11.3704272911452 22 -140.14704 32 1653.96590077155 13 11.3704272911452 23 -140.14704 33 1653.96590077155 70 1 0 3DFACE 8 rotator_half 10 -11.370338645769 20 -140.14704 30 1653.96588071683 11 -21.0096895600995 21 -2.12061479487602e-12 31 1660.40667678512 12 -11.3703386457694 22 -2.07549533115525e-12 32 1653.96588071683 13 -11.3703386457694 23 -2.07549533115525e-12 33 1653.96588071683 70 1 0 3DFACE 8 rotator_half 10 -21.0096895600995 20 -2.12061479487602e-12 30 1660.40667678512 11 -11.370338645769 21 -140.14704 31 1653.96588071683 12 -21.0096895600991 22 -140.14704 32 1660.40667678512 13 -21.0096895600991 23 -140.14704 33 1660.40667678512 70 1 0 3DFACE 8 rotator_half 10 -6.0882486421221e-06 20 -2.12061479487602e-12 30 1711.12866608211 11 11.3703788747745 21 -140.14704 31 1708.8669663152 12 11.3703788747741 22 -2.07549533115525e-12 32 1708.8669663152 13 11.3703788747741 23 -2.07549533115525e-12 33 1708.8669663152 70 1 0 3DFACE 8 rotator_half 10 11.3703788747745 20 -140.14704 30 1708.8669663152 11 -6.0882486421221e-06 21 -2.12061479487602e-12 31 1711.12866608211 12 -6.08824821207721e-06 22 -140.14704 32 1711.12866608211 13 -6.08824821207721e-06 23 -140.14704 33 1711.12866608211 70 1 0 3DFACE 8 rotator_half 10 -27.4505026299636 20 -140.14704 30 1670.04601633937 11 -21.0096895600995 21 -2.12061479487602e-12 31 1660.40667678512 12 -21.0096895600991 22 -140.14704 32 1660.40667678512 13 -21.0096895600991 23 -140.14704 33 1660.40667678512 70 1 0 3DFACE 8 rotator_half 10 -21.0096895600995 20 -2.12061479487602e-12 30 1660.40667678512 11 -27.4505026299636 21 -140.14704 31 1670.04601633937 12 -27.4505026299641 22 -2.12061479487602e-12 32 1670.04601633937 13 -27.4505026299641 23 -2.12061479487602e-12 33 1670.04601633937 70 1 0 3DFACE 8 rotator_half 10 11.3703788747741 20 -2.07549533115525e-12 30 1708.8669663152 11 21.0097297891047 21 -140.14704 31 1702.4261702469 12 21.0097297891043 22 -2.03037586743449e-12 32 1702.4261702469 13 21.0097297891043 23 -2.03037586743449e-12 33 1702.4261702469 70 1 0 3DFACE 8 rotator_half 10 21.0097297891047 20 -140.14704 30 1702.4261702469 11 11.3703788747741 21 -2.07549533115525e-12 31 1708.8669663152 12 11.3703788747745 22 -140.14704 32 1708.8669663152 13 11.3703788747745 23 -140.14704 33 1708.8669663152 70 1 0 3DFACE 8 rotator_half 10 27.4505428589688 20 -2.03037586743449e-12 30 1692.78683069265 11 29.712262680597 21 -140.14704 31 1681.41644971876 12 29.7122626805966 22 -1.98525640371372e-12 32 1681.41644971876 13 29.7122626805966 23 -1.98525640371372e-12 33 1681.41644971876 70 1 0 3DFACE 8 rotator_half 10 29.712262680597 20 -140.14704 30 1681.41644971876 11 27.4505428589688 21 -2.03037586743449e-12 31 1692.78683069265 12 27.4505428589692 22 -140.14704 32 1692.78683069265 13 27.4505428589692 23 -140.14704 33 1692.78683069265 70 1 0 3DFACE 8 rotator_half 10 29.7122626805966 20 -1.98525640371372e-12 30 1681.41644971876 11 27.4505629136866 21 -140.14704 31 1670.04606475574 12 27.4505629136862 22 -1.98525640371372e-12 32 1670.04606475574 13 27.4505629136862 23 -1.98525640371372e-12 33 1670.04606475574 70 1 0 3DFACE 8 rotator_half 10 27.4505629136866 20 -140.14704 30 1670.04606475574 11 29.7122626805966 21 -1.98525640371372e-12 31 1681.41644971876 12 29.712262680597 22 -140.14704 32 1681.41644971876 13 29.712262680597 23 -140.14704 33 1681.41644971876 70 1 0 3DFACE 8 rotator_half 10 -21.0097266163854 20 -2.16573425859679e-12 30 1702.42613319061 11 -11.3703870621396 21 -140.14704 31 1708.86694626048 12 -11.37038706214 22 -2.12061479487602e-12 32 1708.86694626048 13 -11.37038706214 23 -2.12061479487602e-12 33 1708.86694626048 70 1 0 3DFACE 8 rotator_half 10 -11.3703870621396 20 -140.14704 30 1708.86694626048 11 -21.0097266163854 21 -2.16573425859679e-12 31 1702.42613319061 12 -21.009726616385 22 -140.14704 32 1702.42613319061 13 -21.009726616385 23 -140.14704 33 1702.42613319061 70 1 0 3DFACE 8 rotator_half 10 -171.933722842549 20 -140.14704 30 1596.76713122346 11 -171.933682422427 21 -140.147039999999 31 1528.36761230315 12 -175.302084936196 22 -140.14704 32 1562.56736977278 13 -175.302084936196 23 -140.14704 33 1562.56736977278 70 1 0 3DFACE 8 rotator_half 10 -171.933682422427 20 -140.147039999999 30 1528.36761230315 11 -171.933722842549 21 -140.14704 31 1596.76713122346 12 -161.958040407745 22 -140.14704 32 1629.65261900206 13 -161.958040407745 23 -140.14704 33 1629.65261900206 70 13 0 3DFACE 8 rotator_half 10 -171.933682422427 20 -140.147039999999 30 1528.36761230315 11 -161.958040407745 21 -140.14704 31 1629.65261900206 12 -161.957961120824 22 -140.147039999999 32 1495.48213631466 13 -161.957961120824 23 -140.147039999999 33 1495.48213631466 70 3 0 3DFACE 8 rotator_half 10 -161.957961120824 20 -140.147039999999 30 1495.48213631466 11 -161.958040407745 21 -140.14704 31 1629.65261900206 12 -145.758397513327 22 -140.147040000001 32 1659.96006225566 13 -145.758397513327 23 -140.147040000001 33 1659.96006225566 70 13 0 3DFACE 8 rotator_half 10 -161.957961120824 20 -140.147039999999 30 1495.48213631466 11 -145.758397513327 21 -140.147040000001 31 1659.96006225566 12 -145.758282406558 22 -140.147039999998 32 1465.17471220716 13 -145.758282406558 23 -140.147039999998 33 1465.17471220716 70 3 0 3DFACE 8 rotator_half 10 -145.758282406558 20 -140.147039999998 30 1465.17471220716 11 -145.758397513327 21 -140.147040000001 31 1659.96006225566 12 -123.957337350863 22 -140.147040000001 32 1686.52476293663 13 -123.957337350863 23 -140.147040000001 33 1686.52476293663 70 13 0 3DFACE 8 rotator_half 10 -145.758282406558 20 -140.147039999998 30 1465.17471220716 11 -123.957337350863 21 -140.147040000001 31 1686.52476293663 12 -123.957190847735 22 -140.147039999998 32 1438.61003729252 13 -123.957190847735 23 -140.147039999998 33 1438.61003729252 70 3 0 3DFACE 8 rotator_half 10 -123.957190847735 20 -140.147039999998 30 1438.61003729252 11 -123.957337350863 21 -140.147040000001 31 1686.52476293663 12 -97.3926624362203 22 -140.147040000001 32 1708.32585449545 13 -97.3926624362203 23 -140.147040000001 33 1708.32585449545 70 13 0 3DFACE 8 rotator_half 10 -123.957190847735 20 -140.147039999998 30 1438.61003729252 11 -97.3926624362203 21 -140.147040000001 31 1708.32585449545 12 -97.3924901667671 22 -140.147039999998 32 1416.80897713006 13 -97.3924901667671 23 -140.147039999998 33 1416.80897713006 70 3 0 3DFACE 8 rotator_half 10 -97.3924901667671 20 -140.147039999998 30 1416.80897713006 11 -97.3926624362203 21 -140.147040000001 31 1708.32585449545 12 -85.0224388771927 22 -140.147039999999 32 1562.56737879036 13 -85.0224388771927 23 -140.147039999999 33 1562.56737879036 70 15 0 3DFACE 8 rotator_half 10 -85.0224388771927 20 -140.147039999999 30 1562.56737879036 11 -97.3926624362203 21 -140.147040000001 31 1708.32585449545 12 -83.3887731086227 22 -140.147039999999 32 1579.15445484661 13 -83.3887731086227 23 -140.147039999999 33 1579.15445484661 70 3 0 3DFACE 8 rotator_half 10 -83.3887731086227 20 -140.147039999999 30 1579.15445484661 11 -97.3926624362203 21 -140.147040000001 31 1708.32585449545 12 -67.0852383287284 22 -140.147040000001 32 1724.52553320972 13 -67.0852383287284 23 -140.147040000001 33 1724.52553320972 70 13 0 3DFACE 8 rotator_half 10 -83.3887731086227 20 -140.147039999999 30 1579.15445484661 11 -67.0852383287284 21 -140.147040000001 31 1724.52553320972 12 -78.5505197605909 22 -140.147039999999 32 1595.10410250665 13 -78.5505197605909 23 -140.147039999999 33 1595.10410250665 70 3 0 3DFACE 8 rotator_half 10 -78.5505197605909 20 -140.147039999999 30 1595.10410250665 11 -67.0852383287284 21 -140.147040000001 31 1724.52553320972 12 -70.6936101959386 22 -140.14704 32 1609.80338575557 13 -70.6936101959386 23 -140.14704 33 1609.80338575557 70 3 0 3DFACE 8 rotator_half 10 -70.6936101959386 20 -140.14704 30 1609.80338575557 11 -67.0852383287284 21 -140.147040000001 31 1724.52553320972 12 -60.1199810430296 22 -140.14704 32 1622.68741938158 13 -60.1199810430296 23 -140.14704 33 1622.68741938158 70 3 0 3DFACE 8 rotator_half 10 -60.1199810430296 20 -140.14704 30 1622.68741938158 11 -67.0852383287284 21 -140.147040000001 31 1724.52553320972 12 -34.1997623402384 22 -140.147040000001 32 1734.50125451132 13 -34.1997623402384 23 -140.147040000001 33 1734.50125451132 70 13 0 3DFACE 8 rotator_half 10 -60.1199810430296 20 -140.14704 30 1622.68741938158 11 -34.1997623402384 21 -140.147040000001 31 1734.50125451132 12 -47.2359709404507 22 -140.14704 32 1633.26107719786 13 -47.2359709404507 23 -140.14704 33 1633.26107719786 70 3 0 3DFACE 8 rotator_half 10 -47.2359709404507 20 -140.14704 30 1633.26107719786 11 -34.1997623402384 21 -140.147040000001 31 1734.50125451132 12 -32.5367051710078 22 -140.14704 32 1641.11801946432 13 -32.5367051710078 23 -140.14704 33 1641.11801946432 70 3 0 3DFACE 8 rotator_half 10 -32.5367051710078 20 -140.14704 30 1641.11801946432 11 -34.1997623402384 21 -140.147040000001 31 1734.50125451132 12 -29.7122224515915 22 -140.14704 32 1681.41639731326 13 -29.7122224515915 23 -140.14704 33 1681.41639731326 70 15 0 3DFACE 8 rotator_half 10 -29.7122224515915 20 -140.14704 30 1681.41639731326 11 -34.1997623402384 21 -140.147040000001 31 1734.50125451132 12 -27.450522684681 22 -140.14704 32 1692.78678227628 13 -27.450522684681 23 -140.14704 33 1692.78678227628 70 3 0 3DFACE 8 rotator_half 10 -27.450522684681 20 -140.14704 30 1692.78678227628 11 -34.1997623402384 21 -140.147040000001 31 1734.50125451132 12 -4.87060060567757e-06 22 -140.14704 32 1737.86965702509 13 -4.87060060567757e-06 23 -140.14704 33 1737.86965702509 70 13 0 3DFACE 8 rotator_half 10 -27.450522684681 20 -140.14704 30 1692.78678227628 11 -4.87060060567757e-06 21 -140.14704 31 1737.86965702509 12 -21.009726616385 22 -140.14704 32 1702.42613319061 13 -21.009726616385 23 -140.14704 33 1702.42613319061 70 3 0 3DFACE 8 rotator_half 10 -21.009726616385 20 -140.14704 30 1702.42613319061 11 -4.87060060567757e-06 21 -140.14704 31 1737.86965702509 12 -11.3703870621396 22 -140.14704 32 1708.86694626048 13 -11.3703870621396 23 -140.14704 33 1708.86694626048 70 3 0 3DFACE 8 rotator_half 10 -11.3703870621396 20 -140.14704 30 1708.86694626048 11 -4.87060060567757e-06 21 -140.14704 31 1737.86965702509 12 -6.08824821207721e-06 22 -140.14704 32 1711.12866608211 13 -6.08824821207721e-06 23 -140.14704 33 1711.12866608211 70 3 0 3DFACE 8 rotator_half 10 -6.08824821207721e-06 20 -140.14704 30 1711.12866608211 11 -4.87060060567757e-06 21 -140.14704 31 1737.86965702509 12 11.3703788747745 22 -140.14704 32 1708.8669663152 13 11.3703788747745 23 -140.14704 33 1708.8669663152 70 3 0 3DFACE 8 rotator_half 10 11.3703788747745 20 -140.14704 30 1708.8669663152 11 -4.87060060567757e-06 21 -140.14704 31 1737.86965702509 12 34.1997565800718 22 -140.14704 32 1734.50129493144 13 34.1997565800718 23 -140.14704 33 1734.50129493144 70 13 0 3DFACE 8 rotator_half 10 11.3703788747745 20 -140.14704 30 1708.8669663152 11 34.1997565800718 21 -140.14704 31 1734.50129493144 12 21.0097297891047 22 -140.14704 32 1702.4261702469 13 21.0097297891047 23 -140.14704 33 1702.4261702469 70 3 0 3DFACE 8 rotator_half 10 21.0097297891047 20 -140.14704 30 1702.4261702469 11 34.1997565800718 21 -140.14704 31 1734.50129493144 12 27.4505428589692 22 -140.14704 32 1692.78683069265 13 27.4505428589692 23 -140.14704 33 1692.78683069265 70 3 0 3DFACE 8 rotator_half 10 27.4505428589692 20 -140.14704 30 1692.78683069265 11 34.1997565800718 21 -140.14704 31 1734.50129493144 12 29.712262680597 22 -140.14704 32 1681.41644971876 13 29.712262680597 23 -140.14704 33 1681.41644971876 70 3 0 3DFACE 8 rotator_half 10 29.712262680597 20 -140.14704 30 1681.41644971876 11 34.1997565800718 21 -140.14704 31 1734.50129493144 12 32.5367278632675 22 -140.147039999999 32 1641.11809184948 13 32.5367278632675 23 -140.147039999999 33 1641.11809184948 70 15 0 3DFACE 8 rotator_half 10 32.5367278632675 20 -140.147039999999 30 1641.11809184948 11 34.1997565800718 21 -140.14704 31 1734.50129493144 12 47.2360111121902 22 -140.147039999999 32 1633.26118228483 13 47.2360111121902 23 -140.147039999999 33 1633.26118228483 70 3 0 3DFACE 8 rotator_half 10 47.2360111121902 20 -140.147039999999 30 1633.26118228483 11 34.1997565800718 21 -140.14704 31 1734.50129493144 12 67.0852443586765 22 -140.14704 32 1724.52561249664 13 67.0852443586765 23 -140.14704 33 1724.52561249664 70 13 0 3DFACE 8 rotator_half 10 47.2360111121902 20 -140.147039999999 30 1633.26118228483 11 67.0852443586765 21 -140.14704 31 1724.52561249664 12 60.1200447381919 22 -140.147039999999 32 1622.68755313192 13 60.1200447381919 23 -140.147039999999 33 1622.68755313192 70 3 0 3DFACE 8 rotator_half 10 60.1200447381919 20 -140.147039999999 30 1622.68755313192 11 67.0852443586765 21 -140.14704 31 1724.52561249664 12 70.6937025544744 22 -140.147039999998 32 1609.80354302934 13 70.6937025544744 23 -140.147039999998 33 1609.80354302934 70 3 0 3DFACE 8 rotator_half 10 70.6937025544744 20 -140.147039999998 30 1609.80354302934 11 67.0852443586765 21 -140.14704 31 1724.52561249664 12 97.3926876122757 22 -140.147039999999 32 1708.32596960222 13 97.3926876122757 23 -140.147039999999 33 1708.32596960222 70 13 0 3DFACE 8 rotator_half 10 70.6937025544744 20 -140.147039999998 30 1609.80354302934 11 97.3926876122757 21 -140.147039999999 31 1708.32596960222 12 78.5506448209338 22 -140.147039999998 32 1595.1042772599 13 78.5506448209338 23 -140.147039999998 33 1595.1042772599 70 3 0 3DFACE 8 rotator_half 10 78.5506448209338 20 -140.147039999998 30 1595.1042772599 11 97.3926876122757 21 -140.147039999999 31 1708.32596960222 12 83.3889336524938 22 -140.147039999998 32 1579.15464036367 13 83.3889336524938 23 -140.147039999998 33 1579.15464036367 70 3 0 3DFACE 8 rotator_half 10 83.3889336524938 20 -140.147039999998 30 1579.15464036367 11 97.3926876122757 21 -140.147039999999 31 1708.32596960222 12 85.0226363227013 22 -140.147039999998 32 1562.56756794192 13 85.0226363227013 23 -140.147039999998 33 1562.56756794192 70 3 0 3DFACE 8 rotator_half 10 -97.3924901667671 20 -140.147039999998 30 1416.80897713006 11 -83.3887362069852 21 -140.147039999999 31 1545.98030636861 12 -67.0850469131678 22 -140.147039999997 32 1400.60933423564 13 -67.0850469131678 23 -140.147039999997 33 1400.60933423564 70 3 0 3DFACE 8 rotator_half 10 -83.3887362069852 20 -140.147039999999 30 1545.98030636861 11 -97.3924901667671 21 -140.147039999998 31 1416.80897713006 12 -85.0224388771927 22 -140.147039999999 32 1562.56737879036 13 -85.0224388771927 23 -140.147039999999 33 1562.56737879036 70 3 0 3DFACE 8 rotator_half 10 -67.0850469131678 20 -140.147039999997 30 1400.60933423564 11 -83.3887362069852 21 -140.147039999999 31 1545.98030636861 12 -78.5504473754252 22 -140.147039999999 32 1530.03066947238 13 -78.5504473754252 23 -140.147039999999 33 1530.03066947238 70 13 0 3DFACE 8 rotator_half 10 -67.0850469131678 20 -140.147039999997 30 1400.60933423564 11 -78.5504473754252 21 -140.147039999999 31 1530.03066947238 12 -70.6935051089658 22 -140.147039999998 32 1515.33140370293 13 -70.6935051089658 23 -140.147039999998 33 1515.33140370293 70 13 0 3DFACE 8 rotator_half 10 -67.0850469131678 20 -140.147039999997 30 1400.60933423564 11 -70.6935051089658 21 -140.147039999998 31 1515.33140370293 12 -60.1198472926833 22 -140.147039999998 32 1502.44739360036 13 -60.1198472926833 23 -140.147039999998 33 1502.44739360036 70 13 0 3DFACE 8 rotator_half 10 -67.0850469131678 20 -140.147039999997 30 1400.60933423564 11 -60.1198472926833 21 -140.147039999998 31 1502.44739360036 12 -34.1995591345631 22 -140.147039999997 32 1390.63365180084 13 -34.1995591345631 23 -140.147039999997 33 1390.63365180084 70 3 0 3DFACE 8 rotator_half 10 -34.1995591345631 20 -140.147039999997 30 1390.63365180084 11 -60.1198472926833 21 -140.147039999998 31 1502.44739360036 12 -47.2358136666817 22 -140.147039999998 32 1491.87376444745 13 -47.2358136666817 23 -140.147039999998 33 1491.87376444745 70 13 0 3DFACE 8 rotator_half 10 -34.1995591345631 20 -140.147039999997 30 1390.63365180084 11 -47.2358136666817 21 -140.147039999998 31 1491.87376444745 12 -32.5365304177589 22 -140.147039999998 32 1484.01685488279 13 -32.5365304177589 23 -140.147039999998 33 1484.01685488279 70 13 0 3DFACE 8 rotator_half 10 -34.1995591345631 20 -140.147039999997 30 1390.63365180084 11 -32.5365304177589 21 -140.147039999998 31 1484.01685488279 12 0.00020231610917012 22 -140.147039999996 32 1387.26528970719 13 0.00020231610917012 23 -140.147039999996 33 1387.26528970719 70 3 0 3DFACE 8 rotator_half 10 0.00020231610917012 20 -140.147039999996 30 1387.26528970719 11 -32.5365304177589 21 -140.147039999998 31 1484.01685488279 12 -16.586882757718 22 -140.147039999997 32 1479.17860153476 13 -16.586882757718 23 -140.147039999997 33 1479.17860153476 70 13 0 3DFACE 8 rotator_half 10 0.00020231610917012 20 -140.147039999996 30 1387.26528970719 11 -16.586882757718 21 -140.147039999997 31 1479.17860153476 12 0.000193298531099362 22 -140.147039999997 32 1477.54493576619 13 0.000193298531099362 23 -140.147039999997 33 1477.54493576619 70 13 0 3DFACE 8 rotator_half 10 0.00020231610917012 20 -140.147039999996 30 1387.26528970719 11 0.000193298531099362 21 -140.147039999997 31 1477.54493576619 12 16.5872657202861 22 -140.147039999997 32 1479.1786384364 13 16.5872657202861 23 -140.147039999997 33 1479.1786384364 70 13 0 3DFACE 8 rotator_half 10 0.00020231610917012 20 -140.147039999996 30 1387.26528970719 11 16.5872657202861 21 -140.147039999997 31 1479.1786384364 12 34.199959785747 22 -140.147039999996 32 1390.63369222096 13 34.199959785747 23 -140.147039999996 33 1390.63369222096 70 3 0 3DFACE 8 rotator_half 10 34.199959785747 20 -140.147039999996 30 1390.63369222096 11 16.5872657202861 21 -140.147039999997 31 1479.1786384364 12 32.5369026165164 22 -140.147039999997 32 1484.01692726796 13 32.5369026165164 23 -140.147039999997 33 1484.01692726796 70 13 0 3DFACE 8 rotator_half 10 34.199959785747 20 -140.147039999996 30 1390.63369222096 11 32.5369026165164 21 -140.147039999997 31 1484.01692726796 12 47.2361683859592 22 -140.147039999997 32 1491.87386953442 13 47.2361683859592 23 -140.147039999997 33 1491.87386953442 70 13 0 3DFACE 8 rotator_half 10 34.199959785747 20 -140.147039999996 30 1390.63369222096 11 47.2361683859592 21 -140.147039999997 31 1491.87386953442 12 67.085435774237 22 -140.147039999996 32 1400.60941352256 13 67.085435774237 23 -140.147039999996 33 1400.60941352256 70 3 0 3DFACE 8 rotator_half 10 67.085435774237 20 -140.147039999996 30 1400.60941352256 11 47.2361683859592 21 -140.147039999997 31 1491.87386953442 12 60.1201784885382 22 -140.147039999997 32 1502.4475273507 13 60.1201784885382 23 -140.147039999997 33 1502.4475273507 70 13 0 3DFACE 8 rotator_half 10 67.085435774237 20 -140.147039999996 30 1400.60941352256 11 60.1201784885382 21 -140.147039999997 31 1502.4475273507 12 70.6938076414472 22 -140.147039999997 32 1515.3315609767 13 70.6938076414472 23 -140.147039999997 33 1515.3315609767 70 13 0 3DFACE 8 rotator_half 10 67.085435774237 20 -140.147039999996 30 1400.60941352256 11 70.6938076414472 21 -140.147039999997 31 1515.3315609767 12 97.3928598817289 22 -140.147039999996 32 1416.80909223683 13 97.3928598817289 23 -140.147039999996 33 1416.80909223683 70 3 0 3DFACE 8 rotator_half 10 97.3928598817289 20 -140.147039999996 30 1416.80909223683 11 70.6938076414472 21 -140.147039999997 31 1515.3315609767 12 78.5507172060996 22 -140.147039999997 32 1530.03084422563 13 78.5507172060996 23 -140.147039999997 33 1530.03084422563 70 13 0 3DFACE 8 rotator_half 10 97.3928598817289 20 -140.147039999996 30 1416.80909223683 11 78.5507172060996 21 -140.147039999997 31 1530.03084422563 12 83.3889705541313 22 -140.147039999997 32 1545.98049188567 13 83.3889705541313 23 -140.147039999997 33 1545.98049188567 70 13 0 3DFACE 8 rotator_half 10 97.3928598817289 20 -140.147039999996 30 1416.80909223683 11 83.3889705541313 21 -140.147039999997 31 1545.98049188567 12 85.0226363227013 22 -140.147039999998 32 1562.56756794192 13 85.0226363227013 23 -140.147039999998 33 1562.56756794192 70 13 0 3DFACE 8 rotator_half 10 97.3928598817289 20 -140.147039999996 30 1416.80909223683 11 85.0226363227013 21 -140.147039999998 31 1562.56756794192 12 97.3926876122757 22 -140.147039999999 32 1708.32596960222 13 97.3926876122757 23 -140.147039999999 33 1708.32596960222 70 15 0 3DFACE 8 rotator_half 10 97.3928598817289 20 -140.147039999996 30 1416.80909223683 11 97.3926876122757 21 -140.147039999999 31 1708.32596960222 12 123.957388293244 22 -140.147039999999 32 1686.52490943976 13 123.957388293244 23 -140.147039999999 33 1686.52490943976 70 13 0 3DFACE 8 rotator_half 10 97.3928598817289 20 -140.147039999996 30 1416.80909223683 11 123.957388293244 21 -140.147039999999 31 1686.52490943976 12 123.957534796371 22 -140.147039999996 32 1438.61018379565 13 123.957534796371 23 -140.147039999996 33 1438.61018379565 70 3 0 3DFACE 8 rotator_half 10 123.957534796371 20 -140.147039999996 30 1438.61018379565 11 123.957388293244 21 -140.147039999999 31 1686.52490943976 12 145.758479852067 22 -140.147039999998 32 1659.96023452511 13 145.758479852067 23 -140.147039999998 33 1659.96023452511 70 13 0 3DFACE 8 rotator_half 10 123.957534796371 20 -140.147039999996 30 1438.61018379565 11 145.758479852067 21 -140.147039999998 31 1659.96023452511 12 145.758594958835 22 -140.147039999996 32 1465.17488447662 13 145.758594958835 23 -140.147039999996 33 1465.17488447662 70 3 0 3DFACE 8 rotator_half 10 145.758594958835 20 -140.147039999996 30 1465.17488447662 11 145.758479852067 21 -140.147039999998 31 1659.96023452511 12 161.958158566332 22 -140.147039999998 32 1629.65281041762 13 161.958158566332 23 -140.147039999998 33 1629.65281041762 70 13 0 3DFACE 8 rotator_half 10 145.758594958835 20 -140.147039999996 30 1465.17488447662 11 161.958158566332 21 -140.147039999998 31 1629.65281041762 12 161.958237853253 22 -140.147039999996 32 1495.48232773022 13 161.958237853253 23 -140.147039999996 33 1495.48232773022 70 3 0 3DFACE 8 rotator_half 10 161.958237853253 20 -140.147039999996 30 1495.48232773022 11 161.958158566332 21 -140.147039999998 31 1629.65281041762 12 171.933879867935 22 -140.147039999998 32 1596.76733442913 13 171.933879867935 23 -140.147039999998 33 1596.76733442913 70 13 0 3DFACE 8 rotator_half 10 161.958237853253 20 -140.147039999996 30 1495.48232773022 11 171.933879867935 21 -140.147039999998 31 1596.76733442913 12 171.933920288057 22 -140.147039999997 32 1528.36781550882 13 171.933920288057 23 -140.147039999997 33 1528.36781550882 70 3 0 3DFACE 8 rotator_half 10 171.933920288057 20 -140.147039999997 30 1528.36781550882 11 171.933879867935 21 -140.147039999998 31 1596.76733442913 12 175.302282381704 22 -140.147039999997 32 1562.56757695949 13 175.302282381704 23 -140.147039999997 33 1562.56757695949 70 1 0 3DFACE 8 rotator_half 10 -32.5367051710078 20 -140.14704 30 1641.11801946432 11 -27.4505026299636 21 -140.14704 31 1670.04601633937 12 -16.5870682747775 22 -140.14704 32 1645.95630829588 13 -16.5870682747775 23 -140.14704 33 1645.95630829588 70 3 0 3DFACE 8 rotator_half 10 -27.4505026299636 20 -140.14704 30 1670.04601633937 11 -32.5367051710078 21 -140.14704 31 1641.11801946432 12 -29.7122224515915 22 -140.14704 32 1681.41639731326 13 -29.7122224515915 23 -140.14704 33 1681.41639731326 70 3 0 3DFACE 8 rotator_half 10 -16.5870682747775 20 -140.14704 30 1645.95630829588 11 -27.4505026299636 21 -140.14704 31 1670.04601633937 12 -21.0096895600991 22 -140.14704 32 1660.40667678512 13 -21.0096895600991 23 -140.14704 33 1660.40667678512 70 13 0 3DFACE 8 rotator_half 10 -16.5870682747775 20 -140.14704 30 1645.95630829588 11 -21.0096895600991 21 -140.14704 31 1660.40667678512 12 -11.370338645769 22 -140.14704 32 1653.96588071683 13 -11.370338645769 23 -140.14704 33 1653.96588071683 70 13 0 3DFACE 8 rotator_half 10 -16.5870682747775 20 -140.14704 30 1645.95630829588 11 -11.370338645769 21 -140.14704 31 1653.96588071683 12 4.14697744393067e-06 22 -140.147039999999 32 1647.59001096608 13 4.14697744393067e-06 23 -140.147039999999 33 1647.59001096608 70 3 0 3DFACE 8 rotator_half 10 4.14697744393067e-06 20 -140.147039999999 30 1647.59001096608 11 -11.370338645769 21 -140.14704 31 1653.96588071683 12 4.63172537816581e-05 22 -140.14704 32 1651.70418094992 13 4.63172537816581e-05 23 -140.14704 33 1651.70418094992 70 13 0 3DFACE 8 rotator_half 10 4.14697744393067e-06 20 -140.147039999999 30 1647.59001096608 11 4.63172537816581e-05 21 -140.14704 31 1651.70418094992 12 16.5870802032265 22 -140.147039999999 32 1645.95634519751 13 16.5870802032265 23 -140.147039999999 33 1645.95634519751 70 3 0 3DFACE 8 rotator_half 10 16.5870802032265 20 -140.147039999999 30 1645.95634519751 11 4.63172537816581e-05 21 -140.14704 31 1651.70418094992 12 11.3704272911452 22 -140.14704 32 1653.96590077155 13 11.3704272911452 23 -140.14704 33 1653.96590077155 70 13 0 3DFACE 8 rotator_half 10 16.5870802032265 20 -140.147039999999 30 1645.95634519751 11 11.3704272911452 21 -140.14704 31 1653.96590077155 12 21.0097668453905 22 -140.14704 32 1660.40671384141 13 21.0097668453905 23 -140.14704 33 1660.40671384141 70 13 0 3DFACE 8 rotator_half 10 16.5870802032265 20 -140.147039999999 30 1645.95634519751 11 21.0097668453905 21 -140.14704 31 1660.40671384141 12 32.5367278632675 22 -140.147039999999 32 1641.11809184948 13 32.5367278632675 23 -140.147039999999 33 1641.11809184948 70 3 0 3DFACE 8 rotator_half 10 32.5367278632675 20 -140.147039999999 30 1641.11809184948 11 21.0097668453905 21 -140.14704 31 1660.40671384141 12 27.4505629136866 22 -140.14704 32 1670.04606475574 13 27.4505629136866 23 -140.14704 33 1670.04606475574 70 13 0 3DFACE 8 rotator_half 10 32.5367278632675 20 -140.147039999999 30 1641.11809184948 11 27.4505629136866 21 -140.14704 31 1670.04606475574 12 29.712262680597 22 -140.14704 32 1681.41644971876 13 29.712262680597 23 -140.14704 33 1681.41644971876 70 13 0 3DFACE 8 rotator_half 10 -34.1997623402384 20 -140.147040000001 30 1734.50125451132 11 -4.87059913788501e-06 21 -327.009760000001 31 1737.86965702509 12 -4.87060060567757e-06 22 -140.14704 32 1737.86965702509 13 -4.87060060567757e-06 23 -140.14704 33 1737.86965702509 70 1 0 3DFACE 8 rotator_half 10 -4.87059913788501e-06 20 -327.009760000001 30 1737.86965702509 11 -34.1997623402384 21 -140.147040000001 31 1734.50125451132 12 -34.199762340237 22 -327.009760000002 32 1734.50125451132 13 -34.199762340237 23 -327.009760000002 33 1734.50125451132 70 1 0 3DFACE 8 rotator_half 10 -70.6935051089646 20 -301.609759999999 30 1515.33140370293 11 -60.1198472926819 21 -327.009759999999 31 1502.44739360035 12 -60.1198472926821 22 -301.609759999999 32 1502.44739360035 13 -60.1198472926821 23 -301.609759999999 33 1502.44739360035 70 1 0 3DFACE 8 rotator_half 10 -60.1198472926819 20 -327.009759999999 30 1502.44739360035 11 -70.6935051089646 21 -301.609759999999 31 1515.33140370293 12 -70.6935051089644 22 -327.009759999999 32 1515.33140370293 13 -70.6935051089644 23 -327.009759999999 33 1515.33140370293 70 1 0 3DFACE 8 rotator_half 10 -83.3887362069839 20 -301.60976 30 1545.98030636861 11 -83.3887731086215 21 -301.60976 31 1579.15445484661 12 -85.0224388771915 22 -301.60976 32 1562.56737879036 13 -85.0224388771915 23 -301.60976 33 1562.56737879036 70 1 0 3DFACE 8 rotator_half 10 -83.3887731086215 20 -301.60976 30 1579.15445484661 11 -83.3887362069839 21 -301.60976 31 1545.98030636861 12 -78.5505197605897 22 -301.60976 32 1595.10410250665 13 -78.5505197605897 23 -301.60976 33 1595.10410250665 70 3 0 3DFACE 8 rotator_half 10 -78.5505197605897 20 -301.60976 30 1595.10410250665 11 -83.3887362069839 21 -301.60976 31 1545.98030636861 12 -78.5504473754239 22 -301.60976 32 1530.03066947238 13 -78.5504473754239 23 -301.60976 33 1530.03066947238 70 13 0 3DFACE 8 rotator_half 10 -78.5505197605897 20 -301.60976 30 1595.10410250665 11 -78.5504473754239 21 -301.60976 31 1530.03066947238 12 -70.6936101959373 22 -301.60976 32 1609.80338575557 13 -70.6936101959373 23 -301.60976 33 1609.80338575557 70 3 0 3DFACE 8 rotator_half 10 -70.6936101959373 20 -301.60976 30 1609.80338575557 11 -78.5504473754239 21 -301.60976 31 1530.03066947238 12 -70.6935051089646 22 -301.609759999999 32 1515.33140370293 13 -70.6935051089646 23 -301.609759999999 33 1515.33140370293 70 13 0 3DFACE 8 rotator_half 10 -70.6936101959373 20 -301.60976 30 1609.80338575557 11 -70.6935051089646 21 -301.609759999999 31 1515.33140370293 12 -60.1199810430283 22 -301.609760000001 32 1622.68741938157 13 -60.1199810430283 23 -301.609760000001 33 1622.68741938157 70 3 0 3DFACE 8 rotator_half 10 -60.1199810430283 20 -301.609760000001 30 1622.68741938157 11 -70.6935051089646 21 -301.609759999999 31 1515.33140370293 12 -60.1198472926821 22 -301.609759999999 32 1502.44739360035 13 -60.1198472926821 23 -301.609759999999 33 1502.44739360035 70 13 0 3DFACE 8 rotator_half 10 -60.1199810430283 20 -301.609760000001 30 1622.68741938157 11 -60.1198472926821 21 -301.609759999999 31 1502.44739360035 12 -47.2359709404494 22 -301.609760000001 32 1633.26107719786 13 -47.2359709404494 23 -301.609760000001 33 1633.26107719786 70 3 0 3DFACE 8 rotator_half 10 -47.2359709404494 20 -301.609760000001 30 1633.26107719786 11 -60.1198472926821 21 -301.609759999999 31 1502.44739360035 12 -47.2358136666804 22 -301.609759999999 32 1491.87376444745 13 -47.2358136666804 23 -301.609759999999 33 1491.87376444745 70 13 0 3DFACE 8 rotator_half 10 -47.2359709404494 20 -301.609760000001 30 1633.26107719786 11 -47.2358136666804 21 -301.609759999999 31 1491.87376444745 12 -32.5367051710066 22 -301.609760000001 32 1641.11801946432 13 -32.5367051710066 23 -301.609760000001 33 1641.11801946432 70 3 0 3DFACE 8 rotator_half 10 -32.5367051710066 20 -301.609760000001 30 1641.11801946432 11 -47.2358136666804 21 -301.609759999999 31 1491.87376444745 12 -32.5365304177576 22 -301.609759999999 32 1484.01685488279 13 -32.5365304177576 23 -301.609759999999 33 1484.01685488279 70 13 0 3DFACE 8 rotator_half 10 -32.5367051710066 20 -301.609760000001 30 1641.11801946432 11 -32.5365304177576 21 -301.609759999999 31 1484.01685488279 12 -16.5870682747763 22 -301.60976 32 1645.95630829588 13 -16.5870682747763 23 -301.60976 33 1645.95630829588 70 3 0 3DFACE 8 rotator_half 10 -16.5870682747763 20 -301.60976 30 1645.95630829588 11 -32.5365304177576 21 -301.609759999999 31 1484.01685488279 12 -16.5868827577167 22 -301.609759999998 32 1479.17860153476 13 -16.5868827577167 23 -301.609759999998 33 1479.17860153476 70 13 0 3DFACE 8 rotator_half 10 -16.5870682747763 20 -301.60976 30 1645.95630829588 11 -16.5868827577167 21 -301.609759999998 31 1479.17860153476 12 4.14697870727565e-06 22 -301.60976 32 1647.59001096608 13 4.14697870727565e-06 23 -301.60976 33 1647.59001096608 70 3 0 3DFACE 8 rotator_half 10 4.14697870727565e-06 20 -301.60976 30 1647.59001096608 11 -16.5868827577167 21 -301.609759999998 31 1479.17860153476 12 0.000193298532362707 22 -301.609759999998 32 1477.54493576619 13 0.000193298532362707 23 -301.609759999998 33 1477.54493576619 70 13 0 3DFACE 8 rotator_half 10 4.14697870727565e-06 20 -301.60976 30 1647.59001096608 11 0.000193298532362707 21 -301.609759999998 31 1477.54493576619 12 16.5870802032278 22 -301.60976 32 1645.95634519751 13 16.5870802032278 23 -301.60976 33 1645.95634519751 70 3 0 3DFACE 8 rotator_half 10 16.5870802032278 20 -301.60976 30 1645.95634519751 11 0.000193298532362707 21 -301.609759999998 31 1477.54493576619 12 16.5872657202874 22 -301.609759999998 32 1479.1786384364 13 16.5872657202874 23 -301.609759999998 33 1479.1786384364 70 13 0 3DFACE 8 rotator_half 10 16.5870802032278 20 -301.60976 30 1645.95634519751 11 16.5872657202874 21 -301.609759999998 31 1479.1786384364 12 32.5367278632687 22 -301.60976 32 1641.11809184948 13 32.5367278632687 23 -301.60976 33 1641.11809184948 70 3 0 3DFACE 8 rotator_half 10 32.5367278632687 20 -301.60976 30 1641.11809184948 11 16.5872657202874 21 -301.609759999998 31 1479.1786384364 12 32.5369026165177 22 -301.609759999998 32 1484.01692726796 13 32.5369026165177 23 -301.609759999998 33 1484.01692726796 70 13 0 3DFACE 8 rotator_half 10 32.5367278632687 20 -301.60976 30 1641.11809184948 11 32.5369026165177 21 -301.609759999998 31 1484.01692726796 12 47.2360111121915 22 -301.60976 32 1633.26118228483 13 47.2360111121915 23 -301.60976 33 1633.26118228483 70 3 0 3DFACE 8 rotator_half 10 47.2360111121915 20 -301.60976 30 1633.26118228483 11 32.5369026165177 21 -301.609759999998 31 1484.01692726796 12 47.2361683859605 22 -301.609759999998 32 1491.87386953442 13 47.2361683859605 23 -301.609759999998 33 1491.87386953442 70 13 0 3DFACE 8 rotator_half 10 47.2360111121915 20 -301.60976 30 1633.26118228483 11 47.2361683859605 21 -301.609759999998 31 1491.87386953442 12 60.1200447381932 22 -301.60976 32 1622.68755313192 13 60.1200447381932 23 -301.60976 33 1622.68755313192 70 3 0 3DFACE 8 rotator_half 10 60.1200447381932 20 -301.60976 30 1622.68755313192 11 47.2361683859605 21 -301.609759999998 31 1491.87386953442 12 60.1201784885394 22 -301.609759999998 32 1502.4475273507 13 60.1201784885394 23 -301.609759999998 33 1502.4475273507 70 13 0 3DFACE 8 rotator_half 10 60.1200447381932 20 -301.60976 30 1622.68755313192 11 60.1201784885394 21 -301.609759999998 31 1502.4475273507 12 70.6937025544757 22 -301.609759999999 32 1609.80354302934 13 70.6937025544757 23 -301.609759999999 33 1609.80354302934 70 3 0 3DFACE 8 rotator_half 10 70.6937025544757 20 -301.609759999999 30 1609.80354302934 11 60.1201784885394 21 -301.609759999998 31 1502.4475273507 12 70.6938076414485 22 -301.609759999998 32 1515.3315609767 13 70.6938076414485 23 -301.609759999998 33 1515.3315609767 70 13 0 3DFACE 8 rotator_half 10 70.6937025544757 20 -301.609759999999 30 1609.80354302934 11 70.6938076414485 21 -301.609759999998 31 1515.3315609767 12 78.550644820935 22 -301.609759999999 32 1595.1042772599 13 78.550644820935 23 -301.609759999999 33 1595.1042772599 70 3 0 3DFACE 8 rotator_half 10 78.550644820935 20 -301.609759999999 30 1595.1042772599 11 70.6938076414485 21 -301.609759999998 31 1515.3315609767 12 78.5507172061008 22 -301.609759999998 32 1530.03084422562 13 78.5507172061008 23 -301.609759999998 33 1530.03084422562 70 13 0 3DFACE 8 rotator_half 10 78.550644820935 20 -301.609759999999 30 1595.1042772599 11 78.5507172061008 21 -301.609759999998 31 1530.03084422562 12 83.388933652495 22 -301.609759999999 32 1579.15464036367 13 83.388933652495 23 -301.609759999999 33 1579.15464036367 70 3 0 3DFACE 8 rotator_half 10 83.388933652495 20 -301.609759999999 30 1579.15464036367 11 78.5507172061008 21 -301.609759999998 31 1530.03084422562 12 83.3889705541326 22 -301.609759999998 32 1545.98049188567 13 83.3889705541326 23 -301.609759999998 33 1545.98049188567 70 13 0 3DFACE 8 rotator_half 10 83.388933652495 20 -301.609759999999 30 1579.15464036367 11 83.3889705541326 21 -301.609759999998 31 1545.98049188567 12 85.0226363227026 22 -301.609759999999 32 1562.56756794191 13 85.0226363227026 23 -301.609759999999 33 1562.56756794191 70 1 0 3DFACE 8 rotator_half 10 -83.3887362069839 20 -301.60976 30 1545.98030636861 11 -78.5504473754237 21 -327.00976 31 1530.03066947238 12 -78.5504473754239 22 -301.60976 32 1530.03066947238 13 -78.5504473754239 23 -301.60976 33 1530.03066947238 70 1 0 3DFACE 8 rotator_half 10 -78.5504473754237 20 -327.00976 30 1530.03066947238 11 -83.3887362069839 21 -301.60976 31 1545.98030636861 12 -83.3887362069838 22 -327.00976 32 1545.98030636861 13 -83.3887362069838 23 -327.00976 33 1545.98030636861 70 1 0 3DFACE 8 rotator_half 10 -47.2359709404492 20 -327.009760000001 30 1633.26107719786 11 -60.1199810430283 21 -301.609760000001 31 1622.68741938157 12 -47.2359709404494 22 -301.609760000001 32 1633.26107719786 13 -47.2359709404494 23 -301.609760000001 33 1633.26107719786 70 1 0 3DFACE 8 rotator_half 10 -60.1199810430283 20 -301.609760000001 30 1622.68741938157 11 -47.2359709404492 21 -327.009760000001 31 1633.26107719786 12 -60.1199810430281 22 -327.009760000001 32 1622.68741938157 13 -60.1199810430281 23 -327.009760000001 33 1622.68741938157 70 1 0 3DFACE 8 rotator_half 10 -85.0224388771915 20 -301.60976 30 1562.56737879036 11 -83.3887362069838 21 -327.00976 31 1545.98030636861 12 -83.3887362069839 22 -301.60976 32 1545.98030636861 13 -83.3887362069839 23 -301.60976 33 1545.98030636861 70 1 0 3DFACE 8 rotator_half 10 -83.3887362069838 20 -327.00976 30 1545.98030636861 11 -85.0224388771915 21 -301.60976 31 1562.56737879036 12 -85.0224388771913 22 -327.00976 32 1562.56737879036 13 -85.0224388771913 23 -327.00976 33 1562.56737879036 70 1 0 3DFACE 8 rotator_half 10 -32.5367051710064 20 -327.009760000001 30 1641.11801946432 11 -47.2359709404494 21 -301.609760000001 31 1633.26107719786 12 -32.5367051710066 22 -301.609760000001 32 1641.11801946432 13 -32.5367051710066 23 -301.609760000001 33 1641.11801946432 70 1 0 3DFACE 8 rotator_half 10 -47.2359709404494 20 -301.609760000001 30 1633.26107719786 11 -32.5367051710064 21 -327.009760000001 31 1641.11801946432 12 -47.2359709404492 22 -327.009760000001 32 1633.26107719786 13 -47.2359709404492 23 -327.009760000001 33 1633.26107719786 70 1 0 3DFACE 8 rotator_half 10 -78.5505197605897 20 -301.60976 30 1595.10410250665 11 -83.3887731086213 21 -327.00976 31 1579.15445484661 12 -83.3887731086215 22 -301.60976 32 1579.15445484661 13 -83.3887731086215 23 -301.60976 33 1579.15445484661 70 1 0 3DFACE 8 rotator_half 10 -83.3887731086213 20 -327.00976 30 1579.15445484661 11 -78.5505197605897 21 -301.60976 31 1595.10410250665 12 -78.5505197605895 22 -327.00976 32 1595.10410250665 13 -78.5505197605895 23 -327.00976 33 1595.10410250665 70 1 0 3DFACE 8 rotator_half 10 47.2361683859594 20 -165.547039999997 30 1491.87386953442 11 60.1201784885382 21 -140.147039999997 31 1502.4475273507 12 47.2361683859592 22 -140.147039999997 32 1491.87386953442 13 47.2361683859592 23 -140.147039999997 33 1491.87386953442 70 1 0 3DFACE 8 rotator_half 10 60.1201784885382 20 -140.147039999997 30 1502.4475273507 11 47.2361683859594 21 -165.547039999997 31 1491.87386953442 12 60.1201784885383 22 -165.547039999997 32 1502.4475273507 13 60.1201784885383 23 -165.547039999997 33 1502.4475273507 70 1 0 3DFACE 8 rotator_half 10 60.1201784885383 20 -165.547039999997 30 1502.4475273507 11 70.6938076414472 21 -140.147039999997 31 1515.3315609767 12 60.1201784885382 22 -140.147039999997 32 1502.4475273507 13 60.1201784885382 23 -140.147039999997 33 1502.4475273507 70 1 0 3DFACE 8 rotator_half 10 70.6938076414472 20 -140.147039999997 30 1515.3315609767 11 60.1201784885383 21 -165.547039999997 31 1502.4475273507 12 70.6938076414473 22 -165.547039999997 32 1515.3315609767 13 70.6938076414473 23 -165.547039999997 33 1515.3315609767 70 1 0 3DFACE 8 rotator_half 10 70.6938076414473 20 -165.547039999997 30 1515.3315609767 11 78.5507172060996 21 -140.147039999997 31 1530.03084422563 12 70.6938076414472 22 -140.147039999997 32 1515.3315609767 13 70.6938076414472 23 -140.147039999997 33 1515.3315609767 70 1 0 3DFACE 8 rotator_half 10 78.5507172060996 20 -140.147039999997 30 1530.03084422563 11 70.6938076414473 21 -165.547039999997 31 1515.3315609767 12 78.5507172060997 22 -165.547039999997 32 1530.03084422563 13 78.5507172060997 23 -165.547039999997 33 1530.03084422563 70 1 0 3DFACE 8 rotator_half 10 -97.3924901667657 20 -327.009759999998 30 1416.80897713006 11 -83.3887362069838 21 -327.00976 31 1545.98030636861 12 -85.0224388771913 22 -327.00976 32 1562.56737879036 13 -85.0224388771913 23 -327.00976 33 1562.56737879036 70 13 0 3DFACE 8 rotator_half 10 -83.3887362069838 20 -327.00976 30 1545.98030636861 11 -97.3924901667657 21 -327.009759999998 31 1416.80897713006 12 -67.0850469131664 22 -327.009759999998 32 1400.60933423564 13 -67.0850469131664 23 -327.009759999998 33 1400.60933423564 70 13 0 3DFACE 8 rotator_half 10 -83.3887362069838 20 -327.00976 30 1545.98030636861 11 -67.0850469131664 21 -327.009759999998 31 1400.60933423564 12 -78.5504473754237 22 -327.00976 32 1530.03066947238 13 -78.5504473754237 23 -327.00976 33 1530.03066947238 70 3 0 3DFACE 8 rotator_half 10 -78.5504473754237 20 -327.00976 30 1530.03066947238 11 -67.0850469131664 21 -327.009759999998 31 1400.60933423564 12 -70.6935051089644 22 -327.009759999999 32 1515.33140370293 13 -70.6935051089644 23 -327.009759999999 33 1515.33140370293 70 3 0 3DFACE 8 rotator_half 10 -70.6935051089644 20 -327.009759999999 30 1515.33140370293 11 -67.0850469131664 21 -327.009759999998 31 1400.60933423564 12 -60.1198472926819 22 -327.009759999999 32 1502.44739360035 13 -60.1198472926819 23 -327.009759999999 33 1502.44739360035 70 3 0 3DFACE 8 rotator_half 10 -60.1198472926819 20 -327.009759999999 30 1502.44739360035 11 -67.0850469131664 21 -327.009759999998 31 1400.60933423564 12 -34.1995591345617 22 -327.009759999998 32 1390.63365180083 13 -34.1995591345617 23 -327.009759999998 33 1390.63365180083 70 13 0 3DFACE 8 rotator_half 10 -60.1198472926819 20 -327.009759999999 30 1502.44739360035 11 -34.1995591345617 21 -327.009759999998 31 1390.63365180083 12 -47.2358136666802 22 -327.009759999999 32 1491.87376444745 13 -47.2358136666802 23 -327.009759999999 33 1491.87376444745 70 3 0 3DFACE 8 rotator_half 10 -47.2358136666802 20 -327.009759999999 30 1491.87376444745 11 -34.1995591345617 21 -327.009759999998 31 1390.63365180083 12 -32.5365304177574 22 -327.009759999999 32 1484.01685488279 13 -32.5365304177574 23 -327.009759999999 33 1484.01685488279 70 3 0 3DFACE 8 rotator_half 10 -32.5365304177574 20 -327.009759999999 30 1484.01685488279 11 -34.1995591345617 21 -327.009759999998 31 1390.63365180083 12 0.000202316110637912 22 -327.009759999997 32 1387.26528970719 13 0.000202316110637912 23 -327.009759999997 33 1387.26528970719 70 13 0 3DFACE 8 rotator_half 10 -32.5365304177574 20 -327.009759999999 30 1484.01685488279 11 0.000202316110637912 21 -327.009759999997 31 1387.26528970719 12 -16.5868827577165 22 -327.009759999998 32 1479.17860153476 13 -16.5868827577165 23 -327.009759999998 33 1479.17860153476 70 3 0 3DFACE 8 rotator_half 10 -16.5868827577165 20 -327.009759999998 30 1479.17860153476 11 0.000202316110637912 21 -327.009759999997 31 1387.26528970719 12 0.000193298532564334 22 -327.009759999998 32 1477.54493576619 13 0.000193298532564334 23 -327.009759999998 33 1477.54493576619 70 3 0 3DFACE 8 rotator_half 10 0.000193298532564334 20 -327.009759999998 30 1477.54493576619 11 0.000202316110637912 21 -327.009759999997 31 1387.26528970719 12 16.5872657202876 22 -327.009759999998 32 1479.1786384364 13 16.5872657202876 23 -327.009759999998 33 1479.1786384364 70 3 0 3DFACE 8 rotator_half 10 16.5872657202876 20 -327.009759999998 30 1479.1786384364 11 0.000202316110637912 21 -327.009759999997 31 1387.26528970719 12 34.1999597857484 22 -327.009759999997 32 1390.63369222096 13 34.1999597857484 23 -327.009759999997 33 1390.63369222096 70 13 0 3DFACE 8 rotator_half 10 16.5872657202876 20 -327.009759999998 30 1479.1786384364 11 34.1999597857484 21 -327.009759999997 31 1390.63369222096 12 32.5369026165179 22 -327.009759999998 32 1484.01692726796 13 32.5369026165179 23 -327.009759999998 33 1484.01692726796 70 3 0 3DFACE 8 rotator_half 10 32.5369026165179 20 -327.009759999998 30 1484.01692726796 11 34.1999597857484 21 -327.009759999997 31 1390.63369222096 12 47.2361683859607 22 -327.009759999998 32 1491.87386953442 13 47.2361683859607 23 -327.009759999998 33 1491.87386953442 70 3 0 3DFACE 8 rotator_half 10 47.2361683859607 20 -327.009759999998 30 1491.87386953442 11 34.1999597857484 21 -327.009759999997 31 1390.63369222096 12 67.0854357742384 22 -327.009759999997 32 1400.60941352256 13 67.0854357742384 23 -327.009759999997 33 1400.60941352256 70 13 0 3DFACE 8 rotator_half 10 47.2361683859607 20 -327.009759999998 30 1491.87386953442 11 67.0854357742384 21 -327.009759999997 31 1400.60941352256 12 60.1201784885396 22 -327.009759999998 32 1502.4475273507 13 60.1201784885396 23 -327.009759999998 33 1502.4475273507 70 3 0 3DFACE 8 rotator_half 10 60.1201784885396 20 -327.009759999998 30 1502.4475273507 11 67.0854357742384 21 -327.009759999997 31 1400.60941352256 12 70.6938076414486 22 -327.009759999998 32 1515.3315609767 13 70.6938076414486 23 -327.009759999998 33 1515.3315609767 70 3 0 3DFACE 8 rotator_half 10 70.6938076414486 20 -327.009759999998 30 1515.3315609767 11 67.0854357742384 21 -327.009759999997 31 1400.60941352256 12 97.3928598817304 22 -327.009759999997 32 1416.80909223683 13 97.3928598817304 23 -327.009759999997 33 1416.80909223683 70 13 0 3DFACE 8 rotator_half 10 70.6938076414486 20 -327.009759999998 30 1515.3315609767 11 97.3928598817304 21 -327.009759999997 31 1416.80909223683 12 78.550717206101 22 -327.009759999998 32 1530.03084422562 13 78.550717206101 23 -327.009759999998 33 1530.03084422562 70 3 0 3DFACE 8 rotator_half 10 78.550717206101 20 -327.009759999998 30 1530.03084422562 11 97.3928598817304 21 -327.009759999997 31 1416.80909223683 12 83.3889705541327 22 -327.009759999998 32 1545.98049188567 13 83.3889705541327 23 -327.009759999998 33 1545.98049188567 70 3 0 3DFACE 8 rotator_half 10 83.3889705541327 20 -327.009759999998 30 1545.98049188567 11 97.3928598817304 21 -327.009759999997 31 1416.80909223683 12 85.0226363227028 22 -327.009759999999 32 1562.56756794191 13 85.0226363227028 23 -327.009759999999 33 1562.56756794191 70 3 0 3DFACE 8 rotator_half 10 85.0226363227028 20 -327.009759999999 30 1562.56756794191 11 97.3928598817304 21 -327.009759999997 31 1416.80909223683 12 97.3926876122771 22 -327.00976 32 1708.32596960222 13 97.3926876122771 23 -327.00976 33 1708.32596960222 70 15 0 3DFACE 8 rotator_half 10 97.3926876122771 20 -327.00976 30 1708.32596960222 11 97.3928598817304 21 -327.009759999997 31 1416.80909223683 12 123.957388293245 22 -327.00976 32 1686.52490943975 13 123.957388293245 23 -327.00976 33 1686.52490943975 70 3 0 3DFACE 8 rotator_half 10 123.957388293245 20 -327.00976 30 1686.52490943975 11 97.3928598817304 21 -327.009759999997 31 1416.80909223683 12 123.957534796373 22 -327.009759999997 32 1438.61018379565 13 123.957534796373 23 -327.009759999997 33 1438.61018379565 70 13 0 3DFACE 8 rotator_half 10 123.957388293245 20 -327.00976 30 1686.52490943975 11 123.957534796373 21 -327.009759999997 31 1438.61018379565 12 145.758479852068 22 -327.009759999999 32 1659.96023452511 13 145.758479852068 23 -327.009759999999 33 1659.96023452511 70 3 0 3DFACE 8 rotator_half 10 145.758479852068 20 -327.009759999999 30 1659.96023452511 11 123.957534796373 21 -327.009759999997 31 1438.61018379565 12 145.758594958837 22 -327.009759999997 32 1465.17488447662 13 145.758594958837 23 -327.009759999997 33 1465.17488447662 70 13 0 3DFACE 8 rotator_half 10 145.758479852068 20 -327.009759999999 30 1659.96023452511 11 145.758594958837 21 -327.009759999997 31 1465.17488447662 12 161.958158566334 22 -327.009759999999 32 1629.65281041762 13 161.958158566334 23 -327.009759999999 33 1629.65281041762 70 3 0 3DFACE 8 rotator_half 10 161.958158566334 20 -327.009759999999 30 1629.65281041762 11 145.758594958837 21 -327.009759999997 31 1465.17488447662 12 161.958237853255 22 -327.009759999997 32 1495.48232773022 13 161.958237853255 23 -327.009759999997 33 1495.48232773022 70 13 0 3DFACE 8 rotator_half 10 161.958158566334 20 -327.009759999999 30 1629.65281041762 11 161.958237853255 21 -327.009759999997 31 1495.48232773022 12 171.933879867937 22 -327.009759999998 32 1596.76733442913 13 171.933879867937 23 -327.009759999998 33 1596.76733442913 70 3 0 3DFACE 8 rotator_half 10 171.933879867937 20 -327.009759999998 30 1596.76733442913 11 161.958237853255 21 -327.009759999997 31 1495.48232773022 12 171.933920288059 22 -327.009759999998 32 1528.36781550882 13 171.933920288059 23 -327.009759999998 33 1528.36781550882 70 13 0 3DFACE 8 rotator_half 10 171.933879867937 20 -327.009759999998 30 1596.76733442913 11 171.933920288059 21 -327.009759999998 31 1528.36781550882 12 175.302282381706 22 -327.009759999998 32 1562.56757695949 13 175.302282381706 23 -327.009759999998 33 1562.56757695949 70 1 0 3DFACE 8 rotator_half 10 -171.933682422425 20 -327.00976 30 1528.36761230315 11 -171.933722842547 21 -327.009760000001 31 1596.76713122345 12 -175.302084936194 22 -327.009760000001 32 1562.56736977278 13 -175.302084936194 23 -327.009760000001 33 1562.56736977278 70 1 0 3DFACE 8 rotator_half 10 -171.933722842547 20 -327.009760000001 30 1596.76713122345 11 -171.933682422425 21 -327.00976 31 1528.36761230315 12 -161.958040407743 22 -327.009760000001 32 1629.65261900206 13 -161.958040407743 23 -327.009760000001 33 1629.65261900206 70 3 0 3DFACE 8 rotator_half 10 -161.958040407743 20 -327.009760000001 30 1629.65261900206 11 -171.933682422425 21 -327.00976 31 1528.36761230315 12 -161.957961120822 22 -327.00976 32 1495.48213631465 13 -161.957961120822 23 -327.00976 33 1495.48213631465 70 13 0 3DFACE 8 rotator_half 10 -161.958040407743 20 -327.009760000001 30 1629.65261900206 11 -161.957961120822 21 -327.00976 31 1495.48213631465 12 -145.758397513325 22 -327.009760000002 32 1659.96006225566 13 -145.758397513325 23 -327.009760000002 33 1659.96006225566 70 3 0 3DFACE 8 rotator_half 10 -145.758397513325 20 -327.009760000002 30 1659.96006225566 11 -161.957961120822 21 -327.00976 31 1495.48213631465 12 -145.758282406557 22 -327.009759999999 32 1465.17471220716 13 -145.758282406557 23 -327.009759999999 33 1465.17471220716 70 13 0 3DFACE 8 rotator_half 10 -145.758397513325 20 -327.009760000002 30 1659.96006225566 11 -145.758282406557 21 -327.009759999999 31 1465.17471220716 12 -123.957337350861 22 -327.009760000002 32 1686.52476293663 13 -123.957337350861 23 -327.009760000002 33 1686.52476293663 70 3 0 3DFACE 8 rotator_half 10 -123.957337350861 20 -327.009760000002 30 1686.52476293663 11 -145.758282406557 21 -327.009759999999 31 1465.17471220716 12 -123.957190847734 22 -327.009759999999 32 1438.61003729252 13 -123.957190847734 23 -327.009759999999 33 1438.61003729252 70 13 0 3DFACE 8 rotator_half 10 -123.957337350861 20 -327.009760000002 30 1686.52476293663 11 -123.957190847734 21 -327.009759999999 31 1438.61003729252 12 -97.3926624362189 22 -327.009760000002 32 1708.32585449545 13 -97.3926624362189 23 -327.009760000002 33 1708.32585449545 70 3 0 3DFACE 8 rotator_half 10 -97.3926624362189 20 -327.009760000002 30 1708.32585449545 11 -123.957190847734 21 -327.009759999999 31 1438.61003729252 12 -97.3924901667657 22 -327.009759999998 32 1416.80897713006 13 -97.3924901667657 23 -327.009759999998 33 1416.80897713006 70 13 0 3DFACE 8 rotator_half 10 -97.3926624362189 20 -327.009760000002 30 1708.32585449545 11 -97.3924901667657 21 -327.009759999998 31 1416.80897713006 12 -85.0224388771913 22 -327.00976 32 1562.56737879036 13 -85.0224388771913 23 -327.00976 33 1562.56737879036 70 15 0 3DFACE 8 rotator_half 10 -97.3926624362189 20 -327.009760000002 30 1708.32585449545 11 -85.0224388771913 21 -327.00976 31 1562.56737879036 12 -83.3887731086213 22 -327.00976 32 1579.15445484661 13 -83.3887731086213 23 -327.00976 33 1579.15445484661 70 13 0 3DFACE 8 rotator_half 10 -97.3926624362189 20 -327.009760000002 30 1708.32585449545 11 -83.3887731086213 21 -327.00976 31 1579.15445484661 12 -67.085238328727 22 -327.009760000002 32 1724.52553320972 13 -67.085238328727 23 -327.009760000002 33 1724.52553320972 70 3 0 3DFACE 8 rotator_half 10 -67.085238328727 20 -327.009760000002 30 1724.52553320972 11 -83.3887731086213 21 -327.00976 31 1579.15445484661 12 -78.5505197605895 22 -327.00976 32 1595.10410250665 13 -78.5505197605895 23 -327.00976 33 1595.10410250665 70 13 0 3DFACE 8 rotator_half 10 -67.085238328727 20 -327.009760000002 30 1724.52553320972 11 -78.5505197605895 21 -327.00976 31 1595.10410250665 12 -70.6936101959371 22 -327.00976 32 1609.80338575557 13 -70.6936101959371 23 -327.00976 33 1609.80338575557 70 13 0 3DFACE 8 rotator_half 10 -67.085238328727 20 -327.009760000002 30 1724.52553320972 11 -70.6936101959371 21 -327.00976 31 1609.80338575557 12 -60.1199810430281 22 -327.009760000001 32 1622.68741938157 13 -60.1199810430281 23 -327.009760000001 33 1622.68741938157 70 13 0 3DFACE 8 rotator_half 10 -67.085238328727 20 -327.009760000002 30 1724.52553320972 11 -60.1199810430281 21 -327.009760000001 31 1622.68741938157 12 -34.199762340237 22 -327.009760000002 32 1734.50125451132 13 -34.199762340237 23 -327.009760000002 33 1734.50125451132 70 3 0 3DFACE 8 rotator_half 10 -34.199762340237 20 -327.009760000002 30 1734.50125451132 11 -60.1199810430281 21 -327.009760000001 31 1622.68741938157 12 -47.2359709404492 22 -327.009760000001 32 1633.26107719786 13 -47.2359709404492 23 -327.009760000001 33 1633.26107719786 70 13 0 3DFACE 8 rotator_half 10 -34.199762340237 20 -327.009760000002 30 1734.50125451132 11 -47.2359709404492 21 -327.009760000001 31 1633.26107719786 12 -32.5367051710064 22 -327.009760000001 32 1641.11801946432 13 -32.5367051710064 23 -327.009760000001 33 1641.11801946432 70 13 0 3DFACE 8 rotator_half 10 -34.199762340237 20 -327.009760000002 30 1734.50125451132 11 -32.5367051710064 21 -327.009760000001 31 1641.11801946432 12 -4.87059913788501e-06 22 -327.009760000001 32 1737.86965702509 13 -4.87059913788501e-06 23 -327.009760000001 33 1737.86965702509 70 3 0 3DFACE 8 rotator_half 10 -4.87059913788501e-06 20 -327.009760000001 30 1737.86965702509 11 -32.5367051710064 21 -327.009760000001 31 1641.11801946432 12 -16.5870682747761 22 -327.00976 32 1645.95630829588 13 -16.5870682747761 23 -327.00976 33 1645.95630829588 70 13 0 3DFACE 8 rotator_half 10 -4.87059913788501e-06 20 -327.009760000001 30 1737.86965702509 11 -16.5870682747761 21 -327.00976 31 1645.95630829588 12 4.14697891172322e-06 22 -327.00976 32 1647.59001096608 13 4.14697891172322e-06 23 -327.00976 33 1647.59001096608 70 13 0 3DFACE 8 rotator_half 10 -4.87059913788501e-06 20 -327.009760000001 30 1737.86965702509 11 4.14697891172322e-06 21 -327.00976 31 1647.59001096608 12 34.1997565800732 22 -327.009760000001 32 1734.50129493144 13 34.1997565800732 23 -327.009760000001 33 1734.50129493144 70 3 0 3DFACE 8 rotator_half 10 34.1997565800732 20 -327.009760000001 30 1734.50129493144 11 4.14697891172322e-06 21 -327.00976 31 1647.59001096608 12 16.587080203228 22 -327.00976 32 1645.95634519751 13 16.587080203228 23 -327.00976 33 1645.95634519751 70 13 0 3DFACE 8 rotator_half 10 34.1997565800732 20 -327.009760000001 30 1734.50129493144 11 16.587080203228 21 -327.00976 31 1645.95634519751 12 32.5367278632689 22 -327.00976 32 1641.11809184948 13 32.5367278632689 23 -327.00976 33 1641.11809184948 70 13 0 3DFACE 8 rotator_half 10 34.1997565800732 20 -327.009760000001 30 1734.50129493144 11 32.5367278632689 21 -327.00976 31 1641.11809184948 12 47.2360111121917 22 -327.00976 32 1633.26118228483 13 47.2360111121917 23 -327.00976 33 1633.26118228483 70 13 0 3DFACE 8 rotator_half 10 34.1997565800732 20 -327.009760000001 30 1734.50129493144 11 47.2360111121917 21 -327.00976 31 1633.26118228483 12 67.0852443586779 22 -327.009760000001 32 1724.52561249664 13 67.0852443586779 23 -327.009760000001 33 1724.52561249664 70 3 0 3DFACE 8 rotator_half 10 67.0852443586779 20 -327.009760000001 30 1724.52561249664 11 47.2360111121917 21 -327.00976 31 1633.26118228483 12 60.1200447381933 22 -327.00976 32 1622.68755313192 13 60.1200447381933 23 -327.00976 33 1622.68755313192 70 13 0 3DFACE 8 rotator_half 10 67.0852443586779 20 -327.009760000001 30 1724.52561249664 11 60.1200447381933 21 -327.00976 31 1622.68755313192 12 70.6937025544759 22 -327.009759999999 32 1609.80354302934 13 70.6937025544759 23 -327.009759999999 33 1609.80354302934 70 13 0 3DFACE 8 rotator_half 10 67.0852443586779 20 -327.009760000001 30 1724.52561249664 11 70.6937025544759 21 -327.009759999999 31 1609.80354302934 12 97.3926876122771 22 -327.00976 32 1708.32596960222 13 97.3926876122771 23 -327.00976 33 1708.32596960222 70 3 0 3DFACE 8 rotator_half 10 97.3926876122771 20 -327.00976 30 1708.32596960222 11 70.6937025544759 21 -327.009759999999 31 1609.80354302934 12 78.5506448209352 22 -327.009759999999 32 1595.1042772599 13 78.5506448209352 23 -327.009759999999 33 1595.1042772599 70 13 0 3DFACE 8 rotator_half 10 97.3926876122771 20 -327.00976 30 1708.32596960222 11 78.5506448209352 21 -327.009759999999 31 1595.1042772599 12 83.3889336524952 22 -327.009759999999 32 1579.15464036367 13 83.3889336524952 23 -327.009759999999 33 1579.15464036367 70 13 0 3DFACE 8 rotator_half 10 97.3926876122771 20 -327.00976 30 1708.32596960222 11 83.3889336524952 21 -327.009759999999 31 1579.15464036367 12 85.0226363227028 22 -327.009759999999 32 1562.56756794191 13 85.0226363227028 23 -327.009759999999 33 1562.56756794191 70 13 0 3DFACE 8 rotator_half 10 -83.3887731086226 20 -165.547039999999 30 1579.15445484661 11 -83.388736206985 21 -165.547039999999 31 1545.98030636861 12 -85.0224388771926 22 -165.547039999999 32 1562.56737879036 13 -85.0224388771926 23 -165.547039999999 33 1562.56737879036 70 1 0 3DFACE 8 rotator_half 10 -83.388736206985 20 -165.547039999999 30 1545.98030636861 11 -83.3887731086226 21 -165.547039999999 31 1579.15445484661 12 -78.5505197605908 22 -165.547039999999 32 1595.10410250665 13 -78.5505197605908 23 -165.547039999999 33 1595.10410250665 70 13 0 3DFACE 8 rotator_half 10 -83.388736206985 20 -165.547039999999 30 1545.98030636861 11 -78.5505197605908 21 -165.547039999999 31 1595.10410250665 12 -78.550447375425 22 -165.547039999999 32 1530.03066947238 13 -78.550447375425 23 -165.547039999999 33 1530.03066947238 70 3 0 3DFACE 8 rotator_half 10 -78.550447375425 20 -165.547039999999 30 1530.03066947238 11 -78.5505197605908 21 -165.547039999999 31 1595.10410250665 12 -70.6936101959384 22 -165.54704 32 1609.80338575558 13 -70.6936101959384 23 -165.54704 33 1609.80338575558 70 13 0 3DFACE 8 rotator_half 10 -78.550447375425 20 -165.547039999999 30 1530.03066947238 11 -70.6936101959384 21 -165.54704 31 1609.80338575558 12 -70.6935051089657 22 -165.547039999998 32 1515.33140370293 13 -70.6935051089657 23 -165.547039999998 33 1515.33140370293 70 3 0 3DFACE 8 rotator_half 10 -70.6935051089657 20 -165.547039999998 30 1515.33140370293 11 -70.6936101959384 21 -165.54704 31 1609.80338575558 12 -60.1199810430294 22 -165.54704 32 1622.68741938158 13 -60.1199810430294 23 -165.54704 33 1622.68741938158 70 13 0 3DFACE 8 rotator_half 10 -70.6935051089657 20 -165.547039999998 30 1515.33140370293 11 -60.1199810430294 21 -165.54704 31 1622.68741938158 12 -60.1198472926832 22 -165.547039999998 32 1502.44739360036 13 -60.1198472926832 23 -165.547039999998 33 1502.44739360036 70 3 0 3DFACE 8 rotator_half 10 -60.1198472926832 20 -165.547039999998 30 1502.44739360036 11 -60.1199810430294 21 -165.54704 31 1622.68741938158 12 -47.2359709404505 22 -165.54704 32 1633.26107719786 13 -47.2359709404505 23 -165.54704 33 1633.26107719786 70 13 0 3DFACE 8 rotator_half 10 -60.1198472926832 20 -165.547039999998 30 1502.44739360036 11 -47.2359709404505 21 -165.54704 31 1633.26107719786 12 -47.2358136666815 22 -165.547039999998 32 1491.87376444745 13 -47.2358136666815 23 -165.547039999998 33 1491.87376444745 70 3 0 3DFACE 8 rotator_half 10 -47.2358136666815 20 -165.547039999998 30 1491.87376444745 11 -47.2359709404505 21 -165.54704 31 1633.26107719786 12 -32.5367051710077 22 -165.54704 32 1641.11801946432 13 -32.5367051710077 23 -165.54704 33 1641.11801946432 70 13 0 3DFACE 8 rotator_half 10 -47.2358136666815 20 -165.547039999998 30 1491.87376444745 11 -32.5367051710077 21 -165.54704 31 1641.11801946432 12 -32.5365304177587 22 -165.547039999998 32 1484.01685488279 13 -32.5365304177587 23 -165.547039999998 33 1484.01685488279 70 3 0 3DFACE 8 rotator_half 10 -32.5365304177587 20 -165.547039999998 30 1484.01685488279 11 -32.5367051710077 21 -165.54704 31 1641.11801946432 12 -16.5870682747773 22 -165.54704 32 1645.95630829588 13 -16.5870682747773 23 -165.54704 33 1645.95630829588 70 13 0 3DFACE 8 rotator_half 10 -32.5365304177587 20 -165.547039999998 30 1484.01685488279 11 -16.5870682747773 21 -165.54704 31 1645.95630829588 12 -16.5868827577177 22 -165.547039999997 32 1479.17860153476 13 -16.5868827577177 23 -165.547039999997 33 1479.17860153476 70 3 0 3DFACE 8 rotator_half 10 -16.5868827577177 20 -165.547039999997 30 1479.17860153476 11 -16.5870682747773 21 -165.54704 31 1645.95630829588 12 4.14697766952798e-06 22 -165.547039999999 32 1647.59001096608 13 4.14697766952798e-06 23 -165.547039999999 33 1647.59001096608 70 13 0 3DFACE 8 rotator_half 10 -16.5868827577177 20 -165.547039999997 30 1479.17860153476 11 4.14697766952798e-06 21 -165.547039999999 31 1647.59001096608 12 0.000193298531324959 22 -165.547039999997 32 1477.54493576619 13 0.000193298531324959 23 -165.547039999997 33 1477.54493576619 70 3 0 3DFACE 8 rotator_half 10 0.000193298531324959 20 -165.547039999997 30 1477.54493576619 11 4.14697766952798e-06 21 -165.547039999999 31 1647.59001096608 12 16.5870802032267 22 -165.547039999999 32 1645.95634519751 13 16.5870802032267 23 -165.547039999999 33 1645.95634519751 70 13 0 3DFACE 8 rotator_half 10 0.000193298531324959 20 -165.547039999997 30 1477.54493576619 11 16.5870802032267 21 -165.547039999999 31 1645.95634519751 12 16.5872657202864 22 -165.547039999997 32 1479.1786384364 13 16.5872657202864 23 -165.547039999997 33 1479.1786384364 70 3 0 3DFACE 8 rotator_half 10 16.5872657202864 20 -165.547039999997 30 1479.1786384364 11 16.5870802032267 21 -165.547039999999 31 1645.95634519751 12 32.5367278632676 22 -165.547039999999 32 1641.11809184948 13 32.5367278632676 23 -165.547039999999 33 1641.11809184948 70 13 0 3DFACE 8 rotator_half 10 16.5872657202864 20 -165.547039999997 30 1479.1786384364 11 32.5367278632676 21 -165.547039999999 31 1641.11809184948 12 32.5369026165166 22 -165.547039999997 32 1484.01692726796 13 32.5369026165166 23 -165.547039999997 33 1484.01692726796 70 3 0 3DFACE 8 rotator_half 10 32.5369026165166 20 -165.547039999997 30 1484.01692726796 11 32.5367278632676 21 -165.547039999999 31 1641.11809184948 12 47.2360111121904 22 -165.547039999999 32 1633.26118228483 13 47.2360111121904 23 -165.547039999999 33 1633.26118228483 70 13 0 3DFACE 8 rotator_half 10 32.5369026165166 20 -165.547039999997 30 1484.01692726796 11 47.2360111121904 21 -165.547039999999 31 1633.26118228483 12 47.2361683859594 22 -165.547039999997 32 1491.87386953442 13 47.2361683859594 23 -165.547039999997 33 1491.87386953442 70 3 0 3DFACE 8 rotator_half 10 47.2361683859594 20 -165.547039999997 30 1491.87386953442 11 47.2360111121904 21 -165.547039999999 31 1633.26118228483 12 60.1200447381921 22 -165.547039999999 32 1622.68755313192 13 60.1200447381921 23 -165.547039999999 33 1622.68755313192 70 13 0 3DFACE 8 rotator_half 10 47.2361683859594 20 -165.547039999997 30 1491.87386953442 11 60.1200447381921 21 -165.547039999999 31 1622.68755313192 12 60.1201784885383 22 -165.547039999997 32 1502.4475273507 13 60.1201784885383 23 -165.547039999997 33 1502.4475273507 70 3 0 3DFACE 8 rotator_half 10 60.1201784885383 20 -165.547039999997 30 1502.4475273507 11 60.1200447381921 21 -165.547039999999 31 1622.68755313192 12 70.6937025544746 22 -165.547039999998 32 1609.80354302934 13 70.6937025544746 23 -165.547039999998 33 1609.80354302934 70 13 0 3DFACE 8 rotator_half 10 60.1201784885383 20 -165.547039999997 30 1502.4475273507 11 70.6937025544746 21 -165.547039999998 31 1609.80354302934 12 70.6938076414473 22 -165.547039999997 32 1515.3315609767 13 70.6938076414473 23 -165.547039999997 33 1515.3315609767 70 3 0 3DFACE 8 rotator_half 10 70.6938076414473 20 -165.547039999997 30 1515.3315609767 11 70.6937025544746 21 -165.547039999998 31 1609.80354302934 12 78.5506448209339 22 -165.547039999998 32 1595.1042772599 13 78.5506448209339 23 -165.547039999998 33 1595.1042772599 70 13 0 3DFACE 8 rotator_half 10 70.6938076414473 20 -165.547039999997 30 1515.3315609767 11 78.5506448209339 21 -165.547039999998 31 1595.1042772599 12 78.5507172060997 22 -165.547039999997 32 1530.03084422563 13 78.5507172060997 23 -165.547039999997 33 1530.03084422563 70 3 0 3DFACE 8 rotator_half 10 78.5507172060997 20 -165.547039999997 30 1530.03084422563 11 78.5506448209339 21 -165.547039999998 31 1595.1042772599 12 83.3889336524939 22 -165.547039999998 32 1579.15464036367 13 83.3889336524939 23 -165.547039999998 33 1579.15464036367 70 13 0 3DFACE 8 rotator_half 10 78.5507172060997 20 -165.547039999997 30 1530.03084422563 11 83.3889336524939 21 -165.547039999998 31 1579.15464036367 12 83.3889705541315 22 -165.547039999997 32 1545.98049188567 13 83.3889705541315 23 -165.547039999997 33 1545.98049188567 70 3 0 3DFACE 8 rotator_half 10 83.3889705541315 20 -165.547039999997 30 1545.98049188567 11 83.3889336524939 21 -165.547039999998 31 1579.15464036367 12 85.0226363227015 22 -165.547039999998 32 1562.56756794192 13 85.0226363227015 23 -165.547039999998 33 1562.56756794192 70 1 0 3DFACE 8 rotator_half 10 0.000193298531099362 20 -140.147039999997 30 1477.54493576619 11 16.5872657202864 21 -165.547039999997 31 1479.1786384364 12 16.5872657202861 22 -140.147039999997 32 1479.1786384364 13 16.5872657202861 23 -140.147039999997 33 1479.1786384364 70 1 0 3DFACE 8 rotator_half 10 16.5872657202864 20 -165.547039999997 30 1479.1786384364 11 0.000193298531099362 21 -140.147039999997 31 1477.54493576619 12 0.000193298531324959 22 -165.547039999997 32 1477.54493576619 13 0.000193298531324959 23 -165.547039999997 33 1477.54493576619 70 1 0 3DFACE 8 rotator_half 10 16.5872657202861 20 -140.147039999997 30 1479.1786384364 11 32.5369026165166 21 -165.547039999997 31 1484.01692726796 12 32.5369026165164 22 -140.147039999997 32 1484.01692726796 13 32.5369026165164 23 -140.147039999997 33 1484.01692726796 70 1 0 3DFACE 8 rotator_half 10 32.5369026165166 20 -165.547039999997 30 1484.01692726796 11 16.5872657202861 21 -140.147039999997 31 1479.1786384364 12 16.5872657202864 22 -165.547039999997 32 1479.1786384364 13 16.5872657202864 23 -165.547039999997 33 1479.1786384364 70 1 0 3DFACE 8 rotator_half 10 32.5369026165166 20 -165.547039999997 30 1484.01692726796 11 47.2361683859592 21 -140.147039999997 31 1491.87386953442 12 32.5369026165164 22 -140.147039999997 32 1484.01692726796 13 32.5369026165164 23 -140.147039999997 33 1484.01692726796 70 1 0 3DFACE 8 rotator_half 10 47.2361683859592 20 -140.147039999997 30 1491.87386953442 11 32.5369026165166 21 -165.547039999997 31 1484.01692726796 12 47.2361683859594 22 -165.547039999997 32 1491.87386953442 13 47.2361683859594 23 -165.547039999997 33 1491.87386953442 70 1 0 3DFACE 8 rotator_half 10 78.5507172060997 20 -165.547039999997 30 1530.03084422563 11 83.3889705541313 21 -140.147039999997 31 1545.98049188567 12 78.5507172060996 22 -140.147039999997 32 1530.03084422563 13 78.5507172060996 23 -140.147039999997 33 1530.03084422563 70 1 0 3DFACE 8 rotator_half 10 83.3889705541313 20 -140.147039999997 30 1545.98049188567 11 78.5507172060997 21 -165.547039999997 31 1530.03084422563 12 83.3889705541315 22 -165.547039999997 32 1545.98049188567 13 83.3889705541315 23 -165.547039999997 33 1545.98049188567 70 1 0 3DFACE 8 rotator_half 10 83.3889705541315 20 -165.547039999997 30 1545.98049188567 11 85.0226363227013 21 -140.147039999998 31 1562.56756794192 12 83.3889705541313 22 -140.147039999997 32 1545.98049188567 13 83.3889705541313 23 -140.147039999997 33 1545.98049188567 70 1 0 3DFACE 8 rotator_half 10 85.0226363227013 20 -140.147039999998 30 1562.56756794192 11 83.3889705541315 21 -165.547039999997 31 1545.98049188567 12 85.0226363227015 22 -165.547039999998 32 1562.56756794192 13 85.0226363227015 23 -165.547039999998 33 1562.56756794192 70 1 0 3DFACE 8 rotator_half 10 85.0226363227015 20 -165.547039999998 30 1562.56756794192 11 83.3889336524938 21 -140.147039999998 31 1579.15464036367 12 85.0226363227013 22 -140.147039999998 32 1562.56756794192 13 85.0226363227013 23 -140.147039999998 33 1562.56756794192 70 1 0 3DFACE 8 rotator_half 10 83.3889336524938 20 -140.147039999998 30 1579.15464036367 11 85.0226363227015 21 -165.547039999998 31 1562.56756794192 12 83.3889336524939 22 -165.547039999998 32 1579.15464036367 13 83.3889336524939 23 -165.547039999998 33 1579.15464036367 70 1 0 3DFACE 8 rotator_half 10 83.3889336524939 20 -165.547039999998 30 1579.15464036367 11 78.5506448209338 21 -140.147039999998 31 1595.1042772599 12 83.3889336524938 22 -140.147039999998 32 1579.15464036367 13 83.3889336524938 23 -140.147039999998 33 1579.15464036367 70 1 0 3DFACE 8 rotator_half 10 78.5506448209338 20 -140.147039999998 30 1595.1042772599 11 83.3889336524939 21 -165.547039999998 31 1579.15464036367 12 78.5506448209339 22 -165.547039999998 32 1595.1042772599 13 78.5506448209339 23 -165.547039999998 33 1595.1042772599 70 1 0 3DFACE 8 rotator_half 10 78.5506448209339 20 -165.547039999998 30 1595.1042772599 11 70.6937025544744 21 -140.147039999998 31 1609.80354302934 12 78.5506448209338 22 -140.147039999998 32 1595.1042772599 13 78.5506448209338 23 -140.147039999998 33 1595.1042772599 70 1 0 3DFACE 8 rotator_half 10 70.6937025544744 20 -140.147039999998 30 1609.80354302934 11 78.5506448209339 21 -165.547039999998 31 1595.1042772599 12 70.6937025544746 22 -165.547039999998 32 1609.80354302934 13 70.6937025544746 23 -165.547039999998 33 1609.80354302934 70 1 0 3DFACE 8 rotator_half 10 70.6937025544746 20 -165.547039999998 30 1609.80354302934 11 60.1200447381919 21 -140.147039999999 31 1622.68755313192 12 70.6937025544744 22 -140.147039999998 32 1609.80354302934 13 70.6937025544744 23 -140.147039999998 33 1609.80354302934 70 1 0 3DFACE 8 rotator_half 10 60.1200447381919 20 -140.147039999999 30 1622.68755313192 11 70.6937025544746 21 -165.547039999998 31 1609.80354302934 12 60.1200447381921 22 -165.547039999999 32 1622.68755313192 13 60.1200447381921 23 -165.547039999999 33 1622.68755313192 70 1 0 3DFACE 8 rotator_half 10 60.1200447381921 20 -165.547039999999 30 1622.68755313192 11 47.2360111121902 21 -140.147039999999 31 1633.26118228483 12 60.1200447381919 22 -140.147039999999 32 1622.68755313192 13 60.1200447381919 23 -140.147039999999 33 1622.68755313192 70 1 0 3DFACE 8 rotator_half 10 47.2360111121902 20 -140.147039999999 30 1633.26118228483 11 60.1200447381921 21 -165.547039999999 31 1622.68755313192 12 47.2360111121904 22 -165.547039999999 32 1633.26118228483 13 47.2360111121904 23 -165.547039999999 33 1633.26118228483 70 1 0 3DFACE 8 rotator_half 10 47.2360111121904 20 -165.547039999999 30 1633.26118228483 11 32.5367278632675 21 -140.147039999999 31 1641.11809184948 12 47.2360111121902 22 -140.147039999999 32 1633.26118228483 13 47.2360111121902 23 -140.147039999999 33 1633.26118228483 70 1 0 3DFACE 8 rotator_half 10 32.5367278632675 20 -140.147039999999 30 1641.11809184948 11 47.2360111121904 21 -165.547039999999 31 1633.26118228483 12 32.5367278632676 22 -165.547039999999 32 1641.11809184948 13 32.5367278632676 23 -165.547039999999 33 1641.11809184948 70 1 0 3DFACE 8 rotator_half 10 32.5367278632676 20 -165.547039999999 30 1641.11809184948 11 16.5870802032265 21 -140.147039999999 31 1645.95634519751 12 32.5367278632675 22 -140.147039999999 32 1641.11809184948 13 32.5367278632675 23 -140.147039999999 33 1641.11809184948 70 1 0 3DFACE 8 rotator_half 10 16.5870802032265 20 -140.147039999999 30 1645.95634519751 11 32.5367278632676 21 -165.547039999999 31 1641.11809184948 12 16.5870802032267 22 -165.547039999999 32 1645.95634519751 13 16.5870802032267 23 -165.547039999999 33 1645.95634519751 70 1 0 3DFACE 8 rotator_half 10 16.5870802032267 20 -165.547039999999 30 1645.95634519751 11 4.14697744393067e-06 21 -140.147039999999 31 1647.59001096608 12 16.5870802032265 22 -140.147039999999 32 1645.95634519751 13 16.5870802032265 23 -140.147039999999 33 1645.95634519751 70 1 0 3DFACE 8 rotator_half 10 4.14697744393067e-06 20 -140.147039999999 30 1647.59001096608 11 16.5870802032267 21 -165.547039999999 31 1645.95634519751 12 4.14697766952798e-06 22 -165.547039999999 32 1647.59001096608 13 4.14697766952798e-06 23 -165.547039999999 33 1647.59001096608 70 1 0 3DFACE 8 rotator_half 10 4.14697766952798e-06 20 -165.547039999999 30 1647.59001096608 11 -16.5870682747775 21 -140.14704 31 1645.95630829588 12 4.14697744393067e-06 22 -140.147039999999 32 1647.59001096608 13 4.14697744393067e-06 23 -140.147039999999 33 1647.59001096608 70 1 0 3DFACE 8 rotator_half 10 -16.5870682747775 20 -140.14704 30 1645.95630829588 11 4.14697766952798e-06 21 -165.547039999999 31 1647.59001096608 12 -16.5870682747773 22 -165.54704 32 1645.95630829588 13 -16.5870682747773 23 -165.54704 33 1645.95630829588 70 1 0 3DFACE 8 rotator_half 10 -16.5870682747773 20 -165.54704 30 1645.95630829588 11 -32.5367051710078 21 -140.14704 31 1641.11801946432 12 -16.5870682747775 22 -140.14704 32 1645.95630829588 13 -16.5870682747775 23 -140.14704 33 1645.95630829588 70 1 0 3DFACE 8 rotator_half 10 -32.5367051710078 20 -140.14704 30 1641.11801946432 11 -16.5870682747773 21 -165.54704 31 1645.95630829588 12 -32.5367051710077 22 -165.54704 32 1641.11801946432 13 -32.5367051710077 23 -165.54704 33 1641.11801946432 70 1 0 3DFACE 8 rotator_half 10 -32.5367051710077 20 -165.54704 30 1641.11801946432 11 -47.2359709404507 21 -140.14704 31 1633.26107719786 12 -32.5367051710078 22 -140.14704 32 1641.11801946432 13 -32.5367051710078 23 -140.14704 33 1641.11801946432 70 1 0 3DFACE 8 rotator_half 10 -47.2359709404507 20 -140.14704 30 1633.26107719786 11 -32.5367051710077 21 -165.54704 31 1641.11801946432 12 -47.2359709404505 22 -165.54704 32 1633.26107719786 13 -47.2359709404505 23 -165.54704 33 1633.26107719786 70 1 0 3DFACE 8 rotator_half 10 -47.2359709404505 20 -165.54704 30 1633.26107719786 11 -60.1199810430296 21 -140.14704 31 1622.68741938158 12 -47.2359709404507 22 -140.14704 32 1633.26107719786 13 -47.2359709404507 23 -140.14704 33 1633.26107719786 70 1 0 3DFACE 8 rotator_half 10 -60.1199810430296 20 -140.14704 30 1622.68741938158 11 -47.2359709404505 21 -165.54704 31 1633.26107719786 12 -60.1199810430294 22 -165.54704 32 1622.68741938158 13 -60.1199810430294 23 -165.54704 33 1622.68741938158 70 1 0 3DFACE 8 rotator_half 10 -60.1199810430296 20 -140.14704 30 1622.68741938158 11 -70.6936101959384 21 -165.54704 31 1609.80338575558 12 -70.6936101959386 22 -140.14704 32 1609.80338575557 13 -70.6936101959386 23 -140.14704 33 1609.80338575557 70 1 0 3DFACE 8 rotator_half 10 -70.6936101959384 20 -165.54704 30 1609.80338575558 11 -60.1199810430296 21 -140.14704 31 1622.68741938158 12 -60.1199810430294 22 -165.54704 32 1622.68741938158 13 -60.1199810430294 23 -165.54704 33 1622.68741938158 70 1 0 3DFACE 8 rotator_half 10 -70.6936101959386 20 -140.14704 30 1609.80338575557 11 -78.5505197605908 21 -165.547039999999 31 1595.10410250665 12 -78.5505197605909 22 -140.147039999999 32 1595.10410250665 13 -78.5505197605909 23 -140.147039999999 33 1595.10410250665 70 1 0 3DFACE 8 rotator_half 10 -78.5505197605908 20 -165.547039999999 30 1595.10410250665 11 -70.6936101959386 21 -140.14704 31 1609.80338575557 12 -70.6936101959384 22 -165.54704 32 1609.80338575558 13 -70.6936101959384 23 -165.54704 33 1609.80338575558 70 1 0 3DFACE 8 rotator_half 10 -78.5505197605909 20 -140.147039999999 30 1595.10410250665 11 -83.3887731086226 21 -165.547039999999 31 1579.15445484661 12 -83.3887731086227 22 -140.147039999999 32 1579.15445484661 13 -83.3887731086227 23 -140.147039999999 33 1579.15445484661 70 1 0 3DFACE 8 rotator_half 10 -83.3887731086226 20 -165.547039999999 30 1579.15445484661 11 -78.5505197605909 21 -140.147039999999 31 1595.10410250665 12 -78.5505197605908 22 -165.547039999999 32 1595.10410250665 13 -78.5505197605908 23 -165.547039999999 33 1595.10410250665 70 1 0 3DFACE 8 rotator_half 10 -83.3887731086227 20 -140.147039999999 30 1579.15445484661 11 -85.0224388771926 21 -165.547039999999 31 1562.56737879036 12 -85.0224388771927 22 -140.147039999999 32 1562.56737879036 13 -85.0224388771927 23 -140.147039999999 33 1562.56737879036 70 1 0 3DFACE 8 rotator_half 10 -85.0224388771926 20 -165.547039999999 30 1562.56737879036 11 -83.3887731086227 21 -140.147039999999 31 1579.15445484661 12 -83.3887731086226 22 -165.547039999999 32 1579.15445484661 13 -83.3887731086226 23 -165.547039999999 33 1579.15445484661 70 1 0 3DFACE 8 rotator_half 10 -85.0224388771927 20 -140.147039999999 30 1562.56737879036 11 -83.388736206985 21 -165.547039999999 31 1545.98030636861 12 -83.3887362069852 22 -140.147039999999 32 1545.98030636861 13 -83.3887362069852 23 -140.147039999999 33 1545.98030636861 70 1 0 3DFACE 8 rotator_half 10 -83.388736206985 20 -165.547039999999 30 1545.98030636861 11 -85.0224388771927 21 -140.147039999999 31 1562.56737879036 12 -85.0224388771926 22 -165.547039999999 32 1562.56737879036 13 -85.0224388771926 23 -165.547039999999 33 1562.56737879036 70 1 0 3DFACE 8 rotator_half 10 -83.3887362069852 20 -140.147039999999 30 1545.98030636861 11 -78.550447375425 21 -165.547039999999 31 1530.03066947238 12 -78.5504473754252 22 -140.147039999999 32 1530.03066947238 13 -78.5504473754252 23 -140.147039999999 33 1530.03066947238 70 1 0 3DFACE 8 rotator_half 10 -78.550447375425 20 -165.547039999999 30 1530.03066947238 11 -83.3887362069852 21 -140.147039999999 31 1545.98030636861 12 -83.388736206985 22 -165.547039999999 32 1545.98030636861 13 -83.388736206985 23 -165.547039999999 33 1545.98030636861 70 1 0 3DFACE 8 rotator_half 10 -78.5504473754252 20 -140.147039999999 30 1530.03066947238 11 -70.6935051089657 21 -165.547039999998 31 1515.33140370293 12 -70.6935051089658 22 -140.147039999998 32 1515.33140370293 13 -70.6935051089658 23 -140.147039999998 33 1515.33140370293 70 1 0 3DFACE 8 rotator_half 10 -70.6935051089657 20 -165.547039999998 30 1515.33140370293 11 -78.5504473754252 21 -140.147039999999 31 1530.03066947238 12 -78.550447375425 22 -165.547039999999 32 1530.03066947238 13 -78.550447375425 23 -165.547039999999 33 1530.03066947238 70 1 0 3DFACE 8 rotator_half 10 -70.6935051089658 20 -140.147039999998 30 1515.33140370293 11 -60.1198472926832 21 -165.547039999998 31 1502.44739360036 12 -60.1198472926833 22 -140.147039999998 32 1502.44739360036 13 -60.1198472926833 23 -140.147039999998 33 1502.44739360036 70 1 0 3DFACE 8 rotator_half 10 -60.1198472926832 20 -165.547039999998 30 1502.44739360036 11 -70.6935051089658 21 -140.147039999998 31 1515.33140370293 12 -70.6935051089657 22 -165.547039999998 32 1515.33140370293 13 -70.6935051089657 23 -165.547039999998 33 1515.33140370293 70 1 0 3DFACE 8 rotator_half 10 -60.1198472926833 20 -140.147039999998 30 1502.44739360036 11 -47.2358136666815 21 -165.547039999998 31 1491.87376444745 12 -47.2358136666817 22 -140.147039999998 32 1491.87376444745 13 -47.2358136666817 23 -140.147039999998 33 1491.87376444745 70 1 0 3DFACE 8 rotator_half 10 -47.2358136666815 20 -165.547039999998 30 1491.87376444745 11 -60.1198472926833 21 -140.147039999998 31 1502.44739360036 12 -60.1198472926832 22 -165.547039999998 32 1502.44739360036 13 -60.1198472926832 23 -165.547039999998 33 1502.44739360036 70 1 0 3DFACE 8 rotator_half 10 -47.2358136666817 20 -140.147039999998 30 1491.87376444745 11 -32.5365304177587 21 -165.547039999998 31 1484.01685488279 12 -32.5365304177589 22 -140.147039999998 32 1484.01685488279 13 -32.5365304177589 23 -140.147039999998 33 1484.01685488279 70 1 0 3DFACE 8 rotator_half 10 -32.5365304177587 20 -165.547039999998 30 1484.01685488279 11 -47.2358136666817 21 -140.147039999998 31 1491.87376444745 12 -47.2358136666815 22 -165.547039999998 32 1491.87376444745 13 -47.2358136666815 23 -165.547039999998 33 1491.87376444745 70 1 0 3DFACE 8 rotator_half 10 -32.5365304177589 20 -140.147039999998 30 1484.01685488279 11 -16.5868827577177 21 -165.547039999997 31 1479.17860153476 12 -16.586882757718 22 -140.147039999997 32 1479.17860153476 13 -16.586882757718 23 -140.147039999997 33 1479.17860153476 70 1 0 3DFACE 8 rotator_half 10 -16.5868827577177 20 -165.547039999997 30 1479.17860153476 11 -32.5365304177589 21 -140.147039999998 31 1484.01685488279 12 -32.5365304177587 22 -165.547039999998 32 1484.01685488279 13 -32.5365304177587 23 -165.547039999998 33 1484.01685488279 70 1 0 3DFACE 8 rotator_half 10 -16.586882757718 20 -140.147039999997 30 1479.17860153476 11 0.000193298531324959 21 -165.547039999997 31 1477.54493576619 12 0.000193298531099362 22 -140.147039999997 32 1477.54493576619 13 0.000193298531099362 23 -140.147039999997 33 1477.54493576619 70 1 0 3DFACE 8 rotator_half 10 0.000193298531324959 20 -165.547039999997 30 1477.54493576619 11 -16.586882757718 21 -140.147039999997 31 1479.17860153476 12 -16.5868827577177 22 -165.547039999997 32 1479.17860153476 13 -16.5868827577177 23 -165.547039999997 33 1479.17860153476 70 1 0 3DFACE 8 rotator_half 10 -70.6936101959373 20 -301.60976 30 1609.80338575557 11 -78.5505197605895 21 -327.00976 31 1595.10410250665 12 -78.5505197605897 22 -301.60976 32 1595.10410250665 13 -78.5505197605897 23 -301.60976 33 1595.10410250665 70 1 0 3DFACE 8 rotator_half 10 -78.5505197605895 20 -327.00976 30 1595.10410250665 11 -70.6936101959373 21 -301.60976 31 1609.80338575557 12 -70.6936101959371 22 -327.00976 32 1609.80338575557 13 -70.6936101959371 23 -327.00976 33 1609.80338575557 70 1 0 3DFACE 8 rotator_half 10 16.587080203228 20 -327.00976 30 1645.95634519751 11 4.14697870727565e-06 21 -301.60976 31 1647.59001096608 12 16.5870802032278 22 -301.60976 32 1645.95634519751 13 16.5870802032278 23 -301.60976 33 1645.95634519751 70 1 0 3DFACE 8 rotator_half 10 4.14697870727565e-06 20 -301.60976 30 1647.59001096608 11 16.587080203228 21 -327.00976 31 1645.95634519751 12 4.14697891172322e-06 22 -327.00976 32 1647.59001096608 13 4.14697891172322e-06 23 -327.00976 33 1647.59001096608 70 1 0 3DFACE 8 rotator_half 10 -16.5870682747761 20 -327.00976 30 1645.95630829588 11 -32.5367051710066 21 -301.609760000001 31 1641.11801946432 12 -16.5870682747763 22 -301.60976 32 1645.95630829588 13 -16.5870682747763 23 -301.60976 33 1645.95630829588 70 1 0 3DFACE 8 rotator_half 10 -32.5367051710066 20 -301.609760000001 30 1641.11801946432 11 -16.5870682747761 21 -327.00976 31 1645.95630829588 12 -32.5367051710064 22 -327.009760000001 32 1641.11801946432 13 -32.5367051710064 23 -327.009760000001 33 1641.11801946432 70 1 0 3DFACE 8 rotator_half 10 4.14697891172322e-06 20 -327.00976 30 1647.59001096608 11 -16.5870682747763 21 -301.60976 31 1645.95630829588 12 4.14697870727565e-06 22 -301.60976 32 1647.59001096608 13 4.14697870727565e-06 23 -301.60976 33 1647.59001096608 70 1 0 3DFACE 8 rotator_half 10 -16.5870682747763 20 -301.60976 30 1645.95630829588 11 4.14697891172322e-06 21 -327.00976 31 1647.59001096608 12 -16.5870682747761 22 -327.00976 32 1645.95630829588 13 -16.5870682747761 23 -327.00976 33 1645.95630829588 70 1 0 3DFACE 8 rotator_half 10 -47.2358136666804 20 -301.609759999999 30 1491.87376444745 11 -32.5365304177574 21 -327.009759999999 31 1484.01685488279 12 -32.5365304177576 22 -301.609759999999 32 1484.01685488279 13 -32.5365304177576 23 -301.609759999999 33 1484.01685488279 70 1 0 3DFACE 8 rotator_half 10 -32.5365304177574 20 -327.009759999999 30 1484.01685488279 11 -47.2358136666804 21 -301.609759999999 31 1491.87376444745 12 -47.2358136666802 22 -327.009759999999 32 1491.87376444745 13 -47.2358136666802 23 -327.009759999999 33 1491.87376444745 70 1 0 3DFACE 8 rotator_half 10 -78.5504473754239 20 -301.60976 30 1530.03066947238 11 -70.6935051089644 21 -327.009759999999 31 1515.33140370293 12 -70.6935051089646 22 -301.609759999999 32 1515.33140370293 13 -70.6935051089646 23 -301.609759999999 33 1515.33140370293 70 1 0 3DFACE 8 rotator_half 10 -70.6935051089644 20 -327.009759999999 30 1515.33140370293 11 -78.5504473754239 21 -301.60976 31 1530.03066947238 12 -78.5504473754237 22 -327.00976 32 1530.03066947238 13 -78.5504473754237 23 -327.00976 33 1530.03066947238 70 1 0 3DFACE 8 rotator_half 10 -60.1199810430283 20 -301.609760000001 30 1622.68741938157 11 -70.6936101959371 21 -327.00976 31 1609.80338575557 12 -70.6936101959373 22 -301.60976 32 1609.80338575557 13 -70.6936101959373 23 -301.60976 33 1609.80338575557 70 1 0 3DFACE 8 rotator_half 10 -70.6936101959371 20 -327.00976 30 1609.80338575557 11 -60.1199810430283 21 -301.609760000001 31 1622.68741938157 12 -60.1199810430281 22 -327.009760000001 32 1622.68741938157 13 -60.1199810430281 23 -327.009760000001 33 1622.68741938157 70 1 0 3DFACE 8 rotator_half 10 -32.5365304177576 20 -301.609759999999 30 1484.01685488279 11 -16.5868827577165 21 -327.009759999998 31 1479.17860153476 12 -16.5868827577167 22 -301.609759999998 32 1479.17860153476 13 -16.5868827577167 23 -301.609759999998 33 1479.17860153476 70 1 0 3DFACE 8 rotator_half 10 -16.5868827577165 20 -327.009759999998 30 1479.17860153476 11 -32.5365304177576 21 -301.609759999999 31 1484.01685488279 12 -32.5365304177574 22 -327.009759999999 32 1484.01685488279 13 -32.5365304177574 23 -327.009759999999 33 1484.01685488279 70 1 0 3DFACE 8 rotator_half 10 -60.1198472926821 20 -301.609759999999 30 1502.44739360035 11 -47.2358136666802 21 -327.009759999999 31 1491.87376444745 12 -47.2358136666804 22 -301.609759999999 32 1491.87376444745 13 -47.2358136666804 23 -301.609759999999 33 1491.87376444745 70 1 0 3DFACE 8 rotator_half 10 -47.2358136666802 20 -327.009759999999 30 1491.87376444745 11 -60.1198472926821 21 -301.609759999999 31 1502.44739360035 12 -60.1198472926819 22 -327.009759999999 32 1502.44739360035 13 -60.1198472926819 23 -327.009759999999 33 1502.44739360035 70 1 0 3DFACE 8 rotator_half 10 -83.3887731086215 20 -301.60976 30 1579.15445484661 11 -85.0224388771913 21 -327.00976 31 1562.56737879036 12 -85.0224388771915 22 -301.60976 32 1562.56737879036 13 -85.0224388771915 23 -301.60976 33 1562.56737879036 70 1 0 3DFACE 8 rotator_half 10 -85.0224388771913 20 -327.00976 30 1562.56737879036 11 -83.3887731086215 21 -301.60976 31 1579.15445484661 12 -83.3887731086213 22 -327.00976 32 1579.15445484661 13 -83.3887731086213 23 -327.00976 33 1579.15445484661 70 1 0 3DFACE 8 rotator_half 10 -16.5868827577167 20 -301.609759999998 30 1479.17860153476 11 0.000193298532564334 21 -327.009759999998 31 1477.54493576619 12 0.000193298532362707 22 -301.609759999998 32 1477.54493576619 13 0.000193298532362707 23 -301.609759999998 33 1477.54493576619 70 1 0 3DFACE 8 rotator_half 10 0.000193298532564334 20 -327.009759999998 30 1477.54493576619 11 -16.5868827577167 21 -301.609759999998 31 1479.17860153476 12 -16.5868827577165 22 -327.009759999998 32 1479.17860153476 13 -16.5868827577165 23 -327.009759999998 33 1479.17860153476 70 1 0 3DFACE 8 rotator_half 10 0.000193298532362707 20 -301.609759999998 30 1477.54493576619 11 16.5872657202876 21 -327.009759999998 31 1479.1786384364 12 16.5872657202874 22 -301.609759999998 32 1479.1786384364 13 16.5872657202874 23 -301.609759999998 33 1479.1786384364 70 1 0 3DFACE 8 rotator_half 10 16.5872657202876 20 -327.009759999998 30 1479.1786384364 11 0.000193298532362707 21 -301.609759999998 31 1477.54493576619 12 0.000193298532564334 22 -327.009759999998 32 1477.54493576619 13 0.000193298532564334 23 -327.009759999998 33 1477.54493576619 70 1 0 3DFACE 8 rotator_half 10 16.5872657202874 20 -301.609759999998 30 1479.1786384364 11 32.5369026165179 21 -327.009759999998 31 1484.01692726796 12 32.5369026165177 22 -301.609759999998 32 1484.01692726796 13 32.5369026165177 23 -301.609759999998 33 1484.01692726796 70 1 0 3DFACE 8 rotator_half 10 32.5369026165179 20 -327.009759999998 30 1484.01692726796 11 16.5872657202874 21 -301.609759999998 31 1479.1786384364 12 16.5872657202876 22 -327.009759999998 32 1479.1786384364 13 16.5872657202876 23 -327.009759999998 33 1479.1786384364 70 1 0 3DFACE 8 rotator_half 10 32.5369026165179 20 -327.009759999998 30 1484.01692726796 11 47.2361683859605 21 -301.609759999998 31 1491.87386953442 12 32.5369026165177 22 -301.609759999998 32 1484.01692726796 13 32.5369026165177 23 -301.609759999998 33 1484.01692726796 70 1 0 3DFACE 8 rotator_half 10 47.2361683859605 20 -301.609759999998 30 1491.87386953442 11 32.5369026165179 21 -327.009759999998 31 1484.01692726796 12 47.2361683859607 22 -327.009759999998 32 1491.87386953442 13 47.2361683859607 23 -327.009759999998 33 1491.87386953442 70 1 0 3DFACE 8 rotator_half 10 47.2361683859607 20 -327.009759999998 30 1491.87386953442 11 60.1201784885394 21 -301.609759999998 31 1502.4475273507 12 47.2361683859605 22 -301.609759999998 32 1491.87386953442 13 47.2361683859605 23 -301.609759999998 33 1491.87386953442 70 1 0 3DFACE 8 rotator_half 10 60.1201784885394 20 -301.609759999998 30 1502.4475273507 11 47.2361683859607 21 -327.009759999998 31 1491.87386953442 12 60.1201784885396 22 -327.009759999998 32 1502.4475273507 13 60.1201784885396 23 -327.009759999998 33 1502.4475273507 70 1 0 3DFACE 8 rotator_half 10 70.6938076414486 20 -327.009759999998 30 1515.3315609767 11 60.1201784885394 21 -301.609759999998 31 1502.4475273507 12 60.1201784885396 22 -327.009759999998 32 1502.4475273507 13 60.1201784885396 23 -327.009759999998 33 1502.4475273507 70 1 0 3DFACE 8 rotator_half 10 60.1201784885394 20 -301.609759999998 30 1502.4475273507 11 70.6938076414486 21 -327.009759999998 31 1515.3315609767 12 70.6938076414485 22 -301.609759999998 32 1515.3315609767 13 70.6938076414485 23 -301.609759999998 33 1515.3315609767 70 1 0 3DFACE 8 rotator_half 10 78.550717206101 20 -327.009759999998 30 1530.03084422562 11 70.6938076414485 21 -301.609759999998 31 1515.3315609767 12 70.6938076414486 22 -327.009759999998 32 1515.3315609767 13 70.6938076414486 23 -327.009759999998 33 1515.3315609767 70 1 0 3DFACE 8 rotator_half 10 70.6938076414485 20 -301.609759999998 30 1515.3315609767 11 78.550717206101 21 -327.009759999998 31 1530.03084422562 12 78.5507172061008 22 -301.609759999998 32 1530.03084422562 13 78.5507172061008 23 -301.609759999998 33 1530.03084422562 70 1 0 3DFACE 8 rotator_half 10 83.3889705541327 20 -327.009759999998 30 1545.98049188567 11 78.5507172061008 21 -301.609759999998 31 1530.03084422562 12 78.550717206101 22 -327.009759999998 32 1530.03084422562 13 78.550717206101 23 -327.009759999998 33 1530.03084422562 70 1 0 3DFACE 8 rotator_half 10 78.5507172061008 20 -301.609759999998 30 1530.03084422562 11 83.3889705541327 21 -327.009759999998 31 1545.98049188567 12 83.3889705541326 22 -301.609759999998 32 1545.98049188567 13 83.3889705541326 23 -301.609759999998 33 1545.98049188567 70 1 0 3DFACE 8 rotator_half 10 85.0226363227028 20 -327.009759999999 30 1562.56756794191 11 83.3889705541326 21 -301.609759999998 31 1545.98049188567 12 83.3889705541327 22 -327.009759999998 32 1545.98049188567 13 83.3889705541327 23 -327.009759999998 33 1545.98049188567 70 1 0 3DFACE 8 rotator_half 10 83.3889705541326 20 -301.609759999998 30 1545.98049188567 11 85.0226363227028 21 -327.009759999999 31 1562.56756794191 12 85.0226363227026 22 -301.609759999999 32 1562.56756794191 13 85.0226363227026 23 -301.609759999999 33 1562.56756794191 70 1 0 3DFACE 8 rotator_half 10 83.3889336524952 20 -327.009759999999 30 1579.15464036367 11 85.0226363227026 21 -301.609759999999 31 1562.56756794191 12 85.0226363227028 22 -327.009759999999 32 1562.56756794191 13 85.0226363227028 23 -327.009759999999 33 1562.56756794191 70 1 0 3DFACE 8 rotator_half 10 85.0226363227026 20 -301.609759999999 30 1562.56756794191 11 83.3889336524952 21 -327.009759999999 31 1579.15464036367 12 83.388933652495 22 -301.609759999999 32 1579.15464036367 13 83.388933652495 23 -301.609759999999 33 1579.15464036367 70 1 0 3DFACE 8 rotator_half 10 78.5506448209352 20 -327.009759999999 30 1595.1042772599 11 83.388933652495 21 -301.609759999999 31 1579.15464036367 12 83.3889336524952 22 -327.009759999999 32 1579.15464036367 13 83.3889336524952 23 -327.009759999999 33 1579.15464036367 70 1 0 3DFACE 8 rotator_half 10 83.388933652495 20 -301.609759999999 30 1579.15464036367 11 78.5506448209352 21 -327.009759999999 31 1595.1042772599 12 78.550644820935 22 -301.609759999999 32 1595.1042772599 13 78.550644820935 23 -301.609759999999 33 1595.1042772599 70 1 0 3DFACE 8 rotator_half 10 70.6937025544759 20 -327.009759999999 30 1609.80354302934 11 78.550644820935 21 -301.609759999999 31 1595.1042772599 12 78.5506448209352 22 -327.009759999999 32 1595.1042772599 13 78.5506448209352 23 -327.009759999999 33 1595.1042772599 70 1 0 3DFACE 8 rotator_half 10 78.550644820935 20 -301.609759999999 30 1595.1042772599 11 70.6937025544759 21 -327.009759999999 31 1609.80354302934 12 70.6937025544757 22 -301.609759999999 32 1609.80354302934 13 70.6937025544757 23 -301.609759999999 33 1609.80354302934 70 1 0 3DFACE 8 rotator_half 10 60.1200447381933 20 -327.00976 30 1622.68755313192 11 70.6937025544757 21 -301.609759999999 31 1609.80354302934 12 70.6937025544759 22 -327.009759999999 32 1609.80354302934 13 70.6937025544759 23 -327.009759999999 33 1609.80354302934 70 1 0 3DFACE 8 rotator_half 10 70.6937025544757 20 -301.609759999999 30 1609.80354302934 11 60.1200447381933 21 -327.00976 31 1622.68755313192 12 60.1200447381932 22 -301.60976 32 1622.68755313192 13 60.1200447381932 23 -301.60976 33 1622.68755313192 70 1 0 3DFACE 8 rotator_half 10 60.1200447381933 20 -327.00976 30 1622.68755313192 11 47.2360111121915 21 -301.60976 31 1633.26118228483 12 60.1200447381932 22 -301.60976 32 1622.68755313192 13 60.1200447381932 23 -301.60976 33 1622.68755313192 70 1 0 3DFACE 8 rotator_half 10 47.2360111121915 20 -301.60976 30 1633.26118228483 11 60.1200447381933 21 -327.00976 31 1622.68755313192 12 47.2360111121917 22 -327.00976 32 1633.26118228483 13 47.2360111121917 23 -327.00976 33 1633.26118228483 70 1 0 3DFACE 8 rotator_half 10 47.2360111121917 20 -327.00976 30 1633.26118228483 11 32.5367278632687 21 -301.60976 31 1641.11809184948 12 47.2360111121915 22 -301.60976 32 1633.26118228483 13 47.2360111121915 23 -301.60976 33 1633.26118228483 70 1 0 3DFACE 8 rotator_half 10 32.5367278632687 20 -301.60976 30 1641.11809184948 11 47.2360111121917 21 -327.00976 31 1633.26118228483 12 32.5367278632689 22 -327.00976 32 1641.11809184948 13 32.5367278632689 23 -327.00976 33 1641.11809184948 70 1 0 3DFACE 8 rotator_half 10 32.5367278632689 20 -327.00976 30 1641.11809184948 11 16.5870802032278 21 -301.60976 31 1645.95634519751 12 32.5367278632687 22 -301.60976 32 1641.11809184948 13 32.5367278632687 23 -301.60976 33 1641.11809184948 70 1 0 3DFACE 8 rotator_half 10 16.5870802032278 20 -301.60976 30 1645.95634519751 11 32.5367278632689 21 -327.00976 31 1641.11809184948 12 16.587080203228 22 -327.00976 32 1645.95634519751 13 16.587080203228 23 -327.00976 33 1645.95634519751 70 1 0 3DFACE 8 rotator_half 10 -29.7122224515915 20 -140.14704 30 1681.41639731326 11 -27.4505026299641 21 -2.12061479487602e-12 31 1670.04601633937 12 -27.4505026299636 22 -140.14704 32 1670.04601633937 13 -27.4505026299636 23 -140.14704 33 1670.04601633937 70 1 0 3DFACE 8 rotator_half 10 -27.4505026299641 20 -2.12061479487602e-12 30 1670.04601633937 11 -29.7122224515915 21 -140.14704 31 1681.41639731326 12 -29.7122224515919 22 -2.16573425859679e-12 32 1681.41639731326 13 -29.7122224515919 23 -2.16573425859679e-12 33 1681.41639731326 70 1 0 3DFACE 8 rotator_half 10 11.3704272911448 20 -2.03037586743449e-12 30 1653.96590077154 11 4.63172537816581e-05 21 -140.14704 31 1651.70418094992 12 4.63172533769929e-05 22 -2.03037586743449e-12 32 1651.70418094992 13 4.63172533769929e-05 23 -2.03037586743449e-12 33 1651.70418094992 70 1 0 3DFACE 8 rotator_half 10 4.63172537816581e-05 20 -140.14704 30 1651.70418094992 11 11.3704272911448 21 -2.03037586743449e-12 31 1653.96590077154 12 11.3704272911452 22 -140.14704 32 1653.96590077155 13 11.3704272911452 23 -140.14704 33 1653.96590077155 70 1 0 3DFACE 8 rotator_half 10 -27.450522684681 20 -140.14704 30 1692.78678227628 11 -21.0097266163854 21 -2.16573425859679e-12 31 1702.42613319061 12 -27.4505226846814 22 -2.16573425859679e-12 32 1692.78678227628 13 -27.4505226846814 23 -2.16573425859679e-12 33 1692.78678227628 70 1 0 3DFACE 8 rotator_half 10 -21.0097266163854 20 -2.16573425859679e-12 30 1702.42613319061 11 -27.450522684681 21 -140.14704 31 1692.78678227628 12 -21.009726616385 22 -140.14704 32 1702.42613319061 13 -21.009726616385 23 -140.14704 33 1702.42613319061 70 1 0 3DFACE 8 rotator_half 10 27.4505629136862 20 -1.98525640371372e-12 30 1670.04606475574 11 21.0097668453905 21 -140.14704 31 1660.40671384141 12 21.0097668453901 22 -1.98525640371372e-12 32 1660.40671384141 13 21.0097668453901 23 -1.98525640371372e-12 33 1660.40671384141 70 1 0 3DFACE 8 rotator_half 10 21.0097668453905 20 -140.14704 30 1660.40671384141 11 27.4505629136862 21 -1.98525640371372e-12 31 1670.04606475574 12 27.4505629136866 22 -140.14704 32 1670.04606475574 13 27.4505629136866 23 -140.14704 33 1670.04606475574 70 1 0 3DFACE 8 rotator_half 10 -29.7122224515915 20 -140.14704 30 1681.41639731326 11 -27.4505226846814 21 -2.16573425859679e-12 31 1692.78678227628 12 -29.7122224515919 22 -2.16573425859679e-12 32 1681.41639731326 13 -29.7122224515919 23 -2.16573425859679e-12 33 1681.41639731326 70 1 0 3DFACE 8 rotator_half 10 -27.4505226846814 20 -2.16573425859679e-12 30 1692.78678227628 11 -29.7122224515915 21 -140.14704 31 1681.41639731326 12 -27.450522684681 22 -140.14704 32 1692.78678227628 13 -27.450522684681 23 -140.14704 33 1692.78678227628 70 1 0 3DFACE 8 rotator_half 10 4.63172537816581e-05 20 -140.14704 30 1651.70418094992 11 -11.3703386457694 21 -2.07549533115525e-12 31 1653.96588071683 12 4.63172533769929e-05 22 -2.03037586743449e-12 32 1651.70418094992 13 4.63172533769929e-05 23 -2.03037586743449e-12 33 1651.70418094992 70 1 0 3DFACE 8 rotator_half 10 -11.3703386457694 20 -2.07549533115525e-12 30 1653.96588071683 11 4.63172537816581e-05 21 -140.14704 31 1651.70418094992 12 -11.370338645769 22 -140.14704 32 1653.96588071683 13 -11.370338645769 23 -140.14704 33 1653.96588071683 70 1 0 3DFACE 8 rotator_half 10 -11.3703870621396 20 -140.14704 30 1708.86694626048 11 -6.0882486421221e-06 21 -2.12061479487602e-12 31 1711.12866608211 12 -11.37038706214 22 -2.12061479487602e-12 32 1708.86694626048 13 -11.37038706214 23 -2.12061479487602e-12 33 1708.86694626048 70 1 0 3DFACE 8 rotator_half 10 -6.0882486421221e-06 20 -2.12061479487602e-12 30 1711.12866608211 11 -11.3703870621396 21 -140.14704 31 1708.86694626048 12 -6.08824821207721e-06 22 -140.14704 32 1711.12866608211 13 -6.08824821207721e-06 23 -140.14704 33 1711.12866608211 70 1 0 ENDSEC 0 EOF xscreensaver-5.36/hacks/glx/splitflap.dxf000644 000767 000024 00000037766 12521736635 020557 0ustar00jwzstaff000000 000000 0 SECTION 2 ENTITIES 0 3DFACE 8 fin_face_half 10 -33.50000000000001 20 -1.2499999999999996 30 34.82654508887018 11 -33.500000000000014 21 -1.2499999999999996 31 30.826545088870194 12 -5.639932965095795e-15 22 -1.2499999999999996 32 30.826545088870194 13 -5.639932965095795e-15 23 -1.2499999999999996 33 30.826545088870194 70 0 0 3DFACE 8 fin_face_half 10 -33.500000000000014 20 -1.2499999999999996 30 30.826545088870194 11 -37.50000000000001 21 -1.2499999999999996 31 30.826545088870187 12 -33.50000000000001 22 -1.2499999999999996 32 17.66327254443509 13 -33.50000000000001 23 -1.2499999999999996 33 17.66327254443509 70 0 0 3DFACE 8 fin_face_half 10 -33.500000000000014 20 -1.2499999999999996 30 30.826545088870194 11 -33.50000000000001 21 -1.2499999999999996 31 17.66327254443509 12 -5.639932965095795e-15 22 -1.2499999999999996 32 30.826545088870194 13 -5.639932965095795e-15 23 -1.2499999999999996 33 30.826545088870194 70 0 0 3DFACE 8 fin_face_half 10 -5.639932965095795e-15 20 -1.2499999999999996 30 30.826545088870194 11 -33.50000000000001 21 -1.2499999999999996 31 17.66327254443509 12 -5.639932965095795e-15 22 -1.2499999999999996 32 17.66327254443509 13 -5.639932965095795e-15 23 -1.2499999999999996 33 17.66327254443509 70 0 0 3DFACE 8 fin_face_half 10 -33.50000000000001 20 -1.2499999999999996 30 34.82654508887018 11 -5.639932965095795e-15 21 -1.2499999999999996 31 30.826545088870194 12 -5.639932965095795e-15 22 -1.2499999999999996 32 34.82654508887018 13 -5.639932965095795e-15 23 -1.2499999999999996 33 34.82654508887018 70 0 0 3DFACE 8 fin_face_half 10 -37.50000000000001 20 -1.2499999999999996 30 30.826545088870187 11 -37.50000000000001 21 -1.2499999999999996 31 17.66327254443509 12 -33.50000000000001 22 -1.2499999999999996 32 17.66327254443509 13 -33.50000000000001 23 -1.2499999999999996 33 17.66327254443509 70 0 0 3DFACE 8 fin_face_half 10 -33.50000000000001 20 -1.2499999999999996 30 17.66327254443509 11 -5.639932965095795e-15 21 -1.2499999999999996 31 0.49999999999999906 12 -5.639932965095795e-15 22 -1.2499999999999996 32 17.66327254443509 13 -5.639932965095795e-15 23 -1.2499999999999996 33 17.66327254443509 70 0 0 3DFACE 8 fin_face_half 10 -33.50000000000001 20 -1.2499999999999996 30 17.66327254443509 11 -33.50000000000001 21 -1.2499999999999996 31 0.49999999999999906 12 -5.639932965095795e-15 22 -1.2499999999999996 32 0.49999999999999906 13 -5.639932965095795e-15 23 -1.2499999999999996 33 0.49999999999999906 70 0 0 3DFACE 8 fin_face_half 10 -36.96410161513776 20 -1.2499999999999996 30 32.82654508887019 11 -37.50000000000001 21 -1.2499999999999996 31 30.826545088870187 12 -33.500000000000014 22 -1.2499999999999996 32 30.826545088870194 13 -33.500000000000014 23 -1.2499999999999996 33 30.826545088870194 70 0 0 3DFACE 8 fin_face_half 10 -35.50000000000001 20 -1.2499999999999996 30 34.29064670400795 11 -36.96410161513776 21 -1.2499999999999996 31 32.82654508887019 12 -33.500000000000014 22 -1.2499999999999996 32 30.826545088870194 13 -33.500000000000014 23 -1.2499999999999996 33 30.826545088870194 70 0 0 3DFACE 8 fin_face_half 10 -33.50000000000001 20 -1.2499999999999996 30 34.82654508887018 11 -35.50000000000001 21 -1.2499999999999996 31 34.29064670400795 12 -33.500000000000014 22 -1.2499999999999996 32 30.826545088870194 13 -33.500000000000014 23 -1.2499999999999996 33 30.826545088870194 70 0 0 3DFACE 8 disc_quarter 10 -34.0 20 -3.27117099240816 30 -1.6097177653715823e-14 11 -38.5 21 -3.2711709924081642 31 3.105896849114554 12 -38.50000000000001 22 -3.2711709924081416 32 -1.6919798895287383e-14 13 -38.50000000000001 23 -3.2711709924081416 33 -1.6919798895287383e-14 70 1 0 3DFACE 8 disc_quarter 10 -38.5 20 -3.2711709924081642 30 3.105896849114554 11 -34.0 21 -3.27117099240816 31 -1.6097177653715823e-14 12 -33.999999999999986 22 -3.2711709924081824 32 3.105896849114554 13 -33.999999999999986 23 -3.2711709924081824 33 3.105896849114554 70 1 0 3DFACE 8 disc_quarter 10 -33.999999999999986 20 -1.6634404790586517 30 9.106028809813777 11 -38.5 21 -3.2711709924081642 31 3.105896849114554 12 -33.999999999999986 22 -3.2711709924081824 32 3.105896849114554 13 -33.999999999999986 23 -3.2711709924081824 33 3.105896849114554 70 1 0 3DFACE 8 disc_quarter 10 -38.5 20 -3.2711709924081642 30 3.105896849114554 11 -33.999999999999986 21 -1.6634404790586517 31 9.106028809813777 12 -38.5 22 -1.6634404790586328 32 9.106028809813777 13 -38.5 23 -1.6634404790586328 33 9.106028809813777 70 1 0 3DFACE 8 disc_quarter 10 -33.999999999999986 20 1.4999999999999922 30 14.585268446263385 11 -38.5 21 -1.6634404790586328 31 9.106028809813777 12 -33.999999999999986 22 -1.6634404790586517 32 9.106028809813777 13 -33.999999999999986 23 -1.6634404790586517 33 9.106028809813777 70 1 0 3DFACE 8 disc_quarter 10 -38.5 20 -1.6634404790586328 30 9.106028809813777 11 -33.999999999999986 21 1.4999999999999922 31 14.585268446263385 12 -38.5 22 1.4999999999999922 32 14.585268446263385 13 -38.5 23 1.4999999999999922 33 14.585268446263385 70 1 0 3DFACE 8 disc_quarter 10 -38.5 20 1.4999999999999922 30 -1.6919798895287383e-14 11 -38.50000000000001 21 -3.2711709924081416 31 -1.6919798895287383e-14 12 -38.5 22 -3.2711709924081642 32 3.105896849114554 13 -38.5 23 -3.2711709924081642 33 3.105896849114554 70 0 0 3DFACE 8 disc_quarter 10 -38.5 20 1.4999999999999922 30 -1.6919798895287383e-14 11 -38.5 21 -3.2711709924081642 31 3.105896849114554 12 -38.5 22 -1.6634404790586328 32 9.106028809813777 13 -38.5 23 -1.6634404790586328 33 9.106028809813777 70 0 0 3DFACE 8 disc_quarter 10 -33.999999999999986 20 1.4999999999999922 30 14.585268446263385 11 -33.999999999999986 21 -1.6634404790586517 31 9.106028809813777 12 -33.999999999999986 22 1.4999999999999922 32 -1.4804824033376462e-14 13 -33.999999999999986 23 1.4999999999999922 33 -1.4804824033376462e-14 70 0 0 3DFACE 8 disc_quarter 10 -33.999999999999986 20 1.4999999999999922 30 -1.4804824033376462e-14 11 -33.999999999999986 21 -3.2711709924081824 31 3.105896849114554 12 -34.0 22 -3.27117099240816 32 -1.6097177653715823e-14 13 -34.0 23 -3.27117099240816 33 -1.6097177653715823e-14 70 0 0 3DFACE 8 disc_quarter 10 -33.999999999999986 20 1.4999999999999922 30 -1.4804824033376462e-14 11 -33.999999999999986 21 -1.6634404790586517 31 9.106028809813777 12 -33.999999999999986 22 -3.2711709924081824 32 3.105896849114554 13 -33.999999999999986 23 -3.2711709924081824 33 3.105896849114554 70 0 0 3DFACE 8 box_quarter_frame 10 5.639932965095795e-15 20 1.5000000000000084 30 35.826545088870176 11 -38.49999999999998 21 -1.9999999999999913 31 35.826545088870176 12 -38.499999999999986 22 1.5000000000000084 32 35.826545088870176 13 -38.499999999999986 23 1.5000000000000084 33 35.826545088870176 70 1 0 3DFACE 8 box_quarter_frame 10 -38.49999999999998 20 -1.9999999999999913 30 35.826545088870176 11 5.639932965095795e-15 21 1.5000000000000084 31 35.826545088870176 12 5.639932965095795e-15 22 -1.9999999999999913 32 35.826545088870176 13 5.639932965095795e-15 23 -1.9999999999999913 33 35.826545088870176 70 1 0 3DFACE 8 box_quarter_frame 10 -40.49999999999998 20 -1.9999999999999913 30 39.82654508887017 11 5.639932965095795e-15 21 2.500000000000008 31 39.82654508887017 12 -40.49999999999999 22 2.500000000000008 32 39.82654508887017 13 -40.49999999999999 23 2.500000000000008 33 39.82654508887017 70 1 0 3DFACE 8 box_quarter_frame 10 5.639932965095795e-15 20 2.500000000000008 30 39.82654508887017 11 -40.49999999999998 21 -1.9999999999999913 31 39.82654508887017 12 5.639932965095795e-15 22 -1.9999999999999913 32 39.82654508887017 13 5.639932965095795e-15 23 -1.9999999999999913 33 39.82654508887017 70 1 0 3DFACE 8 box_quarter_frame 10 5.639932965095795e-15 20 -1.9999999999999913 30 39.82654508887017 11 -38.49999999999998 21 -1.9999999999999913 31 35.826545088870176 12 5.639932965095795e-15 22 -1.9999999999999913 32 35.826545088870176 13 5.639932965095795e-15 23 -1.9999999999999913 33 35.826545088870176 70 1 0 3DFACE 8 box_quarter_frame 10 -38.49999999999998 20 -1.9999999999999913 30 35.826545088870176 11 5.639932965095795e-15 21 -1.9999999999999913 31 39.82654508887017 12 -40.49999999999998 22 -1.9999999999999913 32 35.826545088870176 13 -40.49999999999998 23 -1.9999999999999913 33 35.826545088870176 70 3 0 3DFACE 8 box_quarter_frame 10 -40.49999999999998 20 -1.9999999999999913 30 35.826545088870176 11 5.639932965095795e-15 21 -1.9999999999999913 31 39.82654508887017 12 -40.49999999999998 22 -1.9999999999999913 32 39.82654508887017 13 -40.49999999999998 23 -1.9999999999999913 33 39.82654508887017 70 1 0 3DFACE 8 box_quarter_frame 10 -40.49999999999999 20 2.500000000000008 30 39.82654508887017 11 -40.49999999999998 21 -1.9999999999999913 31 35.826545088870176 12 -40.49999999999998 22 -1.9999999999999913 32 39.82654508887017 13 -40.49999999999998 23 -1.9999999999999913 33 39.82654508887017 70 1 0 3DFACE 8 box_quarter_frame 10 -40.49999999999998 20 -1.9999999999999913 30 35.826545088870176 11 -40.49999999999999 21 2.500000000000008 31 39.82654508887017 12 -40.49999999999999 22 2.500000000000008 32 35.826545088870176 13 -40.49999999999999 23 2.500000000000008 33 35.826545088870176 70 1 0 3DFACE 8 box_quarter_frame 10 -40.49999999999999 20 2.500000000000008 30 35.826545088870176 11 -40.49999999999998 21 -1.9999999999999913 31 -0.0017362311270455954 12 -40.49999999999998 22 -1.9999999999999913 32 35.826545088870176 13 -40.49999999999998 23 -1.9999999999999913 33 35.826545088870176 70 1 0 3DFACE 8 box_quarter_frame 10 -40.49999999999998 20 -1.9999999999999913 30 -0.0017362311270455954 11 -40.49999999999999 21 2.500000000000008 31 35.826545088870176 12 -40.49999999999999 22 2.500000000000008 32 -0.0017362311270455954 13 -40.49999999999999 23 2.500000000000008 33 -0.0017362311270455954 70 1 0 3DFACE 8 box_quarter_frame 10 -38.5 20 -2.023352891115778 30 -1.6919798895287383e-14 11 -40.49999999999998 21 -1.9999999999999913 31 35.826545088870176 12 -40.49999999999998 22 -1.9999999999999913 32 -0.0017362311270455954 13 -40.49999999999998 23 -1.9999999999999913 33 -0.0017362311270455954 70 1 0 3DFACE 8 box_quarter_frame 10 -40.49999999999998 20 -1.9999999999999913 30 35.826545088870176 11 -38.5 21 -2.023352891115778 31 -1.6919798895287383e-14 12 -38.49999999999998 22 -1.9999999999999913 32 35.826545088870176 13 -38.49999999999998 23 -1.9999999999999913 33 35.826545088870176 70 1 0 3DFACE 8 box_quarter_frame 10 -38.499999999999986 20 1.500000000000011 30 -1.6919798895287383e-14 11 -38.49999999999998 21 -1.9999999999999913 31 35.826545088870176 12 -38.5 22 -2.023352891115778 32 -1.6919798895287383e-14 13 -38.5 23 -2.023352891115778 33 -1.6919798895287383e-14 70 1 0 3DFACE 8 box_quarter_frame 10 -38.49999999999998 20 -1.9999999999999913 30 35.826545088870176 11 -38.499999999999986 21 1.500000000000011 31 -1.6919798895287383e-14 12 -38.499999999999986 22 1.5000000000000084 32 35.826545088870176 13 -38.499999999999986 23 1.5000000000000084 33 35.826545088870176 70 1 0 3DFACE 8 box_quarter_frame 10 5.639932965095795e-15 20 1.5000000000000084 30 35.826545088870176 11 -38.499999999999986 21 1.500000000000011 31 -1.6919798895287383e-14 12 5.639932965095795e-15 22 1.5000000000000084 32 -2.255973186038318e-14 13 5.639932965095795e-15 23 1.5000000000000084 33 -2.255973186038318e-14 70 1 0 3DFACE 8 box_quarter_frame 10 -38.499999999999986 20 1.500000000000011 30 -1.6919798895287383e-14 11 5.639932965095795e-15 21 1.5000000000000084 31 35.826545088870176 12 -38.499999999999986 22 1.5000000000000084 32 35.826545088870176 13 -38.499999999999986 23 1.5000000000000084 33 35.826545088870176 70 1 0 3DFACE 8 fin_edge_half 10 -33.49999999999999 20 0.25000000000000006 30 17.66327254443509 11 -37.49999999999999 21 -1.2499999999999996 31 17.66327254443509 12 -37.49999999999999 22 0.25000000000000006 32 17.66327254443509 13 -37.49999999999999 23 0.25000000000000006 33 17.66327254443509 70 1 0 3DFACE 8 fin_edge_half 10 -37.49999999999999 20 -1.2499999999999996 30 17.66327254443509 11 -33.49999999999999 21 0.25000000000000006 31 17.66327254443509 12 -33.49999999999999 22 -1.2499999999999996 32 17.66327254443509 13 -33.49999999999999 23 -1.2499999999999996 33 17.66327254443509 70 1 0 3DFACE 8 fin_edge_half 10 -37.49999999999999 20 0.25000000000000006 30 30.826545088870187 11 -37.49999999999999 21 -1.2499999999999996 31 17.66327254443509 12 -37.49999999999999 22 -1.2499999999999996 32 30.826545088870187 13 -37.49999999999999 23 -1.2499999999999996 33 30.826545088870187 70 1 0 3DFACE 8 fin_edge_half 10 -37.49999999999999 20 -1.2499999999999996 30 17.66327254443509 11 -37.49999999999999 21 0.25000000000000006 31 30.826545088870187 12 -37.49999999999999 22 0.25000000000000006 32 17.66327254443509 13 -37.49999999999999 23 0.25000000000000006 33 17.66327254443509 70 1 0 3DFACE 8 fin_edge_half 10 5.639932965095795e-15 20 -1.2499999999999996 30 34.82654508887018 11 -33.49999999999999 21 0.25000000000000006 31 34.82654508887018 12 -33.49999999999999 22 -1.2499999999999996 32 34.82654508887018 13 -33.49999999999999 23 -1.2499999999999996 33 34.82654508887018 70 1 0 3DFACE 8 fin_edge_half 10 -33.49999999999999 20 0.25000000000000006 30 34.82654508887018 11 5.639932965095795e-15 21 -1.2499999999999996 31 34.82654508887018 12 5.639932965095795e-15 22 0.25000000000000006 32 34.82654508887018 13 5.639932965095795e-15 23 0.25000000000000006 33 34.82654508887018 70 1 0 3DFACE 8 fin_edge_half 10 5.639932965095795e-15 20 0.25000000000000006 30 0.49999999999999906 11 -33.49999999999999 21 -1.2499999999999996 31 0.49999999999999906 12 -33.49999999999999 22 0.25000000000000006 32 0.49999999999999906 13 -33.49999999999999 23 0.25000000000000006 33 0.49999999999999906 70 1 0 3DFACE 8 fin_edge_half 10 -33.49999999999999 20 -1.2499999999999996 30 0.49999999999999906 11 5.639932965095795e-15 21 0.25000000000000006 31 0.49999999999999906 12 5.639932965095795e-15 22 -1.2499999999999996 32 0.49999999999999906 13 5.639932965095795e-15 23 -1.2499999999999996 33 0.49999999999999906 70 1 0 3DFACE 8 fin_edge_half 10 -33.49999999999999 20 0.25000000000000006 30 17.66327254443509 11 -33.49999999999999 21 -1.2499999999999996 31 0.49999999999999906 12 -33.49999999999999 22 -1.2499999999999996 32 17.66327254443509 13 -33.49999999999999 23 -1.2499999999999996 33 17.66327254443509 70 1 0 3DFACE 8 fin_edge_half 10 -33.49999999999999 20 -1.2499999999999996 30 0.49999999999999906 11 -33.49999999999999 21 0.25000000000000006 31 17.66327254443509 12 -33.49999999999999 22 0.25000000000000006 32 0.49999999999999906 13 -33.49999999999999 23 0.25000000000000006 33 0.49999999999999906 70 1 0 3DFACE 8 fin_edge_half 10 -36.96410161513774 20 0.25000000000000006 30 32.82654508887019 11 -37.49999999999999 21 -1.2499999999999996 31 30.826545088870187 12 -36.96410161513774 22 -1.2499999999999996 32 32.82654508887019 13 -36.96410161513774 23 -1.2499999999999996 33 32.82654508887019 70 1 0 3DFACE 8 fin_edge_half 10 -37.49999999999999 20 -1.2499999999999996 30 30.826545088870187 11 -36.96410161513774 21 0.25000000000000006 31 32.82654508887019 12 -37.49999999999999 22 0.25000000000000006 32 30.826545088870187 13 -37.49999999999999 23 0.25000000000000006 33 30.826545088870187 70 1 0 3DFACE 8 fin_edge_half 10 -35.5 20 0.25000000000000006 30 34.29064670400795 11 -36.96410161513774 21 -1.2499999999999996 31 32.82654508887019 12 -35.5 22 -1.2499999999999996 32 34.29064670400795 13 -35.5 23 -1.2499999999999996 33 34.29064670400795 70 1 0 3DFACE 8 fin_edge_half 10 -36.96410161513774 20 -1.2499999999999996 30 32.82654508887019 11 -35.5 21 0.25000000000000006 31 34.29064670400795 12 -36.96410161513774 22 0.25000000000000006 32 32.82654508887019 13 -36.96410161513774 23 0.25000000000000006 33 32.82654508887019 70 1 0 3DFACE 8 fin_edge_half 10 -33.49999999999999 20 -1.2499999999999996 30 34.82654508887018 11 -35.5 21 0.25000000000000006 31 34.29064670400795 12 -35.5 22 -1.2499999999999996 32 34.29064670400795 13 -35.5 23 -1.2499999999999996 33 34.29064670400795 70 1 0 3DFACE 8 fin_edge_half 10 -35.5 20 0.25000000000000006 30 34.29064670400795 11 -33.49999999999999 21 -1.2499999999999996 31 34.82654508887018 12 -33.49999999999999 22 0.25000000000000006 32 34.82654508887018 13 -33.49999999999999 23 0.25000000000000006 33 34.82654508887018 70 1 0 ENDSEC 0 EOF xscreensaver-5.36/hacks/glx/toast.dxf000644 000767 000024 00000031636 07634066633 017704 0ustar00jwzstaff000000 000000 0 SECTION 2 HEADER 0 ENDSEC 0 SECTION 2 ENTITIES 0 3DFACE 8 0 62 55 10 307.550490 20 -392.424732 30 37.623432 11 -303.422838 21 -392.424732 31 -37.623432 12 307.550490 22 -392.424732 32 -37.623432 13 307.550490 23 -392.424732 33 -37.623432 0 3DFACE 8 0 62 55 10 -303.422838 20 -392.424732 30 -37.623432 11 307.550490 21 -392.424732 31 37.623432 12 -303.422838 22 -392.424732 32 37.623432 13 -303.422838 23 -392.424732 33 37.623432 0 3DFACE 8 0 62 55 10 351.717412 20 -334.679514 30 -37.623432 11 307.550490 21 -392.424732 31 37.623432 12 307.550490 22 -392.424732 32 -37.623432 13 307.550490 23 -392.424732 33 -37.623432 0 3DFACE 8 0 62 55 10 307.550490 20 -392.424732 30 37.623432 11 351.717412 21 -334.679514 31 -37.623432 12 351.717412 22 -334.679514 32 37.623432 13 351.717412 23 -334.679514 33 37.623432 0 3DFACE 8 0 62 55 10 351.717412 20 48.334405 30 -37.623432 11 351.717412 21 -334.679514 31 37.623432 12 351.717412 22 -334.679514 32 -37.623432 13 351.717412 23 -334.679514 33 -37.623432 0 3DFACE 8 0 62 55 10 351.717412 20 -334.679514 30 37.623432 11 351.717412 21 48.334405 31 -37.623432 12 351.717412 22 48.334405 32 37.623432 13 351.717412 23 48.334405 33 37.623432 0 3DFACE 8 0 62 55 10 -303.422838 20 344.130963 30 37.623432 11 -351.717412 21 194.126040 31 -37.623432 12 -351.717412 22 194.126040 32 37.623432 13 -351.717412 23 194.126040 33 37.623432 0 3DFACE 8 0 62 55 10 -351.717412 20 194.126040 30 -37.623432 11 -303.422838 21 344.130963 31 37.623432 12 -303.422838 22 344.130963 32 -37.623432 13 -303.422838 23 344.130963 33 -37.623432 0 3DFACE 8 0 62 55 10 -351.717412 20 194.126040 30 37.623432 11 -351.717412 21 144.965619 31 -37.623432 12 -351.717412 22 144.965619 32 37.623432 13 -351.717412 23 144.965619 33 37.623432 0 3DFACE 8 0 62 55 10 -351.717412 20 144.965619 30 -37.623432 11 -351.717412 21 194.126040 31 37.623432 12 -351.717412 22 194.126040 32 -37.623432 13 -351.717412 23 194.126040 33 -37.623432 0 3DFACE 8 0 62 55 10 -303.422838 20 344.130963 30 37.623432 11 -153.447717 21 392.424732 31 -37.623432 12 -303.422838 22 344.130963 32 -37.623432 13 -303.422838 23 344.130963 33 -37.623432 0 3DFACE 8 0 62 55 10 -153.447717 20 392.424732 30 -37.623432 11 -303.422838 21 344.130963 31 37.623432 12 -153.447717 22 392.424732 32 37.623432 13 -153.447717 23 392.424732 33 37.623432 0 3DFACE 8 0 62 55 10 351.717412 20 194.126040 30 -37.623432 11 351.717412 21 144.965619 31 37.623432 12 351.717412 22 144.965619 32 -37.623432 13 351.717412 23 144.965619 33 -37.623432 0 3DFACE 8 0 62 55 10 351.717412 20 144.965619 30 37.623432 11 351.717412 21 194.126040 31 -37.623432 12 351.717412 22 194.126040 32 37.623432 13 351.717412 23 194.126040 33 37.623432 0 3DFACE 8 0 62 55 10 302.092403 20 344.130963 30 -37.623432 11 351.717412 21 194.126040 31 37.623432 12 351.717412 22 194.126040 32 -37.623432 13 351.717412 23 194.126040 33 -37.623432 0 3DFACE 8 0 62 55 10 351.717412 20 194.126040 30 37.623432 11 302.092403 21 344.130963 31 -37.623432 12 302.092403 22 344.130963 32 37.623432 13 302.092403 23 344.130963 33 37.623432 0 3DFACE 8 0 62 55 10 -303.422838 20 344.130963 30 -37.623432 11 -351.717412 21 144.965619 31 -37.623432 12 -351.717412 22 194.126040 32 -37.623432 13 -351.717412 23 194.126040 33 -37.623432 0 3DFACE 8 0 62 55 10 -351.717412 20 144.965619 30 -37.623432 11 -303.422838 21 344.130963 31 -37.623432 12 -309.341788 22 95.805228 32 -37.623432 13 -309.341788 23 95.805228 33 -37.623432 0 3DFACE 8 0 62 55 10 351.717412 20 194.126040 30 -37.623432 11 302.092403 21 95.805228 31 -37.623432 12 302.092403 22 344.130963 32 -37.623432 13 302.092403 23 344.130963 33 -37.623432 0 3DFACE 8 0 62 55 10 302.092403 20 95.805228 30 -37.623432 11 351.717412 21 194.126040 31 -37.623432 12 351.717412 22 144.965619 32 -37.623432 13 351.717412 23 144.965619 33 -37.623432 0 3DFACE 8 0 62 55 10 -309.341788 20 95.805228 30 -37.623432 11 -351.717412 21 -334.679514 31 -37.623432 12 -351.717412 22 48.334405 32 -37.623432 13 -351.717412 23 48.334405 33 -37.623432 0 3DFACE 8 0 62 55 10 -351.717412 20 -334.679514 30 -37.623432 11 -309.341788 21 95.805228 31 -37.623432 12 -303.422838 22 -392.424732 32 -37.623432 13 -303.422838 23 -392.424732 33 -37.623432 0 3DFACE 8 0 62 55 10 -303.422838 20 -392.424732 30 -37.623432 11 -309.341788 21 95.805228 31 -37.623432 12 -303.422838 22 344.130963 32 -37.623432 13 -303.422838 23 344.130963 33 -37.623432 0 3DFACE 8 0 62 55 10 -303.422838 20 -392.424732 30 -37.623432 11 -303.422838 21 344.130963 31 -37.623432 12 -153.447717 22 392.424732 32 -37.623432 13 -153.447717 23 392.424732 33 -37.623432 0 3DFACE 8 0 62 55 10 -303.422838 20 -392.424732 30 -37.623432 11 -153.447717 21 392.424732 31 -37.623432 12 307.550490 22 -392.424732 32 -37.623432 13 307.550490 23 -392.424732 33 -37.623432 0 3DFACE 8 0 62 55 10 307.550490 20 -392.424732 30 -37.623432 11 -153.447717 21 392.424732 31 -37.623432 12 151.653573 22 392.424732 32 -37.623432 13 151.653573 23 392.424732 33 -37.623432 0 3DFACE 8 0 62 55 10 307.550490 20 -392.424732 30 -37.623432 11 151.653573 21 392.424732 31 -37.623432 12 302.092403 22 95.805228 32 -37.623432 13 302.092403 23 95.805228 33 -37.623432 0 3DFACE 8 0 62 55 10 302.092403 20 95.805228 30 -37.623432 11 151.653573 21 392.424732 31 -37.623432 12 302.092403 22 344.130963 32 -37.623432 13 302.092403 23 344.130963 33 -37.623432 0 3DFACE 8 0 62 55 10 307.550490 20 -392.424732 30 -37.623432 11 302.092403 21 95.805228 31 -37.623432 12 351.717412 22 48.334405 32 -37.623432 13 351.717412 23 48.334405 33 -37.623432 0 3DFACE 8 0 62 55 10 307.550490 20 -392.424732 30 -37.623432 11 351.717412 21 48.334405 31 -37.623432 12 351.717412 22 -334.679514 32 -37.623432 13 351.717412 23 -334.679514 33 -37.623432 0 3DFACE 8 0 62 55 10 151.653573 20 392.424732 30 37.623432 11 302.092403 21 344.130963 31 -37.623432 12 151.653573 22 392.424732 32 -37.623432 13 151.653573 23 392.424732 33 -37.623432 0 3DFACE 8 0 62 55 10 302.092403 20 344.130963 30 -37.623432 11 151.653573 21 392.424732 31 37.623432 12 302.092403 22 344.130963 32 37.623432 13 302.092403 23 344.130963 33 37.623432 0 3DFACE 8 0 62 55 10 -153.447717 20 392.424732 30 37.623432 11 151.653573 21 392.424732 31 -37.623432 12 -153.447717 22 392.424732 32 -37.623432 13 -153.447717 23 392.424732 33 -37.623432 0 3DFACE 8 0 62 55 10 151.653573 20 392.424732 30 -37.623432 11 -153.447717 21 392.424732 31 37.623432 12 151.653573 22 392.424732 32 37.623432 13 151.653573 23 392.424732 33 37.623432 0 3DFACE 8 0 62 55 10 302.092403 20 95.805228 30 37.623432 11 351.717412 21 48.334405 31 -37.623432 12 302.092403 22 95.805228 32 -37.623432 13 302.092403 23 95.805228 33 -37.623432 0 3DFACE 8 0 62 55 10 351.717412 20 48.334405 30 -37.623432 11 302.092403 21 95.805228 31 37.623432 12 351.717412 22 48.334405 32 37.623432 13 351.717412 23 48.334405 33 37.623432 0 3DFACE 8 0 62 55 10 -351.717412 20 48.334405 30 37.623432 11 -351.717412 21 -334.679514 31 -37.623432 12 -351.717412 22 -334.679514 32 37.623432 13 -351.717412 23 -334.679514 33 37.623432 0 3DFACE 8 0 62 55 10 -351.717412 20 -334.679514 30 -37.623432 11 -351.717412 21 48.334405 31 37.623432 12 -351.717412 22 48.334405 32 -37.623432 13 -351.717412 23 48.334405 33 -37.623432 0 3DFACE 8 0 62 55 10 -351.717412 20 -334.679514 30 37.623432 11 -303.422838 21 -392.424732 31 -37.623432 12 -303.422838 22 -392.424732 32 37.623432 13 -303.422838 23 -392.424732 33 37.623432 0 3DFACE 8 0 62 55 10 -303.422838 20 -392.424732 30 -37.623432 11 -351.717412 21 -334.679514 31 37.623432 12 -351.717412 22 -334.679514 32 -37.623432 13 -351.717412 23 -334.679514 33 -37.623432 0 3DFACE 8 0 62 55 10 351.717412 20 144.965619 30 37.623432 11 302.092403 21 95.805228 31 -37.623432 12 351.717412 22 144.965619 32 -37.623432 13 351.717412 23 144.965619 33 -37.623432 0 3DFACE 8 0 62 55 10 302.092403 20 95.805228 30 -37.623432 11 351.717412 21 144.965619 31 37.623432 12 302.092403 22 95.805228 32 37.623432 13 302.092403 23 95.805228 33 37.623432 0 3DFACE 8 0 62 55 10 -309.341788 20 95.805228 30 37.623432 11 -351.717412 21 48.334405 31 -37.623432 12 -351.717412 22 48.334405 32 37.623432 13 -351.717412 23 48.334405 33 37.623432 0 3DFACE 8 0 62 55 10 -351.717412 20 48.334405 30 -37.623432 11 -309.341788 21 95.805228 31 37.623432 12 -309.341788 22 95.805228 32 -37.623432 13 -309.341788 23 95.805228 33 -37.623432 0 3DFACE 8 0 62 55 10 -351.717412 20 144.965619 30 37.623432 11 -309.341788 21 95.805228 31 -37.623432 12 -309.341788 22 95.805228 32 37.623432 13 -309.341788 23 95.805228 33 37.623432 0 3DFACE 8 0 62 55 10 -309.341788 20 95.805228 30 -37.623432 11 -351.717412 21 144.965619 31 37.623432 12 -351.717412 22 144.965619 32 -37.623432 13 -351.717412 23 144.965619 33 -37.623432 0 3DFACE 8 0 62 55 10 -303.422838 20 -392.424732 30 37.623432 11 -351.717412 21 48.334405 31 37.623432 12 -351.717412 22 -334.679514 32 37.623432 13 -351.717412 23 -334.679514 33 37.623432 0 3DFACE 8 0 62 55 10 -351.717412 20 48.334405 30 37.623432 11 -303.422838 21 -392.424732 31 37.623432 12 -309.341788 22 95.805228 32 37.623432 13 -309.341788 23 95.805228 33 37.623432 0 3DFACE 8 0 62 55 10 -309.341788 20 95.805228 30 37.623432 11 -351.717412 21 194.126040 31 37.623432 12 -351.717412 22 144.965619 32 37.623432 13 -351.717412 23 144.965619 33 37.623432 0 3DFACE 8 0 62 55 10 -351.717412 20 194.126040 30 37.623432 11 -309.341788 21 95.805228 31 37.623432 12 -303.422838 22 344.130963 32 37.623432 13 -303.422838 23 344.130963 33 37.623432 0 3DFACE 8 0 62 55 10 -303.422838 20 344.130963 30 37.623432 11 -309.341788 21 95.805228 31 37.623432 12 -303.422838 22 -392.424732 32 37.623432 13 -303.422838 23 -392.424732 33 37.623432 0 3DFACE 8 0 62 55 10 -303.422838 20 344.130963 30 37.623432 11 -303.422838 21 -392.424732 31 37.623432 12 307.550490 22 -392.424732 32 37.623432 13 307.550490 23 -392.424732 33 37.623432 0 3DFACE 8 0 62 55 10 -303.422838 20 344.130963 30 37.623432 11 307.550490 21 -392.424732 31 37.623432 12 -153.447717 22 392.424732 32 37.623432 13 -153.447717 23 392.424732 33 37.623432 0 3DFACE 8 0 62 55 10 -153.447717 20 392.424732 30 37.623432 11 307.550490 21 -392.424732 31 37.623432 12 151.653573 22 392.424732 32 37.623432 13 151.653573 23 392.424732 33 37.623432 0 3DFACE 8 0 62 55 10 151.653573 20 392.424732 30 37.623432 11 307.550490 21 -392.424732 31 37.623432 12 302.092403 22 95.805228 32 37.623432 13 302.092403 23 95.805228 33 37.623432 0 3DFACE 8 0 62 55 10 151.653573 20 392.424732 30 37.623432 11 302.092403 21 95.805228 31 37.623432 12 302.092403 22 344.130963 32 37.623432 13 302.092403 23 344.130963 33 37.623432 0 3DFACE 8 0 62 55 10 302.092403 20 95.805228 30 37.623432 11 307.550490 21 -392.424732 31 37.623432 12 351.717412 22 48.334405 32 37.623432 13 351.717412 23 48.334405 33 37.623432 0 3DFACE 8 0 62 55 10 351.717412 20 48.334405 30 37.623432 11 307.550490 21 -392.424732 31 37.623432 12 351.717412 22 -334.679514 32 37.623432 13 351.717412 23 -334.679514 33 37.623432 0 3DFACE 8 0 62 55 10 302.092403 20 95.805228 30 37.623432 11 351.717412 21 194.126040 31 37.623432 12 302.092403 22 344.130963 32 37.623432 13 302.092403 23 344.130963 33 37.623432 0 3DFACE 8 0 62 55 10 351.717412 20 194.126040 30 37.623432 11 302.092403 21 95.805228 31 37.623432 12 351.717412 22 144.965619 32 37.623432 13 351.717412 23 144.965619 33 37.623432 0 ENDSEC 0 EOF xscreensaver-5.36/hacks/glx/toast2.dxf000644 000767 000024 00000035100 07634066633 017754 0ustar00jwzstaff000000 000000 0 SECTION 2 HEADER 0 ENDSEC 0 SECTION 2 ENTITIES 0 3DFACE 8 0 62 55 10 -309.341788 20 95.805228 30 37.623432 11 -351.717412 21 48.334405 31 -37.623432 12 -351.717412 22 48.334405 32 37.623432 13 -351.717412 23 48.334405 33 37.623432 0 3DFACE 8 0 62 55 10 -351.717412 20 48.334405 30 -37.623432 11 -309.341788 21 95.805228 31 37.623432 12 -309.341788 22 95.805228 32 -37.623432 13 -309.341788 23 95.805228 33 -37.623432 0 3DFACE 8 0 62 55 10 -351.717412 20 144.965619 30 37.623432 11 -309.341788 21 95.805228 31 -37.623432 12 -309.341788 22 95.805228 32 37.623432 13 -309.341788 23 95.805228 33 37.623432 0 3DFACE 8 0 62 55 10 -309.341788 20 95.805228 30 -37.623432 11 -351.717412 21 144.965619 31 37.623432 12 -351.717412 22 144.965619 32 -37.623432 13 -351.717412 23 144.965619 33 -37.623432 0 3DFACE 8 0 62 55 10 351.717412 20 194.126040 30 -37.623432 11 302.092403 21 95.805228 31 -37.623432 12 302.092403 22 344.130963 32 -37.623432 13 302.092403 23 344.130963 33 -37.623432 0 3DFACE 8 0 62 55 10 302.092403 20 95.805228 30 -37.623432 11 351.717412 21 194.126040 31 -37.623432 12 351.717412 22 144.965619 32 -37.623432 13 351.717412 23 144.965619 33 -37.623432 0 3DFACE 8 0 62 55 10 -183.571503 20 157.927796 30 -37.623432 11 -351.717412 21 144.965619 31 -37.623432 12 -351.717412 22 194.126040 32 -37.623432 13 -351.717412 23 194.126040 33 -37.623432 0 3DFACE 8 0 62 55 10 -351.717412 20 144.965619 30 -37.623432 11 -183.571503 21 157.927796 31 -37.623432 12 -309.341788 22 95.805228 32 -37.623432 13 -309.341788 23 95.805228 33 -37.623432 0 3DFACE 8 0 62 55 10 -309.341788 20 95.805228 30 -37.623432 11 -183.571503 21 157.927796 31 -37.623432 12 -303.422838 22 -392.424732 32 -37.623432 13 -303.422838 23 -392.424732 33 -37.623432 0 3DFACE 8 0 62 55 10 -303.422838 20 -392.424732 30 -37.623432 11 -183.571503 21 157.927796 31 -37.623432 12 307.550490 22 -392.424732 32 -37.623432 13 307.550490 23 -392.424732 33 -37.623432 0 3DFACE 8 0 62 55 10 307.550490 20 -392.424732 30 -37.623432 11 -183.571503 21 157.927796 31 -37.623432 12 -72.484739 22 185.311958 32 -37.623432 13 -72.484739 23 185.311958 33 -37.623432 0 3DFACE 8 0 62 55 10 307.550490 20 -392.424732 30 -37.623432 11 -72.484739 21 185.311958 31 -37.623432 12 -0.897070 22 254.574299 32 -37.623432 13 -0.897070 23 254.574299 33 -37.623432 0 3DFACE 8 0 62 55 10 307.550490 20 -392.424732 30 -37.623432 11 -0.897070 21 254.574299 31 -37.623432 12 30.625457 22 392.424732 32 -37.623432 13 30.625457 23 392.424732 33 -37.623432 0 3DFACE 8 0 62 55 10 307.550490 20 -392.424732 30 -37.623432 11 30.625457 21 392.424732 31 -37.623432 12 151.653573 22 392.424732 32 -37.623432 13 151.653573 23 392.424732 33 -37.623432 0 3DFACE 8 0 62 55 10 307.550490 20 -392.424732 30 -37.623432 11 151.653573 21 392.424732 31 -37.623432 12 302.092403 22 95.805228 32 -37.623432 13 302.092403 23 95.805228 33 -37.623432 0 3DFACE 8 0 62 55 10 302.092403 20 95.805228 30 -37.623432 11 151.653573 21 392.424732 31 -37.623432 12 302.092403 22 344.130963 32 -37.623432 13 302.092403 23 344.130963 33 -37.623432 0 3DFACE 8 0 62 55 10 307.550490 20 -392.424732 30 -37.623432 11 302.092403 21 95.805228 31 -37.623432 12 351.717412 22 48.334405 32 -37.623432 13 351.717412 23 48.334405 33 -37.623432 0 3DFACE 8 0 62 55 10 307.550490 20 -392.424732 30 -37.623432 11 351.717412 21 48.334405 31 -37.623432 12 351.717412 22 -334.679514 32 -37.623432 13 351.717412 23 -334.679514 33 -37.623432 0 3DFACE 8 0 62 55 10 -309.341788 20 95.805228 30 -37.623432 11 -351.717412 21 -334.679514 31 -37.623432 12 -351.717412 22 48.334405 32 -37.623432 13 -351.717412 23 48.334405 33 -37.623432 0 3DFACE 8 0 62 55 10 -351.717412 20 -334.679514 30 -37.623432 11 -309.341788 21 95.805228 31 -37.623432 12 -303.422838 22 -392.424732 32 -37.623432 13 -303.422838 23 -392.424732 33 -37.623432 0 3DFACE 8 0 62 55 10 -303.422838 20 -392.424732 30 37.623432 11 -351.717412 21 48.334405 31 37.623432 12 -351.717412 22 -334.679514 32 37.623432 13 -351.717412 23 -334.679514 33 37.623432 0 3DFACE 8 0 62 55 10 -351.717412 20 48.334405 30 37.623432 11 -303.422838 21 -392.424732 31 37.623432 12 -309.341788 22 95.805228 32 37.623432 13 -309.341788 23 95.805228 33 37.623432 0 3DFACE 8 0 62 55 10 -309.341788 20 95.805228 30 37.623432 11 -351.717412 21 194.126040 31 37.623432 12 -351.717412 22 144.965619 32 37.623432 13 -351.717412 23 144.965619 33 37.623432 0 3DFACE 8 0 62 55 10 -351.717412 20 194.126040 30 37.623432 11 -309.341788 21 95.805228 31 37.623432 12 -183.571503 22 157.927796 32 37.623432 13 -183.571503 23 157.927796 33 37.623432 0 3DFACE 8 0 62 55 10 -183.571503 20 157.927796 30 37.623432 11 -309.341788 21 95.805228 31 37.623432 12 -303.422838 22 -392.424732 32 37.623432 13 -303.422838 23 -392.424732 33 37.623432 0 3DFACE 8 0 62 55 10 -183.571503 20 157.927796 30 37.623432 11 -303.422838 21 -392.424732 31 37.623432 12 307.550490 22 -392.424732 32 37.623432 13 307.550490 23 -392.424732 33 37.623432 0 3DFACE 8 0 62 55 10 -183.571503 20 157.927796 30 37.623432 11 307.550490 21 -392.424732 31 37.623432 12 -72.484739 22 185.311958 32 37.623432 13 -72.484739 23 185.311958 33 37.623432 0 3DFACE 8 0 62 55 10 -72.484739 20 185.311958 30 37.623432 11 307.550490 21 -392.424732 31 37.623432 12 -0.897070 22 254.574299 32 37.623432 13 -0.897070 23 254.574299 33 37.623432 0 3DFACE 8 0 62 55 10 -0.897070 20 254.574299 30 37.623432 11 307.550490 21 -392.424732 31 37.623432 12 30.625457 22 392.424732 32 37.623432 13 30.625457 23 392.424732 33 37.623432 0 3DFACE 8 0 62 55 10 30.625457 20 392.424732 30 37.623432 11 307.550490 21 -392.424732 31 37.623432 12 151.653573 22 392.424732 32 37.623432 13 151.653573 23 392.424732 33 37.623432 0 3DFACE 8 0 62 55 10 151.653573 20 392.424732 30 37.623432 11 307.550490 21 -392.424732 31 37.623432 12 302.092403 22 95.805228 32 37.623432 13 302.092403 23 95.805228 33 37.623432 0 3DFACE 8 0 62 55 10 151.653573 20 392.424732 30 37.623432 11 302.092403 21 95.805228 31 37.623432 12 302.092403 22 344.130963 32 37.623432 13 302.092403 23 344.130963 33 37.623432 0 3DFACE 8 0 62 55 10 302.092403 20 95.805228 30 37.623432 11 307.550490 21 -392.424732 31 37.623432 12 351.717412 22 48.334405 32 37.623432 13 351.717412 23 48.334405 33 37.623432 0 3DFACE 8 0 62 55 10 351.717412 20 48.334405 30 37.623432 11 307.550490 21 -392.424732 31 37.623432 12 351.717412 22 -334.679514 32 37.623432 13 351.717412 23 -334.679514 33 37.623432 0 3DFACE 8 0 62 55 10 302.092403 20 95.805228 30 37.623432 11 351.717412 21 194.126040 31 37.623432 12 302.092403 22 344.130963 32 37.623432 13 302.092403 23 344.130963 33 37.623432 0 3DFACE 8 0 62 55 10 351.717412 20 194.126040 30 37.623432 11 302.092403 21 95.805228 31 37.623432 12 351.717412 22 144.965619 32 37.623432 13 351.717412 23 144.965619 33 37.623432 0 3DFACE 8 0 62 55 10 -351.717412 20 194.126040 30 37.623432 11 -183.571503 21 157.927796 31 -37.623432 12 -351.717412 22 194.126040 32 -37.623432 13 -351.717412 23 194.126040 33 -37.623432 0 3DFACE 8 0 62 55 10 -183.571503 20 157.927796 30 -37.623432 11 -351.717412 21 194.126040 31 37.623432 12 -183.571503 22 157.927796 32 37.623432 13 -183.571503 23 157.927796 33 37.623432 0 3DFACE 8 0 62 55 10 30.625457 20 392.424732 30 37.623432 11 -0.897070 21 254.574299 31 -37.623432 12 -0.897070 22 254.574299 32 37.623432 13 -0.897070 23 254.574299 33 37.623432 0 3DFACE 8 0 62 55 10 -0.897070 20 254.574299 30 -37.623432 11 30.625457 21 392.424732 31 37.623432 12 30.625457 22 392.424732 32 -37.623432 13 30.625457 23 392.424732 33 -37.623432 0 3DFACE 8 0 62 55 10 -183.571503 20 157.927796 30 37.623432 11 -72.484739 21 185.311958 31 -37.623432 12 -183.571503 22 157.927796 32 -37.623432 13 -183.571503 23 157.927796 33 -37.623432 0 3DFACE 8 0 62 55 10 -72.484739 20 185.311958 30 -37.623432 11 -183.571503 21 157.927796 31 37.623432 12 -72.484739 22 185.311958 32 37.623432 13 -72.484739 23 185.311958 33 37.623432 0 3DFACE 8 0 62 55 10 -72.484739 20 185.311958 30 37.623432 11 -0.897070 21 254.574299 31 -37.623432 12 -72.484739 22 185.311958 32 -37.623432 13 -72.484739 23 185.311958 33 -37.623432 0 3DFACE 8 0 62 55 10 -0.897070 20 254.574299 30 -37.623432 11 -72.484739 21 185.311958 31 37.623432 12 -0.897070 22 254.574299 32 37.623432 13 -0.897070 23 254.574299 33 37.623432 0 3DFACE 8 0 62 55 10 -351.717412 20 194.126040 30 37.623432 11 -351.717412 21 144.965619 31 -37.623432 12 -351.717412 22 144.965619 32 37.623432 13 -351.717412 23 144.965619 33 37.623432 0 3DFACE 8 0 62 55 10 -351.717412 20 144.965619 30 -37.623432 11 -351.717412 21 194.126040 31 37.623432 12 -351.717412 22 194.126040 32 -37.623432 13 -351.717412 23 194.126040 33 -37.623432 0 3DFACE 8 0 62 55 10 30.625457 20 392.424732 30 37.623432 11 151.653573 21 392.424732 31 -37.623432 12 30.625457 22 392.424732 32 -37.623432 13 30.625457 23 392.424732 33 -37.623432 0 3DFACE 8 0 62 55 10 151.653573 20 392.424732 30 -37.623432 11 30.625457 21 392.424732 31 37.623432 12 151.653573 22 392.424732 32 37.623432 13 151.653573 23 392.424732 33 37.623432 0 3DFACE 8 0 62 55 10 151.653573 20 392.424732 30 37.623432 11 302.092403 21 344.130963 31 -37.623432 12 151.653573 22 392.424732 32 -37.623432 13 151.653573 23 392.424732 33 -37.623432 0 3DFACE 8 0 62 55 10 302.092403 20 344.130963 30 -37.623432 11 151.653573 21 392.424732 31 37.623432 12 302.092403 22 344.130963 32 37.623432 13 302.092403 23 344.130963 33 37.623432 0 3DFACE 8 0 62 55 10 302.092403 20 344.130963 30 -37.623432 11 351.717412 21 194.126040 31 37.623432 12 351.717412 22 194.126040 32 -37.623432 13 351.717412 23 194.126040 33 -37.623432 0 3DFACE 8 0 62 55 10 351.717412 20 194.126040 30 37.623432 11 302.092403 21 344.130963 31 -37.623432 12 302.092403 22 344.130963 32 37.623432 13 302.092403 23 344.130963 33 37.623432 0 3DFACE 8 0 62 55 10 351.717412 20 194.126040 30 -37.623432 11 351.717412 21 144.965619 31 37.623432 12 351.717412 22 144.965619 32 -37.623432 13 351.717412 23 144.965619 33 -37.623432 0 3DFACE 8 0 62 55 10 351.717412 20 144.965619 30 37.623432 11 351.717412 21 194.126040 31 -37.623432 12 351.717412 22 194.126040 32 37.623432 13 351.717412 23 194.126040 33 37.623432 0 3DFACE 8 0 62 55 10 351.717412 20 144.965619 30 37.623432 11 302.092403 21 95.805228 31 -37.623432 12 351.717412 22 144.965619 32 -37.623432 13 351.717412 23 144.965619 33 -37.623432 0 3DFACE 8 0 62 55 10 302.092403 20 95.805228 30 -37.623432 11 351.717412 21 144.965619 31 37.623432 12 302.092403 22 95.805228 32 37.623432 13 302.092403 23 95.805228 33 37.623432 0 3DFACE 8 0 62 55 10 302.092403 20 95.805228 30 37.623432 11 351.717412 21 48.334405 31 -37.623432 12 302.092403 22 95.805228 32 -37.623432 13 302.092403 23 95.805228 33 -37.623432 0 3DFACE 8 0 62 55 10 351.717412 20 48.334405 30 -37.623432 11 302.092403 21 95.805228 31 37.623432 12 351.717412 22 48.334405 32 37.623432 13 351.717412 23 48.334405 33 37.623432 0 3DFACE 8 0 62 55 10 351.717412 20 48.334405 30 -37.623432 11 351.717412 21 -334.679514 31 37.623432 12 351.717412 22 -334.679514 32 -37.623432 13 351.717412 23 -334.679514 33 -37.623432 0 3DFACE 8 0 62 55 10 351.717412 20 -334.679514 30 37.623432 11 351.717412 21 48.334405 31 -37.623432 12 351.717412 22 48.334405 32 37.623432 13 351.717412 23 48.334405 33 37.623432 0 3DFACE 8 0 62 55 10 351.717412 20 -334.679514 30 -37.623432 11 307.550490 21 -392.424732 31 37.623432 12 307.550490 22 -392.424732 32 -37.623432 13 307.550490 23 -392.424732 33 -37.623432 0 3DFACE 8 0 62 55 10 307.550490 20 -392.424732 30 37.623432 11 351.717412 21 -334.679514 31 -37.623432 12 351.717412 22 -334.679514 32 37.623432 13 351.717412 23 -334.679514 33 37.623432 0 3DFACE 8 0 62 55 10 307.550490 20 -392.424732 30 37.623432 11 -303.422838 21 -392.424732 31 -37.623432 12 307.550490 22 -392.424732 32 -37.623432 13 307.550490 23 -392.424732 33 -37.623432 0 3DFACE 8 0 62 55 10 -303.422838 20 -392.424732 30 -37.623432 11 307.550490 21 -392.424732 31 37.623432 12 -303.422838 22 -392.424732 32 37.623432 13 -303.422838 23 -392.424732 33 37.623432 0 3DFACE 8 0 62 55 10 -351.717412 20 -334.679514 30 37.623432 11 -303.422838 21 -392.424732 31 -37.623432 12 -303.422838 22 -392.424732 32 37.623432 13 -303.422838 23 -392.424732 33 37.623432 0 3DFACE 8 0 62 55 10 -303.422838 20 -392.424732 30 -37.623432 11 -351.717412 21 -334.679514 31 37.623432 12 -351.717412 22 -334.679514 32 -37.623432 13 -351.717412 23 -334.679514 33 -37.623432 0 3DFACE 8 0 62 55 10 -351.717412 20 48.334405 30 37.623432 11 -351.717412 21 -334.679514 31 -37.623432 12 -351.717412 22 -334.679514 32 37.623432 13 -351.717412 23 -334.679514 33 37.623432 0 3DFACE 8 0 62 55 10 -351.717412 20 -334.679514 30 -37.623432 11 -351.717412 21 48.334405 31 37.623432 12 -351.717412 22 48.334405 32 -37.623432 13 -351.717412 23 48.334405 33 -37.623432 0 ENDSEC 0 EOF xscreensaver-5.36/hacks/glx/toaster.dxf000644 000767 000024 00000062563 07634066633 020236 0ustar00jwzstaff000000 000000 0 SECTION 2 HEADER 0 ENDSEC 0 SECTION 2 ENTITIES 0 3DFACE 8 0 62 55 10 -59.550893 20 -98.304297 30 46.749999 11 -49.257401 21 -101.736418 31 -80.124995 12 -49.257401 22 -101.736418 32 46.749999 13 -49.257401 23 -101.736418 33 46.749999 0 3DFACE 8 0 62 55 10 -0.257406 20 105.175312 30 46.749999 11 -49.257401 21 101.736418 31 -80.124995 12 -49.257401 22 101.736418 32 46.749999 13 -49.257401 23 101.736418 33 46.749999 0 3DFACE 8 0 62 55 10 -37.633746 20 -95.756860 30 58.749998 11 -49.257401 21 -101.736418 31 46.749999 12 -0.257406 22 -105.175312 32 46.749999 13 -0.257406 23 -105.175312 33 46.749999 0 3DFACE 8 0 62 55 10 -72.765693 20 0.000000 30 -80.124995 11 -62.982058 21 -88.007949 31 -80.124995 12 -69.692379 22 -43.950311 32 46.749999 13 -69.692379 23 -43.950311 33 46.749999 0 3DFACE 8 0 62 55 10 69.692395 20 43.950311 30 46.749999 11 69.692395 21 -43.950311 31 46.749999 12 72.765693 22 0.000000 32 -80.124995 13 72.765693 23 0.000000 33 -80.124995 0 3DFACE 8 0 62 55 10 -0.257406 20 105.175312 30 46.749999 11 49.257405 21 101.736418 31 -80.124995 12 -49.257401 22 101.736418 32 -80.124995 13 -49.257401 23 101.736418 33 -80.124995 0 3DFACE 8 0 62 55 10 -49.257401 20 -101.736418 30 46.749999 11 -49.257401 21 -101.736418 31 -80.124995 12 -0.257406 22 -105.175312 32 46.749999 13 -0.257406 23 -105.175312 33 46.749999 0 3DFACE 8 0 62 55 10 61.618173 20 92.100747 30 -29.692172 11 62.982058 21 88.007949 31 46.749999 12 62.982058 22 88.007949 32 -80.124995 13 62.982058 23 88.007949 33 -80.124995 0 3DFACE 8 0 62 55 10 62.982058 20 88.007949 30 46.749999 11 61.618173 21 92.100747 31 -29.692172 12 59.550897 22 98.304297 32 46.749999 13 59.550897 23 98.304297 33 46.749999 0 3DFACE 8 0 62 55 10 59.550897 20 98.304297 30 46.749999 11 61.618173 21 92.100747 31 -29.692172 12 60.584535 22 95.202526 32 8.528915 13 60.584535 23 95.202526 33 8.528915 0 3DFACE 8 0 62 55 10 59.550897 20 98.304297 30 46.749999 11 59.550897 21 98.304297 31 -80.124995 12 49.257405 22 101.736418 32 46.749999 13 49.257405 23 101.736418 33 46.749999 0 3DFACE 8 0 62 55 10 59.550897 20 98.304297 30 -80.124995 11 61.618173 21 92.100747 31 -29.692172 12 62.982058 22 88.007949 32 -80.124995 13 62.982058 23 88.007949 33 -80.124995 0 3DFACE 8 0 62 55 10 61.618173 20 92.100747 30 -29.692172 11 59.550897 21 98.304297 31 -80.124995 12 60.584535 22 95.202526 32 8.528915 13 60.584535 23 95.202526 33 8.528915 0 3DFACE 8 0 62 55 10 60.584535 20 95.202526 30 8.528915 11 59.550897 21 98.304297 31 -80.124995 12 59.550897 22 98.304297 32 46.749999 13 59.550897 23 98.304297 33 46.749999 0 3DFACE 8 0 62 55 10 11.379375 20 53.004574 30 75.124998 11 -11.379373 21 53.004574 31 75.124998 12 11.230625 22 0.000000 32 80.124995 13 11.230625 23 0.000000 33 80.124995 0 3DFACE 8 0 62 55 10 -54.132399 20 53.004574 30 67.374997 11 -65.644221 21 70.529158 31 46.749999 12 -69.692379 22 43.950311 32 46.749999 13 -69.692379 23 43.950311 33 46.749999 0 3DFACE 8 0 62 55 10 -65.644221 20 70.529158 30 46.749999 11 -54.132399 21 53.004574 31 67.374997 12 -62.982058 22 88.007949 32 46.749999 13 -62.982058 23 88.007949 33 46.749999 0 3DFACE 8 0 62 55 10 -65.644221 20 70.529158 30 46.749999 11 -62.982058 21 88.007949 31 46.749999 12 -64.289076 22 79.426547 32 46.749999 13 -64.289076 23 79.426547 33 46.749999 0 3DFACE 8 0 62 55 10 54.132404 20 -53.004570 30 67.374997 11 35.106469 21 0.000000 31 80.124995 12 35.106469 22 -53.004570 32 75.124998 13 35.106469 23 -53.004570 33 75.124998 0 3DFACE 8 0 62 55 10 54.132404 20 53.004574 30 67.374997 11 35.106469 21 53.004574 31 75.124998 12 35.106469 22 0.000000 32 80.124995 13 35.106469 23 0.000000 33 80.124995 0 3DFACE 8 0 62 55 10 69.692395 20 -43.950311 30 46.749999 11 54.132404 21 53.004574 31 67.374997 12 54.132404 22 -53.004570 32 67.374997 13 54.132404 23 -53.004570 33 67.374997 0 3DFACE 8 0 62 55 10 54.132404 20 53.004574 30 67.374997 11 69.692395 21 -43.950311 31 46.749999 12 69.692395 22 43.950311 32 46.749999 13 69.692395 23 43.950311 33 46.749999 0 3DFACE 8 0 62 55 10 11.230625 20 0.000000 30 80.124995 11 -11.379373 21 53.004574 31 75.124998 12 -11.230623 22 0.000000 32 80.124995 13 -11.230623 23 0.000000 33 80.124995 0 3DFACE 8 0 62 55 10 -65.644221 20 70.529158 30 46.749999 11 -62.982058 21 88.007949 31 -80.124995 12 -69.692379 22 43.950311 32 46.749999 13 -69.692379 23 43.950311 33 46.749999 0 3DFACE 8 0 62 55 10 -62.982058 20 88.007949 30 -80.124995 11 -65.644221 21 70.529158 31 46.749999 12 -64.289076 22 79.426547 32 46.749999 13 -64.289076 23 79.426547 33 46.749999 0 3DFACE 8 0 62 55 10 -62.982058 20 88.007949 30 -80.124995 11 -64.289076 21 79.426547 31 46.749999 12 -62.982058 22 88.007949 32 46.749999 13 -62.982058 23 88.007949 33 46.749999 0 3DFACE 8 0 62 55 10 -54.132399 20 -53.004570 30 67.374997 11 -62.982058 21 -88.007949 31 46.749999 12 -59.550893 22 -98.304297 32 46.749999 13 -59.550893 23 -98.304297 33 46.749999 0 3DFACE 8 0 62 55 10 -37.633746 20 -95.756860 30 58.749998 11 -59.550893 21 -98.304297 31 46.749999 12 -49.257401 22 -101.736418 32 46.749999 13 -49.257401 23 -101.736418 33 46.749999 0 3DFACE 8 0 62 55 10 -37.633746 20 -95.756860 30 58.749998 11 -54.132399 21 -53.004570 31 67.374997 12 -59.550893 22 -98.304297 32 46.749999 13 -59.550893 23 -98.304297 33 46.749999 0 3DFACE 8 0 62 55 10 -62.982058 20 88.007949 30 46.749999 11 -60.187034 21 96.395348 31 23.227255 12 -62.982058 22 88.007949 32 -80.124995 13 -62.982058 23 88.007949 33 -80.124995 0 3DFACE 8 0 62 55 10 -60.187034 20 96.395348 30 23.227255 11 -62.982058 21 88.007949 31 46.749999 12 -59.550893 22 98.304297 32 46.749999 13 -59.550893 23 98.304297 33 46.749999 0 3DFACE 8 0 62 55 10 -60.187034 20 96.395348 30 23.227255 11 -59.550893 21 98.304297 31 46.749999 12 -60.038836 22 96.840066 32 28.707243 13 -60.038836 23 96.840066 33 28.707243 0 3DFACE 8 0 62 55 10 -60.187034 20 96.395348 30 23.227255 11 -59.550893 21 98.304297 31 -80.124995 12 -62.982058 22 88.007949 32 -80.124995 13 -62.982058 23 88.007949 33 -80.124995 0 3DFACE 8 0 62 55 10 -59.550893 20 98.304297 30 -80.124995 11 -60.187034 21 96.395348 31 23.227255 12 -60.038836 22 96.840066 32 28.707243 13 -60.038836 23 96.840066 33 28.707243 0 3DFACE 8 0 62 55 10 -59.550893 20 98.304297 30 -80.124995 11 -60.038836 21 96.840066 31 28.707243 12 -59.550893 22 98.304297 32 46.749999 13 -59.550893 23 98.304297 33 46.749999 0 3DFACE 8 0 62 55 10 -48.757403 20 88.007949 30 57.999999 11 -49.257401 21 101.736418 31 46.749999 12 -59.550893 22 98.304297 32 46.749999 13 -59.550893 23 98.304297 33 46.749999 0 3DFACE 8 0 62 55 10 11.379375 20 95.756860 30 58.749998 11 -0.257406 21 105.175312 31 46.749999 12 -11.379373 22 95.756860 32 58.749998 13 -11.379373 23 95.756860 33 58.749998 0 3DFACE 8 0 62 55 10 11.379375 20 -95.756860 30 58.749998 11 -11.379373 21 -95.756860 31 58.749998 12 -0.257406 22 -105.175312 32 46.749999 13 -0.257406 23 -105.175312 33 46.749999 0 3DFACE 8 0 62 55 10 -11.379373 20 -95.756860 30 58.749998 11 11.379375 21 -95.756860 31 58.749998 12 0.000001 22 -95.756860 32 58.749998 13 0.000001 23 -95.756860 33 58.749998 0 3DFACE 8 0 62 55 10 0.000001 20 -95.756860 30 58.749998 11 -11.379373 21 -53.004570 31 75.124998 12 -11.379373 22 -95.756860 32 58.749998 13 -11.379373 23 -95.756860 33 58.749998 0 3DFACE 8 0 62 55 10 -11.379373 20 -53.004570 30 75.124998 11 0.000001 21 -95.756860 31 58.749998 12 11.379375 22 -95.756860 32 58.749998 13 11.379375 23 -95.756860 33 58.749998 0 3DFACE 8 0 62 55 10 -35.106469 20 -53.004570 30 75.124998 11 -54.132399 21 -53.004570 31 67.374997 12 -37.633746 22 -95.756860 32 58.749998 13 -37.633746 23 -95.756860 33 58.749998 0 3DFACE 8 0 62 55 10 -11.379373 20 95.756860 30 58.749998 11 -0.257406 21 105.175312 31 46.749999 12 -37.633746 22 95.756860 32 58.749998 13 -37.633746 23 95.756860 33 58.749998 0 3DFACE 8 0 62 55 10 -48.757403 20 88.007949 30 57.999999 11 -62.982058 21 88.007949 31 46.749999 12 -54.132399 22 53.004574 32 67.374997 13 -54.132399 23 53.004574 33 67.374997 0 3DFACE 8 0 62 55 10 59.550897 20 -98.304297 30 46.749999 11 54.132404 21 -53.004570 31 67.374997 12 37.633750 22 -95.756860 32 58.749998 13 37.633750 23 -95.756860 33 58.749998 0 3DFACE 8 0 62 55 10 62.982058 20 88.007949 30 -80.124995 11 67.045331 21 61.329929 31 46.749999 12 69.692395 22 43.950311 32 46.749999 13 69.692395 23 43.950311 33 46.749999 0 3DFACE 8 0 62 55 10 67.045331 20 61.329929 30 46.749999 11 62.982058 21 88.007949 31 -80.124995 12 65.266704 22 73.007757 32 46.749999 13 65.266704 23 73.007757 33 46.749999 0 3DFACE 8 0 62 55 10 65.266704 20 73.007757 30 46.749999 11 62.982058 21 88.007949 31 -80.124995 12 62.982058 22 88.007949 32 46.749999 13 62.982058 23 88.007949 33 46.749999 0 3DFACE 8 0 62 55 10 -37.633746 20 95.756860 30 58.749998 11 -49.257401 21 101.736418 31 46.749999 12 -48.757403 22 88.007949 32 57.999999 13 -48.757403 23 88.007949 33 57.999999 0 3DFACE 8 0 62 55 10 11.379375 20 -53.004570 30 75.124998 11 11.230625 21 0.000000 31 80.124995 12 -11.379373 22 -53.004570 32 75.124998 13 -11.379373 23 -53.004570 33 75.124998 0 3DFACE 8 0 62 55 10 62.982058 20 88.007949 30 -80.124995 11 69.692395 21 43.950311 31 46.749999 12 72.765693 22 0.000000 32 -80.124995 13 72.765693 23 0.000000 33 -80.124995 0 3DFACE 8 0 62 55 10 49.257405 20 -101.736418 30 -80.124995 11 1.704490 21 -102.603365 31 -48.139738 12 -49.257401 22 -101.736418 32 -80.124995 13 -49.257401 23 -101.736418 33 -80.124995 0 3DFACE 8 0 62 55 10 1.704490 20 -102.603365 30 -48.139738 11 49.257405 21 -101.736418 31 -80.124995 12 11.372780 22 -104.367574 32 16.949225 13 11.372780 23 -104.367574 33 16.949225 0 3DFACE 8 0 62 55 10 1.704490 20 -102.603365 30 -48.139738 11 11.372780 21 -104.367574 31 16.949225 12 1.704490 22 -104.464430 32 20.522543 13 1.704490 23 -104.464430 33 20.522543 0 3DFACE 8 0 62 55 10 1.704490 20 -104.464430 30 20.522543 11 11.372780 21 -104.367574 31 16.949225 12 -0.257406 22 -105.175312 32 46.749999 13 -0.257406 23 -105.175312 33 46.749999 0 3DFACE 8 0 62 55 10 1.704490 20 -104.464430 30 20.522543 11 -0.257406 21 -105.175312 31 46.749999 12 -3.733010 22 -104.464430 32 20.522543 13 -3.733010 23 -104.464430 33 20.522543 0 3DFACE 8 0 62 55 10 -49.257401 20 -101.736418 30 -80.124995 11 -3.733010 21 -104.464430 31 20.522543 12 -0.257406 22 -105.175312 32 46.749999 13 -0.257406 23 -105.175312 33 46.749999 0 3DFACE 8 0 62 55 10 -3.733010 20 -104.464430 30 20.522543 11 -49.257401 21 -101.736418 31 -80.124995 12 -3.733010 22 -102.603365 32 -48.139738 13 -3.733010 23 -102.603365 33 -48.139738 0 3DFACE 8 0 62 55 10 -3.733010 20 -102.603365 30 -48.139738 11 -49.257401 21 -101.736418 31 -80.124995 12 1.704490 22 -102.603365 32 -48.139738 13 1.704490 23 -102.603365 33 -48.139738 0 3DFACE 8 0 62 55 10 -69.692379 20 -43.950311 30 46.749999 11 -62.982058 21 -88.007949 31 46.749999 12 -54.132399 22 -53.004570 32 67.374997 13 -54.132399 23 -53.004570 33 67.374997 0 3DFACE 8 0 62 55 10 -37.633746 20 -95.756860 30 58.749998 11 -0.257406 21 -105.175312 31 46.749999 12 -11.379373 22 -95.756860 32 58.749998 13 -11.379373 23 -95.756860 33 58.749998 0 3DFACE 8 0 62 55 10 11.379375 20 95.756860 30 58.749998 11 -11.379373 21 95.756860 31 58.749998 12 -11.379373 22 53.004574 32 75.124998 13 -11.379373 23 53.004574 33 75.124998 0 3DFACE 8 0 62 55 10 -35.106469 20 53.004574 30 75.124998 11 -48.757403 21 88.007949 31 57.999999 12 -54.132399 22 53.004574 32 67.374997 13 -54.132399 23 53.004574 33 67.374997 0 3DFACE 8 0 62 55 10 -35.106469 20 53.004574 30 75.124998 11 -37.633746 21 95.756860 31 58.749998 12 -48.757403 22 88.007949 32 57.999999 13 -48.757403 23 88.007949 33 57.999999 0 3DFACE 8 0 62 55 10 49.257405 20 -101.736418 30 46.749999 11 11.372780 21 -104.367574 31 16.949225 12 49.257405 22 -101.736418 32 -80.124995 13 49.257405 23 -101.736418 33 -80.124995 0 3DFACE 8 0 62 55 10 11.372780 20 -104.367574 30 16.949225 11 49.257405 21 -101.736418 31 46.749999 12 -0.257406 22 -105.175312 32 46.749999 13 -0.257406 23 -105.175312 33 46.749999 0 3DFACE 8 0 62 55 10 -62.982058 20 88.007949 30 -80.124995 11 -62.982058 21 -88.007949 31 -80.124995 12 -72.765693 22 0.000000 32 -80.124995 13 -72.765693 23 0.000000 33 -80.124995 0 3DFACE 8 0 62 55 10 -62.982058 20 -88.007949 30 -80.124995 11 -62.982058 21 88.007949 31 -80.124995 12 -59.550893 22 98.304297 32 -80.124995 13 -59.550893 23 98.304297 33 -80.124995 0 3DFACE 8 0 62 55 10 -62.982058 20 -88.007949 30 -80.124995 11 -59.550893 21 98.304297 31 -80.124995 12 -59.550893 22 -98.304297 32 -80.124995 13 -59.550893 23 -98.304297 33 -80.124995 0 3DFACE 8 0 62 55 10 -59.550893 20 -98.304297 30 -80.124995 11 -59.550893 21 98.304297 31 -80.124995 12 -49.257401 22 101.736418 32 -80.124995 13 -49.257401 23 101.736418 33 -80.124995 0 3DFACE 8 0 62 55 10 -59.550893 20 -98.304297 30 -80.124995 11 -49.257401 21 101.736418 31 -80.124995 12 -49.257401 22 -101.736418 32 -80.124995 13 -49.257401 23 -101.736418 33 -80.124995 0 3DFACE 8 0 62 55 10 -49.257401 20 -101.736418 30 -80.124995 11 -49.257401 21 101.736418 31 -80.124995 12 49.257405 22 101.736418 32 -80.124995 13 49.257405 23 101.736418 33 -80.124995 0 3DFACE 8 0 62 55 10 -49.257401 20 -101.736418 30 -80.124995 11 49.257405 21 101.736418 31 -80.124995 12 49.257405 22 -101.736418 32 -80.124995 13 49.257405 23 -101.736418 33 -80.124995 0 3DFACE 8 0 62 55 10 49.257405 20 -101.736418 30 -80.124995 11 49.257405 21 101.736418 31 -80.124995 12 59.550897 22 -98.304297 32 -80.124995 13 59.550897 23 -98.304297 33 -80.124995 0 3DFACE 8 0 62 55 10 59.550897 20 -98.304297 30 -80.124995 11 49.257405 21 101.736418 31 -80.124995 12 59.550897 22 98.304297 32 -80.124995 13 59.550897 23 98.304297 33 -80.124995 0 3DFACE 8 0 62 55 10 59.550897 20 -98.304297 30 -80.124995 11 59.550897 21 98.304297 31 -80.124995 12 62.982058 22 -88.007949 32 -80.124995 13 62.982058 23 -88.007949 33 -80.124995 0 3DFACE 8 0 62 55 10 62.982058 20 -88.007949 30 -80.124995 11 59.550897 21 98.304297 31 -80.124995 12 62.982058 22 88.007949 32 -80.124995 13 62.982058 23 88.007949 33 -80.124995 0 3DFACE 8 0 62 55 10 62.982058 20 -88.007949 30 -80.124995 11 62.982058 21 88.007949 31 -80.124995 12 72.765693 22 0.000000 32 -80.124995 13 72.765693 23 0.000000 33 -80.124995 0 3DFACE 8 0 62 55 10 -48.757403 20 88.007949 30 57.999999 11 -59.550893 21 98.304297 31 46.749999 12 -62.982058 22 88.007949 32 46.749999 13 -62.982058 23 88.007949 33 46.749999 0 3DFACE 8 0 62 55 10 54.132404 20 -53.004570 30 67.374997 11 35.106469 21 -53.004570 31 75.124998 12 37.633750 22 -95.756860 32 58.749998 13 37.633750 23 -95.756860 33 58.749998 0 3DFACE 8 0 62 55 10 37.633750 20 -95.756860 30 58.749998 11 49.257405 21 -101.736418 31 46.749999 12 59.550897 22 -98.304297 32 46.749999 13 59.550897 23 -98.304297 33 46.749999 0 3DFACE 8 0 62 55 10 54.132404 20 -53.004570 30 67.374997 11 59.550897 21 -98.304297 31 46.749999 12 62.982058 22 -88.007949 32 46.749999 13 62.982058 23 -88.007949 33 46.749999 0 3DFACE 8 0 62 55 10 11.379375 20 95.756860 30 58.749998 11 -11.379373 21 53.004574 31 75.124998 12 11.379375 22 53.004574 32 75.124998 13 11.379375 23 53.004574 33 75.124998 0 3DFACE 8 0 62 55 10 -62.982058 20 -88.007949 30 -80.124995 11 -59.550893 21 -98.304297 31 46.749999 12 -62.982058 22 -88.007949 32 46.749999 13 -62.982058 23 -88.007949 33 46.749999 0 3DFACE 8 0 62 55 10 -69.692379 20 -43.950311 30 46.749999 11 -62.982058 21 -88.007949 31 -80.124995 12 -62.982058 22 -88.007949 32 46.749999 13 -62.982058 23 -88.007949 33 46.749999 0 3DFACE 8 0 62 55 10 11.230625 20 0.000000 30 80.124995 11 -11.230623 21 0.000000 31 80.124995 12 -11.379373 22 -53.004570 32 75.124998 13 -11.379373 23 -53.004570 33 75.124998 0 3DFACE 8 0 62 55 10 11.379375 20 -53.004570 30 75.124998 11 -11.379373 21 -53.004570 31 75.124998 12 11.379375 22 -95.756860 32 58.749998 13 11.379375 23 -95.756860 33 58.749998 0 3DFACE 8 0 62 55 10 -49.257401 20 101.736418 30 46.749999 11 -59.550893 21 98.304297 31 -80.124995 12 -59.550893 22 98.304297 32 46.749999 13 -59.550893 23 98.304297 33 46.749999 0 3DFACE 8 0 62 55 10 62.982058 20 -88.007949 30 -80.124995 11 59.550897 21 -98.304297 31 46.749999 12 59.550897 22 -98.304297 32 -80.124995 13 59.550897 23 -98.304297 33 -80.124995 0 3DFACE 8 0 62 55 10 49.257405 20 101.736418 30 46.749999 11 49.257405 21 101.736418 31 -80.124995 12 -0.257406 22 105.175312 32 46.749999 13 -0.257406 23 105.175312 33 46.749999 0 3DFACE 8 0 62 55 10 -37.633746 20 95.756860 30 58.749998 11 -0.257406 21 105.175312 31 46.749999 12 -49.257401 22 101.736418 32 46.749999 13 -49.257401 23 101.736418 33 46.749999 0 3DFACE 8 0 62 55 10 -49.257401 20 101.736418 30 46.749999 11 -49.257401 21 101.736418 31 -80.124995 12 -59.550893 22 98.304297 32 -80.124995 13 -59.550893 23 98.304297 33 -80.124995 0 3DFACE 8 0 62 55 10 49.257405 20 101.736418 30 46.749999 11 37.633750 21 95.756860 31 58.749998 12 48.757407 22 88.007949 32 57.999999 13 48.757407 23 88.007949 33 57.999999 0 3DFACE 8 0 62 55 10 -62.982058 20 -88.007949 30 -80.124995 11 -59.550893 21 -98.304297 31 -80.124995 12 -59.550893 22 -98.304297 32 46.749999 13 -59.550893 23 -98.304297 33 46.749999 0 3DFACE 8 0 62 55 10 -59.550893 20 -98.304297 30 46.749999 11 -59.550893 21 -98.304297 31 -80.124995 12 -49.257401 22 -101.736418 32 -80.124995 13 -49.257401 23 -101.736418 33 -80.124995 0 3DFACE 8 0 62 55 10 11.379375 20 -95.756860 30 58.749998 11 -0.257406 21 -105.175312 31 46.749999 12 37.633750 22 -95.756860 32 58.749998 13 37.633750 23 -95.756860 33 58.749998 0 3DFACE 8 0 62 55 10 62.982058 20 88.007949 30 46.749999 11 48.757407 21 88.007949 31 57.999999 12 54.132404 22 53.004574 32 67.374997 13 54.132404 23 53.004574 33 67.374997 0 3DFACE 8 0 62 55 10 62.982058 20 88.007949 30 46.749999 11 59.550897 21 98.304297 31 46.749999 12 48.757407 22 88.007949 32 57.999999 13 48.757407 23 88.007949 33 57.999999 0 3DFACE 8 0 62 55 10 54.132404 20 53.004574 30 67.374997 11 48.757407 21 88.007949 31 57.999999 12 35.106469 22 53.004574 32 75.124998 13 35.106469 23 53.004574 33 75.124998 0 3DFACE 8 0 62 55 10 54.132404 20 53.004574 30 67.374997 11 35.106469 21 0.000000 31 80.124995 12 54.132404 22 -53.004570 32 67.374997 13 54.132404 23 -53.004570 33 67.374997 0 3DFACE 8 0 62 55 10 72.765693 20 0.000000 30 -80.124995 11 69.692395 21 -43.950311 31 46.749999 12 62.982058 22 -88.007949 32 -80.124995 13 62.982058 23 -88.007949 33 -80.124995 0 3DFACE 8 0 62 55 10 48.757407 20 88.007949 30 57.999999 11 37.633750 21 95.756860 31 58.749998 12 35.106469 22 53.004574 32 75.124998 13 35.106469 23 53.004574 33 75.124998 0 3DFACE 8 0 62 55 10 62.982058 20 -88.007949 30 46.749999 11 59.550897 21 -98.304297 31 46.749999 12 62.982058 22 -88.007949 32 -80.124995 13 62.982058 23 -88.007949 33 -80.124995 0 3DFACE 8 0 62 55 10 37.633750 20 -95.756860 30 58.749998 11 -0.257406 21 -105.175312 31 46.749999 12 49.257405 22 -101.736418 32 46.749999 13 49.257405 23 -101.736418 33 46.749999 0 3DFACE 8 0 62 55 10 69.692395 20 -43.950311 30 46.749999 11 54.132404 21 -53.004570 31 67.374997 12 62.982058 22 -88.007949 32 46.749999 13 62.982058 23 -88.007949 33 46.749999 0 3DFACE 8 0 62 55 10 37.633750 20 95.756860 30 58.749998 11 -0.257406 21 105.175312 31 46.749999 12 11.379375 22 95.756860 32 58.749998 13 11.379375 23 95.756860 33 58.749998 0 3DFACE 8 0 62 55 10 49.257405 20 101.736418 30 46.749999 11 59.550897 21 98.304297 31 -80.124995 12 49.257405 22 101.736418 32 -80.124995 13 49.257405 23 101.736418 33 -80.124995 0 3DFACE 8 0 62 55 10 67.045331 20 61.329929 30 46.749999 11 54.132404 21 53.004574 31 67.374997 12 69.692395 22 43.950311 32 46.749999 13 69.692395 23 43.950311 33 46.749999 0 3DFACE 8 0 62 55 10 54.132404 20 53.004574 30 67.374997 11 67.045331 21 61.329929 31 46.749999 12 62.982058 22 88.007949 32 46.749999 13 62.982058 23 88.007949 33 46.749999 0 3DFACE 8 0 62 55 10 62.982058 20 88.007949 30 46.749999 11 67.045331 21 61.329929 31 46.749999 12 65.266704 22 73.007757 32 46.749999 13 65.266704 23 73.007757 33 46.749999 0 3DFACE 8 0 62 55 10 49.257405 20 -101.736418 30 46.749999 11 49.257405 21 -101.736418 31 -80.124995 12 59.550897 22 -98.304297 32 46.749999 13 59.550897 23 -98.304297 33 46.749999 0 3DFACE 8 0 62 55 10 59.550897 20 -98.304297 30 46.749999 11 49.257405 21 -101.736418 31 -80.124995 12 59.550897 22 -98.304297 32 -80.124995 13 59.550897 23 -98.304297 33 -80.124995 0 3DFACE 8 0 62 55 10 69.692395 20 -43.950311 30 46.749999 11 62.982058 21 -88.007949 31 46.749999 12 62.982058 22 -88.007949 32 -80.124995 13 62.982058 23 -88.007949 33 -80.124995 0 3DFACE 8 0 62 55 10 59.550897 20 98.304297 30 46.749999 11 49.257405 21 101.736418 31 46.749999 12 48.757407 22 88.007949 32 57.999999 13 48.757407 23 88.007949 33 57.999999 0 3DFACE 8 0 62 55 10 -35.106469 20 0.000000 30 80.124995 11 -54.132399 21 -53.004570 31 67.374997 12 -35.106469 22 -53.004570 32 75.124998 13 -35.106469 23 -53.004570 33 75.124998 0 3DFACE 8 0 62 55 10 -35.106469 20 0.000000 30 80.124995 11 -35.106469 21 53.004574 31 75.124998 12 -54.132399 22 53.004574 32 67.374997 13 -54.132399 23 53.004574 33 67.374997 0 3DFACE 8 0 62 55 10 37.633750 20 95.756860 30 58.749998 11 49.257405 21 101.736418 31 46.749999 12 -0.257406 22 105.175312 32 46.749999 13 -0.257406 23 105.175312 33 46.749999 0 3DFACE 8 0 62 55 10 -62.982058 20 88.007949 30 -80.124995 11 -72.765693 21 0.000000 31 -80.124995 12 -69.692379 22 43.950311 32 46.749999 13 -69.692379 23 43.950311 33 46.749999 0 3DFACE 8 0 62 55 10 -35.106469 20 0.000000 30 80.124995 11 -54.132399 21 53.004574 31 67.374997 12 -54.132399 22 -53.004570 32 67.374997 13 -54.132399 23 -53.004570 33 67.374997 0 3DFACE 8 0 62 55 10 -69.692379 20 43.950311 30 46.749999 11 -72.765693 21 0.000000 31 -80.124995 12 -69.692379 22 -43.950311 32 46.749999 13 -69.692379 23 -43.950311 33 46.749999 0 3DFACE 8 0 62 55 10 -54.132399 20 53.004574 30 67.374997 11 -69.692379 21 -43.950311 31 46.749999 12 -54.132399 22 -53.004570 32 67.374997 13 -54.132399 23 -53.004570 33 67.374997 0 3DFACE 8 0 62 55 10 -69.692379 20 -43.950311 30 46.749999 11 -54.132399 21 53.004574 31 67.374997 12 -69.692379 22 43.950311 32 46.749999 13 -69.692379 23 43.950311 33 46.749999 0 ENDSEC 0 EOF xscreensaver-5.36/hacks/glx/toaster_base.dxf000644 000767 000024 00000021273 07634066633 021221 0ustar00jwzstaff000000 000000 0 SECTION 2 HEADER 0 ENDSEC 0 SECTION 2 ENTITIES 0 3DFACE 8 0 62 55 10 -213.358000 20 440.670401 30 46.428166 11 213.358015 21 440.670401 31 -46.428166 12 -213.358000 22 440.670401 32 -46.428166 13 -213.358000 23 440.670401 33 -46.428166 0 3DFACE 8 0 62 55 10 213.358015 20 440.670401 30 -46.428166 11 -213.358000 21 440.670401 31 46.428166 12 213.358015 22 440.670401 32 46.428166 13 213.358015 23 440.670401 33 46.428166 0 3DFACE 8 0 62 55 10 272.806257 20 381.205648 30 -46.428166 11 315.183967 21 0.000001 31 46.428166 12 315.183967 22 0.000001 32 -46.428166 13 315.183967 23 0.000001 33 -46.428166 0 3DFACE 8 0 62 55 10 315.183967 20 0.000001 30 46.428166 11 272.806257 21 381.205648 31 -46.428166 12 272.806257 22 381.205648 32 46.428166 13 272.806257 23 381.205648 33 46.428166 0 3DFACE 8 0 62 55 10 213.358015 20 -440.670401 30 46.428166 11 -213.358000 21 -440.670401 31 -46.428166 12 213.358015 22 -440.670401 32 -46.428166 13 213.358015 23 -440.670401 33 -46.428166 0 3DFACE 8 0 62 55 10 -213.358000 20 -440.670401 30 -46.428166 11 213.358015 21 -440.670401 31 46.428166 12 -213.358000 22 -440.670401 32 46.428166 13 -213.358000 23 -440.670401 33 46.428166 0 3DFACE 8 0 62 55 10 -272.806227 20 381.205648 30 46.428166 11 -315.183967 21 0.000001 31 -46.428166 12 -315.183967 22 0.000001 32 46.428166 13 -315.183967 23 0.000001 33 46.428166 0 3DFACE 8 0 62 55 10 -315.183967 20 0.000001 30 -46.428166 11 -272.806227 21 381.205648 31 46.428166 12 -272.806227 22 381.205648 32 -46.428166 13 -272.806227 23 381.205648 33 -46.428166 0 3DFACE 8 0 62 55 10 -272.806227 20 381.205648 30 -46.428166 11 -272.806227 21 -381.205648 31 -46.428166 12 -315.183967 22 0.000001 32 -46.428166 13 -315.183967 23 0.000001 33 -46.428166 0 3DFACE 8 0 62 55 10 -272.806227 20 -381.205648 30 -46.428166 11 -272.806227 21 381.205648 31 -46.428166 12 -257.944137 22 425.804198 32 -46.428166 13 -257.944137 23 425.804198 33 -46.428166 0 3DFACE 8 0 62 55 10 -272.806227 20 -381.205648 30 -46.428166 11 -257.944137 21 425.804198 31 -46.428166 12 -257.944137 22 -425.804198 32 -46.428166 13 -257.944137 23 -425.804198 33 -46.428166 0 3DFACE 8 0 62 55 10 -257.944137 20 -425.804198 30 -46.428166 11 -257.944137 21 425.804198 31 -46.428166 12 -213.358000 22 440.670401 32 -46.428166 13 -213.358000 23 440.670401 33 -46.428166 0 3DFACE 8 0 62 55 10 -257.944137 20 -425.804198 30 -46.428166 11 -213.358000 21 440.670401 31 -46.428166 12 -213.358000 22 -440.670401 32 -46.428166 13 -213.358000 23 -440.670401 33 -46.428166 0 3DFACE 8 0 62 55 10 -213.358000 20 -440.670401 30 -46.428166 11 -213.358000 21 440.670401 31 -46.428166 12 213.358015 22 440.670401 32 -46.428166 13 213.358015 23 440.670401 33 -46.428166 0 3DFACE 8 0 62 55 10 -213.358000 20 -440.670401 30 -46.428166 11 213.358015 21 440.670401 31 -46.428166 12 213.358015 22 -440.670401 32 -46.428166 13 213.358015 23 -440.670401 33 -46.428166 0 3DFACE 8 0 62 55 10 213.358015 20 -440.670401 30 -46.428166 11 213.358015 21 440.670401 31 -46.428166 12 257.944167 22 -425.804198 32 -46.428166 13 257.944167 23 -425.804198 33 -46.428166 0 3DFACE 8 0 62 55 10 257.944167 20 -425.804198 30 -46.428166 11 213.358015 21 440.670401 31 -46.428166 12 257.944167 22 425.804198 32 -46.428166 13 257.944167 23 425.804198 33 -46.428166 0 3DFACE 8 0 62 55 10 257.944167 20 -425.804198 30 -46.428166 11 257.944167 21 425.804198 31 -46.428166 12 272.806257 22 -381.205648 32 -46.428166 13 272.806257 23 -381.205648 33 -46.428166 0 3DFACE 8 0 62 55 10 272.806257 20 -381.205648 30 -46.428166 11 257.944167 21 425.804198 31 -46.428166 12 272.806257 22 381.205648 32 -46.428166 13 272.806257 23 381.205648 33 -46.428166 0 3DFACE 8 0 62 55 10 272.806257 20 -381.205648 30 -46.428166 11 272.806257 21 381.205648 31 -46.428166 12 315.183967 22 0.000001 32 -46.428166 13 315.183967 23 0.000001 33 -46.428166 0 3DFACE 8 0 62 55 10 315.183967 20 0.000001 30 -46.428166 11 272.806257 21 -381.205648 31 46.428166 12 272.806257 22 -381.205648 32 -46.428166 13 272.806257 23 -381.205648 33 -46.428166 0 3DFACE 8 0 62 55 10 272.806257 20 -381.205648 30 46.428166 11 315.183967 21 0.000001 31 -46.428166 12 315.183967 22 0.000001 32 46.428166 13 315.183967 23 0.000001 33 46.428166 0 3DFACE 8 0 62 55 10 -315.183967 20 0.000001 30 46.428166 11 -272.806227 21 -381.205648 31 -46.428166 12 -272.806227 22 -381.205648 32 46.428166 13 -272.806227 23 -381.205648 33 46.428166 0 3DFACE 8 0 62 55 10 -272.806227 20 -381.205648 30 -46.428166 11 -315.183967 21 0.000001 31 46.428166 12 -315.183967 22 0.000001 32 -46.428166 13 -315.183967 23 0.000001 33 -46.428166 0 3DFACE 8 0 62 55 10 -272.806227 20 -381.205648 30 46.428166 11 -257.944137 21 -425.804198 31 -46.428166 12 -257.944137 22 -425.804198 32 46.428166 13 -257.944137 23 -425.804198 33 46.428166 0 3DFACE 8 0 62 55 10 -257.944137 20 -425.804198 30 -46.428166 11 -272.806227 21 -381.205648 31 46.428166 12 -272.806227 22 -381.205648 32 -46.428166 13 -272.806227 23 -381.205648 33 -46.428166 0 3DFACE 8 0 62 55 10 -213.358000 20 -440.670401 30 46.428166 11 -257.944137 21 -425.804198 31 -46.428166 12 -213.358000 22 -440.670401 32 -46.428166 13 -213.358000 23 -440.670401 33 -46.428166 0 3DFACE 8 0 62 55 10 -257.944137 20 -425.804198 30 -46.428166 11 -213.358000 21 -440.670401 31 46.428166 12 -257.944137 22 -425.804198 32 46.428166 13 -257.944137 23 -425.804198 33 46.428166 0 3DFACE 8 0 62 55 10 257.944167 20 -425.804198 30 46.428166 11 213.358015 21 -440.670401 31 -46.428166 12 257.944167 22 -425.804198 32 -46.428166 13 257.944167 23 -425.804198 33 -46.428166 0 3DFACE 8 0 62 55 10 213.358015 20 -440.670401 30 -46.428166 11 257.944167 21 -425.804198 31 46.428166 12 213.358015 22 -440.670401 32 46.428166 13 213.358015 23 -440.670401 33 46.428166 0 3DFACE 8 0 62 55 10 272.806257 20 -381.205648 30 -46.428166 11 257.944167 21 -425.804198 31 46.428166 12 257.944167 22 -425.804198 32 -46.428166 13 257.944167 23 -425.804198 33 -46.428166 0 3DFACE 8 0 62 55 10 257.944167 20 -425.804198 30 46.428166 11 272.806257 21 -381.205648 31 -46.428166 12 272.806257 22 -381.205648 32 46.428166 13 272.806257 23 -381.205648 33 46.428166 0 3DFACE 8 0 62 55 10 213.358015 20 440.670401 30 46.428166 11 257.944167 21 425.804198 31 -46.428166 12 213.358015 22 440.670401 32 -46.428166 13 213.358015 23 440.670401 33 -46.428166 0 3DFACE 8 0 62 55 10 257.944167 20 425.804198 30 -46.428166 11 213.358015 21 440.670401 31 46.428166 12 257.944167 22 425.804198 32 46.428166 13 257.944167 23 425.804198 33 46.428166 0 3DFACE 8 0 62 55 10 257.944167 20 425.804198 30 -46.428166 11 272.806257 21 381.205648 31 46.428166 12 272.806257 22 381.205648 32 -46.428166 13 272.806257 23 381.205648 33 -46.428166 0 3DFACE 8 0 62 55 10 272.806257 20 381.205648 30 46.428166 11 257.944167 21 425.804198 31 -46.428166 12 257.944167 22 425.804198 32 46.428166 13 257.944167 23 425.804198 33 46.428166 0 3DFACE 8 0 62 55 10 -257.944137 20 425.804198 30 46.428166 11 -272.806227 21 381.205648 31 -46.428166 12 -272.806227 22 381.205648 32 46.428166 13 -272.806227 23 381.205648 33 46.428166 0 3DFACE 8 0 62 55 10 -272.806227 20 381.205648 30 -46.428166 11 -257.944137 21 425.804198 31 46.428166 12 -257.944137 22 425.804198 32 -46.428166 13 -257.944137 23 425.804198 33 -46.428166 0 3DFACE 8 0 62 55 10 -257.944137 20 425.804198 30 46.428166 11 -213.358000 21 440.670401 31 -46.428166 12 -257.944137 22 425.804198 32 -46.428166 13 -257.944137 23 425.804198 33 -46.428166 0 3DFACE 8 0 62 55 10 -213.358000 20 440.670401 30 -46.428166 11 -257.944137 21 425.804198 31 46.428166 12 -213.358000 22 440.670401 32 46.428166 13 -213.358000 23 440.670401 33 46.428166 0 ENDSEC 0 EOF xscreensaver-5.36/hacks/glx/toaster_handle.dxf000644 000767 000024 00000007576 07634066633 021554 0ustar00jwzstaff000000 000000 0 SECTION 2 HEADER 0 ENDSEC 0 SECTION 2 ENTITIES 0 3DFACE 8 0 62 55 10 490.188003 20 -92.321426 30 34.532439 11 -349.408537 21 37.865948 31 34.532439 12 -490.188003 22 -92.321426 32 34.532439 13 -490.188003 23 -92.321426 33 34.532439 0 3DFACE 8 0 62 55 10 -349.408537 20 37.865948 30 34.532439 11 490.188003 21 -92.321426 31 34.532439 12 -205.961362 22 92.321426 32 34.532439 13 -205.961362 23 92.321426 33 34.532439 0 3DFACE 8 0 62 55 10 -205.961362 20 92.321426 30 34.532439 11 490.188003 21 -92.321426 31 34.532439 12 205.961317 22 92.321426 32 34.532439 13 205.961317 23 92.321426 33 34.532439 0 3DFACE 8 0 62 55 10 205.961317 20 92.321426 30 34.532439 11 490.188003 21 -92.321426 31 34.532439 12 349.408507 22 37.865948 32 34.532439 13 349.408507 23 37.865948 33 34.532439 0 3DFACE 8 0 62 55 10 -490.188003 20 -92.321426 30 34.532439 11 -349.408537 21 37.865948 31 -34.532439 12 -490.188003 22 -92.321426 32 -34.532439 13 -490.188003 23 -92.321426 33 -34.532439 0 3DFACE 8 0 62 55 10 -349.408537 20 37.865948 30 -34.532439 11 -490.188003 21 -92.321426 31 34.532439 12 -349.408537 22 37.865948 32 34.532439 13 -349.408537 23 37.865948 33 34.532439 0 3DFACE 8 0 62 55 10 -349.408537 20 37.865948 30 -34.532439 11 490.188003 21 -92.321426 31 -34.532439 12 -490.188003 22 -92.321426 32 -34.532439 13 -490.188003 23 -92.321426 33 -34.532439 0 3DFACE 8 0 62 55 10 490.188003 20 -92.321426 30 -34.532439 11 -349.408537 21 37.865948 31 -34.532439 12 -205.961362 22 92.321426 32 -34.532439 13 -205.961362 23 92.321426 33 -34.532439 0 3DFACE 8 0 62 55 10 490.188003 20 -92.321426 30 -34.532439 11 -205.961362 21 92.321426 31 -34.532439 12 205.961317 22 92.321426 32 -34.532439 13 205.961317 23 92.321426 33 -34.532439 0 3DFACE 8 0 62 55 10 490.188003 20 -92.321426 30 -34.532439 11 205.961317 21 92.321426 31 -34.532439 12 349.408507 22 37.865948 32 -34.532439 13 349.408507 23 37.865948 33 -34.532439 0 3DFACE 8 0 62 55 10 349.408507 20 37.865948 30 34.532439 11 490.188003 21 -92.321426 31 -34.532439 12 349.408507 22 37.865948 32 -34.532439 13 349.408507 23 37.865948 33 -34.532439 0 3DFACE 8 0 62 55 10 490.188003 20 -92.321426 30 -34.532439 11 349.408507 21 37.865948 31 34.532439 12 490.188003 22 -92.321426 32 34.532439 13 490.188003 23 -92.321426 33 34.532439 0 3DFACE 8 0 62 55 10 -205.961362 20 92.321426 30 34.532439 11 205.961317 21 92.321426 31 -34.532439 12 -205.961362 22 92.321426 32 -34.532439 13 -205.961362 23 92.321426 33 -34.532439 0 3DFACE 8 0 62 55 10 205.961317 20 92.321426 30 -34.532439 11 -205.961362 21 92.321426 31 34.532439 12 205.961317 22 92.321426 32 34.532439 13 205.961317 23 92.321426 33 34.532439 0 3DFACE 8 0 62 55 10 205.961317 20 92.321426 30 34.532439 11 349.408507 21 37.865948 31 -34.532439 12 205.961317 22 92.321426 32 -34.532439 13 205.961317 23 92.321426 33 -34.532439 0 3DFACE 8 0 62 55 10 349.408507 20 37.865948 30 -34.532439 11 205.961317 21 92.321426 31 34.532439 12 349.408507 22 37.865948 32 34.532439 13 349.408507 23 37.865948 33 34.532439 0 3DFACE 8 0 62 55 10 -349.408537 20 37.865948 30 34.532439 11 -205.961362 21 92.321426 31 -34.532439 12 -349.408537 22 37.865948 32 -34.532439 13 -349.408537 23 37.865948 33 -34.532439 0 3DFACE 8 0 62 55 10 -205.961362 20 92.321426 30 -34.532439 11 -349.408537 21 37.865948 31 34.532439 12 -205.961362 22 92.321426 32 34.532439 13 -205.961362 23 92.321426 33 34.532439 0 ENDSEC 0 EOF xscreensaver-5.36/hacks/glx/toaster_handle2.dxf000644 000767 000024 00000004354 07634066633 021625 0ustar00jwzstaff000000 000000 0 SECTION 2 HEADER 0 ENDSEC 0 SECTION 2 ENTITIES 0 3DFACE 8 0 62 55 10 33.460636 20 -253.443152 30 -429.705501 11 -33.460632 21 276.347905 31 -415.345818 12 -33.460632 22 -253.443152 32 -429.705501 13 -33.460632 23 -253.443152 33 -429.705501 0 3DFACE 8 0 62 55 10 -33.460632 20 276.347905 30 -415.345818 11 33.460636 21 -253.443152 31 -429.705501 12 33.460636 22 276.347905 32 -415.345818 13 33.460636 23 276.347905 33 -415.345818 0 3DFACE 8 0 62 55 10 33.460636 20 253.443152 30 429.705560 11 33.460636 21 -253.443152 31 -429.705501 12 33.460636 22 -276.347905 32 415.345907 13 33.460636 23 -276.347905 33 415.345907 0 3DFACE 8 0 62 55 10 33.460636 20 -253.443152 30 -429.705501 11 33.460636 21 253.443152 31 429.705560 12 33.460636 22 276.347905 32 -415.345818 13 33.460636 23 276.347905 33 -415.345818 0 3DFACE 8 0 62 55 10 33.460636 20 253.443152 30 429.705560 11 -33.460632 21 -276.347905 31 415.345907 12 -33.460632 22 253.443152 32 429.705560 13 -33.460632 23 253.443152 33 429.705560 0 3DFACE 8 0 62 55 10 -33.460632 20 -276.347905 30 415.345907 11 33.460636 21 253.443152 31 429.705560 12 33.460636 22 -276.347905 32 415.345907 13 33.460636 23 -276.347905 33 415.345907 0 3DFACE 8 0 62 55 10 -33.460632 20 -253.443152 30 -429.705501 11 -33.460632 21 253.443152 31 429.705560 12 -33.460632 22 -276.347905 32 415.345907 13 -33.460632 23 -276.347905 33 415.345907 0 3DFACE 8 0 62 55 10 -33.460632 20 253.443152 30 429.705560 11 -33.460632 21 -253.443152 31 -429.705501 12 -33.460632 22 276.347905 32 -415.345818 13 -33.460632 23 276.347905 33 -415.345818 0 3DFACE 8 0 62 55 10 33.460636 20 253.443152 30 429.705560 11 -33.460632 21 276.347905 31 -415.345818 12 33.460636 22 276.347905 32 -415.345818 13 33.460636 23 276.347905 33 -415.345818 0 3DFACE 8 0 62 55 10 -33.460632 20 276.347905 30 -415.345818 11 33.460636 21 253.443152 31 429.705560 12 -33.460632 22 253.443152 32 429.705560 13 -33.460632 23 253.443152 33 429.705560 0 ENDSEC 0 EOF xscreensaver-5.36/hacks/glx/toaster_jet.dxf000644 000767 000024 00000027770 07634066633 021101 0ustar00jwzstaff000000 000000 0 SECTION 2 HEADER 0 ENDSEC 0 SECTION 2 ENTITIES 0 3DFACE 8 0 62 55 10 -2.099907 20 -238.135010 30 0.392425 11 -61.006751 21 -495.968699 31 -10.273786 12 -31.296514 22 -495.968699 32 -54.839045 13 -31.296514 23 -495.968699 33 -54.839045 0 3DFACE 8 0 62 55 10 12.841670 20 391.784638 30 119.185813 11 -87.276451 21 -238.135010 31 81.088670 12 12.841670 22 -238.135010 32 119.185813 13 12.841670 23 -238.135010 33 119.185813 0 3DFACE 8 0 62 55 10 -2.099907 20 -238.135010 30 0.392425 11 22.069970 21 -495.968699 31 -59.396684 12 58.906760 22 -495.968699 32 -20.514699 13 58.906760 23 -495.968699 33 -20.514699 0 3DFACE 8 0 62 55 10 -119.913481 20 391.784638 30 -20.939998 11 -119.913481 21 -238.135010 31 -20.939998 12 -87.276451 22 391.784638 32 81.088670 13 -87.276451 23 391.784638 33 81.088670 0 3DFACE 8 0 62 55 10 22.069970 20 -495.968699 30 -59.396684 11 -31.296514 21 -495.968699 31 -54.839045 12 -60.493119 22 -238.135010 32 -110.070519 13 -60.493119 23 -238.135010 33 -110.070519 0 3DFACE 8 0 62 55 10 46.239849 20 -238.135010 30 -119.185783 11 -60.493119 21 391.784638 31 -110.070519 12 46.239849 22 391.784638 32 -119.185783 13 46.239849 23 391.784638 33 -119.185783 0 3DFACE 8 0 62 55 10 46.239849 20 391.784638 30 -119.185783 11 -31.296514 21 495.968699 31 -54.839045 12 22.069970 22 495.968699 32 -59.396684 13 22.069970 23 495.968699 33 -59.396684 0 3DFACE 8 0 62 55 10 105.049863 20 -238.135010 30 64.663500 11 51.474977 21 -495.968699 31 32.527965 12 119.913429 22 -238.135010 32 -41.421823 13 119.913429 23 -238.135010 33 -41.421823 0 3DFACE 8 0 62 55 10 46.239849 20 -238.135010 30 -119.185783 11 -60.493119 21 -238.135010 31 -110.070519 12 -60.493119 22 391.784638 32 -110.070519 13 -60.493119 23 391.784638 33 -110.070519 0 3DFACE 8 0 62 55 10 58.906760 20 495.968699 30 -20.514699 11 119.913429 21 391.784638 31 -41.421823 12 22.069970 22 495.968699 32 -59.396684 13 22.069970 23 495.968699 33 -59.396684 0 3DFACE 8 0 62 55 10 -2.099907 20 -238.135010 30 0.392425 11 -44.688124 21 -495.968699 31 40.740550 12 -61.006751 22 -495.968699 32 -10.273786 13 -61.006751 23 -495.968699 33 -10.273786 0 3DFACE 8 0 62 55 10 46.239849 20 -238.135010 30 -119.185783 11 22.069970 21 -495.968699 31 -59.396684 12 -60.493119 22 -238.135010 32 -110.070519 13 -60.493119 23 -238.135010 33 -110.070519 0 3DFACE 8 0 62 55 10 105.049863 20 391.784638 30 64.663500 11 51.474977 21 495.968699 31 32.527965 12 12.841670 22 391.784638 32 119.185813 13 12.841670 23 391.784638 33 119.185813 0 3DFACE 8 0 62 55 10 105.049863 20 391.784638 30 64.663500 11 105.049863 21 -238.135010 31 64.663500 12 119.913429 22 391.784638 32 -41.421823 13 119.913429 23 391.784638 33 -41.421823 0 3DFACE 8 0 62 55 10 22.069970 20 -495.968699 30 -59.396684 11 -2.099907 21 -238.135010 31 0.392425 12 -31.296514 22 -495.968699 32 -54.839045 13 -31.296514 23 -495.968699 33 -54.839045 0 3DFACE 8 0 62 55 10 -119.913481 20 -238.135010 30 -20.939998 11 -61.006751 21 -495.968699 31 -10.273786 12 -87.276451 22 -238.135010 32 81.088670 13 -87.276451 23 -238.135010 33 81.088670 0 3DFACE 8 0 62 55 10 -60.493119 20 391.784638 30 -110.070519 11 -60.493119 21 -238.135010 31 -110.070519 12 -119.913481 22 391.784638 32 -20.939998 13 -119.913481 23 391.784638 33 -20.939998 0 3DFACE 8 0 62 55 10 105.049863 20 -238.135010 30 64.663500 11 12.841670 21 -238.135010 31 119.185813 12 5.370881 22 -495.968699 32 59.789117 13 5.370881 23 -495.968699 33 59.789117 0 3DFACE 8 0 62 55 10 22.069970 20 495.968699 30 -59.396684 11 -31.296514 21 495.968699 31 -54.839045 12 -2.099907 22 391.784638 32 0.392425 13 -2.099907 23 391.784638 33 0.392425 0 3DFACE 8 0 62 55 10 51.474977 20 -495.968699 30 32.527965 11 5.370881 21 -495.968699 31 59.789117 12 -2.099907 22 -238.135010 32 0.392425 13 -2.099907 23 -238.135010 33 0.392425 0 3DFACE 8 0 62 55 10 -87.276451 20 -238.135010 30 81.088670 11 -61.006751 21 -495.968699 31 -10.273786 12 -44.688124 22 -495.968699 32 40.740550 13 -44.688124 23 -495.968699 33 40.740550 0 3DFACE 8 0 62 55 10 -2.099907 20 -238.135010 30 0.392425 11 58.906760 21 -495.968699 31 -20.514699 12 51.474977 22 -495.968699 32 32.527965 13 51.474977 23 -495.968699 33 32.527965 0 3DFACE 8 0 62 55 10 -31.296514 20 495.968699 30 -54.839045 11 -61.006751 21 495.968699 31 -10.273786 12 -2.099907 22 391.784638 32 0.392425 13 -2.099907 23 391.784638 33 0.392425 0 3DFACE 8 0 62 55 10 119.913429 20 -238.135010 30 -41.421823 11 51.474977 21 -495.968699 31 32.527965 12 58.906760 22 -495.968699 32 -20.514699 13 58.906760 23 -495.968699 33 -20.514699 0 3DFACE 8 0 62 55 10 22.069970 20 495.968699 30 -59.396684 11 119.913429 21 391.784638 31 -41.421823 12 46.239849 22 391.784638 32 -119.185783 13 46.239849 23 391.784638 33 -119.185783 0 3DFACE 8 0 62 55 10 -61.006751 20 495.968699 30 -10.273786 11 -60.493119 21 391.784638 31 -110.070519 12 -119.913481 22 391.784638 32 -20.939998 13 -119.913481 23 391.784638 33 -20.939998 0 3DFACE 8 0 62 55 10 -60.493119 20 391.784638 30 -110.070519 11 -61.006751 21 495.968699 31 -10.273786 12 -31.296514 22 495.968699 32 -54.839045 13 -31.296514 23 495.968699 33 -54.839045 0 3DFACE 8 0 62 55 10 -44.688124 20 495.968699 30 40.740550 11 -61.006751 21 495.968699 31 -10.273786 12 -119.913481 22 391.784638 32 -20.939998 13 -119.913481 23 391.784638 33 -20.939998 0 3DFACE 8 0 62 55 10 51.474977 20 495.968699 30 32.527965 11 -2.099907 21 391.784638 31 0.392425 12 5.370881 22 495.968699 32 59.789117 13 5.370881 23 495.968699 33 59.789117 0 3DFACE 8 0 62 55 10 119.913429 20 -238.135010 30 -41.421823 11 58.906760 21 -495.968699 31 -20.514699 12 46.239849 22 -238.135010 32 -119.185783 13 46.239849 23 -238.135010 33 -119.185783 0 3DFACE 8 0 62 55 10 22.069970 20 495.968699 30 -59.396684 11 -2.099907 21 391.784638 31 0.392425 12 58.906760 22 495.968699 32 -20.514699 13 58.906760 23 495.968699 33 -20.514699 0 3DFACE 8 0 62 55 10 12.841670 20 391.784638 30 119.185813 11 -87.276451 21 391.784638 31 81.088670 12 -87.276451 22 -238.135010 32 81.088670 13 -87.276451 23 -238.135010 33 81.088670 0 3DFACE 8 0 62 55 10 -44.688124 20 495.968699 30 40.740550 11 -2.099907 21 391.784638 31 0.392425 12 -61.006751 22 495.968699 32 -10.273786 13 -61.006751 23 495.968699 33 -10.273786 0 3DFACE 8 0 62 55 10 105.049863 20 391.784638 30 64.663500 11 12.841670 21 -238.135010 31 119.185813 12 105.049863 22 -238.135010 32 64.663500 13 105.049863 23 -238.135010 33 64.663500 0 3DFACE 8 0 62 55 10 5.370881 20 495.968699 30 59.789117 11 -44.688124 21 495.968699 31 40.740550 12 -87.276451 22 391.784638 32 81.088670 13 -87.276451 23 391.784638 33 81.088670 0 3DFACE 8 0 62 55 10 46.239849 20 391.784638 30 -119.185783 11 -60.493119 21 391.784638 31 -110.070519 12 -31.296514 22 495.968699 32 -54.839045 13 -31.296514 23 495.968699 33 -54.839045 0 3DFACE 8 0 62 55 10 46.239849 20 391.784638 30 -119.185783 11 119.913429 21 -238.135010 31 -41.421823 12 46.239849 22 -238.135010 32 -119.185783 13 46.239849 23 -238.135010 33 -119.185783 0 3DFACE 8 0 62 55 10 58.906760 20 495.968699 30 -20.514699 11 105.049863 21 391.784638 31 64.663500 12 119.913429 22 391.784638 32 -41.421823 13 119.913429 23 391.784638 33 -41.421823 0 3DFACE 8 0 62 55 10 58.906760 20 495.968699 30 -20.514699 11 -2.099907 21 391.784638 31 0.392425 12 51.474977 22 495.968699 32 32.527965 13 51.474977 23 495.968699 33 32.527965 0 3DFACE 8 0 62 55 10 12.841670 20 -238.135010 30 119.185813 11 -44.688124 21 -495.968699 31 40.740550 12 5.370881 22 -495.968699 32 59.789117 13 5.370881 23 -495.968699 33 59.789117 0 3DFACE 8 0 62 55 10 -119.913481 20 391.784638 30 -20.939998 11 -60.493119 21 -238.135010 31 -110.070519 12 -119.913481 22 -238.135010 32 -20.939998 13 -119.913481 23 -238.135010 33 -20.939998 0 3DFACE 8 0 62 55 10 -87.276451 20 391.784638 30 81.088670 11 -119.913481 21 -238.135010 31 -20.939998 12 -87.276451 22 -238.135010 32 81.088670 13 -87.276451 23 -238.135010 33 81.088670 0 3DFACE 8 0 62 55 10 -44.688124 20 495.968699 30 40.740550 11 -119.913481 21 391.784638 31 -20.939998 12 -87.276451 22 391.784638 32 81.088670 13 -87.276451 23 391.784638 33 81.088670 0 3DFACE 8 0 62 55 10 5.370881 20 495.968699 30 59.789117 11 -2.099907 21 391.784638 31 0.392425 12 -44.688124 22 495.968699 32 40.740550 13 -44.688124 23 495.968699 33 40.740550 0 3DFACE 8 0 62 55 10 -119.913481 20 -238.135010 30 -20.939998 11 -31.296514 21 -495.968699 31 -54.839045 12 -61.006751 22 -495.968699 32 -10.273786 13 -61.006751 23 -495.968699 33 -10.273786 0 3DFACE 8 0 62 55 10 -31.296514 20 -495.968699 30 -54.839045 11 -119.913481 21 -238.135010 31 -20.939998 12 -60.493119 22 -238.135010 32 -110.070519 13 -60.493119 23 -238.135010 33 -110.070519 0 3DFACE 8 0 62 55 10 5.370881 20 -495.968699 30 59.789117 11 -44.688124 21 -495.968699 31 40.740550 12 -2.099907 22 -238.135010 32 0.392425 13 -2.099907 23 -238.135010 33 0.392425 0 3DFACE 8 0 62 55 10 12.841670 20 -238.135010 30 119.185813 11 -87.276451 21 -238.135010 31 81.088670 12 -44.688124 22 -495.968699 32 40.740550 13 -44.688124 23 -495.968699 33 40.740550 0 3DFACE 8 0 62 55 10 12.841670 20 391.784638 30 119.185813 11 5.370881 21 495.968699 31 59.789117 12 -87.276451 22 391.784638 32 81.088670 13 -87.276451 23 391.784638 33 81.088670 0 3DFACE 8 0 62 55 10 105.049863 20 -238.135010 30 64.663500 11 5.370881 21 -495.968699 31 59.789117 12 51.474977 22 -495.968699 32 32.527965 13 51.474977 23 -495.968699 33 32.527965 0 3DFACE 8 0 62 55 10 119.913429 20 391.784638 30 -41.421823 11 119.913429 21 -238.135010 31 -41.421823 12 46.239849 22 391.784638 32 -119.185783 13 46.239849 23 391.784638 33 -119.185783 0 3DFACE 8 0 62 55 10 119.913429 20 391.784638 30 -41.421823 11 105.049863 21 -238.135010 31 64.663500 12 119.913429 22 -238.135010 32 -41.421823 13 119.913429 23 -238.135010 33 -41.421823 0 3DFACE 8 0 62 55 10 105.049863 20 391.784638 30 64.663500 11 12.841670 21 391.784638 31 119.185813 12 12.841670 22 -238.135010 32 119.185813 13 12.841670 23 -238.135010 33 119.185813 0 3DFACE 8 0 62 55 10 51.474977 20 495.968699 30 32.527965 11 105.049863 21 391.784638 31 64.663500 12 58.906760 22 495.968699 32 -20.514699 13 58.906760 23 495.968699 33 -20.514699 0 3DFACE 8 0 62 55 10 51.474977 20 495.968699 30 32.527965 11 5.370881 21 495.968699 31 59.789117 12 12.841670 22 391.784638 32 119.185813 13 12.841670 23 391.784638 33 119.185813 0 3DFACE 8 0 62 55 10 46.239849 20 -238.135010 30 -119.185783 11 58.906760 21 -495.968699 31 -20.514699 12 22.069970 22 -495.968699 32 -59.396684 13 22.069970 23 -495.968699 33 -59.396684 0 ENDSEC 0 EOF xscreensaver-5.36/hacks/glx/toaster_knob.dxf000644 000767 000024 00000010733 07634066633 021237 0ustar00jwzstaff000000 000000 0 SECTION 2 HEADER 0 ENDSEC 0 SECTION 2 ENTITIES 0 3DFACE 8 0 62 55 10 6.216122 20 -5.792122 30 -12.087326 11 10.491247 21 6.034714 31 -3.229065 12 10.491247 22 -6.023361 32 -3.555895 13 10.491247 23 -6.023361 33 -3.555895 0 3DFACE 8 0 62 55 10 10.491247 20 6.034714 30 -3.229065 11 6.216122 21 -5.792122 31 -12.087326 12 6.216122 22 6.265953 32 -11.760496 13 6.216122 23 6.265953 33 -11.760496 0 3DFACE 8 0 62 55 10 -10.342501 20 5.896584 30 1.867052 11 -10.491246 21 -5.902893 31 -8.000555 12 -10.342501 22 -6.161491 32 1.540224 13 -10.342501 23 -6.161491 33 1.540224 0 3DFACE 8 0 62 55 10 -10.491246 20 -5.902893 30 -8.000555 11 -10.342501 21 5.896584 31 1.867052 12 -10.491246 22 6.155182 32 -7.673727 13 -10.491246 23 6.155182 33 -7.673727 0 3DFACE 8 0 62 55 10 10.491247 20 -6.023361 30 -3.555895 11 6.484152 21 5.799973 31 5.431395 12 6.484152 22 -6.258095 32 5.104565 13 6.484152 23 -6.258095 33 5.104565 0 3DFACE 8 0 62 55 10 6.484152 20 5.799973 30 5.431395 11 10.491247 21 -6.023361 31 -3.555895 12 10.491247 22 6.034714 32 -3.229065 13 10.491247 23 6.034714 33 -3.229065 0 3DFACE 8 0 62 55 10 -2.787737 20 -6.319573 30 7.372553 11 -10.342501 21 5.896584 31 1.867052 12 -10.342501 22 -6.161491 32 1.540224 13 -10.342501 23 -6.161491 33 1.540224 0 3DFACE 8 0 62 55 10 -10.342501 20 5.896584 30 1.867052 11 -2.787737 21 -6.319573 31 7.372553 12 -2.787737 22 5.738503 32 7.699381 13 -2.787737 23 5.738503 33 7.699381 0 3DFACE 8 0 62 55 10 6.216122 20 -5.792122 30 -12.087326 11 -10.491246 21 -5.902893 31 -8.000555 12 -3.121965 22 -5.738503 32 -14.065386 13 -3.121965 23 -5.738503 33 -14.065386 0 3DFACE 8 0 62 55 10 -10.491246 20 -5.902893 30 -8.000555 11 6.216122 21 -5.792122 31 -12.087326 12 10.491247 22 -6.023361 32 -3.555895 13 10.491247 23 -6.023361 33 -3.555895 0 3DFACE 8 0 62 55 10 -10.491246 20 -5.902893 30 -8.000555 11 10.491247 21 -6.023361 31 -3.555895 12 -10.342501 22 -6.161491 32 1.540224 13 -10.342501 23 -6.161491 33 1.540224 0 3DFACE 8 0 62 55 10 -10.342501 20 -6.161491 30 1.540224 11 10.491247 21 -6.023361 31 -3.555895 12 6.484152 22 -6.258095 32 5.104565 13 6.484152 23 -6.258095 33 5.104565 0 3DFACE 8 0 62 55 10 -10.342501 20 -6.161491 30 1.540224 11 6.484152 21 -6.258095 31 5.104565 12 1.848208 22 -6.288834 32 6.238558 13 1.848208 23 -6.288834 33 6.238558 0 3DFACE 8 0 62 55 10 -10.342501 20 -6.161491 30 1.540224 11 1.848208 21 -6.288834 31 6.238558 12 -2.787737 22 -6.319573 32 7.372553 13 -2.787737 23 -6.319573 33 7.372553 0 3DFACE 8 0 62 55 10 -3.121965 20 6.319565 30 -13.738557 11 -10.491246 21 -5.902893 31 -8.000555 12 -10.491246 22 6.155182 32 -7.673727 13 -10.491246 23 6.155182 33 -7.673727 0 3DFACE 8 0 62 55 10 -10.491246 20 -5.902893 30 -8.000555 11 -3.121965 21 6.319565 31 -13.738557 12 -3.121965 22 -5.738503 32 -14.065386 13 -3.121965 23 -5.738503 33 -14.065386 0 3DFACE 8 0 62 55 10 6.216122 20 6.265953 30 -11.760496 11 -3.121965 21 -5.738503 31 -14.065386 12 -3.121965 22 6.319565 32 -13.738557 13 -3.121965 23 6.319565 33 -13.738557 0 3DFACE 8 0 62 55 10 -3.121965 20 -5.738503 30 -14.065386 11 6.216122 21 6.265953 31 -11.760496 12 6.216122 22 -5.792122 32 -12.087326 13 6.216122 23 -5.792122 33 -12.087326 0 3DFACE 8 0 62 55 10 1.848208 20 -6.288834 30 6.238558 11 -2.787737 21 5.738503 31 7.699381 12 -2.787737 22 -6.319573 32 7.372553 13 -2.787737 23 -6.319573 33 7.372553 0 3DFACE 8 0 62 55 10 3.285708 20 5.769234 30 14.065386 11 -2.787737 21 5.738503 31 7.699381 12 1.848208 22 -6.288834 32 6.238558 13 1.848208 23 -6.288834 33 6.238558 0 3DFACE 8 0 62 55 10 6.484152 20 5.799973 30 5.431395 11 1.848208 21 -6.288834 31 6.238558 12 6.484152 22 -6.258095 32 5.104565 13 6.484152 23 -6.258095 33 5.104565 0 3DFACE 8 0 62 55 10 6.484152 20 5.799973 30 5.431395 11 3.285708 21 5.769234 31 14.065386 12 1.848208 22 -6.288834 32 6.238558 13 1.848208 23 -6.288834 33 6.238558 0 ENDSEC 0 EOF xscreensaver-5.36/hacks/glx/toaster_slots.dxf000644 000767 000024 00000016012 07634066633 021446 0ustar00jwzstaff000000 000000 0 SECTION 2 HEADER 0 ENDSEC 0 SECTION 2 ENTITIES 0 3DFACE 8 0 62 55 10 -156.295180 20 -235.978112 30 178.203195 11 -167.546690 21 -426.312745 31 105.301157 12 -167.546690 22 -426.312745 32 -200.463355 13 -167.546690 23 -426.312745 33 -200.463355 0 3DFACE 8 0 62 55 10 -156.295180 20 0.000001 30 200.463355 11 -156.295180 21 -235.978112 31 178.203195 12 -167.546690 22 -426.312745 32 -200.463355 13 -167.546690 23 -426.312745 33 -200.463355 0 3DFACE 8 0 62 55 10 -50.661352 20 -426.312745 30 105.301157 11 -49.999118 21 -426.312745 31 -200.463355 12 -167.546690 22 -426.312745 32 -200.463355 13 -167.546690 23 -426.312745 33 -200.463355 0 3DFACE 8 0 62 55 10 -50.661352 20 -426.312745 30 105.301157 11 -167.546690 21 -426.312745 31 -200.463355 12 -167.546690 22 -426.312745 32 105.301157 13 -167.546690 23 -426.312745 33 105.301157 0 3DFACE 8 0 62 55 10 -167.546690 20 426.312745 30 105.301157 11 -156.295180 21 235.978127 31 178.203195 12 -167.546690 22 426.312745 32 -200.463355 13 -167.546690 23 426.312745 33 -200.463355 0 3DFACE 8 0 62 55 10 -167.546690 20 426.312745 30 -200.463355 11 -156.295180 21 235.978127 31 178.203195 12 -156.295180 22 0.000001 32 200.463355 13 -156.295180 23 0.000001 33 200.463355 0 3DFACE 8 0 62 55 10 -167.546690 20 426.312745 30 105.301157 11 -167.546690 21 426.312745 31 -200.463355 12 -50.661352 22 426.312745 32 105.301157 13 -50.661352 23 426.312745 33 105.301157 0 3DFACE 8 0 62 55 10 -167.546690 20 426.312745 30 -200.463355 11 -156.295180 21 0.000001 31 200.463355 12 -167.546690 22 -426.312745 32 -200.463355 13 -167.546690 23 -426.312745 33 -200.463355 0 3DFACE 8 0 62 55 10 -49.999118 20 426.312745 30 -200.463355 11 -49.999118 21 0.000001 31 200.463355 12 -50.661352 22 235.978127 32 178.203195 13 -50.661352 23 235.978127 33 178.203195 0 3DFACE 8 0 62 55 10 -50.661352 20 -235.978112 30 178.203195 11 -49.999118 21 -426.312745 31 -200.463355 12 -50.661352 22 -426.312745 32 105.301157 13 -50.661352 23 -426.312745 33 105.301157 0 3DFACE 8 0 62 55 10 -49.999118 20 0.000001 30 200.463355 11 -49.999118 21 -426.312745 31 -200.463355 12 -50.661352 22 -235.978112 32 178.203195 13 -50.661352 23 -235.978112 33 178.203195 0 3DFACE 8 0 62 55 10 -49.999118 20 426.312745 30 -200.463355 11 -49.999118 21 -426.312745 31 -200.463355 12 -49.999118 22 0.000001 32 200.463355 13 -49.999118 23 0.000001 33 200.463355 0 3DFACE 8 0 62 55 10 -49.999118 20 -426.312745 30 -200.463355 11 -49.999118 21 426.312745 31 -200.463355 12 -167.546690 22 426.312745 32 -200.463355 13 -167.546690 23 426.312745 33 -200.463355 0 3DFACE 8 0 62 55 10 -49.999118 20 -426.312745 30 -200.463355 11 -167.546690 21 426.312745 31 -200.463355 12 -167.546690 22 -426.312745 32 -200.463355 13 -167.546690 23 -426.312745 33 -200.463355 0 3DFACE 8 0 62 55 10 -50.661352 20 426.312745 30 105.301157 11 -167.546690 21 426.312745 31 -200.463355 12 -49.999118 22 426.312745 32 -200.463355 13 -49.999118 23 426.312745 33 -200.463355 0 3DFACE 8 0 62 55 10 -49.999118 20 426.312745 30 -200.463355 11 -50.661352 21 235.978127 31 178.203195 12 -50.661352 22 426.312745 32 105.301157 13 -50.661352 23 426.312745 33 105.301157 0 3DFACE 8 0 62 55 10 49.999110 20 426.312745 30 -200.463355 11 49.999110 21 0.000001 31 200.463355 12 49.999110 22 -426.312745 32 -200.463355 13 49.999110 23 -426.312745 33 -200.463355 0 3DFACE 8 0 62 55 10 50.661348 20 -235.978112 30 178.203195 11 50.661348 21 -426.312745 31 105.301157 12 49.999110 22 -426.312745 32 -200.463355 13 49.999110 23 -426.312745 33 -200.463355 0 3DFACE 8 0 62 55 10 49.999110 20 426.312745 30 -200.463355 11 50.661348 21 235.978127 31 178.203195 12 49.999110 22 0.000001 32 200.463355 13 49.999110 23 0.000001 33 200.463355 0 3DFACE 8 0 62 55 10 49.999110 20 0.000001 30 200.463355 11 50.661348 21 -235.978112 31 178.203195 12 49.999110 22 -426.312745 32 -200.463355 13 49.999110 23 -426.312745 33 -200.463355 0 3DFACE 8 0 62 55 10 167.546690 20 426.312745 30 -200.463355 11 156.295151 21 235.978127 31 178.203195 12 167.546690 22 426.312745 32 105.301157 13 167.546690 23 426.312745 33 105.301157 0 3DFACE 8 0 62 55 10 156.295151 20 0.000001 30 200.463355 11 167.546690 21 -426.312745 31 -200.463355 12 156.295151 22 -235.978112 32 178.203195 13 156.295151 23 -235.978112 33 178.203195 0 3DFACE 8 0 62 55 10 50.661348 20 -426.312745 30 105.301157 11 167.546690 21 -426.312745 31 -200.463355 12 49.999110 22 -426.312745 32 -200.463355 13 49.999110 23 -426.312745 33 -200.463355 0 3DFACE 8 0 62 55 10 156.295151 20 -235.978112 30 178.203195 11 167.546690 21 -426.312745 31 -200.463355 12 167.546690 22 -426.312745 32 105.301157 13 167.546690 23 -426.312745 33 105.301157 0 3DFACE 8 0 62 55 10 50.661348 20 426.312745 30 105.301157 11 167.546690 21 426.312745 31 -200.463355 12 167.546690 22 426.312745 32 105.301157 13 167.546690 23 426.312745 33 105.301157 0 3DFACE 8 0 62 55 10 167.546690 20 -426.312745 30 105.301157 11 167.546690 21 -426.312745 31 -200.463355 12 50.661348 22 -426.312745 32 105.301157 13 50.661348 23 -426.312745 33 105.301157 0 3DFACE 8 0 62 55 10 167.546690 20 426.312745 30 -200.463355 11 156.295151 21 0.000001 31 200.463355 12 156.295151 22 235.978127 32 178.203195 13 156.295151 23 235.978127 33 178.203195 0 3DFACE 8 0 62 55 10 167.546690 20 426.312745 30 -200.463355 11 167.546690 21 -426.312745 31 -200.463355 12 156.295151 22 0.000001 32 200.463355 13 156.295151 23 0.000001 33 200.463355 0 3DFACE 8 0 62 55 10 167.546690 20 426.312745 30 -200.463355 11 49.999110 21 -426.312745 31 -200.463355 12 167.546690 22 -426.312745 32 -200.463355 13 167.546690 23 -426.312745 33 -200.463355 0 3DFACE 8 0 62 55 10 167.546690 20 426.312745 30 -200.463355 11 49.999110 21 426.312745 31 -200.463355 12 49.999110 22 -426.312745 32 -200.463355 13 49.999110 23 -426.312745 33 -200.463355 0 3DFACE 8 0 62 55 10 50.661348 20 426.312745 30 105.301157 11 50.661348 21 235.978127 31 178.203195 12 49.999110 22 426.312745 32 -200.463355 13 49.999110 23 426.312745 33 -200.463355 0 3DFACE 8 0 62 55 10 50.661348 20 426.312745 30 105.301157 11 49.999110 21 426.312745 31 -200.463355 12 167.546690 22 426.312745 32 -200.463355 13 167.546690 23 426.312745 33 -200.463355 0 ENDSEC 0 EOF xscreensaver-5.36/hacks/glx/toaster_wing.dxf000644 000767 000024 00000004664 07634066633 021260 0ustar00jwzstaff000000 000000 0 SECTION 2 HEADER 0 ENDSEC 0 SECTION 2 ENTITIES 0 3DFACE 8 0 62 55 10 447.039068 20 -221.779630 30 -31.142678 11 -447.039098 21 221.779630 31 -29.042747 12 357.011020 22 3.148119 32 -31.142678 13 357.011020 23 3.148119 33 -31.142678 0 3DFACE 8 0 62 55 10 357.011020 20 3.148119 30 -31.142678 11 -447.039098 21 221.779630 31 -29.042747 12 342.163920 22 -34.927092 32 10.702347 13 342.163920 23 -34.927092 33 10.702347 0 3DFACE 8 0 62 55 10 447.039068 20 -221.779630 30 -31.142678 11 342.163920 21 -34.927092 31 10.702347 12 -417.241931 22 -84.046043 32 -29.042747 13 -417.241931 23 -84.046043 33 -29.042747 0 3DFACE 8 0 62 55 10 447.039068 20 -221.779630 30 -31.142678 11 -417.241931 21 -84.046043 31 -29.042747 12 -447.039098 22 221.779630 32 -29.042747 13 -447.039098 23 221.779630 33 -29.042747 0 3DFACE 8 0 62 55 10 342.163920 20 -34.927092 30 10.702347 11 -447.039098 21 221.779630 31 -29.042747 12 -417.241931 22 -84.046043 32 -29.042747 13 -417.241931 23 -84.046043 33 -29.042747 0 3DFACE 8 0 62 55 10 342.163920 20 -34.927092 30 10.702347 11 -431.487292 21 119.671926 31 31.142659 12 -417.241931 22 -84.046043 32 -29.042747 13 -417.241931 23 -84.046043 33 -29.042747 0 3DFACE 8 0 62 55 10 447.039068 20 -58.389261 30 -31.142678 11 342.163920 21 -34.927092 31 10.702347 12 447.039068 22 -221.779630 32 -31.142678 13 447.039068 23 -221.779630 33 -31.142678 0 3DFACE 8 0 62 55 10 342.163920 20 -34.927092 30 10.702347 11 -447.039098 21 221.779630 31 -29.042747 12 -431.487292 22 119.671926 32 31.142659 13 -431.487292 23 119.671926 33 31.142659 0 3DFACE 8 0 62 55 10 357.011020 20 3.148119 30 -31.142678 11 447.039068 21 -221.779630 31 -31.142678 12 342.163920 22 -34.927092 32 10.702347 13 342.163920 23 -34.927092 33 10.702347 0 3DFACE 8 0 62 55 10 447.039068 20 -58.389261 30 -31.142678 11 357.011020 21 3.148119 31 -31.142678 12 342.163920 22 -34.927092 32 10.702347 13 342.163920 23 -34.927092 33 10.702347 0 3DFACE 8 0 62 55 10 447.039068 20 -221.779630 30 -31.142678 11 357.011020 21 3.148119 31 -31.142678 12 447.039068 22 -58.389261 32 -31.142678 13 447.039068 23 -58.389261 33 -31.142678 0 ENDSEC 0 EOF xscreensaver-5.36/driver/README000644 000767 000024 00000000435 05627212451 016317 0ustar00jwzstaff000000 000000 This directory contains the source for xscreensaver and xscreensaver-command, the screensaver driver, and the program for externally controlling it. Some stuff from the ../utils/ directory is used here as well. If you have compilation problems, check the parameters in ../config.h. xscreensaver-5.36/driver/Makefile.in000664 000767 000000 00000107170 12777052476 017522 0ustar00jwzwheel000000 000000 # driver/Makefile.in --- xscreensaver, Copyright (c) 1997-2010 Jamie Zawinski. # the `../configure' script generates `driver/Makefile' from this file. @SET_MAKE@ .SUFFIXES: .SUFFIXES: .c .m .o srcdir = @srcdir@ VPATH = @srcdir@ top_srcdir = @top_srcdir@ top_builddir = .. install_prefix = prefix = @prefix@ exec_prefix = @exec_prefix@ bindir = @bindir@ datarootdir = @datarootdir@ datadir = @datadir@ localedir = @PO_DATADIR@/locale mandir = @mandir@ libexecdir = @libexecdir@ mansuffix = 1 manNdir = $(mandir)/man$(mansuffix) INTLTOOL_MERGE = @INTLTOOL_MERGE@ GTK_DATADIR = @GTK_DATADIR@ GTK_APPDIR = $(GTK_DATADIR)/applications GTK_ICONDIR = $(GTK_DATADIR)/pixmaps GTK_GLADEDIR = $(GTK_DATADIR)/xscreensaver/glade HACK_CONF_DIR = @HACK_CONF_DIR@ CC = @CC@ OBJCC = @OBJCC@ CFLAGS = @CFLAGS@ LDFLAGS = @LDFLAGS@ DEFS = @DEFS@ INTL_DEFS = -DLOCALEDIR=\"$(localedir)\" SUBP_DEFS = $(DEFS) -DDEFAULT_PATH_PREFIX='"@HACKDIR@"' GTK_DEFS = $(DEFS) -DDEFAULT_ICONDIR='"$(GTK_GLADEDIR)"' CONF_DEFS = -DHACK_CONFIGURATION_PATH='"$(HACK_CONF_DIR)"' LIBS = @LIBS@ INTL_LIBS = @INTLLIBS@ JPEG_LIBS = @JPEG_LIBS@ PERL = @PERL@ DEPEND = @DEPEND@ DEPEND_FLAGS = @DEPEND_FLAGS@ DEPEND_DEFINES = @DEPEND_DEFINES@ SHELL = /bin/sh INSTALL = @INSTALL@ SUID_FLAGS = -o root -m 4755 INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_SETUID = @INSTALL_SETUID@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_DIRS = @INSTALL_DIRS@ X_CFLAGS = @X_CFLAGS@ X_LIBS = @X_LIBS@ X_PRE_LIBS = @X_PRE_LIBS@ X_EXTRA_LIBS = @X_EXTRA_LIBS@ XMU_LIBS = @XMU_LIBS@ XPM_LIBS = @XPM_LIBS@ # Note: # # X_LIBS would more properly be called X_LDFLAGS (it contains the -L args.) # X_PRE_LIBS contains extra libraries you have to link against on some systems, # and that must come before -lX11. (e.g., -lSM and -lICE.) # X_EXTRA_LIBS contains extra libraries needed by X that aren't a part of X. # (e.g., -lsocket, -lnsl, etc.) # # I think (but am not totally sure) that LIBS is also really "LDFLAGS". # # SAVER_LIBS is the link line for "xscreensaver", and # CMD_LIBS is the link line for "xscreensaver-command". # GETIMG_LIBS is the link line for "xscreensaver-getimage". AD_DIR = @APPDEFAULTS@ PAM_DIR = /etc/pam.d PAM_CONF = /etc/pam.conf UTILS_SRC = $(srcdir)/../utils UTILS_BIN = ../utils INCLUDES_1 = -I. -I$(srcdir) -I$(UTILS_SRC) -I.. INCLUDES = $(INCLUDES_1) @INCLUDES@ MOTIF_SRCS = demo-Xm.c demo-Xm-widgets.c MOTIF_OBJS = demo-Xm.o demo-Xm-widgets.o GTK_SRCS = demo-Gtk.c demo-Gtk-conf.c GTK_OBJS = demo-Gtk.o demo-Gtk-conf.o @GTK_EXTRA_OBJS@ PWENT_SRCS = passwd-pwent.c PWENT_OBJS = passwd-pwent.o KERBEROS_SRCS = passwd-kerberos.c KERBEROS_OBJS = passwd-kerberos.o PAM_SRCS = passwd-pam.c PAM_OBJS = passwd-pam.o PWHELPER_SRCS = passwd-helper.c PWHELPER_OBJS = passwd-helper.o LOCK_SRCS_1 = lock.c passwd.c LOCK_OBJS_1 = lock.o passwd.o NOLOCK_SRCS_1 = lock.c NOLOCK_OBJS_1 = lock.o TEST_SRCS = test-passwd.c test-uid.c test-xdpms.c test-grab.c \ test-apm.c test-fade.c test-xinerama.c test-vp.c \ test-randr.c xdpyinfo.c test-mlstring.c test-screens.c TEST_EXES = test-passwd test-uid test-xdpms test-grab \ test-apm test-fade test-xinerama test-vp \ test-randr xdpyinfo test-mlstring test-screens MOTIF_LIBS = @MOTIF_LIBS@ @XPM_LIBS@ $(XMU_LIBS) GTK_LIBS = @GTK_LIBS@ $(XMU_LIBS) XML_LIBS = @XML_LIBS@ XDPMS_LIBS = @XDPMS_LIBS@ XINERAMA_LIBS = @XINERAMA_LIBS@ XINPUT_LIBS = @XINPUT_LIBS@ PASSWD_SRCS = @PASSWD_SRCS@ PASSWD_OBJS = @PASSWD_OBJS@ PASSWD_LIBS = @PASSWD_LIBS@ LOCK_SRCS = @LOCK_SRCS@ LOCK_OBJS = @LOCK_OBJS@ XMU_SRCS = @XMU_SRCS@ XMU_OBJS = @XMU_OBJS@ GL_SRCS = @SAVER_GL_SRCS@ GL_OBJS = @SAVER_GL_OBJS@ GL_LIBS = @SAVER_GL_LIBS@ ICON_SRC = $(UTILS_SRC)/images LOGO = $(ICON_SRC)/logo-50.xpm GTK_ICONS = $(ICON_SRC)/screensaver-*.png DEMO_UTIL_SRCS = $(UTILS_SRC)/resources.c $(UTILS_SRC)/usleep.c \ $(UTILS_SRC)/visual.c $(XMU_SRCS) DEMO_UTIL_OBJS = $(UTILS_BIN)/resources.o $(UTILS_BIN)/usleep.o \ $(UTILS_BIN)/visual.o $(XMU_OBJS) SAVER_UTIL_SRCS = $(UTILS_SRC)/fade.c $(UTILS_SRC)/overlay.c \ $(UTILS_SRC)/logo.c $(UTILS_SRC)/yarandom.c \ $(UTILS_SRC)/minixpm.c \ $(DEMO_UTIL_SRCS) SAVER_UTIL_OBJS = $(UTILS_BIN)/fade.o $(UTILS_BIN)/overlay.o \ $(UTILS_BIN)/logo.o $(UTILS_BIN)/yarandom.o \ $(UTILS_BIN)/minixpm.o \ $(DEMO_UTIL_OBJS) GETIMG_SRCS_1 = xscreensaver-getimage.c GETIMG_OBJS_1 = xscreensaver-getimage.o GETIMG_SRCS = $(GETIMG_SRCS_1) \ $(UTILS_BIN)/colorbars.o $(UTILS_BIN)/resources.o \ $(UTILS_BIN)/yarandom.o $(UTILS_BIN)/visual.o \ $(UTILS_BIN)/usleep.o $(UTILS_BIN)/hsv.o \ $(UTILS_BIN)/colors.o $(UTILS_BIN)/grabscreen.o \ $(UTILS_BIN)/logo.o $(UTILS_BIN)/minixpm.o prefs.o \ $(XMU_SRCS) GETIMG_OBJS = $(GETIMG_OBJS_1) \ $(UTILS_BIN)/colorbars.o $(UTILS_BIN)/resources.o \ $(UTILS_BIN)/yarandom.o $(UTILS_BIN)/visual.o \ $(UTILS_BIN)/usleep.o $(UTILS_BIN)/hsv.o \ $(UTILS_BIN)/colors.o $(UTILS_BIN)/grabscreen.o \ $(UTILS_BIN)/logo.o $(UTILS_BIN)/minixpm.o prefs.o \ $(XMU_OBJS) SAVER_SRCS_1 = xscreensaver.c windows.c screens.c timers.c subprocs.c \ exec.c xset.c splash.c setuid.c stderr.c mlstring.c SAVER_OBJS_1 = xscreensaver.o windows.o screens.o timers.o subprocs.o \ exec.o xset.o splash.o setuid.o stderr.o mlstring.o SAVER_SRCS = $(SAVER_SRCS_1) prefs.c dpms.c $(LOCK_SRCS) \ $(SAVER_UTIL_SRCS) $(GL_SRCS) SAVER_OBJS = $(SAVER_OBJS_1) prefs.o dpms.o $(LOCK_OBJS) \ $(SAVER_UTIL_OBJS) $(GL_OBJS) CMD_SRCS = remote.c xscreensaver-command.c CMD_OBJS = remote.o xscreensaver-command.o DEMO_SRCS_1 = prefs.c dpms.c DEMO_OBJS_1 = prefs.o dpms.o DEMO_SRCS = $(DEMO_SRCS_1) remote.c exec.c $(DEMO_UTIL_SRCS) DEMO_OBJS = $(DEMO_OBJS_1) remote.o exec.o $(DEMO_UTIL_OBJS) PDF2JPEG_SRCS = pdf2jpeg.m PDF2JPEG_OBJS = pdf2jpeg.o PDF2JPEG_LIBS = -framework Cocoa SAVER_LIBS = $(LIBS) $(X_LIBS) $(XMU_LIBS) @SAVER_LIBS@ \ $(XDPMS_LIBS) $(XINERAMA_LIBS) $(GL_LIBS) $(X_PRE_LIBS) \ -lXt -lX11 -lXext $(X_EXTRA_LIBS) \ $(PASSWD_LIBS) CMD_LIBS = $(LIBS) $(X_LIBS) \ $(X_PRE_LIBS) -lX11 -lXext $(X_EXTRA_LIBS) GETIMG_LIBS = $(LIBS) $(X_LIBS) $(XPM_LIBS) $(JPEG_LIBS) \ $(X_PRE_LIBS) -lXt -lX11 $(XMU_LIBS) -lXext $(X_EXTRA_LIBS) EXES = xscreensaver xscreensaver-command xscreensaver-demo \ xscreensaver-getimage @EXES_OSX@ EXES2 = @ALL_DEMO_PROGRAMS@ EXES_OSX = pdf2jpeg SCRIPTS_1 = xscreensaver-getimage-file xscreensaver-getimage-video \ xscreensaver-text SCRIPTS_OSX = xscreensaver-getimage-desktop SCRIPTS = $(SCRIPTS_1) @SCRIPTS_OSX@ HDRS = XScreenSaver_ad.h XScreenSaver_Xm_ad.h \ xscreensaver.h prefs.h remote.h exec.h \ demo-Gtk-conf.h auth.h mlstring.h types.h MEN_1 = xscreensaver.man xscreensaver-demo.man \ xscreensaver-command.man \ xscreensaver-text.man \ xscreensaver-getimage.man \ xscreensaver-getimage-file.man \ xscreensaver-getimage-video.man MEN_OSX = xscreensaver-getimage-desktop.man pdf2jpeg.man MEN = $(MEN_1) @MEN_OSX@ EXTRAS = README Makefile.in \ XScreenSaver.ad.in XScreenSaver-Xm.ad xscreensaver.pam.in \ xscreensaver-demo.glade2.in xscreensaver-demo.glade2p \ screensaver-properties.desktop.in \ .gdbinit VMSFILES = compile_axp.com compile_decc.com link_axp.com link_decc.com \ vms-getpwnam.c vms-pwd.h vms-hpwd.c vms-validate.c \ vms_axp.opt vms_axp_12.opt vms_decc.opt vms_decc_12.opt TARFILES = $(EXTRAS) $(VMSFILES) $(SAVER_SRCS_1) \ $(MOTIF_SRCS) $(GTK_SRCS) $(PWENT_SRCS) $(PWHELPER_SRCS) \ $(KERBEROS_SRCS) $(PAM_SRCS) $(LOCK_SRCS_1) $(DEMO_SRCS_1) \ $(CMD_SRCS) $(GETIMG_SRCS_1) $(PDF2JPEG_SRCS) $(HDRS) \ $(SCRIPTS_1) $(SCRIPTS_OSX) $(MEN_1) $(MEN_OSX) \ $(TEST_SRCS) default: $(EXES) all: $(EXES) $(EXES2) tests: $(TEST_EXES) install: install-program install-ad install-scripts \ install-gnome install-man install-xml install-pam uninstall: uninstall-program uninstall-ad \ uninstall-gnome uninstall-man uninstall-xml install-strip: $(MAKE) INSTALL_PROGRAM='$(INSTALL_PROGRAM) -s' \ install install-program: $(EXES) @if [ ! -d $(install_prefix)$(bindir) ]; then \ $(INSTALL_DIRS) $(install_prefix)$(bindir) ; \ fi @inst="$(INSTALL_PROGRAM)" ; \ if [ @NEED_SETUID@ = yes ]; then \ me=`PATH="$$PATH:/usr/ucb" whoami` ; \ if [ "$$me" = root ]; then \ inst="$(INSTALL_SETUID)" ; \ else \ e=echo ; \ $$e "" ;\ $$e " ####################################################################";\ $$e " Warning: xscreensaver has been compiled with support for shadow" ;\ $$e " passwords. If your system actually uses shadow passwords," ;\ $$e " then xscreensaver must be installed as a setuid root" ;\ $$e " program in order for locking to work. To do this, you" ;\ $$e " must run 'make install' as 'root', not as '$$me'." ;\ $$e "" ;\ $$e " For now, xscreensaver will be installed non-setuid, which" ;\ $$e " means that locking might not work. (Try it and see.)" ;\ $$e " ####################################################################";\ $$e "" ;\ fi ; \ fi ; \ echo $$inst xscreensaver $(install_prefix)$(bindir)/xscreensaver ; \ $$inst xscreensaver $(install_prefix)$(bindir)/xscreensaver @for exe in xscreensaver-command xscreensaver-demo \ xscreensaver-getimage @EXES_OSX@ ; do \ echo $(INSTALL_PROGRAM) $$exe $(install_prefix)$(bindir)/$$exe ; \ $(INSTALL_PROGRAM) $$exe $(install_prefix)$(bindir)/$$exe ; \ done install-ad: XScreenSaver.ad @if [ ! -d $(install_prefix)$(AD_DIR) ]; then \ $(INSTALL_DIRS) $(install_prefix)$(AD_DIR) ; \ fi @-echo $(INSTALL_DATA) XScreenSaver.ad \ $(install_prefix)$(AD_DIR)/XScreenSaver ; \ if $(INSTALL_DATA) XScreenSaver.ad \ $(install_prefix)$(AD_DIR)/XScreenSaver ; then \ true ; \ else \ e=echo ; \ if [ -f $(install_prefix)$(AD_DIR)/XScreenSaver ]; then \ $$e "" ;\ $$e " ####################################################################";\ $$e " Warning: unable to install $(install_prefix)$(AD_DIR)/XScreenSaver" ;\ $$e " That file exists, and is unwritable. It is probably from" ;\ $$e " an older version of xscreensaver, and could cause things" ;\ $$e " to malfunction. Please delete it!" ;\ $$e " ####################################################################";\ $$e "" ;\ exit 1 ; \ else \ $$e "" ;\ $$e " ####################################################################";\ $$e " Warning: unable to install $(install_prefix)$(AD_DIR)/XScreenSaver" ;\ $$e " The directory is unwritable. This is probably ok;" ;\ $$e " xscreensaver should work without that file." ;\ $$e " ####################################################################";\ $$e "" ;\ exit 0 ; \ fi \ fi install-scripts: $(SCRIPTS) munge-scripts @for program in $(SCRIPTS); do \ if [ -r $$program ] ; then \ p=$$program ; \ else \ p=$(srcdir)/$$program ; \ fi ; \ echo $(INSTALL_SCRIPT) $$p \ $(install_prefix)$(bindir)/$$program ; \ $(INSTALL_SCRIPT) $$p \ $(install_prefix)$(bindir)/$$program ; \ done munge-scripts: $(SCRIPTS) @tmp=/tmp/mf.$$$$ ; \ perl="${PERL}" ; \ rm -f $$tmp ; \ for program in $(SCRIPTS); do \ sed "s@^\(#!\)\(/[^ ]*/perl[^ ]*\)\(.*\)\$$@\1$$perl\3@" \ < $(srcdir)/$$program > $$tmp ; \ if cmp -s $(srcdir)/$$program $$tmp ; then \ true ; \ else \ echo "$$program: setting interpreter to $$perl" >&2 ; \ cat $$tmp > ./$$program ; \ fi ; \ done ; \ rm -f $$tmp # When installing man pages, we install "foo.man" as "foo.N" and update # the .TH line in the installed file with one like # # .TH XScreenSaver N "V.VV (DD-MMM-YYYY)" "X Version 11" # # where N is the manual section suffix. # install-man: $(MEN) @men="$(MEN)" ; \ U=$(UTILS_SRC)/version.h ; \ V=`sed -n 's/.*xscreensaver \([0-9]\.[^)]*)\).*/\1/p' < $$U` ; \ T=/tmp/xs$$$$.$(mansuffix) ; \ TH=".TH XScreenSaver $(mansuffix) \"$$V\" \"X Version 11\"" ; \ echo "installing man pages: $$TH" ; \ \ if [ ! -d $(install_prefix)$(manNdir) ]; then \ $(INSTALL_DIRS) $(install_prefix)$(manNdir) ; \ fi ; \ \ for man in $$men; do \ instname=`echo $$man | sed 's/\.man$$/\.$(mansuffix)/'` ; \ manbase=`echo $$man | sed 's/\.man$$//'` ; \ TH=".TH $$manbase $(mansuffix) \"$$V\" \"X Version 11\" \"XScreenSaver manual\"" ; \ sed -e "s/^\.TH.*/$$TH/" \ -e 's/^\(\.BR xscr.*(\)[^()]\(.*\)/\1$(mansuffix)\2/' \ -e 's@(MANSUFFIX)@($(mansuffix))@g' \ < $(srcdir)/$$man > $$T ; \ echo $(INSTALL_DATA) $(srcdir)/$$man \ $(install_prefix)$(manNdir)/$$instname ; \ $(INSTALL_DATA) $$T \ $(install_prefix)$(manNdir)/$$instname ; \ done ; \ rm -f $$T uninstall-program: @for program in $(EXES) $(SCRIPTS); do \ echo rm -f $(install_prefix)$(bindir)/$$program ; \ rm -f $(install_prefix)$(bindir)/$$program ; \ done uninstall-ad: rm -f $(install_prefix)$(AD_DIR)/XScreenSaver uninstall-man: @men="$(MEN)" ; \ for man in $$men; do \ instname=`echo $$man | sed 's/\.man$$/\.$(mansuffix)/'` ; \ echo rm -f $(install_prefix)$(manNdir)/$$instname* ; \ rm -f $(install_prefix)$(manNdir)/$$instname* ; \ done install-pam: xscreensaver.pam @src="xscreensaver.pam" ; \ dest=`sed -n 's/.*PAM_SERVICE_NAME[ ]*"\([^"]*\)".*$$/\1/p' \ < ../config.h` ; \ dir="$(install_prefix)$(PAM_DIR)" ; \ conf="$(PAM_CONF)" ; \ \ if [ -d $$dir ] ; then \ \ if [ -f $$dir/xdm ]; then \ src2=$$dir/xdm ; \ elif [ -f $$dir/login ]; then \ src2=$$dir/login ; \ fi ; \ \ if [ -z "$$src2" ]; then \ echo $(INSTALL_DATA) $$src $$dir/$$dest ; \ $(INSTALL_DATA) $$src $$dir/$$dest ; \ else \ src="xscreensaver.pam.$$$$" ; \ echo "grep '^#%\|^auth\|^@include' $$src2 > $$src" ; \ grep '^#%\|^auth\|^@include' $$src2 > $$src ; \ echo $(INSTALL_DATA) $$src $$dir/$$dest ; \ $(INSTALL_DATA) $$src $$dir/$$dest ; \ echo rm -f $$src ; \ rm -f $$src ; \ fi ; \ \ if [ ! -f $$dir/$$dest ]; then \ e=echo ; \ $$e "" ;\ $$e " ####################################################################";\ $$e " Warning: xscreensaver has been compiled with support for Pluggable" ;\ $$e " Authentication Modules (PAM). However, we were unable to" ;\ $$e " install the file $$dir/$$dest. PAM is unlikely" ;\ $$e " to work without this file (and old-style password" ;\ $$e " authentication will be used instead, which may or may not" ;\ $$e " work.)" ;\ $$e " ####################################################################";\ $$e "" ;\ fi ; \ elif [ -f $$conf -a "x$$dest" != "x" ]; then \ if ( grep $$dest $$conf >/dev/null ); then \ echo "$$conf unchanged: already has an entry for $$dest" ; \ else \ src="pam.conf.$$$$" ; \ echo "grep -v $$dest $$conf > $$src" ; \ grep -v $$dest $$conf > $$src ; \ extras=`sed -n "s/^login\(.*auth.*\)$$/$$dest\1/p" $$conf`; \ echo "$$extras" >> $$src ; \ if [ "x$$extras" = "x" ]; then \ echo "Error: no login rules in $$conf?" >&2 ; \ else \ echo "adding $$dest rules to $$src:" ; \ echo "$$extras" | sed 's/^/ /' ; \ fi ; \ echo $(INSTALL_DATA) $$src $$conf ; \ $(INSTALL_DATA) $$src $$conf ; \ echo rm -f $$src ; \ rm -f $$src ; \ fi ; \ if ( grep $$dest $$conf >/dev/null ); then \ echo ; \ else \ e=echo ; \ $$e "" ;\ $$e " ####################################################################";\ $$e " Warning: xscreensaver has been compiled with support for Pluggable" ;\ $$e " Authentication Modules (PAM). However, we were unable to" ;\ $$e " install xscreensaver rules in the file $$conf." ;\ $$e " PAM is unlikely to work without this (and old-style" ;\ $$e " password authentication will be used instead, which may" ;\ $$e " or may not work.)" ;\ $$e " ####################################################################";\ $$e "" ;\ fi ; \ fi # screensaver-properties.desktop # into /usr/share/applications/ install-gnome:: screensaver-properties.desktop @if [ "$(GTK_DATADIR)" != "" ]; then \ if [ ! -d "$(install_prefix)$(GTK_APPDIR)" ]; then \ echo $(INSTALL_DIRS) "$(install_prefix)$(GTK_APPDIR)" ;\ $(INSTALL_DIRS) "$(install_prefix)$(GTK_APPDIR)" ;\ fi ;\ name2=xscreensaver-properties.desktop ;\ echo $(INSTALL_DATA) screensaver-properties.desktop \ $(install_prefix)$(GTK_APPDIR)/$$name2 ;\ $(INSTALL_DATA) screensaver-properties.desktop \ $(install_prefix)$(GTK_APPDIR)/$$name2 ;\ fi # xscreensaver.xpm # into /usr/share/pixmaps/ install-gnome:: $(LOGO) @if [ "$(GTK_DATADIR)" != "" ]; then \ if [ ! -d "$(install_prefix)$(GTK_ICONDIR)" ]; then \ echo $(INSTALL_DIRS) "$(install_prefix)$(GTK_ICONDIR)" ;\ $(INSTALL_DIRS) "$(install_prefix)$(GTK_ICONDIR)" ;\ fi ;\ target=xscreensaver.xpm ;\ echo $(INSTALL_DATA) $(LOGO) \ $(install_prefix)$(GTK_ICONDIR)/$$target ;\ $(INSTALL_DATA) $(LOGO) \ $(install_prefix)$(GTK_ICONDIR)/$$target ;\ fi # ../utils/images/screensaver-*.png # into /usr/share/xscreensaver/glade/ install-gnome:: @if [ "$(GTK_DATADIR)" != "" ]; then \ if [ ! -d "$(install_prefix)$(GTK_GLADEDIR)" ]; then \ echo $(INSTALL_DIRS) "$(install_prefix)$(GTK_GLADEDIR)" ;\ $(INSTALL_DIRS) "$(install_prefix)$(GTK_GLADEDIR)" ;\ fi ;\ for target in $(GTK_ICONS) ; do \ dest=`echo $$target | sed 's@^.*/@@'` ;\ echo $(INSTALL_DATA) $$target \ $(install_prefix)$(GTK_GLADEDIR)/$$dest ;\ $(INSTALL_DATA) $$target \ $(install_prefix)$(GTK_GLADEDIR)/$$dest ;\ done ;\ fi # xscreensaver-demo.glade2 # into /usr/share/xscreensaver/glade/ install-gnome:: xscreensaver-demo.glade2 @if [ "$(GTK_DATADIR)" != "" ]; then \ if [ ! -d "$(install_prefix)$(GTK_GLADEDIR)" ]; then \ echo $(INSTALL_DIRS) "$(install_prefix)$(GTK_GLADEDIR)" ;\ $(INSTALL_DIRS) "$(install_prefix)$(GTK_GLADEDIR)" ;\ fi ;\ target=xscreensaver-demo.glade2 ;\ echo $(INSTALL_DATA) $$target \ $(install_prefix)$(GTK_GLADEDIR)/$$target ;\ if $(INSTALL_DATA) $$target \ $(install_prefix)$(GTK_GLADEDIR)/$$target ;\ then true ;\ else \ e=echo ; \ $$e "" ;\ $$e " ####################################################################";\ $$e " Warning: unable to install $$target into" ;\ $$e " $(install_prefix)$(GTK_GLADEDIR)/." ;\ $$e " Without this file, xscreensaver-demo will not" ;\ $$e " be able to run properly." ;\ $$e " ####################################################################";\ $$e "" ;\ exit 1 ; \ fi ; \ fi # screensaver-properties.desktop # into /usr/share/applications/ uninstall-gnome:: @if [ "$(GTK_DATADIR)" != "" ]; then \ f=xscreensaver-properties.desktop ;\ echo rm -f $(install_prefix)$(GTK_APPDIR)/$$f ;\ rm -f $(install_prefix)$(GTK_APPDIR)/$$f ;\ fi # xscreensaver.xpm # into /usr/share/pixmaps/ uninstall-gnome:: @if [ "$(GTK_ICONDIR)" != "" ]; then \ target=xscreensaver.xpm ;\ echo rm -f $(install_prefix)$(GTK_ICONDIR)/$$target ;\ rm -f $(install_prefix)$(GTK_ICONDIR)/$$target ;\ fi # ../utils/images/screensaver-*.png # into /usr/share/xscreensaver/glade/ uninstall-gnome:: @if [ "$(GTK_DATADIR)" != "" ]; then \ for target in $(GTK_ICONS) ; do \ dest=`echo $$target | sed 's@^.*/@@'` ;\ echo rm -f $(install_prefix)$(GTK_GLADEDIR)/$$dest ;\ rm -f $(install_prefix)$(GTK_GLADEDIR)/$$dest ;\ done ;\ fi # xscreensaver-demo.glade2 # into /usr/share/xscreensaver/glade/ uninstall-gnome:: xscreensaver-demo.glade2 @if [ "$(GTK_DATADIR)" != "" ]; then \ target=xscreensaver-demo.glade2 ;\ echo rm -f $(install_prefix)$(GTK_GLADEDIR)/$$target ;\ rm -f $(install_prefix)$(GTK_GLADEDIR)/$$target ;\ fi # /usr/share/xscreensaver/config/README install-xml: @dest=$(install_prefix)$(HACK_CONF_DIR) ; \ if [ ! -d $$dest ]; then \ $(INSTALL_DIRS) $$dest ; \ fi ; \ src=$(srcdir)/../hacks/config ; \ echo $(INSTALL_DATA) $$src/README $$dest/README ; \ $(INSTALL_DATA) $$src/README $$dest/README # /usr/share/xscreensaver/config/README uninstall-xml: rm -f $(install_prefix)$(HACK_CONF_DIR)/README clean: -rm -f *.o a.out core $(EXES) $(EXES2) $(TEST_EXES) \ XScreenSaver_ad.h XScreenSaver_Xm_ad.h distclean: clean -rm -f Makefile XScreenSaver.ad \ TAGS *~ "#"* screensaver-properties.desktop # Adds all current dependencies to Makefile depend: XScreenSaver_ad.h XScreenSaver_Xm_ad.h $(DEPEND) -s '# DO NOT DELETE: updated by make depend' \ $(DEPEND_FLAGS) -- \ $(INCLUDES_1) $(DEFS) $(DEPEND_DEFINES) $(CFLAGS) $(X_CFLAGS) -- \ $(SAVER_SRCS) $(CMD_SRCS) $(GETIMG_SRCS_1) # Adds some dependencies to Makefile.in -- not totally accurate, but pretty # close. This excludes dependencies on files in /usr/include, etc. It tries # to include only dependencies on files which are themselves a part of this # package. distdepend: check_men update_ad_version XScreenSaver_ad.h XScreenSaver_Xm_ad.h @echo updating dependencies in `pwd`/Makefile.in... ; \ $(DEPEND) -w 0 -f - \ -s '# DO NOT DELETE: updated by make distdepend' $(DEPEND_FLAGS) -- \ $(INCLUDES_1) $(DEFS) $(DEPEND_DEFINES) $(CFLAGS) $(X_CFLAGS) -- \ $(SAVER_SRCS_1) $(MOTIF_SRCS) $(GTK_SRCS) $(GETIMG_SRCS_1) \ $(PWENT_SRCS) $(LOCK_SRCS_1) $(DEMO_SRCS_1) $(CMD_SRCS) \ $(TEST_SRCS) 2>/dev/null | \ sort -d | \ ( \ awk '/^# .*Makefile.in ---/,/^# DO .*distdepend/' < Makefile.in ; \ sed -e '/^#.*/d' \ -e 's@ \./@ @g;s@ /[^ ]*@@g;/^.*:$$/d' \ -e 's@\.\./utils@$$(UTILS_SRC)@g' \ -e 's@ \([^$$]\)@ $$(srcdir)/\1@g' \ -e 's@$$.*\(XScreenSaver_ad\)@\1@g' \ -e 's@$$.*\(XScreenSaver_Xm_ad\)@\1@g' \ -e 's@ $$(srcdir)/\(.*config\.h\)@ \1@g' ; \ echo '' \ ) > /tmp/distdepend.$$$$ && \ mv /tmp/distdepend.$$$$ Makefile.in # Updates the version number in the app-defaults file to be in sync with # the version number in version.h. This is so people can tell when they # have a version skew between the app-defaults file and the executable. # Also update hacks/config/README in the same way. 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 ; \ else \ cat $$T > $$S ; \ echo "updated $$S to $$V $$D" ; \ fi ; \ done ; \ rm $$T TAGS: tags tags: find $(srcdir) -name '*.[chly]' -print | xargs etags -a echo_tarfiles: @$(MAKE) XScreenSaver_ad.h XScreenSaver_Xm_ad.h 2>&1 >/dev/null @echo $(TARFILES) check_men: @badmen="" ; \ for exe in $(EXES); do \ if ! [ -f $(srcdir)/$$exe.man ]; then \ badmen="$$badmen $$exe" ; \ fi ; \ done ; \ if [ -n "$$badmen" ]; then \ echo "" ; \ echo "Warning: The following programs have no manuals:" ; \ echo "" ; \ for m in $$badmen ; do \ echo " $$m" ; \ done ; \ echo "" ; \ fi # Rules for noticing when the objects from the utils directory are out of # date with respect to their sources, and going and building them according # to the rules in their own Makefile... # $(UTILS_BIN)/fade.o: $(UTILS_SRC)/fade.c $(UTILS_BIN)/overlay.o: $(UTILS_SRC)/overlay.c $(UTILS_BIN)/resources.o: $(UTILS_SRC)/resources.c $(UTILS_BIN)/usleep.o: $(UTILS_SRC)/usleep.c $(UTILS_BIN)/visual.o: $(UTILS_SRC)/visual.c $(UTILS_BIN)/xmu.o: $(UTILS_SRC)/xmu.c $(UTILS_BIN)/logo.o: $(UTILS_SRC)/logo.c $(UTILS_BIN)/minixpm.o: $(UTILS_SRC)/minixpm.c $(UTILS_BIN)/yarandom.o: $(UTILS_SRC)/yarandom.c $(UTILS_BIN)/colorbars.o: $(UTILS_SRC)/colorbars.c $(SAVER_UTIL_OBJS): $(MAKE) -C $(UTILS_BIN) $(@F) CC="$(CC)" CFLAGS="$(CFLAGS)" LDFLAGS="$(LDFLAGS)" # How we build object files in this directory. .c.o: $(CC) -c $(INCLUDES) $(DEFS) $(CPPFLAGS) $(CFLAGS) $(X_CFLAGS) $< .m.o: $(OBJCC) -c $(INCLUDES) $(DEFS) $(CPPFLAGS) $(CFLAGS) $(X_CFLAGS) $< # subprocs takes an extra -D option. subprocs.o: subprocs.c $(CC) -c $(INCLUDES) $(SUBP_DEFS) $(CPPFLAGS) $(CFLAGS) $(X_CFLAGS) \ $(srcdir)/subprocs.c # xscreensaver takes an extra -D option. xscreensaver.o: xscreensaver.c $(CC) -c $(INCLUDES) $(DEFS) $(INTL_DEFS) $(CPPFLAGS) $(CFLAGS) $(X_CFLAGS) \ $(srcdir)/xscreensaver.c # demo-Gtk takes extra -D options, and an extra -I option. demo-Gtk.o: demo-Gtk.c $(CC) -c $(INCLUDES) $(SUBP_DEFS) -I$(ICON_SRC) \ $(GTK_DEFS) $(INTL_DEFS) $(CPPFLAGS) $(CFLAGS) $(X_CFLAGS) \ $(srcdir)/demo-Gtk.c # demo-Gtk-conf takes an extra -D option. demo-Gtk-conf.o: demo-Gtk-conf.c $(CC) -c $(INCLUDES) $(CONF_DEFS) $(GTK_DEFS) $(CPPFLAGS) $(CFLAGS) $(X_CFLAGS) \ $(srcdir)/demo-Gtk-conf.c # How we build the default app-defaults file into the program. # XScreenSaver_ad.h: XScreenSaver.ad $(SHELL) $(UTILS_SRC)/ad2c XScreenSaver.ad > XScreenSaver_ad.h XScreenSaver_Xm_ad.h: XScreenSaver-Xm.ad $(SHELL) $(UTILS_SRC)/ad2c XScreenSaver-Xm.ad > XScreenSaver_Xm_ad.h @INTLTOOL_DESKTOP_RULE@ # The executables linked in this directory. # xscreensaver: $(SAVER_OBJS) $(CC) $(LDFLAGS) -o $@ $(SAVER_OBJS) $(SAVER_LIBS) $(INTL_LIBS) xscreensaver-command: $(CMD_OBJS) $(CC) $(LDFLAGS) -o $@ $(CMD_OBJS) $(CMD_LIBS) xscreensaver-demo: @PREFERRED_DEMO_PROGRAM@ @if [ "@PREFERRED_DEMO_PROGRAM@" = "" ]; then \ echo "WARNING: neither GTK nor Motif are available," \ "therefore no xscreensaver-demo!" ; \ rm -f $@@EXEEXT@ ; \ else \ echo cp -p @PREFERRED_DEMO_PROGRAM@@EXEEXT@ $@@EXEEXT@ ; \ cp -p @PREFERRED_DEMO_PROGRAM@@EXEEXT@ $@@EXEEXT@ ; \ fi xscreensaver-demo-Xm: $(DEMO_OBJS) $(MOTIF_OBJS) $(CC) $(LDFLAGS) -o $@ $(DEMO_OBJS) $(MOTIF_OBJS) $(LIBS) $(X_LIBS) \ $(MOTIF_LIBS) $(INTL_LIBS) $(X_PRE_LIBS) -lXt -lX11 \ $(XDPMS_LIBS) $(XINERAMA_LIBS) -lXext $(X_EXTRA_LIBS) xscreensaver-demo-Gtk: $(DEMO_OBJS) $(GTK_OBJS) $(CC) $(LDFLAGS) -o $@ $(DEMO_OBJS) $(GTK_OBJS) $(LIBS) $(X_LIBS) \ $(GTK_LIBS) $(XPM_LIBS) $(XML_LIBS) $(INTL_LIBS) $(X_PRE_LIBS) \ -lXt -lX11 $(XDPMS_LIBS) $(XINERAMA_LIBS) -lXext $(X_EXTRA_LIBS) demo-Gtk.o: XScreenSaver_ad.h demo-Xm.o: XScreenSaver_Xm_ad.h xscreensaver.o: XScreenSaver_ad.h xscreensaver-getimage.o: XScreenSaver_ad.h xscreensaver-getimage: $(GETIMG_OBJS) $(CC) $(LDFLAGS) -o $@ $(GETIMG_OBJS) $(GETIMG_LIBS) -lm pdf2jpeg: $(PDF2JPEG_OBJS) $(OBJCC) $(LDFLAGS) -o $@ $(PDF2JPEG_OBJS) $(PDF2JPEG_LIBS) -lm TEST_PASSWD_OBJS = test-passwd.o $(LOCK_OBJS_1) $(PASSWD_OBJS) \ subprocs.o setuid.o splash.o prefs.o mlstring.o exec.o \ $(SAVER_UTIL_OBJS) test-passwd.o: XScreenSaver_ad.h test-passwd: $(TEST_PASSWD_OBJS) XScreenSaver_ad.h $(CC) $(LDFLAGS) -o $@ $(TEST_PASSWD_OBJS) $(SAVER_LIBS) test-uid: test-uid.o $(CC) $(LDFLAGS) -o $@ test-uid.o test-xdpms: test-xdpms.o $(CC) $(LDFLAGS) -o $@ test-xdpms.o $(LIBS) $(X_LIBS) $(XDPMS_LIBS) \ $(X_PRE_LIBS) -lXt -lX11 -lXext $(X_EXTRA_LIBS) test-xinerama: test-xinerama.o $(CC) $(LDFLAGS) -o $@ test-xinerama.o $(LIBS) $(X_LIBS) $(SAVER_LIBS) \ $(X_PRE_LIBS) $(XINERAMA_LIBS) -lXt -lX11 -lXext $(X_EXTRA_LIBS) test-vp: test-vp.o $(CC) $(LDFLAGS) -o $@ test-vp.o $(LIBS) $(X_LIBS) $(SAVER_LIBS) \ $(X_PRE_LIBS) -lXt -lX11 -lXext $(X_EXTRA_LIBS) test-randr: test-randr.o $(CC) $(LDFLAGS) -o $@ test-randr.o $(LIBS) $(X_LIBS) $(SAVER_LIBS) \ $(X_PRE_LIBS) -lXt -lX11 -lXext $(X_EXTRA_LIBS) test-grab: test-grab.o $(CC) $(LDFLAGS) -o $@ test-grab.o $(SAVER_LIBS) test-apm: test-apm.o $(CC) $(LDFLAGS) -o $@ test-apm.o $(SAVER_LIBS) -lapm test-mlstring.o: mlstring.c test-mlstring: test-mlstring.o $(CC) -DTEST $(LDFLAGS) -o $@ test-mlstring.o $(SAVER_LIBS) TEST_FADE_OBJS = test-fade.o $(UTILS_SRC)/fade.o $(DEMO_UTIL_OBJS) test-fade: test-fade.o $(UTILS_BIN)/fade.o $(CC) $(LDFLAGS) -o $@ $(TEST_FADE_OBJS) $(SAVER_LIBS) TEST_SCREENS_OBJS = test-screens.o $(DEMO_UTIL_OBJS) test-screens.o: screens.c test-screens: test-screens.o $(CC) $(LDFLAGS) -o $@ $(TEST_SCREENS_OBJS) $(SAVER_LIBS) xdpyinfo.o: xdpyinfo.c $(CC) -c $(INCLUDES) -DHAVE_GLX $(CPPFLAGS) $(CFLAGS) $(X_CFLAGS) \ $(srcdir)/xdpyinfo.c xdpyinfo: xdpyinfo.o $(CC) $(LDFLAGS) -o $@ xdpyinfo.o \ $(LIBS) $(X_LIBS) @GL_LIBS@ \ $(X_PRE_LIBS) -lX11 -lXext $(X_EXTRA_LIBS) -lm ############################################################################## # # DO NOT DELETE: updated by make distdepend demo-Gtk-conf.o: ../config.h demo-Gtk-conf.o: $(srcdir)/demo-Gtk-conf.h demo-Gtk-conf.o: $(UTILS_SRC)/xscreensaver-intl.h demo-Gtk.o: XScreenSaver_ad.h demo-Gtk.o: ../config.h demo-Gtk.o: $(srcdir)/demo-Gtk-conf.h demo-Gtk.o: $(srcdir)/prefs.h demo-Gtk.o: $(srcdir)/remote.h demo-Gtk.o: $(srcdir)/types.h demo-Gtk.o: $(UTILS_SRC)/resources.h demo-Gtk.o: $(UTILS_SRC)/usleep.h demo-Gtk.o: $(UTILS_SRC)/version.h demo-Gtk.o: $(UTILS_SRC)/visual.h demo-Gtk.o: $(UTILS_SRC)/xscreensaver-intl.h demo-Xm.o: ../config.h demo-Xm-widgets.o: ../config.h dpms.o: ../config.h dpms.o: $(srcdir)/prefs.h dpms.o: $(srcdir)/types.h dpms.o: $(srcdir)/xscreensaver.h exec.o: ../config.h exec.o: $(srcdir)/exec.h lock.o: $(srcdir)/auth.h lock.o: ../config.h lock.o: $(srcdir)/mlstring.h lock.o: $(srcdir)/prefs.h lock.o: $(srcdir)/types.h lock.o: $(UTILS_SRC)/resources.h lock.o: $(srcdir)/xscreensaver.h mlstring.o: $(srcdir)/mlstring.h passwd.o: $(srcdir)/auth.h passwd.o: ../config.h passwd.o: $(srcdir)/prefs.h passwd.o: $(srcdir)/types.h passwd.o: $(srcdir)/xscreensaver.h passwd-pwent.o: ../config.h prefs.o: ../config.h prefs.o: $(srcdir)/prefs.h prefs.o: $(srcdir)/types.h prefs.o: $(UTILS_SRC)/resources.h prefs.o: $(UTILS_SRC)/version.h remote.o: ../config.h remote.o: $(srcdir)/remote.h screens.o: ../config.h screens.o: $(srcdir)/prefs.h screens.o: $(srcdir)/types.h screens.o: $(UTILS_SRC)/visual.h screens.o: $(srcdir)/xscreensaver.h setuid.o: ../config.h setuid.o: $(srcdir)/prefs.h setuid.o: $(srcdir)/types.h setuid.o: $(srcdir)/xscreensaver.h splash.o: ../config.h splash.o: $(srcdir)/prefs.h splash.o: $(srcdir)/types.h splash.o: $(UTILS_SRC)/resources.h splash.o: $(srcdir)/xscreensaver.h stderr.o: ../config.h stderr.o: $(srcdir)/prefs.h stderr.o: $(srcdir)/types.h stderr.o: $(UTILS_SRC)/resources.h stderr.o: $(UTILS_SRC)/visual.h stderr.o: $(srcdir)/xscreensaver.h subprocs.o: ../config.h subprocs.o: $(srcdir)/exec.h subprocs.o: $(srcdir)/prefs.h subprocs.o: $(srcdir)/types.h subprocs.o: $(UTILS_SRC)/visual.h subprocs.o: $(UTILS_SRC)/yarandom.h subprocs.o: $(srcdir)/xscreensaver.h test-apm.o: ../config.h test-fade.o: ../config.h test-fade.o: $(srcdir)/prefs.h test-fade.o: $(srcdir)/types.h test-fade.o: $(UTILS_SRC)/fade.h test-fade.o: $(srcdir)/xscreensaver.h test-grab.o: ../config.h test-mlstring.o: $(srcdir)/mlstring.c test-mlstring.o: $(srcdir)/mlstring.h test-passwd.o: XScreenSaver_ad.h test-passwd.o: $(srcdir)/auth.h test-passwd.o: ../config.h test-passwd.o: $(srcdir)/prefs.h test-passwd.o: $(srcdir)/types.h test-passwd.o: $(UTILS_SRC)/resources.h test-passwd.o: $(UTILS_SRC)/version.h test-passwd.o: $(UTILS_SRC)/visual.h test-passwd.o: $(srcdir)/xscreensaver.h test-randr.o: ../config.h test-screens.o: ../config.h test-screens.o: $(srcdir)/prefs.h test-screens.o: $(srcdir)/screens.c test-screens.o: $(srcdir)/types.h test-screens.o: $(UTILS_SRC)/visual.h test-screens.o: $(srcdir)/xscreensaver.h test-uid.o: ../config.h test-vp.o: ../config.h test-xdpms.o: ../config.h test-xinerama.o: ../config.h timers.o: ../config.h timers.o: $(srcdir)/prefs.h timers.o: $(srcdir)/types.h timers.o: $(srcdir)/xscreensaver.h windows.o: ../config.h windows.o: $(srcdir)/prefs.h windows.o: $(srcdir)/types.h windows.o: $(UTILS_SRC)/fade.h windows.o: $(UTILS_SRC)/visual.h windows.o: $(srcdir)/xscreensaver.h xscreensaver-command.o: ../config.h xscreensaver-command.o: $(srcdir)/remote.h xscreensaver-command.o: $(UTILS_SRC)/version.h xscreensaver-getimage.o: ../config.h xscreensaver-getimage.o: XScreenSaver_ad.h xscreensaver-getimage.o: $(srcdir)/prefs.h xscreensaver-getimage.o: $(srcdir)/types.h xscreensaver-getimage.o: $(UTILS_SRC)/colorbars.h xscreensaver-getimage.o: $(UTILS_SRC)/grabscreen.h xscreensaver-getimage.o: $(UTILS_SRC)/resources.h xscreensaver-getimage.o: $(UTILS_SRC)/utils.h xscreensaver-getimage.o: $(UTILS_SRC)/version.h xscreensaver-getimage.o: $(UTILS_SRC)/visual.h xscreensaver-getimage.o: $(UTILS_SRC)/vroot.h xscreensaver-getimage.o: $(UTILS_SRC)/yarandom.h xscreensaver.o: XScreenSaver_ad.h xscreensaver.o: $(srcdir)/auth.h xscreensaver.o: ../config.h xscreensaver.o: $(srcdir)/prefs.h xscreensaver.o: $(srcdir)/types.h xscreensaver.o: $(UTILS_SRC)/resources.h xscreensaver.o: $(UTILS_SRC)/usleep.h xscreensaver.o: $(UTILS_SRC)/version.h xscreensaver.o: $(UTILS_SRC)/visual.h xscreensaver.o: $(UTILS_SRC)/yarandom.h xscreensaver.o: $(srcdir)/xscreensaver.h xset.o: ../config.h xset.o: $(srcdir)/prefs.h xset.o: $(srcdir)/types.h xset.o: $(srcdir)/xscreensaver.h xscreensaver-5.36/driver/XScreenSaver.ad.in000644 000767 000024 00000045335 12777044605 020742 0ustar00jwzstaff000000 000000 ! ! XScreenSaver ! ! a screen saver and locker for the X window system ! by Jamie Zawinski ! ! version 5.36 ! 10-Oct-2016 ! ! See "man xscreensaver" for more info. The latest version is always ! available at https://www.jwz.org/xscreensaver/ ! These resources, when placed in the system-wide app-defaults directory ! (e.g., /usr/lib/X11/app-defaults/XScreenSaver) will provide the default ! settings for new users. However, if you have a ".xscreensaver" file in ! your home directory, the settings in that file take precedence. ! Don't hand this file to "xrdb" -- that isn't how app-defaults files work. ! Though app-defaults files have (mostly) the same syntax as your ~/.Xdefaults ! file, they are used differently, and if you run this file through xrdb, ! you will probably mess things up. #error Do not run app-defaults files through xrdb! #error That does not do what you might expect. #error Put this file in /usr/lib/X11/app-defaults/XScreenSaver instead. ! /* (xrdb prevention kludge: whole file) *mode: random *timeout: 0:10:00 *cycle: 0:10:00 *lockTimeout: 0:00:00 *passwdTimeout: 0:00:30 *dpmsEnabled: False *dpmsQuickoffEnabled: False *dpmsStandby: 2:00:00 *dpmsSuspend: 2:00:00 *dpmsOff: 4:00:00 *grabDesktopImages: True *grabVideoFrames: False *chooseRandomImages: @DEFAULT_IMAGES_P@ ! This can be a local directory name, or the URL of an RSS or Atom feed. *imageDirectory: @DEFAULT_IMAGE_DIRECTORY@ *nice: 10 *memoryLimit: 0 *lock: False *verbose: False *timestamp: True *fade: True *unfade: False *fadeSeconds: 0:00:03 *fadeTicks: 20 *splash: True *splashDuration: 0:00:05 *visualID: default *captureStderr: True *ignoreUninstalledPrograms: False *authWarningSlack: 20 *textMode: file *textLiteral: XScreenSaver *textFile: @DEFAULT_TEXT_FILE@ *textProgram: fortune *textURL: https://en.wikipedia.org/w/index.php?title=Special:NewPages&feed=rss *overlayTextForeground: #FFFF00 *overlayTextBackground: #000000 *overlayStderr: True *font: *-medium-r-*-140-*-m-* ! The default is to use these extensions if available (as noted.) *sgiSaverExtension: True *xidleExtension: True *procInterrupts: True ! Turning this on makes pointerHysteresis not work. *xinputExtensionDev: False ! Set this to True if you are experiencing longstanding XFree86 bug #421 ! (xscreensaver not covering the whole screen) GetViewPortIsFullOfLies: False ! This is what the "Demo" button on the splash screen runs (/bin/sh syntax.) *demoCommand: xscreensaver-demo ! This is what the "Prefs" button on the splash screen runs (/bin/sh syntax.) *prefsCommand: xscreensaver-demo -prefs ! This is the URL loaded by the "Help" button on the splash screen, ! and by the "Documentation" menu item in xscreensaver-demo. *helpURL: https://www.jwz.org/xscreensaver/man.html ! loadURL -- how the "Help" buttons load the helpURL (/bin/sh syntax.) ! manualCommand -- how the "Documentation" buttons display man pages. ! ! And there are so very many options to choose from! ! ! Gnome 2.4, 2.6: (yelp can't display man pages, as of 2.6.3) ! @GNOME24@*loadURL: @WITH_BROWSER@ '%s' @GNOME24@*manualCommand: gnome-terminal --title '%s manual' \ @GNOME24@ --command '/bin/sh -c "man %s; read foo"' ! ! Gnome 2.2: ! @GNOME22@*loadURL: gnome-url-show '%s' @GNOME22@*manualCommand: gnome-terminal --title '%s manual' \ @GNOME22@ --command '/bin/sh -c "man %s; read foo"' ! ! Gnome 1.4: ! ! *loadURL: gnome-moz-remote --newwin '%s' ! *manualCommand: gnome-help-browser 'man:%s' ! ! non-Gnome systems: ! @NOGNOME@*loadURL: firefox '%s' || mozilla '%s' || netscape '%s' @NOGNOME@*manualCommand: xterm -sb -fg black -bg gray75 -T '%s manual' \ @NOGNOME@ -e /bin/sh -c 'man "%s" ; read foo' ! The format used for printing the date and time in the password dialog box ! (see the strftime(3) manual page for details.) *dateFormat: %d-%b-%y (%a); %I:%M %p ! To show the time only: ! *dateFormat: %I:%M %p ! For 24 hour time: ! *dateFormat: %H:%M ! This command is executed by the "New Login" button on the lock dialog. ! (That button does not appear on the dialog if this program does not exist.) ! For Gnome: probably "gdmflexiserver -ls". KDE, probably "kdmctl reserve". ! Or maybe yet another wheel-reinvention, "lxdm -c USER_SWITCH". ! Oh wait, this wheel just keeps getting better: "dm-tool switch-to-greeter". ! @NEW_LOGIN_COMMAND_P@*newLoginCommand: @NEW_LOGIN_COMMAND@ ! Turning on "installColormap" on 8-bit systems interacts erratically with ! certain jurassic window managers. If your screen turns some color other ! than black, the window manager is buggy, and you need to set this resource ! to false. Or switch WMs. Or join the 21st century and get a 24-bit ! graphics card. ! *installColormap: True ! This is the list of installed screen saver modes. See "man xscreensaver" ! for the syntax used here. ! ! If you want to disable a screensaver, DO NOT remove it from this list: ! instead, mark it as inactive by placing a "-" at the beginning of the line. ! ! You can use the `xscreensaver-demo' program to edit the current list of ! screen savers interactively. ! *programs: \ maze -root \n\ @GL_KLUDGE@ GL: superquadrics -root \n\ attraction -root \n\ blitspin -root \n\ greynetic -root \n\ helix -root \n\ hopalong -root \n\ imsmap -root \n\ - noseguy -root \n\ - pyro -root \n\ qix -root \n\ - rocks -root \n\ rorschach -root \n\ decayscreen -root \n\ flame -root \n\ halo -root \n\ slidescreen -root \n\ pedal -root \n\ bouboule -root \n\ - braid -root \n\ coral -root \n\ deco -root \n\ drift -root \n\ - fadeplot -root \n\ galaxy -root \n\ goop -root \n\ grav -root \n\ ifs -root \n\ @GL_KLUDGE@ GL: jigsaw -root \n\ julia -root \n\ - kaleidescope -root \n\ @GL_KLUDGE@ GL: moebius -root \n\ moire -root \n\ @GL_KLUDGE@ GL: morph3d -root \n\ mountain -root \n\ munch -root \n\ penrose -root \n\ @GL_KLUDGE@ GL: pipes -root \n\ rd-bomb -root \n\ @GL_KLUDGE@ GL: rubik -root \n\ - sierpinski -root \n\ slip -root \n\ @GL_KLUDGE@ GL: sproingies -root \n\ starfish -root \n\ strange -root \n\ swirl -root \n\ triangle -root \n\ xjack -root \n\ xlyap -root \n\ @GL_KLUDGE@ GL: atlantis -root \n\ bsod -root \n\ @GL_KLUDGE@ GL: bubble3d -root \n\ @GL_KLUDGE@ GL: cage -root \n\ - crystal -root \n\ cynosure -root \n\ discrete -root \n\ distort -root \n\ epicycle -root \n\ flow -root \n\ @GL_KLUDGE@ GL: glplanet -root \n\ interference -root \n\ kumppa -root \n\ @GL_KLUDGE@ GL: lament -root \n\ moire2 -root \n\ @GL_KLUDGE@ GL: sonar -root \n\ @GL_KLUDGE@ GL: stairs -root \n\ truchet -root \n\ - vidwhacker -root \n\ blaster -root \n\ bumps -root \n\ ccurve -root \n\ compass -root \n\ deluxe -root \n\ - demon -root \n\ @GLE_KLUDGE@ GL: extrusion -root \n\ - loop -root \n\ penetrate -root \n\ petri -root \n\ phosphor -root \n\ @GL_KLUDGE@ GL: pulsar -root \n\ ripples -root \n\ shadebobs -root \n\ @GL_KLUDGE@ GL: sierpinski3d -root \n\ spotlight -root \n\ squiral -root \n\ wander -root \n\ - webcollage -root \n\ xflame -root \n\ xmatrix -root \n\ @GL_KLUDGE@ GL: gflux -root \n\ - nerverot -root \n\ xrayswarm -root \n\ xspirograph -root \n\ @GL_KLUDGE@ GL: circuit -root \n\ @GL_KLUDGE@ GL: dangerball -root \n\ - GL: dnalogo -root \n\ @GL_KLUDGE@ GL: engine -root \n\ @GL_KLUDGE@ GL: flipscreen3d -root \n\ @GL_KLUDGE@ GL: gltext -root \n\ @GL_KLUDGE@ GL: menger -root \n\ @GL_KLUDGE@ GL: molecule -root \n\ rotzoomer -root \n\ speedmine -root \n\ @GL_KLUDGE@ GL: starwars -root \n\ @GL_KLUDGE@ GL: stonerview -root \n\ vermiculate -root \n\ whirlwindwarp -root \n\ zoom -root \n\ anemone -root \n\ apollonian -root \n\ @GL_KLUDGE@ GL: boxed -root \n\ @GL_KLUDGE@ GL: cubenetic -root \n\ @GL_KLUDGE@ GL: endgame -root \n\ euler2d -root \n\ fluidballs -root \n\ @GL_KLUDGE@ GL: flurry -root \n\ - GL: glblur -root \n\ @GL_KLUDGE@ GL: glsnake -root \n\ halftone -root \n\ @GL_KLUDGE@ GL: juggler3d -root \n\ @GL_KLUDGE@ GL: lavalite -root \n\ - polyominoes -root \n\ @GL_KLUDGE@ GL: queens -root \n\ - GL: sballs -root \n\ @GL_KLUDGE@ GL: spheremonics -root \n\ - thornbird -root \n\ twang -root \n\ - GL: antspotlight -root \n\ apple2 -root \n\ @GL_KLUDGE@ GL: atunnel -root \n\ barcode -root \n\ @GL_KLUDGE@ GL: blinkbox -root \n\ @GL_KLUDGE@ GL: blocktube -root \n\ @GL_KLUDGE@ GL: bouncingcow -root \n\ cloudlife -root \n\ @GL_KLUDGE@ GL: cubestorm -root \n\ eruption -root \n\ @GL_KLUDGE@ GL: flipflop -root \n\ @GL_KLUDGE@ GL: flyingtoasters -root \n\ fontglide -root \n\ @GL_KLUDGE@ GL: gleidescope -root \n\ @GL_KLUDGE@ GL: glknots -root \n\ @GL_KLUDGE@ GL: glmatrix -root \n\ - GL: glslideshow -root \n\ @GL_KLUDGE@ GL: hypertorus -root \n\ - GL: jigglypuff -root \n\ metaballs -root \n\ @GL_KLUDGE@ GL: mirrorblob -root \n\ piecewise -root \n\ @GL_KLUDGE@ GL: polytopes -root \n\ pong -root \n\ popsquares -root \n\ @GL_KLUDGE@ GL: surfaces -root \n\ xanalogtv -root \n\ abstractile -root \n\ anemotaxis -root \n\ - GL: antinspect -root \n\ fireworkx -root \n\ fuzzyflakes -root \n\ interaggregate -root \n\ intermomentary -root \n\ memscroller -root \n\ @GL_KLUDGE@ GL: noof -root \n\ pacman -root \n\ @GL_KLUDGE@ GL: pinion -root \n\ @GL_KLUDGE@ GL: polyhedra -root \n\ - GL: providence -root \n\ substrate -root \n\ wormhole -root \n\ - GL: antmaze -root \n\ @GL_KLUDGE@ GL: boing -root \n\ boxfit -root \n\ @GL_KLUDGE@ GL: carousel -root \n\ celtic -root \n\ @GL_KLUDGE@ GL: crackberg -root \n\ @GL_KLUDGE@ GL: cube21 -root \n\ fiberlamp -root \n\ @GL_KLUDGE@ GL: fliptext -root \n\ @GL_KLUDGE@ GL: glhanoi -root \n\ @GL_KLUDGE@ GL: tangram -root \n\ @GL_KLUDGE@ GL: timetunnel -root \n\ @GL_KLUDGE@ GL: glschool -root \n\ @GL_KLUDGE@ GL: topblock -root \n\ @GL_KLUDGE@ GL: cubicgrid -root \n\ cwaves -root \n\ @GL_KLUDGE@ GL: gears -root \n\ @GL_KLUDGE@ GL: glcells -root \n\ @GL_KLUDGE@ GL: lockward -root \n\ m6502 -root \n\ @GL_KLUDGE@ GL: moebiusgears -root \n\ @GL_KLUDGE@ GL: voronoi -root \n\ @GL_KLUDGE@ GL: hypnowheel -root \n\ @GL_KLUDGE@ GL: klein -root \n\ - lcdscrub -root \n\ @GL_KLUDGE@ GL: photopile -root \n\ @GL_KLUDGE@ GL: skytentacles -root \n\ @GL_KLUDGE@ GL: rubikblocks -root \n\ @GL_KLUDGE@ GL: companioncube -root \n\ @GL_KLUDGE@ GL: hilbert -root \n\ @GL_KLUDGE@ GL: tronbit -root \n\ @GL_KLUDGE@ GL: geodesic -root \n\ hexadrop -root \n\ @GL_KLUDGE@ GL: kaleidocycle -root \n\ @GL_KLUDGE@ GL: quasicrystal -root \n\ @GL_KLUDGE@ GL: unknownpleasures -root \n\ binaryring -root \n\ @GL_KLUDGE@ GL: cityflow -root \n\ @GL_KLUDGE@ GL: geodesicgears -root \n\ @GL_KLUDGE@ GL: projectiveplane -root \n\ @GL_KLUDGE@ GL: romanboy -root \n\ tessellimage -root \n\ @GL_KLUDGE@ GL: winduprobot -root \n\ @GL_KLUDGE@ GL: splitflap -root \n\ @GL_KLUDGE@ GL: cubestack -root \n\ @GL_KLUDGE@ GL: cubetwist -root \n\ @GL_KLUDGE@ GL: discoball -root \n\ @GL_KLUDGE@ GL: dymaxionmap -root \n\ @GL_KLUDGE@ GL: energystream -root \n\ @GL_KLUDGE@ GL: hexstrut -root \n\ @GL_KLUDGE@ GL: hydrostat -root \n\ @GL_KLUDGE@ GL: raverhoop -root \n\ @GL_KLUDGE@ GL: splodesic -root \n\ @GL_KLUDGE@ GL: unicrud -root \n !============================================================================= ! ! You probably don't want to change anything after this point. ! !============================================================================= XScreenSaver.pointerPollTime: 0:00:05 XScreenSaver.pointerHysteresis: 10 XScreenSaver.initialDelay: 0:00:00 XScreenSaver.windowCreationTimeout: 0:00:30 XScreenSaver.bourneShell: /bin/sh ! Resources for the password and splash-screen dialog boxes of ! the "xscreensaver" daemon. ! *Dialog.headingFont: *-helvetica-bold-r-*-*-*-180-*-*-*-iso8859-1 *Dialog.bodyFont: *-helvetica-bold-r-*-*-*-140-*-*-*-iso8859-1 *Dialog.labelFont: *-helvetica-bold-r-*-*-*-140-*-*-*-iso8859-1 *Dialog.unameFont: *-helvetica-bold-r-*-*-*-120-*-*-*-iso8859-1 *Dialog.buttonFont: *-helvetica-bold-r-*-*-*-140-*-*-*-iso8859-1 *Dialog.dateFont: *-helvetica-medium-r-*-*-*-80-*-*-*-iso8859-1 ! Helvetica asterisks look terrible. !*passwd.passwdFont: *-helvetica-medium-r-*-*-*-140-*-*-*-iso8859-1 *passwd.passwdFont: *-courier-medium-r-*-*-*-140-*-*-*-iso8859-1 *Dialog.foreground: #000000 *Dialog.background: #E6E6E6 *Dialog.Button.foreground: #000000 *Dialog.Button.background: #F5F5F5 !*Dialog.Button.pointBackground: #EAEAEA !*Dialog.Button.clickBackground: #C3C3C3 *Dialog.text.foreground: #000000 *Dialog.text.background: #FFFFFF *passwd.thermometer.foreground: #4464AC *passwd.thermometer.background: #FFFFFF *Dialog.topShadowColor: #FFFFFF *Dialog.bottomShadowColor: #CECECE *Dialog.logo.width: 210 *Dialog.logo.height: 210 *Dialog.internalBorderWidth: 24 *Dialog.borderWidth: 1 *Dialog.shadowThickness: 2 *passwd.heading.label: XScreenSaver %s *passwd.body.label: This screen is locked. *passwd.unlock.label: OK *passwd.login.label: New Login *passwd.user.label: Username: *passwd.thermometer.width: 8 *passwd.asterisks: True *passwd.uname: True *splash.heading.label: XScreenSaver %s *splash.body.label: Copyright \251 1991-2016 by *splash.body2.label: Jamie Zawinski *splash.demo.label: Settings *splash.help.label: Help !============================================================================= ! ! Pretty names for the hacks that have unusual capitalization. ! !============================================================================= *hacks.antinspect.name: AntInspect *hacks.antmaze.name: AntMaze *hacks.antspotlight.name: AntSpotlight *hacks.binaryring.name: BinaryRing *hacks.blinkbox.name: BlinkBox *hacks.blitspin.name: BlitSpin *hacks.blocktube.name: BlockTube *hacks.bouncingcow.name: BouncingCow *hacks.boxfit.name: BoxFit *hacks.bsod.name: BSOD *hacks.bubble3d.name: Bubble3D *hacks.ccurve.name: CCurve *hacks.cloudlife.name: CloudLife *hacks.companioncube.name: CompanionCube *hacks.cubestack.name: CubeStack *hacks.cubestorm.name: CubeStorm *hacks.cubetwist.name: CubeTwist *hacks.cubicgrid.name: CubicGrid *hacks.cwaves.name: CWaves *hacks.dangerball.name: DangerBall *hacks.decayscreen.name: DecayScreen *hacks.dnalogo.name: DNA Logo *hacks.dymaxionmap.name: DymaxionMap *hacks.energystream.name: EnergyStream *hacks.euler2d.name: Euler2D *hacks.fadeplot.name: FadePlot *hacks.flipflop.name: FlipFlop *hacks.flipscreen3d.name: FlipScreen3D *hacks.fliptext.name: FlipText *hacks.fluidballs.name: FluidBalls *hacks.flyingtoasters.name: FlyingToasters *hacks.fontglide.name: FontGlide *hacks.fuzzyflakes.name: FuzzyFlakes *hacks.geodesicgears.name: GeodesicGears *hacks.gflux.name: GFlux *hacks.gleidescope.name: Gleidescope *hacks.glforestfire.name: GLForestFire *hacks.hyperball.name: HyperBall *hacks.hypercube.name: HyperCube *hacks.ifs.name: IFS *hacks.imsmap.name: IMSMap *hacks.jigglypuff.name: JigglyPuff *hacks.juggler3d.name: Juggler3D *hacks.lcdscrub.name: LCDscrub *hacks.lmorph.name: LMorph *hacks.m6502.name: m6502 *hacks.memscroller.name: MemScroller *hacks.metaballs.name: MetaBalls *hacks.mirrorblob.name: MirrorBlob *hacks.moebiusgears.name: MoebiusGears *hacks.morph3d.name: Morph3D *hacks.nerverot.name: NerveRot *hacks.noseguy.name: NoseGuy *hacks.popsquares.name: PopSquares *hacks.projectiveplane.name:ProjectivePlane *hacks.quasicrystal.name: QuasiCrystal *hacks.raverhoop.name: RaverHoop *hacks.rd-bomb.name: RDbomb *hacks.rdbomb.name: RDbomb *hacks.romanboy.name: RomanBoy *hacks.rotzoomer.name: RotZoomer *hacks.rubikblocks.name: RubikBlocks *hacks.sballs.name: SBalls *hacks.shadebobs.name: ShadeBobs *hacks.sierpinski3d.name: Sierpinski3D *hacks.skytentacles.name: SkyTentacles *hacks.slidescreen.name: SlideScreen *hacks.speedmine.name: SpeedMine *hacks.splitflap.name: SplitFlap *hacks.starwars.name: StarWars *hacks.stonerview.name: StonerView *hacks.t3d.name: T3D *hacks.testx11.name: TestX11 *hacks.timetunnel.name: TimeTunnel *hacks.topblock.name: TopBlock *hacks.tronbit.name: TronBit *hacks.unknownpleasures.name:UnknownPleasures *hacks.vidwhacker.name: VidWhacker *hacks.webcollage.name: WebCollage *hacks.whirlwindwarp.name: WhirlWindWarp *hacks.winduprobot.name: WindupRobot *hacks.xanalogtv.name: XAnalogTV *hacks.xrayswarm.name: XRaySwarm ! obsolete, but still used by xscreensaver-demo-Xm. *hacks.documentation.isInstalled: True ! (xrdb prevention kludge: whole file) */ xscreensaver-5.36/driver/XScreenSaver-Xm.ad000644 000767 000024 00000007001 10365550722 020674 0ustar00jwzstaff000000 000000 ! Resources for the Motif dialog boxes of the "xscreensaver-demo" program. ! *fontList: *-helvetica-medium-r-*-*-*-120-*-*-*-iso8859-1 *demoDialog*label1.fontList: *-helvetica-medium-r-*-*-*-140-*-*-*-iso8859-1 *cmdText.fontList: *-courier-medium-r-*-*-*-120-*-*-*-iso8859-1 *label0.fontList: *-helvetica-bold-r-*-*-*-140-*-*-*-iso8859-1 XScreenSaver*doc.fontList: *-helvetica-medium-r-*-*-*-100-*-*-*-iso8859-1 ! above must be fully qualified to get around *sgiMode. *foreground: #000000 *background: #C0C0C0 *XmTextField.foreground: #000000 *XmTextField.background: #FFFFFF *list.foreground: #000000 *list.background: #FFFFFF *ApplicationShell.title: XScreenSaver *warning.title: XScreenSaver *warning_popup.title: XScreenSaver *allowShellResize: True *autoUnmanage: False *menubar*file.labelString: File *menubar*file.mnemonic: F *file.blank.labelString: Blank Screen Now *file.blank.mnemonic: B *file.lock.labelString: Lock Screen Now *file.lock.mnemonic: L *file.kill.labelString: Kill Daemon *file.kill.mnemonic: K *file.restart.labelString: Restart Daemon *file.restart.mnemonic: R *file.exit.labelString: Exit *file.exit.mnemonic: E *menubar*edit.labelString: Edit *menubar*edit.mnemonic: E *edit.cut.labelString: Cut *edit.cut.mnemonic: u *edit.copy.labelString: Copy *edit.copy.mnemonic: C *edit.paste.labelString: Paste *edit.paste.mnemonic: P *menubar*help.labelString: Help *menubar*help.mnemonic: H *help.about.labelString: About... *help.about.mnemonic: A *help.docMenu.labelString: Documentation... *help.docMenu.mnemonic: D *demoTab.marginWidth: 10 *optionsTab.marginWidth: 10 *XmScrolledWindow.topOffset: 10 *XmScrolledWindow.leftOffset: 10 *demoTab.topOffset: 4 *form1.bottomOffset: 10 *form3.leftOffset: 10 *form3.rightOffset: 10 *frame.topOffset: 10 *frame.bottomOffset: 10 *enabled.topOffset: 10 *visLabel.topOffset: 10 *combo.topOffset: 10 *form4.bottomOffset: 4 *hr.bottomOffset: 4 *XmComboBox.marginWidth: 0 *XmComboBox.marginHeight: 0 *demo.marginWidth: 30 *demo.marginHeight: 4 *man.marginWidth: 10 *man.marginHeight: 4 *down.leftOffset: 40 *down.marginWidth: 4 *down.marginHeight: 4 *up.marginWidth: 4 *up.marginHeight: 4 *frame.traversalOn: False *list.automaticSelection: True *list.visibleItemCount: 20 *doc.columns: 60 *combo.columns: 11 *demoTab.labelString: Graphics Demos *optionsTab.labelString: Screensaver Options *down.labelString: \\/ *up.labelString: /\\ *frameLabel.labelString: *cmdLabel.labelString: Command Line: *cmdLabel.alignment: ALIGNMENT_BEGINNING *enabled.labelString: Enabled *visLabel.labelString: Visual: *visLabel.alignment: ALIGNMENT_END *visLabel.leftOffset: 20 *demo.labelString: Demo *man.labelString: Documentation... *done.labelString: Quit *preferencesLabel.labelString: XScreenSaver Parameters *timeoutLabel.labelString: Saver Timeout *cycleLabel.labelString: Cycle Timeout *fadeSecondsLabel.labelString: Fade Duration *fadeTicksLabel.labelString: Fade Ticks *lockLabel.labelString: Lock Timeout *passwdLabel.labelString: Password Timeout *preferencesForm*XmTextField.columns: 8 *verboseToggle.labelString: Verbose *cmapToggle.labelString: Install Colormap *fadeToggle.labelString: Fade Colormap *unfadeToggle.labelString: Unfade Colormap *lockToggle.labelString: Require Password *OK.marginWidth: 30 *OK.marginHeight: 4 *OK.leftOffset: 10 *OK.bottomOffset: 10 *Cancel.marginWidth: 30 *Cancel.marginHeight: 4 *Cancel.rightOffset: 10 *Cancel.bottomOffset: 10 xscreensaver-5.36/driver/xscreensaver.pam.in000644 000767 000024 00000000523 11767547636 021273 0ustar00jwzstaff000000 000000 #%PAM-1.0 # Fedora Core 5: auth include system-auth # SuSE 9.0: (along with "configure --with-passwd-helper" and "unix2_chkpwd") # auth required pam_unix2.so nullok # Distant past: # auth required /lib/security/pam_pwdb.so shadow nullok # Account validation @COMMENT_PAM_CHECK_ACCOUNT@account include system-auth xscreensaver-5.36/driver/xscreensaver-demo.glade2.in000644 000767 000024 00000374101 12404142677 022565 0ustar00jwzstaff000000 000000 XScreenSaver GTK_WINDOW_TOPLEVEL GTK_WIN_POS_NONE False True False True False False GDK_WINDOW_TYPE_HINT_NORMAL GDK_GRAVITY_NORTH_WEST True False True False 5 True GTK_PACK_DIRECTION_LTR GTK_PACK_DIRECTION_LTR True _File True True _Blank Screen Now True True _Lock Screen Now True True _Kill Daemon True True _Restart Daemon True True True _Quit True True _Help True True _About... True True _Documentation... True 0 False False 8 True False 0 True True True True GTK_POS_TOP False False 10 True 2 2 False 0 0 True 3 4 False 2 0 True _Cycle After True False GTK_JUSTIFY_RIGHT False False 1 0.5 8 0 cycle_spinbutton PANGO_ELLIPSIZE_NONE -1 False 0 1 2 1 2 fill True Whether a password should be required to un-blank the screen. True False True True _Lock Screen After True GTK_RELIEF_NORMAL True False False True Lock Screen 0 2 2 3 fill True How long before the screen saver activates. True 15 0 True GTK_UPDATE_ALWAYS True False 1 1 720 1 15 0 2 3 0 1 fill True How long after the screen blanks until a password will be required. True 15 0 True GTK_UPDATE_ALWAYS True False 0 0 720 1 15 0 Lock Screen After 2 3 2 3 10 fill True How long each display mode should run before choosing a new one (in Random mode.) True 15 0 True GTK_UPDATE_ALWAYS True False 0 0 720 1 15 0 2 3 1 2 fill True minutes False False GTK_JUSTIFY_LEFT False False 0 0.5 8 0 PANGO_ELLIPSIZE_NONE -1 False 0 3 4 2 3 True minutes False False GTK_JUSTIFY_LEFT False False 0 0.5 8 0 PANGO_ELLIPSIZE_NONE -1 False 0 3 4 1 2 True _Blank After True False GTK_JUSTIFY_RIGHT False False 1 0.5 8 0 timeout_spinbutton PANGO_ELLIPSIZE_NONE -1 False 0 1 2 0 1 fill True minutes False False GTK_JUSTIFY_LEFT False False 0 0.5 8 0 PANGO_ELLIPSIZE_NONE -1 False 0 3 4 0 1 0 1 1 2 fill fill True GTK_BUTTONBOX_SPREAD 30 True Demo the selected screen saver in full-screen mode (click the mouse to return.) True True _Preview True GTK_RELIEF_NORMAL True True Customization and explanation of the selected screen saver. True True _Settings... True GTK_RELIEF_NORMAL True 1 2 1 2 fill fill 10 True False 0 True False 0 True _Mode: True False GTK_JUSTIFY_LEFT False False 0 0.5 0 0 mode_menu PANGO_ELLIPSIZE_NONE -1 False 0 0 False False True True 0 True True Never blank the screen or power down the monitor. _Disable Screen Saver True True When idle or locked, blacken the screen only. _Blank Screen Only True True When idle or locked, run the display mode selected below. _Only One Screen Saver True True When idle or locked, choose a random display mode from among the checked items in the list below. _Random Screen Saver True True When idle or locked, choose a random display mode from among the checked items in the list below. Run that same mode on each monitor. _Same Random Savers True 4 True True 10 False True True True GTK_POLICY_NEVER GTK_POLICY_ALWAYS GTK_SHADOW_IN GTK_CORNER_TOP_LEFT True True False True False True False False False 0 True True True True 0 True False 0 True Run the next screen saver in the list in full-screen mode (click the mouse to return.) True GTK_RELIEF_NORMAL True True GTK_ARROW_DOWN GTK_SHADOW_OUT 0.5 0.5 0 0 0 False False True Run the previous screen saver in the list in full-screen mode (click the mouse to return.) True GTK_RELIEF_NORMAL True True GTK_ARROW_UP GTK_SHADOW_OUT 0.5 0.5 0 0 0 False False 0 False False 0 False True GTK_PACK_END 0 1 0 1 fill True 0 0.5 GTK_SHADOW_ETCHED_IN True True True False GTK_POS_BOTTOM False False 8 True 0 0.5 GTK_SHADOW_ETCHED_IN 0.5 0.5 1.33000004292 False True False True True preview False False GTK_JUSTIFY_LEFT False False 0.5 0.5 0 0 PANGO_ELLIPSIZE_NONE -1 False 0 tab True No Preview Available False False GTK_JUSTIFY_CENTER False False 0.5 0.5 0 0 PANGO_ELLIPSIZE_NONE -1 False 0 False True True no preview False False GTK_JUSTIFY_LEFT False False 0.5 0.5 0 0 PANGO_ELLIPSIZE_NONE -1 False 0 tab True Not Installed False False GTK_JUSTIFY_CENTER False False 0.5 0.5 0 0 PANGO_ELLIPSIZE_NONE -1 False 0 False True True not installed False False GTK_JUSTIFY_LEFT False False 0.5 0.5 0 0 PANGO_ELLIPSIZE_NONE -1 False 0 tab True Very few (or no) screen savers appear to be available. This probably means that the "xscreensaver-extras" and "xscreensaver-gl-extras" packages are not installed. False False GTK_JUSTIFY_CENTER False False 0.5 0.5 0 0 PANGO_ELLIPSIZE_NONE -1 False 0 False True True nothing False False GTK_JUSTIFY_LEFT False False 0.5 0.5 0 0 PANGO_ELLIPSIZE_NONE -1 False 0 tab True Description False False GTK_JUSTIFY_LEFT False False 0.5 0.5 0 0 PANGO_ELLIPSIZE_NONE -1 False 0 label_item 1 2 0 1 6 expand|shrink|fill expand|shrink|fill False True True _Display Modes True False GTK_JUSTIFY_CENTER False False 0.5 0.5 0 0 notebook PANGO_ELLIPSIZE_NONE -1 False 0 tab True 2 2 True 0 0 10 True 0 0.5 GTK_SHADOW_ETCHED_IN 8 True False 8 True screensaver-snap.png 0 0 4 8 0 False False True False 0 True Whether the image-manipulating modes should be allowed to operate on an image of your desktop. True Grab Desktop _Images True GTK_RELIEF_NORMAL True False False True 0 False False True Whether the image-manipulating modes should operate on images captured from the system's video input (if there is one.) True Grab _Video Frames True GTK_RELIEF_NORMAL True False False True 0 False False True Whether the image-manipulating modes should load image files. True Choose _Random Image: True GTK_RELIEF_NORMAL True False False True 0 False False True False 0 True False False GTK_JUSTIFY_LEFT False False 0.5 0.5 8 0 PANGO_ELLIPSIZE_NONE -1 False 0 0 False False True The local directory, RSS feed or Atom feed from which images will be randomly chosen. True True True 0 True * False 2 True True True True _Browse True GTK_RELIEF_NORMAL True 0 False False 0 False False True Local directory, or RSS feed URL. False False GTK_JUSTIFY_LEFT False False 0 0.5 20 0 PANGO_ELLIPSIZE_NONE -1 False 0 0 False False 0 True True True Image Manipulation False False GTK_JUSTIFY_LEFT False False 0.5 0.5 0 0 PANGO_ELLIPSIZE_NONE -1 False 0 label_item 0 1 0 1 10 True 0 0.5 GTK_SHADOW_ETCHED_IN 8 True False 8 0 False False True 5 3 False 2 2 True Text-displaying modes will display the text typed here. True _Text True GTK_RELIEF_NORMAL True False False True 0 1 1 2 fill True Text-displaying modes will display the contents of this file. True Text _file True GTK_RELIEF_NORMAL True False False True text_radio 0 1 2 3 fill True Text-displaying modes will display the output of this program. True _Program True GTK_RELIEF_NORMAL True False False True text_radio 0 1 3 4 fill True Text-displaying modes will display the contents of this URL (HTML or RSS). True _URL True GTK_RELIEF_NORMAL True False False True text_radio 0 1 4 5 fill True Text-displaying modes will display the local host name, date, and time. True _Host Name and Time True GTK_RELIEF_NORMAL True True False True text_radio 0 3 0 1 fill True Text-displaying modes will display the contents of this URL (HTML or RSS). True True True 0 True * False 1 3 4 5 True True _Browse True GTK_RELIEF_NORMAL True 2 3 2 3 fill True Text-displaying modes will display the text typed here. True True True 0 True * False 1 3 1 2 True Text-displaying modes will display the output of this program. True True True 0 True * False 1 2 3 4 True True _Browse True GTK_RELIEF_NORMAL True 2 3 3 4 fill True Text-displaying modes will display the contents of this file. True True True 0 True * False 1 2 2 3 0 True True True Text Manipulation False False GTK_JUSTIFY_LEFT False False 0.5 0.5 0 0 PANGO_ELLIPSIZE_NONE -1 False 0 label_item 0 1 1 2 fill 10 True 0 0.5 GTK_SHADOW_ETCHED_IN 8 True False 8 0 False False True False 0 True Whether the monitor should be powered down after a while. True _Power Management Enabled True GTK_RELIEF_NORMAL True True False True 0 False False True 3 3 False 2 4 True Stand_by After True False GTK_JUSTIFY_LEFT False False 1 0.5 10 0 dpms_standby_spinbutton PANGO_ELLIPSIZE_NONE -1 False 0 0 1 0 1 fill True Sus_pend After True False GTK_JUSTIFY_LEFT False False 1 0.5 10 0 dpms_suspend_spinbutton PANGO_ELLIPSIZE_NONE -1 False 0 0 1 1 2 fill True _Off After True False GTK_JUSTIFY_LEFT False False 1 0.5 10 0 dpms_off_spinbutton PANGO_ELLIPSIZE_NONE -1 False 0 0 1 2 3 fill True minutes False False GTK_JUSTIFY_LEFT False False 0 0.5 0 0 PANGO_ELLIPSIZE_NONE -1 False 0 2 3 0 1 fill True minutes False False GTK_JUSTIFY_LEFT False False 0 0.5 0 0 PANGO_ELLIPSIZE_NONE -1 False 0 2 3 1 2 fill True minutes False False GTK_JUSTIFY_LEFT False False 0 0.5 0 0 PANGO_ELLIPSIZE_NONE -1 False 0 2 3 2 3 fill True How long until the monitor powers down. True 15 0 True GTK_UPDATE_ALWAYS True False 0 0 1440 1 15 0 1 2 2 3 True How long until the monitor goes into power-saving mode. True 15 0 True GTK_UPDATE_ALWAYS True False 0 0 1440 1 15 0 1 2 1 2 True How long until the monitor goes completely black. True 15 0 True GTK_UPDATE_ALWAYS True False 0 0 1440 1 15 0 1 2 0 1 0 False True True Whether the monitor should be powered off immediately in "Blank Screen Only" mode, regardless of the above power-management timeouts. True _Quick Power-off in Blank Only Mode True GTK_RELIEF_NORMAL True False False True 0 False False 0 True True True Display Power Management False False GTK_JUSTIFY_LEFT False False 0.5 0.5 0 0 PANGO_ELLIPSIZE_NONE -1 False 0 label_item 1 2 0 1 fill 10 True 0 0.5 GTK_SHADOW_ETCHED_IN 8 True False 8 True screensaver-colorselector.png 0.5 0 0 0 0 False False True False 0 True Whether the screen should slowly fade to black when the screen saver activates. True Fade to Black when _Blanking True GTK_RELIEF_NORMAL True False False True 0 False False True Whether the screen should slowly fade in from black when the screen saver deactivates. True Fade from Black When _Unblanking True GTK_RELIEF_NORMAL True False False True 0 False False True False 0 True False False GTK_JUSTIFY_LEFT False False 0.5 0.5 3 0 PANGO_ELLIPSIZE_NONE -1 False 0 0 False False True F_ade Duration True False GTK_JUSTIFY_LEFT False False 0 0.5 0 0 fade_spinbutton PANGO_ELLIPSIZE_NONE -1 False 0 14 False False True How long it should take for the screen to fade in and out. True 1 0 True GTK_UPDATE_ALWAYS True False 0 0 10 1 1 0 4 False False True seconds False False GTK_JUSTIFY_LEFT False False 0 0.5 0 0 PANGO_ELLIPSIZE_NONE -1 False 0 2 False False 0 False False True 8 False False True Whether to install a private colormap when running in 8-bit mode on the default Visual. True Install _Colormap True GTK_RELIEF_NORMAL True False False True 0 False False 0 True True True Fading and Colormaps False False GTK_JUSTIFY_LEFT False False 0.5 0.5 0 0 PANGO_ELLIPSIZE_NONE -1 False 0 label_item 1 2 1 2 fill fill False True True _Advanced True False GTK_JUSTIFY_LEFT False False 0.5 0.5 0 0 notebook PANGO_ELLIPSIZE_NONE -1 False 0 tab 0 True True 0 True True 5 GTK_BUTTONBOX_EDGE 10 True True True gtk-help True GTK_RELIEF_NORMAL True True True True gtk-close True GTK_RELIEF_NORMAL True 0 False True GTK_PACK_END dialog1 GTK_WINDOW_TOPLEVEL GTK_WIN_POS_NONE False True False True False False GDK_WINDOW_TYPE_HINT_DIALOG GDK_GRAVITY_NORTH_WEST True False @COMMENT_DEMO_GLADE2_GTK_2_22_HEAD@False@COMMENT_DEMO_GLADE2_GTK_2_22_TAIL@ True False 0 True GTK_BUTTONBOX_END True True True _Advanced >> True GTK_RELIEF_NORMAL True 0 True True True _Standard << True GTK_RELIEF_NORMAL True 0 True True True _Reset to Defaults True GTK_RELIEF_NORMAL True 0 True True True gtk-cancel True GTK_RELIEF_NORMAL True -6 True True True gtk-ok True GTK_RELIEF_NORMAL True -5 0 False True GTK_PACK_END True False 0 True 0 0 GTK_SHADOW_ETCHED_IN 12 True True True False GTK_POS_BOTTOM False False True False 0 True True GTK_PACK_END True Standard False False GTK_JUSTIFY_LEFT False False 0.5 0.5 0 0 PANGO_ELLIPSIZE_NONE -1 False 0 tab True 4 2 False 0 0 0 1 0 1 fill fill True _Command Line: True False GTK_JUSTIFY_LEFT False False 0 0.5 0 0 cmd_text PANGO_ELLIPSIZE_NONE -1 False 0 1 2 1 2 fill True True True True 0 True * False 1 2 2 3 True False 0 True _Visual: True False GTK_JUSTIFY_LEFT False False 1 0.5 3 0 visual_entry PANGO_ELLIPSIZE_NONE -1 False 0 0 False False True False True False True False True True True True 0 True * False True GTK_SELECTION_BROWSE True True Any True True Best True True Default True True Default-N True True GL True True TrueColor True True PseudoColor True True StaticGray True True GrayScale True True DirectColor True True Color True True Gray True True Mono 0 False False 1 2 3 4 fill fill False True True Advanced False False GTK_JUSTIFY_LEFT False False 0.5 0.5 0 0 PANGO_ELLIPSIZE_NONE -1 False 0 tab True Settings False False GTK_JUSTIFY_LEFT False False 0.5 0.5 0 0 PANGO_ELLIPSIZE_NONE -1 False 0 label_item 0 True True True 0 0 GTK_SHADOW_NONE 5 True False 5 True True False False GTK_JUSTIFY_LEFT True True 0 0 0 0 PANGO_ELLIPSIZE_NONE -1 False 0 0 True True True False 0 True True _Documentation... True GTK_RELIEF_NORMAL True 0 False False GTK_PACK_END 0 False False True False False GTK_JUSTIFY_LEFT False False 0.5 0.5 0 0 PANGO_ELLIPSIZE_NONE -1 False 0 label_item 0 False False 0 True True xscreensaver-5.36/driver/xscreensaver-demo.glade2p000644 000767 000024 00000001624 10276064337 022336 0ustar00jwzstaff000000 000000 XScreenSaver Demo xscreensaver-demo ../utils/images TRUE FALSE FALSE FALSE demo-Gtk2-widgets.c demo-Gtk2-widgets.h demo-Gtk2-stubs.c demo-Gtk2-stubs.h demo-Gtk2-support.c demo-Gtk2-support.h xscreensaver-5.36/driver/screensaver-properties.desktop.in000644 000767 000024 00000000307 11262776141 024152 0ustar00jwzstaff000000 000000 [Desktop Entry] Exec=xscreensaver-demo Icon=xscreensaver Terminal=false _Name=Screensaver _Comment=Change screensaver properties Type=Application Categories=Settings;DesktopSettings;Security;X-XFCE; xscreensaver-5.36/driver/.gdbinit000644 000767 000024 00000001454 11033302722 017047 0ustar00jwzstaff000000 000000 # If you're debugging xscreensaver and you are running a virtual root window # manager, you'd better let the process handle these signals: it remaps the # virtual root window when they arrive. If you don't do this, your window # manager will be hosed. # # Also, gdb copes badly with breakpoints in functions that are called on the # other side of a fork(). The Trace/BPT traps cause the spawned process to # die. # #handle 1 pass nostop #handle 3 pass nostop #handle 4 pass nostop #handle 6 pass nostop #handle 7 pass nostop #handle 8 pass nostop #handle 9 pass nostop #handle 10 pass nostop #handle 11 pass nostop #handle 12 pass nostop #handle 13 pass nostop #handle 15 pass nostop #handle 19 pass nostop set env MallocGuardEdges 1 set env MallocPreScribble 1 set env MallocScribble 1 b exit set args -debug xscreensaver-5.36/driver/compile_axp.com000644 000767 000024 00000002373 06366446377 020463 0ustar00jwzstaff000000 000000 $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H)/INCL=([],[-],[-.UTILS]) DEMO.C $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H)/INCL=([],[-],[-.UTILS]) DIALOGS-XM.C $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H)/INCL=([],[-],[-.UTILS]) LOCK.C $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H)/INCL=([],[-],[-.UTILS]) PASSWD.C $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H)/INCL=([],[-],[-.UTILS]) STDERR.C $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,NO_SETUID)/INCL=([],[-],[-.UTILS]) SUBPROCS.C $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H)/INCL=([],[-],[-.UTILS]) TIMERS.C $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H)/INCL=([],[-],[-.UTILS]) WINDOWS.C $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H)/INCL=([],[-],[-.UTILS]) XSCREENSAVER-COMMAND.C $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,NO_SETUID)/INCL=([],[-],[-.UTILS]) XSCREENSAVER.C $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H)/INCL=([],[-],[-.UTILS]) XSET.C $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H)/INCL=([],[-],[-.UTILS]) VMS-GETPWNAM.C $!!! CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H)/INCL=([],[-],[-.UTILS]) GETPWUID.C $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H)/INCL=([],[-],[-.UTILS]) VMS-HPWD.C $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H)/INCL=([],[-],[-.UTILS]) VMS-VALIDATE.C xscreensaver-5.36/driver/compile_decc.com000644 000767 000024 00000002373 06366446377 020571 0ustar00jwzstaff000000 000000 $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H)/INCL=([],[-],[-.UTILS]) DEMO.C $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H)/INCL=([],[-],[-.UTILS]) DIALOGS-XM.C $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H)/INCL=([],[-],[-.UTILS]) LOCK.C $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H)/INCL=([],[-],[-.UTILS]) PASSWD.C $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H)/INCL=([],[-],[-.UTILS]) STDERR.C $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,NO_SETUID)/INCL=([],[-],[-.UTILS]) SUBPROCS.C $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H)/INCL=([],[-],[-.UTILS]) TIMERS.C $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H)/INCL=([],[-],[-.UTILS]) WINDOWS.C $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H)/INCL=([],[-],[-.UTILS]) XSCREENSAVER-COMMAND.C $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H,NO_SETUID)/INCL=([],[-],[-.UTILS]) XSCREENSAVER.C $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H)/INCL=([],[-],[-.UTILS]) XSET.C $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H)/INCL=([],[-],[-.UTILS]) VMS-GETPWNAM.C $!!! CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H)/INCL=([],[-],[-.UTILS]) GETPWUID.C $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H)/INCL=([],[-],[-.UTILS]) VMS-HPWD.C $ CC/DECC/PREFIX=ALL/DEFINE=(VMS,HAVE_CONFIG_H)/INCL=([],[-],[-.UTILS]) VMS-VALIDATE.C xscreensaver-5.36/driver/link_axp.com000644 000767 000024 00000001264 06366446377 017766 0ustar00jwzstaff000000 000000 $! We fisrt test the version of DECW/Motif ; if 1.2 we need to link with new $! X11R5 libraries $@sys$update:decw$get_image_version sys$share:decw$xlibshr.exe decw$version $ if f$extract(4,3,decw$version).eqs."1.2" $ then $! DECW/Motif 1.2 : link with X11R5 libraries $ link xscreensaver-command,vms_axp_12.opt/opt $ link xscreensaver,demo,dialogs-xm,lock,passwd,stderr,subprocs,timers, - windows,xset,vms-getpwnam,vms-hpwd,vms-validate,vms_axp_12.opt/opt $ else $! Else, link with X11R4 libraries $ link xscreensaver-command,vms_axp.opt/opt $ link xscreensaver,demo,dialogs-xm,lock,passwd,stderr,subprocs,timers, - windows,xset,vms-getpwnam,vms-hpwd,vms-validate,vms_axp.opt/opt $ endif xscreensaver-5.36/driver/link_decc.com000644 000767 000024 00000001270 06366446377 020071 0ustar00jwzstaff000000 000000 $! We fisrt test the version of DECW/Motif ; if 1.2 we need to link with new $! X11R5 libraries $@sys$update:decw$get_image_version sys$share:decw$xlibshr.exe decw$version $ if f$extract(4,3,decw$version).eqs."1.2" $ then $! DECW/Motif 1.2 : link with X11R5 libraries $ link xscreensaver-command,vms_decc_12.opt/opt $ link xscreensaver,demo,dialogs-xm,lock,passwd,stderr,subprocs,timers, - windows,xset,vms-getpwnam,vms-hpwd,vms-validate,vms_decc_12.opt/opt $ else $! Else, link with X11R4 libraries $ link xscreensaver-command,vms_decc.opt/opt $ link xscreensaver,demo,dialogs-xm,lock,passwd,stderr,subprocs,timers, - windows,xset,vms-getpwnam,vms-hpwd,vms-validate,vms_decc.opt/opt $ endif xscreensaver-5.36/driver/vms-getpwnam.c000644 000767 000024 00000006745 12701612240 020231 0ustar00jwzstaff000000 000000 /* * getpwnam(name) - retrieves a UAF entry * * Author: Patrick L. Mahan * Location: TGV, Inc * Date: 15-Nov-1991 * * Purpose: Provides emulation for the UNIX getpwname routine. * * Modification History * * Date | Who | Version | Reason * ------------+-----------+---------------+--------------------------- * 15-Nov-1991 | PLM | 1.0 | First Write */ #define PASSWDROUTINES #include #include #include #include #include #include #include "vms-pwd.h" struct uic { unsigned short uid; unsigned short gid; }; #define TEST(ptr, str) { if (ptr == NULL) { \ fprintf(stderr, "getpwnam: memory allocation failure for \"%s\"\n", \ str); \ return ((struct passwd *)(NULL)); \ } } struct passwd *getpwnam(name) char *name; { int istatus; int UserNameLen; int UserOwnerLen; int UserDeviceLen; int UserDirLen; static char UserName[13]; static char UserOwner[32]; static char UserDevice[32]; static char UserDir[64]; char *cptr, *sptr; unsigned long int UserPwd[2]; unsigned short int UserSalt; unsigned long int UserEncrypt; struct uic UicValue; struct passwd *entry; struct dsc$descriptor_s VMSNAME = {strlen(name), DSC$K_DTYPE_T, DSC$K_CLASS_S, name}; struct itmlist3 { unsigned short int length; unsigned short int item; unsigned long int addr; unsigned long int retaddr; } ItemList[] = { {12, UAI$_USERNAME, (unsigned long)&UserName, (unsigned long)&UserNameLen}, {8, UAI$_PWD, (unsigned long)&UserPwd, 0}, {4, UAI$_UIC, (unsigned long)&UicValue, 0}, {32, UAI$_OWNER, (unsigned long)&UserOwner, (unsigned long)&UserOwnerLen}, {32, UAI$_DEFDEV, (unsigned long)&UserDevice, (unsigned long)&UserDeviceLen}, {64, UAI$_DEFDIR, (unsigned long)&UserDir, (unsigned long)&UserDirLen}, {2, UAI$_SALT, (unsigned long)&UserSalt, 0}, {4, UAI$_ENCRYPT, (unsigned long)&UserEncrypt, 0}, {0, 0, 0, 0} }; UserNameLen = 0; istatus = sys$getuai (0, 0, &VMSNAME, &ItemList, 0, 0, 0); if (!(istatus & 1)) { fprintf (stderr, "getpwnam: unable to retrieve passwd entry for %s\n", name); fprintf (stderr, "getpwnam: vms error number is 0x%x\n", istatus); return ((struct passwd *)NULL); } entry = (struct passwd *) calloc (1, sizeof(struct passwd)); TEST(entry, "PASSWD_ENTRY"); entry->pw_uid = UicValue.uid; entry->pw_gid = UicValue.gid; entry->pw_salt = UserSalt; entry->pw_encrypt = UserEncrypt; sptr = UserName; cptr = calloc (UserNameLen+1, sizeof(char)); TEST(cptr, "USERNAME"); strncpy (cptr, sptr, UserNameLen); cptr[UserNameLen] = '\0'; entry->pw_name = cptr; cptr = calloc(8, sizeof(char)); TEST(cptr, "PASSWORD"); memcpy(cptr, UserPwd, 8); entry->pw_passwd = cptr; sptr = UserOwner; sptr++; cptr = calloc ((int)UserOwner[0]+1, sizeof(char)); TEST(cptr, "FULLNAME"); strncpy (cptr, sptr, (int)UserOwner[0]); cptr[(int)UserOwner[0]] = '\0'; entry->pw_gecos = cptr; cptr = calloc ((int)UserDevice[0]+(int)UserDir[0]+1, sizeof(char)); TEST(cptr, "HOME"); sptr = UserDevice; sptr++; strncpy (cptr, sptr, (int)UserDevice[0]); sptr = UserDir; sptr++; strncat (cptr, sptr, (int)UserDir[0]); cptr[(int)UserDevice[0]+(int)UserDir[0]] = '\0'; entry->pw_dir = cptr; cptr = calloc (strlen("SYS$SYSTEM:LOGINOUT.EXE")+1, sizeof(char)); TEST(cptr,"SHELL"); strcpy (cptr, "SYS$SYSTEM:LOGINOUT.EXE"); entry->pw_shell = cptr; return (entry); } xscreensaver-5.36/driver/vms-pwd.h000644 000767 000024 00000001373 12701612240 017176 0ustar00jwzstaff000000 000000 /* @(#)pwd.h 1.7 89/08/24 SMI; from S5R2 1.1 */ #ifndef __pwd_h #define __pwd_h #ifdef vax11c #include #else #include #endif /* vax11c */ #ifdef PASSWDROUTINES #define EXTERN #else #define EXTERN extern #endif /* PASSWDROUTINES */ struct passwd { char *pw_name; char *pw_passwd; int pw_uid; int pw_gid; short pw_salt; int pw_encrypt; char *pw_age; char *pw_comment; char *pw_gecos; char *pw_dir; char *pw_shell; }; #ifndef _POSIX_SOURCE extern struct passwd *getpwent(); struct comment { char *c_dept; char *c_name; char *c_acct; char *c_bin; }; #endif EXTERN struct passwd *getpwuid(/* uid_t uid */); EXTERN struct passwd *getpwnam(/* char *name */); #endif /* !__pwd_h */ xscreensaver-5.36/driver/vms-hpwd.c000644 000767 000024 00000004075 12701612240 017343 0ustar00jwzstaff000000 000000 /* * VAX/VMS Password hashing routines: * * uses the System Service SYS$HASH_PASSWORD * * 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. * */ #include #include #include #include /* * Hashing routine */ hash_vms_password(output_buf,input_buf,input_length,username,encryption_type,salt) char *output_buf; char *input_buf; int input_length; char *username; int encryption_type; unsigned short salt; { struct dsc$descriptor_s password; struct dsc$descriptor_s user; /* * Check the VMS Version. If this is V5.4 or later, then * we can use the new system service SYS$HASH_PASSWORD. Else * fail and return garbage. */ static char VMS_Version[32]; struct { unsigned short int Size; unsigned short int Code; char *Buffer; unsigned short int *Resultant_Size; } Item_List[2]={32, SYI$_VERSION, VMS_Version, 0, 0, 0}; struct {int Size; char *Ptr;} Descr1; /* * Get the information */ sys$getsyiw(0,0,0,Item_List,0,0,0); /* * Call the old routine if this isn't V5.4 or later... */ #ifndef __DECC if ((VMS_Version[1] < '5') || ((VMS_Version[1] == '5') && (VMS_Version[3] < '4'))) { printf("Unsupported OS version\n"); return(1); } #endif /* !__DECC */ /* * Call the SYS$HASH_PASSWORD system service... */ password.dsc$b_dtype = DSC$K_DTYPE_T; password.dsc$b_class = DSC$K_CLASS_S; password.dsc$w_length = input_length; password.dsc$a_pointer = input_buf; user.dsc$b_dtype = DSC$K_DTYPE_T; user.dsc$b_class = DSC$K_CLASS_S; user.dsc$w_length = strlen(username); user.dsc$a_pointer = username; sys$hash_password (&password, encryption_type, salt, &user, output_buf); } xscreensaver-5.36/driver/vms-validate.c000644 000767 000024 00000003240 12701612240 020163 0ustar00jwzstaff000000 000000 /* * validate a password for a user * * 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. */ /* * Includes */ #include #include #include #include "vms-pwd.h" int hash_vms_password(char *output_buf,char *input_buf,int input_length, char *username,int encryption_type,unsigned short salt); /* * * Validate a VMS UserName/Password pair. * */ int validate_user(name,password) char *name; char *password; { char password_buf[64]; char username_buf[31]; char encrypt_buf[8]; register int i; register char *cp,*cp1; struct passwd *user_entry; /* * Get the users UAF entry */ user_entry = getpwnam(name); /* * If user_entry == NULL then we got a bad error * return -1 to indicate a bad error */ if (user_entry == NULL) return (-1); /* * Uppercase the password */ cp = password; cp1 = password_buf; while (*cp) if (islower(*cp)) *cp1++ = toupper(*cp++); else *cp1++ = *cp++; /* * Get the length of the password */ i = strlen(password); /* * Encrypt the password */ hash_vms_password(encrypt_buf,password_buf,i,user_entry->pw_name, user_entry->pw_encrypt, user_entry->pw_salt); if (memcmp(encrypt_buf,user_entry->pw_passwd,8) == 0) return(1); else return(0); } xscreensaver-5.36/driver/vms_axp.opt000644 000767 000024 00000000240 06366446401 017637 0ustar00jwzstaff000000 000000 [-.UTILS]UTILS.OLB_AXP/LIB SYS$SHARE:DECW$XMLIBSHR.EXE/SHARE SYS$SHARE:DECW$XMULIBSHR.EXE/SHARE SYS$SHARE:DECW$XTSHR.EXE/SHARE SYS$SHARE:DECW$XLIBSHR.EXE/SHARE xscreensaver-5.36/driver/vms_axp_12.opt000644 000767 000024 00000000251 06366446401 020143 0ustar00jwzstaff000000 000000 [-.UTILS]UTILS.OLB_AXP/LIB SYS$SHARE:DECW$XMLIBSHR12.EXE/SHARE SYS$SHARE:DECW$XMULIBSHRR5.EXE/SHARE SYS$SHARE:DECW$XTLIBSHRR5.EXE/SHARE SYS$SHARE:DECW$XLIBSHR.EXE/SHARE xscreensaver-5.36/driver/vms_decc.opt000644 000767 000024 00000000241 06366446401 017746 0ustar00jwzstaff000000 000000 [-.UTILS]UTILS.OLB_DECC/LIB SYS$SHARE:DECW$XMLIBSHR.EXE/SHARE SYS$SHARE:DECW$XMULIBSHR.EXE/SHARE SYS$SHARE:DECW$XTSHR.EXE/SHARE SYS$SHARE:DECW$XLIBSHR.EXE/SHARE xscreensaver-5.36/driver/vms_decc_12.opt000644 000767 000024 00000000252 06366446402 020253 0ustar00jwzstaff000000 000000 [-.UTILS]UTILS.OLB_DECC/LIB SYS$SHARE:DECW$XMLIBSHR12.EXE/SHARE SYS$SHARE:DECW$XMULIBSHRR5.EXE/SHARE SYS$SHARE:DECW$XTLIBSHRR5.EXE/SHARE SYS$SHARE:DECW$XLIBSHR.EXE/SHARE xscreensaver-5.36/driver/xscreensaver.c000664 000767 000024 00000231043 12720741026 020313 0ustar00jwzstaff000000 000000 /* xscreensaver, Copyright (c) 1991-2016 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. */ /* ======================================================================== * First we wait until the keyboard and mouse become idle for the specified * amount of time. We do this in one of three different ways: periodically * checking with the XIdle server extension; selecting key and mouse events * on (nearly) all windows; or by waiting for the MIT-SCREEN-SAVER extension * to send us a "you are idle" event. * * Then, we map a full screen black window. * * We place a __SWM_VROOT property on this window, so that newly-started * clients will think that this window is a "virtual root" window (as per * the logic in the historical "vroot.h" header.) * * If there is an existing "virtual root" window (one that already had * an __SWM_VROOT property) then we remove that property from that window. * Otherwise, clients would see that window (the real virtual root) instead * of ours (the impostor.) * * Then we pick a random program to run, and start it. Two assumptions * are made about this program: that it has been specified with whatever * command-line options are necessary to make it run on the root window; * and that it has been compiled with vroot.h, so that it is able to find * the root window when a virtual-root window manager (or this program) is * running. * * Then, we wait for keyboard or mouse events to be generated on the window. * When they are, we kill the inferior process, unmap the window, and restore * the __SWM_VROOT property to the real virtual root window if there was one. * * On multi-screen systems, we do the above on each screen, and start * multiple programs, each with a different value of $DISPLAY. * * On Xinerama systems, we do a similar thing, but instead create multiple * windows on the (only) display, and tell the subprocess which one to use * via the $XSCREENSAVER_WINDOW environment variable -- this trick requires * a recent (Aug 2003) revision of vroot.h. * * (See comments in screens.c for more details about Xinerama/RANDR stuff.) * * While we are waiting for user activity, we also set up timers so that, * after a certain amount of time has passed, we can start a different * screenhack. We do this by killing the running child process with * SIGTERM, and then starting a new one in the same way. * * If there was a real virtual root, meaning that we removed the __SWM_VROOT * property from it, meaning we must (absolutely must) restore it before we * exit, then we set up signal handlers for most signals (SIGINT, SIGTERM, * etc.) that do this. Most Xlib and Xt routines are not reentrant, so it * is not generally safe to call them from signal handlers; however, this * program spends most of its time waiting, so the window of opportunity * when code could be called reentrantly is fairly small; and also, the worst * that could happen is that the call would fail. If we've gotten one of * these signals, then we're on our way out anyway. If we didn't restore the * __SWM_VROOT property, that would be very bad, so it's worth a shot. Note * that this means that, if you're using a virtual-root window manager, you * can really fuck up the world by killing this process with "kill -9". * * This program accepts ClientMessages of type SCREENSAVER; these messages * may contain the atoms ACTIVATE, DEACTIVATE, etc, meaning to turn the * screensaver on or off now, regardless of the idleness of the user, * and a few other things. The included "xscreensaver-command" program * sends these messsages. * * If we don't have the XIdle, MIT-SCREEN-SAVER, or SGI SCREEN_SAVER * extensions, then we do the XAutoLock trick: notice every window that * gets created, and wait 30 seconds or so until its creating process has * settled down, and then select KeyPress events on those windows which * already select for KeyPress events. It's important that we not select * KeyPress on windows which don't select them, because that would * interfere with event propagation. This will break if any program * changes its event mask to contain KeyRelease or PointerMotion more than * 30 seconds after creating the window, but such programs do not seem to * occur in nature (I've never seen it happen in all these years.) * * The reason that we can't select KeyPresses on windows that don't have * them already is that, when dispatching a KeyPress event, X finds the * lowest (leafmost) window in the hierarchy on which *any* client selects * for KeyPress, and sends the event to that window. This means that if a * client had a window with subwindows, and expected to receive KeyPress * events on the parent window instead of the subwindows, then that client * would malfunction if some other client selected KeyPress events on the * subwindows. It is an incredible misdesign that one client can make * another client malfunction in this way. * * But here's a new kink that started showing up in late 2014: GNOME programs * don't actually select for or receive KeyPress events! They do it behind * the scenes through some kind of Input Method magic, even when running in * an en_US locale. However, in that case, those applications *do* seem to * update the _NET_WM_USER_TIME on their own windows every time they have * received a secret KeyPress, so we *also* monitor that property on every * window, and treat changes to it as identical to KeyPress. * * To detect mouse motion, we periodically wake up and poll the mouse * position and button/modifier state, and notice when something has * changed. We make this check every five seconds by default, and since the * screensaver timeout has a granularity of one minute, this makes the * chance of a false positive very small. We could detect mouse motion in * the same way as keyboard activity, but that would suffer from the same * "client changing event mask" problem that the KeyPress events hack does. * I think polling is more reliable. * * On systems with /proc/interrupts (Linux) we poll that file and note when * the interrupt counter numbers on the "keyboard" and "PS/2" lines change. * (There is no reliable way, using /proc/interrupts, to detect non-PS/2 * mice, so it doesn't help for serial or USB mice.) * * None of this crap happens if we're using one of the extensions. Sadly, * the XIdle extension hasn't been available for many years; the SGI * extension only exists on SGIs; and the MIT extension, while widely * deployed, is garbage in several ways. * * A third idle-detection option could be implemented (but is not): when * running on the console display ($DISPLAY is `localhost`:0) and we're on a * machine where /dev/tty and /dev/mouse have reasonable last-modification * times, we could just stat() those. But the incremental benefit of * implementing this is really small, so forget I said anything. * * Debugging hints: * - Have a second terminal handy. * - Be careful where you set your breakpoints, you don't want this to * stop under the debugger with the keyboard grabbed or the blackout * window exposed. * - If you run your debugger under XEmacs, try M-ESC (x-grab-keyboard) * to keep your emacs window alive even when xscreensaver has grabbed. * - Go read the code related to `debug_p'. * - You probably can't set breakpoints in functions that are called on * the other side of a call to fork() -- if your subprocesses are * dying with signal 5, Trace/BPT Trap, you're losing in this way. * - If you aren't using a server extension, don't leave this stopped * under the debugger for very long, or the X input buffer will get * huge because of the keypress events it's selecting for. This can * make your X server wedge with "no more input buffers." * * ======================================================================== */ #ifdef HAVE_CONFIG_H # include "config.h" #endif #include #include #include #ifdef ENABLE_NLS # include # include #endif /* ENABLE_NLS */ #include #include #include #include #include #include #include #include #include /* for gethostbyname() */ #include #include #ifdef HAVE_XMU # ifndef VMS # include # else /* !VMS */ # include # endif /* !VMS */ #else /* !HAVE_XMU */ # include "xmu.h" #endif /* !HAVE_XMU */ #ifdef HAVE_MIT_SAVER_EXTENSION #include #endif /* HAVE_MIT_SAVER_EXTENSION */ #ifdef HAVE_XIDLE_EXTENSION # include #endif /* HAVE_XIDLE_EXTENSION */ #ifdef HAVE_SGI_VC_EXTENSION # include #endif /* HAVE_SGI_VC_EXTENSION */ #ifdef HAVE_READ_DISPLAY_EXTENSION # include #endif /* HAVE_READ_DISPLAY_EXTENSION */ #ifdef HAVE_XSHM_EXTENSION # include #endif /* HAVE_XSHM_EXTENSION */ #ifdef HAVE_DPMS_EXTENSION # include #endif /* HAVE_DPMS_EXTENSION */ #ifdef HAVE_DOUBLE_BUFFER_EXTENSION # include #endif /* HAVE_DOUBLE_BUFFER_EXTENSION */ #ifdef HAVE_XF86VMODE # include #endif /* HAVE_XF86VMODE */ #ifdef HAVE_XF86MISCSETGRABKEYSSTATE # include #endif /* HAVE_XF86MISCSETGRABKEYSSTATE */ #ifdef HAVE_XINERAMA # include #endif /* HAVE_XINERAMA */ #ifdef HAVE_RANDR # include #endif /* HAVE_RANDR */ #include "xscreensaver.h" #include "version.h" #include "yarandom.h" #include "resources.h" #include "visual.h" #include "usleep.h" #include "auth.h" saver_info *global_si_kludge = 0; /* I hate C so much... */ char *progname = 0; char *progclass = 0; XrmDatabase db = 0; static Atom XA_SCREENSAVER_RESPONSE; static Atom XA_ACTIVATE, XA_DEACTIVATE, XA_CYCLE, XA_NEXT, XA_PREV; static Atom XA_RESTART, XA_SELECT; static Atom XA_THROTTLE, XA_UNTHROTTLE; Atom XA_DEMO, XA_PREFS, XA_EXIT, XA_LOCK, XA_BLANK; static XrmOptionDescRec options [] = { { "-verbose", ".verbose", XrmoptionNoArg, "on" }, { "-silent", ".verbose", XrmoptionNoArg, "off" }, /* xscreensaver-demo uses this one */ { "-nosplash", ".splash", XrmoptionNoArg, "off" }, { "-no-splash", ".splash", XrmoptionNoArg, "off" }, /* useful for debugging */ { "-no-capture-stderr", ".captureStderr", XrmoptionNoArg, "off" }, { "-log", ".logFile", XrmoptionSepArg, 0 }, }; #ifdef __GNUC__ __extension__ /* shut up about "string length is greater than the length ISO C89 compilers are required to support" when including the .ad file... */ #endif static char *defaults[] = { #include "XScreenSaver_ad.h" 0 }; #ifdef _VROOT_H_ ERROR! You must not include vroot.h in this file. #endif static void do_help (saver_info *si) { char *s, year[5]; s = strchr (screensaver_id, '-'); s = strrchr (s, '-'); s++; strncpy (year, s, 4); year[4] = 0; fflush (stdout); fflush (stderr); fprintf (stdout, "\ xscreensaver %s, copyright (c) 1991-%s by Jamie Zawinski \n\ \n\ All xscreensaver configuration is via the `~/.xscreensaver' file.\n\ Rather than editing that file by hand, just run `xscreensaver-demo':\n\ that program lets you configure the screen saver graphically,\n\ including timeouts, locking, and display modes.\n\ \n", si->version, year); fprintf (stdout, "\ Just getting started? Try this:\n\ \n\ xscreensaver &\n\ xscreensaver-demo\n\ \n\ For updates, online manual, and FAQ, please see the web page:\n\ \n\ https://www.jwz.org/xscreensaver/\n\ \n"); fflush (stdout); fflush (stderr); exit (1); } Bool in_signal_handler_p = 0; /* I hate C so much... */ char * timestring (time_t when) { 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 { char *str, *nl; if (! when) when = time ((time_t *) 0); str = (char *) ctime (&when); nl = (char *) strchr (str, '\n'); if (nl) *nl = 0; /* take off that dang newline */ return str; } } static Bool blurb_timestamp_p = True; /* kludge */ const char * blurb (void) { if (!blurb_timestamp_p) return progname; else { static char buf[255]; char *ct = timestring(0); int n = strlen(progname); if (n > 100) n = 99; strncpy(buf, progname, n); buf[n++] = ':'; buf[n++] = ' '; strncpy(buf+n, ct+11, 8); strcpy(buf+n+9, ": "); return buf; } } int saver_ehandler (Display *dpy, XErrorEvent *error) { saver_info *si = global_si_kludge; /* I hate C so much... */ int i; Bool fatal_p; if (!real_stderr) real_stderr = stderr; fprintf (real_stderr, "\n" "#######################################" "#######################################\n\n" "%s: X Error! PLEASE REPORT THIS BUG.\n", blurb()); for (i = 0; i < si->nscreens; i++) { saver_screen_info *ssi = &si->screens[i]; fprintf (real_stderr, "%s: screen %d/%d: 0x%x, 0x%x, 0x%x\n", blurb(), ssi->real_screen_number, ssi->number, (unsigned int) RootWindowOfScreen (si->screens[i].screen), (unsigned int) si->screens[i].real_vroot, (unsigned int) si->screens[i].screensaver_window); } fprintf (real_stderr, "\n" "#######################################" "#######################################\n\n"); fatal_p = XmuPrintDefaultErrorMessage (dpy, error, real_stderr); fatal_p = True; /* The only time I've ever seen a supposedly nonfatal error, it has been BadImplementation / Xlib sequence lost, which are in truth pretty damned fatal. */ fprintf (real_stderr, "\n"); if (! fatal_p) fprintf (real_stderr, "%s: nonfatal error.\n\n", blurb()); else { if (si->prefs.xsync_p) { saver_exit (si, -1, "because of synchronous X Error"); } else { #ifdef __GNUC__ __extension__ /* don't warn about "string length is greater than the length ISO C89 compilers are required to support". */ #endif fprintf (real_stderr, "#######################################################################\n" "\n" " If at all possible, please re-run xscreensaver with the command\n" " line arguments `-sync -verbose -log log.txt', and reproduce this\n" " bug. That will cause xscreensaver to dump a `core' file to the\n" " current directory. Please include the stack trace from that core\n" " file in your bug report. *DO NOT* mail the core file itself! That\n" " won't work. A \"log.txt\" file will also be written. Please *do*\n" " include the complete \"log.txt\" file with your bug report.\n" "\n" " https://www.jwz.org/xscreensaver/bugs.html explains how to create\n" " the most useful bug reports, and how to examine core files.\n" "\n" " The more information you can provide, the better. But please\n" " report this bug, regardless!\n" "\n" "#######################################################################\n" "\n" "\n"); saver_exit (si, -1, 0); } } return 0; } /* This error handler is used only while the X connection is being set up; after we've got a connection, we don't use this handler again. The only reason for having this is so that we can present a more idiot-proof error message than "cannot open display." */ static void startup_ehandler (String name, String type, String class, String defalt, /* one can't even spel properly in this joke of a language */ String *av, Cardinal *ac) { char fmt[512]; String p[10]; saver_info *si = global_si_kludge; /* I hate C so much... */ XrmDatabase *db = XtAppGetErrorDatabase(si->app); *fmt = 0; XtAppGetErrorDatabaseText(si->app, name, type, class, defalt, fmt, sizeof(fmt)-1, *db); fprintf (stderr, "%s: ", blurb()); memset (p, 0, sizeof(p)); if (*ac > countof (p)) *ac = countof (p); memcpy ((char *) p, (char *) av, (*ac) * sizeof(*av)); fprintf (stderr, fmt, /* Did I mention that I hate C? */ p[0], p[1], p[2], p[3], p[4], p[5], p[6], p[7], p[8], p[9]); fprintf (stderr, "\n"); describe_uids (si, stderr); if (si->orig_uid && !strncmp (si->orig_uid, "root/", 5)) { fprintf (stderr, "\n" "%s: This is probably because you're logging in as root. You\n" " shouldn't log in as root: you should log in as a normal user,\n" " and then `su' as needed. If you insist on logging in as\n" " root, you will have to turn off X's security features before\n" " xscreensaver will work.\n" "\n" " Please read the manual and FAQ for more information:\n", blurb()); } else { fprintf (stderr, "\n" "%s: Errors at startup are usually authorization problems.\n" " But you're not logging in as root (good!) so something\n" " else must be wrong. Did you read the manual and the FAQ?\n", blurb()); } fprintf (stderr, "\n" " https://www.jwz.org/xscreensaver/faq.html\n" " https://www.jwz.org/xscreensaver/man.html\n" "\n"); fflush (stderr); fflush (stdout); exit (1); } /* The zillions of initializations. */ /* Set progname, version, etc. This is done very early. */ static void set_version_string (saver_info *si, int *argc, char **argv) { progclass = "XScreenSaver"; /* progname is reset later, after we connect to X. */ progname = strrchr(argv[0], '/'); if (progname) progname++; else progname = argv[0]; if (strlen(progname) > 100) /* keep it short. */ progname[99] = 0; /* The X resource database blows up if argv[0] has a "." in it. */ { char *s = argv[0]; while ((s = strchr (s, '.'))) *s = '_'; } si->version = (char *) malloc (5); memcpy (si->version, screensaver_id + 17, 4); si->version [4] = 0; } /* Initializations that potentially take place as a priveleged user: If the xscreensaver executable is setuid root, then these initializations are run as root, before discarding privileges. */ static void privileged_initialization (saver_info *si, int *argc, char **argv) { #ifndef NO_LOCKING /* before hack_uid() for proper permissions */ lock_priv_init (*argc, argv, si->prefs.verbose_p); #endif /* NO_LOCKING */ hack_uid (si); } /* Figure out what locking mechanisms are supported. */ static void lock_initialization (saver_info *si, int *argc, char **argv) { #ifdef NO_LOCKING si->locking_disabled_p = True; si->nolock_reason = "not compiled with locking support"; #else /* !NO_LOCKING */ /* Finish initializing locking, now that we're out of privileged code. */ if (! lock_init (*argc, argv, si->prefs.verbose_p)) { si->locking_disabled_p = True; si->nolock_reason = "error getting password"; } /* If locking is currently enabled, but the environment indicates that we have been launched as GDM's "Background" program, then disable locking just in case. */ if (!si->locking_disabled_p && getenv ("RUNNING_UNDER_GDM")) { si->locking_disabled_p = True; si->nolock_reason = "running under GDM"; } /* If the server is XDarwin (MacOS X) then disable locking. (X grabs only affect X programs, so you can use Command-Tab to bring any other Mac program to the front, e.g., Terminal.) */ if (!si->locking_disabled_p) { int op = 0, event = 0, error = 0; Bool macos_p = False; #ifdef __APPLE__ /* Disable locking if *running* on Apple hardware, since we have no reliable way to determine whether the server is running on MacOS. Hopefully __APPLE__ means "MacOS" and not "Linux on Mac hardware" but I'm not really sure about that. */ macos_p = True; #endif if (!macos_p) /* This extension exists on the Apple X11 server, but not on earlier versions of the XDarwin server. */ macos_p = XQueryExtension (si->dpy, "Apple-DRI", &op, &event, &error); if (macos_p) { si->locking_disabled_p = True; si->nolock_reason = "Cannot lock securely on MacOS X"; } } /* Like MacOS, locking under Wayland's embedded X11 server does not work. (X11 grabs don't work because the Wayland window manager lives at a higher level than the X11 emulation layer.) */ if (!si->locking_disabled_p && getenv ("WAYLAND_DISPLAY")) { si->locking_disabled_p = True; si->nolock_reason = "Cannot lock securely under Wayland"; } if (si->prefs.debug_p) /* But allow locking anyway in debug mode. */ si->locking_disabled_p = False; #endif /* NO_LOCKING */ } /* Open the connection to the X server, and intern our Atoms. */ static Widget connect_to_server (saver_info *si, int *argc, char **argv) { Widget toplevel_shell; #ifdef HAVE_PUTENV char *d = getenv ("DISPLAY"); if (!d || !*d) { char *ndpy = strdup("DISPLAY=:0.0"); /* if (si->prefs.verbose_p) */ /* sigh, too early to test this... */ fprintf (stderr, "%s: warning: $DISPLAY is not set: defaulting to \"%s\".\n", blurb(), ndpy+8); if (putenv (ndpy)) abort (); /* don't free (ndpy) -- some implementations of putenv (BSD 4.4, glibc 2.0) copy the argument, but some (libc4,5, glibc 2.1.2) do not. So we must leak it (and/or the previous setting). Yay. */ } #endif /* HAVE_PUTENV */ XSetErrorHandler (saver_ehandler); XtAppSetErrorMsgHandler (si->app, startup_ehandler); toplevel_shell = XtAppInitialize (&si->app, progclass, options, XtNumber (options), argc, argv, defaults, 0, 0); XtAppSetErrorMsgHandler (si->app, 0); si->dpy = XtDisplay (toplevel_shell); si->prefs.db = XtDatabase (si->dpy); XtGetApplicationNameAndClass (si->dpy, &progname, &progclass); if(strlen(progname) > 100) /* keep it short. */ progname [99] = 0; db = si->prefs.db; /* resources.c needs this */ XA_VROOT = XInternAtom (si->dpy, "__SWM_VROOT", False); XA_SCREENSAVER = XInternAtom (si->dpy, "SCREENSAVER", False); XA_SCREENSAVER_VERSION = XInternAtom (si->dpy, "_SCREENSAVER_VERSION",False); XA_SCREENSAVER_ID = XInternAtom (si->dpy, "_SCREENSAVER_ID", False); XA_SCREENSAVER_STATUS = XInternAtom (si->dpy, "_SCREENSAVER_STATUS", False); XA_SCREENSAVER_RESPONSE = XInternAtom (si->dpy, "_SCREENSAVER_RESPONSE", False); XA_XSETROOT_ID = XInternAtom (si->dpy, "_XSETROOT_ID", False); XA_ESETROOT_PMAP_ID = XInternAtom (si->dpy, "ESETROOT_PMAP_ID", False); XA_XROOTPMAP_ID = XInternAtom (si->dpy, "_XROOTPMAP_ID", False); XA_NET_WM_USER_TIME = XInternAtom (si->dpy, "_NET_WM_USER_TIME", False); XA_ACTIVATE = XInternAtom (si->dpy, "ACTIVATE", False); XA_DEACTIVATE = XInternAtom (si->dpy, "DEACTIVATE", False); XA_RESTART = XInternAtom (si->dpy, "RESTART", False); XA_CYCLE = XInternAtom (si->dpy, "CYCLE", False); XA_NEXT = XInternAtom (si->dpy, "NEXT", False); XA_PREV = XInternAtom (si->dpy, "PREV", False); XA_SELECT = XInternAtom (si->dpy, "SELECT", False); XA_EXIT = XInternAtom (si->dpy, "EXIT", False); XA_DEMO = XInternAtom (si->dpy, "DEMO", False); XA_PREFS = XInternAtom (si->dpy, "PREFS", False); XA_LOCK = XInternAtom (si->dpy, "LOCK", False); XA_BLANK = XInternAtom (si->dpy, "BLANK", False); XA_THROTTLE = XInternAtom (si->dpy, "THROTTLE", False); XA_UNTHROTTLE = XInternAtom (si->dpy, "UNTHROTTLE", False); return toplevel_shell; } /* Handle the command-line arguments that were not handled for us by Xt. Issue an error message and exit if there are unknown options. */ static void process_command_line (saver_info *si, int *argc, char **argv) { int i; for (i = 1; i < *argc; i++) { if (!strcmp (argv[i], "-debug")) /* no resource for this one, out of paranoia. */ si->prefs.debug_p = True; else if (!strcmp (argv[i], "-h") || !strcmp (argv[i], "-help") || !strcmp (argv[i], "--help")) do_help (si); else { const char *s = argv[i]; fprintf (stderr, "%s: unknown option \"%s\". Try \"-help\".\n", blurb(), s); if (s[0] == '-' && s[1] == '-') s++; if (!strcmp (s, "-activate") || !strcmp (s, "-deactivate") || !strcmp (s, "-cycle") || !strcmp (s, "-next") || !strcmp (s, "-prev") || !strcmp (s, "-exit") || !strcmp (s, "-restart") || !strcmp (s, "-demo") || !strcmp (s, "-prefs") || !strcmp (s, "-preferences") || !strcmp (s, "-lock") || !strcmp (s, "-version") || !strcmp (s, "-time")) { if (!strcmp (s, "-demo") || !strcmp (s, "-prefs")) fprintf (stderr, "\n\ Perhaps you meant to run the `xscreensaver-demo' program instead?\n"); else fprintf (stderr, "\n\ However, `%s' is an option to the `xscreensaver-command' program.\n", s); fprintf (stderr, "\ The `xscreensaver' program is a daemon that runs in the background.\n\ You control a running xscreensaver process by sending it messages\n\ with `xscreensaver-demo' or `xscreensaver-command'.\n\ . See the man pages for details, or check the web page:\n\ https://www.jwz.org/xscreensaver/\n\n"); } exit (1); } } } /* Print out the xscreensaver banner to the tty if applicable; Issue any other warnings that are called for at this point. */ static void print_banner (saver_info *si) { saver_preferences *p = &si->prefs; char *s, year[5]; s = strchr (screensaver_id, '-'); s = strrchr (s, '-'); s++; strncpy (year, s, 4); year[4] = 0; /* This resource gets set some time before the others, so that we know whether to print the banner (and so that the banner gets printed before any resource-database-related error messages.) */ p->verbose_p = (p->debug_p || get_boolean_resource (si->dpy, "verbose", "Boolean")); /* Ditto, for the locking_disabled_p message. */ p->lock_p = get_boolean_resource (si->dpy, "lock", "Boolean"); if (p->verbose_p) fprintf (stderr, "%s %s, copyright (c) 1991-%s " "by Jamie Zawinski .\n", progname, si->version, year); if (p->debug_p) fprintf (stderr, "\n" "%s: Warning: running in DEBUG MODE. Be afraid.\n" "\n" "\tNote that in debug mode, the xscreensaver window will only\n" "\tcover the left half of the screen. (The idea is that you\n" "\tcan still see debugging output in a shell, if you position\n" "\tit on the right side of the screen.)\n" "\n" "\tDebug mode is NOT SECURE. Do not run with -debug in\n" "\tuntrusted environments.\n" "\n", blurb()); if (p->verbose_p && decrepit_p ()) fprintf (stderr, "\n" "*************************************" "**************************************\n" "%s: Warning: this version of xscreensaver is VERY OLD!\n" "%s: Please upgrade! https://www.jwz.org/xscreensaver/\n" "*************************************" "**************************************\n" "\n", blurb(), blurb()); if (p->verbose_p) { if (!si->uid_message || !*si->uid_message) describe_uids (si, stderr); else { if (si->orig_uid && *si->orig_uid) fprintf (stderr, "%s: initial effective uid/gid was %s.\n", blurb(), si->orig_uid); fprintf (stderr, "%s: %s\n", blurb(), si->uid_message); } fprintf (stderr, "%s: in process %lu.\n", blurb(), (unsigned long) getpid()); } } static void print_lock_failure_banner (saver_info *si) { saver_preferences *p = &si->prefs; /* If locking was not able to be initalized for some reason, explain why. (This has to be done after we've read the lock_p resource.) */ if (si->locking_disabled_p) { p->lock_p = False; fprintf (stderr, "%s: locking is disabled (%s).\n", blurb(), si->nolock_reason); if (strstr (si->nolock_reason, "passw")) fprintf (stderr, "%s: does xscreensaver need to be setuid? " "consult the manual.\n", blurb()); else if (strstr (si->nolock_reason, "running as ")) fprintf (stderr, "%s: locking only works when xscreensaver is launched\n" "\t by a normal, non-privileged user (e.g., not \"root\".)\n" "\t See the manual for details.\n", blurb()); } } /* called from screens.c so that all the Xt crud is here. */ void initialize_screen_root_widget (saver_screen_info *ssi) { saver_info *si = ssi->global; if (ssi->toplevel_shell) XtDestroyWidget (ssi->toplevel_shell); ssi->toplevel_shell = XtVaAppCreateShell (progname, progclass, applicationShellWidgetClass, si->dpy, XtNscreen, ssi->screen, XtNvisual, ssi->current_visual, XtNdepth, visual_depth (ssi->screen, ssi->current_visual), NULL); } /* Examine all of the display's screens, and populate the `saver_screen_info' structures. Make sure this is called after hack_environment() sets $PATH. */ static void initialize_per_screen_info (saver_info *si, Widget toplevel_shell) { int i; update_screen_layout (si); /* Check to see whether fading is ever possible -- if any of the screens on the display has a PseudoColor visual, then fading can work (on at least some screens.) If no screen has a PseudoColor visual, then don't bother ever trying to fade, because it will just cause a delay without causing any visible effect. */ for (i = 0; i < si->nscreens; i++) { saver_screen_info *ssi = &si->screens[i]; if (has_writable_cells (ssi->screen, ssi->current_visual) || get_visual (ssi->screen, "PseudoColor", True, False) || get_visual (ssi->screen, "GrayScale", True, False)) { si->fading_possible_p = True; break; } } #ifdef HAVE_XF86VMODE_GAMMA si->fading_possible_p = True; /* if we can gamma fade, go for it */ #endif } /* If any server extensions have been requested, try and initialize them. Issue warnings if requests can't be honored. */ static void initialize_server_extensions (saver_info *si) { saver_preferences *p = &si->prefs; Bool server_has_xidle_extension_p = False; Bool server_has_sgi_saver_extension_p = False; Bool server_has_mit_saver_extension_p = False; Bool system_has_proc_interrupts_p = False; Bool server_has_xinput_extension_p = False; const char *piwhy = 0; si->using_xidle_extension = p->use_xidle_extension; si->using_sgi_saver_extension = p->use_sgi_saver_extension; si->using_mit_saver_extension = p->use_mit_saver_extension; si->using_proc_interrupts = p->use_proc_interrupts; si->using_xinput_extension = p->use_xinput_extension; #ifdef HAVE_XIDLE_EXTENSION { int ev, er; server_has_xidle_extension_p = XidleQueryExtension (si->dpy, &ev, &er); } #endif #ifdef HAVE_SGI_SAVER_EXTENSION server_has_sgi_saver_extension_p = XScreenSaverQueryExtension (si->dpy, &si->sgi_saver_ext_event_number, &si->sgi_saver_ext_error_number); #endif #ifdef HAVE_MIT_SAVER_EXTENSION server_has_mit_saver_extension_p = XScreenSaverQueryExtension (si->dpy, &si->mit_saver_ext_event_number, &si->mit_saver_ext_error_number); #endif #ifdef HAVE_PROC_INTERRUPTS system_has_proc_interrupts_p = query_proc_interrupts_available (si, &piwhy); #endif #ifdef HAVE_XINPUT server_has_xinput_extension_p = query_xinput_extension (si); #endif if (!server_has_xidle_extension_p) si->using_xidle_extension = False; else if (p->verbose_p) { if (si->using_xidle_extension) fprintf (stderr, "%s: using XIDLE extension.\n", blurb()); else fprintf (stderr, "%s: not using server's XIDLE extension.\n", blurb()); } if (!server_has_sgi_saver_extension_p) si->using_sgi_saver_extension = False; else if (p->verbose_p) { if (si->using_sgi_saver_extension) fprintf (stderr, "%s: using SGI SCREEN_SAVER extension.\n", blurb()); else fprintf (stderr, "%s: not using server's SGI SCREEN_SAVER extension.\n", blurb()); } if (!server_has_mit_saver_extension_p) si->using_mit_saver_extension = False; else if (p->verbose_p) { if (si->using_mit_saver_extension) fprintf (stderr, "%s: using lame MIT-SCREEN-SAVER extension.\n", blurb()); else fprintf (stderr, "%s: not using server's lame MIT-SCREEN-SAVER extension.\n", blurb()); } #ifdef HAVE_RANDR if (XRRQueryExtension (si->dpy, &si->randr_event_number, &si->randr_error_number)) { int nscreens = ScreenCount (si->dpy); /* number of *real* screens */ int i; si->using_randr_extension = TRUE; if (p->verbose_p) fprintf (stderr, "%s: selecting RANDR events\n", blurb()); for (i = 0; i < nscreens; i++) # ifdef RRScreenChangeNotifyMask /* randr.h 1.5, 2002/09/29 */ XRRSelectInput (si->dpy, RootWindow (si->dpy, i), RRScreenChangeNotifyMask); # else /* !RRScreenChangeNotifyMask */ /* Xrandr.h 1.4, 2001/06/07 */ XRRScreenChangeSelectInput (si->dpy, RootWindow (si->dpy, i), True); # endif /* !RRScreenChangeNotifyMask */ } # endif /* HAVE_RANDR */ #ifdef HAVE_XINPUT if (!server_has_xinput_extension_p) si->using_xinput_extension = False; else { if (si->using_xinput_extension) init_xinput_extension(si); if (p->verbose_p) { if (si->using_xinput_extension) fprintf (stderr, "%s: selecting events from %d XInputExtension devices.\n", blurb(), si->num_xinput_devices); else fprintf (stderr, "%s: not using XInputExtension.\n", blurb()); } } #endif if (!system_has_proc_interrupts_p) { si->using_proc_interrupts = False; if (p->verbose_p && piwhy) fprintf (stderr, "%s: not using /proc/interrupts: %s.\n", blurb(), piwhy); } else if (p->verbose_p) { if (si->using_proc_interrupts) fprintf (stderr, "%s: consulting /proc/interrupts for keyboard activity.\n", blurb()); else fprintf (stderr, "%s: not consulting /proc/interrupts for keyboard activity.\n", blurb()); } } #ifdef DEBUG_MULTISCREEN static void debug_multiscreen_timer (XtPointer closure, XtIntervalId *id) { saver_info *si = (saver_info *) closure; saver_preferences *p = &si->prefs; if (update_screen_layout (si)) { if (p->verbose_p) { fprintf (stderr, "%s: new layout:\n", blurb()); describe_monitor_layout (si); } resize_screensaver_window (si); } XtAppAddTimeOut (si->app, 1000*4, debug_multiscreen_timer, (XtPointer) si); } #endif /* DEBUG_MULTISCREEN */ /* For the case where we aren't using an server extensions, select user events on all the existing windows, and launch timers to select events on newly-created windows as well. If a server extension is being used, this does nothing. */ static void select_events (saver_info *si) { saver_preferences *p = &si->prefs; int i; if (si->using_xidle_extension || si->using_mit_saver_extension || si->using_sgi_saver_extension) return; if (p->initial_delay) { if (p->verbose_p) { fprintf (stderr, "%s: waiting for %d second%s...", blurb(), (int) p->initial_delay/1000, (p->initial_delay == 1000 ? "" : "s")); fflush (stderr); fflush (stdout); } usleep (p->initial_delay); if (p->verbose_p) fprintf (stderr, " done.\n"); } if (p->verbose_p) { fprintf (stderr, "%s: selecting events on extant windows...", blurb()); fflush (stderr); fflush (stdout); } /* Select events on the root windows of every screen. This also selects for window creation events, so that new subwindows will be noticed. */ for (i = 0; i < si->nscreens; i++) { saver_screen_info *ssi = &si->screens[i]; if (ssi->real_screen_p) start_notice_events_timer (si, RootWindowOfScreen (si->screens[i].screen), False); } if (p->verbose_p) fprintf (stderr, " done.\n"); # ifdef DEBUG_MULTISCREEN if (p->debug_p) debug_multiscreen_timer ((XtPointer) si, 0); # endif } void maybe_reload_init_file (saver_info *si) { saver_preferences *p = &si->prefs; if (init_file_changed_p (p)) { if (p->verbose_p) fprintf (stderr, "%s: file \"%s\" has changed, reloading.\n", blurb(), init_file_name()); load_init_file (si->dpy, p); /* If a server extension is in use, and p->timeout has changed, we need to inform the server of the new timeout. */ disable_builtin_screensaver (si, False); /* If the DPMS settings in the init file have changed, change the settings on the server to match. */ sync_server_dpms_settings (si->dpy, (p->dpms_enabled_p && p->mode != DONT_BLANK), p->dpms_quickoff_p, p->dpms_standby / 1000, p->dpms_suspend / 1000, p->dpms_off / 1000, False); } } /* Loop forever: - wait until the user is idle; - blank the screen; - wait until the user is active; - unblank the screen; - repeat. */ static void main_loop (saver_info *si) { saver_preferences *p = &si->prefs; Bool ok_to_unblank; int i; while (1) { Bool was_locked = False; if (p->verbose_p) fprintf (stderr, "%s: awaiting idleness.\n", blurb()); check_for_leaks ("unblanked A"); sleep_until_idle (si, True); check_for_leaks ("unblanked B"); if (p->verbose_p) { if (si->demoing_p) fprintf (stderr, "%s: demoing %d at %s.\n", blurb(), si->selection_mode, timestring(0)); else fprintf (stderr, "%s: blanking screen at %s.\n", blurb(), timestring(0)); } maybe_reload_init_file (si); if (p->mode == DONT_BLANK) { if (p->verbose_p) fprintf (stderr, "%s: idle with blanking disabled at %s.\n", blurb(), timestring(0)); /* Go around the loop and wait for the next bout of idleness, or for the init file to change, or for a remote command to come in, or something. But, if locked_p is true, go ahead. This can only happen if we're in "disabled" mode but a "lock" clientmessage came in: in that case, we should go ahead and blank/lock the screen. */ if (!si->locked_p) continue; } /* Since we're about to blank the screen, kill the de-race timer, if any. It might still be running if we have unblanked and then re-blanked in a short period (e.g., when using the "next" button in xscreensaver-demo.) */ if (si->de_race_id) { if (p->verbose_p) fprintf (stderr, "%s: stopping de-race timer (%d remaining.)\n", blurb(), si->de_race_ticks); XtRemoveTimeOut (si->de_race_id); si->de_race_id = 0; } /* Now, try to blank. */ if (! blank_screen (si)) { /* We were unable to grab either the keyboard or mouse. This means we did not (and must not) blank the screen. If we were to blank the screen while some other program is holding both the mouse and keyboard grabbed, then we would never be able to un-blank it! We would never see any events, and the display would be wedged. In particular, without that keyboard grab, we will be unable to ever read keypresses on the unlock dialog. You can't unlock if you can't type your password. So, just go around the loop again and wait for the next bout of idleness. (If the user remains idle, we will next try to blank the screen again in no more than 60 seconds.) */ Time retry = 60 * 1000; if (p->timeout < retry) retry = p->timeout; if (p->debug_p) { fprintf (stderr, "%s: DEBUG MODE: unable to grab -- BLANKING ANYWAY.\n", blurb()); } else { fprintf (stderr, "%s: unable to grab keyboard or mouse! Blanking aborted.\n", blurb()); /* Since we were unable to blank, clearly we're not locked, but we might have been prematurely marked as locked by the LOCK ClientMessage. */ if (si->locked_p) set_locked_p (si, False); schedule_wakeup_event (si, retry, p->debug_p); continue; } } for (i = 0; i < si->nscreens; i++) kill_screenhack (&si->screens[i]); raise_window (si, True, True, False); if (si->throttled_p) fprintf (stderr, "%s: not launching hack (throttled.)\n", blurb()); else for (i = 0; i < si->nscreens; i++) spawn_screenhack (&si->screens[i]); /* If we are blanking only, optionally power down monitor right now. */ if (p->mode == BLANK_ONLY && p->dpms_enabled_p && p->dpms_quickoff_p) { sync_server_dpms_settings (si->dpy, True, p->dpms_quickoff_p, p->dpms_standby / 1000, p->dpms_suspend / 1000, p->dpms_off / 1000, False); monitor_power_on (si, False); } /* Don't start the cycle timer in demo mode. */ if (!si->demoing_p && p->cycle) si->cycle_id = XtAppAddTimeOut (si->app, (si->selection_mode /* see comment in cycle_timer() */ ? 1000 * 60 * 60 : p->cycle), cycle_timer, (XtPointer) si); #ifndef NO_LOCKING /* Maybe start locking the screen. */ { Time lock_timeout = p->lock_timeout; if (si->emergency_lock_p && p->lock_p && lock_timeout) { int secs = p->lock_timeout / 1000; if (p->verbose_p) fprintf (stderr, "%s: locking now, instead of waiting for %d:%02d:%02d.\n", blurb(), (secs / (60 * 60)), ((secs / 60) % 60), (secs % 60)); lock_timeout = 0; } si->emergency_lock_p = False; if (!si->demoing_p && /* if not going into demo mode */ p->lock_p && /* and locking is enabled */ !si->locking_disabled_p && /* and locking is possible */ lock_timeout == 0) /* and locking is not timer-deferred */ set_locked_p (si, True); /* then lock right now. */ /* locked_p might be true already because of the above, or because of the LOCK ClientMessage. But if not, and if we're supposed to lock after some time, set up a timer to do so. */ if (p->lock_p && !si->locked_p && lock_timeout > 0) si->lock_id = XtAppAddTimeOut (si->app, lock_timeout, activate_lock_timer, (XtPointer) si); } #endif /* !NO_LOCKING */ ok_to_unblank = True; do { check_for_leaks ("blanked A"); sleep_until_idle (si, False); /* until not idle */ check_for_leaks ("blanked B"); maybe_reload_init_file (si); #ifndef NO_LOCKING /* Maybe unlock the screen. */ if (si->locked_p) { saver_screen_info *ssi = si->default_screen; if (si->locking_disabled_p) abort (); was_locked = True; si->dbox_up_p = True; for (i = 0; i < si->nscreens; i++) suspend_screenhack (&si->screens[i], True); /* suspend */ XUndefineCursor (si->dpy, ssi->screensaver_window); ok_to_unblank = unlock_p (si); si->dbox_up_p = False; XDefineCursor (si->dpy, ssi->screensaver_window, ssi->cursor); for (i = 0; i < si->nscreens; i++) suspend_screenhack (&si->screens[i], False); /* resume */ if (!ok_to_unblank && !screenhack_running_p (si)) { /* If the lock dialog has been dismissed and we're not about to unlock the screen, and there is currently no hack running, then launch one. (There might be no hack running if DPMS had kicked in. But DPMS is off now, so bring back the hack) */ if (si->cycle_id) XtRemoveTimeOut (si->cycle_id); si->cycle_id = 0; cycle_timer ((XtPointer) si, 0); } } #endif /* !NO_LOCKING */ } while (!ok_to_unblank); if (p->verbose_p) fprintf (stderr, "%s: unblanking screen at %s.\n", blurb(), timestring (0)); /* Kill before unblanking, to stop drawing as soon as possible. */ for (i = 0; i < si->nscreens; i++) kill_screenhack (&si->screens[i]); unblank_screen (si); set_locked_p (si, False); si->emergency_lock_p = False; si->demoing_p = 0; si->selection_mode = 0; /* If we're throttled, and the user has explicitly unlocked the screen, then unthrottle. If we weren't locked, then don't unthrottle automatically, because someone might have just bumped the desk... */ if (was_locked) { if (si->throttled_p && p->verbose_p) fprintf (stderr, "%s: unthrottled.\n", blurb()); si->throttled_p = False; } if (si->cycle_id) { XtRemoveTimeOut (si->cycle_id); si->cycle_id = 0; } if (si->lock_id) { XtRemoveTimeOut (si->lock_id); si->lock_id = 0; } /* Since we're unblanked now, break race conditions and make sure we stay that way (see comment in timers.c.) */ if (! si->de_race_id) de_race_timer ((XtPointer) si, 0); } } static void analyze_display (saver_info *si); static void fix_fds (void); int main (int argc, char **argv) { Widget shell; saver_info the_si; saver_info *si = &the_si; saver_preferences *p = &si->prefs; struct passwd *spasswd; int i; /* It turns out that if we do setlocale (LC_ALL, "") here, people running in Japanese locales get font craziness on the password dialog, presumably because it is displaying Japanese characters in a non-Japanese font. However, if we don't call setlocale() at all, then XLookupString() never returns multi-byte UTF-8 characters when people type non-Latin1 characters on the keyboard. The current theory (and at this point, I'm really guessing!) is that using LC_CTYPE instead of LC_ALL will make XLookupString() behave usefully, without having the side-effect of screwing up the fonts on the unlock dialog. See https://bugs.launchpad.net/ubuntu/+source/xscreensaver/+bug/671923 from comment #20 onward. -- jwz, 24-Sep-2011 */ #ifdef ENABLE_NLS if (!setlocale (LC_CTYPE, "")) fprintf (stderr, "%s: warning: could not set default locale\n", progname); bindtextdomain (GETTEXT_PACKAGE, LOCALEDIR); textdomain (GETTEXT_PACKAGE); #endif /* ENABLE_NLS */ memset(si, 0, sizeof(*si)); global_si_kludge = si; /* I hate C so much... */ fix_fds(); # undef ya_rand_init ya_rand_init (0); save_argv (argc, argv); set_version_string (si, &argc, argv); privileged_initialization (si, &argc, argv); hack_environment (si); spasswd = getpwuid(getuid()); if (!spasswd) { fprintf(stderr, "Could not figure out who the current user is!\n"); return 1; } si->user = strdup(spasswd->pw_name ? spasswd->pw_name : "(unknown)"); # ifndef NO_LOCKING si->unlock_cb = gui_auth_conv; si->auth_finished_cb = auth_finished_cb; # endif /* !NO_LOCKING */ shell = connect_to_server (si, &argc, argv); process_command_line (si, &argc, argv); stderr_log_file (si); print_banner (si); load_init_file(si->dpy, p); /* must be before initialize_per_screen_info() */ blurb_timestamp_p = p->timestamp_p; /* kludge */ initialize_per_screen_info (si, shell); /* also sets si->fading_possible_p */ /* We can only issue this warning now. */ if (p->verbose_p && !si->fading_possible_p && (p->fade_p || p->unfade_p)) fprintf (stderr, "%s: there are no PseudoColor or GrayScale visuals.\n" "%s: ignoring the request for fading/unfading.\n", blurb(), blurb()); for (i = 0; i < si->nscreens; i++) { saver_screen_info *ssi = &si->screens[i]; if (ssi->real_screen_p) if (ensure_no_screensaver_running (si->dpy, si->screens[i].screen)) exit (1); } lock_initialization (si, &argc, argv); print_lock_failure_banner (si); if (p->xsync_p) XSynchronize (si->dpy, True); if (p->verbose_p) analyze_display (si); initialize_server_extensions (si); si->blank_time = time ((time_t *) 0); /* must be before ..._window */ initialize_screensaver_window (si); select_events (si); init_sigchld (); disable_builtin_screensaver (si, True); sync_server_dpms_settings (si->dpy, (p->dpms_enabled_p && p->mode != DONT_BLANK), p->dpms_quickoff_p, p->dpms_standby / 1000, p->dpms_suspend / 1000, p->dpms_off / 1000, False); initialize_stderr (si); handle_signals (si); make_splash_dialog (si); main_loop (si); /* doesn't return */ return 0; } static void fix_fds (void) { /* Bad Things Happen if stdin, stdout, and stderr have been closed (as by the `sh incantation "xscreensaver >&- 2>&-"). When you do that, the X connection gets allocated to one of these fds, and then some random library writes to stderr, and random bits get stuffed down the X pipe, causing "Xlib: sequence lost" errors. So, we cause the first three file descriptors to be open to /dev/null if they aren't open to something else already. This must be done before any other files are opened (or the closing of that other file will again free up one of the "magic" first three FDs.) We do this by opening /dev/null three times, and then closing those fds, *unless* any of them got allocated as #0, #1, or #2, in which case we leave them open. Gag. Really, this crap is technically required of *every* X program, if you want it to be robust in the face of "2>&-". */ int fd0 = open ("/dev/null", O_RDWR); int fd1 = open ("/dev/null", O_RDWR); int fd2 = open ("/dev/null", O_RDWR); if (fd0 > 2) close (fd0); if (fd1 > 2) close (fd1); if (fd2 > 2) close (fd2); } /* Processing ClientMessage events. */ static Bool error_handler_hit_p = False; static int ignore_all_errors_ehandler (Display *dpy, XErrorEvent *error) { error_handler_hit_p = True; return 0; } /* Sometimes some systems send us ClientMessage events with bogus atoms in them. We only look up the atom names for printing warning messages, so don't bomb out when it happens... */ static char * XGetAtomName_safe (Display *dpy, Atom atom) { char *result; XErrorHandler old_handler; if (!atom) return 0; XSync (dpy, False); error_handler_hit_p = False; old_handler = XSetErrorHandler (ignore_all_errors_ehandler); result = XGetAtomName (dpy, atom); XSync (dpy, False); XSetErrorHandler (old_handler); XSync (dpy, False); if (error_handler_hit_p) result = 0; if (result) return result; else { char buf[100]; sprintf (buf, "<>", (unsigned int) atom); return strdup (buf); } } static void clientmessage_response (saver_info *si, Window w, Bool error, const char *stderr_msg, const char *protocol_msg) { char *proto; int L; saver_preferences *p = &si->prefs; XErrorHandler old_handler; if (error || p->verbose_p) fprintf (stderr, "%s: %s\n", blurb(), stderr_msg); L = strlen(protocol_msg); proto = (char *) malloc (L + 2); proto[0] = (error ? '-' : '+'); strcpy (proto+1, protocol_msg); L++; /* Ignore all X errors while sending a response to a ClientMessage. Pretty much the only way we could get an error here is if the window we're trying to send the reply on has been deleted, in which case, the sender of the ClientMessage won't see our response anyway. */ XSync (si->dpy, False); error_handler_hit_p = False; old_handler = XSetErrorHandler (ignore_all_errors_ehandler); XChangeProperty (si->dpy, w, XA_SCREENSAVER_RESPONSE, XA_STRING, 8, PropModeReplace, (unsigned char *) proto, L); XSync (si->dpy, False); XSetErrorHandler (old_handler); XSync (si->dpy, False); free (proto); } static void bogus_clientmessage_warning (saver_info *si, XEvent *event) { #if 0 /* Oh, fuck it. GNOME likes to spew random ClientMessages at us all the time. This is presumably indicative of an error in the sender of that ClientMessage: if we're getting it and ignoring it, then it's not reaching the intended recipient. But people complain to me about this all the time ("waaah! xscreensaver is printing to it's stderr and that gets my panties all in a bunch!") And I'm sick of hearing about it. So we'll just ignore these messages and let GNOME go right ahead and continue to stumble along in its malfunction. */ saver_preferences *p = &si->prefs; char *str = XGetAtomName_safe (si->dpy, event->xclient.message_type); Window w = event->xclient.window; char wdesc[255]; int screen = 0; Bool root_p = False; *wdesc = 0; for (screen = 0; screen < si->nscreens; screen++) if (w == si->screens[screen].screensaver_window) { strcpy (wdesc, "xscreensaver"); break; } else if (w == RootWindow (si->dpy, screen)) { strcpy (wdesc, "root"); root_p = True; break; } /* If this ClientMessage was sent to the real root window instead of to the xscreensaver window, then it might be intended for someone else who is listening on the root window (e.g., the window manager). So only print the warning if: we are in debug mode; or if the bogus message was actually sent to one of the xscreensaver-created windows. */ if (root_p && !p->debug_p) return; if (!*wdesc) { XErrorHandler old_handler; XClassHint hint; XWindowAttributes xgwa; memset (&hint, 0, sizeof(hint)); memset (&xgwa, 0, sizeof(xgwa)); XSync (si->dpy, False); old_handler = XSetErrorHandler (ignore_all_errors_ehandler); XGetClassHint (si->dpy, w, &hint); XGetWindowAttributes (si->dpy, w, &xgwa); XSync (si->dpy, False); XSetErrorHandler (old_handler); XSync (si->dpy, False); screen = (xgwa.screen ? screen_number (xgwa.screen) : -1); sprintf (wdesc, "%.20s / %.20s", (hint.res_name ? hint.res_name : "(null)"), (hint.res_class ? hint.res_class : "(null)")); if (hint.res_name) XFree (hint.res_name); if (hint.res_class) XFree (hint.res_class); } fprintf (stderr, "%s: %d: unrecognised ClientMessage \"%s\" received\n", blurb(), screen, (str ? str : "(null)")); fprintf (stderr, "%s: %d: for window 0x%lx (%s)\n", blurb(), screen, (unsigned long) w, wdesc); if (str) XFree (str); #endif /* 0 */ } Bool handle_clientmessage (saver_info *si, XEvent *event, Bool until_idle_p) { saver_preferences *p = &si->prefs; Atom type = 0; Window window = event->xclient.window; /* Preferences might affect our handling of client messages. */ maybe_reload_init_file (si); if (event->xclient.message_type != XA_SCREENSAVER || event->xclient.format != 32) { bogus_clientmessage_warning (si, event); return False; } type = event->xclient.data.l[0]; if (type == XA_ACTIVATE) { if (until_idle_p) { if (p->mode == DONT_BLANK) { clientmessage_response(si, window, True, "ACTIVATE ClientMessage received in DONT_BLANK mode.", "screen blanking is currently disabled."); return False; } clientmessage_response(si, window, False, "ACTIVATE ClientMessage received.", "activating."); si->selection_mode = 0; si->demoing_p = False; if (si->throttled_p && p->verbose_p) fprintf (stderr, "%s: unthrottled.\n", blurb()); si->throttled_p = False; if (si->using_mit_saver_extension || si->using_sgi_saver_extension) { XForceScreenSaver (si->dpy, ScreenSaverActive); return False; } else { return True; } } clientmessage_response(si, window, True, "ClientMessage ACTIVATE received while already active.", "already active."); } else if (type == XA_DEACTIVATE) { # if 0 /* When -deactivate is received while locked, pop up the dialog box instead of just ignoring it. Some people depend on this behavior to be able to unlock by using e.g. a fingerprint reader without also having to click the mouse first. */ if (si->locked_p) { clientmessage_response(si, window, False, "DEACTIVATE ClientMessage received while locked: ignored.", "screen is locked."); } else # endif /* 0 */ { if (! until_idle_p) { if (si->throttled_p && p->verbose_p) fprintf (stderr, "%s: unthrottled.\n", blurb()); si->throttled_p = False; clientmessage_response(si, window, False, "DEACTIVATE ClientMessage received.", "deactivating."); if (si->using_mit_saver_extension || si->using_sgi_saver_extension) { XForceScreenSaver (si->dpy, ScreenSaverReset); return False; } else { return True; } } clientmessage_response(si, window, False, "ClientMessage DEACTIVATE received while inactive: " "resetting idle timer.", "not active: idle timer reset."); reset_timers (si); } } else if (type == XA_CYCLE) { if (! until_idle_p) { clientmessage_response(si, window, False, "CYCLE ClientMessage received.", "cycling."); si->selection_mode = 0; /* 0 means randomize when its time. */ si->demoing_p = False; if (si->throttled_p && p->verbose_p) fprintf (stderr, "%s: unthrottled.\n", blurb()); si->throttled_p = False; if (si->cycle_id) XtRemoveTimeOut (si->cycle_id); si->cycle_id = 0; cycle_timer ((XtPointer) si, 0); return False; } clientmessage_response(si, window, True, "ClientMessage CYCLE received while inactive.", "not active."); } else if (type == XA_NEXT || type == XA_PREV) { clientmessage_response(si, window, False, (type == XA_NEXT ? "NEXT ClientMessage received." : "PREV ClientMessage received."), "cycling."); si->selection_mode = (type == XA_NEXT ? -1 : -2); si->demoing_p = False; if (si->throttled_p && p->verbose_p) fprintf (stderr, "%s: unthrottled.\n", blurb()); si->throttled_p = False; if (! until_idle_p) { if (si->cycle_id) XtRemoveTimeOut (si->cycle_id); si->cycle_id = 0; cycle_timer ((XtPointer) si, 0); } else return True; } else if (type == XA_SELECT) { char buf [255]; char buf2 [255]; long which = event->xclient.data.l[1]; if (p->mode == DONT_BLANK) { clientmessage_response(si, window, True, "SELECT ClientMessage received in DONT_BLANK mode.", "screen blanking is currently disabled."); return False; } sprintf (buf, "SELECT %ld ClientMessage received.", which); sprintf (buf2, "activating (%ld).", which); clientmessage_response (si, window, False, buf, buf2); if (which < 0) which = 0; /* 0 == "random" */ si->selection_mode = which; si->demoing_p = False; if (si->throttled_p && p->verbose_p) fprintf (stderr, "%s: unthrottled.\n", blurb()); si->throttled_p = False; if (! until_idle_p) { if (si->cycle_id) XtRemoveTimeOut (si->cycle_id); si->cycle_id = 0; cycle_timer ((XtPointer) si, 0); } else return True; } else if (type == XA_EXIT) { /* Ignore EXIT message if the screen is locked. */ if (until_idle_p || !si->locked_p) { clientmessage_response (si, window, False, "EXIT ClientMessage received.", "exiting."); if (! until_idle_p) { int i; for (i = 0; i < si->nscreens; i++) kill_screenhack (&si->screens[i]); unblank_screen (si); XSync (si->dpy, False); } saver_exit (si, 0, 0); } else clientmessage_response (si, window, True, "EXIT ClientMessage received while locked.", "screen is locked."); } else if (type == XA_RESTART) { /* The RESTART message works whether the screensaver is active or not, unless the screen is locked, in which case it doesn't work. */ if (until_idle_p || !si->locked_p) { clientmessage_response (si, window, False, "RESTART ClientMessage received.", "restarting."); if (! until_idle_p) { int i; for (i = 0; i < si->nscreens; i++) kill_screenhack (&si->screens[i]); unblank_screen (si); XSync (si->dpy, False); } restart_process (si); /* does not return */ abort(); } else clientmessage_response (si, window, True, "RESTART ClientMessage received while locked.", "screen is locked."); } else if (type == XA_DEMO) { long arg = event->xclient.data.l[1]; Bool demo_one_hack_p = (arg == 5000); if (demo_one_hack_p) { if (until_idle_p) { long which = event->xclient.data.l[2]; char buf [255]; char buf2 [255]; sprintf (buf, "DEMO %ld ClientMessage received.", which); sprintf (buf2, "demoing (%ld).", which); clientmessage_response (si, window, False, buf, buf2); if (which < 0) which = 0; /* 0 == "random" */ si->selection_mode = which; si->demoing_p = True; if (si->throttled_p && p->verbose_p) fprintf (stderr, "%s: unthrottled.\n", blurb()); si->throttled_p = False; return True; } clientmessage_response (si, window, True, "DEMO ClientMessage received while active.", "already active."); } else { clientmessage_response (si, window, True, "obsolete form of DEMO ClientMessage.", "obsolete form of DEMO ClientMessage."); } } else if (type == XA_PREFS) { clientmessage_response (si, window, True, "the PREFS client-message is obsolete.", "the PREFS client-message is obsolete."); } else if (type == XA_LOCK) { #ifdef NO_LOCKING clientmessage_response (si, window, True, "not compiled with support for locking.", "locking not enabled."); #else /* !NO_LOCKING */ if (si->locking_disabled_p) clientmessage_response (si, window, True, "LOCK ClientMessage received, but locking is disabled.", "locking not enabled."); else if (si->locked_p) clientmessage_response (si, window, True, "LOCK ClientMessage received while already locked.", "already locked."); else { char buf [255]; char *response = (until_idle_p ? "activating and locking." : "locking."); sprintf (buf, "LOCK ClientMessage received; %s", response); clientmessage_response (si, window, False, buf, response); /* Note that this leaves things in a slightly inconsistent state: we are blanked but not locked. And blanking might actually fail if we can't get the grab. */ set_locked_p (si, True); /* Have to set the time or xscreensaver-command doesn't report the LOCK state change. */ si->blank_time = time ((time_t *) 0); si->selection_mode = 0; si->demoing_p = False; if (si->lock_id) /* we're doing it now, so lose the timeout */ { XtRemoveTimeOut (si->lock_id); si->lock_id = 0; } if (until_idle_p) { if (si->using_mit_saver_extension || si->using_sgi_saver_extension) { XForceScreenSaver (si->dpy, ScreenSaverActive); return False; } else { return True; } } } #endif /* !NO_LOCKING */ } else if (type == XA_THROTTLE) { /* The THROTTLE command is deprecated -- it predates the XDPMS extension. Instead of using -throttle, users should instead just power off the monitor (e.g., "xset dpms force off".) In a few minutes, xscreensaver will notice that the monitor is off, and cease running hacks. */ if (si->throttled_p) clientmessage_response (si, window, True, "THROTTLE ClientMessage received, but " "already throttled.", "already throttled."); else { char buf [255]; char *response = "throttled."; si->throttled_p = True; si->selection_mode = 0; si->demoing_p = False; sprintf (buf, "THROTTLE ClientMessage received; %s", response); clientmessage_response (si, window, False, buf, response); if (! until_idle_p) { if (si->cycle_id) XtRemoveTimeOut (si->cycle_id); si->cycle_id = 0; cycle_timer ((XtPointer) si, 0); } } } else if (type == XA_UNTHROTTLE) { if (! si->throttled_p) clientmessage_response (si, window, True, "UNTHROTTLE ClientMessage received, but " "not throttled.", "not throttled."); else { char buf [255]; char *response = "unthrottled."; si->throttled_p = False; si->selection_mode = 0; si->demoing_p = False; sprintf (buf, "UNTHROTTLE ClientMessage received; %s", response); clientmessage_response (si, window, False, buf, response); if (! until_idle_p) { if (si->cycle_id) XtRemoveTimeOut (si->cycle_id); si->cycle_id = 0; cycle_timer ((XtPointer) si, 0); } } } else { char buf [1024]; char *str; str = XGetAtomName_safe (si->dpy, type); if (str) { if (strlen (str) > 80) strcpy (str+70, "..."); sprintf (buf, "unrecognised screensaver ClientMessage %s received.", str); free (str); } else { sprintf (buf, "unrecognised screensaver ClientMessage 0x%x received.", (unsigned int) event->xclient.data.l[0]); } clientmessage_response (si, window, True, buf, buf); } return False; } /* Some random diagnostics printed in -verbose mode. */ static void analyze_display (saver_info *si) { int i, j; static struct { const char *name; const char *desc; Bool useful_p; Status (*version_fn) (Display *, int *majP, int *minP); } exts[] = { { "SCREEN_SAVER", /* underscore */ "SGI Screen-Saver", # ifdef HAVE_SGI_SAVER_EXTENSION True, 0 # else False, 0 # endif }, { "SCREEN-SAVER", /* dash */ "SGI Screen-Saver", # ifdef HAVE_SGI_SAVER_EXTENSION True, 0 # else False, 0 # endif }, { "MIT-SCREEN-SAVER", "MIT Screen-Saver", # ifdef HAVE_MIT_SAVER_EXTENSION True, XScreenSaverQueryVersion # else False, 0 # endif }, { "XIDLE", "XIdle", # ifdef HAVE_XIDLE_EXTENSION True, 0 # else False, 0 # endif }, { "SGI-VIDEO-CONTROL", "SGI Video-Control", # ifdef HAVE_SGI_VC_EXTENSION True, XSGIvcQueryVersion # else False, 0 # endif }, { "READDISPLAY", "SGI Read-Display", # ifdef HAVE_READ_DISPLAY_EXTENSION True, XReadDisplayQueryVersion # else False, 0 # endif }, { "MIT-SHM", "Shared Memory", # ifdef HAVE_XSHM_EXTENSION True, (Status (*) (Display*,int*,int*)) XShmQueryVersion /* 4 args */ # else False, 0 # endif }, { "DOUBLE-BUFFER", "Double-Buffering", # ifdef HAVE_DOUBLE_BUFFER_EXTENSION True, XdbeQueryExtension # else False, 0 # endif }, { "DPMS", "Power Management", # ifdef HAVE_DPMS_EXTENSION True, DPMSGetVersion # else False, 0 # endif }, { "GLX", "GLX", # ifdef HAVE_GL True, 0 # else False, 0 # endif }, { "XFree86-VidModeExtension", "XF86 Video-Mode", # ifdef HAVE_XF86VMODE True, XF86VidModeQueryVersion # else False, 0 # endif }, { "XC-VidModeExtension", "XC Video-Mode", # ifdef HAVE_XF86VMODE True, XF86VidModeQueryVersion # else False, 0 # endif }, { "XFree86-MISC", "XF86 Misc", # ifdef HAVE_XF86MISCSETGRABKEYSSTATE True, XF86MiscQueryVersion # else False, 0 # endif }, { "XC-MISC", "XC Misc", # ifdef HAVE_XF86MISCSETGRABKEYSSTATE True, XF86MiscQueryVersion # else False, 0 # endif }, { "XINERAMA", "Xinerama", # ifdef HAVE_XINERAMA True, XineramaQueryVersion # else False, 0 # endif }, { "RANDR", "Resize-and-Rotate", # ifdef HAVE_RANDR True, XRRQueryVersion # else False, 0 # endif }, { "DRI", "DRI", True, 0 }, { "NV-CONTROL", "NVidia", True, 0 }, { "NV-GLX", "NVidia GLX", True, 0 }, { "Apple-DRI", "Apple-DRI (XDarwin)", True, 0 }, { "XInputExtension", "XInput", True, 0 }, }; fprintf (stderr, "%s: running on display \"%s\"\n", blurb(), DisplayString(si->dpy)); fprintf (stderr, "%s: vendor is %s, %d.\n", blurb(), ServerVendor(si->dpy), VendorRelease(si->dpy)); fprintf (stderr, "%s: useful extensions:\n", blurb()); for (i = 0; i < countof(exts); i++) { int op = 0, event = 0, error = 0; char buf [255]; int maj = 0, min = 0; int dummy1, dummy2, dummy3; int j; /* Most of the extension version functions take 3 args, writing results into args 2 and 3, but some take more. We only ever care about the first two results, but we pass in three extra pointers just in case. */ Status (*version_fn_2) (Display*,int*,int*,int*,int*,int*) = (Status (*) (Display*,int*,int*,int*,int*,int*)) exts[i].version_fn; if (!XQueryExtension (si->dpy, exts[i].name, &op, &event, &error)) continue; sprintf (buf, "%s: ", blurb()); j = strlen (buf); strcat (buf, exts[i].desc); if (!version_fn_2) ; else if (version_fn_2 (si->dpy, &maj, &min, &dummy1, &dummy2, &dummy3)) sprintf (buf+strlen(buf), " (%d.%d)", maj, min); else strcat (buf, " (unavailable)"); if (!exts[i].useful_p) strcat (buf, " (disabled at compile time)"); fprintf (stderr, "%s\n", buf); } for (i = 0; i < si->nscreens; i++) { saver_screen_info *ssi = &si->screens[i]; unsigned long colormapped_depths = 0; unsigned long non_mapped_depths = 0; XVisualInfo vi_in, *vi_out; int out_count; if (!ssi->real_screen_p) continue; vi_in.screen = ssi->real_screen_number; vi_out = XGetVisualInfo (si->dpy, VisualScreenMask, &vi_in, &out_count); if (!vi_out) continue; for (j = 0; j < out_count; j++) { if (vi_out[j].depth >= 32) continue; if (vi_out[j].class == PseudoColor) colormapped_depths |= (1 << vi_out[j].depth); else non_mapped_depths |= (1 << vi_out[j].depth); } XFree ((char *) vi_out); if (colormapped_depths) { fprintf (stderr, "%s: screen %d colormapped depths:", blurb(), ssi->real_screen_number); for (j = 0; j < 32; j++) if (colormapped_depths & (1 << j)) fprintf (stderr, " %d", j); fprintf (stderr, ".\n"); } if (non_mapped_depths) { fprintf (stderr, "%s: screen %d non-colormapped depths:", blurb(), ssi->real_screen_number); for (j = 0; j < 32; j++) if (non_mapped_depths & (1 << j)) fprintf (stderr, " %d", j); fprintf (stderr, ".\n"); } } describe_monitor_layout (si); } Bool display_is_on_console_p (saver_info *si) { Bool not_on_console = True; char *dpystr = DisplayString (si->dpy); char *tail = (char *) strchr (dpystr, ':'); if (! tail || strncmp (tail, ":0", 2)) not_on_console = True; else { char dpyname[255], localname[255]; strncpy (dpyname, dpystr, tail-dpystr); dpyname [tail-dpystr] = 0; if (!*dpyname || !strcmp(dpyname, "unix") || !strcmp(dpyname, "localhost")) not_on_console = False; else if (gethostname (localname, sizeof (localname))) not_on_console = True; /* can't find hostname? */ else if (!strncmp (dpyname, "/tmp/launch-", 12)) /* MacOS X launchd */ not_on_console = False; else { /* We have to call gethostbyname() on the result of gethostname() because the two aren't guarenteed to be the same name for the same host: on some losing systems, one is a FQDN and the other is not. Here in the wide wonderful world of Unix it's rocket science to obtain the local hostname in a portable fashion. And don't forget, gethostbyname() reuses the structure it returns, so we have to copy the fucker before calling it again. Thank you master, may I have another. */ struct hostent *h = gethostbyname (dpyname); if (!h) not_on_console = True; else { char hn [255]; struct hostent *l; strcpy (hn, h->h_name); l = gethostbyname (localname); not_on_console = (!l || !!(strcmp (l->h_name, hn))); } } } return !not_on_console; } /* Do a little bit of heap introspection... */ void check_for_leaks (const char *where) { #if defined(HAVE_SBRK) && defined(LEAK_PARANOIA) static unsigned long last_brk = 0; int b = (unsigned long) sbrk(0); if (last_brk && last_brk < b) fprintf (stderr, "%s: %s: brk grew by %luK.\n", blurb(), where, (((b - last_brk) + 1023) / 1024)); last_brk = b; #endif /* HAVE_SBRK */ } xscreensaver-5.36/driver/windows.c000644 000767 000024 00000162251 12701612240 017271 0ustar00jwzstaff000000 000000 /* windows.c --- turning the screen black; dealing with visuals, virtual roots. * xscreensaver, Copyright (c) 1991-2014 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. */ #ifdef HAVE_CONFIG_H # include "config.h" #endif #ifdef VMS # include /* for getpid() */ # include "vms-gtod.h" /* for gettimeofday() */ #endif /* VMS */ #ifndef VMS # include /* for getpwuid() */ #else /* VMS */ # include "vms-pwd.h" #endif /* VMS */ #ifdef HAVE_UNAME # include /* for uname() */ #endif /* HAVE_UNAME */ #include /* #include / * for CARD32 */ #include #include /* for XSetClassHint() */ #include #include /* for time() */ #include /* for the signal names */ #include #include /* You might think that to store an array of 32-bit quantities onto a server-side property, you would pass an array of 32-bit data quantities into XChangeProperty(). You would be wrong. You have to use an array of longs, even if long is 64 bits (using 32 of each 64.) */ typedef long PROP32; #ifdef HAVE_MIT_SAVER_EXTENSION # include #endif /* HAVE_MIT_SAVER_EXTENSION */ #ifdef HAVE_XF86VMODE # include #endif /* HAVE_XF86VMODE */ #ifdef HAVE_XINERAMA # include #endif /* HAVE_XINERAMA */ /* This file doesn't need the Xt headers, so stub these types out... */ #undef XtPointer #define XtAppContext void* #define XrmDatabase void* #define XtIntervalId void* #define XtPointer void* #define Widget void* #include "xscreensaver.h" #include "visual.h" #include "fade.h" extern int kill (pid_t, int); /* signal() is in sys/signal.h... */ Atom XA_VROOT, XA_XSETROOT_ID, XA_ESETROOT_PMAP_ID, XA_XROOTPMAP_ID; Atom XA_NET_WM_USER_TIME; Atom XA_SCREENSAVER, XA_SCREENSAVER_VERSION, XA_SCREENSAVER_ID; Atom XA_SCREENSAVER_STATUS; extern saver_info *global_si_kludge; /* I hate C so much... */ static void maybe_transfer_grabs (saver_screen_info *ssi, Window old_w, Window new_w, int new_screen); #define ALL_POINTER_EVENTS \ (ButtonPressMask | ButtonReleaseMask | EnterWindowMask | \ LeaveWindowMask | PointerMotionMask | PointerMotionHintMask | \ Button1MotionMask | Button2MotionMask | Button3MotionMask | \ Button4MotionMask | Button5MotionMask | ButtonMotionMask) static const char * grab_string(int status) { switch (status) { case GrabSuccess: return "GrabSuccess"; case AlreadyGrabbed: return "AlreadyGrabbed"; case GrabInvalidTime: return "GrabInvalidTime"; case GrabNotViewable: return "GrabNotViewable"; case GrabFrozen: return "GrabFrozen"; default: { static char foo[255]; sprintf(foo, "unknown status: %d", status); return foo; } } } static int grab_kbd(saver_info *si, Window w, int screen_no) { saver_preferences *p = &si->prefs; int status = XGrabKeyboard (si->dpy, w, True, /* I don't really understand Sync vs Async, but these seem to work... */ GrabModeSync, GrabModeAsync, CurrentTime); if (status == GrabSuccess) { si->keyboard_grab_window = w; si->keyboard_grab_screen = screen_no; } if (p->verbose_p) fprintf(stderr, "%s: %d: grabbing keyboard on 0x%lx... %s.\n", blurb(), screen_no, (unsigned long) w, grab_string(status)); return status; } static int grab_mouse (saver_info *si, Window w, Cursor cursor, int screen_no) { saver_preferences *p = &si->prefs; int status = XGrabPointer (si->dpy, w, True, ALL_POINTER_EVENTS, GrabModeAsync, GrabModeAsync, w, cursor, CurrentTime); if (status == GrabSuccess) { si->mouse_grab_window = w; si->mouse_grab_screen = screen_no; } if (p->verbose_p) fprintf(stderr, "%s: %d: grabbing mouse on 0x%lx... %s.\n", blurb(), screen_no, (unsigned long) w, grab_string(status)); return status; } static void ungrab_kbd(saver_info *si) { saver_preferences *p = &si->prefs; XUngrabKeyboard(si->dpy, CurrentTime); if (p->verbose_p) fprintf(stderr, "%s: %d: ungrabbing keyboard (was 0x%lx).\n", blurb(), si->keyboard_grab_screen, (unsigned long) si->keyboard_grab_window); si->keyboard_grab_window = 0; } static void ungrab_mouse(saver_info *si) { saver_preferences *p = &si->prefs; XUngrabPointer(si->dpy, CurrentTime); if (p->verbose_p) fprintf(stderr, "%s: %d: ungrabbing mouse (was 0x%lx).\n", blurb(), si->mouse_grab_screen, (unsigned long) si->mouse_grab_window); si->mouse_grab_window = 0; } /* Apparently there is this program called "rdesktop" which is a windows terminal server client for Unix. It would seem that this program holds the keyboard GRABBED the whole time it has focus! This is, of course, completely idiotic: the whole point of grabbing is to get events when you do *not* have focus, so grabbing *only when* you have focus is completely redundant -- unless your goal is to make xscreensaver not able to ever lock the screen when your program is running. If xscreensaver blanks while rdesktop still has a keyboard grab, then when we try to prompt for the password, we won't get the characters: they'll be typed into rdesktop. Perhaps rdesktop will release its keyboard grab if it loses focus? What the hell, let's give it a try. If we fail to grab the keyboard four times in a row, we forcibly set focus to "None" and try four more times. (We don't touch focus unless we're already having a hard time getting a grab.) */ static void nuke_focus (saver_info *si, int screen_no) { saver_preferences *p = &si->prefs; Window focus = 0; int rev = 0; XGetInputFocus (si->dpy, &focus, &rev); if (p->verbose_p) { char w[255], r[255]; if (focus == PointerRoot) strcpy (w, "PointerRoot"); else if (focus == None) strcpy (w, "None"); else sprintf (w, "0x%lx", (unsigned long) focus); if (rev == RevertToParent) strcpy (r, "RevertToParent"); else if (rev == RevertToPointerRoot) strcpy (r, "RevertToPointerRoot"); else if (rev == RevertToNone) strcpy (r, "RevertToNone"); else sprintf (r, "0x%x", rev); fprintf (stderr, "%s: %d: removing focus from %s / %s.\n", blurb(), screen_no, w, r); } XSetInputFocus (si->dpy, None, RevertToNone, CurrentTime); XSync (si->dpy, False); } static void ungrab_keyboard_and_mouse (saver_info *si) { ungrab_mouse (si); ungrab_kbd (si); } static Bool grab_keyboard_and_mouse (saver_info *si, Window window, Cursor cursor, int screen_no) { Status mstatus = 0, kstatus = 0; int i; int retries = 4; Bool focus_fuckus = False; AGAIN: for (i = 0; i < retries; i++) { XSync (si->dpy, False); kstatus = grab_kbd (si, window, screen_no); if (kstatus == GrabSuccess) break; /* else, wait a second and try to grab again. */ sleep (1); } if (kstatus != GrabSuccess) { fprintf (stderr, "%s: couldn't grab keyboard! (%s)\n", blurb(), grab_string(kstatus)); if (! focus_fuckus) { focus_fuckus = True; nuke_focus (si, screen_no); goto AGAIN; } } for (i = 0; i < retries; i++) { XSync (si->dpy, False); mstatus = grab_mouse (si, window, cursor, screen_no); if (mstatus == GrabSuccess) break; /* else, wait a second and try to grab again. */ sleep (1); } if (mstatus != GrabSuccess) fprintf (stderr, "%s: couldn't grab pointer! (%s)\n", blurb(), grab_string(mstatus)); /* When should we allow blanking to proceed? The current theory is that a keyboard grab is mandatory; a mouse grab is optional. - If we don't have a keyboard grab, then we won't be able to read a password to unlock, so the kbd grab is mandatory. (We can't conditionalize this on locked_p, because someone might run "xscreensaver-command -lock" at any time.) - If we don't have a mouse grab, then we might not see mouse clicks as a signal to unblank -- but we will still see kbd activity, so that's not a disaster. It has been suggested that we should allow blanking if locking is disabled, and we have a mouse grab but no keyboard grab (that is: kstatus != GrabSuccess && mstatus == GrabSuccess && si->locking_disabled_p) That would allow screen blanking (but not locking) while the gdm login screen had the keyboard grabbed, but one would have to use the mouse to unblank. Keyboard characters would go to the gdm login field without unblanking. I have not made this change because I'm not completely convinced it is a safe thing to do. */ if (kstatus != GrabSuccess) /* Do not blank without a kbd grab. */ { /* If we didn't get both grabs, release the one we did get. */ ungrab_keyboard_and_mouse (si); return False; } return True; /* Grab is good, go ahead and blank. */ } int move_mouse_grab (saver_info *si, Window to, Cursor cursor, int to_screen_no) { Window old = si->mouse_grab_window; if (old == 0) return grab_mouse (si, to, cursor, to_screen_no); else { saver_preferences *p = &si->prefs; int status; XSync (si->dpy, False); XGrabServer (si->dpy); /* ############ DANGER! */ XSync (si->dpy, False); if (p->verbose_p) fprintf(stderr, "%s: grabbing server...\n", blurb()); ungrab_mouse (si); status = grab_mouse (si, to, cursor, to_screen_no); if (status != GrabSuccess) /* Augh! */ { sleep (1); /* Note dramatic evil of sleeping with server grabbed. */ XSync (si->dpy, False); status = grab_mouse (si, to, cursor, to_screen_no); } if (status != GrabSuccess) /* Augh! Try to get the old one back... */ grab_mouse (si, old, cursor, to_screen_no); XUngrabServer (si->dpy); XSync (si->dpy, False); /* ###### (danger over) */ if (p->verbose_p) fprintf(stderr, "%s: ungrabbing server.\n", blurb()); return status; } } /* Prints an error message to stderr and returns True if there is another xscreensaver running already. Silently returns False otherwise. */ Bool ensure_no_screensaver_running (Display *dpy, Screen *screen) { Bool status = 0; int i; Window root = RootWindowOfScreen (screen); Window root2, parent, *kids; unsigned int nkids; XErrorHandler old_handler = XSetErrorHandler (BadWindow_ehandler); if (! XQueryTree (dpy, root, &root2, &parent, &kids, &nkids)) abort (); if (root != root2) abort (); if (parent) abort (); for (i = 0; i < nkids; i++) { Atom type; int format; unsigned long nitems, bytesafter; unsigned char *version; if (XGetWindowProperty (dpy, kids[i], XA_SCREENSAVER_VERSION, 0, 1, False, XA_STRING, &type, &format, &nitems, &bytesafter, &version) == Success && type != None) { unsigned char *id; if (XGetWindowProperty (dpy, kids[i], XA_SCREENSAVER_ID, 0, 512, False, XA_STRING, &type, &format, &nitems, &bytesafter, &id) != Success || type == None) id = (unsigned char *) "???"; fprintf (stderr, "%s: already running on display %s (window 0x%x)\n from process %s.\n", blurb(), DisplayString (dpy), (int) kids [i], (char *) id); status = True; } else if (XGetWindowProperty (dpy, kids[i], XA_WM_COMMAND, 0, 128, False, XA_STRING, &type, &format, &nitems, &bytesafter, &version) == Success && type != None && !strcmp ((char *) version, "gnome-screensaver")) { fprintf (stderr, "%s: \"%s\" is already running on display %s (window 0x%x)\n", blurb(), (char *) version, DisplayString (dpy), (int) kids [i]); status = True; break; } } if (kids) XFree ((char *) kids); XSync (dpy, False); XSetErrorHandler (old_handler); return status; } /* Virtual-root hackery */ #ifdef _VROOT_H_ ERROR! You must not include vroot.h in this file. #endif static void store_vroot_property (Display *dpy, Window win, Window value) { #if 0 if (p->verbose_p) fprintf (stderr, "%s: storing XA_VROOT = 0x%x (%s) = 0x%x (%s)\n", blurb(), win, (win == screensaver_window ? "ScreenSaver" : (win == real_vroot ? "VRoot" : (win == real_vroot_value ? "Vroot_value" : "???"))), value, (value == screensaver_window ? "ScreenSaver" : (value == real_vroot ? "VRoot" : (value == real_vroot_value ? "Vroot_value" : "???")))); #endif XChangeProperty (dpy, win, XA_VROOT, XA_WINDOW, 32, PropModeReplace, (unsigned char *) &value, 1); } static void remove_vroot_property (Display *dpy, Window win) { #if 0 if (p->verbose_p) fprintf (stderr, "%s: removing XA_VROOT from 0x%x (%s)\n", blurb(), win, (win == screensaver_window ? "ScreenSaver" : (win == real_vroot ? "VRoot" : (win == real_vroot_value ? "Vroot_value" : "???")))); #endif XDeleteProperty (dpy, win, XA_VROOT); } static Bool safe_XKillClient (Display *dpy, XID id); static void kill_xsetroot_data_1 (Display *dpy, Window window, Atom prop, const char *atom_name, Bool verbose_p) { Atom type; int format; unsigned long nitems, bytesafter; unsigned char *dataP = 0; /* If the user has been using xv or xsetroot as a screensaver (to display an image on the screensaver window, as a kind of slideshow) then the pixmap and its associated color cells have been put in RetainPermanent CloseDown mode. Since we're not destroying the xscreensaver window, but merely unmapping it, we need to free these resources or those colormap cells will stay allocated while the screensaver is off. (We could just delete the screensaver window and recreate it later, but that could cause other problems.) This code does an atomic read-and- delete of the _XSETROOT_ID property, and if it held a pixmap, then we cause the RetainPermanent resources of the client which created it (and which no longer exists) to be freed. Update: it seems that Gnome and KDE do this same trick, but with the properties "ESETROOT_PMAP_ID" and/or "_XROOTPMAP_ID" instead of "_XSETROOT_ID". So, we'll kill those too. */ if (XGetWindowProperty (dpy, window, prop, 0, 1, True, AnyPropertyType, &type, &format, &nitems, &bytesafter, &dataP) == Success && type != None) { Pixmap *pixP = (Pixmap *) dataP; if (pixP && *pixP && type == XA_PIXMAP && format == 32 && nitems == 1 && bytesafter == 0) { if (verbose_p) fprintf (stderr, "%s: destroying %s data (0x%lX).\n", blurb(), atom_name, *pixP); safe_XKillClient (dpy, *pixP); } else fprintf (stderr, "%s: deleted unrecognised %s property: \n" "\t%lu, %lu; type: %lu, format: %d, " "nitems: %lu, bytesafter %ld\n", blurb(), atom_name, (unsigned long) pixP, (pixP ? *pixP : 0), type, format, nitems, bytesafter); } } static void kill_xsetroot_data (Display *dpy, Window w, Bool verbose_p) { kill_xsetroot_data_1 (dpy, w, XA_XSETROOT_ID, "_XSETROOT_ID", verbose_p); kill_xsetroot_data_1 (dpy, w, XA_ESETROOT_PMAP_ID, "ESETROOT_PMAP_ID", verbose_p); kill_xsetroot_data_1 (dpy, w, XA_XROOTPMAP_ID, "_XROOTPMAP_ID", verbose_p); } static void save_real_vroot (saver_screen_info *ssi) { saver_info *si = ssi->global; Display *dpy = si->dpy; Screen *screen = ssi->screen; int i; Window root = RootWindowOfScreen (screen); Window root2, parent, *kids; unsigned int nkids; XErrorHandler old_handler; /* It's possible that a window might be deleted between our call to XQueryTree() and our call to XGetWindowProperty(). Don't die if that happens (but just ignore that window, it's not the one we're interested in anyway.) */ XSync (dpy, False); old_handler = XSetErrorHandler (BadWindow_ehandler); XSync (dpy, False); ssi->real_vroot = 0; ssi->real_vroot_value = 0; if (! XQueryTree (dpy, root, &root2, &parent, &kids, &nkids)) abort (); if (root != root2) abort (); if (parent) abort (); for (i = 0; i < nkids; i++) { Atom type; int format; unsigned long nitems, bytesafter; unsigned char *dataP = 0; Window *vrootP; int j; /* Skip this window if it is the xscreensaver window of any other screen (this can happen in the Xinerama case.) */ for (j = 0; j < si->nscreens; j++) { saver_screen_info *ssi2 = &si->screens[j]; if (kids[i] == ssi2->screensaver_window) goto SKIP; } if (XGetWindowProperty (dpy, kids[i], XA_VROOT, 0, 1, False, XA_WINDOW, &type, &format, &nitems, &bytesafter, &dataP) != Success) continue; if (! dataP) continue; vrootP = (Window *) dataP; if (ssi->real_vroot) { if (*vrootP == ssi->screensaver_window) abort (); fprintf (stderr, "%s: more than one virtual root window found (0x%x and 0x%x).\n", blurb(), (int) ssi->real_vroot, (int) kids [i]); exit (1); } ssi->real_vroot = kids [i]; ssi->real_vroot_value = *vrootP; SKIP: ; } XSync (dpy, False); XSetErrorHandler (old_handler); XSync (dpy, False); if (ssi->real_vroot) { remove_vroot_property (si->dpy, ssi->real_vroot); XSync (dpy, False); } XFree ((char *) kids); } static Bool restore_real_vroot_1 (saver_screen_info *ssi) { saver_info *si = ssi->global; saver_preferences *p = &si->prefs; if (p->verbose_p && ssi->real_vroot) fprintf (stderr, "%s: restoring __SWM_VROOT property on the real vroot (0x%lx).\n", blurb(), (unsigned long) ssi->real_vroot); if (ssi->screensaver_window) remove_vroot_property (si->dpy, ssi->screensaver_window); if (ssi->real_vroot) { store_vroot_property (si->dpy, ssi->real_vroot, ssi->real_vroot_value); ssi->real_vroot = 0; ssi->real_vroot_value = 0; /* make sure the property change gets there before this process terminates! We might be doing this because we have intercepted SIGTERM or something. */ XSync (si->dpy, False); return True; } return False; } Bool restore_real_vroot (saver_info *si) { int i; Bool did_any = False; for (i = 0; i < si->nscreens; i++) { saver_screen_info *ssi = &si->screens[i]; if (restore_real_vroot_1 (ssi)) did_any = True; } return did_any; } /* Signal hackery to ensure that the vroot doesn't get left in an inconsistent state */ const char * signal_name(int signal) { switch (signal) { case SIGHUP: return "SIGHUP"; case SIGINT: return "SIGINT"; case SIGQUIT: return "SIGQUIT"; case SIGILL: return "SIGILL"; case SIGTRAP: return "SIGTRAP"; #ifdef SIGABRT case SIGABRT: return "SIGABRT"; #endif case SIGFPE: return "SIGFPE"; case SIGKILL: return "SIGKILL"; case SIGBUS: return "SIGBUS"; case SIGSEGV: return "SIGSEGV"; case SIGPIPE: return "SIGPIPE"; case SIGALRM: return "SIGALRM"; case SIGTERM: return "SIGTERM"; #ifdef SIGSTOP case SIGSTOP: return "SIGSTOP"; #endif #ifdef SIGCONT case SIGCONT: return "SIGCONT"; #endif #ifdef SIGUSR1 case SIGUSR1: return "SIGUSR1"; #endif #ifdef SIGUSR2 case SIGUSR2: return "SIGUSR2"; #endif #ifdef SIGEMT case SIGEMT: return "SIGEMT"; #endif #ifdef SIGSYS case SIGSYS: return "SIGSYS"; #endif #ifdef SIGCHLD case SIGCHLD: return "SIGCHLD"; #endif #ifdef SIGPWR case SIGPWR: return "SIGPWR"; #endif #ifdef SIGWINCH case SIGWINCH: return "SIGWINCH"; #endif #ifdef SIGURG case SIGURG: return "SIGURG"; #endif #ifdef SIGIO case SIGIO: return "SIGIO"; #endif #ifdef SIGVTALRM case SIGVTALRM: return "SIGVTALRM"; #endif #ifdef SIGXCPU case SIGXCPU: return "SIGXCPU"; #endif #ifdef SIGXFSZ case SIGXFSZ: return "SIGXFSZ"; #endif #ifdef SIGDANGER case SIGDANGER: return "SIGDANGER"; #endif default: { static char buf[50]; sprintf(buf, "signal %d\n", signal); return buf; } } } static RETSIGTYPE restore_real_vroot_handler (int sig) { saver_info *si = global_si_kludge; /* I hate C so much... */ signal (sig, SIG_DFL); if (restore_real_vroot (si)) fprintf (real_stderr, "\n%s: %s intercepted, vroot restored.\n", blurb(), signal_name(sig)); kill (getpid (), sig); } static void catch_signal (saver_info *si, int sig, RETSIGTYPE (*handler) (int)) { # ifdef HAVE_SIGACTION struct sigaction a; a.sa_handler = handler; sigemptyset (&a.sa_mask); a.sa_flags = 0; /* On Linux 2.4.9 (at least) we need to tell the kernel to not mask delivery of this signal from inside its handler, or else when we execvp() the process again, it starts up with SIGHUP blocked, meaning that killing it with -HUP only works *once*. You'd think that execvp() would reset all the signal masks, but it doesn't. */ # if defined(SA_NOMASK) a.sa_flags |= SA_NOMASK; # elif defined(SA_NODEFER) a.sa_flags |= SA_NODEFER; # endif if (sigaction (sig, &a, 0) < 0) # else /* !HAVE_SIGACTION */ if (((long) signal (sig, handler)) == -1L) # endif /* !HAVE_SIGACTION */ { char buf [255]; sprintf (buf, "%s: couldn't catch %s", blurb(), signal_name(sig)); perror (buf); saver_exit (si, 1, 0); } } static RETSIGTYPE saver_sighup_handler (int sig); void handle_signals (saver_info *si) { catch_signal (si, SIGHUP, saver_sighup_handler); catch_signal (si, SIGINT, restore_real_vroot_handler); catch_signal (si, SIGQUIT, restore_real_vroot_handler); catch_signal (si, SIGILL, restore_real_vroot_handler); catch_signal (si, SIGTRAP, restore_real_vroot_handler); #ifdef SIGIOT catch_signal (si, SIGIOT, restore_real_vroot_handler); #endif catch_signal (si, SIGABRT, restore_real_vroot_handler); #ifdef SIGEMT catch_signal (si, SIGEMT, restore_real_vroot_handler); #endif catch_signal (si, SIGFPE, restore_real_vroot_handler); catch_signal (si, SIGBUS, restore_real_vroot_handler); catch_signal (si, SIGSEGV, restore_real_vroot_handler); #ifdef SIGSYS catch_signal (si, SIGSYS, restore_real_vroot_handler); #endif catch_signal (si, SIGTERM, restore_real_vroot_handler); #ifdef SIGXCPU catch_signal (si, SIGXCPU, restore_real_vroot_handler); #endif #ifdef SIGXFSZ catch_signal (si, SIGXFSZ, restore_real_vroot_handler); #endif #ifdef SIGDANGER catch_signal (si, SIGDANGER, restore_real_vroot_handler); #endif } static RETSIGTYPE saver_sighup_handler (int sig) { saver_info *si = global_si_kludge; /* I hate C so much... */ /* Re-establish SIGHUP handler */ catch_signal (si, SIGHUP, saver_sighup_handler); fprintf (stderr, "%s: %s received: restarting...\n", blurb(), signal_name(sig)); if (si->screen_blanked_p) { int i; for (i = 0; i < si->nscreens; i++) kill_screenhack (&si->screens[i]); unblank_screen (si); XSync (si->dpy, False); } restart_process (si); /* Does not return */ abort (); } void saver_exit (saver_info *si, int status, const char *dump_core_reason) { saver_preferences *p = &si->prefs; static Bool exiting = False; Bool bugp; Bool vrs; if (exiting) exit(status); exiting = True; vrs = restore_real_vroot (si); emergency_kill_subproc (si); shutdown_stderr (si); if (p->verbose_p && vrs) fprintf (real_stderr, "%s: old vroot restored.\n", blurb()); fflush(real_stdout); #ifdef VMS /* on VMS, 1 is the "normal" exit code instead of 0. */ if (status == 0) status = 1; else if (status == 1) status = -1; #endif bugp = !!dump_core_reason; if (si->prefs.debug_p && !dump_core_reason) dump_core_reason = "because of -debug"; if (dump_core_reason) { /* Note that the Linux man page for setuid() says If uid is different from the old effective uid, the process will be forbidden from leaving core dumps. */ char cwd[4096]; /* should really be PATH_MAX, but who cares. */ cwd[0] = 0; fprintf(real_stderr, "%s: dumping core (%s)\n", blurb(), dump_core_reason); if (bugp) fprintf(real_stderr, "%s: see https://www.jwz.org/xscreensaver/bugs.html\n" "\t\t\tfor bug reporting information.\n\n", blurb()); # if defined(HAVE_GETCWD) if (!getcwd (cwd, sizeof(cwd))) # elif defined(HAVE_GETWD) if (!getwd (cwd)) # endif strcpy(cwd, "unknown."); fprintf (real_stderr, "%s: current directory is %s\n", blurb(), cwd); describe_uids (si, real_stderr); /* Do this to drop a core file, so that we can get a stack trace. */ abort(); } exit (status); } /* Managing the actual screensaver window */ Bool window_exists_p (Display *dpy, Window window) { XErrorHandler old_handler; XWindowAttributes xgwa; xgwa.screen = 0; old_handler = XSetErrorHandler (BadWindow_ehandler); XGetWindowAttributes (dpy, window, &xgwa); XSync (dpy, False); XSetErrorHandler (old_handler); return (xgwa.screen != 0); } static void store_saver_id (saver_screen_info *ssi) { XClassHint class_hints; saver_info *si = ssi->global; unsigned long pid = (unsigned long) getpid (); char buf[20]; struct passwd *p = getpwuid (getuid ()); const char *name, *host; char *id; /* First store the name and class on the window. */ class_hints.res_name = progname; class_hints.res_class = progclass; XSetClassHint (si->dpy, ssi->screensaver_window, &class_hints); XStoreName (si->dpy, ssi->screensaver_window, "screensaver"); /* Then store the xscreensaver version number. */ XChangeProperty (si->dpy, ssi->screensaver_window, XA_SCREENSAVER_VERSION, XA_STRING, 8, PropModeReplace, (unsigned char *) si->version, strlen (si->version)); /* Now store the XSCREENSAVER_ID property, that says what user and host xscreensaver is running as. */ if (p && p->pw_name && *p->pw_name) name = p->pw_name; else if (p) { sprintf (buf, "%lu", (unsigned long) p->pw_uid); name = buf; } else name = "???"; # if defined(HAVE_UNAME) { struct utsname uts; if (uname (&uts) < 0) host = "???"; else host = uts.nodename; } # elif defined(VMS) host = getenv("SYS$NODE"); # else /* !HAVE_UNAME && !VMS */ host = "???"; # endif /* !HAVE_UNAME && !VMS */ id = (char *) malloc (strlen(name) + strlen(host) + 50); sprintf (id, "%lu (%s@%s)", pid, name, host); XChangeProperty (si->dpy, ssi->screensaver_window, XA_SCREENSAVER_ID, XA_STRING, 8, PropModeReplace, (unsigned char *) id, strlen (id)); free (id); } void store_saver_status (saver_info *si) { PROP32 *status; int size = si->nscreens + 2; int i; status = (PROP32 *) calloc (size, sizeof(PROP32)); status[0] = (PROP32) (si->screen_blanked_p || si->locked_p ? (si->locked_p ? XA_LOCK : XA_BLANK) : 0); status[1] = (PROP32) si->blank_time; for (i = 0; i < si->nscreens; i++) { saver_screen_info *ssi = &si->screens[i]; status [2 + i] = ssi->current_hack + 1; } XChangeProperty (si->dpy, RootWindow (si->dpy, 0), /* always screen #0 */ XA_SCREENSAVER_STATUS, XA_INTEGER, 32, PropModeReplace, (unsigned char *) status, size); free (status); } static Bool error_handler_hit_p = False; static int ignore_all_errors_ehandler (Display *dpy, XErrorEvent *error) { error_handler_hit_p = True; return 0; } /* Returns True if successful, False if an X error occurred. We need this because other programs might have done things to our window that will cause XChangeWindowAttributes() to fail: if that happens, we give up, destroy the window, and re-create it. */ static Bool safe_XChangeWindowAttributes (Display *dpy, Window window, unsigned long mask, XSetWindowAttributes *attrs) { XErrorHandler old_handler; XSync (dpy, False); error_handler_hit_p = False; old_handler = XSetErrorHandler (ignore_all_errors_ehandler); XChangeWindowAttributes (dpy, window, mask, attrs); XSync (dpy, False); XSetErrorHandler (old_handler); XSync (dpy, False); return (!error_handler_hit_p); } /* This might not be necessary, but just in case. */ static Bool safe_XConfigureWindow (Display *dpy, Window window, unsigned long mask, XWindowChanges *changes) { XErrorHandler old_handler; XSync (dpy, False); error_handler_hit_p = False; old_handler = XSetErrorHandler (ignore_all_errors_ehandler); XConfigureWindow (dpy, window, mask, changes); XSync (dpy, False); XSetErrorHandler (old_handler); XSync (dpy, False); return (!error_handler_hit_p); } /* This might not be necessary, but just in case. */ static Bool safe_XDestroyWindow (Display *dpy, Window window) { XErrorHandler old_handler; XSync (dpy, False); error_handler_hit_p = False; old_handler = XSetErrorHandler (ignore_all_errors_ehandler); XDestroyWindow (dpy, window); XSync (dpy, False); XSetErrorHandler (old_handler); XSync (dpy, False); return (!error_handler_hit_p); } static Bool safe_XKillClient (Display *dpy, XID id) { XErrorHandler old_handler; XSync (dpy, False); error_handler_hit_p = False; old_handler = XSetErrorHandler (ignore_all_errors_ehandler); XKillClient (dpy, id); XSync (dpy, False); XSetErrorHandler (old_handler); XSync (dpy, False); return (!error_handler_hit_p); } #ifdef HAVE_XF86VMODE Bool safe_XF86VidModeGetViewPort (Display *dpy, int screen, int *xP, int *yP) { Bool result; XErrorHandler old_handler; XSync (dpy, False); error_handler_hit_p = False; old_handler = XSetErrorHandler (ignore_all_errors_ehandler); result = XF86VidModeGetViewPort (dpy, screen, xP, yP); XSync (dpy, False); XSetErrorHandler (old_handler); XSync (dpy, False); return (error_handler_hit_p ? False : result); } /* There is no "safe_XF86VidModeGetModeLine" because it fails with an untrappable I/O error instead of an X error -- so one must call safe_XF86VidModeGetViewPort first, and assume that both have the same error condition. Thank you XFree, may I have another. */ #endif /* HAVE_XF86VMODE */ static void initialize_screensaver_window_1 (saver_screen_info *ssi) { saver_info *si = ssi->global; saver_preferences *p = &si->prefs; Bool install_cmap_p = ssi->install_cmap_p; /* not p->install_cmap_p */ /* This resets the screensaver window as fully as possible, since there's no way of knowing what some random client may have done to us in the meantime. We could just destroy and recreate the window, but that has its own set of problems... */ XColor black; XSetWindowAttributes attrs; unsigned long attrmask; static Bool printed_visual_info = False; /* only print the message once. */ Window horked_window = 0; black.red = black.green = black.blue = 0; if (ssi->cmap == DefaultColormapOfScreen (ssi->screen)) ssi->cmap = 0; if (ssi->current_visual != DefaultVisualOfScreen (ssi->screen)) /* It's not the default visual, so we have no choice but to install. */ install_cmap_p = True; if (install_cmap_p) { if (! ssi->cmap) { ssi->cmap = XCreateColormap (si->dpy, RootWindowOfScreen (ssi->screen), ssi->current_visual, AllocNone); if (! XAllocColor (si->dpy, ssi->cmap, &black)) abort (); ssi->black_pixel = black.pixel; } } else { Colormap def_cmap = DefaultColormapOfScreen (ssi->screen); if (ssi->cmap) { XFreeColors (si->dpy, ssi->cmap, &ssi->black_pixel, 1, 0); if (ssi->cmap != ssi->demo_cmap && ssi->cmap != def_cmap) XFreeColormap (si->dpy, ssi->cmap); } ssi->cmap = def_cmap; ssi->black_pixel = BlackPixelOfScreen (ssi->screen); } attrmask = (CWOverrideRedirect | CWEventMask | CWBackingStore | CWColormap | CWBackPixel | CWBackingPixel | CWBorderPixel); attrs.override_redirect = True; /* When use_mit_saver_extension or use_sgi_saver_extension is true, we won't actually be reading these events during normal operation; but we still need to see Button events for demo-mode to work properly. */ attrs.event_mask = (KeyPressMask | KeyReleaseMask | ButtonPressMask | ButtonReleaseMask | PointerMotionMask); attrs.backing_store = NotUseful; attrs.colormap = ssi->cmap; attrs.background_pixel = ssi->black_pixel; attrs.backing_pixel = ssi->black_pixel; attrs.border_pixel = ssi->black_pixel; if (!p->verbose_p || printed_visual_info) ; else if (ssi->current_visual == DefaultVisualOfScreen (ssi->screen)) { fprintf (stderr, "%s: %d: visual ", blurb(), ssi->number); describe_visual (stderr, ssi->screen, ssi->current_visual, install_cmap_p); } else { fprintf (stderr, "%s: using visual: ", blurb()); describe_visual (stderr, ssi->screen, ssi->current_visual, install_cmap_p); fprintf (stderr, "%s: default visual: ", blurb()); describe_visual (stderr, ssi->screen, DefaultVisualOfScreen (ssi->screen), ssi->install_cmap_p); } printed_visual_info = True; #ifdef HAVE_MIT_SAVER_EXTENSION if (si->using_mit_saver_extension) { XScreenSaverInfo *info; Window root = RootWindowOfScreen (ssi->screen); #if 0 /* This call sets the server screensaver timeouts to what we think they should be (based on the resources and args xscreensaver was started with.) It's important that we do this to sync back up with the server - if we have turned on prematurely, as by an ACTIVATE ClientMessage, then the server may decide to activate the screensaver while it's already active. That's ok for us, since we would know to ignore that ScreenSaverActivate event, but a side effect of this would be that the server would map its saver window (which we then hide again right away) meaning that the bits currently on the screen get blown away. Ugly. */ /* #### Ok, that doesn't work - when we tell the server that the screensaver is "off" it sends us a Deactivate event, which is sensible... but causes the saver to never come on. Hmm. */ disable_builtin_screensaver (si, True); #endif /* 0 */ #if 0 /* #### The MIT-SCREEN-SAVER extension gives us access to the window that the server itself uses for saving the screen. However, using this window in any way, in particular, calling XScreenSaverSetAttributes() as below, tends to make the X server crash. So fuck it, let's try and get along without using it... It's also inconvenient to use this window because it doesn't always exist (though the ID is constant.) So to use this window, we'd have to reimplement the ACTIVATE ClientMessage to tell the *server* to tell *us* to turn on, to cause the window to get created at the right time. Gag. */ XScreenSaverSetAttributes (si->dpy, root, 0, 0, width, height, 0, current_depth, InputOutput, visual, attrmask, &attrs); XSync (si->dpy, False); #endif /* 0 */ info = XScreenSaverAllocInfo (); XScreenSaverQueryInfo (si->dpy, root, info); ssi->server_mit_saver_window = info->window; if (! ssi->server_mit_saver_window) abort (); XFree (info); } #endif /* HAVE_MIT_SAVER_EXTENSION */ if (ssi->screensaver_window) { XWindowChanges changes; unsigned int changesmask = CWX|CWY|CWWidth|CWHeight|CWBorderWidth; changes.x = ssi->x; changes.y = ssi->y; changes.width = ssi->width; changes.height = ssi->height; changes.border_width = 0; if (! (safe_XConfigureWindow (si->dpy, ssi->screensaver_window, changesmask, &changes) && safe_XChangeWindowAttributes (si->dpy, ssi->screensaver_window, attrmask, &attrs))) { horked_window = ssi->screensaver_window; ssi->screensaver_window = 0; } } if (!ssi->screensaver_window) { ssi->screensaver_window = XCreateWindow (si->dpy, RootWindowOfScreen (ssi->screen), ssi->x, ssi->y, ssi->width, ssi->height, 0, ssi->current_depth, InputOutput, ssi->current_visual, attrmask, &attrs); reset_stderr (ssi); if (horked_window) { fprintf (stderr, "%s: someone horked our saver window (0x%lx)! Recreating it...\n", blurb(), (unsigned long) horked_window); maybe_transfer_grabs (ssi, horked_window, ssi->screensaver_window, ssi->number); safe_XDestroyWindow (si->dpy, horked_window); horked_window = 0; } if (p->verbose_p) fprintf (stderr, "%s: %d: saver window is 0x%lx.\n", blurb(), ssi->number, (unsigned long) ssi->screensaver_window); } store_saver_id (ssi); /* store window name and IDs */ if (!ssi->cursor) { Pixmap bit; bit = XCreatePixmapFromBitmapData (si->dpy, ssi->screensaver_window, "\000", 1, 1, BlackPixelOfScreen (ssi->screen), BlackPixelOfScreen (ssi->screen), 1); ssi->cursor = XCreatePixmapCursor (si->dpy, bit, bit, &black, &black, 0, 0); XFreePixmap (si->dpy, bit); } XSetWindowBackground (si->dpy, ssi->screensaver_window, ssi->black_pixel); if (si->demoing_p) XUndefineCursor (si->dpy, ssi->screensaver_window); else XDefineCursor (si->dpy, ssi->screensaver_window, ssi->cursor); } void initialize_screensaver_window (saver_info *si) { int i; for (i = 0; i < si->nscreens; i++) initialize_screensaver_window_1 (&si->screens[i]); } /* Called when the RANDR (Resize and Rotate) extension tells us that the size of the screen has changed while the screen was blanked. Call update_screen_layout() first, then call this to synchronize the size of the saver windows to the new sizes of the screens. */ void resize_screensaver_window (saver_info *si) { saver_preferences *p = &si->prefs; int i; for (i = 0; i < si->nscreens; i++) { saver_screen_info *ssi = &si->screens[i]; XWindowAttributes xgwa; /* Make sure a window exists -- it might not if a monitor was just added for the first time. */ if (! ssi->screensaver_window) { initialize_screensaver_window_1 (ssi); if (p->verbose_p) fprintf (stderr, "%s: %d: newly added window 0x%lx %dx%d+%d+%d\n", blurb(), i, (unsigned long) ssi->screensaver_window, ssi->width, ssi->height, ssi->x, ssi->y); } /* Make sure the window is the right size -- it might not be if the monitor changed resolution, or if a badly-behaved hack screwed with it. */ XGetWindowAttributes (si->dpy, ssi->screensaver_window, &xgwa); if (xgwa.x != ssi->x || xgwa.y != ssi->y || xgwa.width != ssi->width || xgwa.height != ssi->height) { XWindowChanges changes; unsigned int changesmask = CWX|CWY|CWWidth|CWHeight|CWBorderWidth; changes.x = ssi->x; changes.y = ssi->y; changes.width = ssi->width; changes.height = ssi->height; changes.border_width = 0; if (p->verbose_p) fprintf (stderr, "%s: %d: resize 0x%lx from %dx%d+%d+%d to %dx%d+%d+%d\n", blurb(), i, (unsigned long) ssi->screensaver_window, xgwa.width, xgwa.height, xgwa.x, xgwa.y, ssi->width, ssi->height, ssi->x, ssi->y); if (! safe_XConfigureWindow (si->dpy, ssi->screensaver_window, changesmask, &changes)) fprintf (stderr, "%s: %d: someone horked our saver window" " (0x%lx)! Unable to resize it!\n", blurb(), i, (unsigned long) ssi->screensaver_window); } /* Now (if blanked) make sure that it's mapped and running a hack -- it might not be if we just added it. (We also might be re-using an old window that existed for a previous monitor that was removed and re-added.) Note that spawn_screenhack() calls select_visual() which may destroy and re-create the window via initialize_screensaver_window_1(). */ if (si->screen_blanked_p) { if (ssi->cmap) XInstallColormap (si->dpy, ssi->cmap); XMapRaised (si->dpy, ssi->screensaver_window); if (! ssi->pid) spawn_screenhack (ssi); /* Make sure the act of adding a screen doesn't present as pointer motion (and thus cause an unblank). */ { Window root, child; int x, y; unsigned int mask; XQueryPointer (si->dpy, ssi->screensaver_window, &root, &child, &ssi->last_poll_mouse.root_x, &ssi->last_poll_mouse.root_y, &x, &y, &mask); } } } /* Kill off any savers running on no-longer-extant monitors. */ for (; i < si->ssi_count; i++) { saver_screen_info *ssi = &si->screens[i]; if (ssi->pid) kill_screenhack (ssi); if (ssi->screensaver_window) { XUnmapWindow (si->dpy, ssi->screensaver_window); restore_real_vroot_1 (ssi); } } } void raise_window (saver_info *si, Bool inhibit_fade, Bool between_hacks_p, Bool dont_clear) { saver_preferences *p = &si->prefs; int i; if (si->demoing_p) inhibit_fade = True; if (si->emergency_lock_p) inhibit_fade = True; if (!dont_clear) initialize_screensaver_window (si); reset_watchdog_timer (si, True); if (p->fade_p && si->fading_possible_p && !inhibit_fade) { Window *current_windows = (Window *) calloc(sizeof(Window), si->nscreens); Colormap *current_maps = (Colormap *) calloc(sizeof(Colormap), si->nscreens); for (i = 0; i < si->nscreens; i++) { saver_screen_info *ssi = &si->screens[i]; current_windows[i] = ssi->screensaver_window; current_maps[i] = (between_hacks_p ? ssi->cmap : DefaultColormapOfScreen (ssi->screen)); /* Ensure that the default background of the window is really black, not a pixmap or something. (This does not clear the window.) */ XSetWindowBackground (si->dpy, ssi->screensaver_window, ssi->black_pixel); } if (p->verbose_p) fprintf (stderr, "%s: fading...\n", blurb()); XGrabServer (si->dpy); /* ############ DANGER! */ /* Clear the stderr layer on each screen. */ if (!dont_clear) for (i = 0; i < si->nscreens; i++) { saver_screen_info *ssi = &si->screens[i]; if (ssi->stderr_overlay_window) /* Do this before the fade, since the stderr cmap won't fade even if we uninstall it (beats me...) */ clear_stderr (ssi); } /* Note! The server is grabbed, and this will take several seconds to complete! */ fade_screens (si->dpy, current_maps, current_windows, si->nscreens, p->fade_seconds/1000, p->fade_ticks, True, !dont_clear); free(current_maps); free(current_windows); current_maps = 0; current_windows = 0; if (p->verbose_p) fprintf (stderr, "%s: fading done.\n", blurb()); #ifdef HAVE_MIT_SAVER_EXTENSION for (i = 0; i < si->nscreens; i++) { saver_screen_info *ssi = &si->screens[i]; if (ssi->server_mit_saver_window && window_exists_p (si->dpy, ssi->server_mit_saver_window)) XUnmapWindow (si->dpy, ssi->server_mit_saver_window); } #endif /* HAVE_MIT_SAVER_EXTENSION */ XUngrabServer (si->dpy); XSync (si->dpy, False); /* ###### (danger over) */ } else { for (i = 0; i < si->nscreens; i++) { saver_screen_info *ssi = &si->screens[i]; if (!dont_clear) XClearWindow (si->dpy, ssi->screensaver_window); if (!dont_clear || ssi->stderr_overlay_window) clear_stderr (ssi); XMapRaised (si->dpy, ssi->screensaver_window); #ifdef HAVE_MIT_SAVER_EXTENSION if (ssi->server_mit_saver_window && window_exists_p (si->dpy, ssi->server_mit_saver_window)) XUnmapWindow (si->dpy, ssi->server_mit_saver_window); #endif /* HAVE_MIT_SAVER_EXTENSION */ } } for (i = 0; i < si->nscreens; i++) { saver_screen_info *ssi = &si->screens[i]; if (ssi->cmap) XInstallColormap (si->dpy, ssi->cmap); } } int mouse_screen (saver_info *si) { saver_preferences *p = &si->prefs; Window pointer_root, pointer_child; int root_x, root_y, win_x, win_y; unsigned int mask; int i; if (si->nscreens == 1) return 0; for (i = 0; i < si->nscreens; i++) { saver_screen_info *ssi = &si->screens[i]; if (XQueryPointer (si->dpy, RootWindowOfScreen (ssi->screen), &pointer_root, &pointer_child, &root_x, &root_y, &win_x, &win_y, &mask) && root_x >= ssi->x && root_y >= ssi->y && root_x < ssi->x + ssi->width && root_y < ssi->y + ssi->height) { if (p->verbose_p) fprintf (stderr, "%s: mouse is on screen %d of %d\n", blurb(), i, si->nscreens); return i; } } /* couldn't figure out where the mouse is? Oh well. */ return 0; } Bool blank_screen (saver_info *si) { int i; Bool ok; Window w; int mscreen; /* Note: we do our grabs on the root window, not on the screensaver window. If we grabbed on the saver window, then the demo mode and lock dialog boxes wouldn't get any events. By "the root window", we mean "the root window that contains the mouse." We use to always grab the mouse on screen 0, but that has the effect of moving the mouse to screen 0 from whichever screen it was on, on multi-head systems. */ mscreen = mouse_screen (si); w = RootWindowOfScreen(si->screens[mscreen].screen); ok = grab_keyboard_and_mouse (si, w, (si->demoing_p ? 0 : si->screens[0].cursor), mscreen); # if 0 if (si->using_mit_saver_extension || si->using_sgi_saver_extension) /* If we're using a server extension, then failure to get a grab is not a big deal -- even without the grab, we will still be able to un-blank when there is user activity, since the server will tell us. */ /* #### No, that's not true: if we don't have a keyboard grab, then we can't read passwords to unlock. */ ok = True; # endif /* 0 */ if (!ok) return False; for (i = 0; i < si->nscreens; i++) { saver_screen_info *ssi = &si->screens[i]; if (ssi->real_screen_p) save_real_vroot (ssi); store_vroot_property (si->dpy, ssi->screensaver_window, ssi->screensaver_window); #ifdef HAVE_XF86VMODE { int ev, er; if (!XF86VidModeQueryExtension (si->dpy, &ev, &er) || !safe_XF86VidModeGetViewPort (si->dpy, i, &ssi->blank_vp_x, &ssi->blank_vp_y)) ssi->blank_vp_x = ssi->blank_vp_y = -1; } #endif /* HAVE_XF86VMODE */ } raise_window (si, False, False, False); si->screen_blanked_p = True; si->blank_time = time ((time_t *) 0); si->last_wall_clock_time = 0; store_saver_status (si); /* store blank time */ return True; } void unblank_screen (saver_info *si) { saver_preferences *p = &si->prefs; Bool unfade_p = (si->fading_possible_p && p->unfade_p); int i; monitor_power_on (si, True); reset_watchdog_timer (si, False); if (si->demoing_p) unfade_p = False; if (unfade_p) { Window *current_windows = (Window *) calloc(sizeof(Window), si->nscreens); for (i = 0; i < si->nscreens; i++) { saver_screen_info *ssi = &si->screens[i]; current_windows[i] = ssi->screensaver_window; /* Ensure that the default background of the window is really black, not a pixmap or something. (This does not clear the window.) */ XSetWindowBackground (si->dpy, ssi->screensaver_window, ssi->black_pixel); } if (p->verbose_p) fprintf (stderr, "%s: unfading...\n", blurb()); XSync (si->dpy, False); XGrabServer (si->dpy); /* ############ DANGER! */ XSync (si->dpy, False); /* Clear the stderr layer on each screen. */ for (i = 0; i < si->nscreens; i++) { saver_screen_info *ssi = &si->screens[i]; clear_stderr (ssi); } XUngrabServer (si->dpy); XSync (si->dpy, False); /* ###### (danger over) */ fade_screens (si->dpy, 0, current_windows, si->nscreens, p->fade_seconds/1000, p->fade_ticks, False, False); free(current_windows); current_windows = 0; if (p->verbose_p) fprintf (stderr, "%s: unfading done.\n", blurb()); } else { for (i = 0; i < si->nscreens; i++) { saver_screen_info *ssi = &si->screens[i]; if (ssi->cmap) { Colormap c = DefaultColormapOfScreen (ssi->screen); /* avoid technicolor */ XClearWindow (si->dpy, ssi->screensaver_window); if (c) XInstallColormap (si->dpy, c); } XUnmapWindow (si->dpy, ssi->screensaver_window); } } /* If the focus window does has a non-default colormap, then install that colormap as well. (On SGIs, this will cause both the root map and the focus map to be installed simultaneously. It'd be nice to pick up the other colormaps that had been installed, too; perhaps XListInstalledColormaps could be used for that?) */ { Window focus = 0; int revert_to; XGetInputFocus (si->dpy, &focus, &revert_to); if (focus && focus != PointerRoot && focus != None) { XWindowAttributes xgwa; xgwa.colormap = 0; XGetWindowAttributes (si->dpy, focus, &xgwa); if (xgwa.colormap && xgwa.colormap != DefaultColormapOfScreen (xgwa.screen)) XInstallColormap (si->dpy, xgwa.colormap); } } for (i = 0; i < si->nscreens; i++) { saver_screen_info *ssi = &si->screens[i]; kill_xsetroot_data (si->dpy, ssi->screensaver_window, p->verbose_p); } store_saver_status (si); /* store unblank time */ ungrab_keyboard_and_mouse (si); restore_real_vroot (si); /* Unmap the windows a second time, dammit -- just to avoid a race with the screen-grabbing hacks. (I'm not sure if this is really necessary; I'm stabbing in the dark now.) */ for (i = 0; i < si->nscreens; i++) XUnmapWindow (si->dpy, si->screens[i].screensaver_window); si->screen_blanked_p = False; si->blank_time = time ((time_t *) 0); si->last_wall_clock_time = 0; store_saver_status (si); /* store unblank time */ } /* Transfer any grabs from the old window to the new. Actually I think none of this is necessary, since we always hold our grabs on the root window, but I wrote this before re-discovering that... */ static void maybe_transfer_grabs (saver_screen_info *ssi, Window old_w, Window new_w, int new_screen_no) { saver_info *si = ssi->global; /* If the old window held our mouse grab, transfer the grab to the new window. (Grab the server while so doing, to avoid a race condition.) */ if (old_w == si->mouse_grab_window) { XGrabServer (si->dpy); /* ############ DANGER! */ ungrab_mouse (si); grab_mouse (si, ssi->screensaver_window, (si->demoing_p ? 0 : ssi->cursor), new_screen_no); XUngrabServer (si->dpy); XSync (si->dpy, False); /* ###### (danger over) */ } /* If the old window held our keyboard grab, transfer the grab to the new window. (Grab the server while so doing, to avoid a race condition.) */ if (old_w == si->keyboard_grab_window) { XGrabServer (si->dpy); /* ############ DANGER! */ ungrab_kbd(si); grab_kbd(si, ssi->screensaver_window, ssi->number); XUngrabServer (si->dpy); XSync (si->dpy, False); /* ###### (danger over) */ } } static Visual * get_screen_gl_visual (saver_info *si, int real_screen_number) { int i; int nscreens = ScreenCount (si->dpy); if (! si->best_gl_visuals) si->best_gl_visuals = (Visual **) calloc (nscreens + 1, sizeof (*si->best_gl_visuals)); for (i = 0; i < nscreens; i++) if (! si->best_gl_visuals[i]) si->best_gl_visuals[i] = get_best_gl_visual (si, ScreenOfDisplay (si->dpy, i)); if (real_screen_number < 0 || real_screen_number >= nscreens) abort(); return si->best_gl_visuals[real_screen_number]; } Bool select_visual (saver_screen_info *ssi, const char *visual_name) { XWindowAttributes xgwa; saver_info *si = ssi->global; saver_preferences *p = &si->prefs; Bool install_cmap_p = p->install_cmap_p; Bool was_installed_p = (ssi->cmap != DefaultColormapOfScreen(ssi->screen)); Visual *new_v = 0; Bool got_it; /* On some systems (most recently, MacOS X) OpenGL programs get confused when you kill one and re-start another on the same window. So maybe it's best to just always destroy and recreate the xscreensaver window when changing hacks, instead of trying to reuse the old one? */ Bool always_recreate_window_p = True; get_screen_gl_visual (si, 0); /* let's probe all the GL visuals early */ /* We make sure the existing window is actually on ssi->screen before trying to use it, in case things moved around radically when monitors were added or deleted. If we don't do this we could get a BadMatch even though the depths match. I think. */ memset (&xgwa, 0, sizeof(xgwa)); if (ssi->screensaver_window) XGetWindowAttributes (si->dpy, ssi->screensaver_window, &xgwa); if (visual_name && *visual_name) { if (!strcmp(visual_name, "default-i") || !strcmp(visual_name, "Default-i") || !strcmp(visual_name, "Default-I") ) { visual_name = "default"; install_cmap_p = True; } else if (!strcmp(visual_name, "default-n") || !strcmp(visual_name, "Default-n") || !strcmp(visual_name, "Default-N")) { visual_name = "default"; install_cmap_p = False; } else if (!strcmp(visual_name, "gl") || !strcmp(visual_name, "Gl") || !strcmp(visual_name, "GL")) { new_v = get_screen_gl_visual (si, ssi->real_screen_number); if (!new_v && p->verbose_p) fprintf (stderr, "%s: no GL visuals.\n", progname); } if (!new_v) new_v = get_visual (ssi->screen, visual_name, True, False); } else { new_v = ssi->default_visual; } got_it = !!new_v; if (new_v && new_v != DefaultVisualOfScreen(ssi->screen)) /* It's not the default visual, so we have no choice but to install. */ install_cmap_p = True; ssi->install_cmap_p = install_cmap_p; if ((ssi->screen != xgwa.screen) || (new_v && (always_recreate_window_p || (ssi->current_visual != new_v) || (install_cmap_p != was_installed_p)))) { Colormap old_c = ssi->cmap; Window old_w = ssi->screensaver_window; if (! new_v) new_v = ssi->current_visual; if (p->verbose_p) { fprintf (stderr, "%s: %d: visual ", blurb(), ssi->number); describe_visual (stderr, ssi->screen, new_v, install_cmap_p); #if 0 fprintf (stderr, "%s: from ", blurb()); describe_visual (stderr, ssi->screen, ssi->current_visual, was_installed_p); #endif } reset_stderr (ssi); ssi->current_visual = new_v; ssi->current_depth = visual_depth(ssi->screen, new_v); ssi->cmap = 0; ssi->screensaver_window = 0; initialize_screensaver_window_1 (ssi); /* stderr_overlay_window is a child of screensaver_window, so we need to destroy that as well (actually, we just need to invalidate and drop our pointers to it, but this will destroy it, which is ok so long as it happens before old_w itself is destroyed.) */ reset_stderr (ssi); raise_window (si, True, True, False); store_vroot_property (si->dpy, ssi->screensaver_window, ssi->screensaver_window); /* Transfer any grabs from the old window to the new. */ maybe_transfer_grabs (ssi, old_w, ssi->screensaver_window, ssi->number); /* Now we can destroy the old window without horking our grabs. */ XDestroyWindow (si->dpy, old_w); if (p->verbose_p) fprintf (stderr, "%s: %d: destroyed old saver window 0x%lx.\n", blurb(), ssi->number, (unsigned long) old_w); if (old_c && old_c != DefaultColormapOfScreen (ssi->screen) && old_c != ssi->demo_cmap) XFreeColormap (si->dpy, old_c); } return got_it; } xscreensaver-5.36/driver/screens.c000644 000767 000024 00000103043 12701612237 017241 0ustar00jwzstaff000000 000000 /* screens.c --- dealing with RANDR, Xinerama, and VidMode Viewports. * xscreensaver, Copyright (c) 1991-2008 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. */ /* There are a bunch of different mechanisms for multiple monitors * available in X. XScreenSaver needs to care about this for two * reasons: first, to ensure that all visible areas go black; and * second, so that the windows of screen savers exactly fill the * glass of each monitor (instead of one saver spanning multiple * monitors, or a monitor displaying only a sub-rectangle of the * screen saver.) * * 1) Multi-screen: * * This is the original way. Each monitor gets its own display * number. :0.0 is the first one, :0.1 is the next, etc. The * value of $DISPLAY determines which screen windows open on by * default. A single app can open windows on multiple screens * with the same display connection, but windows cannot be moved * from one screen to another. The mouse can be moved from one * screen to another, though. Screens may be different depths * (e.g., one can be TrueColor and one can be PseudoColor.) * Screens cannot be resized or moved without restarting X. * * Everyone hates this way of doing things because of the * inability to move a window from one screen to another without * restarting the application. * * 2) Xinerama: * * There is a single giant root window that spans all the * monitors. All monitors are the same depth, and windows can be * moved around. Applications can learn which rectangles are * actually visible on monitors by querying the Xinerama server * extension. (If you don't do that, you end up with dialog * boxes that try to appear in the middle of the screen actually * spanning the gap between two monitors.) * * Xinerama doesn't work with DRI, which means that if you use * it, you lose hardware acceleration on OpenGL programs. Also, * screens can't be resized or moved without restarting X. * * 3) Vidmode Viewports: * * With this extension, the root window can be bigger than the * monitor. Moving the mouse near the edges of the screen * scrolls around, like a pan-and-scan movie. There can also be * a hot key for changing the monitor's resolution (zooming * in/out). * * Trying to combine this with Xinerama crashes the server, so * you can only use this if you have only a single screen, or are * in old-multi-screen mode. * * Also, half the time it doesn't work at all: it tends to lie * about the size of the rectangle in use. * * 4) RANDR 1.0: * * The first version of the "Resize and Rotate" extension let you * change the resolution of a screen on the fly. The root window * would actually resize. However, it was also incompatible with * Xinerama (did it crash, or just do nothing? I can't remember) * so you needed to be in single-screen or old multi-screen mode. * I believe RANDR could co-exist with Vidmode Viewports, but I'm * not sure. * * 5) RANDR 1.2: * * Finally, RANDR added the functionality of Xinerama, plus some. * Each X screen (in the sense of #1, "multi-screen") can have a * number of sub-rectangles that are displayed on monitors, and * each of those sub-rectangles can be displayed on more than one * monitor. So it's possible (I think) to have a hybrid of * multi-screen and Xinerama (e.g., to have two monitors running * in one depth, and three monitors running in another?) * Typically though, there will be a single X screen, with * Xinerama-like division of that large root window onto multiple * monitors. Also everything's dynamic: monitors can be added, * removed, and resized at runtime. * * I believe that as of RANDR 1.2, the Xinerama extension still * exists but only as a compatiblity layer: it's actually * returning data from the RANDR extension. * * Though RANDR 1.2 allows the same image to be cloned onto more * than one monitor, and also allows one monitor to show a * subsection of something on another monitor (e.g., the * rectangles can be enclosed or overlap). Since there's no way * to put seperate savers on those duplicated-or-overlapping * monitors, xscreensaver just ignores them (which allows them to * display duplicates or overlaps). * * 5a) Nvidia fucks it up: * * Nvidia drivers as of Aug 2008 running in "TwinView" mode * apparently report correct screen geometry via Xinerama, but * report one giant screen via RANDR. The response from the * nvidia developers is, "we don't support RANDR, use Xinerama * instead." Which is a seriously lame answer. So, xscreensaver * has to query *both* extensions, and make a guess as to which * is to be believed. * * 5b) Also sometimes RANDR says stupid shit like, "You have one * screen, and it has no available orientations or sizes." * */ #ifdef HAVE_CONFIG_H # include "config.h" #endif #include #ifdef HAVE_RANDR # include #endif /* HAVE_RANDR */ #ifdef HAVE_XINERAMA # include #endif /* HAVE_XINERAMA */ #ifdef HAVE_XF86VMODE # include #endif /* HAVE_XF86VMODE */ /* This file doesn't need the Xt headers, so stub these types out... */ #undef XtPointer #define XtAppContext void* #define XrmDatabase void* #define XtIntervalId void* #define XtPointer void* #define Widget void* #include "xscreensaver.h" #include "visual.h" typedef enum { S_SANE, S_ENCLOSED, S_DUPLICATE, S_OVERLAP, S_OFFSCREEN, S_DISABLED } monitor_sanity; /* 'typedef monitor' is in types.h */ struct _monitor { int id; char *desc; Screen *screen; int x, y, width, height; monitor_sanity sanity; /* I'm not crazy you're the one who's crazy */ int enemy; /* which monitor it overlaps or duplicates */ char *err; /* msg to print at appropriate later time; exists only on monitor #0. */ }; static Bool layouts_differ_p (monitor **a, monitor **b); static void free_monitors (monitor **monitors) { monitor **m2 = monitors; if (! monitors) return; while (*m2) { if ((*m2)->desc) free ((*m2)->desc); if ((*m2)->err) free ((*m2)->err); free (*m2); m2++; } free (monitors); } static char * append (char *s1, const char *s2) { char *s = (char *) malloc ((s1 ? strlen(s1) : 0) + (s2 ? strlen(s2) : 0) + 3); *s = 0; if (s1) strcat (s, s1); if (s1 && s2) strcat (s, "\n"); if (s2) strcat (s, s2); if (s1) free (s1); return s; } #ifdef HAVE_XINERAMA static monitor ** xinerama_scan_monitors (Display *dpy, char **errP) { Screen *screen = DefaultScreenOfDisplay (dpy); int event, error, nscreens, i; XineramaScreenInfo *xsi; monitor **monitors; if (! XineramaQueryExtension (dpy, &event, &error)) return 0; if (! XineramaIsActive (dpy)) return 0; xsi = XineramaQueryScreens (dpy, &nscreens); if (!xsi) return 0; monitors = (monitor **) calloc (nscreens + 1, sizeof(*monitors)); if (!monitors) return 0; for (i = 0; i < nscreens; i++) { monitor *m = (monitor *) calloc (1, sizeof (monitor)); monitors[i] = m; m->id = i; m->screen = screen; m->x = xsi[i].x_org; m->y = xsi[i].y_org; m->width = xsi[i].width; m->height = xsi[i].height; } return monitors; } #endif /* HAVE_XINERAMA */ #ifdef HAVE_XF86VMODE static monitor ** vidmode_scan_monitors (Display *dpy, char **errP) { int event, error, nscreens, i; monitor **monitors; /* Note that XF86VidModeGetViewPort() tends to be full of lies on laptops that have a docking station or external monitor that runs in a different resolution than the laptop's screen: http://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=81593 http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=208417 http://bugs.xfree86.org/show_bug.cgi?id=421 Presumably this is fixed by using RANDR instead of VidMode. */ # ifdef HAVE_XINERAMA /* Attempts to use the VidMode extension when the Xinerama extension is active can result in a server crash! Yay! */ if (XQueryExtension (dpy, "XINERAMA", &error, &event, &error)) return 0; # endif /* !HAVE_XINERAMA */ if (! XF86VidModeQueryExtension (dpy, &event, &error)) return 0; nscreens = ScreenCount (dpy); monitors = (monitor **) calloc (nscreens + 1, sizeof(*monitors)); if (!monitors) return 0; for (i = 0; i < nscreens; i++) { monitor *m = (monitor *) calloc (1, sizeof (monitor)); XF86VidModeModeLine ml; int dot; Screen *screen = ScreenOfDisplay (dpy, i); monitors[i] = m; m->id = i; m->screen = screen; if (! safe_XF86VidModeGetViewPort (dpy, i, &m->x, &m->y)) m->x = m->y = -1; if (XF86VidModeGetModeLine (dpy, i, &dot, &ml)) { m->width = ml.hdisplay; m->height = ml.vdisplay; } /* On a system that has VidMode but does not have RANDR, and that has "Option Rotate" set, WidthOfScreen/HeightOfScreen are the rotated size, but XF86VidModeModeLine contains the unrotated size. Maybe there's something in 'flags' that indicates this? Or, we can just notice that the aspect ratios are inverted: */ if (m->width > 0 && m->height > 0 && ((m->width > m->height) != (WidthOfScreen(screen) > HeightOfScreen(screen)))) { int swap = m->width; m->width = m->height; m->height = swap; } /* Apparently, though the server stores the X position in increments of 1 pixel, it will only make changes to the *display* in some other increment. With XF86_SVGA on a Thinkpad, the display only updates in multiples of 8 pixels when in 8-bit mode, and in multiples of 4 pixels in 16-bit mode. I don't know what it does in 24- and 32-bit mode, because I don't have enough video memory to find out. I consider it a bug that XF86VidModeGetViewPort() is telling me the server's *target* scroll position rather than the server's *actual* scroll position. David Dawes agrees, and says they may fix this in XFree86 4.0, but it's nontrivial. He also confirms that this behavior is server-dependent, so the actual scroll position cannot be reliably determined by the client. So... that means the only solution is to provide a ``sandbox'' around the blackout window -- we make the window be up to N pixels larger than the viewport on both the left and right sides. That means some part of the outer edges of each hack might not be visible, but screw it. I'm going to guess that 16 pixels is enough, and that the Y dimension doesn't have this problem. The drawback of doing this, of course, is that some of the screenhacks will still look pretty stupid -- for example, "slidescreen" will cut off the left and right edges of the grid, etc. */ # define FUDGE 16 if (m->x > 0 && m->x < m->width - ml.hdisplay) { /* Not at left edge or right edge: Round X position down to next lower multiple of FUDGE. Increase width by 2*FUDGE in case some server rounds up. */ m->x = ((m->x - 1) / FUDGE) * FUDGE; m->width += (FUDGE * 2); } # undef FUDGE } return monitors; } #endif /* HAVE_XF86VMODE */ #ifdef HAVE_RANDR static monitor ** randr_scan_monitors (Display *dpy, char **errP) { int event, error, major, minor, nscreens, i, j; monitor **monitors; Bool new_randr_p = False; if (! XRRQueryExtension (dpy, &event, &error)) return 0; if (! XRRQueryVersion (dpy, &major, &minor)) return 0; if (major <= 0) /* Protocol was still in flux back then -- fuck it. */ return 0; # ifdef HAVE_RANDR_12 new_randr_p = (major > 1 || (major == 1 && minor >= 2)); # endif if (! new_randr_p) /* RANDR 1.0 -- no Xinerama-like virtual screens. */ nscreens = ScreenCount (dpy); else /* RANDR 1.2 or newer -- built-in Xinerama */ { # ifdef HAVE_RANDR_12 int xsc = ScreenCount (dpy); nscreens = 0; /* Add up the virtual screens on each X screen. */ for (i = 0; i < xsc; i++) { XRRScreenResources *res = XRRGetScreenResources (dpy, RootWindow (dpy, i)); nscreens += res->noutput; XRRFreeScreenResources (res); } # endif /* HAVE_RANDR_12 */ } if (nscreens <= 0) { *errP = append (*errP, "WARNING: RANDR reported no screens! Ignoring it."); return 0; } monitors = (monitor **) calloc (nscreens + 1, sizeof(*monitors)); if (!monitors) return 0; for (i = 0, j = 0; i < ScreenCount (dpy); i++) { Screen *screen = ScreenOfDisplay (dpy, i); if (! new_randr_p) /* RANDR 1.0 */ { XRRScreenConfiguration *rrc; monitor *m = (monitor *) calloc (1, sizeof (monitor)); monitors[i] = m; m->screen = screen; m->id = i; rrc = XRRGetScreenInfo (dpy, RootWindowOfScreen (screen)); if (rrc) { SizeID size = -1; Rotation rot = ~0; XRRScreenSize *rrsizes; int nsizes = 0; size = XRRConfigCurrentConfiguration (rrc, &rot); rrsizes = XRRConfigSizes (rrc, &nsizes); if (nsizes <= 0) /* WTF? Shouldn't happen but does. */ { m->width = DisplayWidth (dpy, i); m->height = DisplayHeight (dpy, i); } else if (rot & (RR_Rotate_90|RR_Rotate_270)) { m->width = rrsizes[size].height; m->height = rrsizes[size].width; } else { m->width = rrsizes[size].width; m->height = rrsizes[size].height; } /* don't free 'rrsizes' */ XRRFreeScreenConfigInfo (rrc); } } else /* RANDR 1.2 or newer */ { # ifdef HAVE_RANDR_12 int k; XRRScreenResources *res = XRRGetScreenResources (dpy, RootWindowOfScreen (screen)); for (k = 0; k < res->noutput; k++, j++) { monitor *m = (monitor *) calloc (1, sizeof (monitor)); XRROutputInfo *rroi = XRRGetOutputInfo (dpy, res, res->outputs[k]); RRCrtc crtc = (rroi->crtc ? rroi->crtc : rroi->ncrtc ? rroi->crtcs[0] : 0); XRRCrtcInfo *crtci = (crtc ? XRRGetCrtcInfo(dpy, res, crtc) : 0); monitors[j] = m; m->screen = screen; m->id = (i * 1000) + j; m->desc = (rroi->name ? strdup (rroi->name) : 0); if (crtci) { /* Note: if the screen is rotated, XRRConfigSizes contains the unrotated WxH, but XRRCrtcInfo contains rotated HxW. */ m->x = crtci->x; m->y = crtci->y; m->width = crtci->width; m->height = crtci->height; } if (rroi->connection == RR_Disconnected) m->sanity = S_DISABLED; /* #### do the same for RR_UnknownConnection? */ if (crtci) XRRFreeCrtcInfo (crtci); XRRFreeOutputInfo (rroi); } XRRFreeScreenResources (res); # endif /* HAVE_RANDR_12 */ } } /* Work around more fucking brain damage. */ { int ok = 0; int i = 0; while (monitors[i]) { if (monitors[i]->width != 0 && monitors[i]->height != 0) ok++; i++; } if (! ok) { *errP = append (*errP, "WARNING: RANDR says all screens are 0x0! Ignoring it."); free_monitors (monitors); monitors = 0; } } return monitors; } #endif /* HAVE_RANDR */ static monitor ** basic_scan_monitors (Display *dpy, char **errP) { int nscreens = ScreenCount (dpy); int i; monitor **monitors = (monitor **) calloc (nscreens + 1, sizeof(*monitors)); if (!monitors) return 0; for (i = 0; i < nscreens; i++) { Screen *screen = ScreenOfDisplay (dpy, i); monitor *m = (monitor *) calloc (1, sizeof (monitor)); monitors[i] = m; m->id = i; m->screen = screen; m->x = 0; m->y = 0; m->width = WidthOfScreen (screen); m->height = HeightOfScreen (screen); } return monitors; } #if defined(HAVE_RANDR) && defined(HAVE_XINERAMA) /* From: Aaron Plattner Date: August 7, 2008 10:21:25 AM PDT To: linux-bugs@nvidia.com The NVIDIA X driver does not yet support RandR 1.2. The X server has a compatibility layer in it that allows RandR 1.2 clients to talk to RandR 1.1 drivers through an RandR 1.2 pseudo-output called "default". This reports the total combined resolution of the TwinView display, since it doesn't have any visibility into TwinView metamodes. There is no way for the driver to prevent the server from turning on this compatibility layer. The intention is for X client applications to continue to use the Xinerama extension to query the screen geometry. RandR 1.2 reports its own Xinerama info for this purpose. I would recommend against modifying xscreensaver to try to get this information from RandR. */ static monitor ** randr_versus_xinerama_fight (Display *dpy, monitor **randr_monitors, char **errP) { monitor **xinerama_monitors; if (!randr_monitors) return 0; xinerama_monitors = xinerama_scan_monitors (dpy, errP); if (!xinerama_monitors) return randr_monitors; if (! layouts_differ_p (randr_monitors, xinerama_monitors)) { free_monitors (xinerama_monitors); return randr_monitors; } else if ( randr_monitors[0] && !randr_monitors[1] && /* 1 monitor */ xinerama_monitors[0] && xinerama_monitors[1]) /* >1 monitor */ { *errP = append (*errP, "WARNING: RANDR reports 1 screen but Xinerama\n" "\t\treports multiple. Believing Xinerama."); free_monitors (randr_monitors); return xinerama_monitors; } else { *errP = append (*errP, "WARNING: RANDR and Xinerama report different\n" "\t\tscreen layouts! Believing RANDR."); free_monitors (xinerama_monitors); return randr_monitors; } } #endif /* HAVE_RANDR && HAVE_XINERAMA */ #ifdef DEBUG_MULTISCREEN /* If DEBUG_MULTISCREEN is defined, then in "-debug" mode, xscreensaver will pretend that it is changing the number of connected monitors every few seconds, using the geometries in the following list, for stress-testing purposes. */ static monitor ** debug_scan_monitors (Display *dpy, char **errP) { static const char * const geoms[] = { "1600x1028+0+22", "1024x768+0+22", "800x600+0+22", "800x600+0+22,800x600+800+22", "800x600+0+22,800x600+800+22,800x600+300+622", "800x600+0+22,800x600+800+22,800x600+0+622,800x600+800+622", "640x480+0+22,640x480+640+22,640x480+0+502,640x480+640+502", "640x480+240+22,640x480+0+502,640x480+640+502", "640x480+0+200,640x480+640+200", "800x600+400+22", "320x200+0+22,320x200+320+22,320x200+640+22,320x200+960+22,320x200+0+222,320x200+320+222,320x200+640+222,320x200+960+222,320x200+0+422,320x200+320+422,320x200+640+422,320x200+960+422,320x200+0+622,320x200+320+622,320x200+640+622,320x200+960+622,320x200+0+822,320x200+320+822,320x200+640+822,320x200+960+822" }; static int index = 0; monitor **monitors = (monitor **) calloc (100, sizeof(*monitors)); int nscreens = 0; Screen *screen = DefaultScreenOfDisplay (dpy); char *s = strdup (geoms[index]); char *token = strtok (s, ","); while (token) { monitor *m = calloc (1, sizeof (monitor)); char c; m->id = nscreens; m->screen = screen; if (4 != sscanf (token, "%dx%d+%d+%d%c", &m->width, &m->height, &m->x, &m->y, &c)) abort(); m->width -= 2; m->height -= 2; monitors[nscreens++] = m; token = strtok (0, ","); } free (s); index = (index+1) % countof(geoms); return monitors; } #endif /* DEBUG_MULTISCREEN */ #ifdef QUAD_MODE static monitor ** quadruple (monitor **monitors, Bool debug_p, char **errP) { int i, j, count = 0; monitor **monitors2; while (monitors[count]) count++; monitors2 = (monitor **) calloc (count * 4 + 1, sizeof(*monitors)); if (!monitors2) abort(); for (i = 0, j = 0; i < count; i++) { int k; for (k = 0; k < 4; k++) { monitors2[j+k] = (monitor *) calloc (1, sizeof (monitor)); *monitors2[j+k] = *monitors[i]; monitors2[j+k]->width /= (debug_p ? 4 : 2); monitors2[j+k]->height /= 2; monitors2[j+k]->id = (monitors[i]->id * 4) + k; monitors2[j+k]->name = (monitors[i]->name ? strdup (monitors[i]->name) : 0); } monitors2[j+1]->x += monitors2[j]->width; monitors2[j+2]->y += monitors2[j]->height; monitors2[j+3]->x += monitors2[j]->width; monitors2[j+3]->y += monitors2[j]->height; j += 4; } free_monitors (monitors); return monitors2; } #endif /* QUAD_MODE */ static monitor ** scan_monitors (saver_info *si) { saver_preferences *p = &si->prefs; monitor **monitors = 0; char *err = 0; # ifdef DEBUG_MULTISCREEN if (! monitors) monitors = debug_scan_monitors (si->dpy, &err); # endif # ifdef HAVE_RANDR if (! p->getviewport_full_of_lies_p) if (! monitors) monitors = randr_scan_monitors (si->dpy, &err); # ifdef HAVE_XINERAMA monitors = randr_versus_xinerama_fight (si->dpy, monitors, &err); # endif # endif /* HAVE_RANDR */ # ifdef HAVE_XF86VMODE if (! monitors) monitors = vidmode_scan_monitors (si->dpy, &err); # endif # ifdef HAVE_XINERAMA if (! monitors) monitors = xinerama_scan_monitors (si->dpy, &err); # endif if (! monitors) monitors = basic_scan_monitors (si->dpy, &err); # ifdef QUAD_MODE if (p->quad_p) monitors = quadruple (monitors, p->debug_p, &err); # endif if (monitors && err) monitors[0]->err = err; return monitors; } static Bool monitors_overlap_p (monitor *a, monitor *b) { /* Two rectangles overlap if the max of the tops is less than the min of the bottoms and the max of the lefts is less than the min of the rights. */ # undef MAX # undef MIN # define MAX(A,B) ((A)>(B)?(A):(B)) # define MIN(A,B) ((A)<(B)?(A):(B)) int maxleft = MAX(a->x, b->x); int maxtop = MAX(a->y, b->y); int minright = MIN(a->x + a->width - 1, b->x + b->width); int minbot = MIN(a->y + a->height - 1, b->y + b->height); return (maxtop < minbot && maxleft < minright); } static Bool plausible_aspect_ratio_p (monitor **monitors) { /* Modern wide-screen monitors come in the following aspect ratios: One monitor: If you tack a 640x480 monitor onto the right, the ratio is: 16 x 9 --> 1.78 852 x 480 --> 1.77 852+640 x 480 --> 3.11 "SD 480p" 1280 x 720 --> 1.78 1280+640 x 720 --> 2.67 "HD 720p" 1280 x 920 --> 1.39 1280+640 x 920 --> 2.09 1366 x 768 --> 1.78 1366+640 x 768 --> 2.61 "HD 768p" 1440 x 900 --> 1.60 1440+640 x 900 --> 2.31 1680 x 1050 --> 1.60 1680+640 x 1050 --> 2.21 1690 x 1050 --> 1.61 1690+640 x 1050 --> 2.22 1920 x 1080 --> 1.78 1920+640 x 1080 --> 2.37 "HD 1080p" 1920 x 1200 --> 1.60 1920+640 x 1200 --> 2.13 2560 x 1600 --> 1.60 2560+640 x 1600 --> 2.00 So that implies that if we ever see an aspect ratio >= 2.0, we can be pretty sure that the X server is lying to us, and that's actually two monitors, not one. */ if (monitors[0] && !monitors[1] && /* exactly 1 monitor */ monitors[0]->height && monitors[0]->width / (double) monitors[0]->height >= 1.9) return False; else return True; } /* Mark the ones that overlap, etc. */ static void check_monitor_sanity (monitor **monitors) { int i, j, count = 0; while (monitors[count]) count++; # define X1 monitors[i]->x # define X2 monitors[j]->x # define Y1 monitors[i]->y # define Y2 monitors[j]->y # define W1 monitors[i]->width # define W2 monitors[j]->width # define H1 monitors[i]->height # define H2 monitors[j]->height /* If a monitor is enclosed by any other monitor, that's insane. */ for (i = 0; i < count; i++) for (j = 0; j < count; j++) if (i != j && monitors[i]->sanity == S_SANE && monitors[j]->sanity == S_SANE && monitors[i]->screen == monitors[j]->screen && X2 >= X1 && Y2 >= Y1 && (X2+W2) <= (X1+W1) && (Y2+H2) <= (Y1+H1)) { if (X1 == X2 && Y1 == Y2 && W1 == W2 && H1 == H2) monitors[j]->sanity = S_DUPLICATE; else monitors[j]->sanity = S_ENCLOSED; monitors[j]->enemy = i; } /* After checking for enclosure, check for other lossage against earlier monitors. We do enclosure first so that we make sure to pick the larger one. */ for (i = 0; i < count; i++) for (j = 0; j < i; j++) { if (monitors[i]->sanity != S_SANE) continue; /* already marked */ if (monitors[j]->sanity != S_SANE) continue; if (monitors[i]->screen != monitors[j]->screen) continue; if (monitors_overlap_p (monitors[i], monitors[j])) { monitors[i]->sanity = S_OVERLAP; monitors[i]->enemy = j; } } /* Finally, make sure all monitors have sane positions and sizes. Xinerama sometimes reports 1024x768 VPs at -1936862040, -1953705044. */ for (i = 0; i < count; i++) { if (monitors[i]->sanity != S_SANE) continue; /* already marked */ if (X1 < 0 || Y1 < 0 || W1 <= 0 || H1 <= 0 || X1+W1 >= 0x7FFF || Y1+H1 >= 0x7FFF) { monitors[i]->sanity = S_OFFSCREEN; monitors[i]->enemy = 0; } } # undef X1 # undef X2 # undef Y1 # undef Y2 # undef W1 # undef W2 # undef H1 # undef H2 } static Bool layouts_differ_p (monitor **a, monitor **b) { if (!a || !b) return True; while (1) { if (!*a) break; if (!*b) break; if ((*a)->screen != (*b)->screen || (*a)->x != (*b)->x || (*a)->y != (*b)->y || (*a)->width != (*b)->width || (*a)->height != (*b)->height) return True; a++; b++; } if (*a) return True; if (*b) return True; return False; } void describe_monitor_layout (saver_info *si) { monitor **monitors = si->monitor_layout; int count = 0; int good_count = 0; int bad_count = 0; int implausible_p = !plausible_aspect_ratio_p (monitors); while (monitors[count]) { if (monitors[count]->sanity == S_SANE) good_count++; else bad_count++; count++; } if (monitors[0]->err) /* deferred error msg */ { char *token = strtok (monitors[0]->err, "\n"); while (token) { fprintf (stderr, "%s: %s\n", blurb(), token); token = strtok (0, "\n"); } free (monitors[0]->err); monitors[0]->err = 0; } if (count == 0) fprintf (stderr, "%s: no screens!\n", blurb()); else { int i; fprintf (stderr, "%s: screens in use: %d\n", blurb(), good_count); for (i = 0; i < count; i++) { monitor *m = monitors[i]; if (m->sanity != S_SANE) continue; fprintf (stderr, "%s: %3d/%d: %dx%d+%d+%d", blurb(), m->id, screen_number (m->screen), m->width, m->height, m->x, m->y); if (m->desc && *m->desc) fprintf (stderr, " (%s)", m->desc); fprintf (stderr, "\n"); } if (bad_count > 0) { fprintf (stderr, "%s: rejected screens: %d\n", blurb(), bad_count); for (i = 0; i < count; i++) { monitor *m = monitors[i]; monitor *e = monitors[m->enemy]; if (m->sanity == S_SANE) continue; fprintf (stderr, "%s: %3d/%d: %dx%d+%d+%d", blurb(), m->id, screen_number (m->screen), m->width, m->height, m->x, m->y); if (m->desc && *m->desc) fprintf (stderr, " (%s)", m->desc); fprintf (stderr, " -- "); switch (m->sanity) { case S_SANE: abort(); break; case S_ENCLOSED: fprintf (stderr, "enclosed by %d (%dx%d+%d+%d)\n", e->id, e->width, e->height, e->x, e->y); break; case S_DUPLICATE: fprintf (stderr, "duplicate of %d\n", e->id); break; case S_OVERLAP: fprintf (stderr, "overlaps %d (%dx%d+%d+%d)\n", e->id, e->width, e->height, e->x, e->y); break; case S_OFFSCREEN: fprintf (stderr, "off screen (%dx%d)\n", WidthOfScreen (e->screen), HeightOfScreen (e->screen)); break; case S_DISABLED: fprintf (stderr, "output disabled\n"); break; } } } if (implausible_p) fprintf (stderr, "%s: WARNING: single screen aspect ratio is %dx%d = %.2f\n" "%s: probable X server bug in Xinerama/RANDR!\n", blurb(), monitors[0]->width, monitors[0]->height, monitors[0]->width / (double) monitors[0]->height, blurb()); } } /* Synchronize the contents of si->ssi to the current state of the monitors. Doesn't change anything if nothing has changed; otherwise, alters and reuses existing saver_screen_info structs as much as possible. Returns True if anything changed. */ Bool update_screen_layout (saver_info *si) { monitor **monitors = scan_monitors (si); int count = 0; int good_count = 0; int i, j; int seen_screens[100] = { 0, }; if (! layouts_differ_p (monitors, si->monitor_layout)) { free_monitors (monitors); return False; } free_monitors (si->monitor_layout); si->monitor_layout = monitors; check_monitor_sanity (si->monitor_layout); while (monitors[count]) { if (monitors[count]->sanity == S_SANE) good_count++; count++; } if (si->ssi_count == 0) { si->ssi_count = 10; si->screens = (saver_screen_info *) calloc (sizeof(*si->screens), si->ssi_count); } if (si->ssi_count <= good_count) { si->ssi_count = good_count + 10; si->screens = (saver_screen_info *) realloc (si->screens, sizeof(*si->screens) * si->ssi_count); memset (si->screens + si->nscreens, 0, sizeof(*si->screens) * (si->ssi_count - si->nscreens)); } if (! si->screens) abort(); si->nscreens = good_count; /* Regenerate the list of GL visuals as needed. */ if (si->best_gl_visuals) free (si->best_gl_visuals); si->best_gl_visuals = 0; for (i = 0, j = 0; i < count; i++) { monitor *m = monitors[i]; saver_screen_info *ssi = &si->screens[j]; Screen *old_screen = ssi->screen; int sn; if (monitors[i]->sanity != S_SANE) continue; ssi->global = si; ssi->number = j; sn = screen_number (m->screen); ssi->screen = m->screen; ssi->real_screen_number = sn; ssi->real_screen_p = (seen_screens[sn] == 0); seen_screens[sn]++; ssi->default_visual = get_visual_resource (ssi->screen, "visualID", "VisualID", False); ssi->current_visual = ssi->default_visual; ssi->current_depth = visual_depth (ssi->screen, ssi->current_visual); /* If the screen changed (or if this is the first time) we need a new toplevel shell for this screen's depth. */ if (ssi->screen != old_screen) initialize_screen_root_widget (ssi); ssi->last_poll_mouse.root_x = -1; ssi->last_poll_mouse.root_y = -1; ssi->x = m->x; ssi->y = m->y; ssi->width = m->width; ssi->height = m->height; # ifndef DEBUG_MULTISCREEN { saver_preferences *p = &si->prefs; if (p->debug_p # ifdef QUAD_MODE && !p->quad_p # endif ) ssi->width /= 2; } # endif j++; } si->default_screen = &si->screens[0]; return True; } xscreensaver-5.36/driver/timers.c000644 000767 000024 00000162746 12720737162 017127 0ustar00jwzstaff000000 000000 /* timers.c --- detecting when the user is idle, and other timer-related tasks. * xscreensaver, Copyright (c) 1991-2014 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. */ #ifdef HAVE_CONFIG_H # include "config.h" #endif #include #include #include #include #include #include #include #ifdef HAVE_XMU # ifndef VMS # include # else /* VMS */ # include # endif /* VMS */ # else /* !HAVE_XMU */ # include "xmu.h" #endif /* !HAVE_XMU */ #ifdef HAVE_XIDLE_EXTENSION #include #endif /* HAVE_XIDLE_EXTENSION */ #ifdef HAVE_MIT_SAVER_EXTENSION #include #endif /* HAVE_MIT_SAVER_EXTENSION */ #ifdef HAVE_SGI_SAVER_EXTENSION #include #endif /* HAVE_SGI_SAVER_EXTENSION */ #ifdef HAVE_RANDR #include #endif /* HAVE_RANDR */ #include "xscreensaver.h" #undef ABS #define ABS(x)((x)<0?-(x):(x)) #undef MAX #define MAX(x,y)((x)>(y)?(x):(y)) #ifdef HAVE_PROC_INTERRUPTS static Bool proc_interrupts_activity_p (saver_info *si); #endif /* HAVE_PROC_INTERRUPTS */ static void check_for_clock_skew (saver_info *si); void idle_timer (XtPointer closure, XtIntervalId *id) { saver_info *si = (saver_info *) closure; /* What an amazingly shitty design. Not only does Xt execute timeout events from XtAppNextEvent() instead of from XtDispatchEvent(), but there is no way to tell Xt to block until there is an X event OR a timeout happens. Once your timeout proc is called, XtAppNextEvent() still won't return until a "real" X event comes in. So this function pushes a stupid, gratuitous, unnecessary event back on the event queue to force XtAppNextEvent to return Right Fucking Now. When the code in sleep_until_idle() sees an event of type XAnyEvent, which the server never generates, it knows that a timeout has occurred. */ XEvent fake_event; fake_event.type = 0; /* XAnyEvent type, ignored. */ fake_event.xany.display = si->dpy; fake_event.xany.window = 0; XPutBackEvent (si->dpy, &fake_event); /* If we are the timer that just went off, clear the pointer to the id. */ if (id) { if (si->timer_id && *id != si->timer_id) abort(); /* oops, scheduled timer twice?? */ si->timer_id = 0; } } void schedule_wakeup_event (saver_info *si, Time when, Bool verbose_p) { if (si->timer_id) { if (verbose_p) fprintf (stderr, "%s: idle_timer already running\n", blurb()); return; } /* Wake up periodically to ask the server if we are idle. */ si->timer_id = XtAppAddTimeOut (si->app, when, idle_timer, (XtPointer) si); if (verbose_p) fprintf (stderr, "%s: starting idle_timer (%ld, %ld)\n", blurb(), when, si->timer_id); } static void notice_events (saver_info *si, Window window, Bool top_p) { saver_preferences *p = &si->prefs; XWindowAttributes attrs; unsigned long events; Window root, parent, *kids; unsigned int nkids; int screen_no; if (XtWindowToWidget (si->dpy, window)) /* If it's one of ours, don't mess up its event mask. */ return; if (!XQueryTree (si->dpy, window, &root, &parent, &kids, &nkids)) return; if (window == root) top_p = False; /* Figure out which screen this window is on, for the diagnostics. */ for (screen_no = 0; screen_no < si->nscreens; screen_no++) if (root == RootWindowOfScreen (si->screens[screen_no].screen)) break; XGetWindowAttributes (si->dpy, window, &attrs); events = ((attrs.all_event_masks | attrs.do_not_propagate_mask) & (KeyPressMask | PropertyChangeMask)); /* Select for SubstructureNotify on all windows. Select for PropertyNotify on all windows. Select for KeyPress on all windows that already have it selected. Note that we can't select for ButtonPress, because of X braindamage: only one client at a time may select for ButtonPress on a given window, though any number can select for KeyPress. Someone explain *that* to me. So, if the user spends a while clicking the mouse without ever moving the mouse or touching the keyboard, we won't know that they've been active, and the screensaver will come on. That sucks, but I don't know how to get around it. Since X presents mouse wheels as clicks, this applies to those, too: scrolling through a document using only the mouse wheel doesn't count as activity... Fortunately, /proc/interrupts helps, on systems that have it. Oh, if it's a PS/2 mouse, not serial or USB. This sucks! */ XSelectInput (si->dpy, window, SubstructureNotifyMask | PropertyChangeMask | events); if (top_p && p->debug_p && (events & KeyPressMask)) { /* Only mention one window per tree (hack hack). */ fprintf (stderr, "%s: %d: selected KeyPress on 0x%lX\n", blurb(), screen_no, (unsigned long) window); top_p = False; } if (kids) { while (nkids) notice_events (si, kids [--nkids], top_p); XFree ((char *) kids); } } int BadWindow_ehandler (Display *dpy, XErrorEvent *error) { /* When we notice a window being created, we spawn a timer that waits 30 seconds or so, and then selects events on that window. This error handler is used so that we can cope with the fact that the window may have been destroyed <30 seconds after it was created. */ if (error->error_code == BadWindow || error->error_code == BadMatch || error->error_code == BadDrawable) return 0; else return saver_ehandler (dpy, error); } struct notice_events_timer_arg { saver_info *si; Window w; }; static void notice_events_timer (XtPointer closure, XtIntervalId *id) { struct notice_events_timer_arg *arg = (struct notice_events_timer_arg *) closure; XErrorHandler old_handler = XSetErrorHandler (BadWindow_ehandler); saver_info *si = arg->si; Window window = arg->w; free(arg); notice_events (si, window, True); XSync (si->dpy, False); XSetErrorHandler (old_handler); } void start_notice_events_timer (saver_info *si, Window w, Bool verbose_p) { saver_preferences *p = &si->prefs; struct notice_events_timer_arg *arg = (struct notice_events_timer_arg *) malloc(sizeof(*arg)); arg->si = si; arg->w = w; XtAppAddTimeOut (si->app, p->notice_events_timeout, notice_events_timer, (XtPointer) arg); if (verbose_p) fprintf (stderr, "%s: starting notice_events_timer for 0x%X (%lu)\n", blurb(), (unsigned int) w, p->notice_events_timeout); } /* When the screensaver is active, this timer will periodically change the running program. */ void cycle_timer (XtPointer closure, XtIntervalId *id) { saver_info *si = (saver_info *) closure; saver_preferences *p = &si->prefs; Time how_long = p->cycle; if (si->selection_mode > 0 && screenhack_running_p (si)) /* If we're in "SELECT n" mode, the cycle timer going off will just restart this same hack again. There's not much point in doing this every 5 or 10 minutes, but on the other hand, leaving one hack running for days is probably not a great idea, since they tend to leak and/or crash. So, restart the thing once an hour. */ how_long = 1000 * 60 * 60; if (si->dbox_up_p) { if (p->verbose_p) fprintf (stderr, "%s: dialog box up; delaying hack change.\n", blurb()); how_long = 30000; /* 30 secs */ } else { int i; maybe_reload_init_file (si); for (i = 0; i < si->nscreens; i++) kill_screenhack (&si->screens[i]); raise_window (si, True, True, False); if (!si->throttled_p) for (i = 0; i < si->nscreens; i++) spawn_screenhack (&si->screens[i]); else { if (p->verbose_p) fprintf (stderr, "%s: not launching new hack (throttled.)\n", blurb()); } } if (how_long > 0) { si->cycle_id = XtAppAddTimeOut (si->app, how_long, cycle_timer, (XtPointer) si); if (p->debug_p) fprintf (stderr, "%s: starting cycle_timer (%ld, %ld)\n", blurb(), how_long, si->cycle_id); } else { if (p->debug_p) fprintf (stderr, "%s: not starting cycle_timer: how_long == %ld\n", blurb(), (unsigned long) how_long); } } void activate_lock_timer (XtPointer closure, XtIntervalId *id) { saver_info *si = (saver_info *) closure; saver_preferences *p = &si->prefs; if (p->verbose_p) fprintf (stderr, "%s: timed out; activating lock.\n", blurb()); set_locked_p (si, True); } /* Call this when user activity (or "simulated" activity) has been noticed. */ void reset_timers (saver_info *si) { saver_preferences *p = &si->prefs; if (si->using_mit_saver_extension || si->using_sgi_saver_extension) return; if (si->timer_id) { if (p->debug_p) fprintf (stderr, "%s: killing idle_timer (%ld, %ld)\n", blurb(), p->timeout, si->timer_id); XtRemoveTimeOut (si->timer_id); si->timer_id = 0; } schedule_wakeup_event (si, p->timeout, p->debug_p); /* sets si->timer_id */ if (si->cycle_id) abort (); /* no cycle timer when inactive */ si->last_activity_time = time ((time_t *) 0); /* This will (hopefully, supposedly) tell the server to re-set its DPMS timer. Without this, the -deactivate clientmessage would prevent xscreensaver from blanking, but would not prevent the monitor from powering down. */ #if 0 /* #### With some servers, this causes the screen to flicker every time a key is pressed! Ok, I surrender. I give up on ever having DPMS work properly. */ XForceScreenSaver (si->dpy, ScreenSaverReset); /* And if the monitor is already powered off, turn it on. You'd think the above would do that, but apparently not? */ monitor_power_on (si, True); #endif } /* Returns true if a mouse has moved since the last time we checked. Small motions (of less than "hysteresis" pixels/second) are ignored. */ static Bool device_pointer_moved_p (saver_info *si, poll_mouse_data *last_poll_mouse, poll_mouse_data *this_poll_mouse, Bool mods_p, const char *debug_type, int debug_id) { saver_preferences *p = &si->prefs; unsigned int distance, dps; unsigned long seconds = 0; Bool moved_p = False; distance = MAX (ABS (last_poll_mouse->root_x - this_poll_mouse->root_x), ABS (last_poll_mouse->root_y - this_poll_mouse->root_y)); seconds = (this_poll_mouse->time - last_poll_mouse->time); /* When the screen is blanked, we get MotionNotify events, but when not blanked, we poll only every 5 seconds, and that's not enough resolution to do hysteresis based on a 1 second interval. So, assume that any motion we've seen during the 5 seconds when our eyes were closed happened in the last 1 second instead. */ if (seconds > 1) seconds = 1; dps = (seconds <= 0 ? distance : (distance / seconds)); /* Motion only counts if the rate is more than N pixels per second. */ if (dps >= p->pointer_hysteresis && distance > 0) moved_p = True; /* If the mouse is not on this screen but used to be, that's motion. If the mouse was not on this screen, but is now, that's motion. */ { Bool on_screen_p = (this_poll_mouse->root_x != -1 && this_poll_mouse->root_y != -1); Bool was_on_screen_p = (last_poll_mouse->root_x != -1 && last_poll_mouse->root_y != -1); if (on_screen_p != was_on_screen_p) moved_p = True; } if (p->debug_p && (distance != 0 || moved_p)) { fprintf (stderr, "%s: %s %d: pointer %s", blurb(), debug_type, debug_id, (moved_p ? "moved: " : "ignored:")); if (last_poll_mouse->root_x == -1) fprintf (stderr, "off screen"); else fprintf (stderr, "%d,%d", last_poll_mouse->root_x, last_poll_mouse->root_y); fprintf (stderr, " -> "); if (this_poll_mouse->root_x == -1) fprintf (stderr, "off screen"); else fprintf (stderr, "%d,%d", this_poll_mouse->root_x, this_poll_mouse->root_y); if (last_poll_mouse->root_x != -1 && this_poll_mouse->root_x != -1) fprintf (stderr, " (%d,%d; %d/%lu=%d)", ABS(last_poll_mouse->root_x - this_poll_mouse->root_x), ABS(last_poll_mouse->root_y - this_poll_mouse->root_y), distance, seconds, dps); fprintf (stderr, ".\n"); } if (!moved_p && mods_p && this_poll_mouse->mask != last_poll_mouse->mask) { moved_p = True; if (p->debug_p) fprintf (stderr, "%s: %s %d: modifiers changed: 0x%04x -> 0x%04x.\n", blurb(), debug_type, debug_id, last_poll_mouse->mask, this_poll_mouse->mask); } last_poll_mouse->child = this_poll_mouse->child; last_poll_mouse->mask = this_poll_mouse->mask; if (moved_p || seconds > 0) { last_poll_mouse->time = this_poll_mouse->time; last_poll_mouse->root_x = this_poll_mouse->root_x; last_poll_mouse->root_y = this_poll_mouse->root_y; } return moved_p; } /* Returns true if core mouse pointer has moved since the last time we checked. */ static Bool pointer_moved_p (saver_screen_info *ssi, Bool mods_p) { saver_info *si = ssi->global; Window root; poll_mouse_data this_poll_mouse; int x, y; /* don't check xinerama pseudo-screens. */ if (!ssi->real_screen_p) return False; this_poll_mouse.time = time ((time_t *) 0); if (!XQueryPointer (si->dpy, ssi->screensaver_window, &root, &this_poll_mouse.child, &this_poll_mouse.root_x, &this_poll_mouse.root_y, &x, &y, &this_poll_mouse.mask)) { /* If XQueryPointer() returns false, the mouse is not on this screen. */ this_poll_mouse.root_x = -1; this_poll_mouse.root_y = -1; this_poll_mouse.child = 0; this_poll_mouse.mask = 0; } else si->last_activity_screen = ssi; return device_pointer_moved_p(si, &(ssi->last_poll_mouse), &this_poll_mouse, mods_p, "screen", ssi->number); } /* When we aren't using a server extension, this timer is used to periodically wake up and poll the mouse position, which is possibly more reliable than selecting motion events on every window. */ static void check_pointer_timer (XtPointer closure, XtIntervalId *id) { int i; saver_info *si = (saver_info *) closure; saver_preferences *p = &si->prefs; Bool active_p = False; if (!si->using_proc_interrupts && (si->using_xidle_extension || si->using_mit_saver_extension || si->using_sgi_saver_extension)) /* If an extension is in use, we should not be polling the mouse. Unless we're also checking /proc/interrupts, in which case, we should. */ abort (); if (id && *id == si->check_pointer_timer_id) /* this is us - it's expired */ si->check_pointer_timer_id = 0; if (si->check_pointer_timer_id) /* only queue one at a time */ XtRemoveTimeOut (si->check_pointer_timer_id); si->check_pointer_timer_id = /* now re-queue */ XtAppAddTimeOut (si->app, p->pointer_timeout, check_pointer_timer, (XtPointer) si); for (i = 0; i < si->nscreens; i++) { saver_screen_info *ssi = &si->screens[i]; if (pointer_moved_p (ssi, True)) active_p = True; } #ifdef HAVE_PROC_INTERRUPTS if (!active_p && si->using_proc_interrupts && proc_interrupts_activity_p (si)) { active_p = True; } #endif /* HAVE_PROC_INTERRUPTS */ if (active_p) reset_timers (si); check_for_clock_skew (si); } /* An unfortunate situation is this: the saver is not active, because the user has been typing. The machine is a laptop. The user closes the lid and suspends it. The CPU halts. Some hours later, the user opens the lid. At this point, Xt's timers will fire, and xscreensaver will blank the screen. So far so good -- well, not really, but it's the best that we can do, since the OS doesn't send us a signal *before* shutdown -- but if the user had delayed locking (lockTimeout > 0) then we should start off in the locked state, rather than only locking N minutes from when the lid was opened. Also, eschewing fading is probably a good idea, to clamp down as soon as possible. We only do this when we'd be polling the mouse position anyway. This amounts to an assumption that machines with APM support also have /proc/interrupts. */ static void check_for_clock_skew (saver_info *si) { saver_preferences *p = &si->prefs; time_t now = time ((time_t *) 0); long shift = now - si->last_wall_clock_time; if (p->debug_p) { int i = (si->last_wall_clock_time == 0 ? 0 : shift); fprintf (stderr, "%s: checking wall clock for hibernation (%d:%02d:%02d).\n", blurb(), (i / (60 * 60)), ((i / 60) % 60), (i % 60)); } if (si->last_wall_clock_time != 0 && shift > (p->timeout / 1000)) { if (p->verbose_p) fprintf (stderr, "%s: wall clock has jumped by %ld:%02ld:%02ld%s\n", blurb(), (shift / (60 * 60)), ((shift / 60) % 60), (shift % 60), (p->mode == DONT_BLANK ? " while saver disabled" : "")); /* If the saver is entirely disabled, there's no need to do the emergency-blank-and-lock thing. */ if (p->mode != DONT_BLANK) { si->emergency_lock_p = True; idle_timer ((XtPointer) si, 0); } } si->last_wall_clock_time = now; } static void dispatch_event (saver_info *si, XEvent *event) { /* If this is for the splash dialog, pass it along. Note that the password dialog is handled with its own event loop, so events for that window will never come through here. */ if (si->splash_dialog && event->xany.window == si->splash_dialog) handle_splash_event (si, event); XtDispatchEvent (event); } static void swallow_unlock_typeahead_events (saver_info *si, XEvent *e) { XEvent event; char buf [100]; int i = 0; memset (buf, 0, sizeof(buf)); event = *e; do { if (event.xany.type == KeyPress) { char s[2]; int size = XLookupString ((XKeyEvent *) &event, s, 1, 0, 0); if (size != 1) continue; switch (*s) { case '\010': case '\177': /* Backspace */ if (i > 0) i--; break; case '\025': case '\030': /* Erase line */ case '\012': case '\015': /* Enter */ case '\033': /* ESC */ i = 0; break; case '\040': /* Space */ if (i == 0) break; /* ignore space at beginning of line */ /* else, fall through */ default: buf [i++] = *s; break; } } } while (i < sizeof(buf)-1 && XCheckMaskEvent (si->dpy, KeyPressMask, &event)); buf[i] = 0; if (si->unlock_typeahead) { memset (si->unlock_typeahead, 0, strlen(si->unlock_typeahead)); free (si->unlock_typeahead); } if (i > 0) si->unlock_typeahead = strdup (buf); else si->unlock_typeahead = 0; memset (buf, 0, sizeof(buf)); } /* methods of detecting idleness: explicitly informed by SGI SCREEN_SAVER server event; explicitly informed by MIT-SCREEN-SAVER server event; poll server idle time with XIDLE extension; select events on all windows, and note absence of recent events; note that /proc/interrupts has not changed in a while; activated by clientmessage. methods of detecting non-idleness: read events on the xscreensaver window; explicitly informed by SGI SCREEN_SAVER server event; explicitly informed by MIT-SCREEN-SAVER server event; select events on all windows, and note events on any of them; note that a client updated their window's _NET_WM_USER_TIME property; note that /proc/interrupts has changed; deactivated by clientmessage. I trust that explains why this function is a big hairy mess. */ void sleep_until_idle (saver_info *si, Bool until_idle_p) { saver_preferences *p = &si->prefs; /* We have to go through this union bullshit because gcc-4.4.0 has stricter struct-aliasing rules. Without this, the optimizer can fuck things up. */ union { XEvent x_event; # ifdef HAVE_RANDR XRRScreenChangeNotifyEvent xrr_event; # endif /* HAVE_RANDR */ # ifdef HAVE_MIT_SAVER_EXTENSION XScreenSaverNotifyEvent sevent; # endif /* HAVE_MIT_SAVER_EXTENSION */ } event; /* We need to select events on all windows if we're not using any extensions. Otherwise, we don't need to. */ Bool scanning_all_windows = !(si->using_xidle_extension || si->using_mit_saver_extension || si->using_sgi_saver_extension); /* We need to periodically wake up and check for idleness if we're not using any extensions, or if we're using the XIDLE extension. The other two extensions explicitly deliver events when we go idle/non-idle, so we don't need to poll. */ Bool polling_for_idleness = !(si->using_mit_saver_extension || si->using_sgi_saver_extension); /* Whether we need to periodically wake up and check to see if the mouse has moved. We only need to do this when not using any extensions. The reason this isn't the same as `polling_for_idleness' is that the "idleness" poll can happen (for example) 5 minutes from now, whereas the mouse-position poll should happen with low periodicity. We don't need to poll the mouse position with the XIDLE extension, but we do need to periodically wake up and query the server with that extension. For our purposes, polling /proc/interrupts is just like polling the mouse position. It has to happen on the same kind of schedule. */ Bool polling_mouse_position = (si->using_proc_interrupts || !(si->using_xidle_extension || si->using_mit_saver_extension || si->using_sgi_saver_extension) || si->using_xinput_extension); const char *why = 0; /* What caused the idle-state to change? */ if (until_idle_p) { if (polling_for_idleness) /* This causes a no-op event to be delivered to us in a while, so that we come back around through the event loop again. */ schedule_wakeup_event (si, p->timeout, p->debug_p); if (polling_mouse_position) /* Check to see if the mouse has moved, and set up a repeating timer to do so periodically (typically, every 5 seconds.) */ check_pointer_timer ((XtPointer) si, 0); } while (1) { XtAppNextEvent (si->app, &event.x_event); switch (event.x_event.xany.type) { case 0: /* our synthetic "timeout" event has been signalled */ if (until_idle_p) { Time idle; /* We may be idle; check one last time to see if the mouse has moved, just in case the idle-timer went off within the 5 second window between mouse polling. If the mouse has moved, then check_pointer_timer() will reset last_activity_time. */ if (polling_mouse_position) check_pointer_timer ((XtPointer) si, 0); #ifdef HAVE_XIDLE_EXTENSION if (si->using_xidle_extension) { /* The XIDLE extension uses the synthetic event to prod us into re-asking the server how long the user has been idle. */ if (! XGetIdleTime (si->dpy, &idle)) { fprintf (stderr, "%s: XGetIdleTime() failed.\n", blurb()); saver_exit (si, 1, 0); } } else #endif /* HAVE_XIDLE_EXTENSION */ #ifdef HAVE_MIT_SAVER_EXTENSION if (si->using_mit_saver_extension) { /* We don't need to do anything in this case - the synthetic event isn't necessary, as we get sent specific events to wake us up. In fact, this event generally shouldn't be being delivered when the MIT extension is in use. */ idle = 0; } else #endif /* HAVE_MIT_SAVER_EXTENSION */ #ifdef HAVE_SGI_SAVER_EXTENSION if (si->using_sgi_saver_extension) { /* We don't need to do anything in this case - the synthetic event isn't necessary, as we get sent specific events to wake us up. In fact, this event generally shouldn't be being delivered when the SGI extension is in use. */ idle = 0; } else #endif /* HAVE_SGI_SAVER_EXTENSION */ { /* Otherwise, no server extension is in use. The synthetic event was to tell us to wake up and see if the user is now idle. Compute the amount of idle time by comparing the `last_activity_time' to the wall clock. The l_a_t was set by calling `reset_timers()', which is called only in only two situations: when polling the mouse position has revealed the the mouse has moved (user activity) or when we have read an event (again, user activity.) */ idle = 1000 * (si->last_activity_time - time ((time_t *) 0)); } if (idle >= p->timeout) { /* Look, we've been idle long enough. We're done. */ why = "timeout"; goto DONE; } else if (si->emergency_lock_p) { /* Oops, the wall clock has jumped far into the future, so we need to lock down in a hurry! */ why = "large wall clock change"; goto DONE; } else { /* The event went off, but it turns out that the user has not yet been idle for long enough. So re-signal the event. Be economical: if we should blank after 5 minutes, and the user has been idle for 2 minutes, then set this timer to go off in 3 minutes. */ if (polling_for_idleness) schedule_wakeup_event (si, p->timeout - idle, p->debug_p); } } break; case ClientMessage: if (handle_clientmessage (si, &event.x_event, until_idle_p)) { why = "ClientMessage"; goto DONE; } break; case CreateNotify: /* A window has been created on the screen somewhere. If we're supposed to scan all windows for events, prepare this window. */ if (scanning_all_windows) { Window w = event.x_event.xcreatewindow.window; start_notice_events_timer (si, w, p->debug_p); } break; case KeyPress: case ButtonPress: /* Ignore release events so that hitting ESC at the password dialog doesn't result in the password dialog coming right back again when the fucking release key is seen! */ /* case KeyRelease:*/ /* case ButtonRelease:*/ case MotionNotify: if (p->debug_p) { Window root=0, window=0; int x=-1, y=-1; const char *type = 0; if (event.x_event.xany.type == MotionNotify) { /*type = "MotionNotify";*/ root = event.x_event.xmotion.root; window = event.x_event.xmotion.window; x = event.x_event.xmotion.x_root; y = event.x_event.xmotion.y_root; } else if (event.x_event.xany.type == KeyPress) { type = "KeyPress"; root = event.x_event.xkey.root; window = event.x_event.xkey.window; x = y = -1; } else if (event.x_event.xany.type == ButtonPress) { type = "ButtonPress"; root = event.x_event.xkey.root; window = event.x_event.xkey.window; x = event.x_event.xmotion.x_root; y = event.x_event.xmotion.y_root; } if (type) { int i; for (i = 0; i < si->nscreens; i++) if (root == RootWindowOfScreen (si->screens[i].screen)) break; fprintf (stderr,"%s: %d: %s on 0x%lx", blurb(), i, type, (unsigned long) window); /* Be careful never to do this unless in -debug mode, as this could expose characters from the unlock password. */ if (p->debug_p && event.x_event.xany.type == KeyPress) { KeySym keysym; char c = 0; XLookupString (&event.x_event.xkey, &c, 1, &keysym, 0); fprintf (stderr, " (%s%s)", (event.x_event.xkey.send_event ? "synthetic " : ""), XKeysymToString (keysym)); } if (x == -1) fprintf (stderr, "\n"); else fprintf (stderr, " at %d,%d.\n", x, y); } } /* If any widgets want to handle this event, let them. */ dispatch_event (si, &event.x_event); /* If we got a MotionNotify event, figure out what screen it was on and poll the mouse there: if the mouse hasn't moved far enough to count as "real" motion, then ignore this event. */ if (event.x_event.xany.type == MotionNotify) { int i; for (i = 0; i < si->nscreens; i++) if (event.x_event.xmotion.root == RootWindowOfScreen (si->screens[i].screen)) break; if (i < si->nscreens) { if (!pointer_moved_p (&si->screens[i], False)) continue; } } /* We got a user event. If we're waiting for the user to become active, this is it. If we're waiting until the user becomes idle, reset the timers (since now we have longer to wait.) */ if (!until_idle_p) { if (si->demoing_p && (event.x_event.xany.type == MotionNotify || event.x_event.xany.type == KeyRelease)) /* When we're demoing a single hack, mouse motion doesn't cause deactivation. Only clicks and keypresses do. */ ; else { /* If we're not demoing, then any activity causes deactivation. */ why = (event.x_event.xany.type == MotionNotify ?"mouse motion": event.x_event.xany.type == KeyPress?"keyboard activity": event.x_event.xany.type == ButtonPress ? "mouse click" : "unknown user activity"); goto DONE; } } else reset_timers (si); break; case PropertyNotify: /* Starting in late 2014, GNOME programs don't actually select for or receive KeyPress events: they do it behind the scenes through some kind of Input Method magic, even when running in an en_US locale. However, those applications *do* update the WM_USER_TIME property on their own windows every time they recieve a secret KeyPress, so we must *also* monitor that property on every window, and treat changes to it as identical to KeyPress. _NET_WM_USER_TIME is documented (such as it is) here: http://standards.freedesktop.org/wm-spec/latest/ar01s05.html #idm139870829932528 Specifically: "Contains the XServer time at which last user activity in this window took place. [...] A client [...] might, for example, use the timestamp of the last KeyPress or ButtonPress event." As of early 2016, KDE4 does something really stupid, though: some hidden power management thing reduces the display brightness 150 seconds after the screen is blanked -- and sets a WM_USER_TIME property on a hidden "kded4" window whose time is in the distant past (the time at which the X server launched). So we ignore any WM_USER_TIME whose timestamp is more than a couple seconds old. */ if (event.x_event.xproperty.state == PropertyNewValue && event.x_event.xproperty.atom == XA_NET_WM_USER_TIME) { int threshold = 2; /* seconds */ Bool bogus_p = True; Window w = event.x_event.xproperty.window; Atom type; int format; unsigned long nitems, bytesafter; unsigned char *data = 0; Cardinal user_time = 0; XErrorHandler old_handler = XSetErrorHandler (BadWindow_ehandler); if (XGetWindowProperty (si->dpy, w, XA_NET_WM_USER_TIME, 0L, 1L, False, XA_CARDINAL, &type, &format, &nitems, &bytesafter, &data) == Success && data && type == XA_CARDINAL && format == 32 && nitems == 1) { long diff; user_time = ((Cardinal *) data)[0]; diff = event.x_event.xproperty.time - user_time; if (diff >= 0 && diff < threshold) bogus_p = False; } if (data) XFree (data); why = "WM_USER_TIME"; if (p->debug_p) { XWindowAttributes xgwa; int i; XGetWindowAttributes (si->dpy, w, &xgwa); for (i = 0; i < si->nscreens; i++) if (xgwa.root == RootWindowOfScreen (si->screens[i].screen)) break; fprintf (stderr,"%s: %d: %s = %ld%s on 0x%lx\n", blurb(), i, why, (unsigned long) user_time, (bogus_p ? " (bad)" : ""), (unsigned long) w); } XSync (si->dpy, False); XSetErrorHandler (old_handler); if (bogus_p) break; else if (until_idle_p) reset_timers (si); else goto DONE; } break; default: #ifdef HAVE_MIT_SAVER_EXTENSION if (event.x_event.type == si->mit_saver_ext_event_number) { /* This event's number is that of the MIT-SCREEN-SAVER server extension. This extension has one event number, and the event itself contains sub-codes that say what kind of event it was (an "idle" or "not-idle" event.) */ if (event.sevent.state == ScreenSaverOn) { int i = 0; if (p->verbose_p) fprintf (stderr, "%s: MIT ScreenSaverOn event received.\n", blurb()); /* Get the "real" server window(s) out of the way as soon as possible. */ for (i = 0; i < si->nscreens; i++) { saver_screen_info *ssi = &si->screens[i]; if (ssi->server_mit_saver_window && window_exists_p (si->dpy, ssi->server_mit_saver_window)) XUnmapWindow (si->dpy, ssi->server_mit_saver_window); } if (event.sevent.kind != ScreenSaverExternal) { fprintf (stderr, "%s: ScreenSaverOn event wasn't of type External!\n", blurb()); } if (until_idle_p) { why = "MIT ScreenSaverOn"; goto DONE; } } else if (event.sevent.state == ScreenSaverOff) { if (p->verbose_p) fprintf (stderr, "%s: MIT ScreenSaverOff event received.\n", blurb()); if (!until_idle_p) { why = "MIT ScreenSaverOff"; goto DONE; } } else fprintf (stderr, "%s: unknown MIT-SCREEN-SAVER event %d received!\n", blurb(), event.sevent.state); } else #endif /* HAVE_MIT_SAVER_EXTENSION */ #ifdef HAVE_SGI_SAVER_EXTENSION if (event.x_event.type == (si->sgi_saver_ext_event_number + ScreenSaverStart)) { /* The SGI SCREEN_SAVER server extension has two event numbers, and this event matches the "idle" event. */ if (p->verbose_p) fprintf (stderr, "%s: SGI ScreenSaverStart event received.\n", blurb()); if (until_idle_p) { why = "SGI ScreenSaverStart"; goto DONE; } } else if (event.x_event.type == (si->sgi_saver_ext_event_number + ScreenSaverEnd)) { /* The SGI SCREEN_SAVER server extension has two event numbers, and this event matches the "idle" event. */ if (p->verbose_p) fprintf (stderr, "%s: SGI ScreenSaverEnd event received.\n", blurb()); if (!until_idle_p) { why = "SGI ScreenSaverEnd"; goto DONE; } } else #endif /* HAVE_SGI_SAVER_EXTENSION */ #ifdef HAVE_XINPUT /* If we got a MotionNotify event, check to see if the mouse has moved far enough to count as "real" motion, if not, then ignore this event. */ if ((si->num_xinput_devices > 0) && (event.x_event.type == si->xinput_DeviceMotionNotify)) { XDeviceMotionEvent *dme = (XDeviceMotionEvent *) &event; poll_mouse_data *last_poll_mouse = NULL; int d; for (d = 0; d < si->num_xinput_devices; d++) { if (si->xinput_devices[d].device->device_id == dme->deviceid) { last_poll_mouse = &(si->xinput_devices[d].last_poll_mouse); break; } } if (last_poll_mouse) { poll_mouse_data this_poll_mouse; this_poll_mouse.root_x = dme->x_root; this_poll_mouse.root_y = dme->y_root; this_poll_mouse.child = dme->subwindow; this_poll_mouse.mask = dme->device_state; this_poll_mouse.time = dme->time / 1000; /* milliseconds */ if (!device_pointer_moved_p (si, last_poll_mouse, &this_poll_mouse, False, "device", dme->deviceid)) continue; } else if (p->debug_p) fprintf (stderr, "%s: received MotionNotify from unknown device %d\n", blurb(), (int) dme->deviceid); } if ((!until_idle_p) && (si->num_xinput_devices > 0) && (event.x_event.type == si->xinput_DeviceMotionNotify || event.x_event.type == si->xinput_DeviceButtonPress)) /* Ignore DeviceButtonRelease, see ButtonRelease comment above. */ { dispatch_event (si, &event.x_event); if (si->demoing_p && event.x_event.type == si->xinput_DeviceMotionNotify) /* When we're demoing a single hack, mouse motion doesn't cause deactivation. Only clicks and keypresses do. */ ; else /* If we're not demoing, then any activity causes deactivation. */ { why = (event.x_event.type == si->xinput_DeviceMotionNotify ? "XI mouse motion" : event.x_event.type == si->xinput_DeviceButtonPress ? "XI mouse click" : "unknown XINPUT event"); goto DONE; } } else #endif /* HAVE_XINPUT */ #ifdef HAVE_RANDR if (si->using_randr_extension && (event.x_event.type == (si->randr_event_number + RRScreenChangeNotify))) { /* The Resize and Rotate extension sends an event when the size, rotation, or refresh rate of any screen has changed. */ if (p->verbose_p) { /* XRRRootToScreen is in Xrandr.h 1.4, 2001/06/07 */ int screen = XRRRootToScreen (si->dpy, event.xrr_event.window); fprintf (stderr, "%s: %d: screen change event received\n", blurb(), screen); } # ifdef RRScreenChangeNotifyMask /* Inform Xlib that it's ok to update its data structures. */ XRRUpdateConfiguration (&event.x_event); /* Xrandr.h 1.9, 2002/09/29 */ # endif /* RRScreenChangeNotifyMask */ /* Resize the existing xscreensaver windows and cached ssi data. */ if (update_screen_layout (si)) { if (p->verbose_p) { fprintf (stderr, "%s: new layout:\n", blurb()); describe_monitor_layout (si); } resize_screensaver_window (si); } } else #endif /* HAVE_RANDR */ /* Just some random event. Let the Widgets handle it, if desired. */ dispatch_event (si, &event.x_event); } } DONE: if (p->verbose_p) { if (! why) why = "unknown reason"; fprintf (stderr, "%s: %s (%s)\n", blurb(), (until_idle_p ? "user is idle" : "user is active"), why); } /* If there's a user event on the queue, swallow it. If we're using a server extension, and the user becomes active, we get the extension event before the user event -- so the keypress or motion or whatever is still on the queue. This makes "unfade" not work, because it sees that event, and bugs out. (This problem doesn't exhibit itself without an extension, because in that case, there's only one event generated by user activity, not two.) */ if (!until_idle_p && si->locked_p) swallow_unlock_typeahead_events (si, &event.x_event); else while (XCheckMaskEvent (si->dpy, (KeyPressMask|ButtonPressMask|PointerMotionMask), &event.x_event)) ; if (si->check_pointer_timer_id) { XtRemoveTimeOut (si->check_pointer_timer_id); si->check_pointer_timer_id = 0; } if (si->timer_id) { XtRemoveTimeOut (si->timer_id); si->timer_id = 0; } if (until_idle_p && si->cycle_id) /* no cycle timer when inactive */ abort (); } /* Some crap for dealing with /proc/interrupts. On Linux systems, it's possible to see the hardware interrupt count associated with the keyboard. We can therefore use that as another method of detecting idleness. Why is it a good idea to do this? Because it lets us detect keyboard activity that is not associated with X events. For example, if the user has switched to another virtual console, it's good for xscreensaver to not be running graphics hacks on the (non-visible) X display. The common complaint that checking /proc/interrupts addresses is that the user is playing Quake on a non-X console, and the GL hacks are perceptibly slowing the game... This is tricky for a number of reasons. * First, we must be sure to only do this when running on an X server that is on the local machine (because otherwise, we'd be reacting to the wrong keyboard.) The way we do this is by noting that the $DISPLAY is pointing to display 0 on the local machine. It *could* be that display 1 is also on the local machine (e.g., two X servers, each on a different virtual-terminal) but it's also possible that screen 1 is an X terminal, using this machine as the host. So we can't take that chance. * Second, one can only access these interrupt numbers in a completely and utterly brain-damaged way. You would think that one would use an ioctl for this. But no. The ONLY way to get this information is to open the pseudo-file /proc/interrupts AS A FILE, and read the numbers out of it TEXTUALLY. Because this is Unix, and all the world's a file, and the only real data type is the short-line sequence of ASCII bytes. Now it's all well and good that the /proc/interrupts pseudo-file exists; that's a clever idea, and a useful API for things that are already textually oriented, like shell scripts, and users doing interactive debugging sessions. But to make a *C PROGRAM* open a file and parse the textual representation of integers out of it is just insane. * Third, you can't just hold the file open, and fseek() back to the beginning to get updated data! If you do that, the data never changes. And I don't want to call open() every five seconds, because I don't want to risk going to disk for any inodes. It turns out that if you dup() it early, then each copy gets fresh data, so we can get around that in this way (but for how many releases, one might wonder?) * Fourth, the format of the output of the /proc/interrupts file is undocumented, and has changed several times already! In Linux 2.0.33, even on a multiprocessor machine, it looks like this: 0: 309453991 timer 1: 4771729 keyboard but in Linux 2.2 and 2.4 kernels with MP machines, it looks like this: CPU0 CPU1 0: 1671450 1672618 IO-APIC-edge timer 1: 13037 13495 IO-APIC-edge keyboard and in Linux 2.6, it's gotten even goofier: now there are two lines labelled "i8042". One of them is the keyboard, and one of them is the PS/2 mouse -- and of course, you can't tell them apart, except by wiggling the mouse and noting which one changes: CPU0 CPU1 1: 32051 30864 IO-APIC-edge i8042 12: 476577 479913 IO-APIC-edge i8042 Joy! So how are we expected to parse that? Well, this code doesn't parse it: it saves the first line with the string "keyboard" (or "i8042") in it, and does a string-comparison to note when it has changed. If there are two "i8042" lines, we assume the first is the keyboard and the second is the mouse (doesn't matter which is which, really, as long as we don't compare them against each other.) Thanks to Nat Friedman for figuring out most of this crap. Note that if you have a serial or USB mouse, or a USB keyboard, it won't detect it. That's because there's no way to tell the difference between a serial mouse and a general serial port, and all USB devices look the same from here. It would be somewhat unfortunate to have the screensaver turn off when the modem on COM1 burped, or when a USB disk was accessed. */ #ifdef HAVE_PROC_INTERRUPTS #define PROC_INTERRUPTS "/proc/interrupts" Bool query_proc_interrupts_available (saver_info *si, const char **why) { /* We can use /proc/interrupts if $DISPLAY points to :0, and if the "/proc/interrupts" file exists and is readable. */ FILE *f; if (why) *why = 0; if (!display_is_on_console_p (si)) { if (why) *why = "not on primary console"; return False; } f = fopen (PROC_INTERRUPTS, "r"); if (!f) { if (why) *why = "does not exist"; return False; } fclose (f); return True; } static Bool proc_interrupts_activity_p (saver_info *si) { static FILE *f0 = 0; FILE *f1 = 0; int fd; static char last_kbd_line[255] = { 0, }; static char last_ptr_line[255] = { 0, }; char new_line[sizeof(last_kbd_line)]; Bool checked_kbd = False, kbd_changed = False; Bool checked_ptr = False, ptr_changed = False; int i8042_count = 0; if (!f0) { /* First time -- open the file. */ f0 = fopen (PROC_INTERRUPTS, "r"); if (!f0) { char buf[255]; sprintf(buf, "%s: error opening %s", blurb(), PROC_INTERRUPTS); perror (buf); goto FAIL; } # if defined(HAVE_FCNTL) && defined(FD_CLOEXEC) /* Close this fd upon exec instead of inheriting / leaking it. */ if (fcntl (fileno (f0), F_SETFD, FD_CLOEXEC) != 0) perror ("fcntl: CLOEXEC:"); # endif } if (f0 == (FILE *) -1) /* means we got an error initializing. */ return False; fd = dup (fileno (f0)); if (fd < 0) { char buf[255]; sprintf(buf, "%s: could not dup() the %s fd", blurb(), PROC_INTERRUPTS); perror (buf); goto FAIL; } f1 = fdopen (fd, "r"); if (!f1) { char buf[255]; sprintf(buf, "%s: could not fdopen() the %s fd", blurb(), PROC_INTERRUPTS); perror (buf); goto FAIL; } /* Actually, I'm unclear on why this fseek() is necessary, given the timing of the dup() above, but it is. */ if (fseek (f1, 0, SEEK_SET) != 0) { char buf[255]; sprintf(buf, "%s: error rewinding %s", blurb(), PROC_INTERRUPTS); perror (buf); goto FAIL; } /* Now read through the pseudo-file until we find the "keyboard", "PS/2 mouse", or "i8042" lines. */ while (fgets (new_line, sizeof(new_line)-1, f1)) { Bool i8042_p = !!strstr (new_line, "i8042"); if (i8042_p) i8042_count++; if (strchr (new_line, ',')) { /* Ignore any line that has a comma on it: this is because a setup like this: 12: 930935 XT-PIC usb-uhci, PS/2 Mouse is really bad news. It *looks* like we can note mouse activity from that line, but really, that interrupt gets fired any time any USB device has activity! So we have to ignore any shared IRQs. */ } else if (!checked_kbd && (strstr (new_line, "keyboard") || (i8042_p && i8042_count == 1))) { /* Assume the keyboard interrupt is the line that says "keyboard", or the *first* line that says "i8042". */ kbd_changed = (*last_kbd_line && !!strcmp (new_line, last_kbd_line)); strcpy (last_kbd_line, new_line); checked_kbd = True; } else if (!checked_ptr && (strstr (new_line, "PS/2 Mouse") || (i8042_p && i8042_count == 2))) { /* Assume the mouse interrupt is the line that says "PS/2 mouse", or the *second* line that says "i8042". */ ptr_changed = (*last_ptr_line && !!strcmp (new_line, last_ptr_line)); strcpy (last_ptr_line, new_line); checked_ptr = True; } if (checked_kbd && checked_ptr) break; } if (checked_kbd || checked_ptr) { fclose (f1); if (si->prefs.debug_p && (kbd_changed || ptr_changed)) fprintf (stderr, "%s: /proc/interrupts activity: %s\n", blurb(), ((kbd_changed && ptr_changed) ? "mouse and kbd" : kbd_changed ? "kbd" : ptr_changed ? "mouse" : "ERR")); return (kbd_changed || ptr_changed); } /* If we got here, we didn't find either a "keyboard" or a "PS/2 Mouse" line in the file at all. */ fprintf (stderr, "%s: no keyboard or mouse data in %s?\n", blurb(), PROC_INTERRUPTS); FAIL: if (f1) fclose (f1); if (f0 && f0 != (FILE *) -1) fclose (f0); f0 = (FILE *) -1; return False; } #endif /* HAVE_PROC_INTERRUPTS */ /* This timer goes off every few minutes, whether the user is idle or not, to try and clean up anything that has gone wrong. It calls disable_builtin_screensaver() so that if xset has been used, or some other program (like xlock) has messed with the XSetScreenSaver() settings, they will be set back to sensible values (if a server extension is in use, messing with xlock can cause xscreensaver to never get a wakeup event, and could cause monitor power-saving to occur, and all manner of heinousness.) If the screen is currently blanked, it raises the window, in case some other window has been mapped on top of it. If the screen is currently blanked, and there is no hack running, it clears the window, in case there is an error message printed on it (we don't want the error message to burn in.) */ static void watchdog_timer (XtPointer closure, XtIntervalId *id) { saver_info *si = (saver_info *) closure; saver_preferences *p = &si->prefs; disable_builtin_screensaver (si, False); /* If the DPMS settings on the server have changed, change them back to what ~/.xscreensaver says they should be. */ sync_server_dpms_settings (si->dpy, (p->dpms_enabled_p && p->mode != DONT_BLANK), p->dpms_quickoff_p, p->dpms_standby / 1000, p->dpms_suspend / 1000, p->dpms_off / 1000, False); if (si->screen_blanked_p) { Bool running_p = screenhack_running_p (si); if (si->dbox_up_p) { if (si->prefs.debug_p) fprintf (stderr, "%s: dialog box is up: not raising screen.\n", blurb()); } else { if (si->prefs.debug_p) fprintf (stderr, "%s: watchdog timer raising %sscreen.\n", blurb(), (running_p ? "" : "and clearing ")); raise_window (si, True, True, running_p); } if (screenhack_running_p (si) && !monitor_powered_on_p (si)) { int i; if (si->prefs.verbose_p) fprintf (stderr, "%s: X says monitor has powered down; " "killing running hacks.\n", blurb()); for (i = 0; i < si->nscreens; i++) kill_screenhack (&si->screens[i]); } /* Re-schedule this timer. The watchdog timer defaults to a bit less than the hack cycle period, but is never longer than one hour. */ si->watchdog_id = 0; reset_watchdog_timer (si, True); } } void reset_watchdog_timer (saver_info *si, Bool on_p) { saver_preferences *p = &si->prefs; if (si->watchdog_id) { XtRemoveTimeOut (si->watchdog_id); si->watchdog_id = 0; } if (on_p && p->watchdog_timeout) { si->watchdog_id = XtAppAddTimeOut (si->app, p->watchdog_timeout, watchdog_timer, (XtPointer) si); if (p->debug_p) fprintf (stderr, "%s: restarting watchdog_timer (%ld, %ld)\n", blurb(), p->watchdog_timeout, si->watchdog_id); } } /* It's possible that a race condition could have led to the saver window being unexpectedly still mapped. This can happen like so: - screen is blanked - hack is launched - that hack tries to grab a screen image (it does this by first unmapping the saver window, then remapping it.) - hack unmaps window - hack waits - user becomes active - hack re-maps window (*) - driver kills subprocess - driver unmaps window (**) The race is that (*) might have been sent to the server before the client process was killed, but, due to scheduling randomness, might not have been received by the server until after (**). In other words, (*) and (**) might happen out of order, meaning the driver will unmap the window, and then after that, the recently-dead client will re-map it. This leaves the user locked out (it looks like a desktop, but it's not!) To avoid this: after un-blanking the screen, we launch a timer that wakes up once a second for ten seconds, and makes damned sure that the window is still unmapped. */ void de_race_timer (XtPointer closure, XtIntervalId *id) { saver_info *si = (saver_info *) closure; saver_preferences *p = &si->prefs; int secs = 1; if (id == 0) /* if id is 0, this is the initialization call. */ { si->de_race_ticks = 10; if (p->verbose_p) fprintf (stderr, "%s: starting de-race timer (%d seconds.)\n", blurb(), si->de_race_ticks); } else { int i; XSync (si->dpy, False); for (i = 0; i < si->nscreens; i++) { saver_screen_info *ssi = &si->screens[i]; Window w = ssi->screensaver_window; XWindowAttributes xgwa; XGetWindowAttributes (si->dpy, w, &xgwa); if (xgwa.map_state != IsUnmapped) { if (p->verbose_p) fprintf (stderr, "%s: %d: client race! emergency unmap 0x%lx.\n", blurb(), i, (unsigned long) w); XUnmapWindow (si->dpy, w); } else if (p->debug_p) fprintf (stderr, "%s: %d: (de-race of 0x%lx is cool.)\n", blurb(), i, (unsigned long) w); } XSync (si->dpy, False); si->de_race_ticks--; } if (id && *id == si->de_race_id) si->de_race_id = 0; if (si->de_race_id) abort(); if (si->de_race_ticks <= 0) { si->de_race_id = 0; if (p->verbose_p) fprintf (stderr, "%s: de-race completed.\n", blurb()); } else { si->de_race_id = XtAppAddTimeOut (si->app, secs * 1000, de_race_timer, closure); } } xscreensaver-5.36/driver/subprocs.c000664 000767 000024 00000111575 12725612443 017457 0ustar00jwzstaff000000 000000 /* subprocs.c --- choosing, spawning, and killing screenhacks. * xscreensaver, Copyright (c) 1991-2016 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. */ #ifdef HAVE_CONFIG_H # include "config.h" #endif #include #include #include #include /* not used for much... */ #ifndef ESRCH # include #endif #include /* sys/resource.h needs this for timeval */ #include /* for PATH_MAX */ #ifdef HAVE_SYS_WAIT_H # include /* for waitpid() and associated macros */ #endif #ifdef HAVE_SETRLIMIT # include /* for setrlimit() and RLIMIT_AS */ #endif #ifdef VMS # include # include /* for close */ # include /* for getpid */ # define pid_t int # define fork vfork #endif /* VMS */ #include /* for the signal names */ #include #if !defined(SIGCHLD) && defined(SIGCLD) # define SIGCHLD SIGCLD #endif #if 0 /* putenv() is declared in stdlib.h on modern linux systems. */ #ifdef HAVE_PUTENV extern int putenv (/* const char * */); /* getenv() is in stdlib.h... */ #endif #endif extern int kill (pid_t, int); /* signal() is in sys/signal.h... */ /* This file doesn't need the Xt headers, so stub these types out... */ #undef XtPointer #define XtAppContext void* #define XrmDatabase void* #define XtIntervalId void* #define XtPointer void* #define Widget void* #include "xscreensaver.h" #include "exec.h" #include "yarandom.h" #include "visual.h" /* for id_to_visual() */ extern saver_info *global_si_kludge; /* I hate C so much... */ /* Used when printing error/debugging messages from signal handlers. */ static const char * no_malloc_number_to_string (long num) { static char string[128] = ""; int num_digits; Bool negative_p = False; num_digits = 0; if (num == 0) return "0"; if (num < 0) { negative_p = True; num = -num; } while ((num > 0) && (num_digits < sizeof(string) - 1)) { int digit; digit = (int) num % 10; num_digits++; string[sizeof(string) - 1 - num_digits] = digit + '0'; num /= 10; } if (negative_p) { num_digits++; string[sizeof(string) - 1 - num_digits] = '-'; } return string + sizeof(string) - 1 - num_digits; } /* Like write(), but runs strlen() on the arg to get the length. */ static int write_string (int fd, const char *str) { return write (fd, str, strlen (str)); } static int write_long (int fd, long n) { const char *str = no_malloc_number_to_string (n); return write_string (fd, str); } /* RLIMIT_AS (called RLIMIT_VMEM on some systems) controls the maximum size of a process's address space, i.e., the maximal brk(2) and mmap(2) values. Setting this lets you put a cap on how much memory a process can allocate. Except the "and mmap()" part kinda makes this useless, since many GL implementations end up using mmap() to pull the whole frame buffer into memory (or something along those lines) making it appear processes are using hundreds of megabytes when in fact they're using very little, and we end up capping their mallocs prematurely. YAY! */ #if defined(RLIMIT_VMEM) && !defined(RLIMIT_AS) # define RLIMIT_AS RLIMIT_VMEM #endif static void limit_subproc_memory (int address_space_limit, Bool verbose_p) { /* This has caused way more problems than it has solved... Let's just completely ignore the "memoryLimit" option now. */ #undef HAVE_SETRLIMIT #if defined(HAVE_SETRLIMIT) && defined(RLIMIT_AS) struct rlimit r; if (address_space_limit < 10 * 1024) /* let's not be crazy */ return; if (getrlimit (RLIMIT_AS, &r) != 0) { char buf [512]; sprintf (buf, "%s: getrlimit(RLIMIT_AS) failed", blurb()); perror (buf); return; } r.rlim_cur = address_space_limit; if (setrlimit (RLIMIT_AS, &r) != 0) { char buf [512]; sprintf (buf, "%s: setrlimit(RLIMIT_AS, {%lu, %lu}) failed", blurb(), r.rlim_cur, r.rlim_max); perror (buf); return; } if (verbose_p) { int i = address_space_limit; char buf[100]; if (i >= (1<<30) && i == ((i >> 30) << 30)) sprintf(buf, "%dG", i >> 30); else if (i >= (1<<20) && i == ((i >> 20) << 20)) sprintf(buf, "%dM", i >> 20); else if (i >= (1<<10) && i == ((i >> 10) << 10)) sprintf(buf, "%dK", i >> 10); else sprintf(buf, "%d bytes", i); fprintf (stderr, "%s: limited pid %lu address space to %s.\n", blurb(), (unsigned long) getpid (), buf); } #endif /* HAVE_SETRLIMIT && RLIMIT_AS */ } /* Management of child processes, and de-zombification. */ enum job_status { job_running, /* the process is still alive */ job_stopped, /* we have sent it a STOP signal */ job_killed, /* we have sent it a TERM signal */ job_dead /* we have wait()ed for it, and it's dead -- this state only occurs so that we can avoid calling free() from a signal handler. Shortly after going into this state, the list element will be removed. */ }; struct screenhack_job { char *name; pid_t pid; int screen; enum job_status status; time_t launched, killed; struct screenhack_job *next; }; static struct screenhack_job *jobs = 0; /* for debugging -- nothing calls this, but it's useful to invoke from gdb. */ void show_job_list (void); void show_job_list (void) { struct screenhack_job *job; fprintf(stderr, "%s: job list:\n", blurb()); for (job = jobs; job; job = job->next) { char b[] = " ??:??:?? "; char *t = (job->killed ? timestring (job->killed) : job->launched ? timestring (job->launched) : b); t += 11; t[8] = 0; fprintf (stderr, " %5ld: %2d: (%s) %s %s\n", (long) job->pid, job->screen, (job->status == job_running ? "running" : job->status == job_stopped ? "stopped" : job->status == job_killed ? " killed" : job->status == job_dead ? " dead" : " ???"), t, job->name); } fprintf (stderr, "\n"); } static void clean_job_list (void); static struct screenhack_job * make_job (pid_t pid, int screen, const char *cmd) { struct screenhack_job *job = (struct screenhack_job *) malloc (sizeof(*job)); static char name [1024]; const char *in = cmd; char *out = name; int got_eq = 0; int first = 1; clean_job_list(); AGAIN: while (isspace(*in)) in++; /* skip whitespace */ while (!isspace(*in) && *in != ':') { if (*in == '=') got_eq = 1; *out++ = *in++; /* snarf first token */ } if (got_eq) /* if the first token was FOO=bar */ { /* then get the next token instead. */ got_eq = 0; out = name; first = 0; goto AGAIN; } while (isspace(*in)) in++; /* skip whitespace */ *out = 0; job->name = strdup(name); job->pid = pid; job->screen = screen; job->status = job_running; job->launched = time ((time_t *) 0); job->killed = 0; job->next = jobs; jobs = job; return jobs; } static void free_job (struct screenhack_job *job) { if (!job) return; else if (job == jobs) jobs = jobs->next; else { struct screenhack_job *job2, *prev; for (prev = 0, job2 = jobs; job2; prev = job2, job2 = job2->next) if (job2 == job) { prev->next = job->next; break; } } free(job->name); free(job); } /* Cleans out dead jobs from the jobs list -- this must only be called from the main thread, not from a signal handler. */ static void clean_job_list (void) { struct screenhack_job *job, *prev, *next; time_t now = time ((time_t *) 0); static time_t last_warn = 0; Bool warnedp = False; for (prev = 0, job = jobs, next = (job ? job->next : 0); job; prev = job, job = next, next = (job ? job->next : 0)) { if (job->status == job_dead) { if (prev) prev->next = next; free_job (job); job = prev; } else if (job->status == job_killed && now - job->killed > 10 && now - last_warn > 10) { fprintf (stderr, "%s: WARNING: pid %ld (%s) sent SIGTERM %ld seconds ago" " and did not die!\n", blurb(), (long) job->pid, job->name, (long) (now - job->killed)); warnedp = True; } } if (warnedp) last_warn = now; } static struct screenhack_job * find_job (pid_t pid) { struct screenhack_job *job; for (job = jobs; job; job = job->next) if (job->pid == pid) return job; return 0; } static void await_dying_children (saver_info *si); #ifndef VMS static void describe_dead_child (saver_info *, pid_t, int wait_status); #endif /* Semaphore to temporarily turn the SIGCHLD handler into a no-op. Don't alter this directly -- use block_sigchld() / unblock_sigchld(). */ static int block_sigchld_handler = 0; #ifdef HAVE_SIGACTION sigset_t #else /* !HAVE_SIGACTION */ int #endif /* !HAVE_SIGACTION */ block_sigchld (void) { #ifdef HAVE_SIGACTION struct sigaction sa; sigset_t child_set; memset (&sa, 0, sizeof (sa)); sa.sa_handler = SIG_IGN; sigaction (SIGPIPE, &sa, NULL); sigemptyset (&child_set); sigaddset (&child_set, SIGCHLD); sigprocmask (SIG_BLOCK, &child_set, 0); #else /* !HAVE_SIGACTION */ signal (SIGPIPE, SIG_IGN); #endif /* !HAVE_SIGACTION */ block_sigchld_handler++; #ifdef HAVE_SIGACTION return child_set; #else /* !HAVE_SIGACTION */ return 0; #endif /* !HAVE_SIGACTION */ } void unblock_sigchld (void) { if (block_sigchld_handler <= 0) abort(); if (block_sigchld_handler <= 1) /* only unblock if count going to 0 */ { #ifdef HAVE_SIGACTION struct sigaction sa; sigset_t child_set; memset(&sa, 0, sizeof (sa)); sa.sa_handler = SIG_DFL; sigaction(SIGPIPE, &sa, NULL); sigemptyset(&child_set); sigaddset(&child_set, SIGCHLD); sigprocmask(SIG_UNBLOCK, &child_set, 0); #else /* !HAVE_SIGACTION */ signal(SIGPIPE, SIG_DFL); #endif /* !HAVE_SIGACTION */ } block_sigchld_handler--; } static int kill_job (saver_info *si, pid_t pid, int signal) { saver_preferences *p = &si->prefs; struct screenhack_job *job; int status = -1; clean_job_list(); if (in_signal_handler_p) /* This function should not be called from the signal handler. */ abort(); block_sigchld(); /* we control the horizontal... */ job = find_job (pid); if (!job || !job->pid || job->status == job_killed) { if (p->verbose_p) fprintf (stderr, "%s: no child %ld to signal!\n", blurb(), (long) pid); goto DONE; } switch (signal) { case SIGTERM: job->status = job_killed; job->killed = time ((time_t *) 0); break; #ifdef SIGSTOP /* #### there must be a way to do this on VMS... */ case SIGSTOP: job->status = job_stopped; break; case SIGCONT: job->status = job_running; break; #endif /* SIGSTOP */ default: abort(); } if (p->verbose_p) fprintf (stderr, "%s: %d: %s pid %lu (%s)\n", blurb(), job->screen, (job->status == job_killed ? "killing" : job->status == job_stopped ? "suspending" : "resuming"), (unsigned long) job->pid, job->name); status = kill (job->pid, signal); if (p->verbose_p && status < 0) { if (errno == ESRCH) fprintf (stderr, "%s: %d: child process %lu (%s) was already dead.\n", blurb(), job->screen, (unsigned long) job->pid, job->name); else { char buf [1024]; sprintf (buf, "%s: %d: couldn't kill child process %lu (%s)", blurb(), job->screen, (unsigned long) job->pid, job->name); perror (buf); } } await_dying_children (si); DONE: unblock_sigchld(); if (block_sigchld_handler < 0) abort(); clean_job_list(); return status; } #ifdef SIGCHLD 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) { /* Don't call fprintf() from signal handlers, as it might malloc. fprintf(stderr, "%s: got SIGCHLD%s\n", blurb(), (block_sigchld_handler ? " (blocked)" : "")); */ write_string (STDERR_FILENO, blurb()); write_string (STDERR_FILENO, ": got SIGCHLD"); if (block_sigchld_handler) write_string (STDERR_FILENO, " (blocked)\n"); else write_string (STDERR_FILENO, "\n"); } if (block_sigchld_handler < 0) abort(); else if (block_sigchld_handler == 0) { block_sigchld(); await_dying_children (si); unblock_sigchld(); } init_sigchld(); in_signal_handler_p--; } #endif /* SIGCHLD */ #ifndef VMS static void await_dying_children (saver_info *si) { while (1) { int wait_status = 0; pid_t kid; errno = 0; kid = waitpid (-1, &wait_status, WNOHANG|WUNTRACED); if (si->prefs.debug_p) { if (kid < 0 && errno) { /* Don't call fprintf() from signal handlers, as it might malloc. fprintf (stderr, "%s: waitpid(-1) ==> %ld (%d)\n", blurb(), (long) kid, errno); */ write_string (STDERR_FILENO, blurb()); write_string (STDERR_FILENO, ": waitpid(-1) ==> "); write_long (STDERR_FILENO, (long) kid); write_string (STDERR_FILENO, " ("); write_long (STDERR_FILENO, (long) errno); write_string (STDERR_FILENO, ")\n"); } else { /* Don't call fprintf() from signal handlers, as it might malloc. fprintf (stderr, "%s: waitpid(-1) ==> %ld\n", blurb(), (long) kid); */ write_string (STDERR_FILENO, blurb()); write_string (STDERR_FILENO, ": waitpid(-1) ==> "); write_long (STDERR_FILENO, (long) kid); write_string (STDERR_FILENO, "\n"); } } /* 0 means no more children to reap. -1 means error -- except "interrupted system call" isn't a "real" error, so if we get that, we should just try again. */ if (kid == 0 || (kid < 0 && errno != EINTR)) break; describe_dead_child (si, kid, wait_status); } } static void describe_dead_child (saver_info *si, pid_t kid, int wait_status) { int i; saver_preferences *p = &si->prefs; struct screenhack_job *job = find_job (kid); const char *name = job ? job->name : ""; int screen_no = job ? job->screen : 0; if (WIFEXITED (wait_status)) { int exit_status = WEXITSTATUS (wait_status); /* Treat exit code as a signed 8-bit quantity. */ if (exit_status & 0x80) exit_status |= ~0xFF; /* One might assume that exiting with non-0 means something went wrong. But that loser xswarm exits with the code that it was killed with, so it *always* exits abnormally. Treat abnormal exits as "normal" (don't mention them) if we've just killed the subprocess. But mention them if they happen on their own. */ if (!job || (exit_status != 0 && (p->verbose_p || job->status != job_killed))) { /* Don't call fprintf() from signal handlers, as it might malloc. fprintf (stderr, "%s: %d: child pid %lu (%s) exited abnormally (code %d).\n", blurb(), screen_no, (unsigned long) kid, name, exit_status); */ write_string (STDERR_FILENO, blurb()); write_string (STDERR_FILENO, ": "); write_long (STDERR_FILENO, (long) screen_no); write_string (STDERR_FILENO, ": child pid "); write_long (STDERR_FILENO, (long) kid); write_string (STDERR_FILENO, " ("); write_string (STDERR_FILENO, name); write_string (STDERR_FILENO, ") exited abnormally (code "); write_long (STDERR_FILENO, (long) exit_status); write_string (STDERR_FILENO, ").\n"); } else if (p->verbose_p) { /* Don't call fprintf() from signal handlers, as it might malloc. fprintf (stderr, "%s: %d: child pid %lu (%s) exited normally.\n", blurb(), screen_no, (unsigned long) kid, name); */ write_string (STDERR_FILENO, blurb()); write_string (STDERR_FILENO, ": "); write_long (STDERR_FILENO, (long) screen_no); write_string (STDERR_FILENO, ": child pid "); write_long (STDERR_FILENO, (long) kid); write_string (STDERR_FILENO, " ("); write_string (STDERR_FILENO, name); write_string (STDERR_FILENO, ") exited normally.\n"); } if (job) job->status = job_dead; } else if (WIFSIGNALED (wait_status)) { if (p->verbose_p || !job || job->status != job_killed || WTERMSIG (wait_status) != SIGTERM) { /* Don't call fprintf() from signal handlers, as it might malloc. fprintf (stderr, "%s: %d: child pid %lu (%s) terminated with %s.\n", blurb(), screen_no, (unsigned long) kid, name, signal_name (WTERMSIG(wait_status))); */ write_string (STDERR_FILENO, blurb()); write_string (STDERR_FILENO, ": "); write_long (STDERR_FILENO, (long) screen_no); write_string (STDERR_FILENO, ": child pid "); write_long (STDERR_FILENO, (long) kid); write_string (STDERR_FILENO, " ("); write_string (STDERR_FILENO, name); write_string (STDERR_FILENO, ") terminated with signal "); write_long (STDERR_FILENO, WTERMSIG(wait_status)); write_string (STDERR_FILENO, ".\n"); } if (job) job->status = job_dead; } else if (WIFSTOPPED (wait_status)) { if (p->verbose_p) { /* Don't call fprintf() from signal handlers, as it might malloc. fprintf (stderr, "%s: child pid %lu (%s) stopped with %s.\n", blurb(), (unsigned long) kid, name, signal_name (WSTOPSIG (wait_status))); */ write_string (STDERR_FILENO, blurb()); write_string (STDERR_FILENO, ": "); write_long (STDERR_FILENO, (long) screen_no); write_string (STDERR_FILENO, ": child pid "); write_long (STDERR_FILENO, (long) kid); write_string (STDERR_FILENO, " ("); write_string (STDERR_FILENO, name); write_string (STDERR_FILENO, ") stopped with signal "); write_long (STDERR_FILENO, WSTOPSIG(wait_status)); write_string (STDERR_FILENO, ".\n"); } if (job) job->status = job_stopped; } else { /* Don't call fprintf() from signal handlers, as it might malloc. fprintf (stderr, "%s: child pid %lu (%s) died in a mysterious way!", blurb(), (unsigned long) kid, name); */ write_string (STDERR_FILENO, blurb()); write_string (STDERR_FILENO, ": "); write_long (STDERR_FILENO, (long) screen_no); write_string (STDERR_FILENO, ": child pid "); write_long (STDERR_FILENO, (long) kid); write_string (STDERR_FILENO, " ("); write_string (STDERR_FILENO, name); write_string (STDERR_FILENO, ") died in a mysterious way!"); if (job) job->status = job_dead; } /* Clear out the pid so that screenhack_running_p() knows it's dead. */ if (!job || job->status == job_dead) for (i = 0; i < si->nscreens; i++) { saver_screen_info *ssi = &si->screens[i]; if (kid == ssi->pid) ssi->pid = 0; } } #else /* VMS */ static void await_dying_children (saver_info *si) { return; } #endif /* VMS */ void init_sigchld (void) { #ifdef SIGCHLD # ifdef HAVE_SIGACTION /* Thanks to Tom Kelly */ static Bool sigchld_initialized_p = 0; if (!sigchld_initialized_p) { struct sigaction action, old; action.sa_handler = sigchld_handler; sigemptyset(&action.sa_mask); action.sa_flags = 0; if (sigaction(SIGCHLD, &action, &old) < 0) { char buf [255]; sprintf (buf, "%s: couldn't catch SIGCHLD", blurb()); perror (buf); } sigchld_initialized_p = True; } # else /* !HAVE_SIGACTION */ if (((long) signal (SIGCHLD, sigchld_handler)) == -1L) { char buf [255]; sprintf (buf, "%s: couldn't catch SIGCHLD", blurb()); perror (buf); } # endif /* !HAVE_SIGACTION */ #endif /* SIGCHLD */ } static Bool select_visual_of_hack (saver_screen_info *ssi, screenhack *hack) { saver_info *si = ssi->global; saver_preferences *p = &si->prefs; Bool selected; if (hack->visual && *hack->visual) selected = select_visual(ssi, hack->visual); else selected = select_visual(ssi, 0); if (!selected && (p->verbose_p || si->demoing_p)) fprintf (stderr, (si->demoing_p ? "%s: warning, no \"%s\" visual for \"%s\".\n" : "%s: no \"%s\" visual; skipping \"%s\".\n"), blurb(), (hack->visual && *hack->visual ? hack->visual : "???"), hack->command); return selected; } static void print_path_error (const char *program) { char buf [512]; char *cmd = strdup (program); char *token = strchr (cmd, ' '); if (token) *token = 0; sprintf (buf, "%s: could not execute \"%.100s\"", blurb(), cmd); free (cmd); perror (buf); if (errno == ENOENT && (token = getenv("PATH"))) { # ifndef PATH_MAX # ifdef MAXPATHLEN # define PATH_MAX MAXPATHLEN # else # define PATH_MAX 2048 # endif # endif char path[PATH_MAX]; fprintf (stderr, "\n"); *path = 0; # if defined(HAVE_GETCWD) if (! getcwd (path, sizeof(path))) *path = 0; # elif defined(HAVE_GETWD) getwd (path); # endif if (*path) fprintf (stderr, " Current directory is: %s\n", path); fprintf (stderr, " PATH is:\n"); token = strtok (strdup(token), ":"); while (token) { fprintf (stderr, " %s\n", token); token = strtok(0, ":"); } fprintf (stderr, "\n"); } } /* Executes the command in another process. Command may be any single command acceptable to /bin/sh. It may include wildcards, but no semicolons. If successful, the pid of the other process is returned. Otherwise, -1 is returned and an error may have been printed to stderr. */ pid_t fork_and_exec (saver_screen_info *ssi, const char *command) { saver_info *si = ssi->global; saver_preferences *p = &si->prefs; pid_t forked; switch ((int) (forked = fork ())) { case -1: { char buf [255]; sprintf (buf, "%s: couldn't fork", blurb()); perror (buf); break; } case 0: close (ConnectionNumber (si->dpy)); /* close display fd */ limit_subproc_memory (p->inferior_memory_limit, p->verbose_p); hack_subproc_environment (ssi->screen, ssi->screensaver_window); if (p->verbose_p) fprintf (stderr, "%s: %d: spawning \"%s\" in pid %lu.\n", blurb(), ssi->number, command, (unsigned long) getpid ()); exec_command (p->shell, command, p->nice_inferior); /* If that returned, we were unable to exec the subprocess. Print an error message, if desired. */ if (! p->ignore_uninstalled_p) print_path_error (command); exit (1); /* exits child fork */ break; default: /* parent */ (void) make_job (forked, ssi->number, command); break; } return forked; } void spawn_screenhack (saver_screen_info *ssi) { saver_info *si = ssi->global; saver_preferences *p = &si->prefs; XFlush (si->dpy); if (!monitor_powered_on_p (si)) { if (si->prefs.verbose_p) fprintf (stderr, "%s: %d: X says monitor has powered down; " "not launching a hack.\n", blurb(), ssi->number); return; } if (p->screenhacks_count) { screenhack *hack; pid_t forked; char buf [255]; int new_hack = -1; int retry_count = 0; Bool force = False; AGAIN: if (p->screenhacks_count < 1) { /* No hacks at all */ new_hack = -1; } else if (p->screenhacks_count == 1) { /* Exactly one hack in the list */ new_hack = 0; } else if (si->selection_mode == -1) { /* Select the next hack, wrapping. */ new_hack = (ssi->current_hack + 1) % p->screenhacks_count; } else if (si->selection_mode == -2) { /* Select the previous hack, wrapping. */ if (ssi->current_hack < 0) new_hack = p->screenhacks_count - 1; else new_hack = ((ssi->current_hack + p->screenhacks_count - 1) % p->screenhacks_count); } else if (si->selection_mode > 0) { /* Select a specific hack, by number (via the ACTIVATE command.) */ new_hack = ((si->selection_mode - 1) % p->screenhacks_count); force = True; } else if (p->mode == ONE_HACK && p->selected_hack >= 0) { /* Select a specific hack, by number (via "One Saver" mode.) */ new_hack = p->selected_hack; force = True; } else if (p->mode == BLANK_ONLY || p->mode == DONT_BLANK) { new_hack = -1; } else if (p->mode == RANDOM_HACKS_SAME && ssi->number != 0) { /* Use the same hack that's running on screen 0. (Assumes this function was called on screen 0 first.) */ new_hack = si->screens[0].current_hack; } else /* (p->mode == RANDOM_HACKS) */ { /* Select a random hack (but not the one we just ran.) */ while ((new_hack = random () % p->screenhacks_count) == ssi->current_hack) ; } if (new_hack < 0) /* don't run a hack */ { ssi->current_hack = -1; if (si->selection_mode < 0) si->selection_mode = 0; return; } ssi->current_hack = new_hack; hack = p->screenhacks[ssi->current_hack]; /* If the hack is disabled, or there is no visual for this hack, then try again (move forward, or backward, or re-randomize.) Unless this hack was specified explicitly, in which case, use it regardless. */ if (force) select_visual_of_hack (ssi, hack); if (!force && (!hack->enabled_p || !on_path_p (hack->command) || !select_visual_of_hack (ssi, hack))) { if (++retry_count > (p->screenhacks_count*4)) { /* Uh, oops. Odds are, there are no suitable visuals, and we're looping. Give up. (This is totally lame, what we should do is make a list of suitable hacks at the beginning, then only loop over them.) */ if (p->verbose_p) fprintf(stderr, "%s: %d: no programs enabled, or no suitable visuals.\n", blurb(), ssi->number); return; } else goto AGAIN; } /* Turn off "next" and "prev" modes now, but "demo" mode is only turned off by explicit action. */ if (si->selection_mode < 0) si->selection_mode = 0; forked = fork_and_exec (ssi, hack->command); switch ((int) forked) { case -1: /* fork failed */ case 0: /* child fork (can't happen) */ sprintf (buf, "%s: couldn't fork", blurb()); perror (buf); restore_real_vroot (si); saver_exit (si, 1, "couldn't fork"); break; default: ssi->pid = forked; break; } } store_saver_status (si); /* store current hack number */ } void kill_screenhack (saver_screen_info *ssi) { saver_info *si = ssi->global; if (ssi->pid) kill_job (si, ssi->pid, SIGTERM); ssi->pid = 0; } void suspend_screenhack (saver_screen_info *ssi, Bool suspend_p) { #ifdef SIGSTOP /* older VMS doesn't have it... */ saver_info *si = ssi->global; if (ssi->pid) kill_job (si, ssi->pid, (suspend_p ? SIGSTOP : SIGCONT)); #endif /* SIGSTOP */ } /* Called when we're exiting abnormally, to kill off the subproc. */ void emergency_kill_subproc (saver_info *si) { int i; #ifdef SIGCHLD signal (SIGCHLD, SIG_IGN); #endif /* SIGCHLD */ for (i = 0; i < si->nscreens; i++) { saver_screen_info *ssi = &si->screens[i]; if (ssi->pid) { kill_job (si, ssi->pid, SIGTERM); ssi->pid = 0; } } } Bool screenhack_running_p (saver_info *si) { Bool any_running_p = False; int i; for (i = 0; i < si->nscreens; i++) { saver_screen_info *ssi = &si->screens[i]; if (ssi->pid) any_running_p = True; } return any_running_p; } /* Environment variables. */ /* Modifies $PATH in the current environment, so that if DEFAULT_PATH_PREFIX is defined, the xscreensaver daemon will search that directory for hacks. */ void hack_environment (saver_info *si) { #if defined(HAVE_PUTENV) && defined(DEFAULT_PATH_PREFIX) static const char *def_path = DEFAULT_PATH_PREFIX; if (def_path && *def_path) { const char *opath = getenv("PATH"); char *npath; if (! opath) opath = "/bin:/usr/bin"; /* WTF */ npath = (char *) malloc(strlen(def_path) + strlen(opath) + 20); strcpy (npath, "PATH="); strcat (npath, def_path); strcat (npath, ":"); strcat (npath, opath); if (putenv (npath)) abort (); /* don't free (npath) -- some implementations of putenv (BSD 4.4, glibc 2.0) copy the argument, but some (libc4,5, glibc 2.1.2) do not. So we must leak it (and/or the previous setting). Yay. */ } #endif /* HAVE_PUTENV && DEFAULT_PATH_PREFIX */ } void hack_subproc_environment (Screen *screen, Window saver_window) { /* Store $DISPLAY into the environment, so that the $DISPLAY variable that the spawned processes inherit is correct. First, it must be on the same host and display as the value of -display passed in on our command line (which is not necessarily the same as what our $DISPLAY variable is.) Second, the screen number in the $DISPLAY passed to the subprocess should be the screen on which this particular hack is running -- not the display specification which the driver itself is using, since the driver ignores its screen number and manages all existing screens. Likewise, store a window ID in $XSCREENSAVER_WINDOW -- this will allow us to (eventually) run multiple hacks in Xinerama mode, where each hack has the same $DISPLAY but a different piece of glass. */ Display *dpy = DisplayOfScreen (screen); const char *odpy = DisplayString (dpy); char *ndpy = (char *) malloc (strlen(odpy) + 20); char *nssw = (char *) malloc (40); char *s, *c; strcpy (ndpy, "DISPLAY="); s = ndpy + strlen(ndpy); strcpy (s, odpy); /* We have to find the last colon since it is the boundary between hostname & screen - IPv6 numeric format addresses may have many colons before that point, and DECnet addresses always have two colons */ c = strrchr(s,':'); /* skip to last colon */ if (c != NULL) s = c+1; while (isdigit(*s)) s++; /* skip over dpy number */ while (*s == '.') s++; /* skip over dot */ if (s[-1] != '.') *s++ = '.'; /* put on a dot */ sprintf(s, "%d", screen_number (screen)); /* put on screen number */ sprintf (nssw, "XSCREENSAVER_WINDOW=0x%lX", (unsigned long) saver_window); /* Allegedly, BSD 4.3 didn't have putenv(), but nobody runs such systems any more, right? It's not Posix, but everyone seems to have it. */ #ifdef HAVE_PUTENV if (putenv (ndpy)) abort (); if (putenv (nssw)) abort (); /* don't free ndpy/nssw -- some implementations of putenv (BSD 4.4, glibc 2.0) copy the argument, but some (libc4,5, glibc 2.1.2) do not. So we must leak it (and/or the previous setting). Yay. */ #endif /* HAVE_PUTENV */ } /* GL crap */ Visual * get_best_gl_visual (saver_info *si, Screen *screen) { pid_t forked; int fds [2]; int in, out; int errfds[2]; int errin = -1, errout = -1; char buf[1024]; char *av[10]; int ac = 0; av[ac++] = "xscreensaver-gl-helper"; av[ac] = 0; if (pipe (fds)) { perror ("error creating pipe:"); return 0; } in = fds [0]; out = fds [1]; if (!si->prefs.verbose_p) { if (pipe (errfds)) { perror ("error creating pipe:"); return 0; } errin = errfds [0]; errout = errfds [1]; } block_sigchld(); /* This blocks it in the parent and child, to avoid racing. It is never unblocked in the child before the child exits, but that doesn't matter. */ switch ((int) (forked = fork ())) { case -1: { sprintf (buf, "%s: couldn't fork", blurb()); perror (buf); saver_exit (si, 1, 0); } case 0: { close (in); /* don't need this one */ close (ConnectionNumber (si->dpy)); /* close display fd */ if (dup2 (out, STDOUT_FILENO) < 0) /* pipe stdout */ { perror ("could not dup() a new stdout:"); return 0; } if (! si->prefs.verbose_p) { close(errin); if (dup2 (errout, STDERR_FILENO) < 0) { perror ("could not dup() a new stderr:"); return 0; } } hack_subproc_environment (screen, 0); /* set $DISPLAY */ execvp (av[0], av); /* shouldn't return. */ if (errno != ENOENT /* || si->prefs.verbose_p */ ) { /* Ignore "no such file or directory" errors. Issue all other exec errors, though. */ sprintf (buf, "%s: running %s", blurb(), av[0]); perror (buf); } exit (1); /* exits fork */ break; } default: { int result = 0; int wait_status = 0; pid_t pid = -1; FILE *f = fdopen (in, "r"); unsigned long v = 0; char c; close (out); /* don't need this one */ *buf = 0; if (! fgets (buf, sizeof(buf)-1, f)) *buf = 0; fclose (f); if (! si->prefs.verbose_p) { close (errout); close (errin); } /* Wait for the child to die - wait for this pid only, not others. */ pid = waitpid (forked, &wait_status, 0); if (si->prefs.debug_p) { write_string (STDERR_FILENO, blurb()); write_string (STDERR_FILENO, ": waitpid("); write_long (STDERR_FILENO, (long) forked); write_string (STDERR_FILENO, ") ==> "); write_long (STDERR_FILENO, (long) pid); write_string (STDERR_FILENO, "\n"); } unblock_sigchld(); /* child is dead and waited, unblock now. */ if (1 == sscanf (buf, "0x%lx %c", &v, &c)) result = (int) v; if (result == 0) { if (si->prefs.verbose_p) { int L = strlen(buf); fprintf (stderr, "%s: %s did not report a GL visual!\n", blurb(), av[0]); if (L && buf[L-1] == '\n') buf[--L] = 0; if (*buf) fprintf (stderr, "%s: %s said: \"%s\"\n", blurb(), av[0], buf); } return 0; } else { Visual *v = id_to_visual (screen, result); if (si->prefs.verbose_p) fprintf (stderr, "%s: %d: %s: GL visual is 0x%X%s.\n", blurb(), screen_number (screen), av[0], result, (v == DefaultVisualOfScreen (screen) ? " (default)" : "")); return v; } } } abort(); } /* Restarting the xscreensaver process from scratch. */ static char **saved_argv; void save_argv (int argc, char **argv) { saved_argv = (char **) calloc (argc+2, sizeof (char *)); saved_argv [argc] = 0; while (argc--) { int i = strlen (argv [argc]) + 1; saved_argv [argc] = (char *) malloc (i); memcpy (saved_argv [argc], argv [argc], i); } } /* Re-execs the process with the arguments in saved_argv. Does not return. */ void restart_process (saver_info *si) { fflush (stdout); fflush (stderr); shutdown_stderr (si); if (si->prefs.verbose_p) { int i; fprintf (stderr, "%s: re-executing", blurb()); for (i = 0; saved_argv[i]; i++) fprintf (stderr, " %s", saved_argv[i]); fprintf (stderr, "\n"); } describe_uids (si, stderr); fprintf (stderr, "\n"); fflush (stdout); fflush (stderr); execvp (saved_argv [0], saved_argv); /* shouldn't return */ { char buf [512]; sprintf (buf, "%s: could not restart process", blurb()); perror(buf); fflush(stderr); abort(); } } xscreensaver-5.36/driver/exec.c000644 000767 000024 00000017013 12701612237 016524 0ustar00jwzstaff000000 000000 /* exec.c --- executes a program in *this* pid, without an intervening process. * xscreensaver, Copyright (c) 1991-2013 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. */ /* I don't believe what a sorry excuse for an operating system UNIX is! - I want to spawn a process. - I want to know it's pid so that I can kill it. - I would like to receive a message when it dies of natural causes. - I want the spawned process to have user-specified arguments. If shell metacharacters are present (wildcards, backquotes, etc), the only way to parse those arguments is to run a shell to do the parsing for you. And the only way to know the pid of the process is to fork() and exec() it in the spawned side of the fork. But if you're running a shell to parse your arguments, this gives you the pid of the *shell*, not the pid of the *process* that you're actually interested in, which is an *inferior* of the shell. This also means that the SIGCHLD you get applies to the shell, not its inferior. (Why isn't that sufficient? I don't remember any more, but it turns out that it isn't.) So, the only solution, when metacharacters are present, is to force the shell to exec() its inferior. What a fucking hack! We prepend "exec " to the command string, and hope it doesn't contain unquoted semicolons or ampersands (we don't search for them, because we don't want to prohibit their use in quoted strings (messages, for example) and parsing out the various quote characters is too much of a pain.) (Actually, Clint Wong points out that process groups might be used to take care of this problem; this may be worth considering some day, except that, 1: this code works now, so why fix it, and 2: from what I've seen in Emacs, dealing with process groups isn't especially portable.) */ #ifdef HAVE_CONFIG_H # include "config.h" #endif #include #ifdef HAVE_UNISTD_H # include #endif #include #include #include #include #ifndef ESRCH # include #endif #if defined(HAVE_SETPRIORITY) && defined(PRIO_PROCESS) # include /* for setpriority() and PRIO_PROCESS */ /* and also setrlimit() and RLIMIT_AS */ #endif #ifdef VMS # include # include /* for close */ # include /* for getpid */ # define pid_t int # define fork vfork #endif /* VMS */ #include "exec.h" extern const char *blurb (void); static void nice_process (int nice_level); #ifndef VMS static void exec_simple_command (const char *command) { char *av[1024]; int ac = 0; char *token = strtok (strdup(command), " \t"); while (token) { av[ac++] = token; token = strtok(0, " \t"); } av[ac] = 0; execvp (av[0], av); /* shouldn't return. */ } static void exec_complex_command (const char *shell, const char *command) { char *av[5]; int ac = 0; char *command2 = (char *) malloc (strlen (command) + 10); const char *s; int got_eq = 0; const char *after_vars; /* Skip leading whitespace. */ while (*command == ' ' || *command == '\t') command++; /* If the string has a series of tokens with "=" in them at them, set `after_vars' to point into the string after those tokens and any trailing whitespace. Otherwise, after_vars == command. */ after_vars = command; for (s = command; *s; s++) { if (*s == '=') got_eq = 1; else if (*s == ' ') { if (got_eq) { while (*s == ' ' || *s == '\t') s++; after_vars = s; got_eq = 0; } else break; } } *command2 = 0; strncat (command2, command, after_vars - command); strcat (command2, "exec "); strcat (command2, after_vars); /* We have now done these transformations: "foo -x -y" ==> "exec foo -x -y" "BLAT=foop foo -x" ==> "BLAT=foop exec foo -x" "BLAT=foop A=b foo -x" ==> "BLAT=foop A=b exec foo -x" */ /* Invoke the shell as "/bin/sh -c 'exec prog -arg -arg ...'" */ av [ac++] = (char *) shell; av [ac++] = "-c"; av [ac++] = command2; av [ac] = 0; execvp (av[0], av); /* shouldn't return. */ } #else /* VMS */ static void exec_vms_command (const char *command) { system (command); fflush (stderr); fflush (stdout); exit (1); /* Note that this only exits a child fork. */ } #endif /* !VMS */ void exec_command (const char *shell, const char *command, int nice_level) { int hairy_p; #ifndef VMS nice_process (nice_level); hairy_p = !!strpbrk (command, "*?$&!<>[];`'\\\"="); /* note: = is in the above because of the sh syntax "FOO=bar cmd". */ if (getuid() == (uid_t) 0 || geteuid() == (uid_t) 0) { /* If you're thinking of commenting this out, think again. If you do so, you will open a security hole. Mail jwz so that he may enlighten you as to the error of your ways. */ fprintf (stderr, "%s: we're still running as root! Disaster!\n", blurb()); exit (-1); } if (hairy_p) /* If it contains any shell metacharacters, do it the hard way, and fork a shell to parse the arguments for us. */ exec_complex_command (shell, command); else /* Otherwise, we can just exec the program directly. */ exec_simple_command (command); #else /* VMS */ exec_vms_command (command); #endif /* VMS */ } /* Setting process priority */ static void nice_process (int nice_level) { if (nice_level == 0) return; #if defined(HAVE_NICE) { int old_nice = nice (0); int n = nice_level - old_nice; errno = 0; if (nice (n) == -1 && errno != 0) { char buf [512]; sprintf (buf, "%s: nice(%d) failed", blurb(), n); perror (buf); } } #elif defined(HAVE_SETPRIORITY) && defined(PRIO_PROCESS) if (setpriority (PRIO_PROCESS, getpid(), nice_level) != 0) { char buf [512]; sprintf (buf, "%s: setpriority(PRIO_PROCESS, %lu, %d) failed", blurb(), (unsigned long) getpid(), nice_level); perror (buf); } #else fprintf (stderr, "%s: don't know how to change process priority on this system.\n", blurb()); #endif } /* Whether the given command exists on $PATH. (Anything before the first space is considered to be the program name.) */ int on_path_p (const char *program) { int result = 0; struct stat st; char *cmd = strdup (program); char *token = strchr (cmd, ' '); char *path = 0; int L; if (token) *token = 0; token = 0; if (strchr (cmd, '/')) { result = (0 == stat (cmd, &st)); goto DONE; } path = getenv("PATH"); if (!path || !*path) goto DONE; L = strlen (cmd); path = strdup (path); token = strtok (path, ":"); while (token) { char *p2 = (char *) malloc (strlen (token) + L + 3); strcpy (p2, token); strcat (p2, "/"); strcat (p2, cmd); result = (0 == stat (p2, &st)); free (p2); if (result) goto DONE; token = strtok (0, ":"); } DONE: free (cmd); if (path) free (path); return result; } xscreensaver-5.36/driver/xset.c000644 000767 000024 00000026765 12701612240 016573 0ustar00jwzstaff000000 000000 /* xset.c --- interacting with server extensions and the builtin screensaver. * xscreensaver, Copyright (c) 1991-2008 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. */ #ifdef HAVE_CONFIG_H # include "config.h" #endif #include #include #include #include #include /* This file doesn't need the Xt headers, so stub these types out... */ #undef XtPointer #define XtAppContext void* #define XrmDatabase void* #define XtIntervalId void* #define XtPointer void* #define Widget void* #include "xscreensaver.h" #ifdef _VROOT_H_ ERROR! You must not include vroot.h in this file. #endif /* MIT SCREEN-SAVER server extension hackery. */ #ifdef HAVE_MIT_SAVER_EXTENSION # include static int ignore_all_errors_ehandler (Display *dpy, XErrorEvent *error) { return 0; } static void init_mit_saver_extension (saver_info *si) { int i; Pixmap *blank_pix = (Pixmap *) calloc (sizeof(Pixmap), si->nscreens); for (i = 0; i < si->nscreens; i++) { saver_screen_info *ssi = &si->screens[i]; XID kill_id = 0; Atom kill_type = 0; Window root = RootWindowOfScreen (ssi->screen); blank_pix[i] = XCreatePixmap (si->dpy, root, 1, 1, 1); /* Kill off the old MIT-SCREEN-SAVER client if there is one. This tends to generate X errors, though (possibly due to a bug in the server extension itself?) so just ignore errors here. */ if (XScreenSaverGetRegistered (si->dpy, XScreenNumberOfScreen (ssi->screen), &kill_id, &kill_type) && kill_id != blank_pix[i]) { XErrorHandler old_handler = XSetErrorHandler (ignore_all_errors_ehandler); XKillClient (si->dpy, kill_id); XSync (si->dpy, False); XSetErrorHandler (old_handler); } XScreenSaverSelectInput (si->dpy, root, ScreenSaverNotifyMask); XScreenSaverRegister (si->dpy, XScreenNumberOfScreen (ssi->screen), (XID) blank_pix[i], XA_PIXMAP); } free(blank_pix); } #endif /* HAVE_MIT_SAVER_EXTENSION */ #ifdef HAVE_XINPUT /* XInputExtension device support */ Bool query_xinput_extension (saver_info *si) { XExtCodes codes; return XQueryExtension (si->dpy, INAME, &codes.major_opcode, &codes.first_event, &codes.first_error); } void init_xinput_extension (saver_info *si) { int i, ndevices; int class; XDeviceInfo *list; XDevice *dev; XAnyClassPtr pClass; XEventClass *event_list; int nevents = 0; /* skip if already initialized */ if (si->num_xinput_devices && si->xinput_devices) return; si->num_xinput_devices = 0; list = XListInputDevices (si->dpy, &ndevices); if (list == NULL) { si->xinput_devices = NULL; return; } /* We only care about 3 event types per device (DeviceButtonPress, DeviceButtonRelease, and DeviceMotionNotify), hence the "* 3" for the event count. */ event_list = calloc(ndevices * 3, sizeof(XEventClass)); if (event_list == NULL) return; si->xinput_devices = calloc(ndevices, sizeof(struct xinput_dev_info)); if (si->xinput_devices == NULL) { free(event_list); return; } for (i = 0; i < ndevices; i++) { if ((list[i].use == IsXExtensionDevice) #ifdef IsXExtensionPointer || (list[i].use == IsXExtensionPointer) #endif ) { struct xinput_dev_info *dev_info = &si->xinput_devices[si->num_xinput_devices]; Bool device_we_want = False; if (si->prefs.debug_p) fprintf(stderr, "Extension device #%2d: XID=%2d type=%3d name=\"%s\"\n", i, (int) list[i].id, (int) list[i].type, list[i].name); dev = XOpenDevice (si->dpy, list[i].id); if (!dev) continue; dev_info->device = dev; pClass = list[i].inputclassinfo; for (class = 0; class < list[i].num_classes; class++) { switch (pClass->class) { case ButtonClass: if (((XButtonInfo *) pClass)->num_buttons > 0) { /* Macros set values in the second & third arguments */ DeviceButtonPress (dev, si->xinput_DeviceButtonPress, dev_info->press); event_list[nevents++] = dev_info->press; DeviceButtonRelease (dev, si->xinput_DeviceButtonRelease, dev_info->release); event_list[nevents++] = dev_info->release; device_we_want = True; } break; case ValuatorClass: if (((XValuatorInfo *) pClass)->num_axes > 0) { DeviceMotionNotify (dev, si->xinput_DeviceMotionNotify, dev_info->valuator); event_list[nevents++] = dev_info->valuator; device_we_want = True; } break; default: /* ignore other classes of devices/events */ break; } pClass = (XAnyClassPtr) & ((char *) pClass)[pClass->length]; } if (device_we_want) si->num_xinput_devices++; else XCloseDevice (si->dpy, dev); } } if (list) XFreeDeviceList (list); if ((nevents == 0) || (si->num_xinput_devices == 0)) { free(event_list); free(si->xinput_devices); si->xinput_devices = NULL; si->num_xinput_devices = 0; return; } for (i = 0; i < si->nscreens; i++) { saver_screen_info *ssi = &si->screens[i]; Window root = RootWindowOfScreen (ssi->screen); XSelectExtensionEvent (si->dpy, root, event_list, nevents); } free(event_list); } #if 0 /* not used */ static void close_xinput_extension (saver_info *si) { int i; for (i = 0; i < si->num_xinput_devices; i++) XCloseDevice (si->dpy, si->xinput_devices[i].device); free(si->xinput_devices); si->xinput_devices = NULL; si->num_xinput_devices = 0; } #endif #endif /* HAVE_XINPUT */ /* SGI SCREEN_SAVER server extension hackery. */ #ifdef HAVE_SGI_SAVER_EXTENSION # include static void init_sgi_saver_extension (saver_info *si) { saver_preferences *p = &si->prefs; int i; if (si->screen_blanked_p) /* If you mess with this while the server thinks it's active, the server crashes. */ return; for (i = 0; i < si->nscreens; i++) { saver_screen_info *ssi = &si->screens[i]; XScreenSaverDisable (si->dpy, XScreenNumberOfScreen(ssi->screen)); if (! XScreenSaverEnable (si->dpy, XScreenNumberOfScreen(ssi->screen))) { fprintf (stderr, "%s: SGI SCREEN_SAVER extension exists, but can't be initialized;\n\ perhaps some other screensaver program is already running?\n", blurb()); si->using_sgi_saver_extension = False; return; } } } #endif /* HAVE_SGI_SAVER_EXTENSION */ /* Figuring out what the appropriate XSetScreenSaver() parameters are (one wouldn't expect this to be rocket science.) */ void disable_builtin_screensaver (saver_info *si, Bool unblank_screen_p) { saver_preferences *p = &si->prefs; int current_server_timeout, current_server_interval; int current_prefer_blank, current_allow_exp; int desired_server_timeout, desired_server_interval; int desired_prefer_blank, desired_allow_exp; XGetScreenSaver (si->dpy, ¤t_server_timeout, ¤t_server_interval, ¤t_prefer_blank, ¤t_allow_exp); desired_server_timeout = current_server_timeout; desired_server_interval = current_server_interval; desired_prefer_blank = current_prefer_blank; desired_allow_exp = current_allow_exp; /* On SGIs, if interval is non-zero, it is the number of seconds after screen saving starts at which the monitor should be powered down. Obviously I don't want that, so set it to 0 (meaning "never".) Power saving is disabled if DontPreferBlanking, but in that case, we don't get extension events either. So we can't turn it off that way. Note: if you're running Irix 6.3 (O2), you may find that your monitor is powering down anyway, regardless of the xset settings. This is fixed by installing SGI patches 2447 and 2537. */ desired_server_interval = 0; /* I suspect (but am not sure) that DontAllowExposures might have something to do with powering off the monitor as well, at least on some systems that don't support XDPMS? Who knows... */ desired_allow_exp = AllowExposures; if (si->using_mit_saver_extension || si->using_sgi_saver_extension) { desired_server_timeout = (p->timeout / 1000); /* The SGI extension won't give us events unless blanking is on. I think (unsure right now) that the MIT extension is the opposite. */ if (si->using_sgi_saver_extension) desired_prefer_blank = PreferBlanking; else desired_prefer_blank = DontPreferBlanking; } else { /* When we're not using an extension, set the server-side timeout to 0, so that the server never gets involved with screen blanking, and we do it all ourselves. (However, when we *are* using an extension, we tell the server when to notify us, and rather than blanking the screen, the server will send us an X event telling us to blank.) */ desired_server_timeout = 0; } /* XSetScreenSaver() generates BadValue if either timeout parameter exceeds 15 bits (signed short.) That is 09:06:07. */ if (desired_server_timeout > 0x7FFF) desired_server_timeout = 0x7FFF; if (desired_server_interval > 0x7FFF) desired_server_interval = 0x7FFF; if (desired_server_timeout != current_server_timeout || desired_server_interval != current_server_interval || desired_prefer_blank != current_prefer_blank || desired_allow_exp != current_allow_exp) { if (p->verbose_p) fprintf (stderr, "%s: disabling server builtin screensaver:\n" "%s: (xset s %d %d; xset s %s; xset s %s)\n", blurb(), blurb(), desired_server_timeout, desired_server_interval, (desired_prefer_blank ? "blank" : "noblank"), (desired_allow_exp ? "expose" : "noexpose")); XSetScreenSaver (si->dpy, desired_server_timeout, desired_server_interval, desired_prefer_blank, desired_allow_exp); XSync(si->dpy, False); } #if defined(HAVE_MIT_SAVER_EXTENSION) || defined(HAVE_SGI_SAVER_EXTENSION) { static Bool extension_initted = False; if (!extension_initted) { extension_initted = True; # ifdef HAVE_MIT_SAVER_EXTENSION if (si->using_mit_saver_extension) init_mit_saver_extension(si); # endif # ifdef HAVE_SGI_SAVER_EXTENSION if (si->using_sgi_saver_extension) init_sgi_saver_extension(si); # endif } } #endif /* HAVE_MIT_SAVER_EXTENSION || HAVE_SGI_SAVER_EXTENSION */ if (unblank_screen_p) /* Turn off the server builtin saver if it is now running. */ XForceScreenSaver (si->dpy, ScreenSaverReset); } xscreensaver-5.36/driver/splash.c000644 000767 000024 00000067561 12720741017 017107 0ustar00jwzstaff000000 000000 /* xscreensaver, Copyright (c) 1991-2014, 2016 * -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. */ #ifdef HAVE_CONFIG_H # include "config.h" #endif #include #include "xscreensaver.h" #include "resources.h" #undef MAX #define MAX(a,b) ((a)>(b)?(a):(b)) void draw_shaded_rectangle (Display *dpy, Window window, int x, int y, int width, int height, int thickness, unsigned long top_color, unsigned long bottom_color) { XPoint points[4]; XGCValues gcv; GC gc1, gc2; if (thickness == 0) return; gcv.foreground = top_color; gc1 = XCreateGC (dpy, window, GCForeground, &gcv); gcv.foreground = bottom_color; gc2 = XCreateGC (dpy, window, GCForeground, &gcv); points [0].x = x; points [0].y = y; points [1].x = x + width; points [1].y = y; points [2].x = x + width - thickness; points [2].y = y + thickness; points [3].x = x; points [3].y = y + thickness; XFillPolygon (dpy, window, gc1, points, 4, Convex, CoordModeOrigin); points [0].x = x; points [0].y = y + thickness; points [1].x = x; points [1].y = y + height; points [2].x = x + thickness; points [2].y = y + height - thickness; points [3].x = x + thickness; points [3].y = y + thickness; XFillPolygon (dpy, window, gc1, points, 4, Convex, CoordModeOrigin); points [0].x = x + width; points [0].y = y; points [1].x = x + width - thickness; points [1].y = y + thickness; points [2].x = x + width - thickness; points [2].y = y + height - thickness; points [3].x = x + width; points [3].y = y + height - thickness; XFillPolygon (dpy, window, gc2, points, 4, Convex, CoordModeOrigin); points [0].x = x; points [0].y = y + height; points [1].x = x + width; points [1].y = y + height; points [2].x = x + width; points [2].y = y + height - thickness; points [3].x = x + thickness; points [3].y = y + height - thickness; XFillPolygon (dpy, window, gc2, points, 4, Convex, CoordModeOrigin); XFreeGC (dpy, gc1); XFreeGC (dpy, gc2); } int string_width (XFontStruct *font, char *s) { return XTextWidth(font, s, strlen(s)); } static void update_splash_window (saver_info *si); static void draw_splash_window (saver_info *si); static void destroy_splash_window (saver_info *si); static void unsplash_timer (XtPointer closure, XtIntervalId *id); static void do_demo (saver_screen_info *ssi); #ifdef PREFS_BUTTON static void do_prefs (saver_screen_info *ssi); #endif /* PREFS_BUTTON */ static void do_help (saver_screen_info *ssi); struct splash_dialog_data { saver_screen_info *prompt_screen; XtIntervalId timer; Dimension width; Dimension height; char *heading_label; char *body_label; char *body2_label; char *body3_label; char *body4_label; char *demo_label; #ifdef PREFS_BUTTON char *prefs_label; #endif /* PREFS_BUTTON */ char *help_label; XFontStruct *heading_font; XFontStruct *body_font; XFontStruct *button_font; Pixel foreground; Pixel background; Pixel border; Pixel button_foreground; Pixel button_background; Pixel shadow_top; Pixel shadow_bottom; Dimension logo_width; Dimension logo_height; Dimension internal_border; Dimension shadow_width; Dimension button_width, button_height; Dimension demo_button_x, demo_button_y; #ifdef PREFS_BUTTON Dimension prefs_button_x, prefs_button_y; #endif /* PREFS_BUTTON */ Dimension help_button_x, help_button_y; Pixmap logo_pixmap; Pixmap logo_clipmask; int logo_npixels; unsigned long *logo_pixels; int pressed; }; void make_splash_dialog (saver_info *si) { saver_preferences *p = &si->prefs; int x, y, bw; XSetWindowAttributes attrs; unsigned long attrmask = 0; splash_dialog_data *sp; saver_screen_info *ssi; Colormap cmap; char *f; Bool whine = decrepit_p (); if (whine) { /* If locking is not enabled, make sure they see the message. */ if (!p->lock_p) { si->prefs.splash_p = True; if (si->prefs.splash_duration < 5000) si->prefs.splash_duration = 5000; } si->prefs.splash_duration += 3000; } if (si->sp_data) return; if (!si->prefs.splash_p || si->prefs.splash_duration <= 0) return; ssi = &si->screens[mouse_screen (si)]; if (!ssi || !ssi->screen) return; /* WTF? Trying to splash while no screens connected? */ cmap = DefaultColormapOfScreen (ssi->screen); sp = (splash_dialog_data *) calloc (1, sizeof(*sp)); sp->prompt_screen = ssi; sp->heading_label = get_string_resource (si->dpy, "splash.heading.label", "Dialog.Label.Label"); sp->body_label = get_string_resource (si->dpy, "splash.body.label", "Dialog.Label.Label"); sp->body2_label = get_string_resource (si->dpy, "splash.body2.label", "Dialog.Label.Label"); sp->demo_label = get_string_resource (si->dpy, "splash.demo.label", "Dialog.Button.Label"); #ifdef PREFS_BUTTON sp->prefs_label = get_string_resource (si->dpy, "splash.prefs.label", "Dialog.Button.Label"); #endif /* PREFS_BUTTON */ sp->help_label = get_string_resource (si->dpy, "splash.help.label", "Dialog.Button.Label"); if (whine) { sp->body3_label = strdup("WARNING: This version is very old!"); sp->body4_label = strdup("Please upgrade!"); } if (!sp->heading_label) sp->heading_label = strdup("ERROR: REESOURCES NOT INSTALLED CORRECTLY"); if (!sp->body_label) sp->body_label = strdup("ERROR: REESOURCES NOT INSTALLED CORRECTLY"); if (!sp->body2_label) sp->body2_label = strdup("ERROR: REESOURCES NOT INSTALLED CORRECTLY"); if (!sp->demo_label) sp->demo_label = strdup("ERROR"); #ifdef PREFS_BUTTON if (!sp->prefs_label) sp->prefs_label = strdup("ERROR"); #endif /* PREFS_BUTTON */ if (!sp->help_label) sp->help_label = strdup("ERROR"); /* Put the version number in the label. */ { char *s = (char *) malloc (strlen(sp->heading_label) + 20); sprintf(s, sp->heading_label, si->version); free (sp->heading_label); sp->heading_label = s; } f = get_string_resource (si->dpy, "splash.headingFont", "Dialog.Font"); sp->heading_font = XLoadQueryFont (si->dpy, (f ? f : "fixed")); if (!sp->heading_font) sp->heading_font = XLoadQueryFont (si->dpy, "fixed"); if (f) free (f); f = get_string_resource(si->dpy, "splash.bodyFont", "Dialog.Font"); sp->body_font = XLoadQueryFont (si->dpy, (f ? f : "fixed")); if (!sp->body_font) sp->body_font = XLoadQueryFont (si->dpy, "fixed"); if (f) free (f); f = get_string_resource(si->dpy, "splash.buttonFont", "Dialog.Font"); sp->button_font = XLoadQueryFont (si->dpy, (f ? f : "fixed")); if (!sp->button_font) sp->button_font = XLoadQueryFont (si->dpy, "fixed"); if (f) free (f); sp->foreground = get_pixel_resource (si->dpy, cmap, "splash.foreground", "Dialog.Foreground"); sp->background = get_pixel_resource (si->dpy, cmap, "splash.background", "Dialog.Background"); sp->border = get_pixel_resource (si->dpy, cmap, "splash.borderColor", "Dialog.borderColor"); if (sp->foreground == sp->background) { /* Make sure the error messages show up. */ sp->foreground = BlackPixelOfScreen (ssi->screen); sp->background = WhitePixelOfScreen (ssi->screen); } sp->button_foreground = get_pixel_resource (si->dpy, cmap, "splash.Button.foreground", "Dialog.Button.Foreground"); sp->button_background = get_pixel_resource (si->dpy, cmap, "splash.Button.background", "Dialog.Button.Background"); sp->shadow_top = get_pixel_resource (si->dpy, cmap, "splash.topShadowColor", "Dialog.Foreground"); sp->shadow_bottom = get_pixel_resource (si->dpy, cmap, "splash.bottomShadowColor", "Dialog.Background"); sp->logo_width = get_integer_resource (si->dpy, "splash.logo.width", "Dialog.Logo.Width"); sp->logo_height = get_integer_resource (si->dpy, "splash.logo.height", "Dialog.Logo.Height"); sp->internal_border = get_integer_resource (si->dpy, "splash.internalBorderWidth", "Dialog.InternalBorderWidth"); sp->shadow_width = get_integer_resource (si->dpy, "splash.shadowThickness", "Dialog.ShadowThickness"); if (sp->logo_width == 0) sp->logo_width = 150; if (sp->logo_height == 0) sp->logo_height = 150; if (sp->internal_border == 0) sp->internal_border = 15; if (sp->shadow_width == 0) sp->shadow_width = 4; { int direction, ascent, descent; XCharStruct overall; sp->width = 0; sp->height = 0; /* Measure the heading_label. */ XTextExtents (sp->heading_font, sp->heading_label, strlen(sp->heading_label), &direction, &ascent, &descent, &overall); if (overall.width > sp->width) sp->width = overall.width; sp->height += ascent + descent; /* Measure the body_label. */ XTextExtents (sp->body_font, sp->body_label, strlen(sp->body_label), &direction, &ascent, &descent, &overall); if (overall.width > sp->width) sp->width = overall.width; sp->height += ascent + descent; /* Measure the body2_label. */ XTextExtents (sp->body_font, sp->body2_label, strlen(sp->body2_label), &direction, &ascent, &descent, &overall); if (overall.width > sp->width) sp->width = overall.width; sp->height += ascent + descent; /* Measure the optional body3_label. */ if (sp->body3_label) { XTextExtents (sp->heading_font, sp->body3_label, strlen(sp->body3_label), &direction, &ascent, &descent, &overall); if (overall.width > sp->width) sp->width = overall.width; XTextExtents (sp->heading_font, sp->body4_label, strlen(sp->body4_label), &direction, &ascent, &descent, &overall); if (overall.width > sp->width) sp->width = overall.width; sp->height += (ascent + descent) * 5; } { Dimension w2 = 0, w3 = 0, w4 = 0; Dimension h2 = 0, h3 = 0, h4 = 0; /* Measure the Demo button. */ XTextExtents (sp->button_font, sp->demo_label, strlen(sp->demo_label), &direction, &ascent, &descent, &overall); w2 = overall.width; h2 = ascent + descent; #ifdef PREFS_BUTTON /* Measure the Prefs button. */ XTextExtents (sp->button_font, sp->prefs_label, strlen(sp->prefs_label), &direction, &ascent, &descent, &overall); w3 = overall.width; h3 = ascent + descent; #else /* !PREFS_BUTTON */ w3 = 0; h3 = 0; #endif /* !PREFS_BUTTON */ /* Measure the Help button. */ XTextExtents (sp->button_font, sp->help_label, strlen(sp->help_label), &direction, &ascent, &descent, &overall); w4 = overall.width; h4 = ascent + descent; w2 = MAX(w2, w3); w2 = MAX(w2, w4); h2 = MAX(h2, h3); h2 = MAX(h2, h4); /* Add some horizontal padding inside the buttons. */ w2 += ascent; w2 += ((ascent + descent) / 2) + (sp->shadow_width * 2); h2 += ((ascent + descent) / 2) + (sp->shadow_width * 2); sp->button_width = w2; sp->button_height = h2; #ifdef PREFS_BUTTON w2 *= 3; #else /* !PREFS_BUTTON */ w2 *= 2; #endif /* !PREFS_BUTTON */ w2 += ((ascent + descent) * 2); /* for space between buttons */ if (w2 > sp->width) sp->width = w2; sp->height += h2; } sp->width += (sp->internal_border * 2); sp->height += (sp->internal_border * 3); if (sp->logo_height > sp->height) sp->height = sp->logo_height; else if (sp->height > sp->logo_height) sp->logo_height = sp->height; sp->logo_width = sp->logo_height; sp->width += sp->logo_width; } attrmask |= CWOverrideRedirect; attrs.override_redirect = True; attrmask |= CWEventMask; attrs.event_mask = (ExposureMask | ButtonPressMask | ButtonReleaseMask); { int sx = 0, sy = 0, w, h; int mouse_x = 0, mouse_y = 0; { Window pointer_root, pointer_child; int root_x, root_y, win_x, win_y; unsigned int mask; if (XQueryPointer (si->dpy, RootWindowOfScreen (ssi->screen), &pointer_root, &pointer_child, &root_x, &root_y, &win_x, &win_y, &mask)) { mouse_x = root_x; mouse_y = root_y; } } x = ssi->x; y = ssi->y; w = ssi->width; h = ssi->height; if (si->prefs.debug_p) w /= 2; x = sx + (((w + sp->width) / 2) - sp->width); y = sy + (((h + sp->height) / 2) - sp->height); if (x < sx) x = sx; if (y < sy) y = sy; } bw = get_integer_resource (si->dpy, "splash.borderWidth", "Dialog.BorderWidth"); si->splash_dialog = XCreateWindow (si->dpy, RootWindowOfScreen(ssi->screen), x, y, sp->width, sp->height, bw, DefaultDepthOfScreen (ssi->screen), InputOutput, DefaultVisualOfScreen(ssi->screen), attrmask, &attrs); XSetWindowBackground (si->dpy, si->splash_dialog, sp->background); XSetWindowBorder (si->dpy, si->splash_dialog, sp->border); sp->logo_pixmap = xscreensaver_logo (ssi->screen, /* same visual as si->splash_dialog */ DefaultVisualOfScreen (ssi->screen), si->splash_dialog, cmap, sp->background, &sp->logo_pixels, &sp->logo_npixels, &sp->logo_clipmask, True); XMapRaised (si->dpy, si->splash_dialog); XSync (si->dpy, False); si->sp_data = sp; sp->timer = XtAppAddTimeOut (si->app, si->prefs.splash_duration, unsplash_timer, (XtPointer) si); draw_splash_window (si); XSync (si->dpy, False); } static void draw_splash_window (saver_info *si) { splash_dialog_data *sp = si->sp_data; XGCValues gcv; GC gc1, gc2; int hspacing, vspacing, height; int x1, x2, x3, y1, y2; int sw; #ifdef PREFS_BUTTON int nbuttons = 3; #else /* !PREFS_BUTTON */ int nbuttons = 2; #endif /* !PREFS_BUTTON */ height = (sp->heading_font->ascent + sp->heading_font->descent + sp->body_font->ascent + sp->body_font->descent + sp->body_font->ascent + sp->body_font->descent + sp->button_font->ascent + sp->button_font->descent); vspacing = ((sp->height - (4 * sp->shadow_width) - (2 * sp->internal_border) - height) / 5); if (vspacing < 0) vspacing = 0; if (vspacing > (sp->heading_font->ascent * 2)) vspacing = (sp->heading_font->ascent * 2); gcv.foreground = sp->foreground; gc1 = XCreateGC (si->dpy, si->splash_dialog, GCForeground, &gcv); gc2 = XCreateGC (si->dpy, si->splash_dialog, GCForeground, &gcv); x1 = sp->logo_width; x3 = sp->width - (sp->shadow_width * 2); y1 = sp->internal_border; /* top heading */ XSetFont (si->dpy, gc1, sp->heading_font->fid); sw = string_width (sp->heading_font, sp->heading_label); x2 = (x1 + ((x3 - x1 - sw) / 2)); y1 += sp->heading_font->ascent; XDrawString (si->dpy, si->splash_dialog, gc1, x2, y1, sp->heading_label, strlen(sp->heading_label)); y1 += sp->heading_font->descent; /* text below top heading */ XSetFont (si->dpy, gc1, sp->body_font->fid); y1 += vspacing + sp->body_font->ascent; sw = string_width (sp->body_font, sp->body_label); x2 = (x1 + ((x3 - x1 - sw) / 2)); XDrawString (si->dpy, si->splash_dialog, gc1, x2, y1, sp->body_label, strlen(sp->body_label)); y1 += sp->body_font->descent; y1 += sp->body_font->ascent; sw = string_width (sp->body_font, sp->body2_label); x2 = (x1 + ((x3 - x1 - sw) / 2)); XDrawString (si->dpy, si->splash_dialog, gc1, x2, y1, sp->body2_label, strlen(sp->body2_label)); y1 += sp->body_font->descent; if (sp->body3_label) { XSetFont (si->dpy, gc1, sp->heading_font->fid); y1 += sp->heading_font->ascent + sp->heading_font->descent; y1 += sp->heading_font->ascent; sw = string_width (sp->heading_font, sp->body3_label); x2 = (x1 + ((x3 - x1 - sw) / 2)); XDrawString (si->dpy, si->splash_dialog, gc1, x2, y1, sp->body3_label, strlen(sp->body3_label)); y1 += sp->heading_font->descent + sp->heading_font->ascent; sw = string_width (sp->heading_font, sp->body4_label); x2 = (x1 + ((x3 - x1 - sw) / 2)); XDrawString (si->dpy, si->splash_dialog, gc1, x2, y1, sp->body4_label, strlen(sp->body4_label)); y1 += sp->heading_font->descent; XSetFont (si->dpy, gc1, sp->body_font->fid); } /* The buttons */ XSetForeground (si->dpy, gc1, sp->button_foreground); XSetForeground (si->dpy, gc2, sp->button_background); /* y1 += (vspacing * 2);*/ y1 = sp->height - sp->internal_border - sp->button_height; x1 += sp->internal_border; y2 = (y1 + ((sp->button_height - (sp->button_font->ascent + sp->button_font->descent)) / 2) + sp->button_font->ascent); hspacing = ((sp->width - x1 - (sp->shadow_width * 2) - sp->internal_border - (sp->button_width * nbuttons)) / 2); x2 = x1 + ((sp->button_width - string_width(sp->button_font, sp->demo_label)) / 2); XFillRectangle (si->dpy, si->splash_dialog, gc2, x1, y1, sp->button_width, sp->button_height); XDrawString (si->dpy, si->splash_dialog, gc1, x2, y2, sp->demo_label, strlen(sp->demo_label)); sp->demo_button_x = x1; sp->demo_button_y = y1; #ifdef PREFS_BUTTON x1 += hspacing + sp->button_width; x2 = x1 + ((sp->button_width - string_width(sp->button_font,sp->prefs_label)) / 2); XFillRectangle (si->dpy, si->splash_dialog, gc2, x1, y1, sp->button_width, sp->button_height); XDrawString (si->dpy, si->splash_dialog, gc1, x2, y2, sp->prefs_label, strlen(sp->prefs_label)); sp->prefs_button_x = x1; sp->prefs_button_y = y1; #endif /* PREFS_BUTTON */ #ifdef PREFS_BUTTON x1 += hspacing + sp->button_width; #else /* !PREFS_BUTTON */ x1 = (sp->width - sp->button_width - sp->internal_border - (sp->shadow_width * 2)); #endif /* !PREFS_BUTTON */ x2 = x1 + ((sp->button_width - string_width(sp->button_font,sp->help_label)) / 2); XFillRectangle (si->dpy, si->splash_dialog, gc2, x1, y1, sp->button_width, sp->button_height); XDrawString (si->dpy, si->splash_dialog, gc1, x2, y2, sp->help_label, strlen(sp->help_label)); sp->help_button_x = x1; sp->help_button_y = y1; /* The logo */ x1 = sp->shadow_width * 6; y1 = sp->shadow_width * 6; x2 = sp->logo_width - (sp->shadow_width * 12); y2 = sp->logo_height - (sp->shadow_width * 12); if (sp->logo_pixmap) { Window root; int x, y; unsigned int w, h, bw, d; XGetGeometry (si->dpy, sp->logo_pixmap, &root, &x, &y, &w, &h, &bw, &d); XSetForeground (si->dpy, gc1, sp->foreground); XSetBackground (si->dpy, gc1, sp->background); XSetClipMask (si->dpy, gc1, sp->logo_clipmask); XSetClipOrigin (si->dpy, gc1, x1 + ((x2 - (int)w) /2), y1 + ((y2 - (int)h) / 2)); if (d == 1) XCopyPlane (si->dpy, sp->logo_pixmap, si->splash_dialog, gc1, 0, 0, w, h, x1 + ((x2 - (int)w) / 2), y1 + ((y2 - (int)h) / 2), 1); else XCopyArea (si->dpy, sp->logo_pixmap, si->splash_dialog, gc1, 0, 0, w, h, x1 + ((x2 - (int)w) / 2), y1 + ((y2 - (int)h) / 2)); } /* Solid border inside the logo box. */ #if 0 XSetForeground (si->dpy, gc1, sp->foreground); XDrawRectangle (si->dpy, si->splash_dialog, gc1, x1, y1, x2-1, y2-1); #endif /* The shadow around the logo */ draw_shaded_rectangle (si->dpy, si->splash_dialog, sp->shadow_width * 4, sp->shadow_width * 4, sp->logo_width - (sp->shadow_width * 8), sp->logo_height - (sp->shadow_width * 8), sp->shadow_width, sp->shadow_bottom, sp->shadow_top); /* The shadow around the whole window */ draw_shaded_rectangle (si->dpy, si->splash_dialog, 0, 0, sp->width, sp->height, sp->shadow_width, sp->shadow_top, sp->shadow_bottom); XFreeGC (si->dpy, gc1); XFreeGC (si->dpy, gc2); update_splash_window (si); } static void update_splash_window (saver_info *si) { splash_dialog_data *sp = si->sp_data; int pressed; if (!sp) return; pressed = sp->pressed; /* The shadows around the buttons */ draw_shaded_rectangle (si->dpy, si->splash_dialog, sp->demo_button_x, sp->demo_button_y, sp->button_width, sp->button_height, sp->shadow_width, (pressed == 1 ? sp->shadow_bottom : sp->shadow_top), (pressed == 1 ? sp->shadow_top : sp->shadow_bottom)); #ifdef PREFS_BUTTON draw_shaded_rectangle (si->dpy, si->splash_dialog, sp->prefs_button_x, sp->prefs_button_y, sp->button_width, sp->button_height, sp->shadow_width, (pressed == 2 ? sp->shadow_bottom : sp->shadow_top), (pressed == 2 ? sp->shadow_top : sp->shadow_bottom)); #endif /* PREFS_BUTTON */ draw_shaded_rectangle (si->dpy, si->splash_dialog, sp->help_button_x, sp->help_button_y, sp->button_width, sp->button_height, sp->shadow_width, (pressed == 3 ? sp->shadow_bottom : sp->shadow_top), (pressed == 3 ? sp->shadow_top : sp->shadow_bottom)); } static void destroy_splash_window (saver_info *si) { splash_dialog_data *sp = si->sp_data; saver_screen_info *ssi = sp->prompt_screen; Colormap cmap = DefaultColormapOfScreen (ssi->screen); Pixel black = BlackPixelOfScreen (ssi->screen); Pixel white = WhitePixelOfScreen (ssi->screen); if (sp->timer) XtRemoveTimeOut (sp->timer); if (si->splash_dialog) { XDestroyWindow (si->dpy, si->splash_dialog); si->splash_dialog = 0; } if (sp->heading_label) free (sp->heading_label); if (sp->body_label) free (sp->body_label); if (sp->body2_label) free (sp->body2_label); if (sp->body3_label) free (sp->body3_label); if (sp->body4_label) free (sp->body4_label); if (sp->demo_label) free (sp->demo_label); #ifdef PREFS_BUTTON if (sp->prefs_label) free (sp->prefs_label); #endif /* PREFS_BUTTON */ if (sp->help_label) free (sp->help_label); if (sp->heading_font) XFreeFont (si->dpy, sp->heading_font); if (sp->body_font) XFreeFont (si->dpy, sp->body_font); if (sp->button_font) XFreeFont (si->dpy, sp->button_font); if (sp->foreground != black && sp->foreground != white) XFreeColors (si->dpy, cmap, &sp->foreground, 1, 0L); if (sp->background != black && sp->background != white) XFreeColors (si->dpy, cmap, &sp->background, 1, 0L); if (sp->button_foreground != black && sp->button_foreground != white) XFreeColors (si->dpy, cmap, &sp->button_foreground, 1, 0L); if (sp->button_background != black && sp->button_background != white) XFreeColors (si->dpy, cmap, &sp->button_background, 1, 0L); if (sp->shadow_top != black && sp->shadow_top != white) XFreeColors (si->dpy, cmap, &sp->shadow_top, 1, 0L); if (sp->shadow_bottom != black && sp->shadow_bottom != white) XFreeColors (si->dpy, cmap, &sp->shadow_bottom, 1, 0L); if (sp->logo_pixmap) XFreePixmap (si->dpy, sp->logo_pixmap); if (sp->logo_clipmask) XFreePixmap (si->dpy, sp->logo_clipmask); if (sp->logo_pixels) { if (sp->logo_npixels) XFreeColors (si->dpy, cmap, sp->logo_pixels, sp->logo_npixels, 0L); free (sp->logo_pixels); sp->logo_pixels = 0; sp->logo_npixels = 0; } memset (sp, 0, sizeof(*sp)); free (sp); si->sp_data = 0; } void handle_splash_event (saver_info *si, XEvent *event) { splash_dialog_data *sp = si->sp_data; saver_screen_info *ssi; int which = 0; if (!sp) return; ssi = sp->prompt_screen; switch (event->xany.type) { case Expose: draw_splash_window (si); break; case ButtonPress: case ButtonRelease: if (event->xbutton.x >= sp->demo_button_x && event->xbutton.x < sp->demo_button_x + sp->button_width && event->xbutton.y >= sp->demo_button_y && event->xbutton.y < sp->demo_button_y + sp->button_height) which = 1; #ifdef PREFS_BUTTON else if (event->xbutton.x >= sp->prefs_button_x && event->xbutton.x < sp->prefs_button_x + sp->button_width && event->xbutton.y >= sp->prefs_button_y && event->xbutton.y < sp->prefs_button_y + sp->button_height) which = 2; #endif /* PREFS_BUTTON */ else if (event->xbutton.x >= sp->help_button_x && event->xbutton.x < sp->help_button_x + sp->button_width && event->xbutton.y >= sp->help_button_y && event->xbutton.y < sp->help_button_y + sp->button_height) which = 3; if (event->xany.type == ButtonPress) { sp->pressed = which; update_splash_window (si); if (which == 0) XBell (si->dpy, False); } else if (event->xany.type == ButtonRelease) { if (which && sp->pressed == which) { destroy_splash_window (si); sp = si->sp_data; switch (which) { case 1: do_demo (ssi); break; #ifdef PREFS_BUTTON case 2: do_prefs (ssi); break; #endif /* PREFS_BUTTON */ case 3: do_help (ssi); break; default: abort(); } } else if (which == 0 && sp->pressed == 0) { /* click and release on the window but not in a button: treat that as "dismiss the splash dialog." */ destroy_splash_window (si); sp = si->sp_data; } if (sp) sp->pressed = 0; update_splash_window (si); } break; default: break; } } static void unsplash_timer (XtPointer closure, XtIntervalId *id) { saver_info *si = (saver_info *) closure; if (si && si->sp_data) destroy_splash_window (si); } /* Button callbacks */ #ifdef VMS # define pid_t int # define fork vfork #endif /* VMS */ static void do_demo (saver_screen_info *ssi) { saver_info *si = ssi->global; saver_preferences *p = &si->prefs; const char *cmd = p->demo_command; if (cmd && *cmd) fork_and_exec (ssi, cmd); else fprintf (stderr, "%s: no demo-mode command has been specified.\n", blurb()); } #ifdef PREFS_BUTTON static void do_prefs (saver_screen_info *ssi) { saver_info *si = ssi->global; saver_preferences *p = &si->prefs; const char *cmd = p->prefs_command; if (command && *command) fork_and_exec (ssi, cmd); else fprintf (stderr, "%s: no preferences command has been specified.\n", blurb()); } #endif /* PREFS_BUTTON */ static void do_help (saver_screen_info *ssi) { saver_info *si = ssi->global; saver_preferences *p = &si->prefs; char *help_command = 0; if (!p->load_url_command || !*p->load_url_command) { fprintf (stderr, "%s: no URL command has been specified.\n", blurb()); return; } if (!p->help_url || !*p->help_url) { fprintf (stderr, "%s: no Help URL has been specified.\n", blurb()); return; } help_command = (char *) malloc (strlen (p->load_url_command) + (strlen (p->help_url) * 4) + 10); sprintf (help_command, p->load_url_command, p->help_url, p->help_url, p->help_url, p->help_url); fork_and_exec (ssi, help_command); free (help_command); } xscreensaver-5.36/driver/setuid.c000644 000767 000024 00000024663 12701612237 017106 0ustar00jwzstaff000000 000000 /* setuid.c --- management of runtime privileges. * xscreensaver, Copyright (c) 1993-1998, 2005 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. */ #ifdef HAVE_CONFIG_H # include "config.h" #endif #include /* not used for much... */ /* This file doesn't need the Xt headers, so stub these types out... */ #undef XtPointer #define XtAppContext void* #define XrmDatabase void* #define XtIntervalId void* #define XtPointer void* #define Widget void* #include "xscreensaver.h" #ifndef EPERM #include #endif #include /* for getpwnam() and struct passwd */ #include /* for getgrgid() and struct group */ static const char * uid_gid_string (uid_t uid, gid_t gid) { static char buf[255]; struct passwd *p = 0; struct group *g = 0; p = getpwuid (uid); g = getgrgid (gid); sprintf (buf, "%.100s/%.100s (%ld/%ld)", (p && p->pw_name ? p->pw_name : "???"), (g && g->gr_name ? g->gr_name : "???"), (long) uid, (long) gid); return buf; } void describe_uids (saver_info *si, FILE *out) { uid_t uid = getuid(); gid_t gid = getgid(); uid_t euid = geteuid(); gid_t egid = getegid(); char *s1 = strdup (uid_gid_string (uid, gid)); char *s2 = strdup (uid_gid_string (euid, egid)); if (si->orig_uid && *si->orig_uid && (!!strcmp (si->orig_uid, s1) || !!strcmp (si->orig_uid, s2))) fprintf (out, "%s: initial effective uid/gid was %s\n", blurb(), si->orig_uid); fprintf (out, "%s: running as %s", blurb(), s1); if (uid != euid || gid != egid) fprintf (out, "; effectively %s", s2); fprintf(out, "\n"); free(s1); free(s2); } /* Returns true if we need to call setgroups(). Without calling setgroups(), the process will retain any supplementary gids associated with the uid, e.g.: % groups root root : root bin daemon sys adm disk wheel However, setgroups() can only be called by root, and returns EPERM for other users even if the call would be a no-op (e.g., setting the group list to the current list.) So, to avoid that spurious error, before calling setgroups() we first check whether the current list of groups contains only one element, our target group. If so, we don't need to call setgroups(). */ static int setgroups_needed_p (uid_t target_group) { gid_t groups[1024]; int n, size; size = sizeof(groups) / sizeof(gid_t); n = getgroups (size - 1, groups); if (n < 0) { char buf [1024]; sprintf (buf, "%s: getgroups(%ld, ...)", blurb(), (long int)(size - 1)); perror (buf); return 1; } else if (n == 0) /* an empty list means only egid is in effect. */ return 0; else if (n == 1 && groups[0] == target_group) /* one element, the target */ return 0; else /* more than one, or the wrong one. */ return 1; } static int set_ids_by_number (uid_t uid, gid_t gid, char **message_ret) { int uid_errno = 0; int gid_errno = 0; int sgs_errno = 0; struct passwd *p = getpwuid (uid); struct group *g = getgrgid (gid); if (message_ret) *message_ret = 0; /* Rumor has it that some implementations of of setuid() do nothing when called with -1; therefore, if the "nobody" user has a uid of -1, then that would be Really Bad. Rumor further has it that such systems really ought to be using -2 for "nobody", since that works. So, if we get a uid (or gid, for good measure) of -1, switch to -2 instead. Note that this must be done after we've looked up the user/group names with getpwuid(-1) and/or getgrgid(-1). */ if (gid == (gid_t) -1) gid = (gid_t) -2; if (uid == (uid_t) -1) uid = (uid_t) -2; errno = 0; if (setgroups_needed_p (gid) && setgroups (1, &gid) < 0) sgs_errno = errno ? errno : -1; errno = 0; if (setgid (gid) != 0) gid_errno = errno ? errno : -1; errno = 0; if (setuid (uid) != 0) uid_errno = errno ? errno : -1; if (uid_errno == 0 && gid_errno == 0 && sgs_errno == 0) { static char buf [1024]; sprintf (buf, "changed uid/gid to %.100s/%.100s (%ld/%ld).", (p && p->pw_name ? p->pw_name : "???"), (g && g->gr_name ? g->gr_name : "???"), (long) uid, (long) gid); if (message_ret) *message_ret = buf; return 0; } else { char buf [1024]; gid_t groups[1024]; int n, size; if (sgs_errno) { sprintf (buf, "%s: couldn't setgroups to %.100s (%ld)", blurb(), (g && g->gr_name ? g->gr_name : "???"), (long) gid); if (sgs_errno == -1) fprintf(stderr, "%s: unknown error\n", buf); else { errno = sgs_errno; perror(buf); } fprintf (stderr, "%s: effective group list: ", blurb()); size = sizeof(groups) / sizeof(gid_t); n = getgroups (size - 1, groups); if (n < 0) fprintf (stderr, "unknown!\n"); else { int i; fprintf (stderr, "["); for (i = 0; i < n; i++) { g = getgrgid (groups[i]); if (i > 0) fprintf (stderr, ", "); if (g && g->gr_name) fprintf (stderr, "%s", g->gr_name); else fprintf (stderr, "%ld", (long) groups[i]); } fprintf (stderr, "]\n"); } } if (gid_errno) { sprintf (buf, "%s: couldn't set gid to %.100s (%ld)", blurb(), (g && g->gr_name ? g->gr_name : "???"), (long) gid); if (gid_errno == -1) fprintf(stderr, "%s: unknown error\n", buf); else { errno = gid_errno; perror(buf); } } if (uid_errno) { sprintf (buf, "%s: couldn't set uid to %.100s (%ld)", blurb(), (p && p->pw_name ? p->pw_name : "???"), (long) uid); if (uid_errno == -1) fprintf(stderr, "%s: unknown error\n", buf); else { errno = uid_errno; perror(buf); } } return -1; } } /* If we've been run as setuid or setgid to someone else (most likely root) turn off the extra permissions so that random user-specified programs don't get special privileges. (On some systems it is necessary to install this program as setuid root in order to read the passwd file to implement lock-mode.) *** WARNING: DO NOT DISABLE ANY OF THE FOLLOWING CODE! If you do so, you will open a security hole. See the sections of the xscreensaver manual titled "LOCKING AND ROOT LOGINS", and "USING XDM". */ void hack_uid (saver_info *si) { /* Discard privileges, and set the effective user/group ids to the real user/group ids. That is, give up our "chmod +s" rights. */ { uid_t euid = geteuid(); gid_t egid = getegid(); uid_t uid = getuid(); gid_t gid = getgid(); si->orig_uid = strdup (uid_gid_string (euid, egid)); if (uid != euid || gid != egid) if (set_ids_by_number (uid, gid, &si->uid_message) != 0) saver_exit (si, 1, 0); } /* Locking can't work when running as root, because we have no way of knowing what the user id of the logged in user is (so we don't know whose password to prompt for.) *** WARNING: DO NOT DISABLE THIS CODE! If you do so, you will open a security hole. See the sections of the xscreensaver manual titled "LOCKING AND ROOT LOGINS", and "USING XDM". */ if (getuid() == (uid_t) 0) { si->locking_disabled_p = True; si->nolock_reason = "running as root"; } /* If we're running as root, switch to a safer user. This is above and beyond the fact that we've disabling locking, above -- the theory is that running graphics demos as root is just always a stupid thing to do, since they have probably never been security reviewed and are more likely to be buggy than just about any other kind of program. (And that assumes non-malicious code. There are also attacks here.) *** WARNING: DO NOT DISABLE THIS CODE! If you do so, you will open a security hole. See the sections of the xscreensaver manual titled "LOCKING AND ROOT LOGINS", and "USING XDM". */ if (getuid() == (uid_t) 0) { struct passwd *p; p = getpwnam ("nobody"); if (! p) p = getpwnam ("noaccess"); if (! p) p = getpwnam ("daemon"); if (! p) { fprintf (stderr, "%s: running as root, and couldn't find a safer uid.\n", blurb()); saver_exit(si, 1, 0); } if (set_ids_by_number (p->pw_uid, p->pw_gid, &si->uid_message) != 0) saver_exit (si, -1, 0); } /* If there's anything even remotely funny looking about the passwd struct, or if we're running as some other user from the list below (a non-comprehensive selection of users known to be privileged in some way, and not normal end-users) then disable locking. If it was possible, switching to "nobody" would be the thing to do, but only root itself has the privs to do that. *** WARNING: DO NOT DISABLE THIS CODE! If you do so, you will open a security hole. See the sections of the xscreensaver manual titled "LOCKING AND ROOT LOGINS", and "USING XDM". */ { uid_t uid = getuid (); /* get it again */ struct passwd *p = getpwuid (uid); /* get it again */ if (!p || uid == (uid_t) 0 || uid == (uid_t) -1 || uid == (uid_t) -2 || p->pw_uid == (uid_t) 0 || p->pw_uid == (uid_t) -1 || p->pw_uid == (uid_t) -2 || !p->pw_name || !*p->pw_name || !strcmp (p->pw_name, "root") || !strcmp (p->pw_name, "nobody") || !strcmp (p->pw_name, "noaccess") || !strcmp (p->pw_name, "operator") || !strcmp (p->pw_name, "daemon") || !strcmp (p->pw_name, "bin") || !strcmp (p->pw_name, "adm") || !strcmp (p->pw_name, "sys") || !strcmp (p->pw_name, "games")) { static char buf [1024]; sprintf (buf, "running as %.100s", (p && p->pw_name && *p->pw_name ? p->pw_name : "")); si->nolock_reason = buf; si->locking_disabled_p = True; si->dangerous_uid_p = True; } } } xscreensaver-5.36/driver/stderr.c000664 000767 000024 00000034203 12701612240 017077 0ustar00jwzstaff000000 000000 /* stderr.c --- capturing stdout/stderr output onto the screensaver window. * xscreensaver, Copyright (c) 1991-2016 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. */ /* stderr hackery - Why Unix Sucks, reason number 32767. */ #ifdef HAVE_CONFIG_H # include "config.h" #endif #include #include #include #ifdef HAVE_UNISTD_H # include #endif #ifdef HAVE_FCNTL # include #endif #include #include "xscreensaver.h" #include "resources.h" #include "visual.h" FILE *real_stderr = 0; FILE *real_stdout = 0; /* It's ok for these to be global, since they refer to the one and only stderr stream, not to a particular screen or window or visual. */ static char stderr_buffer [4096]; static char *stderr_tail = 0; static time_t stderr_last_read = 0; static int stderr_stdout_read_fd = -1; static void make_stderr_overlay_window (saver_screen_info *); /* Recreates the stderr window or GCs: do this when the xscreensaver window on a screen has been re-created. */ void reset_stderr (saver_screen_info *ssi) { saver_info *si = ssi->global; if (si->prefs.debug_p) fprintf ((real_stderr ? real_stderr : stderr), "%s: resetting stderr\n", blurb()); ssi->stderr_text_x = 0; ssi->stderr_text_y = 0; if (ssi->stderr_gc) XFreeGC (si->dpy, ssi->stderr_gc); ssi->stderr_gc = 0; if (ssi->stderr_overlay_window) XDestroyWindow(si->dpy, ssi->stderr_overlay_window); ssi->stderr_overlay_window = 0; if (ssi->stderr_cmap) XFreeColormap(si->dpy, ssi->stderr_cmap); ssi->stderr_cmap = 0; } /* Erases any stderr text overlaying the screen (if possible) and resets the stderr output cursor to the upper left. Do this when the xscreensaver window is cleared. */ void clear_stderr (saver_screen_info *ssi) { saver_info *si = ssi->global; ssi->stderr_text_x = 0; ssi->stderr_text_y = 0; if (ssi->stderr_overlay_window) XClearWindow (si->dpy, ssi->stderr_overlay_window); } /* Draws the string on the screen's window. */ static void print_stderr_1 (saver_screen_info *ssi, char *string) { saver_info *si = ssi->global; Display *dpy = si->dpy; Screen *screen = ssi->screen; Window window = (ssi->stderr_overlay_window ? ssi->stderr_overlay_window : ssi->screensaver_window); int h_border = 20; int v_border = 20; char *head = string; char *tail; if (! ssi->stderr_font) { char *font_name = get_string_resource (dpy, "font", "Font"); if (!font_name) font_name = strdup ("fixed"); ssi->stderr_font = XLoadQueryFont (dpy, font_name); if (! ssi->stderr_font) ssi->stderr_font = XLoadQueryFont (dpy, "fixed"); ssi->stderr_line_height = (ssi->stderr_font->ascent + ssi->stderr_font->descent); free (font_name); } if (! ssi->stderr_gc) { XGCValues gcv; Pixel fg, bg; Colormap cmap = ssi->cmap; if (!ssi->stderr_overlay_window && get_boolean_resource(dpy, "overlayStderr", "Boolean")) { make_stderr_overlay_window (ssi); if (ssi->stderr_overlay_window) window = ssi->stderr_overlay_window; if (ssi->stderr_cmap) cmap = ssi->stderr_cmap; } fg = get_pixel_resource (dpy,cmap,"overlayTextForeground","Foreground"); bg = get_pixel_resource (dpy,cmap,"overlayTextBackground","Background"); gcv.font = ssi->stderr_font->fid; gcv.foreground = fg; gcv.background = bg; ssi->stderr_gc = XCreateGC (dpy, window, (GCFont | GCForeground | GCBackground), &gcv); } if (ssi->stderr_cmap) XInstallColormap(si->dpy, ssi->stderr_cmap); for (tail = string; *tail; tail++) { if (*tail == '\n' || *tail == '\r') { int maxy = HeightOfScreen (screen) - v_border - v_border; if (tail != head) XDrawImageString (dpy, window, ssi->stderr_gc, ssi->stderr_text_x + h_border, ssi->stderr_text_y + v_border + ssi->stderr_font->ascent, head, tail - head); ssi->stderr_text_x = 0; ssi->stderr_text_y += ssi->stderr_line_height; head = tail + 1; if (*tail == '\r' && *head == '\n') head++, tail++; if (ssi->stderr_text_y > maxy - ssi->stderr_line_height) { #if 0 ssi->stderr_text_y = 0; #else int offset = ssi->stderr_line_height * 5; XWindowAttributes xgwa; XGetWindowAttributes (dpy, window, &xgwa); XCopyArea (dpy, window, window, ssi->stderr_gc, 0, v_border + offset, xgwa.width, (xgwa.height - v_border - v_border - offset), 0, v_border); XClearArea (dpy, window, 0, xgwa.height - v_border - offset, xgwa.width, offset, False); ssi->stderr_text_y -= offset; #endif } } } if (tail != head) { int direction, ascent, descent; XCharStruct overall; XDrawImageString (dpy, window, ssi->stderr_gc, ssi->stderr_text_x + h_border, ssi->stderr_text_y + v_border + ssi->stderr_font->ascent, head, tail - head); XTextExtents (ssi->stderr_font, tail, tail - head, &direction, &ascent, &descent, &overall); ssi->stderr_text_x += overall.width; } } static void make_stderr_overlay_window (saver_screen_info *ssi) { saver_info *si = ssi->global; unsigned long transparent_pixel = 0; Visual *visual = get_overlay_visual (ssi->screen, &transparent_pixel); if (visual) { int depth = visual_depth (ssi->screen, visual); XSetWindowAttributes attrs; XWindowAttributes xgwa; unsigned long attrmask; XGetWindowAttributes (si->dpy, ssi->screensaver_window, &xgwa); if (si->prefs.debug_p) fprintf(real_stderr, "%s: using overlay visual 0x%0x for stderr text layer.\n", blurb(), (int) XVisualIDFromVisual (visual)); ssi->stderr_cmap = XCreateColormap(si->dpy, RootWindowOfScreen(ssi->screen), visual, AllocNone); attrmask = (CWColormap | CWBackPixel | CWBackingPixel | CWBorderPixel | CWBackingStore | CWSaveUnder); attrs.colormap = ssi->stderr_cmap; attrs.background_pixel = transparent_pixel; attrs.backing_pixel = transparent_pixel; attrs.border_pixel = transparent_pixel; attrs.backing_store = NotUseful; attrs.save_under = False; ssi->stderr_overlay_window = XCreateWindow(si->dpy, ssi->screensaver_window, 0, 0, xgwa.width, xgwa.height, 0, depth, InputOutput, visual, attrmask, &attrs); XMapRaised(si->dpy, ssi->stderr_overlay_window); } } /* Draws the string on each screen's window as error text. */ static void print_stderr (saver_info *si, char *string) { saver_preferences *p = &si->prefs; int i; /* In verbose mode, copy it to stderr as well. */ if (p->verbose_p) fprintf (real_stderr, "%s", string); for (i = 0; i < si->nscreens; i++) print_stderr_1 (&si->screens[i], string); } /* Polls the stderr buffer every few seconds and if it finds any text, writes it on all screens. */ static void stderr_popup_timer_fn (XtPointer closure, XtIntervalId *id) { saver_info *si = (saver_info *) closure; char *s = stderr_buffer; if (*s) { /* If too much data was printed, then something has gone haywire, so truncate it. */ char *trailer = "\n\n<< stderr diagnostics have been truncated >>\n\n"; int max = sizeof (stderr_buffer) - strlen (trailer) - 5; if (strlen (s) > max) strcpy (s + max, trailer); /* Now show the user. */ print_stderr (si, s); } stderr_tail = stderr_buffer; si->stderr_popup_timer = 0; } /* Called when data becomes available on the stderr pipe. Copies it into stderr_buffer where stderr_popup_timer_fn() can find it later. */ static void stderr_callback (XtPointer closure, int *fd, XtIntervalId *id) { saver_info *si = (saver_info *) closure; char *s; int left; int size; int read_this_time = 0; if (!fd || *fd < 0 || *fd != stderr_stdout_read_fd) abort(); if (stderr_tail == 0) stderr_tail = stderr_buffer; left = ((sizeof (stderr_buffer) - 2) - (stderr_tail - stderr_buffer)); s = stderr_tail; *s = 0; /* Read as much data from the fd as we can, up to our buffer size. */ if (left > 0) { while ((size = read (*fd, (void *) s, left)) > 0) { left -= size; s += size; read_this_time += size; } *s = 0; } else { char buf2 [1024]; /* The buffer is full; flush the rest of it. */ while (read (*fd, (void *) buf2, sizeof (buf2)) > 0) ; } stderr_tail = s; stderr_last_read = time ((time_t *) 0); /* Now we have read some data that we would like to put up in a dialog box. But more data may still be coming in - so don't pop up the dialog right now, but instead, start a timer that will pop it up a second from now. Should more data come in in the meantime, we will be called again, and will reset that timer again. So the dialog will only pop up when a second has elapsed with no new data being written to stderr. However, if the buffer is full (meaning lots of data has been written) then we don't reset the timer. */ if (read_this_time > 0) { if (si->stderr_popup_timer) XtRemoveTimeOut (si->stderr_popup_timer); si->stderr_popup_timer = XtAppAddTimeOut (si->app, 1 * 1000, stderr_popup_timer_fn, (XtPointer) si); } } /* If stderr capturing is desired, this replaces `stdout' and `stderr' with a pipe, so that any output written to them will show up on the screen as well as on the original value of those streams. */ void initialize_stderr (saver_info *si) { static Boolean done = False; int fds [2]; int in, out; int new_stdout, new_stderr; int stdout_fd = 1; int stderr_fd = 2; int flags = 0; Boolean stderr_dialog_p; if (done) return; done = True; real_stderr = stderr; real_stdout = stdout; stderr_dialog_p = get_boolean_resource (si->dpy, "captureStderr", "Boolean"); if (!stderr_dialog_p) return; if (pipe (fds)) { perror ("error creating pipe:"); return; } in = fds [0]; out = fds [1]; # ifdef HAVE_FCNTL # if defined(O_NONBLOCK) flags = O_NONBLOCK; # elif defined(O_NDELAY) flags = O_NDELAY; # else ERROR!! neither O_NONBLOCK nor O_NDELAY are defined. # endif /* Set both sides of the pipe to nonblocking - this is so that our reads (in stderr_callback) will terminate, and so that out writes (in the client programs) will silently fail when the pipe is full, instead of hosing the program. */ if (fcntl (in, F_SETFL, flags) != 0) { perror ("fcntl:"); return; } if (fcntl (out, F_SETFL, flags) != 0) { perror ("fcntl:"); return; } # endif /* !HAVE_FCNTL */ if (stderr_dialog_p) { FILE *new_stderr_file; FILE *new_stdout_file; new_stderr = dup (stderr_fd); if (new_stderr < 0) { perror ("could not dup() a stderr:"); return; } if (! (new_stderr_file = fdopen (new_stderr, "w"))) { perror ("could not fdopen() the new stderr:"); return; } real_stderr = new_stderr_file; close (stderr_fd); if (dup2 (out, stderr_fd) < 0) { perror ("could not dup() a new stderr:"); return; } new_stdout = dup (stdout_fd); if (new_stdout < 0) { perror ("could not dup() a stdout:"); return; } if (! (new_stdout_file = fdopen (new_stdout, "w"))) { perror ("could not fdopen() the new stdout:"); return; } real_stdout = new_stdout_file; close (stdout_fd); if (dup2 (out, stdout_fd) < 0) { perror ("could not dup() a new stdout:"); return; } close (out); } stderr_stdout_read_fd = in; XtAppAddInput (si->app, in, (XtPointer) XtInputReadMask, stderr_callback, (XtPointer) si); } /* If the "-log file" command-line option has been specified, open the file for append, and redirect stdout/stderr there. This is called very early, before initialize_stderr(). */ void stderr_log_file (saver_info *si) { int stdout_fd = 1; int stderr_fd = 2; const char *filename = get_string_resource (si->dpy, "logFile", "LogFile"); int fd; if (!filename || !*filename) return; fd = open (filename, O_WRONLY | O_APPEND | O_CREAT, 0666); if (fd < 0) { char buf[255]; FAIL: sprintf (buf, "%.100s: %.100s", blurb(), filename); perror (buf); fflush (stderr); fflush (stdout); exit (1); } fprintf (stderr, "%s: logging to file %s\n", blurb(), filename); if (dup2 (fd, stdout_fd) < 0) goto FAIL; if (dup2 (fd, stderr_fd) < 0) goto FAIL; fprintf (stderr, "\n\n" "##########################################################################\n" "%s: logging to \"%s\" at %s\n" "##########################################################################\n" "\n", blurb(), filename, timestring(0)); } /* If there is anything in the stderr buffer, flush it to the real stderr. This does no X operations. Call this when exiting to make sure any last words actually show up. */ void shutdown_stderr (saver_info *si) { fflush (stdout); fflush (stderr); if (!real_stderr || stderr_stdout_read_fd < 0) return; stderr_callback ((XtPointer) si, &stderr_stdout_read_fd, 0); if (stderr_tail && stderr_buffer < stderr_tail) { *stderr_tail = 0; fprintf (real_stderr, "%s", stderr_buffer); stderr_tail = stderr_buffer; } if (real_stdout) fflush (real_stdout); if (real_stderr) fflush (real_stderr); if (stdout != real_stdout) { dup2 (fileno(real_stdout), fileno(stdout)); fclose (real_stdout); real_stdout = stdout; } if (stderr != real_stderr) { dup2 (fileno(real_stderr), fileno(stderr)); fclose (real_stderr); real_stderr = stderr; } if (stderr_stdout_read_fd != -1) { close (stderr_stdout_read_fd); stderr_stdout_read_fd = -1; } } xscreensaver-5.36/driver/mlstring.c000644 000767 000024 00000012060 12701612237 017434 0ustar00jwzstaff000000 000000 /* * (c) 2007, Quest Software, Inc. All rights reserved. * * This file is part of XScreenSaver, * Copyright (c) 1993-2009 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. */ #include #include #include #include "mlstring.h" #define LINE_SPACING 1.2 static mlstring * mlstring_allocate(const char *msg); static void mlstring_calculate(mlstring *str, XFontStruct *font); mlstring* mlstring_new(const char *msg, XFontStruct *font, Dimension wrap_width) { mlstring *newstr; if (!(newstr = mlstring_allocate(msg))) return NULL; newstr->font_id = font->fid; mlstring_wrap(newstr, font, wrap_width); return newstr; } mlstring * mlstring_allocate(const char *msg) { const char *s; mlstring *ml; struct mlstr_line *cur, *prev = NULL; size_t linelength; int the_end = 0; if (!msg) return NULL; ml = calloc(1, sizeof(mlstring)); if (!ml) return NULL; for (s = msg; !the_end; msg = ++s) { /* New string struct */ cur = calloc(1, sizeof(struct mlstr_line)); if (!cur) goto fail; if (!ml->lines) ml->lines = cur; /* Find the \n or end of string */ while (*s != '\n') { if (*s == '\0') { the_end = 1; break; } ++s; } linelength = s - msg; /* Duplicate the string */ cur->line = malloc(linelength + 1); if (!cur->line) goto fail; strncpy(cur->line, msg, linelength); cur->line[linelength] = '\0'; if (prev) prev->next_line = cur; prev = cur; } return ml; fail: if (ml) mlstring_free(ml); return NULL; } /* * Frees an mlstring. * This function does not have any unit tests. */ void mlstring_free(mlstring *str) { struct mlstr_line *cur, *next; for (cur = str->lines; cur; cur = next) { next = cur->next_line; free(cur->line); free(cur); } free(str); } void mlstring_wrap(mlstring *mstring, XFontStruct *font, Dimension width) { short char_width = font->max_bounds.width; int line_length, wrap_at; struct mlstr_line *mstr, *newml; /* An alternative implementation of this function would be to keep trying * XTextWidth() on space-delimited substrings until the longest one less * than 'width' is found, however there shouldn't be much difference * between that, and this implementation. */ for (mstr = mstring->lines; mstr; mstr = mstr->next_line) { if (XTextWidth(font, mstr->line, strlen(mstr->line)) > width) { /* Wrap it */ line_length = width / char_width; if (line_length == 0) line_length = 1; /* First try to soft wrap by finding a space */ for (wrap_at = line_length; wrap_at >= 0 && !isspace(mstr->line[wrap_at]); --wrap_at); if (wrap_at == -1) /* No space found, hard wrap */ wrap_at = line_length; else wrap_at++; /* Leave the space at the end of the line. */ newml = calloc(1, sizeof(*newml)); if (!newml) /* OOM, don't bother trying to wrap */ break; if (NULL == (newml->line = strdup(mstr->line + wrap_at))) { /* OOM, jump ship */ free(newml); break; } /* Terminate the existing string at its end */ mstr->line[wrap_at] = '\0'; newml->next_line = mstr->next_line; mstr->next_line = newml; } } mlstring_calculate(mstring, font); } #undef MAX #define MAX(x, y) ((x) > (y) ? (x) : (y)) /* * Calculates the overall extents (width + height of the multi-line string). * This function is called as part of mlstring_new(). * It does not have any unit testing. */ void mlstring_calculate(mlstring *str, XFontStruct *font) { struct mlstr_line *line; str->font_height = font->ascent + font->descent; str->overall_height = 0; str->overall_width = 0; /* XXX: Should there be some baseline calculations to help XDrawString later on? */ str->font_ascent = font->ascent; for (line = str->lines; line; line = line->next_line) { line->line_width = XTextWidth(font, line->line, strlen(line->line)); str->overall_width = MAX(str->overall_width, line->line_width); /* Don't add line spacing for the first line */ str->overall_height += (font->ascent + font->descent) * (line == str->lines ? 1 : LINE_SPACING); } } void mlstring_draw(Display *dpy, Drawable dialog, GC gc, mlstring *string, int x, int y) { struct mlstr_line *line; if (!string) return; y += string->font_ascent; XSetFont(dpy, gc, string->font_id); for (line = string->lines; line; line = line->next_line) { XDrawString(dpy, dialog, gc, x, y, line->line, strlen(line->line)); y += string->font_height * LINE_SPACING; } } /* vim:ts=8:sw=2:noet */ xscreensaver-5.36/driver/demo-Xm.c000644 000767 000024 00000142657 12701612237 017123 0ustar00jwzstaff000000 000000 /* demo-Xm.c --- implements the interactive demo-mode and options dialogs. * xscreensaver, Copyright (c) 1993-2003, 2005 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. */ #ifdef HAVE_CONFIG_H # include "config.h" #endif #ifdef HAVE_MOTIF /* whole file */ #include #ifdef HAVE_UNISTD_H # include #endif #ifndef VMS # include /* for getpwuid() */ #else /* VMS */ # include "vms-pwd.h" #endif /* VMS */ #ifdef HAVE_UNAME # include /* for uname() */ #endif /* HAVE_UNAME */ #include #include /* for CARD32 */ #include /* for XA_INTEGER */ #include #include /* We don't actually use any widget internals, but these are included so that gdb will have debug info for the widgets... */ #include #include #ifdef HAVE_XPM # include #endif /* HAVE_XPM */ #ifdef HAVE_XMU # ifndef VMS # include # else /* VMS */ # include # endif #else # include "xmu.h" #endif #include #include #include #include #include #include #ifdef HAVE_XMCOMBOBOX /* a Motif 2.0 widget */ # include # ifndef XmNtextField /* Lesstif 0.89.4 bug */ # undef HAVE_XMCOMBOBOX # endif # if (XmVersion < 2001) /* Lesstif has two personalities these days */ # undef HAVE_XMCOMBOBOX # endif #endif /* HAVE_XMCOMBOBOX */ #include "version.h" #include "prefs.h" #include "resources.h" /* for parse_time() */ #include "visual.h" /* for has_writable_cells() */ #include "remote.h" /* for xscreensaver_command() */ #include "usleep.h" #include #include #include #undef countof #define countof(x) (sizeof((x))/sizeof((*x))) char *progname = 0; char *progclass = "XScreenSaver"; XrmDatabase db; typedef struct { saver_preferences *a, *b; } prefs_pair; static void *global_prefs_pair; /* I hate C so much... */ char *blurb (void) { return progname; } extern Widget create_xscreensaver_demo (Widget parent); extern const char *visual_menu[]; static char *short_version = 0; Atom XA_VROOT; Atom XA_SCREENSAVER, XA_SCREENSAVER_RESPONSE, XA_SCREENSAVER_VERSION; Atom XA_SCREENSAVER_ID, XA_SCREENSAVER_STATUS, XA_SELECT, XA_DEMO; Atom XA_ACTIVATE, XA_BLANK, XA_LOCK, XA_RESTART, XA_EXIT; static void populate_demo_window (Widget toplevel, int which, prefs_pair *pair); static void populate_prefs_page (Widget top, prefs_pair *pair); static int apply_changes_and_save (Widget widget); static int maybe_reload_init_file (Widget widget, prefs_pair *pair); static void await_xscreensaver (Widget widget); /* Some random utility functions */ static Widget name_to_widget (Widget widget, const char *name) { Widget parent; char name2[255]; name2[0] = '*'; strcpy (name2+1, name); while ((parent = XtParent (widget))) widget = parent; return XtNameToWidget (widget, name2); } /* Why this behavior isn't automatic in *either* toolkit, I'll never know. Takes a scroller, viewport, or list as an argument. */ static void ensure_selected_item_visible (Widget list) { int *pos_list = 0; int pos_count = 0; if (XmListGetSelectedPos (list, &pos_list, &pos_count) && pos_count > 0) { int top = -2; int visible = 0; XtVaGetValues (list, XmNtopItemPosition, &top, XmNvisibleItemCount, &visible, NULL); if (pos_list[0] >= top + visible) { int pos = pos_list[0] - visible + 1; if (pos < 0) pos = 0; XmListSetPos (list, pos); } else if (pos_list[0] < top) { XmListSetPos (list, pos_list[0]); } } if (pos_list) XtFree ((char *) pos_list); } static void warning_dialog_dismiss_cb (Widget button, XtPointer client_data, XtPointer user_data) { Widget shell = (Widget) client_data; XtDestroyWidget (shell); } static void warning_dialog (Widget parent, const char *message, int center) { char *msg = strdup (message); char *head; Widget dialog = 0; Widget label = 0; Widget ok = 0; int i = 0; Widget w; Widget container; XmString xmstr; Arg av[10]; int ac = 0; ac = 0; dialog = XmCreateWarningDialog (parent, "warning", av, ac); w = XmMessageBoxGetChild (dialog, XmDIALOG_MESSAGE_LABEL); if (w) XtUnmanageChild (w); w = XmMessageBoxGetChild (dialog, XmDIALOG_CANCEL_BUTTON); if (w) XtUnmanageChild (w); w = XmMessageBoxGetChild (dialog, XmDIALOG_HELP_BUTTON); if (w) XtUnmanageChild (w); ok = XmMessageBoxGetChild (dialog, XmDIALOG_OK_BUTTON); ac = 0; XtSetArg (av[ac], XmNnumColumns, 1); ac++; XtSetArg (av[ac], XmNorientation, XmVERTICAL); ac++; XtSetArg (av[ac], XmNpacking, XmPACK_COLUMN); ac++; XtSetArg (av[ac], XmNrowColumnType, XmWORK_AREA); ac++; XtSetArg (av[ac], XmNspacing, 0); ac++; container = XmCreateRowColumn (dialog, "container", av, ac); head = msg; while (head) { char name[20]; char *s = strchr (head, '\n'); if (s) *s = 0; sprintf (name, "label%d", i++); xmstr = XmStringCreate (head, XmSTRING_DEFAULT_CHARSET); ac = 0; XtSetArg (av[ac], XmNlabelString, xmstr); ac++; XtSetArg (av[ac], XmNmarginHeight, 0); ac++; label = XmCreateLabelGadget (container, name, av, ac); XtManageChild (label); XmStringFree (xmstr); if (s) head = s+1; else head = 0; center--; } XtManageChild (container); XtRealizeWidget (dialog); XtManageChild (dialog); XtAddCallback (ok, XmNactivateCallback, warning_dialog_dismiss_cb, dialog); free (msg); } static void run_cmd (Widget widget, Atom command, int arg) { char *err = 0; int status; apply_changes_and_save (widget); status = xscreensaver_command (XtDisplay (widget), command, arg, False, &err); if (status < 0) { char buf [255]; if (err) sprintf (buf, "Error:\n\n%s", err); else strcpy (buf, "Unknown error!"); warning_dialog (widget, buf, 100); } if (err) free (err); } static void run_hack (Widget widget, int which, Bool report_errors_p) { if (which < 0) return; apply_changes_and_save (widget); if (report_errors_p) run_cmd (widget, XA_DEMO, which + 1); else { char *s = 0; xscreensaver_command (XtDisplay (widget), XA_DEMO, which + 1, False, &s); if (s) free (s); } } /* Button callbacks */ void exit_menu_cb (Widget button, XtPointer client_data, XtPointer ignored) { apply_changes_and_save (XtParent (button)); exit (0); } #if 0 static void wm_close_cb (Widget widget, GdkEvent *event, XtPointer data) { apply_changes_and_save (XtParent (button)); exit (0); } #endif void cut_menu_cb (Widget button, XtPointer client_data, XtPointer ignored) { /* #### */ warning_dialog (XtParent (button), "Error:\n\n" "cut unimplemented\n", 1); } void copy_menu_cb (Widget button, XtPointer client_data, XtPointer ignored) { /* #### */ warning_dialog (XtParent (button), "Error:\n\n" "copy unimplemented\n", 1); } void paste_menu_cb (Widget button, XtPointer client_data, XtPointer ignored) { /* #### */ warning_dialog (XtParent (button), "Error:\n\n" "paste unimplemented\n", 1); } void about_menu_cb (Widget button, XtPointer client_data, XtPointer ignored) { char buf [2048]; char *s = strdup (screensaver_id + 4); char *s2; s2 = strchr (s, ','); *s2 = 0; s2 += 2; sprintf (buf, "%s\n%s\n" "\n" "This is the Motif version of \"xscreensaver-demo\". The Motif\n" "version is no longer maintained. Please use the GTK version\n" "instead, which has many more features.\n" "\n" "For xscreensaver updates, check https://www.jwz.org/xscreensaver/", s, s2); free (s); warning_dialog (XtParent (button), buf, 100); } void doc_menu_cb (Widget button, XtPointer client_data, XtPointer ignored) { prefs_pair *pair = (prefs_pair *) client_data; saver_preferences *p = pair->a; char *help_command; if (!p->help_url || !*p->help_url) { warning_dialog (XtParent (button), "Error:\n\n" "No Help URL has been specified.\n", 100); return; } help_command = (char *) malloc (strlen (p->load_url_command) + (strlen (p->help_url) * 4) + 20); strcpy (help_command, "( "); sprintf (help_command + strlen(help_command), p->load_url_command, p->help_url, p->help_url, p->help_url, p->help_url); strcat (help_command, " ) &"); system (help_command); free (help_command); } void activate_menu_cb (Widget button, XtPointer client_data, XtPointer ignored) { run_cmd (XtParent (button), XA_ACTIVATE, 0); } void lock_menu_cb (Widget button, XtPointer client_data, XtPointer ignored) { run_cmd (XtParent (button), XA_LOCK, 0); } void kill_menu_cb (Widget button, XtPointer client_data, XtPointer ignored) { run_cmd (XtParent (button), XA_EXIT, 0); } void restart_menu_cb (Widget button, XtPointer client_data, XtPointer ignored) { #if 0 run_cmd (XtParent (button), XA_RESTART, 0); #else button = XtParent (button); apply_changes_and_save (button); xscreensaver_command (XtDisplay (button), XA_EXIT, 0, False, NULL); sleep (1); system ("xscreensaver -nosplash &"); #endif await_xscreensaver (button); } static void await_xscreensaver (Widget widget) { int countdown = 5; Display *dpy = XtDisplay (widget); char *rversion = 0; while (!rversion && (--countdown > 0)) { /* Check for the version of the running xscreensaver... */ server_xscreensaver_version (dpy, &rversion, 0, 0); /* If it's not there yet, wait a second... */ sleep (1); } if (rversion) { /* Got it. */ free (rversion); } else { /* Timed out, no screensaver running. */ char buf [1024]; Bool root_p = (geteuid () == 0); strcpy (buf, "Error:\n\n" "The xscreensaver daemon did not start up properly.\n" "\n"); if (root_p) # ifdef __GNUC__ __extension__ /* don't warn about "string length is greater than the length ISO C89 compilers are required to support" in the following expression... */ # endif strcat (buf, "You are running as root. This usually means that xscreensaver\n" "was unable to contact your X server because access control is\n" "turned on. Try running this command:\n" "\n" " xhost +localhost\n" "\n" "and then selecting `File / Restart Daemon'.\n" "\n" "Note that turning off access control will allow anyone logged\n" "on to this machine to access your screen, which might be\n" "considered a security problem. Please read the xscreensaver\n" "manual and FAQ for more information.\n" "\n" "You shouldn't run X as root. Instead, you should log in as a\n" "normal user, and `su' as necessary."); else strcat (buf, "Please check your $PATH and permissions."); warning_dialog (XtParent (widget), buf, 1); } } static int _selected_hack_number = -1; static int selected_hack_number (Widget toplevel) { return _selected_hack_number; } static int demo_write_init_file (Widget widget, saver_preferences *p) { if (!write_init_file (XtDisplay (widget), p, short_version, False)) return 0; else { const char *f = init_file_name(); if (!f || !*f) warning_dialog (widget, "Error:\n\nCouldn't determine init file name!\n", 100); else { char *b = (char *) malloc (strlen(f) + 1024); sprintf (b, "Error:\n\nCouldn't write %s\n", f); warning_dialog (widget, b, 100); free (b); } return -1; } } static int apply_changes_and_save (Widget widget) { prefs_pair *pair = global_prefs_pair; saver_preferences *p = pair->a; Widget list_widget = name_to_widget (widget, "list"); int which = selected_hack_number (widget); Widget cmd = name_to_widget (widget, "cmdText"); Widget enabled = name_to_widget (widget, "enabled"); Widget vis = name_to_widget (widget, "combo"); # ifdef HAVE_XMCOMBOBOX Widget text = 0; # else /* !HAVE_XMCOMBOBOX */ Widget menu = 0, *kids = 0, selected_item = 0; Cardinal nkids = 0; int i = 0; # endif /* !HAVE_XMCOMBOBOX */ Bool enabled_p = False; const char *visual = 0; const char *command = 0; char c; unsigned long id; if (which < 0) return -1; # ifdef HAVE_XMCOMBOBOX XtVaGetValues (vis, XmNtextField, &text, NULL); if (!text) /* If we can't get at the text field of this combo box, we're screwed. */ abort(); XtVaGetValues (text, XmNvalue, &visual, NULL); # else /* !HAVE_XMCOMBOBOX */ XtVaGetValues (vis, XmNsubMenuId, &menu, NULL); XtVaGetValues (menu, XmNnumChildren, &nkids, XmNchildren, &kids, NULL); XtVaGetValues (menu, XmNmenuHistory, &selected_item, NULL); if (selected_item) for (i = 0; i < nkids; i++) if (kids[i] == selected_item) break; visual = visual_menu[i]; # endif /* !HAVE_XMCOMBOBOX */ XtVaGetValues (enabled, XmNset, &enabled_p, NULL); XtVaGetValues (cmd, XtNvalue, &command, NULL); if (maybe_reload_init_file (widget, pair) != 0) return 1; /* Sanity-check and canonicalize whatever the user typed into the combo box. */ if (!strcasecmp (visual, "")) visual = ""; else if (!strcasecmp (visual, "any")) visual = ""; else if (!strcasecmp (visual, "default")) visual = "Default"; else if (!strcasecmp (visual, "default-n")) visual = "Default-N"; else if (!strcasecmp (visual, "default-i")) visual = "Default-I"; else if (!strcasecmp (visual, "best")) visual = "Best"; else if (!strcasecmp (visual, "mono")) visual = "Mono"; else if (!strcasecmp (visual, "monochrome")) visual = "Mono"; else if (!strcasecmp (visual, "gray")) visual = "Gray"; else if (!strcasecmp (visual, "grey")) visual = "Gray"; else if (!strcasecmp (visual, "color")) visual = "Color"; else if (!strcasecmp (visual, "gl")) visual = "GL"; else if (!strcasecmp (visual, "staticgray")) visual = "StaticGray"; else if (!strcasecmp (visual, "staticcolor")) visual = "StaticColor"; else if (!strcasecmp (visual, "truecolor")) visual = "TrueColor"; else if (!strcasecmp (visual, "grayscale")) visual = "GrayScale"; else if (!strcasecmp (visual, "greyscale")) visual = "GrayScale"; else if (!strcasecmp (visual, "pseudocolor")) visual = "PseudoColor"; else if (!strcasecmp (visual, "directcolor")) visual = "DirectColor"; else if (1 == sscanf (visual, " %lu %c", &id, &c)) ; else if (1 == sscanf (visual, " 0x%lx %c", &id, &c)) ; else { XBell (XtDisplay (widget), 0); /* unparsable */ visual = ""; /* #### gtk_entry_set_text (GTK_ENTRY (GTK_COMBO (vis)->entry), "Any");*/ } ensure_selected_item_visible (list_widget); if (!p->screenhacks[which]->visual) p->screenhacks[which]->visual = strdup (""); if (!p->screenhacks[which]->command) p->screenhacks[which]->command = strdup (""); if (p->screenhacks[which]->enabled_p != enabled_p || !!strcasecmp (p->screenhacks[which]->visual, visual) || !!strcasecmp (p->screenhacks[which]->command, command)) { /* Something was changed -- store results into the struct, and write the file. */ free (p->screenhacks[which]->visual); free (p->screenhacks[which]->command); p->screenhacks[which]->visual = strdup (visual); p->screenhacks[which]->command = strdup (command); p->screenhacks[which]->enabled_p = enabled_p; return demo_write_init_file (widget, p); } /* No changes made */ return 0; } void run_this_cb (Widget button, XtPointer client_data, XtPointer ignored) { int which = selected_hack_number (XtParent (button)); if (which < 0) return; if (0 == apply_changes_and_save (XtParent (button))) run_hack (XtParent (button), which, True); } void manual_cb (Widget button, XtPointer client_data, XtPointer ignored) { prefs_pair *pair = (prefs_pair *) client_data; saver_preferences *p = pair->a; Widget list_widget = name_to_widget (button, "list"); int which = selected_hack_number (button); char *name, *name2, *cmd, *s; if (which < 0) return; apply_changes_and_save (button); ensure_selected_item_visible (list_widget); name = strdup (p->screenhacks[which]->command); name2 = name; while (isspace (*name2)) name2++; s = name2; while (*s && !isspace (*s)) s++; *s = 0; s = strrchr (name2, '/'); if (s) name = s+1; cmd = get_string_resource (XtDisplay (button), "manualCommand", "ManualCommand"); if (cmd) { char *cmd2 = (char *) malloc (strlen (cmd) + (strlen (name2) * 4) + 100); strcpy (cmd2, "( "); sprintf (cmd2 + strlen (cmd2), cmd, name2, name2, name2, name2); strcat (cmd2, " ) &"); system (cmd2); free (cmd2); } else { warning_dialog (XtParent (button), "Error:\n\nno `manualCommand' resource set.", 100); } free (name); } void run_next_cb (Widget button, XtPointer client_data, XtPointer ignored) { prefs_pair *pair = (prefs_pair *) client_data; saver_preferences *p = pair->a; Widget list_widget = name_to_widget (button, "list"); int which = selected_hack_number (button); button = XtParent (button); if (which < 0) which = 0; else which++; if (which >= p->screenhacks_count) which = 0; apply_changes_and_save (button); XmListDeselectAllItems (list_widget); /* LessTif lossage */ XmListSelectPos (list_widget, which+1, True); ensure_selected_item_visible (list_widget); populate_demo_window (button, which, pair); run_hack (button, which, False); } void run_prev_cb (Widget button, XtPointer client_data, XtPointer ignored) { prefs_pair *pair = (prefs_pair *) client_data; saver_preferences *p = pair->a; Widget list_widget = name_to_widget (button, "list"); int which = selected_hack_number (button); button = XtParent (button); if (which < 0) which = p->screenhacks_count - 1; else which--; if (which < 0) which = p->screenhacks_count - 1; apply_changes_and_save (button); XmListDeselectAllItems (list_widget); /* LessTif lossage */ XmListSelectPos (list_widget, which+1, True); ensure_selected_item_visible (list_widget); populate_demo_window (button, which, pair); run_hack (button, which, False); } /* Helper for the text fields that contain time specifications: this parses the text, and does error checking. */ static void hack_time_text (Widget button, const char *line, Time *store, Bool sec_p) { if (*line) { int value; value = parse_time ((char *) line, sec_p, True); value *= 1000; /* Time measures in microseconds */ if (value < 0) { char b[255]; sprintf (b, "Error:\n\n" "Unparsable time format: \"%s\"\n", line); warning_dialog (XtParent (button), b, 100); } else *store = value; } } void prefs_ok_cb (Widget button, XtPointer client_data, XtPointer ignored) { prefs_pair *pair = (prefs_pair *) client_data; saver_preferences *p = pair->a; saver_preferences *p2 = pair->b; Bool changed = False; char *v = 0; button = XtParent (button); # define SECONDS(field, name) \ v = 0; \ XtVaGetValues (name_to_widget (button, (name)), XtNvalue, &v, NULL); \ hack_time_text (button, v, (field), True) # define MINUTES(field, name) \ v = 0; \ XtVaGetValues (name_to_widget (button, (name)), XtNvalue, &v, NULL); \ hack_time_text (button, v, (field), False) # define INTEGER(field, name) do { \ unsigned int value; \ char c; \ XtVaGetValues (name_to_widget (button, (name)), XtNvalue, &v, NULL); \ if (! *v) \ ; \ else if (sscanf (v, "%u%c", &value, &c) != 1) \ { \ char b[255]; \ sprintf (b, "Error:\n\n" "Not an integer: \"%s\"\n", v); \ warning_dialog (XtParent (button), b, 100); \ } \ else \ *(field) = value; \ } while(0) # define CHECKBOX(field, name) \ XtVaGetValues (name_to_widget (button, (name)), XmNset, &field, NULL) MINUTES (&p2->timeout, "timeoutText"); MINUTES (&p2->cycle, "cycleText"); SECONDS (&p2->fade_seconds, "fadeSecondsText"); INTEGER (&p2->fade_ticks, "fadeTicksText"); MINUTES (&p2->lock_timeout, "lockText"); SECONDS (&p2->passwd_timeout, "passwdText"); CHECKBOX (p2->verbose_p, "verboseToggle"); CHECKBOX (p2->install_cmap_p, "cmapToggle"); CHECKBOX (p2->fade_p, "fadeToggle"); CHECKBOX (p2->unfade_p, "unfadeToggle"); CHECKBOX (p2->lock_p, "lockToggle"); # undef SECONDS # undef MINUTES # undef INTEGER # undef CHECKBOX # define COPY(field) \ if (p->field != p2->field) changed = True; \ p->field = p2->field COPY(timeout); COPY(cycle); COPY(lock_timeout); COPY(passwd_timeout); COPY(fade_seconds); COPY(fade_ticks); COPY(verbose_p); COPY(install_cmap_p); COPY(fade_p); COPY(unfade_p); COPY(lock_p); # undef COPY populate_prefs_page (button, pair); if (changed) demo_write_init_file (button, p); } void prefs_cancel_cb (Widget button, XtPointer client_data, XtPointer ignored) { prefs_pair *pair = (prefs_pair *) client_data; *pair->b = *pair->a; populate_prefs_page (XtParent (button), pair); } static void list_select_cb (Widget list, XtPointer client_data, XtPointer call_data) { prefs_pair *pair = (prefs_pair *) client_data; XmListCallbackStruct *lcb = (XmListCallbackStruct *) call_data; int which = lcb->item_position - 1; apply_changes_and_save (list); populate_demo_window (list, which, pair); if (lcb->reason == XmCR_DEFAULT_ACTION && which >= 0) run_hack (list, which, True); } /* Populating the various widgets */ /* Formats a `Time' into "H:MM:SS". (Time is microseconds.) */ static void format_time (char *buf, Time time) { int s = time / 1000; unsigned int h = 0, m = 0; if (s >= 60) { m += (s / 60); s %= 60; } if (m >= 60) { h += (m / 60); m %= 60; } sprintf (buf, "%u:%02u:%02u", h, m, s); } /* Finds the number of the last hack to run, and makes that item be selected by default. */ static void scroll_to_current_hack (Widget toplevel, prefs_pair *pair) { Atom type; int format; unsigned long nitems, bytesafter; unsigned char *data = 0; Display *dpy = XtDisplay (toplevel); int which = 0; Widget list; if (XGetWindowProperty (dpy, RootWindow (dpy, 0), /* always screen #0 */ XA_SCREENSAVER_STATUS, 0, 3, False, XA_INTEGER, &type, &format, &nitems, &bytesafter, &data) == Success && type == XA_INTEGER && nitems >= 3 && data) which = (int) data[2] - 1; if (data) free (data); if (which < 0) return; list = name_to_widget (toplevel, "list"); apply_changes_and_save (toplevel); XmListDeselectAllItems (list); /* LessTif lossage */ XmListSelectPos (list, which+1, True); ensure_selected_item_visible (list); populate_demo_window (toplevel, which, pair); } static void populate_hack_list (Widget toplevel, prefs_pair *pair) { saver_preferences *p = pair->a; Widget list = name_to_widget (toplevel, "list"); screenhack **hacks = p->screenhacks; screenhack **h; for (h = hacks; *h; h++) { char *pretty_name = (h[0]->name ? strdup (h[0]->name) : make_hack_name (XtDisplay (toplevel), h[0]->command)); XmString xmstr = XmStringCreate (pretty_name, XmSTRING_DEFAULT_CHARSET); XmListAddItem (list, xmstr, 0); XmStringFree (xmstr); } XtAddCallback (list, XmNbrowseSelectionCallback, list_select_cb, pair); XtAddCallback (list, XmNdefaultActionCallback, list_select_cb, pair); } static void populate_prefs_page (Widget top, prefs_pair *pair) { saver_preferences *p = pair->a; char s[100]; format_time (s, p->timeout); XtVaSetValues (name_to_widget (top, "timeoutText"), XmNvalue, s, NULL); format_time (s, p->cycle); XtVaSetValues (name_to_widget (top, "cycleText"), XmNvalue, s, NULL); format_time (s, p->lock_timeout); XtVaSetValues (name_to_widget (top, "lockText"), XmNvalue, s, NULL); format_time (s, p->passwd_timeout); XtVaSetValues (name_to_widget (top, "passwdText"), XmNvalue, s, NULL); format_time (s, p->fade_seconds); XtVaSetValues (name_to_widget (top, "fadeSecondsText"), XmNvalue, s, NULL); sprintf (s, "%u", p->fade_ticks); XtVaSetValues (name_to_widget (top, "fadeTicksText"), XmNvalue, s, NULL); XtVaSetValues (name_to_widget (top, "verboseToggle"), XmNset, p->verbose_p, NULL); XtVaSetValues (name_to_widget (top, "cmapToggle"), XmNset, p->install_cmap_p, NULL); XtVaSetValues (name_to_widget (top, "fadeToggle"), XmNset, p->fade_p, NULL); XtVaSetValues (name_to_widget (top, "unfadeToggle"), XmNset, p->unfade_p, NULL); XtVaSetValues (name_to_widget (top, "lockToggle"), XmNset, p->lock_p, NULL); { Bool found_any_writable_cells = False; Display *dpy = XtDisplay (top); int nscreens = ScreenCount(dpy); int i; for (i = 0; i < nscreens; i++) { Screen *s = ScreenOfDisplay (dpy, i); if (has_writable_cells (s, DefaultVisualOfScreen (s))) { found_any_writable_cells = True; break; } } #ifdef HAVE_XF86VMODE_GAMMA found_any_writable_cells = True; /* if we can gamma fade, go for it */ #endif XtVaSetValues (name_to_widget (top, "fadeSecondsLabel"), XtNsensitive, found_any_writable_cells, NULL); XtVaSetValues (name_to_widget (top, "fadeTicksLabel"), XtNsensitive, found_any_writable_cells, NULL); XtVaSetValues (name_to_widget (top, "fadeSecondsText"), XtNsensitive, found_any_writable_cells, NULL); XtVaSetValues (name_to_widget (top, "fadeTicksText"), XtNsensitive, found_any_writable_cells, NULL); XtVaSetValues (name_to_widget (top, "cmapToggle"), XtNsensitive, found_any_writable_cells, NULL); XtVaSetValues (name_to_widget (top, "fadeToggle"), XtNsensitive, found_any_writable_cells, NULL); XtVaSetValues (name_to_widget (top, "unfadeToggle"), XtNsensitive, found_any_writable_cells, NULL); } } static void sensitize_demo_widgets (Widget toplevel, Bool sensitive_p) { const char *names[] = { "cmdLabel", "cmdText", "enabled", "visLabel", "combo", "demo", "man" }; int i; for (i = 0; i < sizeof(names)/countof(*names); i++) { Widget w = name_to_widget (toplevel, names[i]); XtVaSetValues (w, XtNsensitive, sensitive_p, NULL); } /* I don't know how to handle these yet... */ { const char *names2[] = { "cut", "copy", "paste" }; for (i = 0; i < sizeof(names2)/countof(*names2); i++) { Widget w = name_to_widget (toplevel, names2[i]); XtVaSetValues (w, XtNsensitive, FALSE, NULL); } } } /* Pixmaps for the up and down arrow buttons (yeah, this is sleazy...) */ #ifdef HAVE_XPM static char *up_arrow_xpm[] = { "15 15 4 1", " c None s background", "- c #FFFFFF", "+ c #D6D6D6", "@ c #000000", " @ ", " @ ", " -+@ ", " -+@ ", " -+++@ ", " -+++@ ", " -+++++@ ", " -+++++@ ", " -+++++++@ ", " -+++++++@ ", " -+++++++++@ ", " -+++++++++@ ", " -+++++++++++@ ", " @@@@@@@@@@@@@ ", " " }; static char *down_arrow_xpm[] = { "15 15 4 1", " c None s background", "- c #FFFFFF", "+ c #D6D6D6", "@ c #000000", " ", " ------------- ", " -+++++++++++@ ", " -+++++++++@ ", " -+++++++++@ ", " -+++++++@ ", " -+++++++@ ", " -+++++@ ", " -+++++@ ", " -+++@ ", " -+++@ ", " -+@ ", " -+@ ", " @ ", " @ " }; #endif /* HAVE_XPM */ static void pixmapify_buttons (Widget toplevel) { #ifdef HAVE_XPM Display *dpy = XtDisplay (toplevel); Window window = XtWindow (toplevel); XWindowAttributes xgwa; XpmAttributes xpmattrs; Pixmap up_pixmap = 0, down_pixmap = 0; int result; Widget up = name_to_widget (toplevel, "up"); Widget dn = name_to_widget (toplevel, "down"); # ifdef XpmColorSymbols XColor xc; XpmColorSymbol symbols[2]; char color[20]; # endif XGetWindowAttributes (dpy, window, &xgwa); xpmattrs.valuemask = 0; # ifdef XpmColorSymbols symbols[0].name = "background"; symbols[0].pixel = 0; symbols[1].name = 0; XtVaGetValues (up, XmNbackground, &xc, NULL); XQueryColor (dpy, xgwa.colormap, &xc); sprintf (color, "#%04X%04X%04X", xc.red, xc.green, xc.blue); symbols[0].value = color; symbols[0].pixel = xc.pixel; xpmattrs.valuemask |= XpmColorSymbols; xpmattrs.colorsymbols = symbols; xpmattrs.numsymbols = 1; # endif # ifdef XpmCloseness xpmattrs.valuemask |= XpmCloseness; xpmattrs.closeness = 40000; # endif # ifdef XpmVisual xpmattrs.valuemask |= XpmVisual; xpmattrs.visual = xgwa.visual; # endif # ifdef XpmDepth xpmattrs.valuemask |= XpmDepth; xpmattrs.depth = xgwa.depth; # endif # ifdef XpmColormap xpmattrs.valuemask |= XpmColormap; xpmattrs.colormap = xgwa.colormap; # endif result = XpmCreatePixmapFromData(dpy, window, up_arrow_xpm, &up_pixmap, 0 /* mask */, &xpmattrs); if (!up_pixmap || (result != XpmSuccess && result != XpmColorError)) { fprintf (stderr, "%s: Can't load pixmaps\n", progname); return; } result = XpmCreatePixmapFromData(dpy, window, down_arrow_xpm, &down_pixmap, 0 /* mask */, &xpmattrs); if (!down_pixmap || (result != XpmSuccess && result != XpmColorError)) { fprintf (stderr, "%s: Can't load pixmaps\n", progname); return; } XtVaSetValues (up, XmNlabelType, XmPIXMAP, XmNlabelPixmap, up_pixmap, NULL); XtVaSetValues (dn, XmNlabelType, XmPIXMAP, XmNlabelPixmap, down_pixmap,NULL); #endif /* HAVE_XPM */ } char * get_hack_blurb (Display *dpy, screenhack *hack) { char *doc_string; char *prog_name = strdup (hack->command); char *pretty_name = (hack->name ? strdup (hack->name) : make_hack_name (dpy, hack->command)); char doc_name[255], doc_class[255]; char *s, *s2; for (s = prog_name; *s && !isspace(*s); s++) ; *s = 0; s = strrchr (prog_name, '/'); if (s) strcpy (prog_name, s+1); sprintf (doc_name, "hacks.%s.documentation", pretty_name); sprintf (doc_class, "hacks.%s.documentation", prog_name); free (prog_name); free (pretty_name); doc_string = get_string_resource (dpy, doc_name, doc_class); if (doc_string) { for (s = doc_string; *s; s++) { if (*s == '\n') { /* skip over whitespace at beginning of line */ s++; while (*s && (*s == ' ' || *s == '\t')) s++; } else if (*s == ' ' || *s == '\t') { /* compress all other horizontal whitespace. */ *s = ' '; s++; for (s2 = s; *s2 && (*s2 == ' ' || *s2 == '\t'); s2++) ; if (s2 > s) strcpy (s, s2); s--; } } while (*s && isspace (*s)) /* Strip trailing whitespace */ *(--s) = 0; /* Delete whitespace at end of each line. */ for (; s > doc_string; s--) if (*s == '\n' && (s[-1] == ' ' || s[-1] == '\t')) { for (s2 = s-1; s2 > doc_string && (*s2 == ' ' || *s2 == '\t'); s2--) ; s2++; if (s2 < s) strcpy (s2, s); s = s2; } /* Delete leading blank lines. */ for (s = doc_string; *s == '\n'; s++) ; if (s > doc_string) strcpy (doc_string, s); } else { # if 0 static int doc_installed = 0; if (doc_installed == 0) { if (get_boolean_resource ("hacks.documentation.isInstalled", "hacks.documentation.isInstalled")) doc_installed = 1; else doc_installed = -1; } if (doc_installed < 0) doc_string = strdup ("Error:\n\n" "The documentation strings do not appear to be " "installed. This is probably because there is " "an \"XScreenSaver\" app-defaults file installed " "that is from an older version of the program. " "To fix this problem, delete that file, or " "install a current version (either will work.)"); else # endif /* 0 */ doc_string = strdup ( "\n" "This is the Motif version of \"xscreensaver-demo\". The Motif " "version is no longer maintained. Please use the GTK version " "instead, which has many more features." "\n\n" "If you were running the GTK version, there would be a preview " "of this screen saver mode displayed here, along with graphical " "configuration options."); } return doc_string; } static void populate_demo_window (Widget toplevel, int which, prefs_pair *pair) { saver_preferences *p = pair->a; screenhack *hack = (which >= 0 ? p->screenhacks[which] : 0); Widget frameL = name_to_widget (toplevel, "frameLabel"); Widget doc = name_to_widget (toplevel, "doc"); Widget cmd = name_to_widget (toplevel, "cmdText"); Widget enabled = name_to_widget (toplevel, "enabled"); Widget vis = name_to_widget (toplevel, "combo"); int i = 0; char *pretty_name = (hack ? (hack->name ? strdup (hack->name) : make_hack_name (XtDisplay (toplevel), hack->command)) : 0); char *doc_string = hack ? get_hack_blurb (XtDisplay (toplevel), hack) : 0; XmString xmstr; xmstr = XmStringCreate (pretty_name, XmSTRING_DEFAULT_CHARSET); XtVaSetValues (frameL, XmNlabelString, xmstr, NULL); XmStringFree (xmstr); XtVaSetValues (doc, XmNvalue, doc_string, NULL); XtVaSetValues (cmd, XmNvalue, (hack ? hack->command : ""), NULL); XtVaSetValues (enabled, XmNset, (hack ? hack->enabled_p : False), NULL); i = 0; if (hack && hack->visual && *hack->visual) for (i = 0; visual_menu[i]; i++) if (!strcasecmp (hack->visual, visual_menu[i])) break; if (!visual_menu[i]) i = -1; { # ifdef HAVE_XMCOMBOBOX Widget text = 0; XtVaGetValues (vis, XmNtextField, &text, NULL); XtVaSetValues (vis, XmNselectedPosition, i, NULL); if (i < 0) XtVaSetValues (text, XmNvalue, hack->visual, NULL); # else /* !HAVE_XMCOMBOBOX */ Cardinal nkids; Widget *kids; Widget menu; XtVaGetValues (vis, XmNsubMenuId, &menu, NULL); if (!menu) abort (); XtVaGetValues (menu, XmNnumChildren, &nkids, XmNchildren, &kids, NULL); if (!kids) abort(); if (i < nkids) XtVaSetValues (vis, XmNmenuHistory, kids[i], NULL); # endif /* !HAVE_XMCOMBOBOX */ } sensitize_demo_widgets (toplevel, (hack ? True : False)); if (pretty_name) free (pretty_name); if (doc_string) free (doc_string); _selected_hack_number = which; } static int maybe_reload_init_file (Widget widget, prefs_pair *pair) { int status = 0; saver_preferences *p = pair->a; static Bool reentrant_lock = False; if (reentrant_lock) return 0; reentrant_lock = True; if (init_file_changed_p (p)) { const char *f = init_file_name(); char *b; int which; Widget list; if (!f || !*f) return 0; b = (char *) malloc (strlen(f) + 1024); sprintf (b, "Warning:\n\n" "file \"%s\" has changed, reloading.\n", f); warning_dialog (widget, b, 100); free (b); load_init_file (XtDisplay (widget), p); which = selected_hack_number (widget); list = name_to_widget (widget, "list"); XtVaSetValues (list, XmNitemCount, 0, NULL); populate_hack_list (widget, pair); XmListDeselectAllItems (list); /* LessTif lossage */ XmListSelectPos (list, which+1, True); populate_prefs_page (widget, pair); populate_demo_window (widget, which, pair); ensure_selected_item_visible (list); status = 1; } reentrant_lock = False; return status; } /* Attach all callback functions to widgets */ static void add_callbacks (Widget toplevel, prefs_pair *pair) { Widget w; # define CB(NAME,FN) \ w = name_to_widget (toplevel, (NAME)); \ XtAddCallback (w, XmNactivateCallback, (FN), pair) CB ("blank", activate_menu_cb); CB ("lock", lock_menu_cb); CB ("kill", kill_menu_cb); CB ("restart", restart_menu_cb); CB ("exit", exit_menu_cb); CB ("cut", cut_menu_cb); CB ("copy", copy_menu_cb); CB ("paste", paste_menu_cb); CB ("about", about_menu_cb); CB ("docMenu", doc_menu_cb); CB ("down", run_next_cb); CB ("up", run_prev_cb); CB ("demo", run_this_cb); CB ("man", manual_cb); CB ("preferencesForm.Cancel", prefs_cancel_cb); CB ("preferencesForm.OK", prefs_ok_cb); # undef CB } static void sanity_check_resources (Widget toplevel) { const char *names[] = { "demoTab", "optionsTab", "cmdLabel", "visLabel", "enabled", "demo", "man", "timeoutLabel", "cycleLabel", "fadeSecondsLabel", "fadeTicksLabel", "lockLabel", "passwdLabel" }; int i; for (i = 0; i < sizeof(names)/countof(*names); i++) { Widget w = name_to_widget (toplevel, names[i]); const char *name = XtName(w); XmString xm = 0; char *label = 0; XtVaGetValues (w, XmNlabelString, &xm, NULL); if (xm) XmStringGetLtoR (xm, XmSTRING_DEFAULT_CHARSET, &label); if (w && (!label || !strcmp (name, label))) { xm = XmStringCreate ("ERROR", XmSTRING_DEFAULT_CHARSET); XtVaSetValues (w, XmNlabelString, xm, NULL); } } } /* Set certain buttons to be the same size (the max of the set.) */ static void hack_button_sizes (Widget toplevel) { Widget demo = name_to_widget (toplevel, "demo"); Widget man = name_to_widget (toplevel, "man"); Widget ok = name_to_widget (toplevel, "OK"); Widget can = name_to_widget (toplevel, "Cancel"); Widget up = name_to_widget (toplevel, "up"); Widget down = name_to_widget (toplevel, "down"); Dimension w1, w2; XtVaGetValues (demo, XmNwidth, &w1, NULL); XtVaGetValues (man, XmNwidth, &w2, NULL); XtVaSetValues ((w1 > w2 ? man : demo), XmNwidth, (w1 > w2 ? w1 : w2), NULL); XtVaGetValues (ok, XmNwidth, &w1, NULL); XtVaGetValues (can, XmNwidth, &w2, NULL); XtVaSetValues ((w1 > w2 ? can : ok), XmNwidth, (w1 > w2 ? w1 : w2), NULL); XtVaGetValues (up, XmNwidth, &w1, NULL); XtVaGetValues (down, XmNwidth, &w2, NULL); XtVaSetValues ((w1 > w2 ? down : up), XmNwidth, (w1 > w2 ? w1 : w2), NULL); } /* The main demo-mode command loop. */ #if 0 static Bool mapper (XrmDatabase *db, XrmBindingList bindings, XrmQuarkList quarks, XrmRepresentation *type, XrmValue *value, XPointer closure) { int i; for (i = 0; quarks[i]; i++) { if (bindings[i] == XrmBindTightly) fprintf (stderr, (i == 0 ? "" : ".")); else if (bindings[i] == XrmBindLoosely) fprintf (stderr, "*"); else fprintf (stderr, " ??? "); fprintf(stderr, "%s", XrmQuarkToString (quarks[i])); } fprintf (stderr, ": %s\n", (char *) value->addr); return False; } #endif static void the_network_is_not_the_computer (Widget parent) { Display *dpy = XtDisplay (parent); char *rversion, *ruser, *rhost; char *luser, *lhost; char *msg = 0; struct passwd *p = getpwuid (getuid ()); const char *d = DisplayString (dpy); # if defined(HAVE_UNAME) struct utsname uts; if (uname (&uts) < 0) lhost = ""; else lhost = uts.nodename; # elif defined(VMS) strcpy (lhost, getenv("SYS$NODE")); # else /* !HAVE_UNAME && !VMS */ strcat (lhost, ""); # endif /* !HAVE_UNAME && !VMS */ if (p && p->pw_name) luser = p->pw_name; else luser = "???"; server_xscreensaver_version (dpy, &rversion, &ruser, &rhost); /* Make a buffer that's big enough for a number of copies of all the strings, plus some. */ msg = (char *) malloc (10 * ((rversion ? strlen(rversion) : 0) + (ruser ? strlen(ruser) : 0) + (rhost ? strlen(rhost) : 0) + strlen(lhost) + strlen(luser) + strlen(d) + 1024)); *msg = 0; if (!rversion || !*rversion) { sprintf (msg, "Warning:\n\n" "The XScreenSaver daemon doesn't seem to be running\n" "on display \"%s\". You can launch it by selecting\n" "`Restart Daemon' from the File menu, or by typing\n" "\"xscreensaver &\" in a shell.", d); } else if (p && ruser && *ruser && !!strcmp (ruser, p->pw_name)) { /* Warn that the two processes are running as different users. */ sprintf(msg, "Warning:\n\n" "%s is running as user \"%s\" on host \"%s\".\n" "But the xscreensaver managing display \"%s\"\n" "is running as user \"%s\" on host \"%s\".\n" "\n" "Since they are different users, they won't be reading/writing\n" "the same ~/.xscreensaver file, so %s isn't\n" "going to work right.\n" "\n" "Either re-run %s as \"%s\", or re-run\n" "xscreensaver as \"%s\" (which you can do by\n" "selecting `Restart Daemon' from the File menu.)\n", progname, luser, lhost, d, (ruser ? ruser : "???"), (rhost ? rhost : "???"), progname, progname, (ruser ? ruser : "???"), luser); } else if (rhost && *rhost && !!strcmp (rhost, lhost)) { /* Warn that the two processes are running on different hosts. */ sprintf (msg, "Warning:\n\n" "%s is running as user \"%s\" on host \"%s\".\n" "But the xscreensaver managing display \"%s\"\n" "is running as user \"%s\" on host \"%s\".\n" "\n" "If those two machines don't share a file system (that is,\n" "if they don't see the same ~%s/.xscreensaver file) then\n" "%s won't work right.\n" "\n" "You can restart the daemon on \"%s\" as \"%s\" by\n" "selecting `Restart Daemon' from the File menu.)", progname, luser, lhost, d, (ruser ? ruser : "???"), (rhost ? rhost : "???"), luser, progname, lhost, luser); } else if (!!strcmp (rversion, short_version)) { /* Warn that the version numbers don't match. */ sprintf (msg, "Warning:\n\n" "This is %s version %s.\n" "But the xscreensaver managing display \"%s\"\n" "is version %s. This could cause problems.", progname, short_version, d, rversion); } if (*msg) warning_dialog (parent, msg, 1); free (msg); } /* We use this error handler so that X errors are preceeded by the name of the program that generated them. */ static int demo_ehandler (Display *dpy, XErrorEvent *error) { fprintf (stderr, "\nX error in %s:\n", progname); XmuPrintDefaultErrorMessage (dpy, error, stderr); exit (-1); return 0; } #ifdef __GNUC__ __extension__ /* shut up about "string length is greater than the length ISO C89 compilers are required to support" when including the .ad file... */ #endif static char *defaults[] = { #include "XScreenSaver_ad.h" #include "XScreenSaver_Xm_ad.h" 0 }; int main (int argc, char **argv) { XtAppContext app; prefs_pair Pair, *pair; saver_preferences P, P2, *p, *p2; Bool prefs = False; int i; Display *dpy; Widget toplevel_shell, dialog; char *real_progname = argv[0]; char *s; s = strrchr (real_progname, '/'); if (s) real_progname = s+1; p = &P; p2 = &P2; pair = &Pair; pair->a = p; pair->b = p2; memset (p, 0, sizeof (*p)); memset (p2, 0, sizeof (*p2)); global_prefs_pair = pair; progname = real_progname; /* We must read exactly the same resources as xscreensaver. That means we must have both the same progclass *and* progname, at least as far as the resource database is concerned. So, put "xscreensaver" in argv[0] while initializing Xt. */ argv[0] = "xscreensaver"; progname = argv[0]; toplevel_shell = XtAppInitialize (&app, progclass, 0, 0, &argc, argv, defaults, 0, 0); dpy = XtDisplay (toplevel_shell); db = XtDatabase (dpy); XtGetApplicationNameAndClass (dpy, &progname, &progclass); XSetErrorHandler (demo_ehandler); /* Complain about unrecognized command-line arguments. */ for (i = 1; i < argc; i++) { char *s = argv[i]; if (s[0] == '-' && s[1] == '-') s++; if (!strcmp (s, "-prefs")) prefs = True; else { fprintf (stderr, "usage: %s [ -display dpy-string ] [ -prefs ]\n", real_progname); exit (1); } } short_version = (char *) malloc (5); memcpy (short_version, screensaver_id + 17, 4); short_version [4] = 0; /* Load the init file, which may end up consulting the X resource database and the site-wide app-defaults file. Note that at this point, it's important that `progname' be "xscreensaver", rather than whatever was in argv[0]. */ p->db = db; load_init_file (dpy, p); *p2 = *p; /* Now that Xt has been initialized, and the resources have been read, we can set our `progname' variable to something more in line with reality. */ progname = real_progname; #if 0 { XrmName name = { 0 }; XrmClass class = { 0 }; int count = 0; XrmEnumerateDatabase (db, &name, &class, XrmEnumAllLevels, mapper, (POINTER) &count); } #endif /* Intern the atoms that xscreensaver_command() needs. */ XA_VROOT = XInternAtom (dpy, "__SWM_VROOT", False); XA_SCREENSAVER = XInternAtom (dpy, "SCREENSAVER", False); XA_SCREENSAVER_VERSION = XInternAtom (dpy, "_SCREENSAVER_VERSION",False); XA_SCREENSAVER_STATUS = XInternAtom (dpy, "_SCREENSAVER_STATUS", False); XA_SCREENSAVER_ID = XInternAtom (dpy, "_SCREENSAVER_ID", False); XA_SCREENSAVER_RESPONSE = XInternAtom (dpy, "_SCREENSAVER_RESPONSE", False); XA_SELECT = XInternAtom (dpy, "SELECT", False); XA_DEMO = XInternAtom (dpy, "DEMO", False); XA_ACTIVATE = XInternAtom (dpy, "ACTIVATE", False); XA_BLANK = XInternAtom (dpy, "BLANK", False); XA_LOCK = XInternAtom (dpy, "LOCK", False); XA_EXIT = XInternAtom (dpy, "EXIT", False); XA_RESTART = XInternAtom (dpy, "RESTART", False); /* Create the window and all its widgets. */ dialog = create_xscreensaver_demo (toplevel_shell); /* Set the window's title. */ { char title[255]; char *v = (char *) strdup(strchr(screensaver_id, ' ')); char *s1, *s2, *s3, *s4; s1 = (char *) strchr(v, ' '); s1++; s2 = (char *) strchr(s1, ' '); s3 = (char *) strchr(v, '('); s3++; s4 = (char *) strchr(s3, ')'); *s2 = 0; *s4 = 0; sprintf (title, "%.50s %.50s, %.50s", progclass, s1, s3); XtVaSetValues (toplevel_shell, XtNtitle, title, NULL); free (v); } sanity_check_resources (toplevel_shell); add_callbacks (toplevel_shell, pair); populate_hack_list (toplevel_shell, pair); populate_prefs_page (toplevel_shell, pair); sensitize_demo_widgets (toplevel_shell, False); scroll_to_current_hack (toplevel_shell, pair); XtManageChild (dialog); XtRealizeWidget(toplevel_shell); /* The next few calls must come after XtRealizeWidget(). */ pixmapify_buttons (toplevel_shell); hack_button_sizes (toplevel_shell); ensure_selected_item_visible (name_to_widget (toplevel_shell, "list")); XSync (dpy, False); XtVaSetValues (toplevel_shell, XmNallowShellResize, False, NULL); /* Handle the -prefs command-line argument. */ if (prefs) { Widget tabber = name_to_widget (toplevel_shell, "folder"); Widget this_tab = name_to_widget (toplevel_shell, "optionsTab"); Widget this_page = name_to_widget (toplevel_shell, "preferencesForm"); Widget *kids = 0; Cardinal nkids = 0; if (!tabber) abort(); XtVaGetValues (tabber, XmNnumChildren, &nkids, XmNchildren, &kids, NULL); if (!kids) abort(); if (nkids > 0) XtUnmanageChildren (kids, nkids); XtManageChild (this_page); XmProcessTraversal (this_tab, XmTRAVERSE_CURRENT); } /* Issue any warnings about the running xscreensaver daemon. */ the_network_is_not_the_computer (toplevel_shell); XtAppMainLoop (app); exit (0); } #endif /* HAVE_MOTIF -- whole file */ xscreensaver-5.36/driver/demo-Xm-widgets.c000644 000767 000024 00000073742 12701612237 020565 0ustar00jwzstaff000000 000000 /* demo-Xm.c --- implements the interactive demo-mode and options dialogs. * xscreensaver, Copyright (c) 1999, 2003 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. */ #ifdef HAVE_CONFIG_H # include "config.h" #endif #include #include #include /* just for debug info */ #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #ifdef HAVE_XMCOMBOBOX /* a Motif 2.0 widget */ # include # ifndef XmNtextField /* Lesstif 0.89.4 bug */ # undef HAVE_XMCOMBOBOX # endif #endif /* HAVE_XMCOMBOBOX */ #include #include const char *visual_menu[] = { "Any", "Best", "Default", "Default-N", "GL", "TrueColor", "PseudoColor", "StaticGray", "GrayScale", "DirectColor", "Color", "Gray", "Mono", 0 }; static Widget create_demos_page (Widget parent); static Widget create_options_page (Widget parent); static void tab_cb (Widget button, XtPointer client_data, XtPointer ignored) { Widget parent = XtParent(button); Widget tabber = XtNameToWidget (parent, "*folder"); Widget this_tab = (Widget) client_data; Widget *kids = 0; Cardinal nkids = 0; if (!tabber) abort(); XtVaGetValues (tabber, XmNnumChildren, &nkids, XmNchildren, &kids, NULL); if (!kids) abort(); if (nkids > 0) XtUnmanageChildren (kids, nkids); XtManageChild (this_tab); } Widget create_xscreensaver_demo (Widget parent) { /* MainWindow Form Menubar DemoTab OptionsTab HR Tabber (demo page) (options page) */ Widget mainw, form, menubar; Widget demo_tab, options_tab, hr, tabber, demos, options; Arg av[100]; int ac = 0; mainw = XmCreateMainWindow (parent, "demoForm", av, ac); form = XmCreateForm (mainw, "form", av, ac); menubar = XmCreateSimpleMenuBar (form, "menubar", av, ac); XtVaSetValues (menubar, XmNtopAttachment, XmATTACH_FORM, XmNleftAttachment, XmATTACH_FORM, XmNrightAttachment, XmATTACH_FORM, NULL); { Widget menu = 0, item = 0; char *menus[] = { "*file", "blank", "lock", "kill", "restart", "-", "exit", "*edit", "cut", "copy", "paste", "*help", "about", "docMenu" }; int i; for (i = 0; i < sizeof(menus)/sizeof(*menus); i++) { ac = 0; if (menus[i][0] == '-') item = XmCreateSeparatorGadget (menu, "separator", av, ac); else if (menus[i][0] != '*') item = XmCreatePushButtonGadget (menu, menus[i], av, ac); else { menu = XmCreatePulldownMenu (parent, menus[i]+1, av, ac); XtSetArg (av [ac], XmNsubMenuId, menu); ac++; item = XmCreateCascadeButtonGadget (menubar, menus[i]+1, av, ac); if (!strcmp (menus[i]+1, "help")) XtVaSetValues(menubar, XmNmenuHelpWidget, item, NULL); } XtManageChild (item); } ac = 0; } demo_tab = XmCreatePushButtonGadget (form, "demoTab", av, ac); XtVaSetValues (demo_tab, XmNleftAttachment, XmATTACH_FORM, XmNtopAttachment, XmATTACH_WIDGET, XmNtopWidget, menubar, NULL); options_tab = XmCreatePushButtonGadget (form, "optionsTab", av, ac); XtVaSetValues (options_tab, XmNleftAttachment, XmATTACH_WIDGET, XmNleftWidget, demo_tab, XmNtopAttachment, XmATTACH_OPPOSITE_WIDGET, XmNtopWidget, demo_tab, XmNbottomAttachment, XmATTACH_OPPOSITE_WIDGET, XmNbottomWidget, demo_tab, NULL); hr = XmCreateSeparatorGadget (form, "hr", av, ac); XtVaSetValues (hr, XmNleftAttachment, XmATTACH_FORM, XmNrightAttachment, XmATTACH_FORM, XmNtopAttachment, XmATTACH_WIDGET, XmNtopWidget, demo_tab, NULL); tabber = XmCreateForm (form, "folder", av, ac); XtVaSetValues (tabber, XmNtopAttachment, XmATTACH_WIDGET, XmNtopWidget, hr, XmNleftAttachment, XmATTACH_FORM, XmNrightAttachment, XmATTACH_FORM, XmNbottomAttachment, XmATTACH_FORM, NULL); demos = create_demos_page (tabber); options = create_options_page (tabber); XtAddCallback (demo_tab, XmNactivateCallback, tab_cb, demos); XtAddCallback (options_tab, XmNactivateCallback, tab_cb, options); XtManageChild (demos); XtManageChild (options); XtManageChild (demo_tab); XtManageChild (options_tab); XtManageChild (hr); XtManageChild (menubar); XtManageChild (tabber); XtManageChild (form); #if 1 XtUnmanageChild (options); XtManageChild (demos); #endif return mainw; } static Widget create_demos_page (Widget parent) { /* Form1 (horizontal) Form2 (vertical) Scroller List ButtonBox1 (vertical) Button ("Down") Button ("Up") Form3 (vertical) Frame Label TextArea (doc) Label Text ("Command Line") Form4 (horizontal) Checkbox ("Enabled") Label ("Visual") ComboBox HR ButtonBox2 (vertical) Button ("Demo") Button ("Documentation") */ Widget form1, form2, form3, form4; Widget scroller, list, buttonbox1, down, up; Widget frame, frame_label, doc, cmd_label, cmd_text, enabled, vis_label; Widget combo; Widget hr, buttonbox2, demo, man; Arg av[100]; int ac = 0; int i; form1 = XmCreateForm (parent, "form1", av, ac); form2 = XmCreateForm (form1, "form2", av, ac); XtVaSetValues (form2, XmNtopAttachment, XmATTACH_FORM, XmNleftAttachment, XmATTACH_FORM, XmNbottomAttachment, XmATTACH_FORM, NULL); scroller = XmCreateScrolledWindow (form2, "scroller", av, ac); XtVaSetValues (scroller, XmNtopAttachment, XmATTACH_FORM, XmNleftAttachment, XmATTACH_FORM, XmNrightAttachment, XmATTACH_FORM, XmNbottomAttachment, XmATTACH_WIDGET, NULL); list = XmCreateList (scroller, "list", av, ac); buttonbox1 = XmCreateForm (form2, "buttonbox1", av, ac); XtVaSetValues (buttonbox1, XmNleftAttachment, XmATTACH_FORM, XmNrightAttachment, XmATTACH_FORM, XmNbottomAttachment, XmATTACH_FORM, NULL); XtVaSetValues (scroller, XmNbottomWidget, buttonbox1, NULL); down = XmCreatePushButton (buttonbox1, "down", av, ac); XtVaSetValues (down, XmNleftAttachment, XmATTACH_FORM, XmNtopAttachment, XmATTACH_FORM, XmNbottomAttachment, XmATTACH_FORM, NULL); up = XmCreatePushButton (buttonbox1, "up", av, ac); XtVaSetValues (up, XmNleftAttachment, XmATTACH_WIDGET, XmNleftWidget, down, XmNtopAttachment, XmATTACH_FORM, XmNbottomAttachment, XmATTACH_FORM, NULL); form3 = XmCreateForm (form1, "form3", av, ac); XtVaSetValues (form3, XmNtopAttachment, XmATTACH_FORM, XmNleftAttachment, XmATTACH_WIDGET, XmNleftWidget, form2, XmNrightAttachment, XmATTACH_FORM, XmNbottomAttachment, XmATTACH_FORM, NULL); frame = XmCreateFrame (form3, "frame", av, ac); ac = 0; XtSetArg (av [ac], XmNchildType, XmFRAME_TITLE_CHILD); ac++; frame_label = XmCreateLabelGadget (frame, "frameLabel", av, ac); ac = 0; XtVaSetValues (frame, XmNtopAttachment, XmATTACH_FORM, XmNleftAttachment, XmATTACH_FORM, XmNrightAttachment, XmATTACH_FORM, XmNbottomAttachment, XmATTACH_WIDGET, NULL); ac = 0; XtSetArg (av [ac], XmNchildType, XmFRAME_WORKAREA_CHILD); ac++; doc = XmCreateText (frame, "doc", av, ac); ac = 0; XtVaSetValues (doc, XmNeditable, FALSE, XmNcursorPositionVisible, FALSE, XmNwordWrap, TRUE, XmNeditMode, XmMULTI_LINE_EDIT, XmNshadowThickness, 0, NULL); cmd_label = XmCreateLabelGadget (form3, "cmdLabel", av, ac); XtVaSetValues (cmd_label, XmNleftAttachment, XmATTACH_FORM, XmNrightAttachment, XmATTACH_FORM, XmNbottomAttachment, XmATTACH_WIDGET, NULL); XtVaSetValues (frame, XmNbottomWidget, cmd_label, NULL); cmd_text = XmCreateTextField (form3, "cmdText", av, ac); XtVaSetValues (cmd_text, XmNleftAttachment, XmATTACH_FORM, XmNrightAttachment, XmATTACH_FORM, XmNbottomAttachment, XmATTACH_WIDGET, NULL); XtVaSetValues (cmd_label, XmNbottomWidget, cmd_text, NULL); form4 = XmCreateForm (form3, "form4", av, ac); XtVaSetValues (form4, XmNleftAttachment, XmATTACH_FORM, XmNrightAttachment, XmATTACH_FORM, XmNbottomAttachment, XmATTACH_WIDGET, NULL); XtVaSetValues (cmd_text, XmNbottomWidget, form4, NULL); enabled = XmCreateToggleButtonGadget (form4, "enabled", av, ac); XtVaSetValues (enabled, XmNtopAttachment, XmATTACH_FORM, XmNleftAttachment, XmATTACH_FORM, XmNbottomAttachment, XmATTACH_FORM, NULL); vis_label = XmCreateLabelGadget (form4, "visLabel", av, ac); XtVaSetValues (vis_label, XmNtopAttachment, XmATTACH_FORM, XmNleftAttachment, XmATTACH_WIDGET, XmNleftWidget, enabled, XmNbottomAttachment, XmATTACH_FORM, NULL); #ifdef HAVE_XMCOMBOBOX { Widget list; ac = 0; XtSetArg (av [ac], XmNcomboBoxType, XmDROP_DOWN_COMBO_BOX); ac++; combo = XmCreateComboBox (form4, "combo", av, ac); for (i = 0; visual_menu[i]; i++) { XmString xs = XmStringCreate ((char *) visual_menu[i], XmSTRING_DEFAULT_CHARSET); XmComboBoxAddItem (combo, xs, 0, False); XmStringFree (xs); } XtVaGetValues (combo, XmNlist, &list, NULL); XtVaSetValues (list, XmNvisibleItemCount, i, NULL); } #else /* !HAVE_XMCOMBOBOX */ { Widget popup_menu = XmCreatePulldownMenu (parent, "menu", av, ac); Widget kids[100]; for (i = 0; visual_menu[i]; i++) { XmString xs = XmStringCreate ((char *) visual_menu[i], XmSTRING_DEFAULT_CHARSET); ac = 0; XtSetArg (av [ac], XmNlabelString, xs); ac++; kids[i] = XmCreatePushButtonGadget (popup_menu, "button", av, ac); /* XtAddCallback (combo, XmNactivateCallback, visual_popup_cb, combo); */ XmStringFree (xs); } XtManageChildren (kids, i); ac = 0; XtSetArg (av [ac], XmNsubMenuId, popup_menu); ac++; combo = XmCreateOptionMenu (form4, "combo", av, ac); ac = 0; } #endif /* !HAVE_XMCOMBOBOX */ XtVaSetValues (combo, XmNtopAttachment, XmATTACH_FORM, XmNleftAttachment, XmATTACH_WIDGET, XmNleftWidget, vis_label, XmNbottomAttachment, XmATTACH_FORM, NULL); hr = XmCreateSeparatorGadget (form3, "hr", av, ac); XtVaSetValues (hr, XmNleftAttachment, XmATTACH_FORM, XmNrightAttachment, XmATTACH_FORM, XmNbottomAttachment, XmATTACH_WIDGET, NULL); XtVaSetValues (form4, XmNbottomWidget, hr, NULL); buttonbox2 = XmCreateForm (form3, "buttonbox2", av, ac); XtVaSetValues (buttonbox2, XmNleftAttachment, XmATTACH_FORM, XmNrightAttachment, XmATTACH_FORM, XmNbottomAttachment, XmATTACH_FORM, NULL); XtVaSetValues (hr, XmNbottomWidget, buttonbox2, NULL); demo = XmCreatePushButtonGadget (buttonbox2, "demo", av, ac); XtVaSetValues (demo, XmNleftAttachment, XmATTACH_FORM, XmNtopAttachment, XmATTACH_FORM, XmNbottomAttachment, XmATTACH_FORM, NULL); man = XmCreatePushButtonGadget (buttonbox2, "man", av, ac); XtVaSetValues (man, XmNrightAttachment, XmATTACH_FORM, XmNtopAttachment, XmATTACH_FORM, XmNbottomAttachment, XmATTACH_FORM, NULL); XtManageChild (demo); XtManageChild (man); XtManageChild (buttonbox2); XtManageChild (hr); XtManageChild (combo); XtManageChild (vis_label); XtManageChild (enabled); XtManageChild (form4); XtManageChild (cmd_text); XtManageChild (cmd_label); XtManageChild (doc); XtManageChild (frame_label); XtManageChild (frame); XtManageChild (form3); XtManageChild (up); XtManageChild (down); XtManageChild (buttonbox1); XtManageChild (list); XtManageChild (scroller); XtManageChild (form2); XtManageChild (form1); XtVaSetValues (form1, XmNleftAttachment, XmATTACH_FORM, XmNrightAttachment, XmATTACH_FORM, XmNtopAttachment, XmATTACH_FORM, XmNbottomAttachment, XmATTACH_FORM, NULL); return form1; } static Widget create_options_page (Widget parent) { /* This is what the layout is today: Form (horizontal) Label ("Saver Timeout") Label ("Cycle Timeout") Label ("Fade Duration") Label ("Fade Ticks") Label ("Lock Timeout") Label ("Password Timeout") Text (timeout) Text (cycle) Text (fade seconds) Text (fade ticks) Text (lock) Text (passwd) Toggle ("Verbose") Toggle ("Install Colormap") Toggle ("Fade Colormap") Toggle ("Unfade Colormap") Toggle ("Require Password") HR Button ("OK") Button ("Cancel") */ /* This is what it should be: Form (horizontal) Form (vertical) ("column1") Frame Label ("Blanking and Locking") Form Label ("Blank After") Label ("Cycle After") Text ("Blank After") Text ("Cycle After") HR Checkbox ("Require Password") Label ("Lock After") Text ("Lock After") Frame Label ("Image Manipulation") Form Checkbox ("Grab Desktop Images") Checkbox ("Grab Video Frames") Checkbox ("Choose Random Image") Text (pathname) Button ("Browse") Frame Label ("Diagnostics") Form Checkbox ("Verbose Diagnostics") Checkbox ("Display Subprocess Errors") Checkbox ("Display Splash Screen at Startup") Form (vertical) ("column2") Frame Label ("Display Power Management") Form Checkbox ("Power Management Enabled") Label ("Standby After") Label ("Suspend After") Label ("Off After") Text ("Standby After") Text ("Suspend After") Text ("Off After") Frame Label ("Colormaps") Form Checkbox ("Install Colormap") HR Checkbox ("Fade To Black When Blanking") Checkbox ("Fade From Black When Unblanking") Label ("Fade Duration") Text ("Fade Duration") timeoutLabel cycleLabel fadeSecondsLabel fadeTicksLabel lockLabel passwdLabel timeoutText cycleText fadeSecondsText fadeTicksText lockText passwdText verboseToggle cmapToggle fadeToggle unfadeToggle lockToggle separator OK Cancel */ Arg av[64]; int ac = 0; Widget children[100]; Widget timeout_label, cycle_label, fade_seconds_label, fade_ticks_label; Widget lock_label, passwd_label, hr; Widget preferences_form; Widget timeout_text, cycle_text, fade_text, fade_ticks_text; Widget lock_timeout_text, passwd_timeout_text, verbose_toggle; Widget install_cmap_toggle, fade_toggle, unfade_toggle; Widget lock_toggle, prefs_done, prefs_cancel; ac = 0; XtSetArg (av [ac], XmNdialogType, XmDIALOG_PROMPT); ac++; ac = 0; XtSetArg (av [ac], XmNtopAttachment, XmATTACH_FORM); ac++; XtSetArg (av [ac], XmNbottomAttachment, XmATTACH_FORM); ac++; XtSetArg (av [ac], XmNleftAttachment, XmATTACH_FORM); ac++; XtSetArg (av [ac], XmNrightAttachment, XmATTACH_FORM); ac++; preferences_form = XmCreateForm (parent, "preferencesForm", av, ac); XtManageChild (preferences_form); ac = 0; XtSetArg(av[ac], XmNalignment, XmALIGNMENT_END); ac++; timeout_label = XmCreateLabelGadget (preferences_form, "timeoutLabel", av, ac); ac = 0; XtSetArg(av[ac], XmNalignment, XmALIGNMENT_END); ac++; cycle_label = XmCreateLabelGadget (preferences_form, "cycleLabel", av, ac); ac = 0; XtSetArg(av[ac], XmNalignment, XmALIGNMENT_END); ac++; fade_seconds_label = XmCreateLabelGadget (preferences_form, "fadeSecondsLabel", av, ac); ac = 0; XtSetArg(av[ac], XmNalignment, XmALIGNMENT_END); ac++; fade_ticks_label = XmCreateLabelGadget (preferences_form, "fadeTicksLabel", av, ac); ac = 0; XtSetArg(av[ac], XmNalignment, XmALIGNMENT_END); ac++; lock_label = XmCreateLabelGadget (preferences_form, "lockLabel", av, ac); ac = 0; XtSetArg(av[ac], XmNalignment, XmALIGNMENT_END); ac++; passwd_label = XmCreateLabelGadget (preferences_form, "passwdLabel", av, ac); ac = 0; timeout_text = XmCreateTextField (preferences_form, "timeoutText", av, ac); cycle_text = XmCreateTextField (preferences_form, "cycleText", av, ac); fade_text = XmCreateTextField (preferences_form, "fadeSecondsText", av, ac); fade_ticks_text = XmCreateTextField (preferences_form, "fadeTicksText", av, ac); lock_timeout_text = XmCreateTextField (preferences_form, "lockText", av, ac); passwd_timeout_text = XmCreateTextField (preferences_form, "passwdText", av, ac); XtSetArg(av[ac], XmNalignment, XmALIGNMENT_BEGINNING); ac++; verbose_toggle = XmCreateToggleButtonGadget (preferences_form, "verboseToggle", av, ac); ac = 0; XtSetArg(av[ac], XmNalignment, XmALIGNMENT_BEGINNING); ac++; install_cmap_toggle = XmCreateToggleButtonGadget (preferences_form, "cmapToggle", av, ac); ac = 0; XtSetArg(av[ac], XmNalignment, XmALIGNMENT_BEGINNING); ac++; fade_toggle = XmCreateToggleButtonGadget (preferences_form, "fadeToggle", av, ac); ac = 0; XtSetArg(av[ac], XmNalignment, XmALIGNMENT_BEGINNING); ac++; unfade_toggle = XmCreateToggleButtonGadget (preferences_form, "unfadeToggle", av,ac); ac = 0; XtSetArg(av[ac], XmNalignment, XmALIGNMENT_BEGINNING); ac++; lock_toggle = XmCreateToggleButtonGadget (preferences_form, "lockToggle", av, ac); ac = 0; hr = XmCreateSeparatorGadget (preferences_form, "separator", av, ac); prefs_done = XmCreatePushButtonGadget (preferences_form, "OK", av, ac); prefs_cancel = XmCreatePushButtonGadget (preferences_form, "Cancel", av, ac); XtVaSetValues (timeout_label, XmNtopAttachment, XmATTACH_FORM, XmNtopOffset, 4, XmNbottomAttachment, XmATTACH_OPPOSITE_WIDGET, XmNbottomWidget, timeout_text, XmNleftAttachment, XmATTACH_FORM, XmNleftOffset, 20, XmNrightAttachment, XmATTACH_WIDGET, XmNrightOffset, 4, XmNrightWidget, timeout_text, NULL); XtVaSetValues (cycle_label, XmNtopAttachment, XmATTACH_OPPOSITE_WIDGET, XmNtopOffset, 0, XmNtopWidget, cycle_text, XmNbottomAttachment, XmATTACH_OPPOSITE_WIDGET, XmNbottomOffset, 0, XmNbottomWidget, cycle_text, XmNleftAttachment, XmATTACH_FORM, XmNleftOffset, 20, XmNrightAttachment, XmATTACH_WIDGET, XmNrightOffset, 4, XmNrightWidget, cycle_text, NULL); XtVaSetValues (fade_seconds_label, XmNtopAttachment, XmATTACH_OPPOSITE_WIDGET, XmNtopOffset, 0, XmNtopWidget, fade_text, XmNbottomAttachment, XmATTACH_OPPOSITE_WIDGET, XmNbottomOffset, 0, XmNbottomWidget, fade_text, XmNleftAttachment, XmATTACH_FORM, XmNleftOffset, 20, XmNrightAttachment, XmATTACH_WIDGET, XmNrightOffset, 4, XmNrightWidget, fade_text, NULL); XtVaSetValues (fade_ticks_label, XmNtopAttachment, XmATTACH_OPPOSITE_WIDGET, XmNtopOffset, 0, XmNtopWidget, fade_ticks_text, XmNbottomAttachment, XmATTACH_OPPOSITE_WIDGET, XmNbottomOffset, 0, XmNbottomWidget, fade_ticks_text, XmNleftAttachment, XmATTACH_FORM, XmNleftOffset, 20, XmNrightAttachment, XmATTACH_WIDGET, XmNrightOffset, 4, XmNrightWidget, fade_ticks_text, NULL); XtVaSetValues (lock_label, XmNtopAttachment, XmATTACH_OPPOSITE_WIDGET, XmNtopOffset, 0, XmNtopWidget, lock_timeout_text, XmNbottomAttachment, XmATTACH_OPPOSITE_WIDGET, XmNbottomOffset, 0, XmNbottomWidget, lock_timeout_text, XmNleftAttachment, XmATTACH_FORM, XmNleftOffset, 19, XmNrightAttachment, XmATTACH_WIDGET, XmNrightOffset, 4, XmNrightWidget, lock_timeout_text, NULL); XtVaSetValues (passwd_label, XmNtopAttachment, XmATTACH_OPPOSITE_WIDGET, XmNtopOffset, 0, XmNtopWidget, passwd_timeout_text, XmNbottomAttachment, XmATTACH_OPPOSITE_WIDGET, XmNbottomOffset, 0, XmNbottomWidget, passwd_timeout_text, XmNleftAttachment, XmATTACH_FORM, XmNleftOffset, 14, XmNrightAttachment, XmATTACH_WIDGET, XmNrightOffset, 4, XmNrightWidget, passwd_timeout_text, NULL); XtVaSetValues (timeout_text, XmNtopAttachment, XmATTACH_FORM, XmNtopOffset, 4, XmNleftAttachment, XmATTACH_FORM, XmNleftOffset, 141, NULL); XtVaSetValues (cycle_text, XmNtopAttachment, XmATTACH_WIDGET, XmNtopOffset, 2, XmNtopWidget, timeout_text, XmNleftAttachment, XmATTACH_OPPOSITE_WIDGET, XmNleftOffset, 0, XmNleftWidget, timeout_text, NULL); XtVaSetValues (fade_text, XmNtopAttachment, XmATTACH_WIDGET, XmNtopOffset, 2, XmNtopWidget, cycle_text, XmNleftAttachment, XmATTACH_OPPOSITE_WIDGET, XmNleftOffset, 0, XmNleftWidget, cycle_text, NULL); XtVaSetValues (fade_ticks_text, XmNtopAttachment, XmATTACH_WIDGET, XmNtopOffset, 2, XmNtopWidget, fade_text, XmNleftAttachment, XmATTACH_OPPOSITE_WIDGET, XmNleftOffset, 0, XmNleftWidget, fade_text, NULL); XtVaSetValues (lock_timeout_text, XmNtopAttachment, XmATTACH_WIDGET, XmNtopOffset, 2, XmNtopWidget, fade_ticks_text, XmNleftAttachment, XmATTACH_OPPOSITE_WIDGET, XmNleftOffset, 0, XmNleftWidget, fade_ticks_text, NULL); XtVaSetValues (passwd_timeout_text, XmNtopAttachment, XmATTACH_WIDGET, XmNtopOffset, 4, XmNtopWidget, lock_timeout_text, XmNleftAttachment, XmATTACH_OPPOSITE_WIDGET, XmNleftOffset, 0, XmNleftWidget, lock_timeout_text, NULL); XtVaSetValues (verbose_toggle, XmNtopAttachment, XmATTACH_FORM, XmNtopOffset, 4, XmNbottomAttachment, XmATTACH_OPPOSITE_WIDGET, XmNbottomOffset, 0, XmNbottomWidget, timeout_text, XmNleftAttachment, XmATTACH_WIDGET, XmNleftOffset, 20, XmNleftWidget, timeout_text, XmNrightAttachment, XmATTACH_FORM, XmNrightOffset, 20, NULL); XtVaSetValues (install_cmap_toggle, XmNtopAttachment, XmATTACH_OPPOSITE_WIDGET, XmNtopOffset, 0, XmNtopWidget, cycle_text, XmNbottomAttachment, XmATTACH_OPPOSITE_WIDGET, XmNbottomOffset, 0, XmNbottomWidget, cycle_text, XmNleftAttachment, XmATTACH_OPPOSITE_WIDGET, XmNleftOffset, 0, XmNleftWidget, verbose_toggle, XmNrightAttachment, XmATTACH_FORM, XmNrightOffset, 20, NULL); XtVaSetValues (fade_toggle, XmNtopAttachment, XmATTACH_OPPOSITE_WIDGET, XmNtopOffset, 0, XmNtopWidget, fade_text, XmNbottomAttachment, XmATTACH_OPPOSITE_WIDGET, XmNbottomOffset, 0, XmNbottomWidget, fade_text, XmNleftAttachment, XmATTACH_OPPOSITE_WIDGET, XmNleftOffset, 0, XmNleftWidget, install_cmap_toggle, XmNrightAttachment, XmATTACH_FORM, XmNrightOffset, 20, NULL); XtVaSetValues (unfade_toggle, XmNtopAttachment, XmATTACH_OPPOSITE_WIDGET, XmNtopOffset, 0, XmNtopWidget, fade_ticks_text, XmNbottomAttachment, XmATTACH_OPPOSITE_WIDGET, XmNbottomOffset, 0, XmNbottomWidget, fade_ticks_text, XmNleftAttachment, XmATTACH_OPPOSITE_WIDGET, XmNleftOffset, 0, XmNleftWidget, fade_toggle, XmNrightAttachment, XmATTACH_FORM, XmNrightOffset, 20, NULL); XtVaSetValues (lock_toggle, XmNtopAttachment, XmATTACH_OPPOSITE_WIDGET, XmNtopOffset, 0, XmNtopWidget, lock_timeout_text, XmNbottomAttachment, XmATTACH_OPPOSITE_WIDGET, XmNbottomOffset, 0, XmNbottomWidget, lock_timeout_text, XmNleftAttachment, XmATTACH_OPPOSITE_WIDGET, XmNleftOffset, 0, XmNleftWidget, unfade_toggle, XmNrightAttachment, XmATTACH_FORM, XmNrightOffset, 20, NULL); XtVaSetValues (hr, XmNtopWidget, passwd_timeout_text, XmNbottomAttachment, XmATTACH_FORM, XmNbottomOffset, 4, XmNleftAttachment, XmATTACH_FORM, XmNrightAttachment, XmATTACH_FORM, NULL); XtVaSetValues (prefs_done, XmNleftAttachment, XmATTACH_FORM, XmNbottomAttachment, XmATTACH_FORM, NULL); XtVaSetValues (prefs_cancel, XmNrightAttachment, XmATTACH_FORM, XmNbottomAttachment, XmATTACH_FORM, NULL); XtVaSetValues (hr, XmNbottomAttachment, XmATTACH_WIDGET, XmNbottomWidget, prefs_done, NULL); ac = 0; children[ac++] = timeout_label; children[ac++] = cycle_label; children[ac++] = fade_seconds_label; children[ac++] = fade_ticks_label; children[ac++] = lock_label; children[ac++] = passwd_label; children[ac++] = timeout_text; children[ac++] = cycle_text; children[ac++] = fade_text; children[ac++] = fade_ticks_text; children[ac++] = lock_timeout_text; children[ac++] = passwd_timeout_text; children[ac++] = verbose_toggle; children[ac++] = install_cmap_toggle; children[ac++] = fade_toggle; children[ac++] = unfade_toggle; children[ac++] = lock_toggle; children[ac++] = hr; XtManageChildren(children, ac); ac = 0; XtManageChild (prefs_done); XtManageChild (prefs_cancel); XtManageChild (preferences_form); XtVaSetValues (preferences_form, XmNleftAttachment, XmATTACH_FORM, XmNrightAttachment, XmATTACH_FORM, XmNtopAttachment, XmATTACH_FORM, XmNbottomAttachment, XmATTACH_FORM, NULL); return preferences_form; } xscreensaver-5.36/driver/demo-Gtk.c000644 000767 000024 00000460333 12720740762 017264 0ustar00jwzstaff000000 000000 /* demo-Gtk.c --- implements the interactive demo-mode and options dialogs. * xscreensaver, Copyright (c) 1993-2016 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. */ #ifdef HAVE_CONFIG_H # include "config.h" #endif #ifdef HAVE_GTK /* whole file */ #include #include #ifdef HAVE_UNISTD_H # include #endif # ifdef __GNUC__ # define STFU __extension__ /* ignore gcc -pendantic warnings in next sexp */ # else # define STFU /* */ # endif #ifdef ENABLE_NLS # include #endif /* ENABLE_NLS */ #ifndef VMS # include /* for getpwuid() */ #else /* VMS */ # include "vms-pwd.h" #endif /* VMS */ #ifdef HAVE_UNAME # include /* for uname() */ #endif /* HAVE_UNAME */ #include #include #include #include #include #include #ifdef HAVE_SYS_WAIT_H # include /* for waitpid() and associated macros */ #endif #include /* for CARD32 */ #include /* for XA_INTEGER */ #include #include /* We don't actually use any widget internals, but these are included so that gdb will have debug info for the widgets... */ #include #include #ifdef HAVE_XMU # ifndef VMS # include # else /* VMS */ # include # endif #else # include "xmu.h" #endif #ifdef HAVE_XINERAMA # include #endif /* HAVE_XINERAMA */ #include #ifdef HAVE_CRAPPLET # include # include #endif #include #ifdef HAVE_GTK2 # include # include #else /* !HAVE_GTK2 */ # define G_MODULE_EXPORT /**/ #endif /* !HAVE_GTK2 */ #if defined(DEFAULT_ICONDIR) && !defined(GLADE_DIR) # define GLADE_DIR DEFAULT_ICONDIR #endif #if !defined(DEFAULT_ICONDIR) && defined(GLADE_DIR) # define DEFAULT_ICONDIR GLADE_DIR #endif #ifndef HAVE_XML /* Kludge: this is defined in demo-Gtk-conf.c when HAVE_XML. It is unused otherwise, so in that case, stub it out. */ static const char *hack_configuration_path = 0; #endif #include "version.h" #include "prefs.h" #include "resources.h" /* for parse_time() */ #include "visual.h" /* for has_writable_cells() */ #include "remote.h" /* for xscreensaver_command() */ #include "usleep.h" #include "logo-50.xpm" #include "logo-180.xpm" #include "demo-Gtk-conf.h" #include #include #include #ifdef HAVE_GTK2 enum { COL_ENABLED, COL_NAME, COL_LAST }; #endif /* HAVE_GTK2 */ /* Deal with deprecation of direct access to struct fields on the way to GTK3 See http://live.gnome.org/GnomeGoals/UseGseal */ #if GTK_CHECK_VERSION(2,14,0) # define GET_PARENT(w) gtk_widget_get_parent (w) # define GET_WINDOW(w) gtk_widget_get_window (w) # define GET_ACTION_AREA(d) gtk_dialog_get_action_area (d) # define GET_CONTENT_AREA(d) gtk_dialog_get_content_area (d) # define GET_ADJ_VALUE(a) gtk_adjustment_get_value (a) # define SET_ADJ_VALUE(a,v) gtk_adjustment_set_value (a, v) # define SET_ADJ_UPPER(a,v) gtk_adjustment_set_upper (a, v) #else # define GET_PARENT(w) ((w)->parent) # define GET_WINDOW(w) ((w)->window) # define GET_ACTION_AREA(d) ((d)->action_area) # define GET_CONTENT_AREA(d) ((d)->vbox) # define GET_ADJ_VALUE(a) ((a)->value) # define SET_ADJ_VALUE(a,v) (a)->value = v # define SET_ADJ_UPPER(a,v) (a)->upper = v #endif #if GTK_CHECK_VERSION(2,18,0) # define SET_CAN_DEFAULT(w) gtk_widget_set_can_default ((w), TRUE) # define GET_SENSITIVE(w) gtk_widget_get_sensitive (w) #else # define SET_CAN_DEFAULT(w) GTK_WIDGET_SET_FLAGS ((w), GTK_CAN_DEFAULT) # define GET_SENSITIVE(w) GTK_WIDGET_IS_SENSITIVE (w) #endif #if GTK_CHECK_VERSION(2,20,0) # define GET_REALIZED(w) gtk_widget_get_realized (w) #else # define GET_REALIZED(w) GTK_WIDGET_REALIZED (w) #endif /* from exec.c */ extern void exec_command (const char *shell, const char *command, int nice); extern int on_path_p (const char *program); static void hack_subproc_environment (Window preview_window_id, Bool debug_p); #undef countof #define countof(x) (sizeof((x))/sizeof((*x))) /* You might think that to read an array of 32-bit quantities out of a server-side property, you would pass an array of 32-bit data quantities into XGetWindowProperty(). You would be wrong. You have to use an array of longs, even if long is 64 bits (using 32 of each 64.) */ typedef long PROP32; char *progname = 0; char *progclass = "XScreenSaver"; XrmDatabase db; /* The order of the items in the mode menu. */ static int mode_menu_order[] = { DONT_BLANK, BLANK_ONLY, ONE_HACK, RANDOM_HACKS, RANDOM_HACKS_SAME }; typedef struct { char *short_version; /* version number of this xscreensaver build */ GtkWidget *toplevel_widget; /* the main window */ GtkWidget *base_widget; /* root of our hierarchy (for name lookups) */ GtkWidget *popup_widget; /* the "Settings" dialog */ conf_data *cdata; /* private data for per-hack configuration */ #ifdef HAVE_GTK2 GladeXML *glade_ui; /* Glade UI file */ #endif /* HAVE_GTK2 */ Bool debug_p; /* whether to print diagnostics */ Bool initializing_p; /* flag for breaking recursion loops */ Bool saving_p; /* flag for breaking recursion loops */ char *desired_preview_cmd; /* subprocess we intend to run */ char *running_preview_cmd; /* subprocess we are currently running */ pid_t running_preview_pid; /* pid of forked subproc (might be dead) */ Bool running_preview_error_p; /* whether the pid died abnormally */ Bool preview_suppressed_p; /* flag meaning "don't launch subproc" */ int subproc_timer_id; /* timer to delay subproc launch */ int subproc_check_timer_id; /* timer to check whether it started up */ int subproc_check_countdown; /* how many more checks left */ int *list_elt_to_hack_number; /* table for sorting the hack list */ int *hack_number_to_list_elt; /* the inverse table */ Bool *hacks_available_p; /* whether hacks are on $PATH */ int total_available; /* how many are on $PATH */ int list_count; /* how many items are in the list: this may be less than p->screenhacks_count, if some are suppressed. */ int _selected_list_element; /* don't use this: call selected_list_element() instead */ int nscreens; /* How many X or Xinerama screens there are */ saver_preferences prefs; } state; /* Total fucking evilness due to the fact that it's rocket science to get a closure object of our own down into the various widget callbacks. */ static state *global_state_kludge; Atom XA_VROOT; Atom XA_SCREENSAVER, XA_SCREENSAVER_RESPONSE, XA_SCREENSAVER_VERSION; Atom XA_SCREENSAVER_ID, XA_SCREENSAVER_STATUS, XA_SELECT, XA_DEMO; Atom XA_ACTIVATE, XA_BLANK, XA_LOCK, XA_RESTART, XA_EXIT; static void populate_demo_window (state *, int list_elt); static void populate_prefs_page (state *); static void populate_popup_window (state *); static Bool flush_dialog_changes_and_save (state *); static Bool flush_popup_changes_and_save (state *); static int maybe_reload_init_file (state *); static void await_xscreensaver (state *); static Bool xscreensaver_running_p (state *); static void sensitize_menu_items (state *s, Bool force_p); static void force_dialog_repaint (state *s); static void schedule_preview (state *, const char *cmd); static void kill_preview_subproc (state *, Bool reset_p); static void schedule_preview_check (state *); /* Prototypes of functions used by the Glade-generated code, to avoid warnings. */ void exit_menu_cb (GtkMenuItem *, gpointer user_data); void about_menu_cb (GtkMenuItem *, gpointer user_data); void doc_menu_cb (GtkMenuItem *, gpointer user_data); void file_menu_cb (GtkMenuItem *, gpointer user_data); void activate_menu_cb (GtkMenuItem *, gpointer user_data); void lock_menu_cb (GtkMenuItem *, gpointer user_data); void kill_menu_cb (GtkMenuItem *, gpointer user_data); void restart_menu_cb (GtkWidget *, gpointer user_data); void run_this_cb (GtkButton *, gpointer user_data); void manual_cb (GtkButton *, gpointer user_data); void run_next_cb (GtkButton *, gpointer user_data); void run_prev_cb (GtkButton *, gpointer user_data); void pref_changed_cb (GtkWidget *, gpointer user_data); gboolean pref_changed_event_cb (GtkWidget *, GdkEvent *, gpointer user_data); void mode_menu_item_cb (GtkWidget *, gpointer user_data); void switch_page_cb (GtkNotebook *, GtkNotebookPage *, gint page_num, gpointer user_data); void browse_image_dir_cb (GtkButton *, gpointer user_data); void browse_text_file_cb (GtkButton *, gpointer user_data); void browse_text_program_cb (GtkButton *, gpointer user_data); void settings_cb (GtkButton *, gpointer user_data); void settings_adv_cb (GtkButton *, gpointer user_data); void settings_std_cb (GtkButton *, gpointer user_data); void settings_reset_cb (GtkButton *, gpointer user_data); void settings_switch_page_cb (GtkNotebook *, GtkNotebookPage *, gint page_num, gpointer user_data); void settings_cancel_cb (GtkButton *, gpointer user_data); void settings_ok_cb (GtkButton *, gpointer user_data); static void kill_gnome_screensaver (void); static void kill_kde_screensaver (void); /* Some random utility functions */ const char *blurb (void); const char * blurb (void) { time_t now = time ((time_t *) 0); char *ct = (char *) ctime (&now); static char buf[255]; int n = strlen(progname); if (n > 100) n = 99; strncpy(buf, progname, n); buf[n++] = ':'; buf[n++] = ' '; strncpy(buf+n, ct+11, 8); strcpy(buf+n+9, ": "); return buf; } static GtkWidget * name_to_widget (state *s, const char *name) { GtkWidget *w; if (!s) abort(); if (!name) abort(); if (!*name) abort(); #ifdef HAVE_GTK2 if (!s->glade_ui) { /* First try to load the Glade file from the current directory; if there isn't one there, check the installed directory. */ # define GLADE_FILE_NAME "xscreensaver-demo.glade2" const char * const files[] = { GLADE_FILE_NAME, GLADE_DIR "/" GLADE_FILE_NAME }; int i; for (i = 0; i < countof (files); i++) { struct stat st; if (!stat (files[i], &st)) { s->glade_ui = glade_xml_new (files[i], NULL, NULL); break; } } if (!s->glade_ui) { fprintf (stderr, "%s: could not load \"" GLADE_FILE_NAME "\"\n" "\tfrom " GLADE_DIR "/ or current directory.\n", blurb()); exit (-1); } # undef GLADE_FILE_NAME glade_xml_signal_autoconnect (s->glade_ui); } w = glade_xml_get_widget (s->glade_ui, name); #else /* !HAVE_GTK2 */ w = (GtkWidget *) gtk_object_get_data (GTK_OBJECT (s->base_widget), name); if (w) return w; w = (GtkWidget *) gtk_object_get_data (GTK_OBJECT (s->popup_widget), name); #endif /* HAVE_GTK2 */ if (w) return w; fprintf (stderr, "%s: no widget \"%s\" (wrong Glade file?)\n", blurb(), name); abort(); } /* Why this behavior isn't automatic in *either* toolkit, I'll never know. Takes a scroller, viewport, or list as an argument. */ static void ensure_selected_item_visible (GtkWidget *widget) { #ifdef HAVE_GTK2 GtkTreePath *path; GtkTreeSelection *selection; GtkTreeIter iter; GtkTreeModel *model; selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (widget)); if (!gtk_tree_selection_get_selected (selection, &model, &iter)) path = gtk_tree_path_new_first (); else path = gtk_tree_model_get_path (model, &iter); gtk_tree_view_set_cursor (GTK_TREE_VIEW (widget), path, NULL, FALSE); gtk_tree_path_free (path); #else /* !HAVE_GTK2 */ GtkScrolledWindow *scroller = 0; GtkViewport *vp = 0; GtkList *list_widget = 0; GList *slist; GList *kids; int nkids = 0; GtkWidget *selected = 0; int list_elt = -1; GtkAdjustment *adj; gint parent_h, child_y, child_h, children_h, ignore; double ratio_t, ratio_b; if (GTK_IS_SCROLLED_WINDOW (widget)) { scroller = GTK_SCROLLED_WINDOW (widget); vp = GTK_VIEWPORT (GTK_BIN (scroller)->child); list_widget = GTK_LIST (GTK_BIN(vp)->child); } else if (GTK_IS_VIEWPORT (widget)) { vp = GTK_VIEWPORT (widget); scroller = GTK_SCROLLED_WINDOW (GTK_WIDGET (vp)->parent); list_widget = GTK_LIST (GTK_BIN(vp)->child); } else if (GTK_IS_LIST (widget)) { list_widget = GTK_LIST (widget); vp = GTK_VIEWPORT (GTK_WIDGET (list_widget)->parent); scroller = GTK_SCROLLED_WINDOW (GTK_WIDGET (vp)->parent); } else abort(); slist = list_widget->selection; selected = (slist ? GTK_WIDGET (slist->data) : 0); if (!selected) return; list_elt = gtk_list_child_position (list_widget, GTK_WIDGET (selected)); for (kids = gtk_container_children (GTK_CONTAINER (list_widget)); kids; kids = kids->next) nkids++; adj = gtk_scrolled_window_get_vadjustment (scroller); gdk_window_get_geometry (GET_WINDOW (GTK_WIDGET (vp)), &ignore, &ignore, &ignore, &parent_h, &ignore); gdk_window_get_geometry (GET_WINDOW (GTK_WIDGET (selected)), &ignore, &child_y, &ignore, &child_h, &ignore); children_h = nkids * child_h; ratio_t = ((double) child_y) / ((double) children_h); ratio_b = ((double) child_y + child_h) / ((double) children_h); if (adj->upper == 0.0) /* no items in list */ return; if (ratio_t < (adj->value / adj->upper) || ratio_b > ((adj->value + adj->page_size) / adj->upper)) { double target; int slop = parent_h * 0.75; /* how much to overshoot by */ if (ratio_t < (adj->value / adj->upper)) { double ratio_w = ((double) parent_h) / ((double) children_h); double ratio_l = (ratio_b - ratio_t); target = ((ratio_t - ratio_w + ratio_l) * adj->upper); target += slop; } else /* if (ratio_b > ((adj->value + adj->page_size) / adj->upper))*/ { target = ratio_t * adj->upper; target -= slop; } if (target > adj->upper - adj->page_size) target = adj->upper - adj->page_size; if (target < 0) target = 0; gtk_adjustment_set_value (adj, target); } #endif /* !HAVE_GTK2 */ } static void warning_dialog_dismiss_cb (GtkWidget *widget, gpointer user_data) { GtkWidget *shell = GTK_WIDGET (user_data); while (GET_PARENT (shell)) shell = GET_PARENT (shell); gtk_widget_destroy (GTK_WIDGET (shell)); } void restart_menu_cb (GtkWidget *widget, gpointer user_data); static void warning_dialog_restart_cb (GtkWidget *widget, gpointer user_data) { restart_menu_cb (widget, user_data); warning_dialog_dismiss_cb (widget, user_data); } static void warning_dialog_killg_cb (GtkWidget *widget, gpointer user_data) { kill_gnome_screensaver (); warning_dialog_dismiss_cb (widget, user_data); } static void warning_dialog_killk_cb (GtkWidget *widget, gpointer user_data) { kill_kde_screensaver (); warning_dialog_dismiss_cb (widget, user_data); } typedef enum { D_NONE, D_LAUNCH, D_GNOME, D_KDE } dialog_button; static Bool warning_dialog (GtkWidget *parent, const char *message, dialog_button button_type, int center) { char *msg = strdup (message); char *head; GtkWidget *dialog = gtk_dialog_new (); GtkWidget *label = 0; GtkWidget *ok = 0; GtkWidget *cancel = 0; int i = 0; while (parent && !GET_WINDOW (parent)) parent = GET_PARENT (parent); if (!parent || !GET_WINDOW (parent)) /* too early to pop up transient dialogs */ { fprintf (stderr, "%s: too early for dialog?\n", progname); free(msg); return False; } head = msg; while (head) { char name[20]; char *s = strchr (head, '\n'); if (s) *s = 0; sprintf (name, "label%d", i++); { label = gtk_label_new (head); #ifdef HAVE_GTK2 gtk_label_set_selectable (GTK_LABEL (label), TRUE); #endif /* HAVE_GTK2 */ #ifndef HAVE_GTK2 if (i == 1) { GTK_WIDGET (label)->style = gtk_style_copy (GTK_WIDGET (label)->style); GTK_WIDGET (label)->style->font = gdk_font_load (get_string_resource("warning_dialog.headingFont", "Dialog.Font")); gtk_widget_set_style (GTK_WIDGET (label), GTK_WIDGET (label)->style); } #endif /* !HAVE_GTK2 */ if (center <= 0) gtk_misc_set_alignment (GTK_MISC (label), 0.0, 0.5); gtk_box_pack_start (GTK_BOX (GET_CONTENT_AREA (GTK_DIALOG (dialog))), label, TRUE, TRUE, 0); gtk_widget_show (label); } if (s) head = s+1; else head = 0; center--; } label = gtk_label_new (""); gtk_box_pack_start (GTK_BOX (GET_CONTENT_AREA (GTK_DIALOG (dialog))), label, TRUE, TRUE, 0); gtk_widget_show (label); label = gtk_hbutton_box_new (); gtk_box_pack_start (GTK_BOX (GET_ACTION_AREA (GTK_DIALOG (dialog))), label, TRUE, TRUE, 0); #ifdef HAVE_GTK2 if (button_type != D_NONE) { cancel = gtk_button_new_from_stock (GTK_STOCK_CANCEL); gtk_container_add (GTK_CONTAINER (label), cancel); } ok = gtk_button_new_from_stock (GTK_STOCK_OK); gtk_container_add (GTK_CONTAINER (label), ok); #else /* !HAVE_GTK2 */ ok = gtk_button_new_with_label ("OK"); gtk_container_add (GTK_CONTAINER (label), ok); if (button_type != D_NONE) { cancel = gtk_button_new_with_label ("Cancel"); gtk_container_add (GTK_CONTAINER (label), cancel); } #endif /* !HAVE_GTK2 */ gtk_window_set_position (GTK_WINDOW (dialog), GTK_WIN_POS_CENTER); gtk_container_set_border_width (GTK_CONTAINER (dialog), 10); gtk_window_set_title (GTK_WINDOW (dialog), progclass); SET_CAN_DEFAULT (ok); gtk_widget_show (ok); gtk_widget_grab_focus (ok); if (cancel) { SET_CAN_DEFAULT (cancel); gtk_widget_show (cancel); } gtk_widget_show (label); gtk_widget_show (dialog); if (button_type != D_NONE) { GtkSignalFunc fn; switch (button_type) { case D_LAUNCH: fn = GTK_SIGNAL_FUNC (warning_dialog_restart_cb); break; case D_GNOME: fn = GTK_SIGNAL_FUNC (warning_dialog_killg_cb); break; case D_KDE: fn = GTK_SIGNAL_FUNC (warning_dialog_killk_cb); break; default: abort(); break; } gtk_signal_connect_object (GTK_OBJECT (ok), "clicked", fn, (gpointer) dialog); gtk_signal_connect_object (GTK_OBJECT (cancel), "clicked", GTK_SIGNAL_FUNC (warning_dialog_dismiss_cb), (gpointer) dialog); } else { gtk_signal_connect_object (GTK_OBJECT (ok), "clicked", GTK_SIGNAL_FUNC (warning_dialog_dismiss_cb), (gpointer) dialog); } gdk_window_set_transient_for (GET_WINDOW (GTK_WIDGET (dialog)), GET_WINDOW (GTK_WIDGET (parent))); #ifdef HAVE_GTK2 gtk_window_present (GTK_WINDOW (dialog)); #else /* !HAVE_GTK2 */ gdk_window_show (GTK_WIDGET (dialog)->window); gdk_window_raise (GTK_WIDGET (dialog)->window); #endif /* !HAVE_GTK2 */ free (msg); return True; } static void run_cmd (state *s, Atom command, int arg) { char *err = 0; int status; flush_dialog_changes_and_save (s); status = xscreensaver_command (GDK_DISPLAY(), command, arg, False, &err); /* Kludge: ignore the spurious "window unexpectedly deleted" errors... */ if (status < 0 && err && strstr (err, "unexpectedly deleted")) status = 0; if (status < 0) { char buf [255]; if (err) sprintf (buf, "Error:\n\n%s", err); else strcpy (buf, "Unknown error!"); warning_dialog (s->toplevel_widget, buf, D_NONE, 100); } if (err) free (err); sensitize_menu_items (s, True); force_dialog_repaint (s); } static void run_hack (state *s, int list_elt, Bool report_errors_p) { int hack_number; char *err = 0; int status; if (list_elt < 0) return; hack_number = s->list_elt_to_hack_number[list_elt]; flush_dialog_changes_and_save (s); schedule_preview (s, 0); status = xscreensaver_command (GDK_DISPLAY(), XA_DEMO, hack_number + 1, False, &err); if (status < 0 && report_errors_p) { if (xscreensaver_running_p (s)) { /* Kludge: ignore the spurious "window unexpectedly deleted" errors... */ if (err && strstr (err, "unexpectedly deleted")) status = 0; if (status < 0) { char buf [255]; if (err) sprintf (buf, "Error:\n\n%s", err); else strcpy (buf, "Unknown error!"); warning_dialog (s->toplevel_widget, buf, D_NONE, 100); } } else { /* The error is that the daemon isn't running; offer to restart it. */ const char *d = DisplayString (GDK_DISPLAY()); char msg [1024]; sprintf (msg, _("Warning:\n\n" "The XScreenSaver daemon doesn't seem to be running\n" "on display \"%s\". Launch it now?"), d); warning_dialog (s->toplevel_widget, msg, D_LAUNCH, 1); } } if (err) free (err); sensitize_menu_items (s, False); } /* Button callbacks According to Eric Lassauge, this G_MODULE_EXPORT crud is needed to make libglade work on Cygwin; apparently all Glade callbacks need this magic extra declaration. I do not pretend to understand. */ G_MODULE_EXPORT void exit_menu_cb (GtkMenuItem *menuitem, gpointer user_data) { state *s = global_state_kludge; /* I hate C so much... */ flush_dialog_changes_and_save (s); kill_preview_subproc (s, False); gtk_main_quit (); } static gboolean wm_toplevel_close_cb (GtkWidget *widget, GdkEvent *event, gpointer data) { state *s = (state *) data; flush_dialog_changes_and_save (s); gtk_main_quit (); return TRUE; } G_MODULE_EXPORT void about_menu_cb (GtkMenuItem *menuitem, gpointer user_data) { char msg [2048]; char *vers = strdup (screensaver_id + 4); char *s, *s2; char copy[1024]; char year[5]; char *desc = _("For updates, check https://www.jwz.org/xscreensaver/"); s = strchr (vers, ','); *s = 0; s += 2; s2 = vers; s2 = strrchr (vers, '-'); s2++; strncpy (year, s2, 4); year[4] = 0; /* Ole Laursen says "don't use _() here because non-ASCII characters aren't allowed in localizable string keys." (I don't want to just use (c) instead of © because that doesn't look as good in the plain-old default Latin1 "C" locale.) */ #ifdef HAVE_GTK2 sprintf(copy, ("Copyright \xC2\xA9 1991-%s %s"), year, s); #else /* !HAVE_GTK2 */ sprintf(copy, ("Copyright \251 1991-%s %s"), year, s); #endif /* !HAVE_GTK2 */ sprintf (msg, "%s\n\n%s", copy, desc); /* I can't make gnome_about_new() work here -- it starts dying in gdk_imlib_get_visual() under gnome_about_new(). If this worked, then this might be the thing to do: #ifdef HAVE_CRAPPLET { const gchar *auth[] = { 0 }; GtkWidget *about = gnome_about_new (progclass, vers, "", auth, desc, "xscreensaver.xpm"); gtk_widget_show (about); } #else / * GTK but not GNOME * / ... */ { GdkColormap *colormap; GdkPixmap *gdkpixmap; GdkBitmap *mask; GtkWidget *dialog = gtk_dialog_new (); GtkWidget *hbox, *icon, *vbox, *label1, *label2, *hb, *ok; GtkWidget *parent = GTK_WIDGET (menuitem); while (GET_PARENT (parent)) parent = GET_PARENT (parent); hbox = gtk_hbox_new (FALSE, 20); gtk_box_pack_start (GTK_BOX (GET_CONTENT_AREA (GTK_DIALOG (dialog))), hbox, TRUE, TRUE, 0); colormap = gtk_widget_get_colormap (parent); gdkpixmap = gdk_pixmap_colormap_create_from_xpm_d (NULL, colormap, &mask, NULL, (gchar **) logo_180_xpm); icon = gtk_pixmap_new (gdkpixmap, mask); gtk_misc_set_padding (GTK_MISC (icon), 10, 10); gtk_box_pack_start (GTK_BOX (hbox), icon, FALSE, FALSE, 0); vbox = gtk_vbox_new (FALSE, 0); gtk_box_pack_start (GTK_BOX (hbox), vbox, TRUE, TRUE, 0); label1 = gtk_label_new (vers); gtk_box_pack_start (GTK_BOX (vbox), label1, TRUE, TRUE, 0); gtk_label_set_justify (GTK_LABEL (label1), GTK_JUSTIFY_LEFT); gtk_misc_set_alignment (GTK_MISC (label1), 0.0, 0.75); #ifndef HAVE_GTK2 GTK_WIDGET (label1)->style = gtk_style_copy (GTK_WIDGET (label1)->style); GTK_WIDGET (label1)->style->font = gdk_font_load (get_string_resource ("about.headingFont","Dialog.Font")); gtk_widget_set_style (GTK_WIDGET (label1), GTK_WIDGET (label1)->style); #endif /* HAVE_GTK2 */ label2 = gtk_label_new (msg); gtk_box_pack_start (GTK_BOX (vbox), label2, TRUE, TRUE, 0); gtk_label_set_justify (GTK_LABEL (label2), GTK_JUSTIFY_LEFT); gtk_misc_set_alignment (GTK_MISC (label2), 0.0, 0.25); #ifndef HAVE_GTK2 GTK_WIDGET (label2)->style = gtk_style_copy (GTK_WIDGET (label2)->style); GTK_WIDGET (label2)->style->font = gdk_font_load (get_string_resource ("about.bodyFont","Dialog.Font")); gtk_widget_set_style (GTK_WIDGET (label2), GTK_WIDGET (label2)->style); #endif /* HAVE_GTK2 */ hb = gtk_hbutton_box_new (); gtk_box_pack_start (GTK_BOX (GET_ACTION_AREA (GTK_DIALOG (dialog))), hb, TRUE, TRUE, 0); #ifdef HAVE_GTK2 ok = gtk_button_new_from_stock (GTK_STOCK_OK); #else /* !HAVE_GTK2 */ ok = gtk_button_new_with_label (_("OK")); #endif /* !HAVE_GTK2 */ gtk_container_add (GTK_CONTAINER (hb), ok); gtk_window_set_position (GTK_WINDOW (dialog), GTK_WIN_POS_CENTER); gtk_container_set_border_width (GTK_CONTAINER (dialog), 10); gtk_window_set_title (GTK_WINDOW (dialog), progclass); gtk_widget_show (hbox); gtk_widget_show (icon); gtk_widget_show (vbox); gtk_widget_show (label1); gtk_widget_show (label2); gtk_widget_show (hb); gtk_widget_show (ok); gtk_widget_show (dialog); gtk_signal_connect_object (GTK_OBJECT (ok), "clicked", GTK_SIGNAL_FUNC (warning_dialog_dismiss_cb), (gpointer) dialog); gdk_window_set_transient_for (GET_WINDOW (GTK_WIDGET (dialog)), GET_WINDOW (GTK_WIDGET (parent))); gdk_window_show (GET_WINDOW (GTK_WIDGET (dialog))); gdk_window_raise (GET_WINDOW (GTK_WIDGET (dialog))); } } G_MODULE_EXPORT void doc_menu_cb (GtkMenuItem *menuitem, gpointer user_data) { state *s = global_state_kludge; /* I hate C so much... */ saver_preferences *p = &s->prefs; char *help_command; if (!p->help_url || !*p->help_url) { warning_dialog (s->toplevel_widget, _("Error:\n\n" "No Help URL has been specified.\n"), D_NONE, 100); return; } help_command = (char *) malloc (strlen (p->load_url_command) + (strlen (p->help_url) * 4) + 20); strcpy (help_command, "( "); sprintf (help_command + strlen(help_command), p->load_url_command, p->help_url, p->help_url, p->help_url, p->help_url); strcat (help_command, " ) &"); if (system (help_command) < 0) fprintf (stderr, "%s: fork error\n", blurb()); free (help_command); } G_MODULE_EXPORT void file_menu_cb (GtkMenuItem *menuitem, gpointer user_data) { state *s = global_state_kludge; /* I hate C so much... */ sensitize_menu_items (s, False); } G_MODULE_EXPORT void activate_menu_cb (GtkMenuItem *menuitem, gpointer user_data) { state *s = global_state_kludge; /* I hate C so much... */ run_cmd (s, XA_ACTIVATE, 0); } G_MODULE_EXPORT void lock_menu_cb (GtkMenuItem *menuitem, gpointer user_data) { state *s = global_state_kludge; /* I hate C so much... */ run_cmd (s, XA_LOCK, 0); } G_MODULE_EXPORT void kill_menu_cb (GtkMenuItem *menuitem, gpointer user_data) { state *s = global_state_kludge; /* I hate C so much... */ run_cmd (s, XA_EXIT, 0); } G_MODULE_EXPORT void restart_menu_cb (GtkWidget *widget, gpointer user_data) { state *s = global_state_kludge; /* I hate C so much... */ flush_dialog_changes_and_save (s); xscreensaver_command (GDK_DISPLAY(), XA_EXIT, 0, False, NULL); sleep (1); if (system ("xscreensaver -nosplash &") < 0) fprintf (stderr, "%s: fork error\n", blurb()); await_xscreensaver (s); } static Bool xscreensaver_running_p (state *s) { Display *dpy = GDK_DISPLAY(); char *rversion = 0; server_xscreensaver_version (dpy, &rversion, 0, 0); if (!rversion) return False; free (rversion); return True; } static void await_xscreensaver (state *s) { int countdown = 5; Bool ok = False; while (!ok && (--countdown > 0)) if (xscreensaver_running_p (s)) ok = True; else sleep (1); /* If it's not there yet, wait a second... */ sensitize_menu_items (s, True); if (! ok) { /* Timed out, no screensaver running. */ char buf [1024]; Bool root_p = (geteuid () == 0); strcpy (buf, _("Error:\n\n" "The xscreensaver daemon did not start up properly.\n" "\n")); if (root_p) # ifdef __GNUC__ __extension__ /* don't warn about "string length is greater than the length ISO C89 compilers are required to support" in the following expression... */ # endif strcat (buf, STFU _("You are running as root. This usually means that xscreensaver\n" "was unable to contact your X server because access control is\n" "turned on. Try running this command:\n" "\n" " xhost +localhost\n" "\n" "and then selecting `File / Restart Daemon'.\n" "\n" "Note that turning off access control will allow anyone logged\n" "on to this machine to access your screen, which might be\n" "considered a security problem. Please read the xscreensaver\n" "manual and FAQ for more information.\n" "\n" "You shouldn't run X as root. Instead, you should log in as a\n" "normal user, and `su' as necessary.")); else strcat (buf, _("Please check your $PATH and permissions.")); warning_dialog (s->toplevel_widget, buf, D_NONE, 1); } force_dialog_repaint (s); } static int selected_list_element (state *s) { return s->_selected_list_element; } static int demo_write_init_file (state *s, saver_preferences *p) { Display *dpy = GDK_DISPLAY(); #if 0 /* #### try to figure out why shit keeps getting reordered... */ if (strcmp (s->prefs.screenhacks[0]->name, "DNA Lounge Slideshow")) abort(); #endif if (!write_init_file (dpy, p, s->short_version, False)) { if (s->debug_p) fprintf (stderr, "%s: wrote %s\n", blurb(), init_file_name()); return 0; } else { const char *f = init_file_name(); if (!f || !*f) warning_dialog (s->toplevel_widget, _("Error:\n\nCouldn't determine init file name!\n"), D_NONE, 100); else { char *b = (char *) malloc (strlen(f) + 1024); sprintf (b, _("Error:\n\nCouldn't write %s\n"), f); warning_dialog (s->toplevel_widget, b, D_NONE, 100); free (b); } return -1; } } G_MODULE_EXPORT void run_this_cb (GtkButton *button, gpointer user_data) { state *s = global_state_kludge; /* I hate C so much... */ int list_elt = selected_list_element (s); if (list_elt < 0) return; if (!flush_dialog_changes_and_save (s)) run_hack (s, list_elt, True); } G_MODULE_EXPORT void manual_cb (GtkButton *button, gpointer user_data) { Display *dpy = GDK_DISPLAY(); state *s = global_state_kludge; /* I hate C so much... */ saver_preferences *p = &s->prefs; GtkWidget *list_widget = name_to_widget (s, "list"); int list_elt = selected_list_element (s); int hack_number; char *name, *name2, *cmd, *str; char *oname = 0; if (list_elt < 0) return; hack_number = s->list_elt_to_hack_number[list_elt]; flush_dialog_changes_and_save (s); ensure_selected_item_visible (list_widget); name = strdup (p->screenhacks[hack_number]->command); name2 = name; oname = name; while (isspace (*name2)) name2++; str = name2; while (*str && !isspace (*str)) str++; *str = 0; str = strrchr (name2, '/'); if (str) name2 = str+1; cmd = get_string_resource (dpy, "manualCommand", "ManualCommand"); if (cmd) { char *cmd2 = (char *) malloc (strlen (cmd) + (strlen (name2) * 4) + 100); strcpy (cmd2, "( "); sprintf (cmd2 + strlen (cmd2), cmd, name2, name2, name2, name2); strcat (cmd2, " ) &"); if (system (cmd2) < 0) fprintf (stderr, "%s: fork error\n", blurb()); free (cmd2); } else { warning_dialog (GTK_WIDGET (button), _("Error:\n\nno `manualCommand' resource set."), D_NONE, 100); } free (oname); } static void force_list_select_item (state *s, GtkWidget *list, int list_elt, Bool scroll_p) { GtkWidget *parent = name_to_widget (s, "scroller"); gboolean was = GET_SENSITIVE (parent); #ifdef HAVE_GTK2 GtkTreeIter iter; GtkTreeModel *model; GtkTreeSelection *selection; #endif /* HAVE_GTK2 */ if (!was) gtk_widget_set_sensitive (parent, True); #ifdef HAVE_GTK2 model = gtk_tree_view_get_model (GTK_TREE_VIEW (list)); g_assert (model); if (gtk_tree_model_iter_nth_child (model, &iter, NULL, list_elt)) { selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (list)); gtk_tree_selection_select_iter (selection, &iter); } #else /* !HAVE_GTK2 */ gtk_list_select_item (GTK_LIST (list), list_elt); #endif /* !HAVE_GTK2 */ if (scroll_p) ensure_selected_item_visible (GTK_WIDGET (list)); if (!was) gtk_widget_set_sensitive (parent, False); } G_MODULE_EXPORT void run_next_cb (GtkButton *button, gpointer user_data) { state *s = global_state_kludge; /* I hate C so much... */ /* saver_preferences *p = &s->prefs; */ Bool ops = s->preview_suppressed_p; GtkWidget *list_widget = name_to_widget (s, "list"); int list_elt = selected_list_element (s); if (list_elt < 0) list_elt = 0; else list_elt++; if (list_elt >= s->list_count) list_elt = 0; s->preview_suppressed_p = True; flush_dialog_changes_and_save (s); force_list_select_item (s, list_widget, list_elt, True); populate_demo_window (s, list_elt); run_hack (s, list_elt, False); s->preview_suppressed_p = ops; } G_MODULE_EXPORT void run_prev_cb (GtkButton *button, gpointer user_data) { state *s = global_state_kludge; /* I hate C so much... */ /* saver_preferences *p = &s->prefs; */ Bool ops = s->preview_suppressed_p; GtkWidget *list_widget = name_to_widget (s, "list"); int list_elt = selected_list_element (s); if (list_elt < 0) list_elt = s->list_count - 1; else list_elt--; if (list_elt < 0) list_elt = s->list_count - 1; s->preview_suppressed_p = True; flush_dialog_changes_and_save (s); force_list_select_item (s, list_widget, list_elt, True); populate_demo_window (s, list_elt); run_hack (s, list_elt, False); s->preview_suppressed_p = ops; } /* Writes the given settings into prefs. Returns true if there was a change, False otherwise. command and/or visual may be 0, or enabled_p may be -1, meaning "no change". */ static Bool flush_changes (state *s, int list_elt, int enabled_p, const char *command, const char *visual) { saver_preferences *p = &s->prefs; Bool changed = False; screenhack *hack; int hack_number; if (list_elt < 0 || list_elt >= s->list_count) abort(); hack_number = s->list_elt_to_hack_number[list_elt]; hack = p->screenhacks[hack_number]; if (enabled_p != -1 && enabled_p != hack->enabled_p) { hack->enabled_p = enabled_p; changed = True; if (s->debug_p) fprintf (stderr, "%s: \"%s\": enabled => %d\n", blurb(), hack->name, enabled_p); } if (command) { if (!hack->command || !!strcmp (command, hack->command)) { if (hack->command) free (hack->command); hack->command = strdup (command); changed = True; if (s->debug_p) fprintf (stderr, "%s: \"%s\": command => \"%s\"\n", blurb(), hack->name, command); } } if (visual) { const char *ov = hack->visual; if (!ov || !*ov) ov = "any"; if (!*visual) visual = "any"; if (!!strcasecmp (visual, ov)) { if (hack->visual) free (hack->visual); hack->visual = strdup (visual); changed = True; if (s->debug_p) fprintf (stderr, "%s: \"%s\": visual => \"%s\"\n", blurb(), hack->name, visual); } } return changed; } /* Helper for the text fields that contain time specifications: this parses the text, and does error checking. */ static void hack_time_text (state *s, const char *line, Time *store, Bool sec_p) { if (*line) { int value; if (!sec_p || strchr (line, ':')) value = parse_time ((char *) line, sec_p, True); else { char c; if (sscanf (line, "%d%c", &value, &c) != 1) value = -1; if (!sec_p) value *= 60; } value *= 1000; /* Time measures in microseconds */ if (value < 0) { char b[255]; sprintf (b, _("Error:\n\n" "Unparsable time format: \"%s\"\n"), line); warning_dialog (s->toplevel_widget, b, D_NONE, 100); } else *store = value; } } static Bool directory_p (const char *path) { struct stat st; if (!path || !*path) return False; else if (stat (path, &st)) return False; else if (!S_ISDIR (st.st_mode)) return False; else return True; } static Bool file_p (const char *path) { struct stat st; if (!path || !*path) return False; else if (stat (path, &st)) return False; else if (S_ISDIR (st.st_mode)) return False; else return True; } static char * normalize_directory (const char *path) { int L; char *p2, *s; if (!path || !*path) return 0; L = strlen (path); p2 = (char *) malloc (L + 2); strcpy (p2, path); if (p2[L-1] == '/') /* remove trailing slash */ p2[--L] = 0; for (s = p2; s && *s; s++) { if (*s == '/' && (!strncmp (s, "/../", 4) || /* delete "XYZ/../" */ !strncmp (s, "/..\000", 4))) /* delete "XYZ/..$" */ { char *s0 = s; while (s0 > p2 && s0[-1] != '/') s0--; if (s0 > p2) { s0--; s += 3; /* strcpy (s0, s); */ memmove(s0, s, strlen(s) + 1); s = s0-1; } } else if (*s == '/' && !strncmp (s, "/./", 3)) { /* delete "/./" */ /* strcpy (s, s+2), s--; */ memmove(s, s+2, strlen(s+2) + 1); s--; } else if (*s == '/' && !strncmp (s, "/.\000", 3)) /* delete "/.$" */ *s = 0, s--; } /* Normalize consecutive slashes. Ignore doubled slashes after ":" to avoid mangling URLs. */ for (s = p2; s && *s; s++){ if (*s == ':') continue; if (!s[1] || !s[2]) continue; while (s[1] == '/' && s[2] == '/') /* strcpy (s+1, s+2); */ memmove (s+1, s+2, strlen(s+2) + 1); } /* and strip trailing whitespace for good measure. */ L = strlen(p2); while (isspace(p2[L-1])) p2[--L] = 0; return p2; } #ifdef HAVE_GTK2 typedef struct { state *s; int i; Bool *changed; } FlushForeachClosure; static gboolean flush_checkbox (GtkTreeModel *model, GtkTreePath *path, GtkTreeIter *iter, gpointer data) { FlushForeachClosure *closure = data; gboolean checked; gtk_tree_model_get (model, iter, COL_ENABLED, &checked, -1); if (flush_changes (closure->s, closure->i, checked, 0, 0)) *closure->changed = True; closure->i++; /* don't remove row */ return FALSE; } #endif /* HAVE_GTK2 */ /* Flush out any changes made in the main dialog window (where changes take place immediately: clicking on a checkbox causes the init file to be written right away.) */ static Bool flush_dialog_changes_and_save (state *s) { saver_preferences *p = &s->prefs; saver_preferences P2, *p2 = &P2; #ifdef HAVE_GTK2 GtkTreeView *list_widget = GTK_TREE_VIEW (name_to_widget (s, "list")); GtkTreeModel *model = gtk_tree_view_get_model (list_widget); FlushForeachClosure closure; #else /* !HAVE_GTK2 */ GtkList *list_widget = GTK_LIST (name_to_widget (s, "list")); GList *kids = gtk_container_children (GTK_CONTAINER (list_widget)); int i; #endif /* !HAVE_GTK2 */ static Bool already_warned_about_missing_image_directory = False; /* very long name... */ Bool changed = False; GtkWidget *w; if (s->saving_p) return False; s->saving_p = True; *p2 = *p; /* Flush any checkbox changes in the list down into the prefs struct. */ #ifdef HAVE_GTK2 closure.s = s; closure.changed = &changed; closure.i = 0; gtk_tree_model_foreach (model, flush_checkbox, &closure); #else /* !HAVE_GTK2 */ for (i = 0; kids; kids = kids->next, i++) { GtkWidget *line = GTK_WIDGET (kids->data); GtkWidget *line_hbox = GTK_WIDGET (GTK_BIN (line)->child); GtkWidget *line_check = GTK_WIDGET (gtk_container_children (GTK_CONTAINER (line_hbox))->data); Bool checked = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (line_check)); if (flush_changes (s, i, (checked ? 1 : 0), 0, 0)) changed = True; } #endif /* ~HAVE_GTK2 */ /* Flush the non-hack-specific settings down into the prefs struct. */ # define SECONDS(FIELD,NAME) \ w = name_to_widget (s, (NAME)); \ hack_time_text (s, gtk_entry_get_text (GTK_ENTRY (w)), (FIELD), True) # define MINUTES(FIELD,NAME) \ w = name_to_widget (s, (NAME)); \ hack_time_text (s, gtk_entry_get_text (GTK_ENTRY (w)), (FIELD), False) # define CHECKBOX(FIELD,NAME) \ w = name_to_widget (s, (NAME)); \ (FIELD) = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (w)) # define PATHNAME(FIELD,NAME) \ w = name_to_widget (s, (NAME)); \ (FIELD) = normalize_directory (gtk_entry_get_text (GTK_ENTRY (w))) # define TEXT(FIELD,NAME) \ w = name_to_widget (s, (NAME)); \ (FIELD) = (char *) g_strdup(gtk_entry_get_text (GTK_ENTRY (w))) MINUTES (&p2->timeout, "timeout_spinbutton"); MINUTES (&p2->cycle, "cycle_spinbutton"); CHECKBOX (p2->lock_p, "lock_button"); MINUTES (&p2->lock_timeout, "lock_spinbutton"); CHECKBOX (p2->dpms_enabled_p, "dpms_button"); CHECKBOX (p2->dpms_quickoff_p, "dpms_quickoff_button"); MINUTES (&p2->dpms_standby, "dpms_standby_spinbutton"); MINUTES (&p2->dpms_suspend, "dpms_suspend_spinbutton"); MINUTES (&p2->dpms_off, "dpms_off_spinbutton"); CHECKBOX (p2->grab_desktop_p, "grab_desk_button"); CHECKBOX (p2->grab_video_p, "grab_video_button"); CHECKBOX (p2->random_image_p, "grab_image_button"); PATHNAME (p2->image_directory, "image_text"); #if 0 CHECKBOX (p2->verbose_p, "verbose_button"); CHECKBOX (p2->capture_stderr_p, "capture_button"); CHECKBOX (p2->splash_p, "splash_button"); #endif { Bool v = False; CHECKBOX (v, "text_host_radio"); if (v) p2->tmode = TEXT_DATE; CHECKBOX (v, "text_radio"); if (v) p2->tmode = TEXT_LITERAL; CHECKBOX (v, "text_file_radio"); if (v) p2->tmode = TEXT_FILE; CHECKBOX (v, "text_program_radio"); if (v) p2->tmode = TEXT_PROGRAM; CHECKBOX (v, "text_url_radio"); if (v) p2->tmode = TEXT_URL; TEXT (p2->text_literal, "text_entry"); PATHNAME (p2->text_file, "text_file_entry"); PATHNAME (p2->text_program, "text_program_entry"); PATHNAME (p2->text_program, "text_program_entry"); TEXT (p2->text_url, "text_url_entry"); } CHECKBOX (p2->install_cmap_p, "install_button"); CHECKBOX (p2->fade_p, "fade_button"); CHECKBOX (p2->unfade_p, "unfade_button"); SECONDS (&p2->fade_seconds, "fade_spinbutton"); # undef SECONDS # undef MINUTES # undef CHECKBOX # undef PATHNAME # undef TEXT /* Warn if the image directory doesn't exist, when: - not being warned before - image directory is changed and the directory doesn't exist - image directory does not begin with http:// */ if (p2->image_directory && *p2->image_directory && !directory_p (p2->image_directory) && strncmp(p2->image_directory, "http://", 6) && ( !already_warned_about_missing_image_directory || ( p->image_directory && *p->image_directory && strcmp(p->image_directory, p2->image_directory) ) ) ) { char b[255]; sprintf (b, "Warning:\n\n" "Directory does not exist: \"%s\"\n", p2->image_directory); if (warning_dialog (s->toplevel_widget, b, D_NONE, 100)) already_warned_about_missing_image_directory = True; } /* Map the mode menu to `saver_mode' enum values. */ { GtkOptionMenu *opt = GTK_OPTION_MENU (name_to_widget (s, "mode_menu")); GtkMenu *menu = GTK_MENU (gtk_option_menu_get_menu (opt)); GtkWidget *selected = gtk_menu_get_active (menu); GList *kids = gtk_container_children (GTK_CONTAINER (menu)); int menu_elt = g_list_index (kids, (gpointer) selected); if (menu_elt < 0 || menu_elt >= countof(mode_menu_order)) abort(); p2->mode = mode_menu_order[menu_elt]; } if (p2->mode == ONE_HACK) { int list_elt = selected_list_element (s); p2->selected_hack = (list_elt >= 0 ? s->list_elt_to_hack_number[list_elt] : -1); } # define COPY(field, name) \ if (p->field != p2->field) { \ changed = True; \ if (s->debug_p) \ fprintf (stderr, "%s: %s => %d\n", blurb(), name, (int) p2->field); \ } \ p->field = p2->field COPY(mode, "mode"); COPY(selected_hack, "selected_hack"); COPY(timeout, "timeout"); COPY(cycle, "cycle"); COPY(lock_p, "lock_p"); COPY(lock_timeout, "lock_timeout"); COPY(dpms_enabled_p, "dpms_enabled_p"); COPY(dpms_quickoff_p, "dpms_quickoff_enabled_p"); COPY(dpms_standby, "dpms_standby"); COPY(dpms_suspend, "dpms_suspend"); COPY(dpms_off, "dpms_off"); #if 0 COPY(verbose_p, "verbose_p"); COPY(capture_stderr_p, "capture_stderr_p"); COPY(splash_p, "splash_p"); #endif COPY(tmode, "tmode"); COPY(install_cmap_p, "install_cmap_p"); COPY(fade_p, "fade_p"); COPY(unfade_p, "unfade_p"); COPY(fade_seconds, "fade_seconds"); COPY(grab_desktop_p, "grab_desktop_p"); COPY(grab_video_p, "grab_video_p"); COPY(random_image_p, "random_image_p"); # undef COPY # define COPYSTR(FIELD,NAME) \ if (!p->FIELD || \ !p2->FIELD || \ strcmp(p->FIELD, p2->FIELD)) \ { \ changed = True; \ if (s->debug_p) \ fprintf (stderr, "%s: %s => \"%s\"\n", blurb(), NAME, p2->FIELD); \ } \ if (p->FIELD && p->FIELD != p2->FIELD) \ free (p->FIELD); \ p->FIELD = p2->FIELD; \ p2->FIELD = 0 COPYSTR(image_directory, "image_directory"); COPYSTR(text_literal, "text_literal"); COPYSTR(text_file, "text_file"); COPYSTR(text_program, "text_program"); COPYSTR(text_url, "text_url"); # undef COPYSTR populate_prefs_page (s); if (changed) { Display *dpy = GDK_DISPLAY(); Bool enabled_p = (p->dpms_enabled_p && p->mode != DONT_BLANK); sync_server_dpms_settings (dpy, enabled_p, p->dpms_quickoff_p, p->dpms_standby / 1000, p->dpms_suspend / 1000, p->dpms_off / 1000, False); changed = demo_write_init_file (s, p); } s->saving_p = False; return changed; } /* Flush out any changes made in the popup dialog box (where changes take place only when the OK button is clicked.) */ static Bool flush_popup_changes_and_save (state *s) { Bool changed = False; saver_preferences *p = &s->prefs; int list_elt = selected_list_element (s); GtkEntry *cmd = GTK_ENTRY (name_to_widget (s, "cmd_text")); GtkCombo *vis = GTK_COMBO (name_to_widget (s, "visual_combo")); const char *visual = gtk_entry_get_text (GTK_ENTRY (GTK_COMBO (vis)->entry)); const char *command = gtk_entry_get_text (cmd); char c; unsigned long id; if (s->saving_p) return False; s->saving_p = True; if (list_elt < 0) goto DONE; if (maybe_reload_init_file (s) != 0) { changed = True; goto DONE; } /* Sanity-check and canonicalize whatever the user typed into the combo box. */ if (!strcasecmp (visual, "")) visual = ""; else if (!strcasecmp (visual, "any")) visual = ""; else if (!strcasecmp (visual, "default")) visual = "Default"; else if (!strcasecmp (visual, "default-n")) visual = "Default-N"; else if (!strcasecmp (visual, "default-i")) visual = "Default-I"; else if (!strcasecmp (visual, "best")) visual = "Best"; else if (!strcasecmp (visual, "mono")) visual = "Mono"; else if (!strcasecmp (visual, "monochrome")) visual = "Mono"; else if (!strcasecmp (visual, "gray")) visual = "Gray"; else if (!strcasecmp (visual, "grey")) visual = "Gray"; else if (!strcasecmp (visual, "color")) visual = "Color"; else if (!strcasecmp (visual, "gl")) visual = "GL"; else if (!strcasecmp (visual, "staticgray")) visual = "StaticGray"; else if (!strcasecmp (visual, "staticcolor")) visual = "StaticColor"; else if (!strcasecmp (visual, "truecolor")) visual = "TrueColor"; else if (!strcasecmp (visual, "grayscale")) visual = "GrayScale"; else if (!strcasecmp (visual, "greyscale")) visual = "GrayScale"; else if (!strcasecmp (visual, "pseudocolor")) visual = "PseudoColor"; else if (!strcasecmp (visual, "directcolor")) visual = "DirectColor"; else if (1 == sscanf (visual, " %lu %c", &id, &c)) ; else if (1 == sscanf (visual, " 0x%lx %c", &id, &c)) ; else { gdk_beep (); /* unparsable */ visual = ""; gtk_entry_set_text (GTK_ENTRY (GTK_COMBO (vis)->entry), _("Any")); } changed = flush_changes (s, list_elt, -1, command, visual); if (changed) { changed = demo_write_init_file (s, p); /* Do this to re-launch the hack if (and only if) the command line has changed. */ populate_demo_window (s, selected_list_element (s)); } DONE: s->saving_p = False; return changed; } G_MODULE_EXPORT void pref_changed_cb (GtkWidget *widget, gpointer user_data) { state *s = global_state_kludge; /* I hate C so much... */ if (! s->initializing_p) { s->initializing_p = True; flush_dialog_changes_and_save (s); s->initializing_p = False; } } G_MODULE_EXPORT gboolean pref_changed_event_cb (GtkWidget *widget, GdkEvent *event, gpointer user_data) { pref_changed_cb (widget, user_data); return FALSE; } /* Callback on menu items in the "mode" options menu. */ G_MODULE_EXPORT void mode_menu_item_cb (GtkWidget *widget, gpointer user_data) { state *s = (state *) user_data; saver_preferences *p = &s->prefs; GtkWidget *list = name_to_widget (s, "list"); int list_elt; GList *menu_items = gtk_container_children (GTK_CONTAINER (GET_PARENT (widget))); int menu_index = 0; saver_mode new_mode; while (menu_items) { if (menu_items->data == widget) break; menu_index++; menu_items = menu_items->next; } if (!menu_items) abort(); new_mode = mode_menu_order[menu_index]; /* Keep the same list element displayed as before; except if we're switching *to* "one screensaver" mode from any other mode, set "the one" to be that which is currently selected. */ list_elt = selected_list_element (s); if (new_mode == ONE_HACK) p->selected_hack = s->list_elt_to_hack_number[list_elt]; { saver_mode old_mode = p->mode; p->mode = new_mode; populate_demo_window (s, list_elt); force_list_select_item (s, list, list_elt, True); p->mode = old_mode; /* put it back, so the init file gets written */ } pref_changed_cb (widget, user_data); } G_MODULE_EXPORT void switch_page_cb (GtkNotebook *notebook, GtkNotebookPage *page, gint page_num, gpointer user_data) { state *s = global_state_kludge; /* I hate C so much... */ pref_changed_cb (GTK_WIDGET (notebook), user_data); /* If we're switching to page 0, schedule the current hack to be run. Otherwise, schedule it to stop. */ if (page_num == 0) populate_demo_window (s, selected_list_element (s)); else schedule_preview (s, 0); } #ifdef HAVE_GTK2 static void list_activated_cb (GtkTreeView *list, GtkTreePath *path, GtkTreeViewColumn *column, gpointer data) { state *s = data; char *str; int list_elt; g_return_if_fail (!gdk_pointer_is_grabbed ()); str = gtk_tree_path_to_string (path); list_elt = strtol (str, NULL, 10); g_free (str); if (list_elt >= 0) run_hack (s, list_elt, True); } static void list_select_changed_cb (GtkTreeSelection *selection, gpointer data) { state *s = (state *)data; GtkTreeModel *model; GtkTreeIter iter; GtkTreePath *path; char *str; int list_elt; if (!gtk_tree_selection_get_selected (selection, &model, &iter)) return; path = gtk_tree_model_get_path (model, &iter); str = gtk_tree_path_to_string (path); list_elt = strtol (str, NULL, 10); gtk_tree_path_free (path); g_free (str); populate_demo_window (s, list_elt); flush_dialog_changes_and_save (s); /* Re-populate the Settings window any time a new item is selected in the list, in case both windows are currently visible. */ populate_popup_window (s); } #else /* !HAVE_GTK2 */ static time_t last_doubleclick_time = 0; /* FMH! This is to suppress the list_select_cb that comes in *after* we've double-clicked. */ static gint list_doubleclick_cb (GtkWidget *button, GdkEventButton *event, gpointer data) { state *s = (state *) data; if (event->type == GDK_2BUTTON_PRESS) { GtkList *list = GTK_LIST (name_to_widget (s, "list")); int list_elt = gtk_list_child_position (list, GTK_WIDGET (button)); last_doubleclick_time = time ((time_t *) 0); if (list_elt >= 0) run_hack (s, list_elt, True); } return FALSE; } static void list_select_cb (GtkList *list, GtkWidget *child, gpointer data) { state *s = (state *) data; time_t now = time ((time_t *) 0); if (now >= last_doubleclick_time + 2) { int list_elt = gtk_list_child_position (list, GTK_WIDGET (child)); populate_demo_window (s, list_elt); flush_dialog_changes_and_save (s); } } static void list_unselect_cb (GtkList *list, GtkWidget *child, gpointer data) { state *s = (state *) data; populate_demo_window (s, -1); flush_dialog_changes_and_save (s); } #endif /* !HAVE_GTK2 */ /* Called when the checkboxes that are in the left column of the scrolling list are clicked. This both populates the right pane (just as clicking on the label (really, listitem) does) and also syncs this checkbox with the right pane Enabled checkbox. */ static void list_checkbox_cb ( #ifdef HAVE_GTK2 GtkCellRendererToggle *toggle, gchar *path_string, #else /* !HAVE_GTK2 */ GtkWidget *cb, #endif /* !HAVE_GTK2 */ gpointer data) { state *s = (state *) data; #ifdef HAVE_GTK2 GtkScrolledWindow *scroller = GTK_SCROLLED_WINDOW (name_to_widget (s, "scroller")); GtkTreeView *list = GTK_TREE_VIEW (name_to_widget (s, "list")); GtkTreeModel *model = gtk_tree_view_get_model (list); GtkTreePath *path = gtk_tree_path_new_from_string (path_string); GtkTreeIter iter; gboolean active; #else /* !HAVE_GTK2 */ GtkWidget *line_hbox = GTK_WIDGET (cb)->parent; GtkWidget *line = GTK_WIDGET (line_hbox)->parent; GtkList *list = GTK_LIST (GTK_WIDGET (line)->parent); GtkViewport *vp = GTK_VIEWPORT (GTK_WIDGET (list)->parent); GtkScrolledWindow *scroller = GTK_SCROLLED_WINDOW (GTK_WIDGET (vp)->parent); #endif /* !HAVE_GTK2 */ GtkAdjustment *adj; double scroll_top; int list_elt; #ifdef HAVE_GTK2 if (!gtk_tree_model_get_iter (model, &iter, path)) { g_warning ("bad path: %s", path_string); return; } gtk_tree_path_free (path); gtk_tree_model_get (model, &iter, COL_ENABLED, &active, -1); gtk_list_store_set (GTK_LIST_STORE (model), &iter, COL_ENABLED, !active, -1); list_elt = strtol (path_string, NULL, 10); #else /* !HAVE_GTK2 */ list_elt = gtk_list_child_position (list, line); #endif /* !HAVE_GTK2 */ /* remember previous scroll position of the top of the list */ adj = gtk_scrolled_window_get_vadjustment (scroller); scroll_top = GET_ADJ_VALUE (adj); flush_dialog_changes_and_save (s); force_list_select_item (s, GTK_WIDGET (list), list_elt, False); populate_demo_window (s, list_elt); /* restore the previous scroll position of the top of the list. this is weak, but I don't really know why it's moving... */ gtk_adjustment_set_value (adj, scroll_top); } typedef struct { state *state; GtkFileSelection *widget; } file_selection_data; static void store_image_directory (GtkWidget *button, gpointer user_data) { file_selection_data *fsd = (file_selection_data *) user_data; state *s = fsd->state; GtkFileSelection *selector = fsd->widget; GtkWidget *top = s->toplevel_widget; saver_preferences *p = &s->prefs; const char *path = gtk_file_selection_get_filename (selector); if (p->image_directory && !strcmp(p->image_directory, path)) return; /* no change */ /* No warning for URLs. */ if ((!directory_p (path)) && strncmp(path, "http://", 6)) { char b[255]; sprintf (b, _("Error:\n\n" "Directory does not exist: \"%s\"\n"), path); warning_dialog (GTK_WIDGET (top), b, D_NONE, 100); return; } if (p->image_directory) free (p->image_directory); p->image_directory = normalize_directory (path); gtk_entry_set_text (GTK_ENTRY (name_to_widget (s, "image_text")), (p->image_directory ? p->image_directory : "")); demo_write_init_file (s, p); } static void store_text_file (GtkWidget *button, gpointer user_data) { file_selection_data *fsd = (file_selection_data *) user_data; state *s = fsd->state; GtkFileSelection *selector = fsd->widget; GtkWidget *top = s->toplevel_widget; saver_preferences *p = &s->prefs; const char *path = gtk_file_selection_get_filename (selector); if (p->text_file && !strcmp(p->text_file, path)) return; /* no change */ if (!file_p (path)) { char b[255]; sprintf (b, _("Error:\n\n" "File does not exist: \"%s\"\n"), path); warning_dialog (GTK_WIDGET (top), b, D_NONE, 100); return; } if (p->text_file) free (p->text_file); p->text_file = normalize_directory (path); gtk_entry_set_text (GTK_ENTRY (name_to_widget (s, "text_file_entry")), (p->text_file ? p->text_file : "")); demo_write_init_file (s, p); } static void store_text_program (GtkWidget *button, gpointer user_data) { file_selection_data *fsd = (file_selection_data *) user_data; state *s = fsd->state; GtkFileSelection *selector = fsd->widget; /*GtkWidget *top = s->toplevel_widget;*/ saver_preferences *p = &s->prefs; const char *path = gtk_file_selection_get_filename (selector); if (p->text_program && !strcmp(p->text_program, path)) return; /* no change */ # if 0 if (!file_p (path)) { char b[255]; sprintf (b, _("Error:\n\n" "File does not exist: \"%s\"\n"), path); warning_dialog (GTK_WIDGET (top), b, D_NONE, 100); return; } # endif if (p->text_program) free (p->text_program); p->text_program = normalize_directory (path); gtk_entry_set_text (GTK_ENTRY (name_to_widget (s, "text_program_entry")), (p->text_program ? p->text_program : "")); demo_write_init_file (s, p); } static void browse_image_dir_cancel (GtkWidget *button, gpointer user_data) { file_selection_data *fsd = (file_selection_data *) user_data; gtk_widget_hide (GTK_WIDGET (fsd->widget)); } static void browse_image_dir_ok (GtkWidget *button, gpointer user_data) { browse_image_dir_cancel (button, user_data); store_image_directory (button, user_data); } static void browse_text_file_ok (GtkWidget *button, gpointer user_data) { browse_image_dir_cancel (button, user_data); store_text_file (button, user_data); } static void browse_text_program_ok (GtkWidget *button, gpointer user_data) { browse_image_dir_cancel (button, user_data); store_text_program (button, user_data); } static void browse_image_dir_close (GtkWidget *widget, GdkEvent *event, gpointer user_data) { browse_image_dir_cancel (widget, user_data); } G_MODULE_EXPORT void browse_image_dir_cb (GtkButton *button, gpointer user_data) { state *s = global_state_kludge; /* I hate C so much... */ saver_preferences *p = &s->prefs; static file_selection_data *fsd = 0; GtkFileSelection *selector = GTK_FILE_SELECTION( gtk_file_selection_new ("Please select the image directory.")); if (!fsd) fsd = (file_selection_data *) malloc (sizeof (*fsd)); fsd->widget = selector; fsd->state = s; if (p->image_directory && *p->image_directory) gtk_file_selection_set_filename (selector, p->image_directory); gtk_signal_connect (GTK_OBJECT (selector->ok_button), "clicked", GTK_SIGNAL_FUNC (browse_image_dir_ok), (gpointer *) fsd); gtk_signal_connect (GTK_OBJECT (selector->cancel_button), "clicked", GTK_SIGNAL_FUNC (browse_image_dir_cancel), (gpointer *) fsd); gtk_signal_connect (GTK_OBJECT (selector), "delete_event", GTK_SIGNAL_FUNC (browse_image_dir_close), (gpointer *) fsd); gtk_widget_set_sensitive (GTK_WIDGET (selector->file_list), False); gtk_window_set_modal (GTK_WINDOW (selector), True); gtk_widget_show (GTK_WIDGET (selector)); } G_MODULE_EXPORT void browse_text_file_cb (GtkButton *button, gpointer user_data) { state *s = global_state_kludge; /* I hate C so much... */ saver_preferences *p = &s->prefs; static file_selection_data *fsd = 0; GtkFileSelection *selector = GTK_FILE_SELECTION( gtk_file_selection_new ("Please select a text file.")); if (!fsd) fsd = (file_selection_data *) malloc (sizeof (*fsd)); fsd->widget = selector; fsd->state = s; if (p->text_file && *p->text_file) gtk_file_selection_set_filename (selector, p->text_file); gtk_signal_connect (GTK_OBJECT (selector->ok_button), "clicked", GTK_SIGNAL_FUNC (browse_text_file_ok), (gpointer *) fsd); gtk_signal_connect (GTK_OBJECT (selector->cancel_button), "clicked", GTK_SIGNAL_FUNC (browse_image_dir_cancel), (gpointer *) fsd); gtk_signal_connect (GTK_OBJECT (selector), "delete_event", GTK_SIGNAL_FUNC (browse_image_dir_close), (gpointer *) fsd); gtk_window_set_modal (GTK_WINDOW (selector), True); gtk_widget_show (GTK_WIDGET (selector)); } G_MODULE_EXPORT void browse_text_program_cb (GtkButton *button, gpointer user_data) { state *s = global_state_kludge; /* I hate C so much... */ saver_preferences *p = &s->prefs; static file_selection_data *fsd = 0; GtkFileSelection *selector = GTK_FILE_SELECTION( gtk_file_selection_new ("Please select a text-generating program.")); if (!fsd) fsd = (file_selection_data *) malloc (sizeof (*fsd)); fsd->widget = selector; fsd->state = s; if (p->text_program && *p->text_program) gtk_file_selection_set_filename (selector, p->text_program); gtk_signal_connect (GTK_OBJECT (selector->ok_button), "clicked", GTK_SIGNAL_FUNC (browse_text_program_ok), (gpointer *) fsd); gtk_signal_connect (GTK_OBJECT (selector->cancel_button), "clicked", GTK_SIGNAL_FUNC (browse_image_dir_cancel), (gpointer *) fsd); gtk_signal_connect (GTK_OBJECT (selector), "delete_event", GTK_SIGNAL_FUNC (browse_image_dir_close), (gpointer *) fsd); gtk_window_set_modal (GTK_WINDOW (selector), True); gtk_widget_show (GTK_WIDGET (selector)); } G_MODULE_EXPORT void settings_cb (GtkButton *button, gpointer user_data) { state *s = global_state_kludge; /* I hate C so much... */ int list_elt = selected_list_element (s); populate_demo_window (s, list_elt); /* reset the widget */ populate_popup_window (s); /* create UI on popup window */ gtk_widget_show (s->popup_widget); } static void settings_sync_cmd_text (state *s) { # ifdef HAVE_XML GtkWidget *cmd = GTK_WIDGET (name_to_widget (s, "cmd_text")); char *cmd_line = get_configurator_command_line (s->cdata, False); gtk_entry_set_text (GTK_ENTRY (cmd), cmd_line); gtk_entry_set_position (GTK_ENTRY (cmd), strlen (cmd_line)); free (cmd_line); # endif /* HAVE_XML */ } G_MODULE_EXPORT void settings_adv_cb (GtkButton *button, gpointer user_data) { state *s = global_state_kludge; /* I hate C so much... */ GtkNotebook *notebook = GTK_NOTEBOOK (name_to_widget (s, "opt_notebook")); settings_sync_cmd_text (s); gtk_notebook_set_page (notebook, 1); } G_MODULE_EXPORT void settings_std_cb (GtkButton *button, gpointer user_data) { state *s = global_state_kludge; /* I hate C so much... */ GtkNotebook *notebook = GTK_NOTEBOOK (name_to_widget (s, "opt_notebook")); /* Re-create UI to reflect the in-progress command-line settings. */ populate_popup_window (s); gtk_notebook_set_page (notebook, 0); } G_MODULE_EXPORT void settings_reset_cb (GtkButton *button, gpointer user_data) { # ifdef HAVE_XML state *s = global_state_kludge; /* I hate C so much... */ GtkWidget *cmd = GTK_WIDGET (name_to_widget (s, "cmd_text")); char *cmd_line = get_configurator_command_line (s->cdata, True); gtk_entry_set_text (GTK_ENTRY (cmd), cmd_line); gtk_entry_set_position (GTK_ENTRY (cmd), strlen (cmd_line)); free (cmd_line); populate_popup_window (s); # endif /* HAVE_XML */ } G_MODULE_EXPORT void settings_switch_page_cb (GtkNotebook *notebook, GtkNotebookPage *page, gint page_num, gpointer user_data) { state *s = global_state_kludge; /* I hate C so much... */ GtkWidget *adv = name_to_widget (s, "adv_button"); GtkWidget *std = name_to_widget (s, "std_button"); if (page_num == 0) { gtk_widget_show (adv); gtk_widget_hide (std); } else if (page_num == 1) { gtk_widget_hide (adv); gtk_widget_show (std); } else abort(); } G_MODULE_EXPORT void settings_cancel_cb (GtkButton *button, gpointer user_data) { state *s = global_state_kludge; /* I hate C so much... */ gtk_widget_hide (s->popup_widget); } G_MODULE_EXPORT void settings_ok_cb (GtkButton *button, gpointer user_data) { state *s = global_state_kludge; /* I hate C so much... */ GtkNotebook *notebook = GTK_NOTEBOOK (name_to_widget (s, "opt_notebook")); int page = gtk_notebook_get_current_page (notebook); if (page == 0) /* Regenerate the command-line from the widget contents before saving. But don't do this if we're looking at the command-line page already, or we will blow away what they typed... */ settings_sync_cmd_text (s); flush_popup_changes_and_save (s); gtk_widget_hide (s->popup_widget); } static gboolean wm_popup_close_cb (GtkWidget *widget, GdkEvent *event, gpointer data) { state *s = (state *) data; settings_cancel_cb (0, (gpointer) s); return TRUE; } /* Populating the various widgets */ /* Returns the number of the last hack run by the server. */ static int server_current_hack (void) { Atom type; int format; unsigned long nitems, bytesafter; unsigned char *dataP = 0; Display *dpy = GDK_DISPLAY(); int hack_number = -1; if (XGetWindowProperty (dpy, RootWindow (dpy, 0), /* always screen #0 */ XA_SCREENSAVER_STATUS, 0, 3, False, XA_INTEGER, &type, &format, &nitems, &bytesafter, &dataP) == Success && type == XA_INTEGER && nitems >= 3 && dataP) { PROP32 *data = (PROP32 *) dataP; hack_number = (int) data[2] - 1; } if (dataP) XFree (dataP); return hack_number; } /* Finds the number of the last hack that was run, and makes that item be selected by default. */ static void scroll_to_current_hack (state *s) { saver_preferences *p = &s->prefs; int hack_number = -1; if (p->mode == ONE_HACK) /* in "one" mode, use the one */ hack_number = p->selected_hack; if (hack_number < 0) /* otherwise, use the last-run */ hack_number = server_current_hack (); if (hack_number < 0) /* failing that, last "one mode" */ hack_number = p->selected_hack; if (hack_number < 0) /* failing that, newest hack. */ { /* We should only get here if the user does not have a .xscreensaver file, and the screen has not been blanked with a hack since X started up: in other words, this is probably a fresh install. Instead of just defaulting to hack #0 (in either "programs" or "alphabetical" order) let's try to default to the last runnable hack in the "programs" list: this is probably the hack that was most recently added to the xscreensaver distribution (and so it's probably the currently-coolest one!) */ hack_number = p->screenhacks_count-1; while (hack_number > 0 && ! (s->hacks_available_p[hack_number] && p->screenhacks[hack_number]->enabled_p)) hack_number--; } if (hack_number >= 0 && hack_number < p->screenhacks_count) { int list_elt = s->hack_number_to_list_elt[hack_number]; GtkWidget *list = name_to_widget (s, "list"); force_list_select_item (s, list, list_elt, True); populate_demo_window (s, list_elt); } } static void populate_hack_list (state *s) { Display *dpy = GDK_DISPLAY(); #ifdef HAVE_GTK2 saver_preferences *p = &s->prefs; GtkTreeView *list = GTK_TREE_VIEW (name_to_widget (s, "list")); GtkListStore *model; GtkTreeSelection *selection; GtkCellRenderer *ren; GtkTreeIter iter; int i; g_object_get (G_OBJECT (list), "model", &model, NULL); if (!model) { model = gtk_list_store_new (COL_LAST, G_TYPE_BOOLEAN, G_TYPE_STRING); g_object_set (G_OBJECT (list), "model", model, NULL); g_object_unref (model); ren = gtk_cell_renderer_toggle_new (); gtk_tree_view_insert_column_with_attributes (list, COL_ENABLED, _("Use"), ren, "active", COL_ENABLED, NULL); g_signal_connect (ren, "toggled", G_CALLBACK (list_checkbox_cb), s); ren = gtk_cell_renderer_text_new (); gtk_tree_view_insert_column_with_attributes (list, COL_NAME, _("Screen Saver"), ren, "markup", COL_NAME, NULL); g_signal_connect_after (list, "row_activated", G_CALLBACK (list_activated_cb), s); selection = gtk_tree_view_get_selection (list); g_signal_connect (selection, "changed", G_CALLBACK (list_select_changed_cb), s); } for (i = 0; i < s->list_count; i++) { int hack_number = s->list_elt_to_hack_number[i]; screenhack *hack = (hack_number < 0 ? 0 : p->screenhacks[hack_number]); char *pretty_name; Bool available_p = (hack && s->hacks_available_p [hack_number]); if (!hack) continue; /* If we're to suppress uninstalled hacks, check $PATH now. */ if (p->ignore_uninstalled_p && !available_p) continue; pretty_name = (hack->name ? strdup (hack->name) : make_hack_name (dpy, hack->command)); if (!available_p) { /* Make the text foreground be the color of insensitive widgets (but don't actually make it be insensitive, since we still want to be able to click on it.) */ GtkStyle *style = gtk_widget_get_style (GTK_WIDGET (list)); GdkColor *fg = &style->fg[GTK_STATE_INSENSITIVE]; /* GdkColor *bg = &style->bg[GTK_STATE_INSENSITIVE]; */ char *buf = (char *) malloc (strlen (pretty_name) + 100); sprintf (buf, "%s", fg->red >> 8, fg->green >> 8, fg->blue >> 8, /* bg->red >> 8, bg->green >> 8, bg->blue >> 8, */ pretty_name); free (pretty_name); pretty_name = buf; } gtk_list_store_append (model, &iter); gtk_list_store_set (model, &iter, COL_ENABLED, hack->enabled_p, COL_NAME, pretty_name, -1); free (pretty_name); } #else /* !HAVE_GTK2 */ saver_preferences *p = &s->prefs; GtkList *list = GTK_LIST (name_to_widget (s, "list")); int i; for (i = 0; i < s->list_count; i++) { int hack_number = s->list_elt_to_hack_number[i]; screenhack *hack = (hack_number < 0 ? 0 : p->screenhacks[hack_number]); /* A GtkList must contain only GtkListItems, but those can contain an arbitrary widget. We add an Hbox, and inside that, a Checkbox and a Label. We handle single and double click events on the line itself, for clicking on the text, but the interior checkbox also handles its own events. */ GtkWidget *line; GtkWidget *line_hbox; GtkWidget *line_check; GtkWidget *line_label; char *pretty_name; Bool available_p = (hack && s->hacks_available_p [hack_number]); if (!hack) continue; /* If we're to suppress uninstalled hacks, check $PATH now. */ if (p->ignore_uninstalled_p && !available_p) continue; pretty_name = (hack->name ? strdup (hack->name) : make_hack_name (hack->command)); line = gtk_list_item_new (); line_hbox = gtk_hbox_new (FALSE, 0); line_check = gtk_check_button_new (); line_label = gtk_label_new (pretty_name); gtk_container_add (GTK_CONTAINER (line), line_hbox); gtk_box_pack_start (GTK_BOX (line_hbox), line_check, FALSE, FALSE, 0); gtk_box_pack_start (GTK_BOX (line_hbox), line_label, FALSE, FALSE, 0); gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (line_check), hack->enabled_p); gtk_label_set_justify (GTK_LABEL (line_label), GTK_JUSTIFY_LEFT); gtk_widget_show (line_check); gtk_widget_show (line_label); gtk_widget_show (line_hbox); gtk_widget_show (line); free (pretty_name); gtk_container_add (GTK_CONTAINER (list), line); gtk_signal_connect (GTK_OBJECT (line), "button_press_event", GTK_SIGNAL_FUNC (list_doubleclick_cb), (gpointer) s); gtk_signal_connect (GTK_OBJECT (line_check), "toggled", GTK_SIGNAL_FUNC (list_checkbox_cb), (gpointer) s); gtk_widget_show (line); if (!available_p) { /* Make the widget be colored like insensitive widgets (but don't actually make it be insensitive, since we still want to be able to click on it.) */ GtkRcStyle *rc_style; GdkColor fg, bg; gtk_widget_realize (GTK_WIDGET (line_label)); fg = GTK_WIDGET (line_label)->style->fg[GTK_STATE_INSENSITIVE]; bg = GTK_WIDGET (line_label)->style->bg[GTK_STATE_INSENSITIVE]; rc_style = gtk_rc_style_new (); rc_style->fg[GTK_STATE_NORMAL] = fg; rc_style->bg[GTK_STATE_NORMAL] = bg; rc_style->color_flags[GTK_STATE_NORMAL] |= GTK_RC_FG|GTK_RC_BG; gtk_widget_modify_style (GTK_WIDGET (line_label), rc_style); gtk_rc_style_unref (rc_style); } } gtk_signal_connect (GTK_OBJECT (list), "select_child", GTK_SIGNAL_FUNC (list_select_cb), (gpointer) s); gtk_signal_connect (GTK_OBJECT (list), "unselect_child", GTK_SIGNAL_FUNC (list_unselect_cb), (gpointer) s); #endif /* !HAVE_GTK2 */ } static void update_list_sensitivity (state *s) { saver_preferences *p = &s->prefs; Bool sensitive = (p->mode == RANDOM_HACKS || p->mode == RANDOM_HACKS_SAME || p->mode == ONE_HACK); Bool checkable = (p->mode == RANDOM_HACKS || p->mode == RANDOM_HACKS_SAME); Bool blankable = (p->mode != DONT_BLANK); #ifndef HAVE_GTK2 GtkWidget *head = name_to_widget (s, "col_head_hbox"); GtkWidget *use = name_to_widget (s, "use_col_frame"); #endif /* HAVE_GTK2 */ GtkWidget *scroller = name_to_widget (s, "scroller"); GtkWidget *buttons = name_to_widget (s, "next_prev_hbox"); GtkWidget *blanker = name_to_widget (s, "blanking_table"); #ifdef HAVE_GTK2 GtkTreeView *list = GTK_TREE_VIEW (name_to_widget (s, "list")); GtkTreeViewColumn *use = gtk_tree_view_get_column (list, COL_ENABLED); #else /* !HAVE_GTK2 */ GtkList *list = GTK_LIST (name_to_widget (s, "list")); GList *kids = gtk_container_children (GTK_CONTAINER (list)); gtk_widget_set_sensitive (GTK_WIDGET (head), sensitive); #endif /* !HAVE_GTK2 */ gtk_widget_set_sensitive (GTK_WIDGET (scroller), sensitive); gtk_widget_set_sensitive (GTK_WIDGET (buttons), sensitive); gtk_widget_set_sensitive (GTK_WIDGET (blanker), blankable); #ifdef HAVE_GTK2 gtk_tree_view_column_set_visible (use, checkable); #else /* !HAVE_GTK2 */ if (checkable) gtk_widget_show (use); /* the "Use" column header */ else gtk_widget_hide (use); while (kids) { GtkBin *line = GTK_BIN (kids->data); GtkContainer *line_hbox = GTK_CONTAINER (line->child); GtkWidget *line_check = GTK_WIDGET (gtk_container_children (line_hbox)->data); if (checkable) gtk_widget_show (line_check); else gtk_widget_hide (line_check); kids = kids->next; } #endif /* !HAVE_GTK2 */ } static void populate_prefs_page (state *s) { saver_preferences *p = &s->prefs; Bool can_lock_p = True; /* Disable all the "lock" controls if locking support was not provided at compile-time, or if running on MacOS. */ # if defined(NO_LOCKING) || defined(__APPLE__) can_lock_p = False; # endif /* If there is only one screen, the mode menu contains "random" but not "random-same". */ if (s->nscreens <= 1 && p->mode == RANDOM_HACKS_SAME) p->mode = RANDOM_HACKS; /* The file supports timeouts of less than a minute, but the GUI does not, so throttle the values to be at least one minute (since "0" is a bad rounding choice...) */ # define THROTTLE(NAME) if (p->NAME != 0 && p->NAME < 60000) p->NAME = 60000 THROTTLE (timeout); THROTTLE (cycle); /* THROTTLE (passwd_timeout); */ /* GUI doesn't set this; leave it alone */ # undef THROTTLE # define FMT_MINUTES(NAME,N) \ gtk_spin_button_set_value (GTK_SPIN_BUTTON (name_to_widget (s, (NAME))), (double)((N) + 59) / (60 * 1000)) # define FMT_SECONDS(NAME,N) \ gtk_spin_button_set_value (GTK_SPIN_BUTTON (name_to_widget (s, (NAME))), (double)((N) / 1000)) FMT_MINUTES ("timeout_spinbutton", p->timeout); FMT_MINUTES ("cycle_spinbutton", p->cycle); FMT_MINUTES ("lock_spinbutton", p->lock_timeout); FMT_MINUTES ("dpms_standby_spinbutton", p->dpms_standby); FMT_MINUTES ("dpms_suspend_spinbutton", p->dpms_suspend); FMT_MINUTES ("dpms_off_spinbutton", p->dpms_off); FMT_SECONDS ("fade_spinbutton", p->fade_seconds); # undef FMT_MINUTES # undef FMT_SECONDS # define TOGGLE_ACTIVE(NAME,ACTIVEP) \ gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (name_to_widget (s,(NAME))),\ (ACTIVEP)) TOGGLE_ACTIVE ("lock_button", p->lock_p); #if 0 TOGGLE_ACTIVE ("verbose_button", p->verbose_p); TOGGLE_ACTIVE ("capture_button", p->capture_stderr_p); TOGGLE_ACTIVE ("splash_button", p->splash_p); #endif TOGGLE_ACTIVE ("dpms_button", p->dpms_enabled_p); TOGGLE_ACTIVE ("dpms_quickoff_button", p->dpms_quickoff_p); TOGGLE_ACTIVE ("grab_desk_button", p->grab_desktop_p); TOGGLE_ACTIVE ("grab_video_button", p->grab_video_p); TOGGLE_ACTIVE ("grab_image_button", p->random_image_p); TOGGLE_ACTIVE ("install_button", p->install_cmap_p); TOGGLE_ACTIVE ("fade_button", p->fade_p); TOGGLE_ACTIVE ("unfade_button", p->unfade_p); switch (p->tmode) { case TEXT_LITERAL: TOGGLE_ACTIVE ("text_radio", True); break; case TEXT_FILE: TOGGLE_ACTIVE ("text_file_radio", True); break; case TEXT_PROGRAM: TOGGLE_ACTIVE ("text_program_radio", True); break; case TEXT_URL: TOGGLE_ACTIVE ("text_url_radio", True); break; default: TOGGLE_ACTIVE ("text_host_radio", True); break; } # undef TOGGLE_ACTIVE gtk_entry_set_text (GTK_ENTRY (name_to_widget (s, "image_text")), (p->image_directory ? p->image_directory : "")); gtk_widget_set_sensitive (name_to_widget (s, "image_text"), p->random_image_p); gtk_widget_set_sensitive (name_to_widget (s, "image_browse_button"), p->random_image_p); gtk_entry_set_text (GTK_ENTRY (name_to_widget (s, "text_entry")), (p->text_literal ? p->text_literal : "")); gtk_entry_set_text (GTK_ENTRY (name_to_widget (s, "text_file_entry")), (p->text_file ? p->text_file : "")); gtk_entry_set_text (GTK_ENTRY (name_to_widget (s, "text_program_entry")), (p->text_program ? p->text_program : "")); gtk_entry_set_text (GTK_ENTRY (name_to_widget (s, "text_url_entry")), (p->text_url ? p->text_url : "")); gtk_widget_set_sensitive (name_to_widget (s, "text_entry"), p->tmode == TEXT_LITERAL); gtk_widget_set_sensitive (name_to_widget (s, "text_file_entry"), p->tmode == TEXT_FILE); gtk_widget_set_sensitive (name_to_widget (s, "text_file_browse"), p->tmode == TEXT_FILE); gtk_widget_set_sensitive (name_to_widget (s, "text_program_entry"), p->tmode == TEXT_PROGRAM); gtk_widget_set_sensitive (name_to_widget (s, "text_program_browse"), p->tmode == TEXT_PROGRAM); gtk_widget_set_sensitive (name_to_widget (s, "text_url_entry"), p->tmode == TEXT_URL); /* Map the `saver_mode' enum to mode menu to values. */ { GtkOptionMenu *opt = GTK_OPTION_MENU (name_to_widget (s, "mode_menu")); int i; for (i = 0; i < countof(mode_menu_order); i++) if (mode_menu_order[i] == p->mode) break; gtk_option_menu_set_history (opt, i); update_list_sensitivity (s); } { Bool found_any_writable_cells = False; Bool fading_possible = False; Bool dpms_supported = False; Display *dpy = GDK_DISPLAY(); int nscreens = ScreenCount(dpy); /* real screens, not Xinerama */ int i; for (i = 0; i < nscreens; i++) { Screen *s = ScreenOfDisplay (dpy, i); if (has_writable_cells (s, DefaultVisualOfScreen (s))) { found_any_writable_cells = True; break; } } fading_possible = found_any_writable_cells; #ifdef HAVE_XF86VMODE_GAMMA fading_possible = True; #endif #ifdef HAVE_DPMS_EXTENSION { int op = 0, event = 0, error = 0; if (XQueryExtension (dpy, "DPMS", &op, &event, &error)) dpms_supported = True; } #endif /* HAVE_DPMS_EXTENSION */ # define SENSITIZE(NAME,SENSITIVEP) \ gtk_widget_set_sensitive (name_to_widget (s, (NAME)), (SENSITIVEP)) /* Blanking and Locking */ SENSITIZE ("lock_button", can_lock_p); SENSITIZE ("lock_spinbutton", can_lock_p && p->lock_p); SENSITIZE ("lock_mlabel", can_lock_p && p->lock_p); /* DPMS */ dpms_supported=1; SENSITIZE ("dpms_frame", dpms_supported); SENSITIZE ("dpms_button", dpms_supported); SENSITIZE ("dpms_quickoff_button", dpms_supported); SENSITIZE ("dpms_standby_label", dpms_supported && p->dpms_enabled_p); SENSITIZE ("dpms_standby_mlabel", dpms_supported && p->dpms_enabled_p); SENSITIZE ("dpms_standby_spinbutton", dpms_supported && p->dpms_enabled_p); SENSITIZE ("dpms_suspend_label", dpms_supported && p->dpms_enabled_p); SENSITIZE ("dpms_suspend_mlabel", dpms_supported && p->dpms_enabled_p); SENSITIZE ("dpms_suspend_spinbutton", dpms_supported && p->dpms_enabled_p); SENSITIZE ("dpms_off_label", dpms_supported && p->dpms_enabled_p); SENSITIZE ("dpms_off_mlabel", dpms_supported && p->dpms_enabled_p); SENSITIZE ("dpms_off_spinbutton", dpms_supported && p->dpms_enabled_p); /* Colormaps */ SENSITIZE ("cmap_frame", found_any_writable_cells || fading_possible); SENSITIZE ("install_button", found_any_writable_cells); SENSITIZE ("fade_button", fading_possible); SENSITIZE ("unfade_button", fading_possible); SENSITIZE ("fade_label", (fading_possible && (p->fade_p || p->unfade_p))); SENSITIZE ("fade_spinbutton", (fading_possible && (p->fade_p || p->unfade_p))); # undef SENSITIZE } } static void populate_popup_window (state *s) { GtkLabel *doc = GTK_LABEL (name_to_widget (s, "doc")); char *doc_string = 0; /* #### not in Gtk 1.2 gtk_label_set_selectable (doc); */ # ifdef HAVE_XML if (s->cdata) { free_conf_data (s->cdata); s->cdata = 0; } { saver_preferences *p = &s->prefs; int list_elt = selected_list_element (s); int hack_number = (list_elt >= 0 && list_elt < s->list_count ? s->list_elt_to_hack_number[list_elt] : -1); screenhack *hack = (hack_number >= 0 ? p->screenhacks[hack_number] : 0); if (hack) { GtkWidget *parent = name_to_widget (s, "settings_vbox"); GtkWidget *cmd = GTK_WIDGET (name_to_widget (s, "cmd_text")); const char *cmd_line = gtk_entry_get_text (GTK_ENTRY (cmd)); s->cdata = load_configurator (cmd_line, s->debug_p); if (s->cdata && s->cdata->widget) gtk_box_pack_start (GTK_BOX (parent), s->cdata->widget, TRUE, TRUE, 0); } } doc_string = (s->cdata ? s->cdata->description : 0); # else /* !HAVE_XML */ doc_string = _("Descriptions not available: no XML support compiled in."); # endif /* !HAVE_XML */ gtk_label_set_text (doc, (doc_string ? _(doc_string) : _("No description available."))); } static void sensitize_demo_widgets (state *s, Bool sensitive_p) { const char *names[] = { "demo", "settings", "cmd_label", "cmd_text", "manual", "visual", "visual_combo" }; int i; for (i = 0; i < countof(names); i++) { GtkWidget *w = name_to_widget (s, names[i]); gtk_widget_set_sensitive (GTK_WIDGET(w), sensitive_p); } } static void sensitize_menu_items (state *s, Bool force_p) { static Bool running_p = False; static time_t last_checked = 0; time_t now = time ((time_t *) 0); const char *names[] = { "activate_menu", "lock_menu", "kill_menu", /* "demo" */ }; int i; if (force_p || now > last_checked + 10) /* check every 10 seconds */ { running_p = xscreensaver_running_p (s); last_checked = time ((time_t *) 0); } for (i = 0; i < countof(names); i++) { GtkWidget *w = name_to_widget (s, names[i]); gtk_widget_set_sensitive (GTK_WIDGET(w), running_p); } } /* When the File menu is de-posted after a "Restart Daemon" command, the window underneath doesn't repaint for some reason. I guess this is a bug in exposure handling in GTK or GDK. This works around it. */ static void force_dialog_repaint (state *s) { #if 1 /* Tell GDK to invalidate and repaint the whole window. */ GdkWindow *w = GET_WINDOW (s->toplevel_widget); GdkRegion *region = gdk_region_new (); GdkRectangle rect; rect.x = rect.y = 0; rect.width = rect.height = 32767; gdk_region_union_with_rect (region, &rect); gdk_window_invalidate_region (w, region, True); gdk_region_destroy (region); gdk_window_process_updates (w, True); #else /* Force the server to send an exposure event by creating and then destroying a window as a child of the top level shell. */ Display *dpy = GDK_DISPLAY(); Window parent = GDK_WINDOW_XWINDOW (s->toplevel_widget->window); Window w; XWindowAttributes xgwa; XGetWindowAttributes (dpy, parent, &xgwa); w = XCreateSimpleWindow (dpy, parent, 0, 0, xgwa.width, xgwa.height, 0,0,0); XMapRaised (dpy, w); XDestroyWindow (dpy, w); XSync (dpy, False); #endif } /* Even though we've given these text fields a maximum number of characters, their default size is still about 30 characters wide -- so measure out a string in their font, and resize them to just fit that. */ static void fix_text_entry_sizes (state *s) { GtkWidget *w; # if 0 /* appears no longer necessary with Gtk 1.2.10 */ const char * const spinbuttons[] = { "timeout_spinbutton", "cycle_spinbutton", "lock_spinbutton", "dpms_standby_spinbutton", "dpms_suspend_spinbutton", "dpms_off_spinbutton", "-fade_spinbutton" }; int i; int width = 0; for (i = 0; i < countof(spinbuttons); i++) { const char *n = spinbuttons[i]; int cols = 4; while (*n == '-') n++, cols--; w = GTK_WIDGET (name_to_widget (s, n)); width = gdk_text_width (w->style->font, "MMMMMMMM", cols); gtk_widget_set_usize (w, width, -2); } /* Now fix the width of the combo box. */ w = GTK_WIDGET (name_to_widget (s, "visual_combo")); w = GTK_COMBO (w)->entry; width = gdk_string_width (w->style->font, "PseudoColor___"); gtk_widget_set_usize (w, width, -2); /* Now fix the width of the file entry text. */ w = GTK_WIDGET (name_to_widget (s, "image_text")); width = gdk_string_width (w->style->font, "mmmmmmmmmmmmmm"); gtk_widget_set_usize (w, width, -2); /* Now fix the width of the command line text. */ w = GTK_WIDGET (name_to_widget (s, "cmd_text")); width = gdk_string_width (w->style->font, "mmmmmmmmmmmmmmmmmmmm"); gtk_widget_set_usize (w, width, -2); # endif /* 0 */ /* Now fix the height of the list widget: make it default to being around 10 text-lines high instead of 4. */ w = GTK_WIDGET (name_to_widget (s, "list")); { int lines = 10; int height; int leading = 3; /* approximate is ok... */ int border = 2; #ifdef HAVE_GTK2 PangoFontMetrics *pain = pango_context_get_metrics (gtk_widget_get_pango_context (w), gtk_widget_get_style (w)->font_desc, gtk_get_default_language ()); height = PANGO_PIXELS (pango_font_metrics_get_ascent (pain) + pango_font_metrics_get_descent (pain)); #else /* !HAVE_GTK2 */ height = w->style->font->ascent + w->style->font->descent; #endif /* !HAVE_GTK2 */ height += leading; height *= lines; height += border * 2; w = GTK_WIDGET (name_to_widget (s, "scroller")); gtk_widget_set_usize (w, -2, height); } } #ifndef HAVE_GTK2 /* Pixmaps for the up and down arrow buttons (yeah, this is sleazy...) */ static char *up_arrow_xpm[] = { "15 15 4 1", " c None", "- c #FFFFFF", "+ c #D6D6D6", "@ c #000000", " @ ", " @ ", " -+@ ", " -+@ ", " -+++@ ", " -+++@ ", " -+++++@ ", " -+++++@ ", " -+++++++@ ", " -+++++++@ ", " -+++++++++@ ", " -+++++++++@ ", " -+++++++++++@ ", " @@@@@@@@@@@@@ ", " ", /* Need these here because gdk_pixmap_create_from_xpm_d() walks off the end of the array (Gtk 1.2.5.) */ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000", "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000" }; static char *down_arrow_xpm[] = { "15 15 4 1", " c None", "- c #FFFFFF", "+ c #D6D6D6", "@ c #000000", " ", " ------------- ", " -+++++++++++@ ", " -+++++++++@ ", " -+++++++++@ ", " -+++++++@ ", " -+++++++@ ", " -+++++@ ", " -+++++@ ", " -+++@ ", " -+++@ ", " -+@ ", " -+@ ", " @ ", " @ ", /* Need these here because gdk_pixmap_create_from_xpm_d() walks off the end of the array (Gtk 1.2.5.) */ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000", "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000" }; static void pixmapify_button (state *s, int down_p) { GdkPixmap *pixmap; GdkBitmap *mask; GtkWidget *pixmapwid; GtkStyle *style; GtkWidget *w; w = GTK_WIDGET (name_to_widget (s, (down_p ? "next" : "prev"))); style = gtk_widget_get_style (w); mask = 0; pixmap = gdk_pixmap_create_from_xpm_d (w->window, &mask, &style->bg[GTK_STATE_NORMAL], (down_p ? (gchar **) down_arrow_xpm : (gchar **) up_arrow_xpm)); pixmapwid = gtk_pixmap_new (pixmap, mask); gtk_widget_show (pixmapwid); gtk_container_remove (GTK_CONTAINER (w), GTK_BIN (w)->child); gtk_container_add (GTK_CONTAINER (w), pixmapwid); } static void map_next_button_cb (GtkWidget *w, gpointer user_data) { state *s = (state *) user_data; pixmapify_button (s, 1); } static void map_prev_button_cb (GtkWidget *w, gpointer user_data) { state *s = (state *) user_data; pixmapify_button (s, 0); } #endif /* !HAVE_GTK2 */ #ifndef HAVE_GTK2 /* Work around a Gtk bug that causes label widgets to wrap text too early. */ static void you_are_not_a_unique_or_beautiful_snowflake (GtkWidget *label, GtkAllocation *allocation, void *foo) { GtkRequisition req; GtkWidgetAuxInfo *aux_info; aux_info = gtk_object_get_data (GTK_OBJECT (label), "gtk-aux-info"); aux_info->width = allocation->width; aux_info->height = -2; aux_info->x = -1; aux_info->y = -1; gtk_widget_size_request (label, &req); } /* Feel the love. Thanks to Nat Friedman for finding this workaround. */ static void eschew_gtk_lossage (GtkLabel *label) { GtkWidgetAuxInfo *aux_info = g_new0 (GtkWidgetAuxInfo, 1); aux_info->width = GTK_WIDGET (label)->allocation.width; aux_info->height = -2; aux_info->x = -1; aux_info->y = -1; gtk_object_set_data (GTK_OBJECT (label), "gtk-aux-info", aux_info); gtk_signal_connect (GTK_OBJECT (label), "size_allocate", GTK_SIGNAL_FUNC (you_are_not_a_unique_or_beautiful_snowflake), 0); gtk_widget_set_usize (GTK_WIDGET (label), -2, -2); gtk_widget_queue_resize (GTK_WIDGET (label)); } #endif /* !HAVE_GTK2 */ static void populate_demo_window (state *s, int list_elt) { Display *dpy = GDK_DISPLAY(); saver_preferences *p = &s->prefs; screenhack *hack; char *pretty_name; GtkFrame *frame1 = GTK_FRAME (name_to_widget (s, "preview_frame")); GtkFrame *frame2 = GTK_FRAME (name_to_widget (s, "opt_frame")); GtkEntry *cmd = GTK_ENTRY (name_to_widget (s, "cmd_text")); GtkCombo *vis = GTK_COMBO (name_to_widget (s, "visual_combo")); GtkWidget *list = GTK_WIDGET (name_to_widget (s, "list")); if (p->mode == BLANK_ONLY) { hack = 0; pretty_name = strdup (_("Blank Screen")); schedule_preview (s, 0); } else if (p->mode == DONT_BLANK) { hack = 0; pretty_name = strdup (_("Screen Saver Disabled")); schedule_preview (s, 0); } else { int hack_number = (list_elt >= 0 && list_elt < s->list_count ? s->list_elt_to_hack_number[list_elt] : -1); hack = (hack_number >= 0 ? p->screenhacks[hack_number] : 0); pretty_name = (hack ? (hack->name ? strdup (hack->name) : make_hack_name (dpy, hack->command)) : 0); if (hack) schedule_preview (s, hack->command); else schedule_preview (s, 0); } if (!pretty_name) pretty_name = strdup (_("Preview")); gtk_frame_set_label (frame1, _(pretty_name)); gtk_frame_set_label (frame2, _(pretty_name)); gtk_entry_set_text (cmd, (hack ? hack->command : "")); gtk_entry_set_position (cmd, 0); { char title[255]; sprintf (title, _("%s: %.100s Settings"), progclass, (pretty_name ? pretty_name : "???")); gtk_window_set_title (GTK_WINDOW (s->popup_widget), title); } gtk_entry_set_text (GTK_ENTRY (GTK_COMBO (vis)->entry), (hack ? (hack->visual && *hack->visual ? hack->visual : _("Any")) : "")); sensitize_demo_widgets (s, (hack ? True : False)); if (pretty_name) free (pretty_name); ensure_selected_item_visible (list); s->_selected_list_element = list_elt; } static void widget_deleter (GtkWidget *widget, gpointer data) { /* #### Well, I want to destroy these widgets, but if I do that, they get referenced again, and eventually I get a SEGV. So instead of destroying them, I'll just hide them, and leak a bunch of memory every time the disk file changes. Go go go Gtk! #### Ok, that's a lie, I get a crash even if I just hide the widget and don't ever delete it. Fuck! */ #if 0 gtk_widget_destroy (widget); #else gtk_widget_hide (widget); #endif } static char **sort_hack_cmp_names_kludge; static int sort_hack_cmp (const void *a, const void *b) { if (a == b) return 0; else { int aa = *(int *) a; int bb = *(int *) b; const char last[] = "\377\377\377\377\377\377\377\377\377\377\377"; return strcmp ((aa < 0 ? last : sort_hack_cmp_names_kludge[aa]), (bb < 0 ? last : sort_hack_cmp_names_kludge[bb])); } } static void initialize_sort_map (state *s) { Display *dpy = GDK_DISPLAY(); saver_preferences *p = &s->prefs; int i, j; if (s->list_elt_to_hack_number) free (s->list_elt_to_hack_number); if (s->hack_number_to_list_elt) free (s->hack_number_to_list_elt); if (s->hacks_available_p) free (s->hacks_available_p); s->list_elt_to_hack_number = (int *) calloc (sizeof(int), p->screenhacks_count + 1); s->hack_number_to_list_elt = (int *) calloc (sizeof(int), p->screenhacks_count + 1); s->hacks_available_p = (Bool *) calloc (sizeof(Bool), p->screenhacks_count + 1); s->total_available = 0; /* Check which hacks actually exist on $PATH */ for (i = 0; i < p->screenhacks_count; i++) { screenhack *hack = p->screenhacks[i]; int on = on_path_p (hack->command) ? 1 : 0; s->hacks_available_p[i] = on; s->total_available += on; } /* Initialize list->hack table to unsorted mapping, omitting nonexistent hacks, if desired. */ j = 0; for (i = 0; i < p->screenhacks_count; i++) { if (!p->ignore_uninstalled_p || s->hacks_available_p[i]) s->list_elt_to_hack_number[j++] = i; } s->list_count = j; for (; j < p->screenhacks_count; j++) s->list_elt_to_hack_number[j] = -1; /* Generate list of sortable names (once) */ sort_hack_cmp_names_kludge = (char **) calloc (sizeof(char *), p->screenhacks_count); for (i = 0; i < p->screenhacks_count; i++) { screenhack *hack = p->screenhacks[i]; char *name = (hack->name && *hack->name ? strdup (hack->name) : make_hack_name (dpy, hack->command)); char *str; for (str = name; *str; str++) *str = tolower(*str); sort_hack_cmp_names_kludge[i] = name; } /* Sort list->hack map alphabetically */ qsort (s->list_elt_to_hack_number, p->screenhacks_count, sizeof(*s->list_elt_to_hack_number), sort_hack_cmp); /* Free names */ for (i = 0; i < p->screenhacks_count; i++) free (sort_hack_cmp_names_kludge[i]); free (sort_hack_cmp_names_kludge); sort_hack_cmp_names_kludge = 0; /* Build inverse table */ for (i = 0; i < p->screenhacks_count; i++) { int n = s->list_elt_to_hack_number[i]; if (n != -1) s->hack_number_to_list_elt[n] = i; } } static int maybe_reload_init_file (state *s) { Display *dpy = GDK_DISPLAY(); saver_preferences *p = &s->prefs; int status = 0; static Bool reentrant_lock = False; if (reentrant_lock) return 0; reentrant_lock = True; if (init_file_changed_p (p)) { const char *f = init_file_name(); char *b; int list_elt; GtkWidget *list; if (!f || !*f) return 0; b = (char *) malloc (strlen(f) + 1024); sprintf (b, _("Warning:\n\n" "file \"%s\" has changed, reloading.\n"), f); warning_dialog (s->toplevel_widget, b, D_NONE, 100); free (b); load_init_file (dpy, p); initialize_sort_map (s); list_elt = selected_list_element (s); list = name_to_widget (s, "list"); gtk_container_foreach (GTK_CONTAINER (list), widget_deleter, NULL); populate_hack_list (s); force_list_select_item (s, list, list_elt, True); populate_prefs_page (s); populate_demo_window (s, list_elt); ensure_selected_item_visible (list); status = 1; } reentrant_lock = False; return status; } /* Making the preview window have the right X visual (so that GL works.) */ static Visual *get_best_gl_visual (state *); static GdkVisual * x_visual_to_gdk_visual (Visual *xv) { GList *gvs = gdk_list_visuals(); if (!xv) return gdk_visual_get_system(); for (; gvs; gvs = gvs->next) { GdkVisual *gv = (GdkVisual *) gvs->data; if (xv == GDK_VISUAL_XVISUAL (gv)) return gv; } fprintf (stderr, "%s: couldn't convert X Visual 0x%lx to a GdkVisual\n", blurb(), (unsigned long) xv->visualid); abort(); } static void clear_preview_window (state *s) { GtkWidget *p; GdkWindow *window; GtkStyle *style; if (!s->toplevel_widget) return; /* very early */ p = name_to_widget (s, "preview"); window = GET_WINDOW (p); if (!window) return; /* Flush the widget background down into the window, in case a subproc has changed it. */ style = gtk_widget_get_style (p); gdk_window_set_background (window, &style->bg[GTK_STATE_NORMAL]); gdk_window_clear (window); { int list_elt = selected_list_element (s); int hack_number = (list_elt >= 0 ? s->list_elt_to_hack_number[list_elt] : -1); Bool available_p = (hack_number >= 0 ? s->hacks_available_p [hack_number] : True); Bool nothing_p = (s->total_available < 5); #ifdef HAVE_GTK2 GtkWidget *notebook = name_to_widget (s, "preview_notebook"); gtk_notebook_set_page (GTK_NOTEBOOK (notebook), (s->running_preview_error_p ? (available_p ? 1 : nothing_p ? 3 : 2) : 0)); #else /* !HAVE_GTK2 */ if (s->running_preview_error_p) { const char * const lines1[] = { N_("No Preview"), N_("Available") }; const char * const lines2[] = { N_("Not"), N_("Installed") }; int nlines = countof(lines1); int lh = p->style->font->ascent + p->style->font->descent; int y, i; gint w, h; const char * const *lines = (available_p ? lines1 : lines2); gdk_window_get_size (window, &w, &h); y = (h - (lh * nlines)) / 2; y += p->style->font->ascent; for (i = 0; i < nlines; i++) { int sw = gdk_string_width (p->style->font, _(lines[i])); int x = (w - sw) / 2; gdk_draw_string (window, p->style->font, p->style->fg_gc[GTK_STATE_NORMAL], x, y, _(lines[i])); y += lh; } } #endif /* !HAVE_GTK2 */ } gdk_flush (); } static void reset_preview_window (state *s) { /* On some systems (most recently, MacOS X) OpenGL programs get confused when you kill one and re-start another on the same window. So maybe it's best to just always destroy and recreate the preview window when changing hacks, instead of always trying to reuse the same one? */ GtkWidget *pr = name_to_widget (s, "preview"); if (GET_REALIZED (pr)) { GdkWindow *window = GET_WINDOW (pr); Window oid = (window ? GDK_WINDOW_XWINDOW (window) : 0); Window id; gtk_widget_hide (pr); gtk_widget_unrealize (pr); gtk_widget_realize (pr); gtk_widget_show (pr); id = (window ? GDK_WINDOW_XWINDOW (window) : 0); if (s->debug_p) fprintf (stderr, "%s: window id 0x%X -> 0x%X\n", blurb(), (unsigned int) oid, (unsigned int) id); } } static void fix_preview_visual (state *s) { GtkWidget *widget = name_to_widget (s, "preview"); Visual *xvisual = get_best_gl_visual (s); GdkVisual *visual = x_visual_to_gdk_visual (xvisual); GdkVisual *dvisual = gdk_visual_get_system(); GdkColormap *cmap = (visual == dvisual ? gdk_colormap_get_system () : gdk_colormap_new (visual, False)); if (s->debug_p) fprintf (stderr, "%s: using %s visual 0x%lx\n", blurb(), (visual == dvisual ? "default" : "non-default"), (xvisual ? (unsigned long) xvisual->visualid : 0L)); if (!GET_REALIZED (widget) || gtk_widget_get_visual (widget) != visual) { gtk_widget_unrealize (widget); gtk_widget_set_visual (widget, visual); gtk_widget_set_colormap (widget, cmap); gtk_widget_realize (widget); } /* Set the Widget colors to be white-on-black. */ { GdkWindow *window = GET_WINDOW (widget); GtkStyle *style = gtk_style_copy (gtk_widget_get_style (widget)); GdkColormap *cmap = gtk_widget_get_colormap (widget); GdkColor *fg = &style->fg[GTK_STATE_NORMAL]; GdkColor *bg = &style->bg[GTK_STATE_NORMAL]; GdkGC *fgc = gdk_gc_new(window); GdkGC *bgc = gdk_gc_new(window); if (!gdk_color_white (cmap, fg)) abort(); if (!gdk_color_black (cmap, bg)) abort(); gdk_gc_set_foreground (fgc, fg); gdk_gc_set_background (fgc, bg); gdk_gc_set_foreground (bgc, bg); gdk_gc_set_background (bgc, fg); style->fg_gc[GTK_STATE_NORMAL] = fgc; style->bg_gc[GTK_STATE_NORMAL] = fgc; gtk_widget_set_style (widget, style); /* For debugging purposes, put a title on the window (so that it can be easily found in the output of "xwininfo -tree".) */ gdk_window_set_title (window, "Preview"); } gtk_widget_show (widget); } /* Subprocesses */ static char * subproc_pretty_name (state *s) { if (s->running_preview_cmd) { char *ps = strdup (s->running_preview_cmd); char *ss = strchr (ps, ' '); if (ss) *ss = 0; ss = strrchr (ps, '/'); if (!ss) ss = ps; else { ss = strdup (ss+1); free (ps); } return ss; } else return strdup ("???"); } static void reap_zombies (state *s) { int wait_status = 0; pid_t pid; while ((pid = waitpid (-1, &wait_status, WNOHANG|WUNTRACED)) > 0) { if (s->debug_p) { if (pid == s->running_preview_pid) { char *ss = subproc_pretty_name (s); fprintf (stderr, "%s: pid %lu (%s) died\n", blurb(), (unsigned long) pid, ss); free (ss); } else fprintf (stderr, "%s: pid %lu died\n", blurb(), (unsigned long) pid); } } } /* Mostly lifted from driver/subprocs.c */ static Visual * get_best_gl_visual (state *s) { Display *dpy = GDK_DISPLAY(); pid_t forked; int fds [2]; int in, out; char buf[1024]; char *av[10]; int ac = 0; av[ac++] = "xscreensaver-gl-helper"; av[ac] = 0; if (pipe (fds)) { perror ("error creating pipe:"); return 0; } in = fds [0]; out = fds [1]; switch ((int) (forked = fork ())) { case -1: { sprintf (buf, "%s: couldn't fork", blurb()); perror (buf); exit (1); } case 0: { int stdout_fd = 1; close (in); /* don't need this one */ close (ConnectionNumber (dpy)); /* close display fd */ if (dup2 (out, stdout_fd) < 0) /* pipe stdout */ { perror ("could not dup() a new stdout:"); return 0; } execvp (av[0], av); /* shouldn't return. */ if (errno != ENOENT) { /* Ignore "no such file or directory" errors, unless verbose. Issue all other exec errors, though. */ sprintf (buf, "%s: running %s", blurb(), av[0]); perror (buf); } /* Note that one must use _exit() instead of exit() in procs forked off of Gtk programs -- Gtk installs an atexit handler that has a copy of the X connection (which we've already closed, for safety.) If one uses exit() instead of _exit(), then one sometimes gets a spurious "Gdk-ERROR: Fatal IO error on X server" error message. */ _exit (1); /* exits fork */ break; } default: { int result = 0; int wait_status = 0; FILE *f = fdopen (in, "r"); unsigned int v = 0; char c; close (out); /* don't need this one */ *buf = 0; if (!fgets (buf, sizeof(buf)-1, f)) *buf = 0; fclose (f); /* Wait for the child to die. */ waitpid (-1, &wait_status, 0); if (1 == sscanf (buf, "0x%x %c", &v, &c)) result = (int) v; if (result == 0) { if (s->debug_p) fprintf (stderr, "%s: %s did not report a GL visual!\n", blurb(), av[0]); return 0; } else { Visual *v = id_to_visual (DefaultScreenOfDisplay (dpy), result); if (s->debug_p) fprintf (stderr, "%s: %s says the GL visual is 0x%X.\n", blurb(), av[0], result); if (!v) abort(); return v; } } } abort(); } static void kill_preview_subproc (state *s, Bool reset_p) { s->running_preview_error_p = False; reap_zombies (s); clear_preview_window (s); if (s->subproc_check_timer_id) { gtk_timeout_remove (s->subproc_check_timer_id); s->subproc_check_timer_id = 0; s->subproc_check_countdown = 0; } if (s->running_preview_pid) { int status = kill (s->running_preview_pid, SIGTERM); char *ss = subproc_pretty_name (s); if (status < 0) { if (errno == ESRCH) { if (s->debug_p) fprintf (stderr, "%s: pid %lu (%s) was already dead.\n", blurb(), (unsigned long) s->running_preview_pid, ss); } else { char buf [1024]; sprintf (buf, "%s: couldn't kill pid %lu (%s)", blurb(), (unsigned long) s->running_preview_pid, ss); perror (buf); } } else { int endstatus; waitpid(s->running_preview_pid, &endstatus, 0); if (s->debug_p) fprintf (stderr, "%s: killed pid %lu (%s)\n", blurb(), (unsigned long) s->running_preview_pid, ss); } free (ss); s->running_preview_pid = 0; if (s->running_preview_cmd) free (s->running_preview_cmd); s->running_preview_cmd = 0; } reap_zombies (s); if (reset_p) { reset_preview_window (s); clear_preview_window (s); } } /* Immediately and unconditionally launches the given process, after appending the -window-id option; sets running_preview_pid. */ static void launch_preview_subproc (state *s) { saver_preferences *p = &s->prefs; Window id; char *new_cmd = 0; pid_t forked; const char *cmd = s->desired_preview_cmd; GtkWidget *pr = name_to_widget (s, "preview"); GdkWindow *window; reset_preview_window (s); window = GET_WINDOW (pr); s->running_preview_error_p = False; if (s->preview_suppressed_p) { kill_preview_subproc (s, False); goto DONE; } new_cmd = malloc (strlen (cmd) + 40); id = (window ? GDK_WINDOW_XWINDOW (window) : 0); if (id == 0) { /* No window id? No command to run. */ free (new_cmd); new_cmd = 0; } else { strcpy (new_cmd, cmd); sprintf (new_cmd + strlen (new_cmd), " -window-id 0x%X", (unsigned int) id); } kill_preview_subproc (s, False); if (! new_cmd) { s->running_preview_error_p = True; clear_preview_window (s); goto DONE; } switch ((int) (forked = fork ())) { case -1: { char buf[255]; sprintf (buf, "%s: couldn't fork", blurb()); perror (buf); s->running_preview_error_p = True; goto DONE; break; } case 0: { close (ConnectionNumber (GDK_DISPLAY())); hack_subproc_environment (id, s->debug_p); usleep (250000); /* pause for 1/4th second before launching, to give the previous program time to die and flush its X buffer, so we don't get leftover turds on the window. */ exec_command (p->shell, new_cmd, p->nice_inferior); /* Don't bother printing an error message when we are unable to exec subprocesses; we handle that by polling the pid later. Note that one must use _exit() instead of exit() in procs forked off of Gtk programs -- Gtk installs an atexit handler that has a copy of the X connection (which we've already closed, for safety.) If one uses exit() instead of _exit(), then one sometimes gets a spurious "Gdk-ERROR: Fatal IO error on X server" error message. */ _exit (1); /* exits child fork */ break; default: if (s->running_preview_cmd) free (s->running_preview_cmd); s->running_preview_cmd = strdup (s->desired_preview_cmd); s->running_preview_pid = forked; if (s->debug_p) { char *ss = subproc_pretty_name (s); fprintf (stderr, "%s: forked %lu (%s)\n", blurb(), (unsigned long) forked, ss); free (ss); } break; } } schedule_preview_check (s); DONE: if (new_cmd) free (new_cmd); new_cmd = 0; } /* Modify $DISPLAY and $PATH for the benefit of subprocesses. */ static void hack_environment (state *s) { static const char *def_path = # ifdef DEFAULT_PATH_PREFIX DEFAULT_PATH_PREFIX; # else ""; # endif Display *dpy = GDK_DISPLAY(); const char *odpy = DisplayString (dpy); char *ndpy = (char *) malloc(strlen(odpy) + 20); strcpy (ndpy, "DISPLAY="); strcat (ndpy, odpy); if (putenv (ndpy)) abort (); if (s->debug_p) fprintf (stderr, "%s: %s\n", blurb(), ndpy); /* don't free(ndpy) -- some implementations of putenv (BSD 4.4, glibc 2.0) copy the argument, but some (libc4,5, glibc 2.1.2) do not. So we must leak it (and/or the previous setting). Yay. */ if (def_path && *def_path) { const char *opath = getenv("PATH"); char *npath = (char *) malloc(strlen(def_path) + strlen(opath) + 20); strcpy (npath, "PATH="); strcat (npath, def_path); strcat (npath, ":"); strcat (npath, opath); if (putenv (npath)) abort (); /* do not free(npath) -- see above */ if (s->debug_p) fprintf (stderr, "%s: added \"%s\" to $PATH\n", blurb(), def_path); } } static void hack_subproc_environment (Window preview_window_id, Bool debug_p) { /* Store a window ID in $XSCREENSAVER_WINDOW -- this isn't strictly necessary yet, but it will make programs work if we had invoked them with "-root" and not with "-window-id" -- which, of course, doesn't happen. */ char *nssw = (char *) malloc (40); sprintf (nssw, "XSCREENSAVER_WINDOW=0x%X", (unsigned int) preview_window_id); /* Allegedly, BSD 4.3 didn't have putenv(), but nobody runs such systems any more, right? It's not Posix, but everyone seems to have it. */ if (putenv (nssw)) abort (); if (debug_p) fprintf (stderr, "%s: %s\n", blurb(), nssw); /* do not free(nssw) -- see above */ } /* Called from a timer: Launches the currently-chosen subprocess, if it's not already running. If there's a different process running, kills it. */ static int update_subproc_timer (gpointer data) { state *s = (state *) data; if (! s->desired_preview_cmd) kill_preview_subproc (s, True); else if (!s->running_preview_cmd || !!strcmp (s->desired_preview_cmd, s->running_preview_cmd)) launch_preview_subproc (s); s->subproc_timer_id = 0; return FALSE; /* do not re-execute timer */ } static int settings_timer (gpointer data) { settings_cb (0, 0); return FALSE; } /* Call this when you think you might want a preview process running. It will set a timer that will actually launch that program a second from now, if you haven't changed your mind (to avoid double-click spazzing, etc.) `cmd' may be null meaning "no process". */ static void schedule_preview (state *s, const char *cmd) { int delay = 1000 * 0.5; /* 1/2 second hysteresis */ if (s->debug_p) { if (cmd) fprintf (stderr, "%s: scheduling preview \"%s\"\n", blurb(), cmd); else fprintf (stderr, "%s: scheduling preview death\n", blurb()); } if (s->desired_preview_cmd) free (s->desired_preview_cmd); s->desired_preview_cmd = (cmd ? strdup (cmd) : 0); if (s->subproc_timer_id) gtk_timeout_remove (s->subproc_timer_id); s->subproc_timer_id = gtk_timeout_add (delay, update_subproc_timer, s); } /* Called from a timer: Checks to see if the subproc that should be running, actually is. */ static int check_subproc_timer (gpointer data) { state *s = (state *) data; Bool again_p = True; if (s->running_preview_error_p || /* already dead */ s->running_preview_pid <= 0) { again_p = False; } else { int status; reap_zombies (s); status = kill (s->running_preview_pid, 0); if (status < 0 && errno == ESRCH) s->running_preview_error_p = True; if (s->debug_p) { char *ss = subproc_pretty_name (s); fprintf (stderr, "%s: timer: pid %lu (%s) is %s\n", blurb(), (unsigned long) s->running_preview_pid, ss, (s->running_preview_error_p ? "dead" : "alive")); free (ss); } if (s->running_preview_error_p) { clear_preview_window (s); again_p = False; } } /* Otherwise, it's currently alive. We might be checking again, or we might be satisfied. */ if (--s->subproc_check_countdown <= 0) again_p = False; if (again_p) return TRUE; /* re-execute timer */ else { s->subproc_check_timer_id = 0; s->subproc_check_countdown = 0; return FALSE; /* do not re-execute timer */ } } /* Call this just after launching a subprocess. This sets a timer that will, five times a second for two seconds, check whether the program is still running. The assumption here is that if the process didn't stay up for more than a couple of seconds, then either the program doesn't exist, or it doesn't take a -window-id argument. */ static void schedule_preview_check (state *s) { int seconds = 2; int ticks = 5; if (s->debug_p) fprintf (stderr, "%s: scheduling check\n", blurb()); if (s->subproc_check_timer_id) gtk_timeout_remove (s->subproc_check_timer_id); s->subproc_check_timer_id = gtk_timeout_add (1000 / ticks, check_subproc_timer, (gpointer) s); s->subproc_check_countdown = ticks * seconds; } static Bool screen_blanked_p (void) { Atom type; int format; unsigned long nitems, bytesafter; unsigned char *dataP = 0; Display *dpy = GDK_DISPLAY(); Bool blanked_p = False; if (XGetWindowProperty (dpy, RootWindow (dpy, 0), /* always screen #0 */ XA_SCREENSAVER_STATUS, 0, 3, False, XA_INTEGER, &type, &format, &nitems, &bytesafter, &dataP) == Success && type == XA_INTEGER && nitems >= 3 && dataP) { Atom *data = (Atom *) dataP; blanked_p = (data[0] == XA_BLANK || data[0] == XA_LOCK); } if (dataP) XFree (dataP); return blanked_p; } /* Wake up every now and then and see if the screen is blanked. If it is, kill off the small-window demo -- no point in wasting cycles by running two screensavers at once... */ static int check_blanked_timer (gpointer data) { state *s = (state *) data; Bool blanked_p = screen_blanked_p (); if (blanked_p && s->running_preview_pid) { if (s->debug_p) fprintf (stderr, "%s: screen is blanked: killing preview\n", blurb()); kill_preview_subproc (s, True); } return True; /* re-execute timer */ } /* How many screens are there (including Xinerama.) */ static int screen_count (Display *dpy) { int nscreens = ScreenCount(dpy); # ifdef HAVE_XINERAMA if (nscreens <= 1) { int event_number, error_number; if (XineramaQueryExtension (dpy, &event_number, &error_number) && XineramaIsActive (dpy)) { XineramaScreenInfo *xsi = XineramaQueryScreens (dpy, &nscreens); if (xsi) XFree (xsi); } } # endif /* HAVE_XINERAMA */ return nscreens; } /* Setting window manager icon */ static void init_icon (GdkWindow *window) { GdkBitmap *mask = 0; GdkPixmap *pixmap = gdk_pixmap_create_from_xpm_d (window, &mask, 0, (gchar **) logo_50_xpm); if (pixmap) gdk_window_set_icon (window, 0, pixmap, mask); } /* The main demo-mode command loop. */ #if 0 static Bool mapper (XrmDatabase *db, XrmBindingList bindings, XrmQuarkList quarks, XrmRepresentation *type, XrmValue *value, XPointer closure) { int i; for (i = 0; quarks[i]; i++) { if (bindings[i] == XrmBindTightly) fprintf (stderr, (i == 0 ? "" : ".")); else if (bindings[i] == XrmBindLoosely) fprintf (stderr, "*"); else fprintf (stderr, " ??? "); fprintf(stderr, "%s", XrmQuarkToString (quarks[i])); } fprintf (stderr, ": %s\n", (char *) value->addr); return False; } #endif static Window gnome_screensaver_window (Screen *screen) { Display *dpy = DisplayOfScreen (screen); Window root = RootWindowOfScreen (screen); Window parent, *kids; unsigned int nkids; Window gnome_window = 0; int i; if (! XQueryTree (dpy, root, &root, &parent, &kids, &nkids)) abort (); for (i = 0; i < nkids; i++) { Atom type; int format; unsigned long nitems, bytesafter; unsigned char *name; if (XGetWindowProperty (dpy, kids[i], XA_WM_COMMAND, 0, 128, False, XA_STRING, &type, &format, &nitems, &bytesafter, &name) == Success && type != None && !strcmp ((char *) name, "gnome-screensaver")) { gnome_window = kids[i]; break; } } if (kids) XFree ((char *) kids); return gnome_window; } static Bool gnome_screensaver_active_p (void) { Display *dpy = GDK_DISPLAY(); Window w = gnome_screensaver_window (DefaultScreenOfDisplay (dpy)); return (w ? True : False); } static void kill_gnome_screensaver (void) { Display *dpy = GDK_DISPLAY(); Window w = gnome_screensaver_window (DefaultScreenOfDisplay (dpy)); if (w) XKillClient (dpy, (XID) w); } static Bool kde_screensaver_active_p (void) { FILE *p = popen ("dcop kdesktop KScreensaverIface isEnabled 2>/dev/null", "r"); char buf[255]; fgets (buf, sizeof(buf)-1, p); pclose (p); if (!strcmp (buf, "true\n")) return True; else return False; } static void kill_kde_screensaver (void) { system ("dcop kdesktop KScreensaverIface enable false"); } static void the_network_is_not_the_computer (state *s) { Display *dpy = GDK_DISPLAY(); char *rversion = 0, *ruser = 0, *rhost = 0; char *luser, *lhost; char *msg = 0; struct passwd *p = getpwuid (getuid ()); const char *d = DisplayString (dpy); # if defined(HAVE_UNAME) struct utsname uts; if (uname (&uts) < 0) lhost = ""; else lhost = uts.nodename; # elif defined(VMS) strcpy (lhost, getenv("SYS$NODE")); # else /* !HAVE_UNAME && !VMS */ strcat (lhost, ""); # endif /* !HAVE_UNAME && !VMS */ if (p && p->pw_name) luser = p->pw_name; else luser = "???"; server_xscreensaver_version (dpy, &rversion, &ruser, &rhost); /* Make a buffer that's big enough for a number of copies of all the strings, plus some. */ msg = (char *) malloc (10 * ((rversion ? strlen(rversion) : 0) + (ruser ? strlen(ruser) : 0) + (rhost ? strlen(rhost) : 0) + strlen(lhost) + strlen(luser) + strlen(d) + 1024)); *msg = 0; if (!rversion || !*rversion) { sprintf (msg, _("Warning:\n\n" "The XScreenSaver daemon doesn't seem to be running\n" "on display \"%s\". Launch it now?"), d); } else if (p && ruser && *ruser && !!strcmp (ruser, p->pw_name)) { /* Warn that the two processes are running as different users. */ sprintf(msg, _("Warning:\n\n" "%s is running as user \"%s\" on host \"%s\".\n" "But the xscreensaver managing display \"%s\"\n" "is running as user \"%s\" on host \"%s\".\n" "\n" "Since they are different users, they won't be reading/writing\n" "the same ~/.xscreensaver file, so %s isn't\n" "going to work right.\n" "\n" "You should either re-run %s as \"%s\", or re-run\n" "xscreensaver as \"%s\".\n" "\n" "Restart the xscreensaver daemon now?\n"), progname, luser, lhost, d, (ruser ? ruser : "???"), (rhost ? rhost : "???"), progname, progname, (ruser ? ruser : "???"), luser); } else if (rhost && *rhost && !!strcmp (rhost, lhost)) { /* Warn that the two processes are running on different hosts. */ sprintf (msg, _("Warning:\n\n" "%s is running as user \"%s\" on host \"%s\".\n" "But the xscreensaver managing display \"%s\"\n" "is running as user \"%s\" on host \"%s\".\n" "\n" "If those two machines don't share a file system (that is,\n" "if they don't see the same ~%s/.xscreensaver file) then\n" "%s won't work right.\n" "\n" "Restart the daemon on \"%s\" as \"%s\" now?\n"), progname, luser, lhost, d, (ruser ? ruser : "???"), (rhost ? rhost : "???"), luser, progname, lhost, luser); } else if (!!strcmp (rversion, s->short_version)) { /* Warn that the version numbers don't match. */ sprintf (msg, _("Warning:\n\n" "This is %s version %s.\n" "But the xscreensaver managing display \"%s\"\n" "is version %s. This could cause problems.\n" "\n" "Restart the xscreensaver daemon now?\n"), progname, s->short_version, d, rversion); } if (*msg) warning_dialog (s->toplevel_widget, msg, D_LAUNCH, 1); if (rversion) free (rversion); if (ruser) free (ruser); if (rhost) free (rhost); free (msg); msg = 0; /* Note: since these dialogs are not modal, they will stack up. So we do this check *after* popping up the "xscreensaver is not running" dialog so that these are on top. Good enough. */ if (gnome_screensaver_active_p ()) warning_dialog (s->toplevel_widget, _("Warning:\n\n" "The GNOME screensaver daemon appears to be running.\n" "It must be stopped for XScreenSaver to work properly.\n" "\n" "Stop the GNOME screen saver daemon now?\n"), D_GNOME, 1); if (kde_screensaver_active_p ()) warning_dialog (s->toplevel_widget, _("Warning:\n\n" "The KDE screen saver daemon appears to be running.\n" "It must be stopped for XScreenSaver to work properly.\n" "\n" "Stop the KDE screen saver daemon now?\n"), D_KDE, 1); } /* We use this error handler so that X errors are preceeded by the name of the program that generated them. */ static int demo_ehandler (Display *dpy, XErrorEvent *error) { state *s = global_state_kludge; /* I hate C so much... */ fprintf (stderr, "\nX error in %s:\n", blurb()); XmuPrintDefaultErrorMessage (dpy, error, stderr); kill_preview_subproc (s, False); exit (-1); return 0; } /* We use this error handler so that Gtk/Gdk errors are preceeded by the name of the program that generated them; and also that we can ignore one particular bogus error message that Gdk madly spews. */ static void g_log_handler (const gchar *log_domain, GLogLevelFlags log_level, const gchar *message, gpointer user_data) { /* Ignore the message "Got event for unknown window: 0x...". Apparently some events are coming in for the xscreensaver window (presumably reply events related to the ClientMessage) and Gdk feels the need to complain about them. So, just suppress any messages that look like that one. */ if (strstr (message, "unknown window")) return; fprintf (stderr, "%s: %s-%s: %s%s", blurb(), (log_domain ? log_domain : progclass), (log_level == G_LOG_LEVEL_ERROR ? "error" : log_level == G_LOG_LEVEL_CRITICAL ? "critical" : log_level == G_LOG_LEVEL_WARNING ? "warning" : log_level == G_LOG_LEVEL_MESSAGE ? "message" : log_level == G_LOG_LEVEL_INFO ? "info" : log_level == G_LOG_LEVEL_DEBUG ? "debug" : "???"), message, ((!*message || message[strlen(message)-1] != '\n') ? "\n" : "")); } #ifdef __GNUC__ __extension__ /* shut up about "string length is greater than the length ISO C89 compilers are required to support" when including the .ad file... */ #endif STFU static char *defaults[] = { #include "XScreenSaver_ad.h" 0 }; #if 0 #ifdef HAVE_CRAPPLET static struct poptOption crapplet_options[] = { {NULL, '\0', 0, NULL, 0} }; #endif /* HAVE_CRAPPLET */ #endif /* 0 */ const char *usage = "[--display dpy] [--prefs | --settings]" # ifdef HAVE_CRAPPLET " [--crapplet]" # endif "\n\t\t [--debug] [--sync] [--no-xshm] [--configdir dir]"; static void map_popup_window_cb (GtkWidget *w, gpointer user_data) { state *s = (state *) user_data; Boolean oi = s->initializing_p; #ifndef HAVE_GTK2 GtkLabel *label = GTK_LABEL (name_to_widget (s, "doc")); #endif s->initializing_p = True; #ifndef HAVE_GTK2 eschew_gtk_lossage (label); #endif s->initializing_p = oi; } #if 0 static void print_widget_tree (GtkWidget *w, int depth) { int i; for (i = 0; i < depth; i++) fprintf (stderr, " "); fprintf (stderr, "%s\n", gtk_widget_get_name (w)); if (GTK_IS_LIST (w)) { for (i = 0; i < depth+1; i++) fprintf (stderr, " "); fprintf (stderr, "...list kids...\n"); } else if (GTK_IS_CONTAINER (w)) { GList *kids = gtk_container_children (GTK_CONTAINER (w)); while (kids) { print_widget_tree (GTK_WIDGET (kids->data), depth+1); kids = kids->next; } } } #endif /* 0 */ static int delayed_scroll_kludge (gpointer data) { state *s = (state *) data; GtkWidget *w = GTK_WIDGET (name_to_widget (s, "list")); ensure_selected_item_visible (w); /* Oh, this is just fucking lovely, too. */ w = GTK_WIDGET (name_to_widget (s, "preview")); gtk_widget_hide (w); gtk_widget_show (w); return FALSE; /* do not re-execute timer */ } #ifdef HAVE_GTK2 static GtkWidget * create_xscreensaver_demo (void) { GtkWidget *nb; nb = name_to_widget (global_state_kludge, "preview_notebook"); gtk_notebook_set_show_tabs (GTK_NOTEBOOK (nb), FALSE); return name_to_widget (global_state_kludge, "xscreensaver_demo"); } static GtkWidget * create_xscreensaver_settings_dialog (void) { GtkWidget *w, *box; box = name_to_widget (global_state_kludge, "dialog_action_area"); w = name_to_widget (global_state_kludge, "adv_button"); gtk_button_box_set_child_secondary (GTK_BUTTON_BOX (box), w, TRUE); w = name_to_widget (global_state_kludge, "std_button"); gtk_button_box_set_child_secondary (GTK_BUTTON_BOX (box), w, TRUE); return name_to_widget (global_state_kludge, "xscreensaver_settings_dialog"); } #endif /* HAVE_GTK2 */ int main (int argc, char **argv) { XtAppContext app; state S, *s; saver_preferences *p; Bool prefs_p = False; Bool settings_p = False; int i; Display *dpy; Widget toplevel_shell; char *real_progname = argv[0]; char *window_title; char *geom = 0; Bool crapplet_p = False; char *str; #ifdef ENABLE_NLS bindtextdomain (GETTEXT_PACKAGE, LOCALEDIR); textdomain (GETTEXT_PACKAGE); # ifdef HAVE_GTK2 bind_textdomain_codeset (GETTEXT_PACKAGE, "UTF-8"); # else /* !HAVE_GTK2 */ if (!setlocale (LC_ALL, "")) fprintf (stderr, "%s: locale not supported by C library\n", real_progname); # endif /* !HAVE_GTK2 */ #endif /* ENABLE_NLS */ str = strrchr (real_progname, '/'); if (str) real_progname = str+1; s = &S; memset (s, 0, sizeof(*s)); s->initializing_p = True; p = &s->prefs; global_state_kludge = s; /* I hate C so much... */ progname = real_progname; s->short_version = (char *) malloc (5); memcpy (s->short_version, screensaver_id + 17, 4); s->short_version [4] = 0; /* Register our error message logger for every ``log domain'' known. There's no way to do this globally, so I grepped the Gtk/Gdk sources for all of the domains that seem to be in use. */ { const char * const domains[] = { 0, "Gtk", "Gdk", "GLib", "GModule", "GThread", "Gnome", "GnomeUI" }; for (i = 0; i < countof(domains); i++) g_log_set_handler (domains[i], G_LOG_LEVEL_MASK, g_log_handler, 0); } #ifdef DEFAULT_ICONDIR /* from -D on compile line */ # ifndef HAVE_GTK2 { const char *dir = DEFAULT_ICONDIR; if (*dir) add_pixmap_directory (dir); } # endif /* !HAVE_GTK2 */ #endif /* DEFAULT_ICONDIR */ /* This is gross, but Gtk understands --display and not -display... */ for (i = 1; i < argc; i++) if (argv[i][0] && argv[i][1] && !strncmp(argv[i], "-display", strlen(argv[i]))) argv[i] = "--display"; /* We need to parse this arg really early... Sigh. */ for (i = 1; i < argc; i++) { if (argv[i] && (!strcmp(argv[i], "--crapplet") || !strcmp(argv[i], "--capplet"))) { # if defined(HAVE_CRAPPLET) || defined(HAVE_GTK2) int j; crapplet_p = True; for (j = i; j < argc; j++) /* remove it from the list */ argv[j] = argv[j+1]; argc--; # else /* !HAVE_CRAPPLET && !HAVE_GTK2 */ fprintf (stderr, "%s: not compiled with --crapplet support\n", real_progname); fprintf (stderr, "%s: %s\n", real_progname, usage); exit (1); # endif /* !HAVE_CRAPPLET && !HAVE_GTK2 */ } else if (argv[i] && (!strcmp(argv[i], "--debug") || !strcmp(argv[i], "-debug") || !strcmp(argv[i], "-d"))) { int j; s->debug_p = True; for (j = i; j < argc; j++) /* remove it from the list */ argv[j] = argv[j+1]; argc--; i--; } else if (argv[i] && argc > i+1 && *argv[i+1] && (!strcmp(argv[i], "-geometry") || !strcmp(argv[i], "-geom") || !strcmp(argv[i], "-geo") || !strcmp(argv[i], "-g"))) { int j; geom = argv[i+1]; for (j = i; j < argc; j++) /* remove them from the list */ argv[j] = argv[j+2]; argc -= 2; i -= 2; } else if (argv[i] && argc > i+1 && *argv[i+1] && (!strcmp(argv[i], "--configdir"))) { int j; struct stat st; hack_configuration_path = argv[i+1]; for (j = i; j < argc; j++) /* remove them from the list */ argv[j] = argv[j+2]; argc -= 2; i -= 2; if (0 != stat (hack_configuration_path, &st)) { char buf[255]; sprintf (buf, "%s: %.200s", blurb(), hack_configuration_path); perror (buf); exit (1); } else if (!S_ISDIR (st.st_mode)) { fprintf (stderr, "%s: not a directory: %s\n", blurb(), hack_configuration_path); exit (1); } } } if (s->debug_p) fprintf (stderr, "%s: using config directory \"%s\"\n", progname, hack_configuration_path); /* Let Gtk open the X connection, then initialize Xt to use that same connection. Doctor Frankenstein would be proud. */ # ifdef HAVE_CRAPPLET if (crapplet_p) { GnomeClient *client; GnomeClientFlags flags = 0; int init_results = gnome_capplet_init ("screensaver-properties", s->short_version, argc, argv, NULL, 0, NULL); /* init_results is: 0 upon successful initialization; 1 if --init-session-settings was passed on the cmdline; 2 if --ignore was passed on the cmdline; -1 on error. So the 1 signifies just to init the settings, and quit, basically. (Meaning launch the xscreensaver daemon.) */ if (init_results < 0) { # if 0 g_error ("An initialization error occurred while " "starting xscreensaver-capplet.\n"); # else /* !0 */ fprintf (stderr, "%s: gnome_capplet_init failed: %d\n", real_progname, init_results); exit (1); # endif /* !0 */ } client = gnome_master_client (); if (client) flags = gnome_client_get_flags (client); if (flags & GNOME_CLIENT_IS_CONNECTED) { int token = gnome_startup_acquire_token ("GNOME_SCREENSAVER_PROPERTIES", gnome_client_get_id (client)); if (token) { char *session_args[20]; int i = 0; session_args[i++] = real_progname; session_args[i++] = "--capplet"; session_args[i++] = "--init-session-settings"; session_args[i] = 0; gnome_client_set_priority (client, 20); gnome_client_set_restart_style (client, GNOME_RESTART_ANYWAY); gnome_client_set_restart_command (client, i, session_args); } else { gnome_client_set_restart_style (client, GNOME_RESTART_NEVER); } gnome_client_flush (client); } if (init_results == 1) { system ("xscreensaver -nosplash &"); return 0; } } else # endif /* HAVE_CRAPPLET */ { gtk_init (&argc, &argv); } /* We must read exactly the same resources as xscreensaver. That means we must have both the same progclass *and* progname, at least as far as the resource database is concerned. So, put "xscreensaver" in argv[0] while initializing Xt. */ argv[0] = "xscreensaver"; progname = argv[0]; /* Teach Xt to use the Display that Gtk/Gdk have already opened. */ XtToolkitInitialize (); app = XtCreateApplicationContext (); dpy = GDK_DISPLAY(); XtAppSetFallbackResources (app, defaults); XtDisplayInitialize (app, dpy, progname, progclass, 0, 0, &argc, argv); toplevel_shell = XtAppCreateShell (progname, progclass, applicationShellWidgetClass, dpy, 0, 0); dpy = XtDisplay (toplevel_shell); db = XtDatabase (dpy); XtGetApplicationNameAndClass (dpy, &progname, &progclass); XSetErrorHandler (demo_ehandler); /* Let's just ignore these. They seem to confuse Irix Gtk... */ signal (SIGPIPE, SIG_IGN); /* After doing Xt-style command-line processing, complain about any unrecognized command-line arguments. */ for (i = 1; i < argc; i++) { char *str = argv[i]; if (str[0] == '-' && str[1] == '-') str++; if (!strcmp (str, "-prefs")) prefs_p = True; else if (!strcmp (str, "-settings")) settings_p = True; else if (crapplet_p) /* There are lots of random args that we don't care about when we're started as a crapplet, so just ignore unknown args in that case. */ ; else { fprintf (stderr, _("%s: unknown option: %s\n"), real_progname, argv[i]); fprintf (stderr, "%s: %s\n", real_progname, usage); exit (1); } } /* Load the init file, which may end up consulting the X resource database and the site-wide app-defaults file. Note that at this point, it's important that `progname' be "xscreensaver", rather than whatever was in argv[0]. */ p->db = db; s->nscreens = screen_count (dpy); hack_environment (s); /* must be before initialize_sort_map() */ load_init_file (dpy, p); initialize_sort_map (s); /* Now that Xt has been initialized, and the resources have been read, we can set our `progname' variable to something more in line with reality. */ progname = real_progname; #if 0 /* Print out all the resources we read. */ { XrmName name = { 0 }; XrmClass class = { 0 }; int count = 0; XrmEnumerateDatabase (db, &name, &class, XrmEnumAllLevels, mapper, (POINTER) &count); } #endif /* Intern the atoms that xscreensaver_command() needs. */ XA_VROOT = XInternAtom (dpy, "__SWM_VROOT", False); XA_SCREENSAVER = XInternAtom (dpy, "SCREENSAVER", False); XA_SCREENSAVER_VERSION = XInternAtom (dpy, "_SCREENSAVER_VERSION",False); XA_SCREENSAVER_STATUS = XInternAtom (dpy, "_SCREENSAVER_STATUS", False); XA_SCREENSAVER_ID = XInternAtom (dpy, "_SCREENSAVER_ID", False); XA_SCREENSAVER_RESPONSE = XInternAtom (dpy, "_SCREENSAVER_RESPONSE", False); XA_SELECT = XInternAtom (dpy, "SELECT", False); XA_DEMO = XInternAtom (dpy, "DEMO", False); XA_ACTIVATE = XInternAtom (dpy, "ACTIVATE", False); XA_BLANK = XInternAtom (dpy, "BLANK", False); XA_LOCK = XInternAtom (dpy, "LOCK", False); XA_EXIT = XInternAtom (dpy, "EXIT", False); XA_RESTART = XInternAtom (dpy, "RESTART", False); /* Create the window and all its widgets. */ s->base_widget = create_xscreensaver_demo (); s->popup_widget = create_xscreensaver_settings_dialog (); s->toplevel_widget = s->base_widget; /* Set the main window's title. */ { char *base_title = _("Screensaver Preferences"); char *v = (char *) strdup(strchr(screensaver_id, ' ')); char *s1, *s2, *s3, *s4; s1 = (char *) strchr(v, ' '); s1++; s2 = (char *) strchr(s1, ' '); s3 = (char *) strchr(v, '('); s3++; s4 = (char *) strchr(s3, ')'); *s2 = 0; *s4 = 0; window_title = (char *) malloc (strlen (base_title) + strlen (progclass) + strlen (s1) + strlen (s3) + 100); sprintf (window_title, "%s (%s %s, %s)", base_title, progclass, s1, s3); gtk_window_set_title (GTK_WINDOW (s->toplevel_widget), window_title); gtk_window_set_title (GTK_WINDOW (s->popup_widget), window_title); free (v); } /* Adjust the (invisible) notebooks on the popup dialog... */ { GtkNotebook *notebook = GTK_NOTEBOOK (name_to_widget (s, "opt_notebook")); GtkWidget *std = GTK_WIDGET (name_to_widget (s, "std_button")); int page = 0; # ifdef HAVE_XML gtk_widget_hide (std); # else /* !HAVE_XML */ /* Make the advanced page be the only one available. */ gtk_widget_set_sensitive (std, False); std = GTK_WIDGET (name_to_widget (s, "adv_button")); gtk_widget_hide (std); std = GTK_WIDGET (name_to_widget (s, "reset_button")); gtk_widget_hide (std); page = 1; # endif /* !HAVE_XML */ gtk_notebook_set_page (notebook, page); gtk_notebook_set_show_tabs (notebook, False); } /* Various other widget initializations... */ gtk_signal_connect (GTK_OBJECT (s->toplevel_widget), "delete_event", GTK_SIGNAL_FUNC (wm_toplevel_close_cb), (gpointer) s); gtk_signal_connect (GTK_OBJECT (s->popup_widget), "delete_event", GTK_SIGNAL_FUNC (wm_popup_close_cb), (gpointer) s); populate_hack_list (s); populate_prefs_page (s); sensitize_demo_widgets (s, False); fix_text_entry_sizes (s); scroll_to_current_hack (s); gtk_signal_connect (GTK_OBJECT (name_to_widget (s, "cancel_button")), "map", GTK_SIGNAL_FUNC(map_popup_window_cb), (gpointer) s); #ifndef HAVE_GTK2 gtk_signal_connect (GTK_OBJECT (name_to_widget (s, "prev")), "map", GTK_SIGNAL_FUNC(map_prev_button_cb), (gpointer) s); gtk_signal_connect (GTK_OBJECT (name_to_widget (s, "next")), "map", GTK_SIGNAL_FUNC(map_next_button_cb), (gpointer) s); #endif /* !HAVE_GTK2 */ /* Hook up callbacks to the items on the mode menu. */ { GtkOptionMenu *opt = GTK_OPTION_MENU (name_to_widget (s, "mode_menu")); GtkMenu *menu = GTK_MENU (gtk_option_menu_get_menu (opt)); GList *kids = gtk_container_children (GTK_CONTAINER (menu)); int i; for (i = 0; kids; kids = kids->next, i++) { gtk_signal_connect (GTK_OBJECT (kids->data), "activate", GTK_SIGNAL_FUNC (mode_menu_item_cb), (gpointer) s); /* The "random-same" mode menu item does not appear unless there are multple screens. */ if (s->nscreens <= 1 && mode_menu_order[i] == RANDOM_HACKS_SAME) gtk_widget_hide (GTK_WIDGET (kids->data)); } if (s->nscreens <= 1) /* recompute option-menu size */ { gtk_widget_unrealize (GTK_WIDGET (menu)); gtk_widget_realize (GTK_WIDGET (menu)); } } /* Handle the -prefs command-line argument. */ if (prefs_p) { GtkNotebook *notebook = GTK_NOTEBOOK (name_to_widget (s, "notebook")); gtk_notebook_set_page (notebook, 1); } # ifdef HAVE_CRAPPLET if (crapplet_p) { GtkWidget *capplet; GtkWidget *outer_vbox; gtk_widget_hide (s->toplevel_widget); capplet = capplet_widget_new (); /* Make there be a "Close" button instead of "OK" and "Cancel" */ # ifdef HAVE_CRAPPLET_IMMEDIATE capplet_widget_changes_are_immediate (CAPPLET_WIDGET (capplet)); # endif /* HAVE_CRAPPLET_IMMEDIATE */ /* In crapplet-mode, take off the menubar. */ gtk_widget_hide (name_to_widget (s, "menubar")); /* Reparent our top-level container to be a child of the capplet window. */ outer_vbox = GTK_BIN (s->toplevel_widget)->child; gtk_widget_ref (outer_vbox); gtk_container_remove (GTK_CONTAINER (s->toplevel_widget), outer_vbox); STFU GTK_OBJECT_SET_FLAGS (outer_vbox, GTK_FLOATING); gtk_container_add (GTK_CONTAINER (capplet), outer_vbox); /* Find the window above us, and set the title and close handler. */ { GtkWidget *window = capplet; while (window && !GTK_IS_WINDOW (window)) window = GET_PARENT (window); if (window) { gtk_window_set_title (GTK_WINDOW (window), window_title); gtk_signal_connect (GTK_OBJECT (window), "delete_event", GTK_SIGNAL_FUNC (wm_toplevel_close_cb), (gpointer) s); } } s->toplevel_widget = capplet; } # endif /* HAVE_CRAPPLET */ /* The Gnome folks hate the menubar. I think it's important to have access to the commands on the File menu (Restart Daemon, etc.) and to the About and Documentation commands on the Help menu. */ #if 0 #ifdef HAVE_GTK2 gtk_widget_hide (name_to_widget (s, "menubar")); #endif #endif free (window_title); window_title = 0; #ifdef HAVE_GTK2 /* After picking the default size, allow -geometry to override it. */ if (geom) gtk_window_parse_geometry (GTK_WINDOW (s->toplevel_widget), geom); #endif gtk_widget_show (s->toplevel_widget); init_icon (GET_WINDOW (GTK_WIDGET (s->toplevel_widget))); /* after `show' */ fix_preview_visual (s); /* Realize page zero, so that we can diddle the scrollbar when the user tabs back to it -- otherwise, the current hack isn't scrolled to the first time they tab back there, when started with "-prefs". (Though it is if they then tab away, and back again.) #### Bah! This doesn't work. Gtk eats my ass! Someone who #### understands this crap, explain to me how to make this work. */ gtk_widget_realize (name_to_widget (s, "demos_table")); gtk_timeout_add (60 * 1000, check_blanked_timer, s); /* Handle the --settings command-line argument. */ if (settings_p) gtk_timeout_add (500, settings_timer, 0); /* Issue any warnings about the running xscreensaver daemon. */ if (! s->debug_p) the_network_is_not_the_computer (s); if (decrepit_p()) warning_dialog (s->toplevel_widget, _("Warning:\n\n" "This version of xscreensaver is VERY OLD!\n" "Please upgrade!\n" "\n" "https://www.jwz.org/xscreensaver/\n" "\n" "(If this is the latest version that your distro ships, then\n" "your distro is doing you a disservice. Build from source.)\n" ), D_NONE, 7); /* Run the Gtk event loop, and not the Xt event loop. This means that if there were Xt timers or fds registered, they would never get serviced, and if there were any Xt widgets, they would never have events delivered. Fortunately, we're using Gtk for all of the UI, and only initialized Xt so that we could process the command line and use the X resource manager. */ s->initializing_p = False; /* This totally sucks -- set a timer that whacks the scrollbar 0.5 seconds after we start up. Otherwise, it always appears scrolled to the top when in crapplet-mode. */ gtk_timeout_add (500, delayed_scroll_kludge, s); #if 1 /* Load every configurator in turn, to scan them for errors all at once. */ if (s->debug_p) { int i; for (i = 0; i < p->screenhacks_count; i++) { screenhack *hack = p->screenhacks[i]; conf_data *d = load_configurator (hack->command, s->debug_p); if (d) free_conf_data (d); } } #endif # ifdef HAVE_CRAPPLET if (crapplet_p) capplet_gtk_main (); else # endif /* HAVE_CRAPPLET */ gtk_main (); kill_preview_subproc (s, False); exit (0); } #endif /* HAVE_GTK -- whole file */ xscreensaver-5.36/driver/demo-Gtk-conf.c000644 000767 000024 00000155064 12701612237 020203 0ustar00jwzstaff000000 000000 /* demo-Gtk-conf.c --- implements the dynamic configuration dialogs. * xscreensaver, Copyright (c) 2001-2014 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. */ #ifdef HAVE_CONFIG_H # include "config.h" #endif #if defined(HAVE_GTK) && defined(HAVE_XML) /* whole file */ #include #include #ifdef HAVE_UNISTD_H # include #endif #include #include #include /* * Both of these workarounds can be removed when support for ancient * libxml versions is dropped. versions 1.8.11 and 2.3.4 provide the * correct fixes. */ /* * Older libxml polluted the global headerspace, while libxml2 fixed * this. To support both old and recent libxmls, we have this * workaround. */ #ifdef HAVE_OLD_XML_HEADERS # include #else /* ! HAVE_OLD_XML_HEADERS */ # include #endif /* HAVE_OLD_XML_HEADERS */ /* * handle non-native spelling mistakes in earlier versions and provide * the source-compat fix for this that may not be in older versions. */ #ifndef xmlChildrenNode # if LIBXML_VERSION >= 20000 # define xmlChildrenNode children # define xmlRootNode children # else # define xmlChildrenNode childs # define xmlRootNode root # endif /* LIBXML_VERSION */ #endif /* xmlChildrenNode */ #include #include "demo-Gtk-conf.h" /* Deal with deprecation of direct access to struct fields on the way to GTK3 See http://live.gnome.org/GnomeGoals/UseGseal */ #if GTK_CHECK_VERSION(2,14,0) # define GET_PARENT(w) gtk_widget_get_parent (w) # define GET_ADJ_VALUE(a) gtk_adjustment_get_value (a) # define GET_ADJ_UPPER(a) gtk_adjustment_get_upper (a) # define GET_ADJ_LOWER(a) gtk_adjustment_get_lower (a) #else # define GET_PARENT(w) ((w)->parent) # define GET_ADJ_VALUE(a) ((a)->value) # define GET_ADJ_UPPER(a) ((a)->upper) # define GET_ADJ_LOWER(a) ((a)->lower) #endif extern const char *blurb (void); const char *hack_configuration_path = HACK_CONFIGURATION_PATH; static gboolean debug_p = FALSE; #define MIN_SLIDER_WIDTH 150 #define MIN_SPINBUTTON_WIDTH 48 #define MIN_LABEL_WIDTH 70 typedef enum { COMMAND, FAKE, DESCRIPTION, FAKEPREVIEW, STRING, FILENAME, SLIDER, SPINBUTTON, BOOLEAN, SELECT, SELECT_OPTION } parameter_type; typedef struct { parameter_type type; xmlChar *id; /* widget name */ xmlChar *label; /* heading label, or null */ /* command, fake, description, fakepreview, string, file */ xmlChar *string; /* file name, description, whatever. */ /* slider, spinbutton */ xmlChar *low_label; /* label for the left side */ xmlChar *high_label; /* label for the right side */ float low; /* minimum value */ float high; /* maximum value */ float value; /* default value */ gboolean integer_p; /* whether the range is integral, or real */ xmlChar *arg; /* command-line option to set (substitute "%") */ gboolean invert_p; /* whether to flip the value and pretend the range goes from hi-low instead of low-hi. */ /* boolean, select-option */ xmlChar *arg_set; /* command-line option to set for "yes", or null */ xmlChar *arg_unset; /* command-line option to set for "no", or null */ /* select */ GList *options; /* select_option */ GtkWidget *widget; } parameter; static parameter *make_select_option (const char *file, xmlNodePtr); static void make_parameter_widget (const char *filename, parameter *, GtkWidget *); static void browse_button_cb (GtkButton *button, gpointer user_data); /* Frees the parameter object and all strings and sub-parameters. Does not destroy the widget, if any. */ static void free_parameter (parameter *p) { GList *rest; if (p->id) free (p->id); if (p->label) free (p->label); if (p->string) free (p->string); if (p->low_label) free (p->low_label); if (p->high_label) free (p->high_label); if (p->arg) free (p->arg); if (p->arg_set) free (p->arg_set); if (p->arg_unset) free (p->arg_unset); for (rest = p->options; rest; rest = rest->next) if (rest->data) free_parameter ((parameter *) rest->data); memset (p, ~0, sizeof(*p)); free (p); } /* Debugging: dumps out a `parameter' structure. */ #if 0 void describe_parameter (FILE *out, parameter *p) { fprintf (out, "<"); switch (p->type) { case COMMAND: fprintf (out, "command"); break; case FAKE: fprintf (out, "fake"); break; case DESCRIPTION: fprintf (out, "_description"); break; case FAKEPREVIEW: fprintf (out, "fakepreview"); break; case STRING: fprintf (out, "string"); break; case FILENAME: fprintf (out, "filename"); break; case SLIDER: fprintf (out, "number type=\"slider\""); break; case SPINBUTTON: fprintf (out, "number type=\"spinbutton\""); break; case BOOLEAN: fprintf (out, "boolean"); break; case SELECT: fprintf (out, "select"); break; default: abort(); break; } if (p->id) fprintf (out, " id=\"%s\"", p->id); if (p->label) fprintf (out, " _label=\"%s\"", p->label); if (p->string && p->type != DESCRIPTION) fprintf (out, " string=\"%s\"", p->string); if (p->low_label) fprintf (out, " _low-label=\"%s\"", p->low_label); if (p->high_label) fprintf (out, " _high-label=\"%s\"", p->high_label); if (p->low) fprintf (out, " low=\"%.2f\"", p->low); if (p->high) fprintf (out, " high=\"%.2f\"", p->high); if (p->value) fprintf (out, " default=\"%.2f\"", p->value); if (p->arg) fprintf (out, " arg=\"%s\"", p->arg); if (p->invert_p) fprintf (out, " convert=\"invert\""); if (p->arg_set) fprintf (out, " arg-set=\"%s\"", p->arg_set); if (p->arg_unset) fprintf (out, " arg-unset=\"%s\"", p->arg_unset); fprintf (out, ">\n"); if (p->type == SELECT) { GList *opt; for (opt = p->options; opt; opt = opt->next) { parameter *o = (parameter *) opt->data; if (o->type != SELECT_OPTION) abort(); fprintf (out, " id) fprintf (out, " id=\"%s\"", o->id); if (o->label) fprintf (out, " _label=\"%s\"", o->label); if (o->arg_set) fprintf (out, " arg-set=\"%s\"", o->arg_set); if (o->arg_unset) fprintf (out, " arg-unset=\"%s\"", o->arg_unset); fprintf (out, ">\n"); } fprintf (out, "\n"); } else if (p->type == DESCRIPTION) { if (p->string) fprintf (out, " %s\n", p->string); fprintf (out, "\n"); } } #endif /* 0 */ /* Like xmlGetProp() but parses a float out of the string. If the number was expressed as a float and not an integer (that is, the string contained a decimal point) then `floatp' is set to TRUE. Otherwise, it is unchanged. */ static float xml_get_float (xmlNodePtr node, const xmlChar *name, gboolean *floatpP) { const char *s = (char *) xmlGetProp (node, name); float f; char c; if (!s || 1 != sscanf (s, "%f %c", &f, &c)) return 0; else { if (strchr (s, '.')) *floatpP = TRUE; return f; } } static void sanity_check_parameter (const char *filename, const xmlChar *node_name, parameter *p); static void sanity_check_text_node (const char *filename, const xmlNodePtr node); static void sanity_check_menu_options (const char *filename, const xmlChar *node_name, parameter *p); /* Allocates and returns a new `parameter' object based on the properties in the given XML node. Returns 0 if there's nothing to create (comment, or unknown tag.) */ static parameter * make_parameter (const char *filename, xmlNodePtr node) { parameter *p; const char *name = (char *) node->name; const char *convert; gboolean floatp = FALSE; if (node->type == XML_COMMENT_NODE) return 0; p = calloc (1, sizeof(*p)); if (!name) abort(); else if (!strcmp (name, "command")) p->type = COMMAND; else if (!strcmp (name, "fullcommand")) p->type = COMMAND; else if (!strcmp (name, "_description")) p->type = DESCRIPTION; else if (!strcmp (name, "fakepreview")) p->type = FAKEPREVIEW; else if (!strcmp (name, "fake")) p->type = FAKE; else if (!strcmp (name, "boolean")) p->type = BOOLEAN; else if (!strcmp (name, "string")) p->type = STRING; else if (!strcmp (name, "file")) p->type = FILENAME; else if (!strcmp (name, "number")) p->type = SPINBUTTON; else if (!strcmp (name, "select")) p->type = SELECT; else if (!strcmp (name, "xscreensaver-text") || /* ignored in X11; */ !strcmp (name, "xscreensaver-image") || /* used in Cocoa. */ !strcmp (name, "xscreensaver-updater") || !strcmp (name, "video")) { free (p); return 0; } else if (node->type == XML_TEXT_NODE) { sanity_check_text_node (filename, node); free (p); return 0; } else { if (debug_p) fprintf (stderr, "%s: WARNING: %s: unknown tag: \"%s\"\n", blurb(), filename, name); free (p); return 0; } if (p->type == SPINBUTTON) { const char *type = (char *) xmlGetProp (node, (xmlChar *) "type"); if (!type || !strcmp (type, "spinbutton")) p->type = SPINBUTTON; else if (!strcmp (type, "slider")) p->type = SLIDER; else { if (debug_p) fprintf (stderr, "%s: WARNING: %s: unknown %s type: \"%s\"\n", blurb(), filename, name, type); free (p); return 0; } } else if (p->type == DESCRIPTION) { if (node->xmlChildrenNode && node->xmlChildrenNode->type == XML_TEXT_NODE && !node->xmlChildrenNode->next) p->string = (xmlChar *) strdup ((char *) node->xmlChildrenNode->content); } p->id = xmlGetProp (node, (xmlChar *) "id"); p->label = xmlGetProp (node, (xmlChar *) "_label"); p->low_label = xmlGetProp (node, (xmlChar *) "_low-label"); p->high_label = xmlGetProp (node, (xmlChar *) "_high-label"); p->low = xml_get_float (node, (xmlChar *) "low", &floatp); p->high = xml_get_float (node, (xmlChar *) "high", &floatp); p->value = xml_get_float (node, (xmlChar *) "default", &floatp); p->integer_p = !floatp; convert = (char *) xmlGetProp (node, (xmlChar *) "convert"); p->invert_p = (convert && !strcmp (convert, "invert")); p->arg = xmlGetProp (node, (xmlChar *) "arg"); p->arg_set = xmlGetProp (node, (xmlChar *) "arg-set"); p->arg_unset = xmlGetProp (node, (xmlChar *) "arg-unset"); /* Check for missing decimal point */ if (debug_p && p->integer_p && (p->high != p->low) && (p->high - p->low) <= 1) fprintf (stderr, "%s: WARNING: %s: %s: range [%.1f, %.1f] shouldn't be integral!\n", blurb(), filename, p->id, p->low, p->high); if (p->type == SELECT) { xmlNodePtr kids; for (kids = node->xmlChildrenNode; kids; kids = kids->next) { parameter *s = make_select_option (filename, kids); if (s) p->options = g_list_append (p->options, s); } } sanity_check_parameter (filename, (const xmlChar *) name, p); return p; } /* Allocates and returns a new SELECT_OPTION `parameter' object based on the properties in the given XML node. Returns 0 if there's nothing to create (comment, or unknown tag.) */ static parameter * make_select_option (const char *filename, xmlNodePtr node) { if (node->type == XML_COMMENT_NODE) return 0; else if (node->type == XML_TEXT_NODE) { sanity_check_text_node (filename, node); return 0; } else if (node->type != XML_ELEMENT_NODE) { if (debug_p) fprintf (stderr, "%s: WARNING: %s: %s: unexpected child tag type %d\n", blurb(), filename, node->name, (int)node->type); return 0; } else if (strcmp ((char *) node->name, "option")) { if (debug_p) fprintf (stderr, "%s: WARNING: %s: %s: child not an option tag: \"%s\"\n", blurb(), filename, node->name, node->name); return 0; } else { parameter *s = calloc (1, sizeof(*s)); s->type = SELECT_OPTION; s->id = xmlGetProp (node, (xmlChar *) "id"); s->label = xmlGetProp (node, (xmlChar *) "_label"); s->arg_set = xmlGetProp (node, (xmlChar *) "arg-set"); s->arg_unset = xmlGetProp (node, (xmlChar *) "arg-unset"); sanity_check_parameter (filename, node->name, s); return s; } } /* Rudimentary check to make sure someone hasn't typed "arg-set=" when they should have typed "arg=", etc. */ static void sanity_check_parameter (const char *filename, const xmlChar *node_name, parameter *p) { struct { gboolean id; gboolean label; gboolean string; gboolean low_label; gboolean high_label; gboolean low; gboolean high; gboolean value; gboolean arg; gboolean invert_p; gboolean arg_set; gboolean arg_unset; } allowed, require; memset (&allowed, 0, sizeof (allowed)); memset (&require, 0, sizeof (require)); switch (p->type) { case COMMAND: allowed.arg = TRUE; require.arg = TRUE; break; case FAKE: break; case DESCRIPTION: allowed.string = TRUE; break; case FAKEPREVIEW: break; case STRING: allowed.id = TRUE; require.id = TRUE; allowed.label = TRUE; require.label = TRUE; allowed.arg = TRUE; require.arg = TRUE; break; case FILENAME: allowed.id = TRUE; require.id = TRUE; allowed.label = TRUE; allowed.arg = TRUE; require.arg = TRUE; break; case SLIDER: allowed.id = TRUE; require.id = TRUE; allowed.label = TRUE; allowed.low_label = TRUE; allowed.high_label = TRUE; allowed.arg = TRUE; require.arg = TRUE; allowed.low = TRUE; /* require.low = TRUE; -- may be 0 */ allowed.high = TRUE; /* require.high = TRUE; -- may be 0 */ allowed.value = TRUE; /* require.value = TRUE; -- may be 0 */ allowed.invert_p = TRUE; break; case SPINBUTTON: allowed.id = TRUE; require.id = TRUE; allowed.label = TRUE; allowed.arg = TRUE; require.arg = TRUE; allowed.low = TRUE; /* require.low = TRUE; -- may be 0 */ allowed.high = TRUE; /* require.high = TRUE; -- may be 0 */ allowed.value = TRUE; /* require.value = TRUE; -- may be 0 */ allowed.invert_p = TRUE; break; case BOOLEAN: allowed.id = TRUE; require.id = TRUE; allowed.label = TRUE; allowed.arg_set = TRUE; allowed.arg_unset = TRUE; break; case SELECT: allowed.id = TRUE; require.id = TRUE; break; case SELECT_OPTION: allowed.id = TRUE; allowed.label = TRUE; require.label = TRUE; allowed.arg_set = TRUE; break; default: abort(); break; } # define WARN(STR) \ fprintf (stderr, "%s: %s: " STR " in <%s%s id=\"%s\">\n", \ blurb(), filename, node_name, \ (!strcmp((char *) node_name, "number") \ ? (p->type == SPINBUTTON ? " type=spinbutton" : " type=slider")\ : ""), \ (p->id ? (char *) p->id : "")) # define CHECK(SLOT,NAME) \ if (p->SLOT && !allowed.SLOT) \ WARN ("\"" NAME "\" is not a valid option"); \ if (!p->SLOT && require.SLOT) \ WARN ("\"" NAME "\" is required") CHECK (id, "id"); CHECK (label, "_label"); CHECK (string, "(body text)"); CHECK (low_label, "_low-label"); CHECK (high_label, "_high-label"); CHECK (low, "low"); CHECK (high, "high"); CHECK (value, "default"); CHECK (arg, "arg"); CHECK (invert_p, "convert"); CHECK (arg_set, "arg-set"); CHECK (arg_unset, "arg-unset"); # undef CHECK # undef WARN if (p->type == SELECT) sanity_check_menu_options (filename, node_name, p); } static void sanity_check_menu_options (const char *filename, const xmlChar *node_name, parameter *p) { GList *opts; int noptions = 0; int nulls = 0; char *prefix = 0; /* fprintf (stderr, "\n## %s\n", p->id);*/ for (opts = p->options; opts; opts = opts->next) { parameter *s = (parameter *) opts->data; if (!s->arg_set) nulls++; noptions++; if (s->arg_set) { char *a = strdup ((char *) s->arg_set); char *spc = strchr (a, ' '); if (spc) *spc = 0; if (prefix) { if (strcmp (a, prefix)) fprintf (stderr, "%s: %s: both \"%s\" and \"%s\" used in \n", blurb(), filename, p->id); } /* "text" nodes show up for all the non-tag text in the file, including all the newlines between tags. Warn if there is text there that is not whitespace. */ static void sanity_check_text_node (const char *filename, const xmlNodePtr node) { const char *body = (const char *) node->content; if (node->type != XML_TEXT_NODE) abort(); while (isspace (*body)) body++; if (*body) fprintf (stderr, "%s: WARNING: %s: random text present: \"%s\"\n", blurb(), filename, body); } /* Returns a list of strings, every switch mentioned in the parameters. The strings must be freed. */ static GList * get_all_switches (const char *filename, GList *parms) { GList *switches = 0; GList *p; for (p = parms; p; p = p->next) { parameter *pp = (parameter *) p->data; if (pp->type == SELECT) { GList *list2 = get_all_switches (filename, pp->options); switches = g_list_concat (switches, list2); } if (pp->arg && *pp->arg) switches = g_list_append (switches, strdup ((char *) pp->arg)); if (pp->arg_set && *pp->arg_set) switches = g_list_append (switches, strdup ((char *) pp->arg_set)); if (pp->arg_unset && *pp->arg_unset) switches = g_list_append (switches, strdup ((char *) pp->arg_unset)); } return switches; } /* Ensures that no switch is mentioned more than once. */ static void sanity_check_parameters (const char *filename, GList *parms) { GList *list = get_all_switches (filename, parms); GList *p; for (p = list; p; p = p->next) { char *sw = (char *) p->data; GList *p2; if (*sw != '-' && *sw != '+') fprintf (stderr, "%s: %s: switch does not begin with hyphen \"%s\"\n", blurb(), filename, sw); for (p2 = p->next; p2; p2 = p2->next) { const char *sw2 = (const char *) p2->data; if (!strcmp (sw, sw2)) fprintf (stderr, "%s: %s: duplicate switch \"%s\"\n", blurb(), filename, sw); } free (sw); } g_list_free (list); } /* Helper for make_parameters() */ static GList * make_parameters_1 (const char *filename, xmlNodePtr node, GtkWidget *parent) { GList *list = 0; for (; node; node = node->next) { const char *name = (char *) node->name; if (!strcmp (name, "hgroup") || !strcmp (name, "vgroup")) { GtkWidget *box = (*name == 'h' ? gtk_hbox_new (FALSE, 0) : gtk_vbox_new (FALSE, 0)); GList *list2; gtk_widget_show (box); gtk_box_pack_start (GTK_BOX (parent), box, FALSE, FALSE, 0); list2 = make_parameters_1 (filename, node->xmlChildrenNode, box); if (list2) list = g_list_concat (list, list2); } else { parameter *p = make_parameter (filename, node); if (p) { list = g_list_append (list, p); make_parameter_widget (filename, p, parent); } } } return list; } /* Calls make_parameter() and make_parameter_widget() on each relevant tag in the XML tree. Also handles the "hgroup" and "vgroup" flags. Returns a GList of `parameter' objects. */ static GList * make_parameters (const char *filename, xmlNodePtr node, GtkWidget *parent) { for (; node; node = node->next) { if (node->type == XML_ELEMENT_NODE && !strcmp ((char *) node->name, "screensaver")) return make_parameters_1 (filename, node->xmlChildrenNode, parent); } return 0; } static gfloat invert_range (gfloat low, gfloat high, gfloat value) { gfloat range = high-low; gfloat off = value-low; return (low + (range - off)); } static GtkAdjustment * make_adjustment (const char *filename, parameter *p) { float range = (p->high - p->low); float value = (p->invert_p ? invert_range (p->low, p->high, p->value) : p->value); gfloat si = (p->high - p->low) / 100; gfloat pi = (p->high - p->low) / 10; gfloat page_size = ((p->type == SLIDER) ? 1 : 0); if (p->value < p->low || p->value > p->high) { if (debug_p && p->integer_p) fprintf (stderr, "%s: WARNING: %s: %d is not in range [%d, %d]\n", blurb(), filename, (int) p->value, (int) p->low, (int) p->high); else if (debug_p) fprintf (stderr, "%s: WARNING: %s: %.2f is not in range [%.2f, %.2f]\n", blurb(), filename, p->value, p->low, p->high); value = (value < p->low ? p->low : p->high); } #if 0 else if (debug_p && p->value < 1000 && p->high >= 10000) { if (p->integer_p) fprintf (stderr, "%s: WARNING: %s: %d is suspicious for range [%d, %d]\n", blurb(), filename, (int) p->value, (int) p->low, (int) p->high); else fprintf (stderr, "%s: WARNING: %s: %.2f is suspicious for range [%.2f, %.2f]\n", blurb(), filename, p->value, p->low, p->high); } #endif /* 0 */ si = (int) (si + 0.5); pi = (int) (pi + 0.5); if (si < 1) si = 1; if (pi < 1) pi = 1; if (range <= 500) si = 1; return GTK_ADJUSTMENT (gtk_adjustment_new (value, p->low, p->high + page_size, si, pi, page_size)); } static void set_widget_min_width (GtkWidget *w, int width) { GtkRequisition req; gtk_widget_size_request (GTK_WIDGET (w), &req); if (req.width < width) gtk_widget_set_size_request (GTK_WIDGET (w), width, -1); } /* If we're inside a vbox, we need to put an hbox in it, or labels appear on top instead of to the left, and things stretch to the full width of the window. */ static GtkWidget * insert_fake_hbox (GtkWidget *parent) { if (GTK_IS_VBOX (parent)) { GtkWidget *hbox = gtk_hbox_new (FALSE, 0); gtk_box_pack_start (GTK_BOX (parent), hbox, FALSE, FALSE, 4); gtk_widget_show (hbox); return hbox; } return parent; } static void link_atk_label_to_widget(GtkWidget *label, GtkWidget *widget) { AtkObject *atk_label = gtk_widget_get_accessible (label); AtkObject *atk_widget = gtk_widget_get_accessible (widget); atk_object_add_relationship (atk_label, ATK_RELATION_LABEL_FOR, atk_widget); atk_object_add_relationship (atk_widget, ATK_RELATION_LABELLED_BY, atk_label); } /* Given a `parameter' struct, allocates an appropriate GtkWidget for it, and stores it in `p->widget'. `parent' must be a GtkBox. */ static void make_parameter_widget (const char *filename, parameter *p, GtkWidget *parent) { const char *label = (char *) p->label; if (p->widget) return; switch (p->type) { case STRING: { GtkWidget *entry = gtk_entry_new (); parent = insert_fake_hbox (parent); if (label) { GtkWidget *w = gtk_label_new (_(label)); link_atk_label_to_widget (w, entry); gtk_label_set_justify (GTK_LABEL (w), GTK_JUSTIFY_RIGHT); gtk_misc_set_alignment (GTK_MISC (w), 1.0, 0.5); set_widget_min_width (GTK_WIDGET (w), MIN_LABEL_WIDTH); gtk_widget_show (w); gtk_box_pack_start (GTK_BOX (parent), w, FALSE, FALSE, 4); } p->widget = entry; if (p->string) gtk_entry_set_text (GTK_ENTRY (p->widget), (char *) p->string); gtk_box_pack_start (GTK_BOX (parent), p->widget, FALSE, FALSE, 4); break; } case FILENAME: { GtkWidget *L = gtk_label_new (label ? _(label) : ""); GtkWidget *entry = gtk_entry_new (); GtkWidget *button = gtk_button_new_with_label (_("Browse...")); link_atk_label_to_widget (L, entry); gtk_widget_show (entry); gtk_widget_show (button); p->widget = entry; gtk_signal_connect (GTK_OBJECT (button), "clicked", GTK_SIGNAL_FUNC (browse_button_cb), (gpointer) entry); gtk_label_set_justify (GTK_LABEL (L), GTK_JUSTIFY_RIGHT); gtk_misc_set_alignment (GTK_MISC (L), 1.0, 0.5); set_widget_min_width (GTK_WIDGET (L), MIN_LABEL_WIDTH); gtk_widget_show (L); if (p->string) gtk_entry_set_text (GTK_ENTRY (entry), (char *) p->string); parent = insert_fake_hbox (parent); gtk_box_pack_start (GTK_BOX (parent), L, FALSE, FALSE, 4); gtk_box_pack_start (GTK_BOX (parent), entry, TRUE, TRUE, 4); gtk_box_pack_start (GTK_BOX (parent), button, FALSE, FALSE, 4); break; } case SLIDER: { GtkAdjustment *adj = make_adjustment (filename, p); GtkWidget *scale = gtk_hscale_new (adj); GtkWidget *labelw = 0; if (label) { labelw = gtk_label_new (_(label)); link_atk_label_to_widget (labelw, scale); gtk_label_set_justify (GTK_LABEL (labelw), GTK_JUSTIFY_LEFT); gtk_misc_set_alignment (GTK_MISC (labelw), 0.0, 0.5); set_widget_min_width (GTK_WIDGET (labelw), MIN_LABEL_WIDTH); gtk_widget_show (labelw); gtk_box_pack_start (GTK_BOX (parent), labelw, FALSE, FALSE, 2); } /* Do this after 'labelw' so that it appears above, not to left. */ parent = insert_fake_hbox (parent); if (p->low_label) { GtkWidget *w = gtk_label_new (_((char *) p->low_label)); link_atk_label_to_widget (w, scale); gtk_label_set_justify (GTK_LABEL (w), GTK_JUSTIFY_RIGHT); gtk_misc_set_alignment (GTK_MISC (w), 1.0, 0.5); set_widget_min_width (GTK_WIDGET (w), MIN_LABEL_WIDTH); gtk_widget_show (w); gtk_box_pack_start (GTK_BOX (parent), w, FALSE, FALSE, 4); } gtk_scale_set_value_pos (GTK_SCALE (scale), GTK_POS_BOTTOM); gtk_scale_set_draw_value (GTK_SCALE (scale), debug_p); gtk_scale_set_digits (GTK_SCALE (scale), (p->integer_p ? 0 : 2)); set_widget_min_width (GTK_WIDGET (scale), MIN_SLIDER_WIDTH); gtk_box_pack_start (GTK_BOX (parent), scale, FALSE, FALSE, 4); gtk_widget_show (scale); if (p->high_label) { GtkWidget *w = gtk_label_new (_((char *) p->high_label)); link_atk_label_to_widget (w, scale); gtk_label_set_justify (GTK_LABEL (w), GTK_JUSTIFY_LEFT); gtk_misc_set_alignment (GTK_MISC (w), 0.0, 0.5); set_widget_min_width (GTK_WIDGET (w), MIN_LABEL_WIDTH); gtk_widget_show (w); gtk_box_pack_start (GTK_BOX (parent), w, FALSE, FALSE, 4); } p->widget = scale; break; } case SPINBUTTON: { GtkAdjustment *adj = make_adjustment (filename, p); GtkWidget *spin = gtk_spin_button_new (adj, 15, 0); gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (spin), TRUE); gtk_spin_button_set_snap_to_ticks (GTK_SPIN_BUTTON (spin), TRUE); gtk_spin_button_set_value (GTK_SPIN_BUTTON (spin), GET_ADJ_VALUE(adj)); set_widget_min_width (GTK_WIDGET (spin), MIN_SPINBUTTON_WIDTH); if (label) { GtkWidget *w = gtk_label_new (_(label)); link_atk_label_to_widget (w, spin); gtk_label_set_justify (GTK_LABEL (w), GTK_JUSTIFY_RIGHT); gtk_misc_set_alignment (GTK_MISC (w), 1.0, 0.5); set_widget_min_width (GTK_WIDGET (w), MIN_LABEL_WIDTH); gtk_widget_show (w); parent = insert_fake_hbox (parent); gtk_box_pack_start (GTK_BOX (parent), w, FALSE, FALSE, 4); } gtk_widget_show (spin); gtk_box_pack_start (GTK_BOX (parent), spin, FALSE, FALSE, 4); p->widget = spin; break; } case BOOLEAN: { p->widget = gtk_check_button_new_with_label (_(label)); /* Let these stretch -- doesn't hurt. parent = insert_fake_hbox (parent); */ gtk_box_pack_start (GTK_BOX (parent), p->widget, FALSE, FALSE, 4); break; } case SELECT: { GtkWidget *opt = gtk_option_menu_new (); GtkWidget *menu = gtk_menu_new (); GList *opts; for (opts = p->options; opts; opts = opts->next) { parameter *s = (parameter *) opts->data; GtkWidget *i = gtk_menu_item_new_with_label (_((char *) s->label)); gtk_widget_show (i); gtk_menu_append (GTK_MENU (menu), i); } gtk_option_menu_set_menu (GTK_OPTION_MENU (opt), menu); p->widget = opt; parent = insert_fake_hbox (parent); gtk_box_pack_start (GTK_BOX (parent), p->widget, FALSE, FALSE, 4); break; } case COMMAND: case FAKE: case DESCRIPTION: case FAKEPREVIEW: break; default: abort(); } if (p->widget) { gtk_widget_set_name (p->widget, (char *) p->id); gtk_widget_show (p->widget); } } /* File selection. Absurdly, there is no GTK file entry widget, only a GNOME one, so in order to avoid depending on GNOME in this code, we have to do it ourselves. */ /* cancel button on GtkFileSelection: user_data unused */ static void file_sel_cancel (GtkWidget *button, gpointer user_data) { GtkWidget *dialog = button; while (GET_PARENT (dialog)) dialog = GET_PARENT (dialog); gtk_widget_destroy (dialog); } /* ok button on GtkFileSelection: user_data is the corresponding GtkEntry */ static void file_sel_ok (GtkWidget *button, gpointer user_data) { GtkWidget *entry = GTK_WIDGET (user_data); GtkWidget *dialog = button; const char *path; while (GET_PARENT (dialog)) dialog = GET_PARENT (dialog); gtk_widget_hide (dialog); path = gtk_file_selection_get_filename (GTK_FILE_SELECTION (dialog)); /* apparently one doesn't free `path' */ gtk_entry_set_text (GTK_ENTRY (entry), path); gtk_entry_set_position (GTK_ENTRY (entry), strlen (path)); gtk_widget_destroy (dialog); } /* WM close on GtkFileSelection: user_data unused */ static void file_sel_close (GtkWidget *widget, GdkEvent *event, gpointer user_data) { file_sel_cancel (widget, user_data); } /* "Browse" button: user_data is the corresponding GtkEntry */ static void browse_button_cb (GtkButton *button, gpointer user_data) { GtkWidget *entry = GTK_WIDGET (user_data); const char *text = gtk_entry_get_text (GTK_ENTRY (entry)); GtkFileSelection *selector = GTK_FILE_SELECTION (gtk_file_selection_new (_("Select file."))); gtk_file_selection_set_filename (selector, text); gtk_signal_connect (GTK_OBJECT (selector->ok_button), "clicked", GTK_SIGNAL_FUNC (file_sel_ok), (gpointer) entry); gtk_signal_connect (GTK_OBJECT (selector->cancel_button), "clicked", GTK_SIGNAL_FUNC (file_sel_cancel), (gpointer) entry); gtk_signal_connect (GTK_OBJECT (selector), "delete_event", GTK_SIGNAL_FUNC (file_sel_close), (gpointer) entry); gtk_window_set_modal (GTK_WINDOW (selector), TRUE); gtk_widget_show (GTK_WIDGET (selector)); } /* Converting to and from command-lines */ /* Returns a copy of string that has been quoted according to shell rules: it may have been wrapped in "" and had some characters backslashed; or it may be unchanged. */ static char * shell_quotify (const char *string) { char *string2 = (char *) malloc ((strlen (string) * 2) + 10); const char *in; char *out; int need_quotes = 0; int in_length = 0; out = string2; *out++ = '"'; for (in = string; *in; in++) { in_length++; if (*in == '!' || *in == '"' || *in == '$') { need_quotes = 1; *out++ = '\\'; *out++ = *in; } else if (*in <= ' ' || *in >= 127 || *in == '\'' || *in == '#' || *in == '%' || *in == '&' || *in == '(' || *in == ')' || *in == '*') { need_quotes = 1; *out++ = *in; } else *out++ = *in; } *out++ = '"'; *out = 0; if (in_length == 0) need_quotes = 1; if (need_quotes) return (string2); free (string2); return strdup (string); } /* Modify the string in place to remove wrapping double-quotes and interior backslashes. */ static void de_stringify (char *s) { char q = s[0]; if (q != '\'' && q != '\"' && q != '`') abort(); memmove (s, s+1, strlen (s)); while (*s && *s != q) { if (*s == '\\') memmove (s, s+1, strlen (s)+1); s++; } if (*s != q) abort(); *s = 0; } /* Substitutes a shell-quotified version of `value' into `p->arg' at the place where the `%' character appeared. */ static char * format_switch (parameter *p, const char *value) { char *fmt = (char *) p->arg; char *v2; char *result, *s; if (!fmt || !value) return 0; v2 = shell_quotify (value); result = (char *) malloc (strlen (fmt) + strlen (v2) + 10); s = result; for (; *fmt; fmt++) if (*fmt != '%') *s++ = *fmt; else { strcpy (s, v2); s += strlen (s); } *s = 0; free (v2); return result; } /* Maps a `parameter' to a command-line switch. Returns 0 if it can't, or if the parameter has the default value. */ static char * parameter_to_switch (parameter *p) { switch (p->type) { case COMMAND: if (p->arg) return strdup ((char *) p->arg); else return 0; break; case STRING: case FILENAME: if (!p->widget) return 0; { const char *s = gtk_entry_get_text (GTK_ENTRY (p->widget)); char *v; if (!strcmp ((s ? s : ""), (p->string ? (char *) p->string : ""))) v = 0; /* same as default */ else v = format_switch (p, s); /* don't free `s' */ return v; } case SLIDER: case SPINBUTTON: if (!p->widget) return 0; { GtkAdjustment *adj = (p->type == SLIDER ? gtk_range_get_adjustment (GTK_RANGE (p->widget)) : gtk_spin_button_get_adjustment (GTK_SPIN_BUTTON (p->widget))); char buf[255]; char *s1; float value = (p->invert_p ? invert_range (GET_ADJ_LOWER(adj), GET_ADJ_UPPER(adj), GET_ADJ_VALUE(adj)) - 1 : GET_ADJ_VALUE(adj)); if (value == p->value) /* same as default */ return 0; if (p->integer_p) sprintf (buf, "%d", (int) (value + (value > 0 ? 0.5 : -0.5))); else sprintf (buf, "%.4f", value); s1 = strchr (buf, '.'); if (s1) { char *s2 = s1 + strlen(s1) - 1; while (s2 > s1 && *s2 == '0') /* lose trailing zeroes */ *s2-- = 0; if (s2 >= s1 && *s2 == '.') /* lose trailing decimal */ *s2-- = 0; } return format_switch (p, buf); } case BOOLEAN: if (!p->widget) return 0; { GtkToggleButton *b = GTK_TOGGLE_BUTTON (p->widget); const char *s = (gtk_toggle_button_get_active (b) ? (char *) p->arg_set : (char *) p->arg_unset); if (s) return strdup (s); else return 0; } case SELECT: if (!p->widget) return 0; { GtkOptionMenu *opt = GTK_OPTION_MENU (p->widget); GtkMenu *menu = GTK_MENU (gtk_option_menu_get_menu (opt)); GtkWidget *selected = gtk_menu_get_active (menu); GList *kids = gtk_container_children (GTK_CONTAINER (menu)); int menu_elt = g_list_index (kids, (gpointer) selected); GList *ol = g_list_nth (p->options, menu_elt); parameter *o = (ol ? (parameter *) ol->data : 0); const char *s; if (!o) abort(); if (o->type != SELECT_OPTION) abort(); s = (char *) o->arg_set; if (s) return strdup (s); else return 0; } default: if (p->widget) abort(); else return 0; } } /* Maps a GList of `parameter' objects to a complete command-line string. All arguments will be properly quoted. */ static char * parameters_to_cmd_line (GList *parms, gboolean default_p) { int L = g_list_length (parms); int LL = 0; char **strs = (char **) calloc (sizeof (*parms), L); char *result; char *out; int i, j; for (i = 0, j = 0; parms; parms = parms->next, i++) { parameter *p = (parameter *) parms->data; if (!default_p || p->type == COMMAND) { char *s = parameter_to_switch (p); strs[j++] = s; LL += (s ? strlen(s) : 0) + 1; } } result = (char *) malloc (LL + 10); out = result; for (i = 0; i < j; i++) if (strs[i]) { strcpy (out, strs[i]); out += strlen (out); *out++ = ' '; free (strs[i]); } *out = 0; while (out > result && out[-1] == ' ') /* strip trailing spaces */ *(--out) = 0; free (strs); return result; } /* Returns a GList of the tokens the string, using shell syntax; Quoted strings are handled as a single token. */ static GList * tokenize_command_line (const char *cmd) { GList *result = 0; const char *s = cmd; while (*s) { const char *start; char *ss; for (; isspace(*s); s++); /* skip whitespace */ start = s; if (*s == '\'' || *s == '\"' || *s == '`') { char q = *s; s++; while (*s && *s != q) /* skip to matching quote */ { if (*s == '\\' && s[1]) /* allowing backslash quoting */ s++; s++; } s++; } else { while (*s && (! (isspace(*s) || *s == '\'' || *s == '\"' || *s == '`'))) s++; } if (s > start) { ss = (char *) malloc ((s - start) + 1); strncpy (ss, start, s-start); ss[s-start] = 0; if (*ss == '\'' || *ss == '\"' || *ss == '`') de_stringify (ss); result = g_list_append (result, ss); } } return result; } static void parameter_set_switch (parameter *, gpointer value); static gboolean parse_command_line_into_parameters_1 (const char *filename, GList *parms, const char *option, const char *value, parameter *parent); /* Parses the command line, and flushes those options down into the `parameter' structs in the list. */ static void parse_command_line_into_parameters (const char *filename, const char *cmd, GList *parms) { GList *tokens = tokenize_command_line (cmd); GList *rest; for (rest = tokens; rest; rest = rest->next) { char *option = rest->data; rest->data = 0; if (option[0] != '-' && option[0] != '+') { if (debug_p) fprintf (stderr, "%s: WARNING: %s: not a switch: \"%s\"\n", blurb(), filename, option); } else { char *value = 0; if (rest->next) /* pop off the arg to this option */ { char *s = (char *) rest->next->data; /* the next token is the next switch iff it matches "-[a-z]". (To avoid losing on "-x -3.1".) */ if (s && (s[0] != '-' || !isalpha(s[1]))) { value = s; rest->next->data = 0; rest = rest->next; } } parse_command_line_into_parameters_1 (filename, parms, option, value, 0); if (value) free (value); free (option); } } g_list_free (tokens); } static gboolean compare_opts (const char *option, const char *value, const char *template) { int ol = strlen (option); char *c; if (strncmp (option, template, ol)) return FALSE; if (template[ol] != (value ? ' ' : 0)) return FALSE; /* At this point, we have a match against "option". If template contains a %, we're done. Else, compare against "value" too. */ c = strchr (template, '%'); if (c) return TRUE; if (!value) return (template[ol] == 0); if (strcmp (template + ol + 1, value)) return FALSE; return TRUE; } static gboolean parse_command_line_into_parameters_1 (const char *filename, GList *parms, const char *option, const char *value, parameter *parent) { GList *p; parameter *match = 0; gint which = -1; gint index = 0; for (p = parms; p; p = p->next) { parameter *pp = (parameter *) p->data; which = -99; if (pp->type == SELECT) { if (parse_command_line_into_parameters_1 (filename, pp->options, option, value, pp)) { which = -2; match = pp; } } else if (pp->arg) { if (compare_opts (option, value, (char *) pp->arg)) { which = -1; match = pp; } } else if (pp->arg_set) { if (compare_opts (option, value, (char *) pp->arg_set)) { which = 1; match = pp; } } else if (pp->arg_unset) { if (compare_opts (option, value, (char *) pp->arg_unset)) { which = 0; match = pp; } } if (match) break; index++; } if (!match) { if (debug_p && !parent) fprintf (stderr, "%s: WARNING: %s: no match for %s %s\n", blurb(), filename, option, (value ? value : "")); return FALSE; } switch (match->type) { case STRING: case FILENAME: case SLIDER: case SPINBUTTON: if (which != -1) abort(); parameter_set_switch (match, (gpointer) value); break; case BOOLEAN: if (which != 0 && which != 1) abort(); parameter_set_switch (match, GINT_TO_POINTER(which)); break; case SELECT_OPTION: if (which != 1) abort(); parameter_set_switch (parent, GINT_TO_POINTER(index)); break; default: break; } return TRUE; } /* Set the parameter's value. For STRING, FILENAME, SLIDER, and SPINBUTTON, `value' is a char*. For BOOLEAN and SELECT, `value' is an int. */ static void parameter_set_switch (parameter *p, gpointer value) { if (p->type == SELECT_OPTION) abort(); if (!p->widget) return; switch (p->type) { case STRING: case FILENAME: { gtk_entry_set_text (GTK_ENTRY (p->widget), (char *) value); break; } case SLIDER: case SPINBUTTON: { GtkAdjustment *adj = (p->type == SLIDER ? gtk_range_get_adjustment (GTK_RANGE (p->widget)) : gtk_spin_button_get_adjustment (GTK_SPIN_BUTTON (p->widget))); float f; char c; if (1 == sscanf ((char *) value, "%f %c", &f, &c)) { if (p->invert_p) f = invert_range (GET_ADJ_LOWER(adj), GET_ADJ_UPPER(adj), f) - 1; gtk_adjustment_set_value (adj, f); } break; } case BOOLEAN: { GtkToggleButton *b = GTK_TOGGLE_BUTTON (p->widget); gtk_toggle_button_set_active (b, GPOINTER_TO_INT(value)); break; } case SELECT: { gtk_option_menu_set_history (GTK_OPTION_MENU (p->widget), GPOINTER_TO_INT(value)); break; } default: abort(); } } static void restore_defaults (const char *progname, GList *parms) { for (; parms; parms = parms->next) { parameter *p = (parameter *) parms->data; if (!p->widget) continue; switch (p->type) { case STRING: case FILENAME: { gtk_entry_set_text (GTK_ENTRY (p->widget), (p->string ? (char *) p->string : "")); break; } case SLIDER: case SPINBUTTON: { GtkAdjustment *adj = (p->type == SLIDER ? gtk_range_get_adjustment (GTK_RANGE (p->widget)) : gtk_spin_button_get_adjustment (GTK_SPIN_BUTTON (p->widget))); float value = (p->invert_p ? invert_range (p->low, p->high, p->value) : p->value); gtk_adjustment_set_value (adj, value); break; } case BOOLEAN: { /* A toggle button should be on by default if it inserts nothing into the command line when on. E.g., it should be on if `arg_set' is null. */ gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (p->widget), (!p->arg_set || !*p->arg_set)); break; } case SELECT: { GtkOptionMenu *opt = GTK_OPTION_MENU (p->widget); GList *opts; int selected = 0; int index; for (opts = p->options, index = 0; opts; opts = opts->next, index++) { parameter *s = (parameter *) opts->data; /* The default menu item is the first one with no `arg_set' field. */ if (!s->arg_set) { selected = index; break; } } gtk_option_menu_set_history (GTK_OPTION_MENU (opt), selected); break; } default: abort(); } } } /* Documentation strings */ static char * get_description (GList *parms, gboolean verbose_p) { parameter *doc = 0; for (; parms; parms = parms->next) { parameter *p = (parameter *) parms->data; if (p->type == DESCRIPTION) { doc = p; break; } } if (!doc || !doc->string) return 0; else { char *d = strdup ((char *) doc->string); char *s; char *p; for (s = d; *s; s++) if (s[0] == '\n') { if (s[1] == '\n') /* blank line: leave it */ s++; else if (s[1] == ' ' || s[1] == '\t') s++; /* next line is indented: leave newline */ else if (!strncmp(s+1, "http:", 5)) s++; /* next line begins a URL: leave newline */ else s[0] = ' '; /* delete newline to un-fold this line */ } /* strip off leading whitespace on first line only */ for (s = d; *s && (*s == ' ' || *s == '\t'); s++) ; while (*s == '\n') /* strip leading newlines */ s++; if (s != d) memmove (d, s, strlen(s)+1); /* strip off trailing whitespace and newlines */ { int L = strlen(d); while (L && isspace(d[L-1])) d[--L] = 0; } /* strip off duplicated whitespaces */ for (s = d; *s; s++) if (s[0] == ' ') { p = s+1; while (*s == ' ') s++; if (*p && (s != p)) memmove (p, s, strlen(s)+1); } #if 0 if (verbose_p) { fprintf (stderr, "%s: text read is \"%s\"\n", blurb(),doc->string); fprintf (stderr, "%s: description is \"%s\"\n", blurb(), d); fprintf (stderr, "%s: translation is \"%s\"\n", blurb(), _(d)); } #endif /* 0 */ return (d); } } /* External interface. */ static conf_data * load_configurator_1 (const char *program, const char *arguments, gboolean verbose_p) { const char *dir = hack_configuration_path; char *base_program; int L = strlen (dir); char *file; char *s; FILE *f; conf_data *data; if (L == 0) return 0; base_program = strrchr(program, '/'); if (base_program) base_program++; if (!base_program) base_program = (char *) program; file = (char *) malloc (L + strlen (base_program) + 10); data = (conf_data *) calloc (1, sizeof(*data)); strcpy (file, dir); if (file[L-1] != '/') file[L++] = '/'; strcpy (file+L, base_program); for (s = file+L; *s; s++) if (*s == '/' || *s == ' ') *s = '_'; else if (isupper (*s)) *s = tolower (*s); strcat (file+L, ".xml"); f = fopen (file, "r"); if (f) { int res, size = 1024; char chars[1024]; xmlParserCtxtPtr ctxt; xmlDocPtr doc = 0; GtkWidget *vbox0; GList *parms; if (verbose_p) fprintf (stderr, "%s: reading %s...\n", blurb(), file); res = fread (chars, 1, 4, f); if (res <= 0) { free (data); data = 0; goto DONE; } ctxt = xmlCreatePushParserCtxt(NULL, NULL, chars, res, file); while ((res = fread(chars, 1, size, f)) > 0) xmlParseChunk (ctxt, chars, res, 0); xmlParseChunk (ctxt, chars, 0, 1); doc = ctxt->myDoc; xmlFreeParserCtxt (ctxt); fclose (f); /* Parsed the XML file. Now make some widgets. */ vbox0 = gtk_vbox_new (FALSE, 0); gtk_widget_show (vbox0); parms = make_parameters (file, doc->xmlRootNode, vbox0); sanity_check_parameters (file, parms); xmlFreeDoc (doc); restore_defaults (program, parms); if (arguments && *arguments) parse_command_line_into_parameters (program, arguments, parms); data->widget = vbox0; data->parameters = parms; data->description = get_description (parms, verbose_p); } else { parameter *p; if (verbose_p) fprintf (stderr, "%s: %s does not exist.\n", blurb(), file); p = calloc (1, sizeof(*p)); p->type = COMMAND; p->arg = (xmlChar *) strdup (arguments); data->parameters = g_list_append (0, (gpointer) p); } data->progname = strdup (program); DONE: free (file); return data; } static void split_command_line (const char *full_command_line, char **prog_ret, char **args_ret) { char *line = strdup (full_command_line); char *prog; char *args; char *s; prog = line; s = line; while (*s) { if (isspace (*s)) { *s = 0; s++; while (isspace (*s)) s++; break; } else if (*s == '=') /* if the leading word contains an "=", skip it. */ { while (*s && !isspace (*s)) s++; while (isspace (*s)) s++; prog = s; } s++; } args = s; *prog_ret = strdup (prog); *args_ret = strdup (args); free (line); } conf_data * load_configurator (const char *full_command_line, gboolean verbose_p) { char *prog; char *args; conf_data *cd; debug_p = verbose_p; split_command_line (full_command_line, &prog, &args); cd = load_configurator_1 (prog, args, verbose_p); free (prog); free (args); return cd; } char * get_configurator_command_line (conf_data *data, gboolean default_p) { char *args = parameters_to_cmd_line (data->parameters, default_p); char *result = (char *) malloc (strlen (data->progname) + strlen (args) + 2); strcpy (result, data->progname); strcat (result, " "); strcat (result, args); free (args); return result; } void set_configurator_command_line (conf_data *data, const char *full_command_line) { char *prog; char *args; split_command_line (full_command_line, &prog, &args); if (data->progname) free (data->progname); data->progname = prog; restore_defaults (prog, data->parameters); parse_command_line_into_parameters (prog, args, data->parameters); free (args); } void free_conf_data (conf_data *data) { if (data->parameters) { GList *rest; for (rest = data->parameters; rest; rest = rest->next) { free_parameter ((parameter *) rest->data); rest->data = 0; } g_list_free (data->parameters); data->parameters = 0; } if (data->widget) gtk_widget_destroy (data->widget); if (data->progname) free (data->progname); if (data->description) free (data->description); memset (data, ~0, sizeof(*data)); free (data); } #endif /* HAVE_GTK && HAVE_XML -- whole file */ xscreensaver-5.36/driver/passwd-pwent.c000644 000767 000024 00000016426 12701612237 020243 0ustar00jwzstaff000000 000000 /* passwd-pwent.c --- verifying typed passwords with the OS. * xscreensaver, Copyright (c) 1993-1998 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. */ #ifdef HAVE_CONFIG_H # include "config.h" #endif #ifndef NO_LOCKING /* whole file */ #include #ifdef HAVE_UNISTD_H # include #endif #ifdef HAVE_CRYPT_H # include #endif #include #include #include #ifndef VMS # include # include #else /* VMS */ # include "vms-pwd.h" #endif /* VMS */ #ifdef __bsdi__ # include # if _BSDI_VERSION >= 199608 # define BSD_AUTH # endif #endif /* __bsdi__ */ #if defined(HAVE_SHADOW_PASSWD) /* passwds live in /etc/shadow */ # include # define PWTYPE struct spwd * # define PWPSLOT sp_pwdp # define GETPW getspnam #elif defined(HAVE_ENHANCED_PASSWD) /* passwds live in /tcb/files/auth/ */ /* M.Matsumoto */ # include # include # define PWTYPE struct pr_passwd * # define PWPSLOT ufld.fd_encrypt # define GETPW getprpwnam #elif defined(HAVE_ADJUNCT_PASSWD) # include # include # include # define PWTYPE struct passwd_adjunct * # define PWPSLOT pwa_passwd # define GETPW getpwanam #elif defined(HAVE_HPUX_PASSWD) # include # include # define PWTYPE struct s_passwd * # define PWPSLOT pw_passwd # define GETPW getspwnam # define HAVE_BIGCRYPT #endif /* blargh */ #undef Bool #undef True #undef False #define Bool int #define True 1 #define False 0 extern const char *blurb(void); static char *encrypted_root_passwd = 0; static char *encrypted_user_passwd = 0; #ifdef VMS # define ROOT "SYSTEM" #else # define ROOT "root" #endif #ifndef VMS Bool pwent_priv_init (int argc, char **argv, Bool verbose_p); Bool pwent_lock_init (int argc, char **argv, Bool verbose_p); Bool pwent_passwd_valid_p (const char *typed_passwd, Bool verbose_p); #endif #ifndef VMS static char * user_name (void) { /* I think that just checking $USER here is not the best idea. */ const char *u = 0; /* It has been reported that getlogin() returns the wrong user id on some very old SGI systems... And I've seen it return the string "rlogin" sometimes! Screw it, using getpwuid() should be enough... */ /* u = (char *) getlogin (); */ /* getlogin() fails if not attached to a terminal; in that case, use getpwuid(). (Note that in this case, we're not doing shadow stuff, since all we're interested in is the name, not the password. So that should still work. Right?) */ if (!u || !*u) { struct passwd *p = getpwuid (getuid ()); u = (p ? p->pw_name : 0); } return (u ? strdup(u) : 0); } #else /* VMS */ static char * user_name (void) { char *u = getenv("USER"); return (u ? strdup(u) : 0); } #endif /* VMS */ static Bool passwd_known_p (const char *pw) { return (pw && pw[0] != '*' && /* This would be sensible... */ strlen(pw) > 4); /* ...but this is what Solaris does. */ } static char * get_encrypted_passwd(const char *user) { char *result = 0; #ifdef PWTYPE if (user && *user && !result) { /* First check the shadow passwords. */ PWTYPE p = GETPW((char *) user); if (p && passwd_known_p (p->PWPSLOT)) result = strdup(p->PWPSLOT); } #endif /* PWTYPE */ if (user && *user && !result) { /* Check non-shadow passwords too. */ struct passwd *p = getpwnam(user); if (p && passwd_known_p (p->pw_passwd)) result = strdup(p->pw_passwd); } /* The manual for passwd(4) on HPUX 10.10 says: Password aging is put in effect for a particular user if his encrypted password in the password file is followed by a comma and a nonnull string of characters from the above alphabet. This string defines the "age" needed to implement password aging. So this means that passwd->pw_passwd isn't simply a string of cyphertext, it might have trailing junk. So, if there is a comma in the string, and that comma is beyond position 13, terminate the string before the comma. */ if (result && strlen(result) > 13) { char *s = strchr (result+13, ','); if (s) *s = 0; } #ifndef HAVE_PAM /* We only issue this warning if not compiled with support for PAM. If we're using PAM, it's not unheard of that normal pwent passwords would be unavailable. */ if (!result) fprintf (stderr, "%s: couldn't get password of \"%s\"\n", blurb(), (user ? user : "(null)")); #endif /* !HAVE_PAM */ return result; } /* This has to be called before we've changed our effective user ID, because it might need privileges to get at the encrypted passwords. Returns false if we weren't able to get any passwords, and therefore, locking isn't possible. (It will also have written to stderr.) */ #ifndef VMS Bool pwent_priv_init (int argc, char **argv, Bool verbose_p) { char *u; #ifdef HAVE_ENHANCED_PASSWD set_auth_parameters(argc, argv); check_auth_parameters(); #endif /* HAVE_DEC_ENHANCED */ u = user_name(); encrypted_user_passwd = get_encrypted_passwd(u); encrypted_root_passwd = get_encrypted_passwd(ROOT); if (u) free (u); if (encrypted_user_passwd) return True; else return False; } Bool pwent_lock_init (int argc, char **argv, Bool verbose_p) { if (encrypted_user_passwd) return True; else return False; } static Bool passwds_match_p (const char *cleartext, const char *ciphertext) { char *s = 0; /* note that on some systems, crypt() may return null */ s = (char *) crypt (cleartext, ciphertext); if (s && !strcmp (s, ciphertext)) return True; #ifdef HAVE_BIGCRYPT /* There seems to be no way to tell at runtime if an HP machine is in "trusted" mode, and thereby, which of crypt() or bigcrypt() we should be calling to compare passwords. So call them both, and see which one works. */ s = (char *) bigcrypt (cleartext, ciphertext); if (s && !strcmp (s, ciphertext)) return True; #endif /* HAVE_BIGCRYPT */ return False; } /* This can be called at any time, and says whether the typed password belongs to either the logged in user (real uid, not effective); or to root. */ Bool pwent_passwd_valid_p (const char *typed_passwd, Bool verbose_p) { if (encrypted_user_passwd && passwds_match_p (typed_passwd, encrypted_user_passwd)) return True; #ifdef ALLOW_ROOT_PASSWD /* do not allow root to have a null password. */ else if (typed_passwd[0] && encrypted_root_passwd && passwds_match_p (typed_passwd, encrypted_root_passwd)) return True; #endif /* ALLOW_ROOT_PASSWD */ else return False; } #else /* VMS */ Bool pwent_lock_init (int argc, char **argv, Bool verbose_p) { return True; } #endif /* VMS */ #endif /* NO_LOCKING -- whole file */ xscreensaver-5.36/driver/passwd-helper.c000644 000767 000024 00000010274 12701612237 020360 0ustar00jwzstaff000000 000000 /* passwd-helper.c --- verifying typed passwords with external helper program * written by Olaf Kirch * xscreensaver, Copyright (c) 1993-2005 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. */ /* The idea here is to be able to run xscreensaver without any setuid bits. * Password verification happens through an external program that you feed * your password to on stdin. The external command is invoked with a user * name argument. * * The external helper does whatever authentication is necessary. Currently, * SuSE uses "unix2_chkpwd", which is a variation of "unix_chkpwd" from the * PAM distribution. * * Normally, the password helper should just authenticate the calling user * (i.e. based on the caller's real uid). This is in order to prevent * brute-forcing passwords in a shadow environment. A less restrictive * approach would be to allow verifying other passwords as well, but always * with a 2 second delay or so. (Not sure what SuSE's "unix2_chkpwd" * currently does.) * -- Olaf Kirch , 16-Dec-2003 */ #ifdef HAVE_CONFIG_H # include "config.h" #endif #ifndef NO_LOCKING /* whole file */ #include /* not used for much... */ /* This file doesn't need the Xt headers, so stub these types out... */ #undef XtPointer #define XtAppContext void* #define XrmDatabase void* #define XtIntervalId void* #define XtPointer void* #define Widget void* #include "xscreensaver.h" #include #ifdef HAVE_UNISTD_H # include #endif #include #include #include #include #include #include static int ext_run (const char *user, const char *typed_passwd, int verbose_p) { int pfd[2], status; pid_t pid; if (pipe(pfd) < 0) return 0; if (verbose_p) fprintf (stderr, "%s: ext_run (%s, %s)\n", blurb(), PASSWD_HELPER_PROGRAM, user); block_sigchld(); if ((pid = fork()) < 0) { close(pfd[0]); close(pfd[1]); return 0; } if (pid == 0) { close(pfd[1]); if (pfd[0] != 0) dup2(pfd[0], 0); /* Helper is invoked as helper service-name [user] */ execlp(PASSWD_HELPER_PROGRAM, PASSWD_HELPER_PROGRAM, "xscreensaver", user, NULL); if (verbose_p) fprintf(stderr, "%s: %s\n", PASSWD_HELPER_PROGRAM, strerror(errno)); exit(1); } close(pfd[0]); /* Write out password to helper process */ if (!typed_passwd) typed_passwd = ""; write(pfd[1], typed_passwd, strlen(typed_passwd)); close(pfd[1]); while (waitpid(pid, &status, 0) < 0) { if (errno == EINTR) continue; if (verbose_p) fprintf(stderr, "%s: ext_run: waitpid failed: %s\n", blurb(), strerror(errno)); unblock_sigchld(); return 0; } unblock_sigchld(); if (!WIFEXITED(status) || WEXITSTATUS(status) != 0) return 0; return 1; } /* This can be called at any time, and says whether the typed password belongs to either the logged in user (real uid, not effective); or to root. */ int ext_passwd_valid_p (const char *typed_passwd, int verbose_p) { struct passwd *pw; int res = 0; if ((pw = getpwuid(getuid())) != NULL) res = ext_run (pw->pw_name, typed_passwd, verbose_p); endpwent(); #ifdef ALLOW_ROOT_PASSWD if (!res) res = ext_run ("root", typed_passwd, verbose_p); #endif /* ALLOW_ROOT_PASSWD */ return res; } int ext_priv_init (int argc, char **argv, int verbose_p) { /* Make sure the passwd helper exists */ if (access(PASSWD_HELPER_PROGRAM, X_OK) < 0) { fprintf(stderr, "%s: warning: %s does not exist.\n" "%s: password authentication via " "external helper will not work.\n", blurb(), PASSWD_HELPER_PROGRAM, blurb()); return 0; } return 1; } #endif /* NO_LOCKING -- whole file */ xscreensaver-5.36/driver/passwd-kerberos.c000644 000767 000024 00000016441 12701612237 020717 0ustar00jwzstaff000000 000000 /* kpasswd.c --- verify kerberos passwords. * written by Nat Lanza (magus@cs.cmu.edu) for * xscreensaver, Copyright (c) 1993-2004 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. */ #ifdef HAVE_CONFIG_H # include "config.h" #endif #ifndef NO_LOCKING /* whole file */ #include #ifdef HAVE_UNISTD_H # include #endif #include #include #include #include /* I'm not sure if this is exactly the right test... Might __APPLE__ be defined if this is apple hardware, but not an Apple OS? Thanks to Alexei Kosut for the MacOS X code. */ #ifdef __APPLE__ # define HAVE_DARWIN #endif #if defined(HAVE_DARWIN) # include #elif defined(HAVE_KERBEROS5) # include # include #else /* !HAVE_KERBEROS5 (meaning Kerberos 4) */ # include # include #endif /* !HAVE_KERBEROS5 */ #if !defined(VMS) && !defined(HAVE_ADJUNCT_PASSWD) # include #endif #ifdef __bsdi__ # include # if _BSDI_VERSION >= 199608 # define BSD_AUTH # endif #endif /* __bsdi__ */ /* blargh */ #undef Bool #undef True #undef False #define Bool int #define True 1 #define False 0 /* The user information we need to store */ #ifdef HAVE_DARWIN static KLPrincipal princ; #else /* !HAVE_DARWIN */ static char realm[REALM_SZ]; static char name[ANAME_SZ]; static char inst[INST_SZ]; static const char *tk_file; #endif /* !HAVE_DARWIN */ /* warning suppression: duplicated in passwd.c */ extern Bool kerberos_lock_init (int argc, char **argv, Bool verbose_p); extern Bool kerberos_passwd_valid_p (const char *typed_passwd, Bool verbose_p); /* Called at startup to grab user, instance, and realm information from the user's ticketfile (remember, name.inst@realm). Since we're using tf_get_pname(), this should work even if your kerberos username isn't the same as your local username. We grab the ticket at startup time so that even if your ticketfile dies while the screen's locked we'll still have the information to unlock it. Problems: the password dialog currently displays local username, so if you have some non-standard name/instance when you run xscreensaver, you'll need to remember what it was when unlocking, or else you lose. Also, we use des_string_to_key(), so if you have an AFS password (encrypted with ka_StringToKey()), you'll lose. Get a kerberos password; it isn't that hard. Like the original lock_init, we return false if something went wrong. We don't use the arguments we're given, though. */ Bool kerberos_lock_init (int argc, char **argv, Bool verbose_p) { # ifdef HAVE_DARWIN KLBoolean found; return ((klNoErr == (KLCacheHasValidTickets (NULL, kerberosVersion_Any, &found, &princ, NULL))) && found); # else /* !HAVE_DARWIN */ /* Perhaps we should be doing it the Mac way (above) all the time? The following code assumes Unix-style file-based Kerberos credentials cache, which Mac OS X doesn't use. But is there any real reason to do it this way at all, even on other Unixen? */ int k_errno; memset(name, 0, sizeof(name)); memset(inst, 0, sizeof(inst)); /* find out where the user's keeping his tickets. squirrel it away for later use. */ tk_file = tkt_string(); /* open ticket file or die trying. */ if ((k_errno = tf_init(tk_file, R_TKT_FIL))) { return False; } /* same with principal and instance names */ if ((k_errno = tf_get_pname(name)) || (k_errno = tf_get_pinst(inst))) { return False; } /* close the ticketfile to release the lock on it. */ tf_close(); /* figure out what realm we're authenticated to. this ought to be the local realm, but it pays to be sure. */ if ((k_errno = krb_get_tf_realm(tk_file, realm))) { return False; } /* last-minute sanity check on what we got. */ if ((strlen(name)+strlen(inst)+strlen(realm)+3) > (REALM_SZ + ANAME_SZ + INST_SZ + 3)) { return False; } /* success */ return True; # endif /* !HAVE_DARWIN */ } /* des_string_to_key() wants this. If C didn't suck, we could have an anonymous function do this. Even a local one. But it does, so here we are. Calling it ive_got_your_local_function_right_here_buddy() would have been rude. */ #ifndef HAVE_DARWIN static int key_to_key(char *user, char *instance, char *realm, char *passwd, C_Block key) { memcpy(key, passwd, sizeof(des_cblock)); return (0); } #endif /* !HAVE_DARWIN */ /* Called to see if the user's typed password is valid. We do this by asking the kerberos server for a ticket and checking to see if it gave us one. We need to move the ticketfile first, or otherwise we end up updating the user's tkfile with new tickets. This would break services like zephyr that like to stay authenticated, and it would screw with AFS authentication at some sites. So, we do a quick, painful hack with a tmpfile. */ Bool kerberos_passwd_valid_p (const char *typed_passwd, Bool verbose_p) { # ifdef HAVE_DARWIN return (klNoErr == KLAcquireNewInitialTicketsWithPassword (princ, NULL, typed_passwd, NULL)); # else /* !HAVE_DARWIN */ /* See comments in kerberos_lock_init -- should we do it the Mac Way on all systems? */ C_Block mitkey; Bool success; char *newtkfile; int fh = -1; /* temporarily switch to a new ticketfile. I'm not using tmpnam() because it isn't entirely portable. this could probably be fixed with autoconf. */ newtkfile = malloc(80 * sizeof(char)); memset(newtkfile, 0, sizeof(newtkfile)); sprintf(newtkfile, "/tmp/xscrn-%i.XXXXXX", getpid()); if( (fh = mkstemp(newtkfile)) < 0) { free(newtkfile); return(False); } if( fchmod(fh, 0600) < 0) { free(newtkfile); return(False); } krb_set_tkt_string(newtkfile); /* encrypt the typed password. if you have an AFS password instead of a kerberos one, you lose *right here*. If you want to use AFS passwords, you can use ka_StringToKey() instead. As always, ymmv. */ des_string_to_key(typed_passwd, mitkey); if (krb_get_in_tkt(name, inst, realm, "krbtgt", realm, DEFAULT_TKT_LIFE, key_to_key, NULL, (char *) mitkey) != 0) { success = False; } else { success = True; } /* quickly block out the tempfile and password to prevent snooping, then restore the old ticketfile and cleean up a bit. */ dest_tkt(); krb_set_tkt_string(tk_file); free(newtkfile); memset(mitkey, 0, sizeof(mitkey)); close(fh); /* #### tom: should the file be removed? */ /* Did we verify successfully? */ return success; # endif /* !HAVE_DARWIN */ } #endif /* NO_LOCKING -- whole file */ xscreensaver-5.36/driver/passwd-pam.c000644 000767 000024 00000042421 12701612237 017655 0ustar00jwzstaff000000 000000 /* passwd-pam.c --- verifying typed passwords with PAM * (Pluggable Authentication Modules.) * written by Bill Nottingham (and jwz) for * xscreensaver, Copyright (c) 1993-2016 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. * * Some PAM resources: * * PAM home page: * http://www.us.kernel.org/pub/linux/libs/pam/ * * PAM FAQ: * http://www.us.kernel.org/pub/linux/libs/pam/FAQ * * PAM Application Developers' Guide: * http://www.us.kernel.org/pub/linux/libs/pam/Linux-PAM-html/Linux-PAM_ADG.html * * PAM Mailing list archives: * http://www.linuxhq.com/lnxlists/linux-pam/ * * Compatibility notes, especially between Linux and Solaris: * http://www.contrib.andrew.cmu.edu/u/shadow/pam.html * * The Open Group's PAM API documentation: * http://www.opengroup.org/onlinepubs/8329799/pam_start.htm */ #ifdef HAVE_CONFIG_H # include "config.h" #endif #ifndef NO_LOCKING /* whole file */ #include #ifdef HAVE_UNISTD_H # include #endif extern char *blurb(void); #include #include #include #include #include #include #include #include #include #include #include "auth.h" extern sigset_t block_sigchld (void); extern void unblock_sigchld (void); /* blargh */ #undef Bool #undef True #undef False #define Bool int #define True 1 #define False 0 #undef countof #define countof(x) (sizeof((x))/sizeof(*(x))) /* Some time between Red Hat 4.2 and 7.0, the words were transposed in the various PAM_x_CRED macro names. Yay! */ #if !defined(PAM_REFRESH_CRED) && defined(PAM_CRED_REFRESH) # define PAM_REFRESH_CRED PAM_CRED_REFRESH #endif #if !defined(PAM_REINITIALIZE_CRED) && defined(PAM_CRED_REINITIALIZE) # define PAM_REINITIALIZE_CRED PAM_CRED_REINITIALIZE #endif static int pam_conversation (int nmsgs, const struct pam_message **msg, struct pam_response **resp, void *closure); void pam_try_unlock(saver_info *si, Bool verbose_p, Bool (*valid_p)(const char *typed_passwd, Bool verbose_p)); Bool pam_priv_init (int argc, char **argv, Bool verbose_p); #ifdef HAVE_PAM_FAIL_DELAY /* We handle delays ourself.*/ /* Don't set this to 0 (Linux bug workaround.) */ # define PAM_NO_DELAY(pamh) pam_fail_delay ((pamh), 1) #else /* !HAVE_PAM_FAIL_DELAY */ # define PAM_NO_DELAY(pamh) /* */ #endif /* !HAVE_PAM_FAIL_DELAY */ /* On SunOS 5.6, and on Linux with PAM 0.64, pam_strerror() takes two args. On some other Linux systems with some other version of PAM (e.g., whichever Debian release comes with a 2.2.5 kernel) it takes one arg. I can't tell which is more "recent" or "correct" behavior, so configure figures out which is in use for us. Shoot me! */ #ifdef PAM_STRERROR_TWO_ARGS # define PAM_STRERROR(pamh, status) pam_strerror((pamh), (status)) #else /* !PAM_STRERROR_TWO_ARGS */ # define PAM_STRERROR(pamh, status) pam_strerror((status)) #endif /* !PAM_STRERROR_TWO_ARGS */ /* PAM sucks in that there is no way to tell whether a particular service is configured at all. That is, there is no way to tell the difference between "authentication of the FOO service is not allowed" and "the user typed the wrong password." On RedHat 5.1 systems, if a service name is not known, it defaults to being not allowed (because the fallback service, /etc/pam.d/other, is set to `pam_deny'.) On Solaris 2.6 systems, unknown services default to authenticating normally. So, we could simply require that the person who installs xscreensaver set up an "xscreensaver" PAM service. However, if we went that route, it would have a really awful failure mode: the failure mode would be that xscreensaver was willing to *lock* the screen, but would be unwilling to *unlock* the screen. (With the non-PAM password code, the analagous situation -- security not being configured properly, for example do to the executable not being installed as setuid root -- the failure mode is much more palettable, in that xscreensaver will refuse to *lock* the screen, because it can know up front that there is no password that will work.) Another route would be to have the service name to consult be computed at compile-time (perhaps with a configure option.) However, that doesn't really solve the problem, because it means that the same executable might work fine on one machine, but refuse to unlock when run on another machine. Another alternative would be to look in /etc/pam.conf or /etc/pam.d/ at runtime to see what services actually exist. But I think that's no good, because who is to say that the PAM info is actually specified in those files? Opening and reading those files is not a part of the PAM client API, so it's not guarenteed to work on any given system. An alternative I tried was to specify a list of services to try, and to try them all in turn ("xscreensaver", "xlock", "xdm", and "login"). This worked, but it was slow (and I also had to do some contortions to work around bugs in Linux PAM 0.64-3.) So what we do today is, try PAM once, and if that fails, try the usual getpwent() method. So if PAM doesn't work, it will at least make an attempt at looking up passwords in /etc/passwd or /etc/shadow instead. This all kind of blows. I'm not sure what else to do. */ /* On SunOS 5.6, the `pam_conv.appdata_ptr' slot seems to be ignored, and the `closure' argument to pc.conv always comes in as random garbage. So we get around this by using a global variable instead. Shoot me! (I've been told this is bug 4092227, and is fixed in Solaris 7.) (I've also been told that it's fixed in Solaris 2.6 by patch 106257-05.) */ static void *suns_pam_implementation_blows = 0; /** * This function is the PAM conversation driver. It conducts a full * authentication round by invoking the GUI with various prompts. */ void pam_try_unlock(saver_info *si, Bool verbose_p, Bool (*valid_p)(const char *typed_passwd, Bool verbose_p)) { const char *service = PAM_SERVICE_NAME; pam_handle_t *pamh = 0; int status = -1; struct pam_conv pc; sigset_t set; struct timespec timeout; pc.conv = &pam_conversation; pc.appdata_ptr = (void *) si; /* On SunOS 5.6, the `appdata_ptr' slot seems to be ignored, and the `closure' argument to pc.conv always comes in as random garbage. */ suns_pam_implementation_blows = (void *) si; /* Initialize PAM. */ status = pam_start (service, si->user, &pc, &pamh); if (verbose_p) fprintf (stderr, "%s: pam_start (\"%s\", \"%s\", ...) ==> %d (%s)\n", blurb(), service, si->user, status, PAM_STRERROR (pamh, status)); if (status != PAM_SUCCESS) goto DONE; /* #### We should set PAM_TTY to the display we're using, but we don't have that handy from here. So set it to :0.0, which is a good guess (and has the bonus of counting as a "secure tty" as far as PAM is concerned...) */ { char *tty = strdup (":0.0"); status = pam_set_item (pamh, PAM_TTY, tty); if (verbose_p) fprintf (stderr, "%s: pam_set_item (p, PAM_TTY, \"%s\") ==> %d (%s)\n", blurb(), tty, status, PAM_STRERROR(pamh, status)); free (tty); } /* Try to authenticate as the current user. We must turn off our SIGCHLD handler for the duration of the call to pam_authenticate(), because in some cases, the underlying PAM code will do this: 1: fork a setuid subprocess to do some dirty work; 2: read a response from that subprocess; 3: waitpid(pid, ...) on that subprocess. If we (the ignorant parent process) have a SIGCHLD handler, then there's a race condition between steps 2 and 3: if the subprocess exits before waitpid() was called, then our SIGCHLD handler fires, and gets notified of the subprocess death; then PAM's call to waitpid() fails, because the process has already been reaped. I consider this a bug in PAM, since the caller should be able to have whatever signal handlers it wants -- the PAM documentation doesn't say "oh by the way, if you use PAM, you can't use SIGCHLD." */ PAM_NO_DELAY(pamh); if (verbose_p) fprintf (stderr, "%s: pam_authenticate (...) ...\n", blurb()); timeout.tv_sec = 0; timeout.tv_nsec = 1; set = block_sigchld(); status = pam_authenticate (pamh, 0); # ifdef HAVE_SIGTIMEDWAIT sigtimedwait (&set, NULL, &timeout); /* #### What is the portable thing to do if we don't have it? */ # endif /* HAVE_SIGTIMEDWAIT */ unblock_sigchld(); if (verbose_p) fprintf (stderr, "%s: pam_authenticate (...) ==> %d (%s)\n", blurb(), status, PAM_STRERROR(pamh, status)); if (status == PAM_SUCCESS) /* Win! */ { int status2; /* On most systems, it doesn't matter whether the account modules are run, or whether they fail or succeed. On some systems, the account modules fail, because they were never configured properly, but it's necessary to run them anyway because certain PAM modules depend on side effects of the account modules having been run. And on still other systems, the account modules are actually used, and failures in them should be considered to be true! So: - We run the account modules on all systems. - Whether we ignore them is a configure option. It's all kind of a mess. */ status2 = pam_acct_mgmt (pamh, 0); if (verbose_p) fprintf (stderr, "%s: pam_acct_mgmt (...) ==> %d (%s)\n", blurb(), status2, PAM_STRERROR(pamh, status2)); /* HPUX for some reason likes to make PAM defines different from * everyone else's. */ #ifdef PAM_AUTHTOKEN_REQD if (status2 == PAM_AUTHTOKEN_REQD) #else if (status2 == PAM_NEW_AUTHTOK_REQD) #endif { status2 = pam_chauthtok (pamh, PAM_CHANGE_EXPIRED_AUTHTOK); if (verbose_p) fprintf (stderr, "%s: pam_chauthtok (...) ==> %d (%s)\n", blurb(), status2, PAM_STRERROR(pamh, status2)); } /* If 'configure' requested that we believe the results of PAM account module failures, then obey that status code. Otherwise ignore it. */ #ifdef PAM_CHECK_ACCOUNT_TYPE status = status2; #endif /* Each time we successfully authenticate, refresh credentials, for Kerberos/AFS/DCE/etc. If this fails, just ignore that failure and blunder along; it shouldn't matter. */ #if defined(__linux__) /* Apparently the Linux PAM library ignores PAM_REFRESH_CRED and only refreshes credentials when using PAM_REINITIALIZE_CRED. */ status2 = pam_setcred (pamh, PAM_REINITIALIZE_CRED); #else /* But Solaris requires PAM_REFRESH_CRED or extra prompts appear. */ status2 = pam_setcred (pamh, PAM_REFRESH_CRED); #endif if (verbose_p) fprintf (stderr, "%s: pam_setcred (...) ==> %d (%s)\n", blurb(), status2, PAM_STRERROR(pamh, status2)); } DONE: if (pamh) { int status2 = pam_end (pamh, status); pamh = 0; if (verbose_p) fprintf (stderr, "%s: pam_end (...) ==> %d (%s)\n", blurb(), status2, (status2 == PAM_SUCCESS ? "Success" : "Failure")); } if (status == PAM_SUCCESS) si->unlock_state = ul_success; /* yay */ else if (si->unlock_state == ul_cancel || si->unlock_state == ul_time) ; /* more specific failures ok */ else si->unlock_state = ul_fail; /* generic failure */ } Bool pam_priv_init (int argc, char **argv, Bool verbose_p) { /* We have nothing to do at init-time. However, we might as well do some error checking. If "/etc/pam.d" exists and is a directory, but "/etc/pam.d/xlock" does not exist, warn that PAM probably isn't going to work. This is a priv-init instead of a non-priv init in case the directory is unreadable or something (don't know if that actually happens.) */ const char dir[] = "/etc/pam.d"; const char file[] = "/etc/pam.d/" PAM_SERVICE_NAME; const char file2[] = "/etc/pam.conf"; struct stat st; # ifndef S_ISDIR # define S_ISDIR(mode) (((mode) & S_IFMT) == S_IFDIR) # endif if (stat (dir, &st) == 0 && S_ISDIR(st.st_mode)) { if (stat (file, &st) != 0) fprintf (stderr, "%s: warning: %s does not exist.\n" "%s: password authentication via PAM is unlikely to work.\n", blurb(), file, blurb()); } else if (stat (file2, &st) == 0) { FILE *f = fopen (file2, "r"); if (f) { Bool ok = False; char buf[255]; while (fgets (buf, sizeof(buf), f)) if (strstr (buf, PAM_SERVICE_NAME)) { ok = True; break; } fclose (f); if (!ok) { fprintf (stderr, "%s: warning: %s does not list the `%s' service.\n" "%s: password authentication via PAM is unlikely to work.\n", blurb(), file2, PAM_SERVICE_NAME, blurb()); } } /* else warn about file2 existing but being unreadable? */ } else { fprintf (stderr, "%s: warning: neither %s nor %s exist.\n" "%s: password authentication via PAM is unlikely to work.\n", blurb(), file2, file, blurb()); } /* Return true anyway, just in case. */ return True; } static int pam_conversation (int nmsgs, const struct pam_message **msg, struct pam_response **resp, void *vsaver_info) { int i, ret = -1; struct auth_message *messages = 0; struct auth_response *authresp = 0; struct pam_response *pam_responses; saver_info *si = (saver_info *) vsaver_info; Bool verbose_p; /* On SunOS 5.6, the `closure' argument always comes in as random garbage. */ si = (saver_info *) suns_pam_implementation_blows; verbose_p = si->prefs.verbose_p; /* Converting the PAM prompts into the XScreenSaver native format. * It was a design goal to collapse (INFO,PROMPT) pairs from PAM * into a single call to the unlock_cb function. The unlock_cb function * does that, but only if it is passed several prompts at a time. Most PAM * modules only send a single prompt at a time, but because there is no way * of telling whether there will be more prompts to follow, we can only ever * pass along whatever was passed in here. */ messages = calloc(nmsgs, sizeof(struct auth_message)); pam_responses = calloc(nmsgs, sizeof(*pam_responses)); if (!pam_responses || !messages) goto end; if (verbose_p) fprintf (stderr, "%s: pam_conversation (", blurb()); for (i = 0; i < nmsgs; ++i) { if (verbose_p && i > 0) fprintf (stderr, ", "); messages[i].msg = msg[i]->msg; switch (msg[i]->msg_style) { case PAM_PROMPT_ECHO_OFF: messages[i].type = AUTH_MSGTYPE_PROMPT_NOECHO; if (verbose_p) fprintf (stderr, "ECHO_OFF"); break; case PAM_PROMPT_ECHO_ON: messages[i].type = AUTH_MSGTYPE_PROMPT_ECHO; if (verbose_p) fprintf (stderr, "ECHO_ON"); break; case PAM_ERROR_MSG: messages[i].type = AUTH_MSGTYPE_ERROR; if (verbose_p) fprintf (stderr, "ERROR_MSG"); break; case PAM_TEXT_INFO: messages[i].type = AUTH_MSGTYPE_INFO; if (verbose_p) fprintf (stderr, "TEXT_INFO"); break; default: messages[i].type = AUTH_MSGTYPE_PROMPT_ECHO; if (verbose_p) fprintf (stderr, "PROMPT_ECHO"); break; } if (verbose_p) fprintf (stderr, "=\"%s\"", msg[i]->msg ? msg[i]->msg : "(null)"); } if (verbose_p) fprintf (stderr, ") ...\n"); ret = si->unlock_cb(nmsgs, messages, &authresp, si); /* #### If the user times out, or hits ESC or Cancel, we return PAM_CONV_ERR, and PAM logs this as an authentication failure. It would be nice if there was some way to indicate that this was a "cancel" rather than a "fail", so that it wouldn't show up in syslog, but I think the only options are PAM_SUCCESS and PAM_CONV_ERR. (I think that PAM_ABORT means "internal error", not "cancel".) Bleh. */ if (ret == 0) { for (i = 0; i < nmsgs; ++i) pam_responses[i].resp = authresp[i].response; } end: if (messages) free(messages); if (authresp) free(authresp); if (verbose_p) fprintf (stderr, "%s: pam_conversation (...) ==> %s\n", blurb(), (ret == 0 ? "PAM_SUCCESS" : "PAM_CONV_ERR")); if (ret == 0) { *resp = pam_responses; return PAM_SUCCESS; } /* Failure only */ if (pam_responses) free(pam_responses); return PAM_CONV_ERR; } #endif /* NO_LOCKING -- whole file */ xscreensaver-5.36/driver/lock.c000664 000767 000024 00000205657 12720740771 016555 0ustar00jwzstaff000000 000000 /* lock.c --- handling the password dialog for locking-mode. * xscreensaver, Copyright (c) 1993-2016 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. */ /* Athena locking code contributed by Jon A. Christopher */ /* Copyright 1997, with the same permissions as above. */ #ifdef HAVE_CONFIG_H # include "config.h" #endif #include #include #include #include /* for time() */ #include #include #include "xscreensaver.h" #include "resources.h" #include "mlstring.h" #include "auth.h" #ifndef NO_LOCKING /* (mostly) whole file */ #ifdef HAVE_XHPDISABLERESET # include static void hp_lock_reset (saver_info *si, Bool lock_p); #endif /* HAVE_XHPDISABLERESET */ #ifdef HAVE_XF86VMODE # include static void xfree_lock_mode_switch (saver_info *si, Bool lock_p); #endif /* HAVE_XF86VMODE */ #ifdef HAVE_XF86MISCSETGRABKEYSSTATE # include static void xfree_lock_grab_smasher (saver_info *si, Bool lock_p); #endif /* HAVE_XF86MISCSETGRABKEYSSTATE */ #ifdef HAVE_RANDR # include #endif /* HAVE_RANDR */ #ifdef _VROOT_H_ ERROR! You must not include vroot.h in this file. #endif #ifdef HAVE_UNAME # include /* for hostname info */ #endif /* HAVE_UNAME */ #include #ifndef VMS # include #else /* VMS */ extern char *getenv(const char *name); extern int validate_user(char *name, char *password); static Bool vms_passwd_valid_p(char *pw, Bool verbose_p) { return (validate_user (getenv("USER"), typed_passwd) == 1); } # undef passwd_valid_p # define passwd_valid_p vms_passwd_valid_p #endif /* VMS */ #define SAMPLE_INPUT "MMMMMMMMMMMM" #undef MAX #define MAX(a,b) ((a)>(b)?(a):(b)) typedef struct info_dialog_data info_dialog_data; #define MAX_BYTES_PER_CHAR 8 /* UTF-8 uses no more than 3, I think */ #define MAX_PASSWD_CHARS 128 /* Longest possible passphrase */ struct passwd_dialog_data { saver_screen_info *prompt_screen; int previous_mouse_x, previous_mouse_y; /* "Characters" in the password may be a variable number of bytes long. typed_passwd contains the raw bytes. typed_passwd_char_size indicates the size in bytes of each character, so that we can make backspace work. */ char typed_passwd [MAX_PASSWD_CHARS * MAX_BYTES_PER_CHAR]; char typed_passwd_char_size [MAX_PASSWD_CHARS]; XtIntervalId timer; int i_beam; float ratio; Position x, y; Dimension width; Dimension height; Dimension border_width; Bool echo_input; Bool show_stars_p; /* "I regret that I have but one asterisk for my country." -- Nathan Hale, 1776. */ char *heading_label; char *body_label; char *user_label; mlstring *info_label; /* The entry field shall only be displayed if prompt_label is not NULL */ mlstring *prompt_label; char *date_label; char *passwd_string; Bool passwd_changed_p; /* Whether the user entry field needs redrawing */ Bool caps_p; /* Whether we saw a keypress with caps-lock on */ char *unlock_label; char *login_label; char *uname_label; Bool show_uname_p; XFontStruct *heading_font; XFontStruct *body_font; XFontStruct *label_font; XFontStruct *passwd_font; XFontStruct *date_font; XFontStruct *button_font; XFontStruct *uname_font; Pixel foreground; Pixel background; Pixel border; Pixel passwd_foreground; Pixel passwd_background; Pixel thermo_foreground; Pixel thermo_background; Pixel shadow_top; Pixel shadow_bottom; Pixel button_foreground; Pixel button_background; Dimension preferred_logo_width, logo_width; Dimension preferred_logo_height, logo_height; Dimension thermo_width; Dimension internal_border; Dimension shadow_width; Dimension passwd_field_x, passwd_field_y; Dimension passwd_field_width, passwd_field_height; Dimension unlock_button_x, unlock_button_y; Dimension unlock_button_width, unlock_button_height; Dimension login_button_x, login_button_y; Dimension login_button_width, login_button_height; Dimension thermo_field_x, thermo_field_y; Dimension thermo_field_height; Pixmap logo_pixmap; Pixmap logo_clipmask; int logo_npixels; unsigned long *logo_pixels; Cursor passwd_cursor; Bool unlock_button_down_p; Bool login_button_down_p; Bool login_button_p; Bool login_button_enabled_p; Bool button_state_changed_p; /* Refers to both buttons */ Pixmap save_under; Pixmap user_entry_pixmap; }; static void draw_passwd_window (saver_info *si); static void update_passwd_window (saver_info *si, const char *printed_passwd, float ratio); static void destroy_passwd_window (saver_info *si); static void undo_vp_motion (saver_info *si); static void finished_typing_passwd (saver_info *si, passwd_dialog_data *pw); static void cleanup_passwd_window (saver_info *si); static void restore_background (saver_info *si); extern void xss_authenticate(saver_info *si, Bool verbose_p); static int new_passwd_window (saver_info *si) { passwd_dialog_data *pw; Screen *screen; Colormap cmap; char *f; saver_screen_info *ssi = &si->screens [mouse_screen (si)]; pw = (passwd_dialog_data *) calloc (1, sizeof(*pw)); if (!pw) return -1; /* Display the button only if the "newLoginCommand" pref is non-null. */ pw->login_button_p = (si->prefs.new_login_command && *si->prefs.new_login_command); pw->passwd_cursor = XCreateFontCursor (si->dpy, XC_top_left_arrow); pw->prompt_screen = ssi; screen = pw->prompt_screen->screen; cmap = DefaultColormapOfScreen (screen); pw->show_stars_p = get_boolean_resource(si->dpy, "passwd.asterisks", "Boolean"); pw->heading_label = get_string_resource (si->dpy, "passwd.heading.label", "Dialog.Label.Label"); pw->body_label = get_string_resource (si->dpy, "passwd.body.label", "Dialog.Label.Label"); pw->user_label = get_string_resource (si->dpy, "passwd.user.label", "Dialog.Label.Label"); pw->unlock_label = get_string_resource (si->dpy, "passwd.unlock.label", "Dialog.Button.Label"); pw->login_label = get_string_resource (si->dpy, "passwd.login.label", "Dialog.Button.Label"); pw->date_label = get_string_resource (si->dpy, "dateFormat", "DateFormat"); if (!pw->heading_label) pw->heading_label = strdup("ERROR: RESOURCES NOT INSTALLED CORRECTLY"); if (!pw->body_label) pw->body_label = strdup("ERROR: RESOURCES NOT INSTALLED CORRECTLY"); if (!pw->user_label) pw->user_label = strdup("ERROR"); if (!pw->date_label) pw->date_label = strdup("ERROR"); if (!pw->unlock_label) pw->unlock_label = strdup("ERROR (UNLOCK)"); if (!pw->login_label) pw->login_label = strdup ("ERROR (LOGIN)") ; /* Put the version number in the label. */ { char *s = (char *) malloc (strlen(pw->heading_label) + 20); sprintf(s, pw->heading_label, si->version); free (pw->heading_label); pw->heading_label = s; } /* Get hostname info */ pw->uname_label = strdup(""); /* Initialy, write nothing */ # ifdef HAVE_UNAME { struct utsname uts; if (uname (&uts) == 0) { #if 0 /* Get the full hostname */ { char *s; if ((s = strchr(uts.nodename, '.'))) *s = 0; } #endif char *s = strdup (uts.nodename); free (pw->uname_label); pw->uname_label = s; } } # endif pw->passwd_string = strdup(""); f = get_string_resource (si->dpy, "passwd.headingFont", "Dialog.Font"); pw->heading_font = XLoadQueryFont (si->dpy, (f ? f : "fixed")); if (!pw->heading_font) pw->heading_font = XLoadQueryFont (si->dpy, "fixed"); if (f) free (f); f = get_string_resource (si->dpy, "passwd.buttonFont", "Dialog.Font"); pw->button_font = XLoadQueryFont (si->dpy, (f ? f : "fixed")); if (!pw->button_font) pw->button_font = XLoadQueryFont (si->dpy, "fixed"); if (f) free (f); f = get_string_resource(si->dpy, "passwd.bodyFont", "Dialog.Font"); pw->body_font = XLoadQueryFont (si->dpy, (f ? f : "fixed")); if (!pw->body_font) pw->body_font = XLoadQueryFont (si->dpy, "fixed"); if (f) free (f); f = get_string_resource(si->dpy, "passwd.labelFont", "Dialog.Font"); pw->label_font = XLoadQueryFont (si->dpy, (f ? f : "fixed")); if (!pw->label_font) pw->label_font = XLoadQueryFont (si->dpy, "fixed"); if (f) free (f); f = get_string_resource(si->dpy, "passwd.passwdFont", "Dialog.Font"); pw->passwd_font = XLoadQueryFont (si->dpy, (f ? f : "fixed")); if (!pw->passwd_font) pw->passwd_font = XLoadQueryFont (si->dpy, "fixed"); if (f) free (f); f = get_string_resource(si->dpy, "passwd.dateFont", "Dialog.Font"); pw->date_font = XLoadQueryFont (si->dpy, (f ? f : "fixed")); if (!pw->date_font) pw->date_font = XLoadQueryFont (si->dpy, "fixed"); if (f) free (f); f = get_string_resource(si->dpy, "passwd.unameFont", "Dialog.Font"); pw->uname_font = XLoadQueryFont (si->dpy, (f ? f : "fixed")); if (!pw->uname_font) pw->uname_font = XLoadQueryFont (si->dpy, "fixed"); if (f) free (f); pw->show_uname_p = get_boolean_resource(si->dpy, "passwd.uname", "Boolean"); pw->foreground = get_pixel_resource (si->dpy, cmap, "passwd.foreground", "Dialog.Foreground" ); pw->background = get_pixel_resource (si->dpy, cmap, "passwd.background", "Dialog.Background" ); pw->border = get_pixel_resource (si->dpy, cmap, "passwd.borderColor", "Dialog.borderColor"); if (pw->foreground == pw->background) { /* Make sure the error messages show up. */ pw->foreground = BlackPixelOfScreen (screen); pw->background = WhitePixelOfScreen (screen); } pw->passwd_foreground = get_pixel_resource (si->dpy, cmap, "passwd.text.foreground", "Dialog.Text.Foreground" ); pw->passwd_background = get_pixel_resource (si->dpy, cmap, "passwd.text.background", "Dialog.Text.Background" ); pw->button_foreground = get_pixel_resource (si->dpy, cmap, "splash.Button.foreground", "Dialog.Button.Foreground" ); pw->button_background = get_pixel_resource (si->dpy, cmap, "splash.Button.background", "Dialog.Button.Background" ); pw->thermo_foreground = get_pixel_resource (si->dpy, cmap, "passwd.thermometer.foreground", "Dialog.Thermometer.Foreground"); pw->thermo_background = get_pixel_resource ( si->dpy, cmap, "passwd.thermometer.background", "Dialog.Thermometer.Background"); pw->shadow_top = get_pixel_resource ( si->dpy, cmap, "passwd.topShadowColor", "Dialog.Foreground" ); pw->shadow_bottom = get_pixel_resource (si->dpy, cmap, "passwd.bottomShadowColor", "Dialog.Background" ); pw->preferred_logo_width = get_integer_resource (si->dpy, "passwd.logo.width", "Dialog.Logo.Width"); pw->preferred_logo_height = get_integer_resource (si->dpy, "passwd.logo.height", "Dialog.Logo.Height"); pw->thermo_width = get_integer_resource (si->dpy, "passwd.thermometer.width", "Dialog.Thermometer.Width"); pw->internal_border = get_integer_resource (si->dpy, "passwd.internalBorderWidth", "Dialog.InternalBorderWidth"); pw->shadow_width = get_integer_resource (si->dpy, "passwd.shadowThickness", "Dialog.ShadowThickness"); if (pw->preferred_logo_width == 0) pw->preferred_logo_width = 150; if (pw->preferred_logo_height == 0) pw->preferred_logo_height = 150; if (pw->internal_border == 0) pw->internal_border = 15; if (pw->shadow_width == 0) pw->shadow_width = 4; if (pw->thermo_width == 0) pw->thermo_width = pw->shadow_width; /* We need to remember the mouse position and restore it afterward, or sometimes (perhaps only with Xinerama?) the mouse gets warped to inside the bounds of the lock dialog window. */ { Window pointer_root, pointer_child; int root_x, root_y, win_x, win_y; unsigned int mask; pw->previous_mouse_x = 0; pw->previous_mouse_y = 0; if (XQueryPointer (si->dpy, RootWindowOfScreen (pw->prompt_screen->screen), &pointer_root, &pointer_child, &root_x, &root_y, &win_x, &win_y, &mask)) { pw->previous_mouse_x = root_x; pw->previous_mouse_y = root_y; if (si->prefs.verbose_p) fprintf (stderr, "%s: %d: mouse is at %d,%d.\n", blurb(), pw->prompt_screen->number, pw->previous_mouse_x, pw->previous_mouse_y); } else if (si->prefs.verbose_p) fprintf (stderr, "%s: %d: unable to determine mouse position?\n", blurb(), pw->prompt_screen->number); } /* Before mapping the window, save a pixmap of the current screen. When we lower the window, we restore these bits. This works, because the running screenhack has already been sent SIGSTOP, so we know nothing else is drawing right now! */ { XGCValues gcv; GC gc; pw->save_under = XCreatePixmap (si->dpy, pw->prompt_screen->screensaver_window, pw->prompt_screen->width, pw->prompt_screen->height, pw->prompt_screen->current_depth); gcv.function = GXcopy; gc = XCreateGC (si->dpy, pw->save_under, GCFunction, &gcv); XCopyArea (si->dpy, pw->prompt_screen->screensaver_window, pw->save_under, gc, 0, 0, pw->prompt_screen->width, pw->prompt_screen->height, 0, 0); XFreeGC (si->dpy, gc); } si->pw_data = pw; return 0; } Bool debug_passwd_window_p = False; /* used only by test-passwd.c */ /** * info_msg and prompt may be NULL. */ static int make_passwd_window (saver_info *si, const char *info_msg, const char *prompt, Bool echo) { XSetWindowAttributes attrs; unsigned long attrmask = 0; passwd_dialog_data *pw; Screen *screen; Colormap cmap; Dimension max_string_width_px; saver_screen_info *ssi = &si->screens [mouse_screen (si)]; cleanup_passwd_window (si); if (! ssi) /* WTF? Trying to prompt while no screens connected? */ return -1; if (!si->pw_data) if (new_passwd_window (si) < 0) return -1; if (!(pw = si->pw_data)) return -1; pw->ratio = 1.0; pw->prompt_screen = ssi; if (si->prefs.verbose_p) fprintf (stderr, "%s: %d: creating password dialog (\"%s\")\n", blurb(), pw->prompt_screen->number, info_msg ? info_msg : ""); screen = pw->prompt_screen->screen; cmap = DefaultColormapOfScreen (screen); pw->echo_input = echo; max_string_width_px = ssi->width - pw->shadow_width * 4 - pw->border_width * 2 - pw->thermo_width - pw->preferred_logo_width - pw->internal_border * 2; /* As the string wraps it makes the window taller which makes the logo wider * which leaves less room for the text which makes the string wrap. Uh-oh, a * loop. By wrapping at a bit less than the available width, there's some * room for the dialog to grow without going off the edge of the screen. */ max_string_width_px *= 0.75; if (!info_msg && decrepit_p()) info_msg = ("\n" "This version of XScreenSaver\n" "is very old! Please upgrade!\n"); pw->info_label = mlstring_new(info_msg ? info_msg : pw->body_label, pw->label_font, max_string_width_px); { int direction, ascent, descent; XCharStruct overall; pw->width = 0; pw->height = 0; /* Measure the heading_label. */ XTextExtents (pw->heading_font, pw->heading_label, strlen(pw->heading_label), &direction, &ascent, &descent, &overall); if (overall.width > pw->width) pw->width = overall.width; pw->height += ascent + descent; /* Measure the uname_label. */ if ((strlen(pw->uname_label)) && pw->show_uname_p) { XTextExtents (pw->uname_font, pw->uname_label, strlen(pw->uname_label), &direction, &ascent, &descent, &overall); if (overall.width > pw->width) pw->width = overall.width; pw->height += ascent + descent; } { Dimension w2 = 0, w3 = 0, button_w = 0; Dimension h2 = 0, h3 = 0, button_h = 0; const char *passwd_string = SAMPLE_INPUT; /* Measure the user_label. */ XTextExtents (pw->label_font, pw->user_label, strlen(pw->user_label), &direction, &ascent, &descent, &overall); if (overall.width > w2) w2 = overall.width; h2 += ascent + descent; /* Measure the info_label. */ if (pw->info_label->overall_width > pw->width) pw->width = pw->info_label->overall_width; h2 += pw->info_label->overall_height; /* Measure the user string. */ XTextExtents (pw->passwd_font, si->user, strlen(si->user), &direction, &ascent, &descent, &overall); overall.width += (pw->shadow_width * 4); ascent += (pw->shadow_width * 4); if (overall.width > w3) w3 = overall.width; h3 += ascent + descent; /* Measure the (dummy) passwd_string. */ if (prompt) { XTextExtents (pw->passwd_font, passwd_string, strlen(passwd_string), &direction, &ascent, &descent, &overall); overall.width += (pw->shadow_width * 4); ascent += (pw->shadow_width * 4); if (overall.width > w3) w3 = overall.width; h3 += ascent + descent; /* Measure the prompt_label. */ max_string_width_px -= w3; pw->prompt_label = mlstring_new (prompt, pw->label_font, max_string_width_px); if (pw->prompt_label->overall_width > w2) w2 = pw->prompt_label->overall_width; h2 += pw->prompt_label->overall_height; w2 = w2 + w3 + (pw->shadow_width * 2); h2 = MAX (h2, h3); } /* The "Unlock" button. */ XTextExtents (pw->label_font, pw->unlock_label, strlen(pw->unlock_label), &direction, &ascent, &descent, &overall); button_w = overall.width; button_h = ascent + descent; /* Add some horizontal padding inside the button. */ button_w += ascent; button_w += ((ascent + descent) / 2) + (pw->shadow_width * 2); button_h += ((ascent + descent) / 2) + (pw->shadow_width * 2); pw->unlock_button_width = button_w; pw->unlock_button_height = button_h; w2 = MAX (w2, button_w); h2 += button_h * 1.5; /* The "New Login" button */ pw->login_button_width = 0; pw->login_button_height = 0; if (pw->login_button_p) { pw->login_button_enabled_p = True; /* Measure the "New Login" button */ XTextExtents (pw->button_font, pw->login_label, strlen (pw->login_label), &direction, &ascent, &descent, &overall); button_w = overall.width; button_h = ascent + descent; /* Add some horizontal padding inside the buttons. */ button_w += ascent; button_w += ((ascent + descent) / 2) + (pw->shadow_width * 2); button_h += ((ascent + descent) / 2) + (pw->shadow_width * 2); pw->login_button_width = button_w; pw->login_button_height = button_h; if (button_h > pw->unlock_button_height) h2 += (button_h * 1.5 - pw->unlock_button_height * 1.5); /* Use (2 * shadow_width) spacing between the buttons. Another (2 * shadow_width) is required to account for button shadows. */ w2 = MAX (w2, button_w + pw->unlock_button_width + (pw->shadow_width * 4)); } if (w2 > pw->width) pw->width = w2; pw->height += h2; } pw->width += (pw->internal_border * 2); pw->height += (pw->internal_border * 4); pw->width += pw->thermo_width + (pw->shadow_width * 3); if (pw->preferred_logo_height > pw->height) pw->height = pw->logo_height = pw->preferred_logo_height; else if (pw->height > pw->preferred_logo_height) pw->logo_height = pw->height; pw->logo_width = pw->logo_height; pw->width += pw->logo_width; } attrmask |= CWOverrideRedirect; attrs.override_redirect = True; if (debug_passwd_window_p) attrs.override_redirect = False; /* kludge for test-passwd.c */ attrmask |= CWEventMask; attrs.event_mask = (ExposureMask | KeyPressMask | ButtonPressMask | ButtonReleaseMask); /* Figure out where on the desktop to place the window so that it will actually be visible; this takes into account virtual viewports as well as Xinerama. */ { saver_screen_info *ssi = &si->screens [mouse_screen (si)]; int x = ssi->x; int y = ssi->y; int w = ssi->width; int h = ssi->height; if (si->prefs.debug_p) w /= 2; pw->x = x + ((w + pw->width) / 2) - pw->width; pw->y = y + ((h + pw->height) / 2) - pw->height; if (pw->x < x) pw->x = x; if (pw->y < y) pw->y = y; } pw->border_width = get_integer_resource (si->dpy, "passwd.borderWidth", "Dialog.BorderWidth"); /* Only create the window the first time around */ if (!si->passwd_dialog) { si->passwd_dialog = XCreateWindow (si->dpy, RootWindowOfScreen(screen), pw->x, pw->y, pw->width, pw->height, pw->border_width, DefaultDepthOfScreen (screen), InputOutput, DefaultVisualOfScreen(screen), attrmask, &attrs); XSetWindowBackground (si->dpy, si->passwd_dialog, pw->background); XSetWindowBorder (si->dpy, si->passwd_dialog, pw->border); /* We use the default visual, not ssi->visual, so that the logo pixmap's visual matches that of the si->passwd_dialog window. */ pw->logo_pixmap = xscreensaver_logo (ssi->screen, /* ssi->current_visual, */ DefaultVisualOfScreen(screen), si->passwd_dialog, cmap, pw->background, &pw->logo_pixels, &pw->logo_npixels, &pw->logo_clipmask, True); } else /* On successive prompts, just resize the window */ { XWindowChanges wc; unsigned int mask = CWX | CWY | CWWidth | CWHeight; wc.x = pw->x; wc.y = pw->y; wc.width = pw->width; wc.height = pw->height; XConfigureWindow (si->dpy, si->passwd_dialog, mask, &wc); } restore_background(si); XMapRaised (si->dpy, si->passwd_dialog); XSync (si->dpy, False); move_mouse_grab (si, si->passwd_dialog, pw->passwd_cursor, pw->prompt_screen->number); undo_vp_motion (si); si->pw_data = pw; if (cmap) XInstallColormap (si->dpy, cmap); draw_passwd_window (si); return 0; } static void draw_passwd_window (saver_info *si) { passwd_dialog_data *pw = si->pw_data; XGCValues gcv; GC gc1, gc2; int spacing, height; int x1, x2, x3, y1, y2; int sw; int tb_height; /* Force redraw */ pw->passwd_changed_p = True; pw->button_state_changed_p = True; /* This height is the height of all the elements, not to be confused with * the overall window height which is pw->height. It is used to compute * the amount of spacing (padding) between elements. */ height = (pw->heading_font->ascent + pw->heading_font->descent + pw->info_label->overall_height + MAX (((pw->label_font->ascent + pw->label_font->descent) + (pw->prompt_label ? pw->prompt_label->overall_height : 0)), ((pw->passwd_font->ascent + pw->passwd_font->descent) + (pw->shadow_width * 2)) * (pw->prompt_label ? 2 : 1)) + pw->date_font->ascent + pw->date_font->descent); if ((strlen(pw->uname_label)) && pw->show_uname_p) height += (pw->uname_font->ascent + pw->uname_font->descent); height += ((pw->button_font->ascent + pw->button_font->descent) * 2 + 2 * pw->shadow_width); spacing = ((pw->height - 2 * pw->shadow_width - pw->internal_border - height) / 10); if (spacing < 0) spacing = 0; gcv.foreground = pw->foreground; gc1 = XCreateGC (si->dpy, si->passwd_dialog, GCForeground, &gcv); gc2 = XCreateGC (si->dpy, si->passwd_dialog, GCForeground, &gcv); x1 = pw->logo_width + pw->thermo_width + (pw->shadow_width * 3); x3 = pw->width - (pw->shadow_width * 2); y1 = (pw->shadow_width * 2) + spacing + spacing; /* top heading */ XSetFont (si->dpy, gc1, pw->heading_font->fid); sw = string_width (pw->heading_font, pw->heading_label); x2 = (x1 + ((x3 - x1 - sw) / 2)); y1 += spacing + pw->heading_font->ascent + pw->heading_font->descent; XDrawString (si->dpy, si->passwd_dialog, gc1, x2, y1, pw->heading_label, strlen(pw->heading_label)); /* uname below top heading */ if ((strlen(pw->uname_label)) && pw->show_uname_p) { XSetFont (si->dpy, gc1, pw->uname_font->fid); y1 += spacing + pw->uname_font->ascent + pw->uname_font->descent; sw = string_width (pw->uname_font, pw->uname_label); x2 = (x1 + ((x3 - x1 - sw) / 2)); XDrawString (si->dpy, si->passwd_dialog, gc1, x2, y1, pw->uname_label, strlen(pw->uname_label)); } /* the info_label (below uname) */ x2 = (x1 + ((x3 - x1 - pw->info_label->overall_width) / 2)); y1 += spacing + pw->info_label->font_height / 2; mlstring_draw(si->dpy, si->passwd_dialog, gc1, pw->info_label, x2, y1); y1 += pw->info_label->overall_height; tb_height = (pw->passwd_font->ascent + pw->passwd_font->descent + (pw->shadow_width * 4)); /* the "User:" prompt */ y2 = y1; XSetForeground (si->dpy, gc1, pw->foreground); XSetFont (si->dpy, gc1, pw->label_font->fid); y1 += (spacing + tb_height + pw->shadow_width); x2 = (x1 + pw->internal_border + MAX(string_width (pw->label_font, pw->user_label), pw->prompt_label ? pw->prompt_label->overall_width : 0)); XDrawString (si->dpy, si->passwd_dialog, gc1, x2 - string_width (pw->label_font, pw->user_label), y1 - pw->passwd_font->descent, pw->user_label, strlen(pw->user_label)); /* the prompt_label prompt */ if (pw->prompt_label) { y1 += tb_height - pw->label_font->ascent + pw->shadow_width; mlstring_draw(si->dpy, si->passwd_dialog, gc1, pw->prompt_label, x2 - pw->prompt_label->overall_width, y1); } /* the "user name" text field */ y1 = y2; XSetForeground (si->dpy, gc1, pw->passwd_foreground); XSetForeground (si->dpy, gc2, pw->passwd_background); XSetFont (si->dpy, gc1, pw->passwd_font->fid); y1 += (spacing + tb_height); x2 += (pw->shadow_width * 4); pw->passwd_field_width = x3 - x2 - pw->internal_border; pw->passwd_field_height = (pw->passwd_font->ascent + pw->passwd_font->descent + pw->shadow_width); XFillRectangle (si->dpy, si->passwd_dialog, gc2, x2 - pw->shadow_width, y1 - (pw->passwd_font->ascent + pw->passwd_font->descent), pw->passwd_field_width, pw->passwd_field_height); XDrawString (si->dpy, si->passwd_dialog, gc1, x2, y1 - pw->passwd_font->descent, si->user, strlen(si->user)); /* the password/prompt text field */ if (pw->prompt_label) { y1 += (spacing + pw->prompt_label->overall_height + pw->shadow_width*2); pw->passwd_field_x = x2 - pw->shadow_width; pw->passwd_field_y = y1 - (pw->passwd_font->ascent + pw->passwd_font->descent); } /* The shadow around the text fields */ y1 = y2; y1 += (spacing + (pw->shadow_width * 3)); x1 = x2 - (pw->shadow_width * 2); x2 = pw->passwd_field_width + (pw->shadow_width * 2); y2 = pw->passwd_field_height + (pw->shadow_width * 2); draw_shaded_rectangle (si->dpy, si->passwd_dialog, x1, y1, x2, y2, pw->shadow_width, pw->shadow_bottom, pw->shadow_top); if (pw->prompt_label) { y1 += (spacing + pw->prompt_label->overall_height + pw->shadow_width*2); draw_shaded_rectangle (si->dpy, si->passwd_dialog, x1, y1, x2, y2, pw->shadow_width, pw->shadow_bottom, pw->shadow_top); } /* The date, below the text fields */ { char buf[100]; time_t now = time ((time_t *) 0); struct tm *tm = localtime (&now); memset (buf, 0, sizeof(buf)); strftime (buf, sizeof(buf)-1, pw->date_label, tm); XSetFont (si->dpy, gc1, pw->date_font->fid); y1 += pw->shadow_width; y1 += (spacing + tb_height); y1 += spacing/2; sw = string_width (pw->date_font, buf); x2 = x1 + x2 - sw; XDrawString (si->dpy, si->passwd_dialog, gc1, x2, y1, buf, strlen(buf)); } /* Set up the GCs for the "New Login" and "Unlock" buttons. */ XSetForeground(si->dpy, gc1, pw->button_foreground); XSetForeground(si->dpy, gc2, pw->button_background); XSetFont(si->dpy, gc1, pw->button_font->fid); /* The "Unlock" button */ x2 = pw->width - pw->internal_border - (pw->shadow_width * 2); /* right aligned button */ x1 = x2 - pw->unlock_button_width; /* Add half the difference between y1 and the internal edge. * It actually looks better if the internal border is ignored. */ y1 += ((pw->height - MAX (pw->unlock_button_height, pw->login_button_height) - spacing - y1) / 2); pw->unlock_button_x = x1; pw->unlock_button_y = y1; /* The "New Login" button */ if (pw->login_button_p) { /* Using the same GC as for the Unlock button */ sw = string_width (pw->button_font, pw->login_label); /* left aligned button */ x1 = (pw->logo_width + pw->thermo_width + (pw->shadow_width * 3) + pw->internal_border); pw->login_button_x = x1; pw->login_button_y = y1; } /* The logo */ x1 = pw->shadow_width * 6; y1 = pw->shadow_width * 6; x2 = pw->logo_width - (pw->shadow_width * 12); y2 = pw->logo_height - (pw->shadow_width * 12); if (pw->logo_pixmap) { Window root; int x, y; unsigned int w, h, bw, d; XGetGeometry (si->dpy, pw->logo_pixmap, &root, &x, &y, &w, &h, &bw, &d); XSetForeground (si->dpy, gc1, pw->foreground); XSetBackground (si->dpy, gc1, pw->background); XSetClipMask (si->dpy, gc1, pw->logo_clipmask); XSetClipOrigin (si->dpy, gc1, x1 + ((x2 - (int)w) / 2), y1 + ((y2 - (int)h) / 2)); if (d == 1) XCopyPlane (si->dpy, pw->logo_pixmap, si->passwd_dialog, gc1, 0, 0, w, h, x1 + ((x2 - (int)w) / 2), y1 + ((y2 - (int)h) / 2), 1); else XCopyArea (si->dpy, pw->logo_pixmap, si->passwd_dialog, gc1, 0, 0, w, h, x1 + ((x2 - (int)w) / 2), y1 + ((y2 - (int)h) / 2)); } /* The thermometer */ XSetForeground (si->dpy, gc1, pw->thermo_foreground); XSetForeground (si->dpy, gc2, pw->thermo_background); pw->thermo_field_x = pw->logo_width + pw->shadow_width; pw->thermo_field_y = pw->shadow_width * 5; pw->thermo_field_height = pw->height - (pw->shadow_width * 10); #if 0 /* Solid border inside the logo box. */ XSetForeground (si->dpy, gc1, pw->foreground); XDrawRectangle (si->dpy, si->passwd_dialog, gc1, x1, y1, x2-1, y2-1); #endif /* The shadow around the logo */ draw_shaded_rectangle (si->dpy, si->passwd_dialog, pw->shadow_width * 4, pw->shadow_width * 4, pw->logo_width - (pw->shadow_width * 8), pw->logo_height - (pw->shadow_width * 8), pw->shadow_width, pw->shadow_bottom, pw->shadow_top); /* The shadow around the thermometer */ draw_shaded_rectangle (si->dpy, si->passwd_dialog, pw->logo_width, pw->shadow_width * 4, pw->thermo_width + (pw->shadow_width * 2), pw->height - (pw->shadow_width * 8), pw->shadow_width, pw->shadow_bottom, pw->shadow_top); #if 1 /* Solid border inside the thermometer. */ XSetForeground (si->dpy, gc1, pw->foreground); XDrawRectangle (si->dpy, si->passwd_dialog, gc1, pw->thermo_field_x, pw->thermo_field_y, pw->thermo_width - 1, pw->thermo_field_height - 1); #endif /* The shadow around the whole window */ draw_shaded_rectangle (si->dpy, si->passwd_dialog, 0, 0, pw->width, pw->height, pw->shadow_width, pw->shadow_top, pw->shadow_bottom); XFreeGC (si->dpy, gc1); XFreeGC (si->dpy, gc2); update_passwd_window (si, pw->passwd_string, pw->ratio); } static void draw_button(Display *dpy, Drawable dialog, XFontStruct *font, unsigned long foreground, unsigned long background, char *label, int x, int y, int width, int height, int shadow_width, Pixel shadow_light, Pixel shadow_dark, Bool button_down) { XGCValues gcv; GC gc1, gc2; int sw; int label_x, label_y; gcv.foreground = foreground; gcv.font = font->fid; gc1 = XCreateGC(dpy, dialog, GCForeground|GCFont, &gcv); gcv.foreground = background; gc2 = XCreateGC(dpy, dialog, GCForeground, &gcv); XFillRectangle(dpy, dialog, gc2, x, y, width, height); sw = string_width(font, label); label_x = x + ((width - sw) / 2); label_y = (y + (height - (font->ascent + font->descent)) / 2 + font->ascent); if (button_down) { label_x += 2; label_y += 2; } XDrawString(dpy, dialog, gc1, label_x, label_y, label, strlen(label)); XFreeGC(dpy, gc1); XFreeGC(dpy, gc2); draw_shaded_rectangle(dpy, dialog, x, y, width, height, shadow_width, shadow_light, shadow_dark); } static void update_passwd_window (saver_info *si, const char *printed_passwd, float ratio) { passwd_dialog_data *pw = si->pw_data; XGCValues gcv; GC gc1, gc2; int x, y; XRectangle rects[1]; pw->ratio = ratio; gcv.foreground = pw->passwd_foreground; gcv.font = pw->passwd_font->fid; gc1 = XCreateGC (si->dpy, si->passwd_dialog, GCForeground|GCFont, &gcv); gcv.foreground = pw->passwd_background; gc2 = XCreateGC (si->dpy, si->passwd_dialog, GCForeground, &gcv); if (printed_passwd) { char *s = strdup (printed_passwd); if (pw->passwd_string) free (pw->passwd_string); pw->passwd_string = s; } if (pw->prompt_label) { /* the "password" text field */ rects[0].x = pw->passwd_field_x; rects[0].y = pw->passwd_field_y; rects[0].width = pw->passwd_field_width; rects[0].height = pw->passwd_field_height; /* The user entry (password) field is double buffered. * This avoids flickering, particularly in synchronous mode. */ if (pw->passwd_changed_p) { pw->passwd_changed_p = False; if (pw->user_entry_pixmap) { XFreePixmap(si->dpy, pw->user_entry_pixmap); pw->user_entry_pixmap = 0; } pw->user_entry_pixmap = XCreatePixmap (si->dpy, si->passwd_dialog, rects[0].width, rects[0].height, DefaultDepthOfScreen (pw->prompt_screen->screen)); XFillRectangle (si->dpy, pw->user_entry_pixmap, gc2, 0, 0, rects[0].width, rects[0].height); XDrawString (si->dpy, pw->user_entry_pixmap, gc1, pw->shadow_width, pw->passwd_font->ascent, pw->passwd_string, strlen(pw->passwd_string)); /* Ensure the new pixmap gets copied to the window */ pw->i_beam = 0; } /* The I-beam */ if (pw->i_beam == 0) { /* Make the I-beam disappear */ XCopyArea(si->dpy, pw->user_entry_pixmap, si->passwd_dialog, gc2, 0, 0, rects[0].width, rects[0].height, rects[0].x, rects[0].y); } else if (pw->i_beam == 1) { /* Make the I-beam appear */ x = (rects[0].x + pw->shadow_width + string_width (pw->passwd_font, pw->passwd_string)); y = rects[0].y + pw->shadow_width; if (x > rects[0].x + rects[0].width - 1) x = rects[0].x + rects[0].width - 1; XDrawLine (si->dpy, si->passwd_dialog, gc1, x, y, x, y + pw->passwd_font->ascent + pw->passwd_font->descent-1); } pw->i_beam = (pw->i_beam + 1) % 4; } /* the thermometer */ y = (pw->thermo_field_height - 2) * (1.0 - pw->ratio); if (y > 0) { XFillRectangle (si->dpy, si->passwd_dialog, gc2, pw->thermo_field_x + 1, pw->thermo_field_y + 1, pw->thermo_width-2, y); XSetForeground (si->dpy, gc1, pw->thermo_foreground); XFillRectangle (si->dpy, si->passwd_dialog, gc1, pw->thermo_field_x + 1, pw->thermo_field_y + 1 + y, pw->thermo_width-2, MAX (0, pw->thermo_field_height - y - 2)); } if (pw->button_state_changed_p) { pw->button_state_changed_p = False; /* The "Unlock" button */ draw_button(si->dpy, si->passwd_dialog, pw->button_font, pw->button_foreground, pw->button_background, pw->unlock_label, pw->unlock_button_x, pw->unlock_button_y, pw->unlock_button_width, pw->unlock_button_height, pw->shadow_width, (pw->unlock_button_down_p ? pw->shadow_bottom : pw->shadow_top), (pw->unlock_button_down_p ? pw->shadow_top : pw->shadow_bottom), pw->unlock_button_down_p); /* The "New Login" button */ if (pw->login_button_p) { draw_button(si->dpy, si->passwd_dialog, pw->button_font, (pw->login_button_enabled_p ? pw->passwd_foreground : pw->shadow_bottom), pw->button_background, pw->login_label, pw->login_button_x, pw->login_button_y, pw->login_button_width, pw->login_button_height, pw->shadow_width, (pw->login_button_down_p ? pw->shadow_bottom : pw->shadow_top), (pw->login_button_down_p ? pw->shadow_top : pw->shadow_bottom), pw->login_button_down_p); } } XFreeGC (si->dpy, gc1); XFreeGC (si->dpy, gc2); XSync (si->dpy, False); } void restore_background (saver_info *si) { passwd_dialog_data *pw = si->pw_data; saver_screen_info *ssi = pw->prompt_screen; XGCValues gcv; GC gc; gcv.function = GXcopy; gc = XCreateGC (si->dpy, ssi->screensaver_window, GCFunction, &gcv); XCopyArea (si->dpy, pw->save_under, ssi->screensaver_window, gc, 0, 0, ssi->width, ssi->height, 0, 0); XFreeGC (si->dpy, gc); } /* Frees anything created by make_passwd_window */ static void cleanup_passwd_window (saver_info *si) { passwd_dialog_data *pw; if (!(pw = si->pw_data)) return; if (pw->info_label) { mlstring_free(pw->info_label); pw->info_label = 0; } if (pw->prompt_label) { mlstring_free(pw->prompt_label); pw->prompt_label = 0; } memset (pw->typed_passwd, 0, sizeof(pw->typed_passwd)); memset (pw->typed_passwd_char_size, 0, sizeof(pw->typed_passwd_char_size)); memset (pw->passwd_string, 0, strlen(pw->passwd_string)); if (pw->timer) { XtRemoveTimeOut (pw->timer); pw->timer = 0; } if (pw->user_entry_pixmap) { XFreePixmap(si->dpy, pw->user_entry_pixmap); pw->user_entry_pixmap = 0; } } static void destroy_passwd_window (saver_info *si) { saver_preferences *p = &si->prefs; passwd_dialog_data *pw = si->pw_data; saver_screen_info *ssi = pw->prompt_screen; Colormap cmap = DefaultColormapOfScreen (ssi->screen); Pixel black = BlackPixelOfScreen (ssi->screen); Pixel white = WhitePixelOfScreen (ssi->screen); XEvent event; cleanup_passwd_window (si); if (si->cached_passwd) { char *wipe = si->cached_passwd; while (*wipe) *wipe++ = '\0'; free(si->cached_passwd); si->cached_passwd = NULL; } move_mouse_grab (si, RootWindowOfScreen (ssi->screen), ssi->cursor, ssi->number); if (pw->passwd_cursor) XFreeCursor (si->dpy, pw->passwd_cursor); if (p->verbose_p) fprintf (stderr, "%s: %d: moving mouse back to %d,%d.\n", blurb(), ssi->number, pw->previous_mouse_x, pw->previous_mouse_y); XWarpPointer (si->dpy, None, RootWindowOfScreen (ssi->screen), 0, 0, 0, 0, pw->previous_mouse_x, pw->previous_mouse_y); XSync (si->dpy, False); while (XCheckMaskEvent (si->dpy, PointerMotionMask, &event)) if (p->verbose_p) fprintf (stderr, "%s: discarding MotionNotify event.\n", blurb()); #ifdef HAVE_XINPUT if (si->using_xinput_extension && si->xinput_DeviceMotionNotify) while (XCheckTypedEvent (si->dpy, si->xinput_DeviceMotionNotify, &event)) if (p->verbose_p) fprintf (stderr, "%s: discarding DeviceMotionNotify event.\n", blurb()); #endif if (si->passwd_dialog) { if (si->prefs.verbose_p) fprintf (stderr, "%s: %d: destroying password dialog.\n", blurb(), pw->prompt_screen->number); XDestroyWindow (si->dpy, si->passwd_dialog); si->passwd_dialog = 0; } if (pw->save_under) { restore_background(si); XFreePixmap (si->dpy, pw->save_under); pw->save_under = 0; } if (pw->heading_label) free (pw->heading_label); if (pw->body_label) free (pw->body_label); if (pw->user_label) free (pw->user_label); if (pw->date_label) free (pw->date_label); if (pw->login_label) free (pw->login_label); if (pw->unlock_label) free (pw->unlock_label); if (pw->passwd_string) free (pw->passwd_string); if (pw->uname_label) free (pw->uname_label); if (pw->heading_font) XFreeFont (si->dpy, pw->heading_font); if (pw->body_font) XFreeFont (si->dpy, pw->body_font); if (pw->label_font) XFreeFont (si->dpy, pw->label_font); if (pw->passwd_font) XFreeFont (si->dpy, pw->passwd_font); if (pw->date_font) XFreeFont (si->dpy, pw->date_font); if (pw->button_font) XFreeFont (si->dpy, pw->button_font); if (pw->uname_font) XFreeFont (si->dpy, pw->uname_font); if (pw->foreground != black && pw->foreground != white) XFreeColors (si->dpy, cmap, &pw->foreground, 1, 0L); if (pw->background != black && pw->background != white) XFreeColors (si->dpy, cmap, &pw->background, 1, 0L); if (!(pw->button_foreground == black || pw->button_foreground == white)) XFreeColors (si->dpy, cmap, &pw->button_foreground, 1, 0L); if (!(pw->button_background == black || pw->button_background == white)) XFreeColors (si->dpy, cmap, &pw->button_background, 1, 0L); if (pw->passwd_foreground != black && pw->passwd_foreground != white) XFreeColors (si->dpy, cmap, &pw->passwd_foreground, 1, 0L); if (pw->passwd_background != black && pw->passwd_background != white) XFreeColors (si->dpy, cmap, &pw->passwd_background, 1, 0L); if (pw->thermo_foreground != black && pw->thermo_foreground != white) XFreeColors (si->dpy, cmap, &pw->thermo_foreground, 1, 0L); if (pw->thermo_background != black && pw->thermo_background != white) XFreeColors (si->dpy, cmap, &pw->thermo_background, 1, 0L); if (pw->shadow_top != black && pw->shadow_top != white) XFreeColors (si->dpy, cmap, &pw->shadow_top, 1, 0L); if (pw->shadow_bottom != black && pw->shadow_bottom != white) XFreeColors (si->dpy, cmap, &pw->shadow_bottom, 1, 0L); if (pw->logo_pixmap) XFreePixmap (si->dpy, pw->logo_pixmap); if (pw-> logo_clipmask) XFreePixmap (si->dpy, pw->logo_clipmask); if (pw->logo_pixels) { if (pw->logo_npixels) XFreeColors (si->dpy, cmap, pw->logo_pixels, pw->logo_npixels, 0L); free (pw->logo_pixels); pw->logo_pixels = 0; pw->logo_npixels = 0; } if (pw->save_under) XFreePixmap (si->dpy, pw->save_under); if (cmap) XInstallColormap (si->dpy, cmap); memset (pw, 0, sizeof(*pw)); free (pw); si->pw_data = 0; } #if defined(HAVE_XF86MISCSETGRABKEYSSTATE) || defined(HAVE_XF86VMODE) static Bool error_handler_hit_p = False; static int ignore_all_errors_ehandler (Display *dpy, XErrorEvent *error) { error_handler_hit_p = True; return 0; } #endif /* HAVE_XF86MISCSETGRABKEYSSTATE || HAVE_XF86VMODE */ #ifdef HAVE_XHPDISABLERESET /* This function enables and disables the C-Sh-Reset hot-key, which normally resets the X server (logging out the logged-in user.) We don't want random people to be able to do that while the screen is locked. */ static void hp_lock_reset (saver_info *si, Bool lock_p) { static Bool hp_locked_p = False; /* Calls to XHPDisableReset and XHPEnableReset must be balanced, or BadAccess errors occur. (It's ok for this to be global, since it affects the whole machine, not just the current screen.) */ if (hp_locked_p == lock_p) return; if (lock_p) XHPDisableReset (si->dpy); else XHPEnableReset (si->dpy); hp_locked_p = lock_p; } #endif /* HAVE_XHPDISABLERESET */ #ifdef HAVE_XF86MISCSETGRABKEYSSTATE /* This function enables and disables the Ctrl-Alt-KP_star and Ctrl-Alt-KP_slash hot-keys, which (in XFree86 4.2) break any grabs and/or kill the grabbing client. That would effectively unlock the screen, so we don't like that. The Ctrl-Alt-KP_star and Ctrl-Alt-KP_slash hot-keys only exist if AllowDeactivateGrabs and/or AllowClosedownGrabs are turned on in XF86Config. I believe they are disabled by default. This does not affect any other keys (specifically Ctrl-Alt-BS or Ctrl-Alt-F1) but I wish it did. Maybe it will someday. */ static void xfree_lock_grab_smasher (saver_info *si, Bool lock_p) { saver_preferences *p = &si->prefs; int status; int event, error; XErrorHandler old_handler; if (!XF86MiscQueryExtension(si->dpy, &event, &error)) return; XSync (si->dpy, False); error_handler_hit_p = False; old_handler = XSetErrorHandler (ignore_all_errors_ehandler); XSync (si->dpy, False); status = XF86MiscSetGrabKeysState (si->dpy, !lock_p); XSync (si->dpy, False); if (error_handler_hit_p) status = 666; if (!lock_p && status == MiscExtGrabStateAlready) status = MiscExtGrabStateSuccess; /* shut up, consider this success */ if (p->verbose_p && status != MiscExtGrabStateSuccess) fprintf (stderr, "%s: error: XF86MiscSetGrabKeysState(%d) returned %s\n", blurb(), !lock_p, (status == MiscExtGrabStateSuccess ? "MiscExtGrabStateSuccess" : status == MiscExtGrabStateLocked ? "MiscExtGrabStateLocked" : status == MiscExtGrabStateAlready ? "MiscExtGrabStateAlready" : status == 666 ? "an X error" : "unknown value")); XSync (si->dpy, False); XSetErrorHandler (old_handler); XSync (si->dpy, False); } #endif /* HAVE_XF86MISCSETGRABKEYSSTATE */ /* This function enables and disables the C-Alt-Plus and C-Alt-Minus hot-keys, which normally change the resolution of the X server. We don't want people to be able to switch the server resolution while the screen is locked, because if they switch to a higher resolution, it could cause part of the underlying desktop to become exposed. */ #ifdef HAVE_XF86VMODE static void xfree_lock_mode_switch (saver_info *si, Bool lock_p) { static Bool any_mode_locked_p = False; saver_preferences *p = &si->prefs; int screen; int real_nscreens = ScreenCount (si->dpy); int event, error; Bool status; XErrorHandler old_handler; if (any_mode_locked_p == lock_p) return; if (!XF86VidModeQueryExtension (si->dpy, &event, &error)) return; for (screen = 0; screen < real_nscreens; screen++) { XSync (si->dpy, False); old_handler = XSetErrorHandler (ignore_all_errors_ehandler); error_handler_hit_p = False; status = XF86VidModeLockModeSwitch (si->dpy, screen, lock_p); XSync (si->dpy, False); XSetErrorHandler (old_handler); if (error_handler_hit_p) status = False; if (status) any_mode_locked_p = lock_p; if (!status && (p->verbose_p || !lock_p)) /* Only print this when verbose, or when we locked but can't unlock. I tried printing this message whenever it comes up, but mode-locking always fails if DontZoom is set in XF86Config. */ fprintf (stderr, "%s: %d: unable to %s mode switching!\n", blurb(), screen, (lock_p ? "lock" : "unlock")); else if (p->verbose_p) fprintf (stderr, "%s: %d: %s mode switching.\n", blurb(), screen, (lock_p ? "locked" : "unlocked")); } } #endif /* HAVE_XF86VMODE */ /* If the viewport has been scrolled since the screen was blanked, then scroll it back to where it belongs. This function only exists to patch over a very brief race condition. */ static void undo_vp_motion (saver_info *si) { #ifdef HAVE_XF86VMODE saver_preferences *p = &si->prefs; int screen; int real_nscreens = ScreenCount (si->dpy); int event, error; if (!XF86VidModeQueryExtension (si->dpy, &event, &error)) return; for (screen = 0; screen < real_nscreens; screen++) { saver_screen_info *ssi = &si->screens[screen]; int x, y; Bool status; if (ssi->blank_vp_x == -1 && ssi->blank_vp_y == -1) break; if (!XF86VidModeGetViewPort (si->dpy, screen, &x, &y)) return; if (ssi->blank_vp_x == x && ssi->blank_vp_y == y) return; /* We're going to move the viewport. The mouse has just been grabbed on (and constrained to, thus warped to) the password window, so it is no longer near the edge of the screen. However, wait a bit anyway, just to make sure the server drains its last motion event, so that the screen doesn't continue to scroll after we've reset the viewport. */ XSync (si->dpy, False); usleep (250000); /* 1/4 second */ XSync (si->dpy, False); status = XF86VidModeSetViewPort (si->dpy, screen, ssi->blank_vp_x, ssi->blank_vp_y); if (!status) fprintf (stderr, "%s: %d: unable to move vp from (%d,%d) back to (%d,%d)!\n", blurb(), screen, x, y, ssi->blank_vp_x, ssi->blank_vp_y); else if (p->verbose_p) fprintf (stderr, "%s: %d: vp moved to (%d,%d); moved it back to (%d,%d).\n", blurb(), screen, x, y, ssi->blank_vp_x, ssi->blank_vp_y); } #endif /* HAVE_XF86VMODE */ } /* Interactions */ static void passwd_animate_timer (XtPointer closure, XtIntervalId *id) { saver_info *si = (saver_info *) closure; int tick = 166; passwd_dialog_data *pw = si->pw_data; if (!pw) return; pw->ratio -= (1.0 / ((double) si->prefs.passwd_timeout / (double) tick)); if (pw->ratio < 0) { pw->ratio = 0; if (si->unlock_state == ul_read) si->unlock_state = ul_time; } update_passwd_window (si, 0, pw->ratio); if (si->unlock_state == ul_read) pw->timer = XtAppAddTimeOut (si->app, tick, passwd_animate_timer, (XtPointer) si); else pw->timer = 0; idle_timer ((XtPointer) si, 0); } static XComposeStatus *compose_status; static void handle_login_button (saver_info *si, XEvent *event) { saver_preferences *p = &si->prefs; Bool mouse_in_box = False; Bool hit_p = False; passwd_dialog_data *pw = si->pw_data; saver_screen_info *ssi = pw->prompt_screen; if (! pw->login_button_enabled_p) return; mouse_in_box = (event->xbutton.x >= pw->login_button_x && event->xbutton.x <= pw->login_button_x + pw->login_button_width && event->xbutton.y >= pw->login_button_y && event->xbutton.y <= pw->login_button_y + pw->login_button_height); if (ButtonRelease == event->xany.type && pw->login_button_down_p && mouse_in_box) { /* Only allow them to press the button once: don't want to accidentally launch a dozen gdm choosers if the machine is being slow. */ hit_p = True; pw->login_button_enabled_p = False; } pw->login_button_down_p = (mouse_in_box && ButtonRelease != event->xany.type); update_passwd_window (si, 0, pw->ratio); if (hit_p) fork_and_exec (ssi, p->new_login_command); } static void handle_unlock_button (saver_info *si, XEvent *event) { Bool mouse_in_box = False; passwd_dialog_data *pw = si->pw_data; mouse_in_box = (event->xbutton.x >= pw->unlock_button_x && event->xbutton.x <= pw->unlock_button_x + pw->unlock_button_width && event->xbutton.y >= pw->unlock_button_y && event->xbutton.y <= pw->unlock_button_y + pw->unlock_button_height); if (ButtonRelease == event->xany.type && pw->unlock_button_down_p && mouse_in_box) finished_typing_passwd (si, pw); pw->unlock_button_down_p = (mouse_in_box && ButtonRelease != event->xany.type); } static void finished_typing_passwd (saver_info *si, passwd_dialog_data *pw) { if (si->unlock_state == ul_read) { update_passwd_window (si, "Checking...", pw->ratio); XSync (si->dpy, False); si->unlock_state = ul_finished; update_passwd_window (si, "", pw->ratio); } } static void handle_passwd_key (saver_info *si, XKeyEvent *event) { passwd_dialog_data *pw = si->pw_data; unsigned char decoded [MAX_BYTES_PER_CHAR * 10]; /* leave some slack */ KeySym keysym = 0; /* XLookupString may return more than one character via XRebindKeysym; and on some systems it returns multi-byte UTF-8 characters (contrary to its documentation, which says it returns only Latin1.) It seems to only do so, however, if setlocale() has been called. See the code inside ENABLE_NLS in xscreensaver.c. */ int decoded_size = XLookupString (event, (char *)decoded, sizeof(decoded), &keysym, compose_status); #if 0 { const char *ks = XKeysymToString (keysym); int i; fprintf(stderr, "## %-12s\t=> %d\t", (ks ? ks : "(null)"), decoded_size); for (i = 0; i < decoded_size; i++) fprintf(stderr, "%c", decoded[i]); fprintf(stderr, "\t"); for (i = 0; i < decoded_size; i++) fprintf(stderr, "\\%03o", ((unsigned char *)decoded)[i]); fprintf(stderr, "\n"); } #endif if (decoded_size > MAX_BYTES_PER_CHAR) { /* The multi-byte character returned is too large. */ XBell (si->dpy, 0); return; } decoded[decoded_size] = 0; pw->passwd_changed_p = True; /* Add 10% to the time remaining every time a key is pressed. */ pw->ratio += 0.1; if (pw->ratio > 1) pw->ratio = 1; if (decoded_size == 1) /* Handle single-char commands */ { switch (*decoded) { case '\010': case '\177': /* Backspace */ { /* kludgey way to get the number of "logical" characters. */ int nchars = strlen (pw->typed_passwd_char_size); int nbytes = strlen (pw->typed_passwd); if (nbytes <= 0) XBell (si->dpy, 0); else { int i; for (i = pw->typed_passwd_char_size[nchars-1]; i >= 0; i--) { if (nbytes < 0) abort(); pw->typed_passwd[nbytes--] = 0; } pw->typed_passwd_char_size[nchars-1] = 0; } } break; case '\012': case '\015': /* Enter */ finished_typing_passwd (si, pw); break; case '\033': /* Escape */ si->unlock_state = ul_cancel; break; case '\025': case '\030': /* Erase line */ memset (pw->typed_passwd, 0, sizeof (pw->typed_passwd)); memset (pw->typed_passwd_char_size, 0, sizeof (pw->typed_passwd_char_size)); break; default: if (*decoded < ' ' && *decoded != '\t') /* Other ctrl char */ XBell (si->dpy, 0); else goto SELF_INSERT; break; } } else { int nbytes, nchars; SELF_INSERT: nbytes = strlen (pw->typed_passwd); nchars = strlen (pw->typed_passwd_char_size); if (nchars + 1 >= sizeof (pw->typed_passwd_char_size)-1 || nbytes + decoded_size >= sizeof (pw->typed_passwd)-1) /* overflow */ XBell (si->dpy, 0); else { pw->typed_passwd_char_size[nchars] = decoded_size; pw->typed_passwd_char_size[nchars+1] = 0; memcpy (pw->typed_passwd + nbytes, decoded, decoded_size); pw->typed_passwd[nbytes + decoded_size] = 0; } } if (pw->echo_input) { /* If the input is wider than the text box, only show the last portion, to simulate a horizontally-scrolling text field. */ int chars_in_pwfield = (pw->passwd_field_width / pw->passwd_font->max_bounds.width); const char *output = pw->typed_passwd; if (strlen(output) > chars_in_pwfield) output += (strlen(output) - chars_in_pwfield); update_passwd_window (si, output, pw->ratio); } else if (pw->show_stars_p) { int nchars = strlen (pw->typed_passwd_char_size); char *stars = 0; stars = (char *) malloc(nchars + 1); memset (stars, '*', nchars); stars[nchars] = 0; update_passwd_window (si, stars, pw->ratio); free (stars); } else { update_passwd_window (si, "", pw->ratio); } } static void passwd_event_loop (saver_info *si) { saver_preferences *p = &si->prefs; char *msg = 0; /* We have to go through this union bullshit because gcc-4.4.0 has stricter struct-aliasing rules. Without this, the optimizer can fuck things up. */ union { XEvent x_event; # ifdef HAVE_RANDR XRRScreenChangeNotifyEvent xrr_event; # endif /* HAVE_RANDR */ } event; passwd_animate_timer ((XtPointer) si, 0); reset_watchdog_timer (si, False); /* Disable watchdog while dialog up */ while (si->unlock_state == ul_read) { XtAppNextEvent (si->app, &event.x_event); #ifdef HAVE_RANDR if (si->using_randr_extension && (event.x_event.type == (si->randr_event_number + RRScreenChangeNotify))) { /* The Resize and Rotate extension sends an event when the size, rotation, or refresh rate of any screen has changed. */ if (p->verbose_p) { /* XRRRootToScreen is in Xrandr.h 1.4, 2001/06/07 */ int screen = XRRRootToScreen(si->dpy, event.xrr_event.window); fprintf (stderr, "%s: %d: screen change event received\n", blurb(), screen); } #ifdef RRScreenChangeNotifyMask /* Inform Xlib that it's ok to update its data structures. */ XRRUpdateConfiguration(&event.x_event); /* Xrandr.h 1.9, 2002/09/29*/ #endif /* RRScreenChangeNotifyMask */ /* Resize the existing xscreensaver windows and cached ssi data. */ if (update_screen_layout (si)) { if (p->verbose_p) { fprintf (stderr, "%s: new layout:\n", blurb()); describe_monitor_layout (si); } resize_screensaver_window (si); } } else #endif /* HAVE_RANDR */ if (event.x_event.xany.window == si->passwd_dialog && event.x_event.xany.type == Expose) draw_passwd_window (si); else if (event.x_event.xany.type == KeyPress) { handle_passwd_key (si, &event.x_event.xkey); si->pw_data->caps_p = (event.x_event.xkey.state & LockMask); } else if (event.x_event.xany.type == ButtonPress || event.x_event.xany.type == ButtonRelease) { si->pw_data->button_state_changed_p = True; handle_unlock_button (si, &event.x_event); if (si->pw_data->login_button_p) handle_login_button (si, &event.x_event); } else XtDispatchEvent (&event.x_event); } switch (si->unlock_state) { case ul_cancel: msg = ""; break; case ul_time: msg = "Timed out!"; break; case ul_finished: msg = "Checking..."; break; default: msg = 0; break; } if (p->verbose_p) switch (si->unlock_state) { case ul_cancel: fprintf (stderr, "%s: input cancelled.\n", blurb()); break; case ul_time: fprintf (stderr, "%s: input timed out.\n", blurb()); break; case ul_finished: fprintf (stderr, "%s: input finished.\n", blurb()); break; default: break; } if (msg) { si->pw_data->i_beam = 0; update_passwd_window (si, msg, 0.0); XSync (si->dpy, False); /* Swallow all pending KeyPress/KeyRelease events. */ { XEvent e; while (XCheckMaskEvent (si->dpy, KeyPressMask|KeyReleaseMask, &e)) ; } } reset_watchdog_timer (si, True); /* Re-enable watchdog */ } static void handle_typeahead (saver_info *si) { passwd_dialog_data *pw = si->pw_data; int i; if (!si->unlock_typeahead) return; pw->passwd_changed_p = True; i = strlen (si->unlock_typeahead); if (i >= sizeof(pw->typed_passwd) - 1) i = sizeof(pw->typed_passwd) - 1; memcpy (pw->typed_passwd, si->unlock_typeahead, i); pw->typed_passwd [i] = 0; { int j; char *c = pw->typed_passwd_char_size; for (j = 0; j < i; j++) *c++ = 1; *c = 0; } memset (si->unlock_typeahead, '*', strlen(si->unlock_typeahead)); si->unlock_typeahead[i] = 0; update_passwd_window (si, si->unlock_typeahead, pw->ratio); free (si->unlock_typeahead); si->unlock_typeahead = 0; } /** * Returns a copy of the input string with trailing whitespace removed. * Whitespace is anything considered so by isspace(). * It is safe to call this with NULL, in which case NULL will be returned. * The returned string (if not NULL) should be freed by the caller with free(). */ static char * remove_trailing_whitespace(const char *str) { size_t len; char *newstr, *chr; if (!str) return NULL; len = strlen(str); newstr = malloc(len + 1); if (!newstr) return NULL; (void) strcpy(newstr, str); chr = newstr + len; while (isspace(*--chr) && chr >= newstr) *chr = '\0'; return newstr; } /* * The authentication conversation function. * Like a PAM conversation function, this accepts multiple messages in a single * round. It then splits them into individual messages for display on the * passwd dialog. A message sequence of info or error followed by a prompt will * be reduced into a single dialog window. * * Returns 0 on success or -1 if some problem occurred (cancelled, OOM, etc.) */ int gui_auth_conv(int num_msg, const struct auth_message auth_msgs[], struct auth_response **resp, saver_info *si) { int i; const char *info_msg, *prompt; struct auth_response *responses; if (si->unlock_state == ul_cancel || si->unlock_state == ul_time) /* If we've already cancelled or timed out in this PAM conversation, don't prompt again even if PAM asks us to! */ return -1; if (!(responses = calloc(num_msg, sizeof(struct auth_response)))) goto fail; for (i = 0; i < num_msg; ++i) { info_msg = prompt = NULL; /* See if there is a following message that can be shown at the same * time */ if (auth_msgs[i].type == AUTH_MSGTYPE_INFO && i+1 < num_msg && ( auth_msgs[i+1].type == AUTH_MSGTYPE_PROMPT_NOECHO || auth_msgs[i+1].type == AUTH_MSGTYPE_PROMPT_ECHO) ) { info_msg = auth_msgs[i].msg; prompt = auth_msgs[++i].msg; } else { if ( auth_msgs[i].type == AUTH_MSGTYPE_INFO || auth_msgs[i].type == AUTH_MSGTYPE_ERROR) info_msg = auth_msgs[i].msg; else prompt = auth_msgs[i].msg; } { char *info_msg_trimmed, *prompt_trimmed; /* Trailing whitespace looks bad in a GUI */ info_msg_trimmed = remove_trailing_whitespace(info_msg); prompt_trimmed = remove_trailing_whitespace(prompt); if (make_passwd_window(si, info_msg_trimmed, prompt_trimmed, auth_msgs[i].type == AUTH_MSGTYPE_PROMPT_ECHO ? True : False) < 0) goto fail; if (info_msg_trimmed) free(info_msg_trimmed); if (prompt_trimmed) free(prompt_trimmed); } compose_status = calloc (1, sizeof (*compose_status)); if (!compose_status) goto fail; si->unlock_state = ul_read; handle_typeahead (si); passwd_event_loop (si); if (si->unlock_state == ul_cancel) goto fail; responses[i].response = strdup(si->pw_data->typed_passwd); /* Cache the first response to a PROMPT_NOECHO to save prompting for * each auth mechanism. */ if (si->cached_passwd == NULL && auth_msgs[i].type == AUTH_MSGTYPE_PROMPT_NOECHO) si->cached_passwd = strdup(responses[i].response); free (compose_status); compose_status = 0; } *resp = responses; return (si->unlock_state == ul_finished) ? 0 : -1; fail: if (compose_status) free (compose_status); compose_status = 0; if (responses) { for (i = 0; i < num_msg; ++i) if (responses[i].response) free (responses[i].response); free (responses); } return -1; } void auth_finished_cb (saver_info *si) { char buf[1024]; const char *s; /* If we have something to say, put the dialog back up for a few seconds to display it. Otherwise, don't bother. */ if (si->unlock_state == ul_fail && /* failed with caps lock on */ si->pw_data && si->pw_data->caps_p) s = "Authentication failed (Caps Lock?)"; else if (si->unlock_state == ul_fail) /* failed without caps lock */ s = "Authentication failed!"; else if (si->unlock_state == ul_success && /* good, but report failures */ si->unlock_failures > 0) { if (si->unlock_failures == 1) s = "There has been\n1 failed login attempt."; else { sprintf (buf, "There have been\n%d failed login attempts.", si->unlock_failures); s = buf; } si->unlock_failures = 0; /* ignore failures if they all were too recent */ if (time((time_t *) 0) - si->unlock_failure_time < si->prefs.auth_warning_slack) goto END; } else /* good, with no failures, */ goto END; /* or timeout, or cancel. */ make_passwd_window (si, s, NULL, True); XSync (si->dpy, False); { int secs = 4; time_t start = time ((time_t *) 0); XEvent event; while (time ((time_t *) 0) < start + secs) if (XPending (si->dpy)) { XNextEvent (si->dpy, &event); if (event.xany.window == si->passwd_dialog && event.xany.type == Expose) draw_passwd_window (si); else if (event.xany.type == ButtonPress || event.xany.type == KeyPress) break; XSync (si->dpy, False); } else usleep (250000); /* 1/4 second */ } END: if (si->pw_data) destroy_passwd_window (si); } Bool unlock_p (saver_info *si) { saver_preferences *p = &si->prefs; if (!si->unlock_cb) { fprintf(stderr, "%s: Error: no unlock function specified!\n", blurb()); return False; } raise_window (si, True, True, True); xss_authenticate(si, p->verbose_p); return (si->unlock_state == ul_success); } void set_locked_p (saver_info *si, Bool locked_p) { si->locked_p = locked_p; #ifdef HAVE_XHPDISABLERESET hp_lock_reset (si, locked_p); /* turn off/on C-Sh-Reset */ #endif #ifdef HAVE_XF86VMODE xfree_lock_mode_switch (si, locked_p); /* turn off/on C-Alt-Plus */ #endif #ifdef HAVE_XF86MISCSETGRABKEYSSTATE xfree_lock_grab_smasher (si, locked_p); /* turn off/on C-Alt-KP-*,/ */ #endif store_saver_status (si); /* store locked-p */ } #else /* NO_LOCKING -- whole file */ void set_locked_p (saver_info *si, Bool locked_p) { if (locked_p) abort(); } #endif /* !NO_LOCKING */ xscreensaver-5.36/driver/passwd.c000644 000767 000024 00000023327 12701612237 017106 0ustar00jwzstaff000000 000000 /* passwd.c --- verifying typed passwords with the OS. * xscreensaver, Copyright (c) 1993-2014 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. */ #ifdef HAVE_CONFIG_H # include "config.h" #endif #ifndef NO_LOCKING /* whole file */ #include #include #include #ifdef HAVE_UNISTD_H # include #endif #include #include #ifndef VMS # include /* for getpwuid() */ #else /* VMS */ # include "vms-pwd.h" #endif /* VMS */ #ifdef HAVE_SYSLOG # include #endif /* HAVE_SYSLOG */ #include #include "xscreensaver.h" #include "auth.h" extern const char *blurb(void); extern void check_for_leaks (const char *where); /* blargh */ #undef Bool #undef True #undef False #define Bool int #define True 1 #define False 0 #undef countof #define countof(x) (sizeof((x))/sizeof(*(x))) struct auth_methods { const char *name; Bool (*init) (int argc, char **argv, Bool verbose_p); Bool (*priv_init) (int argc, char **argv, Bool verbose_p); Bool (*valid_p) (const char *typed_passwd, Bool verbose_p); void (*try_unlock) (saver_info *si, Bool verbose_p, Bool (*valid_p)(const char *typed_passwd, Bool verbose_p)); Bool initted_p; Bool priv_initted_p; }; #ifdef HAVE_KERBEROS extern Bool kerberos_lock_init (int argc, char **argv, Bool verbose_p); extern Bool kerberos_passwd_valid_p (const char *typed_passwd, Bool verbose_p); #endif #ifdef HAVE_PAM extern Bool pam_priv_init (int argc, char **argv, Bool verbose_p); extern void pam_try_unlock (saver_info *si, Bool verbose_p, Bool (*valid_p)(const char *typed_passwd, Bool verbose_p)); #endif #ifdef PASSWD_HELPER_PROGRAM extern Bool ext_priv_init (int argc, char **argv, Bool verbose_p); extern Bool ext_passwd_valid_p (const char *typed_passwd, Bool verbose_p); #endif extern Bool pwent_lock_init (int argc, char **argv, Bool verbose_p); extern Bool pwent_priv_init (int argc, char **argv, Bool verbose_p); extern Bool pwent_passwd_valid_p (const char *typed_passwd, Bool verbose_p); Bool lock_priv_init (int argc, char **argv, Bool verbose_p); Bool lock_init (int argc, char **argv, Bool verbose_p); Bool passwd_valid_p (const char *typed_passwd, Bool verbose_p); /* The authorization methods to try, in order. Note that the last one (the pwent version) is actually two auth methods, since that code tries shadow passwords, and then non-shadow passwords. (It's all in the same file since the APIs are randomly nearly-identical.) */ struct auth_methods methods[] = { # ifdef HAVE_PAM { "PAM", 0, pam_priv_init, 0, pam_try_unlock, False, False }, # endif # ifdef HAVE_KERBEROS { "Kerberos", kerberos_lock_init, 0, kerberos_passwd_valid_p, 0, False, False }, # endif # ifdef PASSWD_HELPER_PROGRAM { "external", 0, ext_priv_init, ext_passwd_valid_p, 0, False, False }, # endif { "normal", pwent_lock_init, pwent_priv_init, pwent_passwd_valid_p, 0, False, False } }; Bool lock_priv_init (int argc, char **argv, Bool verbose_p) { int i; Bool any_ok = False; for (i = 0; i < countof(methods); i++) { if (!methods[i].priv_init) methods[i].priv_initted_p = True; else methods[i].priv_initted_p = methods[i].priv_init (argc, argv, verbose_p); if (methods[i].priv_initted_p) any_ok = True; else if (verbose_p) fprintf (stderr, "%s: initialization of %s passwords failed.\n", blurb(), methods[i].name); } return any_ok; } Bool lock_init (int argc, char **argv, Bool verbose_p) { int i; Bool any_ok = False; for (i = 0; i < countof(methods); i++) { if (!methods[i].priv_initted_p) /* Bail if lock_priv_init failed. */ continue; if (!methods[i].init) methods[i].initted_p = True; else methods[i].initted_p = methods[i].init (argc, argv, verbose_p); if (methods[i].initted_p) any_ok = True; else if (verbose_p) fprintf (stderr, "%s: initialization of %s passwords failed.\n", blurb(), methods[i].name); } return any_ok; } /* A basic auth driver that simply prompts for a password then runs it through * valid_p to determine whether the password is correct. */ static void try_unlock_password(saver_info *si, Bool verbose_p, Bool (*valid_p)(const char *typed_passwd, Bool verbose_p)) { struct auth_message message; struct auth_response *response = NULL; memset(&message, 0, sizeof(message)); if (verbose_p) fprintf(stderr, "%s: non-PAM password auth.\n", blurb()); /* Call the auth_conv function with "Password:", then feed * the result into valid_p() */ message.type = AUTH_MSGTYPE_PROMPT_NOECHO; message.msg = "Password:"; si->unlock_cb(1, &message, &response, si); if (!response) return; if (valid_p (response->response, verbose_p)) si->unlock_state = ul_success; /* yay */ else if (si->unlock_state == ul_cancel || si->unlock_state == ul_time) ; /* more specific failures ok */ else si->unlock_state = ul_fail; /* generic failure */ if (response->response) free(response->response); free(response); } /* Write a password failure to the system log. */ static void do_syslog (saver_info *si, Bool verbose_p) { # ifdef HAVE_SYSLOG struct passwd *pw = getpwuid (getuid ()); char *d = DisplayString (si->dpy); char *u = (pw && pw->pw_name ? pw->pw_name : "???"); int opt = 0; int fac = 0; # ifdef LOG_PID opt = LOG_PID; # endif # if defined(LOG_AUTHPRIV) fac = LOG_AUTHPRIV; # elif defined(LOG_AUTH) fac = LOG_AUTH; # else fac = LOG_DAEMON; # endif if (!d) d = ""; # undef FMT # define FMT "FAILED LOGIN %d ON DISPLAY \"%s\", FOR \"%s\"" if (verbose_p) fprintf (stderr, "%s: syslog: " FMT "\n", blurb(), si->unlock_failures, d, u); openlog (progname, opt, fac); syslog (LOG_NOTICE, FMT, si->unlock_failures, d, u); closelog (); # endif /* HAVE_SYSLOG */ } /** * Runs through each authentication driver calling its try_unlock function. * Called xss_authenticate() because AIX beat us to the name authenticate(). */ void xss_authenticate(saver_info *si, Bool verbose_p) { int i, j; si->unlock_state = ul_read; for (i = 0; i < countof(methods); i++) { if (!methods[i].initted_p) continue; if (si->cached_passwd != NULL && methods[i].valid_p) si->unlock_state = (methods[i].valid_p(si->cached_passwd, verbose_p) == True) ? ul_success : ul_fail; else if (methods[i].try_unlock != NULL) methods[i].try_unlock(si, verbose_p, methods[i].valid_p); else if (methods[i].valid_p) try_unlock_password(si, verbose_p, methods[i].valid_p); else /* Ze goggles, zey do nozing! */ fprintf(stderr, "%s: authentication method %s does nothing.\n", blurb(), methods[i].name); check_for_leaks (methods[i].name); /* If password authentication failed, but the password was NULL (meaning the user just hit RET) then treat that as "cancel". This means that if the password is literally NULL, it will work; but if not, then NULL passwords are treated as cancel. */ if (si->unlock_state == ul_fail && si->cached_passwd && !*si->cached_passwd) { fprintf (stderr, "%s: assuming null password means cancel.\n", blurb()); si->unlock_state = ul_cancel; } if (si->unlock_state == ul_success) { /* If we successfully authenticated by method N, but attempting to authenticate by method N-1 failed, mention that (since if an earlier authentication method fails and a later one succeeds, something screwy is probably going on.) */ if (verbose_p && i > 0) { for (j = 0; j < i; j++) if (methods[j].initted_p) fprintf (stderr, "%s: authentication via %s failed.\n", blurb(), methods[j].name); fprintf (stderr, "%s: authentication via %s succeeded.\n", blurb(), methods[i].name); } goto DONE; /* Successfully authenticated! */ } else if (si->unlock_state == ul_cancel || si->unlock_state == ul_time) { /* If any auth method gets a cancel or timeout, don't try the next auth method! We're done! */ fprintf (stderr, "%s: authentication via %s %s.\n", blurb(), methods[i].name, (si->unlock_state == ul_cancel ? "cancelled" : "timed out")); goto DONE; } } if (verbose_p) fprintf(stderr, "%s: All authentication mechanisms failed.\n", blurb()); if (si->unlock_state == ul_fail) { /* Note the time of the first failure */ if (si->unlock_failures == 0) si->unlock_failure_time = time((time_t *) 0); si->unlock_failures++; do_syslog (si, verbose_p); } DONE: if (si->auth_finished_cb) si->auth_finished_cb (si); } #endif /* NO_LOCKING -- whole file */ xscreensaver-5.36/driver/prefs.c000644 000767 000024 00000141646 12720742653 016740 0ustar00jwzstaff000000 000000 /* dotfile.c --- management of the ~/.xscreensaver file. * xscreensaver, Copyright (c) 1998-2016 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. */ #ifdef HAVE_CONFIG_H # include "config.h" #endif #include #ifdef HAVE_UNISTD_H # include #endif #include #include #include #include #include #include #include /* for PATH_MAX */ #include #include #ifndef VMS # include #else /* VMS */ # include "vms-pwd.h" #endif /* VMS */ /* This file doesn't need the Xt headers, so stub these types out... */ #undef XtPointer #define XtAppContext void* #define XtIntervalId void* #define XtPointer void* #define Widget void* /* Just in case there's something pathological about stat.h... */ #ifndef S_IRUSR # define S_IRUSR 00400 #endif #ifndef S_IWUSR # define S_IWUSR 00200 #endif #ifndef S_IXUSR # define S_IXUSR 00100 #endif #ifndef S_IXGRP # define S_IXGRP 00010 #endif #ifndef S_IXOTH # define S_IXOTH 00001 #endif #include "version.h" #include "prefs.h" #include "resources.h" /* don't use realpath() on fedora system */ #ifdef _FORTIFY_SOURCE #undef HAVE_REALPATH #endif extern char *progname; extern char *progclass; extern const char *blurb (void); static void get_screenhacks (Display *, saver_preferences *); static char *format_command (const char *cmd, Bool wrap_p); static void merge_system_screenhacks (Display *, saver_preferences *, screenhack **system_list, int count); static void stop_the_insanity (saver_preferences *p); static char * chase_symlinks (const char *file) { # ifdef HAVE_REALPATH if (file) { # ifndef PATH_MAX # ifdef MAXPATHLEN # define PATH_MAX MAXPATHLEN # else # define PATH_MAX 2048 # endif # endif char buf[PATH_MAX]; if (realpath (file, buf)) return strdup (buf); /* sprintf (buf, "%.100s: realpath %.200s", blurb(), file); perror(buf);*/ } # endif /* HAVE_REALPATH */ return 0; } static Bool i_am_a_nobody (uid_t uid) { struct passwd *p; p = getpwnam ("nobody"); if (! p) p = getpwnam ("noaccess"); if (! p) p = getpwnam ("daemon"); if (! p) /* There is no nobody? */ return False; return (uid == p->pw_uid); } const char * init_file_name (void) { static char *file = 0; if (!file) { uid_t uid = getuid (); struct passwd *p = getpwuid (uid); if (i_am_a_nobody (uid)) /* If we're running as nobody, then use root's .xscreensaver file (since ~root/.xscreensaver and ~nobody/.xscreensaver are likely to be different -- if we didn't do this, then xscreensaver-demo would appear to have no effect when the luser is running as root.) */ uid = 0; p = getpwuid (uid); if (!p || !p->pw_name || !*p->pw_name) { fprintf (stderr, "%s: couldn't get user info of uid %d\n", blurb(), getuid ()); file = ""; } else if (!p->pw_dir || !*p->pw_dir) { fprintf (stderr, "%s: couldn't get home directory of \"%s\"\n", blurb(), (p->pw_name ? p->pw_name : "???")); file = ""; } else { const char *home = p->pw_dir; const char *name = ".xscreensaver"; file = (char *) malloc(strlen(home) + strlen(name) + 2); strcpy(file, home); if (!*home || home[strlen(home)-1] != '/') strcat(file, "/"); strcat(file, name); } } if (file && *file) return file; else return 0; } static const char * init_file_tmp_name (void) { static char *file = 0; if (!file) { const char *name = init_file_name(); const char *suffix = ".tmp"; char *n2 = chase_symlinks (name); if (n2) name = n2; if (!name || !*name) file = ""; else { file = (char *) malloc(strlen(name) + strlen(suffix) + 2); strcpy(file, name); strcat(file, suffix); } if (n2) free (n2); } if (file && *file) return file; else return 0; } static int get_byte_resource (Display *dpy, char *name, char *class) { char *s = get_string_resource (dpy, name, class); char *s2 = s; int n = 0; if (!s) return 0; while (isspace(*s2)) s2++; while (*s2 >= '0' && *s2 <= '9') { n = (n * 10) + (*s2 - '0'); s2++; } while (isspace(*s2)) s2++; if (*s2 == 'k' || *s2 == 'K') n <<= 10; else if (*s2 == 'm' || *s2 == 'M') n <<= 20; else if (*s2 == 'g' || *s2 == 'G') n <<= 30; else if (*s2) { LOSE: fprintf (stderr, "%s: %s must be a number of bytes, not \"%s\".\n", progname, name, s); free (s); return 0; } s2++; if (*s2 == 'b' || *s2 == 'B') s2++; while (isspace(*s2)) s2++; if (*s2) goto LOSE; free (s); return n; } static const char * const prefs[] = { "timeout", "cycle", "lock", "lockVTs", /* not saved */ "lockTimeout", "passwdTimeout", "visualID", "installColormap", "verbose", "timestamp", "splash", "splashDuration", "quad", "demoCommand", "prefsCommand", "newLoginCommand", "helpURL", /* not saved */ "loadURL", /* not saved */ "newLoginCommand", /* not saved */ "nice", "memoryLimit", "fade", "unfade", "fadeSeconds", "fadeTicks", "captureStderr", "captureStdout", /* not saved -- obsolete */ "logFile", /* not saved */ "ignoreUninstalledPrograms", "font", "dpmsEnabled", "dpmsQuickOff", "dpmsStandby", "dpmsSuspend", "dpmsOff", "grabDesktopImages", "grabVideoFrames", "chooseRandomImages", "imageDirectory", "mode", "selected", "textMode", "textLiteral", "textFile", "textProgram", "textURL", "", "programs", "", "pointerPollTime", "pointerHysteresis", "windowCreationTimeout", "initialDelay", "sgiSaverExtension", /* not saved -- obsolete */ "mitSaverExtension", /* not saved -- obsolete */ "xidleExtension", /* not saved -- obsolete */ "GetViewPortIsFullOfLies", "procInterrupts", "xinputExtensionDev", "overlayStderr", "overlayTextBackground", /* not saved -- X resources only */ "overlayTextForeground", /* not saved -- X resources only */ "bourneShell", /* not saved -- X resources only */ "authWarningSlack", 0 }; static char * strip (char *s) { char *s2; while (*s == '\t' || *s == ' ' || *s == '\r' || *s == '\n') s++; for (s2 = s; *s2; s2++) ; for (s2--; s2 >= s; s2--) if (*s2 == '\t' || *s2 == ' ' || *s2 == '\r' || *s2 =='\n') *s2 = 0; else break; return s; } /* Reading */ static int handle_entry (XrmDatabase *db, const char *key, const char *value, const char *filename, int line) { int i; for (i = 0; prefs[i]; i++) if (*prefs[i] && !strcasecmp(key, prefs[i])) { char *val = strdup(value); char *spec = (char *) malloc(strlen(progclass) + strlen(prefs[i]) +10); strcpy(spec, progclass); strcat(spec, "."); strcat(spec, prefs[i]); XrmPutStringResource (db, spec, val); free(spec); free(val); return 0; } fprintf(stderr, "%s: %s:%d: unknown option \"%s\"\n", blurb(), filename, line, key); return 1; } static int parse_init_file (saver_preferences *p) { time_t write_date = 0; const char *name = init_file_name(); int line = 0; struct stat st; FILE *in; int buf_size = 1024; char *buf; if (!name) return 0; if (stat(name, &st) != 0) { p->init_file_date = 0; return 0; } in = fopen(name, "r"); if (!in) { char *buf = (char *) malloc(1024 + strlen(name)); sprintf(buf, "%s: error reading \"%s\"", blurb(), name); perror(buf); free(buf); return -1; } if (fstat (fileno(in), &st) == 0) { write_date = st.st_mtime; } else { char *buf = (char *) malloc(1024 + strlen(name)); sprintf(buf, "%s: couldn't re-stat \"%s\"", blurb(), name); perror(buf); free(buf); return -1; } buf = (char *) malloc(buf_size); while (fgets (buf, buf_size-1, in)) { char *key, *value; int L = strlen(buf); line++; while (L > 2 && (buf[L-1] != '\n' || /* whole line didn't fit in buffer */ buf[L-2] == '\\')) /* or line ended with backslash */ { if (buf[L-2] == '\\') /* backslash-newline gets swallowed */ { buf[L-2] = 0; L -= 2; } buf_size += 1024; buf = (char *) realloc(buf, buf_size); if (!buf) exit(1); line++; if (!fgets (buf + L, buf_size-L-1, in)) break; L = strlen(buf); } /* Now handle other backslash escapes. */ { int i, j; for (i = 0; buf[i]; i++) if (buf[i] == '\\') { switch (buf[i+1]) { case 'n': buf[i] = '\n'; break; case 'r': buf[i] = '\r'; break; case 't': buf[i] = '\t'; break; default: buf[i] = buf[i+1]; break; } for (j = i+2; buf[j]; j++) buf[j-1] = buf[j]; buf[j-1] = 0; } } key = strip(buf); if (*key == '#' || *key == '!' || *key == ';' || *key == '\n' || *key == 0) continue; value = strchr (key, ':'); if (!value) { fprintf(stderr, "%s: %s:%d: unparsable line: %s\n", blurb(), name, line, key); continue; } else { *value++ = 0; value = strip(value); } if (!p->db) abort(); handle_entry (&p->db, key, value, name, line); } fclose (in); free(buf); p->init_file_date = write_date; return 0; } Bool init_file_changed_p (saver_preferences *p) { const char *name = init_file_name(); struct stat st; if (!name) return False; if (stat(name, &st) != 0) return False; if (p->init_file_date == st.st_mtime) return False; return True; } /* Writing */ static int tab_to (FILE *out, int from, int to) { int tab_width = 8; int to_mod = (to / tab_width) * tab_width; while (from < to_mod) { fprintf(out, "\t"); from = (((from / tab_width) + 1) * tab_width); } while (from < to) { fprintf(out, " "); from++; } return from; } static char * stab_to (char *out, int from, int to) { int tab_width = 8; int to_mod = (to / tab_width) * tab_width; while (from < to_mod) { *out++ = '\t'; from = (((from / tab_width) + 1) * tab_width); } while (from < to) { *out++ = ' '; from++; } return out; } static int string_columns (const char *string, int length, int start) { int tab_width = 8; int col = start; const char *end = string + length; while (string < end) { if (*string == '\n') col = 0; else if (*string == '\t') col = (((col / tab_width) + 1) * tab_width); else col++; string++; } return col; } static void write_entry (FILE *out, const char *key, const char *value) { char *v = strdup(value ? value : ""); char *v2 = v; char *nl = 0; int col; Bool programs_p = (!strcmp(key, "programs")); int tab = (programs_p ? 32 : 16); Bool first = True; fprintf(out, "%s:", key); col = strlen(key) + 1; if (strlen(key) > 14) col = tab_to (out, col, 20); while (1) { if (!programs_p) v2 = strip(v2); nl = strchr(v2, '\n'); if (nl) *nl = 0; if (first && programs_p) { col = tab_to (out, col, 77); fprintf (out, " \\\n"); col = 0; } if (first) first = False; else { col = tab_to (out, col, 75); fprintf (out, " \\n\\\n"); col = 0; } if (!programs_p) col = tab_to (out, col, tab); if (programs_p && string_columns(v2, strlen (v2), col) + col > 75) { int L = strlen (v2); int start = 0; int end = start; while (start < L) { while (v2[end] == ' ' || v2[end] == '\t') end++; while (v2[end] != ' ' && v2[end] != '\t' && v2[end] != '\n' && v2[end] != 0) end++; if (string_columns (v2 + start, (end - start), col) >= 74) { col = tab_to (out, col, 75); fprintf(out, " \\\n"); col = tab_to (out, 0, tab + 2); while (v2[start] == ' ' || v2[start] == '\t') start++; } col = string_columns (v2 + start, (end - start), col); while (start < end) fputc(v2[start++], out); } } else { fprintf (out, "%s", v2); col += string_columns(v2, strlen (v2), col); } if (nl) v2 = nl + 1; else break; } fprintf(out, "\n"); free(v); } int write_init_file (Display *dpy, saver_preferences *p, const char *version_string, Bool verbose_p) { int status = -1; const char *name = init_file_name(); const char *tmp_name = init_file_tmp_name(); char *n2 = chase_symlinks (name); struct stat st; int i, j; /* Kludge, since these aren't in the saver_preferences struct as strings... */ char *visual_name; char *programs; Bool overlay_stderr_p; char *stderr_font; FILE *out; if (!name) goto END; if (n2) name = n2; /* Throttle the various timeouts to reasonable values before writing the file to disk. */ stop_the_insanity (p); if (verbose_p) fprintf (stderr, "%s: writing \"%s\".\n", blurb(), name); unlink (tmp_name); out = fopen(tmp_name, "w"); if (!out) { char *buf = (char *) malloc(1024 + strlen(name)); sprintf(buf, "%s: error writing \"%s\"", blurb(), name); perror(buf); free(buf); goto END; } /* Give the new .xscreensaver file the same permissions as the old one; except ensure that it is readable and writable by owner, and not executable. Extra hack: if we're running as root, make the file be world-readable (so that the daemon, running as "nobody", will still be able to read it.) */ if (stat(name, &st) == 0) { mode_t mode = st.st_mode; mode |= S_IRUSR | S_IWUSR; /* read/write by user */ mode &= ~(S_IXUSR | S_IXGRP | S_IXOTH); /* executable by none */ if (getuid() == (uid_t) 0) /* read by group/other */ mode |= S_IRGRP | S_IROTH; if (fchmod (fileno(out), mode) != 0) { char *buf = (char *) malloc(1024 + strlen(name)); sprintf (buf, "%s: error fchmodding \"%s\" to 0%o", blurb(), tmp_name, (unsigned int) mode); perror(buf); free(buf); goto END; } } /* Kludge, since these aren't in the saver_preferences struct... */ visual_name = get_string_resource (dpy, "visualID", "VisualID"); programs = 0; overlay_stderr_p = get_boolean_resource (dpy, "overlayStderr", "Boolean"); stderr_font = get_string_resource (dpy, "font", "Font"); i = 0; { char *ss; char **hack_strings = (char **) calloc (p->screenhacks_count, sizeof(char *)); for (j = 0; j < p->screenhacks_count; j++) { hack_strings[j] = format_hack (dpy, p->screenhacks[j], True); i += strlen (hack_strings[j]); i += 2; } ss = programs = (char *) malloc(i + 10); *ss = 0; for (j = 0; j < p->screenhacks_count; j++) { strcat (ss, hack_strings[j]); free (hack_strings[j]); ss += strlen(ss); *ss++ = '\n'; *ss = 0; } free (hack_strings); } { struct passwd *pw = getpwuid (getuid ()); char *whoami = (pw && pw->pw_name && *pw->pw_name ? pw->pw_name : ""); time_t now = time ((time_t *) 0); char *timestr = (char *) ctime (&now); char *nl = (char *) strchr (timestr, '\n'); if (nl) *nl = 0; fprintf (out, "# %s Preferences File\n" "# Written by %s %s for %s on %s.\n" "# https://www.jwz.org/xscreensaver/\n" "\n", progclass, progname, version_string, whoami, timestr); } for (j = 0; prefs[j]; j++) { char buf[255]; const char *pr = prefs[j]; enum pref_type { pref_str, pref_int, pref_bool, pref_byte, pref_time } type = pref_str; const char *s = 0; int i = 0; Bool b = False; Time t = 0; if (pr && !*pr) { fprintf(out, "\n"); continue; } # undef CHECK # define CHECK(X) else if (!strcmp(pr, X)) if (!pr || !*pr) ; CHECK("timeout") type = pref_time, t = p->timeout; CHECK("cycle") type = pref_time, t = p->cycle; CHECK("lock") type = pref_bool, b = p->lock_p; CHECK("lockVTs") continue; /* don't save, unused */ CHECK("lockTimeout") type = pref_time, t = p->lock_timeout; CHECK("passwdTimeout") type = pref_time, t = p->passwd_timeout; CHECK("visualID") type = pref_str, s = visual_name; CHECK("installColormap") type = pref_bool, b = p->install_cmap_p; CHECK("verbose") type = pref_bool, b = p->verbose_p; CHECK("timestamp") type = pref_bool, b = p->timestamp_p; CHECK("splash") type = pref_bool, b = p->splash_p; CHECK("splashDuration") type = pref_time, t = p->splash_duration; # ifdef QUAD_MODE CHECK("quad") type = pref_bool, b = p->quad_p; # else /* !QUAD_MODE */ CHECK("quad") continue; /* don't save */ # endif /* !QUAD_MODE */ CHECK("demoCommand") type = pref_str, s = p->demo_command; CHECK("prefsCommand") type = pref_str, s = p->prefs_command; /* CHECK("helpURL") type = pref_str, s = p->help_url; */ CHECK("helpURL") continue; /* don't save */ /* CHECK("loadURL") type = pref_str, s = p->load_url_command; */ CHECK("loadURL") continue; /* don't save */ /* CHECK("newLoginCommand") type = pref_str, s = p->new_login_command; */ CHECK("newLoginCommand") continue; /* don't save */ CHECK("nice") type = pref_int, i = p->nice_inferior; CHECK("memoryLimit") type = pref_byte, i = p->inferior_memory_limit; CHECK("fade") type = pref_bool, b = p->fade_p; CHECK("unfade") type = pref_bool, b = p->unfade_p; CHECK("fadeSeconds") type = pref_time, t = p->fade_seconds; CHECK("fadeTicks") type = pref_int, i = p->fade_ticks; CHECK("captureStderr") type = pref_bool, b = p->capture_stderr_p; CHECK("captureStdout") continue; /* don't save */ CHECK("logFile") continue; /* don't save */ CHECK("ignoreUninstalledPrograms") type = pref_bool, b = p->ignore_uninstalled_p; CHECK("font") type = pref_str, s = stderr_font; CHECK("dpmsEnabled") type = pref_bool, b = p->dpms_enabled_p; CHECK("dpmsQuickOff") type = pref_bool, b = p->dpms_quickoff_p; CHECK("dpmsStandby") type = pref_time, t = p->dpms_standby; CHECK("dpmsSuspend") type = pref_time, t = p->dpms_suspend; CHECK("dpmsOff") type = pref_time, t = p->dpms_off; CHECK("grabDesktopImages") type =pref_bool, b = p->grab_desktop_p; CHECK("grabVideoFrames") type =pref_bool, b = p->grab_video_p; CHECK("chooseRandomImages")type =pref_bool, b = p->random_image_p; CHECK("imageDirectory") type =pref_str, s = p->image_directory; CHECK("mode") type = pref_str, s = (p->mode == ONE_HACK ? "one" : p->mode == BLANK_ONLY ? "blank" : p->mode == DONT_BLANK ? "off" : p->mode == RANDOM_HACKS_SAME ? "random-same" : "random"); CHECK("selected") type = pref_int, i = p->selected_hack; CHECK("textMode") type = pref_str, s = (p->tmode == TEXT_URL ? "url" : p->tmode == TEXT_LITERAL ? "literal" : p->tmode == TEXT_FILE ? "file" : p->tmode == TEXT_PROGRAM ? "program" : "date"); CHECK("textLiteral") type = pref_str, s = p->text_literal; CHECK("textFile") type = pref_str, s = p->text_file; CHECK("textProgram") type = pref_str, s = p->text_program; CHECK("textURL") type = pref_str, s = p->text_url; CHECK("programs") type = pref_str, s = programs; CHECK("pointerPollTime") type = pref_time, t = p->pointer_timeout; CHECK("pointerHysteresis")type = pref_int, i = p->pointer_hysteresis; CHECK("windowCreationTimeout")type=pref_time,t= p->notice_events_timeout; CHECK("initialDelay") type = pref_time, t = p->initial_delay; CHECK("sgiSaverExtension") continue; /* don't save */ CHECK("mitSaverExtension") continue; /* don't save */ CHECK("xidleExtension") continue; /* don't save */ CHECK("procInterrupts") type = pref_bool, b = p->use_proc_interrupts; CHECK("xinputExtensionDev") type = pref_bool, b = p->use_xinput_extension; CHECK("GetViewPortIsFullOfLies") type = pref_bool, b = p->getviewport_full_of_lies_p; CHECK("overlayStderr") type = pref_bool, b = overlay_stderr_p; CHECK("overlayTextBackground") continue; /* don't save */ CHECK("overlayTextForeground") continue; /* don't save */ CHECK("bourneShell") continue; /* don't save */ CHECK("authWarningSlack") type = pref_int, i = p->auth_warning_slack; else abort(); # undef CHECK switch (type) { case pref_str: break; case pref_int: sprintf(buf, "%d", i); s = buf; break; case pref_bool: s = b ? "True" : "False"; break; case pref_time: { unsigned int hour = 0, min = 0, sec = (unsigned int) (t/1000); if (sec >= 60) { min += (sec / 60); sec %= 60; } if (min >= 60) { hour += (min / 60); min %= 60; } sprintf (buf, "%u:%02u:%02u", hour, min, sec); s = buf; } break; case pref_byte: { if (i >= (1<<30) && i == ((i >> 30) << 30)) sprintf(buf, "%dG", i >> 30); else if (i >= (1<<20) && i == ((i >> 20) << 20)) sprintf(buf, "%dM", i >> 20); else if (i >= (1<<10) && i == ((i >> 10) << 10)) sprintf(buf, "%dK", i >> 10); else sprintf(buf, "%d", i); s = buf; } break; default: abort(); break; } if (pr && (!strcmp(pr, "mode") || !strcmp(pr, "textMode"))) fprintf(out, "\n"); write_entry (out, pr, s); } fprintf(out, "\n"); if (visual_name) free(visual_name); if (stderr_font) free(stderr_font); if (programs) free(programs); if (fclose(out) == 0) { time_t write_date = 0; if (stat(tmp_name, &st) == 0) { write_date = st.st_mtime; } else { char *buf = (char *) malloc(1024 + strlen(tmp_name) + strlen(name)); sprintf(buf, "%s: couldn't stat \"%s\"", blurb(), tmp_name); perror(buf); unlink (tmp_name); free(buf); goto END; } if (rename (tmp_name, name) != 0) { char *buf = (char *) malloc(1024 + strlen(tmp_name) + strlen(name)); sprintf(buf, "%s: error renaming \"%s\" to \"%s\"", blurb(), tmp_name, name); perror(buf); unlink (tmp_name); free(buf); goto END; } else { p->init_file_date = write_date; /* Since the .xscreensaver file is used for IPC, let's try and make sure that the bits actually land on the disk right away. */ sync (); status = 0; /* wrote and renamed successfully! */ } } else { char *buf = (char *) malloc(1024 + strlen(name)); sprintf(buf, "%s: error closing \"%s\"", blurb(), name); perror(buf); free(buf); unlink (tmp_name); goto END; } END: if (n2) free (n2); return status; } /* Parsing the resource database */ void free_screenhack (screenhack *hack) { if (hack->visual) free (hack->visual); if (hack->name) free (hack->name); free (hack->command); memset (hack, 0, sizeof(*hack)); free (hack); } static void free_screenhack_list (screenhack **list, int count) { int i; if (!list) return; for (i = 0; i < count; i++) if (list[i]) free_screenhack (list[i]); free (list); } /* Populate `saver_preferences' with the contents of the resource database. Note that this may be called multiple times -- it is re-run each time the ~/.xscreensaver file is reloaded. This function can be very noisy, since it issues resource syntax errors and so on. */ void load_init_file (Display *dpy, saver_preferences *p) { static Bool first_time = True; screenhack **system_default_screenhacks = 0; int system_default_screenhack_count = 0; if (first_time) { /* Get the programs resource before the .xscreensaver file has been parsed and merged into the resource database for the first time: this is the value of *programs from the app-defaults file. Then clear it out so that it will be parsed again later, after the init file has been read. */ get_screenhacks (dpy, p); system_default_screenhacks = p->screenhacks; system_default_screenhack_count = p->screenhacks_count; p->screenhacks = 0; p->screenhacks_count = 0; } if (parse_init_file (p) != 0) /* file might have gone away */ if (!first_time) return; first_time = False; p->xsync_p = get_boolean_resource (dpy, "synchronous", "Synchronous"); p->verbose_p = get_boolean_resource (dpy, "verbose", "Boolean"); p->timestamp_p = get_boolean_resource (dpy, "timestamp", "Boolean"); p->lock_p = get_boolean_resource (dpy, "lock", "Boolean"); p->fade_p = get_boolean_resource (dpy, "fade", "Boolean"); p->unfade_p = get_boolean_resource (dpy, "unfade", "Boolean"); p->fade_seconds = 1000 * get_seconds_resource (dpy, "fadeSeconds", "Time"); p->fade_ticks = get_integer_resource (dpy, "fadeTicks", "Integer"); p->install_cmap_p = get_boolean_resource (dpy, "installColormap", "Boolean"); p->nice_inferior = get_integer_resource (dpy, "nice", "Nice"); p->inferior_memory_limit = get_byte_resource (dpy, "memoryLimit", "MemoryLimit"); p->splash_p = get_boolean_resource (dpy, "splash", "Boolean"); # ifdef QUAD_MODE p->quad_p = get_boolean_resource (dpy, "quad", "Boolean"); # endif p->capture_stderr_p = get_boolean_resource (dpy, "captureStderr", "Boolean"); p->ignore_uninstalled_p = get_boolean_resource (dpy, "ignoreUninstalledPrograms", "Boolean"); p->initial_delay = 1000 * get_seconds_resource (dpy, "initialDelay", "Time"); p->splash_duration = 1000 * get_seconds_resource (dpy, "splashDuration", "Time"); p->timeout = 1000 * get_minutes_resource (dpy, "timeout", "Time"); p->lock_timeout = 1000 * get_minutes_resource (dpy, "lockTimeout", "Time"); p->cycle = 1000 * get_minutes_resource (dpy, "cycle", "Time"); p->passwd_timeout = 1000 * get_seconds_resource (dpy, "passwdTimeout", "Time"); p->pointer_timeout = 1000 * get_seconds_resource (dpy, "pointerPollTime", "Time"); p->pointer_hysteresis = get_integer_resource (dpy, "pointerHysteresis","Integer"); p->notice_events_timeout = 1000*get_seconds_resource(dpy, "windowCreationTimeout", "Time"); p->dpms_enabled_p = get_boolean_resource (dpy, "dpmsEnabled", "Boolean"); p->dpms_quickoff_p = get_boolean_resource (dpy, "dpmsQuickOff", "Boolean"); p->dpms_standby = 1000 * get_minutes_resource (dpy, "dpmsStandby", "Time"); p->dpms_suspend = 1000 * get_minutes_resource (dpy, "dpmsSuspend", "Time"); p->dpms_off = 1000 * get_minutes_resource (dpy, "dpmsOff", "Time"); p->grab_desktop_p = get_boolean_resource (dpy, "grabDesktopImages", "Boolean"); p->grab_video_p = get_boolean_resource (dpy, "grabVideoFrames", "Boolean"); p->random_image_p = get_boolean_resource (dpy, "chooseRandomImages", "Boolean"); p->image_directory = get_string_resource (dpy, "imageDirectory", "ImageDirectory"); p->text_literal = get_string_resource (dpy, "textLiteral", "TextLiteral"); p->text_file = get_string_resource (dpy, "textFile", "TextFile"); p->text_program = get_string_resource (dpy, "textProgram", "TextProgram"); p->text_url = get_string_resource (dpy, "textURL", "TextURL"); p->shell = get_string_resource (dpy, "bourneShell", "BourneShell"); p->demo_command = get_string_resource(dpy, "demoCommand", "URL"); p->prefs_command = get_string_resource(dpy, "prefsCommand", "URL"); p->help_url = get_string_resource(dpy, "helpURL", "URL"); p->load_url_command = get_string_resource(dpy, "loadURL", "LoadURL"); p->new_login_command = get_string_resource(dpy, "newLoginCommand", "NewLoginCommand"); p->auth_warning_slack = get_integer_resource(dpy, "authWarningSlack", "Integer"); /* If "*splash" is unset, default to true. */ { char *s = get_string_resource (dpy, "splash", "Boolean"); if (s) free (s); else p->splash_p = True; } /* If "*grabDesktopImages" is unset, default to true. */ { char *s = get_string_resource (dpy, "grabDesktopImages", "Boolean"); if (s) free (s); else p->grab_desktop_p = True; } p->use_xidle_extension = get_boolean_resource (dpy, "xidleExtension","Boolean"); #if 0 /* obsolete. */ p->use_sgi_saver_extension = get_boolean_resource (dpy, "sgiSaverExtension", "Boolean"); #endif #ifdef HAVE_XINPUT p->use_xinput_extension = get_boolean_resource (dpy, "xinputExtensionDev", "Boolean"); #endif #if 0 /* broken and evil. */ p->use_mit_saver_extension = get_boolean_resource (dpy, "mitSaverExtension", "Boolean"); #endif p->use_proc_interrupts = get_boolean_resource (dpy, "procInterrupts", "Boolean"); p->getviewport_full_of_lies_p = get_boolean_resource (dpy, "GetViewPortIsFullOfLies", "Boolean"); get_screenhacks (dpy, p); /* Parse the "programs" resource. */ { char *s = get_string_resource (dpy, "selected", "Integer"); if (!s || !*s) p->selected_hack = -1; else p->selected_hack = get_integer_resource (dpy, "selected", "Integer"); if (s) free (s); if (p->selected_hack < 0 || p->selected_hack >= p->screenhacks_count) p->selected_hack = -1; } { char *s = get_string_resource (dpy, "mode", "Mode"); if (s && !strcasecmp (s, "one")) p->mode = ONE_HACK; else if (s && !strcasecmp (s, "blank")) p->mode = BLANK_ONLY; else if (s && !strcasecmp (s, "off")) p->mode = DONT_BLANK; else if (s && !strcasecmp (s, "random-same")) p->mode = RANDOM_HACKS_SAME; else p->mode = RANDOM_HACKS; if (s) free (s); } { char *s = get_string_resource (dpy, "textMode", "TextMode"); if (s && !strcasecmp (s, "url")) p->tmode = TEXT_URL; else if (s && !strcasecmp (s, "literal")) p->tmode = TEXT_LITERAL; else if (s && !strcasecmp (s, "file")) p->tmode = TEXT_FILE; else if (s && !strcasecmp (s, "program")) p->tmode = TEXT_PROGRAM; else p->tmode = TEXT_DATE; if (s) free (s); } if (system_default_screenhack_count) /* note: first_time is also true */ { merge_system_screenhacks (dpy, p, system_default_screenhacks, system_default_screenhack_count); free_screenhack_list (system_default_screenhacks, system_default_screenhack_count); system_default_screenhacks = 0; system_default_screenhack_count = 0; } if (p->debug_p) { p->xsync_p = True; p->verbose_p = True; p->timestamp_p = True; p->initial_delay = 0; } /* Throttle the various timeouts to reasonable values after reading the disk file. */ stop_the_insanity (p); } /* If there are any hacks in the system-wide defaults that are not in the ~/.xscreensaver file, add the new ones to the end of the list. This does *not* actually save the file. */ static void merge_system_screenhacks (Display *dpy, saver_preferences *p, screenhack **system_list, int system_count) { /* Yeah yeah, this is an N^2 operation, but I don't have hashtables handy, so fuck it. */ int made_space = 0; int i; for (i = 0; i < system_count; i++) { int j; Bool matched_p = False; for (j = 0; j < p->screenhacks_count; j++) { char *name; if (!system_list[i]->name) system_list[i]->name = make_hack_name (dpy, system_list[i]->command); name = p->screenhacks[j]->name; if (!name) name = make_hack_name (dpy, p->screenhacks[j]->command); matched_p = !strcasecmp (name, system_list[i]->name); if (name != p->screenhacks[j]->name) free (name); if (matched_p) break; } if (!matched_p) { /* We have an entry in the system-wide list that is not in the user's .xscreensaver file. Add it to the end. Note that p->screenhacks is a single malloc block, not a linked list, so we have to realloc it. */ screenhack *oh = system_list[i]; screenhack *nh = (screenhack *) malloc (sizeof(screenhack)); if (made_space == 0) { made_space = 10; p->screenhacks = (screenhack **) realloc (p->screenhacks, (p->screenhacks_count + made_space + 1) * sizeof(screenhack)); if (!p->screenhacks) abort(); } nh->enabled_p = oh->enabled_p; nh->visual = oh->visual ? strdup(oh->visual) : 0; nh->name = oh->name ? strdup(oh->name) : 0; nh->command = oh->command ? strdup(oh->command) : 0; p->screenhacks[p->screenhacks_count++] = nh; p->screenhacks[p->screenhacks_count] = 0; made_space--; #if 0 fprintf (stderr, "%s: noticed new hack: %s\n", blurb(), (nh->name ? nh->name : make_hack_name (dpy, nh->command))); #endif } } } /* Parsing the programs resource. */ screenhack * parse_screenhack (const char *line) { screenhack *h = (screenhack *) calloc (1, sizeof(*h)); const char *s; h->enabled_p = True; while (isspace(*line)) line++; /* skip whitespace */ if (*line == '-') /* handle "-" */ { h->enabled_p = False; line++; while (isspace(*line)) line++; /* skip whitespace */ } s = line; /* handle "visual:" */ while (*line && *line != ':' && *line != '"' && !isspace(*line)) line++; if (*line != ':') line = s; else { h->visual = (char *) malloc (line-s+1); strncpy (h->visual, s, line-s); h->visual[line-s] = 0; if (*line == ':') line++; /* skip ":" */ while (isspace(*line)) line++; /* skip whitespace */ } if (*line == '"') /* handle "name" */ { line++; s = line; while (*line && *line != '"') line++; h->name = (char *) malloc (line-s+1); strncpy (h->name, s, line-s); h->name[line-s] = 0; if (*line == '"') line++; /* skip "\"" */ while (isspace(*line)) line++; /* skip whitespace */ } h->command = format_command (line, False); /* handle command */ return h; } static char * format_command (const char *cmd, Bool wrap_p) { int tab = 30; int col = tab; char *cmd2 = (char *) calloc (1, 2 * (strlen (cmd) + 1)); const char *in = cmd; char *out = cmd2; while (*in) { /* shrink all whitespace to one space, for the benefit of the "demo" mode display. We only do this when we can easily tell that the whitespace is not significant (no shell metachars). */ switch (*in) { case '\'': case '"': case '`': case '\\': /* Metachars are scary. Copy the rest of the line unchanged. */ while (*in) *out++ = *in++, col++; break; case ' ': case '\t': /* Squeeze all other whitespace down to one space. */ while (*in == ' ' || *in == '\t') in++; *out++ = ' ', col++; break; default: /* Copy other chars unchanged. */ *out++ = *in++, col++; break; } } *out = 0; /* Strip trailing whitespace */ while (out > cmd2 && isspace (out[-1])) *(--out) = 0; return cmd2; } /* Returns a new string describing the shell command. This may be just the name of the program, capitalized. It also may be something from the resource database (gotten by looking for "hacks.XYZ.name", where XYZ is the program.) */ char * make_hack_name (Display *dpy, const char *shell_command) { char *s = strdup (shell_command); char *s2; char res_name[255]; for (s2 = s; *s2; s2++) /* truncate at first whitespace */ if (isspace (*s2)) { *s2 = 0; break; } s2 = strrchr (s, '/'); /* if pathname, take last component */ if (s2) { s2 = strdup (s2+1); free (s); s = s2; } if (strlen (s) > 50) /* 51 is hereby defined as "unreasonable" */ s[50] = 0; sprintf (res_name, "hacks.%s.name", s); /* resource? */ s2 = get_string_resource (dpy, res_name, res_name); if (s2) { free (s); return s2; } for (s2 = s; *s2; s2++) /* if it has any capitals, return it */ if (*s2 >= 'A' && *s2 <= 'Z') return s; if (s[0] >= 'a' && s[0] <= 'z') /* else cap it */ s[0] -= 'a'-'A'; if (s[0] == 'X' && s[1] >= 'a' && s[1] <= 'z') /* (magic leading X) */ s[1] -= 'a'-'A'; if (s[0] == 'G' && s[1] == 'l' && s[2] >= 'a' && s[2] <= 'z') /* (magic leading GL) */ s[1] -= 'a'-'A', s[2] -= 'a'-'A'; return s; } char * format_hack (Display *dpy, screenhack *hack, Bool wrap_p) { int tab = 32; int size; char *h2, *out, *s; int col = 0; char *def_name = make_hack_name (dpy, hack->command); /* Don't ever write out a name for a hack if it's the same as the default. */ if (hack->name && !strcmp (hack->name, def_name)) { free (hack->name); hack->name = 0; } free (def_name); size = (2 * (strlen(hack->command) + (hack->visual ? strlen(hack->visual) : 0) + (hack->name ? strlen(hack->name) : 0) + tab)); h2 = (char *) malloc (size); out = h2; if (!hack->enabled_p) *out++ = '-'; /* write disabled flag */ if (hack->visual && *hack->visual) /* write visual name */ { if (hack->enabled_p) *out++ = ' '; *out++ = ' '; strcpy (out, hack->visual); out += strlen (hack->visual); *out++ = ':'; *out++ = ' '; } *out = 0; col = string_columns (h2, strlen (h2), 0); if (hack->name && *hack->name) /* write pretty name */ { int L = (strlen (hack->name) + 2); if (L + col < tab) out = stab_to (out, col, tab - L - 2); else *out++ = ' '; *out++ = '"'; strcpy (out, hack->name); out += strlen (hack->name); *out++ = '"'; *out = 0; col = string_columns (h2, strlen (h2), 0); if (wrap_p && col >= tab) out = stab_to (out, col, 77); else *out++ = ' '; if (out >= h2+size) abort(); } *out = 0; col = string_columns (h2, strlen (h2), 0); out = stab_to (out, col, tab); /* indent */ if (out >= h2+size) abort(); s = format_command (hack->command, wrap_p); strcpy (out, s); out += strlen (s); free (s); *out = 0; return h2; } static void get_screenhacks (Display *dpy, saver_preferences *p) { int i, j; int start = 0; int end = 0; int size; char *d; d = get_string_resource (dpy, "monoPrograms", "MonoPrograms"); if (d && !*d) { free(d); d = 0; } if (!d) d = get_string_resource (dpy, "colorPrograms", "ColorPrograms"); if (d && !*d) { free(d); d = 0; } if (d) { fprintf (stderr, "%s: the `monoPrograms' and `colorPrograms' resources are obsolete;\n\ see the manual for details.\n", blurb()); free(d); } d = get_string_resource (dpy, "programs", "Programs"); free_screenhack_list (p->screenhacks, p->screenhacks_count); p->screenhacks = 0; p->screenhacks_count = 0; if (!d || !*d) return; size = strlen (d); /* Count up the number of newlines (which will be equal to or larger than one less than the number of hacks.) */ for (i = j = 0; d[i]; i++) if (d[i] == '\n') j++; j++; p->screenhacks = (screenhack **) calloc (j + 1, sizeof (screenhack *)); /* Iterate over the lines in `d' (the string with newlines) and make new strings to stuff into the `screenhacks' array. */ p->screenhacks_count = 0; while (start < size) { /* skip forward over whitespace. */ while (d[start] == ' ' || d[start] == '\t' || d[start] == '\n') start++; /* skip forward to newline or end of string. */ end = start; while (d[end] != 0 && d[end] != '\n') end++; /* null terminate. */ d[end] = 0; p->screenhacks[p->screenhacks_count++] = parse_screenhack (d + start); if (p->screenhacks_count >= i) abort(); start = end+1; } free (d); if (p->screenhacks_count == 0) { free (p->screenhacks); p->screenhacks = 0; } } /* Make sure all the values in the preferences struct are sane. */ static void stop_the_insanity (saver_preferences *p) { if (p->passwd_timeout <= 0) p->passwd_timeout = 30000; /* 30 secs */ if (p->timeout < 15000) p->timeout = 15000; /* 15 secs */ if (p->cycle != 0 && p->cycle < 2000) p->cycle = 2000; /* 2 secs */ if (p->pointer_timeout <= 0) p->pointer_timeout = 5000; /* 5 secs */ if (p->notice_events_timeout <= 0) p->notice_events_timeout = 10000; /* 10 secs */ if (p->fade_seconds <= 0 || p->fade_ticks <= 0) p->fade_p = False; if (! p->fade_p) p->unfade_p = False; /* The DPMS settings may have the value 0. But if they are negative, or are a range less than 10 seconds, reset them to sensible defaults. (Since that must be a mistake.) */ if (p->dpms_standby != 0 && p->dpms_standby < 10 * 1000) p->dpms_standby = 2 * 60 * 60 * 1000; /* 2 hours */ if (p->dpms_suspend != 0 && p->dpms_suspend < 10 * 1000) p->dpms_suspend = 2 * 60 * 60 * 1000; /* 2 hours */ if (p->dpms_off != 0 && p->dpms_off < 10 * 1000) p->dpms_off = 4 * 60 * 60 * 1000; /* 4 hours */ /* suspend may not be greater than off, unless off is 0. standby may not be greater than suspend, unless suspend is 0. */ if (p->dpms_off != 0 && p->dpms_suspend > p->dpms_off) p->dpms_suspend = p->dpms_off; if (p->dpms_suspend != 0 && p->dpms_standby > p->dpms_suspend) p->dpms_standby = p->dpms_suspend; /* These fixes above ignores the case suspend = 0 and standby > off ... */ if (p->dpms_off != 0 && p->dpms_standby > p->dpms_off) p->dpms_standby = p->dpms_off; if (p->dpms_standby == 0 && /* if *all* are 0, then DPMS is disabled */ p->dpms_suspend == 0 && p->dpms_off == 0 && !(p->dpms_quickoff_p) /* ... but we want to do DPMS quick off */ ) p->dpms_enabled_p = False; /* Set watchdog timeout to about half of the cycle timeout, but don't let it be faster than 1/2 minute or slower than 1 minute. */ p->watchdog_timeout = p->cycle * 0.6; if (p->watchdog_timeout < 27000) p->watchdog_timeout = 27000; /* 27 secs */ if (p->watchdog_timeout > 57000) p->watchdog_timeout = 57000; /* 57 secs */ if (p->pointer_hysteresis < 0) p->pointer_hysteresis = 0; if (p->pointer_hysteresis > 100) p->pointer_hysteresis = 100; if (p->auth_warning_slack < 0) p->auth_warning_slack = 0; if (p->auth_warning_slack > 300) p->auth_warning_slack = 300; } Bool decrepit_p (void) { /* If you are in here because you're planning on disabling this warning before redistributing my software, please don't. I sincerely request that you do one of the following: 1: leave this code intact and this warning in place, -OR- 2: Remove xscreensaver from your distribution. I would seriously prefer that you not distribute my software at all than that you distribute one version and then never update it for years. I am *constantly* getting email from users reporting bugs that have been fixed for literally years who have no idea that the software they are running is years out of date. Yes, it would be great if we lived in the ideal world where people checked that they were running the latest release before they report a bug, but we don't. To most people, "running the latest release" is synonymous with "running the latest release that my distro packages for me." When they even bother to tell me what version they're running, I say, "That version is three years old!", and they say "But this is the latest version my distro ships". Then I say, "your distro sucks", and they say "but I don't know how to compile from source, herp derp I eat paste", and *everybody* goes away unhappy. It wastes an enormous amount of my time, but worse than that, it does a grave disservice to the users, who are stuck experiencing bugs that are already fixed! These users think they are running the latest release, and they are not. They would like to be running the actual latest release, but they don't know how, because their distro makes that very difficult for them. It's terrible for everyone, and kind of makes me regret ever having released this software in the first place. So seriously. I ask that if you're planning on disabling this obsolescence warning, that you instead just remove xscreensaver from your distro entirely. Everybody will be happier that way. Check out gnome-screensaver instead, I understand it's really nice. Of course, my license allows you to ignore me and do whatever the fuck you want, but as the author, I hope you will have the common courtesy of complying with my request. Thank you! jwz, 2014, 2016. PS: In particular, since Debian refuses to upgrade software on any kind of rational timeline, I have asked that they stop shipping xscreensaver at all. They have refused. Instead of upgrading the software, they simply patched out this warning. If you want to witness the sad state of the open source peanut gallery, look no farther than the comments on my blog: http://jwz.org/b/yiYo Many of these people fall back on their go-to argument of, "If it is legal, it must be right." If you believe in that rhetorical device then you are a terrible person, and possibly a sociopath. There are also the armchair lawyers who say "Well, instead of *asking* people to do the right thing out of common courtesy, you should just change your license to prohibit them from acting amorally." Again, this is the answer of a sociopath, but that aside, if you devote even a second's thought to this you will realize that the end result of this would be for distros like Debian to just keep shipping the last version with the old license and then never upgrading it again -- which would be the worst possible outcome for everyone involved, most especially the users. */ time_t now = time ((time_t *) 0); /* */ struct tm *tm = localtime (&now); /* d */ const char *s = screensaver_id; /* o */ char mon[4], year[5]; /* n */ int m, y, months; /* ' */ s = strchr (s, ' '); if (!s) abort(); s++; /* t */ s = strchr (s, '('); if (!s) abort(); s++; /* */ s = strchr (s, '-'); if (!s) abort(); s++; /* d */ strncpy (mon, s, 3); /* o */ mon[3] = 0; /* */ s = strchr (s, '-'); if (!s) abort(); s++; /* i */ strncpy (year, s, 4); /* t */ year[4] = 0; /* , */ y = atoi (year); /* */ if (!strcmp(mon, "Jan")) m = 0; /* s */ else if (!strcmp(mon, "Feb")) m = 1; /* t */ else if (!strcmp(mon, "Mar")) m = 2; /* o */ else if (!strcmp(mon, "Apr")) m = 3; /* p */ else if (!strcmp(mon, "May")) m = 4; /* , */ else if (!strcmp(mon, "Jun")) m = 5; /* */ else if (!strcmp(mon, "Jul")) m = 6; /* s */ else if (!strcmp(mon, "Aug")) m = 7; /* t */ else if (!strcmp(mon, "Sep")) m = 8; /* a */ else if (!strcmp(mon, "Oct")) m = 9; /* a */ else if (!strcmp(mon, "Nov")) m = 10; /* a */ else if (!strcmp(mon, "Dec")) m = 11; /* h */ else abort(); /* h */ months = ((((tm->tm_year + 1900) * 12) + tm->tm_mon) - /* h */ (y * 12 + m)); /* p */ /* . */ return (months >= 17); /* */ } xscreensaver-5.36/driver/dpms.c000644 000767 000024 00000022705 12701612237 016547 0ustar00jwzstaff000000 000000 /* dpms.c --- syncing the X Display Power Management values * xscreensaver, Copyright (c) 2001-2011 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. */ /* Display Power Management System (DPMS.) On XFree86 systems, "man xset" reports: -dpms The -dpms option disables DPMS (Energy Star) features. +dpms The +dpms option enables DPMS (Energy Star) features. dpms flags... The dpms option allows the DPMS (Energy Star) parameters to be set. The option can take up to three numerical values, or the `force' flag followed by a DPMS state. The `force' flags forces the server to immediately switch to the DPMS state specified. The DPMS state can be one of `standby', `suspend', or `off'. When numerical values are given, they set the inactivity period before the three modes are activated. The first value given is for the `standby' mode, the second is for the `suspend' mode, and the third is for the `off' mode. Setting these values implicitly enables the DPMS features. A value of zero disables a particular mode. However, note that the implementation is more than a little bogus, in that there is code in /usr/X11R6/lib/libXdpms.a to implement all the usual server-extension-querying utilities -- but there are no prototypes in any header file! Thus, the prototypes here. (The stuff in X11/extensions/dpms.h and X11/extensions/dpmsstr.h define the raw X protcol, they don't define the API to libXdpms.a.) Some documentation: Library: ftp://ftp.x.org/pub/R6.4/xc/doc/specs/Xext/DPMSLib.ms Protocol: ftp://ftp.x.org/pub/R6.4/xc/doc/specs/Xext/DPMS.ms */ #ifdef HAVE_CONFIG_H # include "config.h" #endif #include #include #ifdef HAVE_DPMS_EXTENSION /* almost the whole file */ # include # include /*# include */ /* Why this crap is not in a header file somewhere, I have no idea. Losers! */ extern Bool DPMSQueryExtension (Display *, int *event_ret, int *err_ret); extern Status DPMSGetVersion (Display *, int *major_ret, int *minor_ret); extern Bool DPMSCapable (Display *); extern Status DPMSInfo (Display *, CARD16 *power_level, BOOL *state); extern Status DPMSEnable (Display *dpy); extern Status DPMSDisable (Display *dpy); extern Status DPMSForceLevel (Display *, CARD16 level); extern Status DPMSSetTimeouts (Display *, CARD16 standby, CARD16 suspend, CARD16 off); extern Bool DPMSGetTimeouts (Display *, CARD16 *standby, CARD16 *suspend, CARD16 *off); #endif /* HAVE_DPMS_EXTENSION */ /* This file doesn't need the Xt headers, so stub these types out... */ #undef XtPointer #define XtAppContext void* #define XrmDatabase void* #define XtIntervalId void* #define XtPointer void* #define Widget void* #include "xscreensaver.h" #ifdef HAVE_DPMS_EXTENSION static Bool error_handler_hit_p = False; static int ignore_all_errors_ehandler (Display *dpy, XErrorEvent *error) { error_handler_hit_p = True; return 0; } void sync_server_dpms_settings (Display *dpy, Bool enabled_p, Bool dpms_quickoff_p, int standby_secs, int suspend_secs, int off_secs, Bool verbose_p) { int event = 0, error = 0; BOOL o_enabled = False; CARD16 o_power = 0; CARD16 o_standby = 0, o_suspend = 0, o_off = 0; Bool bogus_p = False; if (dpms_quickoff_p && !off_secs) { /* To do this, we might need to temporarily re-enable DPMS first. */ off_secs = 0xFFFF; } if (standby_secs == 0 && suspend_secs == 0 && off_secs == 0) /* all zero implies "DPMS disabled" */ enabled_p = False; else if ((standby_secs != 0 && standby_secs < 10) || (suspend_secs != 0 && suspend_secs < 10) || (off_secs != 0 && off_secs < 10)) /* any negative, or any positive-and-less-than-10-seconds, is crazy. */ bogus_p = True; if (bogus_p) enabled_p = False; /* X protocol sends these values in a CARD16, so truncate them to 16 bits. This means that the maximum timeout is 18:12:15. */ if (standby_secs > 0xFFFF) standby_secs = 0xFFFF; if (suspend_secs > 0xFFFF) suspend_secs = 0xFFFF; if (off_secs > 0xFFFF) off_secs = 0xFFFF; if (! DPMSQueryExtension (dpy, &event, &error)) { if (verbose_p) fprintf (stderr, "%s: XDPMS extension not supported.\n", blurb()); return; } if (! DPMSCapable (dpy)) { if (verbose_p) fprintf (stderr, "%s: DPMS not supported.\n", blurb()); return; } if (! DPMSInfo (dpy, &o_power, &o_enabled)) { if (verbose_p) fprintf (stderr, "%s: unable to get DPMS state.\n", blurb()); return; } if (o_enabled != enabled_p) { if (! (enabled_p ? DPMSEnable (dpy) : DPMSDisable (dpy))) { if (verbose_p) fprintf (stderr, "%s: unable to set DPMS state.\n", blurb()); return; } else if (verbose_p) fprintf (stderr, "%s: turned DPMS %s.\n", blurb(), enabled_p ? "on" : "off"); } if (bogus_p) { if (verbose_p) fprintf (stderr, "%s: not setting bogus DPMS timeouts: %d %d %d.\n", blurb(), standby_secs, suspend_secs, off_secs); return; } if (!DPMSGetTimeouts (dpy, &o_standby, &o_suspend, &o_off)) { if (verbose_p) fprintf (stderr, "%s: unable to get DPMS timeouts.\n", blurb()); return; } if (o_standby != standby_secs || o_suspend != suspend_secs || o_off != off_secs) { if (!DPMSSetTimeouts (dpy, standby_secs, suspend_secs, off_secs)) { if (verbose_p) fprintf (stderr, "%s: unable to set DPMS timeouts.\n", blurb()); return; } else if (verbose_p) fprintf (stderr, "%s: set DPMS timeouts: %d %d %d.\n", blurb(), standby_secs, suspend_secs, off_secs); } } Bool monitor_powered_on_p (saver_info *si) { Bool result; int event_number, error_number; BOOL onoff = False; CARD16 state; if (!DPMSQueryExtension(si->dpy, &event_number, &error_number)) /* Server doesn't know -- assume the monitor is on. */ result = True; else if (!DPMSCapable(si->dpy)) /* Server says the monitor doesn't do power management -- so it's on. */ result = True; else { DPMSInfo(si->dpy, &state, &onoff); if (!onoff) /* Server says DPMS is disabled -- so the monitor is on. */ result = True; else switch (state) { case DPMSModeOn: result = True; break; /* really on */ case DPMSModeStandby: result = False; break; /* kinda off */ case DPMSModeSuspend: result = False; break; /* pretty off */ case DPMSModeOff: result = False; break; /* really off */ default: result = True; break; /* protocol error? */ } } return result; } void monitor_power_on (saver_info *si, Bool on_p) { if ((!!on_p) != monitor_powered_on_p (si)) { XErrorHandler old_handler; int event_number, error_number; if (!DPMSQueryExtension(si->dpy, &event_number, &error_number) || !DPMSCapable(si->dpy)) { if (si->prefs.verbose_p) fprintf (stderr, "%s: unable to power %s monitor: no DPMS extension.\n", blurb(), (on_p ? "on" : "off")); return; } /* The manual for DPMSForceLevel() says that it throws BadMatch if "DPMS is disabled on the specified display." The manual for DPMSCapable() says that it "returns True if the X server is capable of DPMS." Apparently they consider "capable of DPMS" and "DPMS is enabled" to be different things, and so even if DPMSCapable() returns True, DPMSForceLevel() *might* throw an X Error. Isn't that just fucking special. */ XSync (si->dpy, False); error_handler_hit_p = False; old_handler = XSetErrorHandler (ignore_all_errors_ehandler); XSync (si->dpy, False); DPMSForceLevel(si->dpy, (on_p ? DPMSModeOn : DPMSModeOff)); XSync (si->dpy, False); /* Ignore error_handler_hit_p, just probe monitor instead */ if ((!!on_p) != monitor_powered_on_p (si)) /* double-check */ fprintf (stderr, "%s: DPMSForceLevel(dpy, %s) did not change monitor power state.\n", blurb(), (on_p ? "DPMSModeOn" : "DPMSModeOff")); } } #else /* !HAVE_DPMS_EXTENSION */ void sync_server_dpms_settings (Display *dpy, Bool enabled_p, int standby_secs, int suspend_secs, int off_secs, Bool verbose_p) { if (verbose_p) fprintf (stderr, "%s: DPMS support not compiled in.\n", blurb()); } Bool monitor_powered_on_p (saver_info *si) { return True; } void monitor_power_on (saver_info *si, Bool on_p) { return; } #endif /* !HAVE_DPMS_EXTENSION */ xscreensaver-5.36/driver/remote.c000644 000767 000024 00000034571 12701612237 017103 0ustar00jwzstaff000000 000000 /* xscreensaver-command, Copyright (c) 1991-2009 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. */ #ifdef HAVE_CONFIG_H # include "config.h" #endif #include #include #include #include #include #ifdef HAVE_SYS_SELECT_H # include #endif /* HAVE_SYS_SELECT_H */ #ifdef HAVE_UNISTD_H # include #endif #include /* for CARD32 */ #include #include #include /* for XGetClassHint() */ #include #include "remote.h" #ifdef _VROOT_H_ ERROR! you must not include vroot.h in this file #endif extern char *progname; extern Atom XA_SCREENSAVER, XA_SCREENSAVER_VERSION, XA_SCREENSAVER_RESPONSE; extern Atom XA_SCREENSAVER_ID, XA_SCREENSAVER_STATUS, XA_EXIT; extern Atom XA_VROOT, XA_SELECT, XA_DEMO, XA_BLANK, XA_LOCK; static XErrorHandler old_handler = 0; static Bool got_badwindow = False; static int BadWindow_ehandler (Display *dpy, XErrorEvent *error) { if (error->error_code == BadWindow) { got_badwindow = True; return 0; } else { fprintf (stderr, "%s: ", progname); if (!old_handler) abort(); return (*old_handler) (dpy, error); } } static Window find_screensaver_window (Display *dpy, char **version) { int i; Window root = RootWindowOfScreen (DefaultScreenOfDisplay (dpy)); Window root2, parent, *kids; unsigned int nkids; if (version) *version = 0; if (! XQueryTree (dpy, root, &root2, &parent, &kids, &nkids)) abort (); if (root != root2) abort (); if (parent) abort (); if (! (kids && nkids)) return 0; for (i = 0; i < nkids; i++) { Atom type; int format; unsigned long nitems, bytesafter; unsigned char *v; int status; /* We're walking the list of root-level windows and trying to find the one that has a particular property on it. We need to trap BadWindows errors while doing this, because it's possible that some random window might get deleted in the meantime. (That window won't have been the one we're looking for.) */ XSync (dpy, False); if (old_handler) abort(); got_badwindow = False; old_handler = XSetErrorHandler (BadWindow_ehandler); status = XGetWindowProperty (dpy, kids[i], XA_SCREENSAVER_VERSION, 0, 200, False, XA_STRING, &type, &format, &nitems, &bytesafter, &v); XSync (dpy, False); XSetErrorHandler (old_handler); old_handler = 0; if (got_badwindow) { status = BadWindow; got_badwindow = False; } if (status == Success && type != None) { Window ret = kids[i]; if (version) *version = (char *) v; XFree (kids); return ret; } } if (kids) XFree (kids); return 0; } static int send_xscreensaver_command (Display *dpy, Atom command, long arg, Window *window_ret, char **error_ret) { int status = -1; char *v = 0; Window window = find_screensaver_window (dpy, &v); XWindowAttributes xgwa; char err[2048]; if (window_ret) *window_ret = window; if (!window) { sprintf (err, "no screensaver is running on display %s", DisplayString (dpy)); if (error_ret) { *error_ret = strdup (err); status = -1; goto DONE; } if (command == XA_EXIT) { /* Don't print an error if xscreensaver is already dead. */ status = 1; goto DONE; } fprintf (stderr, "%s: %s\n", progname, err); status = -1; goto DONE; } /* Select for property change events, so that we can read the response. */ XGetWindowAttributes (dpy, window, &xgwa); XSelectInput (dpy, window, xgwa.your_event_mask | PropertyChangeMask); if (command == XA_SCREENSAVER_STATUS || command == XA_SCREENSAVER_VERSION) { XClassHint hint; memset (&hint, 0, sizeof(hint)); if (!v || !*v) { sprintf (err, "version property not set on window 0x%x?", (unsigned int) window); if (error_ret) *error_ret = strdup (err); else fprintf (stderr, "%s: %s\n", progname, err); status = -1; goto DONE; } XGetClassHint(dpy, window, &hint); if (!hint.res_class) { sprintf (err, "class hints not set on window 0x%x?", (unsigned int) window); if (error_ret) *error_ret = strdup (err); else fprintf (stderr, "%s: %s\n", progname, err); status = -1; goto DONE; } fprintf (stdout, "%s %s", hint.res_class, v); if (command != XA_SCREENSAVER_STATUS) { fprintf (stdout, "\n"); } else { Atom type; int format; unsigned long nitems, bytesafter; unsigned char *dataP = 0; if (XGetWindowProperty (dpy, RootWindow (dpy, 0), XA_SCREENSAVER_STATUS, 0, 999, False, XA_INTEGER, &type, &format, &nitems, &bytesafter, &dataP) == Success && type && dataP) { Atom blanked; time_t tt; char *s; Atom *data = (Atom *) dataP; if (type != XA_INTEGER || nitems < 3) { STATUS_LOSE: if (data) free (data); fprintf (stdout, "\n"); fflush (stdout); fprintf (stderr, "bad status format on root window.\n"); status = -1; goto DONE; } blanked = (Atom) data[0]; tt = (time_t) data[1]; if (tt <= (time_t) 666000000L) /* early 1991 */ goto STATUS_LOSE; if (blanked == XA_BLANK) fputs (": screen blanked since ", stdout); else if (blanked == XA_LOCK) fputs (": screen locked since ", stdout); else if (blanked == 0) /* suggestions for a better way to phrase this are welcome. */ fputs (": screen non-blanked since ", stdout); else /* `blanked' has an unknown value - fail. */ goto STATUS_LOSE; s = ctime(&tt); if (s[strlen(s)-1] == '\n') s[strlen(s)-1] = 0; fputs (s, stdout); { int nhacks = nitems - 2; Bool any = False; int i; for (i = 0; i < nhacks; i++) if (data[i + 2] > 0) { any = True; break; } if (any && nhacks == 1) fprintf (stdout, " (hack #%d)\n", (int) data[2]); else if (any) { fprintf (stdout, " (hacks: "); for (i = 0; i < nhacks; i++) { fprintf (stdout, "#%d", (int) data[2 + i]); if (i != nhacks-1) fputs (", ", stdout); } fputs (")\n", stdout); } else fputs ("\n", stdout); } if (data) free (data); } else { if (dataP) XFree (dataP); fprintf (stdout, "\n"); fflush (stdout); fprintf (stderr, "no saver status on root window.\n"); status = -1; goto DONE; } } /* No need to read a response for these commands. */ status = 1; goto DONE; } else { XEvent event; long arg1 = arg; long arg2 = 0; if (arg < 0) abort(); else if (arg == 0 && command == XA_SELECT) abort(); else if (arg != 0 && command == XA_DEMO) { arg1 = 5000; /* version number of the XA_DEMO protocol, */ arg2 = arg; /* since it didn't use to take an argument. */ } event.xany.type = ClientMessage; event.xclient.display = dpy; event.xclient.window = window; event.xclient.message_type = XA_SCREENSAVER; event.xclient.format = 32; memset (&event.xclient.data, 0, sizeof(event.xclient.data)); event.xclient.data.l[0] = (long) command; event.xclient.data.l[1] = arg1; event.xclient.data.l[2] = arg2; if (! XSendEvent (dpy, window, False, 0L, &event)) { sprintf (err, "XSendEvent(dpy, 0x%x ...) failed.\n", (unsigned int) window); if (error_ret) *error_ret = strdup (err); else fprintf (stderr, "%s: %s\n", progname, err); status = -1; goto DONE; } } status = 0; DONE: if (v) free (v); XSync (dpy, 0); return status; } static Bool xscreensaver_command_event_p (Display *dpy, XEvent *event, XPointer arg) { return (event->xany.type == PropertyNotify && event->xproperty.state == PropertyNewValue && event->xproperty.atom == XA_SCREENSAVER_RESPONSE); } static int xscreensaver_command_response (Display *dpy, Window window, Bool verbose_p, Bool exiting_p, char **error_ret) { int sleep_count = 0; char err[2048]; XEvent event; Bool got_event = False; while (!(got_event = XCheckIfEvent(dpy, &event, &xscreensaver_command_event_p, 0)) && sleep_count++ < 10) { # if defined(HAVE_SELECT) /* Wait for an event, but don't wait longer than 1 sec. Note that we might do this multiple times if an event comes in, but it wasn't the event we're waiting for. */ int fd = XConnectionNumber(dpy); fd_set rset; struct timeval tv; tv.tv_sec = 1; tv.tv_usec = 0; FD_ZERO (&rset); FD_SET (fd, &rset); select (fd+1, &rset, 0, 0, &tv); # else /* !HAVE_SELECT */ sleep(1); # endif /* !HAVE_SELECT */ } if (!got_event) { sprintf (err, "no response to command."); if (error_ret) *error_ret = strdup (err); else fprintf (stderr, "%s: %s\n", progname, err); return -1; } else { Status st2; Atom type; int format; unsigned long nitems, bytesafter; unsigned char *msg = 0; XSync (dpy, False); if (old_handler) abort(); old_handler = XSetErrorHandler (BadWindow_ehandler); st2 = XGetWindowProperty (dpy, window, XA_SCREENSAVER_RESPONSE, 0, 1024, True, AnyPropertyType, &type, &format, &nitems, &bytesafter, &msg); XSync (dpy, False); XSetErrorHandler (old_handler); old_handler = 0; if (got_badwindow) { if (exiting_p) return 0; sprintf (err, "xscreensaver window unexpectedly deleted."); if (error_ret) *error_ret = strdup (err); else fprintf (stderr, "%s: %s\n", progname, err); return -1; } if (st2 == Success && type != None) { if (type != XA_STRING || format != 8) { sprintf (err, "unrecognized response property."); if (error_ret) *error_ret = strdup (err); else fprintf (stderr, "%s: %s\n", progname, err); if (msg) XFree (msg); return -1; } else if (!msg || (msg[0] != '+' && msg[0] != '-')) { sprintf (err, "unrecognized response message."); if (error_ret) *error_ret = strdup (err); else fprintf (stderr, "%s: %s\n", progname, err); if (msg) XFree (msg); return -1; } else { int ret = (msg[0] == '+' ? 0 : -1); sprintf (err, "%s: %s\n", progname, (char *) msg+1); if (error_ret) *error_ret = strdup (err); else if (verbose_p || ret != 0) fprintf ((ret < 0 ? stderr : stdout), "%s\n", err); XFree (msg); return ret; } } } return -1; /* warning suppression: not actually reached */ } int xscreensaver_command (Display *dpy, Atom command, long arg, Bool verbose_p, char **error_ret) { Window w = 0; int status = send_xscreensaver_command (dpy, command, arg, &w, error_ret); if (status == 0) status = xscreensaver_command_response (dpy, w, verbose_p, (command == XA_EXIT), error_ret); fflush (stdout); fflush (stderr); return (status < 0 ? status : 0); } void server_xscreensaver_version (Display *dpy, char **version_ret, char **user_ret, char **host_ret) { Window window = find_screensaver_window (dpy, 0); Atom type; int format; unsigned long nitems, bytesafter; if (version_ret) *version_ret = 0; if (user_ret) *user_ret = 0; if (host_ret) *host_ret = 0; if (!window) return; if (version_ret) { unsigned char *v = 0; XGetWindowProperty (dpy, window, XA_SCREENSAVER_VERSION, 0, 1, False, XA_STRING, &type, &format, &nitems, &bytesafter, &v); if (v) { *version_ret = strdup ((char *) v); XFree (v); } } if (user_ret || host_ret) { unsigned char *id = 0; const char *user = 0; const char *host = 0; XGetWindowProperty (dpy, window, XA_SCREENSAVER_ID, 0, 512, False, XA_STRING, &type, &format, &nitems, &bytesafter, &id); if (id && *id) { const char *old_tag = " on host "; const char *s = strstr ((char *) id, old_tag); if (s) { /* found ID of the form "1234 on host xyz". */ user = 0; host = s + strlen (old_tag); } else { char *o = 0, *p = 0, *c = 0; o = strchr ((char *) id, '('); if (o) p = strchr (o, '@'); if (p) c = strchr (p, ')'); if (c) { /* found ID of the form "1234 (user@host)". */ user = o+1; host = p+1; *p = 0; *c = 0; } } } if (user && *user && *user != '?') *user_ret = strdup (user); else *user_ret = 0; if (host && *host && *host != '?') *host_ret = strdup (host); else *host_ret = 0; if (id) XFree (id); } } xscreensaver-5.36/driver/xscreensaver-command.c000644 000767 000024 00000035503 12701612240 021722 0ustar00jwzstaff000000 000000 /* xscreensaver-command, Copyright (c) 1991-2013 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. */ #ifdef HAVE_CONFIG_H # include "config.h" #endif #include #include #include #include #include #ifdef HAVE_UNISTD_H # include #endif /* #include / * for CARD32 */ #include #include #include /* for XGetClassHint() */ #include #include /* only needed to get through xscreensaver.h */ /* You might think that to read an array of 32-bit quantities out of a server-side property, you would pass an array of 32-bit data quantities into XGetWindowProperty(). You would be wrong. You have to use an array of longs, even if long is 64 bits (using 32 of each 64.) */ typedef long PROP32; #include "remote.h" #include "version.h" #ifdef _VROOT_H_ ERROR! you must not include vroot.h in this file #endif char *progname; Atom XA_VROOT; Atom XA_SCREENSAVER, XA_SCREENSAVER_VERSION, XA_SCREENSAVER_RESPONSE; Atom XA_SCREENSAVER_ID, XA_SCREENSAVER_STATUS, XA_SELECT, XA_DEMO, XA_EXIT; Atom XA_BLANK, XA_LOCK; static Atom XA_ACTIVATE, XA_DEACTIVATE, XA_CYCLE, XA_NEXT, XA_PREV; static Atom XA_RESTART, XA_PREFS, XA_THROTTLE, XA_UNTHROTTLE; static char *screensaver_version; # ifdef __GNUC__ __extension__ /* don't warn about "string length is greater than the length ISO C89 compilers are required to support" in the usage string... */ # endif static char *usage = "\n\ usage: %s - xscreensaver-5.36/OSX/XScreenSaver.icns000644 000767 000024 00000226311 12632174130 020041 0ustar00jwzstaff000000 000000 icns,Éis32ÉÿÿÑÈÌÀ9„ÿ ºÿýýÿÿüùÉ3ƒÿ ¯ÿéìßð÷ÖÿîM‚ÿ ¬ÿüÿÎÎù÷ÐÙ´ÿ µ÷ÙæÝ±¦îÖ”Öÿ ¾íž›¦»¯­²õÉÿ »ÿJQ߬Âc;mÿ¾ÿ ¾ÿ]³ïÙÆÿ?ÿ½ÿ ½ÿK½ÕîîÿOÿ½ÿ½ÿr€ÿàOHÿ½ÿ ½ÿ{8ĤKGü½ÿ ¾íËá|2(–ì¹ìÀÿ ºñÌÜÐÛߨÛÀõ¸ÿ °ÔÑ­»ÑžË™ÇǪÿ ©çÍÎÛ××ÑÏâã§ÿ ?jiooloitlmCÿÿÿÿÑÈÌÀ9„ÿ ºÿýýÿÿýùÉ3ƒÿ ¯ÿéìéúô×ÿîM‚ÿ ¬ÿýÿ§¼ÿôÐÙ´ÿ µ÷Öù¥@´öÕ“Öÿ ¾í¦°_2U©¨±õÉÿ »ÿR(*mAmÿ¾ÿ ½ÿ4&a ¾«>ÿ½ÿ ½ÿQ@$"qQÿ½ÿ ½ÿF7&'&VsIÿ½ÿ ½ÿzWOXHŽü½ÿ ¾ðËæ =L¦ë½íÀÿ ½ðËÜËàÞÕÚ¼ô»ÿ °¬­Š“±r¤h§¦©ÿ ©Ô»¸ÉÇÈ¿¾ÕϦÿ CpottrtrzouCÿÿÿÿÑÈÌÀ9„ÿ ºÿýýÿÿýùÉ3ƒÿ ¯ÿéìéùõ×ÿîM‚ÿ ¬ÿýÿ©¾ÿôÐÙ´ÿ µ÷Öø¨;®õÕ“Öÿ ¾í¦³V*Y¦¨±ôÉÿ »ÿQ$.gBmÿ¾ÿ ½ÿ;b"¾©>ÿ½ÿ ½ÿRF1vžPÿ½ÿ ½ÿA53VpIÿ½ÿ ½ÿ{TOVHü½ÿ ¾ïËæž;I¦ì¼íÀÿ ½ðËÜËàßÖÚ½ô»ÿ °°²Ž˜´w©nª©ªÿ ©Ö½ºËÈÉÁÀÖѧÿ CplrtotozorCÿÿs8mk}ƽ½½½ÄŸ ºÿÿÿÿÿÿÿÏ ¦ÿÿÿÿÿÿÿÿÐ ¦ÿÿÿÿÿÿÿÿÿЦÿÿÿÿÿÿÿÿÿÿ—¦ÿÿÿÿÿÿÿÿÿÿ²¦ÿÿÿÿÿÿÿÿÿÿ¥¦ÿÿÿÿÿÿÿÿÿÿ¥¦ÿÿÿÿÿÿÿÿÿÿ¥¦ÿÿÿÿÿÿÿÿÿÿ¥¦ÿÿÿÿÿÿÿÿÿÿ¥¦ÿÿÿÿÿÿÿÿÿÿ¥¦ÿÿÿÿÿÿÿÿÿÿ¥¯ÿÿÿÿÿÿÿÿÿÿ®¦ÿþþþþþþþþÿ¦=`\\\\\\\\`=il32|ÿ+™ˆ‰¯^ÿ_Šÿûí]ŒÿPÿí‡ëèàÚía‹ÿQÿî‡ìëéÎÜþUŠÿTÿïíëòúëíÞÉÿûQ‰ÿTÿðí òÝÖýëíïîáÉ€ÿYˆÿTÿñïõæxÝþõúíäÍææùül‡ÿTÿòð€ïîþË’÷ðÛóêÕ›{„¥ÍF†ÿTÿñ„ÿ °Ð›¹ÿÿõØÇƧ§±…ÿTÿùÖ¥€©¨Û´‡£“¯©¥¡›žÙàêK…ÿTÿýˆ®çÝÚ¬´¾Ú³¯éààää­ÿÿO…ÿTÿù¬æ­§šãÚUöÞ{§¦¨žÙË«ÿÿS…ÿ TÿûÅŸ 7Þó´ÿGG¹¸ÿÿS…ÿTÿü¤‡ºçÿ{™ÿÌmÁ¬V´¸ÿÿS…ÿTÿýÁ¡ÐÃÍÿý‰Óÿ¹ÿÿHµ¸ÿÿS…ÿTÿÿ™÷Ì–ýÿÛÿ¿¾ÿMµ¸ÿÿS…ÿTÿÿœßÿ‰¹þïáòÛ¼þM´¸ÿÿS…ÿTÿÿ¦…ÿÌ¡ýïôëó½æ!M´¸ÿÿS…ÿTÿÿÂ¥KÿÿîêííéÿÀã0J´¹ÿÿS…ÿTÿÿÂ¥`Ýùÿéíêÿá¯èP´¹ÿÿS…ÿTÿÿÈ™€9æ€ÿ÷'€B³¼ÿÿS…ÿTÿÿ´ÉcYSWˆ”±¤1afRT¡¿³ÿÿS…ÿTÿÿœý€ÿóK“ÿÁªÿÿS…ÿTÿÿ‹Ãàáá”bƒ‚}x^®àáß‘¬ÿÿS…ÿTÿÿѨ©©¿·º·ÓÖª°©±…ÝÿÿP…ÿf“ÿe…ÿZÿ‘«´¸Ü|y̺±i|±ÜŠ€º¹\ÿl…ÿ]ÿ†Ï¢Øc‚ʶ¬m€Íˆx`Ì®Kÿ_…ÿgÿÐÌÉÄ­áÏÚÏ¿áÚ¾ÐØÆúÙÖÌÿj…ÿM“ÿQ…ÿ ¡ÿÿ+™ˆ‰¯^ÿ_Šÿûí]ŒÿPÿí‡ëèàÚía‹ÿQÿî‡ìëéÎÜþUŠÿTÿïíëòúëíÞÉÿûQ‰ÿTÿðí òÜáÿëíïîáÉ€ÿYˆÿTÿñï÷àVçùõúíäÍææùül‡ÿTÿòð€ïîÿ]:ÿõÚóêÕ›{„¥ÍF†ÿTÿñƒÿ»蜵ÿÿõØÇƧ§±…ÿTÿùÕ¤¨©¨Æ{u9¡¯¨¥ šžÙàêK…ÿTÿý‡®æáã°²vÓéààää~­ÿÿO…ÿTÿù«æ® ŸM%›K ”«¥¦žÙ˪ÿÿS…ÿ TÿûÅž8)E¹¸ÿÿS…ÿTÿü¡a*'=C' ~«T´¸ÿÿS…ÿTÿýÁ¤Žj%'?&BÿÿFµ¸ÿÿS…ÿTÿþÁ¥%;˜*'&*(ÄÿJµ¸ÿÿS…ÿTÿÿÂ¥!&i\&$"$ŒÿJ´¸ÿÿS…ÿTÿÿ¤'.&$$##`ÿJ´¸ÿÿS…ÿTÿÿ¤eF&# "&Mÿ-H´¹ÿÿS…ÿTÿÿ¤‰Ê%'"##' ¢ðN´¹ÿÿS…ÿTÿÿȘ!('(%@³¼ÿÿS…ÿTÿÿ³ÉcWO{p"#ƒaPQ¡¿³ÿÿS…ÿTÿÿ›ý€ÿñgÿ©ÿÿS…ÿTÿÿŽÆãâã–f†‡€zc°âäà–¯ÿÿS…ÿWÿÿΦ§§¿±³¯ÏÕ½¨­¨°|ÖÿÿP…ÿo“ÿl…ÿ`ÿhŒŽ”ÒYK®œ—1I’¾e_NŸ¤+ÿr…ÿcÿU³xjÃ2X«˜’4U«UA/w´— ÿe…ÿpÿ©©¬§»¬¼±ŸÇóÁ¤ëÀ¶¢ÿr…ÿP“ÿQ…ÿ€€ ¡ÿÿ+™ˆ‰¯^ÿ_Šÿûí]ŒÿPÿí‡ëèàÚía‹ÿQÿî‡ìëéÎÜþUŠÿTÿïíëòúëíÞÉÿûQ‰ÿTÿðí òÜàÿëíïîáÉ€ÿYˆÿTÿñï÷àVçùõúíäÍææùül‡ÿTÿòð€ïîÿb@ÿõÚóêÕ›{„¥ÍF†ÿTÿñƒÿÄÞž·ÿÿõØÇƧ§±…ÿTÿùÖ¥¨©¨Ã‰m.™°¨¥ šžÙàêK…ÿTÿý‡®çà㱌Çéààää~¬ÿÿO…ÿTÿù«æ®¡žb~i‡¯¥¦žÙ˪ÿÿS…ÿTÿûÅŸ€8 ;‚E¹¸ÿÿS…ÿTÿü¢TC :K*lŬU´¸ÿÿS…ÿTÿýÁ¤vt64*9ÿÿFµ¸ÿÿS…ÿTÿþÁ£+/8*$&6¿ÿJ´¸ÿÿS…ÿTÿÿ£- Xf.,0’ÿJ´¸ÿÿS…ÿTÿÿ¤".4-00/mÿJ´¸ÿÿS…ÿTÿÿ¤^W )0-./ Iÿ-H´¹ÿÿS…ÿTÿÿ¤†Æ +-./.›ïO´¹ÿÿS…ÿTÿÿȘ626-A³¼ÿÿS…ÿTÿÿ³ÉcWPvs'%€bPR¡¿³ÿÿS…ÿTÿÿœý€ÿñeÿ©ÿÿS…ÿTÿÿŽÅãââ•e†ˆzb°âäà–¯ÿÿS…ÿWÿÿÎŽ¦§¨¿°³°ÐÕ¾¨®¨±}ÖÿÿP…ÿo“ÿh…ÿ`ÿl‘šÒ[O²ž—6Q–ÂjdU¢¦1ÿr…ÿcÿZ¶}qÅ7\®•9[°[H3|¶™ÿe…ÿpÿ­­°ª…¿¯¾µ£ÉÅ ¶Ä§íù§ÿr…ÿP“ÿQ…ÿ€€ ¡ÿl8mk*Љˆˆˆˆˆˆˆˆˆ‰ŠscÿÿÿÿÿÿÿÿÿÿÿÿÿÿùBVÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿBUÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿBUÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿBUÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿBUÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿBUÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ7UÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿõUÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿUUÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿWUÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿSUÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿSUÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿSUÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿSUÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿSUÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿSUÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿSUÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿSUÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿSUÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿSUÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿSUÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿSUÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿSUÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿSUÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿSUÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿSUÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿSYÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿWVÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿU7544444444444444444457it32S¡ÿŽ® Æ Üïã©ä€âáâáÞÖÄŒeÂòÿø¨ùø÷÷€öôóöùÿòÔAÀ äúé¨êéé€è æääáÞÜß÷ò]¿ åúê¨ëêê€é æääààÝÙÏãÿk¾ åúê¨ëê€é èæäâààÛÙÖÇØÿi½ åúê¨ëê€é çæäâàßÛ×Óйßÿ_¼ æûë¨ìëêééèçåäáßÛ×ÔÏȲíý_» æûë¨ìëëêééçæäâàÝÙÖÐʶÅöñbº æûë©ìëêééçæåâàßÚÖÐÊÀ¶ßéòb¹ æûë©ìëê€éçåäáàÛ×ÓÌÅ®Öåãñ_¸ æûëªìëêééèçåâáÞÚÖÏÆ±ÆòÖäñ_· æûëªìëë€éçæäâàÛØÑʸ¸ïçÖâð_¶ æûë«ìëëééèçåãàÝÙÔÌÀ°éôäÖâï_µ çüì«íììëêêéèåâàÛÖÏĬãþëäÖáî_´ çüì­íìêêééæäàÝ×ÐÆ­ÚÿðìäÖáï_³ çüì­íììêêéèäáÞÙÑɯÑÿöñêäÖâï_²çý°íìëêéæäàÛÔ˲Ëÿý÷ñêãÖâï_±çý±íìëéçäàÛÕË´Æÿÿú÷ñêãÖáï_°çý±íìëéèäáÜÖ̵Ãÿÿýú÷ñêãÖáð_¯çý›íêúÿêíìëêéäáÜÖθÁÿÿþýú÷ñêãÖâñ_®çýšíéýÜÓýìí ìêéåâÝÖθ€ÿ þýú÷ñêäÖãñb­èýí˜îíöß„øûìŒî€íêéçâÞÙлÃÿ þýú÷ñêäÖäñb¬èýí˜îíÿÈGxÿïŒî€íêéçãÞÙѽĂÿ þýû÷ñëäÖäñb«éþî™ïðÿ£(Èÿì‹ï îîíêêçäßØÒ¾Æƒÿ þýûöñêäÖäòbªéþî™ïíÿͼ& ôþíŠï îîíìêèäßÙԿˈÿ÷íáÖäób©éþî™ï îùÑÀèIÿõí‰ïîîííêéäàÚÔÇÅÛÖÎÉÉÌÎÔØáñýÿÿùáäðb¨éþî›ïûœÿ°ÿð†ï"îïïîîííêéäàÛÓÍÁ©™ˆ|vtrrqx‚Ž¸Íæîýú\§éþîšï íÿ®»ÿjËÿí‚ïîïðøð€îííêèäáÛÕÍÅ»¬’ŽŽŠŠ…wojj}¾òÿV¦éÿïšð ïýɨÿþ óýí€ð(îõÿÿùîððïîíìéåâÜ×ÐÈ¿±¡•‘’‘ŽŽ…vmÇüI¥éÿï›ð(õå£ñÿÏ\ÿóïðïóü½¾+áýïïîíìëæãÞØÓ˸©Ÿšš›œ™€– ••””•“…i¢àP¤êÿð›ñ6òó£äôÿ•­ÿîñîÿ›r+<üôïðîïììéäàÛÕÏÈ¿µ­¨¨§§¥¢¡¡ ¡  žœ™zžÒ¤êÿðœñ+ý¬Öòÿà[õúîÿÙojàÿîñððïíìêæâÞØÒÍÆ¿º¶µ´²±°¯¯®€­«©§£¢·”£êÿðœñ+ÿ²Î÷òãÆ>ˆÿõõ„EÿöññððïíìêèãàÛÖÒÍÇÄÁ¿¾½»ºº¹¹€¸¶´±±¬« ÏJ¢êÿðœñ$ÿ±Ìúíí×k8ÿÿ³±DšÿïññðïïîììéåáßÚÖÒÏËÈÆ€ÅÃÄŀà ÂÁ¿¾»¹·°Í¢êÿð…ñ”ðþ­ÔôÿÙž¯ÿå¡Ï/$°ÿî€ðïïîíëêèäàÝÚÖÔÑÏÍÌ̀ˀ̀ËÉÇÅÅÁ¾É¾¢ëÿ…ñîû”ÿ¡äòû»VZÿÿ£ÏЉVÔŒÿýú÷õôòñóéÓÔÕÔÓÑÐÏÎÌÈÑÆ¡ëÿ„ñïÿù°š† ¡¡ ¡¡  ¨–ûÿŦ7i°ŠƒÿƽC~©‚ €Ÿ€žœ›™——•”“’‘ŒÂ÷Ü€ÛÚÙ×ÕÔÑÞÌ ¡ìÿñ‚òñùï@”Ïÿóº›ÈÿĺO™ ¨üßááàßÞÜÛÛéÓ¡ìÿñƒòÿ‰S¢š†™˜ƒ™–¨xlÿÿ¼¸P]¦Žt÷ÿÌ´Lt¤˜‚™˜—•–•””“‚‘œ…äòäååääãâàïÚ ¡ìÿñ‚òôÿpÄ‘ÿ¢âûô·šÿÿë·þõÚ·KË—ÿ@Òÿèççåäóà ¡ìÿñ‚òôÿ{¹ÿðŒñöûƒ¾ÿýÂÂ\iÿÿ¥Âÿïè¿Mÿð†ñ€ðïî‚í€ìòýAÚÿëì€ëêêéøä ¡íÿò‚óõÿ{·ÿñóó…òñùöõòÿš§ÿéÿ®·Õÿñžëðí÷ÍJbÿó„ò„ñðîïî€ïîõý>Ûÿí€î€íìüç ¡íÿò‚ó õÿ{¸ÿñóñù…ÿõ€ÿĉÿîòßÁ—:ÿÿݦÿëìÿÐfJ’ÿ€ñøÿ?Üÿðñðïîþé ¡íÿó‚ô,õÿ|¸ÿòñÿÿààââãâéÔ›…Ú„åùêÿ½Ëneñ뢷ÿëìúÛ‘,Ãíá€ãâ€ãâãââãâÜîÿõðùÿ?Ýÿ…ñÿë ¡íÿó‚ôõÿ|¸ÿñÿäP Dœ€Äÿéëÿ¸Ä\' åüìííó¼J%ˆ œÿõùÿ?Ýÿò€óòóòñÿì ¡íÿó‚ô õÿ|¸ÿúú;€©©Hÿñíìþ¾ÑD<ýòííëÿÏh …… ³ÿùÿ?Ýÿóôóóòÿí ¡íÿó‚ô õÿ|¸ÿÿÒ%##ïP²ÿéíëÿ»ÂC([ÿðííì÷ã—2 %Ž# )gÿýÿ>Ýÿóƒôóÿí ¡íÿô‚õ öÿ|¸ÿÿÍ#(“ñâÿìíëÿÁ·b(bÿíëÿÇ[(Ž# %qÿþÿ>Þÿôƒõôÿí ¡íÿô‚õ öÿ|¸ÿÿÐ#î¿Hýó€í ðí¾+\ÿð€íìýÜ“- %# %uÿþÿ?Þÿôƒõôÿí ¡îÿƒõ ÷ÿ|¸ÿÿÑ€#'Dÿ`ÿí êÿÈ„,CûôíìÿÂb&‡#%‚#%t€ÿ?Þÿ…õÿî ¡îÿƒõ ÷ÿ|¸ÿÿÑ€#'œÿNKÿƒíû³S ßÿë€íëûâšB‡(#%t€ÿ>Þÿ…õÿî ¡îÿƒõ ÷ÿ|¸ÿÿÑ€# ßûÈnO¥ìòí ëøùŽN«ÿêíéÿŇ|Áƒ©¬§M(€#%t€ÿ>Þÿ…õÿî ¡îÿƒõ÷ÿ|¸ÿÿÑ##%IÿêÐ`ßÂüëí éþó`Ê¿ãôìíñö°p-ò…ÿú(€#%t€ÿ>Þÿ…õÿî ¡îÿõ‚öøÿ|¸ÿÿÑ##'ŒÿìÄ~^ʲÿê‚íéÿñCŽÏÿéíêûï®fð…ÿX%##%t€ÿ>ßÿõƒöõÿî¡îÿõ‚ö øÿ|¸ÿÿÑ€# Âÿ÷Ã¥4é¤òîƒíéÿé1xûöìíéÿ×·ßÿõƒöõÿî¡ïÿö‚÷ùÿ|¸ÿÿÑ## êûÿ½¹,Ö¼¹ÿëƒíêÿÔ;¡ÿé‚íéÿÄë„ÿO%##%u€ÿ>ßÿöƒ÷öÿï¡ïÿö‚÷ùÿ|¸ÿÿÑ#%SÿðûÉÆfrü’ÿì…íÿ¼)öúì‚íóî¯$‘„ÿO%##%t€ÿ>ßÿöƒ÷öÿï¡ïÿö‚÷ùÿ|¸ÿÿÑ#%|ÿìîô¸£ÿ¨Çÿëƒíêúï¤}ÿé‚íéÿÔAP„ÿO%##%t€ÿ>ßÿöƒ÷öÿï¡ïÿ÷‚øúÿ|¸ÿÿÑ## ÿëêÿ·Á8 ô“ÿë„íéÿÑlîûìíìôòzçƒÿO%##%u€ÿ>ßÿ÷ƒø÷ÿï¡ïÿ÷‚øúÿ|¸ÿÿÑ##ºÿëíñíµ˜ÿ¤Êþëƒíì÷â³€ÿé‚íêÿ·®ƒÿO%##%t€ÿ>ßÿ÷ƒø÷ÿï¡ïÿ÷‚øùÿ}¸ÿÿÑ#Æÿëíêÿ¸·7ù”ÿê„íëÿÅ\#÷õ‚íëÿãvƒÿO%##%t€ÿ>ßÿ÷ƒø÷ÿï¡ïÿ÷‚øúÿ|¸ÿÿÑ#Êÿë€íû¬—ü¯Ìüìƒíìûæ»ÿë‚íñÿ7 ƒÿO%##%t€ÿ>ßÿ÷ƒø÷ÿï¡ðÿø‚ùûÿ|¸ÿÿÑ#ÇÿëííêýÝ«SZíÿê„íéþÜrÎûì‚íëÿ‚ï‚ÿO%##%u€ÿ>àÿøƒùøÿð¡ðÿø‚ùûÿ|¸ÿÿÑ##´ÿê€í éÿʘ»½Îúì„íêûÿóéƒíëÿÀ‚ÿO%##%t€ÿ>àÿøƒùøÿð¡ðÿƒùüÿ|¸ÿÿÒ#'€ÿë‚íÿÀZ:õÿëíìýè–‚ÿO%##%u€ÿ>ßÿ…ùÿð¡ðÿƒùüÿ}¸ÿÿÒ#%#ôúì€íëòû¯zÉìïíòÿX‚ÿO%##%u€ÿ>àÿ…ùÿð¡ðÿƒùüÿ}¸ÿÿÒ##%«ÿéíéûú_ä÷‘íÿR‚ÿO%##%u€ÿ>ßÿ…ùÿð¡ðÿƒùüÿ}¸ÿÿÒ##'Aÿó‚íéÿÑ<ÞÿìíìÿùÿO%##%t€ÿ>àÿ…ùÿð¡ðÿƒù üÿ}¸ÿÿÒ#¾ÿé‚íñÿQÅÿëíëÿ¢ÙÿO%##&t€ÿ>àÿ…ùÿð¡ñÿƒú ýÿ|¸ÿÿÒ€#'8ûöìíéýáEÏýìíëÿøÿO%##%u€ÿ>àÿ…úÿñ¡ñÿƒú ýÿ}¸ÿÿÒ#²ÿé‚íéûýðêíëÿ×”ÿO%##%u€ÿ>àÿ…úÿñ¡ñÿƒû ýÿ}¹ÿÿÒ€#%b˜Õÿê‚íìó’íìÿÚ"lÿO%##%u€ÿ>àÿ…ûÿñ¡ñÿƒû ýÿ}¸ÿÿÓ€#%_߉úñì˜íìûɆFÿO%##%u€ÿ>àÿ…ûÿñ¡ñÿƒû ýÿ}¸ÿÿÓ€#%Eÿ±›ÿé˜íòçÍ{þ€ÿO%##%u€ÿ>àÿ…ûÿñ¡ñÿƒû ýÿ}¹ÿÿÒ€#%Fÿÿ~Éÿé–íêÿävÂÿO€#%u€ÿ>àÿ…ûÿñ¡ñÿƒû ýÿ}¹ÿÿÓ#Lÿÿæmîûé–íÿ‚¤‚ÿV&##%u€ÿ>àÿ…ûÿñ¡ñÿƒü þÿ}¸ÿÿÓ#A€ÿÑ„ÿóë“íéÿÏŒƒÿG%##%u€ÿ>àÿ…üÿñ¡ñÿƒü þÿ}¸ÿÿÓ#  ùùÿ°•ÿðë‘í éûÿLÿøõõùù£€#&u€ÿ>àÿ…üÿñ¡ñÿƒý ÿÿ}¸ÿÿÓ# (,10B©ÿïëíéôÿgH9€-0-(€#&u€ÿ>àÿ…ýÿñ¡ñÿƒý ÿÿ}¹ÿÿÓ‚# %  ³ÿðëíé÷ÿ„"€ %#%u€ÿ>àÿ…ýÿñ¡ñÿƒý ÿÿ}¹ÿÿÓˆ#*©ÿ÷éŠíìéÿÿ~%ƒ#%ƒ#%u€ÿ>àÿ…ýÿñ¡ñÿƒý ÿÿ}¹ÿÿω#*†ÿÿòéì„í ìíê÷ÿçO'‹#%p€ÿ>àÿ…ýÿñ¡ñÿƒý ÿÿ}¸ÿÿØ%‰#(GÅÿÿþòííììíñõüÿü '&Œ#)k€ÿ>àÿ…ýÿñ¡ñÿƒý ÿÿ}¸ÿÿýF ‰ J¬áü‚ÿéàÞ±/! ½€ÿ>áÿ…ýÿñ¡ñÿƒý ÿÿ}¸ÿýÿé^+€-.€-,-.--,-11Jl‚Œ„‹¾¾l#!:9,‚-,--,-.-..%2§ÿþÿÿ>áÿ…ýÿñ¡ñÿƒý ÿÿ}¸ÿýýÿÿññ‹ôóÿzƒ cX '%[ÿõ‹ô ðýÿÿýÿÿ>áÿ…ýÿñ¡ñÿƒýÿÿ}¸ÿ€ýÿÔ##%%#(!#%##¸Žÿþýýÿÿ>áÿ…ýÿñ¡òÿƒþÿÿ}¸ÿ€þŒýÿÿÜ(„#%‚#(Çÿÿ‹ý€þÿÿ>áÿ…þÿò¡òÿƒþÿÿ}¸ÿþ€ÿ¸*Œ#)¤€ÿŒþÿÿ>áÿ…þÿò¡òÿƒþÿÿ}¸ÿŒþÿÿÈc ,ˆ%&‚%-W¾ÿÿ‹þÿÿ>áÿ…þÿò¡òÿƒþÿÿ~¸ÿ‹þÿИ ËÿŠþÿÿ>áÿ…þÿò¡òÿƒþÿÿ~¸ÿ‹þ ÿÌEXecbbccbcƒbc…bceZGÉÿŠþÿÿ>áÿ…þÿò¡òÿƒþÿÿ|¿¼ÿDàÿ…þÿò¡òÿƒþÿÿp¼¼ÿ:Þÿ…þÿò¡òÿƒþÿÿž,sl…kjkkj€k‚j kjkkjkjjkkƒjk…jŠkjt[õÿ…þÿò¡ò†ÿûm½#Έÿò¡òˆÿÖ¾†ÄÅÅÄÅÄŃÄÅŃăŃÄÅÅŠÄÅÁÄô‰ÿò¡òÕÿò¡ò€ÿçë€ÿÐðÿÿÞ¢¹‚ÿð‚ÿãæÿÉ™¥¦ðÿô®  ÀþèÛÿÿõÉ÷ÿÿå§³‚ÿí€ÿäó€ÿõþÿߥ Û€ÿÞò‚ÿò¡ò€ÿ–"ÿÿÀáÿ·€%•ÿÿ¼Y|ûÿûy$šÿÿÁ$#ÔÿZeÿ§òÿÐÓÿÊ€€ÿ<Ÿÿÿ7^ÿÿºýö" ÿðY3±ÿò¡ò€ÿQÞÊÿUÿÿ!éÿëd|ÿ½®Þµÿ§åÿÿþÿ Tÿÿþÿ®¬ÿÒÒÿ' â¥íÿÿøGÿÿ=ÿÿ|ÿè¯ÿÿýÿÎÊÚ€ÿò¡òÿ$qÿ}ÿÿ‹ÿåMÿÙ‹ÿÅÂÿŸÿÿKwÿ°øÿ4nÿ­cÿÙÍÿjÿùCäÿÿÎ-ÿÿ™ûÿCHÿèÂÿf.ÿÿ.§€ÿò¡òÿ‰ÈÕÿÿ}ÿÿýÿÌÇÿ ¤îÿA]ÿ­óÿ/oÿ ¥ úä¾ÿ#_ƒÿ¯ÑÿÒÛÿŒÿß¿ÿoÿÿ"˜€ÿò¡òÿë 8€ÿrÿÉÎÿ£ÿÿNXÿ§‚ÿ"|ÿ ŸÂì¿ÿ Qƒÿu–ÿïÂúÂÿÚÐÿn#ÿÿ$•€ÿò¡ò‚ÿ^€€ÿB‘¸ÿÿÇæÿ©½µ®ÿ­’´¿ÿÿ9!¶­áÿ¢tÝÁÿ\‹³ÿ(ƒRFÿÿŒßèÿÛf·°øÿy È¢×€ÿò¡ò‚ÿ’Àÿêe ÿÏ âÿ²€Sýÿ¯€,‡ÿÿX0Òÿ’8Ž˽ÿðmgÿÿø¿ƒüÿ[b¢ÿÿÙSôÿ€{ÿò¡ò‚ÿ}¾ƒÿ˜ÿÚÃÿ´+€ÿ±Kê€ÿH¥€ÿŽ6ðWÄÿ¬õÿÄä¸Þÿ¥dÿÿÛ Ô€ÿŒY‚ÿò¡ò‚ÿ;iƒÿÕùÛÃÿ ¶Ôÿÿ¦õÿ#^ÿŽ$ÿXÊÿê Òÿ€ÿÿªÿÉ©ÿÿÙºÿ‹ óÿò¡òÿÙˆêÿÿÆåÿÜ îÝÈÿ §ð vÿÿ¥÷ÿ$qÿŽ&ÿŸÎÿÊÝÿðÉÿMhowÿíÉÿÿÚÃÿnEç­ÿò¡òÿ}ÿ’ÿÿ}ÿéñ×ÙÿÔkÿªÿrÿÿ®Úÿ+Iÿ‰$ÿãÒÿWÿþ'Ñÿ*'CÿÿAßÿÿß©ÿiDÿ.Pÿò¡òÿfÿ^#ÿÿ8ÿÙðÒÐÿ‡ÿµÿÃãÿ¬þÿ'cÿtÿÿ8Ïÿ2ÿñÝÝŸÿèFãÿZøÿÿáÅÿn+ÿŠÿò¡ò€ÿ8ÍÍÿ½Óÿ‹SüóB3ÿ§ýø€ÿ°m€]Çÿ3‰ctûqÿÿ„Àÿ£P û™'€ÿã—ÿn€ÿ âG‰\›ÿkÿÔµ€ÿò¡ò€ÿÄ €ÿ3Q²ÿÿ~PÐÿÿ½A"gçÿºDýÿfuÿØD('ÿ•2&6÷Ì~ÿÿç{æÿÿŒGÀÿÝäÿ~·ÿʨ€ÿ ö\((iÿžZÿÿIž€ÿò¡òÎÿþƒÿò¡òÕÿò¡òÕÿò¡þÕÿþ¡é÷Óò÷é ¢Ïÿÿÿÿÿÿÿ‚ÿŽ® Æ Üïã©ä€âáâáÞÖÄŒeÂòÿø¨ùø÷÷€öôóöùÿòÔAÀ äúé¨êéé€è æääáÞÜß÷ò]¿ åúê¨ëêê€é æääààÝÙÏãÿk¾ åúê¨ëê€é èæäâààÛÙÖÇØÿi½ åúê¨ëê€é çæäâàßÛ×Óйßÿ_¼ æûë¨ìëêééèçåäáßÛ×ÔÏȲíý_» æûë¨ìëëêééçæäâàÝÙÖÐʶÅöñbº æûë©ìëêééçæåâàßÚÖÐÊÀ¶ßéòb¹ æûë©ìëê€éçåäáàÛ×ÓÌÅ®Öåãñ_¸ æûëªìëêééèçåâáÞÚÖÏÆ±ÆòÖäñ_· æûëªìëë€éçæäâàÛØÑʸ¸ïçÖâð_¶ æûë«ìëëééèçåãàÝÙÔÌÀ°éôäÖâï_µ çüì«íììëêêéèåâàÛÖÏĬãþëäÖáî_´ çüì­íìêêééæäàÝ×ÐÆ­ÚÿðìäÖáï_³ çüì­íììêêéèäáÞÙÑɯÑÿöñêäÖâï_²çý°íìëêéæäàÛÔ˲Ëÿý÷ñêãÖâï_±çý±íìëéçäàÛÕË´Æÿÿú÷ñêãÖáï_°çý±íìëéèäáÜÖ̵Ãÿÿýú÷ñêãÖáð_¯çý›íêúÿêíìëêéäáÜÖθÁÿÿþýú÷ñêãÖâñ_®çýšíéýÜÒýìí ìêéåâÝÖθ€ÿ þýú÷ñêäÖãñb­èýí˜îíöÞ‡ ÷ûìŒî€íêéçâÞÙлÃÿ þýú÷ñêäÖäñb¬èýí˜îíÿÇGwÿïŒî€íêéçãÞÙѽĂÿ þýû÷ñëäÖäñb«éþî™ïðÿdÇÿì‹ï îîíêêçäßØÒ¾Æƒÿ þýûöñêäÖäòbªéþî™ïíÿÉñþíŠï îîíìêèäßÙԿˈÿ÷íáÖäób©éþîšïøþ8!Vÿöí‰ïîîííêéäàÚÔÇÅÛÖÎÉÉÌÎÔØáñýÿÿùáäðb¨éþîšïíÿ‹&”ÿð†ï"îïïîîííêéäàÛÓÍÁ©™ˆ|vtrrqx‚Ž¸Íæîýú\§éþîšï íÿÇ'Ëÿí‚ïîïðøð€îííêèäáÛÕÍÅ»¬’ŽŽŠŠ…wojj}¾òÿV¦éÿïšð ïýñ"&(òýí€ð(îôÿÿùîððïîíìéåâÜ×ÐÈ¿±¡•‘’‘ŽŽ…vmÇüI¥éÿï›ð(õÿY#''bÿóïðïóý¾¾)áýïïîíìëæãÞØÓ˸©Ÿšš›œ™€– ••””•“…i¢àP¤êÿðœñ5ÿz $'?²ÿîñîÿ¡l,;üôïðîïììéäàÛÕÏÈ¿µ­¨¨§§¥¢¡¡ ¡  žœ™zžÒ¤êÿð›ñ,ðÿš$'+C õúîýãQkßÿîñððïíìêæâÞØÒÍÆ¿º¶µ´²±°¯¯®€­«©§£¢·”£êÿð›ñ,ðÿ«%$!i"’ÿòÿa!AÿöññððïíìêèãàÛÖÒÍÇÄÁ¿¾½»ºº¹¹€¸¶´±±¬« ÏJ¢êÿð›ñ%ðÿ®&##aEKÿÿÑ•ÿïññðïïîììéåáßÚÖÒÏËÈÆ€ÅÃÄŀà ÂÁ¿¾»¹·°Í¢êÿð…ñ“ðîÿ $'dµÿÿM)µÿî€ðïïîíëéèäàÝÚÖÔÑÏÍÌÌËÌÌ€ËÉÇÅÅÁ¾É¾¢ëÿ…ñîû”ÿ} $&EKdÿÿÊd1ÞŒÿýû÷õôòñóéÓÔÕÔÓÑÐÏÎÌÈÑÆ¡ëÿ„ñðÿù¯˜Ÿ¤§3%'|$t«¨>&„-†§‚Ÿž œ›š˜•–”“’‘ŒÂ÷Ü€ÛÚÙ×ÕÔÑÞÌ ¡ìÿñ‚òñúï>”($N€(€?™ §üßááàßÞÜÛÛéÓ¡ìÿñƒòÿˆO¡šƒ—˜——˜‚—˜•Ÿ°)''ˆ-f£¬P$'r5{¢–€˜—––•€”““’ƒ›ƒãóäååääãâàïÚ ¡ìÿñ‚òôÿnÑÿ© &%Gu €ÿ4%% d0Ô—ÿ?Ñÿèççåäóà ¡ìÿñ‚òôÿzºÿðŒñóÿ˜'&ˆ0{ÿÿ±'$"\4œÿð†ñ€ðïî‚í€ìòý?Úÿëì€ëêêéøä ¡íÿò‚óõÿz·ÿñóó…òñùöõñÿÁ'#'+Ùÿÿl"$#%K6qÿó„ò„ñðîïî€ïîõý<Ûÿí€î€íìüç ¡íÿò‚ó õÿy·ÿñóñù‰ÿð&$$!ifHÿÿþ+&##')LI’ÿ€ñùÿ>Ûÿðñðïîþé ¡íÿó‚ô-õÿy·ÿòñÿÿààâãââçßu”îm!&#&Œ8yñíÁ'##& Y&ÈíâãŒâ Üîÿõðùÿ>Üÿ…ñÿë ¡íÿó‚ô õÿz·ÿñÿäP '"#'”A "&€#$TL € œÿõúÿ>Ýÿò€óòóòñÿì ¡íÿó‚ô#õÿz·ÿúù9  '$##&)‘1 &$€#',a€   € ³ÿúÿ>Ýÿóôóóòÿí ¡íÿó‚ô õÿz·ÿÿÑ!"$"$'"##' Œ0 #'$€#%!_8!Ž %fÿýÿ>Ýÿóƒôóÿí ¡íÿô‚õ öÿz·ÿÿÌ&$"€!&€#'„G!#'‚#'>\"Ž !pÿþÿ>Ýÿôƒõôÿí ¡íÿô‚õ öÿz·ÿÿÐ ##"#&$€# $#\k"#'$#& f.  "sÿþÿ>Ýÿôƒõôÿí ¡îÿƒõ ÷ÿz¸ÿÿЀ#'"$'‚#'r%"&$‚#'>c"‡!‚!r€ÿ<Ýÿ…õÿî ¡îÿƒõ ÷ÿz¸ÿÿЀ&'9R(ƒ#&9] '‚#&!g@ ‡$!r€ÿ<Ýÿ…õÿî ¡îÿƒõ ÷ÿz¸ÿÿЀ "!&cKxx"$‚#%&F%Q¼'‚#"''v‚¿¨‚©«¦L"€!s€ÿ<Ýÿ…õÿî ¡îÿƒõ÷ÿz¸ÿÿÐ "'#c6±Ú&‚#"&$9ä¢ %‚#$%B`4ø…ÿú&€!s€ÿ<Ýÿ…õÿî ¡îÿõ‚öøÿz¸ÿÿÐ $'#WZhî'ƒ#"'&+»C&"‚#&$YNñ…ÿW!"s€ÿ<Þÿõƒöõÿî¡îÿõ‚ö øÿz¸ÿÿЀ $'%?t/ÿb#$ƒ#"'('Dj&%‚#"'~ t…ÿN "s€ÿ<Þÿõƒöõÿî¡ïÿö‚÷ùÿz¸ÿÿÐ! #&'ˆ ç×'…#'+A '"‚#"'#kï„ÿN!"s€ÿ<Þÿöƒ÷öÿï¡ïÿö‚÷ùÿz¸ÿÿÐ#'$&‚8ÿ,&†#'9N%&ƒ#$#Z™„ÿN!!r€ÿ<Þÿöƒ÷öÿï¡ïÿö‚÷ùÿz¸ÿÿÐ#'##$J{ÿ¶'…#&$\C'"‚#"')7T„ÿN!!s€ÿ<Þÿöƒ÷öÿï¡ïÿ÷‚øúÿz¸ÿÿÑ$'##'’ ­ÿ&…#"'+j#&ƒ#$$8,éƒÿN!!s€ÿ<Þÿ÷ƒø÷ÿï¡ïÿ÷‚øúÿz¸ÿÿÑ#'##$#Wr ÿ®&…#%!gN'"ƒ#'- °ƒÿN!!s€ÿ<Þÿ÷ƒø÷ÿï¡ïÿ÷‚øúÿz¸ÿÿÑ #'€#' ÿ&†#';u%$ƒ#'$ƒÿN!!s€ÿ<Þÿ÷ƒø÷ÿï¡ïÿ÷‚øúÿz¸ÿÿÑ "'#&;}ÿ²&…#&"WB'ƒ#$'NƒÿN!!s€ÿ<Þÿ÷ƒø÷ÿï¡ðÿø‚ùûÿz¸ÿÿÑ #'#& l:eÿ"&…#"& '&„#'í‚ÿN!!s€ÿ<ßÿøƒùøÿð¡ðÿø‚ùûÿz¸ÿÿÑ$'#"'vÕº&†#&'$"„#'ÂÿN!"r€ÿ<ßÿøƒùøÿð¡ðÿƒùüÿ{¸ÿÿÑ #'ƒ#'/Q9ë*&‘#&#¡‚ÿN!"s€ÿ<ßÿ…ùÿð¡ðÿƒùüÿ{¸ÿÿÑ!$&‚#$&@¢’"$#$'x‚ÿN""s€ÿ<ßÿ…ùÿð¡ðÿƒùüÿz¸ÿÿÑ$'"#"&&+P™!%‘#'Q‚ÿN!"s€ÿ<ßÿ…ùÿð¡ðÿƒùüÿz¸ÿÿÑ#'$‚#"'$']*&‘#' +ùÿN "s€ÿ<ßÿ…ùÿð¡ðÿƒù üÿz¸ÿÿÑ&'"‚#$'$'‘#' ØÿN!"s€ÿ<ßÿ…ùÿð¡ñÿƒú ýÿz¸ÿÿÑ€) %%‚#"&"&‘#'"¼ÿN!!s€ÿ<àÿ…úÿñ¡ñÿƒú ýÿ{¸ÿÿÒB#'"‚#"&&$’#'.ÿN!!s€ÿ<àÿ…úÿñ¡ñÿƒû ýÿ{¸ÿÿÒ€!{©'„#$“#'3vÿN!!s€ÿ<àÿ…ûÿñ¡ñÿƒû ýÿ{¸ÿÿÒ€!Uþ?$$š#&?aJÿN!!s€ÿ<àÿ…ûÿñ¡ñÿƒû ýÿ{¸ÿÿÒ€!BÿÛ'"˜#$"nXÿN!!s€ÿ<àÿ…ûÿñ¡ñÿƒû ýÿ{¸ÿÿÒ€ EÿÿŽ'"—#'(RÅÿN€"s€ÿ<àÿ…ûÿñ¡ñÿƒû ýÿz¸ÿÿÒL€ÿM"&"–#'$¦‚ÿU"!s€ÿ<àÿ…ûÿñ¡ñÿƒü þÿz¸ÿÿÒ?€ÿü7&$”#"'’ƒÿF!"s€ÿ<àÿ…üÿñ¡ñÿƒü þÿ{¸ÿÿÓ Ÿùùÿâ)&$’# "&&eÿøõõøù¢€"s€ÿ<àÿ…üÿñ¡ñÿƒý ÿÿ{¸ÿÿÓ $)-+K7'$#"$' A6())-)$€!s€ÿ<àÿ…ýÿñ¡ñÿƒý ÿÿ{¸ÿÿÒ‚ !''$Ž#"%'&" €"!s€ÿ<àÿ…ýÿñ¡ñÿƒý ÿÿ{¸ÿÿÒˆ !&'%"‹#"''& ƒ ƒ!s€ÿ<àÿ…ýÿñ¡ñÿƒý ÿÿ{¸ÿÿω!&''$"ˆ#%'"& ‹!o€ÿ<àÿ…ýÿñ¡ñÿƒý ÿÿ{¸ÿÿ×!‰ !'''&$‚# $$&'&!& !Œ&i€ÿ<àÿ…ýÿñ¡ñÿƒý ÿÿ{¸ÿÿýEŒ "&‚'"!).#%Œ¼€ÿ<àÿ…ýÿñ¡ñÿƒý ÿÿ{¸ÿýÿé](+)‚+)++€)+*2?"!€!YjS076+))++)++*)‚+ 0¦ÿþÿÿ<àÿ…ýÿñ¡ñÿƒý ÿÿ{¸ÿýýÿÿñò‹ôóÿv""€$ *UI !YÿõóŠô ðüÿÿýÿÿ<àÿ…ýÿñ¡ñÿƒýÿÿ{¸ÿ€ýÿÔ! !¸Žÿþýýÿÿ<àÿ…ýÿñ¡òÿƒþÿÿ{¸ÿ€þŒýÿÿÜ $„ ‚$ Æÿÿ‹ý€þÿÿ<àÿ…þÿò¡òÿƒþÿÿ{¸ÿþ€ÿ¸ $Œ%£€ÿŒþÿÿ<àÿ…þÿò¡òÿƒþÿÿ{¸ÿŒþÿÿÇb)!! !!"!!"…!(V¾ÿÿ‹þÿÿ<àÿ…þÿò¡òÿƒþÿÿ{¸ÿ‹þÿИËÿŠþÿÿ<áÿ…þÿò¡òÿƒþÿÿ{¸ÿ‹þÿÌEVe‚babb€abbaab€abdYGÉÿŠþÿÿ<áÿ…þÿò¡òÿƒþÿÿz¿¼ÿAàÿ…þÿò¡òÿƒþÿÿn¼¼ÿ7Ýÿ…þÿò¡òÿƒþ ÿÿ)sjhiihhih€ihihhiihiihi€hi‚hiihiihi‚hiihhii€hihrZõÿ…þÿò¡ò†ÿük½Έÿò¡òˆÿÖ¿ÊÉŽÄÉÌÉÊÆÄÅËÊÊÉÄÅÆÄÄÅÈÅÄÄÅÊÊÅÄÉÅÄÄÅÅ„ÄËù‰ÿò¡òÕÿò¡ò€ÿ ¯–ÿÿÞ|Åÿö‹biÖ€ÿß é€ÿ地ýÿÿßpTgXÂÿ¯Z]`nü´„úÿÌqÑÿü•edÉÿzÖÿý“±ÿÿä¨òûŠSdY—ÿÿו¾‚ÿò¡ò€ÿ2ÑÿfÿI€%ÿìZÁÿÆ4àÿ_yê×e§ÿŠ•ÿa€ëÿÿÝEÿëùÿcÉÄÿ°Gð€ÿò¡ò€ÿQ–…ÿíÙ ‘NÞ² ÿqg˜gÿiÉÍïܸÊ×øfOÿ¢¦ï_§ÿÿ­óúØÿ0è¼TÅÌÞÿ7†„•€ÿò¡ò€ÿÞCÎ-ÿÄ:ÿ®Û¥<ÓryÿbÒÿ7ÿxÀ€ÿÛ+ÿT÷­˜å!ÿʨÿÿÂÿNÄýÿº€€ÿþ(ý÷e€ÿò¡òÿ9:†ÿÄ<ÿò°þvÿ \Ãÿ#ÿv¸€ÿØ0ÿNÁ¼‡ä"ÿú¯ïÿÿSzÿ“¯ÙBÿ®}€ÿý-éæQ€ÿò¡òÿ —Åÿº(û€ÿ‚ÿ `Ëÿ"ÿq¶€ÿÑ+ÿ G~¨‰á éÿô"@ÿ¶•¹{ÿ¤v€ÿý0÷ëP€ÿò¡òÿß !óÿ×?mÏÿ‰®ÿ<`\idÿfm€ÿ” ù ¦ÿ^€3ÅÿXíãbÿWxÿ¨ Úÿ³?8Èÿ !Áÿ“¯ÿ:€Ý€ÿò¡òÿó'dÿìÃGâ¬~ÿ;a$Ÿÿÿ\˜ðÿÎ;ÊýÿH`xÿÿðÇ[´ÿvŸ†œÿVìÿ–vàÿþ9Äÿò¡òÿà å‚ÿ™É®}ÿ d‹ÿÿ`”€ÿÏð€ÿC·(zÿ³ ÿ<ͳcÿ~Kÿÿ]€ÿý;±ÿò¡òÿŠžÿêr ÿ«Â°„ÿûÌÿfm&ÿÿb»€ÿÓ.ÿEÔVýwÿ» ÷ !2ÿ°xÿÿŸ€ÿþ0dYÿò¡ò€ÿþ,‹@ÿÎÿÁŪ ÿ åzÆIÔÿg €ÿÓ ñ€ÿAìž—õÿÔ²ÒÜèšÿÿ¢d€ÿþ&Ð ð€ÿò¡ò€ÿQÊ3ü+ïêÜ‘½£|Ø7¹ŒË‹›ÿj¦ÿ÷ÿÝôüÿÿ0éäûÕ¥¬¦>Ϙžÿ°ÿÿ¦jÿøÿÿ*ÞSº€ÿò¡ò€ÿV‰}ÿk—ÿνÔ{ÏÅCûl+: …á8)*ÅEÏÿ$qÿ@´kÔÿÿ{Oÿ.ÞÿÿŸ!<Iè>ç‘hþÿÿò¡ò€ÿ8s%îÿÉSÿÉiÿùN ÿmÒù ÷Ž0é.ªÛÿž©ÿÕ'Vü}€ÿà]ÿ‡€ÿµ ÐVúÛ5ýÿÿò¡ò€ÿäè€ÿËäÿÿíÎãÿ×Îìÿÿá»úÿË×ÿïËÑÔÔñÿÚÍÓÓÜÿóç€ÿì€ÿòÎà…ÿæÿÿûÙ€ÿ ùÎÏÔÒæÿÕÂÿÿÄå€ÿò¡òÕÿò¡òÕÿò¡þÕÿþ¡é÷Óò÷é ¢Ïÿÿÿÿÿÿÿ‚ÿŽ® Æ Üïã©ä€âáâáÞÖÄŒeÂòÿø¨ùø÷÷€öôóöùÿòÔAÀ äúé¨êéé€è æääáÞÜß÷ò]¿ åúê¨ëêê€é æääààÝÙÏãÿk¾ åúê¨ëê€é èæäâààÛÙÖÇØÿi½ åúê¨ëê€é çæäâàßÛ×Óйßÿ_¼ æûë¨ìëêééèçåäáßÛ×ÔÏȲíý_» æûë¨ìëëêééçæäâàÝÙÖÐʶÅöñbº æûë©ìëêééçæåâàßÚÖÐÊÀ¶ßéòb¹ æûë©ìëê€éçåäáàÛ×ÓÌÅ®Öåãñ_¸ æûëªìëêééèçåâáÞÚÖÏÆ±ÆòÖäñ_· æûëªìëë€éçæäâàÛØÑʸ¸ïçÖâð_¶ æûë«ìëëééèçåãàÝÙÔÌÀ°éôäÖâï_µ çüì«íììëêêéèåâàÛÖÏĬãþëäÖáî_´ çüì­íìêêééæäàÝ×ÐÆ­ÚÿðìäÖáï_³ çüì­íììêêéèäáÞÙÑɯÑÿöñêäÖâï_²çý°íìëêéæäàÛÔ˲Ëÿý÷ñêãÖâï_±çý±íìëéçäàÛÕË´Æÿÿú÷ñêãÖáï_°çý±íìëéèäáÜÖ̵Ãÿÿýú÷ñêãÖáð_¯çý›íêúÿêíìëêéäáÜÖθÁÿÿþýú÷ñêãÖâñ_®çýšíéýÜÒýìí ìêéåâÝÖθ€ÿ þýú÷ñêäÖãñb­èýí˜îíöÞˆ÷ûìŒî€íêéçâÞÙлÃÿ þýú÷ñêäÖäñb¬èýí˜îíÿÇFwÿïŒî€íêéçãÞÙѽĂÿ þýû÷ñëäÖäñb«éþî™ïðÿgÈÿì‹ï îîíêêçäßØÒ¾Æƒÿ þýûöñêäÖäòbªéþî™ïíÿÇñþíŠï îîíìêèäßÙԿˈÿ÷íáÖäób©éþîšïøüAUÿõí‰ïîîííêéäàÚÔÇÅÛÖÎÉÉÌÎÔØáñýÿÿùáäðb¨éþîšïíÿ‰.“ÿð†ï"îïïîîííêéäàÛÓÍÁ©™ˆ|vtrrqx‚Ž¸Íæîýú\§éþîšï íÿÁ5Ëÿí‚ïîïðøð€îííêèäáÛÕÍÅ»¬’ŽŽŠŠ…wojj}¾òÿV¦éÿïšð ïýí-6óýí€ð(îôÿÿùîððïîíìéåâÜ×ÐÈ¿±¡•‘’‘ŽŽ…vmÇüI¥éÿï›ð(õÿY30dÿóïðïóý¾¾)áýïïîíìëæãÞØÓ˸©Ÿšš›œ™€– ••””•“…i¢àP¤êÿðœñ5ÿ|12¸ÿîñîÿ m,;üôïðîïììéäàÛÕÏÈ¿µ­¨¨§§¥¢¡¡ ¡  žœ™zžÒ¤êÿð›ñ,ðÿš010$öúíýâPlßÿîñððïíìêæâÞØÒÍÆ¿º¶µ´²±°¯¯®€­«©§£¢·”£êÿð›ñ,ðÿ¨-.0"Ÿÿòÿe#AÿöññððïíìêèãàÛÖÒÍÇÄÁ¿¾½»ºº¹¹€¸¶´±±¬« ÏJ¢êÿð›ñ%ðÿ«--1,dÿÿÍ”ÿïññðïïîììéåáßÚÖÒÏËÈÆ€ÅÃÄŀà ÂÁ¿¾»¹·°Í¢êÿð…ñ“ðîÿŸ../¼ÿÿQ!¸ÿî€ðïïîíëéèäàÝÚÖÔÑÏÍÌÌËÌÌ€ËÉÇÅÅÁ¾É¾¢ëÿ…ñîû”ÿ|12(tÿÿÃ,æŒÿýû÷õóòñóéÓÔÕÔÓÑÐÏÎÌÈÑÆ¡ëÿ„ñðÿù¯˜ ¤¤:2. ¬¥A 0¨Ÿ€ Ÿž œ›˜––•“’‘ŒÃöÜ€ÛÚÙ×ÕÔÑÞÌ ¡ìÿñ‚òñúï>”"71';,!)™ ¨üßááàßÞÜÛÛéÓ¡ìÿñƒòÿ‡P¡š˜•Ÿ«, 0.v¢ªP2.†¢—‚˜——–—€•”““‘ƒ›ƒãóäååääãâàïÚ ¡ìÿñ‚òôÿoÄ‘ÿ£+2'$€ÿ9 1/Ü—ÿ>Ðÿèççåäóà ¡ìÿñ‚òôÿz¹ÿðŒñóÿ•+2."Žÿÿ­2-0"ªÿð†ñ€ðïî‚í€ìòý?Úÿëì€ëêêéøä ¡íÿò‚óõÿz·ÿñóó…òñùöõñÿ¼#11) Þÿÿl2-1*ÿó„ò„ñðîïî€ïîõý<Ûÿí€î€íìüç ¡íÿò‚ó õÿz·ÿñóñù‰ÿì 4-0$]€ÿ1 0/1.J’ÿ€ñùÿ>Ûÿðñðïîþé ¡íÿó‚ô õÿz·ÿòñÿÿààâèÞs•‚ìh5-0,ðí½*-/./ Îíáâãˆâ Üîÿõðùÿ>Üÿ…ñÿë ¡íÿó‚ô õÿz·ÿñÿäP1-/1*) (1-..1(  œÿõúÿ<Üÿò€óòóòñÿì ¡íÿó‚ô õÿz·ÿúù9 ' -1./1*"20..-1+Ž ³ÿúÿ>Ýÿóôóóòÿí ¡íÿó‚ô õÿz¸ÿÿÑ!ƒ 0"+1/.-1* !#0€././ !!Ž &fÿýÿ>Ýÿóƒôóÿí ¡íÿô‚õ öÿz·ÿÿÌ‚ '0 -0/.-0, #0.-1' "oÿþÿ>Ýÿôƒõôÿí ¡íÿô‚õ öÿz¸ÿÿЂ .+"‚.-0! "0.-./ "sÿþÿ>Ýÿôƒõôÿí ¡îÿƒõ ÷ÿ{¸ÿÿÐ !3&#1. -1, !0-./2'‰ !‚ "s€ÿ>Þÿ…õÿî ¡îÿƒõ ÷ÿ{¸ÿÿÐ '3#"9ƒ.1'$$6-€./00&‡% "s€ÿ>Þÿ…õÿî ¡îÿƒõ ÷ÿ{¸ÿÿÐ -2"‡{1. /.1#\¹ /.-1+‹¿¨‚©«¦L$€ "s€ÿ>Ýÿ…õÿî ¡îÿƒõ ÷ÿ{¸ÿÿЀ "01%ÃÖ4-. /00é5-.-1'Gý…ÿú(€ "s€ÿ>Ýÿ…õÿî ¡îÿõ‚ö øÿ{¸ÿÿЀ '10(wé$-‚.-04 »H/.-.1)ò…ÿW! "s€ÿ>Þÿõƒöõÿî¡îÿõ‚ö øÿ{¸ÿÿЀ +10(5ÿc2ƒ./037p././02%……ÿN! "s€ÿ>Þÿõƒöõÿî¡ïÿö‚÷ùÿz¸ÿÿÐ  -.1*íÑ2-ƒ.-1210/‚.-2, ñ„ÿN! "s€ÿ>Þÿöƒ÷öÿï¡ïÿö‚÷ùÿ{¸ÿÿÐ $0--/$’ÿ2 1….2'00-‚.-0&§„ÿN! "s€ÿ<Þÿöƒ÷öÿï¡ïÿö‚÷ùÿz¸ÿÿÐ &1/-1' ÿ±3-ƒ./.1")1/‚.-1/X„ÿN! "s€ÿ<Þÿöƒ÷öÿï¡ïÿ÷‚øúÿz¸ÿÿÑ '1/-0,¼ÿ0„./1+ .0-.-.1 íƒÿN! "s€ÿ<Þÿ÷ƒø÷ÿï¡ïÿ÷‚øúÿz¸ÿÿÑ *0-..1%)ÿ¨5-ƒ./.0")1-‚.-2'¶ƒÿN" "s€ÿ<Þÿ÷ƒø÷ÿï¡ïÿ÷‚øúÿz¸ÿÿÐ +0/.-1,­ÿ0„.-1'!„./00~ƒÿN" "s€ÿ<Þÿ÷ƒø÷ÿï¡ïÿ÷‚øúÿz¸ÿÿÑ +0/€.2*ÿ­5/ƒ././+0/ƒ.3GƒÿN! "s€ÿ<ßÿ÷ƒø÷ÿï¡ðÿø‚ùûÿ{¸ÿÿÑ +0-../00'zÿ#0„./0-"+0/‚.-2í‚ÿN! "s€ÿ<ßÿøƒùøÿð¡ðÿø‚ùûÿ{¸ÿÿÑ *1/€. -0.ß´5/„.-01./ƒ.-0'ÂÿN! "s€ÿ<ßÿøƒùøÿð¡ðÿƒùüÿ{¸ÿÿÑ %1-‚.2.<é0/.-00 ‚ÿN! "t€ÿ<ßÿ…ùÿð¡ðÿƒùüÿ{¸ÿÿÑ  0.-€./-1*¨“1.-1t‚ÿN! "t€ÿ<ßÿ…ùÿð¡ðÿƒù üÿ{¸ÿÿÑ€ *1-.-02 :š-‘.2J‚ÿN! "s€ÿ<ßÿ…ùÿð¡ðÿƒù üÿ{¸ÿÿÑ€ !0ƒ.-1.[:*/.-2$ùÿN! "s€ÿ>ßÿ…ùÿð¡ðÿƒù üÿ{¸ÿÿÑ *2-‚.-2 /0/.-1ØÿN" "s€ÿ>ßÿ…ùÿð¡ñÿƒú ýÿ{¸ÿÿÒ ""5-.-0-+0-.-1'½ÿN! "s€ÿ<àÿ…úÿñ¡ñÿƒú ýÿ{¸ÿÿÑ 9.#0‚.-.1--.-0,¢ÿN! "s€ÿ<àÿ…úÿñ¡ñÿƒû ýÿ{¸ÿÿÒ€ !y 5-‚./“./0-}ÿN! "t€ÿ<àÿ…ûÿñ¡ñÿƒû ýÿ{¸ÿÿÒ€ !Wý?5-˜./1*QÿN! "t€ÿ<àÿ…ûÿñ¡ñÿƒû ýÿ{¸ÿÿÒ€ !BÿÕ$0˜.-0)2ÿN! "t€ÿ<àÿ…ûÿñ¡ñÿƒû ýÿ{¸ÿÿÒ€ !EÿÿŠ3-–.-01ÊÿN€ "t€ÿ<àÿ…ûÿñ¡ñÿƒû ýÿ{¸ÿÿÒ L€ÿG8-–.3¬‚ÿU" "t€ÿ<àÿ…ûÿñ¡ñÿƒü þÿ{¸ÿÿÒ @€ÿù.4-“./1*“ƒÿF" "s€ÿ<àÿ…üÿñ¡ñÿƒü þÿ{¸ÿÿÓ ŸùùÿÞ.-‘. -01cÿøõõùù¢€ "s€ÿ<àÿ…üÿñ¡ñÿƒý ÿÿ{¸ÿÿÓ $+.+M13./.-.1#D7)++.+$€ "t€ÿ<àÿ…ýÿñ¡ñÿƒý ÿÿ{¸ÿÿÓ‚ "!*2././.2&$‚" "t€ÿ<àÿ…ýÿñ¡ñÿƒý ÿÿ{¸ÿÿÓˆ !*2.-Š.--02%… !ƒ "t€ÿ<àÿ…ýÿñ¡ñÿƒý ÿÿ{¸ÿÿÏŠ &11.//„. /.-.1/" !‹ "p€ÿ<àÿ…ýÿñ¡ñÿƒý ÿÿ{¸ÿÿ×!‰ !!$,110€.//€.110)!!Œ &i€ÿ>àÿ…ýÿñ¡ñÿƒý ÿÿ{¸ÿÿýE‹+-00100110,'!"…ƒ½€ÿ<àÿ…ýÿñ¡ñÿƒýÿÿ{¸ÿýÿé^(++,‰+4; "%€& $"! 76…+,ƒ+ 0§ÿþÿÿ<àÿ…ýÿñ¡ñÿƒý ÿÿ{¸ÿýýÿÿñòŒôÿw!‚€ "Yÿõ‹ô ðüÿÿýÿÿ<àÿ…ýÿñ¡ñÿƒýÿÿ{¸ÿ€ýÿÔŠ ·Žÿþýýÿÿ<àÿ…ýÿñ¡òÿƒþÿÿ|¸ÿ€þŒýÿÿÜ%Š $ Æÿÿ‹ý€þÿÿ<áÿ…þÿò¡òÿƒþÿÿ|¸ÿþ€ÿ¸%Œ &£€ÿŒþÿÿ<áÿ…þÿò¡òÿƒþÿÿ|¸ÿŒþÿÿÈc)"!)V¾ÿÿ‹þÿÿ<áÿ…þÿò¡òÿƒþÿÿ|¸ÿ‹þÿИËÿŠþÿÿ<áÿ…þÿò¡òÿƒþÿÿ|¸ÿ‹þÿÌEWd”bdYGÉÿŠþÿÿ<áÿ…þÿò¡òÿƒþÿÿ{¿¼ÿAàÿ…þÿò¡òÿƒþÿÿn¼¼ÿ9Ýÿ…þÿò¡òÿƒþÿÿž)skihƒihihihh’ihihsZõÿ…þÿò¡ò†ÿûl½ Έÿò¡òˆÿÖ¿ÉÉŃÄÅÅ…Ä ÈËÈÉÅÄÅÊÊÈÈÄ‚ÅÇÅÄÄÅÉÉÄÅ€ÄÈÅÄÄŃÄÅÃÊø‰ÿò¡òÕÿò¡ò€ÿ ¶¡ÿÿáËÿú—gmÛ€ÿä«ð€ÿ즷€ÿäsYj^Åÿ·`adtý·…ýÿÐuÕÿÿ ihÐÿ‚Ùÿýºÿÿè±óý’Yh^›ÿÿܞłÿò¡ò€ÿ<Öÿn›ÿQ€'ÿîa"ÉÿÏ<äÿe~ñ‚ ßh±ÿ”žÿl€ îÿÿâKÿòûÿiÎÊÿ´€Pñ€ÿò¡ò€ÿQ‹ÿòÞ¢Väºÿup¦lÿmÐÓñä"ÄÒÛùkXÿ©®ôœj¯ÿÿ·öýßÿ7íÃ`ÍÒãÿ:Žœ€ÿò¡ò€ÿåFÞ2ÿÊCÿ³ß¯Bß{~ÿgÚÿ9ÿ}Ç€ÿã2ÿZùµ¡í,ÿήÿÿ‰ÊÿTÊÿ ÿ¿‰ÿ0ÿûl€ÿò¡òÿ@KÿÊCÿó¸þ—ÿ `Çÿ*ÿx¿€ÿß6ÿTÈÅŒí*ÿú·ðÿÿYƒÿœ¶áGÿ¶ˆÿ6íëV€ÿò¡òÿž€ÎÿÁ3ÿšÿ dÔÿ(ÿrÀÿØ2ÿ O„´ì÷ÿù-Gÿ½˜Ã‚ÿ¬ƒÿ7ÿõU€ÿò¡òÿæ*ùÿÜGqÖÿ‘¶ÿFÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¬FÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿæFÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ9Fÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþ>Fÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþ?Fÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþ@Fÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþ@Fÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþ@Fÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþ@Fÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþ@Fÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþ@Fÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþ@Fÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþ@Fÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþ@Fÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþ@Fÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþ@Fÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþ@Fÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþ@Fÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþ@Fÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþ@Fÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþ@Fÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþ@Fÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþ@Fÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþ@Fÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþ@Fÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþ@Fÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþ@Fÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþ@Fÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþ@Fÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþ@Fÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþ@Fÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþ@Fÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþ@Fÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþ@Fÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþ@Fÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþ@Fÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþ@Fÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþ@Fÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþ@Fÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþ@Fÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþ@Fÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþ@Fÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþ@Fÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþ@Fÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþ@Fÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþ@Fÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþ@Fÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþ@Fÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþ@Fÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþ@Fÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþ@Fÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþ@Fÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþ@Fÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþ@Fÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþ@Fÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþ@Fÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþ@Fÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþ@Fÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþ@Fÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþ@Fÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþ@Fÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþ@Fÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþ@Fÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþ@Fÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþ@Fÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþ@Fÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþ@Fÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþ@Fÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþ@Fÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþ@Fÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþ@Fÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþ@Fÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþ@Fÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþ@Fÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþ@Fÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþ@Fÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþ@Fÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþ@Fÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþ@Fÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþ@Fÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþ@Fÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþ@Fÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþ@HÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿBBüÿýþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþýÿú<'M`ffeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeff`M& %-,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,-%   ic08,Ó‰PNG  IHDRk¬XTPLTE½½½ÚÚÚÓÓÓÇÇÇŸŸŸ««« ¶¶¶xxxÄÄÄÇÇÇ)))  ÑÑѹ¸¹ÙÙÙØØØ¯¯¯ør\ØØØì"'ïÿý Á½ï’†¬§C=öÿÿlQU:_ZÉ}ç™z ›“·³d>B6 Éäáÿ¨ÿ›Åü¡’]ªh â3B_‚~ß”pooÅŒè!ÿûý›››ÿ&';*)›‘’’†'ÄÞ#/ÿÐÙ_A ÷p€æWiË-?¤¤¤×?Q412’'ƒƒƒ™B@Aýy‰rqr+ÿØßg#¨¨¨ÿŽž­ÿ‚“RU"SQQÿöúFÿçíÿÊÓÄ,žžž ÿ«¸\!" !m ¬& ——— ÿš¨w &"#ÿÁÌÓ+eÿïôÞM_ ‰7ÿºÆÿ£±ÿßæ;78!ŠŠŠ ·*ÿ²¿£¢¢ååå­­­& ø%/~{| ãããGEFò$.ÓÓÓwuv"ussæææ³³³856ÿ'1ë".“’’âââÇÇÇäääÀÀÀ #ÿ&/ÎÍÍèèèüüüàààúúúÌÌÌÖÖÖÛÛÛº¹¹ôôôóóóøøøûûû÷÷÷ðððõõõîîîêêêòòòùùùïïïëëëñññýýýìììþÿÿííí" í#.ÿÿÿíûT$tRNSAóøíî=Ÿ¿hÞ{*ù[ý:<PpGB!1[ ˜x]N)VIDATxÚì TS×þïß´î]mß[wXÿ·n}ýk­¢ÏåÿN}î߶޵Ú:Vœµjq¬ZAP+*J™d2 PfY¥@° CT4Bƒ‚Qd>BØï·÷>CH µÈê/˜œ)çdÎ÷7ì}Nâo¤ƒŸÆ7~ü8˜†d?“Iî¶áŸ`%ÞŒL“íé6ô}äžðFxKzrˆ¡5#Àç{k¨lÜ[ã0-30æ­Q£†ô¤¼5 83ç~Ô›ùãPÙ_Þxs¦>j00pþÿbÑóØ„V'ZmÍÿxí÷¯¿þÆh*„qÃ`Ì[ïŒ~ë­¨¹ÑdjO±µ=mG ¿]=~ü¨Q£Æv£Þ;ú?nn5¡=Äb……÷îÝ»v÷^k}÷ãßýaü¸wF½5fx€Œ;ößÀд? Ü%nq·ëÑïFýfcß|óÏŸ›Ìò(|¨ îæ5ôÚŸ€¸Á°xgì›oÿ“E@=€‹‹kkу^oÿiHà.0yr­Eúo †À¿™¨`'×ÖÞ¬ªAÿWM /€ÿ5$ I ¤ÀnZX”Ô N#@ß@@TÕ”ÝD%‘ € 9à®F%O #³²ÄX jjJÊJ:;y#€@€ÀÇÀ›7 €¢Ç/ò†À݆&3`  pM ‚UàIIçÄVžÀHÀ€<@%€û…€²I_X<ç ŒX¼ 9'PVTÒV{SÐÀH éB!Q°| ¨5«ö¦Fm¸§ ìêÄÎÚÉ¢F(>ˆÀ>PC‚@I=à°40âˆyLCµµ4L(zÞÚ‡ÀH ø€f `O®>® s…<‘@+ ¥Î8 ^µh¼F ”qF€Bà‹¡»4 ÐRhRYsë½Ç0+t%"êEE…@‚BO`„ÐN…B9Lá„I… ­‰D# ! d‚,ŽÂA ®« Üã )€kí=&6¡xH yàªêly®M`d€ øb|€PÒÝÜÙ£C`dèáp££×¸<@jÁ²êöz=Y84ð¨%•@Ñ“æ®æz=q€(€:'u¢ ‘P+Ž(„²(€ÉÀ¤¨]$0Y[¦¿0†È¸¢ A€Ô‚…èYu;!Pxí1$‘ÀH€  @&¤AJ¡'“£.žÀCL@C#À RöP6©uw‰è GžÔÃ\Äyp"B]]ú!0»{V@- hk ‹™²î.Nº Ð! ŽŒ88ÜãX`X ,þ Œ$œq+ €*„ hjà^_f ¥5·*B j8}½à¡3ÐÜStyr׋Á§É<½&k0-€ê–—²ôÈž½…:Ø!ý!RˆH蟀èlλy†-­B=†#Õp)€¢*ÄÐÑ€x½À|4¡“’'Ù³¨¡ÇH|¬£… Ï ú^/0[=íMËìoT°? ã<$ê( ¤A@¨ ŸkkÀ\´´ ;1ˤå¥è…ñ. ( ¦d ÆJ ‰h ÏU3S¸÷¬ã¥¬}tp*#cO5wõØ’0 Ã…¤C¬ @Œ"«çf  £³{³u#aóÐÓƒÀð°@z¾ ½àѳjq„¤Nƒ€™hAÿ ¯<ÈD²“Aˆ>p—¯„žLDÚ›Û¸š°NãóÐѾä??Wy2¥u¨ç¨‚á€gϪ««Û»ú`h¯ïyxïZ_ ˜'€Nô©›ª`Þjèê1€B€ƒ<½DHwHðŠ®ž9ó±Ÿ~Z±â¥!ò ž‘··åuM…]/oè‹K`Ëv]+j¢‹;нҳ#Xû¼¤©ƒ2èya÷*L`ÒÕ«ØwÀ‚£<€ÁNþt—$Ã1æ ë£ Ÿô‚©¶}iÅžDmdiS#ZšZs’eï :O3dB^Â]ÃàŠü]¥v€PÃ(ˆ~|òÚÛïà0`fª! PûÌ›_K%žá÷7yùý‰0/'xµ½BJ2! ÀŠ0Œüá^D —o‚Œõ–™h_òÿ(€‚â XA1ÐFÚ¿dƒÛ·gå8,vj€RàÚ].` `PöŒ€a€QY)¬ø®æ£°˜€ÛK$°cý<¹ýÃG°°z‰»Þ«ÈgW N-¤ N@4ˆQ„<ñ@ â+ª~÷–€™èüò“ëò2„#àßxÆåGVTiD÷ø[&!0èÇ“BÉÞ QÀ¼ð (ßÉbÍÝïY«–)Ö–Ÿê©îÔ•„ÁÂkâ×說(]¡P1Lª{}H`œYhçƒ`A®çúåìÙ†Àß*£%Pu5k ]ÂÂ,᫤€³ü ¯`ܳ … ¿s,$³@Ò Àþ-ë³%¨£³á¯g­U;—O‡¬X/ ø; òß&Æ_¥ lÀ‚›ˆj^{cìØ_ÀÃ_­Ë-Ø={9»5¢Uª‚w‚Îñ!@Tîc' }"@ @ fÞ #p¨yòDZoކ<`ZOÛ«7\ Ó°zöqy j¯Fï‚T'VN³‚þ¡¸a;µòã2õõ€‚¿{‹A´:Ì„!pÁ(„›eÿö&gJMO‚¬±Ö ¯ Àf÷4@WsSN Ó–É' qK:&@;Â]“TØ&“&ã纖։'ÖM$K c˜\L«€¦fT›wöÔ £íÔîÿÈÅرàï;Ï_<‹É¢UŪ >Ù·ó¢¡7ë³·KžÁhœ )óqÉŸß~{ì;¿€î6mëlFß•²òR½vIß2ö  Pi³ïã-Ç#"åxÉXB¬‡yý»â¬\•²å+šE¯à †‰“9ãL M`K#"˵K i´ ÀeÁ'’—ð’ó ^¢Ú¿TÀ£,^cú~D)[Ôp—p¸Ës€¿¬ª?ÿÉ´ª›O±ëâË/i?Ÿýç"€h«ÅÓ_ÇKNýÓ³‘o™¶o§}¿o¤øÓ2XR~>‚½ÑÚzù²o­¦€jÊÄÛ—u¶>4Ʋö,¹øUe1ÀÇË`ìÞ†GˆŠ!(ú-‡,põÙÿ¨±,¾i|=þqVѺŠ%ÍtË{Yt[¼åÝ»/nš@Y|${ ¡.£ uÕ1ÜZˆóf\yŒ`Ñ»¤2†E¶ÓlÙŸP·Î›a#Y±¬‘dEbõðW_ßÖ€>c#ãŸTS^<3ì^G­É”T<`o£æ6#¬óú4¤²—¤€Õ‹­€[sÔEA¤.*(ØðÁö¤öžÄlƒËbj/zè÷ëˆ=ÞÒ*ʺøßà bÕdeÖOß ³}ôM>ÛÅ»§‘*¸³­tPÓÎñœ™ìÒîF­wi–…Ü%Cž±žžÎgŸ±*ʺé×îúbxZ7" óCorqc¡ê[¼…=û¬½­ ƇÄÎñûòÏtÞ×È ¯ A!ÍG öÄÏÉÉ.¨t™3m»µ‰€ÓÀôÙ3$Q›.mœñiÒð+@õÚÆÅ€ÆzCÖ‰–¬ûŠŠ½ÒÏvñû3îס¶ú§pZ¤Qpö>ùX¨mz9ˆõr}½Jl”Œ`íà­¹úiôeÚªÑ{$€á¸ú õõíïnµ ¶Awðzªo/"]kF€€…_à­þQCs;êªoCÿˆ@B\Ö²FÿðÛéàf–öúÁˆòX<º;¤ ½Ï–•ýÜúôV Bíþ  篟±ö1YýE8„jp¥äýp¹ÐHk× k]÷~U­è©¶qÈL[;j¯³¸©au¼‹òØ_ ˆŒ-ž)?U[ë[?%!€*£wÃú}òsocÛa(…È¢}O`èÈJm]hÒüÈ+Äòóñ³$}ê~E¼úþuE€JúŽ‹¡#¨¾’%?0w„„_N? ï-¿ï÷È+7&¡GXv €¾3 @þy, e¹†¥yª<ã®Dä§¥ù¨AüØvg>]¿¬8W1}ÞñÈø # ŽÂBÙXݦ€ˆ¡»p4£s샵¦I˜è‚@™Zø`ˆ1Ðj'Ý€ñ̥˹jxξµj#-¢z Л>ÐP@=ëä}ÛŸÃxª‚"CU,4Óeö'û8":L¸`úñ£ Èí;ºá¸í< e¥÷Õ} Ú½É×Ý¢ÒA"€m| ùaù¼µ±v¿´ é z8”&ɯk `·*w··“ ƒ‰±nšà]!®²Ý™c<€ æ @ÍìWù1âšN¬† ¨@±*xõ<ã}àzé“!Ьm€vÒÙp}@€Ç}ÄhÔµ!p^Æ¥’D½Ê [¸òs5Z¢Åá¡-Ós}B^ÑröÖ€.`ô(@ìÿx~ð÷µà|Á£› ] WÀèôèð˜|ÝÓƒ ÙU;°,Eè#®àÑÍx¶ï¯e<õH wü}ì„W€ îýä­Ï›Q^pÓ•w1`¦~ ì_=½m ·‡ @jÐ6.<‚IÄÀâ\±wûñ>(ìñwBôF\|Mt§> /_ ·oXpÜ.@ƒCÏM B0è\ñR‘0x¥êøþ%0O¿nÙÇ–¼š4Â: N‹ èG6fïS¸p>Ó÷B‘-{g0:.Ðw´¸2à $Pqêa7ÝFÒ@ c@p ±nܶ’=û )€Ðî‡á¯×Á6Xúd,Ÿ½˜éé1[=<uh¸À~•f¢Ã÷Ų5 í( ^0ßrœÖŽ¢Ñ[ª÷±eæ ÞÌV±gE èÖ<0 aP·Ü cï¼’1€Û1eÔõg¨ôG•ËwžÐç »ÕŒЂڵs.˜Ü×  ¸Òoßâ-òüÖ~%«:±N¹_€hY¨}ó@à¸<€v=†^ €[Ý (:TC›ñÀˆþZ @å\\  vÇ]²0sñúlSé\Þ2ô·ý‰ ¸·RU  Ü`Â^5sçЭE'(^6{ k_ÎÂØØ L̰'û ‚C C?]ªm*{u®‡îcóðØØ D²g ( 8߀žá@‡‹uF> ¨íÞßœ6Þà«Í€¾ ˜£ÛÁ/€aN<ÈwÒÍh _-ˆ+¯5&˜™dPÚë {®^Æ–|>88¨d‹^=€ªôŒýlaoàŸÓd¼3`¤*Ì €ZšC"º—}­Ø«yÖ¹ƒàǰ› daU€n ƒÅº£|¶ì÷ß*TFKد¢Ôp‹”®2Ö]ùùÓàÊA¦ˆ¯"LH Bæ:³ßht\Ša³ÎýÈÑ+h&0{¿Ñ.@ÝÒ€á,?$šPµ¶¡*ºa’XP1°xP…À6»·ø¸$VÁ¤®¡Ó8¯H`YA®ž+â»m`©ñVyнÝ_ T pþ£tÔê.¨ÌÍ-€ý00új(ýL_ï¿Ê Á)`‹Ü¾Ñl<Ó6Îð mìý@ƒ°àúùÇý€ãòžé±¡ß/€Ût 𥠮 À%Ò’~‚ àüð¨èÀfôÑ”Ïs_†ýÑA[öª~æ¡M÷µ cT/ép›Õröò+  û½—s‚b| üà”9Ç€\¡œ^Î *]f¿¿“ýÌœp~@èÀʂ—ñ€-³×B`Î ˆzÏá%œî°eí›ú`YÀ€Ð’uÖƒ& ~wÀÖV^>!sv‚ ±/œ>¿PL<¾OÊ\\ =Ò6LjÈîöþ‡÷7ƒ„´÷,U°—¸[¼ —ðH¡Žá c×§1•ƒ&@ÇOØ¥HÓ¶¾Jà'ƒ ªÁ Ç DÑJ䑚.`æ".=˜ÔŒ¿IQÞ…Tð €I[÷Õ7sÖÞXt¿4¢œ>ñÚDñì:øý?{{û§âüTƒmÁ2æúÏgííÆx¹¸Ž-P+€6Ô¥m<˜Ò H ¿œþfé)=(Źr"®à÷—ÃÞIy~„Z 9.´€I]CMC à‰6€>d@`0íwa ~uÖ<œ×RÀË c‡Œ$ÇMT˜ƒp 0D Ø8ÿW¹@û£€óæ0ÆeCU®'nÿ+༑€€nžª4D ¸¾4ÇõíqóP!`¯«& Sº ꦿÓoÞYÀ  f$ÁªþCó£=™ÀµQäf@túCJ†ÜÀÓO¥ÊíGü*›m œŒü‰spÀ£‹øÛí†EÀxfô­¢\P†ß6#3²ùêöT·9 1€LáZÕ0 Ã,Û–a-«ï¹6Á'–[1RãJ¬F º†¿°Ð€ö²li¹–/…8ç¹m†_4±Œ;\–O_½r]>m\¼áßX/eÙsüao™ ø(U›¡ãbÐnØ_ÏQ2`R™ÇÌvÁœÙëgZq?ž’qê¢=ÀQ6WÁQÍ€Àºjìè4`MèÞºx51‰D&“Êö-Ÿ9]}|mŽÝ› 줣¡î.@¼y€ycì–H]´µ;ÓæSƒa #L<ä­á ‚\0ÞPmy¼z@ËgϹGs‚ƒ€Ý0”-#J+êŒÙ£y¸À  ´™5"ÅÿÜip—Ãàõw´| €IcÚ+F9°SãöI wkÔùkè^ÓÝ…øðàÐåxqÿÿp„|º•½aT™g_‡Èn í“Kƒ_{m§ €„HP€0?Ð?<®½ŽÍ0²Ð-ýØ)<ó.ЭóL¢ ]xˆ.€~`«Û̈}Ç”o” dx×íå&P€ÎAºÐU²ùilûi6dÏ5Ú·¨­5C¬€5·¿óÇ‹,[¡œÝÅÜzŽºD@ƒàð) ‚‹Ÿ¤Í,\ÕÊ×ot¹þU×/±[‘.P1| ¨0ì¤XûŶÔÀÞ)€áU€a?m;³÷§_d{Ït¢K\`¨À½ •`·!¿Ø\ãb@÷°gþ²5.J~±¨0†IHSy8 áÜ‚_ü€]¬€<P¥¯BC €šòHSÃkKÙÈò*½žbZékâ¯Tœ„ÿþ§cîÿ¾†i:ËMqk¸?º¤Ïô•ÚqÓ'š;¢+¸þ]t»²¼øüòüVušTÂ+Æq…eåä&§Ï`xÜ 5:'nÆ-å˹)²B4a{þ=ün¹iöJû= ¶ë×¹'øÐ`#ýsâ"ýoÓž£ÿò°ö=H¿µ™z¸•f“o}ކØÍs—ï Ÿ]^Q‹ÐPxåì7¿0 /¯=ô5)…[p()9Ùêµ5ÂTJ˜{rfff²/îÄ&»‡ùÃL±))±›OT”™Øã {LòB¼E…qGŠí{”=Q®®°ÿXá`¦eã·‰L¸»[âÏë;÷@BPƒe,â¸X®òEÔb3íŽ ã65Æ#($$<|.ÌøGy…‡„Ùx¡$ë6Îl“ƒÃ&BjÕ"Ç ˜„¹˜Ú7J`ÓT›L2á?÷tÞÎÁ#vãæÀœÃŽ,´Œ29€°Ö %e*ËN…FgZoOÏV*Óc6"°¤ùGœœÜæ§†Ì ñ–Ëãí0§L¹R©ÌÎÎuˆB¾n,Ã(ÙÙéáÉ(,&4À£;ʲ ÷@C¢Ó³ÊìÄUˆšó"Ö- ïo›J–9[öŒs³²ËÔ#°0Ù:ÆIžê07ÌÄüÕ޸­îŒœ//9˜~8žI›štÜœ.e3Lº÷,X5+QÁ¤•††6É1JÉ”€€˜ð 8I! É2€PÎi¼&4: = ¯«œYÜári¢‡ Q&ÎÇíþ:=-£u÷`RáØ åjoØIx¸M,JÂLKåiÀÊ´R2ÒÒü yǶ31®Ð®p¥tŠß±£S”p.×Ì’3jéƒ8†ñ¶ßpHg£’>Õ®xpÔÝ5Ìß?Ê E9ÆÅí:í–ì P›ÀÂÒÐ]±ð¶¸À닎Íra&ˆÄ´àœÃÇrÈÞ~l Q#–gìÑPowä³+M–îuhV@Ð&„[âqšœ7X¥ à‚€‘\íÃ>Òƒ±TÛÍcÓíaj& ÁD¬ ²á×Î ™Y”„=-ý€¯)PØ…?µ‡;=}Ð.¬‹0¼Š~BWW„¥ Q/L´0ÌQ†$ÓvÂ&h¨ `Q3Þv˜}ˆÒé,8}é¨n3ˆP ÷ÇÍNH2)âzŽ®.e;$ä3¡ÌUî)¸­X«ÄDÁi¥!xRR\›²û:Y‚ÂC³“@6è YÚùÒý)Õ’4?¶sp:n¹k 9&¸@J²ËJ6-8>£þü…H½ !8‡šŽpF ; … #juZF¬×®4pm¬ E³Ãëw¨“¤€'õ­9¶]Wàw®&ç!Ðsã}éP­„Àzøùd"€$Çl`#„/©:Gž‰ ȃ~@}K•I%ÐdÚÊ„(8óDg{ŽN?pHG¦€,¥ŒŒjØ~ÌKŸ] @Š_4–Ø(HÈN]Õç Kì|0âiÎH0X̸x2ØÆDe?: ‘gÃq¢´„…CJ55(LÔj¬EDÚ%Ýa–äE€Ú5]`UTÔFG8'dNìêåëÜM"¢â€;žá\@*IÛµ+-Î1 òKã17,,3VPK`ô6† Š›R‚Ó/ÜC0Þ«’¢|}c9§ýç&B&15h§DIL[‡J™Ä˜˜„U±Xí$Þ‰"v8&xH![“¹Àûá Ž Ñ)€L”àèhMK‰O‰r‡ûÂô8Hk{ff§˜˜pè pˆwWž`ÀÝIö½y0›„S¯£—$Œ7ìÄí4ÀìvLŸÂ¤ÎE¦Î'#e ñ6ù«÷Ej&NÁ0‡gQ_É‘) +†S‚"G¢„™wÀÓf7³[µK€Ž§P*N6>4I(=,Æ1A®$ž¤/Ü袄·‘(É‘*²ÓY’e2M Û™Tb¯ùvF÷H•‚ûâÏG2˜L–híOËuSà0×—€™ó ³’0¥§j#ý †1™6Bœ9Æœ”AaGJ!Ðó|â5Ôƒ<‰Â;ÜÏ} )Õ`’˜Y>C €í4R‹õõw_å +J´¾˜€UÎÜ\“jã -$.ÔNuÚƒ€€ Ó™`€Ž0dºZîPzŸ¦9Gá˜d—Ê¿·µ`wˆ".IdÙ!óý¡Å<Å"w/drð™Ô¤âÍ÷ëìWç¼ üÄ<iª d-@`¹5©Ø(€dw'f÷n_EÐó›hG+ïô¯cýƒ”i´º”Ê T¦dÊò1Dp^L>“$÷\ûÄEè$ûÐBH#eÔ²8é~¾H·( b¢’bY`Žøn(säÛ¡¤ë{¥|m#)A-‘âH³@ÀF1 ÊÔŒLš8ßäˆeEölñ|Aµ´8Å[Æåå0Rˆ |%ùˆƒ¨I…sŽ†Ï²×ÜT¨¼¨ør˜w àRŸ: 0Ðûz`è.“€Àì8ÈpÍqÎŒÂ^w¬ôð@¬!MYµj lÈÍyÛiBG4d¢Y‡eçpŸ¤$R BêÇÒ’ûe\Øu…Áȼ@öTç¤û,# \,w)`É@O˜)ŽfȰ 葹 ‡)Z û„…y‘î°T¸’v`N<éPíAL@ çYB‚8G‡;¸  èZ¶LzX!Q“n‚ºŽÁecEB’ .ØÙÎ b“ÉÀ·ûéD*mÿ ìÄ<¨Ñ¨Ç[¸ù’sîêõ­Cpx¡—Ø€ SA ª€C¡ì1í**Œ,'G’LHø!!Hød)¡@31€=G+C|}¡kn)x³€ø`’CZ?à5uYHý—(ÚÅ@K±¼°`Iú:=4‹Ó”̇„Ä8iœ\‚Ž$ªeŒ€lGçØàô¸E‡L Z§Hóóеg8øs®!1z¾ä³ÓÑpwž¯bwX¤±  ážpþéb#À‡aB§&GmtÛÎHÊáÌC”Â~8€t4BD¦Š%ƒ`GpFÎ¥"! ¹ Ã88YÅ»gú®r‚ÔEØá¾ àbÀª@g`Oø@z0Vìî„¢ø|eã$… ƒ“?ÀåÛLCÝ ƒçtÄDDÔ¸åü™õ ¼ÿut¸T býÒdW¹00„EภтH%rׯMG.ÝèštEð|˜YhËwda@ˆB¶K¥ŽÑ  ´dÇ '=Øš?í°¡Òe•Ý‘ ÇfebŒPŒCÌyú˜€OFº÷R-¢o#qiJœ5<2ÈÈEœ20A§MXÊLâ&@r?Ñ)u;c‡|ã ˜š*÷˜çN“ŒÈ›É‡k¸R¦U2‰–p&Ôú—|K!öb¦Ãa92™ì²ô°u :BÀ@Ö„±#“8t€¥5¬e"Q‚Mbº".=-qV,¬üj{\œ"; ?Mr.fý”¡€#)!]¡È†î ‚µŽõY”ÆÍ„º¥øÇ¤‘\.’ãÖ®Y¦ÈŽKß3)n a¼ëÀõ–50ØÎòqþÈvì¨Ä+€PtškZ8ÆÕð¾Öä’]Šå¢Ç–)d¡ƒcHBðQÜ%I±vrH†öÌõË|±Ñp-0zï ‹€Ê¬p~æÈžØ©–¤|tµ>–I.œnÄ{ ž…³§»024×m¾/Nnü"W‡ º—£I(,!_©‹róv;mâ,À+,Ó5…Ef”¯Ð5ŒÊLJ!iª+ÙÝÕ¯¶ËÝIpi8)))*Éf|ù™CxƒC\‚Mí¸ò2É7…Ïçn3w_~¾ØŒw ¸]Ýý1½°ÓοÝð€ßüà7¿ø À¯ àÿ·Oï8 Â0†'$¤,@!;¶rÿëô½A@ƒ:0vH†Zá‹ì=¿äYg€Ô*€OËóx+s¼ÖF{ë–}ŠŒã¾¸è9´€>ã¦mUd›œ1Ñcƒ„“-†M‘¡°‰%P}ä­1NclLŒõÊ ”>ÍÑj2'Ï(åDf¯ 3–ÿC}€‚‚*#P®PA8Ÿ"p"Êõ.tÎËßÉù\—:wÈ»äÎÝrç>‡Ðû߈tºÀIEND®B`‚ic09[ð‰PNG  IHDRæ$ÈPLTEÄÄÄÑÑÑÑÑÑÌÌÌÅÅÅÁÁÁÄÄÄÏÏÏ···EEEŸŸŸVC0ÀÀÀÈ·ºò~@›œ$ fE< ¼r¶n$ Át¨fkE0!qIxM¯jHII*%Èx œœœ›››`@ihiV;€Q↠ L7ê‹.22Ï|Ù5,òîííA0 `ûÎÔtssûÉÐÿþþa`aøwˆŽX,'!üÒØG"ø|ŒýÝáø{yz^#ømü×Üø‘ž{%­)øš§šššQOP:78ø;<ÜÜÜ.!Ñ+Þ ,ÔÔÔ WVV' ô$.¢¢¢ B?@“““ð$.¦¥¥¯®®††† «ª«Ø,µ´´ÿ™åå劉‰¼¼¼ö$.ŽŽŽ0,- !¸¸¸ò$.©¨¨æææÓÓÓççç²±± ÞÞÞÛÛÛø%.rqqÚÚÚèèèâââØØØ  ËËËÀÀÀÖÖÖÆÆÆÐÐÐàààöööúúú÷÷÷éééäääüüüôôôêêêóóóøøøðððòòòûûûîîîõõõùùùëëëïïïñññìììýýýþþþíííí#-ÿÿÿ" å;„z0tRNSù÷öîñܼßk§OfJP( Š"?R`pTNF>;D_40-% ÒUcÈXgIDATxÚìÝßo[åðnÓ¨F¶&i@‘ØÚ²üNÛ¤òßÀ¤I\övâb7H¬Ú‚] \!ÔÝìvB T¤MC•a.ÐÑ’RU'i˜YâÔö9Ô:¶Óø4§IÛuRÇÞûû=¿Ÿ“œhçõÞ'´$© ÞO¾Ïó¾çØ9váhjjêÂôðk ¼þïÀ"MM£À÷áƒ. ßèŸÂ¿4>…¿ùùµ)ú¥/àAáGãÁƒøWDo°àŸ¡¢_—}ÿ"÷ÿ§ÂÀþÇNw[M¡êZ! K~úüÁêL°ó÷޼¦á¬îd ¼úp=`=s¶Kê ~ a]‡àX(ë¾õáÚŸ}þ|ëšBÿ9  ¬TW8ÎúÃå?{®¿|¼o°o°‹ª¯¯o||¼¿X€ ‚®2€éiþÏ÷NôŽ€šìš5:Ú;116Ö È@÷8N8²ltdè4¨S§N=×%uêøï919Ð;168n1Ð%B€¿ÿÏ÷×.³ìQJ<ñãã?}æg'{zN Ÿ€ú°D N Â0 ¿ÿûûN×®²GåR°Å0â? ž™€9tI ;|8@ÿøØäs¦¸e]vV`ñ–j¨ª ô ôŽõQÓÓ¢ 8RŒ÷MœxÑ·¼×?ן(•Jjñø3=Ó½]C çÏÀ0Ö;ò+SÜj·þ‹)(¥UõGÇO(º@@` NŒÿܶ:4²þH@º¤¦1ñsÏ#B 8<4ôM ýÒ¶Ú®¿¢PRñòÇÓ™LZ)ï…}@x¡€Ð;9ô SÔò€@  Èd²ÙÒ¶ñÌÐäÄ k ècÀéLQË_Õ Ë×ÐâæúñgO€6ÐÛÀ´¸ƒÀ¡€u€Ñ§_¨ Zœ‡¢3 m¨@ˆÇ3YMÓ2¹Š† w zGOœ€éZÛ&pýXFe c}b  ÀDïÀÈs¿® Z¦K@Ž®?U6j t]OkåžáÑ ±„`|° ØйŒ£H$€€ÔÉáp6,°€MÀÈ‹¢ð  ¤Z¶dý—ŠKÊš*º€°ŒN Àt  €Áï@Oè`ýAÕ*%Á„`¬»] ¢¸ N€¬>±UÏŠ-à°¦º€«( > —Ji¸þY4ym­¡X€à€±-@&]@äãÕ”.²  fî ÀPQáC€Œ£ÀJ­¦E ìÀ J¨Ð10Z P(VºÀ]@à¼GXüw¾þ ÒUU7$€}ð] ;°u$ –ßÜÒÄ ì€Gî€Nä‹8b‰jNV€Ð€3ø&ˆÅ ¹JFX€÷6à- ž±µ€<+®•uQHž¼nÜ *UÉ­ˆB°#fQöƒËY˜`¾¸Q†›Ã%Hm`tÀ¯À¥vˆ•× H@Í¿!,hæ‹U~Z@@üŽ0~5Ð Û¬ãO '@pàx– JÝ‘Im£D`&@è<ð@œ^ÄÛžÉBÅÌ )@ð×èMÁ6àÈ“˜/W2”!š À ÀôêΠ–åC@pg©ªbKb :D€B7‚ì¶` ”}˜‡=àQ#ž!4D xDÀ°§†‘!÷>$s•t&+ž  m°ßF¦¸p°@€&š `Ÿ ƒ_Œ[‡$(T%|N”I€€t>æ@¯Ú†€;ÉõPF€à÷0HUÙÀ-îdªàtF€Ð)¸ÒЬç–ók5ðç( øˆÇ}!$–p`S`¬^WÀC2M×Âö? ÈÙ¦¾d=€Hš«Šºº7@@€­ ›²Z–<;Ȳ XÎTsŠQRÈC€¿& X7ì(À>æ7P@)-RH. æ¬Âüî`>2…õ­2É “€€/üÆ k@ÉíUS8€¨ püÖ@+ UÝá(ˆ |îÈèÞ ò°¬=nì˜àцÊD=$ÿøV0Îv‚¶! XÝ‚@¨Âd€Ðùº0o–10ëØ )°RÙl. JH¸ç@2²ë|#Ûܨsq. ]¡htA1 &)þÂ4h`À/V· €D\€àà-€¿p J›€{#˜z¸î /EZ€ÐY€3T kI ½[q HDZ€Ð^@»`s »7”&ÀÒÃÕÊ#( !Œ À]¾" Žntœä«•Ê£: J<ªm8†€¬ó$ °ö` x"LH#€ p ±úã "@” |p÷¾´mæ·V©ç$Ñ! À‡~@n )ò4w«V¹Tä3@ð®¤ñFÈÓ ‚¹ÝPÀ*`æRQŸ$€`M€HÇÉ` î>~ðÀ.À ´„Å. tà€ØO8€ìÓÇHÀšU€ZJ“Sábô® J ÔpY2€´¬l$vz`] ‚×%?8€m84ÞÐA@ñ1àÎxjÅ«Ã@GXï| p è(p·]€ÇF1$À# , í`m— pÏZ3@ð#ÀÑH¸§@pOÐS(à¡]@™d@ç À×~€(C4Ðõ „uPx¸Ð ˆÞ øàHdœ °õÔ[@d÷€?¶@Ðgr±Í§XÀ®( í) @õ0Ÿœo<¥É ÀGDM(À‘ÉùZó©X Êx d‡Á: ‚š¾2 2Ï”‚÷¾ÄOþ°$@²ÜÜ_€ŠD癣@ð Þz% VHÀ È¤šD+$€0 Èž#®4; P£”@°Ó`¾ PY$,ŒfS¬ ºTéQ`Èóð“Ñ ¤´ð³`žbe€p !€µÔÌ-Ï )5›þ3 ¯%Ö}rW¾éÕ™£Ÿi °H>”s("ñJR¡ØŽB•¿jµZ—âÛá”M˜¨…Mö‹jÓ‡³œ£ yg€pˆºÕµ>€@ƒéw19 Â|  ð¿MÑ.Pœ+mÇ €oõð4lTÕuCey¥· à@u¹õr¹ü𻣠 £@¼‚ oÕ6à-@8HÅ/•_hÁJ!€”¢ÀåK—\S Úì  âÊ€lÀAj®Õº•ø»¢7Þ4+€RÓ§€É€4Í€%— à¥ûŵ…WZ°fŸm ¸`$@À @g Þ$€Ôï?}÷7/µP%.YdP°m€Òô'`3*Ðu ×>yïßÀWñ£àL€"@Ë€¶?mN\Ïßüç_~À¾¿¸ kرd@›Ÿ8)®Û?|tõý{XÀ×aŸ1‹ä–r”C ¶Ø (€g€î™Bx…2.½µò·/î#ßæýå0.¢WPÿ毥4÷ð°mdÛd€´æZŸ­¼}ÿð‡Ô ORñ i @ð'` ØôÊ€%‡ `åï}²²òñ7-T3G€Þ iÖH5; xì-€\ò +0þéæÝwÈV`öÈ@·ìcåf`e‹|§ S€¬®ßÿëÝ›7ßÂ.C@0p T­wâh4ƒ ¨C9{¸HJ»øÎÊÞ—W_Ã[Ïsa¨18ð¢qÆ>¨¼° HQYt&ä ª—ßÿðæÞÝÏ>½Ç€°˜½3Üþ³ƒŠVþ‚‚5@€ (ñ p ‚Ôì7o¯ìí­@ Õí°ØÀ¶ À?Cvöö¾¾~å·o\¾|ãÆÂ¯Q̓qIO×vª»¼`/X[¯7, yg€ Ò__Ù>Á'‚‹áØ¡ØI맇qpýqÍẅkáÊì|QÏÕTA=@APß6’YÝ3$€õý¯ÞÜÛ»ù¹*ðy*<5 oâ¶“ °Ì`sàÍN`æÖ ¨¹+w úbeuumXR3È ye€à¿nßÿè.ˆ€ï®¾ö Âk}•òBQ4òäÉ/ÏÎòàŠ€ÖwŠF½¾µ¾ºþhÛ4Òm»€໲ÿ±²êî_ü‹ŒáÀ—ƒìGÀò¬-lnY Ìps×ç—ÌíÍ­­z#U‚àÕ$ß«ö 8 ‚Vþ|ïcÀ6.Ç­á¨ö'óW ¶¸aÀ Ì1œÁ­ë±t¹¶½¹mªÚ†-$ÿõFëƒ/÷P¼NÇ€`/ì:€ð\¡ À¸úÀ FÀka9o”w5¥„&ÁÐÇH~«pïãà»ß$c@Hx°ƒòÜÇ6`À ,ÖF`S07[4reSIë Ý)@ðYå¯Þ @Æ€kx ­˜Ü °÷¼´´f€¼( ârRSse# 3 gx”€c€ð_öÎ6&ª,Íãû¡ûÃìδ™ÞÎì‡Ýq7==½íÎt6$;vk«‚/ ´òH'âü bb4(bø¢1Ê¿P‰í†‰Æ7Š)ñÚjñ"PÐRžÆ«£å¬ÔÝçœsï}Î}©ºšbPï¿(ÀâbÛÜÿç9ÏyÎ9‚úò4 ©üßXoÀÃy€õahN(›€€~Dú¦úÂÐ0*•§Â1£š”7 š†û~ÁM ü÷Ƕšˆ;êÑä?Y‘´¶îkFw³ŽÉrþÔ³ÚJØ‹X &pËà^> À,€äÒ>7n"Ú¥º„„1P«í1}ïªåš:Ø*ñÌiªß3´"‹†Q£NΞj’ez™j¨íòÐEËÁ8 t@/P q RmBoê èÖà€R ‰ €½¾?uÅÇÐZµvEä 0PC 6 Fa À¸6 `‹:®ê-€y À @!üƒà `ÀƒûƒWq(à`§f2!ˆò_8˜–D‚@¸0ñÒ¥Ô¾ñ”7±R÷‹ÄÖ`2Ð,€& À< È^†J €\|ké²>ÔÒ€Å@p1é^t†¢|W>‹M¡#[Ö×7ÈGêŽYH rÒa m (ma . Ð<€! 0ÝTÕjf^ &n jÝìô°ç8- }% q?X^_\|müá™(Æ$P³m}€•‚RÀ£ y ¢b æ‹,'hjÄ4‚€@dÑq ÊY€”@Ø4ëIΩoäÊ ›u¼`\€Ô‚ؤ°šPP`ÀSÀ¾!,R A(a¢’HM‡‡—bà`£îk;¼3¼¼GãSÒåF2ijã‡R'dªæ`Ð6LÐ,ÃZ&C ºÅ8P G~ Ÿ¨Xð‚1 QÐpª"êeÁQ_—¬–hØnºx µ¸õÒ±TÖ@8Ít‰¨Z B P=€cAPI x3Šš¨Ü'cÁµ àIS9Åõ:<N'HÉyÖ<0^Ü/·îìΗ©úƒ˜, „‚I0 ¡@x'`¹á( ° à8@d%ñÌèä?T›,åVhºw÷‚¿È}«N¦º¯ˆ%PV- W[ÞP# k@ƒÐ8 èÒ‚›ƒÐDƒµ€Hêg­á(ÿþƒ+¤äKä<×]Ù·ûÀ•S¥,4§SÖAì Sç5†©6öl3ë¼™‘à D1ÿÀ厀ã€lIŠ­ [Ië®<ÖsØ¿?î?„c±$@; @@µñ–Cßtn´Ðõ.Z€ã³Àsöóµ’´²ÊX L-ö© Iq”hHh´€}@xàý7aŒ¼èò‚˜·»Lµ€?v˜3Û–» „PÉ_ø¥|Æë+jQµÀ`·õi%@C@¡C(V€Üþ§4 pˆ ÀY+ÒdÐÆ j4pÈï9»{Hf*3`™ª@w Ђó4DÀF1ìjSdÈ †¡À,À`–£ÏwŸ'I.Z ¼§«^ñùZÉò‘F:8œꔫ¨‰2@1 1éÃ…~äp+æí÷Þ!Àja5å.ö†¤´ŠÜÿêÛÜ0 äÞ“`åY¤{¼4×ã` y÷Ö{à8À œ -až³§¶º¤5ú `< €Nß•Ó%Ò7\ð"(D€z¢è@L@}J$  œºˆØ§#ø •%£œþãwÿ 1À ²JOçã àÛ’RZ£Á:Z˜Mx‹JÖJ®5U$? ,š \¤ {àgºW@Œ†.>6èÌàá¿ýn:DÐw±Oߘà¢óò}³µéR&Iúm@ À ÀPë蔤 ŒÈéx  Ëpõ—ïÒ,Ð œúâ/øuSÁ×K´Èý„3š€<'6»\™[€üàœ `k…´86 AUøÝ ì5FƒŠI!^ Œüòýw~¿„d¯ÏŸ<†¦®“­5Õ_®Š•X;PGP»¦»`Ÿúõ#²r¤tÊ~£L°aÀlRÄn>H³õnãU~ã˜à"í\¬¿óƒ‡(Í_yÆ®—&º£¤ݺÿž@º”N7 ,Àk ZÔÆaoñV—+…Pèž« ܳRN~Ã0Üø‹äIßõ¡ `ÀŒ³Ä«ÿJøè• ïF¡=öðp¾"I"£<½†`GY€í* ªÂÒáދƈ£0 $~µTà¿^eî×ÈÑÙ0\“·h(Y"ËBôº«5Žû‹²2€Ôµ›c½äÑK<™*,ÀSÓ¯–~ Ó³P¥U ‘ ¿*ïI(KÙF¨½¤E ï¨" ¨ºÊ1kÁÉÔ”ÆÂa°Œƒ_enÉÑþrƒ|d(3«ÊxÍ!?ò€&àþØÝ¥º`ÀÞ)c Àï_mz 娪VMÑ ÐoÔ™z, "[€…×µ‘œHE„(@\@1?PøÃ« À÷rtà  ¾~½]›ЂëÈtp€—,¤Úáž«:˜DÐ Ø;æ¿yå辆‰põ5EÕê;xê…—.5_ÉÞ Ñ20@¶Äæïà÷T§öìôs½"wWH™„‘;péï6ÿg¯åCÍ5ö@Œ{d%fˆŠ9À‡¯0£²¢Ä˜1`~žõìF`§Á”*p[·vQgŸ&ÖŸ©X-¹–“¹±ÏòOüMÕ‡mËÝP$‡£è[×=·Ö†z›\¾ÿ 5  ~óÊÐ!3å¼œŽ‚Fãù^ z’¸ÒëÈ4P/Ñ•Š=W>Ë•èl {:’,JÃÚbÜM–jB=jœ©›©S|Þ«p³SÓíÎÛ:=4ò|-h™®OGA}5§1¤ó<É.(þsM4ÄÉâÓJ©¸z†{qE¾C©CáÊn4T¡í°ÀàI· äóþÞÜÁh¨º¯zV½ Aù H+©cÓ³&€`@€10¡hÜRÍ2Óÿ¨€ t0<ÒË ’ºs†h€³CÉ.6lŸFÅ û‡ì€‘ÂJÒöpzö  è! S…Ö⨴ÄC#¡“óÛÄx>vÐéE"œbÜÄEÜ™FåcP=U 5ŒÅL‹`j§JÛT ÞxÁKäba¥n¦…@XóI—¿as0IJ#žþiTgš'bª¸R¢™bóô\ÐxiÖ NÏø?h<ÓɈ†ò¼àVí°Ðߣ_ ”àRRÀ¶iT[‹º“0:E.›.º!€YxôMÖ4hŸw¨¼Ð Ó#6j¸»Ãç1´¯Ø4_Ü3>¨¥bÜ>d÷rV-L1šð`Bh/Í8>à©çÀ«­gûŒÏ°¦y%ºEhÓ4ê‡eÿ TýÑŒLZˆ›˜+lŒÀäáÜBM°œA“€µ®¦îþÎÙ³%¨³û,r;ʧÓqàÁé9€ 0 ‰8€­4O½p°Ô¸»îŒßpWwÀÐEwÈ N£n\jÕœYYÇ& Ú¦E¹o; õv€H¹äâ`RT“ó¨|œÝÁo¬¤:&Q/ °eœëOb]ƒ»&…$¢ž&Ø'$B(RhÐábïVº‰ý8ÉKR@ºÞãÎØ$ ã 8²•5†÷OŠIÐÌzâà ª®ø#Zˆ@™JHä¯m–ÕCuK‡ZÒ¥X n|r¾0ã ƒBÀ€‡†f”6zâ¾tÙxS=­åI$À~“¿¸Ÿtå%I@6M'Ee™ˆKÀÒ-Œn€r0kW*Àæ° XK"@ß$jÏÔ׌ÖJëéÉRxit@xÙÐà`¥‡ñEæ{ê=𗢬÷É™æ/ÖOàé‚™™å˜0wn"³J"ôç<€c]J¸žÊ¹ÔŠà¶€0`ó›tébãy¼˜Ÿ‚åƒ$a¬ùar æ€¸Þx&ܵu0¬»_Xç¾Èn)Né–A›[0Ê{)9YÜ,ßåª\¼zîˆCÐñºðXTç¤Rù©†ÇôtvòçκÊÛ\ÛKSÊ€qAþÛ± `о­Rz#ýKg+4ÌÒ_rû"n¥9Ú8ÔZ÷ýhí*…J‡¾öÏX¤dH׃¸ù¿ðV*v‚wÓ]¤P3¿êP˜$O€Š ¼êÐ×äNµYöuúì×=2§NíðÚ3Á¤Ô¨cŻDzI_àü+Õ} ‡!(ÀÚ7ÞD¦vÙ¯ Ç­K| ¾.RÞ7ª/7"³™\î €$0Þ n'ʶê91ã?àØae¾3˜š—…dÔ%vÚ œh¾¾LäÈö‚óÏn’Qu—­~£½_Ãñ´È ¡拱ƒ˜Ä€()gÂ!½Ö”Š,üßîó^®³Ï¼‡¡ÐåŠ5YzK‘/žY.ˆÑÒ Äô# ¨çk¿'†NZ}¾¬Ø Ì#Ç’4Wô‰×):j„ÿ_€æÇ xUP¯-“‰"÷ÿˆú<úÂ`±âתh„­¡I$hDK‰QFP¶$¼®ŒÜà°ßÃR„€Í„}#Vóy™éQs˜“²À¤7 €›²ÐÀSFF5bNo‘X€ûÇ™åßs›£—Xÿ7<¶Ó›@»ÈÖ/ÇýdowÓn`fÕÃ(°«àá’›I Y´Ônãbz]È—mEw~ðqu@Øì7ܘ®*À_g5¢eX”¦ef4ÊQR©@úÅö~ò]9U+PÕñ|÷Y’Õ( ;‚­ÓÀØ(¦7~äæy÷s( ëçèòtÁZPõ{z’“e€Å @ ©ùø8K?¦ó_èIÆJ ]Öˆ]%¹0…¼ 48€ ü Îj±¹Ç²ËSZi ¸ˆ5Ûó2Óʘ OE¥ {Õ€ž}Ð÷QOŽøSÕhÕ܃g„$¸èZs±.— G E €§¼4žÎNo,Ôïý‡[8$¶GÊè/Àr?èðËœ}®õ‹¶·/ÜV.ÄÕ@VM~¸G¸Ý0„•¬ pˆ"Ís °‡ÜmOq‹]] »µÉ¤Õß 3€µˆ8,> ) ;æ{€[Âtx)-`MEô¸î0†¶õ_¿$s²ž ƾЖtSOPT“#Ê™î8Àbª€´Ä?$Ïñ¨ åxP„q#éHSB¤;Ô`‘åtÇ{< çeñi¡¥ð´ÀuÆ40°£~ÆF¾íµ))yåNˆ6÷ÀÆvÂß·ª„5UêL–,­ñ)tÁŸM‰©˜$­®p`1Àо¤¨bõÚ 1€—óËÕ[‰Å#[ü;¦ÁžaŽ,žP[Çê7¾£¼”Ø µ®o{/!dZÓNYÁTHHÿwìœãó op//Ò¸]^7 =+ìåûnÛÐúXB@^ܧ˜ 0 :¤´:ˆ[rž†Ätc‹ãQØúIàrvà'£ðóNüô€G„oëçëI5à\áX(ôSÜ>¡ïªß#Ž•U@@¢ Ï ÷: ¶þylK ;‡{r ~Þ»Ê`p "ÿùª­«2ˆÇ= …š7ì÷‹Ç}=i,ü"qRŒ€ï˘†öððÍÞ)°ûkYü¸GKìÌ[ý*Vªvþ<õ„OÐ8òÒY=h‹[,¼·Åq€y æÎ/ïѬLºàkK?ü¸ƒ©GmÀ}CcW7’_æþ?‡*7ö GF2›Þrí£ç˜èÁ»z§€Ÿ+ø3ü¼¿üÎØWw“²«¥¡§×>=ë4Ž­™@àÇæóú/ïW°ê›îŒÇÅ_e‘ÒN.³ó¦PÛ»¶pxÌ3Ûÿ±ŠÁ¤¨ƒ¿ÉB#û¬õY¤$XÐn;“„g Ân3Éy`…AÇL0-‡»AÏyÞÒMÄ#B#ûŠ„´Œr À]½û¬O hc Í·t8,<µ'½Æ-]¤Ùÿ\bˆ¨t .×å®'å©H–ý´Ð:)¹®|ã/ @­’àA kè1“u†@W+ø9a±Nu\}A¨7@éC:ãäáøITºWû#5¡¼{H°Žòu: ŸˆÕ@±»y¤'õ{ÞµE7 È¥‡Ï”õÿ<ø‰—ÀO³ÓníÊFr²2b6`›¯ˆê[?Ûš¹œЈûLÛÈWŸL ìÍ»í°Ð`<ꟸ¦ b@wˆŽ±+@x\—’QE,@4ô’­ƒV“̳Ù`¡Àn0ó ,|Á’òûp@'$õiU¸Ó´€¼Eµ)4ótÿÍ&p˜_†vŸõóx´»ñô X:•á¢ÝÞñv»‡AX.8,x‹ô1`­ÄvÜû0DÔ°ç‹…“:¶` ΛÍò2W‘°É  €u¦^”ŒèÝ( ½L-ëâPânzºÜHÏŸffµ+‹¸Îÿ:,xÆ—yOoz€6=Ó$\FI`³ü-ûEó‡}YtEŠ<èðÿìßOWÇÿ¦O¼P@f?W£6l<ßx"÷»™7f/é< 'ÀXN¨^J"Ȥ-§>Ș[Ö³€e9Ý|pZ@¨—5}8kóbA:9@€ÿ€‹Œ–Q-ÑR½û掞QrcwÃ1¬Ïõ£ÅAO>sJ\ƒ€‘ F—ö¬†î²€EÛ =?TœóëãÖ_6áã郚BëÂz~è£á°D¸`y(Æ ¼„Ç= Ìߤ%@ˆ`¹Ó4€XFX¿»[a G9C€÷ƒ¼ \#`*×ÂCã®g™ž^»Âühôöª¦<€ Úd¦ê®î‚ì«Wˆ>Ãab¼SAåw 1cÕ>æƒìg°B´üvä÷ú£[Ç(ptðD˜@³û,cþŠ*í.hñ~¹„ÍC¹I^Æ(p¼>LˆX0 –ØnîÕÖ¢Ôé‡ÂsA8ºNÃÛ¯÷ÞPhµ€zQa+ØTß³¹Áåºù¤¢™g(c.ÐßÓ6Pˆ°¶pÀAñÅïG;GéAG)=*àá#-B`¿¿‹@1¶ðø£+Ã8oÊ>$- ²9º$µÚjÑî>äš Œ†pPGˆr[Sgì×`séú£Ð …c pÍ €mJ)(È ØÃø<5'ô0о>Ã3$Mj\Jþ@ ³lkºrE-òŒ1ßæã@î]-?b–öÑ8 íÙ^Ñ˵*裹 Hë8˜–fH¿.¥ †@—ËïÜâ¨@3bVv@˜€Šù`¶lPôFÑ–Ä3à±c¾‚@AÀ>à õ ^îLÙkôÍ9ÀN~bUÜv¼[I„GB¬Y»“‡\„O» eñMº©àÕŸ¶+î?¥§?+÷ ™<¸`‘ÜôB°1À€‹ž.pÙàkvØ{¹É]j°kMP»§Ä, Ú7_¾ó°;{:kC¦z§$®»€A­ÖàXÚ+ دÔAru±ö‚•r`‹/þ“zX~›èPáÖ‡Bd…|ƒcÇŠÜà¸GˆÛ@Ë‹zhŸ Žœpã¬@\èøöK™ Bư*ŒØÀ+VÅØñn] ÖÂùGõ»ÿY  ˆ=Hwðj»â¼JOVR9À’>&z2+,@iï:[àÆ+€P~¿W~+â@åªZYêÅIÒ€P"OufàLyJ««ð8hw @p òaVÄúäj¼Žî8Màǡç2ïRkñÀÊq·~Gü  n°mלñ(@Ò‡GéýI±ý7ŠD:jµ°]Éô.p§Õœtã>@4¿.Íô" Lj¥ÆÐBÇ!@è€zØÝœY ¶Î è€ä±€úªðJF ðM`‹òïv&$Äð2ÿðœ/£+€Þ¡¼²J7€ñ¦(ö„-ñ2G­TÛðùß¹Oyá .qêÌ:Bú˜1k®Å»¡TpFxU_>!œó rÑ‘Îåø:!¿ @=«0lÞ@>‰£±+) ØLêîóI™qgMÝ…­ˆÂ€p0uÛ ÀXC±¼ŽË/#€p0µyºpTÉDà¬*Æ~”w¾‹õtæðr [€  TDsÀ´ ¾˜zäoÊÓCè*¿!v°Áª8;ÞMÀÛãZ× ûdItP]eö9=|uc»âl¤§w€Ýÿêú 'B P£(Î?OÀ—å'ÆwÕ_ý^WxCv8ý€'Ï" Uç 8-"oéÇz¡ƒÊdИS½I¨ïí.€ã»·Þç. Ü *£À ðZ$H¼Gý¿#oé?ùナ¨€15ØÑI¨§§@ðýŸ¿|ó|›6Tx¯ !@’û‚F$ò¿Ýzóóƒ›@ðZÊ¡ 5Óô-Þñ I)SA@Å?ÛÔLô‹×Ñ_°?ç[ðŸP ¤´k1Ê@X»‚ÎiÞ(×f5H¥w€0«âìxw߀Ú;Ì—ßÜPÈkáíŠNOÀ.Û:d®§ @d/| ð ¤Õð$@Þj å >>Ï¿Cþ@Ö À%  ÿ9{§Ö?ÿ9g€œÔÖeÅêýÿ­U rðM(ÎúÈ@ó^T$ëÂ?ßÈ‚@šr˪@@™îS=@äêGÖ’2ˆË?k€:{U>ø~PžÔB@ä  ©}ËŒäÀ`kЀP>«¤ÎŽl)qÿ¹F-ô€~°LZÐ9*öûø§GfƒÀE—€$|*¤uŽÊûXdeøÆÇª|tˆHÀÓ&°R~­³½C‘Ó;øUæFø=~húHÖ"àoYö13 +[=³A ¸i5L$à»;`±4u¶íªÎ@@J9hL‘o8Ýö/pÓÇ@2ð}ëåWg;G&¦e% K þ}ŠoxbÊé7üÍü´&’€ZòøUÏPÛÔ•[s[¾€¢(Jöð…O^jû`LµÕÔÚÜÀO_„ €Tl\âäÀš_Õ`ÈÙÖ3uãbûà„¡Ñö«#“}ÎÜÝ¡šã'K«óŠÝ.à&ïõp"–SëõÀMž_ ýš|¥i§NÙ«ŠOÔ«Xȳ¹Ÿê×à áõÕùÅk´˜"ª´Õž­^A©­ÙóñÏ,Zòm̯®oè5ZX@^ÿÕ9ó×sÆüj _ààè«Øës±ÿº IåZ¨*j(8s¶¤jloó¿ûKì3cŸnüÆüøèü/úÛèOãíßêk|ú@xê¤Ò‚{Ì]c þx>lh À‹ËÀ¢d‘ß·aKD–àÀÊI³<ƒ«ŸÈY.X’¾}@ä(k`‰.ÿL1@Nð¹U'KÈr€äƒUºN{ü2ÖiÈ5þÇÞÙö¦²d÷þDy‘{•/7yå3Üwór^zìAñSŒ±IâGù™öÆaŒA2 H–ÆŒ1p9B ÃH“n”´D¢Iw4s¢«™#])“'eÎàNý«šZ` {ŸÜ³÷l¶{Ñœ³Ý4®®úõ¿ÖZµªö?­+ µï[¼_¾«I¾|?öW_óŠRí{陵¾ê·:üðýŒÿÿ×׿–ÿs €™Q€ïÓøúíoj0 ðl¼ûÓßµ˜ø]Èÿû±?ÿ©ÀÇ®ÿ-ã=Úgßû €YþîÿÒx¿ö‡ó/©üâóß§á|ï—¡üõŸ}Ûø@ö¿øü_->*þùûßú#ãCÚwÿäs €g øágÆ;ØG˜´øZàÇ¿gü*ì,>þ·ñ+±¿°øH¦€_?°øHà¿i|pC­ ÀGÀ—Ÿã³?ýÀöÙ·b9ËÀìÿ}hû'+ð)ÀÌš€À+à‡_¾j³°Àà5›À+àû¯Ëx¥üÙ ÊîËWm¿?x^?1„Õþà—_¾Zû·¦}þêø©Lßöoýí«´o}ã;²þéÕÀÄϲ¡…å×Àßÿža™~aMƒ àùUðü`X†8èËW ÀóóO¾k¼zûö? [>Ÿo+0Ô“¡~ºãGoäWÝ~¥œ ^ä*]ßü8B»Ý›Ÿð6®;m¡cnì7îwË™‡‹l–ȦWÍ+s‡ÊÅcáa3›à—²•]ÞËÑf=‹íïȯðöû'''ÃCêÝí4ÓíÜÅf¢Ý9ÇÇf®™NE‡Á×wèþȺÇ‘í•LÜ‹F.¼ÑÕøár$ÿ ੃Á¶¤.Ú=KîÛÍñs»õ‹£ƒ»šªµª¥Ëv ½NöÅJ Ôk·ë‡ë/Þüˆ{7uÒN$ÒûúðxÜœ÷îO ™ª6 £jèZâP€æŒU6J-MkµZ:®T]…ôÃû˽³Ì ×rå:™¼®¸¥"Øzåëd©Áî¬wlO/!WŽ{nzÊx%Ã;v3„ÐU±ðÐHkdMcMQU4¥ª+Ù]"źêVžÝH~æð]¸4×FÏ+ûr?§«š«peöMäªr©iºnÀªÊ]ùj…”Ø»ºë–ÏJµ³tÌ>?<þ«õböñº¦ëÉB:uè <<ýŒ¡ædb‹¸âì'•êð•Öi‡¿µ»¬Š+»h’ïXÑuõ>>hG¨›©±Ÿˆ›U-ÓÃmöØ)¸Œ`]þxç*Ãû´NŸÛ‰•’—ÅCÀB|¼‘…Ô@ʱt.³v§«w•žo9ò4ã£Qj‡­_¶ CÏ> ÚcåmÅ ÓŠvÒòz%[8-i†¶ôPìÙniü{Á;]È譥Ç\?%_ÖPVi#¦nWøowWJ­Ñ+ #{Å$àÖ·ÉFC»ìîÏ( S·nãÍ=E§Ûª¬P²hÿZ×õœï‹ÁëÞ=RÙ'ïe“Ý'Š®íUèÅnVÑ_42‰F©ûƒªõÒµ»³ãb'žŸiv/Tâ› @•õü]eu Û/^…à@ÜÜeÕ€éJò¡Ž{`·lüUÙƒ „íãÔº@7ÿŽ`&öЦ’ã­[ÀGC\QZzÃÐ v_2+šã—ßz`¨hûy1$õ3—1lÚZ—³Bfk—ª†rÖ¨T¤{ŠÇ~L äìæ*¨±¦.¥£xêÃc³‘ª&y!~›7u§Ñ£µî ÝÀLpŽnדE›Ù3KÁó©SEô©¢éz ²|T÷Š—¨³iÐË zNÓm¨…³ž«6ÐÓÛéåªwG—ÌÝ Âɪô}y vz¹qVÈñ7ˆ·OšëP€ñ‹Œñ‡9n‡eCü6EQu^­íõG}Ǭú]å|Áœz—–ˆœ#öðܧ±Œ' Xi¤‘[hdÞ_¾ãÈëx6¦ª~ï»e˜¢37YgÂV1 ôjØŠI>^µsˆ 5öŸ¥Š]¸Qíš>Ð\ñÿÕãNÀüÎk!æ™l"‘+èìûƒe€MÓõ ø|,̲¯p T1(¸rÅ®†ì¶èÊ-o…CSñ  ˜~Ê|ïLãC²ö˜ÙÌ^èìÒ.‘­¤­Ø~°!^xç@êíL<·'g¼lä2 WáÑům³PeóNgÿÕñÎ27~h_ëR<Åí.¢Ì'ÛMÍ슫ýÝÃ^¬9+_ì^ ”P¿3üߥŠpËœém;N=_<Â]êu?jºß9þš—Csë+;áü% œiÀÖÚôGø•Û'j¢!+ðxµÃ!³P­flßwxUf”¶ÖºÞQÊ×TwÄ×G´¾ÔS€9 ø þ00ÞHˆÛ%nÔNûûñx<•ÅÑöÌ2Ïv6=bÒ·‰ŽA_7’ÅUá¦6ÐõúAÚ¾“º •kPb>Ÿç÷L”½ôYUxe›‘v 2rÔ´3Õ|:ï㥼7}({¹Á;Í=Öè Ð’¦bgNhŠÊ(ë_ ß2'öTÅ”&cFÒ5CsâLù´¾‘8¿ŽJn]Bqó &“de ðE!$›Y P?m±Î>N„ÞÚëDh\:ûaˆ®u6Ovq1,ºãЭ÷ۚ΂ 32÷ÜW¡¯_˜K4†Dɘ½d¿GGË"[ˆrݨfCÀ¯Â]îa`/µÈ8ÖyÈØuškxyχ³‡ ]øò 3¸Éûàû K/\šŠO&Pš^ÒÙŒ˜¸šã_ƒpDc\Î27Wx•5Œ¹x>Èð~˜@¿œ›.!›mµÇÔ¼QÅàÊÛE¢‡‡’æÚ.:EãÔ>Ûˆ$¼›ú^ ò=Gà§)@.>€ðòÀÞåಋon‹ùr;Ø×ðÉ‚l®³g ó[^.u*|é%â-˜x´k 4JíU@gÜÏ4>­µ.ظ†ý*WSï a†~¡÷ÕV))® ï–«â&taTôh¼·ïqÞH0O:L.[‡·*@ò- Z%ôkð&&´÷vȺ\§nrê‚ ÿ†ï‹±m 4Ñ|ž’>€žL;'_aAfÌš&ýú‘JA÷•€|¼Ýëû­< ŽõÓ\ÿ"î†ЗN¢¦˜ À$ OD8#;À¶øJꈗ.7»ó/Ó@ÌÀŒ{È÷…ÛjãÊÝV5»û$HÀCÜNG§ fÏP´ø—Ì4ÂEj`€›*>`C ßižôSþó[Їt¸Ud°qР Š'ô) à(rHŒ€ä Ú fAbHäôîa«™W»‹ÃˆØ–[ëž‚xç¯ULr¸-d;øÔG 0}•ų À³»ˆW¯ô÷ƒZãÁIHãžÑÀ:ëA©U䌧0<€*%‚ôí—êJ™Àœg:bnøgfOC¿ Ìï€Ñ¡•ŸÁýš ÈXŠþ:\‘"“¨ÐÚôåg€98÷ÇÜ0¬Îí + ™€Fr °1€i—4Óhý®ù΄–rA+fXpo—GF÷£0ä1WåÄ'ܾ9žz£Rž’yê¦Uä¤g€ÛÝœÎݨ\@älF==õº˜ Õsë‹@5Ü5j‘Îéà VOë©Õœçí£eÎÛ-¼¼áäì£@¾\ Ò“ïèàWÏ4ÏÎ>Ÿײ¥W'‰§ |> €Óîü40”¦G €¾%ÆCl0!û&ßàZ;.¼ “àÒ3Jò˜†í<“3ׄ„þ 5²ñŽ>%f[Øe&JxO>"T¢0?Îy&€lÜú[À—hREÐeSÀ(L @o0"”sR1Jbf²á>äù1²ã†Õ}].Y©2C° ,„Š,„ºL4¥ÛïÜ+{U)’ ±ìNSÞÞ) Ûߪ˜±á±Q—Môl&«cp¢8 @`$«S SO·«2ò‡ì ×7ËJ€òb:8bNÜTßIÄKAÌ8ºt³(ÿ%rÝšX¼™–ÏÞ@¤ÇЯOœ€M°ÔuOÀh‡^öf¤¾F¥B%6Ì!]Aðû´Ë^`ª(\Fvþå¡B‘A6sÍšX'J“'ËÓ|€ DxA²:¢äøLçäš0 «ª^Ê}þsõ²é‹Ü°Úq`Ó÷ÅTDyÕ½¿¦â]ç×Dꤱ™òNžÔ³žûi’Hq@xž]ß¡ pË1ǵ‘ÌÉ×7´ pˆÊ‡ý¼9ïD HôyNÀD&0ªÁIä:ô‰2ÖÔ£Š°y¶×hM²¥¦-Ä1(è¦6+ØÚ;ðŽÐJ1´ðy*•-ÛªíÐß+("5E/•cqÛªÛ x#&Bq£a„z!Û²ÛáŒz#a Mâ,O=‡‚.™  àOðçŽ;¨Þ­F Ïdvñ ÷=Ô6P­ _5b– ! ä)(þ,@£v/9K 1ûêrh¿—0«gf/:Q€7DZ´)píUZ¹tŒÃN«eû4ŒÚq¹Ü.göÄò‰&^ dW+•âI·¿N¥"¼Û ÷¸TLwûîjâ›ÎçÑZ‘hË™ .ëú+äßLT:çô<¨îqÀè}u“ d—}OŽ"ÃßLÐ`m$M…6{´DðìÚŠSg€õÔ™2pì#ëÇj•ÿµ‘ª±”èE‡@ŽpRM×4hæF7@ÀtµQ+Ý%—–60Ìh«ìÊöÒZÅF@ü/[øWp+Š4.åšíÅí–ð­¥ê¥B=N#"*Ww\AåÌÀ€´Ì~>ž3ð‰“èpÕñx# X©ÖPµ*îK/ÏtE·°¹Š/ÍÙ) ×ê·j‰”—@N2®™_žVmè­Ze™¦€á+ºëÞ5)@Á"Ïs@©ÆõØ}I®N}¬Ÿ 7‚BYõ(eê§YT@kLsN̲sÔ Ó*¯4Ö’–ph z4¤g¹^¢êÙÓyçQW†j¼K÷Xþ#ÜÓ Ó’eŠÉÈªŠžÃ0SiÁæÊ¤V$HÚu¯Už ó(Jµw(#§lO¸œg1#À¾ ÄÎ~1µhBÿ ðõìsžXÔœäOO [2±ý4ûÈSM8d·çõÜÙZÒPY‹!i‡€'ÏÞ €îÚÎ!Ħ÷Ñ4UÑj{¹¾ïÆ€îÒ¥ºv‘ŽÍ™´PzØëeDV¢×?MÔR•ÌÑRMW4P€fÑ  @„+ýŽhI=VAáStŠI9•ÔH¥¶—8A# â·¶YwÌô¾˜Ì¦ð’¼§âõõºÅòEárÉÐE^˜ r€é¨Û™bÌ;œZ’çc°Üñ9o¤È[ÎrM¿{åi€”¿,4·‡ެ€ÍÅct;û°q]ÒñÊ !êu–¬Á/ 5 ”…•ªøÞqKyŠ•VßÂd‚,™¸ ÷o4Dbã(ÌMÅ^ððËá÷ ÆÄ"ÌÔ5€ê & j¸“ï¨ûpž`›ûØp’'ê À9ûYF]–´+›j-ȯ@46€HçH£4B’þºÝkW7BŒDx[ÞFnnŸâØñC[•çêxv(ž€þf`›ùOxטюu-•J‰­ð;àÝõù¶V¤´.Ù%{»Öུ2¢®¨žg’ ƒ+ĪõçÉc²T;KEƸõQ¤O6#¤0ÊSU0OO Š{993À&V¾ÉÇVÁÀ½v:ԭ꺬{ǘg ]J"õòÃqÓK`™ MÁl}bcÍiZÇW€F.N™=X ðQ\Rªª<¨… Åç†2Î'ªƒ¿ug€©4Ä:$Ü E„83ŠêÄK Σ“àh7ÿó¦Á»Þjß¹îŠòp"NŸ S»¨o‘Ÿ¼3HÛ w‘NøiÉmÃΓk•€NmÑ.Ä4³ Í×å¦0Ý&×3ÿ0ÓTÚ?½‘¯D¡3Pd:Ûç2Á‘ÎJAòûæùw EÕøü€I……[Š#!<ønq°ÔÈ)aèðÉìá6i$Ôz".V÷€å€¹Ï÷‹ØÉp×’5M„îô‘žàÐɧqð©‰N 0÷S!Ä™q°yvp0Ÿªµrœ€Ì•=S€ÎÝŠß‹,N @`1Ž»‘TÄt“À7N@ƒˆ6 ‰ãh™«@ Ee.÷éòÅÆ@£Öˆ;ø!U7ÔÈqó‡Ø;ë!Q¬°ð1’§"{Oˆ˜²µÍáýà ¬ Ð -{ ¹y€ö Œ¿v´‡ÇLî¶$4 \|°tÀ ÁøW®Üö­^1h{Ú¨•wót/9¥#@s¦€ƒ¦Z"Ä™ñ’°ð¾± 5P¤ÓFy ³ŒÎw¡ñ~!2~s›‹ê²Äù-žÒ³x™tø$hzž À k³HŒÉ¿ ŠiŠ¿ž5%b‹UŽàôQ-ÿbƒ£§–ÑI¡“å¨çÐâÌ4o¶r.v‚´CÜÜuƒÕt7?ÅC óÞä1Hx•x|4 õvœþwÀ L6yzºHa¯ì– áœÂ|õºè7C•9_³IƒÞÍ›5ª@ÈЬN€ªÊ¢˜lð¶fÏjæÂ¦³ÀÇ/ˆ|FCÝŒyw"¡^¯¢*ƒPéùwC«Î«%ÔÊÅ!ý>€§áq&MÁ•™Ý'è„>#±³¼²¾;ÙÓ ¡f…žð˸âÆÞËh´ŽÀ“´i| 5rt{Ù&«ÍÎ4xMèV–Be!ø£ÆßJïª×~,™á1ÄSœÐ«'÷‚ljv3}ÍAYë(€ÌÆ5ò#ù ”ýŽ¨Ã½º|î‰ÆMØÒIYl9êdWlìJÈ+eˆXäm"B9¡›½Xê$€ eƒ€Iš¿¡2£ ‰«”²¢ŒÐ±/@fl¨‘"7¨y®nkÓžaÄÞøªH?TBø?,¨’§'!òÝ+œ•”FMŽe~K$ÙtMÓôÒRR—»÷MP*@ëqâ^àì¾X¬´Ûår.q\ôÏ  /úZ¢˜.ò+¹‹v*Ê}yàMY• eýªqúX8Pt™Øú®líуQ1ã-îmP)ì 6ÌFÞóFΛÐ)«¸™‚3 @ ô¨ÐŒÊè—ä:η†5„ÿtYˆ§¿Ó‡6ϘçøÙåZüZ‘çA`´Œí¥ä]©fèºr]ñßH¨ézr{›]©Uuí.‹»ìèä_Ýarïà™2(áׇR}7¨tÕ®O–ÇFEˆ'Þæ©Ê„ëÅ4îIˆïndÛ¿C”mTm‚g†àqšrF…–œ(¨šKñÍdUçŠnw£¦QUÁÃ@RYd!!Åe€†„¦Q5«€û6yE|ˆ%xYbÁ i cpà€B €E=±9ÌUèE„»¨—ʸхƒç›"fô¢Œïïµçˆìê Tùä\ ß{h[*—ËÙ¯€¶$ðsÀ½QEg¯ 4 i åÁ¬ò·N.•Ñn?í.›“²Nï†ý|Q/„ÛËÆ˜ádJqPäØŒÓ"cò ¶ï‡ŠIµf(É“¨ m,WR‡ò¦ïY@Û›o\©ÈËÄ÷Ö±Í-‰ùýcÅh½Ø‡£b'6RN7¦Gç8hgïì0ßÙp1 ž§âï—kÓ ÇŸ<õŒ¡è|·¦ÚRj1Èà·©¨âÑU6CœV¶ÂT‡¥ öà¹y˜ábå rŠ‘‡ “Mn¤cŤÙ³ËÖS‡î¹™N=/Ž¿ßà'ÿ?¾ ‡Ã7·ˆpÆ<æÑtÛ‡·<‰ÝÛ™ç–'׿˜ù‚ˬ¿>Þ2 Ë,,³°ÌÀ2 Ë,,³°ÌÀ2 Ë,,›i~ÇàW Àï|ü¦À‡à7?*~ý·ËàCÙ¯1~ý#à€ßø­ÿaðì?Û/—åFa(ˆn½%»È,c^!âÿÿ¹Ôt f3Ù¢ø¦tŠ=¥>j]ÕÞfàÎ' à«/åG08 0¹ÑvæKùÚÞŽn#À•p ¼˜¼º•åápxV"€-Ë[ul H®¸C¾]f;ßš:¯ª(•¹ªÊë¦õ¼ø „ËÃX>®|P€¡ó—¶1u}¬”ýÉócmšöâ»ð E€í°= x‚ÆÔÊþÄÿ„ü{»Ý2à* h›¶Qv¦Œ?ä €3 0°\öj*àýE‰€÷Œ°¯™c`"Àõýý°ì0ô}§D¡ï‡Áâü3p X ÈÐ`£×o¯X¦ŸekþaøXß¡x Ѐٹ‘(1`ø£ssÈ+€Ç7` (0;0*p`FüÅ¿ü1H:`U`šf%Ó´Å¿å/AT; ”8§¢(&ew°­Ø\Æãòÿ\$\¨ @ P%g¦Žÿš¿ VB ¼¡¸”pkyø·ø™¿ îK˜YàK‰w0}ä/E(€¿á(À¥Ä„Ùóògü‚Ø JTî aúÒøOeG¾G.^å— $Ž 8*@⨉£$Ž 8*@⨉£$Ž 8*@⨉£$Î_$Ngòz¥õIEND®B`‚xscreensaver-5.36/OSX/XScreenSaver.plist000644 000767 000024 00000001652 12774557025 020256 0ustar00jwzstaff000000 000000 CFBundleDevelopmentRegion English CFBundleExecutable ${EXECUTABLE_NAME} CFBundleIdentifier $(PRODUCT_BUNDLE_IDENTIFIER) CFBundleInfoDictionaryVersion 6.0 CFBundleName ${PRODUCT_NAME} CFBundlePackageType BNDL CFBundleShortVersionString 5.36 CFBundleSignature ???? CFBundleVersion 5.36 LSMinimumSystemVersion 10.8 NSMainNibFile SaverRunner NSPrincipalClass XScreenSaver${EXECUTABLE_NAME}View xscreensaver-5.36/OSX/XScreenSaverConfigSheet.h000644 000767 000024 00000005125 12426073271 021456 0ustar00jwzstaff000000 000000 /* xscreensaver, Copyright (c) 2006-2013 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. */ /* XScreenSaver uses XML files to describe the user interface for configuring the various screen savers. These files live in .../hacks/config/ and say relatively high level things like: "there should be a checkbox labelled "Leave Trails", and when it is checked, add the option '-trails' to the command line when launching the program." This code reads that XML and constructs a Cocoa interface from it. The Cocoa controls are hooked up to NSUserDefaultsController to save those settings into the MacOS preferences system. The Cocoa preferences names are the same as the resource names specified in the screenhack's 'options' array (we use that array to map the command line switches specified in the XML to the resource names to use). */ #ifdef USE_IPHONE # import # import # define NSView UIView # define NSUserDefaultsController NSUserDefaults #else # import #endif #import "jwxyz.h" #import #undef USE_PICKER_VIEW @interface XScreenSaverConfigSheet : # ifdef USE_IPHONE UITableViewController # else NSWindow # endif { NSString *saver_name; NSUserDefaultsController *userDefaultsController; NSUserDefaultsController *globalDefaultsController; NSDictionary *defaultOptions; const XrmOptionDescRec *opts; id xml_root, xml_parsing; # ifdef USE_IPHONE UITextField *active_text_field; NSMutableArray *controls; NSMutableArray *pref_ctls; // UIControl objects, with index = c.tag NSMutableArray *pref_keys; // ...and their corresponding resources # ifdef USE_PICKER_VIEW NSMutableArray *picker_values; # endif # endif } - (id)initWithXML: (NSData *) xml_data options: (const XrmOptionDescRec *) opts controller: (NSUserDefaultsController *) prefs globalController: (NSUserDefaultsController *) globalPrefs defaults: (NSDictionary *) defs; @end xscreensaver-5.36/OSX/XScreenSaverConfigSheet.m000664 000767 000024 00000325627 12753474113 021504 0ustar00jwzstaff000000 000000 /* xscreensaver, Copyright (c) 2006-2016 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. */ /* XScreenSaver uses XML files to describe the user interface for configuring the various screen savers. These files live in .../hacks/config/ and say relatively high level things like: "there should be a checkbox labelled "Leave Trails", and when it is checked, add the option '-trails' to the command line when launching the program." This code reads that XML and constructs a Cocoa interface from it. The Cocoa controls are hooked up to NSUserDefaultsController to save those settings into the MacOS preferences system. The Cocoa preferences names are the same as the resource names specified in the screenhack's 'options' array (we use that array to map the command line switches specified in the XML to the resource names to use). */ #import "XScreenSaverConfigSheet.h" #import "Updater.h" #import "jwxyz.h" #import "InvertedSlider.h" #ifdef USE_IPHONE # define NSView UIView # define NSRect CGRect # define NSSize CGSize # define NSTextField UITextField # define NSButton UIButton # define NSFont UIFont # define NSStepper UIStepper # define NSMenuItem UIMenuItem # define NSText UILabel # define minValue minimumValue # define maxValue maximumValue # define setMinValue setMinimumValue # define setMaxValue setMaximumValue # define LABEL UILabel #else # define LABEL NSTextField #endif // USE_IPHONE #undef LABEL_ABOVE_SLIDER #define USE_HTML_LABELS #pragma mark XML Parser /* I used to use the "NSXMLDocument" XML parser, but that doesn't exist on iOS. The "NSXMLParser" parser exists on both OSX and iOS, so I converted to use that. However, to avoid having to re-write all of the old code, I faked out a halfassed implementation of the "NSXMLNode" class that "NSXMLDocument" used to return. */ #define NSXMLNode SimpleXMLNode #define NSXMLElement SimpleXMLNode #define NSXMLCommentKind SimpleXMLCommentKind #define NSXMLElementKind SimpleXMLElementKind #define NSXMLAttributeKind SimpleXMLAttributeKind #define NSXMLTextKind SimpleXMLTextKind typedef enum { SimpleXMLCommentKind, SimpleXMLElementKind, SimpleXMLAttributeKind, SimpleXMLTextKind, } SimpleXMLKind; @interface SimpleXMLNode : NSObject { SimpleXMLKind kind; NSString *name; SimpleXMLNode *parent; NSMutableArray *children; NSMutableArray *attributes; id object; } @property(nonatomic) SimpleXMLKind kind; @property(nonatomic, retain) NSString *name; @property(nonatomic, retain) SimpleXMLNode *parent; @property(nonatomic, retain) NSMutableArray *children; @property(nonatomic, retain) NSMutableArray *attributes; @property(nonatomic, retain, getter=objectValue, setter=setObjectValue:) id object; @end @implementation SimpleXMLNode @synthesize kind; @synthesize name; //@synthesize parent; @synthesize children; @synthesize attributes; @synthesize object; - (id) init { self = [super init]; attributes = [NSMutableArray arrayWithCapacity:10]; return self; } - (id) initWithName:(NSString *)n { self = [self init]; [self setKind:NSXMLElementKind]; [self setName:n]; return self; } - (void) setAttributesAsDictionary:(NSDictionary *)dict { for (NSString *key in dict) { NSObject *val = [dict objectForKey:key]; SimpleXMLNode *n = [[SimpleXMLNode alloc] init]; [n setKind:SimpleXMLAttributeKind]; [n setName:key]; [n setObjectValue:val]; [attributes addObject:n]; [n release]; } } - (SimpleXMLNode *) parent { return parent; } - (void) setParent:(SimpleXMLNode *)p { NSAssert (!parent, @"parent already set"); if (!p) return; parent = p; NSMutableArray *kids = [p children]; if (!kids) { kids = [NSMutableArray arrayWithCapacity:10]; [p setChildren:kids]; } [kids addObject:self]; } @end #pragma mark textMode value transformer // A value transformer for mapping "url" to "3" and vice versa in the // "textMode" preference, since NSMatrix uses NSInteger selectedIndex. #ifndef USE_IPHONE @interface TextModeTransformer: NSValueTransformer {} @end @implementation TextModeTransformer + (Class)transformedValueClass { return [NSString class]; } + (BOOL)allowsReverseTransformation { return YES; } - (id)transformedValue:(id)value { if ([value isKindOfClass:[NSString class]]) { int i = -1; if ([value isEqualToString:@"date"]) { i = 0; } else if ([value isEqualToString:@"literal"]) { i = 1; } else if ([value isEqualToString:@"file"]) { i = 2; } else if ([value isEqualToString:@"url"]) { i = 3; } else if ([value isEqualToString:@"program"]) { i = 4; } if (i != -1) value = [NSNumber numberWithInt: i]; } return value; } - (id)reverseTransformedValue:(id)value { if ([value isKindOfClass:[NSNumber class]]) { switch ((int) [value doubleValue]) { case 0: value = @"date"; break; case 1: value = @"literal"; break; case 2: value = @"file"; break; case 3: value = @"url"; break; case 4: value = @"program"; break; } } return value; } @end #endif // USE_IPHONE #pragma mark Implementing radio buttons /* The UIPickerView is a hideous and uncustomizable piece of shit. I can't believe Apple actually released that thing on the world. Let's fake up some radio buttons instead. */ #if defined(USE_IPHONE) && !defined(USE_PICKER_VIEW) @interface RadioButton : UILabel { int index; NSArray *items; } @property(nonatomic) int index; @property(nonatomic, retain) NSArray *items; @end @implementation RadioButton @synthesize index; @synthesize items; - (id) initWithIndex:(int)_index items:_items { self = [super initWithFrame:CGRectZero]; index = _index; items = [_items retain]; [self setText: [[items objectAtIndex:index] objectAtIndex:0]]; [self setBackgroundColor:[UIColor clearColor]]; [self sizeToFit]; return self; } @end # 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 = UIViewAutoresizingNone; // we do it manually webView.autoresizingMask = UIViewAutoresizingNone; webView.scrollView.scrollEnabled = NO; webView.scrollView.bounces = NO; webView.opaque = NO; [webView setBackgroundColor:[UIColor clearColor]]; [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 stopLoading]; [webView loadHTMLString:h2 baseURL:[NSURL URLWithString:@""]]; } static char *anchorize (const char *url); - (void) setText: (NSString *)t { t = [t stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceCharacterSet]]; 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]; } h = [h stringByReplacingOccurrencesOfString:@"

" withString:@"

"]; h = [h stringByReplacingOccurrencesOfString:@"

" withString:@"

"]; h = [h stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]]; [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]; } - (NSString *) stripTags:(NSString *)str { NSString *result = @""; // Add newlines. str = [str stringByReplacingOccurrencesOfString:@"

" withString:@"

" options:NSCaseInsensitiveSearch range:NSMakeRange(0, [str length])]; str = [str stringByReplacingOccurrencesOfString:@"
" withString:@"\n" options:NSCaseInsensitiveSearch range:NSMakeRange(0, [str length])]; // Remove HREFs. 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]; } // Compress internal horizontal whitespace. str = result; result = @""; for (NSString *s in [str componentsSeparatedByCharactersInSet: [NSCharacterSet whitespaceCharacterSet]]) { if ([result length] == 0) result = s; else if ([s length] > 0) result = [NSString stringWithFormat: @"%@ %@", result, 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 since UIWebView is asynchronous, we'd have to wait for the document to load first, e.g.: - Start the document loading; - return a default height to use for the UITableViewCell; - wait for the webViewDidFinishLoad delegate method to fire; - then force the UITableView to reload, to pick up the new height. But I couldn't make that work. */ # 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:NSLineBreakByWordWrapping]; 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) - (void)traverseChildren:(NSXMLNode *)node on:(NSView *)parent; # ifndef USE_IPHONE - (void) placeChild: (NSView *)c on:(NSView *)p right:(BOOL)r; - (void) placeChild: (NSView *)c on:(NSView *)p; static NSView *last_child (NSView *parent); static void layout_group (NSView *group, BOOL horiz_p); # else // USE_IPHONE - (void) placeChild: (NSObject *)c on:(NSView *)p right:(BOOL)r; - (void) placeChild: (NSObject *)c on:(NSView *)p; - (void) placeSeparator; - (void) bindResource:(NSObject *)ctl key:(NSString *)k reload:(BOOL)r; - (void) refreshTableView; # endif // USE_IPHONE @end @implementation XScreenSaverConfigSheet # define LEFT_MARGIN 20 // left edge of window # define COLUMN_SPACING 10 // gap between e.g. labels and text fields # define LEFT_LABEL_WIDTH 70 // width of all left labels # define LINE_SPACING 10 // leading between each line # define FONT_SIZE 17 // Magic hardcoded UITableView font size. #pragma mark Talking to the resource database /* Normally we read resources by looking up "KEY" in the database "org.jwz.xscreensaver.SAVERNAME". But in the all-in-one iPhone app, everything is stored in the database "org.jwz.xscreensaver" instead, so transform keys to "SAVERNAME.KEY". NOTE: This is duplicated in PrefsReader.m, cause I suck. */ - (NSString *) makeKey:(NSString *)key { # ifdef USE_IPHONE NSString *prefix = [saver_name stringByAppendingString:@"."]; if (! [key hasPrefix:prefix]) // Don't double up! key = [prefix stringByAppendingString:key]; # endif return key; } - (NSString *) makeCKey:(const char *)key { return [self makeKey:[NSString stringWithCString:key encoding:NSUTF8StringEncoding]]; } /* Given a command-line option, returns the corresponding resource name. Any arguments in the switch string are ignored (e.g., "-foo x"). */ - (NSString *) switchToResource:(NSString *)cmdline_switch opts:(const XrmOptionDescRec *)opts_array valRet:(NSString **)val_ret { char buf[1280]; char *tail = 0; NSAssert(cmdline_switch, @"cmdline switch is null"); if (! [cmdline_switch getCString:buf maxLength:sizeof(buf) encoding:NSUTF8StringEncoding]) { NSAssert1(0, @"unable to convert %@", cmdline_switch); return 0; } char *s = strpbrk(buf, " \t\r\n"); if (s && *s) { *s = 0; tail = s+1; while (*tail && (*tail == ' ' || *tail == '\t')) tail++; } while (opts_array[0].option) { if (!strcmp (opts_array[0].option, buf)) { const char *ret = 0; if (opts_array[0].argKind == XrmoptionNoArg) { if (tail && *tail) NSAssert1 (0, @"expected no args to switch: \"%@\"", cmdline_switch); ret = opts_array[0].value; } else { if (!tail || !*tail) NSAssert1 (0, @"expected args to switch: \"%@\"", cmdline_switch); ret = tail; } if (val_ret) *val_ret = (ret ? [NSString stringWithCString:ret encoding:NSUTF8StringEncoding] : 0); const char *res = opts_array[0].specifier; while (*res && (*res == '.' || *res == '*')) res++; return [self makeCKey:res]; } opts_array++; } NSAssert1 (0, @"\"%@\" not present in options", cmdline_switch); return 0; } - (NSUserDefaultsController *)controllerForKey:(NSString *)key { static NSDictionary *a = 0; if (! a) { a = UPDATER_DEFAULTS; [a retain]; } if ([a objectForKey:key]) // These preferences are global to all xscreensavers. return globalDefaultsController; else // All other preferences are per-saver. return userDefaultsController; } #ifdef USE_IPHONE // Called when a slider is bonked. // - (void)sliderAction:(UISlider*)sender { if ([active_text_field canResignFirstResponder]) [active_text_field resignFirstResponder]; NSString *pref_key = [pref_keys objectAtIndex: [sender tag]]; // Hacky API. See comment in InvertedSlider.m. double v = ([sender isKindOfClass: [InvertedSlider class]] ? [(InvertedSlider *) sender transformedValue] : [sender value]); [[self controllerForKey:pref_key] setObject:((v == (int) v) ? [NSNumber numberWithInt:(int) v] : [NSNumber numberWithDouble: v]) forKey:pref_key]; } // Called when a checkbox/switch is bonked. // - (void)switchAction:(UISwitch*)sender { if ([active_text_field canResignFirstResponder]) [active_text_field resignFirstResponder]; NSString *pref_key = [pref_keys objectAtIndex: [sender tag]]; NSString *v = ([sender isOn] ? @"true" : @"false"); [[self controllerForKey:pref_key] setObject:v forKey:pref_key]; } # ifdef USE_PICKER_VIEW // Called when a picker is bonked. // - (void)pickerView:(UIPickerView *)pv didSelectRow:(NSInteger)row inComponent:(NSInteger)column { if ([active_text_field canResignFirstResponder]) [active_text_field resignFirstResponder]; NSAssert (column == 0, @"internal error"); NSArray *a = [picker_values objectAtIndex: [pv tag]]; if (! a) return; // Too early? a = [a objectAtIndex:row]; NSAssert (a, @"missing row"); //NSString *label = [a objectAtIndex:0]; NSString *pref_key = [a objectAtIndex:1]; NSObject *pref_val = [a objectAtIndex:2]; [[self controllerForKey:pref_key] setObject:pref_val forKey:pref_key]; } # else // !USE_PICKER_VIEW // Called when a RadioButton is bonked. // - (void)radioAction:(RadioButton*)sender { if ([active_text_field canResignFirstResponder]) [active_text_field resignFirstResponder]; NSArray *item = [[sender items] objectAtIndex: [sender index]]; NSString *pref_key = [item objectAtIndex:1]; NSObject *pref_val = [item objectAtIndex:2]; [[self controllerForKey:pref_key] setObject:pref_val forKey:pref_key]; } - (BOOL)textFieldShouldBeginEditing:(UITextField *)tf { active_text_field = tf; return YES; } - (void)textFieldDidEndEditing:(UITextField *)tf { NSString *pref_key = [pref_keys objectAtIndex: [tf tag]]; NSString *txt = [tf text]; [[self controllerForKey:pref_key] setObject:txt forKey:pref_key]; } - (BOOL)textFieldShouldReturn:(UITextField *)tf { active_text_field = nil; [tf resignFirstResponder]; return YES; } # endif // !USE_PICKER_VIEW #endif // USE_IPHONE # ifndef USE_IPHONE - (void) okAction:(NSObject *)arg { // Without the setAppliesImmediately:, when the saver restarts, it's still // got the old settings. -[XScreenSaverConfigSheet traverseTree] sets this // to NO; default is YES. // #### However: I'm told that when these are set to YES, then changes to // 'textLiteral', 'textURL' and 'textProgram' are ignored, but 'textFile' // works. In StarWars, at least... [userDefaultsController setAppliesImmediately:YES]; [globalDefaultsController setAppliesImmediately:YES]; [userDefaultsController commitEditing]; [globalDefaultsController commitEditing]; [userDefaultsController save:self]; [globalDefaultsController save:self]; [NSApp endSheet:self returnCode:NSOKButton]; [self close]; } - (void) cancelAction:(NSObject *)arg { [userDefaultsController revert:self]; [globalDefaultsController revert:self]; [NSApp endSheet:self returnCode:NSCancelButton]; [self close]; } # endif // !USE_IPHONE - (void) resetAction:(NSObject *)arg { # ifndef USE_IPHONE [userDefaultsController revertToInitialValues:self]; [globalDefaultsController revertToInitialValues:self]; # else // USE_IPHONE for (NSString *key in defaultOptions) { NSObject *val = [defaultOptions objectForKey:key]; [[self controllerForKey:key] setObject:val forKey:key]; } for (UIControl *ctl in pref_ctls) { NSString *pref_key = [pref_keys objectAtIndex: ctl.tag]; [self bindResource:ctl key:pref_key reload:YES]; } [self refreshTableView]; # endif // USE_IPHONE } /* Connects a control (checkbox, etc) to the corresponding preferences key. */ - (void) bindResource:(NSObject *)control key:(NSString *)pref_key reload:(BOOL)reload_p { NSUserDefaultsController *prefs = [self controllerForKey:pref_key]; # ifndef USE_IPHONE NSDictionary *opts_dict = nil; NSString *bindto = ([control isKindOfClass:[NSPopUpButton class]] ? @"selectedObject" : ([control isKindOfClass:[NSMatrix class]] ? @"selectedIndex" : @"value")); if ([control isKindOfClass:[NSMatrix class]]) { opts_dict = @{ NSValueTransformerNameBindingOption: @"TextModeTransformer" }; } [control bind:bindto toObject:prefs withKeyPath:[@"values." stringByAppendingString: pref_key] options:opts_dict]; # else // USE_IPHONE SEL sel; NSObject *val = [prefs objectForKey:pref_key]; NSString *sval = 0; double dval = 0; if ([val isKindOfClass:[NSString class]]) { sval = (NSString *) val; if (NSOrderedSame == [sval caseInsensitiveCompare:@"true"] || NSOrderedSame == [sval caseInsensitiveCompare:@"yes"] || NSOrderedSame == [sval caseInsensitiveCompare:@"1"]) dval = 1; else dval = [sval doubleValue]; } else if ([val isKindOfClass:[NSNumber class]]) { // NSBoolean (__NSCFBoolean) is really NSNumber. dval = [(NSNumber *) val doubleValue]; sval = [(NSNumber *) val stringValue]; } if ([control isKindOfClass:[UISlider class]]) { sel = @selector(sliderAction:); // Hacky API. See comment in InvertedSlider.m. if ([control isKindOfClass:[InvertedSlider class]]) [(InvertedSlider *) control setTransformedValue: dval]; else [(UISlider *) control setValue: dval]; } else if ([control isKindOfClass:[UISwitch class]]) { sel = @selector(switchAction:); [(UISwitch *) control setOn: ((int) dval != 0)]; # ifdef USE_PICKER_VIEW } else if ([control isKindOfClass:[UIPickerView class]]) { sel = 0; [(UIPickerView *) control selectRow:((int)dval) inComponent:0 animated:NO]; # else // !USE_PICKER_VIEW } else if ([control isKindOfClass:[RadioButton class]]) { sel = 0; // radioAction: sent from didSelectRowAtIndexPath. } else if ([control isKindOfClass:[UITextField class]]) { sel = 0; // #### [(UITextField *) control setText: sval]; # endif // !USE_PICKER_VIEW } else { NSAssert (0, @"unknown class"); } // NSLog(@"\"%@\" = \"%@\" [%@, %.1f]", pref_key, val, [val class], dval); if (!reload_p) { if (! pref_keys) { pref_keys = [[NSMutableArray arrayWithCapacity:10] retain]; pref_ctls = [[NSMutableArray arrayWithCapacity:10] retain]; } [pref_keys addObject: [self makeKey:pref_key]]; [pref_ctls addObject: control]; ((UIControl *) control).tag = [pref_keys count] - 1; if (sel) { [(UIControl *) control addTarget:self action:sel forControlEvents:UIControlEventValueChanged]; } } # endif // USE_IPHONE # if 0 NSObject *def = [[prefs defaults] objectForKey:pref_key]; NSString *s = [NSString stringWithFormat:@"bind: \"%@\"", pref_key]; s = [s stringByPaddingToLength:18 withString:@" " startingAtIndex:0]; s = [NSString stringWithFormat:@"%@ = %@", s, ([def isKindOfClass:[NSString class]] ? [NSString stringWithFormat:@"\"%@\"", def] : def)]; s = [s stringByPaddingToLength:30 withString:@" " startingAtIndex:0]; s = [NSString stringWithFormat:@"%@ %@ / %@", s, [def class], [control class]]; # ifndef USE_IPHONE s = [NSString stringWithFormat:@"%@ / %@", s, bindto]; # endif NSLog (@"%@", s); # endif } - (void) bindResource:(NSObject *)control key:(NSString *)pref_key { [self bindResource:(NSObject *)control key:(NSString *)pref_key reload:NO]; } - (void) bindSwitch:(NSObject *)control cmdline:(NSString *)cmd { [self bindResource:control key:[self switchToResource:cmd opts:opts valRet:0]]; } #pragma mark Text-manipulating utilities static NSString * unwrap (NSString *text) { // Unwrap lines: delete \n but do not delete \n\n. // NSArray *lines = [text componentsSeparatedByString:@"\n"]; NSUInteger i, nlines = [lines count]; BOOL eolp = YES; text = @"\n"; // start with one blank line // skip trailing blank lines in file for (i = nlines-1; i > 0; i--) { NSString *s = (NSString *) [lines objectAtIndex:i]; if ([s length] > 0) break; nlines--; } // skip leading blank lines in file for (i = 0; i < nlines; i++) { NSString *s = (NSString *) [lines objectAtIndex:i]; if ([s length] > 0) break; } // unwrap Bool any = NO; for (; i < nlines; i++) { NSString *s = (NSString *) [lines objectAtIndex:i]; if ([s length] == 0) { text = [text stringByAppendingString:@"\n\n"]; eolp = YES; } else if ([s characterAtIndex:0] == ' ' || [s hasPrefix:@"Copyright "] || [s hasPrefix:@"http://"]) { // don't unwrap if the following line begins with whitespace, // or with the word "Copyright", or if it begins with a URL. if (any && !eolp) text = [text stringByAppendingString:@"\n"]; text = [text stringByAppendingString:s]; any = YES; eolp = NO; } else { if (!eolp) text = [text stringByAppendingString:@" "]; text = [text stringByAppendingString:s]; eolp = NO; any = YES; } } return text; } # ifndef USE_IPHONE /* Makes the text up to the first comma be bold. */ static void boldify (NSText *nstext) { NSString *text = [nstext string]; NSRange r = [text rangeOfString:@"," options:0]; r.length = r.location+1; r.location = 0; NSFont *font = [nstext font]; font = [NSFont boldSystemFontOfSize:[font pointSize]]; [nstext setFont:font range:r]; } # endif // !USE_IPHONE /* Creates a human-readable anchor to put on a URL. */ static char * anchorize (const char *url) { const char *wiki = "http://en.wikipedia.org/wiki/"; const char *math = "http://mathworld.wolfram.com/"; if (!strncmp (wiki, url, strlen(wiki))) { char *anchor = (char *) malloc (strlen(url) * 3 + 10); strcpy (anchor, "Wikipedia: \""); const char *in = url + strlen(wiki); char *out = anchor + strlen(anchor); while (*in) { if (*in == '_') { *out++ = ' '; } else if (*in == '#') { *out++ = ':'; *out++ = ' '; } else if (*in == '%') { char hex[3]; hex[0] = in[1]; hex[1] = in[2]; hex[2] = 0; int n = 0; sscanf (hex, "%x", &n); *out++ = (char) n; in += 2; } else { *out++ = *in; } in++; } *out++ = '"'; *out = 0; return anchor; } else if (!strncmp (math, url, strlen(math))) { char *anchor = (char *) malloc (strlen(url) * 3 + 10); strcpy (anchor, "MathWorld: \""); const char *start = url + strlen(wiki); const char *in = start; char *out = anchor + strlen(anchor); while (*in) { if (*in == '_') { *out++ = ' '; } else if (in != start && *in >= 'A' && *in <= 'Z') { *out++ = ' '; *out++ = *in; } else if (!strncmp (in, ".htm", 4)) { break; } else { *out++ = *in; } in++; } *out++ = '"'; *out = 0; return anchor; } else { return strdup (url); } } #if !defined(USE_IPHONE) || !defined(USE_HTML_LABELS) /* Converts any http: URLs in the given text field to clickable links. */ static void hreffify (NSText *nstext) { # ifndef USE_IPHONE NSString *text = [nstext string]; [nstext setRichText:YES]; # else NSString *text = [nstext text]; # endif int L = [text length]; NSRange start; // range is start-of-search to end-of-string start.location = 0; start.length = L; while (start.location < L) { // Find the beginning of a URL... // NSRange r2 = [text rangeOfString:@"http://" options:0 range:start]; if (r2.location == NSNotFound) break; // Next time around, start searching after this. start.location = r2.location + r2.length; start.length = L - start.location; // Find the end of a URL (whitespace or EOF)... // NSRange r3 = [text rangeOfCharacterFromSet: [NSCharacterSet whitespaceAndNewlineCharacterSet] options:0 range:start]; if (r3.location == NSNotFound) // EOF r3.location = L, r3.length = 0; // Next time around, start searching after this. start.location = r3.location; start.length = L - start.location; // Set r2 to the start/length of this URL. r2.length = start.location - r2.location; // Extract the URL. NSString *nsurl = [text substringWithRange:r2]; const char *url = [nsurl UTF8String]; // If this is a Wikipedia URL, make the linked text be prettier. // char *anchor = anchorize(url); # ifndef USE_IPHONE // Construct the RTF corresponding to anchor // const char *fmt = "{\\field{\\*\\fldinst{HYPERLINK \"%s\"}}%s}"; char *rtf = malloc (strlen (fmt) + strlen(url) + strlen(anchor) + 10); sprintf (rtf, fmt, url, anchor); NSData *rtfdata = [NSData dataWithBytesNoCopy:rtf length:strlen(rtf)]; [nstext replaceCharactersInRange:r2 withRTF:rtfdata]; # else // !USE_IPHONE // *anchor = 0; // Omit Wikipedia anchor text = [text stringByReplacingCharactersInRange:r2 withString:[NSString stringWithCString:anchor encoding:NSUTF8StringEncoding]]; // text = [text stringByReplacingOccurrencesOfString:@"\n\n\n" // withString:@"\n\n"]; # endif // !USE_IPHONE free (anchor); int L2 = [text length]; // might have changed start.location -= (L - L2); L = L2; } # ifdef USE_IPHONE [nstext setText:text]; [nstext sizeToFit]; # endif } #endif /* !USE_IPHONE || !USE_HTML_LABELS */ #pragma mark Creating controls from XML /* Parse the attributes of an XML tag into a dictionary. For input, the dictionary should have as attributes the keys, each with @"" as their value. On output, the dictionary will set the keys to the values specified, and keys that were not specified will not be present in the dictionary. Warnings are printed if there are duplicate or unknown attributes. */ - (void) parseAttrs:(NSMutableDictionary *)dict node:(NSXMLNode *)node { NSArray *attrs = [(NSXMLElement *) node attributes]; NSUInteger n = [attrs count]; int i; // For each key in the dictionary, fill in the dict with the corresponding // value. The value @"" is assumed to mean "un-set". Issue a warning if // an attribute is specified twice. // for (i = 0; i < n; i++) { NSXMLNode *attr = [attrs objectAtIndex:i]; NSString *key = [attr name]; NSString *val = [attr objectValue]; NSString *old = [dict objectForKey:key]; if (! old) { NSAssert2 (0, @"unknown attribute \"%@\" in \"%@\"", key, [node name]); } else if ([old length] != 0) { NSAssert3 (0, @"duplicate %@: \"%@\", \"%@\"", key, old, val); } else { [dict setValue:val forKey:key]; } } // Remove from the dictionary any keys whose value is still @"", // meaning there was no such attribute specified. // NSArray *keys = [dict allKeys]; n = [keys count]; for (i = 0; i < n; i++) { NSString *key = [keys objectAtIndex:i]; NSString *val = [dict objectForKey:key]; 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 } /* Handle the options on the top level tag. */ - (NSString *) parseXScreenSaverTag:(NSXMLNode *)node { NSMutableDictionary *dict = [@{ @"name": @"", @"_label": @"", @"gl": @"" } mutableCopy]; [self parseAttrs:dict node:node]; NSString *name = [dict objectForKey:@"name"]; NSString *label = [dict objectForKey:@"_label"]; [dict release]; dict = 0; NSAssert1 (label, @"no _label in %@", [node name]); NSAssert1 (name, @"no name in \"%@\"", label); return label; } /* Creates a label: an un-editable NSTextField displaying the given text. */ - (LABEL *) makeLabel:(NSString *)text { NSRect rect; rect.origin.x = rect.origin.y = 0; rect.size.width = rect.size.height = 10; # ifndef USE_IPHONE NSTextField *lab = [[NSTextField alloc] initWithFrame:rect]; [lab setSelectable:NO]; [lab setEditable:NO]; [lab setBezeled:NO]; [lab setDrawsBackground:NO]; [lab setStringValue:text]; [lab sizeToFit]; # else // USE_IPHONE UILabel *lab = [[UILabel alloc] initWithFrame:rect]; [lab setText: [text stringByTrimmingCharactersInSet: [NSCharacterSet whitespaceAndNewlineCharacterSet]]]; [lab setBackgroundColor:[UIColor clearColor]]; [lab setNumberOfLines:0]; // unlimited // [lab setLineBreakMode:UILineBreakModeWordWrap]; [lab setLineBreakMode:NSLineBreakByTruncatingHead]; [lab setAutoresizingMask: (UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight)]; # endif // USE_IPHONE [lab autorelease]; return lab; } /* Creates the checkbox (NSButton) described by the given XML node. */ - (void) makeCheckbox:(NSXMLNode *)node on:(NSView *)parent { NSMutableDictionary *dict = [@{ @"id": @"", @"_label": @"", @"arg-set": @"", @"arg-unset": @"" } mutableCopy]; [self parseAttrs:dict node:node]; NSString *label = [dict objectForKey:@"_label"]; NSString *arg_set = [dict objectForKey:@"arg-set"]; NSString *arg_unset = [dict objectForKey:@"arg-unset"]; [dict release]; dict = 0; if (!label) { NSAssert1 (0, @"no _label in %@", [node name]); return; } if (!arg_set && !arg_unset) { NSAssert1 (0, @"neither arg-set nor arg-unset provided in \"%@\"", label); } if (arg_set && arg_unset) { NSAssert1 (0, @"only one of arg-set and arg-unset may be used in \"%@\"", label); } // sanity-check the choice of argument names. // if (arg_set && ([arg_set hasPrefix:@"-no-"] || [arg_set hasPrefix:@"--no-"])) NSLog (@"arg-set should not be a \"no\" option in \"%@\": %@", label, arg_set); if (arg_unset && (![arg_unset hasPrefix:@"-no-"] && ![arg_unset hasPrefix:@"--no-"])) NSLog(@"arg-unset should be a \"no\" option in \"%@\": %@", label, arg_unset); NSRect rect; rect.origin.x = rect.origin.y = 0; rect.size.width = rect.size.height = 10; # ifndef USE_IPHONE NSButton *button = [[NSButton alloc] initWithFrame:rect]; [button setButtonType:NSSwitchButton]; [button setTitle:label]; [button sizeToFit]; [self placeChild:button on:parent]; # else // USE_IPHONE LABEL *lab = [self makeLabel:label]; [self placeChild:lab on:parent]; UISwitch *button = [[UISwitch alloc] initWithFrame:rect]; [self placeChild:button on:parent right:YES]; # endif // USE_IPHONE [self bindSwitch:button cmdline:(arg_set ? arg_set : arg_unset)]; [button release]; } /* Creates the number selection control described by the given XML node. If "type=slider", it's an NSSlider. If "type=spinbutton", it's a text field with up/down arrows next to it. */ - (void) makeNumberSelector:(NSXMLNode *)node on:(NSView *)parent { NSMutableDictionary *dict = [@{ @"id": @"", @"_label": @"", @"_low-label": @"", @"_high-label": @"", @"type": @"", @"arg": @"", @"low": @"", @"high": @"", @"default": @"", @"convert": @"" } mutableCopy]; [self parseAttrs:dict node:node]; NSString *label = [dict objectForKey:@"_label"]; NSString *low_label = [dict objectForKey:@"_low-label"]; NSString *high_label = [dict objectForKey:@"_high-label"]; NSString *type = [dict objectForKey:@"type"]; NSString *arg = [dict objectForKey:@"arg"]; NSString *low = [dict objectForKey:@"low"]; NSString *high = [dict objectForKey:@"high"]; NSString *def = [dict objectForKey:@"default"]; NSString *cvt = [dict objectForKey:@"convert"]; [dict release]; dict = 0; NSAssert1 (arg, @"no arg in %@", label); NSAssert1 (type, @"no type in %@", label); if (! low) { NSAssert1 (0, @"no low in %@", [node name]); return; } if (! high) { NSAssert1 (0, @"no high in %@", [node name]); return; } if (! def) { NSAssert1 (0, @"no default in %@", [node name]); return; } if (cvt && ![cvt isEqualToString:@"invert"]) { NSAssert1 (0, @"if provided, \"convert\" must be \"invert\" in %@", label); } // If either the min or max field contains a decimal point, then this // option may have a floating point value; otherwise, it is constrained // to be an integer. // NSCharacterSet *dot = [NSCharacterSet characterSetWithCharactersInString:@"."]; BOOL float_p = ([low rangeOfCharacterFromSet:dot].location != NSNotFound || [high rangeOfCharacterFromSet:dot].location != NSNotFound); if ([type isEqualToString:@"slider"] # ifdef USE_IPHONE // On iPhone, we use sliders for all numeric values. || [type isEqualToString:@"spinbutton"] # endif ) { NSRect rect; rect.origin.x = rect.origin.y = 0; rect.size.width = 150; rect.size.height = 23; // apparent min height for slider with ticks... NSSlider *slider; slider = [[InvertedSlider alloc] initWithFrame:rect inverted: !!cvt integers: !float_p]; [slider setMaxValue:[high doubleValue]]; [slider setMinValue:[low doubleValue]]; int range = [slider maxValue] - [slider minValue] + 1; int range2 = range; int max_ticks = 21; while (range2 > max_ticks) range2 /= 10; # ifndef USE_IPHONE // If we have elided ticks, leave it at the max number of ticks. if (range != range2 && range2 < max_ticks) range2 = max_ticks; // If it's a float, always display the max number of ticks. if (float_p && range2 < max_ticks) range2 = max_ticks; [slider setNumberOfTickMarks:range2]; [slider setAllowsTickMarkValuesOnly: (range == range2 && // we are showing the actual number of ticks !float_p)]; // and we want integer results # endif // !USE_IPHONE // #### Note: when the slider's range is large enough that we aren't // showing all possible ticks, the slider's value is not constrained // to be an integer, even though it should be... // Maybe we need to use a value converter or something? LABEL *lab; if (label) { lab = [self makeLabel:label]; [self placeChild:lab on:parent]; # ifdef USE_IPHONE if (low_label) { CGFloat s = [NSFont systemFontSize] + 4; [lab setFont:[NSFont boldSystemFontOfSize:s]]; } # endif } if (low_label) { lab = [self makeLabel:low_label]; [lab setFont:[NSFont systemFontOfSize:[NSFont smallSystemFontSize]]]; # ifndef USE_IPHONE [lab setAlignment:1]; // right aligned rect = [lab frame]; if (rect.size.width < LEFT_LABEL_WIDTH) rect.size.width = LEFT_LABEL_WIDTH; // make all left labels same size rect.size.height = [slider frame].size.height; [lab setFrame:rect]; [self placeChild:lab on:parent]; # else // USE_IPHONE [lab setTextAlignment: NSTextAlignmentRight]; // Sometimes rotation screws up truncation. [lab setLineBreakMode:NSLineBreakByClipping]; [self placeChild:lab on:parent right:(label ? YES : NO)]; # endif // USE_IPHONE } # ifndef USE_IPHONE [self placeChild:slider on:parent right:(low_label ? YES : NO)]; # else // USE_IPHONE [self placeChild:slider on:parent right:(label || low_label ? YES : NO)]; # endif // USE_IPHONE if (low_label) { // Make left label be same height as slider. rect = [lab frame]; rect.size.height = [slider frame].size.height; [lab setFrame:rect]; } if (! low_label) { rect = [slider frame]; if (rect.origin.x < LEFT_LABEL_WIDTH) rect.origin.x = LEFT_LABEL_WIDTH; // make unlabelled sliders line up too [slider setFrame:rect]; } if (high_label) { lab = [self makeLabel:high_label]; [lab setFont:[NSFont systemFontOfSize:[NSFont smallSystemFontSize]]]; rect = [lab frame]; // Make right label be same height as slider. rect.size.height = [slider frame].size.height; [lab setFrame:rect]; # ifdef USE_IPHONE // Sometimes rotation screws up truncation. [lab setLineBreakMode:NSLineBreakByClipping]; # endif [self placeChild:lab on:parent right:YES]; } [self bindSwitch:slider cmdline:arg]; [slider release]; #ifndef USE_IPHONE // On iPhone, we use sliders for all numeric values. } else if ([type isEqualToString:@"spinbutton"]) { if (! label) { NSAssert1 (0, @"no _label in spinbutton %@", [node name]); return; } NSAssert1 (!low_label, @"low-label not allowed in spinbutton \"%@\"", [node name]); NSAssert1 (!high_label, @"high-label not allowed in spinbutton \"%@\"", [node name]); NSAssert1 (!cvt, @"convert not allowed in spinbutton \"%@\"", [node name]); NSRect rect; rect.origin.x = rect.origin.y = 0; rect.size.width = rect.size.height = 10; NSTextField *txt = [[NSTextField alloc] initWithFrame:rect]; [txt setStringValue:@"0000.0"]; [txt sizeToFit]; [txt setStringValue:@""]; if (label) { LABEL *lab = [self makeLabel:label]; //[lab setFont:[NSFont systemFontOfSize:[NSFont smallSystemFontSize]]]; [lab setAlignment:1]; // right aligned rect = [lab frame]; if (rect.size.width < LEFT_LABEL_WIDTH) rect.size.width = LEFT_LABEL_WIDTH; // make all left labels same size rect.size.height = [txt frame].size.height; [lab setFrame:rect]; [self placeChild:lab on:parent]; } [self placeChild:txt on:parent right:(label ? YES : NO)]; if (! label) { rect = [txt frame]; if (rect.origin.x < LEFT_LABEL_WIDTH) rect.origin.x = LEFT_LABEL_WIDTH; // make unlabelled spinbtns line up [txt setFrame:rect]; } rect.size.width = rect.size.height = 10; NSStepper *step = [[NSStepper alloc] initWithFrame:rect]; [step sizeToFit]; [self placeChild:step on:parent right:YES]; rect = [step frame]; rect.origin.x -= COLUMN_SPACING; // this one goes close rect.origin.y += ([txt frame].size.height - rect.size.height) / 2; [step setFrame:rect]; [step setMinValue:[low doubleValue]]; [step setMaxValue:[high doubleValue]]; [step setAutorepeat:YES]; [step setValueWraps:NO]; double range = [high doubleValue] - [low doubleValue]; if (range < 1.0) [step setIncrement:range / 10.0]; else if (range >= 500) [step setIncrement:range / 100.0]; else [step setIncrement:1.0]; NSNumberFormatter *fmt = [[[NSNumberFormatter alloc] init] autorelease]; [fmt setFormatterBehavior:NSNumberFormatterBehavior10_4]; [fmt setNumberStyle:NSNumberFormatterDecimalStyle]; [fmt setMinimum:[NSNumber numberWithDouble:[low doubleValue]]]; [fmt setMaximum:[NSNumber numberWithDouble:[high doubleValue]]]; [fmt setMinimumFractionDigits: (float_p ? 1 : 0)]; [fmt setMaximumFractionDigits: (float_p ? 2 : 0)]; [fmt setGeneratesDecimalNumbers:float_p]; [[txt cell] setFormatter:fmt]; [self bindSwitch:step cmdline:arg]; [self bindSwitch:txt cmdline:arg]; [step release]; [txt release]; # endif // USE_IPHONE } else { NSAssert2 (0, @"unknown type \"%@\" in \"%@\"", type, label); } } # ifndef USE_IPHONE static void set_menu_item_object (NSMenuItem *item, NSObject *obj) { /* If the object associated with this menu item looks like a boolean, store an NSNumber instead of an NSString, since that's what will be in the preferences (due to similar logic in PrefsReader). */ if ([obj isKindOfClass:[NSString class]]) { NSString *string = (NSString *) obj; if (NSOrderedSame == [string caseInsensitiveCompare:@"true"] || NSOrderedSame == [string caseInsensitiveCompare:@"yes"]) obj = [NSNumber numberWithBool:YES]; else if (NSOrderedSame == [string caseInsensitiveCompare:@"false"] || NSOrderedSame == [string caseInsensitiveCompare:@"no"]) obj = [NSNumber numberWithBool:NO]; else obj = string; } [item setRepresentedObject:obj]; //NSLog (@"menu item \"%@\" = \"%@\" %@", [item title], obj, [obj class]); } # endif // !USE_IPHONE /* Creates the popup menu described by the given XML node (and its children). */ - (void) makeOptionMenu:(NSXMLNode *)node on:(NSView *)parent { NSArray *children = [node children]; NSUInteger i, count = [children count]; if (count <= 0) { NSAssert1 (0, @"no menu items in \"%@\"", [node name]); return; } // get the "id" attribute off the //

*/ //
NSRect rect; rect.size.width = rect.size.height = 1; rect.origin.x = rect.origin.y = 0; NSView *group = [[NSView alloc] initWithFrame:rect]; NSXMLElement *node2; // node2 = [[NSXMLElement alloc] initWithName:@"boolean"]; [node2 setAttributesAsDictionary: @{ @"id": @SUSUEnableAutomaticChecksKey, @"_label": @"Automatically check for updates", @"arg-unset": @"-no-" SUSUEnableAutomaticChecksKey, }]; [self makeCheckbox:node2 on:group]; [node2 release]; //
<_description> A fully-functional VT100 terminal emulator simulating an old terminal, with large pixels and long-sustain phosphor. Written by Jamie Zawinski; 1999. xscreensaver-5.36/OSX/seticon.pl000775 000767 000024 00000005474 12777052362 016642 0ustar00jwzstaff000000 000000 #!/usr/bin/perl -w # Copyright © 2015-2016 Dave Odell # # 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 is a replacement for seticon from http://osxutils.sourceforge.net/. require 5; use diagnostics; use strict; #use IPC::Open2; use File::Temp; my $progname = $0; $progname =~ s@.*/@@g; my ($version) = ('$Revision: 1.5 $' =~ m/\s(\d[.\d]+)\s/s); my $verbose = 0; sub set_icon ($$) { my ($icon, $target) = @_; my $target_res = $target; if (-d $target) { $target_res = $target_res . "/Icon\r"; } # Rez hates absolute paths, apparently. if ($icon =~ m@^/@s) { my $cwd = `pwd`; chomp $cwd; $icon =~ s@^\Q$cwd/@@s; } # The Rez language is documented in "Building and Managing Programs in MPW, # Second Edition". No longer available on Apple's servers, it can now be # found at: # http://www.powerpc.hu/manila/static/home/Apple/developer/Tool_Chest/Core_Mac_OS_Tools/MPW_etc./Documentation/MPW_Reference/Building_Progs_In_MPW.sit.hqx my $pgm = "Read 'icns' (kCustomIconResource) \"$icon\";\n"; # Rez can read from stdin, but only if it is a file handle, not if it # is a pipe (OS X 10.9, Xcode 5; OSX 10.11, Xcode 6). my ($rez_fh, $rez_filename) = File::Temp::tempfile(DIR => '.', UNLINK => 1); print $rez_fh $pgm; close $rez_fh; my @cmd = ('Rez', 'CoreServices.r', $rez_filename, '-o', $target_res); print STDERR "$progname: exec: " . join(' ', @cmd) . "\n$pgm\n" if ($verbose); # my ($in, $out); # my $pid = open2 ($out, $in, @cmd); # print $in $pgm; # close ($in); # waitpid ($pid, 0); system (@cmd); my $exit = $? >> 8; exit ($exit) if $exit; # Have to also inform Finder that the icon is there, with the # com.apple.FinderInfo xattr (a FolderInfo struct). @cmd = ('SetFile', '-a', 'C', $target); system (@cmd); $exit = $? >> 8; exit ($exit) if $exit; } sub usage() { print "Usage: $progname -d source [file...]\n"; exit 1; } sub main() { my ($src, @dst); while ($#ARGV >= 0) { $_ = shift @ARGV; if (m/^--?verbose$/s) { $verbose++; } elsif (m/^-v+$/s) { $verbose += length($_)-1; } elsif (m/^-d$/s) { $src = shift @ARGV; } elsif (m/^-/s) { usage(); } else { push @dst, $_; } } error ("no source") unless defined($src); error ("no files") unless @dst; foreach my $f (@dst) { set_icon ($src, $f); } } main(); exit 0; xscreensaver-5.36/OSX/sign_update.rb000775 000767 000024 00000000334 12245010235 017435 0ustar00jwzstaff000000 000000 #!/usr/bin/ruby if ARGV.length < 2 puts "Usage: ruby sign_update.rb update_archive private_key" exit end puts `openssl dgst -sha1 -binary < "#{ARGV[0]}" | openssl dgst -dss1 -sign "#{ARGV[1]}" | openssl enc -base64`xscreensaver-5.36/OSX/sparkle_dsa_pub.pem000664 000767 000024 00000002232 12244301450 020444 0ustar00jwzstaff000000 000000 -----BEGIN PUBLIC KEY----- MIIDOzCCAi4GByqGSM44BAEwggIhAoIBAQDekjUm7Fk/mm887ldKk4qfLq1lb3Wg Num4oLRJBJlGcKzKKA0jP4J9BgXZvuOs3FEzpwPK+P6LajWkBhG2kaxNSwwOlQjp dAqeMeV8EZxKiu5+msudl6QHOuIk+fwpDlB007KPI+JAxnrrmkI7nlLDv2EBVAJw 78rSlcI6co3AiXHEe5H2J0LsZe6pi3U4FeCJXu7vr1+yNn5Gw8MX9hXl1EjOkN9e gCbDEZrX2UPSUWpiIfZwpjAXnit2MV045niww6/jz5nz58Y/ZMbuLQW205B2gzPB XUVH50tMhbKPnU51aRyWcDWVIYMeqryjKqsy/IjDZC5zwdUbDA66ZwuXAhUAywjB FIUjBpzyPldDNeVwq/uG9eECggEBAMMDXX0R6Hib2MR3icbJVsIEPZ9EUli6e8F6 htypUNNTwaNbkz0v74ruyrJ9cPtWGFgU5gCS5uTKmeIA15i+clxGFy6kqWyAxrAT h0ehuo572Htdayh9Z7N3UGVpNG+ryYfaxWhYl0sgd/vvsptZpBbmQe+F1/BR9/C0 J3J4CsAv3Ut0dzWjap4dGefSMYXUX+BikfsLaSeqSR07r5jvNsT2L4av1RnZagSl zzq3Tx6fepfgPHdf1A5/cnbzNz+Uf98YxlYXylqpbGBL1wmhseiHNxJCKSsCrHz1 UWJqj31WHD6trQoGN9/1y74w0Y9sveHK8RApEoKitTTcL3Dn/ZYDggEFAAKCAQAU ofRd/dLgvCmA9gzyagc1TSYGoIjuNOpagqs6KpzhPAH+dA6/zlWy+iA/5rA6tm5Y JOOrmTudXcBu9Y2NJDJIzD0WphkigUs0YTml257X7+74DSuIWH1d70hhPwhkuMeM 6AjnEHGcmlXRPbeMT0+ALlBW8GEmJBagazSXUXRXkyj+902zeliwdOBPAZWUwEdj QEqlYCJWwPhQe2cHWwVPnNHtp+66pEJs+lVeqM/IMxcJZhHevoF8T0M02WtIOgAc 5/oGrdV092cN0aRGlI1bCmEqm6yrP+KIpQHSNhmugkkZzpJ/Ei50446AxuE0VHL1 5UZ8A9+VkPn0AsbuMPU5 -----END PUBLIC KEY----- xscreensaver-5.36/OSX/textclient-ios.m000664 000767 000024 00000010016 12721510340 017733 0ustar00jwzstaff000000 000000 /* xscreensaver, Copyright (c) 2012-2016 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. * * Loading URLs and returning the underlying text. * * This is necessary because iOS doesn't have Perl installed, so we can't * run "xscreensaver-text" to do this. */ #include "utils.h" #ifdef USE_IPHONE // whole file #include "textclient.h" char * textclient_mobile_date_string (void) { UIDevice *dd = [UIDevice currentDevice]; NSString *name = [dd name]; // My iPhone NSString *model = [dd model]; // iPad // NSString *system = [dd systemName]; // iPhone OS NSString *vers = [dd systemVersion]; // 5.0 NSString *date = [NSDateFormatter localizedStringFromDate:[NSDate date] dateStyle: NSDateFormatterMediumStyle timeStyle: NSDateFormatterMediumStyle]; NSString *nl = @"\n"; NSString *result = name; result = [result stringByAppendingString: nl]; result = [result stringByAppendingString: model]; // result = [result stringByAppendingString: nl]; // result = [result stringByAppendingString: system]; result = [result stringByAppendingString: @" "]; result = [result stringByAppendingString: vers]; result = [result stringByAppendingString: nl]; result = [result stringByAppendingString: nl]; result = [result stringByAppendingString: date]; result = [result stringByAppendingString: nl]; result = [result stringByAppendingString: nl]; return strdup ([result cStringUsingEncoding:NSISOLatin1StringEncoding]); } @interface TextLoader : NSObject @property (nonatomic, retain) NSURL *url; @property (nonatomic, retain) NSString *result; @end @implementation TextLoader { NSURL *_url; NSString *_result; } + (TextLoader *) sharedLoader { static TextLoader *singleton = nil; @synchronized(self) { if (!singleton) singleton = [[self alloc] init]; } return singleton; } - (void) startLoading { // NSLog(@"textclient thread loading %@", self.url); self.result = [NSString stringWithContentsOfURL: self.url encoding: NSUTF8StringEncoding error: nil]; // NSLog(@"textclient thread finished %@ (length %d)", self.url, // (unsigned int) [self.result length]); } @end /* Returns the contents of the URL. Loads the URL in a background thread: if the URL has not yet loaded, this will return NULL. Once the URL has completely loaded, the full contents will be returned. Calling this again after that starts the URL loading again. */ char * textclient_mobile_url_string (Display *dpy, const char *url) { TextLoader *loader = [TextLoader sharedLoader]; NSString *result = [loader result]; // Since this is a singleton, it's possible that if hack #1 starts // URL #1 loading and then quickly exits, and then hack #2 asks for // URL #2, it might get URL #1 instead. Oh well, who cares. if (result) { // Thread finished // NSLog(@"textclient finished %s (length %d)", url, // (unsigned int) [result length]); char *s = strdup ([result cStringUsingEncoding:NSUTF8StringEncoding]); loader.url = nil; loader.result = nil; return s; } else if ([loader url]) { // Waiting on thread // NSLog(@"textclient waiting..."); return 0; } else { // Launch thread // NSLog(@"textclient launching %s...", url); loader.url = [NSURL URLWithString: [NSString stringWithCString: url encoding:NSISOLatin1StringEncoding]]; [NSThread detachNewThreadSelector: @selector(startLoading) toTarget: loader withObject: nil]; return 0; } } #endif // USE_IPHONE -- whole file xscreensaver-5.36/OSX/update-info-plist.pl000775 000767 000024 00000035714 12775535114 020541 0ustar00jwzstaff000000 000000 #!/usr/bin/perl -w # Copyright © 2006-2016 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. # # Updates the NAME.xml file of a .saver bundle to include the current year, # version number, etc. Also updates the Info.plist file to include the # short documentation, authors, etc. in the Finder "Get Info" properties. # # This is invoked by a final "Shell Script" build action on each of the # .saver targets in the XCode project. # # Created: 8-Mar-2006. require 5; #use diagnostics; # Fails on some MacOS 10.5 systems use strict; use IPC::Open3; use IO::Uncompress::Gunzip qw(gunzip $GunzipError); use IO::Compress::Gzip qw(gzip $GzipError); my ($exec_dir, $progname) = ($0 =~ m@^(.*?)/([^/]+)$@); my ($version) = ('$Revision: 1.46 $' =~ m/\s(\d[.\d]+)\s/s); $ENV{PATH} = "/usr/local/bin:$ENV{PATH}"; # for seticon $ENV{PATH} = "/opt/local/bin:$ENV{PATH}"; # for macports wget my $thumbdir = 'build/screenshots'; my $verbose = 1; sub convert_plist($$) { my ($data, $to_binary_p) = @_; my $is_binary_p = ($data =~ m/^bplist/s); if ($data && (!$is_binary_p) != (!$to_binary_p)) { print STDERR "$progname: converting plist\n" if ($verbose > 2); my $which = ($to_binary_p ? 'binary1' : 'xml1'); my @cmd = ('plutil', '-convert', $which, '-s', '-o', '-', '-'); my $pid = open3 (my $in, my $out, undef, @cmd) || error ("pipe: $cmd[0]: $!"); error ("$cmd[0]: $!") unless $pid; print $in $data; close $in; local $/ = undef; # read entire file $data = <$out>; close $out; waitpid ($pid, 0); if ($?) { my $exit_value = $? >> 8; my $signal_num = $? & 127; my $dumped_core = $? & 128; error ("$cmd[0]: core dumped!") if ($dumped_core); error ("$cmd[0]: signal $signal_num!") if ($signal_num); error ("$cmd[0]: exited with $exit_value!") if ($exit_value); } } return $data; } sub read_info_plist($) { my ($app_dir) = @_; my $file = "$app_dir/Contents/Info.plist"; my $file2 = "$app_dir/Info.plist"; $file =~ s@/+@/@g; my $in; if (open ($in, '<', $file)) { } elsif (open ($in, '<', $file2)) { $file = $file2; } else { error ("$file: $!"); } print STDERR "$progname: read $file\n" if ($verbose > 2); local $/ = undef; # read entire file my $body = <$in>; close $in; $body = convert_plist ($body, 0); # convert to xml plist return ($file, $body); } sub read_saver_xml($) { my ($app_dir) = @_; error ("$app_dir: no name") unless ($app_dir =~ m@/([^/.]+).(app|saver)/?$@x); my $name = $1; return () if ($name eq 'XScreenSaver'); return () if ($name eq 'SaverTester'); return () if ($name eq 'XScreenSaverUpdater'); my $file = "$app_dir/Contents/Resources/" . lc($name) . ".xml"; my $file2 = "$app_dir/" . lc($name) . ".xml"; my $file3 = "$app_dir/Contents/PlugIns/$name.saver/Contents/Resources/" . lc($name) . ".xml"; $file =~ s@/+@/@g; my $in; if (open ($in, '<', $file)) { } elsif (open ($in, '<', $file2)) { $file = $file2; } elsif (open ($in, '<', $file3)) { $file = $file3; } else { error ("$file: $!"); } print STDERR "$progname: read $file\n" if ($verbose > 2); local $/ = undef; # read entire file my $body = <$in>; close $in; # Uncompress the XML if it is compressed. my $body2 = ''; gunzip (\$body, \$body2) || error ("$app_dir: xml gunzip: $GunzipError"); my $was_compressed_p = ($body ne $body2); return ($file, $body2, $was_compressed_p); } # This is duplicated in hacks/check-configs.pl for Android # sub munge_blurb($$$$) { my ($filename, $name, $vers, $desc) = @_; $desc =~ s/^([ \t]*\n)+//s; $desc =~ s/\s*$//s; # in case it's done already... $desc =~ s@@@gs; $desc =~ s/^.* version \d[^\n]*\n//s; $desc =~ s/^From the XScreenSaver.*\n//m; $desc =~ s@^https://www\.jwz\.org/xscreensaver.*\n@@m; $desc =~ s/\nCopyright [^ \r\n\t]+ (\d{4})(-\d{4})? (.*)\.$/\nWritten $3; $1./s; $desc =~ s/^\n+//s; error ("$filename: description contains markup: $1") if ($desc =~ m/([<>&][^<>&\s]*)/s); error ("$filename: description contains ctl chars: $1") if ($desc =~ m/([\000-\010\013-\037])/s); error ("$filename: can't extract authors") unless ($desc =~ m@^(.*)\nWritten by[ \t]+(.+)$@s); $desc = $1; my $authors = $2; $desc =~ s/\s*$//s; my $year = undef; if ($authors =~ m@^(.*?)\s*[,;]\s+(\d\d\d\d)([-\s,;]+\d\d\d\d)*[.]?$@s) { $authors = $1; $year = $2; } error ("$filename: can't extract year") unless $year; my $cyear = 1900 + ((localtime())[5]); $year = "$cyear" unless $year; if ($year && ! ($year =~ m/$cyear/)) { $year = "$year-$cyear"; } $authors =~ s/[.,;\s]+$//s; # List me as a co-author on all of them, since I'm the one who # did the OSX port, packaged it up, and built the executables. # my $curator = "Jamie Zawinski"; if (! ($authors =~ m/$curator/si)) { if ($authors =~ m@^(.*?),? and (.*)$@s) { $authors = "$1, $2, and $curator"; } else { $authors .= " and $curator"; } } my $desc1 = ("$name, version $vers.\n\n" . # savername.xml $desc . "\n" . "\n" . "From the XScreenSaver collection: " . "https://www.jwz.org/xscreensaver/\n" . "Copyright \302\251 $year by $authors.\n"); my $desc2 = ("$name $vers,\n" . # Info.plist "\302\251 $year $authors.\n" . "From the XScreenSaver collection:\n" . "https://www.jwz.org/xscreensaver/\n" . "\n" . $desc . "\n"); # unwrap lines, but only when it's obviously ok: leave blank lines, # and don't unwrap if that would compress leading whitespace on a line. # $desc2 =~ s/^(From |https?:)/\n$1/gm; 1 while ($desc2 =~ s/([^\s])[ \t]*\n([^\s])/$1 $2/gs); $desc2 =~ s/\n\n(From |https?:)/\n$1/gs; return ($desc1, $desc2); } sub update_saver_xml($$) { my ($app_dir, $vers) = @_; my ($filename, $body, $was_compressed_p) = read_saver_xml ($app_dir); my $obody = $body; return () unless defined ($filename); $body =~ m@]*?[ \t]_label=\"([^\"]+)\"@m || error ("$filename: no name label"); my $name = $1; $body =~ m@<_description>(.*?)@s || error ("$filename: no description tag"); my $desc = $1; error ("$filename: description contains non-ASCII and is not UTF-8: $1") if ($body !~ m/\Q)(.*?)()@$1$desc1$3@s; # NSXMLParser doesn't seem to work properly on Latin1 XML documents, # so we convert these to UTF8 when embedding them in the .saver bundle. $body =~ s@encoding="ISO-8859-1"@encoding="UTF-8"@gsi; if ($obody eq $body && $was_compressed_p) { print STDERR "$progname: $filename: unchanged\n" if ($verbose > 1); } else { # Gzip the XML. my $body2 = ''; gzip (\$body, \$body2) || error ("$app_dir: xml gzip: $GzipError"); $body = $body2; my $file_tmp = "$filename.tmp"; open (my $out, '>:raw', $file_tmp) || error ("$file_tmp: $!"); print $out $body || error ("$file_tmp: $!"); close $out || error ("$file_tmp: $!"); if (!rename ("$file_tmp", "$filename")) { unlink "$file_tmp"; error ("mv \"$file_tmp\" \"$filename\": $!"); } print STDERR "$progname: wrote $filename\n" if ($verbose); } return ($desc1, $desc2); } sub compress_all_xml_files($) { my ($dir) = @_; opendir (my $dirp, $dir) || error ("$dir: $!"); my @files = readdir ($dirp); closedir $dirp; foreach my $f (sort @files) { next unless ($f =~ m/\.xml$/si); my $filename = "$dir/$f"; open (my $in, '<', $filename) || error ("$filename: $!"); print STDERR "$progname: read $filename\n" if ($verbose > 2); local $/ = undef; # read entire file my $body = <$in>; close $in; if ($body =~ m/^<\?xml/s) { my $body2 = ''; gzip (\$body, \$body2) || error ("$filename: xml gzip: $GzipError"); $body = $body2; my $file_tmp = "$filename.tmp"; open (my $out, '>:raw', $file_tmp) || error ("$file_tmp: $!"); print $out $body || error ("$file_tmp: $!"); close $out || error ("$file_tmp: $!"); if (!rename ("$file_tmp", "$filename")) { unlink "$file_tmp"; error ("mv \"$file_tmp\" \"$filename\": $!"); } print STDERR "$progname: compressed $filename\n" if ($verbose); } elsif ($verbose > 2) { print STDERR "$filename: already compressed\n"; } } } sub set_plist_key($$$$) { my ($filename, $body, $key, $val) = @_; if ($body =~ m@^(.* \n\t$key \n\t)([^<>]*)( .*)$@xs) { # print STDERR "$progname: $filename: $key was: $2\n" if ($verbose); $body = $1 . $val . $3; } else { error ("$filename: unparsable") unless ($body =~ m@^(.*)(\n\n\n)$@s); $body = ($1 . "\n\t$key" . "\n\t$val" . $2); } return $body; } sub set_icon($) { my ($app_dir) = @_; $app_dir =~ s@/+$@@s; my $icon = ($app_dir =~ m/\.saver$/ ? 'XScreenSaver' : 'SaverRunner'); $icon = "$app_dir/../../../$icon.icns"; my @cmd = ("$app_dir/../../../seticon.pl", "-d", $icon, $app_dir); print STDERR "$progname: exec: " . join(' ', @cmd) . "\n" if ($verbose > 1); system (@cmd); } sub set_thumb($) { my ($app_dir) = @_; return unless ($app_dir =~ m@\.saver/?$@s); my $name = $app_dir; $name =~ s@^.*/@@s; $name =~ s@\..*?$@@s; $name = lc($name); $name = 'rd-bomb' if ($name eq 'rdbomb'); # sigh if (! -f "$thumbdir/$name.png") { system ("make", "$thumbdir/$name.png"); my $exit = $? >> 8; exit ($exit) if $exit; error ("unable to download $name.png") unless (-f "$thumbdir/$name.png"); } $app_dir =~ s@/+$@@s; $app_dir .= "/Contents/Resources"; error ("$app_dir does not exist") unless (-d $app_dir); system ("cp", "-p", "$thumbdir/$name.png", "$app_dir/thumbnail.png"); my $exit = $? >> 8; exit ($exit) if $exit; } sub enable_gc($) { my ($app_dir) = @_; return unless ($app_dir =~ m@\.saver/?$@s); my ($dir, $name) = ($app_dir =~ m@^(.*)/([^/]+)\.saver$@s); error ("unparsable: $app_dir") unless $name; my $exe = "$app_dir/Contents/MacOS/$name"; my @cmd = ("$dir/enable_gc", $exe); print STDERR "$progname: exec: " . join(' ', @cmd) . "\n" if ($verbose > 1); system (@cmd); my $exit = $? >> 8; exit ($exit) if $exit; } sub fix_coretext($) { my ($app_dir) = @_; # In MacOS 10.8, they moved CoreText.framework from # /System/Library/Frameworks/ApplicationServices.framework/Frameworks/ # to /System/Library/Frameworks/ which means that executables compiled # on 10.8 and newer won't run on 10.7 and older because they can't find # the library. Fortunately, 10.8 and later leave a symlink behind, so # the old location still works. So we need our executables to contain # an LC_LOAD_DYLIB pointing at the old directory instead of the new # one. # return if ($app_dir =~ m@-iphone@s); my ($dir, $name) = ($app_dir =~ m@^(.*)/([^/]+)\.(app|saver)$@s); error ("unparsable: $app_dir") unless $name; my $exe = "$app_dir/Contents/MacOS/$name"; my $new = ("/System/Library/Frameworks/CoreText.framework/" . "Versions/A/CoreText"); my $old = ("/System/Library/Frameworks/ApplicationServices.framework/" . "Frameworks/CoreText.framework/Versions/A/CoreText"); my @cmd = ("install_name_tool", "-change", $new, $old, $exe); print STDERR "$progname: exec: " . join(' ', @cmd) . "\n" if ($verbose > 1); system (@cmd); my $exit = $? >> 8; exit ($exit) if $exit; } sub update($) { my ($app_dir) = @_; error ("$app_dir: no name") unless ($app_dir =~ m@/([^/.]+).(app|saver)/?$@x); my $app_name = $1; my ($filename, $plist) = read_info_plist ($app_dir); my $oplist = $plist; error ("$filename: no version number") unless ($plist =~ m@CFBundleShortVersionString\s* ([^<>]+)@sx); my $vers = $1; my ($ignore, $info_str) = update_saver_xml ($app_dir, $vers); # No, don't do this -- the iOS version reads the XML file in a few # different places, and most of those places don't understand gzip. if ($app_name eq 'XScreenSaver') { compress_all_xml_files ($app_dir); } elsif (! defined($info_str)) { print STDERR "$progname: $filename: no XML file\n" if ($verbose > 1); } else { $info_str =~ m@^([^\n]+)\n@s || error ("$filename: unparsable copyright"); my $copyright = "$1"; $copyright =~ s/\b\d{4}-(\d{4})\b/$1/; # Lose the Wikipedia URLs. $info_str =~ s@https?:.*?\b(wikipedia|mathworld)\b[^\s]+[ \t]*\n?@@gm; $info_str =~ s/(\n\n)\n+/$1/gs; $info_str =~ s/(^\s+|\s+$)//gs; $plist = set_plist_key ($filename, $plist, "NSHumanReadableCopyright", $copyright); $plist = set_plist_key ($filename, $plist, "CFBundleLongVersionString",$copyright); $plist = set_plist_key ($filename, $plist, "CFBundleGetInfoString", $info_str); if ($oplist eq $plist) { print STDERR "$progname: $filename: unchanged\n" if ($verbose > 1); } else { $plist = convert_plist ($plist, 1); # convert to binary plist my $file_tmp = "$filename.tmp"; open (my $out, '>:raw', $file_tmp) || error ("$file_tmp: $!"); print $out $plist || error ("$file_tmp: $!"); close $out || error ("$file_tmp: $!"); if (!rename ("$file_tmp", "$filename")) { unlink "$file_tmp"; error ("mv \"$file_tmp\" \"$filename\": $!"); } print STDERR "$progname: wrote $filename\n" if ($verbose); } } # MacOS 10.12: codesign says "resource fork, Finder information, or # similar detritus not allowed" if any bundle has an Icon\r file. # set_icon ($app_dir); set_thumb ($app_dir); # enable_gc ($app_dir); fix_coretext ($app_dir) } sub error($) { my ($err) = @_; print STDERR "$progname: $err\n"; exit 1; } sub usage() { print STDERR "usage: $progname [--verbose] program.app ...\n"; exit 1; } sub main() { my @files = (); while ($_ = $ARGV[0]) { shift @ARGV; if (m/^--?verbose$/s) { $verbose++; } elsif (m/^-v+$/) { $verbose += length($_)-1; } elsif (m/^--?q(uiet)?$/s) { $verbose = 0; } elsif (m/^-/s) { usage(); } else { push @files, $_; } } usage() unless ($#files >= 0); foreach (@files) { update ($_); } } main(); exit 0; xscreensaver-5.36/OSX/updates.pl000775 000767 000024 00000014233 12701614564 016627 0ustar00jwzstaff000000 000000 #!/usr/bin/perl -w # Copyright © 2013 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. # # Generates updates.xml from README, archive/, and www/. # # Created: 27-Nov-2013. require 5; use diagnostics; use strict; use open ":encoding(utf8)"; use POSIX; my $progname = $0; $progname =~ s@.*/@@g; my ($version) = ('$Revision: 1.2 $' =~ m/\s(\d[.\d]+)\s/s); my $verbose = 0; my $debug_p = 0; my $base_url = "https://www.jwz.org/"; my $priv_key_file = "$ENV{HOME}/.ssh/sparkle_dsa_priv.pem"; my $sign_update = "./sign_update.rb"; sub generate_xml($$$$) { my ($app_name, $changelog, $archive_dir, $www_dir) = @_; my $outfile = "updates.xml"; my $obody = ''; my %sigs; my %dates; if (open (my $in, '<', $outfile)) { print STDERR "$progname: reading $outfile\n" if $verbose; local $/ = undef; # read entire file $obody = <$in>; close $in; foreach my $item (split (/(.*?) 1); } } open (my $in, '<', $changelog) || error ("$changelog: $!"); print STDERR "$progname: reading $changelog\n" if $verbose; local $/ = undef; # read entire file my $body = <$in>; close $in; my $rss = ""; $body =~ s/^(\d+\.\d+[ \t])/\001$1/gm; my @log = split (/\001/, $body); shift @log; my $count = 0; foreach my $log (@log) { my ($v1, $entry) = ($log =~ m/^(\d+\.\d+)\s+(.*)$/s); $entry =~ s/^\s*\d\d?[- ][A-Z][a-z][a-z][- ]\d{4}:?\s+//s; # lose date $entry =~ s/^\s+|\s+$//gs; $entry =~ s/^\s+|\s+$//gm; $entry =~ s/^[-*] /
• /gm; $entry =~ s/^
//si; $entry =~ s/\s+/ /gs; my $v2 = $v1; $v2 =~ s/\.//gs; my $zip = undef; DONE: foreach my $ext ('zip', 'dmg', 'tar.gz', 'tar.Z') { foreach my $v ($v1, $v2) { foreach my $name ($app_name, "x" . lc($app_name)) { my $f = "$name-$v.$ext"; if (-f "$archive_dir/$f") { $zip = $f; last DONE; } } } } my $publishedp = ($zip && -f "$www_dir/$zip"); $publishedp = 1 if ($count == 0); my $url = ("${base_url}$app_name/" . ($publishedp ? $zip : "")); $url =~ s@DaliClock/@xdaliclock/@gs if $url; # Kludge my @st = stat("$archive_dir/$zip") if $zip; my $size = $st[7]; my $date = $st[9]; $date = ($zip ? strftime ("%a, %d %b %Y %T %z", localtime($date)) : ""); my $odate = $dates{$v1}; my $sig = $sigs{$v1}; # Re-generate the sig if the file date changed. $sig = undef if ($odate && $odate ne $date); print STDERR "$progname: $v1: $date " . ($sig ? "Y" : "N") . "\n" if ($verbose > 1); if (!$sig && $zip) { local %ENV = %ENV; $ENV{PATH} = "/usr/bin:$ENV{PATH}"; $sig = `$sign_update "$archive_dir/$zip" "$priv_key_file"`; $sig =~ s/\s+//gs; } my $enc = ($publishedp ? ("\n") : "$v1\n"); $enc =~ s/^/ /gm if $enc; my $item = ("\n" . " Version $v1\n" . " $url\n" . " \n" . " $date\n" . $enc . "\n"); $item =~ s/^/ /gm; # I guess Sparkle doesn't like info-only items. $item = '' unless $publishedp; $rss .= $item; $count++; } $rss = ("\n" . "\n" . " \n" . " $app_name updater\n" . " ${base_url}$app_name/updates.xml\n" . " Updates to $app_name.\n" . " en\n" . $rss . " \n" . "\n"); if ($rss eq $obody) { print STDERR "$progname: $outfile: unchanged\n"; } else { my $tmp = "$outfile.tmp"; open (my $out, '>', $tmp) || error ("$tmp: $!"); print $out $rss; close $out; if ($debug_p) { system ("diff", "-wNU2", "$outfile", "$tmp"); unlink $tmp; } else { if (!rename ("$tmp", "$outfile")) { unlink "$tmp"; error ("mv $tmp $outfile: $!"); } else { print STDERR "$progname: wrote $outfile\n"; } } } } sub error($) { my ($err) = @_; print STDERR "$progname: $err\n"; exit 1; } sub usage() { print STDERR "usage: $progname [--verbose] app-name changelog archive www\n"; exit 1; } sub main() { my ($app_name, $changelog, $archive_dir, $www_dir); while ($#ARGV >= 0) { $_ = shift @ARGV; if (m/^--?verbose$/) { $verbose++; } elsif (m/^-v+$/) { $verbose += length($_)-1; } elsif (m/^--?debug$/) { $debug_p++; } elsif (m/^-./) { usage; } elsif (!$app_name) { $app_name = $_; } elsif (!$changelog) { $changelog = $_; } elsif (!$archive_dir) { $archive_dir = $_; } elsif (!$www_dir) { $www_dir = $_; } else { usage; } } usage unless $www_dir; generate_xml ($app_name, $changelog, $archive_dir, $www_dir); } main(); exit 0; xscreensaver-5.36/OSX/updates.xml000664 000767 000024 00000006637 12720754752 017027 0ustar00jwzstaff000000 000000 xscreensaver updater https://www.jwz.org/xscreensaver/updates.xml Updates to xscreensaver. en Version 5.35 https://www.jwz.org/xscreensaver/xscreensaver-5.35.dmg • Added Windows 10 to `bsod'.
• X11: ignore WM_USER_TIME property changes with days-old timestamps. Thanks, KDE.
• MacOS, iOS: Better fonts in 'BSOD' and 'memscroller'.
• MacOS 10.7 or later and iOS 6.0 or later are now required, since Xcode 6 can no longer build executables that work on older OSes.
• Many, many Android improvements.
• iOS: Fixed rotation to work with the new iOS 8+ API.
• X11: `pong' is now playable.]]>
Mon, 23 May 2016 21:08:11 -0700
Version 5.34 https://www.jwz.org/xscreensaver/xscreensaver-5.34.dmg • Fixed some incorrect output from `xscreensaver-command -watch'.
• Various OSX and iOS performance improvements.]]>
Sat, 24 Oct 2015 12:16:41 -0700
Version 5.33 https://www.jwz.org/xscreensaver/xscreensaver-5.33.dmg • Better detection of user activity on modern GNOME systems.
• Sonar now does asynchronous host name resolution.
• Improved Unicode support.
• Updated `webcollage' for recent changes.
• Various minor fixes.]]>
Thu, 25 Jun 2015 12:45:10 -0700
Version 5.14 https://www.jwz.org/xscreensaver/xscreensaver-5.14.dmg • Added "Quick Power-off in Blank Only Mode" option.
• BSOD GLaDOS.]]>
Fri, 20 May 2011 11:42:36 -0700
xscreensaver-5.36/OSX/xscreensaver.xcconfig000644 000767 000024 00000000723 12631675232 021052 0ustar00jwzstaff000000 000000 // To create builds that work properly on MacOS 10.6, Xcode 5.0.2 must // be used, since that is the latest version that supports garbage collection. // If the Xcode version is 5.02 or earlier, use these settings: // "10.4", "-fobjc-gc", "-no-fobjc-gc" // If the Xcode version is later than that, use these settings: // "10.6", "", "" // and the generate builds will only work on 10.6 or later. // MACOSX_DEPLOYMENT_TARGET=10.7 OBJC_GC_CFLAGS= OBJC_NO_GC_CFLAGS= xscreensaver-5.36/OSX/xscreensaver.xcodeproj/project.pbxproj000664 000767 000024 00007203012 12777051007 024404 0ustar00jwzstaff000000 000000 // !$*UTF8*$! { archiveVersion = 1; classes = { }; objectVersion = 46; objects = { /* Begin PBXAggregateTarget section */ AF137D410F075C9B004DE3B2 /* Obsolete */ = { isa = PBXAggregateTarget; buildConfigurationList = AF137D450F075CA4004DE3B2 /* Build configuration list for PBXAggregateTarget "Obsolete" */; buildPhases = ( ); dependencies = ( AF714E51105613580046AB1D /* PBXTargetDependency */, AF137D690F075E5C004DE3B2 /* PBXTargetDependency */, AF137D670F075E5C004DE3B2 /* PBXTargetDependency */, AF137D650F075E5C004DE3B2 /* PBXTargetDependency */, AF137D630F075E5C004DE3B2 /* PBXTargetDependency */, AF137D610F075E5C004DE3B2 /* PBXTargetDependency */, AFA160941052FF87009B93AA /* PBXTargetDependency */, AFA160921052FF87009B93AA /* PBXTargetDependency */, AFB581B0102F363300342B11 /* PBXTargetDependency */, AF137D5D0F075E5C004DE3B2 /* PBXTargetDependency */, AF137D5B0F075E5C004DE3B2 /* PBXTargetDependency */, AF137D590F075E5C004DE3B2 /* PBXTargetDependency */, AF137D570F075E5C004DE3B2 /* PBXTargetDependency */, AF714E4F105613410046AB1D /* PBXTargetDependency */, AF137D550F075E5C004DE3B2 /* PBXTargetDependency */, AF137D530F075E5C004DE3B2 /* PBXTargetDependency */, AF137D510F075E5C004DE3B2 /* PBXTargetDependency */, AF137D4F0F075E5C004DE3B2 /* PBXTargetDependency */, AF137D4D0F075E5C004DE3B2 /* PBXTargetDependency */, AF137D4B0F075E5C004DE3B2 /* PBXTargetDependency */, AF137D490F075E5C004DE3B2 /* PBXTargetDependency */, ); name = Obsolete; productName = Obsolete; }; AF480AAF098C669800FB32B8 /* All Savers (XScreenSaver) */ = { isa = PBXAggregateTarget; buildConfigurationList = AF480ABA098C66E300FB32B8 /* Build configuration list for PBXAggregateTarget "All Savers (XScreenSaver)" */; buildPhases = ( ); dependencies = ( AFE6A4300CDD7FEE002805BF /* PBXTargetDependency */, AF77798F09B6604C00EA3033 /* PBXTargetDependency */, AF77798D09B6604C00EA3033 /* PBXTargetDependency */, AF77798B09B6604C00EA3033 /* PBXTargetDependency */, AFBFE785178648E600432B21 /* PBXTargetDependency */, AF77798909B6604C00EA3033 /* PBXTargetDependency */, AF77798709B6604B00EA3033 /* PBXTargetDependency */, AF77798509B6604B00EA3033 /* PBXTargetDependency */, AF73FF3F1A0988F000E485E9 /* PBXTargetDependency */, AF77798309B6604B00EA3033 /* PBXTargetDependency */, AF77798109B6604B00EA3033 /* PBXTargetDependency */, AF77797F09B6604B00EA3033 /* PBXTargetDependency */, AF77797B09B6604B00EA3033 /* PBXTargetDependency */, AF77797909B6604B00EA3033 /* PBXTargetDependency */, AF77797709B6604B00EA3033 /* PBXTargetDependency */, AF77797509B6604B00EA3033 /* PBXTargetDependency */, AF77797309B6604B00EA3033 /* PBXTargetDependency */, AF77797109B6604B00EA3033 /* PBXTargetDependency */, AFF463530C44062500EE6509 /* PBXTargetDependency */, AF77796D09B6604A00EA3033 /* PBXTargetDependency */, AF77796B09B6604A00EA3033 /* PBXTargetDependency */, AF77796909B6604A00EA3033 /* PBXTargetDependency */, AF77796709B6604A00EA3033 /* PBXTargetDependency */, AF77796509B6604A00EA3033 /* PBXTargetDependency */, AF77796309B6604A00EA3033 /* PBXTargetDependency */, AF77796109B6604A00EA3033 /* PBXTargetDependency */, AF77795F09B6604A00EA3033 /* PBXTargetDependency */, AF77795D09B6604A00EA3033 /* PBXTargetDependency */, AF77795B09B6604A00EA3033 /* PBXTargetDependency */, AF77795909B6604A00EA3033 /* PBXTargetDependency */, AF77795709B6604A00EA3033 /* PBXTargetDependency */, AF77795509B6604A00EA3033 /* PBXTargetDependency */, AF77795309B6604900EA3033 /* PBXTargetDependency */, AF77795109B6604900EA3033 /* PBXTargetDependency */, AF77794F09B6604900EA3033 /* PBXTargetDependency */, AF77794D09B6604900EA3033 /* PBXTargetDependency */, AFB591C3178B821E00EA4005 /* PBXTargetDependency */, AF77794709B6604900EA3033 /* PBXTargetDependency */, AF77794509B6604900EA3033 /* PBXTargetDependency */, AF77794309B6604900EA3033 /* PBXTargetDependency */, AF77794109B6604900EA3033 /* PBXTargetDependency */, AF77793F09B6604900EA3033 /* PBXTargetDependency */, AF77793B09B6604900EA3033 /* PBXTargetDependency */, AF77793909B6604800EA3033 /* PBXTargetDependency */, AF1A17840D6D6FA7008AF328 /* PBXTargetDependency */, AF0DCA310C4C744D00D76972 /* PBXTargetDependency */, AF77793509B6604800EA3033 /* PBXTargetDependency */, AF77793309B6604800EA3033 /* PBXTargetDependency */, AF77793109B6604800EA3033 /* PBXTargetDependency */, AF77792D09B6604800EA3033 /* PBXTargetDependency */, AF77792B09B6604800EA3033 /* PBXTargetDependency */, AF77792909B6604800EA3033 /* PBXTargetDependency */, AF77792709B6604800EA3033 /* PBXTargetDependency */, AF77792509B6604800EA3033 /* PBXTargetDependency */, AF77792309B6604800EA3033 /* PBXTargetDependency */, AF77792109B6604800EA3033 /* PBXTargetDependency */, AF77791F09B6604800EA3033 /* PBXTargetDependency */, AF77791D09B6604800EA3033 /* PBXTargetDependency */, AFBFE787178648F500432B21 /* PBXTargetDependency */, AF77791B09B6604700EA3033 /* PBXTargetDependency */, AF77791909B6604700EA3033 /* PBXTargetDependency */, AF77791709B6604700EA3033 /* PBXTargetDependency */, AF77791509B6604700EA3033 /* PBXTargetDependency */, AF77791309B6604700EA3033 /* PBXTargetDependency */, AF77791109B6604700EA3033 /* PBXTargetDependency */, AF77790F09B6604700EA3033 /* PBXTargetDependency */, AF77790D09B6604700EA3033 /* PBXTargetDependency */, AF77790B09B6604700EA3033 /* PBXTargetDependency */, AF77790909B6604700EA3033 /* PBXTargetDependency */, AF77790709B6604700EA3033 /* PBXTargetDependency */, AF77790509B6604700EA3033 /* PBXTargetDependency */, AF77790309B6604700EA3033 /* PBXTargetDependency */, AF7778FF09B6604700EA3033 /* PBXTargetDependency */, AF7778FD09B6604600EA3033 /* PBXTargetDependency */, AF7778FB09B6604600EA3033 /* PBXTargetDependency */, AF7778F909B6604600EA3033 /* PBXTargetDependency */, AF7778F709B6604600EA3033 /* PBXTargetDependency */, AF68A49E19196EA000D41CD1 /* PBXTargetDependency */, CE04E8CB1B9B61D00085910B /* PBXTargetDependency */, AF7778F309B6604600EA3033 /* PBXTargetDependency */, AF7778F109B6604600EA3033 /* PBXTargetDependency */, AF7778EF09B6604600EA3033 /* PBXTargetDependency */, AF7778ED09B6604600EA3033 /* PBXTargetDependency */, AFA33B8F0B0585A4002B0E7D /* PBXTargetDependency */, AFA33BCF0B0587B2002B0E7D /* PBXTargetDependency */, AF7778EB09B6604600EA3033 /* PBXTargetDependency */, AF7778E709B6604600EA3033 /* PBXTargetDependency */, AF7778E509B6604600EA3033 /* PBXTargetDependency */, AF7778E309B6604600EA3033 /* PBXTargetDependency */, AF7778E109B6604600EA3033 /* PBXTargetDependency */, AF7778DF09B6604600EA3033 /* PBXTargetDependency */, AF7778DD09B6604600EA3033 /* PBXTargetDependency */, AF7778DB09B6604500EA3033 /* PBXTargetDependency */, AF7778D909B6604500EA3033 /* PBXTargetDependency */, AF7778D709B6604500EA3033 /* PBXTargetDependency */, ); name = "All Savers (XScreenSaver)"; productName = "All Savers (XScreenSaver)"; }; AF480D58098EED3D00FB32B8 /* All Savers (XLockmore) */ = { isa = PBXAggregateTarget; buildConfigurationList = AF480D64098EED6E00FB32B8 /* Build configuration list for PBXAggregateTarget "All Savers (XLockmore)" */; buildPhases = ( ); dependencies = ( AF7779D909B6608200EA3033 /* PBXTargetDependency */, AF7779D709B6608200EA3033 /* PBXTargetDependency */, AF7779D509B6608200EA3033 /* PBXTargetDependency */, AF7779D309B6608200EA3033 /* PBXTargetDependency */, AF7779D109B6608200EA3033 /* PBXTargetDependency */, AF7779CF09B6608200EA3033 /* PBXTargetDependency */, AF7779CD09B6608200EA3033 /* PBXTargetDependency */, AF7779CB09B6608200EA3033 /* PBXTargetDependency */, AF7779C909B6608200EA3033 /* PBXTargetDependency */, AF7779C709B6608200EA3033 /* PBXTargetDependency */, AF7779C309B6608100EA3033 /* PBXTargetDependency */, AF7779BF09B6608100EA3033 /* PBXTargetDependency */, AF7779BD09B6608100EA3033 /* PBXTargetDependency */, AF7779BB09B6608100EA3033 /* PBXTargetDependency */, AF7779B709B6608100EA3033 /* PBXTargetDependency */, AF7779AD09B6608100EA3033 /* PBXTargetDependency */, AF7779AB09B6608100EA3033 /* PBXTargetDependency */, AF7779A909B6608100EA3033 /* PBXTargetDependency */, AF7779A709B6608100EA3033 /* PBXTargetDependency */, AF7779A509B6608100EA3033 /* PBXTargetDependency */, AF7779A109B6608100EA3033 /* PBXTargetDependency */, AF77799B09B6608100EA3033 /* PBXTargetDependency */, AF77799909B6608100EA3033 /* PBXTargetDependency */, AF77799709B6608100EA3033 /* PBXTargetDependency */, AF77799509B6608000EA3033 /* PBXTargetDependency */, ); name = "All Savers (XLockmore)"; productName = "All Savers (XLockmore)"; }; AF480D59098EED5100FB32B8 /* All Savers (OpenGL) */ = { isa = PBXAggregateTarget; buildConfigurationList = AF480D67098EED6E00FB32B8 /* Build configuration list for PBXAggregateTarget "All Savers (OpenGL)" */; buildPhases = ( ); dependencies = ( AF777A6509B660B700EA3033 /* PBXTargetDependency */, AF777A6309B660B700EA3033 /* PBXTargetDependency */, AF777A6109B660B700EA3033 /* PBXTargetDependency */, AF777A5F09B660B600EA3033 /* PBXTargetDependency */, AF777A5D09B660B600EA3033 /* PBXTargetDependency */, AF777A5B09B660B600EA3033 /* PBXTargetDependency */, AF777A5909B660B600EA3033 /* PBXTargetDependency */, AF777A5709B660B600EA3033 /* PBXTargetDependency */, AF777A5509B660B600EA3033 /* PBXTargetDependency */, AF777A5309B660B600EA3033 /* PBXTargetDependency */, AF777A5109B660B600EA3033 /* PBXTargetDependency */, AF777A4F09B660B600EA3033 /* PBXTargetDependency */, AF777A4D09B660B600EA3033 /* PBXTargetDependency */, AF777A4B09B660B600EA3033 /* PBXTargetDependency */, AF5C9B161A0CCF8000B0147A /* PBXTargetDependency */, AF4F10EE143450C300E34F3F /* PBXTargetDependency */, AF777A4909B660B500EA3033 /* PBXTargetDependency */, AF777A4709B660B500EA3033 /* PBXTargetDependency */, AF777A4509B660B500EA3033 /* PBXTargetDependency */, AFEE108A1D15EBF900AAC8F7 /* PBXTargetDependency */, AF777A4309B660B500EA3033 /* PBXTargetDependency */, AFEE106B1D13424C00AAC8F7 /* PBXTargetDependency */, AF4FF4D70D52CD0D00666F98 /* PBXTargetDependency */, AF777A4109B660B500EA3033 /* PBXTargetDependency */, AF3938381D0FBF5300205406 /* PBXTargetDependency */, AF777A3F09B660B500EA3033 /* PBXTargetDependency */, AFEC23EB1CB6ED0800DE138F /* PBXTargetDependency */, AF777A3D09B660B500EA3033 /* PBXTargetDependency */, AFACE8911CC8365F008B24CD /* PBXTargetDependency */, AF777A3B09B660B500EA3033 /* PBXTargetDependency */, AF777A3909B660B400EA3033 /* PBXTargetDependency */, AF777A3709B660B400EA3033 /* PBXTargetDependency */, AF777A3509B660B400EA3033 /* PBXTargetDependency */, AF777A3309B660B400EA3033 /* PBXTargetDependency */, AF777A3109B660B400EA3033 /* PBXTargetDependency */, AF777A2F09B660B400EA3033 /* PBXTargetDependency */, AFF3CA0117CCAE210028F240 /* PBXTargetDependency */, AF7ACFDC19FF0BDB00BD752B /* PBXTargetDependency */, AF777A2D09B660B400EA3033 /* PBXTargetDependency */, AF777A2B09B660B400EA3033 /* PBXTargetDependency */, AF777A2909B660B400EA3033 /* PBXTargetDependency */, AFF4636F0C440B3B00EE6509 /* PBXTargetDependency */, AF777A2509B660B400EA3033 /* PBXTargetDependency */, AF777A2309B660B400EA3033 /* PBXTargetDependency */, AF777A2109B660B300EA3033 /* PBXTargetDependency */, AF777A1F09B660B300EA3033 /* PBXTargetDependency */, AF48DF060A0C261100F94CF9 /* PBXTargetDependency */, AF777A1D09B660B300EA3033 /* PBXTargetDependency */, AF777A1B09B660B300EA3033 /* PBXTargetDependency */, AF777A1909B660B300EA3033 /* PBXTargetDependency */, AF1B0FC51D7AB5740011DBE4 /* PBXTargetDependency */, AF4F10F0143450C300E34F3F /* PBXTargetDependency */, AFC0E8C91CDC6125008CAFAC /* PBXTargetDependency */, AF777A1709B660B300EA3033 /* PBXTargetDependency */, AF42C5160D624E9200B27FF6 /* PBXTargetDependency */, AF777A1509B660B300EA3033 /* PBXTargetDependency */, AF35E8A30E63825600691F2F /* PBXTargetDependency */, AF777A1309B660B300EA3033 /* PBXTargetDependency */, AFBFE7421786407000432B21 /* PBXTargetDependency */, AF777A1109B660B300EA3033 /* PBXTargetDependency */, AF777A0F09B660B200EA3033 /* PBXTargetDependency */, AF777A0D09B660B200EA3033 /* PBXTargetDependency */, AF4FD6FF0CE7A4F9005EE58E /* PBXTargetDependency */, AF777A0B09B660B200EA3033 /* PBXTargetDependency */, AF777A0909B660B200EA3033 /* PBXTargetDependency */, AF777A0709B660B200EA3033 /* PBXTargetDependency */, AFE6A19C0CDD7B7F002805BF /* PBXTargetDependency */, AF777A0509B660B200EA3033 /* PBXTargetDependency */, AF777A0309B660B200EA3033 /* PBXTargetDependency */, AF777A0109B660B200EA3033 /* PBXTargetDependency */, AFD51B350F063B7800471C02 /* PBXTargetDependency */, AF7779FF09B660B200EA3033 /* PBXTargetDependency */, AF7779FD09B660B100EA3033 /* PBXTargetDependency */, AF7779FB09B660B100EA3033 /* PBXTargetDependency */, AF7779F909B660B100EA3033 /* PBXTargetDependency */, AFFAB33519158F1E0020F021 /* PBXTargetDependency */, AF7779F709B660B100EA3033 /* PBXTargetDependency */, AF7779F509B660B100EA3033 /* PBXTargetDependency */, AFBFE7401786405E00432B21 /* PBXTargetDependency */, AF7779F309B660B000EA3033 /* PBXTargetDependency */, AFA211AA1CD5A08000C0D2A1 /* PBXTargetDependency */, AF63A80F1AB4EFD300593C75 /* PBXTargetDependency */, AF7779F109B660B000EA3033 /* PBXTargetDependency */, AF32D9F90F3AD0D90080F535 /* PBXTargetDependency */, AF4540D20E52BE8800AE87B5 /* PBXTargetDependency */, AF7779EF09B660B000EA3033 /* PBXTargetDependency */, AF7779ED09B660B000EA3033 /* PBXTargetDependency */, AFE2A46F0E2E908E00ADB298 /* PBXTargetDependency */, AF7779EB09B660B000EA3033 /* PBXTargetDependency */, AFCF835C1AF5B683008BB7E1 /* PBXTargetDependency */, AFEE10A91D17E32100AAC8F7 /* PBXTargetDependency */, AF7779E909B660B000EA3033 /* PBXTargetDependency */, AF7779E709B660B000EA3033 /* PBXTargetDependency */, AF7779E509B660B000EA3033 /* PBXTargetDependency */, AF7779E309B660B000EA3033 /* PBXTargetDependency */, AF7779E109B660AF00EA3033 /* PBXTargetDependency */, AF4A3460102A59A400A81B2A /* PBXTargetDependency */, AF7779DF09B660AF00EA3033 /* PBXTargetDependency */, AF7779DD09B660AF00EA3033 /* PBXTargetDependency */, AF998EF70A083E1D0051049D /* PBXTargetDependency */, AF4F10F2143450C300E34F3F /* PBXTargetDependency */, AF46E9ED1CBBA49A00240FBC /* PBXTargetDependency */, AFDA65AA178A54690070D24B /* PBXTargetDependency */, AF0DCA5C0C4CBB4300D76972 /* PBXTargetDependency */, AF39E2BA198A16920064A58D /* PBXTargetDependency */, ); name = "All Savers (OpenGL)"; productName = "All Savers (OpenGL)"; }; AF480D5A098EED5E00FB32B8 /* All Savers */ = { isa = PBXAggregateTarget; buildConfigurationList = AF480D6A098EED6E00FB32B8 /* Build configuration list for PBXAggregateTarget "All Savers" */; buildPhases = ( ); dependencies = ( AFCAD5F90992DFE00009617A /* PBXTargetDependency */, AF36340118540D050086A439 /* PBXTargetDependency */, AF480D60098EED6900FB32B8 /* PBXTargetDependency */, AF480D5E098EED6900FB32B8 /* PBXTargetDependency */, AF480D5C098EED6900FB32B8 /* PBXTargetDependency */, AF137D470F075CC8004DE3B2 /* PBXTargetDependency */, ); name = "All Savers"; productName = "All Savers"; }; AFA33C020B058E17002B0E7D /* webcollage-perl */ = { isa = PBXAggregateTarget; buildConfigurationList = AFA33C070B058E67002B0E7D /* Build configuration list for PBXAggregateTarget "webcollage-perl" */; buildPhases = ( ); dependencies = ( ); name = "webcollage-perl"; productName = webcollage; }; /* End PBXAggregateTarget section */ /* Begin PBXBuildFile section */ 550FB6001AD64424001A4FA5 /* Media-iOS.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 550FB5FD1AD64424001A4FA5 /* Media-iOS.xcassets */; }; 55EDCB3D1AD498A800251909 /* LaunchScreen.xib in Resources */ = {isa = PBXBuildFile; fileRef = 55EDCB3C1AD498A800251909 /* LaunchScreen.xib */; }; AF012918157C1E4C00C396E1 /* chessmodels.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA55E2309935F2B00F3E977 /* chessmodels.c */; }; AF0839A609930BAC00277BE9 /* atlantis.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258700988A468000655EE /* atlantis.xml */; }; AF0839B009930C4900277BE9 /* atlantis.c in Sources */ = {isa = PBXBuildFile; fileRef = AF0839A909930C4900277BE9 /* atlantis.c */; }; AF0839B109930C4900277BE9 /* dolphin.c in Sources */ = {isa = PBXBuildFile; fileRef = AF0839AA09930C4900277BE9 /* dolphin.c */; }; AF0839B209930C4900277BE9 /* shark.c in Sources */ = {isa = PBXBuildFile; fileRef = AF0839AB09930C4900277BE9 /* shark.c */; }; AF0839B309930C4900277BE9 /* swim.c in Sources */ = {isa = PBXBuildFile; fileRef = AF0839AC09930C4900277BE9 /* swim.c */; }; AF0839B409930C4900277BE9 /* whale.c in Sources */ = {isa = PBXBuildFile; fileRef = AF0839AD09930C4900277BE9 /* whale.c */; }; AF083A1C099310B300277BE9 /* xpm-ximage.c in Sources */ = {isa = PBXBuildFile; fileRef = AF0839AE09930C4900277BE9 /* xpm-ximage.c */; }; AF083A21099310CF00277BE9 /* xlockmore.c in Sources */ = {isa = PBXBuildFile; fileRef = AF480CBB098E37D600FB32B8 /* xlockmore.c */; }; AF083A4A099311FF00277BE9 /* atunnel.c in Sources */ = {isa = PBXBuildFile; fileRef = AF083A31099311CE00277BE9 /* atunnel.c */; }; AF083A4B0993120900277BE9 /* atunnel.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258720988A468000655EE /* atunnel.xml */; }; AF083A59099312B000277BE9 /* tunnel_draw.c in Sources */ = {isa = PBXBuildFile; fileRef = AF083A58099312B000277BE9 /* tunnel_draw.c */; }; AF0D117D0E41566300BB14A4 /* xscreensaver-getimage-file in Resources */ = {isa = PBXBuildFile; fileRef = AF0FAF1209CA712600EE1051 /* xscreensaver-getimage-file */; }; AF0DC7B10C4C73F600D76972 /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF0DC7B20C4C73F600D76972 /* analogtv.c in Sources */ = {isa = PBXBuildFile; fileRef = AF9D4CFA09B5AC94006E59CF /* analogtv.c */; }; AF0DCA350C4C74A200D76972 /* asm6502.c in Sources */ = {isa = PBXBuildFile; fileRef = AF0DCA320C4C74A200D76972 /* asm6502.c */; }; AF0DCA360C4C74A200D76972 /* m6502.c in Sources */ = {isa = PBXBuildFile; fileRef = AF0DCA340C4C74A200D76972 /* m6502.c */; }; AF0DCA380C4C74B700D76972 /* m6502.xml in Resources */ = {isa = PBXBuildFile; fileRef = AF0DCA370C4C74B700D76972 /* m6502.xml */; }; AF0DCA480C4CBB0D00D76972 /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF0DCA600C4CBB7300D76972 /* voronoi.c in Sources */ = {isa = PBXBuildFile; fileRef = AF0DCA5F0C4CBB7300D76972 /* voronoi.c */; }; AF0DCA620C4CBB8E00D76972 /* voronoi.xml in Resources */ = {isa = PBXBuildFile; fileRef = AF0DCA610C4CBB8E00D76972 /* voronoi.xml */; }; AF0FAF0C09CA6FF900EE1051 /* xscreensaver-text in Resources */ = {isa = PBXBuildFile; fileRef = AF0FAF0B09CA6FF900EE1051 /* xscreensaver-text */; }; AF0FAF0D09CA6FF900EE1051 /* xscreensaver-text in Resources */ = {isa = PBXBuildFile; fileRef = AF0FAF0B09CA6FF900EE1051 /* xscreensaver-text */; }; AF0FAF0E09CA6FF900EE1051 /* xscreensaver-text in Resources */ = {isa = PBXBuildFile; fileRef = AF0FAF0B09CA6FF900EE1051 /* xscreensaver-text */; }; AF0FAF0F09CA6FF900EE1051 /* xscreensaver-text in Resources */ = {isa = PBXBuildFile; fileRef = AF0FAF0B09CA6FF900EE1051 /* xscreensaver-text */; }; AF0FAF1009CA6FF900EE1051 /* xscreensaver-text in Resources */ = {isa = PBXBuildFile; fileRef = AF0FAF0B09CA6FF900EE1051 /* xscreensaver-text */; }; AF0FAF1109CA6FF900EE1051 /* xscreensaver-text in Resources */ = {isa = PBXBuildFile; fileRef = AF0FAF0B09CA6FF900EE1051 /* xscreensaver-text */; }; AF0FAF1309CA712600EE1051 /* xscreensaver-getimage-file in Resources */ = {isa = PBXBuildFile; fileRef = AF0FAF1209CA712600EE1051 /* xscreensaver-getimage-file */; }; AF0FAF1409CA712600EE1051 /* xscreensaver-getimage-file in Resources */ = {isa = PBXBuildFile; fileRef = AF0FAF1209CA712600EE1051 /* xscreensaver-getimage-file */; }; AF0FAF1509CA712600EE1051 /* xscreensaver-getimage-file in Resources */ = {isa = PBXBuildFile; fileRef = AF0FAF1209CA712600EE1051 /* xscreensaver-getimage-file */; }; AF0FAF1609CA712600EE1051 /* xscreensaver-getimage-file in Resources */ = {isa = PBXBuildFile; fileRef = AF0FAF1209CA712600EE1051 /* xscreensaver-getimage-file */; }; AF0FAF1709CA712600EE1051 /* xscreensaver-getimage-file in Resources */ = {isa = PBXBuildFile; fileRef = AF0FAF1209CA712600EE1051 /* xscreensaver-getimage-file */; }; AF0FAF1809CA712600EE1051 /* xscreensaver-getimage-file in Resources */ = {isa = PBXBuildFile; fileRef = AF0FAF1209CA712600EE1051 /* xscreensaver-getimage-file */; }; AF0FAF1909CA712600EE1051 /* xscreensaver-getimage-file in Resources */ = {isa = PBXBuildFile; fileRef = AF0FAF1209CA712600EE1051 /* xscreensaver-getimage-file */; }; AF0FAF1A09CA712600EE1051 /* xscreensaver-getimage-file in Resources */ = {isa = PBXBuildFile; fileRef = AF0FAF1209CA712600EE1051 /* xscreensaver-getimage-file */; }; AF0FAF1B09CA712600EE1051 /* xscreensaver-getimage-file in Resources */ = {isa = PBXBuildFile; fileRef = AF0FAF1209CA712600EE1051 /* xscreensaver-getimage-file */; }; AF0FAF1C09CA712600EE1051 /* xscreensaver-getimage-file in Resources */ = {isa = PBXBuildFile; fileRef = AF0FAF1209CA712600EE1051 /* xscreensaver-getimage-file */; }; AF0FAF1D09CA712600EE1051 /* xscreensaver-getimage-file in Resources */ = {isa = PBXBuildFile; fileRef = AF0FAF1209CA712600EE1051 /* xscreensaver-getimage-file */; }; AF0FAF1E09CA712600EE1051 /* xscreensaver-getimage-file in Resources */ = {isa = PBXBuildFile; fileRef = AF0FAF1209CA712600EE1051 /* xscreensaver-getimage-file */; }; AF0FAF1F09CA712600EE1051 /* xscreensaver-getimage-file in Resources */ = {isa = PBXBuildFile; fileRef = AF0FAF1209CA712600EE1051 /* xscreensaver-getimage-file */; }; AF0FAF2109CA712600EE1051 /* xscreensaver-getimage-file in Resources */ = {isa = PBXBuildFile; fileRef = AF0FAF1209CA712600EE1051 /* xscreensaver-getimage-file */; }; AF0FAF2209CA712600EE1051 /* xscreensaver-getimage-file in Resources */ = {isa = PBXBuildFile; fileRef = AF0FAF1209CA712600EE1051 /* xscreensaver-getimage-file */; }; AF0FAF2309CA712600EE1051 /* xscreensaver-getimage-file in Resources */ = {isa = PBXBuildFile; fileRef = AF0FAF1209CA712600EE1051 /* xscreensaver-getimage-file */; }; AF0FAF2409CA712600EE1051 /* xscreensaver-getimage-file in Resources */ = {isa = PBXBuildFile; fileRef = AF0FAF1209CA712600EE1051 /* xscreensaver-getimage-file */; }; AF0FAF2509CA712600EE1051 /* xscreensaver-getimage-file in Resources */ = {isa = PBXBuildFile; fileRef = AF0FAF1209CA712600EE1051 /* xscreensaver-getimage-file */; }; AF0FAF2609CA712600EE1051 /* xscreensaver-getimage-file in Resources */ = {isa = PBXBuildFile; fileRef = AF0FAF1209CA712600EE1051 /* xscreensaver-getimage-file */; }; 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 */; }; AF1A17680D6D6EE3008AF328 /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF1A177F0D6D6F3E008AF328 /* lcdscrub.c in Sources */ = {isa = PBXBuildFile; fileRef = AF1A177E0D6D6F3E008AF328 /* lcdscrub.c */; }; AF1A17810D6D6F62008AF328 /* lcdscrub.xml in Resources */ = {isa = PBXBuildFile; fileRef = AF1A17800D6D6F62008AF328 /* lcdscrub.xml */; }; AF1AD9E318500F9F00932759 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1ADA141850132600932759 /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 29B97316FDCFA39411CA2CEA /* main.m */; }; AF1ADA161850157400932759 /* Updater.xib in Resources */ = {isa = PBXBuildFile; fileRef = AF1ADA151850157400932759 /* Updater.xib */; }; AF1ADA181850180E00932759 /* Sparkle.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF1ADA171850180E00932759 /* Sparkle.framework */; }; AF1ADA1A1850186B00932759 /* Sparkle.framework in CopyFiles */ = {isa = PBXBuildFile; fileRef = AF1ADA171850180E00932759 /* Sparkle.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, ); }; }; AF1ADA1B18501B3D00932759 /* SaverRunner.icns in Resources */ = {isa = PBXBuildFile; fileRef = AF2D522513E954A0002AA818 /* SaverRunner.icns */; }; AF1ADA1F18504A4F00932759 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1B0FAE1D7AB4740011DBE4 /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF1B0FB01D7AB4740011DBE4 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1B0FB11D7AB4740011DBE4 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1B0FB21D7AB4740011DBE4 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF1B0FB31D7AB4740011DBE4 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1B0FB41D7AB4740011DBE4 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1B0FB51D7AB4740011DBE4 /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; AF1B0FB61D7AB4740011DBE4 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF1B0FC01D7AB5330011DBE4 /* hexstrut.xml in Resources */ = {isa = PBXBuildFile; fileRef = AF1B0FBF1D7AB5210011DBE4 /* hexstrut.xml */; }; AF1B0FC11D7AB53A0011DBE4 /* hexstrut.xml in Resources */ = {isa = PBXBuildFile; fileRef = AF1B0FBF1D7AB5210011DBE4 /* hexstrut.xml */; }; AF1B0FC21D7AB54D0011DBE4 /* hexstrut.c in Sources */ = {isa = PBXBuildFile; fileRef = AF1B0FBE1D7AB5210011DBE4 /* hexstrut.c */; }; AF1B0FC31D7AB5500011DBE4 /* hexstrut.c in Sources */ = {isa = PBXBuildFile; fileRef = AF1B0FBE1D7AB5210011DBE4 /* hexstrut.c */; settings = {COMPILER_FLAGS = "-DUSE_GL"; }; }; AF1FD713158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD714158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD715158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD716158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD717158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD718158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD719158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD71A158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD71B158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD71C158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD71D158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD71E158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD71F158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD720158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD721158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD722158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD727158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD728158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD729158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD72A158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD72B158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD72C158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD72D158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD72E158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD72F158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD730158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD731158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD732158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD733158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD734158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD735158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD736158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD737158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD738158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD739158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD73A158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD73B158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD73C158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD73D158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD73E158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD73F158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD740158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD741158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD742158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD743158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD744158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD745158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD746158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD747158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD748158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD749158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD74A158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD74B158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD74C158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD74D158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD74E158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD74F158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD750158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD751158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD752158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD753158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD754158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD755158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD756158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD757158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD758158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD759158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD75A158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD75B158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD75C158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD75D158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD75E158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD75F158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD760158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD761158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD762158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD763158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD764158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD765158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD766158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD767158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD768158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD769158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD76A158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD76B158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD76C158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD76D158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD76E158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD76F158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD770158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD771158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD772158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD773158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD774158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD775158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD776158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD777158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD778158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD779158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD77A158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD77B158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD77C158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD77D158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD77E158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD77F158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD780158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD781158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD782158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD783158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD784158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD785158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD786158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD787158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD788158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD789158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD78A158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD78B158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD78C158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD78D158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD78E158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD78F158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD790158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD791158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD792158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD793158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD794158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD795158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD796158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD797158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD798158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD799158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD79A158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD79B158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD79C158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD79D158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD79E158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD79F158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD7A0158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD7A1158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD7A2158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD7A3158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD7A4158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD7A5158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD7A6158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD7A7158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD7A8158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD7A9158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD7AA158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD7AB158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD7AC158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD7AD158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD7AE158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD7AF158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD7B0158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD7B1158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD7B2158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD7B3158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD7B4158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD7B5158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD7B6158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD7B7158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD7B8158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD7B9158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD7BA158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD7BB158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD7BC158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD7BD158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD7BE158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD7BF158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD7C0158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD7C1158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD7C2158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD7C3158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD7C4158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD7C5158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD7C6158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD7C7158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD7C8158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD7C9158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD7CA158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD7CB158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD7CC158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD7CD158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD7CE158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD7CF158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD7D0158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD7D1158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD7D2158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD7D3158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD7D4158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD7D5158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD7D6158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD7D7158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD7D8158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD7D9158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD7DA158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD7DB158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD7DC158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD7DD158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD7DE158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD7DF158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD7E0158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD7E1158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD7E2158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD7E3158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD7E4158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD7E5158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD7E6158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD7E7158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD7E8158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD7E9158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD7EA158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD7EB158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD7EC158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD7ED158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD7EE158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD7EF158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD7F0158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD7F1158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD7F2158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD7F7158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD7F8158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD7F9158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD7FA158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD7FB158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD7FC158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD7FD158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD7FE158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD7FF158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD800158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD801158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD802158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD803158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD804158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD805158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD806158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD807158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD808158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD809158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD80A158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD80B158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD80C158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD80D158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD80E158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD80F158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD810158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD811158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD812158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD813158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD814158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD815158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD816158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD817158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD818158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD819158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD81A158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD81B158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD81C158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD81D158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD81E158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD81F158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD820158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD821158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD822158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD823158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD824158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD825158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD826158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD827158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD828158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD829158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD82A158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD82B158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD82C158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD82D158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD82E158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD82F158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD830158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD831158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD832158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD833158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD834158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD835158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD836158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD837158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD838158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD839158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD83A158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD83B158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD83C158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD83D158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD83E158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD83F158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD840158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD841158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD842158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD843158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD844158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD845158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD846158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD847158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD848158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD849158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD84A158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD84B158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD84C158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD84D158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD84E158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD84F158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD850158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD851158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD852158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD853158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD854158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD855158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD856158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD857158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD858158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD859158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD85A158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD85B158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD85C158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD85D158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD85E158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD85F158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD860158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD861158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD862158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD863158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD864158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD865158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD866158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD867158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD868158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD869158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD86A158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD86B158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD86C158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD86D158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD86E158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD86F158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD870158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD871158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD872158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD873158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD874158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD875158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD876158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD877158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD878158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD879158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD87A158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD87B158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD87C158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD87D158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD87E158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD87F158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD880158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD881158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD882158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD883158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD884158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD885158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD886158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD887158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD888158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD889158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD88A158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD88B158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD88C158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD88D158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD88E158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD88F158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD890158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD891158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD892158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD893158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD894158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD895158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD896158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD897158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD898158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD899158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD89A158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD89B158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD89C158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD89D158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD89E158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD89F158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD8A0158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD8A1158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD8A2158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD8A3158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD8A4158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD8A5158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD8A6158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD8A7158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD8A8158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD8A9158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD8AA158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD8AB158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD8AC158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD8AD158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD8AE158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD8AF158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD8B0158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD8B1158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD8B2158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD8B3158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD8B4158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD8B5158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD8B6158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD8B7158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD8B8158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD8B9158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD8BA158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD8BB158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD8BC158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD8BD158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD8BE158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD8BF158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD8C0158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD8C1158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD8C2158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD8C3158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD8C4158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD8C5158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD8C6158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD8C7158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD8C8158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD8C9158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD8CA158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD8CB158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD8CC158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD8CD158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD8CE158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD8CF158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD8D0158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD8D1158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD8D2158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD8D3158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD8D4158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD8D5158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD8D6158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD8D7158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD8D8158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD8D9158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD8DA158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD8DB158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD8DC158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD8DD158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD8DE158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD8DF158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD8E0158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD8E1158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD8E2158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD8E3158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD8E4158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD8E5158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD8E6158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD8E7158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD8E8158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD8E9158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD8EA158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD8EB158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD8EC158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD8ED158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD8EE158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD8EF158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD8F0158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD8F1158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD8F2158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD8F3158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD8F4158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD8F5158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD8F6158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD8F7158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD8F8158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD8F9158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD8FA158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD8FB158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD8FC158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD8FD158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD8FE158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD8FF158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD900158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD901158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD902158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD903158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD904158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD905158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD906158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD907158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD908158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD909158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD90A158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD90B158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD90C158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD90D158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD90E158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD90F158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD910158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD911158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD912158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD913158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD914158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD915158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD916158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD917158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD918158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD919158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD91A158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD91B158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD91C158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD91D158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD91E158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD91F158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD920158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD921158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD922158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD923158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD924158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD925158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD926158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD927158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD928158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD929158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD92A158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD92B158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD92C158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD92D158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD92E158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD92F158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD930158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD931158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD932158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD933158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD934158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD935158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD936158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD937158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD938158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD939158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD93A158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD93B158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD93C158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD93D158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD93E158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD93F158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD940158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD941158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD942158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD943158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD944158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD945158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD946158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD947158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD948158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD949158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD94A158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD94B158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD94C158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD94D158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD94E158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD94F158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD950158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD951158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD952158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD953158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD954158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD955158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD956158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD957158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD958158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD959158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD95A158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD95B158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD95C158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD95D158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD95E158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD95F158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD960158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD961158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD962158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD963158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD964158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD965158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD966158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD967158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD968158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD969158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD96A158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD96B158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD96C158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD96D158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD96E158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD96F158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD970158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD971158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD972158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD973158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD974158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD975158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD976158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD977158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD978158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD979158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD97A158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD97B158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD97C158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD97D158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD97E158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD97F158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD980158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD981158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD982158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD983158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD984158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD985158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD986158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD987158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD988158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD989158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD98A158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD98B158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD98C158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD98D158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD98E158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD98F158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD990158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD991158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD992158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD993158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD994158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD995158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD996158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD997158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD998158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD999158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD99A158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD99B158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD99C158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD99D158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD99E158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD99F158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD9A0158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD9A1158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD9A2158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD9A3158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD9A4158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD9A5158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD9A6158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD9A7158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD9A8158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD9A9158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD9AA158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD9AB158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD9AC158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD9AD158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD9AE158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD9AF158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD9B0158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD9B1158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD9B2158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD9B3158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD9B4158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD9B5158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD9B6158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD9B7158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD9B8158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD9B9158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD9BA158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD9BB158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD9BC158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD9BD158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD9BE158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD9BF158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD9C0158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD9C1158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD9C2158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD9C3158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD9C4158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD9C5158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD9C6158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD9C7158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD9C8158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD9C9158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD9CA158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD9CB158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD9CC158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD9CD158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD9CE158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD9CF158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD9D0158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD9D1158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD9D2158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD9D3158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD9D4158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD9D5158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD9D6158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD9D7158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD9D8158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD9D9158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD9DA158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD9DB158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD9DC158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD9DD158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD9DE158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD9DF158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD9E0158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD9E1158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD9E2158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD9E3158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD9E4158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD9E5158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD9E6158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD9E7158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD9E8158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD9E9158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD9EA158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD9EB158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD9EC158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD9ED158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD9EE158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD9EF158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD9F0158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD9F1158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD9F2158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD9F3158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD9F4158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD9F5158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD9F6158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD9F7158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD9F8158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD9F9158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD9FA158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD9FB158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FD9FC158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FD9FD158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FD9FE158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FD9FF158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FDA00158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FDA01158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FDA02158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FDA03158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FDA04158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FDA05158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FDA06158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FDA07158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FDA08158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FDA09158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FDA0A158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FDA0B158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FDA0C158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FDA0D158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FDA0E158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FDA0F158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FDA10158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FDA11158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FDA12158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FDA13158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FDA14158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FDA15158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FDA16158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FDA17158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FDA18158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FDA19158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FDA1A158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FDA1B158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FDA1C158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FDA1D158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FDA1E158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FDA1F158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FDA20158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FDA21158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FDA22158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FDA23158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FDA24158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FDA25158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FDA26158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FDA27158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FDA28158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FDA29158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FDA2A158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FDA2B158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FDA2C158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FDA2D158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FDA2E158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FDA2F158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FDA30158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FDA31158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FDA32158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FDA33158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FDA34158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FDA35158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FDA36158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FDA37158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FDA38158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FDA39158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FDA3A158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FDA3B158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FDA3C158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FDA3D158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FDA3E158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FDA3F158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FDA40158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FDA41158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FDA42158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FDA43158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FDA44158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FDA45158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FDA46158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FDA47158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FDA48158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FDA49158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FDA4A158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FDA4B158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FDA4C158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FDA4D158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FDA4E158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FDA4F158FF96500C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FDA50158FF96500C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FDA51158FF96500C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FDA52158FF96500C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FDA53158FF96600C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FDA54158FF96600C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FDA55158FF96600C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FDA56158FF96600C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FDA57158FF96600C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FDA58158FF96600C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FDA59158FF96600C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FDA5A158FF96600C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FDA5B158FF96600C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FDA5C158FF96600C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FDA5D158FF96600C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FDA5E158FF96600C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FDA5F158FF96600C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FDA60158FF96600C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FDA61158FF96600C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FDA62158FF96600C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FDA63158FF96600C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FDA64158FF96600C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FDA65158FF96600C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FDA66158FF96600C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FDA67158FF96600C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FDA68158FF96600C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FDA69158FF96600C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FDA6A158FF96600C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FDA6B158FF96600C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FDA6C158FF96600C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FDA6D158FF96600C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FDA6E158FF96600C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FDA6F158FF96600C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FDA70158FF96600C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FDA71158FF96600C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FDA72158FF96600C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FDA73158FF96600C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FDA74158FF96600C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FDA75158FF96600C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FDA76158FF96600C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FDA77158FF96600C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FDA78158FF96600C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FDA79158FF96600C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FDA7A158FF96600C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FDA7B158FF96600C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FDA7C158FF96600C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FDA7D158FF96600C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FDA7E158FF96600C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FDA7F158FF96600C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FDA80158FF96600C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FDA81158FF96600C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FDA82158FF96600C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FDA83158FF96600C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FDA84158FF96600C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FDA85158FF96600C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FDA86158FF96600C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF1FDA87158FF96600C40F17 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF1FDA88158FF96600C40F17 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF1FDA89158FF96600C40F17 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF1FDA8A158FF96600C40F17 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF241F83107C38DF00046A84 /* dropshadow.c in Sources */ = {isa = PBXBuildFile; fileRef = AF241F81107C38DF00046A84 /* dropshadow.c */; }; AF2C31E615C0F7FE007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C31EA15C0FC9C007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C31EB15C0FC9C007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C31EC15C0FC9C007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C31ED15C0FC9C007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C31EF15C0FC9C007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C31F015C0FC9C007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C31F115C0FC9C007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C31F215C0FC9C007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C31F315C0FC9C007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C31F415C0FC9C007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C31F515C0FC9C007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C31F615C0FC9C007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C31F715C0FC9C007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C31F815C0FC9C007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C31F915C0FC9C007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C31FA15C0FC9C007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C31FB15C0FC9C007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C31FC15C0FC9C007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C31FD15C0FC9C007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C31FE15C0FC9C007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C31FF15C0FC9C007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C320015C0FC9C007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C320115C0FC9C007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C320215C0FC9C007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C320315C0FC9C007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C320415C0FC9C007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C320515C0FC9C007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C320615C0FC9C007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C320715C0FC9C007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C320815C0FC9C007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C320915C0FC9C007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C320A15C0FC9C007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C320B15C0FC9C007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C320C15C0FC9C007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C320D15C0FC9C007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C320E15C0FC9C007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C320F15C0FC9C007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C321015C0FC9C007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C321115C0FC9C007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C321215C0FC9C007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C321315C0FC9C007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C321415C0FC9C007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C321515C0FC9C007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C321615C0FC9C007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C321715C0FC9C007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C321815C0FC9C007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C321915C0FC9C007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C321A15C0FC9C007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C321B15C0FC9C007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C321C15C0FC9C007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C321D15C0FC9C007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C321E15C0FC9C007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C321F15C0FC9C007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C322015C0FC9C007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C322115C0FC9C007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C322315C0FC9C007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C322415C0FC9C007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C322515C0FC9C007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C322615C0FC9C007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C322715C0FC9C007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C322815C0FC9C007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C322915C0FC9C007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C322A15C0FC9C007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C322B15C0FC9C007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C322C15C0FC9C007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C322D15C0FC9C007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C322E15C0FC9C007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C322F15C0FC9C007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C323015C0FC9C007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C323115C0FC9C007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C323215C0FC9C007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C323315C0FC9C007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C323415C0FC9C007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C323515C0FC9C007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C323615C0FC9C007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C323715C0FC9C007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C323815C0FC9C007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C323915C0FC9C007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C323A15C0FC9C007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C323B15C0FC9C007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C323C15C0FC9C007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C323D15C0FC9C007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C323E15C0FC9C007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C323F15C0FC9C007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C324015C0FC9C007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C324115C0FC9C007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C324215C0FC9C007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C324315C0FC9C007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C324415C0FC9C007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C324515C0FC9C007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C324615C0FC9C007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C324715C0FC9C007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C324815C0FC9C007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C324915C0FC9C007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C324A15C0FC9C007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C324B15C0FC9C007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C324C15C0FC9C007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C324D15C0FC9C007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C324E15C0FC9C007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C324F15C0FC9C007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C325015C0FC9C007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C325115C0FC9C007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C325215C0FC9C007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C325315C0FC9C007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C325515C0FC9C007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C325615C0FC9C007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C325715C0FC9C007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C325815C0FC9C007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C325915C0FC9C007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C325A15C0FC9C007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C325B15C0FC9C007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C325C15C0FC9C007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C325D15C0FC9C007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C325E15C0FC9C007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C325F15C0FC9C007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C326015C0FC9C007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C326115C0FC9C007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C326215C0FC9C007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C326315C0FC9C007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C326415C0FC9C007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C326515C0FC9C007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C326615C0FC9C007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C326715C0FC9C007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C326815C0FC9C007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C326915C0FC9C007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C326A15C0FC9C007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C326B15C0FC9C007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C326C15C0FC9C007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C326D15C0FC9C007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C326E15C0FC9C007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C326F15C0FC9C007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C327015C0FC9C007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C327115C0FC9C007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C327215C0FC9C007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C327315C0FC9C007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C327415C0FC9D007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C327515C0FC9D007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C327615C0FC9D007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C327715C0FC9D007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C327815C0FC9D007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C327915C0FC9D007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C327A15C0FC9D007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C327B15C0FC9D007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C327C15C0FC9D007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C327D15C0FC9D007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C327E15C0FC9D007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C327F15C0FC9D007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C328015C0FC9D007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C328115C0FC9D007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C328215C0FC9D007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C328315C0FC9D007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C328415C0FC9D007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C328515C0FC9D007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C328615C0FC9D007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C328715C0FC9D007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C328815C0FC9D007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C328915C0FC9D007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C328A15C0FC9D007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C328B15C0FC9D007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C328C15C0FC9D007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C328D15C0FC9D007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C328E15C0FC9D007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C328F15C0FC9D007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C329015C0FC9D007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C329115C0FC9D007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C329215C0FC9D007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C329315C0FC9D007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C329415C0FC9D007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C329515C0FC9D007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C329615C0FC9D007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C329715C0FC9D007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C329815C0FC9D007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C329915C0FC9D007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C329A15C0FC9D007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C329B15C0FC9D007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C329C15C0FC9D007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C329D15C0FC9D007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C329E15C0FC9D007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C329F15C0FC9D007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C32A015C0FC9D007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C32A115C0FC9D007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C32A215C0FC9D007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C32A315C0FC9D007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C32A415C0FC9D007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C32A515C0FC9D007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C32A615C0FC9D007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C32A715C0FC9D007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C32A815C0FC9D007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C32A915C0FC9D007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C32AA15C0FC9D007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C32AB15C0FC9D007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C32AC15C0FC9D007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C32AD15C0FC9D007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C32AE15C0FC9D007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C32AF15C0FC9D007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C32B015C0FC9D007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C32B115C0FC9D007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C32B215C0FC9D007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C32B315C0FC9D007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C32B415C0FC9D007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C32B515C0FC9D007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C32B615C0FC9D007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C32B715C0FC9D007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C32B815C0FC9D007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C32B915C0FC9D007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C32BA15C0FC9D007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C32BB15C0FC9D007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C32BC15C0FC9D007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C32BD15C0FC9D007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C32BE15C0FC9D007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C32BF15C0FC9D007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C32C015C0FC9D007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C32C115C0FC9D007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C32C215C0FC9D007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C32C315C0FC9D007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C32C415C0FC9D007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C32C515C0FC9D007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C32C615C0FC9D007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C32C715C0FC9D007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2C32C815C0FC9D007A6896 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF2D8F321CEBA10300198014 /* jwxyz-timers.c in Sources */ = {isa = PBXBuildFile; fileRef = AF2D8F301CEBA10300198014 /* jwxyz-timers.c */; }; AF2D8F331CEBA10300198014 /* jwxyz-timers.h in Headers */ = {isa = PBXBuildFile; fileRef = AF2D8F311CEBA10300198014 /* jwxyz-timers.h */; }; AF32D9E70F3AD0B40080F535 /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF32D9FB0F3AD1200080F535 /* rubikblocks.c in Sources */ = {isa = PBXBuildFile; fileRef = AF32D9FA0F3AD1200080F535 /* rubikblocks.c */; }; AF32D9FD0F3AD1330080F535 /* rubikblocks.xml in Resources */ = {isa = PBXBuildFile; fileRef = AF32D9FC0F3AD1330080F535 /* rubikblocks.xml */; }; AF3581C31431D47B00E09C51 /* voronoi.xml in Resources */ = {isa = PBXBuildFile; fileRef = AF0DCA610C4CBB8E00D76972 /* voronoi.xml */; }; AF3581C61431D47B00E09C51 /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF3581DC1431D5FC00E09C51 /* companion_disc.c in Sources */ = {isa = PBXBuildFile; fileRef = AF3581D61431D5FC00E09C51 /* companion_disc.c */; }; AF3581DF1431D5FC00E09C51 /* companion_heart.c in Sources */ = {isa = PBXBuildFile; fileRef = AF3581D71431D5FC00E09C51 /* companion_heart.c */; }; AF3581E21431D5FC00E09C51 /* companion_quad.c in Sources */ = {isa = PBXBuildFile; fileRef = AF3581D81431D5FC00E09C51 /* companion_quad.c */; }; AF3581E51431D5FC00E09C51 /* companion.c in Sources */ = {isa = PBXBuildFile; fileRef = AF3581D91431D5FC00E09C51 /* companion.c */; }; AF3581E81431D61D00E09C51 /* companioncube.xml in Resources */ = {isa = PBXBuildFile; fileRef = AF3581E61431D61D00E09C51 /* companioncube.xml */; }; AF3581FF143330F900E09C51 /* voronoi.xml in Resources */ = {isa = PBXBuildFile; fileRef = AF0DCA610C4CBB8E00D76972 /* voronoi.xml */; }; AF358203143330F900E09C51 /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF35821C1433314C00E09C51 /* tronbit_idle1.c in Sources */ = {isa = PBXBuildFile; fileRef = AF3582171433314C00E09C51 /* tronbit_idle1.c */; }; AF35821D1433314C00E09C51 /* tronbit_idle2.c in Sources */ = {isa = PBXBuildFile; fileRef = AF3582181433314C00E09C51 /* tronbit_idle2.c */; }; AF35821E1433314C00E09C51 /* tronbit_no.c in Sources */ = {isa = PBXBuildFile; fileRef = AF3582191433314C00E09C51 /* tronbit_no.c */; }; AF35821F1433314C00E09C51 /* tronbit_yes.c in Sources */ = {isa = PBXBuildFile; fileRef = AF35821A1433314C00E09C51 /* tronbit_yes.c */; }; AF3582201433314C00E09C51 /* tronbit.c in Sources */ = {isa = PBXBuildFile; fileRef = AF35821B1433314C00E09C51 /* tronbit.c */; }; AF3582221433318500E09C51 /* tronbit.xml in Resources */ = {isa = PBXBuildFile; fileRef = AF3582211433318500E09C51 /* tronbit.xml */; }; 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 */; }; AF3633FC18530DD90086A439 /* sparkle_dsa_pub.pem in Resources */ = {isa = PBXBuildFile; fileRef = AF3633F918530DD90086A439 /* sparkle_dsa_pub.pem */; }; AF3633FD18530DD90086A439 /* Updater.m in Sources */ = {isa = PBXBuildFile; fileRef = AF3633FB18530DD90086A439 /* Updater.m */; }; AF3938211D0FBD6A00205406 /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF3938231D0FBD6A00205406 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF3938241D0FBD6A00205406 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF3938251D0FBD6A00205406 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF3938261D0FBD6A00205406 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF3938271D0FBD6A00205406 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF3938281D0FBD6A00205406 /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; AF3938291D0FBD6A00205406 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF3938331D0FBF0100205406 /* discoball.xml in Resources */ = {isa = PBXBuildFile; fileRef = AF3938321D0FBEC800205406 /* discoball.xml */; }; AF3938341D0FBF1900205406 /* discoball.c in Sources */ = {isa = PBXBuildFile; fileRef = AF3938311D0FBEC800205406 /* discoball.c */; }; AF3938351D0FBF1D00205406 /* discoball.c in Sources */ = {isa = PBXBuildFile; fileRef = AF3938311D0FBEC800205406 /* discoball.c */; settings = {COMPILER_FLAGS = "-DUSE_GL"; }; }; AF3938361D0FBF2700205406 /* discoball.xml in Resources */ = {isa = PBXBuildFile; fileRef = AF3938321D0FBEC800205406 /* discoball.xml */; }; 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 */; }; AF39E289198A11F60064A58D /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF39E28B198A11F60064A58D /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF39E28C198A11F60064A58D /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF39E28D198A11F60064A58D /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF39E28E198A11F60064A58D /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF39E28F198A11F60064A58D /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF39E290198A11F60064A58D /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF39E2AA198A13F50064A58D /* robot-wireframe.c in Sources */ = {isa = PBXBuildFile; fileRef = AF39E2A0198A13F50064A58D /* robot-wireframe.c */; }; AF39E2AB198A13F50064A58D /* winduprobot.c in Sources */ = {isa = PBXBuildFile; fileRef = AF39E2A1198A13F50064A58D /* winduprobot.c */; }; AF39E2AD198A15820064A58D /* winduprobot.xml in Resources */ = {isa = PBXBuildFile; fileRef = AF39E2AC198A15820064A58D /* winduprobot.xml */; }; AF39E2AE198A15820064A58D /* winduprobot.xml in Resources */ = {isa = PBXBuildFile; fileRef = AF39E2AC198A15820064A58D /* winduprobot.xml */; }; AF39E2B7198A15EE0064A58D /* robot-wireframe.c in Sources */ = {isa = PBXBuildFile; fileRef = AF39E2A0198A13F50064A58D /* robot-wireframe.c */; settings = {COMPILER_FLAGS = "-DUSE_GL"; }; }; AF39E2B8198A15EE0064A58D /* winduprobot.c in Sources */ = {isa = PBXBuildFile; fileRef = AF39E2A1198A13F50064A58D /* winduprobot.c */; settings = {COMPILER_FLAGS = "-DUSE_GL"; }; }; 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 */; }; AF46E9D61CBBA2B300240FBC /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF46E9D81CBBA2B300240FBC /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF46E9D91CBBA2B300240FBC /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF46E9DA1CBBA2B300240FBC /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF46E9DB1CBBA2B300240FBC /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF46E9DC1CBBA2B300240FBC /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF46E9DD1CBBA2B300240FBC /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; AF46E9DE1CBBA2B300240FBC /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF46E9E81CBBA41600240FBC /* unicrud.xml in Resources */ = {isa = PBXBuildFile; fileRef = AF46E9E61CBBA3F900240FBC /* unicrud.xml */; }; AF46E9E91CBBA41B00240FBC /* unicrud.c in Sources */ = {isa = PBXBuildFile; fileRef = AF46E9E71CBBA3F900240FBC /* unicrud.c */; }; AF46E9EA1CBBA42F00240FBC /* unicrud.xml in Resources */ = {isa = PBXBuildFile; fileRef = AF46E9E61CBBA3F900240FBC /* unicrud.xml */; }; AF46E9EB1CBBA43B00240FBC /* unicrud.c in Sources */ = {isa = PBXBuildFile; fileRef = AF46E9E71CBBA3F900240FBC /* unicrud.c */; settings = {COMPILER_FLAGS = "-DUSE_GL"; }; }; AF476FBC099D154F001F091E /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF476FCF099D1587001F091E /* interference.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258CC0988A468000655EE /* interference.xml */; }; AF476FD1099D15AA001F091E /* interference.c in Sources */ = {isa = PBXBuildFile; fileRef = AF476FD0099D15AA001F091E /* interference.c */; }; AF476FE1099D1686001F091E /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF476FEF099D16E4001F091E /* truchet.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC259260988A469000655EE /* truchet.xml */; }; AF476FF1099D1713001F091E /* truchet.c in Sources */ = {isa = PBXBuildFile; fileRef = AF476FF0099D1713001F091E /* truchet.c */; }; AF477052099D4385001F091E /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF47705E099D43B7001F091E /* deluxe.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258950988A468000655EE /* deluxe.xml */; }; AF477146099D43E2001F091E /* deluxe.c in Sources */ = {isa = PBXBuildFile; fileRef = AF477145099D43E2001F091E /* deluxe.c */; }; AF47716F099D4786001F091E /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF47717B099D47B7001F091E /* compass.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258880988A468000655EE /* compass.xml */; }; AF47717D099D47D3001F091E /* compass.c in Sources */ = {isa = PBXBuildFile; fileRef = AF47717C099D47D3001F091E /* compass.c */; }; AF477185099D4803001F091E /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF477191099D4846001F091E /* wander.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC2592B0988A469000655EE /* wander.xml */; }; AF477193099D4864001F091E /* wander.c in Sources */ = {isa = PBXBuildFile; fileRef = AF477192099D4864001F091E /* wander.c */; }; AF4771AD099D4949001F091E /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF4771B9099D4981001F091E /* t3d.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC259210988A469000655EE /* t3d.xml */; }; AF4771BB099D4997001F091E /* t3d.c in Sources */ = {isa = PBXBuildFile; fileRef = AF4771BA099D4997001F091E /* t3d.c */; }; AF4771E1099D4D9A001F091E /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF4771EE099D4DE5001F091E /* ccurve.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258840988A468000655EE /* ccurve.xml */; }; AF4771F0099D4DFE001F091E /* ccurve.c in Sources */ = {isa = PBXBuildFile; fileRef = AF4771EF099D4DFE001F091E /* ccurve.c */; }; AF4771F8099D4E63001F091E /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF477204099D4EA2001F091E /* nerverot.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258EB0988A469000655EE /* nerverot.xml */; }; AF477206099D4EB6001F091E /* nerverot.c in Sources */ = {isa = PBXBuildFile; fileRef = AF477205099D4EB6001F091E /* nerverot.c */; }; AF47720E099D4EE8001F091E /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF47721A099D4F27001F091E /* whirlygig.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC2592F0988A469000655EE /* whirlygig.xml */; }; AF47721C099D4F47001F091E /* whirlygig.c in Sources */ = {isa = PBXBuildFile; fileRef = AF47721B099D4F47001F091E /* whirlygig.c */; }; AF477224099D4F67001F091E /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF477230099D4FBD001F091E /* anemone.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258680988A468000655EE /* anemone.xml */; }; AF477232099D4FD5001F091E /* anemone.c in Sources */ = {isa = PBXBuildFile; fileRef = AF477231099D4FD5001F091E /* anemone.c */; }; AF477259099D5717001F091E /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF477265099D5752001F091E /* halftone.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258C20988A468000655EE /* halftone.xml */; }; AF477267099D5768001F091E /* halftone.c in Sources */ = {isa = PBXBuildFile; fileRef = AF477266099D5768001F091E /* halftone.c */; }; AF477271099D57B9001F091E /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF47727D099D57F5001F091E /* popsquares.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258FB0988A469000655EE /* popsquares.xml */; }; AF47727F099D5808001F091E /* popsquares.c in Sources */ = {isa = PBXBuildFile; fileRef = AF47727E099D5808001F091E /* popsquares.c */; }; AF477289099D5926001F091E /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF477296099D596A001F091E /* piecewise.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258F40988A469000655EE /* piecewise.xml */; }; AF477298099D5980001F091E /* piecewise.c in Sources */ = {isa = PBXBuildFile; fileRef = AF477297099D5980001F091E /* piecewise.c */; }; AF477388099D65A1001F091E /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF477394099D65EB001F091E /* wormhole.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC259310988A469000655EE /* wormhole.xml */; }; AF477396099D65FE001F091E /* wormhole.c in Sources */ = {isa = PBXBuildFile; fileRef = AF477395099D65FE001F091E /* wormhole.c */; }; AF4773A0099D6648001F091E /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF4773AC099D6762001F091E /* fuzzyflakes.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258B00988A468000655EE /* fuzzyflakes.xml */; }; AF4773B5099D6778001F091E /* fuzzyflakes.c in Sources */ = {isa = PBXBuildFile; fileRef = AF4773B4099D6778001F091E /* fuzzyflakes.c */; }; AF4773C7099D67B9001F091E /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF4773D3099D6804001F091E /* anemotaxis.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258690988A468000655EE /* anemotaxis.xml */; }; AF4773D5099D6817001F091E /* anemotaxis.c in Sources */ = {isa = PBXBuildFile; fileRef = AF4773D4099D6817001F091E /* anemotaxis.c */; }; AF477408099D69E7001F091E /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF47741B099D6A58001F091E /* intermomentary.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258CD0988A468000655EE /* intermomentary.xml */; }; AF47741D099D6A6D001F091E /* intermomentary.c in Sources */ = {isa = PBXBuildFile; fileRef = AF47741C099D6A6C001F091E /* intermomentary.c */; }; AF47742D099D7C70001F091E /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF477439099D7CD0001F091E /* ifs.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258C90988A468000655EE /* ifs.xml */; }; AF47743B099D7CEA001F091E /* ifs.c in Sources */ = {isa = PBXBuildFile; fileRef = AF47743A099D7CEA001F091E /* ifs.c */; }; AF477448099D7D33001F091E /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF477454099D7D75001F091E /* xmatrix.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC2593A0988A469000655EE /* xmatrix.xml */; }; AF477456099D7D8A001F091E /* xmatrix.c in Sources */ = {isa = PBXBuildFile; fileRef = AF477455099D7D8A001F091E /* xmatrix.c */; }; AF477489099D89E4001F091E /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF477495099D8A3A001F091E /* flame.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258A60988A468000655EE /* flame.xml */; }; AF477497099D8A53001F091E /* flame.c in Sources */ = {isa = PBXBuildFile; fileRef = AF477496099D8A53001F091E /* flame.c */; }; AF47749F099D8A74001F091E /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF4774AB099D8AF3001F091E /* kaleidescope.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258D30988A468000655EE /* kaleidescope.xml */; }; AF4774AD099D8B08001F091E /* kaleidescope.c in Sources */ = {isa = PBXBuildFile; fileRef = AF4774AC099D8B08001F091E /* kaleidescope.c */; }; AF4774BA099D8B5F001F091E /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF4774CA099D8BAE001F091E /* lmorph.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258DC0988A468000655EE /* lmorph.xml */; }; AF4774CC099D8BC2001F091E /* lmorph.c in Sources */ = {isa = PBXBuildFile; fileRef = AF4774CB099D8BC2001F091E /* lmorph.c */; }; AF4774D4099D8BFF001F091E /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF4774E0099D8C74001F091E /* maze.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258DE0988A468000655EE /* maze.xml */; }; AF4774E2099D8C8B001F091E /* maze.c in Sources */ = {isa = PBXBuildFile; fileRef = AF4774E1099D8C8B001F091E /* maze.c */; }; AF4774E8099D8D8C001F091E /* logo.c in Sources */ = {isa = PBXBuildFile; fileRef = AF4774E7099D8D8C001F091E /* logo.c */; }; AF477563099D9A1A001F091E /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF47756F099D9A70001F091E /* pedal.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258EF0988A469000655EE /* pedal.xml */; }; AF477571099D9A8A001F091E /* pedal.c in Sources */ = {isa = PBXBuildFile; fileRef = AF477570099D9A8A001F091E /* pedal.c */; }; AF477589099D9C28001F091E /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF47759B099D9C8D001F091E /* pyro.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258FE0988A469000655EE /* pyro.xml */; }; AF47759D099D9CA3001F091E /* pyro.c in Sources */ = {isa = PBXBuildFile; fileRef = AF47759C099D9CA3001F091E /* pyro.c */; }; AF4775A5099D9CF7001F091E /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF4775B1099D9D51001F091E /* starfish.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC2591A0988A469000655EE /* starfish.xml */; }; AF4775B4099D9D67001F091E /* starfish.c in Sources */ = {isa = PBXBuildFile; fileRef = AF4775B3099D9D67001F091E /* starfish.c */; }; AF4775C0099D9E79001F091E /* resources.c in Sources */ = {isa = PBXBuildFile; fileRef = AF4775BE099D9E79001F091E /* resources.c */; }; AF4775C1099D9E79001F091E /* resources.h in Headers */ = {isa = PBXBuildFile; fileRef = AF4775BF099D9E79001F091E /* resources.h */; }; AF4775DE099D9F69001F091E /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF4775EC099D9FDB001F091E /* coral.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258890988A468000655EE /* coral.xml */; }; AF4775F0099D9FFF001F091E /* coral.c in Sources */ = {isa = PBXBuildFile; fileRef = AF4775EF099D9FFF001F091E /* coral.c */; }; AF4775F8099DA030001F091E /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF477604099DA083001F091E /* epicycle.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC2589D0988A468000655EE /* epicycle.xml */; }; AF477606099DA097001F091E /* epicycle.c in Sources */ = {isa = PBXBuildFile; fileRef = AF477605099DA097001F091E /* epicycle.c */; }; AF477619099DA26C001F091E /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF477629099DA2D2001F091E /* kumppa.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258D50988A468000655EE /* kumppa.xml */; }; AF47762B099DA2E9001F091E /* kumppa.c in Sources */ = {isa = PBXBuildFile; fileRef = AF47762A099DA2E9001F091E /* kumppa.c */; }; AF47764A099DA6D0001F091E /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF477656099DA738001F091E /* squiral.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC259170988A469000655EE /* squiral.xml */; }; AF477658099DA75D001F091E /* squiral.c in Sources */ = {isa = PBXBuildFile; fileRef = AF477657099DA75D001F091E /* squiral.c */; }; AF477660099DA78E001F091E /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF47766C099DA7F3001F091E /* critical.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC2588C0988A468000655EE /* critical.xml */; }; AF47766E099DA80D001F091E /* critical.c in Sources */ = {isa = PBXBuildFile; fileRef = AF47766D099DA80D001F091E /* critical.c */; }; AF477676099DA849001F091E /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF477682099DA8AC001F091E /* petri.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258F20988A469000655EE /* petri.xml */; }; AF477684099DA8C7001F091E /* petri.c in Sources */ = {isa = PBXBuildFile; fileRef = AF477683099DA8C7001F091E /* petri.c */; }; AF477695099DAA6F001F091E /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF4776A1099DAAC9001F091E /* blaster.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258740988A468000655EE /* blaster.xml */; }; AF4776A3099DAADE001F091E /* blaster.c in Sources */ = {isa = PBXBuildFile; fileRef = AF4776A2099DAADE001F091E /* blaster.c */; }; AF4776B0099DABDD001F091E /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF4776BC099DAC29001F091E /* xspirograph.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC2593F0988A469000655EE /* xspirograph.xml */; }; AF4776BE099DAC46001F091E /* xspirograph.c in Sources */ = {isa = PBXBuildFile; fileRef = AF4776BD099DAC46001F091E /* xspirograph.c */; }; AF4776C6099DAC8A001F091E /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF4776D2099DACD6001F091E /* xrayswarm.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC2593D0988A469000655EE /* xrayswarm.xml */; }; AF4776D4099DACEB001F091E /* xrayswarm.c in Sources */ = {isa = PBXBuildFile; fileRef = AF4776D3099DACEB001F091E /* xrayswarm.c */; }; AF4776E1099DADDF001F091E /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF4776ED099DAE38001F091E /* whirlwindwarp.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC2592D0988A469000655EE /* whirlwindwarp.xml */; }; AF4776EF099DAE58001F091E /* whirlwindwarp.c in Sources */ = {isa = PBXBuildFile; fileRef = AF4776EE099DAE58001F091E /* whirlwindwarp.c */; }; AF4776F7099DAE7A001F091E /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF477703099DAF24001F091E /* vermiculate.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC259280988A469000655EE /* vermiculate.xml */; }; AF477705099DAF3F001F091E /* vermiculate.c in Sources */ = {isa = PBXBuildFile; fileRef = AF477704099DAF3F001F091E /* vermiculate.c */; }; AF477713099DAF9F001F091E /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF47771F099DB000001F091E /* cloudlife.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258870988A468000655EE /* cloudlife.xml */; }; AF477721099DB01C001F091E /* cloudlife.c in Sources */ = {isa = PBXBuildFile; fileRef = AF477720099DB01C001F091E /* cloudlife.c */; }; AF477729099DB044001F091E /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF477735099DB0ED001F091E /* substrate.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC2591E0988A469000655EE /* substrate.xml */; }; AF477737099DB104001F091E /* substrate.c in Sources */ = {isa = PBXBuildFile; fileRef = AF477736099DB104001F091E /* substrate.c */; }; AF477758099DB61E001F091E /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF477768099DB6FD001F091E /* interaggregate.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258CB0988A468000655EE /* interaggregate.xml */; }; AF47776A099DB710001F091E /* interaggregate.c in Sources */ = {isa = PBXBuildFile; fileRef = AF477769099DB710001F091E /* interaggregate.c */; }; AF47777A099DB965001F091E /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF477786099DBA11001F091E /* celtic.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258850988A468000655EE /* celtic.xml */; }; AF477788099DBA29001F091E /* celtic.c in Sources */ = {isa = PBXBuildFile; fileRef = AF477787099DBA29001F091E /* celtic.c */; }; AF477796099DBA90001F091E /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF4777A3099DBAF8001F091E /* fluidballs.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258AB0988A468000655EE /* fluidballs.xml */; }; AF4777A5099DBB12001F091E /* fluidballs.c in Sources */ = {isa = PBXBuildFile; fileRef = AF4777A4099DBB11001F091E /* fluidballs.c */; }; AF4777D7099DC183001F091E /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF4778A2099DDA76001F091E /* boxfit.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC2587C0988A468000655EE /* boxfit.xml */; }; AF4778A4099DDA91001F091E /* boxfit.c in Sources */ = {isa = PBXBuildFile; fileRef = AF4778A3099DDA91001F091E /* boxfit.c */; }; AF4778B1099DDB79001F091E /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF4778BD099DDC1B001F091E /* penetrate.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258F00988A469000655EE /* penetrate.xml */; }; AF4778BF099DDC33001F091E /* penetrate.c in Sources */ = {isa = PBXBuildFile; fileRef = AF4778BE099DDC32001F091E /* penetrate.c */; }; AF4778CD099DDCAE001F091E /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF4778D9099DDD14001F091E /* xjack.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC259380988A469000655EE /* xjack.xml */; }; AF4778DB099DDD2B001F091E /* xjack.c in Sources */ = {isa = PBXBuildFile; fileRef = AF4778DA099DDD2B001F091E /* xjack.c */; }; AF4778EE099DDDC8001F091E /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF4778FA099DDE5F001F091E /* cynosure.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258910988A468000655EE /* cynosure.xml */; }; AF4778FC099DDE79001F091E /* cynosure.c in Sources */ = {isa = PBXBuildFile; fileRef = AF4778FB099DDE79001F091E /* cynosure.c */; }; AF47790F099DE379001F091E /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF47791B099DE3D9001F091E /* flag.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258A50988A468000655EE /* flag.xml */; }; AF47791D099DE3F1001F091E /* flag.c in Sources */ = {isa = PBXBuildFile; fileRef = AF47791C099DE3F1001F091E /* flag.c */; }; AF477930099DE4C7001F091E /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF47793C099DE535001F091E /* slip.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC2590E0988A469000655EE /* slip.xml */; }; AF47793E099DE56A001F091E /* slip.c in Sources */ = {isa = PBXBuildFile; fileRef = AF47793D099DE56A001F091E /* slip.c */; }; AF4808C5098C3BDC00FB32B8 /* colors.c in Sources */ = {isa = PBXBuildFile; fileRef = AFC25B990988BC08000655EE /* colors.c */; }; AF4808C6098C3BDF00FB32B8 /* erase.c in Sources */ = {isa = PBXBuildFile; fileRef = AFE1FD530981E3CB00F7970E /* erase.c */; }; AF4808C7098C3BE600FB32B8 /* hsv.c in Sources */ = {isa = PBXBuildFile; fileRef = AFE1FD550981E3CB00F7970E /* hsv.c */; }; AF4808C8098C3BE800FB32B8 /* InvertedSlider.m in Sources */ = {isa = PBXBuildFile; fileRef = AFE1FD420981E32E00F7970E /* InvertedSlider.m */; }; AF4808C9098C3BEC00FB32B8 /* jwxyz.m in Sources */ = {isa = PBXBuildFile; fileRef = AFE1FD440981E32E00F7970E /* jwxyz.m */; }; AF4808CA098C3BEE00FB32B8 /* PrefsReader.m in Sources */ = {isa = PBXBuildFile; fileRef = AFE1FD480981E32E00F7970E /* PrefsReader.m */; }; AF4808CC098C3BF200FB32B8 /* spline.c in Sources */ = {isa = PBXBuildFile; fileRef = AFE1FD570981E3CB00F7970E /* spline.c */; }; AF4808CD098C3BF400FB32B8 /* usleep.c in Sources */ = {isa = PBXBuildFile; fileRef = AFB5A0ED0981FF8B00871B16 /* usleep.c */; }; AF4808CE098C3BF800FB32B8 /* XScreenSaverConfigSheet.m in Sources */ = {isa = PBXBuildFile; fileRef = AFC2578009888F5A000655EE /* XScreenSaverConfigSheet.m */; }; AF4808CF098C3BFB00FB32B8 /* XScreenSaverView.m in Sources */ = {isa = PBXBuildFile; fileRef = AFC254C509882C97000655EE /* XScreenSaverView.m */; }; AF4808D0098C3BFD00FB32B8 /* yarandom.c in Sources */ = {isa = PBXBuildFile; fileRef = AFE1FD5B0981E3CB00F7970E /* yarandom.c */; }; AF480C5C098E305900FB32B8 /* helix.c in Sources */ = {isa = PBXBuildFile; fileRef = AF480C2F098E2A6700FB32B8 /* helix.c */; }; AF480C69098E309E00FB32B8 /* helix.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258C40988A468000655EE /* helix.xml */; }; AF480D85098EEE3100FB32B8 /* drift.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258990988A468000655EE /* drift.xml */; }; AF480D88098EEE5B00FB32B8 /* drift.c in Sources */ = {isa = PBXBuildFile; fileRef = AF480C82098E336D00FB32B8 /* drift.c */; }; AF480FCC09901DF900FB32B8 /* gltrackball.c in Sources */ = {isa = PBXBuildFile; fileRef = AF480EB0098F63D600FB32B8 /* gltrackball.c */; }; AF480FCD09901E0000FB32B8 /* rotator.c in Sources */ = {isa = PBXBuildFile; fileRef = AF480EB7098F646400FB32B8 /* rotator.c */; }; AF480FCE09901E0400FB32B8 /* sphere.c in Sources */ = {isa = PBXBuildFile; fileRef = AF480EBB098F649600FB32B8 /* sphere.c */; }; AF480FCF09901E0700FB32B8 /* trackball.c in Sources */ = {isa = PBXBuildFile; fileRef = AF480EAD098F63BE00FB32B8 /* trackball.c */; }; AF480FD009901E0A00FB32B8 /* tube.c in Sources */ = {isa = PBXBuildFile; fileRef = AF480ED2098F652A00FB32B8 /* tube.c */; }; AF4811030990A02700FB32B8 /* dangerball.c in Sources */ = {isa = PBXBuildFile; fileRef = AF480DD1098F4F6200FB32B8 /* dangerball.c */; }; AF4811440990A35B00FB32B8 /* dangerball.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258920988A468000655EE /* dangerball.xml */; }; AF4812580990CE2700FB32B8 /* gears.c in Sources */ = {isa = PBXBuildFile; fileRef = AF4812250990CB8C00FB32B8 /* gears.c */; }; AF48126D0990CE8600FB32B8 /* gears.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258B20988A468000655EE /* gears.xml */; }; AF4812C80990D41700FB32B8 /* pipes.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258F60988A469000655EE /* pipes.xml */; }; AF4812C90990D41E00FB32B8 /* buildlwo.c in Sources */ = {isa = PBXBuildFile; fileRef = AF4812760990CF5D00FB32B8 /* buildlwo.c */; }; AF4812CA0990D42000FB32B8 /* pipeobjs.c in Sources */ = {isa = PBXBuildFile; fileRef = AF4812780990CF5D00FB32B8 /* pipeobjs.c */; }; AF4812CB0990D42100FB32B8 /* pipes.c in Sources */ = {isa = PBXBuildFile; fileRef = AF4812790990CF5D00FB32B8 /* pipes.c */; }; AF4812FA0990D9AE00FB32B8 /* XScreenSaverGLView.m in Sources */ = {isa = PBXBuildFile; fileRef = AF4812F80990D9AE00FB32B8 /* XScreenSaverGLView.m */; }; AF48DEF60A0C25E000F94CF9 /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF48E1680A0C268500F94CF9 /* glschool_alg.c in Sources */ = {isa = PBXBuildFile; fileRef = AF48E1620A0C268400F94CF9 /* glschool_alg.c */; }; AF48E1690A0C268500F94CF9 /* glschool_gl.c in Sources */ = {isa = PBXBuildFile; fileRef = AF48E1640A0C268500F94CF9 /* glschool_gl.c */; }; AF48E16A0A0C268500F94CF9 /* glschool.c in Sources */ = {isa = PBXBuildFile; fileRef = AF48E1660A0C268500F94CF9 /* glschool.c */; }; AF48E16C0A0C26A400F94CF9 /* glschool.xml in Resources */ = {isa = PBXBuildFile; fileRef = AF48E16B0A0C26A400F94CF9 /* glschool.xml */; }; AF4A3450102A593600A81B2A /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF4A3462102A59EB00A81B2A /* surfaces.xml in Resources */ = {isa = PBXBuildFile; fileRef = AF4A3461102A59EB00A81B2A /* surfaces.xml */; }; AF4A3464102A5A0E00A81B2A /* surfaces.c in Sources */ = {isa = PBXBuildFile; fileRef = AF4A3463102A5A0E00A81B2A /* surfaces.c */; }; AF4A6692191F7CAE00C74753 /* xscreensaver-getimage-file in Resources */ = {isa = PBXBuildFile; fileRef = AF0FAF1209CA712600EE1051 /* xscreensaver-getimage-file */; }; AF4A8CA010B609B50074B062 /* xscreensaver-getimage-file in Resources */ = {isa = PBXBuildFile; fileRef = AF0FAF1209CA712600EE1051 /* xscreensaver-getimage-file */; }; AF4FD6EC0CE7A486005EE58E /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF4FD7010CE7A577005EE58E /* lockward.c in Sources */ = {isa = PBXBuildFile; fileRef = AF4FD7000CE7A577005EE58E /* lockward.c */; }; AF4FD7030CE7A5BC005EE58E /* lockward.xml in Resources */ = {isa = PBXBuildFile; fileRef = AF4FD7020CE7A5BC005EE58E /* lockward.xml */; }; AF4FF4C10D52CBDE00666F98 /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF4FF4D10D52CC8400666F98 /* cubicgrid.c in Sources */ = {isa = PBXBuildFile; fileRef = AF4FF4D00D52CC8400666F98 /* cubicgrid.c */; }; AF4FF4D40D52CCAA00666F98 /* cubicgrid.xml in Resources */ = {isa = PBXBuildFile; fileRef = AF4FF4D30D52CCAA00666F98 /* cubicgrid.xml */; }; AF51FD3915845FCB00E5741F /* SaverRunner.icns in Resources */ = {isa = PBXBuildFile; fileRef = AF2D522513E954A0002AA818 /* SaverRunner.icns */; }; AF561DF615969BC3007CA5ED /* grabclient-ios.m in Sources */ = {isa = PBXBuildFile; fileRef = AF561DF515969BC3007CA5ED /* grabclient-ios.m */; }; AF561DF815969C5B007CA5ED /* AssetsLibrary.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF561DF715969C5B007CA5ED /* AssetsLibrary.framework */; }; AF5BEEFD1D2AFE21002E6D51 /* OCRAStd.otf in Resources */ = {isa = PBXBuildFile; fileRef = AFEC68361BD6CA85004C1B64 /* OCRAStd.otf */; }; AF5C9AFD1A0CCE6E00B0147A /* dangerball.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258920988A468000655EE /* dangerball.xml */; }; AF5C9B001A0CCE6E00B0147A /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF5C9B021A0CCE6E00B0147A /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF5C9B031A0CCE6E00B0147A /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF5C9B041A0CCE6E00B0147A /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF5C9B051A0CCE6E00B0147A /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF5C9B061A0CCE6E00B0147A /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF5C9B071A0CCE6E00B0147A /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF5C9B111A0CCF4E00B0147A /* cityflow.xml in Resources */ = {isa = PBXBuildFile; fileRef = AF5C9B0F1A0CCF4E00B0147A /* cityflow.xml */; }; AF5C9B121A0CCF4E00B0147A /* cityflow.xml in Resources */ = {isa = PBXBuildFile; fileRef = AF5C9B0F1A0CCF4E00B0147A /* cityflow.xml */; }; AF5C9B131A0CCF4E00B0147A /* cityflow.c in Sources */ = {isa = PBXBuildFile; fileRef = AF5C9B101A0CCF4E00B0147A /* cityflow.c */; }; AF5C9B141A0CCF4E00B0147A /* cityflow.c in Sources */ = {isa = PBXBuildFile; fileRef = AF5C9B101A0CCF4E00B0147A /* cityflow.c */; settings = {COMPILER_FLAGS = "-DUSE_GL"; }; }; 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 */; }; AF63A7F81AB4EDDB00593C75 /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF63A7FA1AB4EDDB00593C75 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF63A7FB1AB4EDDB00593C75 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF63A7FC1AB4EDDB00593C75 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF63A7FD1AB4EDDB00593C75 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF63A7FE1AB4EDDB00593C75 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF63A7FF1AB4EDDB00593C75 /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; AF63A8001AB4EDDB00593C75 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF63A80A1AB4EF5D00593C75 /* romanboy.xml in Resources */ = {isa = PBXBuildFile; fileRef = AF63A8081AB4EF5D00593C75 /* romanboy.xml */; }; AF63A80B1AB4EF5D00593C75 /* romanboy.xml in Resources */ = {isa = PBXBuildFile; fileRef = AF63A8081AB4EF5D00593C75 /* romanboy.xml */; }; AF63A80C1AB4EF5D00593C75 /* romanboy.c in Sources */ = {isa = PBXBuildFile; fileRef = AF63A8091AB4EF5D00593C75 /* romanboy.c */; }; AF63A80D1AB4EF5D00593C75 /* romanboy.c in Sources */ = {isa = PBXBuildFile; fileRef = AF63A8091AB4EF5D00593C75 /* romanboy.c */; settings = {COMPILER_FLAGS = "-DUSE_GL"; }; }; AF63F2511C3465BE0033E133 /* iSaverRunner.xib in Resources */ = {isa = PBXBuildFile; fileRef = AF56019B157DAA3D00DB2055 /* iSaverRunner.xib */; }; AF63F2521C3465BE0033E133 /* LaunchScreen.xib in Resources */ = {isa = PBXBuildFile; fileRef = 55EDCB3C1AD498A800251909 /* LaunchScreen.xib */; }; AF63F2531C3465BE0033E133 /* iSaverRunner57t.png in Resources */ = {isa = PBXBuildFile; fileRef = AF73FF201A08AB9400E485E9 /* iSaverRunner57t.png */; }; AF63F25D1C3465BE0033E133 /* apple2.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC2586F0988A468000655EE /* apple2.xml */; }; AF63F2B71C3465BE0033E133 /* Media-iOS.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 550FB5FD1AD64424001A4FA5 /* Media-iOS.xcassets */; }; AF63F3281C3465BE0033E133 /* SaverRunner.m in Sources */ = {isa = PBXBuildFile; fileRef = AFE1FD400981E32E00F7970E /* SaverRunner.m */; }; AF63F3291C3465BE0033E133 /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 29B97316FDCFA39411CA2CEA /* main.m */; }; AF63F32A1C3465BE0033E133 /* SaverListController.m in Sources */ = {isa = PBXBuildFile; fileRef = AF84AF1E15829AF000607E4C /* SaverListController.m */; }; AF63F32D1C3465BE0033E133 /* analogtv.c in Sources */ = {isa = PBXBuildFile; fileRef = AF9D4CFA09B5AC94006E59CF /* analogtv.c */; }; AF63F32F1C3465BE0033E133 /* apple2-main.c in Sources */ = {isa = PBXBuildFile; fileRef = AF9D4E0509B5BC9D006E59CF /* apple2-main.c */; }; AF63F3301C3465BE0033E133 /* apple2.c in Sources */ = {isa = PBXBuildFile; fileRef = AF9D4DD309B5B990006E59CF /* apple2.c */; }; AF63F43F1C3465BE0033E133 /* ios-function-table.m in Sources */ = {isa = PBXBuildFile; fileRef = AFAA6B441773F07700DE720C /* ios-function-table.m */; }; AF63F4411C3465BE0033E133 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF63F4421C3465BE0033E133 /* OpenGLES.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AFEB9C3A1590054B003974F3 /* OpenGLES.framework */; }; AF63F4431C3465BE0033E133 /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AFEB9C3815900514003974F3 /* UIKit.framework */; }; AF63F4441C3465BE0033E133 /* AssetsLibrary.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF561DF715969C5B007CA5ED /* AssetsLibrary.framework */; }; AF63F4451C3465BE0033E133 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AFEB9C3C15900558003974F3 /* Foundation.framework */; }; AF63F4461C3465BE0033E133 /* CoreGraphics.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AFEB9C3E1590056A003974F3 /* CoreGraphics.framework */; }; AF63F4471C3465BE0033E133 /* CoreText.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF0FAF3B159BAC7B00BCE2F7 /* CoreText.framework */; }; AF63F4481C3465BE0033E133 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AFEB9C3F1590056A003974F3 /* QuartzCore.framework */; }; AF63F4491C3465BE0033E133 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78377C17DBA85D003B9FC0 /* libz.dylib */; }; AF63F4591C34682A0033E133 /* iSaverRunner.xib in Resources */ = {isa = PBXBuildFile; fileRef = AF56019B157DAA3D00DB2055 /* iSaverRunner.xib */; }; AF63F45A1C34682A0033E133 /* LaunchScreen.xib in Resources */ = {isa = PBXBuildFile; fileRef = 55EDCB3C1AD498A800251909 /* LaunchScreen.xib */; }; AF63F45B1C34682A0033E133 /* iSaverRunner57t.png in Resources */ = {isa = PBXBuildFile; fileRef = AF73FF201A08AB9400E485E9 /* iSaverRunner57t.png */; }; AF63F45D1C34682A0033E133 /* Media-iOS.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 550FB5FD1AD64424001A4FA5 /* Media-iOS.xcassets */; }; AF63F45F1C34682A0033E133 /* SaverRunner.m in Sources */ = {isa = PBXBuildFile; fileRef = AFE1FD400981E32E00F7970E /* SaverRunner.m */; }; AF63F4601C34682A0033E133 /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 29B97316FDCFA39411CA2CEA /* main.m */; }; AF63F4611C34682A0033E133 /* SaverListController.m in Sources */ = {isa = PBXBuildFile; fileRef = AF84AF1E15829AF000607E4C /* SaverListController.m */; }; AF63F4651C34682A0033E133 /* ios-function-table.m in Sources */ = {isa = PBXBuildFile; fileRef = AFAA6B441773F07700DE720C /* ios-function-table.m */; }; AF63F4671C34682A0033E133 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF63F4681C34682A0033E133 /* OpenGLES.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AFEB9C3A1590054B003974F3 /* OpenGLES.framework */; }; AF63F4691C34682A0033E133 /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AFEB9C3815900514003974F3 /* UIKit.framework */; }; AF63F46A1C34682A0033E133 /* AssetsLibrary.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF561DF715969C5B007CA5ED /* AssetsLibrary.framework */; }; AF63F46B1C34682A0033E133 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AFEB9C3C15900558003974F3 /* Foundation.framework */; }; AF63F46C1C34682A0033E133 /* CoreGraphics.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AFEB9C3E1590056A003974F3 /* CoreGraphics.framework */; }; AF63F46D1C34682A0033E133 /* CoreText.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF0FAF3B159BAC7B00BCE2F7 /* CoreText.framework */; }; AF63F46E1C34682A0033E133 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AFEB9C3F1590056A003974F3 /* QuartzCore.framework */; }; AF63F46F1C34682A0033E133 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78377C17DBA85D003B9FC0 /* libz.dylib */; }; AF63F4761C3469410033E133 /* phosphor.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258F30988A469000655EE /* phosphor.xml */; }; AF63F4771C3469570033E133 /* phosphor.c in Sources */ = {isa = PBXBuildFile; fileRef = AF77770309B63B5F00EA3033 /* phosphor.c */; }; AF63F4811C3469FC0033E133 /* iSaverRunner.xib in Resources */ = {isa = PBXBuildFile; fileRef = AF56019B157DAA3D00DB2055 /* iSaverRunner.xib */; }; AF63F4821C3469FC0033E133 /* LaunchScreen.xib in Resources */ = {isa = PBXBuildFile; fileRef = 55EDCB3C1AD498A800251909 /* LaunchScreen.xib */; }; AF63F4831C3469FC0033E133 /* iSaverRunner57t.png in Resources */ = {isa = PBXBuildFile; fileRef = AF73FF201A08AB9400E485E9 /* iSaverRunner57t.png */; }; AF63F4851C3469FC0033E133 /* Media-iOS.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 550FB5FD1AD64424001A4FA5 /* Media-iOS.xcassets */; }; AF63F4871C3469FC0033E133 /* SaverRunner.m in Sources */ = {isa = PBXBuildFile; fileRef = AFE1FD400981E32E00F7970E /* SaverRunner.m */; }; AF63F4881C3469FC0033E133 /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 29B97316FDCFA39411CA2CEA /* main.m */; }; AF63F4891C3469FC0033E133 /* SaverListController.m in Sources */ = {isa = PBXBuildFile; fileRef = AF84AF1E15829AF000607E4C /* SaverListController.m */; }; AF63F48B1C3469FC0033E133 /* ios-function-table.m in Sources */ = {isa = PBXBuildFile; fileRef = AFAA6B441773F07700DE720C /* ios-function-table.m */; }; AF63F48D1C3469FC0033E133 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF63F48E1C3469FC0033E133 /* OpenGLES.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AFEB9C3A1590054B003974F3 /* OpenGLES.framework */; }; AF63F48F1C3469FC0033E133 /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AFEB9C3815900514003974F3 /* UIKit.framework */; }; AF63F4901C3469FC0033E133 /* AssetsLibrary.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF561DF715969C5B007CA5ED /* AssetsLibrary.framework */; }; AF63F4911C3469FC0033E133 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AFEB9C3C15900558003974F3 /* Foundation.framework */; }; AF63F4921C3469FC0033E133 /* CoreGraphics.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AFEB9C3E1590056A003974F3 /* CoreGraphics.framework */; }; AF63F4931C3469FC0033E133 /* CoreText.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF0FAF3B159BAC7B00BCE2F7 /* CoreText.framework */; }; AF63F4941C3469FC0033E133 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AFEB9C3F1590056A003974F3 /* QuartzCore.framework */; }; AF63F4951C3469FC0033E133 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78377C17DBA85D003B9FC0 /* libz.dylib */; }; AF63F49C1C346B0A0033E133 /* testx11.xml in Resources */ = {isa = PBXBuildFile; fileRef = CE3D01681B76F83E00993C75 /* testx11.xml */; }; AF63F49D1C346B1A0033E133 /* testx11.c in Sources */ = {isa = PBXBuildFile; fileRef = CE3D016A1B76F8E200993C75 /* testx11.c */; }; AF64232F099F45C3000F4CD4 /* braid.c in Sources */ = {isa = PBXBuildFile; fileRef = AFD56EC10996A76F00BA26F7 /* braid.c */; }; AF642330099F45CA000F4CD4 /* braid.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC2587D0988A468000655EE /* braid.xml */; }; AF6423F9099FF9C2000F4CD4 /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF642408099FFAB0000F4CD4 /* extrusion.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258A00988A468000655EE /* extrusion.xml */; }; AF642412099FFAF1000F4CD4 /* extrusion-helix2.c in Sources */ = {isa = PBXBuildFile; fileRef = AF642409099FFAF0000F4CD4 /* extrusion-helix2.c */; }; AF642413099FFAF1000F4CD4 /* extrusion-helix3.c in Sources */ = {isa = PBXBuildFile; fileRef = AF64240A099FFAF0000F4CD4 /* extrusion-helix3.c */; }; AF642414099FFAF1000F4CD4 /* extrusion-helix4.c in Sources */ = {isa = PBXBuildFile; fileRef = AF64240B099FFAF0000F4CD4 /* extrusion-helix4.c */; }; AF642415099FFAF1000F4CD4 /* extrusion-joinoffset.c in Sources */ = {isa = PBXBuildFile; fileRef = AF64240C099FFAF0000F4CD4 /* extrusion-joinoffset.c */; }; AF642416099FFAF1000F4CD4 /* extrusion-screw.c in Sources */ = {isa = PBXBuildFile; fileRef = AF64240D099FFAF0000F4CD4 /* extrusion-screw.c */; }; AF642417099FFAF1000F4CD4 /* extrusion-taper.c in Sources */ = {isa = PBXBuildFile; fileRef = AF64240E099FFAF0000F4CD4 /* extrusion-taper.c */; }; AF642418099FFAF1000F4CD4 /* extrusion-twistoid.c in Sources */ = {isa = PBXBuildFile; fileRef = AF64240F099FFAF1000F4CD4 /* extrusion-twistoid.c */; }; AF642419099FFAF1000F4CD4 /* extrusion.c in Sources */ = {isa = PBXBuildFile; fileRef = AF642410099FFAF1000F4CD4 /* extrusion.c */; }; AF6425D209A18855000F4CD4 /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF6425DE09A188D7000F4CD4 /* hypercube.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258C70988A468000655EE /* hypercube.xml */; }; AF6425E009A188FB000F4CD4 /* hypercube.c in Sources */ = {isa = PBXBuildFile; fileRef = AF6425DF09A188FB000F4CD4 /* hypercube.c */; }; AF6425F209A189EC000F4CD4 /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF6425FE09A18A77000F4CD4 /* qix.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258FF0988A469000655EE /* qix.xml */; }; AF64260009A18A94000F4CD4 /* qix.c in Sources */ = {isa = PBXBuildFile; fileRef = AF6425FF09A18A94000F4CD4 /* qix.c */; }; AF64261509A18D6C000F4CD4 /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF64262109A18DFF000F4CD4 /* hyperball.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258C60988A468000655EE /* hyperball.xml */; }; AF64262309A18E1E000F4CD4 /* hyperball.c in Sources */ = {isa = PBXBuildFile; fileRef = AF64262209A18E1E000F4CD4 /* hyperball.c */; }; AF64263209A18F54000F4CD4 /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF64263E09A18FCE000F4CD4 /* moire2.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258E60988A469000655EE /* moire2.xml */; }; AF64264009A18FEB000F4CD4 /* moire2.c in Sources */ = {isa = PBXBuildFile; fileRef = AF64263F09A18FEB000F4CD4 /* moire2.c */; }; AF64265509A19229000F4CD4 /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF64266109A1929A000F4CD4 /* munch.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258EA0988A469000655EE /* munch.xml */; }; AF64266309A192C5000F4CD4 /* munch.c in Sources */ = {isa = PBXBuildFile; fileRef = AF64266209A192C5000F4CD4 /* munch.c */; }; AF64268109A194B0000F4CD4 /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF64268D09A19525000F4CD4 /* goop.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258BF0988A468000655EE /* goop.xml */; }; AF64268F09A19542000F4CD4 /* goop.c in Sources */ = {isa = PBXBuildFile; fileRef = AF64268E09A19542000F4CD4 /* goop.c */; }; AF64277709A1D37A000F4CD4 /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF64278309A1D418000F4CD4 /* speedmine.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC259100988A469000655EE /* speedmine.xml */; }; AF64278809A1D433000F4CD4 /* speedmine.c in Sources */ = {isa = PBXBuildFile; fileRef = AF64278709A1D433000F4CD4 /* speedmine.c */; }; AF6427AE09A2DE36000F4CD4 /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF6427BA09A2DF09000F4CD4 /* bubbles.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258800988A468000655EE /* bubbles.xml */; }; AF6427BE09A2DF47000F4CD4 /* bubbles-default.c in Sources */ = {isa = PBXBuildFile; fileRef = AF6427BB09A2DF47000F4CD4 /* bubbles-default.c */; }; AF6427BF09A2DF47000F4CD4 /* bubbles.c in Sources */ = {isa = PBXBuildFile; fileRef = AF6427BC09A2DF47000F4CD4 /* bubbles.c */; }; AF68A48519196CF800D41CD1 /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF68A48719196CF800D41CD1 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF68A48819196CF800D41CD1 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF68A48919196CF800D41CD1 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF68A48A19196CF800D41CD1 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF68A48B19196CF800D41CD1 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF68A48C19196CF800D41CD1 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF68A49719196E3E00D41CD1 /* tessellimage.xml in Resources */ = {isa = PBXBuildFile; fileRef = AF68A49419196E3E00D41CD1 /* tessellimage.xml */; }; AF68A49819196E3E00D41CD1 /* tessellimage.xml in Resources */ = {isa = PBXBuildFile; fileRef = AF68A49419196E3E00D41CD1 /* tessellimage.xml */; }; AF68A49919196E3E00D41CD1 /* tessellimage.c in Sources */ = {isa = PBXBuildFile; fileRef = AF68A49519196E3E00D41CD1 /* tessellimage.c */; }; AF68A49A19196E3E00D41CD1 /* tessellimage.c in Sources */ = {isa = PBXBuildFile; fileRef = AF68A49519196E3E00D41CD1 /* tessellimage.c */; }; AF68A49B19196E3E00D41CD1 /* delaunay.c in Sources */ = {isa = PBXBuildFile; fileRef = AF68A49619196E3E00D41CD1 /* delaunay.c */; }; AF68A49C19196E3E00D41CD1 /* delaunay.c in Sources */ = {isa = PBXBuildFile; fileRef = AF68A49619196E3E00D41CD1 /* delaunay.c */; }; AF69640B0E4FE3470085DBCE /* teapot.c in Sources */ = {isa = PBXBuildFile; fileRef = AFC211930E4E30C800D87B6E /* teapot.c */; }; AF73FF211A08AB9400E485E9 /* iSaverRunner57t.png in Resources */ = {isa = PBXBuildFile; fileRef = AF73FF201A08AB9400E485E9 /* iSaverRunner57t.png */; }; AF73FF291A09877F00E485E9 /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF73FF2B1A09877F00E485E9 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF73FF2C1A09877F00E485E9 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF73FF2D1A09877F00E485E9 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF73FF2E1A09877F00E485E9 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF73FF2F1A09877F00E485E9 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF73FF301A09877F00E485E9 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF73FF391A09889700E485E9 /* binaryring.c in Sources */ = {isa = PBXBuildFile; fileRef = AF73FF381A09889700E485E9 /* binaryring.c */; }; AF73FF3A1A09889700E485E9 /* binaryring.c in Sources */ = {isa = PBXBuildFile; fileRef = AF73FF381A09889700E485E9 /* binaryring.c */; }; AF73FF3C1A0988C500E485E9 /* binaryring.xml in Resources */ = {isa = PBXBuildFile; fileRef = AF73FF3B1A0988C500E485E9 /* binaryring.xml */; }; AF73FF3D1A0988C500E485E9 /* binaryring.xml in Resources */ = {isa = PBXBuildFile; fileRef = AF73FF3B1A0988C500E485E9 /* binaryring.xml */; }; AF7511051782B5B900380EA1 /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF7511081782B5B900380EA1 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF7511091782B5B900380EA1 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF75110A1782B5B900380EA1 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF75110B1782B5B900380EA1 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF75110C1782B5B900380EA1 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF7511151782B64300380EA1 /* kaleidocycle.c in Sources */ = {isa = PBXBuildFile; fileRef = AF7511141782B64300380EA1 /* kaleidocycle.c */; }; AF7776EA09B63ABF00EA3033 /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF77770209B63B3900EA3033 /* phosphor.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258F30988A469000655EE /* phosphor.xml */; }; AF77770409B63B5F00EA3033 /* phosphor.c in Sources */ = {isa = PBXBuildFile; fileRef = AF77770309B63B5F00EA3033 /* phosphor.c */; }; AF77772009B6416100EA3033 /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF77772C09B641C800EA3033 /* pacman.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258EE0988A469000655EE /* pacman.xml */; }; AF77772D09B641D300EA3033 /* pacman.c in Sources */ = {isa = PBXBuildFile; fileRef = AF795015099751940059A8B0 /* pacman.c */; }; AF77772E09B641D400EA3033 /* pacman_ai.c in Sources */ = {isa = PBXBuildFile; fileRef = AF795011099751940059A8B0 /* pacman_ai.c */; }; AF77772F09B641D600EA3033 /* pacman_level.c in Sources */ = {isa = PBXBuildFile; fileRef = AF795013099751940059A8B0 /* pacman_level.c */; }; AF77774509B6446500EA3033 /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF77775309B644E300EA3033 /* flipscreen3d.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258A80988A468000655EE /* flipscreen3d.xml */; }; AF77775509B644FF00EA3033 /* flipscreen3d.c in Sources */ = {isa = PBXBuildFile; fileRef = AF77775409B644FF00EA3033 /* flipscreen3d.c */; }; AF77777A09B6497800EA3033 /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF77778A09B64A0D00EA3033 /* gleidescope.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258B50988A468000655EE /* gleidescope.xml */; }; AF77778C09B64A2A00EA3033 /* gleidescope.c in Sources */ = {isa = PBXBuildFile; fileRef = AF77778B09B64A2A00EA3033 /* gleidescope.c */; }; AF77779409B64A5200EA3033 /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF7777A409B64AE200EA3033 /* mirrorblob.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258E20988A469000655EE /* mirrorblob.xml */; }; AF7777A609B64AFC00EA3033 /* mirrorblob.c in Sources */ = {isa = PBXBuildFile; fileRef = AF7777A509B64AFC00EA3033 /* mirrorblob.c */; }; AF7777AE09B64B2600EA3033 /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF7777BE09B64BAC00EA3033 /* stonerview.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC2591C0988A469000655EE /* stonerview.xml */; }; AF7777C609B64BD400EA3033 /* stonerview-move.c in Sources */ = {isa = PBXBuildFile; fileRef = AF7777BF09B64BD400EA3033 /* stonerview-move.c */; }; AF7777C709B64BD400EA3033 /* stonerview-osc.c in Sources */ = {isa = PBXBuildFile; fileRef = AF7777C109B64BD400EA3033 /* stonerview-osc.c */; }; AF7777C809B64BD400EA3033 /* stonerview-view.c in Sources */ = {isa = PBXBuildFile; fileRef = AF7777C309B64BD400EA3033 /* stonerview-view.c */; }; AF7777C909B64BD400EA3033 /* stonerview.c in Sources */ = {isa = PBXBuildFile; fileRef = AF7777C409B64BD400EA3033 /* stonerview.c */; }; AF7777D609B64C6B00EA3033 /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF7777E609B64CD800EA3033 /* glslideshow.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258BB0988A468000655EE /* glslideshow.xml */; }; AF7777E809B64CF700EA3033 /* glslideshow.c in Sources */ = {isa = PBXBuildFile; fileRef = AF7777E709B64CF700EA3033 /* glslideshow.c */; }; AF7777F009B64E3100EA3033 /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF77780009B64EA800EA3033 /* fliptext.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258A90988A468000655EE /* fliptext.xml */; }; AF77780209B64EC000EA3033 /* fliptext.c in Sources */ = {isa = PBXBuildFile; fileRef = AF77780109B64EC000EA3033 /* fliptext.c */; }; AF77781609B6504400EA3033 /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF77782709B650D200EA3033 /* starwars.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC2591B0988A469000655EE /* starwars.xml */; }; AF77782A09B650FF00EA3033 /* starwars.c in Sources */ = {isa = PBXBuildFile; fileRef = AF77782809B650FF00EA3033 /* starwars.c */; }; AF77783409B6516900EA3033 /* grab-ximage.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA5607909936FDD00F3E977 /* grab-ximage.c */; }; AF77783709B6518400EA3033 /* texfont.c in Sources */ = {isa = PBXBuildFile; fileRef = AF77780809B64F4900EA3033 /* texfont.c */; }; AF77783A09B651AF00EA3033 /* glut_stroke.c in Sources */ = {isa = PBXBuildFile; fileRef = AFD56E0B0996A0ED00BA26F7 /* glut_stroke.c */; }; AF77783D09B651C700EA3033 /* glut_swidth.c in Sources */ = {isa = PBXBuildFile; fileRef = AFD56E0C0996A0ED00BA26F7 /* glut_swidth.c */; }; AF77784B09B6528100EA3033 /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF77786709B6536000EA3033 /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF77787709B653DC00EA3033 /* dnalogo.c in Sources */ = {isa = PBXBuildFile; fileRef = AF77787609B653DC00EA3033 /* dnalogo.c */; }; AF77787A09B6545E00EA3033 /* dnalogo.xml in Resources */ = {isa = PBXBuildFile; fileRef = AF77787909B6545E00EA3033 /* dnalogo.xml */; }; AF77787C09B654F800EA3033 /* carousel.c in Sources */ = {isa = PBXBuildFile; fileRef = AF77785E09B6530E00EA3033 /* carousel.c */; }; AF77787D09B654FE00EA3033 /* carousel.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258830988A468000655EE /* carousel.xml */; }; AF77788509B6563500EA3033 /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF77789109B656A900EA3033 /* fontglide.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258AE0988A468000655EE /* fontglide.xml */; }; AF77789309B656C300EA3033 /* fontglide.c in Sources */ = {isa = PBXBuildFile; fileRef = AF77789209B656C300EA3033 /* fontglide.c */; }; AF7778AB09B659C800EA3033 /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF7778B909B65A6E00EA3033 /* blitspin.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258760988A468000655EE /* blitspin.xml */; }; AF7778BB09B65A8A00EA3033 /* blitspin.c in Sources */ = {isa = PBXBuildFile; fileRef = AF7778BA09B65A8A00EA3033 /* blitspin.c */; }; AF78369717DB9F25003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF78369817DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF78369917DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF78369A17DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF78369B17DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF78369C17DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF78369D17DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF78369E17DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF78369F17DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF7836A017DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF7836A117DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF7836A217DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF7836A317DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF7836A417DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF7836A517DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF7836A617DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF7836A717DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF7836A817DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF7836A917DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF7836AA17DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF7836AB17DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF7836AC17DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF7836AD17DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF7836AE17DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF7836AF17DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF7836B017DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF7836B117DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF7836B217DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF7836B317DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF7836B417DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF7836B517DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF7836B617DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF7836B717DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF7836B817DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF7836B917DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF7836BA17DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF7836BB17DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF7836BC17DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF7836BD17DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF7836BE17DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF7836BF17DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF7836C017DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF7836C117DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF7836C217DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF7836C317DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF7836C417DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF7836C517DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF7836C617DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF7836C717DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF7836C817DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF7836C917DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF7836CA17DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF7836CB17DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF7836CC17DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF7836CD17DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF7836CE17DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF7836CF17DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF7836D117DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF7836D217DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF7836D317DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF7836D417DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF7836D517DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF7836D617DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF7836D717DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF7836D817DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF7836D917DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF7836DA17DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF7836DB17DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF7836DC17DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF7836DD17DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF7836DE17DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF7836DF17DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF7836E017DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF7836E117DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF7836E217DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF7836E317DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF7836E417DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF7836E517DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF7836E617DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF7836E717DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF7836E817DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF7836E917DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF7836EA17DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF7836EB17DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF7836EC17DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF7836ED17DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF7836EE17DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF7836EF17DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF7836F017DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF7836F117DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF7836F217DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF7836F317DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF7836F417DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF7836F517DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF7836F617DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF7836F717DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF7836F817DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF7836F917DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF7836FA17DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF7836FB17DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF7836FC17DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF7836FD17DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF7836FE17DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF7836FF17DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF78370017DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF78370117DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF78370217DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF78370317DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF78370417DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF78370517DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF78370617DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF78370717DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF78370817DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF78370917DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF78370A17DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF78370B17DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF78370C17DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF78370D17DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF78370E17DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF78370F17DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF78371017DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF78371117DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF78371217DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF78371317DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF78371417DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF78371517DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF78371617DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF78371717DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF78371817DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF78371917DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF78371A17DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF78371B17DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF78371C17DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF78371D17DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF78371E17DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF78371F17DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF78372017DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF78372117DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF78372217DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF78372317DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF78372417DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF78372517DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF78372617DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF78372717DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF78372817DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF78372917DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF78372A17DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF78372B17DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF78372C17DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF78372D17DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF78372E17DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF78372F17DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF78373017DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF78373117DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF78373217DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF78373317DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF78373417DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF78373517DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF78373617DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF78373717DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF78373817DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF78373917DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF78373A17DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF78373B17DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF78373C17DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF78373D17DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF78373E17DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF78373F17DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF78374017DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF78374117DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF78374217DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF78374317DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF78374417DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF78374517DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF78374617DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF78374717DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF78374817DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF78374917DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF78374A17DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF78374B17DBA580003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF78374C17DBA581003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF78374D17DBA581003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF78374E17DBA581003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF78374F17DBA581003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF78375017DBA581003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF78375117DBA581003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF78375217DBA581003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF78375317DBA581003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF78375417DBA581003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF78375517DBA581003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF78375617DBA581003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF78375717DBA581003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF78375817DBA581003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF78375917DBA581003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF78375A17DBA581003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF78375B17DBA581003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF78375C17DBA581003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF78375D17DBA581003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF78375E17DBA581003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF78375F17DBA581003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF78376017DBA581003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF78376117DBA581003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF78376217DBA581003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF78376317DBA581003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF78376417DBA581003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF78376517DBA581003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF78376617DBA581003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF78376717DBA581003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF78376817DBA581003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF78376917DBA581003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF78376A17DBA581003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF78376B17DBA581003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF78376C17DBA581003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF78376D17DBA581003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF78376E17DBA581003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF78376F17DBA581003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF78377017DBA581003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF78377117DBA581003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF78377217DBA581003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF78377317DBA581003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF78377417DBA581003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF78377517DBA581003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF78377617DBA581003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF78377717DBA581003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF78377817DBA581003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF78377917DBA581003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF78377A17DBA581003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF78377B17DBA581003B9FC0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF78D179142DD8F3002AAF77 /* voronoi.xml in Resources */ = {isa = PBXBuildFile; fileRef = AF0DCA610C4CBB8E00D76972 /* voronoi.xml */; }; AF78D17B142DD8F3002AAF77 /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF78D18D142DD96E002AAF77 /* hilbert.c in Sources */ = {isa = PBXBuildFile; fileRef = AF78D18A142DD96E002AAF77 /* hilbert.c */; }; AF78D191142DD99B002AAF77 /* hilbert.xml in Resources */ = {isa = PBXBuildFile; fileRef = AF78D18E142DD99A002AAF77 /* hilbert.xml */; }; AF794F6A099748450059A8B0 /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF794F7D0997486C0059A8B0 /* demon.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258960988A468000655EE /* demon.xml */; }; AF794F7F099748860059A8B0 /* demon.c in Sources */ = {isa = PBXBuildFile; fileRef = AF794F7E099748860059A8B0 /* demon.c */; }; AF794F9409974A320059A8B0 /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF794FA809974AC60059A8B0 /* fiberlamp.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258A20988A468000655EE /* fiberlamp.xml */; }; AF794FAA09974AE30059A8B0 /* fiberlamp.c in Sources */ = {isa = PBXBuildFile; fileRef = AF794FA909974AE30059A8B0 /* fiberlamp.c */; }; AF794FD309974FA60059A8B0 /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF794FDF09974FD10059A8B0 /* loop.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258DD0988A468000655EE /* loop.xml */; }; AF794FE109974FEC0059A8B0 /* loop.c in Sources */ = {isa = PBXBuildFile; fileRef = AF794FE009974FEC0059A8B0 /* loop.c */; }; AF7ACFC719FF0A9200BD752B /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF7ACFC919FF0A9200BD752B /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF7ACFCA19FF0A9200BD752B /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AF7ACFCB19FF0A9200BD752B /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AF7ACFCC19FF0A9200BD752B /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF7ACFCD19FF0A9200BD752B /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF7ACFCE19FF0A9200BD752B /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AF7ACFD719FF0B7A00BD752B /* geodesicgears.c in Sources */ = {isa = PBXBuildFile; fileRef = AF7ACFD619FF0B7A00BD752B /* geodesicgears.c */; }; AF7ACFD919FF0BA600BD752B /* geodesicgears.xml in Resources */ = {isa = PBXBuildFile; fileRef = AF7ACFD819FF0BA600BD752B /* geodesicgears.xml */; }; AF7ACFDA19FF0BA600BD752B /* geodesicgears.xml in Resources */ = {isa = PBXBuildFile; fileRef = AF7ACFD819FF0BA600BD752B /* geodesicgears.xml */; }; AF7F54A417DC249500CE1158 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78377C17DBA85D003B9FC0 /* libz.dylib */; }; AF84AF2015829AF000607E4C /* SaverListController.m in Sources */ = {isa = PBXBuildFile; fileRef = AF84AF1E15829AF000607E4C /* SaverListController.m */; }; AF84FD4209B1209E00F3AB06 /* GLUT.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF84FD4109B1209E00F3AB06 /* GLUT.framework */; }; AF918983158FC00A002B5D1E /* iSaverRunner.xib in Resources */ = {isa = PBXBuildFile; fileRef = AF56019B157DAA3D00DB2055 /* iSaverRunner.xib */; }; AF918986158FC00A002B5D1E /* SaverRunner.m in Sources */ = {isa = PBXBuildFile; fileRef = AFE1FD400981E32E00F7970E /* SaverRunner.m */; }; AF918987158FC00A002B5D1E /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 29B97316FDCFA39411CA2CEA /* main.m */; }; AF918988158FC00A002B5D1E /* SaverListController.m in Sources */ = {isa = PBXBuildFile; fileRef = AF84AF1E15829AF000607E4C /* SaverListController.m */; }; AF918993158FC2BE002B5D1E /* abstractile.c in Sources */ = {isa = PBXBuildFile; fileRef = AFE6A4340CDD800F002805BF /* abstractile.c */; }; AF918994158FC2BE002B5D1E /* anemone.c in Sources */ = {isa = PBXBuildFile; fileRef = AF477231099D4FD5001F091E /* anemone.c */; }; AF918995158FC2E0002B5D1E /* analogtv.c in Sources */ = {isa = PBXBuildFile; fileRef = AF9D4CFA09B5AC94006E59CF /* analogtv.c */; }; AF918996158FC310002B5D1E /* anemotaxis.c in Sources */ = {isa = PBXBuildFile; fileRef = AF4773D4099D6817001F091E /* anemotaxis.c */; }; AF918997158FC310002B5D1E /* apple2-main.c in Sources */ = {isa = PBXBuildFile; fileRef = AF9D4E0509B5BC9D006E59CF /* apple2-main.c */; }; AF918998158FC310002B5D1E /* apple2.c in Sources */ = {isa = PBXBuildFile; fileRef = AF9D4DD309B5B990006E59CF /* apple2.c */; }; AF918999158FC310002B5D1E /* asm6502.c in Sources */ = {isa = PBXBuildFile; fileRef = AF0DCA320C4C74A200D76972 /* asm6502.c */; }; AF91899A158FC310002B5D1E /* attraction.c in Sources */ = {isa = PBXBuildFile; fileRef = AF976DFA09896BEB001F8B92 /* attraction.c */; }; AF91899B158FC310002B5D1E /* barcode.c in Sources */ = {isa = PBXBuildFile; fileRef = AF975A99099C6C3500B05160 /* barcode.c */; }; AF91899C158FC310002B5D1E /* blaster.c in Sources */ = {isa = PBXBuildFile; fileRef = AF4776A2099DAADE001F091E /* blaster.c */; }; AF91899D158FC310002B5D1E /* blitspin.c in Sources */ = {isa = PBXBuildFile; fileRef = AF7778BA09B65A8A00EA3033 /* blitspin.c */; }; AF91899E158FC310002B5D1E /* boxfit.c in Sources */ = {isa = PBXBuildFile; fileRef = AF4778A3099DDA91001F091E /* boxfit.c */; }; AF91899F158FC310002B5D1E /* bsod.c in Sources */ = {isa = PBXBuildFile; fileRef = AF9D4DC309B5B87D006E59CF /* bsod.c */; }; AF9189A0158FC310002B5D1E /* bubbles-default.c in Sources */ = {isa = PBXBuildFile; fileRef = AF6427BB09A2DF47000F4CD4 /* bubbles-default.c */; }; AF9189A2158FC310002B5D1E /* bumps.c in Sources */ = {isa = PBXBuildFile; fileRef = AF9D48EE09B533AE006E59CF /* bumps.c */; }; AF9189A3158FC310002B5D1E /* ccurve.c in Sources */ = {isa = PBXBuildFile; fileRef = AF4771EF099D4DFE001F091E /* ccurve.c */; }; AF9189A4158FC310002B5D1E /* celtic.c in Sources */ = {isa = PBXBuildFile; fileRef = AF477787099DBA29001F091E /* celtic.c */; }; AF9189A5158FC310002B5D1E /* cloudlife.c in Sources */ = {isa = PBXBuildFile; fileRef = AF477720099DB01C001F091E /* cloudlife.c */; }; AF9189A6158FC310002B5D1E /* companion.c in Sources */ = {isa = PBXBuildFile; fileRef = AF3581D91431D5FC00E09C51 /* companion.c */; settings = {COMPILER_FLAGS = "-DUSE_GL"; }; }; AF9189A7158FC311002B5D1E /* companion_disc.c in Sources */ = {isa = PBXBuildFile; fileRef = AF3581D61431D5FC00E09C51 /* companion_disc.c */; settings = {COMPILER_FLAGS = "-DUSE_GL"; }; }; AF9189A8158FC311002B5D1E /* companion_heart.c in Sources */ = {isa = PBXBuildFile; fileRef = AF3581D71431D5FC00E09C51 /* companion_heart.c */; settings = {COMPILER_FLAGS = "-DUSE_GL"; }; }; AF9189A9158FC311002B5D1E /* companion_quad.c in Sources */ = {isa = PBXBuildFile; fileRef = AF3581D81431D5FC00E09C51 /* companion_quad.c */; settings = {COMPILER_FLAGS = "-DUSE_GL"; }; }; AF9189AA158FC311002B5D1E /* compass.c in Sources */ = {isa = PBXBuildFile; fileRef = AF47717C099D47D3001F091E /* compass.c */; }; AF9189AB158FC311002B5D1E /* coral.c in Sources */ = {isa = PBXBuildFile; fileRef = AF4775EF099D9FFF001F091E /* coral.c */; }; AF9189AD158FC311002B5D1E /* cwaves.c in Sources */ = {isa = PBXBuildFile; fileRef = AFF463490C44044E00EE6509 /* cwaves.c */; }; AF9189AE158FC311002B5D1E /* cynosure.c in Sources */ = {isa = PBXBuildFile; fileRef = AF4778FB099DDE79001F091E /* cynosure.c */; }; AF9189AF158FC311002B5D1E /* decayscreen.c in Sources */ = {isa = PBXBuildFile; fileRef = AF9D467809B5110B006E59CF /* decayscreen.c */; }; AF9189B0158FC311002B5D1E /* deco.c in Sources */ = {isa = PBXBuildFile; fileRef = AFC25B5E0988BA63000655EE /* deco.c */; }; AF9189B1158FC311002B5D1E /* deluxe.c in Sources */ = {isa = PBXBuildFile; fileRef = AF477145099D43E2001F091E /* deluxe.c */; }; AF9189B2158FC311002B5D1E /* distort.c in Sources */ = {isa = PBXBuildFile; fileRef = AF9D490709B536F7006E59CF /* distort.c */; }; AF9189B3158FC311002B5D1E /* epicycle.c in Sources */ = {isa = PBXBuildFile; fileRef = AF477605099DA097001F091E /* epicycle.c */; }; AF9189B4158FC311002B5D1E /* eruption.c in Sources */ = {isa = PBXBuildFile; fileRef = AF975A83099C6B4900B05160 /* eruption.c */; }; AF9189B5158FC311002B5D1E /* fireworkx.c in Sources */ = {isa = PBXBuildFile; fileRef = AF975AEE099C6F1700B05160 /* fireworkx.c */; }; AF9189B6158FC334002B5D1E /* flame.c in Sources */ = {isa = PBXBuildFile; fileRef = AF477496099D8A53001F091E /* flame.c */; }; AF9189B7158FC334002B5D1E /* fluidballs.c in Sources */ = {isa = PBXBuildFile; fileRef = AF4777A4099DBB11001F091E /* fluidballs.c */; }; AF9189B8158FC334002B5D1E /* fontglide.c in Sources */ = {isa = PBXBuildFile; fileRef = AF77789209B656C300EA3033 /* fontglide.c */; }; AF9189B9158FC334002B5D1E /* fps.c in Sources */ = {isa = PBXBuildFile; fileRef = AFBF893C0E41D930006A2D66 /* fps.c */; }; AF9189BA158FC334002B5D1E /* fuzzyflakes.c in Sources */ = {isa = PBXBuildFile; fileRef = AF4773B4099D6778001F091E /* fuzzyflakes.c */; }; AF9189BB158FC334002B5D1E /* goop.c in Sources */ = {isa = PBXBuildFile; fileRef = AF64268E09A19542000F4CD4 /* goop.c */; }; AF9189BC158FC334002B5D1E /* greynetic.c in Sources */ = {isa = PBXBuildFile; fileRef = AF480C21098E28EF00FB32B8 /* greynetic.c */; }; AF9189BD158FC334002B5D1E /* halftone.c in Sources */ = {isa = PBXBuildFile; fileRef = AF477266099D5768001F091E /* halftone.c */; }; AF9189BE158FC334002B5D1E /* halo.c in Sources */ = {isa = PBXBuildFile; fileRef = AF480C29098E295D00FB32B8 /* halo.c */; }; AF9189BF158FC334002B5D1E /* helix.c in Sources */ = {isa = PBXBuildFile; fileRef = AF480C2F098E2A6700FB32B8 /* helix.c */; }; AF9189C2158FC334002B5D1E /* ifs.c in Sources */ = {isa = PBXBuildFile; fileRef = AF47743A099D7CEA001F091E /* ifs.c */; }; AF9189C3158FC334002B5D1E /* imsmap.c in Sources */ = {isa = PBXBuildFile; fileRef = AF975740099C31DD00B05160 /* imsmap.c */; }; AF9189C4158FC334002B5D1E /* interaggregate.c in Sources */ = {isa = PBXBuildFile; fileRef = AF477769099DB710001F091E /* interaggregate.c */; }; AF9189C5158FC334002B5D1E /* interference.c in Sources */ = {isa = PBXBuildFile; fileRef = AF476FD0099D15AA001F091E /* interference.c */; }; AF9189C6158FC334002B5D1E /* intermomentary.c in Sources */ = {isa = PBXBuildFile; fileRef = AF47741C099D6A6C001F091E /* intermomentary.c */; }; AF9189C7158FC334002B5D1E /* kaleidescope.c in Sources */ = {isa = PBXBuildFile; fileRef = AF4774AC099D8B08001F091E /* kaleidescope.c */; }; AF9189C8158FC334002B5D1E /* kumppa.c in Sources */ = {isa = PBXBuildFile; fileRef = AF47762A099DA2E9001F091E /* kumppa.c */; }; AF9189CB158FC334002B5D1E /* m6502.c in Sources */ = {isa = PBXBuildFile; fileRef = AF0DCA340C4C74A200D76972 /* m6502.c */; }; AF9189CC158FC334002B5D1E /* maze.c in Sources */ = {isa = PBXBuildFile; fileRef = AF4774E1099D8C8B001F091E /* maze.c */; }; AF9189CD158FC334002B5D1E /* memscroller.c in Sources */ = {isa = PBXBuildFile; fileRef = AF975B14099C709E00B05160 /* memscroller.c */; }; AF9189CE158FC334002B5D1E /* metaballs.c in Sources */ = {isa = PBXBuildFile; fileRef = AF975A49099C689F00B05160 /* metaballs.c */; }; AF9189CF158FC334002B5D1E /* moire.c in Sources */ = {isa = PBXBuildFile; fileRef = AF975789099C37A500B05160 /* moire.c */; }; AF9189D0158FC334002B5D1E /* moire2.c in Sources */ = {isa = PBXBuildFile; fileRef = AF64263F09A18FEB000F4CD4 /* moire2.c */; }; AF9189D1158FC334002B5D1E /* munch.c in Sources */ = {isa = PBXBuildFile; fileRef = AF64266209A192C5000F4CD4 /* munch.c */; }; AF9189D2158FC334002B5D1E /* nerverot.c in Sources */ = {isa = PBXBuildFile; fileRef = AF477205099D4EB6001F091E /* nerverot.c */; }; AF9189D3158FC334002B5D1E /* noseguy.c in Sources */ = {isa = PBXBuildFile; fileRef = AF975C76099C8FC700B05160 /* noseguy.c */; }; AF9189D4158FC334002B5D1E /* pedal.c in Sources */ = {isa = PBXBuildFile; fileRef = AF477570099D9A8A001F091E /* pedal.c */; }; AF9189D5158FC334002B5D1E /* penetrate.c in Sources */ = {isa = PBXBuildFile; fileRef = AF4778BE099DDC32001F091E /* penetrate.c */; }; AF9189D6158FC334002B5D1E /* petri.c in Sources */ = {isa = PBXBuildFile; fileRef = AF477683099DA8C7001F091E /* petri.c */; }; AF9189D7158FC334002B5D1E /* phosphor.c in Sources */ = {isa = PBXBuildFile; fileRef = AF77770309B63B5F00EA3033 /* phosphor.c */; }; AF9189D8158FC334002B5D1E /* piecewise.c in Sources */ = {isa = PBXBuildFile; fileRef = AF477297099D5980001F091E /* piecewise.c */; }; AF9189D9158FC334002B5D1E /* pong.c in Sources */ = {isa = PBXBuildFile; fileRef = AF9D4CFC09B5AC94006E59CF /* pong.c */; }; AF9189DA158FC334002B5D1E /* popsquares.c in Sources */ = {isa = PBXBuildFile; fileRef = AF47727E099D5808001F091E /* popsquares.c */; }; AF9189DB158FC334002B5D1E /* pyro.c in Sources */ = {isa = PBXBuildFile; fileRef = AF47759C099D9CA3001F091E /* pyro.c */; }; AF9189DC158FC334002B5D1E /* qix.c in Sources */ = {isa = PBXBuildFile; fileRef = AF6425FF09A18A94000F4CD4 /* qix.c */; }; AF9189DD158FC334002B5D1E /* rd-bomb.c in Sources */ = {isa = PBXBuildFile; fileRef = AF9757D5099C3EB800B05160 /* rd-bomb.c */; }; AF9189DE158FC334002B5D1E /* ripples.c in Sources */ = {isa = PBXBuildFile; fileRef = AF9D493E09B53D55006E59CF /* ripples.c */; }; AF9189DF158FC35D002B5D1E /* rocks.c in Sources */ = {isa = PBXBuildFile; fileRef = AF975D66099CA16A00B05160 /* rocks.c */; }; AF9189E0158FC35D002B5D1E /* rorschach.c in Sources */ = {isa = PBXBuildFile; fileRef = AFE1FD620981E40800F7970E /* rorschach.c */; }; AF9189E1158FC35D002B5D1E /* rotzoomer.c in Sources */ = {isa = PBXBuildFile; fileRef = AF9D496709B540A4006E59CF /* rotzoomer.c */; }; AF9189E2158FC35D002B5D1E /* shadebobs.c in Sources */ = {isa = PBXBuildFile; fileRef = AF97587A099C492000B05160 /* shadebobs.c */; }; AF9189E3158FC35D002B5D1E /* slidescreen.c in Sources */ = {isa = PBXBuildFile; fileRef = AF9D475809B53091006E59CF /* slidescreen.c */; }; AF9189E4158FC35D002B5D1E /* speedmine.c in Sources */ = {isa = PBXBuildFile; fileRef = AF64278709A1D433000F4CD4 /* speedmine.c */; }; AF9189E5158FC35D002B5D1E /* spotlight.c in Sources */ = {isa = PBXBuildFile; fileRef = AF9D49AA09B54596006E59CF /* spotlight.c */; }; AF9189E6158FC35D002B5D1E /* squiral.c in Sources */ = {isa = PBXBuildFile; fileRef = AF477657099DA75D001F091E /* squiral.c */; }; AF9189E7158FC35D002B5D1E /* starfish.c in Sources */ = {isa = PBXBuildFile; fileRef = AF4775B3099D9D67001F091E /* starfish.c */; }; AF9189E8158FC35D002B5D1E /* substrate.c in Sources */ = {isa = PBXBuildFile; fileRef = AF477736099DB104001F091E /* substrate.c */; }; AF9189EA158FC35D002B5D1E /* tronbit.c in Sources */ = {isa = PBXBuildFile; fileRef = AF35821B1433314C00E09C51 /* tronbit.c */; settings = {COMPILER_FLAGS = "-DUSE_GL"; }; }; AF9189EB158FC35D002B5D1E /* tronbit_idle1.c in Sources */ = {isa = PBXBuildFile; fileRef = AF3582171433314C00E09C51 /* tronbit_idle1.c */; settings = {COMPILER_FLAGS = "-DUSE_GL"; }; }; AF9189EC158FC35D002B5D1E /* tronbit_idle2.c in Sources */ = {isa = PBXBuildFile; fileRef = AF3582181433314C00E09C51 /* tronbit_idle2.c */; settings = {COMPILER_FLAGS = "-DUSE_GL"; }; }; AF9189ED158FC35D002B5D1E /* tronbit_no.c in Sources */ = {isa = PBXBuildFile; fileRef = AF3582191433314C00E09C51 /* tronbit_no.c */; settings = {COMPILER_FLAGS = "-DUSE_GL"; }; }; AF9189EE158FC35D002B5D1E /* tronbit_yes.c in Sources */ = {isa = PBXBuildFile; fileRef = AF35821A1433314C00E09C51 /* tronbit_yes.c */; settings = {COMPILER_FLAGS = "-DUSE_GL"; }; }; AF9189EF158FC35D002B5D1E /* truchet.c in Sources */ = {isa = PBXBuildFile; fileRef = AF476FF0099D1713001F091E /* truchet.c */; }; AF9189F0158FC35D002B5D1E /* twang.c in Sources */ = {isa = PBXBuildFile; fileRef = AF9D497F09B541E5006E59CF /* twang.c */; }; AF9189F1158FC35D002B5D1E /* vermiculate.c in Sources */ = {isa = PBXBuildFile; fileRef = AF477704099DAF3F001F091E /* vermiculate.c */; }; AF9189F2158FC35D002B5D1E /* wander.c in Sources */ = {isa = PBXBuildFile; fileRef = AF477192099D4864001F091E /* wander.c */; }; AF9189F3158FC35E002B5D1E /* whirlwindwarp.c in Sources */ = {isa = PBXBuildFile; fileRef = AF4776EE099DAE58001F091E /* whirlwindwarp.c */; }; AF9189F5158FC35E002B5D1E /* wormhole.c in Sources */ = {isa = PBXBuildFile; fileRef = AF477395099D65FE001F091E /* wormhole.c */; }; AF9189F6158FC35E002B5D1E /* xanalogtv.c in Sources */ = {isa = PBXBuildFile; fileRef = AF9D4D9209B5B444006E59CF /* xanalogtv.c */; }; AF9189F7158FC35E002B5D1E /* xflame.c in Sources */ = {isa = PBXBuildFile; fileRef = AF97582F099C427500B05160 /* xflame.c */; }; AF9189F8158FC35E002B5D1E /* xjack.c in Sources */ = {isa = PBXBuildFile; fileRef = AF4778DA099DDD2B001F091E /* xjack.c */; }; AF9189F9158FC35E002B5D1E /* xlyap.c in Sources */ = {isa = PBXBuildFile; fileRef = AF9D4C7C09B5A044006E59CF /* xlyap.c */; }; AF9189FA158FC35E002B5D1E /* xmatrix.c in Sources */ = {isa = PBXBuildFile; fileRef = AF477455099D7D8A001F091E /* xmatrix.c */; }; AF9189FB158FC35E002B5D1E /* xrayswarm.c in Sources */ = {isa = PBXBuildFile; fileRef = AF4776D3099DACEB001F091E /* xrayswarm.c */; }; AF9189FC158FC35E002B5D1E /* xspirograph.c in Sources */ = {isa = PBXBuildFile; fileRef = AF4776BD099DAC46001F091E /* xspirograph.c */; }; AF9189FD158FC35E002B5D1E /* zoom.c in Sources */ = {isa = PBXBuildFile; fileRef = AF9D48D409B53229006E59CF /* zoom.c */; }; AF9189FF158FC38A002B5D1E /* apollonian.c in Sources */ = {isa = PBXBuildFile; fileRef = AFD5713F0996BFBE00BA26F7 /* apollonian.c */; }; AF918A00158FC38A002B5D1E /* bouboule.c in Sources */ = {isa = PBXBuildFile; fileRef = AFD572B90996FB3D00BA26F7 /* bouboule.c */; }; AF918A01158FC38A002B5D1E /* braid.c in Sources */ = {isa = PBXBuildFile; fileRef = AFD56EC10996A76F00BA26F7 /* braid.c */; }; AF918A02158FC38A002B5D1E /* crystal.c in Sources */ = {isa = PBXBuildFile; fileRef = AFD572ED0997006E00BA26F7 /* crystal.c */; }; AF918A03158FC38A002B5D1E /* demon.c in Sources */ = {isa = PBXBuildFile; fileRef = AF794F7E099748860059A8B0 /* demon.c */; }; AF918A04158FC38A002B5D1E /* discrete.c in Sources */ = {isa = PBXBuildFile; fileRef = AFD571280996BEF700BA26F7 /* discrete.c */; }; AF918A05158FC38A002B5D1E /* drift.c in Sources */ = {isa = PBXBuildFile; fileRef = AF480C82098E336D00FB32B8 /* drift.c */; }; AF918A06158FC38A002B5D1E /* euler2d.c in Sources */ = {isa = PBXBuildFile; fileRef = AFD571560996C07F00BA26F7 /* euler2d.c */; }; AF918A07158FC38A002B5D1E /* fadeplot.c in Sources */ = {isa = PBXBuildFile; fileRef = AFD5706C0996B70000BA26F7 /* fadeplot.c */; }; AF918A08158FC38A002B5D1E /* fiberlamp.c in Sources */ = {isa = PBXBuildFile; fileRef = AF794FA909974AE30059A8B0 /* fiberlamp.c */; }; AF918A0A158FC38A002B5D1E /* flow.c in Sources */ = {isa = PBXBuildFile; fileRef = AFD571010996BC3800BA26F7 /* flow.c */; }; AF918A0C158FC38A002B5D1E /* galaxy.c in Sources */ = {isa = PBXBuildFile; fileRef = AFD56F360996ABD200BA26F7 /* galaxy.c */; }; AF918A0D158FC38A002B5D1E /* grav.c in Sources */ = {isa = PBXBuildFile; fileRef = AFD56F620996AF2D00BA26F7 /* grav.c */; }; AF918A0E158FC38A002B5D1E /* hopalong.c in Sources */ = {isa = PBXBuildFile; fileRef = AFD56F880996B06600BA26F7 /* hopalong.c */; }; AF918A11158FC38A002B5D1E /* julia.c in Sources */ = {isa = PBXBuildFile; fileRef = AFD5730C099702C800BA26F7 /* julia.c */; }; AF918A16158FC38A002B5D1E /* loop.c in Sources */ = {isa = PBXBuildFile; fileRef = AF794FE009974FEC0059A8B0 /* loop.c */; }; AF918A17158FC38A002B5D1E /* mountain.c in Sources */ = {isa = PBXBuildFile; fileRef = AFD570820996B79300BA26F7 /* mountain.c */; }; AF918A18158FC38A002B5D1E /* pacman.c in Sources */ = {isa = PBXBuildFile; fileRef = AF795015099751940059A8B0 /* pacman.c */; }; AF918A19158FC38A002B5D1E /* pacman_ai.c in Sources */ = {isa = PBXBuildFile; fileRef = AF795011099751940059A8B0 /* pacman_ai.c */; }; AF918A1A158FC38A002B5D1E /* pacman_level.c in Sources */ = {isa = PBXBuildFile; fileRef = AF795013099751940059A8B0 /* pacman_level.c */; }; AF918A1B158FC38A002B5D1E /* penrose.c in Sources */ = {isa = PBXBuildFile; fileRef = AFD5700C0996B49D00BA26F7 /* penrose.c */; }; AF918A1C158FC38A002B5D1E /* polyominoes.c in Sources */ = {isa = PBXBuildFile; fileRef = AFD572800996EF2B00BA26F7 /* polyominoes.c */; }; AF918A1E158FC38A002B5D1E /* sierpinski.c in Sources */ = {isa = PBXBuildFile; fileRef = AFD570220996B52700BA26F7 /* sierpinski.c */; }; AF918A1F158FC38A002B5D1E /* slip.c in Sources */ = {isa = PBXBuildFile; fileRef = AF47793D099DE56A001F091E /* slip.c */; }; AF918A22158FC38A002B5D1E /* strange.c in Sources */ = {isa = PBXBuildFile; fileRef = AFD57371099741A200BA26F7 /* strange.c */; }; AF918A23158FC38A002B5D1E /* swirl.c in Sources */ = {isa = PBXBuildFile; fileRef = AFD572350996E53E00BA26F7 /* swirl.c */; }; AF918A24158FC38A002B5D1E /* thornbird.c in Sources */ = {isa = PBXBuildFile; fileRef = AFD5716B0996C16700BA26F7 /* thornbird.c */; }; AF918A25158FC38A002B5D1E /* triangle.c in Sources */ = {isa = PBXBuildFile; fileRef = AFD570980996B86200BA26F7 /* triangle.c */; }; AF918A28158FC3BB002B5D1E /* antinspect.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA5605F09936E9C00F3E977 /* antinspect.c */; settings = {COMPILER_FLAGS = "-DUSE_GL"; }; }; AF918A29158FC3BB002B5D1E /* antmaze.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA562EF0993941600F3E977 /* antmaze.c */; settings = {COMPILER_FLAGS = "-DUSE_GL"; }; }; AF918A2A158FC3BB002B5D1E /* antspotlight.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA5607809936FDD00F3E977 /* antspotlight.c */; settings = {COMPILER_FLAGS = "-DUSE_GL"; }; }; AF918A2B158FC3BB002B5D1E /* atlantis.c in Sources */ = {isa = PBXBuildFile; fileRef = AF0839A909930C4900277BE9 /* atlantis.c */; settings = {COMPILER_FLAGS = "-DUSE_GL"; }; }; AF918A2C158FC3BB002B5D1E /* atunnel.c in Sources */ = {isa = PBXBuildFile; fileRef = AF083A31099311CE00277BE9 /* atunnel.c */; settings = {COMPILER_FLAGS = "-DUSE_GL"; }; }; AF918A2D158FC3BB002B5D1E /* b_draw.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA55AF409933DBF00F3E977 /* b_draw.c */; settings = {COMPILER_FLAGS = "-DUSE_GL"; }; }; AF918A2E158FC3BB002B5D1E /* b_lockglue.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA55AF509933DBF00F3E977 /* b_lockglue.c */; settings = {COMPILER_FLAGS = "-DUSE_GL"; }; }; AF918A2F158FC3BB002B5D1E /* b_sphere.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA55AF609933DBF00F3E977 /* b_sphere.c */; settings = {COMPILER_FLAGS = "-DUSE_GL"; }; }; AF918A30158FC3BB002B5D1E /* blinkbox.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA5616D09937C9A00F3E977 /* blinkbox.c */; settings = {COMPILER_FLAGS = "-DUSE_GL"; }; }; AF918A31158FC3BB002B5D1E /* blocktube.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA5602909936D0700F3E977 /* blocktube.c */; settings = {COMPILER_FLAGS = "-DUSE_GL"; }; }; AF918A32158FC3BB002B5D1E /* boing.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA562D40993930C00F3E977 /* boing.c */; settings = {COMPILER_FLAGS = "-DUSE_GL"; }; }; AF918A33158FC3BB002B5D1E /* bouncingcow.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA55EE70993613E00F3E977 /* bouncingcow.c */; settings = {COMPILER_FLAGS = "-DUSE_GL"; }; }; AF918A34158FC3BB002B5D1E /* boxed.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA55CBE09934C0900F3E977 /* boxed.c */; settings = {COMPILER_FLAGS = "-DUSE_GL"; }; }; AF918A35158FC3BB002B5D1E /* bubble3d.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA55AE409933D3800F3E977 /* bubble3d.c */; settings = {COMPILER_FLAGS = "-DUSE_GL"; }; }; AF918A36158FC3BB002B5D1E /* buildlwo.c in Sources */ = {isa = PBXBuildFile; fileRef = AF4812760990CF5D00FB32B8 /* buildlwo.c */; settings = {COMPILER_FLAGS = "-DUSE_GL"; }; }; AF918A37158FC3BB002B5D1E /* cage.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA5595D0993310500F3E977 /* cage.c */; settings = {COMPILER_FLAGS = "-DUSE_GL"; }; }; AF918A38158FC3BB002B5D1E /* carousel.c in Sources */ = {isa = PBXBuildFile; fileRef = AF77785E09B6530E00EA3033 /* carousel.c */; settings = {COMPILER_FLAGS = "-DUSE_GL"; }; }; AF918A39158FC3BB002B5D1E /* chessmodels.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA55E2309935F2B00F3E977 /* chessmodels.c */; settings = {COMPILER_FLAGS = "-DUSE_GL"; }; }; AF918A3A158FC3BB002B5D1E /* circuit.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA55BC00993416E00F3E977 /* circuit.c */; settings = {COMPILER_FLAGS = "-DUSE_GL"; }; }; AF918A3B158FC3BB002B5D1E /* cow_face.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA55EE80993613E00F3E977 /* cow_face.c */; settings = {COMPILER_FLAGS = "-DUSE_GL"; }; }; AF918A3C158FC3BB002B5D1E /* cow_hide.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA55EE90993613E00F3E977 /* cow_hide.c */; settings = {COMPILER_FLAGS = "-DUSE_GL"; }; }; AF918A3D158FC3BB002B5D1E /* cow_hoofs.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA55EEA0993613E00F3E977 /* cow_hoofs.c */; settings = {COMPILER_FLAGS = "-DUSE_GL"; }; }; AF918A3E158FC3BB002B5D1E /* cow_horns.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA55EEB0993613E00F3E977 /* cow_horns.c */; settings = {COMPILER_FLAGS = "-DUSE_GL"; }; }; AF918A3F158FC3BB002B5D1E /* cow_tail.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA55EEC0993613E00F3E977 /* cow_tail.c */; settings = {COMPILER_FLAGS = "-DUSE_GL"; }; }; AF918A40158FC3BB002B5D1E /* cow_udder.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA55EED0993613E00F3E977 /* cow_udder.c */; settings = {COMPILER_FLAGS = "-DUSE_GL"; }; }; AF918A41158FC3BB002B5D1E /* crackberg.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA563290993957100F3E977 /* crackberg.c */; settings = {COMPILER_FLAGS = "-DUSE_GL"; }; }; AF918A42158FC3BB002B5D1E /* cube21.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA563660993970F00F3E977 /* cube21.c */; settings = {COMPILER_FLAGS = "-DUSE_GL"; }; }; AF918A43158FC3BB002B5D1E /* cubenetic.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA55D770993589300F3E977 /* cubenetic.c */; settings = {COMPILER_FLAGS = "-DUSE_GL"; }; }; AF918A44158FC3BB002B5D1E /* cubestorm.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA55FF309936C4500F3E977 /* cubestorm.c */; settings = {COMPILER_FLAGS = "-DUSE_GL"; }; }; AF918A45158FC3BB002B5D1E /* cubicgrid.c in Sources */ = {isa = PBXBuildFile; fileRef = AF4FF4D00D52CC8400666F98 /* cubicgrid.c */; settings = {COMPILER_FLAGS = "-DUSE_GL"; }; }; AF918A46158FC3BB002B5D1E /* dangerball.c in Sources */ = {isa = PBXBuildFile; fileRef = AF480DD1098F4F6200FB32B8 /* dangerball.c */; settings = {COMPILER_FLAGS = "-DUSE_GL"; }; }; AF918A48158FC3BB002B5D1E /* dolphin.c in Sources */ = {isa = PBXBuildFile; fileRef = AF0839AA09930C4900277BE9 /* dolphin.c */; settings = {COMPILER_FLAGS = "-DUSE_GL"; }; }; AF918A49158FC3BB002B5D1E /* dropshadow.c in Sources */ = {isa = PBXBuildFile; fileRef = AF241F81107C38DF00046A84 /* dropshadow.c */; settings = {COMPILER_FLAGS = "-DUSE_GL"; }; }; AF918A4A158FC3E5002B5D1E /* endgame.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA55E2509935F2B00F3E977 /* endgame.c */; settings = {COMPILER_FLAGS = "-DUSE_GL"; }; }; AF918A4B158FC3E5002B5D1E /* engine.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA55C230993435300F3E977 /* engine.c */; settings = {COMPILER_FLAGS = "-DUSE_GL"; }; }; AF918A54158FC3E5002B5D1E /* flipflop.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA5604709936DCC00F3E977 /* flipflop.c */; settings = {COMPILER_FLAGS = "-DUSE_GL"; }; }; AF918A55158FC3E5002B5D1E /* flipscreen3d.c in Sources */ = {isa = PBXBuildFile; fileRef = AF77775409B644FF00EA3033 /* flipscreen3d.c */; settings = {COMPILER_FLAGS = "-DUSE_GL"; }; }; AF918A56158FC3E5002B5D1E /* fliptext.c in Sources */ = {isa = PBXBuildFile; fileRef = AF77780109B64EC000EA3033 /* fliptext.c */; settings = {COMPILER_FLAGS = "-DUSE_GL"; }; }; AF918A57158FC3E5002B5D1E /* flyingtoasters.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA55E980993608800F3E977 /* flyingtoasters.c */; settings = {COMPILER_FLAGS = "-DUSE_GL"; }; }; AF918A59158FC3E5002B5D1E /* fps-gl.c in Sources */ = {isa = PBXBuildFile; fileRef = AFBF89AE0E423FC3006A2D66 /* fps-gl.c */; settings = {COMPILER_FLAGS = "-DUSE_GL"; }; }; AF918A5A158FC3E5002B5D1E /* gears.c in Sources */ = {isa = PBXBuildFile; fileRef = AF4812250990CB8C00FB32B8 /* gears.c */; settings = {COMPILER_FLAGS = "-DUSE_GL"; }; }; AF918A5B158FC3E5002B5D1E /* gflux.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA55BA60993401A00F3E977 /* gflux.c */; settings = {COMPILER_FLAGS = "-DUSE_GL"; }; }; AF918A5C158FC3E5002B5D1E /* glblur.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA55E4509935FD300F3E977 /* glblur.c */; settings = {COMPILER_FLAGS = "-DUSE_GL"; }; }; AF918A5D158FC3E5002B5D1E /* glcells.c in Sources */ = {isa = PBXBuildFile; fileRef = AFF463710C440B9200EE6509 /* glcells.c */; settings = {COMPILER_FLAGS = "-DUSE_GL"; }; }; AF918A5E158FC3E5002B5D1E /* gleidescope.c in Sources */ = {isa = PBXBuildFile; fileRef = AF77778B09B64A2A00EA3033 /* gleidescope.c */; settings = {COMPILER_FLAGS = "-DUSE_GL"; }; }; AF918A60158FC3E5002B5D1E /* glhanoi.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA563460993963400F3E977 /* glhanoi.c */; settings = {COMPILER_FLAGS = "-DUSE_GL"; }; }; AF918A61158FC3E5002B5D1E /* glknots.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA5600E09936CB300F3E977 /* glknots.c */; settings = {COMPILER_FLAGS = "-DUSE_GL"; }; }; AF918A62158FC3E5002B5D1E /* glmatrix.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA55F870993648500F3E977 /* glmatrix.c */; settings = {COMPILER_FLAGS = "-DUSE_GL"; }; }; AF918A63158FC3E5002B5D1E /* glplanet.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA55B2109933E4A00F3E977 /* glplanet.c */; settings = {COMPILER_FLAGS = "-DUSE_GL"; }; }; AF918A64158FC3E5002B5D1E /* glschool.c in Sources */ = {isa = PBXBuildFile; fileRef = AF48E1660A0C268500F94CF9 /* glschool.c */; settings = {COMPILER_FLAGS = "-DUSE_GL"; }; }; AF918A65158FC3E5002B5D1E /* glschool_alg.c in Sources */ = {isa = PBXBuildFile; fileRef = AF48E1620A0C268400F94CF9 /* glschool_alg.c */; settings = {COMPILER_FLAGS = "-DUSE_GL"; }; }; AF918A66158FC3E5002B5D1E /* glschool_gl.c in Sources */ = {isa = PBXBuildFile; fileRef = AF48E1640A0C268500F94CF9 /* glschool_gl.c */; settings = {COMPILER_FLAGS = "-DUSE_GL"; }; }; AF918A67158FC3E5002B5D1E /* glslideshow.c in Sources */ = {isa = PBXBuildFile; fileRef = AF7777E709B64CF700EA3033 /* glslideshow.c */; settings = {COMPILER_FLAGS = "-DUSE_GL"; }; }; AF918A68158FC3E5002B5D1E /* glsnake.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA55C8C099349EE00F3E977 /* glsnake.c */; settings = {COMPILER_FLAGS = "-DUSE_GL"; }; }; AF918A69158FC3E5002B5D1E /* gltext.c in Sources */ = {isa = PBXBuildFile; fileRef = AFD56E080996A07A00BA26F7 /* gltext.c */; settings = {COMPILER_FLAGS = "-DUSE_GL"; }; }; AF918A6A158FC3E5002B5D1E /* hilbert.c in Sources */ = {isa = PBXBuildFile; fileRef = AF78D18A142DD96E002AAF77 /* hilbert.c */; settings = {COMPILER_FLAGS = "-DUSE_GL"; }; }; AF918A6B158FC3E5002B5D1E /* hypertorus.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA55F59099362DF00F3E977 /* hypertorus.c */; settings = {COMPILER_FLAGS = "-DUSE_GL"; }; }; AF918A6C158FC3E5002B5D1E /* hypnowheel.c in Sources */ = {isa = PBXBuildFile; fileRef = AF3C715D0D624C600030CC0D /* hypnowheel.c */; settings = {COMPILER_FLAGS = "-DUSE_GL"; }; }; AF918A6D158FC3E5002B5D1E /* involute.c in Sources */ = {isa = PBXBuildFile; fileRef = AFE6A16A0CDD78EA002805BF /* involute.c */; settings = {COMPILER_FLAGS = "-DUSE_GL"; }; }; AF918A6E158FC417002B5D1E /* jigglypuff.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA55F210993620200F3E977 /* jigglypuff.c */; settings = {COMPILER_FLAGS = "-DUSE_GL"; }; }; AF918A6F158FC417002B5D1E /* juggler3d.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA563B90993991300F3E977 /* juggler3d.c */; settings = {COMPILER_FLAGS = "-DUSE_GL"; }; }; AF918A70158FC417002B5D1E /* klein.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA55F3F0993626E00F3E977 /* klein.c */; settings = {COMPILER_FLAGS = "-DUSE_GL"; }; }; AF918A71158FC417002B5D1E /* lament.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA55A8E0993369100F3E977 /* lament.c */; settings = {COMPILER_FLAGS = "-DUSE_GL"; }; }; AF918A72158FC417002B5D1E /* lavalite.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA55DDD09935DB600F3E977 /* lavalite.c */; settings = {COMPILER_FLAGS = "-DUSE_GL"; }; }; AF918A74158FC417002B5D1E /* marching.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA55DE109935DFB00F3E977 /* marching.c */; settings = {COMPILER_FLAGS = "-DUSE_GL"; }; }; AF918A75158FC417002B5D1E /* menger.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA55BF9099342D500F3E977 /* menger.c */; settings = {COMPILER_FLAGS = "-DUSE_GL"; }; }; AF918A76158FC417002B5D1E /* mirrorblob.c in Sources */ = {isa = PBXBuildFile; fileRef = AF7777A509B64AFC00EA3033 /* mirrorblob.c */; settings = {COMPILER_FLAGS = "-DUSE_GL"; }; }; AF918A77158FC417002B5D1E /* moebius.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA55982099331C300F3E977 /* moebius.c */; settings = {COMPILER_FLAGS = "-DUSE_GL"; }; }; AF918A78158FC417002B5D1E /* moebiusgears.c in Sources */ = {isa = PBXBuildFile; fileRef = AFE6A40B0CDD7BC3002805BF /* moebiusgears.c */; settings = {COMPILER_FLAGS = "-DUSE_GL"; }; }; AF918A79158FC417002B5D1E /* molecule.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA561120993786800F3E977 /* molecule.c */; settings = {COMPILER_FLAGS = "-DUSE_GL"; }; }; AF918A7A158FC417002B5D1E /* morph3d.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA559CC099332E800F3E977 /* morph3d.c */; settings = {COMPILER_FLAGS = "-DUSE_GL"; }; }; AF918A7B158FC417002B5D1E /* noof.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA5619009937D3600F3E977 /* noof.c */; settings = {COMPILER_FLAGS = "-DUSE_GL"; }; }; AF918A7C158FC417002B5D1E /* photopile.c in Sources */ = {isa = PBXBuildFile; fileRef = AFD51DB60F063BCE00471C02 /* photopile.c */; settings = {COMPILER_FLAGS = "-DUSE_GL"; }; }; AF918A7D158FC417002B5D1E /* pinion.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA562340993856A00F3E977 /* pinion.c */; settings = {COMPILER_FLAGS = "-DUSE_GL"; }; }; AF918A7E158FC417002B5D1E /* pipeobjs.c in Sources */ = {isa = PBXBuildFile; fileRef = AF4812780990CF5D00FB32B8 /* pipeobjs.c */; settings = {COMPILER_FLAGS = "-DUSE_GL"; }; }; AF918A7F158FC417002B5D1E /* pipes.c in Sources */ = {isa = PBXBuildFile; fileRef = AF4812790990CF5D00FB32B8 /* pipes.c */; settings = {COMPILER_FLAGS = "-DUSE_GL"; }; }; AF918A82158FC417002B5D1E /* polytopes.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA560C3099371D500F3E977 /* polytopes.c */; settings = {COMPILER_FLAGS = "-DUSE_GL"; }; }; AF918A83158FC417002B5D1E /* providence.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA5621C099384F600F3E977 /* providence.c */; settings = {COMPILER_FLAGS = "-DUSE_GL"; }; }; AF918A84158FC417002B5D1E /* pulsar.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA55B3F09933EC600F3E977 /* pulsar.c */; settings = {COMPILER_FLAGS = "-DUSE_GL"; }; }; AF918A85158FC417002B5D1E /* queens.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA55E0609935EB800F3E977 /* queens.c */; settings = {COMPILER_FLAGS = "-DUSE_GL"; }; }; AF918A86158FC417002B5D1E /* rubik.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA559EA0993335C00F3E977 /* rubik.c */; settings = {COMPILER_FLAGS = "-DUSE_GL"; }; }; AF918A87158FC417002B5D1E /* rubikblocks.c in Sources */ = {isa = PBXBuildFile; fileRef = AF32D9FA0F3AD1200080F535 /* rubikblocks.c */; settings = {COMPILER_FLAGS = "-DUSE_GL"; }; }; AF918A88158FC417002B5D1E /* s1_1.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA55A400993351F00F3E977 /* s1_1.c */; settings = {COMPILER_FLAGS = "-DUSE_GL"; }; }; AF918A89158FC417002B5D1E /* s1_2.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA55A410993351F00F3E977 /* s1_2.c */; settings = {COMPILER_FLAGS = "-DUSE_GL"; }; }; AF918A8A158FC417002B5D1E /* s1_3.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA55A420993351F00F3E977 /* s1_3.c */; settings = {COMPILER_FLAGS = "-DUSE_GL"; }; }; AF918A8B158FC417002B5D1E /* s1_4.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA55A430993351F00F3E977 /* s1_4.c */; settings = {COMPILER_FLAGS = "-DUSE_GL"; }; }; AF918A8C158FC417002B5D1E /* s1_5.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA55A440993351F00F3E977 /* s1_5.c */; settings = {COMPILER_FLAGS = "-DUSE_GL"; }; }; AF918A8D158FC417002B5D1E /* s1_6.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA55A450993351F00F3E977 /* s1_6.c */; settings = {COMPILER_FLAGS = "-DUSE_GL"; }; }; AF918A8E158FC417002B5D1E /* s1_b.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA55A460993351F00F3E977 /* s1_b.c */; settings = {COMPILER_FLAGS = "-DUSE_GL"; }; }; AF918A8F158FC417002B5D1E /* sballs.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA55D510993569C00F3E977 /* sballs.c */; settings = {COMPILER_FLAGS = "-DUSE_GL"; }; }; AF918A90158FC417002B5D1E /* shark.c in Sources */ = {isa = PBXBuildFile; fileRef = AF0839AB09930C4900277BE9 /* shark.c */; settings = {COMPILER_FLAGS = "-DUSE_GL"; }; }; AF918A91158FC417002B5D1E /* sierpinski3d.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA55B8E09933FBF00F3E977 /* sierpinski3d.c */; settings = {COMPILER_FLAGS = "-DUSE_GL"; }; }; AF918A92158FC417002B5D1E /* skytentacles.c in Sources */ = {isa = PBXBuildFile; fileRef = AFE2A4720E2E90E300ADB298 /* skytentacles.c */; settings = {COMPILER_FLAGS = "-DUSE_GL"; }; }; AF918A93158FC417002B5D1E /* sonar-icmp.c in Sources */ = {isa = PBXBuildFile; fileRef = AFE30BFF0E52B1DC00CCF4A5 /* sonar-icmp.c */; settings = {COMPILER_FLAGS = "-DUSE_GL"; }; }; AF918A94158FC417002B5D1E /* sonar-sim.c in Sources */ = {isa = PBXBuildFile; fileRef = AFE30C000E52B1DC00CCF4A5 /* sonar-sim.c */; settings = {COMPILER_FLAGS = "-DUSE_GL"; }; }; AF918A95158FC417002B5D1E /* sonar.c in Sources */ = {isa = PBXBuildFile; fileRef = AFE30C010E52B1DC00CCF4A5 /* sonar.c */; settings = {COMPILER_FLAGS = "-DUSE_GL"; }; }; AF918A96158FC417002B5D1E /* spheremonics.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA55D940993590F00F3E977 /* spheremonics.c */; settings = {COMPILER_FLAGS = "-DUSE_GL"; }; }; AF918A97158FC473002B5D1E /* sproingies.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA55A470993351F00F3E977 /* sproingies.c */; settings = {COMPILER_FLAGS = "-DUSE_GL"; }; }; AF918A98158FC473002B5D1E /* sproingiewrap.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA55A480993351F00F3E977 /* sproingiewrap.c */; settings = {COMPILER_FLAGS = "-DUSE_GL"; }; }; AF918A99158FC473002B5D1E /* stairs.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA55A1A0993345900F3E977 /* stairs.c */; settings = {COMPILER_FLAGS = "-DUSE_GL"; }; }; AF918A9A158FC473002B5D1E /* starwars.c in Sources */ = {isa = PBXBuildFile; fileRef = AF77782809B650FF00EA3033 /* starwars.c */; settings = {COMPILER_FLAGS = "-DUSE_GL"; }; }; AF918A9B158FC473002B5D1E /* stonerview-move.c in Sources */ = {isa = PBXBuildFile; fileRef = AF7777BF09B64BD400EA3033 /* stonerview-move.c */; settings = {COMPILER_FLAGS = "-DUSE_GL"; }; }; AF918A9C158FC473002B5D1E /* stonerview-osc.c in Sources */ = {isa = PBXBuildFile; fileRef = AF7777C109B64BD400EA3033 /* stonerview-osc.c */; settings = {COMPILER_FLAGS = "-DUSE_GL"; }; }; AF918A9D158FC473002B5D1E /* stonerview-view.c in Sources */ = {isa = PBXBuildFile; fileRef = AF7777C309B64BD400EA3033 /* stonerview-view.c */; settings = {COMPILER_FLAGS = "-DUSE_GL"; }; }; AF918A9E158FC473002B5D1E /* stonerview.c in Sources */ = {isa = PBXBuildFile; fileRef = AF7777C409B64BD400EA3033 /* stonerview.c */; settings = {COMPILER_FLAGS = "-DUSE_GL"; }; }; AF918A9F158FC473002B5D1E /* superquadrics.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA559A80993326300F3E977 /* superquadrics.c */; settings = {COMPILER_FLAGS = "-DUSE_GL"; }; }; AF918AA0158FC473002B5D1E /* surfaces.c in Sources */ = {isa = PBXBuildFile; fileRef = AF4A3463102A5A0E00A81B2A /* surfaces.c */; settings = {COMPILER_FLAGS = "-DUSE_GL"; }; }; AF918AA1158FC473002B5D1E /* swim.c in Sources */ = {isa = PBXBuildFile; fileRef = AF0839AC09930C4900277BE9 /* swim.c */; settings = {COMPILER_FLAGS = "-DUSE_GL"; }; }; AF918AA2158FC473002B5D1E /* tangram.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA563090993948F00F3E977 /* tangram.c */; settings = {COMPILER_FLAGS = "-DUSE_GL"; }; }; AF918AA3158FC473002B5D1E /* tangram_shapes.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA563070993948F00F3E977 /* tangram_shapes.c */; settings = {COMPILER_FLAGS = "-DUSE_GL"; }; }; AF918AA4158FC473002B5D1E /* teapot.c in Sources */ = {isa = PBXBuildFile; fileRef = AFC211930E4E30C800D87B6E /* teapot.c */; settings = {COMPILER_FLAGS = "-DUSE_GL"; }; }; AF918AA5158FC473002B5D1E /* timetunnel.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA5638E0993980D00F3E977 /* timetunnel.c */; settings = {COMPILER_FLAGS = "-DUSE_GL"; }; }; AF918AA6158FC473002B5D1E /* toast.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA55E990993608800F3E977 /* toast.c */; settings = {COMPILER_FLAGS = "-DUSE_GL"; }; }; AF918AA7158FC473002B5D1E /* toast2.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA55E9B0993608800F3E977 /* toast2.c */; settings = {COMPILER_FLAGS = "-DUSE_GL"; }; }; AF918AA8158FC473002B5D1E /* toaster.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA55EAB0993608800F3E977 /* toaster.c */; settings = {COMPILER_FLAGS = "-DUSE_GL"; }; }; AF918AA9158FC473002B5D1E /* toaster_base.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA55E9D0993608800F3E977 /* toaster_base.c */; settings = {COMPILER_FLAGS = "-DUSE_GL"; }; }; AF918AAA158FC473002B5D1E /* toaster_handle.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA55E9F0993608800F3E977 /* toaster_handle.c */; settings = {COMPILER_FLAGS = "-DUSE_GL"; }; }; AF918AAB158FC473002B5D1E /* toaster_handle2.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA55EA10993608800F3E977 /* toaster_handle2.c */; settings = {COMPILER_FLAGS = "-DUSE_GL"; }; }; AF918AAC158FC473002B5D1E /* toaster_jet.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA55EA30993608800F3E977 /* toaster_jet.c */; settings = {COMPILER_FLAGS = "-DUSE_GL"; }; }; AF918AAD158FC473002B5D1E /* toaster_knob.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA55EA50993608800F3E977 /* toaster_knob.c */; settings = {COMPILER_FLAGS = "-DUSE_GL"; }; }; AF918AAE158FC473002B5D1E /* toaster_slots.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA55EA70993608800F3E977 /* toaster_slots.c */; settings = {COMPILER_FLAGS = "-DUSE_GL"; }; }; AF918AAF158FC473002B5D1E /* toaster_wing.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA55EA90993608800F3E977 /* toaster_wing.c */; settings = {COMPILER_FLAGS = "-DUSE_GL"; }; }; AF918AB0158FC473002B5D1E /* topblock.c in Sources */ = {isa = PBXBuildFile; fileRef = AF998EF80A083E750051049D /* topblock.c */; settings = {COMPILER_FLAGS = "-DUSE_GL"; }; }; AF918AB1158FC47B002B5D1E /* tunnel_draw.c in Sources */ = {isa = PBXBuildFile; fileRef = AF083A58099312B000277BE9 /* tunnel_draw.c */; settings = {COMPILER_FLAGS = "-DUSE_GL"; }; }; AF918AB2158FC47B002B5D1E /* voronoi.c in Sources */ = {isa = PBXBuildFile; fileRef = AF0DCA5F0C4CBB7300D76972 /* voronoi.c */; settings = {COMPILER_FLAGS = "-DUSE_GL"; }; }; AF918AB3158FC47B002B5D1E /* whale.c in Sources */ = {isa = PBXBuildFile; fileRef = AF0839AD09930C4900277BE9 /* whale.c */; settings = {COMPILER_FLAGS = "-DUSE_GL"; }; }; AF918AB4158FC53D002B5D1E /* abstractile.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFE6A4360CDD8026002805BF /* abstractile.xml */; }; AF918AB5158FC53D002B5D1E /* anemone.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258680988A468000655EE /* anemone.xml */; }; AF918AB6158FC53D002B5D1E /* anemotaxis.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258690988A468000655EE /* anemotaxis.xml */; }; AF918AB8158FC53D002B5D1E /* antinspect.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC2586B0988A468000655EE /* antinspect.xml */; }; AF918AB9158FC53D002B5D1E /* antmaze.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC2586C0988A468000655EE /* antmaze.xml */; }; AF918ABA158FC53D002B5D1E /* antspotlight.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC2586D0988A468000655EE /* antspotlight.xml */; }; AF918ABB158FC53D002B5D1E /* apollonian.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC2586E0988A468000655EE /* apollonian.xml */; }; AF918ABC158FC53D002B5D1E /* apple2.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC2586F0988A468000655EE /* apple2.xml */; }; AF918ABD158FC53D002B5D1E /* atlantis.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258700988A468000655EE /* atlantis.xml */; }; AF918ABE158FC53D002B5D1E /* attraction.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258710988A468000655EE /* attraction.xml */; }; AF918ABF158FC53D002B5D1E /* atunnel.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258720988A468000655EE /* atunnel.xml */; }; AF918AC0158FC53D002B5D1E /* barcode.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258730988A468000655EE /* barcode.xml */; }; AF918AC1158FC53D002B5D1E /* blaster.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258740988A468000655EE /* blaster.xml */; }; AF918AC2158FC53D002B5D1E /* blinkbox.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258750988A468000655EE /* blinkbox.xml */; }; AF918AC3158FC53D002B5D1E /* blitspin.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258760988A468000655EE /* blitspin.xml */; }; AF918AC4158FC53D002B5D1E /* blocktube.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258770988A468000655EE /* blocktube.xml */; }; AF918AC5158FC53D002B5D1E /* boing.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258780988A468000655EE /* boing.xml */; }; AF918AC6158FC53D002B5D1E /* bouboule.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258790988A468000655EE /* bouboule.xml */; }; AF918AC7158FC53D002B5D1E /* bouncingcow.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC2587A0988A468000655EE /* bouncingcow.xml */; }; AF918AC8158FC53D002B5D1E /* boxed.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC2587B0988A468000655EE /* boxed.xml */; }; AF918AC9158FC53D002B5D1E /* boxfit.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC2587C0988A468000655EE /* boxfit.xml */; }; AF918ACA158FC53D002B5D1E /* braid.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC2587D0988A468000655EE /* braid.xml */; }; AF918ACB158FC53D002B5D1E /* bsod.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC2587E0988A468000655EE /* bsod.xml */; }; AF918ACC158FC53D002B5D1E /* bubble3d.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC2587F0988A468000655EE /* bubble3d.xml */; }; AF918ACE158FC53D002B5D1E /* bumps.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258810988A468000655EE /* bumps.xml */; }; AF918ACF158FC53D002B5D1E /* cage.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258820988A468000655EE /* cage.xml */; }; AF918AD0158FC53D002B5D1E /* carousel.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258830988A468000655EE /* carousel.xml */; }; AF918AD1158FC53D002B5D1E /* ccurve.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258840988A468000655EE /* ccurve.xml */; }; AF918AD2158FC53D002B5D1E /* celtic.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258850988A468000655EE /* celtic.xml */; }; AF918AD3158FC53D002B5D1E /* circuit.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258860988A468000655EE /* circuit.xml */; }; AF918AD4158FC53D002B5D1E /* cloudlife.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258870988A468000655EE /* cloudlife.xml */; }; AF918AD5158FC53D002B5D1E /* companioncube.xml in Resources */ = {isa = PBXBuildFile; fileRef = AF3581E61431D61D00E09C51 /* companioncube.xml */; }; AF918AD6158FC53D002B5D1E /* compass.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258880988A468000655EE /* compass.xml */; }; AF918AD7158FC53D002B5D1E /* coral.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258890988A468000655EE /* coral.xml */; }; AF918AD8158FC53D002B5D1E /* crackberg.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC2588B0988A468000655EE /* crackberg.xml */; }; AF918ADA158FC53D002B5D1E /* crystal.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC2588D0988A468000655EE /* crystal.xml */; }; AF918ADB158FC53D002B5D1E /* cube21.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC2588E0988A468000655EE /* cube21.xml */; }; AF918ADC158FC53D002B5D1E /* cubenetic.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC2588F0988A468000655EE /* cubenetic.xml */; }; AF918ADD158FC53D002B5D1E /* cubestorm.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258900988A468000655EE /* cubestorm.xml */; }; AF918ADE158FC53D002B5D1E /* cubicgrid.xml in Resources */ = {isa = PBXBuildFile; fileRef = AF4FF4D30D52CCAA00666F98 /* cubicgrid.xml */; }; AF918ADF158FC53D002B5D1E /* cwaves.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFF4634B0C44046500EE6509 /* cwaves.xml */; }; AF918AE0158FC53D002B5D1E /* cynosure.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258910988A468000655EE /* cynosure.xml */; }; AF918AE1158FC53D002B5D1E /* dangerball.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258920988A468000655EE /* dangerball.xml */; }; AF918AE2158FC53D002B5D1E /* decayscreen.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258930988A468000655EE /* decayscreen.xml */; }; AF918AE3158FC53D002B5D1E /* deco.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258940988A468000655EE /* deco.xml */; }; AF918AE4158FC53D002B5D1E /* deluxe.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258950988A468000655EE /* deluxe.xml */; }; AF918AE5158FC53D002B5D1E /* demon.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258960988A468000655EE /* demon.xml */; }; AF918AE6158FC53D002B5D1E /* discrete.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258970988A468000655EE /* discrete.xml */; }; AF918AE7158FC53D002B5D1E /* distort.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258980988A468000655EE /* distort.xml */; }; AF918AE9158FC53D002B5D1E /* drift.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258990988A468000655EE /* drift.xml */; }; AF918AEA158FC53D002B5D1E /* endgame.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC2589B0988A468000655EE /* endgame.xml */; }; AF918AEB158FC53D002B5D1E /* engine.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC2589C0988A468000655EE /* engine.xml */; }; AF918AEC158FC53D002B5D1E /* epicycle.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC2589D0988A468000655EE /* epicycle.xml */; }; AF918AED158FC53D002B5D1E /* eruption.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC2589E0988A468000655EE /* eruption.xml */; }; AF918AEE158FC53D002B5D1E /* euler2d.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC2589F0988A468000655EE /* euler2d.xml */; }; AF918AF0158FC53D002B5D1E /* fadeplot.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258A10988A468000655EE /* fadeplot.xml */; }; AF918AF1158FC53D002B5D1E /* fiberlamp.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258A20988A468000655EE /* fiberlamp.xml */; }; AF918AF2158FC53D002B5D1E /* fireworkx.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258A40988A468000655EE /* fireworkx.xml */; }; AF918AF4158FC53D002B5D1E /* flame.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258A60988A468000655EE /* flame.xml */; }; AF918AF5158FC53D002B5D1E /* flipflop.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258A70988A468000655EE /* flipflop.xml */; }; AF918AF6158FC53D002B5D1E /* flipscreen3d.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258A80988A468000655EE /* flipscreen3d.xml */; }; AF918AF7158FC53D002B5D1E /* fliptext.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258A90988A468000655EE /* fliptext.xml */; }; AF918AF8158FC53D002B5D1E /* flow.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258AA0988A468000655EE /* flow.xml */; }; AF918AF9158FC53D002B5D1E /* fluidballs.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258AB0988A468000655EE /* fluidballs.xml */; }; AF918AFB158FC53D002B5D1E /* flyingtoasters.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258AD0988A468000655EE /* flyingtoasters.xml */; }; AF918AFC158FC53D002B5D1E /* fontglide.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258AE0988A468000655EE /* fontglide.xml */; }; AF918AFE158FC53D002B5D1E /* fuzzyflakes.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258B00988A468000655EE /* fuzzyflakes.xml */; }; AF918AFF158FC53D002B5D1E /* galaxy.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258B10988A468000655EE /* galaxy.xml */; }; AF918B00158FC53D002B5D1E /* gears.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258B20988A468000655EE /* gears.xml */; }; AF918B01158FC53D002B5D1E /* gflux.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258B30988A468000655EE /* gflux.xml */; }; AF918B02158FC53D002B5D1E /* glblur.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258B40988A468000655EE /* glblur.xml */; }; AF918B03158FC53D002B5D1E /* glcells.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFF463730C440BAC00EE6509 /* glcells.xml */; }; AF918B04158FC53D002B5D1E /* gleidescope.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258B50988A468000655EE /* gleidescope.xml */; }; AF918B06158FC53D002B5D1E /* glhanoi.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258B70988A468000655EE /* glhanoi.xml */; }; AF918B07158FC53D002B5D1E /* glknots.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258B80988A468000655EE /* glknots.xml */; }; AF918B08158FC53D002B5D1E /* glmatrix.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258B90988A468000655EE /* glmatrix.xml */; }; AF918B09158FC53D002B5D1E /* glplanet.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258BA0988A468000655EE /* glplanet.xml */; }; AF918B0A158FC53D002B5D1E /* glschool.xml in Resources */ = {isa = PBXBuildFile; fileRef = AF48E16B0A0C26A400F94CF9 /* glschool.xml */; }; AF918B0B158FC53D002B5D1E /* glslideshow.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258BB0988A468000655EE /* glslideshow.xml */; }; AF918B0C158FC53D002B5D1E /* glsnake.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258BC0988A468000655EE /* glsnake.xml */; }; AF918B0D158FC53D002B5D1E /* gltext.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258BD0988A468000655EE /* gltext.xml */; }; AF918B0E158FC53D002B5D1E /* goop.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258BF0988A468000655EE /* goop.xml */; }; AF918B0F158FC53D002B5D1E /* grav.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258C00988A468000655EE /* grav.xml */; }; AF918B10158FC53D002B5D1E /* greynetic.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258C10988A468000655EE /* greynetic.xml */; }; AF918B11158FC53D002B5D1E /* halftone.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258C20988A468000655EE /* halftone.xml */; }; AF918B12158FC53D002B5D1E /* halo.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258C30988A468000655EE /* halo.xml */; }; AF918B13158FC53D002B5D1E /* helix.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258C40988A468000655EE /* helix.xml */; }; AF918B14158FC53D002B5D1E /* hilbert.xml in Resources */ = {isa = PBXBuildFile; fileRef = AF78D18E142DD99A002AAF77 /* hilbert.xml */; }; AF918B15158FC53D002B5D1E /* hopalong.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258C50988A468000655EE /* hopalong.xml */; }; AF918B18158FC53D002B5D1E /* hypertorus.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258C80988A468000655EE /* hypertorus.xml */; }; AF918B19158FC53D002B5D1E /* hypnowheel.xml in Resources */ = {isa = PBXBuildFile; fileRef = AF3C715F0D624C7C0030CC0D /* hypnowheel.xml */; }; AF918B1A158FC53D002B5D1E /* ifs.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258C90988A468000655EE /* ifs.xml */; }; AF918B1B158FC53D002B5D1E /* imsmap.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258CA0988A468000655EE /* imsmap.xml */; }; AF918B1C158FC53D002B5D1E /* interaggregate.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258CB0988A468000655EE /* interaggregate.xml */; }; AF918B1D158FC53D002B5D1E /* interference.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258CC0988A468000655EE /* interference.xml */; }; AF918B1E158FC53D002B5D1E /* intermomentary.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258CD0988A468000655EE /* intermomentary.xml */; }; AF918B1F158FC53D002B5D1E /* jigglypuff.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258CE0988A468000655EE /* jigglypuff.xml */; }; AF918B22158FC53D002B5D1E /* juggler3d.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258D10988A468000655EE /* juggler3d.xml */; }; AF918B23158FC53D002B5D1E /* julia.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258D20988A468000655EE /* julia.xml */; }; AF918B24158FC53D002B5D1E /* kaleidescope.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258D30988A468000655EE /* kaleidescope.xml */; }; AF918B25158FC53D002B5D1E /* klein.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258D40988A468000655EE /* klein.xml */; }; AF918B26158FC53D002B5D1E /* kumppa.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258D50988A468000655EE /* kumppa.xml */; }; AF918B27158FC53D002B5D1E /* lament.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258D60988A468000655EE /* lament.xml */; }; AF918B29158FC53D002B5D1E /* lavalite.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258D80988A468000655EE /* lavalite.xml */; }; AF918B30158FC53D002B5D1E /* loop.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258DD0988A468000655EE /* loop.xml */; }; AF918B31158FC53D002B5D1E /* m6502.xml in Resources */ = {isa = PBXBuildFile; fileRef = AF0DCA370C4C74B700D76972 /* m6502.xml */; }; AF918B32158FC53D002B5D1E /* maze.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258DE0988A468000655EE /* maze.xml */; }; AF918B33158FC53D002B5D1E /* memscroller.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258DF0988A469000655EE /* memscroller.xml */; }; AF918B34158FC53D002B5D1E /* menger.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258E00988A469000655EE /* menger.xml */; }; AF918B35158FC53D002B5D1E /* metaballs.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258E10988A469000655EE /* metaballs.xml */; }; AF918B36158FC53D002B5D1E /* mirrorblob.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258E20988A469000655EE /* mirrorblob.xml */; }; AF918B38158FC53D002B5D1E /* moebius.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258E40988A469000655EE /* moebius.xml */; }; AF918B39158FC53D002B5D1E /* moebiusgears.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFE6A40D0CDD7BDC002805BF /* moebiusgears.xml */; }; AF918B3A158FC53D002B5D1E /* moire.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258E50988A469000655EE /* moire.xml */; }; AF918B3B158FC53D002B5D1E /* moire2.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258E60988A469000655EE /* moire2.xml */; }; AF918B3C158FC53D002B5D1E /* molecule.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258E70988A469000655EE /* molecule.xml */; }; AF918B3D158FC53D002B5D1E /* morph3d.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258E80988A469000655EE /* morph3d.xml */; }; AF918B3E158FC53D002B5D1E /* mountain.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258E90988A469000655EE /* mountain.xml */; }; AF918B3F158FC53D002B5D1E /* munch.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258EA0988A469000655EE /* munch.xml */; }; AF918B40158FC53D002B5D1E /* nerverot.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258EB0988A469000655EE /* nerverot.xml */; }; AF918B41158FC53D002B5D1E /* noof.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258EC0988A469000655EE /* noof.xml */; }; AF918B42158FC53D002B5D1E /* noseguy.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258ED0988A469000655EE /* noseguy.xml */; }; AF918B43158FC53D002B5D1E /* pacman.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258EE0988A469000655EE /* pacman.xml */; }; AF918B44158FC53D002B5D1E /* pedal.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258EF0988A469000655EE /* pedal.xml */; }; AF918B45158FC53D002B5D1E /* penetrate.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258F00988A469000655EE /* penetrate.xml */; }; AF918B46158FC53D002B5D1E /* penrose.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258F10988A469000655EE /* penrose.xml */; }; AF918B47158FC53D002B5D1E /* petri.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258F20988A469000655EE /* petri.xml */; }; AF918B48158FC53E002B5D1E /* phosphor.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258F30988A469000655EE /* phosphor.xml */; }; AF918B49158FC53E002B5D1E /* photopile.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFD51DB80F063BE700471C02 /* photopile.xml */; }; AF918B4A158FC53E002B5D1E /* piecewise.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258F40988A469000655EE /* piecewise.xml */; }; AF918B4B158FC53E002B5D1E /* pinion.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258F50988A469000655EE /* pinion.xml */; }; AF918B4C158FC53E002B5D1E /* pipes.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258F60988A469000655EE /* pipes.xml */; }; AF918B4E158FC53E002B5D1E /* polyominoes.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258F80988A469000655EE /* polyominoes.xml */; }; AF918B4F158FC53E002B5D1E /* polytopes.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258F90988A469000655EE /* polytopes.xml */; }; AF918B50158FC53E002B5D1E /* pong.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258FA0988A469000655EE /* pong.xml */; }; AF918B51158FC53E002B5D1E /* popsquares.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258FB0988A469000655EE /* popsquares.xml */; }; AF918B52158FC53E002B5D1E /* providence.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258FC0988A469000655EE /* providence.xml */; }; AF918B53158FC53E002B5D1E /* pulsar.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258FD0988A469000655EE /* pulsar.xml */; }; AF918B54158FC53E002B5D1E /* pyro.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258FE0988A469000655EE /* pyro.xml */; }; AF918B55158FC53E002B5D1E /* qix.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258FF0988A469000655EE /* qix.xml */; }; AF918B56158FC53E002B5D1E /* queens.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC259000988A469000655EE /* queens.xml */; }; AF918B57158FC53E002B5D1E /* rdbomb.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFCCCBAD09BFE4B000353F4D /* rdbomb.xml */; }; AF918B58158FC53E002B5D1E /* ripples.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC259030988A469000655EE /* ripples.xml */; }; AF918B59158FC53E002B5D1E /* rocks.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC259040988A469000655EE /* rocks.xml */; }; AF918B5A158FC53E002B5D1E /* rorschach.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC259050988A469000655EE /* rorschach.xml */; }; AF918B5C158FC53E002B5D1E /* rotzoomer.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC259070988A469000655EE /* rotzoomer.xml */; }; AF918B5D158FC53E002B5D1E /* rubik.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC259080988A469000655EE /* rubik.xml */; }; AF918B5E158FC53E002B5D1E /* rubikblocks.xml in Resources */ = {isa = PBXBuildFile; fileRef = AF32D9FC0F3AD1330080F535 /* rubikblocks.xml */; }; AF918B5F158FC53E002B5D1E /* sballs.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC259090988A469000655EE /* sballs.xml */; }; AF918B60158FC53E002B5D1E /* shadebobs.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC2590A0988A469000655EE /* shadebobs.xml */; }; AF918B61158FC53E002B5D1E /* sierpinski.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC2590B0988A469000655EE /* sierpinski.xml */; }; AF918B62158FC53E002B5D1E /* sierpinski3d.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC2590C0988A469000655EE /* sierpinski3d.xml */; }; AF918B63158FC53E002B5D1E /* skytentacles.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFE2A4740E2E911200ADB298 /* skytentacles.xml */; }; AF918B64158FC53E002B5D1E /* slidescreen.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC2590D0988A469000655EE /* slidescreen.xml */; }; AF918B65158FC53E002B5D1E /* slip.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC2590E0988A469000655EE /* slip.xml */; }; AF918B66158FC53E002B5D1E /* sonar.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC2590F0988A469000655EE /* sonar.xml */; }; AF918B67158FC53E002B5D1E /* speedmine.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC259100988A469000655EE /* speedmine.xml */; }; AF918B69158FC53E002B5D1E /* spheremonics.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC259130988A469000655EE /* spheremonics.xml */; }; AF918B6B158FC53E002B5D1E /* spotlight.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC259150988A469000655EE /* spotlight.xml */; }; AF918B6C158FC53E002B5D1E /* sproingies.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC259160988A469000655EE /* sproingies.xml */; }; AF918B6D158FC53E002B5D1E /* squiral.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC259170988A469000655EE /* squiral.xml */; }; AF918B6E158FC53E002B5D1E /* stairs.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC259190988A469000655EE /* stairs.xml */; }; AF918B6F158FC53E002B5D1E /* starfish.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC2591A0988A469000655EE /* starfish.xml */; }; AF918B70158FC53E002B5D1E /* starwars.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC2591B0988A469000655EE /* starwars.xml */; }; AF918B71158FC53E002B5D1E /* stonerview.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC2591C0988A469000655EE /* stonerview.xml */; }; AF918B72158FC53E002B5D1E /* strange.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC2591D0988A469000655EE /* strange.xml */; }; AF918B73158FC53E002B5D1E /* substrate.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC2591E0988A469000655EE /* substrate.xml */; }; AF918B74158FC53E002B5D1E /* superquadrics.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC2591F0988A469000655EE /* superquadrics.xml */; }; AF918B75158FC53E002B5D1E /* surfaces.xml in Resources */ = {isa = PBXBuildFile; fileRef = AF4A3461102A59EB00A81B2A /* surfaces.xml */; }; AF918B76158FC53E002B5D1E /* swirl.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC259200988A469000655EE /* swirl.xml */; }; AF918B78158FC53E002B5D1E /* tangram.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC259220988A469000655EE /* tangram.xml */; }; AF918B79158FC53E002B5D1E /* thornbird.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC259230988A469000655EE /* thornbird.xml */; }; AF918B7A158FC53E002B5D1E /* timetunnel.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC259240988A469000655EE /* timetunnel.xml */; }; AF918B7B158FC53E002B5D1E /* topblock.xml in Resources */ = {isa = PBXBuildFile; fileRef = AF998EFA0A083E8C0051049D /* topblock.xml */; }; AF918B7C158FC53E002B5D1E /* triangle.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC259250988A469000655EE /* triangle.xml */; }; AF918B7D158FC53E002B5D1E /* tronbit.xml in Resources */ = {isa = PBXBuildFile; fileRef = AF3582211433318500E09C51 /* tronbit.xml */; }; AF918B7E158FC53E002B5D1E /* truchet.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC259260988A469000655EE /* truchet.xml */; }; AF918B7F158FC53E002B5D1E /* twang.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC259270988A469000655EE /* twang.xml */; }; AF918B80158FC53E002B5D1E /* vermiculate.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC259280988A469000655EE /* vermiculate.xml */; }; AF918B83158FC53E002B5D1E /* voronoi.xml in Resources */ = {isa = PBXBuildFile; fileRef = AF0DCA610C4CBB8E00D76972 /* voronoi.xml */; }; AF918B84158FC53E002B5D1E /* wander.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC2592B0988A469000655EE /* wander.xml */; }; AF918B86158FC53E002B5D1E /* whirlwindwarp.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC2592D0988A469000655EE /* whirlwindwarp.xml */; }; AF918B89158FC53E002B5D1E /* wormhole.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC259310988A469000655EE /* wormhole.xml */; }; AF918B8A158FC53E002B5D1E /* xanalogtv.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC259320988A469000655EE /* xanalogtv.xml */; }; AF918B8B158FC53E002B5D1E /* xflame.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC259370988A469000655EE /* xflame.xml */; }; AF918B8C158FC53E002B5D1E /* xjack.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC259380988A469000655EE /* xjack.xml */; }; AF918B8D158FC53E002B5D1E /* xlyap.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC259390988A469000655EE /* xlyap.xml */; }; AF918B8E158FC53E002B5D1E /* xmatrix.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC2593A0988A469000655EE /* xmatrix.xml */; }; AF918B8F158FC53E002B5D1E /* xrayswarm.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC2593D0988A469000655EE /* xrayswarm.xml */; }; AF918B90158FC53E002B5D1E /* xspirograph.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC2593F0988A469000655EE /* xspirograph.xml */; }; AF918B91158FC554002B5D1E /* zoom.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC259430988A469000655EE /* zoom.xml */; }; AF918B96158FD0EA002B5D1E /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AF918B99158FF045002B5D1E /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AF918B9A158FF04C002B5D1E /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AF975734099C317000B05160 /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF97573F099C31BB00B05160 /* imsmap.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258CA0988A468000655EE /* imsmap.xml */; }; AF975741099C31DD00B05160 /* imsmap.c in Sources */ = {isa = PBXBuildFile; fileRef = AF975740099C31DD00B05160 /* imsmap.c */; }; AF97577B099C374A00B05160 /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF975788099C378B00B05160 /* moire.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258E50988A469000655EE /* moire.xml */; }; AF97578A099C37A500B05160 /* moire.c in Sources */ = {isa = PBXBuildFile; fileRef = AF975789099C37A500B05160 /* moire.c */; }; AF9757C8099C3E6300B05160 /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF9757D6099C3EB800B05160 /* rd-bomb.c in Sources */ = {isa = PBXBuildFile; fileRef = AF9757D5099C3EB800B05160 /* rd-bomb.c */; }; AF97580E099C41D500B05160 /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF97581B099C423600B05160 /* xflame.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC259370988A469000655EE /* xflame.xml */; }; AF975830099C427500B05160 /* xflame.c in Sources */ = {isa = PBXBuildFile; fileRef = AF97582F099C427500B05160 /* xflame.c */; }; AF97586B099C475900B05160 /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF975879099C490500B05160 /* shadebobs.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC2590A0988A469000655EE /* shadebobs.xml */; }; AF97587B099C492000B05160 /* shadebobs.c in Sources */ = {isa = PBXBuildFile; fileRef = AF97587A099C492000B05160 /* shadebobs.c */; }; AF975A3C099C681F00B05160 /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF975A48099C688B00B05160 /* metaballs.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258E10988A469000655EE /* metaballs.xml */; }; AF975A4A099C689F00B05160 /* metaballs.c in Sources */ = {isa = PBXBuildFile; fileRef = AF975A49099C689F00B05160 /* metaballs.c */; }; AF975A72099C6AB200B05160 /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF975A82099C6B2700B05160 /* eruption.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC2589E0988A468000655EE /* eruption.xml */; }; AF975A84099C6B4900B05160 /* eruption.c in Sources */ = {isa = PBXBuildFile; fileRef = AF975A83099C6B4900B05160 /* eruption.c */; }; AF975A8C099C6BC300B05160 /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF975A98099C6C2000B05160 /* barcode.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258730988A468000655EE /* barcode.xml */; }; AF975A9A099C6C3600B05160 /* barcode.c in Sources */ = {isa = PBXBuildFile; fileRef = AF975A99099C6C3500B05160 /* barcode.c */; }; AF975ADD099C6EB100B05160 /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF975AED099C6EFE00B05160 /* fireworkx.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258A40988A468000655EE /* fireworkx.xml */; }; AF975AEF099C6F1700B05160 /* fireworkx.c in Sources */ = {isa = PBXBuildFile; fileRef = AF975AEE099C6F1700B05160 /* fireworkx.c */; }; AF975B02099C6FE400B05160 /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF975B15099C709E00B05160 /* memscroller.c in Sources */ = {isa = PBXBuildFile; fileRef = AF975B14099C709E00B05160 /* memscroller.c */; }; AF975B16099C70B200B05160 /* memscroller.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258DF0988A469000655EE /* memscroller.xml */; }; AF975C18099C8C1500B05160 /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF975C28099C8C6A00B05160 /* halo.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258C30988A468000655EE /* halo.xml */; }; AF975C29099C8C7600B05160 /* halo.c in Sources */ = {isa = PBXBuildFile; fileRef = AF480C29098E295D00FB32B8 /* halo.c */; }; AF975C44099C8DCF00B05160 /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF975C55099C8E2800B05160 /* greynetic.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258C10988A468000655EE /* greynetic.xml */; }; AF975C56099C8E3000B05160 /* greynetic.c in Sources */ = {isa = PBXBuildFile; fileRef = AF480C21098E28EF00FB32B8 /* greynetic.c */; }; AF975C64099C8F3F00B05160 /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF975C75099C8FAC00B05160 /* noseguy.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258ED0988A469000655EE /* noseguy.xml */; }; AF975C77099C8FC700B05160 /* noseguy.c in Sources */ = {isa = PBXBuildFile; fileRef = AF975C76099C8FC700B05160 /* noseguy.c */; }; AF975C93099C929800B05160 /* xpm-pixmap.c in Sources */ = {isa = PBXBuildFile; fileRef = AF975C91099C929800B05160 /* xpm-pixmap.c */; }; AF975C94099C929800B05160 /* xpm-pixmap.h in Headers */ = {isa = PBXBuildFile; fileRef = AF975C92099C929800B05160 /* xpm-pixmap.h */; }; AF975D59099CA0F000B05160 /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF975D65099CA14B00B05160 /* rocks.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC259040988A469000655EE /* rocks.xml */; }; AF975D67099CA16A00B05160 /* rocks.c in Sources */ = {isa = PBXBuildFile; fileRef = AF975D66099CA16A00B05160 /* rocks.c */; }; AF976FCC0989CAD7001F8B92 /* deco.c in Sources */ = {isa = PBXBuildFile; fileRef = AFC25B5E0988BA63000655EE /* deco.c */; }; AF976FCD0989CAEA001F8B92 /* deco.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258940988A468000655EE /* deco.xml */; }; AF9770420989D21A001F8B92 /* rorschach.c in Sources */ = {isa = PBXBuildFile; fileRef = AFE1FD620981E40800F7970E /* rorschach.c */; }; AF9770430989D226001F8B92 /* rorschach.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC259050988A469000655EE /* rorschach.xml */; }; AF97707F0989D327001F8B92 /* attraction.c in Sources */ = {isa = PBXBuildFile; fileRef = AF976DFA09896BEB001F8B92 /* attraction.c */; }; AF9770800989D32E001F8B92 /* attraction.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258710988A468000655EE /* attraction.xml */; }; AF9771DF0989DC88001F8B92 /* SaverRunner.m in Sources */ = {isa = PBXBuildFile; fileRef = AFE1FD400981E32E00F7970E /* SaverRunner.m */; }; AF9772C80989DCD5001F8B92 /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 29B97316FDCFA39411CA2CEA /* main.m */; }; AF9772E30989DFC6001F8B92 /* SaverRunner.nib in Resources */ = {isa = PBXBuildFile; fileRef = AF9772E10989DFC6001F8B92 /* SaverRunner.nib */; }; AF998ED60A083A280051049D /* xscreensaver-text in Resources */ = {isa = PBXBuildFile; fileRef = AF0FAF0B09CA6FF900EE1051 /* xscreensaver-text */; }; AF998EE10A083DB30051049D /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF998EF90A083E750051049D /* topblock.c in Sources */ = {isa = PBXBuildFile; fileRef = AF998EF80A083E750051049D /* topblock.c */; }; AF998EFB0A083E8C0051049D /* topblock.xml in Resources */ = {isa = PBXBuildFile; fileRef = AF998EFA0A083E8C0051049D /* topblock.xml */; }; AF9CC7A1099580E70075E99B /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF9CC8EE09958D920075E99B /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF9CCAB509959CEF0075E99B /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF9CCAB609959CF70075E99B /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF9CCAB709959D000075E99B /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF9CCAB809959D0D0075E99B /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF9CCAB909959D100075E99B /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF9CCABA09959D170075E99B /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF9CCABB09959D1C0075E99B /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF9CCABC09959D200075E99B /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF9CCABD09959D250075E99B /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF9CCABE09959D290075E99B /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF9CCABF09959D2E0075E99B /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF9CCAC009959D310075E99B /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF9CCAC109959D380075E99B /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF9CCAC209959D3C0075E99B /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF9CCAC309959D420075E99B /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF9CCAC409959D450075E99B /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF9CCAC509959D4B0075E99B /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF9CCAC609959D500075E99B /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF9CCAC709959D550075E99B /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF9CCAC809959D5A0075E99B /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF9CCAC909959D5D0075E99B /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF9CCACA09959D630075E99B /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF9CCACB09959D680075E99B /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF9CCACC09959D6B0075E99B /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF9CCACD09959D720075E99B /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF9CCACE09959D750075E99B /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF9CCACF09959D7C0075E99B /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF9CCAD009959D800075E99B /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF9CCAD109959D850075E99B /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF9CCAD209959D8A0075E99B /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF9CCAD309959D8F0075E99B /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF9CCAD409959D980075E99B /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF9CCAD509959D9C0075E99B /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF9CCAD609959DA30075E99B /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF9CCAD709959DA70075E99B /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF9CCAD809959DAE0075E99B /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF9CCAD909959DB20075E99B /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF9CCADA09959DB60075E99B /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF9CCADB09959DBB0075E99B /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF9CCADC09959DC10075E99B /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF9CCADD09959DC60075E99B /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF9CCADE09959DCB0075E99B /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF9CCADF09959DCE0075E99B /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF9CCAE009959DD50075E99B /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF9CCAE109959DDA0075E99B /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF9CCAE209959DDF0075E99B /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF9CCAE309959DE20075E99B /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF9CCAE409959DE60075E99B /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF9CCAE509959DEB0075E99B /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF9CCAE609959DF00075E99B /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF9CCAE709959DF50075E99B /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF9CCAE809959DF90075E99B /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF9CCAE909959E000075E99B /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF9CCAEA09959E050075E99B /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF9CCAEB09959E090075E99B /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF9CCAEC09959E0D0075E99B /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF9CCAED09959E140075E99B /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF9CCAEE09959E170075E99B /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF9CCAEF09959E1E0075E99B /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF9CCAF009959E230075E99B /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF9CCAF109959E270075E99B /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF9D466D09B5109C006E59CF /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF9D467909B5110B006E59CF /* decayscreen.c in Sources */ = {isa = PBXBuildFile; fileRef = AF9D467809B5110B006E59CF /* decayscreen.c */; }; AF9D467A09B51126006E59CF /* decayscreen.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258930988A468000655EE /* decayscreen.xml */; }; AF9D468F09B51567006E59CF /* grabclient-osx.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9D468E09B51567006E59CF /* grabclient-osx.m */; }; AF9D473809B52EE0006E59CF /* colorbars.c in Sources */ = {isa = PBXBuildFile; fileRef = AF9D473609B52EE0006E59CF /* colorbars.c */; }; AF9D473909B52EE0006E59CF /* colorbars.h in Headers */ = {isa = PBXBuildFile; fileRef = AF9D473709B52EE0006E59CF /* colorbars.h */; }; AF9D474A09B5300A006E59CF /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF9D475609B5306A006E59CF /* slidescreen.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC2590D0988A469000655EE /* slidescreen.xml */; }; AF9D475909B53091006E59CF /* slidescreen.c in Sources */ = {isa = PBXBuildFile; fileRef = AF9D475809B53091006E59CF /* slidescreen.c */; }; AF9D476509B53166006E59CF /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF9D48D309B53214006E59CF /* zoom.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC259430988A469000655EE /* zoom.xml */; }; AF9D48D509B53229006E59CF /* zoom.c in Sources */ = {isa = PBXBuildFile; fileRef = AF9D48D409B53229006E59CF /* zoom.c */; }; AF9D48E109B53322006E59CF /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF9D48ED09B5338A006E59CF /* bumps.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258810988A468000655EE /* bumps.xml */; }; AF9D48F009B533AE006E59CF /* bumps.c in Sources */ = {isa = PBXBuildFile; fileRef = AF9D48EE09B533AE006E59CF /* bumps.c */; }; AF9D48FA09B535DA006E59CF /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF9D490609B536DE006E59CF /* distort.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258980988A468000655EE /* distort.xml */; }; AF9D490809B536F7006E59CF /* distort.c in Sources */ = {isa = PBXBuildFile; fileRef = AF9D490709B536F7006E59CF /* distort.c */; }; AF9D493109B53CBA006E59CF /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF9D493D09B53D3B006E59CF /* ripples.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC259030988A469000655EE /* ripples.xml */; }; AF9D493F09B53D55006E59CF /* ripples.c in Sources */ = {isa = PBXBuildFile; fileRef = AF9D493E09B53D55006E59CF /* ripples.c */; }; AF9D495A09B53FC9006E59CF /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF9D496609B54087006E59CF /* rotzoomer.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC259070988A469000655EE /* rotzoomer.xml */; }; AF9D496809B540A4006E59CF /* rotzoomer.c in Sources */ = {isa = PBXBuildFile; fileRef = AF9D496709B540A4006E59CF /* rotzoomer.c */; }; AF9D497209B5411D006E59CF /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF9D497E09B541CE006E59CF /* twang.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC259270988A469000655EE /* twang.xml */; }; AF9D498009B541E6006E59CF /* twang.c in Sources */ = {isa = PBXBuildFile; fileRef = AF9D497F09B541E5006E59CF /* twang.c */; }; AF9D499D09B544C2006E59CF /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF9D49A909B5457B006E59CF /* spotlight.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC259150988A469000655EE /* spotlight.xml */; }; AF9D49AB09B54596006E59CF /* spotlight.c in Sources */ = {isa = PBXBuildFile; fileRef = AF9D49AA09B54596006E59CF /* spotlight.c */; }; AF9D4C6F09B59F27006E59CF /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF9D4C7B09B5A02D006E59CF /* xlyap.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC259390988A469000655EE /* xlyap.xml */; }; AF9D4C7D09B5A044006E59CF /* xlyap.c in Sources */ = {isa = PBXBuildFile; fileRef = AF9D4C7C09B5A044006E59CF /* xlyap.c */; }; AF9D4CED09B5AA8E006E59CF /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF9D4CF909B5AC73006E59CF /* pong.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258FA0988A469000655EE /* pong.xml */; }; AF9D4CFD09B5AC94006E59CF /* analogtv.c in Sources */ = {isa = PBXBuildFile; fileRef = AF9D4CFA09B5AC94006E59CF /* analogtv.c */; }; AF9D4CFE09B5AC94006E59CF /* pong.c in Sources */ = {isa = PBXBuildFile; fileRef = AF9D4CFC09B5AC94006E59CF /* pong.c */; }; AF9D4D8409B5B2DC006E59CF /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF9D4D8509B5B2DC006E59CF /* analogtv.c in Sources */ = {isa = PBXBuildFile; fileRef = AF9D4CFA09B5AC94006E59CF /* analogtv.c */; }; AF9D4D9109B5B42B006E59CF /* xanalogtv.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC259320988A469000655EE /* xanalogtv.xml */; }; AF9D4D9309B5B444006E59CF /* xanalogtv.c in Sources */ = {isa = PBXBuildFile; fileRef = AF9D4D9209B5B444006E59CF /* xanalogtv.c */; }; AF9D4DB509B5B71E006E59CF /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF9D4DB609B5B71E006E59CF /* analogtv.c in Sources */ = {isa = PBXBuildFile; fileRef = AF9D4CFA09B5AC94006E59CF /* analogtv.c */; }; AF9D4DC209B5B862006E59CF /* bsod.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC2587E0988A468000655EE /* bsod.xml */; }; AF9D4DC409B5B87D006E59CF /* bsod.c in Sources */ = {isa = PBXBuildFile; fileRef = AF9D4DC309B5B87D006E59CF /* bsod.c */; }; AF9D4DD409B5B990006E59CF /* apple2.c in Sources */ = {isa = PBXBuildFile; fileRef = AF9D4DD309B5B990006E59CF /* apple2.c */; }; AF9D4DF209B5BB19006E59CF /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF9D4DF309B5BB19006E59CF /* analogtv.c in Sources */ = {isa = PBXBuildFile; fileRef = AF9D4CFA09B5AC94006E59CF /* analogtv.c */; }; AF9D4DF509B5BB19006E59CF /* apple2.c in Sources */ = {isa = PBXBuildFile; fileRef = AF9D4DD309B5B990006E59CF /* apple2.c */; }; AF9D4E0409B5BC85006E59CF /* apple2.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC2586F0988A468000655EE /* apple2.xml */; }; AF9D4E0609B5BC9D006E59CF /* apple2-main.c in Sources */ = {isa = PBXBuildFile; fileRef = AF9D4E0509B5BC9D006E59CF /* apple2-main.c */; }; AF9E7EC9190F4C4000A8B01F /* enable_gc.c in Sources */ = {isa = PBXBuildFile; fileRef = AF9E7EC8190F4C4000A8B01F /* enable_gc.c */; }; AFA211891CD1AA2E00C0D2A1 /* textclient-mobile.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA211881CD1AA1800C0D2A1 /* textclient-mobile.c */; }; AFA2118A1CD1AA3A00C0D2A1 /* textclient-mobile.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA211881CD1AA1800C0D2A1 /* textclient-mobile.c */; }; AFA2118B1CD1AA3F00C0D2A1 /* textclient-mobile.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA211881CD1AA1800C0D2A1 /* textclient-mobile.c */; }; AFA211931CD59DAF00C0D2A1 /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AFA211951CD59DAF00C0D2A1 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AFA211961CD59DAF00C0D2A1 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AFA211971CD59DAF00C0D2A1 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AFA211981CD59DAF00C0D2A1 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AFA211991CD59DAF00C0D2A1 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AFA2119A1CD59DAF00C0D2A1 /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; AFA2119B1CD59DAF00C0D2A1 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AFA211A51CD5A00F00C0D2A1 /* raverhoop.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFA211A41CD59FD800C0D2A1 /* raverhoop.xml */; }; AFA211A61CD5A02600C0D2A1 /* raverhoop.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFA211A41CD59FD800C0D2A1 /* raverhoop.xml */; }; AFA211A71CD5A03F00C0D2A1 /* raverhoop.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA211A31CD59FD800C0D2A1 /* raverhoop.c */; }; AFA211A81CD5A04300C0D2A1 /* raverhoop.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA211A31CD59FD800C0D2A1 /* raverhoop.c */; settings = {COMPILER_FLAGS = "-DUSE_GL"; }; }; AFA339350B058505002B0E7D /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AFA33BAF0B0585F7002B0E7D /* webcollage-cocoa.m in Sources */ = {isa = PBXBuildFile; fileRef = AFA33BAE0B0585F7002B0E7D /* webcollage-cocoa.m */; }; AFA33BB00B05860F002B0E7D /* webcollage.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC2592C0988A469000655EE /* webcollage.xml */; }; AFA33BD10B0587EE002B0E7D /* webcollage-helper-cocoa.m in Sources */ = {isa = PBXBuildFile; fileRef = AFA33BD00B0587EE002B0E7D /* webcollage-helper-cocoa.m */; }; AFA33BDD0B058A30002B0E7D /* webcollage-helper in Resources */ = {isa = PBXBuildFile; fileRef = AFA33BC70B058740002B0E7D /* webcollage-helper */; }; AFA33C0C0B058ED2002B0E7D /* webcollage in Resources */ = {isa = PBXBuildFile; fileRef = AFA33C0A0B058E6B002B0E7D /* webcollage */; }; AFA55866099324D800F3E977 /* minixpm.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA55864099324D800F3E977 /* minixpm.c */; }; AFA55867099324D800F3E977 /* minixpm.h in Headers */ = {isa = PBXBuildFile; fileRef = AFA55865099324D800F3E977 /* minixpm.h */; }; AFA5595C099330E500F3E977 /* cage.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258820988A468000655EE /* cage.xml */; }; AFA5595E0993310500F3E977 /* cage.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA5595D0993310500F3E977 /* cage.c */; }; AFA55981099331AC00F3E977 /* moebius.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258E40988A469000655EE /* moebius.xml */; }; AFA55983099331C300F3E977 /* moebius.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA55982099331C300F3E977 /* moebius.c */; }; AFA559A70993325200F3E977 /* superquadrics.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC2591F0988A469000655EE /* superquadrics.xml */; }; AFA559A90993326300F3E977 /* superquadrics.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA559A80993326300F3E977 /* superquadrics.c */; }; AFA559CB099332CF00F3E977 /* morph3d.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258E80988A469000655EE /* morph3d.xml */; }; AFA559CD099332E800F3E977 /* morph3d.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA559CC099332E800F3E977 /* morph3d.c */; }; AFA559E90993333D00F3E977 /* rubik.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC259080988A469000655EE /* rubik.xml */; }; AFA559EB0993335C00F3E977 /* rubik.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA559EA0993335C00F3E977 /* rubik.c */; }; AFA55A190993344100F3E977 /* stairs.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC259190988A469000655EE /* stairs.xml */; }; AFA55A1B0993345900F3E977 /* stairs.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA55A1A0993345900F3E977 /* stairs.c */; }; AFA55A34099334CB00F3E977 /* sproingies.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC259160988A469000655EE /* sproingies.xml */; }; AFA55A4A0993351F00F3E977 /* s1_1.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA55A400993351F00F3E977 /* s1_1.c */; }; AFA55A4B0993351F00F3E977 /* s1_2.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA55A410993351F00F3E977 /* s1_2.c */; }; AFA55A4C0993351F00F3E977 /* s1_3.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA55A420993351F00F3E977 /* s1_3.c */; }; AFA55A4D0993351F00F3E977 /* s1_4.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA55A430993351F00F3E977 /* s1_4.c */; }; AFA55A4E0993351F00F3E977 /* s1_5.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA55A440993351F00F3E977 /* s1_5.c */; }; AFA55A4F0993351F00F3E977 /* s1_6.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA55A450993351F00F3E977 /* s1_6.c */; }; AFA55A500993351F00F3E977 /* s1_b.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA55A460993351F00F3E977 /* s1_b.c */; }; AFA55A510993351F00F3E977 /* sproingies.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA55A470993351F00F3E977 /* sproingies.c */; }; AFA55A520993351F00F3E977 /* sproingiewrap.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA55A480993351F00F3E977 /* sproingiewrap.c */; }; AFA55A530993353500F3E977 /* gllist.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA55A3E0993351F00F3E977 /* gllist.c */; }; AFA55A540993353500F3E977 /* gllist.h in Headers */ = {isa = PBXBuildFile; fileRef = AFA55A3F0993351F00F3E977 /* gllist.h */; }; AFA55A8D0993366F00F3E977 /* lament.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258D60988A468000655EE /* lament.xml */; }; AFA55A8F0993369100F3E977 /* lament.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA55A8E0993369100F3E977 /* lament.c */; }; AFA55A95099336D800F3E977 /* normals.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA55A93099336D800F3E977 /* normals.c */; }; AFA55A96099336D800F3E977 /* normals.h in Headers */ = {isa = PBXBuildFile; fileRef = AFA55A94099336D800F3E977 /* normals.h */; }; AFA55AE309933D1C00F3E977 /* bubble3d.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC2587F0988A468000655EE /* bubble3d.xml */; }; AFA55AE509933D3800F3E977 /* bubble3d.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA55AE409933D3800F3E977 /* bubble3d.c */; }; AFA55AF709933DBF00F3E977 /* b_draw.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA55AF409933DBF00F3E977 /* b_draw.c */; }; AFA55AF809933DBF00F3E977 /* b_lockglue.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA55AF509933DBF00F3E977 /* b_lockglue.c */; }; AFA55AF909933DBF00F3E977 /* b_sphere.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA55AF609933DBF00F3E977 /* b_sphere.c */; }; AFA55B2009933E3100F3E977 /* glplanet.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258BA0988A468000655EE /* glplanet.xml */; }; AFA55B2209933E4A00F3E977 /* glplanet.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA55B2109933E4A00F3E977 /* glplanet.c */; }; AFA55B3909933EB400F3E977 /* pulsar.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258FD0988A469000655EE /* pulsar.xml */; }; AFA55B4509933EF800F3E977 /* pulsar.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA55B3F09933EC600F3E977 /* pulsar.c */; }; AFA55B8D09933FAA00F3E977 /* sierpinski3d.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC2590C0988A469000655EE /* sierpinski3d.xml */; }; AFA55B8F09933FBF00F3E977 /* sierpinski3d.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA55B8E09933FBF00F3E977 /* sierpinski3d.c */; }; AFA55BA50993400200F3E977 /* gflux.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258B30988A468000655EE /* gflux.xml */; }; AFA55BA70993401A00F3E977 /* gflux.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA55BA60993401A00F3E977 /* gflux.c */; }; AFA55BBF0993410100F3E977 /* circuit.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258860988A468000655EE /* circuit.xml */; }; AFA55BC10993416E00F3E977 /* circuit.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA55BC00993416E00F3E977 /* circuit.c */; }; AFA55BF8099342BF00F3E977 /* menger.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258E00988A469000655EE /* menger.xml */; }; AFA55BFA099342D500F3E977 /* menger.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA55BF9099342D500F3E977 /* menger.c */; }; AFA55C220993433D00F3E977 /* engine.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC2589C0988A468000655EE /* engine.xml */; }; AFA55C240993435300F3E977 /* engine.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA55C230993435300F3E977 /* engine.c */; }; AFA55C8B099349CC00F3E977 /* glsnake.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258BC0988A468000655EE /* glsnake.xml */; }; AFA55C8D099349EE00F3E977 /* glsnake.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA55C8C099349EE00F3E977 /* glsnake.c */; }; AFA55CBD09934BDD00F3E977 /* boxed.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC2587B0988A468000655EE /* boxed.xml */; }; AFA55CC009934C0900F3E977 /* boxed.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA55CBE09934C0900F3E977 /* boxed.c */; }; AFA55CE009934D1500F3E977 /* glforestfire.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258B60988A468000655EE /* glforestfire.xml */; }; AFA55CE209934D2E00F3E977 /* glforestfire.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA55CE109934D2E00F3E977 /* glforestfire.c */; }; AFA55D500993568200F3E977 /* sballs.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC259090988A469000655EE /* sballs.xml */; }; AFA55D520993569C00F3E977 /* sballs.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA55D510993569C00F3E977 /* sballs.c */; }; AFA55D760993587600F3E977 /* cubenetic.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC2588F0988A468000655EE /* cubenetic.xml */; }; AFA55D780993589300F3E977 /* cubenetic.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA55D770993589300F3E977 /* cubenetic.c */; }; AFA55D93099358FB00F3E977 /* spheremonics.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC259130988A469000655EE /* spheremonics.xml */; }; AFA55D950993590F00F3E977 /* spheremonics.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA55D940993590F00F3E977 /* spheremonics.c */; }; AFA55DDC09935D9D00F3E977 /* lavalite.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258D80988A468000655EE /* lavalite.xml */; }; AFA55DDE09935DB600F3E977 /* lavalite.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA55DDD09935DB600F3E977 /* lavalite.c */; }; AFA55DE309935DFB00F3E977 /* marching.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA55DE109935DFB00F3E977 /* marching.c */; }; AFA55E0509935E7E00F3E977 /* queens.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC259000988A469000655EE /* queens.xml */; }; AFA55E0709935EB800F3E977 /* queens.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA55E0609935EB800F3E977 /* queens.c */; }; AFA55E2109935F0B00F3E977 /* endgame.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC2589B0988A468000655EE /* endgame.xml */; }; AFA55E2609935F2B00F3E977 /* chessmodels.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA55E2309935F2B00F3E977 /* chessmodels.c */; }; AFA55E2709935F2B00F3E977 /* endgame.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA55E2509935F2B00F3E977 /* endgame.c */; }; AFA55E4409935FBA00F3E977 /* glblur.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258B40988A468000655EE /* glblur.xml */; }; AFA55E4609935FD300F3E977 /* glblur.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA55E4509935FD300F3E977 /* glblur.c */; }; AFA55E970993602F00F3E977 /* flyingtoasters.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258AD0988A468000655EE /* flyingtoasters.xml */; }; AFA55EAD0993608800F3E977 /* flyingtoasters.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA55E980993608800F3E977 /* flyingtoasters.c */; }; AFA55EAE0993608800F3E977 /* toast.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA55E990993608800F3E977 /* toast.c */; }; AFA55EB00993608800F3E977 /* toast2.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA55E9B0993608800F3E977 /* toast2.c */; }; AFA55EB20993608800F3E977 /* toaster_base.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA55E9D0993608800F3E977 /* toaster_base.c */; }; AFA55EB40993608800F3E977 /* toaster_handle.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA55E9F0993608800F3E977 /* toaster_handle.c */; }; AFA55EB60993608800F3E977 /* toaster_handle2.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA55EA10993608800F3E977 /* toaster_handle2.c */; }; AFA55EB80993608800F3E977 /* toaster_jet.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA55EA30993608800F3E977 /* toaster_jet.c */; }; AFA55EBA0993608800F3E977 /* toaster_knob.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA55EA50993608800F3E977 /* toaster_knob.c */; }; AFA55EBC0993608800F3E977 /* toaster_slots.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA55EA70993608800F3E977 /* toaster_slots.c */; }; AFA55EBE0993608800F3E977 /* toaster_wing.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA55EA90993608800F3E977 /* toaster_wing.c */; }; AFA55EC00993608800F3E977 /* toaster.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA55EAB0993608800F3E977 /* toaster.c */; }; AFA55EE50993610F00F3E977 /* bouncingcow.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC2587A0988A468000655EE /* bouncingcow.xml */; }; AFA55EEE0993613E00F3E977 /* bouncingcow.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA55EE70993613E00F3E977 /* bouncingcow.c */; }; AFA55EEF0993613E00F3E977 /* cow_face.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA55EE80993613E00F3E977 /* cow_face.c */; }; AFA55EF00993613E00F3E977 /* cow_hide.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA55EE90993613E00F3E977 /* cow_hide.c */; }; AFA55EF10993613E00F3E977 /* cow_hoofs.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA55EEA0993613E00F3E977 /* cow_hoofs.c */; }; AFA55EF20993613E00F3E977 /* cow_horns.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA55EEB0993613E00F3E977 /* cow_horns.c */; }; AFA55EF30993613E00F3E977 /* cow_tail.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA55EEC0993613E00F3E977 /* cow_tail.c */; }; AFA55EF40993613E00F3E977 /* cow_udder.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA55EED0993613E00F3E977 /* cow_udder.c */; }; AFA55F20099361E800F3E977 /* jigglypuff.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258CE0988A468000655EE /* jigglypuff.xml */; }; AFA55F220993620200F3E977 /* jigglypuff.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA55F210993620200F3E977 /* jigglypuff.c */; }; AFA55F3E0993625B00F3E977 /* klein.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258D40988A468000655EE /* klein.xml */; }; AFA55F400993626E00F3E977 /* klein.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA55F3F0993626E00F3E977 /* klein.c */; }; AFA55F57099362C500F3E977 /* hypertorus.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258C80988A468000655EE /* hypertorus.xml */; }; AFA55F5A099362DF00F3E977 /* hypertorus.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA55F59099362DF00F3E977 /* hypertorus.c */; }; AFA55F860993646900F3E977 /* glmatrix.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258B90988A468000655EE /* glmatrix.xml */; }; AFA55F880993648500F3E977 /* glmatrix.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA55F870993648500F3E977 /* glmatrix.c */; }; AFA55FF209936C2F00F3E977 /* cubestorm.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258900988A468000655EE /* cubestorm.xml */; }; AFA55FF409936C4500F3E977 /* cubestorm.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA55FF309936C4500F3E977 /* cubestorm.c */; }; AFA5600D09936C9D00F3E977 /* glknots.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258B80988A468000655EE /* glknots.xml */; }; AFA5600F09936CB300F3E977 /* glknots.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA5600E09936CB300F3E977 /* glknots.c */; }; AFA5602809936CF700F3E977 /* blocktube.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258770988A468000655EE /* blocktube.xml */; }; AFA5602A09936D0700F3E977 /* blocktube.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA5602909936D0700F3E977 /* blocktube.c */; }; AFA5604609936DAB00F3E977 /* flipflop.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258A70988A468000655EE /* flipflop.xml */; }; AFA5604809936DCC00F3E977 /* flipflop.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA5604709936DCC00F3E977 /* flipflop.c */; }; AFA5607B09936FDD00F3E977 /* antspotlight.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA5607809936FDD00F3E977 /* antspotlight.c */; }; AFA5608109936FFA00F3E977 /* antinspect.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA5605F09936E9C00F3E977 /* antinspect.c */; }; AFA560820993700500F3E977 /* antinspect.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC2586B0988A468000655EE /* antinspect.xml */; }; AFA560830993700900F3E977 /* antspotlight.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC2586D0988A468000655EE /* antspotlight.xml */; }; AFA560C2099371BE00F3E977 /* polytopes.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258F90988A469000655EE /* polytopes.xml */; }; AFA560C4099371D500F3E977 /* polytopes.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA560C3099371D500F3E977 /* polytopes.c */; }; AFA561110993784D00F3E977 /* molecule.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258E70988A469000655EE /* molecule.xml */; }; AFA561130993786800F3E977 /* molecule.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA561120993786800F3E977 /* molecule.c */; }; AFA5616C09937C6800F3E977 /* blinkbox.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258750988A468000655EE /* blinkbox.xml */; }; AFA5616E09937C9A00F3E977 /* blinkbox.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA5616D09937C9A00F3E977 /* blinkbox.c */; }; AFA5618F09937D2100F3E977 /* noof.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258EC0988A469000655EE /* noof.xml */; }; AFA5619109937D3600F3E977 /* noof.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA5619009937D3600F3E977 /* noof.c */; }; AFA561B109937DB400F3E977 /* polyhedra.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258F70988A469000655EE /* polyhedra.xml */; }; AFA561B509937DCC00F3E977 /* polyhedra-gl.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA561B209937DCB00F3E977 /* polyhedra-gl.c */; }; AFA561B609937DCC00F3E977 /* polyhedra.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA561B309937DCC00F3E977 /* polyhedra.c */; }; AFA5621B099384DA00F3E977 /* providence.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258FC0988A469000655EE /* providence.xml */; }; AFA5621D099384F600F3E977 /* providence.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA5621C099384F600F3E977 /* providence.c */; }; AFA562330993855500F3E977 /* pinion.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258F50988A469000655EE /* pinion.xml */; }; AFA562350993856A00F3E977 /* pinion.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA562340993856A00F3E977 /* pinion.c */; }; AFA562D3099392F900F3E977 /* boing.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258780988A468000655EE /* boing.xml */; }; AFA562D50993930C00F3E977 /* boing.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA562D40993930C00F3E977 /* boing.c */; }; AFA562EE0993940400F3E977 /* antmaze.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC2586C0988A468000655EE /* antmaze.xml */; }; AFA562F00993941600F3E977 /* antmaze.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA562EF0993941600F3E977 /* antmaze.c */; }; AFA563060993947300F3E977 /* tangram.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC259220988A469000655EE /* tangram.xml */; }; AFA5630A0993948F00F3E977 /* tangram_shapes.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA563070993948F00F3E977 /* tangram_shapes.c */; }; AFA5630B0993948F00F3E977 /* tangram.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA563090993948F00F3E977 /* tangram.c */; }; AFA563280993955000F3E977 /* crackberg.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC2588B0988A468000655EE /* crackberg.xml */; }; AFA5632A0993957100F3E977 /* crackberg.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA563290993957100F3E977 /* crackberg.c */; }; AFA563740993977100F3E977 /* glhanoi.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258B70988A468000655EE /* glhanoi.xml */; }; AFA563750993977D00F3E977 /* glhanoi.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA563460993963400F3E977 /* glhanoi.c */; }; AFA563760993978D00F3E977 /* cube21.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA563660993970F00F3E977 /* cube21.c */; }; AFA563770993979A00F3E977 /* cube21.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC2588E0988A468000655EE /* cube21.xml */; }; AFA5638D099397ED00F3E977 /* timetunnel.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC259240988A469000655EE /* timetunnel.xml */; }; AFA5638F0993980D00F3E977 /* timetunnel.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA5638E0993980D00F3E977 /* timetunnel.c */; }; AFA563B8099398F700F3E977 /* juggler3d.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258D10988A468000655EE /* juggler3d.xml */; }; AFA563BA0993991300F3E977 /* juggler3d.c in Sources */ = {isa = PBXBuildFile; fileRef = AFA563B90993991300F3E977 /* juggler3d.c */; }; AFAA6B451773F07800DE720C /* ios-function-table.m in Sources */ = {isa = PBXBuildFile; fileRef = AFAA6B441773F07700DE720C /* ios-function-table.m */; }; AFACE87A1CC83458008B24CD /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AFACE87C1CC83458008B24CD /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AFACE87D1CC83458008B24CD /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AFACE87E1CC83458008B24CD /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AFACE87F1CC83458008B24CD /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AFACE8801CC83458008B24CD /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AFACE8811CC83458008B24CD /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; AFACE8821CC83458008B24CD /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AFACE88C1CC835F7008B24CD /* energystream.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFACE88B1CC83578008B24CD /* energystream.xml */; }; AFACE88D1CC83608008B24CD /* energystream.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFACE88B1CC83578008B24CD /* energystream.xml */; }; AFACE88E1CC83613008B24CD /* energystream.c in Sources */ = {isa = PBXBuildFile; fileRef = AFACE88A1CC83578008B24CD /* energystream.c */; }; AFACE88F1CC83617008B24CD /* energystream.c in Sources */ = {isa = PBXBuildFile; fileRef = AFACE88A1CC83578008B24CD /* energystream.c */; settings = {COMPILER_FLAGS = "-DUSE_GL"; }; }; AFAD462309D5F4DA00AB5F95 /* grabclient.c in Sources */ = {isa = PBXBuildFile; fileRef = AFAD462209D5F4DA00AB5F95 /* grabclient.c */; }; AFB591AE178B812C00EA4005 /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AFB591B0178B812C00EA4005 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AFB591B1178B812C00EA4005 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AFB591B2178B812C00EA4005 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AFB591B3178B812C00EA4005 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AFB591B4178B812C00EA4005 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AFB591BE178B81E600EA4005 /* hexadrop.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFB591BC178B81E600EA4005 /* hexadrop.xml */; }; AFB591BF178B81E600EA4005 /* hexadrop.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFB591BC178B81E600EA4005 /* hexadrop.xml */; }; AFB591C0178B81E600EA4005 /* hexadrop.c in Sources */ = {isa = PBXBuildFile; fileRef = AFB591BD178B81E600EA4005 /* hexadrop.c */; }; AFB591C1178B81E600EA4005 /* hexadrop.c in Sources */ = {isa = PBXBuildFile; fileRef = AFB591BD178B81E600EA4005 /* hexadrop.c */; }; AFB8A69B1782BA34004EDB85 /* kaleidocycle.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFB8A69A1782BA34004EDB85 /* kaleidocycle.xml */; }; AFB8A69C1782BF6C004EDB85 /* kaleidocycle.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFB8A69A1782BA34004EDB85 /* kaleidocycle.xml */; }; AFB8A69D1782BFA6004EDB85 /* kaleidocycle.c in Sources */ = {isa = PBXBuildFile; fileRef = AF7511141782B64300380EA1 /* kaleidocycle.c */; settings = {COMPILER_FLAGS = "-DUSE_GL"; }; }; AFBE744019A7C6930018AA35 /* robot.c in Sources */ = {isa = PBXBuildFile; fileRef = AFBE743F19A7C6930018AA35 /* robot.c */; }; AFBE744119A7C6EF0018AA35 /* robot.c in Sources */ = {isa = PBXBuildFile; fileRef = AFBE743F19A7C6930018AA35 /* robot.c */; settings = {COMPILER_FLAGS = "-DUSE_GL"; }; }; AFBF893E0E41D930006A2D66 /* fps.c in Sources */ = {isa = PBXBuildFile; fileRef = AFBF893C0E41D930006A2D66 /* fps.c */; }; AFBF893F0E41D930006A2D66 /* fps.h in Headers */ = {isa = PBXBuildFile; fileRef = AFBF893D0E41D930006A2D66 /* fps.h */; }; AFBF89AF0E423FC3006A2D66 /* fps-gl.c in Sources */ = {isa = PBXBuildFile; fileRef = AFBF89AE0E423FC3006A2D66 /* fps-gl.c */; }; AFBF89B20E424036006A2D66 /* fpsI.h in Headers */ = {isa = PBXBuildFile; fileRef = AFBF89B10E424036006A2D66 /* fpsI.h */; }; AFBFE74F178642DC00432B21 /* SaverRunner.nib in Resources */ = {isa = PBXBuildFile; fileRef = AF9772E10989DFC6001F8B92 /* SaverRunner.nib */; }; AFBFE750178642DC00432B21 /* SaverRunner.icns in Resources */ = {isa = PBXBuildFile; fileRef = AF2D522513E954A0002AA818 /* SaverRunner.icns */; }; AFBFE752178642DC00432B21 /* SaverRunner.m in Sources */ = {isa = PBXBuildFile; fileRef = AFE1FD400981E32E00F7970E /* SaverRunner.m */; }; AFBFE753178642DC00432B21 /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 29B97316FDCFA39411CA2CEA /* main.m */; }; AFBFE754178642DC00432B21 /* SaverListController.m in Sources */ = {isa = PBXBuildFile; fileRef = AF84AF1E15829AF000607E4C /* SaverListController.m */; }; AFBFE756178642DC00432B21 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AFBFE757178642DC00432B21 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AFBFE758178642DC00432B21 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AFBFE759178642DC00432B21 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AFBFE765178643B200432B21 /* Apple2.saver in Resources */ = {isa = PBXBuildFile; fileRef = AF9D4DFE09B5BB19006E59CF /* Apple2.saver */; }; AFBFE76F178647FE00432B21 /* SaverRunner.nib in Resources */ = {isa = PBXBuildFile; fileRef = AF9772E10989DFC6001F8B92 /* SaverRunner.nib */; }; AFBFE770178647FE00432B21 /* SaverRunner.icns in Resources */ = {isa = PBXBuildFile; fileRef = AF2D522513E954A0002AA818 /* SaverRunner.icns */; }; AFBFE772178647FE00432B21 /* SaverRunner.m in Sources */ = {isa = PBXBuildFile; fileRef = AFE1FD400981E32E00F7970E /* SaverRunner.m */; }; AFBFE773178647FE00432B21 /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 29B97316FDCFA39411CA2CEA /* main.m */; }; AFBFE774178647FE00432B21 /* SaverListController.m in Sources */ = {isa = PBXBuildFile; fileRef = AF84AF1E15829AF000607E4C /* SaverListController.m */; }; AFBFE776178647FE00432B21 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AFBFE777178647FE00432B21 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AFBFE778178647FE00432B21 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AFBFE779178647FE00432B21 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AFBFE7831786483B00432B21 /* Phosphor.saver in Resources */ = {isa = PBXBuildFile; fileRef = AF7776F609B63ABF00EA3033 /* Phosphor.saver */; }; AFC0E8B21CDC601A008CAFAC /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AFC0E8B41CDC601A008CAFAC /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AFC0E8B51CDC601A008CAFAC /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AFC0E8B61CDC601A008CAFAC /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AFC0E8B71CDC601A008CAFAC /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AFC0E8B81CDC601A008CAFAC /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AFC0E8B91CDC601A008CAFAC /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; AFC0E8BA1CDC601A008CAFAC /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AFC0E8C41CDC60B0008CAFAC /* hydrostat.c in Sources */ = {isa = PBXBuildFile; fileRef = AFC0E8C21CDC60A9008CAFAC /* hydrostat.c */; settings = {COMPILER_FLAGS = "-DUSE_GL"; }; }; AFC0E8C51CDC60D6008CAFAC /* hydrostat.c in Sources */ = {isa = PBXBuildFile; fileRef = AFC0E8C21CDC60A9008CAFAC /* hydrostat.c */; }; AFC0E8C61CDC60DB008CAFAC /* hydrostat.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC0E8C31CDC60A9008CAFAC /* hydrostat.xml */; }; AFC0E8C71CDC60DE008CAFAC /* hydrostat.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC0E8C31CDC60A9008CAFAC /* hydrostat.xml */; }; AFC211950E4E30C800D87B6E /* teapot.c in Sources */ = {isa = PBXBuildFile; fileRef = AFC211930E4E30C800D87B6E /* teapot.c */; }; AFC43E741C68364B00C89999 /* PxPlus_IBM_VGA8.ttf in Resources */ = {isa = PBXBuildFile; fileRef = AFC43E731C68364B00C89999 /* PxPlus_IBM_VGA8.ttf */; }; AFC43E771C684BE400C89999 /* PxPlus_IBM_VGA8.ttf in Resources */ = {isa = PBXBuildFile; fileRef = AFC43E731C68364B00C89999 /* PxPlus_IBM_VGA8.ttf */; }; AFC43E7B1C6AA77900C89999 /* YearlReg.ttf in Resources */ = {isa = PBXBuildFile; fileRef = AFEC68381BD6CDF9004C1B64 /* YearlReg.ttf */; }; AFC43E7C1C6AA78800C89999 /* OCRAStd.otf in Resources */ = {isa = PBXBuildFile; fileRef = AFEC68361BD6CA85004C1B64 /* OCRAStd.otf */; }; AFC7592D158D8E8B00C5458E /* textclient.c in Sources */ = {isa = PBXBuildFile; fileRef = AFC7592B158D8E8B00C5458E /* textclient.c */; }; AFC7592E158D8E8B00C5458E /* textclient.h in Headers */ = {isa = PBXBuildFile; fileRef = AFC7592C158D8E8B00C5458E /* textclient.h */; }; AFC75930158D9A7A00C5458E /* textclient-ios.m in Sources */ = {isa = PBXBuildFile; fileRef = AFC7592F158D9A7A00C5458E /* textclient-ios.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 */; }; AFCF509C198A1861005B0DB1 /* involute.c in Sources */ = {isa = PBXBuildFile; fileRef = AFE6A16A0CDD78EA002805BF /* involute.c */; }; AFCF509D198C3612005B0DB1 /* xscreensaver-text in Resources */ = {isa = PBXBuildFile; fileRef = AF0FAF0B09CA6FF900EE1051 /* xscreensaver-text */; }; AFCF83421AF5B515008BB7E1 /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AFCF83441AF5B515008BB7E1 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AFCF83451AF5B515008BB7E1 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AFCF83461AF5B515008BB7E1 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AFCF83471AF5B515008BB7E1 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AFCF83481AF5B515008BB7E1 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AFCF83491AF5B515008BB7E1 /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; AFCF834A1AF5B515008BB7E1 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AFCF83551AF5B5FD008BB7E1 /* splitflap.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFCF83521AF5B5FD008BB7E1 /* splitflap.xml */; }; AFCF83561AF5B5FD008BB7E1 /* splitflap.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFCF83521AF5B5FD008BB7E1 /* splitflap.xml */; }; AFCF83571AF5B5FD008BB7E1 /* splitflap_obj.c in Sources */ = {isa = PBXBuildFile; fileRef = AFCF83531AF5B5FD008BB7E1 /* splitflap_obj.c */; }; AFCF83581AF5B5FD008BB7E1 /* splitflap_obj.c in Sources */ = {isa = PBXBuildFile; fileRef = AFCF83531AF5B5FD008BB7E1 /* splitflap_obj.c */; settings = {COMPILER_FLAGS = "-DUSE_GL"; }; }; AFCF83591AF5B5FD008BB7E1 /* splitflap.c in Sources */ = {isa = PBXBuildFile; fileRef = AFCF83541AF5B5FD008BB7E1 /* splitflap.c */; }; AFCF835A1AF5B5FD008BB7E1 /* splitflap.c in Sources */ = {isa = PBXBuildFile; fileRef = AFCF83541AF5B5FD008BB7E1 /* splitflap.c */; settings = {COMPILER_FLAGS = "-DUSE_GL"; }; }; 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 */; }; AFD51B200F063B4A00471C02 /* xscreensaver-getimage-file in Resources */ = {isa = PBXBuildFile; fileRef = AF0FAF1209CA712600EE1051 /* xscreensaver-getimage-file */; }; AFD51B220F063B4A00471C02 /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AFD51DB70F063BCE00471C02 /* photopile.c in Sources */ = {isa = PBXBuildFile; fileRef = AFD51DB60F063BCE00471C02 /* photopile.c */; }; AFD51DB90F063BE700471C02 /* photopile.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFD51DB80F063BE700471C02 /* photopile.xml */; }; AFD56DF80996A03800BA26F7 /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AFD56E090996A07A00BA26F7 /* gltext.c in Sources */ = {isa = PBXBuildFile; fileRef = AFD56E080996A07A00BA26F7 /* gltext.c */; }; AFD56E9F0996A23800BA26F7 /* gltext.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258BD0988A468000655EE /* gltext.xml */; }; AFD56EB50996A72600BA26F7 /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AFD56EE00996A95700BA26F7 /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AFD56EEE0996A99E00BA26F7 /* forest.c in Sources */ = {isa = PBXBuildFile; fileRef = AFD56EED0996A99E00BA26F7 /* forest.c */; }; AFD56F110996AAFA00BA26F7 /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AFD56F1D0996AB1D00BA26F7 /* forest.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258AF0988A468000655EE /* forest.xml */; }; AFD56F1E0996AB4000BA26F7 /* vines.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC2592A0988A469000655EE /* vines.xml */; }; AFD56F200996AB5A00BA26F7 /* vines.c in Sources */ = {isa = PBXBuildFile; fileRef = AFD56F1F0996AB5A00BA26F7 /* vines.c */; }; AFD56F290996AB8A00BA26F7 /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AFD56F350996ABB300BA26F7 /* galaxy.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258B10988A468000655EE /* galaxy.xml */; }; AFD56F370996ABD200BA26F7 /* galaxy.c in Sources */ = {isa = PBXBuildFile; fileRef = AFD56F360996ABD200BA26F7 /* galaxy.c */; }; AFD56F550996AEEE00BA26F7 /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AFD56F610996AF1500BA26F7 /* grav.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258C00988A468000655EE /* grav.xml */; }; AFD56F630996AF2D00BA26F7 /* grav.c in Sources */ = {isa = PBXBuildFile; fileRef = AFD56F620996AF2D00BA26F7 /* grav.c */; }; AFD56F710996B01600BA26F7 /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AFD56F870996B04D00BA26F7 /* hopalong.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258C50988A468000655EE /* hopalong.xml */; }; AFD56F890996B06600BA26F7 /* hopalong.c in Sources */ = {isa = PBXBuildFile; fileRef = AFD56F880996B06600BA26F7 /* hopalong.c */; }; AFD56F920996B09400BA26F7 /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AFD56F9F0996B0D000BA26F7 /* laser.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258D70988A468000655EE /* laser.xml */; }; AFD56FA10996B0E500BA26F7 /* laser.c in Sources */ = {isa = PBXBuildFile; fileRef = AFD56FA00996B0E500BA26F7 /* laser.c */; }; AFD56FA90996B10F00BA26F7 /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AFD56FB50996B15000BA26F7 /* lightning.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258D90988A468000655EE /* lightning.xml */; }; AFD56FB70996B16300BA26F7 /* lightning.c in Sources */ = {isa = PBXBuildFile; fileRef = AFD56FB60996B16300BA26F7 /* lightning.c */; }; AFD56FBF0996B18F00BA26F7 /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AFD56FCB0996B1BE00BA26F7 /* lisa.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258DA0988A468000655EE /* lisa.xml */; }; AFD56FCD0996B1D600BA26F7 /* lisa.c in Sources */ = {isa = PBXBuildFile; fileRef = AFD56FCC0996B1D600BA26F7 /* lisa.c */; }; AFD56FD50996B20900BA26F7 /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AFD56FE10996B24B00BA26F7 /* lissie.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258DB0988A468000655EE /* lissie.xml */; }; AFD56FE30996B26200BA26F7 /* lissie.c in Sources */ = {isa = PBXBuildFile; fileRef = AFD56FE20996B26200BA26F7 /* lissie.c */; }; AFD56FFE0996B43800BA26F7 /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AFD5700B0996B47E00BA26F7 /* penrose.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258F10988A469000655EE /* penrose.xml */; }; AFD5700D0996B49D00BA26F7 /* penrose.c in Sources */ = {isa = PBXBuildFile; fileRef = AFD5700C0996B49D00BA26F7 /* penrose.c */; }; AFD570150996B4CC00BA26F7 /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AFD570210996B51100BA26F7 /* sierpinski.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC2590B0988A469000655EE /* sierpinski.xml */; }; AFD570230996B52700BA26F7 /* sierpinski.c in Sources */ = {isa = PBXBuildFile; fileRef = AFD570220996B52700BA26F7 /* sierpinski.c */; }; AFD5702C0996B56D00BA26F7 /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AFD5703A0996B5D000BA26F7 /* sphere.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC259110988A469000655EE /* sphere.xml */; }; AFD5703C0996B5E300BA26F7 /* sphere.c in Sources */ = {isa = PBXBuildFile; fileRef = AFD5703B0996B5E300BA26F7 /* sphere.c */; }; AFD570490996B61600BA26F7 /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AFD570550996B65A00BA26F7 /* spiral.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC259140988A469000655EE /* spiral.xml */; }; AFD570570996B67600BA26F7 /* spiral.c in Sources */ = {isa = PBXBuildFile; fileRef = AFD570560996B67600BA26F7 /* spiral.c */; }; AFD5705F0996B6A300BA26F7 /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AFD5706B0996B6E700BA26F7 /* fadeplot.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258A10988A468000655EE /* fadeplot.xml */; }; AFD5706D0996B70000BA26F7 /* fadeplot.c in Sources */ = {isa = PBXBuildFile; fileRef = AFD5706C0996B70000BA26F7 /* fadeplot.c */; }; AFD570750996B72700BA26F7 /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AFD570810996B77F00BA26F7 /* mountain.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258E90988A469000655EE /* mountain.xml */; }; AFD570830996B79300BA26F7 /* mountain.c in Sources */ = {isa = PBXBuildFile; fileRef = AFD570820996B79300BA26F7 /* mountain.c */; }; AFD5708B0996B80300BA26F7 /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AFD570970996B84E00BA26F7 /* triangle.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC259250988A469000655EE /* triangle.xml */; }; AFD570990996B86200BA26F7 /* triangle.c in Sources */ = {isa = PBXBuildFile; fileRef = AFD570980996B86200BA26F7 /* triangle.c */; }; AFD570A10996B88E00BA26F7 /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AFD570AD0996B8DC00BA26F7 /* worm.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC259300988A469000655EE /* worm.xml */; }; AFD570AF0996B8EF00BA26F7 /* worm.c in Sources */ = {isa = PBXBuildFile; fileRef = AFD570AE0996B8EF00BA26F7 /* worm.c */; }; AFD570B70996B93000BA26F7 /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AFD570C30996B96F00BA26F7 /* rotor.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC259060988A469000655EE /* rotor.xml */; }; AFD570C50996B98500BA26F7 /* rotor.c in Sources */ = {isa = PBXBuildFile; fileRef = AFD570C40996B98500BA26F7 /* rotor.c */; }; AFD570CF0996B9F800BA26F7 /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AFD570DD0996BA4600BA26F7 /* ant.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC2586A0988A468000655EE /* ant.xml */; }; AFD570DF0996BA5D00BA26F7 /* ant.c in Sources */ = {isa = PBXBuildFile; fileRef = AFD570DE0996BA5C00BA26F7 /* ant.c */; }; AFD570F00996BBBF00BA26F7 /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AFD570FE0996BC2000BA26F7 /* flow.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258AA0988A468000655EE /* flow.xml */; }; AFD571020996BC3800BA26F7 /* flow.c in Sources */ = {isa = PBXBuildFile; fileRef = AFD571010996BC3800BA26F7 /* flow.c */; }; AFD571190996BE9300BA26F7 /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AFD571270996BEE100BA26F7 /* discrete.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258970988A468000655EE /* discrete.xml */; }; AFD571290996BEF700BA26F7 /* discrete.c in Sources */ = {isa = PBXBuildFile; fileRef = AFD571280996BEF700BA26F7 /* discrete.c */; }; AFD571320996BF2E00BA26F7 /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AFD5713E0996BFA500BA26F7 /* apollonian.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC2586E0988A468000655EE /* apollonian.xml */; }; AFD571400996BFBE00BA26F7 /* apollonian.c in Sources */ = {isa = PBXBuildFile; fileRef = AFD5713F0996BFBE00BA26F7 /* apollonian.c */; }; AFD571490996C01700BA26F7 /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AFD571550996C05F00BA26F7 /* euler2d.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC2589F0988A468000655EE /* euler2d.xml */; }; AFD571570996C07F00BA26F7 /* euler2d.c in Sources */ = {isa = PBXBuildFile; fileRef = AFD571560996C07F00BA26F7 /* euler2d.c */; }; AFD5715F0996C0CE00BA26F7 /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AFD5716C0996C16700BA26F7 /* thornbird.c in Sources */ = {isa = PBXBuildFile; fileRef = AFD5716B0996C16700BA26F7 /* thornbird.c */; }; AFD571BB0996D9DC00BA26F7 /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AFD571C70996DA3300BA26F7 /* juggle.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258D00988A468000655EE /* juggle.xml */; }; AFD571C90996DA4600BA26F7 /* juggle.c in Sources */ = {isa = PBXBuildFile; fileRef = AFD571C80996DA4600BA26F7 /* juggle.c */; }; AFD572280996E4A300BA26F7 /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AFD572340996E52B00BA26F7 /* swirl.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC259200988A469000655EE /* swirl.xml */; }; AFD572360996E53E00BA26F7 /* swirl.c in Sources */ = {isa = PBXBuildFile; fileRef = AFD572350996E53E00BA26F7 /* swirl.c */; }; AFD572730996EE8500BA26F7 /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AFD5727F0996EF1900BA26F7 /* polyominoes.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258F80988A469000655EE /* polyominoes.xml */; }; AFD572810996EF2B00BA26F7 /* polyominoes.c in Sources */ = {isa = PBXBuildFile; fileRef = AFD572800996EF2B00BA26F7 /* polyominoes.c */; }; AFD572AB0996F99600BA26F7 /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AFD572B80996FAF900BA26F7 /* bouboule.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258790988A468000655EE /* bouboule.xml */; }; AFD572BA0996FB3D00BA26F7 /* bouboule.c in Sources */ = {isa = PBXBuildFile; fileRef = AFD572B90996FB3D00BA26F7 /* bouboule.c */; }; AFD572C80996FC0F00BA26F7 /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AFD572EC0997005900BA26F7 /* crystal.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC2588D0988A468000655EE /* crystal.xml */; }; AFD572EE0997006E00BA26F7 /* crystal.c in Sources */ = {isa = PBXBuildFile; fileRef = AFD572ED0997006E00BA26F7 /* crystal.c */; }; AFD572FF099701C000BA26F7 /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AFD5730B099702AF00BA26F7 /* julia.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258D20988A468000655EE /* julia.xml */; }; AFD5730D099702C800BA26F7 /* julia.c in Sources */ = {isa = PBXBuildFile; fileRef = AFD5730C099702C800BA26F7 /* julia.c */; }; AFD573630997411200BA26F7 /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AFD573700997418D00BA26F7 /* strange.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC2591D0988A469000655EE /* strange.xml */; }; AFD57372099741A200BA26F7 /* strange.c in Sources */ = {isa = PBXBuildFile; fileRef = AFD57371099741A200BA26F7 /* strange.c */; }; AFDA11251934424D003D397F /* aligned_malloc.c in Sources */ = {isa = PBXBuildFile; fileRef = AFDA11211934424D003D397F /* aligned_malloc.c */; }; AFDA11261934424D003D397F /* aligned_malloc.h in Headers */ = {isa = PBXBuildFile; fileRef = AFDA11221934424D003D397F /* aligned_malloc.h */; }; AFDA11271934424D003D397F /* thread_util.c in Sources */ = {isa = PBXBuildFile; fileRef = AFDA11231934424D003D397F /* thread_util.c */; }; AFDA11281934424D003D397F /* thread_util.h in Headers */ = {isa = PBXBuildFile; fileRef = AFDA11241934424D003D397F /* thread_util.h */; }; AFDA6595178A52B70070D24B /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AFDA6597178A52B70070D24B /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AFDA6598178A52B70070D24B /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AFDA6599178A52B70070D24B /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AFDA659A178A52B70070D24B /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AFDA659B178A52B70070D24B /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AFDA65A5178A541A0070D24B /* unknownpleasures.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFDA65A3178A541A0070D24B /* unknownpleasures.xml */; }; AFDA65A6178A541A0070D24B /* unknownpleasures.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFDA65A3178A541A0070D24B /* unknownpleasures.xml */; }; AFDA65A7178A541A0070D24B /* unknownpleasures.c in Sources */ = {isa = PBXBuildFile; fileRef = AFDA65A4178A541A0070D24B /* unknownpleasures.c */; }; AFDA65A8178A541A0070D24B /* unknownpleasures.c in Sources */ = {isa = PBXBuildFile; fileRef = AFDA65A4178A541A0070D24B /* unknownpleasures.c */; settings = {COMPILER_FLAGS = "-DUSE_GL"; }; }; AFDDCCEC19FF0D170072365B /* involute.c in Sources */ = {isa = PBXBuildFile; fileRef = AFE6A16A0CDD78EA002805BF /* involute.c */; }; AFDDCCED19FF0EBD0072365B /* geodesicgears.c in Sources */ = {isa = PBXBuildFile; fileRef = AF7ACFD619FF0B7A00BD752B /* geodesicgears.c */; settings = {COMPILER_FLAGS = "-DUSE_GL"; }; }; AFE2A45C0E2E904600ADB298 /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AFE2A4730E2E90E300ADB298 /* skytentacles.c in Sources */ = {isa = PBXBuildFile; fileRef = AFE2A4720E2E90E300ADB298 /* skytentacles.c */; }; AFE2A4750E2E911200ADB298 /* skytentacles.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFE2A4740E2E911200ADB298 /* skytentacles.xml */; }; AFE30BEE0E52B14700CCF4A5 /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AFE30BFE0E52B18300CCF4A5 /* sonar.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC2590F0988A469000655EE /* sonar.xml */; }; AFE30C020E52B1DC00CCF4A5 /* sonar-icmp.c in Sources */ = {isa = PBXBuildFile; fileRef = AFE30BFF0E52B1DC00CCF4A5 /* sonar-icmp.c */; }; AFE30C030E52B1DC00CCF4A5 /* sonar-sim.c in Sources */ = {isa = PBXBuildFile; fileRef = AFE30C000E52B1DC00CCF4A5 /* sonar-sim.c */; }; AFE30C040E52B1DC00CCF4A5 /* sonar.c in Sources */ = {isa = PBXBuildFile; fileRef = AFE30C010E52B1DC00CCF4A5 /* sonar.c */; }; AFE349291B033A8200AF3D73 /* xscreensaver-text in Resources */ = {isa = PBXBuildFile; fileRef = AF0FAF0B09CA6FF900EE1051 /* xscreensaver-text */; }; AFE6A16C0CDD78EA002805BF /* involute.c in Sources */ = {isa = PBXBuildFile; fileRef = AFE6A16A0CDD78EA002805BF /* involute.c */; }; AFE6A1890CDD7B2E002805BF /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AFE6A18A0CDD7B2E002805BF /* involute.c in Sources */ = {isa = PBXBuildFile; fileRef = AFE6A16A0CDD78EA002805BF /* involute.c */; }; AFE6A40C0CDD7BC3002805BF /* moebiusgears.c in Sources */ = {isa = PBXBuildFile; fileRef = AFE6A40B0CDD7BC3002805BF /* moebiusgears.c */; }; AFE6A40E0CDD7BDC002805BF /* moebiusgears.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFE6A40D0CDD7BDC002805BF /* moebiusgears.xml */; }; AFE6A4220CDD7FAA002805BF /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AFE6A4350CDD800F002805BF /* abstractile.c in Sources */ = {isa = PBXBuildFile; fileRef = AFE6A4340CDD800F002805BF /* abstractile.c */; }; AFE6A4370CDD8027002805BF /* abstractile.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFE6A4360CDD8026002805BF /* abstractile.xml */; }; AFE943B119DD54C1000A5E6D /* xft.c in Sources */ = {isa = PBXBuildFile; fileRef = AFE943AF19DD54C1000A5E6D /* xft.c */; }; AFE943B219DD54C1000A5E6D /* xft.h in Headers */ = {isa = PBXBuildFile; fileRef = AFE943B019DD54C1000A5E6D /* xft.h */; }; AFE943B519DDF97F000A5E6D /* utf8wc.c in Sources */ = {isa = PBXBuildFile; fileRef = AFE943B319DDF97F000A5E6D /* utf8wc.c */; }; AFE943B619DDF97F000A5E6D /* utf8wc.h in Headers */ = {isa = PBXBuildFile; fileRef = AFE943B419DDF97F000A5E6D /* utf8wc.h */; }; AFEB9C37158FFF88003974F3 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AFEB9C3915900514003974F3 /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AFEB9C3815900514003974F3 /* UIKit.framework */; }; AFEB9C3B1590054B003974F3 /* OpenGLES.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AFEB9C3A1590054B003974F3 /* OpenGLES.framework */; }; AFEB9C3D15900558003974F3 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AFEB9C3C15900558003974F3 /* Foundation.framework */; }; AFEB9C401590056A003974F3 /* CoreGraphics.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AFEB9C3E1590056A003974F3 /* CoreGraphics.framework */; }; AFEB9C411590056A003974F3 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AFEB9C3F1590056A003974F3 /* QuartzCore.framework */; }; AFEC23D41CB6EAE100DE138F /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AFEC23D61CB6EAE100DE138F /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AFEC23D71CB6EAE100DE138F /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AFEC23D81CB6EAE100DE138F /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AFEC23D91CB6EAE100DE138F /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AFEC23DA1CB6EAE100DE138F /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AFEC23DB1CB6EAE100DE138F /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; AFEC23DC1CB6EAE100DE138F /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AFEC23E61CB6EC0400DE138F /* dymaxionmap.c in Sources */ = {isa = PBXBuildFile; fileRef = AFEC23E41CB6EBC400DE138F /* dymaxionmap.c */; }; AFEC23E71CB6EC0B00DE138F /* dymaxionmap.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFEC23E51CB6EBDA00DE138F /* dymaxionmap.xml */; }; AFEC23E81CB6EC6800DE138F /* dymaxionmap.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFEC23E51CB6EBDA00DE138F /* dymaxionmap.xml */; }; AFEC23E91CB6EC7F00DE138F /* dymaxionmap.c in Sources */ = {isa = PBXBuildFile; fileRef = AFEC23E41CB6EBC400DE138F /* dymaxionmap.c */; settings = {COMPILER_FLAGS = "-DUSE_GL"; }; }; AFEC68371BD6CA85004C1B64 /* OCRAStd.otf in Resources */ = {isa = PBXBuildFile; fileRef = AFEC68361BD6CA85004C1B64 /* OCRAStd.otf */; }; AFEC68391BD6CDF9004C1B64 /* YearlReg.ttf in Resources */ = {isa = PBXBuildFile; fileRef = AFEC68381BD6CDF9004C1B64 /* YearlReg.ttf */; }; AFEE10541D13406000AAC8F7 /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AFEE10561D13406000AAC8F7 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AFEE10571D13406000AAC8F7 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AFEE10581D13406000AAC8F7 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AFEE10591D13406000AAC8F7 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AFEE105A1D13406000AAC8F7 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AFEE105B1D13406000AAC8F7 /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; AFEE105C1D13406000AAC8F7 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AFEE10661D1341F600AAC8F7 /* cubetwist.c in Sources */ = {isa = PBXBuildFile; fileRef = AFEE10641D1341E300AAC8F7 /* cubetwist.c */; }; AFEE10671D1341FA00AAC8F7 /* cubetwist.c in Sources */ = {isa = PBXBuildFile; fileRef = AFEE10641D1341E300AAC8F7 /* cubetwist.c */; settings = {COMPILER_FLAGS = "-DUSE_GL"; }; }; AFEE10681D1341FE00AAC8F7 /* cubetwist.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFEE10651D1341E300AAC8F7 /* cubetwist.xml */; }; AFEE10691D13420700AAC8F7 /* cubetwist.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFEE10651D1341E300AAC8F7 /* cubetwist.xml */; }; AFEE10731D15EB0800AAC8F7 /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AFEE10751D15EB0800AAC8F7 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AFEE10761D15EB0800AAC8F7 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AFEE10771D15EB0800AAC8F7 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AFEE10781D15EB0800AAC8F7 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AFEE10791D15EB0800AAC8F7 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AFEE107A1D15EB0800AAC8F7 /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; AFEE107B1D15EB0800AAC8F7 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AFEE10851D15EBB900AAC8F7 /* cubestack.c in Sources */ = {isa = PBXBuildFile; fileRef = AFEE10831D15EBA600AAC8F7 /* cubestack.c */; settings = {COMPILER_FLAGS = "-DUSE_GL"; }; }; AFEE10861D15EBC800AAC8F7 /* cubestack.c in Sources */ = {isa = PBXBuildFile; fileRef = AFEE10831D15EBA600AAC8F7 /* cubestack.c */; }; AFEE10871D15EBD900AAC8F7 /* cubestack.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFEE10841D15EBA600AAC8F7 /* cubestack.xml */; }; AFEE10881D15EBDC00AAC8F7 /* cubestack.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFEE10841D15EBA600AAC8F7 /* cubestack.xml */; }; AFEE10921D17E20B00AAC8F7 /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AFEE10941D17E20B00AAC8F7 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AFEE10951D17E20B00AAC8F7 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AFEE10961D17E20B00AAC8F7 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AFEE10971D17E20B00AAC8F7 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AFEE10981D17E20B00AAC8F7 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AFEE10991D17E20B00AAC8F7 /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; AFEE109A1D17E20B00AAC8F7 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AFEE10A41D17E2BA00AAC8F7 /* splodesic.c in Sources */ = {isa = PBXBuildFile; fileRef = AFEE10A21D17E2B300AAC8F7 /* splodesic.c */; settings = {COMPILER_FLAGS = "-DUSE_GL"; }; }; AFEE10A51D17E2C500AAC8F7 /* splodesic.c in Sources */ = {isa = PBXBuildFile; fileRef = AFEE10A21D17E2B300AAC8F7 /* splodesic.c */; }; AFEE10A61D17E2C900AAC8F7 /* splodesic.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFEE10A31D17E2B300AAC8F7 /* splodesic.xml */; }; AFEE10A71D17E2CD00AAC8F7 /* splodesic.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFEE10A31D17E2B300AAC8F7 /* splodesic.xml */; }; AFF1BA0F19A96D8B0016A88D /* lament_model.c in Sources */ = {isa = PBXBuildFile; fileRef = AFF1BA0E19A96D8B0016A88D /* lament_model.c */; }; AFF1BA1019A96D8B0016A88D /* lament_model.c in Sources */ = {isa = PBXBuildFile; fileRef = AFF1BA0E19A96D8B0016A88D /* lament_model.c */; settings = {COMPILER_FLAGS = "-DUSE_GL"; }; }; AFF2868617860E830050A578 /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AFF2868817860E830050A578 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AFF2868917860E830050A578 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AFF2868A17860E830050A578 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AFF2868B17860E830050A578 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AFF2868C17860E830050A578 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AFF28696178611720050A578 /* quasicrystal.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFF28694178611720050A578 /* quasicrystal.xml */; }; AFF28697178611720050A578 /* quasicrystal.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFF28694178611720050A578 /* quasicrystal.xml */; }; AFF28698178611720050A578 /* quasicrystal.c in Sources */ = {isa = PBXBuildFile; fileRef = AFF28695178611720050A578 /* quasicrystal.c */; }; AFF28699178611720050A578 /* quasicrystal.c in Sources */ = {isa = PBXBuildFile; fileRef = AFF28695178611720050A578 /* quasicrystal.c */; settings = {COMPILER_FLAGS = "-DUSE_GL"; }; }; AFF3C9EF17CCAC440028F240 /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AFF3C9F117CCAC440028F240 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AFF3C9F217CCAC440028F240 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AFF3C9F317CCAC440028F240 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AFF3C9F417CCAC440028F240 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AFF3C9F517CCAC440028F240 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AFF3C9FE17CCAD9A0028F240 /* geodesic.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFF3C9FD17CCAD9A0028F240 /* geodesic.xml */; }; AFF3C9FF17CCAD9A0028F240 /* geodesic.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFF3C9FD17CCAD9A0028F240 /* geodesic.xml */; }; AFF3CA0317CCAEB70028F240 /* geodesic.c in Sources */ = {isa = PBXBuildFile; fileRef = AFF3CA0217CCAEB70028F240 /* geodesic.c */; }; AFF3CA0417CCAEB70028F240 /* geodesic.c in Sources */ = {isa = PBXBuildFile; fileRef = AFF3CA0217CCAEB70028F240 /* geodesic.c */; settings = {COMPILER_FLAGS = "-DUSE_GL"; }; }; AFF4633C0C4403E400EE6509 /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AFF4634A0C44044F00EE6509 /* cwaves.c in Sources */ = {isa = PBXBuildFile; fileRef = AFF463490C44044E00EE6509 /* cwaves.c */; }; AFF4634C0C44046500EE6509 /* cwaves.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFF4634B0C44046500EE6509 /* cwaves.xml */; }; AFF4635F0C440AEF00EE6509 /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AFF463720C440B9200EE6509 /* glcells.c in Sources */ = {isa = PBXBuildFile; fileRef = AFF463710C440B9200EE6509 /* glcells.c */; }; AFF463740C440BAC00EE6509 /* glcells.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFF463730C440BAC00EE6509 /* glcells.xml */; }; AFFAB31C19158CE40020F021 /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AFFAB31E19158CE40020F021 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AFFAB31F19158CE40020F021 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; AFFAB32019158CE40020F021 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; AFFAB32119158CE40020F021 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AFFAB32219158CE40020F021 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; AFFAB32319158CE40020F021 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AFFAB32F19158E2A0020F021 /* projectiveplane.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFFAB32C19158E2A0020F021 /* projectiveplane.xml */; }; AFFAB33019158E2A0020F021 /* projectiveplane.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFFAB32C19158E2A0020F021 /* projectiveplane.xml */; }; AFFAB33219158EA80020F021 /* projectiveplane.c in Sources */ = {isa = PBXBuildFile; fileRef = AFFAB33119158EA80020F021 /* projectiveplane.c */; }; AFFAB33319158EA80020F021 /* projectiveplane.c in Sources */ = {isa = PBXBuildFile; fileRef = AFFAB33119158EA80020F021 /* projectiveplane.c */; settings = {COMPILER_FLAGS = "-DUSE_GL"; }; }; CE3D01581B76F4C100993C75 /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; CE3D015A1B76F4C100993C75 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; CE3D015B1B76F4C100993C75 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; CE3D015C1B76F4C100993C75 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; CE3D015D1B76F4C100993C75 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; CE3D015E1B76F4C100993C75 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; CE3D015F1B76F4C100993C75 /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CE3D01601B76F4C100993C75 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; CE3D01691B76F88A00993C75 /* testx11.xml in Resources */ = {isa = PBXBuildFile; fileRef = CE3D01681B76F83E00993C75 /* testx11.xml */; }; CE3D016B1B76F93700993C75 /* testx11.c in Sources */ = {isa = PBXBuildFile; fileRef = CE3D016A1B76F8E200993C75 /* testx11.c */; }; CE43C2BF1C055157004C2BC6 /* jwxyz-cocoa.m in Sources */ = {isa = PBXBuildFile; fileRef = CE43C2BE1C055157004C2BC6 /* jwxyz-cocoa.m */; }; CE55645A1C25141000645458 /* jwxyz-gl.c in Sources */ = {isa = PBXBuildFile; fileRef = CE5564591C25141000645458 /* jwxyz-gl.c */; }; CE8EA1C21C35CF10002D1020 /* jwxyz-common.c in Sources */ = {isa = PBXBuildFile; fileRef = CE8EA1C11C35CF10002D1020 /* jwxyz-common.c */; }; CE9289D319BD00E300961F22 /* async_netdb.c in Sources */ = {isa = PBXBuildFile; fileRef = CE9289D119BD00E200961F22 /* async_netdb.c */; }; CE9289D419BD00E300961F22 /* async_netdb.h in Headers */ = {isa = PBXBuildFile; fileRef = CE9289D219BD00E300961F22 /* async_netdb.h */; }; CEE0BC621A6B0D6200C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BC631A6B0D8100C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BC641A6B0DA100C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BC661A6B0DBF00C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BC671A6B0E0600C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BC681A6B0E1800C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BC691A6B0E2D00C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BC6A1A6B0E3800C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BC6B1A6B0E4200C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BC6C1A6B0E4B00C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BC6D1A6B0E5400C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BC6E1A6B0E5E00C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BC6F1A6B0E6700C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BC701A6B0E7200C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BC711A6B0E7D00C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BC721A6B0E8800C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BC731A6B0E9200C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BC741A6B0E9B00C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BC751A6B0EA500C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BC761A6B0EAE00C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BC771A6B0ED300C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BC781A6B0EDD00C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BC791A6B0EE700C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BC7A1A6B0EF100C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BC7B1A6B0EFB00C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BC7C1A6B0F0400C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BC7D1A6B0F0D00C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BC7E1A6B0F1600C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BC7F1A6B0F1F00C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BC801A6B0F2900C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BC811A6B0F3200C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BC821A6B0F3C00C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BC831A6B0F4500C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BC841A6B0F5400C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BC851A6B0F5D00C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BC861A6B0F6700C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BC871A6B0F7000C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BC881A6B0F7C00C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BC891A6B0FB300C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BC8A1A6B0FBE00C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BC8B1A6B0FC900C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BC8C1A6B0FD400C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BC8D1A6B0FDE00C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BC8E1A6B0FEA00C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BC8F1A6B0FF600C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BC901A6B100000C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BC911A6B100900C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BC921A6B101900C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BC931A6B102600C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BC941A6B103100C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BC951A6B103B00C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BC961A6B104500C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BC971A6B104F00C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BC981A6B105800C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BC991A6B106300C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BC9A1A6B106C00C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BC9B1A6B107600C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BC9C1A6B108000C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BC9D1A6B108B00C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BC9E1A6B109600C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BC9F1A6B10A000C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BCA01A6B10A900C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BCA11A6B10B400C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BCA21A6B10BF00C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BCA31A6B10CB00C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BCA41A6B10D400C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BCA51A6B10DE00C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BCA61A6B10E900C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BCA71A6B10F300C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BCA81A6B10FD00C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BCA91A6B110700C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BCAA1A6B111200C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BCAB1A6B111E00C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BCAC1A6B112A00C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BCAD1A6B113500C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BCAE1A6B114000C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BCAF1A6B114D00C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BCB01A6B115700C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BCB11A6B116100C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BCB21A6B116B00C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BCB31A6B117500C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BCB41A6B117F00C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BCB51A6B118C00C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BCB61A6B119C00C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BCB71A6B11DC00C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BCB81A6B11E700C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BCB91A6B11F100C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BCBA1A6B11FB00C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BCBB1A6B120600C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BCBC1A6B121000C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BCBD1A6B121B00C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BCBE1A6B122600C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BCBF1A6B123500C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BCC01A6B124400C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BCC11A6B124D00C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BCC21A6B125800C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BCC31A6B126200C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BCC41A6B126D00C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BCC51A6B127700C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BCC61A6B12F700C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BCC71A6B130000C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BCC81A6B130A00C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BCC91A6B131300C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BCCA1A6B131E00C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BCCB1A6B132800C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BCCC1A6B133300C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BCCD1A6B133D00C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BCCE1A6B134600C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BCCF1A6B135000C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BCD01A6B135900C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BCD11A6B136300C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BCD21A6B136C00C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BCD31A6B137600C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BCD41A6B137F00C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BCD51A6B138800C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BCD61A6B13A100C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BCD71A6B13AA00C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BCD81A6B13B500C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BCD91A6B13C000C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BCDA1A6B13C900C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BCDB1A6B13D300C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BCDC1A6B13DD00C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BCDD1A6B13E700C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BCDE1A6B13F100C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BCDF1A6B13FC00C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BCE01A6B140500C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BCE11A6B140F00C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BCE21A6B141900C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BCE31A6B142200C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BCE41A6B142C00C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BCE51A6B143500C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BCE61A6B143E00C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BCE71A6B144800C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BCE81A6B146F00C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BCE91A6B147900C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BCEA1A6B150F00C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BCEB1A6B151A00C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BCEC1A6B152300C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BCED1A6B152E00C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BCEE1A6B153800C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BCEF1A6B154200C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BCF01A6B154E00C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BCF11A6B155700C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BCF21A6B156200C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BCF31A6B156C00C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BCF41A6B157600C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BCF51A6B158000C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BCF61A6B158C00C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BCF71A6B159600C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BCF81A6B15A300C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BCF91A6B15AD00C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BCFA1A6B15B600C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BCFB1A6B15BF00C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BCFC1A6B15C800C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BCFD1A6B15D200C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BCFE1A6B15E300C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BCFF1A6B15EE00C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BD001A6B15F800C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BD011A6B160200C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BD021A6B160D00C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BD031A6B161700C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BD041A6B162400C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BD051A6B162E00C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BD061A6B163700C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BD071A6B164000C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BD081A6B164A00C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BD091A6B165300C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BD0A1A6B165D00C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BD0B1A6B166700C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BD0C1A6B167000C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BD0D1A6B167900C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BD0E1A6B168200C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BD0F1A6B168D00C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BD101A6B169600C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BD111A6B169F00C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BD121A6B16A800C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BD131A6B16B200C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BD141A6B16BB00C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BD151A6B16C500C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BD161A6B16D000C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BD171A6B16DA00C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BD181A6B16E300C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BD191A6B16EE00C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BD1A1A6B16F800C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BD1B1A6B170100C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BD1C1A6B170A00C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BD1D1A6B171400C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BD1E1A6B171E00C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BD1F1A6B172800C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BD201A6B173100C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BD211A6B173A00C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BD221A6B174400C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BD231A6B174D00C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BD241A6B175700C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BD251A6B176000C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BD261A6B176900C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BD271A6B177200C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BD281A6B177C00C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BD291A6B178600C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BD2A1A6B178F00C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BD2B1A6B179900C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BD2C1A6B17A200C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BD2D1A6B17AD00C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BD2E1A6B17B600C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BD2F1A6B17BF00C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BD301A6B17C900C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BD311A6B17D300C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BD321A6B17DD00C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BD331A6B17E600C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BD341A6B17EF00C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BD351A6B17F700C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BD361A6B180D00C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BD371A6B181700C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BD381A6B182100C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BD391A6B182B00C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BD3A1A6B183600C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BD3B1A6B184100C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BD3C1A6B184C00C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BD3D1A6B185600C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BD3E1A6B186200C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BD3F1A6B186C00C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BD401A6B187500C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BD411A6B188100C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BD421A6B188B00C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BD431A6B189500C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BD441A6B189F00C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BD451A6B18A900C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BD461A6B18B200C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BD471A6B18BB00C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BD481A6B18C400C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BD491A6B18CE00C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; CEE0BD4A1A6B18D700C098BF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ AF08399109930B6B00277BE9 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AF083A34099311D700277BE9 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AF0DC7AD0C4C73F600D76972 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AF0DCA300C4C744D00D76972 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF0DC7AB0C4C73F600D76972; remoteInfo = m6502; }; AF0DCA440C4CBB0D00D76972 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AF0DCA5B0C4CBB4300D76972 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF0DCA420C4CBB0D00D76972; remoteInfo = Voronoi; }; AF137D460F075CC8004DE3B2 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF137D410F075C9B004DE3B2; remoteInfo = Obsolete; }; AF137D480F075E5C004DE3B2 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AFD5709B0996B88E00BA26F7; remoteInfo = Worm; }; AF137D4A0F075E5C004DE3B2 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF477208099D4EE8001F091E; remoteInfo = Whirlygig; }; AF137D4C0F075E5C004DE3B2 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AFD56F0B0996AAFA00BA26F7; remoteInfo = Vines; }; AF137D4E0F075E5C004DE3B2 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4771A7099D4949001F091E; remoteInfo = T3D; }; AF137D500F075E5C004DE3B2 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AFD570430996B61600BA26F7; remoteInfo = Spiral; }; AF137D520F075E5C004DE3B2 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AFD570260996B56D00BA26F7; remoteInfo = Sphere; }; AF137D540F075E5C004DE3B2 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AFD570B10996B93000BA26F7; remoteInfo = Rotor; }; AF137D560F075E5C004DE3B2 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AFD56FCF0996B20900BA26F7; remoteInfo = Lissie; }; AF137D580F075E5C004DE3B2 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AFD56FB90996B18F00BA26F7; remoteInfo = Lisa; }; AF137D5A0F075E5C004DE3B2 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AFD56FA30996B10F00BA26F7; remoteInfo = Lightning; }; AF137D5C0F075E5C004DE3B2 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AFD56F8C0996B09400BA26F7; remoteInfo = Laser; }; AF137D600F075E5C004DE3B2 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AFA55CCC09934CE400F3E977; remoteInfo = GLForestFire; }; AF137D620F075E5C004DE3B2 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AFD56EDA0996A95700BA26F7; remoteInfo = Forest; }; AF137D640F075E5C004DE3B2 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF477909099DE379001F091E; remoteInfo = Flag; }; AF137D660F075E5C004DE3B2 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF47765A099DA78E001F091E; remoteInfo = Critical; }; AF137D680F075E5C004DE3B2 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF6427A809A2DE36000F4CD4; remoteInfo = Bubbles; }; AF1A17630D6D6EE3008AF328 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AF1A17830D6D6FA7008AF328 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF1A17610D6D6EE3008AF328; remoteInfo = LCDscrub; }; AF1B0FA91D7AB4740011DBE4 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AF1B0FC41D7AB5740011DBE4 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF1B0FA71D7AB4740011DBE4; remoteInfo = Hexstrut; }; AF32D9E20F3AD0B40080F535 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AF32D9F80F3AD0D90080F535 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF32D9E00F3AD0B40080F535; remoteInfo = RubikBlocks; }; AF3581C11431D47B00E09C51 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AF3581FD143330F900E09C51 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AF35E88C0E63823600691F2F /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AF35E8A20E63825600691F2F /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF35E88A0E63823600691F2F; remoteInfo = Jigsaw; }; AF36340018540D050086A439 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF1AD9E118500F9F00932759; remoteInfo = XScreenSaverUpdater; }; AF39381C1D0FBD6A00205406 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AF3938371D0FBF5300205406 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF39381A1D0FBD6A00205406; remoteInfo = Discoball; }; AF39E284198A11F60064A58D /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AF39E2B9198A16920064A58D /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF39E282198A11F60064A58D; remoteInfo = WindupRobot; }; AF3C71470D624BF50030CC0D /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AF42C5150D624E9200B27FF6 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF3C71450D624BF50030CC0D; remoteInfo = Hypnowheel; }; AF4540D10E52BE8800AE87B5 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AFE30BE80E52B14700CCF4A5; remoteInfo = Sonar; }; AF46E9D11CBBA2B300240FBC /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AF46E9EC1CBBA49A00240FBC /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF46E9CF1CBBA2B300240FBC; remoteInfo = Unicrud; }; AF476FB7099D154F001F091E /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AF476FDC099D1686001F091E /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AF47704E099D4385001F091E /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AF47716B099D4786001F091E /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AF477181099D4803001F091E /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AF4771A9099D4949001F091E /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AF4771DD099D4D9A001F091E /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AF4771F4099D4E63001F091E /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AF47720A099D4EE8001F091E /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AF477220099D4F67001F091E /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AF477255099D5717001F091E /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AF47726D099D57B9001F091E /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AF477285099D5926001F091E /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AF477384099D65A1001F091E /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AF47739C099D6648001F091E /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AF4773C3099D67B9001F091E /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AF477403099D69E7001F091E /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AF477428099D7C70001F091E /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AF477444099D7D33001F091E /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AF477485099D89E4001F091E /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AF47749B099D8A74001F091E /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AF4774B6099D8B5F001F091E /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AF4774D0099D8BFF001F091E /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AF47755F099D9A1A001F091E /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AF477585099D9C28001F091E /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AF4775A1099D9CF7001F091E /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AF4775DA099D9F69001F091E /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AF4775F4099DA030001F091E /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AF477615099DA26C001F091E /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AF477646099DA6D0001F091E /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AF47765C099DA78E001F091E /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AF477672099DA849001F091E /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AF477691099DAA6F001F091E /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AF4776AC099DABDD001F091E /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AF4776C2099DAC8A001F091E /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AF4776DD099DADDF001F091E /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AF4776F3099DAE7A001F091E /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AF47770F099DAF9F001F091E /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AF477725099DB044001F091E /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AF477754099DB61E001F091E /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AF477776099DB965001F091E /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AF477792099DBA90001F091E /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AF4777D3099DC183001F091E /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AF4778AD099DDB79001F091E /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AF4778C9099DDCAE001F091E /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AF4778EA099DDDC8001F091E /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AF47790B099DE379001F091E /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AF47792C099DE4C7001F091E /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AF480921098C412F00FB32B8 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AF480929098C419000FB32B8 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AF48092C098C41AE00FB32B8 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AF480935098C421200FB32B8 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AF480C4B098E301400FB32B8 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AF480D5B098EED6900FB32B8 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF480D59098EED5100FB32B8; remoteInfo = "All Savers (OpenGL)"; }; AF480D5D098EED6900FB32B8 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF480D58098EED3D00FB32B8; remoteInfo = "All Savers (XLockmore)"; }; AF480D5F098EED6900FB32B8 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF480AAF098C669800FB32B8; remoteInfo = "All Savers (XScreenSaver)"; }; AF480D74098EEDDE00FB32B8 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AF4810ED09909FBA00FB32B8 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AF4812520990CE2700FB32B8 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AF4812B50990D3D900FB32B8 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AF48DEF10A0C25E000F94CF9 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AF48DF050A0C261100F94CF9 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF48DEEF0A0C25E000F94CF9; remoteInfo = GLSchool; }; AF4A344B102A593600A81B2A /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AF4A345F102A59A400A81B2A /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4A3449102A593600A81B2A; remoteInfo = Surfaces; }; AF4F10ED143450C300E34F3F /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF3581BF1431D47B00E09C51; remoteInfo = CompanionCube; }; AF4F10EF143450C300E34F3F /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF78D175142DD8F3002AAF77; remoteInfo = Hilbert; }; AF4F10F1143450C300E34F3F /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF3581FB143330F900E09C51; remoteInfo = TronBit; }; AF4FD6E80CE7A486005EE58E /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AF4FD6FE0CE7A4F9005EE58E /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4FD6E60CE7A486005EE58E; remoteInfo = Lockward; }; AF4FF4970D52CA5000666F98 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4FF4930D52CA0800666F98; remoteInfo = m6502.h; }; AF4FF4BC0D52CBDE00666F98 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AF4FF4D60D52CD0D00666F98 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4FF4BA0D52CBDE00666F98; remoteInfo = CubicGrid; }; AF5C9AFB1A0CCE6E00B0147A /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AF5C9B151A0CCF8000B0147A /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF5C9AF91A0CCE6E00B0147A; remoteInfo = Cityflow; }; AF63A7F31AB4EDDB00593C75 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AF63A80E1AB4EFD300593C75 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF63A7F11AB4EDDB00593C75; remoteInfo = RomanBoy; }; AF63F2491C3465BE0033E133 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AF63F24B1C3465BE0033E133 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4FF4930D52CA0800666F98; remoteInfo = m6502.h; }; AF63F24D1C3465BE0033E133 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AFA56119099378CB00F3E977; remoteInfo = molecules.h; }; AF63F4521C34682A0033E133 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AF63F4541C34682A0033E133 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4FF4930D52CA0800666F98; remoteInfo = m6502.h; }; AF63F4561C34682A0033E133 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AFA56119099378CB00F3E977; remoteInfo = molecules.h; }; AF63F47A1C3469FC0033E133 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AF63F47C1C3469FC0033E133 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4FF4930D52CA0800666F98; remoteInfo = m6502.h; }; AF63F47E1C3469FC0033E133 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AFA56119099378CB00F3E977; remoteInfo = molecules.h; }; AF6423F4099FF9C2000F4CD4 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AF6425CE09A18855000F4CD4 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AF6425EE09A189EC000F4CD4 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AF64261109A18D6C000F4CD4 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AF64262E09A18F54000F4CD4 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AF64265109A19229000F4CD4 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AF64267D09A194B0000F4CD4 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AF64277309A1D37A000F4CD4 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AF6427AA09A2DE36000F4CD4 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AF68A48019196CF800D41CD1 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AF68A49D19196EA000D41CD1 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF68A47E19196CF800D41CD1; remoteInfo = Tessellimage; }; AF714E4E105613410046AB1D /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4774B4099D8B5F001F091E; remoteInfo = LMorph; }; AF714E50105613580046AB1D /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AFD570C90996B9F800BA26F7; remoteInfo = Ant; }; AF73FF241A09877F00E485E9 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AF73FF3E1A0988F000E485E9 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF73FF221A09877F00E485E9; remoteInfo = BinaryRing; }; AF7511011782B5B900380EA1 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AF7776E609B63ABF00EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AF77771C09B6416100EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AF77774009B6446500EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AF77777609B6497800EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AF77779009B64A5200EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AF7777AA09B64B2600EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AF7777D209B64C6B00EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AF7777EC09B64E3100EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AF77781209B6504400EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AF77784609B6528100EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AF77786309B6536000EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AF77788109B6563500EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AF7778A709B659C800EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AF7778D609B6604500EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF9D475F09B53166006E59CF; remoteInfo = Zoom; }; AF7778D809B6604500EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4776AA099DABDD001F091E; remoteInfo = XSpirograph; }; AF7778DA09B6604500EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4776C0099DAC8A001F091E; remoteInfo = XRaySwarm; }; AF7778DC09B6604600EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF477442099D7D33001F091E; remoteInfo = XMatrix; }; AF7778DE09B6604600EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF9D4C6909B59F27006E59CF; remoteInfo = XLyap; }; AF7778E009B6604600EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4778C7099DDCAE001F091E; remoteInfo = XJack; }; AF7778E209B6604600EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF9D4D7E09B5B2DC006E59CF; remoteInfo = XAnalogTV; }; AF7778E409B6604600EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF975808099C41D500B05160; remoteInfo = XFlame; }; AF7778E609B6604600EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF477382099D65A1001F091E; remoteInfo = Wormhole; }; AF7778EA09B6604600EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4776DB099DADDF001F091E; remoteInfo = WhirlWindWarp; }; AF7778EC09B6604600EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF47717F099D4803001F091E; remoteInfo = Wander; }; AF7778EE09B6604600EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4776F1099DAE7A001F091E; remoteInfo = Vermiculate; }; AF7778F009B6604600EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF9D496C09B5411D006E59CF; remoteInfo = Twang; }; AF7778F209B6604600EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF476FDA099D1686001F091E; remoteInfo = Truchet; }; AF7778F609B6604600EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF477723099DB044001F091E; remoteInfo = Substrate; }; AF7778F809B6604600EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF47759F099D9CF7001F091E; remoteInfo = Starfish; }; AF7778FA09B6604600EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF477644099DA6D0001F091E; remoteInfo = Squiral; }; AF7778FC09B6604600EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF9D499709B544C2006E59CF; remoteInfo = Spotlight; }; AF7778FE09B6604700EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF64277109A1D37A000F4CD4; remoteInfo = SpeedMine; }; AF77790209B6604700EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF47792A099DE4C7001F091E; remoteInfo = Slip; }; AF77790409B6604700EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF9D474409B5300A006E59CF; remoteInfo = SlideScreen; }; AF77790609B6604700EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF975865099C475900B05160; remoteInfo = ShadeBobs; }; AF77790809B6604700EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF9D495409B53FC9006E59CF; remoteInfo = RotZoomer; }; AF77790A09B6604700EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF9770290989D1E6001F8B92; remoteInfo = Rorschach; }; AF77790C09B6604700EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF975D52099CA0F000B05160; remoteInfo = Rocks; }; AF77790E09B6604700EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF9D492B09B53CBA006E59CF; remoteInfo = Ripples; }; AF77791009B6604700EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF9757C2099C3E6300B05160; remoteInfo = RD; }; AF77791209B6604700EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF6425EC09A189EC000F4CD4; remoteInfo = Qix; }; AF77791409B6604700EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF477583099D9C28001F091E; remoteInfo = Pyro; }; AF77791609B6604700EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF47726B099D57B9001F091E; remoteInfo = PopSquares; }; AF77791809B6604700EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF9D4CE709B5AA8E006E59CF; remoteInfo = Pong; }; AF77791A09B6604700EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF477283099D5926001F091E; remoteInfo = Piecewise; }; AF77791C09B6604800EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF7776E409B63ABF00EA3033; remoteInfo = Phosphor; }; AF77791E09B6604800EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF477670099DA849001F091E; remoteInfo = Petri; }; AF77792009B6604800EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4778AB099DDB79001F091E; remoteInfo = Penetrate; }; AF77792209B6604800EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF47755D099D9A1A001F091E; remoteInfo = Pedal; }; AF77792409B6604800EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF975C5D099C8F3F00B05160; remoteInfo = NoseGuy; }; AF77792609B6604800EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4771F2099D4E63001F091E; remoteInfo = NerveRot; }; AF77792809B6604800EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF64264F09A19229000F4CD4; remoteInfo = Munch; }; AF77792A09B6604800EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF64262C09A18F54000F4CD4; remoteInfo = Moire2; }; AF77792C09B6604800EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF975775099C374A00B05160; remoteInfo = Moire; }; AF77793009B6604800EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF975A36099C681F00B05160; remoteInfo = MetaBalls; }; AF77793209B6604800EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF975AFC099C6FE400B05160; remoteInfo = MemScroller; }; AF77793409B6604800EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4774CE099D8BFF001F091E; remoteInfo = Maze; }; AF77793809B6604800EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF477613099DA26C001F091E; remoteInfo = Kumppa; }; AF77793A09B6604900EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF477499099D8A74001F091E; remoteInfo = Kaleidescope; }; AF77793E09B6604900EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF477401099D69E7001F091E; remoteInfo = Intermomentary; }; AF77794009B6604900EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF476FB5099D154F001F091E; remoteInfo = Interference; }; AF77794209B6604900EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF477752099DB61E001F091E; remoteInfo = Interaggregate; }; AF77794409B6604900EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF97572D099C317000B05160; remoteInfo = IMSMap; }; AF77794609B6604900EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF477426099D7C70001F091E; remoteInfo = IFS; }; AF77794C09B6604900EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF480C49098E301400FB32B8; remoteInfo = Helix; }; AF77794E09B6604900EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF975C12099C8C1500B05160; remoteInfo = Halo; }; AF77795009B6604900EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF477253099D5717001F091E; remoteInfo = Halftone; }; AF77795209B6604900EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF975C3D099C8DCF00B05160; remoteInfo = Greynetic; }; AF77795409B6604A00EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF64267B09A194B0000F4CD4; remoteInfo = Goop; }; AF77795609B6604A00EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF47739A099D6648001F091E; remoteInfo = FuzzyFlakes; }; AF77795809B6604A00EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF77787F09B6563500EA3033; remoteInfo = FontGlide; }; AF77795A09B6604A00EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF477790099DBA90001F091E; remoteInfo = FluidBalls; }; AF77795C09B6604A00EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF477483099D89E4001F091E; remoteInfo = Flame; }; AF77795E09B6604A00EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF975AD7099C6EB100B05160; remoteInfo = Fireworkx; }; AF77796009B6604A00EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF975A6C099C6AB200B05160; remoteInfo = Eruption; }; AF77796209B6604A00EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4775F2099DA030001F091E; remoteInfo = Epicycle; }; AF77796409B6604A00EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF9D48F409B535DA006E59CF; remoteInfo = Distort; }; AF77796609B6604A00EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF47704C099D4385001F091E; remoteInfo = Deluxe; }; AF77796809B6604A00EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF976FBB0989CAA2001F8B92; remoteInfo = Deco; }; AF77796A09B6604A00EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF9D466609B5109C006E59CF; remoteInfo = DecayScreen; }; AF77796C09B6604A00EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4778E8099DDDC8001F091E; remoteInfo = Cynosure; }; AF77797009B6604B00EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4775D8099D9F69001F091E; remoteInfo = Coral; }; AF77797209B6604B00EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF477169099D4786001F091E; remoteInfo = Compass; }; AF77797409B6604B00EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF47770D099DAF9F001F091E; remoteInfo = CloudLife; }; AF77797609B6604B00EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF477774099DB965001F091E; remoteInfo = Celtic; }; AF77797809B6604B00EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4771DB099D4D9A001F091E; remoteInfo = CCurve; }; AF77797A09B6604B00EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF9D48DB09B53322006E59CF; remoteInfo = Bumps; }; AF77797E09B6604B00EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF9D4DAF09B5B71E006E59CF; remoteInfo = BSOD; }; AF77798009B6604B00EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4777D1099DC183001F091E; remoteInfo = BoxFit; }; AF77798209B6604B00EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF7778A509B659C800EA3033; remoteInfo = BlitSpin; }; AF77798409B6604B00EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF47768F099DAA6F001F091E; remoteInfo = Blaster; }; AF77798609B6604B00EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF975A86099C6BC300B05160; remoteInfo = Barcode; }; AF77798809B6604C00EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF9770660989D2F6001F8B92; remoteInfo = Attraction; }; AF77798A09B6604C00EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF9D4DEC09B5BB19006E59CF; remoteInfo = Apple2; }; AF77798C09B6604C00EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4773C1099D67B9001F091E; remoteInfo = Anemotaxis; }; AF77798E09B6604C00EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF47721E099D4F67001F091E; remoteInfo = Anemone; }; AF77799409B6608000EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AFD570850996B80300BA26F7; remoteInfo = Triangle; }; AF77799609B6608100EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AFD571590996C0CE00BA26F7; remoteInfo = Thornbird; }; AF77799809B6608100EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AFD572220996E4A300BA26F7; remoteInfo = Swirl; }; AF77799A09B6608100EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AFD5735D0997411200BA26F7; remoteInfo = Strange; }; AF7779A009B6608100EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AFD5700F0996B4CC00BA26F7; remoteInfo = Sierpinski; }; AF7779A409B6608100EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AFD5726D0996EE8500BA26F7; remoteInfo = Polyominoes; }; AF7779A609B6608100EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AFD56FF80996B43800BA26F7; remoteInfo = Penrose; }; AF7779A809B6608100EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF77771A09B6416100EA3033; remoteInfo = Pacman; }; AF7779AA09B6608100EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AFD5706F0996B72700BA26F7; remoteInfo = Mountain; }; AF7779AC09B6608100EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF794FCD09974FA60059A8B0; remoteInfo = Loop; }; AF7779B609B6608100EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AFD572F9099701C000BA26F7; remoteInfo = Julia; }; AF7779BA09B6608100EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AFD56F6B0996B01600BA26F7; remoteInfo = Hopalong; }; AF7779BC09B6608100EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AFD56F4F0996AEEE00BA26F7; remoteInfo = Grav; }; AF7779BE09B6608100EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AFD56F230996AB8A00BA26F7; remoteInfo = Galaxy; }; AF7779C209B6608100EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AFD570EA0996BBBF00BA26F7; remoteInfo = Flow; }; AF7779C609B6608200EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF794F8E09974A320059A8B0; remoteInfo = Fiberlamp; }; AF7779C809B6608200EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AFD570590996B6A300BA26F7; remoteInfo = FadePlot; }; AF7779CA09B6608200EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AFD571430996C01700BA26F7; remoteInfo = Euler2D; }; AF7779CC09B6608200EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF480D72098EEDDE00FB32B8; remoteInfo = Drift; }; AF7779CE09B6608200EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AFD571130996BE9300BA26F7; remoteInfo = Discrete; }; AF7779D009B6608200EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF794F64099748450059A8B0; remoteInfo = Demon; }; AF7779D209B6608200EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AFD572C20996FC0F00BA26F7; remoteInfo = Crystal; }; AF7779D409B6608200EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AFD56EAE0996A72600BA26F7; remoteInfo = Braid; }; AF7779D609B6608200EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AFD572A50996F99600BA26F7; remoteInfo = Bouboule; }; AF7779D809B6608200EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AFD5712C0996BF2E00BA26F7; remoteInfo = Apollonian; }; AF7779DC09B660AF00EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AFA56379099397B300F3E977; remoteInfo = TimeTunnel; }; AF7779DE09B660AF00EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AFA562F20993943B00F3E977; remoteInfo = Tangram; }; AF7779E009B660AF00EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AFA559920993322100F3E977; remoteInfo = Superquadrics; }; AF7779E209B660B000EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF7777A809B64B2600EA3033; remoteInfo = StonerView; }; AF7779E409B660B000EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF77781009B6504400EA3033; remoteInfo = StarWars; }; AF7779E609B660B000EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AFA55A030993340300F3E977; remoteInfo = Stairs; }; AF7779E809B660B000EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AFA55A20099334A000F3E977; remoteInfo = Sproingies; }; AF7779EA09B660B000EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AFA55D7F099358C400F3E977; remoteInfo = Spheremonics; }; AF7779EC09B660B000EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AFA55B7909933F7200F3E977; remoteInfo = Sierpinski3D; }; AF7779EE09B660B000EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AFA55D3C0993565300F3E977; remoteInfo = SBalls; }; AF7779F009B660B000EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AFA559CF0993330600F3E977; remoteInfo = Rubik; }; AF7779F209B660B000EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AFA55DF009935E4900F3E977; remoteInfo = Queens; }; AF7779F409B660B100EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AFA55B2509933E8D00F3E977; remoteInfo = Pulsar; }; AF7779F609B660B100EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AFA562060993849F00F3E977; remoteInfo = Providence; }; AF7779F809B660B100EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AFA560AE0993718D00F3E977; remoteInfo = Polytopes; }; AF7779FA09B660B100EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AFA5619D09937D7E00F3E977; remoteInfo = Polyhedra; }; AF7779FC09B660B100EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4812B30990D3D900FB32B8; remoteInfo = Pipes; }; AF7779FE09B660B200EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AFA5621F0993852500F3E977; remoteInfo = Pinion; }; AF777A0009B660B200EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AFA5617B09937CF100F3E977; remoteInfo = Noof; }; AF777A0209B660B200EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AFA559B50993328000F3E977; remoteInfo = Morph3D; }; AF777A0409B660B200EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AFA560FD0993781600F3E977; remoteInfo = Molecule; }; AF777A0609B660B200EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AFA5596D0993317900F3E977; remoteInfo = Moebius; }; AF777A0809B660B200EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF77778E09B64A5200EA3033; remoteInfo = MirrorBlob; }; AF777A0A09B660B200EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AFA55BE40993429100F3E977; remoteInfo = Menger; }; AF777A0C09B660B200EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AFA55DC809935D7000F3E977; remoteInfo = Lavalite; }; AF777A0E09B660B200EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AFA55A790993364300F3E977; remoteInfo = Lament; }; AF777A1009B660B300EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AFA55F2A0993622F00F3E977; remoteInfo = Klein; }; AF777A1209B660B300EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AFA563A4099398BB00F3E977; remoteInfo = Juggler3D; }; AF777A1409B660B300EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AFA55F06099361B700F3E977; remoteInfo = JigglyPuff; }; AF777A1609B660B300EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AFA55F420993629000F3E977; remoteInfo = HyperTorus; }; AF777A1809B660B300EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AFD56DF10996A03800BA26F7; remoteInfo = GLText; }; AF777A1A09B660B300EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AFA55C77099349A600F3E977; remoteInfo = GLSnake; }; AF777A1C09B660B300EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF7777D009B64C6B00EA3033; remoteInfo = GLSlideshow; }; AF777A1E09B660B300EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AFA55B0909933E0500F3E977; remoteInfo = GLPlanet; }; AF777A2009B660B300EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AFA55F720993643600F3E977; remoteInfo = GLMatrix; }; AF777A2209B660B400EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AFA55FF909936C6D00F3E977; remoteInfo = GLKnots; }; AF777A2409B660B400EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AFA56331099395ED00F3E977; remoteInfo = GLHanoi; }; AF777A2809B660B400EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AFA55E2F09935F8E00F3E977; remoteInfo = GLBlur; }; AF777A2A09B660B400EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AFA55B9109933FDA00F3E977; remoteInfo = GFlux; }; AF777A2C09B660B400EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF77777409B6497800EA3033; remoteInfo = Gleidescope; }; AF777A2E09B660B400EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4812500990CE2700FB32B8; remoteInfo = Gears; }; AF777A3009B660B400EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AFA55E4E09935FF900F3E977; remoteInfo = FlyingToasters; }; AF777A3209B660B400EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF7777EA09B64E3100EA3033; remoteInfo = FlipText; }; AF777A3409B660B400EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF77773E09B6446500EA3033; remoteInfo = FlipScreen3D; }; AF777A3609B660B400EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AFA5603209936D5100F3E977; remoteInfo = FlipFlop; }; AF777A3809B660B400EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF6423F2099FF9C2000F4CD4; remoteInfo = Extrusion; }; AF777A3A09B660B500EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AFA55C0E0993431300F3E977; remoteInfo = Engine; }; AF777A3C09B660B500EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AFA55E0D09935EDC00F3E977; remoteInfo = Endgame; }; AF777A3E09B660B500EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF77786109B6536000EA3033; remoteInfo = DNAlogo; }; AF777A4009B660B500EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4810EB09909FBA00FB32B8; remoteInfo = DangerBall; }; AF777A4209B660B500EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AFA55FD309936BFA00F3E977; remoteInfo = CubeStorm; }; AF777A4409B660B500EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AFA55D620993584B00F3E977; remoteInfo = Cubenetic; }; AF777A4609B660B500EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AFA56351099396C000F3E977; remoteInfo = Cube21; }; AF777A4809B660B500EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AFA563130993951000F3E977; remoteInfo = Crackberg; }; AF777A4A09B660B600EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AFA55BAB099340CE00F3E977; remoteInfo = Circuit; }; AF777A4C09B660B600EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF77784409B6528100EA3033; remoteInfo = Carousel; }; AF777A4E09B660B600EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AFA55946099330B000F3E977; remoteInfo = Cage; }; AF777A5009B660B600EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AFA55ACF09933CEF00F3E977; remoteInfo = Bubble3D; }; AF777A5209B660B600EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AFA55CA909934BB200F3E977; remoteInfo = Boxed; }; AF777A5409B660B600EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AFA55EC7099360E300F3E977; remoteInfo = BouncingCow; }; AF777A5609B660B600EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AFA562BF099392C600F3E977; remoteInfo = Boing; }; AF777A5809B660B600EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AFA5601409936CC800F3E977; remoteInfo = BlockTube; }; AF777A5A09B660B600EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AFA5615609937C0D00F3E977; remoteInfo = BlinkBox; }; AF777A5C09B660B600EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF083A32099311D700277BE9; remoteInfo = Atunnel; }; AF777A5E09B660B600EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF08398F09930B6B00277BE9; remoteInfo = Atlantis; }; AF777A6009B660B700EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AFA5606209936F3800F3E977; remoteInfo = AntSpotlight; }; AF777A6209B660B700EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AFA562DA099393C900F3E977; remoteInfo = AntMaze; }; AF777A6409B660B700EA3033 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AFA5604A09936E2100F3E977; remoteInfo = AntInspect; }; AF78D177142DD8F3002AAF77 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AF794F66099748450059A8B0 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AF794F9009974A320059A8B0 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AF794FCF09974FA60059A8B0 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AF7ACFC219FF0A9200BD752B /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AF7ACFDB19FF0BDB00BD752B /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF7ACFC019FF0A9200BD752B; remoteInfo = GeodesicGears; }; AF7E07FD15925DF200D81407 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4FF4930D52CA0800666F98; remoteInfo = m6502.h; }; AF7E07FF15925DFE00D81407 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AFA56119099378CB00F3E977; remoteInfo = molecules.h; }; AF918979158FC00A002B5D1E /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AF97572F099C317000B05160 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AF975777099C374A00B05160 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AF9757C4099C3E6300B05160 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AF97580A099C41D500B05160 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AF975867099C475900B05160 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AF975A38099C681F00B05160 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AF975A6E099C6AB200B05160 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AF975A88099C6BC300B05160 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AF975AD9099C6EB100B05160 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AF975AFE099C6FE400B05160 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AF975C14099C8C1500B05160 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AF975C3F099C8DCF00B05160 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AF975C5F099C8F3F00B05160 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AF975D54099CA0F000B05160 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AF998EDC0A083DB30051049D /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AF998EF60A083E1D0051049D /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF998EDA0A083DB30051049D; remoteInfo = TopBlock; }; AF9D466809B5109C006E59CF /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AF9D474609B5300A006E59CF /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AF9D476109B53166006E59CF /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AF9D48DD09B53322006E59CF /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AF9D48F609B535DA006E59CF /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AF9D492D09B53CBA006E59CF /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AF9D495609B53FC9006E59CF /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AF9D496E09B5411D006E59CF /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AF9D499909B544C2006E59CF /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AF9D4C6B09B59F27006E59CF /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AF9D4CE909B5AA8E006E59CF /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AF9D4D8009B5B2DC006E59CF /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AF9D4DB109B5B71E006E59CF /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AF9D4DEE09B5BB19006E59CF /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AFA160911052FF87009B93AA /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF6425CC09A18855000F4CD4; remoteInfo = HyperCube; }; AFA160931052FF87009B93AA /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF64260F09A18D6C000F4CD4; remoteInfo = HyperBall; }; AFA2118E1CD59DAF00C0D2A1 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AFA211A91CD5A08000C0D2A1 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AFA2118C1CD59DAF00C0D2A1; remoteInfo = RaverHoop; }; AFA339300B058505002B0E7D /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AFA33B8E0B0585A4002B0E7D /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AFA3392E0B058505002B0E7D; remoteInfo = WebCollage; }; AFA33BCE0B0587B2002B0E7D /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AFA33BC60B058740002B0E7D; remoteInfo = "webcollage-helper"; }; AFA33BDB0B058952002B0E7D /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AFA33BC60B058740002B0E7D; remoteInfo = "webcollage-helper"; }; AFA33C030B058E3C002B0E7D /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AFA33C020B058E17002B0E7D; remoteInfo = webcollage; }; AFA55948099330B000F3E977 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AFA5596F0993317900F3E977 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AFA559940993322100F3E977 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AFA559B70993328000F3E977 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AFA559D10993330600F3E977 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AFA55A050993340300F3E977 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AFA55A22099334A000F3E977 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AFA55A7B0993364300F3E977 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AFA55AD109933CEF00F3E977 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AFA55B0B09933E0500F3E977 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AFA55B2709933E8D00F3E977 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AFA55B7B09933F7200F3E977 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AFA55B9309933FDA00F3E977 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AFA55BAD099340CE00F3E977 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AFA55BE60993429100F3E977 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AFA55C100993431300F3E977 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AFA55C79099349A600F3E977 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AFA55CAB09934BB200F3E977 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AFA55CCE09934CE400F3E977 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AFA55D3E0993565300F3E977 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AFA55D640993584B00F3E977 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AFA55D81099358C400F3E977 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AFA55DCA09935D7000F3E977 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AFA55DF209935E4900F3E977 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AFA55E0F09935EDC00F3E977 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AFA55E3109935F8E00F3E977 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AFA55E5009935FF900F3E977 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AFA55EC9099360E300F3E977 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AFA55F08099361B700F3E977 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AFA55F2C0993622F00F3E977 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AFA55F440993629000F3E977 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AFA55F740993643600F3E977 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AFA55FD509936BFA00F3E977 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AFA55FFB09936C6D00F3E977 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AFA5601609936CC800F3E977 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AFA5603409936D5100F3E977 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AFA5604C09936E2100F3E977 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AFA5606409936F3800F3E977 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AFA560B00993718D00F3E977 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AFA560FF0993781600F3E977 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AFA5611D0993791D00F3E977 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AFA56119099378CB00F3E977; remoteInfo = molecules.h; }; AFA5615809937C0D00F3E977 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AFA5617D09937CF100F3E977 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AFA5619F09937D7E00F3E977 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AFA562080993849F00F3E977 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AFA562210993852500F3E977 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AFA562C1099392C600F3E977 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AFA562DC099393C900F3E977 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AFA562F40993943B00F3E977 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AFA563150993951000F3E977 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AFA56333099395ED00F3E977 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AFA56353099396C000F3E977 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AFA5637B099397B300F3E977 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AFA563A6099398BB00F3E977 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AFACE8751CC83458008B24CD /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AFACE8901CC8365F008B24CD /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AFACE8731CC83458008B24CD; remoteInfo = EnergyStream; }; AFB581AF102F363300342B11 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AFD571B50996D9DC00BA26F7; remoteInfo = Juggle; }; AFB591A9178B812C00EA4005 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AFB591C2178B821E00EA4005 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AFB591A7178B812C00EA4005; remoteInfo = Hexadrop; }; AFBFE73F1786405E00432B21 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AFF2867F17860E830050A578; remoteInfo = QuasiCrystal; }; AFBFE7411786407000432B21 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF7510FF1782B5B900380EA1; remoteInfo = Kaleidocycle; }; AFBFE74D178642DC00432B21 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AFBFE7631786438900432B21 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF9D4DEC09B5BB19006E59CF; remoteInfo = Apple2; }; AFBFE76B178647FE00432B21 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AFBFE7801786482B00432B21 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF7776E409B63ABF00EA3033; remoteInfo = Phosphor; }; AFBFE784178648E600432B21 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AFBFE74B178642DC00432B21; remoteInfo = "Apple2-OSX"; }; AFBFE786178648F500432B21 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AFBFE767178647FE00432B21; remoteInfo = "Phosphor-OSX"; }; AFC0E8AD1CDC601A008CAFAC /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AFC0E8C81CDC6125008CAFAC /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AFC0E8AB1CDC601A008CAFAC; remoteInfo = Hydrostat; }; AFCAD5F80992DFE00009617A /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF9771D60989DC4A001F8B92; remoteInfo = SaverTester; }; AFCF833D1AF5B515008BB7E1 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AFCF835B1AF5B683008BB7E1 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AFCF833B1AF5B515008BB7E1; remoteInfo = SplitFlap; }; AFD51B1D0F063B4A00471C02 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AFD51B340F063B7800471C02 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AFD51B1B0F063B4A00471C02; remoteInfo = Photopile; }; AFD56DF30996A03800BA26F7 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AFD56EB00996A72600BA26F7 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AFD56EDC0996A95700BA26F7 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AFD56F0D0996AAFA00BA26F7 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AFD56F250996AB8A00BA26F7 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AFD56F510996AEEE00BA26F7 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AFD56F6D0996B01600BA26F7 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AFD56F8E0996B09400BA26F7 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AFD56FA50996B10F00BA26F7 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AFD56FBB0996B18F00BA26F7 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AFD56FD10996B20900BA26F7 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AFD56FFA0996B43800BA26F7 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AFD570110996B4CC00BA26F7 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AFD570280996B56D00BA26F7 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AFD570450996B61600BA26F7 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AFD5705B0996B6A300BA26F7 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AFD570710996B72700BA26F7 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AFD570870996B80300BA26F7 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AFD5709D0996B88E00BA26F7 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AFD570B30996B93000BA26F7 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AFD570CB0996B9F800BA26F7 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AFD570EC0996BBBF00BA26F7 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AFD571150996BE9300BA26F7 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AFD5712E0996BF2E00BA26F7 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AFD571450996C01700BA26F7 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AFD5715B0996C0CE00BA26F7 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AFD571B70996D9DC00BA26F7 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AFD572240996E4A300BA26F7 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AFD5726F0996EE8500BA26F7 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AFD572A70996F99600BA26F7 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AFD572C40996FC0F00BA26F7 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AFD572FB099701C000BA26F7 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AFD5735F0997411200BA26F7 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AFDA6590178A52B70070D24B /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AFDA65A9178A54690070D24B /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AFDA658E178A52B70070D24B; remoteInfo = "Unknown Pleasures"; }; AFE2A4580E2E904600ADB298 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AFE2A46E0E2E908E00ADB298 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AFE2A4560E2E904600ADB298; remoteInfo = SkyTentacles; }; AFE30BEA0E52B14700CCF4A5 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AFE6A1840CDD7B2E002805BF /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AFE6A19B0CDD7B7F002805BF /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AFE6A1820CDD7B2E002805BF; remoteInfo = MoebiusGears; }; AFE6A41D0CDD7FAA002805BF /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AFE6A42F0CDD7FEE002805BF /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AFE6A41B0CDD7FAA002805BF; remoteInfo = Abstractile; }; AFEC23CF1CB6EAE100DE138F /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AFEC23EA1CB6ED0800DE138F /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AFEC23CD1CB6EAE100DE138F; remoteInfo = DymaxionMap; }; AFEE104F1D13406000AAC8F7 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AFEE106A1D13424C00AAC8F7 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AFEE104D1D13406000AAC8F7; remoteInfo = CubeTwist; }; AFEE106E1D15EB0700AAC8F7 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AFEE10891D15EBF900AAC8F7 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AFEE106C1D15EB0700AAC8F7; remoteInfo = CubeStack; }; AFEE108D1D17E20B00AAC8F7 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AFEE10A81D17E32100AAC8F7 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AFEE108B1D17E20B00AAC8F7; remoteInfo = Splodesic; }; AFF2868117860E830050A578 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AFF3C9EA17CCAC440028F240 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AFF3CA0017CCAE210028F240 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AFF3C9E817CCAC440028F240; remoteInfo = Geodesic; }; AFF463380C4403E400EE6509 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AFF463520C44062500EE6509 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AFF463360C4403E400EE6509; remoteInfo = CWaves; }; AFF4635A0C440AEF00EE6509 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AFF4636E0C440B3B00EE6509 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AFF463580C440AEF00EE6509; remoteInfo = GLCells; }; AFFAB31719158CE40020F021 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; AFFAB33419158F1E0020F021 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AFFAB31519158CE40020F021; remoteInfo = ProjectivePlane; }; CE04E8CA1B9B61D00085910B /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = CE3D01511B76F4C100993C75; remoteInfo = TestX11; }; CE3D01531B76F4C100993C75 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; remoteInfo = jwxyz; }; /* End PBXContainerItemProxy section */ /* Begin PBXCopyFilesBuildPhase section */ AF1ADA191850185F00932759 /* CopyFiles */ = { isa = PBXCopyFilesBuildPhase; buildActionMask = 2147483647; dstPath = ""; dstSubfolderSpec = 10; files = ( AF1ADA1A1850186B00932759 /* Sparkle.framework in CopyFiles */, ); runOnlyForDeploymentPostprocessing = 0; }; AF9E7EBD190F4C1B00A8B01F /* CopyFiles */ = { isa = PBXCopyFilesBuildPhase; buildActionMask = 2147483647; dstPath = /usr/share/man/man1/; dstSubfolderSpec = 0; files = ( ); runOnlyForDeploymentPostprocessing = 1; }; /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ 089C165DFE840E0CC02AAC07 /* InfoPlist.strings */ = {isa = PBXFileReference; fileEncoding = 10; lastKnownFileType = text.plist.strings; name = InfoPlist.strings; path = English.lproj/InfoPlist.strings; sourceTree = ""; }; 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Cocoa.framework; path = /System/Library/Frameworks/Cocoa.framework; sourceTree = ""; }; 29B97316FDCFA39411CA2CEA /* main.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = ""; }; 32CA4F630368D1EE00C91783 /* xscreensaver_Prefix.pch */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = xscreensaver_Prefix.pch; sourceTree = ""; }; 550FB5FD1AD64424001A4FA5 /* Media-iOS.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = "Media-iOS.xcassets"; sourceTree = ""; }; 55EDCB3C1AD498A800251909 /* LaunchScreen.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = LaunchScreen.xib; sourceTree = ""; }; 8D1107310486CEB800E47090 /* XScreenSaver.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = XScreenSaver.plist; sourceTree = ""; }; AF01294C157D31DD00C396E1 /* iSaverRunner.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = iSaverRunner.plist; sourceTree = SOURCE_ROOT; }; AF0839A209930B6B00277BE9 /* Atlantis.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Atlantis.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AF0839A909930C4900277BE9 /* atlantis.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = atlantis.c; path = hacks/glx/atlantis.c; sourceTree = ""; }; AF0839AA09930C4900277BE9 /* dolphin.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = dolphin.c; path = hacks/glx/dolphin.c; sourceTree = ""; }; AF0839AB09930C4900277BE9 /* shark.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = shark.c; path = hacks/glx/shark.c; sourceTree = ""; }; AF0839AC09930C4900277BE9 /* swim.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = swim.c; path = hacks/glx/swim.c; sourceTree = ""; }; AF0839AD09930C4900277BE9 /* whale.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = whale.c; path = hacks/glx/whale.c; sourceTree = ""; }; AF0839AE09930C4900277BE9 /* xpm-ximage.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = "xpm-ximage.c"; path = "hacks/glx/xpm-ximage.c"; sourceTree = ""; }; AF0839AF09930C4900277BE9 /* xpm-ximage.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = "xpm-ximage.h"; path = "hacks/glx/xpm-ximage.h"; sourceTree = ""; }; AF083A31099311CE00277BE9 /* atunnel.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = atunnel.c; path = hacks/glx/atunnel.c; sourceTree = ""; }; AF083A48099311D700277BE9 /* Atunnel.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Atunnel.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AF083A58099312B000277BE9 /* tunnel_draw.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = tunnel_draw.c; path = hacks/glx/tunnel_draw.c; sourceTree = ""; }; AF083A5D099312DB00277BE9 /* tunnel_draw.h */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.h; name = tunnel_draw.h; path = hacks/glx/tunnel_draw.h; sourceTree = ""; }; AF0DC7BD0C4C73F600D76972 /* m6502.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = m6502.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AF0DCA320C4C74A200D76972 /* asm6502.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = asm6502.c; path = hacks/asm6502.c; sourceTree = ""; }; AF0DCA330C4C74A200D76972 /* asm6502.h */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.h; name = asm6502.h; path = hacks/asm6502.h; sourceTree = ""; }; AF0DCA340C4C74A200D76972 /* m6502.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = m6502.c; path = hacks/m6502.c; sourceTree = ""; }; AF0DCA370C4C74B700D76972 /* m6502.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = m6502.xml; sourceTree = ""; }; AF0DCA560C4CBB0D00D76972 /* Voronoi.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Voronoi.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AF0DCA5F0C4CBB7300D76972 /* voronoi.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = voronoi.c; path = hacks/glx/voronoi.c; sourceTree = ""; }; AF0DCA610C4CBB8E00D76972 /* voronoi.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = voronoi.xml; sourceTree = ""; }; 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; path = XScreenSaver.icns; sourceTree = ""; }; AF1A17730D6D6EE3008AF328 /* LCDscrub.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; 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 = ""; }; AF1A17800D6D6F62008AF328 /* lcdscrub.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = lcdscrub.xml; sourceTree = ""; }; AF1AD9E218500F9F00932759 /* XScreenSaverUpdater.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = XScreenSaverUpdater.app; sourceTree = BUILT_PRODUCTS_DIR; }; AF1AD9E518500F9F00932759 /* AppKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AppKit.framework; path = System/Library/Frameworks/AppKit.framework; sourceTree = SDKROOT; }; AF1AD9E618500FA000932759 /* CoreData.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreData.framework; path = System/Library/Frameworks/CoreData.framework; sourceTree = SDKROOT; }; AF1AD9E718500FA000932759 /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = System/Library/Frameworks/Foundation.framework; sourceTree = SDKROOT; }; AF1ADA0118500FA100932759 /* XCTest.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = XCTest.framework; path = Library/Frameworks/XCTest.framework; sourceTree = DEVELOPER_DIR; }; AF1ADA151850157400932759 /* Updater.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = Updater.xib; sourceTree = SOURCE_ROOT; }; AF1ADA171850180E00932759 /* Sparkle.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; path = Sparkle.framework; sourceTree = ""; }; AF1B0FBC1D7AB4740011DBE4 /* Hexstrut.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Hexstrut.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AF1B0FBE1D7AB5210011DBE4 /* hexstrut.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = hexstrut.c; path = hacks/glx/hexstrut.c; sourceTree = ""; }; AF1B0FBF1D7AB5210011DBE4 /* hexstrut.xml */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; path = hexstrut.xml; sourceTree = ""; }; AF241F81107C38DF00046A84 /* dropshadow.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = dropshadow.c; path = hacks/glx/dropshadow.c; sourceTree = ""; }; AF241F82107C38DF00046A84 /* dropshadow.h */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.h; name = dropshadow.h; path = hacks/glx/dropshadow.h; sourceTree = ""; }; AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = QuartzCore.framework; path = System/Library/Frameworks/QuartzCore.framework; sourceTree = SDKROOT; }; AF2D522513E954A0002AA818 /* SaverRunner.icns */ = {isa = PBXFileReference; lastKnownFileType = image.icns; path = SaverRunner.icns; sourceTree = ""; }; AF2D8F301CEBA10300198014 /* jwxyz-timers.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = "jwxyz-timers.c"; path = "../jwxyz/jwxyz-timers.c"; sourceTree = ""; }; AF2D8F311CEBA10300198014 /* jwxyz-timers.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = "jwxyz-timers.h"; path = "../jwxyz/jwxyz-timers.h"; sourceTree = ""; }; AF32D9F40F3AD0B40080F535 /* RubikBlocks.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RubikBlocks.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AF32D9FA0F3AD1200080F535 /* rubikblocks.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = rubikblocks.c; path = hacks/glx/rubikblocks.c; sourceTree = ""; }; AF32D9FC0F3AD1330080F535 /* rubikblocks.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = rubikblocks.xml; sourceTree = ""; }; AF34085409B80AAF00F2CEC1 /* StarWars.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = StarWars.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AF34085509B80AB000F2CEC1 /* StonerView.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = StonerView.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AF34085609B80AB000F2CEC1 /* Gleidescope.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Gleidescope.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AF34085709B80AB000F2CEC1 /* FontGlide.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = FontGlide.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AF3581D51431D47B00E09C51 /* CompanionCube.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = CompanionCube.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AF3581D61431D5FC00E09C51 /* companion_disc.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = companion_disc.c; path = hacks/glx/companion_disc.c; sourceTree = ""; }; AF3581D71431D5FC00E09C51 /* companion_heart.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = companion_heart.c; path = hacks/glx/companion_heart.c; sourceTree = ""; }; AF3581D81431D5FC00E09C51 /* companion_quad.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = companion_quad.c; path = hacks/glx/companion_quad.c; sourceTree = ""; }; AF3581D91431D5FC00E09C51 /* companion.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = companion.c; path = hacks/glx/companion.c; sourceTree = ""; }; AF3581E61431D61D00E09C51 /* companioncube.xml */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; path = companioncube.xml; sourceTree = ""; }; AF358216143330F900E09C51 /* TronBit.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = TronBit.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AF3582171433314C00E09C51 /* tronbit_idle1.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = tronbit_idle1.c; path = hacks/glx/tronbit_idle1.c; sourceTree = ""; }; AF3582181433314C00E09C51 /* tronbit_idle2.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = tronbit_idle2.c; path = hacks/glx/tronbit_idle2.c; sourceTree = ""; }; AF3582191433314C00E09C51 /* tronbit_no.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = tronbit_no.c; path = hacks/glx/tronbit_no.c; sourceTree = ""; }; AF35821A1433314C00E09C51 /* tronbit_yes.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = tronbit_yes.c; path = hacks/glx/tronbit_yes.c; sourceTree = ""; }; AF35821B1433314C00E09C51 /* tronbit.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = tronbit.c; path = hacks/glx/tronbit.c; sourceTree = ""; }; AF3582211433318500E09C51 /* tronbit.xml */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; path = tronbit.xml; sourceTree = ""; }; AF35E8A00E63823600691F2F /* Jigsaw.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Jigsaw.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AF35EB250E6382BA00691F2F /* jigsaw.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = jigsaw.c; path = hacks/glx/jigsaw.c; sourceTree = ""; }; AF3633F918530DD90086A439 /* sparkle_dsa_pub.pem */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = sparkle_dsa_pub.pem; sourceTree = ""; }; AF3633FA18530DD90086A439 /* Updater.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Updater.h; sourceTree = ""; }; AF3633FB18530DD90086A439 /* Updater.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = Updater.m; sourceTree = ""; }; AF3633FE18530DFF0086A439 /* Updater.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = Updater.plist; sourceTree = ""; }; AF39382F1D0FBD6A00205406 /* Discoball.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Discoball.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AF3938311D0FBEC800205406 /* discoball.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = discoball.c; path = hacks/glx/discoball.c; sourceTree = ""; }; AF3938321D0FBEC800205406 /* discoball.xml */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; path = discoball.xml; sourceTree = ""; }; AF39E296198A11F60064A58D /* WindupRobot.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = WindupRobot.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AF39E2A0198A13F50064A58D /* robot-wireframe.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = "robot-wireframe.c"; path = "hacks/glx/robot-wireframe.c"; sourceTree = ""; }; AF39E2A1198A13F50064A58D /* winduprobot.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = winduprobot.c; path = hacks/glx/winduprobot.c; sourceTree = ""; }; AF39E2AC198A15820064A58D /* winduprobot.xml */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; path = winduprobot.xml; sourceTree = ""; }; AF3C71590D624BF50030CC0D /* Hypnowheel.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Hypnowheel.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AF3C715D0D624C600030CC0D /* hypnowheel.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = hypnowheel.c; path = hacks/glx/hypnowheel.c; sourceTree = ""; }; AF3C715F0D624C7C0030CC0D /* hypnowheel.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = hypnowheel.xml; sourceTree = ""; }; AF46E9E41CBBA2B300240FBC /* Unicrud.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Unicrud.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AF46E9E61CBBA3F900240FBC /* unicrud.xml */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; path = unicrud.xml; sourceTree = ""; }; AF46E9E71CBBA3F900240FBC /* unicrud.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = unicrud.c; path = hacks/glx/unicrud.c; sourceTree = ""; }; AF476FC6099D154F001F091E /* Interference.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Interference.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AF476FD0099D15AA001F091E /* interference.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = interference.c; path = hacks/interference.c; sourceTree = ""; }; AF476FEB099D1686001F091E /* Truchet.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Truchet.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AF476FF0099D1713001F091E /* truchet.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = truchet.c; path = hacks/truchet.c; sourceTree = ""; }; AF47705C099D4385001F091E /* Deluxe.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Deluxe.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AF477145099D43E2001F091E /* deluxe.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = deluxe.c; path = hacks/deluxe.c; sourceTree = ""; }; AF477179099D4786001F091E /* Compass.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Compass.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AF47717C099D47D3001F091E /* compass.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = compass.c; path = hacks/compass.c; sourceTree = ""; }; AF47718F099D4803001F091E /* Wander.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Wander.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AF477192099D4864001F091E /* wander.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = wander.c; path = hacks/wander.c; sourceTree = ""; }; AF4771B7099D4949001F091E /* T3D.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = T3D.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AF4771BA099D4997001F091E /* t3d.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = t3d.c; path = hacks/t3d.c; sourceTree = ""; }; AF4771EB099D4D9A001F091E /* CCurve.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = CCurve.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AF4771EF099D4DFE001F091E /* ccurve.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = ccurve.c; path = hacks/ccurve.c; sourceTree = ""; }; AF477202099D4E64001F091E /* NerveRot.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = NerveRot.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AF477205099D4EB6001F091E /* nerverot.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = nerverot.c; path = hacks/nerverot.c; sourceTree = ""; }; AF477218099D4EE8001F091E /* Whirlygig.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Whirlygig.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AF47721B099D4F47001F091E /* whirlygig.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = whirlygig.c; path = hacks/whirlygig.c; sourceTree = ""; }; AF47722E099D4F67001F091E /* Anemone.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Anemone.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AF477231099D4FD5001F091E /* anemone.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = anemone.c; path = hacks/anemone.c; sourceTree = ""; }; AF477263099D5717001F091E /* Halftone.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Halftone.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AF477266099D5768001F091E /* halftone.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = halftone.c; path = hacks/halftone.c; sourceTree = ""; }; AF47727B099D57B9001F091E /* PopSquares.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = PopSquares.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AF47727E099D5808001F091E /* popsquares.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = popsquares.c; path = hacks/popsquares.c; sourceTree = ""; }; AF477293099D5926001F091E /* Piecewise.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Piecewise.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AF477297099D5980001F091E /* piecewise.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = piecewise.c; path = hacks/piecewise.c; sourceTree = ""; }; AF477392099D65A1001F091E /* Wormhole.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Wormhole.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AF477395099D65FE001F091E /* wormhole.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = wormhole.c; path = hacks/wormhole.c; sourceTree = ""; }; AF4773AA099D6648001F091E /* FuzzyFlakes.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = FuzzyFlakes.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AF4773B4099D6778001F091E /* fuzzyflakes.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = fuzzyflakes.c; path = hacks/fuzzyflakes.c; sourceTree = ""; }; AF4773D1099D67B9001F091E /* Anemotaxis.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Anemotaxis.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AF4773D4099D6817001F091E /* anemotaxis.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = anemotaxis.c; path = hacks/anemotaxis.c; sourceTree = ""; }; AF477412099D69E7001F091E /* Intermomentary.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Intermomentary.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AF47741C099D6A6C001F091E /* intermomentary.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = intermomentary.c; path = hacks/intermomentary.c; sourceTree = ""; }; AF477437099D7C70001F091E /* IFS.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = IFS.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AF47743A099D7CEA001F091E /* ifs.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = ifs.c; path = hacks/ifs.c; sourceTree = ""; }; AF477452099D7D33001F091E /* XMatrix.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = XMatrix.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AF477455099D7D8A001F091E /* xmatrix.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = xmatrix.c; path = hacks/xmatrix.c; sourceTree = ""; }; AF477493099D89E4001F091E /* Flame.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Flame.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AF477496099D8A53001F091E /* flame.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = flame.c; path = hacks/flame.c; sourceTree = ""; }; AF4774A9099D8A74001F091E /* Kaleidescope.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Kaleidescope.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AF4774AC099D8B08001F091E /* kaleidescope.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = kaleidescope.c; path = hacks/kaleidescope.c; sourceTree = ""; }; AF4774C4099D8B5F001F091E /* LMorph.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = LMorph.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AF4774CB099D8BC2001F091E /* lmorph.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = lmorph.c; path = hacks/lmorph.c; sourceTree = ""; }; AF4774DE099D8BFF001F091E /* Maze.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Maze.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AF4774E1099D8C8B001F091E /* maze.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = maze.c; path = hacks/maze.c; sourceTree = ""; }; AF4774E7099D8D8C001F091E /* logo.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = logo.c; path = utils/logo.c; sourceTree = ""; }; AF47756D099D9A1A001F091E /* Pedal.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Pedal.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AF477570099D9A8A001F091E /* pedal.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = pedal.c; path = hacks/pedal.c; sourceTree = ""; }; AF477593099D9C28001F091E /* Pyro.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Pyro.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AF47759C099D9CA3001F091E /* pyro.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = pyro.c; path = hacks/pyro.c; sourceTree = ""; }; AF4775AF099D9CF7001F091E /* Starfish.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Starfish.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AF4775B3099D9D67001F091E /* starfish.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = starfish.c; path = hacks/starfish.c; sourceTree = ""; }; AF4775BE099D9E79001F091E /* resources.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = resources.c; path = utils/resources.c; sourceTree = ""; }; AF4775BF099D9E79001F091E /* resources.h */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.h; name = resources.h; path = utils/resources.h; sourceTree = ""; }; AF4775E8099D9F69001F091E /* Coral.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Coral.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AF4775EF099D9FFF001F091E /* coral.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = coral.c; path = hacks/coral.c; sourceTree = ""; }; AF477602099DA030001F091E /* Epicycle.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Epicycle.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AF477605099DA097001F091E /* epicycle.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = epicycle.c; path = hacks/epicycle.c; sourceTree = ""; }; AF477623099DA26C001F091E /* Kumppa.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Kumppa.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AF47762A099DA2E9001F091E /* kumppa.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = kumppa.c; path = hacks/kumppa.c; sourceTree = ""; }; AF477654099DA6D0001F091E /* Squiral.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Squiral.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AF477657099DA75D001F091E /* squiral.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = squiral.c; path = hacks/squiral.c; sourceTree = ""; }; AF47766A099DA78F001F091E /* Critical.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Critical.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AF47766D099DA80D001F091E /* critical.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = critical.c; path = hacks/critical.c; sourceTree = ""; }; AF477680099DA849001F091E /* Petri.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Petri.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AF477683099DA8C7001F091E /* petri.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = petri.c; path = hacks/petri.c; sourceTree = ""; }; AF47769F099DAA6F001F091E /* Blaster.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Blaster.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AF4776A2099DAADE001F091E /* blaster.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = blaster.c; path = hacks/blaster.c; sourceTree = ""; }; AF4776BA099DABDD001F091E /* XSpirograph.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = XSpirograph.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AF4776BD099DAC46001F091E /* xspirograph.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = xspirograph.c; path = hacks/xspirograph.c; sourceTree = ""; }; AF4776D0099DAC8A001F091E /* XRaySwarm.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = XRaySwarm.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AF4776D3099DACEB001F091E /* xrayswarm.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = xrayswarm.c; path = hacks/xrayswarm.c; sourceTree = ""; }; AF4776EB099DADDF001F091E /* WhirlWindWarp.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = WhirlWindWarp.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AF4776EE099DAE58001F091E /* whirlwindwarp.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = whirlwindwarp.c; path = hacks/whirlwindwarp.c; sourceTree = ""; }; AF477701099DAE7A001F091E /* Vermiculate.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Vermiculate.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AF477704099DAF3F001F091E /* vermiculate.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = vermiculate.c; path = hacks/vermiculate.c; sourceTree = ""; }; AF47771D099DAF9F001F091E /* CloudLife.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = CloudLife.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AF477720099DB01C001F091E /* cloudlife.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = cloudlife.c; path = hacks/cloudlife.c; sourceTree = ""; }; AF477733099DB044001F091E /* Substrate.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Substrate.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AF477736099DB104001F091E /* substrate.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = substrate.c; path = hacks/substrate.c; sourceTree = ""; }; AF477762099DB61E001F091E /* Interaggregate.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Interaggregate.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AF477769099DB710001F091E /* interaggregate.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = interaggregate.c; path = hacks/interaggregate.c; sourceTree = ""; }; AF477784099DB965001F091E /* Celtic.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Celtic.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AF477787099DBA29001F091E /* celtic.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = celtic.c; path = hacks/celtic.c; sourceTree = ""; }; AF4777A0099DBA90001F091E /* FluidBalls.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = FluidBalls.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AF4777A4099DBB11001F091E /* fluidballs.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = fluidballs.c; path = hacks/fluidballs.c; sourceTree = ""; }; AF4777E1099DC183001F091E /* BoxFit.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = BoxFit.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AF4778A3099DDA91001F091E /* boxfit.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = boxfit.c; path = hacks/boxfit.c; sourceTree = ""; }; AF4778BB099DDB79001F091E /* Penetrate.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Penetrate.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AF4778BE099DDC32001F091E /* penetrate.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = penetrate.c; path = hacks/penetrate.c; sourceTree = ""; }; AF4778D7099DDCAE001F091E /* XJack.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = XJack.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AF4778DA099DDD2B001F091E /* xjack.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = xjack.c; path = hacks/xjack.c; sourceTree = ""; }; AF4778F8099DDDC8001F091E /* Cynosure.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Cynosure.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AF4778FB099DDE79001F091E /* cynosure.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = cynosure.c; path = hacks/cynosure.c; sourceTree = ""; }; AF477919099DE379001F091E /* Flag.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Flag.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AF47791C099DE3F1001F091E /* flag.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = flag.c; path = hacks/flag.c; sourceTree = ""; }; AF47793A099DE4C7001F091E /* Slip.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Slip.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AF47793D099DE56A001F091E /* slip.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = slip.c; path = hacks/slip.c; sourceTree = ""; }; AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libjwxyz.a; sourceTree = BUILT_PRODUCTS_DIR; }; AF480C21098E28EF00FB32B8 /* greynetic.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = greynetic.c; path = hacks/greynetic.c; sourceTree = ""; }; AF480C29098E295D00FB32B8 /* halo.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = halo.c; path = hacks/halo.c; sourceTree = ""; }; AF480C2F098E2A6700FB32B8 /* helix.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = helix.c; path = hacks/helix.c; sourceTree = ""; }; AF480C58098E301400FB32B8 /* Helix.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Helix.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AF480C82098E336D00FB32B8 /* drift.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = drift.c; path = hacks/drift.c; sourceTree = ""; }; AF480C89098E346700FB32B8 /* xlockmore.h */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.h; name = xlockmore.h; path = hacks/xlockmore.h; sourceTree = ""; }; AF480C8A098E34AB00FB32B8 /* xlockmoreI.h */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.h; name = xlockmoreI.h; path = hacks/xlockmoreI.h; sourceTree = ""; }; AF480CBB098E37D600FB32B8 /* xlockmore.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = xlockmore.c; path = hacks/xlockmore.c; sourceTree = ""; }; AF480D81098EEDDE00FB32B8 /* Drift.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Drift.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AF480DD1098F4F6200FB32B8 /* dangerball.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = dangerball.c; path = hacks/glx/dangerball.c; sourceTree = ""; }; AF480DF1098F528500FB32B8 /* OpenGL.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = OpenGL.framework; path = /System/Library/Frameworks/OpenGL.framework; sourceTree = ""; }; AF480EAC098F63B000FB32B8 /* rotator.h */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.h; name = rotator.h; path = hacks/glx/rotator.h; sourceTree = ""; }; AF480EAD098F63BE00FB32B8 /* trackball.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = trackball.c; path = hacks/glx/trackball.c; sourceTree = ""; }; AF480EAF098F63CD00FB32B8 /* trackball.h */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.h; name = trackball.h; path = hacks/glx/trackball.h; sourceTree = ""; }; AF480EB0098F63D600FB32B8 /* gltrackball.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = gltrackball.c; path = hacks/glx/gltrackball.c; sourceTree = ""; }; AF480EB2098F63DF00FB32B8 /* gltrackball.h */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.h; name = gltrackball.h; path = hacks/glx/gltrackball.h; sourceTree = ""; }; AF480EB7098F646400FB32B8 /* rotator.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = rotator.c; path = hacks/glx/rotator.c; sourceTree = ""; }; AF480EBA098F648700FB32B8 /* sphere.h */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.h; name = sphere.h; path = hacks/glx/sphere.h; sourceTree = ""; }; AF480EBB098F649600FB32B8 /* sphere.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = sphere.c; path = hacks/glx/sphere.c; sourceTree = ""; }; AF480ED1098F651C00FB32B8 /* tube.h */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.h; name = tube.h; path = hacks/glx/tube.h; sourceTree = ""; }; AF480ED2098F652A00FB32B8 /* tube.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = tube.c; path = hacks/glx/tube.c; sourceTree = ""; }; AF480FE70990375900FB32B8 /* AGL.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AGL.framework; path = /System/Library/Frameworks/AGL.framework; sourceTree = ""; }; AF4810FB09909FBA00FB32B8 /* DangerBall.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = DangerBall.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AF48112B0990A2C700FB32B8 /* Carbon.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Carbon.framework; path = /System/Library/Frameworks/Carbon.framework; sourceTree = ""; }; AF4812250990CB8C00FB32B8 /* gears.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = gears.c; path = hacks/glx/gears.c; sourceTree = ""; }; AF4812640990CE2700FB32B8 /* Gears.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Gears.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AF4812760990CF5D00FB32B8 /* buildlwo.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = buildlwo.c; path = hacks/glx/buildlwo.c; sourceTree = ""; }; AF4812770990CF5D00FB32B8 /* buildlwo.h */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.h; name = buildlwo.h; path = hacks/glx/buildlwo.h; sourceTree = ""; }; AF4812780990CF5D00FB32B8 /* pipeobjs.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = pipeobjs.c; path = hacks/glx/pipeobjs.c; sourceTree = ""; }; AF4812790990CF5D00FB32B8 /* pipes.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = pipes.c; path = hacks/glx/pipes.c; sourceTree = ""; }; AF4812C60990D3D900FB32B8 /* Pipes.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Pipes.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AF4812F70990D9AE00FB32B8 /* XScreenSaverGLView.h */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.h; path = XScreenSaverGLView.h; sourceTree = ""; }; AF4812F80990D9AE00FB32B8 /* XScreenSaverGLView.m */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.objc; path = XScreenSaverGLView.m; sourceTree = ""; }; AF48DF030A0C25E000F94CF9 /* GLSchool.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = GLSchool.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AF48E1620A0C268400F94CF9 /* glschool_alg.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = glschool_alg.c; path = hacks/glx/glschool_alg.c; sourceTree = ""; }; AF48E1630A0C268500F94CF9 /* glschool_alg.h */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.h; name = glschool_alg.h; path = hacks/glx/glschool_alg.h; sourceTree = ""; }; AF48E1640A0C268500F94CF9 /* glschool_gl.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = glschool_gl.c; path = hacks/glx/glschool_gl.c; sourceTree = ""; }; AF48E1650A0C268500F94CF9 /* glschool_gl.h */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.h; name = glschool_gl.h; path = hacks/glx/glschool_gl.h; sourceTree = ""; }; AF48E1660A0C268500F94CF9 /* glschool.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = glschool.c; path = hacks/glx/glschool.c; sourceTree = ""; }; AF48E1670A0C268500F94CF9 /* glschool.h */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.h; name = glschool.h; path = hacks/glx/glschool.h; sourceTree = ""; }; AF48E16B0A0C26A400F94CF9 /* glschool.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = glschool.xml; sourceTree = ""; }; AF4A345D102A593600A81B2A /* Surfaces.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Surfaces.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AF4A3461102A59EB00A81B2A /* surfaces.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = surfaces.xml; sourceTree = ""; }; AF4A3463102A5A0E00A81B2A /* surfaces.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = surfaces.c; path = hacks/glx/surfaces.c; sourceTree = ""; }; AF4FD6FA0CE7A486005EE58E /* Lockward.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Lockward.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AF4FD7000CE7A577005EE58E /* lockward.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = lockward.c; path = hacks/glx/lockward.c; sourceTree = ""; }; AF4FD7020CE7A5BC005EE58E /* lockward.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = lockward.xml; sourceTree = ""; }; AF4FF4CE0D52CBDE00666F98 /* CubicGrid.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = CubicGrid.saver; sourceTree = BUILT_PRODUCTS_DIR; }; 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; path = 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 /* grabclient-ios.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "grabclient-ios.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; }; AF5C9B0D1A0CCE6E00B0147A /* Cityflow.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Cityflow.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AF5C9B0F1A0CCF4E00B0147A /* cityflow.xml */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; path = cityflow.xml; sourceTree = ""; }; AF5C9B101A0CCF4E00B0147A /* cityflow.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = cityflow.c; path = hacks/glx/cityflow.c; sourceTree = ""; }; AF6048F8157C07C600CA21E4 /* jwzgles.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = jwzgles.c; path = ../jwxyz/jwzgles.c; sourceTree = ""; }; AF6048F9157C07C600CA21E4 /* jwzgles.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = jwzgles.h; path = ../jwxyz/jwzgles.h; sourceTree = ""; }; AF6048FA157C07C600CA21E4 /* jwzglesI.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = jwzglesI.h; path = ../jwxyz/jwzglesI.h; sourceTree = ""; }; AF63A8061AB4EDDB00593C75 /* RomanBoy.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RomanBoy.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AF63A8081AB4EF5D00593C75 /* romanboy.xml */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; path = romanboy.xml; sourceTree = ""; }; AF63A8091AB4EF5D00593C75 /* romanboy.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = romanboy.c; path = hacks/glx/romanboy.c; sourceTree = ""; }; AF63F44E1C3465BE0033E133 /* Apple2.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Apple2.app; sourceTree = BUILT_PRODUCTS_DIR; }; AF63F4741C34682A0033E133 /* Phosphor.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Phosphor.app; sourceTree = BUILT_PRODUCTS_DIR; }; AF63F49A1C3469FC0033E133 /* TestX11.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = TestX11.app; sourceTree = BUILT_PRODUCTS_DIR; }; AF642405099FF9C2000F4CD4 /* Extrusion.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Extrusion.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AF642409099FFAF0000F4CD4 /* extrusion-helix2.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = "extrusion-helix2.c"; path = "hacks/glx/extrusion-helix2.c"; sourceTree = ""; }; AF64240A099FFAF0000F4CD4 /* extrusion-helix3.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = "extrusion-helix3.c"; path = "hacks/glx/extrusion-helix3.c"; sourceTree = ""; }; AF64240B099FFAF0000F4CD4 /* extrusion-helix4.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = "extrusion-helix4.c"; path = "hacks/glx/extrusion-helix4.c"; sourceTree = ""; }; AF64240C099FFAF0000F4CD4 /* extrusion-joinoffset.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = "extrusion-joinoffset.c"; path = "hacks/glx/extrusion-joinoffset.c"; sourceTree = ""; }; AF64240D099FFAF0000F4CD4 /* extrusion-screw.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = "extrusion-screw.c"; path = "hacks/glx/extrusion-screw.c"; sourceTree = ""; }; AF64240E099FFAF0000F4CD4 /* extrusion-taper.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = "extrusion-taper.c"; path = "hacks/glx/extrusion-taper.c"; sourceTree = ""; }; AF64240F099FFAF1000F4CD4 /* extrusion-twistoid.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = "extrusion-twistoid.c"; path = "hacks/glx/extrusion-twistoid.c"; sourceTree = ""; }; AF642410099FFAF1000F4CD4 /* extrusion.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = extrusion.c; path = hacks/glx/extrusion.c; sourceTree = ""; }; AF642411099FFAF1000F4CD4 /* extrusion.h */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.h; name = extrusion.h; path = hacks/glx/extrusion.h; sourceTree = ""; }; AF6425DC09A18856000F4CD4 /* HyperCube.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = HyperCube.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AF6425DF09A188FB000F4CD4 /* hypercube.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = hypercube.c; path = hacks/hypercube.c; sourceTree = ""; }; AF6425FC09A189EC000F4CD4 /* Qix.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Qix.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AF6425FF09A18A94000F4CD4 /* qix.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = qix.c; path = hacks/qix.c; sourceTree = ""; }; AF64261F09A18D6C000F4CD4 /* HyperBall.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = HyperBall.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AF64262209A18E1E000F4CD4 /* hyperball.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = hyperball.c; path = hacks/hyperball.c; sourceTree = ""; }; AF64263C09A18F54000F4CD4 /* Moire2.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Moire2.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AF64263F09A18FEB000F4CD4 /* moire2.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = moire2.c; path = hacks/moire2.c; sourceTree = ""; }; AF64265F09A19229000F4CD4 /* Munch.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Munch.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AF64266209A192C5000F4CD4 /* munch.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = munch.c; path = hacks/munch.c; sourceTree = ""; }; AF64268B09A194B0000F4CD4 /* Goop.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Goop.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AF64268E09A19542000F4CD4 /* goop.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = goop.c; path = hacks/goop.c; sourceTree = ""; }; AF64278109A1D37A000F4CD4 /* SpeedMine.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = SpeedMine.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AF64278709A1D433000F4CD4 /* speedmine.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = speedmine.c; path = hacks/speedmine.c; sourceTree = ""; }; AF6427B809A2DE36000F4CD4 /* Bubbles.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Bubbles.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AF6427BB09A2DF47000F4CD4 /* bubbles-default.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = "bubbles-default.c"; path = "hacks/bubbles-default.c"; sourceTree = ""; }; AF6427BC09A2DF47000F4CD4 /* bubbles.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = bubbles.c; path = hacks/bubbles.c; sourceTree = ""; }; AF6427BD09A2DF47000F4CD4 /* bubbles.h */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.h; name = bubbles.h; path = hacks/bubbles.h; sourceTree = ""; }; AF68A49219196CF800D41CD1 /* Tessellimage.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Tessellimage.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AF68A49419196E3E00D41CD1 /* tessellimage.xml */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; path = tessellimage.xml; sourceTree = ""; }; AF68A49519196E3E00D41CD1 /* tessellimage.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = tessellimage.c; path = hacks/tessellimage.c; sourceTree = ""; }; AF68A49619196E3E00D41CD1 /* delaunay.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = delaunay.c; path = hacks/delaunay.c; sourceTree = ""; }; AF73FF201A08AB9400E485E9 /* iSaverRunner57t.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = iSaverRunner57t.png; sourceTree = ""; }; AF73FF361A09877F00E485E9 /* BinaryRing.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = BinaryRing.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AF73FF381A09889700E485E9 /* binaryring.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = binaryring.c; path = hacks/binaryring.c; sourceTree = ""; }; AF73FF3B1A0988C500E485E9 /* binaryring.xml */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; path = binaryring.xml; sourceTree = ""; }; AF7511121782B5B900380EA1 /* Kaleidocycle.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Kaleidocycle.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AF7511141782B64300380EA1 /* kaleidocycle.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = kaleidocycle.c; path = hacks/glx/kaleidocycle.c; sourceTree = ""; }; AF7511161782B66400380EA1 /* kaleidescope.xml */ = {isa = PBXFileReference; lastKnownFileType = text.xml; path = kaleidescope.xml; sourceTree = ""; }; AF7776F609B63ABF00EA3033 /* Phosphor.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Phosphor.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AF77770309B63B5F00EA3033 /* phosphor.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = phosphor.c; path = hacks/phosphor.c; sourceTree = ""; }; AF77772A09B6416100EA3033 /* Pacman.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Pacman.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AF77775109B6446500EA3033 /* FlipScreen3D.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = FlipScreen3D.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AF77775409B644FF00EA3033 /* flipscreen3d.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = flipscreen3d.c; path = hacks/glx/flipscreen3d.c; sourceTree = ""; }; AF77778B09B64A2A00EA3033 /* gleidescope.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = gleidescope.c; path = hacks/glx/gleidescope.c; sourceTree = ""; }; AF7777A209B64A5200EA3033 /* MirrorBlob.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = MirrorBlob.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AF7777A509B64AFC00EA3033 /* mirrorblob.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = mirrorblob.c; path = hacks/glx/mirrorblob.c; sourceTree = ""; }; AF7777BF09B64BD400EA3033 /* stonerview-move.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = "stonerview-move.c"; path = "hacks/glx/stonerview-move.c"; sourceTree = ""; }; AF7777C009B64BD400EA3033 /* stonerview-move.h */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.h; name = "stonerview-move.h"; path = "hacks/glx/stonerview-move.h"; sourceTree = ""; }; AF7777C109B64BD400EA3033 /* stonerview-osc.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = "stonerview-osc.c"; path = "hacks/glx/stonerview-osc.c"; sourceTree = ""; }; AF7777C209B64BD400EA3033 /* stonerview-osc.h */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.h; name = "stonerview-osc.h"; path = "hacks/glx/stonerview-osc.h"; sourceTree = ""; }; AF7777C309B64BD400EA3033 /* stonerview-view.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = "stonerview-view.c"; path = "hacks/glx/stonerview-view.c"; sourceTree = ""; }; AF7777C409B64BD400EA3033 /* stonerview.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = stonerview.c; path = hacks/glx/stonerview.c; sourceTree = ""; }; AF7777C509B64BD400EA3033 /* stonerview.h */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.h; name = stonerview.h; path = hacks/glx/stonerview.h; sourceTree = ""; }; AF7777E409B64C6B00EA3033 /* GLSlideshow.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = GLSlideshow.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AF7777E709B64CF700EA3033 /* glslideshow.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = glslideshow.c; path = hacks/glx/glslideshow.c; sourceTree = ""; }; AF7777FE09B64E3100EA3033 /* FlipText.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = FlipText.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AF77780109B64EC000EA3033 /* fliptext.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = fliptext.c; path = hacks/glx/fliptext.c; sourceTree = ""; }; AF77780809B64F4900EA3033 /* texfont.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = texfont.c; path = hacks/glx/texfont.c; sourceTree = ""; }; AF77780909B64F4900EA3033 /* texfont.h */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.h; name = texfont.h; path = hacks/glx/texfont.h; sourceTree = ""; }; AF77782809B650FF00EA3033 /* starwars.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = starwars.c; path = hacks/glx/starwars.c; sourceTree = ""; }; AF77782909B650FF00EA3033 /* starwars.txt */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text; name = starwars.txt; path = hacks/glx/starwars.txt; sourceTree = ""; }; AF77785809B6528100EA3033 /* Carousel.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Carousel.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AF77785E09B6530E00EA3033 /* carousel.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = carousel.c; path = hacks/glx/carousel.c; sourceTree = ""; }; AF77787409B6536000EA3033 /* DNAlogo.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = DNAlogo.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AF77787609B653DC00EA3033 /* dnalogo.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = dnalogo.c; path = hacks/glx/dnalogo.c; sourceTree = ""; }; AF77787909B6545E00EA3033 /* dnalogo.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = dnalogo.xml; sourceTree = ""; }; AF77789209B656C300EA3033 /* fontglide.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = fontglide.c; path = hacks/fontglide.c; sourceTree = ""; }; AF7778B509B659C800EA3033 /* BlitSpin.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = BlitSpin.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AF7778BA09B65A8A00EA3033 /* blitspin.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = blitspin.c; path = hacks/blitspin.c; sourceTree = ""; }; AF7778BC09B65B1800EA3033 /* automata.h */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.h; name = automata.h; path = hacks/automata.h; sourceTree = ""; }; AF7778BD09B65B3F00EA3033 /* atlantis.h */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.h; name = atlantis.h; path = hacks/glx/atlantis.h; sourceTree = ""; }; AF7778BE09B65BA300EA3033 /* molecules.sh */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.script.sh; name = molecules.sh; path = hacks/glx/molecules.sh; sourceTree = ""; }; AF7778C009B65C0F00EA3033 /* sproingies.h */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.h; name = sproingies.h; path = hacks/glx/sproingies.h; sourceTree = ""; }; AF7778C109B65C6A00EA3033 /* e_textures.h */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.h; name = e_textures.h; path = hacks/glx/e_textures.h; sourceTree = ""; }; AF78369617DB9F25003B9FC0 /* libz.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libz.dylib; path = usr/lib/libz.dylib; sourceTree = SDKROOT; }; AF78377C17DBA85D003B9FC0 /* libz.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libz.dylib; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS6.1.sdk/usr/lib/libz.dylib; sourceTree = DEVELOPER_DIR; }; AF78D189142DD8F3002AAF77 /* Hilbert.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Hilbert.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AF78D18A142DD96E002AAF77 /* hilbert.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = hilbert.c; path = hacks/glx/hilbert.c; sourceTree = ""; }; AF78D18E142DD99A002AAF77 /* hilbert.xml */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; path = hilbert.xml; sourceTree = ""; }; AF794F74099748450059A8B0 /* Demon.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Demon.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AF794F7E099748860059A8B0 /* demon.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = demon.c; path = hacks/demon.c; sourceTree = ""; }; AF794F9E09974A320059A8B0 /* Fiberlamp.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Fiberlamp.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AF794FA909974AE30059A8B0 /* fiberlamp.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = fiberlamp.c; path = hacks/fiberlamp.c; sourceTree = ""; }; AF794FDD09974FA60059A8B0 /* Loop.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Loop.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AF794FE009974FEC0059A8B0 /* loop.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = loop.c; path = hacks/loop.c; sourceTree = ""; }; AF795011099751940059A8B0 /* pacman_ai.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = pacman_ai.c; path = hacks/pacman_ai.c; sourceTree = ""; }; AF795012099751940059A8B0 /* pacman_ai.h */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.h; name = pacman_ai.h; path = hacks/pacman_ai.h; sourceTree = ""; }; AF795013099751940059A8B0 /* pacman_level.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = pacman_level.c; path = hacks/pacman_level.c; sourceTree = ""; }; AF795014099751940059A8B0 /* pacman_level.h */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.h; name = pacman_level.h; path = hacks/pacman_level.h; sourceTree = ""; }; AF795015099751940059A8B0 /* pacman.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = pacman.c; path = hacks/pacman.c; sourceTree = ""; }; AF795016099751940059A8B0 /* pacman.h */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.h; name = pacman.h; path = hacks/pacman.h; sourceTree = ""; }; AF7ACFD419FF0A9200BD752B /* GeodesicGears.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = GeodesicGears.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AF7ACFD619FF0B7A00BD752B /* geodesicgears.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = geodesicgears.c; path = hacks/glx/geodesicgears.c; sourceTree = ""; }; AF7ACFD819FF0BA600BD752B /* geodesicgears.xml */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; path = geodesicgears.xml; sourceTree = ""; }; AF84AF1E15829AF000607E4C /* SaverListController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SaverListController.m; sourceTree = ""; }; AF84FD4109B1209E00F3AB06 /* GLUT.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = GLUT.framework; path = /System/Library/Frameworks/GLUT.framework; sourceTree = ""; }; AF91898F158FC00A002B5D1E /* XScreenSaver.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = XScreenSaver.app; sourceTree = BUILT_PRODUCTS_DIR; }; AF94E7411A16E93600289B93 /* xscreensaver.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = xscreensaver.xcconfig; sourceTree = ""; }; AF97573D099C317000B05160 /* IMSMap.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = IMSMap.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AF975740099C31DD00B05160 /* imsmap.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = imsmap.c; path = hacks/imsmap.c; sourceTree = ""; }; AF975785099C374A00B05160 /* Moire.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Moire.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AF975789099C37A500B05160 /* moire.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = moire.c; path = hacks/moire.c; sourceTree = ""; }; AF9757D2099C3E6300B05160 /* RDbomb.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RDbomb.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AF9757D5099C3EB800B05160 /* rd-bomb.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = "rd-bomb.c"; path = "hacks/rd-bomb.c"; sourceTree = ""; }; AF975818099C41D500B05160 /* XFlame.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = XFlame.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AF97582F099C427500B05160 /* xflame.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = xflame.c; path = hacks/xflame.c; sourceTree = ""; }; AF975875099C475900B05160 /* ShadeBobs.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = ShadeBobs.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AF97587A099C492000B05160 /* shadebobs.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = shadebobs.c; path = hacks/shadebobs.c; sourceTree = ""; }; AF975A46099C681F00B05160 /* MetaBalls.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = MetaBalls.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AF975A49099C689F00B05160 /* metaballs.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = metaballs.c; path = hacks/metaballs.c; sourceTree = ""; }; AF975A7C099C6AB200B05160 /* Eruption.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Eruption.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AF975A83099C6B4900B05160 /* eruption.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = eruption.c; path = hacks/eruption.c; sourceTree = ""; }; AF975A96099C6BC300B05160 /* Barcode.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Barcode.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AF975A99099C6C3500B05160 /* barcode.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = barcode.c; path = hacks/barcode.c; sourceTree = ""; }; AF975AE7099C6EB100B05160 /* Fireworkx.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Fireworkx.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AF975AEE099C6F1700B05160 /* fireworkx.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = fireworkx.c; path = hacks/fireworkx.c; sourceTree = ""; }; AF975B0C099C6FE400B05160 /* MemScroller.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = MemScroller.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AF975B14099C709E00B05160 /* memscroller.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = memscroller.c; path = hacks/memscroller.c; sourceTree = ""; }; AF975C22099C8C1500B05160 /* Halo.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Halo.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AF975C4E099C8DCF00B05160 /* Greynetic.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Greynetic.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AF975C6E099C8F3F00B05160 /* NoseGuy.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = NoseGuy.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AF975C76099C8FC700B05160 /* noseguy.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = noseguy.c; path = hacks/noseguy.c; sourceTree = ""; }; AF975C91099C929800B05160 /* xpm-pixmap.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = "xpm-pixmap.c"; path = "hacks/xpm-pixmap.c"; sourceTree = ""; }; AF975C92099C929800B05160 /* xpm-pixmap.h */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.h; name = "xpm-pixmap.h"; path = "hacks/xpm-pixmap.h"; sourceTree = ""; }; AF975D63099CA0F000B05160 /* Rocks.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Rocks.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AF975D66099CA16A00B05160 /* rocks.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = rocks.c; path = hacks/rocks.c; sourceTree = ""; }; AF976DFA09896BEB001F8B92 /* attraction.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = attraction.c; path = hacks/attraction.c; sourceTree = ""; }; AF976ED30989BF59001F8B92 /* ScreenSaver.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = ScreenSaver.framework; path = /System/Library/Frameworks/ScreenSaver.framework; sourceTree = ""; }; AF976FBC0989CAA2001F8B92 /* Deco.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Deco.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AF9770400989D1E6001F8B92 /* Rorschach.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Rorschach.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AF97707D0989D2F6001F8B92 /* Attraction.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Attraction.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AF9771D70989DC4A001F8B92 /* SaverTester.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = SaverTester.app; sourceTree = BUILT_PRODUCTS_DIR; }; AF9771D90989DC4A001F8B92 /* SaverRunner.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = SaverRunner.plist; sourceTree = ""; }; AF9772E20989DFC6001F8B92 /* English */ = {isa = PBXFileReference; lastKnownFileType = wrapper.nib; name = English; path = English.lproj/SaverRunner.nib; sourceTree = ""; }; AF998EEE0A083DB30051049D /* TopBlock.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = TopBlock.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AF998EF80A083E750051049D /* topblock.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = topblock.c; path = hacks/glx/topblock.c; sourceTree = ""; }; AF998EFA0A083E8C0051049D /* topblock.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = topblock.xml; sourceTree = ""; }; AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */ = {isa = PBXFileReference; fileEncoding = 5; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = XScreenSaverSubclass.m; sourceTree = ""; }; AF9D467609B5109C006E59CF /* DecayScreen.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = DecayScreen.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AF9D467809B5110B006E59CF /* decayscreen.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = decayscreen.c; path = hacks/decayscreen.c; sourceTree = ""; }; AF9D468E09B51567006E59CF /* grabclient-osx.m */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.objc; path = "grabclient-osx.m"; sourceTree = ""; }; AF9D473609B52EE0006E59CF /* colorbars.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = colorbars.c; path = utils/colorbars.c; sourceTree = ""; }; AF9D473709B52EE0006E59CF /* colorbars.h */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.h; name = colorbars.h; path = utils/colorbars.h; sourceTree = ""; }; AF9D475409B5300A006E59CF /* SlideScreen.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = SlideScreen.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AF9D475809B53091006E59CF /* slidescreen.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = slidescreen.c; path = hacks/slidescreen.c; sourceTree = ""; }; AF9D476F09B53166006E59CF /* Zoom.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Zoom.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AF9D48D409B53229006E59CF /* zoom.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = zoom.c; path = hacks/zoom.c; sourceTree = ""; }; AF9D48EB09B53322006E59CF /* Bumps.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Bumps.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AF9D48EE09B533AE006E59CF /* bumps.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = bumps.c; path = hacks/bumps.c; sourceTree = ""; }; AF9D490409B535DA006E59CF /* Distort.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Distort.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AF9D490709B536F7006E59CF /* distort.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = distort.c; path = hacks/distort.c; sourceTree = ""; }; AF9D493B09B53CBA006E59CF /* Ripples.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Ripples.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AF9D493E09B53D55006E59CF /* ripples.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = ripples.c; path = hacks/ripples.c; sourceTree = ""; }; AF9D496409B53FC9006E59CF /* RotZoomer.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RotZoomer.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AF9D496709B540A4006E59CF /* rotzoomer.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = rotzoomer.c; path = hacks/rotzoomer.c; sourceTree = ""; }; AF9D497C09B5411D006E59CF /* Twang.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Twang.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AF9D497F09B541E5006E59CF /* twang.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = twang.c; path = hacks/twang.c; sourceTree = ""; }; AF9D49A709B544C3006E59CF /* Spotlight.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Spotlight.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AF9D49AA09B54596006E59CF /* spotlight.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = spotlight.c; path = hacks/spotlight.c; sourceTree = ""; }; AF9D4C7909B59F27006E59CF /* XLyap.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = XLyap.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AF9D4C7C09B5A044006E59CF /* xlyap.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = xlyap.c; path = hacks/xlyap.c; sourceTree = ""; }; AF9D4CF709B5AA8E006E59CF /* Pong.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Pong.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AF9D4CFA09B5AC94006E59CF /* analogtv.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = analogtv.c; path = hacks/analogtv.c; sourceTree = ""; }; AF9D4CFB09B5AC94006E59CF /* analogtv.h */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.h; name = analogtv.h; path = hacks/analogtv.h; sourceTree = ""; }; AF9D4CFC09B5AC94006E59CF /* pong.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = pong.c; path = hacks/pong.c; sourceTree = ""; }; AF9D4D8F09B5B2DC006E59CF /* XAnalogTV.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = XAnalogTV.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AF9D4D9209B5B444006E59CF /* xanalogtv.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = xanalogtv.c; path = hacks/xanalogtv.c; sourceTree = ""; }; AF9D4DC009B5B71E006E59CF /* BSOD.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = BSOD.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AF9D4DC309B5B87D006E59CF /* bsod.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = bsod.c; path = hacks/bsod.c; sourceTree = ""; }; AF9D4DD309B5B990006E59CF /* apple2.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = apple2.c; path = hacks/apple2.c; sourceTree = ""; }; AF9D4DFE09B5BB19006E59CF /* Apple2.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Apple2.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AF9D4E0509B5BC9D006E59CF /* apple2-main.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = "apple2-main.c"; path = "hacks/apple2-main.c"; sourceTree = ""; }; AF9E7EBF190F4C1B00A8B01F /* enable_gc */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = enable_gc; sourceTree = BUILT_PRODUCTS_DIR; }; AF9E7EC8190F4C4000A8B01F /* enable_gc.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = enable_gc.c; sourceTree = ""; }; AFA211881CD1AA1800C0D2A1 /* textclient-mobile.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = "textclient-mobile.c"; path = "utils/textclient-mobile.c"; sourceTree = ""; }; AFA211A11CD59DAF00C0D2A1 /* RaverHoop.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RaverHoop.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AFA211A31CD59FD800C0D2A1 /* raverhoop.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = raverhoop.c; path = hacks/glx/raverhoop.c; sourceTree = ""; }; AFA211A41CD59FD800C0D2A1 /* raverhoop.xml */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; path = raverhoop.xml; sourceTree = ""; }; AFA339400B058505002B0E7D /* WebCollage.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = WebCollage.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AFA33BAE0B0585F7002B0E7D /* webcollage-cocoa.m */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.objc; name = "webcollage-cocoa.m"; path = "hacks/webcollage-cocoa.m"; sourceTree = ""; }; AFA33BC70B058740002B0E7D /* webcollage-helper */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = "webcollage-helper"; sourceTree = BUILT_PRODUCTS_DIR; }; AFA33BD00B0587EE002B0E7D /* webcollage-helper-cocoa.m */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.objc; name = "webcollage-helper-cocoa.m"; path = "hacks/webcollage-helper-cocoa.m"; sourceTree = ""; }; AFA33C0A0B058E6B002B0E7D /* webcollage */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.script.perl; name = webcollage; path = hacks/webcollage; sourceTree = ""; }; AFA55864099324D800F3E977 /* minixpm.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = minixpm.c; path = utils/minixpm.c; sourceTree = ""; }; AFA55865099324D800F3E977 /* minixpm.h */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.h; name = minixpm.h; path = utils/minixpm.h; sourceTree = ""; }; AFA5595A099330B000F3E977 /* Cage.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Cage.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AFA5595D0993310500F3E977 /* cage.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = cage.c; path = hacks/glx/cage.c; sourceTree = ""; }; AFA5597F0993317900F3E977 /* Moebius.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Moebius.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AFA55982099331C300F3E977 /* moebius.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = moebius.c; path = hacks/glx/moebius.c; sourceTree = ""; }; AFA559A40993322100F3E977 /* Superquadrics.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Superquadrics.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AFA559A80993326300F3E977 /* superquadrics.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = superquadrics.c; path = hacks/glx/superquadrics.c; sourceTree = ""; }; AFA559C70993328000F3E977 /* Morph3D.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Morph3D.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AFA559CC099332E800F3E977 /* morph3d.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = morph3d.c; path = hacks/glx/morph3d.c; sourceTree = ""; }; AFA559E10993330600F3E977 /* Rubik.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Rubik.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AFA559EA0993335C00F3E977 /* rubik.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = rubik.c; path = hacks/glx/rubik.c; sourceTree = ""; }; AFA55A150993340300F3E977 /* Stairs.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Stairs.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AFA55A1A0993345900F3E977 /* stairs.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = stairs.c; path = hacks/glx/stairs.c; sourceTree = ""; }; AFA55A32099334A000F3E977 /* Sproingies.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Sproingies.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AFA55A3E0993351F00F3E977 /* gllist.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = gllist.c; path = hacks/glx/gllist.c; sourceTree = ""; }; AFA55A3F0993351F00F3E977 /* gllist.h */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.h; name = gllist.h; path = hacks/glx/gllist.h; sourceTree = ""; }; AFA55A400993351F00F3E977 /* s1_1.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = s1_1.c; path = hacks/glx/s1_1.c; sourceTree = ""; }; AFA55A410993351F00F3E977 /* s1_2.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = s1_2.c; path = hacks/glx/s1_2.c; sourceTree = ""; }; AFA55A420993351F00F3E977 /* s1_3.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = s1_3.c; path = hacks/glx/s1_3.c; sourceTree = ""; }; AFA55A430993351F00F3E977 /* s1_4.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = s1_4.c; path = hacks/glx/s1_4.c; sourceTree = ""; }; AFA55A440993351F00F3E977 /* s1_5.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = s1_5.c; path = hacks/glx/s1_5.c; sourceTree = ""; }; AFA55A450993351F00F3E977 /* s1_6.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = s1_6.c; path = hacks/glx/s1_6.c; sourceTree = ""; }; AFA55A460993351F00F3E977 /* s1_b.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = s1_b.c; path = hacks/glx/s1_b.c; sourceTree = ""; }; AFA55A470993351F00F3E977 /* sproingies.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = sproingies.c; path = hacks/glx/sproingies.c; sourceTree = ""; }; AFA55A480993351F00F3E977 /* sproingiewrap.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = sproingiewrap.c; path = hacks/glx/sproingiewrap.c; sourceTree = ""; }; AFA55A8B0993364300F3E977 /* Lament.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Lament.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AFA55A8E0993369100F3E977 /* lament.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = lament.c; path = hacks/glx/lament.c; sourceTree = ""; }; AFA55A93099336D800F3E977 /* normals.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = normals.c; path = hacks/glx/normals.c; sourceTree = ""; }; AFA55A94099336D800F3E977 /* normals.h */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.h; name = normals.h; path = hacks/glx/normals.h; sourceTree = ""; }; AFA55AE109933CEF00F3E977 /* Bubble3D.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Bubble3D.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AFA55AE409933D3800F3E977 /* bubble3d.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = bubble3d.c; path = hacks/glx/bubble3d.c; sourceTree = ""; }; AFA55AE809933D5900F3E977 /* bubble3d.h */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.h; name = bubble3d.h; path = hacks/glx/bubble3d.h; sourceTree = ""; }; AFA55AF409933DBF00F3E977 /* b_draw.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = b_draw.c; path = hacks/glx/b_draw.c; sourceTree = ""; }; AFA55AF509933DBF00F3E977 /* b_lockglue.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = b_lockglue.c; path = hacks/glx/b_lockglue.c; sourceTree = ""; }; AFA55AF609933DBF00F3E977 /* b_sphere.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = b_sphere.c; path = hacks/glx/b_sphere.c; sourceTree = ""; }; AFA55B1E09933E0500F3E977 /* GLPlanet.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = GLPlanet.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AFA55B2109933E4A00F3E977 /* glplanet.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = glplanet.c; path = hacks/glx/glplanet.c; sourceTree = ""; }; AFA55B3709933E8D00F3E977 /* Pulsar.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Pulsar.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AFA55B3F09933EC600F3E977 /* pulsar.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = pulsar.c; path = hacks/glx/pulsar.c; sourceTree = ""; }; AFA55B8B09933F7200F3E977 /* Sierpinski3D.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Sierpinski3D.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AFA55B8E09933FBF00F3E977 /* sierpinski3d.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = sierpinski3d.c; path = hacks/glx/sierpinski3d.c; sourceTree = ""; }; AFA55BA309933FDA00F3E977 /* GFlux.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = GFlux.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AFA55BA60993401A00F3E977 /* gflux.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = gflux.c; path = hacks/glx/gflux.c; sourceTree = ""; }; AFA55BBD099340CE00F3E977 /* Circuit.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Circuit.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AFA55BC00993416E00F3E977 /* circuit.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = circuit.c; path = hacks/glx/circuit.c; sourceTree = ""; }; AFA55BF60993429100F3E977 /* Menger.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Menger.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AFA55BF9099342D500F3E977 /* menger.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = menger.c; path = hacks/glx/menger.c; sourceTree = ""; }; AFA55C200993431300F3E977 /* Engine.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Engine.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AFA55C230993435300F3E977 /* engine.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = engine.c; path = hacks/glx/engine.c; sourceTree = ""; }; AFA55C89099349A600F3E977 /* GLSnake.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = GLSnake.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AFA55C8C099349EE00F3E977 /* glsnake.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = glsnake.c; path = hacks/glx/glsnake.c; sourceTree = ""; }; AFA55CBB09934BB200F3E977 /* Boxed.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Boxed.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AFA55CBE09934C0900F3E977 /* boxed.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = boxed.c; path = hacks/glx/boxed.c; sourceTree = ""; }; AFA55CBF09934C0900F3E977 /* boxed.h */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.h; name = boxed.h; path = hacks/glx/boxed.h; sourceTree = ""; }; AFA55CDE09934CE400F3E977 /* GLForestFire.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = GLForestFire.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AFA55CE109934D2E00F3E977 /* glforestfire.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = glforestfire.c; path = hacks/glx/glforestfire.c; sourceTree = ""; }; AFA55D4E0993565300F3E977 /* SBalls.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = SBalls.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AFA55D510993569C00F3E977 /* sballs.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = sballs.c; path = hacks/glx/sballs.c; sourceTree = ""; }; AFA55D740993584B00F3E977 /* Cubenetic.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Cubenetic.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AFA55D770993589300F3E977 /* cubenetic.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = cubenetic.c; path = hacks/glx/cubenetic.c; sourceTree = ""; }; AFA55D91099358C400F3E977 /* Spheremonics.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Spheremonics.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AFA55D940993590F00F3E977 /* spheremonics.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = spheremonics.c; path = hacks/glx/spheremonics.c; sourceTree = ""; }; AFA55DDA09935D7000F3E977 /* Lavalite.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Lavalite.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AFA55DDD09935DB600F3E977 /* lavalite.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = lavalite.c; path = hacks/glx/lavalite.c; sourceTree = ""; }; AFA55DE109935DFB00F3E977 /* marching.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = marching.c; path = hacks/glx/marching.c; sourceTree = ""; }; AFA55DE209935DFB00F3E977 /* marching.h */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.h; name = marching.h; path = hacks/glx/marching.h; sourceTree = ""; }; AFA55E0309935E4900F3E977 /* Queens.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Queens.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AFA55E0609935EB800F3E977 /* queens.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = queens.c; path = hacks/glx/queens.c; sourceTree = ""; }; AFA55E1F09935EDC00F3E977 /* Endgame.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Endgame.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AFA55E2209935F2B00F3E977 /* chessgames.h */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.h; name = chessgames.h; path = hacks/glx/chessgames.h; sourceTree = ""; }; AFA55E2309935F2B00F3E977 /* chessmodels.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = chessmodels.c; path = hacks/glx/chessmodels.c; sourceTree = ""; }; AFA55E2409935F2B00F3E977 /* chessmodels.h */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.h; name = chessmodels.h; path = hacks/glx/chessmodels.h; sourceTree = ""; }; AFA55E2509935F2B00F3E977 /* endgame.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = endgame.c; path = hacks/glx/endgame.c; sourceTree = ""; }; AFA55E4209935F8E00F3E977 /* GLBlur.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = GLBlur.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AFA55E4509935FD300F3E977 /* glblur.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = glblur.c; path = hacks/glx/glblur.c; sourceTree = ""; }; AFA55E6009935FF900F3E977 /* FlyingToasters.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = FlyingToasters.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AFA55E980993608800F3E977 /* flyingtoasters.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = flyingtoasters.c; path = hacks/glx/flyingtoasters.c; sourceTree = ""; }; AFA55E990993608800F3E977 /* toast.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = toast.c; path = hacks/glx/toast.c; sourceTree = ""; }; AFA55E9A0993608800F3E977 /* toast.dxf */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text; name = toast.dxf; path = hacks/glx/toast.dxf; sourceTree = ""; }; AFA55E9B0993608800F3E977 /* toast2.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = toast2.c; path = hacks/glx/toast2.c; sourceTree = ""; }; AFA55E9C0993608800F3E977 /* toast2.dxf */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text; name = toast2.dxf; path = hacks/glx/toast2.dxf; sourceTree = ""; }; AFA55E9D0993608800F3E977 /* toaster_base.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = toaster_base.c; path = hacks/glx/toaster_base.c; sourceTree = ""; }; AFA55E9F0993608800F3E977 /* toaster_handle.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = toaster_handle.c; path = hacks/glx/toaster_handle.c; sourceTree = ""; }; AFA55EA10993608800F3E977 /* toaster_handle2.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = toaster_handle2.c; path = hacks/glx/toaster_handle2.c; sourceTree = ""; }; AFA55EA30993608800F3E977 /* toaster_jet.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = toaster_jet.c; path = hacks/glx/toaster_jet.c; sourceTree = ""; }; AFA55EA50993608800F3E977 /* toaster_knob.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = toaster_knob.c; path = hacks/glx/toaster_knob.c; sourceTree = ""; }; AFA55EA70993608800F3E977 /* toaster_slots.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = toaster_slots.c; path = hacks/glx/toaster_slots.c; sourceTree = ""; }; AFA55EA90993608800F3E977 /* toaster_wing.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = toaster_wing.c; path = hacks/glx/toaster_wing.c; sourceTree = ""; }; AFA55EAB0993608800F3E977 /* toaster.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = toaster.c; path = hacks/glx/toaster.c; sourceTree = ""; }; AFA55EAC0993608800F3E977 /* toaster.dxf */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text; name = toaster.dxf; path = hacks/glx/toaster.dxf; sourceTree = ""; }; AFA55EE3099360E300F3E977 /* BouncingCow.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = BouncingCow.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AFA55EE70993613E00F3E977 /* bouncingcow.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = bouncingcow.c; path = hacks/glx/bouncingcow.c; sourceTree = ""; }; AFA55EE80993613E00F3E977 /* cow_face.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = cow_face.c; path = hacks/glx/cow_face.c; sourceTree = ""; }; AFA55EE90993613E00F3E977 /* cow_hide.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = cow_hide.c; path = hacks/glx/cow_hide.c; sourceTree = ""; }; AFA55EEA0993613E00F3E977 /* cow_hoofs.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = cow_hoofs.c; path = hacks/glx/cow_hoofs.c; sourceTree = ""; }; AFA55EEB0993613E00F3E977 /* cow_horns.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = cow_horns.c; path = hacks/glx/cow_horns.c; sourceTree = ""; }; AFA55EEC0993613E00F3E977 /* cow_tail.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = cow_tail.c; path = hacks/glx/cow_tail.c; sourceTree = ""; }; AFA55EED0993613E00F3E977 /* cow_udder.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = cow_udder.c; path = hacks/glx/cow_udder.c; sourceTree = ""; }; AFA55F1E099361B700F3E977 /* JigglyPuff.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = JigglyPuff.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AFA55F210993620200F3E977 /* jigglypuff.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = jigglypuff.c; path = hacks/glx/jigglypuff.c; sourceTree = ""; }; AFA55F3C0993622F00F3E977 /* Klein.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Klein.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AFA55F3F0993626E00F3E977 /* klein.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = klein.c; path = hacks/glx/klein.c; sourceTree = ""; }; AFA55F540993629000F3E977 /* Hypertorus.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Hypertorus.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AFA55F59099362DF00F3E977 /* hypertorus.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = hypertorus.c; path = hacks/glx/hypertorus.c; sourceTree = ""; }; AFA55F840993643600F3E977 /* GLMatrix.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = GLMatrix.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AFA55F870993648500F3E977 /* glmatrix.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = glmatrix.c; path = hacks/glx/glmatrix.c; sourceTree = ""; }; AFA55FE509936BFA00F3E977 /* CubeStorm.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = CubeStorm.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AFA55FF309936C4500F3E977 /* cubestorm.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = cubestorm.c; path = hacks/glx/cubestorm.c; sourceTree = ""; }; AFA5600B09936C6D00F3E977 /* GLKnots.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = GLKnots.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AFA5600E09936CB300F3E977 /* glknots.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = glknots.c; path = hacks/glx/glknots.c; sourceTree = ""; }; AFA5602609936CC800F3E977 /* BlockTube.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = BlockTube.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AFA5602909936D0700F3E977 /* blocktube.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = blocktube.c; path = hacks/glx/blocktube.c; sourceTree = ""; }; AFA5604409936D5100F3E977 /* FlipFlop.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = FlipFlop.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AFA5604709936DCC00F3E977 /* flipflop.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = flipflop.c; path = hacks/glx/flipflop.c; sourceTree = ""; }; AFA5605C09936E2100F3E977 /* AntInspect.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = AntInspect.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AFA5605F09936E9C00F3E977 /* antinspect.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = antinspect.c; path = hacks/glx/antinspect.c; sourceTree = ""; }; AFA5607409936F3800F3E977 /* AntSpotlight.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = AntSpotlight.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AFA5607709936FDD00F3E977 /* ants.h */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.h; name = ants.h; path = hacks/glx/ants.h; sourceTree = ""; }; AFA5607809936FDD00F3E977 /* antspotlight.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = antspotlight.c; path = hacks/glx/antspotlight.c; sourceTree = ""; }; AFA5607909936FDD00F3E977 /* grab-ximage.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = "grab-ximage.c"; path = "hacks/glx/grab-ximage.c"; sourceTree = ""; }; AFA5607A09936FDD00F3E977 /* grab-ximage.h */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.h; name = "grab-ximage.h"; path = "hacks/glx/grab-ximage.h"; sourceTree = ""; }; AFA560C00993718D00F3E977 /* Polytopes.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Polytopes.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AFA560C3099371D500F3E977 /* polytopes.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = polytopes.c; path = hacks/glx/polytopes.c; sourceTree = ""; }; AFA5610F0993781600F3E977 /* Molecule.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Molecule.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AFA561120993786800F3E977 /* molecule.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = molecule.c; path = hacks/glx/molecule.c; sourceTree = ""; }; AFA5616A09937C0D00F3E977 /* BlinkBox.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = BlinkBox.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AFA5616D09937C9A00F3E977 /* blinkbox.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = blinkbox.c; path = hacks/glx/blinkbox.c; sourceTree = ""; }; AFA5618D09937CF100F3E977 /* Noof.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Noof.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AFA5619009937D3600F3E977 /* noof.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = noof.c; path = hacks/glx/noof.c; sourceTree = ""; }; AFA561AF09937D7E00F3E977 /* Polyhedra.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Polyhedra.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AFA561B209937DCB00F3E977 /* polyhedra-gl.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = "polyhedra-gl.c"; path = "hacks/glx/polyhedra-gl.c"; sourceTree = ""; }; AFA561B309937DCC00F3E977 /* polyhedra.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = polyhedra.c; path = hacks/glx/polyhedra.c; sourceTree = ""; }; AFA561B409937DCC00F3E977 /* polyhedra.h */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.h; name = polyhedra.h; path = hacks/glx/polyhedra.h; sourceTree = ""; }; AFA562190993849F00F3E977 /* Providence.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Providence.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AFA5621C099384F600F3E977 /* providence.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = providence.c; path = hacks/glx/providence.c; sourceTree = ""; }; AFA562310993852500F3E977 /* Pinion.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Pinion.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AFA562340993856A00F3E977 /* pinion.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = pinion.c; path = hacks/glx/pinion.c; sourceTree = ""; }; AFA562D1099392C600F3E977 /* Boing.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Boing.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AFA562D40993930C00F3E977 /* boing.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = boing.c; path = hacks/glx/boing.c; sourceTree = ""; }; AFA562EC099393C900F3E977 /* AntMaze.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = AntMaze.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AFA562EF0993941600F3E977 /* antmaze.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = antmaze.c; path = hacks/glx/antmaze.c; sourceTree = ""; }; AFA563040993943B00F3E977 /* Tangram.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Tangram.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AFA563070993948F00F3E977 /* tangram_shapes.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = tangram_shapes.c; path = hacks/glx/tangram_shapes.c; sourceTree = ""; }; AFA563080993948F00F3E977 /* tangram_shapes.h */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.h; name = tangram_shapes.h; path = hacks/glx/tangram_shapes.h; sourceTree = ""; }; AFA563090993948F00F3E977 /* tangram.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = tangram.c; path = hacks/glx/tangram.c; sourceTree = ""; }; AFA563260993951000F3E977 /* Crackberg.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Crackberg.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AFA563290993957100F3E977 /* crackberg.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = crackberg.c; path = hacks/glx/crackberg.c; sourceTree = ""; }; AFA56343099395ED00F3E977 /* GLHanoi.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = GLHanoi.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AFA563460993963400F3E977 /* glhanoi.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = glhanoi.c; path = hacks/glx/glhanoi.c; sourceTree = ""; }; AFA56363099396C000F3E977 /* Cube21.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Cube21.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AFA563660993970F00F3E977 /* cube21.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = cube21.c; path = hacks/glx/cube21.c; sourceTree = ""; }; AFA5638B099397B300F3E977 /* TimeTunnel.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = TimeTunnel.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AFA5638E0993980D00F3E977 /* timetunnel.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = timetunnel.c; path = hacks/glx/timetunnel.c; sourceTree = ""; }; AFA563B6099398BB00F3E977 /* Juggler3D.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Juggler3D.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AFA563B90993991300F3E977 /* juggler3d.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = juggler3d.c; path = hacks/glx/juggler3d.c; sourceTree = ""; }; AFAA6B441773F07700DE720C /* ios-function-table.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "ios-function-table.m"; sourceTree = ""; }; AFACE8881CC83458008B24CD /* EnergyStream.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = EnergyStream.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AFACE88A1CC83578008B24CD /* energystream.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = energystream.c; path = hacks/glx/energystream.c; sourceTree = ""; }; AFACE88B1CC83578008B24CD /* energystream.xml */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; path = energystream.xml; sourceTree = ""; }; AFAD462209D5F4DA00AB5F95 /* grabclient.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = grabclient.c; path = utils/grabclient.c; sourceTree = ""; }; AFB591BA178B812C00EA4005 /* Hexadrop.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Hexadrop.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AFB591BC178B81E600EA4005 /* hexadrop.xml */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; path = hexadrop.xml; sourceTree = ""; }; AFB591BD178B81E600EA4005 /* hexadrop.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = hexadrop.c; path = hacks/hexadrop.c; sourceTree = ""; }; AFB5A06B0981F4C600871B16 /* screenhack.h */ = {isa = PBXFileReference; fileEncoding = 12; lastKnownFileType = sourcecode.c.h; name = screenhack.h; path = hacks/screenhack.h; sourceTree = ""; }; AFB5A0ED0981FF8B00871B16 /* usleep.c */ = {isa = PBXFileReference; fileEncoding = 12; lastKnownFileType = sourcecode.c.c; name = usleep.c; path = utils/usleep.c; sourceTree = ""; }; AFB5A0EE0981FF8B00871B16 /* usleep.h */ = {isa = PBXFileReference; fileEncoding = 12; lastKnownFileType = sourcecode.c.h; name = usleep.h; path = utils/usleep.h; sourceTree = ""; }; AFB8A69A1782BA34004EDB85 /* kaleidocycle.xml */ = {isa = PBXFileReference; lastKnownFileType = text.xml; path = kaleidocycle.xml; sourceTree = ""; }; AFBE743F19A7C6930018AA35 /* robot.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = robot.c; path = hacks/glx/robot.c; sourceTree = ""; }; AFBF893C0E41D930006A2D66 /* fps.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = fps.c; path = hacks/fps.c; sourceTree = ""; }; AFBF893D0E41D930006A2D66 /* fps.h */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.h; name = fps.h; path = hacks/fps.h; sourceTree = ""; }; AFBF89AE0E423FC3006A2D66 /* fps-gl.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = "fps-gl.c"; path = "hacks/glx/fps-gl.c"; sourceTree = ""; }; AFBF89B10E424036006A2D66 /* fpsI.h */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.h; name = fpsI.h; path = hacks/fpsI.h; sourceTree = ""; }; AFBFE75E178642DC00432B21 /* Apple2.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Apple2.app; sourceTree = BUILT_PRODUCTS_DIR; }; AFBFE77E178647FE00432B21 /* Phosphor.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Phosphor.app; sourceTree = BUILT_PRODUCTS_DIR; }; AFC0E8C01CDC601A008CAFAC /* Hydrostat.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Hydrostat.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AFC0E8C21CDC60A9008CAFAC /* hydrostat.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = hydrostat.c; path = hacks/glx/hydrostat.c; sourceTree = ""; }; AFC0E8C31CDC60A9008CAFAC /* hydrostat.xml */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; path = hydrostat.xml; sourceTree = ""; }; AFC211930E4E30C800D87B6E /* teapot.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = teapot.c; path = hacks/glx/teapot.c; sourceTree = ""; }; AFC211940E4E30C800D87B6E /* teapot.h */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.h; name = teapot.h; path = hacks/glx/teapot.h; sourceTree = ""; }; AFC254B909873AF9000655EE /* screenhackI.h */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.h; name = screenhackI.h; path = hacks/screenhackI.h; sourceTree = ""; }; AFC254C409882C97000655EE /* XScreenSaverView.h */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.h; path = XScreenSaverView.h; sourceTree = ""; }; AFC254C509882C97000655EE /* XScreenSaverView.m */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.objc; path = XScreenSaverView.m; sourceTree = ""; }; AFC2577F09888F5A000655EE /* XScreenSaverConfigSheet.h */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.h; path = XScreenSaverConfigSheet.h; sourceTree = ""; }; AFC2578009888F5A000655EE /* XScreenSaverConfigSheet.m */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.objc; path = XScreenSaverConfigSheet.m; sourceTree = ""; }; AFC258680988A468000655EE /* anemone.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = anemone.xml; sourceTree = ""; }; AFC258690988A468000655EE /* anemotaxis.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = anemotaxis.xml; sourceTree = ""; }; AFC2586A0988A468000655EE /* ant.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = ant.xml; sourceTree = ""; }; AFC2586B0988A468000655EE /* antinspect.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = antinspect.xml; sourceTree = ""; }; AFC2586C0988A468000655EE /* antmaze.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = antmaze.xml; sourceTree = ""; }; AFC2586D0988A468000655EE /* antspotlight.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = antspotlight.xml; sourceTree = ""; }; AFC2586E0988A468000655EE /* apollonian.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = apollonian.xml; sourceTree = ""; }; AFC2586F0988A468000655EE /* apple2.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = apple2.xml; sourceTree = ""; }; AFC258700988A468000655EE /* atlantis.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = atlantis.xml; sourceTree = ""; }; AFC258710988A468000655EE /* attraction.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = attraction.xml; sourceTree = ""; }; AFC258720988A468000655EE /* atunnel.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = atunnel.xml; sourceTree = ""; }; AFC258730988A468000655EE /* barcode.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = barcode.xml; sourceTree = ""; }; AFC258740988A468000655EE /* blaster.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = blaster.xml; sourceTree = ""; }; AFC258750988A468000655EE /* blinkbox.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = blinkbox.xml; sourceTree = ""; }; AFC258760988A468000655EE /* blitspin.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = blitspin.xml; sourceTree = ""; }; AFC258770988A468000655EE /* blocktube.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = blocktube.xml; sourceTree = ""; }; AFC258780988A468000655EE /* boing.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = boing.xml; sourceTree = ""; }; AFC258790988A468000655EE /* bouboule.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = bouboule.xml; sourceTree = ""; }; AFC2587A0988A468000655EE /* bouncingcow.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = bouncingcow.xml; sourceTree = ""; }; AFC2587B0988A468000655EE /* boxed.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = boxed.xml; sourceTree = ""; }; AFC2587C0988A468000655EE /* boxfit.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = boxfit.xml; sourceTree = ""; }; AFC2587D0988A468000655EE /* braid.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = braid.xml; sourceTree = ""; }; AFC2587E0988A468000655EE /* bsod.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = bsod.xml; sourceTree = ""; }; AFC2587F0988A468000655EE /* bubble3d.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = bubble3d.xml; sourceTree = ""; }; AFC258800988A468000655EE /* bubbles.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = bubbles.xml; sourceTree = ""; }; AFC258810988A468000655EE /* bumps.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = bumps.xml; sourceTree = ""; }; AFC258820988A468000655EE /* cage.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = cage.xml; sourceTree = ""; }; AFC258830988A468000655EE /* carousel.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = carousel.xml; sourceTree = ""; }; AFC258840988A468000655EE /* ccurve.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = ccurve.xml; sourceTree = ""; }; AFC258850988A468000655EE /* celtic.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = celtic.xml; sourceTree = ""; }; AFC258860988A468000655EE /* circuit.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = circuit.xml; sourceTree = ""; }; AFC258870988A468000655EE /* cloudlife.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = cloudlife.xml; sourceTree = ""; }; AFC258880988A468000655EE /* compass.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = compass.xml; sourceTree = ""; }; AFC258890988A468000655EE /* coral.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = coral.xml; sourceTree = ""; }; AFC2588B0988A468000655EE /* crackberg.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = crackberg.xml; sourceTree = ""; }; AFC2588C0988A468000655EE /* critical.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = critical.xml; sourceTree = ""; }; AFC2588D0988A468000655EE /* crystal.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = crystal.xml; sourceTree = ""; }; AFC2588E0988A468000655EE /* cube21.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = cube21.xml; sourceTree = ""; }; AFC2588F0988A468000655EE /* cubenetic.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = cubenetic.xml; sourceTree = ""; }; AFC258900988A468000655EE /* cubestorm.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = cubestorm.xml; sourceTree = ""; }; AFC258910988A468000655EE /* cynosure.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = cynosure.xml; sourceTree = ""; }; AFC258920988A468000655EE /* dangerball.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = dangerball.xml; sourceTree = ""; }; AFC258930988A468000655EE /* decayscreen.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = decayscreen.xml; sourceTree = ""; }; AFC258940988A468000655EE /* deco.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = deco.xml; sourceTree = ""; }; AFC258950988A468000655EE /* deluxe.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = deluxe.xml; sourceTree = ""; }; AFC258960988A468000655EE /* demon.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = demon.xml; sourceTree = ""; }; AFC258970988A468000655EE /* discrete.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = discrete.xml; sourceTree = ""; }; AFC258980988A468000655EE /* distort.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = distort.xml; sourceTree = ""; }; AFC258990988A468000655EE /* drift.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = drift.xml; sourceTree = ""; }; AFC2589B0988A468000655EE /* endgame.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = endgame.xml; sourceTree = ""; }; AFC2589C0988A468000655EE /* engine.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = engine.xml; sourceTree = ""; }; AFC2589D0988A468000655EE /* epicycle.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = epicycle.xml; sourceTree = ""; }; AFC2589E0988A468000655EE /* eruption.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = eruption.xml; sourceTree = ""; }; AFC2589F0988A468000655EE /* euler2d.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = euler2d.xml; sourceTree = ""; }; AFC258A00988A468000655EE /* extrusion.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = extrusion.xml; sourceTree = ""; }; AFC258A10988A468000655EE /* fadeplot.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = fadeplot.xml; sourceTree = ""; }; AFC258A20988A468000655EE /* fiberlamp.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = fiberlamp.xml; sourceTree = ""; }; AFC258A40988A468000655EE /* fireworkx.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = fireworkx.xml; sourceTree = ""; }; AFC258A50988A468000655EE /* flag.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = flag.xml; sourceTree = ""; }; AFC258A60988A468000655EE /* flame.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = flame.xml; sourceTree = ""; }; AFC258A70988A468000655EE /* flipflop.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = flipflop.xml; sourceTree = ""; }; AFC258A80988A468000655EE /* flipscreen3d.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = flipscreen3d.xml; sourceTree = ""; }; AFC258A90988A468000655EE /* fliptext.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = fliptext.xml; sourceTree = ""; }; AFC258AA0988A468000655EE /* flow.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = flow.xml; sourceTree = ""; }; AFC258AB0988A468000655EE /* fluidballs.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = fluidballs.xml; sourceTree = ""; }; AFC258AC0988A468000655EE /* flurry.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = flurry.xml; sourceTree = ""; }; AFC258AD0988A468000655EE /* flyingtoasters.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = flyingtoasters.xml; sourceTree = ""; }; AFC258AE0988A468000655EE /* fontglide.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = fontglide.xml; sourceTree = ""; }; AFC258AF0988A468000655EE /* forest.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = forest.xml; sourceTree = ""; }; AFC258B00988A468000655EE /* fuzzyflakes.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = fuzzyflakes.xml; sourceTree = ""; }; AFC258B10988A468000655EE /* galaxy.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = galaxy.xml; sourceTree = ""; }; AFC258B20988A468000655EE /* gears.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = gears.xml; sourceTree = ""; }; AFC258B30988A468000655EE /* gflux.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = gflux.xml; sourceTree = ""; }; AFC258B40988A468000655EE /* glblur.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = glblur.xml; sourceTree = ""; }; AFC258B50988A468000655EE /* gleidescope.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = gleidescope.xml; sourceTree = ""; }; AFC258B60988A468000655EE /* glforestfire.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = glforestfire.xml; sourceTree = ""; }; AFC258B70988A468000655EE /* glhanoi.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = glhanoi.xml; sourceTree = ""; }; AFC258B80988A468000655EE /* glknots.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = glknots.xml; sourceTree = ""; }; AFC258B90988A468000655EE /* glmatrix.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = glmatrix.xml; sourceTree = ""; }; AFC258BA0988A468000655EE /* glplanet.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = glplanet.xml; sourceTree = ""; }; AFC258BB0988A468000655EE /* glslideshow.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = glslideshow.xml; sourceTree = ""; }; AFC258BC0988A468000655EE /* glsnake.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = glsnake.xml; sourceTree = ""; }; AFC258BD0988A468000655EE /* gltext.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = gltext.xml; sourceTree = ""; }; AFC258BF0988A468000655EE /* goop.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = goop.xml; sourceTree = ""; }; AFC258C00988A468000655EE /* grav.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = grav.xml; sourceTree = ""; }; AFC258C10988A468000655EE /* greynetic.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = greynetic.xml; sourceTree = ""; }; AFC258C20988A468000655EE /* halftone.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = halftone.xml; sourceTree = ""; }; AFC258C30988A468000655EE /* halo.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = halo.xml; sourceTree = ""; }; AFC258C40988A468000655EE /* helix.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = helix.xml; sourceTree = ""; }; AFC258C50988A468000655EE /* hopalong.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = hopalong.xml; sourceTree = ""; }; AFC258C60988A468000655EE /* hyperball.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = hyperball.xml; sourceTree = ""; }; AFC258C70988A468000655EE /* hypercube.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = hypercube.xml; sourceTree = ""; }; AFC258C80988A468000655EE /* hypertorus.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = hypertorus.xml; sourceTree = ""; }; AFC258C90988A468000655EE /* ifs.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = ifs.xml; sourceTree = ""; }; AFC258CA0988A468000655EE /* imsmap.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = imsmap.xml; sourceTree = ""; }; AFC258CB0988A468000655EE /* interaggregate.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = interaggregate.xml; sourceTree = ""; }; AFC258CC0988A468000655EE /* interference.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = interference.xml; sourceTree = ""; }; AFC258CD0988A468000655EE /* intermomentary.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = intermomentary.xml; sourceTree = ""; }; AFC258CE0988A468000655EE /* jigglypuff.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = jigglypuff.xml; sourceTree = ""; }; AFC258CF0988A468000655EE /* jigsaw.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = jigsaw.xml; sourceTree = ""; }; AFC258D00988A468000655EE /* juggle.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = juggle.xml; sourceTree = ""; }; AFC258D10988A468000655EE /* juggler3d.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = juggler3d.xml; sourceTree = ""; }; AFC258D20988A468000655EE /* julia.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = julia.xml; sourceTree = ""; }; AFC258D30988A468000655EE /* kaleidescope.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = kaleidescope.xml; sourceTree = ""; }; AFC258D40988A468000655EE /* klein.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = klein.xml; sourceTree = ""; }; AFC258D50988A468000655EE /* kumppa.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = kumppa.xml; sourceTree = ""; }; AFC258D60988A468000655EE /* lament.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = lament.xml; sourceTree = ""; }; AFC258D70988A468000655EE /* laser.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = laser.xml; sourceTree = ""; }; AFC258D80988A468000655EE /* lavalite.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = lavalite.xml; sourceTree = ""; }; AFC258D90988A468000655EE /* lightning.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = lightning.xml; sourceTree = ""; }; AFC258DA0988A468000655EE /* lisa.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = lisa.xml; sourceTree = ""; }; AFC258DB0988A468000655EE /* lissie.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = lissie.xml; sourceTree = ""; }; AFC258DC0988A468000655EE /* lmorph.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = lmorph.xml; sourceTree = ""; }; AFC258DD0988A468000655EE /* loop.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = loop.xml; sourceTree = ""; }; AFC258DE0988A468000655EE /* maze.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = maze.xml; sourceTree = ""; }; AFC258DF0988A469000655EE /* memscroller.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = memscroller.xml; sourceTree = ""; }; AFC258E00988A469000655EE /* menger.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = menger.xml; sourceTree = ""; }; AFC258E10988A469000655EE /* metaballs.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = metaballs.xml; sourceTree = ""; }; AFC258E20988A469000655EE /* mirrorblob.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = mirrorblob.xml; sourceTree = ""; }; AFC258E30988A469000655EE /* mismunch.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = mismunch.xml; sourceTree = ""; }; AFC258E40988A469000655EE /* moebius.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = moebius.xml; sourceTree = ""; }; AFC258E50988A469000655EE /* moire.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = moire.xml; sourceTree = ""; }; AFC258E60988A469000655EE /* moire2.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = moire2.xml; sourceTree = ""; }; AFC258E70988A469000655EE /* molecule.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = molecule.xml; sourceTree = ""; }; AFC258E80988A469000655EE /* morph3d.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = morph3d.xml; sourceTree = ""; }; AFC258E90988A469000655EE /* mountain.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = mountain.xml; sourceTree = ""; }; AFC258EA0988A469000655EE /* munch.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = munch.xml; sourceTree = ""; }; AFC258EB0988A469000655EE /* nerverot.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = nerverot.xml; sourceTree = ""; }; AFC258EC0988A469000655EE /* noof.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = noof.xml; sourceTree = ""; }; AFC258ED0988A469000655EE /* noseguy.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = noseguy.xml; sourceTree = ""; }; AFC258EE0988A469000655EE /* pacman.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = pacman.xml; sourceTree = ""; }; AFC258EF0988A469000655EE /* pedal.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = pedal.xml; sourceTree = ""; }; AFC258F00988A469000655EE /* penetrate.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = penetrate.xml; sourceTree = ""; }; AFC258F10988A469000655EE /* penrose.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = penrose.xml; sourceTree = ""; }; AFC258F20988A469000655EE /* petri.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = petri.xml; sourceTree = ""; }; AFC258F30988A469000655EE /* phosphor.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = phosphor.xml; sourceTree = ""; }; AFC258F40988A469000655EE /* piecewise.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = piecewise.xml; sourceTree = ""; }; AFC258F50988A469000655EE /* pinion.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = pinion.xml; sourceTree = ""; }; AFC258F60988A469000655EE /* pipes.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = pipes.xml; sourceTree = ""; }; AFC258F70988A469000655EE /* polyhedra.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = polyhedra.xml; sourceTree = ""; }; AFC258F80988A469000655EE /* polyominoes.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = polyominoes.xml; sourceTree = ""; }; AFC258F90988A469000655EE /* polytopes.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = polytopes.xml; sourceTree = ""; }; AFC258FA0988A469000655EE /* pong.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = pong.xml; sourceTree = ""; }; AFC258FB0988A469000655EE /* popsquares.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = popsquares.xml; sourceTree = ""; }; AFC258FC0988A469000655EE /* providence.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = providence.xml; sourceTree = ""; }; AFC258FD0988A469000655EE /* pulsar.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = pulsar.xml; sourceTree = ""; }; AFC258FE0988A469000655EE /* pyro.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = pyro.xml; sourceTree = ""; }; AFC258FF0988A469000655EE /* qix.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = qix.xml; sourceTree = ""; }; AFC259000988A469000655EE /* queens.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = queens.xml; sourceTree = ""; }; AFC259030988A469000655EE /* ripples.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = ripples.xml; sourceTree = ""; }; AFC259040988A469000655EE /* rocks.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = rocks.xml; sourceTree = ""; }; AFC259050988A469000655EE /* rorschach.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = rorschach.xml; sourceTree = ""; }; AFC259060988A469000655EE /* rotor.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = rotor.xml; sourceTree = ""; }; AFC259070988A469000655EE /* rotzoomer.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = rotzoomer.xml; sourceTree = ""; }; AFC259080988A469000655EE /* rubik.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = rubik.xml; sourceTree = ""; }; AFC259090988A469000655EE /* sballs.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = sballs.xml; sourceTree = ""; }; AFC2590A0988A469000655EE /* shadebobs.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = shadebobs.xml; sourceTree = ""; }; AFC2590B0988A469000655EE /* sierpinski.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = sierpinski.xml; sourceTree = ""; }; AFC2590C0988A469000655EE /* sierpinski3d.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = sierpinski3d.xml; sourceTree = ""; }; AFC2590D0988A469000655EE /* slidescreen.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = slidescreen.xml; sourceTree = ""; }; AFC2590E0988A469000655EE /* slip.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = slip.xml; sourceTree = ""; }; AFC2590F0988A469000655EE /* sonar.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = sonar.xml; sourceTree = ""; }; AFC259100988A469000655EE /* speedmine.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = speedmine.xml; sourceTree = ""; }; AFC259110988A469000655EE /* sphere.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = sphere.xml; sourceTree = ""; }; AFC259130988A469000655EE /* spheremonics.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = spheremonics.xml; sourceTree = ""; }; AFC259140988A469000655EE /* spiral.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = spiral.xml; sourceTree = ""; }; AFC259150988A469000655EE /* spotlight.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = spotlight.xml; sourceTree = ""; }; AFC259160988A469000655EE /* sproingies.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = sproingies.xml; sourceTree = ""; }; AFC259170988A469000655EE /* squiral.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = squiral.xml; sourceTree = ""; }; AFC259190988A469000655EE /* stairs.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = stairs.xml; sourceTree = ""; }; AFC2591A0988A469000655EE /* starfish.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = starfish.xml; sourceTree = ""; }; AFC2591B0988A469000655EE /* starwars.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = starwars.xml; sourceTree = ""; }; AFC2591C0988A469000655EE /* stonerview.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = stonerview.xml; sourceTree = ""; }; AFC2591D0988A469000655EE /* strange.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = strange.xml; sourceTree = ""; }; AFC2591E0988A469000655EE /* substrate.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = substrate.xml; sourceTree = ""; }; AFC2591F0988A469000655EE /* superquadrics.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = superquadrics.xml; sourceTree = ""; }; AFC259200988A469000655EE /* swirl.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = swirl.xml; sourceTree = ""; }; AFC259210988A469000655EE /* t3d.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = t3d.xml; sourceTree = ""; }; AFC259220988A469000655EE /* tangram.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = tangram.xml; sourceTree = ""; }; AFC259230988A469000655EE /* thornbird.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = thornbird.xml; sourceTree = ""; }; AFC259240988A469000655EE /* timetunnel.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = timetunnel.xml; sourceTree = ""; }; AFC259250988A469000655EE /* triangle.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = triangle.xml; sourceTree = ""; }; AFC259260988A469000655EE /* truchet.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = truchet.xml; sourceTree = ""; }; AFC259270988A469000655EE /* twang.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = twang.xml; sourceTree = ""; }; AFC259280988A469000655EE /* vermiculate.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = vermiculate.xml; sourceTree = ""; }; AFC259290988A469000655EE /* vidwhacker.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = vidwhacker.xml; sourceTree = ""; }; AFC2592A0988A469000655EE /* vines.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = vines.xml; sourceTree = ""; }; AFC2592B0988A469000655EE /* wander.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = wander.xml; sourceTree = ""; }; AFC2592C0988A469000655EE /* webcollage.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = webcollage.xml; sourceTree = ""; }; AFC2592D0988A469000655EE /* whirlwindwarp.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = whirlwindwarp.xml; sourceTree = ""; }; AFC2592F0988A469000655EE /* whirlygig.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = whirlygig.xml; sourceTree = ""; }; AFC259300988A469000655EE /* worm.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = worm.xml; sourceTree = ""; }; AFC259310988A469000655EE /* wormhole.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = wormhole.xml; sourceTree = ""; }; AFC259320988A469000655EE /* xanalogtv.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = xanalogtv.xml; sourceTree = ""; }; AFC259370988A469000655EE /* xflame.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = xflame.xml; sourceTree = ""; }; AFC259380988A469000655EE /* xjack.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = xjack.xml; sourceTree = ""; }; AFC259390988A469000655EE /* xlyap.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = xlyap.xml; sourceTree = ""; }; AFC2593A0988A469000655EE /* xmatrix.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = xmatrix.xml; sourceTree = ""; }; AFC2593D0988A469000655EE /* xrayswarm.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = xrayswarm.xml; sourceTree = ""; }; AFC2593F0988A469000655EE /* xspirograph.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = xspirograph.xml; sourceTree = ""; }; AFC259430988A469000655EE /* zoom.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = zoom.xml; sourceTree = ""; }; AFC25B5E0988BA63000655EE /* deco.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = deco.c; path = hacks/deco.c; sourceTree = ""; }; AFC25B990988BC08000655EE /* colors.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = colors.c; path = utils/colors.c; sourceTree = ""; }; AFC25B9A0988BC08000655EE /* colors.h */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.h; name = colors.h; path = utils/colors.h; sourceTree = ""; }; AFC43E731C68364B00C89999 /* PxPlus_IBM_VGA8.ttf */ = {isa = PBXFileReference; lastKnownFileType = file; path = PxPlus_IBM_VGA8.ttf; sourceTree = ""; }; AFC7592B158D8E8B00C5458E /* textclient.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = textclient.c; path = utils/textclient.c; sourceTree = ""; }; AFC7592C158D8E8B00C5458E /* textclient.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = textclient.h; path = utils/textclient.h; sourceTree = ""; }; AFC7592F158D9A7A00C5458E /* textclient-ios.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = "textclient-ios.m"; path = "OSX/textclient-ios.m"; sourceTree = ""; }; AFCCCBAD09BFE4B000353F4D /* rdbomb.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = rdbomb.xml; sourceTree = ""; }; AFCF83501AF5B515008BB7E1 /* SplitFlap.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = SplitFlap.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AFCF83521AF5B5FD008BB7E1 /* splitflap.xml */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; path = splitflap.xml; sourceTree = ""; }; AFCF83531AF5B5FD008BB7E1 /* splitflap_obj.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = splitflap_obj.c; path = hacks/glx/splitflap_obj.c; sourceTree = ""; }; AFCF83541AF5B5FD008BB7E1 /* splitflap.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = splitflap.c; path = hacks/glx/splitflap.c; sourceTree = ""; }; AFD51B300F063B4A00471C02 /* Photopile.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Photopile.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AFD51DB60F063BCE00471C02 /* photopile.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = photopile.c; path = hacks/glx/photopile.c; sourceTree = ""; }; AFD51DB80F063BE700471C02 /* photopile.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = photopile.xml; sourceTree = ""; }; AFD56E040996A03800BA26F7 /* GLText.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = GLText.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AFD56E080996A07A00BA26F7 /* gltext.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = gltext.c; path = hacks/glx/gltext.c; sourceTree = ""; }; AFD56E0A0996A0ED00BA26F7 /* glut_roman.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = glut_roman.h; path = hacks/glx/glut_roman.h; sourceTree = ""; }; AFD56E0B0996A0ED00BA26F7 /* glut_stroke.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = glut_stroke.c; path = hacks/glx/glut_stroke.c; sourceTree = ""; }; AFD56E0C0996A0ED00BA26F7 /* glut_swidth.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = glut_swidth.c; path = hacks/glx/glut_swidth.c; sourceTree = ""; }; AFD56E0D0996A0ED00BA26F7 /* glutstroke.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = glutstroke.h; path = hacks/glx/glutstroke.h; sourceTree = ""; }; AFD56EBE0996A72600BA26F7 /* Braid.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Braid.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AFD56EC10996A76F00BA26F7 /* braid.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = braid.c; path = hacks/braid.c; sourceTree = ""; }; AFD56EEA0996A95700BA26F7 /* Forest.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Forest.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AFD56EED0996A99E00BA26F7 /* forest.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = forest.c; path = hacks/forest.c; sourceTree = ""; }; AFD56F1B0996AAFA00BA26F7 /* Vines.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Vines.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AFD56F1F0996AB5A00BA26F7 /* vines.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = vines.c; path = hacks/vines.c; sourceTree = ""; }; AFD56F330996AB8A00BA26F7 /* Galaxy.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Galaxy.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AFD56F360996ABD200BA26F7 /* galaxy.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = galaxy.c; path = hacks/galaxy.c; sourceTree = ""; }; AFD56F5F0996AEEE00BA26F7 /* Grav.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Grav.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AFD56F620996AF2D00BA26F7 /* grav.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = grav.c; path = hacks/grav.c; sourceTree = ""; }; AFD56F7B0996B01600BA26F7 /* Hopalong.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Hopalong.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AFD56F880996B06600BA26F7 /* hopalong.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = hopalong.c; path = hacks/hopalong.c; sourceTree = ""; }; AFD56F9C0996B09400BA26F7 /* Laser.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Laser.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AFD56FA00996B0E500BA26F7 /* laser.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = laser.c; path = hacks/laser.c; sourceTree = ""; }; AFD56FB30996B10F00BA26F7 /* Lightning.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Lightning.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AFD56FB60996B16300BA26F7 /* lightning.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = lightning.c; path = hacks/lightning.c; sourceTree = ""; }; AFD56FC90996B18F00BA26F7 /* Lisa.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Lisa.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AFD56FCC0996B1D600BA26F7 /* lisa.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = lisa.c; path = hacks/lisa.c; sourceTree = ""; }; AFD56FDF0996B20900BA26F7 /* Lissie.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Lissie.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AFD56FE20996B26200BA26F7 /* lissie.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = lissie.c; path = hacks/lissie.c; sourceTree = ""; }; AFD570080996B43800BA26F7 /* Penrose.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Penrose.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AFD5700C0996B49D00BA26F7 /* penrose.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = penrose.c; path = hacks/penrose.c; sourceTree = ""; }; AFD5701F0996B4CC00BA26F7 /* Sierpinski.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Sierpinski.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AFD570220996B52700BA26F7 /* sierpinski.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = sierpinski.c; path = hacks/sierpinski.c; sourceTree = ""; }; AFD570360996B56D00BA26F7 /* Sphere.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Sphere.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AFD5703B0996B5E300BA26F7 /* sphere.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = sphere.c; path = hacks/sphere.c; sourceTree = ""; }; AFD570530996B61600BA26F7 /* Spiral.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Spiral.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AFD570560996B67600BA26F7 /* spiral.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = spiral.c; path = hacks/spiral.c; sourceTree = ""; }; AFD570690996B6A300BA26F7 /* FadePlot.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = FadePlot.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AFD5706C0996B70000BA26F7 /* fadeplot.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = fadeplot.c; path = hacks/fadeplot.c; sourceTree = ""; }; AFD5707F0996B72800BA26F7 /* Mountain.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Mountain.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AFD570820996B79300BA26F7 /* mountain.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = mountain.c; path = hacks/mountain.c; sourceTree = ""; }; AFD570950996B80300BA26F7 /* Triangle.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Triangle.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AFD570980996B86200BA26F7 /* triangle.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = triangle.c; path = hacks/triangle.c; sourceTree = ""; }; AFD570AB0996B88E00BA26F7 /* Worm.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Worm.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AFD570AE0996B8EF00BA26F7 /* worm.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = worm.c; path = hacks/worm.c; sourceTree = ""; }; AFD570C10996B93000BA26F7 /* Rotor.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Rotor.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AFD570C40996B98500BA26F7 /* rotor.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = rotor.c; path = hacks/rotor.c; sourceTree = ""; }; AFD570D90996B9F800BA26F7 /* Ant.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Ant.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AFD570DE0996BA5C00BA26F7 /* ant.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = ant.c; path = hacks/ant.c; sourceTree = ""; }; AFD570FA0996BBBF00BA26F7 /* Flow.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Flow.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AFD571010996BC3800BA26F7 /* flow.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = flow.c; path = hacks/flow.c; sourceTree = ""; }; AFD571230996BE9300BA26F7 /* Discrete.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Discrete.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AFD571280996BEF700BA26F7 /* discrete.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = discrete.c; path = hacks/discrete.c; sourceTree = ""; }; AFD5713C0996BF2E00BA26F7 /* Apollonian.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Apollonian.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AFD5713F0996BFBE00BA26F7 /* apollonian.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = apollonian.c; path = hacks/apollonian.c; sourceTree = ""; }; AFD571530996C01700BA26F7 /* Euler2D.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Euler2D.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AFD571560996C07F00BA26F7 /* euler2d.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = euler2d.c; path = hacks/euler2d.c; sourceTree = ""; }; AFD571690996C0CE00BA26F7 /* Thornbird.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Thornbird.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AFD5716B0996C16700BA26F7 /* thornbird.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = thornbird.c; path = hacks/thornbird.c; sourceTree = ""; }; AFD571C50996D9DC00BA26F7 /* Juggle.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Juggle.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AFD571C80996DA4600BA26F7 /* juggle.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = juggle.c; path = hacks/juggle.c; sourceTree = ""; }; AFD572320996E4A300BA26F7 /* Swirl.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Swirl.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AFD572350996E53E00BA26F7 /* swirl.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = swirl.c; path = hacks/swirl.c; sourceTree = ""; }; AFD5727D0996EE8500BA26F7 /* Polyominoes.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Polyominoes.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AFD572800996EF2B00BA26F7 /* polyominoes.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = polyominoes.c; path = hacks/polyominoes.c; sourceTree = ""; }; AFD572B50996F99600BA26F7 /* Bouboule.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Bouboule.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AFD572B90996FB3D00BA26F7 /* bouboule.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = bouboule.c; path = hacks/bouboule.c; sourceTree = ""; }; AFD572D20996FC0F00BA26F7 /* Crystal.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Crystal.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AFD572ED0997006E00BA26F7 /* crystal.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = crystal.c; path = hacks/crystal.c; sourceTree = ""; }; AFD57309099701C000BA26F7 /* Julia.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Julia.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AFD5730C099702C800BA26F7 /* julia.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = julia.c; path = hacks/julia.c; sourceTree = ""; }; AFD5736D0997411200BA26F7 /* Strange.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Strange.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AFD57371099741A200BA26F7 /* strange.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = strange.c; path = hacks/strange.c; sourceTree = ""; }; AFDA11211934424D003D397F /* aligned_malloc.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = aligned_malloc.c; path = utils/aligned_malloc.c; sourceTree = ""; }; AFDA11221934424D003D397F /* aligned_malloc.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = aligned_malloc.h; path = utils/aligned_malloc.h; sourceTree = ""; }; AFDA11231934424D003D397F /* thread_util.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = thread_util.c; path = utils/thread_util.c; sourceTree = ""; }; AFDA11241934424D003D397F /* thread_util.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = thread_util.h; path = utils/thread_util.h; sourceTree = ""; }; AFDA65A1178A52B70070D24B /* UnknownPleasures.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = UnknownPleasures.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AFDA65A3178A541A0070D24B /* unknownpleasures.xml */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; path = unknownpleasures.xml; sourceTree = ""; }; AFDA65A4178A541A0070D24B /* unknownpleasures.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = unknownpleasures.c; path = hacks/glx/unknownpleasures.c; sourceTree = ""; }; AFE1FD3F0981E32E00F7970E /* SaverRunner.h */ = {isa = PBXFileReference; fileEncoding = 12; lastKnownFileType = sourcecode.c.h; path = SaverRunner.h; sourceTree = ""; }; AFE1FD400981E32E00F7970E /* SaverRunner.m */ = {isa = PBXFileReference; fileEncoding = 12; lastKnownFileType = sourcecode.c.objc; path = SaverRunner.m; sourceTree = ""; }; AFE1FD410981E32E00F7970E /* InvertedSlider.h */ = {isa = PBXFileReference; fileEncoding = 12; lastKnownFileType = sourcecode.c.h; path = InvertedSlider.h; sourceTree = ""; }; AFE1FD420981E32E00F7970E /* InvertedSlider.m */ = {isa = PBXFileReference; fileEncoding = 12; lastKnownFileType = sourcecode.c.objc; path = InvertedSlider.m; sourceTree = ""; }; AFE1FD430981E32E00F7970E /* jwxyz.h */ = {isa = PBXFileReference; fileEncoding = 12; lastKnownFileType = sourcecode.c.h; name = jwxyz.h; path = ../jwxyz/jwxyz.h; sourceTree = ""; }; AFE1FD440981E32E00F7970E /* jwxyz.m */ = {isa = PBXFileReference; fileEncoding = 12; lastKnownFileType = sourcecode.c.objc; name = jwxyz.m; path = ../jwxyz/jwxyz.m; sourceTree = ""; }; AFE1FD470981E32E00F7970E /* PrefsReader.h */ = {isa = PBXFileReference; fileEncoding = 12; lastKnownFileType = sourcecode.c.h; path = PrefsReader.h; sourceTree = ""; }; AFE1FD480981E32E00F7970E /* PrefsReader.m */ = {isa = PBXFileReference; fileEncoding = 12; lastKnownFileType = sourcecode.c.objc; path = PrefsReader.m; sourceTree = ""; }; AFE1FD530981E3CB00F7970E /* erase.c */ = {isa = PBXFileReference; fileEncoding = 12; lastKnownFileType = sourcecode.c.c; name = erase.c; path = utils/erase.c; sourceTree = ""; }; AFE1FD540981E3CB00F7970E /* erase.h */ = {isa = PBXFileReference; fileEncoding = 12; lastKnownFileType = sourcecode.c.h; name = erase.h; path = utils/erase.h; sourceTree = ""; }; AFE1FD550981E3CB00F7970E /* hsv.c */ = {isa = PBXFileReference; fileEncoding = 12; lastKnownFileType = sourcecode.c.c; name = hsv.c; path = utils/hsv.c; sourceTree = ""; }; AFE1FD560981E3CB00F7970E /* hsv.h */ = {isa = PBXFileReference; fileEncoding = 12; lastKnownFileType = sourcecode.c.h; name = hsv.h; path = utils/hsv.h; sourceTree = ""; }; AFE1FD570981E3CB00F7970E /* spline.c */ = {isa = PBXFileReference; fileEncoding = 12; lastKnownFileType = sourcecode.c.c; name = spline.c; path = utils/spline.c; sourceTree = ""; }; AFE1FD580981E3CB00F7970E /* spline.h */ = {isa = PBXFileReference; fileEncoding = 12; lastKnownFileType = sourcecode.c.h; name = spline.h; path = utils/spline.h; sourceTree = ""; }; AFE1FD590981E3CB00F7970E /* utils.h */ = {isa = PBXFileReference; fileEncoding = 12; lastKnownFileType = sourcecode.c.h; name = utils.h; path = utils/utils.h; sourceTree = ""; }; AFE1FD5A0981E3CB00F7970E /* version.h */ = {isa = PBXFileReference; fileEncoding = 12; lastKnownFileType = sourcecode.c.h; name = version.h; path = utils/version.h; sourceTree = ""; }; AFE1FD5B0981E3CB00F7970E /* yarandom.c */ = {isa = PBXFileReference; fileEncoding = 12; lastKnownFileType = sourcecode.c.c; name = yarandom.c; path = utils/yarandom.c; sourceTree = ""; }; AFE1FD5C0981E3CB00F7970E /* yarandom.h */ = {isa = PBXFileReference; fileEncoding = 12; lastKnownFileType = sourcecode.c.h; name = yarandom.h; path = utils/yarandom.h; sourceTree = ""; }; AFE1FD620981E40800F7970E /* rorschach.c */ = {isa = PBXFileReference; fileEncoding = 12; lastKnownFileType = sourcecode.c.c; name = rorschach.c; path = hacks/rorschach.c; sourceTree = ""; }; AFE2A46A0E2E904600ADB298 /* SkyTentacles.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = SkyTentacles.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AFE2A4720E2E90E300ADB298 /* skytentacles.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = skytentacles.c; path = hacks/glx/skytentacles.c; sourceTree = ""; }; AFE2A4740E2E911200ADB298 /* skytentacles.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = skytentacles.xml; sourceTree = ""; }; AFE30BFC0E52B14700CCF4A5 /* Sonar.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Sonar.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AFE30BFF0E52B1DC00CCF4A5 /* sonar-icmp.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = "sonar-icmp.c"; path = "hacks/glx/sonar-icmp.c"; sourceTree = ""; }; AFE30C000E52B1DC00CCF4A5 /* sonar-sim.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = "sonar-sim.c"; path = "hacks/glx/sonar-sim.c"; sourceTree = ""; }; AFE30C010E52B1DC00CCF4A5 /* sonar.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = sonar.c; path = hacks/glx/sonar.c; sourceTree = ""; }; AFE6A16A0CDD78EA002805BF /* involute.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = involute.c; path = hacks/glx/involute.c; sourceTree = ""; }; AFE6A16B0CDD78EA002805BF /* involute.h */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.h; name = involute.h; path = hacks/glx/involute.h; sourceTree = ""; }; AFE6A1970CDD7B2E002805BF /* MoebiusGears.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = MoebiusGears.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AFE6A40B0CDD7BC3002805BF /* moebiusgears.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = moebiusgears.c; path = hacks/glx/moebiusgears.c; sourceTree = ""; }; AFE6A40D0CDD7BDC002805BF /* moebiusgears.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = moebiusgears.xml; sourceTree = ""; }; AFE6A42D0CDD7FAA002805BF /* Abstractile.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Abstractile.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AFE6A4340CDD800F002805BF /* abstractile.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = abstractile.c; path = hacks/abstractile.c; sourceTree = ""; }; AFE6A4360CDD8026002805BF /* abstractile.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = abstractile.xml; sourceTree = ""; }; AFE943AF19DD54C1000A5E6D /* xft.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = xft.c; path = utils/xft.c; sourceTree = ""; }; AFE943B019DD54C1000A5E6D /* xft.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = xft.h; path = utils/xft.h; sourceTree = ""; }; AFE943B319DDF97F000A5E6D /* utf8wc.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = utf8wc.c; path = utils/utf8wc.c; sourceTree = ""; }; AFE943B419DDF97F000A5E6D /* utf8wc.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = utf8wc.h; path = utils/utf8wc.h; sourceTree = ""; }; AFEB9C3815900514003974F3 /* UIKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = UIKit.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS5.0.sdk/System/Library/Frameworks/UIKit.framework; sourceTree = DEVELOPER_DIR; }; AFEB9C3A1590054B003974F3 /* OpenGLES.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = OpenGLES.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS5.0.sdk/System/Library/Frameworks/OpenGLES.framework; sourceTree = DEVELOPER_DIR; }; AFEB9C3C15900558003974F3 /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS5.0.sdk/System/Library/Frameworks/Foundation.framework; sourceTree = DEVELOPER_DIR; }; AFEB9C3E1590056A003974F3 /* CoreGraphics.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreGraphics.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS5.0.sdk/System/Library/Frameworks/CoreGraphics.framework; sourceTree = DEVELOPER_DIR; }; AFEB9C3F1590056A003974F3 /* QuartzCore.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = QuartzCore.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS5.0.sdk/System/Library/Frameworks/QuartzCore.framework; sourceTree = DEVELOPER_DIR; }; AFEC23E21CB6EAE100DE138F /* DymaxionMap.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = DymaxionMap.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AFEC23E41CB6EBC400DE138F /* dymaxionmap.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = dymaxionmap.c; path = hacks/glx/dymaxionmap.c; sourceTree = ""; }; AFEC23E51CB6EBDA00DE138F /* dymaxionmap.xml */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; path = dymaxionmap.xml; sourceTree = ""; }; AFEC68361BD6CA85004C1B64 /* OCRAStd.otf */ = {isa = PBXFileReference; lastKnownFileType = file; path = OCRAStd.otf; sourceTree = ""; }; AFEC68381BD6CDF9004C1B64 /* YearlReg.ttf */ = {isa = PBXFileReference; lastKnownFileType = file; path = YearlReg.ttf; sourceTree = ""; }; AFEE10621D13406000AAC8F7 /* CubeTwist.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = CubeTwist.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AFEE10641D1341E300AAC8F7 /* cubetwist.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = cubetwist.c; path = hacks/glx/cubetwist.c; sourceTree = ""; }; AFEE10651D1341E300AAC8F7 /* cubetwist.xml */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; path = cubetwist.xml; sourceTree = ""; }; AFEE10811D15EB0800AAC8F7 /* CubeStack.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = CubeStack.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AFEE10831D15EBA600AAC8F7 /* cubestack.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = cubestack.c; path = hacks/glx/cubestack.c; sourceTree = ""; }; AFEE10841D15EBA600AAC8F7 /* cubestack.xml */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; path = cubestack.xml; sourceTree = ""; }; AFEE10A01D17E20B00AAC8F7 /* Splodesic.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Splodesic.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AFEE10A21D17E2B300AAC8F7 /* splodesic.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = splodesic.c; path = hacks/glx/splodesic.c; sourceTree = ""; }; AFEE10A31D17E2B300AAC8F7 /* splodesic.xml */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; path = splodesic.xml; sourceTree = ""; }; AFF1BA0E19A96D8B0016A88D /* lament_model.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = lament_model.c; path = hacks/glx/lament_model.c; sourceTree = ""; }; AFF2869217860E830050A578 /* QuasiCrystal.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = QuasiCrystal.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AFF28694178611720050A578 /* quasicrystal.xml */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; path = quasicrystal.xml; sourceTree = ""; }; AFF28695178611720050A578 /* quasicrystal.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = quasicrystal.c; path = hacks/glx/quasicrystal.c; sourceTree = ""; }; AFF3C9FB17CCAC440028F240 /* Geodesic.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Geodesic.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AFF3C9FD17CCAD9A0028F240 /* geodesic.xml */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; path = geodesic.xml; sourceTree = ""; }; AFF3CA0217CCAEB70028F240 /* geodesic.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = geodesic.c; path = hacks/glx/geodesic.c; sourceTree = ""; }; AFF463470C4403E400EE6509 /* CWaves.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = CWaves.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AFF463490C44044E00EE6509 /* cwaves.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = cwaves.c; path = hacks/cwaves.c; sourceTree = ""; }; AFF4634B0C44046500EE6509 /* cwaves.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = cwaves.xml; sourceTree = ""; }; AFF4636C0C440AEF00EE6509 /* GLCells.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = GLCells.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AFF463710C440B9200EE6509 /* glcells.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = glcells.c; path = hacks/glx/glcells.c; sourceTree = ""; }; AFF463730C440BAC00EE6509 /* glcells.xml */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = glcells.xml; sourceTree = ""; }; AFFAB32919158CE40020F021 /* ProjectivePlane.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = ProjectivePlane.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AFFAB32C19158E2A0020F021 /* projectiveplane.xml */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; path = projectiveplane.xml; sourceTree = ""; }; AFFAB33119158EA80020F021 /* projectiveplane.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = projectiveplane.c; path = hacks/glx/projectiveplane.c; sourceTree = ""; }; CE3D01661B76F4C100993C75 /* TestX11.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = TestX11.saver; sourceTree = BUILT_PRODUCTS_DIR; }; CE3D01681B76F83E00993C75 /* testx11.xml */ = {isa = PBXFileReference; lastKnownFileType = text.xml; path = testx11.xml; sourceTree = ""; }; CE3D016A1B76F8E200993C75 /* testx11.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = testx11.c; path = hacks/testx11.c; sourceTree = ""; }; CE43C2BE1C055157004C2BC6 /* jwxyz-cocoa.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = "jwxyz-cocoa.m"; path = "../jwxyz/jwxyz-cocoa.m"; sourceTree = ""; }; CE5564591C25141000645458 /* jwxyz-gl.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = "jwxyz-gl.c"; path = "../jwxyz/jwxyz-gl.c"; sourceTree = ""; }; CE8206741B89048800E35532 /* jwxyz-cocoa.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "jwxyz-cocoa.h"; path = "../jwxyz/jwxyz-cocoa.h"; sourceTree = ""; }; CE8C49CC1C011CC400BA2DCF /* jwxyzI.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = jwxyzI.h; path = ../jwxyz/jwxyzI.h; sourceTree = ""; }; CE8EA1C11C35CF10002D1020 /* jwxyz-common.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = "jwxyz-common.c"; path = "../jwxyz/jwxyz-common.c"; sourceTree = ""; }; CE9289D119BD00E200961F22 /* async_netdb.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = async_netdb.c; path = utils/async_netdb.c; sourceTree = ""; }; CE9289D219BD00E300961F22 /* async_netdb.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = async_netdb.h; path = utils/async_netdb.h; sourceTree = ""; }; CEAF85661ABE4A70008F104C /* SaverListController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SaverListController.h; sourceTree = ""; }; CEE0BC611A6B0D6200C098BF /* OpenGL.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = OpenGL.framework; path = System/Library/Frameworks/OpenGL.framework; sourceTree = SDKROOT; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ AF08399709930B6B00277BE9 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD8EF158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD8F0158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C326215C0FC9C007A6896 /* QuartzCore.framework in Frameworks */, AF1FD8F1158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD8F2158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BCDC1A6B13DD00C098BF /* OpenGL.framework in Frameworks */, AF78371217DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AF083A3D099311D700277BE9 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD8F3158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD8F4158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C326315C0FC9C007A6896 /* QuartzCore.framework in Frameworks */, AF1FD8F5158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD8F6158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BCDD1A6B13E700C098BF /* OpenGL.framework in Frameworks */, AF78371317DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AF0DC7B40C4C73F600D76972 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD7BF158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD7C0158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C321515C0FC9C007A6896 /* QuartzCore.framework in Frameworks */, AF1FD7C1158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD7C2158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BC901A6B100000C098BF /* OpenGL.framework in Frameworks */, AF7836C417DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AF0DCA4A0C4CBB0D00D76972 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FDA33158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FDA34158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C32B315C0FC9D007A6896 /* QuartzCore.framework in Frameworks */, AF1FDA35158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FDA36158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BD341A6B17EF00C098BF /* OpenGL.framework in Frameworks */, AF78376617DBA581003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AF1A176A0D6D6EE3008AF328 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD7BB158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD7BC158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C321415C0FC9C007A6896 /* QuartzCore.framework in Frameworks */, AF1FD7BD158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD7BE158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BC8F1A6B0FF600C098BF /* OpenGL.framework in Frameworks */, AF7836C317DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AF1AD9DF18500F9F00932759 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1ADA181850180E00932759 /* Sparkle.framework in Frameworks */, AF1ADA1F18504A4F00932759 /* ScreenSaver.framework in Frameworks */, AF1AD9E318500F9F00932759 /* Cocoa.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AF1B0FAF1D7AB4740011DBE4 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1B0FB01D7AB4740011DBE4 /* libjwxyz.a in Frameworks */, AF1B0FB11D7AB4740011DBE4 /* ScreenSaver.framework in Frameworks */, AF1B0FB21D7AB4740011DBE4 /* QuartzCore.framework in Frameworks */, AF1B0FB31D7AB4740011DBE4 /* Cocoa.framework in Frameworks */, AF1B0FB41D7AB4740011DBE4 /* Carbon.framework in Frameworks */, AF1B0FB51D7AB4740011DBE4 /* OpenGL.framework in Frameworks */, AF1B0FB61D7AB4740011DBE4 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AF32D9E80F3AD0B40080F535 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD9F3158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD9F4158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C32A315C0FC9D007A6896 /* QuartzCore.framework in Frameworks */, AF1FD9F5158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD9F6158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BD231A6B174D00C098BF /* OpenGL.framework in Frameworks */, AF78375517DBA581003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AF3581C91431D47B00E09C51 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD91B158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD91C158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C326D15C0FC9C007A6896 /* QuartzCore.framework in Frameworks */, AF1FD91D158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD91E158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BCE81A6B146F00C098BF /* OpenGL.framework in Frameworks */, AF78371D17DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AF35820A143330F900E09C51 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FDA2F158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FDA30158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C32B215C0FC9D007A6896 /* QuartzCore.framework in Frameworks */, AF1FDA31158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FDA32158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BD321A6B17DD00C098BF /* OpenGL.framework in Frameworks */, AF78376417DBA581003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AF35E8940E63823600691F2F /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD99B158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD99C158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C328D15C0FC9D007A6896 /* QuartzCore.framework in Frameworks */, AF1FD99D158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD99E158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BD0A1A6B165D00C098BF /* OpenGL.framework in Frameworks */, AF78373D17DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AF3938221D0FBD6A00205406 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF3938231D0FBD6A00205406 /* libjwxyz.a in Frameworks */, AF3938241D0FBD6A00205406 /* ScreenSaver.framework in Frameworks */, AF3938251D0FBD6A00205406 /* QuartzCore.framework in Frameworks */, AF3938261D0FBD6A00205406 /* Cocoa.framework in Frameworks */, AF3938271D0FBD6A00205406 /* Carbon.framework in Frameworks */, AF3938281D0FBD6A00205406 /* OpenGL.framework in Frameworks */, AF3938291D0FBD6A00205406 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AF39E28A198A11F60064A58D /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF39E28B198A11F60064A58D /* libjwxyz.a in Frameworks */, AF39E28C198A11F60064A58D /* ScreenSaver.framework in Frameworks */, AF39E28D198A11F60064A58D /* QuartzCore.framework in Frameworks */, AF39E28E198A11F60064A58D /* Cocoa.framework in Frameworks */, AF39E28F198A11F60064A58D /* Carbon.framework in Frameworks */, CEE0BD351A6B17F700C098BF /* OpenGL.framework in Frameworks */, AF39E290198A11F60064A58D /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AF3C714D0D624BF50030CC0D /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD993158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD994158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C328B15C0FC9D007A6896 /* QuartzCore.framework in Frameworks */, AF1FD995158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD996158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BD081A6B164A00C098BF /* OpenGL.framework in Frameworks */, AF78373B17DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AF46E9D71CBBA2B300240FBC /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF46E9D81CBBA2B300240FBC /* libjwxyz.a in Frameworks */, AF46E9D91CBBA2B300240FBC /* ScreenSaver.framework in Frameworks */, AF46E9DA1CBBA2B300240FBC /* QuartzCore.framework in Frameworks */, AF46E9DB1CBBA2B300240FBC /* Cocoa.framework in Frameworks */, AF46E9DC1CBBA2B300240FBC /* Carbon.framework in Frameworks */, AF46E9DD1CBBA2B300240FBC /* OpenGL.framework in Frameworks */, AF46E9DE1CBBA2B300240FBC /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AF476FBE099D154F001F091E /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD7AB158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD7AC158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C321015C0FC9C007A6896 /* QuartzCore.framework in Frameworks */, AF1FD7AD158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD7AE158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BC8B1A6B0FC900C098BF /* OpenGL.framework in Frameworks */, AF7836BF17DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AF476FE3099D1686001F091E /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD83F158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD840158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C323515C0FC9C007A6896 /* QuartzCore.framework in Frameworks */, AF1FD841158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD842158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BCB11A6B116100C098BF /* OpenGL.framework in Frameworks */, AF7836E517DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AF477054099D4385001F091E /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD767158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD768158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C31FF15C0FC9C007A6896 /* QuartzCore.framework in Frameworks */, AF1FD769158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD76A158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BC791A6B0EE700C098BF /* OpenGL.framework in Frameworks */, AF7836AD17DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AF477171099D4786001F091E /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD74F158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD750158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C31F915C0FC9C007A6896 /* QuartzCore.framework in Frameworks */, AF1FD751158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD752158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BC731A6B0E9200C098BF /* OpenGL.framework in Frameworks */, AF7836A717DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AF477187099D4803001F091E /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD84B158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD84C158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C323815C0FC9C007A6896 /* QuartzCore.framework in Frameworks */, AF1FD84D158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD84E158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BCB41A6B117F00C098BF /* OpenGL.framework in Frameworks */, AF7836E817DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AF4771AF099D4949001F091E /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FDA7B158FF96600C40F17 /* libjwxyz.a in Frameworks */, AF1FDA7C158FF96600C40F17 /* ScreenSaver.framework in Frameworks */, AF2C32C515C0FC9D007A6896 /* QuartzCore.framework in Frameworks */, AF1FDA7D158FF96600C40F17 /* Cocoa.framework in Frameworks */, AF1FDA7E158FF96600C40F17 /* Carbon.framework in Frameworks */, CEE0BD471A6B18BB00C098BF /* OpenGL.framework in Frameworks */, AF78377817DBA581003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AF4771E3099D4D9A001F091E /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD743158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD744158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C31F615C0FC9C007A6896 /* QuartzCore.framework in Frameworks */, AF1FD745158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD746158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BC701A6B0E7200C098BF /* OpenGL.framework in Frameworks */, AF7836A417DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AF4771FA099D4E63001F091E /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD7DB158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD7DC158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C321C15C0FC9C007A6896 /* QuartzCore.framework in Frameworks */, AF1FD7DD158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD7DE158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BC971A6B104F00C098BF /* OpenGL.framework in Frameworks */, AF7836CB17DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AF477210099D4EE8001F091E /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FDA83158FF96600C40F17 /* libjwxyz.a in Frameworks */, AF1FDA84158FF96600C40F17 /* ScreenSaver.framework in Frameworks */, AF2C32C715C0FC9D007A6896 /* QuartzCore.framework in Frameworks */, AF1FDA85158FF96600C40F17 /* Cocoa.framework in Frameworks */, AF1FDA86158FF96600C40F17 /* Carbon.framework in Frameworks */, CEE0BD491A6B18CE00C098BF /* OpenGL.framework in Frameworks */, AF78377A17DBA581003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AF477226099D4F67001F091E /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD717158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD718158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C31EB15C0FC9C007A6896 /* QuartzCore.framework in Frameworks */, AF1FD719158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD71A158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BC631A6B0D8100C098BF /* OpenGL.framework in Frameworks */, AF78369917DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AF47725B099D5717001F091E /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD793158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD794158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C320A15C0FC9C007A6896 /* QuartzCore.framework in Frameworks */, AF1FD795158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD796158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BC841A6B0F5400C098BF /* OpenGL.framework in Frameworks */, AF7836B817DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AF477273099D57B9001F091E /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD7FF158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD800158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C322515C0FC9C007A6896 /* QuartzCore.framework in Frameworks */, AF1FD801158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD802158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BCA01A6B10A900C098BF /* OpenGL.framework in Frameworks */, AF7836D517DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AF47728B099D5926001F091E /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD7F7158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD7F8158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C322315C0FC9C007A6896 /* QuartzCore.framework in Frameworks */, AF1FD7F9158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD7FA158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BC9E1A6B109600C098BF /* OpenGL.framework in Frameworks */, AF7836D317DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AF47738A099D65A1001F091E /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD85B158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD85C158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C323C15C0FC9C007A6896 /* QuartzCore.framework in Frameworks */, AF1FD85D158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD85E158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BCB71A6B11DC00C098BF /* OpenGL.framework in Frameworks */, AF7836EC17DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AF4773A2099D6648001F091E /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD787158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD788158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C320715C0FC9C007A6896 /* QuartzCore.framework in Frameworks */, AF1FD789158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD78A158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BC811A6B0F3200C098BF /* OpenGL.framework in Frameworks */, AF7836B517DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AF4773C9099D67B9001F091E /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD71B158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD71C158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C31EC15C0FC9C007A6896 /* QuartzCore.framework in Frameworks */, AF1FD71D158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD71E158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BC621A6B0D6200C098BF /* OpenGL.framework in Frameworks */, AF78369A17DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AF47740A099D69E7001F091E /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD7AF158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD7B0158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C321115C0FC9C007A6896 /* QuartzCore.framework in Frameworks */, AF1FD7B1158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD7B2158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BC8C1A6B0FD400C098BF /* OpenGL.framework in Frameworks */, AF7836C017DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AF47742F099D7C70001F091E /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD79F158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD7A0158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C320D15C0FC9C007A6896 /* QuartzCore.framework in Frameworks */, AF1FD7A1158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD7A2158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BC881A6B0F7C00C098BF /* OpenGL.framework in Frameworks */, AF7836BC17DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AF47744A099D7D33001F091E /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD86F158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD870158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C324115C0FC9C007A6896 /* QuartzCore.framework in Frameworks */, AF1FD871158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD872158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BCBC1A6B121000C098BF /* OpenGL.framework in Frameworks */, AF7836F117DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AF47748B099D89E4001F091E /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD77B158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD77C158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C320415C0FC9C007A6896 /* QuartzCore.framework in Frameworks */, AF1FD77D158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD77E158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BC7E1A6B0F1600C098BF /* OpenGL.framework in Frameworks */, AF7836B217DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AF4774A1099D8A74001F091E /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD7B3158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD7B4158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C321215C0FC9C007A6896 /* QuartzCore.framework in Frameworks */, AF1FD7B5158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD7B6158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BC8D1A6B0FDE00C098BF /* OpenGL.framework in Frameworks */, AF7836C117DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AF4774BC099D8B5F001F091E /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FDA6B158FF96600C40F17 /* libjwxyz.a in Frameworks */, AF1FDA6C158FF96600C40F17 /* ScreenSaver.framework in Frameworks */, AF2C32C115C0FC9D007A6896 /* QuartzCore.framework in Frameworks */, AF1FDA6D158FF96600C40F17 /* Cocoa.framework in Frameworks */, AF1FDA6E158FF96600C40F17 /* Carbon.framework in Frameworks */, CEE0BD431A6B189500C098BF /* OpenGL.framework in Frameworks */, AF78377417DBA581003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AF4774D6099D8BFF001F091E /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD7C3158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD7C4158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C321615C0FC9C007A6896 /* QuartzCore.framework in Frameworks */, AF1FD7C5158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD7C6158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BC911A6B100900C098BF /* OpenGL.framework in Frameworks */, AF7836C517DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AF477565099D9A1A001F091E /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD7E3158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD7E4158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C321E15C0FC9C007A6896 /* QuartzCore.framework in Frameworks */, AF1FD7E5158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD7E6158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BC991A6B106300C098BF /* OpenGL.framework in Frameworks */, AF7836CD17DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AF47758B099D9C28001F091E /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD803158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD804158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C322615C0FC9C007A6896 /* QuartzCore.framework in Frameworks */, AF1FD805158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD806158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BCA11A6B10B400C098BF /* OpenGL.framework in Frameworks */, AF7836D617DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AF4775A7099D9CF7001F091E /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD837158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD838158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C323315C0FC9C007A6896 /* QuartzCore.framework in Frameworks */, AF1FD839158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD83A158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BCAE1A6B114000C098BF /* OpenGL.framework in Frameworks */, AF7836E317DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AF4775E0099D9F69001F091E /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD753158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD754158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C31FA15C0FC9C007A6896 /* QuartzCore.framework in Frameworks */, AF1FD755158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD756158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BC741A6B0E9B00C098BF /* OpenGL.framework in Frameworks */, AF7836A817DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AF4775FA099DA030001F091E /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD76F158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD770158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C320115C0FC9C007A6896 /* QuartzCore.framework in Frameworks */, AF1FD771158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD772158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BC7B1A6B0EFB00C098BF /* OpenGL.framework in Frameworks */, AF7836AF17DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AF47761B099DA26C001F091E /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD7B7158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD7B8158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C321315C0FC9C007A6896 /* QuartzCore.framework in Frameworks */, AF1FD7B9158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD7BA158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BC8E1A6B0FEA00C098BF /* OpenGL.framework in Frameworks */, AF7836C217DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AF47764C099DA6D0001F091E /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD833158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD834158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C323215C0FC9C007A6896 /* QuartzCore.framework in Frameworks */, AF1FD835158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD836158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BCAD1A6B113500C098BF /* OpenGL.framework in Frameworks */, AF7836E217DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AF477662099DA78E001F091E /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FDA3F158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FDA40158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C32B615C0FC9D007A6896 /* QuartzCore.framework in Frameworks */, AF1FDA41158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FDA42158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BD391A6B182B00C098BF /* OpenGL.framework in Frameworks */, AF78376917DBA581003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AF477678099DA849001F091E /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD7EB158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD7EC158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C322015C0FC9C007A6896 /* QuartzCore.framework in Frameworks */, AF1FD7ED158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD7EE158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BC9B1A6B107600C098BF /* OpenGL.framework in Frameworks */, AF7836CF17DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AF477697099DAA6F001F091E /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD72F158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD730158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C31F115C0FC9C007A6896 /* QuartzCore.framework in Frameworks */, AF1FD731158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD732158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BC6B1A6B0E4200C098BF /* OpenGL.framework in Frameworks */, AF78369F17DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AF4776B2099DABDD001F091E /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD877158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD878158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C324315C0FC9C007A6896 /* QuartzCore.framework in Frameworks */, AF1FD879158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD87A158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BCBE1A6B122600C098BF /* OpenGL.framework in Frameworks */, AF7836F317DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AF4776C8099DAC8A001F091E /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD873158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD874158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C324215C0FC9C007A6896 /* QuartzCore.framework in Frameworks */, AF1FD875158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD876158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BCBD1A6B121B00C098BF /* OpenGL.framework in Frameworks */, AF7836F217DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AF4776E3099DADDF001F091E /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD857158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD858158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C323B15C0FC9C007A6896 /* QuartzCore.framework in Frameworks */, AF1FD859158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD85A158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BCB61A6B119C00C098BF /* OpenGL.framework in Frameworks */, AF7836EB17DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AF4776F9099DAE7A001F091E /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD847158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD848158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C323715C0FC9C007A6896 /* QuartzCore.framework in Frameworks */, AF1FD849158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD84A158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BCB31A6B117500C098BF /* OpenGL.framework in Frameworks */, AF7836E717DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AF477715099DAF9F001F091E /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD74B158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD74C158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C31F815C0FC9C007A6896 /* QuartzCore.framework in Frameworks */, AF1FD74D158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD74E158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BC721A6B0E8800C098BF /* OpenGL.framework in Frameworks */, AF7836A617DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AF47772B099DB044001F091E /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD83B158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD83C158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C323415C0FC9C007A6896 /* QuartzCore.framework in Frameworks */, AF1FD83D158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD83E158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BCAF1A6B114D00C098BF /* OpenGL.framework in Frameworks */, AF7836E417DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AF47775A099DB61E001F091E /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD7A7158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD7A8158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C320F15C0FC9C007A6896 /* QuartzCore.framework in Frameworks */, AF1FD7A9158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD7AA158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BC8A1A6B0FBE00C098BF /* OpenGL.framework in Frameworks */, AF7836BE17DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AF47777C099DB965001F091E /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD747158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD748158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C31F715C0FC9C007A6896 /* QuartzCore.framework in Frameworks */, AF1FD749158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD74A158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BC711A6B0E7D00C098BF /* OpenGL.framework in Frameworks */, AF7836A517DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AF477798099DBA90001F091E /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD77F158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD780158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C320515C0FC9C007A6896 /* QuartzCore.framework in Frameworks */, AF1FD781158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD782158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BC7F1A6B0F1F00C098BF /* OpenGL.framework in Frameworks */, AF7836B317DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AF4777D9099DC183001F091E /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD737158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD738158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C31F315C0FC9C007A6896 /* QuartzCore.framework in Frameworks */, AF1FD739158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD73A158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BC6D1A6B0E5400C098BF /* OpenGL.framework in Frameworks */, AF7836A117DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AF4778B3099DDB79001F091E /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD7E7158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD7E8158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C321F15C0FC9C007A6896 /* QuartzCore.framework in Frameworks */, AF1FD7E9158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD7EA158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BC9A1A6B106C00C098BF /* OpenGL.framework in Frameworks */, AF7836CE17DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AF4778CF099DDCAE001F091E /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD867158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD868158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C323F15C0FC9C007A6896 /* QuartzCore.framework in Frameworks */, AF1FD869158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD86A158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BCBA1A6B11FB00C098BF /* OpenGL.framework in Frameworks */, AF7836EF17DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AF4778F0099DDDC8001F091E /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD75B158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD75C158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C31FC15C0FC9C007A6896 /* QuartzCore.framework in Frameworks */, AF1FD75D158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD75E158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BC761A6B0EAE00C098BF /* OpenGL.framework in Frameworks */, AF7836AA17DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AF477911099DE379001F091E /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FDA43158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FDA44158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C32B715C0FC9D007A6896 /* QuartzCore.framework in Frameworks */, AF1FDA45158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FDA46158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BD3A1A6B183600C098BF /* OpenGL.framework in Frameworks */, AF78376A17DBA581003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AF477932099DE4C7001F091E /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD827158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD828158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C322F15C0FC9C007A6896 /* QuartzCore.framework in Frameworks */, AF1FD829158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD82A158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BCAA1A6B111200C098BF /* OpenGL.framework in Frameworks */, AF7836DF17DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AF4808BF098C3B6C00FB32B8 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AF480C50098E301400FB32B8 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD79B158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD79C158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C320C15C0FC9C007A6896 /* QuartzCore.framework in Frameworks */, AF1FD79D158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD79E158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BC861A6B0F6700C098BF /* OpenGL.framework in Frameworks */, AF7836BA17DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AF480D79098EEDDE00FB32B8 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD897158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD898158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C324B15C0FC9C007A6896 /* QuartzCore.framework in Frameworks */, AF1FD899158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD89A158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BCC61A6B12F700C098BF /* OpenGL.framework in Frameworks */, AF7836FB17DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AF4810F309909FBA00FB32B8 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD933158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD934158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C327315C0FC9C007A6896 /* QuartzCore.framework in Frameworks */, AF1FD935158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD936158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BCEE1A6B153800C098BF /* OpenGL.framework in Frameworks */, AF78372317DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AF4812590990CE2700FB32B8 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD957158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD958158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C327C15C0FC9D007A6896 /* QuartzCore.framework in Frameworks */, AF1FD959158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD95A158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BCF71A6B159600C098BF /* OpenGL.framework in Frameworks */, AF78372C17DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AF4812BB0990D3D900FB32B8 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD9D7158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD9D8158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C329C15C0FC9D007A6896 /* QuartzCore.framework in Frameworks */, AF1FD9D9158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD9DA158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BD1A1A6B16F800C098BF /* OpenGL.framework in Frameworks */, AF78374D17DBA581003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AF48DEF70A0C25E000F94CF9 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD97B158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD97C158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C328515C0FC9D007A6896 /* QuartzCore.framework in Frameworks */, AF1FD97D158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD97E158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BD021A6B160D00C098BF /* OpenGL.framework in Frameworks */, AF78373517DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AF4A3451102A593600A81B2A /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FDA1F158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FDA20158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C32AE15C0FC9D007A6896 /* QuartzCore.framework in Frameworks */, AF1FDA21158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FDA22158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BD2E1A6B17B600C098BF /* OpenGL.framework in Frameworks */, AF78376017DBA581003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AF4FD6EE0CE7A486005EE58E /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD9AF158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD9B0158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C329215C0FC9D007A6896 /* QuartzCore.framework in Frameworks */, AF1FD9B1158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD9B2158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BD101A6B169600C098BF /* OpenGL.framework in Frameworks */, AF78374317DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AF4FF4C20D52CBDE00666F98 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD92F158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD930158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C327215C0FC9C007A6896 /* QuartzCore.framework in Frameworks */, AF1FD931158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD932158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BCED1A6B152E00C098BF /* OpenGL.framework in Frameworks */, AF78372217DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AF5C9B011A0CCE6E00B0147A /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF5C9B021A0CCE6E00B0147A /* libjwxyz.a in Frameworks */, AF5C9B031A0CCE6E00B0147A /* ScreenSaver.framework in Frameworks */, AF5C9B041A0CCE6E00B0147A /* QuartzCore.framework in Frameworks */, AF5C9B051A0CCE6E00B0147A /* Cocoa.framework in Frameworks */, AF5C9B061A0CCE6E00B0147A /* Carbon.framework in Frameworks */, CEE0BCE71A6B144800C098BF /* OpenGL.framework in Frameworks */, AF5C9B071A0CCE6E00B0147A /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AF63A7F91AB4EDDB00593C75 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF63A7FA1AB4EDDB00593C75 /* libjwxyz.a in Frameworks */, AF63A7FB1AB4EDDB00593C75 /* ScreenSaver.framework in Frameworks */, AF63A7FC1AB4EDDB00593C75 /* QuartzCore.framework in Frameworks */, AF63A7FD1AB4EDDB00593C75 /* Cocoa.framework in Frameworks */, AF63A7FE1AB4EDDB00593C75 /* Carbon.framework in Frameworks */, AF63A7FF1AB4EDDB00593C75 /* OpenGL.framework in Frameworks */, AF63A8001AB4EDDB00593C75 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AF63F4401C3465BE0033E133 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF63F4411C3465BE0033E133 /* libjwxyz.a in Frameworks */, AF63F4421C3465BE0033E133 /* OpenGLES.framework in Frameworks */, AF63F4431C3465BE0033E133 /* UIKit.framework in Frameworks */, AF63F4441C3465BE0033E133 /* AssetsLibrary.framework in Frameworks */, AF63F4451C3465BE0033E133 /* Foundation.framework in Frameworks */, AF63F4461C3465BE0033E133 /* CoreGraphics.framework in Frameworks */, AF63F4471C3465BE0033E133 /* CoreText.framework in Frameworks */, AF63F4481C3465BE0033E133 /* QuartzCore.framework in Frameworks */, AF63F4491C3465BE0033E133 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AF63F4661C34682A0033E133 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF63F4671C34682A0033E133 /* libjwxyz.a in Frameworks */, AF63F4681C34682A0033E133 /* OpenGLES.framework in Frameworks */, AF63F4691C34682A0033E133 /* UIKit.framework in Frameworks */, AF63F46A1C34682A0033E133 /* AssetsLibrary.framework in Frameworks */, AF63F46B1C34682A0033E133 /* Foundation.framework in Frameworks */, AF63F46C1C34682A0033E133 /* CoreGraphics.framework in Frameworks */, AF63F46D1C34682A0033E133 /* CoreText.framework in Frameworks */, AF63F46E1C34682A0033E133 /* QuartzCore.framework in Frameworks */, AF63F46F1C34682A0033E133 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AF63F48C1C3469FC0033E133 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF63F48D1C3469FC0033E133 /* libjwxyz.a in Frameworks */, AF63F48E1C3469FC0033E133 /* OpenGLES.framework in Frameworks */, AF63F48F1C3469FC0033E133 /* UIKit.framework in Frameworks */, AF63F4901C3469FC0033E133 /* AssetsLibrary.framework in Frameworks */, AF63F4911C3469FC0033E133 /* Foundation.framework in Frameworks */, AF63F4921C3469FC0033E133 /* CoreGraphics.framework in Frameworks */, AF63F4931C3469FC0033E133 /* CoreText.framework in Frameworks */, AF63F4941C3469FC0033E133 /* QuartzCore.framework in Frameworks */, AF63F4951C3469FC0033E133 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AF6423FA099FF9C2000F4CD4 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD943158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD944158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C327715C0FC9D007A6896 /* QuartzCore.framework in Frameworks */, AF1FD945158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD946158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BCF21A6B156200C098BF /* OpenGL.framework in Frameworks */, AF78372717DBA580003B9FC0 /* libz.dylib in Frameworks */, AF84FD4209B1209E00F3AB06 /* GLUT.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AF6425D409A18855000F4CD4 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FDA53158FF96600C40F17 /* libjwxyz.a in Frameworks */, AF1FDA54158FF96600C40F17 /* ScreenSaver.framework in Frameworks */, AF2C32BB15C0FC9D007A6896 /* QuartzCore.framework in Frameworks */, AF1FDA55158FF96600C40F17 /* Cocoa.framework in Frameworks */, AF1FDA56158FF96600C40F17 /* Carbon.framework in Frameworks */, CEE0BD3D1A6B185600C098BF /* OpenGL.framework in Frameworks */, AF78376E17DBA581003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AF6425F409A189EC000F4CD4 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD807158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD808158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C322715C0FC9C007A6896 /* QuartzCore.framework in Frameworks */, AF1FD809158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD80A158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BCA21A6B10BF00C098BF /* OpenGL.framework in Frameworks */, AF7836D717DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AF64261709A18D6C000F4CD4 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FDA4F158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FDA50158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C32BA15C0FC9D007A6896 /* QuartzCore.framework in Frameworks */, AF1FDA51158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FDA52158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BD3C1A6B184C00C098BF /* OpenGL.framework in Frameworks */, AF78376D17DBA581003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AF64263409A18F54000F4CD4 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD7D3158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD7D4158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C321A15C0FC9C007A6896 /* QuartzCore.framework in Frameworks */, AF1FD7D5158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD7D6158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BC951A6B103B00C098BF /* OpenGL.framework in Frameworks */, AF7836C917DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AF64265709A19229000F4CD4 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD7D7158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD7D8158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C321B15C0FC9C007A6896 /* QuartzCore.framework in Frameworks */, AF1FD7D9158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD7DA158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BC961A6B104500C098BF /* OpenGL.framework in Frameworks */, AF7836CA17DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AF64268309A194B0000F4CD4 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD78B158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD78C158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C320815C0FC9C007A6896 /* QuartzCore.framework in Frameworks */, AF1FD78D158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD78E158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BC821A6B0F3C00C098BF /* OpenGL.framework in Frameworks */, AF7836B617DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AF64277909A1D37A000F4CD4 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD82B158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD82C158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C323015C0FC9C007A6896 /* QuartzCore.framework in Frameworks */, AF1FD82D158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD82E158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BCAB1A6B111E00C098BF /* OpenGL.framework in Frameworks */, AF7836E017DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AF6427B009A2DE36000F4CD4 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FDA3B158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FDA3C158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C32B515C0FC9D007A6896 /* QuartzCore.framework in Frameworks */, AF1FDA3D158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FDA3E158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BD381A6B182100C098BF /* OpenGL.framework in Frameworks */, AF78376817DBA581003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AF68A48619196CF800D41CD1 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF68A48719196CF800D41CD1 /* libjwxyz.a in Frameworks */, AF68A48819196CF800D41CD1 /* ScreenSaver.framework in Frameworks */, AF68A48919196CF800D41CD1 /* QuartzCore.framework in Frameworks */, AF68A48A19196CF800D41CD1 /* Cocoa.framework in Frameworks */, AF68A48B19196CF800D41CD1 /* Carbon.framework in Frameworks */, CEE0BCB01A6B115700C098BF /* OpenGL.framework in Frameworks */, AF68A48C19196CF800D41CD1 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AF73FF2A1A09877F00E485E9 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF73FF2B1A09877F00E485E9 /* libjwxyz.a in Frameworks */, AF73FF2C1A09877F00E485E9 /* ScreenSaver.framework in Frameworks */, AF73FF2D1A09877F00E485E9 /* QuartzCore.framework in Frameworks */, AF73FF2E1A09877F00E485E9 /* Cocoa.framework in Frameworks */, AF73FF2F1A09877F00E485E9 /* Carbon.framework in Frameworks */, CEE0BC6A1A6B0E3800C098BF /* OpenGL.framework in Frameworks */, AF73FF301A09877F00E485E9 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AF7511071782B5B900380EA1 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF7511081782B5B900380EA1 /* libjwxyz.a in Frameworks */, AF7511091782B5B900380EA1 /* ScreenSaver.framework in Frameworks */, AF75110A1782B5B900380EA1 /* QuartzCore.framework in Frameworks */, AF75110B1782B5B900380EA1 /* Cocoa.framework in Frameworks */, AF75110C1782B5B900380EA1 /* Carbon.framework in Frameworks */, CEE0BD0C1A6B167000C098BF /* OpenGL.framework in Frameworks */, AF78373F17DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AF7776EE09B63ABF00EA3033 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD7EF158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD7F0158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C322115C0FC9C007A6896 /* QuartzCore.framework in Frameworks */, AF1FD7F1158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD7F2158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BC9C1A6B108000C098BF /* OpenGL.framework in Frameworks */, AF7836D117DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AF77772209B6416100EA3033 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD8C3158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD8C4158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C325715C0FC9C007A6896 /* QuartzCore.framework in Frameworks */, AF1FD8C5158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD8C6158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BCD11A6B136300C098BF /* OpenGL.framework in Frameworks */, AF78370617DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AF77774609B6446500EA3033 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD94B158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD94C158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C327915C0FC9D007A6896 /* QuartzCore.framework in Frameworks */, AF1FD94D158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD94E158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BCF41A6B157600C098BF /* OpenGL.framework in Frameworks */, AF78372917DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AF77777D09B6497800EA3033 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD95B158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD95C158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C327D15C0FC9D007A6896 /* QuartzCore.framework in Frameworks */, AF1FD95D158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD95E158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BCFD1A6B15D200C098BF /* OpenGL.framework in Frameworks */, AF78372D17DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AF77779709B64A5200EA3033 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD9B7158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD9B8158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C329415C0FC9D007A6896 /* QuartzCore.framework in Frameworks */, AF1FD9B9158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD9BA158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BD121A6B16A800C098BF /* OpenGL.framework in Frameworks */, AF78374517DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AF7777B109B64B2600EA3033 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FDA17158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FDA18158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C32AC15C0FC9D007A6896 /* QuartzCore.framework in Frameworks */, AF1FDA19158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FDA1A158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BD2C1A6B17A200C098BF /* OpenGL.framework in Frameworks */, AF78375E17DBA581003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AF7777D909B64C6B00EA3033 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD97F158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD980158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C328615C0FC9D007A6896 /* QuartzCore.framework in Frameworks */, AF1FD981158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD982158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BD031A6B161700C098BF /* OpenGL.framework in Frameworks */, AF78373617DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AF7777F309B64E3100EA3033 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD94F158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD950158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C327A15C0FC9D007A6896 /* QuartzCore.framework in Frameworks */, AF1FD951158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD952158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BCF51A6B158000C098BF /* OpenGL.framework in Frameworks */, AF78372A17DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AF77781A09B6504400EA3033 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FDA13158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FDA14158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C32AB15C0FC9D007A6896 /* QuartzCore.framework in Frameworks */, AF1FDA15158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FDA16158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BD2B1A6B179900C098BF /* OpenGL.framework in Frameworks */, AF78375D17DBA581003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AF77784D09B6528100EA3033 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD913158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD914158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C326B15C0FC9C007A6896 /* QuartzCore.framework in Frameworks */, AF1FD915158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD916158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BCE51A6B143500C098BF /* OpenGL.framework in Frameworks */, AF78371B17DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AF77786909B6536000EA3033 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD937158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD938158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C327415C0FC9D007A6896 /* QuartzCore.framework in Frameworks */, AF1FD939158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD93A158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BCEF1A6B154200C098BF /* OpenGL.framework in Frameworks */, AF78372417DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AF77788709B6563500EA3033 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD783158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD784158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C320615C0FC9C007A6896 /* QuartzCore.framework in Frameworks */, AF1FD785158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD786158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BC801A6B0F2900C098BF /* OpenGL.framework in Frameworks */, AF7836B417DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AF7778AD09B659C800EA3033 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD733158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD734158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C31F215C0FC9C007A6896 /* QuartzCore.framework in Frameworks */, AF1FD735158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD736158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BC6C1A6B0E4B00C098BF /* OpenGL.framework in Frameworks */, AF7836A017DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AF78D17D142DD8F3002AAF77 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD98B158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD98C158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C328915C0FC9D007A6896 /* QuartzCore.framework in Frameworks */, AF1FD98D158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD98E158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BD061A6B163700C098BF /* OpenGL.framework in Frameworks */, AF78373917DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AF794F6C099748450059A8B0 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD88F158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD890158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C324915C0FC9C007A6896 /* QuartzCore.framework in Frameworks */, AF1FD891158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD892158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BCC41A6B126D00C098BF /* OpenGL.framework in Frameworks */, AF7836F917DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AF794F9609974A320059A8B0 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD8A3158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD8A4158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C324E15C0FC9C007A6896 /* QuartzCore.framework in Frameworks */, AF1FD8A5158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD8A6158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BCC91A6B131300C098BF /* OpenGL.framework in Frameworks */, AF7836FE17DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AF794FD509974FA60059A8B0 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD8BB158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD8BC158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C325515C0FC9C007A6896 /* QuartzCore.framework in Frameworks */, AF1FD8BD158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD8BE158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BCCF1A6B135000C098BF /* OpenGL.framework in Frameworks */, AF78370417DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AF7ACFC819FF0A9200BD752B /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF7ACFC919FF0A9200BD752B /* libjwxyz.a in Frameworks */, AF7ACFCA19FF0A9200BD752B /* ScreenSaver.framework in Frameworks */, AF7ACFCB19FF0A9200BD752B /* QuartzCore.framework in Frameworks */, AF7ACFCC19FF0A9200BD752B /* Cocoa.framework in Frameworks */, AF7ACFCD19FF0A9200BD752B /* Carbon.framework in Frameworks */, CEE0BCF91A6B15AD00C098BF /* OpenGL.framework in Frameworks */, AF7ACFCE19FF0A9200BD752B /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AF918989158FC00A002B5D1E /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( 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 */, AF7F54A417DC249500CE1158 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AF975735099C317000B05160 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD7A3158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD7A4158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C320E15C0FC9C007A6896 /* QuartzCore.framework in Frameworks */, AF1FD7A5158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD7A6158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BC891A6B0FB300C098BF /* OpenGL.framework in Frameworks */, AF7836BD17DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AF97577D099C374A00B05160 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD7CF158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD7D0158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C321915C0FC9C007A6896 /* QuartzCore.framework in Frameworks */, AF1FD7D1158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD7D2158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BC941A6B103100C098BF /* OpenGL.framework in Frameworks */, AF7836C817DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AF9757CA099C3E6300B05160 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD80B158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD80C158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C322815C0FC9C007A6896 /* QuartzCore.framework in Frameworks */, AF1FD80D158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD80E158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BCA31A6B10CB00C098BF /* OpenGL.framework in Frameworks */, AF7836D817DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AF975810099C41D500B05160 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD85F158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD860158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C323D15C0FC9C007A6896 /* QuartzCore.framework in Frameworks */, AF1FD861158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD862158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BCB81A6B11E700C098BF /* OpenGL.framework in Frameworks */, AF7836ED17DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AF97586D099C475900B05160 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD81F158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD820158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C322D15C0FC9C007A6896 /* QuartzCore.framework in Frameworks */, AF1FD821158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD822158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BCA81A6B10FD00C098BF /* OpenGL.framework in Frameworks */, AF7836DD17DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AF975A3E099C681F00B05160 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD7CB158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD7CC158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C321815C0FC9C007A6896 /* QuartzCore.framework in Frameworks */, AF1FD7CD158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD7CE158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BC931A6B102600C098BF /* OpenGL.framework in Frameworks */, AF7836C717DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AF975A74099C6AB200B05160 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD773158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD774158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C320215C0FC9C007A6896 /* QuartzCore.framework in Frameworks */, AF1FD775158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD776158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BC7C1A6B0F0400C098BF /* OpenGL.framework in Frameworks */, AF7836B017DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AF975A8E099C6BC300B05160 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD72B158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD72C158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C31F015C0FC9C007A6896 /* QuartzCore.framework in Frameworks */, AF1FD72D158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD72E158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BC691A6B0E2D00C098BF /* OpenGL.framework in Frameworks */, AF78369E17DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AF975ADF099C6EB100B05160 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD777158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD778158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C320315C0FC9C007A6896 /* QuartzCore.framework in Frameworks */, AF1FD779158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD77A158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BC7D1A6B0F0D00C098BF /* OpenGL.framework in Frameworks */, AF7836B117DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AF975B04099C6FE400B05160 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD7C7158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD7C8158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C321715C0FC9C007A6896 /* QuartzCore.framework in Frameworks */, AF1FD7C9158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD7CA158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BC921A6B101900C098BF /* OpenGL.framework in Frameworks */, AF7836C617DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AF975C1A099C8C1500B05160 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD797158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD798158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C320B15C0FC9C007A6896 /* QuartzCore.framework in Frameworks */, AF1FD799158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD79A158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BC851A6B0F5D00C098BF /* OpenGL.framework in Frameworks */, AF7836B917DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AF975C46099C8DCF00B05160 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD78F158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD790158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C320915C0FC9C007A6896 /* QuartzCore.framework in Frameworks */, AF1FD791158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD792158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BC831A6B0F4500C098BF /* OpenGL.framework in Frameworks */, AF7836B717DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AF975C66099C8F3F00B05160 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD7DF158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD7E0158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C321D15C0FC9C007A6896 /* QuartzCore.framework in Frameworks */, AF1FD7E1158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD7E2158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BC981A6B105800C098BF /* OpenGL.framework in Frameworks */, AF7836CC17DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AF975D5B099CA0F000B05160 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD813158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD814158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C322A15C0FC9C007A6896 /* QuartzCore.framework in Frameworks */, AF1FD815158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD816158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BCA51A6B10DE00C098BF /* OpenGL.framework in Frameworks */, AF7836DA17DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AF976FBA0989CAA2001F8B92 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD763158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD764158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C31FE15C0FC9C007A6896 /* QuartzCore.framework in Frameworks */, AF1FD765158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD766158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BC781A6B0EDD00C098BF /* OpenGL.framework in Frameworks */, AF7836AC17DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AF9770390989D1E6001F8B92 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD817158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD818158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C322B15C0FC9C007A6896 /* QuartzCore.framework in Frameworks */, AF1FD819158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD81A158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BCA61A6B10E900C098BF /* OpenGL.framework in Frameworks */, AF7836DB17DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AF9770760989D2F6001F8B92 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD727158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD728158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C31EF15C0FC9C007A6896 /* QuartzCore.framework in Frameworks */, AF1FD729158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD72A158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BC681A6B0E1800C098BF /* OpenGL.framework in Frameworks */, AF78369D17DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AF9771D50989DC4A001F8B92 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AFEB9C37158FFF88003974F3 /* ScreenSaver.framework in Frameworks */, AF2C31E615C0F7FE007A6896 /* QuartzCore.framework in Frameworks */, AF918B99158FF045002B5D1E /* Cocoa.framework in Frameworks */, AF918B9A158FF04C002B5D1E /* Carbon.framework in Frameworks */, AF78369717DB9F25003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AF998EE20A083DB30051049D /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FDA2B158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FDA2C158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C32B115C0FC9D007A6896 /* QuartzCore.framework in Frameworks */, AF1FDA2D158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FDA2E158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BD311A6B17D300C098BF /* OpenGL.framework in Frameworks */, AF78376317DBA581003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AF9D466E09B5109C006E59CF /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD75F158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD760158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C31FD15C0FC9C007A6896 /* QuartzCore.framework in Frameworks */, AF1FD761158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD762158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BC771A6B0ED300C098BF /* OpenGL.framework in Frameworks */, AF7836AB17DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AF9D474C09B5300A006E59CF /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD823158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD824158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C322E15C0FC9C007A6896 /* QuartzCore.framework in Frameworks */, AF1FD825158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD826158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BCA91A6B110700C098BF /* OpenGL.framework in Frameworks */, AF7836DE17DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AF9D476709B53166006E59CF /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD87B158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD87C158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C324415C0FC9C007A6896 /* QuartzCore.framework in Frameworks */, AF1FD87D158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD87E158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BCBF1A6B123500C098BF /* OpenGL.framework in Frameworks */, AF7836F417DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AF9D48E309B53322006E59CF /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD73F158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD740158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C31F515C0FC9C007A6896 /* QuartzCore.framework in Frameworks */, AF1FD741158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD742158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BC6F1A6B0E6700C098BF /* OpenGL.framework in Frameworks */, AF7836A317DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AF9D48FC09B535DA006E59CF /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD76B158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD76C158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C320015C0FC9C007A6896 /* QuartzCore.framework in Frameworks */, AF1FD76D158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD76E158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BC7A1A6B0EF100C098BF /* OpenGL.framework in Frameworks */, AF7836AE17DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AF9D493309B53CBA006E59CF /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD80F158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD810158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C322915C0FC9C007A6896 /* QuartzCore.framework in Frameworks */, AF1FD811158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD812158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BCA41A6B10D400C098BF /* OpenGL.framework in Frameworks */, AF7836D917DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AF9D495C09B53FC9006E59CF /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD81B158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD81C158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C322C15C0FC9C007A6896 /* QuartzCore.framework in Frameworks */, AF1FD81D158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD81E158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BCA71A6B10F300C098BF /* OpenGL.framework in Frameworks */, AF7836DC17DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AF9D497409B5411D006E59CF /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD843158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD844158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C323615C0FC9C007A6896 /* QuartzCore.framework in Frameworks */, AF1FD845158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD846158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BCB21A6B116B00C098BF /* OpenGL.framework in Frameworks */, AF7836E617DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AF9D499F09B544C2006E59CF /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD82F158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD830158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C323115C0FC9C007A6896 /* QuartzCore.framework in Frameworks */, AF1FD831158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD832158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BCAC1A6B112A00C098BF /* OpenGL.framework in Frameworks */, AF7836E117DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AF9D4C7109B59F27006E59CF /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD86B158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD86C158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C324015C0FC9C007A6896 /* QuartzCore.framework in Frameworks */, AF1FD86D158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD86E158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BCBB1A6B120600C098BF /* OpenGL.framework in Frameworks */, AF7836F017DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AF9D4CEF09B5AA8E006E59CF /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD7FB158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD7FC158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C322415C0FC9C007A6896 /* QuartzCore.framework in Frameworks */, AF1FD7FD158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD7FE158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BC9F1A6B10A000C098BF /* OpenGL.framework in Frameworks */, AF7836D417DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AF9D4D8709B5B2DC006E59CF /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD863158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD864158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C323E15C0FC9C007A6896 /* QuartzCore.framework in Frameworks */, AF1FD865158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD866158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BCB91A6B11F100C098BF /* OpenGL.framework in Frameworks */, AF7836EE17DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AF9D4DB809B5B71E006E59CF /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD73B158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD73C158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C31F415C0FC9C007A6896 /* QuartzCore.framework in Frameworks */, AF1FD73D158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD73E158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BC6E1A6B0E5E00C098BF /* OpenGL.framework in Frameworks */, AF7836A217DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AF9D4DF609B5BB19006E59CF /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD71F158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD720158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C31ED15C0FC9C007A6896 /* QuartzCore.framework in Frameworks */, AF1FD721158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD722158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BC671A6B0E0600C098BF /* OpenGL.framework in Frameworks */, AF78369B17DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AF9E7EBC190F4C1B00A8B01F /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AFA211941CD59DAF00C0D2A1 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AFA211951CD59DAF00C0D2A1 /* libjwxyz.a in Frameworks */, AFA211961CD59DAF00C0D2A1 /* ScreenSaver.framework in Frameworks */, AFA211971CD59DAF00C0D2A1 /* QuartzCore.framework in Frameworks */, AFA211981CD59DAF00C0D2A1 /* Cocoa.framework in Frameworks */, AFA211991CD59DAF00C0D2A1 /* Carbon.framework in Frameworks */, AFA2119A1CD59DAF00C0D2A1 /* OpenGL.framework in Frameworks */, AFA2119B1CD59DAF00C0D2A1 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AFA339370B058505002B0E7D /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD84F158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD850158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C323915C0FC9C007A6896 /* QuartzCore.framework in Frameworks */, AF1FD851158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD852158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BCB51A6B118C00C098BF /* OpenGL.framework in Frameworks */, AF7836E917DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AFA33BC50B058740002B0E7D /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD853158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD854158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C323A15C0FC9C007A6896 /* QuartzCore.framework in Frameworks */, AF1FD855158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD856158FF96500C40F17 /* Carbon.framework in Frameworks */, AF7836EA17DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AFA5594F099330B000F3E977 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD90F158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD910158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C326A15C0FC9C007A6896 /* QuartzCore.framework in Frameworks */, AF1FD911158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD912158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BCE41A6B142C00C098BF /* OpenGL.framework in Frameworks */, AF78371A17DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AFA559740993317900F3E977 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD9BB158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD9BC158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C329515C0FC9D007A6896 /* QuartzCore.framework in Frameworks */, AF1FD9BD158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD9BE158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BD131A6B16B200C098BF /* OpenGL.framework in Frameworks */, AF78374617DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AFA559990993322100F3E977 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FDA1B158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FDA1C158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C32AD15C0FC9D007A6896 /* QuartzCore.framework in Frameworks */, AF1FDA1D158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FDA1E158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BD2D1A6B17AD00C098BF /* OpenGL.framework in Frameworks */, AF78375F17DBA581003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AFA559BC0993328000F3E977 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD9C7158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD9C8158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C329815C0FC9D007A6896 /* QuartzCore.framework in Frameworks */, AF1FD9C9158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD9CA158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BD161A6B16D000C098BF /* OpenGL.framework in Frameworks */, AF78374917DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AFA559D60993330600F3E977 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD9EF158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD9F0158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C32A215C0FC9D007A6896 /* QuartzCore.framework in Frameworks */, AF1FD9F1158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD9F2158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BD221A6B174400C098BF /* OpenGL.framework in Frameworks */, AF78375417DBA581003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AFA55A0A0993340300F3E977 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FDA0F158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FDA10158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C32AA15C0FC9D007A6896 /* QuartzCore.framework in Frameworks */, AF1FDA11158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FDA12158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BD2A1A6B178F00C098BF /* OpenGL.framework in Frameworks */, AF78375C17DBA581003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AFA55A27099334A000F3E977 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FDA0B158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FDA0C158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C32A915C0FC9D007A6896 /* QuartzCore.framework in Frameworks */, AF1FDA0D158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FDA0E158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BD291A6B178600C098BF /* OpenGL.framework in Frameworks */, AF78375B17DBA581003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AFA55A800993364300F3E977 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD9A7158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD9A8158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C329015C0FC9D007A6896 /* QuartzCore.framework in Frameworks */, AF1FD9A9158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD9AA158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BD0E1A6B168200C098BF /* OpenGL.framework in Frameworks */, AF78374117DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AFA55AD609933CEF00F3E977 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD90B158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD90C158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C326915C0FC9C007A6896 /* QuartzCore.framework in Frameworks */, AF1FD90D158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD90E158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BCE31A6B142200C098BF /* OpenGL.framework in Frameworks */, AF78371917DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AFA55B1309933E0500F3E977 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD977158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD978158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C328415C0FC9D007A6896 /* QuartzCore.framework in Frameworks */, AF1FD979158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD97A158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BD011A6B160200C098BF /* OpenGL.framework in Frameworks */, AF78373417DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AFA55B2C09933E8D00F3E977 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD9E7158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD9E8158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C32A015C0FC9D007A6896 /* QuartzCore.framework in Frameworks */, AF1FD9E9158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD9EA158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BD1F1A6B172800C098BF /* OpenGL.framework in Frameworks */, AF78375117DBA581003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AFA55B8009933F7200F3E977 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD9FF158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FDA00158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C32A615C0FC9D007A6896 /* QuartzCore.framework in Frameworks */, AF1FDA01158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FDA02158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BD251A6B176000C098BF /* OpenGL.framework in Frameworks */, AF78375817DBA581003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AFA55B9809933FDA00F3E977 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD95F158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD960158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C327E15C0FC9D007A6896 /* QuartzCore.framework in Frameworks */, AF1FD961158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD962158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BCFA1A6B15B600C098BF /* OpenGL.framework in Frameworks */, AF78372E17DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AFA55BB2099340CE00F3E977 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD917158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD918158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C326C15C0FC9C007A6896 /* QuartzCore.framework in Frameworks */, AF1FD919158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD91A158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BCE61A6B143E00C098BF /* OpenGL.framework in Frameworks */, AF78371C17DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AFA55BEB0993429100F3E977 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD9B3158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD9B4158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C329315C0FC9D007A6896 /* QuartzCore.framework in Frameworks */, AF1FD9B5158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD9B6158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BD111A6B169F00C098BF /* OpenGL.framework in Frameworks */, AF78374417DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AFA55C150993431300F3E977 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD93F158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD940158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C327615C0FC9D007A6896 /* QuartzCore.framework in Frameworks */, AF1FD941158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD942158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BCF11A6B155700C098BF /* OpenGL.framework in Frameworks */, AF78372617DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AFA55C7E099349A600F3E977 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD983158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD984158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C328715C0FC9D007A6896 /* QuartzCore.framework in Frameworks */, AF1FD985158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD986158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BD041A6B162400C098BF /* OpenGL.framework in Frameworks */, AF78373717DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AFA55CB009934BB200F3E977 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD907158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD908158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C326815C0FC9C007A6896 /* QuartzCore.framework in Frameworks */, AF1FD909158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD90A158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BCE21A6B141900C098BF /* OpenGL.framework in Frameworks */, AF78371817DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AFA55CD309934CE400F3E977 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FDA4B158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FDA4C158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C32B915C0FC9D007A6896 /* QuartzCore.framework in Frameworks */, AF1FDA4D158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FDA4E158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BD361A6B180D00C098BF /* OpenGL.framework in Frameworks */, AF78376C17DBA581003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AFA55D430993565300F3E977 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD9FB158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD9FC158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C32A515C0FC9D007A6896 /* QuartzCore.framework in Frameworks */, AF1FD9FD158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD9FE158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BD241A6B175700C098BF /* OpenGL.framework in Frameworks */, AF78375717DBA581003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AFA55D690993584B00F3E977 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD927158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD928158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C327015C0FC9C007A6896 /* QuartzCore.framework in Frameworks */, AF1FD929158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD92A158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BCEB1A6B151A00C098BF /* OpenGL.framework in Frameworks */, AF78372017DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AFA55D86099358C400F3E977 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FDA07158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FDA08158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C32A815C0FC9D007A6896 /* QuartzCore.framework in Frameworks */, AF1FDA09158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FDA0A158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BD281A6B177C00C098BF /* OpenGL.framework in Frameworks */, AF78375A17DBA581003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AFA55DCF09935D7000F3E977 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD9AB158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD9AC158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C329115C0FC9D007A6896 /* QuartzCore.framework in Frameworks */, AF1FD9AD158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD9AE158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BD0F1A6B168D00C098BF /* OpenGL.framework in Frameworks */, AF78374217DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AFA55DF809935E4900F3E977 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD9EB158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD9EC158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C32A115C0FC9D007A6896 /* QuartzCore.framework in Frameworks */, AF1FD9ED158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD9EE158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BD211A6B173A00C098BF /* OpenGL.framework in Frameworks */, AF78375317DBA581003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AFA55E1409935EDC00F3E977 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD93B158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD93C158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C327515C0FC9D007A6896 /* QuartzCore.framework in Frameworks */, AF1FD93D158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD93E158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BCF01A6B154E00C098BF /* OpenGL.framework in Frameworks */, AF78372517DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AFA55E3709935F8E00F3E977 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD963158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD964158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C327F15C0FC9D007A6896 /* QuartzCore.framework in Frameworks */, AF1FD965158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD966158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BCFB1A6B15BF00C098BF /* OpenGL.framework in Frameworks */, AF78372F17DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AFA55E5509935FF900F3E977 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD953158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD954158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C327B15C0FC9D007A6896 /* QuartzCore.framework in Frameworks */, AF1FD955158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD956158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BCF61A6B158C00C098BF /* OpenGL.framework in Frameworks */, AF78372B17DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AFA55ED8099360E300F3E977 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD903158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD904158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C326715C0FC9C007A6896 /* QuartzCore.framework in Frameworks */, AF1FD905158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD906158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BCE11A6B140F00C098BF /* OpenGL.framework in Frameworks */, AF78371717DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AFA55F13099361B700F3E977 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD997158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD998158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C328C15C0FC9D007A6896 /* QuartzCore.framework in Frameworks */, AF1FD999158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD99A158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BD091A6B165300C098BF /* OpenGL.framework in Frameworks */, AF78373C17DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AFA55F310993622F00F3E977 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD9A3158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD9A4158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C328F15C0FC9D007A6896 /* QuartzCore.framework in Frameworks */, AF1FD9A5158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD9A6158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BD0D1A6B167900C098BF /* OpenGL.framework in Frameworks */, AF78374017DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AFA55F490993629000F3E977 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD98F158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD990158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C328A15C0FC9D007A6896 /* QuartzCore.framework in Frameworks */, AF1FD991158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD992158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BD071A6B164000C098BF /* OpenGL.framework in Frameworks */, AF78373A17DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AFA55F790993643600F3E977 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD973158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD974158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C328315C0FC9D007A6896 /* QuartzCore.framework in Frameworks */, AF1FD975158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD976158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BD001A6B15F800C098BF /* OpenGL.framework in Frameworks */, AF78373317DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AFA55FDA09936BFA00F3E977 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD92B158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD92C158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C327115C0FC9C007A6896 /* QuartzCore.framework in Frameworks */, AF1FD92D158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD92E158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BCEC1A6B152300C098BF /* OpenGL.framework in Frameworks */, AF78372117DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AFA5600009936C6D00F3E977 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD96F158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD970158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C328215C0FC9D007A6896 /* QuartzCore.framework in Frameworks */, AF1FD971158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD972158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BCFF1A6B15EE00C098BF /* OpenGL.framework in Frameworks */, AF78373217DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AFA5601B09936CC800F3E977 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD8FB158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD8FC158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C326515C0FC9C007A6896 /* QuartzCore.framework in Frameworks */, AF1FD8FD158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD8FE158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BCDF1A6B13FC00C098BF /* OpenGL.framework in Frameworks */, AF78371517DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AFA5603909936D5100F3E977 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD947158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD948158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C327815C0FC9D007A6896 /* QuartzCore.framework in Frameworks */, AF1FD949158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD94A158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BCF31A6B156C00C098BF /* OpenGL.framework in Frameworks */, AF78372817DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AFA5605109936E2100F3E977 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD8E3158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD8E4158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C325F15C0FC9C007A6896 /* QuartzCore.framework in Frameworks */, AF1FD8E5158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD8E6158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BCD91A6B13C000C098BF /* OpenGL.framework in Frameworks */, AF78370F17DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AFA5606909936F3800F3E977 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD8EB158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD8EC158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C326115C0FC9C007A6896 /* QuartzCore.framework in Frameworks */, AF1FD8ED158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD8EE158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BCDB1A6B13D300C098BF /* OpenGL.framework in Frameworks */, AF78371117DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AFA560B50993718D00F3E977 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD9DF158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD9E0158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C329E15C0FC9D007A6896 /* QuartzCore.framework in Frameworks */, AF1FD9E1158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD9E2158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BD1C1A6B170A00C098BF /* OpenGL.framework in Frameworks */, AF78374F17DBA581003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AFA561040993781600F3E977 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD9C3158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD9C4158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C329715C0FC9D007A6896 /* QuartzCore.framework in Frameworks */, AF1FD9C5158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD9C6158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BD151A6B16C500C098BF /* OpenGL.framework in Frameworks */, AF78374817DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AFA5615F09937C0D00F3E977 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD8F7158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD8F8158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C326415C0FC9C007A6896 /* QuartzCore.framework in Frameworks */, AF1FD8F9158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD8FA158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BCDE1A6B13F100C098BF /* OpenGL.framework in Frameworks */, AF78371417DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AFA5618209937CF100F3E977 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD9CB158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD9CC158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C329915C0FC9D007A6896 /* QuartzCore.framework in Frameworks */, AF1FD9CD158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD9CE158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BD171A6B16DA00C098BF /* OpenGL.framework in Frameworks */, AF78374A17DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AFA561A409937D7E00F3E977 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD9DB158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD9DC158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C329D15C0FC9D007A6896 /* QuartzCore.framework in Frameworks */, AF1FD9DD158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD9DE158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BD1B1A6B170100C098BF /* OpenGL.framework in Frameworks */, AF78374E17DBA581003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AFA5620E0993849F00F3E977 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD9E3158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD9E4158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C329F15C0FC9D007A6896 /* QuartzCore.framework in Frameworks */, AF1FD9E5158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD9E6158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BD1E1A6B171E00C098BF /* OpenGL.framework in Frameworks */, AF78375017DBA581003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AFA562260993852500F3E977 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD9D3158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD9D4158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C329B15C0FC9D007A6896 /* QuartzCore.framework in Frameworks */, AF1FD9D5158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD9D6158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BD191A6B16EE00C098BF /* OpenGL.framework in Frameworks */, AF78374C17DBA581003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AFA562C6099392C600F3E977 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD8FF158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD900158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C326615C0FC9C007A6896 /* QuartzCore.framework in Frameworks */, AF1FD901158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD902158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BCE01A6B140500C098BF /* OpenGL.framework in Frameworks */, AF78371617DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AFA562E1099393C900F3E977 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD8E7158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD8E8158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C326015C0FC9C007A6896 /* QuartzCore.framework in Frameworks */, AF1FD8E9158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD8EA158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BCDA1A6B13C900C098BF /* OpenGL.framework in Frameworks */, AF78371017DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AFA562F90993943B00F3E977 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FDA23158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FDA24158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C32AF15C0FC9D007A6896 /* QuartzCore.framework in Frameworks */, AF1FDA25158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FDA26158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BD2F1A6B17BF00C098BF /* OpenGL.framework in Frameworks */, AF78376117DBA581003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AFA5631B0993951000F3E977 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD91F158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD920158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C326E15C0FC9C007A6896 /* QuartzCore.framework in Frameworks */, AF1FD921158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD922158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BCE91A6B147900C098BF /* OpenGL.framework in Frameworks */, AF78371E17DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AFA56338099395ED00F3E977 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD96B158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD96C158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C328115C0FC9D007A6896 /* QuartzCore.framework in Frameworks */, AF1FD96D158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD96E158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BCFE1A6B15E300C098BF /* OpenGL.framework in Frameworks */, AF78373117DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AFA56358099396C000F3E977 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD923158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD924158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C326F15C0FC9C007A6896 /* QuartzCore.framework in Frameworks */, AF1FD925158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD926158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BCEA1A6B150F00C098BF /* OpenGL.framework in Frameworks */, AF78371F17DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AFA56380099397B300F3E977 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FDA27158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FDA28158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C32B015C0FC9D007A6896 /* QuartzCore.framework in Frameworks */, AF1FDA29158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FDA2A158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BD301A6B17C900C098BF /* OpenGL.framework in Frameworks */, AF78376217DBA581003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AFA563AB099398BB00F3E977 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD99F158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD9A0158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C328E15C0FC9D007A6896 /* QuartzCore.framework in Frameworks */, AF1FD9A1158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD9A2158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BD0B1A6B166700C098BF /* OpenGL.framework in Frameworks */, AF78373E17DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AFACE87B1CC83458008B24CD /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AFACE87C1CC83458008B24CD /* libjwxyz.a in Frameworks */, AFACE87D1CC83458008B24CD /* ScreenSaver.framework in Frameworks */, AFACE87E1CC83458008B24CD /* QuartzCore.framework in Frameworks */, AFACE87F1CC83458008B24CD /* Cocoa.framework in Frameworks */, AFACE8801CC83458008B24CD /* Carbon.framework in Frameworks */, AFACE8811CC83458008B24CD /* OpenGL.framework in Frameworks */, AFACE8821CC83458008B24CD /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AFB591AF178B812C00EA4005 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AFB591B0178B812C00EA4005 /* libjwxyz.a in Frameworks */, AFB591B1178B812C00EA4005 /* ScreenSaver.framework in Frameworks */, AFB591B2178B812C00EA4005 /* QuartzCore.framework in Frameworks */, AFB591B3178B812C00EA4005 /* Cocoa.framework in Frameworks */, AFB591B4178B812C00EA4005 /* Carbon.framework in Frameworks */, CEE0BC871A6B0F7000C098BF /* OpenGL.framework in Frameworks */, AF7836BB17DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AFBFE755178642DC00432B21 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AFBFE756178642DC00432B21 /* ScreenSaver.framework in Frameworks */, AFBFE757178642DC00432B21 /* QuartzCore.framework in Frameworks */, AFBFE758178642DC00432B21 /* Cocoa.framework in Frameworks */, AFBFE759178642DC00432B21 /* Carbon.framework in Frameworks */, CEE0BC661A6B0DBF00C098BF /* OpenGL.framework in Frameworks */, AF78369C17DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AFBFE775178647FE00432B21 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AFBFE776178647FE00432B21 /* ScreenSaver.framework in Frameworks */, AFBFE777178647FE00432B21 /* QuartzCore.framework in Frameworks */, AFBFE778178647FE00432B21 /* Cocoa.framework in Frameworks */, AFBFE779178647FE00432B21 /* Carbon.framework in Frameworks */, CEE0BC9D1A6B108B00C098BF /* OpenGL.framework in Frameworks */, AF7836D217DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AFC0E8B31CDC601A008CAFAC /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AFC0E8B41CDC601A008CAFAC /* libjwxyz.a in Frameworks */, AFC0E8B51CDC601A008CAFAC /* ScreenSaver.framework in Frameworks */, AFC0E8B61CDC601A008CAFAC /* QuartzCore.framework in Frameworks */, AFC0E8B71CDC601A008CAFAC /* Cocoa.framework in Frameworks */, AFC0E8B81CDC601A008CAFAC /* Carbon.framework in Frameworks */, AFC0E8B91CDC601A008CAFAC /* OpenGL.framework in Frameworks */, AFC0E8BA1CDC601A008CAFAC /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AFCF83431AF5B515008BB7E1 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AFCF83441AF5B515008BB7E1 /* libjwxyz.a in Frameworks */, AFCF83451AF5B515008BB7E1 /* ScreenSaver.framework in Frameworks */, AFCF83461AF5B515008BB7E1 /* QuartzCore.framework in Frameworks */, AFCF83471AF5B515008BB7E1 /* Cocoa.framework in Frameworks */, AFCF83481AF5B515008BB7E1 /* Carbon.framework in Frameworks */, AFCF83491AF5B515008BB7E1 /* OpenGL.framework in Frameworks */, AFCF834A1AF5B515008BB7E1 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AFD51B240F063B4A00471C02 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD9CF158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD9D0158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C329A15C0FC9D007A6896 /* QuartzCore.framework in Frameworks */, AF1FD9D1158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD9D2158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BD181A6B16E300C098BF /* OpenGL.framework in Frameworks */, AF78374B17DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AFD56DF90996A03800BA26F7 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD987158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD988158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C328815C0FC9D007A6896 /* QuartzCore.framework in Frameworks */, AF1FD989158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD98A158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BD051A6B162E00C098BF /* OpenGL.framework in Frameworks */, AF78373817DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AFD56EB60996A72600BA26F7 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD887158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD888158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C324715C0FC9C007A6896 /* QuartzCore.framework in Frameworks */, AF1FD889158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD88A158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BCC21A6B125800C098BF /* OpenGL.framework in Frameworks */, AF7836F717DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AFD56EE20996A95700BA26F7 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FDA47158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FDA48158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C32B815C0FC9D007A6896 /* QuartzCore.framework in Frameworks */, AF1FDA49158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FDA4A158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BD3B1A6B184100C098BF /* OpenGL.framework in Frameworks */, AF78376B17DBA581003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AFD56F130996AAFA00BA26F7 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FDA7F158FF96600C40F17 /* libjwxyz.a in Frameworks */, AF1FDA80158FF96600C40F17 /* ScreenSaver.framework in Frameworks */, AF2C32C615C0FC9D007A6896 /* QuartzCore.framework in Frameworks */, AF1FDA81158FF96600C40F17 /* Cocoa.framework in Frameworks */, AF1FDA82158FF96600C40F17 /* Carbon.framework in Frameworks */, CEE0BD481A6B18C400C098BF /* OpenGL.framework in Frameworks */, AF78377917DBA581003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AFD56F2B0996AB8A00BA26F7 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD8AB158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD8AC158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C325015C0FC9C007A6896 /* QuartzCore.framework in Frameworks */, AF1FD8AD158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD8AE158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BCCB1A6B132800C098BF /* OpenGL.framework in Frameworks */, AF78370017DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AFD56F570996AEEE00BA26F7 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD8AF158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD8B0158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C325115C0FC9C007A6896 /* QuartzCore.framework in Frameworks */, AF1FD8B1158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD8B2158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BCCC1A6B133300C098BF /* OpenGL.framework in Frameworks */, AF78370117DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AFD56F730996B01600BA26F7 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD8B3158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD8B4158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C325215C0FC9C007A6896 /* QuartzCore.framework in Frameworks */, AF1FD8B5158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD8B6158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BCCD1A6B133D00C098BF /* OpenGL.framework in Frameworks */, AF78370217DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AFD56F940996B09400BA26F7 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FDA5B158FF96600C40F17 /* libjwxyz.a in Frameworks */, AF1FDA5C158FF96600C40F17 /* ScreenSaver.framework in Frameworks */, AF2C32BD15C0FC9D007A6896 /* QuartzCore.framework in Frameworks */, AF1FDA5D158FF96600C40F17 /* Cocoa.framework in Frameworks */, AF1FDA5E158FF96600C40F17 /* Carbon.framework in Frameworks */, CEE0BD3F1A6B186C00C098BF /* OpenGL.framework in Frameworks */, AF78377017DBA581003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AFD56FAB0996B10F00BA26F7 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FDA5F158FF96600C40F17 /* libjwxyz.a in Frameworks */, AF1FDA60158FF96600C40F17 /* ScreenSaver.framework in Frameworks */, AF2C32BE15C0FC9D007A6896 /* QuartzCore.framework in Frameworks */, AF1FDA61158FF96600C40F17 /* Cocoa.framework in Frameworks */, AF1FDA62158FF96600C40F17 /* Carbon.framework in Frameworks */, CEE0BD401A6B187500C098BF /* OpenGL.framework in Frameworks */, AF78377117DBA581003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AFD56FC10996B18F00BA26F7 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FDA63158FF96600C40F17 /* libjwxyz.a in Frameworks */, AF1FDA64158FF96600C40F17 /* ScreenSaver.framework in Frameworks */, AF2C32BF15C0FC9D007A6896 /* QuartzCore.framework in Frameworks */, AF1FDA65158FF96600C40F17 /* Cocoa.framework in Frameworks */, AF1FDA66158FF96600C40F17 /* Carbon.framework in Frameworks */, CEE0BD411A6B188100C098BF /* OpenGL.framework in Frameworks */, AF78377217DBA581003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AFD56FD70996B20900BA26F7 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FDA67158FF96600C40F17 /* libjwxyz.a in Frameworks */, AF1FDA68158FF96600C40F17 /* ScreenSaver.framework in Frameworks */, AF2C32C015C0FC9D007A6896 /* QuartzCore.framework in Frameworks */, AF1FDA69158FF96600C40F17 /* Cocoa.framework in Frameworks */, AF1FDA6A158FF96600C40F17 /* Carbon.framework in Frameworks */, CEE0BD421A6B188B00C098BF /* OpenGL.framework in Frameworks */, AF78377317DBA581003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AFD570000996B43800BA26F7 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD8C7158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD8C8158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C325815C0FC9C007A6896 /* QuartzCore.framework in Frameworks */, AF1FD8C9158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD8CA158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BCD21A6B136C00C098BF /* OpenGL.framework in Frameworks */, AF78370717DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AFD570170996B4CC00BA26F7 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD8CF158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD8D0158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C325A15C0FC9C007A6896 /* QuartzCore.framework in Frameworks */, AF1FD8D1158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD8D2158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BCD41A6B137F00C098BF /* OpenGL.framework in Frameworks */, AF78370917DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AFD5702E0996B56D00BA26F7 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FDA73158FF96600C40F17 /* libjwxyz.a in Frameworks */, AF1FDA74158FF96600C40F17 /* ScreenSaver.framework in Frameworks */, AF2C32C315C0FC9D007A6896 /* QuartzCore.framework in Frameworks */, AF1FDA75158FF96600C40F17 /* Cocoa.framework in Frameworks */, AF1FDA76158FF96600C40F17 /* Carbon.framework in Frameworks */, CEE0BD451A6B18A900C098BF /* OpenGL.framework in Frameworks */, AF78377617DBA581003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AFD5704B0996B61600BA26F7 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FDA77158FF96600C40F17 /* libjwxyz.a in Frameworks */, AF1FDA78158FF96600C40F17 /* ScreenSaver.framework in Frameworks */, AF2C32C415C0FC9D007A6896 /* QuartzCore.framework in Frameworks */, AF1FDA79158FF96600C40F17 /* Cocoa.framework in Frameworks */, AF1FDA7A158FF96600C40F17 /* Carbon.framework in Frameworks */, CEE0BD461A6B18B200C098BF /* OpenGL.framework in Frameworks */, AF78377717DBA581003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AFD570610996B6A300BA26F7 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD89F158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD8A0158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C324D15C0FC9C007A6896 /* QuartzCore.framework in Frameworks */, AF1FD8A1158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD8A2158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BCC81A6B130A00C098BF /* OpenGL.framework in Frameworks */, AF7836FD17DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AFD570770996B72700BA26F7 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD8BF158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD8C0158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C325615C0FC9C007A6896 /* QuartzCore.framework in Frameworks */, AF1FD8C1158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD8C2158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BCD01A6B135900C098BF /* OpenGL.framework in Frameworks */, AF78370517DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AFD5708D0996B80300BA26F7 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD8DF158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD8E0158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C325E15C0FC9C007A6896 /* QuartzCore.framework in Frameworks */, AF1FD8E1158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD8E2158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BCD81A6B13B500C098BF /* OpenGL.framework in Frameworks */, AF78370D17DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AFD570A30996B88E00BA26F7 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FDA87158FF96600C40F17 /* libjwxyz.a in Frameworks */, AF1FDA88158FF96600C40F17 /* ScreenSaver.framework in Frameworks */, AF2C32C815C0FC9D007A6896 /* QuartzCore.framework in Frameworks */, AF1FDA89158FF96600C40F17 /* Cocoa.framework in Frameworks */, AF1FDA8A158FF96600C40F17 /* Carbon.framework in Frameworks */, CEE0BD4A1A6B18D700C098BF /* OpenGL.framework in Frameworks */, AF78377B17DBA581003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AFD570B90996B93000BA26F7 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FDA6F158FF96600C40F17 /* libjwxyz.a in Frameworks */, AF1FDA70158FF96600C40F17 /* ScreenSaver.framework in Frameworks */, AF2C32C215C0FC9D007A6896 /* QuartzCore.framework in Frameworks */, AF1FDA71158FF96600C40F17 /* Cocoa.framework in Frameworks */, AF1FDA72158FF96600C40F17 /* Carbon.framework in Frameworks */, CEE0BD441A6B189F00C098BF /* OpenGL.framework in Frameworks */, AF78377517DBA581003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AFD570D10996B9F800BA26F7 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FDA37158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FDA38158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C32B415C0FC9D007A6896 /* QuartzCore.framework in Frameworks */, AF1FDA39158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FDA3A158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BD371A6B181700C098BF /* OpenGL.framework in Frameworks */, AF78376717DBA581003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AFD570F20996BBBF00BA26F7 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD8A7158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD8A8158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C324F15C0FC9C007A6896 /* QuartzCore.framework in Frameworks */, AF1FD8A9158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD8AA158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BCCA1A6B131E00C098BF /* OpenGL.framework in Frameworks */, AF7836FF17DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AFD5711B0996BE9300BA26F7 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD893158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD894158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C324A15C0FC9C007A6896 /* QuartzCore.framework in Frameworks */, AF1FD895158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD896158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BCC51A6B127700C098BF /* OpenGL.framework in Frameworks */, AF7836FA17DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AFD571340996BF2E00BA26F7 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD87F158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD880158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C324515C0FC9C007A6896 /* QuartzCore.framework in Frameworks */, AF1FD881158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD882158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BCC01A6B124400C098BF /* OpenGL.framework in Frameworks */, AF7836F517DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AFD5714B0996C01700BA26F7 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD89B158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD89C158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C324C15C0FC9C007A6896 /* QuartzCore.framework in Frameworks */, AF1FD89D158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD89E158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BCC71A6B130000C098BF /* OpenGL.framework in Frameworks */, AF7836FC17DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AFD571610996C0CE00BA26F7 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD8DB158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD8DC158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C325D15C0FC9C007A6896 /* QuartzCore.framework in Frameworks */, AF1FD8DD158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD8DE158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BCD71A6B13AA00C098BF /* OpenGL.framework in Frameworks */, AF78370C17DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AFD571BD0996D9DC00BA26F7 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FDA57158FF96600C40F17 /* libjwxyz.a in Frameworks */, AF1FDA58158FF96600C40F17 /* ScreenSaver.framework in Frameworks */, AF2C32BC15C0FC9D007A6896 /* QuartzCore.framework in Frameworks */, AF1FDA59158FF96600C40F17 /* Cocoa.framework in Frameworks */, AF1FDA5A158FF96600C40F17 /* Carbon.framework in Frameworks */, CEE0BD3E1A6B186200C098BF /* OpenGL.framework in Frameworks */, AF78376F17DBA581003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AFD5722A0996E4A300BA26F7 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD8D7158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD8D8158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C325C15C0FC9C007A6896 /* QuartzCore.framework in Frameworks */, AF1FD8D9158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD8DA158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BCD61A6B13A100C098BF /* OpenGL.framework in Frameworks */, AF78370B17DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AFD572750996EE8500BA26F7 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD8CB158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD8CC158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C325915C0FC9C007A6896 /* QuartzCore.framework in Frameworks */, AF1FD8CD158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD8CE158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BCD31A6B137600C098BF /* OpenGL.framework in Frameworks */, AF78370817DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AFD572AD0996F99600BA26F7 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD883158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD884158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C324615C0FC9C007A6896 /* QuartzCore.framework in Frameworks */, AF1FD885158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD886158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BCC11A6B124D00C098BF /* OpenGL.framework in Frameworks */, AF7836F617DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AFD572CA0996FC0F00BA26F7 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD88B158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD88C158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C324815C0FC9C007A6896 /* QuartzCore.framework in Frameworks */, AF1FD88D158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD88E158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BCC31A6B126200C098BF /* OpenGL.framework in Frameworks */, AF7836F817DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AFD57301099701C000BA26F7 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD8B7158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD8B8158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C325315C0FC9C007A6896 /* QuartzCore.framework in Frameworks */, AF1FD8B9158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD8BA158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BCCE1A6B134600C098BF /* OpenGL.framework in Frameworks */, AF78370317DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AFD573650997411200BA26F7 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD8D3158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD8D4158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C325B15C0FC9C007A6896 /* QuartzCore.framework in Frameworks */, AF1FD8D5158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD8D6158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BCD51A6B138800C098BF /* OpenGL.framework in Frameworks */, AF78370A17DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AFDA6596178A52B70070D24B /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AFDA6597178A52B70070D24B /* libjwxyz.a in Frameworks */, AFDA6598178A52B70070D24B /* ScreenSaver.framework in Frameworks */, AFDA6599178A52B70070D24B /* QuartzCore.framework in Frameworks */, AFDA659A178A52B70070D24B /* Cocoa.framework in Frameworks */, AFDA659B178A52B70070D24B /* Carbon.framework in Frameworks */, CEE0BD331A6B17E600C098BF /* OpenGL.framework in Frameworks */, AF78376517DBA581003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AFE2A45E0E2E904600ADB298 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FDA03158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FDA04158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C32A715C0FC9D007A6896 /* QuartzCore.framework in Frameworks */, AF1FDA05158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FDA06158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BD261A6B176900C098BF /* OpenGL.framework in Frameworks */, AF78375917DBA581003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AFE30BF00E52B14700CCF4A5 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD9F7158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD9F8158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C32A415C0FC9D007A6896 /* QuartzCore.framework in Frameworks */, AF1FD9F9158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD9FA158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BD271A6B177200C098BF /* OpenGL.framework in Frameworks */, AF78375617DBA581003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AFE6A18B0CDD7B2E002805BF /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD9BF158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD9C0158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C329615C0FC9D007A6896 /* QuartzCore.framework in Frameworks */, AF1FD9C1158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD9C2158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BD141A6B16BB00C098BF /* OpenGL.framework in Frameworks */, AF78374717DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AFE6A4240CDD7FAA002805BF /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD713158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD714158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C31EA15C0FC9C007A6896 /* QuartzCore.framework in Frameworks */, AF1FD715158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD716158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BC641A6B0DA100C098BF /* OpenGL.framework in Frameworks */, AF78369817DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AFEC23D51CB6EAE100DE138F /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AFEC23D61CB6EAE100DE138F /* libjwxyz.a in Frameworks */, AFEC23D71CB6EAE100DE138F /* ScreenSaver.framework in Frameworks */, AFEC23D81CB6EAE100DE138F /* QuartzCore.framework in Frameworks */, AFEC23D91CB6EAE100DE138F /* Cocoa.framework in Frameworks */, AFEC23DA1CB6EAE100DE138F /* Carbon.framework in Frameworks */, AFEC23DB1CB6EAE100DE138F /* OpenGL.framework in Frameworks */, AFEC23DC1CB6EAE100DE138F /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AFEE10551D13406000AAC8F7 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AFEE10561D13406000AAC8F7 /* libjwxyz.a in Frameworks */, AFEE10571D13406000AAC8F7 /* ScreenSaver.framework in Frameworks */, AFEE10581D13406000AAC8F7 /* QuartzCore.framework in Frameworks */, AFEE10591D13406000AAC8F7 /* Cocoa.framework in Frameworks */, AFEE105A1D13406000AAC8F7 /* Carbon.framework in Frameworks */, AFEE105B1D13406000AAC8F7 /* OpenGL.framework in Frameworks */, AFEE105C1D13406000AAC8F7 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AFEE10741D15EB0800AAC8F7 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AFEE10751D15EB0800AAC8F7 /* libjwxyz.a in Frameworks */, AFEE10761D15EB0800AAC8F7 /* ScreenSaver.framework in Frameworks */, AFEE10771D15EB0800AAC8F7 /* QuartzCore.framework in Frameworks */, AFEE10781D15EB0800AAC8F7 /* Cocoa.framework in Frameworks */, AFEE10791D15EB0800AAC8F7 /* Carbon.framework in Frameworks */, AFEE107A1D15EB0800AAC8F7 /* OpenGL.framework in Frameworks */, AFEE107B1D15EB0800AAC8F7 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AFEE10931D17E20B00AAC8F7 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AFEE10941D17E20B00AAC8F7 /* libjwxyz.a in Frameworks */, AFEE10951D17E20B00AAC8F7 /* ScreenSaver.framework in Frameworks */, AFEE10961D17E20B00AAC8F7 /* QuartzCore.framework in Frameworks */, AFEE10971D17E20B00AAC8F7 /* Cocoa.framework in Frameworks */, AFEE10981D17E20B00AAC8F7 /* Carbon.framework in Frameworks */, AFEE10991D17E20B00AAC8F7 /* OpenGL.framework in Frameworks */, AFEE109A1D17E20B00AAC8F7 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AFF2868717860E830050A578 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AFF2868817860E830050A578 /* libjwxyz.a in Frameworks */, AFF2868917860E830050A578 /* ScreenSaver.framework in Frameworks */, AFF2868A17860E830050A578 /* QuartzCore.framework in Frameworks */, AFF2868B17860E830050A578 /* Cocoa.framework in Frameworks */, AFF2868C17860E830050A578 /* Carbon.framework in Frameworks */, CEE0BD201A6B173100C098BF /* OpenGL.framework in Frameworks */, AF78375217DBA581003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AFF3C9F017CCAC440028F240 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AFF3C9F117CCAC440028F240 /* libjwxyz.a in Frameworks */, AFF3C9F217CCAC440028F240 /* ScreenSaver.framework in Frameworks */, AFF3C9F317CCAC440028F240 /* QuartzCore.framework in Frameworks */, AFF3C9F417CCAC440028F240 /* Cocoa.framework in Frameworks */, AFF3C9F517CCAC440028F240 /* Carbon.framework in Frameworks */, CEE0BCF81A6B15A300C098BF /* OpenGL.framework in Frameworks */, AF78370E17DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AFF4633E0C4403E400EE6509 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD757158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD758158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C31FB15C0FC9C007A6896 /* QuartzCore.framework in Frameworks */, AF1FD759158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD75A158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BC751A6B0EA500C098BF /* OpenGL.framework in Frameworks */, AF7836A917DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AFF463600C440AEF00EE6509 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AF1FD967158FF96500C40F17 /* libjwxyz.a in Frameworks */, AF1FD968158FF96500C40F17 /* ScreenSaver.framework in Frameworks */, AF2C328015C0FC9D007A6896 /* QuartzCore.framework in Frameworks */, AF1FD969158FF96500C40F17 /* Cocoa.framework in Frameworks */, AF1FD96A158FF96500C40F17 /* Carbon.framework in Frameworks */, CEE0BCFC1A6B15C800C098BF /* OpenGL.framework in Frameworks */, AF78373017DBA580003B9FC0 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; AFFAB31D19158CE40020F021 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AFFAB31E19158CE40020F021 /* libjwxyz.a in Frameworks */, AFFAB31F19158CE40020F021 /* ScreenSaver.framework in Frameworks */, AFFAB32019158CE40020F021 /* QuartzCore.framework in Frameworks */, AFFAB32119158CE40020F021 /* Cocoa.framework in Frameworks */, AFFAB32219158CE40020F021 /* Carbon.framework in Frameworks */, CEE0BD1D1A6B171400C098BF /* OpenGL.framework in Frameworks */, AFFAB32319158CE40020F021 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; CE3D01591B76F4C100993C75 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( CE3D015A1B76F4C100993C75 /* libjwxyz.a in Frameworks */, CE3D015B1B76F4C100993C75 /* ScreenSaver.framework in Frameworks */, CE3D015C1B76F4C100993C75 /* QuartzCore.framework in Frameworks */, CE3D015D1B76F4C100993C75 /* Cocoa.framework in Frameworks */, CE3D015E1B76F4C100993C75 /* Carbon.framework in Frameworks */, CE3D015F1B76F4C100993C75 /* OpenGL.framework in Frameworks */, CE3D01601B76F4C100993C75 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ 080E96DDFE201D6D7F000001 /* libjwxyz */ = { isa = PBXGroup; children = ( AF561DF515969BC3007CA5ED /* grabclient-ios.m */, AFE1FD410981E32E00F7970E /* InvertedSlider.h */, AFE1FD420981E32E00F7970E /* InvertedSlider.m */, AF2D8F301CEBA10300198014 /* jwxyz-timers.c */, AF2D8F311CEBA10300198014 /* jwxyz-timers.h */, AFE1FD430981E32E00F7970E /* jwxyz.h */, AFE1FD440981E32E00F7970E /* jwxyz.m */, CE8C49CC1C011CC400BA2DCF /* jwxyzI.h */, CE8206741B89048800E35532 /* jwxyz-cocoa.h */, CE43C2BE1C055157004C2BC6 /* jwxyz-cocoa.m */, CE8EA1C11C35CF10002D1020 /* jwxyz-common.c */, CE5564591C25141000645458 /* jwxyz-gl.c */, AF6048F8157C07C600CA21E4 /* jwzgles.c */, AF6048F9157C07C600CA21E4 /* jwzgles.h */, AF6048FA157C07C600CA21E4 /* jwzglesI.h */, AF9D468E09B51567006E59CF /* grabclient-osx.m */, AFE1FD470981E32E00F7970E /* PrefsReader.h */, AFE1FD480981E32E00F7970E /* PrefsReader.m */, 32CA4F630368D1EE00C91783 /* xscreensaver_Prefix.pch */, AFC2577F09888F5A000655EE /* XScreenSaverConfigSheet.h */, AFC2578009888F5A000655EE /* XScreenSaverConfigSheet.m */, AF4812F70990D9AE00FB32B8 /* XScreenSaverGLView.h */, AF4812F80990D9AE00FB32B8 /* XScreenSaverGLView.m */, AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */, AFC254C409882C97000655EE /* XScreenSaverView.h */, AFC254C509882C97000655EE /* XScreenSaverView.m */, AF9E7EC8190F4C4000A8B01F /* enable_gc.c */, ); name = libjwxyz; sourceTree = ""; }; 19C28FACFE9D520D11CA2CBB /* Products */ = { isa = PBXGroup; children = ( AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */, AF97707D0989D2F6001F8B92 /* Attraction.saver */, AF4810FB09909FBA00FB32B8 /* DangerBall.saver */, AF976FBC0989CAA2001F8B92 /* Deco.saver */, AF480D81098EEDDE00FB32B8 /* Drift.saver */, AF480C58098E301400FB32B8 /* Helix.saver */, AF9770400989D1E6001F8B92 /* Rorschach.saver */, AF9771D70989DC4A001F8B92 /* SaverTester.app */, AF4812640990CE2700FB32B8 /* Gears.saver */, AF4812C60990D3D900FB32B8 /* Pipes.saver */, AF0839A209930B6B00277BE9 /* Atlantis.saver */, AF083A48099311D700277BE9 /* Atunnel.saver */, AFA5595A099330B000F3E977 /* Cage.saver */, AFA5597F0993317900F3E977 /* Moebius.saver */, AFA559A40993322100F3E977 /* Superquadrics.saver */, AFA559C70993328000F3E977 /* Morph3D.saver */, AFA559E10993330600F3E977 /* Rubik.saver */, AFA55A150993340300F3E977 /* Stairs.saver */, AFA55A32099334A000F3E977 /* Sproingies.saver */, AFA55A8B0993364300F3E977 /* Lament.saver */, AFA55AE109933CEF00F3E977 /* Bubble3D.saver */, AFA55B1E09933E0500F3E977 /* GLPlanet.saver */, AFA55B3709933E8D00F3E977 /* Pulsar.saver */, AFA55B8B09933F7200F3E977 /* Sierpinski3D.saver */, AFA55BA309933FDA00F3E977 /* GFlux.saver */, AFA55BBD099340CE00F3E977 /* Circuit.saver */, AFA55BF60993429100F3E977 /* Menger.saver */, AFA55C200993431300F3E977 /* Engine.saver */, AFA55C89099349A600F3E977 /* GLSnake.saver */, AFA55CBB09934BB200F3E977 /* Boxed.saver */, AFA55CDE09934CE400F3E977 /* GLForestFire.saver */, AFA55D4E0993565300F3E977 /* SBalls.saver */, AFA55D740993584B00F3E977 /* Cubenetic.saver */, AFA55D91099358C400F3E977 /* Spheremonics.saver */, AFA55DDA09935D7000F3E977 /* Lavalite.saver */, AFA55E0309935E4900F3E977 /* Queens.saver */, AFA55E1F09935EDC00F3E977 /* Endgame.saver */, AFA55E4209935F8E00F3E977 /* GLBlur.saver */, AFA55E6009935FF900F3E977 /* FlyingToasters.saver */, AFA55EE3099360E300F3E977 /* BouncingCow.saver */, AFA55F1E099361B700F3E977 /* JigglyPuff.saver */, AFA55F3C0993622F00F3E977 /* Klein.saver */, AFA55F540993629000F3E977 /* Hypertorus.saver */, AFA55F840993643600F3E977 /* GLMatrix.saver */, AFA55FE509936BFA00F3E977 /* CubeStorm.saver */, AFA5600B09936C6D00F3E977 /* GLKnots.saver */, AFA5602609936CC800F3E977 /* BlockTube.saver */, AFA5604409936D5100F3E977 /* FlipFlop.saver */, AFA5605C09936E2100F3E977 /* AntInspect.saver */, AFA5607409936F3800F3E977 /* AntSpotlight.saver */, AFA560C00993718D00F3E977 /* Polytopes.saver */, AFA5610F0993781600F3E977 /* Molecule.saver */, AFA5616A09937C0D00F3E977 /* BlinkBox.saver */, AFA5618D09937CF100F3E977 /* Noof.saver */, AFA561AF09937D7E00F3E977 /* Polyhedra.saver */, AFA562190993849F00F3E977 /* Providence.saver */, AFA562310993852500F3E977 /* Pinion.saver */, AFA562D1099392C600F3E977 /* Boing.saver */, AFA562EC099393C900F3E977 /* AntMaze.saver */, AFA563040993943B00F3E977 /* Tangram.saver */, AFA563260993951000F3E977 /* Crackberg.saver */, AFA56343099395ED00F3E977 /* GLHanoi.saver */, AFA56363099396C000F3E977 /* Cube21.saver */, AFA5638B099397B300F3E977 /* TimeTunnel.saver */, AFA563B6099398BB00F3E977 /* Juggler3D.saver */, AFD56E040996A03800BA26F7 /* GLText.saver */, AFD56EBE0996A72600BA26F7 /* Braid.saver */, AFD56EEA0996A95700BA26F7 /* Forest.saver */, AFD56F1B0996AAFA00BA26F7 /* Vines.saver */, AFD56F330996AB8A00BA26F7 /* Galaxy.saver */, AFD56F5F0996AEEE00BA26F7 /* Grav.saver */, AFD56F7B0996B01600BA26F7 /* Hopalong.saver */, AFD56F9C0996B09400BA26F7 /* Laser.saver */, AFD56FB30996B10F00BA26F7 /* Lightning.saver */, AFD56FC90996B18F00BA26F7 /* Lisa.saver */, AFD56FDF0996B20900BA26F7 /* Lissie.saver */, AFD570080996B43800BA26F7 /* Penrose.saver */, AFD5701F0996B4CC00BA26F7 /* Sierpinski.saver */, AFD570360996B56D00BA26F7 /* Sphere.saver */, AFD570530996B61600BA26F7 /* Spiral.saver */, AFD570690996B6A300BA26F7 /* FadePlot.saver */, AFD5707F0996B72800BA26F7 /* Mountain.saver */, AFD570950996B80300BA26F7 /* Triangle.saver */, AFD570AB0996B88E00BA26F7 /* Worm.saver */, AFD570C10996B93000BA26F7 /* Rotor.saver */, AFD570D90996B9F800BA26F7 /* Ant.saver */, AFD570FA0996BBBF00BA26F7 /* Flow.saver */, AFD571230996BE9300BA26F7 /* Discrete.saver */, AFD5713C0996BF2E00BA26F7 /* Apollonian.saver */, AFD571530996C01700BA26F7 /* Euler2D.saver */, AFD571690996C0CE00BA26F7 /* Thornbird.saver */, AFD571C50996D9DC00BA26F7 /* Juggle.saver */, AFD572320996E4A300BA26F7 /* Swirl.saver */, AFD5727D0996EE8500BA26F7 /* Polyominoes.saver */, AFD572B50996F99600BA26F7 /* Bouboule.saver */, AFD572D20996FC0F00BA26F7 /* Crystal.saver */, AFD57309099701C000BA26F7 /* Julia.saver */, AFD5736D0997411200BA26F7 /* Strange.saver */, AF794F74099748450059A8B0 /* Demon.saver */, AF794F9E09974A320059A8B0 /* Fiberlamp.saver */, AF794FDD09974FA60059A8B0 /* Loop.saver */, AF97573D099C317000B05160 /* IMSMap.saver */, AF975785099C374A00B05160 /* Moire.saver */, AF9757D2099C3E6300B05160 /* RDbomb.saver */, AF975818099C41D500B05160 /* XFlame.saver */, AF975875099C475900B05160 /* ShadeBobs.saver */, AF975A46099C681F00B05160 /* MetaBalls.saver */, AF975A7C099C6AB200B05160 /* Eruption.saver */, AF975A96099C6BC300B05160 /* Barcode.saver */, AF975AE7099C6EB100B05160 /* Fireworkx.saver */, AF975B0C099C6FE400B05160 /* MemScroller.saver */, AF975C22099C8C1500B05160 /* Halo.saver */, AF975C4E099C8DCF00B05160 /* Greynetic.saver */, AF975C6E099C8F3F00B05160 /* NoseGuy.saver */, AF975D63099CA0F000B05160 /* Rocks.saver */, AF476FC6099D154F001F091E /* Interference.saver */, AF476FEB099D1686001F091E /* Truchet.saver */, AF47705C099D4385001F091E /* Deluxe.saver */, AF477179099D4786001F091E /* Compass.saver */, AF47718F099D4803001F091E /* Wander.saver */, AF4771B7099D4949001F091E /* T3D.saver */, AF4771EB099D4D9A001F091E /* CCurve.saver */, AF477202099D4E64001F091E /* NerveRot.saver */, AF477218099D4EE8001F091E /* Whirlygig.saver */, AF47722E099D4F67001F091E /* Anemone.saver */, AF477263099D5717001F091E /* Halftone.saver */, AF47727B099D57B9001F091E /* PopSquares.saver */, AF477293099D5926001F091E /* Piecewise.saver */, AF477392099D65A1001F091E /* Wormhole.saver */, AF4773AA099D6648001F091E /* FuzzyFlakes.saver */, AF4773D1099D67B9001F091E /* Anemotaxis.saver */, AF477412099D69E7001F091E /* Intermomentary.saver */, AF477437099D7C70001F091E /* IFS.saver */, AF477452099D7D33001F091E /* XMatrix.saver */, AF477493099D89E4001F091E /* Flame.saver */, AF4774A9099D8A74001F091E /* Kaleidescope.saver */, AF4774C4099D8B5F001F091E /* LMorph.saver */, AF4774DE099D8BFF001F091E /* Maze.saver */, AF47756D099D9A1A001F091E /* Pedal.saver */, AF477593099D9C28001F091E /* Pyro.saver */, AF4775AF099D9CF7001F091E /* Starfish.saver */, AF4775E8099D9F69001F091E /* Coral.saver */, AF477602099DA030001F091E /* Epicycle.saver */, AF477623099DA26C001F091E /* Kumppa.saver */, AF477654099DA6D0001F091E /* Squiral.saver */, AF47766A099DA78F001F091E /* Critical.saver */, AF477680099DA849001F091E /* Petri.saver */, AF47769F099DAA6F001F091E /* Blaster.saver */, AF4776BA099DABDD001F091E /* XSpirograph.saver */, AF4776D0099DAC8A001F091E /* XRaySwarm.saver */, AF4776EB099DADDF001F091E /* WhirlWindWarp.saver */, AF477701099DAE7A001F091E /* Vermiculate.saver */, AF47771D099DAF9F001F091E /* CloudLife.saver */, AF477733099DB044001F091E /* Substrate.saver */, AF477762099DB61E001F091E /* Interaggregate.saver */, AF477784099DB965001F091E /* Celtic.saver */, AF4777A0099DBA90001F091E /* FluidBalls.saver */, AF4777E1099DC183001F091E /* BoxFit.saver */, AF4778BB099DDB79001F091E /* Penetrate.saver */, AF4778D7099DDCAE001F091E /* XJack.saver */, AF4778F8099DDDC8001F091E /* Cynosure.saver */, AF477919099DE379001F091E /* Flag.saver */, AF47793A099DE4C7001F091E /* Slip.saver */, AF642405099FF9C2000F4CD4 /* Extrusion.saver */, AF6425DC09A18856000F4CD4 /* HyperCube.saver */, AF6425FC09A189EC000F4CD4 /* Qix.saver */, AF64261F09A18D6C000F4CD4 /* HyperBall.saver */, AF64263C09A18F54000F4CD4 /* Moire2.saver */, AF64265F09A19229000F4CD4 /* Munch.saver */, AF64268B09A194B0000F4CD4 /* Goop.saver */, AF64278109A1D37A000F4CD4 /* SpeedMine.saver */, AF6427B809A2DE36000F4CD4 /* Bubbles.saver */, AF9D467609B5109C006E59CF /* DecayScreen.saver */, AF9D475409B5300A006E59CF /* SlideScreen.saver */, AF9D476F09B53166006E59CF /* Zoom.saver */, AF9D48EB09B53322006E59CF /* Bumps.saver */, AF9D490409B535DA006E59CF /* Distort.saver */, AF9D493B09B53CBA006E59CF /* Ripples.saver */, AF9D496409B53FC9006E59CF /* RotZoomer.saver */, AF9D497C09B5411D006E59CF /* Twang.saver */, AF9D49A709B544C3006E59CF /* Spotlight.saver */, AF9D4C7909B59F27006E59CF /* XLyap.saver */, AF9D4CF709B5AA8E006E59CF /* Pong.saver */, AF9D4D8F09B5B2DC006E59CF /* XAnalogTV.saver */, AF9D4DC009B5B71E006E59CF /* BSOD.saver */, AF9D4DFE09B5BB19006E59CF /* Apple2.saver */, AF7776F609B63ABF00EA3033 /* Phosphor.saver */, AF77772A09B6416100EA3033 /* Pacman.saver */, AF77775109B6446500EA3033 /* FlipScreen3D.saver */, AF7777A209B64A5200EA3033 /* MirrorBlob.saver */, AF7777E409B64C6B00EA3033 /* GLSlideshow.saver */, AF7777FE09B64E3100EA3033 /* FlipText.saver */, AF77785809B6528100EA3033 /* Carousel.saver */, AF77787409B6536000EA3033 /* DNAlogo.saver */, AF7778B509B659C800EA3033 /* BlitSpin.saver */, AF34085409B80AAF00F2CEC1 /* StarWars.saver */, AF34085509B80AB000F2CEC1 /* StonerView.saver */, AF34085609B80AB000F2CEC1 /* Gleidescope.saver */, AF34085709B80AB000F2CEC1 /* FontGlide.saver */, AF998EEE0A083DB30051049D /* TopBlock.saver */, AF48DF030A0C25E000F94CF9 /* GLSchool.saver */, AFA339400B058505002B0E7D /* WebCollage.saver */, AFA33BC70B058740002B0E7D /* webcollage-helper */, AFF463470C4403E400EE6509 /* CWaves.saver */, AFF4636C0C440AEF00EE6509 /* GLCells.saver */, AF0DC7BD0C4C73F600D76972 /* m6502.saver */, AF0DCA560C4CBB0D00D76972 /* Voronoi.saver */, AFE6A1970CDD7B2E002805BF /* MoebiusGears.saver */, AFE6A42D0CDD7FAA002805BF /* Abstractile.saver */, AF4FD6FA0CE7A486005EE58E /* Lockward.saver */, AF4FF4CE0D52CBDE00666F98 /* CubicGrid.saver */, AF3C71590D624BF50030CC0D /* Hypnowheel.saver */, AF1A17730D6D6EE3008AF328 /* LCDscrub.saver */, AFE2A46A0E2E904600ADB298 /* SkyTentacles.saver */, AFE30BFC0E52B14700CCF4A5 /* Sonar.saver */, AF35E8A00E63823600691F2F /* Jigsaw.saver */, AFD51B300F063B4A00471C02 /* Photopile.saver */, AF32D9F40F3AD0B40080F535 /* RubikBlocks.saver */, AF4A345D102A593600A81B2A /* Surfaces.saver */, AF78D189142DD8F3002AAF77 /* Hilbert.saver */, AF3581D51431D47B00E09C51 /* CompanionCube.saver */, AF358216143330F900E09C51 /* TronBit.saver */, AF91898F158FC00A002B5D1E /* XScreenSaver.app */, AF7511121782B5B900380EA1 /* Kaleidocycle.saver */, AFF2869217860E830050A578 /* QuasiCrystal.saver */, AFBFE75E178642DC00432B21 /* Apple2.app */, AFBFE77E178647FE00432B21 /* Phosphor.app */, AFDA65A1178A52B70070D24B /* UnknownPleasures.saver */, AFB591BA178B812C00EA4005 /* Hexadrop.saver */, AFF3C9FB17CCAC440028F240 /* Geodesic.saver */, AF1AD9E218500F9F00932759 /* XScreenSaverUpdater.app */, AF9E7EBF190F4C1B00A8B01F /* enable_gc */, AFFAB32919158CE40020F021 /* ProjectivePlane.saver */, AF68A49219196CF800D41CD1 /* Tessellimage.saver */, AF39E296198A11F60064A58D /* WindupRobot.saver */, AF7ACFD419FF0A9200BD752B /* GeodesicGears.saver */, AF73FF361A09877F00E485E9 /* BinaryRing.saver */, AF5C9B0D1A0CCE6E00B0147A /* Cityflow.saver */, AF63A8061AB4EDDB00593C75 /* RomanBoy.saver */, AFCF83501AF5B515008BB7E1 /* SplitFlap.saver */, CE3D01661B76F4C100993C75 /* TestX11.saver */, AF63F44E1C3465BE0033E133 /* Apple2.app */, AF63F4741C34682A0033E133 /* Phosphor.app */, AF63F49A1C3469FC0033E133 /* TestX11.app */, AFEC23E21CB6EAE100DE138F /* DymaxionMap.saver */, AF46E9E41CBBA2B300240FBC /* Unicrud.saver */, AFACE8881CC83458008B24CD /* EnergyStream.saver */, AFA211A11CD59DAF00C0D2A1 /* RaverHoop.saver */, AFC0E8C01CDC601A008CAFAC /* Hydrostat.saver */, AF39382F1D0FBD6A00205406 /* Discoball.saver */, AFEE10621D13406000AAC8F7 /* CubeTwist.saver */, AFEE10811D15EB0800AAC8F7 /* CubeStack.saver */, AFEE10A01D17E20B00AAC8F7 /* Splodesic.saver */, AF1B0FBC1D7AB4740011DBE4 /* Hexstrut.saver */, ); name = Products; path = ..; sourceTree = ""; }; 29B97314FDCFA39411CA2CEA /* xscreensaver */ = { isa = PBXGroup; children = ( AF480AB9098C66E200FB32B8 /* SaverRunner */, 080E96DDFE201D6D7F000001 /* libjwxyz */, AF1AD9E818500FA000932759 /* Updater */, AFE1FD520981E35400F7970E /* Utils */, AFE1FD610981E3E700F7970E /* Hacks */, AFC258670988A468000655EE /* config */, 29B97317FDCFA39411CA2CEA /* Resources */, 29B97323FDCFA39411CA2CEA /* Frameworks */, 19C28FACFE9D520D11CA2CBB /* Products */, ); name = xscreensaver; sourceTree = ""; }; 29B97317FDCFA39411CA2CEA /* Resources */ = { isa = PBXGroup; children = ( 089C165CFE840E0CC02AAC07 /* InfoPlist.strings */, AF14EE300E3CEF1A004CBBD2 /* XScreenSaver.icns */, AF9772E10989DFC6001F8B92 /* SaverRunner.nib */, AF56019B157DAA3D00DB2055 /* iSaverRunner.xib */, 55EDCB3C1AD498A800251909 /* LaunchScreen.xib */, 550FB5FD1AD64424001A4FA5 /* Media-iOS.xcassets */, AF2D522513E954A0002AA818 /* SaverRunner.icns */, AF73FF201A08AB9400E485E9 /* iSaverRunner57t.png */, AF9771D90989DC4A001F8B92 /* SaverRunner.plist */, AF01294C157D31DD00C396E1 /* iSaverRunner.plist */, AF94E7411A16E93600289B93 /* xscreensaver.xcconfig */, 8D1107310486CEB800E47090 /* XScreenSaver.plist */, AF0FAF1209CA712600EE1051 /* xscreensaver-getimage-file */, AF0FAF0B09CA6FF900EE1051 /* xscreensaver-text */, AFEC68361BD6CA85004C1B64 /* OCRAStd.otf */, AFEC68381BD6CDF9004C1B64 /* YearlReg.ttf */, AFC43E731C68364B00C89999 /* PxPlus_IBM_VGA8.ttf */, ); name = Resources; sourceTree = ""; }; 29B97323FDCFA39411CA2CEA /* Frameworks */ = { isa = PBXGroup; children = ( AF1ADA171850180E00932759 /* Sparkle.framework */, AF78377C17DBA85D003B9FC0 /* libz.dylib */, AF78369617DB9F25003B9FC0 /* libz.dylib */, AFEB9C3E1590056A003974F3 /* CoreGraphics.framework */, AFEB9C3F1590056A003974F3 /* QuartzCore.framework */, AF1AD9E718500FA000932759 /* Foundation.framework */, AFEB9C3C15900558003974F3 /* Foundation.framework */, AFEB9C3A1590054B003974F3 /* OpenGLES.framework */, AFEB9C3815900514003974F3 /* UIKit.framework */, AF1AD9E618500FA000932759 /* CoreData.framework */, AF1AD9E518500F9F00932759 /* AppKit.framework */, AF0F46DC104E1809000A929C /* AppKit.framework */, AF976ED30989BF59001F8B92 /* ScreenSaver.framework */, AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */, AF561DF715969C5B007CA5ED /* AssetsLibrary.framework */, AF561DF3159651A7007CA5ED /* AudioToolbox.framework */, AF0FAF3B159BAC7B00BCE2F7 /* CoreText.framework */, 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */, AF480DF1098F528500FB32B8 /* OpenGL.framework */, CEE0BC611A6B0D6200C098BF /* OpenGL.framework */, AF480FE70990375900FB32B8 /* AGL.framework */, AF84FD4109B1209E00F3AB06 /* GLUT.framework */, AF48112B0990A2C700FB32B8 /* Carbon.framework */, AF1ADA0118500FA100932759 /* XCTest.framework */, ); name = Frameworks; sourceTree = ""; }; AF1AD9E818500FA000932759 /* Updater */ = { isa = PBXGroup; children = ( AF3633F918530DD90086A439 /* sparkle_dsa_pub.pem */, AF3633FA18530DD90086A439 /* Updater.h */, AF3633FB18530DD90086A439 /* Updater.m */, AF3633FE18530DFF0086A439 /* Updater.plist */, AF1ADA151850157400932759 /* Updater.xib */, ); name = Updater; sourceTree = ""; }; AF480AB9098C66E200FB32B8 /* SaverRunner */ = { isa = PBXGroup; children = ( 29B97316FDCFA39411CA2CEA /* main.m */, CEAF85661ABE4A70008F104C /* SaverListController.h */, AF84AF1E15829AF000607E4C /* SaverListController.m */, AFE1FD3F0981E32E00F7970E /* SaverRunner.h */, AFE1FD400981E32E00F7970E /* SaverRunner.m */, AFAA6B441773F07700DE720C /* ios-function-table.m */, ); name = SaverRunner; sourceTree = ""; }; AF480DC7098F4EB500FB32B8 /* XScreenSaver */ = { isa = PBXGroup; children = ( AFE6A4340CDD800F002805BF /* abstractile.c */, AF9D4CFA09B5AC94006E59CF /* analogtv.c */, AF9D4CFB09B5AC94006E59CF /* analogtv.h */, AF477231099D4FD5001F091E /* anemone.c */, AF4773D4099D6817001F091E /* anemotaxis.c */, AF9D4E0509B5BC9D006E59CF /* apple2-main.c */, AF9D4DD309B5B990006E59CF /* apple2.c */, AF0DCA320C4C74A200D76972 /* asm6502.c */, AF0DCA330C4C74A200D76972 /* asm6502.h */, AF976DFA09896BEB001F8B92 /* attraction.c */, AF975A99099C6C3500B05160 /* barcode.c */, AF73FF381A09889700E485E9 /* binaryring.c */, AF4776A2099DAADE001F091E /* blaster.c */, AF7778BA09B65A8A00EA3033 /* blitspin.c */, AF4778A3099DDA91001F091E /* boxfit.c */, AF9D4DC309B5B87D006E59CF /* bsod.c */, AF6427BB09A2DF47000F4CD4 /* bubbles-default.c */, AF6427BC09A2DF47000F4CD4 /* bubbles.c */, AF6427BD09A2DF47000F4CD4 /* bubbles.h */, AF9D48EE09B533AE006E59CF /* bumps.c */, AF4771EF099D4DFE001F091E /* ccurve.c */, AF477787099DBA29001F091E /* celtic.c */, AF477720099DB01C001F091E /* cloudlife.c */, AF47717C099D47D3001F091E /* compass.c */, AF4775EF099D9FFF001F091E /* coral.c */, AF47766D099DA80D001F091E /* critical.c */, AFF463490C44044E00EE6509 /* cwaves.c */, AF4778FB099DDE79001F091E /* cynosure.c */, AF9D467809B5110B006E59CF /* decayscreen.c */, AFC25B5E0988BA63000655EE /* deco.c */, AF68A49619196E3E00D41CD1 /* delaunay.c */, AF477145099D43E2001F091E /* deluxe.c */, AF9D490709B536F7006E59CF /* distort.c */, AF477605099DA097001F091E /* epicycle.c */, AF975A83099C6B4900B05160 /* eruption.c */, AF975AEE099C6F1700B05160 /* fireworkx.c */, AF477496099D8A53001F091E /* flame.c */, AF4777A4099DBB11001F091E /* fluidballs.c */, AF77789209B656C300EA3033 /* fontglide.c */, AFBF893C0E41D930006A2D66 /* fps.c */, AFBF893D0E41D930006A2D66 /* fps.h */, AFBF89B10E424036006A2D66 /* fpsI.h */, AF4773B4099D6778001F091E /* fuzzyflakes.c */, AF64268E09A19542000F4CD4 /* goop.c */, AF480C21098E28EF00FB32B8 /* greynetic.c */, AF477266099D5768001F091E /* halftone.c */, AF480C29098E295D00FB32B8 /* halo.c */, AF480C2F098E2A6700FB32B8 /* helix.c */, AFB591BD178B81E600EA4005 /* hexadrop.c */, AF64262209A18E1E000F4CD4 /* hyperball.c */, AF6425DF09A188FB000F4CD4 /* hypercube.c */, AF47743A099D7CEA001F091E /* ifs.c */, AF975740099C31DD00B05160 /* imsmap.c */, AF477769099DB710001F091E /* interaggregate.c */, AF476FD0099D15AA001F091E /* interference.c */, AF47741C099D6A6C001F091E /* intermomentary.c */, AF4774AC099D8B08001F091E /* kaleidescope.c */, AF47762A099DA2E9001F091E /* kumppa.c */, AF1A177E0D6D6F3E008AF328 /* lcdscrub.c */, AF4774CB099D8BC2001F091E /* lmorph.c */, AF0DCA340C4C74A200D76972 /* m6502.c */, AF4774E1099D8C8B001F091E /* maze.c */, AF975B14099C709E00B05160 /* memscroller.c */, AF975A49099C689F00B05160 /* metaballs.c */, AF975789099C37A500B05160 /* moire.c */, AF64263F09A18FEB000F4CD4 /* moire2.c */, AF64266209A192C5000F4CD4 /* munch.c */, AF477205099D4EB6001F091E /* nerverot.c */, AF975C76099C8FC700B05160 /* noseguy.c */, AF477570099D9A8A001F091E /* pedal.c */, AF4778BE099DDC32001F091E /* penetrate.c */, AF477683099DA8C7001F091E /* petri.c */, AF77770309B63B5F00EA3033 /* phosphor.c */, AF477297099D5980001F091E /* piecewise.c */, AF9D4CFC09B5AC94006E59CF /* pong.c */, AF47727E099D5808001F091E /* popsquares.c */, AF47759C099D9CA3001F091E /* pyro.c */, AF6425FF09A18A94000F4CD4 /* qix.c */, AF9757D5099C3EB800B05160 /* rd-bomb.c */, AF9D493E09B53D55006E59CF /* ripples.c */, AF975D66099CA16A00B05160 /* rocks.c */, AFE1FD620981E40800F7970E /* rorschach.c */, AF9D496709B540A4006E59CF /* rotzoomer.c */, AF97587A099C492000B05160 /* shadebobs.c */, AF9D475809B53091006E59CF /* slidescreen.c */, AF64278709A1D433000F4CD4 /* speedmine.c */, AF9D49AA09B54596006E59CF /* spotlight.c */, AF477657099DA75D001F091E /* squiral.c */, AF4775B3099D9D67001F091E /* starfish.c */, AF477736099DB104001F091E /* substrate.c */, AF4771BA099D4997001F091E /* t3d.c */, AF68A49519196E3E00D41CD1 /* tessellimage.c */, CE3D016A1B76F8E200993C75 /* testx11.c */, AF35821B1433314C00E09C51 /* tronbit.c */, AF3582171433314C00E09C51 /* tronbit_idle1.c */, AF3582181433314C00E09C51 /* tronbit_idle2.c */, AF3582191433314C00E09C51 /* tronbit_no.c */, AF35821A1433314C00E09C51 /* tronbit_yes.c */, AF476FF0099D1713001F091E /* truchet.c */, AF9D497F09B541E5006E59CF /* twang.c */, AF477704099DAF3F001F091E /* vermiculate.c */, AF477192099D4864001F091E /* wander.c */, AFA33C0A0B058E6B002B0E7D /* webcollage */, AFA33BAE0B0585F7002B0E7D /* webcollage-cocoa.m */, AF4776EE099DAE58001F091E /* whirlwindwarp.c */, AF47721B099D4F47001F091E /* whirlygig.c */, AF477395099D65FE001F091E /* wormhole.c */, AF9D4D9209B5B444006E59CF /* xanalogtv.c */, AF97582F099C427500B05160 /* xflame.c */, AF4778DA099DDD2B001F091E /* xjack.c */, AF9D4C7C09B5A044006E59CF /* xlyap.c */, AF477455099D7D8A001F091E /* xmatrix.c */, AF4776D3099DACEB001F091E /* xrayswarm.c */, AF4776BD099DAC46001F091E /* xspirograph.c */, AF9D48D409B53229006E59CF /* zoom.c */, ); name = XScreenSaver; sourceTree = ""; }; AF480DCF098F4F0600FB32B8 /* Xlockmore */ = { isa = PBXGroup; children = ( AFD570DE0996BA5C00BA26F7 /* ant.c */, AFD5713F0996BFBE00BA26F7 /* apollonian.c */, AF7778BC09B65B1800EA3033 /* automata.h */, AFD572B90996FB3D00BA26F7 /* bouboule.c */, AFD56EC10996A76F00BA26F7 /* braid.c */, AFD572ED0997006E00BA26F7 /* crystal.c */, AF794F7E099748860059A8B0 /* demon.c */, AFD571280996BEF700BA26F7 /* discrete.c */, AF480C82098E336D00FB32B8 /* drift.c */, AFD571560996C07F00BA26F7 /* euler2d.c */, AFD5706C0996B70000BA26F7 /* fadeplot.c */, AF794FA909974AE30059A8B0 /* fiberlamp.c */, AF47791C099DE3F1001F091E /* flag.c */, AFD571010996BC3800BA26F7 /* flow.c */, AFD56EED0996A99E00BA26F7 /* forest.c */, AFD56F360996ABD200BA26F7 /* galaxy.c */, AFD56F620996AF2D00BA26F7 /* grav.c */, AFD56F880996B06600BA26F7 /* hopalong.c */, AFD571C80996DA4600BA26F7 /* juggle.c */, AFD5730C099702C800BA26F7 /* julia.c */, AFD56FA00996B0E500BA26F7 /* laser.c */, AFD56FB60996B16300BA26F7 /* lightning.c */, AFD56FCC0996B1D600BA26F7 /* lisa.c */, AFD56FE20996B26200BA26F7 /* lissie.c */, AF794FE009974FEC0059A8B0 /* loop.c */, AFD570820996B79300BA26F7 /* mountain.c */, AF795015099751940059A8B0 /* pacman.c */, AF795016099751940059A8B0 /* pacman.h */, AF795011099751940059A8B0 /* pacman_ai.c */, AF795012099751940059A8B0 /* pacman_ai.h */, AF795013099751940059A8B0 /* pacman_level.c */, AF795014099751940059A8B0 /* pacman_level.h */, AFD5700C0996B49D00BA26F7 /* penrose.c */, AFD572800996EF2B00BA26F7 /* polyominoes.c */, AFD570C40996B98500BA26F7 /* rotor.c */, AFD570220996B52700BA26F7 /* sierpinski.c */, AF47793D099DE56A001F091E /* slip.c */, AFD5703B0996B5E300BA26F7 /* sphere.c */, AFD570560996B67600BA26F7 /* spiral.c */, AFD57371099741A200BA26F7 /* strange.c */, AFD572350996E53E00BA26F7 /* swirl.c */, AFD5716B0996C16700BA26F7 /* thornbird.c */, AFD570980996B86200BA26F7 /* triangle.c */, AFD56F1F0996AB5A00BA26F7 /* vines.c */, AFD570AE0996B8EF00BA26F7 /* worm.c */, ); name = Xlockmore; sourceTree = ""; }; AF480DD0098F4F2000FB32B8 /* OpenGL */ = { isa = PBXGroup; children = ( AFA5605F09936E9C00F3E977 /* antinspect.c */, AFA562EF0993941600F3E977 /* antmaze.c */, AFA5607709936FDD00F3E977 /* ants.h */, AFA5607809936FDD00F3E977 /* antspotlight.c */, AF0839A909930C4900277BE9 /* atlantis.c */, AF7778BD09B65B3F00EA3033 /* atlantis.h */, AF083A31099311CE00277BE9 /* atunnel.c */, AFA55AF409933DBF00F3E977 /* b_draw.c */, AFA55AF509933DBF00F3E977 /* b_lockglue.c */, AFA55AF609933DBF00F3E977 /* b_sphere.c */, AFA5616D09937C9A00F3E977 /* blinkbox.c */, AFA5602909936D0700F3E977 /* blocktube.c */, AFA562D40993930C00F3E977 /* boing.c */, AFA55EE70993613E00F3E977 /* bouncingcow.c */, AFA55CBE09934C0900F3E977 /* boxed.c */, AFA55CBF09934C0900F3E977 /* boxed.h */, AFA55AE409933D3800F3E977 /* bubble3d.c */, AFA55AE809933D5900F3E977 /* bubble3d.h */, AF4812760990CF5D00FB32B8 /* buildlwo.c */, AF4812770990CF5D00FB32B8 /* buildlwo.h */, AFA5595D0993310500F3E977 /* cage.c */, AF77785E09B6530E00EA3033 /* carousel.c */, AFA55E2209935F2B00F3E977 /* chessgames.h */, AFA55E2309935F2B00F3E977 /* chessmodels.c */, AFA55E2409935F2B00F3E977 /* chessmodels.h */, AFA55BC00993416E00F3E977 /* circuit.c */, AF5C9B101A0CCF4E00B0147A /* cityflow.c */, AF3581D91431D5FC00E09C51 /* companion.c */, AF3581D61431D5FC00E09C51 /* companion_disc.c */, AF3581D71431D5FC00E09C51 /* companion_heart.c */, AF3581D81431D5FC00E09C51 /* companion_quad.c */, AFA55EE80993613E00F3E977 /* cow_face.c */, AFA55EE90993613E00F3E977 /* cow_hide.c */, AFA55EEA0993613E00F3E977 /* cow_hoofs.c */, AFA55EEB0993613E00F3E977 /* cow_horns.c */, AFA55EEC0993613E00F3E977 /* cow_tail.c */, AFA55EED0993613E00F3E977 /* cow_udder.c */, AFA563290993957100F3E977 /* crackberg.c */, AFA563660993970F00F3E977 /* cube21.c */, AFA55D770993589300F3E977 /* cubenetic.c */, AFEE10831D15EBA600AAC8F7 /* cubestack.c */, AFA55FF309936C4500F3E977 /* cubestorm.c */, AFEE10641D1341E300AAC8F7 /* cubetwist.c */, AF4FF4D00D52CC8400666F98 /* cubicgrid.c */, AF480DD1098F4F6200FB32B8 /* dangerball.c */, AF3938311D0FBEC800205406 /* discoball.c */, AF77787609B653DC00EA3033 /* dnalogo.c */, AF0839AA09930C4900277BE9 /* dolphin.c */, AF241F81107C38DF00046A84 /* dropshadow.c */, AF241F82107C38DF00046A84 /* dropshadow.h */, AFEC23E41CB6EBC400DE138F /* dymaxionmap.c */, AF7778C109B65C6A00EA3033 /* e_textures.h */, AFA55E2509935F2B00F3E977 /* endgame.c */, AFACE88A1CC83578008B24CD /* energystream.c */, AFA55C230993435300F3E977 /* engine.c */, AF642409099FFAF0000F4CD4 /* extrusion-helix2.c */, AF64240A099FFAF0000F4CD4 /* extrusion-helix3.c */, AF64240B099FFAF0000F4CD4 /* extrusion-helix4.c */, AF64240C099FFAF0000F4CD4 /* extrusion-joinoffset.c */, AF64240D099FFAF0000F4CD4 /* extrusion-screw.c */, AF64240E099FFAF0000F4CD4 /* extrusion-taper.c */, AF64240F099FFAF1000F4CD4 /* extrusion-twistoid.c */, AF642410099FFAF1000F4CD4 /* extrusion.c */, AF642411099FFAF1000F4CD4 /* extrusion.h */, AFA5604709936DCC00F3E977 /* flipflop.c */, AF77775409B644FF00EA3033 /* flipscreen3d.c */, AF77780109B64EC000EA3033 /* fliptext.c */, AFA55E980993608800F3E977 /* flyingtoasters.c */, AFBF89AE0E423FC3006A2D66 /* fps-gl.c */, AF4812250990CB8C00FB32B8 /* gears.c */, AFF3CA0217CCAEB70028F240 /* geodesic.c */, AF7ACFD619FF0B7A00BD752B /* geodesicgears.c */, AFA55BA60993401A00F3E977 /* gflux.c */, AFA55E4509935FD300F3E977 /* glblur.c */, AFF463710C440B9200EE6509 /* glcells.c */, AF77778B09B64A2A00EA3033 /* gleidescope.c */, AFA55CE109934D2E00F3E977 /* glforestfire.c */, AFA563460993963400F3E977 /* glhanoi.c */, AFA5600E09936CB300F3E977 /* glknots.c */, AFA55F870993648500F3E977 /* glmatrix.c */, AFA55B2109933E4A00F3E977 /* glplanet.c */, AF48E1660A0C268500F94CF9 /* glschool.c */, AF48E1670A0C268500F94CF9 /* glschool.h */, AF48E1620A0C268400F94CF9 /* glschool_alg.c */, AF48E1630A0C268500F94CF9 /* glschool_alg.h */, AF48E1640A0C268500F94CF9 /* glschool_gl.c */, AF48E1650A0C268500F94CF9 /* glschool_gl.h */, AF7777E709B64CF700EA3033 /* glslideshow.c */, AFA55C8C099349EE00F3E977 /* glsnake.c */, AFD56E080996A07A00BA26F7 /* gltext.c */, AF1B0FBE1D7AB5210011DBE4 /* hexstrut.c */, AF78D18A142DD96E002AAF77 /* hilbert.c */, AFC0E8C21CDC60A9008CAFAC /* hydrostat.c */, AFA55F59099362DF00F3E977 /* hypertorus.c */, AF3C715D0D624C600030CC0D /* hypnowheel.c */, AFE6A16A0CDD78EA002805BF /* involute.c */, AFE6A16B0CDD78EA002805BF /* involute.h */, AF35EB250E6382BA00691F2F /* jigsaw.c */, AFA55F210993620200F3E977 /* jigglypuff.c */, AFA563B90993991300F3E977 /* juggler3d.c */, AF7511141782B64300380EA1 /* kaleidocycle.c */, AFA55F3F0993626E00F3E977 /* klein.c */, AFA55A8E0993369100F3E977 /* lament.c */, AFF1BA0E19A96D8B0016A88D /* lament_model.c */, AFA55DDD09935DB600F3E977 /* lavalite.c */, AF4FD7000CE7A577005EE58E /* lockward.c */, AFA55DE109935DFB00F3E977 /* marching.c */, AFA55DE209935DFB00F3E977 /* marching.h */, AFA55BF9099342D500F3E977 /* menger.c */, AF7777A509B64AFC00EA3033 /* mirrorblob.c */, AFA55982099331C300F3E977 /* moebius.c */, AFE6A40B0CDD7BC3002805BF /* moebiusgears.c */, AFA561120993786800F3E977 /* molecule.c */, AF7778BE09B65BA300EA3033 /* molecules.sh */, AFA559CC099332E800F3E977 /* morph3d.c */, AFA5619009937D3600F3E977 /* noof.c */, AFD51DB60F063BCE00471C02 /* photopile.c */, AFA562340993856A00F3E977 /* pinion.c */, AF4812780990CF5D00FB32B8 /* pipeobjs.c */, AF4812790990CF5D00FB32B8 /* pipes.c */, AFA561B209937DCB00F3E977 /* polyhedra-gl.c */, AFA561B309937DCC00F3E977 /* polyhedra.c */, AFA561B409937DCC00F3E977 /* polyhedra.h */, AFA560C3099371D500F3E977 /* polytopes.c */, AFFAB33119158EA80020F021 /* projectiveplane.c */, AFA5621C099384F600F3E977 /* providence.c */, AFA55B3F09933EC600F3E977 /* pulsar.c */, AFF28695178611720050A578 /* quasicrystal.c */, AFA55E0609935EB800F3E977 /* queens.c */, AFA211A31CD59FD800C0D2A1 /* raverhoop.c */, AFBE743F19A7C6930018AA35 /* robot.c */, AF39E2A0198A13F50064A58D /* robot-wireframe.c */, AF63A8091AB4EF5D00593C75 /* romanboy.c */, AFA559EA0993335C00F3E977 /* rubik.c */, AF32D9FA0F3AD1200080F535 /* rubikblocks.c */, AFA55A400993351F00F3E977 /* s1_1.c */, AFA55A410993351F00F3E977 /* s1_2.c */, AFA55A420993351F00F3E977 /* s1_3.c */, AFA55A430993351F00F3E977 /* s1_4.c */, AFA55A440993351F00F3E977 /* s1_5.c */, AFA55A450993351F00F3E977 /* s1_6.c */, AFA55A460993351F00F3E977 /* s1_b.c */, AFA55D510993569C00F3E977 /* sballs.c */, AF0839AB09930C4900277BE9 /* shark.c */, AFA55B8E09933FBF00F3E977 /* sierpinski3d.c */, AFE2A4720E2E90E300ADB298 /* skytentacles.c */, AFE30BFF0E52B1DC00CCF4A5 /* sonar-icmp.c */, AFE30C000E52B1DC00CCF4A5 /* sonar-sim.c */, AFE30C010E52B1DC00CCF4A5 /* sonar.c */, AFA55D940993590F00F3E977 /* spheremonics.c */, AFCF83541AF5B5FD008BB7E1 /* splitflap.c */, AFCF83531AF5B5FD008BB7E1 /* splitflap_obj.c */, AFEE10A21D17E2B300AAC8F7 /* splodesic.c */, AFA55A470993351F00F3E977 /* sproingies.c */, AF7778C009B65C0F00EA3033 /* sproingies.h */, AFA55A480993351F00F3E977 /* sproingiewrap.c */, AFA55A1A0993345900F3E977 /* stairs.c */, AF77782809B650FF00EA3033 /* starwars.c */, AF77782909B650FF00EA3033 /* starwars.txt */, AF7777BF09B64BD400EA3033 /* stonerview-move.c */, AF7777C009B64BD400EA3033 /* stonerview-move.h */, AF7777C109B64BD400EA3033 /* stonerview-osc.c */, AF7777C209B64BD400EA3033 /* stonerview-osc.h */, AF7777C309B64BD400EA3033 /* stonerview-view.c */, AF7777C409B64BD400EA3033 /* stonerview.c */, AF7777C509B64BD400EA3033 /* stonerview.h */, AFA559A80993326300F3E977 /* superquadrics.c */, AF4A3463102A5A0E00A81B2A /* surfaces.c */, AF0839AC09930C4900277BE9 /* swim.c */, AFA563090993948F00F3E977 /* tangram.c */, AFA563070993948F00F3E977 /* tangram_shapes.c */, AFA563080993948F00F3E977 /* tangram_shapes.h */, AFC211930E4E30C800D87B6E /* teapot.c */, AFC211940E4E30C800D87B6E /* teapot.h */, AFA5638E0993980D00F3E977 /* timetunnel.c */, AFA55E990993608800F3E977 /* toast.c */, AFA55E9A0993608800F3E977 /* toast.dxf */, AFA55E9B0993608800F3E977 /* toast2.c */, AFA55E9C0993608800F3E977 /* toast2.dxf */, AFA55EAB0993608800F3E977 /* toaster.c */, AFA55EAC0993608800F3E977 /* toaster.dxf */, AFA55E9D0993608800F3E977 /* toaster_base.c */, AFA55E9F0993608800F3E977 /* toaster_handle.c */, AFA55EA10993608800F3E977 /* toaster_handle2.c */, AFA55EA30993608800F3E977 /* toaster_jet.c */, AFA55EA50993608800F3E977 /* toaster_knob.c */, AFA55EA70993608800F3E977 /* toaster_slots.c */, AFA55EA90993608800F3E977 /* toaster_wing.c */, AF998EF80A083E750051049D /* topblock.c */, AF083A58099312B000277BE9 /* tunnel_draw.c */, AF083A5D099312DB00277BE9 /* tunnel_draw.h */, AF46E9E71CBBA3F900240FBC /* unicrud.c */, AFDA65A4178A541A0070D24B /* unknownpleasures.c */, AF0DCA5F0C4CBB7300D76972 /* voronoi.c */, AF0839AD09930C4900277BE9 /* whale.c */, AF39E2A1198A13F50064A58D /* winduprobot.c */, ); name = OpenGL; sourceTree = ""; }; AFC258670988A468000655EE /* config */ = { isa = PBXGroup; children = ( AFE6A4360CDD8026002805BF /* abstractile.xml */, AFC258680988A468000655EE /* anemone.xml */, AFC258690988A468000655EE /* anemotaxis.xml */, AFC2586A0988A468000655EE /* ant.xml */, AFC2586B0988A468000655EE /* antinspect.xml */, AFC2586C0988A468000655EE /* antmaze.xml */, AFC2586D0988A468000655EE /* antspotlight.xml */, AFC2586E0988A468000655EE /* apollonian.xml */, AFC2586F0988A468000655EE /* apple2.xml */, AFC258700988A468000655EE /* atlantis.xml */, AFC258710988A468000655EE /* attraction.xml */, AFC258720988A468000655EE /* atunnel.xml */, AFC258730988A468000655EE /* barcode.xml */, AF73FF3B1A0988C500E485E9 /* binaryring.xml */, AFC258740988A468000655EE /* blaster.xml */, AFC258750988A468000655EE /* blinkbox.xml */, AFC258760988A468000655EE /* blitspin.xml */, AFC258770988A468000655EE /* blocktube.xml */, AFC258780988A468000655EE /* boing.xml */, AFC258790988A468000655EE /* bouboule.xml */, AFC2587A0988A468000655EE /* bouncingcow.xml */, AFC2587B0988A468000655EE /* boxed.xml */, AFC2587C0988A468000655EE /* boxfit.xml */, AFC2587D0988A468000655EE /* braid.xml */, AFC2587E0988A468000655EE /* bsod.xml */, AFC2587F0988A468000655EE /* bubble3d.xml */, AFC258800988A468000655EE /* bubbles.xml */, AFC258810988A468000655EE /* bumps.xml */, AFC258820988A468000655EE /* cage.xml */, AFC258830988A468000655EE /* carousel.xml */, AFC258840988A468000655EE /* ccurve.xml */, AFC258850988A468000655EE /* celtic.xml */, AFC258860988A468000655EE /* circuit.xml */, AF5C9B0F1A0CCF4E00B0147A /* cityflow.xml */, AFC258870988A468000655EE /* cloudlife.xml */, AF3581E61431D61D00E09C51 /* companioncube.xml */, AFC258880988A468000655EE /* compass.xml */, AFC258890988A468000655EE /* coral.xml */, AFC2588B0988A468000655EE /* crackberg.xml */, AFC2588C0988A468000655EE /* critical.xml */, AFC2588D0988A468000655EE /* crystal.xml */, AFC2588E0988A468000655EE /* cube21.xml */, AFC2588F0988A468000655EE /* cubenetic.xml */, AFEE10841D15EBA600AAC8F7 /* cubestack.xml */, AFC258900988A468000655EE /* cubestorm.xml */, AFEE10651D1341E300AAC8F7 /* cubetwist.xml */, AF4FF4D30D52CCAA00666F98 /* cubicgrid.xml */, AFF4634B0C44046500EE6509 /* cwaves.xml */, AFC258910988A468000655EE /* cynosure.xml */, AFC258920988A468000655EE /* dangerball.xml */, AFC258930988A468000655EE /* decayscreen.xml */, AFC258940988A468000655EE /* deco.xml */, AFC258950988A468000655EE /* deluxe.xml */, AFC258960988A468000655EE /* demon.xml */, AF3938321D0FBEC800205406 /* discoball.xml */, AFC258970988A468000655EE /* discrete.xml */, AFC258980988A468000655EE /* distort.xml */, AF77787909B6545E00EA3033 /* dnalogo.xml */, AFC258990988A468000655EE /* drift.xml */, AFEC23E51CB6EBDA00DE138F /* dymaxionmap.xml */, AFC2589B0988A468000655EE /* endgame.xml */, AFACE88B1CC83578008B24CD /* energystream.xml */, AFC2589C0988A468000655EE /* engine.xml */, AFC2589D0988A468000655EE /* epicycle.xml */, AFC2589E0988A468000655EE /* eruption.xml */, AFC2589F0988A468000655EE /* euler2d.xml */, AFC258A00988A468000655EE /* extrusion.xml */, AFC258A10988A468000655EE /* fadeplot.xml */, AFC258A20988A468000655EE /* fiberlamp.xml */, AFC258A40988A468000655EE /* fireworkx.xml */, AFC258A50988A468000655EE /* flag.xml */, AFC258A60988A468000655EE /* flame.xml */, AFC258A70988A468000655EE /* flipflop.xml */, AFC258A80988A468000655EE /* flipscreen3d.xml */, AFC258A90988A468000655EE /* fliptext.xml */, AFC258AA0988A468000655EE /* flow.xml */, AFC258AB0988A468000655EE /* fluidballs.xml */, AFC258AC0988A468000655EE /* flurry.xml */, AFC258AD0988A468000655EE /* flyingtoasters.xml */, AFC258AE0988A468000655EE /* fontglide.xml */, AFC258AF0988A468000655EE /* forest.xml */, AFC258B00988A468000655EE /* fuzzyflakes.xml */, AFC258B10988A468000655EE /* galaxy.xml */, AFC258B20988A468000655EE /* gears.xml */, AFF3C9FD17CCAD9A0028F240 /* geodesic.xml */, AF7ACFD819FF0BA600BD752B /* geodesicgears.xml */, AFC258B30988A468000655EE /* gflux.xml */, AFC258B40988A468000655EE /* glblur.xml */, AFF463730C440BAC00EE6509 /* glcells.xml */, AFC258B50988A468000655EE /* gleidescope.xml */, AFC258B60988A468000655EE /* glforestfire.xml */, AFC258B70988A468000655EE /* glhanoi.xml */, AFC258B80988A468000655EE /* glknots.xml */, AFC258B90988A468000655EE /* glmatrix.xml */, AFC258BA0988A468000655EE /* glplanet.xml */, AF48E16B0A0C26A400F94CF9 /* glschool.xml */, AFC258BB0988A468000655EE /* glslideshow.xml */, AFC258BC0988A468000655EE /* glsnake.xml */, AFC258BD0988A468000655EE /* gltext.xml */, AFC258BF0988A468000655EE /* goop.xml */, AFC258C00988A468000655EE /* grav.xml */, AFC258C10988A468000655EE /* greynetic.xml */, AFC258C20988A468000655EE /* halftone.xml */, AFC258C30988A468000655EE /* halo.xml */, AFC258C40988A468000655EE /* helix.xml */, AFB591BC178B81E600EA4005 /* hexadrop.xml */, AF1B0FBF1D7AB5210011DBE4 /* hexstrut.xml */, AF78D18E142DD99A002AAF77 /* hilbert.xml */, AFC258C50988A468000655EE /* hopalong.xml */, AFC258C60988A468000655EE /* hyperball.xml */, AFC0E8C31CDC60A9008CAFAC /* hydrostat.xml */, AFC258C70988A468000655EE /* hypercube.xml */, AFC258C80988A468000655EE /* hypertorus.xml */, AF3C715F0D624C7C0030CC0D /* hypnowheel.xml */, AFC258C90988A468000655EE /* ifs.xml */, AFC258CA0988A468000655EE /* imsmap.xml */, AFC258CB0988A468000655EE /* interaggregate.xml */, AFC258CC0988A468000655EE /* interference.xml */, AFC258CD0988A468000655EE /* intermomentary.xml */, AFC258CE0988A468000655EE /* jigglypuff.xml */, AFC258CF0988A468000655EE /* jigsaw.xml */, AFC258D00988A468000655EE /* juggle.xml */, AFC258D10988A468000655EE /* juggler3d.xml */, AFC258D20988A468000655EE /* julia.xml */, AFC258D30988A468000655EE /* kaleidescope.xml */, AF7511161782B66400380EA1 /* kaleidescope.xml */, AFB8A69A1782BA34004EDB85 /* kaleidocycle.xml */, AFC258D40988A468000655EE /* klein.xml */, AFC258D50988A468000655EE /* kumppa.xml */, AFC258D60988A468000655EE /* lament.xml */, AFC258D70988A468000655EE /* laser.xml */, AFC258D80988A468000655EE /* lavalite.xml */, AF1A17800D6D6F62008AF328 /* lcdscrub.xml */, AFC258D90988A468000655EE /* lightning.xml */, AFC258DA0988A468000655EE /* lisa.xml */, AFC258DB0988A468000655EE /* lissie.xml */, AFC258DC0988A468000655EE /* lmorph.xml */, AF4FD7020CE7A5BC005EE58E /* lockward.xml */, AFC258DD0988A468000655EE /* loop.xml */, AF0DCA370C4C74B700D76972 /* m6502.xml */, AFC258DE0988A468000655EE /* maze.xml */, AFC258DF0988A469000655EE /* memscroller.xml */, AFC258E00988A469000655EE /* menger.xml */, AFC258E10988A469000655EE /* metaballs.xml */, AFC258E20988A469000655EE /* mirrorblob.xml */, AFC258E30988A469000655EE /* mismunch.xml */, AFC258E40988A469000655EE /* moebius.xml */, AFE6A40D0CDD7BDC002805BF /* moebiusgears.xml */, AFC258E50988A469000655EE /* moire.xml */, AFC258E60988A469000655EE /* moire2.xml */, AFC258E70988A469000655EE /* molecule.xml */, AFC258E80988A469000655EE /* morph3d.xml */, AFC258E90988A469000655EE /* mountain.xml */, AFC258EA0988A469000655EE /* munch.xml */, AFC258EB0988A469000655EE /* nerverot.xml */, AFC258EC0988A469000655EE /* noof.xml */, AFC258ED0988A469000655EE /* noseguy.xml */, AFC258EE0988A469000655EE /* pacman.xml */, AFC258EF0988A469000655EE /* pedal.xml */, AFC258F00988A469000655EE /* penetrate.xml */, AFC258F10988A469000655EE /* penrose.xml */, AFC258F20988A469000655EE /* petri.xml */, AFC258F30988A469000655EE /* phosphor.xml */, AFD51DB80F063BE700471C02 /* photopile.xml */, AFC258F40988A469000655EE /* piecewise.xml */, AFC258F50988A469000655EE /* pinion.xml */, AFC258F60988A469000655EE /* pipes.xml */, AFC258F70988A469000655EE /* polyhedra.xml */, AFC258F80988A469000655EE /* polyominoes.xml */, AFC258F90988A469000655EE /* polytopes.xml */, AFC258FA0988A469000655EE /* pong.xml */, AFC258FB0988A469000655EE /* popsquares.xml */, AFFAB32C19158E2A0020F021 /* projectiveplane.xml */, AFC258FC0988A469000655EE /* providence.xml */, AFC258FD0988A469000655EE /* pulsar.xml */, AFC258FE0988A469000655EE /* pyro.xml */, AFC258FF0988A469000655EE /* qix.xml */, AFF28694178611720050A578 /* quasicrystal.xml */, AFC259000988A469000655EE /* queens.xml */, AFA211A41CD59FD800C0D2A1 /* raverhoop.xml */, AFCCCBAD09BFE4B000353F4D /* rdbomb.xml */, AFC259030988A469000655EE /* ripples.xml */, AFC259040988A469000655EE /* rocks.xml */, AF63A8081AB4EF5D00593C75 /* romanboy.xml */, AFC259050988A469000655EE /* rorschach.xml */, AFC259060988A469000655EE /* rotor.xml */, AFC259070988A469000655EE /* rotzoomer.xml */, AFC259080988A469000655EE /* rubik.xml */, AF32D9FC0F3AD1330080F535 /* rubikblocks.xml */, AFC259090988A469000655EE /* sballs.xml */, AFC2590A0988A469000655EE /* shadebobs.xml */, AFC2590B0988A469000655EE /* sierpinski.xml */, AFC2590C0988A469000655EE /* sierpinski3d.xml */, AFE2A4740E2E911200ADB298 /* skytentacles.xml */, AFC2590D0988A469000655EE /* slidescreen.xml */, AFC2590E0988A469000655EE /* slip.xml */, AFC2590F0988A469000655EE /* sonar.xml */, AFC259100988A469000655EE /* speedmine.xml */, AFC259110988A469000655EE /* sphere.xml */, AFC259130988A469000655EE /* spheremonics.xml */, AFC259140988A469000655EE /* spiral.xml */, AFCF83521AF5B5FD008BB7E1 /* splitflap.xml */, AFEE10A31D17E2B300AAC8F7 /* splodesic.xml */, AFC259150988A469000655EE /* spotlight.xml */, AFC259160988A469000655EE /* sproingies.xml */, AFC259170988A469000655EE /* squiral.xml */, AFC259190988A469000655EE /* stairs.xml */, AFC2591A0988A469000655EE /* starfish.xml */, AFC2591B0988A469000655EE /* starwars.xml */, AFC2591C0988A469000655EE /* stonerview.xml */, AFC2591D0988A469000655EE /* strange.xml */, AFC2591E0988A469000655EE /* substrate.xml */, AFC2591F0988A469000655EE /* superquadrics.xml */, AF4A3461102A59EB00A81B2A /* surfaces.xml */, AFC259200988A469000655EE /* swirl.xml */, AFC259210988A469000655EE /* t3d.xml */, AFC259220988A469000655EE /* tangram.xml */, AF68A49419196E3E00D41CD1 /* tessellimage.xml */, CE3D01681B76F83E00993C75 /* testx11.xml */, AFC259230988A469000655EE /* thornbird.xml */, AFC259240988A469000655EE /* timetunnel.xml */, AF998EFA0A083E8C0051049D /* topblock.xml */, AFC259250988A469000655EE /* triangle.xml */, AF3582211433318500E09C51 /* tronbit.xml */, AFC259260988A469000655EE /* truchet.xml */, AFC259270988A469000655EE /* twang.xml */, AFC259280988A469000655EE /* vermiculate.xml */, AFC259290988A469000655EE /* vidwhacker.xml */, AFC2592A0988A469000655EE /* vines.xml */, AF46E9E61CBBA3F900240FBC /* unicrud.xml */, AFDA65A3178A541A0070D24B /* unknownpleasures.xml */, AF0DCA610C4CBB8E00D76972 /* voronoi.xml */, AFC2592B0988A469000655EE /* wander.xml */, AFC2592C0988A469000655EE /* webcollage.xml */, AFC2592D0988A469000655EE /* whirlwindwarp.xml */, AFC2592F0988A469000655EE /* whirlygig.xml */, AF39E2AC198A15820064A58D /* winduprobot.xml */, AFC259300988A469000655EE /* worm.xml */, AFC259310988A469000655EE /* wormhole.xml */, AFC259320988A469000655EE /* xanalogtv.xml */, AFC259370988A469000655EE /* xflame.xml */, AFC259380988A469000655EE /* xjack.xml */, AFC259390988A469000655EE /* xlyap.xml */, AFC2593A0988A469000655EE /* xmatrix.xml */, AFC2593D0988A469000655EE /* xrayswarm.xml */, AFC2593F0988A469000655EE /* xspirograph.xml */, AFC259430988A469000655EE /* zoom.xml */, ); name = config; path = ../hacks/config; sourceTree = ""; }; AFE1FD520981E35400F7970E /* Utils */ = { isa = PBXGroup; children = ( AFDA11211934424D003D397F /* aligned_malloc.c */, AFDA11221934424D003D397F /* aligned_malloc.h */, CE9289D119BD00E200961F22 /* async_netdb.c */, CE9289D219BD00E300961F22 /* async_netdb.h */, AF9D473609B52EE0006E59CF /* colorbars.c */, AF9D473709B52EE0006E59CF /* colorbars.h */, AFC25B990988BC08000655EE /* colors.c */, AFC25B9A0988BC08000655EE /* colors.h */, AFE1FD530981E3CB00F7970E /* erase.c */, AFE1FD540981E3CB00F7970E /* erase.h */, AFA55A3E0993351F00F3E977 /* gllist.c */, AFA55A3F0993351F00F3E977 /* gllist.h */, AF480EB0098F63D600FB32B8 /* gltrackball.c */, AF480EB2098F63DF00FB32B8 /* gltrackball.h */, AFD56E0A0996A0ED00BA26F7 /* glut_roman.h */, AFD56E0B0996A0ED00BA26F7 /* glut_stroke.c */, AFD56E0C0996A0ED00BA26F7 /* glut_swidth.c */, AFD56E0D0996A0ED00BA26F7 /* glutstroke.h */, AFA5607909936FDD00F3E977 /* grab-ximage.c */, AFA5607A09936FDD00F3E977 /* grab-ximage.h */, AFAD462209D5F4DA00AB5F95 /* grabclient.c */, AFE1FD550981E3CB00F7970E /* hsv.c */, AFE1FD560981E3CB00F7970E /* hsv.h */, AF4774E7099D8D8C001F091E /* logo.c */, AFA55864099324D800F3E977 /* minixpm.c */, AFA55865099324D800F3E977 /* minixpm.h */, AFA55A93099336D800F3E977 /* normals.c */, AFA55A94099336D800F3E977 /* normals.h */, AF4775BE099D9E79001F091E /* resources.c */, AF4775BF099D9E79001F091E /* resources.h */, AF480EB7098F646400FB32B8 /* rotator.c */, AF480EAC098F63B000FB32B8 /* rotator.h */, AFB5A06B0981F4C600871B16 /* screenhack.h */, AFC254B909873AF9000655EE /* screenhackI.h */, AF480EBB098F649600FB32B8 /* sphere.c */, AF480EBA098F648700FB32B8 /* sphere.h */, AFE1FD570981E3CB00F7970E /* spline.c */, AFE1FD580981E3CB00F7970E /* spline.h */, AF77780809B64F4900EA3033 /* texfont.c */, AF77780909B64F4900EA3033 /* texfont.h */, AFC7592B158D8E8B00C5458E /* textclient.c */, AFC7592C158D8E8B00C5458E /* textclient.h */, AFC7592F158D9A7A00C5458E /* textclient-ios.m */, AFA211881CD1AA1800C0D2A1 /* textclient-mobile.c */, AFDA11231934424D003D397F /* thread_util.c */, AFDA11241934424D003D397F /* thread_util.h */, AF480EAD098F63BE00FB32B8 /* trackball.c */, AF480EAF098F63CD00FB32B8 /* trackball.h */, AF480ED2098F652A00FB32B8 /* tube.c */, AF480ED1098F651C00FB32B8 /* tube.h */, AFB5A0ED0981FF8B00871B16 /* usleep.c */, AFB5A0EE0981FF8B00871B16 /* usleep.h */, AFE943B319DDF97F000A5E6D /* utf8wc.c */, AFE943B419DDF97F000A5E6D /* utf8wc.h */, AFE1FD590981E3CB00F7970E /* utils.h */, AFE1FD5A0981E3CB00F7970E /* version.h */, AFA33BD00B0587EE002B0E7D /* webcollage-helper-cocoa.m */, AFE943AF19DD54C1000A5E6D /* xft.c */, AFE943B019DD54C1000A5E6D /* xft.h */, AF480CBB098E37D600FB32B8 /* xlockmore.c */, AF480C89098E346700FB32B8 /* xlockmore.h */, AF480C8A098E34AB00FB32B8 /* xlockmoreI.h */, AF975C91099C929800B05160 /* xpm-pixmap.c */, AF975C92099C929800B05160 /* xpm-pixmap.h */, AF0839AE09930C4900277BE9 /* xpm-ximage.c */, AF0839AF09930C4900277BE9 /* xpm-ximage.h */, AFE1FD5B0981E3CB00F7970E /* yarandom.c */, AFE1FD5C0981E3CB00F7970E /* yarandom.h */, ); name = Utils; path = ..; sourceTree = ""; }; AFE1FD610981E3E700F7970E /* Hacks */ = { isa = PBXGroup; children = ( AF480DC7098F4EB500FB32B8 /* XScreenSaver */, AF480DCF098F4F0600FB32B8 /* Xlockmore */, AF480DD0098F4F2000FB32B8 /* OpenGL */, ); name = Hacks; path = ..; sourceTree = ""; }; /* End PBXGroup section */ /* Begin PBXHeadersBuildPhase section */ AF4808BD098C3B6C00FB32B8 /* Headers */ = { isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; files = ( AFA55867099324D800F3E977 /* minixpm.h in Headers */, AFA55A540993353500F3E977 /* gllist.h in Headers */, AFA55A96099336D800F3E977 /* normals.h in Headers */, AFE943B219DD54C1000A5E6D /* xft.h in Headers */, AF975C94099C929800B05160 /* xpm-pixmap.h in Headers */, AF4775C1099D9E79001F091E /* resources.h in Headers */, AF9D473909B52EE0006E59CF /* colorbars.h in Headers */, AF2D8F331CEBA10300198014 /* jwxyz-timers.h in Headers */, AFDA11261934424D003D397F /* aligned_malloc.h in Headers */, AFDA11281934424D003D397F /* thread_util.h in Headers */, AFBF893F0E41D930006A2D66 /* fps.h in Headers */, AFBF89B20E424036006A2D66 /* fpsI.h in Headers */, AF6048FC157C07C600CA21E4 /* jwzgles.h in Headers */, AF6048FD157C07C600CA21E4 /* jwzglesI.h in Headers */, AFC7592E158D8E8B00C5458E /* textclient.h in Headers */, CE9289D419BD00E300961F22 /* async_netdb.h in Headers */, AFE943B619DDF97F000A5E6D /* utf8wc.h in Headers */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXHeadersBuildPhase section */ /* Begin PBXLegacyTarget section */ AF4FF4930D52CA0800666F98 /* m6502.h */ = { isa = PBXLegacyTarget; buildArgumentsString = "m6502.sh $(PRODUCT_NAME) images/m6502/*.asm"; buildConfigurationList = AF4FF4940D52CA0800666F98 /* Build configuration list for PBXLegacyTarget "m6502.h" */; buildPhases = ( ); buildToolPath = /bin/sh; buildWorkingDirectory = ../hacks/; dependencies = ( ); name = m6502.h; passBuildSettingsInEnvironment = 1; productName = molecules.h; }; AFA56119099378CB00F3E977 /* molecules.h */ = { isa = PBXLegacyTarget; buildArgumentsString = "molecules.sh $(PRODUCT_NAME) ../images/molecules/*.pdb"; buildConfigurationList = AFA5611A099378EA00F3E977 /* Build configuration list for PBXLegacyTarget "molecules.h" */; buildPhases = ( ); buildToolPath = /bin/sh; buildWorkingDirectory = ../hacks/glx/; dependencies = ( ); name = molecules.h; passBuildSettingsInEnvironment = 1; productName = molecules.h; }; /* End PBXLegacyTarget section */ /* Begin PBXNativeTarget section */ AF08398F09930B6B00277BE9 /* Atlantis */ = { isa = PBXNativeTarget; buildConfigurationList = AF08399F09930B6B00277BE9 /* Build configuration list for PBXNativeTarget "Atlantis" */; buildPhases = ( AF08399209930B6B00277BE9 /* Resources */, AF08399409930B6B00277BE9 /* Sources */, AF08399709930B6B00277BE9 /* Frameworks */, AF08399E09930B6B00277BE9 /* Rez */, AFA3D95309C03D9800E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AF08399009930B6B00277BE9 /* PBXTargetDependency */, ); name = Atlantis; productName = Atlantis; productReference = AF0839A209930B6B00277BE9 /* Atlantis.saver */; productType = "com.apple.product-type.bundle"; }; AF083A32099311D700277BE9 /* Atunnel */ = { isa = PBXNativeTarget; buildConfigurationList = AF083A45099311D700277BE9 /* Build configuration list for PBXNativeTarget "Atunnel" */; buildPhases = ( AF083A35099311D700277BE9 /* Resources */, AF083A37099311D700277BE9 /* Sources */, AF083A3D099311D700277BE9 /* Frameworks */, AF083A44099311D700277BE9 /* Rez */, AFA3D95509C03D9C00E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AF083A33099311D700277BE9 /* PBXTargetDependency */, ); name = Atunnel; productName = Atunnel; productReference = AF083A48099311D700277BE9 /* Atunnel.saver */; productType = "com.apple.product-type.bundle"; }; AF0DC7AB0C4C73F600D76972 /* m6502 */ = { isa = PBXNativeTarget; buildConfigurationList = AF0DC7BA0C4C73F600D76972 /* Build configuration list for PBXNativeTarget "m6502" */; buildPhases = ( AF0DC7AE0C4C73F600D76972 /* Resources */, AF0DC7B00C4C73F600D76972 /* Sources */, AF0DC7B40C4C73F600D76972 /* Frameworks */, AF0DC7B80C4C73F600D76972 /* Rez */, AF0DC7B90C4C73F600D76972 /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AF4FF4980D52CA5000666F98 /* PBXTargetDependency */, AF0DC7AC0C4C73F600D76972 /* PBXTargetDependency */, ); name = m6502; productName = Pong; productReference = AF0DC7BD0C4C73F600D76972 /* m6502.saver */; productType = "com.apple.product-type.bundle"; }; AF0DCA420C4CBB0D00D76972 /* Voronoi */ = { isa = PBXNativeTarget; buildConfigurationList = AF0DCA530C4CBB0D00D76972 /* Build configuration list for PBXNativeTarget "Voronoi" */; buildPhases = ( AF0DCA450C4CBB0D00D76972 /* Resources */, AF0DCA470C4CBB0D00D76972 /* Sources */, AF0DCA4A0C4CBB0D00D76972 /* Frameworks */, AF0DCA510C4CBB0D00D76972 /* Rez */, AF0DCA520C4CBB0D00D76972 /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AF0DCA430C4CBB0D00D76972 /* PBXTargetDependency */, ); name = Voronoi; productName = Voronoi; productReference = AF0DCA560C4CBB0D00D76972 /* Voronoi.saver */; productType = "com.apple.product-type.bundle"; }; AF1A17610D6D6EE3008AF328 /* LCDscrub */ = { isa = PBXNativeTarget; buildConfigurationList = AF1A17700D6D6EE3008AF328 /* Build configuration list for PBXNativeTarget "LCDscrub" */; buildPhases = ( AF1A17640D6D6EE3008AF328 /* Resources */, AF1A17670D6D6EE3008AF328 /* Sources */, AF1A176A0D6D6EE3008AF328 /* Frameworks */, AF1A176E0D6D6EE3008AF328 /* Rez */, AF1A176F0D6D6EE3008AF328 /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AF1A17620D6D6EE3008AF328 /* PBXTargetDependency */, ); name = LCDscrub; productName = LCDscrub; productReference = AF1A17730D6D6EE3008AF328 /* LCDscrub.saver */; productType = "com.apple.product-type.bundle"; }; AF1AD9E118500F9F00932759 /* XScreenSaverUpdater */ = { isa = PBXNativeTarget; buildConfigurationList = AF1ADA0E18500FA200932759 /* Build configuration list for PBXNativeTarget "XScreenSaverUpdater" */; buildPhases = ( AF1AD9DE18500F9F00932759 /* Sources */, AF1AD9DF18500F9F00932759 /* Frameworks */, AF1AD9E018500F9F00932759 /* Resources */, AF1ADA191850185F00932759 /* CopyFiles */, AF1ADA1E18501DC200932759 /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( ); name = XScreenSaverUpdater; productName = XScreenSaverUpdater; productReference = AF1AD9E218500F9F00932759 /* XScreenSaverUpdater.app */; productType = "com.apple.product-type.application"; }; AF1B0FA71D7AB4740011DBE4 /* Hexstrut */ = { isa = PBXNativeTarget; buildConfigurationList = AF1B0FB91D7AB4740011DBE4 /* Build configuration list for PBXNativeTarget "Hexstrut" */; buildPhases = ( AF1B0FAA1D7AB4740011DBE4 /* Resources */, AF1B0FAC1D7AB4740011DBE4 /* Sources */, AF1B0FAF1D7AB4740011DBE4 /* Frameworks */, AF1B0FB71D7AB4740011DBE4 /* Rez */, AF1B0FB81D7AB4740011DBE4 /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AF1B0FA81D7AB4740011DBE4 /* PBXTargetDependency */, ); name = Hexstrut; productName = DangerBall; productReference = AF1B0FBC1D7AB4740011DBE4 /* Hexstrut.saver */; productType = "com.apple.product-type.bundle"; }; AF32D9E00F3AD0B40080F535 /* RubikBlocks */ = { isa = PBXNativeTarget; buildConfigurationList = AF32D9F10F3AD0B40080F535 /* Build configuration list for PBXNativeTarget "RubikBlocks" */; buildPhases = ( AF32D9E30F3AD0B40080F535 /* Resources */, AF32D9E50F3AD0B40080F535 /* Sources */, AF32D9E80F3AD0B40080F535 /* Frameworks */, AF32D9EF0F3AD0B40080F535 /* Rez */, AF32D9F00F3AD0B40080F535 /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AF32D9E10F3AD0B40080F535 /* PBXTargetDependency */, ); name = RubikBlocks; productName = RubikBlocks; productReference = AF32D9F40F3AD0B40080F535 /* RubikBlocks.saver */; productType = "com.apple.product-type.bundle"; }; AF3581BF1431D47B00E09C51 /* CompanionCube */ = { isa = PBXNativeTarget; buildConfigurationList = AF3581D21431D47B00E09C51 /* Build configuration list for PBXNativeTarget "CompanionCube" */; buildPhases = ( AF3581C21431D47B00E09C51 /* Resources */, AF3581C51431D47B00E09C51 /* Sources */, AF3581C91431D47B00E09C51 /* Frameworks */, AF3581D01431D47B00E09C51 /* Rez */, AF3581D11431D47B00E09C51 /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AF3581C01431D47B00E09C51 /* PBXTargetDependency */, ); name = CompanionCube; productName = CompanionCube; productReference = AF3581D51431D47B00E09C51 /* CompanionCube.saver */; productType = "com.apple.product-type.bundle"; }; AF3581FB143330F900E09C51 /* TronBit */ = { isa = PBXNativeTarget; buildConfigurationList = AF358213143330F900E09C51 /* Build configuration list for PBXNativeTarget "TronBit" */; buildPhases = ( AF3581FE143330F900E09C51 /* Resources */, AF358202143330F900E09C51 /* Sources */, AF35820A143330F900E09C51 /* Frameworks */, AF358211143330F900E09C51 /* Rez */, AF358212143330F900E09C51 /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AF3581FC143330F900E09C51 /* PBXTargetDependency */, ); name = TronBit; productName = CompanionCube; productReference = AF358216143330F900E09C51 /* TronBit.saver */; productType = "com.apple.product-type.bundle"; }; AF35E88A0E63823600691F2F /* Jigsaw */ = { isa = PBXNativeTarget; buildConfigurationList = AF35E89D0E63823600691F2F /* Build configuration list for PBXNativeTarget "Jigsaw" */; buildPhases = ( AF35E88D0E63823600691F2F /* Resources */, AF35E88F0E63823600691F2F /* Sources */, AF35E8940E63823600691F2F /* Frameworks */, AF35E89B0E63823600691F2F /* Rez */, AF35E89C0E63823600691F2F /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AF35E88B0E63823600691F2F /* PBXTargetDependency */, ); name = Jigsaw; productName = Jigsaw; productReference = AF35E8A00E63823600691F2F /* Jigsaw.saver */; productType = "com.apple.product-type.bundle"; }; AF39381A1D0FBD6A00205406 /* Discoball */ = { isa = PBXNativeTarget; buildConfigurationList = AF39382C1D0FBD6A00205406 /* Build configuration list for PBXNativeTarget "Discoball" */; buildPhases = ( AF39381D1D0FBD6A00205406 /* Resources */, AF39381F1D0FBD6A00205406 /* Sources */, AF3938221D0FBD6A00205406 /* Frameworks */, AF39382A1D0FBD6A00205406 /* Rez */, AF39382B1D0FBD6A00205406 /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AF39381B1D0FBD6A00205406 /* PBXTargetDependency */, ); name = Discoball; productName = DangerBall; productReference = AF39382F1D0FBD6A00205406 /* Discoball.saver */; productType = "com.apple.product-type.bundle"; }; AF39E282198A11F60064A58D /* WindupRobot */ = { isa = PBXNativeTarget; buildConfigurationList = AF39E293198A11F60064A58D /* Build configuration list for PBXNativeTarget "WindupRobot" */; buildPhases = ( AF39E285198A11F60064A58D /* Resources */, AF39E287198A11F60064A58D /* Sources */, AF39E28A198A11F60064A58D /* Frameworks */, AF39E291198A11F60064A58D /* Rez */, AF39E292198A11F60064A58D /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AF39E283198A11F60064A58D /* PBXTargetDependency */, ); name = WindupRobot; productName = DangerBall; productReference = AF39E296198A11F60064A58D /* WindupRobot.saver */; productType = "com.apple.product-type.bundle"; }; AF3C71450D624BF50030CC0D /* Hypnowheel */ = { isa = PBXNativeTarget; buildConfigurationList = AF3C71560D624BF50030CC0D /* Build configuration list for PBXNativeTarget "Hypnowheel" */; buildPhases = ( AF3C71480D624BF50030CC0D /* Resources */, AF3C714A0D624BF50030CC0D /* Sources */, AF3C714D0D624BF50030CC0D /* Frameworks */, AF3C71540D624BF50030CC0D /* Rez */, AF3C71550D624BF50030CC0D /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AF3C71460D624BF50030CC0D /* PBXTargetDependency */, ); name = Hypnowheel; productName = Hypnowheel; productReference = AF3C71590D624BF50030CC0D /* Hypnowheel.saver */; productType = "com.apple.product-type.bundle"; }; AF46E9CF1CBBA2B300240FBC /* Unicrud */ = { isa = PBXNativeTarget; buildConfigurationList = AF46E9E11CBBA2B300240FBC /* Build configuration list for PBXNativeTarget "Unicrud" */; buildPhases = ( AF46E9D21CBBA2B300240FBC /* Resources */, AF46E9D41CBBA2B300240FBC /* Sources */, AF46E9D71CBBA2B300240FBC /* Frameworks */, AF46E9DF1CBBA2B300240FBC /* Rez */, AF46E9E01CBBA2B300240FBC /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AF46E9D01CBBA2B300240FBC /* PBXTargetDependency */, ); name = Unicrud; productName = DangerBall; productReference = AF46E9E41CBBA2B300240FBC /* Unicrud.saver */; productType = "com.apple.product-type.bundle"; }; AF476FB5099D154F001F091E /* Interference */ = { isa = PBXNativeTarget; buildConfigurationList = AF476FC3099D154F001F091E /* Build configuration list for PBXNativeTarget "Interference" */; buildPhases = ( AF476FB8099D154F001F091E /* Resources */, AF476FBB099D154F001F091E /* Sources */, AF476FBE099D154F001F091E /* Frameworks */, AF476FC2099D154F001F091E /* Rez */, AFA3D89509C03C4400E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AF476FB6099D154F001F091E /* PBXTargetDependency */, ); name = Interference; productName = Interference; productReference = AF476FC6099D154F001F091E /* Interference.saver */; productType = "com.apple.product-type.bundle"; }; AF476FDA099D1686001F091E /* Truchet */ = { isa = PBXNativeTarget; buildConfigurationList = AF476FE8099D1686001F091E /* Build configuration list for PBXNativeTarget "Truchet" */; buildPhases = ( AF476FDD099D1686001F091E /* Resources */, AF476FE0099D1686001F091E /* Sources */, AF476FE3099D1686001F091E /* Frameworks */, AF476FE7099D1686001F091E /* Rez */, AFA3D8E309C03CCA00E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AF476FDB099D1686001F091E /* PBXTargetDependency */, ); name = Truchet; productName = Truchet; productReference = AF476FEB099D1686001F091E /* Truchet.saver */; productType = "com.apple.product-type.bundle"; }; AF47704C099D4385001F091E /* Deluxe */ = { isa = PBXNativeTarget; buildConfigurationList = AF477059099D4385001F091E /* Build configuration list for PBXNativeTarget "Deluxe" */; buildPhases = ( AF47704F099D4385001F091E /* Resources */, AF477051099D4385001F091E /* Sources */, AF477054099D4385001F091E /* Frameworks */, AF477058099D4385001F091E /* Rez */, AFA3D86F09C03BF700E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AF47704D099D4385001F091E /* PBXTargetDependency */, ); name = Deluxe; productName = Deluxe; productReference = AF47705C099D4385001F091E /* Deluxe.saver */; productType = "com.apple.product-type.bundle"; }; AF477169099D4786001F091E /* Compass */ = { isa = PBXNativeTarget; buildConfigurationList = AF477176099D4786001F091E /* Build configuration list for PBXNativeTarget "Compass" */; buildPhases = ( AF47716C099D4786001F091E /* Resources */, AF47716E099D4786001F091E /* Sources */, AF477171099D4786001F091E /* Frameworks */, AF477175099D4786001F091E /* Rez */, AFA3D86309C03BE200E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AF47716A099D4786001F091E /* PBXTargetDependency */, ); name = Compass; productName = Compass; productReference = AF477179099D4786001F091E /* Compass.saver */; productType = "com.apple.product-type.bundle"; }; AF47717F099D4803001F091E /* Wander */ = { isa = PBXNativeTarget; buildConfigurationList = AF47718C099D4803001F091E /* Build configuration list for PBXNativeTarget "Wander" */; buildPhases = ( AF477182099D4803001F091E /* Resources */, AF477184099D4803001F091E /* Sources */, AF477187099D4803001F091E /* Frameworks */, AF47718B099D4803001F091E /* Rez */, AFA3D8E909C03CD500E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AF477180099D4803001F091E /* PBXTargetDependency */, ); name = Wander; productName = Wander; productReference = AF47718F099D4803001F091E /* Wander.saver */; productType = "com.apple.product-type.bundle"; }; AF4771A7099D4949001F091E /* T3D */ = { isa = PBXNativeTarget; buildConfigurationList = AF4771B4099D4949001F091E /* Build configuration list for PBXNativeTarget "T3D" */; buildPhases = ( AF4771AA099D4949001F091E /* Resources */, AF4771AC099D4949001F091E /* Sources */, AF4771AF099D4949001F091E /* Frameworks */, AF4771B3099D4949001F091E /* Rez */, AFA3D8E109C03CC400E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AF4771A8099D4949001F091E /* PBXTargetDependency */, ); name = T3D; productName = T3D; productReference = AF4771B7099D4949001F091E /* T3D.saver */; productType = "com.apple.product-type.bundle"; }; AF4771DB099D4D9A001F091E /* CCurve */ = { isa = PBXNativeTarget; buildConfigurationList = AF4771E8099D4D9A001F091E /* Build configuration list for PBXNativeTarget "CCurve" */; buildPhases = ( AF4771DE099D4D9A001F091E /* Resources */, AF4771E0099D4D9A001F091E /* Sources */, AF4771E3099D4D9A001F091E /* Frameworks */, AF4771E7099D4D9A001F091E /* Rez */, AFA3D85D09C03BD700E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AF4771DC099D4D9A001F091E /* PBXTargetDependency */, ); name = CCurve; productName = CCurve; productReference = AF4771EB099D4D9A001F091E /* CCurve.saver */; productType = "com.apple.product-type.bundle"; }; AF4771F2099D4E63001F091E /* NerveRot */ = { isa = PBXNativeTarget; buildConfigurationList = AF4771FF099D4E63001F091E /* Build configuration list for PBXNativeTarget "NerveRot" */; buildPhases = ( AF4771F5099D4E63001F091E /* Resources */, AF4771F7099D4E63001F091E /* Sources */, AF4771FA099D4E63001F091E /* Frameworks */, AF4771FE099D4E63001F091E /* Rez */, AFA3D8AF09C03C7300E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AF4771F3099D4E63001F091E /* PBXTargetDependency */, ); name = NerveRot; productName = NerveRot; productReference = AF477202099D4E64001F091E /* NerveRot.saver */; productType = "com.apple.product-type.bundle"; }; AF477208099D4EE8001F091E /* Whirlygig */ = { isa = PBXNativeTarget; buildConfigurationList = AF477215099D4EE8001F091E /* Build configuration list for PBXNativeTarget "Whirlygig" */; buildPhases = ( AF47720B099D4EE8001F091E /* Resources */, AF47720D099D4EE8001F091E /* Sources */, AF477210099D4EE8001F091E /* Frameworks */, AF477214099D4EE8001F091E /* Rez */, AFA3D8ED09C03CDB00E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AF477209099D4EE8001F091E /* PBXTargetDependency */, ); name = Whirlygig; productName = Whirlygig; productReference = AF477218099D4EE8001F091E /* Whirlygig.saver */; productType = "com.apple.product-type.bundle"; }; AF47721E099D4F67001F091E /* Anemone */ = { isa = PBXNativeTarget; buildConfigurationList = AF47722B099D4F67001F091E /* Build configuration list for PBXNativeTarget "Anemone" */; buildPhases = ( AF477221099D4F67001F091E /* Resources */, AF477223099D4F67001F091E /* Sources */, AF477226099D4F67001F091E /* Frameworks */, AF47722A099D4F67001F091E /* Rez */, AFCCCBB509C033DF00353F4D /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AF47721F099D4F67001F091E /* PBXTargetDependency */, ); name = Anemone; productName = Anemone; productReference = AF47722E099D4F67001F091E /* Anemone.saver */; productType = "com.apple.product-type.bundle"; }; AF477253099D5717001F091E /* Halftone */ = { isa = PBXNativeTarget; buildConfigurationList = AF477260099D5717001F091E /* Build configuration list for PBXNativeTarget "Halftone" */; buildPhases = ( AF477256099D5717001F091E /* Resources */, AF477258099D5717001F091E /* Sources */, AF47725B099D5717001F091E /* Frameworks */, AF47725F099D5717001F091E /* Rez */, AFA3D88509C03C2700E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AF477254099D5717001F091E /* PBXTargetDependency */, ); name = Halftone; productName = Halftone; productReference = AF477263099D5717001F091E /* Halftone.saver */; productType = "com.apple.product-type.bundle"; }; AF47726B099D57B9001F091E /* PopSquares */ = { isa = PBXNativeTarget; buildConfigurationList = AF477278099D57B9001F091E /* Build configuration list for PBXNativeTarget "PopSquares" */; buildPhases = ( AF47726E099D57B9001F091E /* Resources */, AF477270099D57B9001F091E /* Sources */, AF477273099D57B9001F091E /* Frameworks */, AF477277099D57B9001F091E /* Rez */, AFA3D8BF09C03C8D00E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AF47726C099D57B9001F091E /* PBXTargetDependency */, ); name = PopSquares; productName = PopSquares; productReference = AF47727B099D57B9001F091E /* PopSquares.saver */; productType = "com.apple.product-type.bundle"; }; AF477283099D5926001F091E /* Piecewise */ = { isa = PBXNativeTarget; buildConfigurationList = AF477290099D5926001F091E /* Build configuration list for PBXNativeTarget "Piecewise" */; buildPhases = ( AF477286099D5926001F091E /* Resources */, AF477288099D5926001F091E /* Sources */, AF47728B099D5926001F091E /* Frameworks */, AF47728F099D5926001F091E /* Rez */, AFA3D8BB09C03C8600E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AF477284099D5926001F091E /* PBXTargetDependency */, ); name = Piecewise; productName = Piecewise; productReference = AF477293099D5926001F091E /* Piecewise.saver */; productType = "com.apple.product-type.bundle"; }; AF477382099D65A1001F091E /* Wormhole */ = { isa = PBXNativeTarget; buildConfigurationList = AF47738F099D65A1001F091E /* Build configuration list for PBXNativeTarget "Wormhole" */; buildPhases = ( AF477385099D65A1001F091E /* Resources */, AF477387099D65A1001F091E /* Sources */, AF47738A099D65A1001F091E /* Frameworks */, AF47738E099D65A1001F091E /* Rez */, AFA3D8EF09C03CDE00E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AF477383099D65A1001F091E /* PBXTargetDependency */, ); name = Wormhole; productName = Wormhole; productReference = AF477392099D65A1001F091E /* Wormhole.saver */; productType = "com.apple.product-type.bundle"; }; AF47739A099D6648001F091E /* FuzzyFlakes */ = { isa = PBXNativeTarget; buildConfigurationList = AF4773A7099D6648001F091E /* Build configuration list for PBXNativeTarget "FuzzyFlakes" */; buildPhases = ( AF47739D099D6648001F091E /* Resources */, AF47739F099D6648001F091E /* Sources */, AF4773A2099D6648001F091E /* Frameworks */, AF4773A6099D6648001F091E /* Rez */, AFA3D87F09C03C1E00E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AF47739B099D6648001F091E /* PBXTargetDependency */, ); name = FuzzyFlakes; productName = FuzzyFlakes; productReference = AF4773AA099D6648001F091E /* FuzzyFlakes.saver */; productType = "com.apple.product-type.bundle"; }; AF4773C1099D67B9001F091E /* Anemotaxis */ = { isa = PBXNativeTarget; buildConfigurationList = AF4773CE099D67B9001F091E /* Build configuration list for PBXNativeTarget "Anemotaxis" */; buildPhases = ( AF4773C4099D67B9001F091E /* Resources */, AF4773C6099D67B9001F091E /* Sources */, AF4773C9099D67B9001F091E /* Frameworks */, AF4773CD099D67B9001F091E /* Rez */, AFCCCBC709C03AAF00353F4D /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AF4773C2099D67B9001F091E /* PBXTargetDependency */, ); name = Anemotaxis; productName = Anemotaxis; productReference = AF4773D1099D67B9001F091E /* Anemotaxis.saver */; productType = "com.apple.product-type.bundle"; }; AF477401099D69E7001F091E /* Intermomentary */ = { isa = PBXNativeTarget; buildConfigurationList = AF47740F099D69E7001F091E /* Build configuration list for PBXNativeTarget "Intermomentary" */; buildPhases = ( AF477404099D69E7001F091E /* Resources */, AF477407099D69E7001F091E /* Sources */, AF47740A099D69E7001F091E /* Frameworks */, AF47740E099D69E7001F091E /* Rez */, AFA3D89709C03C4700E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AF477402099D69E7001F091E /* PBXTargetDependency */, ); name = Intermomentary; productName = Intermomentary; productReference = AF477412099D69E7001F091E /* Intermomentary.saver */; productType = "com.apple.product-type.bundle"; }; AF477426099D7C70001F091E /* IFS */ = { isa = PBXNativeTarget; buildConfigurationList = AF477434099D7C70001F091E /* Build configuration list for PBXNativeTarget "IFS" */; buildPhases = ( AF477429099D7C70001F091E /* Resources */, AF47742C099D7C70001F091E /* Sources */, AF47742F099D7C70001F091E /* Frameworks */, AF477433099D7C70001F091E /* Rez */, AFA3D88F09C03C3900E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AF477427099D7C70001F091E /* PBXTargetDependency */, ); name = IFS; productName = IFS; productReference = AF477437099D7C70001F091E /* IFS.saver */; productType = "com.apple.product-type.bundle"; }; AF477442099D7D33001F091E /* XMatrix */ = { isa = PBXNativeTarget; buildConfigurationList = AF47744F099D7D33001F091E /* Build configuration list for PBXNativeTarget "XMatrix" */; buildPhases = ( AF477445099D7D33001F091E /* Resources */, AF477447099D7D33001F091E /* Sources */, AF47744A099D7D33001F091E /* Frameworks */, AF47744E099D7D33001F091E /* Rez */, AFA3D8F909C03CED00E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AF477443099D7D33001F091E /* PBXTargetDependency */, ); name = XMatrix; productName = XMatrix; productReference = AF477452099D7D33001F091E /* XMatrix.saver */; productType = "com.apple.product-type.bundle"; }; AF477483099D89E4001F091E /* Flame */ = { isa = PBXNativeTarget; buildConfigurationList = AF477490099D89E4001F091E /* Build configuration list for PBXNativeTarget "Flame" */; buildPhases = ( AF477486099D89E4001F091E /* Resources */, AF477488099D89E4001F091E /* Sources */, AF47748B099D89E4001F091E /* Frameworks */, AF47748F099D89E4001F091E /* Rez */, AFA3D87909C03C1200E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AF477484099D89E4001F091E /* PBXTargetDependency */, ); name = Flame; productName = Flame; productReference = AF477493099D89E4001F091E /* Flame.saver */; productType = "com.apple.product-type.bundle"; }; AF477499099D8A74001F091E /* Kaleidescope */ = { isa = PBXNativeTarget; buildConfigurationList = AF4774A6099D8A74001F091E /* Build configuration list for PBXNativeTarget "Kaleidescope" */; buildPhases = ( AF47749C099D8A74001F091E /* Resources */, AF47749E099D8A74001F091E /* Sources */, AF4774A1099D8A74001F091E /* Frameworks */, AF4774A5099D8A74001F091E /* Rez */, AFA3D89B09C03C4D00E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AF47749A099D8A74001F091E /* PBXTargetDependency */, ); name = Kaleidescope; productName = Kaleidescope; productReference = AF4774A9099D8A74001F091E /* Kaleidescope.saver */; productType = "com.apple.product-type.bundle"; }; AF4774B4099D8B5F001F091E /* LMorph */ = { isa = PBXNativeTarget; buildConfigurationList = AF4774C1099D8B5F001F091E /* Build configuration list for PBXNativeTarget "LMorph" */; buildPhases = ( AF4774B7099D8B5F001F091E /* Resources */, AF4774B9099D8B5F001F091E /* Sources */, AF4774BC099D8B5F001F091E /* Frameworks */, AF4774C0099D8B5F001F091E /* Rez */, AFA3D89F09C03C5300E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AF4774B5099D8B5F001F091E /* PBXTargetDependency */, ); name = LMorph; productName = LMorph; productReference = AF4774C4099D8B5F001F091E /* LMorph.saver */; productType = "com.apple.product-type.bundle"; }; AF4774CE099D8BFF001F091E /* Maze */ = { isa = PBXNativeTarget; buildConfigurationList = AF4774DB099D8BFF001F091E /* Build configuration list for PBXNativeTarget "Maze" */; buildPhases = ( AF4774D1099D8BFF001F091E /* Resources */, AF4774D3099D8BFF001F091E /* Sources */, AF4774D6099D8BFF001F091E /* Frameworks */, AF4774DA099D8BFF001F091E /* Rez */, AFA3D8A109C03C5600E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AF4774CF099D8BFF001F091E /* PBXTargetDependency */, ); name = Maze; productName = Maze; productReference = AF4774DE099D8BFF001F091E /* Maze.saver */; productType = "com.apple.product-type.bundle"; }; AF47755D099D9A1A001F091E /* Pedal */ = { isa = PBXNativeTarget; buildConfigurationList = AF47756A099D9A1A001F091E /* Build configuration list for PBXNativeTarget "Pedal" */; buildPhases = ( AF477560099D9A1A001F091E /* Resources */, AF477562099D9A1A001F091E /* Sources */, AF477565099D9A1A001F091E /* Frameworks */, AF477569099D9A1A001F091E /* Rez */, AFA3D8B309C03C7900E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AF47755E099D9A1A001F091E /* PBXTargetDependency */, ); name = Pedal; productName = Pedal; productReference = AF47756D099D9A1A001F091E /* Pedal.saver */; productType = "com.apple.product-type.bundle"; }; AF477583099D9C28001F091E /* Pyro */ = { isa = PBXNativeTarget; buildConfigurationList = AF477590099D9C28001F091E /* Build configuration list for PBXNativeTarget "Pyro" */; buildPhases = ( AF477586099D9C28001F091E /* Resources */, AF477588099D9C28001F091E /* Sources */, AF47758B099D9C28001F091E /* Frameworks */, AF47758F099D9C28001F091E /* Rez */, AFA3D8C109C03C9000E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AF477584099D9C28001F091E /* PBXTargetDependency */, ); name = Pyro; productName = Pyro; productReference = AF477593099D9C28001F091E /* Pyro.saver */; productType = "com.apple.product-type.bundle"; }; AF47759F099D9CF7001F091E /* Starfish */ = { isa = PBXNativeTarget; buildConfigurationList = AF4775AC099D9CF7001F091E /* Build configuration list for PBXNativeTarget "Starfish" */; buildPhases = ( AF4775A2099D9CF7001F091E /* Resources */, AF4775A4099D9CF7001F091E /* Sources */, AF4775A7099D9CF7001F091E /* Frameworks */, AF4775AB099D9CF7001F091E /* Rez */, AFA3D8DD09C03CBD00E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AF4775A0099D9CF7001F091E /* PBXTargetDependency */, ); name = Starfish; productName = Starfish; productReference = AF4775AF099D9CF7001F091E /* Starfish.saver */; productType = "com.apple.product-type.bundle"; }; AF4775D8099D9F69001F091E /* Coral */ = { isa = PBXNativeTarget; buildConfigurationList = AF4775E5099D9F69001F091E /* Build configuration list for PBXNativeTarget "Coral" */; buildPhases = ( AF4775DB099D9F69001F091E /* Resources */, AF4775DD099D9F69001F091E /* Sources */, AF4775E0099D9F69001F091E /* Frameworks */, AF4775E4099D9F69001F091E /* Rez */, AFA3D86509C03BE500E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AF4775D9099D9F69001F091E /* PBXTargetDependency */, ); name = Coral; productName = Coral; productReference = AF4775E8099D9F69001F091E /* Coral.saver */; productType = "com.apple.product-type.bundle"; }; AF4775F2099DA030001F091E /* Epicycle */ = { isa = PBXNativeTarget; buildConfigurationList = AF4775FF099DA030001F091E /* Build configuration list for PBXNativeTarget "Epicycle" */; buildPhases = ( AF4775F5099DA030001F091E /* Resources */, AF4775F7099DA030001F091E /* Sources */, AF4775FA099DA030001F091E /* Frameworks */, AF4775FE099DA030001F091E /* Rez */, AFA3D87309C03C0000E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AF4775F3099DA030001F091E /* PBXTargetDependency */, ); name = Epicycle; productName = Epicycle; productReference = AF477602099DA030001F091E /* Epicycle.saver */; productType = "com.apple.product-type.bundle"; }; AF477613099DA26C001F091E /* Kumppa */ = { isa = PBXNativeTarget; buildConfigurationList = AF477620099DA26C001F091E /* Build configuration list for PBXNativeTarget "Kumppa" */; buildPhases = ( AF477616099DA26C001F091E /* Resources */, AF477618099DA26C001F091E /* Sources */, AF47761B099DA26C001F091E /* Frameworks */, AF47761F099DA26C001F091E /* Rez */, AFA3D89D09C03C5000E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AF477614099DA26C001F091E /* PBXTargetDependency */, ); name = Kumppa; productName = Kumppa; productReference = AF477623099DA26C001F091E /* Kumppa.saver */; productType = "com.apple.product-type.bundle"; }; AF477644099DA6D0001F091E /* Squiral */ = { isa = PBXNativeTarget; buildConfigurationList = AF477651099DA6D0001F091E /* Build configuration list for PBXNativeTarget "Squiral" */; buildPhases = ( AF477647099DA6D0001F091E /* Resources */, AF477649099DA6D0001F091E /* Sources */, AF47764C099DA6D0001F091E /* Frameworks */, AF477650099DA6D0001F091E /* Rez */, AFA3D8DB09C03CBA00E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AF477645099DA6D0001F091E /* PBXTargetDependency */, ); name = Squiral; productName = Squiral; productReference = AF477654099DA6D0001F091E /* Squiral.saver */; productType = "com.apple.product-type.bundle"; }; AF47765A099DA78E001F091E /* Critical */ = { isa = PBXNativeTarget; buildConfigurationList = AF477667099DA78E001F091E /* Build configuration list for PBXNativeTarget "Critical" */; buildPhases = ( AF47765D099DA78E001F091E /* Resources */, AF47765F099DA78E001F091E /* Sources */, AF477662099DA78E001F091E /* Frameworks */, AF477666099DA78E001F091E /* Rez */, AFA3D86709C03BE800E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AF47765B099DA78E001F091E /* PBXTargetDependency */, ); name = Critical; productName = Critical; productReference = AF47766A099DA78F001F091E /* Critical.saver */; productType = "com.apple.product-type.bundle"; }; AF477670099DA849001F091E /* Petri */ = { isa = PBXNativeTarget; buildConfigurationList = AF47767D099DA849001F091E /* Build configuration list for PBXNativeTarget "Petri" */; buildPhases = ( AF477673099DA849001F091E /* Resources */, AF477675099DA849001F091E /* Sources */, AF477678099DA849001F091E /* Frameworks */, AF47767C099DA849001F091E /* Rez */, AFA3D8B709C03C7F00E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AF477671099DA849001F091E /* PBXTargetDependency */, ); name = Petri; productName = Petri; productReference = AF477680099DA849001F091E /* Petri.saver */; productType = "com.apple.product-type.bundle"; }; AF47768F099DAA6F001F091E /* Blaster */ = { isa = PBXNativeTarget; buildConfigurationList = AF47769C099DAA6F001F091E /* Build configuration list for PBXNativeTarget "Blaster" */; buildPhases = ( AF477692099DAA6F001F091E /* Resources */, AF477694099DAA6F001F091E /* Sources */, AF477697099DAA6F001F091E /* Frameworks */, AF47769B099DAA6F001F091E /* Rez */, AFCCCBD109C03AFC00353F4D /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AF477690099DAA6F001F091E /* PBXTargetDependency */, ); name = Blaster; productName = Blaster; productReference = AF47769F099DAA6F001F091E /* Blaster.saver */; productType = "com.apple.product-type.bundle"; }; AF4776AA099DABDD001F091E /* XSpirograph */ = { isa = PBXNativeTarget; buildConfigurationList = AF4776B7099DABDD001F091E /* Build configuration list for PBXNativeTarget "XSpirograph" */; buildPhases = ( AF4776AD099DABDD001F091E /* Resources */, AF4776AF099DABDD001F091E /* Sources */, AF4776B2099DABDD001F091E /* Frameworks */, AF4776B6099DABDD001F091E /* Rez */, AFA3D8FD09C03CF400E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AF4776AB099DABDD001F091E /* PBXTargetDependency */, ); name = XSpirograph; productName = XSpirograph; productReference = AF4776BA099DABDD001F091E /* XSpirograph.saver */; productType = "com.apple.product-type.bundle"; }; AF4776C0099DAC8A001F091E /* XRaySwarm */ = { isa = PBXNativeTarget; buildConfigurationList = AF4776CD099DAC8A001F091E /* Build configuration list for PBXNativeTarget "XRaySwarm" */; buildPhases = ( AF4776C3099DAC8A001F091E /* Resources */, AF4776C5099DAC8A001F091E /* Sources */, AF4776C8099DAC8A001F091E /* Frameworks */, AF4776CC099DAC8A001F091E /* Rez */, AFA3D8FB09C03CF100E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AF4776C1099DAC8A001F091E /* PBXTargetDependency */, ); name = XRaySwarm; productName = XRaySwarm; productReference = AF4776D0099DAC8A001F091E /* XRaySwarm.saver */; productType = "com.apple.product-type.bundle"; }; AF4776DB099DADDF001F091E /* WhirlWindWarp */ = { isa = PBXNativeTarget; buildConfigurationList = AF4776E8099DADDF001F091E /* Build configuration list for PBXNativeTarget "WhirlWindWarp" */; buildPhases = ( AF4776DE099DADDF001F091E /* Resources */, AF4776E0099DADDF001F091E /* Sources */, AF4776E3099DADDF001F091E /* Frameworks */, AF4776E7099DADDF001F091E /* Rez */, AFA3D8EB09C03CD800E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AF4776DC099DADDF001F091E /* PBXTargetDependency */, ); name = WhirlWindWarp; productName = WhirlWindWarp; productReference = AF4776EB099DADDF001F091E /* WhirlWindWarp.saver */; productType = "com.apple.product-type.bundle"; }; AF4776F1099DAE7A001F091E /* Vermiculate */ = { isa = PBXNativeTarget; buildConfigurationList = AF4776FE099DAE7A001F091E /* Build configuration list for PBXNativeTarget "Vermiculate" */; buildPhases = ( AF4776F4099DAE7A001F091E /* Resources */, AF4776F6099DAE7A001F091E /* Sources */, AF4776F9099DAE7A001F091E /* Frameworks */, AF4776FD099DAE7A001F091E /* Rez */, AFA3D8E709C03CD100E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AF4776F2099DAE7A001F091E /* PBXTargetDependency */, ); name = Vermiculate; productName = Vermiculate; productReference = AF477701099DAE7A001F091E /* Vermiculate.saver */; productType = "com.apple.product-type.bundle"; }; AF47770D099DAF9F001F091E /* CloudLife */ = { isa = PBXNativeTarget; buildConfigurationList = AF47771A099DAF9F001F091E /* Build configuration list for PBXNativeTarget "CloudLife" */; buildPhases = ( AF477710099DAF9F001F091E /* Resources */, AF477712099DAF9F001F091E /* Sources */, AF477715099DAF9F001F091E /* Frameworks */, AF477719099DAF9F001F091E /* Rez */, AFA3D86109C03BDE00E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AF47770E099DAF9F001F091E /* PBXTargetDependency */, ); name = CloudLife; productName = CloudLife; productReference = AF47771D099DAF9F001F091E /* CloudLife.saver */; productType = "com.apple.product-type.bundle"; }; AF477723099DB044001F091E /* Substrate */ = { isa = PBXNativeTarget; buildConfigurationList = AF477730099DB044001F091E /* Build configuration list for PBXNativeTarget "Substrate" */; buildPhases = ( AF477726099DB044001F091E /* Resources */, AF477728099DB044001F091E /* Sources */, AF47772B099DB044001F091E /* Frameworks */, AF47772F099DB044001F091E /* Rez */, AFA3D8DF09C03CC000E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AF477724099DB044001F091E /* PBXTargetDependency */, ); name = Substrate; productName = Substrate; productReference = AF477733099DB044001F091E /* Substrate.saver */; productType = "com.apple.product-type.bundle"; }; AF477752099DB61E001F091E /* Interaggregate */ = { isa = PBXNativeTarget; buildConfigurationList = AF47775F099DB61E001F091E /* Build configuration list for PBXNativeTarget "Interaggregate" */; buildPhases = ( AF477755099DB61E001F091E /* Resources */, AF477757099DB61E001F091E /* Sources */, AF47775A099DB61E001F091E /* Frameworks */, AF47775E099DB61E001F091E /* Rez */, AFA3D89309C03C4000E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AF477753099DB61E001F091E /* PBXTargetDependency */, ); name = Interaggregate; productName = Interaggregate; productReference = AF477762099DB61E001F091E /* Interaggregate.saver */; productType = "com.apple.product-type.bundle"; }; AF477774099DB965001F091E /* Celtic */ = { isa = PBXNativeTarget; buildConfigurationList = AF477781099DB965001F091E /* Build configuration list for PBXNativeTarget "Celtic" */; buildPhases = ( AF477777099DB965001F091E /* Resources */, AF477779099DB965001F091E /* Sources */, AF47777C099DB965001F091E /* Frameworks */, AF477780099DB965001F091E /* Rez */, AFA3D85F09C03BDA00E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AF477775099DB965001F091E /* PBXTargetDependency */, ); name = Celtic; productName = Celtic; productReference = AF477784099DB965001F091E /* Celtic.saver */; productType = "com.apple.product-type.bundle"; }; AF477790099DBA90001F091E /* FluidBalls */ = { isa = PBXNativeTarget; buildConfigurationList = AF47779D099DBA90001F091E /* Build configuration list for PBXNativeTarget "FluidBalls" */; buildPhases = ( AF477793099DBA90001F091E /* Resources */, AF477795099DBA90001F091E /* Sources */, AF477798099DBA90001F091E /* Frameworks */, AF47779C099DBA90001F091E /* Rez */, AFA3D87B09C03C1700E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AF477791099DBA90001F091E /* PBXTargetDependency */, ); name = FluidBalls; productName = FluidBalls; productReference = AF4777A0099DBA90001F091E /* FluidBalls.saver */; productType = "com.apple.product-type.bundle"; }; AF4777D1099DC183001F091E /* BoxFit */ = { isa = PBXNativeTarget; buildConfigurationList = AF4777DE099DC183001F091E /* Build configuration list for PBXNativeTarget "BoxFit" */; buildPhases = ( AF4777D4099DC183001F091E /* Resources */, AF4777D6099DC183001F091E /* Sources */, AF4777D9099DC183001F091E /* Frameworks */, AF4777DD099DC183001F091E /* Rez */, AFCCCBD509C03B0500353F4D /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AF4777D2099DC183001F091E /* PBXTargetDependency */, ); name = BoxFit; productName = BoxFit; productReference = AF4777E1099DC183001F091E /* BoxFit.saver */; productType = "com.apple.product-type.bundle"; }; AF4778AB099DDB79001F091E /* Penetrate */ = { isa = PBXNativeTarget; buildConfigurationList = AF4778B8099DDB79001F091E /* Build configuration list for PBXNativeTarget "Penetrate" */; buildPhases = ( AF4778AE099DDB79001F091E /* Resources */, AF4778B0099DDB79001F091E /* Sources */, AF4778B3099DDB79001F091E /* Frameworks */, AF4778B7099DDB79001F091E /* Rez */, AFA3D8B509C03C7C00E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AF4778AC099DDB79001F091E /* PBXTargetDependency */, ); name = Penetrate; productName = Penetrate; productReference = AF4778BB099DDB79001F091E /* Penetrate.saver */; productType = "com.apple.product-type.bundle"; }; AF4778C7099DDCAE001F091E /* XJack */ = { isa = PBXNativeTarget; buildConfigurationList = AF4778D4099DDCAE001F091E /* Build configuration list for PBXNativeTarget "XJack" */; buildPhases = ( AF4778CA099DDCAE001F091E /* Resources */, AF4778CC099DDCAE001F091E /* Sources */, AF4778CF099DDCAE001F091E /* Frameworks */, AF4778D3099DDCAE001F091E /* Rez */, AFA3D8F509C03CE800E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AF4778C8099DDCAE001F091E /* PBXTargetDependency */, ); name = XJack; productName = XJack; productReference = AF4778D7099DDCAE001F091E /* XJack.saver */; productType = "com.apple.product-type.bundle"; }; AF4778E8099DDDC8001F091E /* Cynosure */ = { isa = PBXNativeTarget; buildConfigurationList = AF4778F5099DDDC8001F091E /* Build configuration list for PBXNativeTarget "Cynosure" */; buildPhases = ( AF4778EB099DDDC8001F091E /* Resources */, AF4778ED099DDDC8001F091E /* Sources */, AF4778F0099DDDC8001F091E /* Frameworks */, AF4778F4099DDDC8001F091E /* Rez */, AFA3D86909C03BEC00E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AF4778E9099DDDC8001F091E /* PBXTargetDependency */, ); name = Cynosure; productName = Cynosure; productReference = AF4778F8099DDDC8001F091E /* Cynosure.saver */; productType = "com.apple.product-type.bundle"; }; AF477909099DE379001F091E /* Flag */ = { isa = PBXNativeTarget; buildConfigurationList = AF477916099DE379001F091E /* Build configuration list for PBXNativeTarget "Flag" */; buildPhases = ( AF47790C099DE379001F091E /* Resources */, AF47790E099DE379001F091E /* Sources */, AF477911099DE379001F091E /* Frameworks */, AF477915099DE379001F091E /* Rez */, AFA3D91709C03D2400E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AF47790A099DE379001F091E /* PBXTargetDependency */, ); name = Flag; productName = Flag; productReference = AF477919099DE379001F091E /* Flag.saver */; productType = "com.apple.product-type.bundle"; }; AF47792A099DE4C7001F091E /* Slip */ = { isa = PBXNativeTarget; buildConfigurationList = AF477937099DE4C7001F091E /* Build configuration list for PBXNativeTarget "Slip" */; buildPhases = ( AF47792D099DE4C7001F091E /* Resources */, AF47792F099DE4C7001F091E /* Sources */, AF477932099DE4C7001F091E /* Frameworks */, AF477936099DE4C7001F091E /* Rez */, AFA3D8D309C03CAE00E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AF47792B099DE4C7001F091E /* PBXTargetDependency */, ); name = Slip; productName = Slip; productReference = AF47793A099DE4C7001F091E /* Slip.saver */; productType = "com.apple.product-type.bundle"; }; AF4808C0098C3B6C00FB32B8 /* jwxyz */ = { isa = PBXNativeTarget; buildConfigurationList = AF4808C2098C3B8B00FB32B8 /* Build configuration list for PBXNativeTarget "jwxyz" */; buildPhases = ( AF4E1D1819CE7013002B6190 /* Update GC build settings */, AF4808BD098C3B6C00FB32B8 /* Headers */, AF4808BE098C3B6C00FB32B8 /* Sources */, AF4808BF098C3B6C00FB32B8 /* Frameworks */, ); buildRules = ( ); dependencies = ( ); name = jwxyz; productName = jwxyz; productReference = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; productType = "com.apple.product-type.library.static"; }; AF480C49098E301400FB32B8 /* Helix */ = { isa = PBXNativeTarget; buildConfigurationList = AF480C55098E301400FB32B8 /* Build configuration list for PBXNativeTarget "Helix" */; buildPhases = ( AF480C4C098E301400FB32B8 /* Resources */, AF480C4E098E301400FB32B8 /* Sources */, AF480C50098E301400FB32B8 /* Frameworks */, AF480C54098E301400FB32B8 /* Rez */, AFA3D88909C03C2E00E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AF480C4A098E301400FB32B8 /* PBXTargetDependency */, ); name = Helix; productName = Helix; productReference = AF480C58098E301400FB32B8 /* Helix.saver */; productType = "com.apple.product-type.bundle"; }; AF480D72098EEDDE00FB32B8 /* Drift */ = { isa = PBXNativeTarget; buildConfigurationList = AF480D7E098EEDDE00FB32B8 /* Build configuration list for PBXNativeTarget "Drift" */; buildPhases = ( AF480D75098EEDDE00FB32B8 /* Resources */, AF480D77098EEDDE00FB32B8 /* Sources */, AF480D79098EEDDE00FB32B8 /* Frameworks */, AF480D7D098EEDDE00FB32B8 /* Rez */, AFA3D90F09C03D1800E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AF480D73098EEDDE00FB32B8 /* PBXTargetDependency */, ); name = Drift; productName = Drift; productReference = AF480D81098EEDDE00FB32B8 /* Drift.saver */; productType = "com.apple.product-type.bundle"; }; AF4810EB09909FBA00FB32B8 /* DangerBall */ = { isa = PBXNativeTarget; buildConfigurationList = AF4810F809909FBA00FB32B8 /* Build configuration list for PBXNativeTarget "DangerBall" */; buildPhases = ( AF4810EE09909FBA00FB32B8 /* Resources */, AF4810F009909FBA00FB32B8 /* Sources */, AF4810F309909FBA00FB32B8 /* Frameworks */, AF4810F709909FBA00FB32B8 /* Rez */, AFA3D97109C03DD000E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AF4810EC09909FBA00FB32B8 /* PBXTargetDependency */, ); name = DangerBall; productName = DangerBall; productReference = AF4810FB09909FBA00FB32B8 /* DangerBall.saver */; productType = "com.apple.product-type.bundle"; }; AF4812500990CE2700FB32B8 /* Gears */ = { isa = PBXNativeTarget; buildConfigurationList = AF4812610990CE2700FB32B8 /* Build configuration list for PBXNativeTarget "Gears" */; buildPhases = ( AF4812530990CE2700FB32B8 /* Resources */, AF4812550990CE2700FB32B8 /* Sources */, AF4812590990CE2700FB32B8 /* Frameworks */, AF4812600990CE2700FB32B8 /* Rez */, AFA3D98309C03DEE00E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AF4812510990CE2700FB32B8 /* PBXTargetDependency */, ); name = Gears; productName = Gears; productReference = AF4812640990CE2700FB32B8 /* Gears.saver */; productType = "com.apple.product-type.bundle"; }; AF4812B30990D3D900FB32B8 /* Pipes */ = { isa = PBXNativeTarget; buildConfigurationList = AF4812C30990D3D900FB32B8 /* Build configuration list for PBXNativeTarget "Pipes" */; buildPhases = ( AF4812B60990D3D900FB32B8 /* Resources */, AF4812B80990D3D900FB32B8 /* Sources */, AF4812BB0990D3D900FB32B8 /* Frameworks */, AF4812C20990D3D900FB32B8 /* Rez */, AFA3D9B509C03E5700E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AF4812B40990D3D900FB32B8 /* PBXTargetDependency */, ); name = Pipes; productName = Pipes; productReference = AF4812C60990D3D900FB32B8 /* Pipes.saver */; productType = "com.apple.product-type.bundle"; }; AF48DEEF0A0C25E000F94CF9 /* GLSchool */ = { isa = PBXNativeTarget; buildConfigurationList = AF48DF000A0C25E000F94CF9 /* Build configuration list for PBXNativeTarget "GLSchool" */; buildPhases = ( AF48DEF20A0C25E000F94CF9 /* Resources */, AF48DEF40A0C25E000F94CF9 /* Sources */, AF48DEF70A0C25E000F94CF9 /* Frameworks */, AF48DEFE0A0C25E000F94CF9 /* Rez */, AF48DEFF0A0C25E000F94CF9 /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AF48DEF00A0C25E000F94CF9 /* PBXTargetDependency */, ); name = GLSchool; productName = GLSchool; productReference = AF48DF030A0C25E000F94CF9 /* GLSchool.saver */; productType = "com.apple.product-type.bundle"; }; AF4A3449102A593600A81B2A /* Surfaces */ = { isa = PBXNativeTarget; buildConfigurationList = AF4A345A102A593600A81B2A /* Build configuration list for PBXNativeTarget "Surfaces" */; buildPhases = ( AF4A344C102A593600A81B2A /* Resources */, AF4A344E102A593600A81B2A /* Sources */, AF4A3451102A593600A81B2A /* Frameworks */, AF4A3458102A593600A81B2A /* Rez */, AF4A3459102A593600A81B2A /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AF4A344A102A593600A81B2A /* PBXTargetDependency */, ); name = Surfaces; productName = Surfaces; productReference = AF4A345D102A593600A81B2A /* Surfaces.saver */; productType = "com.apple.product-type.bundle"; }; AF4FD6E60CE7A486005EE58E /* Lockward */ = { isa = PBXNativeTarget; buildConfigurationList = AF4FD6F70CE7A486005EE58E /* Build configuration list for PBXNativeTarget "Lockward" */; buildPhases = ( AF4FD6E90CE7A486005EE58E /* Resources */, AF4FD6EB0CE7A486005EE58E /* Sources */, AF4FD6EE0CE7A486005EE58E /* Frameworks */, AF4FD6F50CE7A486005EE58E /* Rez */, AF4FD6F60CE7A486005EE58E /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AF4FD6E70CE7A486005EE58E /* PBXTargetDependency */, ); name = Lockward; productName = Lockward; productReference = AF4FD6FA0CE7A486005EE58E /* Lockward.saver */; productType = "com.apple.product-type.bundle"; }; AF4FF4BA0D52CBDE00666F98 /* CubicGrid */ = { isa = PBXNativeTarget; buildConfigurationList = AF4FF4CB0D52CBDE00666F98 /* Build configuration list for PBXNativeTarget "CubicGrid" */; buildPhases = ( AF4FF4BD0D52CBDE00666F98 /* Resources */, AF4FF4BF0D52CBDE00666F98 /* Sources */, AF4FF4C20D52CBDE00666F98 /* Frameworks */, AF4FF4C90D52CBDE00666F98 /* Rez */, AF4FF4CA0D52CBDE00666F98 /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AF4FF4BB0D52CBDE00666F98 /* PBXTargetDependency */, ); name = CubicGrid; productName = CubicGrid; productReference = AF4FF4CE0D52CBDE00666F98 /* CubicGrid.saver */; productType = "com.apple.product-type.bundle"; }; AF5C9AF91A0CCE6E00B0147A /* Cityflow */ = { isa = PBXNativeTarget; buildConfigurationList = AF5C9B0A1A0CCE6E00B0147A /* Build configuration list for PBXNativeTarget "Cityflow" */; buildPhases = ( AF5C9AFC1A0CCE6E00B0147A /* Resources */, AF5C9AFE1A0CCE6E00B0147A /* Sources */, AF5C9B011A0CCE6E00B0147A /* Frameworks */, AF5C9B081A0CCE6E00B0147A /* Rez */, AF5C9B091A0CCE6E00B0147A /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AF5C9AFA1A0CCE6E00B0147A /* PBXTargetDependency */, ); name = Cityflow; productName = DangerBall; productReference = AF5C9B0D1A0CCE6E00B0147A /* Cityflow.saver */; productType = "com.apple.product-type.bundle"; }; AF63A7F11AB4EDDB00593C75 /* RomanBoy */ = { isa = PBXNativeTarget; buildConfigurationList = AF63A8031AB4EDDB00593C75 /* Build configuration list for PBXNativeTarget "RomanBoy" */; buildPhases = ( AF63A7F41AB4EDDB00593C75 /* Resources */, AF63A7F61AB4EDDB00593C75 /* Sources */, AF63A7F91AB4EDDB00593C75 /* Frameworks */, AF63A8011AB4EDDB00593C75 /* Rez */, AF63A8021AB4EDDB00593C75 /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AF63A7F21AB4EDDB00593C75 /* PBXTargetDependency */, ); name = RomanBoy; productName = Klein; productReference = AF63A8061AB4EDDB00593C75 /* RomanBoy.saver */; productType = "com.apple.product-type.bundle"; }; AF63F2471C3465BE0033E133 /* Apple2-iOS */ = { isa = PBXNativeTarget; buildConfigurationList = AF63F44B1C3465BE0033E133 /* Build configuration list for PBXNativeTarget "Apple2-iOS" */; buildPhases = ( AF63F24F1C3465BE0033E133 /* Update Function Table */, AF63F2501C3465BE0033E133 /* Resources */, AF63F3271C3465BE0033E133 /* Sources */, AF63F4401C3465BE0033E133 /* Frameworks */, AF63F44A1C3465BE0033E133 /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AF63F2481C3465BE0033E133 /* PBXTargetDependency */, AF63F24A1C3465BE0033E133 /* PBXTargetDependency */, AF63F24C1C3465BE0033E133 /* PBXTargetDependency */, ); name = "Apple2-iOS"; productName = SaverTester; productReference = AF63F44E1C3465BE0033E133 /* Apple2.app */; productType = "com.apple.product-type.application"; }; AF63F4501C34682A0033E133 /* Phosphor-iOS */ = { isa = PBXNativeTarget; buildConfigurationList = AF63F4711C34682A0033E133 /* Build configuration list for PBXNativeTarget "Phosphor-iOS" */; buildPhases = ( AF63F4571C34682A0033E133 /* Update Function Table */, AF63F4581C34682A0033E133 /* Resources */, AF63F45E1C34682A0033E133 /* Sources */, AF63F4661C34682A0033E133 /* Frameworks */, AF63F4701C34682A0033E133 /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AF63F4511C34682A0033E133 /* PBXTargetDependency */, AF63F4531C34682A0033E133 /* PBXTargetDependency */, AF63F4551C34682A0033E133 /* PBXTargetDependency */, ); name = "Phosphor-iOS"; productName = SaverTester; productReference = AF63F4741C34682A0033E133 /* Phosphor.app */; productType = "com.apple.product-type.application"; }; AF63F4781C3469FC0033E133 /* TestX11-iOS */ = { isa = PBXNativeTarget; buildConfigurationList = AF63F4971C3469FC0033E133 /* Build configuration list for PBXNativeTarget "TestX11-iOS" */; buildPhases = ( AF63F47F1C3469FC0033E133 /* Update Function Table */, AF63F4801C3469FC0033E133 /* Resources */, AF63F4861C3469FC0033E133 /* Sources */, AF63F48C1C3469FC0033E133 /* Frameworks */, AF63F4961C3469FC0033E133 /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AF63F4791C3469FC0033E133 /* PBXTargetDependency */, AF63F47B1C3469FC0033E133 /* PBXTargetDependency */, AF63F47D1C3469FC0033E133 /* PBXTargetDependency */, ); name = "TestX11-iOS"; productName = SaverTester; productReference = AF63F49A1C3469FC0033E133 /* TestX11.app */; productType = "com.apple.product-type.application"; }; AF6423F2099FF9C2000F4CD4 /* Extrusion */ = { isa = PBXNativeTarget; buildConfigurationList = AF642402099FF9C2000F4CD4 /* Build configuration list for PBXNativeTarget "Extrusion" */; buildPhases = ( AF6423F5099FF9C2000F4CD4 /* Resources */, AF6423F7099FF9C2000F4CD4 /* Sources */, AF6423FA099FF9C2000F4CD4 /* Frameworks */, AF642401099FF9C2000F4CD4 /* Rez */, AFA3D97909C03DDD00E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AF6423F3099FF9C2000F4CD4 /* PBXTargetDependency */, ); name = Extrusion; productName = Extrusion; productReference = AF642405099FF9C2000F4CD4 /* Extrusion.saver */; productType = "com.apple.product-type.bundle"; }; AF6425CC09A18855000F4CD4 /* HyperCube */ = { isa = PBXNativeTarget; buildConfigurationList = AF6425D909A18855000F4CD4 /* Build configuration list for PBXNativeTarget "HyperCube" */; buildPhases = ( AF6425CF09A18855000F4CD4 /* Resources */, AF6425D109A18855000F4CD4 /* Sources */, AF6425D409A18855000F4CD4 /* Frameworks */, AF6425D809A18855000F4CD4 /* Rez */, AFA3D88D09C03C3600E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AF6425CD09A18855000F4CD4 /* PBXTargetDependency */, ); name = HyperCube; productName = HyperCube; productReference = AF6425DC09A18856000F4CD4 /* HyperCube.saver */; productType = "com.apple.product-type.bundle"; }; AF6425EC09A189EC000F4CD4 /* Qix */ = { isa = PBXNativeTarget; buildConfigurationList = AF6425F909A189EC000F4CD4 /* Build configuration list for PBXNativeTarget "Qix" */; buildPhases = ( AF6425EF09A189EC000F4CD4 /* Resources */, AF6425F109A189EC000F4CD4 /* Sources */, AF6425F409A189EC000F4CD4 /* Frameworks */, AF6425F809A189EC000F4CD4 /* Rez */, AFA3D8C309C03C9300E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AF6425ED09A189EC000F4CD4 /* PBXTargetDependency */, ); name = Qix; productName = Qix; productReference = AF6425FC09A189EC000F4CD4 /* Qix.saver */; productType = "com.apple.product-type.bundle"; }; AF64260F09A18D6C000F4CD4 /* HyperBall */ = { isa = PBXNativeTarget; buildConfigurationList = AF64261C09A18D6C000F4CD4 /* Build configuration list for PBXNativeTarget "HyperBall" */; buildPhases = ( AF64261209A18D6C000F4CD4 /* Resources */, AF64261409A18D6C000F4CD4 /* Sources */, AF64261709A18D6C000F4CD4 /* Frameworks */, AF64261B09A18D6C000F4CD4 /* Rez */, AFA3D88B09C03C3200E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AF64261009A18D6C000F4CD4 /* PBXTargetDependency */, ); name = HyperBall; productName = HyperBall; productReference = AF64261F09A18D6C000F4CD4 /* HyperBall.saver */; productType = "com.apple.product-type.bundle"; }; AF64262C09A18F54000F4CD4 /* Moire2 */ = { isa = PBXNativeTarget; buildConfigurationList = AF64263909A18F54000F4CD4 /* Build configuration list for PBXNativeTarget "Moire2" */; buildPhases = ( AF64262F09A18F54000F4CD4 /* Resources */, AF64263109A18F54000F4CD4 /* Sources */, AF64263409A18F54000F4CD4 /* Frameworks */, AF64263809A18F54000F4CD4 /* Rez */, AFA3D8AB09C03C6D00E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AF64262D09A18F54000F4CD4 /* PBXTargetDependency */, ); name = Moire2; productName = Moire2; productReference = AF64263C09A18F54000F4CD4 /* Moire2.saver */; productType = "com.apple.product-type.bundle"; }; AF64264F09A19229000F4CD4 /* Munch */ = { isa = PBXNativeTarget; buildConfigurationList = AF64265C09A19229000F4CD4 /* Build configuration list for PBXNativeTarget "Munch" */; buildPhases = ( AF64265209A19229000F4CD4 /* Resources */, AF64265409A19229000F4CD4 /* Sources */, AF64265709A19229000F4CD4 /* Frameworks */, AF64265B09A19229000F4CD4 /* Rez */, AFA3D8AD09C03C7000E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AF64265009A19229000F4CD4 /* PBXTargetDependency */, ); name = Munch; productName = Munch; productReference = AF64265F09A19229000F4CD4 /* Munch.saver */; productType = "com.apple.product-type.bundle"; }; AF64267B09A194B0000F4CD4 /* Goop */ = { isa = PBXNativeTarget; buildConfigurationList = AF64268809A194B0000F4CD4 /* Build configuration list for PBXNativeTarget "Goop" */; buildPhases = ( AF64267E09A194B0000F4CD4 /* Resources */, AF64268009A194B0000F4CD4 /* Sources */, AF64268309A194B0000F4CD4 /* Frameworks */, AF64268709A194B0000F4CD4 /* Rez */, AFA3D88109C03C2100E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AF64267C09A194B0000F4CD4 /* PBXTargetDependency */, ); name = Goop; productName = Goop; productReference = AF64268B09A194B0000F4CD4 /* Goop.saver */; productType = "com.apple.product-type.bundle"; }; AF64277109A1D37A000F4CD4 /* SpeedMine */ = { isa = PBXNativeTarget; buildConfigurationList = AF64277E09A1D37A000F4CD4 /* Build configuration list for PBXNativeTarget "SpeedMine" */; buildPhases = ( AF64277409A1D37A000F4CD4 /* Resources */, AF64277609A1D37A000F4CD4 /* Sources */, AF64277909A1D37A000F4CD4 /* Frameworks */, AF64277D09A1D37A000F4CD4 /* Rez */, AFA3D8D709C03CB400E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AF64277209A1D37A000F4CD4 /* PBXTargetDependency */, ); name = SpeedMine; productName = SpeedMine; productReference = AF64278109A1D37A000F4CD4 /* SpeedMine.saver */; productType = "com.apple.product-type.bundle"; }; AF6427A809A2DE36000F4CD4 /* Bubbles */ = { isa = PBXNativeTarget; buildConfigurationList = AF6427B509A2DE36000F4CD4 /* Build configuration list for PBXNativeTarget "Bubbles" */; buildPhases = ( AF6427AB09A2DE36000F4CD4 /* Resources */, AF6427AD09A2DE36000F4CD4 /* Sources */, AF6427B009A2DE36000F4CD4 /* Frameworks */, AF6427B409A2DE36000F4CD4 /* Rez */, AFA3D69409C03B6200E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AF6427A909A2DE36000F4CD4 /* PBXTargetDependency */, ); name = Bubbles; productName = Bubbles; productReference = AF6427B809A2DE36000F4CD4 /* Bubbles.saver */; productType = "com.apple.product-type.bundle"; }; AF68A47E19196CF800D41CD1 /* Tessellimage */ = { isa = PBXNativeTarget; buildConfigurationList = AF68A48F19196CF800D41CD1 /* Build configuration list for PBXNativeTarget "Tessellimage" */; buildPhases = ( AF68A48119196CF800D41CD1 /* Resources */, AF68A48319196CF800D41CD1 /* Sources */, AF68A48619196CF800D41CD1 /* Frameworks */, AF68A48D19196CF800D41CD1 /* Rez */, AF68A48E19196CF800D41CD1 /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AF68A47F19196CF800D41CD1 /* PBXTargetDependency */, ); name = Tessellimage; productName = Attraction; productReference = AF68A49219196CF800D41CD1 /* Tessellimage.saver */; productType = "com.apple.product-type.bundle"; }; AF73FF221A09877F00E485E9 /* BinaryRing */ = { isa = PBXNativeTarget; buildConfigurationList = AF73FF331A09877F00E485E9 /* Build configuration list for PBXNativeTarget "BinaryRing" */; buildPhases = ( AF73FF251A09877F00E485E9 /* Resources */, AF73FF271A09877F00E485E9 /* Sources */, AF73FF2A1A09877F00E485E9 /* Frameworks */, AF73FF311A09877F00E485E9 /* Rez */, AF73FF321A09877F00E485E9 /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AF73FF231A09877F00E485E9 /* PBXTargetDependency */, ); name = BinaryRing; productName = Attraction; productReference = AF73FF361A09877F00E485E9 /* BinaryRing.saver */; productType = "com.apple.product-type.bundle"; }; AF7510FF1782B5B900380EA1 /* Kaleidocycle */ = { isa = PBXNativeTarget; buildConfigurationList = AF75110F1782B5B900380EA1 /* Build configuration list for PBXNativeTarget "Kaleidocycle" */; buildPhases = ( AF7511021782B5B900380EA1 /* Resources */, AF7511041782B5B900380EA1 /* Sources */, AF7511071782B5B900380EA1 /* Frameworks */, AF75110D1782B5B900380EA1 /* Rez */, AF75110E1782B5B900380EA1 /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AF7511001782B5B900380EA1 /* PBXTargetDependency */, ); name = Kaleidocycle; productName = Voronoi; productReference = AF7511121782B5B900380EA1 /* Kaleidocycle.saver */; productType = "com.apple.product-type.bundle"; }; AF7776E409B63ABF00EA3033 /* Phosphor */ = { isa = PBXNativeTarget; buildConfigurationList = AF7776F309B63ABF00EA3033 /* Build configuration list for PBXNativeTarget "Phosphor" */; buildPhases = ( AF7776E709B63ABF00EA3033 /* Resources */, AF7776E909B63ABF00EA3033 /* Sources */, AF7776EE09B63ABF00EA3033 /* Frameworks */, AF7776F209B63ABF00EA3033 /* Rez */, AFA3D8B909C03C8200E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AF7776E509B63ABF00EA3033 /* PBXTargetDependency */, ); name = Phosphor; productName = Phosphor; productReference = AF7776F609B63ABF00EA3033 /* Phosphor.saver */; productType = "com.apple.product-type.bundle"; }; AF77771A09B6416100EA3033 /* Pacman */ = { isa = PBXNativeTarget; buildConfigurationList = AF77772709B6416100EA3033 /* Build configuration list for PBXNativeTarget "Pacman" */; buildPhases = ( AF77771D09B6416100EA3033 /* Resources */, AF77771F09B6416100EA3033 /* Sources */, AF77772209B6416100EA3033 /* Frameworks */, AF77772609B6416100EA3033 /* Rez */, AFA3D93509C03D5700E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AF77771B09B6416100EA3033 /* PBXTargetDependency */, ); name = Pacman; productName = Pacman; productReference = AF77772A09B6416100EA3033 /* Pacman.saver */; productType = "com.apple.product-type.bundle"; }; AF77773E09B6446500EA3033 /* FlipScreen3D */ = { isa = PBXNativeTarget; buildConfigurationList = AF77774E09B6446500EA3033 /* Build configuration list for PBXNativeTarget "FlipScreen3D" */; buildPhases = ( AF77774109B6446500EA3033 /* Resources */, AF77774309B6446500EA3033 /* Sources */, AF77774609B6446500EA3033 /* Frameworks */, AF77774D09B6446500EA3033 /* Rez */, AFA3D97D09C03DE400E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AF77773F09B6446500EA3033 /* PBXTargetDependency */, ); name = FlipScreen3D; productName = FlipScreen3D; productReference = AF77775109B6446500EA3033 /* FlipScreen3D.saver */; productType = "com.apple.product-type.bundle"; }; AF77777409B6497800EA3033 /* Gleidescope */ = { isa = PBXNativeTarget; buildConfigurationList = AF77778509B6497800EA3033 /* Build configuration list for PBXNativeTarget "Gleidescope" */; buildPhases = ( AF77777709B6497800EA3033 /* Resources */, AF77777909B6497800EA3033 /* Sources */, AF77777D09B6497800EA3033 /* Frameworks */, AF77778409B6497800EA3033 /* Rez */, AFA3D98509C03DF100E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AF77777509B6497800EA3033 /* PBXTargetDependency */, ); name = Gleidescope; productName = Gleidescope; productReference = AF34085609B80AB000F2CEC1 /* Gleidescope.saver */; productType = "com.apple.product-type.bundle"; }; AF77778E09B64A5200EA3033 /* MirrorBlob */ = { isa = PBXNativeTarget; buildConfigurationList = AF77779F09B64A5200EA3033 /* Build configuration list for PBXNativeTarget "MirrorBlob" */; buildPhases = ( AF77779109B64A5200EA3033 /* Resources */, AF77779309B64A5200EA3033 /* Sources */, AF77779709B64A5200EA3033 /* Frameworks */, AF77779E09B64A5200EA3033 /* Rez */, AFA3D9A909C03E3D00E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AF77778F09B64A5200EA3033 /* PBXTargetDependency */, ); name = MirrorBlob; productName = MirrorBlob; productReference = AF7777A209B64A5200EA3033 /* MirrorBlob.saver */; productType = "com.apple.product-type.bundle"; }; AF7777A809B64B2600EA3033 /* StonerView */ = { isa = PBXNativeTarget; buildConfigurationList = AF7777B909B64B2600EA3033 /* Build configuration list for PBXNativeTarget "StonerView" */; buildPhases = ( AF7777AB09B64B2600EA3033 /* Resources */, AF7777AD09B64B2600EA3033 /* Sources */, AF7777B109B64B2600EA3033 /* Frameworks */, AF7777B809B64B2600EA3033 /* Rez */, AFA3D9CF09C03E8700E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AF7777A909B64B2600EA3033 /* PBXTargetDependency */, ); name = StonerView; productName = StonerView; productReference = AF34085509B80AB000F2CEC1 /* StonerView.saver */; productType = "com.apple.product-type.bundle"; }; AF7777D009B64C6B00EA3033 /* GLSlideshow */ = { isa = PBXNativeTarget; buildConfigurationList = AF7777E109B64C6B00EA3033 /* Build configuration list for PBXNativeTarget "GLSlideshow" */; buildPhases = ( AF7777D309B64C6B00EA3033 /* Resources */, AF7777D509B64C6B00EA3033 /* Sources */, AF7777D909B64C6B00EA3033 /* Frameworks */, AF7777E009B64C6B00EA3033 /* Rez */, AFA3D99509C03E1900E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AF7777D109B64C6B00EA3033 /* PBXTargetDependency */, ); name = GLSlideshow; productName = GLSlideshow; productReference = AF7777E409B64C6B00EA3033 /* GLSlideshow.saver */; productType = "com.apple.product-type.bundle"; }; AF7777EA09B64E3100EA3033 /* FlipText */ = { isa = PBXNativeTarget; buildConfigurationList = AF7777FB09B64E3100EA3033 /* Build configuration list for PBXNativeTarget "FlipText" */; buildPhases = ( AF7777ED09B64E3100EA3033 /* Resources */, AF7777EF09B64E3100EA3033 /* Sources */, AF7777F309B64E3100EA3033 /* Frameworks */, AF7777FA09B64E3100EA3033 /* Rez */, AFA3D97F09C03DE700E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AF7777EB09B64E3100EA3033 /* PBXTargetDependency */, ); name = FlipText; productName = FlipText; productReference = AF7777FE09B64E3100EA3033 /* FlipText.saver */; productType = "com.apple.product-type.bundle"; }; AF77781009B6504400EA3033 /* StarWars */ = { isa = PBXNativeTarget; buildConfigurationList = AF77782209B6504400EA3033 /* Build configuration list for PBXNativeTarget "StarWars" */; buildPhases = ( AF77781309B6504400EA3033 /* Resources */, AF77781509B6504400EA3033 /* Sources */, AF77781A09B6504400EA3033 /* Frameworks */, AF77782109B6504400EA3033 /* Rez */, AFA3D9CD09C03E8400E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AF77781109B6504400EA3033 /* PBXTargetDependency */, ); name = StarWars; productName = StarWars; productReference = AF34085409B80AAF00F2CEC1 /* StarWars.saver */; productType = "com.apple.product-type.bundle"; }; AF77784409B6528100EA3033 /* Carousel */ = { isa = PBXNativeTarget; buildConfigurationList = AF77785509B6528100EA3033 /* Build configuration list for PBXNativeTarget "Carousel" */; buildPhases = ( AF77784709B6528100EA3033 /* Resources */, AF77784A09B6528100EA3033 /* Sources */, AF77784D09B6528100EA3033 /* Frameworks */, AF77785409B6528100EA3033 /* Rez */, AFA3D96509C03DB900E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AF77784509B6528100EA3033 /* PBXTargetDependency */, ); name = Carousel; productName = Carousel; productReference = AF77785809B6528100EA3033 /* Carousel.saver */; productType = "com.apple.product-type.bundle"; }; AF77786109B6536000EA3033 /* DNAlogo */ = { isa = PBXNativeTarget; buildConfigurationList = AF77787109B6536000EA3033 /* Build configuration list for PBXNativeTarget "DNAlogo" */; buildPhases = ( AF77786409B6536000EA3033 /* Resources */, AF77786609B6536000EA3033 /* Sources */, AF77786909B6536000EA3033 /* Frameworks */, AF77787009B6536000EA3033 /* Rez */, AFA3D97309C03DD300E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AF77786209B6536000EA3033 /* PBXTargetDependency */, ); name = DNAlogo; productName = DNAlogo; productReference = AF77787409B6536000EA3033 /* DNAlogo.saver */; productType = "com.apple.product-type.bundle"; }; AF77787F09B6563500EA3033 /* FontGlide */ = { isa = PBXNativeTarget; buildConfigurationList = AF77788C09B6563500EA3033 /* Build configuration list for PBXNativeTarget "FontGlide" */; buildPhases = ( AF77788209B6563500EA3033 /* Resources */, AF77788409B6563500EA3033 /* Sources */, AF77788709B6563500EA3033 /* Frameworks */, AF77788B09B6563500EA3033 /* Rez */, AFA3D87D09C03C1B00E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AF77788009B6563500EA3033 /* PBXTargetDependency */, ); name = FontGlide; productName = FontGlide; productReference = AF34085709B80AB000F2CEC1 /* FontGlide.saver */; productType = "com.apple.product-type.bundle"; }; AF7778A509B659C800EA3033 /* BlitSpin */ = { isa = PBXNativeTarget; buildConfigurationList = AF7778B209B659C800EA3033 /* Build configuration list for PBXNativeTarget "BlitSpin" */; buildPhases = ( AF7778A809B659C800EA3033 /* Resources */, AF7778AA09B659C800EA3033 /* Sources */, AF7778AD09B659C800EA3033 /* Frameworks */, AF7778B109B659C800EA3033 /* Rez */, AFCCCBD309C03B0000353F4D /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AF7778A609B659C800EA3033 /* PBXTargetDependency */, ); name = BlitSpin; productName = BlitSpin; productReference = AF7778B509B659C800EA3033 /* BlitSpin.saver */; productType = "com.apple.product-type.bundle"; }; AF78D175142DD8F3002AAF77 /* Hilbert */ = { isa = PBXNativeTarget; buildConfigurationList = AF78D186142DD8F3002AAF77 /* Build configuration list for PBXNativeTarget "Hilbert" */; buildPhases = ( AF78D178142DD8F3002AAF77 /* Resources */, AF78D17A142DD8F3002AAF77 /* Sources */, AF78D17D142DD8F3002AAF77 /* Frameworks */, AF78D184142DD8F3002AAF77 /* Rez */, AF78D185142DD8F3002AAF77 /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AF78D176142DD8F3002AAF77 /* PBXTargetDependency */, ); name = Hilbert; productName = Hilbert; productReference = AF78D189142DD8F3002AAF77 /* Hilbert.saver */; productType = "com.apple.product-type.bundle"; }; AF794F64099748450059A8B0 /* Demon */ = { isa = PBXNativeTarget; buildConfigurationList = AF794F71099748450059A8B0 /* Build configuration list for PBXNativeTarget "Demon" */; buildPhases = ( AF794F67099748450059A8B0 /* Resources */, AF794F69099748450059A8B0 /* Sources */, AF794F6C099748450059A8B0 /* Frameworks */, AF794F70099748450059A8B0 /* Rez */, AFA3D90B09C03D1100E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AF794F65099748450059A8B0 /* PBXTargetDependency */, ); name = Demon; productName = Demon; productReference = AF794F74099748450059A8B0 /* Demon.saver */; productType = "com.apple.product-type.bundle"; }; AF794F8E09974A320059A8B0 /* Fiberlamp */ = { isa = PBXNativeTarget; buildConfigurationList = AF794F9B09974A320059A8B0 /* Build configuration list for PBXNativeTarget "Fiberlamp" */; buildPhases = ( AF794F9109974A320059A8B0 /* Resources */, AF794F9309974A320059A8B0 /* Sources */, AF794F9609974A320059A8B0 /* Frameworks */, AF794F9A09974A320059A8B0 /* Rez */, AFA3D91509C03D2100E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AF794F8F09974A320059A8B0 /* PBXTargetDependency */, ); name = Fiberlamp; productName = Fiberlamp; productReference = AF794F9E09974A320059A8B0 /* Fiberlamp.saver */; productType = "com.apple.product-type.bundle"; }; AF794FCD09974FA60059A8B0 /* Loop */ = { isa = PBXNativeTarget; buildConfigurationList = AF794FDA09974FA60059A8B0 /* Build configuration list for PBXNativeTarget "Loop" */; buildPhases = ( AF794FD009974FA60059A8B0 /* Resources */, AF794FD209974FA60059A8B0 /* Sources */, AF794FD509974FA60059A8B0 /* Frameworks */, AF794FD909974FA60059A8B0 /* Rez */, AFA3D93109C03D5100E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AF794FCE09974FA60059A8B0 /* PBXTargetDependency */, ); name = Loop; productName = Loop; productReference = AF794FDD09974FA60059A8B0 /* Loop.saver */; productType = "com.apple.product-type.bundle"; }; AF7ACFC019FF0A9200BD752B /* GeodesicGears */ = { isa = PBXNativeTarget; buildConfigurationList = AF7ACFD119FF0A9200BD752B /* Build configuration list for PBXNativeTarget "GeodesicGears" */; buildPhases = ( AF7ACFC319FF0A9200BD752B /* Resources */, AF7ACFC519FF0A9200BD752B /* Sources */, AF7ACFC819FF0A9200BD752B /* Frameworks */, AF7ACFCF19FF0A9200BD752B /* Rez */, AF7ACFD019FF0A9200BD752B /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AF7ACFC119FF0A9200BD752B /* PBXTargetDependency */, ); name = GeodesicGears; productName = DangerBall; productReference = AF7ACFD419FF0A9200BD752B /* GeodesicGears.saver */; productType = "com.apple.product-type.bundle"; }; AF918977158FC00A002B5D1E /* XScreenSaver-iOS */ = { isa = PBXNativeTarget; buildConfigurationList = AF91898C158FC00A002B5D1E /* Build configuration list for PBXNativeTarget "XScreenSaver-iOS" */; buildPhases = ( AF7E080115925EE300D81407 /* ICMP Sanity Check */, AF94E7421A16F66900289B93 /* Update Function Table */, AF91897B158FC00A002B5D1E /* Resources */, AF918985158FC00A002B5D1E /* Sources */, AF918989158FC00A002B5D1E /* Frameworks */, AF91898A158FC00A002B5D1E /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AF918978158FC00A002B5D1E /* PBXTargetDependency */, AF7E07FE15925DF200D81407 /* PBXTargetDependency */, AF7E080015925DFE00D81407 /* PBXTargetDependency */, ); name = "XScreenSaver-iOS"; productName = SaverTester; productReference = AF91898F158FC00A002B5D1E /* XScreenSaver.app */; productType = "com.apple.product-type.application"; }; AF97572D099C317000B05160 /* IMSMap */ = { isa = PBXNativeTarget; buildConfigurationList = AF97573A099C317000B05160 /* Build configuration list for PBXNativeTarget "IMSMap" */; buildPhases = ( AF975730099C317000B05160 /* Resources */, AF975732099C317000B05160 /* Sources */, AF975735099C317000B05160 /* Frameworks */, AF975739099C317000B05160 /* Rez */, AFA3D89109C03C3C00E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AF97572E099C317000B05160 /* PBXTargetDependency */, ); name = IMSMap; productName = IMSMap; productReference = AF97573D099C317000B05160 /* IMSMap.saver */; productType = "com.apple.product-type.bundle"; }; AF975775099C374A00B05160 /* Moire */ = { isa = PBXNativeTarget; buildConfigurationList = AF975782099C374A00B05160 /* Build configuration list for PBXNativeTarget "Moire" */; buildPhases = ( AF975778099C374A00B05160 /* Resources */, AF97577A099C374A00B05160 /* Sources */, AF97577D099C374A00B05160 /* Frameworks */, AF975781099C374A00B05160 /* Rez */, AFA3D8A909C03C6900E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AF975776099C374A00B05160 /* PBXTargetDependency */, ); name = Moire; productName = Moire; productReference = AF975785099C374A00B05160 /* Moire.saver */; productType = "com.apple.product-type.bundle"; }; AF9757C2099C3E6300B05160 /* RDbomb */ = { isa = PBXNativeTarget; buildConfigurationList = AF9757CF099C3E6300B05160 /* Build configuration list for PBXNativeTarget "RDbomb" */; buildPhases = ( AF9757C5099C3E6300B05160 /* Resources */, AF9757C7099C3E6300B05160 /* Sources */, AF9757CA099C3E6300B05160 /* Frameworks */, AF9757CE099C3E6300B05160 /* Rez */, AFA3D8C509C03C9600E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AF9757C3099C3E6300B05160 /* PBXTargetDependency */, ); name = RDbomb; productName = RDbomb; productReference = AF9757D2099C3E6300B05160 /* RDbomb.saver */; productType = "com.apple.product-type.bundle"; }; AF975808099C41D500B05160 /* XFlame */ = { isa = PBXNativeTarget; buildConfigurationList = AF975815099C41D500B05160 /* Build configuration list for PBXNativeTarget "XFlame" */; buildPhases = ( AF97580B099C41D500B05160 /* Resources */, AF97580D099C41D500B05160 /* Sources */, AF975810099C41D500B05160 /* Frameworks */, AF975814099C41D500B05160 /* Rez */, AFA3D8F109C03CE100E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AF975809099C41D500B05160 /* PBXTargetDependency */, ); name = XFlame; productName = XFlame; productReference = AF975818099C41D500B05160 /* XFlame.saver */; productType = "com.apple.product-type.bundle"; }; AF975865099C475900B05160 /* ShadeBobs */ = { isa = PBXNativeTarget; buildConfigurationList = AF975872099C475900B05160 /* Build configuration list for PBXNativeTarget "ShadeBobs" */; buildPhases = ( AF975868099C475900B05160 /* Resources */, AF97586A099C475900B05160 /* Sources */, AF97586D099C475900B05160 /* Frameworks */, AF975871099C475900B05160 /* Rez */, AFA3D8CF09C03CA800E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AF975866099C475900B05160 /* PBXTargetDependency */, ); name = ShadeBobs; productName = ShadeBobs; productReference = AF975875099C475900B05160 /* ShadeBobs.saver */; productType = "com.apple.product-type.bundle"; }; AF975A36099C681F00B05160 /* MetaBalls */ = { isa = PBXNativeTarget; buildConfigurationList = AF975A43099C681F00B05160 /* Build configuration list for PBXNativeTarget "MetaBalls" */; buildPhases = ( AF975A39099C681F00B05160 /* Resources */, AF975A3B099C681F00B05160 /* Sources */, AF975A3E099C681F00B05160 /* Frameworks */, AF975A42099C681F00B05160 /* Rez */, AFA3D8A509C03C6200E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AF975A37099C681F00B05160 /* PBXTargetDependency */, ); name = MetaBalls; productName = MetaBalls; productReference = AF975A46099C681F00B05160 /* MetaBalls.saver */; productType = "com.apple.product-type.bundle"; }; AF975A6C099C6AB200B05160 /* Eruption */ = { isa = PBXNativeTarget; buildConfigurationList = AF975A79099C6AB200B05160 /* Build configuration list for PBXNativeTarget "Eruption" */; buildPhases = ( AF975A6F099C6AB200B05160 /* Resources */, AF975A71099C6AB200B05160 /* Sources */, AF975A74099C6AB200B05160 /* Frameworks */, AF975A78099C6AB200B05160 /* Rez */, AFA3D87509C03C0400E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AF975A6D099C6AB200B05160 /* PBXTargetDependency */, ); name = Eruption; productName = Eruption; productReference = AF975A7C099C6AB200B05160 /* Eruption.saver */; productType = "com.apple.product-type.bundle"; }; AF975A86099C6BC300B05160 /* Barcode */ = { isa = PBXNativeTarget; buildConfigurationList = AF975A93099C6BC300B05160 /* Build configuration list for PBXNativeTarget "Barcode" */; buildPhases = ( AF975A89099C6BC300B05160 /* Resources */, AF975A8B099C6BC300B05160 /* Sources */, AF975A8E099C6BC300B05160 /* Frameworks */, AF975A92099C6BC300B05160 /* Rez */, AFCCCBCF09C03AF800353F4D /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AF975A87099C6BC300B05160 /* PBXTargetDependency */, ); name = Barcode; productName = Barcode; productReference = AF975A96099C6BC300B05160 /* Barcode.saver */; productType = "com.apple.product-type.bundle"; }; AF975AD7099C6EB100B05160 /* Fireworkx */ = { isa = PBXNativeTarget; buildConfigurationList = AF975AE4099C6EB100B05160 /* Build configuration list for PBXNativeTarget "Fireworkx" */; buildPhases = ( AF975ADA099C6EB100B05160 /* Resources */, AF975ADC099C6EB100B05160 /* Sources */, AF975ADF099C6EB100B05160 /* Frameworks */, AF975AE3099C6EB100B05160 /* Rez */, AFA3D87709C03C0A00E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AF975AD8099C6EB100B05160 /* PBXTargetDependency */, ); name = Fireworkx; productName = Fireworkx; productReference = AF975AE7099C6EB100B05160 /* Fireworkx.saver */; productType = "com.apple.product-type.bundle"; }; AF975AFC099C6FE400B05160 /* MemScroller */ = { isa = PBXNativeTarget; buildConfigurationList = AF975B09099C6FE400B05160 /* Build configuration list for PBXNativeTarget "MemScroller" */; buildPhases = ( AF975AFF099C6FE400B05160 /* Resources */, AF975B01099C6FE400B05160 /* Sources */, AF975B04099C6FE400B05160 /* Frameworks */, AF975B08099C6FE400B05160 /* Rez */, AFA3D8A309C03C5F00E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AF975AFD099C6FE400B05160 /* PBXTargetDependency */, ); name = MemScroller; productName = MemScroller; productReference = AF975B0C099C6FE400B05160 /* MemScroller.saver */; productType = "com.apple.product-type.bundle"; }; AF975C12099C8C1500B05160 /* Halo */ = { isa = PBXNativeTarget; buildConfigurationList = AF975C1F099C8C1500B05160 /* Build configuration list for PBXNativeTarget "Halo" */; buildPhases = ( AF975C15099C8C1500B05160 /* Resources */, AF975C17099C8C1500B05160 /* Sources */, AF975C1A099C8C1500B05160 /* Frameworks */, AF975C1E099C8C1500B05160 /* Rez */, AFA3D88709C03C2A00E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AF975C13099C8C1500B05160 /* PBXTargetDependency */, ); name = Halo; productName = Halo; productReference = AF975C22099C8C1500B05160 /* Halo.saver */; productType = "com.apple.product-type.bundle"; }; AF975C3D099C8DCF00B05160 /* Greynetic */ = { isa = PBXNativeTarget; buildConfigurationList = AF975C4B099C8DCF00B05160 /* Build configuration list for PBXNativeTarget "Greynetic" */; buildPhases = ( AF975C40099C8DCF00B05160 /* Resources */, AF975C43099C8DCF00B05160 /* Sources */, AF975C46099C8DCF00B05160 /* Frameworks */, AF975C4A099C8DCF00B05160 /* Rez */, AFA3D88309C03C2400E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AF975C3E099C8DCF00B05160 /* PBXTargetDependency */, ); name = Greynetic; productName = Greynetic; productReference = AF975C4E099C8DCF00B05160 /* Greynetic.saver */; productType = "com.apple.product-type.bundle"; }; AF975C5D099C8F3F00B05160 /* NoseGuy */ = { isa = PBXNativeTarget; buildConfigurationList = AF975C6B099C8F3F00B05160 /* Build configuration list for PBXNativeTarget "NoseGuy" */; buildPhases = ( AF975C60099C8F3F00B05160 /* Resources */, AF975C63099C8F3F00B05160 /* Sources */, AF975C66099C8F3F00B05160 /* Frameworks */, AF975C6A099C8F3F00B05160 /* Rez */, AFA3D8B109C03C7600E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AF975C5E099C8F3F00B05160 /* PBXTargetDependency */, ); name = NoseGuy; productName = NoseGuy; productReference = AF975C6E099C8F3F00B05160 /* NoseGuy.saver */; productType = "com.apple.product-type.bundle"; }; AF975D52099CA0F000B05160 /* Rocks */ = { isa = PBXNativeTarget; buildConfigurationList = AF975D60099CA0F000B05160 /* Build configuration list for PBXNativeTarget "Rocks" */; buildPhases = ( AF975D55099CA0F000B05160 /* Resources */, AF975D58099CA0F000B05160 /* Sources */, AF975D5B099CA0F000B05160 /* Frameworks */, AF975D5F099CA0F000B05160 /* Rez */, AFA3D8C909C03C9E00E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AF975D53099CA0F000B05160 /* PBXTargetDependency */, ); name = Rocks; productName = Rocks; productReference = AF975D63099CA0F000B05160 /* Rocks.saver */; productType = "com.apple.product-type.bundle"; }; AF976FBB0989CAA2001F8B92 /* Deco */ = { isa = PBXNativeTarget; buildConfigurationList = AF976FBE0989CAA4001F8B92 /* Build configuration list for PBXNativeTarget "Deco" */; buildPhases = ( AF976FB80989CAA2001F8B92 /* Resources */, AF976FB90989CAA2001F8B92 /* Sources */, AF976FBA0989CAA2001F8B92 /* Frameworks */, AF9770150989D0F6001F8B92 /* Rez */, AFA3D86D09C03BF300E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AF480922098C412F00FB32B8 /* PBXTargetDependency */, ); name = Deco; productName = Deco; productReference = AF976FBC0989CAA2001F8B92 /* Deco.saver */; productType = "com.apple.product-type.bundle"; }; AF9770290989D1E6001F8B92 /* Rorschach */ = { isa = PBXNativeTarget; buildConfigurationList = AF97703D0989D1E6001F8B92 /* Build configuration list for PBXNativeTarget "Rorschach" */; buildPhases = ( AF97702A0989D1E6001F8B92 /* Resources */, AF97702C0989D1E6001F8B92 /* Sources */, AF9770390989D1E6001F8B92 /* Frameworks */, AF97703C0989D1E6001F8B92 /* Rez */, AFA3D8CB09C03CA100E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AF48092A098C419000FB32B8 /* PBXTargetDependency */, ); name = Rorschach; productName = Rorschach; productReference = AF9770400989D1E6001F8B92 /* Rorschach.saver */; productType = "com.apple.product-type.bundle"; }; AF9770660989D2F6001F8B92 /* Attraction */ = { isa = PBXNativeTarget; buildConfigurationList = AF97707A0989D2F6001F8B92 /* Build configuration list for PBXNativeTarget "Attraction" */; buildPhases = ( AF9770670989D2F6001F8B92 /* Resources */, AF9770690989D2F6001F8B92 /* Sources */, AF9770760989D2F6001F8B92 /* Frameworks */, AF9770790989D2F6001F8B92 /* Rez */, AFCCCBCD09C03AF400353F4D /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AF48092D098C41AE00FB32B8 /* PBXTargetDependency */, ); name = Attraction; productName = Attraction; productReference = AF97707D0989D2F6001F8B92 /* Attraction.saver */; productType = "com.apple.product-type.bundle"; }; AF9771D60989DC4A001F8B92 /* SaverTester */ = { isa = PBXNativeTarget; buildConfigurationList = AF9771DA0989DC4B001F8B92 /* Build configuration list for PBXNativeTarget "SaverTester" */; buildPhases = ( AF9771D30989DC4A001F8B92 /* Resources */, AF9771D40989DC4A001F8B92 /* Sources */, AF9771D50989DC4A001F8B92 /* Frameworks */, AF578FA11434E918002455DD /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AF480936098C421200FB32B8 /* PBXTargetDependency */, ); name = SaverTester; productName = SaverTester; productReference = AF9771D70989DC4A001F8B92 /* SaverTester.app */; productType = "com.apple.product-type.application"; }; AF998EDA0A083DB30051049D /* TopBlock */ = { isa = PBXNativeTarget; buildConfigurationList = AF998EEB0A083DB30051049D /* Build configuration list for PBXNativeTarget "TopBlock" */; buildPhases = ( AF998EDD0A083DB30051049D /* Resources */, AF998EDF0A083DB30051049D /* Sources */, AF998EE20A083DB30051049D /* Frameworks */, AF998EE90A083DB30051049D /* Rez */, AF998EEA0A083DB30051049D /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AF998EDB0A083DB30051049D /* PBXTargetDependency */, ); name = TopBlock; productName = TopBlock; productReference = AF998EEE0A083DB30051049D /* TopBlock.saver */; productType = "com.apple.product-type.bundle"; }; AF9D466609B5109C006E59CF /* DecayScreen */ = { isa = PBXNativeTarget; buildConfigurationList = AF9D467309B5109C006E59CF /* Build configuration list for PBXNativeTarget "DecayScreen" */; buildPhases = ( AF9D466909B5109C006E59CF /* Resources */, AF9D466B09B5109C006E59CF /* Sources */, AF9D466E09B5109C006E59CF /* Frameworks */, AF9D467209B5109C006E59CF /* Rez */, AFA3D86B09C03BEF00E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AF9D466709B5109C006E59CF /* PBXTargetDependency */, ); name = DecayScreen; productName = DecayScreen; productReference = AF9D467609B5109C006E59CF /* DecayScreen.saver */; productType = "com.apple.product-type.bundle"; }; AF9D474409B5300A006E59CF /* SlideScreen */ = { isa = PBXNativeTarget; buildConfigurationList = AF9D475109B5300A006E59CF /* Build configuration list for PBXNativeTarget "SlideScreen" */; buildPhases = ( AF9D474709B5300A006E59CF /* Resources */, AF9D474909B5300A006E59CF /* Sources */, AF9D474C09B5300A006E59CF /* Frameworks */, AF9D475009B5300A006E59CF /* Rez */, AFA3D8D109C03CAB00E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AF9D474509B5300A006E59CF /* PBXTargetDependency */, ); name = SlideScreen; productName = SlideScreen; productReference = AF9D475409B5300A006E59CF /* SlideScreen.saver */; productType = "com.apple.product-type.bundle"; }; AF9D475F09B53166006E59CF /* Zoom */ = { isa = PBXNativeTarget; buildConfigurationList = AF9D476C09B53166006E59CF /* Build configuration list for PBXNativeTarget "Zoom" */; buildPhases = ( AF9D476209B53166006E59CF /* Resources */, AF9D476409B53166006E59CF /* Sources */, AF9D476709B53166006E59CF /* Frameworks */, AF9D476B09B53166006E59CF /* Rez */, AFA3D8FF09C03CF700E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AF9D476009B53166006E59CF /* PBXTargetDependency */, ); name = Zoom; productName = Zoom; productReference = AF9D476F09B53166006E59CF /* Zoom.saver */; productType = "com.apple.product-type.bundle"; }; AF9D48DB09B53322006E59CF /* Bumps */ = { isa = PBXNativeTarget; buildConfigurationList = AF9D48E809B53322006E59CF /* Build configuration list for PBXNativeTarget "Bumps" */; buildPhases = ( AF9D48DE09B53322006E59CF /* Resources */, AF9D48E009B53322006E59CF /* Sources */, AF9D48E309B53322006E59CF /* Frameworks */, AF9D48E709B53322006E59CF /* Rez */, AFA3D85B09C03BD300E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AF9D48DC09B53322006E59CF /* PBXTargetDependency */, ); name = Bumps; productName = Bumps; productReference = AF9D48EB09B53322006E59CF /* Bumps.saver */; productType = "com.apple.product-type.bundle"; }; AF9D48F409B535DA006E59CF /* Distort */ = { isa = PBXNativeTarget; buildConfigurationList = AF9D490109B535DA006E59CF /* Build configuration list for PBXNativeTarget "Distort" */; buildPhases = ( AF9D48F709B535DA006E59CF /* Resources */, AF9D48F909B535DA006E59CF /* Sources */, AF9D48FC09B535DA006E59CF /* Frameworks */, AF9D490009B535DA006E59CF /* Rez */, AFA3D87109C03BFB00E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AF9D48F509B535DA006E59CF /* PBXTargetDependency */, ); name = Distort; productName = Distort; productReference = AF9D490409B535DA006E59CF /* Distort.saver */; productType = "com.apple.product-type.bundle"; }; AF9D492B09B53CBA006E59CF /* Ripples */ = { isa = PBXNativeTarget; buildConfigurationList = AF9D493809B53CBA006E59CF /* Build configuration list for PBXNativeTarget "Ripples" */; buildPhases = ( AF9D492E09B53CBA006E59CF /* Resources */, AF9D493009B53CBA006E59CF /* Sources */, AF9D493309B53CBA006E59CF /* Frameworks */, AF9D493709B53CBA006E59CF /* Rez */, AFA3D8C709C03C9900E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AF9D492C09B53CBA006E59CF /* PBXTargetDependency */, ); name = Ripples; productName = Ripples; productReference = AF9D493B09B53CBA006E59CF /* Ripples.saver */; productType = "com.apple.product-type.bundle"; }; AF9D495409B53FC9006E59CF /* RotZoomer */ = { isa = PBXNativeTarget; buildConfigurationList = AF9D496109B53FC9006E59CF /* Build configuration list for PBXNativeTarget "RotZoomer" */; buildPhases = ( AF9D495709B53FC9006E59CF /* Resources */, AF9D495909B53FC9006E59CF /* Sources */, AF9D495C09B53FC9006E59CF /* Frameworks */, AF9D496009B53FC9006E59CF /* Rez */, AFA3D8CD09C03CA400E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AF9D495509B53FC9006E59CF /* PBXTargetDependency */, ); name = RotZoomer; productName = RotZoomer; productReference = AF9D496409B53FC9006E59CF /* RotZoomer.saver */; productType = "com.apple.product-type.bundle"; }; AF9D496C09B5411D006E59CF /* Twang */ = { isa = PBXNativeTarget; buildConfigurationList = AF9D497909B5411D006E59CF /* Build configuration list for PBXNativeTarget "Twang" */; buildPhases = ( AF9D496F09B5411D006E59CF /* Resources */, AF9D497109B5411D006E59CF /* Sources */, AF9D497409B5411D006E59CF /* Frameworks */, AF9D497809B5411D006E59CF /* Rez */, AFA3D8E509C03CCD00E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AF9D496D09B5411D006E59CF /* PBXTargetDependency */, ); name = Twang; productName = Twang; productReference = AF9D497C09B5411D006E59CF /* Twang.saver */; productType = "com.apple.product-type.bundle"; }; AF9D499709B544C2006E59CF /* Spotlight */ = { isa = PBXNativeTarget; buildConfigurationList = AF9D49A409B544C2006E59CF /* Build configuration list for PBXNativeTarget "Spotlight" */; buildPhases = ( AF9D499A09B544C2006E59CF /* Resources */, AF9D499C09B544C2006E59CF /* Sources */, AF9D499F09B544C2006E59CF /* Frameworks */, AF9D49A309B544C2006E59CF /* Rez */, AFA3D8D909C03CB700E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AF9D499809B544C2006E59CF /* PBXTargetDependency */, ); name = Spotlight; productName = Spotlight; productReference = AF9D49A709B544C3006E59CF /* Spotlight.saver */; productType = "com.apple.product-type.bundle"; }; AF9D4C6909B59F27006E59CF /* XLyap */ = { isa = PBXNativeTarget; buildConfigurationList = AF9D4C7609B59F27006E59CF /* Build configuration list for PBXNativeTarget "XLyap" */; buildPhases = ( AF9D4C6C09B59F27006E59CF /* Resources */, AF9D4C6E09B59F27006E59CF /* Sources */, AF9D4C7109B59F27006E59CF /* Frameworks */, AF9D4C7509B59F27006E59CF /* Rez */, AFA3D8F709C03CEA00E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AF9D4C6A09B59F27006E59CF /* PBXTargetDependency */, ); name = XLyap; productName = XLyap; productReference = AF9D4C7909B59F27006E59CF /* XLyap.saver */; productType = "com.apple.product-type.bundle"; }; AF9D4CE709B5AA8E006E59CF /* Pong */ = { isa = PBXNativeTarget; buildConfigurationList = AF9D4CF409B5AA8E006E59CF /* Build configuration list for PBXNativeTarget "Pong" */; buildPhases = ( AF9D4CEA09B5AA8E006E59CF /* Resources */, AF9D4CEC09B5AA8E006E59CF /* Sources */, AF9D4CEF09B5AA8E006E59CF /* Frameworks */, AF9D4CF309B5AA8E006E59CF /* Rez */, AFA3D8BD09C03C8900E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AF9D4CE809B5AA8E006E59CF /* PBXTargetDependency */, ); name = Pong; productName = Pong; productReference = AF9D4CF709B5AA8E006E59CF /* Pong.saver */; productType = "com.apple.product-type.bundle"; }; AF9D4D7E09B5B2DC006E59CF /* XAnalogTV */ = { isa = PBXNativeTarget; buildConfigurationList = AF9D4D8C09B5B2DC006E59CF /* Build configuration list for PBXNativeTarget "XAnalogTV" */; buildPhases = ( AF9D4D8109B5B2DC006E59CF /* Resources */, AF9D4D8309B5B2DC006E59CF /* Sources */, AF9D4D8709B5B2DC006E59CF /* Frameworks */, AF9D4D8B09B5B2DC006E59CF /* Rez */, AFA3D8F309C03CE400E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AF9D4D7F09B5B2DC006E59CF /* PBXTargetDependency */, ); name = XAnalogTV; productName = XAnalogTV; productReference = AF9D4D8F09B5B2DC006E59CF /* XAnalogTV.saver */; productType = "com.apple.product-type.bundle"; }; AF9D4DAF09B5B71E006E59CF /* BSOD */ = { isa = PBXNativeTarget; buildConfigurationList = AF9D4DBD09B5B71E006E59CF /* Build configuration list for PBXNativeTarget "BSOD" */; buildPhases = ( AF9D4DB209B5B71E006E59CF /* Resources */, AF9D4DB409B5B71E006E59CF /* Sources */, AF9D4DB809B5B71E006E59CF /* Frameworks */, AF9D4DBC09B5B71E006E59CF /* Rez */, AFA3D69209C03B5C00E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AF9D4DB009B5B71E006E59CF /* PBXTargetDependency */, ); name = BSOD; productName = BSOD; productReference = AF9D4DC009B5B71E006E59CF /* BSOD.saver */; productType = "com.apple.product-type.bundle"; }; AF9D4DEC09B5BB19006E59CF /* Apple2 */ = { isa = PBXNativeTarget; buildConfigurationList = AF9D4DFB09B5BB19006E59CF /* Build configuration list for PBXNativeTarget "Apple2" */; buildPhases = ( AF9D4DEF09B5BB19006E59CF /* Resources */, AF9D4DF109B5BB19006E59CF /* Sources */, AF9D4DF609B5BB19006E59CF /* Frameworks */, AF9D4DFA09B5BB19006E59CF /* Rez */, AFCCCBCB09C03AEE00353F4D /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AF9D4DED09B5BB19006E59CF /* PBXTargetDependency */, ); name = Apple2; productName = Apple2; productReference = AF9D4DFE09B5BB19006E59CF /* Apple2.saver */; productType = "com.apple.product-type.bundle"; }; AF9E7EBE190F4C1B00A8B01F /* enable_gc */ = { isa = PBXNativeTarget; buildConfigurationList = AF9E7EC5190F4C1C00A8B01F /* Build configuration list for PBXNativeTarget "enable_gc" */; buildPhases = ( AF9E7EBB190F4C1B00A8B01F /* Sources */, AF9E7EBC190F4C1B00A8B01F /* Frameworks */, AF9E7EBD190F4C1B00A8B01F /* CopyFiles */, ); buildRules = ( ); dependencies = ( ); name = enable_gc; productName = enable_gc; productReference = AF9E7EBF190F4C1B00A8B01F /* enable_gc */; productType = "com.apple.product-type.tool"; }; AFA2118C1CD59DAF00C0D2A1 /* RaverHoop */ = { isa = PBXNativeTarget; buildConfigurationList = AFA2119E1CD59DAF00C0D2A1 /* Build configuration list for PBXNativeTarget "RaverHoop" */; buildPhases = ( AFA2118F1CD59DAF00C0D2A1 /* Resources */, AFA211911CD59DAF00C0D2A1 /* Sources */, AFA211941CD59DAF00C0D2A1 /* Frameworks */, AFA2119C1CD59DAF00C0D2A1 /* Rez */, AFA2119D1CD59DAF00C0D2A1 /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AFA2118D1CD59DAF00C0D2A1 /* PBXTargetDependency */, ); name = RaverHoop; productName = DangerBall; productReference = AFA211A11CD59DAF00C0D2A1 /* RaverHoop.saver */; productType = "com.apple.product-type.bundle"; }; AFA3392E0B058505002B0E7D /* WebCollage */ = { isa = PBXNativeTarget; buildConfigurationList = AFA3393D0B058505002B0E7D /* Build configuration list for PBXNativeTarget "WebCollage" */; buildPhases = ( AFA339310B058505002B0E7D /* Resources */, AFA339340B058505002B0E7D /* Sources */, AFA339370B058505002B0E7D /* Frameworks */, AFA3393B0B058505002B0E7D /* Rez */, AFA3393C0B058505002B0E7D /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AFA3392F0B058505002B0E7D /* PBXTargetDependency */, AFA33BDC0B058952002B0E7D /* PBXTargetDependency */, AFA33C040B058E3C002B0E7D /* PBXTargetDependency */, ); name = WebCollage; productName = WebCollage; productReference = AFA339400B058505002B0E7D /* WebCollage.saver */; productType = "com.apple.product-type.bundle"; }; AFA33BC60B058740002B0E7D /* webcollage-helper */ = { isa = PBXNativeTarget; buildConfigurationList = AFA33BCB0B058754002B0E7D /* Build configuration list for PBXNativeTarget "webcollage-helper" */; buildPhases = ( AFA33BC40B058740002B0E7D /* Sources */, AFA33BC50B058740002B0E7D /* Frameworks */, ); buildRules = ( ); dependencies = ( ); name = "webcollage-helper"; productName = "webcollage-helper"; productReference = AFA33BC70B058740002B0E7D /* webcollage-helper */; productType = "com.apple.product-type.tool"; }; AFA55946099330B000F3E977 /* Cage */ = { isa = PBXNativeTarget; buildConfigurationList = AFA55957099330B000F3E977 /* Build configuration list for PBXNativeTarget "Cage" */; buildPhases = ( AFA55949099330B000F3E977 /* Resources */, AFA5594B099330B000F3E977 /* Sources */, AFA5594F099330B000F3E977 /* Frameworks */, AFA55956099330B000F3E977 /* Rez */, AFA3D96309C03DB500E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AFA55947099330B000F3E977 /* PBXTargetDependency */, ); name = Cage; productName = Cage; productReference = AFA5595A099330B000F3E977 /* Cage.saver */; productType = "com.apple.product-type.bundle"; }; AFA5596D0993317900F3E977 /* Moebius */ = { isa = PBXNativeTarget; buildConfigurationList = AFA5597C0993317900F3E977 /* Build configuration list for PBXNativeTarget "Moebius" */; buildPhases = ( AFA559700993317900F3E977 /* Resources */, AFA559720993317900F3E977 /* Sources */, AFA559740993317900F3E977 /* Frameworks */, AFA5597B0993317900F3E977 /* Rez */, AFA3D9AB09C03E4200E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AFA5596E0993317900F3E977 /* PBXTargetDependency */, ); name = Moebius; productName = Moebius; productReference = AFA5597F0993317900F3E977 /* Moebius.saver */; productType = "com.apple.product-type.bundle"; }; AFA559920993322100F3E977 /* Superquadrics */ = { isa = PBXNativeTarget; buildConfigurationList = AFA559A10993322100F3E977 /* Build configuration list for PBXNativeTarget "Superquadrics" */; buildPhases = ( AFA559950993322100F3E977 /* Resources */, AFA559970993322100F3E977 /* Sources */, AFA559990993322100F3E977 /* Frameworks */, AFA559A00993322100F3E977 /* Rez */, AFA3D9D109C03E8B00E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AFA559930993322100F3E977 /* PBXTargetDependency */, ); name = Superquadrics; productName = Superquadrics; productReference = AFA559A40993322100F3E977 /* Superquadrics.saver */; productType = "com.apple.product-type.bundle"; }; AFA559B50993328000F3E977 /* Morph3D */ = { isa = PBXNativeTarget; buildConfigurationList = AFA559C40993328000F3E977 /* Build configuration list for PBXNativeTarget "Morph3D" */; buildPhases = ( AFA559B80993328000F3E977 /* Resources */, AFA559BA0993328000F3E977 /* Sources */, AFA559BC0993328000F3E977 /* Frameworks */, AFA559C30993328000F3E977 /* Rez */, AFA3D9AF09C03E4B00E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AFA559B60993328000F3E977 /* PBXTargetDependency */, ); name = Morph3D; productName = Morph3D; productReference = AFA559C70993328000F3E977 /* Morph3D.saver */; productType = "com.apple.product-type.bundle"; }; AFA559CF0993330600F3E977 /* Rubik */ = { isa = PBXNativeTarget; buildConfigurationList = AFA559DE0993330600F3E977 /* Build configuration list for PBXNativeTarget "Rubik" */; buildPhases = ( AFA559D20993330600F3E977 /* Resources */, AFA559D40993330600F3E977 /* Sources */, AFA559D60993330600F3E977 /* Frameworks */, AFA559DD0993330600F3E977 /* Rez */, AFA3D9C109C03E6E00E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AFA559D00993330600F3E977 /* PBXTargetDependency */, ); name = Rubik; productName = Rubik; productReference = AFA559E10993330600F3E977 /* Rubik.saver */; productType = "com.apple.product-type.bundle"; }; AFA55A030993340300F3E977 /* Stairs */ = { isa = PBXNativeTarget; buildConfigurationList = AFA55A120993340300F3E977 /* Build configuration list for PBXNativeTarget "Stairs" */; buildPhases = ( AFA55A060993340300F3E977 /* Resources */, AFA55A080993340300F3E977 /* Sources */, AFA55A0A0993340300F3E977 /* Frameworks */, AFA55A110993340300F3E977 /* Rez */, AFA3D9CB09C03E7F00E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AFA55A040993340300F3E977 /* PBXTargetDependency */, ); name = Stairs; productName = Stairs; productReference = AFA55A150993340300F3E977 /* Stairs.saver */; productType = "com.apple.product-type.bundle"; }; AFA55A20099334A000F3E977 /* Sproingies */ = { isa = PBXNativeTarget; buildConfigurationList = AFA55A2F099334A000F3E977 /* Build configuration list for PBXNativeTarget "Sproingies" */; buildPhases = ( AFA55A23099334A000F3E977 /* Resources */, AFA55A25099334A000F3E977 /* Sources */, AFA55A27099334A000F3E977 /* Frameworks */, AFA55A2E099334A000F3E977 /* Rez */, AFA3D9C909C03E7C00E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AFA55A21099334A000F3E977 /* PBXTargetDependency */, ); name = Sproingies; productName = Sproingies; productReference = AFA55A32099334A000F3E977 /* Sproingies.saver */; productType = "com.apple.product-type.bundle"; }; AFA55A790993364300F3E977 /* Lament */ = { isa = PBXNativeTarget; buildConfigurationList = AFA55A880993364300F3E977 /* Build configuration list for PBXNativeTarget "Lament" */; buildPhases = ( AFA55A7C0993364300F3E977 /* Resources */, AFA55A7E0993364300F3E977 /* Sources */, AFA55A800993364300F3E977 /* Frameworks */, AFA55A870993364300F3E977 /* Rez */, AFA3D9A309C03E3200E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AFA55A7A0993364300F3E977 /* PBXTargetDependency */, ); name = Lament; productName = Lament; productReference = AFA55A8B0993364300F3E977 /* Lament.saver */; productType = "com.apple.product-type.bundle"; }; AFA55ACF09933CEF00F3E977 /* Bubble3D */ = { isa = PBXNativeTarget; buildConfigurationList = AFA55ADE09933CEF00F3E977 /* Build configuration list for PBXNativeTarget "Bubble3D" */; buildPhases = ( AFA55AD209933CEF00F3E977 /* Resources */, AFA55AD409933CEF00F3E977 /* Sources */, AFA55AD609933CEF00F3E977 /* Frameworks */, AFA55ADD09933CEF00F3E977 /* Rez */, AFA3D96109C03DB100E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AFA55AD009933CEF00F3E977 /* PBXTargetDependency */, ); name = Bubble3D; productName = Bubble3D; productReference = AFA55AE109933CEF00F3E977 /* Bubble3D.saver */; productType = "com.apple.product-type.bundle"; }; AFA55B0909933E0500F3E977 /* GLPlanet */ = { isa = PBXNativeTarget; buildConfigurationList = AFA55B1B09933E0500F3E977 /* Build configuration list for PBXNativeTarget "GLPlanet" */; buildPhases = ( AFA55B0C09933E0500F3E977 /* Resources */, AFA55B0E09933E0500F3E977 /* Sources */, AFA55B1309933E0500F3E977 /* Frameworks */, AFA55B1A09933E0500F3E977 /* Rez */, AFA3D99309C03E1600E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AFA55B0A09933E0500F3E977 /* PBXTargetDependency */, ); name = GLPlanet; productName = GLPlanet; productReference = AFA55B1E09933E0500F3E977 /* GLPlanet.saver */; productType = "com.apple.product-type.bundle"; }; AFA55B2509933E8D00F3E977 /* Pulsar */ = { isa = PBXNativeTarget; buildConfigurationList = AFA55B3409933E8D00F3E977 /* Build configuration list for PBXNativeTarget "Pulsar" */; buildPhases = ( AFA55B2809933E8D00F3E977 /* Resources */, AFA55B2A09933E8D00F3E977 /* Sources */, AFA55B2C09933E8D00F3E977 /* Frameworks */, AFA55B3309933E8D00F3E977 /* Rez */, AFA3D9BD09C03E6500E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AFA55B2609933E8D00F3E977 /* PBXTargetDependency */, ); name = Pulsar; productName = Pulsar; productReference = AFA55B3709933E8D00F3E977 /* Pulsar.saver */; productType = "com.apple.product-type.bundle"; }; AFA55B7909933F7200F3E977 /* Sierpinski3D */ = { isa = PBXNativeTarget; buildConfigurationList = AFA55B8809933F7200F3E977 /* Build configuration list for PBXNativeTarget "Sierpinski3D" */; buildPhases = ( AFA55B7C09933F7200F3E977 /* Resources */, AFA55B7E09933F7200F3E977 /* Sources */, AFA55B8009933F7200F3E977 /* Frameworks */, AFA55B8709933F7200F3E977 /* Rez */, AFA3D9C509C03E7400E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AFA55B7A09933F7200F3E977 /* PBXTargetDependency */, ); name = Sierpinski3D; productName = Sierpinski3D; productReference = AFA55B8B09933F7200F3E977 /* Sierpinski3D.saver */; productType = "com.apple.product-type.bundle"; }; AFA55B9109933FDA00F3E977 /* GFlux */ = { isa = PBXNativeTarget; buildConfigurationList = AFA55BA009933FDA00F3E977 /* Build configuration list for PBXNativeTarget "GFlux" */; buildPhases = ( AFA55B9409933FDA00F3E977 /* Resources */, AFA55B9609933FDA00F3E977 /* Sources */, AFA55B9809933FDA00F3E977 /* Frameworks */, AFA55B9F09933FDA00F3E977 /* Rez */, AFA3D98709C03DF400E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AFA55B9209933FDA00F3E977 /* PBXTargetDependency */, ); name = GFlux; productName = GFlux; productReference = AFA55BA309933FDA00F3E977 /* GFlux.saver */; productType = "com.apple.product-type.bundle"; }; AFA55BAB099340CE00F3E977 /* Circuit */ = { isa = PBXNativeTarget; buildConfigurationList = AFA55BBA099340CE00F3E977 /* Build configuration list for PBXNativeTarget "Circuit" */; buildPhases = ( AFA55BAE099340CE00F3E977 /* Resources */, AFA55BB0099340CE00F3E977 /* Sources */, AFA55BB2099340CE00F3E977 /* Frameworks */, AFA55BB9099340CE00F3E977 /* Rez */, AFA3D96709C03DBC00E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AFA55BAC099340CE00F3E977 /* PBXTargetDependency */, ); name = Circuit; productName = Circuit; productReference = AFA55BBD099340CE00F3E977 /* Circuit.saver */; productType = "com.apple.product-type.bundle"; }; AFA55BE40993429100F3E977 /* Menger */ = { isa = PBXNativeTarget; buildConfigurationList = AFA55BF30993429100F3E977 /* Build configuration list for PBXNativeTarget "Menger" */; buildPhases = ( AFA55BE70993429100F3E977 /* Resources */, AFA55BE90993429100F3E977 /* Sources */, AFA55BEB0993429100F3E977 /* Frameworks */, AFA55BF20993429100F3E977 /* Rez */, AFA3D9A709C03E3A00E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AFA55BE50993429100F3E977 /* PBXTargetDependency */, ); name = Menger; productName = Menger; productReference = AFA55BF60993429100F3E977 /* Menger.saver */; productType = "com.apple.product-type.bundle"; }; AFA55C0E0993431300F3E977 /* Engine */ = { isa = PBXNativeTarget; buildConfigurationList = AFA55C1D0993431300F3E977 /* Build configuration list for PBXNativeTarget "Engine" */; buildPhases = ( AFA55C110993431300F3E977 /* Resources */, AFA55C130993431300F3E977 /* Sources */, AFA55C150993431300F3E977 /* Frameworks */, AFA55C1C0993431300F3E977 /* Rez */, AFA3D97709C03DDA00E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AFA55C0F0993431300F3E977 /* PBXTargetDependency */, ); name = Engine; productName = Engine; productReference = AFA55C200993431300F3E977 /* Engine.saver */; productType = "com.apple.product-type.bundle"; }; AFA55C77099349A600F3E977 /* GLSnake */ = { isa = PBXNativeTarget; buildConfigurationList = AFA55C86099349A600F3E977 /* Build configuration list for PBXNativeTarget "GLSnake" */; buildPhases = ( AFA55C7A099349A600F3E977 /* Resources */, AFA55C7C099349A600F3E977 /* Sources */, AFA55C7E099349A600F3E977 /* Frameworks */, AFA55C85099349A600F3E977 /* Rez */, AFA3D99709C03E1C00E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AFA55C78099349A600F3E977 /* PBXTargetDependency */, ); name = GLSnake; productName = GLSnake; productReference = AFA55C89099349A600F3E977 /* GLSnake.saver */; productType = "com.apple.product-type.bundle"; }; AFA55CA909934BB200F3E977 /* Boxed */ = { isa = PBXNativeTarget; buildConfigurationList = AFA55CB809934BB200F3E977 /* Build configuration list for PBXNativeTarget "Boxed" */; buildPhases = ( AFA55CAC09934BB200F3E977 /* Resources */, AFA55CAE09934BB200F3E977 /* Sources */, AFA55CB009934BB200F3E977 /* Frameworks */, AFA55CB709934BB200F3E977 /* Rez */, AFA3D95F09C03DAE00E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AFA55CAA09934BB200F3E977 /* PBXTargetDependency */, ); name = Boxed; productName = Boxed; productReference = AFA55CBB09934BB200F3E977 /* Boxed.saver */; productType = "com.apple.product-type.bundle"; }; AFA55CCC09934CE400F3E977 /* GLForestFire */ = { isa = PBXNativeTarget; buildConfigurationList = AFA55CDB09934CE400F3E977 /* Build configuration list for PBXNativeTarget "GLForestFire" */; buildPhases = ( AFA55CCF09934CE400F3E977 /* Resources */, AFA55CD109934CE400F3E977 /* Sources */, AFA55CD309934CE400F3E977 /* Frameworks */, AFA55CDA09934CE400F3E977 /* Rez */, AFA3D98B09C03DFC00E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AFA55CCD09934CE400F3E977 /* PBXTargetDependency */, ); name = GLForestFire; productName = GLForestFire; productReference = AFA55CDE09934CE400F3E977 /* GLForestFire.saver */; productType = "com.apple.product-type.bundle"; }; AFA55D3C0993565300F3E977 /* SBalls */ = { isa = PBXNativeTarget; buildConfigurationList = AFA55D4B0993565300F3E977 /* Build configuration list for PBXNativeTarget "SBalls" */; buildPhases = ( AFA55D3F0993565300F3E977 /* Resources */, AFA55D410993565300F3E977 /* Sources */, AFA55D430993565300F3E977 /* Frameworks */, AFA55D4A0993565300F3E977 /* Rez */, AFA3D9C309C03E7100E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AFA55D3D0993565300F3E977 /* PBXTargetDependency */, ); name = SBalls; productName = SBalls; productReference = AFA55D4E0993565300F3E977 /* SBalls.saver */; productType = "com.apple.product-type.bundle"; }; AFA55D620993584B00F3E977 /* Cubenetic */ = { isa = PBXNativeTarget; buildConfigurationList = AFA55D710993584B00F3E977 /* Build configuration list for PBXNativeTarget "Cubenetic" */; buildPhases = ( AFA55D650993584B00F3E977 /* Resources */, AFA55D670993584B00F3E977 /* Sources */, AFA55D690993584B00F3E977 /* Frameworks */, AFA55D700993584B00F3E977 /* Rez */, AFA3D96D09C03DCA00E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AFA55D630993584B00F3E977 /* PBXTargetDependency */, ); name = Cubenetic; productName = Cubenetic; productReference = AFA55D740993584B00F3E977 /* Cubenetic.saver */; productType = "com.apple.product-type.bundle"; }; AFA55D7F099358C400F3E977 /* Spheremonics */ = { isa = PBXNativeTarget; buildConfigurationList = AFA55D8E099358C400F3E977 /* Build configuration list for PBXNativeTarget "Spheremonics" */; buildPhases = ( AFA55D82099358C400F3E977 /* Resources */, AFA55D84099358C400F3E977 /* Sources */, AFA55D86099358C400F3E977 /* Frameworks */, AFA55D8D099358C400F3E977 /* Rez */, AFA3D9C709C03E7800E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AFA55D80099358C400F3E977 /* PBXTargetDependency */, ); name = Spheremonics; productName = Spheremonics; productReference = AFA55D91099358C400F3E977 /* Spheremonics.saver */; productType = "com.apple.product-type.bundle"; }; AFA55DC809935D7000F3E977 /* Lavalite */ = { isa = PBXNativeTarget; buildConfigurationList = AFA55DD709935D7000F3E977 /* Build configuration list for PBXNativeTarget "Lavalite" */; buildPhases = ( AFA55DCB09935D7000F3E977 /* Resources */, AFA55DCD09935D7000F3E977 /* Sources */, AFA55DCF09935D7000F3E977 /* Frameworks */, AFA55DD609935D7000F3E977 /* Rez */, AFA3D9A509C03E3600E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AFA55DC909935D7000F3E977 /* PBXTargetDependency */, ); name = Lavalite; productName = Lavalite; productReference = AFA55DDA09935D7000F3E977 /* Lavalite.saver */; productType = "com.apple.product-type.bundle"; }; AFA55DF009935E4900F3E977 /* Queens */ = { isa = PBXNativeTarget; buildConfigurationList = AFA55E0009935E4900F3E977 /* Build configuration list for PBXNativeTarget "Queens" */; buildPhases = ( AFA55DF309935E4900F3E977 /* Resources */, AFA55DF509935E4900F3E977 /* Sources */, AFA55DF809935E4900F3E977 /* Frameworks */, AFA55DFF09935E4900F3E977 /* Rez */, AFA3D9BF09C03E6900E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AFA55DF109935E4900F3E977 /* PBXTargetDependency */, ); name = Queens; productName = Queens; productReference = AFA55E0309935E4900F3E977 /* Queens.saver */; productType = "com.apple.product-type.bundle"; }; AFA55E0D09935EDC00F3E977 /* Endgame */ = { isa = PBXNativeTarget; buildConfigurationList = AFA55E1C09935EDC00F3E977 /* Build configuration list for PBXNativeTarget "Endgame" */; buildPhases = ( AFA55E1009935EDC00F3E977 /* Resources */, AFA55E1209935EDC00F3E977 /* Sources */, AFA55E1409935EDC00F3E977 /* Frameworks */, AFA55E1B09935EDC00F3E977 /* Rez */, AFA3D97509C03DD700E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AFA55E0E09935EDC00F3E977 /* PBXTargetDependency */, ); name = Endgame; productName = Endgame; productReference = AFA55E1F09935EDC00F3E977 /* Endgame.saver */; productType = "com.apple.product-type.bundle"; }; AFA55E2F09935F8E00F3E977 /* GLBlur */ = { isa = PBXNativeTarget; buildConfigurationList = AFA55E3F09935F8E00F3E977 /* Build configuration list for PBXNativeTarget "GLBlur" */; buildPhases = ( AFA55E3209935F8E00F3E977 /* Resources */, AFA55E3409935F8E00F3E977 /* Sources */, AFA55E3709935F8E00F3E977 /* Frameworks */, AFA55E3E09935F8E00F3E977 /* Rez */, AFA3D98909C03DF700E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AFA55E3009935F8E00F3E977 /* PBXTargetDependency */, ); name = GLBlur; productName = GLBlur; productReference = AFA55E4209935F8E00F3E977 /* GLBlur.saver */; productType = "com.apple.product-type.bundle"; }; AFA55E4E09935FF900F3E977 /* FlyingToasters */ = { isa = PBXNativeTarget; buildConfigurationList = AFA55E5D09935FF900F3E977 /* Build configuration list for PBXNativeTarget "FlyingToasters" */; buildPhases = ( AFA55E5109935FF900F3E977 /* Resources */, AFA55E5309935FF900F3E977 /* Sources */, AFA55E5509935FF900F3E977 /* Frameworks */, AFA55E5C09935FF900F3E977 /* Rez */, AFA3D98109C03DEA00E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AFA55E4F09935FF900F3E977 /* PBXTargetDependency */, ); name = FlyingToasters; productName = FlyingToasters; productReference = AFA55E6009935FF900F3E977 /* FlyingToasters.saver */; productType = "com.apple.product-type.bundle"; }; AFA55EC7099360E300F3E977 /* BouncingCow */ = { isa = PBXNativeTarget; buildConfigurationList = AFA55EE0099360E300F3E977 /* Build configuration list for PBXNativeTarget "BouncingCow" */; buildPhases = ( AFA55ECA099360E300F3E977 /* Resources */, AFA55ECC099360E300F3E977 /* Sources */, AFA55ED8099360E300F3E977 /* Frameworks */, AFA55EDF099360E300F3E977 /* Rez */, AFA3D95D09C03DAB00E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AFA55EC8099360E300F3E977 /* PBXTargetDependency */, ); name = BouncingCow; productName = BouncingCow; productReference = AFA55EE3099360E300F3E977 /* BouncingCow.saver */; productType = "com.apple.product-type.bundle"; }; AFA55F06099361B700F3E977 /* JigglyPuff */ = { isa = PBXNativeTarget; buildConfigurationList = AFA55F1B099361B700F3E977 /* Build configuration list for PBXNativeTarget "JigglyPuff" */; buildPhases = ( AFA55F09099361B700F3E977 /* Resources */, AFA55F0B099361B700F3E977 /* Sources */, AFA55F13099361B700F3E977 /* Frameworks */, AFA55F1A099361B700F3E977 /* Rez */, AFA3D99D09C03E2600E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AFA55F07099361B700F3E977 /* PBXTargetDependency */, ); name = JigglyPuff; productName = JigglyPuff; productReference = AFA55F1E099361B700F3E977 /* JigglyPuff.saver */; productType = "com.apple.product-type.bundle"; }; AFA55F2A0993622F00F3E977 /* Klein */ = { isa = PBXNativeTarget; buildConfigurationList = AFA55F390993622F00F3E977 /* Build configuration list for PBXNativeTarget "Klein" */; buildPhases = ( AFA55F2D0993622F00F3E977 /* Resources */, AFA55F2F0993622F00F3E977 /* Sources */, AFA55F310993622F00F3E977 /* Frameworks */, AFA55F380993622F00F3E977 /* Rez */, AFA3D9A109C03E2E00E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AFA55F2B0993622F00F3E977 /* PBXTargetDependency */, ); name = Klein; productName = Klein; productReference = AFA55F3C0993622F00F3E977 /* Klein.saver */; productType = "com.apple.product-type.bundle"; }; AFA55F420993629000F3E977 /* Hypertorus */ = { isa = PBXNativeTarget; buildConfigurationList = AFA55F510993629000F3E977 /* Build configuration list for PBXNativeTarget "Hypertorus" */; buildPhases = ( AFA55F450993629000F3E977 /* Resources */, AFA55F470993629000F3E977 /* Sources */, AFA55F490993629000F3E977 /* Frameworks */, AFA55F500993629000F3E977 /* Rez */, AFA3D99B09C03E2300E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AFA55F430993629000F3E977 /* PBXTargetDependency */, ); name = Hypertorus; productName = HyperTorus; productReference = AFA55F540993629000F3E977 /* Hypertorus.saver */; productType = "com.apple.product-type.bundle"; }; AFA55F720993643600F3E977 /* GLMatrix */ = { isa = PBXNativeTarget; buildConfigurationList = AFA55F810993643600F3E977 /* Build configuration list for PBXNativeTarget "GLMatrix" */; buildPhases = ( AFA55F750993643600F3E977 /* Resources */, AFA55F770993643600F3E977 /* Sources */, AFA55F790993643600F3E977 /* Frameworks */, AFA55F800993643600F3E977 /* Rez */, AFA3D99109C03E1200E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AFA55F730993643600F3E977 /* PBXTargetDependency */, ); name = GLMatrix; productName = GLMatrix; productReference = AFA55F840993643600F3E977 /* GLMatrix.saver */; productType = "com.apple.product-type.bundle"; }; AFA55FD309936BFA00F3E977 /* CubeStorm */ = { isa = PBXNativeTarget; buildConfigurationList = AFA55FE209936BFA00F3E977 /* Build configuration list for PBXNativeTarget "CubeStorm" */; buildPhases = ( AFA55FD609936BFA00F3E977 /* Resources */, AFA55FD809936BFA00F3E977 /* Sources */, AFA55FDA09936BFA00F3E977 /* Frameworks */, AFA55FE109936BFA00F3E977 /* Rez */, AFA3D96F09C03DCD00E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AFA55FD409936BFA00F3E977 /* PBXTargetDependency */, ); name = CubeStorm; productName = CubeStorm; productReference = AFA55FE509936BFA00F3E977 /* CubeStorm.saver */; productType = "com.apple.product-type.bundle"; }; AFA55FF909936C6D00F3E977 /* GLKnots */ = { isa = PBXNativeTarget; buildConfigurationList = AFA5600809936C6D00F3E977 /* Build configuration list for PBXNativeTarget "GLKnots" */; buildPhases = ( AFA55FFC09936C6D00F3E977 /* Resources */, AFA55FFE09936C6D00F3E977 /* Sources */, AFA5600009936C6D00F3E977 /* Frameworks */, AFA5600709936C6D00F3E977 /* Rez */, AFA3D98F09C03E0F00E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AFA55FFA09936C6D00F3E977 /* PBXTargetDependency */, ); name = GLKnots; productName = GLKnots; productReference = AFA5600B09936C6D00F3E977 /* GLKnots.saver */; productType = "com.apple.product-type.bundle"; }; AFA5601409936CC800F3E977 /* BlockTube */ = { isa = PBXNativeTarget; buildConfigurationList = AFA5602309936CC800F3E977 /* Build configuration list for PBXNativeTarget "BlockTube" */; buildPhases = ( AFA5601709936CC800F3E977 /* Resources */, AFA5601909936CC800F3E977 /* Sources */, AFA5601B09936CC800F3E977 /* Frameworks */, AFA5602209936CC800F3E977 /* Rez */, AFA3D95909C03DA400E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AFA5601509936CC800F3E977 /* PBXTargetDependency */, ); name = BlockTube; productName = BlockTube; productReference = AFA5602609936CC800F3E977 /* BlockTube.saver */; productType = "com.apple.product-type.bundle"; }; AFA5603209936D5100F3E977 /* FlipFlop */ = { isa = PBXNativeTarget; buildConfigurationList = AFA5604109936D5100F3E977 /* Build configuration list for PBXNativeTarget "FlipFlop" */; buildPhases = ( AFA5603509936D5100F3E977 /* Resources */, AFA5603709936D5100F3E977 /* Sources */, AFA5603909936D5100F3E977 /* Frameworks */, AFA5604009936D5100F3E977 /* Rez */, AFA3D97B09C03DE000E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AFA5603309936D5100F3E977 /* PBXTargetDependency */, ); name = FlipFlop; productName = FlipFlop; productReference = AFA5604409936D5100F3E977 /* FlipFlop.saver */; productType = "com.apple.product-type.bundle"; }; AFA5604A09936E2100F3E977 /* AntInspect */ = { isa = PBXNativeTarget; buildConfigurationList = AFA5605909936E2100F3E977 /* Build configuration list for PBXNativeTarget "AntInspect" */; buildPhases = ( AFA5604D09936E2100F3E977 /* Resources */, AFA5604F09936E2100F3E977 /* Sources */, AFA5605109936E2100F3E977 /* Frameworks */, AFA5605809936E2100F3E977 /* Rez */, AFA3D94D09C03D8D00E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AFA5604B09936E2100F3E977 /* PBXTargetDependency */, ); name = AntInspect; productName = AntInspect; productReference = AFA5605C09936E2100F3E977 /* AntInspect.saver */; productType = "com.apple.product-type.bundle"; }; AFA5606209936F3800F3E977 /* AntSpotlight */ = { isa = PBXNativeTarget; buildConfigurationList = AFA5607109936F3800F3E977 /* Build configuration list for PBXNativeTarget "AntSpotlight" */; buildPhases = ( AFA5606509936F3800F3E977 /* Resources */, AFA5606709936F3800F3E977 /* Sources */, AFA5606909936F3800F3E977 /* Frameworks */, AFA5607009936F3800F3E977 /* Rez */, AFA3D95109C03D9400E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AFA5606309936F3800F3E977 /* PBXTargetDependency */, ); name = AntSpotlight; productName = AntSpotlight; productReference = AFA5607409936F3800F3E977 /* AntSpotlight.saver */; productType = "com.apple.product-type.bundle"; }; AFA560AE0993718D00F3E977 /* Polytopes */ = { isa = PBXNativeTarget; buildConfigurationList = AFA560BD0993718D00F3E977 /* Build configuration list for PBXNativeTarget "Polytopes" */; buildPhases = ( AFA560B10993718D00F3E977 /* Resources */, AFA560B30993718D00F3E977 /* Sources */, AFA560B50993718D00F3E977 /* Frameworks */, AFA560BC0993718D00F3E977 /* Rez */, AFA3D9B909C03E5E00E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AFA560AF0993718D00F3E977 /* PBXTargetDependency */, ); name = Polytopes; productName = Polytopes; productReference = AFA560C00993718D00F3E977 /* Polytopes.saver */; productType = "com.apple.product-type.bundle"; }; AFA560FD0993781600F3E977 /* Molecule */ = { isa = PBXNativeTarget; buildConfigurationList = AFA5610C0993781600F3E977 /* Build configuration list for PBXNativeTarget "Molecule" */; buildPhases = ( AFA561000993781600F3E977 /* Resources */, AFA561020993781600F3E977 /* Sources */, AFA561040993781600F3E977 /* Frameworks */, AFA5610B0993781600F3E977 /* Rez */, AFA3D9AD09C03E4600E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AFA560FE0993781600F3E977 /* PBXTargetDependency */, AFA5611E0993791D00F3E977 /* PBXTargetDependency */, ); name = Molecule; productName = Molecule; productReference = AFA5610F0993781600F3E977 /* Molecule.saver */; productType = "com.apple.product-type.bundle"; }; AFA5615609937C0D00F3E977 /* BlinkBox */ = { isa = PBXNativeTarget; buildConfigurationList = AFA5616709937C0D00F3E977 /* Build configuration list for PBXNativeTarget "BlinkBox" */; buildPhases = ( AFA5615B09937C0D00F3E977 /* Resources */, AFA5615D09937C0D00F3E977 /* Sources */, AFA5615F09937C0D00F3E977 /* Frameworks */, AFA5616609937C0D00F3E977 /* Rez */, AFA3D95709C03DA100E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AFA5615709937C0D00F3E977 /* PBXTargetDependency */, ); name = BlinkBox; productName = BlinkBox; productReference = AFA5616A09937C0D00F3E977 /* BlinkBox.saver */; productType = "com.apple.product-type.bundle"; }; AFA5617B09937CF100F3E977 /* Noof */ = { isa = PBXNativeTarget; buildConfigurationList = AFA5618A09937CF100F3E977 /* Build configuration list for PBXNativeTarget "Noof" */; buildPhases = ( AFA5617E09937CF100F3E977 /* Resources */, AFA5618009937CF100F3E977 /* Sources */, AFA5618209937CF100F3E977 /* Frameworks */, AFA5618909937CF100F3E977 /* Rez */, AFA3D9B109C03E4E00E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AFA5617C09937CF100F3E977 /* PBXTargetDependency */, ); name = Noof; productName = Noof; productReference = AFA5618D09937CF100F3E977 /* Noof.saver */; productType = "com.apple.product-type.bundle"; }; AFA5619D09937D7E00F3E977 /* Polyhedra */ = { isa = PBXNativeTarget; buildConfigurationList = AFA561AC09937D7E00F3E977 /* Build configuration list for PBXNativeTarget "Polyhedra" */; buildPhases = ( AFA561A009937D7E00F3E977 /* Resources */, AFA561A209937D7E00F3E977 /* Sources */, AFA561A409937D7E00F3E977 /* Frameworks */, AFA561AB09937D7E00F3E977 /* Rez */, AFA3D9B709C03E5B00E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AFA5619E09937D7E00F3E977 /* PBXTargetDependency */, ); name = Polyhedra; productName = Polyhedra; productReference = AFA561AF09937D7E00F3E977 /* Polyhedra.saver */; productType = "com.apple.product-type.bundle"; }; AFA562060993849F00F3E977 /* Providence */ = { isa = PBXNativeTarget; buildConfigurationList = AFA562160993849F00F3E977 /* Build configuration list for PBXNativeTarget "Providence" */; buildPhases = ( AFA562090993849F00F3E977 /* Resources */, AFA5620B0993849F00F3E977 /* Sources */, AFA5620E0993849F00F3E977 /* Frameworks */, AFA562150993849F00F3E977 /* Rez */, AFA3D9BB09C03E6200E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AFA562070993849F00F3E977 /* PBXTargetDependency */, ); name = Providence; productName = Providence; productReference = AFA562190993849F00F3E977 /* Providence.saver */; productType = "com.apple.product-type.bundle"; }; AFA5621F0993852500F3E977 /* Pinion */ = { isa = PBXNativeTarget; buildConfigurationList = AFA5622E0993852500F3E977 /* Build configuration list for PBXNativeTarget "Pinion" */; buildPhases = ( AFA562220993852500F3E977 /* Resources */, AFA562240993852500F3E977 /* Sources */, AFA562260993852500F3E977 /* Frameworks */, AFA5622D0993852500F3E977 /* Rez */, AFA3D9B309C03E5100E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AFA562200993852500F3E977 /* PBXTargetDependency */, ); name = Pinion; productName = Pinion; productReference = AFA562310993852500F3E977 /* Pinion.saver */; productType = "com.apple.product-type.bundle"; }; AFA562BF099392C600F3E977 /* Boing */ = { isa = PBXNativeTarget; buildConfigurationList = AFA562CE099392C600F3E977 /* Build configuration list for PBXNativeTarget "Boing" */; buildPhases = ( AFA562C2099392C600F3E977 /* Resources */, AFA562C4099392C600F3E977 /* Sources */, AFA562C6099392C600F3E977 /* Frameworks */, AFA562CD099392C600F3E977 /* Rez */, AFA3D95B09C03DA800E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AFA562C0099392C600F3E977 /* PBXTargetDependency */, ); name = Boing; productName = Boing; productReference = AFA562D1099392C600F3E977 /* Boing.saver */; productType = "com.apple.product-type.bundle"; }; AFA562DA099393C900F3E977 /* AntMaze */ = { isa = PBXNativeTarget; buildConfigurationList = AFA562E9099393C900F3E977 /* Build configuration list for PBXNativeTarget "AntMaze" */; buildPhases = ( AFA562DD099393C900F3E977 /* Resources */, AFA562DF099393C900F3E977 /* Sources */, AFA562E1099393C900F3E977 /* Frameworks */, AFA562E8099393C900F3E977 /* Rez */, AFA3D94F09C03D9100E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AFA562DB099393C900F3E977 /* PBXTargetDependency */, ); name = AntMaze; productName = AntMaze; productReference = AFA562EC099393C900F3E977 /* AntMaze.saver */; productType = "com.apple.product-type.bundle"; }; AFA562F20993943B00F3E977 /* Tangram */ = { isa = PBXNativeTarget; buildConfigurationList = AFA563010993943B00F3E977 /* Build configuration list for PBXNativeTarget "Tangram" */; buildPhases = ( AFA562F50993943B00F3E977 /* Resources */, AFA562F70993943B00F3E977 /* Sources */, AFA562F90993943B00F3E977 /* Frameworks */, AFA563000993943B00F3E977 /* Rez */, AFA3D9D309C03E8F00E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AFA562F30993943B00F3E977 /* PBXTargetDependency */, ); name = Tangram; productName = Tangram; productReference = AFA563040993943B00F3E977 /* Tangram.saver */; productType = "com.apple.product-type.bundle"; }; AFA563130993951000F3E977 /* Crackberg */ = { isa = PBXNativeTarget; buildConfigurationList = AFA563230993951000F3E977 /* Build configuration list for PBXNativeTarget "Crackberg" */; buildPhases = ( AFA563160993951000F3E977 /* Resources */, AFA563180993951000F3E977 /* Sources */, AFA5631B0993951000F3E977 /* Frameworks */, AFA563220993951000F3E977 /* Rez */, AFA3D96909C03DBF00E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AFA563140993951000F3E977 /* PBXTargetDependency */, ); name = Crackberg; productName = Crackberg; productReference = AFA563260993951000F3E977 /* Crackberg.saver */; productType = "com.apple.product-type.bundle"; }; AFA56331099395ED00F3E977 /* GLHanoi */ = { isa = PBXNativeTarget; buildConfigurationList = AFA56340099395ED00F3E977 /* Build configuration list for PBXNativeTarget "GLHanoi" */; buildPhases = ( AFA56334099395ED00F3E977 /* Resources */, AFA56336099395ED00F3E977 /* Sources */, AFA56338099395ED00F3E977 /* Frameworks */, AFA5633F099395ED00F3E977 /* Rez */, AFA3D98D09C03E0500E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AFA56332099395ED00F3E977 /* PBXTargetDependency */, ); name = GLHanoi; productName = GLHanoi; productReference = AFA56343099395ED00F3E977 /* GLHanoi.saver */; productType = "com.apple.product-type.bundle"; }; AFA56351099396C000F3E977 /* Cube21 */ = { isa = PBXNativeTarget; buildConfigurationList = AFA56360099396C000F3E977 /* Build configuration list for PBXNativeTarget "Cube21" */; buildPhases = ( AFA56354099396C000F3E977 /* Resources */, AFA56356099396C000F3E977 /* Sources */, AFA56358099396C000F3E977 /* Frameworks */, AFA5635F099396C000F3E977 /* Rez */, AFA3D96B09C03DC600E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AFA56352099396C000F3E977 /* PBXTargetDependency */, ); name = Cube21; productName = Cube21; productReference = AFA56363099396C000F3E977 /* Cube21.saver */; productType = "com.apple.product-type.bundle"; }; AFA56379099397B300F3E977 /* TimeTunnel */ = { isa = PBXNativeTarget; buildConfigurationList = AFA56388099397B300F3E977 /* Build configuration list for PBXNativeTarget "TimeTunnel" */; buildPhases = ( AFA5637C099397B300F3E977 /* Resources */, AFA5637E099397B300F3E977 /* Sources */, AFA56380099397B300F3E977 /* Frameworks */, AFA56387099397B300F3E977 /* Rez */, AFA3D9D509C03E9300E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AFA5637A099397B300F3E977 /* PBXTargetDependency */, ); name = TimeTunnel; productName = TimeTunnel; productReference = AFA5638B099397B300F3E977 /* TimeTunnel.saver */; productType = "com.apple.product-type.bundle"; }; AFA563A4099398BB00F3E977 /* Juggler3D */ = { isa = PBXNativeTarget; buildConfigurationList = AFA563B3099398BB00F3E977 /* Build configuration list for PBXNativeTarget "Juggler3D" */; buildPhases = ( AFA563A7099398BB00F3E977 /* Resources */, AFA563A9099398BB00F3E977 /* Sources */, AFA563AB099398BB00F3E977 /* Frameworks */, AFA563B2099398BB00F3E977 /* Rez */, AFA3D99F09C03E2900E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AFA563A5099398BB00F3E977 /* PBXTargetDependency */, ); name = Juggler3D; productName = Juggler3D; productReference = AFA563B6099398BB00F3E977 /* Juggler3D.saver */; productType = "com.apple.product-type.bundle"; }; AFACE8731CC83458008B24CD /* EnergyStream */ = { isa = PBXNativeTarget; buildConfigurationList = AFACE8851CC83458008B24CD /* Build configuration list for PBXNativeTarget "EnergyStream" */; buildPhases = ( AFACE8761CC83458008B24CD /* Resources */, AFACE8781CC83458008B24CD /* Sources */, AFACE87B1CC83458008B24CD /* Frameworks */, AFACE8831CC83458008B24CD /* Rez */, AFACE8841CC83458008B24CD /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AFACE8741CC83458008B24CD /* PBXTargetDependency */, ); name = EnergyStream; productName = DangerBall; productReference = AFACE8881CC83458008B24CD /* EnergyStream.saver */; productType = "com.apple.product-type.bundle"; }; AFB591A7178B812C00EA4005 /* Hexadrop */ = { isa = PBXNativeTarget; buildConfigurationList = AFB591B7178B812C00EA4005 /* Build configuration list for PBXNativeTarget "Hexadrop" */; buildPhases = ( AFB591AA178B812C00EA4005 /* Resources */, AFB591AC178B812C00EA4005 /* Sources */, AFB591AF178B812C00EA4005 /* Frameworks */, AFB591B5178B812C00EA4005 /* Rez */, AFB591B6178B812C00EA4005 /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AFB591A8178B812C00EA4005 /* PBXTargetDependency */, ); name = Hexadrop; productName = Attraction; productReference = AFB591BA178B812C00EA4005 /* Hexadrop.saver */; productType = "com.apple.product-type.bundle"; }; AFBFE74B178642DC00432B21 /* Apple2-OSX */ = { isa = PBXNativeTarget; buildConfigurationList = AFBFE75B178642DC00432B21 /* Build configuration list for PBXNativeTarget "Apple2-OSX" */; buildPhases = ( AFBFE74E178642DC00432B21 /* Resources */, AFBFE751178642DC00432B21 /* Sources */, AFBFE755178642DC00432B21 /* Frameworks */, AFBFE78817894FFA00432B21 /* Copy Standalone Preferences XML File */, AFBFE75A178642DC00432B21 /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AFBFE7641786438900432B21 /* PBXTargetDependency */, AFBFE74C178642DC00432B21 /* PBXTargetDependency */, ); name = "Apple2-OSX"; productName = SaverTester; productReference = AFBFE75E178642DC00432B21 /* Apple2.app */; productType = "com.apple.product-type.application"; }; AFBFE767178647FE00432B21 /* Phosphor-OSX */ = { isa = PBXNativeTarget; buildConfigurationList = AFBFE77B178647FE00432B21 /* Build configuration list for PBXNativeTarget "Phosphor-OSX" */; buildPhases = ( AFBFE76C178647FE00432B21 /* Resources */, AFBFE771178647FE00432B21 /* Sources */, AFBFE775178647FE00432B21 /* Frameworks */, AFBFE78917895AAF00432B21 /* Copy Standalone Preferences XML File */, AFBFE77A178647FE00432B21 /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AFBFE7811786482B00432B21 /* PBXTargetDependency */, AFBFE76A178647FE00432B21 /* PBXTargetDependency */, ); name = "Phosphor-OSX"; productName = SaverTester; productReference = AFBFE77E178647FE00432B21 /* Phosphor.app */; productType = "com.apple.product-type.application"; }; AFC0E8AB1CDC601A008CAFAC /* Hydrostat */ = { isa = PBXNativeTarget; buildConfigurationList = AFC0E8BD1CDC601A008CAFAC /* Build configuration list for PBXNativeTarget "Hydrostat" */; buildPhases = ( AFC0E8AE1CDC601A008CAFAC /* Resources */, AFC0E8B01CDC601A008CAFAC /* Sources */, AFC0E8B31CDC601A008CAFAC /* Frameworks */, AFC0E8BB1CDC601A008CAFAC /* Rez */, AFC0E8BC1CDC601A008CAFAC /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AFC0E8AC1CDC601A008CAFAC /* PBXTargetDependency */, ); name = Hydrostat; productName = DangerBall; productReference = AFC0E8C01CDC601A008CAFAC /* Hydrostat.saver */; productType = "com.apple.product-type.bundle"; }; AFCF833B1AF5B515008BB7E1 /* SplitFlap */ = { isa = PBXNativeTarget; buildConfigurationList = AFCF834D1AF5B515008BB7E1 /* Build configuration list for PBXNativeTarget "SplitFlap" */; buildPhases = ( AFCF833E1AF5B515008BB7E1 /* Resources */, AFCF83401AF5B515008BB7E1 /* Sources */, AFCF83431AF5B515008BB7E1 /* Frameworks */, AFCF834B1AF5B515008BB7E1 /* Rez */, AFCF834C1AF5B515008BB7E1 /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AFCF833C1AF5B515008BB7E1 /* PBXTargetDependency */, ); name = SplitFlap; productName = DangerBall; productReference = AFCF83501AF5B515008BB7E1 /* SplitFlap.saver */; productType = "com.apple.product-type.bundle"; }; AFD51B1B0F063B4A00471C02 /* Photopile */ = { isa = PBXNativeTarget; buildConfigurationList = AFD51B2D0F063B4A00471C02 /* Build configuration list for PBXNativeTarget "Photopile" */; buildPhases = ( AFD51B1E0F063B4A00471C02 /* Resources */, AFD51B210F063B4A00471C02 /* Sources */, AFD51B240F063B4A00471C02 /* Frameworks */, AFD51B2B0F063B4A00471C02 /* Rez */, AFD51B2C0F063B4A00471C02 /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AFD51B1C0F063B4A00471C02 /* PBXTargetDependency */, ); name = Photopile; productName = Photopile; productReference = AFD51B300F063B4A00471C02 /* Photopile.saver */; productType = "com.apple.product-type.bundle"; }; AFD56DF10996A03800BA26F7 /* GLText */ = { isa = PBXNativeTarget; buildConfigurationList = AFD56E010996A03800BA26F7 /* Build configuration list for PBXNativeTarget "GLText" */; buildPhases = ( AFD56DF40996A03800BA26F7 /* Resources */, AFD56DF60996A03800BA26F7 /* Sources */, AFD56DF90996A03800BA26F7 /* Frameworks */, AFD56E000996A03800BA26F7 /* Rez */, AFA3D99909C03E2000E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AFD56DF20996A03800BA26F7 /* PBXTargetDependency */, ); name = GLText; productName = GLText; productReference = AFD56E040996A03800BA26F7 /* GLText.saver */; productType = "com.apple.product-type.bundle"; }; AFD56EAE0996A72600BA26F7 /* Braid */ = { isa = PBXNativeTarget; buildConfigurationList = AFD56EBB0996A72600BA26F7 /* Build configuration list for PBXNativeTarget "Braid" */; buildPhases = ( AFD56EB10996A72600BA26F7 /* Resources */, AFD56EB30996A72600BA26F7 /* Sources */, AFD56EB60996A72600BA26F7 /* Frameworks */, AFD56EBA0996A72600BA26F7 /* Rez */, AFA3D90709C03D0B00E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AFD56EAF0996A72600BA26F7 /* PBXTargetDependency */, ); name = Braid; productName = Braid; productReference = AFD56EBE0996A72600BA26F7 /* Braid.saver */; productType = "com.apple.product-type.bundle"; }; AFD56EDA0996A95700BA26F7 /* Forest */ = { isa = PBXNativeTarget; buildConfigurationList = AFD56EE70996A95700BA26F7 /* Build configuration list for PBXNativeTarget "Forest" */; buildPhases = ( AFD56EDD0996A95700BA26F7 /* Resources */, AFD56EDF0996A95700BA26F7 /* Sources */, AFD56EE20996A95700BA26F7 /* Frameworks */, AFD56EE60996A95700BA26F7 /* Rez */, AFA3D91D09C03D3000E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AFD56EDB0996A95700BA26F7 /* PBXTargetDependency */, ); name = Forest; productName = Forest; productReference = AFD56EEA0996A95700BA26F7 /* Forest.saver */; productType = "com.apple.product-type.bundle"; }; AFD56F0B0996AAFA00BA26F7 /* Vines */ = { isa = PBXNativeTarget; buildConfigurationList = AFD56F180996AAFA00BA26F7 /* Build configuration list for PBXNativeTarget "Vines" */; buildPhases = ( AFD56F0E0996AAFA00BA26F7 /* Resources */, AFD56F100996AAFA00BA26F7 /* Sources */, AFD56F130996AAFA00BA26F7 /* Frameworks */, AFD56F170996AAFA00BA26F7 /* Rez */, AFA3D94909C03D8100E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AFD56F0C0996AAFA00BA26F7 /* PBXTargetDependency */, ); name = Vines; productName = Vines; productReference = AFD56F1B0996AAFA00BA26F7 /* Vines.saver */; productType = "com.apple.product-type.bundle"; }; AFD56F230996AB8A00BA26F7 /* Galaxy */ = { isa = PBXNativeTarget; buildConfigurationList = AFD56F300996AB8A00BA26F7 /* Build configuration list for PBXNativeTarget "Galaxy" */; buildPhases = ( AFD56F260996AB8A00BA26F7 /* Resources */, AFD56F280996AB8A00BA26F7 /* Sources */, AFD56F2B0996AB8A00BA26F7 /* Frameworks */, AFD56F2F0996AB8A00BA26F7 /* Rez */, AFA3D91F09C03D3300E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AFD56F240996AB8A00BA26F7 /* PBXTargetDependency */, ); name = Galaxy; productName = Galaxy; productReference = AFD56F330996AB8A00BA26F7 /* Galaxy.saver */; productType = "com.apple.product-type.bundle"; }; AFD56F4F0996AEEE00BA26F7 /* Grav */ = { isa = PBXNativeTarget; buildConfigurationList = AFD56F5C0996AEEE00BA26F7 /* Build configuration list for PBXNativeTarget "Grav" */; buildPhases = ( AFD56F520996AEEE00BA26F7 /* Resources */, AFD56F540996AEEE00BA26F7 /* Sources */, AFD56F570996AEEE00BA26F7 /* Frameworks */, AFD56F5B0996AEEE00BA26F7 /* Rez */, AFA3D92109C03D3600E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AFD56F500996AEEE00BA26F7 /* PBXTargetDependency */, ); name = Grav; productName = Grav; productReference = AFD56F5F0996AEEE00BA26F7 /* Grav.saver */; productType = "com.apple.product-type.bundle"; }; AFD56F6B0996B01600BA26F7 /* Hopalong */ = { isa = PBXNativeTarget; buildConfigurationList = AFD56F780996B01600BA26F7 /* Build configuration list for PBXNativeTarget "Hopalong" */; buildPhases = ( AFD56F6E0996B01600BA26F7 /* Resources */, AFD56F700996B01600BA26F7 /* Sources */, AFD56F730996B01600BA26F7 /* Frameworks */, AFD56F770996B01600BA26F7 /* Rez */, AFA3D92309C03D3A00E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AFD56F6C0996B01600BA26F7 /* PBXTargetDependency */, ); name = Hopalong; productName = Hopalong; productReference = AFD56F7B0996B01600BA26F7 /* Hopalong.saver */; productType = "com.apple.product-type.bundle"; }; AFD56F8C0996B09400BA26F7 /* Laser */ = { isa = PBXNativeTarget; buildConfigurationList = AFD56F990996B09400BA26F7 /* Build configuration list for PBXNativeTarget "Laser" */; buildPhases = ( AFD56F8F0996B09400BA26F7 /* Resources */, AFD56F910996B09400BA26F7 /* Sources */, AFD56F940996B09400BA26F7 /* Frameworks */, AFD56F980996B09400BA26F7 /* Rez */, AFA3D92909C03D4400E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AFD56F8D0996B09400BA26F7 /* PBXTargetDependency */, ); name = Laser; productName = Laser; productReference = AFD56F9C0996B09400BA26F7 /* Laser.saver */; productType = "com.apple.product-type.bundle"; }; AFD56FA30996B10F00BA26F7 /* Lightning */ = { isa = PBXNativeTarget; buildConfigurationList = AFD56FB00996B10F00BA26F7 /* Build configuration list for PBXNativeTarget "Lightning" */; buildPhases = ( AFD56FA60996B10F00BA26F7 /* Resources */, AFD56FA80996B10F00BA26F7 /* Sources */, AFD56FAB0996B10F00BA26F7 /* Frameworks */, AFD56FAF0996B10F00BA26F7 /* Rez */, AFA3D92B09C03D4700E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AFD56FA40996B10F00BA26F7 /* PBXTargetDependency */, ); name = Lightning; productName = Lightning; productReference = AFD56FB30996B10F00BA26F7 /* Lightning.saver */; productType = "com.apple.product-type.bundle"; }; AFD56FB90996B18F00BA26F7 /* Lisa */ = { isa = PBXNativeTarget; buildConfigurationList = AFD56FC60996B18F00BA26F7 /* Build configuration list for PBXNativeTarget "Lisa" */; buildPhases = ( AFD56FBC0996B18F00BA26F7 /* Resources */, AFD56FBE0996B18F00BA26F7 /* Sources */, AFD56FC10996B18F00BA26F7 /* Frameworks */, AFD56FC50996B18F00BA26F7 /* Rez */, AFA3D92D09C03D4A00E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AFD56FBA0996B18F00BA26F7 /* PBXTargetDependency */, ); name = Lisa; productName = Lisa; productReference = AFD56FC90996B18F00BA26F7 /* Lisa.saver */; productType = "com.apple.product-type.bundle"; }; AFD56FCF0996B20900BA26F7 /* Lissie */ = { isa = PBXNativeTarget; buildConfigurationList = AFD56FDC0996B20900BA26F7 /* Build configuration list for PBXNativeTarget "Lissie" */; buildPhases = ( AFD56FD20996B20900BA26F7 /* Resources */, AFD56FD40996B20900BA26F7 /* Sources */, AFD56FD70996B20900BA26F7 /* Frameworks */, AFD56FDB0996B20900BA26F7 /* Rez */, AFA3D92F09C03D4E00E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AFD56FD00996B20900BA26F7 /* PBXTargetDependency */, ); name = Lissie; productName = Lissie; productReference = AFD56FDF0996B20900BA26F7 /* Lissie.saver */; productType = "com.apple.product-type.bundle"; }; AFD56FF80996B43800BA26F7 /* Penrose */ = { isa = PBXNativeTarget; buildConfigurationList = AFD570050996B43800BA26F7 /* Build configuration list for PBXNativeTarget "Penrose" */; buildPhases = ( AFD56FFB0996B43800BA26F7 /* Resources */, AFD56FFD0996B43800BA26F7 /* Sources */, AFD570000996B43800BA26F7 /* Frameworks */, AFD570040996B43800BA26F7 /* Rez */, AFA3D93709C03D5B00E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AFD56FF90996B43800BA26F7 /* PBXTargetDependency */, ); name = Penrose; productName = Penrose; productReference = AFD570080996B43800BA26F7 /* Penrose.saver */; productType = "com.apple.product-type.bundle"; }; AFD5700F0996B4CC00BA26F7 /* Sierpinski */ = { isa = PBXNativeTarget; buildConfigurationList = AFD5701C0996B4CC00BA26F7 /* Build configuration list for PBXNativeTarget "Sierpinski" */; buildPhases = ( AFD570120996B4CC00BA26F7 /* Resources */, AFD570140996B4CC00BA26F7 /* Sources */, AFD570170996B4CC00BA26F7 /* Frameworks */, AFD5701B0996B4CC00BA26F7 /* Rez */, AFA3DBA209C0424C00E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AFD570100996B4CC00BA26F7 /* PBXTargetDependency */, ); name = Sierpinski; productName = Sierpinski; productReference = AFD5701F0996B4CC00BA26F7 /* Sierpinski.saver */; productType = "com.apple.product-type.bundle"; }; AFD570260996B56D00BA26F7 /* Sphere */ = { isa = PBXNativeTarget; buildConfigurationList = AFD570330996B56D00BA26F7 /* Build configuration list for PBXNativeTarget "Sphere" */; buildPhases = ( AFD570290996B56D00BA26F7 /* Resources */, AFD5702B0996B56D00BA26F7 /* Sources */, AFD5702E0996B56D00BA26F7 /* Frameworks */, AFD570320996B56D00BA26F7 /* Rez */, AFA3D93D09C03D6C00E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AFD570270996B56D00BA26F7 /* PBXTargetDependency */, ); name = Sphere; productName = Sphere; productReference = AFD570360996B56D00BA26F7 /* Sphere.saver */; productType = "com.apple.product-type.bundle"; }; AFD570430996B61600BA26F7 /* Spiral */ = { isa = PBXNativeTarget; buildConfigurationList = AFD570500996B61600BA26F7 /* Build configuration list for PBXNativeTarget "Spiral" */; buildPhases = ( AFD570460996B61600BA26F7 /* Resources */, AFD570480996B61600BA26F7 /* Sources */, AFD5704B0996B61600BA26F7 /* Frameworks */, AFD5704F0996B61600BA26F7 /* Rez */, AFA3D93F09C03D6F00E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AFD570440996B61600BA26F7 /* PBXTargetDependency */, ); name = Spiral; productName = Spiral; productReference = AFD570530996B61600BA26F7 /* Spiral.saver */; productType = "com.apple.product-type.bundle"; }; AFD570590996B6A300BA26F7 /* FadePlot */ = { isa = PBXNativeTarget; buildConfigurationList = AFD570660996B6A300BA26F7 /* Build configuration list for PBXNativeTarget "FadePlot" */; buildPhases = ( AFD5705C0996B6A300BA26F7 /* Resources */, AFD5705E0996B6A300BA26F7 /* Sources */, AFD570610996B6A300BA26F7 /* Frameworks */, AFD570650996B6A300BA26F7 /* Rez */, AFA3D91309C03D1E00E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AFD5705A0996B6A300BA26F7 /* PBXTargetDependency */, ); name = FadePlot; productName = FadePlot; productReference = AFD570690996B6A300BA26F7 /* FadePlot.saver */; productType = "com.apple.product-type.bundle"; }; AFD5706F0996B72700BA26F7 /* Mountain */ = { isa = PBXNativeTarget; buildConfigurationList = AFD5707C0996B72700BA26F7 /* Build configuration list for PBXNativeTarget "Mountain" */; buildPhases = ( AFD570720996B72700BA26F7 /* Resources */, AFD570740996B72700BA26F7 /* Sources */, AFD570770996B72700BA26F7 /* Frameworks */, AFD5707B0996B72700BA26F7 /* Rez */, AFA3D93309C03D5400E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AFD570700996B72700BA26F7 /* PBXTargetDependency */, ); name = Mountain; productName = Mountain; productReference = AFD5707F0996B72800BA26F7 /* Mountain.saver */; productType = "com.apple.product-type.bundle"; }; AFD570850996B80300BA26F7 /* Triangle */ = { isa = PBXNativeTarget; buildConfigurationList = AFD570920996B80300BA26F7 /* Build configuration list for PBXNativeTarget "Triangle" */; buildPhases = ( AFD570880996B80300BA26F7 /* Resources */, AFD5708A0996B80300BA26F7 /* Sources */, AFD5708D0996B80300BA26F7 /* Frameworks */, AFD570910996B80300BA26F7 /* Rez */, AFA3D94709C03D7E00E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AFD570860996B80300BA26F7 /* PBXTargetDependency */, ); name = Triangle; productName = Triangle; productReference = AFD570950996B80300BA26F7 /* Triangle.saver */; productType = "com.apple.product-type.bundle"; }; AFD5709B0996B88E00BA26F7 /* Worm */ = { isa = PBXNativeTarget; buildConfigurationList = AFD570A80996B88E00BA26F7 /* Build configuration list for PBXNativeTarget "Worm" */; buildPhases = ( AFD5709E0996B88E00BA26F7 /* Resources */, AFD570A00996B88E00BA26F7 /* Sources */, AFD570A30996B88E00BA26F7 /* Frameworks */, AFD570A70996B88E00BA26F7 /* Rez */, AFA3D94B09C03D8500E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AFD5709C0996B88E00BA26F7 /* PBXTargetDependency */, ); name = Worm; productName = Worm; productReference = AFD570AB0996B88E00BA26F7 /* Worm.saver */; productType = "com.apple.product-type.bundle"; }; AFD570B10996B93000BA26F7 /* Rotor */ = { isa = PBXNativeTarget; buildConfigurationList = AFD570BE0996B93000BA26F7 /* Build configuration list for PBXNativeTarget "Rotor" */; buildPhases = ( AFD570B40996B93000BA26F7 /* Resources */, AFD570B60996B93000BA26F7 /* Sources */, AFD570B90996B93000BA26F7 /* Frameworks */, AFD570BD0996B93000BA26F7 /* Rez */, AFA3D93B09C03D6200E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AFD570B20996B93000BA26F7 /* PBXTargetDependency */, ); name = Rotor; productName = Rotor; productReference = AFD570C10996B93000BA26F7 /* Rotor.saver */; productType = "com.apple.product-type.bundle"; }; AFD570C90996B9F800BA26F7 /* Ant */ = { isa = PBXNativeTarget; buildConfigurationList = AFD570D60996B9F800BA26F7 /* Build configuration list for PBXNativeTarget "Ant" */; buildPhases = ( AFD570CC0996B9F800BA26F7 /* Resources */, AFD570CE0996B9F800BA26F7 /* Sources */, AFD570D10996B9F800BA26F7 /* Frameworks */, AFD570D50996B9F800BA26F7 /* Rez */, AFA3D90109C03D0000E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AFD570CA0996B9F800BA26F7 /* PBXTargetDependency */, ); name = Ant; productName = Ant; productReference = AFD570D90996B9F800BA26F7 /* Ant.saver */; productType = "com.apple.product-type.bundle"; }; AFD570EA0996BBBF00BA26F7 /* Flow */ = { isa = PBXNativeTarget; buildConfigurationList = AFD570F70996BBBF00BA26F7 /* Build configuration list for PBXNativeTarget "Flow" */; buildPhases = ( AFD570ED0996BBBF00BA26F7 /* Resources */, AFD570EF0996BBBF00BA26F7 /* Sources */, AFD570F20996BBBF00BA26F7 /* Frameworks */, AFD570F60996BBBF00BA26F7 /* Rez */, AFA3D91909C03D2700E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AFD570EB0996BBBF00BA26F7 /* PBXTargetDependency */, ); name = Flow; productName = Flow; productReference = AFD570FA0996BBBF00BA26F7 /* Flow.saver */; productType = "com.apple.product-type.bundle"; }; AFD571130996BE9300BA26F7 /* Discrete */ = { isa = PBXNativeTarget; buildConfigurationList = AFD571200996BE9300BA26F7 /* Build configuration list for PBXNativeTarget "Discrete" */; buildPhases = ( AFD571160996BE9300BA26F7 /* Resources */, AFD571180996BE9300BA26F7 /* Sources */, AFD5711B0996BE9300BA26F7 /* Frameworks */, AFD5711F0996BE9300BA26F7 /* Rez */, AFA3D90D09C03D1400E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AFD571140996BE9300BA26F7 /* PBXTargetDependency */, ); name = Discrete; productName = Discrete; productReference = AFD571230996BE9300BA26F7 /* Discrete.saver */; productType = "com.apple.product-type.bundle"; }; AFD5712C0996BF2E00BA26F7 /* Apollonian */ = { isa = PBXNativeTarget; buildConfigurationList = AFD571390996BF2E00BA26F7 /* Build configuration list for PBXNativeTarget "Apollonian" */; buildPhases = ( AFD5712F0996BF2E00BA26F7 /* Resources */, AFD571310996BF2E00BA26F7 /* Sources */, AFD571340996BF2E00BA26F7 /* Frameworks */, AFD571380996BF2E00BA26F7 /* Rez */, AFA3D90309C03D0400E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AFD5712D0996BF2E00BA26F7 /* PBXTargetDependency */, ); name = Apollonian; productName = Apollonian; productReference = AFD5713C0996BF2E00BA26F7 /* Apollonian.saver */; productType = "com.apple.product-type.bundle"; }; AFD571430996C01700BA26F7 /* Euler2D */ = { isa = PBXNativeTarget; buildConfigurationList = AFD571500996C01700BA26F7 /* Build configuration list for PBXNativeTarget "Euler2D" */; buildPhases = ( AFD571460996C01700BA26F7 /* Resources */, AFD571480996C01700BA26F7 /* Sources */, AFD5714B0996C01700BA26F7 /* Frameworks */, AFD5714F0996C01700BA26F7 /* Rez */, AFA3D91109C03D1B00E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AFD571440996C01700BA26F7 /* PBXTargetDependency */, ); name = Euler2D; productName = Euler2D; productReference = AFD571530996C01700BA26F7 /* Euler2D.saver */; productType = "com.apple.product-type.bundle"; }; AFD571590996C0CE00BA26F7 /* Thornbird */ = { isa = PBXNativeTarget; buildConfigurationList = AFD571660996C0CE00BA26F7 /* Build configuration list for PBXNativeTarget "Thornbird" */; buildPhases = ( AFD5715C0996C0CE00BA26F7 /* Resources */, AFD5715E0996C0CE00BA26F7 /* Sources */, AFD571610996C0CE00BA26F7 /* Frameworks */, AFD571650996C0CE00BA26F7 /* Rez */, AFA3D94509C03D7A00E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AFD5715A0996C0CE00BA26F7 /* PBXTargetDependency */, ); name = Thornbird; productName = Thornbird; productReference = AFD571690996C0CE00BA26F7 /* Thornbird.saver */; productType = "com.apple.product-type.bundle"; }; AFD571B50996D9DC00BA26F7 /* Juggle */ = { isa = PBXNativeTarget; buildConfigurationList = AFD571C20996D9DC00BA26F7 /* Build configuration list for PBXNativeTarget "Juggle" */; buildPhases = ( AFD571B80996D9DC00BA26F7 /* Resources */, AFD571BA0996D9DC00BA26F7 /* Sources */, AFD571BD0996D9DC00BA26F7 /* Frameworks */, AFD571C10996D9DC00BA26F7 /* Rez */, AFA3D92509C03D3D00E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AFD571B60996D9DC00BA26F7 /* PBXTargetDependency */, ); name = Juggle; productName = Juggle; productReference = AFD571C50996D9DC00BA26F7 /* Juggle.saver */; productType = "com.apple.product-type.bundle"; }; AFD572220996E4A300BA26F7 /* Swirl */ = { isa = PBXNativeTarget; buildConfigurationList = AFD5722F0996E4A300BA26F7 /* Build configuration list for PBXNativeTarget "Swirl" */; buildPhases = ( AFD572250996E4A300BA26F7 /* Resources */, AFD572270996E4A300BA26F7 /* Sources */, AFD5722A0996E4A300BA26F7 /* Frameworks */, AFD5722E0996E4A300BA26F7 /* Rez */, AFA3D94309C03D7600E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AFD572230996E4A300BA26F7 /* PBXTargetDependency */, ); name = Swirl; productName = Swirl; productReference = AFD572320996E4A300BA26F7 /* Swirl.saver */; productType = "com.apple.product-type.bundle"; }; AFD5726D0996EE8500BA26F7 /* Polyominoes */ = { isa = PBXNativeTarget; buildConfigurationList = AFD5727A0996EE8500BA26F7 /* Build configuration list for PBXNativeTarget "Polyominoes" */; buildPhases = ( AFD572700996EE8500BA26F7 /* Resources */, AFD572720996EE8500BA26F7 /* Sources */, AFD572750996EE8500BA26F7 /* Frameworks */, AFD572790996EE8500BA26F7 /* Rez */, AFA3D93909C03D5E00E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AFD5726E0996EE8500BA26F7 /* PBXTargetDependency */, ); name = Polyominoes; productName = Polyominoes; productReference = AFD5727D0996EE8500BA26F7 /* Polyominoes.saver */; productType = "com.apple.product-type.bundle"; }; AFD572A50996F99600BA26F7 /* Bouboule */ = { isa = PBXNativeTarget; buildConfigurationList = AFD572B20996F99600BA26F7 /* Build configuration list for PBXNativeTarget "Bouboule" */; buildPhases = ( AFD572A80996F99600BA26F7 /* Resources */, AFD572AA0996F99600BA26F7 /* Sources */, AFD572AD0996F99600BA26F7 /* Frameworks */, AFD572B10996F99600BA26F7 /* Rez */, AFA3D90509C03D0700E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AFD572A60996F99600BA26F7 /* PBXTargetDependency */, ); name = Bouboule; productName = Bouboule; productReference = AFD572B50996F99600BA26F7 /* Bouboule.saver */; productType = "com.apple.product-type.bundle"; }; AFD572C20996FC0F00BA26F7 /* Crystal */ = { isa = PBXNativeTarget; buildConfigurationList = AFD572CF0996FC0F00BA26F7 /* Build configuration list for PBXNativeTarget "Crystal" */; buildPhases = ( AFD572C50996FC0F00BA26F7 /* Resources */, AFD572C70996FC0F00BA26F7 /* Sources */, AFD572CA0996FC0F00BA26F7 /* Frameworks */, AFD572CE0996FC0F00BA26F7 /* Rez */, AFA3D90909C03D0E00E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AFD572C30996FC0F00BA26F7 /* PBXTargetDependency */, ); name = Crystal; productName = Crystal; productReference = AFD572D20996FC0F00BA26F7 /* Crystal.saver */; productType = "com.apple.product-type.bundle"; }; AFD572F9099701C000BA26F7 /* Julia */ = { isa = PBXNativeTarget; buildConfigurationList = AFD57306099701C000BA26F7 /* Build configuration list for PBXNativeTarget "Julia" */; buildPhases = ( AFD572FC099701C000BA26F7 /* Resources */, AFD572FE099701C000BA26F7 /* Sources */, AFD57301099701C000BA26F7 /* Frameworks */, AFD57305099701C000BA26F7 /* Rez */, AFA3D92709C03D4000E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AFD572FA099701C000BA26F7 /* PBXTargetDependency */, ); name = Julia; productName = Julia; productReference = AFD57309099701C000BA26F7 /* Julia.saver */; productType = "com.apple.product-type.bundle"; }; AFD5735D0997411200BA26F7 /* Strange */ = { isa = PBXNativeTarget; buildConfigurationList = AFD5736A0997411200BA26F7 /* Build configuration list for PBXNativeTarget "Strange" */; buildPhases = ( AFD573600997411200BA26F7 /* Resources */, AFD573620997411200BA26F7 /* Sources */, AFD573650997411200BA26F7 /* Frameworks */, AFD573690997411200BA26F7 /* Rez */, AFA3D94109C03D7200E4CFCA /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AFD5735E0997411200BA26F7 /* PBXTargetDependency */, ); name = Strange; productName = Strange; productReference = AFD5736D0997411200BA26F7 /* Strange.saver */; productType = "com.apple.product-type.bundle"; }; AFDA658E178A52B70070D24B /* Unknown Pleasures */ = { isa = PBXNativeTarget; buildConfigurationList = AFDA659E178A52B70070D24B /* Build configuration list for PBXNativeTarget "Unknown Pleasures" */; buildPhases = ( AFDA6591178A52B70070D24B /* Resources */, AFDA6593178A52B70070D24B /* Sources */, AFDA6596178A52B70070D24B /* Frameworks */, AFDA659C178A52B70070D24B /* Rez */, AFDA659D178A52B70070D24B /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AFDA658F178A52B70070D24B /* PBXTargetDependency */, ); name = "Unknown Pleasures"; productName = DangerBall; productReference = AFDA65A1178A52B70070D24B /* UnknownPleasures.saver */; productType = "com.apple.product-type.bundle"; }; AFE2A4560E2E904600ADB298 /* SkyTentacles */ = { isa = PBXNativeTarget; buildConfigurationList = AFE2A4670E2E904600ADB298 /* Build configuration list for PBXNativeTarget "SkyTentacles" */; buildPhases = ( AFE2A4590E2E904600ADB298 /* Resources */, AFE2A45B0E2E904600ADB298 /* Sources */, AFE2A45E0E2E904600ADB298 /* Frameworks */, AFE2A4650E2E904600ADB298 /* Rez */, AFE2A4660E2E904600ADB298 /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AFE2A4570E2E904600ADB298 /* PBXTargetDependency */, ); name = SkyTentacles; productName = SkyTentacles; productReference = AFE2A46A0E2E904600ADB298 /* SkyTentacles.saver */; productType = "com.apple.product-type.bundle"; }; AFE30BE80E52B14700CCF4A5 /* Sonar */ = { isa = PBXNativeTarget; buildConfigurationList = AFE30BF90E52B14700CCF4A5 /* Build configuration list for PBXNativeTarget "Sonar" */; buildPhases = ( AF7E08021592661100D81407 /* ICMP Sanity Check */, AFE30BEB0E52B14700CCF4A5 /* Resources */, AFE30BED0E52B14700CCF4A5 /* Sources */, AFE30BF00E52B14700CCF4A5 /* Frameworks */, AFE30BF70E52B14700CCF4A5 /* Rez */, AFE30BF80E52B14700CCF4A5 /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AFE30BE90E52B14700CCF4A5 /* PBXTargetDependency */, ); name = Sonar; productName = Sonar; productReference = AFE30BFC0E52B14700CCF4A5 /* Sonar.saver */; productType = "com.apple.product-type.bundle"; }; AFE6A1820CDD7B2E002805BF /* MoebiusGears */ = { isa = PBXNativeTarget; buildConfigurationList = AFE6A1940CDD7B2E002805BF /* Build configuration list for PBXNativeTarget "MoebiusGears" */; buildPhases = ( AFE6A1850CDD7B2E002805BF /* Resources */, AFE6A1870CDD7B2E002805BF /* Sources */, AFE6A18B0CDD7B2E002805BF /* Frameworks */, AFE6A1920CDD7B2E002805BF /* Rez */, AFE6A1930CDD7B2E002805BF /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AFE6A1830CDD7B2E002805BF /* PBXTargetDependency */, ); name = MoebiusGears; productName = MoebiusGears; productReference = AFE6A1970CDD7B2E002805BF /* MoebiusGears.saver */; productType = "com.apple.product-type.bundle"; }; AFE6A41B0CDD7FAA002805BF /* Abstractile */ = { isa = PBXNativeTarget; buildConfigurationList = AFE6A42A0CDD7FAA002805BF /* Build configuration list for PBXNativeTarget "Abstractile" */; buildPhases = ( AFE6A41E0CDD7FAA002805BF /* Resources */, AFE6A4210CDD7FAA002805BF /* Sources */, AFE6A4240CDD7FAA002805BF /* Frameworks */, AFE6A4280CDD7FAA002805BF /* Rez */, AFE6A4290CDD7FAA002805BF /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AFE6A41C0CDD7FAA002805BF /* PBXTargetDependency */, ); name = Abstractile; productName = Abstractile; productReference = AFE6A42D0CDD7FAA002805BF /* Abstractile.saver */; productType = "com.apple.product-type.bundle"; }; AFEC23CD1CB6EAE100DE138F /* DymaxionMap */ = { isa = PBXNativeTarget; buildConfigurationList = AFEC23DF1CB6EAE100DE138F /* Build configuration list for PBXNativeTarget "DymaxionMap" */; buildPhases = ( AFEC23D01CB6EAE100DE138F /* Resources */, AFEC23D21CB6EAE100DE138F /* Sources */, AFEC23D51CB6EAE100DE138F /* Frameworks */, AFEC23DD1CB6EAE100DE138F /* Rez */, AFEC23DE1CB6EAE100DE138F /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AFEC23CE1CB6EAE100DE138F /* PBXTargetDependency */, ); name = DymaxionMap; productName = DangerBall; productReference = AFEC23E21CB6EAE100DE138F /* DymaxionMap.saver */; productType = "com.apple.product-type.bundle"; }; AFEE104D1D13406000AAC8F7 /* CubeTwist */ = { isa = PBXNativeTarget; buildConfigurationList = AFEE105F1D13406000AAC8F7 /* Build configuration list for PBXNativeTarget "CubeTwist" */; buildPhases = ( AFEE10501D13406000AAC8F7 /* Resources */, AFEE10521D13406000AAC8F7 /* Sources */, AFEE10551D13406000AAC8F7 /* Frameworks */, AFEE105D1D13406000AAC8F7 /* Rez */, AFEE105E1D13406000AAC8F7 /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AFEE104E1D13406000AAC8F7 /* PBXTargetDependency */, ); name = CubeTwist; productName = DangerBall; productReference = AFEE10621D13406000AAC8F7 /* CubeTwist.saver */; productType = "com.apple.product-type.bundle"; }; AFEE106C1D15EB0700AAC8F7 /* CubeStack */ = { isa = PBXNativeTarget; buildConfigurationList = AFEE107E1D15EB0800AAC8F7 /* Build configuration list for PBXNativeTarget "CubeStack" */; buildPhases = ( AFEE106F1D15EB0800AAC8F7 /* Resources */, AFEE10711D15EB0800AAC8F7 /* Sources */, AFEE10741D15EB0800AAC8F7 /* Frameworks */, AFEE107C1D15EB0800AAC8F7 /* Rez */, AFEE107D1D15EB0800AAC8F7 /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AFEE106D1D15EB0700AAC8F7 /* PBXTargetDependency */, ); name = CubeStack; productName = DangerBall; productReference = AFEE10811D15EB0800AAC8F7 /* CubeStack.saver */; productType = "com.apple.product-type.bundle"; }; AFEE108B1D17E20B00AAC8F7 /* Splodesic */ = { isa = PBXNativeTarget; buildConfigurationList = AFEE109D1D17E20B00AAC8F7 /* Build configuration list for PBXNativeTarget "Splodesic" */; buildPhases = ( AFEE108E1D17E20B00AAC8F7 /* Resources */, AFEE10901D17E20B00AAC8F7 /* Sources */, AFEE10931D17E20B00AAC8F7 /* Frameworks */, AFEE109B1D17E20B00AAC8F7 /* Rez */, AFEE109C1D17E20B00AAC8F7 /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AFEE108C1D17E20B00AAC8F7 /* PBXTargetDependency */, ); name = Splodesic; productName = DangerBall; productReference = AFEE10A01D17E20B00AAC8F7 /* Splodesic.saver */; productType = "com.apple.product-type.bundle"; }; AFF2867F17860E830050A578 /* QuasiCrystal */ = { isa = PBXNativeTarget; buildConfigurationList = AFF2868F17860E830050A578 /* Build configuration list for PBXNativeTarget "QuasiCrystal" */; buildPhases = ( AFF2868217860E830050A578 /* Resources */, AFF2868417860E830050A578 /* Sources */, AFF2868717860E830050A578 /* Frameworks */, AFF2868D17860E830050A578 /* Rez */, AFF2868E17860E830050A578 /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AFF2868017860E830050A578 /* PBXTargetDependency */, ); name = QuasiCrystal; productName = DangerBall; productReference = AFF2869217860E830050A578 /* QuasiCrystal.saver */; productType = "com.apple.product-type.bundle"; }; AFF3C9E817CCAC440028F240 /* Geodesic */ = { isa = PBXNativeTarget; buildConfigurationList = AFF3C9F817CCAC440028F240 /* Build configuration list for PBXNativeTarget "Geodesic" */; buildPhases = ( AFF3C9EB17CCAC440028F240 /* Resources */, AFF3C9ED17CCAC440028F240 /* Sources */, AFF3C9F017CCAC440028F240 /* Frameworks */, AFF3C9F617CCAC440028F240 /* Rez */, AFF3C9F717CCAC440028F240 /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AFF3C9E917CCAC440028F240 /* PBXTargetDependency */, ); name = Geodesic; productName = DangerBall; productReference = AFF3C9FB17CCAC440028F240 /* Geodesic.saver */; productType = "com.apple.product-type.bundle"; }; AFF463360C4403E400EE6509 /* CWaves */ = { isa = PBXNativeTarget; buildConfigurationList = AFF463440C4403E400EE6509 /* Build configuration list for PBXNativeTarget "CWaves" */; buildPhases = ( AFF463390C4403E400EE6509 /* Resources */, AFF4633B0C4403E400EE6509 /* Sources */, AFF4633E0C4403E400EE6509 /* Frameworks */, AFF463420C4403E400EE6509 /* Rez */, AFF463430C4403E400EE6509 /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AFF463370C4403E400EE6509 /* PBXTargetDependency */, ); name = CWaves; productName = CWaves; productReference = AFF463470C4403E400EE6509 /* CWaves.saver */; productType = "com.apple.product-type.bundle"; }; AFF463580C440AEF00EE6509 /* GLCells */ = { isa = PBXNativeTarget; buildConfigurationList = AFF463690C440AEF00EE6509 /* Build configuration list for PBXNativeTarget "GLCells" */; buildPhases = ( AFF4635B0C440AEF00EE6509 /* Resources */, AFF4635D0C440AEF00EE6509 /* Sources */, AFF463600C440AEF00EE6509 /* Frameworks */, AFF463670C440AEF00EE6509 /* Rez */, AFF463680C440AEF00EE6509 /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AFF463590C440AEF00EE6509 /* PBXTargetDependency */, ); name = GLCells; productName = GLCells; productReference = AFF4636C0C440AEF00EE6509 /* GLCells.saver */; productType = "com.apple.product-type.bundle"; }; AFFAB31519158CE40020F021 /* ProjectivePlane */ = { isa = PBXNativeTarget; buildConfigurationList = AFFAB32619158CE40020F021 /* Build configuration list for PBXNativeTarget "ProjectivePlane" */; buildPhases = ( AFFAB31819158CE40020F021 /* Resources */, AFFAB31A19158CE40020F021 /* Sources */, AFFAB31D19158CE40020F021 /* Frameworks */, AFFAB32419158CE40020F021 /* Rez */, AFFAB32519158CE40020F021 /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( AFFAB31619158CE40020F021 /* PBXTargetDependency */, ); name = ProjectivePlane; productName = DangerBall; productReference = AFFAB32919158CE40020F021 /* ProjectivePlane.saver */; productType = "com.apple.product-type.bundle"; }; CE3D01511B76F4C100993C75 /* TestX11 */ = { isa = PBXNativeTarget; buildConfigurationList = CE3D01631B76F4C100993C75 /* Build configuration list for PBXNativeTarget "TestX11" */; buildPhases = ( CE3D01541B76F4C100993C75 /* Resources */, CE3D01561B76F4C100993C75 /* Sources */, CE3D01591B76F4C100993C75 /* Frameworks */, CE3D01611B76F4C100993C75 /* Rez */, CE3D01621B76F4C100993C75 /* Run Update Info Plist */, ); buildRules = ( ); dependencies = ( CE3D01521B76F4C100993C75 /* PBXTargetDependency */, ); name = TestX11; productName = Attraction; productReference = CE3D01661B76F4C100993C75 /* TestX11.saver */; productType = "com.apple.product-type.bundle"; }; /* End PBXNativeTarget section */ /* Begin PBXProject section */ 29B97313FDCFA39411CA2CEA /* Project object */ = { isa = PBXProject; attributes = { LastUpgradeCheck = 0800; TargetAttributes = { AF08398F09930B6B00277BE9 = { DevelopmentTeam = 4627ATJELP; }; AF083A32099311D700277BE9 = { DevelopmentTeam = 4627ATJELP; }; AF0DC7AB0C4C73F600D76972 = { DevelopmentTeam = 4627ATJELP; }; AF0DCA420C4CBB0D00D76972 = { DevelopmentTeam = 4627ATJELP; }; AF137D410F075C9B004DE3B2 = { DevelopmentTeam = 4627ATJELP; }; AF1A17610D6D6EE3008AF328 = { DevelopmentTeam = 4627ATJELP; }; AF1AD9E118500F9F00932759 = { DevelopmentTeam = 4627ATJELP; }; AF1B0FA71D7AB4740011DBE4 = { DevelopmentTeam = 4627ATJELP; }; AF32D9E00F3AD0B40080F535 = { DevelopmentTeam = 4627ATJELP; }; AF3581BF1431D47B00E09C51 = { DevelopmentTeam = 4627ATJELP; }; AF3581FB143330F900E09C51 = { DevelopmentTeam = 4627ATJELP; }; AF35E88A0E63823600691F2F = { DevelopmentTeam = 4627ATJELP; }; AF39381A1D0FBD6A00205406 = { DevelopmentTeam = 4627ATJELP; }; AF39E282198A11F60064A58D = { DevelopmentTeam = 4627ATJELP; }; AF3C71450D624BF50030CC0D = { DevelopmentTeam = 4627ATJELP; }; AF46E9CF1CBBA2B300240FBC = { DevelopmentTeam = 4627ATJELP; }; AF476FB5099D154F001F091E = { DevelopmentTeam = 4627ATJELP; }; AF476FDA099D1686001F091E = { DevelopmentTeam = 4627ATJELP; }; AF47704C099D4385001F091E = { DevelopmentTeam = 4627ATJELP; }; AF477169099D4786001F091E = { DevelopmentTeam = 4627ATJELP; }; AF47717F099D4803001F091E = { DevelopmentTeam = 4627ATJELP; }; AF4771A7099D4949001F091E = { DevelopmentTeam = 4627ATJELP; }; AF4771DB099D4D9A001F091E = { DevelopmentTeam = 4627ATJELP; }; AF4771F2099D4E63001F091E = { DevelopmentTeam = 4627ATJELP; }; AF477208099D4EE8001F091E = { DevelopmentTeam = 4627ATJELP; }; AF47721E099D4F67001F091E = { DevelopmentTeam = 4627ATJELP; }; AF477253099D5717001F091E = { DevelopmentTeam = 4627ATJELP; }; AF47726B099D57B9001F091E = { DevelopmentTeam = 4627ATJELP; }; AF477283099D5926001F091E = { DevelopmentTeam = 4627ATJELP; }; AF477382099D65A1001F091E = { DevelopmentTeam = 4627ATJELP; }; AF47739A099D6648001F091E = { DevelopmentTeam = 4627ATJELP; }; AF4773C1099D67B9001F091E = { DevelopmentTeam = 4627ATJELP; }; AF477401099D69E7001F091E = { DevelopmentTeam = 4627ATJELP; }; AF477426099D7C70001F091E = { DevelopmentTeam = 4627ATJELP; }; AF477442099D7D33001F091E = { DevelopmentTeam = 4627ATJELP; }; AF477483099D89E4001F091E = { DevelopmentTeam = 4627ATJELP; }; AF477499099D8A74001F091E = { DevelopmentTeam = 4627ATJELP; }; AF4774B4099D8B5F001F091E = { DevelopmentTeam = 4627ATJELP; }; AF4774CE099D8BFF001F091E = { DevelopmentTeam = 4627ATJELP; }; AF47755D099D9A1A001F091E = { DevelopmentTeam = 4627ATJELP; }; AF477583099D9C28001F091E = { DevelopmentTeam = 4627ATJELP; }; AF47759F099D9CF7001F091E = { DevelopmentTeam = 4627ATJELP; }; AF4775D8099D9F69001F091E = { DevelopmentTeam = 4627ATJELP; }; AF4775F2099DA030001F091E = { DevelopmentTeam = 4627ATJELP; }; AF477613099DA26C001F091E = { DevelopmentTeam = 4627ATJELP; }; AF477644099DA6D0001F091E = { DevelopmentTeam = 4627ATJELP; }; AF47765A099DA78E001F091E = { DevelopmentTeam = 4627ATJELP; }; AF477670099DA849001F091E = { DevelopmentTeam = 4627ATJELP; }; AF47768F099DAA6F001F091E = { DevelopmentTeam = 4627ATJELP; }; AF4776AA099DABDD001F091E = { DevelopmentTeam = 4627ATJELP; }; AF4776C0099DAC8A001F091E = { DevelopmentTeam = 4627ATJELP; }; AF4776DB099DADDF001F091E = { DevelopmentTeam = 4627ATJELP; }; AF4776F1099DAE7A001F091E = { DevelopmentTeam = 4627ATJELP; }; AF47770D099DAF9F001F091E = { DevelopmentTeam = 4627ATJELP; }; AF477723099DB044001F091E = { DevelopmentTeam = 4627ATJELP; }; AF477752099DB61E001F091E = { DevelopmentTeam = 4627ATJELP; }; AF477774099DB965001F091E = { DevelopmentTeam = 4627ATJELP; }; AF477790099DBA90001F091E = { DevelopmentTeam = 4627ATJELP; }; AF4777D1099DC183001F091E = { DevelopmentTeam = 4627ATJELP; }; AF4778AB099DDB79001F091E = { DevelopmentTeam = 4627ATJELP; }; AF4778C7099DDCAE001F091E = { DevelopmentTeam = 4627ATJELP; }; AF4778E8099DDDC8001F091E = { DevelopmentTeam = 4627ATJELP; }; AF477909099DE379001F091E = { DevelopmentTeam = 4627ATJELP; }; AF47792A099DE4C7001F091E = { DevelopmentTeam = 4627ATJELP; }; AF4808C0098C3B6C00FB32B8 = { DevelopmentTeam = 4627ATJELP; }; AF480AAF098C669800FB32B8 = { DevelopmentTeam = 4627ATJELP; }; AF480C49098E301400FB32B8 = { DevelopmentTeam = 4627ATJELP; }; AF480D58098EED3D00FB32B8 = { DevelopmentTeam = 4627ATJELP; }; AF480D59098EED5100FB32B8 = { DevelopmentTeam = 4627ATJELP; }; AF480D5A098EED5E00FB32B8 = { DevelopmentTeam = 4627ATJELP; }; AF480D72098EEDDE00FB32B8 = { DevelopmentTeam = 4627ATJELP; }; AF4810EB09909FBA00FB32B8 = { DevelopmentTeam = 4627ATJELP; }; AF4812500990CE2700FB32B8 = { DevelopmentTeam = 4627ATJELP; }; AF4812B30990D3D900FB32B8 = { DevelopmentTeam = 4627ATJELP; }; AF48DEEF0A0C25E000F94CF9 = { DevelopmentTeam = 4627ATJELP; }; AF4A3449102A593600A81B2A = { DevelopmentTeam = 4627ATJELP; }; AF4FD6E60CE7A486005EE58E = { DevelopmentTeam = 4627ATJELP; }; AF4FF4930D52CA0800666F98 = { DevelopmentTeam = 4627ATJELP; }; AF4FF4BA0D52CBDE00666F98 = { DevelopmentTeam = 4627ATJELP; }; AF5C9AF91A0CCE6E00B0147A = { DevelopmentTeam = 4627ATJELP; }; AF63A7F11AB4EDDB00593C75 = { DevelopmentTeam = 4627ATJELP; }; AF63F2471C3465BE0033E133 = { DevelopmentTeam = 4627ATJELP; }; AF63F4501C34682A0033E133 = { DevelopmentTeam = 4627ATJELP; }; AF63F4781C3469FC0033E133 = { DevelopmentTeam = 4627ATJELP; }; AF6423F2099FF9C2000F4CD4 = { DevelopmentTeam = 4627ATJELP; }; AF6425CC09A18855000F4CD4 = { DevelopmentTeam = 4627ATJELP; }; AF6425EC09A189EC000F4CD4 = { DevelopmentTeam = 4627ATJELP; }; AF64260F09A18D6C000F4CD4 = { DevelopmentTeam = 4627ATJELP; }; AF64262C09A18F54000F4CD4 = { DevelopmentTeam = 4627ATJELP; }; AF64264F09A19229000F4CD4 = { DevelopmentTeam = 4627ATJELP; }; AF64267B09A194B0000F4CD4 = { DevelopmentTeam = 4627ATJELP; }; AF64277109A1D37A000F4CD4 = { DevelopmentTeam = 4627ATJELP; }; AF6427A809A2DE36000F4CD4 = { DevelopmentTeam = 4627ATJELP; }; AF68A47E19196CF800D41CD1 = { DevelopmentTeam = 4627ATJELP; }; AF73FF221A09877F00E485E9 = { DevelopmentTeam = 4627ATJELP; }; AF7510FF1782B5B900380EA1 = { DevelopmentTeam = 4627ATJELP; }; AF7776E409B63ABF00EA3033 = { DevelopmentTeam = 4627ATJELP; }; AF77771A09B6416100EA3033 = { DevelopmentTeam = 4627ATJELP; }; AF77773E09B6446500EA3033 = { DevelopmentTeam = 4627ATJELP; }; AF77777409B6497800EA3033 = { DevelopmentTeam = 4627ATJELP; }; AF77778E09B64A5200EA3033 = { DevelopmentTeam = 4627ATJELP; }; AF7777A809B64B2600EA3033 = { DevelopmentTeam = 4627ATJELP; }; AF7777D009B64C6B00EA3033 = { DevelopmentTeam = 4627ATJELP; }; AF7777EA09B64E3100EA3033 = { DevelopmentTeam = 4627ATJELP; }; AF77781009B6504400EA3033 = { DevelopmentTeam = 4627ATJELP; }; AF77784409B6528100EA3033 = { DevelopmentTeam = 4627ATJELP; }; AF77786109B6536000EA3033 = { DevelopmentTeam = 4627ATJELP; }; AF77787F09B6563500EA3033 = { DevelopmentTeam = 4627ATJELP; }; AF7778A509B659C800EA3033 = { DevelopmentTeam = 4627ATJELP; }; AF78D175142DD8F3002AAF77 = { DevelopmentTeam = 4627ATJELP; }; AF794F64099748450059A8B0 = { DevelopmentTeam = 4627ATJELP; }; AF794F8E09974A320059A8B0 = { DevelopmentTeam = 4627ATJELP; }; AF794FCD09974FA60059A8B0 = { DevelopmentTeam = 4627ATJELP; }; AF7ACFC019FF0A9200BD752B = { DevelopmentTeam = 4627ATJELP; }; AF918977158FC00A002B5D1E = { DevelopmentTeam = 4627ATJELP; }; AF97572D099C317000B05160 = { DevelopmentTeam = 4627ATJELP; }; AF975775099C374A00B05160 = { DevelopmentTeam = 4627ATJELP; }; AF9757C2099C3E6300B05160 = { DevelopmentTeam = 4627ATJELP; }; AF975808099C41D500B05160 = { DevelopmentTeam = 4627ATJELP; }; AF975865099C475900B05160 = { DevelopmentTeam = 4627ATJELP; }; AF975A36099C681F00B05160 = { DevelopmentTeam = 4627ATJELP; }; AF975A6C099C6AB200B05160 = { DevelopmentTeam = 4627ATJELP; }; AF975A86099C6BC300B05160 = { DevelopmentTeam = 4627ATJELP; }; AF975AD7099C6EB100B05160 = { DevelopmentTeam = 4627ATJELP; }; AF975AFC099C6FE400B05160 = { DevelopmentTeam = 4627ATJELP; }; AF975C12099C8C1500B05160 = { DevelopmentTeam = 4627ATJELP; }; AF975C3D099C8DCF00B05160 = { DevelopmentTeam = 4627ATJELP; }; AF975C5D099C8F3F00B05160 = { DevelopmentTeam = 4627ATJELP; }; AF975D52099CA0F000B05160 = { DevelopmentTeam = 4627ATJELP; }; AF976FBB0989CAA2001F8B92 = { DevelopmentTeam = 4627ATJELP; }; AF9770290989D1E6001F8B92 = { DevelopmentTeam = 4627ATJELP; }; AF9770660989D2F6001F8B92 = { DevelopmentTeam = 4627ATJELP; }; AF9771D60989DC4A001F8B92 = { DevelopmentTeam = 4627ATJELP; }; AF998EDA0A083DB30051049D = { DevelopmentTeam = 4627ATJELP; }; AF9D466609B5109C006E59CF = { DevelopmentTeam = 4627ATJELP; }; AF9D474409B5300A006E59CF = { DevelopmentTeam = 4627ATJELP; }; AF9D475F09B53166006E59CF = { DevelopmentTeam = 4627ATJELP; }; AF9D48DB09B53322006E59CF = { DevelopmentTeam = 4627ATJELP; }; AF9D48F409B535DA006E59CF = { DevelopmentTeam = 4627ATJELP; }; AF9D492B09B53CBA006E59CF = { DevelopmentTeam = 4627ATJELP; }; AF9D495409B53FC9006E59CF = { DevelopmentTeam = 4627ATJELP; }; AF9D496C09B5411D006E59CF = { DevelopmentTeam = 4627ATJELP; }; AF9D499709B544C2006E59CF = { DevelopmentTeam = 4627ATJELP; }; AF9D4C6909B59F27006E59CF = { DevelopmentTeam = 4627ATJELP; }; AF9D4CE709B5AA8E006E59CF = { DevelopmentTeam = 4627ATJELP; }; AF9D4D7E09B5B2DC006E59CF = { DevelopmentTeam = 4627ATJELP; }; AF9D4DAF09B5B71E006E59CF = { DevelopmentTeam = 4627ATJELP; }; AF9D4DEC09B5BB19006E59CF = { DevelopmentTeam = 4627ATJELP; }; AF9E7EBE190F4C1B00A8B01F = { DevelopmentTeam = 4627ATJELP; }; AFA2118C1CD59DAF00C0D2A1 = { DevelopmentTeam = 4627ATJELP; }; AFA3392E0B058505002B0E7D = { DevelopmentTeam = 4627ATJELP; }; AFA33BC60B058740002B0E7D = { DevelopmentTeam = 4627ATJELP; }; AFA33C020B058E17002B0E7D = { DevelopmentTeam = 4627ATJELP; }; AFA55946099330B000F3E977 = { DevelopmentTeam = 4627ATJELP; }; AFA5596D0993317900F3E977 = { DevelopmentTeam = 4627ATJELP; }; AFA559920993322100F3E977 = { DevelopmentTeam = 4627ATJELP; }; AFA559B50993328000F3E977 = { DevelopmentTeam = 4627ATJELP; }; AFA559CF0993330600F3E977 = { DevelopmentTeam = 4627ATJELP; }; AFA55A030993340300F3E977 = { DevelopmentTeam = 4627ATJELP; }; AFA55A20099334A000F3E977 = { DevelopmentTeam = 4627ATJELP; }; AFA55A790993364300F3E977 = { DevelopmentTeam = 4627ATJELP; }; AFA55ACF09933CEF00F3E977 = { DevelopmentTeam = 4627ATJELP; }; AFA55B0909933E0500F3E977 = { DevelopmentTeam = 4627ATJELP; }; AFA55B2509933E8D00F3E977 = { DevelopmentTeam = 4627ATJELP; }; AFA55B7909933F7200F3E977 = { DevelopmentTeam = 4627ATJELP; }; AFA55B9109933FDA00F3E977 = { DevelopmentTeam = 4627ATJELP; }; AFA55BAB099340CE00F3E977 = { DevelopmentTeam = 4627ATJELP; }; AFA55BE40993429100F3E977 = { DevelopmentTeam = 4627ATJELP; }; AFA55C0E0993431300F3E977 = { DevelopmentTeam = 4627ATJELP; }; AFA55C77099349A600F3E977 = { DevelopmentTeam = 4627ATJELP; }; AFA55CA909934BB200F3E977 = { DevelopmentTeam = 4627ATJELP; }; AFA55CCC09934CE400F3E977 = { DevelopmentTeam = 4627ATJELP; }; AFA55D3C0993565300F3E977 = { DevelopmentTeam = 4627ATJELP; }; AFA55D620993584B00F3E977 = { DevelopmentTeam = 4627ATJELP; }; AFA55D7F099358C400F3E977 = { DevelopmentTeam = 4627ATJELP; }; AFA55DC809935D7000F3E977 = { DevelopmentTeam = 4627ATJELP; }; AFA55DF009935E4900F3E977 = { DevelopmentTeam = 4627ATJELP; }; AFA55E0D09935EDC00F3E977 = { DevelopmentTeam = 4627ATJELP; }; AFA55E2F09935F8E00F3E977 = { DevelopmentTeam = 4627ATJELP; }; AFA55E4E09935FF900F3E977 = { DevelopmentTeam = 4627ATJELP; }; AFA55EC7099360E300F3E977 = { DevelopmentTeam = 4627ATJELP; }; AFA55F06099361B700F3E977 = { DevelopmentTeam = 4627ATJELP; }; AFA55F2A0993622F00F3E977 = { DevelopmentTeam = 4627ATJELP; }; AFA55F420993629000F3E977 = { DevelopmentTeam = 4627ATJELP; }; AFA55F720993643600F3E977 = { DevelopmentTeam = 4627ATJELP; }; AFA55FD309936BFA00F3E977 = { DevelopmentTeam = 4627ATJELP; }; AFA55FF909936C6D00F3E977 = { DevelopmentTeam = 4627ATJELP; }; AFA5601409936CC800F3E977 = { DevelopmentTeam = 4627ATJELP; }; AFA5603209936D5100F3E977 = { DevelopmentTeam = 4627ATJELP; }; AFA5604A09936E2100F3E977 = { DevelopmentTeam = 4627ATJELP; }; AFA5606209936F3800F3E977 = { DevelopmentTeam = 4627ATJELP; }; AFA560AE0993718D00F3E977 = { DevelopmentTeam = 4627ATJELP; }; AFA560FD0993781600F3E977 = { DevelopmentTeam = 4627ATJELP; }; AFA56119099378CB00F3E977 = { DevelopmentTeam = 4627ATJELP; }; AFA5615609937C0D00F3E977 = { DevelopmentTeam = 4627ATJELP; }; AFA5617B09937CF100F3E977 = { DevelopmentTeam = 4627ATJELP; }; AFA5619D09937D7E00F3E977 = { DevelopmentTeam = 4627ATJELP; }; AFA562060993849F00F3E977 = { DevelopmentTeam = 4627ATJELP; }; AFA5621F0993852500F3E977 = { DevelopmentTeam = 4627ATJELP; }; AFA562BF099392C600F3E977 = { DevelopmentTeam = 4627ATJELP; }; AFA562DA099393C900F3E977 = { DevelopmentTeam = 4627ATJELP; }; AFA562F20993943B00F3E977 = { DevelopmentTeam = 4627ATJELP; }; AFA563130993951000F3E977 = { DevelopmentTeam = 4627ATJELP; }; AFA56331099395ED00F3E977 = { DevelopmentTeam = 4627ATJELP; }; AFA56351099396C000F3E977 = { DevelopmentTeam = 4627ATJELP; }; AFA56379099397B300F3E977 = { DevelopmentTeam = 4627ATJELP; }; AFA563A4099398BB00F3E977 = { DevelopmentTeam = 4627ATJELP; }; AFACE8731CC83458008B24CD = { DevelopmentTeam = 4627ATJELP; }; AFB591A7178B812C00EA4005 = { DevelopmentTeam = 4627ATJELP; }; AFBFE74B178642DC00432B21 = { DevelopmentTeam = 4627ATJELP; SystemCapabilities = { com.apple.Sandbox = { enabled = 0; }; }; }; AFBFE767178647FE00432B21 = { DevelopmentTeam = 4627ATJELP; }; AFC0E8AB1CDC601A008CAFAC = { DevelopmentTeam = 4627ATJELP; }; AFCF833B1AF5B515008BB7E1 = { DevelopmentTeam = 4627ATJELP; }; AFD51B1B0F063B4A00471C02 = { DevelopmentTeam = 4627ATJELP; }; AFD56DF10996A03800BA26F7 = { DevelopmentTeam = 4627ATJELP; }; AFD56EAE0996A72600BA26F7 = { DevelopmentTeam = 4627ATJELP; }; AFD56EDA0996A95700BA26F7 = { DevelopmentTeam = 4627ATJELP; }; AFD56F0B0996AAFA00BA26F7 = { DevelopmentTeam = 4627ATJELP; }; AFD56F230996AB8A00BA26F7 = { DevelopmentTeam = 4627ATJELP; }; AFD56F4F0996AEEE00BA26F7 = { DevelopmentTeam = 4627ATJELP; }; AFD56F6B0996B01600BA26F7 = { DevelopmentTeam = 4627ATJELP; }; AFD56F8C0996B09400BA26F7 = { DevelopmentTeam = 4627ATJELP; }; AFD56FA30996B10F00BA26F7 = { DevelopmentTeam = 4627ATJELP; }; AFD56FB90996B18F00BA26F7 = { DevelopmentTeam = 4627ATJELP; }; AFD56FCF0996B20900BA26F7 = { DevelopmentTeam = 4627ATJELP; }; AFD56FF80996B43800BA26F7 = { DevelopmentTeam = 4627ATJELP; }; AFD5700F0996B4CC00BA26F7 = { DevelopmentTeam = 4627ATJELP; }; AFD570260996B56D00BA26F7 = { DevelopmentTeam = 4627ATJELP; }; AFD570430996B61600BA26F7 = { DevelopmentTeam = 4627ATJELP; }; AFD570590996B6A300BA26F7 = { DevelopmentTeam = 4627ATJELP; }; AFD5706F0996B72700BA26F7 = { DevelopmentTeam = 4627ATJELP; }; AFD570850996B80300BA26F7 = { DevelopmentTeam = 4627ATJELP; }; AFD5709B0996B88E00BA26F7 = { DevelopmentTeam = 4627ATJELP; }; AFD570B10996B93000BA26F7 = { DevelopmentTeam = 4627ATJELP; }; AFD570C90996B9F800BA26F7 = { DevelopmentTeam = 4627ATJELP; }; AFD570EA0996BBBF00BA26F7 = { DevelopmentTeam = 4627ATJELP; }; AFD571130996BE9300BA26F7 = { DevelopmentTeam = 4627ATJELP; }; AFD5712C0996BF2E00BA26F7 = { DevelopmentTeam = 4627ATJELP; }; AFD571430996C01700BA26F7 = { DevelopmentTeam = 4627ATJELP; }; AFD571590996C0CE00BA26F7 = { DevelopmentTeam = 4627ATJELP; }; AFD571B50996D9DC00BA26F7 = { DevelopmentTeam = 4627ATJELP; }; AFD572220996E4A300BA26F7 = { DevelopmentTeam = 4627ATJELP; }; AFD5726D0996EE8500BA26F7 = { DevelopmentTeam = 4627ATJELP; }; AFD572A50996F99600BA26F7 = { DevelopmentTeam = 4627ATJELP; }; AFD572C20996FC0F00BA26F7 = { DevelopmentTeam = 4627ATJELP; }; AFD572F9099701C000BA26F7 = { DevelopmentTeam = 4627ATJELP; }; AFD5735D0997411200BA26F7 = { DevelopmentTeam = 4627ATJELP; }; AFDA658E178A52B70070D24B = { DevelopmentTeam = 4627ATJELP; }; AFE2A4560E2E904600ADB298 = { DevelopmentTeam = 4627ATJELP; }; AFE30BE80E52B14700CCF4A5 = { DevelopmentTeam = 4627ATJELP; }; AFE6A1820CDD7B2E002805BF = { DevelopmentTeam = 4627ATJELP; }; AFE6A41B0CDD7FAA002805BF = { DevelopmentTeam = 4627ATJELP; }; AFEC23CD1CB6EAE100DE138F = { DevelopmentTeam = 4627ATJELP; }; AFEE104D1D13406000AAC8F7 = { DevelopmentTeam = 4627ATJELP; }; AFEE106C1D15EB0700AAC8F7 = { DevelopmentTeam = 4627ATJELP; }; AFEE108B1D17E20B00AAC8F7 = { DevelopmentTeam = 4627ATJELP; }; AFF2867F17860E830050A578 = { DevelopmentTeam = 4627ATJELP; }; AFF3C9E817CCAC440028F240 = { DevelopmentTeam = 4627ATJELP; }; AFF463360C4403E400EE6509 = { DevelopmentTeam = 4627ATJELP; }; AFF463580C440AEF00EE6509 = { DevelopmentTeam = 4627ATJELP; }; AFFAB31519158CE40020F021 = { DevelopmentTeam = 4627ATJELP; }; CE3D01511B76F4C100993C75 = { DevelopmentTeam = 4627ATJELP; }; }; }; buildConfigurationList = C01FCF4E08A954540054247B /* Build configuration list for PBXProject "xscreensaver" */; compatibilityVersion = "Xcode 3.2"; developmentRegion = English; hasScannedForEncodings = 1; knownRegions = ( English, Japanese, French, German, en, Base, ); mainGroup = 29B97314FDCFA39411CA2CEA /* xscreensaver */; projectDirPath = ""; projectRoot = ""; targets = ( AF480D5A098EED5E00FB32B8 /* All Savers */, AF4808C0098C3B6C00FB32B8 /* jwxyz */, AF480AAF098C669800FB32B8 /* All Savers (XScreenSaver) */, AFE6A41B0CDD7FAA002805BF /* Abstractile */, AF47721E099D4F67001F091E /* Anemone */, AF4773C1099D67B9001F091E /* Anemotaxis */, AF9D4DEC09B5BB19006E59CF /* Apple2 */, AF63F2471C3465BE0033E133 /* Apple2-iOS */, AFBFE74B178642DC00432B21 /* Apple2-OSX */, AF9770660989D2F6001F8B92 /* Attraction */, AF975A86099C6BC300B05160 /* Barcode */, AF73FF221A09877F00E485E9 /* BinaryRing */, AF47768F099DAA6F001F091E /* Blaster */, AF7778A509B659C800EA3033 /* BlitSpin */, AF4777D1099DC183001F091E /* BoxFit */, AF9D4DAF09B5B71E006E59CF /* BSOD */, AF9D48DB09B53322006E59CF /* Bumps */, AF4771DB099D4D9A001F091E /* CCurve */, AF477774099DB965001F091E /* Celtic */, AF47770D099DAF9F001F091E /* CloudLife */, AF477169099D4786001F091E /* Compass */, AF4775D8099D9F69001F091E /* Coral */, AFF463360C4403E400EE6509 /* CWaves */, AF4778E8099DDDC8001F091E /* Cynosure */, AF9D466609B5109C006E59CF /* DecayScreen */, AF976FBB0989CAA2001F8B92 /* Deco */, AF47704C099D4385001F091E /* Deluxe */, AF9D48F409B535DA006E59CF /* Distort */, AF4775F2099DA030001F091E /* Epicycle */, AF975A6C099C6AB200B05160 /* Eruption */, AF975AD7099C6EB100B05160 /* Fireworkx */, AF477483099D89E4001F091E /* Flame */, AF477790099DBA90001F091E /* FluidBalls */, AF77787F09B6563500EA3033 /* FontGlide */, AF47739A099D6648001F091E /* FuzzyFlakes */, AF64267B09A194B0000F4CD4 /* Goop */, AF975C3D099C8DCF00B05160 /* Greynetic */, AF477253099D5717001F091E /* Halftone */, AF975C12099C8C1500B05160 /* Halo */, AF480C49098E301400FB32B8 /* Helix */, AFB591A7178B812C00EA4005 /* Hexadrop */, AF477426099D7C70001F091E /* IFS */, AF97572D099C317000B05160 /* IMSMap */, AF477752099DB61E001F091E /* Interaggregate */, AF476FB5099D154F001F091E /* Interference */, AF477401099D69E7001F091E /* Intermomentary */, AF477499099D8A74001F091E /* Kaleidescope */, AF477613099DA26C001F091E /* Kumppa */, AF1A17610D6D6EE3008AF328 /* LCDscrub */, AF4FF4930D52CA0800666F98 /* m6502.h */, AF0DC7AB0C4C73F600D76972 /* m6502 */, AF4774CE099D8BFF001F091E /* Maze */, AF975AFC099C6FE400B05160 /* MemScroller */, AF975A36099C681F00B05160 /* MetaBalls */, AF975775099C374A00B05160 /* Moire */, AF64262C09A18F54000F4CD4 /* Moire2 */, AF64264F09A19229000F4CD4 /* Munch */, AF4771F2099D4E63001F091E /* NerveRot */, AF975C5D099C8F3F00B05160 /* NoseGuy */, AF47755D099D9A1A001F091E /* Pedal */, AF4778AB099DDB79001F091E /* Penetrate */, AF477670099DA849001F091E /* Petri */, AF7776E409B63ABF00EA3033 /* Phosphor */, AF63F4501C34682A0033E133 /* Phosphor-iOS */, AFBFE767178647FE00432B21 /* Phosphor-OSX */, AF477283099D5926001F091E /* Piecewise */, AF9D4CE709B5AA8E006E59CF /* Pong */, AF47726B099D57B9001F091E /* PopSquares */, AF477583099D9C28001F091E /* Pyro */, AF6425EC09A189EC000F4CD4 /* Qix */, AF9757C2099C3E6300B05160 /* RDbomb */, AF9D492B09B53CBA006E59CF /* Ripples */, AF975D52099CA0F000B05160 /* Rocks */, AF9770290989D1E6001F8B92 /* Rorschach */, AF9D495409B53FC9006E59CF /* RotZoomer */, AF975865099C475900B05160 /* ShadeBobs */, AF9D474409B5300A006E59CF /* SlideScreen */, AF47792A099DE4C7001F091E /* Slip */, AF64277109A1D37A000F4CD4 /* SpeedMine */, AF9D499709B544C2006E59CF /* Spotlight */, AF477644099DA6D0001F091E /* Squiral */, AF47759F099D9CF7001F091E /* Starfish */, AF477723099DB044001F091E /* Substrate */, AF68A47E19196CF800D41CD1 /* Tessellimage */, AF476FDA099D1686001F091E /* Truchet */, AF9D496C09B5411D006E59CF /* Twang */, AF4776F1099DAE7A001F091E /* Vermiculate */, AF47717F099D4803001F091E /* Wander */, AFA3392E0B058505002B0E7D /* WebCollage */, AFA33C020B058E17002B0E7D /* webcollage-perl */, AFA33BC60B058740002B0E7D /* webcollage-helper */, AF4776DB099DADDF001F091E /* WhirlWindWarp */, AF477382099D65A1001F091E /* Wormhole */, AF975808099C41D500B05160 /* XFlame */, AF9D4D7E09B5B2DC006E59CF /* XAnalogTV */, AF4778C7099DDCAE001F091E /* XJack */, AF9D4C6909B59F27006E59CF /* XLyap */, AF477442099D7D33001F091E /* XMatrix */, AF4776C0099DAC8A001F091E /* XRaySwarm */, AF4776AA099DABDD001F091E /* XSpirograph */, AF9D475F09B53166006E59CF /* Zoom */, AF480D58098EED3D00FB32B8 /* All Savers (XLockmore) */, AFD5712C0996BF2E00BA26F7 /* Apollonian */, AFD572A50996F99600BA26F7 /* Bouboule */, AFD56EAE0996A72600BA26F7 /* Braid */, AFD572C20996FC0F00BA26F7 /* Crystal */, AF794F64099748450059A8B0 /* Demon */, AFD571130996BE9300BA26F7 /* Discrete */, AF480D72098EEDDE00FB32B8 /* Drift */, AFD571430996C01700BA26F7 /* Euler2D */, AFD570590996B6A300BA26F7 /* FadePlot */, AF794F8E09974A320059A8B0 /* Fiberlamp */, AFD570EA0996BBBF00BA26F7 /* Flow */, AFD56F230996AB8A00BA26F7 /* Galaxy */, AFD56F4F0996AEEE00BA26F7 /* Grav */, AFD56F6B0996B01600BA26F7 /* Hopalong */, AFD572F9099701C000BA26F7 /* Julia */, AF794FCD09974FA60059A8B0 /* Loop */, AFD5706F0996B72700BA26F7 /* Mountain */, AF77771A09B6416100EA3033 /* Pacman */, AFD56FF80996B43800BA26F7 /* Penrose */, AFD5726D0996EE8500BA26F7 /* Polyominoes */, AFD5700F0996B4CC00BA26F7 /* Sierpinski */, AFD5735D0997411200BA26F7 /* Strange */, AFD572220996E4A300BA26F7 /* Swirl */, AFD571590996C0CE00BA26F7 /* Thornbird */, AFD570850996B80300BA26F7 /* Triangle */, AF480D59098EED5100FB32B8 /* All Savers (OpenGL) */, AFA5604A09936E2100F3E977 /* AntInspect */, AFA562DA099393C900F3E977 /* AntMaze */, AFA5606209936F3800F3E977 /* AntSpotlight */, AF08398F09930B6B00277BE9 /* Atlantis */, AF083A32099311D700277BE9 /* Atunnel */, AFA5615609937C0D00F3E977 /* BlinkBox */, AFA5601409936CC800F3E977 /* BlockTube */, AFA562BF099392C600F3E977 /* Boing */, AFA55EC7099360E300F3E977 /* BouncingCow */, AFA55CA909934BB200F3E977 /* Boxed */, AFA55ACF09933CEF00F3E977 /* Bubble3D */, AFA55946099330B000F3E977 /* Cage */, AF77784409B6528100EA3033 /* Carousel */, AFA55BAB099340CE00F3E977 /* Circuit */, AF5C9AF91A0CCE6E00B0147A /* Cityflow */, AF3581BF1431D47B00E09C51 /* CompanionCube */, AFA563130993951000F3E977 /* Crackberg */, AFA56351099396C000F3E977 /* Cube21 */, AFA55D620993584B00F3E977 /* Cubenetic */, AFEE106C1D15EB0700AAC8F7 /* CubeStack */, AFA55FD309936BFA00F3E977 /* CubeStorm */, AFEE104D1D13406000AAC8F7 /* CubeTwist */, AF4FF4BA0D52CBDE00666F98 /* CubicGrid */, AF4810EB09909FBA00FB32B8 /* DangerBall */, AF39381A1D0FBD6A00205406 /* Discoball */, AF77786109B6536000EA3033 /* DNAlogo */, AFEC23CD1CB6EAE100DE138F /* DymaxionMap */, AFACE8731CC83458008B24CD /* EnergyStream */, AFA55E0D09935EDC00F3E977 /* Endgame */, AFA55C0E0993431300F3E977 /* Engine */, AF6423F2099FF9C2000F4CD4 /* Extrusion */, AFA5603209936D5100F3E977 /* FlipFlop */, AF77773E09B6446500EA3033 /* FlipScreen3D */, AF7777EA09B64E3100EA3033 /* FlipText */, AFA55E4E09935FF900F3E977 /* FlyingToasters */, AF4812500990CE2700FB32B8 /* Gears */, AFF3C9E817CCAC440028F240 /* Geodesic */, AF7ACFC019FF0A9200BD752B /* GeodesicGears */, AFA55B9109933FDA00F3E977 /* GFlux */, AFA55E2F09935F8E00F3E977 /* GLBlur */, AFF463580C440AEF00EE6509 /* GLCells */, AF77777409B6497800EA3033 /* Gleidescope */, AFA56331099395ED00F3E977 /* GLHanoi */, AFA55FF909936C6D00F3E977 /* GLKnots */, AFA55F720993643600F3E977 /* GLMatrix */, AFA55B0909933E0500F3E977 /* GLPlanet */, AF48DEEF0A0C25E000F94CF9 /* GLSchool */, AF7777D009B64C6B00EA3033 /* GLSlideshow */, AFA55C77099349A600F3E977 /* GLSnake */, AFD56DF10996A03800BA26F7 /* GLText */, AF1B0FA71D7AB4740011DBE4 /* Hexstrut */, AF78D175142DD8F3002AAF77 /* Hilbert */, AFC0E8AB1CDC601A008CAFAC /* Hydrostat */, AFA55F420993629000F3E977 /* Hypertorus */, AF3C71450D624BF50030CC0D /* Hypnowheel */, AFA55F06099361B700F3E977 /* JigglyPuff */, AF35E88A0E63823600691F2F /* Jigsaw */, AFA563A4099398BB00F3E977 /* Juggler3D */, AF7510FF1782B5B900380EA1 /* Kaleidocycle */, AFA55F2A0993622F00F3E977 /* Klein */, AFA55A790993364300F3E977 /* Lament */, AFA55DC809935D7000F3E977 /* Lavalite */, AF4FD6E60CE7A486005EE58E /* Lockward */, AFA55BE40993429100F3E977 /* Menger */, AF77778E09B64A5200EA3033 /* MirrorBlob */, AFA5596D0993317900F3E977 /* Moebius */, AFE6A1820CDD7B2E002805BF /* MoebiusGears */, AFA56119099378CB00F3E977 /* molecules.h */, AFA560FD0993781600F3E977 /* Molecule */, AFA559B50993328000F3E977 /* Morph3D */, AFA5617B09937CF100F3E977 /* Noof */, AFD51B1B0F063B4A00471C02 /* Photopile */, AFA5621F0993852500F3E977 /* Pinion */, AF4812B30990D3D900FB32B8 /* Pipes */, AFA5619D09937D7E00F3E977 /* Polyhedra */, AFA560AE0993718D00F3E977 /* Polytopes */, AFFAB31519158CE40020F021 /* ProjectivePlane */, AFA562060993849F00F3E977 /* Providence */, AFA55B2509933E8D00F3E977 /* Pulsar */, AFF2867F17860E830050A578 /* QuasiCrystal */, AFA55DF009935E4900F3E977 /* Queens */, AFA2118C1CD59DAF00C0D2A1 /* RaverHoop */, AF63A7F11AB4EDDB00593C75 /* RomanBoy */, AFA559CF0993330600F3E977 /* Rubik */, AF32D9E00F3AD0B40080F535 /* RubikBlocks */, AFA55D3C0993565300F3E977 /* SBalls */, AFA55B7909933F7200F3E977 /* Sierpinski3D */, AFE2A4560E2E904600ADB298 /* SkyTentacles */, AFE30BE80E52B14700CCF4A5 /* Sonar */, AFA55D7F099358C400F3E977 /* Spheremonics */, AFCF833B1AF5B515008BB7E1 /* SplitFlap */, AFEE108B1D17E20B00AAC8F7 /* Splodesic */, AFA55A20099334A000F3E977 /* Sproingies */, AFA55A030993340300F3E977 /* Stairs */, AF77781009B6504400EA3033 /* StarWars */, AF7777A809B64B2600EA3033 /* StonerView */, AFA559920993322100F3E977 /* Superquadrics */, AF4A3449102A593600A81B2A /* Surfaces */, AFA562F20993943B00F3E977 /* Tangram */, AFA56379099397B300F3E977 /* TimeTunnel */, AF998EDA0A083DB30051049D /* TopBlock */, AF3581FB143330F900E09C51 /* TronBit */, AF46E9CF1CBBA2B300240FBC /* Unicrud */, AFDA658E178A52B70070D24B /* Unknown Pleasures */, AF0DCA420C4CBB0D00D76972 /* Voronoi */, AF39E282198A11F60064A58D /* WindupRobot */, AF137D410F075C9B004DE3B2 /* Obsolete */, AFA55CCC09934CE400F3E977 /* GLForestFire */, AFD570C90996B9F800BA26F7 /* Ant */, AF6427A809A2DE36000F4CD4 /* Bubbles */, AF47765A099DA78E001F091E /* Critical */, AF477909099DE379001F091E /* Flag */, AFD56EDA0996A95700BA26F7 /* Forest */, AF64260F09A18D6C000F4CD4 /* HyperBall */, AF6425CC09A18855000F4CD4 /* HyperCube */, AFD571B50996D9DC00BA26F7 /* Juggle */, AFD56F8C0996B09400BA26F7 /* Laser */, AFD56FA30996B10F00BA26F7 /* Lightning */, AFD56FB90996B18F00BA26F7 /* Lisa */, AFD56FCF0996B20900BA26F7 /* Lissie */, AF4774B4099D8B5F001F091E /* LMorph */, AFD570B10996B93000BA26F7 /* Rotor */, AFD570260996B56D00BA26F7 /* Sphere */, AFD570430996B61600BA26F7 /* Spiral */, AF4771A7099D4949001F091E /* T3D */, CE3D01511B76F4C100993C75 /* TestX11 */, AF63F4781C3469FC0033E133 /* TestX11-iOS */, AFD56F0B0996AAFA00BA26F7 /* Vines */, AF477208099D4EE8001F091E /* Whirlygig */, AFD5709B0996B88E00BA26F7 /* Worm */, AF9E7EBE190F4C1B00A8B01F /* enable_gc */, AF9771D60989DC4A001F8B92 /* SaverTester */, AF918977158FC00A002B5D1E /* XScreenSaver-iOS */, AF1AD9E118500F9F00932759 /* XScreenSaverUpdater */, ); }; /* End PBXProject section */ /* Begin PBXResourcesBuildPhase section */ AF08399209930B6B00277BE9 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AF0839A609930BAC00277BE9 /* atlantis.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF083A35099311D700277BE9 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AF083A4B0993120900277BE9 /* atunnel.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF0DC7AE0C4C73F600D76972 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AF0DCA380C4C74B700D76972 /* m6502.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF0DCA450C4CBB0D00D76972 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AF0DCA620C4CBB8E00D76972 /* voronoi.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF1A17640D6D6EE3008AF328 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AF1A17810D6D6F62008AF328 /* lcdscrub.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF1AD9E018500F9F00932759 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AF1ADA1B18501B3D00932759 /* SaverRunner.icns in Resources */, AF3633FC18530DD90086A439 /* sparkle_dsa_pub.pem in Resources */, AF1ADA161850157400932759 /* Updater.xib in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF1B0FAA1D7AB4740011DBE4 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AF1B0FC11D7AB53A0011DBE4 /* hexstrut.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF32D9E30F3AD0B40080F535 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AF32D9FD0F3AD1330080F535 /* rubikblocks.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF3581C21431D47B00E09C51 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AF3581C31431D47B00E09C51 /* voronoi.xml in Resources */, AF3581E81431D61D00E09C51 /* companioncube.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF3581FE143330F900E09C51 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AF3581FF143330F900E09C51 /* voronoi.xml in Resources */, AF3582221433318500E09C51 /* tronbit.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF35E88D0E63823600691F2F /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AF35EB240E63829600691F2F /* jigsaw.xml in Resources */, AF4A8CA010B609B50074B062 /* xscreensaver-getimage-file in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF39381D1D0FBD6A00205406 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AF3938331D0FBF0100205406 /* discoball.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF39E285198A11F60064A58D /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AF39E2AD198A15820064A58D /* winduprobot.xml in Resources */, AFCF509D198C3612005B0DB1 /* xscreensaver-text in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF3C71480D624BF50030CC0D /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AF3C71600D624C7C0030CC0D /* hypnowheel.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF46E9D21CBBA2B300240FBC /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AF46E9E81CBBA41600240FBC /* unicrud.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF476FB8099D154F001F091E /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AF476FCF099D1587001F091E /* interference.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF476FDD099D1686001F091E /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AF476FEF099D16E4001F091E /* truchet.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF47704F099D4385001F091E /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AF47705E099D43B7001F091E /* deluxe.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF47716C099D4786001F091E /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AF47717B099D47B7001F091E /* compass.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF477182099D4803001F091E /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AF477191099D4846001F091E /* wander.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF4771AA099D4949001F091E /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AF4771B9099D4981001F091E /* t3d.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF4771DE099D4D9A001F091E /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AF4771EE099D4DE5001F091E /* ccurve.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF4771F5099D4E63001F091E /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AF477204099D4EA2001F091E /* nerverot.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF47720B099D4EE8001F091E /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AF47721A099D4F27001F091E /* whirlygig.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF477221099D4F67001F091E /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AF477230099D4FBD001F091E /* anemone.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF477256099D5717001F091E /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AF477265099D5752001F091E /* halftone.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF47726E099D57B9001F091E /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AF47727D099D57F5001F091E /* popsquares.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF477286099D5926001F091E /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AF477296099D596A001F091E /* piecewise.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF477385099D65A1001F091E /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AF477394099D65EB001F091E /* wormhole.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF47739D099D6648001F091E /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AF4773AC099D6762001F091E /* fuzzyflakes.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF4773C4099D67B9001F091E /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AF4773D3099D6804001F091E /* anemotaxis.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF477404099D69E7001F091E /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AF47741B099D6A58001F091E /* intermomentary.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF477429099D7C70001F091E /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AF477439099D7CD0001F091E /* ifs.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF477445099D7D33001F091E /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AF477454099D7D75001F091E /* xmatrix.xml in Resources */, AF998ED60A083A280051049D /* xscreensaver-text in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF477486099D89E4001F091E /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AF477495099D8A3A001F091E /* flame.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF47749C099D8A74001F091E /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AF4774AB099D8AF3001F091E /* kaleidescope.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF4774B7099D8B5F001F091E /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AF4774CA099D8BAE001F091E /* lmorph.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF4774D1099D8BFF001F091E /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AF4774E0099D8C74001F091E /* maze.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF477560099D9A1A001F091E /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AF47756F099D9A70001F091E /* pedal.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF477586099D9C28001F091E /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AF47759B099D9C8D001F091E /* pyro.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF4775A2099D9CF7001F091E /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AF4775B1099D9D51001F091E /* starfish.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF4775DB099D9F69001F091E /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AF4775EC099D9FDB001F091E /* coral.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF4775F5099DA030001F091E /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AF477604099DA083001F091E /* epicycle.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF477616099DA26C001F091E /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AF477629099DA2D2001F091E /* kumppa.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF477647099DA6D0001F091E /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AF477656099DA738001F091E /* squiral.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF47765D099DA78E001F091E /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AF47766C099DA7F3001F091E /* critical.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF477673099DA849001F091E /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AF477682099DA8AC001F091E /* petri.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF477692099DAA6F001F091E /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AF4776A1099DAAC9001F091E /* blaster.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF4776AD099DABDD001F091E /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AF4776BC099DAC29001F091E /* xspirograph.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF4776C3099DAC8A001F091E /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AF4776D2099DACD6001F091E /* xrayswarm.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF4776DE099DADDF001F091E /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AF4776ED099DAE38001F091E /* whirlwindwarp.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF4776F4099DAE7A001F091E /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AF477703099DAF24001F091E /* vermiculate.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF477710099DAF9F001F091E /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AF47771F099DB000001F091E /* cloudlife.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF477726099DB044001F091E /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AF477735099DB0ED001F091E /* substrate.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF477755099DB61E001F091E /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AF477768099DB6FD001F091E /* interaggregate.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF477777099DB965001F091E /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AF477786099DBA11001F091E /* celtic.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF477793099DBA90001F091E /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AF4777A3099DBAF8001F091E /* fluidballs.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF4777D4099DC183001F091E /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AF4778A2099DDA76001F091E /* boxfit.xml in Resources */, AF0FAF1609CA712600EE1051 /* xscreensaver-getimage-file in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF4778AE099DDB79001F091E /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AF4778BD099DDC1B001F091E /* penetrate.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF4778CA099DDCAE001F091E /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AF4778D9099DDD14001F091E /* xjack.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF4778EB099DDDC8001F091E /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AF4778FA099DDE5F001F091E /* cynosure.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF47790C099DE379001F091E /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AF47791B099DE3D9001F091E /* flag.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF47792D099DE4C7001F091E /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AF47793C099DE535001F091E /* slip.xml in Resources */, AF0FAF2509CA712600EE1051 /* xscreensaver-getimage-file in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF480C4C098E301400FB32B8 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AF480C69098E309E00FB32B8 /* helix.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF480D75098EEDDE00FB32B8 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AF480D85098EEE3100FB32B8 /* drift.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF4810EE09909FBA00FB32B8 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AF4811440990A35B00FB32B8 /* dangerball.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF4812530990CE2700FB32B8 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AF48126D0990CE8600FB32B8 /* gears.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF4812B60990D3D900FB32B8 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AF4812C80990D41700FB32B8 /* pipes.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF48DEF20A0C25E000F94CF9 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AF48E16C0A0C26A400F94CF9 /* glschool.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF4A344C102A593600A81B2A /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AF4A3462102A59EB00A81B2A /* surfaces.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF4FD6E90CE7A486005EE58E /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AF4FD7030CE7A5BC005EE58E /* lockward.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF4FF4BD0D52CBDE00666F98 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AF4FF4D40D52CCAA00666F98 /* cubicgrid.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF5C9AFC1A0CCE6E00B0147A /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AF5C9B111A0CCF4E00B0147A /* cityflow.xml in Resources */, AF5C9AFD1A0CCE6E00B0147A /* dangerball.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF63A7F41AB4EDDB00593C75 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AF63A80A1AB4EF5D00593C75 /* romanboy.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF63F2501C3465BE0033E133 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AF63F2511C3465BE0033E133 /* iSaverRunner.xib in Resources */, AF63F2521C3465BE0033E133 /* LaunchScreen.xib in Resources */, AF63F2531C3465BE0033E133 /* iSaverRunner57t.png in Resources */, AF63F25D1C3465BE0033E133 /* apple2.xml in Resources */, AF63F2B71C3465BE0033E133 /* Media-iOS.xcassets in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF63F4581C34682A0033E133 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AF63F4591C34682A0033E133 /* iSaverRunner.xib in Resources */, AF63F45A1C34682A0033E133 /* LaunchScreen.xib in Resources */, AF63F45B1C34682A0033E133 /* iSaverRunner57t.png in Resources */, AF63F4761C3469410033E133 /* phosphor.xml in Resources */, AF63F45D1C34682A0033E133 /* Media-iOS.xcassets in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF63F4801C3469FC0033E133 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AF63F4811C3469FC0033E133 /* iSaverRunner.xib in Resources */, AF63F4821C3469FC0033E133 /* LaunchScreen.xib in Resources */, AF63F4831C3469FC0033E133 /* iSaverRunner57t.png in Resources */, AF63F49C1C346B0A0033E133 /* testx11.xml in Resources */, AF63F4851C3469FC0033E133 /* Media-iOS.xcassets in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF6423F5099FF9C2000F4CD4 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AF642408099FFAB0000F4CD4 /* extrusion.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF6425CF09A18855000F4CD4 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AF6425DE09A188D7000F4CD4 /* hypercube.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF6425EF09A189EC000F4CD4 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AF6425FE09A18A77000F4CD4 /* qix.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF64261209A18D6C000F4CD4 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AF64262109A18DFF000F4CD4 /* hyperball.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF64262F09A18F54000F4CD4 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AF64263E09A18FCE000F4CD4 /* moire2.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF64265209A19229000F4CD4 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AF64266109A1929A000F4CD4 /* munch.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF64267E09A194B0000F4CD4 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AF64268D09A19525000F4CD4 /* goop.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF64277409A1D37A000F4CD4 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AF64278309A1D418000F4CD4 /* speedmine.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF6427AB09A2DE36000F4CD4 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AF6427BA09A2DF09000F4CD4 /* bubbles.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF68A48119196CF800D41CD1 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AF68A49719196E3E00D41CD1 /* tessellimage.xml in Resources */, AF4A6692191F7CAE00C74753 /* xscreensaver-getimage-file in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF73FF251A09877F00E485E9 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AF73FF3C1A0988C500E485E9 /* binaryring.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF7511021782B5B900380EA1 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AFB8A69B1782BA34004EDB85 /* kaleidocycle.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF7776E709B63ABF00EA3033 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AF77770209B63B3900EA3033 /* phosphor.xml in Resources */, AF0FAF1009CA6FF900EE1051 /* xscreensaver-text in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF77771D09B6416100EA3033 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AF77772C09B641C800EA3033 /* pacman.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF77774109B6446500EA3033 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AF77775309B644E300EA3033 /* flipscreen3d.xml in Resources */, AF0FAF1C09CA712600EE1051 /* xscreensaver-getimage-file in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF77777709B6497800EA3033 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AF77778A09B64A0D00EA3033 /* gleidescope.xml in Resources */, AF0FAF1E09CA712600EE1051 /* xscreensaver-getimage-file in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF77779109B64A5200EA3033 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AF7777A409B64AE200EA3033 /* mirrorblob.xml in Resources */, AF0FAF2109CA712600EE1051 /* xscreensaver-getimage-file in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF7777AB09B64B2600EA3033 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AF7777BE09B64BAC00EA3033 /* stonerview.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF7777D309B64C6B00EA3033 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AF7777E609B64CD800EA3033 /* glslideshow.xml in Resources */, AF0FAF1F09CA712600EE1051 /* xscreensaver-getimage-file in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF7777ED09B64E3100EA3033 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AF77780009B64EA800EA3033 /* fliptext.xml in Resources */, AF0FAF0D09CA6FF900EE1051 /* xscreensaver-text in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF77781309B6504400EA3033 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AF77782709B650D200EA3033 /* starwars.xml in Resources */, AF0FAF1109CA6FF900EE1051 /* xscreensaver-text in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF77784709B6528100EA3033 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AF77787D09B654FE00EA3033 /* carousel.xml in Resources */, AF0FAF1909CA712600EE1051 /* xscreensaver-getimage-file in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF77786409B6536000EA3033 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AF77787A09B6545E00EA3033 /* dnalogo.xml in Resources */, AFC43E7B1C6AA77900C89999 /* YearlReg.ttf in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF77788209B6563500EA3033 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AF77789109B656A900EA3033 /* fontglide.xml in Resources */, AF0FAF0E09CA6FF900EE1051 /* xscreensaver-text in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF7778A809B659C800EA3033 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AF7778B909B65A6E00EA3033 /* blitspin.xml in Resources */, AF0FAF1509CA712600EE1051 /* xscreensaver-getimage-file in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF78D178142DD8F3002AAF77 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AF78D179142DD8F3002AAF77 /* voronoi.xml in Resources */, AF78D191142DD99B002AAF77 /* hilbert.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF794F67099748450059A8B0 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AF794F7D0997486C0059A8B0 /* demon.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF794F9109974A320059A8B0 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AF794FA809974AC60059A8B0 /* fiberlamp.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF794FD009974FA60059A8B0 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AF794FDF09974FD10059A8B0 /* loop.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF7ACFC319FF0A9200BD752B /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AF7ACFD919FF0BA600BD752B /* geodesicgears.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF91897B158FC00A002B5D1E /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AF918983158FC00A002B5D1E /* iSaverRunner.xib in Resources */, AF73FF211A08AB9400E485E9 /* iSaverRunner57t.png in Resources */, 55EDCB3D1AD498A800251909 /* LaunchScreen.xib in Resources */, 550FB6001AD64424001A4FA5 /* Media-iOS.xcassets in Resources */, AFEC68371BD6CA85004C1B64 /* OCRAStd.otf in Resources */, AFC43E741C68364B00C89999 /* PxPlus_IBM_VGA8.ttf in Resources */, AFEC68391BD6CDF9004C1B64 /* YearlReg.ttf in Resources */, AF918AB4158FC53D002B5D1E /* abstractile.xml in Resources */, AF918AB5158FC53D002B5D1E /* anemone.xml in Resources */, AF918AB6158FC53D002B5D1E /* anemotaxis.xml in Resources */, AF918AB8158FC53D002B5D1E /* antinspect.xml in Resources */, AF918AB9158FC53D002B5D1E /* antmaze.xml in Resources */, AF918ABA158FC53D002B5D1E /* antspotlight.xml in Resources */, AF918ABB158FC53D002B5D1E /* apollonian.xml in Resources */, AF918ABC158FC53D002B5D1E /* apple2.xml in Resources */, AF918ABD158FC53D002B5D1E /* atlantis.xml in Resources */, AF918ABE158FC53D002B5D1E /* attraction.xml in Resources */, AF918ABF158FC53D002B5D1E /* atunnel.xml in Resources */, AF918AC0158FC53D002B5D1E /* barcode.xml in Resources */, AF73FF3D1A0988C500E485E9 /* binaryring.xml in Resources */, AFEE10681D1341FE00AAC8F7 /* cubetwist.xml in Resources */, AF918AC1158FC53D002B5D1E /* blaster.xml in Resources */, AF918AC2158FC53D002B5D1E /* blinkbox.xml in Resources */, AF918AC3158FC53D002B5D1E /* blitspin.xml in Resources */, AF918AC4158FC53D002B5D1E /* blocktube.xml in Resources */, AF918AC5158FC53D002B5D1E /* boing.xml in Resources */, AF918AC6158FC53D002B5D1E /* bouboule.xml in Resources */, AF918AC7158FC53D002B5D1E /* bouncingcow.xml in Resources */, AF918AC8158FC53D002B5D1E /* boxed.xml in Resources */, AF918AC9158FC53D002B5D1E /* boxfit.xml in Resources */, AF918ACA158FC53D002B5D1E /* braid.xml in Resources */, AF918ACB158FC53D002B5D1E /* bsod.xml in Resources */, AF918ACC158FC53D002B5D1E /* bubble3d.xml in Resources */, AF918ACE158FC53D002B5D1E /* bumps.xml in Resources */, AF918ACF158FC53D002B5D1E /* cage.xml in Resources */, AF918AD0158FC53D002B5D1E /* carousel.xml in Resources */, AF918AD1158FC53D002B5D1E /* ccurve.xml in Resources */, AF918AD2158FC53D002B5D1E /* celtic.xml in Resources */, AF918AD3158FC53D002B5D1E /* circuit.xml in Resources */, AF5C9B121A0CCF4E00B0147A /* cityflow.xml in Resources */, AF918AD4158FC53D002B5D1E /* cloudlife.xml in Resources */, AF918AD5158FC53D002B5D1E /* companioncube.xml in Resources */, AF918AD6158FC53D002B5D1E /* compass.xml in Resources */, AF918AD7158FC53D002B5D1E /* coral.xml in Resources */, AF918AD8158FC53D002B5D1E /* crackberg.xml in Resources */, AF918ADA158FC53D002B5D1E /* crystal.xml in Resources */, AF918ADB158FC53D002B5D1E /* cube21.xml in Resources */, AF918ADC158FC53D002B5D1E /* cubenetic.xml in Resources */, AFEE10881D15EBDC00AAC8F7 /* cubestack.xml in Resources */, AF918ADD158FC53D002B5D1E /* cubestorm.xml in Resources */, AF918ADE158FC53D002B5D1E /* cubicgrid.xml in Resources */, AF918ADF158FC53D002B5D1E /* cwaves.xml in Resources */, AF918AE0158FC53D002B5D1E /* cynosure.xml in Resources */, AF918AE1158FC53D002B5D1E /* dangerball.xml in Resources */, AF918AE2158FC53D002B5D1E /* decayscreen.xml in Resources */, AF918AE3158FC53D002B5D1E /* deco.xml in Resources */, AF918AE4158FC53D002B5D1E /* deluxe.xml in Resources */, AF918AE5158FC53D002B5D1E /* demon.xml in Resources */, AF918AE6158FC53D002B5D1E /* discrete.xml in Resources */, AF3938361D0FBF2700205406 /* discoball.xml in Resources */, AF918AE7158FC53D002B5D1E /* distort.xml in Resources */, AFCF453815986A3000E6E8CC /* dnalogo.xml in Resources */, AFEC23E81CB6EC6800DE138F /* dymaxionmap.xml in Resources */, AF918AE9158FC53D002B5D1E /* drift.xml in Resources */, AF918AEA158FC53D002B5D1E /* endgame.xml in Resources */, AFACE88C1CC835F7008B24CD /* energystream.xml in Resources */, AF918AEB158FC53D002B5D1E /* engine.xml in Resources */, AF918AEC158FC53D002B5D1E /* epicycle.xml in Resources */, AF918AED158FC53D002B5D1E /* eruption.xml in Resources */, AF918AEE158FC53D002B5D1E /* euler2d.xml in Resources */, AF918AF0158FC53D002B5D1E /* fadeplot.xml in Resources */, AF918AF1158FC53D002B5D1E /* fiberlamp.xml in Resources */, AF918AF2158FC53D002B5D1E /* fireworkx.xml in Resources */, AF918AF4158FC53D002B5D1E /* flame.xml in Resources */, AF918AF5158FC53D002B5D1E /* flipflop.xml in Resources */, AF918AF6158FC53D002B5D1E /* flipscreen3d.xml in Resources */, AF918AF7158FC53D002B5D1E /* fliptext.xml in Resources */, AF918AF8158FC53D002B5D1E /* flow.xml in Resources */, AF918AF9158FC53D002B5D1E /* fluidballs.xml in Resources */, AF918AFB158FC53D002B5D1E /* flyingtoasters.xml in Resources */, AF918AFC158FC53D002B5D1E /* fontglide.xml in Resources */, AF918AFE158FC53D002B5D1E /* fuzzyflakes.xml in Resources */, AF918AFF158FC53D002B5D1E /* galaxy.xml in Resources */, AF918B00158FC53D002B5D1E /* gears.xml in Resources */, AFF3C9FF17CCAD9A0028F240 /* geodesic.xml in Resources */, AF7ACFDA19FF0BA600BD752B /* geodesicgears.xml in Resources */, AF918B01158FC53D002B5D1E /* gflux.xml in Resources */, AF918B02158FC53D002B5D1E /* glblur.xml in Resources */, AF918B03158FC53D002B5D1E /* glcells.xml in Resources */, AF918B04158FC53D002B5D1E /* gleidescope.xml in Resources */, AF918B06158FC53D002B5D1E /* glhanoi.xml in Resources */, AF918B07158FC53D002B5D1E /* glknots.xml in Resources */, AF918B08158FC53D002B5D1E /* glmatrix.xml in Resources */, AF918B09158FC53D002B5D1E /* glplanet.xml in Resources */, AF918B0A158FC53D002B5D1E /* glschool.xml in Resources */, AF918B0B158FC53D002B5D1E /* glslideshow.xml in Resources */, AF918B0C158FC53D002B5D1E /* glsnake.xml in Resources */, AF918B10158FC53D002B5D1E /* greynetic.xml in Resources */, AF918B0D158FC53D002B5D1E /* gltext.xml in Resources */, AF918B0E158FC53D002B5D1E /* goop.xml in Resources */, AF918B0F158FC53D002B5D1E /* grav.xml in Resources */, AF918B11158FC53D002B5D1E /* halftone.xml in Resources */, AF918B12158FC53D002B5D1E /* halo.xml in Resources */, AF918B13158FC53D002B5D1E /* helix.xml in Resources */, AFB591BF178B81E600EA4005 /* hexadrop.xml in Resources */, AF1B0FC01D7AB5330011DBE4 /* hexstrut.xml in Resources */, AF918B14158FC53D002B5D1E /* hilbert.xml in Resources */, AF918B15158FC53D002B5D1E /* hopalong.xml in Resources */, AFC0E8C71CDC60DE008CAFAC /* hydrostat.xml in Resources */, AF918B18158FC53D002B5D1E /* hypertorus.xml in Resources */, AF918B19158FC53D002B5D1E /* hypnowheel.xml in Resources */, AF918B1A158FC53D002B5D1E /* ifs.xml in Resources */, AF918B1B158FC53D002B5D1E /* imsmap.xml in Resources */, AF918B1C158FC53D002B5D1E /* interaggregate.xml in Resources */, 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 */, AFB8A69C1782BF6C004EDB85 /* kaleidocycle.xml in Resources */, AF918B23158FC53D002B5D1E /* julia.xml in Resources */, AF918B24158FC53D002B5D1E /* kaleidescope.xml in Resources */, AF918B25158FC53D002B5D1E /* klein.xml in Resources */, AF918B26158FC53D002B5D1E /* kumppa.xml in Resources */, AF918B27158FC53D002B5D1E /* lament.xml in Resources */, AF918B29158FC53D002B5D1E /* lavalite.xml in Resources */, AF918B30158FC53D002B5D1E /* loop.xml in Resources */, AF918B31158FC53D002B5D1E /* m6502.xml in Resources */, AF918B32158FC53D002B5D1E /* maze.xml in Resources */, AF918B33158FC53D002B5D1E /* memscroller.xml in Resources */, AF918B34158FC53D002B5D1E /* menger.xml in Resources */, AF918B35158FC53D002B5D1E /* metaballs.xml in Resources */, AF918B36158FC53D002B5D1E /* mirrorblob.xml in Resources */, AF918B38158FC53D002B5D1E /* moebius.xml in Resources */, AF918B39158FC53D002B5D1E /* moebiusgears.xml in Resources */, AF918B3A158FC53D002B5D1E /* moire.xml in Resources */, AF918B3B158FC53D002B5D1E /* moire2.xml in Resources */, AF918B3C158FC53D002B5D1E /* molecule.xml in Resources */, AF918B3D158FC53D002B5D1E /* morph3d.xml in Resources */, AF918B3E158FC53D002B5D1E /* mountain.xml in Resources */, AF918B3F158FC53D002B5D1E /* munch.xml in Resources */, AF918B40158FC53D002B5D1E /* nerverot.xml in Resources */, AF918B41158FC53D002B5D1E /* noof.xml in Resources */, AF918B42158FC53D002B5D1E /* noseguy.xml in Resources */, AF918B43158FC53D002B5D1E /* pacman.xml in Resources */, AF918B44158FC53D002B5D1E /* pedal.xml in Resources */, AF918B45158FC53D002B5D1E /* penetrate.xml in Resources */, AF918B46158FC53D002B5D1E /* penrose.xml in Resources */, AF918B47158FC53D002B5D1E /* petri.xml in Resources */, AF918B48158FC53E002B5D1E /* phosphor.xml in Resources */, AF918B49158FC53E002B5D1E /* photopile.xml in Resources */, 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 */, AF918B51158FC53E002B5D1E /* popsquares.xml in Resources */, AFFAB33019158E2A0020F021 /* projectiveplane.xml in Resources */, AF918B52158FC53E002B5D1E /* providence.xml in Resources */, AF918B53158FC53E002B5D1E /* pulsar.xml in Resources */, AF918B54158FC53E002B5D1E /* pyro.xml in Resources */, AF918B55158FC53E002B5D1E /* qix.xml in Resources */, AFF28697178611720050A578 /* quasicrystal.xml in Resources */, AF918B56158FC53E002B5D1E /* queens.xml in Resources */, AFA211A51CD5A00F00C0D2A1 /* raverhoop.xml in Resources */, AF918B57158FC53E002B5D1E /* rdbomb.xml in Resources */, AF918B58158FC53E002B5D1E /* ripples.xml in Resources */, AF918B59158FC53E002B5D1E /* rocks.xml in Resources */, AF63A80B1AB4EF5D00593C75 /* romanboy.xml in Resources */, AF918B5A158FC53E002B5D1E /* rorschach.xml in Resources */, AF918B5C158FC53E002B5D1E /* rotzoomer.xml in Resources */, AF918B5D158FC53E002B5D1E /* rubik.xml in Resources */, AF918B5E158FC53E002B5D1E /* rubikblocks.xml in Resources */, AF918B5F158FC53E002B5D1E /* sballs.xml in Resources */, AF918B60158FC53E002B5D1E /* shadebobs.xml in Resources */, AF918B61158FC53E002B5D1E /* sierpinski.xml in Resources */, AF918B62158FC53E002B5D1E /* sierpinski3d.xml in Resources */, AF918B63158FC53E002B5D1E /* skytentacles.xml in Resources */, AF918B64158FC53E002B5D1E /* slidescreen.xml in Resources */, AF918B65158FC53E002B5D1E /* slip.xml in Resources */, AF918B66158FC53E002B5D1E /* sonar.xml in Resources */, AF918B67158FC53E002B5D1E /* speedmine.xml in Resources */, AF918B69158FC53E002B5D1E /* spheremonics.xml in Resources */, AFCF83561AF5B5FD008BB7E1 /* splitflap.xml in Resources */, AFEE10A71D17E2CD00AAC8F7 /* splodesic.xml in Resources */, AF918B6B158FC53E002B5D1E /* spotlight.xml in Resources */, AF918B6C158FC53E002B5D1E /* sproingies.xml in Resources */, AF918B6D158FC53E002B5D1E /* squiral.xml in Resources */, AF918B6E158FC53E002B5D1E /* stairs.xml in Resources */, AF918B6F158FC53E002B5D1E /* starfish.xml in Resources */, AF918B70158FC53E002B5D1E /* starwars.xml in Resources */, AF918B71158FC53E002B5D1E /* stonerview.xml in Resources */, AF918B72158FC53E002B5D1E /* strange.xml in Resources */, AF918B73158FC53E002B5D1E /* substrate.xml in Resources */, AF918B74158FC53E002B5D1E /* superquadrics.xml in Resources */, AF918B75158FC53E002B5D1E /* surfaces.xml in Resources */, AF918B76158FC53E002B5D1E /* swirl.xml in Resources */, AF918B78158FC53E002B5D1E /* tangram.xml in Resources */, AF68A49819196E3E00D41CD1 /* tessellimage.xml in Resources */, AF918B79158FC53E002B5D1E /* thornbird.xml in Resources */, AF918B7A158FC53E002B5D1E /* timetunnel.xml in Resources */, AF918B7B158FC53E002B5D1E /* topblock.xml in Resources */, AF918B7C158FC53E002B5D1E /* triangle.xml in Resources */, AF918B7D158FC53E002B5D1E /* tronbit.xml in Resources */, AF918B7E158FC53E002B5D1E /* truchet.xml in Resources */, AF918B7F158FC53E002B5D1E /* twang.xml in Resources */, AF918B80158FC53E002B5D1E /* vermiculate.xml in Resources */, AF46E9EA1CBBA42F00240FBC /* unicrud.xml in Resources */, AFDA65A6178A541A0070D24B /* unknownpleasures.xml in Resources */, AF918B83158FC53E002B5D1E /* voronoi.xml in Resources */, AF918B84158FC53E002B5D1E /* wander.xml in Resources */, AF918B86158FC53E002B5D1E /* whirlwindwarp.xml in Resources */, AF39E2AE198A15820064A58D /* winduprobot.xml in Resources */, AF918B89158FC53E002B5D1E /* wormhole.xml in Resources */, AF918B8A158FC53E002B5D1E /* xanalogtv.xml in Resources */, AF918B8B158FC53E002B5D1E /* xflame.xml in Resources */, AF918B8C158FC53E002B5D1E /* xjack.xml in Resources */, AF918B8D158FC53E002B5D1E /* xlyap.xml in Resources */, AF918B8E158FC53E002B5D1E /* xmatrix.xml in Resources */, AF918B8F158FC53E002B5D1E /* xrayswarm.xml in Resources */, AF918B90158FC53E002B5D1E /* xspirograph.xml in Resources */, AF918B91158FC554002B5D1E /* zoom.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF975730099C317000B05160 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AF97573F099C31BB00B05160 /* imsmap.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF975778099C374A00B05160 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AF975788099C378B00B05160 /* moire.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF9757C5099C3E6300B05160 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AFCCCBB009BFE4B000353F4D /* rdbomb.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF97580B099C41D500B05160 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AF97581B099C423600B05160 /* xflame.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF975868099C475900B05160 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AF975879099C490500B05160 /* shadebobs.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF975A39099C681F00B05160 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AF975A48099C688B00B05160 /* metaballs.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF975A6F099C6AB200B05160 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AF975A82099C6B2700B05160 /* eruption.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF975A89099C6BC300B05160 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AF975A98099C6C2000B05160 /* barcode.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF975ADA099C6EB100B05160 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AF975AED099C6EFE00B05160 /* fireworkx.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF975AFF099C6FE400B05160 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AF975B16099C70B200B05160 /* memscroller.xml in Resources */, AFC43E7C1C6AA78800C89999 /* OCRAStd.otf in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF975C15099C8C1500B05160 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AF975C28099C8C6A00B05160 /* halo.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF975C40099C8DCF00B05160 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AF975C55099C8E2800B05160 /* greynetic.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF975C60099C8F3F00B05160 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AF975C75099C8FAC00B05160 /* noseguy.xml in Resources */, AF0FAF0F09CA6FF900EE1051 /* xscreensaver-text in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF975D55099CA0F000B05160 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AF975D65099CA14B00B05160 /* rocks.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF976FB80989CAA2001F8B92 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AF976FCD0989CAEA001F8B92 /* deco.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF97702A0989D1E6001F8B92 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AF9770430989D226001F8B92 /* rorschach.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF9770670989D2F6001F8B92 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AF9770800989D32E001F8B92 /* attraction.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF9771D30989DC4A001F8B92 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AF9772E30989DFC6001F8B92 /* SaverRunner.nib in Resources */, AF51FD3915845FCB00E5741F /* SaverRunner.icns in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF998EDD0A083DB30051049D /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AF998EFB0A083E8C0051049D /* topblock.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF9D466909B5109C006E59CF /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AF9D467A09B51126006E59CF /* decayscreen.xml in Resources */, AF0FAF1A09CA712600EE1051 /* xscreensaver-getimage-file in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF9D474709B5300A006E59CF /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AF9D475609B5306A006E59CF /* slidescreen.xml in Resources */, AF0FAF2409CA712600EE1051 /* xscreensaver-getimage-file in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF9D476209B53166006E59CF /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AF9D48D309B53214006E59CF /* zoom.xml in Resources */, AF0FAF2909CA712600EE1051 /* xscreensaver-getimage-file in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF9D48DE09B53322006E59CF /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AF9D48ED09B5338A006E59CF /* bumps.xml in Resources */, AF0FAF1809CA712600EE1051 /* xscreensaver-getimage-file in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF9D48F709B535DA006E59CF /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AF9D490609B536DE006E59CF /* distort.xml in Resources */, AF0FAF1B09CA712600EE1051 /* xscreensaver-getimage-file in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF9D492E09B53CBA006E59CF /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AF9D493D09B53D3B006E59CF /* ripples.xml in Resources */, AF0FAF2209CA712600EE1051 /* xscreensaver-getimage-file in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF9D495709B53FC9006E59CF /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AF9D496609B54087006E59CF /* rotzoomer.xml in Resources */, AF0FAF2309CA712600EE1051 /* xscreensaver-getimage-file in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF9D496F09B5411D006E59CF /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AF9D497E09B541CE006E59CF /* twang.xml in Resources */, AF0FAF2709CA712600EE1051 /* xscreensaver-getimage-file in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF9D499A09B544C2006E59CF /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AF9D49A909B5457B006E59CF /* spotlight.xml in Resources */, AF0FAF2609CA712600EE1051 /* xscreensaver-getimage-file in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF9D4C6C09B59F27006E59CF /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AF9D4C7B09B5A02D006E59CF /* xlyap.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF9D4CEA09B5AA8E006E59CF /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AF9D4CF909B5AC73006E59CF /* pong.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF9D4D8109B5B2DC006E59CF /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AF9D4D9109B5B42B006E59CF /* xanalogtv.xml in Resources */, AF0FAF2809CA712600EE1051 /* xscreensaver-getimage-file in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF9D4DB209B5B71E006E59CF /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AF9D4DC209B5B862006E59CF /* bsod.xml in Resources */, AF0FAF1709CA712600EE1051 /* xscreensaver-getimage-file in Resources */, AFC43E771C684BE400C89999 /* PxPlus_IBM_VGA8.ttf in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF9D4DEF09B5BB19006E59CF /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AF9D4E0409B5BC85006E59CF /* apple2.xml in Resources */, AF0FAF0C09CA6FF900EE1051 /* xscreensaver-text in Resources */, AF0FAF1409CA712600EE1051 /* xscreensaver-getimage-file in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFA2118F1CD59DAF00C0D2A1 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AFA211A61CD5A02600C0D2A1 /* raverhoop.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFA339310B058505002B0E7D /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AFA33BB00B05860F002B0E7D /* webcollage.xml in Resources */, AFA33BDD0B058A30002B0E7D /* webcollage-helper in Resources */, AFA33C0C0B058ED2002B0E7D /* webcollage in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFA55949099330B000F3E977 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AFA5595C099330E500F3E977 /* cage.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFA559700993317900F3E977 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AFA55981099331AC00F3E977 /* moebius.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFA559950993322100F3E977 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AFA559A70993325200F3E977 /* superquadrics.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFA559B80993328000F3E977 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AFA559CB099332CF00F3E977 /* morph3d.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFA559D20993330600F3E977 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AFA559E90993333D00F3E977 /* rubik.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFA55A060993340300F3E977 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AFA55A190993344100F3E977 /* stairs.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFA55A23099334A000F3E977 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AFA55A34099334CB00F3E977 /* sproingies.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFA55A7C0993364300F3E977 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AFA55A8D0993366F00F3E977 /* lament.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFA55AD209933CEF00F3E977 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AFA55AE309933D1C00F3E977 /* bubble3d.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFA55B0C09933E0500F3E977 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AFA55B2009933E3100F3E977 /* glplanet.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFA55B2809933E8D00F3E977 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AFA55B3909933EB400F3E977 /* pulsar.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFA55B7C09933F7200F3E977 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AFA55B8D09933FAA00F3E977 /* sierpinski3d.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFA55B9409933FDA00F3E977 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AFA55BA50993400200F3E977 /* gflux.xml in Resources */, AF0FAF1D09CA712600EE1051 /* xscreensaver-getimage-file in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFA55BAE099340CE00F3E977 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AFA55BBF0993410100F3E977 /* circuit.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFA55BE70993429100F3E977 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AFA55BF8099342BF00F3E977 /* menger.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFA55C110993431300F3E977 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AFA55C220993433D00F3E977 /* engine.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFA55C7A099349A600F3E977 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AFA55C8B099349CC00F3E977 /* glsnake.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFA55CAC09934BB200F3E977 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AFA55CBD09934BDD00F3E977 /* boxed.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFA55CCF09934CE400F3E977 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AFA55CE009934D1500F3E977 /* glforestfire.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFA55D3F0993565300F3E977 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AFA55D500993568200F3E977 /* sballs.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFA55D650993584B00F3E977 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AFA55D760993587600F3E977 /* cubenetic.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFA55D82099358C400F3E977 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AFA55D93099358FB00F3E977 /* spheremonics.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFA55DCB09935D7000F3E977 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AFA55DDC09935D9D00F3E977 /* lavalite.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFA55DF309935E4900F3E977 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AFA55E0509935E7E00F3E977 /* queens.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFA55E1009935EDC00F3E977 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AFA55E2109935F0B00F3E977 /* endgame.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFA55E3209935F8E00F3E977 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AFA55E4409935FBA00F3E977 /* glblur.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFA55E5109935FF900F3E977 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AFA55E970993602F00F3E977 /* flyingtoasters.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFA55ECA099360E300F3E977 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AFA55EE50993610F00F3E977 /* bouncingcow.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFA55F09099361B700F3E977 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AFA55F20099361E800F3E977 /* jigglypuff.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFA55F2D0993622F00F3E977 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AFA55F3E0993625B00F3E977 /* klein.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFA55F450993629000F3E977 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AFA55F57099362C500F3E977 /* hypertorus.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFA55F750993643600F3E977 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AFA55F860993646900F3E977 /* glmatrix.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFA55FD609936BFA00F3E977 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AFA55FF209936C2F00F3E977 /* cubestorm.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFA55FFC09936C6D00F3E977 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AFA5600D09936C9D00F3E977 /* glknots.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFA5601709936CC800F3E977 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AFA5602809936CF700F3E977 /* blocktube.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFA5603509936D5100F3E977 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AF0D117D0E41566300BB14A4 /* xscreensaver-getimage-file in Resources */, AFA5604609936DAB00F3E977 /* flipflop.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFA5604D09936E2100F3E977 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AFA560820993700500F3E977 /* antinspect.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFA5606509936F3800F3E977 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AFA560830993700900F3E977 /* antspotlight.xml in Resources */, AF0FAF1309CA712600EE1051 /* xscreensaver-getimage-file in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFA560B10993718D00F3E977 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AFA560C2099371BE00F3E977 /* polytopes.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFA561000993781600F3E977 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AFA561110993784D00F3E977 /* molecule.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFA5615B09937C0D00F3E977 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AFA5616C09937C6800F3E977 /* blinkbox.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFA5617E09937CF100F3E977 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AFA5618F09937D2100F3E977 /* noof.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFA561A009937D7E00F3E977 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AFA561B109937DB400F3E977 /* polyhedra.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFA562090993849F00F3E977 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AFA5621B099384DA00F3E977 /* providence.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFA562220993852500F3E977 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AFA562330993855500F3E977 /* pinion.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFA562C2099392C600F3E977 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AFA562D3099392F900F3E977 /* boing.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFA562DD099393C900F3E977 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AFA562EE0993940400F3E977 /* antmaze.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFA562F50993943B00F3E977 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AFA563060993947300F3E977 /* tangram.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFA563160993951000F3E977 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AFA563280993955000F3E977 /* crackberg.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFA56334099395ED00F3E977 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AFA563740993977100F3E977 /* glhanoi.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFA56354099396C000F3E977 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AFA563770993979A00F3E977 /* cube21.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFA5637C099397B300F3E977 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AFA5638D099397ED00F3E977 /* timetunnel.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFA563A7099398BB00F3E977 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AFA563B8099398F700F3E977 /* juggler3d.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFACE8761CC83458008B24CD /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AFACE88D1CC83608008B24CD /* energystream.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFB591AA178B812C00EA4005 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AFB591BE178B81E600EA4005 /* hexadrop.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFBFE74E178642DC00432B21 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AFBFE765178643B200432B21 /* Apple2.saver in Resources */, AFBFE74F178642DC00432B21 /* SaverRunner.nib in Resources */, AFBFE750178642DC00432B21 /* SaverRunner.icns in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFBFE76C178647FE00432B21 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AFBFE7831786483B00432B21 /* Phosphor.saver in Resources */, AFBFE76F178647FE00432B21 /* SaverRunner.nib in Resources */, AFBFE770178647FE00432B21 /* SaverRunner.icns in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFC0E8AE1CDC601A008CAFAC /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AFC0E8C61CDC60DB008CAFAC /* hydrostat.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFCF833E1AF5B515008BB7E1 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AFCF83551AF5B5FD008BB7E1 /* splitflap.xml in Resources */, AFE349291B033A8200AF3D73 /* xscreensaver-text in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFD51B1E0F063B4A00471C02 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AFD51B200F063B4A00471C02 /* xscreensaver-getimage-file in Resources */, AFD51DB90F063BE700471C02 /* photopile.xml in Resources */, AF5BEEFD1D2AFE21002E6D51 /* OCRAStd.otf in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFD56DF40996A03800BA26F7 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AFD56E9F0996A23800BA26F7 /* gltext.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFD56EB10996A72600BA26F7 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AF642330099F45CA000F4CD4 /* braid.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFD56EDD0996A95700BA26F7 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AFD56F1D0996AB1D00BA26F7 /* forest.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFD56F0E0996AAFA00BA26F7 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AFD56F1E0996AB4000BA26F7 /* vines.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFD56F260996AB8A00BA26F7 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AFD56F350996ABB300BA26F7 /* galaxy.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFD56F520996AEEE00BA26F7 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AFD56F610996AF1500BA26F7 /* grav.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFD56F6E0996B01600BA26F7 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AFD56F870996B04D00BA26F7 /* hopalong.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFD56F8F0996B09400BA26F7 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AFD56F9F0996B0D000BA26F7 /* laser.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFD56FA60996B10F00BA26F7 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AFD56FB50996B15000BA26F7 /* lightning.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFD56FBC0996B18F00BA26F7 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AFD56FCB0996B1BE00BA26F7 /* lisa.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFD56FD20996B20900BA26F7 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AFD56FE10996B24B00BA26F7 /* lissie.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFD56FFB0996B43800BA26F7 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AFD5700B0996B47E00BA26F7 /* penrose.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFD570120996B4CC00BA26F7 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AFD570210996B51100BA26F7 /* sierpinski.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFD570290996B56D00BA26F7 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AFD5703A0996B5D000BA26F7 /* sphere.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFD570460996B61600BA26F7 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AFD570550996B65A00BA26F7 /* spiral.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFD5705C0996B6A300BA26F7 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AFD5706B0996B6E700BA26F7 /* fadeplot.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFD570720996B72700BA26F7 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AFD570810996B77F00BA26F7 /* mountain.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFD570880996B80300BA26F7 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AFD570970996B84E00BA26F7 /* triangle.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFD5709E0996B88E00BA26F7 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AFD570AD0996B8DC00BA26F7 /* worm.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFD570B40996B93000BA26F7 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AFD570C30996B96F00BA26F7 /* rotor.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFD570CC0996B9F800BA26F7 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AFD570DD0996BA4600BA26F7 /* ant.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFD570ED0996BBBF00BA26F7 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AFD570FE0996BC2000BA26F7 /* flow.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFD571160996BE9300BA26F7 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AFD571270996BEE100BA26F7 /* discrete.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFD5712F0996BF2E00BA26F7 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AFD5713E0996BFA500BA26F7 /* apollonian.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFD571460996C01700BA26F7 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AFD571550996C05F00BA26F7 /* euler2d.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFD5715C0996C0CE00BA26F7 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AFCCCBB309BFE51900353F4D /* thornbird.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFD571B80996D9DC00BA26F7 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AFD571C70996DA3300BA26F7 /* juggle.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFD572250996E4A300BA26F7 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AFD572340996E52B00BA26F7 /* swirl.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFD572700996EE8500BA26F7 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AFD5727F0996EF1900BA26F7 /* polyominoes.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFD572A80996F99600BA26F7 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AFD572B80996FAF900BA26F7 /* bouboule.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFD572C50996FC0F00BA26F7 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AFD572EC0997005900BA26F7 /* crystal.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFD572FC099701C000BA26F7 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AFD5730B099702AF00BA26F7 /* julia.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFD573600997411200BA26F7 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AFD573700997418D00BA26F7 /* strange.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFDA6591178A52B70070D24B /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AFDA65A5178A541A0070D24B /* unknownpleasures.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFE2A4590E2E904600ADB298 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AFE2A4750E2E911200ADB298 /* skytentacles.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFE30BEB0E52B14700CCF4A5 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AFE30BFE0E52B18300CCF4A5 /* sonar.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFE6A1850CDD7B2E002805BF /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AFE6A40E0CDD7BDC002805BF /* moebiusgears.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFE6A41E0CDD7FAA002805BF /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AFE6A4370CDD8027002805BF /* abstractile.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFEC23D01CB6EAE100DE138F /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AFEC23E71CB6EC0B00DE138F /* dymaxionmap.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFEE10501D13406000AAC8F7 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AFEE10691D13420700AAC8F7 /* cubetwist.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFEE106F1D15EB0800AAC8F7 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AFEE10871D15EBD900AAC8F7 /* cubestack.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFEE108E1D17E20B00AAC8F7 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AFEE10A61D17E2C900AAC8F7 /* splodesic.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFF2868217860E830050A578 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AFF28696178611720050A578 /* quasicrystal.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFF3C9EB17CCAC440028F240 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AFF3C9FE17CCAD9A0028F240 /* geodesic.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFF463390C4403E400EE6509 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AFF4634C0C44046500EE6509 /* cwaves.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFF4635B0C440AEF00EE6509 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AFF463740C440BAC00EE6509 /* glcells.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFFAB31819158CE40020F021 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( AFFAB32F19158E2A0020F021 /* projectiveplane.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; CE3D01541B76F4C100993C75 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( CE3D01691B76F88A00993C75 /* testx11.xml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXResourcesBuildPhase section */ /* Begin PBXRezBuildPhase section */ AF08399E09930B6B00277BE9 /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AF083A44099311D700277BE9 /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AF0DC7B80C4C73F600D76972 /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AF0DCA510C4CBB0D00D76972 /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AF1A176E0D6D6EE3008AF328 /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AF1B0FB71D7AB4740011DBE4 /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AF32D9EF0F3AD0B40080F535 /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AF3581D01431D47B00E09C51 /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AF358211143330F900E09C51 /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AF35E89B0E63823600691F2F /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AF39382A1D0FBD6A00205406 /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AF39E291198A11F60064A58D /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AF3C71540D624BF50030CC0D /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AF46E9DF1CBBA2B300240FBC /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AF476FC2099D154F001F091E /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AF476FE7099D1686001F091E /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AF477058099D4385001F091E /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AF477175099D4786001F091E /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AF47718B099D4803001F091E /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AF4771B3099D4949001F091E /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AF4771E7099D4D9A001F091E /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AF4771FE099D4E63001F091E /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AF477214099D4EE8001F091E /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AF47722A099D4F67001F091E /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AF47725F099D5717001F091E /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AF477277099D57B9001F091E /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AF47728F099D5926001F091E /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AF47738E099D65A1001F091E /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AF4773A6099D6648001F091E /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AF4773CD099D67B9001F091E /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AF47740E099D69E7001F091E /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AF477433099D7C70001F091E /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AF47744E099D7D33001F091E /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AF47748F099D89E4001F091E /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AF4774A5099D8A74001F091E /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AF4774C0099D8B5F001F091E /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AF4774DA099D8BFF001F091E /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AF477569099D9A1A001F091E /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AF47758F099D9C28001F091E /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AF4775AB099D9CF7001F091E /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AF4775E4099D9F69001F091E /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AF4775FE099DA030001F091E /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AF47761F099DA26C001F091E /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AF477650099DA6D0001F091E /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AF477666099DA78E001F091E /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AF47767C099DA849001F091E /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AF47769B099DAA6F001F091E /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AF4776B6099DABDD001F091E /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AF4776CC099DAC8A001F091E /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AF4776E7099DADDF001F091E /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AF4776FD099DAE7A001F091E /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AF477719099DAF9F001F091E /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AF47772F099DB044001F091E /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AF47775E099DB61E001F091E /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AF477780099DB965001F091E /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AF47779C099DBA90001F091E /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AF4777DD099DC183001F091E /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AF4778B7099DDB79001F091E /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AF4778D3099DDCAE001F091E /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AF4778F4099DDDC8001F091E /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AF477915099DE379001F091E /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AF477936099DE4C7001F091E /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AF480C54098E301400FB32B8 /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AF480D7D098EEDDE00FB32B8 /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AF4810F709909FBA00FB32B8 /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AF4812600990CE2700FB32B8 /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AF4812C20990D3D900FB32B8 /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AF48DEFE0A0C25E000F94CF9 /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AF4A3458102A593600A81B2A /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AF4FD6F50CE7A486005EE58E /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AF4FF4C90D52CBDE00666F98 /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AF5C9B081A0CCE6E00B0147A /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AF63A8011AB4EDDB00593C75 /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AF642401099FF9C2000F4CD4 /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AF6425D809A18855000F4CD4 /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AF6425F809A189EC000F4CD4 /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AF64261B09A18D6C000F4CD4 /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AF64263809A18F54000F4CD4 /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AF64265B09A19229000F4CD4 /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AF64268709A194B0000F4CD4 /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AF64277D09A1D37A000F4CD4 /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AF6427B409A2DE36000F4CD4 /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AF68A48D19196CF800D41CD1 /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AF73FF311A09877F00E485E9 /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AF75110D1782B5B900380EA1 /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AF7776F209B63ABF00EA3033 /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AF77772609B6416100EA3033 /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AF77774D09B6446500EA3033 /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AF77778409B6497800EA3033 /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AF77779E09B64A5200EA3033 /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AF7777B809B64B2600EA3033 /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AF7777E009B64C6B00EA3033 /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AF7777FA09B64E3100EA3033 /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AF77782109B6504400EA3033 /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AF77785409B6528100EA3033 /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AF77787009B6536000EA3033 /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AF77788B09B6563500EA3033 /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AF7778B109B659C800EA3033 /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AF78D184142DD8F3002AAF77 /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AF794F70099748450059A8B0 /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AF794F9A09974A320059A8B0 /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AF794FD909974FA60059A8B0 /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AF7ACFCF19FF0A9200BD752B /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AF975739099C317000B05160 /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AF975781099C374A00B05160 /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AF9757CE099C3E6300B05160 /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AF975814099C41D500B05160 /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AF975871099C475900B05160 /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AF975A42099C681F00B05160 /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AF975A78099C6AB200B05160 /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AF975A92099C6BC300B05160 /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AF975AE3099C6EB100B05160 /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AF975B08099C6FE400B05160 /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AF975C1E099C8C1500B05160 /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AF975C4A099C8DCF00B05160 /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AF975C6A099C8F3F00B05160 /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AF975D5F099CA0F000B05160 /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AF9770150989D0F6001F8B92 /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AF97703C0989D1E6001F8B92 /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AF9770790989D2F6001F8B92 /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AF998EE90A083DB30051049D /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AF9D467209B5109C006E59CF /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AF9D475009B5300A006E59CF /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AF9D476B09B53166006E59CF /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AF9D48E709B53322006E59CF /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AF9D490009B535DA006E59CF /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AF9D493709B53CBA006E59CF /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AF9D496009B53FC9006E59CF /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AF9D497809B5411D006E59CF /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AF9D49A309B544C2006E59CF /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AF9D4C7509B59F27006E59CF /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AF9D4CF309B5AA8E006E59CF /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AF9D4D8B09B5B2DC006E59CF /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AF9D4DBC09B5B71E006E59CF /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AF9D4DFA09B5BB19006E59CF /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AFA2119C1CD59DAF00C0D2A1 /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AFA3393B0B058505002B0E7D /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AFA55956099330B000F3E977 /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AFA5597B0993317900F3E977 /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AFA559A00993322100F3E977 /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AFA559C30993328000F3E977 /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AFA559DD0993330600F3E977 /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AFA55A110993340300F3E977 /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AFA55A2E099334A000F3E977 /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AFA55A870993364300F3E977 /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AFA55ADD09933CEF00F3E977 /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AFA55B1A09933E0500F3E977 /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AFA55B3309933E8D00F3E977 /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AFA55B8709933F7200F3E977 /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AFA55B9F09933FDA00F3E977 /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AFA55BB9099340CE00F3E977 /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AFA55BF20993429100F3E977 /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AFA55C1C0993431300F3E977 /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AFA55C85099349A600F3E977 /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AFA55CB709934BB200F3E977 /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AFA55CDA09934CE400F3E977 /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AFA55D4A0993565300F3E977 /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AFA55D700993584B00F3E977 /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AFA55D8D099358C400F3E977 /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AFA55DD609935D7000F3E977 /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AFA55DFF09935E4900F3E977 /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AFA55E1B09935EDC00F3E977 /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AFA55E3E09935F8E00F3E977 /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AFA55E5C09935FF900F3E977 /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AFA55EDF099360E300F3E977 /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AFA55F1A099361B700F3E977 /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AFA55F380993622F00F3E977 /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AFA55F500993629000F3E977 /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AFA55F800993643600F3E977 /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AFA55FE109936BFA00F3E977 /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AFA5600709936C6D00F3E977 /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AFA5602209936CC800F3E977 /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AFA5604009936D5100F3E977 /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AFA5605809936E2100F3E977 /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AFA5607009936F3800F3E977 /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AFA560BC0993718D00F3E977 /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AFA5610B0993781600F3E977 /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AFA5616609937C0D00F3E977 /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AFA5618909937CF100F3E977 /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AFA561AB09937D7E00F3E977 /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AFA562150993849F00F3E977 /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AFA5622D0993852500F3E977 /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AFA562CD099392C600F3E977 /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AFA562E8099393C900F3E977 /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AFA563000993943B00F3E977 /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AFA563220993951000F3E977 /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AFA5633F099395ED00F3E977 /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AFA5635F099396C000F3E977 /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AFA56387099397B300F3E977 /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AFA563B2099398BB00F3E977 /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AFACE8831CC83458008B24CD /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AFB591B5178B812C00EA4005 /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AFC0E8BB1CDC601A008CAFAC /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AFCF834B1AF5B515008BB7E1 /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AFD51B2B0F063B4A00471C02 /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AFD56E000996A03800BA26F7 /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AFD56EBA0996A72600BA26F7 /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AFD56EE60996A95700BA26F7 /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AFD56F170996AAFA00BA26F7 /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AFD56F2F0996AB8A00BA26F7 /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AFD56F5B0996AEEE00BA26F7 /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AFD56F770996B01600BA26F7 /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AFD56F980996B09400BA26F7 /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AFD56FAF0996B10F00BA26F7 /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AFD56FC50996B18F00BA26F7 /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AFD56FDB0996B20900BA26F7 /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AFD570040996B43800BA26F7 /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AFD5701B0996B4CC00BA26F7 /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AFD570320996B56D00BA26F7 /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AFD5704F0996B61600BA26F7 /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AFD570650996B6A300BA26F7 /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AFD5707B0996B72700BA26F7 /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AFD570910996B80300BA26F7 /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AFD570A70996B88E00BA26F7 /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AFD570BD0996B93000BA26F7 /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AFD570D50996B9F800BA26F7 /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AFD570F60996BBBF00BA26F7 /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AFD5711F0996BE9300BA26F7 /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AFD571380996BF2E00BA26F7 /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AFD5714F0996C01700BA26F7 /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AFD571650996C0CE00BA26F7 /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AFD571C10996D9DC00BA26F7 /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AFD5722E0996E4A300BA26F7 /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AFD572790996EE8500BA26F7 /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AFD572B10996F99600BA26F7 /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AFD572CE0996FC0F00BA26F7 /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AFD57305099701C000BA26F7 /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AFD573690997411200BA26F7 /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AFDA659C178A52B70070D24B /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AFE2A4650E2E904600ADB298 /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AFE30BF70E52B14700CCF4A5 /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AFE6A1920CDD7B2E002805BF /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AFE6A4280CDD7FAA002805BF /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AFEC23DD1CB6EAE100DE138F /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AFEE105D1D13406000AAC8F7 /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AFEE107C1D15EB0800AAC8F7 /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AFEE109B1D17E20B00AAC8F7 /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AFF2868D17860E830050A578 /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AFF3C9F617CCAC440028F240 /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AFF463420C4403E400EE6509 /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AFF463670C440AEF00EE6509 /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; AFFAB32419158CE40020F021 /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; CE3D01611B76F4C100993C75 /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXRezBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ AF0DC7B90C4C73F600D76972 /* Run Update Info Plist */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Run Update Info Plist"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; showEnvVarsInLog = 0; }; AF0DCA520C4CBB0D00D76972 /* Run Update Info Plist */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Run Update Info Plist"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; showEnvVarsInLog = 0; }; AF1A176F0D6D6EE3008AF328 /* Run Update Info Plist */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Run Update Info Plist"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; showEnvVarsInLog = 0; }; AF1ADA1E18501DC200932759 /* Run Update Info Plist */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Run Update Info Plist"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; showEnvVarsInLog = 0; }; AF1B0FB81D7AB4740011DBE4 /* Run Update Info Plist */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Run Update Info Plist"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; showEnvVarsInLog = 0; }; AF32D9F00F3AD0B40080F535 /* Run Update Info Plist */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Run Update Info Plist"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; showEnvVarsInLog = 0; }; AF3581D11431D47B00E09C51 /* Run Update Info Plist */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Run Update Info Plist"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; showEnvVarsInLog = 0; }; AF358212143330F900E09C51 /* Run Update Info Plist */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Run Update Info Plist"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; showEnvVarsInLog = 0; }; AF35E89C0E63823600691F2F /* Run Update Info Plist */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Run Update Info Plist"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; showEnvVarsInLog = 0; }; AF39382B1D0FBD6A00205406 /* Run Update Info Plist */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Run Update Info Plist"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; showEnvVarsInLog = 0; }; AF39E292198A11F60064A58D /* Run Update Info Plist */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Run Update Info Plist"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; showEnvVarsInLog = 0; }; AF3C71550D624BF50030CC0D /* Run Update Info Plist */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Run Update Info Plist"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; showEnvVarsInLog = 0; }; AF46E9E01CBBA2B300240FBC /* Run Update Info Plist */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Run Update Info Plist"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; showEnvVarsInLog = 0; }; AF48DEFF0A0C25E000F94CF9 /* Run Update Info Plist */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Run Update Info Plist"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; showEnvVarsInLog = 0; }; AF4A3459102A593600A81B2A /* Run Update Info Plist */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Run Update Info Plist"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; showEnvVarsInLog = 0; }; AF4E1D1819CE7013002B6190 /* Update GC build settings */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Update GC build settings"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "#!/bin/sh\n\n# Edit the contents of \"xscreensaver.xcconfig\" based on the running\n# Xcode version. If we are running Xcode 5.0.2, we *must* turn on GC.\n# If we are running a newer version of Xcode than that, we *cannot*\n# turn on GC.\n\nTMP=`mktemp -t xcode`\nSRC=\"$SRCROOT/xscreensaver.xcconfig\"\nMACOSX_DEPLOYMENT_TARGET=10.7\nOBJC_GC_CFLAGS=\nOBJC_NO_GC_CFLAGS=\nif [ \"$XCODE_VERSION_MAJOR\" -lt \"0600\" ]; then\n MACOSX_DEPLOYMENT_TARGET=10.4\n OBJC_GC_CFLAGS=\"-fobjc-gc\"\n OBJC_NO_GC_CFLAGS=\"-fno-objc-gc\"\nfi\n\nrm -f \"$TMP\"\nsed -e \"s/^\\(MACOSX_DEPLOYMENT_TARGET=\\).*/\\1${MACOSX_DEPLOYMENT_TARGET}/\" \\\n -e \"s/^\\(OBJC_GC_CFLAGS=\\).*/\\1${OBJC_GC_CFLAGS}/\" \\\n -e \"s/^\\(OBJC_NO_GC_CFLAGS=\\).*/\\1${OBJC_NO_GC_CFLAGS}/\" \\\n < $SRC > $TMP\nif ! ( cmp -s \"$SRC\" \"$TMP\" ); then\necho \"$SRC updated:\"\n diff -U0 \"$SRC\" \"$TMP\"\n cat \"$TMP\" > \"$SRC\"\nelse\n echo \"$SRC unchanged\"\nfi\n\nrm -f \"$TMP\"\nexit 0\n"; showEnvVarsInLog = 0; }; AF4FD6F60CE7A486005EE58E /* Run Update Info Plist */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Run Update Info Plist"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; showEnvVarsInLog = 0; }; AF4FF4CA0D52CBDE00666F98 /* Run Update Info Plist */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Run Update Info Plist"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; showEnvVarsInLog = 0; }; AF578FA11434E918002455DD /* Run Update Info Plist */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Run Update Info Plist"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; showEnvVarsInLog = 0; }; AF5C9B091A0CCE6E00B0147A /* Run Update Info Plist */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Run Update Info Plist"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; showEnvVarsInLog = 0; }; AF63A8021AB4EDDB00593C75 /* Run Update Info Plist */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Run Update Info Plist"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; showEnvVarsInLog = 0; }; AF63F24F1C3465BE0033E133 /* Update Function Table */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Update Function Table"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/build-fntable.pl $SOURCE_ROOT/ios-function-table.m"; }; AF63F44A1C3465BE0033E133 /* Run Update Info Plist */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Run Update Info Plist"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; showEnvVarsInLog = 0; }; AF63F4571C34682A0033E133 /* Update Function Table */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Update Function Table"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/build-fntable.pl $SOURCE_ROOT/ios-function-table.m"; }; AF63F4701C34682A0033E133 /* Run Update Info Plist */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Run Update Info Plist"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; showEnvVarsInLog = 0; }; AF63F47F1C3469FC0033E133 /* Update Function Table */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Update Function Table"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/build-fntable.pl $SOURCE_ROOT/ios-function-table.m"; }; AF63F4961C3469FC0033E133 /* Run Update Info Plist */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Run Update Info Plist"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; showEnvVarsInLog = 0; }; AF68A48E19196CF800D41CD1 /* Run Update Info Plist */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Run Update Info Plist"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; showEnvVarsInLog = 0; }; AF73FF321A09877F00E485E9 /* Run Update Info Plist */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Run Update Info Plist"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; showEnvVarsInLog = 0; }; AF75110E1782B5B900380EA1 /* Run Update Info Plist */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Run Update Info Plist"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; showEnvVarsInLog = 0; }; AF78D185142DD8F3002AAF77 /* Run Update Info Plist */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Run Update Info Plist"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; showEnvVarsInLog = 0; }; AF7ACFD019FF0A9200BD752B /* Run Update Info Plist */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Run Update Info Plist"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; showEnvVarsInLog = 0; }; AF7E080115925EE300D81407 /* ICMP Sanity Check */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "ICMP Sanity Check"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/icmp-warning.pl"; }; AF7E08021592661100D81407 /* ICMP Sanity Check */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "ICMP Sanity Check"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/icmp-warning.pl"; }; AF91898A158FC00A002B5D1E /* Run Update Info Plist */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Run Update Info Plist"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; showEnvVarsInLog = 0; }; AF94E7421A16F66900289B93 /* Update Function Table */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Update Function Table"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/build-fntable.pl $SOURCE_ROOT/ios-function-table.m"; }; AF998EEA0A083DB30051049D /* Run Update Info Plist */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Run Update Info Plist"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; showEnvVarsInLog = 0; }; AFA2119D1CD59DAF00C0D2A1 /* Run Update Info Plist */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Run Update Info Plist"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; showEnvVarsInLog = 0; }; AFA3393C0B058505002B0E7D /* Run Update Info Plist */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Run Update Info Plist"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; showEnvVarsInLog = 0; }; AFA3D69209C03B5C00E4CFCA /* Run Update Info Plist */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Run Update Info Plist"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; showEnvVarsInLog = 0; }; AFA3D69409C03B6200E4CFCA /* Run Update Info Plist */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Run Update Info Plist"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; showEnvVarsInLog = 0; }; AFA3D85B09C03BD300E4CFCA /* Run Update Info Plist */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Run Update Info Plist"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; showEnvVarsInLog = 0; }; AFA3D85D09C03BD700E4CFCA /* Run Update Info Plist */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Run Update Info Plist"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; showEnvVarsInLog = 0; }; AFA3D85F09C03BDA00E4CFCA /* Run Update Info Plist */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Run Update Info Plist"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; showEnvVarsInLog = 0; }; AFA3D86109C03BDE00E4CFCA /* Run Update Info Plist */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Run Update Info Plist"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; showEnvVarsInLog = 0; }; AFA3D86309C03BE200E4CFCA /* Run Update Info Plist */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Run Update Info Plist"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; showEnvVarsInLog = 0; }; AFA3D86509C03BE500E4CFCA /* Run Update Info Plist */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Run Update Info Plist"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; showEnvVarsInLog = 0; }; AFA3D86709C03BE800E4CFCA /* Run Update Info Plist */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Run Update Info Plist"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; showEnvVarsInLog = 0; }; AFA3D86909C03BEC00E4CFCA /* Run Update Info Plist */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Run Update Info Plist"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; showEnvVarsInLog = 0; }; AFA3D86B09C03BEF00E4CFCA /* Run Update Info Plist */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Run Update Info Plist"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; showEnvVarsInLog = 0; }; AFA3D86D09C03BF300E4CFCA /* Run Update Info Plist */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Run Update Info Plist"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; showEnvVarsInLog = 0; }; AFA3D86F09C03BF700E4CFCA /* Run Update Info Plist */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Run Update Info Plist"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; showEnvVarsInLog = 0; }; AFA3D87109C03BFB00E4CFCA /* Run Update Info Plist */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Run Update Info Plist"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; showEnvVarsInLog = 0; }; AFA3D87309C03C0000E4CFCA /* Run Update Info Plist */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Run Update Info Plist"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; showEnvVarsInLog = 0; }; AFA3D87509C03C0400E4CFCA /* Run Update Info Plist */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Run Update Info Plist"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; showEnvVarsInLog = 0; }; AFA3D87709C03C0A00E4CFCA /* Run Update Info Plist */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Run Update Info Plist"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; showEnvVarsInLog = 0; }; AFA3D87909C03C1200E4CFCA /* Run Update Info Plist */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Run Update Info Plist"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; showEnvVarsInLog = 0; }; AFA3D87B09C03C1700E4CFCA /* Run Update Info Plist */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Run Update Info Plist"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; showEnvVarsInLog = 0; }; AFA3D87D09C03C1B00E4CFCA /* Run Update Info Plist */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Run Update Info Plist"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; showEnvVarsInLog = 0; }; AFA3D87F09C03C1E00E4CFCA /* Run Update Info Plist */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Run Update Info Plist"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; showEnvVarsInLog = 0; }; AFA3D88109C03C2100E4CFCA /* Run Update Info Plist */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Run Update Info Plist"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; showEnvVarsInLog = 0; }; AFA3D88309C03C2400E4CFCA /* Run Update Info Plist */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Run Update Info Plist"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; showEnvVarsInLog = 0; }; AFA3D88509C03C2700E4CFCA /* Run Update Info Plist */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Run Update Info Plist"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; showEnvVarsInLog = 0; }; AFA3D88709C03C2A00E4CFCA /* Run Update Info Plist */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Run Update Info Plist"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; showEnvVarsInLog = 0; }; AFA3D88909C03C2E00E4CFCA /* Run Update Info Plist */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Run Update Info Plist"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; showEnvVarsInLog = 0; }; AFA3D88B09C03C3200E4CFCA /* Run Update Info Plist */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Run Update Info Plist"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; showEnvVarsInLog = 0; }; AFA3D88D09C03C3600E4CFCA /* Run Update Info Plist */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Run Update Info Plist"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; showEnvVarsInLog = 0; }; AFA3D88F09C03C3900E4CFCA /* Run Update Info Plist */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Run Update Info Plist"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; showEnvVarsInLog = 0; }; AFA3D89109C03C3C00E4CFCA /* Run Update Info Plist */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Run Update Info Plist"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; showEnvVarsInLog = 0; }; AFA3D89309C03C4000E4CFCA /* Run Update Info Plist */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Run Update Info Plist"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; showEnvVarsInLog = 0; }; AFA3D89509C03C4400E4CFCA /* Run Update Info Plist */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Run Update Info Plist"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; showEnvVarsInLog = 0; }; AFA3D89709C03C4700E4CFCA /* Run Update Info Plist */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Run Update Info Plist"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; showEnvVarsInLog = 0; }; AFA3D89B09C03C4D00E4CFCA /* Run Update Info Plist */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Run Update Info Plist"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; showEnvVarsInLog = 0; }; AFA3D89D09C03C5000E4CFCA /* Run Update Info Plist */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Run Update Info Plist"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; showEnvVarsInLog = 0; }; AFA3D89F09C03C5300E4CFCA /* Run Update Info Plist */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Run Update Info Plist"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; showEnvVarsInLog = 0; }; AFA3D8A109C03C5600E4CFCA /* Run Update Info Plist */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Run Update Info Plist"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; showEnvVarsInLog = 0; }; AFA3D8A309C03C5F00E4CFCA /* Run Update Info Plist */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Run Update Info Plist"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; showEnvVarsInLog = 0; }; AFA3D8A509C03C6200E4CFCA /* Run Update Info Plist */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Run Update Info Plist"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; showEnvVarsInLog = 0; }; AFA3D8A909C03C6900E4CFCA /* Run Update Info Plist */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Run Update Info Plist"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; showEnvVarsInLog = 0; }; AFA3D8AB09C03C6D00E4CFCA /* Run Update Info Plist */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Run Update Info Plist"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; showEnvVarsInLog = 0; }; AFA3D8AD09C03C7000E4CFCA /* Run Update Info Plist */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Run Update Info Plist"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; showEnvVarsInLog = 0; }; AFA3D8AF09C03C7300E4CFCA /* Run Update Info Plist */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Run Update Info Plist"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; showEnvVarsInLog = 0; }; AFA3D8B109C03C7600E4CFCA /* Run Update Info Plist */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Run Update Info Plist"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; showEnvVarsInLog = 0; }; AFA3D8B309C03C7900E4CFCA /* Run Update Info Plist */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Run Update Info Plist"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; showEnvVarsInLog = 0; }; AFA3D8B509C03C7C00E4CFCA /* Run Update Info Plist */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Run Update Info Plist"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; showEnvVarsInLog = 0; }; AFA3D8B709C03C7F00E4CFCA /* Run Update Info Plist */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Run Update Info Plist"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; showEnvVarsInLog = 0; }; AFA3D8B909C03C8200E4CFCA /* Run Update Info Plist */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Run Update Info Plist"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; showEnvVarsInLog = 0; }; AFA3D8BB09C03C8600E4CFCA /* Run Update Info Plist */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Run Update Info Plist"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; showEnvVarsInLog = 0; }; AFA3D8BD09C03C8900E4CFCA /* Run Update Info Plist */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Run Update Info Plist"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; showEnvVarsInLog = 0; }; AFA3D8BF09C03C8D00E4CFCA /* Run Update Info Plist */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Run Update Info Plist"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; showEnvVarsInLog = 0; }; AFA3D8C109C03C9000E4CFCA /* Run Update Info Plist */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Run Update Info Plist"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; showEnvVarsInLog = 0; }; AFA3D8C309C03C9300E4CFCA /* Run Update Info Plist */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Run Update Info Plist"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; showEnvVarsInLog = 0; }; AFA3D8C509C03C9600E4CFCA /* Run Update Info Plist */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Run Update Info Plist"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; showEnvVarsInLog = 0; }; AFA3D8C709C03C9900E4CFCA /* Run Update Info Plist */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Run Update Info Plist"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; showEnvVarsInLog = 0; }; AFA3D8C909C03C9E00E4CFCA /* Run Update Info Plist */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Run Update Info Plist"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; showEnvVarsInLog = 0; }; AFA3D8CB09C03CA100E4CFCA /* Run Update Info Plist */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Run Update Info Plist"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; showEnvVarsInLog = 0; }; AFA3D8CD09C03CA400E4CFCA /* Run Update Info Plist */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Run Update Info Plist"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; showEnvVarsInLog = 0; }; AFA3D8CF09C03CA800E4CFCA /* Run Update Info Plist */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Run Update Info Plist"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; showEnvVarsInLog = 0; }; AFA3D8D109C03CAB00E4CFCA /* Run Update Info Plist */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Run Update Info Plist"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; showEnvVarsInLog = 0; }; AFA3D8D309C03CAE00E4CFCA /* Run Update Info Plist */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Run Update Info Plist"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; showEnvVarsInLog = 0; }; AFA3D8D709C03CB400E4CFCA /* Run Update Info Plist */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Run Update Info Plist"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; showEnvVarsInLog = 0; }; AFA3D8D909C03CB700E4CFCA /* Run Update Info Plist */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Run Update Info Plist"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; showEnvVarsInLog = 0; }; AFA3D8DB09C03CBA00E4CFCA /* Run Update Info Plist */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Run Update Info Plist"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; showEnvVarsInLog = 0; }; AFA3D8DD09C03CBD00E4CFCA /* Run Update Info Plist */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Run Update Info Plist"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; showEnvVarsInLog = 0; }; AFA3D8DF09C03CC000E4CFCA /* Run Update Info Plist */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Run Update Info Plist"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; showEnvVarsInLog = 0; }; AFA3D8E109C03CC400E4CFCA /* Run Update Info Plist */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Run Update Info Plist"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; showEnvVarsInLog = 0; }; AFA3D8E309C03CCA00E4CFCA /* Run Update Info Plist */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Run Update Info Plist"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; showEnvVarsInLog = 0; }; AFA3D8E509C03CCD00E4CFCA /* Run Update Info Plist */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Run Update Info Plist"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; showEnvVarsInLog = 0; }; AFA3D8E709C03CD100E4CFCA /* Run Update Info Plist */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Run Update Info Plist"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; showEnvVarsInLog = 0; }; AFA3D8E909C03CD500E4CFCA /* Run Update Info Plist */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Run Update Info Plist"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; showEnvVarsInLog = 0; }; AFA3D8EB09C03CD800E4CFCA /* Run Update Info Plist */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Run Update Info Plist"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; showEnvVarsInLog = 0; }; AFA3D8ED09C03CDB00E4CFCA /* Run Update Info Plist */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Run Update Info Plist"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; showEnvVarsInLog = 0; }; AFA3D8EF09C03CDE00E4CFCA /* Run Update Info Plist */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Run Update Info Plist"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; showEnvVarsInLog = 0; }; AFA3D8F109C03CE100E4CFCA /* Run Update Info Plist */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Run Update Info Plist"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; showEnvVarsInLog = 0; }; AFA3D8F309C03CE400E4CFCA /* Run Update Info Plist */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Run Update Info Plist"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; showEnvVarsInLog = 0; }; AFA3D8F509C03CE800E4CFCA /* Run Update Info Plist */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Run Update Info Plist"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; showEnvVarsInLog = 0; }; AFA3D8F709C03CEA00E4CFCA /* Run Update Info Plist */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Run Update Info Plist"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; showEnvVarsInLog = 0; }; AFA3D8F909C03CED00E4CFCA /* Run Update Info Plist */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Run Update Info Plist"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; showEnvVarsInLog = 0; }; AFA3D8FB09C03CF100E4CFCA /* Run Update Info Plist */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Run Update Info Plist"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; showEnvVarsInLog = 0; }; AFA3D8FD09C03CF400E4CFCA /* Run Update Info Plist */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Run Update Info Plist"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; showEnvVarsInLog = 0; }; AFA3D8FF09C03CF700E4CFCA /* Run Update Info Plist */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Run Update Info Plist"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; showEnvVarsInLog = 0; }; AFA3D90109C03D0000E4CFCA /* Run Update Info Plist */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Run Update Info Plist"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; showEnvVarsInLog = 0; }; AFA3D90309C03D0400E4CFCA /* Run Update Info Plist */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Run Update Info Plist"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; showEnvVarsInLog = 0; }; AFA3D90509C03D0700E4CFCA /* Run Update Info Plist */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Run Update Info Plist"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; showEnvVarsInLog = 0; }; AFA3D90709C03D0B00E4CFCA /* Run Update Info Plist */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Run Update Info Plist"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; showEnvVarsInLog = 0; }; AFA3D90909C03D0E00E4CFCA /* Run Update Info Plist */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Run Update Info Plist"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; showEnvVarsInLog = 0; }; AFA3D90B09C03D1100E4CFCA /* Run Update Info Plist */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Run Update Info Plist"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; showEnvVarsInLog = 0; }; AFA3D90D09C03D1400E4CFCA /* Run Update Info Plist */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Run Update Info Plist"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; showEnvVarsInLog = 0; }; AFA3D90F09C03D1800E4CFCA /* Run Update Info Plist */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Run Update Info Plist"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; showEnvVarsInLog = 0; }; AFA3D91109C03D1B00E4CFCA /* Run Update Info Plist */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Run Update Info Plist"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; showEnvVarsInLog = 0; }; AFA3D91309C03D1E00E4CFCA /* Run Update Info Plist */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Run Update Info Plist"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; showEnvVarsInLog = 0; }; AFA3D91509C03D2100E4CFCA /* Run Update Info Plist */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Run Update Info Plist"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; showEnvVarsInLog = 0; }; AFA3D91709C03D2400E4CFCA /* Run Update Info Plist */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Run Update Info Plist"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; showEnvVarsInLog = 0; }; AFA3D91909C03D2700E4CFCA /* Run Update Info Plist */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Run Update Info Plist"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; showEnvVarsInLog = 0; }; AFA3D91D09C03D3000E4CFCA /* Run Update Info Plist */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Run Update Info Plist"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; showEnvVarsInLog = 0; }; AFA3D91F09C03D3300E4CFCA /* Run Update Info Plist */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Run Update Info Plist"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; showEnvVarsInLog = 0; }; AFA3D92109C03D3600E4CFCA /* Run Update Info Plist */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Run Update Info Plist"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; showEnvVarsInLog = 0; }; AFA3D92309C03D3A00E4CFCA /* Run Update Info Plist */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Run Update Info Plist"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; showEnvVarsInLog = 0; }; AFA3D92509C03D3D00E4CFCA /* Run Update Info Plist */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Run Update Info Plist"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; showEnvVarsInLog = 0; }; AFA3D92709C03D4000E4CFCA /* Run Update Info Plist */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Run Update Info Plist"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; showEnvVarsInLog = 0; }; AFA3D92909C03D4400E4CFCA /* Run Update Info Plist */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Run Update Info Plist"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; showEnvVarsInLog = 0; }; AFA3D92B09C03D4700E4CFCA /* Run Update Info Plist */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Run Update Info Plist"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; showEnvVarsInLog = 0; }; AFA3D92D09C03D4A00E4CFCA /* Run Update Info Plist */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Run Update Info Plist"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; showEnvVarsInLog = 0; }; AFA3D92F09C03D4E00E4CFCA /* Run Update Info Plist */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Run Update Info Plist"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; showEnvVarsInLog = 0; }; AFA3D93109C03D5100E4CFCA /* Run Update Info Plist */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Run Update Info Plist"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; showEnvVarsInLog = 0; }; AFA3D93309C03D5400E4CFCA /* Run Update Info Plist */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Run Update Info Plist"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; showEnvVarsInLog = 0; }; AFA3D93509C03D5700E4CFCA /* Run Update Info Plist */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Run Update Info Plist"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; showEnvVarsInLog = 0; }; AFA3D93709C03D5B00E4CFCA /* Run Update Info Plist */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Run Update Info Plist"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; showEnvVarsInLog = 0; }; AFA3D93909C03D5E00E4CFCA /* Run Update Info Plist */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Run Update Info Plist"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; showEnvVarsInLog = 0; }; AFA3D93B09C03D6200E4CFCA /* Run Update Info Plist */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Run Update Info Plist"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; showEnvVarsInLog = 0; }; AFA3D93D09C03D6C00E4CFCA /* Run Update Info Plist */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Run Update Info Plist"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; showEnvVarsInLog = 0; }; AFA3D93F09C03D6F00E4CFCA /* Run Update Info Plist */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Run Update Info Plist"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; showEnvVarsInLog = 0; }; AFA3D94109C03D7200E4CFCA /* Run Update Info Plist */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Run Update Info Plist"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; showEnvVarsInLog = 0; }; AFA3D94309C03D7600E4CFCA /* Run Update Info Plist */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Run Update Info Plist"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; showEnvVarsInLog = 0; }; AFA3D94509C03D7A00E4CFCA /* Run Update Info Plist */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Run Update Info Plist"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; showEnvVarsInLog = 0; }; AFA3D94709C03D7E00E4CFCA /* Run Update Info Plist */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Run Update Info Plist"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; showEnvVarsInLog = 0; }; AFA3D94909C03D8100E4CFCA /* Run Update Info Plist */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Run Update Info Plist"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; showEnvVarsInLog = 0; }; AFA3D94B09C03D8500E4CFCA /* Run Update Info Plist */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Run Update Info Plist"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; showEnvVarsInLog = 0; }; AFA3D94D09C03D8D00E4CFCA /* Run Update Info Plist */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Run Update Info Plist"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; showEnvVarsInLog = 0; }; AFA3D94F09C03D9100E4CFCA /* Run Update Info Plist */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Run Update Info Plist"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; showEnvVarsInLog = 0; }; AFA3D95109C03D9400E4CFCA /* Run Update Info Plist */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Run Update Info Plist"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; showEnvVarsInLog = 0; }; AFA3D95309C03D9800E4CFCA /* Run Update Info Plist */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Run Update Info Plist"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; showEnvVarsInLog = 0; }; AFA3D95509C03D9C00E4CFCA /* Run Update Info Plist */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Run Update Info Plist"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; showEnvVarsInLog = 0; }; AFA3D95709C03DA100E4CFCA /* Run Update Info Plist */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Run Update Info Plist"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; showEnvVarsInLog = 0; }; AFA3D95909C03DA400E4CFCA /* Run Update Info Plist */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Run Update Info Plist"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; showEnvVarsInLog = 0; }; AFA3D95B09C03DA800E4CFCA /* Run Update Info Plist */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Run Update Info Plist"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; showEnvVarsInLog = 0; }; AFA3D95D09C03DAB00E4CFCA /* Run Update Info Plist */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Run Update Info Plist"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; showEnvVarsInLog = 0; }; AFA3D95F09C03DAE00E4CFCA /* Run Update Info Plist */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Run Update Info Plist"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; showEnvVarsInLog = 0; }; AFA3D96109C03DB100E4CFCA /* Run Update Info Plist */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Run Update Info Plist"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; showEnvVarsInLog = 0; }; AFA3D96309C03DB500E4CFCA /* Run Update Info Plist */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Run Update Info Plist"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; showEnvVarsInLog = 0; }; AFA3D96509C03DB900E4CFCA /* Run Update Info Plist */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Run Update Info Plist"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; showEnvVarsInLog = 0; }; AFA3D96709C03DBC00E4CFCA /* Run Update Info Plist */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Run Update Info Plist"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; showEnvVarsInLog = 0; }; AFA3D96909C03DBF00E4CFCA /* Run Update Info Plist */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Run Update Info Plist"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; showEnvVarsInLog = 0; }; AFA3D96B09C03DC600E4CFCA /* Run Update Info Plist */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Run Update Info Plist"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; showEnvVarsInLog = 0; }; AFA3D96D09C03DCA00E4CFCA /* Run Update Info Plist */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Run Update Info Plist"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; showEnvVarsInLog = 0; }; AFA3D96F09C03DCD00E4CFCA /* Run Update Info Plist */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Run Update Info Plist"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; showEnvVarsInLog = 0; }; AFA3D97109C03DD000E4CFCA /* Run Update Info Plist */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Run Update Info Plist"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; showEnvVarsInLog = 0; }; AFA3D97309C03DD300E4CFCA /* Run Update Info Plist */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Run Update Info Plist"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; showEnvVarsInLog = 0; }; AFA3D97509C03DD700E4CFCA /* Run Update Info Plist */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Run Update Info Plist"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; showEnvVarsInLog = 0; }; AFA3D97709C03DDA00E4CFCA /* Run Update Info Plist */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Run Update Info Plist"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; showEnvVarsInLog = 0; }; AFA3D97909C03DDD00E4CFCA /* Run Update Info Plist */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Run Update Info Plist"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; showEnvVarsInLog = 0; }; AFA3D97B09C03DE000E4CFCA /* Run Update Info Plist */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Run Update Info Plist"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; showEnvVarsInLog = 0; }; AFA3D97D09C03DE400E4CFCA /* Run Update Info Plist */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Run Update Info Plist"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; showEnvVarsInLog = 0; }; AFA3D97F09C03DE700E4CFCA /* Run Update Info Plist */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Run Update Info Plist"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; showEnvVarsInLog = 0; }; AFA3D98109C03DEA00E4CFCA /* Run Update Info Plist */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Run Update Info Plist"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; showEnvVarsInLog = 0; }; AFA3D98309C03DEE00E4CFCA /* Run Update Info Plist */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Run Update Info Plist"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; showEnvVarsInLog = 0; }; AFA3D98509C03DF100E4CFCA /* Run Update Info Plist */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Run Update Info Plist"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; showEnvVarsInLog = 0; }; AFA3D98709C03DF400E4CFCA /* Run Update Info Plist */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Run Update Info Plist"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; showEnvVarsInLog = 0; }; AFA3D98909C03DF700E4CFCA /* Run Update Info Plist */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Run Update Info Plist"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; showEnvVarsInLog = 0; }; AFA3D98B09C03DFC00E4CFCA /* Run Update Info Plist */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Run Update Info Plist"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; showEnvVarsInLog = 0; }; AFA3D98D09C03E0500E4CFCA /* Run Update Info Plist */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Run Update Info Plist"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; showEnvVarsInLog = 0; }; AFA3D98F09C03E0F00E4CFCA /* Run Update Info Plist */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Run Update Info Plist"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; showEnvVarsInLog = 0; }; AFA3D99109C03E1200E4CFCA /* Run Update Info Plist */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Run Update Info Plist"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; showEnvVarsInLog = 0; }; AFA3D99309C03E1600E4CFCA /* Run Update Info Plist */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Run Update Info Plist"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; showEnvVarsInLog = 0; }; AFA3D99509C03E1900E4CFCA /* Run Update Info Plist */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Run Update Info Plist"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; showEnvVarsInLog = 0; }; AFA3D99709C03E1C00E4CFCA /* Run Update Info Plist */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Run Update Info Plist"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; showEnvVarsInLog = 0; }; AFA3D99909C03E2000E4CFCA /* Run Update Info Plist */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Run Update Info Plist"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; showEnvVarsInLog = 0; }; AFA3D99B09C03E2300E4CFCA /* Run Update Info Plist */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Run Update Info Plist"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; showEnvVarsInLog = 0; }; AFA3D99D09C03E2600E4CFCA /* Run Update Info Plist */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Run Update Info Plist"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; showEnvVarsInLog = 0; }; AFA3D99F09C03E2900E4CFCA /* Run Update Info Plist */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Run Update Info Plist"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; showEnvVarsInLog = 0; }; AFA3D9A109C03E2E00E4CFCA /* Run Update Info Plist */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Run Update Info Plist"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; showEnvVarsInLog = 0; }; AFA3D9A309C03E3200E4CFCA /* Run Update Info Plist */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Run Update Info Plist"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; showEnvVarsInLog = 0; }; AFA3D9A509C03E3600E4CFCA /* Run Update Info Plist */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Run Update Info Plist"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; showEnvVarsInLog = 0; }; AFA3D9A709C03E3A00E4CFCA /* Run Update Info Plist */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Run Update Info Plist"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; showEnvVarsInLog = 0; }; AFA3D9A909C03E3D00E4CFCA /* Run Update Info Plist */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Run Update Info Plist"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; showEnvVarsInLog = 0; }; AFA3D9AB09C03E4200E4CFCA /* Run Update Info Plist */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Run Update Info Plist"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; showEnvVarsInLog = 0; }; AFA3D9AD09C03E4600E4CFCA /* Run Update Info Plist */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Run Update Info Plist"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; showEnvVarsInLog = 0; }; AFA3D9AF09C03E4B00E4CFCA /* Run Update Info Plist */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Run Update Info Plist"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; showEnvVarsInLog = 0; }; AFA3D9B109C03E4E00E4CFCA /* Run Update Info Plist */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Run Update Info Plist"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; showEnvVarsInLog = 0; }; AFA3D9B309C03E5100E4CFCA /* Run Update Info Plist */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Run Update Info Plist"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; showEnvVarsInLog = 0; }; AFA3D9B509C03E5700E4CFCA /* Run Update Info Plist */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Run Update Info Plist"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; showEnvVarsInLog = 0; }; AFA3D9B709C03E5B00E4CFCA /* Run Update Info Plist */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Run Update Info Plist"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; showEnvVarsInLog = 0; }; AFA3D9B909C03E5E00E4CFCA /* Run Update Info Plist */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Run Update Info Plist"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; showEnvVarsInLog = 0; }; AFA3D9BB09C03E6200E4CFCA /* Run Update Info Plist */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Run Update Info Plist"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; showEnvVarsInLog = 0; }; AFA3D9BD09C03E6500E4CFCA /* Run Update Info Plist */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Run Update Info Plist"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; showEnvVarsInLog = 0; }; AFA3D9BF09C03E6900E4CFCA /* Run Update Info Plist */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Run Update Info Plist"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; showEnvVarsInLog = 0; }; AFA3D9C109C03E6E00E4CFCA /* Run Update Info Plist */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Run Update Info Plist"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; showEnvVarsInLog = 0; }; AFA3D9C309C03E7100E4CFCA /* Run Update Info Plist */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Run Update Info Plist"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; showEnvVarsInLog = 0; }; AFA3D9C509C03E7400E4CFCA /* Run Update Info Plist */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Run Update Info Plist"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; showEnvVarsInLog = 0; }; AFA3D9C709C03E7800E4CFCA /* Run Update Info Plist */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Run Update Info Plist"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; showEnvVarsInLog = 0; }; AFA3D9C909C03E7C00E4CFCA /* Run Update Info Plist */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Run Update Info Plist"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; showEnvVarsInLog = 0; }; AFA3D9CB09C03E7F00E4CFCA /* Run Update Info Plist */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Run Update Info Plist"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; showEnvVarsInLog = 0; }; AFA3D9CD09C03E8400E4CFCA /* Run Update Info Plist */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Run Update Info Plist"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; showEnvVarsInLog = 0; }; AFA3D9CF09C03E8700E4CFCA /* Run Update Info Plist */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Run Update Info Plist"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; showEnvVarsInLog = 0; }; AFA3D9D109C03E8B00E4CFCA /* Run Update Info Plist */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Run Update Info Plist"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; showEnvVarsInLog = 0; }; AFA3D9D309C03E8F00E4CFCA /* Run Update Info Plist */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Run Update Info Plist"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; showEnvVarsInLog = 0; }; AFA3D9D509C03E9300E4CFCA /* Run Update Info Plist */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Run Update Info Plist"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; showEnvVarsInLog = 0; }; AFA3DBA209C0424C00E4CFCA /* Run Update Info Plist */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Run Update Info Plist"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; showEnvVarsInLog = 0; }; AFACE8841CC83458008B24CD /* Run Update Info Plist */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Run Update Info Plist"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; showEnvVarsInLog = 0; }; AFB591B6178B812C00EA4005 /* Run Update Info Plist */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Run Update Info Plist"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; showEnvVarsInLog = 0; }; AFBFE75A178642DC00432B21 /* Run Update Info Plist */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Run Update Info Plist"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; showEnvVarsInLog = 0; }; AFBFE77A178647FE00432B21 /* Run Update Info Plist */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Run Update Info Plist"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; showEnvVarsInLog = 0; }; AFBFE78817894FFA00432B21 /* Copy Standalone Preferences XML File */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Copy Standalone Preferences XML File"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "SRC=$SRCROOT/$PRODUCT_NAME-app.xml\nDST=$BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX/Contents/Resources\nNAME=`echo $PRODUCT_NAME.xml | tr A-Z a-z`\ncp -p $SRC $DST/$NAME\nln -sf ../../../$NAME $DST/$PRODUCT_NAME.saver/Contents/Resources/"; }; AFBFE78917895AAF00432B21 /* Copy Standalone Preferences XML File */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Copy Standalone Preferences XML File"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "SRC=$SRCROOT/$PRODUCT_NAME-app.xml\nDST=$BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX/Contents/Resources\nNAME=`echo $PRODUCT_NAME.xml | tr A-Z a-z`\ncp -p $SRC $DST/$NAME\nln -sf ../../../$NAME $DST/$PRODUCT_NAME.saver/Contents/Resources/"; }; AFC0E8BC1CDC601A008CAFAC /* Run Update Info Plist */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Run Update Info Plist"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; showEnvVarsInLog = 0; }; AFCCCBB509C033DF00353F4D /* Run Update Info Plist */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Run Update Info Plist"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; showEnvVarsInLog = 0; }; AFCCCBC709C03AAF00353F4D /* Run Update Info Plist */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Run Update Info Plist"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; showEnvVarsInLog = 0; }; AFCCCBCB09C03AEE00353F4D /* Run Update Info Plist */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Run Update Info Plist"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; showEnvVarsInLog = 0; }; AFCCCBCD09C03AF400353F4D /* Run Update Info Plist */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Run Update Info Plist"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; showEnvVarsInLog = 0; }; AFCCCBCF09C03AF800353F4D /* Run Update Info Plist */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Run Update Info Plist"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; showEnvVarsInLog = 0; }; AFCCCBD109C03AFC00353F4D /* Run Update Info Plist */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Run Update Info Plist"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; showEnvVarsInLog = 0; }; AFCCCBD309C03B0000353F4D /* Run Update Info Plist */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Run Update Info Plist"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; showEnvVarsInLog = 0; }; AFCCCBD509C03B0500353F4D /* Run Update Info Plist */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Run Update Info Plist"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; showEnvVarsInLog = 0; }; AFCF834C1AF5B515008BB7E1 /* Run Update Info Plist */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Run Update Info Plist"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; showEnvVarsInLog = 0; }; AFD51B2C0F063B4A00471C02 /* Run Update Info Plist */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Run Update Info Plist"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; showEnvVarsInLog = 0; }; AFDA659D178A52B70070D24B /* Run Update Info Plist */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Run Update Info Plist"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; showEnvVarsInLog = 0; }; AFE2A4660E2E904600ADB298 /* Run Update Info Plist */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Run Update Info Plist"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; showEnvVarsInLog = 0; }; AFE30BF80E52B14700CCF4A5 /* Run Update Info Plist */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Run Update Info Plist"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; showEnvVarsInLog = 0; }; AFE6A1930CDD7B2E002805BF /* Run Update Info Plist */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Run Update Info Plist"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; showEnvVarsInLog = 0; }; AFE6A4290CDD7FAA002805BF /* Run Update Info Plist */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Run Update Info Plist"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; showEnvVarsInLog = 0; }; AFEC23DE1CB6EAE100DE138F /* Run Update Info Plist */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Run Update Info Plist"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; showEnvVarsInLog = 0; }; AFEE105E1D13406000AAC8F7 /* Run Update Info Plist */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Run Update Info Plist"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; showEnvVarsInLog = 0; }; AFEE107D1D15EB0800AAC8F7 /* Run Update Info Plist */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Run Update Info Plist"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; showEnvVarsInLog = 0; }; AFEE109C1D17E20B00AAC8F7 /* Run Update Info Plist */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Run Update Info Plist"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; showEnvVarsInLog = 0; }; AFF2868E17860E830050A578 /* Run Update Info Plist */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Run Update Info Plist"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; showEnvVarsInLog = 0; }; AFF3C9F717CCAC440028F240 /* Run Update Info Plist */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Run Update Info Plist"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; showEnvVarsInLog = 0; }; AFF463430C4403E400EE6509 /* Run Update Info Plist */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Run Update Info Plist"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; showEnvVarsInLog = 0; }; AFF463680C440AEF00EE6509 /* Run Update Info Plist */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Run Update Info Plist"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; showEnvVarsInLog = 0; }; AFFAB32519158CE40020F021 /* Run Update Info Plist */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Run Update Info Plist"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; showEnvVarsInLog = 0; }; CE3D01621B76F4C100993C75 /* Run Update Info Plist */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Run Update Info Plist"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; showEnvVarsInLog = 0; }; /* End PBXShellScriptBuildPhase section */ /* Begin PBXSourcesBuildPhase section */ AF08399409930B6B00277BE9 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AF0839B009930C4900277BE9 /* atlantis.c in Sources */, AF0839B109930C4900277BE9 /* dolphin.c in Sources */, AF0839B209930C4900277BE9 /* shark.c in Sources */, AF0839B309930C4900277BE9 /* swim.c in Sources */, AF0839B409930C4900277BE9 /* whale.c in Sources */, AF9CCAB509959CEF0075E99B /* XScreenSaverSubclass.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF083A37099311D700277BE9 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AF083A4A099311FF00277BE9 /* atunnel.c in Sources */, AF083A59099312B000277BE9 /* tunnel_draw.c in Sources */, AF9CCAB609959CF70075E99B /* XScreenSaverSubclass.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF0DC7B00C4C73F600D76972 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AF0DC7B10C4C73F600D76972 /* XScreenSaverSubclass.m in Sources */, AF0DC7B20C4C73F600D76972 /* analogtv.c in Sources */, AF0DCA350C4C74A200D76972 /* asm6502.c in Sources */, AF0DCA360C4C74A200D76972 /* m6502.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF0DCA470C4CBB0D00D76972 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AF0DCA480C4CBB0D00D76972 /* XScreenSaverSubclass.m in Sources */, AF0DCA600C4CBB7300D76972 /* voronoi.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF1A17670D6D6EE3008AF328 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AF1A17680D6D6EE3008AF328 /* XScreenSaverSubclass.m in Sources */, AF1A177F0D6D6F3E008AF328 /* lcdscrub.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF1AD9DE18500F9F00932759 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AF1ADA141850132600932759 /* main.m in Sources */, AF3633FD18530DD90086A439 /* Updater.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF1B0FAC1D7AB4740011DBE4 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AF1B0FC21D7AB54D0011DBE4 /* hexstrut.c in Sources */, AF1B0FAE1D7AB4740011DBE4 /* XScreenSaverSubclass.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF32D9E50F3AD0B40080F535 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AF32D9E70F3AD0B40080F535 /* XScreenSaverSubclass.m in Sources */, AF32D9FB0F3AD1200080F535 /* rubikblocks.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF3581C51431D47B00E09C51 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AF3581C61431D47B00E09C51 /* XScreenSaverSubclass.m in Sources */, AF3581DC1431D5FC00E09C51 /* companion_disc.c in Sources */, AF3581DF1431D5FC00E09C51 /* companion_heart.c in Sources */, AF3581E21431D5FC00E09C51 /* companion_quad.c in Sources */, AF3581E51431D5FC00E09C51 /* companion.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF358202143330F900E09C51 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AF358203143330F900E09C51 /* XScreenSaverSubclass.m in Sources */, AF35821C1433314C00E09C51 /* tronbit_idle1.c in Sources */, AF35821D1433314C00E09C51 /* tronbit_idle2.c in Sources */, AF35821E1433314C00E09C51 /* tronbit_no.c in Sources */, AF35821F1433314C00E09C51 /* tronbit_yes.c in Sources */, AF3582201433314C00E09C51 /* tronbit.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF35E88F0E63823600691F2F /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AF35E8900E63823600691F2F /* XScreenSaverSubclass.m in Sources */, AF35EB260E6382BA00691F2F /* jigsaw.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF39381F1D0FBD6A00205406 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AF3938211D0FBD6A00205406 /* XScreenSaverSubclass.m in Sources */, AF3938341D0FBF1900205406 /* discoball.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF39E287198A11F60064A58D /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AFCF509C198A1861005B0DB1 /* involute.c in Sources */, AF39E289198A11F60064A58D /* XScreenSaverSubclass.m in Sources */, AF39E2AB198A13F50064A58D /* winduprobot.c in Sources */, AFBE744019A7C6930018AA35 /* robot.c in Sources */, AF39E2AA198A13F50064A58D /* robot-wireframe.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF3C714A0D624BF50030CC0D /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AF3C714B0D624BF50030CC0D /* XScreenSaverSubclass.m in Sources */, AF3C715E0D624C600030CC0D /* hypnowheel.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF46E9D41CBBA2B300240FBC /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AF46E9E91CBBA41B00240FBC /* unicrud.c in Sources */, AF46E9D61CBBA2B300240FBC /* XScreenSaverSubclass.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF476FBB099D154F001F091E /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AF476FBC099D154F001F091E /* XScreenSaverSubclass.m in Sources */, AF476FD1099D15AA001F091E /* interference.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF476FE0099D1686001F091E /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AF476FE1099D1686001F091E /* XScreenSaverSubclass.m in Sources */, AF476FF1099D1713001F091E /* truchet.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF477051099D4385001F091E /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AF477052099D4385001F091E /* XScreenSaverSubclass.m in Sources */, AF477146099D43E2001F091E /* deluxe.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF47716E099D4786001F091E /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AF47716F099D4786001F091E /* XScreenSaverSubclass.m in Sources */, AF47717D099D47D3001F091E /* compass.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF477184099D4803001F091E /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AF477185099D4803001F091E /* XScreenSaverSubclass.m in Sources */, AF477193099D4864001F091E /* wander.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF4771AC099D4949001F091E /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AF4771AD099D4949001F091E /* XScreenSaverSubclass.m in Sources */, AF4771BB099D4997001F091E /* t3d.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF4771E0099D4D9A001F091E /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AF4771E1099D4D9A001F091E /* XScreenSaverSubclass.m in Sources */, AF4771F0099D4DFE001F091E /* ccurve.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF4771F7099D4E63001F091E /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AF4771F8099D4E63001F091E /* XScreenSaverSubclass.m in Sources */, AF477206099D4EB6001F091E /* nerverot.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF47720D099D4EE8001F091E /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AF47720E099D4EE8001F091E /* XScreenSaverSubclass.m in Sources */, AF47721C099D4F47001F091E /* whirlygig.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF477223099D4F67001F091E /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AF477224099D4F67001F091E /* XScreenSaverSubclass.m in Sources */, AF477232099D4FD5001F091E /* anemone.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF477258099D5717001F091E /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AF477259099D5717001F091E /* XScreenSaverSubclass.m in Sources */, AF477267099D5768001F091E /* halftone.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF477270099D57B9001F091E /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AF477271099D57B9001F091E /* XScreenSaverSubclass.m in Sources */, AF47727F099D5808001F091E /* popsquares.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF477288099D5926001F091E /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AF477289099D5926001F091E /* XScreenSaverSubclass.m in Sources */, AF477298099D5980001F091E /* piecewise.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF477387099D65A1001F091E /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AF477388099D65A1001F091E /* XScreenSaverSubclass.m in Sources */, AF477396099D65FE001F091E /* wormhole.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF47739F099D6648001F091E /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AF4773A0099D6648001F091E /* XScreenSaverSubclass.m in Sources */, AF4773B5099D6778001F091E /* fuzzyflakes.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF4773C6099D67B9001F091E /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AF4773C7099D67B9001F091E /* XScreenSaverSubclass.m in Sources */, AF4773D5099D6817001F091E /* anemotaxis.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF477407099D69E7001F091E /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AF477408099D69E7001F091E /* XScreenSaverSubclass.m in Sources */, AF47741D099D6A6D001F091E /* intermomentary.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF47742C099D7C70001F091E /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AF47742D099D7C70001F091E /* XScreenSaverSubclass.m in Sources */, AF47743B099D7CEA001F091E /* ifs.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF477447099D7D33001F091E /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AF477448099D7D33001F091E /* XScreenSaverSubclass.m in Sources */, AF477456099D7D8A001F091E /* xmatrix.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF477488099D89E4001F091E /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AF477489099D89E4001F091E /* XScreenSaverSubclass.m in Sources */, AF477497099D8A53001F091E /* flame.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF47749E099D8A74001F091E /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AF47749F099D8A74001F091E /* XScreenSaverSubclass.m in Sources */, AF4774AD099D8B08001F091E /* kaleidescope.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF4774B9099D8B5F001F091E /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AF4774BA099D8B5F001F091E /* XScreenSaverSubclass.m in Sources */, AF4774CC099D8BC2001F091E /* lmorph.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF4774D3099D8BFF001F091E /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AF4774D4099D8BFF001F091E /* XScreenSaverSubclass.m in Sources */, AF4774E2099D8C8B001F091E /* maze.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF477562099D9A1A001F091E /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AF477563099D9A1A001F091E /* XScreenSaverSubclass.m in Sources */, AF477571099D9A8A001F091E /* pedal.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF477588099D9C28001F091E /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AF477589099D9C28001F091E /* XScreenSaverSubclass.m in Sources */, AF47759D099D9CA3001F091E /* pyro.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF4775A4099D9CF7001F091E /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AF4775A5099D9CF7001F091E /* XScreenSaverSubclass.m in Sources */, AF4775B4099D9D67001F091E /* starfish.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF4775DD099D9F69001F091E /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AF4775DE099D9F69001F091E /* XScreenSaverSubclass.m in Sources */, AF4775F0099D9FFF001F091E /* coral.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF4775F7099DA030001F091E /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AF4775F8099DA030001F091E /* XScreenSaverSubclass.m in Sources */, AF477606099DA097001F091E /* epicycle.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF477618099DA26C001F091E /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AF477619099DA26C001F091E /* XScreenSaverSubclass.m in Sources */, AF47762B099DA2E9001F091E /* kumppa.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF477649099DA6D0001F091E /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AF47764A099DA6D0001F091E /* XScreenSaverSubclass.m in Sources */, AF477658099DA75D001F091E /* squiral.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF47765F099DA78E001F091E /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AF477660099DA78E001F091E /* XScreenSaverSubclass.m in Sources */, AF47766E099DA80D001F091E /* critical.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF477675099DA849001F091E /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AF477676099DA849001F091E /* XScreenSaverSubclass.m in Sources */, AF477684099DA8C7001F091E /* petri.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF477694099DAA6F001F091E /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AF477695099DAA6F001F091E /* XScreenSaverSubclass.m in Sources */, AF4776A3099DAADE001F091E /* blaster.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF4776AF099DABDD001F091E /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AF4776B0099DABDD001F091E /* XScreenSaverSubclass.m in Sources */, AF4776BE099DAC46001F091E /* xspirograph.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF4776C5099DAC8A001F091E /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AF4776C6099DAC8A001F091E /* XScreenSaverSubclass.m in Sources */, AF4776D4099DACEB001F091E /* xrayswarm.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF4776E0099DADDF001F091E /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AF4776E1099DADDF001F091E /* XScreenSaverSubclass.m in Sources */, AF4776EF099DAE58001F091E /* whirlwindwarp.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF4776F6099DAE7A001F091E /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AF4776F7099DAE7A001F091E /* XScreenSaverSubclass.m in Sources */, AF477705099DAF3F001F091E /* vermiculate.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF477712099DAF9F001F091E /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AF477713099DAF9F001F091E /* XScreenSaverSubclass.m in Sources */, AF477721099DB01C001F091E /* cloudlife.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF477728099DB044001F091E /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AF477729099DB044001F091E /* XScreenSaverSubclass.m in Sources */, AF477737099DB104001F091E /* substrate.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF477757099DB61E001F091E /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AF477758099DB61E001F091E /* XScreenSaverSubclass.m in Sources */, AF47776A099DB710001F091E /* interaggregate.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF477779099DB965001F091E /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AF47777A099DB965001F091E /* XScreenSaverSubclass.m in Sources */, AF477788099DBA29001F091E /* celtic.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF477795099DBA90001F091E /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AF477796099DBA90001F091E /* XScreenSaverSubclass.m in Sources */, AF4777A5099DBB12001F091E /* fluidballs.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF4777D6099DC183001F091E /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AF4777D7099DC183001F091E /* XScreenSaverSubclass.m in Sources */, AF4778A4099DDA91001F091E /* boxfit.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF4778B0099DDB79001F091E /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AF4778B1099DDB79001F091E /* XScreenSaverSubclass.m in Sources */, AF4778BF099DDC33001F091E /* penetrate.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF4778CC099DDCAE001F091E /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AF4778CD099DDCAE001F091E /* XScreenSaverSubclass.m in Sources */, AF4778DB099DDD2B001F091E /* xjack.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF4778ED099DDDC8001F091E /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AF4778EE099DDDC8001F091E /* XScreenSaverSubclass.m in Sources */, AF4778FC099DDE79001F091E /* cynosure.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF47790E099DE379001F091E /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AF47790F099DE379001F091E /* XScreenSaverSubclass.m in Sources */, AF47791D099DE3F1001F091E /* flag.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF47792F099DE4C7001F091E /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AF477930099DE4C7001F091E /* XScreenSaverSubclass.m in Sources */, AF47793E099DE56A001F091E /* slip.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF4808BE098C3B6C00FB32B8 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AFE943B119DD54C1000A5E6D /* xft.c in Sources */, AFE943B519DDF97F000A5E6D /* utf8wc.c in Sources */, AF4808C5098C3BDC00FB32B8 /* colors.c in Sources */, AF4808C6098C3BDF00FB32B8 /* erase.c in Sources */, AF4808C7098C3BE600FB32B8 /* hsv.c in Sources */, AFBF893E0E41D930006A2D66 /* fps.c in Sources */, AFBF89AF0E423FC3006A2D66 /* fps-gl.c in Sources */, AF4808C8098C3BE800FB32B8 /* InvertedSlider.m in Sources */, AF4808C9098C3BEC00FB32B8 /* jwxyz.m in Sources */, AF4808CA098C3BEE00FB32B8 /* PrefsReader.m in Sources */, AFDA11251934424D003D397F /* aligned_malloc.c in Sources */, AF4808CC098C3BF200FB32B8 /* spline.c in Sources */, AF2D8F321CEBA10300198014 /* jwxyz-timers.c in Sources */, AF4808CD098C3BF400FB32B8 /* usleep.c in Sources */, CE55645A1C25141000645458 /* jwxyz-gl.c in Sources */, AF4808CE098C3BF800FB32B8 /* XScreenSaverConfigSheet.m in Sources */, AF4808CF098C3BFB00FB32B8 /* XScreenSaverView.m in Sources */, AF4808D0098C3BFD00FB32B8 /* yarandom.c in Sources */, AF480FCC09901DF900FB32B8 /* gltrackball.c in Sources */, AF480FCD09901E0000FB32B8 /* rotator.c in Sources */, AF480FCE09901E0400FB32B8 /* sphere.c in Sources */, AF480FCF09901E0700FB32B8 /* trackball.c in Sources */, AF480FD009901E0A00FB32B8 /* tube.c in Sources */, AF4812FA0990D9AE00FB32B8 /* XScreenSaverGLView.m in Sources */, AF083A1C099310B300277BE9 /* xpm-ximage.c in Sources */, AF083A21099310CF00277BE9 /* xlockmore.c in Sources */, AFA55866099324D800F3E977 /* minixpm.c in Sources */, AFA55A530993353500F3E977 /* gllist.c in Sources */, AFA55A95099336D800F3E977 /* normals.c in Sources */, AFDA11271934424D003D397F /* thread_util.c in Sources */, AF975C93099C929800B05160 /* xpm-pixmap.c in Sources */, CE8EA1C21C35CF10002D1020 /* jwxyz-common.c in Sources */, AF4774E8099D8D8C001F091E /* logo.c in Sources */, AF4775C0099D9E79001F091E /* resources.c in Sources */, AF9D468F09B51567006E59CF /* grabclient-osx.m in Sources */, AF9D473809B52EE0006E59CF /* colorbars.c in Sources */, AF77783409B6516900EA3033 /* grab-ximage.c in Sources */, AF77783709B6518400EA3033 /* texfont.c in Sources */, CE43C2BF1C055157004C2BC6 /* jwxyz-cocoa.m in Sources */, AF77783A09B651AF00EA3033 /* glut_stroke.c in Sources */, AF77783D09B651C700EA3033 /* glut_swidth.c in Sources */, AFAD462309D5F4DA00AB5F95 /* grabclient.c in Sources */, AF6048FB157C07C600CA21E4 /* jwzgles.c in Sources */, AFC7592D158D8E8B00C5458E /* textclient.c in Sources */, AFC75930158D9A7A00C5458E /* textclient-ios.m in Sources */, AF561DF615969BC3007CA5ED /* grabclient-ios.m in Sources */, CE9289D319BD00E300961F22 /* async_netdb.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF480C4E098E301400FB32B8 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AF480C5C098E305900FB32B8 /* helix.c in Sources */, AF9CCABB09959D1C0075E99B /* XScreenSaverSubclass.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF480D77098EEDDE00FB32B8 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AF480D88098EEE5B00FB32B8 /* drift.c in Sources */, AF9CCAB909959D100075E99B /* XScreenSaverSubclass.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF4810F009909FBA00FB32B8 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AF4811030990A02700FB32B8 /* dangerball.c in Sources */, AF9CC7A1099580E70075E99B /* XScreenSaverSubclass.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF4812550990CE2700FB32B8 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AF4812580990CE2700FB32B8 /* gears.c in Sources */, AF9CCABA09959D170075E99B /* XScreenSaverSubclass.m in Sources */, AFCFF1D90CE4517C00C7D111 /* involute.c in Sources */, AFCFF1DA0CE4518B00C7D111 /* tube.c in Sources */, AFCFF1DB0CE451A300C7D111 /* normals.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF4812B80990D3D900FB32B8 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AF4812C90990D41E00FB32B8 /* buildlwo.c in Sources */, AF4812CA0990D42000FB32B8 /* pipeobjs.c in Sources */, AF4812CB0990D42100FB32B8 /* pipes.c in Sources */, AF9CCABD09959D250075E99B /* XScreenSaverSubclass.m in Sources */, AF69640B0E4FE3470085DBCE /* teapot.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF48DEF40A0C25E000F94CF9 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AF48DEF60A0C25E000F94CF9 /* XScreenSaverSubclass.m in Sources */, AF48E1680A0C268500F94CF9 /* glschool_alg.c in Sources */, AF48E1690A0C268500F94CF9 /* glschool_gl.c in Sources */, AF48E16A0A0C268500F94CF9 /* glschool.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF4A344E102A593600A81B2A /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AF4A3450102A593600A81B2A /* XScreenSaverSubclass.m in Sources */, AF4A3464102A5A0E00A81B2A /* surfaces.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF4FD6EB0CE7A486005EE58E /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AF4FD6EC0CE7A486005EE58E /* XScreenSaverSubclass.m in Sources */, AF4FD7010CE7A577005EE58E /* lockward.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF4FF4BF0D52CBDE00666F98 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AF4FF4C10D52CBDE00666F98 /* XScreenSaverSubclass.m in Sources */, AF4FF4D10D52CC8400666F98 /* cubicgrid.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF5C9AFE1A0CCE6E00B0147A /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AF5C9B131A0CCF4E00B0147A /* cityflow.c in Sources */, AF5C9B001A0CCE6E00B0147A /* XScreenSaverSubclass.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF63A7F61AB4EDDB00593C75 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AF63A80C1AB4EF5D00593C75 /* romanboy.c in Sources */, AF63A7F81AB4EDDB00593C75 /* XScreenSaverSubclass.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF63F3271C3465BE0033E133 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AF63F3281C3465BE0033E133 /* SaverRunner.m in Sources */, AF63F3291C3465BE0033E133 /* main.m in Sources */, AF63F32A1C3465BE0033E133 /* SaverListController.m in Sources */, AF63F32D1C3465BE0033E133 /* analogtv.c in Sources */, AF63F32F1C3465BE0033E133 /* apple2-main.c in Sources */, AFA2118B1CD1AA3F00C0D2A1 /* textclient-mobile.c in Sources */, AF63F3301C3465BE0033E133 /* apple2.c in Sources */, AF63F43F1C3465BE0033E133 /* ios-function-table.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF63F45E1C34682A0033E133 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AF63F45F1C34682A0033E133 /* SaverRunner.m in Sources */, AF63F4601C34682A0033E133 /* main.m in Sources */, AF63F4611C34682A0033E133 /* SaverListController.m in Sources */, AF63F4771C3469570033E133 /* phosphor.c in Sources */, AF63F4651C34682A0033E133 /* ios-function-table.m in Sources */, AFA2118A1CD1AA3A00C0D2A1 /* textclient-mobile.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF63F4861C3469FC0033E133 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AF63F4871C3469FC0033E133 /* SaverRunner.m in Sources */, AF63F4881C3469FC0033E133 /* main.m in Sources */, AF63F4891C3469FC0033E133 /* SaverListController.m in Sources */, AF63F49D1C346B1A0033E133 /* testx11.c in Sources */, AF63F48B1C3469FC0033E133 /* ios-function-table.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF6423F7099FF9C2000F4CD4 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AF6423F9099FF9C2000F4CD4 /* XScreenSaverSubclass.m in Sources */, AF642412099FFAF1000F4CD4 /* extrusion-helix2.c in Sources */, AF642413099FFAF1000F4CD4 /* extrusion-helix3.c in Sources */, AF642414099FFAF1000F4CD4 /* extrusion-helix4.c in Sources */, AF642415099FFAF1000F4CD4 /* extrusion-joinoffset.c in Sources */, AF642416099FFAF1000F4CD4 /* extrusion-screw.c in Sources */, AF642417099FFAF1000F4CD4 /* extrusion-taper.c in Sources */, AF642418099FFAF1000F4CD4 /* extrusion-twistoid.c in Sources */, AF642419099FFAF1000F4CD4 /* extrusion.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF6425D109A18855000F4CD4 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AF6425D209A18855000F4CD4 /* XScreenSaverSubclass.m in Sources */, AF6425E009A188FB000F4CD4 /* hypercube.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF6425F109A189EC000F4CD4 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AF6425F209A189EC000F4CD4 /* XScreenSaverSubclass.m in Sources */, AF64260009A18A94000F4CD4 /* qix.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF64261409A18D6C000F4CD4 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AF64261509A18D6C000F4CD4 /* XScreenSaverSubclass.m in Sources */, AF64262309A18E1E000F4CD4 /* hyperball.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF64263109A18F54000F4CD4 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AF64263209A18F54000F4CD4 /* XScreenSaverSubclass.m in Sources */, AF64264009A18FEB000F4CD4 /* moire2.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF64265409A19229000F4CD4 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AF64265509A19229000F4CD4 /* XScreenSaverSubclass.m in Sources */, AF64266309A192C5000F4CD4 /* munch.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF64268009A194B0000F4CD4 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AF64268109A194B0000F4CD4 /* XScreenSaverSubclass.m in Sources */, AF64268F09A19542000F4CD4 /* goop.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF64277609A1D37A000F4CD4 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AF64277709A1D37A000F4CD4 /* XScreenSaverSubclass.m in Sources */, AF64278809A1D433000F4CD4 /* speedmine.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF6427AD09A2DE36000F4CD4 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AF6427AE09A2DE36000F4CD4 /* XScreenSaverSubclass.m in Sources */, AF6427BE09A2DF47000F4CD4 /* bubbles-default.c in Sources */, AF6427BF09A2DF47000F4CD4 /* bubbles.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF68A48319196CF800D41CD1 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AF68A49919196E3E00D41CD1 /* tessellimage.c in Sources */, AF68A49B19196E3E00D41CD1 /* delaunay.c in Sources */, AF68A48519196CF800D41CD1 /* XScreenSaverSubclass.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF73FF271A09877F00E485E9 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AF73FF391A09889700E485E9 /* binaryring.c in Sources */, AF73FF291A09877F00E485E9 /* XScreenSaverSubclass.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF7511041782B5B900380EA1 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AF7511151782B64300380EA1 /* kaleidocycle.c in Sources */, AF7511051782B5B900380EA1 /* XScreenSaverSubclass.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF7776E909B63ABF00EA3033 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AF7776EA09B63ABF00EA3033 /* XScreenSaverSubclass.m in Sources */, AF77770409B63B5F00EA3033 /* phosphor.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF77771F09B6416100EA3033 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AF77772009B6416100EA3033 /* XScreenSaverSubclass.m in Sources */, AF77772D09B641D300EA3033 /* pacman.c in Sources */, AF77772E09B641D400EA3033 /* pacman_ai.c in Sources */, AF77772F09B641D600EA3033 /* pacman_level.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF77774309B6446500EA3033 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AF77774509B6446500EA3033 /* XScreenSaverSubclass.m in Sources */, AF77775509B644FF00EA3033 /* flipscreen3d.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF77777909B6497800EA3033 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AF77777A09B6497800EA3033 /* XScreenSaverSubclass.m in Sources */, AF77778C09B64A2A00EA3033 /* gleidescope.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF77779309B64A5200EA3033 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AF77779409B64A5200EA3033 /* XScreenSaverSubclass.m in Sources */, AF7777A609B64AFC00EA3033 /* mirrorblob.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF7777AD09B64B2600EA3033 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AF7777AE09B64B2600EA3033 /* XScreenSaverSubclass.m in Sources */, AF7777C609B64BD400EA3033 /* stonerview-move.c in Sources */, AF7777C709B64BD400EA3033 /* stonerview-osc.c in Sources */, AF7777C809B64BD400EA3033 /* stonerview-view.c in Sources */, AF7777C909B64BD400EA3033 /* stonerview.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF7777D509B64C6B00EA3033 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AF7777D609B64C6B00EA3033 /* XScreenSaverSubclass.m in Sources */, AF7777E809B64CF700EA3033 /* glslideshow.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF7777EF09B64E3100EA3033 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AF7777F009B64E3100EA3033 /* XScreenSaverSubclass.m in Sources */, AF77780209B64EC000EA3033 /* fliptext.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF77781509B6504400EA3033 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AF77781609B6504400EA3033 /* XScreenSaverSubclass.m in Sources */, AF77782A09B650FF00EA3033 /* starwars.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF77784A09B6528100EA3033 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AF77784B09B6528100EA3033 /* XScreenSaverSubclass.m in Sources */, AF77787C09B654F800EA3033 /* carousel.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF77786609B6536000EA3033 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AF77786709B6536000EA3033 /* XScreenSaverSubclass.m in Sources */, AF77787709B653DC00EA3033 /* dnalogo.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF77788409B6563500EA3033 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AF77788509B6563500EA3033 /* XScreenSaverSubclass.m in Sources */, AF77789309B656C300EA3033 /* fontglide.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF7778AA09B659C800EA3033 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AF7778AB09B659C800EA3033 /* XScreenSaverSubclass.m in Sources */, AF7778BB09B65A8A00EA3033 /* blitspin.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF78D17A142DD8F3002AAF77 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AF78D17B142DD8F3002AAF77 /* XScreenSaverSubclass.m in Sources */, AF78D18D142DD96E002AAF77 /* hilbert.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF794F69099748450059A8B0 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AF794F6A099748450059A8B0 /* XScreenSaverSubclass.m in Sources */, AF794F7F099748860059A8B0 /* demon.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF794F9309974A320059A8B0 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AF794F9409974A320059A8B0 /* XScreenSaverSubclass.m in Sources */, AF794FAA09974AE30059A8B0 /* fiberlamp.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF794FD209974FA60059A8B0 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AF794FD309974FA60059A8B0 /* XScreenSaverSubclass.m in Sources */, AF794FE109974FEC0059A8B0 /* loop.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF7ACFC519FF0A9200BD752B /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AF7ACFC719FF0A9200BD752B /* XScreenSaverSubclass.m in Sources */, AF7ACFD719FF0B7A00BD752B /* geodesicgears.c in Sources */, AFDDCCEC19FF0D170072365B /* involute.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF918985158FC00A002B5D1E /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AFAA6B451773F07800DE720C /* ios-function-table.m in Sources */, AF918987158FC00A002B5D1E /* main.m in Sources */, AF918986158FC00A002B5D1E /* SaverRunner.m in Sources */, AF918988158FC00A002B5D1E /* SaverListController.m in Sources */, AF918993158FC2BE002B5D1E /* abstractile.c in Sources */, AF918994158FC2BE002B5D1E /* anemone.c in Sources */, AF918995158FC2E0002B5D1E /* analogtv.c in Sources */, AF918996158FC310002B5D1E /* anemotaxis.c in Sources */, AF9189FF158FC38A002B5D1E /* apollonian.c in Sources */, AF918997158FC310002B5D1E /* apple2-main.c in Sources */, AF918998158FC310002B5D1E /* apple2.c in Sources */, AF918999158FC310002B5D1E /* asm6502.c in Sources */, AF91899A158FC310002B5D1E /* attraction.c in Sources */, AF91899B158FC310002B5D1E /* barcode.c in Sources */, AF73FF3A1A09889700E485E9 /* binaryring.c in Sources */, AF91899C158FC310002B5D1E /* blaster.c in Sources */, AF91899D158FC310002B5D1E /* blitspin.c in Sources */, AF918A00158FC38A002B5D1E /* bouboule.c in Sources */, AF91899E158FC310002B5D1E /* boxfit.c in Sources */, AF918A01158FC38A002B5D1E /* braid.c in Sources */, AF91899F158FC310002B5D1E /* bsod.c in Sources */, AF9189A0158FC310002B5D1E /* bubbles-default.c in Sources */, AF9189A2158FC310002B5D1E /* bumps.c in Sources */, AF9189A3158FC310002B5D1E /* ccurve.c in Sources */, AF9189A4158FC310002B5D1E /* celtic.c in Sources */, AF9189A5158FC310002B5D1E /* cloudlife.c in Sources */, AF9189AA158FC311002B5D1E /* compass.c in Sources */, AF9189AB158FC311002B5D1E /* coral.c in Sources */, AF918A02158FC38A002B5D1E /* crystal.c in Sources */, AF9189AD158FC311002B5D1E /* cwaves.c in Sources */, AF9189AE158FC311002B5D1E /* cynosure.c in Sources */, AF9189AF158FC311002B5D1E /* decayscreen.c in Sources */, AF9189B0158FC311002B5D1E /* deco.c in Sources */, AF68A49C19196E3E00D41CD1 /* delaunay.c in Sources */, AF9189B1158FC311002B5D1E /* deluxe.c in Sources */, AF918A03158FC38A002B5D1E /* demon.c in Sources */, AF918A04158FC38A002B5D1E /* discrete.c in Sources */, AF9189B2158FC311002B5D1E /* distort.c in Sources */, AF918A05158FC38A002B5D1E /* drift.c in Sources */, AF9189B3158FC311002B5D1E /* epicycle.c in Sources */, AF9189B4158FC311002B5D1E /* eruption.c in Sources */, AF918A06158FC38A002B5D1E /* euler2d.c in Sources */, AF918A07158FC38A002B5D1E /* fadeplot.c in Sources */, AF918A08158FC38A002B5D1E /* fiberlamp.c in Sources */, AF9189B5158FC311002B5D1E /* fireworkx.c in Sources */, AF9189B6158FC334002B5D1E /* flame.c in Sources */, AF918A0A158FC38A002B5D1E /* flow.c in Sources */, AF9189B7158FC334002B5D1E /* fluidballs.c in Sources */, AF9189B8158FC334002B5D1E /* fontglide.c in Sources */, AF9189B9158FC334002B5D1E /* fps.c in Sources */, AF9189BA158FC334002B5D1E /* fuzzyflakes.c in Sources */, AF918A0C158FC38A002B5D1E /* galaxy.c in Sources */, AF9189BB158FC334002B5D1E /* goop.c in Sources */, AF918A0D158FC38A002B5D1E /* grav.c in Sources */, AF9189BC158FC334002B5D1E /* greynetic.c in Sources */, AF9189BD158FC334002B5D1E /* halftone.c in Sources */, AF9189BE158FC334002B5D1E /* halo.c in Sources */, AF9189BF158FC334002B5D1E /* helix.c in Sources */, AFB591C1178B81E600EA4005 /* hexadrop.c in Sources */, AF918A0E158FC38A002B5D1E /* hopalong.c in Sources */, AF9189C2158FC334002B5D1E /* ifs.c in Sources */, AF9189C3158FC334002B5D1E /* imsmap.c in Sources */, AF9189C4158FC334002B5D1E /* interaggregate.c in Sources */, AF9189C5158FC334002B5D1E /* interference.c in Sources */, AF9189C6158FC334002B5D1E /* intermomentary.c in Sources */, AF918A11158FC38A002B5D1E /* julia.c in Sources */, AF9189C7158FC334002B5D1E /* kaleidescope.c in Sources */, AF9189C8158FC334002B5D1E /* kumppa.c in Sources */, AF918A16158FC38A002B5D1E /* loop.c in Sources */, AF9189CB158FC334002B5D1E /* m6502.c in Sources */, AF9189CC158FC334002B5D1E /* maze.c in Sources */, AF9189CD158FC334002B5D1E /* memscroller.c in Sources */, AF9189CE158FC334002B5D1E /* metaballs.c in Sources */, AF9189CF158FC334002B5D1E /* moire.c in Sources */, AF9189D0158FC334002B5D1E /* moire2.c in Sources */, AF918A17158FC38A002B5D1E /* mountain.c in Sources */, AF9189D1158FC334002B5D1E /* munch.c in Sources */, AF9189D2158FC334002B5D1E /* nerverot.c in Sources */, AF9189D3158FC334002B5D1E /* noseguy.c in Sources */, AF918A18158FC38A002B5D1E /* pacman.c in Sources */, AF918A19158FC38A002B5D1E /* pacman_ai.c in Sources */, AF918A1A158FC38A002B5D1E /* pacman_level.c in Sources */, AF9189D4158FC334002B5D1E /* pedal.c in Sources */, AF9189D5158FC334002B5D1E /* penetrate.c in Sources */, AF9189D6158FC334002B5D1E /* petri.c in Sources */, AF9189D7158FC334002B5D1E /* phosphor.c in Sources */, AF9189D8158FC334002B5D1E /* piecewise.c in Sources */, AF9189D9158FC334002B5D1E /* pong.c in Sources */, AF9189DA158FC334002B5D1E /* popsquares.c in Sources */, AF9189DB158FC334002B5D1E /* pyro.c in Sources */, AF9189DC158FC334002B5D1E /* qix.c in Sources */, AF918A1B158FC38A002B5D1E /* penrose.c in Sources */, AF918A1C158FC38A002B5D1E /* polyominoes.c in Sources */, AF9189DD158FC334002B5D1E /* rd-bomb.c in Sources */, AF9189DE158FC334002B5D1E /* ripples.c in Sources */, AF9189DF158FC35D002B5D1E /* rocks.c in Sources */, AF9189E0158FC35D002B5D1E /* rorschach.c in Sources */, AF9189E1158FC35D002B5D1E /* rotzoomer.c in Sources */, AF9189E2158FC35D002B5D1E /* shadebobs.c in Sources */, AF9189E3158FC35D002B5D1E /* slidescreen.c in Sources */, AF9189E4158FC35D002B5D1E /* speedmine.c in Sources */, AF9189E5158FC35D002B5D1E /* spotlight.c in Sources */, AF9189E6158FC35D002B5D1E /* squiral.c in Sources */, AF9189E7158FC35D002B5D1E /* starfish.c in Sources */, AF9189E8158FC35D002B5D1E /* substrate.c in Sources */, AF918A1E158FC38A002B5D1E /* sierpinski.c in Sources */, AF918A1F158FC38A002B5D1E /* slip.c in Sources */, AF918A22158FC38A002B5D1E /* strange.c in Sources */, AF918A23158FC38A002B5D1E /* swirl.c in Sources */, AFA211891CD1AA2E00C0D2A1 /* textclient-mobile.c in Sources */, AF68A49A19196E3E00D41CD1 /* tessellimage.c in Sources */, AF918A25158FC38A002B5D1E /* triangle.c in Sources */, AF918A24158FC38A002B5D1E /* thornbird.c in Sources */, AF9189EF158FC35D002B5D1E /* truchet.c in Sources */, AF9189F0158FC35D002B5D1E /* twang.c in Sources */, AF9189F1158FC35D002B5D1E /* vermiculate.c in Sources */, AF9189F2158FC35D002B5D1E /* wander.c in Sources */, AF9189F3158FC35E002B5D1E /* whirlwindwarp.c in Sources */, AF9189F5158FC35E002B5D1E /* wormhole.c in Sources */, AF9189F6158FC35E002B5D1E /* xanalogtv.c in Sources */, AF9189F7158FC35E002B5D1E /* xflame.c in Sources */, AF9189F8158FC35E002B5D1E /* xjack.c in Sources */, AF9189F9158FC35E002B5D1E /* xlyap.c in Sources */, AF9189FA158FC35E002B5D1E /* xmatrix.c in Sources */, AF9189FB158FC35E002B5D1E /* xrayswarm.c in Sources */, AF9189FC158FC35E002B5D1E /* xspirograph.c in Sources */, AF9189FD158FC35E002B5D1E /* zoom.c in Sources */, AF918A28158FC3BB002B5D1E /* antinspect.c in Sources */, AF918A29158FC3BB002B5D1E /* antmaze.c in Sources */, AF918A2A158FC3BB002B5D1E /* antspotlight.c in Sources */, AF918A2B158FC3BB002B5D1E /* atlantis.c in Sources */, AF918A2C158FC3BB002B5D1E /* atunnel.c in Sources */, AF918A2D158FC3BB002B5D1E /* b_draw.c in Sources */, AF918A2E158FC3BB002B5D1E /* b_lockglue.c in Sources */, AF918A2F158FC3BB002B5D1E /* b_sphere.c in Sources */, AF918A30158FC3BB002B5D1E /* blinkbox.c in Sources */, AF918A31158FC3BB002B5D1E /* blocktube.c in Sources */, AF918A32158FC3BB002B5D1E /* boing.c in Sources */, AF918A33158FC3BB002B5D1E /* bouncingcow.c in Sources */, AF918A34158FC3BB002B5D1E /* boxed.c in Sources */, AF918A35158FC3BB002B5D1E /* bubble3d.c in Sources */, AF918A36158FC3BB002B5D1E /* buildlwo.c in Sources */, AF918A37158FC3BB002B5D1E /* cage.c in Sources */, AF3938351D0FBF1D00205406 /* discoball.c in Sources */, AF918A38158FC3BB002B5D1E /* carousel.c in Sources */, AF918A39158FC3BB002B5D1E /* chessmodels.c in Sources */, AF918A3A158FC3BB002B5D1E /* circuit.c in Sources */, AF5C9B141A0CCF4E00B0147A /* cityflow.c in Sources */, AF9189A6158FC310002B5D1E /* companion.c in Sources */, AF9189A7158FC311002B5D1E /* companion_disc.c in Sources */, AF9189A8158FC311002B5D1E /* companion_heart.c in Sources */, AF9189A9158FC311002B5D1E /* companion_quad.c in Sources */, AF918A3B158FC3BB002B5D1E /* cow_face.c in Sources */, AF918A3C158FC3BB002B5D1E /* cow_hide.c in Sources */, AF918A3D158FC3BB002B5D1E /* cow_hoofs.c in Sources */, AF918A3E158FC3BB002B5D1E /* cow_horns.c in Sources */, AF918A3F158FC3BB002B5D1E /* cow_tail.c in Sources */, AF918A40158FC3BB002B5D1E /* cow_udder.c in Sources */, AF918A41158FC3BB002B5D1E /* crackberg.c in Sources */, AF918A42158FC3BB002B5D1E /* cube21.c in Sources */, AF918A43158FC3BB002B5D1E /* cubenetic.c in Sources */, AFEE10851D15EBB900AAC8F7 /* cubestack.c in Sources */, AF918A44158FC3BB002B5D1E /* cubestorm.c in Sources */, AFEE10671D1341FA00AAC8F7 /* cubetwist.c in Sources */, AF918A45158FC3BB002B5D1E /* cubicgrid.c in Sources */, AF918A46158FC3BB002B5D1E /* dangerball.c in Sources */, AFCF453715986A2100E6E8CC /* dnalogo.c in Sources */, AF918A48158FC3BB002B5D1E /* dolphin.c in Sources */, AFEC23E91CB6EC7F00DE138F /* dymaxionmap.c in Sources */, AF918A49158FC3BB002B5D1E /* dropshadow.c in Sources */, AF918A4A158FC3E5002B5D1E /* endgame.c in Sources */, AFACE88F1CC83617008B24CD /* energystream.c in Sources */, AF918A4B158FC3E5002B5D1E /* engine.c in Sources */, AF918A54158FC3E5002B5D1E /* flipflop.c in Sources */, AF918A55158FC3E5002B5D1E /* flipscreen3d.c in Sources */, AF918A56158FC3E5002B5D1E /* fliptext.c in Sources */, AF918A57158FC3E5002B5D1E /* flyingtoasters.c in Sources */, AF918A59158FC3E5002B5D1E /* fps-gl.c in Sources */, AF918A5A158FC3E5002B5D1E /* gears.c in Sources */, AFDDCCED19FF0EBD0072365B /* geodesicgears.c in Sources */, AF918A5B158FC3E5002B5D1E /* gflux.c in Sources */, AF918A5C158FC3E5002B5D1E /* glblur.c in Sources */, AF918A5D158FC3E5002B5D1E /* glcells.c in Sources */, AF918A5E158FC3E5002B5D1E /* gleidescope.c in Sources */, AF918A60158FC3E5002B5D1E /* glhanoi.c in Sources */, AF918A61158FC3E5002B5D1E /* glknots.c in Sources */, AF918A62158FC3E5002B5D1E /* glmatrix.c in Sources */, AF918A63158FC3E5002B5D1E /* glplanet.c in Sources */, AF918A64158FC3E5002B5D1E /* glschool.c in Sources */, AF918A65158FC3E5002B5D1E /* glschool_alg.c in Sources */, AF918A66158FC3E5002B5D1E /* glschool_gl.c in Sources */, AF918A67158FC3E5002B5D1E /* glslideshow.c in Sources */, AF918A68158FC3E5002B5D1E /* glsnake.c in Sources */, AF918A69158FC3E5002B5D1E /* gltext.c in Sources */, AF1B0FC31D7AB5500011DBE4 /* hexstrut.c in Sources */, AF918A6A158FC3E5002B5D1E /* hilbert.c in Sources */, AFC0E8C41CDC60B0008CAFAC /* hydrostat.c in Sources */, AF918A6B158FC3E5002B5D1E /* hypertorus.c in Sources */, 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 */, AFB8A69D1782BFA6004EDB85 /* kaleidocycle.c in Sources */, AF918A70158FC417002B5D1E /* klein.c in Sources */, AF918A71158FC417002B5D1E /* lament.c in Sources */, AFF1BA1019A96D8B0016A88D /* lament_model.c in Sources */, AF918A72158FC417002B5D1E /* lavalite.c in Sources */, AF918A74158FC417002B5D1E /* marching.c in Sources */, AF918A75158FC417002B5D1E /* menger.c in Sources */, AF918A76158FC417002B5D1E /* mirrorblob.c in Sources */, AF918A77158FC417002B5D1E /* moebius.c in Sources */, AFF3CA0417CCAEB70028F240 /* geodesic.c in Sources */, AF918A78158FC417002B5D1E /* moebiusgears.c in Sources */, AF918A79158FC417002B5D1E /* molecule.c in Sources */, AF918A7A158FC417002B5D1E /* morph3d.c in Sources */, AF918A7B158FC417002B5D1E /* noof.c in Sources */, AFFAB33319158EA80020F021 /* projectiveplane.c in Sources */, AF918A7C158FC417002B5D1E /* photopile.c in Sources */, 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 */, AFF28699178611720050A578 /* quasicrystal.c in Sources */, AF918A85158FC417002B5D1E /* queens.c in Sources */, AFA211A81CD5A04300C0D2A1 /* raverhoop.c in Sources */, AFBE744119A7C6EF0018AA35 /* robot.c in Sources */, AF39E2B7198A15EE0064A58D /* robot-wireframe.c in Sources */, AF63A80D1AB4EF5D00593C75 /* romanboy.c in Sources */, AF918A86158FC417002B5D1E /* rubik.c in Sources */, AF918A87158FC417002B5D1E /* rubikblocks.c in Sources */, AF918A88158FC417002B5D1E /* s1_1.c in Sources */, AF918A89158FC417002B5D1E /* s1_2.c in Sources */, AF918A8A158FC417002B5D1E /* s1_3.c in Sources */, AF918A8B158FC417002B5D1E /* s1_4.c in Sources */, AF918A8C158FC417002B5D1E /* s1_5.c in Sources */, AF918A8D158FC417002B5D1E /* s1_6.c in Sources */, AF918A8E158FC417002B5D1E /* s1_b.c in Sources */, AF918A8F158FC417002B5D1E /* sballs.c in Sources */, AF918A90158FC417002B5D1E /* shark.c in Sources */, AF918A91158FC417002B5D1E /* sierpinski3d.c in Sources */, AF918A92158FC417002B5D1E /* skytentacles.c in Sources */, AF918A93158FC417002B5D1E /* sonar-icmp.c in Sources */, AF918A94158FC417002B5D1E /* sonar-sim.c in Sources */, AF918A95158FC417002B5D1E /* sonar.c in Sources */, AF918A96158FC417002B5D1E /* spheremonics.c in Sources */, AFCF835A1AF5B5FD008BB7E1 /* splitflap.c in Sources */, AFCF83581AF5B5FD008BB7E1 /* splitflap_obj.c in Sources */, AFEE10A41D17E2BA00AAC8F7 /* splodesic.c in Sources */, AF918A97158FC473002B5D1E /* sproingies.c in Sources */, AF918A98158FC473002B5D1E /* sproingiewrap.c in Sources */, AF918A99158FC473002B5D1E /* stairs.c in Sources */, AF918A9A158FC473002B5D1E /* starwars.c in Sources */, AF918A9B158FC473002B5D1E /* stonerview-move.c in Sources */, AF918A9C158FC473002B5D1E /* stonerview-osc.c in Sources */, AF918A9D158FC473002B5D1E /* stonerview-view.c in Sources */, AF918A9E158FC473002B5D1E /* stonerview.c in Sources */, AF918A9F158FC473002B5D1E /* superquadrics.c in Sources */, AF918AA0158FC473002B5D1E /* surfaces.c in Sources */, AF918AA1158FC473002B5D1E /* swim.c in Sources */, AF918AA2158FC473002B5D1E /* tangram.c in Sources */, AF918AA3158FC473002B5D1E /* tangram_shapes.c in Sources */, AF918AA4158FC473002B5D1E /* teapot.c in Sources */, AF918AA5158FC473002B5D1E /* timetunnel.c in Sources */, AF918AA6158FC473002B5D1E /* toast.c in Sources */, AF918AA7158FC473002B5D1E /* toast2.c in Sources */, AF918AA8158FC473002B5D1E /* toaster.c in Sources */, AF918AA9158FC473002B5D1E /* toaster_base.c in Sources */, AF918AAA158FC473002B5D1E /* toaster_handle.c in Sources */, AF918AAB158FC473002B5D1E /* toaster_handle2.c in Sources */, AF918AAC158FC473002B5D1E /* toaster_jet.c in Sources */, AF918AAD158FC473002B5D1E /* toaster_knob.c in Sources */, AF918AAE158FC473002B5D1E /* toaster_slots.c in Sources */, AF918AAF158FC473002B5D1E /* toaster_wing.c in Sources */, AF918AB0158FC473002B5D1E /* topblock.c in Sources */, AF9189EA158FC35D002B5D1E /* tronbit.c in Sources */, AF9189EB158FC35D002B5D1E /* tronbit_idle1.c in Sources */, AF9189EC158FC35D002B5D1E /* tronbit_idle2.c in Sources */, AF9189ED158FC35D002B5D1E /* tronbit_no.c in Sources */, AF9189EE158FC35D002B5D1E /* tronbit_yes.c in Sources */, AF918AB1158FC47B002B5D1E /* tunnel_draw.c in Sources */, AF46E9EB1CBBA43B00240FBC /* unicrud.c in Sources */, AFDA65A8178A541A0070D24B /* unknownpleasures.c in Sources */, AF918AB2158FC47B002B5D1E /* voronoi.c in Sources */, AF918AB3158FC47B002B5D1E /* whale.c in Sources */, AF39E2B8198A15EE0064A58D /* winduprobot.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF975732099C317000B05160 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AF975734099C317000B05160 /* XScreenSaverSubclass.m in Sources */, AF975741099C31DD00B05160 /* imsmap.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF97577A099C374A00B05160 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AF97577B099C374A00B05160 /* XScreenSaverSubclass.m in Sources */, AF97578A099C37A500B05160 /* moire.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF9757C7099C3E6300B05160 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AF9757C8099C3E6300B05160 /* XScreenSaverSubclass.m in Sources */, AF9757D6099C3EB800B05160 /* rd-bomb.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF97580D099C41D500B05160 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AF97580E099C41D500B05160 /* XScreenSaverSubclass.m in Sources */, AF975830099C427500B05160 /* xflame.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF97586A099C475900B05160 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AF97586B099C475900B05160 /* XScreenSaverSubclass.m in Sources */, AF97587B099C492000B05160 /* shadebobs.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF975A3B099C681F00B05160 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AF975A3C099C681F00B05160 /* XScreenSaverSubclass.m in Sources */, AF975A4A099C689F00B05160 /* metaballs.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF975A71099C6AB200B05160 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AF975A72099C6AB200B05160 /* XScreenSaverSubclass.m in Sources */, AF975A84099C6B4900B05160 /* eruption.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF975A8B099C6BC300B05160 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AF975A8C099C6BC300B05160 /* XScreenSaverSubclass.m in Sources */, AF975A9A099C6C3600B05160 /* barcode.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF975ADC099C6EB100B05160 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AF975ADD099C6EB100B05160 /* XScreenSaverSubclass.m in Sources */, AF975AEF099C6F1700B05160 /* fireworkx.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF975B01099C6FE400B05160 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AF975B02099C6FE400B05160 /* XScreenSaverSubclass.m in Sources */, AF975B15099C709E00B05160 /* memscroller.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF975C17099C8C1500B05160 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AF975C18099C8C1500B05160 /* XScreenSaverSubclass.m in Sources */, AF975C29099C8C7600B05160 /* halo.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF975C43099C8DCF00B05160 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AF975C44099C8DCF00B05160 /* XScreenSaverSubclass.m in Sources */, AF975C56099C8E3000B05160 /* greynetic.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF975C63099C8F3F00B05160 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AF975C64099C8F3F00B05160 /* XScreenSaverSubclass.m in Sources */, AF975C77099C8FC700B05160 /* noseguy.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF975D58099CA0F000B05160 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AF975D59099CA0F000B05160 /* XScreenSaverSubclass.m in Sources */, AF975D67099CA16A00B05160 /* rocks.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF976FB90989CAA2001F8B92 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AF976FCC0989CAD7001F8B92 /* deco.c in Sources */, AF9CCAB809959D0D0075E99B /* XScreenSaverSubclass.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF97702C0989D1E6001F8B92 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AF9770420989D21A001F8B92 /* rorschach.c in Sources */, AF9CCABC09959D200075E99B /* XScreenSaverSubclass.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF9770690989D2F6001F8B92 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AF97707F0989D327001F8B92 /* attraction.c in Sources */, AF9CC8EE09958D920075E99B /* XScreenSaverSubclass.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF9771D40989DC4A001F8B92 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AF9771DF0989DC88001F8B92 /* SaverRunner.m in Sources */, AF9772C80989DCD5001F8B92 /* main.m in Sources */, AF84AF2015829AF000607E4C /* SaverListController.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF998EDF0A083DB30051049D /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AF998EE10A083DB30051049D /* XScreenSaverSubclass.m in Sources */, AF998EF90A083E750051049D /* topblock.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF9D466B09B5109C006E59CF /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AF9D466D09B5109C006E59CF /* XScreenSaverSubclass.m in Sources */, AF9D467909B5110B006E59CF /* decayscreen.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF9D474909B5300A006E59CF /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AF9D474A09B5300A006E59CF /* XScreenSaverSubclass.m in Sources */, AF9D475909B53091006E59CF /* slidescreen.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF9D476409B53166006E59CF /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AF9D476509B53166006E59CF /* XScreenSaverSubclass.m in Sources */, AF9D48D509B53229006E59CF /* zoom.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF9D48E009B53322006E59CF /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AF9D48E109B53322006E59CF /* XScreenSaverSubclass.m in Sources */, AF9D48F009B533AE006E59CF /* bumps.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF9D48F909B535DA006E59CF /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AF9D48FA09B535DA006E59CF /* XScreenSaverSubclass.m in Sources */, AF9D490809B536F7006E59CF /* distort.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF9D493009B53CBA006E59CF /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AF9D493109B53CBA006E59CF /* XScreenSaverSubclass.m in Sources */, AF9D493F09B53D55006E59CF /* ripples.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF9D495909B53FC9006E59CF /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AF9D495A09B53FC9006E59CF /* XScreenSaverSubclass.m in Sources */, AF9D496809B540A4006E59CF /* rotzoomer.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF9D497109B5411D006E59CF /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AF9D497209B5411D006E59CF /* XScreenSaverSubclass.m in Sources */, AF9D498009B541E6006E59CF /* twang.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF9D499C09B544C2006E59CF /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AF9D499D09B544C2006E59CF /* XScreenSaverSubclass.m in Sources */, AF9D49AB09B54596006E59CF /* spotlight.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF9D4C6E09B59F27006E59CF /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AF9D4C6F09B59F27006E59CF /* XScreenSaverSubclass.m in Sources */, AF9D4C7D09B5A044006E59CF /* xlyap.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF9D4CEC09B5AA8E006E59CF /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AF9D4CED09B5AA8E006E59CF /* XScreenSaverSubclass.m in Sources */, AF9D4CFD09B5AC94006E59CF /* analogtv.c in Sources */, AF9D4CFE09B5AC94006E59CF /* pong.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF9D4D8309B5B2DC006E59CF /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AF9D4D8409B5B2DC006E59CF /* XScreenSaverSubclass.m in Sources */, AF9D4D8509B5B2DC006E59CF /* analogtv.c in Sources */, AF9D4D9309B5B444006E59CF /* xanalogtv.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF9D4DB409B5B71E006E59CF /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AF9D4DB509B5B71E006E59CF /* XScreenSaverSubclass.m in Sources */, AF9D4DB609B5B71E006E59CF /* analogtv.c in Sources */, AF9D4DC409B5B87D006E59CF /* bsod.c in Sources */, AF9D4DD409B5B990006E59CF /* apple2.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF9D4DF109B5BB19006E59CF /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AF9D4DF209B5BB19006E59CF /* XScreenSaverSubclass.m in Sources */, AF9D4DF309B5BB19006E59CF /* analogtv.c in Sources */, AF9D4DF509B5BB19006E59CF /* apple2.c in Sources */, AF9D4E0609B5BC9D006E59CF /* apple2-main.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AF9E7EBB190F4C1B00A8B01F /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AF9E7EC9190F4C4000A8B01F /* enable_gc.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFA211911CD59DAF00C0D2A1 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AFA211A71CD5A03F00C0D2A1 /* raverhoop.c in Sources */, AFA211931CD59DAF00C0D2A1 /* XScreenSaverSubclass.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFA339340B058505002B0E7D /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AFA339350B058505002B0E7D /* XScreenSaverSubclass.m in Sources */, AFA33BAF0B0585F7002B0E7D /* webcollage-cocoa.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFA33BC40B058740002B0E7D /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AFA33BD10B0587EE002B0E7D /* webcollage-helper-cocoa.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFA5594B099330B000F3E977 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AFA5595E0993310500F3E977 /* cage.c in Sources */, AF9CCAB709959D000075E99B /* XScreenSaverSubclass.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFA559720993317900F3E977 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AFA55983099331C300F3E977 /* moebius.c in Sources */, AF9CCABF09959D2E0075E99B /* XScreenSaverSubclass.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFA559970993322100F3E977 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AFA559A90993326300F3E977 /* superquadrics.c in Sources */, AF9CCAC109959D380075E99B /* XScreenSaverSubclass.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFA559BA0993328000F3E977 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AFA559CD099332E800F3E977 /* morph3d.c in Sources */, AF9CCAC009959D310075E99B /* XScreenSaverSubclass.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFA559D40993330600F3E977 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AFA559EB0993335C00F3E977 /* rubik.c in Sources */, AF9CCABE09959D290075E99B /* XScreenSaverSubclass.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFA55A080993340300F3E977 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AFA55A1B0993345900F3E977 /* stairs.c in Sources */, AF9CCAC209959D3C0075E99B /* XScreenSaverSubclass.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFA55A25099334A000F3E977 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AFA55A4A0993351F00F3E977 /* s1_1.c in Sources */, AFA55A4B0993351F00F3E977 /* s1_2.c in Sources */, AFA55A4C0993351F00F3E977 /* s1_3.c in Sources */, AFA55A4D0993351F00F3E977 /* s1_4.c in Sources */, AFA55A4E0993351F00F3E977 /* s1_5.c in Sources */, AFA55A4F0993351F00F3E977 /* s1_6.c in Sources */, AFA55A500993351F00F3E977 /* s1_b.c in Sources */, AFA55A510993351F00F3E977 /* sproingies.c in Sources */, AFA55A520993351F00F3E977 /* sproingiewrap.c in Sources */, AF9CCAC309959D420075E99B /* XScreenSaverSubclass.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFA55A7E0993364300F3E977 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AFA55A8F0993369100F3E977 /* lament.c in Sources */, AFF1BA0F19A96D8B0016A88D /* lament_model.c in Sources */, AF9CCAC409959D450075E99B /* XScreenSaverSubclass.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFA55AD409933CEF00F3E977 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AFA55AE509933D3800F3E977 /* bubble3d.c in Sources */, AFA55AF709933DBF00F3E977 /* b_draw.c in Sources */, AFA55AF809933DBF00F3E977 /* b_lockglue.c in Sources */, AFA55AF909933DBF00F3E977 /* b_sphere.c in Sources */, AF9CCAC509959D4B0075E99B /* XScreenSaverSubclass.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFA55B0E09933E0500F3E977 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AFA55B2209933E4A00F3E977 /* glplanet.c in Sources */, AF9CCAC609959D500075E99B /* XScreenSaverSubclass.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFA55B2A09933E8D00F3E977 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AFA55B4509933EF800F3E977 /* pulsar.c in Sources */, AF9CCAC709959D550075E99B /* XScreenSaverSubclass.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFA55B7E09933F7200F3E977 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AFA55B8F09933FBF00F3E977 /* sierpinski3d.c in Sources */, AF9CCAC809959D5A0075E99B /* XScreenSaverSubclass.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFA55B9609933FDA00F3E977 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AFA55BA70993401A00F3E977 /* gflux.c in Sources */, AF9CCAC909959D5D0075E99B /* XScreenSaverSubclass.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFA55BB0099340CE00F3E977 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AFA55BC10993416E00F3E977 /* circuit.c in Sources */, AF9CCACA09959D630075E99B /* XScreenSaverSubclass.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFA55BE90993429100F3E977 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AFA55BFA099342D500F3E977 /* menger.c in Sources */, AF9CCACB09959D680075E99B /* XScreenSaverSubclass.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFA55C130993431300F3E977 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AFA55C240993435300F3E977 /* engine.c in Sources */, AF9CCACC09959D6B0075E99B /* XScreenSaverSubclass.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFA55C7C099349A600F3E977 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AFA55C8D099349EE00F3E977 /* glsnake.c in Sources */, AF9CCACD09959D720075E99B /* XScreenSaverSubclass.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFA55CAE09934BB200F3E977 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AFA55CC009934C0900F3E977 /* boxed.c in Sources */, AF9CCACE09959D750075E99B /* XScreenSaverSubclass.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFA55CD109934CE400F3E977 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AFA55CE209934D2E00F3E977 /* glforestfire.c in Sources */, AF9CCACF09959D7C0075E99B /* XScreenSaverSubclass.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFA55D410993565300F3E977 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AFA55D520993569C00F3E977 /* sballs.c in Sources */, AF9CCAD009959D800075E99B /* XScreenSaverSubclass.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFA55D670993584B00F3E977 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AFA55D780993589300F3E977 /* cubenetic.c in Sources */, AF9CCAD109959D850075E99B /* XScreenSaverSubclass.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFA55D84099358C400F3E977 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AFA55D950993590F00F3E977 /* spheremonics.c in Sources */, AF9CCAD209959D8A0075E99B /* XScreenSaverSubclass.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFA55DCD09935D7000F3E977 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AFA55DDE09935DB600F3E977 /* lavalite.c in Sources */, AFA55DE309935DFB00F3E977 /* marching.c in Sources */, AF9CCAD309959D8F0075E99B /* XScreenSaverSubclass.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFA55DF509935E4900F3E977 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AFA55E0709935EB800F3E977 /* queens.c in Sources */, AF9CCAD409959D980075E99B /* XScreenSaverSubclass.m in Sources */, AF012918157C1E4C00C396E1 /* chessmodels.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFA55E1209935EDC00F3E977 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AFA55E2609935F2B00F3E977 /* chessmodels.c in Sources */, AFA55E2709935F2B00F3E977 /* endgame.c in Sources */, AF9CCAD509959D9C0075E99B /* XScreenSaverSubclass.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFA55E3409935F8E00F3E977 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AFA55E4609935FD300F3E977 /* glblur.c in Sources */, AF9CCAD609959DA30075E99B /* XScreenSaverSubclass.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFA55E5309935FF900F3E977 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AFA55EAD0993608800F3E977 /* flyingtoasters.c in Sources */, AFA55EAE0993608800F3E977 /* toast.c in Sources */, AFA55EB00993608800F3E977 /* toast2.c in Sources */, AFA55EB20993608800F3E977 /* toaster_base.c in Sources */, AFA55EB40993608800F3E977 /* toaster_handle.c in Sources */, AFA55EB60993608800F3E977 /* toaster_handle2.c in Sources */, AFA55EB80993608800F3E977 /* toaster_jet.c in Sources */, AFA55EBA0993608800F3E977 /* toaster_knob.c in Sources */, AFA55EBC0993608800F3E977 /* toaster_slots.c in Sources */, AFA55EBE0993608800F3E977 /* toaster_wing.c in Sources */, AFA55EC00993608800F3E977 /* toaster.c in Sources */, AF9CCAD709959DA70075E99B /* XScreenSaverSubclass.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFA55ECC099360E300F3E977 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AFA55EEE0993613E00F3E977 /* bouncingcow.c in Sources */, AFA55EEF0993613E00F3E977 /* cow_face.c in Sources */, AFA55EF00993613E00F3E977 /* cow_hide.c in Sources */, AFA55EF10993613E00F3E977 /* cow_hoofs.c in Sources */, AFA55EF20993613E00F3E977 /* cow_horns.c in Sources */, AFA55EF30993613E00F3E977 /* cow_tail.c in Sources */, AFA55EF40993613E00F3E977 /* cow_udder.c in Sources */, AF9CCAD809959DAE0075E99B /* XScreenSaverSubclass.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFA55F0B099361B700F3E977 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AFA55F220993620200F3E977 /* jigglypuff.c in Sources */, AF9CCAD909959DB20075E99B /* XScreenSaverSubclass.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFA55F2F0993622F00F3E977 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AFA55F400993626E00F3E977 /* klein.c in Sources */, AF9CCADA09959DB60075E99B /* XScreenSaverSubclass.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFA55F470993629000F3E977 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AFA55F5A099362DF00F3E977 /* hypertorus.c in Sources */, AF9CCADB09959DBB0075E99B /* XScreenSaverSubclass.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFA55F770993643600F3E977 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AFA55F880993648500F3E977 /* glmatrix.c in Sources */, AF9CCADC09959DC10075E99B /* XScreenSaverSubclass.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFA55FD809936BFA00F3E977 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AFA55FF409936C4500F3E977 /* cubestorm.c in Sources */, AF9CCADD09959DC60075E99B /* XScreenSaverSubclass.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFA55FFE09936C6D00F3E977 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AFA5600F09936CB300F3E977 /* glknots.c in Sources */, AF9CCADE09959DCB0075E99B /* XScreenSaverSubclass.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFA5601909936CC800F3E977 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AFA5602A09936D0700F3E977 /* blocktube.c in Sources */, AF9CCADF09959DCE0075E99B /* XScreenSaverSubclass.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFA5603709936D5100F3E977 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AFA5604809936DCC00F3E977 /* flipflop.c in Sources */, AF9CCAE009959DD50075E99B /* XScreenSaverSubclass.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFA5604F09936E2100F3E977 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AFA5608109936FFA00F3E977 /* antinspect.c in Sources */, AF9CCAE109959DDA0075E99B /* XScreenSaverSubclass.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFA5606709936F3800F3E977 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AFA5607B09936FDD00F3E977 /* antspotlight.c in Sources */, AF9CCAE209959DDF0075E99B /* XScreenSaverSubclass.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFA560B30993718D00F3E977 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AFA560C4099371D500F3E977 /* polytopes.c in Sources */, AF9CCAE309959DE20075E99B /* XScreenSaverSubclass.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFA561020993781600F3E977 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AFA561130993786800F3E977 /* molecule.c in Sources */, AF9CCAE409959DE60075E99B /* XScreenSaverSubclass.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFA5615D09937C0D00F3E977 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AFA5616E09937C9A00F3E977 /* blinkbox.c in Sources */, AF9CCAE509959DEB0075E99B /* XScreenSaverSubclass.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFA5618009937CF100F3E977 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AFA5619109937D3600F3E977 /* noof.c in Sources */, AF9CCAE609959DF00075E99B /* XScreenSaverSubclass.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFA561A209937D7E00F3E977 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AFA561B509937DCC00F3E977 /* polyhedra-gl.c in Sources */, AFA561B609937DCC00F3E977 /* polyhedra.c in Sources */, AF9CCAE709959DF50075E99B /* XScreenSaverSubclass.m in Sources */, AFC211950E4E30C800D87B6E /* teapot.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFA5620B0993849F00F3E977 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AFA5621D099384F600F3E977 /* providence.c in Sources */, AF9CCAE809959DF90075E99B /* XScreenSaverSubclass.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFA562240993852500F3E977 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AFA562350993856A00F3E977 /* pinion.c in Sources */, AF9CCAE909959E000075E99B /* XScreenSaverSubclass.m in Sources */, AFE6A16C0CDD78EA002805BF /* involute.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFA562C4099392C600F3E977 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AFA562D50993930C00F3E977 /* boing.c in Sources */, AF9CCAEA09959E050075E99B /* XScreenSaverSubclass.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFA562DF099393C900F3E977 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AFA562F00993941600F3E977 /* antmaze.c in Sources */, AF9CCAEB09959E090075E99B /* XScreenSaverSubclass.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFA562F70993943B00F3E977 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AFA5630A0993948F00F3E977 /* tangram_shapes.c in Sources */, AFA5630B0993948F00F3E977 /* tangram.c in Sources */, AF9CCAEC09959E0D0075E99B /* XScreenSaverSubclass.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFA563180993951000F3E977 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AFA5632A0993957100F3E977 /* crackberg.c in Sources */, AF9CCAED09959E140075E99B /* XScreenSaverSubclass.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFA56336099395ED00F3E977 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AFA563750993977D00F3E977 /* glhanoi.c in Sources */, AF9CCAEE09959E170075E99B /* XScreenSaverSubclass.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFA56356099396C000F3E977 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AFA563760993978D00F3E977 /* cube21.c in Sources */, AF9CCAEF09959E1E0075E99B /* XScreenSaverSubclass.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFA5637E099397B300F3E977 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AFA5638F0993980D00F3E977 /* timetunnel.c in Sources */, AF9CCAF009959E230075E99B /* XScreenSaverSubclass.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFA563A9099398BB00F3E977 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AFA563BA0993991300F3E977 /* juggler3d.c in Sources */, AF9CCAF109959E270075E99B /* XScreenSaverSubclass.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFACE8781CC83458008B24CD /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AFACE87A1CC83458008B24CD /* XScreenSaverSubclass.m in Sources */, AFACE88E1CC83613008B24CD /* energystream.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFB591AC178B812C00EA4005 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AFB591AE178B812C00EA4005 /* XScreenSaverSubclass.m in Sources */, AFB591C0178B81E600EA4005 /* hexadrop.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFBFE751178642DC00432B21 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AFBFE752178642DC00432B21 /* SaverRunner.m in Sources */, AFBFE753178642DC00432B21 /* main.m in Sources */, AFBFE754178642DC00432B21 /* SaverListController.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFBFE771178647FE00432B21 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AFBFE772178647FE00432B21 /* SaverRunner.m in Sources */, AFBFE773178647FE00432B21 /* main.m in Sources */, AFBFE774178647FE00432B21 /* SaverListController.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFC0E8B01CDC601A008CAFAC /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AFC0E8C51CDC60D6008CAFAC /* hydrostat.c in Sources */, AFC0E8B21CDC601A008CAFAC /* XScreenSaverSubclass.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFCF83401AF5B515008BB7E1 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AFCF83421AF5B515008BB7E1 /* XScreenSaverSubclass.m in Sources */, AFCF83571AF5B5FD008BB7E1 /* splitflap_obj.c in Sources */, AFCF83591AF5B5FD008BB7E1 /* splitflap.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFD51B210F063B4A00471C02 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AFD51B220F063B4A00471C02 /* XScreenSaverSubclass.m in Sources */, AFD51DB70F063BCE00471C02 /* photopile.c in Sources */, AF241F83107C38DF00046A84 /* dropshadow.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFD56DF60996A03800BA26F7 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AFD56DF80996A03800BA26F7 /* XScreenSaverSubclass.m in Sources */, AFD56E090996A07A00BA26F7 /* gltext.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFD56EB30996A72600BA26F7 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AFD56EB50996A72600BA26F7 /* XScreenSaverSubclass.m in Sources */, AF64232F099F45C3000F4CD4 /* braid.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFD56EDF0996A95700BA26F7 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AFD56EE00996A95700BA26F7 /* XScreenSaverSubclass.m in Sources */, AFD56EEE0996A99E00BA26F7 /* forest.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFD56F100996AAFA00BA26F7 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AFD56F110996AAFA00BA26F7 /* XScreenSaverSubclass.m in Sources */, AFD56F200996AB5A00BA26F7 /* vines.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFD56F280996AB8A00BA26F7 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AFD56F290996AB8A00BA26F7 /* XScreenSaverSubclass.m in Sources */, AFD56F370996ABD200BA26F7 /* galaxy.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFD56F540996AEEE00BA26F7 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AFD56F550996AEEE00BA26F7 /* XScreenSaverSubclass.m in Sources */, AFD56F630996AF2D00BA26F7 /* grav.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFD56F700996B01600BA26F7 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AFD56F710996B01600BA26F7 /* XScreenSaverSubclass.m in Sources */, AFD56F890996B06600BA26F7 /* hopalong.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFD56F910996B09400BA26F7 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AFD56F920996B09400BA26F7 /* XScreenSaverSubclass.m in Sources */, AFD56FA10996B0E500BA26F7 /* laser.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFD56FA80996B10F00BA26F7 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AFD56FA90996B10F00BA26F7 /* XScreenSaverSubclass.m in Sources */, AFD56FB70996B16300BA26F7 /* lightning.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFD56FBE0996B18F00BA26F7 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AFD56FBF0996B18F00BA26F7 /* XScreenSaverSubclass.m in Sources */, AFD56FCD0996B1D600BA26F7 /* lisa.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFD56FD40996B20900BA26F7 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AFD56FD50996B20900BA26F7 /* XScreenSaverSubclass.m in Sources */, AFD56FE30996B26200BA26F7 /* lissie.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFD56FFD0996B43800BA26F7 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AFD56FFE0996B43800BA26F7 /* XScreenSaverSubclass.m in Sources */, AFD5700D0996B49D00BA26F7 /* penrose.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFD570140996B4CC00BA26F7 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AFD570150996B4CC00BA26F7 /* XScreenSaverSubclass.m in Sources */, AFD570230996B52700BA26F7 /* sierpinski.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFD5702B0996B56D00BA26F7 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AFD5702C0996B56D00BA26F7 /* XScreenSaverSubclass.m in Sources */, AFD5703C0996B5E300BA26F7 /* sphere.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFD570480996B61600BA26F7 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AFD570490996B61600BA26F7 /* XScreenSaverSubclass.m in Sources */, AFD570570996B67600BA26F7 /* spiral.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFD5705E0996B6A300BA26F7 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AFD5705F0996B6A300BA26F7 /* XScreenSaverSubclass.m in Sources */, AFD5706D0996B70000BA26F7 /* fadeplot.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFD570740996B72700BA26F7 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AFD570750996B72700BA26F7 /* XScreenSaverSubclass.m in Sources */, AFD570830996B79300BA26F7 /* mountain.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFD5708A0996B80300BA26F7 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AFD5708B0996B80300BA26F7 /* XScreenSaverSubclass.m in Sources */, AFD570990996B86200BA26F7 /* triangle.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFD570A00996B88E00BA26F7 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AFD570A10996B88E00BA26F7 /* XScreenSaverSubclass.m in Sources */, AFD570AF0996B8EF00BA26F7 /* worm.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFD570B60996B93000BA26F7 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AFD570B70996B93000BA26F7 /* XScreenSaverSubclass.m in Sources */, AFD570C50996B98500BA26F7 /* rotor.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFD570CE0996B9F800BA26F7 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AFD570CF0996B9F800BA26F7 /* XScreenSaverSubclass.m in Sources */, AFD570DF0996BA5D00BA26F7 /* ant.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFD570EF0996BBBF00BA26F7 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AFD570F00996BBBF00BA26F7 /* XScreenSaverSubclass.m in Sources */, AFD571020996BC3800BA26F7 /* flow.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFD571180996BE9300BA26F7 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AFD571190996BE9300BA26F7 /* XScreenSaverSubclass.m in Sources */, AFD571290996BEF700BA26F7 /* discrete.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFD571310996BF2E00BA26F7 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AFD571320996BF2E00BA26F7 /* XScreenSaverSubclass.m in Sources */, AFD571400996BFBE00BA26F7 /* apollonian.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFD571480996C01700BA26F7 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AFD571490996C01700BA26F7 /* XScreenSaverSubclass.m in Sources */, AFD571570996C07F00BA26F7 /* euler2d.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFD5715E0996C0CE00BA26F7 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AFD5715F0996C0CE00BA26F7 /* XScreenSaverSubclass.m in Sources */, AFD5716C0996C16700BA26F7 /* thornbird.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFD571BA0996D9DC00BA26F7 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AFD571BB0996D9DC00BA26F7 /* XScreenSaverSubclass.m in Sources */, AFD571C90996DA4600BA26F7 /* juggle.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFD572270996E4A300BA26F7 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AFD572280996E4A300BA26F7 /* XScreenSaverSubclass.m in Sources */, AFD572360996E53E00BA26F7 /* swirl.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFD572720996EE8500BA26F7 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AFD572730996EE8500BA26F7 /* XScreenSaverSubclass.m in Sources */, AFD572810996EF2B00BA26F7 /* polyominoes.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFD572AA0996F99600BA26F7 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AFD572AB0996F99600BA26F7 /* XScreenSaverSubclass.m in Sources */, AFD572BA0996FB3D00BA26F7 /* bouboule.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFD572C70996FC0F00BA26F7 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AFD572C80996FC0F00BA26F7 /* XScreenSaverSubclass.m in Sources */, AFD572EE0997006E00BA26F7 /* crystal.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFD572FE099701C000BA26F7 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AFD572FF099701C000BA26F7 /* XScreenSaverSubclass.m in Sources */, AFD5730D099702C800BA26F7 /* julia.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFD573620997411200BA26F7 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AFD573630997411200BA26F7 /* XScreenSaverSubclass.m in Sources */, AFD57372099741A200BA26F7 /* strange.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFDA6593178A52B70070D24B /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AFDA6595178A52B70070D24B /* XScreenSaverSubclass.m in Sources */, AFDA65A7178A541A0070D24B /* unknownpleasures.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFE2A45B0E2E904600ADB298 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AFE2A45C0E2E904600ADB298 /* XScreenSaverSubclass.m in Sources */, AFE2A4730E2E90E300ADB298 /* skytentacles.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFE30BED0E52B14700CCF4A5 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AFE30BEE0E52B14700CCF4A5 /* XScreenSaverSubclass.m in Sources */, AFE30C020E52B1DC00CCF4A5 /* sonar-icmp.c in Sources */, AFE30C030E52B1DC00CCF4A5 /* sonar-sim.c in Sources */, AFE30C040E52B1DC00CCF4A5 /* sonar.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFE6A1870CDD7B2E002805BF /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AFE6A1890CDD7B2E002805BF /* XScreenSaverSubclass.m in Sources */, AFE6A18A0CDD7B2E002805BF /* involute.c in Sources */, AFE6A40C0CDD7BC3002805BF /* moebiusgears.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFE6A4210CDD7FAA002805BF /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AFE6A4220CDD7FAA002805BF /* XScreenSaverSubclass.m in Sources */, AFE6A4350CDD800F002805BF /* abstractile.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFEC23D21CB6EAE100DE138F /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AFEC23E61CB6EC0400DE138F /* dymaxionmap.c in Sources */, AFEC23D41CB6EAE100DE138F /* XScreenSaverSubclass.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFEE10521D13406000AAC8F7 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AFEE10661D1341F600AAC8F7 /* cubetwist.c in Sources */, AFEE10541D13406000AAC8F7 /* XScreenSaverSubclass.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFEE10711D15EB0800AAC8F7 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AFEE10731D15EB0800AAC8F7 /* XScreenSaverSubclass.m in Sources */, AFEE10861D15EBC800AAC8F7 /* cubestack.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFEE10901D17E20B00AAC8F7 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AFEE10A51D17E2C500AAC8F7 /* splodesic.c in Sources */, AFEE10921D17E20B00AAC8F7 /* XScreenSaverSubclass.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFF2868417860E830050A578 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AFF2868617860E830050A578 /* XScreenSaverSubclass.m in Sources */, AFF28698178611720050A578 /* quasicrystal.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFF3C9ED17CCAC440028F240 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AFF3C9EF17CCAC440028F240 /* XScreenSaverSubclass.m in Sources */, AFF3CA0317CCAEB70028F240 /* geodesic.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFF4633B0C4403E400EE6509 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AFF4633C0C4403E400EE6509 /* XScreenSaverSubclass.m in Sources */, AFF4634A0C44044F00EE6509 /* cwaves.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFF4635D0C440AEF00EE6509 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AFF4635F0C440AEF00EE6509 /* XScreenSaverSubclass.m in Sources */, AFF463720C440B9200EE6509 /* glcells.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; AFFAB31A19158CE40020F021 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( AFFAB31C19158CE40020F021 /* XScreenSaverSubclass.m in Sources */, AFFAB33219158EA80020F021 /* projectiveplane.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; CE3D01561B76F4C100993C75 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( CE3D016B1B76F93700993C75 /* testx11.c in Sources */, CE3D01581B76F4C100993C75 /* XScreenSaverSubclass.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXSourcesBuildPhase section */ /* Begin PBXTargetDependency section */ AF08399009930B6B00277BE9 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AF08399109930B6B00277BE9 /* PBXContainerItemProxy */; }; AF083A33099311D700277BE9 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AF083A34099311D700277BE9 /* PBXContainerItemProxy */; }; AF0DC7AC0C4C73F600D76972 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AF0DC7AD0C4C73F600D76972 /* PBXContainerItemProxy */; }; AF0DCA310C4C744D00D76972 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF0DC7AB0C4C73F600D76972 /* m6502 */; targetProxy = AF0DCA300C4C744D00D76972 /* PBXContainerItemProxy */; }; AF0DCA430C4CBB0D00D76972 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AF0DCA440C4CBB0D00D76972 /* PBXContainerItemProxy */; }; AF0DCA5C0C4CBB4300D76972 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF0DCA420C4CBB0D00D76972 /* Voronoi */; targetProxy = AF0DCA5B0C4CBB4300D76972 /* PBXContainerItemProxy */; }; AF137D470F075CC8004DE3B2 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF137D410F075C9B004DE3B2 /* Obsolete */; targetProxy = AF137D460F075CC8004DE3B2 /* PBXContainerItemProxy */; }; AF137D490F075E5C004DE3B2 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AFD5709B0996B88E00BA26F7 /* Worm */; targetProxy = AF137D480F075E5C004DE3B2 /* PBXContainerItemProxy */; }; AF137D4B0F075E5C004DE3B2 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF477208099D4EE8001F091E /* Whirlygig */; targetProxy = AF137D4A0F075E5C004DE3B2 /* PBXContainerItemProxy */; }; AF137D4D0F075E5C004DE3B2 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AFD56F0B0996AAFA00BA26F7 /* Vines */; targetProxy = AF137D4C0F075E5C004DE3B2 /* PBXContainerItemProxy */; }; AF137D4F0F075E5C004DE3B2 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4771A7099D4949001F091E /* T3D */; targetProxy = AF137D4E0F075E5C004DE3B2 /* PBXContainerItemProxy */; }; AF137D510F075E5C004DE3B2 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AFD570430996B61600BA26F7 /* Spiral */; targetProxy = AF137D500F075E5C004DE3B2 /* PBXContainerItemProxy */; }; AF137D530F075E5C004DE3B2 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AFD570260996B56D00BA26F7 /* Sphere */; targetProxy = AF137D520F075E5C004DE3B2 /* PBXContainerItemProxy */; }; AF137D550F075E5C004DE3B2 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AFD570B10996B93000BA26F7 /* Rotor */; targetProxy = AF137D540F075E5C004DE3B2 /* PBXContainerItemProxy */; }; AF137D570F075E5C004DE3B2 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AFD56FCF0996B20900BA26F7 /* Lissie */; targetProxy = AF137D560F075E5C004DE3B2 /* PBXContainerItemProxy */; }; AF137D590F075E5C004DE3B2 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AFD56FB90996B18F00BA26F7 /* Lisa */; targetProxy = AF137D580F075E5C004DE3B2 /* PBXContainerItemProxy */; }; AF137D5B0F075E5C004DE3B2 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AFD56FA30996B10F00BA26F7 /* Lightning */; targetProxy = AF137D5A0F075E5C004DE3B2 /* PBXContainerItemProxy */; }; AF137D5D0F075E5C004DE3B2 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AFD56F8C0996B09400BA26F7 /* Laser */; targetProxy = AF137D5C0F075E5C004DE3B2 /* PBXContainerItemProxy */; }; AF137D610F075E5C004DE3B2 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AFA55CCC09934CE400F3E977 /* GLForestFire */; targetProxy = AF137D600F075E5C004DE3B2 /* PBXContainerItemProxy */; }; AF137D630F075E5C004DE3B2 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AFD56EDA0996A95700BA26F7 /* Forest */; targetProxy = AF137D620F075E5C004DE3B2 /* PBXContainerItemProxy */; }; AF137D650F075E5C004DE3B2 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF477909099DE379001F091E /* Flag */; targetProxy = AF137D640F075E5C004DE3B2 /* PBXContainerItemProxy */; }; AF137D670F075E5C004DE3B2 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF47765A099DA78E001F091E /* Critical */; targetProxy = AF137D660F075E5C004DE3B2 /* PBXContainerItemProxy */; }; AF137D690F075E5C004DE3B2 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF6427A809A2DE36000F4CD4 /* Bubbles */; targetProxy = AF137D680F075E5C004DE3B2 /* PBXContainerItemProxy */; }; AF1A17620D6D6EE3008AF328 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AF1A17630D6D6EE3008AF328 /* PBXContainerItemProxy */; }; AF1A17840D6D6FA7008AF328 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF1A17610D6D6EE3008AF328 /* LCDscrub */; targetProxy = AF1A17830D6D6FA7008AF328 /* PBXContainerItemProxy */; }; AF1B0FA81D7AB4740011DBE4 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AF1B0FA91D7AB4740011DBE4 /* PBXContainerItemProxy */; }; AF1B0FC51D7AB5740011DBE4 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF1B0FA71D7AB4740011DBE4 /* Hexstrut */; targetProxy = AF1B0FC41D7AB5740011DBE4 /* PBXContainerItemProxy */; }; AF32D9E10F3AD0B40080F535 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AF32D9E20F3AD0B40080F535 /* PBXContainerItemProxy */; }; AF32D9F90F3AD0D90080F535 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF32D9E00F3AD0B40080F535 /* RubikBlocks */; targetProxy = AF32D9F80F3AD0D90080F535 /* PBXContainerItemProxy */; }; AF3581C01431D47B00E09C51 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AF3581C11431D47B00E09C51 /* PBXContainerItemProxy */; }; AF3581FC143330F900E09C51 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AF3581FD143330F900E09C51 /* PBXContainerItemProxy */; }; AF35E88B0E63823600691F2F /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AF35E88C0E63823600691F2F /* PBXContainerItemProxy */; }; AF35E8A30E63825600691F2F /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF35E88A0E63823600691F2F /* Jigsaw */; targetProxy = AF35E8A20E63825600691F2F /* PBXContainerItemProxy */; }; AF36340118540D050086A439 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF1AD9E118500F9F00932759 /* XScreenSaverUpdater */; targetProxy = AF36340018540D050086A439 /* PBXContainerItemProxy */; }; AF39381B1D0FBD6A00205406 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AF39381C1D0FBD6A00205406 /* PBXContainerItemProxy */; }; AF3938381D0FBF5300205406 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF39381A1D0FBD6A00205406 /* Discoball */; targetProxy = AF3938371D0FBF5300205406 /* PBXContainerItemProxy */; }; AF39E283198A11F60064A58D /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AF39E284198A11F60064A58D /* PBXContainerItemProxy */; }; AF39E2BA198A16920064A58D /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF39E282198A11F60064A58D /* WindupRobot */; targetProxy = AF39E2B9198A16920064A58D /* PBXContainerItemProxy */; }; AF3C71460D624BF50030CC0D /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AF3C71470D624BF50030CC0D /* PBXContainerItemProxy */; }; AF42C5160D624E9200B27FF6 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF3C71450D624BF50030CC0D /* Hypnowheel */; targetProxy = AF42C5150D624E9200B27FF6 /* PBXContainerItemProxy */; }; AF4540D20E52BE8800AE87B5 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AFE30BE80E52B14700CCF4A5 /* Sonar */; targetProxy = AF4540D10E52BE8800AE87B5 /* PBXContainerItemProxy */; }; AF46E9D01CBBA2B300240FBC /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AF46E9D11CBBA2B300240FBC /* PBXContainerItemProxy */; }; AF46E9ED1CBBA49A00240FBC /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF46E9CF1CBBA2B300240FBC /* Unicrud */; targetProxy = AF46E9EC1CBBA49A00240FBC /* PBXContainerItemProxy */; }; AF476FB6099D154F001F091E /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AF476FB7099D154F001F091E /* PBXContainerItemProxy */; }; AF476FDB099D1686001F091E /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AF476FDC099D1686001F091E /* PBXContainerItemProxy */; }; AF47704D099D4385001F091E /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AF47704E099D4385001F091E /* PBXContainerItemProxy */; }; AF47716A099D4786001F091E /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AF47716B099D4786001F091E /* PBXContainerItemProxy */; }; AF477180099D4803001F091E /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AF477181099D4803001F091E /* PBXContainerItemProxy */; }; AF4771A8099D4949001F091E /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AF4771A9099D4949001F091E /* PBXContainerItemProxy */; }; AF4771DC099D4D9A001F091E /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AF4771DD099D4D9A001F091E /* PBXContainerItemProxy */; }; AF4771F3099D4E63001F091E /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AF4771F4099D4E63001F091E /* PBXContainerItemProxy */; }; AF477209099D4EE8001F091E /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AF47720A099D4EE8001F091E /* PBXContainerItemProxy */; }; AF47721F099D4F67001F091E /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AF477220099D4F67001F091E /* PBXContainerItemProxy */; }; AF477254099D5717001F091E /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AF477255099D5717001F091E /* PBXContainerItemProxy */; }; AF47726C099D57B9001F091E /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AF47726D099D57B9001F091E /* PBXContainerItemProxy */; }; AF477284099D5926001F091E /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AF477285099D5926001F091E /* PBXContainerItemProxy */; }; AF477383099D65A1001F091E /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AF477384099D65A1001F091E /* PBXContainerItemProxy */; }; AF47739B099D6648001F091E /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AF47739C099D6648001F091E /* PBXContainerItemProxy */; }; AF4773C2099D67B9001F091E /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AF4773C3099D67B9001F091E /* PBXContainerItemProxy */; }; AF477402099D69E7001F091E /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AF477403099D69E7001F091E /* PBXContainerItemProxy */; }; AF477427099D7C70001F091E /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AF477428099D7C70001F091E /* PBXContainerItemProxy */; }; AF477443099D7D33001F091E /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AF477444099D7D33001F091E /* PBXContainerItemProxy */; }; AF477484099D89E4001F091E /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AF477485099D89E4001F091E /* PBXContainerItemProxy */; }; AF47749A099D8A74001F091E /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AF47749B099D8A74001F091E /* PBXContainerItemProxy */; }; AF4774B5099D8B5F001F091E /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AF4774B6099D8B5F001F091E /* PBXContainerItemProxy */; }; AF4774CF099D8BFF001F091E /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AF4774D0099D8BFF001F091E /* PBXContainerItemProxy */; }; AF47755E099D9A1A001F091E /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AF47755F099D9A1A001F091E /* PBXContainerItemProxy */; }; AF477584099D9C28001F091E /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AF477585099D9C28001F091E /* PBXContainerItemProxy */; }; AF4775A0099D9CF7001F091E /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AF4775A1099D9CF7001F091E /* PBXContainerItemProxy */; }; AF4775D9099D9F69001F091E /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AF4775DA099D9F69001F091E /* PBXContainerItemProxy */; }; AF4775F3099DA030001F091E /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AF4775F4099DA030001F091E /* PBXContainerItemProxy */; }; AF477614099DA26C001F091E /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AF477615099DA26C001F091E /* PBXContainerItemProxy */; }; AF477645099DA6D0001F091E /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AF477646099DA6D0001F091E /* PBXContainerItemProxy */; }; AF47765B099DA78E001F091E /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AF47765C099DA78E001F091E /* PBXContainerItemProxy */; }; AF477671099DA849001F091E /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AF477672099DA849001F091E /* PBXContainerItemProxy */; }; AF477690099DAA6F001F091E /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AF477691099DAA6F001F091E /* PBXContainerItemProxy */; }; AF4776AB099DABDD001F091E /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AF4776AC099DABDD001F091E /* PBXContainerItemProxy */; }; AF4776C1099DAC8A001F091E /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AF4776C2099DAC8A001F091E /* PBXContainerItemProxy */; }; AF4776DC099DADDF001F091E /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AF4776DD099DADDF001F091E /* PBXContainerItemProxy */; }; AF4776F2099DAE7A001F091E /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AF4776F3099DAE7A001F091E /* PBXContainerItemProxy */; }; AF47770E099DAF9F001F091E /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AF47770F099DAF9F001F091E /* PBXContainerItemProxy */; }; AF477724099DB044001F091E /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AF477725099DB044001F091E /* PBXContainerItemProxy */; }; AF477753099DB61E001F091E /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AF477754099DB61E001F091E /* PBXContainerItemProxy */; }; AF477775099DB965001F091E /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AF477776099DB965001F091E /* PBXContainerItemProxy */; }; AF477791099DBA90001F091E /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AF477792099DBA90001F091E /* PBXContainerItemProxy */; }; AF4777D2099DC183001F091E /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AF4777D3099DC183001F091E /* PBXContainerItemProxy */; }; AF4778AC099DDB79001F091E /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AF4778AD099DDB79001F091E /* PBXContainerItemProxy */; }; AF4778C8099DDCAE001F091E /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AF4778C9099DDCAE001F091E /* PBXContainerItemProxy */; }; AF4778E9099DDDC8001F091E /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AF4778EA099DDDC8001F091E /* PBXContainerItemProxy */; }; AF47790A099DE379001F091E /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AF47790B099DE379001F091E /* PBXContainerItemProxy */; }; AF47792B099DE4C7001F091E /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AF47792C099DE4C7001F091E /* PBXContainerItemProxy */; }; AF480922098C412F00FB32B8 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AF480921098C412F00FB32B8 /* PBXContainerItemProxy */; }; AF48092A098C419000FB32B8 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AF480929098C419000FB32B8 /* PBXContainerItemProxy */; }; AF48092D098C41AE00FB32B8 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AF48092C098C41AE00FB32B8 /* PBXContainerItemProxy */; }; AF480936098C421200FB32B8 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AF480935098C421200FB32B8 /* PBXContainerItemProxy */; }; AF480C4A098E301400FB32B8 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AF480C4B098E301400FB32B8 /* PBXContainerItemProxy */; }; AF480D5C098EED6900FB32B8 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF480D59098EED5100FB32B8 /* All Savers (OpenGL) */; targetProxy = AF480D5B098EED6900FB32B8 /* PBXContainerItemProxy */; }; AF480D5E098EED6900FB32B8 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF480D58098EED3D00FB32B8 /* All Savers (XLockmore) */; targetProxy = AF480D5D098EED6900FB32B8 /* PBXContainerItemProxy */; }; AF480D60098EED6900FB32B8 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF480AAF098C669800FB32B8 /* All Savers (XScreenSaver) */; targetProxy = AF480D5F098EED6900FB32B8 /* PBXContainerItemProxy */; }; AF480D73098EEDDE00FB32B8 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AF480D74098EEDDE00FB32B8 /* PBXContainerItemProxy */; }; AF4810EC09909FBA00FB32B8 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AF4810ED09909FBA00FB32B8 /* PBXContainerItemProxy */; }; AF4812510990CE2700FB32B8 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AF4812520990CE2700FB32B8 /* PBXContainerItemProxy */; }; AF4812B40990D3D900FB32B8 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AF4812B50990D3D900FB32B8 /* PBXContainerItemProxy */; }; AF48DEF00A0C25E000F94CF9 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AF48DEF10A0C25E000F94CF9 /* PBXContainerItemProxy */; }; AF48DF060A0C261100F94CF9 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF48DEEF0A0C25E000F94CF9 /* GLSchool */; targetProxy = AF48DF050A0C261100F94CF9 /* PBXContainerItemProxy */; }; AF4A344A102A593600A81B2A /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AF4A344B102A593600A81B2A /* PBXContainerItemProxy */; }; AF4A3460102A59A400A81B2A /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4A3449102A593600A81B2A /* Surfaces */; targetProxy = AF4A345F102A59A400A81B2A /* PBXContainerItemProxy */; }; AF4F10EE143450C300E34F3F /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF3581BF1431D47B00E09C51 /* CompanionCube */; targetProxy = AF4F10ED143450C300E34F3F /* PBXContainerItemProxy */; }; AF4F10F0143450C300E34F3F /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF78D175142DD8F3002AAF77 /* Hilbert */; targetProxy = AF4F10EF143450C300E34F3F /* PBXContainerItemProxy */; }; AF4F10F2143450C300E34F3F /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF3581FB143330F900E09C51 /* TronBit */; targetProxy = AF4F10F1143450C300E34F3F /* PBXContainerItemProxy */; }; AF4FD6E70CE7A486005EE58E /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AF4FD6E80CE7A486005EE58E /* PBXContainerItemProxy */; }; AF4FD6FF0CE7A4F9005EE58E /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4FD6E60CE7A486005EE58E /* Lockward */; targetProxy = AF4FD6FE0CE7A4F9005EE58E /* PBXContainerItemProxy */; }; AF4FF4980D52CA5000666F98 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4FF4930D52CA0800666F98 /* m6502.h */; targetProxy = AF4FF4970D52CA5000666F98 /* PBXContainerItemProxy */; }; AF4FF4BB0D52CBDE00666F98 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AF4FF4BC0D52CBDE00666F98 /* PBXContainerItemProxy */; }; AF4FF4D70D52CD0D00666F98 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4FF4BA0D52CBDE00666F98 /* CubicGrid */; targetProxy = AF4FF4D60D52CD0D00666F98 /* PBXContainerItemProxy */; }; AF5C9AFA1A0CCE6E00B0147A /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AF5C9AFB1A0CCE6E00B0147A /* PBXContainerItemProxy */; }; AF5C9B161A0CCF8000B0147A /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF5C9AF91A0CCE6E00B0147A /* Cityflow */; targetProxy = AF5C9B151A0CCF8000B0147A /* PBXContainerItemProxy */; }; AF63A7F21AB4EDDB00593C75 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AF63A7F31AB4EDDB00593C75 /* PBXContainerItemProxy */; }; AF63A80F1AB4EFD300593C75 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF63A7F11AB4EDDB00593C75 /* RomanBoy */; targetProxy = AF63A80E1AB4EFD300593C75 /* PBXContainerItemProxy */; }; AF63F2481C3465BE0033E133 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AF63F2491C3465BE0033E133 /* PBXContainerItemProxy */; }; AF63F24A1C3465BE0033E133 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4FF4930D52CA0800666F98 /* m6502.h */; targetProxy = AF63F24B1C3465BE0033E133 /* PBXContainerItemProxy */; }; AF63F24C1C3465BE0033E133 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AFA56119099378CB00F3E977 /* molecules.h */; targetProxy = AF63F24D1C3465BE0033E133 /* PBXContainerItemProxy */; }; AF63F4511C34682A0033E133 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AF63F4521C34682A0033E133 /* PBXContainerItemProxy */; }; AF63F4531C34682A0033E133 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4FF4930D52CA0800666F98 /* m6502.h */; targetProxy = AF63F4541C34682A0033E133 /* PBXContainerItemProxy */; }; AF63F4551C34682A0033E133 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AFA56119099378CB00F3E977 /* molecules.h */; targetProxy = AF63F4561C34682A0033E133 /* PBXContainerItemProxy */; }; AF63F4791C3469FC0033E133 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AF63F47A1C3469FC0033E133 /* PBXContainerItemProxy */; }; AF63F47B1C3469FC0033E133 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4FF4930D52CA0800666F98 /* m6502.h */; targetProxy = AF63F47C1C3469FC0033E133 /* PBXContainerItemProxy */; }; AF63F47D1C3469FC0033E133 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AFA56119099378CB00F3E977 /* molecules.h */; targetProxy = AF63F47E1C3469FC0033E133 /* PBXContainerItemProxy */; }; AF6423F3099FF9C2000F4CD4 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AF6423F4099FF9C2000F4CD4 /* PBXContainerItemProxy */; }; AF6425CD09A18855000F4CD4 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AF6425CE09A18855000F4CD4 /* PBXContainerItemProxy */; }; AF6425ED09A189EC000F4CD4 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AF6425EE09A189EC000F4CD4 /* PBXContainerItemProxy */; }; AF64261009A18D6C000F4CD4 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AF64261109A18D6C000F4CD4 /* PBXContainerItemProxy */; }; AF64262D09A18F54000F4CD4 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AF64262E09A18F54000F4CD4 /* PBXContainerItemProxy */; }; AF64265009A19229000F4CD4 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AF64265109A19229000F4CD4 /* PBXContainerItemProxy */; }; AF64267C09A194B0000F4CD4 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AF64267D09A194B0000F4CD4 /* PBXContainerItemProxy */; }; AF64277209A1D37A000F4CD4 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AF64277309A1D37A000F4CD4 /* PBXContainerItemProxy */; }; AF6427A909A2DE36000F4CD4 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AF6427AA09A2DE36000F4CD4 /* PBXContainerItemProxy */; }; AF68A47F19196CF800D41CD1 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AF68A48019196CF800D41CD1 /* PBXContainerItemProxy */; }; AF68A49E19196EA000D41CD1 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF68A47E19196CF800D41CD1 /* Tessellimage */; targetProxy = AF68A49D19196EA000D41CD1 /* PBXContainerItemProxy */; }; AF714E4F105613410046AB1D /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4774B4099D8B5F001F091E /* LMorph */; targetProxy = AF714E4E105613410046AB1D /* PBXContainerItemProxy */; }; AF714E51105613580046AB1D /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AFD570C90996B9F800BA26F7 /* Ant */; targetProxy = AF714E50105613580046AB1D /* PBXContainerItemProxy */; }; AF73FF231A09877F00E485E9 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AF73FF241A09877F00E485E9 /* PBXContainerItemProxy */; }; AF73FF3F1A0988F000E485E9 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF73FF221A09877F00E485E9 /* BinaryRing */; targetProxy = AF73FF3E1A0988F000E485E9 /* PBXContainerItemProxy */; }; AF7511001782B5B900380EA1 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AF7511011782B5B900380EA1 /* PBXContainerItemProxy */; }; AF7776E509B63ABF00EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AF7776E609B63ABF00EA3033 /* PBXContainerItemProxy */; }; AF77771B09B6416100EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AF77771C09B6416100EA3033 /* PBXContainerItemProxy */; }; AF77773F09B6446500EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AF77774009B6446500EA3033 /* PBXContainerItemProxy */; }; AF77777509B6497800EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AF77777609B6497800EA3033 /* PBXContainerItemProxy */; }; AF77778F09B64A5200EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AF77779009B64A5200EA3033 /* PBXContainerItemProxy */; }; AF7777A909B64B2600EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AF7777AA09B64B2600EA3033 /* PBXContainerItemProxy */; }; AF7777D109B64C6B00EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AF7777D209B64C6B00EA3033 /* PBXContainerItemProxy */; }; AF7777EB09B64E3100EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AF7777EC09B64E3100EA3033 /* PBXContainerItemProxy */; }; AF77781109B6504400EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AF77781209B6504400EA3033 /* PBXContainerItemProxy */; }; AF77784509B6528100EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AF77784609B6528100EA3033 /* PBXContainerItemProxy */; }; AF77786209B6536000EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AF77786309B6536000EA3033 /* PBXContainerItemProxy */; }; AF77788009B6563500EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AF77788109B6563500EA3033 /* PBXContainerItemProxy */; }; AF7778A609B659C800EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AF7778A709B659C800EA3033 /* PBXContainerItemProxy */; }; AF7778D709B6604500EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF9D475F09B53166006E59CF /* Zoom */; targetProxy = AF7778D609B6604500EA3033 /* PBXContainerItemProxy */; }; AF7778D909B6604500EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4776AA099DABDD001F091E /* XSpirograph */; targetProxy = AF7778D809B6604500EA3033 /* PBXContainerItemProxy */; }; AF7778DB09B6604500EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4776C0099DAC8A001F091E /* XRaySwarm */; targetProxy = AF7778DA09B6604500EA3033 /* PBXContainerItemProxy */; }; AF7778DD09B6604600EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF477442099D7D33001F091E /* XMatrix */; targetProxy = AF7778DC09B6604600EA3033 /* PBXContainerItemProxy */; }; AF7778DF09B6604600EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF9D4C6909B59F27006E59CF /* XLyap */; targetProxy = AF7778DE09B6604600EA3033 /* PBXContainerItemProxy */; }; AF7778E109B6604600EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4778C7099DDCAE001F091E /* XJack */; targetProxy = AF7778E009B6604600EA3033 /* PBXContainerItemProxy */; }; AF7778E309B6604600EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF9D4D7E09B5B2DC006E59CF /* XAnalogTV */; targetProxy = AF7778E209B6604600EA3033 /* PBXContainerItemProxy */; }; AF7778E509B6604600EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF975808099C41D500B05160 /* XFlame */; targetProxy = AF7778E409B6604600EA3033 /* PBXContainerItemProxy */; }; AF7778E709B6604600EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF477382099D65A1001F091E /* Wormhole */; targetProxy = AF7778E609B6604600EA3033 /* PBXContainerItemProxy */; }; AF7778EB09B6604600EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4776DB099DADDF001F091E /* WhirlWindWarp */; targetProxy = AF7778EA09B6604600EA3033 /* PBXContainerItemProxy */; }; AF7778ED09B6604600EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF47717F099D4803001F091E /* Wander */; targetProxy = AF7778EC09B6604600EA3033 /* PBXContainerItemProxy */; }; AF7778EF09B6604600EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4776F1099DAE7A001F091E /* Vermiculate */; targetProxy = AF7778EE09B6604600EA3033 /* PBXContainerItemProxy */; }; AF7778F109B6604600EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF9D496C09B5411D006E59CF /* Twang */; targetProxy = AF7778F009B6604600EA3033 /* PBXContainerItemProxy */; }; AF7778F309B6604600EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF476FDA099D1686001F091E /* Truchet */; targetProxy = AF7778F209B6604600EA3033 /* PBXContainerItemProxy */; }; AF7778F709B6604600EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF477723099DB044001F091E /* Substrate */; targetProxy = AF7778F609B6604600EA3033 /* PBXContainerItemProxy */; }; AF7778F909B6604600EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF47759F099D9CF7001F091E /* Starfish */; targetProxy = AF7778F809B6604600EA3033 /* PBXContainerItemProxy */; }; AF7778FB09B6604600EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF477644099DA6D0001F091E /* Squiral */; targetProxy = AF7778FA09B6604600EA3033 /* PBXContainerItemProxy */; }; AF7778FD09B6604600EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF9D499709B544C2006E59CF /* Spotlight */; targetProxy = AF7778FC09B6604600EA3033 /* PBXContainerItemProxy */; }; AF7778FF09B6604700EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF64277109A1D37A000F4CD4 /* SpeedMine */; targetProxy = AF7778FE09B6604700EA3033 /* PBXContainerItemProxy */; }; AF77790309B6604700EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF47792A099DE4C7001F091E /* Slip */; targetProxy = AF77790209B6604700EA3033 /* PBXContainerItemProxy */; }; AF77790509B6604700EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF9D474409B5300A006E59CF /* SlideScreen */; targetProxy = AF77790409B6604700EA3033 /* PBXContainerItemProxy */; }; AF77790709B6604700EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF975865099C475900B05160 /* ShadeBobs */; targetProxy = AF77790609B6604700EA3033 /* PBXContainerItemProxy */; }; AF77790909B6604700EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF9D495409B53FC9006E59CF /* RotZoomer */; targetProxy = AF77790809B6604700EA3033 /* PBXContainerItemProxy */; }; AF77790B09B6604700EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF9770290989D1E6001F8B92 /* Rorschach */; targetProxy = AF77790A09B6604700EA3033 /* PBXContainerItemProxy */; }; AF77790D09B6604700EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF975D52099CA0F000B05160 /* Rocks */; targetProxy = AF77790C09B6604700EA3033 /* PBXContainerItemProxy */; }; AF77790F09B6604700EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF9D492B09B53CBA006E59CF /* Ripples */; targetProxy = AF77790E09B6604700EA3033 /* PBXContainerItemProxy */; }; AF77791109B6604700EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF9757C2099C3E6300B05160 /* RDbomb */; targetProxy = AF77791009B6604700EA3033 /* PBXContainerItemProxy */; }; AF77791309B6604700EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF6425EC09A189EC000F4CD4 /* Qix */; targetProxy = AF77791209B6604700EA3033 /* PBXContainerItemProxy */; }; AF77791509B6604700EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF477583099D9C28001F091E /* Pyro */; targetProxy = AF77791409B6604700EA3033 /* PBXContainerItemProxy */; }; AF77791709B6604700EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF47726B099D57B9001F091E /* PopSquares */; targetProxy = AF77791609B6604700EA3033 /* PBXContainerItemProxy */; }; AF77791909B6604700EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF9D4CE709B5AA8E006E59CF /* Pong */; targetProxy = AF77791809B6604700EA3033 /* PBXContainerItemProxy */; }; AF77791B09B6604700EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF477283099D5926001F091E /* Piecewise */; targetProxy = AF77791A09B6604700EA3033 /* PBXContainerItemProxy */; }; AF77791D09B6604800EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF7776E409B63ABF00EA3033 /* Phosphor */; targetProxy = AF77791C09B6604800EA3033 /* PBXContainerItemProxy */; }; AF77791F09B6604800EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF477670099DA849001F091E /* Petri */; targetProxy = AF77791E09B6604800EA3033 /* PBXContainerItemProxy */; }; AF77792109B6604800EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4778AB099DDB79001F091E /* Penetrate */; targetProxy = AF77792009B6604800EA3033 /* PBXContainerItemProxy */; }; AF77792309B6604800EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF47755D099D9A1A001F091E /* Pedal */; targetProxy = AF77792209B6604800EA3033 /* PBXContainerItemProxy */; }; AF77792509B6604800EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF975C5D099C8F3F00B05160 /* NoseGuy */; targetProxy = AF77792409B6604800EA3033 /* PBXContainerItemProxy */; }; AF77792709B6604800EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4771F2099D4E63001F091E /* NerveRot */; targetProxy = AF77792609B6604800EA3033 /* PBXContainerItemProxy */; }; AF77792909B6604800EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF64264F09A19229000F4CD4 /* Munch */; targetProxy = AF77792809B6604800EA3033 /* PBXContainerItemProxy */; }; AF77792B09B6604800EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF64262C09A18F54000F4CD4 /* Moire2 */; targetProxy = AF77792A09B6604800EA3033 /* PBXContainerItemProxy */; }; AF77792D09B6604800EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF975775099C374A00B05160 /* Moire */; targetProxy = AF77792C09B6604800EA3033 /* PBXContainerItemProxy */; }; AF77793109B6604800EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF975A36099C681F00B05160 /* MetaBalls */; targetProxy = AF77793009B6604800EA3033 /* PBXContainerItemProxy */; }; AF77793309B6604800EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF975AFC099C6FE400B05160 /* MemScroller */; targetProxy = AF77793209B6604800EA3033 /* PBXContainerItemProxy */; }; AF77793509B6604800EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4774CE099D8BFF001F091E /* Maze */; targetProxy = AF77793409B6604800EA3033 /* PBXContainerItemProxy */; }; AF77793909B6604800EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF477613099DA26C001F091E /* Kumppa */; targetProxy = AF77793809B6604800EA3033 /* PBXContainerItemProxy */; }; AF77793B09B6604900EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF477499099D8A74001F091E /* Kaleidescope */; targetProxy = AF77793A09B6604900EA3033 /* PBXContainerItemProxy */; }; AF77793F09B6604900EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF477401099D69E7001F091E /* Intermomentary */; targetProxy = AF77793E09B6604900EA3033 /* PBXContainerItemProxy */; }; AF77794109B6604900EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF476FB5099D154F001F091E /* Interference */; targetProxy = AF77794009B6604900EA3033 /* PBXContainerItemProxy */; }; AF77794309B6604900EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF477752099DB61E001F091E /* Interaggregate */; targetProxy = AF77794209B6604900EA3033 /* PBXContainerItemProxy */; }; AF77794509B6604900EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF97572D099C317000B05160 /* IMSMap */; targetProxy = AF77794409B6604900EA3033 /* PBXContainerItemProxy */; }; AF77794709B6604900EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF477426099D7C70001F091E /* IFS */; targetProxy = AF77794609B6604900EA3033 /* PBXContainerItemProxy */; }; AF77794D09B6604900EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF480C49098E301400FB32B8 /* Helix */; targetProxy = AF77794C09B6604900EA3033 /* PBXContainerItemProxy */; }; AF77794F09B6604900EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF975C12099C8C1500B05160 /* Halo */; targetProxy = AF77794E09B6604900EA3033 /* PBXContainerItemProxy */; }; AF77795109B6604900EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF477253099D5717001F091E /* Halftone */; targetProxy = AF77795009B6604900EA3033 /* PBXContainerItemProxy */; }; AF77795309B6604900EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF975C3D099C8DCF00B05160 /* Greynetic */; targetProxy = AF77795209B6604900EA3033 /* PBXContainerItemProxy */; }; AF77795509B6604A00EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF64267B09A194B0000F4CD4 /* Goop */; targetProxy = AF77795409B6604A00EA3033 /* PBXContainerItemProxy */; }; AF77795709B6604A00EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF47739A099D6648001F091E /* FuzzyFlakes */; targetProxy = AF77795609B6604A00EA3033 /* PBXContainerItemProxy */; }; AF77795909B6604A00EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF77787F09B6563500EA3033 /* FontGlide */; targetProxy = AF77795809B6604A00EA3033 /* PBXContainerItemProxy */; }; AF77795B09B6604A00EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF477790099DBA90001F091E /* FluidBalls */; targetProxy = AF77795A09B6604A00EA3033 /* PBXContainerItemProxy */; }; AF77795D09B6604A00EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF477483099D89E4001F091E /* Flame */; targetProxy = AF77795C09B6604A00EA3033 /* PBXContainerItemProxy */; }; AF77795F09B6604A00EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF975AD7099C6EB100B05160 /* Fireworkx */; targetProxy = AF77795E09B6604A00EA3033 /* PBXContainerItemProxy */; }; AF77796109B6604A00EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF975A6C099C6AB200B05160 /* Eruption */; targetProxy = AF77796009B6604A00EA3033 /* PBXContainerItemProxy */; }; AF77796309B6604A00EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4775F2099DA030001F091E /* Epicycle */; targetProxy = AF77796209B6604A00EA3033 /* PBXContainerItemProxy */; }; AF77796509B6604A00EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF9D48F409B535DA006E59CF /* Distort */; targetProxy = AF77796409B6604A00EA3033 /* PBXContainerItemProxy */; }; AF77796709B6604A00EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF47704C099D4385001F091E /* Deluxe */; targetProxy = AF77796609B6604A00EA3033 /* PBXContainerItemProxy */; }; AF77796909B6604A00EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF976FBB0989CAA2001F8B92 /* Deco */; targetProxy = AF77796809B6604A00EA3033 /* PBXContainerItemProxy */; }; AF77796B09B6604A00EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF9D466609B5109C006E59CF /* DecayScreen */; targetProxy = AF77796A09B6604A00EA3033 /* PBXContainerItemProxy */; }; AF77796D09B6604A00EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4778E8099DDDC8001F091E /* Cynosure */; targetProxy = AF77796C09B6604A00EA3033 /* PBXContainerItemProxy */; }; AF77797109B6604B00EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4775D8099D9F69001F091E /* Coral */; targetProxy = AF77797009B6604B00EA3033 /* PBXContainerItemProxy */; }; AF77797309B6604B00EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF477169099D4786001F091E /* Compass */; targetProxy = AF77797209B6604B00EA3033 /* PBXContainerItemProxy */; }; AF77797509B6604B00EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF47770D099DAF9F001F091E /* CloudLife */; targetProxy = AF77797409B6604B00EA3033 /* PBXContainerItemProxy */; }; AF77797709B6604B00EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF477774099DB965001F091E /* Celtic */; targetProxy = AF77797609B6604B00EA3033 /* PBXContainerItemProxy */; }; AF77797909B6604B00EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4771DB099D4D9A001F091E /* CCurve */; targetProxy = AF77797809B6604B00EA3033 /* PBXContainerItemProxy */; }; AF77797B09B6604B00EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF9D48DB09B53322006E59CF /* Bumps */; targetProxy = AF77797A09B6604B00EA3033 /* PBXContainerItemProxy */; }; AF77797F09B6604B00EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF9D4DAF09B5B71E006E59CF /* BSOD */; targetProxy = AF77797E09B6604B00EA3033 /* PBXContainerItemProxy */; }; AF77798109B6604B00EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4777D1099DC183001F091E /* BoxFit */; targetProxy = AF77798009B6604B00EA3033 /* PBXContainerItemProxy */; }; AF77798309B6604B00EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF7778A509B659C800EA3033 /* BlitSpin */; targetProxy = AF77798209B6604B00EA3033 /* PBXContainerItemProxy */; }; AF77798509B6604B00EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF47768F099DAA6F001F091E /* Blaster */; targetProxy = AF77798409B6604B00EA3033 /* PBXContainerItemProxy */; }; AF77798709B6604B00EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF975A86099C6BC300B05160 /* Barcode */; targetProxy = AF77798609B6604B00EA3033 /* PBXContainerItemProxy */; }; AF77798909B6604C00EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF9770660989D2F6001F8B92 /* Attraction */; targetProxy = AF77798809B6604C00EA3033 /* PBXContainerItemProxy */; }; AF77798B09B6604C00EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF9D4DEC09B5BB19006E59CF /* Apple2 */; targetProxy = AF77798A09B6604C00EA3033 /* PBXContainerItemProxy */; }; AF77798D09B6604C00EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4773C1099D67B9001F091E /* Anemotaxis */; targetProxy = AF77798C09B6604C00EA3033 /* PBXContainerItemProxy */; }; AF77798F09B6604C00EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF47721E099D4F67001F091E /* Anemone */; targetProxy = AF77798E09B6604C00EA3033 /* PBXContainerItemProxy */; }; AF77799509B6608000EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AFD570850996B80300BA26F7 /* Triangle */; targetProxy = AF77799409B6608000EA3033 /* PBXContainerItemProxy */; }; AF77799709B6608100EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AFD571590996C0CE00BA26F7 /* Thornbird */; targetProxy = AF77799609B6608100EA3033 /* PBXContainerItemProxy */; }; AF77799909B6608100EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AFD572220996E4A300BA26F7 /* Swirl */; targetProxy = AF77799809B6608100EA3033 /* PBXContainerItemProxy */; }; AF77799B09B6608100EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AFD5735D0997411200BA26F7 /* Strange */; targetProxy = AF77799A09B6608100EA3033 /* PBXContainerItemProxy */; }; AF7779A109B6608100EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AFD5700F0996B4CC00BA26F7 /* Sierpinski */; targetProxy = AF7779A009B6608100EA3033 /* PBXContainerItemProxy */; }; AF7779A509B6608100EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AFD5726D0996EE8500BA26F7 /* Polyominoes */; targetProxy = AF7779A409B6608100EA3033 /* PBXContainerItemProxy */; }; AF7779A709B6608100EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AFD56FF80996B43800BA26F7 /* Penrose */; targetProxy = AF7779A609B6608100EA3033 /* PBXContainerItemProxy */; }; AF7779A909B6608100EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF77771A09B6416100EA3033 /* Pacman */; targetProxy = AF7779A809B6608100EA3033 /* PBXContainerItemProxy */; }; AF7779AB09B6608100EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AFD5706F0996B72700BA26F7 /* Mountain */; targetProxy = AF7779AA09B6608100EA3033 /* PBXContainerItemProxy */; }; AF7779AD09B6608100EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF794FCD09974FA60059A8B0 /* Loop */; targetProxy = AF7779AC09B6608100EA3033 /* PBXContainerItemProxy */; }; AF7779B709B6608100EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AFD572F9099701C000BA26F7 /* Julia */; targetProxy = AF7779B609B6608100EA3033 /* PBXContainerItemProxy */; }; AF7779BB09B6608100EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AFD56F6B0996B01600BA26F7 /* Hopalong */; targetProxy = AF7779BA09B6608100EA3033 /* PBXContainerItemProxy */; }; AF7779BD09B6608100EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AFD56F4F0996AEEE00BA26F7 /* Grav */; targetProxy = AF7779BC09B6608100EA3033 /* PBXContainerItemProxy */; }; AF7779BF09B6608100EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AFD56F230996AB8A00BA26F7 /* Galaxy */; targetProxy = AF7779BE09B6608100EA3033 /* PBXContainerItemProxy */; }; AF7779C309B6608100EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AFD570EA0996BBBF00BA26F7 /* Flow */; targetProxy = AF7779C209B6608100EA3033 /* PBXContainerItemProxy */; }; AF7779C709B6608200EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF794F8E09974A320059A8B0 /* Fiberlamp */; targetProxy = AF7779C609B6608200EA3033 /* PBXContainerItemProxy */; }; AF7779C909B6608200EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AFD570590996B6A300BA26F7 /* FadePlot */; targetProxy = AF7779C809B6608200EA3033 /* PBXContainerItemProxy */; }; AF7779CB09B6608200EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AFD571430996C01700BA26F7 /* Euler2D */; targetProxy = AF7779CA09B6608200EA3033 /* PBXContainerItemProxy */; }; AF7779CD09B6608200EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF480D72098EEDDE00FB32B8 /* Drift */; targetProxy = AF7779CC09B6608200EA3033 /* PBXContainerItemProxy */; }; AF7779CF09B6608200EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AFD571130996BE9300BA26F7 /* Discrete */; targetProxy = AF7779CE09B6608200EA3033 /* PBXContainerItemProxy */; }; AF7779D109B6608200EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF794F64099748450059A8B0 /* Demon */; targetProxy = AF7779D009B6608200EA3033 /* PBXContainerItemProxy */; }; AF7779D309B6608200EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AFD572C20996FC0F00BA26F7 /* Crystal */; targetProxy = AF7779D209B6608200EA3033 /* PBXContainerItemProxy */; }; AF7779D509B6608200EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AFD56EAE0996A72600BA26F7 /* Braid */; targetProxy = AF7779D409B6608200EA3033 /* PBXContainerItemProxy */; }; AF7779D709B6608200EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AFD572A50996F99600BA26F7 /* Bouboule */; targetProxy = AF7779D609B6608200EA3033 /* PBXContainerItemProxy */; }; AF7779D909B6608200EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AFD5712C0996BF2E00BA26F7 /* Apollonian */; targetProxy = AF7779D809B6608200EA3033 /* PBXContainerItemProxy */; }; AF7779DD09B660AF00EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AFA56379099397B300F3E977 /* TimeTunnel */; targetProxy = AF7779DC09B660AF00EA3033 /* PBXContainerItemProxy */; }; AF7779DF09B660AF00EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AFA562F20993943B00F3E977 /* Tangram */; targetProxy = AF7779DE09B660AF00EA3033 /* PBXContainerItemProxy */; }; AF7779E109B660AF00EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AFA559920993322100F3E977 /* Superquadrics */; targetProxy = AF7779E009B660AF00EA3033 /* PBXContainerItemProxy */; }; AF7779E309B660B000EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF7777A809B64B2600EA3033 /* StonerView */; targetProxy = AF7779E209B660B000EA3033 /* PBXContainerItemProxy */; }; AF7779E509B660B000EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF77781009B6504400EA3033 /* StarWars */; targetProxy = AF7779E409B660B000EA3033 /* PBXContainerItemProxy */; }; AF7779E709B660B000EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AFA55A030993340300F3E977 /* Stairs */; targetProxy = AF7779E609B660B000EA3033 /* PBXContainerItemProxy */; }; AF7779E909B660B000EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AFA55A20099334A000F3E977 /* Sproingies */; targetProxy = AF7779E809B660B000EA3033 /* PBXContainerItemProxy */; }; AF7779EB09B660B000EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AFA55D7F099358C400F3E977 /* Spheremonics */; targetProxy = AF7779EA09B660B000EA3033 /* PBXContainerItemProxy */; }; AF7779ED09B660B000EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AFA55B7909933F7200F3E977 /* Sierpinski3D */; targetProxy = AF7779EC09B660B000EA3033 /* PBXContainerItemProxy */; }; AF7779EF09B660B000EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AFA55D3C0993565300F3E977 /* SBalls */; targetProxy = AF7779EE09B660B000EA3033 /* PBXContainerItemProxy */; }; AF7779F109B660B000EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AFA559CF0993330600F3E977 /* Rubik */; targetProxy = AF7779F009B660B000EA3033 /* PBXContainerItemProxy */; }; AF7779F309B660B000EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AFA55DF009935E4900F3E977 /* Queens */; targetProxy = AF7779F209B660B000EA3033 /* PBXContainerItemProxy */; }; AF7779F509B660B100EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AFA55B2509933E8D00F3E977 /* Pulsar */; targetProxy = AF7779F409B660B100EA3033 /* PBXContainerItemProxy */; }; AF7779F709B660B100EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AFA562060993849F00F3E977 /* Providence */; targetProxy = AF7779F609B660B100EA3033 /* PBXContainerItemProxy */; }; AF7779F909B660B100EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AFA560AE0993718D00F3E977 /* Polytopes */; targetProxy = AF7779F809B660B100EA3033 /* PBXContainerItemProxy */; }; AF7779FB09B660B100EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AFA5619D09937D7E00F3E977 /* Polyhedra */; targetProxy = AF7779FA09B660B100EA3033 /* PBXContainerItemProxy */; }; AF7779FD09B660B100EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4812B30990D3D900FB32B8 /* Pipes */; targetProxy = AF7779FC09B660B100EA3033 /* PBXContainerItemProxy */; }; AF7779FF09B660B200EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AFA5621F0993852500F3E977 /* Pinion */; targetProxy = AF7779FE09B660B200EA3033 /* PBXContainerItemProxy */; }; AF777A0109B660B200EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AFA5617B09937CF100F3E977 /* Noof */; targetProxy = AF777A0009B660B200EA3033 /* PBXContainerItemProxy */; }; AF777A0309B660B200EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AFA559B50993328000F3E977 /* Morph3D */; targetProxy = AF777A0209B660B200EA3033 /* PBXContainerItemProxy */; }; AF777A0509B660B200EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AFA560FD0993781600F3E977 /* Molecule */; targetProxy = AF777A0409B660B200EA3033 /* PBXContainerItemProxy */; }; AF777A0709B660B200EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AFA5596D0993317900F3E977 /* Moebius */; targetProxy = AF777A0609B660B200EA3033 /* PBXContainerItemProxy */; }; AF777A0909B660B200EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF77778E09B64A5200EA3033 /* MirrorBlob */; targetProxy = AF777A0809B660B200EA3033 /* PBXContainerItemProxy */; }; AF777A0B09B660B200EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AFA55BE40993429100F3E977 /* Menger */; targetProxy = AF777A0A09B660B200EA3033 /* PBXContainerItemProxy */; }; AF777A0D09B660B200EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AFA55DC809935D7000F3E977 /* Lavalite */; targetProxy = AF777A0C09B660B200EA3033 /* PBXContainerItemProxy */; }; AF777A0F09B660B200EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AFA55A790993364300F3E977 /* Lament */; targetProxy = AF777A0E09B660B200EA3033 /* PBXContainerItemProxy */; }; AF777A1109B660B300EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AFA55F2A0993622F00F3E977 /* Klein */; targetProxy = AF777A1009B660B300EA3033 /* PBXContainerItemProxy */; }; AF777A1309B660B300EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AFA563A4099398BB00F3E977 /* Juggler3D */; targetProxy = AF777A1209B660B300EA3033 /* PBXContainerItemProxy */; }; AF777A1509B660B300EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AFA55F06099361B700F3E977 /* JigglyPuff */; targetProxy = AF777A1409B660B300EA3033 /* PBXContainerItemProxy */; }; AF777A1709B660B300EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AFA55F420993629000F3E977 /* Hypertorus */; targetProxy = AF777A1609B660B300EA3033 /* PBXContainerItemProxy */; }; AF777A1909B660B300EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AFD56DF10996A03800BA26F7 /* GLText */; targetProxy = AF777A1809B660B300EA3033 /* PBXContainerItemProxy */; }; AF777A1B09B660B300EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AFA55C77099349A600F3E977 /* GLSnake */; targetProxy = AF777A1A09B660B300EA3033 /* PBXContainerItemProxy */; }; AF777A1D09B660B300EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF7777D009B64C6B00EA3033 /* GLSlideshow */; targetProxy = AF777A1C09B660B300EA3033 /* PBXContainerItemProxy */; }; AF777A1F09B660B300EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AFA55B0909933E0500F3E977 /* GLPlanet */; targetProxy = AF777A1E09B660B300EA3033 /* PBXContainerItemProxy */; }; AF777A2109B660B300EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AFA55F720993643600F3E977 /* GLMatrix */; targetProxy = AF777A2009B660B300EA3033 /* PBXContainerItemProxy */; }; AF777A2309B660B400EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AFA55FF909936C6D00F3E977 /* GLKnots */; targetProxy = AF777A2209B660B400EA3033 /* PBXContainerItemProxy */; }; AF777A2509B660B400EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AFA56331099395ED00F3E977 /* GLHanoi */; targetProxy = AF777A2409B660B400EA3033 /* PBXContainerItemProxy */; }; AF777A2909B660B400EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AFA55E2F09935F8E00F3E977 /* GLBlur */; targetProxy = AF777A2809B660B400EA3033 /* PBXContainerItemProxy */; }; AF777A2B09B660B400EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AFA55B9109933FDA00F3E977 /* GFlux */; targetProxy = AF777A2A09B660B400EA3033 /* PBXContainerItemProxy */; }; AF777A2D09B660B400EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF77777409B6497800EA3033 /* Gleidescope */; targetProxy = AF777A2C09B660B400EA3033 /* PBXContainerItemProxy */; }; AF777A2F09B660B400EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4812500990CE2700FB32B8 /* Gears */; targetProxy = AF777A2E09B660B400EA3033 /* PBXContainerItemProxy */; }; AF777A3109B660B400EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AFA55E4E09935FF900F3E977 /* FlyingToasters */; targetProxy = AF777A3009B660B400EA3033 /* PBXContainerItemProxy */; }; AF777A3309B660B400EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF7777EA09B64E3100EA3033 /* FlipText */; targetProxy = AF777A3209B660B400EA3033 /* PBXContainerItemProxy */; }; AF777A3509B660B400EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF77773E09B6446500EA3033 /* FlipScreen3D */; targetProxy = AF777A3409B660B400EA3033 /* PBXContainerItemProxy */; }; AF777A3709B660B400EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AFA5603209936D5100F3E977 /* FlipFlop */; targetProxy = AF777A3609B660B400EA3033 /* PBXContainerItemProxy */; }; AF777A3909B660B400EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF6423F2099FF9C2000F4CD4 /* Extrusion */; targetProxy = AF777A3809B660B400EA3033 /* PBXContainerItemProxy */; }; AF777A3B09B660B500EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AFA55C0E0993431300F3E977 /* Engine */; targetProxy = AF777A3A09B660B500EA3033 /* PBXContainerItemProxy */; }; AF777A3D09B660B500EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AFA55E0D09935EDC00F3E977 /* Endgame */; targetProxy = AF777A3C09B660B500EA3033 /* PBXContainerItemProxy */; }; AF777A3F09B660B500EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF77786109B6536000EA3033 /* DNAlogo */; targetProxy = AF777A3E09B660B500EA3033 /* PBXContainerItemProxy */; }; AF777A4109B660B500EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4810EB09909FBA00FB32B8 /* DangerBall */; targetProxy = AF777A4009B660B500EA3033 /* PBXContainerItemProxy */; }; AF777A4309B660B500EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AFA55FD309936BFA00F3E977 /* CubeStorm */; targetProxy = AF777A4209B660B500EA3033 /* PBXContainerItemProxy */; }; AF777A4509B660B500EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AFA55D620993584B00F3E977 /* Cubenetic */; targetProxy = AF777A4409B660B500EA3033 /* PBXContainerItemProxy */; }; AF777A4709B660B500EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AFA56351099396C000F3E977 /* Cube21 */; targetProxy = AF777A4609B660B500EA3033 /* PBXContainerItemProxy */; }; AF777A4909B660B500EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AFA563130993951000F3E977 /* Crackberg */; targetProxy = AF777A4809B660B500EA3033 /* PBXContainerItemProxy */; }; AF777A4B09B660B600EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AFA55BAB099340CE00F3E977 /* Circuit */; targetProxy = AF777A4A09B660B600EA3033 /* PBXContainerItemProxy */; }; AF777A4D09B660B600EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF77784409B6528100EA3033 /* Carousel */; targetProxy = AF777A4C09B660B600EA3033 /* PBXContainerItemProxy */; }; AF777A4F09B660B600EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AFA55946099330B000F3E977 /* Cage */; targetProxy = AF777A4E09B660B600EA3033 /* PBXContainerItemProxy */; }; AF777A5109B660B600EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AFA55ACF09933CEF00F3E977 /* Bubble3D */; targetProxy = AF777A5009B660B600EA3033 /* PBXContainerItemProxy */; }; AF777A5309B660B600EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AFA55CA909934BB200F3E977 /* Boxed */; targetProxy = AF777A5209B660B600EA3033 /* PBXContainerItemProxy */; }; AF777A5509B660B600EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AFA55EC7099360E300F3E977 /* BouncingCow */; targetProxy = AF777A5409B660B600EA3033 /* PBXContainerItemProxy */; }; AF777A5709B660B600EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AFA562BF099392C600F3E977 /* Boing */; targetProxy = AF777A5609B660B600EA3033 /* PBXContainerItemProxy */; }; AF777A5909B660B600EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AFA5601409936CC800F3E977 /* BlockTube */; targetProxy = AF777A5809B660B600EA3033 /* PBXContainerItemProxy */; }; AF777A5B09B660B600EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AFA5615609937C0D00F3E977 /* BlinkBox */; targetProxy = AF777A5A09B660B600EA3033 /* PBXContainerItemProxy */; }; AF777A5D09B660B600EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF083A32099311D700277BE9 /* Atunnel */; targetProxy = AF777A5C09B660B600EA3033 /* PBXContainerItemProxy */; }; AF777A5F09B660B600EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF08398F09930B6B00277BE9 /* Atlantis */; targetProxy = AF777A5E09B660B600EA3033 /* PBXContainerItemProxy */; }; AF777A6109B660B700EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AFA5606209936F3800F3E977 /* AntSpotlight */; targetProxy = AF777A6009B660B700EA3033 /* PBXContainerItemProxy */; }; AF777A6309B660B700EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AFA562DA099393C900F3E977 /* AntMaze */; targetProxy = AF777A6209B660B700EA3033 /* PBXContainerItemProxy */; }; AF777A6509B660B700EA3033 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AFA5604A09936E2100F3E977 /* AntInspect */; targetProxy = AF777A6409B660B700EA3033 /* PBXContainerItemProxy */; }; AF78D176142DD8F3002AAF77 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AF78D177142DD8F3002AAF77 /* PBXContainerItemProxy */; }; AF794F65099748450059A8B0 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AF794F66099748450059A8B0 /* PBXContainerItemProxy */; }; AF794F8F09974A320059A8B0 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AF794F9009974A320059A8B0 /* PBXContainerItemProxy */; }; AF794FCE09974FA60059A8B0 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AF794FCF09974FA60059A8B0 /* PBXContainerItemProxy */; }; AF7ACFC119FF0A9200BD752B /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AF7ACFC219FF0A9200BD752B /* PBXContainerItemProxy */; }; AF7ACFDC19FF0BDB00BD752B /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF7ACFC019FF0A9200BD752B /* GeodesicGears */; targetProxy = AF7ACFDB19FF0BDB00BD752B /* PBXContainerItemProxy */; }; AF7E07FE15925DF200D81407 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4FF4930D52CA0800666F98 /* m6502.h */; targetProxy = AF7E07FD15925DF200D81407 /* PBXContainerItemProxy */; }; AF7E080015925DFE00D81407 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AFA56119099378CB00F3E977 /* molecules.h */; targetProxy = AF7E07FF15925DFE00D81407 /* PBXContainerItemProxy */; }; AF918978158FC00A002B5D1E /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AF918979158FC00A002B5D1E /* PBXContainerItemProxy */; }; AF97572E099C317000B05160 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AF97572F099C317000B05160 /* PBXContainerItemProxy */; }; AF975776099C374A00B05160 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AF975777099C374A00B05160 /* PBXContainerItemProxy */; }; AF9757C3099C3E6300B05160 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AF9757C4099C3E6300B05160 /* PBXContainerItemProxy */; }; AF975809099C41D500B05160 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AF97580A099C41D500B05160 /* PBXContainerItemProxy */; }; AF975866099C475900B05160 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AF975867099C475900B05160 /* PBXContainerItemProxy */; }; AF975A37099C681F00B05160 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AF975A38099C681F00B05160 /* PBXContainerItemProxy */; }; AF975A6D099C6AB200B05160 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AF975A6E099C6AB200B05160 /* PBXContainerItemProxy */; }; AF975A87099C6BC300B05160 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AF975A88099C6BC300B05160 /* PBXContainerItemProxy */; }; AF975AD8099C6EB100B05160 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AF975AD9099C6EB100B05160 /* PBXContainerItemProxy */; }; AF975AFD099C6FE400B05160 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AF975AFE099C6FE400B05160 /* PBXContainerItemProxy */; }; AF975C13099C8C1500B05160 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AF975C14099C8C1500B05160 /* PBXContainerItemProxy */; }; AF975C3E099C8DCF00B05160 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AF975C3F099C8DCF00B05160 /* PBXContainerItemProxy */; }; AF975C5E099C8F3F00B05160 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AF975C5F099C8F3F00B05160 /* PBXContainerItemProxy */; }; AF975D53099CA0F000B05160 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AF975D54099CA0F000B05160 /* PBXContainerItemProxy */; }; AF998EDB0A083DB30051049D /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AF998EDC0A083DB30051049D /* PBXContainerItemProxy */; }; AF998EF70A083E1D0051049D /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF998EDA0A083DB30051049D /* TopBlock */; targetProxy = AF998EF60A083E1D0051049D /* PBXContainerItemProxy */; }; AF9D466709B5109C006E59CF /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AF9D466809B5109C006E59CF /* PBXContainerItemProxy */; }; AF9D474509B5300A006E59CF /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AF9D474609B5300A006E59CF /* PBXContainerItemProxy */; }; AF9D476009B53166006E59CF /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AF9D476109B53166006E59CF /* PBXContainerItemProxy */; }; AF9D48DC09B53322006E59CF /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AF9D48DD09B53322006E59CF /* PBXContainerItemProxy */; }; AF9D48F509B535DA006E59CF /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AF9D48F609B535DA006E59CF /* PBXContainerItemProxy */; }; AF9D492C09B53CBA006E59CF /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AF9D492D09B53CBA006E59CF /* PBXContainerItemProxy */; }; AF9D495509B53FC9006E59CF /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AF9D495609B53FC9006E59CF /* PBXContainerItemProxy */; }; AF9D496D09B5411D006E59CF /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AF9D496E09B5411D006E59CF /* PBXContainerItemProxy */; }; AF9D499809B544C2006E59CF /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AF9D499909B544C2006E59CF /* PBXContainerItemProxy */; }; AF9D4C6A09B59F27006E59CF /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AF9D4C6B09B59F27006E59CF /* PBXContainerItemProxy */; }; AF9D4CE809B5AA8E006E59CF /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AF9D4CE909B5AA8E006E59CF /* PBXContainerItemProxy */; }; AF9D4D7F09B5B2DC006E59CF /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AF9D4D8009B5B2DC006E59CF /* PBXContainerItemProxy */; }; AF9D4DB009B5B71E006E59CF /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AF9D4DB109B5B71E006E59CF /* PBXContainerItemProxy */; }; AF9D4DED09B5BB19006E59CF /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AF9D4DEE09B5BB19006E59CF /* PBXContainerItemProxy */; }; AFA160921052FF87009B93AA /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF6425CC09A18855000F4CD4 /* HyperCube */; targetProxy = AFA160911052FF87009B93AA /* PBXContainerItemProxy */; }; AFA160941052FF87009B93AA /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF64260F09A18D6C000F4CD4 /* HyperBall */; targetProxy = AFA160931052FF87009B93AA /* PBXContainerItemProxy */; }; AFA2118D1CD59DAF00C0D2A1 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AFA2118E1CD59DAF00C0D2A1 /* PBXContainerItemProxy */; }; AFA211AA1CD5A08000C0D2A1 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AFA2118C1CD59DAF00C0D2A1 /* RaverHoop */; targetProxy = AFA211A91CD5A08000C0D2A1 /* PBXContainerItemProxy */; }; AFA3392F0B058505002B0E7D /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AFA339300B058505002B0E7D /* PBXContainerItemProxy */; }; AFA33B8F0B0585A4002B0E7D /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AFA3392E0B058505002B0E7D /* WebCollage */; targetProxy = AFA33B8E0B0585A4002B0E7D /* PBXContainerItemProxy */; }; AFA33BCF0B0587B2002B0E7D /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AFA33BC60B058740002B0E7D /* webcollage-helper */; targetProxy = AFA33BCE0B0587B2002B0E7D /* PBXContainerItemProxy */; }; AFA33BDC0B058952002B0E7D /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AFA33BC60B058740002B0E7D /* webcollage-helper */; targetProxy = AFA33BDB0B058952002B0E7D /* PBXContainerItemProxy */; }; AFA33C040B058E3C002B0E7D /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AFA33C020B058E17002B0E7D /* webcollage-perl */; targetProxy = AFA33C030B058E3C002B0E7D /* PBXContainerItemProxy */; }; AFA55947099330B000F3E977 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AFA55948099330B000F3E977 /* PBXContainerItemProxy */; }; AFA5596E0993317900F3E977 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AFA5596F0993317900F3E977 /* PBXContainerItemProxy */; }; AFA559930993322100F3E977 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AFA559940993322100F3E977 /* PBXContainerItemProxy */; }; AFA559B60993328000F3E977 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AFA559B70993328000F3E977 /* PBXContainerItemProxy */; }; AFA559D00993330600F3E977 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AFA559D10993330600F3E977 /* PBXContainerItemProxy */; }; AFA55A040993340300F3E977 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AFA55A050993340300F3E977 /* PBXContainerItemProxy */; }; AFA55A21099334A000F3E977 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AFA55A22099334A000F3E977 /* PBXContainerItemProxy */; }; AFA55A7A0993364300F3E977 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AFA55A7B0993364300F3E977 /* PBXContainerItemProxy */; }; AFA55AD009933CEF00F3E977 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AFA55AD109933CEF00F3E977 /* PBXContainerItemProxy */; }; AFA55B0A09933E0500F3E977 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AFA55B0B09933E0500F3E977 /* PBXContainerItemProxy */; }; AFA55B2609933E8D00F3E977 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AFA55B2709933E8D00F3E977 /* PBXContainerItemProxy */; }; AFA55B7A09933F7200F3E977 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AFA55B7B09933F7200F3E977 /* PBXContainerItemProxy */; }; AFA55B9209933FDA00F3E977 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AFA55B9309933FDA00F3E977 /* PBXContainerItemProxy */; }; AFA55BAC099340CE00F3E977 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AFA55BAD099340CE00F3E977 /* PBXContainerItemProxy */; }; AFA55BE50993429100F3E977 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AFA55BE60993429100F3E977 /* PBXContainerItemProxy */; }; AFA55C0F0993431300F3E977 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AFA55C100993431300F3E977 /* PBXContainerItemProxy */; }; AFA55C78099349A600F3E977 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AFA55C79099349A600F3E977 /* PBXContainerItemProxy */; }; AFA55CAA09934BB200F3E977 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AFA55CAB09934BB200F3E977 /* PBXContainerItemProxy */; }; AFA55CCD09934CE400F3E977 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AFA55CCE09934CE400F3E977 /* PBXContainerItemProxy */; }; AFA55D3D0993565300F3E977 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AFA55D3E0993565300F3E977 /* PBXContainerItemProxy */; }; AFA55D630993584B00F3E977 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AFA55D640993584B00F3E977 /* PBXContainerItemProxy */; }; AFA55D80099358C400F3E977 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AFA55D81099358C400F3E977 /* PBXContainerItemProxy */; }; AFA55DC909935D7000F3E977 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AFA55DCA09935D7000F3E977 /* PBXContainerItemProxy */; }; AFA55DF109935E4900F3E977 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AFA55DF209935E4900F3E977 /* PBXContainerItemProxy */; }; AFA55E0E09935EDC00F3E977 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AFA55E0F09935EDC00F3E977 /* PBXContainerItemProxy */; }; AFA55E3009935F8E00F3E977 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AFA55E3109935F8E00F3E977 /* PBXContainerItemProxy */; }; AFA55E4F09935FF900F3E977 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AFA55E5009935FF900F3E977 /* PBXContainerItemProxy */; }; AFA55EC8099360E300F3E977 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AFA55EC9099360E300F3E977 /* PBXContainerItemProxy */; }; AFA55F07099361B700F3E977 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AFA55F08099361B700F3E977 /* PBXContainerItemProxy */; }; AFA55F2B0993622F00F3E977 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AFA55F2C0993622F00F3E977 /* PBXContainerItemProxy */; }; AFA55F430993629000F3E977 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AFA55F440993629000F3E977 /* PBXContainerItemProxy */; }; AFA55F730993643600F3E977 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AFA55F740993643600F3E977 /* PBXContainerItemProxy */; }; AFA55FD409936BFA00F3E977 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AFA55FD509936BFA00F3E977 /* PBXContainerItemProxy */; }; AFA55FFA09936C6D00F3E977 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AFA55FFB09936C6D00F3E977 /* PBXContainerItemProxy */; }; AFA5601509936CC800F3E977 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AFA5601609936CC800F3E977 /* PBXContainerItemProxy */; }; AFA5603309936D5100F3E977 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AFA5603409936D5100F3E977 /* PBXContainerItemProxy */; }; AFA5604B09936E2100F3E977 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AFA5604C09936E2100F3E977 /* PBXContainerItemProxy */; }; AFA5606309936F3800F3E977 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AFA5606409936F3800F3E977 /* PBXContainerItemProxy */; }; AFA560AF0993718D00F3E977 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AFA560B00993718D00F3E977 /* PBXContainerItemProxy */; }; AFA560FE0993781600F3E977 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AFA560FF0993781600F3E977 /* PBXContainerItemProxy */; }; AFA5611E0993791D00F3E977 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AFA56119099378CB00F3E977 /* molecules.h */; targetProxy = AFA5611D0993791D00F3E977 /* PBXContainerItemProxy */; }; AFA5615709937C0D00F3E977 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AFA5615809937C0D00F3E977 /* PBXContainerItemProxy */; }; AFA5617C09937CF100F3E977 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AFA5617D09937CF100F3E977 /* PBXContainerItemProxy */; }; AFA5619E09937D7E00F3E977 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AFA5619F09937D7E00F3E977 /* PBXContainerItemProxy */; }; AFA562070993849F00F3E977 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AFA562080993849F00F3E977 /* PBXContainerItemProxy */; }; AFA562200993852500F3E977 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AFA562210993852500F3E977 /* PBXContainerItemProxy */; }; AFA562C0099392C600F3E977 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AFA562C1099392C600F3E977 /* PBXContainerItemProxy */; }; AFA562DB099393C900F3E977 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AFA562DC099393C900F3E977 /* PBXContainerItemProxy */; }; AFA562F30993943B00F3E977 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AFA562F40993943B00F3E977 /* PBXContainerItemProxy */; }; AFA563140993951000F3E977 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AFA563150993951000F3E977 /* PBXContainerItemProxy */; }; AFA56332099395ED00F3E977 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AFA56333099395ED00F3E977 /* PBXContainerItemProxy */; }; AFA56352099396C000F3E977 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AFA56353099396C000F3E977 /* PBXContainerItemProxy */; }; AFA5637A099397B300F3E977 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AFA5637B099397B300F3E977 /* PBXContainerItemProxy */; }; AFA563A5099398BB00F3E977 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AFA563A6099398BB00F3E977 /* PBXContainerItemProxy */; }; AFACE8741CC83458008B24CD /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AFACE8751CC83458008B24CD /* PBXContainerItemProxy */; }; AFACE8911CC8365F008B24CD /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AFACE8731CC83458008B24CD /* EnergyStream */; targetProxy = AFACE8901CC8365F008B24CD /* PBXContainerItemProxy */; }; AFB581B0102F363300342B11 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AFD571B50996D9DC00BA26F7 /* Juggle */; targetProxy = AFB581AF102F363300342B11 /* PBXContainerItemProxy */; }; AFB591A8178B812C00EA4005 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AFB591A9178B812C00EA4005 /* PBXContainerItemProxy */; }; AFB591C3178B821E00EA4005 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AFB591A7178B812C00EA4005 /* Hexadrop */; targetProxy = AFB591C2178B821E00EA4005 /* PBXContainerItemProxy */; }; AFBFE7401786405E00432B21 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AFF2867F17860E830050A578 /* QuasiCrystal */; targetProxy = AFBFE73F1786405E00432B21 /* PBXContainerItemProxy */; }; AFBFE7421786407000432B21 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF7510FF1782B5B900380EA1 /* Kaleidocycle */; targetProxy = AFBFE7411786407000432B21 /* PBXContainerItemProxy */; }; AFBFE74C178642DC00432B21 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AFBFE74D178642DC00432B21 /* PBXContainerItemProxy */; }; AFBFE7641786438900432B21 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF9D4DEC09B5BB19006E59CF /* Apple2 */; targetProxy = AFBFE7631786438900432B21 /* PBXContainerItemProxy */; }; AFBFE76A178647FE00432B21 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AFBFE76B178647FE00432B21 /* PBXContainerItemProxy */; }; AFBFE7811786482B00432B21 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF7776E409B63ABF00EA3033 /* Phosphor */; targetProxy = AFBFE7801786482B00432B21 /* PBXContainerItemProxy */; }; AFBFE785178648E600432B21 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AFBFE74B178642DC00432B21 /* Apple2-OSX */; targetProxy = AFBFE784178648E600432B21 /* PBXContainerItemProxy */; }; AFBFE787178648F500432B21 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AFBFE767178647FE00432B21 /* Phosphor-OSX */; targetProxy = AFBFE786178648F500432B21 /* PBXContainerItemProxy */; }; AFC0E8AC1CDC601A008CAFAC /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AFC0E8AD1CDC601A008CAFAC /* PBXContainerItemProxy */; }; AFC0E8C91CDC6125008CAFAC /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AFC0E8AB1CDC601A008CAFAC /* Hydrostat */; targetProxy = AFC0E8C81CDC6125008CAFAC /* PBXContainerItemProxy */; }; AFCAD5F90992DFE00009617A /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF9771D60989DC4A001F8B92 /* SaverTester */; targetProxy = AFCAD5F80992DFE00009617A /* PBXContainerItemProxy */; }; AFCF833C1AF5B515008BB7E1 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AFCF833D1AF5B515008BB7E1 /* PBXContainerItemProxy */; }; AFCF835C1AF5B683008BB7E1 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AFCF833B1AF5B515008BB7E1 /* SplitFlap */; targetProxy = AFCF835B1AF5B683008BB7E1 /* PBXContainerItemProxy */; }; AFD51B1C0F063B4A00471C02 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AFD51B1D0F063B4A00471C02 /* PBXContainerItemProxy */; }; AFD51B350F063B7800471C02 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AFD51B1B0F063B4A00471C02 /* Photopile */; targetProxy = AFD51B340F063B7800471C02 /* PBXContainerItemProxy */; }; AFD56DF20996A03800BA26F7 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AFD56DF30996A03800BA26F7 /* PBXContainerItemProxy */; }; AFD56EAF0996A72600BA26F7 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AFD56EB00996A72600BA26F7 /* PBXContainerItemProxy */; }; AFD56EDB0996A95700BA26F7 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AFD56EDC0996A95700BA26F7 /* PBXContainerItemProxy */; }; AFD56F0C0996AAFA00BA26F7 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AFD56F0D0996AAFA00BA26F7 /* PBXContainerItemProxy */; }; AFD56F240996AB8A00BA26F7 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AFD56F250996AB8A00BA26F7 /* PBXContainerItemProxy */; }; AFD56F500996AEEE00BA26F7 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AFD56F510996AEEE00BA26F7 /* PBXContainerItemProxy */; }; AFD56F6C0996B01600BA26F7 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AFD56F6D0996B01600BA26F7 /* PBXContainerItemProxy */; }; AFD56F8D0996B09400BA26F7 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AFD56F8E0996B09400BA26F7 /* PBXContainerItemProxy */; }; AFD56FA40996B10F00BA26F7 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AFD56FA50996B10F00BA26F7 /* PBXContainerItemProxy */; }; AFD56FBA0996B18F00BA26F7 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AFD56FBB0996B18F00BA26F7 /* PBXContainerItemProxy */; }; AFD56FD00996B20900BA26F7 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AFD56FD10996B20900BA26F7 /* PBXContainerItemProxy */; }; AFD56FF90996B43800BA26F7 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AFD56FFA0996B43800BA26F7 /* PBXContainerItemProxy */; }; AFD570100996B4CC00BA26F7 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AFD570110996B4CC00BA26F7 /* PBXContainerItemProxy */; }; AFD570270996B56D00BA26F7 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AFD570280996B56D00BA26F7 /* PBXContainerItemProxy */; }; AFD570440996B61600BA26F7 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AFD570450996B61600BA26F7 /* PBXContainerItemProxy */; }; AFD5705A0996B6A300BA26F7 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AFD5705B0996B6A300BA26F7 /* PBXContainerItemProxy */; }; AFD570700996B72700BA26F7 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AFD570710996B72700BA26F7 /* PBXContainerItemProxy */; }; AFD570860996B80300BA26F7 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AFD570870996B80300BA26F7 /* PBXContainerItemProxy */; }; AFD5709C0996B88E00BA26F7 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AFD5709D0996B88E00BA26F7 /* PBXContainerItemProxy */; }; AFD570B20996B93000BA26F7 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AFD570B30996B93000BA26F7 /* PBXContainerItemProxy */; }; AFD570CA0996B9F800BA26F7 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AFD570CB0996B9F800BA26F7 /* PBXContainerItemProxy */; }; AFD570EB0996BBBF00BA26F7 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AFD570EC0996BBBF00BA26F7 /* PBXContainerItemProxy */; }; AFD571140996BE9300BA26F7 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AFD571150996BE9300BA26F7 /* PBXContainerItemProxy */; }; AFD5712D0996BF2E00BA26F7 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AFD5712E0996BF2E00BA26F7 /* PBXContainerItemProxy */; }; AFD571440996C01700BA26F7 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AFD571450996C01700BA26F7 /* PBXContainerItemProxy */; }; AFD5715A0996C0CE00BA26F7 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AFD5715B0996C0CE00BA26F7 /* PBXContainerItemProxy */; }; AFD571B60996D9DC00BA26F7 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AFD571B70996D9DC00BA26F7 /* PBXContainerItemProxy */; }; AFD572230996E4A300BA26F7 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AFD572240996E4A300BA26F7 /* PBXContainerItemProxy */; }; AFD5726E0996EE8500BA26F7 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AFD5726F0996EE8500BA26F7 /* PBXContainerItemProxy */; }; AFD572A60996F99600BA26F7 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AFD572A70996F99600BA26F7 /* PBXContainerItemProxy */; }; AFD572C30996FC0F00BA26F7 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AFD572C40996FC0F00BA26F7 /* PBXContainerItemProxy */; }; AFD572FA099701C000BA26F7 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AFD572FB099701C000BA26F7 /* PBXContainerItemProxy */; }; AFD5735E0997411200BA26F7 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AFD5735F0997411200BA26F7 /* PBXContainerItemProxy */; }; AFDA658F178A52B70070D24B /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AFDA6590178A52B70070D24B /* PBXContainerItemProxy */; }; AFDA65AA178A54690070D24B /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AFDA658E178A52B70070D24B /* Unknown Pleasures */; targetProxy = AFDA65A9178A54690070D24B /* PBXContainerItemProxy */; }; AFE2A4570E2E904600ADB298 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AFE2A4580E2E904600ADB298 /* PBXContainerItemProxy */; }; AFE2A46F0E2E908E00ADB298 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AFE2A4560E2E904600ADB298 /* SkyTentacles */; targetProxy = AFE2A46E0E2E908E00ADB298 /* PBXContainerItemProxy */; }; AFE30BE90E52B14700CCF4A5 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AFE30BEA0E52B14700CCF4A5 /* PBXContainerItemProxy */; }; AFE6A1830CDD7B2E002805BF /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AFE6A1840CDD7B2E002805BF /* PBXContainerItemProxy */; }; AFE6A19C0CDD7B7F002805BF /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AFE6A1820CDD7B2E002805BF /* MoebiusGears */; targetProxy = AFE6A19B0CDD7B7F002805BF /* PBXContainerItemProxy */; }; AFE6A41C0CDD7FAA002805BF /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AFE6A41D0CDD7FAA002805BF /* PBXContainerItemProxy */; }; AFE6A4300CDD7FEE002805BF /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AFE6A41B0CDD7FAA002805BF /* Abstractile */; targetProxy = AFE6A42F0CDD7FEE002805BF /* PBXContainerItemProxy */; }; AFEC23CE1CB6EAE100DE138F /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AFEC23CF1CB6EAE100DE138F /* PBXContainerItemProxy */; }; AFEC23EB1CB6ED0800DE138F /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AFEC23CD1CB6EAE100DE138F /* DymaxionMap */; targetProxy = AFEC23EA1CB6ED0800DE138F /* PBXContainerItemProxy */; }; AFEE104E1D13406000AAC8F7 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AFEE104F1D13406000AAC8F7 /* PBXContainerItemProxy */; }; AFEE106B1D13424C00AAC8F7 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AFEE104D1D13406000AAC8F7 /* CubeTwist */; targetProxy = AFEE106A1D13424C00AAC8F7 /* PBXContainerItemProxy */; }; AFEE106D1D15EB0700AAC8F7 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AFEE106E1D15EB0700AAC8F7 /* PBXContainerItemProxy */; }; AFEE108A1D15EBF900AAC8F7 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AFEE106C1D15EB0700AAC8F7 /* CubeStack */; targetProxy = AFEE10891D15EBF900AAC8F7 /* PBXContainerItemProxy */; }; AFEE108C1D17E20B00AAC8F7 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AFEE108D1D17E20B00AAC8F7 /* PBXContainerItemProxy */; }; AFEE10A91D17E32100AAC8F7 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AFEE108B1D17E20B00AAC8F7 /* Splodesic */; targetProxy = AFEE10A81D17E32100AAC8F7 /* PBXContainerItemProxy */; }; AFF2868017860E830050A578 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AFF2868117860E830050A578 /* PBXContainerItemProxy */; }; AFF3C9E917CCAC440028F240 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AFF3C9EA17CCAC440028F240 /* PBXContainerItemProxy */; }; AFF3CA0117CCAE210028F240 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AFF3C9E817CCAC440028F240 /* Geodesic */; targetProxy = AFF3CA0017CCAE210028F240 /* PBXContainerItemProxy */; }; AFF463370C4403E400EE6509 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AFF463380C4403E400EE6509 /* PBXContainerItemProxy */; }; AFF463530C44062500EE6509 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AFF463360C4403E400EE6509 /* CWaves */; targetProxy = AFF463520C44062500EE6509 /* PBXContainerItemProxy */; }; AFF463590C440AEF00EE6509 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AFF4635A0C440AEF00EE6509 /* PBXContainerItemProxy */; }; AFF4636F0C440B3B00EE6509 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AFF463580C440AEF00EE6509 /* GLCells */; targetProxy = AFF4636E0C440B3B00EE6509 /* PBXContainerItemProxy */; }; AFFAB31619158CE40020F021 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = AFFAB31719158CE40020F021 /* PBXContainerItemProxy */; }; AFFAB33519158F1E0020F021 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AFFAB31519158CE40020F021 /* ProjectivePlane */; targetProxy = AFFAB33419158F1E0020F021 /* PBXContainerItemProxy */; }; CE04E8CB1B9B61D00085910B /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = CE3D01511B76F4C100993C75 /* TestX11 */; targetProxy = CE04E8CA1B9B61D00085910B /* PBXContainerItemProxy */; }; CE3D01521B76F4C100993C75 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; targetProxy = CE3D01531B76F4C100993C75 /* PBXContainerItemProxy */; }; /* End PBXTargetDependency section */ /* Begin PBXVariantGroup section */ 089C165CFE840E0CC02AAC07 /* InfoPlist.strings */ = { isa = PBXVariantGroup; children = ( 089C165DFE840E0CC02AAC07 /* InfoPlist.strings */, ); name = InfoPlist.strings; sourceTree = ""; }; AF9772E10989DFC6001F8B92 /* SaverRunner.nib */ = { isa = PBXVariantGroup; children = ( AF9772E20989DFC6001F8B92 /* English */, ); name = SaverRunner.nib; sourceTree = ""; }; /* End PBXVariantGroup section */ /* Begin XCBuildConfiguration section */ AF0839A009930B6B00277BE9 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Debug; }; AF0839A109930B6B00277BE9 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Release; }; AF083A46099311D700277BE9 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Debug; }; AF083A47099311D700277BE9 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Release; }; AF0DC7BB0C4C73F600D76972 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Debug; }; AF0DC7BC0C4C73F600D76972 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Release; }; AF0DCA540C4CBB0D00D76972 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Debug; }; AF0DCA550C4CBB0D00D76972 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Release; }; AF137D420F075C9C004DE3B2 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { PRODUCT_NAME = Obsolete; }; name = Debug; }; AF137D430F075C9C004DE3B2 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { PRODUCT_NAME = Obsolete; }; name = Release; }; AF1A17710D6D6EE3008AF328 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Debug; }; AF1A17720D6D6EE3008AF328 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Release; }; AF1ADA0F18500FA200932759 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { BUNDLE_IDENTIFIER = "org.jwz.${PROJECT_NAME:rfc1034identifier}.updater"; FRAMEWORK_SEARCH_PATHS = ( "$(inherited)", "$(SRCROOT)", ); INFOPLIST_FILE = "$(SRCROOT)/Updater.plist"; "OTHER_CFLAGS[sdk=macosx*]" = "${OBJC_NO_GC_CFLAGS}"; PRODUCT_BUNDLE_IDENTIFIER = "$(BUNDLE_IDENTIFIER)"; PRODUCT_NAME = "$(TARGET_NAME)"; WRAPPER_EXTENSION = app; }; name = Debug; }; AF1ADA1018500FA200932759 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { BUNDLE_IDENTIFIER = "org.jwz.${PROJECT_NAME:rfc1034identifier}.updater"; FRAMEWORK_SEARCH_PATHS = ( "$(inherited)", "$(SRCROOT)", ); INFOPLIST_FILE = "$(SRCROOT)/Updater.plist"; "OTHER_CFLAGS[sdk=macosx*]" = "${OBJC_NO_GC_CFLAGS}"; PRODUCT_BUNDLE_IDENTIFIER = "$(BUNDLE_IDENTIFIER)"; PRODUCT_NAME = "$(TARGET_NAME)"; WRAPPER_EXTENSION = app; }; name = Release; }; AF1B0FBA1D7AB4740011DBE4 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); PRODUCT_NAME = "$(TARGET_NAME)"; }; name = Debug; }; AF1B0FBB1D7AB4740011DBE4 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); PRODUCT_NAME = "$(TARGET_NAME)"; }; name = Release; }; AF32D9F20F3AD0B40080F535 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Debug; }; AF32D9F30F3AD0B40080F535 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Release; }; AF3581D31431D47B00E09C51 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Debug; }; AF3581D41431D47B00E09C51 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Release; }; AF358214143330F900E09C51 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Debug; }; AF358215143330F900E09C51 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Release; }; AF35E89E0E63823600691F2F /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Debug; }; AF35E89F0E63823600691F2F /* Release */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Release; }; AF39382D1D0FBD6A00205406 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); PRODUCT_NAME = "$(TARGET_NAME)"; }; name = Debug; }; AF39382E1D0FBD6A00205406 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); PRODUCT_NAME = "$(TARGET_NAME)"; }; name = Release; }; AF39E294198A11F60064A58D /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); PRODUCT_NAME = WindupRobot; }; name = Debug; }; AF39E295198A11F60064A58D /* Release */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); PRODUCT_NAME = WindupRobot; }; name = Release; }; AF3C71570D624BF50030CC0D /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Debug; }; AF3C71580D624BF50030CC0D /* Release */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Release; }; AF46E9E21CBBA2B300240FBC /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); PRODUCT_NAME = "$(TARGET_NAME)"; }; name = Debug; }; AF46E9E31CBBA2B300240FBC /* Release */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); PRODUCT_NAME = "$(TARGET_NAME)"; }; name = Release; }; AF476FC4099D154F001F091E /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Debug; }; AF476FC5099D154F001F091E /* Release */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Release; }; AF476FE9099D1686001F091E /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Debug; }; AF476FEA099D1686001F091E /* Release */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Release; }; AF47705A099D4385001F091E /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Debug; }; AF47705B099D4385001F091E /* Release */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Release; }; AF477177099D4786001F091E /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Debug; }; AF477178099D4786001F091E /* Release */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Release; }; AF47718D099D4803001F091E /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Debug; }; AF47718E099D4803001F091E /* Release */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Release; }; AF4771B5099D4949001F091E /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Debug; }; AF4771B6099D4949001F091E /* Release */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Release; }; AF4771E9099D4D9A001F091E /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Debug; }; AF4771EA099D4D9A001F091E /* Release */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Release; }; AF477200099D4E63001F091E /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Debug; }; AF477201099D4E63001F091E /* Release */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Release; }; AF477216099D4EE8001F091E /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Debug; }; AF477217099D4EE8001F091E /* Release */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Release; }; AF47722C099D4F67001F091E /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Debug; }; AF47722D099D4F67001F091E /* Release */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Release; }; AF477261099D5717001F091E /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Debug; }; AF477262099D5717001F091E /* Release */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Release; }; AF477279099D57B9001F091E /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Debug; }; AF47727A099D57B9001F091E /* Release */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Release; }; AF477291099D5926001F091E /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Debug; }; AF477292099D5926001F091E /* Release */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Release; }; AF477390099D65A1001F091E /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Debug; }; AF477391099D65A1001F091E /* Release */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Release; }; AF4773A8099D6648001F091E /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Debug; }; AF4773A9099D6648001F091E /* Release */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Release; }; AF4773CF099D67B9001F091E /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Debug; }; AF4773D0099D67B9001F091E /* Release */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Release; }; AF477410099D69E7001F091E /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Debug; }; AF477411099D69E7001F091E /* Release */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Release; }; AF477435099D7C70001F091E /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Debug; }; AF477436099D7C70001F091E /* Release */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Release; }; AF477450099D7D33001F091E /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Debug; }; AF477451099D7D33001F091E /* Release */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Release; }; AF477491099D89E4001F091E /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Debug; }; AF477492099D89E4001F091E /* Release */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Release; }; AF4774A7099D8A74001F091E /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Debug; }; AF4774A8099D8A74001F091E /* Release */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Release; }; AF4774C2099D8B5F001F091E /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Debug; }; AF4774C3099D8B5F001F091E /* Release */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Release; }; AF4774DC099D8BFF001F091E /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Debug; }; AF4774DD099D8BFF001F091E /* Release */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Release; }; AF47756B099D9A1A001F091E /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Debug; }; AF47756C099D9A1A001F091E /* Release */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Release; }; AF477591099D9C28001F091E /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Debug; }; AF477592099D9C28001F091E /* Release */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Release; }; AF4775AD099D9CF7001F091E /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Debug; }; AF4775AE099D9CF7001F091E /* Release */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Release; }; AF4775E6099D9F69001F091E /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Debug; }; AF4775E7099D9F69001F091E /* Release */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Release; }; AF477600099DA030001F091E /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Debug; }; AF477601099DA030001F091E /* Release */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Release; }; AF477621099DA26C001F091E /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Debug; }; AF477622099DA26C001F091E /* Release */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Release; }; AF477652099DA6D0001F091E /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Debug; }; AF477653099DA6D0001F091E /* Release */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Release; }; AF477668099DA78E001F091E /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Debug; }; AF477669099DA78E001F091E /* Release */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Release; }; AF47767E099DA849001F091E /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Debug; }; AF47767F099DA849001F091E /* Release */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Release; }; AF47769D099DAA6F001F091E /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Debug; }; AF47769E099DAA6F001F091E /* Release */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Release; }; AF4776B8099DABDD001F091E /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Debug; }; AF4776B9099DABDD001F091E /* Release */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Release; }; AF4776CE099DAC8A001F091E /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Debug; }; AF4776CF099DAC8A001F091E /* Release */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Release; }; AF4776E9099DADDF001F091E /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Debug; }; AF4776EA099DADDF001F091E /* Release */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Release; }; AF4776FF099DAE7A001F091E /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Debug; }; AF477700099DAE7A001F091E /* Release */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Release; }; AF47771B099DAF9F001F091E /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Debug; }; AF47771C099DAF9F001F091E /* Release */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Release; }; AF477731099DB044001F091E /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Debug; }; AF477732099DB044001F091E /* Release */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Release; }; AF477760099DB61E001F091E /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Debug; }; AF477761099DB61E001F091E /* Release */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Release; }; AF477782099DB965001F091E /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Debug; }; AF477783099DB965001F091E /* Release */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Release; }; AF47779E099DBA90001F091E /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Debug; }; AF47779F099DBA90001F091E /* Release */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Release; }; AF4777DF099DC183001F091E /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Debug; }; AF4777E0099DC183001F091E /* Release */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Release; }; AF4778B9099DDB79001F091E /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Debug; }; AF4778BA099DDB79001F091E /* Release */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Release; }; AF4778D5099DDCAE001F091E /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Debug; }; AF4778D6099DDCAE001F091E /* Release */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Release; }; AF4778F6099DDDC8001F091E /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Debug; }; AF4778F7099DDDC8001F091E /* Release */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Release; }; AF477917099DE379001F091E /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Debug; }; AF477918099DE379001F091E /* Release */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Release; }; AF477938099DE4C7001F091E /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Debug; }; AF477939099DE4C7001F091E /* Release */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Release; }; AF4808C3098C3B8B00FB32B8 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { INSTALL_PATH = /usr/local/lib; PRODUCT_BUNDLE_IDENTIFIER = "${BUNDLE_IDENTIFIER}"; SKIP_INSTALL = YES; SUPPORTED_PLATFORMS = "macosx iphonesimulator iphoneos"; VALID_ARCHS = "i386 x86_64 armv6 armv7 armv7s arm64"; }; name = Debug; }; AF4808C4098C3B8B00FB32B8 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { INSTALL_PATH = /usr/local/lib; PRODUCT_BUNDLE_IDENTIFIER = "${BUNDLE_IDENTIFIER}"; SKIP_INSTALL = YES; SUPPORTED_PLATFORMS = "macosx iphonesimulator iphoneos"; VALID_ARCHS = "i386 x86_64 armv6 armv7 armv7s arm64"; }; name = Release; }; AF480ABB098C66E300FB32B8 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { PRODUCT_NAME = "All Savers (XScreenSaver)"; }; name = Debug; }; AF480ABC098C66E300FB32B8 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { PRODUCT_NAME = "All Savers (XScreenSaver)"; }; name = Release; }; AF480C56098E301400FB32B8 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Debug; }; AF480C57098E301400FB32B8 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Release; }; AF480D65098EED6E00FB32B8 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { PRODUCT_NAME = "All Savers (XLockmore)"; }; name = Debug; }; AF480D66098EED6E00FB32B8 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { PRODUCT_NAME = "All Savers (XLockmore)"; }; name = Release; }; AF480D68098EED6E00FB32B8 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { PRODUCT_NAME = "All Savers (OpenGL)"; }; name = Debug; }; AF480D69098EED6E00FB32B8 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { PRODUCT_NAME = "All Savers (OpenGL)"; }; name = Release; }; AF480D6B098EED6E00FB32B8 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { PRODUCT_NAME = "All Savers"; }; name = Debug; }; AF480D6C098EED6E00FB32B8 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { PRODUCT_NAME = "All Savers"; }; name = Release; }; AF480D7F098EEDDE00FB32B8 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Debug; }; AF480D80098EEDDE00FB32B8 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Release; }; AF4810F909909FBA00FB32B8 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Debug; }; AF4810FA09909FBA00FB32B8 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Release; }; AF4812620990CE2700FB32B8 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Debug; }; AF4812630990CE2700FB32B8 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Release; }; AF4812C40990D3D900FB32B8 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Debug; }; AF4812C50990D3D900FB32B8 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Release; }; AF48DF010A0C25E000F94CF9 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Debug; }; AF48DF020A0C25E000F94CF9 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Release; }; AF4A345B102A593600A81B2A /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Debug; }; AF4A345C102A593600A81B2A /* Release */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Release; }; AF4FD6F80CE7A486005EE58E /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Debug; }; AF4FD6F90CE7A486005EE58E /* Release */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Release; }; AF4FF4950D52CA0800666F98 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { PRODUCT_NAME = m6502.h; }; name = Debug; }; AF4FF4960D52CA0800666F98 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { PRODUCT_NAME = m6502.h; }; name = Release; }; AF4FF4CC0D52CBDE00666F98 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Debug; }; AF4FF4CD0D52CBDE00666F98 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Release; }; AF5C9B0B1A0CCE6E00B0147A /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Debug; }; AF5C9B0C1A0CCE6E00B0147A /* Release */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Release; }; AF63A8041AB4EDDB00593C75 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); PRODUCT_NAME = RomanBoy; }; name = Debug; }; AF63A8051AB4EDDB00593C75 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); PRODUCT_NAME = RomanBoy; }; name = Release; }; AF63F44C1C3465BE0033E133 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; ASSETCATALOG_COMPILER_LAUNCHIMAGE_NAME = LaunchImage; BUNDLE_IDENTIFIER = "org.jwz.${PROJECT_NAME:rfc1034identifier}.apple2"; CODE_SIGN_IDENTITY = "iPhone Developer"; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; GCC_PREPROCESSOR_DEFINITIONS = ( "USE_IPHONE=1", "APPLE2_ONLY=1", "$(inherited)", ); "GCC_WARN_64_TO_32_BIT_CONVERSION[arch=*64]" = NO; INFOPLIST_FILE = iSaverRunner.plist; INSTALL_PATH = "$(HOME)/Applications"; PRODUCT_BUNDLE_IDENTIFIER = "$(BUNDLE_IDENTIFIER)"; PRODUCT_NAME = Apple2; PROVISIONING_PROFILE = ""; SDKROOT = iphoneos; WRAPPER_EXTENSION = app; }; name = Debug; }; AF63F44D1C3465BE0033E133 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; ASSETCATALOG_COMPILER_LAUNCHIMAGE_NAME = LaunchImage; BUNDLE_IDENTIFIER = "org.jwz.${PROJECT_NAME:rfc1034identifier}.apple2"; CODE_SIGN_IDENTITY = "iPhone Developer"; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; GCC_PREPROCESSOR_DEFINITIONS = ( "USE_IPHONE=1", "APPLE2_ONLY=1", "$(inherited)", ); "GCC_WARN_64_TO_32_BIT_CONVERSION[arch=*64]" = NO; INFOPLIST_FILE = iSaverRunner.plist; INSTALL_PATH = "$(HOME)/Applications"; PRODUCT_BUNDLE_IDENTIFIER = "$(BUNDLE_IDENTIFIER)"; PRODUCT_NAME = Apple2; PROVISIONING_PROFILE = ""; SDKROOT = iphoneos; WRAPPER_EXTENSION = app; }; name = Release; }; AF63F4721C34682A0033E133 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; ASSETCATALOG_COMPILER_LAUNCHIMAGE_NAME = LaunchImage; BUNDLE_IDENTIFIER = "org.jwz.${PROJECT_NAME:rfc1034identifier}.phosphor"; CODE_SIGN_IDENTITY = "iPhone Developer"; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; GCC_PREPROCESSOR_DEFINITIONS = ( "USE_IPHONE=1", "PHOSPHOR_ONLY=1", "$(inherited)", ); "GCC_WARN_64_TO_32_BIT_CONVERSION[arch=*64]" = NO; INFOPLIST_FILE = iSaverRunner.plist; INSTALL_PATH = "$(HOME)/Applications"; PRODUCT_BUNDLE_IDENTIFIER = "$(BUNDLE_IDENTIFIER)"; PRODUCT_NAME = Phosphor; PROVISIONING_PROFILE = ""; SDKROOT = iphoneos; WRAPPER_EXTENSION = app; }; name = Debug; }; AF63F4731C34682A0033E133 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; ASSETCATALOG_COMPILER_LAUNCHIMAGE_NAME = LaunchImage; BUNDLE_IDENTIFIER = "org.jwz.${PROJECT_NAME:rfc1034identifier}.phosphor"; CODE_SIGN_IDENTITY = "iPhone Developer"; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; GCC_PREPROCESSOR_DEFINITIONS = ( "USE_IPHONE=1", "PHOSPHOR_ONLY=1", "$(inherited)", ); "GCC_WARN_64_TO_32_BIT_CONVERSION[arch=*64]" = NO; INFOPLIST_FILE = iSaverRunner.plist; INSTALL_PATH = "$(HOME)/Applications"; PRODUCT_BUNDLE_IDENTIFIER = "$(BUNDLE_IDENTIFIER)"; PRODUCT_NAME = Phosphor; PROVISIONING_PROFILE = ""; SDKROOT = iphoneos; WRAPPER_EXTENSION = app; }; name = Release; }; AF63F4981C3469FC0033E133 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; ASSETCATALOG_COMPILER_LAUNCHIMAGE_NAME = LaunchImage; BUNDLE_IDENTIFIER = "org.jwz.${PROJECT_NAME:rfc1034identifier}.testX11"; CODE_SIGN_IDENTITY = "iPhone Developer"; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; GCC_PREPROCESSOR_DEFINITIONS = ( "USE_IPHONE=1", "TESTX11_ONLY=1", "$(inherited)", ); "GCC_WARN_64_TO_32_BIT_CONVERSION[arch=*64]" = NO; INFOPLIST_FILE = iSaverRunner.plist; INSTALL_PATH = "$(HOME)/Applications"; PRODUCT_BUNDLE_IDENTIFIER = "$(BUNDLE_IDENTIFIER)"; PRODUCT_NAME = TestX11; PROVISIONING_PROFILE = ""; SDKROOT = iphoneos; WRAPPER_EXTENSION = app; }; name = Debug; }; AF63F4991C3469FC0033E133 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; ASSETCATALOG_COMPILER_LAUNCHIMAGE_NAME = LaunchImage; BUNDLE_IDENTIFIER = "org.jwz.${PROJECT_NAME:rfc1034identifier}.testX11"; CODE_SIGN_IDENTITY = "iPhone Developer"; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; GCC_PREPROCESSOR_DEFINITIONS = ( "USE_IPHONE=1", "TESTX11_ONLY=1", "$(inherited)", ); "GCC_WARN_64_TO_32_BIT_CONVERSION[arch=*64]" = NO; INFOPLIST_FILE = iSaverRunner.plist; INSTALL_PATH = "$(HOME)/Applications"; PRODUCT_BUNDLE_IDENTIFIER = "$(BUNDLE_IDENTIFIER)"; PRODUCT_NAME = TestX11; PROVISIONING_PROFILE = ""; SDKROOT = iphoneos; WRAPPER_EXTENSION = app; }; name = Release; }; AF642403099FF9C2000F4CD4 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Debug; }; AF642404099FF9C2000F4CD4 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Release; }; AF6425DA09A18855000F4CD4 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Debug; }; AF6425DB09A18855000F4CD4 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Release; }; AF6425FA09A189EC000F4CD4 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Debug; }; AF6425FB09A189EC000F4CD4 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Release; }; AF64261D09A18D6C000F4CD4 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Debug; }; AF64261E09A18D6C000F4CD4 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Release; }; AF64263A09A18F54000F4CD4 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Debug; }; AF64263B09A18F54000F4CD4 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Release; }; AF64265D09A19229000F4CD4 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Debug; }; AF64265E09A19229000F4CD4 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Release; }; AF64268909A194B0000F4CD4 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Debug; }; AF64268A09A194B0000F4CD4 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Release; }; AF64277F09A1D37A000F4CD4 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Debug; }; AF64278009A1D37A000F4CD4 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Release; }; AF6427B609A2DE36000F4CD4 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Debug; }; AF6427B709A2DE36000F4CD4 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Release; }; AF68A49019196CF800D41CD1 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { PRODUCT_NAME = Tessellimage; }; name = Debug; }; AF68A49119196CF800D41CD1 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { PRODUCT_NAME = Tessellimage; }; name = Release; }; AF73FF341A09877F00E485E9 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { PRODUCT_NAME = BinaryRing; }; name = Debug; }; AF73FF351A09877F00E485E9 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { PRODUCT_NAME = BinaryRing; }; name = Release; }; AF7511101782B5B900380EA1 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); PRODUCT_NAME = Kaleidocycle; }; name = Debug; }; AF7511111782B5B900380EA1 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); PRODUCT_NAME = Kaleidocycle; }; name = Release; }; AF7776F409B63ABF00EA3033 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Debug; }; AF7776F509B63ABF00EA3033 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Release; }; AF77772809B6416100EA3033 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Debug; }; AF77772909B6416100EA3033 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Release; }; AF77774F09B6446500EA3033 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Debug; }; AF77775009B6446500EA3033 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Release; }; AF77778609B6497800EA3033 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Debug; }; AF77778709B6497800EA3033 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Release; }; AF7777A009B64A5200EA3033 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Debug; }; AF7777A109B64A5200EA3033 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Release; }; AF7777BA09B64B2600EA3033 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Debug; }; AF7777BB09B64B2600EA3033 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Release; }; AF7777E209B64C6B00EA3033 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Debug; }; AF7777E309B64C6B00EA3033 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Release; }; AF7777FC09B64E3100EA3033 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Debug; }; AF7777FD09B64E3100EA3033 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Release; }; AF77782309B6504400EA3033 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Debug; }; AF77782409B6504400EA3033 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Release; }; AF77785609B6528100EA3033 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Debug; }; AF77785709B6528100EA3033 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Release; }; AF77787209B6536000EA3033 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Debug; }; AF77787309B6536000EA3033 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Release; }; AF77788D09B6563500EA3033 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { "OTHER_CFLAGS[sdk=macosx*]" = ( "$(OBJC_GC_CFLAGS)", "-DDEBUG", ); }; name = Debug; }; AF77788E09B6563500EA3033 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Release; }; AF7778B309B659C800EA3033 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Debug; }; AF7778B409B659C800EA3033 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Release; }; AF78D187142DD8F3002AAF77 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Debug; }; AF78D188142DD8F3002AAF77 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Release; }; AF794F72099748450059A8B0 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Debug; }; AF794F73099748450059A8B0 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Release; }; AF794F9C09974A320059A8B0 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Debug; }; AF794F9D09974A320059A8B0 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Release; }; AF794FDB09974FA60059A8B0 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Debug; }; AF794FDC09974FA60059A8B0 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Release; }; AF7ACFD219FF0A9200BD752B /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); PRODUCT_NAME = GeodesicGears; }; name = Debug; }; AF7ACFD319FF0A9200BD752B /* Release */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); PRODUCT_NAME = GeodesicGears; }; name = Release; }; AF91898D158FC00A002B5D1E /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; ASSETCATALOG_COMPILER_LAUNCHIMAGE_NAME = LaunchImage; BUNDLE_IDENTIFIER = "org.jwz.${PROJECT_NAME:rfc1034identifier}"; CODE_SIGN_IDENTITY = "iPhone Developer"; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; GCC_PREPROCESSOR_DEFINITIONS = ( "USE_IPHONE=1", "$(inherited)", ); "GCC_WARN_64_TO_32_BIT_CONVERSION[arch=*64]" = NO; INFOPLIST_FILE = iSaverRunner.plist; INSTALL_PATH = "$(HOME)/Applications"; PRODUCT_BUNDLE_IDENTIFIER = "${BUNDLE_IDENTIFIER}"; PRODUCT_NAME = XScreenSaver; PROVISIONING_PROFILE = ""; SDKROOT = iphoneos; WRAPPER_EXTENSION = app; }; name = Debug; }; AF91898E158FC00A002B5D1E /* Release */ = { isa = XCBuildConfiguration; buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; ASSETCATALOG_COMPILER_LAUNCHIMAGE_NAME = LaunchImage; BUNDLE_IDENTIFIER = "org.jwz.${PROJECT_NAME:rfc1034identifier}"; CODE_SIGN_IDENTITY = "iPhone Developer"; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; GCC_PREPROCESSOR_DEFINITIONS = ( "USE_IPHONE=1", "$(inherited)", ); "GCC_WARN_64_TO_32_BIT_CONVERSION[arch=*64]" = NO; INFOPLIST_FILE = iSaverRunner.plist; INSTALL_PATH = "$(HOME)/Applications"; PRODUCT_BUNDLE_IDENTIFIER = "${BUNDLE_IDENTIFIER}"; PRODUCT_NAME = XScreenSaver; PROVISIONING_PROFILE = ""; SDKROOT = iphoneos; WRAPPER_EXTENSION = app; }; name = Release; }; AF97573B099C317000B05160 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Debug; }; AF97573C099C317000B05160 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Release; }; AF975783099C374A00B05160 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Debug; }; AF975784099C374A00B05160 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Release; }; AF9757D0099C3E6300B05160 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Debug; }; AF9757D1099C3E6300B05160 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Release; }; AF975816099C41D500B05160 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Debug; }; AF975817099C41D500B05160 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Release; }; AF975873099C475900B05160 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Debug; }; AF975874099C475900B05160 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Release; }; AF975A44099C681F00B05160 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Debug; }; AF975A45099C681F00B05160 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Release; }; AF975A7A099C6AB200B05160 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Debug; }; AF975A7B099C6AB200B05160 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Release; }; AF975A94099C6BC300B05160 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Debug; }; AF975A95099C6BC300B05160 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Release; }; AF975AE5099C6EB100B05160 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Debug; }; AF975AE6099C6EB100B05160 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Release; }; AF975B0A099C6FE400B05160 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Debug; }; AF975B0B099C6FE400B05160 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Release; }; AF975C20099C8C1500B05160 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Debug; }; AF975C21099C8C1500B05160 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Release; }; AF975C4C099C8DCF00B05160 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Debug; }; AF975C4D099C8DCF00B05160 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Release; }; AF975C6C099C8F3F00B05160 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Debug; }; AF975C6D099C8F3F00B05160 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Release; }; AF975D61099CA0F000B05160 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Debug; }; AF975D62099CA0F000B05160 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Release; }; AF976FBF0989CAA4001F8B92 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Debug; }; AF976FC00989CAA4001F8B92 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Release; }; AF97703E0989D1E6001F8B92 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Debug; }; AF97703F0989D1E6001F8B92 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Release; }; AF97707B0989D2F6001F8B92 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Debug; }; AF97707C0989D2F6001F8B92 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Release; }; AF9771DB0989DC4B001F8B92 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { INFOPLIST_FILE = SaverRunner.plist; INSTALL_PATH = "$(HOME)/Applications"; PRODUCT_BUNDLE_IDENTIFIER = "${BUNDLE_IDENTIFIER}"; WRAPPER_EXTENSION = app; }; name = Debug; }; AF9771DC0989DC4B001F8B92 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { INFOPLIST_FILE = SaverRunner.plist; INSTALL_PATH = "$(HOME)/Applications"; PRODUCT_BUNDLE_IDENTIFIER = "${BUNDLE_IDENTIFIER}"; WRAPPER_EXTENSION = app; }; name = Release; }; AF998EEC0A083DB30051049D /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Debug; }; AF998EED0A083DB30051049D /* Release */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Release; }; AF9D467409B5109C006E59CF /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Debug; }; AF9D467509B5109C006E59CF /* Release */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Release; }; AF9D475209B5300A006E59CF /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Debug; }; AF9D475309B5300A006E59CF /* Release */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Release; }; AF9D476D09B53166006E59CF /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Debug; }; AF9D476E09B53166006E59CF /* Release */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Release; }; AF9D48E909B53322006E59CF /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Debug; }; AF9D48EA09B53322006E59CF /* Release */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Release; }; AF9D490209B535DA006E59CF /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Debug; }; AF9D490309B535DA006E59CF /* Release */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Release; }; AF9D493909B53CBA006E59CF /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Debug; }; AF9D493A09B53CBA006E59CF /* Release */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Release; }; AF9D496209B53FC9006E59CF /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Debug; }; AF9D496309B53FC9006E59CF /* Release */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Release; }; AF9D497A09B5411D006E59CF /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Debug; }; AF9D497B09B5411D006E59CF /* Release */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Release; }; AF9D49A509B544C2006E59CF /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Debug; }; AF9D49A609B544C2006E59CF /* Release */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Release; }; AF9D4C7709B59F27006E59CF /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Debug; }; AF9D4C7809B59F27006E59CF /* Release */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Release; }; AF9D4CF509B5AA8E006E59CF /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Debug; }; AF9D4CF609B5AA8E006E59CF /* Release */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Release; }; AF9D4D8D09B5B2DC006E59CF /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Debug; }; AF9D4D8E09B5B2DC006E59CF /* Release */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Release; }; AF9D4DBE09B5B71E006E59CF /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Debug; }; AF9D4DBF09B5B71E006E59CF /* Release */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Release; }; AF9D4DFC09B5BB19006E59CF /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Debug; }; AF9D4DFD09B5BB19006E59CF /* Release */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Release; }; AF9E7EC6190F4C1C00A8B01F /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { PRODUCT_BUNDLE_IDENTIFIER = "${BUNDLE_IDENTIFIER}"; PRODUCT_NAME = "$(TARGET_NAME)"; SKIP_INSTALL = YES; }; name = Debug; }; AF9E7EC7190F4C1C00A8B01F /* Release */ = { isa = XCBuildConfiguration; buildSettings = { PRODUCT_BUNDLE_IDENTIFIER = "${BUNDLE_IDENTIFIER}"; PRODUCT_NAME = "$(TARGET_NAME)"; SKIP_INSTALL = YES; }; name = Release; }; AFA2119F1CD59DAF00C0D2A1 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); PRODUCT_NAME = "$(TARGET_NAME)"; }; name = Debug; }; AFA211A01CD59DAF00C0D2A1 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); PRODUCT_NAME = "$(TARGET_NAME)"; }; name = Release; }; AFA3393E0B058505002B0E7D /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Debug; }; AFA3393F0B058505002B0E7D /* Release */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Release; }; AFA33BCC0B058754002B0E7D /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREFIX_HEADER = "$(SYSTEM_LIBRARY_DIR)/Frameworks/AppKit.framework/Headers/AppKit.h"; INSTALL_PATH = "$(HOME)/bin"; "OTHER_CFLAGS[sdk=macosx*]" = "${OBJC_NO_GC_CFLAGS}"; OTHER_LDFLAGS = ( "-framework", Cocoa, ); PRODUCT_NAME = "webcollage-helper"; }; name = Debug; }; AFA33BCD0B058754002B0E7D /* Release */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREFIX_HEADER = "$(SYSTEM_LIBRARY_DIR)/Frameworks/AppKit.framework/Headers/AppKit.h"; INSTALL_PATH = "$(HOME)/bin"; "OTHER_CFLAGS[sdk=macosx*]" = "${OBJC_NO_GC_CFLAGS}"; OTHER_LDFLAGS = ( "-framework", Cocoa, ); PRODUCT_NAME = "webcollage-helper"; }; name = Release; }; AFA33C080B058E67002B0E7D /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { PRODUCT_NAME = webcollage; }; name = Debug; }; AFA33C090B058E67002B0E7D /* Release */ = { isa = XCBuildConfiguration; buildSettings = { PRODUCT_NAME = webcollage; }; name = Release; }; AFA55958099330B000F3E977 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Debug; }; AFA55959099330B000F3E977 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Release; }; AFA5597D0993317900F3E977 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Debug; }; AFA5597E0993317900F3E977 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Release; }; AFA559A20993322100F3E977 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Debug; }; AFA559A30993322100F3E977 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Release; }; AFA559C50993328000F3E977 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Debug; }; AFA559C60993328000F3E977 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Release; }; AFA559DF0993330600F3E977 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Debug; }; AFA559E00993330600F3E977 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Release; }; AFA55A130993340300F3E977 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Debug; }; AFA55A140993340300F3E977 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Release; }; AFA55A30099334A000F3E977 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Debug; }; AFA55A31099334A000F3E977 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Release; }; AFA55A890993364300F3E977 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Debug; }; AFA55A8A0993364300F3E977 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Release; }; AFA55ADF09933CEF00F3E977 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Debug; }; AFA55AE009933CEF00F3E977 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Release; }; AFA55B1C09933E0500F3E977 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Debug; }; AFA55B1D09933E0500F3E977 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Release; }; AFA55B3509933E8D00F3E977 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Debug; }; AFA55B3609933E8D00F3E977 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Release; }; AFA55B8909933F7200F3E977 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Debug; }; AFA55B8A09933F7200F3E977 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Release; }; AFA55BA109933FDA00F3E977 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Debug; }; AFA55BA209933FDA00F3E977 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Release; }; AFA55BBB099340CE00F3E977 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Debug; }; AFA55BBC099340CE00F3E977 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Release; }; AFA55BF40993429100F3E977 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Debug; }; AFA55BF50993429100F3E977 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Release; }; AFA55C1E0993431300F3E977 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Debug; }; AFA55C1F0993431300F3E977 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Release; }; AFA55C87099349A600F3E977 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Debug; }; AFA55C88099349A600F3E977 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Release; }; AFA55CB909934BB200F3E977 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Debug; }; AFA55CBA09934BB200F3E977 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Release; }; AFA55CDC09934CE400F3E977 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Debug; }; AFA55CDD09934CE400F3E977 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Release; }; AFA55D4C0993565300F3E977 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Debug; }; AFA55D4D0993565300F3E977 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Release; }; AFA55D720993584B00F3E977 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Debug; }; AFA55D730993584B00F3E977 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Release; }; AFA55D8F099358C400F3E977 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Debug; }; AFA55D90099358C400F3E977 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Release; }; AFA55DD809935D7000F3E977 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Debug; }; AFA55DD909935D7000F3E977 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Release; }; AFA55E0109935E4900F3E977 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Debug; }; AFA55E0209935E4900F3E977 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Release; }; AFA55E1D09935EDC00F3E977 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Debug; }; AFA55E1E09935EDC00F3E977 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Release; }; AFA55E4009935F8E00F3E977 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Debug; }; AFA55E4109935F8E00F3E977 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Release; }; AFA55E5E09935FF900F3E977 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Debug; }; AFA55E5F09935FF900F3E977 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Release; }; AFA55EE1099360E300F3E977 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Debug; }; AFA55EE2099360E300F3E977 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Release; }; AFA55F1C099361B700F3E977 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Debug; }; AFA55F1D099361B700F3E977 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Release; }; AFA55F3A0993622F00F3E977 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Debug; }; AFA55F3B0993622F00F3E977 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Release; }; AFA55F520993629000F3E977 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Debug; }; AFA55F530993629000F3E977 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Release; }; AFA55F820993643600F3E977 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Debug; }; AFA55F830993643600F3E977 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Release; }; AFA55FE309936BFA00F3E977 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Debug; }; AFA55FE409936BFA00F3E977 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Release; }; AFA5600909936C6D00F3E977 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Debug; }; AFA5600A09936C6D00F3E977 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Release; }; AFA5602409936CC800F3E977 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Debug; }; AFA5602509936CC800F3E977 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Release; }; AFA5604209936D5100F3E977 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Debug; }; AFA5604309936D5100F3E977 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Release; }; AFA5605A09936E2100F3E977 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Debug; }; AFA5605B09936E2100F3E977 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Release; }; AFA5607209936F3800F3E977 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Debug; }; AFA5607309936F3800F3E977 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Release; }; AFA560BE0993718D00F3E977 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Debug; }; AFA560BF0993718D00F3E977 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Release; }; AFA5610D0993781600F3E977 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Debug; }; AFA5610E0993781600F3E977 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Release; }; AFA5611B099378EA00F3E977 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { PRODUCT_NAME = molecules.h; }; name = Debug; }; AFA5611C099378EA00F3E977 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { PRODUCT_NAME = molecules.h; }; name = Release; }; AFA5616809937C0D00F3E977 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Debug; }; AFA5616909937C0D00F3E977 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Release; }; AFA5618B09937CF100F3E977 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Debug; }; AFA5618C09937CF100F3E977 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Release; }; AFA561AD09937D7E00F3E977 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Debug; }; AFA561AE09937D7E00F3E977 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Release; }; AFA562170993849F00F3E977 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Debug; }; AFA562180993849F00F3E977 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Release; }; AFA5622F0993852500F3E977 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Debug; }; AFA562300993852500F3E977 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Release; }; AFA562CF099392C600F3E977 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Debug; }; AFA562D0099392C600F3E977 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Release; }; AFA562EA099393C900F3E977 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Debug; }; AFA562EB099393C900F3E977 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Release; }; AFA563020993943B00F3E977 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Debug; }; AFA563030993943B00F3E977 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Release; }; AFA563240993951000F3E977 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Debug; }; AFA563250993951000F3E977 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Release; }; AFA56341099395ED00F3E977 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Debug; }; AFA56342099395ED00F3E977 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Release; }; AFA56361099396C000F3E977 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Debug; }; AFA56362099396C000F3E977 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Release; }; AFA56389099397B300F3E977 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Debug; }; AFA5638A099397B300F3E977 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Release; }; AFA563B4099398BB00F3E977 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Debug; }; AFA563B5099398BB00F3E977 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Release; }; AFACE8861CC83458008B24CD /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); PRODUCT_NAME = "$(TARGET_NAME)"; }; name = Debug; }; AFACE8871CC83458008B24CD /* Release */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); PRODUCT_NAME = "$(TARGET_NAME)"; }; name = Release; }; AFB591B8178B812C00EA4005 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { PRODUCT_NAME = Hexadrop; }; name = Debug; }; AFB591B9178B812C00EA4005 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { PRODUCT_NAME = Hexadrop; }; name = Release; }; AFBFE75C178642DC00432B21 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { INFOPLIST_FILE = SaverRunner.plist; INSTALL_PATH = "$(HOME)/Applications"; "OTHER_CFLAGS[sdk=macosx*]" = ""; PRODUCT_NAME = Apple2; WRAPPER_EXTENSION = app; }; name = Debug; }; AFBFE75D178642DC00432B21 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { INFOPLIST_FILE = SaverRunner.plist; INSTALL_PATH = "$(HOME)/Applications"; "OTHER_CFLAGS[sdk=macosx*]" = ""; PRODUCT_NAME = Apple2; WRAPPER_EXTENSION = app; }; name = Release; }; AFBFE77C178647FE00432B21 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { INFOPLIST_FILE = SaverRunner.plist; INSTALL_PATH = "$(HOME)/Applications"; "OTHER_CFLAGS[sdk=macosx*]" = ""; PRODUCT_NAME = Phosphor; WRAPPER_EXTENSION = app; }; name = Debug; }; AFBFE77D178647FE00432B21 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { INFOPLIST_FILE = SaverRunner.plist; INSTALL_PATH = "$(HOME)/Applications"; "OTHER_CFLAGS[sdk=macosx*]" = ""; PRODUCT_NAME = Phosphor; WRAPPER_EXTENSION = app; }; name = Release; }; AFC0E8BE1CDC601A008CAFAC /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); PRODUCT_NAME = "$(TARGET_NAME)"; }; name = Debug; }; AFC0E8BF1CDC601A008CAFAC /* Release */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); PRODUCT_NAME = "$(TARGET_NAME)"; }; name = Release; }; AFCF834E1AF5B515008BB7E1 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); PRODUCT_NAME = SplitFlap; }; name = Debug; }; AFCF834F1AF5B515008BB7E1 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); PRODUCT_NAME = SplitFlap; }; name = Release; }; AFD51B2E0F063B4A00471C02 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Debug; }; AFD51B2F0F063B4A00471C02 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Release; }; AFD56E020996A03800BA26F7 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Debug; }; AFD56E030996A03800BA26F7 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Release; }; AFD56EBC0996A72600BA26F7 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Debug; }; AFD56EBD0996A72600BA26F7 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Release; }; AFD56EE80996A95700BA26F7 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Debug; }; AFD56EE90996A95700BA26F7 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Release; }; AFD56F190996AAFA00BA26F7 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Debug; }; AFD56F1A0996AAFA00BA26F7 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Release; }; AFD56F310996AB8A00BA26F7 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Debug; }; AFD56F320996AB8A00BA26F7 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Release; }; AFD56F5D0996AEEE00BA26F7 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Debug; }; AFD56F5E0996AEEE00BA26F7 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Release; }; AFD56F790996B01600BA26F7 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Debug; }; AFD56F7A0996B01600BA26F7 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Release; }; AFD56F9A0996B09400BA26F7 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Debug; }; AFD56F9B0996B09400BA26F7 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Release; }; AFD56FB10996B10F00BA26F7 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Debug; }; AFD56FB20996B10F00BA26F7 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Release; }; AFD56FC70996B18F00BA26F7 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Debug; }; AFD56FC80996B18F00BA26F7 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Release; }; AFD56FDD0996B20900BA26F7 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Debug; }; AFD56FDE0996B20900BA26F7 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Release; }; AFD570060996B43800BA26F7 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Debug; }; AFD570070996B43800BA26F7 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Release; }; AFD5701D0996B4CC00BA26F7 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Debug; }; AFD5701E0996B4CC00BA26F7 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Release; }; AFD570340996B56D00BA26F7 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Debug; }; AFD570350996B56D00BA26F7 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Release; }; AFD570510996B61600BA26F7 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Debug; }; AFD570520996B61600BA26F7 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Release; }; AFD570670996B6A300BA26F7 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Debug; }; AFD570680996B6A300BA26F7 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Release; }; AFD5707D0996B72700BA26F7 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Debug; }; AFD5707E0996B72700BA26F7 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Release; }; AFD570930996B80300BA26F7 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Debug; }; AFD570940996B80300BA26F7 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Release; }; AFD570A90996B88E00BA26F7 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Debug; }; AFD570AA0996B88E00BA26F7 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Release; }; AFD570BF0996B93000BA26F7 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Debug; }; AFD570C00996B93000BA26F7 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Release; }; AFD570D70996B9F800BA26F7 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Debug; }; AFD570D80996B9F800BA26F7 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Release; }; AFD570F80996BBBF00BA26F7 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Debug; }; AFD570F90996BBBF00BA26F7 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Release; }; AFD571210996BE9300BA26F7 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Debug; }; AFD571220996BE9300BA26F7 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Release; }; AFD5713A0996BF2E00BA26F7 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Debug; }; AFD5713B0996BF2E00BA26F7 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Release; }; AFD571510996C01700BA26F7 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Debug; }; AFD571520996C01700BA26F7 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Release; }; AFD571670996C0CE00BA26F7 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Debug; }; AFD571680996C0CE00BA26F7 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Release; }; AFD571C30996D9DC00BA26F7 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Debug; }; AFD571C40996D9DC00BA26F7 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Release; }; AFD572300996E4A300BA26F7 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Debug; }; AFD572310996E4A300BA26F7 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Release; }; AFD5727B0996EE8500BA26F7 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Debug; }; AFD5727C0996EE8500BA26F7 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Release; }; AFD572B30996F99600BA26F7 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Debug; }; AFD572B40996F99600BA26F7 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Release; }; AFD572D00996FC0F00BA26F7 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Debug; }; AFD572D10996FC0F00BA26F7 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Release; }; AFD57307099701C000BA26F7 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Debug; }; AFD57308099701C000BA26F7 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Release; }; AFD5736B0997411200BA26F7 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Debug; }; AFD5736C0997411200BA26F7 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Release; }; AFDA659F178A52B70070D24B /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); PRODUCT_NAME = UnknownPleasures; }; name = Debug; }; AFDA65A0178A52B70070D24B /* Release */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); PRODUCT_NAME = UnknownPleasures; }; name = Release; }; AFE2A4680E2E904600ADB298 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Debug; }; AFE2A4690E2E904600ADB298 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Release; }; AFE30BFA0E52B14700CCF4A5 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Debug; }; AFE30BFB0E52B14700CCF4A5 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Release; }; AFE6A1950CDD7B2E002805BF /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Debug; }; AFE6A1960CDD7B2E002805BF /* Release */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Release; }; AFE6A42B0CDD7FAA002805BF /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Debug; }; AFE6A42C0CDD7FAA002805BF /* Release */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Release; }; AFEC23E01CB6EAE100DE138F /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); PRODUCT_NAME = "$(TARGET_NAME)"; }; name = Debug; }; AFEC23E11CB6EAE100DE138F /* Release */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); PRODUCT_NAME = "$(TARGET_NAME)"; }; name = Release; }; AFEE10601D13406000AAC8F7 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); PRODUCT_NAME = "$(TARGET_NAME)"; }; name = Debug; }; AFEE10611D13406000AAC8F7 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); PRODUCT_NAME = "$(TARGET_NAME)"; }; name = Release; }; AFEE107F1D15EB0800AAC8F7 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); PRODUCT_NAME = "$(TARGET_NAME)"; }; name = Debug; }; AFEE10801D15EB0800AAC8F7 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); PRODUCT_NAME = "$(TARGET_NAME)"; }; name = Release; }; AFEE109E1D17E20B00AAC8F7 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); PRODUCT_NAME = "$(TARGET_NAME)"; }; name = Debug; }; AFEE109F1D17E20B00AAC8F7 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); PRODUCT_NAME = "$(TARGET_NAME)"; }; name = Release; }; AFF2869017860E830050A578 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); PRODUCT_NAME = QuasiCrystal; }; name = Debug; }; AFF2869117860E830050A578 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); PRODUCT_NAME = QuasiCrystal; }; name = Release; }; AFF3C9F917CCAC440028F240 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); PRODUCT_NAME = Geodesic; }; name = Debug; }; AFF3C9FA17CCAC440028F240 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); PRODUCT_NAME = Geodesic; }; name = Release; }; AFF463450C4403E400EE6509 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Debug; }; AFF463460C4403E400EE6509 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Release; }; AFF4636A0C440AEF00EE6509 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Debug; }; AFF4636B0C440AEF00EE6509 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Release; }; AFFAB32719158CE40020F021 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Debug; }; AFFAB32819158CE40020F021 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "USE_GL=1", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); }; name = Release; }; C01FCF4F08A954540054247B /* Debug */ = { isa = XCBuildConfiguration; baseConfigurationReference = AF94E7411A16E93600289B93 /* xscreensaver.xcconfig */; buildSettings = { ARCHS = "$(ARCHS_STANDARD_32_64_BIT)"; BUNDLE_IDENTIFIER = "org.jwz.${PROJECT_NAME:rfc1034identifier}.${PRODUCT_NAME:rfc1034identifier}"; CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES; CLANG_WARN_INT_CONVERSION = YES; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; "CODE_SIGN_IDENTITY[sdk=iphonesimulator*]" = "iPhone Developer"; "CODE_SIGN_IDENTITY[sdk=macosx*]" = "Mac Developer"; COMBINE_HIDPI_IMAGES = YES; DEVELOPMENT_TEAM = 4627ATJELP; ENABLE_TESTABILITY = YES; GCC_OPTIMIZATION_LEVEL = 0; GCC_PRECOMPILE_PREFIX_HEADER = YES; GCC_PREFIX_HEADER = xscreensaver_Prefix.pch; GCC_PREPROCESSOR_DEFINITIONS = ( "HAVE_COCOA=1", "GETTIMEOFDAY_TWO_ARGS=1", "HAVE_UNISTD_H=1", "STANDALONE=1", "HAVE_GLBINDTEXTURE=1", "HAVE_UNAME=1", "HAVE_ICMP=1", "HAVE_GETIFADDRS=1", "HAVE_FORKPTY=1", "HAVE_UTIL_H=1", "HAVE_PTHREAD=1", "HAVE_GETADDRINFO=1", "HAVE_STRUCT_SOCKADDR_SA_LEN=1", "HAVE_XUTF8DRAWSTRING=1", "HAVE_INTTYPES_H=1", "JWXYZ_QUARTZ=1", "HAVE_JWXYZ=1", "$(GCC_PREPROCESSOR_DEFINITIONS)", ); GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "CLASS=XScreenSaver${EXECUTABLE_NAME}View", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); GCC_SYMBOLS_PRIVATE_EXTERN = NO; GCC_WARN_ABOUT_MISSING_NEWLINE = YES; GCC_WARN_ABOUT_MISSING_PROTOTYPES = YES; GCC_WARN_ABOUT_RETURN_TYPE = YES; GCC_WARN_CHECK_SWITCH_STATEMENTS = YES; GCC_WARN_FOUR_CHARACTER_CONSTANTS = YES; GCC_WARN_INITIALIZER_NOT_FULLY_BRACKETED = YES; GCC_WARN_MISSING_PARENTHESES = YES; GCC_WARN_SHADOW = NO; GCC_WARN_TYPECHECK_CALLS_TO_PRINTF = YES; GCC_WARN_UNINITIALIZED_AUTOS = YES; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_LABEL = YES; GCC_WARN_UNUSED_VALUE = YES; GCC_WARN_UNUSED_VARIABLE = YES; HEADER_SEARCH_PATHS = ( "$(HEADER_SEARCH_PATHS)", "$(SRCROOT)/..", "$(SRCROOT)/../utils", "$(SRCROOT)/../jwxyz", "$(SRCROOT)/../hacks", ); INFOPLIST_FILE = XScreenSaver.plist; INSTALL_PATH = "$(HOME)/Library/Screen Savers"; IPHONEOS_DEPLOYMENT_TARGET = 8.0; LIBRARY_SEARCH_PATHS = "$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)"; ONLY_ACTIVE_ARCH = YES; OTHER_CFLAGS = ""; "OTHER_CFLAGS[sdk=macosx*]" = "$(OBJC_GC_CFLAGS)"; "OTHER_LDFLAGS[sdk=macosx*]" = "-headerpad_max_install_names"; PRODUCT_NAME = "$(TARGET_NAME)"; PROVISIONING_PROFILE = ""; SDKROOT = macosx; "SDKROOT[arch=arm*]" = iphoneos; SYMROOT = "$(SRCROOT)/build"; TARGETED_DEVICE_FAMILY = "1,2"; USER_HEADER_SEARCH_PATHS = "$(PROJECT_DIR) $(USER_HEADER_SEARCH_PATHS)"; WARNING_CFLAGS = "-Wimplicit"; WRAPPER_EXTENSION = saver; }; name = Debug; }; C01FCF5008A954540054247B /* Release */ = { isa = XCBuildConfiguration; baseConfigurationReference = AF94E7411A16E93600289B93 /* xscreensaver.xcconfig */; buildSettings = { ARCHS = "$(ARCHS_STANDARD_32_64_BIT)"; BUNDLE_IDENTIFIER = "org.jwz.${PROJECT_NAME:rfc1034identifier}.${PRODUCT_NAME:rfc1034identifier}"; CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES; CLANG_WARN_INT_CONVERSION = YES; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Distribution: Jamie Zawinski (4627ATJELP)"; "CODE_SIGN_IDENTITY[sdk=iphonesimulator*]" = "iPhone Distribution: Jamie Zawinski (4627ATJELP)"; "CODE_SIGN_IDENTITY[sdk=macosx*]" = "Developer ID Application: Jamie Zawinski (4627ATJELP)"; COMBINE_HIDPI_IMAGES = YES; DEVELOPMENT_TEAM = 4627ATJELP; GCC_GENERATE_DEBUGGING_SYMBOLS = NO; GCC_PRECOMPILE_PREFIX_HEADER = YES; GCC_PREFIX_HEADER = xscreensaver_Prefix.pch; GCC_PREPROCESSOR_DEFINITIONS = ( "HAVE_COCOA=1", "GETTIMEOFDAY_TWO_ARGS=1", "HAVE_UNISTD_H=1", "STANDALONE=1", "HAVE_GLBINDTEXTURE=1", "HAVE_UNAME=1", "HAVE_ICMP=1", "HAVE_GETIFADDRS=1", "HAVE_FORKPTY=1", "HAVE_UTIL_H=1", "HAVE_PTHREAD=1", "HAVE_GETADDRINFO=1", "HAVE_STRUCT_SOCKADDR_SA_LEN=1", "HAVE_XUTF8DRAWSTRING=1", "HAVE_INTTYPES_H=1", "JWXYZ_QUARTZ=1", "HAVE_JWXYZ=1", "$(GCC_PREPROCESSOR_DEFINITIONS)", ); GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( "CLASS=XScreenSaver${EXECUTABLE_NAME}View", "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", ); GCC_WARN_ABOUT_MISSING_NEWLINE = YES; GCC_WARN_ABOUT_MISSING_PROTOTYPES = YES; GCC_WARN_ABOUT_RETURN_TYPE = YES; GCC_WARN_CHECK_SWITCH_STATEMENTS = YES; GCC_WARN_FOUR_CHARACTER_CONSTANTS = YES; GCC_WARN_INITIALIZER_NOT_FULLY_BRACKETED = YES; GCC_WARN_MISSING_PARENTHESES = YES; GCC_WARN_SHADOW = NO; GCC_WARN_TYPECHECK_CALLS_TO_PRINTF = YES; GCC_WARN_UNINITIALIZED_AUTOS = YES; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_LABEL = YES; GCC_WARN_UNUSED_VALUE = YES; GCC_WARN_UNUSED_VARIABLE = YES; HEADER_SEARCH_PATHS = ( "$(HEADER_SEARCH_PATHS)", "$(SRCROOT)/..", "$(SRCROOT)/../utils", "$(SRCROOT)/../jwxyz", "$(SRCROOT)/../hacks", ); INFOPLIST_FILE = XScreenSaver.plist; INSTALL_PATH = "$(HOME)/Library/Screen Savers"; IPHONEOS_DEPLOYMENT_TARGET = 8.0; LIBRARY_SEARCH_PATHS = "$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)"; LLVM_LTO = NO; "LLVM_LTO[sdk=macosx*]" = NO; OTHER_CFLAGS = ""; "OTHER_CFLAGS[sdk=macosx*]" = "$(OBJC_GC_CFLAGS)"; "OTHER_LDFLAGS[sdk=macosx*]" = "-headerpad_max_install_names"; PRODUCT_NAME = "$(TARGET_NAME)"; PROVISIONING_PROFILE = ""; SDKROOT = macosx; "SDKROOT[arch=arm*]" = iphoneos; SYMROOT = "$(SRCROOT)/build"; TARGETED_DEVICE_FAMILY = "1,2"; USER_HEADER_SEARCH_PATHS = "$(PROJECT_DIR) $(USER_HEADER_SEARCH_PATHS)"; VALIDATE_PRODUCT = YES; WARNING_CFLAGS = "-Wimplicit"; WRAPPER_EXTENSION = saver; }; name = Release; }; CE3D01641B76F4C100993C75 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Debug; }; CE3D01651B76F4C100993C75 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Release; }; /* End XCBuildConfiguration section */ /* Begin XCConfigurationList section */ AF08399F09930B6B00277BE9 /* Build configuration list for PBXNativeTarget "Atlantis" */ = { isa = XCConfigurationList; buildConfigurations = ( AF0839A009930B6B00277BE9 /* Debug */, AF0839A109930B6B00277BE9 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AF083A45099311D700277BE9 /* Build configuration list for PBXNativeTarget "Atunnel" */ = { isa = XCConfigurationList; buildConfigurations = ( AF083A46099311D700277BE9 /* Debug */, AF083A47099311D700277BE9 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AF0DC7BA0C4C73F600D76972 /* Build configuration list for PBXNativeTarget "m6502" */ = { isa = XCConfigurationList; buildConfigurations = ( AF0DC7BB0C4C73F600D76972 /* Debug */, AF0DC7BC0C4C73F600D76972 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AF0DCA530C4CBB0D00D76972 /* Build configuration list for PBXNativeTarget "Voronoi" */ = { isa = XCConfigurationList; buildConfigurations = ( AF0DCA540C4CBB0D00D76972 /* Debug */, AF0DCA550C4CBB0D00D76972 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AF137D450F075CA4004DE3B2 /* Build configuration list for PBXAggregateTarget "Obsolete" */ = { isa = XCConfigurationList; buildConfigurations = ( AF137D420F075C9C004DE3B2 /* Debug */, AF137D430F075C9C004DE3B2 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AF1A17700D6D6EE3008AF328 /* Build configuration list for PBXNativeTarget "LCDscrub" */ = { isa = XCConfigurationList; buildConfigurations = ( AF1A17710D6D6EE3008AF328 /* Debug */, AF1A17720D6D6EE3008AF328 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AF1ADA0E18500FA200932759 /* Build configuration list for PBXNativeTarget "XScreenSaverUpdater" */ = { isa = XCConfigurationList; buildConfigurations = ( AF1ADA0F18500FA200932759 /* Debug */, AF1ADA1018500FA200932759 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AF1B0FB91D7AB4740011DBE4 /* Build configuration list for PBXNativeTarget "Hexstrut" */ = { isa = XCConfigurationList; buildConfigurations = ( AF1B0FBA1D7AB4740011DBE4 /* Debug */, AF1B0FBB1D7AB4740011DBE4 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AF32D9F10F3AD0B40080F535 /* Build configuration list for PBXNativeTarget "RubikBlocks" */ = { isa = XCConfigurationList; buildConfigurations = ( AF32D9F20F3AD0B40080F535 /* Debug */, AF32D9F30F3AD0B40080F535 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AF3581D21431D47B00E09C51 /* Build configuration list for PBXNativeTarget "CompanionCube" */ = { isa = XCConfigurationList; buildConfigurations = ( AF3581D31431D47B00E09C51 /* Debug */, AF3581D41431D47B00E09C51 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AF358213143330F900E09C51 /* Build configuration list for PBXNativeTarget "TronBit" */ = { isa = XCConfigurationList; buildConfigurations = ( AF358214143330F900E09C51 /* Debug */, AF358215143330F900E09C51 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AF35E89D0E63823600691F2F /* Build configuration list for PBXNativeTarget "Jigsaw" */ = { isa = XCConfigurationList; buildConfigurations = ( AF35E89E0E63823600691F2F /* Debug */, AF35E89F0E63823600691F2F /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AF39382C1D0FBD6A00205406 /* Build configuration list for PBXNativeTarget "Discoball" */ = { isa = XCConfigurationList; buildConfigurations = ( AF39382D1D0FBD6A00205406 /* Debug */, AF39382E1D0FBD6A00205406 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AF39E293198A11F60064A58D /* Build configuration list for PBXNativeTarget "WindupRobot" */ = { isa = XCConfigurationList; buildConfigurations = ( AF39E294198A11F60064A58D /* Debug */, AF39E295198A11F60064A58D /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AF3C71560D624BF50030CC0D /* Build configuration list for PBXNativeTarget "Hypnowheel" */ = { isa = XCConfigurationList; buildConfigurations = ( AF3C71570D624BF50030CC0D /* Debug */, AF3C71580D624BF50030CC0D /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AF46E9E11CBBA2B300240FBC /* Build configuration list for PBXNativeTarget "Unicrud" */ = { isa = XCConfigurationList; buildConfigurations = ( AF46E9E21CBBA2B300240FBC /* Debug */, AF46E9E31CBBA2B300240FBC /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AF476FC3099D154F001F091E /* Build configuration list for PBXNativeTarget "Interference" */ = { isa = XCConfigurationList; buildConfigurations = ( AF476FC4099D154F001F091E /* Debug */, AF476FC5099D154F001F091E /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AF476FE8099D1686001F091E /* Build configuration list for PBXNativeTarget "Truchet" */ = { isa = XCConfigurationList; buildConfigurations = ( AF476FE9099D1686001F091E /* Debug */, AF476FEA099D1686001F091E /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AF477059099D4385001F091E /* Build configuration list for PBXNativeTarget "Deluxe" */ = { isa = XCConfigurationList; buildConfigurations = ( AF47705A099D4385001F091E /* Debug */, AF47705B099D4385001F091E /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AF477176099D4786001F091E /* Build configuration list for PBXNativeTarget "Compass" */ = { isa = XCConfigurationList; buildConfigurations = ( AF477177099D4786001F091E /* Debug */, AF477178099D4786001F091E /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AF47718C099D4803001F091E /* Build configuration list for PBXNativeTarget "Wander" */ = { isa = XCConfigurationList; buildConfigurations = ( AF47718D099D4803001F091E /* Debug */, AF47718E099D4803001F091E /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AF4771B4099D4949001F091E /* Build configuration list for PBXNativeTarget "T3D" */ = { isa = XCConfigurationList; buildConfigurations = ( AF4771B5099D4949001F091E /* Debug */, AF4771B6099D4949001F091E /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AF4771E8099D4D9A001F091E /* Build configuration list for PBXNativeTarget "CCurve" */ = { isa = XCConfigurationList; buildConfigurations = ( AF4771E9099D4D9A001F091E /* Debug */, AF4771EA099D4D9A001F091E /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AF4771FF099D4E63001F091E /* Build configuration list for PBXNativeTarget "NerveRot" */ = { isa = XCConfigurationList; buildConfigurations = ( AF477200099D4E63001F091E /* Debug */, AF477201099D4E63001F091E /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AF477215099D4EE8001F091E /* Build configuration list for PBXNativeTarget "Whirlygig" */ = { isa = XCConfigurationList; buildConfigurations = ( AF477216099D4EE8001F091E /* Debug */, AF477217099D4EE8001F091E /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AF47722B099D4F67001F091E /* Build configuration list for PBXNativeTarget "Anemone" */ = { isa = XCConfigurationList; buildConfigurations = ( AF47722C099D4F67001F091E /* Debug */, AF47722D099D4F67001F091E /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AF477260099D5717001F091E /* Build configuration list for PBXNativeTarget "Halftone" */ = { isa = XCConfigurationList; buildConfigurations = ( AF477261099D5717001F091E /* Debug */, AF477262099D5717001F091E /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AF477278099D57B9001F091E /* Build configuration list for PBXNativeTarget "PopSquares" */ = { isa = XCConfigurationList; buildConfigurations = ( AF477279099D57B9001F091E /* Debug */, AF47727A099D57B9001F091E /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AF477290099D5926001F091E /* Build configuration list for PBXNativeTarget "Piecewise" */ = { isa = XCConfigurationList; buildConfigurations = ( AF477291099D5926001F091E /* Debug */, AF477292099D5926001F091E /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AF47738F099D65A1001F091E /* Build configuration list for PBXNativeTarget "Wormhole" */ = { isa = XCConfigurationList; buildConfigurations = ( AF477390099D65A1001F091E /* Debug */, AF477391099D65A1001F091E /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AF4773A7099D6648001F091E /* Build configuration list for PBXNativeTarget "FuzzyFlakes" */ = { isa = XCConfigurationList; buildConfigurations = ( AF4773A8099D6648001F091E /* Debug */, AF4773A9099D6648001F091E /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AF4773CE099D67B9001F091E /* Build configuration list for PBXNativeTarget "Anemotaxis" */ = { isa = XCConfigurationList; buildConfigurations = ( AF4773CF099D67B9001F091E /* Debug */, AF4773D0099D67B9001F091E /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AF47740F099D69E7001F091E /* Build configuration list for PBXNativeTarget "Intermomentary" */ = { isa = XCConfigurationList; buildConfigurations = ( AF477410099D69E7001F091E /* Debug */, AF477411099D69E7001F091E /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AF477434099D7C70001F091E /* Build configuration list for PBXNativeTarget "IFS" */ = { isa = XCConfigurationList; buildConfigurations = ( AF477435099D7C70001F091E /* Debug */, AF477436099D7C70001F091E /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AF47744F099D7D33001F091E /* Build configuration list for PBXNativeTarget "XMatrix" */ = { isa = XCConfigurationList; buildConfigurations = ( AF477450099D7D33001F091E /* Debug */, AF477451099D7D33001F091E /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AF477490099D89E4001F091E /* Build configuration list for PBXNativeTarget "Flame" */ = { isa = XCConfigurationList; buildConfigurations = ( AF477491099D89E4001F091E /* Debug */, AF477492099D89E4001F091E /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AF4774A6099D8A74001F091E /* Build configuration list for PBXNativeTarget "Kaleidescope" */ = { isa = XCConfigurationList; buildConfigurations = ( AF4774A7099D8A74001F091E /* Debug */, AF4774A8099D8A74001F091E /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AF4774C1099D8B5F001F091E /* Build configuration list for PBXNativeTarget "LMorph" */ = { isa = XCConfigurationList; buildConfigurations = ( AF4774C2099D8B5F001F091E /* Debug */, AF4774C3099D8B5F001F091E /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AF4774DB099D8BFF001F091E /* Build configuration list for PBXNativeTarget "Maze" */ = { isa = XCConfigurationList; buildConfigurations = ( AF4774DC099D8BFF001F091E /* Debug */, AF4774DD099D8BFF001F091E /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AF47756A099D9A1A001F091E /* Build configuration list for PBXNativeTarget "Pedal" */ = { isa = XCConfigurationList; buildConfigurations = ( AF47756B099D9A1A001F091E /* Debug */, AF47756C099D9A1A001F091E /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AF477590099D9C28001F091E /* Build configuration list for PBXNativeTarget "Pyro" */ = { isa = XCConfigurationList; buildConfigurations = ( AF477591099D9C28001F091E /* Debug */, AF477592099D9C28001F091E /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AF4775AC099D9CF7001F091E /* Build configuration list for PBXNativeTarget "Starfish" */ = { isa = XCConfigurationList; buildConfigurations = ( AF4775AD099D9CF7001F091E /* Debug */, AF4775AE099D9CF7001F091E /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AF4775E5099D9F69001F091E /* Build configuration list for PBXNativeTarget "Coral" */ = { isa = XCConfigurationList; buildConfigurations = ( AF4775E6099D9F69001F091E /* Debug */, AF4775E7099D9F69001F091E /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AF4775FF099DA030001F091E /* Build configuration list for PBXNativeTarget "Epicycle" */ = { isa = XCConfigurationList; buildConfigurations = ( AF477600099DA030001F091E /* Debug */, AF477601099DA030001F091E /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AF477620099DA26C001F091E /* Build configuration list for PBXNativeTarget "Kumppa" */ = { isa = XCConfigurationList; buildConfigurations = ( AF477621099DA26C001F091E /* Debug */, AF477622099DA26C001F091E /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AF477651099DA6D0001F091E /* Build configuration list for PBXNativeTarget "Squiral" */ = { isa = XCConfigurationList; buildConfigurations = ( AF477652099DA6D0001F091E /* Debug */, AF477653099DA6D0001F091E /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AF477667099DA78E001F091E /* Build configuration list for PBXNativeTarget "Critical" */ = { isa = XCConfigurationList; buildConfigurations = ( AF477668099DA78E001F091E /* Debug */, AF477669099DA78E001F091E /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AF47767D099DA849001F091E /* Build configuration list for PBXNativeTarget "Petri" */ = { isa = XCConfigurationList; buildConfigurations = ( AF47767E099DA849001F091E /* Debug */, AF47767F099DA849001F091E /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AF47769C099DAA6F001F091E /* Build configuration list for PBXNativeTarget "Blaster" */ = { isa = XCConfigurationList; buildConfigurations = ( AF47769D099DAA6F001F091E /* Debug */, AF47769E099DAA6F001F091E /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AF4776B7099DABDD001F091E /* Build configuration list for PBXNativeTarget "XSpirograph" */ = { isa = XCConfigurationList; buildConfigurations = ( AF4776B8099DABDD001F091E /* Debug */, AF4776B9099DABDD001F091E /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AF4776CD099DAC8A001F091E /* Build configuration list for PBXNativeTarget "XRaySwarm" */ = { isa = XCConfigurationList; buildConfigurations = ( AF4776CE099DAC8A001F091E /* Debug */, AF4776CF099DAC8A001F091E /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AF4776E8099DADDF001F091E /* Build configuration list for PBXNativeTarget "WhirlWindWarp" */ = { isa = XCConfigurationList; buildConfigurations = ( AF4776E9099DADDF001F091E /* Debug */, AF4776EA099DADDF001F091E /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AF4776FE099DAE7A001F091E /* Build configuration list for PBXNativeTarget "Vermiculate" */ = { isa = XCConfigurationList; buildConfigurations = ( AF4776FF099DAE7A001F091E /* Debug */, AF477700099DAE7A001F091E /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AF47771A099DAF9F001F091E /* Build configuration list for PBXNativeTarget "CloudLife" */ = { isa = XCConfigurationList; buildConfigurations = ( AF47771B099DAF9F001F091E /* Debug */, AF47771C099DAF9F001F091E /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AF477730099DB044001F091E /* Build configuration list for PBXNativeTarget "Substrate" */ = { isa = XCConfigurationList; buildConfigurations = ( AF477731099DB044001F091E /* Debug */, AF477732099DB044001F091E /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AF47775F099DB61E001F091E /* Build configuration list for PBXNativeTarget "Interaggregate" */ = { isa = XCConfigurationList; buildConfigurations = ( AF477760099DB61E001F091E /* Debug */, AF477761099DB61E001F091E /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AF477781099DB965001F091E /* Build configuration list for PBXNativeTarget "Celtic" */ = { isa = XCConfigurationList; buildConfigurations = ( AF477782099DB965001F091E /* Debug */, AF477783099DB965001F091E /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AF47779D099DBA90001F091E /* Build configuration list for PBXNativeTarget "FluidBalls" */ = { isa = XCConfigurationList; buildConfigurations = ( AF47779E099DBA90001F091E /* Debug */, AF47779F099DBA90001F091E /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AF4777DE099DC183001F091E /* Build configuration list for PBXNativeTarget "BoxFit" */ = { isa = XCConfigurationList; buildConfigurations = ( AF4777DF099DC183001F091E /* Debug */, AF4777E0099DC183001F091E /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AF4778B8099DDB79001F091E /* Build configuration list for PBXNativeTarget "Penetrate" */ = { isa = XCConfigurationList; buildConfigurations = ( AF4778B9099DDB79001F091E /* Debug */, AF4778BA099DDB79001F091E /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AF4778D4099DDCAE001F091E /* Build configuration list for PBXNativeTarget "XJack" */ = { isa = XCConfigurationList; buildConfigurations = ( AF4778D5099DDCAE001F091E /* Debug */, AF4778D6099DDCAE001F091E /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AF4778F5099DDDC8001F091E /* Build configuration list for PBXNativeTarget "Cynosure" */ = { isa = XCConfigurationList; buildConfigurations = ( AF4778F6099DDDC8001F091E /* Debug */, AF4778F7099DDDC8001F091E /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AF477916099DE379001F091E /* Build configuration list for PBXNativeTarget "Flag" */ = { isa = XCConfigurationList; buildConfigurations = ( AF477917099DE379001F091E /* Debug */, AF477918099DE379001F091E /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AF477937099DE4C7001F091E /* Build configuration list for PBXNativeTarget "Slip" */ = { isa = XCConfigurationList; buildConfigurations = ( AF477938099DE4C7001F091E /* Debug */, AF477939099DE4C7001F091E /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AF4808C2098C3B8B00FB32B8 /* Build configuration list for PBXNativeTarget "jwxyz" */ = { isa = XCConfigurationList; buildConfigurations = ( AF4808C3098C3B8B00FB32B8 /* Debug */, AF4808C4098C3B8B00FB32B8 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AF480ABA098C66E300FB32B8 /* Build configuration list for PBXAggregateTarget "All Savers (XScreenSaver)" */ = { isa = XCConfigurationList; buildConfigurations = ( AF480ABB098C66E300FB32B8 /* Debug */, AF480ABC098C66E300FB32B8 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AF480C55098E301400FB32B8 /* Build configuration list for PBXNativeTarget "Helix" */ = { isa = XCConfigurationList; buildConfigurations = ( AF480C56098E301400FB32B8 /* Debug */, AF480C57098E301400FB32B8 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AF480D64098EED6E00FB32B8 /* Build configuration list for PBXAggregateTarget "All Savers (XLockmore)" */ = { isa = XCConfigurationList; buildConfigurations = ( AF480D65098EED6E00FB32B8 /* Debug */, AF480D66098EED6E00FB32B8 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AF480D67098EED6E00FB32B8 /* Build configuration list for PBXAggregateTarget "All Savers (OpenGL)" */ = { isa = XCConfigurationList; buildConfigurations = ( AF480D68098EED6E00FB32B8 /* Debug */, AF480D69098EED6E00FB32B8 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AF480D6A098EED6E00FB32B8 /* Build configuration list for PBXAggregateTarget "All Savers" */ = { isa = XCConfigurationList; buildConfigurations = ( AF480D6B098EED6E00FB32B8 /* Debug */, AF480D6C098EED6E00FB32B8 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AF480D7E098EEDDE00FB32B8 /* Build configuration list for PBXNativeTarget "Drift" */ = { isa = XCConfigurationList; buildConfigurations = ( AF480D7F098EEDDE00FB32B8 /* Debug */, AF480D80098EEDDE00FB32B8 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AF4810F809909FBA00FB32B8 /* Build configuration list for PBXNativeTarget "DangerBall" */ = { isa = XCConfigurationList; buildConfigurations = ( AF4810F909909FBA00FB32B8 /* Debug */, AF4810FA09909FBA00FB32B8 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AF4812610990CE2700FB32B8 /* Build configuration list for PBXNativeTarget "Gears" */ = { isa = XCConfigurationList; buildConfigurations = ( AF4812620990CE2700FB32B8 /* Debug */, AF4812630990CE2700FB32B8 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AF4812C30990D3D900FB32B8 /* Build configuration list for PBXNativeTarget "Pipes" */ = { isa = XCConfigurationList; buildConfigurations = ( AF4812C40990D3D900FB32B8 /* Debug */, AF4812C50990D3D900FB32B8 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AF48DF000A0C25E000F94CF9 /* Build configuration list for PBXNativeTarget "GLSchool" */ = { isa = XCConfigurationList; buildConfigurations = ( AF48DF010A0C25E000F94CF9 /* Debug */, AF48DF020A0C25E000F94CF9 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AF4A345A102A593600A81B2A /* Build configuration list for PBXNativeTarget "Surfaces" */ = { isa = XCConfigurationList; buildConfigurations = ( AF4A345B102A593600A81B2A /* Debug */, AF4A345C102A593600A81B2A /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AF4FD6F70CE7A486005EE58E /* Build configuration list for PBXNativeTarget "Lockward" */ = { isa = XCConfigurationList; buildConfigurations = ( AF4FD6F80CE7A486005EE58E /* Debug */, AF4FD6F90CE7A486005EE58E /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AF4FF4940D52CA0800666F98 /* Build configuration list for PBXLegacyTarget "m6502.h" */ = { isa = XCConfigurationList; buildConfigurations = ( AF4FF4950D52CA0800666F98 /* Debug */, AF4FF4960D52CA0800666F98 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AF4FF4CB0D52CBDE00666F98 /* Build configuration list for PBXNativeTarget "CubicGrid" */ = { isa = XCConfigurationList; buildConfigurations = ( AF4FF4CC0D52CBDE00666F98 /* Debug */, AF4FF4CD0D52CBDE00666F98 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AF5C9B0A1A0CCE6E00B0147A /* Build configuration list for PBXNativeTarget "Cityflow" */ = { isa = XCConfigurationList; buildConfigurations = ( AF5C9B0B1A0CCE6E00B0147A /* Debug */, AF5C9B0C1A0CCE6E00B0147A /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AF63A8031AB4EDDB00593C75 /* Build configuration list for PBXNativeTarget "RomanBoy" */ = { isa = XCConfigurationList; buildConfigurations = ( AF63A8041AB4EDDB00593C75 /* Debug */, AF63A8051AB4EDDB00593C75 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AF63F44B1C3465BE0033E133 /* Build configuration list for PBXNativeTarget "Apple2-iOS" */ = { isa = XCConfigurationList; buildConfigurations = ( AF63F44C1C3465BE0033E133 /* Debug */, AF63F44D1C3465BE0033E133 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AF63F4711C34682A0033E133 /* Build configuration list for PBXNativeTarget "Phosphor-iOS" */ = { isa = XCConfigurationList; buildConfigurations = ( AF63F4721C34682A0033E133 /* Debug */, AF63F4731C34682A0033E133 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AF63F4971C3469FC0033E133 /* Build configuration list for PBXNativeTarget "TestX11-iOS" */ = { isa = XCConfigurationList; buildConfigurations = ( AF63F4981C3469FC0033E133 /* Debug */, AF63F4991C3469FC0033E133 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AF642402099FF9C2000F4CD4 /* Build configuration list for PBXNativeTarget "Extrusion" */ = { isa = XCConfigurationList; buildConfigurations = ( AF642403099FF9C2000F4CD4 /* Debug */, AF642404099FF9C2000F4CD4 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AF6425D909A18855000F4CD4 /* Build configuration list for PBXNativeTarget "HyperCube" */ = { isa = XCConfigurationList; buildConfigurations = ( AF6425DA09A18855000F4CD4 /* Debug */, AF6425DB09A18855000F4CD4 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AF6425F909A189EC000F4CD4 /* Build configuration list for PBXNativeTarget "Qix" */ = { isa = XCConfigurationList; buildConfigurations = ( AF6425FA09A189EC000F4CD4 /* Debug */, AF6425FB09A189EC000F4CD4 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AF64261C09A18D6C000F4CD4 /* Build configuration list for PBXNativeTarget "HyperBall" */ = { isa = XCConfigurationList; buildConfigurations = ( AF64261D09A18D6C000F4CD4 /* Debug */, AF64261E09A18D6C000F4CD4 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AF64263909A18F54000F4CD4 /* Build configuration list for PBXNativeTarget "Moire2" */ = { isa = XCConfigurationList; buildConfigurations = ( AF64263A09A18F54000F4CD4 /* Debug */, AF64263B09A18F54000F4CD4 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AF64265C09A19229000F4CD4 /* Build configuration list for PBXNativeTarget "Munch" */ = { isa = XCConfigurationList; buildConfigurations = ( AF64265D09A19229000F4CD4 /* Debug */, AF64265E09A19229000F4CD4 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AF64268809A194B0000F4CD4 /* Build configuration list for PBXNativeTarget "Goop" */ = { isa = XCConfigurationList; buildConfigurations = ( AF64268909A194B0000F4CD4 /* Debug */, AF64268A09A194B0000F4CD4 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AF64277E09A1D37A000F4CD4 /* Build configuration list for PBXNativeTarget "SpeedMine" */ = { isa = XCConfigurationList; buildConfigurations = ( AF64277F09A1D37A000F4CD4 /* Debug */, AF64278009A1D37A000F4CD4 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AF6427B509A2DE36000F4CD4 /* Build configuration list for PBXNativeTarget "Bubbles" */ = { isa = XCConfigurationList; buildConfigurations = ( AF6427B609A2DE36000F4CD4 /* Debug */, AF6427B709A2DE36000F4CD4 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AF68A48F19196CF800D41CD1 /* Build configuration list for PBXNativeTarget "Tessellimage" */ = { isa = XCConfigurationList; buildConfigurations = ( AF68A49019196CF800D41CD1 /* Debug */, AF68A49119196CF800D41CD1 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AF73FF331A09877F00E485E9 /* Build configuration list for PBXNativeTarget "BinaryRing" */ = { isa = XCConfigurationList; buildConfigurations = ( AF73FF341A09877F00E485E9 /* Debug */, AF73FF351A09877F00E485E9 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AF75110F1782B5B900380EA1 /* Build configuration list for PBXNativeTarget "Kaleidocycle" */ = { isa = XCConfigurationList; buildConfigurations = ( AF7511101782B5B900380EA1 /* Debug */, AF7511111782B5B900380EA1 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AF7776F309B63ABF00EA3033 /* Build configuration list for PBXNativeTarget "Phosphor" */ = { isa = XCConfigurationList; buildConfigurations = ( AF7776F409B63ABF00EA3033 /* Debug */, AF7776F509B63ABF00EA3033 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AF77772709B6416100EA3033 /* Build configuration list for PBXNativeTarget "Pacman" */ = { isa = XCConfigurationList; buildConfigurations = ( AF77772809B6416100EA3033 /* Debug */, AF77772909B6416100EA3033 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AF77774E09B6446500EA3033 /* Build configuration list for PBXNativeTarget "FlipScreen3D" */ = { isa = XCConfigurationList; buildConfigurations = ( AF77774F09B6446500EA3033 /* Debug */, AF77775009B6446500EA3033 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AF77778509B6497800EA3033 /* Build configuration list for PBXNativeTarget "Gleidescope" */ = { isa = XCConfigurationList; buildConfigurations = ( AF77778609B6497800EA3033 /* Debug */, AF77778709B6497800EA3033 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AF77779F09B64A5200EA3033 /* Build configuration list for PBXNativeTarget "MirrorBlob" */ = { isa = XCConfigurationList; buildConfigurations = ( AF7777A009B64A5200EA3033 /* Debug */, AF7777A109B64A5200EA3033 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AF7777B909B64B2600EA3033 /* Build configuration list for PBXNativeTarget "StonerView" */ = { isa = XCConfigurationList; buildConfigurations = ( AF7777BA09B64B2600EA3033 /* Debug */, AF7777BB09B64B2600EA3033 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AF7777E109B64C6B00EA3033 /* Build configuration list for PBXNativeTarget "GLSlideshow" */ = { isa = XCConfigurationList; buildConfigurations = ( AF7777E209B64C6B00EA3033 /* Debug */, AF7777E309B64C6B00EA3033 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AF7777FB09B64E3100EA3033 /* Build configuration list for PBXNativeTarget "FlipText" */ = { isa = XCConfigurationList; buildConfigurations = ( AF7777FC09B64E3100EA3033 /* Debug */, AF7777FD09B64E3100EA3033 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AF77782209B6504400EA3033 /* Build configuration list for PBXNativeTarget "StarWars" */ = { isa = XCConfigurationList; buildConfigurations = ( AF77782309B6504400EA3033 /* Debug */, AF77782409B6504400EA3033 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AF77785509B6528100EA3033 /* Build configuration list for PBXNativeTarget "Carousel" */ = { isa = XCConfigurationList; buildConfigurations = ( AF77785609B6528100EA3033 /* Debug */, AF77785709B6528100EA3033 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AF77787109B6536000EA3033 /* Build configuration list for PBXNativeTarget "DNAlogo" */ = { isa = XCConfigurationList; buildConfigurations = ( AF77787209B6536000EA3033 /* Debug */, AF77787309B6536000EA3033 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AF77788C09B6563500EA3033 /* Build configuration list for PBXNativeTarget "FontGlide" */ = { isa = XCConfigurationList; buildConfigurations = ( AF77788D09B6563500EA3033 /* Debug */, AF77788E09B6563500EA3033 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AF7778B209B659C800EA3033 /* Build configuration list for PBXNativeTarget "BlitSpin" */ = { isa = XCConfigurationList; buildConfigurations = ( AF7778B309B659C800EA3033 /* Debug */, AF7778B409B659C800EA3033 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AF78D186142DD8F3002AAF77 /* Build configuration list for PBXNativeTarget "Hilbert" */ = { isa = XCConfigurationList; buildConfigurations = ( AF78D187142DD8F3002AAF77 /* Debug */, AF78D188142DD8F3002AAF77 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AF794F71099748450059A8B0 /* Build configuration list for PBXNativeTarget "Demon" */ = { isa = XCConfigurationList; buildConfigurations = ( AF794F72099748450059A8B0 /* Debug */, AF794F73099748450059A8B0 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AF794F9B09974A320059A8B0 /* Build configuration list for PBXNativeTarget "Fiberlamp" */ = { isa = XCConfigurationList; buildConfigurations = ( AF794F9C09974A320059A8B0 /* Debug */, AF794F9D09974A320059A8B0 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AF794FDA09974FA60059A8B0 /* Build configuration list for PBXNativeTarget "Loop" */ = { isa = XCConfigurationList; buildConfigurations = ( AF794FDB09974FA60059A8B0 /* Debug */, AF794FDC09974FA60059A8B0 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AF7ACFD119FF0A9200BD752B /* Build configuration list for PBXNativeTarget "GeodesicGears" */ = { isa = XCConfigurationList; buildConfigurations = ( AF7ACFD219FF0A9200BD752B /* Debug */, AF7ACFD319FF0A9200BD752B /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AF91898C158FC00A002B5D1E /* Build configuration list for PBXNativeTarget "XScreenSaver-iOS" */ = { isa = XCConfigurationList; buildConfigurations = ( AF91898D158FC00A002B5D1E /* Debug */, AF91898E158FC00A002B5D1E /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AF97573A099C317000B05160 /* Build configuration list for PBXNativeTarget "IMSMap" */ = { isa = XCConfigurationList; buildConfigurations = ( AF97573B099C317000B05160 /* Debug */, AF97573C099C317000B05160 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AF975782099C374A00B05160 /* Build configuration list for PBXNativeTarget "Moire" */ = { isa = XCConfigurationList; buildConfigurations = ( AF975783099C374A00B05160 /* Debug */, AF975784099C374A00B05160 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AF9757CF099C3E6300B05160 /* Build configuration list for PBXNativeTarget "RDbomb" */ = { isa = XCConfigurationList; buildConfigurations = ( AF9757D0099C3E6300B05160 /* Debug */, AF9757D1099C3E6300B05160 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AF975815099C41D500B05160 /* Build configuration list for PBXNativeTarget "XFlame" */ = { isa = XCConfigurationList; buildConfigurations = ( AF975816099C41D500B05160 /* Debug */, AF975817099C41D500B05160 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AF975872099C475900B05160 /* Build configuration list for PBXNativeTarget "ShadeBobs" */ = { isa = XCConfigurationList; buildConfigurations = ( AF975873099C475900B05160 /* Debug */, AF975874099C475900B05160 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AF975A43099C681F00B05160 /* Build configuration list for PBXNativeTarget "MetaBalls" */ = { isa = XCConfigurationList; buildConfigurations = ( AF975A44099C681F00B05160 /* Debug */, AF975A45099C681F00B05160 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AF975A79099C6AB200B05160 /* Build configuration list for PBXNativeTarget "Eruption" */ = { isa = XCConfigurationList; buildConfigurations = ( AF975A7A099C6AB200B05160 /* Debug */, AF975A7B099C6AB200B05160 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AF975A93099C6BC300B05160 /* Build configuration list for PBXNativeTarget "Barcode" */ = { isa = XCConfigurationList; buildConfigurations = ( AF975A94099C6BC300B05160 /* Debug */, AF975A95099C6BC300B05160 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AF975AE4099C6EB100B05160 /* Build configuration list for PBXNativeTarget "Fireworkx" */ = { isa = XCConfigurationList; buildConfigurations = ( AF975AE5099C6EB100B05160 /* Debug */, AF975AE6099C6EB100B05160 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AF975B09099C6FE400B05160 /* Build configuration list for PBXNativeTarget "MemScroller" */ = { isa = XCConfigurationList; buildConfigurations = ( AF975B0A099C6FE400B05160 /* Debug */, AF975B0B099C6FE400B05160 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AF975C1F099C8C1500B05160 /* Build configuration list for PBXNativeTarget "Halo" */ = { isa = XCConfigurationList; buildConfigurations = ( AF975C20099C8C1500B05160 /* Debug */, AF975C21099C8C1500B05160 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AF975C4B099C8DCF00B05160 /* Build configuration list for PBXNativeTarget "Greynetic" */ = { isa = XCConfigurationList; buildConfigurations = ( AF975C4C099C8DCF00B05160 /* Debug */, AF975C4D099C8DCF00B05160 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AF975C6B099C8F3F00B05160 /* Build configuration list for PBXNativeTarget "NoseGuy" */ = { isa = XCConfigurationList; buildConfigurations = ( AF975C6C099C8F3F00B05160 /* Debug */, AF975C6D099C8F3F00B05160 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AF975D60099CA0F000B05160 /* Build configuration list for PBXNativeTarget "Rocks" */ = { isa = XCConfigurationList; buildConfigurations = ( AF975D61099CA0F000B05160 /* Debug */, AF975D62099CA0F000B05160 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AF976FBE0989CAA4001F8B92 /* Build configuration list for PBXNativeTarget "Deco" */ = { isa = XCConfigurationList; buildConfigurations = ( AF976FBF0989CAA4001F8B92 /* Debug */, AF976FC00989CAA4001F8B92 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AF97703D0989D1E6001F8B92 /* Build configuration list for PBXNativeTarget "Rorschach" */ = { isa = XCConfigurationList; buildConfigurations = ( AF97703E0989D1E6001F8B92 /* Debug */, AF97703F0989D1E6001F8B92 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AF97707A0989D2F6001F8B92 /* Build configuration list for PBXNativeTarget "Attraction" */ = { isa = XCConfigurationList; buildConfigurations = ( AF97707B0989D2F6001F8B92 /* Debug */, AF97707C0989D2F6001F8B92 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AF9771DA0989DC4B001F8B92 /* Build configuration list for PBXNativeTarget "SaverTester" */ = { isa = XCConfigurationList; buildConfigurations = ( AF9771DB0989DC4B001F8B92 /* Debug */, AF9771DC0989DC4B001F8B92 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AF998EEB0A083DB30051049D /* Build configuration list for PBXNativeTarget "TopBlock" */ = { isa = XCConfigurationList; buildConfigurations = ( AF998EEC0A083DB30051049D /* Debug */, AF998EED0A083DB30051049D /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AF9D467309B5109C006E59CF /* Build configuration list for PBXNativeTarget "DecayScreen" */ = { isa = XCConfigurationList; buildConfigurations = ( AF9D467409B5109C006E59CF /* Debug */, AF9D467509B5109C006E59CF /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AF9D475109B5300A006E59CF /* Build configuration list for PBXNativeTarget "SlideScreen" */ = { isa = XCConfigurationList; buildConfigurations = ( AF9D475209B5300A006E59CF /* Debug */, AF9D475309B5300A006E59CF /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AF9D476C09B53166006E59CF /* Build configuration list for PBXNativeTarget "Zoom" */ = { isa = XCConfigurationList; buildConfigurations = ( AF9D476D09B53166006E59CF /* Debug */, AF9D476E09B53166006E59CF /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AF9D48E809B53322006E59CF /* Build configuration list for PBXNativeTarget "Bumps" */ = { isa = XCConfigurationList; buildConfigurations = ( AF9D48E909B53322006E59CF /* Debug */, AF9D48EA09B53322006E59CF /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AF9D490109B535DA006E59CF /* Build configuration list for PBXNativeTarget "Distort" */ = { isa = XCConfigurationList; buildConfigurations = ( AF9D490209B535DA006E59CF /* Debug */, AF9D490309B535DA006E59CF /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AF9D493809B53CBA006E59CF /* Build configuration list for PBXNativeTarget "Ripples" */ = { isa = XCConfigurationList; buildConfigurations = ( AF9D493909B53CBA006E59CF /* Debug */, AF9D493A09B53CBA006E59CF /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AF9D496109B53FC9006E59CF /* Build configuration list for PBXNativeTarget "RotZoomer" */ = { isa = XCConfigurationList; buildConfigurations = ( AF9D496209B53FC9006E59CF /* Debug */, AF9D496309B53FC9006E59CF /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AF9D497909B5411D006E59CF /* Build configuration list for PBXNativeTarget "Twang" */ = { isa = XCConfigurationList; buildConfigurations = ( AF9D497A09B5411D006E59CF /* Debug */, AF9D497B09B5411D006E59CF /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AF9D49A409B544C2006E59CF /* Build configuration list for PBXNativeTarget "Spotlight" */ = { isa = XCConfigurationList; buildConfigurations = ( AF9D49A509B544C2006E59CF /* Debug */, AF9D49A609B544C2006E59CF /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AF9D4C7609B59F27006E59CF /* Build configuration list for PBXNativeTarget "XLyap" */ = { isa = XCConfigurationList; buildConfigurations = ( AF9D4C7709B59F27006E59CF /* Debug */, AF9D4C7809B59F27006E59CF /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AF9D4CF409B5AA8E006E59CF /* Build configuration list for PBXNativeTarget "Pong" */ = { isa = XCConfigurationList; buildConfigurations = ( AF9D4CF509B5AA8E006E59CF /* Debug */, AF9D4CF609B5AA8E006E59CF /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AF9D4D8C09B5B2DC006E59CF /* Build configuration list for PBXNativeTarget "XAnalogTV" */ = { isa = XCConfigurationList; buildConfigurations = ( AF9D4D8D09B5B2DC006E59CF /* Debug */, AF9D4D8E09B5B2DC006E59CF /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AF9D4DBD09B5B71E006E59CF /* Build configuration list for PBXNativeTarget "BSOD" */ = { isa = XCConfigurationList; buildConfigurations = ( AF9D4DBE09B5B71E006E59CF /* Debug */, AF9D4DBF09B5B71E006E59CF /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AF9D4DFB09B5BB19006E59CF /* Build configuration list for PBXNativeTarget "Apple2" */ = { isa = XCConfigurationList; buildConfigurations = ( AF9D4DFC09B5BB19006E59CF /* Debug */, AF9D4DFD09B5BB19006E59CF /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AF9E7EC5190F4C1C00A8B01F /* Build configuration list for PBXNativeTarget "enable_gc" */ = { isa = XCConfigurationList; buildConfigurations = ( AF9E7EC6190F4C1C00A8B01F /* Debug */, AF9E7EC7190F4C1C00A8B01F /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AFA2119E1CD59DAF00C0D2A1 /* Build configuration list for PBXNativeTarget "RaverHoop" */ = { isa = XCConfigurationList; buildConfigurations = ( AFA2119F1CD59DAF00C0D2A1 /* Debug */, AFA211A01CD59DAF00C0D2A1 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AFA3393D0B058505002B0E7D /* Build configuration list for PBXNativeTarget "WebCollage" */ = { isa = XCConfigurationList; buildConfigurations = ( AFA3393E0B058505002B0E7D /* Debug */, AFA3393F0B058505002B0E7D /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AFA33BCB0B058754002B0E7D /* Build configuration list for PBXNativeTarget "webcollage-helper" */ = { isa = XCConfigurationList; buildConfigurations = ( AFA33BCC0B058754002B0E7D /* Debug */, AFA33BCD0B058754002B0E7D /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AFA33C070B058E67002B0E7D /* Build configuration list for PBXAggregateTarget "webcollage-perl" */ = { isa = XCConfigurationList; buildConfigurations = ( AFA33C080B058E67002B0E7D /* Debug */, AFA33C090B058E67002B0E7D /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AFA55957099330B000F3E977 /* Build configuration list for PBXNativeTarget "Cage" */ = { isa = XCConfigurationList; buildConfigurations = ( AFA55958099330B000F3E977 /* Debug */, AFA55959099330B000F3E977 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AFA5597C0993317900F3E977 /* Build configuration list for PBXNativeTarget "Moebius" */ = { isa = XCConfigurationList; buildConfigurations = ( AFA5597D0993317900F3E977 /* Debug */, AFA5597E0993317900F3E977 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AFA559A10993322100F3E977 /* Build configuration list for PBXNativeTarget "Superquadrics" */ = { isa = XCConfigurationList; buildConfigurations = ( AFA559A20993322100F3E977 /* Debug */, AFA559A30993322100F3E977 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AFA559C40993328000F3E977 /* Build configuration list for PBXNativeTarget "Morph3D" */ = { isa = XCConfigurationList; buildConfigurations = ( AFA559C50993328000F3E977 /* Debug */, AFA559C60993328000F3E977 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AFA559DE0993330600F3E977 /* Build configuration list for PBXNativeTarget "Rubik" */ = { isa = XCConfigurationList; buildConfigurations = ( AFA559DF0993330600F3E977 /* Debug */, AFA559E00993330600F3E977 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AFA55A120993340300F3E977 /* Build configuration list for PBXNativeTarget "Stairs" */ = { isa = XCConfigurationList; buildConfigurations = ( AFA55A130993340300F3E977 /* Debug */, AFA55A140993340300F3E977 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AFA55A2F099334A000F3E977 /* Build configuration list for PBXNativeTarget "Sproingies" */ = { isa = XCConfigurationList; buildConfigurations = ( AFA55A30099334A000F3E977 /* Debug */, AFA55A31099334A000F3E977 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AFA55A880993364300F3E977 /* Build configuration list for PBXNativeTarget "Lament" */ = { isa = XCConfigurationList; buildConfigurations = ( AFA55A890993364300F3E977 /* Debug */, AFA55A8A0993364300F3E977 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AFA55ADE09933CEF00F3E977 /* Build configuration list for PBXNativeTarget "Bubble3D" */ = { isa = XCConfigurationList; buildConfigurations = ( AFA55ADF09933CEF00F3E977 /* Debug */, AFA55AE009933CEF00F3E977 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AFA55B1B09933E0500F3E977 /* Build configuration list for PBXNativeTarget "GLPlanet" */ = { isa = XCConfigurationList; buildConfigurations = ( AFA55B1C09933E0500F3E977 /* Debug */, AFA55B1D09933E0500F3E977 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AFA55B3409933E8D00F3E977 /* Build configuration list for PBXNativeTarget "Pulsar" */ = { isa = XCConfigurationList; buildConfigurations = ( AFA55B3509933E8D00F3E977 /* Debug */, AFA55B3609933E8D00F3E977 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AFA55B8809933F7200F3E977 /* Build configuration list for PBXNativeTarget "Sierpinski3D" */ = { isa = XCConfigurationList; buildConfigurations = ( AFA55B8909933F7200F3E977 /* Debug */, AFA55B8A09933F7200F3E977 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AFA55BA009933FDA00F3E977 /* Build configuration list for PBXNativeTarget "GFlux" */ = { isa = XCConfigurationList; buildConfigurations = ( AFA55BA109933FDA00F3E977 /* Debug */, AFA55BA209933FDA00F3E977 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AFA55BBA099340CE00F3E977 /* Build configuration list for PBXNativeTarget "Circuit" */ = { isa = XCConfigurationList; buildConfigurations = ( AFA55BBB099340CE00F3E977 /* Debug */, AFA55BBC099340CE00F3E977 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AFA55BF30993429100F3E977 /* Build configuration list for PBXNativeTarget "Menger" */ = { isa = XCConfigurationList; buildConfigurations = ( AFA55BF40993429100F3E977 /* Debug */, AFA55BF50993429100F3E977 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AFA55C1D0993431300F3E977 /* Build configuration list for PBXNativeTarget "Engine" */ = { isa = XCConfigurationList; buildConfigurations = ( AFA55C1E0993431300F3E977 /* Debug */, AFA55C1F0993431300F3E977 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AFA55C86099349A600F3E977 /* Build configuration list for PBXNativeTarget "GLSnake" */ = { isa = XCConfigurationList; buildConfigurations = ( AFA55C87099349A600F3E977 /* Debug */, AFA55C88099349A600F3E977 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AFA55CB809934BB200F3E977 /* Build configuration list for PBXNativeTarget "Boxed" */ = { isa = XCConfigurationList; buildConfigurations = ( AFA55CB909934BB200F3E977 /* Debug */, AFA55CBA09934BB200F3E977 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AFA55CDB09934CE400F3E977 /* Build configuration list for PBXNativeTarget "GLForestFire" */ = { isa = XCConfigurationList; buildConfigurations = ( AFA55CDC09934CE400F3E977 /* Debug */, AFA55CDD09934CE400F3E977 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AFA55D4B0993565300F3E977 /* Build configuration list for PBXNativeTarget "SBalls" */ = { isa = XCConfigurationList; buildConfigurations = ( AFA55D4C0993565300F3E977 /* Debug */, AFA55D4D0993565300F3E977 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AFA55D710993584B00F3E977 /* Build configuration list for PBXNativeTarget "Cubenetic" */ = { isa = XCConfigurationList; buildConfigurations = ( AFA55D720993584B00F3E977 /* Debug */, AFA55D730993584B00F3E977 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AFA55D8E099358C400F3E977 /* Build configuration list for PBXNativeTarget "Spheremonics" */ = { isa = XCConfigurationList; buildConfigurations = ( AFA55D8F099358C400F3E977 /* Debug */, AFA55D90099358C400F3E977 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AFA55DD709935D7000F3E977 /* Build configuration list for PBXNativeTarget "Lavalite" */ = { isa = XCConfigurationList; buildConfigurations = ( AFA55DD809935D7000F3E977 /* Debug */, AFA55DD909935D7000F3E977 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AFA55E0009935E4900F3E977 /* Build configuration list for PBXNativeTarget "Queens" */ = { isa = XCConfigurationList; buildConfigurations = ( AFA55E0109935E4900F3E977 /* Debug */, AFA55E0209935E4900F3E977 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AFA55E1C09935EDC00F3E977 /* Build configuration list for PBXNativeTarget "Endgame" */ = { isa = XCConfigurationList; buildConfigurations = ( AFA55E1D09935EDC00F3E977 /* Debug */, AFA55E1E09935EDC00F3E977 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AFA55E3F09935F8E00F3E977 /* Build configuration list for PBXNativeTarget "GLBlur" */ = { isa = XCConfigurationList; buildConfigurations = ( AFA55E4009935F8E00F3E977 /* Debug */, AFA55E4109935F8E00F3E977 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AFA55E5D09935FF900F3E977 /* Build configuration list for PBXNativeTarget "FlyingToasters" */ = { isa = XCConfigurationList; buildConfigurations = ( AFA55E5E09935FF900F3E977 /* Debug */, AFA55E5F09935FF900F3E977 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AFA55EE0099360E300F3E977 /* Build configuration list for PBXNativeTarget "BouncingCow" */ = { isa = XCConfigurationList; buildConfigurations = ( AFA55EE1099360E300F3E977 /* Debug */, AFA55EE2099360E300F3E977 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AFA55F1B099361B700F3E977 /* Build configuration list for PBXNativeTarget "JigglyPuff" */ = { isa = XCConfigurationList; buildConfigurations = ( AFA55F1C099361B700F3E977 /* Debug */, AFA55F1D099361B700F3E977 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AFA55F390993622F00F3E977 /* Build configuration list for PBXNativeTarget "Klein" */ = { isa = XCConfigurationList; buildConfigurations = ( AFA55F3A0993622F00F3E977 /* Debug */, AFA55F3B0993622F00F3E977 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AFA55F510993629000F3E977 /* Build configuration list for PBXNativeTarget "Hypertorus" */ = { isa = XCConfigurationList; buildConfigurations = ( AFA55F520993629000F3E977 /* Debug */, AFA55F530993629000F3E977 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AFA55F810993643600F3E977 /* Build configuration list for PBXNativeTarget "GLMatrix" */ = { isa = XCConfigurationList; buildConfigurations = ( AFA55F820993643600F3E977 /* Debug */, AFA55F830993643600F3E977 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AFA55FE209936BFA00F3E977 /* Build configuration list for PBXNativeTarget "CubeStorm" */ = { isa = XCConfigurationList; buildConfigurations = ( AFA55FE309936BFA00F3E977 /* Debug */, AFA55FE409936BFA00F3E977 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AFA5600809936C6D00F3E977 /* Build configuration list for PBXNativeTarget "GLKnots" */ = { isa = XCConfigurationList; buildConfigurations = ( AFA5600909936C6D00F3E977 /* Debug */, AFA5600A09936C6D00F3E977 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AFA5602309936CC800F3E977 /* Build configuration list for PBXNativeTarget "BlockTube" */ = { isa = XCConfigurationList; buildConfigurations = ( AFA5602409936CC800F3E977 /* Debug */, AFA5602509936CC800F3E977 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AFA5604109936D5100F3E977 /* Build configuration list for PBXNativeTarget "FlipFlop" */ = { isa = XCConfigurationList; buildConfigurations = ( AFA5604209936D5100F3E977 /* Debug */, AFA5604309936D5100F3E977 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AFA5605909936E2100F3E977 /* Build configuration list for PBXNativeTarget "AntInspect" */ = { isa = XCConfigurationList; buildConfigurations = ( AFA5605A09936E2100F3E977 /* Debug */, AFA5605B09936E2100F3E977 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AFA5607109936F3800F3E977 /* Build configuration list for PBXNativeTarget "AntSpotlight" */ = { isa = XCConfigurationList; buildConfigurations = ( AFA5607209936F3800F3E977 /* Debug */, AFA5607309936F3800F3E977 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AFA560BD0993718D00F3E977 /* Build configuration list for PBXNativeTarget "Polytopes" */ = { isa = XCConfigurationList; buildConfigurations = ( AFA560BE0993718D00F3E977 /* Debug */, AFA560BF0993718D00F3E977 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AFA5610C0993781600F3E977 /* Build configuration list for PBXNativeTarget "Molecule" */ = { isa = XCConfigurationList; buildConfigurations = ( AFA5610D0993781600F3E977 /* Debug */, AFA5610E0993781600F3E977 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AFA5611A099378EA00F3E977 /* Build configuration list for PBXLegacyTarget "molecules.h" */ = { isa = XCConfigurationList; buildConfigurations = ( AFA5611B099378EA00F3E977 /* Debug */, AFA5611C099378EA00F3E977 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AFA5616709937C0D00F3E977 /* Build configuration list for PBXNativeTarget "BlinkBox" */ = { isa = XCConfigurationList; buildConfigurations = ( AFA5616809937C0D00F3E977 /* Debug */, AFA5616909937C0D00F3E977 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AFA5618A09937CF100F3E977 /* Build configuration list for PBXNativeTarget "Noof" */ = { isa = XCConfigurationList; buildConfigurations = ( AFA5618B09937CF100F3E977 /* Debug */, AFA5618C09937CF100F3E977 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AFA561AC09937D7E00F3E977 /* Build configuration list for PBXNativeTarget "Polyhedra" */ = { isa = XCConfigurationList; buildConfigurations = ( AFA561AD09937D7E00F3E977 /* Debug */, AFA561AE09937D7E00F3E977 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AFA562160993849F00F3E977 /* Build configuration list for PBXNativeTarget "Providence" */ = { isa = XCConfigurationList; buildConfigurations = ( AFA562170993849F00F3E977 /* Debug */, AFA562180993849F00F3E977 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AFA5622E0993852500F3E977 /* Build configuration list for PBXNativeTarget "Pinion" */ = { isa = XCConfigurationList; buildConfigurations = ( AFA5622F0993852500F3E977 /* Debug */, AFA562300993852500F3E977 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AFA562CE099392C600F3E977 /* Build configuration list for PBXNativeTarget "Boing" */ = { isa = XCConfigurationList; buildConfigurations = ( AFA562CF099392C600F3E977 /* Debug */, AFA562D0099392C600F3E977 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AFA562E9099393C900F3E977 /* Build configuration list for PBXNativeTarget "AntMaze" */ = { isa = XCConfigurationList; buildConfigurations = ( AFA562EA099393C900F3E977 /* Debug */, AFA562EB099393C900F3E977 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AFA563010993943B00F3E977 /* Build configuration list for PBXNativeTarget "Tangram" */ = { isa = XCConfigurationList; buildConfigurations = ( AFA563020993943B00F3E977 /* Debug */, AFA563030993943B00F3E977 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AFA563230993951000F3E977 /* Build configuration list for PBXNativeTarget "Crackberg" */ = { isa = XCConfigurationList; buildConfigurations = ( AFA563240993951000F3E977 /* Debug */, AFA563250993951000F3E977 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AFA56340099395ED00F3E977 /* Build configuration list for PBXNativeTarget "GLHanoi" */ = { isa = XCConfigurationList; buildConfigurations = ( AFA56341099395ED00F3E977 /* Debug */, AFA56342099395ED00F3E977 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AFA56360099396C000F3E977 /* Build configuration list for PBXNativeTarget "Cube21" */ = { isa = XCConfigurationList; buildConfigurations = ( AFA56361099396C000F3E977 /* Debug */, AFA56362099396C000F3E977 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AFA56388099397B300F3E977 /* Build configuration list for PBXNativeTarget "TimeTunnel" */ = { isa = XCConfigurationList; buildConfigurations = ( AFA56389099397B300F3E977 /* Debug */, AFA5638A099397B300F3E977 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AFA563B3099398BB00F3E977 /* Build configuration list for PBXNativeTarget "Juggler3D" */ = { isa = XCConfigurationList; buildConfigurations = ( AFA563B4099398BB00F3E977 /* Debug */, AFA563B5099398BB00F3E977 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AFACE8851CC83458008B24CD /* Build configuration list for PBXNativeTarget "EnergyStream" */ = { isa = XCConfigurationList; buildConfigurations = ( AFACE8861CC83458008B24CD /* Debug */, AFACE8871CC83458008B24CD /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AFB591B7178B812C00EA4005 /* Build configuration list for PBXNativeTarget "Hexadrop" */ = { isa = XCConfigurationList; buildConfigurations = ( AFB591B8178B812C00EA4005 /* Debug */, AFB591B9178B812C00EA4005 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AFBFE75B178642DC00432B21 /* Build configuration list for PBXNativeTarget "Apple2-OSX" */ = { isa = XCConfigurationList; buildConfigurations = ( AFBFE75C178642DC00432B21 /* Debug */, AFBFE75D178642DC00432B21 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AFBFE77B178647FE00432B21 /* Build configuration list for PBXNativeTarget "Phosphor-OSX" */ = { isa = XCConfigurationList; buildConfigurations = ( AFBFE77C178647FE00432B21 /* Debug */, AFBFE77D178647FE00432B21 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AFC0E8BD1CDC601A008CAFAC /* Build configuration list for PBXNativeTarget "Hydrostat" */ = { isa = XCConfigurationList; buildConfigurations = ( AFC0E8BE1CDC601A008CAFAC /* Debug */, AFC0E8BF1CDC601A008CAFAC /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AFCF834D1AF5B515008BB7E1 /* Build configuration list for PBXNativeTarget "SplitFlap" */ = { isa = XCConfigurationList; buildConfigurations = ( AFCF834E1AF5B515008BB7E1 /* Debug */, AFCF834F1AF5B515008BB7E1 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AFD51B2D0F063B4A00471C02 /* Build configuration list for PBXNativeTarget "Photopile" */ = { isa = XCConfigurationList; buildConfigurations = ( AFD51B2E0F063B4A00471C02 /* Debug */, AFD51B2F0F063B4A00471C02 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AFD56E010996A03800BA26F7 /* Build configuration list for PBXNativeTarget "GLText" */ = { isa = XCConfigurationList; buildConfigurations = ( AFD56E020996A03800BA26F7 /* Debug */, AFD56E030996A03800BA26F7 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AFD56EBB0996A72600BA26F7 /* Build configuration list for PBXNativeTarget "Braid" */ = { isa = XCConfigurationList; buildConfigurations = ( AFD56EBC0996A72600BA26F7 /* Debug */, AFD56EBD0996A72600BA26F7 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AFD56EE70996A95700BA26F7 /* Build configuration list for PBXNativeTarget "Forest" */ = { isa = XCConfigurationList; buildConfigurations = ( AFD56EE80996A95700BA26F7 /* Debug */, AFD56EE90996A95700BA26F7 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AFD56F180996AAFA00BA26F7 /* Build configuration list for PBXNativeTarget "Vines" */ = { isa = XCConfigurationList; buildConfigurations = ( AFD56F190996AAFA00BA26F7 /* Debug */, AFD56F1A0996AAFA00BA26F7 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AFD56F300996AB8A00BA26F7 /* Build configuration list for PBXNativeTarget "Galaxy" */ = { isa = XCConfigurationList; buildConfigurations = ( AFD56F310996AB8A00BA26F7 /* Debug */, AFD56F320996AB8A00BA26F7 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AFD56F5C0996AEEE00BA26F7 /* Build configuration list for PBXNativeTarget "Grav" */ = { isa = XCConfigurationList; buildConfigurations = ( AFD56F5D0996AEEE00BA26F7 /* Debug */, AFD56F5E0996AEEE00BA26F7 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AFD56F780996B01600BA26F7 /* Build configuration list for PBXNativeTarget "Hopalong" */ = { isa = XCConfigurationList; buildConfigurations = ( AFD56F790996B01600BA26F7 /* Debug */, AFD56F7A0996B01600BA26F7 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AFD56F990996B09400BA26F7 /* Build configuration list for PBXNativeTarget "Laser" */ = { isa = XCConfigurationList; buildConfigurations = ( AFD56F9A0996B09400BA26F7 /* Debug */, AFD56F9B0996B09400BA26F7 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AFD56FB00996B10F00BA26F7 /* Build configuration list for PBXNativeTarget "Lightning" */ = { isa = XCConfigurationList; buildConfigurations = ( AFD56FB10996B10F00BA26F7 /* Debug */, AFD56FB20996B10F00BA26F7 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AFD56FC60996B18F00BA26F7 /* Build configuration list for PBXNativeTarget "Lisa" */ = { isa = XCConfigurationList; buildConfigurations = ( AFD56FC70996B18F00BA26F7 /* Debug */, AFD56FC80996B18F00BA26F7 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AFD56FDC0996B20900BA26F7 /* Build configuration list for PBXNativeTarget "Lissie" */ = { isa = XCConfigurationList; buildConfigurations = ( AFD56FDD0996B20900BA26F7 /* Debug */, AFD56FDE0996B20900BA26F7 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AFD570050996B43800BA26F7 /* Build configuration list for PBXNativeTarget "Penrose" */ = { isa = XCConfigurationList; buildConfigurations = ( AFD570060996B43800BA26F7 /* Debug */, AFD570070996B43800BA26F7 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AFD5701C0996B4CC00BA26F7 /* Build configuration list for PBXNativeTarget "Sierpinski" */ = { isa = XCConfigurationList; buildConfigurations = ( AFD5701D0996B4CC00BA26F7 /* Debug */, AFD5701E0996B4CC00BA26F7 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AFD570330996B56D00BA26F7 /* Build configuration list for PBXNativeTarget "Sphere" */ = { isa = XCConfigurationList; buildConfigurations = ( AFD570340996B56D00BA26F7 /* Debug */, AFD570350996B56D00BA26F7 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AFD570500996B61600BA26F7 /* Build configuration list for PBXNativeTarget "Spiral" */ = { isa = XCConfigurationList; buildConfigurations = ( AFD570510996B61600BA26F7 /* Debug */, AFD570520996B61600BA26F7 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AFD570660996B6A300BA26F7 /* Build configuration list for PBXNativeTarget "FadePlot" */ = { isa = XCConfigurationList; buildConfigurations = ( AFD570670996B6A300BA26F7 /* Debug */, AFD570680996B6A300BA26F7 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AFD5707C0996B72700BA26F7 /* Build configuration list for PBXNativeTarget "Mountain" */ = { isa = XCConfigurationList; buildConfigurations = ( AFD5707D0996B72700BA26F7 /* Debug */, AFD5707E0996B72700BA26F7 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AFD570920996B80300BA26F7 /* Build configuration list for PBXNativeTarget "Triangle" */ = { isa = XCConfigurationList; buildConfigurations = ( AFD570930996B80300BA26F7 /* Debug */, AFD570940996B80300BA26F7 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AFD570A80996B88E00BA26F7 /* Build configuration list for PBXNativeTarget "Worm" */ = { isa = XCConfigurationList; buildConfigurations = ( AFD570A90996B88E00BA26F7 /* Debug */, AFD570AA0996B88E00BA26F7 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AFD570BE0996B93000BA26F7 /* Build configuration list for PBXNativeTarget "Rotor" */ = { isa = XCConfigurationList; buildConfigurations = ( AFD570BF0996B93000BA26F7 /* Debug */, AFD570C00996B93000BA26F7 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AFD570D60996B9F800BA26F7 /* Build configuration list for PBXNativeTarget "Ant" */ = { isa = XCConfigurationList; buildConfigurations = ( AFD570D70996B9F800BA26F7 /* Debug */, AFD570D80996B9F800BA26F7 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AFD570F70996BBBF00BA26F7 /* Build configuration list for PBXNativeTarget "Flow" */ = { isa = XCConfigurationList; buildConfigurations = ( AFD570F80996BBBF00BA26F7 /* Debug */, AFD570F90996BBBF00BA26F7 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AFD571200996BE9300BA26F7 /* Build configuration list for PBXNativeTarget "Discrete" */ = { isa = XCConfigurationList; buildConfigurations = ( AFD571210996BE9300BA26F7 /* Debug */, AFD571220996BE9300BA26F7 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AFD571390996BF2E00BA26F7 /* Build configuration list for PBXNativeTarget "Apollonian" */ = { isa = XCConfigurationList; buildConfigurations = ( AFD5713A0996BF2E00BA26F7 /* Debug */, AFD5713B0996BF2E00BA26F7 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AFD571500996C01700BA26F7 /* Build configuration list for PBXNativeTarget "Euler2D" */ = { isa = XCConfigurationList; buildConfigurations = ( AFD571510996C01700BA26F7 /* Debug */, AFD571520996C01700BA26F7 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AFD571660996C0CE00BA26F7 /* Build configuration list for PBXNativeTarget "Thornbird" */ = { isa = XCConfigurationList; buildConfigurations = ( AFD571670996C0CE00BA26F7 /* Debug */, AFD571680996C0CE00BA26F7 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AFD571C20996D9DC00BA26F7 /* Build configuration list for PBXNativeTarget "Juggle" */ = { isa = XCConfigurationList; buildConfigurations = ( AFD571C30996D9DC00BA26F7 /* Debug */, AFD571C40996D9DC00BA26F7 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AFD5722F0996E4A300BA26F7 /* Build configuration list for PBXNativeTarget "Swirl" */ = { isa = XCConfigurationList; buildConfigurations = ( AFD572300996E4A300BA26F7 /* Debug */, AFD572310996E4A300BA26F7 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AFD5727A0996EE8500BA26F7 /* Build configuration list for PBXNativeTarget "Polyominoes" */ = { isa = XCConfigurationList; buildConfigurations = ( AFD5727B0996EE8500BA26F7 /* Debug */, AFD5727C0996EE8500BA26F7 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AFD572B20996F99600BA26F7 /* Build configuration list for PBXNativeTarget "Bouboule" */ = { isa = XCConfigurationList; buildConfigurations = ( AFD572B30996F99600BA26F7 /* Debug */, AFD572B40996F99600BA26F7 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AFD572CF0996FC0F00BA26F7 /* Build configuration list for PBXNativeTarget "Crystal" */ = { isa = XCConfigurationList; buildConfigurations = ( AFD572D00996FC0F00BA26F7 /* Debug */, AFD572D10996FC0F00BA26F7 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AFD57306099701C000BA26F7 /* Build configuration list for PBXNativeTarget "Julia" */ = { isa = XCConfigurationList; buildConfigurations = ( AFD57307099701C000BA26F7 /* Debug */, AFD57308099701C000BA26F7 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AFD5736A0997411200BA26F7 /* Build configuration list for PBXNativeTarget "Strange" */ = { isa = XCConfigurationList; buildConfigurations = ( AFD5736B0997411200BA26F7 /* Debug */, AFD5736C0997411200BA26F7 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AFDA659E178A52B70070D24B /* Build configuration list for PBXNativeTarget "Unknown Pleasures" */ = { isa = XCConfigurationList; buildConfigurations = ( AFDA659F178A52B70070D24B /* Debug */, AFDA65A0178A52B70070D24B /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AFE2A4670E2E904600ADB298 /* Build configuration list for PBXNativeTarget "SkyTentacles" */ = { isa = XCConfigurationList; buildConfigurations = ( AFE2A4680E2E904600ADB298 /* Debug */, AFE2A4690E2E904600ADB298 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AFE30BF90E52B14700CCF4A5 /* Build configuration list for PBXNativeTarget "Sonar" */ = { isa = XCConfigurationList; buildConfigurations = ( AFE30BFA0E52B14700CCF4A5 /* Debug */, AFE30BFB0E52B14700CCF4A5 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AFE6A1940CDD7B2E002805BF /* Build configuration list for PBXNativeTarget "MoebiusGears" */ = { isa = XCConfigurationList; buildConfigurations = ( AFE6A1950CDD7B2E002805BF /* Debug */, AFE6A1960CDD7B2E002805BF /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AFE6A42A0CDD7FAA002805BF /* Build configuration list for PBXNativeTarget "Abstractile" */ = { isa = XCConfigurationList; buildConfigurations = ( AFE6A42B0CDD7FAA002805BF /* Debug */, AFE6A42C0CDD7FAA002805BF /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AFEC23DF1CB6EAE100DE138F /* Build configuration list for PBXNativeTarget "DymaxionMap" */ = { isa = XCConfigurationList; buildConfigurations = ( AFEC23E01CB6EAE100DE138F /* Debug */, AFEC23E11CB6EAE100DE138F /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AFEE105F1D13406000AAC8F7 /* Build configuration list for PBXNativeTarget "CubeTwist" */ = { isa = XCConfigurationList; buildConfigurations = ( AFEE10601D13406000AAC8F7 /* Debug */, AFEE10611D13406000AAC8F7 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AFEE107E1D15EB0800AAC8F7 /* Build configuration list for PBXNativeTarget "CubeStack" */ = { isa = XCConfigurationList; buildConfigurations = ( AFEE107F1D15EB0800AAC8F7 /* Debug */, AFEE10801D15EB0800AAC8F7 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AFEE109D1D17E20B00AAC8F7 /* Build configuration list for PBXNativeTarget "Splodesic" */ = { isa = XCConfigurationList; buildConfigurations = ( AFEE109E1D17E20B00AAC8F7 /* Debug */, AFEE109F1D17E20B00AAC8F7 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AFF2868F17860E830050A578 /* Build configuration list for PBXNativeTarget "QuasiCrystal" */ = { isa = XCConfigurationList; buildConfigurations = ( AFF2869017860E830050A578 /* Debug */, AFF2869117860E830050A578 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AFF3C9F817CCAC440028F240 /* Build configuration list for PBXNativeTarget "Geodesic" */ = { isa = XCConfigurationList; buildConfigurations = ( AFF3C9F917CCAC440028F240 /* Debug */, AFF3C9FA17CCAC440028F240 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AFF463440C4403E400EE6509 /* Build configuration list for PBXNativeTarget "CWaves" */ = { isa = XCConfigurationList; buildConfigurations = ( AFF463450C4403E400EE6509 /* Debug */, AFF463460C4403E400EE6509 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AFF463690C440AEF00EE6509 /* Build configuration list for PBXNativeTarget "GLCells" */ = { isa = XCConfigurationList; buildConfigurations = ( AFF4636A0C440AEF00EE6509 /* Debug */, AFF4636B0C440AEF00EE6509 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; AFFAB32619158CE40020F021 /* Build configuration list for PBXNativeTarget "ProjectivePlane" */ = { isa = XCConfigurationList; buildConfigurations = ( AFFAB32719158CE40020F021 /* Debug */, AFFAB32819158CE40020F021 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; C01FCF4E08A954540054247B /* Build configuration list for PBXProject "xscreensaver" */ = { isa = XCConfigurationList; buildConfigurations = ( C01FCF4F08A954540054247B /* Debug */, C01FCF5008A954540054247B /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; CE3D01631B76F4C100993C75 /* Build configuration list for PBXNativeTarget "TestX11" */ = { isa = XCConfigurationList; buildConfigurations = ( CE3D01641B76F4C100993C75 /* Debug */, CE3D01651B76F4C100993C75 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; /* End XCConfigurationList section */ }; rootObject = 29B97313FDCFA39411CA2CEA /* Project object */; } xscreensaver-5.36/OSX/xscreensaver_Prefix.pch000644 000767 000024 00000001117 11763203417 021334 0ustar00jwzstaff000000 000000 /* Prefix header for all source files of the 'xscreensaver' project. */ #include #include #include #include #include #if TARGET_OS_IPHONE || TARGET_IPHONE_SIMULATOR # undef USE_IPHONE # define USE_IPHONE # define HAVE_JWZGLES #endif #ifdef __OBJC__ # ifdef USE_IPHONE # import # import # else # import # endif #endif #include "jwxyz.h" # ifdef USE_IPHONE # include # include #else # include #endif xscreensaver-5.36/android/Makefile000664 000767 000024 00000017326 12775606442 017246 0ustar00jwzstaff000000 000000 # XScreenSaver for Android export TERM=dumb GRADLE = cd project ; ./gradlew default:: debug all:: release clean:: $(GRADLE) clean distdepend:: # Set this to the set of platforms you want to compile for in debug mode. # E.g., if you are running an x86 emulator, there's no point in compiling # for a dozen other platforms. Release builds override this to "all". # export APP_ABI = all # TODO: # check_versions: # These hacks have interdependencies with others, so we can't build without # including them or there are link errors: # ANDROID_BASE_HACKS= \ apple2 \ bubble3d \ pacman \ polyhedra \ sonar \ sproingies \ # These are the ones that currently work, at least to some degree: # export ANDROID_HACKS= \ $(ANDROID_BASE_HACKS) \ abstractile \ anemone \ anemotaxis \ apollonian \ attraction \ atunnel \ blaster \ blinkbox \ blocktube \ boing \ bouncingcow \ boxed \ boxfit \ braid \ bsod \ cage \ ccurve \ cloudlife \ companioncube \ compass \ coral \ crystal \ cubestack \ cubestorm \ cubetwist \ cwaves \ cynosure \ dangerball \ decayscreen \ deco \ demon \ discrete \ discoball \ distort \ dnalogo \ drift \ energystream \ engine \ epicycle \ eruption \ euler2d \ fadeplot \ fiberlamp \ fireworkx \ flame \ flipflop \ flow \ fluidballs \ flyingtoasters \ fuzzyflakes \ galaxy \ gears \ geodesic \ geodesicgears \ glcells \ glknots \ glmatrix \ glschool \ glsnake \ gltext \ grav \ greynetic \ helix \ hexadrop \ hexstrut \ hilbert \ hopalong \ hypnowheel \ ifs \ imsmap \ interference \ intermomentary \ julia \ kaleidescope \ kaleidocycle \ klein \ kumppa \ lament \ lavalite \ loop \ m6502 \ maze \ memscroller \ menger \ metaballs \ moebiusgears \ moire \ morph3d \ nerverot \ noof \ penetrate \ penrose \ petri \ piecewise \ pinion \ polytopes \ pong \ popsquares \ providence \ pyro \ quasicrystal \ raverhoop \ rd-bomb \ ripples \ romanboy \ rorschach \ rotzoomer \ rubik \ rubikblocks \ sballs \ shadebobs \ sierpinski \ sierpinski3d \ slidescreen \ splodesic \ squiral \ stairs \ starfish \ stonerview \ strange \ substrate \ superquadrics \ swirl \ tangram \ thornbird \ timetunnel \ topblock \ triangle \ tronbit \ twang \ unknownpleasures \ vermiculate \ voronoi \ wander \ whirlwindwarp \ winduprobot \ wormhole \ xflame \ xlyap \ xspirograph \ # These don't work well enough to turn on by default: # ANDROID_TODO= \ antinspect \ antmaze \ antspotlight \ atlantis \ barcode \ binaryring \ blitspin \ bouboule \ bumps \ carousel \ celtic \ circuit \ cityflow \ crackberg \ cube21 \ cubenetic \ cubicgrid \ deluxe \ dymaxionmap \ endgame \ flipscreen3d \ fliptext \ fontglide \ gflux \ glblur \ gleidescope \ glhanoi \ glplanet \ glslideshow \ goop \ halftone \ halo \ hypertorus \ interaggregate \ jigglypuff \ jigsaw \ juggler3d \ mirrorblob \ moebius \ moire2 \ molecule \ mountain \ munch \ noseguy \ pedal \ phosphor \ photopile \ pipes \ polyominoes \ projectiveplane \ pulsar \ qix \ queens \ rocks \ skytentacles \ slip \ speedmine \ spheremonics \ splitflap \ spotlight \ starwars \ surfaces \ tessellimage \ testx11 \ truchet \ unicrud \ xanalogtv \ xjack \ xmatrix \ xrayswarm \ zoom \ # Download and resize images from jwz.org. # This saves us having to include 4MB of images in the tar file # that will only be used by a vast minority of people building # from source. # Android actually wants these to be 160x160 but our source is 200x150. URL = https://www.jwz.org/xscreensaver/screenshots/ WGET = wget -q -U xscreensaver-build-android CVT = -thumbnail '150x150^' -gravity center -extent 150x150 \ \( +clone -alpha extract \ -draw 'fill black polygon 0,0 0,15 15,0 fill white circle 15,15 15,0' \ \( +clone -flip \) -compose Multiply -composite \ \( +clone -flop \) -compose Multiply -composite \ \) -alpha off -compose CopyOpacity -composite \ -colorspace sRGB \ -strip \ -quality 95 \ +dither -colors 128 # If we are making the m6502 hack, create the header file for Android m6502.h:: @for h in $(ANDROID_HACKS) ; do \ if [ $${h} = "m6502" ] ; then \ echo "Making $${h} header ..."; \ ../hacks/m6502.sh ../hacks/m6502.h ../hacks/images/m6502/*.asm ; \ echo "Made $${h} header"; \ fi; \ done project/xscreensaver/res/drawable/%.png: @\ FILE1=`echo "$@" | sed 's!^.*/\([^/]*\)\.png$$!\1.jpg!'` ; \ FILE2="$@" ; \ FILE1=`echo "$$FILE1" | sed s/rdbomb/rd-bomb/` ; \ FILE2=`echo "$$FILE2" | sed s/rd-bomb/rdbomb/` ; \ URL="$(URL)$$FILE1" ; \ echo "converting $$URL..." ; \ rm -f "$$FILE2" ; \ $(WGET) -O- "$$URL" | \ convert jpg:- $(CVT) "$$FILE2" ; \ if [ ! -s "$$FILE2" ]; then \ echo "$$FILE2 failed" >&2 ; \ exit 1 ; \ fi thumbs:: @for f in $(ANDROID_HACKS) $(ANDROID_TODO) ; do \ $(MAKE) project/xscreensaver/res/drawable/$$f.png ; \ done clean_thumbs:: @\ for f in $(ANDROID_HACKS) $(ANDROID_TODO) ; do \ rm -f project/xscreensaver/res/drawable/$$f.png ; \ done distclean:: clean_thumbs clean EXTRA_TARFILES = project/xscreensaver/res/drawable/thumbnail.png \ echo_tarfiles: @FILES=`find . $(EXTRA_TARFILES) \( \( \ -name .DS_Store \ -o -name '*~' \ -o -name '*.keystore' \ -o -name '*_dream.xml' \ -o -name '*_settings.xml' \ -o -name AndroidManifest.xml \ -o -name strings.xml \ -o -name settings.xml \ -o -name attrs.xml \ -o -name .gitignore \ -o -name .gradle \ -o -name drawable \ -o -name build \ -o -name gen \ -o -name libs \ -o -name obj \ \) -prune \) \ -o \( \( -type f -o -type l \) \ -print \) \ | sed 's@^\./@@' \ | sort` ; \ echo $$FILES run_check:: ../hacks/check-configs.pl --build-android $(ANDROID_HACKS) debug:: m6502.h run_check $(GRADLE) assembleDebug release:: m6502.h run_check export APP_ABI=all ; \ $(GRADLE) assembleRelease KEYSTORE = xscreensaver.keystore $(KEYSTORE): keytool -genkey -v -keystore $@ \ -alias xscreensaver -keyalg RSA -keysize 2048 -validity 10000 APK_DIR = project/xscreensaver/build/outputs/apk/ APK_UNSIGNED = $(APK_DIR)/xscreensaver-release-unsigned.apk APK_UNALIGNED = $(APK_DIR)/xscreensaver-release-unaligned.apk APK_SIGNED = $(APK_DIR)/xscreensaver-release.apk TOOLDIR = $(shell echo $$HOME/Library/Android/sdk/build-tools/* | tail -1) ZIPALIGN = $(TOOLDIR)/zipalign JARSIGNER = jarsigner sign_release:: cp -p $(APK_UNSIGNED) $(APK_UNALIGNED) $(JARSIGNER) -verbose -sigalg SHA1withRSA -digestalg SHA1 \ -keystore $(KEYSTORE) $(APK_UNALIGNED) xscreensaver rm -f $(APK_SIGNED) $(ZIPALIGN) -v 4 $(APK_UNALIGNED) $(APK_SIGNED) rm -f $(APK_UNALIGNED) $(JARSIGNER) -verify -verbose -certs $(APK_SIGNED) @ls -lF $(APK_SIGNED) apk:: release @\ VERS=`sed -n 's/[^0-9]*\([0-9]\.[0-9][^. ]*\).*/\1/p' ../utils/version.h` ; \ HEAD="xscreensaver-$$VERS" ; \ if [ ! -s $(APK_SIGNED) -o $(APK_UNSIGNED) -nt $(APK_SIGNED) ]; then \ $(MAKE) sign_release ; \ fi ; \ set -x ; \ cp -p $(APK_SIGNED) ../archive/$$HEAD.apk ## #### Pare it down for faster debugging... #export APP_ABI = armeabi-v7a #export APP_ABI = x86 # #export ANDROID_HACKS= \ # $(ANDROID_BASE_HACKS) \ # bsod \ # apollonian \ # engine \ # dnalogo \ # twang \ # memscroller \ # phosphor \ # discoball \ # cubetwist \ # cubestack \ # splodesic \ xscreensaver-5.36/android/README000644 000767 000024 00000017525 12776007374 016465 0ustar00jwzstaff000000 000000 This directory contains the Android-specific code for building xscreensaver. It is preliminary, and very much a work in progress. If you're messing with this, please let us know! dennis@panaceasupplies.com jwz@jwz.org To set up your Android development environment: Install JDK 7 (http://www.oracle.com/technetwork/java/javase/downloads/) Install Android Studio (http://developer.android.com/sdk/) Install Android NDK (http://developer.android.com/ndk/downloads) Rename or link the "android-ndk-*" directory to "ndk" inside your $ANDROID_HOME (the "sdk/" directory that is the parent of "build-tools/", etc.) That is, it should be "sdk/ndk/". set $ANDROID_HOME to where your SDK is installed, or set "sdk.dir" in project/local.properties. On MacOS, the value you want is probably ~/Library/Android/sdk/ Also set "ndk.dir" in project/local.properties. To build: ./configure cd android make Hopefully an "xscreensaver-debug.apk" file will appear in android/project/xscreensaver/build/outputs/apk/. Load that onto your device and go to: Settings / Display / Daydream or just click on the XScreenSaver icon, which is a shortcut to that. To create and configure an emulator image, use the GUI tool and and give the emulator a name (say, "Nexus_5"). $ANDROID_HOME/sdk/tools/android avd E.g.: Nexus 5, Android 5, Intel Atom x86_64, RAM 2048 VM 64, storage 200, use host GPU. Configuration options are in $HOME/.android/avd/*.avd/config.ini To launch it: $ANDROID_HOME/sdk/tools/emulator -avd Nexus_5 Warning! On my system at least, the emulator runs out of memory when trying to display the Daydream page if all of the savers are loaded. This is troubling. You can work around this by editing your *.avd/config.ini and setting vm.heapSize=128; or by editing android/Makefile and paring down the $ANDROID_HACKS list to a smaller subset (60 or so with the default heapSize). To load it into the currently-running emulator or device: $ANDROID_HOME/platform-tools/adb install -r \ project/xscreensaver/build/outputs/apk/xscreensaver-debug.apk Extremely verbose log output, including stack traces: $ANDROID_HOME/platform-tools/adb logcat Non-fatal log output for only this app: $ANDROID_HOME/platform-tools/adb logcat \ -s xscreensaver:d AndroidRuntime:d libEGL:d Note that sometimes "logcat" will just sit there forever saying "waiting for device". This is because the emulator is a piece of shit and sometimes decides to just randomly not service connections. If you restart the emulator, and wait minutes for the whole damned thing to boot up again, it will probably work next time. Probably. Directory structure: Boilerplate for the Java version of "make": project/*gradle* project/*.properties project/xscreensaver/*gradle* project/xscreensaver/build.* project/xscreensaver/*.properties The other half of the Makefile: project/xscreensaver/jni/*.mk Source code: project/xscreensaver/src/org/jwz/xscreensaver/*.java project/xscreensaver/res/layout/*.xml Other relevant source code is in ../jwxyz/ and ../hacks/. Icons: project/xscreensaver/res/drawable-ldpi/ project/xscreensaver/res/drawable-mdpi/ project/xscreensaver/res/drawable/ Files that we generate: gen/function-table.h project/xscreensaver/AndroidManifest.xml project/xscreensaver/res/drawable/*.png project/xscreensaver/res/values/settings.xml project/xscreensaver/res/values/strings.xml project/xscreensaver/res/xml/*.xml project/xscreensaver/src/org/jwz/xscreensaver/gen/*.java Other files generated as a part of the build process: gen/ project/.gradle/ project/xscreensaver/build/ project/xscreensaver/build/outputs/apk/ -- app appears here project/xscreensaver/jni/ project/xscreensaver/libs/ project/xscreensaver/obj/ project/xscreensaver/res/ project/xscreensaver/res/drawable/ project/xscreensaver/res/values/ project/xscreensaver/res/xml/ project/xscreensaver/src/org/jwz/xscreensaver/gen/ When adding a new hack, edit android/Makefile, then "make clean" and "make". TODO list, and known bugs: - See the top of ../jwxyz/jwxyz-gl.c for a low level TODO list, but here's what's wrong with the savers from a high level view: - Rotation is wonky (on some devices?) - The Android emulator is a piece of shit and crashes all the time, so it's possible that some of these work fine on real devices. I don't actually have an Android device, so I have no idea. - As mentioned above, the Android emulator runs out of memory if more than about 60 of the Daydreams are installed with the default heapSize. Again, I don't know if this is an issue on real devices. I sure hope not. - The code that attempts to grab a screen shot before the Daydream begins doesn't work. - When a saver exits abnormally, we catch the exception and attempt to display the error message in a dialog. The catch works, but the dialog box does not. anemone needs thick lines anemotaxis needs thick lines antinspect crashes emulator, sometimes antmaze crashes emulator, sometimes antspotlight crashes emulator, sometimes apple2 text, images into pixmaps doesn't work atlantis crashes emulator, sometimes barcode pixmaps binaryring pixmaps blitspin images bouboule ? braid thick lines bsod pixmaps, XCopyArea problems bumps XPutImage carousel blank celtic thick lines circuit crashes emulator cityflow crashes emulator, sometimes compass thick lines crackberg crashes emulator, sometimes cube21 crashes emulator, sometimes cubenetic crashes emulator, sometimes cubicgrid crashes emulator, sometimes deluxe thick lines dnalogo codeword is blank dymaxionmap crashes emulator endgame crashes emulator engine text epicycle thick lines flipflop images flipscreen3d images fliptext text fontglide text fuzzyflakes thick lines gflux images glblur crashes emulator, sometimes gleidescope images glhanoi crashes emulator, but a few seconds in glplanet crashes emulator glslideshow images goop polygons halftone XFillArc crash halo XOR hypertorus crashes emulator interaggregate window background should be white jigglypuff incredibly slow jigsaw crashes emulator juggler3d crashes emulator maze no logo, lines look weird mirrorblob images moebius crashes emulator moire2 pixmaps molecule crashes emulator mountain polygons munch XOR noseguy pixmaps pacman launches really slowly; fails at loading XPMs pedal polygons phosphor pixmaps photopile pixmaps pipes blank polyhedra crashes emulator polyominoes pixmaps projectiveplane crashes emulator pulsar crashes emulator qix polygons queens crashes emulator rocks polygons skytentacles crashes emulator slip pixmaps sonar crashes emulator speedmine polygons spheremonics crashes emulator splitflap text spotlight pixmaps starfish polygons starwars crashes emulator substrate background should be white surfaces crashes emulator tessellimage pixmaps truchet thick lines twang background should be black unicrud pixmaps xanalogtv pixmaps xjack blank xmatrix pixmaps xrayswarm thick lines zoom pixmaps xscreensaver-5.36/android/XScreenSaverWallpaper.java.in000644 000767 000024 00000001667 12715706733 023273 0ustar00jwzstaff000000 000000 /* -*- Mode: java; indent-tabs-mode: nil; c-basic-offset: 2 -*- * * xscreensaver, Copyright (c) 2016 Jamie Zawinski * and Dennis Sheil * * 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. * * The template for the generated per-saver classes. */ package org.jwz.xscreensaver.gen; import org.jwz.xscreensaver.XScreenSaverWallpaper; import org.jwz.xscreensaver.jwxyz; public class @CLASS@ extends XScreenSaverWallpaper { public @CLASS@() { super("@NAME@", jwxyz.API_@API@); } } xscreensaver-5.36/android/project/build.gradle000664 000767 000024 00000001226 12776010101 021501 0ustar00jwzstaff000000 000000 // Top-level build file where you can add configuration options common to all sub-projects/modules. buildscript { repositories { jcenter() } dependencies { classpath 'com.android.tools.build:gradle:2.1.0' } // This allows versions of Gradle past 2.9 to be used with the Gradle // Android plugin. // https://discuss.gradle.org/t/gradle-thinks-2-10-is-less-than-2-2-when-resolving-plugins/13434/2 // System.properties['com.android.build.gradle.overrideVersionCheck'] = 'true'; } task clean(type: Delete) { delete('./build') } task distClean(type: Delete) { delete('./.gradle') } distClean.dependsOn clean xscreensaver-5.36/android/project/gradle/wrapper/gradle-wrapper.jar000644 000767 000024 00000150604 12727351034 025566 0ustar00jwzstaff000000 000000 PK *²•G META-INF/PK *²•Gו˜R?UMETA-INF/MANIFEST.MFóMÌËLK-.Ñ K-*ÎÌϳR0Ô3àåòÌ-ÈIÍMÍ+I, ê†d–ä¤Z)¸%¦ä¤bȵéõòrPK ²•Gorg/PK ²•G org/gradle/PK ²•Gorg/gradle/wrapper/PK ²•Gh‚df£Õ#org/gradle/wrapper/Download$1.class}ŒM Â0…ßh5Z+v/‚ ׆žÁp!.H¾3SK¹¢;Ýa(ÌId0®lˆWžOæ*i)2X¤sd1,¶•ê”:úÈï"! <°P‚Kwð¸àjdÇ@ÙÂC<Òx°ûÃeÈýV9¬ÎœCv@ôyÐr‡}Òúž†Ýú [N},EI/hUЇžMIüGjv2F"TXksY•’“ˆ„S<ª1ä§´8ªéë^™qL¬Ñ_fAqÄô­Ò#Z¢K–^¶ÏûLN YZ“ƒ ÇeZ­al\#›@ù¹JQå¿!þÞNœcÁNÚÆ9R_pé æ§‰rb¬\~XŽÀ nŒÊ='iaÓµä† #-Ú[ÁÍmu WÉÚä¥QʸNÙÔ/PK ²•GçìXsªÛ"org/gradle/wrapper/IDownload.classEÁ Â0 †ÿÌéæ¼ ^õbñ¼« APô^·26J;êt>›À‡;•É—üùó|Ýè{èz~¢+%5O“é&çWΔ(Ùa…_Ê4[gR„³#!XÝbQ”™Vg=Ë{}1±¨÷„A´üYÍëCÂX›”¥†'R°Êð¢†5Âðc/¹JÙö”‹¸$Œþ£æS‡@pP¹„\ËmKuíØôlïÀPK ²•G©zÝ\Q-org/gradle/wrapper/GradleUserHomeLookup.classS[OAþF‘]ÖõR¬(µ¶j[[ÙZíUÓÄ˪‰T Od… ®.»dYlüW½$jjÒÇ>ôG5=ÃR+ȃ»É¹Íw¾sæÌÌï??~Xª‚QÌÉx¢à)žIˆ)`^F\ø‰F° Ṃ½zQFRhMÂK K “[úöúA*_ÚÉ®o¥ôÒANÏ–vÓŸt†pêØ854˰«ZÎsM»ºÊ0Ý+e²éŒžÍK{z‘ahÓ±ža{Ãjrâ¿…×÷ >4¸fÚ¦÷‘¡?ž(06 %Œ¤L›ï7k‡Ü͇}8eÃ*®)üv0à™ †DÊq«ZÕ5*×>»F½Î]m§å4¸»ëÔxÊqNšuj}¸Úg'ü-šŽ¶mZœ0òZÙjw¥äœ¦[æb!Ú‹3)’UD0A\>y²IˆäA$¼R±Œõf Mðxƒ÷f˜èžûFÓ´*Üe]Ó«x‹wÔ¯–ô «x ówuð¿Hú𘗽ŽPî¬áñÃ`•{×!ïŒ!¿}%½nÉx/ qè¸}J†hÍ®0,Þ‰²=q@žã‡îÇ{ÔÆ,ÝúQzýˆŠi’Åi“ÝGã7ü !™8C’“ÑH3Ò `_[(É`+8Ž$U€)<$Â4µ“OZdô4Ã}—è/îý‚z…@‘¨¾„ƒ—:CÂøY˜×…"D "Vˆv IÎ †¹ëÂ(&ö%Óê¿®—)[|SW/ „©þ9Ôð‰s ‡,öÂnì%Br¦Uvö/PK ²•Gâ]ÛÅú 3org/gradle/wrapper/ExclusiveFileAccessManager.class•VKpeÿmš&iºm!@!Pl…´P‚(Ó‚–ØbhZ  ¥·É6]ºÝ›MK} >êûuðè£2#-XÆGGǃ:ãñÂÅ/ž/Äß·›–¾ùÿçïÿú6?þûÕ ã“ ¶¡³¤ÄÒåGw^÷ãD>tŠËIqê  WìiA9%–¾ N£ßÎQ#ˆ58Ä3x6HSÏqÏû¡0(3d…šD-†*‘ÃpÎWbº£~~˜Ö¤Ž':Ïu$SíçzOut$û%„Rç•1%¦+F.Ök[š‘k‘P•0‚­vŸ¢U ¶6ªšE»« AJJ¨Î›ºž4lÕStAôµj†f–PM&ú$xf–Š5)ÍP»‹£ƒª•VuUø33ŠÞ§Xš¸—ˆ^{X£•XÊ´r±œ¥du56n)ù¼jÅÚ/dôbAS;4]mËdÔB¡K1”œj¨OqÚ¢nšr-î­hkz,c™¢e©†K(º.<¶4Ì‹úøày5cÓ˜Ÿ![v›Í“nfF$Ô¹’ g†ÃPõ‚ãaŒˆL©óá13 aˆÐ”ÍÔÿ áÏ5²ÆRŒ¬9êë’6ÏÙíYÄÀKÈæÜ,A›p/”­]˜ÿ‰ül \ak:Ýr˜úAÖCÍÛ„}Ñ«å Å.ZÔïjMÇ—fõð}ÕÅuÒÀUÂÚQebPMèfA=YÔT[Ÿ ø{Ö†[K¶›8LbÃ<sHi­"3+/aÝ2FX¯Y´2¥2Ö¯Üu{…²Œ(ò2ÂN»°S‚)¾G/µ¾Æ/á™T>ý Í3¨h ­™ÆÚ¸7ìB(^¦ê:GúîÏa*¯{¹P¥lò6\¾;#ì4Í v  ´‘ž…É)l …y&¢Í³`¶ÜÜsuâa¢Üê$&Ç&áÝs®ø"\^&x3^9O°ò&3ù9¦q‹™º…ß}~Âçþ·³—9™¿ˆz®»˜÷(sØÀL7R² ˜ñƒ<¥ø7­ûùoê ‘:‚ÇG3ß㸄VLâ=µÑW_£ß ßâ(~ÀÓô׉_háy·Éûƒ¼?Éû‹¼;äýCž¨r´|ƒžö³‚1C_’ÆJÎVž§ô,9§fÊxˆø6'­Œ2¿!ŽƼ¿Ó!”ã0•ä9ù'(ÿ$)^Rê‰Vôݶ-¿¥=ËÝã´èw¨j¼Ž$\†7u…d/«¨æ¶j-'Ií%½œ4Ûµß ¤–2ÕÜÛ¨Û¤G*1 é¸<öPK ²•GÌ ^F‘ù-org/gradle/wrapper/WrapperConfiguration.class“mOAÇÿÛçÖƒ>‚€¢¢"í!œ à3 U1U H|C®p–#åŽÜ]5ñSi"1ñ…Àeœ½[ ¬ÛÄ73³3óŸýí\ûûÏÏ_æð(‡K˜É`6‹Œ îq?ÇÍ<7÷¹yÀÍB‹i9ƒÃÀÎÈwÿ(õw7¡Í‹Úfzî½çuÏùsÏìßÿüù€ýøYÃ.Œ¨xCCF4œÄ¨Š75ø%ó”cò0.w*&UœVñ–†VŒqF® IÎJrNƒŽ© ÎkxÓÒìB ÞÁÅ\»’¼'/;'¥ïk00#IRÃ,„TžkA i¦ŠË C¦eºG4Gº§øŽÛ³BÁ†1Ó…ìŒpÎ3rÚÆì¤‘™2SžËLŸ›6ó zÇl'K9ÆlFÄæ#—N,±˜wEö´cóàš"Ò°(vâ 6§„[+U°32vÙ¸fÄL;6bfD¼»t,¸f&6näh4­„ë#« T¥;jå nID5…µ/ËG'‡’"çš¶EYó±(sñ¤ÃJÅhfZ)ŠÔ¬á&ÓÂYvîÝ숔XàýžHÆ`8©BVXnµ—É™Ë"éRÞd¾ `K…ƒQW8†kKÛõ¹åteÔdTg¬ ¥¬±È„ejÐr€m­¯)3É.oµerº$ŠKóª‚.æžu úÚ¡z°ê9Gép]ÂLY†[pècxõb®Ù§–° NR”àêzFKõKS»Aè7­ÜsÒȧy—Š+:2`Óli„—‚Žg´’ôhé°‘ÓqUúÞÜ §t®~¦`¹fVT;j³:V03³²Év;Ží„çÓ glc–²ðJuÃsŒåˆyI\\“Í+ؘ_†áb¤?Ú­bAÇ">ÐqªøHÇǸ¡âŸ‚Y|†ÏuÀ*¾ÔqSr¾Â×*¾Ññ-¾Óñ=~PqKÇøIAtí™Ôö¿½K³Üé.XœÚ®G&¯`ÛŠ¨ò5K 2cç¥3ŽEݾH}³t×±ÊHÇkôË/u5ý k—Xl™H½"5¢ "¨àœM;ö¼|L^üÏxƒ|¨I;›óðY%¥†7À9–®„´R, [«rn–g}•zÅlj«ç2¾´‘Ÿ tá³¼¥Žå¡w°2úãiÃIˆ«a%EƒVFi.ãO°oΔuö§»À9ØmX…µ<â’VÊM{ 7Jš’ùïýŸú/çQœ7€›Ùˆ 70_“C<Ïß.È¿&(r>‘îá)ÆUáê>„ò»'ÞKð˜Û±T/) ‚n®ëEµh¬<€AòþXBÓôC4E‹ðýÏý%øÉŒ/A¦çàDo_ëø¯Ýƒ>è“›ïÉ=„'– O/¡•ÚëÛ6±‘.6ÑÖ÷›Ÿ´my„ö‰Þ"¶>F‡‚A_È÷ÛÜÁ ¹ ‘åï ù‹è,bû` (¢ëö„¾"žTCj;'¤öJ­T|Œp3Îßû÷QÏ}4‘}ègýxÑ[C8„A´P"A˜B;馸Æ&ꇈÜ.J÷ŽÒÏõziEœœóä\"ª×éñ&?¶nqÜÝÆAÜÅK¸OÍ8ì:ùaÔNË>ÞGíbÜÝF'-÷óÓë&= e€¾h=À¤q /Ó‹O‚NO¯p â7Þg‘BøC8Ââ\â÷ÖQ¼J¯• XÒz»c^‘swÂÛ ÿPK ²•G¥y0ºVorg/gradle/wrapper/Logger.class…“ûoÒPÇ¿—Ç*¯1ÆpL˜ EW†o1&†d  f&û­”›®Ki¡ÿŠ…ÅÄüü£Œç¶ X³žžsï9Ÿó*þþú àO“Hàf—p+Û¨&Qƒ,D]ˆ;BÜ•p A‘Ð`ˆ§wØ ÃÚ3Ã2Üç ±êIí˜^m{À²]Ã⯧Ã>wÞ©}“N6»¶¦šÇªc;8Œ¹§Æ„¡Ôµ]Ñu`r壣ŽFÜQº¶®s§Å5m¡Píž©TÅT-]鹎aé-‘PòÉDÕ½ +TŸ€Y†Æb|ûTuz|<å–Æ[µ…‹ž·(N$Ö&c†bXC3”Ùé„RãWuÄô:”Á+m§Úõf=m†dÏž:?2ÄØRþlDL¦‘BZB3{¸/áAQH£ˆGB<â å 2ÃÆÿüoúg\£·Î+‰j®Š±/ø÷>M\>¤ {JQ¿ÃVÞÒ \ZW‡ÔHþœcÚÞHX¦Å \´ŸâáÅÓ_‰)ÎG½t… }ý РéÙã¤Fœô ÖIfÉ:B„~@Rþ &—~ ò•¬6H®#Jò2bØ&J9Ïò¼‰–ãèöekY4|3†•}Â(ê4yÜ0 ÷¢‚ÆT÷¬‚Р•§ÚþÃÔÇJË º=­-uñ/àg5Ûu°r— ¢î±ìBÖw•½ek++ºÐÜ¥~FµLM›Ž¤vºoû º»3ó©z¶žñgF{Ý(”lMtÏw¿­×oI¸älq»uÍÔu¨ ¶ 9ú˜&‰ŒåiÖ›lËb¶¿ŠÊ\ÒcEÁxê­Õ{qÖ©|´d/kÎ%æÐ—®ã¥îá½Ëºãh}È(莫 ÃWrôÅ’m¸kÙÑíS?¼°æ ;®(Pã¡mV‡Wõ• ?ÇsÁÂÚú²uS^uuÓñÒ2½ì(̆’c΂Êû9ë ›º›™Ìí²¤sÆ.n‘xS›ÆWXvq`…¼ìwîž*ûCRPœ²Jö¢.›dúõÉ pQÅy<ÅT ãÇ*žÃ5sxZÅSãEÞnYÅOðŠŠ,òJ×¢(żn«ø©èü ?gF²*~!« ø¥Š_‰ôk¼¢àÌ»g¸ØøM¿U1§Yº“Nö$K×\E1¾pC_t£øŠßã¼ø£CFñGŸU¬ãUÁ_´xG–é.;`r¦«õk¢p¯ Ⲃƒu˜  ­º;Y2]cYßögû U*擦å&—Hܤa®”ܤO>±]aF(ÜÃßTÜÇ†Š¿KFî‹»æÚ©â ¼Ir³Äf×—7ì(¨ø‡èþIn 3Î%I½¤á$Kæ ¦u‹`’o—b§ÞáM%ºTw-5Ö´¸p-©º¯UžðhWf^Aï;ºà¿¤]¹ÖTp!»jºoC³þbÃò1 Cݾ¼³Ç×ó°½Û«ÛS³ƒ’›(#×-›„Sð:‘^©åpý>ñÐÿif~ãÉyæ"c<½{Fwí†1é2~C ¥º¥%FJ+yÍ¥¹pêê€DÉÞ"©œ¿s(•« 6]ïe¨îL/ÙÖ-yk½6ñ3àóúêøu1Y;óºÇ)-löáé\}¿òjìÒ_,iE§ÆÞf‚¯ì¬ÓšãêË~'l‹p×v2‹ãüÞ:Êo»F´âýx ¬*W Èp}nÛº—?vVÊ1î±Ñrü WpV8‡Ó(¯zªâç t Äï³~Jª¯„ rC'¨)ºq1Î¼Ž†ª•}„$iå8ö Ó³tØ×,‰$°Ä0mù6ÿKOQηә2+¦{*¥{3DÎ…6“¿bìÙ@|®‚&®Ô2ö&öqh q(cÍ盺vè&vèzROõPdçÒ­áÖH-ë[á´!Â1ÅPº±ia–уUfWB»ìƒÞ í6.q\ÁKȱ ÖÓ[FÇŽÍ…ˆå=$›O”q|}t]s‰¬ÑÉžåã,v玬õs@14“:,vË-øÎ2¾Ú1‰)žhbf¦1C,]”gñŒMßú>|ØCß _ÒkÔ¢µd—qêBû]„3ë™Æö2RÕ¼$¼hžbFhy”¹÷ü'ý³[ZpÅó¥ÆU<ëÑ›Ÿ!/›Úb§ùèí机ØA‡=ë=¡çËHW=fd`TaF¤2¦fÆ“ þjUÚ¶¼¶aÏÓG‡ y\Qy}Ä¿T…ß8ÿ—yN22”IAÏÄÒ¯¡a=“èõVÍB÷Dß=d+xﺔ%à|â4鮟Ùäù#j>K¦>G¯×Xƒyœ Žê…ÚB:„|PÝ;ïóXLJ•µ|ÊÿPK ²•G8Þ¶Ýì) org/gradle/wrapper/Install.classY |åµ?'»ÙÙ,Ã+ÂÊkD"y‡7 IØð0 êdw’Œì#îÎ’D­Z‹JÕ¾P[ÑV¬b-UQIÐ(Øj}¶ö¡µµµÕVkoëí½½÷öÞÛû*÷fv7›dâ/¿ýfæ{œçÿœï|_^ýûÓG‰h! >ΗÆ'"_š‚4iÆÉ§ 2¯ðñ›Ï(Àel’4“\ÈS¤™à"ž ;¸Xšé 4•gÈü™ ÏòóìÏaMáÓtÏ ð->¹Zák˜‚ kê67oº´¡©uÓÆ¦Õ›75­o¹tCݦµL…Í—ë»ôšˆë¬iµf¬sÓøúx,ié1k‹IAòk™|‘xg§‘`šÑOtÖt&ôpĨéIèÝÝF¢¦ÙÄJ8Þ‹Äõ0Ól·‰M éqáÒ­[]uɤmå¹n 6äÎÁ¢ÓŒÞP$•4wk̈Q Éä:=¦Û²Õ¸Qh<áó­4c¦µŠé’ÒÑëã59¹Øe[˜¼õñ°Á4±ÙŒ-©h»‘ؤcP<é‘-z”ït§×ê2“L3]9‹o"H% Ý2̤Åt¶«['Úav¦ºeÆc+ʧ›ñ±‰¸"”;ÎTvʤ Qìf{J¾7'"Lò1êټ± SŠr§´vé‹–.kME™&GDõ†œA…¯CwóÈn&µ)Â0KNjôy£ˆ@Ei0Y‡L Ú²l3»å¦lŒnY–Tø3ðC©¬#ÿÜÒáTÊÜ‚ÉÓeô2±‰_Ûa“Ï‹"Bf9Ó“F(•0­¾šu€&pÙ`vIKVvв<šbÝ) t =ŠQ†U|í©ŽA~ÞöÕ¾ö>€A·t¦0u$`š>JªÕö*ИÙiXu±ð#avôåÚjc<H-¡ßhõF!©8×Õ F2”0»zÃfêLrV`êãѨC”©XO¬ËzÕLn5cئ µ§´lŒ'[tYY6"†¤Ó„‹¥0QI¦ìíòâËê‚b О²Ý5ðÃB(?»Ò„âs\c)×ùFÌJôe}aÛKk“eD’‘Í8"ësú…µÍÒ6dcP„®)Y³8‡rc,5²I\¹2“øŠGsOCtb(ÞÝ—“ƒ˜ªK]s“»TÖ`-&OD,Ðm‹Î[°`S³ë–ÙîÆœŠòzH³PšEC¬ +÷Í2ÃÊuûËÖ8B‹„ÐʱÊ­2´ŸœÖIsK†Ö¡U5ZÛ†/•ÅžÂâ±æÕ¼ÞÅC\– —cvwn´dH-³¶²¸ÕNçâÕô¼j™¦Òóô‚J¿¡wU:Lý*ýœ~¡Ò =£Òuô•®¡kUz„UéF¾ŒÇTpʢϪ´›nPézú¬Â»U¾oTù&Þ£ðçäãf•oá[Uþ<ߊíùÄJͬIè}Aå/ò— E®’èÖµuU¨Sþ²Ê{ù6vpzAáÛU¾ƒ¿¢òWùN•÷ñ]È.îeƒÂw«ü5þºÊ÷ð~•ïåoHsŸÊ÷‹¨ü ý ÁÐ⩘eFlÂfºì|['-·VÐæ—$çkḑÔbqKCAjéfLÓc}˜–À~—V­5¦7_ÍŠkHäšÑ‹}:Ò§-ÌÎë«F™1Ä}ûåèVù›|@ öÊßâýL;N(Dšw,âZô“I òÃüm•î!˜è GåG`î²+-3d§]-Þ¡¹ÉСÃAáÓKb%±6ÀÔuNTïÓºô]†Ön1Íңݲgk=¦ÕU]³KôDT³ºt ¡Íw-Àçk݉8Z},Ý'¼°U¥ÁV‡ÚšÔ­š™„q¢#–%šž€h鄌ØìÒ˵ŽD<ªéš•H%Å^N U-Ši¹Å¦†²ªV+I–Ä2™Q“ŠP†œî¬ÅCéò®ÖvÈhuv6j@åG©|ˆWø •ŸÇæ~ìÖC™³.‘Ðû$}ª<@?Sù?¥òÓò6ŸÑ›‚ä@»K¡ÀçlÐ'ªq†Á.S~燺¢qÔ!žåK—ªü,ï*GU>ÆÏ)ü]•¿'`,kiŠZ«aa™rNëªç´Žx¢V“è{^áTþ>?”‰ÚQ…SÐe«vÆT~‘_©^–æ•aÊz*¿Ê{PSˆ?$–^ËL^°©ü™6ûãk6¦òúx*¶C=y±[oˆzRp¦É¹XbNGÄ™6{ô˜%јÂÁ_:b67!(ñdu åÊ?ä×þ‘Ê?柨üS~c=N%¨ò› Ÿ¿Å?GêZþ¨ô!ÿBá·Uþ¥ ãWüNÆÒ£Ê4• óo;3G:cý°úmznJÎ?¼+nyO¥?ÑG ÿVåßñõ*¿Ïw"·žx[@ù›é‘GÍ·hìåŒgm÷åø å²”©¥MMòœŠW(qÊNRiÙÈ;‚é#&å³§–º¬µ“iÆtéXîD>ÑBá±íÃCV½¡b4€yÙË…ÝŸ¸ònµSVν$óééãLëÙÄF6öÂP ?fÕÔC8‰Ða×Îæ g|Ì]ÎÌPßÖ/‚þ ]Îæe'¹ ™â’¾Žð &·¯.k‚F©î°nIùƒ¦¾pZoi™\’Lž™ì{ÃqV|íÐ}IQi“+Þ|8±tZ]v/±³0g”ÖžŸ½b©<±®nÓýV<#Ç„á>”2“Ñn GD_‡–ísÌ(êÛG»ÇUŸ"7Éä¦2i^ zà²QÆÈºÛg\œA%ÃNNÕÎaÚ‰þºöd<’² ‰§á›d*øÑƒ-"÷ `¤:ÎNqé†9ºå+"WKF¯i{Øñ8¾ìÔW W3hûæ£lÔË83Ù)Ø ‚†3Ï8ù•XL‚Nõz,C)q”šVêr `çK >a[2×Cw“GuÊÆ¤›¶^ûdsJðÉܱOxr•#w\`e‡bN çd«áWŒÓÝÏ÷¢Õ”¡¡ôM‘ôú%›íë •cBæ¨K%É—Ù;ÉÒ¥*Ó™§d’œ9$©[.©6·fÿç‘3°ÂÎÍñ$NCéJºŠ˜®ÆW}š åx÷B9kÛOœ’í'ŽÌxNÁÜé&´{ðu(xñœW>@åƒh+7™^ õ0/¯8LJyåaò•W¦ ‡lŸC{ùÐÎÅJ¦Òaͦ¼I7c¤Ü¡I·Ð­Dö›ÈÄö›H•g¿‰\ô~ž¾€‘æHÁsUE?M\‡fRKù“4/“k½Ao?ÖæËcJ­ýヾAšÚVôó++ª¨¨Ÿ¦=Gų :–ƒr%d­¢T ÉØr®u¸eå\E_¤/A¢|:›¾L{A%@Kè6Ø×ƒµåt;Ý Íf@Ï}tfÍ¥™t7Þ|ô5¬öbå×±çUGnB_#7N?BÁuƒtZ[ÅÍhñ,óNžDÏøkó‹¼yûifU0¿Ÿf.óyï9þ—Ê`¾§JÎ:püƒÊ~š] -ç´ V«x–ù‹üAßÑûhÁd:ôù_s„N¯-ôÓ\ï½4.¨LZÐOgl *Ò5oën?8þzPé§’!³¬¡Éh·Bì‹h"µÛàÂí4‡.¦ù´†º„Î"æÑù¦dÐeÔA&uÒhûÐw-Elv@Á˰ú^©€. ¥ô ºü¢tÖ¬7Ðý0"« !ÅDÚEߤ0k!%é!¬ð‚F„¾Eì«ÀõÛxóṊÒwà¦\?B¦ó Fj-å°k~KÕSt&Ã7Ói~[a©÷Y*kóT¶! »âF+‘Jö§‡«F{ž¢ê»¨žzs€Þ’Õ´ÅÛoÁ"yX¹–Ñã ÷Ée§{žDO®N‡©?­Ó³°€pm¬z‘êË+¨¦Ö[%¨_p- n-\¤Ø¢W´¶yѱ¸µ-¿ªµÍôŠ*µùÓÁÓRïZ6³sm§\ †×Ð88b*"1ˆX< ¢Ÿ‡lòo¶cÀ‡>• ~>fž¨¼ÊV³1«f#=eçyüçÙoOÛq’«Ô ä(õ<%Öêi9°|–÷Ùûh1µ-UG—y=Ëò‹ ÷‘VU”¿¨ÖôõÓŠ}¤V}OÑÊ<Úº;H~·rÈ7³m‚·A­Ûá›;¨”¾‚°þ*¾ƒÎ…X™/Úï·ƒt*UÀºG±~:p~ÌFÝ øô9¼å‹pYëÒ~ôƒšx//ë=§çIô|×6í÷ð{ž^pÒ)¿.èÿˆ:gy Rq[Eáª:w· Òym¾g©®ÍS¸®+¬‡ã࿆ÖjtòÛä7¸îü»è $8eÖÂXM…ôÓ§ÄÑxôSs?­;@k©¥mÖ·Éü tám”LÑŠ›j1ßæ¶Zÿ‹TT ·8Pú[ûiëVäIµ iÛmxç¼^ÜØ•å2ß1’¹ ^‚—Cнñürˆ<Ÿ@qÀv £Ýëß ‹Ý‡Mç~{ÆbD}-â~5Ö´#Â{ç×!¾oALïGÄ<ˆ(xö~´Ãû°ôaü ŽÇÄw¼ßãK|Û pö ¿O/Âê×aûy‰^Ç=4‹^ýà– Wé5x¹–vÒè‡ð²d•×éGè;l¿ý؆ö‡YϨŠç§ÐôSÚEèyÆvž\f¥7ÎmøØŸVxéºìqÒû©½¹¢0ÔOá¼(ß{Ðs0z…6£ÀÏ1š´MjDƒi…4o•&Ð[vXåÉ…yšÏƒR°¹¼Âއj<ŒužU³*± œ^nërÖ"àk€¼²`[òÜí‘XÁÔ…CB8ñÿ" ôX½Œ`x&{)ì5$ü—iÔ¡–€] f½M¿„Ø’Ð=Xs&ý ‘—g͵œ~m›+OnûÓ»ÞEà$A°w:d¿ëtÕ%éÙ”ôlâår†!v:pì£bѤR>¢Ð¥Ÿb@éƒĻۆ Д@ôJW2è Kàž:@ãূʱÇo¦»¤Óo¿ýÇA£t9`AøYö3€\xž7ÁJ7Ø"ßÂèÛ4 z¡ù<èX -Ï¡÷1ߥ߃Ö(NÿJ@ný#h}„:ëAé#TÎ&¡yØjߣß¶;°Íþ«%ÅïÍÚq/}Þ8ö‚ªÀnê£AÕö€Ã!{&·¶aüOààäÖ[Ð')™ìEMÑRQ…Z¢m™÷nšPYeW=Žÿ`èE§FqAûoPö¯(eþåÜß êe¢YK Ö[Ä(ö¾½·Í±wl`RLÿdçÓ¬ˆ“üôÏ îˆØˆ9<•ò lhþ¡RÄgœa3Ôœ)ô/i† ýkÚ& D”Í4»·€ø_éßÓ!Rƒ§ÌÊ—ÄäNZu&8¤±ø? ëèžS[ü7ÈY\›N>»üp_í¹/«•ÏÑ tþ›þÇŽ÷àéü/ý_ÚÌ`I5~˜õ°ç+%§hñg)ùAÉÙÍý°³³›ûéïÃwsð9Îäêγ¢wMÓÎÚ´YV5#n«–ͬIÞ,_ èmÅöÔ5ª«F:·-ÍHOºÍŒÎi:›tð¨Vš"´Ô0 »!çÍ a¹\~X@ƒ«]T-BŸ4 ›Ú3ºšÍÆL5ÅHpOÌŽ®¯ÆJTüp†P;"Í%±ÍõËÌÞ5)‡%ÛÑYÒŽº:²l/OÜÑ~1y­•n§†¦¹çÙÃ$Û·5ÓÈJà¥ØÑŒTLÍÉ]f9dzByªd.îhNuTËê'[Uz¤Ôi´ãfÎJ²9çT Vá"܃‚ ®)x·t\:J©FÁÒvhØ“ðDŽŒƒA˜ö| KAt'zèEܪEôãÈ=gϱ(Èá€ÐóÔ­Šì)xŠCMçâûÛ{T G >ÃçEd…4Ð…×µmŽâ _â+Ïð5ñrÃÃF†yKÂ7 ¾ÅwTìó«9ÃÖ2ì¬`fgÌœž ¦Ô©ì6 Ú»,èR}ï¬5£(Ni”mm;Ç=²ƒÏñ=‡öƒ€Áÿù´èœ+AäµÍõU*tS(\zÝ&Ë+µP°ŒUYÆÈ²­"×ÅZ·¦™?ÊÚ,Sþ°Š*O8¯’ÙT‹Tïp±#]pŠ7‚’º®íZL¥gw)™³¸£â¾µ,¬+åà³Ìž©ñü;C¯× ÓºðþBÕͧŠ`Z±%Ü®qf«êLøUãÊE:jÚšq`>¡;|«4Œ{ßËÂDáj‘€¾Š6Rƒ¤“ºž\Ïa(\ÕK$"½¢ò\žþ³&ÝT)£3Õ¦‡@Ûj¥öÜ1-2ª X#5žE®é|×èÿÖþó@à-Æë´‹Ò,Ðì:†ð‚uè£Ñç;ÐO£â`¯ÓL!²â‡ÿ&;‰æÍ¡‘cÔ­œÂ“‡˜ðŒæáÍÃ?”Gý1&ÄÈ1×¢_ÉãÒ„7àõ_&ëÆ„§Mñ<š'|Ÿ@Â3Lû–ÍZ§Ç  p´ïÂ0®b ÝôÍÐC½ÌyJ&_…1ä@ß$û‚ìÃCŒÒŠûC„¸‹4÷á}•xÉWnâM²+vuo‘nœ$"IÞ&/ôOPÈÝ1EôѼtŠÖİ¿ííyt,¼œöŒ‹mb÷Ïèiorªy\ñòèü ¾€÷×ç¢ðË¿¢+á¿Z$|‚îcôüqVv ¤Ý(¼AëqÊ=§:Maƒw‚Èxq™ê1‰):×Läß%­‡>€®ã=Z‰ÞYJ–œDð‚ßvâÜùPK ²•GHÖ·$Ó #(org/gradle/wrapper/WrapperExecutor.class•Wy`UÿM²Én6Ó„n’¶)),%mÒÍEËÝ–#ISÈÕlÒš¢ÖÉî4YØì„ÙÙ ((*¢"DE­·A鈀¢Åïû>ñÂoð÷ÍL6³Ûm ì›÷½÷½ïø}Ç{ûäs? `½òã-~ÜÀ[ƒ(Á~ÜD¡ànY¹Ç·p¯oâxg¸/ˆJôã]ATã`9ß-Ã{d8$Ã{åôûdx¿°| €Ê÷C²òa™}$€ùÞ/ÃGø˜|íÃ2Ë0+ßex(€‡å;'ÃÇýx$€GÅŠÇ„ýAœŽOŠËìS2ûtŸŽøñ„ð‘ûdöY?>ÄÙ8À“òý|_à‹|)€/ð•¾*ËOùñµ º„íëòý† OUâ›ø–Hù¶ß ¢ß%ß âûø˜öà ~„ñü4€Ÿ)¨ßÒîíéØ=:Ü·{hxp¨gxdLA¨ï2m¯Ö‘ÔRQËL¤&6)XÒm¤Ò––²vhÉŒ®`ež€®ÎhGBþæPçÈ6ÏæŠ¼Íè¶ÎÝÎ$ S±K´Ø‹Œv¥-;€Eߟîãþû­D=¶c˜T”T Ö“ñÐ+HzèÒ;<ôɤwzèSI¿ÈC¯EHnvÎCr¹Û_Þïö—×>¿U¨€†qžˆ‘@9O+砌͡d,*…oec³(o™…Æ–çXÎ3@3tŽËœSØcë™haU`"';¿ÍÕÉ"pVÌ¡b,ô=‚ʱÒHôA¨³Xò˜èUW…RŽ­ÒF:šEÏNRµ­Yl}•`ç!TöÛîlÛ)žµˆS´¯„–fr)±–…~ ÕÃõ³¸ã,o“c†å½—^\MoÅßýëg¢ìÅ>òïeuHðö\ Jðjì·›ÈAùGà¢ñJb!á[5‡Þ1|q í½„¿¾CÈ·y[B£ªPGÆ:Ƶ.„•SºAÕVQaˆÙTÇoáÃ6Ô«rE½ÊÎ?é%µx9®²]w̺š?¾íÜþ²_ eÀ©­þÂN•ñ„;ສЙkÜóîù29_xø*Ïá²Üákq‹I’FK— µ:Ú6úÚZê™öƒ÷dß5ÄòZ–ðu¹”r˜/»^Eô{v=#RbÏ^ƒ×òlfßHP|9$þü7â:°Ù-Å@¤Eaï8¥Ð‡ë=%Èi à v¬EÒM®¤­”TêHj-&éFO Ž–$³7rVb˼ٕy ©2»Q°XÙ6lôÕûŽ ¼Þ7Óze­3«îDE„ù½mFYзš²@»‚”XMY!¼™Ü‹ñ6&ÌíܿÃccΖƜ-®-2{O Ž+)aØFëÖzCîõÔ`7â¡2·ùìêt¯§îö ÚÓÝàêVh£ðßþ?PK ²•G„¤«² B*org/gradle/wrapper/GradleWrapperMain.classXxÇþNÚÓjU8 ¤Ã” Ô΀±ÀY  fm¼œéðéVÜíQâ–b§Ø‰ÓH±“8=Nâœ8'ÙŠMì'NwzïÍé½;ùgwu:Ý-B_¾Íí¼yý½yï O>óð£Ö‹*¶á.ð2¹¼\.¯PðJ\€W)8ãÇ«ýxܽVÅëp·÷øñzoPQ&±ÊðFyx¯Š7áÍ Þ¢¢Ò¿UżMò|»\Þ!—wª¸ïRðnïñã~ z¯ŠåxŸ‚÷«X…¨X†³ PQ#¹Ü‡*øª¨Å‡U¤1!¿&åò\öcʨðã¹TÁ9Åc*ÇÇT|ŸPñI<¡àS >­b3žTñ|ÖÏIšÏûñ_”Ÿ_’‡OÉÃ/KFOùñÉè«~|MÁ×¥-wÉå~Ü.¿éÇ·T|ßQð]?¾'‰¿¯âø¡\~¤âÇø‰ŠŸâg ~®¢¿¨Úy µ½«ãpoÇûzº;÷ìëëìÙ+è:¦ŸÐÃ1=>îµÑøÈ’63ž´ô¸5 ÇR†@(¼½£¯µ³«£=çÂEÙßßÙÑ—.›Í#*ÜG­m ëê|mæ0¥•uEãÆÞÔØ#ѧ‰RI3¢ÇôDTî] Ï&Öv™‰‘ðHBŽá“ }|ÜH„wÚÛAg×­Gã4Ê7Æ_%u‡òM¶¥ë‰ò«ð8P]λõ„@©ƒ5Ã;¢1ƒ§¥ã “‡VÔHJˆ€’0M«=JÜÂq=‘4ø±:[ÏH,n3ÇÆôø°4vŸCFE3~‚Œ$Áe¹½§“–1¶/#*‹AÛ4y(æ¸eü<œë•u³£1{'«:bWä ×çÆr‘«M¶Œòº<4A^Ë`ܰÂý:{OÇ-ýTFaâøcL[ùIUºÒ3`$’6Få´Œœ«xÂApîUII3•ˆ­Iâú˜ÀâŒnññ”å€IªIEcÃŒˆ·2h6ûl-7Ô]8MòÌß>/¢¹rBíµÍpîË’¼ Û,j¸×jÁ-nÆMŽá&V£ ]$ ¿ÄÓtU®;5þ•;¤M)b62)4ü ¿Vð ¿Åïˆs\ àx*jÐgÿ+¨á÷øƒ†?âO þ¬á/ø+“jæBíÒ“£Ýú¸†¿áïþjHâ §ñl îTð/ ÿÆ–z¸¯SÖåXŒÎã°Ý<™ú0k€srRÃóq›ôâ3³Ý6M±O·F[“IcŒ5!ñþË….@­òU¬iI‹Ÿ^K·B,`ªe§Íu(›gÊ¢d»P>MˆBM(Œ¨ðS5Q„ÛXF®a¸5ÅÙ$BÅ’Nc¹˜OWD‰&JE™"Ê5±HQ¡‰J±XK4Q%ªé´9î+ý=“/Rq+:fd¥AE,ÕÄER_ßQš©‰eb¹À¶6=7­Ð°AwŒ1B‘˜žLŽÓ³¡£f"äªbçM˜c¡›Ü=i„j×$k›g¥iÏ‘cFÄÒÄ ±RJ ib• Û7¹)á\åY>Z-.fh÷š!%䢄¦«UHŇ)¥Ò«¤k¢F¬ÑÄZQ+°‰<ÜZŠÛÅ&”7"Ñ£Qc8Ÿ‡³"ê4QkYž=Ê #×f¦H7ÛCÓ>qå5KcѨ‰u¢‰×QmX—à6E¬—÷ã:á¼ÅDRoí!3OöÇoˆóôL7šºúù4ÞBÓÕ÷rÏñ`=Óut޲Ôã2/Õ“­‰‘Ô˜·.¤Z†¯œ ŽFGR ^¬5ye7ßÙò ì©c¾ÖxŽYdvÑc+1¬ì®X=ݱòÅc®šG£ÈâÂʸ¥>g/‡¨”Õ*«^ .—Æ®¾ð(Aeys;»S­v{N¶é­ÄËyÓ»›åO,³íÍézù±ðEå)„]7'c¯V1Ý͇ðùyÏV¾Âƒ#‰™²e4Ì£³‘Ûóòj;ƒÃž7Ýÿ<ÝÆ˜lõTýB¼3ríü0ù £ÃÜÿÒðpwÎzÝv™æ ©qÆ¡î`ýVa¶ð!ˆ rD¾š»(â~(k¯r0k_Âý¡¬}))„|Öp½Ž0ä¸ 4L@<`£æZhWàz®šƒGø[„†‰Ebq†âŠ {| º'±°›‹oï †&PØâ úÒPƒ¾‚GàZ(êòÔÞ4ŠÓÐfÀ%\*ÁƒS(#eyKA°@Ò. úÒ´N¢¢E *„N¡’(‹ÓX’FU'Õ-þ ¿iA¹YÚR´.X4‰‹ZÔ Ú0…eCÁ¢),çX1‰•MaÕPÐ?Õ¸x 5äµ&µ3–ïF€ë:z-m­¥ÃêQ…,G#.Å:ìB3öÓmWc=½³¡§° ·b3nG ^‚­8ƒ+ñZmï;"ÞQ;|ò99Já!Dù%Cò –£XH9÷ãĈµÇ1†8½~=½n’K!9\Kh eµq(…ŸÒ6ñÑ–"·3ÔëN2"§l9Ýüæ«Î t„¼ð·–¾œBíPC nõ“ ƒ«\PchÆ!¥T hG:è’¶QKV¸‘JÀþ:f¥Ê²+ð27³ŠÉ®Ñùw6'¿:³ò«Øö Èâæ ‹V¯ÊV8uük 4Âi\2õ¹ìº³ØUeØñõî²»—®“zï®À†46¦qi—¥±iÏ}(éšÂæ¡Æ \qŽ2Z[ÒØzª%0p¥ïlZØÐ;‰íxÖ9W™Ö \uÖ–UNß\îj²‚2€^ÂíC%ú™:ƒL¢«yf¼WÉ݊羜Ió\Íðw€ºÚÒhßÓðJl}:%v0uwv5R“]Î4vw¯›ÆØ#1ÖíåQWÓÙy‡º‚¾s{ì³½¼è=çÈ}%¶ÐÁÒÉmö/°ÉßÍïÝö¯cÏúü*¢æ%,UL¤•LŦs#}¦—¯`Ô·0mw3a÷0Y¥ ”ÐHKo§í²Jµâx!á+ }“X³˜x±£$îpíÞg§.ýØ(Jcßݨt’•›ýi>ŸDïLäì´(!…¥Lÿ™ Xa_ÉÝÂ.÷Í.÷Ò)ô‘i %L ?7nÌâRêr¼jë¥ÿPK ²•GÙÎx ´"org/gradle/wrapper/Install$1.classWkwÕÝ×YŠ÷Þ3çž³ï9û>ôÏÿ|rÀFü}ºqXÄwD|WÄ÷D< ˆ¡cdcˆ"C c2xPzù(Æ¥µD3!âˆ[Äd £p¢pePÁ÷£ðĺƒ’h¦ÚpÇÄภjÃðÃ6ü?ñpˆúÑ~‚Çbx\âŒâ‰(žŒâ)éžñ´Ì&F´ÏFð\'#x^¡}ʰ;m7kØ£VáNË6Vd&Œ)#m¹i÷)´‰MÎ*ú–§pYmäYc%ßrž=7É1ýô}ƒœ´J̲®ó •/y†Ø)te\/ŸÎ{FÎ6ÓG=£P0½ôHÐö×›r~¢1Ìð¸Ñ»iópiR!³ 'Ÿ¦“ç„VÜ*vnPèheÐ)ú†m‹Ý6˱ü '—2\˜„f£ÚZ/zQ‹QwTÐúݳ¾2c9æPirÌôöcR‡xFÊrÐð,W•š¬R ú ã0‚m‹&5×,±˜Î\·Fg,T{²«±¾1²0WýPNŠÜbu*\2ûvzÐ7¹ ×óIÃ;bzùrÇ4sÅ÷¨c»FNA™ï2æ”i“/DÖ^ç& Ïu}…Õ Wx¼P[庆)ÛBÞ!(vËšÉk1‚¶¶®J~ï›0³iÙ°•w ¿äÑëÎÅuqÈÕlÉóLÇO÷3S¤YØa·äeÍ`ñz5¿=bÆîv²¶[da÷˜þ¸Ësà§:~†ulÁV°QG¯ˆ[p«ŽMجã6Ü®£/ÑW}(/c·Â•„ÙU²ìœééø9^Ññ ¼Êzõ¸GtL˸¯éxoèxSÄ[¢{ï(„{ †çëø¥¨…_3Z­btºN<ý&‚wu¼‡S:ÞÇüVÇïð{â:þˆÓ|¤ãOøsë˜?eìça0`Ú¦/NH&ÔõŽÓÝÌFpVÇ'8Á_tü癹ÎCV¡ ¶$À:ß¥á§øLÇçøBÇßÄå€,ºc)“M5TX³d r~Êi®¾p‚Íz¦á›äžÂ–¦EÓ-¾ho…’²Ç—çM¯!°âD82&ÍFÚÎfâÛá~êN695©ª¼àĨï*…ë“ÍN­Æã§Í*ÔJWË Üjœ+‰sçXѵK¾¹×ðÇ™#›5‹_ÉÆ‚ìU·üRÙK\ÐSc»LêÍêqpr¯@Þvék²ï;`þˆææºk“ WÑ‚Œ ®(IG¢íwy#7ðA*]ƒ}Ëÿ†Ý0yñ¡¾b¡†±­ê¥Á“>ÙÕü2‰/Ör{ŒÅ!ó]hN¥©Á¼U`v_ L®ñ¦‹Ü¼Ýêžu·åüÃF¯ÏCÛ$Ðî¿hõ̹˜ Z °Yôýßo–zW·]rå ŽÄ!󨨰ŽÉ>CÒhmo—» `Û[myÃUZ^r•–÷\¥åEÈçtˆÿ}ØÆÙÛÙÛ‹DØÞ˜Z?•ºy-©î„R mZ*žA8•hAkê "Ѳ;([9Œ|¥^é߈o¢ò8âMB+zoñ¦%Ô[ç=”ú-e,;‡Ø¡3h FzËã+(ÊXy†jCe¬šÆšõeħ±š %ÊàÃe³¸üt03þ"Ú)h¡íÓ˜XÒÿsþ‡ºËX=">gqeÕ0~?S¥•‘ UWß¿!ºî³è¡;p¶f¤†f× ñÓZ…­ZB; ^ªÓØ.½k>Ctk¸!ÆuŒ‘s”jDxלúï§U¿4è,ã‰ÆÿÖYVe¡››¨-£x2†ýVfW]þ¸À˜¿­Z%´6‹s¼~$¡®°Bª:ŠÕ”½H’C[È¢ ¹s˜½ÈœdÍIòæCVö<­ÿø7vá+ô«8Tßkq—ºƒj÷¨ãȨ“Ø£^Áz<¦ì㯠ìÝI¦†8s=îb/Œ/É™»1M¸RåQRMá~U8¬vá^bia¼a†¢çU¸_5z|»Ÿ~÷Q£Q3ܾ“~÷\ä^Qž†SeÜ|z "‡«æÜP¨ØÄH¥ýU¾âÛLøs‘;•¿¯PK ²•Gj j´V8org/gradle/wrapper/PathAssembler$LocalDistribution.class•R[KAþÎfÝÕt«qµ¶Ú[´yˆkëÚâ[KA!´…|(L’!NºÙ “M‹ÿJÁPð¡?ÀU<3†Ò¨|Ø™sû.sØË¿¼Å«9Ì`­OMôÌÏ}¼ôQ&øm5ÈTŸ0ß芟"VY¼¯ù~ܪ+Mðòc5¨ì6™îÄ-Ú‰ŒiÑïKùñÞ` {ÍDjÆyTªò„½êôñIÑÉlóàÖ²¶$,4T*? {M©¿ ÂFÖÉ¡ÐÊäã¢kŒm¯Îöµjs•¥„à M¥®%‚¥ydwªµÊ-~[Ø‘ùÿ%»žRuóæîŠ<Ç[5'_³¡nÉë$œÙ6¸E<`=Àfø˜õ±AxwìÆZIDÚ‰?7»²• U³Êò46¬óŸáñ?S@h¹ìà‰=WÙ-øíÄüºPK ²•G’cJK!org/gradle/wrapper/Download.class…W‰g~f³»3; 9X(¦ lî" ’´Ô$vÛ4Á, ]Pq²;Ù,ÝÌlgf Tm½ªõnµU¤^[–¶l(ÐâUT„‹æ#bσ*ÂGe|LÆÇU4ã*šðIãSbùÓ Qñ|V4ŸSñy|AÅñ%Ñ<¢íÇ|YÅW𸌯*øšŠÍøzÞÏD»‚o¨xßTñ-œT°SL¾-Œœ’S žTðßUð=ßWðOÉø¡ŠÓø‘Œ§e<#ãÇ A‹™¦afuÇ1 ñŽk,ì·­œa»Ãáèø‰á¼;o˜n&©»–-¡qÿÔäSûâñ#£wNOÜ-AŠIX=j™Ž«›îŒžÍ "J «F¦ÇÆöM‰Çí£h[³„`ÖJ§ ZÙ8nÙé´­§²ÆÀ¢­çèq`Ü[’ÐÄyV8ÌX愾`HÕéYÝLÄ];c¦¹-\µmưvtqkÆÌ¸{$ŒD¯ããZs×Jºf$øG­Ý7gLc"¿0kØôÙ¬•Ô³3ºó’ÐïÎg˜ÇMõïµͬ¥§÷ I˜ˤó¶±2ÁÞ ¢Â³’*)HØ-gîÀôT¬jÆËd /LYO¥láïÆÚ­D!e8nÆ,Ùn¬Õ• î;ž4rbÑ‘ñ ÍËnc¦kئže1^?êõîÙ‹}lÇ8s¹×Ï~}÷¤îž³ðu÷žECwßYø) œñ¬ÝÁv‚l7q÷f„°hÇF´¸“+ÝE;ˆá.ï­ºÞó/y#ω8æÇ®Áçb×ÚpðäËh¼%!-!tjÅ{#w|ro¥×¨çQ+ê•23€wavb#v‘ï&J»¹2Èѹp‘ßÄގy¡“÷‘ ¹ø ÙøSù(a8IfÊUVæ«e˜¯–`öá->CŽx d¬~žíMÌ"ɾš|à”X,H °×™Hÿx¸›T¾'ÜÃv"ÜËvÐî] Ü/º`x@trø–fåelO4P«!žð÷ÄH žF‚ñ„‘ã ¥7žhö±!mâçðŽçÊ©ïðÎÐñ½LA-<Þzu ¹•Çìã!DЦЕàêSÁO=uÓÞÅla潋)®o†#?­Œà(ÿ´5D¨F˜Þ>ž¬—^¼8LB-J‹ÐïšúÚAÀÕÿPK ²•GÀ>ÆPN#gradle-wrapper-classpath.propertiesSÎÍO)ÍIUHIMËÌË,ÉÌÏãRöÍÏSpIMV02T02²24³21Qpv Q0204å*(ÊÏJM.)¶M/JLÉIÕMÎÉä**Í+ÉÌMµåPK  ²•G$Ù–eÎbuild-receipt.properties5½nÃ0 „w¾JA”3hÉV ÈÒ¢kAK´£À’ I6úøµ›„Û}äñÈau³½®~à¤C þœç\È/ZIlP)Tˆ¬ßä^`¢÷®¼[­ºv°Æ²í*96Qo‡º;Ÿû–h¤¦gT5µp‹¹ò¬-o(¦DvfÓ.Zò-=Òœî´Ñ7§ìbÐ(:!¤‚˜¯‡ùÃ…õw¯~%°òÔªÓÄ“3°¤xgSô#’y~kæô@1´„í±äB™µ(_àé8ÐPK  ²•Gorg/gradle/cli/PK  ²•GÈô–<S1org/gradle/cli/AbstractCommandLineConverter.class•T]oA= ‹+¶ˆm­ßÐå£tÛ>™BHÑhBªÒÄÇe×m`— C£Âߢ/4ÑÄà2ÞYP–´ôaçÞ9{ï¹sæÞÝ?þpˆ# ìèØ5ÁŽÏ•÷By9yE†xÅõ\Yeˆæò§ ZÝïp†Õ†ëñ“a¯ÍEËjw I7|ÛêžZÂUû ¨ÉÏÔð…c:Âêt¹iw]³ÖHaÙ²î÷z–×Qduß;çBrQfظÌõµÿŸïè&D•V«\%6Ý# ǹƙun™]ËsÌ·¢XË3Ø»ö·e9†H‹%Ò²¶ˆ‚®IÒk.Õ=,È÷-1à‚ak^ÀÌÁß1½è”•¬)…ë9¶(id0^}±y_º¾7бÇp«é:ž%‡‚®ì`i6¢Êt*­ã°ŠjºBL¨ FÓ ›¿vU³Wõm_ÕIÂÀm†ÌuוD ûI˜8HâŠ7˜†Ô¼&†í%D…ËÌDÕ„3ìqON›B ¡üä:ACvs×Ï€úÒbÁÌ0¼\8´ùy’ ³3CEwþ&T*µÔôkYú+$@Bèß!KÍ¡5I»YF6V¸ûANwh`+´&ÇXEŠìÝKHš,£Î­Qž¢ûFV#»ù ‘ˆžJ#h…Rq„ØÞñïÓ +dAy ¬Ó~#¨TçN*)oÞ°À»OO„¢Sx€‡”«Î‘ 86'çÇ?šÆ?¦ø'äk„<ų@z†ž±—ÅV`·ÿPK  ²•G2_e¦è(org/gradle/cli/CommandLineParser$1.class…ŒA Â0EÿhµZ v庈kCÏPEÁÄv¨-iIõp.<€‡S\ºp>ó?fÞëýxȇCD„èln¶àm­˜°ÈMÛJ]îkÍ'iÛu#ï’0ßèBWëêÀÝÕ”!f„¥±•¨¬,‹BÕâçy•@ˆwZ³Í•tŽ!é‘BI]‰ã¥á¢#¤ÿHIê9|gèߌ|{Ÿúü õ-™|PK  ²•GRB ¨÷<org/gradle/cli/CommandLineParser$MissingOptionArgState.class•]OÓ`ÇÿÏ6º­ëd  ¾2”½ cˆ€€&‚/1N4Á`‚W¬™5ÝSÒß/¼ñÆý ^H¢#ñÂà‡2ž§-sKÆ–&í9OÏù×´þþú  „1äUÄQˆ“4%Õ«*˜–gE)ÍD1Å5ÅÚu KD1Ç0ôØ“ŸpÛÑí —»:ƒö@Ý^3¹ãèÃ\Ù²«ÅªÍ+¦^Ü1âšU«qQ)B÷ý&Ž@–)ÊŠ! ÷ÃB¶@n“!²fU(ŸAi¸¾WÛÖí§|Û¤“á²µÃÍMnR#î ƒÒyd8Ž!ª>ò¶] ªZìžEGO*%Uão·uÒl×GQ²å—ü/š\T‹®Mn˹-†0·«2¿#/’–hAlu@t€ö×ý„%Ö-q*Ñ2ßÕN¹wÓ e‰&“»¢Bµgs›Q\gÃó¾†Þݧä-FèÍŒ¼•&Žã nX{öŽ~Ï‹2zÄfZöCà Rò6¯AÅ Ó°ˆÎἆ%ŒGA¬ùþöˆaª—3ÌöÞ@†L÷v0Lc8~£c†s¸Cª7ð]S—af²=/Œêµb¯¦ —!ÝÍiú€Å!WiXNƒ$!9!:"í>i!z&òì¡|á'Âû¤†Èd&Ïw`8Ig£¾9N‘O’XF×iŒÐ¥ªä uD¾5x äRlâ( Ž‚38ëqhKÎCŠO ™ÿp…©:”ïm¸O.í6pÉ'%•¤É0€o Æ%˜rŒ¶C?7åo@ãÓ¸ <=@QŽÏþ·O•îì b쫇Ó|C—Ma"€Ü!˰߰°ý¶d^7UØÜ°Ë^ã¥t“^EYÏ3G5Dh8%hù+aòVÂEÒ3ôD*öPK  ²•G¼¬M2‘ƒ=org/gradle/cli/CommandLineParser$OptionStringComparator.classTÏOAþfºeam¡ò£`µ‚Z¡Pd) HJˆ¤‰ ± ‰Þ¦í¦ YvÉî–ø¯ÀÉ›{ñ‰&Ƴ”ñÍv­Bkj8tÞ›÷¾yïÛoÞôÇÏ/ßñÌÀæ jѱ cÑ€†%µ˜:–UšlQÇŠŽU†-éÈ`›!–Ÿ?`ÐÊnÝb©HÇzÕ<®ZÞQµ)2ZqkÂ>žTû(¨‡ÒgHïÒuöO:²{|"<¸Cb×q,¯l ß··Yq½†ÙðDݶ̚-M §®š½žoy¹Þ•J z-ÜQÓ¹|åHœ ÓNÃl#KÝ‘ù]:ã†ÕŠŠ} “^!üC× ÇÞýÞ¬\k´W=²jA©;¢ñ÷ËW{D9•!¥×–ëûùÅ’º„Üÿ†öeÃAS‰²õ/ªÍ@Úæ%·º…ئRƾÛôjÖ ©n5ÝÕnIJ dO±®cƒáy_Žeá[»Žo9¾ ä©Õ=Ó}ªã£&fH]çͰqÃiºR¬-Ãx/µö¿ šÛrÁaø†hfúÁ2=BƒFâ=Y \ K»aÚ™diZ_¸ÿLÇ­*ÈSH‘ŸhpãPsEòD‡?!Fq`§p˜öºöZl{ñïݺ–=ƒ1¡#Î[Ùsåž!®µ¾B{Ë./z Õi|ŸþCÀG1ÌÇåã˜åÈóIùVy&$´ÖnRÞ$¦B’;¸C'r«Èà.ÑË"‡{äi©"žˆ¿¤LŒlr¡ðú"ý.0Øêùõ3m`§Y’(N‡Í’”›V055QáM²<’“õ–3Ýt Æ©`Žò1<ñ³˜ mcd3B£ä= ‹Ô Ý`OùPK  ²•Gè# òGK1org/gradle/cli/CommandLineArgumentException.class•‘ÍJ1…Oú3£µ¶Zm+êÂî´Uו‚ˆ‚0¸°¥ût¦‘™D23êk¹*¸ð|(1IK-‚YÜäžÜûÝòþñúà Í Ø2aÛEÝEƒÀ9ç‚§=‚ú¡O©QzýTqv†…K9fUŸ v›Å#¦ti¥æË€FCª¸Éçb!ð„àÄ—*ôBEÇó‚ˆ{—2Ž©È… ³˜‰ôê9`)—¢KàÆ,Ihh©¿\´—xû¦ &J>™ùÖp1 Y¢Iõ¥¥¾ÌTÀ®¹ñÛúËØ©”Q„cB… óWì~Í¿ËDÊc¶¸D yý få@Ì]õtžÓ»ÓîLA^ìýŠŽ%«6uåVõ©1«Òúš¥8(c]3 «2gÝèy½»íÎñ¹Ÿ°=Ý´oa³²ÌÃÌ©Š kqÓv×>PK  ²•G?hÿLJ=org/gradle/cli/CommandLineParser$KnownOptionParserState.classÝXkxå~¿d“Y&†…V§šds‹Ð´!¢¤†@LŒ´ÚawL73Û™ÙìÅJ[íÝ^Ð6V{±ÚzJB¼Ô^°¢õÖ¢Oÿöyú<}úߟ­=gfv³›Ý°‰?ûç›óïܾsûÎîÅÿž@;Þ•±w® %!£cL!XŒIòòy^l^^\¦OIcBÂ×ਠw1ô…0¾X/áËLt·Lâ¿ÂÛ{$|UÆz|=Œ{elÃ}2¾oòÉ·d|ßaÂï†ñ=ÆÜ_ïã¼üPÂøø8? ã”ðcu°Âø 'yy(ŒŸò÷aàgLûó ü÷Kø%«yT¯$œP¬¤kXæ€k戄“„Ù—…¡m¯iêvOBsÝhí³ì‘Ö[‹'ôÖXÂhí±ÆÆ43Þg˜ú~Ívt»&›‡@¹¯Aàê˰úÃqélÅ€1bjnÊ&Á5 Žwúû„fŽ´÷îbqî¨áÔ´]þæ¾L½Ó0 ·KàB}qòeF¡¸ç‹;zyÎlõXqòÖLÒŸ;¤Û´C ÂDú¬˜–Ôlƒ÷2ÄÞXw“iM˜¾U9ÑÜ^܀¬ä[Ù2»í‘Ô˜nº»êóÃÕ°ÜT ky‘|q«Ø÷šíöëG\R-ÐV¿l«FtwæÌ[^Zßp«wâL&töJ™—²%FÀÚ¬¼ìuu[s-ά ËÕí}A*I/´ém^²åE>È @àßÿéYœºÝKá’#m¼´óÒÁË^:yÙÊ}` b(`VÊŽé7œæëòhZ8h ö WÁ ¸‘¡'Ö̇²Û¶µ£Ügøè× v¡GÁVlWpv(؉)èB·‚A 4.nS:“v‰éAø·ÇÍ :WýV­ÖÕ:ujÜÒÕ´\ÕÕîÔUÍTÓßBýq>ã÷:¬ÇȲßàI6ï)Oãݦª%Ý£6uBsÔ¤mq=®ÞaÙjlÕ-N+8ƒß*¸7+xC ÎbH”À¶¢.ßk8e•Ÿ9tå TijÍÓ$µßú †*˜Á9 ³ ÎcNÁsxFÂó ^À‹ ~ÇÁèÚ›J¸ÕjFº£Nè¶¾dù/á÷þ àìƒ?áBŽïýòQð2»ýÏxEÁE¼*°~!Å®”‘ˆë6õØ£ºªà5ü…—×6¤ÕŽד¶#ŸÄÕf"z¯HxSÁ[,ümüUÂßÔb•ªàÞ¸ööjŽ%¶Ž¦ÕpÍËêAMËi ô¦/}ºâ½2h4ÔÚi-§lÓ¨Óo/ðFì[Xuôlxzª ½o,<¡›#«—^—܆ÐZ<¾€;­†^=F݉„5‘yè±– g7ùeÿ§ÀÁ%8#ÿñ^ª+´XLwœšöÎ6jÙ=KÖ• xrá¥ò^ Éié§ô¶Ž/þ´å‹=ÀT¾Žqéܼ42Žb6Œ´‘ú†ü¡vc&¨é>•ܰŒôhå0g‘|,eŨæðÜC›Þgm}C~RqÈâñùᦊl¹>hAdýf›^]æ2gb“‰÷VŽ÷ö% %ÃjÝO2Ü!›ïǃ·–Lê&¥~sÁÁp‘fºcý¢9Ov­t³YSÀr\’w ÒÈ7ÚV*9dpÅ®Îñÿ€ÎÞ[™ƒ [³Æ3±¯½œGÒ©7•~’vÒOÞrDx¤ (ÂS…÷¥ÁÂûÒlá}iî ùïz‚K°»²’‡³„g:ù$íD)a€¦hãJ¢b¥Ñ9„†gP6…òhÓ¤hóÂÑêÐVD« +Ÿñ$ÞDë•hÄ<Y<Š*ñ6Š“¸JœB­xâ ôM'ÊX>öbàAlw‰±å¥͇<ˆ­/#ëöãS%¾?:Ї°iÊpdeèy¬.ž…4pWÌ òÅÆi¬NGò .oœÅš ‘ µ§3·ØÈOAO“õ§±YœA—x½â¬wƒu¾öÌ úñi mps`ãYOã6jIKxU“¨f}³X'0‰•sX?ÌÎÝp:Wõ*¾¾`ªóPÅsž:Ũ<%J:<¥ høJžÌÈ)g¼x)‹?œá¿%m¤x€INeìÈIÔeYè{­º ×Vðþ6úZ7õùl¢Ñuö€Ï…N¤o~e:WŽÀ,Ý{›fñV[EÀÕ‚f¯kú›§Qsêýùbj/ ƒ ’sØ<‡:JÇúHÃ4¢,m‘&fB‚¦A¼-þ¾umY 6¤´÷óMˆ®ãÔûÿ$PžÂuˆ X#^¦¬½H±·‹×0!^Çqñ&Å›xX¼…“âm\—ðžxÿïR,þî9¼‹Üœrv˜²¢÷`nÅA’ýá3^†ÿƒ*ÅÇ‘óƒÀtÑøYÜQ ªG-±M²$b´±©¹:T]6qfA˜ñ´îñé2Y©àÕ·ð XPa âA…)Ѓ Sp‡Wa `Ô놧á0>ê%Y9¶á®…ŒÓ÷!þìe} n§/*ÃXO߯ÿi;†ÇBòÿPK  ²•Gk±ÍÛ7org/gradle/cli/CommandLineParser$OptionComparator.class•UmOÓP~n×ÑQ:oSðD oe€ œb0™!ñcÍ,éZÒvÄŸáá‹_ÀHbøì"žÛ6s°JáC{Ï=ç9Ϲ÷¼´®~ýPÀŽŒ4ædôòWæ%,ȱ(c Ë^JX‘‘âû^IXãðu E ^3tm–ám2$rù}±dê }ÃÒw›Ýù¬˜¤¨Ø5ÍÜ׃ïC¥è}5\†ÌÞ±gØVÉnkŽæÙƒR¶,Ý)™šëê„XªØN]­;Ú¡©«5ÓP ÛЬCæ“æ¸º3y“£È Õüú»… ð,Æ#òeâ´}¹À0ïЂ/Ò]÷¨i'šjjV]­zŽaÕ‹ S¹6ãÞÁ‘^óŠ~ áÛÂuªÐÆ- Tøt±Y+yÕ&ïdè®uKóš<£•ÿµé¦ú¯ ñYÚ$j¹j7š¾cð¶Èv„ŸçÔ 2èWð[¶VïØA–Û›+màüSÞ*(áuåÍB1lņ,i®^¶\Ýr Ï8Ñ;cÅ Œà=Ãx\Ö8n”¡pﹸv± r CQ¥£o *]]÷‚ 4¨ý¹|[TuÞ’·Ü%`anošt¦€.AƒAiÏU¢ìÑ WÌGÅµÑ ç®S“/c¾o½4<}ôu!ð–£ÝíTZi®œ>‡ðƒƒôîâJv…!’•€a<Ÿ@*QèüÈ’´®Ìœ!qñ ;Gò'º.!íÎv¨ÖÅ ¤ø¾{nD<ƒ|ÚŠÖ‹1(ÐÁº0‡Q¹ôý“¬à IÜó9žbŒ|§èbã$‰™m:ݳðtÉB¼HOÏ\¢g–ž3(§‘W€­`iL9ó¥I’„ ø…Äk´ aÎXtβ E˜$ÂÙÈûøiÌøë,Ð:AyLS)²”Ù´"“"J?²QúA©XÅè_PK  ²•GäbÕ'án?org/gradle/cli/CommandLineParser$UnknownOptionParserState.class½UËRA==É$a2@ñ…ˆ(Éá¡"ˆ"¥¥UZ…²`×$Sãèd†šL”_ð_\H*~€ÿàÆ×Â7º°¼=™ B%qáæÞîÛ÷œ¾}îÍäýï·ïäq[A ã :0ÑA«œ0“ÂäÅÁ”‚iÌDq5Šk rÙãžÅCüw˺»& êÛÖÝe‹—Ëz™abÅqœáò¢¥ç –™[vJ%nWL[¯âFêàó !î É•güÏYÜ6rkžkÚÅ ‡X†á£Ì>O±ŽŸ ‘Ó6½E=}œ±9A{ÅgÖÂËN‘Šë)«•Ò¦î>æ›–.^丵Î]Sìƒ`Ø{j’HOìç¶óÒ~¸å™Žý—œ-”p˜žßeèÞ}^^rJI·=R7Ù °cS†ë­êÛÞ’{2i·OŠcÒÞi nÛŒ1^ã#rÊÞ²t1b7Àðê?4°yvÞo²´=)L^˜)a¦FZÓËÖœŠ[Ðý©c9â*zÑ'̼Šn$Tô ©BA—Ša F± â&£¸Å0÷ÏÓÁ0ÕÛÔÓ –mGdúá6Ša4Ýj3†š C'/ïn{._çV…öýƵÕ±+1DÂúX† ¡UR´È÷Ô%òH¢}4±ý´+Ñ.L¾_c´±=„´ìÂÚøä:"›‚L3þ2û…}F7û‚>ö§èL«`g%.dþJ\)ù+QLˆ¢gq.¸:K^dIá×µ{""¾ù¼jõ4àe8Á™ ²¶È›#àïu`¹¾@ÊTÁs䥓À?|pªšP{‘Œ‹þ‹˜ï€f‘rÄ m—ÔÚEhQrò!£"XØOÄÙ¯º’UVêH/.\¤ 鋘6–?Û9RÕ?SÍ©UÕ@çFcHû:‹UÆïŒ„1Ÿ-‹NòÉcjXücÎâ4Uy‰<blfq=¬üPK  ²•G"zÉZ’™ &org/gradle/cli/CommandLineOption.classV[sÓVþ”˱E Äá €cÜ”¤P·@H€¤IC E±UGT‘\YæÒû½ý ¼ô­å¥´S¤ÌtúÄCgú'úCÚ~GVdÙ²K¦“‰ÎžÕžÝow¿=òÿú€—ñm;0%c:Ž6Lu`;ÞèÀ f…ô¦xÌ%pó ÜÄ-ñxKÆÛ ܆*cAF>ŽÎê©‚4!½#¤¢x,Æ ÇpG(ßÁª%qÖKFIÆ{d«äè–Y–Ð5~G½«æ*Žnä¦4gXBÇ”^4U§bköÖ¿©n Õ,æ¦[7‹Ã'yBQíbeI3é%Ú°5Ôr™&›u#q2QÐÊy[wÁHH†ÝSYÐJ¶–W…ɬj›ÔJˆëf¾²@ØH7ºh[•Ò¬î,J8ÜÚ²‹¹¢­ -—7ôܨµ´¤š…qÝÔ&ÝÈnÑÝÔ“RéŒ1G³ÕC˜‘µ š(ONT–4{Z¼À­¼j̨¶.öž2jyiµéý~\P®SDz5â,êìžc¬¯¡KBO}p¶ÀÐ,Ì®ÙVÔ!^ÔœÉUmH„(´¯Q×"lbQ-Ÿö¸#a("ÎÀZêrøú£Šw6 ivλçžË=wþüýý à_|d°éÃŦ‡’‡m†ì©TÒœ1dª{m·÷C¾)•¸ô;BßóND™ÅfÜåQ›kiïã¤k¾É„aáöÉÈXÝqÝ2ÜЯܵRB7"ž$‚(ÇÍX‡A¨y/A7’A#î÷¹êÙ>£ºÊ;‘:Ã|¬(ÔæF ͹=”æÞô©U÷&K¿õcEZƒ¾P†á¢Ú|äßyq-£¥ ëS+·Â\ñäU•Ì|HQåS$Œð°Ã†Ýêdíú݄3¬1Tþ‡MZñ@wÅ¥´K)¾ãØ s˜AÖC…áhúU0^]ºí<Š. ùu—Ê“Ga(M"¹%zÂ.ì—…cg"W=º„d1föÁùIƒÙ”d}ÿçFøø¸´6,¤¸ˆO).a9Å¢Í,se,~BèŒÅÙ¿Å‹#ÂHpð+¼o(8„îYÿ:nYê² XÁGðQW¼ƒwe|WÁ÷ð}?À%dîæ73¶5Vü?–ñ6ÄFîeüTÁÏðs ½q8œé©ä3‘»×x[‰½ÀSç/²Ìà”‚ü‚WÏ&SƒwE>£à—ø‡F¯‚)L+˜ùý5VeüFÁ'1§à·øGyÝŒ`§ÕRÍ«£Wæ5‡®O™ÞžJoÆ0íLA»Àè ûEÆ.ȸ¦à:V¼‡§ü«Íä61'!œu‘nžQœÃºwµ±Tš¦îÊK7ïrXrúÌ[­1œEã0w‰$D‚ëÏž¶CîÏŒm  kV%8Óûp¶¼y'ЃØÓZT‰1жO~0ÈúÍ¢–ËšQX|ƒló«%>o¶ª‹èwÄ l𤠼(èØt((ÌTãØãyN,áx¡0^*QpKðWj'DG ƒ\…ð!®Ùèþú ׇ6¬Ùèþú!$ù>Œ!ÊÀ4€0dî¼’»)w¡¹[ß@„b”bìäu1N±…bâ’ýkP$Lç×°MÂUœ¤’ðWlŸ¹Vê´ Gn"½†{$ G»¢ž^FHŽbûp,÷>"]±®Èv„qvåοVî¼w΄1Âç(|v3äü­ßA©“?Íw2ä{1‰û0‹]°±/â~¼„ ^&I£ÝûÊèC9$èE–—g­dÐÃ$}œuvœNrgš5&<g±SвÒF2#ÂSŸÌÓ¤XçÉÓLBˆèÇñi ×,´ÎøŸ¥ÄAì|‚;"Am¹þ›Èœì2úBXõiL8 ÂGÇ:ܾmÌ÷á$œûØx0ì$aOÞöI<ååêM¾}ÛS×!ݵiŸÉ±3¼Šhduåοë~ :H¢¨§nR±‡$쥯½ôX˜Î´› ƒ¢e3~ÝöùîôáS¬÷úº;Ÿöiý %^v^ü¢„…ŽhC:»7DçZ§óÃÎÛè™Kï‹8ÕÜ/ özÿ’_¯Ú´aM¦Q¾@''3.`C.?)¶¬h½åó˜÷˜t˜¢¢I6¶D©®%¢ EOFÝ(õ²¨F‘eõ\ßÀ2KûR]ßAEÇA0ÝC4¼înàeF”]Þ™h}41°îoÊ ZLœ*§Ò’Ÿ-"øvv;ÓHr¤ ÇçZJÄÙ‹ø¬gû ÏöPmvúõ“­«º2°†\ˆÛ)Q·\ô‡Äýçzèn1=Ã!ù,ÝyŽ·Àóœû/øîíâ(}Ø)¦{¿VLC¾ËCŽ£"C%sñPK  ²•G‹A5l| :org/gradle/cli/ProjectPropertiesCommandLineConverter.class’KOÂ@…ÏD|?PâìÀuã#QŒ+¢$÷C;–1m‡  ÿJW&.üþ(ãª1ØDã,îéœ9ßôv¦oï/¯ö±[@yl汕G)‡ívÙ }FHWkw„LSºœ°Ü!¿]®nY×7ÎZK:Ì¿cJDóØÌ螎ZRy¶§˜ësÛñ…ÝVò;ÚHŸ+-ø )ƒ€…n´kS†#cruLXõøgh|Ó×B†„j­õÀFÌöYèÙ­Dè™èÎè%×LøÜ%”ÖŽñŽ…Ž*‡_‰¨å½?õÖˆ:("‡<Ú„bJÕö ®­ØŠtòfë^*K÷¸Õ ßµ¦ XUÞðV½Œ£Üi01Èk ÂÁp8ƒwZ±ß8T0gî?Pôa¦Î›™m”ŒÎí=ƒžÌC S³s ¦§£‹| Ë1\áôZêq-}CÓ_èJšžEˉèjš™E+ ¨ùw'©õPK  ²•G2lW¶JForg/gradle/cli/CommandLineParser$CaseInsensitiveStringComparator.class¥S]oA=3|,àb‘¶øYÅŠ–/»¥úb JbB$jBÓ÷œfÙmv—Æ¿âàÅ—šø`|öGï,L C˜{çιçÎ=wöç¯oß4ð<O2Hé%=½” Tt¸j nà©}†dK9*8bˆ•+' ñ¶;” ]åÈwÓI_zÇ¢oS$ßuÂ>žÒû(>*ŸáA[ø²ãøÒñU Îe/ð”3n»“3á‰ÀõÌŽãH¯m ß—”ðºëzck쉡-­­,ÂN„3ÔU?Ï—^i e“Á„;ºÆ^¹{*Î…e glÍ‘ÍåH¥C9îY \§¡ûY,Ž©³¡Xç ûûþ©ÍåˆfçŸ.Ggú¤aÀb@H·¶ùFSÏ¢ô/@†tOLµ­¿]u(Ûú#_k¹û#¢ÊôÜ©7o”na©Ü¾N2‘Á5h˜8)™»Jeb[ž1¼üß1_bŸ7ݵª#†Ýõj1lFæØíŒדº>ÃöФš^ ŠëèIƒ>7Ê¢0®u¢I;‹, ‰êWð/äpdiMê Oâ:ùæ€ 䡟 I%'›¯Õ/;ÚùŒÄÎLûñÙ‚)¯<…$O#Ã30¹²V癫ö¶Q+åq“¤óvCü#”Bû7Â>8É^CŽî~Ÿ,r©ßPK  ²•G…¥´gÆ*&org/gradle/cli/CommandLineParser.classY xTÕµ^+ó8““$‘ƒ<"Éc’B€ð2DT”0†‡xHN’ÉL˜™Q¨¢Ô*õQ«¢`}W©­VEIˆQ¬­ïbm«}Ý>lïíõÞ[Û{o{Ûzk[é¿ö™™ÌL&öããì={¯½ÖÚëñïµwÞüø¹D4‹OæÒúùüE>Éç¯ý-—þNëä¡S:í`Ò©‰Yãti]:ìÖÙÃ^™Ö4öiœ›Ç:çéTÀ†Nù³DOµnvŸÃsäS ñ\sµÆótZÊó5^ qNËx¡Nµ¼Hˆk¼D§óÅ KuºPfó¹×êt±0\Æs|\'V9Of–ûh§H9_>è|!¯ÞE_œGëx¥ë5nî*¹ÚÇkDïK|Ü(¿×j|©NWãu\ ½õ⊀ô_æã&Ù×Zy£ô6ùx³Xçr·ð:›¼ÕÇÍ¢ üÑ¢³Å­>n“ÉvƒLÄd¬‡­h]ȌŬÓ˜Uñ`$ÜÃmu‘ŽN3jÆ#Q·1M®3cÖŠpÌ Ç‚ñàN+›ˆ)ß^¾n;Ó¸KÃÛÑ]a{rµYÑÆ¸·4Aâŧ™ë`*p3Õc1ˆ¶gk£mj {©m[Q{4¦q„i´9?Å»¶B¯3ÜˬÖHÔÊ׸3e€Ú]fÔÊ‹<ÈËÀ~tk1±jõÚ«¶4ÔÖ/ß²ºvíÚå—40ùWn3wšU]ñ`¨*jµY»«V›qh^È4*b+»¬;ÉcTu½Ù šÜÆ`[ØŒwE±Ã噳‹ìŸ!3ÜVe3X¸2m«j‹š-!«ª9¬Jìme0lÙÊ.\žf(ÙUÜmµ$ÌÅİ5žá/̶XQ«ÙT¾€(Ú²ƒ‘*5´>Ä0XŸ1MB)ª–žŒ™[C,î] ãK˜\%¥ë˜Üu‘K6 µº:¶ZѵBQ+#Ífh ÊïÄ ;Þ„S>ao¶gD|IJ¯„J"/?{ÉÓ)K˜æ•llÅÒlQŠKš@pÈkø ÁlËw7[ɀĿ—¤Q­€&²Ãá‰3” 1ÍÒÓe¸x­p 2î^Њ$ãW,ï ¾€„fÍÂÚHB¶Ë9ÁiȰ´ˆTûAÖ/L gnq×™½1·:m^W y^9ôÖ37=&3ªº;“‘åä ‡¤’”Y9lÚaysò@‘« äã´’AŒœ^WŒV!½[‡ÌNlÜf4 wºCVMAs6l|rú% %,ƒXÄ2Ñ­ÑŠcÁ9™#‹†‡_z§`Î¥1³ Nô§{¦¶³ng߈d ôèH´ÅŠ&“ȵo­ÊÉ‘ü4µVc¢©k»Õ ØØi†º Ôc…ãQù½Ün‹2‘yš–U‘®¸ £†È@œCê8Èdq~r4#3”†rž¬ÖÕaîfššmAÇ𖵡Ó-tÚ†Ó1ã¸zîÐÇ“ã:÷¶H¶¨$m}]$²š•ÇBÚ¬<8&ÄÉéH¶jë60ÜS“±”+²eÀ1+UÈx·vµ¶ŠOÆ ´L͈¸V)2Ï÷†‹ÊdcKw$“ÃÜÔ§ÎèT*êfs³‹M›;s&Óô’¡A @Îî™+çËÊs†³rPÑ’d±@Xä%~ÌRª,>ÃAÅ…oèíBBoŒtE›Qà ŽÄ¢RtÝmÐAºÓ /ÐmÝAw2Oò^ÕïìŠÃ¦–Ùa‹Ð8nиˠüzP>÷6x¡kÇ&qâ;è( wi¼Ûàn¾Ò ‡é1¦â¡ŽƒAì‘Æ_eðÞ+ ?#Ÿ«™ª‡<öëZY}Æû ¾–¯Óx¿ÁŸåë þߜˎ-ƒoäˆƒŠ ƒ?Ï71U )4½êY7㨨ØxùâÍåß ¾•¿`ðmüEƒoç;h%Kc¥ ŠÅ•eßÉ…è.ƒïæCm5/Ó2K‡Äiy‰±ŠÍ•eHË48MV›Ë£ÑHÔàâôØÁY µHB3öuÉà{ù>ƒïC<Àwü ?dðÃ|Èà/Ó=?Âj|Ä௷lÊ6ƒã¯&"¿%~¾áàµQË‚ƒ™f ³€¸N‰u¿&ŸÇ ~‚¿žÜgÔÃÛ­–TpÎ&óìKœÁOòS[©FÍn924~(6è—ô+ƒŠŸág >ÆOiÜcÐO¹×àãYËS§ˆÁ}qîé±éáŒÀ³1Úàçøƒûùy™®¼ô)V\, >!i8Æ5~Qè¿"%­FÚ¶™!»]8¬S…8j/{ëÅ3¦ÇfcÅfÐÒ]Ü‚" lµTŠ/‰™¿ið·$jêÌp8/6[ZŠ#ikM¬ 'GšmšX܌ƋwãíÅ3*fTt ݪñ˿¯jüšdÄõL‡É±8u7GÂq3†¢ífÛ‰›‹›Ûá±f„X ñ)²T³eFå'¬í|_7ø QdBɦ¥{6u^Uß½S½Š-›ËJ ~“¼S†Œ%\Î’hÈçƒC²8ÝKÂpâÝùiö§¿G ŠOóF1wxp:èÉb¸ùœýpÁø4—¥áà}æ£GùééR/ý¼éŽÅ­ŽA öq¼p ¬Ï:¨UY?zÐ-ƒºæg¡Ê=¯ì’ hãະtp™?"ºÀ@üà4®¤ôt¥£ÿ4…«è4ÖùÆ™íÃ(„†¾J}ž¥¤ÖõT0qe´fl/í*_8x¸ÜnƬÝqõ ƒºÑV?F—”:ßùf÷V¹½GãÉÛdQ‰CY»AÞ'vt™¡XAÒ] X1Èjÿ¼M4œÑÍíâÜÜX×ÖX"¢‹JV8–â#$èÓ¶°Áa ÿÌíÛñfdB˜Y½×ÌÆs@Ö³‡ ·X»å]À-­¯pÞš® J%+Ó2'×|ZÙy‰3+v±Üš½¦ºô]yŸ¦Z“‚?IÝÝKUÙfÅQõ ¨¯ÛSÈ4ó†¬p[¼]…)  7DÂIæ+Êä6–‹~®6©ÌÎvŠ=§ÀN UÒ¹pž#˜Ú¢‘®ÎõA‘[˜ òä!q7cèÌODh²$ÏJ5ç…°ÚPèàé¢cC©‡ƒ‚Œ·`Ff" mÐó¬Xs4˜|íë”'Œù6¦•¼Û­než‘“õ¦XÇ# ¿øÔkŠ¢ñAü:ûÅ‹®>ö+ÉÀ Az ëé/)œ2{ Ø<­¡®´ídM¤ÃŒÝÄûÀ‚O¥kfP;¢#\®«ê2f‡VZñŸñw…®EÕí}€Q*ÆFà«n¶2ld/¯·-tà\Ÿä7*›ü͘ÒbÅ‚Q«%uè„֌pU·óOHz‡¿ŠÐY´ƒšˆÈKã¥xF/GnïÄôEÕ¿ÿq‘Wýƒª-”{>Qþ8¹+â÷(ÐâÚŽï—ðk1¹ÑÃhY?yšŽ’·—´^ò=­Ü‹¯Ž–h)¤sé>ô ›œî§ˆ«¬6“GÑN,ë¥\°Ó›z)ï¹Ð5šÊݽ4âñãBH&Z†ï°«£ tž0Æf’ ½»è!ˆØGÓ—1gk£¨rËÊÓÈõTŠ­Wé·*UnŠU.=Bbþú²í¯àÿÃô¹„©ë ôÏw?å7õSASÙ³äê£B¦^:£—F×÷SQSY€{iLCyÅÕÇíw÷Ñ8¦C|Rz~¦oÐøO…ßÓCgâ'üžÂ =4ñå÷Ó¤&Y:¹áß‹áâ:ë¥ßâ)=4µÆë÷öÐ4ìÁtEPé÷ä/«½6e(f­æ×üøå¾B­-Á¢ °¨T-:KѺ= R°õ{¼)ºÉG©ì0ºÔ‡)¯ŸðTÅ‹X¢¯lÛïí£ÊDÌáåMHTÚÑ» Þ5š¢Ô”û*ú© ŒfÎê¡ÙB<»‡Î‘vjÏïë¡9‡¨ÐïKnªÐžÛà©Î-Ê“U?Dó±+ü’}ͨÑ3Yê –zŠå܆ý¹|äÔËGh)tÉIW71„¦¥—éÊeóŽ|<³¢‡æ$ž\*žŽRß4Ž6ÑTÄx-]NÑZKW‰Ûi+uS3]M-tYH±VDY=Kíôé»´~ª÷(DR¢0 ¥NžH;¸˜¢\JqžG]ÜH;y#íâmÔÍt%參øíáGi/?ŽßÇh?O×ñ«´Ÿß¦øº‘O7óéVþ+ÝÆÓí9’þû=H°ndÃWékøÞI“éqz½Gl2¦A3Þ….6iSèëô$éCÎ?…¹Ðj«šõAnn¢WJ¯ÓÓ Ó ƒ½Ö‡ýÖz¿kù9z=•ó;°Ä1Iõw2Ñ{úáÖÀ¿EnG–Nå_Q=›÷'1FQ=Ÿ‘­6Ľ€þ z1:s1"¯•¹!¦llàºJJ.-\Yä bq/XÜçÀb’ý%›»¡¹†±M‚½´ ¾¼¡âDµÛUí)ò¹BJyf×xÉܪÉÁvæÐúýÄï/}´ˆ©¡Â[‘À’Å‚0ZräÔûe19Ö& ™¶™»ÌD[ /¬ÖÃÏà7Ñwü5 q`{EG$«\ÀòúhÜT@ÓáŸ'°Ã5 x™^ÁØb@®øÌ¥8$±s½ª°Ó‡È ÞÏIyÊyCñMú¶m×*ðšò[ý´´©¼—Î|ÖV—5ëz鼆оöÑr˜¢ŸÎ‡é.¨qW(kÔÃö8)½„A¼6› …Í °QHˆŒ¿(Éäb0Y‰ÌÖl.¹þÜ—uÒK@´. Rí~€¦ø}NÓGõ`v„&LO<}êQ¿¯°á8­‚¨°ZؾJyŠ÷aÒ ×`ÀíÏõë}t‰Kèg" ä h”=‹v^ ¥Ý$é%´ÓŠ<‚OÕÇimµá!K.¼¤3µdX¡Ö«åJø™ÂËÜ/PS“hÔº=´ZHîg¶RÐÛ\x¹½)Oy“;ÁÑ^xê&„á–§S!x%K@& ìG —B»ÙHàÕ iFšîBšJ–Ý­N ôþös„Ñû—ß!„>BÐ|L'Y§·‰ßá|z›çÐwù\ú×Ñ÷¹Þá]ô.ßJ?äWèÇü:ý„O‚KÞ¢b8)`Eט%ds!û1z ¼5H¿¾Co#<ß§i»'1û;„ö÷ÔŠÕÐõ(ÂÝK5dC”² ~ORiq ÐØ¸ÿ>½‹±5à¨Æ$¨“iÞè‡ù\~™~D?FøùYú 4pÑl¾ÚÞFnììú©J3Iš9hm=–ÒóçU[Ö/0fóx#Åã=¤¥./ˉúç—h¡]ÔOWÀ™f½{Iùkä-\³²¬¶¦&4=Q˜Ôx&¦ÜÎüæõ9ìZ¤ç²üžµÀ¥RÒVô&"s$¤Яÿ y@óŸ(ÿ •Ûoh9} ¼±ÚPný+ýöæG?ú8*u¤zïöËè?À#Ü…Ïé ¯èƒÖ†ú²Gé· m‡ed×'Êë'–¸ªÝEî‰Ñ®@‘{vG!«'Q‹øû©µ©°-‘žÆãÔÞKAT8’äÛ’óÛ³çRH,ÓÑCáà šH6Í~7ûÆ~ZÜ$¥g/uÖø¤ã÷¤ŠT*»•^î@Þ /Õ4ß?Ñhú3 ýCšOm>¢Ëèo("þN{0w-Œr 3=Î81ØEÏã¨IBûh”GÕ1›ƒ hÏA¯‚vì|¥‚v7„*®Ý8 §¥ ýD ÚO$ ýøWr"'߇LùïÄéX…V<#v?žUgW§‹úaˆÅÿK¿wXìÊ.ÒÿÁQrÎð$ÿýÑa1C2ìõ§Ô­¨ZÍ?ƒvôPXî>Bn×3TV;Nñg(ô´ª!Š„jäÈ<ôþ¬$}ˆ¬ŒE]¸¯‰b¢Ý;[7Ú+Ñ.C{Ú=h÷‚ÇgÐ^­ü¸ƒö¹uºíuŸ„v?ÚÏ¢½óEh?‡ö´7ºsèÚσþ&´7ƒnÐôoî?PK  ²•G_>Ò£)3org/gradle/cli/CommandLineParser$AfterOptions.class­•mOÓPÇÿ·ëè(ˆÏ ‚@ ”¡¢ˆ1Q|ÉDt‰¼1wkÕ®5wEñ#ø]|!‰J¢‰Àe<·«£²‘‚1MzÏ9÷Üß9çÞsÛŸ¿¾ýPÆŠÓ²˜é'IW1«!y &T”U,2äê~³É=«âx6ÃxÅ ³!¸åÚfÝuÌ'\´lkußg…!sËñœà6Ãät²ûL•!½ê[/HÃúv³f‹§¼æ’e¸â×¹[å‘zdL[N‹!çe`‹ÇoÇ÷¤ºæy¶Xuy«e“jŒ‹&!&âë)ëb“¿¯ÙAÛÈ02]yÅßrÓå^ÃÜ„ã5Vf6R\4dr]“ ¾C¨¸Â0Ô–ÛQi2 6{{ÄJ.¢‹-÷ßòÏùÞºïý©&÷Ww{Õ–/IÅU0¬ᘓÉå°”ù*3Le ƒ¶áo‹ºýÀ‘­1Úå3/‹Ì#‡¼|]Ë£šŠ%†åDú3ïµç¿ózœÞØaS2Æu7òXÆM†¹cõ Ãìq¶ŸañøÝA78yW¦ºNô°ó*%ù1|èÕëÿ¡aâ­ø¯évÅ¥Ì-ëþN x•»Ûö!*JôÅÌB¶ÿ°ì)’ú È>#ËiIShÌélŠn|Aj—TƒôDŠVÖÐÇêИ…ÙFÛî(âJËè9‰‘ºD£ôRR;¬ ä%ÜŠ1”C!Ë©1†³ã­ è(|Gú¹¡FJfØ÷é°Km×°¥tŽ$…äó¸¡ïF5k’j|EFß§jr† dY+–ªÖ!kmrQ>ñŸÑ=°Ý¾ˆe˜ép2¸n›”&0ft9\9E'ètN* ‘×iϤåÐÀK4¢˜¥ 9h¿PK  ²•GGÑfì’œ3org/gradle/cli/CommandLineParser$OptionString.class•SíNA=Ó¶”µ]Ê—(š‚UÚ-e)â'ˆÆ# ÿ íX–lw›ÝÅè£øþ•D ÑÄð¡Œw¦+BÛøsçÞ;sî=çÎÌï??~¨âÙ ® ”&c¦‘AY†s)TÒ˜‡¥a! eiªÒ,¦pWž]Òp_Æ8÷› ¹µ=þ‘[w›ÖfèÛns™aÀk‡¶ç’³b»v¸Ê0[ì=×›)m1$j^C0d×lW¬ï·v„ÿ–ï8BvòêÜÙâ¾-ã(™wí€AßP ;e(|åºÂ¯9<íZkžß´š>o8ª;¶UóZ-î6d‹7Ü„_8'™¦_ØAÛáŸ×y‹úŒKý„¦B¯ãkxȆ×Òy>ŸªšEìÓ‚4Ui Á1 ñz]A¡º´@ðZñ’êû Mozû~]¼´åÐÇ{*ÌKˆŽa:r‘摎, b^©hx¬c+ Ý¥ŸïÛNCø:ž`UÇ L1°ŠŽë˜Òð”¡r)ê Æÿú;{¢2Ìœ?3zËE9n£›éBî‡Á;;Üeës¹¥÷ôÊy»-ÜÑíw 'i¦©æÏã†<ý¸ ýÖM”ÆI^NN™Ö¤ÊЛ¥h›¢8­Yóq³|ˆ„9wv  c – ÷9„Ó1Ȩ(Ë`œòù ¸(O¶aÊ“bäÓmDm>¨X1¿#‘Kaà ¦~BÛ>FJ†ƒ”g´!ý“ÿ6†Îl|;á4 k±aÅCïÔx0ù¢ž­r/iAïŸ';`CŠÍGà ’G¡™å¹cÄºàš‚›#'3Ð0Í@ÃŒšôn¡€¸‘ÂmÜéaF⺙ig˜M«Ò1Ì*[Ĥº’Ýî=\E7i…‘ú PK  ²•Gx&âT` ;org/gradle/cli/AbstractPropertiesCommandLineConverter.class­V[wUþ L2™æ‚¡5&­I  ­¶i-4JÓÔ`ÉE©‰i+v€ ™fpfˆDÿƒï®å{_ë m\KWŸýþuŸ d°¥YÂâ\öÙgïoûœ}øã¯_p?H8‡Û"–%œÅÞ¬H¸‹O%¬"ͧŸñÑ= ¬IXÇÆ6ñù¾@–7÷𥶰=„q|Å';¼y â!ßÿHÄ×"r þ¤¦köƒ7Ùb–¢Ê0’Ñtu½VÉ«æ}%_&I c”ò–bj|Þ öžf1\Ïf)^2•bYÊZ<•·lS)Ø›¦QUM[S­e£RQô"7»lè$TÍÃXI=V:ܨښ¡3Œ‡#™}å@‰—½ÏÚ¦¦—HuÂ¥zGµ­¬¦z¬YSkY,ú®Vª™9> ¶Ú¦bZ„‹á¯:c†Ù×ë“¶Ñrõ*í&2Ò M n»Ð8&‹»M2j¶Vޝ)ÕDäÄœ2W5( ,MIz¢n)嚺R¯šªe9½ØôhsÄt‡©4%D± ŒØ ÆêƒTmg™œ“èÎvœÃêñá¹Ö­štÃtK–¸¿•zAm"ñ e7«•tÅv²ûãóÙ§ÛÈ)Á®ö ÈÙ¹‘ßW v"âQÊê—ys¥;£íåâ]Â^W/yªpö³FÍ,¨w5žÂh}Û’ñ6&FOÚ•ñ.¦eÌ`ZÄcïC‘—Q@QÆ,_Q±+¢ÄWöDh2öñDDYFºCFßÊ0Á¯À-6j q€ïdÔqÈ›ïÎtÅ+#‚y:§*[ö0íÖîÐJ™¥ZEÕíö‰f˜~]µ¡r~èÎN¤ŸÂó ãÇÕWÞS¬cXDé\¸/Ãô««ä.†ÿ'ˆ®ëÂìǶk_ÛÃÅþ4©°Ð«âTSâ!î¬ÍâWn¸[Â0 µª(•½® Õ5à–RÉ%þÖÕºí<ÃèaÕI÷SؾꢦÕúÆ.C°iþ$Ôhû°{wŸÅfЪñCMöx(étÏ'9î%fèÿÅ9ðÆo=µïÐ,N=ÝMøæŸƒýB&©õ; ¦Àï­£€ó¸/ N?ÓêgyO:ïa®e´JÚ^ê/F}¿Á³ãoÀ›Ý¨² øÖb ø×b4Øþ×kµ“tоç"ÁtÓZ3 Ñ‘ÞU 0íf¼x÷þ'y÷SŸ‹r¿ 6 aˆaýÒd†Ÿ°Bƒ3 /á¹)LáF}AßÏ‹Ñtôc^l?Å$ͼA_ !è7ðVkéï±gäÁë ¾@”‚Ø ćÄCŠðí²G„‹G°Dˆ¥oŒÐ…p—h.` ÷(—øríørôoó‡õY»Jñ]kçKIrÆInà#‡¿›£)ò• ç`•,r›Ò|4öã ŸõÌm“Y©íYB²åYÂ-BÝéÇÓòô1>qúÔ?PK  ²•G“¼¼ ,org/gradle/cli/ParsedCommandLineOption.classS[OAþ¶·-í"¥\A(¡-ÊŠ¼P«1!iĤƒoC;Y†lw›Ý- Ï&¾ø ‰JD}öGÏì.¥I|™9ûï|ß93¿ÿ|ÿ`+)dPPQL!‚Bú0Ÿ¢å†Š›I,¤€žÆ-,&q[~器+¿÷䲤⾊ {ÌlqWA¦²Ëö˜Þò„©W„ë-+è© Ãb^Ëá fº~—‚³É,C¯zްŒå2¥$JÂ^YA4_ØT[µë”ÜWÑjlsçÛ6)’­Ø5fn2GÈsŒy;‚”ä+¶cè†Ãê&×k¦Ð_2ÇåõU»Ñ`V]Rm4=a[T.ipoSP0˜/œ—DNDœ=tšœ=¼ÀZšÕë+ŽÑjpËS0”?’Ž“¬ ÉþKOr‡¹¡bjÑ©ªÝrjü¹»Àê‚dÒ0„a§jW‡íKÉú‘Õp³ &N«®›&7˜Yõ˜Ç×ÞÖ¸ÏEˆ€4W·¹›³l/·ÃöxŽYû9ÿ2,ÈBS*jx’<ÂIy®Ñ2=Ñ4y€t ZÂcº<ÝN5”ñDÃS)höÿÆy†ec{—ר‡—ÎŽ†îˆ+Þ½[§•†+G±Þ9ú •tGi`]ƒ ÿɾ«Â]k4½}LÒ›ÉЃ¢É.Òw€N "N{j9­—)RF”v@¦x¥xŒÈÖ!¢_û죯Ð*ß!(#F9#´Ó<®bÔçõ«r-¿!~€Þc$¶²ê!’?‹_;B}†S'áèÒü‚ö©]q˜4‚j©T£ŸøÇ©BÕ—ÚÕÇ)ñ«ët’ÿâ’õ”,á§;’ãarÐÅ&1ZxFiW“$óGèàuw+æ&9#¾PòÉÝ4f|tgCÆR(+ôà’‚¨±düc—ÆùÙ¶Á9•ÿ PK  ²•G¶À°s˜ª=org/gradle/cli/CommandLineParser$OptionAwareParserState.class­UíNQ=·]ºív±¡~àbº 5ȧ 1$ šÔ4Á·íZ·»æîÖGñ üãMD$>€eœ[–ZÒšEâŸÎÎÌ™s¦wæîþüõý€y¬'Ä :²òiB£Ÿ›&1¥!CÅ´3*f5$0§b^E‘!Ys›MîÔK–c2Œ—\Ñ(4¯Ûf¡f[…Ç\xf}óf•!æ?·¼ì\t®]($zÍr,ÿ.Ãépx¸|®Â lºuj6%;­fÕOxÕ¦ÈPÉ­q»Â…%ý ¨Èv2^ú–ël¼æ"P+ûܧ¼¾í8¦Ø´¹ç™„[í2ÛŸ‰þkºÉßVMò„ˆa™*íñW¼`s§Q(ûÂr«¹§ Q.²áž$Äuv\çˆ y¬ÙûýèÂ;>Þ¦Vv[¢fnYòx2=èY© #…´Ž³XÐ1ˆ3:ncTÅ¢Ž%,«XѱŠ5†…Påg¾)¶,áùåV5H3 ÷ Kµ; 3'ã<<˜ÞíJÚµÅSÎ!ÿ/g©â&ÃW;;ß^ݸå v,l×y½þà/x…Û-ó/ËTé¥êQ§™óZÍô¼ìÂ]܉\E¹¤/þË•=éÙl÷¨žk<§ŒÑR§wgÃrÅtZ.=E¢Ph†h²çÈ+"J6mLïƒì+"F~ÑOA-¨–ò,Í Åf1B± 娆ìE ý$5"Äy £ó ù3¦¿@ùÐá‹A®U±‹'Öá‰á2®Pžá*Æž= ´QEã3¢D5@–}Cì2Pw¥'3Ôyü=RHì®ö±£©I¶ˆ8[êÒ-vt‹n×Û5ã¸@Ö å$}_Î+:Ë®)ò+“Cž ²â½EéøoPK  ²•G'H g)org/gradle/cli/CommandLineConverter.classQMKÃ@}ÓÖÆÔ¯ª'Ï"4 F¯M)HQ Þ·éºlI7²Ý”þ6þ”¸M¡“B–y³ï½aæç÷ëÀ=Îtœœ$S ® ¡ß §lÁü”)á¿®Ù8åA {Oyb¯ :Ë„™©¹ƒ3‚I¡˜É5'ÜÕ JXd´T"qxöž{a¦…/4›¤ÜORé¿1=ç“Q6›15 ¥Ú¹³ë¤6¾®Æ‡EÛWb‰RhèÀ{'ôq¿j<¬R”å:áO2µú%¹Ñz \ß®X„ËíΛ¯„î ÂÍvâƒùŒ+³ÙT›@h`uš-B-›íÙ¬eñ65°_TÜšJÇVpXÄkäÇÅ{òPK  ²•GCÑæê| <org/gradle/cli/CommandLineParser$BeforeFirstSubCommand.classÅVmSW~n²pq³hH •¶ØHƒ@^A«@ ‰m”6Ø·MXÓÕd×Ùlª¡?¡ÿÂδƒ–©ö[gú¥ÿ£?¢Óswc&°Áq¦_î˹Ï=ç¹Ïž{öþõïo/¤q_ÆYÌ¢f^Fse,àZK¸Îñ‰˜,s¬Ø 2V9Ö°ÎqSÆ>•1ˆMŽœŒ¶8ò·úíïõzt†a,gZ•TÅRw«Zª\ÕSY³VSÝœnh·U«®YB/ê†n/1¬OzÃ_G8æÝ6\fj›AÊš»ÃaØjÔJšuG-UÉÊ™eµº­Zº˜7’ Ë^Ñî›–¶¦[u»Ð(5}2(†¡YÙªZ¯k›ó$íêˆN(@»ˆÓy†AÓ(تeçÙºip|Î0äŽÝX´h“¯ÉÜõ5UUJª`[ºQÉtZ¦¼©wø&~Õªé:üÑ·3<‰äÜšæMS½n9j“*ߌq\6¹˜ G ßJ*y³N;éæ{2#š´hf¢½ìc fÃ*SšˆîÀL ¹œÃˆ‚a¼Ëq‡!y"Åæ» ¶ñÇ— ŠØaˆxI¨à¾b˜÷Œt×xh˜.Éxî¨%0&X}Ë?:À²UiÔ4Ã^}RÖšŸþBÓe¤™É*á"nÎE&ÆëÓ ÁƒüÌ—he›ã;*J"b™áªç‘68Ðp÷á—êÕ7«½rC.?V-í0¡£fO~Áé^y§ë±‰ã‚6{*B½^*Y-—µz=:7C—ëR÷yÊÕ°õjê–úHÏC*dÍf¸ØNÓÍ”W{ÛM æƒñ^ìpžCêþØM•·PzÚkt¯š_gBœR³¦’,ó]xÞ;^©VµwÙ+âýóeØã×àýø¿ÄMœÄ+"ô  Ó;Œƒ¢¼ÓÈŸ¨öô÷zf7iî§^‰Å…/OìÁÿ3Í}xŸÚÓb]C[B€]Çd¦5Âc”|ÃQµ%ÃG¸Øôú7ÐG½¶©O°=ômÅ~ïúÏÁ}ø Òˆô'Ò®ùÔOíC.Æiˆ^yºÁbè´ô;ÎýÉÂ3÷0ôr¡¢Ø‘‘^!ßyÚ¢{œèf‰ê Œ²UŒ±5$Ø:2lƒÞ‹9‡þe—X‹¾† Lm1š¢‘ì †}”äIbR$Yºy¸<­HÔsG-v V¿pÃ01Ò Ã1Kê3gtÉÑKŒ.ãcç{\q|\Ňԯvgé9|ž,QêÇ%ñ\^@œ^Å)ê€x.g!à ¸E¸0õŸI>|Mý7’üPK  ²•G“;™|ü9org/gradle/cli/SystemPropertiesCommandLineConverter.class’ËJÃ@†ÏØ«mµ¶ÖjÕEÜ5BDÄ…R/Pé~šÓ‘$&ÓBÞJW‚ À‡'i©AÄYœ3óÏÿÍœ¹¼¼¾Àl— "l¡Y„Íl E Ê<&Ï dÚú@¶ËÇH ÚgÞLÝŠ{:r”Rïs‹:C*X4NĬœ°€ÀQŸ Û´;hZ3a ѽÜG!]îºÔG‹v¹7S"Š5eb o}ɸG ÑÖûtFM‡z¶9‚y¶²¶~X{()spL`7e.°KV, øTXxÉ¢Šõ¿”fDT E¤G ÄPÇWãJm®h~²­Æ49Aíjx­µÑ° ­ÓsÃhöÌ gÔ™¢n8üÇ5©Û] .FÔ’¿s°9õàQˉ΢ⲙ*•sû/@žUg J*æc±e+sƒÊ+1¾ Õî$p¦¾ô´€6¿¡™/t-Í,¢;©h-Í.¢Z ª>kìZÿPK  ²•G-h‚»2org/gradle/cli/CommandLineParser$ParserState.class•SßoÒPþN) sÀÜT4706ê|3M$š˜m f{»@ú”[sÛ-ú?ùâ‹&>øøGÏmÙdƒiÒž÷œï|çœÛß~þpÇFÛ62ØÎ¢jãv,Ô-4™Wžô¢×„T½qB0;ÁÐ%¬v=é^Œû®ú(ú>{JÝ` ü¡©aÅ´9£†û,³D!ûPK  ²•GF¶÷=Ê ;org/gradle/cli/CommandLineParser$AfterFirstSubCommand.classÅVëRÓPþN[¤JÄ;be -´°x)U.R(XEÑ_¡Ä( “ñ|ßgtP™qüçŒâC8îI K›Â0㟳{v÷|gw³»9¿þ|û †E͈4ÒÑ‚ˆH²A/†pKÀ°€Û\3*BÀ˜€;ÆExqO„ˆûH0Ô›oÔB ÊÐÒ\$gÈ«y%’Í«‘¤¾±!k«)USd£ q²W5Õ¼Ç0Õëlþ¯…%^-±‹÷-1x’úªÂÐÂó[+ŠñT^ɓğҳr~I6T¾/ =Ü]†¶ÄkS1&U£`f¶VŠ ÒŒ¦)F2/ Y8ú8‡âôf-IMy$ Mº–1eÃLošª® H2´Ú¼})MÂzÙ›Z“ßÊ‘¼¬å"ÓPµ\¼\Òçìy6ùà–O\}9ݲ'§JBKeÕ¾½mð ëgòáËYÅázåKŒ/ƒ ZÎ1ˆ}ËÈ*“*¯˜Ž2›ž ~œ“àC«€G&1%`Z 3t9eƒaÌÑ‘gÚº¦okÇ”@g%•„K¸Ì›£Úu¼`¶|G%E5e× uSé–»5Ï—4Ãð©Úª–˜ìÛ²¡©’bðä}Båî\EU‹À6¢:“³Y¥PŒF©J‡jhŒ>»3·L5™“7ùÔ8" Î)&COéH¯¬)Ysÿl©HÀª#¡½?n¼œA;–ΙZ›w¶¦QW+ÚïS žê^ͼ8õþWêÂ'AEýå[è=À|>>ЈsÃÅçÍë6ÚMÓÞMT †>à …wáþH{Úimæ:¶ˆ:ö^–AÉ:HGö8‹€ÅÑd"úÍFý€xˆ&‚ŸàúOø+ê\øúùþŸðïAX‘¦!ÈvѸ³q™ÛíÁ» “HêßW6í¸âç€ì9ZÙ ´³eØ+Ë }Ñ; \G7¹Á¹Ĺ(è(¸ ·£ô]LShü¤`ÅÌc®ç‡ÙB ¸p. à˜Å­¨9BØÊj¿…1€ D'(Íôâê$ÉU¢×<"zˆÂ×@'bjÅ'½—è]ðGZ f‰¦<â_PK  ²•GiÞ}FDgradle-cli-classpath.propertiesSÎÍO)ÍIUHIMËÌË,ÉÌÏãRöÍÏSpIMV02T02²24³22Ppv Q0204å*(ÊÏJM.)¶å**Í+ÉÌMµåPK *²•G íAMETA-INF/PK *²•Gו˜R?U¤)META-INF/MANIFEST.MFPK ²•GýAšorg/PK ²•G ýA¾org/gradle/PK ²•GýAéorg/gradle/wrapper/PK ²•Gh‚df£Õ#´org/gradle/wrapper/Download$1.classPK ²•GÅÞ…ÖpD´org/gradle/wrapper/Download$SystemPropertiesProxyAuthenticator.classPK ²•GçìXsªÛ"´vorg/gradle/wrapper/IDownload.classPK ²•G©zÝ\Q-´`org/gradle/wrapper/GradleUserHomeLookup.classPK ²•Gâ]ÛÅú 3´org/gradle/wrapper/ExclusiveFileAccessManager.classPK ²•GÌ ^F‘ù-´org/gradle/wrapper/WrapperConfiguration.classPK ²•GQ}iå 0´ùorg/gradle/wrapper/SystemPropertiesHandler.classPK ²•G¥y0ºV´,org/gradle/wrapper/Logger.classPK ²•GÎrëŠn&´¿org/gradle/wrapper/PathAssembler.classPK ²•G8Þ¶Ýì) ´ org/gradle/wrapper/Install.classPK ²•GÝÀL‰Ä• -´q3org/gradle/wrapper/BootstrapMainStarter.classPK ²•GHÖ·$Ó #(´€8org/gradle/wrapper/WrapperExecutor.classPK ²•G„¤«² B*´™Corg/gradle/wrapper/GradleWrapperMain.classPK ²•GÙÎx ´"´“Norg/gradle/wrapper/Install$1.classPK ²•Gj j´V8´sUorg/gradle/wrapper/PathAssembler$LocalDistribution.classPK ²•G’cJK!´}Worg/gradle/wrapper/Download.classPK ²•GÀ>ÆPN#´Õ_gradle-wrapper-classpath.propertiesPK  ²•G$Ù–eδf`build-receipt.propertiesPK  ²•GýAjaorg/gradle/cli/PK  ²•GÈô–<S1´™aorg/gradle/cli/AbstractCommandLineConverter.classPK  ²•G2_e¦è(´$dorg/gradle/cli/CommandLineParser$1.classPK  ²•GRB ¨÷<´eorg/gradle/cli/CommandLineParser$MissingOptionArgState.classPK  ²•G¼¬M2‘ƒ=´horg/gradle/cli/CommandLineParser$OptionStringComparator.classPK  ²•Gè# òGK1´þjorg/gradle/cli/CommandLineArgumentException.classPK  ²•G?hÿLJ=´”lorg/gradle/cli/CommandLineParser$KnownOptionParserState.classPK  ²•Gk±ÍÛ7´¶torg/gradle/cli/CommandLineParser$OptionComparator.classPK  ²•GäbÕ'án?´Øworg/gradle/cli/CommandLineParser$UnknownOptionParserState.classPK  ²•G"zÉZ’™ &´{org/gradle/cli/CommandLineOption.classPK  ²•Gœl\ϧ¦8´ì€org/gradle/cli/CommandLineParser$OptionParserState.classPK  ²•G[xn˜”Ç&´é‚org/gradle/cli/ParsedCommandLine.classPK  ²•G‹A5l| :´ÁŠorg/gradle/cli/ProjectPropertiesCommandLineConverter.classPK  ²•G2lW¶JF´•Œorg/gradle/cli/CommandLineParser$CaseInsensitiveStringComparator.classPK  ²•G…¥´gÆ*&´Corg/gradle/cli/CommandLineParser.classPK  ²•G_>Ò£)3´î¡org/gradle/cli/CommandLineParser$AfterOptions.classPK  ²•GGÑfì’œ3´â¤org/gradle/cli/CommandLineParser$OptionString.classPK  ²•Gx&âT` ;´Å§org/gradle/cli/AbstractPropertiesCommandLineConverter.classPK  ²•G“¼¼ ,´~¬org/gradle/cli/ParsedCommandLineOption.classPK  ²•G¶À°s˜ª=´„¯org/gradle/cli/CommandLineParser$OptionAwareParserState.classPK  ²•G'H g)´w²org/gradle/cli/CommandLineConverter.classPK  ²•GCÑæê| <´×³org/gradle/cli/CommandLineParser$BeforeFirstSubCommand.classPK  ²•G“;™|ü9´¸org/gradle/cli/SystemPropertiesCommandLineConverter.classPK  ²•G-h‚»2´î¹org/gradle/cli/CommandLineParser$ParserState.classPK  ²•GF¶÷=Ê ;´E¼org/gradle/cli/CommandLineParser$AfterFirstSubCommand.classPK  ²•GiÞ}FD´Û¿gradle-cli-classpath.propertiesPK11^Àxscreensaver-5.36/android/project/gradle/wrapper/gradle-wrapper.properties000664 000767 000024 00000000351 12774656643 027221 0ustar00jwzstaff000000 000000 #Sun Jun 12 14:20:28 PDT 2016 distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists distributionUrl=https\://services.gradle.org/distributions/gradle-2.14.1-bin.zip xscreensaver-5.36/android/project/gradlew000775 000767 000024 00000011553 12727351034 020612 0ustar00jwzstaff000000 000000 #!/usr/bin/env bash ############################################################################## ## ## Gradle start up script for UN*X ## ############################################################################## # Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. DEFAULT_JVM_OPTS="" APP_NAME="Gradle" APP_BASE_NAME=`basename "$0"` # Use the maximum available, or set MAX_FD != -1 to use that value. MAX_FD="maximum" warn ( ) { echo "$*" } die ( ) { echo echo "$*" echo exit 1 } # OS specific support (must be 'true' or 'false'). cygwin=false msys=false darwin=false case "`uname`" in CYGWIN* ) cygwin=true ;; Darwin* ) darwin=true ;; MINGW* ) msys=true ;; esac # Attempt to set APP_HOME # Resolve links: $0 may be a link PRG="$0" # Need this for relative symlinks. while [ -h "$PRG" ] ; do ls=`ls -ld "$PRG"` link=`expr "$ls" : '.*-> \(.*\)$'` if expr "$link" : '/.*' > /dev/null; then PRG="$link" else PRG=`dirname "$PRG"`"/$link" fi done SAVED="`pwd`" cd "`dirname \"$PRG\"`/" >/dev/null APP_HOME="`pwd -P`" cd "$SAVED" >/dev/null CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar # Determine the Java command to use to start the JVM. if [ -n "$JAVA_HOME" ] ; then if [ -x "$JAVA_HOME/jre/sh/java" ] ; then # IBM's JDK on AIX uses strange locations for the executables JAVACMD="$JAVA_HOME/jre/sh/java" else JAVACMD="$JAVA_HOME/bin/java" fi if [ ! -x "$JAVACMD" ] ; then die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME Please set the JAVA_HOME variable in your environment to match the location of your Java installation." fi else JAVACMD="java" which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. Please set the JAVA_HOME variable in your environment to match the location of your Java installation." fi # Increase the maximum file descriptors if we can. if [ "$cygwin" = "false" -a "$darwin" = "false" ] ; then MAX_FD_LIMIT=`ulimit -H -n` if [ $? -eq 0 ] ; then if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then MAX_FD="$MAX_FD_LIMIT" fi ulimit -n $MAX_FD if [ $? -ne 0 ] ; then warn "Could not set maximum file descriptor limit: $MAX_FD" fi else warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT" fi fi # For Darwin, add options to specify how the application appears in the dock if $darwin; then GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\"" fi # For Cygwin, switch paths to Windows format before running java if $cygwin ; then APP_HOME=`cygpath --path --mixed "$APP_HOME"` CLASSPATH=`cygpath --path --mixed "$CLASSPATH"` JAVACMD=`cygpath --unix "$JAVACMD"` # We build the pattern for arguments to be converted via cygpath ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null` SEP="" for dir in $ROOTDIRSRAW ; do ROOTDIRS="$ROOTDIRS$SEP$dir" SEP="|" done OURCYGPATTERN="(^($ROOTDIRS))" # Add a user-defined pattern to the cygpath arguments if [ "$GRADLE_CYGPATTERN" != "" ] ; then OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)" fi # Now convert the arguments - kludge to limit ourselves to /bin/sh i=0 for arg in "$@" ; do CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -` CHECK2=`echo "$arg"|egrep -c "^-"` ### Determine if an option if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then ### Added a condition eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"` else eval `echo args$i`="\"$arg\"" fi i=$((i+1)) done case $i in (0) set -- ;; (1) set -- "$args0" ;; (2) set -- "$args0" "$args1" ;; (3) set -- "$args0" "$args1" "$args2" ;; (4) set -- "$args0" "$args1" "$args2" "$args3" ;; (5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;; (6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;; (7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;; (8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;; (9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;; esac fi # Split up the JVM_OPTS And GRADLE_OPTS values into an array, following the shell quoting and substitution rules function splitJvmOpts() { JVM_OPTS=("$@") } eval splitJvmOpts $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS JVM_OPTS[${#JVM_OPTS[*]}]="-Dorg.gradle.appname=$APP_BASE_NAME" exec "$JAVACMD" "${JVM_OPTS[@]}" -classpath "$CLASSPATH" org.gradle.wrapper.GradleWrapperMain "$@" xscreensaver-5.36/android/project/gradlew.bat000664 000767 000024 00000004544 12727351034 021356 0ustar00jwzstaff000000 000000 @if "%DEBUG%" == "" @echo off @rem ########################################################################## @rem @rem Gradle startup script for Windows @rem @rem ########################################################################## @rem Set local scope for the variables with windows NT shell if "%OS%"=="Windows_NT" setlocal @rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. set DEFAULT_JVM_OPTS= set DIRNAME=%~dp0 if "%DIRNAME%" == "" set DIRNAME=. set APP_BASE_NAME=%~n0 set APP_HOME=%DIRNAME% @rem Find java.exe if defined JAVA_HOME goto findJavaFromJavaHome set JAVA_EXE=java.exe %JAVA_EXE% -version >NUL 2>&1 if "%ERRORLEVEL%" == "0" goto init echo. echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. echo. echo Please set the JAVA_HOME variable in your environment to match the echo location of your Java installation. goto fail :findJavaFromJavaHome set JAVA_HOME=%JAVA_HOME:"=% set JAVA_EXE=%JAVA_HOME%/bin/java.exe if exist "%JAVA_EXE%" goto init echo. echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% echo. echo Please set the JAVA_HOME variable in your environment to match the echo location of your Java installation. goto fail :init @rem Get command-line arguments, handling Windowz variants if not "%OS%" == "Windows_NT" goto win9xME_args if "%@eval[2+2]" == "4" goto 4NT_args :win9xME_args @rem Slurp the command line arguments. set CMD_LINE_ARGS= set _SKIP=2 :win9xME_args_slurp if "x%~1" == "x" goto execute set CMD_LINE_ARGS=%* goto execute :4NT_args @rem Get arguments from the 4NT Shell from JP Software set CMD_LINE_ARGS=%$ :execute @rem Setup the command line set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar @rem Execute Gradle "%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS% :end @rem End local scope for the variables with windows NT shell if "%ERRORLEVEL%"=="0" goto mainEnd :fail rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of rem the _cmd.exe /c_ return code! if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1 exit /b 1 :mainEnd if "%OS%"=="Windows_NT" endlocal :omega xscreensaver-5.36/android/project/local.properties000664 000767 000024 00000000723 12543046313 022441 0ustar00jwzstaff000000 000000 # This file is automatically generated by Android Tools. # Do not modify this file -- YOUR CHANGES WILL BE ERASED! # # This file must *NOT* be checked into Version Control Systems, # as it contains information specific to your local configuration. # location of the SDK. This is only used by Ant # For customization when using a Version Control System, please read the # header note. sdk.dir=/Users/jwz/Library/Android/sdk ndk.dir=/Users/jwz/Library/Android/sdk/ndk xscreensaver-5.36/android/project/project.iml000644 000767 000024 00000001552 12774562525 021417 0ustar00jwzstaff000000 000000 xscreensaver-5.36/android/project/settings.gradle000664 000767 000024 00000000030 12716305262 022243 0ustar00jwzstaff000000 000000 include ':xscreensaver' xscreensaver-5.36/android/project/xscreensaver/.idea/compiler.xml000644 000767 000024 00000001305 12774562515 025265 0ustar00jwzstaff000000 000000 xscreensaver-5.36/android/project/xscreensaver/.idea/gradle.xml000644 000767 000024 00000001300 12774562662 024707 0ustar00jwzstaff000000 000000 xscreensaver-5.36/android/project/xscreensaver/.idea/misc.xml000644 000767 000024 00000001305 12774562525 024407 0ustar00jwzstaff000000 000000 xscreensaver-5.36/android/project/xscreensaver/.idea/modules.xml000644 000767 000024 00000000557 12774562525 025134 0ustar00jwzstaff000000 000000 xscreensaver-5.36/android/project/xscreensaver/.idea/workspace.xml000644 000767 000024 00000361523 12774562662 025467 0ustar00jwzstaff000000 000000 1475536195508 xscreensaver-5.36/android/project/xscreensaver/assets/fonts/OCRAStd.otf000775 000767 000024 00000000000 12720177732 032154 2../../../../../OSX/OCRAStd.otfustar00jwzstaff000000 000000 xscreensaver-5.36/android/project/xscreensaver/assets/fonts/PxPlus_IBM_VGA8.ttf000775 000767 000024 00000000000 12720177732 035006 2../../../../../OSX/PxPlus_IBM_VGA8.ttfustar00jwzstaff000000 000000 xscreensaver-5.36/android/project/xscreensaver/assets/fonts/YearlReg.ttf000775 000767 000024 00000000000 12720177732 033014 2../../../../../OSX/YearlReg.ttfustar00jwzstaff000000 000000 xscreensaver-5.36/android/project/xscreensaver/build.gradle000664 000767 000024 00000007215 12727343244 024232 0ustar00jwzstaff000000 000000 apply plugin: 'android' dependencies { compile fileTree(include: '*.jar', dir: 'libs') } android { compileSdkVersion 21 buildToolsVersion "21.1.2" compileOptions { sourceCompatibility JavaVersion.VERSION_1_7 targetCompatibility JavaVersion.VERSION_1_7 } sourceSets { main { manifest.srcFile 'AndroidManifest.xml' java.srcDirs = ['src'] resources.srcDirs = ['src'] aidl.srcDirs = ['src'] renderscript.srcDirs = ['src'] res.srcDirs = ['res'] assets.srcDirs = ['assets'] // jniLibs.srcDirs = ['jni'] jniLibs.srcDirs = ['libs'] jni.srcDirs = [] // disable automatic ndk-build call } // Move the tests to tests/java, tests/res, etc... instrumentTest.setRoot('tests') // Move the build types to build-types/ // For instance, build-types/debug/java, build-types/debug/AndroidManifest.xml, ... // This moves them out of them default location under src//... which would // conflict with src/ being used by the main source set. // Adding new build types or product flavors should be accompanied // by a similar customization. debug.setRoot('build-types/debug') release.setRoot('build-types/release') } project.ext.versionCodes = ['armeabi': 1, 'armeabi-v7a': 2, 'arm64-v8a': 3, 'mips': 5, 'mips64': 6, 'x86': 8, 'x86_64': 9] //versionCode digit for each supported ABI, with 64bit>32bit and x86>armeabi-* // put ndk-build in build's path, or replace below with its full path task ndkBuild(type: Exec) { Properties properties = new Properties() properties.load(project.rootProject.file('local.properties').newDataInputStream()) def ndkDir = properties.getProperty('ndk.dir') commandLine "$ndkDir/ndk-build", '-C', file('jni').absolutePath, '-j' + Runtime.getRuntime().availableProcessors().toString() } // generate files early in the process task perlBuild(type: Exec) { commandLine 'sh', '-c', 'cd ../..; ../hacks/check-configs.pl --build-android $ANDROID_HACKS' } task perlClean(type: Delete) { delete('../../gen') delete('res/values') delete('res/xml') delete('src/org/jwz/xscreensaver/gen') delete('AndroidManifest.xml') } task objlibClean(type: Delete) { delete('./build') delete('./libs') delete('./obj') } task downloadNeededDrawables(type: Exec) { commandLine 'sh', '-c', 'cd ../../ ; \ for f in $ANDROID_HACKS; do \ f=`echo "$f" | sed s/rd-bomb/rdbomb/` ; \ make -s project/xscreensaver/res/drawable/$f.png ; \ done' } preBuild.dependsOn downloadNeededDrawables preBuild.dependsOn perlBuild task config_h(type: Exec) { commandLine 'sh', '-c', 'if [ ! -s ../../../config.h ]; then \ echo "" >&2 ; echo "" >&2 ; \ echo "config.h does not exist. cd .. and run ./configure" >&2 ; \ echo "" >&2 ; \ exit 1 ; \ fi' } preBuild.dependsOn config_h clean.dependsOn perlClean clean.dependsOn objlibClean tasks.withType(JavaCompile) { options.compilerArgs << "-Xlint:unchecked" << "-Xlint:deprecation" } tasks.withType(JavaCompile) { compileTask -> compileTask.dependsOn ndkBuild } defaultConfig { minSdkVersion 15 targetSdkVersion 21 } productFlavors { } buildTypes { debug { jniDebuggable true } } } xscreensaver-5.36/android/project/xscreensaver/build.xml000644 000767 000024 00000007524 12423371550 023567 0ustar00jwzstaff000000 000000 xscreensaver-5.36/android/project/xscreensaver/gradle/wrapper/gradle-wrapper.jar000644 000767 000024 00000150604 12725673404 030304 0ustar00jwzstaff000000 000000 PK *²•G META-INF/PK *²•Gו˜R?UMETA-INF/MANIFEST.MFóMÌËLK-.Ñ K-*ÎÌϳR0Ô3àåòÌ-ÈIÍMÍ+I, ê†d–ä¤Z)¸%¦ä¤bȵéõòrPK ²•Gorg/PK ²•G org/gradle/PK ²•Gorg/gradle/wrapper/PK ²•Gh‚df£Õ#org/gradle/wrapper/Download$1.class}ŒM Â0…ßh5Z+v/‚ ׆žÁp!.H¾3SK¹¢;Ýa(ÌId0®lˆWžOæ*i)2X¤sd1,¶•ê”:úÈï"! <°P‚Kwð¸àjdÇ@ÙÂC<Òx°ûÃeÈýV9¬ÎœCv@ôyÐr‡}Òúž†Ýú [N},EI/hUЇžMIüGjv2F"TXksY•’“ˆ„S<ª1ä§´8ªéë^™qL¬Ñ_fAqÄô­Ò#Z¢K–^¶ÏûLN YZ“ƒ ÇeZ­al\#›@ù¹JQå¿!þÞNœcÁNÚÆ9R_pé æ§‰rb¬\~XŽÀ nŒÊ='iaÓµä† #-Ú[ÁÍmu WÉÚä¥QʸNÙÔ/PK ²•GçìXsªÛ"org/gradle/wrapper/IDownload.classEÁ Â0 †ÿÌéæ¼ ^õbñ¼« APô^·26J;êt>›À‡;•É—üùó|Ýè{èz~¢+%5O“é&çWΔ(Ùa…_Ê4[gR„³#!XÝbQ”™Vg=Ë{}1±¨÷„A´üYÍëCÂX›”¥†'R°Êð¢†5Âðc/¹JÙö”‹¸$Œþ£æS‡@pP¹„\ËmKuíØôlïÀPK ²•G©zÝ\Q-org/gradle/wrapper/GradleUserHomeLookup.classS[OAþF‘]ÖõR¬(µ¶j[[ÙZíUÓÄ˪‰T Od… ®.»dYlüW½$jjÒÇ>ôG5=ÃR+ȃ»É¹Íw¾sæÌÌï??~Xª‚QÌÉx¢à)žIˆ)`^F\ø‰F° Ṃ½zQFRhMÂK K “[úöúA*_ÚÉ®o¥ôÒANÏ–vÓŸt†pêØ854˰«ZÎsM»ºÊ0Ý+e²éŒžÍK{z‘ahÓ±ža{Ãjrâ¿…×÷ >4¸fÚ¦÷‘¡?ž(06 %Œ¤L›ï7k‡Ü͇}8eÃ*®)üv0à™ †DÊq«ZÕ5*×>»F½Î]m§å4¸»ëÔxÊqNšuj}¸Úg'ü-šŽ¶mZœ0òZÙjw¥äœ¦[æb!Ú‹3)’UD0A\>y²IˆäA$¼R±Œõf Mðxƒ÷f˜èžûFÓ´*Üe]Ó«x‹wÔ¯–ô «x ówuð¿Hú𘗽ŽPî¬áñÃ`•{×!ïŒ!¿}%½nÉx/ qè¸}J†hÍ®0,Þ‰²=q@žã‡îÇ{ÔÆ,ÝúQzýˆŠi’Åi“ÝGã7ü !™8C’“ÑH3Ò `_[(É`+8Ž$U€)<$Â4µ“OZdô4Ã}—è/îý‚z…@‘¨¾„ƒ—:CÂøY˜×…"D "Vˆv IÎ †¹ëÂ(&ö%Óê¿®—)[|SW/ „©þ9Ôð‰s ‡,öÂnì%Br¦Uvö/PK ²•Gâ]ÛÅú 3org/gradle/wrapper/ExclusiveFileAccessManager.class•VKpeÿmš&iºm!@!Pl…´P‚(Ó‚–ØbhZ  ¥·É6]ºÝ›MK} >êûuðè£2#-XÆGGǃ:ãñÂÅ/ž/Äß·›–¾ùÿçïÿú6?þûÕ ã“ ¶¡³¤ÄÒåGw^÷ãD>tŠËIqê  WìiA9%–¾ N£ßÎQ#ˆ58Ä3x6HSÏqÏû¡0(3d…šD-†*‘ÃpÎWbº£~~˜Ö¤Ž':Ïu$SíçzOut$û%„Rç•1%¦+F.Ök[š‘k‘P•0‚­vŸ¢U ¶6ªšE»« AJJ¨Î›ºž4lÕStAôµj†f–PM&ú$xf–Š5)ÍP»‹£ƒª•VuUø33ŠÞ§Xš¸—ˆ^{X£•XÊ´r±œ¥du56n)ù¼jÅÚ/dôbAS;4]mËdÔB¡K1”œj¨OqÚ¢nšr-î­hkz,c™¢e©†K(º.<¶4Ì‹úøày5cÓ˜Ÿ![v›Í“nfF$Ô¹’ g†ÃPõ‚ãaŒˆL©óá13 aˆÐ”ÍÔÿ áÏ5²ÆRŒ¬9êë’6ÏÙíYÄÀKÈæÜ,A›p/”­]˜ÿ‰ül \ak:Ýr˜úAÖCÍÛ„}Ñ«å Å.ZÔïjMÇ—fõð}ÕÅuÒÀUÂÚQebPMèfA=YÔT[Ÿ ø{Ö†[K¶›8LbÃ<sHi­"3+/aÝ2FX¯Y´2¥2Ö¯Üu{…²Œ(ò2ÂN»°S‚)¾G/µ¾Æ/á™T>ý Í3¨h ­™ÆÚ¸7ìB(^¦ê:GúîÏa*¯{¹P¥lò6\¾;#ì4Í v  ´‘ž…É)l …y&¢Í³`¶ÜÜsuâa¢Üê$&Ç&áÝs®ø"\^&x3^9O°ò&3ù9¦q‹™º…ß}~Âçþ·³—9™¿ˆz®»˜÷(sØÀL7R² ˜ñƒ<¥ø7­ûùoê ‘:‚ÇG3ß㸄VLâ=µÑW_£ß ßâ(~ÀÓô׉_háy·Éûƒ¼?Éû‹¼;äýCž¨r´|ƒžö³‚1C_’ÆJÎVž§ô,9§fÊxˆø6'­Œ2¿!ŽƼ¿Ó!”ã0•ä9ù'(ÿ$)^Rê‰Vôݶ-¿¥=ËÝã´èw¨j¼Ž$\†7u…d/«¨æ¶j-'Ií%½œ4Ûµß ¤–2ÕÜÛ¨Û¤G*1 é¸<öPK ²•GÌ ^F‘ù-org/gradle/wrapper/WrapperConfiguration.class“mOAÇÿÛçÖƒ>‚€¢¢"í!œ à3 U1U H|C®p–#åŽÜ]5ñSi"1ñ…Àeœ½[ ¬ÛÄ73³3óŸýí\ûûÏÏ_æð(‡K˜É`6‹Œ îq?ÇÍ<7÷¹yÀÍB‹i9ƒÃÀÎÈwÿ(õw7¡Í‹Úfzî½çuÏùsÏìßÿüù€ýøYÃ.Œ¨xCCF4œÄ¨Š75ø%ó”cò0.w*&UœVñ–†VŒqF® IÎJrNƒŽ© ÎkxÓÒìB ÞÁÅ\»’¼'/;'¥ïk00#IRÃ,„TžkA i¦ŠË C¦eºG4Gº§øŽÛ³BÁ†1Ó…ìŒpÎ3rÚÆì¤‘™2SžËLŸ›6ó zÇl'K9ÆlFÄæ#—N,±˜wEö´cóàš"Ò°(vâ 6§„[+U°32vÙ¸fÄL;6bfD¼»t,¸f&6näh4­„ë#« T¥;jå nID5…µ/ËG'‡’"çš¶EYó±(sñ¤ÃJÅhfZ)ŠÔ¬á&ÓÂYvîÝ숔XàýžHÆ`8©BVXnµ—É™Ë"éRÞd¾ `K…ƒQW8†kKÛõ¹åteÔdTg¬ ¥¬±È„ejÐr€m­¯)3É.oµerº$ŠKóª‚.æžu úÚ¡z°ê9Gép]ÂLY†[pècxõb®Ù§–° NR”àêzFKõKS»Aè7­ÜsÒȧy—Š+:2`Óli„—‚Žg´’ôhé°‘ÓqUúÞÜ §t®~¦`¹fVT;j³:V03³²Év;Ží„çÓ glc–²ðJuÃsŒåˆyI\\“Í+ؘ_†áb¤?Ú­bAÇ">ÐqªøHÇǸ¡âŸ‚Y|†ÏuÀ*¾ÔqSr¾Â×*¾Ññ-¾Óñ=~PqKÇøIAtí™Ôö¿½K³Üé.XœÚ®G&¯`ÛŠ¨ò5K 2cç¥3ŽEݾH}³t×±ÊHÇkôË/u5ý k—Xl™H½"5¢ "¨àœM;ö¼|L^üÏxƒ|¨I;›óðY%¥†7À9–®„´R, [«rn–g}•zÅlj«ç2¾´‘Ÿ tá³¼¥Žå¡w°2úãiÃIˆ«a%EƒVFi.ãO°oΔuö§»À9ØmX…µ<â’VÊM{ 7Jš’ùïýŸú/çQœ7€›Ùˆ 70_“C<Ïß.È¿&(r>‘îá)ÆUáê>„ò»'ÞKð˜Û±T/) ‚n®ëEµh¬<€AòþXBÓôC4E‹ðýÏý%øÉŒ/A¦çàDo_ëø¯Ýƒ>è“›ïÉ=„'– O/¡•ÚëÛ6±‘.6ÑÖ÷›Ÿ´my„ö‰Þ"¶>F‡‚A_È÷ÛÜÁ ¹ ‘åï ù‹è,bû` (¢ëö„¾"žTCj;'¤öJ­T|Œp3Îßû÷QÏ}4‘}ègýxÑ[C8„A´P"A˜B;馸Æ&ꇈÜ.J÷ŽÒÏõziEœœóä\"ª×éñ&?¶nqÜÝÆAÜÅK¸OÍ8ì:ùaÔNË>ÞGíbÜÝF'-÷óÓë&= e€¾h=À¤q /Ó‹O‚NO¯p â7Þg‘BøC8Ââ\â÷ÖQ¼J¯• XÒz»c^‘swÂÛ ÿPK ²•G¥y0ºVorg/gradle/wrapper/Logger.class…“ûoÒPÇ¿—Ç*¯1ÆpL˜ EW†o1&†d  f&û­”›®Ki¡ÿŠ…ÅÄüü£Œç¶ X³žžsï9Ÿó*þþú àO“Hàf—p+Û¨&Qƒ,D]ˆ;BÜ•p A‘Ð`ˆ§wØ ÃÚ3Ã2Üç ±êIí˜^m{À²]Ã⯧Ã>wÞ©}“N6»¶¦šÇªc;8Œ¹§Æ„¡Ôµ]Ñu`r壣ŽFÜQº¶®s§Å5m¡Píž©TÅT-]鹎aé-‘PòÉDÕ½ +TŸ€Y†Æb|ûTuz|<å–Æ[µ…‹ž·(N$Ö&c†bXC3”Ùé„RãWuÄô:”Á+m§Úõf=m†dÏž:?2ÄØRþlDL¦‘BZB3{¸/áAQH£ˆGB<â å 2ÃÆÿüoúg\£·Î+‰j®Š±/ø÷>M\>¤ {JQ¿ÃVÞÒ \ZW‡ÔHþœcÚÞHX¦Å \´ŸâáÅÓ_‰)ÎG½t… }ý РéÙã¤Fœô ÖIfÉ:B„~@Rþ &—~ ò•¬6H®#Jò2bØ&J9Ïò¼‰–ãèöekY4|3†•}Â(ê4yÜ0 ÷¢‚ÆT÷¬‚Р•§ÚþÃÔÇJË º=­-uñ/àg5Ûu°r— ¢î±ìBÖw•½ek++ºÐÜ¥~FµLM›Ž¤vºoû º»3ó©z¶žñgF{Ý(”lMtÏw¿­×oI¸älq»uÍÔu¨ ¶ 9ú˜&‰ŒåiÖ›lËb¶¿ŠÊ\ÒcEÁxê­Õ{qÖ©|´d/kÎ%æÐ—®ã¥îá½Ëºãh}È(莫 ÃWrôÅ’m¸kÙÑíS?¼°æ ;®(Pã¡mV‡Wõ• ?ÇsÁÂÚú²uS^uuÓñÒ2½ì(̆’c΂Êû9ë ›º›™Ìí²¤sÆ.n‘xS›ÆWXvq`…¼ìwîž*ûCRPœ²Jö¢.›dúõÉ pQÅy<ÅT ãÇ*žÃ5sxZÅSãEÞnYÅOðŠŠ,òJ×¢(żn«ø©èü ?gF²*~!« ø¥Š_‰ôk¼¢àÌ»g¸ØøM¿U1§Yº“Nö$K×\E1¾pC_t£øŠßã¼ø£CFñGŸU¬ãUÁ_´xG–é.;`r¦«õk¢p¯ Ⲃƒu˜  ­º;Y2]cYßögû U*擦å&—Hܤa®”ܤO>±]aF(ÜÃßTÜÇ†Š¿KFî‹»æÚ©â ¼Ir³Äf×—7ì(¨ø‡èþIn 3Î%I½¤á$Kæ ¦u‹`’o—b§ÞáM%ºTw-5Ö´¸p-©º¯UžðhWf^Aï;ºà¿¤]¹ÖTp!»jºoC³þbÃò1 Cݾ¼³Ç×ó°½Û«ÛS³ƒ’›(#×-›„Sð:‘^©åpý>ñÐÿif~ãÉyæ"c<½{Fwí†1é2~C ¥º¥%FJ+yÍ¥¹pêê€DÉÞ"©œ¿s(•« 6]ïe¨îL/ÙÖ-yk½6ñ3àóúêøu1Y;óºÇ)-löáé\}¿òjìÒ_,iE§ÆÞf‚¯ì¬ÓšãêË~'l‹p×v2‹ãüÞ:Êo»F´âýx ¬*W Èp}nÛº—?vVÊ1î±Ñrü WpV8‡Ó(¯zªâç t Äï³~Jª¯„ rC'¨)ºq1Î¼Ž†ª•}„$iå8ö Ó³tØ×,‰$°Ä0mù6ÿKOQηә2+¦{*¥{3DÎ…6“¿bìÙ@|®‚&®Ô2ö&öqh q(cÍ盺vè&vèzROõPdçÒ­áÖH-ë[á´!Â1ÅPº±ia–уUfWB»ìƒÞ í6.q\ÁKȱ ÖÓ[FÇŽÍ…ˆå=$›O”q|}t]s‰¬ÑÉžåã,v玬õs@14“:,vË-øÎ2¾Ú1‰)žhbf¦1C,]”gñŒMßú>|ØCß _ÒkÔ¢µd—qêBû]„3ë™Æö2RÕ¼$¼hžbFhy”¹÷ü'ý³[ZpÅó¥ÆU<ëÑ›Ÿ!/›Úb§ùèí机ØA‡=ë=¡çËHW=fd`TaF¤2¦fÆ“ þjUÚ¶¼¶aÏÓG‡ y\Qy}Ä¿T…ß8ÿ—yN22”IAÏÄÒ¯¡a=“èõVÍB÷Dß=d+xﺔ%à|â4鮟Ùäù#j>K¦>G¯×Xƒyœ Žê…ÚB:„|PÝ;ïóXLJ•µ|ÊÿPK ²•G8Þ¶Ýì) org/gradle/wrapper/Install.classY |åµ?'»ÙÙ,Ã+ÂÊkD"y‡7 IØð0 êdw’Œì#îÎ’D­Z‹JÕ¾P[ÑV¬b-UQIÐ(Øj}¶ö¡µµµÕVkoëí½½÷öÞÛû*÷fv7›dâ/¿ýfæ{œçÿœï|_^ýûÓG‰h! >ΗÆ'"_š‚4iÆÉ§ 2¯ðñ›Ï(Àel’4“\ÈS¤™à"ž ;¸Xšé 4•gÈü™ ÏòóìÏaMáÓtÏ ð->¹Zák˜‚ kê67oº´¡©uÓÆ¦Õ›75­o¹tCݦµL…Í—ë»ôšˆë¬iµf¬sÓøúx,ié1k‹IAòk™|‘xg§‘`šÑOtÖt&ôpĨéIèÝÝF¢¦ÙÄJ8Þ‹Äõ0Ól·‰M éqáÒ­[]uɤmå¹n 6äÎÁ¢ÓŒÞP$•4wk̈Q Éä:=¦Û²Õ¸Qh<áó­4c¦µŠé’ÒÑëã59¹Øe[˜¼õñ°Á4±ÙŒ-©h»‘ؤcP<é‘-z”ït§×ê2“L3]9‹o"H% Ý2̤Åt¶«['Úav¦ºeÆc+ʧ›ñ±‰¸"”;ÎTvʤ Qìf{J¾7'"Lò1êټ± SŠr§´vé‹–.kME™&GDõ†œA…¯CwóÈn&µ)Â0KNjôy£ˆ@Ei0Y‡L Ú²l3»å¦lŒnY–Tø3ðC©¬#ÿÜÒáTÊÜ‚ÉÓeô2±‰_Ûa“Ï‹"Bf9Ó“F(•0­¾šu€&pÙ`vIKVvв<šbÝ) t =ŠQ†U|í©ŽA~ÞöÕ¾ö>€A·t¦0u$`š>JªÕö*ИÙiXu±ð#avôåÚjc<H-¡ßhõF!©8×Õ F2”0»zÃfêLrV`êãѨC”©XO¬ËzÕLn5cئ µ§´lŒ'[tYY6"†¤Ó„‹¥0QI¦ìíòâËê‚b О²Ý5ðÃB(?»Ò„âs\c)×ùFÌJôe}aÛKk“eD’‘Í8"ësú…µÍÒ6dcP„®)Y³8‡rc,5²I\¹2“øŠGsOCtb(ÞÝ—“ƒ˜ªK]s“»TÖ`-&OD,Ðm‹Î[°`S³ë–ÙîÆœŠòzH³PšEC¬ +÷Í2ÃÊuûËÖ8B‹„ÐʱÊ­2´ŸœÖIsK†Ö¡U5ZÛ†/•ÅžÂâ±æÕ¼ÞÅC\– —cvwn´dH-³¶²¸ÕNçâÕô¼j™¦Òóô‚J¿¡wU:Lý*ýœ~¡Ò =£Òuô•®¡kUz„UéF¾ŒÇTpʢϪ´›nPézú¬Â»U¾oTù&Þ£ðçäãf•oá[Uþ<ߊíùÄJͬIè}Aå/ò— E®’èÖµuU¨Sþ²Ê{ù6vpzAáÛU¾ƒ¿¢òWùN•÷ñ]È.îeƒÂw«ü5þºÊ÷ð~•ïåoHsŸÊ÷‹¨ü ý ÁÐ⩘eFlÂfºì|['-·VÐæ—$çkḑÔbqKCAjéfLÓc}˜–À~—V­5¦7_ÍŠkHäšÑ‹}:Ò§-ÌÎë«F™1Ä}ûåèVù›|@ öÊßâýL;N(Dšw,âZô“I òÃüm•î!˜è GåG`î²+-3d§]-Þ¡¹ÉСÃAáÓKb%±6ÀÔuNTïÓºô]†Ön1Íңݲgk=¦ÕU]³KôDT³ºt ¡Íw-Àçk݉8Z},Ý'¼°U¥ÁV‡ÚšÔ­š™„q¢#–%šž€h鄌ØìÒ˵ŽD<ªéš•H%Å^N U-Ši¹Å¦†²ªV+I–Ä2™Q“ŠP†œî¬ÅCéò®ÖvÈhuv6j@åG©|ˆWø •ŸÇæ~ìÖC™³.‘Ðû$}ª<@?Sù?¥òÓò6ŸÑ›‚ä@»K¡ÀçlÐ'ªq†Á.S~燺¢qÔ!žåK—ªü,ï*GU>ÆÏ)ü]•¿'`,kiŠZ«aa™rNëªç´Žx¢V“è{^áTþ>?”‰ÚQ…SÐe«vÆT~‘_©^–æ•aÊz*¿Ê{PSˆ?$–^ËL^°©ü™6ûãk6¦òúx*¶C=y±[oˆzRp¦É¹XbNGÄ™6{ô˜%јÂÁ_:b67!(ñdu åÊ?ä×þ‘Ê?柨üS~c=N%¨ò› Ÿ¿Å?GêZþ¨ô!ÿBá·Uþ¥ ãWüNÆÒ£Ê4• óo;3G:cý°úmznJÎ?¼+nyO¥?ÑG ÿVåßñõ*¿Ïw"·žx[@ù›é‘GÍ·hìåŒgm÷åø å²”©¥MMòœŠW(qÊNRiÙÈ;‚é#&å³§–º¬µ“iÆtéXîD>ÑBá±íÃCV½¡b4€yÙË…ÝŸ¸ònµSVν$óééãLëÙÄF6öÂP ?fÕÔC8‰Ða×Îæ g|Ì]ÎÌPßÖ/‚þ ]Îæe'¹ ™â’¾Žð &·¯.k‚F©î°nIùƒ¦¾pZoi™\’Lž™ì{ÃqV|íÐ}IQi“+Þ|8±tZ]v/±³0g”ÖžŸ½b©<±®nÓýV<#Ç„á>”2“Ñn GD_‡–ísÌ(êÛG»ÇUŸ"7Éä¦2i^ zà²QÆÈºÛg\œA%ÃNNÕÎaÚ‰þºöd<’² ‰§á›d*øÑƒ-"÷ `¤:ÎNqé†9ºå+"WKF¯i{Øñ8¾ìÔW W3hûæ£lÔË83Ù)Ø ‚†3Ï8ù•XL‚Nõz,C)q”šVêr `çK >a[2×Cw“GuÊÆ¤›¶^ûdsJðÉܱOxr•#w\`e‡bN çd«áWŒÓÝÏ÷¢Õ”¡¡ôM‘ôú%›íë •cBæ¨K%É—Ù;ÉÒ¥*Ó™§d’œ9$©[.©6·fÿç‘3°ÂÎÍñ$NCéJºŠ˜®ÆW}š åx÷B9kÛOœ’í'ŽÌxNÁÜé&´{ðu(xñœW>@åƒh+7™^ õ0/¯8LJyåaò•W¦ ‡lŸC{ùÐÎÅJ¦Òaͦ¼I7c¤Ü¡I·Ð­Dö›ÈÄö›H•g¿‰\ô~ž¾€‘æHÁsUE?M\‡fRKù“4/“k½Ao?ÖæËcJ­ýヾAšÚVôó++ª¨¨Ÿ¦=Gų :–ƒr%d­¢T ÉØr®u¸eå\E_¤/A¢|:›¾L{A%@Kè6Ø×ƒµåt;Ý Íf@Ï}tfÍ¥™t7Þ|ô5¬öbå×±çUGnB_#7N?BÁuƒtZ[ÅÍhñ,óNžDÏøkó‹¼yûifU0¿Ÿf.óyï9þ—Ê`¾§JÎ:püƒÊ~š] -ç´ V«x–ù‹üAßÑûhÁd:ôù_s„N¯-ôÓ\ï½4.¨LZÐOgl *Ò5oën?8þzPé§’!³¬¡Éh·Bì‹h"µÛàÂí4‡.¦ù´†º„Î"æÑù¦dÐeÔA&uÒhûÐw-Elv@Á˰ú^©€. ¥ô ºü¢tÖ¬7Ðý0"« !ÅDÚEߤ0k!%é!¬ð‚F„¾Eì«ÀõÛxóṊÒwà¦\?B¦ó Fj-å°k~KÕSt&Ã7Ói~[a©÷Y*kóT¶! »âF+‘Jö§‡«F{ž¢ê»¨žzs€Þ’Õ´ÅÛoÁ"yX¹–Ñã ÷Ée§{žDO®N‡©?­Ó³°€pm¬z‘êË+¨¦Ö[%¨_p- n-\¤Ø¢W´¶yѱ¸µ-¿ªµÍôŠ*µùÓÁÓRïZ6³sm§\ †×Ð88b*"1ˆX< ¢Ÿ‡lòo¶cÀ‡>• ~>fž¨¼ÊV³1«f#=eçyüçÙoOÛq’«Ô ä(õ<%Öêi9°|–÷Ùûh1µ-UG—y=Ëò‹ ÷‘VU”¿¨ÖôõÓŠ}¤V}OÑÊ<Úº;H~·rÈ7³m‚·A­Ûá›;¨”¾‚°þ*¾ƒÎ…X™/Úï·ƒt*UÀºG±~:p~ÌFÝ øô9¼å‹pYëÒ~ôƒšx//ë=§çIô|×6í÷ð{ž^pÒ)¿.èÿˆ:gy Rq[Eáª:w· Òym¾g©®ÍS¸®+¬‡ã࿆ÖjtòÛä7¸îü»è $8eÖÂXM…ôÓ§ÄÑxôSs?­;@k©¥mÖ·Éü tám”LÑŠ›j1ßæ¶Zÿ‹TT ·8Pú[ûiëVäIµ iÛmxç¼^ÜØ•å2ß1’¹ ^‚—Cнñürˆ<Ÿ@qÀv £Ýëß ‹Ý‡Mç~{ÆbD}-â~5Ö´#Â{ç×!¾oALïGÄ<ˆ(xö~´Ãû°ôaü ŽÇÄw¼ßãK|Û pö ¿O/Âê×aûy‰^Ç=4‹^ýà– Wé5x¹–vÒè‡ð²d•×éGè;l¿ý؆ö‡YϨŠç§ÐôSÚEèyÆvž\f¥7ÎmøØŸVxéºìqÒû©½¹¢0ÔOá¼(ß{Ðs0z…6£ÀÏ1š´MjDƒi…4o•&Ð[vXåÉ…yšÏƒR°¹¼Âއj<ŒužU³*± œ^nërÖ"àk€¼²`[òÜí‘XÁÔ…CB8ñÿ" ôX½Œ`x&{)ì5$ü—iÔ¡–€] f½M¿„Ø’Ð=Xs&ý ‘—g͵œ~m›+OnûÓ»ÞEà$A°w:d¿ëtÕ%éÙ”ôlâår†!v:pì£bѤR>¢Ð¥Ÿb@éƒĻۆ Д@ôJW2è Kàž:@ãূʱÇo¦»¤Óo¿ýÇA£t9`AøYö3€\xž7ÁJ7Ø"ßÂèÛ4 z¡ù<èX -Ï¡÷1ߥ߃Ö(NÿJ@ný#h}„:ëAé#TÎ&¡yØjߣß¶;°Íþ«%ÅïÍÚq/}Þ8ö‚ªÀnê£AÕö€Ã!{&·¶aüOààäÖ[Ð')™ìEMÑRQ…Z¢m™÷nšPYeW=Žÿ`èE§FqAûoPö¯(eþåÜß êe¢YK Ö[Ä(ö¾½·Í±wl`RLÿdçÓ¬ˆ“üôÏ îˆØˆ9<•ò lhþ¡RÄgœa3Ôœ)ô/i† ýkÚ& D”Í4»·€ø_éßÓ!Rƒ§ÌÊ—ÄäNZu&8¤±ø? ëèžS[ü7ÈY\›N>»üp_í¹/«•ÏÑ tþ›þÇŽ÷àéü/ý_ÚÌ`I5~˜õ°ç+%§hñg)ùAÉÙÍý°³³›ûéïÃwsð9Îäêγ¢wMÓÎÚ´YV5#n«–ͬIÞ,_ èmÅöÔ5ª«F:·-ÍHOºÍŒÎi:›tð¨Vš"´Ô0 »!çÍ a¹\~X@ƒ«]T-BŸ4 ›Ú3ºšÍÆL5ÅHpOÌŽ®¯ÆJTüp†P;"Í%±ÍõËÌÞ5)‡%ÛÑYÒŽº:²l/OÜÑ~1y­•n§†¦¹çÙÃ$Û·5ÓÈJà¥ØÑŒTLÍÉ]f9dzByªd.îhNuTËê'[Uz¤Ôi´ãfÎJ²9çT Vá"܃‚ ®)x·t\:J©FÁÒvhØ“ðDŽŒƒA˜ö| KAt'zèEܪEôãÈ=gϱ(Èá€ÐóÔ­Šì)xŠCMçâûÛ{T G >ÃçEd…4Ð…×µmŽâ _â+Ïð5ñrÃÃF†yKÂ7 ¾ÅwTìó«9ÃÖ2ì¬`fgÌœž ¦Ô©ì6 Ú»,èR}ï¬5£(Ni”mm;Ç=²ƒÏñ=‡öƒ€Áÿù´èœ+AäµÍõU*tS(\zÝ&Ë+µP°ŒUYÆÈ²­"×ÅZ·¦™?ÊÚ,Sþ°Š*O8¯’ÙT‹Tïp±#]pŠ7‚’º®íZL¥gw)™³¸£â¾µ,¬+åà³Ìž©ñü;C¯× ÓºðþBÕͧŠ`Z±%Ü®qf«êLøUãÊE:jÚšq`>¡;|«4Œ{ßËÂDáj‘€¾Š6Rƒ¤“ºž\Ïa(\ÕK$"½¢ò\žþ³&ÝT)£3Õ¦‡@Ûj¥öÜ1-2ª X#5žE®é|×èÿÖþó@à-Æë´‹Ò,Ðì:†ð‚uè£Ñç;ÐO£â`¯ÓL!²â‡ÿ&;‰æÍ¡‘cÔ­œÂ“‡˜ðŒæáÍÃ?”Gý1&ÄÈ1×¢_ÉãÒ„7àõ_&ëÆ„§Mñ<š'|Ÿ@Â3Lû–ÍZ§Ç  p´ïÂ0®b ÝôÍÐC½ÌyJ&_…1ä@ß$û‚ìÃCŒÒŠûC„¸‹4÷á}•xÉWnâM²+vuo‘nœ$"IÞ&/ôOPÈÝ1EôѼtŠÖİ¿ííyt,¼œöŒ‹mb÷Ïèiorªy\ñòèü ¾€÷×ç¢ðË¿¢+á¿Z$|‚îcôüqVv ¤Ý(¼AëqÊ=§:Maƒw‚Èxq™ê1‰):×Läß%­‡>€®ã=Z‰ÞYJ–œDð‚ßvâÜùPK ²•GHÖ·$Ó #(org/gradle/wrapper/WrapperExecutor.class•Wy`UÿM²Én6Ó„n’¶)),%mÒÍEËÝ–#ISÈÕlÒš¢ÖÉî4YØì„ÙÙ ((*¢"DE­·A鈀¢Åïû>ñÂoð÷ÍL6³Ûm ì›÷½÷½ïø}Ç{ûäs? `½òã-~ÜÀ[ƒ(Á~ÜD¡ànY¹Ç·p¯oâxg¸/ˆJôã]ATã`9ß-Ã{d8$Ã{åôûdx¿°| €Ê÷C²òa™}$€ùÞ/ÃGø˜|íÃ2Ë0+ßex(€‡å;'ÃÇýx$€GÅŠÇ„ýAœŽOŠËìS2ûtŸŽøñ„ð‘ûdöY?>ÄÙ8À“òý|_à‹|)€/ð•¾*ËOùñµ º„íëòý† OUâ›ø–Hù¶ß ¢ß%ß âûø˜öà ~„ñü4€Ÿ)¨ßÒîíéØ=:Ü·{hxp¨gxdLA¨ï2m¯Ö‘ÔRQËL¤&6)XÒm¤Ò––²vhÉŒ®`ež€®ÎhGBþæPçÈ6ÏæŠ¼Íè¶ÎÝÎ$ S±K´Ø‹Œv¥-;€Eߟîãþû­D=¶c˜T”T Ö“ñÐ+HzèÒ;<ôɤwzèSI¿ÈC¯EHnvÎCr¹Û_Þïö—×>¿U¨€†qžˆ‘@9O+砌͡d,*…oec³(o™…Æ–çXÎ3@3tŽËœSØcë™haU`"';¿ÍÕÉ"pVÌ¡b,ô=‚ʱÒHôA¨³Xò˜èUW…RŽ­ÒF:šEÏNRµ­Yl}•`ç!TöÛîlÛ)žµˆS´¯„–fr)±–…~ ÕÃõ³¸ã,o“c†å½—^\MoÅßýëg¢ìÅ>òïeuHðö\ Jðjì·›ÈAùGà¢ñJb!á[5‡Þ1|q í½„¿¾CÈ·y[B£ªPGÆ:Ƶ.„•SºAÕVQaˆÙTÇoáÃ6Ô«rE½ÊÎ?é%µx9®²]w̺š?¾íÜþ²_ eÀ©­þÂN•ñ„;ສЙkÜóîù29_xø*Ïá²Üákq‹I’FK— µ:Ú6úÚZê™öƒ÷dß5ÄòZ–ðu¹”r˜/»^Eô{v=#RbÏ^ƒ×òlfßHP|9$þü7â:°Ù-Å@¤Eaï8¥Ð‡ë=%Èi à v¬EÒM®¤­”TêHj-&éFO Ž–$³7rVb˼ٕy ©2»Q°XÙ6lôÕûŽ ¼Þ7Óze­3«îDE„ù½mFYзš²@»‚”XMY!¼™Ü‹ñ6&ÌíܿÃccΖƜ-®-2{O Ž+)aØFëÖzCîõÔ`7â¡2·ùìêt¯§îö ÚÓÝàêVh£ðßþ?PK ²•G„¤«² B*org/gradle/wrapper/GradleWrapperMain.classXxÇþNÚÓjU8 ¤Ã” Ô΀±ÀY  fm¼œéðéVÜíQâ–b§Ø‰ÓH±“8=Nâœ8'ÙŠMì'NwzïÍé½;ùgwu:Ý-B_¾Íí¼yý½yï O>óð£Ö‹*¶á.ð2¹¼\.¯PðJ\€W)8ãÇ«ýxܽVÅëp·÷øñzoPQ&±ÊðFyx¯Š7áÍ Þ¢¢Ò¿UżMò|»\Þ!—wª¸ïRðnïñã~ z¯ŠåxŸ‚÷«X…¨X†³ PQ#¹Ü‡*øª¨Å‡U¤1!¿&åò\öcʨðã¹TÁ9Åc*ÇÇT|ŸPñI<¡àS >­b3žTñ|ÖÏIšÏûñ_”Ÿ_’‡OÉÃ/KFOùñÉè«~|MÁ×¥-wÉå~Ü.¿éÇ·T|ßQð]?¾'‰¿¯âø¡\~¤âÇø‰ŠŸâg ~®¢¿¨Úy µ½«ãpoÇûzº;÷ìëëìÙ+è:¦ŸÐÃ1=>îµÑøÈ’63ž´ô¸5 ÇR†@(¼½£¯µ³«£=çÂEÙßßÙÑ—.›Í#*ÜG­m ëê|mæ0¥•uEãÆÞÔØ#ѧ‰RI3¢ÇôDTî] Ï&Öv™‰‘ðHBŽá“ }|ÜH„wÚÛAg×­Gã4Ê7Æ_%u‡òM¶¥ë‰ò«ð8P]λõ„@©ƒ5Ã;¢1ƒ§¥ã “‡VÔHJˆ€’0M«=JÜÂq=‘4ø±:[ÏH,n3ÇÆôø°4vŸCFE3~‚Œ$Áe¹½§“–1¶/#*‹AÛ4y(æ¸eü<œë•u³£1{'«:bWä ×çÆr‘«M¶Œòº<4A^Ë`ܰÂý:{OÇ-ýTFaâøcL[ùIUºÒ3`$’6Få´Œœ«xÂApîUII3•ˆ­Iâú˜ÀâŒnññ”å€IªIEcÃŒˆ·2h6ûl-7Ô]8MòÌß>/¢¹rBíµÍpîË’¼ Û,j¸×jÁ-nÆMŽá&V£ ]$ ¿ÄÓtU®;5þ•;¤M)b62)4ü ¿Vð ¿Åïˆs\ àx*jÐgÿ+¨á÷øƒ†?âO þ¬á/ø+“jæBíÒ“£Ýú¸†¿áïþjHâ §ñl îTð/ ÿÆ–z¸¯SÖåXŒÎã°Ý<™ú0k€srRÃóq›ôâ3³Ý6M±O·F[“IcŒ5!ñþË….@­òU¬iI‹Ÿ^K·B,`ªe§Íu(›gÊ¢d»P>MˆBM(Œ¨ðS5Q„ÛXF®a¸5ÅÙ$BÅ’Nc¹˜OWD‰&JE™"Ê5±HQ¡‰J±XK4Q%ªé´9î+ý=“/Rq+:fd¥AE,ÕÄER_ßQš©‰eb¹À¶6=7­Ð°AwŒ1B‘˜žLŽÓ³¡£f"äªbçM˜c¡›Ü=i„j×$k›g¥iÏ‘cFÄÒÄ ±RJ ib• Û7¹)á\åY>Z-.fh÷š!%䢄¦«UHŇ)¥Ò«¤k¢F¬ÑÄZQ+°‰<ÜZŠÛÅ&”7"Ñ£Qc8Ÿ‡³"ê4QkYž=Ê #×f¦H7ÛCÓ>qå5KcѨ‰u¢‰×QmX—à6E¬—÷ã:á¼ÅDRoí!3OöÇoˆóôL7šºúù4ÞBÓÕ÷rÏñ`=Óut޲Ôã2/Õ“­‰‘Ô˜·.¤Z†¯œ ŽFGR ^¬5ye7ßÙò ì©c¾ÖxŽYdvÑc+1¬ì®X=ݱòÅc®šG£ÈâÂʸ¥>g/‡¨”Õ*«^ .—Æ®¾ð(Aeys;»S­v{N¶é­ÄËyÓ»›åO,³íÍézù±ðEå)„]7'c¯V1Ý͇ðùyÏV¾Âƒ#‰™²e4Ì£³‘Ûóòj;ƒÃž7Ýÿ<ÝÆ˜lõTýB¼3ríü0ù £ÃÜÿÒðpwÎzÝv™æ ©qÆ¡î`ýVa¶ð!ˆ rD¾š»(â~(k¯r0k_Âý¡¬}))„|Öp½Ž0ä¸ 4L@<`£æZhWàz®šƒGø[„†‰Ebq†âŠ {| º'±°›‹oï †&PØâ úÒPƒ¾‚GàZ(êòÔÞ4ŠÓÐfÀ%\*ÁƒS(#eyKA°@Ò. úÒ´N¢¢E *„N¡’(‹ÓX’FU'Õ-þ ¿iA¹YÚR´.X4‰‹ZÔ Ú0…eCÁ¢),çX1‰•MaÕPÐ?Õ¸x 5äµ&µ3–ïF€ë:z-m­¥ÃêQ…,G#.Å:ìB3öÓmWc=½³¡§° ·b3nG ^‚­8ƒ+ñZmï;"ÞQ;|ò99Já!Dù%Cò –£XH9÷ãĈµÇ1†8½~=½n’K!9\Kh eµq(…ŸÒ6ñÑ–"·3ÔëN2"§l9Ýüæ«Î t„¼ð·–¾œBíPC nõ“ ƒ«\PchÆ!¥T hG:è’¶QKV¸‘JÀþ:f¥Ê²+ð27³ŠÉ®Ñùw6'¿:³ò«Øö Èâæ ‹V¯ÊV8uük 4Âi\2õ¹ìº³ØUeØñõî²»—®“zï®À†46¦qi—¥±iÏ}(éšÂæ¡Æ \qŽ2Z[ÒØzª%0p¥ïlZØÐ;‰íxÖ9W™Ö \uÖ–UNß\îj²‚2€^ÂíC%ú™:ƒL¢«yf¼WÉ݊羜Ió\Íðw€ºÚÒhßÓðJl}:%v0uwv5R“]Î4vw¯›ÆØ#1ÖíåQWÓÙy‡º‚¾s{ì³½¼è=çÈ}%¶ÐÁÒÉmö/°ÉßÍïÝö¯cÏúü*¢æ%,UL¤•LŦs#}¦—¯`Ô·0mw3a÷0Y¥ ”ÐHKo§í²Jµâx!á+ }“X³˜x±£$îpíÞg§.ýØ(Jcßݨt’•›ýi>ŸDïLäì´(!…¥Lÿ™ Xa_ÉÝÂ.÷Í.÷Ò)ô‘i %L ?7nÌâRêr¼jë¥ÿPK ²•GÙÎx ´"org/gradle/wrapper/Install$1.classWkwÕÝ×YŠ÷Þ3çž³ï9û>ôÏÿ|rÀFü}ºqXÄwD|WÄ÷D< ˆ¡cdcˆ"C c2xPzù(Æ¥µD3!âˆ[Äd £p¢pePÁ÷£ðĺƒ’h¦ÚpÇÄภjÃðÃ6ü?ñpˆúÑ~‚Çbx\âŒâ‰(žŒâ)éžñ´Ì&F´ÏFð\'#x^¡}ʰ;m7kØ£VáNË6Vd&Œ)#m¹i÷)´‰MÎ*ú–§pYmäYc%ßrž=7É1ýô}ƒœ´J̲®ó •/y†Ø)te\/ŸÎ{FÎ6ÓG=£P0½ôHÐö×›r~¢1Ìð¸Ñ»iópiR!³ 'Ÿ¦“ç„VÜ*vnPèheÐ)ú†m‹Ý6˱ü '—2\˜„f£ÚZ/zQ‹QwTÐúݳ¾2c9æPirÌôöcR‡xFÊrÐð,W•š¬R ú ã0‚m‹&5×,±˜Î\·Fg,T{²«±¾1²0WýPNŠÜbu*\2ûvzÐ7¹ ×óIÃ;bzùrÇ4sÅ÷¨c»FNA™ï2æ”i“/DÖ^ç& Ïu}…Õ Wx¼P[庆)ÛBÞ!(vËšÉk1‚¶¶®J~ï›0³iÙ°•w ¿äÑëÎÅuqÈÕlÉóLÇO÷3S¤YØa·äeÍ`ñz5¿=bÆîv²¶[da÷˜þ¸Ësà§:~†ulÁV°QG¯ˆ[p«ŽMجã6Ü®£/ÑW}(/c·Â•„ÙU²ìœééø9^Ññ ¼Êzõ¸GtL˸¯éxoèxSÄ[¢{ï(„{ †çëø¥¨…_3Z­btºN<ý&‚wu¼‡S:ÞÇüVÇïð{â:þˆÓ|¤ãOøsë˜?eìça0`Ú¦/NH&ÔõŽÓÝÌFpVÇ'8Á_tü癹ÎCV¡ ¶$À:ß¥á§øLÇçøBÇßÄå€,ºc)“M5TX³d r~Êi®¾p‚Íz¦á›äžÂ–¦EÓ-¾ho…’²Ç—çM¯!°âD82&ÍFÚÎfâÛá~êN695©ª¼àĨï*…ë“ÍN­Æã§Í*ÔJWË Üjœ+‰sçXѵK¾¹×ðÇ™#›5‹_ÉÆ‚ìU·üRÙK\ÐSc»LêÍêqpr¯@Þvék²ï;`þˆææºk“ WÑ‚Œ ®(IG¢íwy#7ðA*]ƒ}Ëÿ†Ý0yñ¡¾b¡†±­ê¥Á“>ÙÕü2‰/Ör{ŒÅ!ó]hN¥©Á¼U`v_ L®ñ¦‹Ü¼Ýêžu·åüÃF¯ÏCÛ$Ðî¿hõ̹˜ Z °Yôýßo–zW·]rå ŽÄ!󨨰ŽÉ>CÒhmo—» `Û[myÃUZ^r•–÷\¥åEÈçtˆÿ}ØÆÙÛÙÛ‹DØÞ˜Z?•ºy-©î„R mZ*žA8•hAkê "Ѳ;([9Œ|¥^é߈o¢ò8âMB+zoñ¦%Ô[ç=”ú-e,;‡Ø¡3h FzËã+(ÊXy†jCe¬šÆšõeħ±š %ÊàÃe³¸üt03þ"Ú)h¡íÓ˜XÒÿsþ‡ºËX=">gqeÕ0~?S¥•‘ UWß¿!ºî³è¡;p¶f¤†f× ñÓZ…­ZB; ^ªÓØ.½k>Ctk¸!ÆuŒ‘s”jDxלúï§U¿4è,ã‰ÆÿÖYVe¡››¨-£x2†ýVfW]þ¸À˜¿­Z%´6‹s¼~$¡®°Bª:ŠÕ”½H’C[È¢ ¹s˜½ÈœdÍIòæCVö<­ÿø7vá+ô«8Tßkq—ºƒj÷¨ãȨ“Ø£^Áz<¦ì㯠ìÝI¦†8s=îb/Œ/É™»1M¸RåQRMá~U8¬vá^bia¼a†¢çU¸_5z|»Ÿ~÷Q£Q3ܾ“~÷\ä^Qž†SeÜ|z "‡«æÜP¨ØÄH¥ýU¾âÛLøs‘;•¿¯PK ²•Gj j´V8org/gradle/wrapper/PathAssembler$LocalDistribution.class•R[KAþÎfÝÕt«qµ¶Ú[´yˆkëÚâ[KA!´…|(L’!NºÙ “M‹ÿJÁPð¡?ÀU<3†Ò¨|Ø™sû.sØË¿¼Å«9Ì`­OMôÌÏ}¼ôQ&øm5ÈTŸ0ß芟"VY¼¯ù~ܪ+Mðòc5¨ì6™îÄ-Ú‰ŒiÑïKùñÞ` {ÍDjÆyTªò„½êôñIÑÉlóàÖ²¶$,4T*? {M©¿ ÂFÖÉ¡ÐÊäã¢kŒm¯Îöµjs•¥„à M¥®%‚¥ydwªµÊ-~[Ø‘ùÿ%»žRuóæîŠ<Ç[5'_³¡nÉë$œÙ6¸E<`=Àfø˜õ±AxwìÆZIDÚ‰?7»²• U³Êò46¬óŸáñ?S@h¹ìà‰=WÙ-øíÄüºPK ²•G’cJK!org/gradle/wrapper/Download.class…W‰g~f³»3; 9X(¦ lî" ’´Ô$vÛ4Á, ]Pq²;Ù,ÝÌlgf Tm½ªõnµU¤^[–¶l(ÐâUT„‹æ#bσ*ÂGe|LÆÇU4ã*šðIãSbùÓ Qñ|V4ŸSñy|AÅñ%Ñ<¢íÇ|YÅW𸌯*øšŠÍøzÞÏD»‚o¨xßTñ-œT°SL¾-Œœ’S žTðßUð=ßWðOÉø¡ŠÓø‘Œ§e<#ãÇ A‹™¦afuÇ1 ñŽk,ì·­œa»Ãáèø‰á¼;o˜n&©»–-¡qÿÔäSûâñ#£wNOÜ-AŠIX=j™Ž«›îŒžÍ "J «F¦ÇÆöM‰Çí£h[³„`ÖJ§ ZÙ8nÙé´­§²ÆÀ¢­çèq`Ü[’ÐÄyV8ÌX愾`HÕéYÝLÄ];c¦¹-\µmưvtqkÆÌ¸{$ŒD¯ããZs×Jºf$øG­Ý7gLc"¿0kØôÙ¬•Ô³3ºó’ÐïÎg˜ÇMõïµͬ¥§÷ I˜ˤó¶±2ÁÞ ¢Â³’*)HØ-gîÀôT¬jÆËd /LYO¥láïÆÚ­D!e8nÆ,Ùn¬Õ• î;ž4rbÑ‘ñ ÍËnc¦kئže1^?êõîÙ‹}lÇ8s¹×Ï~}÷¤îž³ðu÷žECwßYø) œñ¬ÝÁv‚l7q÷f„°hÇF´¸“+ÝE;ˆá.ï­ºÞó/y#ω8æÇ®Áçb×ÚpðäËh¼%!-!tjÅ{#w|ro¥×¨çQ+ê•23€wavb#v‘ï&J»¹2Èѹp‘ßÄގy¡“÷‘ ¹ø ÙøSù(a8IfÊUVæ«e˜¯–`öá->CŽx d¬~žíMÌ"ɾš|à”X,H °×™Hÿx¸›T¾'ÜÃv"ÜËvÐî] Ü/º`x@trø–fåelO4P«!žð÷ÄH žF‚ñ„‘ã ¥7žhö±!mâçðŽçÊ©ïðÎÐñ½LA-<Þzu ¹•Çìã!DЦЕàêSÁO=uÓÞÅla潋)®o†#?­Œà(ÿ´5D¨F˜Þ>ž¬—^¼8LB-J‹ÐïšúÚAÀÕÿPK ²•GÀ>ÆPN#gradle-wrapper-classpath.propertiesSÎÍO)ÍIUHIMËÌË,ÉÌÏãRöÍÏSpIMV02T02²24³21Qpv Q0204å*(ÊÏJM.)¶M/JLÉIÕMÎÉä**Í+ÉÌMµåPK  ²•G$Ù–eÎbuild-receipt.properties5½nÃ0 „w¾JA”3hÉV ÈÒ¢kAK´£À’ I6úøµ›„Û}äñÈau³½®~à¤C þœç\È/ZIlP)Tˆ¬ßä^`¢÷®¼[­ºv°Æ²í*96Qo‡º;Ÿû–h¤¦gT5µp‹¹ò¬-o(¦DvfÓ.Zò-=Òœî´Ñ7§ìbÐ(:!¤‚˜¯‡ùÃ…õw¯~%°òÔªÓÄ“3°¤xgSô#’y~kæô@1´„í±äB™µ(_àé8ÐPK  ²•Gorg/gradle/cli/PK  ²•GÈô–<S1org/gradle/cli/AbstractCommandLineConverter.class•T]oA= ‹+¶ˆm­ßÐå£tÛ>™BHÑhBªÒÄÇe×m`— C£Âߢ/4ÑÄà2ÞYP–´ôaçÞ9{ï¹sæÞÝ?þpˆ# ìèØ5ÁŽÏ•÷By9yE†xÅõ\Yeˆæò§ ZÝïp†Õ†ëñ“a¯ÍEËjw I7|ÛêžZÂUû ¨ÉÏÔð…c:Âêt¹iw]³ÖHaÙ²î÷z–×Qduß;çBrQfظÌõµÿŸïè&D•V«\%6Ý# ǹƙun™]ËsÌ·¢XË3Ø»ö·e9†H‹%Ò²¶ˆ‚®IÒk.Õ=,È÷-1à‚ak^ÀÌÁß1½è”•¬)…ë9¶(id0^}±y_º¾7бÇp«é:ž%‡‚®ì`i6¢Êt*­ã°ŠjºBL¨ FÓ ›¿vU³Wõm_ÕIÂÀm†ÌuוD ûI˜8HâŠ7˜†Ô¼&†í%D…ËÌDÕ„3ìqON›B ¡üä:ACvs×Ï€úÒbÁÌ0¼\8´ùy’ ³3CEwþ&T*µÔôkYú+$@Bèß!KÍ¡5I»YF6V¸ûANwh`+´&ÇXEŠìÝKHš,£Î­Qž¢ûFV#»ù ‘ˆžJ#h…Rq„ØÞñïÓ +dAy ¬Ó~#¨TçN*)oÞ°À»OO„¢Sx€‡”«Î‘ 86'çÇ?šÆ?¦ø'äk„<ų@z†ž±—ÅV`·ÿPK  ²•G2_e¦è(org/gradle/cli/CommandLineParser$1.class…ŒA Â0EÿhµZ v庈kCÏPEÁÄv¨-iIõp.<€‡S\ºp>ó?fÞëýxȇCD„èln¶àm­˜°ÈMÛJ]îkÍ'iÛu#ï’0ßèBWëêÀÝÕ”!f„¥±•¨¬,‹BÕâçy•@ˆwZ³Í•tŽ!é‘BI]‰ã¥á¢#¤ÿHIê9|gèߌ|{Ÿúü õ-™|PK  ²•GRB ¨÷<org/gradle/cli/CommandLineParser$MissingOptionArgState.class•]OÓ`ÇÿÏ6º­ëd  ¾2”½ cˆ€€&‚/1N4Á`‚W¬™5ÝSÒß/¼ñÆý ^H¢#ñÂà‡2ž§-sKÆ–&í9OÏù×´þþú  „1äUÄQˆ“4%Õ«*˜–gE)ÍD1Å5ÅÚu KD1Ç0ôØ“ŸpÛÑí —»:ƒö@Ý^3¹ãèÃ\Ù²«ÅªÍ+¦^Ü1âšU«qQ)B÷ý&Ž@–)ÊŠ! ÷ÃB¶@n“!²fU(ŸAi¸¾WÛÖí§|Û¤“á²µÃÍMnR#î ƒÒyd8Ž!ª>ò¶] ªZìžEGO*%Uão·uÒl×GQ²å—ü/š\T‹®Mn˹-†0·«2¿#/’–hAlu@t€ö×ý„%Ö-q*Ñ2ßÕN¹wÓ e‰&“»¢Bµgs›Q\gÃó¾†Þݧä-FèÍŒ¼•&Žã nX{öŽ~Ï‹2zÄfZöCà Rò6¯AÅ Ó°ˆÎἆ%ŒGA¬ùþöˆaª—3ÌöÞ@†L÷v0Lc8~£c†s¸Cª7ð]S—af²=/Œêµb¯¦ —!ÝÍiú€Å!WiXNƒ$!9!:"í>i!z&òì¡|á'Âû¤†Èd&Ïw`8Ig£¾9N‘O’XF×iŒÐ¥ªä uD¾5x äRlâ( Ž‚38ëqhKÎCŠO ™ÿp…©:”ïm¸O.í6pÉ'%•¤É0€o Æ%˜rŒ¶C?7åo@ãÓ¸ <=@QŽÏþ·O•îì b쫇Ó|C—Ma"€Ü!˰߰°ý¶d^7UØÜ°Ë^ã¥t“^EYÏ3G5Dh8%hù+aòVÂEÒ3ôD*öPK  ²•G¼¬M2‘ƒ=org/gradle/cli/CommandLineParser$OptionStringComparator.classTÏOAþfºeam¡ò£`µ‚Z¡Pd) HJˆ¤‰ ± ‰Þ¦í¦ YvÉî–ø¯ÀÉ›{ñ‰&Ƴ”ñÍv­Bkj8tÞ›÷¾yïÛoÞôÇÏ/ßñÌÀæ jѱ cÑ€†%µ˜:–UšlQÇŠŽU†-éÈ`›!–Ÿ?`ÐÊnÝb©HÇzÕ<®ZÞQµ)2ZqkÂ>žTû(¨‡ÒgHïÒuöO:²{|"<¸Cb×q,¯l ß··Yq½†ÙðDݶ̚-M §®š½žoy¹Þ•J z-ÜQÓ¹|åHœ ÓNÃl#KÝ‘ù]:ã†ÕŠŠ} “^!üC× ÇÞýÞ¬\k´W=²jA©;¢ñ÷ËW{D9•!¥×–ëûùÅ’º„Üÿ†öeÃAS‰²õ/ªÍ@Úæ%·º…ئRƾÛôjÖ ©n5ÝÕnIJ dO±®cƒáy_Žeá[»Žo9¾ ä©Õ=Ó}ªã£&fH]çͰqÃiºR¬-Ãx/µö¿ šÛrÁaø†hfúÁ2=BƒFâ=Y \ K»aÚ™diZ_¸ÿLÇ­*ÈSH‘ŸhpãPsEòD‡?!Fq`§p˜öºöZl{ñïݺ–=ƒ1¡#Î[Ùsåž!®µ¾B{Ë./z Õi|ŸþCÀG1ÌÇåã˜åÈóIùVy&$´ÖnRÞ$¦B’;¸C'r«Èà.ÑË"‡{äi©"žˆ¿¤LŒlr¡ðú"ý.0Øêùõ3m`§Y’(N‡Í’”›V055QáM²<’“õ–3Ýt Æ©`Žò1<ñ³˜ mcd3B£ä= ‹Ô Ý`OùPK  ²•Gè# òGK1org/gradle/cli/CommandLineArgumentException.class•‘ÍJ1…Oú3£µ¶Zm+êÂî´Uו‚ˆ‚0¸°¥ût¦‘™D23êk¹*¸ð|(1IK-‚YÜäžÜûÝòþñúà Í Ø2aÛEÝEƒÀ9ç‚§=‚ú¡O©QzýTqv†…K9fUŸ v›Å#¦ti¥æË€FCª¸Éçb!ð„àÄ—*ôBEÇó‚ˆ{—2Ž©È… ³˜‰ôê9`)—¢KàÆ,Ihh©¿\´—xû¦ &J>™ùÖp1 Y¢Iõ¥¥¾ÌTÀ®¹ñÛúËØ©”Q„cB… óWì~Í¿ËDÊc¶¸D yý få@Ì]õtžÓ»ÓîLA^ìýŠŽ%«6uåVõ©1«Òúš¥8(c]3 «2gÝèy½»íÎñ¹Ÿ°=Ý´oa³²ÌÃÌ©Š kqÓv×>PK  ²•G?hÿLJ=org/gradle/cli/CommandLineParser$KnownOptionParserState.classÝXkxå~¿d“Y&†…V§šds‹Ð´!¢¤†@LŒ´ÚawL73Û™ÙìÅJ[íÝ^Ð6V{±ÚzJB¼Ô^°¢õÖ¢Oÿöyú<}úߟ­=gfv³›Ý°‰?ûç›óïܾsûÎîÅÿž@;Þ•±w® %!£cL!XŒIòòy^l^^\¦OIcBÂ×ਠw1ô…0¾X/áËLt·Lâ¿ÂÛ{$|UÆz|=Œ{elÃ}2¾oòÉ·d|ßaÂï†ñ=ÆÜ_ïã¼üPÂøø8? ã”ðcu°Âø 'yy(ŒŸò÷aàgLûó ü÷Kø%«yT¯$œP¬¤kXæ€k戄“„Ù—…¡m¯iêvOBsÝhí³ì‘Ö[‹'ôÖXÂhí±ÆÆ43Þg˜ú~Ívt»&›‡@¹¯Aàê˰úÃqélÅ€1bjnÊ&Á5 Žwúû„fŽ´÷îbqî¨áÔ´]þæ¾L½Ó0 ·KàB}qòeF¡¸ç‹;zyÎlõXqòÖLÒŸ;¤Û´C ÂDú¬˜–Ôlƒ÷2ÄÞXw“iM˜¾U9ÑÜ^܀¬ä[Ù2»í‘Ô˜nº»êóÃÕ°ÜT ky‘|q«Ø÷šíöëG\R-ÐV¿l«FtwæÌ[^Zßp«wâL&töJ™—²%FÀÚ¬¼ìuu[s-ά ËÕí}A*I/´ém^²åE>È @àßÿéYœºÝKá’#m¼´óÒÁË^:yÙÊ}` b(`VÊŽé7œæëòhZ8h ö WÁ ¸‘¡'Ö̇²Û¶µ£Ügøè× v¡GÁVlWpv(؉)èB·‚A 4.nS:“v‰éAø·ÇÍ :WýV­ÖÕ:ujÜÒÕ´\ÕÕîÔUÍTÓßBýq>ã÷:¬ÇȲßàI6ï)Oãݦª%Ý£6uBsÔ¤mq=®ÞaÙjlÕ-N+8ƒß*¸7+xC ÎbH”À¶¢.ßk8e•Ÿ9tå TijÍÓ$µßú †*˜Á9 ³ ÎcNÁsxFÂó ^À‹ ~ÇÁèÚ›J¸ÕjFº£Nè¶¾dù/á÷þ àìƒ?áBŽïýòQð2»ýÏxEÁE¼*°~!Å®”‘ˆë6õØ£ºªà5ü…—×6¤ÕŽד¶#ŸÄÕf"z¯HxSÁ[,ümüUÂßÔb•ªàÞ¸ööjŽ%¶Ž¦ÕpÍËêAMËi ô¦/}ºâ½2h4ÔÚi-§lÓ¨Óo/ðFì[Xuôlxzª ½o,<¡›#«—^—܆ÐZ<¾€;­†^=F݉„5‘yè±– g7ùeÿ§ÀÁ%8#ÿñ^ª+´XLwœšöÎ6jÙ=KÖ• xrá¥ò^ Éié§ô¶Ž/þ´å‹=ÀT¾Žqéܼ42Žb6Œ´‘ú†ü¡vc&¨é>•ܰŒôhå0g‘|,eŨæðÜC›Þgm}C~RqÈâñùᦊl¹>hAdýf›^]æ2gb“‰÷VŽ÷ö% %ÃjÝO2Ü!›ïǃ·–Lê&¥~sÁÁp‘fºcý¢9Ov­t³YSÀr\’w ÒÈ7ÚV*9dpÅ®Îñÿ€ÎÞ[™ƒ [³Æ3±¯½œGÒ©7•~’vÒOÞrDx¤ (ÂS…÷¥ÁÂûÒlá}iî ùïz‚K°»²’‡³„g:ù$íD)a€¦hãJ¢b¥Ñ9„†gP6…òhÓ¤hóÂÑêÐVD« +Ÿñ$ÞDë•hÄ<Y<Š*ñ6Š“¸JœB­xâ ôM'ÊX>öbàAlw‰±å¥͇<ˆ­/#ëöãS%¾?:Ї°iÊpdeèy¬.ž…4pWÌ òÅÆi¬NGò .oœÅš ‘ µ§3·ØÈOAO“õ§±YœA—x½â¬wƒu¾öÌ úñi mps`ãYOã6jIKxU“¨f}³X'0‰•sX?ÌÎÝp:Wõ*¾¾`ªóPÅsž:Ũ<%J:<¥ høJžÌÈ)g¼x)‹?œá¿%m¤x€INeìÈIÔeYè{­º ×Vðþ6úZ7õùl¢Ñuö€Ï…N¤o~e:WŽÀ,Ý{›fñV[EÀÕ‚f¯kú›§Qsêýùbj/ ƒ ’sØ<‡:JÇúHÃ4¢,m‘&fB‚¦A¼-þ¾umY 6¤´÷óMˆ®ãÔûÿ$PžÂuˆ X#^¦¬½H±·‹×0!^Çqñ&Å›xX¼…“âm\—ðžxÿïR,þî9¼‹Üœrv˜²¢÷`nÅA’ýá3^†ÿƒ*ÅÇ‘óƒÀtÑøYÜQ ªG-±M²$b´±©¹:T]6qfA˜ñ´îñé2Y©àÕ·ð XPa âA…)Ѓ Sp‡Wa `Ô놧á0>ê%Y9¶á®…ŒÓ÷!þìe} n§/*ÃXO߯ÿi;†ÇBòÿPK  ²•Gk±ÍÛ7org/gradle/cli/CommandLineParser$OptionComparator.class•UmOÓP~n×ÑQ:oSðD oe€ œb0™!ñcÍ,éZÒvÄŸáá‹_ÀHbøì"žÛ6s°JáC{Ï=ç9Ϲ÷¼´®~ýPÀŽŒ4ædôòWæ%,ȱ(c Ë^JX‘‘âû^IXãðu E ^3tm–ám2$rù}±dê }ÃÒw›Ýù¬˜¤¨Ø5ÍÜ׃ïC¥è}5\†ÌÞ±gØVÉnkŽæÙƒR¶,Ý)™šëê„XªØN]­;Ú¡©«5ÓP ÛЬCæ“æ¸º3y“£È Õüú»… ð,Æ#òeâ´}¹À0ïЂ/Ò]÷¨i'šjjV]­zŽaÕ‹ S¹6ãÞÁ‘^óŠ~ áÛÂuªÐÆ- Tøt±Y+yÕ&ïdè®uKóš<£•ÿµé¦ú¯ ñYÚ$j¹j7š¾cð¶Èv„ŸçÔ 2èWð[¶VïØA–Û›+màüSÞ*(áuåÍB1lņ,i®^¶\Ýr Ï8Ñ;cÅ Œà=Ãx\Ö8n”¡pﹸv± r CQ¥£o *]]÷‚ 4¨ý¹|[TuÞ’·Ü%`anošt¦€.AƒAiÏU¢ìÑ WÌGÅµÑ ç®S“/c¾o½4<}ôu!ð–£ÝíTZi®œ>‡ðƒƒôîâJv…!’•€a<Ÿ@*QèüÈ’´®Ìœ!qñ ;Gò'º.!íÎv¨ÖÅ ¤ø¾{nD<ƒ|ÚŠÖ‹1(ÐÁº0‡Q¹ôý“¬à IÜó9žbŒ|§èbã$‰™m:ݳðtÉB¼HOÏ\¢g–ž3(§‘W€­`iL9ó¥I’„ ø…Äk´ aÎXtβ E˜$ÂÙÈûøiÌøë,Ð:AyLS)²”Ù´"“"J?²QúA©XÅè_PK  ²•GäbÕ'án?org/gradle/cli/CommandLineParser$UnknownOptionParserState.class½UËRA==É$a2@ñ…ˆ(Éá¡"ˆ"¥¥UZ…²`×$Sãèd†šL”_ð_\H*~€ÿàÆ×Â7º°¼=™ B%qáæÞîÛ÷œ¾}îÍäýï·ïäq[A ã :0ÑA«œ0“ÂäÅÁ”‚iÌDq5Šk rÙãžÅCüw˺»& êÛÖÝe‹—Ëz™abÅqœáò¢¥ç –™[vJ%nWL[¯âFêàó !î É•güÏYÜ6rkžkÚÅ ‡X†á£Ì>O±ŽŸ ‘Ó6½E=}œ±9A{ÅgÖÂËN‘Šë)«•Ò¦î>æ›–.^丵Î]Sìƒ`Ø{j’HOìç¶óÒ~¸å™Žý—œ-”p˜žßeèÞ}^^rJI·=R7Ù °cS†ë­êÛÞ’{2i·OŠcÒÞi nÛŒ1^ã#rÊÞ²t1b7Àðê?4°yvÞo²´=)L^˜)a¦FZÓËÖœŠ[Ðý©c9â*zÑ'̼Šn$Tô ©BA—Ša F± â&£¸Å0÷ÏÓÁ0ÕÛÔÓ –mGdúá6Ša4Ýj3†š C'/ïn{._çV…öýƵÕ±+1DÂúX† ¡UR´È÷Ô%òH¢}4±ý´+Ñ.L¾_c´±=„´ìÂÚøä:"›‚L3þ2û…}F7û‚>ö§èL«`g%.dþJ\)ù+QLˆ¢gq.¸:K^dIá×µ{""¾ù¼jõ4àe8Á™ ²¶È›#àïu`¹¾@ÊTÁs䥓À?|pªšP{‘Œ‹þ‹˜ï€f‘rÄ m—ÔÚEhQrò!£"XØOÄÙ¯º’UVêH/.\¤ 鋘6–?Û9RÕ?SÍ©UÕ@çFcHû:‹UÆïŒ„1Ÿ-‹NòÉcjXücÎâ4Uy‰<blfq=¬üPK  ²•G"zÉZ’™ &org/gradle/cli/CommandLineOption.classV[sÓVþ”˱E Äá €cÜ”¤P·@H€¤IC E±UGT‘\YæÒû½ý ¼ô­å¥´S¤ÌtúÄCgú'úCÚ~GVdÙ²K¦“‰ÎžÕžÝow¿=òÿú€—ñm;0%c:Ž6Lu`;ÞèÀ f…ô¦xÌ%pó ÜÄ-ñxKÆÛ ܆*cAF>ŽÎê©‚4!½#¤¢x,Æ ÇpG(ßÁª%qÖKFIÆ{d«äè–Y–Ð5~G½«æ*Žnä¦4gXBÇ”^4U§bköÖ¿©n Õ,æ¦[7‹Ã'yBQíbeI3é%Ú°5Ôr™&›u#q2QÐÊy[wÁHH†ÝSYÐJ¶–W…ɬj›ÔJˆëf¾²@ØH7ºh[•Ò¬î,J8ÜÚ²‹¹¢­ -—7ôܨµ´¤š…qÝÔ&ÝÈnÑÝÔ“RéŒ1G³ÕC˜‘µ š(ONT–4{Z¼À­¼j̨¶.öž2jyiµéý~\P®SDz5â,êìžc¬¯¡KBO}p¶ÀÐ,Ì®ÙVÔ!^ÔœÉUmH„(´¯Q×"lbQ-Ÿö¸#a("ÎÀZêrøú£Šw6 ivλçžË=wþüýý à_|d°éÃŦ‡’‡m†ì©TÒœ1dª{m·÷C¾)•¸ô;BßóND™ÅfÜåQ›kiïã¤k¾É„aáöÉÈXÝqÝ2ÜЯܵRB7"ž$‚(ÇÍX‡A¨y/A7’A#î÷¹êÙ>£ºÊ;‘:Ã|¬(ÔæF ͹=”æÞô©U÷&K¿õcEZƒ¾P†á¢Ú|äßyq-£¥ ëS+·Â\ñäU•Ì|HQåS$Œð°Ã†Ýêdíú݄3¬1Tþ‡MZñ@wÅ¥´K)¾ãØ s˜AÖC…áhúU0^]ºí<Š. ùu—Ê“Ga(M"¹%zÂ.ì—…cg"W=º„d1föÁùIƒÙ”d}ÿçFøø¸´6,¤¸ˆO).a9Å¢Í,se,~BèŒÅÙ¿Å‹#ÂHpð+¼o(8„îYÿ:nYê² XÁGðQW¼ƒwe|WÁ÷ð}?À%dîæ73¶5Vü?–ñ6ÄFîeüTÁÏðs ½q8œé©ä3‘»×x[‰½ÀSç/²Ìà”‚ü‚WÏ&SƒwE>£à—ø‡F¯‚)L+˜ùý5VeüFÁ'1§à·øGyÝŒ`§ÕRÍ«£Wæ5‡®O™ÞžJoÆ0íLA»Àè ûEÆ.ȸ¦à:V¼‡§ü«Íä61'!œu‘nžQœÃºwµ±Tš¦îÊK7ïrXrúÌ[­1œEã0w‰$D‚ëÏž¶CîÏŒm  kV%8Óûp¶¼y'ЃØÓZT‰1жO~0ÈúÍ¢–ËšQX|ƒló«%>o¶ª‹èwÄ l𤠼(èØt((ÌTãØãyN,áx¡0^*QpKðWj'DG ƒ\…ð!®Ùèþú ׇ6¬Ùèþú!$ù>Œ!ÊÀ4€0dî¼’»)w¡¹[ß@„b”bìäu1N±…bâ’ýkP$Lç×°MÂUœ¤’ðWlŸ¹Vê´ Gn"½†{$ G»¢ž^FHŽbûp,÷>"]±®Èv„qvåοVî¼w΄1Âç(|v3äü­ßA©“?Íw2ä{1‰û0‹]°±/â~¼„ ^&I£ÝûÊèC9$èE–—g­dÐÃ$}œuvœNrgš5&<g±SвÒF2#ÂSŸÌÓ¤XçÉÓLBˆèÇñi ×,´ÎøŸ¥ÄAì|‚;"Am¹þ›Èœì2úBXõiL8 ÂGÇ:ܾmÌ÷á$œûØx0ì$aOÞöI<ååêM¾}ÛS×!ݵiŸÉ±3¼Šhduåοë~ :H¢¨§nR±‡$쥯½ôX˜Î´› ƒ¢e3~ÝöùîôáS¬÷úº;Ÿöiý %^v^ü¢„…ŽhC:»7DçZ§óÃÎÛè™Kï‹8ÕÜ/ özÿ’_¯Ú´aM¦Q¾@''3.`C.?)¶¬h½åó˜÷˜t˜¢¢I6¶D©®%¢ EOFÝ(õ²¨F‘eõ\ßÀ2KûR]ßAEÇA0ÝC4¼înàeF”]Þ™h}41°îoÊ ZLœ*§Ò’Ÿ-"øvv;ÓHr¤ ÇçZJÄÙ‹ø¬gû ÏöPmvúõ“­«º2°†\ˆÛ)Q·\ô‡Äýçzèn1=Ã!ù,ÝyŽ·Àóœû/øîíâ(}Ø)¦{¿VLC¾ËCŽ£"C%sñPK  ²•G‹A5l| :org/gradle/cli/ProjectPropertiesCommandLineConverter.class’KOÂ@…ÏD|?PâìÀuã#QŒ+¢$÷C;–1m‡  ÿJW&.üþ(ãª1ØDã,îéœ9ßôv¦oï/¯ö±[@yl汕G)‡ívÙ }FHWkw„LSºœ°Ü!¿]®nY×7ÎZK:Ì¿cJDóØÌ螎ZRy¶§˜ësÛñ…ÝVò;ÚHŸ+-ø )ƒ€…n´kS†#cruLXõøgh|Ó×B†„j­õÀFÌöYèÙ­Dè™èÎè%×LøÜ%”ÖŽñŽ…Ž*‡_‰¨å½?õÖˆ:("‡<Ú„bJÕö ®­ØŠtòfë^*K÷¸Õ ßµ¦ XUÞðV½Œ£Üi01Èk ÂÁp8ƒwZ±ß8T0gî?Pôa¦Î›™m”ŒÎí=ƒžÌC S³s ¦§£‹| Ë1\áôZêq-}CÓ_èJšžEˉèjš™E+ ¨ùw'©õPK  ²•G2lW¶JForg/gradle/cli/CommandLineParser$CaseInsensitiveStringComparator.class¥S]oA=3|,àb‘¶øYÅŠ–/»¥úb JbB$jBÓ÷œfÙmv—Æ¿âàÅ—šø`|öGï,L C˜{çιçÎ=wöç¯oß4ð<O2Hé%=½” Tt¸j nà©}†dK9*8bˆ•+' ñ¶;” ]åÈwÓI_zÇ¢oS$ßuÂ>žÒû(>*ŸáA[ø²ãøÒñU Îe/ð”3n»“3á‰ÀõÌŽãH¯m ß—”ðºëzck쉡-­­,ÂN„3ÔU?Ï—^i e“Á„;ºÆ^¹{*Î…e glÍ‘ÍåH¥C9îY \§¡ûY,Ž©³¡Xç ûûþ©ÍåˆfçŸ.Ggú¤aÀb@H·¶ùFSÏ¢ô/@†tOLµ­¿]u(Ûú#_k¹û#¢ÊôÜ©7o”na©Ü¾N2‘Á5h˜8)™»Jeb[ž1¼üß1_bŸ7ݵª#†Ýõj1lFæØíŒדº>ÃöФš^ ŠëèIƒ>7Ê¢0®u¢I;‹, ‰êWð/äpdiMê Oâ:ùæ€ 䡟 I%'›¯Õ/;ÚùŒÄÎLûñÙ‚)¯<…$O#Ã30¹²V癫ö¶Q+åq“¤óvCü#”Bû7Â>8É^CŽî~Ÿ,r©ßPK  ²•G…¥´gÆ*&org/gradle/cli/CommandLineParser.classY xTÕµ^+ó8““$‘ƒ<"Éc’B€ð2DT”0†‡xHN’ÉL˜™Q¨¢Ô*õQ«¢`}W©­VEIˆQ¬­ïbm«}Ý>lïíõÞ[Û{o{Ûzk[é¿ö™™ÌL&öããì={¯½ÖÚëñïµwÞüø¹D4‹OæÒúùüE>Éç¯ý-—þNëä¡S:í`Ò©‰Yãti]:ìÖÙÃ^™Ö4öiœ›Ç:çéTÀ†Nù³DOµnvŸÃsäS ñ\sµÆótZÊó5^ qNËx¡Nµ¼Hˆk¼D§óÅ KuºPfó¹×êt±0\Æs|\'V9Of–ûh§H9_>è|!¯ÞE_œGëx¥ë5nî*¹ÚÇkDïK|Ü(¿×j|©NWãu\ ½õ⊀ô_æã&Ù×Zy£ô6ùx³Xçr·ð:›¼ÕÇÍ¢ üÑ¢³Å­>n“ÉvƒLÄd¬‡­h]ȌŬÓ˜Uñ`$ÜÃmu‘ŽN3jÆ#Q·1M®3cÖŠpÌ Ç‚ñàN+›ˆ)ß^¾n;Ó¸KÃÛÑ]a{rµYÑÆ¸·4Aâŧ™ë`*p3Õc1ˆ¶gk£mj {©m[Q{4¦q„i´9?Å»¶B¯3ÜˬÖHÔÊ׸3e€Ú]fÔÊ‹<ÈËÀ~tk1±jõÚ«¶4ÔÖ/ß²ºvíÚå—40ùWn3wšU]ñ`¨*jµY»«V›qh^È4*b+»¬;ÉcTu½Ù šÜÆ`[ØŒwE±Ã噳‹ìŸ!3ÜVe3X¸2m«j‹š-!«ª9¬Jìme0lÙÊ.\žf(ÙUÜmµ$ÌÅİ5žá/̶XQ«ÙT¾€(Ú²ƒ‘*5´>Ä0XŸ1MB)ª–žŒ™[C,î] ãK˜\%¥ë˜Üu‘K6 µº:¶ZѵBQ+#Ífh ÊïÄ ;Þ„S>ao¶gD|IJ¯„J"/?{ÉÓ)K˜æ•llÅÒlQŠKš@pÈkø ÁlËw7[ɀĿ—¤Q­€&²Ãá‰3” 1ÍÒÓe¸x­p 2î^Њ$ãW,ï ¾€„fÍÂÚHB¶Ë9ÁiȰ´ˆTûAÖ/L gnq×™½1·:m^W y^9ôÖ37=&3ªº;“‘åä ‡¤’”Y9lÚaysò@‘« äã´’AŒœ^WŒV!½[‡ÌNlÜf4 wºCVMAs6l|rú% %,ƒXÄ2Ñ­ÑŠcÁ9™#‹†‡_z§`Î¥1³ Nô§{¦¶³ng߈d ôèH´ÅŠ&“ȵo­ÊÉ‘ü4µVc¢©k»Õ ØØi†º Ôc…ãQù½Ün‹2‘yš–U‘®¸ £†È@œCê8Èdq~r4#3”†rž¬ÖÕaîfššmAÇ𖵡Ó-tÚ†Ó1ã¸zîÐÇ“ã:÷¶H¶¨$m}]$²š•ÇBÚ¬<8&ÄÉéH¶jë60ÜS“±”+²eÀ1+UÈx·vµ¶ŠOÆ ´L͈¸V)2Ï÷†‹ÊdcKw$“ÃÜÔ§ÎèT*êfs³‹M›;s&Óô’¡A @Îî™+çËÊs†³rPÑ’d±@Xä%~ÌRª,>ÃAÅ…oèíBBoŒtE›Qà ŽÄ¢RtÝmÐAºÓ /ÐmÝAw2Oò^ÕïìŠÃ¦–Ùa‹Ð8nиˠüzP>÷6x¡kÇ&qâ;è( wi¼Ûàn¾Ò ‡é1¦â¡ŽƒAì‘Æ_eðÞ+ ?#Ÿ«™ª‡<öëZY}Æû ¾–¯Óx¿ÁŸåë þߜˎ-ƒoäˆƒŠ ƒ?Ï71U )4½êY7㨨ØxùâÍåß ¾•¿`ðmüEƒoç;h%Kc¥ ŠÅ•eßÉ…è.ƒïæCm5/Ó2K‡Äiy‰±ŠÍ•eHË48MV›Ë£ÑHÔàâôØÁY µHB3öuÉà{ù>ƒïC<Àwü ?dðÃ|Èà/Ó=?Âj|Ä௷lÊ6ƒã¯&"¿%~¾áàµQË‚ƒ™f ³€¸N‰u¿&ŸÇ ~‚¿žÜgÔÃÛ­–TpÎ&óìKœÁOòS[©FÍn924~(6è—ô+ƒŠŸág >ÆOiÜcÐO¹×àãYËS§ˆÁ}qîé±éáŒÀ³1Úàçøƒûùy™®¼ô)V\, >!i8Æ5~Qè¿"%­FÚ¶™!»]8¬S…8j/{ëÅ3¦ÇfcÅfÐÒ]Ü‚" lµTŠ/‰™¿ið·$jêÌp8/6[ZŠ#ikM¬ 'GšmšX܌ƋwãíÅ3*fTt ݪñ˿¯jüšdÄõL‡É±8u7GÂq3†¢ífÛ‰›‹›Ûá±f„X ñ)²T³eFå'¬í|_7ø QdBɦ¥{6u^Uß½S½Š-›ËJ ~“¼S†Œ%\Î’hÈçƒC²8ÝKÂpâÝùiö§¿G ŠOóF1wxp:èÉb¸ùœýpÁø4—¥áà}æ£GùééR/ý¼éŽÅ­ŽA öq¼p ¬Ï:¨UY?zÐ-ƒºæg¡Ê=¯ì’ hãະtp™?"ºÀ@üà4®¤ôt¥£ÿ4…«è4ÖùÆ™íÃ(„†¾J}ž¥¤ÖõT0qe´fl/í*_8x¸ÜnƬÝqõ ƒºÑV?F—”:ßùf÷V¹½GãÉÛdQ‰CY»AÞ'vt™¡XAÒ] X1Èjÿ¼M4œÑÍíâÜÜX×ÖX"¢‹JV8–â#$èÓ¶°Áa ÿÌíÛñfdB˜Y½×ÌÆs@Ö³‡ ·X»å]À-­¯pÞš® J%+Ó2'×|ZÙy‰3+v±Üš½¦ºô]yŸ¦Z“‚?IÝÝKUÙfÅQõ ¨¯ÛSÈ4ó†¬p[¼]…)  7DÂIæ+Êä6–‹~®6©ÌÎvŠ=§ÀN UÒ¹pž#˜Ú¢‘®ÎõA‘[˜ òä!q7cèÌODh²$ÏJ5ç…°ÚPèàé¢cC©‡ƒ‚Œ·`Ff" mÐó¬Xs4˜|íë”'Œù6¦•¼Û­než‘“õ¦XÇ# ¿øÔkŠ¢ñAü:ûÅ‹®>ö+ÉÀ Az ëé/)œ2{ Ø<­¡®´ídM¤ÃŒÝÄûÀ‚O¥kfP;¢#\®«ê2f‡VZñŸñw…®EÕí}€Q*ÆFà«n¶2ld/¯·-tà\Ÿä7*›ü͘ÒbÅ‚Q«%uè„֌pU·óOHz‡¿ŠÐY´ƒšˆÈKã¥xF/GnïÄôEÕ¿ÿq‘Wýƒª-”{>Qþ8¹+â÷(ÐâÚŽï—ðk1¹ÑÃhY?yšŽ’·—´^ò=­Ü‹¯Ž–h)¤sé>ô ›œî§ˆ«¬6“GÑN,ë¥\°Ó›z)ï¹Ð5šÊݽ4âñãBH&Z†ï°«£ tž0Æf’ ½»è!ˆØGÓ—1gk£¨rËÊÓÈõTŠ­Wé·*UnŠU.=Bbþú²í¯àÿÃô¹„©ë ôÏw?å7õSASÙ³äê£B¦^:£—F×÷SQSY€{iLCyÅÕÇíw÷Ñ8¦C|Rz~¦oÐøO…ßÓCgâ'üžÂ =4ñå÷Ó¤&Y:¹áß‹áâ:ë¥ßâ)=4µÆë÷öÐ4ìÁtEPé÷ä/«½6e(f­æ×üøå¾B­-Á¢ °¨T-:KѺ= R°õ{¼)ºÉG©ì0ºÔ‡)¯ŸðTÅ‹X¢¯lÛïí£ÊDÌáåMHTÚÑ» Þ5š¢Ô”û*ú© ŒfÎê¡ÙB<»‡Î‘vjÏïë¡9‡¨ÐïKnªÐžÛà©Î-Ê“U?Dó±+ü’}ͨÑ3Yê –zŠå܆ý¹|äÔËGh)tÉIW71„¦¥—éÊeóŽ|<³¢‡æ$ž\*žŽRß4Ž6ÑTÄx-]NÑZKW‰Ûi+uS3]M-tYH±VDY=Kíôé»´~ª÷(DR¢0 ¥NžH;¸˜¢\JqžG]ÜH;y#íâmÔÍt%參øíáGi/?ŽßÇh?O×ñ«´Ÿß¦øº‘O7óéVþ+ÝÆÓí9’þû=H°ndÃWékøÞI“éqz½Gl2¦A3Þ….6iSèëô$éCÎ?…¹Ðj«šõAnn¢WJ¯ÓÓ Ó ƒ½Ö‡ýÖz¿kù9z=•ó;°Ä1Iõw2Ñ{úáÖÀ¿EnG–Nå_Q=›÷'1FQ=Ÿ‘­6Ľ€þ z1:s1"¯•¹!¦llàºJJ.-\Yä bq/XÜçÀb’ý%›»¡¹†±M‚½´ ¾¼¡âDµÛUí)ò¹BJyf×xÉܪÉÁvæÐúýÄï/}´ˆ©¡Â[‘À’Å‚0ZräÔûe19Ö& ™¶™»ÌD[ /¬ÖÃÏà7Ñwü5 q`{EG$«\ÀòúhÜT@ÓáŸ'°Ã5 x™^ÁØb@®øÌ¥8$±s½ª°Ó‡È ÞÏIyÊyCñMú¶m×*ðšò[ý´´©¼—Î|ÖV—5ëz鼆оöÑr˜¢ŸÎ‡é.¨qW(kÔÃö8)½„A¼6› …Í °QHˆŒ¿(Éäb0Y‰ÌÖl.¹þÜ—uÒK@´. Rí~€¦ø}NÓGõ`v„&LO<}êQ¿¯°á8­‚¨°ZؾJyŠ÷aÒ ×`ÀíÏõë}t‰Kèg" ä h”=‹v^ ¥Ý$é%´ÓŠ<‚OÕÇimµá!K.¼¤3µdX¡Ö«åJø™ÂËÜ/PS“hÔº=´ZHîg¶RÐÛ\x¹½)Oy“;ÁÑ^xê&„á–§S!x%K@& ìG —B»ÙHàÕ iFšîBšJ–Ý­N ôþös„Ñû—ß!„>BÐ|L'Y§·‰ßá|z›çÐwù\ú×Ñ÷¹Þá]ô.ßJ?äWèÇü:ý„O‚KÞ¢b8)`Eט%ds!û1z ¼5H¿¾Co#<ß§i»'1û;„ö÷ÔŠÕÐõ(ÂÝK5dC”² ~ORiq ÐØ¸ÿ>½‹±5à¨Æ$¨“iÞè‡ù\~™~D?FøùYú 4pÑl¾ÚÞFnììú©J3Iš9hm=–ÒóçU[Ö/0fóx#Åã=¤¥./ˉúç—h¡]ÔOWÀ™f½{Iùkä-\³²¬¶¦&4=Q˜Ôx&¦ÜÎüæõ9ìZ¤ç²üžµÀ¥RÒVô&"s$¤Яÿ y@óŸ(ÿ •Ûoh9} ¼±ÚPný+ýöæG?ú8*u¤zïöËè?À#Ü…Ïé ¯èƒÖ†ú²Gé· m‡ed×'Êë'–¸ªÝEî‰Ñ®@‘{vG!«'Q‹øû©µ©°-‘žÆãÔÞKAT8’äÛ’óÛ³çRH,ÓÑCáà šH6Í~7ûÆ~ZÜ$¥g/uÖø¤ã÷¤ŠT*»•^î@Þ /Õ4ß?Ñhú3 ýCšOm>¢Ëèo("þN{0w-Œr 3=Î81ØEÏã¨IBûh”GÕ1›ƒ hÏA¯‚vì|¥‚v7„*®Ý8 §¥ ýD ÚO$ ýøWr"'߇LùïÄéX…V<#v?žUgW§‹úaˆÅÿK¿wXìÊ.ÒÿÁQrÎð$ÿýÑa1C2ìõ§Ô­¨ZÍ?ƒvôPXî>Bn×3TV;Nñg(ô´ª!Š„jäÈ<ôþ¬$}ˆ¬ŒE]¸¯‰b¢Ý;[7Ú+Ñ.C{Ú=h÷‚ÇgÐ^­ü¸ƒö¹uºíuŸ„v?ÚÏ¢½óEh?‡ö´7ºsèÚσþ&´7ƒnÐôoî?PK  ²•G_>Ò£)3org/gradle/cli/CommandLineParser$AfterOptions.class­•mOÓPÇÿ·ëè(ˆÏ ‚@ ”¡¢ˆ1Q|ÉDt‰¼1wkÕ®5wEñ#ø]|!‰J¢‰Àe<·«£²‘‚1MzÏ9÷Üß9çÞsÛŸ¿¾ýPÆŠÓ²˜é'IW1«!y &T”U,2äê~³É=«âx6ÃxÅ ³!¸åÚfÝuÌ'\´lkußg…!sËñœà6Ãät²ûL•!½ê[/HÃúv³f‹§¼æ’e¸â×¹[å‘zdL[N‹!çe`‹ÇoÇ÷¤ºæy¶Xuy«e“jŒ‹&!&âë)ëb“¿¯ÙAÛÈ02]yÅßrÓå^ÃÜ„ã5Vf6R\4dr]“ ¾C¨¸Â0Ô–ÛQi2 6{{ÄJ.¢‹-÷ßòÏùÞºïý©&÷Ww{Õ–/IÅU0¬ᘓÉå°”ù*3Le ƒ¶áo‹ºýÀ‘­1Úå3/‹Ì#‡¼|]Ë£šŠ%†åDú3ïµç¿ózœÞØaS2Æu7òXÆM†¹cõ Ãìq¶ŸañøÝA78yW¦ºNô°ó*%ù1|èÕëÿ¡aâ­ø¯évÅ¥Ì-ëþN x•»Ûö!*JôÅÌB¶ÿ°ì)’ú È>#ËiIShÌélŠn|Aj—TƒôDŠVÖÐÇêИ…ÙFÛî(âJËè9‰‘ºD£ôRR;¬ ä%ÜŠ1”C!Ë©1†³ã­ è(|Gú¹¡FJfØ÷é°Km×°¥tŽ$…äó¸¡ïF5k’j|EFß§jr† dY+–ªÖ!kmrQ>ñŸÑ=°Ý¾ˆe˜ép2¸n›”&0ft9\9E'ètN* ‘×iϤåÐÀK4¢˜¥ 9h¿PK  ²•GGÑfì’œ3org/gradle/cli/CommandLineParser$OptionString.class•SíNA=Ó¶”µ]Ê—(š‚UÚ-e)â'ˆÆ# ÿ íX–lw›ÝÅè£øþ•D ÑÄð¡Œw¦+BÛøsçÞ;sî=çÎÌï??~¨âÙ ® ”&c¦‘AY†s)TÒ˜‡¥a! eiªÒ,¦pWž]Òp_Æ8÷› ¹µ=þ‘[w›ÖfèÛns™aÀk‡¶ç’³b»v¸Ê0[ì=×›)m1$j^C0d×lW¬ï·v„ÿ–ï8BvòêÜÙâ¾-ã(™wí€AßP ;e(|åºÂ¯9<íZkžß´š>o8ª;¶UóZ-î6d‹7Ü„_8'™¦_ØAÛáŸ×y‹úŒKý„¦B¯ãkxȆ×Òy>ŸªšEìÓ‚4Ui Á1 ñz]A¡º´@ðZñ’êû Mozû~]¼´åÐÇ{*ÌKˆŽa:r‘摎, b^©hx¬c+ Ý¥ŸïÛNCø:ž`UÇ L1°ŠŽë˜Òð”¡r)ê Æÿú;{¢2Ìœ?3zËE9n£›éBî‡Á;;Üeës¹¥÷ôÊy»-ÜÑíw 'i¦©æÏã†<ý¸ ýÖM”ÆI^NN™Ö¤ÊЛ¥h›¢8­Yóq³|ˆ„9wv  c – ÷9„Ó1Ȩ(Ë`œòù ¸(O¶aÊ“bäÓmDm>¨X1¿#‘Kaà ¦~BÛ>FJ†ƒ”g´!ý“ÿ6†Îl|;á4 k±aÅCïÔx0ù¢ž­r/iAïŸ';`CŠÍGà ’G¡™å¹cÄºàš‚›#'3Ð0Í@ÃŒšôn¡€¸‘ÂmÜéaF⺙ig˜M«Ò1Ì*[Ĥº’Ýî=\E7i…‘ú PK  ²•Gx&âT` ;org/gradle/cli/AbstractPropertiesCommandLineConverter.class­V[wUþ L2™æ‚¡5&­I  ­¶i-4JÓÔ`ÉE©‰i+v€ ™fpfˆDÿƒï®å{_ë m\KWŸýþuŸ d°¥YÂâ\öÙgïoûœ}øã¯_p?H8‡Û"–%œÅÞ¬H¸‹O%¬"ͧŸñÑ= ¬IXÇÆ6ñù¾@–7÷𥶰=„q|Å';¼y â!ßÿHÄ×"r þ¤¦köƒ7Ùb–¢Ê0’Ñtu½VÉ«æ}%_&I c”ò–bj|Þ öžf1\Ïf)^2•bYÊZ<•·lS)Ø›¦QUM[S­e£RQô"7»lè$TÍÃXI=V:ܨښ¡3Œ‡#™}å@‰—½ÏÚ¦¦—HuÂ¥zGµ­¬¦z¬YSkY,ú®Vª™9> ¶Ú¦bZ„‹á¯:c†Ù×ë“¶Ñrõ*í&2Ò M n»Ð8&‹»M2j¶Vޝ)ÕDäÄœ2W5( ,MIz¢n)嚺R¯šªe9½ØôhsÄt‡©4%D± ŒØ ÆêƒTmg™œ“èÎvœÃêñá¹Ö­štÃtK–¸¿•zAm"ñ e7«•tÅv²ûãóÙ§ÛÈ)Á®ö ÈÙ¹‘ßW v"âQÊê—ys¥;£íåâ]Â^W/yªpö³FÍ,¨w5žÂh}Û’ñ6&FOÚ•ñ.¦eÌ`ZÄcïC‘—Q@QÆ,_Q±+¢ÄWöDh2öñDDYFºCFßÊ0Á¯À-6j q€ïdÔqÈ›ïÎtÅ+#‚y:§*[ö0íÖîÐJ™¥ZEÕíö‰f˜~]µ¡r~èÎN¤ŸÂó ãÇÕWÞS¬cXDé\¸/Ãô««ä.†ÿ'ˆ®ëÂìǶk_ÛÃÅþ4©°Ð«âTSâ!î¬ÍâWn¸[Â0 µª(•½® Õ5à–RÉ%þÖÕºí<ÃèaÕI÷SؾꢦÕúÆ.C°iþ$Ôhû°{wŸÅfЪñCMöx(étÏ'9î%fèÿÅ9ðÆo=µïÐ,N=ÝMøæŸƒýB&©õ; ¦Àï­£€ó¸/ N?ÓêgyO:ïa®e´JÚ^ê/F}¿Á³ãoÀ›Ý¨² øÖb ø×b4Øþ×kµ“tоç"ÁtÓZ3 Ñ‘ÞU 0íf¼x÷þ'y÷SŸ‹r¿ 6 aˆaýÒd†Ÿ°Bƒ3 /á¹)LáF}AßÏ‹Ñtôc^l?Å$ͼA_ !è7ðVkéï±gäÁë ¾@”‚Ø ćÄCŠðí²G„‹G°Dˆ¥oŒÐ…p—h.` ÷(—øríørôoó‡õY»Jñ]kçKIrÆInà#‡¿›£)ò• ç`•,r›Ò|4öã ŸõÌm“Y©íYB²åYÂ-BÝéÇÓòô1>qúÔ?PK  ²•G“¼¼ ,org/gradle/cli/ParsedCommandLineOption.classS[OAþ¶·-í"¥\A(¡-ÊŠ¼P«1!iĤƒoC;Y†lw›Ý- Ï&¾ø ‰JD}öGÏì.¥I|™9ûï|ß93¿ÿ|ÿ`+)dPPQL!‚Bú0Ÿ¢å†Š›I,¤€žÆ-,&q[~器+¿÷䲤⾊ {ÌlqWA¦²Ëö˜Þò„©W„ë-+è© Ãb^Ëá fº~—‚³É,C¯zްŒå2¥$JÂ^YA4_ØT[µë”ÜWÑjlsçÛ6)’­Ø5fn2GÈsŒy;‚”ä+¶cè†Ãê&×k¦Ð_2ÇåõU»Ñ`V]Rm4=a[T.ipoSP0˜/œ—DNDœ=tšœ=¼ÀZšÕë+ŽÑjpËS0”?’Ž“¬ ÉþKOr‡¹¡bjÑ©ªÝrjü¹»Àê‚dÒ0„a§jW‡íKÉú‘Õp³ &N«®›&7˜Yõ˜Ç×ÞÖ¸ÏEˆ€4W·¹›³l/·ÃöxŽYû9ÿ2,ÈBS*jx’<ÂIy®Ñ2=Ñ4y€t ZÂcº<ÝN5”ñDÃS)höÿÆy†ec{—ר‡—ÎŽ†îˆ+Þ½[§•†+G±Þ9ú •tGi`]ƒ ÿɾ«Â]k4½}LÒ›ÉЃ¢É.Òw€N "N{j9­—)RF”v@¦x¥xŒÈÖ!¢_û죯Ð*ß!(#F9#´Ó<®bÔçõ«r-¿!~€Þc$¶²ê!’?‹_;B}†S'áèÒü‚ö©]q˜4‚j©T£ŸøÇ©BÕ—ÚÕÇ)ñ«ët’ÿâ’õ”,á§;’ãarÐÅ&1ZxFiW“$óGèàuw+æ&9#¾PòÉÝ4f|tgCÆR(+ôà’‚¨±düc—ÆùÙ¶Á9•ÿ PK  ²•G¶À°s˜ª=org/gradle/cli/CommandLineParser$OptionAwareParserState.class­UíNQ=·]ºív±¡~àbº 5ȧ 1$ šÔ4Á·íZ·»æîÖGñ üãMD$>€eœ[–ZÒšEâŸÎÎÌ™s¦wæîþüõý€y¬'Ä :²òiB£Ÿ›&1¥!CÅ´3*f5$0§b^E‘!Ys›MîÔK–c2Œ—\Ñ(4¯Ûf¡f[…Ç\xf}óf•!æ?·¼ì\t®]($zÍr,ÿ.Ãépx¸|®Â lºuj6%;­fÕOxÕ¦ÈPÉ­q»Â…%ý ¨Èv2^ú–ël¼æ"P+ûܧ¼¾í8¦Ø´¹ç™„[í2ÛŸ‰þkºÉßVMò„ˆa™*íñW¼`s§Q(ûÂr«¹§ Q.²áž$Äuv\çˆ y¬ÙûýèÂ;>Þ¦Vv[¢fnYòx2=èY© #…´Ž³XÐ1ˆ3:ncTÅ¢Ž%,«XѱŠ5†…Påg¾)¶,áùåV5H3 ÷ Kµ; 3'ã<<˜ÞíJÚµÅSÎ!ÿ/g©â&ÃW;;ß^ݸå v,l×y½þà/x…Û-ó/ËTé¥êQ§™óZÍô¼ìÂ]܉\E¹¤/þË•=éÙl÷¨žk<§ŒÑR§wgÃrÅtZ.=E¢Ph†h²çÈ+"J6mLïƒì+"F~ÑOA-¨–ò,Í Åf1B± 娆ìE ý$5"Äy £ó ù3¦¿@ùÐá‹A®U±‹'Öá‰á2®Pžá*Æž= ´QEã3¢D5@–}Cì2Pw¥'3Ôyü=RHì®ö±£©I¶ˆ8[êÒ-vt‹n×Û5ã¸@Ö å$}_Î+:Ë®)ò+“Cž ²â½EéøoPK  ²•G'H g)org/gradle/cli/CommandLineConverter.classQMKÃ@}ÓÖÆÔ¯ª'Ï"4 F¯M)HQ Þ·éºlI7²Ý”þ6þ”¸M¡“B–y³ï½aæç÷ëÀ=Îtœœ$S ® ¡ß §lÁü”)á¿®Ù8åA {Oyb¯ :Ë„™©¹ƒ3‚I¡˜É5'ÜÕ JXd´T"qxöž{a¦…/4›¤ÜORé¿1=ç“Q6›15 ¥Ú¹³ë¤6¾®Æ‡EÛWb‰RhèÀ{'ôq¿j<¬R”å:áO2µú%¹Ñz \ß®X„ËíΛ¯„î ÂÍvâƒùŒ+³ÙT›@h`uš-B-›íÙ¬eñ65°_TÜšJÇVpXÄkäÇÅ{òPK  ²•GCÑæê| <org/gradle/cli/CommandLineParser$BeforeFirstSubCommand.classÅVmSW~n²pq³hH •¶ØHƒ@^A«@ ‰m”6Ø·MXÓÕd×Ùlª¡?¡ÿÂδƒ–©ö[gú¥ÿ£?¢Óswc&°Áq¦_î˹Ï=ç¹Ïž{öþõïo/¤q_ÆYÌ¢f^Fse,àZK¸Îñ‰˜,s¬Ø 2V9Ö°ÎqSÆ>•1ˆMŽœŒ¶8ò·úíïõzt†a,gZ•TÅRw«Zª\ÕSY³VSÝœnh·U«®YB/ê†n/1¬OzÃ_G8æÝ6\fj›AÊš»ÃaØjÔJšuG-UÉÊ™eµº­Zº˜7’ Ë^Ñî›–¶¦[u»Ð(5}2(†¡YÙªZ¯k›ó$íêˆN(@»ˆÓy†AÓ(تeçÙºip|Î0äŽÝX´h“¯ÉÜõ5UUJª`[ºQÉtZ¦¼©wø&~Õªé:üÑ·3<‰äÜšæMS½n9j“*ߌq\6¹˜ G ßJ*y³N;éæ{2#š´hf¢½ìc fÃ*SšˆîÀL ¹œÃˆ‚a¼Ëq‡!y"Åæ» ¶ñÇ— ŠØaˆxI¨à¾b˜÷Œt×xh˜.Éxî¨%0&X}Ë?:À²UiÔ4Ã^}RÖšŸþBÓe¤™É*á"nÎE&ÆëÓ ÁƒüÌ—he›ã;*J"b™áªç‘68Ðp÷á—êÕ7«½rC.?V-í0¡£fO~Áé^y§ë±‰ã‚6{*B½^*Y-—µz=:7C—ëR÷yÊÕ°õjê–úHÏC*dÍf¸ØNÓÍ”W{ÛM æƒñ^ìpžCêþØM•·PzÚkt¯š_gBœR³¦’,ó]xÞ;^©VµwÙ+âýóeØã×àýø¿ÄMœÄ+"ô  Ó;Œƒ¢¼ÓÈŸ¨öô÷zf7iî§^‰Å…/OìÁÿ3Í}xŸÚÓb]C[B€]Çd¦5Âc”|ÃQµ%ÃG¸Øôú7ÐG½¶©O°=ômÅ~ïúÏÁ}ø Òˆô'Ò®ùÔOíC.Æiˆ^yºÁbè´ô;ÎýÉÂ3÷0ôr¡¢Ø‘‘^!ßyÚ¢{œèf‰ê Œ²UŒ±5$Ø:2lƒÞ‹9‡þe—X‹¾† Lm1š¢‘ì †}”äIbR$Yºy¸<­HÔsG-v V¿pÃ01Ò Ã1Kê3gtÉÑKŒ.ãcç{\q|\Ňԯvgé9|ž,QêÇ%ñ\^@œ^Å)ê€x.g!à ¸E¸0õŸI>|Mý7’üPK  ²•G“;™|ü9org/gradle/cli/SystemPropertiesCommandLineConverter.class’ËJÃ@†ÏØ«mµ¶ÖjÕEÜ5BDÄ…R/Pé~šÓ‘$&ÓBÞJW‚ À‡'i©AÄYœ3óÏÿÍœ¹¼¼¾Àl— "l¡Y„Íl E Ê<&Ï dÚú@¶ËÇH ÚgÞLÝŠ{:r”Rïs‹:C*X4NĬœ°€ÀQŸ Û´;hZ3a ѽÜG!]îºÔG‹v¹7S"Š5eb o}ɸG ÑÖûtFM‡z¶9‚y¶²¶~X{()spL`7e.°KV, øTXxÉ¢Šõ¿”fDT E¤G ÄPÇWãJm®h~²­Æ49Aíjx­µÑ° ­ÓsÃhöÌ gÔ™¢n8üÇ5©Û] .FÔ’¿s°9õàQˉ΢ⲙ*•sû/@žUg J*æc±e+sƒÊ+1¾ Õî$p¦¾ô´€6¿¡™/t-Í,¢;©h-Í.¢Z ª>kìZÿPK  ²•G-h‚»2org/gradle/cli/CommandLineParser$ParserState.class•SßoÒPþN) sÀÜT4706ê|3M$š˜m f{»@ú”[sÛ-ú?ùâ‹&>øøGÏmÙdƒiÒž÷œï|çœÛß~þpÇFÛ62ØÎ¢jãv,Ô-4™Wžô¢×„T½qB0;ÁÐ%¬v=é^Œû®ú(ú>{JÝ` ü¡©aÅ´9£†û,³D!ûPK  ²•GF¶÷=Ê ;org/gradle/cli/CommandLineParser$AfterFirstSubCommand.classÅVëRÓPþN[¤JÄ;be -´°x)U.R(XEÑ_¡Ä( “ñ|ßgtP™qüçŒâC8îI K›Â0㟳{v÷|gw³»9¿þ|û †E͈4ÒÑ‚ˆH²A/†pKÀ°€Û\3*BÀ˜€;ÆExqO„ˆûH0Ô›oÔB ÊÐÒ\$gÈ«y%’Í«‘¤¾±!k«)USd£ q²W5Õ¼Ç0Õëlþ¯…%^-±‹÷-1x’úªÂÐÂó[+ŠñT^ɓğҳr~I6T¾/ =Ü]†¶ÄkS1&U£`f¶VŠ ÒŒ¦)F2/ Y8ú8‡âôf-IMy$ Mº–1eÃLošª® H2´Ú¼})MÂzÙ›Z“ßÊ‘¼¬å"ÓPµ\¼\Òçìy6ùà–O\}9ݲ'§JBKeÕ¾½mð ëgòáËYÅázåKŒ/ƒ ZÎ1ˆ}ËÈ*“*¯˜Ž2›ž ~œ“àC«€G&1%`Z 3t9eƒaÌÑ‘gÚº¦okÇ”@g%•„K¸Ì›£Úu¼`¶|G%E5e× uSé–»5Ï—4Ãð©Úª–˜ìÛ²¡©’bðä}Båî\EU‹À6¢:“³Y¥PŒF©J‡jhŒ>»3·L5™“7ùÔ8" Î)&COéH¯¬)Ysÿl©HÀª#¡½?n¼œA;–ΙZ›w¶¦QW+ÚïS žê^ͼ8õþWêÂ'AEýå[è=À|>>ЈsÃÅçÍë6ÚMÓÞMT †>à …wáþH{Úimæ:¶ˆ:ö^–AÉ:HGö8‹€ÅÑd"úÍFý€xˆ&‚ŸàúOø+ê\øúùþŸðïAX‘¦!ÈvѸ³q™ÛíÁ» “HêßW6í¸âç€ì9ZÙ ´³eØ+Ë }Ñ; \G7¹Á¹Ĺ(è(¸ ·£ô]LShü¤`ÅÌc®ç‡ÙB ¸p. à˜Å­¨9BØÊj¿…1€ D'(Íôâê$ÉU¢×<"zˆÂ×@'bjÅ'½—è]ðGZ f‰¦<â_PK  ²•GiÞ}FDgradle-cli-classpath.propertiesSÎÍO)ÍIUHIMËÌË,ÉÌÏãRöÍÏSpIMV02T02²24³22Ppv Q0204å*(ÊÏJM.)¶å**Í+ÉÌMµåPK *²•G íAMETA-INF/PK *²•Gו˜R?U¤)META-INF/MANIFEST.MFPK ²•GýAšorg/PK ²•G ýA¾org/gradle/PK ²•GýAéorg/gradle/wrapper/PK ²•Gh‚df£Õ#´org/gradle/wrapper/Download$1.classPK ²•GÅÞ…ÖpD´org/gradle/wrapper/Download$SystemPropertiesProxyAuthenticator.classPK ²•GçìXsªÛ"´vorg/gradle/wrapper/IDownload.classPK ²•G©zÝ\Q-´`org/gradle/wrapper/GradleUserHomeLookup.classPK ²•Gâ]ÛÅú 3´org/gradle/wrapper/ExclusiveFileAccessManager.classPK ²•GÌ ^F‘ù-´org/gradle/wrapper/WrapperConfiguration.classPK ²•GQ}iå 0´ùorg/gradle/wrapper/SystemPropertiesHandler.classPK ²•G¥y0ºV´,org/gradle/wrapper/Logger.classPK ²•GÎrëŠn&´¿org/gradle/wrapper/PathAssembler.classPK ²•G8Þ¶Ýì) ´ org/gradle/wrapper/Install.classPK ²•GÝÀL‰Ä• -´q3org/gradle/wrapper/BootstrapMainStarter.classPK ²•GHÖ·$Ó #(´€8org/gradle/wrapper/WrapperExecutor.classPK ²•G„¤«² B*´™Corg/gradle/wrapper/GradleWrapperMain.classPK ²•GÙÎx ´"´“Norg/gradle/wrapper/Install$1.classPK ²•Gj j´V8´sUorg/gradle/wrapper/PathAssembler$LocalDistribution.classPK ²•G’cJK!´}Worg/gradle/wrapper/Download.classPK ²•GÀ>ÆPN#´Õ_gradle-wrapper-classpath.propertiesPK  ²•G$Ù–eδf`build-receipt.propertiesPK  ²•GýAjaorg/gradle/cli/PK  ²•GÈô–<S1´™aorg/gradle/cli/AbstractCommandLineConverter.classPK  ²•G2_e¦è(´$dorg/gradle/cli/CommandLineParser$1.classPK  ²•GRB ¨÷<´eorg/gradle/cli/CommandLineParser$MissingOptionArgState.classPK  ²•G¼¬M2‘ƒ=´horg/gradle/cli/CommandLineParser$OptionStringComparator.classPK  ²•Gè# òGK1´þjorg/gradle/cli/CommandLineArgumentException.classPK  ²•G?hÿLJ=´”lorg/gradle/cli/CommandLineParser$KnownOptionParserState.classPK  ²•Gk±ÍÛ7´¶torg/gradle/cli/CommandLineParser$OptionComparator.classPK  ²•GäbÕ'án?´Øworg/gradle/cli/CommandLineParser$UnknownOptionParserState.classPK  ²•G"zÉZ’™ &´{org/gradle/cli/CommandLineOption.classPK  ²•Gœl\ϧ¦8´ì€org/gradle/cli/CommandLineParser$OptionParserState.classPK  ²•G[xn˜”Ç&´é‚org/gradle/cli/ParsedCommandLine.classPK  ²•G‹A5l| :´ÁŠorg/gradle/cli/ProjectPropertiesCommandLineConverter.classPK  ²•G2lW¶JF´•Œorg/gradle/cli/CommandLineParser$CaseInsensitiveStringComparator.classPK  ²•G…¥´gÆ*&´Corg/gradle/cli/CommandLineParser.classPK  ²•G_>Ò£)3´î¡org/gradle/cli/CommandLineParser$AfterOptions.classPK  ²•GGÑfì’œ3´â¤org/gradle/cli/CommandLineParser$OptionString.classPK  ²•Gx&âT` ;´Å§org/gradle/cli/AbstractPropertiesCommandLineConverter.classPK  ²•G“¼¼ ,´~¬org/gradle/cli/ParsedCommandLineOption.classPK  ²•G¶À°s˜ª=´„¯org/gradle/cli/CommandLineParser$OptionAwareParserState.classPK  ²•G'H g)´w²org/gradle/cli/CommandLineConverter.classPK  ²•GCÑæê| <´×³org/gradle/cli/CommandLineParser$BeforeFirstSubCommand.classPK  ²•G“;™|ü9´¸org/gradle/cli/SystemPropertiesCommandLineConverter.classPK  ²•G-h‚»2´î¹org/gradle/cli/CommandLineParser$ParserState.classPK  ²•GF¶÷=Ê ;´E¼org/gradle/cli/CommandLineParser$AfterFirstSubCommand.classPK  ²•GiÞ}FD´Û¿gradle-cli-classpath.propertiesPK11^Àxscreensaver-5.36/android/project/xscreensaver/gradle/wrapper/gradle-wrapper.properties000644 000767 000024 00000000351 12774560421 031713 0ustar00jwzstaff000000 000000 #Mon Dec 28 10:00:20 PST 2015 distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists distributionUrl=https\://services.gradle.org/distributions/gradle-2.14.1-all.zip xscreensaver-5.36/android/project/xscreensaver/gradlew000644 000767 000024 00000011553 12725673404 023323 0ustar00jwzstaff000000 000000 #!/usr/bin/env bash ############################################################################## ## ## Gradle start up script for UN*X ## ############################################################################## # Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. DEFAULT_JVM_OPTS="" APP_NAME="Gradle" APP_BASE_NAME=`basename "$0"` # Use the maximum available, or set MAX_FD != -1 to use that value. MAX_FD="maximum" warn ( ) { echo "$*" } die ( ) { echo echo "$*" echo exit 1 } # OS specific support (must be 'true' or 'false'). cygwin=false msys=false darwin=false case "`uname`" in CYGWIN* ) cygwin=true ;; Darwin* ) darwin=true ;; MINGW* ) msys=true ;; esac # Attempt to set APP_HOME # Resolve links: $0 may be a link PRG="$0" # Need this for relative symlinks. while [ -h "$PRG" ] ; do ls=`ls -ld "$PRG"` link=`expr "$ls" : '.*-> \(.*\)$'` if expr "$link" : '/.*' > /dev/null; then PRG="$link" else PRG=`dirname "$PRG"`"/$link" fi done SAVED="`pwd`" cd "`dirname \"$PRG\"`/" >/dev/null APP_HOME="`pwd -P`" cd "$SAVED" >/dev/null CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar # Determine the Java command to use to start the JVM. if [ -n "$JAVA_HOME" ] ; then if [ -x "$JAVA_HOME/jre/sh/java" ] ; then # IBM's JDK on AIX uses strange locations for the executables JAVACMD="$JAVA_HOME/jre/sh/java" else JAVACMD="$JAVA_HOME/bin/java" fi if [ ! -x "$JAVACMD" ] ; then die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME Please set the JAVA_HOME variable in your environment to match the location of your Java installation." fi else JAVACMD="java" which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. Please set the JAVA_HOME variable in your environment to match the location of your Java installation." fi # Increase the maximum file descriptors if we can. if [ "$cygwin" = "false" -a "$darwin" = "false" ] ; then MAX_FD_LIMIT=`ulimit -H -n` if [ $? -eq 0 ] ; then if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then MAX_FD="$MAX_FD_LIMIT" fi ulimit -n $MAX_FD if [ $? -ne 0 ] ; then warn "Could not set maximum file descriptor limit: $MAX_FD" fi else warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT" fi fi # For Darwin, add options to specify how the application appears in the dock if $darwin; then GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\"" fi # For Cygwin, switch paths to Windows format before running java if $cygwin ; then APP_HOME=`cygpath --path --mixed "$APP_HOME"` CLASSPATH=`cygpath --path --mixed "$CLASSPATH"` JAVACMD=`cygpath --unix "$JAVACMD"` # We build the pattern for arguments to be converted via cygpath ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null` SEP="" for dir in $ROOTDIRSRAW ; do ROOTDIRS="$ROOTDIRS$SEP$dir" SEP="|" done OURCYGPATTERN="(^($ROOTDIRS))" # Add a user-defined pattern to the cygpath arguments if [ "$GRADLE_CYGPATTERN" != "" ] ; then OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)" fi # Now convert the arguments - kludge to limit ourselves to /bin/sh i=0 for arg in "$@" ; do CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -` CHECK2=`echo "$arg"|egrep -c "^-"` ### Determine if an option if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then ### Added a condition eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"` else eval `echo args$i`="\"$arg\"" fi i=$((i+1)) done case $i in (0) set -- ;; (1) set -- "$args0" ;; (2) set -- "$args0" "$args1" ;; (3) set -- "$args0" "$args1" "$args2" ;; (4) set -- "$args0" "$args1" "$args2" "$args3" ;; (5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;; (6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;; (7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;; (8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;; (9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;; esac fi # Split up the JVM_OPTS And GRADLE_OPTS values into an array, following the shell quoting and substitution rules function splitJvmOpts() { JVM_OPTS=("$@") } eval splitJvmOpts $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS JVM_OPTS[${#JVM_OPTS[*]}]="-Dorg.gradle.appname=$APP_BASE_NAME" exec "$JAVACMD" "${JVM_OPTS[@]}" -classpath "$CLASSPATH" org.gradle.wrapper.GradleWrapperMain "$@" xscreensaver-5.36/android/project/xscreensaver/gradlew.bat000644 000767 000024 00000004544 12725673404 024072 0ustar00jwzstaff000000 000000 @if "%DEBUG%" == "" @echo off @rem ########################################################################## @rem @rem Gradle startup script for Windows @rem @rem ########################################################################## @rem Set local scope for the variables with windows NT shell if "%OS%"=="Windows_NT" setlocal @rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. set DEFAULT_JVM_OPTS= set DIRNAME=%~dp0 if "%DIRNAME%" == "" set DIRNAME=. set APP_BASE_NAME=%~n0 set APP_HOME=%DIRNAME% @rem Find java.exe if defined JAVA_HOME goto findJavaFromJavaHome set JAVA_EXE=java.exe %JAVA_EXE% -version >NUL 2>&1 if "%ERRORLEVEL%" == "0" goto init echo. echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. echo. echo Please set the JAVA_HOME variable in your environment to match the echo location of your Java installation. goto fail :findJavaFromJavaHome set JAVA_HOME=%JAVA_HOME:"=% set JAVA_EXE=%JAVA_HOME%/bin/java.exe if exist "%JAVA_EXE%" goto init echo. echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% echo. echo Please set the JAVA_HOME variable in your environment to match the echo location of your Java installation. goto fail :init @rem Get command-line arguments, handling Windowz variants if not "%OS%" == "Windows_NT" goto win9xME_args if "%@eval[2+2]" == "4" goto 4NT_args :win9xME_args @rem Slurp the command line arguments. set CMD_LINE_ARGS= set _SKIP=2 :win9xME_args_slurp if "x%~1" == "x" goto execute set CMD_LINE_ARGS=%* goto execute :4NT_args @rem Get arguments from the 4NT Shell from JP Software set CMD_LINE_ARGS=%$ :execute @rem Setup the command line set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar @rem Execute Gradle "%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS% :end @rem End local scope for the variables with windows NT shell if "%ERRORLEVEL%"=="0" goto mainEnd :fail rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of rem the _cmd.exe /c_ return code! if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1 exit /b 1 :mainEnd if "%OS%"=="Windows_NT" endlocal :omega xscreensaver-5.36/android/project/xscreensaver/jni/Android.mk000664 000767 000024 00000010024 12730070270 024422 0ustar00jwzstaff000000 000000 LOCAL_PATH := $(call my-dir)/../../../.. include $(CLEAR_VARS) LOCAL_MODULE := xscreensaver # The base framework files: LOCAL_SRC_FILES := \ android/screenhack-android.c \ jwxyz/jwxyz-android.c \ jwxyz/jwxyz-common.c \ jwxyz/jwxyz-gl.c \ jwxyz/jwxyz-timers.c \ jwxyz/jwzgles.c \ # Utilities used by the hacks: LOCAL_SRC_FILES += \ hacks/analogtv.c \ hacks/delaunay.c \ hacks/fps.c \ hacks/glx/dropshadow.c \ hacks/glx/chessmodels.c \ hacks/glx/fps-gl.c \ hacks/glx/gltrackball.c \ hacks/glx/glut_stroke.c \ hacks/glx/glut_swidth.c \ hacks/glx/grab-ximage.c \ hacks/glx/marching.c \ hacks/glx/normals.c \ hacks/glx/rotator.c \ hacks/glx/sphere.c \ hacks/glx/texfont.c \ hacks/glx/trackball.c \ hacks/glx/tube.c \ hacks/glx/xpm-ximage.c \ hacks/xlockmore.c \ hacks/xpm-pixmap.c \ utils/async_netdb.c \ utils/aligned_malloc.c \ utils/colorbars.c \ utils/colors.c \ utils/erase.c \ utils/grabclient.c \ utils/hsv.c \ utils/logo.c \ utils/minixpm.c \ utils/resources.c \ utils/spline.c \ utils/textclient-mobile.c \ utils/thread_util.c \ utils/usleep.c \ utils/utf8wc.c \ utils/xft.c \ utils/yarandom.c \ # The source files of all of the currently active hacks: LOCAL_SRC_FILES += $(shell \ for f in $$ANDROID_HACKS ; do \ if [ "$$f" = "companioncube" ]; then f="companion"; fi ; \ if [ -f "../../../../hacks/$$f.c" ]; then \ echo "hacks/$$f.c" ; \ else \ echo "hacks/glx/$$f.c" ; \ fi ; \ done ) # Some savers occupy more than one source file: LOCAL_SRC_FILES += \ hacks/apple2-main.c \ hacks/asm6502.c \ hacks/pacman_ai.c \ hacks/pacman_level.c \ hacks/glx/b_draw.c \ hacks/glx/b_lockglue.c \ hacks/glx/b_sphere.c \ hacks/glx/buildlwo.c \ hacks/glx/companion_quad.c \ hacks/glx/companion_disc.c \ hacks/glx/companion_heart.c \ hacks/glx/cow_face.c \ hacks/glx/cow_hide.c \ hacks/glx/cow_hoofs.c \ hacks/glx/cow_horns.c \ hacks/glx/cow_tail.c \ hacks/glx/cow_udder.c \ hacks/glx/dolphin.c \ hacks/glx/gllist.c \ hacks/glx/glschool_alg.c \ hacks/glx/glschool_gl.c \ hacks/glx/involute.c \ hacks/glx/lament_model.c \ hacks/glx/pipeobjs.c \ hacks/glx/robot.c \ hacks/glx/robot-wireframe.c \ hacks/glx/polyhedra-gl.c \ hacks/glx/s1_1.c \ hacks/glx/s1_2.c \ hacks/glx/s1_3.c \ hacks/glx/s1_4.c \ hacks/glx/s1_5.c \ hacks/glx/s1_6.c \ hacks/glx/s1_b.c \ hacks/glx/shark.c \ hacks/glx/sonar-sim.c \ hacks/glx/sonar-icmp.c \ hacks/glx/splitflap_obj.c \ hacks/glx/sproingiewrap.c \ hacks/glx/stonerview-move.c \ hacks/glx/stonerview-osc.c \ hacks/glx/stonerview-view.c \ hacks/glx/swim.c \ hacks/glx/tangram_shapes.c \ hacks/glx/teapot.c \ hacks/glx/toast.c \ hacks/glx/toast2.c \ hacks/glx/toaster.c \ hacks/glx/toaster_base.c \ hacks/glx/toaster_handle.c \ hacks/glx/toaster_handle2.c \ hacks/glx/toaster_jet.c \ hacks/glx/toaster_knob.c \ hacks/glx/toaster_slots.c \ hacks/glx/toaster_wing.c \ hacks/glx/tronbit_idle1.c \ hacks/glx/tronbit_idle2.c \ hacks/glx/tronbit_no.c \ hacks/glx/tronbit_yes.c \ hacks/glx/tunnel_draw.c \ hacks/glx/whale.c \ LOCAL_LDLIBS := -lGLESv1_CM -ldl -llog -lEGL LOCAL_C_INCLUDES := \ $(LOCAL_PATH) \ $(LOCAL_PATH)/android \ $(LOCAL_PATH)/utils \ $(LOCAL_PATH)/jwxyz \ $(LOCAL_PATH)/hacks \ $(LOCAL_PATH)/hacks/glx \ # -Wnested-externs would also be here, but for Android unistd.h. LOCAL_CFLAGS += \ -std=c99 \ -Wall \ -Wstrict-prototypes \ -Wmissing-prototypes \ -DSTANDALONE=1 \ -DHAVE_ANDROID=1 \ -DUSE_GL=1 \ -DHAVE_JWXYZ=1 \ -DJWXYZ_GL=1 \ -DHAVE_JWZGLES=1 \ -DHAVE_XUTF8DRAWSTRING=1 \ -DHAVE_GLBINDTEXTURE=1 \ -DGL_VERSION_ES_CM_1_0 \ -DHAVE_UNISTD_H=1 \ -DHAVE_INTTYPES_H=1 \ -DHAVE_UNAME=1 \ -DHAVE_UTIL_H=1 \ -DGETTIMEOFDAY_TWO_ARGS=1 \ -DHAVE_ICMP=1 \ -DHAVE_PTHREAD=1 \ include $(BUILD_SHARED_LIBRARY) xscreensaver-5.36/android/project/xscreensaver/jni/Application.mk000644 000767 000024 00000000233 12720111537 025305 0ustar00jwzstaff000000 000000 # Get this value from android/Makefile APP_ABI := $(shell echo $$APP_ABI) APP_STL := stlport_static APP_PLATFORM := android-14 # ^^ this can be increased xscreensaver-5.36/android/project/xscreensaver/local.properties000644 000767 000024 00000000715 12774562504 025163 0ustar00jwzstaff000000 000000 ## This file is automatically generated by Android Studio. # Do not modify this file -- YOUR CHANGES WILL BE ERASED! # # This file must *NOT* be checked into Version Control Systems, # as it contains information specific to your local configuration. # # Location of the SDK. This is only used by Gradle. # For customization when using a Version Control System, please read the # header note. #Mon Oct 03 16:09:56 PDT 2016 sdk.dir=/Users/jwz/Library/Android/sdk xscreensaver-5.36/android/project/xscreensaver/project.properties000644 000767 000024 00000001120 12716304316 025515 0ustar00jwzstaff000000 000000 # This file is automatically generated by Android Tools. # Do not modify this file -- YOUR CHANGES WILL BE ERASED! # # This file must be checked in Version Control Systems. # # To customize properties used by the Ant build system edit # "ant.properties", and override values to adapt the script to your # project structure. # # To enable ProGuard to shrink and obfuscate your code, uncomment this (available properties: sdk.dir, user.home): #proguard.config=${sdk.dir}/tools/proguard/proguard-android.txt:proguard-project.txt android.library.reference.1= # Project target. target=android-19 xscreensaver-5.36/android/project/xscreensaver/res/drawable-ldpi/icon.png000644 000767 000024 00000004126 12513325242 026674 0ustar00jwzstaff000000 000000 ‰PNG  IHDR$$ᘘ cHRMz&€„ú€èu0ê`:˜pœºQ<bKGDÿÿÿ ½§“ßIDATXý—ßoÕÇ¿çþ˜™™µ×ëqœÄ!"ˆ´’ðCI›4N ýA%*ªJÔЇ¶o•ú‚Zõ¡ªú©á­â/è }hÔ_i’¨/Z~’Ø!Hˆc{w½;»;3wîœ>dí8ÄŽ×%âHó0{ï¹ó¹ßsîÙs ë´0 AD`f03 Ùl®w™UMv;±X,"Ë2cTj̈RÊJ!€Çã8HÓôór]œ¦(H5PýHeÝÏPé3ö‡uû<Ï«hhàEÿnLu­eÇÆ -4-Z9‡Vb‡/K/¹tß®–7è g· ¿Ú2ú.cÒKÌ<ûέ€”–LÀpT@ÿ‰Óø(ù•»w€m¾îæÎõa39ÈÁK™±1¦Þy÷Ö mŠ 6…Aalª€ø…q~´F]seùÆFèE0€r.Ñœxi'ÄŸ ˆTr‹´ƒÁ(욈pvò-4”¼îxpçYþ^ º<…(ªw•Ðk† þÖ®aÂÄr›3{&?윞›™$/ª ^¿u@W”À;nCÖYP¸Ÿ}ôB`­ÿq&À—uDÕu×X¬9K á?‰ù{Ç@ùµD^Ë@CdˆF7¢Ô? æüÖeÆ`¶ÝÂÅG¿ŽÉ‚†è¶½aà‘"Þó(ZqŽwNBEkº­ÙÂcð³§ž‚çûÚøC8ŒÚG¶ŠN@€ðRRÇÓsÓH~{òwÏÀƒZ­ö]÷µ(ŠEæüÄ<Ý;‚}NMb©î0bBJ9þÙ®á7 Ó˜²˜±[(‚KÅb±’¦iéÓcïøi2ïP†Ðb‹P(×®(ƒçjUm·¸åià¬ØÂj­YJHˆ([~¯;‹ããã "bæ-FãQ=d­-3³XæÀB)JÒtÓÜ¥K¥"ŠZ⎅˱Áé™}嬯TªXk#ÅŸV¼Ó¶Nû¾ÿ|OOÏ_Â0œŽã˜OžØðCŒm#Çh-úH [´Ú"M™¤L.÷CÜÝ»{ï9}àrCJ´ÄJIçq÷Þ™ó;çÌœ3ÿ ü?´“—3™ êõ:ˆHxžGžçp«Ï,//ßS¹Sã=å‰Ä&‡»ÏøÆ¯2³j80Æ Š¢_=c â8F" úIþ6€oF$<%  vÎ1ýê8çàº=‰®cÿ§? ÉTQÈÌ5"ЉZë{±#€L&ƒ$\dGäw?=˜Ç&8R¦ÂÌeç\™í½„Øq„uT•Œ£ä?úœÌžÕáÀu±”^É:Wbæ™Zk2ÆHc cسã=²#°Î!öìFžQ鯌(å_ j½¥ÄÔHPÑZWr­šÍæÑ(ŽB„RÊÕMîür¢(‚Öa#ýNôI¥~ãû÷F™˜¦õK»û#÷X“ÝïE‚ A,´§hˆW±]±môöèéélƒ])G†¾¤èè€ûŒôh¯”O<¦ƒ?ëÍÈc]é %¥|„ˆ <ì°ýŸ$IË.Å HFM[”B©ÄÀã¬Ïë6_:2fúRAªà)µ‡ˆ<¬<þ¥„Æ®ƒÇ„·7K2UÔ1&º<±èÕ} û,›c‡ Zòžð<½Ëó”'„XM&¢UëmtuuAfÓ8ðIÈQÁ×Òòã= \ªÛVèLí@̹/ “Ž`)­d •²Bˆ%Ʊ3nûmm äì L€½ïv üþã^êÙ›:Á\ÈW¼šR"|2–¹>)…jJh°”%¥`!„“J¡X,Bk½#uWB!àœƒ1ÃÃÃð}ZkTʺvs‰þÄßýõç‚Ü_ö‘òßï_ÆÕ–MªQªžœÎ"¤9’d5HyJ)%¤¤¾¾ÝB`ll J)­ßÓ™L¹\«íH6›Å«¯¾zw€ññqÔj5œ?/¼ð‚šššÒËËËÊZK‹Å¢œ{ó퇫‚kG3}Ù¯Éìw÷Io°Cc0ÂÄœˆ”1ážf¢ö’2ŒL¤°;‘2P6‰T>Ÿ3»võíî. ¡çy¦Á9gçææf¶’jµêÆÇÇAD8{öìÆãããÏóðôÓO™ùóf³9@€ˆzÔƒPc“­Zt$ÝëQÁg @(”ÅT‰õr+ì‰@!ÈðY`¸f3aa²~àG–kSÕ©©©äV¯¯f&ß÷K…Bá_™ù)eQQWJÙ$IîfƹsçpðàÁoNOOÿqÇÿ>çgÑ"fØÀãfRž€´,cv¡ì}R-z*½ :Ÿ‡ Ø[ °?_öÏ~¼8ÄŒ¡Må·RR¥ÓéÔZŸ×Z_³Ö†Xsün¸‰[­^yå™$I¯µ¶ó»&—ý >Q”Â!ÀµçJ%ª"ÑÛµ2¥ZãX /Ô8®º0ܳùâo­E«Õk4OÆq|À9—""bæN¦lðÖ[oáâÅ‹·´ŸU>§}ŒŒô …,ÉN5 0ðQ  @À¢M`×¼k@8\Êà™ÑäÎ>km*Š¢¡$Iú˜ÙÜ¥^:}ú4á–Rÿ”NcOJá¡‘4¼\ùE!eöUœ’y¼»À™ý¨–t»vÉ%`¨np*ŸÇ0n¦D.›s+·O"BµZÅ;#µ9€˜Ù´—·Úô©Çh{âÎÚO™.(ŒîÎã ¿õm4¿ÿ÷ RÜÞˆž*çQÚ%°|ê8fÏM£ûê4Ð>e<"|~>‹ßÝoŸü5œùƒ¿Fà›Àìì,Nž<‰ÉÉÉ[Í!fÞp·o:˜ýÂÃÃ:€IDšPûüð¶sHAàT± úìkøI6BQÉŽ@ÎI›Éo¿‚«—ßF‚¾ï#ŸÏÃ÷ýÍç×V(ƒ>¡$™ŠÃÍ™‹P§žAÙ¨u1ey(|uÎCRº‚“õu-Ph _sx÷—'v³&ì@Ã'‚!B~.@4ùS¸ÑA,>¶ëpƒñŠÆÕLSI´n!!€ýå4*—.`~~öþ HÐ_ ™¾éËÿõõßDeMštû«)ìëUøo±¾Ûd=V#s­ˆ¯^¾?‰ÎâY–ú0Ê›ÿ‚úž?t[@ÖJ|®Ø…R*FÓ­oý ì->¼ü³ûPq¶“ÊLÀÈÍß­`â§ÿŒæ³'psƒ(–3øF³JÜú/c(ÖX¸2ÖšJÏ.Å ÔÙuŒôˆðÈ|â¿^Çd¼ˆ¥‘=€s·½§Aè'ï¶…@<ÄS3¨TÊ÷àBÔÀå¸ÑF`YH|qÆÇGo¼†™Þ̧ÞùS~ „DªXÆÂÂ{Pq?jT¯1ǶöNÜÀåÞƒ£­ÝÑ%ÝaˆÅ¹ë÷~Vq¡U_× _©§pb1mòdQ¾ñÑý(IàÍ{ ZW]ó8D©-k$Ž®€Ñ,Ý' Âðï|×=·æØ\÷A` #£Õ“€m ·MeKÌŒÝÃCèýη0×× ÁÛ—u€ëª‰«Càøé?„ئĵ%k-~vñ=9üü×cš“mÉ á~ˆ&2ÇÏ ÙJpåÊœ?¥RiKsÝU•X;˜Ï?ÿ<^|ñEÄÖâhÓâ…Ü I »I‘°’r?h,áêEøõ=¾×Q¶*rm X¹n¶Z-Àø ¾ŸĨ4Hî!D`üS½„¿Y^@ÃY4––¶jÂݤ” "!ìÝŽÆoÞDq)Æw²ýxʤt®™k{è¯_ç/./â‡õ2¼¹mß^Ÿ‰hC-uC€—_~§OŸæ\.÷óÞÞÞb†Ý¸ƒ’üßJÊ8!"zÒJz@t Êucq uü`¡„‹±ƒîJ»Ì&Œ×Z³RªÁÌM"jaå°[±!ÀO"Jߺ3CJAJ©‡ææç‡çPP,pu¢µnîjµ*2™Œ–R~â˜?VJ4‰è6ï°Æ˜²1æ=Ïó>B„ÌÌD„×_ýÓÚyç„ËÆ˜÷•RKÖÚ|[è!ày^ßòòòÉ™™™ƒÕjõ®‡‚µóóóéÁÁÁ]ÙlvÒó¼KD4MD7Ñ–ÜW}CDNÑR.I)‹DÔ”RòZÕbü>qâøEJ¶AeÛxß÷¹Ñh<7;;ûí¥¥¥ƒaêÍöB+Q“ÈçóõB¡ðv:þ;—¥” í\ï<ÚŽLÀ¢]ð×j£w\ñÌ™38wî:fîh8ÐÝÝ-ŽW«Õ“ι±8ŽGÚJžÏÌw”ßÚ VÑô}Nkýšçyoh­ß“RV=ÏsÌ "AJ‰$I0::Š—^ziý\›rÙš1>>¾É̹$Il6›GZ­ÖXǽÎ9s7€6„B4•R%c̤ïû<Ï{_JYqιµy~§±åB¶Æƒ@S1§µ¾ ¥¼Ö6~ÓÝE;Ç›RÊ’”r–V¾ðóVÚòmµP«Âj; 3ûÔÊÚ›_½m,ˆ‰¨EDQÛ1›ò>ü/S cÆ|#‹IEND®B`‚xscreensaver-5.36/android/project/xscreensaver/res/drawable/thumbnail.png000664 000767 000024 00000207747 12710250422 027015 0ustar00jwzstaff000000 000000 ‰PNG  IHDRôxÔú cHRMz&€„ú€èu0ê`:˜pœºQ<bKGDÿÿÿ ½§“€IDATxÚìýw¼$gu&Ž?ç­Øñ¦É…IŠ£0Ê $BB“±Á'pX^°ÍÚØ^¯ÃþXïúûõ~öË:`¼öÃc‚É ”P£QŽ“oìPé=¿?*ô[ÕÕ7ÌÜ™¹á}>Ÿ¾]]UÝ]UÝ·ÏsÎyÎ9€††††††††††††††††††††††††††††††††††††††††††††††††††††††††††††††††††††††††††††††††††††††††††††††Æb‚Nôhh,U4#zÞôôô‰>t 9¡ €ÆªÇ†~¡ÿ#\¶R“ ¥M4V%}šçºÙÀs­Ód@CCc)@U…ÃO–<`Y“ óD€†Æ a~¾¤€ø³í¯¡¡¡qÌ¡#«ŠçO…û"hŽÇƒÀG¸ž ÐÐÐ8þÐ@cÅâþlÿ„¼A/>.ÃÀð¿²N“ ãM4V$ Æ.ÿ©€ù„ôyÀ¾: ¡¡qÜ¡ €ÆŠÃ<<ÿÙ ÿbˆú¹¶ëh€††Æqƒ&+ •™÷?("PF Ò}*Ø+ ûÏþ´N cãD€†Æb¡àù Ìbü Ãà7J˲àyž`fõ9êýBnT|å10?anã8ð}ÿD_Z ÐX(xþ¢dÕøcff¦EÑ…`šæýÕjµ%¥¤Âsç[*¨¢èÕËË<ËsúÖéH€††ÆbCG4–=æ0þ¹h¡ÛíZA|ÀŸx»”²à¦iJe_5@Gx§ÊÖ;ƒŽhhh,6ÄÑ¿„†Æ‰CIØ_EÑ“eY‚` À;ŒðÖ ¶!€ò°¾@L–g»Í7m後,‰AvNG:œHCCC£ šh,[”þŠûÖEQ$ˆ(0©¬ßÀÌW !Tƒœlå†|ÐúÙ¶ëf=î笡¡¡qÄÐ)e ÇqÒÅ2£Y–Ë'd†Áy.I¶¤”òk¦i†É㜱¦…™ï°,k€…¹{¤©€\@ò5ý `!‘M444šh,+Ìáýg$ Š"Š¢è€”ò2[‡ó/ˆ¢(4 ã>Ã0¤a2›™_ØÐ§“R’išw'»‘<_”‰Ëæ¤Z€H^…sXÈãÜ:M444 M4–J@Y8]0³Q©TºÝnèåùM†aØ2Mód¿™(Š®°¾ðV[¤”OÛ¶ý ú£óiü3k 3s/8AÍõš@XªÐQ …Beƒ¹Äè7º"Š¢ýRÊ«lNö±œ†á!Û¶w›¦éù¾ €‹ oç0ó"ºÛ²¬6âÁTh*·¢0pPc \×?U ¨€2ã®j¸d? ÐÐÐ8"h ±l0‡÷Ÿ>μpfŽã´=Ïkx¥ÀÏ\•Ì„aø¼ëºO†a)å œÂ[®“R²eY&=M”EúÒ…΃æÄúSEÃ?W•@v4ÐÐИ4ÐX6˜gø? " Ãð°”òU ¬y…Ó@öɰÎÌç‡a¸ÇqœÇÂ0¼ÀÉ…·$f>•™Ÿ³mû%ÅãO½þ¾{”´FOúR^ÙÎ%ÛÓñÀƒšé&A ‚&Ëó ¢°,˜YX–5Á&—»DøùúZ<z8$£!)åÙDt7€ˆ™¯D¿au¥”›…š¦ÙF¬Hõ}Ñ5€|è_ ùÓlaÿ¹¶«»Ú  €††Æ\Ð@cÙ` Ìó†a Ö”ò5Õ¯s긵2Œú-L±\#¥ÜbÆ¥”ç(·7&¥4-Ëz4±Ì*P‰@® @Ôcœ/àÛEt*@CCcÞÐ@cYà€)0BˆÉ0 ÏŠ˜Ïî0ãçëkq’aá~–›˜¹FD-ôÄ‚*(é pжí ©€b ¯ ¤1€ÒüŸØ/I ¤áÿA•¹cUh ¡¡1šh,y‰ú=ã+¦i†A3¿ú ­Kìn© Á"Â~‹|æ“{ÿ.ÊCëV’ ØcÆ bÏ?Mä"…Ê€ÌøÏÖ ¸ äârB…üu*@CCcÁÐ@cÉcÀ俲üßd>Å#7˜y*Œ¢K}æÍU!pƒÛÄùV>wm! fϹ7¥”u˲v !dI Qˆ¨-€ÕAe!ý²J%O›_*@“ 2h ±ä1Pfp‹áxÃ4M/ðýaf¾fBFtƒÛÀ&ÃÂùVûeˆ‡‚Μ1vfÞÈÌžmÛÏ¡¿ü/*Ç3üÙ0€gÉû—TÌÙ0H“ 2h ±ä1Ï@î–Ú "!¥lGQôªiŽš§™.¶«pIà«‚'CO„^î½-ƒ0R膙RÊMD´×²¬q"222’[ @Œ¨©å-Š#ƒ¹°½˜(ëX¶œ{¬I€††Fšh,y,””À$"Ã4ͶïûÛ8Çã&· —šÂÀyv]¼¹÷ÅQLtdºÊ¢h­eYO†ðˆ`Á ‚ ‚jø)!¹®j@y›ô¡šóï3þèO#e$€­ÐÐÐÈC%9À¼¼Ä¡yS!Ã04¤”¯—‘u¹SÅ6Ó…°VXØnÙ¸Ão㰌Ėó¤ao8¿‚»žõÄ«ÁÌÃRJÛ¶íg“&J !!¨/ü_,T =H@zÞed ØTh¶&AÙuÔ$@CC#…&KGIÔÖ¼F²G+ ÃË<–†„‰ëÜ: àdÃÆFÃÂ÷ýZ{üS]‰Ÿ¾º×$Üû|f@IJ¹ÀŒã8û‰È | @  äˆDj¯•¶À™Û¯vÌ5èiTg ¤(’€>=&)4ÐXò˜…¨ÿ²í%µø’ò<¦iš~ë˜ùÒáÆJ#ÂÈÜì–‹* ÜîµàƒÑ [Æ,üì5 Üù¬‡—&£ôxŒ(ŠÖ !öY–5¿‡ò¾iÎj ]@>ÜÄÆŸ•ût]v-Ê*æ¨P¯]v=5 ÐÐÐÐ@cÉc!€ÄÈJL!EQFQtÝ4ËÊ9VçYÕÌ]ζ*è‚q·ß†Ð ﻲŽ3×[ø·Ý]´¼Ì1¯H)G,ËzÁ0Œ W"zñ‘(R/?sà•p>Ö½¨Ó€~…tÁœó4ÐÐÐÐ@cÉc Ø /€˜tÃ0<'d>Í&׸MXŠqµ‰p®UÁ ÒÇ#Aãm‰mk,üØ1Qøî¢D(¥’Rš®ë¾œ„òãð?¥áÿ¬òÞ|zŸ|Õø÷éˆÌÌ…´@‘¤¡ÿ²T@îšj ¡±º¡ €Æ’Ç‘µ PÚ0ØgF†aSJyù$GâÕnë ³§ÆP%óì ºxÊ÷ñðK.<ÅÆMçTñ伜U ”r €¶ãØ)6‰$÷O‰™& 9lu€¢HÓÙze˜w+˜… ¸¬I€†Æê†&K³uÝ‚ÌaxMGÊÆö¤'@ѵN7Üá·ðd+ÀcûB¼úL×lwñƒ§<ì›ÊéÖ˜†yв¬" ÈZþ¨ú¿DÐ;‰^i  T¨³Ô¨@Ià î½lŽ”A“ M4–>R¿TõŸ©ÿ¡ôéOîMÃ0|ß÷wHæí‚€+Cp ‚:p’aaƒaá{^ Ø?á-V±m­‰oìöÐöc;ËÌN†C®ãì5 #ŒIˆÒ^ @/¯é™nFž ÙRš$Tú Jh=€†Æ*‡&Kó ÔÙ÷€4€x2`zÏaÖ¢(º|ZJãz·†Uê6o³\ØDøßÂÃûcƒù—ÕA|ïI2y’”²IiT*î¾Ø¼“H“@ò˜“‡œT#¦z5#Ñ @¿‡?§Ç_Xή¯&«šh,yÌW0ˆ I2½h@àÁU–Ím¦ƒËìZ©α\–îñÚxàŧŒšxç%5<}0Ìé¢(! ë8îxâÞ"qù{±þÔý€ôšÿ”|.FS*t«` šh,y!È–‹©€„ ¤ÕAàûÛ%ó6“¨4 Â&Âyv»Ã.ízxà…WluðºUÜþ”‡½Š ÃQË4Ç-ËjSL6(íÿ—kHO"ó/æûs]¨¹VÁ@Ÿ@½†({¬I€†Æê‚&KG@Ô(€ºl(dÀD\ ÀAÔ£(ºt®4h’Àé–‹;ü6žhùx|ˆ7_XÅ9­¢Àðé:öÃ4‚žȤ ñªøø œÐÌóG/Ç/gi”ý2‚€äÝær¨I€†Æ*„&K¾ïÃ÷ý"(.«À>ïJª0@Apy›eótÓÅ¥Ò@l]7Ö¾çÍàññm‰÷]U‡ePQP¤4+÷  Á© 0óü{FÏQç´B 9©ôms†¼ ÄW ì_Ü>°J@ ÕM4– 0¨€ËRj[`%†¡§¶V„Ànöíu·™ˆ€x-<¼/@ÃxÿUu2¡P. PØ–nï{ŒÂœY I€†Æ*&ËGH~_5€’0G"ß÷ÏŠXn&®¯4``vc™v <Í´ã&A“>öOK¼ïÊ:j¶ÈÍ ˆ¤¬ÉXpˆˆ8ߘ¸ç³§†] å÷Œ==^BùõÅTÁ Cžo$€­ÐÐXÉÐ@cÙ@yC NäÈ@A˜¦LÃ0Ø÷ýõQï1Ó-•! %#‚g8Å´áá{^ ðÑtc=À |±§ðI ¿Rq'Õi=Q`z6Ùi©Ec¯úl¹D(X*ö+hʧ×\“ • M4– ”JÕðg ýñz ]îK ”FQdAp¹Çҹ©c‡éÎIÒ7;Ãr±_†øQ¢Øu²7^Я°i™Ö´cÛôøT#JE|)9HŒ>sÚ50w sÒå²ne‚Êúh ¡±‚¡ €Æ²Âli€Ù"ªáO§Ué:“ˆ"ß÷/ôXŽm5\íÔæEÀ!™–‹ûüïxؽ?Äíªb×ÉvQ`…aXs]÷°i‰ ;|B_Ÿ`î¥Üò†¬}p©ú ½nsá„Í h4pç¨oš¸hh †&Ë GHÔ@©€ˆ Ã0¤çuO“RžîÀM³t,"ÕœdÚøŽ7ƒ'&Lvb=€kôQT•22«•Êa!„Ì=ë \líKœØ~F̘ 6 ‚Jr£„1¸G@±Íð¬'z¬Œé C¯“Ú×a!·ì¸51ÐÐ(‡&Ë %:€l™ò1mu@P–P@®-°ˆ…€‚p$ Ë:`ãæy”ª`§š6àû^ î °®aà=WÔñÜx˜ÓaØ A~µR™†JâO;3e/Fä•Þû/ö "Rƒ[ÙV¶Ó¢§T£¯`¡?RÌúZš hhh ±Ì0@uØQc€½€¡DL"2˜™=ß¿2`Y½È®â\«2g9  àL«‚g#z]ìÞâÛ]ÜxN¥OàAÓ¶¬)Ƕ;Èl?rs  S¯½ÏÛ3ç[¦ yá`‘Ó¸S©p€#'%F1ý|QV=¢‰€Æª…&Ës€9«Ð‹¤Æ¿G„`ÏóvRn<ɰpÛX°eªa‡åàv¿…=3>^˜ñ¶‹j8kƒÕ§‚ Z©¦z€\Ñ?h©P_ÈùЮ:@­Ð)p¾³LRï~N˜¿ñ?’ÐÿB^S=7M4V4ÐXv˜G@Õ¤ÝÿÔ*Rïs:!ØëvO‹¤<Ë"Â-î*$t| `0Ñ$ßô¦ñø¡‹ð—Õ!ø^Ÿ€Z¥2NDq÷?¥“_¯\0÷òÊР¾\?ÄÉÓÊFÎU˜3ªó1’F£øÜÙŒóÑûAï1ß÷ÌÎYÕM4–æHä~ÌUBP’‰, K!(‚á /ã–êTl5âw{m<¶/Äù›mÜv~Ï ñ 2/ ‚†a¯âºÓY* K©Â¿<"Í÷³Lλ,ÜÏ%ÏmhÐÀàÇlFRñúÖËŸõfy½A¯ ÌMXG4V 4ÐX–˜§è/,F⮀ `]Ï»2 •$HryƒÎ‰ý¡ÿ¾NRóîPf$`ø®W÷Ÿ­"˜›4̇\¤iÒ)•M4–%u,èÔf@}zäË3]€Ýn÷¼@Ê [M×:õ#:Æ´4p½aá›Þ öŒ0áÇvUqÒ°oìî¢íÇvXJiAèÖªÕ ÃQ| YŸ@ÕÓO_:½ç¤O@jÍRâP6:x·Ÿ//(Ù·€>#9Ã?Wž~>F¾l Ÿ(ÌöÅ÷t~9m€&+šh,K”Ëâ=#ŸmS¼ýÔø+úI€!w»Ý­‘”gÖ…± ~e8Å´1Éwx-<¾?Ày'Ù¸ñœ :>ãö§}ÈÄÔ†aXef®W+“½6¾¤vüSþ$½8YHr!¼Oý£ƒsÇV¬@¹ fY7ßü>0£? ÊvÌr ó5üó‰h ±"¡ €Æ²Ä ¶À€z_$©­‰ ax¾¿& Ë%C¼±:„áyÌ„í¦ƒ»’TÀËSn<ÛÅe[ìÞ`÷¾0;ü ê–i¶+®ÓîÅb?*öHO1]—'(„þ ÅeÅTÀ|ó÷eÛÒÈG–¼Ñ…ýDÉû_ …å2ƒ?Wª€&+šh,[ÌB ¬ ) IBþW¢2ŠÏ÷¯’€s­ÓÀVÓ9bÀ†„aÃÀ7ºq* á¼æì ¶¯³ð=·b•3~T+®;‘ŒνN~V%áÿB9 ƒA$ -„x’ ! …ÁB³a>a…xáEcž3ìB ßøÏFÊöýùžŸ&+šh,[ (Ô@Ô_ LŒo0Ý®w¥/åÐùV—Úµ#ª8Õp°O¸Çï੃!.=ÕÁå[Tmo>Þ…Ÿh£H:Q$ÍF­:A$drfyï> í—ôÈÝ s”QHÙk÷îÕõÅë<bÀ>dÛ6oÚ´I23‚ Pµj° Š;™ÝnwDJiš¦`°ñŸ pÐ2cv¢R"€9´´0dÎð&Æÿ<)åŸøiW2ów]×}‰™Sãm )¥Óív–™?`+€3؆a|Ó0 Ù‹ÒÍ)¦˜o: ‹h ±pt¿hKóÉaóö€´@c9Ck4V$”\Ÿ§[XŸ.§}ô%ƒ%˜¥0Œý‚—¢m–‹š –6ÞQ…ÂWéà›»» Ö5>úš&6ô8z†î¡ñ‰Í‘”v¦ˆóúªâ?ÖÄ7‹D¬€²DõªROÜDR ÜÏY Ü ß÷Ý(Š>à•Maà4ÓF;žP<-„øL¥Rgf€)¥t|ß3_^¸4‘a_²m{º/ò¹åZ€œ. ä =0f9‡²¾³õ ÐÚe M4Vx–u±¡ç’ö¹±P^%’6 ãZJá|ÞÁ{s¥‰Ëf<Æÿúá &:ñ›_±ÅÁÏ]Ó€iôìÌL»3615½ª=ãOJ‰`B9„L ¨”æŒ&¢SHÀlå¹°?âîIÜívodæ÷ ã »†)Ág}¹R©|™m"2…Ôét®”R¾…H$=eYÖ·“c´ü¢ÑWÉ@º­TX I hꥀÊþ¢¦ 44–"4ÐXi˜N/G…Ëó$€™Ù4Íà ò»,±/ ËÊïŽú`× ?Q…·÷x¸ý)‚Cï¾¼†k¶÷4Ì,Æ'§Nò¿–ªùãFd‰¬ «ýW½rƒE€EèU$7=£Ùf/€\4 )ùÛ*¥ü€ÑKì*Ö&ž}xÙ0ŒÏZ–ÕE/ô¿)Š¢X[¼$BˆoÛ¶}€¨=òç„ÁF?«HoE 4 š«aöô5V,4ÐX˜žž.[ ój³mÌ,™{€”mÒ0Œi¦=fì“Á1±ŒWºu\`W1Ý•øÛ»Zhyqñþ†¦_ßÄšzï_ÕóýÚ¡‰É`Ž ¹þO¼ü8y;Ž@‰(Ä ñ¤U"€|sž" èËÃyžWM ú® †…7V‡q—×Fýs¥Ry˜™Ä¡×ó¼w2ó%ÅkAD{-Ëú®ÂDϳ/d)’ð?Jˆ€RÚHˆ™çj 4/4cð­ÐÐ8öÐ@cÅ¢Pó”hR—Î13˜“IzÌBGD‡C0F‹ŸHj­0ñÖê0L¾öX÷¿àC@JàÚÞqI ªorºµ¶Õî ÅÂÅ$ŒŸöY±6€Ô´€M [!V¦(¤ÜŠ‘U#@IèÿˆÞSÅ”Œ°'ìÀ‹–e}Á0 F’—ït:—K)ߊ2ÝaÛöK Y(Ë÷ÛÅõÊñ[Ê9¨çTÌùû,Äó×:M4V ú;ä”óèuÓKÚƒ…>MÀA"\´NýxµÛÄ™–‹C3Ÿ¿¿ƒ ŠÆ1 ?suçl´²}£(²MLn”QdSêá&¢@ô¼}S1ø& ˜I” G€4Š`£©·¯4 R•öiÞŸZ­ÖV)å‡ ]ãÔp£ÛÄ—:“ñìa¢¯¹®û3[‰Hp]†ï°¦ä´,˺Ã0 JÃýˆ ½ƒ<H…©¡O_ õ—•…FV5¼ÿ\¢¿²}44–-4ÐX‰8¹7uøÏ_önÜ3þkH!‡RAÛ1:à͆…›+MÀ¿>ÜÁs‡CŠhÇ:?}u¶Ù{÷V§32Õj‚bãŸv DfR`çæ@Øe³2bï ˜Þ,Ä35´¢`\‰0 +aþ4€ Ö&>ÜX‡Ç‚.‰½ÿqÓ4¿"„‹™mÏóncæËÊ®âqÛ¶ŸffIÈ_ÉûSÅJZ 4’¡¤3§©€2Ã~Äm‚54–4ÐX1˜‡@]7WŠ€`C_$`RFŽa@¸Ñmb½0ñÄßHJS¼yWWoë ¥dãðäÔ†(Œ\Ê x¯5p/ÏO‰—K¤†?NĆU‰ _F—ER J„èt:×1óÛ €Þ[Ãùv_ìL¦Êÿ;\×}€#„0ºÝîyIèß,9}iÆ=¦izèyü9_RFúªTâ‚ò¾¹ü¡" Hôï¤ÆŠ„þbk¬¤\úÂþ¹³DZ&ÈÌ`H"šÀã2„ÏÇŽHg˜®pjˆ$ðÕGº˜ñâˆ3°¶!ðs×4Ðp{ÿ¶®×˜šiÄaz$ÃŒzýz¢À^é_ß I%ALú*ÐÑeÆ”ˆ¨ÓéœEÑ/¾Ä®á=Õ1ì <Üé·À3 㛦iÌ0 ‡‚ ø fÞTúá²mû$¢EôD~i K(d%õú‹9ÿRå? º…ß] ±j  €ÆŠF¡!ÐÀeŽk² €¸G>Å%D²ÍŒèF@ Üè6ap×sž:fQÉÀõgºxíÙ®z~b|jz]….FÒ@m¤ö HÄ€iøùêPŸ×? †^°|ß'€‹‡…_l¬Å&ÃÂ7¼i’!@ô¼mÛ÷#ÉÏw:ë¥”× :w!Ä˲Ƒ{ÕÓ/–"I(å€s‰gˆÙšh¬Xh ±RÁs¬S'ªa GÀ‚h@8!CÇHÐ;(ÆåN '›6^žŠðý'½Œ0 —ðÞ+ë©*QÏ«OÏ´‡³>ÁQ"ð˼~‹( g ƒÐó¨-P.|nå“áß.)å;o® ãz§Ã2Äw½€ ºÇ¶í "2=Ï;%Š¢·pœvdšæc†a09”60êûbŽßV•ÿ³”E¹ÆEÊ §,€~£ìŸ†Æ †&+ Š ¬õo¥iÎ=fQ ›w,Á6 —ØU°~𤇶ß#R—oqpý™ù(ÀäÌÌXE&!î!„8`$A¥_€rKÕóHªâ²@%j7üɲÁp"üÛt–åâ§ëkP‡:Ð5 ãGB–RV<Ï{#3ïtÎD4žˆÿúrÿà ±_šPÓ³åýËF—54V<4ÐXñ`æ¹¢êcN€äXÐ̘’ѱ=V¸Ô®‚üèy‡[²Pwo¹°†šÝ³Uín·ÑézuÊ*`"Ö(¹ôrþY$@%d ‰ø–æÑ³ˆ@šèt:¯aæW:Dø™Úœn: Üá·0.#€è%Çq'"«Ûí^EÑMH « À6ò6Vñ¼iš-"rUµ± °Òý/ë¨þ$ 8*8#%=ŠD@{ÿ+šh¬x(z¯4Ü«6 ÆY$ î $„h#c(ìqžUÁ0Ø7aÏþ0W ¸f»ƒ‹NíUD‘4§[í!°*ÚCÒ&2q_®B ël· {%€Š@xžwrEïP¹Îià¶Ê ÅîöÛ`‚è˲&Ã0ó}ÿ­FÒã˲ƻÝÎM̼-=¶u ?mÏÑ z—Ó0Í—MÃSã.›@@J ßó¿˜ëW vî%“ géø§‰€Æª„&Éè_ôU °Zp\a0B±w?Õ•"äL3ЬìÜd)ë˜ü ´¡ÿø<ˆË$µk^¾)P±€ÚíÎ¥Q]má}µ1l7ÄûÚ,ñXÜúBˆg‚ 8% £ëÕ#~ëEUœ{’_ôÕÓŒLÓÜOBH½ÿd‚aüÞ©ÊŸÔTDŸÑ/ÞRqß‘ŸX(´(PcEÁ<ú—ÐÐXÖÈO¥ËŒ>%B@œ€~"äêÿË`”ëï˱a$0‚2©ñ˜rêá3LŽ=þt]È Ì˜ˆ¤ç{ë|ß#€Úåv oH„)fXâñÐ!zžw3¯M·Ÿ±ÞÂÏ^ÓÀ´'ñøþÞDE"òl;nþ£äðó†:ff '•˜¥uûiID2>?Tö×w‰÷gª¡±Ô #«©!ŸÍÌ î>îÆBíJ4’9NW@`@™§L± Ð@Öáò©JÅÙcƒˆÌv»sµ”rgSøéú¬fƈñ”Ä—âü‡¥ÜEQ6ìÇ2?}ug®7ñÄþ‡[= bƲ¬v’ï·ÒÒDôúô"qT"û%!~s@‰_úWšû¨Õ óý4IÐXÑÐU¥Ó[¶j–mÄ2’5¦  .Žg™1ɱX®j \Bðà‹¾þX7÷<Ó4$bÈñ=¥Šxâ4"`ˆˆ`2`$Q‹€ !'ÝnwS¯`Þè6ðJ§žµH <úhÅýŒHÊóÔÓí—o±ñÖ‹ª "<òr€énïÙ†aŒÂàtò (%.i®ž”nD¹Ï*žÜÈlQ”ä÷¥¹þøðÔCÍß«§1Ÿ¦Q+šh¬F¨"?Õ (Ö ‰XU"¦ ŠË øžhh¬Hh ±* xøŒž¡`Å›T¶sœsæ, ]`8DÇ%&L^Œ<taÀÎM „‰Ï*pïÓ>þå¡NîyÍZµUqí€Á I€`ŠÃÿ{ÿI*€Eºâ@*ŒÉA"ÑjµOñƒà*ôÆÊ0.´«}Ã$/EAÎNqãÙÜxNÌÀ´'±g ~‘eš3ŠØwVZÀ`&&fbIé•abãžzûª×_¦ò/’€Y:@–FÔ ’(ìsBô!‹M4Vf ó—í®.KæsX˜°I—y_íNáå(À©c&.Û·Úï?`üõ-ìêÕÓWÛ[32<Ù;G&f"ˆÁqÖ@Œ´L N¢ 2b ƒ@¦Œ¤Ûjµ_ÁR®ßf:xwm6¨þºÌiþ?‡u ?wMM—À ´<Æ3‡Cu—À²¬âܪSÈ xÞøSœ f11‹DHID û¥9ÿôóN½}¥ûc΀'BB‰<(ÞPrŸA);ÕÐXVÐ@c¥£LÌ5Hà•÷è2>7ˆa2`ã€ðDèáo[ã`7žíâ´13 üèiÿü`Ïû'"n4f\Û ‘yÀDD V»àD`Á”xý“‚’þÿ ˆv§³Å‚‹€·TGp†é–zùdØ·þTqùRÆfýÀL„ÉvïÒ !|Ë2¬D¨˜äÿ5@ÌàDݯ3≘@$Ã)1ö¤äÿ{jÁø+Õœ\¿…¤44V t€ÆŠDÁ+;’_w&€¥”3Àˆ0`㙌϶ÇñXØÅÉ#&ÞuYŽÙc,eÞ¿kÛ~³^m+]‹3OšÐÕ%•…qJÄDÙã¸ÿ¿!¥tZíö¥ÌÜ<ÛªàíÕágí³Ä(ON3ñ¾+ëpÌ$šOÀ³‡"´|U(ډФ´©Oܬ(­N DH£F²,â¸FBr uÿY IíÑ ¨.«c¡Õuº @cECG4V;fm F¡ÍÌc°Æ0á³€ÂÝ~×øñKk¸ðd;ë?ÈûjÔZ–iJpìñSìES!Wòâ±Á*1ɬc ƒ 0 "P«ÝÞêûþ¹&﬎àÃ.õþ €ÇŒÃR­í~ü’Î=Éê¥-ˆðÂD¡ at C™ 2L1ua"&ffHr/ ÃJ£ID#yú¥d@môT˜åû0p*àË 54–t@c5c.GQä0ózX'LXÇÈ)L;êý¯Ö!¼عÑÂO\Z‹Ëÿø!ðw÷´ Þ¿å7kÕNÒ¯¸¼H'fËD Bƒœ¸+ Ú6XDQä¶Z틘¹ºË®à¶Êð¬g]FynŸ "ÑìÐÑ-@ò^Z¨±ì¡#ƒ@I—µ66ÖÑ¿æ¾ïMãK)˜ð¾+ëØ¾Î̼hC¼àKå£Vk[†¥"9$±q +¤O"œ˜)­¹'`! ´ÚS|ßßnáÕQl4ÌRï?y}´Y"-î3ðîËjØ¡7!&.fr¯Â¦aúùîÜSÿ3˜@œc¤^eF\š›ëÔÿ˜â-J$€ˆ ¥L²"½ŠyL†,Ûž­+zýSSSÇì;¡¡q¬¡ €ÆjƬC`à ׂ¹^N1ìcâò€ ñ?[‡0É®:ÍÁ›vUs±ç >{W Ï)JzǶ‚f­šu*KZçI@œP@"¨£(ŠÜ™™™ó˜ÙÝeWq“ÛœóÈÇe„ 1ª»N¶ñæ kù˜9^ȹ €D$MÓã†Dd )ôW*2ãһ̰DZñG’ÖgÎ4‰~UQ_1Ì$7õÒjh¬8h ±"Ñh4Ô‡³E±"Da´@¥A›Lë˜L |¥3oz3¨Ø„ŸºªŽCF–û7ðÀó>_;÷¼f­Ö¶M3Ì~¦Â)Î3@‰òž“púôLëÔ®ïoµ‰ðãµQl˜ÅûO‚!·ü}Ïåuœ IÉE7’Øñ$D€E‘33Ó: Ìöåv 7»Csž+˜”HÍûgIþ$ÕŸM6H×öŒ}’!å–ÿ#/úË{åó/¦Ê €+: ±âP¨H‘|Vîíƒ *2žmOçÚ.†Åâ ÓÇ“¡‡íkM¼û²:l¹Üÿ >wW;G ê•JDZ­X WÏež.3rd@1XIÈ<0@hu:#]ÏÛzÿóQþ/Q…$yDÒÁ‰ª? Û³L¤ ‚2iò›{NæôÎ8©ý3ƒ‰zy}5ôH‰@š˜o˜¿T  óÿ+: ±’1[?•Ügƒe<ÏÛ Yžo¸Ô®¡ºˆS îõÛø|g à—ÔpÎ&+gèàËuðÈËŠ÷oÑP½ÖV¥ýY | FoŽZЖyÅœ4bfISÓ3§J)Ý3M¯>Þ?çRI;¢8ì2o>íôÏ@¶. PÏñ'õµ€^¤ØÝO½‡º-]VjçªHûêÀ+šh¬f¤F_(z"|ÿ0Ö —ØÕE ÿÇ#t%>Û>Œ—¢çnŠ[ç 5‹Oq缿½»•ÏÕ*n×±í iú›µ÷Ë&î@ ¨ò¼TÕÎJXÜét›íNw£ðæê06Ö‚½ÿù” Ž·%e^!Œ0¹à"‰ì§¿7À(ê£6-¢L¢IDœœ9Sr>j ä¥oäo‰!/kœ\Wmô5V4ÐXm(zþ½ Iz†N$åUÜ ì ¶šÎ¢yÿ„ú-|©3!â?[ט‘ðµG;¸ç9?[gB6ëµ¶ ba¥MðÒÖ¹ID 1öŠ Ž9ã1Ì̘œžÙEQu›éà&·yDSRå¤LéE ¤DŽ@%¹{‘3øH'ú¥CO¤™0‚¾peááö§½Þ:!äP½ÖBít—ØCŽ[çÆ‘€Ô°%÷±>€¹_Ï“Ó3‚0¬o4,¼¡2@4¯³ÈÃJõÅ<ÿlHÜ}¤/qªLLq¯iaÒ (öëã¡~½FG” bNDÌ”7z3JÇCY—ÍÈcyÈŸ`rrrѾ': ±R1W à~/”Ý®×”RÞÀºÂ®aÇ"…ÿ À$GøLë¦8Â¥§9xýy•¾}ZãßÓÂt·çWǯº®Ì`%JúTŸ¦ ù{áÿ\î›é¡=Ójo@×» œe¹G¬üwˆ (®^hûó¾REï_Pæºgÿ|åzÞF²–M€Ò 9Ï…·îMþ |¿j¬4h ±bPðþã…ÞvYØ_mDBw»Ý ˜y—K·T†Mý/@ø®7ƒïx3p¬ÞÀŸœ÷/€»žõðõDz "ªUÛ†P ©Þk¦úO¬fìõÆ}T¯?¹‘œži­ñ‚`hHxSeŽìŒ!2`DŒé®œ·Ž@‰zø¨BÀl} è†*L=~Ê®©¡ý²P®ýoYÅ€6ü+šh¬D”yúŒ¼áW›!‚J†·hžoUpS›wKܹf‚#üMë0Z,qå7žøC¼€ñ¿ïiãpKõþm¿V­xYõ»ZØK÷çÃ܈ß°òOëâ#S3­`—Ù5\hWê«$`!”À´'玻ôÖ(F¿WÉ—™ù$Бœ5%=zOˆI)éƒÞV[&(k¤®/î7 I”†ÆÊ&+eÞá1 XHV«}>3¿Òá •¡Ek‰+@øzw ßJÆýþäåu¬©‹œ…xdoˆ¯<’÷þµZÛ"B¯™SÒõ/«é'Ä逤Ž{Ãs¤âKE­v§Ùñ¼Q‡o¬ aè('6…‡âÀT§ü•š®€eô>É,ý‘¨N~Ïû'ÕûïMjè¯ HìùÈG@µž«†ÆŠ†&+ jø¿/@D™ØŠð/‚j†o°ölËÅÍ•ÅiŠCÉÙ:ŒN2î÷¦nŸ`.’Àçïkãùñ^Á¼mYA½Ré*Þ?«/œœP¾ùMR“– –ét=ÉŒ©™™õ,¥u–åâZ§~Tý €M„aa‹‡Ûý)Pµ †òK#¥ÌœŸ½6üÉ=.»ž½ÚAe]äÞ>|`nÃß'T ©&ÐM4–=šÍfÙ¶ºË À´ "Bp«ÕºŒ™_k€ðÖê0N6ìEi‰{ÿÓ¸Ãk¡îÄÞÿHµàýS<ôçÿ>ÐÎ=·Q­t,Óˆâó‰™(×À& «žoªúç´ûÇùÿ®ç¹­vw-ÜìaÃ4þ)ÂaDp¨ÍÛ@æ»ûdÎ{n[®ï_¡¦#çÿ“r}ze\0ÐØåtÙûô¾WÅB eM4–5šÍÌSO zúƒ]ô0Eâý«7""êt:cQ½ÀÈ…voª QSœ"RïÿoÚ‡áqÝé.®=Ý--—û—‡:ؽ¯0ò·šŽüPôP3qšªô§, P&ú!§¦[kÂ0¬n6,Üx„а‰°F€C-‰¨ääš®€¥´:”’ æž°×°ÈN–ʃþyRTB$çôIÈ]3¢b$ ×ÞW%‘eÞ>a|||®š†ÆÒ€&+³ÉÏ Íó(óþ‰ˆºÝîë™ùš ¼·6†‹àåÞÿp%ߢ6mûûîm#Ìýé:¶ö,aÎûWÂÚi UüÇ$3K8ˆ"s¦Õ^€^áÔqú"”72‹FDÜNäÀt/ìoÔ—`)¬Úôä3êEÔ°ðá)’Aê#EŠ0Ù5i”48:TÚ(ÿ–z€ÆÊ„&Ëï_Å Üv‹#ÿÓÓÓgEQô~În7W†­î>Þ¿ à›»»øQ¾íoÔ¬UÛBép—ZKå„Ô¹÷IÈ? ÿçÆßJ€äL«Ýô|¨F7W†à.Ry£ÂÚŒHxaþê3u‡`¹e€_è6T\þL_ÞÄzÌAýðm„rŠØýO]Ö@c¥Be‰9ŒNñ¯tû#Åû‡çyÍ >àôSM¿P_ƒ¡E¬ûÿŽ7ƒ;½6êîïÀt—ñ÷µÑQÛþº®Wqìt ç3åjM{Vÿžá²4€Œ‰G¤”’§gZë˜Ù<תàR{qÊSl0,€—§¢\ûâ WÀÎ)zC ‘V4ª}}Š:?¨Ñ¾ ÔKä/T~QÖé/7ô§àTø§¡±R¡ €Æ²ƒbüSÐ,Ë™Ú?]¦¸¬Ñn·ßÉ̯·‰ð3µ5ØeW¨nÙÁLr„ÿÝGWnqñŠN¿÷/€û^ðñ=½Ò?‘4þɵýÿfõî¹Æ7©Ê=Ó°L+H¤çûn»ë­!7VšGWú§‚¬7L¸80¡åç+€eFªBYÇE‘1àÒ)­ý•>Lƒ©^¼¬t@$V¯Yî)%©€ARmü5V:4ÐX®(zú€jú…JÇ?ÁÓÓÓ×H)?À½ÅÂ;«#‹"Šú»þ½ã’jŸò‚(.ý;¤4þqÛ¯º®_ôþ“´wn.Òzw¢ÄãOo±çŸ¤¢©™öh†•†…W;E;Ïø› hûŒ—'£¢‡ˆ*j^Iid=}7]5óiÁ%ö?¿5ÿA£§‰ÈŽ+½Ri°¡Ì — ýŠ÷Bˆì¦¡±’ ¿ÑË …Ðÿlz±Ürú7 SSS;Ã0ü5ϳ*øhs=†É+&Óásíñ]ÿ€8÷ÿÄ_~¸'ô'7jÕ¶a¤ÒnY k÷›üCÈ€ € ÃH´Úíuè*§Žm‹8Ú8ÅZa¢!Úã…ñ¨`ØÅ3…adio¿üF¹Gèq ‚Z _è¡>VˆS‘4 eÆ_G4V24ÐXŽ˜=œ6•QZý"1þ333§…aø ço4,üZsÎ<‚Q¸ƒ @¸Ëoã»ÝØ&áÇ/­õuýKñ•G:xæP¯ñeZa½R馧¡ÖÃ¥ w8Ë÷I¢ž±WŒRûOQ»Û­u=Ø%ÂkÝ&*‹¤qHÁ*$°É°àŒg‡ùí 8&am½ñ—Ì*)€¬Å¡ù/†r@PúeÁŸÞzâdCËH@Y¨_ÕM4– †††Ôñ½)ÊŒ™âŸZ­Özß÷™_Õ>ÖXëÝÆ¢Ða‰¿kc’#\x²WŸåö"ààŒÄïo#RKÿªnǶ̪SfÜCI nCQú+êÿ8À,§gZk¥”övÓÅåvõ¨:ÿ B…6›à…‰~AHa›ÀÚF>åß#¬Ølu*p¹z/_8LJ‘- ,œÓø§ËBM4VÌ}sahhH}HÉüv`€ç¯¬ÏÊýÚíö:Ïó~“™ouIàëkñŽêH<”~‘ŽS€pÐÆ7ºÓxëEUlh¥áÿÛŸòpï jéŸ5«ÕŠrõÞ¢ZÿO±Ø €äÞÄ»Üä¿ ­v§»®sêX¿Hý TÄÂɆ xú`ˆ¶/Ñp{Q"º†²ua$ fIï.šÖØáOÿÞ#fä^'½DÌjÁ8F© €Õ£‡™s÷éúâ½j¬dè€Æ’†bü3Ã^Ò’uñ'!ºÝî°çy¿ÂÌouˆŒŸ®áçêk`è{¤Àø|gdˆ-ܼ³Ò·èøŒ¼¿–×{÷ªãx®ãdEtÉœ”å(â¿’ €ØÄõR ¢°Õé4½ h4…ÜÌE•ÿõ @8Í´!@xæPˆ–—oÄÌØÐ4àš½µaRÊ´@&nHžQrÙ(Wîßc}½yʸ Þ³Ð ÿϦôdüÕ›j¬4èo´Æ’Åðð0¤”êwÖ%ÞñFDäy^½Óéü23¿Ó"?U[ƒ6×£¾È¹pà‰Ð×;S?¶«†SGÍRïÿ±}¾µ»8õ¯ÒIùššóOÏŽ áÿ¤@ªô—г+H)3­ö0›g™.vZ•E­ýWÁN5lÔHà`+ÂË“ýÅ”š\K!QdH¥@^åˆlp¾, ¯ü+) D&ÿ#õ…PJ”ëßw¯i¬h ±$1<< 0 (Qø+“þRR Öü !Aà´ÛíŸfæ÷ ç-•|¸± Ç$þ/I<ù8mÔÄί ÌnHÿúp7g$Ë j×Ë›çL Ÿ*ýÿ–”Q·q€’`H"?¬v7üó*·ŽÑE¬ýï?wÆ©¦!a`Úc9´;-÷˜@Âü6îòÚp-Â]PEÃí¯. ž9â›%â?ƒ(+j,¤¶Õò>æ¬ `îVl¶:fþ…SW#èÇ à ÓE/NFØ7ïh àÔÑ|Bf$sM~S£Ÿúøéç,Pá1ˆ@BÙ_dÏcˆD4AJ­@rÙ³´Qiž¿Œ !àû>¶lÙr̯¥†Æñ‚Žh7lÞ¼9[ff03¢(RDÞDj}vº:½jÿUã/„˜™™Ù†á¯¸xaâ7›p…][”?ƒàCâKILr„KOrJGþÆç|óñ.žïuʳM3¬º9ñ_¯N6¡®Ïà+FŸ"¨ÆŸ!%3µÛ10›gÙ.vãðïÀÛM#†Ý¾àü“z:°e‰ªCYù£„&3D|’‰á÷¢ûÈQ¶1)‹PQHdÉ~bNM>CUPn‘!U«Õc!54Ž#4ÐX4œuÖYÙ²”2»)ÆRÊ^j˜U{ׇbø7%9Ã$ôïy^Í÷ý3ók«$ðáÆ:Ü\:¦¦Ox*ôñ o@,þ[×¥ÿ¦ºŒ¯<ÚÉuþ«VÜ®eªø²9öD¹?ˆçÚ§†?-÷K{Ýdùÿ0ŒÌŽçÀ•v #ÇPý¯‚Œ [M/z~9È!f`ÛuG åŧ„‘E‘Ï>P 33P ‡ާór\Ú¯Žúë}WbãOD  JZpB ú¿¢HI¥£€•ú""ît:رcöìÙs®ª†Æ±…Nh Ðn³>·Ð@þgª)¥ÑétÞÅÌï6@Æ{jcxWuô¸|¹¿áÍà™ÐÃÆ!¯=Ç-}OAÀî½î|¦'þBÈFµÒIÃó€Sãß~§´ýU[æçsÿ Ž›ÿQ§Û­AØh+ú1Uÿ«` aàË<ô’i¯×„‡·Þ8ÔÓDR ÏÌÂÐÞ¬ B–ÓGzŸÈÿâŽ?jª@ ðƒz®|"LöÊÛ÷RO¿ˆ¬°†aP½^?.×SCãx@G4Œ /¼0]$fîóò™y Õ!"HÙ—‘W˰¨þOïûDHüŒ¿JJùïTn®4ñ¡ÆZTA­ñ€'e„/w¦ ¼òtg®·JÃÿÌÀ×ëâÀt/áÚVà:v :ɽ@xÜïV%=ÃÏÌÊ@Ù3þ’nµ;cÌlmµlœc¹Ç%üŸÂáLÓ…áѽÆ[ '‰@0Pwg¬³pßó1’1°PÏ}ÖPüÿ’[þï¥â$DÚÔ—WŸ“ŠàØ¡‡B"R. …h¼Vˆ§ßÍ$ÀgœqvïÞ}Ü®­†Æ±€&³âŠ+®HI5ô‰áï3ô…ü}N’°eÛÐ P úÏÄ^ˆ¿‘ˆþÎ’Rf£}?ÞÜ€µÇ¨ÜO…áÁ ‹{ýXüw˹TlÊ…øãcÆÛßz¼›[_­¸]CˆÞÞ½4vþç\Å»¢ú'¦FŸ@ˆ£˜{E¢ëy#p±]Ũ0£ùEçX.†…}ÓÛàÔ1#sæ+aëÚüOŽf*û@¦ìï ež>£×,‘"NPº>I %bÀ$¤’¤rºEãßH½ÿÂrF Î>ûl<òÈ#Çñ kh,.4X¡¸îºëÒÅbνé6õ¾°<§±/ÛOÙ‡JÞ/]—µÀWï‰H¤û%!ÿT h!¨Ýn„aø1¬7,üú"ö !_ëNa’#ìÚ`㊭NéÈ_AÀ£{<ð¢:øGÈzÅõz×(®H=ý4‚lÈ1âI©@"!¬¤·hüòuåõ{qý˜¨û ªù/†ý3€”Òô<ï=Ì|³Kÿ®¾¯ZÄѾsø~âÛ‰øï†3ÝÒ©ñ5¾õ¸‡Ã­Þ‘¹¶í;–dûd>2AĦ+-WZþö*8þ¨ßµÿ•­vgDJé¬7lœoUŽÉèß¹Ð$gY.î :¸ÿ…-Ÿáš½ÎEçl²0TØŸ¤Cü 0Ã02L!"Nú”^sJ~q I’¨žœ3aNsÿ ‘” Äß7Á”ÄDBÉ¢@Á* P")ȉ g3ú¿Gsÿù@f¸’ üö-š<,šœ`ÌÓÈ—ÿð’ýBŒ|Ùë‘âÁ—MñS•ý¬¼nº?)Û³¯’÷ÿYÖ+Cø‰Ú袎ö „»½6< W^}V†ÀÀðÿ·÷Âÿ®ë !8ÍtÇnj®Vȼ}¥€ú'd†€dft»Þ(qŽåbƒawó8Ϫà³ǽÏû88#qòˆ‘•+lh8yÄÈ@$¥èú¾å:¶ß{•¬ @ªöY~D—˜UJRZ @iº(6ÒL` ‰IމAOrR ÿ«à@ ˜—ןÞ/ÄèÏǰ¯@ãÔ'4€-Š¢X·Ë®³?ƒàƒñ-oH\¶ÙÅy'•‹ÿÒÉÂÿU·þO#Ò‰¹S=Sù¦â$À,üÏé@†‘éùþ\dWQ?Ž×CØeW1B^œ ñÈËN5²øEÓ%œ³ÉÂ=Ï¥B@]Ï·QçVÆ€8džʄ€™ Ž!eT‚¢ÔÓϵŒÎl½RX’Î`!„šˆ?!E¸Ð?0·ñ_hè?»Þ+40ŸS/Y7ç…H~{5H  ÀqB +T7_Ìû¹³…ö ó¬§yl/;®ÌȈ XV§¹^""áû~Å÷ýŸpáaâWë±ý8åýÓy) ð¯¸v‡‹‘ªþÿþõ…ÿÍ ççÆùnǾn¢ÿWƒ{‚À$ ë˜%²Óí6‚(¬7Hà»’Tÿ€c‹iã4ÓÁ½Ý6î}¾§H…€çn²AheG×õ};bQv¡b£ž ‰ô¾±Õ¬TƒÄ—*&ÜûΤyÿäžT¡`JDbÜeâá«å¦©°¯"@ÝNƒCþ 5þ …&óBñ±ú›¼ZÉ€&Çÿ£T¡¤”n®ý©÷Ëž–óÚ•œ~A%¯Sfì³õÉsEzÞ:Úíö-ÌüvDï©áUný¸š9áÁ ƒgB£5ëNw”h´zM€é.ã{Oz¹õÇIÂÿ¹ëÇjœ8¢ ¦BDé ƒ³À@Q§ë°dk£éà,Ó=!ù$;, œoWpoÐÆ]Ïz˜ö5‡²4À¹'YhV&;±½ïúE‘0õ„œÕúÇ—Y½’ˇ ¤À$¬O©6B5öi A ý‹äk–²@Zþ§F¤bìe˜ëP—…±^A$`¾_ÜÙ~yŽ×QŸËXÅd@€c„þùô¬)}þ…{óyšã5û޵hü짦R¥ÏWDUjÎ?­ !MOOü €ú5N ?Uƒ•ÔÈ/„`üÀk¡‰‹7:kÿ Àóãa^ý/„¬º®_öIö*² ßø«7N¬ÎXo&å ÀHUà‚Í6ÛÛ{)¥hw=§Y«u\štrzBÀä»1‘ pL˜ƒ(6þ”©ÿYd€‚~ÀQ”Vô$€PÂþÅ?—€Q€t¹ì^£óúÂ~³TO?},yÍ¢CRŒ¬J"  À"` ¿jTô5r¯5×ú¢ñŸ¥p ÀO0 Åž={6xž7<<<üüØØX'ŠÂd_îý‚SE@ÁëÏÎ-Ùžåp‰ˆ[­ÖõÌüÀOÖÆp¹];î"7ÂS¡‡'5‡pù¢DýÄ£ï|ÆCõ®§kÛ¾0„TóÿYÿ›^à»,|™:Ïi=Y„d"éù~#ŒdµAçXî õþÓƒ=Ɉ;~ÛÆžòðc»ª‰°¡f.Ølãsw·²çt<߉¤$Sµ„òQ€$jwøÉJA,ˆIĹ~2˜`lÈ`À øqL(#FìÕÇ$Kˆ|Ryf¯D0Îêñ/$0hý ç/¼Àõé¶¾í‰È8û }Ðú•L48 0üêýlë‹F¿L‡#X—®¨’] (°ô}…h·ÛÆîݻ߆á/1ó†n·û„Ÿj6›æãîɧÁéü÷R¯Id@!h·Û›¢(ú«œ:Þ]…œ•ûÝ~ãᬠçd—zÿDÀáv”)Ý“sçŠëøêååÞîéb¼”N³/ªÿc¨w»Þ0Ki­5œ~óÿ)@“â4À7¼iÜñtÜam2(‰\tªáŠÀDªð|;CÓ´íH{>üŸ ôáô1Ç¡ÿ82 @l€a€H0Cqþ§8G R 2Õ¯¸êÝC©PÒ…Ï»_Á´¡ýUDú^ÕtqÜèôu&N31ñBL’Â(2:]ϮضŸ¶BbŠ£Dœ}“ºþXío€`“‘.gá~‚Ž×1“A1)0A%âAD ‡Ì<|C1Ü@ö‚È4ó ûó3àsí3¨:g™£Ìëž/=O]ŸþfrÉv.Aäc 9XiÑMŽ³åº‹a÷¹ ~Ù¶²í¹÷4|GQçÏÚà§, >/ÍÕ§Ë–eÉûï¿ÿª >`Í–‹}Q€ U£(:™ˆ "#ó‘¼ÿþÓÛíöMÌÜtç_GGGTòüYC ¢´u+@<33}~Eo Þ\Æ+Üúqp£^° á¿ °ëd‹Êò}ï{ÁÏDnàXV`½Ñ¿ê‡ üZqœðN}ß ˆ›þp¾+`F¦ïCp–å¢FbI€t.À6ÓÁý~ð¤‡Wžž”20Z3pñ©6îO3S»ë¹#Íz+  bH'U©0ñöA‚™Áe=±ŸIÌ& X ‚8(" "ƒH ¢´· )E—$ªâ@püÍ.oÑ€z<(â6Û¶U€rÏr½¥ÇÒûR£~Ò‘’B¯Ú˜ qY²ÐàPhä3¯P}AìV4ò¢äù9BP Ù}ÁøÏjØ•çôS! ¾gŸøÏ4Mùì³Ïnêt:¿ÌÌ'Ÿm¹øDs#~sêeLÈÈP³ fBðƒOž™™ù””ò2èt:WÌLO¨Þhì¥d Kïøâˆ+3Q†5Ïóß `㙦‹÷ÕÆàgÕïÂÅùÿ½Q€áJ,bôKà…ÀC/¹êǶ}‘§á^ø?Žÿƒó?J¹¤^ö8 C;úC„3-è„ Õ“&.¶«¸?èàûOz˜èH U⨉k—æà/ØÊtí®ç„a$LÓ”D N‚îHZû¦=ÿãúŽþd¡¤^~üÝ#22‰`‚) cA’ÿÏxèÐeQ½¾ðþÒ"à"þñŽÛ¿‚Dïõ}oØ‚7¨]n×ð†ÊÐ ýì0žã¦>;7Y®”çÿ À¾©Ïîåÿ…Ò±¬ÊLÚü &0Q´zÀ²?ñBfü“ç³çûM0›ëMO@ÿÿÙÀ`œgWp’iáÉ–‡ïìéâ¢SììüO1qÞI6^œèˆçÌt:•zµÒE:ü'®ñ—¬4öARÿzÎÂþ JŒ=›²Àˆ86ø£ÞkA‘þa$å‘Hûp‰×™z9¯´ò´\†U”˜MܧnÏB÷T9ú¼x5ZôŠ‘œÂ{äµ6=]’ºoÙ1+€h0OñW½t@RJŠ¢(Ë©£Ü˜÷~ˆTÃ/fÙ¿l\ïœÑ€µýé¶Œ„¤?l‡''‡§§§ß æu;­ ~ª¶. ¼…貈º¶m‡A`G’ÉëvëvûíÌ<š;0¢ ˲DQdK)XÙÍi×?ADhµÛ×I)Ï«“ÀO××`ý þ©rš#<Ä`ëU›ÊðøþS]¥þß4BCÙ§µè]XØ—„ä'MÙ'Ùžû…cÉ,ü ¨ m¦ƒ:ͧŸÔñØdX¸Ü®áɶ‡oíñðþ« 7î Øp Wosðå‡;ÙsÚÏ £( "‚ŒƒO±0"r܈8éÀ¬äÿƒx]|σb‚ ™9öþ’•6À±­I{ôò"Àb `º=ý,Kïóß‘Uãé/©è²ŽOQêíðôeò[’þ Ä¢N©€@‚OD>@>@(~L"¹' ‰D ˆB  Šˆ„LŒ}êý«žæª}’ÇùϾ¤D°ôû¤ @$¥ô|ߟö}¿ÓétfºÝ®/„ d608œŸólYñø%záý4”Få$ 7b°6 ôñrŒh0 ŽÂø )%fffxãÆîÖ­[Ï2MóBˆ‹ˆèL£”éùþ:×_‘v» ß÷]îµN·V†ÀˆCãÏD±’{ãÆ¶ïØñ[–e±ïy`¨äš;wî<ó¬³ÎúÍA!χzHDRÖ†…÷ÔÆÐ ã„yÿ)öËQ„š+pÚXy«]Ð {ö‡¹õ[·nsÎ=÷\[R7Çw%Š0¥?@~&"´Z-ìÞó¤iØj8KF¨‚Á¸Ä®âdÓÆ“3ù4€dàŒuÎÞhá»OÄÑ•0ŠŒÊÐðš³Î;?¯Ï_‹¼,}7õI×Db¹mÅëÝËyåóÒº˜+’™}fÞEÑ“¾ï?855u÷áÇ_Š¢H&D 5ÎY*G1î™ñWª5rZ%M ÷Y«¯ XnÐ`~˜ñO׋n·ËÃÃÃÖ¶mÛ.±,ë'ˆèF"ZOD†”a"IœèóšßÉáÉ'ŸÄÁC‡0DÞ_È0!Á˜á»ƒxÞ}­V3¤”Mß÷ñ‹/bÿþý}¯åº.ÆÆÆlÏóìâùºÝ.žzê)€7T¸Ô®žpaðB Í£á¤!£4ÿÚ>ãY%ÿoš&ªµ…Q4댅YÏû¤ ëy¨‘Ài¦½$æJŒT®ÚæföîÝ'vìèÀ²¬²SŸëji,C!`LÓÜ`šæù–eÝZ©T^ùúøøøW8ðzÑÕãï3ôHŒ}âé§iœIî?qÔ"äSiÊ€ Ë)¡Pµ þr‹h0%]þRÌêù·Ûmlß¾}}­Vû!Äûˆhƒ”SSSØ»w/:„ééit:Hy¢4í Çôô4XJÜTÁÕN qíÞaáé0Ž<ûì³8pà ÕjÁ÷ý¾× ‚·ß~ûÀ0hEŸ˜À°0ðãÕQÔ–€÷OöGºX[·ÑpÅÀ@Ûg¼0Þ#QáÞ{ïÅÃ?¼¨„ˆàû><ÏÈ0q’aáDw,C1 p÷³Ýàò-q@àºÓü÷ïô¦¾ôÒKøÊW¾!––¦AãØÁ4MT«U4›M¬]»ëÖ­3«Õêi•Jå}¶m__¯×?÷â‹/~Ãó¼Nú½(„öe"ÊL&döÖ'd@P–ZƒDœfMIQ¹Ð°·"iR ü×϶-'  ÀܘML—3þNguÖYŽãüÝÀ Cóá‡Æ×¾ö5<ðÀ˜œœ\ÖÆnr‡pUÉâoà‘ ‹i^ÜóÞ™xÿKá¿)c"îs€5uŽI¥ÿæDq  ߣ>É´QYb*$€M†«œàëuq¸%ã‚Fk7œéžèÃÔX"H„;ï¼_ÿú×ñì³Ï‚™+•JåÇN>ù䟫V«ë’ "—™]fv”{±¾Êff €Àâ¸1™ÅÌ–”2}œÞŒDlÞ§7µ’K ¿Âk s8‹ YRXº¿Kƒ>ìœÚ¿Óéðé§Ÿ¾ÞqœßB\ÕétpçwâŽ;îÀäää‰>‡EÁzÃÄÛ«#p¥9h±ÄƒAçh_ºWØ5\¼„¼ÿŒv¾¯9SÐÀ8à¡™@„…Ê«(Âá·* <ðb€{Ÿ÷‘껯<ÝÅXMÿiô ¥Ä¾}ûðío>ú(¤”†ã8¯:餓ÞlšfS1ü•„ 8n6B3Yî#ÉŒ³ô_™…ÌYz½Ô ÿãfG釩ÿ(ŠhíÚµNµZý"z­ïû¸ûî»ñðÃ# Ã…½ÛFÏûO×qoüýK?VFs‰xÿqŒè$QŽªM0Äཷ%üèøùzĵÄw$ÚUœe¹˜îJ|ùá‚d2‚dàì.:Å9ч©±‘:T»wï£Z­Þ´qãÆ«¥”®”²ÂÌfvÓˆ€”²”3¹PHbm@oÎD>P$eÈÖ/‡(€&þ¨ËT¶¾Ýnóºuë®B¼›™Å£>ŠÝ»w/…ÿ|Pôþã‹@Øv±WGõÚEì´\\{‚ëþ‹Ái«c4]Ë(ÿß'ÆÛÇó£·ˆ°Á°Nô%š `­0qƒÛ|cw/N„I`¨"ðê³Ü,* ¡¡Â÷}ÜsÏ=xá… „¨ ÝÒh4N’R:J* ìæP¿,[iD@ñú‹$ hüÕe`°ç¿l¾Åš Æ\Þ¿ˆ¢ˆN9唦išï%¢µÀC=„(ŠöNK¯vš9ï?½8÷LÊÅ;Wàfwk…¹„̾¨|¶ÿlfFtœehÉ]¯A \ï40&Lì9â»OxP‹A®?ÓÅæ­KÖ(G»ÝÆ}÷݇v» ˲NY³fÍ•Ì\M"•$PQ!" ÿ” XJD GP® (k×^„&Ë ðþ ‰÷?<<|]EvïÞ=§ ~¹aXxSu¸àýÇùÿ{ýÅÍÿo2,¼Æm,¹ÿØÓ€nȈd¹¹õ#àpûø2›Æ„¹$K‹`œe¹¸Ô®"ÿ÷Áf$æ(~À$¥$×uG‰èô0 KÛÞ.w\b×p•]ëäI0~ä·ÑZÄúÿ-¦Ëìê’ eÛ Œ‰87}h&‚b ¿?Þs^†„‹h ^µrH› ¯IÄ€ÿúH/MF™p]ÃÀÍ;+K†`i,=xž—uug½iš¢P}ŒX˜K(¹ÿ\¯€T 0ŸJ N@Y^Ò_eM£7)¢dtoE0Ms€Z†˜žž>ÑÇ»¨°‰ð¦ê0F 30)#Üå·õý®´kXgXXª­’Ò0ûÞ©Ýuþ– WŽï¿TLNôÕYLnt›Ûà[w3â$¼öœ 6 /´†Æ‰ÁÌÌ ¤”0M³IDõ’°®qs ´ æ4è¥R-@10,ת/M00D3ÐûG2®W±–ˆœ(ŠÐé,~Cœ‰³-¯tê}9x.òñH°xõÿU¸Ö©Ã^¢d™l0,8Ø;¡åÉÒ#5¡rœ­±‚X¢×m$çY\i×à‡ŒøQ“%#–ÏÚ`âú3tg@Áh·Ûˆ¢†aT‰¨Zôú‹7% `«bÀB$ gø‹©”T`î(€¥›Ð ‡Y{þniÏh û[I¥ÀÜal,ñÈ „{üƱüo³aa× ÿqÞz³i£J„iñÌ¡¨4ÔŸÖ³Os\æ2#©ð •aØ üà)w?ëÅiÄbÀ7íª¢éêŸ'r(ÓT…ê駆>‰¤Ë¶š÷O ~Y`Ö0õö•Ü¿˜K¨Þ²Ièÿ°9PÚ)¶ˆ\šVë(p²aã¦J³ï[Kº,q—ßZÔ¹ó—Ú5¬3–v-û&aa­abÚ“x|0à?š±¦&`›Çïÿ½NŒ&XÒ`\ãÔq®]ÁdGâïkÃKgJ.Ûâdƒ44™©P¨†þs Õ–B²zž¿*Ìõ(¤÷Ë1 °ê À€ÐŒÚÿ9½§’õÅåW» l5íïØ/ÃEÍÿ› \âTábé©ÿS0€¦8ÓrÁxäå~T¾ßºF2,è8Ûr#î0ùúÊà+tñø¾ ŽÖÞzQí¸’)e *Qù;…0¿jôSõº=û¤"Àb3 Ùºª÷Ë«ž$˜oø_}œ2Á…aaàÖÊì’¯ðPÐÁË‹Xþ7" \`-Á?e`ÄåvgYq^ú¾|Ltd_€Ø4lè:öy‚¼ÖmâTÃÆs‡C|ñvÖF™¸áL;7-ý6Ç'©a—RÚ…\¿LþË…ü‘”ý!þ)êÿ´ÀP´}-g*‡Õ÷ºušÌ%¤“û` 5¡+ —Ú5œ?`ƒqŸßYÔò¿­¦ƒÍ†µ„Í a—UE•ßà©a_ßz°¦f`ÃV°ÏÀ6ÓÁk+MÀçïkã¹ñøºÊ„L½åÂê,×44@%¡ü>£_ùÛ‰±O@¯°êý÷µNœ¿¾Î€ÒKÖNè­Á˜­Õã\] –%l"ÜZÂPÉ$>0Å÷‹[þwž]AS,ɳÁ8Çr±Ù°p¨%ñý'»ýC¨»„3×k¯u¾°@xcek…‰‡÷øòýêpëyUìX«¯§F9˜Š·ÏßRþÒö F²H’tÊÃÿ¹C™ãP—¤­Ð`~¤ú\Q×ïtÓÁ5%¥éØxlËÿLvšî’-ÿSÁÖ&.ujßÚãaªË¹4#|Æz=Ðf¾HK¯sëˆ"àoïjaïT”•nYcâÍV{ƒ%eJ @bøû<ûdY5þfa»*öËEЛ X6p>UK+Ê€-ÊJ8r½Ÿ™™’2ÀeóAϯq›Ø< ðHÐÅá’ò¿õM©°nÉûÿ±qw ðФ_ÁÝÏzxtoP:¾öÜ“lÔœõÕ8f`Ä} ÞVA“ Üû¼oìîf×Õ à­Õ°cŽh”£à¹«á~³°lBNøWðüÕü¿ªùš­$0ÝwÙ@€<йœôÃä’}V”p0ñZ· c`ã‘ ‹N!ÿ/¸äTuwá—b­°p²a/óß»WØ5l+écŸíÃÀÎ64`%|%—Ú5\åÔà…Œ¿üa gdرÎÄ›vUWĹj,:(1Úe¿XêWFNäü4ÀRA JÆÚ±%‰UMæ©Ê,«(ûð—5®pj8ÛrKÅéøßÇÂþðÿÆ!žlœ7¶š6bé–ÿ!l4,¼ÚEk_~¸ƒçÇób@f`}rMŽº,!yy@“ üxmuøÁÓ¾úh/ xûÅUìÐÚ ¨ùú‚Š?÷¸°.ýÿj Xÿ¯þ¢·_ö/Øg#–Z%Àª& æcÈu\°‰p“Ûì›ú§žü””¥ùÿk¶»­ ´ý…›ñSM{INÿ› &¯w›X'L<º7ÀWÉ_P³ Wow‹z}Š#Ëê –C‚qµ]ÃeN ^Àø»»[˜h÷¢§¯³ðV­Ð(*ÜC¯yšç/Šûú¼~ÕûO_#m\’ÿO±gpI:ŒšÌ¤ä}ÔRem¦ƒ«ˆÿ€ø[ûBä〠së+á¶ó+ðB ˆn„N1ìlÌîrã«‚kÝ:Âø›;[x9™f—‚¸z›ƒ“†Ž½°ÃŒh0,L¼µ2„ï>ÙÅ·÷x¹(€Öh¡éQ&øŠç_Œ¨ÝþŠûª!þô7~Pÿÿ¢`YB€rÌÕËyE¥^å4pÒ,“ø„'B¯¯þÿ¬®ØêàÀôÂãÿ8iÔÿ‘ŠÖÞYŰ0pÏsþùÁü (f`ÛZWlsŽùñLÊÁr»ˆ Á¸Ámà2§†™.ã|‡[½(Àöu&ÞyIM÷Ð("3þ…ûÔ «†^(„!çé§·’Îs5ýI±ì*ô¿Ò` êXÖ`ÙbH¸ÑmÎ:PF‚ñDèÁ/¾ßtNc5‡Û o äa£aa96³EkUÜà6DÀ_ÝÙÊfÚ½rÀ[vVŽùtÀI!d^þ_DÄ×mL˜xwmøÖž.¾üp'WðŽKªØ¹IÏÐèA‰Ê挸ÒÄÇPˆ€ P¿: °,E}•Èï –ÀËæßQ€Á˜O{àe]Vç ÿ¥'ÚaÆs‘Ÿ[¿¶aà¦s*%!X'–ö Aˆ[øñê(F„»Ÿõð?jçÎ…¸f»sÌ[ÙÎp„i^9“(ã(@×9uxAEÀi£&~êª:lcEüûi,D!  zý}Û”[æù§$¢`ô3 €RVÔÌæ$.yhÐÂŀÊcYB ü34G'¾6K<æ À[œ½ÑBmoá ) T–Q@ŒËín® !’Àÿ¼}ïëUH6 xÓ1neë1ã  AËç7gV0€á¤" FßÊÃîoçÎî çUpùÖcŸ^ÑX6P;³[õfá~ô‡ôs!…ä^'íù¢¬ÏÞs¾Çv¢/Ð h°p,;–7› ×¹õ9Ovš#¼¤ ²MÂ-çVÐpü1ÞY¸"cÙͱWÁˆu 祈a³aãÑ—ü?߆rÎxý¹Ç¶•m—yQ‡3-H0^áÔqƒÛ€2>óÃ^Š%%VxE Gÿ|id)€bCQШ¾,ÌŸ„Y»ýú×—ôP ^½ÚhÙ¶|,ÃåN[ gV/œìB´à–1¯ØáÄ}¸Drá`X°—yMWÆv廒|îîþmw7+U;­l»,ñr.ï/bi_€÷ÔÆ0" Üõ¬‡¿»§•}O%¯9«‚›Ï­œèCÕ8ñ(‹Ê…{}!þ¢á/l§2]õ8  ´ä  Àü~©€å¨Z+C„W;ÍyÔá^Š|t”/ô gº8yÄs\þ7q‡hE|ù ?^Áev ‡ZÿùkS9A AÀÛ.®á¬ Ç. ðBä#\_Ë iŠåÖʤþò‡­,Å 4\ÂÏ_×À)£zî‚úÚò¦b½B_1üŸî[Zú—ŠýJ²÷^–X ¿Á'˽þs‹éàr§:gþ4ÐM"MWàu;+°’N·‘¼páÆgD°ˆ–½Ù’6~¾±Cdàö§=ü¿ß›AÅ×.meûîË]ùÚsQ€6Ëåûe,Aœb!üd-N±<òr€ÏÜ>“uœŒ$pÑ)6Þs…. ÔP0þêºô·ºÄ°—õÍMü+ 1Ç{/;è…!÷[.až2\eװɰ1—ï.Á¹@l¶qáÉ6Ž êŸƒX1²µ˜¼ÚiàµH üïÍàëu ’ÿ.ð¶‹j¸äÔc#\{:ô0à Â,uDγ*x{uðÙ»[¸ëY/3øᆲ~Ì®«Æ²Aî÷8iÒZÚ«_!¹í%Ã}T¥Nõ_(–©ñOOLc0J›=,÷6À5¸ÁmÌ« ŸÆá„7ž·þ=Zî³|©Sù¹8Dø™ú\dWq`&Âï}e O 3áÚ¦!¿p]õc0%pbo,ß_¡Y`xgu;­ öNFø³oOcªÃYYàÉ#~é• 4]ýS¶ÊQôþ³uÈwôx0áo6CŸ>^¶?gú¿fn¬¸ßÕ¦ƒ]vu`í¿zâ>3%#€74 Üp¦{¢IB8ͰñÑÆz¬&îxÆÃ}} 3^l¬ÀëvVpÛùÕEïް'ô VÞWÀÓÆOÕÆ`ƒð/uðì•2Ç ©Þvñâ_Wåb$vИÞÞ¿(#Ì\œ[6 f®n€Kš9–mÞç:·µólÂ2c*!Wlupú:먽`™^¸9À^å6ðSõ50˜ð7w¶ð7w¶ÀªºCøÅW6½Ÿ½Çñ¨æ•0  à •!¼Òm í3þìÛÓxöp,´L».þÒ+›8³î¸ŠÑçÍ19P ¹²œ’õù(ì“ë÷21¿ËîgmÕ€£ËX.«}H¸Î©Ã˜çaPÀugq„{ÑœòÃå`x_m ¯«4ÑöÿùëSøÎñhÛHço¶ñ‹¯lÀ]äÁøL¯0!` F,ý`} Ö ÷<çãÿûÁ ÂDöO 4ñ¡W5to²R¼Ü¿EšÁ-êPâ/m4Êÿ¥4xµÿ·”yñóewË2ÿs†éà«2gø?=Á“2‚m64E;ŽÃ2‚¿BzØ«Ök¬ÇÙ–‹ç‡øÍÿ;™é€x¶ý­ç-nÈzwØÅ¾ªâëz…SÃ;j£`þ¿Ûgð½'»™ ¸í‚*Þ~‰N¬B êǯŠü²õ%†¿ì¹¢¨õ:é× B±d°Ú ÀªÃ5Ncs´þU!1TìÅ+Û xåERH;-k¬Ç˜0ñç=|òK“O¥©ÿ€IDATú% ¹¿|Cg.bo€C2ÂÃAwEê€4ºBxom»ì öNEøã¯Ocÿ´ì¥¬8°ëd X­ ОoÄv®m+&ôŸB€Á˜‹­-;û5$ \ãÔd$è‘U„…†ÿ^˜ƒ€øµðd"À<‚oÑ4K´äÊk^£‚4Hà—ëq­SÇDGâ“ÿ2‰o>Þp-‡^ÕÄõg,NiåžÐ[Ñi ×!ðõ58×ªà…‰ÿé«SØ7ÕK8&á®kâµgëY« ) ˜«A[IÙ ú°X8ËÊЂ&óòTü«8’ðÿ|`8¢0v—%ö¯ 1¶ƒ œbXø­¡™(ðWÿi¾€ØñºÅÉ[Ë›ÁÁž’T@eo¯Ž ’ÀŸgÿöX7«´ˆ$°ëäøº®9‚•Ɗ±úížÏœ€% =Jk•à »†Ñy6ÿ™78Ž WóÚ€SN96l( ÅEQ„'Ÿz““xa—­!¼ÚmàcõøÄäËøê£üÖ—&ðŸÞ8‚±šÀmTñÄ¿÷•)øÊp%!¶oߎáááYC›¾ïãÑÇã~wúmÜâ­ØÆ@@/ðóµ¸?èà®é6~ûKزf N_gB&Í—^^»÷øý¯Lå†V !°mÛ6ŒŒŒ,ë™óÅôô4öïßÉÉIDQt¢g©`ÖP?3Iéß²‚&«5¸Æ©Ã-ªQ`¶I­æÉï»ßýn|ä#A¹õDÏóð¡}ÿ÷çÃ`E ‹ 﨎`¯ ð'Sûñ¹»[Xß0ðë7 ¡æ~þÚž=á/8“ [’Râ’K.Á§>õ)ÔëuÈÝazzï{ßûðÍo~ÿÒ™Ä Nö ˜¶8Òª€5×ãç?{žóñû_™ÄŸ¾e —À Aý…ëx~<ÂgnÏ_× .¸ð€¡¡¡ÒëºR@D‚Ï=÷¾úÕ¯â¯ÿú¯ñøã¯ â3…ÆA«Áè«Ð`àÓÆNË=¢Þ{‚!sìArB@SF  Ûíbhhhàkž~úé€'Â.f8B“&L\®`6>X_‹QˆÏ´á¿gë~þÚ†«¿úÚ&ž;â»»Ùóþñÿ;wîÄG>ò˜fù¿ìØØn½õV|ëÛ߯w¼<z8ÇrWüu•^é4ðóµøÝɽøûµqÖ zU¦ˆ£MWàW_;„'"|å‘NöÜ/~ñ‹Ø±c~ýוÊÊ nذ—\r n»í6|ò“ŸÄç?ÿy„axô/¼¼ÐWî7K_ÿe™·ÐX.µ«Xg˜sŽþ-ð0aDŒ‰vÿ+03Æê"Wrµwï^xž7ð5O?ýt˜¶§C“re¶¯Ð$_i®Çë+ChûŒÿôÕIüíÝ-D8mÌÄï¾a;7õÄkNð€¿ú«¿šÕS½é¦›°mëV¼ø—îÔŠ7þ)€÷ÔÆðæêüñ§ß˜Âhgå•’SF |ê øè”^“ Ïóð_þËÁ§?ýit»Ý#{óe"ÂÎ;ñéO·Þzë‰>œãrÊ‹¼ßŠ‚&+®´ë°ð£Nkb˜‘…OU0â)joû¹Àgœf£ÃQ€§CoÅW!¬&~sh#®qê8Ô’øí/MàKuÀ \tŠß»m§Œô¼ý‰‰ üÆoüþùŸÿyàënß¾7ß|3à‹ <ù«â<%Um®Ãåv g$~ûK“øáÓ^Ö¼*’ÀÎMþÓàt¥â¢Õjáw÷wW €õë×ã×~í×°}ûö}('«á÷aUcƒ°p‘]9âÑ;&êBÄ€N‰·Î 0{[^~ùet:¯yÚi§áäÍ›1 ÆAg•™ÿÀÃÆï mÂùV/ŒGøŸÇwöx`n8ÓÅoÞ2„Q¥2àÅ_ÄÇ>ö1|ï{ß+}MÃ0ð¶·½ 6lÀ#A_ìL®š(@ªøÄÐl5ìÞàãÿ4Ç÷÷f0H®Þæà÷ß8ŒSF{äjjj ¿ó;¿³êHÀ®]»ð¦7½éD†Æ „&+çÛl4¬#2i7»†0J ísé>ë›êʶC‡a|||à뎎Žb×®]€‚Z+tŠÝ\γ\üîÐ&l5ùÉOâw~çw099y¢Oã¸`ÇŽ¨×ë'ú04N4XÁ&.±n<ª÷ñŽDÌ ‹°ydþ.»ì2ŒŽáÅÐÇý~gÕéT0€×ºMüjsÖß}Âï|~O Ñp>úê&Þ~qµgÀ|ýë_ÇG?úQìÛ·¯ïõÔ(Àg[ãx"ôVÍ?:0¼«:†Ô×Âá³w¶ðÿeS] JÚüÄ¥5üÎFr$`ffôG„_ù•_ÁÞ½{Oôés˜¦ !VË·C£ýɯ`ì0l3#îþ—–­&àÐŒ„æëöñ˜àS•œj†¥Þ©ŠíÛ·ã¼sÏEÀ÷ý„«ÎO̓¼µ:‚6×£žx®¿ñÅI쌰¶.ðÛ· ãæ•Üµÿüç?üã8tèPîµlÛÆûßÿ~œrÊ)x,ìâ¯Û‡Wô”À"€K„_j¬ÅÏÔÖ@0áý°…?þ·ix÷‘€?xãHŽÀzž‡¿ø‹¿À?øA¼ôÒK'út44Ž4XÁ¸Ð®`xÃаA3bã~`&êõP`a˘™+|òÉ'gT ᕯ|%àv¯…«8 ô<×wWGñïëà’Àßÿ¨…ßþÒÆÛ'øƒ7ŽàêíNö)%þú¯ÿ¿ÿû¿éééÜë]xá…x÷»ß ÂßµÆq—߆±Š®poÓ:¼-)ü¯ßšÆ_ÝÙʪYRðÎKjøÓ7bËš‰•Râ _øþìÏþl5ÖÊk¬h°BQ!Kí¬EøÑ_/âWyq"B7èïÜÇ`lYc¢f÷¾N{öìé3JE¼êU¯ÂèØº¸Ûk¯è)vó#.Ûü¹úüTm þòŽ~ï+S˜ê2v¬3ñGoÅ®“{µìAà¿þ×ÿŠ?ýÓ?Í•^†÷¾÷½¸ð‚]Ø'CüÅÌ!Ls´ª®°0, üzsnt›˜îJ|ê_'ñuef'·[Ϋàÿ}çXîÚJ)ñ?ÿçÿXu¡¡±Ü¡ À Å:aâ<«rÔÃÀFÃD‡Z“Ý’J¶¬11TÉ—¬Í•C=ûì³qÁùç£Æ7½iø«(L=  Ni¬ÃÛk#CÆÿÎ4>ý­i´}Æ'[øÏoÉM¹ëv»øÃ?üCü·ÿößrÞêÖ­[ñ|Žëâ«ÝI|µ;½ª“€ †‰ßÚ€]v/MDøÄÿÀ£{ƒœ¦‚xÅööÑܵݻw/þøÿ'úT44š¬Pì´+Xoýðc“a£"Úã…ñÅVÙ `´*°uM¾¶úÑGõµ‡‡‡qã7Dø®7ƒWQÉÚlˆÇ7ÿFsÞXF7`üÑ×§ðߟA×lwð©7 çMOOãSŸúþê¯þ*7ìåÍo~3^}à h3ãÿ™9€—£pÕ]c àlÓÅo47b“aá¾ç}üî—'1Þ–¹ï²Lš0ýâu\c«¯}íkø‡ø‡}‹ŽÕö[°j°Ëª ¾H=ö× £Â@Û“xöp™h¸g¬ï¤N§3'€n¸7nÀÓ¡‡ï{­U]  B"¾î¿9´¯MÂ׿ÿ•I|ö®¸eðÍ;+øÝ7 c­RË~ðàA|üãÇ?þã?f놇‡ñ‹¿ø‹ÅÝ~ÿ»3~D-¡—;$€W8uüûÆ:THàŸîïà|ÅÎÊ à-VñÚ³{³ºÝ.þüÏÿ|ÎÊ åMV šÂÀ…GYþ—‚Ta³a#’ÀÓƒÒ–À¶œ±ÁÊyT>ø Úíö¬¯æ™gâª+¯Bà+Ý)̬²<õlN6,üÇ¡¸ÒI[ÜNà_ŠÕüØ®*~çõùnûöíÃG?úQ|ùË_ÎÖ]wÝuxûÛß à¯[‡±{•ªÞ^Á›+âXøí=Ýœx•® üÂu\£ ûî»û·«'èi¬(¬Æß™æ‘Mÿ+‚ÔÈÀ3G=s(B§TìÜd£éö¾R=ôМ¹ÓjµŠ7¼á °?ðfðHÐ]õb@ÀvÓÁï m¹IËàÿÓ~ð”ÛÞyi}õÊuöÙgñ‘|?øÁÄe?û³?‹;và‰ÐÃgZ‡à¯¢1Ì)R}Å¿o¬Ã…v{§"ü§¯NáåÉ(§¸ì4oÞÕ#ÑQá3Ÿù üñ}‹MV εݣ.ÿSaƒ2°{_€én) 3pú:3×pß¾}ؽ{÷œ¯Ýu×áŒÓOÇ!á_»Sˆ´0‡¸ep¿;´ §™6ßàW¿0GöpLàƒ×ÖñK¯lÀQæ1<òÈ#øð‡?Œ‡~°sçN¼÷½ï…0 üc{wx­UI´$€-¦_n¬Ã¨0ñí'ºø‹ïÍ TR À±ï¹¢ŽSÇzi­Ý»wãsŸûœŽh¬h°qžUA•Ä¢™Q°ÃtQ…À‹“öM—ëFªlî•QMLLàž{î™óõ7mÚ„×½îu€¯v§ðrè/fÀÕN ŸhnÄZaâö§<üÚ&ðÒd„ŠEøÐ«šø™kê0• wÇwàcûžþy!ð®w½ —^r ÊÑ:„ÉUšna7¸ ¼«6 –À_|ß)¤" ì<ÉÂ_RËÒZÌŒÏ}îsسgω> Eþ]aη*GÿB Œ­¦aÃÀdWâÑ—ó%Tñ>ñL•ÀwÞ9çp!n»í6¬]»»ƒ.¾åÍh1༾2„5×g}î?õ¯“˜ê0†*„ß8„·_\Ë}6ÿú¯ÿŠO|☘˜ÀæÍ›ñ|•j_ïLá«Ý©Uy•qTëýµ1\hW±o*Ÿ|cû§óUo»¸†ík{e{öìÁ¿øÅ} ‹MV6 ;)ÿŸ‚+Ò·™ü€ñðËåB@°ëd;×àÞ{ï-íW_Äyç‡k¯½€/v&W­w:Òn?^ÅÏÔ×Ä‚~ØÂŸw~¬© üÖ-Ãxí9=(¥ÄßüÍßàÿðáyn»í6Üøš× Æ_ÌÄÞUXô–¿X_‹øÆî>ww+¿;Öš¸õ¼ÞõŒ¢Ÿýìgñâ‹/žèSÐÐ8j¬ÆÿýÅÎÿI[UaàË<ø’iûû0pÆz3×Wýå—_8ºVEµZÅ›Þô&¸• îðfð#_w,¨áêkq[uÝ€ñ'ߘÂçïkC2pʨ߹u—žÖk>ýéOÿÿÛ{ó8·®òàÿ{îÕ®Y=3öxÛq'q²¯@šH……¼²¶…¶PÞþhihK ¥,-m_Ú²”¥y k /[’ÝYDZïöx·gíÒ½ç÷‡t¥s¯®fäU£Ñù~>3’®®®Ž®®Îóœgåþçèèèà#ù===<—KqWz¬e#.$pM¤ƒ7Ç:)XðÇlðX·&¼ý¼‹•š ëׯç¾ûîkôð5š£F+³Œ3ƒQâÇÐÿïD°*ÅD°~ožC5âzâ,©Ÿd2Éã?^×{\qÅœ}ÖYŒK›_¤ÇɵdÆúôØÀÃäÖŽ~. ÇNØüÃ=c<³#ÎXäŸÞÜÅÉ}îBAŸùÌg¸ï¾ûxík_ËM7Ý„|79ÒRÝUeêƒñ^–Âl:ç&È( ¯,NŸâºU‘òër¹ßÿþ÷uu@MÓÓŠ¿ûYK»(®ÒÇŠÎFrV0B·arpÒbý¾¼oEÀHPpÑÒ¥ý£>ZÕ±Îþþ~Þö¶·!Lƒßd&x%ßš‚©l`©âo;æsR ÌæƒþþWc ŽZH —/ó7¸ íÙ³‡O~ò“lÞ¼™øÃ,]º´Ô-p´¥ºzÏãª`„wÇç`?]“äñ­YÔ¹áÜtnÌUoaõêÕ<ù䓾FsTèùuÑcšÇÜÿï Efˆå0©œä¹9ß8[Â…KÃÌUz¬oܸ±®t@€ë¯¿žåËNb·•çÞÌx‹Š¥ú°‹B1þª}Âä¡M¾xÿ8‰lñ¬ÝxVŒOü^±PE[³f ŸúÔ§˜;w.ø‡†à'©QÖäÒ-Õ-PÅÞíæüPŒC ›¯ý.Áxºââ²m8o ÌkN®X&''¹óÎ;Éår¾FsÄh`qj ¸B?BSRÌ087T ˆzfg–‰ŒíkX2'ÀÙJ6ÀÈÈ¿ýíoëzŸ“O>™o¼€_¦ÇÙ¥S§DoŠvòÁ¶b÷À;V'ù^©åmÀ„÷_ÖÆ-·¹üÚ¿øÅ/øÏÿüOþàþ€³Ï:›½Vžï¦FHK»%U›bë÷Å{‰ƒ6¦¹CÚÕ1°="xóÙ1W€ßþö·º0¦©Ñsë,be0LÛqðÿ;\ŠF°nožÃµú^»"ìRz衺|¦¦irÓM71oÞ<^ÎgøMf¢Q§³)¨´îãºh©œäËNðÔö,‚bjæ_]ÛÁëNuG²ÿÇük×®åƒø`»Sã<™K¶¤àœÇ×G;¸2ÜF*+ùïÇ %l¥¼ö”0§Ï¯¤îÚµËUrY£i6´0K Áé¥ ½ã…äì`”~3È¡„ÅÓÛ³Uõ„€×¬ˆÐ×Vñ?¯]»– 6Ôõ>çœs¯{Ýë°€ÿ—cØÖ)Sa½†É'Úç±2aÇpÏÜ3ξñbWÀù&·ÝÐÉ©ó*ÂkllŒø‡`ùòå\v饌J‹o%†™hQ+€º„ÉÍñ9´ “'¶eùùÚTù\Øú;LÞàI±¼ûî»iôð5š#B+³„Narj ‚}½æè7ƒœŠaÛðè–,É\uMy[йAΨ¸†‡‡ëvD"ÞùÎwÒÞÑÁsÙd:%pœ`¶ÿ¯cn9à?™$gW¯ç.qëut)5Ö¯_Ï7¿ùMÞúÖ·Çy(3Áƒ™É–=×6’+Âm\m'WÜþTÒÕ'À4àºUQW“ 5kÖ°zõêF]£9"´0K˜o™oŽkМbÂàÒp<µ=Ë®QË·@GDp…Ç ðÀ0::Z×{½úÕ¯æ5¯~5$?I2¡ ÕÅõ‘NnŽÏAJøÎ îÛFˆâwò¦³£|èÕm®’·¿úկسgW^y%)$ßIsÀηä¹.6 2¹96‡.Ãä¹Á,¿ZW©biK8µ?ÈÅË*i®Üwß}ضNYÕ4Z˜%œ Ó&Ì£?Ð4H$—„âô›Avx|k¦J7À /¼ÀóÏ?_×ûtttð®w½‹p$ÂãÙ«s­Ù¼æppâ>ÜÖËÅ¡8ÃI›Ïß7Îö¡B@8 ø³+:¸VéuŸÍf¹ãŽ;X±bsæÌá©l‚»Ó­Y"ŠV€ C1^i'oÁ«+V'¾åºU‚Jšë<ÀÞ½{=tæ°Ñ À,aE rLÕBK!ΠŰ,xhc–T 7ÀÊyA.^VqŒsï½÷Ö½Zºæšk8ÿ¼ó˜6?L’jQÿôá`‹Ì kŸKàÙ9¾öh‚œ%‘æuüÍë;YÖ[)´gÏž~úiÎ9çòÀ÷S#ìnÑì §ýuÙ °+Çý/g<Á€–Ì©(¶[¶láÑGmôÐ5šÃ¦㳎ˆ089:úÕc&½"܆žÜžeÇpÁ× Ð\szÔUèþûï¯{µÔÛÛË»ßýnÁ ¿ÍL²6¯Ë׃®Œ´ñ¿âsÀ«<øJC+Û¿$ÄÇ®êp¥´=ûì³X–Eoo/ÏçRü¬…K;V€+Âíä ’<“,gØwxí)•š™L†x€|>ßè¡k4‡…VfmÂàäãTȉäòp‹Ì»Æ <¼)ëë®8%ÂReµ´iÓ&~øáºßë oxgžq#¶ÅScd´`Zœnwˆ÷pa(ÎPÂæËN²o¢ÐöÎ bÜxV¬üš\.ÇK/½D__6ð£Ô(ƒV®%'Ç ð¶XqaðÔŽ,oÊ”Ï]8לqXzì±Çtƒ MÓÑŠ¿ïYÇ\3À¼ã¨")–¡½$GÚpÏú4c©ê¢@¶„¥s\µ²²ZÊf³üìg?#•JÕõ^‹/ææ›oÆ0MîK³¡ÑV€:(v» ñ§í}t“Ç·føÁ3ÅARBWÔàãW·³bn%5pxx˜¡¡!¢Ñ(ëó~˜ÃjôiØù“\Šsq8N:'ùÁ³)&JÕ¥,V\ÖSq£ òÄO4zØÍa¡€YÀò@±Ð‰¢ØDÅàÚHaÏì̲noÞ·&@(o<3F{¤2¾ßýîw¼ð u¿ß›ßüfVžr ûí?MµlÝúÃÅFru¸7Å:±løÖÉò÷dÙðªÅ!þìŠvÂâ'¥,giHà§©Q¶¶p£ .#À݄ۢüns†Õ;‹u/œš—Ÿ\ÉÈd2<øàƒÚ  i*Zñ·=ë0CDO@ Šä’PŒÓ‚F“6w¯KSðY.Ú.XâœÅ•…C‡q×]waYõ­/O:é$ÞñŽw€ü"=ÆËùŒ¾pë@ívWl”ç¿›tu»{Çù1®=½b¡) d2¶²Ü•kÙžŒ6’+"mœŠ2ž¶¹ó¹Ù|ñÜ…pÕJíÐ47zmr08Áfq Ì3ƒ\íŠn€ÁÑB•Àiüæ³£<ùçÛ·o¯ï3 Á;ÞñNY±‚]VžŸ·°P:\œA7Ǻ1€Ÿ½âÉmÅnwRBwÌàϯ젿£§!eQ•”À]©±–n<×pc´<ðJš—÷Ê)~nÝ!PÓL´âïzVKÍPCŒâ&pm¤ƒyF͇òÜ¿!SsßkOrR_Åß¼eËî¾ûîºßkÅŠå&A?O·¬P: à±nÎ-u»ûÆc &2E¶eÃÅ˼û¢¸¯ §Õ­¸&ÒÁÒ@˜]£¿z)…UŠ£èï0¹l¹Û ðè£ÖmÙÒhžC›œ¸a0° ›bÂ+"mXÜõBŠád`Àž€«ŽºeYÜyç Õõ^¦iróÍ7³dÉ’²PÒÓl}ØÀB3È»ãs!¸Cš‡6V¢Úƒ&Ürq«”F7­n°“a®´ð«Óì·J…•àÕ+"®tÊÇ{ŒC‡5zØM]´âozVÑgé9N-€§Ã) üæh'qa°zG–G·ø7 šðÖsb.SósÏ=Çý÷ß_÷ûyæ™ÜtÓMü¿Ô; ­™¦v$Hà‘N.ÇId%·?•`¬ÕnK8yn€÷^ÚæªpçÐêV€ ‚¢t&/íËóð¦Lù¼?baWåšÞ±cGÝÕ.5šF£çÏ&g$r3¼ØH. Å9?#•“Üù|’DÖ§2  g. rõ©î*ßÿþ÷™˜¨¯å¯cX¸p!› YîÎŒë|€:‘@¯àæØÂÞ”á%·]oyUŒóB¾¯mm+€äÌ`”‹BqrÉ/Ö¥Id‹6·ù&ç/©¸&''u€¦ihÅßó¬b‘<á*˜cx[¬› ‚_ÉÛÕûÅB‚·Ÿ§Ã“øÐCÕý~«V­âúë¯Gw¦FÙÕ¢ÅjŽÉë"í\T²|ÿ™$“™¢²fË¢0{ï¥mDµ­­èv‘@‡0¹>ÚIÁc[2¼TJ§Œ‡—v5XzôÑGkô°5šiÑsg“³À jpa'ßüU¡(£)›=—"“÷ïpÉIa^³Â½bºãŽ;ê.  …¸å–[èïïg}>Ã/ÒÚ P/è1¼½¤¬=¼©”ÛnTž¿áÌ(—œö}í]©1¶µ¨ Xý2ÎÉÁ0C ›{_JcÛÅórѲ=ñŠ`Æ lݺµÑCÖh¦¥˳† ô›Á£?ÐQ"~3ÀïG»À½ëÓ5âê©>22·¿ýíršéÐV€#ÇQÖœÜöû_ΰñ`ÁÕíîšÓ"œ»¸:À~’kÙN×F:è&öçyr[€Î¨ÁEK+׳eY<õÔSär¹FY£™’VüÏÂÂ`žlH  §öüÛc]À/×Õ¶ô¶¼çâ¸+}ê׿þ5?þxÝï§ZîL±·E…Ò‘àÎm/pÏKéòäļý¼˜«p“Ã+… d&ý‚ä¬`„sB12yÉ}2dòSÝmawwŃ6zÈÍ”è9³‰‰s óètŒÀÑNV•¬ß~"A*ço¸öô(—x¬ßüæ7I&“u½W(âæ›o¦§·‡ ù4÷·¨P:l`Y ÄëœÜöu)NZ®ú o8#ÊÊyÕ”ü4=ưmµ\K& t&WGÚøÝæ ;GŠn€3„XØU© ¸{÷n^zé¥FY£™­41=F€p3¼8V€wƺ1ür]š'¶fë¶ÜsÏ=<øàƒu¿ßùçŸÏµ×\KøAj„ýVA_ÐuÂàú’9{ÝÞ;åœPŒtNr÷:wæ†iÀ›Ï޲ ³Ú”–6?O“”­iXsq(ŽeÃo6d˜ÌJâ!ƒó—„\E°ž{î9‰D£‡¬ÑÔD+MÌ#Ðð@/60ß ðžx!¿y%ͯ¤}›õ¶¼÷Ò6WGµ|{î¹§î÷»ì²Ë¸îõ¯×V€ÃDÂäõÑvðÈæ,Û†*Á€¶ §õ¹beÄ÷õ¿Ë&X—Ï´œÀ©~ye¤ ÁêY6,¶>w DW¬rõ­]»–}ûö5zÈMMô\ÙÄt “ 3ÆàP,;ÛÁå‘6’YÉW—`ÿ„U¥Ø^z„«!“L&ùïÿþﺨ"‘ˆ¶W„ÛYd†Ø5Và·+Yˆ†o9;F<\-ä‡í÷dÆ)̸«ïø#‘\Š³È ²oÂ⡤”œÜä¤ÞJÀ¡C‡X»vm£‡«ÑÔD+ML—aœ+0§:àâ=t“'¶e¸ó¹T•¨ºbï»´ÎhåR|ì±Ç¸ë®»ê~?m82$°Ô qy8ŽmÃÝ/¥KWš99…›^µ(äûúßd&ÙÝ‚5$ÅÜ—‡Û@ÂÛ³Œ¥%Ý1ƒ³•s•N§u_ÍŒ¦Õ~»³Švcæ~}6’׆۸>ÚAÁ‚o>‘`ÓBµÀ†+N‰ð†3*s¹_ÿú×Ù±cG]省G†"ÂàÚH žÝ™cíîJ0 ”ÐÓfðÆ3¢¾ ž¶²<–M"f z¼Ï[ƒ×FÚ!xn°èˆç„( •žþùºcZ4šÍÌ• š)1´‰™“èEqaò¾x/‹Ì/ïËóõG'ÉÜih >ty›«Sà‹/¾Èí·ßŽm×׃N[Ž ÉÅá8§ÃŒ§m~ñbš¼Rð_PL ˜¨zmNJ~™`²%ƒ%„b,„8”°ùÝæ Rãæ(q6l`ÿþý®F㋞#›S@t†ex±¼*åæx7øÑsI~·¹:-жáü%aÞvnLÙfóï|‡5kÖÔõ^Ú pdH Ïðúh÷mȰõPÁeXÞäêÁ€ÏæRl)d[P(öá¸8 nÍ2‘±è°¼¯¢, ñâ‹/6z¸/ZhR‚: sƇ`™Àͱ9œŠ1”°ùÊÓ 'lWZ Âxï¥mœ2·R|fçÎ|ík_«»D°jøQj”Cv¡åÓ‘`×E:YhÙr(ÏÝ/Uâ5œïæ÷_sÅi8°ò<šm½T7 D0¸(ÃD°fWŽíCºbg*}t€f&£ÍqÅÌ ië#. ܘæŽÕI¤Gs±Jig·\w• ýÉO~–M2)í–;Ó6’‹CqšAöOX<¹-K8 8kaÈÕxÍš5LNêJ•š™‡VšA1 °k#íÜí¤`Á×t›9ÞuAœó—TÍØØ_ùÊW8tèP]ïu饗rÍïýYà{©†µ`Zœ ¶?ˆu3×°noŽï=“Ä.)iÅ.Žï8ß]¹Ña]>Í`!×rçY Í ¯ E±mxlk–dÎæU‹Ct+q7n¬ûúÕhN$ZhR‚B”úÌt'@)ÐOüq[/Ëa¶*ðïM2™uW´%,è4ùÓ+Ú]Uzè!~ðƒÔõ^Ñh”w½ë]´µ·ót6É™Im¨É9¡(oŽu!%|ç‰$ÏìÈ•W²¶„×­ŒpŽO—À!»Àš|ºåγèzy¸ ¬Þ™eϘÅÒž‹»ÝõÖ¯_ßèáj4Uh I f^ ZXÀYÁ(lë!ˆàçkSܵ&U%2$pݪ(ןY Ìçó|õ«_­{½òÊ+¹úª«È"µ N$BðÞx§"ì-ð™{ÇØ;V,à$e±ÞýÍÄ ™î³™—’uù4ù¦¹åy“œŠÑcØ;fñü`Žî˜ÁJ@"‘`ݺuªFS…V4'”wD»¹&ÚA*'ù×'X¿/*O¤„öˆàO^ÓæZE½òÊ+ü×ýÙlvÚ÷hooç½ï}¯¶&6°2æ£í}´ ƒ^Éð¹_3‘‘E%xÓÙ1ßX€—ó&[´Cà23Ī`„L^òØÖ,ÎZè.Òýâ‹/Ö̪ќ(´ÐÄÈ&[qIŠÕ ?ÖÖÇ3ÄËûóüëƒU®Ë† –„yï¥qW0Õ~ðî¿ÿþºÞ몫®ÒV€#äÍÑ.>ØÖ‹)·?•äï/Væu|ðÕm. À.+G²Á„Š«Õ;² 'mÎ^¢CÉšX·nccc®FãB+MJɸ´š® › œŠñ¡¶^‚~º&ÅŸKVígðž‹Ú8 ²ÚåË_þr]…U¼V€µ .ŠÕÖÖÇ;bÝä ’ÿ|d’¿üé(;GŠ+üן­jœ´mFmëˆÞ³Ù1œŠ[Øx ÏÊyæ¶W [íß¿ŸmÛ¶5z¨ ­4)¶”desYð®XÅðå'Y³Ë`K˜cògW¶Óv÷ øö·¿]W…@Õ pgzŒ±¬Xw$Ø-5ßÙÏÆ{0mÁ«“|ðŽaÚ”%üÅÕ¬Pj6X@¦I¯Ç£E"YŒ°È 1–²Y½#GgÔà´þÊù×qš‡V4'Çðís9)fóÁ<_¼‚Ñ”»@mÃψò–s*} …_ÿú×yöÙg§}ŸöövÞóž÷‹Çy"›à±¬® P/6Å ŸîœÏÇÛçÒ-LÙœáoâÓw2á_ÓF´”bF÷¦8ž8ÕÏ ¯ÓÕ;Š•W)€–e±~ýúºK[k4'‚ÖüÅÎòH&š8èÊÎ Fù³¶>¢ÂàW/¥ùΓ ÔùQñ°àO¯p¯6ù—ù—ºŠ«\yå•\rñÅ$¥Í÷’#%·‰¦lŠé›mïã_»qV0ÊÞq‹/þfœ7}í¿y9C(P<›+aæ&‹J968M•Î ÅÀ »sLØœ1?誛°nÝ:ÝH3£Ð @“RÍ¿š¸)ÖÅïG;É$_yx’‡7g\®Ë†3ùãW·TÒ~ùË_òãÿxÚãwwwó¾÷½H$Âï´à°‘ËNßíä[søÓ¶>Š»‡-~½>ÍxÚfžà½ñ9t6Aiêãwž$ç£tö[¼´'ǪAWùäM›6qðàÁFU£)£€&ÅF2n[Ìð~@SâúXûÜâêrÌâ³÷Œ³c¸ºmð».ˆsõ©•†4étšý×eÆ Ó¾Ïë_ÿz.»ì2’ÒæÎÔIm8,$EkÀÉ0ß9Ÿõ.å ] øã¶^þ¬­ÿîà†hgË ç- „Y“ÊIžÌ1·Ýd‰ÒEq||œW^y¥ÑCÕhÊh ‰µ- MxeS4ÿUÇ®+• þÒo&xxS¦`KX17ÀG¯l'®øWŸxâ ¾ño`YµkÒ/Y²„·¾õ­ w§ÇÙVÈêæ˜a#9-¡Ó0JXì.pÊÜ€ë7úòË/×ÕÕR£9Þ蹯Éy¥™uíN<À'Úç±*XìMÿ÷¿gÓ¡J}§5í[^UiJcYßøÆ7xôÑGk[ÁM7ÝÄ’vX9îËLh€æ˜!ÅfEfDV²nOžÓçiT¦ÚW^yEjfZhrÖç3ŒËÙ×…ÍÎFø›Ž~úŒ«wdùì=¥¶´¢X ="øØUœ2¯bbÝ·o_üâ9tèPÍc¯\¹’ë®» Ü“žÐ­‚5Ç”Na²*X,ZõâÞó:LWEÀ={öÔÕÑR£9Þh ÉÙmåJfìÙ'ÂlàšHÚÞGX[ÿç#“ä­bGAˆUóƒüéí®šë<ð·ß~;²F‘¤`0È[Þò::;Y›Kñd69+ÏŸæÄ#¨08½¤¼¼/OÀ,﫚œœÔqšVšœ1Ûâé\ 9K Ù&ðÞxo‹v“·Š½éùbªRYÀœãºU•Žù|ž¯~õ«Sv ¼ð ¹è I#ùufB§jŽ8=¥Mì-0–¶9YQR©[¶liô05­ÌžÈ&˜œ¥LíÂà/;æri8ÎpÂæ¶»ÇyvgÓ(ººbqu‹»+“ì¶mÛøçþçš;;;¹á†¦ÉcÙƒÖì ¦Ô4‰dY Ä#ÀxF²c¨àÊ€b  ®¨i4Z˜¼K³yG³ÛÀ3Ä­ý,1Cl<çï5Æ®Ñb‘ Ë†ó—„ø£W·ðt ¼óÎ;k÷ª«®bñ¢…ì¶òü.›˜U锚Æ!9†ÉIù‚dÝÞËz®Œ•­[·’L&=TM‹3[eFK1dx(3Ió® \ŠóWóh&nÌð…ûÆId‹E‚Lï¹8ΫO®” N§Óüû¿ÿ;7nô=æòå˹ü²Ë±‡² ºK æPìri²²°ù`þN“%`ûöí 5z¨šG+³ <˜™dÄžÝLo‰vñ¡RÓ ï®NòŸJ e±6@‡Éǯ­Ò1ðÅ_¬Y&8‰põÕWy>›dÇ,«© iA'ŠÊè+ûó„‚…]•ërrr’íÛ·7z˜šG+³„uù4ÏÏò6·j‘ 7D;Hç$_z`‚^) ²m¸â”07_w…ïÿû<ôÐC¾Ç¼üòËY´p!ûíOæ’Ú  9&Hà”@˜var0a1‘¶9en% ‘HèLMÃÑ À,!!mîÎŒ“ÕŽ€J‘ OvôsV0ÊÞ1‹OÿjŒ ûó!SðËÛ8ËS&øË_þ2###UÇà’K.AOd“³®¨’¦1H$Kaº “‰ŒdϘŠE°m›-[¶ÔLUÕhNZ˜E<œI°½›õ_ª œó©Ž~æžÌñ÷Ž3š**?+ú|øµíD•Ú=ô?üᫎ‰Dxõ«_0MžÏ¥Øoåµ 9j$Ð! –”·ʳ¼/@8P¹º6mÚD"‘hôP5-Ìl—-Å.+ǃ™É£?P`WEÚù³ö¹„…àgkÓ|ýÑùRQÄß?;ʵJm€\.Ç׿þu6oÞ\u¬K.¹„¾Þ^ö[9ÖæÓ³Ú¢91H n,/Ål9T`~§I›’ °cÇ­hŠVf6pofbÖ:À-ñ9¼½T$è?žä¾ i„(ÖøÓ×¶3¯£xõÒK/ñï|§ªYвeË8ëÌ3ÉÏåRfiQ%͉%ŒÁ²@ѵm¨@wÌ`N¼r=:tˆ={ö4z˜šF+³Œr)žåÁ€N‘ ·Ïå‚PŒC ‹ÏýzœM \´,Ì;Ϋ4 ²m›;çž{ÎuœÎÎN.¸àžÏ§oJs|‘ÀR3DƒÁÑ–-YÖSQ‰„¯EJ£9Qh`–‘6¿H·Li[XñÉŽ~æ•âþù &3’pÞY+•fA»víâÛßþvU¶sÏ=—H4ʦ|†Ý:@s (†h3 &3’‘¤Í åZÌd2lÛ¶­ÑÃÔ´0Z˜…<’dS!Û2BÌ^nãÛú øñsI~º&…”°r^?¼$Ž©\é?ÿùÏ«¬gu}½½ŒÛ/2-aAÑúŒ s “DÖfϘŲž€ëù­[·úÖ¨ÐhNZ˜…ì±òÜ›Ÿå nœx€k£í¤r’ûíöå1¼íÜ8ç T*îß¿ŸÛo¿Ýeèïïç´ÓN#¬Ë¥u€æ¨q—BØv1à¤Þê’À:PÓ(´0 ‘À¯Òì³ò-óK Û0ùXÛ\–˜!6ìËó_¿›$•“ Ì1yÏEqBJŸ¯ ££ƒ³Î: € ù ‰q¡hŽˆ ƒ¥f1p×hþ“x¨ò«Ü¹s'ª¦EiùÐrl,dx¸ÅÜØÀ¹¡ïoëÁDpçó)Ú”AÁõgF9w RhÿþýüèG?reœyæ™B!¶²Œé@@Í1 ˆ`AIØ1l WfÊÄăƒƒ¦¦EÑ À,%'%?M1jZJÀÛcÝ\Ž1–²ùæã ÆR6 ºLÞyAœ b¸ûî»]}ÙW®\IG{;#Vž…lK)OšãÇÂ@ ‚Ýc !XÑW‰H&“º'€¦ah`óL.ÉS¹dK´Ù@¿ä=±ÂÞ”ááM !¸nU„Sû+“ïöíÛùõ¯]~<00ÀܹsI ÙÒBA”šã‡šA¢Â`"c“ÌÚ,Us¹œV4 C+³˜„´ùiz¬åêÛÛH^iç¢pœDVrûS FS6s\f¥.€eYÜ}÷ÝŒÐÞÞÎò“NBƒVKjމd¾$& ÒyÉÁI›¥½ å¹mÛ¶ª´TæD €YÎC™kó­QÈA=F€›cs\V€ !¸þŒ(sÛ+>ØçŸžõë×Ç9ùä“,äI·˜â¤9öH Ý0è3¤ó’=c¥L%pûöí$“ÉFUÓ‚h`–3løIjŒ\K%ú[FR6§Írñ²J0àðð0<òB/^ À+GZwjÓÂÂ ß mØ7n±dŽ;pppPgh‚VZ€û2“¼œÏbý¡š†ZV€Î¨Á«OŽ ”¥ýSO=U^-Z´ˆp$Â>K[4G"BÐo+î›°h×™š‚VZ€ÝVŽ;S£´Z½1¯à›'NÚ\rR˜9±Ê¥¿víZvîÜ  E"R¶Íˆ]hôGÐÌÂÌ5ŠûÇ- KæèLMãÑ @‹pof‚m…lK}áE+€ÉÆ{ˆ ƒ‡7g¸g]Š¥=æwVV`ƒƒƒüû¿ÿ;étº¬d¥Í°méT@ÍQ#€Þ’p(ac‚%s*×_.—Ó=4 ¡•äAK³­å®ôX‹Eӝ޴sE¸l^òõG¤s’×-ï#¥ä{ßû·ß~;±XŒP(DIBZGþÆM ô™‚†ÅÜ’¥=—j988¨{hN8Zh$pWjŒ--hè&ïkë¡Û0yzg–Ÿ¬Iò¡W·qÁ’J0`2™äŸþéŸxì±Çèíé! Œèj€šcÄ#@X&³’‰ŒÍ²Þ1%pÇŽ:@sÂi%YÐòliY+€ä²PoŠvaÛðí'’¤s’O_ßå ÆäÓŸþ4û÷ïG–NÐ$’.Ã$„A¶ JkRÄ‚îžZМh´ÐB´² "ï‹÷°<fóÁ<ÿöÛ .Zæ¿®ƒh°²Û´iûöíChï¿æÒc AÎ’ ',æµ›ô´U~…ìÛ·¯ÑÃÔ´­$4´²V#¼/ÞCÁOפøÙÚ¼¬w_wUfsÐͱ@a!è4Lr–d4m ºu&€¦±h ÅhU+£±ßëæÊH©œä_˜`ÛP[¯ëäšÓ£®} AmÐ#Lm†AÁ‚DF ”L€t:]NEÕhN­&4´®@½†ÉÿnŸÇ€âåýyn»{ Ó|þÍ]\¼,\Þ7Œ`®ÔVÍ1!$]† FS6á€pÕ€b€ÔÕ'5'­´ øIjŒ ùLË]6pA(Æ_´Ï¥Mür]šOýbŒy&_zK7§õ+¶Å„Á"3ˆÔ*€æ`Qüµeò$ Ì ¸K§R©FUÓB´Úü¯)±µå‡©QZ±ÖÞëæCm½¤à»O'øøOF àŒE`y0Ì|S[4G¤h˜cMþÃI›LA20Ç$ª(:@s¢Ñ @ ó³ôks)Ì‹w—@Tþ¼­[âsHÁŸMrýâ—ëÒ˜Þé Û0µ 9&(wä´¤DJXÐeÒ©LÁddd¤ÑCÕ´ZhaöXy¾›!Ó‚Mol Ã0ùÛÎù|²£Ÿ%Fˆ‰I›@Að¶Xou7zˆšY„‰ Vê@•ÍK,: ”’ÔÉdR7ÒœPGM3swz‚ßvqE¸«ÅÖ»hiëãúH/å3´çctêÕ¿æ‚vQöci›œ%‰†‹ºM(eÿ¥R)­hN(Zhq†ìßIs^(F\-'ô$E3Øò@˜“ X9°Õ΃æø" Ü‚ZÊ’*èÎ( ZМP´ @ÙIÌL–}”­ˆ XH,-ü5Ç éy`‚…]fY1€b&@.—kôP5-‚V4$¥Í·“ðó-¬h4'YJT3t* æD¢ Oå’ü<=Þèah4-ƒD2Ðín ´{÷n­hNZГ’Û“Ãl-äôE¡Ñœ zÛ :c Àèè(û÷ïoô°4-‚žë5e6ä3|/5B^{Á5šcŽ×½&%UMÒé´Ôœ0´ )#¦Fy.—n¹â@ÍñDJ°Jzµa3œL€EŠJ¥Ø½{w£‡«i´  ‰0þ|ö[y¾žbBZZÐhŽ9$#v±ðvwÌ$h"Áb&€ƒ”RwÔœ0´  ¯¯}èCD£QîKsOzB+Í1ÂF’/uú ÀIÑ-°¸Û$ Ìăƒƒ¤ÓéFYÓh@S榛nâšk®!äÉ!­¼¾@4š£DP ²‘Q£h èXÜ rgh@s"Ðó»(š{zzø‹¿ø æÍ›Çó¹ßMŽ´d·@æXS’ »¤D L£h_“²hˆ*µöîÝ«»jNZД±m›Ë/¿œw¿ûÝ w$‡YKê€@æ(É"9h0 èm7²’i3'fЯLÅ“““ìÝ»·ÑCÖ´ZД‘Rbš&üÇ̹çœÃ~»ÀNbÔ.h@£9B0i[ŒÚ"AA{¥Ñ”¤¸H L§Ó:@sBÐ €¦ŠåË—óçþçDc1ÈLòÓôX£‡¤Ñ4-Án+OZJbAÁ®Ž@Jˆ† zRwíÚÕèakZ­h|yë[ßÊ›ßô&rH¾žâåBF_,Í €í… iÑÛf2·ÝýKŠ`±bt* æ„ çt/mmm|üã礓Nbs!ËW'‡HI[»4šÃ¤€dK!‹N™¤=RÝv{aW€ YùuíÚµK÷Ðw´ ©ÉyçÇŸüÉŸøYzŒ»umæ°À¤´XŸ/¦õ­œ (1€H`Q·I4XùuéT@͉@+šš!¸å–[¸æškHH›¯$±¹ÕFS'8hØ\È ÎXÂôhÑRÂ@wQ1pØ»w/“““¾f–£çrÍ”ôõõñ×ý×,Z´ˆuù4_M ‘–R[4š:0¼OsÈ*Ð×fpÎâ ¶Çþ/®˜A_[% ™LêT@ÍqG+ši¹ôÒKùÀ>€ašÜ™åîô¸V4š:È!y:›$äÌ…!æw|{mz{èT@͉@+ši1M“?ú£?âÊ+® !mþvh4Ó"€a»À3¹b0ßÅËÂtDÜþ(ºb!Áân· S5Ç=‡kꢿ¿ŸO~ò“ÌŸ?_»4š:0¬Í¥ÙRÈÒ7xíŠ0ÂçcØ;f±é »ðöž={ý4³­hêæÊ+¯äÏÿüÏ Ü™åçé1­h45È#y(;IJÚœ½0ÄiýÕþCÀPÂæï5Æ#›3®çº»»ý4³­hêÆ0 Þÿþ÷sÍï³þmò /åu Æ‹ì·ò<’IpÅ)ºc†Ëü/$³’ºoœ=—t=wÕUW{rh4Ç=wk‹¾¾>>õ©O±lÙ26²ü[â ãº@FãB x<›dK!K_»Éïq™ÿ·à¿~7É·O`Ù•ç.½ôRþíßþ¥K—6úchf9ZÐ6_|1ûØÇG"ü25ÎÉì£?¬F3+@RZÜ›'ä²åaN›ÄöüH~ò|’/?8A:_Yú¯ZµŠ/ùËœyæ™þš@+šÃFÁ{ßû^Þþ¶·‘CòÕÄ!žÈê¶Á ƒÿÖç3<–M n<3J[X”Óÿ lÎpÛÝãŒ$+ZÁÀÀ_úÒ—¸è¢‹ý4-‚V4GD{{;Ÿüä'yÕ«^Å+Ï?O`·•Ó”¦å) ùUfœa»À©ýA^{J¤ìß7¼´7Ïßü|ŒÕ¨ÿ®®.>ó™Ïðú׿¾ÑÃ×´z¾Ö1§v·Þz+ÝÝÝü.›à+‰C:5PÓÒÀ¶B–{ÒÜxf”&¶, ÿƒ“6·Ý=Æsƒ¹òkÂá0ÿøÇyç;߉ú×£9qh@sTÜxãüÉŸü †irGr„»tj ¦…‘À½™ ¶²,îpãÙ1LQŠøÏI¾pÿ8w¿Tiòc·Ür ýèG ƒ¾¦ÅÐ €æ¨…B|ô£åõ×^KRÚüëäAžÍ¥ô…¥i9 `—•ã'©1$ð†3¢ÅÜÀ–ð?O&øöîˆÿk®¹†¿û»¿££££ÑÃ×´ zžÖ5sçÎåÓŸþ4§œr [ Y>;±Ÿ=V^_\š–ã×™ Öç3Ìë0yçù1ÂbVÀ}ëÓ|áþ R¹JÄÿYgžð.\ØèakZ=GkŽ \p÷wGgg'düŸÄ!Rº>€¦E0€ÝVž¥Æ°‘Üpf”sB¬Ù•ãS¿ãÀ„UÞ¿¿¿ŸÏ}îsœuÖYº¦…Ñ €æ˜ñ¶·½|ä#˜¥x€¤F};Ÿi4³ ü,=Æ ¹ó:Lþ×…qb!ƒ]£ûË1ÖïÍ—÷ÇãüÍßü ×]w]£‡­iq´ 9f8ñ7Þx#©R©àßeú"ÓÌj `{!ÇS£ØÀõgF9oI˜ñ´ÍîçÁW*5þΚøÀ0 ýËÐ4}jŽ)sçÎå¶Ûn㬳Îb·•ç&öóŠn¬™ÅØÀÓ£¬Ïg˜ßiòž‹â øæã ¾ûtÒÕè†nàŸøÑh´ÑÃÖhô¼¬9öœyæ™|îsŸ£¿¿Ÿ5¹ÿ4±Ÿ!» /6ͬÃ^ÊgøQj€wœç‚%a~¶6Å?ÿÆ]æ÷œsÎá3Ÿù óæÍkô°5@+šãÄu×]ÇßüÍߋŸ;=®‹ifÈHÉ·’Cì(ä8e^÷_ÖÆ »sÜö«q%*A|þóŸçŒ3Îhô°5š2ZМÖÁïÿû± ƒo%†ù^J7 ÒÌ dü<=ŽiÀ.k#dÂ'6Æ+*AíííÜzë­¼îu¯kô5ZÐ7b±·Þz+oºñF’ÒæK¸/3¡/:MÓ#€ƒvž¯%†·-.=)ÌëOðÙ{ÇùÝ–JÐ_ àÃþ0ïyÏ{tПfÆ¡¯H …BÉÉÉc~ÜyóæñÙÏ~– .¸€ƒvßÏ3ºR ¦É‘ÀS£<šMÐ5øàåíüäù?|6UnüðÖ·¾•¿üË¿$‰4zȾd³Y,Ë:úiš=k˜˜˜`Æ Ç娫V­â‹_ü"Ë–-cc!Ãßïc‹Î Ð4)&ðB>Í·’ÃXHn:'ÆHÒæÿ<4IÞªHÿË.»ŒÏ~ö³ôöö6zÈ5yùå—‹â¯iô¬ •JqÏ=÷ËåŽþ`>\qÅ|îsŸ£¯¯§rIþ~|û- i.0.mþ3qˆ…§öY9/È¿þv‚±t%Â夓NâóŸÿ<'Ÿ|r£‡\˲¸ÿþûI$ЦAèùWSæî»ïæ±Ç;nÇÛÛÞÆ­·ÞJ¼­{3|vb?c¶¥/BMSqgj”»ÓãÄB‚לæ{«“ì.”Ÿïííåÿñ¹üòË=Ô)yüñǹ뮻= MÑs¯¦ÌøÛ¿ý[Ö­[w\Žoš&úЇøØG?J0æG©þeò Ý3@ÓMÿ_M ‘•’³…xqOž÷T¬fÑh”¿ú«¿â¦›njôp§dëÖ­ÜvÛmìÙ³§ÑCÑ4­h\<ñÄüÑý<ðÀqqD£Q>ñ‰Oðþ÷½ðÍä_+M¨Z ÐÌT0j[üËäA¶²Ìm7™ÌØ<³3[ÞÇ4M>øÁòá˜@ Ðè!û’Ëåxä‘GøÀ>ÀC=ÔèáhÌ̼J5 åÉ'Ÿäæ›oæ†nàÚk¯eÕªUtvv"å±iícúЇغu+÷ß?ÿgò A!ø£x/a!t!ÍŒÃnOŽpf! `K6(`)…-.¹än¹åÆÆÆiôË!˜˜˜àå—_æþûïçç?ÿ9û÷ïoô°43­h|9xð ßúÖ·øþ÷¿OGGÁ`ð˜_Q>š”6ÿ2y¸0øÃx&h%@3c0€2“|5yˆ|I MÚU×è‹/¾È›ßüæc¦(Kòù<“““¤R©FE3ƒÐ €fJÒé4étú¸¿Ï¤mñ…‰Ä„Áĺh%@Óx `K!Ëç&pЪúù]›LLL4zÈMÝèÍŒaÈ.ðÙ‰ýܓ֓¨¦ñ`BÚüóäAÖäôÊY3ûÐ €fF±ÏÊsëø^Î&ôÅ©i( ùVr˜Ÿ¥Ç=渠çXÍŒcÐÊqëø^žÌ%õªi¸;=ÁM";}úͱ@ϯšÉËù ·Žïc]>£/RÍ ÅžÍ¥ø§‰ý Ù…£>žF3SÑs«fƲ&—â¯ÆöðJ!‹©«hN°ÃÊqÛÄ~6²G}§ÂÚ Á’Òæë‰!þmò “:ÕO£)£ͬÁ©8a[|®k¯ FµÐÂÀ°mñ/“øŸäi-ü5Ú ™u<™Kò§£»x(›(G}kZ §«ß_ïá¿ÃZøk4>h@3+YŸÏðÑÑÝÜ™#ÔJ@‹ (NjÏæRüÙèn~š£ kûk4¾h@3kÙUZ~eò ]0hÖ#€’Ÿ¥ÇùÈè.Ë&´è×L{ H)ëÚo6¢c4³šQÛâŸ'2håøßíóXb±=(Í1ÇÆ¥Í7C|51İŽô×ø#}îK´ ÑÌN2ÒæŽäÛ 9níèçÂP hÑ_ü,Ã1ùo.dùÒäA~ž#+õ7«© 2 !¢µœ…Ú*ZzFirlàÑl‚?仩2Rê‹¿É1(šüïÉLð¡ÑA~œÕÂ_s8H¦Xý¦2Дž¶Ô‡dš‹EÓì,ä¸ul/ëó>ÒÖË€Ò©‚Mˆ‰`¿ç›‰!¾“Ñ&ÍTHÏí±82Èo³“ZøkÊ8‚üHüøÊklê[Õ7íª_E[jSÏ ëÌ49‡ì_ž<È“¹$ÖÖÇk"m„Ú0ƒ0€,’ße&ùÄ!žÈ%)h_¿F¡†Ð—>§›ÓIµP?Þ‹CH)³€-„ Ч²Y) y4›`}>Ã;b]¼/ÞÃò@˜*~ãLé› Y¾æÎÔ#Úׯ‚Á †aÏç½æüZ}®ô?Å à·Ú÷Þ—¥cøº©§ˆV—ZΗ'<Û¦]Õ !Èçó£@.Äc±ãããþ<š£`Ä.ðµÄd¼7ÞÃïG»è5̲MPsb(¦ö ØyîJñ?Éa6²˜¦ ¤ómhmb±¦i’ËålË*WöRÊ*aOýÁzS=?ÝsõlŸqnƒ–xøá‡êõB‘ÉdF¤”Á`®®®F$Í1@ò>5¾—÷ìä—™ ÒÖñ'ÇÏ?!m~’å}#;ùû‰}l²²Ìë0YÑÀ4„þ-Ž‚ÎÎN à N,Ëò3¹«ÂÖW!ðQÔû¶”î+M£ ïheϱ¤Õ-G„B !d:ž°,kk(Z2wî\6n܈m7ûG3Y)y$›à¹\Š+#í¼7ÞÃE¡qab#g–ßä8+þqiñh6Á÷’#<’M’6=qƒó—DÈ$Ï æ˜ÌèßW«‰Dèëëöm&''ó…BAz#ùÕ¢>ªéÞ³Ÿ×* ëÜGÖr54Z˜žšE"’Éd*ŸÏ¯ ƒWΟ?_tvv2::ÚèñjŽ! ióËô8e\içbÝ\ŠÓ¡£ÆücÒâ±’à4› !mÚÂoXå´þ OnËòÌÎyKŸm ô÷÷ÓÕÕE>Ÿ·GFF²xµšæWæ.®úÿ=±¾Â¿´à«']°é.P­Lß*ÓL$OE"‘ý'tÏ?ÿü13if£¶ÅORcü&3É¥¡8ousy¸^Ú(ìw`Püa ÙÎ$¸3=Æ“%Á ®^áÆ3cì·øþ3IvêÀ?M‘`0È)§œB(âСC¹ÑÑÑœÏjßÏïïrßíÎ})¥Wà{û;•öóbSMþZ8<\A†aˆáááí‡Ãá·®X±‚;w244ÔèqjŽã¶Å½™ É&8+å†h'×DÚYÂÐV8«ý6[ 9îËLðËô8ëò2Ò&\½,Âÿº(NOÜäÛO$¸w}šlAŸMM…%K–°páB,Ë’{öìIær9[þŽÇ+è…v­ç˜FAPÞÞ/¨š8\+G€jbÊår¹±±±ÿ×ÛÛ{aggçâsÎ9‡Ç{Œt:ÝèajŽ#)ióT.ɳ¹ßJsE¸k"œŠÒk0-¯ 8z$0b[¼Oqoz‚3“ Zy,$Ý1ƒkWÄø_Æ9µ?ȯ֥¹íîqv ëU¿ÆMOO¯zÕ«…B8p ³oß¾´ºR/­ÊÕùÙ›ÀSð> ‚w›úZõ¾ºoù¸>7GŠVê£fú†a8p`K,ûq[[ÛG–.]I&“<óÌ3äóùF[sœ) ÙVȲ­åÇ©QN Fxm¸«#íœÓe˜˜dIhÚ™¢Nœ•¾D2)m6²<œ™äÁì$ër&¥EÀ€Es\{z„·Ÿ笅A^Øç/:ÊC›2äôª_㡽½‹.ºˆžžR©TaË–-“ÙlÖöúó½e~©{»d°U%ÀGè»*ú<ïGÓþ´µP'ŽÆçÍ )m“{öì¹oÉ’%Ë#‘ȧvšakÖ¬!™L6zèšDBÚ<“K•¬C¬ D¸,çâpœU(s “ˆ0ÊÊ4鬡 ÊE‹Ç¨m±¥åé\’ße¼K3l@{ÄàÕ‹ÂÜxVŒkNrr_€½ãÿüÀÿód’ƒ“ÖQŽF3éíí墋.bÑ¢E {Ë–-CCCŸÞå›WþT¡n{þ\Šw¢88ïáz/ç±_,@³´Ö @…r !„*è«R@<¶Bf2™ÔîÝ»ïX¼xq<_yú駺ººxá…Ø·oJ± Í,GR |*—äé\’xÂ`q Ä9Á(ç…bœŒ²8¢S˜D…Qºf¾R ”[QZå'¤Í!»ÀK¹4ÏçÓ¬Î%y9Ÿaܶ°hHpzo«WF¸öô(ç„èk3KÛüðÙ$ÿõÈ$kvå°gê‡Ö4Œp8ÌÒ¥K9ûì³™3g¹\ÎÞ²eËÄÎ;“àrÅÖ2í—»"Ì%`9¿ZV‚ÒPT›ˆú¸ÑçìpÑ €›zªú˜†aH$FwîÜùí ŒÇãñ7,\¸0ÖÓÓÃàà [·nåСCär9­ ´’¢eàå|†—ó~œ£Ó0Yd9=á´`„SN „è5D…AT(+ÎqÔÛã…ðÜ¥HHK›dIà¿Rú+V¬ ¿¿Ÿ`0H2™,lÞ¼yb×®]IÛ¶ý‚õTao—þÊVç1!o !,eõoQݨ*°F–ÁT2cF+Z8<|#G ÃÉdrbÛ¶mwΟ?wWW× ápxé)§œb.]º”‰‰ FFF˜˜˜ NëtÁY†mÛìÚµ‹T*UsŸ’a»À°]`m>D…A‡a²Ä ±$bi Ä"3Ä3È3H—aF‚ 0+ó;©¾ëI­iX^Õ (HINJ²H²ÒfÒ¶Ùgå´rì´rì(äØRȲ«cܶȖÞ/tw\:?ÂEKÃ\´,ÄÙ‹Š+ýpi†)ذf0Ç·žHðÓ5©cfîïííeîܹú·Ô䘦I,£³³“žžÚÚÚäóy¹oß¾ôÖ­['‡‡‡³€7ŠßVMöްÇmê·Jê¾êêß÷¶t_M T­µ* 6Z¨ åÅTkrªÆ E÷“-„°-ËÊ >522²«¯¯ïâ¶¶¶ó‚Áà‚ÞÞÞp__Ÿ´`–!„`llŒ½{÷Öël )m’VQØ>•+ÆŒ… " ¢: “>3@Ÿ`Ž Ç0é0LÚ„I‡Q´„… SL_°X i‘6Åþy)±-&l«¬œì· ² ¤¤MJÚJ—¾E³þܘÁйAÎ\âœÅ!Î^dA—IgÔÀ”ËõZv øÞê$ß&ɶC…c:[¶µµqÑEéf\MŽÓ,ÖÔ°,‹\.g åöìÙ“Ú¿:ŸÏÛžßh~¡^Zá[êŠßï·ðw,êsRYùWeP-#š¦,ˆþÕLM- ¯ø!¥tišª6:999411ñ`8^ÛÑѱ,/ ‡Ãó@»aQ)¥A±« s+ÔÛÒ}<÷Ç^š#êd†"ê{Pý:!D, ˜¦)8pÌ‚>óR’—“ÀA»ÀæB¶j¼‚ (ÖÏ7„ XÇ% ¥¤@qµ/ÛG$D‚‚hP°4j²dN€å}VÌ ²bn€Sæéi3èˆ °¥SI¥òcÙ5jñ“5I¾·:Ɇ}y¬ã0-:tˆD"Qö§Óéc­Y7íê®™R’Ëå¬t:m%‰üÈÈHvrr2ŸÏç¥Ã0¼¦xW`Ÿ#äñ øs”G! 2O[ŠÅÀR„¿Ë}à9–+ |ŠÛ¦@+þ¨~©ª=©A"Þ E†!mÛ–™Lf2•Jm¶m{—am†a´Q)eĶí”2lÛv@J’R¥”ÒŸYº5ë0¨%¥ª%Ö¬U ŠJy}O(ÿ¼òÝe•'DùùÊ!Ô;RJÙÕÝ^uæYsòù¼Ø³gÏ ë! I±:®¬kÚ1 èŒÄÓ(~¾Î¨I,dÐtF zÚLzãý& ºLvèk3ˆ‡maƒéôRÍûFéjÜ3fqÏKiþïÓIÖì:¾%|S©{öì¡§§‡t:m­Y³f,—ËÙ5¯ ¡^1S×s¯œU÷Mg\zj/Em¤”ض--˲mÛ.ûÛ Õ+}oàžwåïZåã^¤••e[• ÀóØ;†ªQãþŒE+õSö•pUÀˆò¼j>²„¶£ÁÚ¶+ I)¥%¥´lÛÎK) %EÀ’R%ضm¦”ÒRšk«¨V è¦ªÅÀÁ56ƒ¯tºšzSlJ)žÇÅ®¤<¡Z(J€r㢻»; ááaöíÛ×èS7%Ñ ÁÙ CüÞi^»"B_»Aî…šYS0#…–V~øa®¸â uS-eÀÏÏãŠ@Ub,õOþÎ-î ®lÞBÎJÞC©vµóžféÖqHÇàÌ?>V¡Ö5ðüàšfòÔf¨~¾¸“Ïvá²ôŠ’JäYêã² (Ë~!\öâT@ Éܹs#ñx[ •J±cÇŽ¦X¹I`"cóÂî/ìÎñ?O ú;LÎ^äü%a.^få¼sb‘ [!€âj_˜ÌH^Øã®5)~õRšÝ£…ãâ㯇l6˶mÛèïï§·§'ÔÙÙÉWjÄ»>>S å±,]*¥ßºc*þ윽Üûàì#K?Þ)]µ®éPª>´r.Ês¬%À›Ïï øsæTË0 UØçKÏåÇ¥û.k€â.PÿÔ˜o¥À)?“ß~?üp£Ï½‹–Vj ©M5ϳV  Kð;‰â°„–*ü¥”y!„)¥4K €Yþ†¨ýë7F¥l£¤WÅ(V—.ÓcSÌ2®UzSS^z©Ó»k_á6ÿ»¢%\‚¿¬-uÑ_”ùʉ”D#Qs^ÿü¸abÏž=MÛ*[ì)°s¤À/×¥éŒ Ì pî@ˆóBœ½8IJž]Ñb°ßÞq‹G6eùÙÚnÉ0’´gIJfppÓO?9sæ˜ ,ˆŽå¥ËzO•o Ô§Ë÷]ʾÛàPZ} é(RŠ¢DTŒ'¢¬¸ßCµÐM«ØÎbKHåç§øúÕù×›{ïMåS|ýÎê=OѼ¯®ê½J€ºÍ+üËñø(Ps寎˜?)Ñ ÀÔ8Z¦÷"•ÊÅ)UÓé¾¥^<ŽÈSö&ÍÓ,m3Cá’©Aˆe‹ƒc) hpþœý]Öµ²4ü¦ûuã ÚÊìZ™ËæüÒ¬LÉàÊwÿWÌýW€¥÷æÎ›×ÞÖÞJ§ÓlܸqV¤uJ ci›±=9^ܓ㎧¡3j°¬'ÀÙ‹CÄC‚ǶfÙ°/O&?³æ¶ÉÉI¶mÛFww7óúû#»wïNåááû‘=÷e퟈҅Uy^Q”ƒLûÞ³í7yxÜ5ÂOèWEÿ«&z³~Þ0Œ<Å9WúÞ?ïsjà ·^€jù­•‚8³~Ó €Úx}ç~_¶KuVýŽ`/í©'fiõ xQšT„vù} àäô…ÛÊ`–,޲PÎ  r¡¸ÔÉ¥žY¦)g¢JÌUEÄ;Ò\:‚^J !Ž@÷¸C¿(k ή¼¯pÊßF¢ÑÀ¼ù ÚLÓ»víbÿþý>Ç…‚ ÃI›ádŽgsδlݺ•“O>™®®.s`` 6999aÛ¶]ù%Wù›ý€¢Žèy^Ò¨…âQÃ%„,¦B¯á>64™p8†Ôó¹‹J“âòt§Õ¾¢ºXåQòª „È•¶å”ûyÅ àR¨X Ô Á²«—Úq‡ûygZ(r8€*^Ÿ]2÷«Š@y寬ÞMŠÜQŒ’ÐÎÀ0 §À`ù} ƒ+n@þS¤úÑ” @yÕ^ŠÏ«ð'*åmÕOêþ¸Î ó¼ó”,\8§½½=2›Vÿ³ññq6oÞÌùçŸÏ¼þþȾ}ûÒ‡Êú¬°}}þ€ó•Ë’¨ü9B_ØNˆNé%S™„½÷›F8CêVJB_ÝæíÚçMûs¬.€¢ Ï !ò†a¸¿ßŠ»Åu‹g~Ç_«spÂÑ ÀxSœYÄ. ]G:;‚Ù*­ÈË•¤ß?EïDü›Ã0 öír*Ÿbºw†à˜Â¼u¼.CöB«z¿êã5úük*¾ý±J0@­ZB¨ç¬/Pþ^::;cýót !ÄöíÛgíê¿‘R²iÓ&–.]Êܹs¥Ë–ÅÇÆÇs…¼ã¯p‚òDÙL¯ÐöIù*÷e•°w™¥úZ8r`F ‹cŒïgÕEvÔn{U%{…RÕÏ£8ÂÝ%üKÊ@Ù€'V tßò¼—«N€2¦ª²À5Ü93öûlyÀ'*Büµ{'.@P¼Xs¼s±¨¬Ð”¬^ÿ}é±óžRYõÛ¥”À`阦"àÔpÜNÖ@éx¢”àRœ¥¬O<Ì"%@”Ãûý?–’æçïç1°KÂߢàd QI#,›ÿ%ÀÁmÓ.mkôÉ=öTçÿ»|;Õ®Å" ”} e¯DÒß?¿«·¯·Û¶m6lØÀððp£?°Æ‡mÛ¶100ÀòåËÅÒ¥KÛF†‡saT”méöÑCEˆW&váLòÕægT¡¤þf}V°Êýò¶fŠ?NLiþyÿÞÖ½jÕïïøñËÂ^þêê_p)x‚ QVþÂÿ;nJV¦Áãð T´QGø¨ŽÊwŠû”+¤aŶBÚÅðG™–¬¶"ü Pª hw '° ˆÛ€òþU³Ñçùh¿#7ðÛÝõ©W«éHˆ²W¦x~éèèl[¼xñü@ hîØ±ƒ7¶júÖŒ'ŸÏó /ÐÛÛKGGGàä+ÚÖ½øâX¡PP\÷E p¾gõ/*^/ úJ4º[ø«UꦵÆl¾¨üVþ~çÂkúwâNÓ+PIô¦û9Âßq8J@¨¥ ”?KU”?ß•¿hÂl­TðzÝέcÚ¥ PøU,m7JPY𼔢þ¥”–aŽéß9F¢iËé `PüÎŒ’²¡ÖP• — šÿ},³ O„ŸRÈóÙËœð¯rœ`ù¡`0¸lÙ²…±x<>99É /¼@&“iôçÔLÁ¡C‡x饗¸è¢‹˜7o^t|É’ü¶­[HW€Ÿ£T+ö¢,üa?Í}lÕzPÃG¬ ‹Z‚¾•b¼‚Ó7ó\€Êú(žß‚cÀ“ó¯XÊnç1î ²ð÷fÔP:¼Ê€÷;±=ŸqÆ~_Z f€ƒèÝîÜ:‚ß(¹œÕyAIÉ«¥8x£MòÂN!§9SDȉpÜ ^ÿ¿j(Ô? ÖxšžrŸÎã.þS68¹åfKBc`éÒ%ÝsæÌµ,‹_|‘4ú£iê`ãÆôõõ±bÅ ±lÙ²¶ÉÉÉüÁ2Þ,Râˆá6ç»…¼…eÁ/œß¼–óZp©)‡÷³ @m+€ÊŒGÀt羟ð/¿¡Z@ÍP…|Σøex;zËû}éó9\ÌDÿ?h .„»* 7(*±Vqway}òŠÿ¨Šô÷óùK–€@IÐ;·&•΀Nƒ ²°÷QÊ‚ß'æf—ðS³ª T¹p§ªß…Ú @-æãx¯%À«”¿¾m„§‹ü¯ç1£¿¯Ù4ù5ŠÀP6{WÒjþ½óXm×kRT¬“}Ðù+m–üù®íJ `çyç걜vÀe €ç¾Z À5vj|ׇY(h¦ãuð~F÷>¡_Ô ¤@WWgïòå'_‹ÅæŽñÈ#èœÿ&EÁi§ÆE]D0dïÞ½‰õë×år¹BÙ¼\\ÍÝK8‚Å“gŽR7^TÐxóѽ¦cWYÜ ê dší3Õß?­@õêÚåêwãUò¥ç½Ñþå`A”&AÂSŠRàux­<å1+ŸÉ†™kþm¨…¯ß_q8ÓÏq8+o a¤ôðj•eV1ûJ+}çÖ)ìª(¨º¼ñW*Rz-MÇTƒ/+q>²b•QÝ'`H[ÒÑÑÑ}ÒIË/ŒÅbsS©«W¯Ö¿‰‘R²qãFb±¯zÕ«˜?~<ŸËÙ7nË –ÂI ” ¥(EÿËb-èbðWí¼sÕo¬Ö’÷¶‘õº¼U弦äzW’M§Ô°bL•2©º\W«·Håó½xKüºJãÓ,H‰úWS «R?q+rMû½4õì<¨Ã `(Ï»¬¥Õºj 0••»³Â7•U¿ºâ7)Fý›ŠÀTnUŸ¿Ë@Ùl]U Ü©‡(ŸCýl0ó.ØÃ½6ýVùµ¶µ¢F§˜ý%ímmÝ'-_þº¶¶¶“2™ O=õ›6mÒ~ÿY@0ä /dÕªUH)åÎ;'6mÚ4šÏç †a”q£´òå ?µÑ ! WÙXeµéòGãŸK®®\¡ÚEà ·– 8|ÓòL¸x]óŒgQ„òÙ«>·'£B­Ëoù(^…Ìkð–ýõº œÔBÕšSÀ-øËAžÍ¼úm˜ŠZVY´Þ8'ÀÕâSY} Š×{¹Õ¥º(­ðíÒjßIT-ŽÏß±¨îˆ²Ãmà4×ð Âf[ù×3X?+‡¯%Ä•™QRl)™3gNÿÀÀÀUñxü$'€lóæÍZøÏòù<Ï=÷@€•+WŠ%K–t!ä¦M›Fòù¼]JBH£ „×ä[ à ^Wê(¯^q úå“{SÉð<žî¢lŠ‹V ¥Sï'嵜¨ç®ìrñºh¨¶Ò81ÎóΪ_­û¯~‡å @ü¿§¦^ýƒVªPRUÀ«};8¯AE#ÄG 0•㨚d ¤XTúJi¦jI@éþ'Ü]ËJ€¨ôp™¿ @£Ïía ¦y\kÿš+~ŸÇË ÐÛÓ³x``àºH$²Äþ6lpZ3kf ™L†§Ÿ~€•+WŠÎ`0(^yå•¡L&SÒ¤B‚¨jFCEiWkЫ+NU©Š€_\€Ë¼¬¬‚«2”ûêm-+¸pàg°=çÃOáªÑ¯Æa”;+|Õ¤ïµÞ¨Þ×»Ü7T›þý¾Ÿ™~ž]h`j|•€’*Uaj%ÀeÊ*• –ŠÀp"ý)EÿSú>·‚JU@o¦ÚÈŸºÚwÅ%Ìà•í1Yñû¥D–·š9aÌŸ?ÿ´þþþB¡Ð‚t:ͳÏ>«»üÍb2™ «W¯Æ¶mV®\),XÐŒW^yå`2™L—ã<KŠ€SÆË£:Ag®þòŠ`y„¿W¨xߪ•‡zÝ3öÇNµðô®°ýÎsν–Õ"àíìçMô ¯2á'üýªú ÿ™nþ­L‡7-°ŒèXœÊå @E p]ÔžmviUoSŠp”‚Ò_Ùü¯nçà3Î’†â ÄûYš\ ¨Šuðy®|¥¨,ü@hÑ¢EΙ3ç@ ;‘H°zõj¶lÙ2“Ï‹æN§yúé§Éf³œqÆÌ›7¯=››6m:0<<<á|ýŽW ÆŸ«%-¿¿+À#|¼Ê€ßÊVr^AèŒå~S¹|Ìü®Ç¥…‘_­„ªôkáÎðKÅ,›öÕ8áÎÔp29¤ç5^«_Ó"ïg™QçzÚï¢Ñ˜©(Á€~‚¦¼šTWߥm^¿¼YÚ¯j5¯¤:ýjšŸßÊ_-¤ŽÃð®ú™Z@ÎTWèãó¹ûÎ÷áýŽ„mÛ"w/Z´èõmmmW†æé§Ÿf×®]>šH àÔSOåÜsÏ%‹‘J¥rÛ¶mÛ¿gÏžÛ¶s†a¸RÊ”hñªR²ž(sWT¹Çô\ÕbÖcM¨e ÀûØÇ=Ïj¦ (?¥Æû9Ë óØ{Þ¨¬ä½±ª•Æ›¦éDû«¯w­ú©VÐÀõ/¡9Vÿ -õ൸â”U´³j·ÕýKA%àÕ¹¨L!„á–ÜNoršŠ©š’ùZJ) Ãp¹”Õ¾×ü­ÒìJ€ë3)iŒ^%ÌOp”0£¿¿E__ß[ÃáðY€¹k×.V¯^ÍÐÐP£?»æS(ذaÉd’óÏ?ŸžžžÐÊ•+vttD¶oß¾7•Jå Ãð[µú U˜«¦ioŠ Ë׌§hPiNð ¬zo S«>ƒ˜¦* r~¤¨tb-Ÿsï÷PRÆ\ ‚r¾-Ïw¦Þ·ð¯už›nõÍ!†§?Àt–p[ü¢ô]‚Èûç)î#¼Û”câcyðTÌà3•鯿|^ïþ¾þ}¨*‡lH) Û¶e4m_°`Ámmmo ýù|žW^y…µk×’L&}4 ¦··— .¸€E‹!„`bbbbûöí»:4"¥Ì†Q(õ˜¯²”¶g…»­ÓiÎéS¯v™sâV¼õB|… þJàòS7{Àã*UǦ~oþ½7;À[sÁ¯KQóœç*@¸SýüΫëq³¬þA+Ór”J€·Ä¬Ÿ" * ¦²À­,¸ŽS£ñßÕ±ÍDÄÛkžkÏ6ïyQk3 „0ûúúVöôô¼5 ],„±fͶmÛF¡Phô9ÐÌ¢Ñ(gœq§Ÿ~:Ñh”l6›?pàÀþÁÁÁ]©T*aF¾äȹ’àWÍä½Ê•¦4jµ:oÎzÍô(~hUA( ù°„“‡3)ødxÇîgùðÉð<_ÕЧ†à¯Š/(kÖ Ð @Ý”Zfu¿˜ð©1[Xy-ÂçVUÔ÷P u,~ãjtP[½×ÙTB¿üØÓçÀï9«~:;;çÎ;÷ºh4úFÓ4ç vìØÁÚµkµÉ_ã‹iš,^¼˜sÎ9‡¾¾>™H$&÷ìÙ³óÀû …Bº¤ä„9¥ß|γòφ‘£¢¸ŠÏà.8£–V-®ÔC×¶fþ c¿¬¿˜';ÀVö5•ÇÞô<ǯ%(µöìçZá wgA—O\—KxÎ /€3.éÙV¾_£v¿šå`xüÿª…mÛÄãñ®¹sç¾:ÿ¾iš+…ÑÑQ^zé%¶lÙ¢›úhjbY;vì`xx˜U«VqÊ)§ˆŽŽŽŽX,vúܹsûöìÙ³mddä eYÂ4MÃku¢¯3U6ŽƒßjÕ[BØ/@Ð1cÃô.çÇ2]¾úL±¸Æé‰spÅ\Láñ òšÕñQ<1Ucšb[S1c¤B30Ef€ß6µº¢‡êX¨¸œ×zMûª¯ßûØ üsknAŠçõ¢ž1 ÏßàXVe ôG<ïèëë»0‹½)œ/„ˆd2¶lÙ† mðÇ×4¦i2þ|Î<óL.\H  —ËeÇÆÆöíß¿ÛèèèÛ¶3J|@NLí(gP*Ik†«ñ Jzü; Ú¥À7Õ5àõ‰«ÂêöfUï© |§rª²¯o6nWˆ+P9wÎó¶Ï1¦Jõ›u+‡F ƒ¦ã”€©‚ÖŒÏU½Î'ª_Ô9†ZԻ߉À;ŽšŽðw¿mÛØ¶-:;;»{zz.ŒF£ŽàçóyöìÙÃúõëÙ·oŸ.ì£9bÂá0Ë–-ãôÓO§§§Ã0Èçó™ñññÝØ266vÀ²¬dÉ  ýœP0 £Ü‚¶tß[=P-T®Püå`Aá).FõêU–µ„X#¨wå<•àu h¯¹~š`I? å„?ÌÐTx”õ¶æ65`ÚHvïóµÌûEARû;UÍî3á{5ný΋ë-ø5'Œ¶¶6X¾|9}}}„B!lÛ¶óùüD*•Ú9>>¾y|||W&“)Å ¨UË鄪 (N Õ-àíVW+ÏÝ%üTA_*4ä×uðDr¸ Çt.Œé‚ö¼f~¦8^K˜B ©ñ© ÞNµÝ›¢çŽ7<§R0ðÙî÷ÜLqLå/¤”"ŸÏË®®®XWW×âp8|q xµaç !ú eYŒ388XŽØÖùüšF‡™?>Ë–-cÁ‚Äãq ÃÀ²¬|¡PK§ÓÛ'''7ïH§Ó#Rʬ$ˆ»_}¾´ê÷Z|ÛÕ O—AÜjÝzÝ'Š©æ£©â¦Z±;s¦W±ñk5ì½?­B M%¦W|÷óäê×J—;Ú?g{#L~Sùû¡²òK–,93‰|È0Œ+…}@жmR©û÷ïgpp}ûö‘L&]ã@£)cš&,Z´ˆzzzˆD"!e`dhhè¾Ý»w?§ÔðöPëä•[µ™ËE€Oú (5£Ú%à§ÀÔB÷X3Ýùä7ƒÁÛ„Ë’É$dÏž=ìÛ·ññqѯ™ñ„B!º»»Y°`‹-bþüù!( cCCC÷ìÞ½ûi ‡»yP®$üËÛJ÷]A‚Tg 8ÖWP 'Ppª¢6µ\'B!8Ò÷ðU|¾—©ÜUÇœ‚ßA+ljiJûQï>.fðêw:+D•é?NËSO=õ¬H$ò]!Äò‰‰ ¶oßΖ-[Ó&~MÓ‹Å8ãŒ3X¶lX–5288øÝ¡¡¡­J\@b<€o¶W€ZMÐ/[ œ%P«¤0‡§ÌˆIfšbfÓ±ž.‰-#ø´pœ9EàhöŸê83OÆ‚7½O¬\¹òVÓ4ÿzbb‚Gy„}ûöÍd%G£©!}}}\qÅtww366öðæÍ›EEè«Ö€ªöÂTš yW!Ü €··}M%@©”×(ŽÅýp×þ­ ôUt)àãŒsA•o°Êt‚yº‹Ù >fŠN¾®·®mÛ²¯¯/&„8MQöñkᯙ-H)9x𠃃ƒÌ™3‡`08Ï4Íx¡P(—•öâ(ÛÊÂZJY®g/¥4KÏžýüy­@oz]3üàŽVQiÉÕ¾Z8A¨˜¢ x9Ü•úLÿ±z?O9ßßIEB t,m° £^ÝF£i„˜¦ )e@J´m»,ˆ%Y]­Û^EÀþ¥?µï>ÛÔà8¿”8ðŸOfúS¾A~­*ôU´Д O‚ËMP«’_ÍF"þ,u¢Ž_ú<Æ0 qàÀTooï:)å[`÷îÝØv£-“ÍÑcóçÏg``)%™Lf8—Ë!„* 1¸ Õ”€Ò*ß)ûët´KÍÁ õ>`U–©Ç¯7°Yæ˜ZcmYó~=Ìß°¦Ÿ’ÃGJ£¿çZEÔF&“á”SNYFÿ/pF:fÿþýd2™_£9zB¡ýýý´µµ‘ËåF¶lÙò‹±±±½žâ@N@®ÔJ¸ªÅ°r¿ ÖÀ@©tp:UõóK42èïhßW¯ì“F Íqä*GB-K†·É‘ÚBÕ°m[,_¾üê`0øw†aœfP+ã™ÔVY3è'^Ŷm™Éd†÷îÝûÔþýû·–J;]í"èÜfKBÞ©ó â®P T€ê2®ÔŸ p¢-ÀO0z6ÓS³?‚Ó¹ÜK]J),Ë2-Z´$‹]cÆi@EYp^£ÜšÎcu›Ïó¦gïkœ[ï{9– C±X”­j%G¿~ž²Ïê¹ÐAŽ dŠ|qox¿Úñå´³M­Ç¯¦à)¹øV&“Ú™H$F¼+U p”‚’°Ïª–Ïþjõ@ç±SFØVÕàÄxk€O=´`žµh@sÌ))G¤”nÍ|>/ …‚ˆF£Ã0B%á¶m ”2(¥ ¡ÒýPé/è¹ H\µ3XIDAT{¶¥”!À Àr¶J·fé9³´-@Eø(BýŠbà|žòg¯Ñ p•„žª«£æðñ« §nwÇQªç¹‚òT¼ÂV|¹KŸcn/ Þr]'}϶í¬Â*u tåÔFAŠ€Wÿ²LíP‹YÊ­ê(·.}çñ´ €þ³¨9^L×w V†€0MÓ0MÓ´m«XöOP „*EK)w‚rdµ°m»ìbpj xÿ¨¬öE)ÐP8¯/Ýâ9.Ê:ï«À Ör„¾ó¼_[çZm£Ù­U¨Ù굌ç5ûæÐ;©wέOÚžpšîˆ J/VúL%°Ï¤x ™B³ôXý³SJiÅTCJi”‚ÿ…Ó.m/g””š©ÚîÖ:Oú:œÅ˜€fö±cÇ–.]ê<¬Õæ×ûXµ¨–g" ”þLÏmp,Î >XÚðî£ns, ¥¿é¬üCár-(Û•ÈjÃç³!”e¦×Ì\åÇT·'- “Z¦8gåóŠGø«f|O—8õ5à6ù{Óè¤aÒó:pŸêvÕ- ¾®¼]øtøS] ¥÷³½cR^/}>ÇT)€¨çEE¯þg/Ú iÓ™¸UÅ@¨«ðÒ6?× ¨Êë ¿?Ï>åcâ¿*w ² ®ø¨˜‚âæòvJÛË«}µ¸‹óù•™ú¹ÔÏ_s奾VSfº•j-?U{XEAúl—k@Yé×zÿZŠoY¡TM< 1Õ ²P®½ZíýSM¯ô[­h†OÜT™BQ6í««ñ)þ ¿ý3ÿïY¢rëuU Pý¥¢$轓ºsð Ót!u àaSÃ×ï÷Øàçló*~+ìr OJ¬±ÂöÊ~BÚöÎóްw.CJ) Ã(_ÓŠå©–À×J£Æ…V4Í@Ù®¬Æ]5¨íjð›\½Âß·HŠ3É++|ǧê„9ÅWÀ= û þ*÷€:&Oid×s5V•Z+pS"WÙÙ¿žo´?ï t)^KêPÞÃ/ý®æçò^KT+ê}?k€ÿI)Y-4­‹V43 QãþTÛÔíµV?¾>w*+=G ;¸PnÕ@*'àÏ•R¬%Ã@ùbŠÕXù±j ðiéYùØãœW—ÐõQ¼þñ©”€)}öTûïk þ©×µÇá5›*G—×Ôh@3c¨[è•–ã‡sluâ.oS#¶K«{·é^úå×)–£âêÄêZ‰ù(µ>ïá~­$¸9Üèö2~¦Ü&|o€êp¥*Û,õ±g¿rÀŸs«\‹Ucj•îXêXÉŽâ i´ i:¤¿ô÷3±V­¾Ô+N¡m9ÂßgBU¯8«Iw¢wõ_Køƒ;f`:ôÄ}äL©Lå ˜"°*0Ы”rìË5„ROI^ª-Òs_7qY÷‚6çkŽ­hf õæ¿»Vhž`¼ª€-EÀ—S¨” *”•{ñÅm²”‡-K‘ÙÎ}µÙŠ7þÀøÕ*嘀)¬zF?z¦Ë¦˜ª Žo n¡*·BP.ÃëQTÅ@ÝæUªÒ©VF¦úì~®/Ð €ffã—Ng@%µ®ªP‹P:¥Q™L-Š~{'ÝÊr„³s,¯)X)°â¬ô½Â¿–à'ô§ ò«¥hàØ0•ÉßwŸÒ~5³ðw ¨Ü1ï«Õøl”:ý5þÊU½ ã2•VÀÎÊß7Ï_.RÔè/EÓx´ ™IL5ayóð}M¦¥ Ò™L е,Qi™ª®ÔñUð;ׄ7/Û§+ÅЛòç àRoËÛ}jxÑöáá¯QÕNô Ìó®²ý²PTU ¼²§b (7è¥Î}Ž%@Tjö»š÷¨Vª•Ûg[]«}í2Ðh@ÓjÈQqî•„¿·„ªM1Ï™<ê}ꊿ@%…Ðkêwz¬Kå8NqÇJP. ä¸ J A¹QºâWsú§ üsų¿æè©µÊõúÏÕíÞLZiζ*€Šù_ú(ª+À¢Ô¸G”ú”WuôÃãP¯%õÐ+ôe¿ZçÊo›vÌr´ 9ÞøMĵ¶©÷ýþÔÕ¾¯‰ÅÇOu4>ž‰¼|Qi˜âT4EÀP鱨õ \·(…\<ŠŽKR•Í ¡Ê% ¸“üJ5;·ÞÌ *ЕHu–@Áãp¾Ú<¨¬ àï2ðÓ±øY&§æ@Õ>º ðìF+šãÂÃ?ìtT…½3Áøå»;Û\“XIÈ{Müå`¾ÒÊÜ* j[Q( è‚'¢ßq#89ÿNê•ÓŒÅüeÀ‰P½·ôª«èJyù_ ÍV] ¾izÑ?#ð¦ÚIE9óó«WU î´Àªìª-Ž2 ZŸW{”—U@‰P50qª¶ÇÞºzÅßbh@3p&0'ÅN !°m[Tîf•RÀÎãn¿¾:›—k÷+¥ËM t^+7 ¢ÚÔo(ïá+ø©Îýwv€úVøÞÀA=!;¼JètÑó.A EÀ±x«V)¢Òz×V„¾í§(Š@Áëð<︪jPêœYKAiw¬i]´ i(¥ >u“ŸÙ¿–ÀvVÿ~A}ê N , |GápÚ¬º:RÝo œAàèU¥W}”ÿZ¾žøs€6;Ê Á7…¦*(ÐÇ5àr¨Vªc\îÜÁª0W]ŽðÏ{ö)ßzŽéÛeÐïOLŸB¨i´ i$ªK@]¡©ù\ùû¥£4:&þ‚#t=i}jç>Õ?k•ˆr»áRoSxòü€â÷7< }ªnŸò”\TgTíÒè/hQµª§Nèç÷w¶; …¢xƒòÔÇ~ª+À¥ÔZù‹J‘!¿ÂBSe ¸>–g›VZ­hNÓå{Í”NÃ5À™Ü(ÝzéT @¹ºâ’RZ%S¿IÑ„ê2û+AŽòáR< }Ü’ÄÓ]ÐÇJPk‚õ§ÑßÕ¬¥Æjßï„×rT z­>xÞ˜€ªÔ>%& ìPîçKû¨J€ãörz- >æ»Ög¢ZÐb  ͉`ª@À²ÐVösY¨(Ž`¶J¯“^s¿'½¯|KñZwrû Åçïäú—ýþžÕ¾«Ê ùñëØ§6úqm«8ãðº j¦ÌyÌêUQùž8?Ày\˜ê–Š…ÀOøû­þÕq«q šGÏ6šãJ)*)qàÓÆ´$T½ÕöÊÑøž(}'jß”RJÛ¥mέº_À¹ï”öuŽ‹»ÀZèÇ›÷±úY\~~]ÍoÖQ«˜¬±Ÿ·2 _Õ@— ¬üÕ²ÁN€`y•ïðÙæ* d†šèהȻʷ=ŸGêÀÙ¶hj¥ØîŒg2ƒ÷œ×¨~~õ¸ÎÄfQRœ Öé¯ý Üÿœ•~U¾?àçÛ/+6uøô5ÍÍts¼ƒ —+(¯FP`Ußüƒþüî«.2Û0Œªš¸ã´¹_h@sâPÛ䪔Ýž =¨(åyu•­ÛAqb5J~SI²<&ÿršŠ¥AIùs¶ƒbú¯QÖ÷h[úVN‚öýŸ0ŽÂÍROÅ<©\«¶b-P Õªà¸,?e·©ß• @µð÷6²Õ±Q[èÛhZ½RÑw7€_ƒ¯+Àeþ÷ÞwÊòR àsÌùjÓ³]Pq TOyPVþ>Ûj}/SýÕD+ÇŸ#þµ¾O?W@9C·r`ûXªºÿy\~îš=~ÿr¼nËÃT¦ÿòcmþo ´@s"™.@M­r&&C½_šÄ¼ÒäçõqòýËé‚”bs¾_K_ç=¨!ðéªß糟˜oAs,˜*Ðy\®µ"ò}‚÷\ýÔ?•Œ—Ù_‰ø÷k%®”A<®”Õ½'˜Ðë÷÷«K0UúŸ^ý·Ú i4UÊsj0 Ú+ÀP&5µX¤RÂ׉påõ—,j~MDÉå÷KaÔ_¸[+A"µ„½_À 7J_î5ù„O¥AüWýÞ÷F£ß}M‹ '1Í c +€w›+ Ÿj“½×P+•°ª{ŸÓЧô>®cÖ¨ðWk›FSFµ”6M•*XU0H¡¯ò+…]åË÷¦*·@UÐaÕ´"ÝšT Y¿LŽÒ¶ªJ{êcÀ®;àçϯR§…¿ÆAOrš…G˜ju>µ˜2§ÿpÑJ¦'0ЋKIð <’÷Ó«~MMô„¦™qx”€©¢ìLJ_s_ׯiSøé.ÈzöuÅhá¯ñC+š‹'6@½õ£žæ<¾¯¯¥èî|š£å®­z2 ¦[ñ—oµà×LÅÿÕ Z¸µˆIEND®B`‚xscreensaver-5.36/android/project/xscreensaver/res/layout/activity_xscreensaver.xml000664 000767 000024 00000001231 12717027467 031224 0ustar00jwzstaff000000 000000